tmpk8ny_4pz/0000700000175000017500000000000013547401763013145 5ustar carstencarstentmpk8ny_4pz/src/0000755000175000017500000000000013546075722013747 5ustar carstencarstentmpk8ny_4pz/src/spectrum0000644000175000017500000001222713546075722015540 0ustar carstencarsten* Fourier Series Function for SPICE * This script is offered here for learning purposes, even if it is outdated * and superseeded by the spec function and especially by the much faster fft function. * You may use this script in conjunction with e.g. a ringoscillator output (see * the ngspice manual, chapter 17). .control begin * Variable argc delivers the number of command line parameters given by the user * after the 'spectrum' command if ($argc lt 4) echo Error: Too few arguments. echo ' 'Spectrum produces a plot containing a fourier series transformation of echo ' 'the specified vectors echo usage: spectrum startfreq stop step vec [[vec] ...] goto bottom end * Check if vectors 'time' and any input vector(s) are available * argv[n] delivers the command line entries after the 'spectrum' command, * starting with argv[1]. $argv[4-len] delivers the value of all tokens, * starting with postion 4 till the end of the command line if ( time eq time ) foreach vec $argv[4-len] if ( $vec eq $vec ) else goto bottom end end else echo ' 'Spectrum can not work without a time vector from a transient analysis. goto bottom end * generate a new plot entitled 'scratch', which will hold intermediate * results and will be discarded after their evaluation. set dt=$curplot set title=$curplottitle set curplot=new set scratch=$curplot * A vector 'span' is created in the 'scratch' plot to hold the time difference * of the transient simulation. {$dt}.time allows to access the 'time' vector * from the dt plot (which is normally named 'tranx' with x a consecutoive * integer number, depending on the amount of transient simulations already run * in the present job. let span={$dt}.time[length({$dt}.time)-1]-{$dt}.time[0] * Calculate the number of steps in all of the spectra to be evaluated below if ($argv[3] gt 0.999/span) let fpoints= ( $argv[2] - $argv[1] ) / $argv[3] +1 if (fpoints < 2) echo frequency start stop or step not correctly specified goto reset end else echo Error: time span is not long enough for a step frequency of $argv[3] Hz goto reset end let lent = length({$dt}.time) set lent = "$&lent" let nyquist = {$lent}/2/span if ($argv[2] gt nyquist) echo Error: The nyquist limit is exceeded, try a frequency less than "$&nyquist" Hz goto reset end set fpoints="$&fpoints" * generate a new plot to hold the spectra set curplot=new set spec=$curplot set curplottitle=$title set curplotname='Spectrum Analysis' * argv[3] is the third agrgument from the input line * spectrum 1 1000MEG 10MEG v(out25) * that is the delta frequency * The fcn vector(n) creates a vector of length n, its elements have * the values 0, 1, 2, 3, ..., n-2, n-1. Each element then is multiplied * with the frequency step value. let frequency=vector( $fpoints )*$argv[3] * Add an frequency offset to each element of vector 'frequency' * to suppress the (typically) large dc component. dowhile frequency[1] < ( $argv[1] + 1e-9 ) let frequency = frequency + $argv[3] end * For each input vector given on the command line, * create a new vector for complex numbers foreach vec $argv[4-len] let $vec = vector( $fpoints ) + j(vector( $fpoints )) reshape $vec [{$fpoints}] end * $scratch is a plot for intermediate results, will be destroyed during cleanup * $dt is the plot with the original data * $spec is a plot for storing the spectrum set curplot=$scratch * some test let npers=1 let test = span-2/$argv[3] + 1e-9 while test > 0 let npers = npers + 1 let test = test-1/$argv[3] end * Do the spectrum calculations let ircle = 2*pi*max(-1,({$dt}.time-{$dt}.time[{$lent}-1])*{$argv[3]}/npers) let win = 1 - cos(ircle) let ircle = npers*ircle let circle = ircle * ({$spec}.frequency[0]/$argv[3] - 1) let k=vector( $fpoints ) foreach k $&k let circle = circle + ircle foreach vec $argv[4-len] let tmp = win*{$dt}.{$vec} let {$spec}.{$vec}[{$k}] = 2*(mean(cos(circle)*tmp),mean(sin(circle)*tmp)) end end * plot (and write) the generated spectrum set curplot = $spec settype frequency frequency foreach vec $argv[4-len] let spectrum = mag({$vec}) plot spectrum write specout.out spectrum end * If you have an oscillator, fimd its frequency * as maximum of vector spectrum or goto end (uncomment next line) * goto cleanup set curplot=$scratch let counter = 0 let contents = 0 let freqmax = 0 let spectrum = {$spec}.spectrum foreach spectrum $&spectrum if counter > 4 if ( contents < $spectrum ) let contents = $spectrum set count = "$&counter" let freqmax = {$spec}.frequency[{$count}] end end let counter = counter + 1 end echo echo Osc. frequency at "$&freqmax" Hz echo goto cleanup label reset set curplot=$dt label cleanup destroy $scratch unset fpoints dt scratch spec vec k title lent label bottom end tmpk8ny_4pz/src/pkgIndex.tcl.in0000644000175000017500000000765013546075722016641 0ustar carstencarsten proc Loadspice { version dir } { package require BLT set suffix [info sharedlibextension] set library spice${suffix} global tcl_platform if { $tcl_platform(platform) == "unix" } { set library [file join $dir lib${library}] } load $library spice blt::vector create ::spice::X_Data blt::vector create ::spice::Y_Data namespace eval spice { namespace export ac help save alias sens alter altermod iplot setcirc asciiplot jobs setplot aspice setscale bg let settype linearize shell bug listing shift show cdump maxstep showmod compose newhelp noise spec cross oldhelp spice dc op spice_data define spice_header deftype plot state delete plot_datapoints status delta plot_date step plot_get_value stop diff plot_name strcmp display plot_nvars tf disto plot_title dowhile plot_variables tran dump print transpose echo pz tutorial edit quit unalias else rehash undefine end repeat unlet reset fourier reshape version spicetoblt resume where get_output rspice get_param run write goto running xgraph hardcopy rusage steps_completed blt_vnum codemodel halt loadsnap savesnap getplot } # Callback functions for the plot command # Warning: if any of these functions return an error then # spice will probably segfault as tcl/tk will overflow somewhere # Note: color is actually spelt COLOUR, which looks much better # Note: they don't work in namespace so have to make global proc spice_gr_NewViewport { } { set width 1000 set height 400 set fontwidth 12 set fontheight 24 canvas .c -width $width -height $height -background white pack .c return "$width $height $fontwidth $fontheight" } proc spice_gr_Close { } { } proc spice_gr_Clear { } { } proc spice_gr_DrawLine { x1 y1 x2 y2 } { puts "draw" .c create line [expr $x1 + 25] [expr 375 - $y1] [expr $x2 + 25] [expr 375 - $y2] } proc spice_gr_Arc { x0 y0 radius theta delta_theta } { .c create arc [expr $x0 - $radius + 25] [expr 375 - $y0 - $radius] \ [expr $x1 + $radius + 25 ] [expr 375 - $y1 + $radius] \ -start $theta -extent [expr $theta + $delta_theta] } proc spice_gr_Text {text x y} { .c create text [expr $x + 25] [expr 375 - $y] -text $text } proc spice_gr_SetLinestyle {linestyleid} { puts "SetLinestyle $linestyleid" } proc spice_gr_SetColor {colorid } { puts "SetColor $colorid $color" } proc spice_gr_Update { } { } # These seem to never be called /* proc spice_gr_DefineColor {colorid red green blue} { puts "DefineColor $colorid $red $green $blue" } proc spice_gr_DefineLinestyle {linestyleid mask} { puts "DefineLinestyle $linestyleid $mask" } proc spice_init_gui { fileName {gui 0} {batchMode 0} {rawFileName ""}} { # source tclcode if {[info procs spicewish::plot] == ""} { source [file join $::spice_library "spice/spicewish.tcl"] } if {!$batchMode} { spice::version } if {$fileName != ""} { switch [file extension $fileName] { ".tcl" { source $fileName } ".raw" { spice::load $fileName } default { spice::source $fileName if {$batchMode} { spice::run if {$rawFileName != ""} { spice::set filetype=binary spice::write $rawFileName } exit } } } } if {$gui == 1} { spicewish::gui } wm withdraw . } set ::spice_version $version set ::spice_library $dir } proc q { } { exit } set version "%VERSION%" set libdir "%LIB_DIR%" package ifneeded spice $version [list Loadspice $version $libdir] tmpk8ny_4pz/src/maths/0000755000175000017500000000000013546075722015063 5ustar carstencarstentmpk8ny_4pz/src/maths/deriv/0000755000175000017500000000000013546075722016174 5ustar carstencarstentmpk8ny_4pz/src/maths/deriv/Makefile.am0000644000175000017500000000064613546075722020236 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libderiv.la libderiv_la_SOURCES = \ atander.c \ cosderiv.c \ cubeder.c \ divderiv.c \ equalder.c \ expderiv.c \ invderiv.c \ multder.c \ plusder.c \ powderiv.c \ sqrtder.c \ tanderiv.c \ timesder.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/maths/deriv/equalder.c0000644000175000017500000000153713546075722020150 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Jaijeet S. Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/distodef.h" #include "ngspice/suffix.h" /* * EqualDeriv equates partial derivatives. */ void EqualDeriv(Dderivs *new, Dderivs *old) { new->value = old->value; new->d1_p = old->d1_p; new->d1_q = old->d1_q; new->d1_r = old->d1_r; new->d2_p2 = old->d2_p2 ; new->d2_q2 = old->d2_q2 ; new->d2_r2 = old->d2_r2 ; new->d2_pq = old->d2_pq ; new->d2_qr = old->d2_qr ; new->d2_pr = old->d2_pr ; new->d3_p3 = old->d3_p3 ; new->d3_q3 = old->d3_q3 ; new->d3_r3 = old->d3_r3 ; new->d3_p2r = old->d3_p2r ; new->d3_p2q = old->d3_p2q ; new->d3_q2r = old->d3_q2r ; new->d3_pq2 = old->d3_pq2 ; new->d3_pr2 = old->d3_pr2 ; new->d3_qr2 = old->d3_qr2 ; new->d3_pqr = old->d3_pqr ; } tmpk8ny_4pz/src/maths/deriv/expderiv.c0000644000175000017500000000413613546075722020172 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Jaijeet S. Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/distodef.h" #include "ngspice/suffix.h" /* * ExpDeriv computes the partial derivatives of the exponential * function where the argument to the function is itself a * function of three variables p, q, and r. */ void ExpDeriv(Dderivs *new, Dderivs *old) { Dderivs temp; EqualDeriv(&temp, old); new->value = exp(temp.value); new->d1_p = new->value*temp.d1_p; new->d1_q = new->value*temp.d1_q; new->d1_r = new->value*temp.d1_r; new->d2_p2 = new->value*temp.d2_p2 + temp.d1_p*new->d1_p; new->d2_q2 = new->value*temp.d2_q2 + temp.d1_q*new->d1_q; new->d2_r2 = new->value*temp.d2_r2 + temp.d1_r*new->d1_r; new->d2_pq = new->value*temp.d2_pq + temp.d1_p*new->d1_q; new->d2_qr = new->value*temp.d2_qr + temp.d1_q*new->d1_r; new->d2_pr = new->value*temp.d2_pr + temp.d1_p*new->d1_r; new->d3_p3 = new->value*temp.d3_p3 + temp.d2_p2*new->d1_p + temp.d2_p2*new->d1_p + new->d2_p2*temp.d1_p; new->d3_q3 = new->value*temp.d3_q3 + temp.d2_q2*new->d1_q + temp.d2_q2*new->d1_q + new->d2_q2*temp.d1_q; new->d3_r3 = new->value*temp.d3_r3 + temp.d2_r2*new->d1_r + temp.d2_r2*new->d1_r + new->d2_r2*temp.d1_r; new->d3_p2r = new->value*temp.d3_p2r + temp.d2_p2*new->d1_r + temp.d2_pr*new->d1_p + new->d2_pr*temp.d1_p; new->d3_p2q = new->value*temp.d3_p2q + temp.d2_p2*new->d1_q + temp.d2_pq*new->d1_p + new->d2_pq*temp.d1_p; new->d3_q2r = new->value*temp.d3_q2r + temp.d2_q2*new->d1_r + temp.d2_qr*new->d1_q + new->d2_qr*temp.d1_q; new->d3_pq2 = new->value*temp.d3_pq2 + temp.d2_q2*new->d1_p + temp.d2_pq*new->d1_q + new->d2_pq*temp.d1_q; new->d3_pr2 = new->value*temp.d3_pr2 + temp.d2_r2*new->d1_p + temp.d2_pr*new->d1_r + new->d2_pr*temp.d1_r; new->d3_qr2 = new->value*temp.d3_qr2 + temp.d2_r2*new->d1_q + temp.d2_qr*new->d1_r + new->d2_qr*temp.d1_r; new->d3_pqr = new->value*temp.d3_pqr + temp.d2_pq*new->d1_r + temp.d2_pr*new->d1_q + new->d2_qr*temp.d1_p; } tmpk8ny_4pz/src/maths/deriv/sqrtder.c0000644000175000017500000000770413546075722020034 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Jaijeet S. Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/distodef.h" #include "ngspice/suffix.h" /* * SqrtDeriv computes the partial derivatives of the sqrt * function where the argument to the function is itself a * function of three variables p, q, and r. */ void SqrtDeriv(Dderivs *new, Dderivs *old) { Dderivs temp; EqualDeriv(&temp, old); new->value = sqrt(temp.value); if (temp.value == 0.0) { new->d1_p = 0.0; new->d1_q = 0.0; new->d1_r = 0.0; new->d2_p2 = 0.0; new->d2_q2 = 0.0; new->d2_r2 = 0.0; new->d2_pq = 0.0; new->d2_qr = 0.0; new->d2_pr = 0.0; new->d3_p3 = 0.0; new->d3_q3 = 0.0; new->d3_r3 = 0.0; new->d3_p2r = 0.0; new->d3_p2q = 0.0; new->d3_q2r = 0.0; new->d3_pq2 = 0.0; new->d3_pr2 = 0.0; new->d3_qr2 = 0.0; new->d3_pqr = 0.0; } else { new->d1_p = 0.5*temp.d1_p/new->value; new->d1_q = 0.5*temp.d1_q/new->value; new->d1_r = 0.5*temp.d1_r/new->value; new->d2_p2 = 0.5/new->value * (temp.d2_p2 - 0.5 * temp.d1_p * temp.d1_p/ temp.value); new->d2_q2 = 0.5/new->value*(temp.d2_q2 -0.5 * temp.d1_q * temp.d1_q/ temp.value); new->d2_r2 = 0.5/new->value*(temp.d2_r2 -0.5 * temp.d1_r * temp.d1_r/ temp.value); new->d2_pq = 0.5/new->value*(temp.d2_pq -0.5 * temp.d1_p * temp.d1_q/ temp.value); new->d2_qr = 0.5/new->value*(temp.d2_qr -0.5 * temp.d1_q * temp.d1_r/ temp.value); new->d2_pr = 0.5/new->value*(temp.d2_pr -0.5 * temp.d1_p * temp.d1_r/ temp.value); new->d3_p3 = 0.5 * (temp.d3_p3 / new->value - 0.5 / (temp.value*new->value) * (-1.5 / temp.value * temp.d1_p * temp.d1_p * temp.d1_p + temp.d1_p*temp.d2_p2 + temp.d1_p*temp.d2_p2 + temp.d1_p*temp.d2_p2)); new->d3_q3 = 0.5 * (temp.d3_q3 / new->value - 0.5 / (temp.value*new->value) * (-1.5 / temp.value * temp.d1_q * temp.d1_q * temp.d1_q + temp.d1_q*temp.d2_q2 + temp.d1_q*temp.d2_q2 + temp.d1_q* temp.d2_q2)); new->d3_r3 = 0.5 * (temp.d3_r3 / new->value - 0.5 / (temp.value*new->value) * (-1.5 / temp.value * temp.d1_r * temp.d1_r * temp.d1_r + temp.d1_r*temp.d2_r2 + temp.d1_r*temp.d2_r2 + temp.d1_r* temp.d2_r2)); new->d3_p2r = 0.5 * (temp.d3_p2r / new->value - 0.5 / (temp.value*new->value) * (-1.5 / temp.value * temp.d1_p * temp.d1_p * temp.d1_r + temp.d1_p * temp.d2_pr + temp.d1_p * temp.d2_pr + temp.d1_r * temp.d2_p2)); new->d3_p2q = 0.5 * (temp.d3_p2q / new->value - 0.5 / (temp.value * new->value) * (-1.5/temp.value*temp.d1_p*temp.d1_p*temp.d1_q + temp.d1_p * temp.d2_pq + temp.d1_p * temp.d2_pq + temp.d1_q * temp.d2_p2)); new->d3_q2r = 0.5 * (temp.d3_q2r / new->value - 0.5 / (temp.value * new->value) * (-1.5 / temp.value * temp.d1_q * temp.d1_q * temp.d1_r + temp.d1_q*temp.d2_qr + temp.d1_q*temp.d2_qr + temp.d1_r* temp.d2_q2)); new->d3_pq2 = 0.5 * (temp.d3_pq2 / new->value - 0.5 / (temp.value * new->value) * (-1.5 / temp.value * temp.d1_q * temp.d1_q * temp.d1_p + temp.d1_q*temp.d2_pq + temp.d1_q*temp.d2_pq + temp.d1_p* temp.d2_q2)); new->d3_pr2 = 0.5 * (temp.d3_pr2 / new->value - 0.5 / (temp.value * new->value) * (-1.5/temp.value * temp.d1_r * temp.d1_r * temp.d1_p + temp.d1_r*temp.d2_pr + temp.d1_r*temp.d2_pr + temp.d1_p* temp.d2_r2)); new->d3_qr2 = 0.5 * (temp.d3_qr2 / new->value - 0.5 / (temp.value * new->value) * (-1.5/temp.value * temp.d1_r * temp.d1_r * temp.d1_q + temp.d1_r*temp.d2_qr + temp.d1_r*temp.d2_qr + temp.d1_q* temp.d2_r2)); new->d3_pqr = 0.5 * (temp.d3_pqr / new->value - 0.5 / (temp.value * new->value) * (-1.5/temp.value * temp.d1_p * temp.d1_q * temp.d1_r + temp.d1_p*temp.d2_qr + temp.d1_q*temp.d2_pr + temp.d1_r* temp.d2_pq)); } } tmpk8ny_4pz/src/maths/deriv/cosderiv.c0000644000175000017500000000625713546075722020170 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Jaijeet S. Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/distodef.h" #include "ngspice/suffix.h" /* * CosDeriv computes the partial derivatives of the cosine * function where the argument to the function is itself a * function of three variables p, q, and r. */ void CosDeriv(Dderivs *new, Dderivs *old) { Dderivs temp; EqualDeriv(&temp, old); new->value = cos (temp.value); new->d1_p = - sin(temp.value)*temp.d1_p; new->d1_q = - sin(temp.value)*temp.d1_q; new->d1_r = - sin(temp.value)*temp.d1_r; new->d2_p2 = -(cos(temp.value)*temp.d1_p*temp.d1_p + sin(temp.value)*temp.d2_p2); new->d2_q2 = -(cos(temp.value)*temp.d1_q*temp.d1_q + sin(temp.value)*temp.d2_q2); new->d2_r2 = -(cos(temp.value)*temp.d1_r*temp.d1_r + sin(temp.value)*temp.d2_r2); new->d2_pq = -(cos(temp.value)*temp.d1_p*temp.d1_q + sin(temp.value)*temp.d2_pq); new->d2_qr = -(cos(temp.value)*temp.d1_q*temp.d1_r + sin(temp.value)*temp.d2_qr); new->d2_pr = -(cos(temp.value)*temp.d1_p*temp.d1_r + sin(temp.value)*temp.d2_pr); new->d3_p3 = -(sin(temp.value)*(temp.d3_p3 - temp.d1_p*temp.d1_p*temp.d1_p) + cos(temp.value)*(temp.d1_p*temp.d2_p2 + temp.d1_p*temp.d2_p2 + temp.d1_p*temp.d2_p2)); new->d3_q3 = -(sin(temp.value)*(temp.d3_q3 - temp.d1_q*temp.d1_q*temp.d1_q) + cos(temp.value)*(temp.d1_q*temp.d2_q2 + temp.d1_q*temp.d2_q2 + temp.d1_q*temp.d2_q2)); new->d3_r3 = -(sin(temp.value)*(temp.d3_r3 - temp.d1_r*temp.d1_r*temp.d1_r) + cos(temp.value)*(temp.d1_r*temp.d2_r2 + temp.d1_r*temp.d2_r2 + temp.d1_r*temp.d2_r2)); new->d3_p2r = -(sin(temp.value)*(temp.d3_p2r - temp.d1_r*temp.d1_p*temp.d1_p) + cos(temp.value)*(temp.d1_p*temp.d2_pr + temp.d1_p*temp.d2_pr + temp.d1_r*temp.d2_p2)); new->d3_p2q = -(sin(temp.value)*(temp.d3_p2q - temp.d1_q*temp.d1_p*temp.d1_p) + cos(temp.value)*(temp.d1_p*temp.d2_pq + temp.d1_p*temp.d2_pq + temp.d1_q*temp.d2_p2)); new->d3_q2r = -(sin(temp.value)*(temp.d3_q2r - temp.d1_r*temp.d1_q*temp.d1_q) + cos(temp.value)*(temp.d1_q*temp.d2_qr + temp.d1_q*temp.d2_qr + temp.d1_r*temp.d2_q2)); new->d3_pq2 = -(sin(temp.value)*(temp.d3_pq2 - temp.d1_p*temp.d1_q*temp.d1_q) + cos(temp.value)*(temp.d1_q*temp.d2_pq + temp.d1_q*temp.d2_pq + temp.d1_p*temp.d2_q2)); new->d3_pr2 = -(sin(temp.value)*(temp.d3_pr2 - temp.d1_p*temp.d1_r*temp.d1_r) + cos(temp.value)*(temp.d1_r*temp.d2_pr + temp.d1_r*temp.d2_pr + temp.d1_p*temp.d2_r2)); new->d3_qr2 = -(sin(temp.value)*(temp.d3_qr2 - temp.d1_q*temp.d1_r*temp.d1_r) + cos(temp.value)*(temp.d1_r*temp.d2_qr + temp.d1_r*temp.d2_qr + temp.d1_q*temp.d2_r2)); new->d3_pqr = -(sin(temp.value)*(temp.d3_pqr - temp.d1_r*temp.d1_p*temp.d1_q) + cos(temp.value)*(temp.d1_q*temp.d2_pr + temp.d1_p*temp.d2_qr + temp.d1_r*temp.d2_pq)); } tmpk8ny_4pz/src/maths/deriv/tanderiv.c0000644000175000017500000000562313546075722020162 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Jaijeet S. Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/distodef.h" #include "ngspice/suffix.h" /* * TanDeriv computes the partial derivatives of the tangent * function where the argument to the function is itself a * function of three variables p, q, and r. */ void TanDeriv( Dderivs *new, Dderivs *old) { Dderivs temp; EqualDeriv(&temp, old); new->value = tan(temp.value); new->d1_p = (1 + new->value*new->value)*temp.d1_p; new->d1_q = (1 + new->value*new->value)*temp.d1_q; new->d1_r = (1 + new->value*new->value)*temp.d1_r; new->d2_p2 = (1 + new->value*new->value)*temp.d2_p2 + 2*new->value*temp.d1_p*new->d1_p; new->d2_q2 = (1 + new->value*new->value)*temp.d2_q2 + 2*new->value*temp.d1_q*new->d1_q; new->d2_r2 = (1 + new->value*new->value)*temp.d2_r2 + 2*new->value*temp.d1_r*new->d1_r; new->d2_pq = (1 + new->value*new->value)*temp.d2_pq + 2*new->value*temp.d1_p*new->d1_q; new->d2_qr = (1 + new->value*new->value)*temp.d2_qr + 2*new->value*temp.d1_q*new->d1_r; new->d2_pr = (1 + new->value*new->value)*temp.d2_pr + 2*new->value*temp.d1_p*new->d1_r; new->d3_p3 = (1 + new->value*new->value)*temp.d3_p3 +2*( new->value*( temp.d2_p2*new->d1_p + temp.d2_p2*new->d1_p + new->d2_p2* temp.d1_p) + temp.d1_p*new->d1_p*new->d1_p); new->d3_q3 = (1 + new->value*new->value)*temp.d3_q3 +2*( new->value*( temp.d2_q2*new->d1_q + temp.d2_q2*new->d1_q + new->d2_q2* temp.d1_q) + temp.d1_q*new->d1_q*new->d1_q); new->d3_r3 = (1 + new->value*new->value)*temp.d3_r3 +2*( new->value*( temp.d2_r2*new->d1_r + temp.d2_r2*new->d1_r + new->d2_r2* temp.d1_r) + temp.d1_r*new->d1_r*new->d1_r); new->d3_p2r = (1 + new->value*new->value)*temp.d3_p2r +2*( new->value*( temp.d2_p2*new->d1_r + temp.d2_pr*new->d1_p + new->d2_pr* temp.d1_p) + temp.d1_p*new->d1_p*new->d1_r); new->d3_p2q = (1 + new->value*new->value)*temp.d3_p2q +2*( new->value*( temp.d2_p2*new->d1_q + temp.d2_pq*new->d1_p + new->d2_pq* temp.d1_p) + temp.d1_p*new->d1_p*new->d1_q); new->d3_q2r = (1 + new->value*new->value)*temp.d3_q2r +2*( new->value*( temp.d2_q2*new->d1_r + temp.d2_qr*new->d1_q + new->d2_qr* temp.d1_q) + temp.d1_q*new->d1_q*new->d1_r); new->d3_pq2 = (1 + new->value*new->value)*temp.d3_pq2 +2*( new->value*( temp.d2_q2*new->d1_p + temp.d2_pq*new->d1_q + new->d2_pq* temp.d1_q) + temp.d1_q*new->d1_q*new->d1_p); new->d3_pr2 = (1 + new->value*new->value)*temp.d3_pr2 +2*( new->value*( temp.d2_r2*new->d1_p + temp.d2_pr*new->d1_r + new->d2_pr* temp.d1_r) + temp.d1_r*new->d1_r*new->d1_p); new->d3_qr2 = (1 + new->value*new->value)*temp.d3_qr2 +2*( new->value*( temp.d2_r2*new->d1_q + temp.d2_qr*new->d1_r + new->d2_qr* temp.d1_r) + temp.d1_r*new->d1_r*new->d1_q); new->d3_pqr = (1 + new->value*new->value)*temp.d3_pqr +2*( new->value*( temp.d2_pq*new->d1_r + temp.d2_pr*new->d1_q + new->d2_qr* temp.d1_p) + temp.d1_p*new->d1_q*new->d1_r); } tmpk8ny_4pz/src/maths/deriv/multder.c0000644000175000017500000000722113546075722020016 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Jaijeet S. Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/distodef.h" #include "ngspice/suffix.h" /* * MultDeriv computes the partial derivatives of the multiplication * function where the arguments to the function are * functions of three variables p, q, and r. */ void MultDeriv(Dderivs *new, Dderivs *old1, Dderivs *old2) { Dderivs temp1, temp2; EqualDeriv(&temp1, old1); EqualDeriv(&temp2, old2); new->value = temp1.value * temp2.value; new->d1_p = temp1.d1_p*temp2.value + temp1.value*temp2.d1_p; new->d1_q = temp1.d1_q*temp2.value + temp1.value*temp2.d1_q; new->d1_r = temp1.d1_r*temp2.value + temp1.value*temp2.d1_r; new->d2_p2 = temp1.d2_p2*temp2.value + temp1.d1_p*temp2.d1_p + temp1.d1_p*temp2.d1_p + temp1.value*temp2.d2_p2; new->d2_q2 = temp1.d2_q2*temp2.value + temp1.d1_q*temp2.d1_q + temp1.d1_q*temp2.d1_q + temp1.value*temp2.d2_q2; new->d2_r2 = temp1.d2_r2*temp2.value + temp1.d1_r*temp2.d1_r + temp1.d1_r*temp2.d1_r + temp1.value*temp2.d2_r2; new->d2_pq = temp1.d2_pq*temp2.value + temp1.d1_p*temp2.d1_q + temp1.d1_q*temp2.d1_p + temp1.value*temp2.d2_pq; new->d2_qr = temp1.d2_qr*temp2.value + temp1.d1_q*temp2.d1_r + temp1.d1_r*temp2.d1_q + temp1.value*temp2.d2_qr; new->d2_pr = temp1.d2_pr*temp2.value + temp1.d1_p*temp2.d1_r + temp1.d1_r*temp2.d1_p + temp1.value*temp2.d2_pr; new->d3_p3 = temp1.d3_p3*temp2.value + temp1.d2_p2*temp2.d1_p + temp1.d2_p2*temp2.d1_p + temp2.d2_p2*temp1.d1_p + temp2.d2_p2*temp1.d1_p + temp1.d2_p2*temp2.d1_p + temp2.d2_p2*temp1.d1_p + temp1.value*temp2.d3_p3; new->d3_q3 = temp1.d3_q3*temp2.value + temp1.d2_q2*temp2.d1_q + temp1.d2_q2*temp2.d1_q + temp2.d2_q2*temp1.d1_q + temp2.d2_q2*temp1.d1_q + temp1.d2_q2*temp2.d1_q + temp2.d2_q2*temp1.d1_q + temp1.value*temp2.d3_q3; new->d3_r3 = temp1.d3_r3*temp2.value + temp1.d2_r2*temp2.d1_r + temp1.d2_r2*temp2.d1_r + temp2.d2_r2*temp1.d1_r + temp2.d2_r2*temp1.d1_r + temp1.d2_r2*temp2.d1_r + temp2.d2_r2*temp1.d1_r + temp1.value*temp2.d3_r3; new->d3_p2r = temp1.d3_p2r*temp2.value + temp1.d2_p2*temp2.d1_r + temp1.d2_pr*temp2.d1_p + temp2.d2_p2*temp1.d1_r + temp2.d2_pr*temp1.d1_p + temp1.d2_pr*temp2.d1_p + temp2.d2_pr*temp1.d1_p + temp1.value*temp2.d3_p2r; new->d3_p2q = temp1.d3_p2q*temp2.value + temp1.d2_p2*temp2.d1_q + temp1.d2_pq*temp2.d1_p + temp2.d2_p2*temp1.d1_q + temp2.d2_pq*temp1.d1_p + temp1.d2_pq*temp2.d1_p + temp2.d2_pq*temp1.d1_p + temp1.value*temp2.d3_p2q; new->d3_q2r = temp1.d3_q2r*temp2.value + temp1.d2_q2*temp2.d1_r + temp1.d2_qr*temp2.d1_q + temp2.d2_q2*temp1.d1_r + temp2.d2_qr*temp1.d1_q + temp1.d2_qr*temp2.d1_q + temp2.d2_qr*temp1.d1_q + temp1.value*temp2.d3_q2r; new->d3_pq2 = temp1.d3_pq2*temp2.value + temp1.d2_q2*temp2.d1_p + temp1.d2_pq*temp2.d1_q + temp2.d2_q2*temp1.d1_p + temp2.d2_pq*temp1.d1_q + temp1.d2_pq*temp2.d1_q + temp2.d2_pq*temp1.d1_q + temp1.value*temp2.d3_pq2; new->d3_pr2 = temp1.d3_pr2*temp2.value + temp1.d2_r2*temp2.d1_p + temp1.d2_pr*temp2.d1_r + temp2.d2_r2*temp1.d1_p + temp2.d2_pr*temp1.d1_r + temp1.d2_pr*temp2.d1_r + temp2.d2_pr*temp1.d1_r + temp1.value*temp2.d3_pr2; new->d3_qr2 = temp1.d3_qr2*temp2.value + temp1.d2_r2*temp2.d1_q + temp1.d2_qr*temp2.d1_r + temp2.d2_r2*temp1.d1_q + temp2.d2_qr*temp1.d1_r + temp1.d2_qr*temp2.d1_r + temp2.d2_qr*temp1.d1_r + temp1.value*temp2.d3_qr2; new->d3_pqr = temp1.d3_pqr*temp2.value + temp1.d2_pq*temp2.d1_r + temp1.d2_pr*temp2.d1_q + temp2.d2_pq*temp1.d1_r + temp2.d2_qr*temp1.d1_p + temp1.d2_qr*temp2.d1_p + temp2.d2_pr*temp1.d1_q + temp1.value*temp2.d3_pqr; } tmpk8ny_4pz/src/maths/deriv/timesder.c0000644000175000017500000000211513546075722020153 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Jaijeet S. Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/distodef.h" #include "ngspice/suffix.h" /* * TimesDeriv computes the partial derivatives of the x*k * function where the argument to the function is itself a * function of three variables p, q, and r. k is a constant. */ void TimesDeriv(Dderivs *new, Dderivs *old, double k) { new->value = k* old->value; new->d1_p = k*old->d1_p; new->d1_q = k*old->d1_q; new->d1_r = k*old->d1_r; new->d2_p2 = k*old->d2_p2; new->d2_q2 = k*old->d2_q2; new->d2_r2 = k*old->d2_r2; new->d2_pq = k*old->d2_pq; new->d2_qr = k*old->d2_qr; new->d2_pr = k*old->d2_pr; new->d3_p3 = k*old->d3_p3; new->d3_q3 = k*old->d3_q3; new->d3_r3 = k*old->d3_r3; new->d3_p2r = k*old->d3_p2r; new->d3_p2q = k*old->d3_p2q; new->d3_q2r = k*old->d3_q2r; new->d3_pq2 = k*old->d3_pq2; new->d3_pr2 = k*old->d3_pr2; new->d3_qr2 = k*old->d3_qr2; new->d3_pqr = k*old->d3_pqr; } tmpk8ny_4pz/src/maths/deriv/divderiv.c0000644000175000017500000001262013546075722020155 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Jaijeet S. Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/distodef.h" #include "ngspice/suffix.h" /* * DivDeriv computes the partial derivatives of the division * function where the arguments to the function are * functions of three variables p, q, and r. */ void DivDeriv(Dderivs *new, Dderivs *old1, Dderivs *old2) { Dderivs num, den; EqualDeriv(&num, old1); EqualDeriv(&den, old2); new->value = num.value / den.value; new->d1_p = (num.d1_p - num.value * den.d1_p / den.value) / den.value; new->d1_q = (num.d1_q - num.value * den.d1_q / den.value) / den.value; new->d1_r = (num.d1_r - num.value * den.d1_r / den.value) / den.value; new->d2_p2 = (num.d2_p2 - den.d1_p * new->d1_p - new->value * den.d2_p2 + (den.d1_p * (new->value * den.d1_p - num.d1_p) / den.value)) / den.value; new->d2_q2 = (num.d2_q2 - den.d1_q * new->d1_q - new->value * den.d2_q2 + (den.d1_q * (new->value * den.d1_q - num.d1_q) / den.value)) / den.value; new->d2_r2 = (num.d2_r2 - den.d1_r * new->d1_r - new->value * den.d2_r2 + den.d1_r * (new->value * den.d1_r - num.d1_r) / den.value) / den.value; new->d2_pq = (num.d2_pq - den.d1_q * new->d1_p - new->value * den.d2_pq + den.d1_p * (new->value * den.d1_q - num.d1_q) / den.value) / den.value; new->d2_qr = (num.d2_qr - den.d1_r * new->d1_q - new->value * den.d2_qr + den.d1_q * (new->value * den.d1_r - num.d1_r) / den.value) / den.value; new->d2_pr = (num.d2_pr - den.d1_r * new->d1_p - new->value * den.d2_pr + den.d1_p * (new->value * den.d1_r - num.d1_r) / den.value) / den.value; new->d3_p3 = (-den.d1_p * new->d2_p2 + num.d3_p3 -den.d2_p2 * new->d1_p - den.d1_p * new->d2_p2 - new->d1_p * den.d2_p2 - new->value * den.d3_p3 + (den.d1_p * (new->d1_p * den.d1_p + new->value * den.d2_p2 - num.d2_p2) + (new->value * den.d1_p - num.d1_p) * (den.d2_p2 - den.d1_p * den.d1_p / den.value)) / den.value) / den.value; new->d3_q3 = (-den.d1_q * new->d2_q2 + num.d3_q3 -den.d2_q2 * new->d1_q - den.d1_q * new->d2_q2 - new->d1_q * den.d2_q2 - new->value * den.d3_q3 + (den.d1_q * (new->d1_q * den.d1_q + new->value * den.d2_q2 - num.d2_q2) + (new->value * den.d1_q - num.d1_q) * (den.d2_q2 - den.d1_q * den.d1_q / den.value)) / den.value) / den.value; new->d3_r3 = (-den.d1_r * new->d2_r2 + num.d3_r3 -den.d2_r2 * new->d1_r - den.d1_r * new->d2_r2 - new->d1_r * den.d2_r2 - new->value * den.d3_r3 + (den.d1_r * (new->d1_r * den.d1_r + new->value * den.d2_r2 - num.d2_r2) + (new->value * den.d1_r - num.d1_r) * (den.d2_r2 - den.d1_r * den.d1_r / den.value)) / den.value) / den.value; new->d3_p2r = (-den.d1_r * new->d2_p2 + num.d3_p2r -den.d2_pr * new->d1_p - den.d1_p * new->d2_pr - new->d1_r * den.d2_p2 - new->value * den.d3_p2r + (den.d1_p * (new->d1_r * den.d1_p + new->value * den.d2_pr - num.d2_pr) + (new->value * den.d1_p - num.d1_p) * (den.d2_pr - den.d1_p * den.d1_r / den.value)) / den.value) / den.value; new->d3_p2q = (-den.d1_q * new->d2_p2 + num.d3_p2q -den.d2_pq * new->d1_p - den.d1_p * new->d2_pq - new->d1_q * den.d2_p2 - new->value * den.d3_p2q + (den.d1_p * (new->d1_q * den.d1_p + new->value * den.d2_pq - num.d2_pq) + (new->value * den.d1_p - num.d1_p) * (den.d2_pq - den.d1_p * den.d1_q / den.value)) / den.value) / den.value; new->d3_q2r = (-den.d1_r * new->d2_q2 + num.d3_q2r -den.d2_qr * new->d1_q - den.d1_q * new->d2_qr - new->d1_r * den.d2_q2 - new->value * den.d3_q2r + (den.d1_q * (new->d1_r * den.d1_q + new->value * den.d2_qr - num.d2_qr) + (new->value * den.d1_q - num.d1_q) * (den.d2_qr - den.d1_q * den.d1_r / den.value)) / den.value) / den.value; new->d3_pq2 = (-den.d1_p * new->d2_q2 + num.d3_pq2 -den.d2_pq * new->d1_q - den.d1_q * new->d2_pq - new->d1_p * den.d2_q2 - new->value * den.d3_pq2 + (den.d1_q * (new->d1_p * den.d1_q + new->value * den.d2_pq - num.d2_pq) + (new->value * den.d1_q - num.d1_q) * (den.d2_pq - den.d1_q * den.d1_p / den.value)) / den.value) / den.value; new->d3_pr2 = (-den.d1_p * new->d2_r2 + num.d3_pr2 -den.d2_pr * new->d1_r - den.d1_r * new->d2_pr - new->d1_p * den.d2_r2 - new->value * den.d3_pr2 + (den.d1_r * (new->d1_p * den.d1_r + new->value * den.d2_pr - num.d2_pr) + (new->value * den.d1_r - num.d1_r) * (den.d2_pr - den.d1_r * den.d1_p / den.value)) / den.value) / den.value; new->d3_qr2 = (-den.d1_q * new->d2_r2 + num.d3_qr2 -den.d2_qr * new->d1_r - den.d1_r * new->d2_qr - new->d1_q * den.d2_r2 - new->value * den.d3_qr2 + (den.d1_r * (new->d1_q * den.d1_r + new->value * den.d2_qr - num.d2_qr) + (new->value * den.d1_r - num.d1_r) * (den.d2_qr - den.d1_r * den.d1_q / den.value)) / den.value) / den.value; new->d3_pqr = (-den.d1_r * new->d2_pq + num.d3_pqr -den.d2_qr * new->d1_p - den.d1_q * new->d2_pr - new->d1_r * den.d2_pq - new->value * den.d3_pqr + (den.d1_p * (new->d1_r * den.d1_q + new->value * den.d2_qr - num.d2_qr) + (new->value * den.d1_q - num.d1_q) * (den.d2_pr - den.d1_p * den.d1_r / den.value)) / den.value) / den.value; } tmpk8ny_4pz/src/maths/deriv/plusder.c0000644000175000017500000000251713546075722020023 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Jaijeet S. Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/distodef.h" #include "ngspice/suffix.h" /* * PlusDeriv computes the partial derivatives of the addition * function where the arguments to the function are * functions of three variables p, q, and r. */ void PlusDeriv(Dderivs *new, Dderivs *old1, Dderivs *old2) { new->value = old1->value + old2->value; new->d1_p = old1->d1_p + old2->d1_p; new->d1_q = old1->d1_q + old2->d1_q; new->d1_r = old1->d1_r + old2->d1_r; new->d2_p2 = old1->d2_p2 + old2->d2_p2; new->d2_q2 = old1->d2_q2 + old2->d2_q2; new->d2_r2 = old1->d2_r2 + old2->d2_r2; new->d2_pq = old1->d2_pq + old2->d2_pq; new->d2_qr = old1->d2_qr + old2->d2_qr; new->d2_pr = old1->d2_pr + old2->d2_pr; new->d3_p3 = old1->d3_p3 + old2->d3_p3; new->d3_q3 = old1->d3_q3 + old2->d3_q3; new->d3_r3 = old1->d3_r3 + old2->d3_r3; new->d3_p2r = old1->d3_p2r + old2->d3_p2r; new->d3_p2q = old1->d3_p2q + old2->d3_p2q; new->d3_q2r = old1->d3_q2r + old2->d3_q2r; new->d3_pq2 = old1->d3_pq2 + old2->d3_pq2; new->d3_pr2 = old1->d3_pr2 + old2->d3_pr2; new->d3_qr2 = old1->d3_qr2 + old2->d3_qr2; new->d3_pqr = old1->d3_pqr + old2->d3_pqr; } tmpk8ny_4pz/src/maths/deriv/invderiv.c0000644000175000017500000000552713546075722020177 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Jaijeet S. Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/distodef.h" #include "ngspice/suffix.h" /* * InvDeriv computes the partial derivatives of the 1/x * function where the argument to the function is itself a * function of three variables p, q, and r. */ void InvDeriv(Dderivs *new, Dderivs *old) { Dderivs temp; EqualDeriv(&temp, old); new->value = 1/temp.value; new->d1_p = -new->value*new->value*temp.d1_p; new->d1_q = -new->value*new->value*temp.d1_q; new->d1_r = -new->value*new->value*temp.d1_r; new->d2_p2 = -new->value*(2*new->d1_p*temp.d1_p + new->value*temp.d2_p2); new->d2_q2 = -new->value*(2*new->d1_q*temp.d1_q + new->value*temp.d2_q2); new->d2_r2 = -new->value*(2*new->d1_r*temp.d1_r + new->value*temp.d2_r2); new->d2_pq = -new->value*(2*new->d1_q*temp.d1_p + new->value*temp.d2_pq); new->d2_qr = -new->value*(2*new->d1_r*temp.d1_q + new->value*temp.d2_qr); new->d2_pr = -new->value*(2*new->d1_r*temp.d1_p + new->value*temp.d2_pr); new->d3_p3 = -(2*(temp.d1_p*new->d1_p*new->d1_p + new->value*( new->d2_p2*temp.d1_p + new->d1_p*temp.d2_p2 + new->d1_p*temp.d2_p2)) + new->value*new->value*temp.d3_p3); new->d3_q3 = -(2*(temp.d1_q*new->d1_q*new->d1_q + new->value*( new->d2_q2*temp.d1_q + new->d1_q*temp.d2_q2 + new->d1_q*temp.d2_q2)) + new->value*new->value*temp.d3_q3); new->d3_r3 = -(2*(temp.d1_r*new->d1_r*new->d1_r + new->value*( new->d2_r2*temp.d1_r + new->d1_r*temp.d2_r2 + new->d1_r*temp.d2_r2)) + new->value*new->value*temp.d3_r3); new->d3_p2r = -(2*(temp.d1_p*new->d1_p*new->d1_r + new->value*( new->d2_pr*temp.d1_p + new->d1_p*temp.d2_pr + new->d1_r*temp.d2_p2)) + new->value*new->value*temp.d3_p2r); new->d3_p2q = -(2*(temp.d1_p*new->d1_p*new->d1_q + new->value*( new->d2_pq*temp.d1_p + new->d1_p*temp.d2_pq + new->d1_q*temp.d2_p2)) + new->value*new->value*temp.d3_p2q); new->d3_q2r = -(2*(temp.d1_q*new->d1_q*new->d1_r + new->value*( new->d2_qr*temp.d1_q + new->d1_q*temp.d2_qr + new->d1_r*temp.d2_q2)) + new->value*new->value*temp.d3_q2r); new->d3_pq2 = -(2*(temp.d1_q*new->d1_q*new->d1_p + new->value*( new->d2_pq*temp.d1_q + new->d1_q*temp.d2_pq + new->d1_p*temp.d2_q2)) + new->value*new->value*temp.d3_pq2); new->d3_pr2 = -(2*(temp.d1_r*new->d1_r*new->d1_p + new->value*( new->d2_pr*temp.d1_r + new->d1_r*temp.d2_pr + new->d1_p*temp.d2_r2)) + new->value*new->value*temp.d3_pr2); new->d3_qr2 = -(2*(temp.d1_r*new->d1_r*new->d1_q + new->value*( new->d2_qr*temp.d1_r + new->d1_r*temp.d2_qr + new->d1_q*temp.d2_r2)) + new->value*new->value*temp.d3_qr2); new->d3_pqr = -(2*(temp.d1_p*new->d1_q*new->d1_r + new->value*( new->d2_qr*temp.d1_p + new->d1_q*temp.d2_pr + new->d1_r*temp.d2_pq)) + new->value*new->value*temp.d3_pqr); } tmpk8ny_4pz/src/maths/deriv/powderiv.c0000644000175000017500000000765113546075722020210 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Jaijeet S. Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/distodef.h" #include "ngspice/suffix.h" /* * PowDeriv computes the partial derivatives of the x^^m * function where the argument to the function is itself a * function of three variables p, q, and r. m is a constant. */ void PowDeriv(Dderivs *new, Dderivs *old, double emm) { Dderivs temp; EqualDeriv(&temp, old); new->value = pow(temp.value, emm); new->d1_p = emm * new->value / temp.value * temp.d1_p; new->d1_q = emm * new->value / temp.value * temp.d1_q; new->d1_r = emm * new->value / temp.value * temp.d1_r; new->d2_p2 = emm * new->value / temp.value * ((emm-1) / temp.value * temp.d1_p * temp.d1_p + temp.d2_p2); new->d2_q2 = emm * new->value / temp.value * ((emm-1) / temp.value * temp.d1_q * temp.d1_q + temp.d2_q2); new->d2_r2 = emm * new->value / temp.value * ((emm-1) / temp.value * temp.d1_r * temp.d1_r + temp.d2_r2); new->d2_pq = emm * new->value / temp.value * ((emm-1) / temp.value * temp.d1_p * temp.d1_q + temp.d2_pq); new->d2_qr = emm * new->value / temp.value * ((emm-1) / temp.value * temp.d1_q * temp.d1_r + temp.d2_qr); new->d2_pr = emm * new->value / temp.value * ((emm-1) / temp.value * temp.d1_p * temp.d1_r + temp.d2_pr); new->d3_p3 = emm * (emm-1) * new->value / (temp.value * temp.value) * ((emm-2) / temp.value * temp.d1_p * temp.d1_p * temp.d1_p + temp.d1_p * temp.d2_p2 + temp.d1_p * temp.d2_p2 + temp.d1_p * temp.d2_p2) + emm * new->value / temp.value * temp.d3_p3; new->d3_q3 = emm * (emm-1) * new->value / (temp.value * temp.value) * ((emm-2) / temp.value * temp.d1_q * temp.d1_q * temp.d1_q + temp.d1_q * temp.d2_q2 + temp.d1_q * temp.d2_q2 + temp.d1_q * temp.d2_q2) + emm * new->value / temp.value * temp.d3_q3; new->d3_r3 = emm * (emm-1) * new->value / (temp.value * temp.value) * ((emm-2) / temp.value * temp.d1_r *temp.d1_r * temp.d1_r + temp.d1_r * temp.d2_r2 + temp.d1_r * temp.d2_r2 + temp.d1_r * temp.d2_r2) + emm * new->value / temp.value * temp.d3_r3; new->d3_p2r = emm * (emm-1) * new->value / (temp.value * temp.value) * ((emm-2) / temp.value * temp.d1_p * temp.d1_p * temp.d1_r + temp.d1_p * temp.d2_pr + temp.d1_p * temp.d2_pr + temp.d1_r * temp.d2_p2) + emm * new->value / temp.value * temp.d3_p2r; new->d3_p2q = emm * (emm-1) * new->value / (temp.value * temp.value) * ((emm-2) / temp.value * temp.d1_p * temp.d1_p * temp.d1_q + temp.d1_p * temp.d2_pq + temp.d1_p * temp.d2_pq + temp.d1_q * temp.d2_p2) + emm * new->value / temp.value * temp.d3_p2q; new->d3_q2r = emm * (emm-1) * new->value / (temp.value * temp.value) * ((emm-2) / temp.value * temp.d1_q * temp.d1_q * temp.d1_r + temp.d1_q * temp.d2_qr + temp.d1_q * temp.d2_qr + temp.d1_r * temp.d2_q2) + emm * new->value / temp.value * temp.d3_q2r; new->d3_pq2 = emm * (emm-1) * new->value / (temp.value * temp.value) * ((emm-2) / temp.value * temp.d1_q * temp.d1_q * temp.d1_p + temp.d1_q * temp.d2_pq + temp.d1_q * temp.d2_pq + temp.d1_p * temp.d2_q2) + emm * new->value / temp.value * temp.d3_pq2; new->d3_pr2 = emm * (emm-1) * new->value / (temp.value * temp.value) * ((emm-2) / temp.value * temp.d1_r * temp.d1_r * temp.d1_p + temp.d1_r * temp.d2_pr + temp.d1_r * temp.d2_pr + temp.d1_p * temp.d2_r2) + emm * new->value / temp.value * temp.d3_pr2; new->d3_qr2 = emm * (emm-1) * new->value / (temp.value * temp.value) * ((emm-2) / temp.value * temp.d1_r * temp.d1_r * temp.d1_q + temp.d1_r * temp.d2_qr + temp.d1_r * temp.d2_qr + temp.d1_q * temp.d2_r2) + emm * new->value / temp.value * temp.d3_qr2; new->d3_pqr = emm * (emm-1) * new->value / (temp.value * temp.value) * ((emm-2) / temp.value * temp.d1_p * temp.d1_q * temp.d1_r + temp.d1_p * temp.d2_qr + temp.d1_q * temp.d2_pr + temp.d1_r * temp.d2_pq) + emm * new->value / temp.value * temp.d3_pqr; } tmpk8ny_4pz/src/maths/deriv/atander.c0000644000175000017500000000674513546075722017772 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Jaijeet S. Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/distodef.h" #include "ngspice/suffix.h" /* * AtanDeriv computes the partial derivatives of the arctangent * function where the argument to the atan function is itself a * function of three variables p, q, and r. */ void AtanDeriv(Dderivs *new, Dderivs *old) { Dderivs temp; EqualDeriv(&temp, old); new->value = atan( temp.value); new->d1_p = temp.d1_p / (1 + temp.value * temp.value); new->d1_q = temp.d1_q / (1 + temp.value * temp.value); new->d1_r = temp.d1_r / (1 + temp.value * temp.value); new->d2_p2 = temp.d2_p2 / (1 + temp.value * temp.value) - 2 * temp.value * new->d1_p * new->d1_p; new->d2_q2 = temp.d2_q2 / (1 + temp.value * temp.value) - 2 * temp.value * new->d1_q * new->d1_q; new->d2_r2 = temp.d2_r2 / (1 + temp.value * temp.value) - 2 * temp.value * new->d1_r * new->d1_r; new->d2_pq = temp.d2_pq / (1 + temp.value * temp.value) - 2 * temp.value * new->d1_p * new->d1_q; new->d2_qr = temp.d2_qr / (1 + temp.value * temp.value) - 2 * temp.value * new->d1_q * new->d1_r; new->d2_pr = temp.d2_pr / (1 + temp.value * temp.value) - 2 * temp.value * new->d1_p * new->d1_r; new->d3_p3 = (temp.d3_p3 - temp.d2_p2 * new->d1_p * 2 * temp.value) / (1 + temp.value * temp.value) - 2 * (new->d1_p * new->d1_p * temp.d1_p + temp.value * ( new->d2_p2 * new->d1_p + new->d2_p2 * new->d1_p)); new->d3_q3 = (temp.d3_q3 - temp.d2_q2 * new->d1_q * 2 * temp.value) / (1 + temp.value * temp.value) - 2 * (new->d1_q * new->d1_q * temp.d1_q + temp.value * ( new->d2_q2 * new->d1_q + new->d2_q2 * new->d1_q)); new->d3_r3 = (temp.d3_r3 - temp.d2_r2 * new->d1_r * 2 * temp.value) / (1 + temp.value * temp.value) - 2 * (new->d1_r * new->d1_r * temp.d1_r + temp.value * ( new->d2_r2 * new->d1_r + new->d2_r2 * new->d1_r)); new->d3_p2r = (temp.d3_p2r - temp.d2_p2 * new->d1_r * 2 * temp.value) / (1 + temp.value * temp.value) - 2 * (new->d1_p * new->d1_p * temp.d1_r + temp.value * ( new->d2_pr * new->d1_p + new->d2_pr * new->d1_p)); new->d3_p2q = (temp.d3_p2q - temp.d2_p2 * new->d1_q * 2 * temp.value) / (1 + temp.value * temp.value) - 2 * (new->d1_p * new->d1_p * temp.d1_q + temp.value * ( new->d2_pq * new->d1_p + new->d2_pq * new->d1_p)); new->d3_q2r = (temp.d3_q2r - temp.d2_q2 * new->d1_r * 2 * temp.value) / (1 + temp.value * temp.value) - 2 * (new->d1_q * new->d1_q * temp.d1_r + temp.value * ( new->d2_qr * new->d1_q + new->d2_qr * new->d1_q)); new->d3_pq2 = (temp.d3_pq2 - temp.d2_q2 * new->d1_p * 2 * temp.value) / (1 + temp.value * temp.value) - 2 * (new->d1_q * new->d1_q * temp.d1_p + temp.value * ( new->d2_pq * new->d1_q + new->d2_pq * new->d1_q)); new->d3_pr2 = (temp.d3_pr2 - temp.d2_r2 * new->d1_p * 2 * temp.value) / (1 + temp.value * temp.value) - 2 * (new->d1_r * new->d1_r * temp.d1_p + temp.value * ( new->d2_pr * new->d1_r + new->d2_pr * new->d1_r)); new->d3_qr2 = (temp.d3_qr2 - temp.d2_r2 * new->d1_q * 2 * temp.value) / (1 + temp.value * temp.value) - 2 * (new->d1_r * new->d1_r * temp.d1_q + temp.value * ( new->d2_qr * new->d1_r + new->d2_qr * new->d1_r)); new->d3_pqr = (temp.d3_pqr - temp.d2_pq * new->d1_r * 2 * temp.value) / (1 + temp.value * temp.value) - 2 * (new->d1_p * new->d1_q * temp.d1_r + temp.value * ( new->d2_pr * new->d1_q + new->d2_qr * new->d1_p)); } tmpk8ny_4pz/src/maths/deriv/cubeder.c0000644000175000017500000000640113546075722017752 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Jaijeet S. Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/distodef.h" #include "ngspice/suffix.h" /* * CubeDeriv computes the partial derivatives of the cube * function where the argument to the function is itself a * function of three variables p, q, and r. */ void CubeDeriv(Dderivs *new, Dderivs *old) { Dderivs temp; EqualDeriv(&temp, old); new->value = temp.value * temp.value * temp.value; new->d1_p = 3*temp.value*temp.value*temp.d1_p; new->d1_q = 3*temp.value*temp.value*temp.d1_q; new->d1_r = 3*temp.value*temp.value*temp.d1_r; new->d2_p2 = 3*(2*temp.value*temp.d1_p*temp.d1_p + temp.value*temp.value*temp.d2_p2); new->d2_q2 = 3*(2*temp.value*temp.d1_q*temp.d1_q + temp.value*temp.value*temp.d2_q2); new->d2_r2 = 3*(2*temp.value*temp.d1_r*temp.d1_r + temp.value*temp.value*temp.d2_r2); new->d2_pq = 3*(2*temp.value*temp.d1_p*temp.d1_q + temp.value*temp.value*temp.d2_pq); new->d2_qr = 3*(2*temp.value*temp.d1_q*temp.d1_r + temp.value*temp.value*temp.d2_qr); new->d2_pr = 3*(2*temp.value*temp.d1_p*temp.d1_r + temp.value*temp.value*temp.d2_pr); new->d3_p3 = 3*(2*(temp.d1_p*temp.d1_p*temp.d1_p + temp.value*(temp.d2_p2*temp.d1_p + temp.d2_p2*temp.d1_p + temp.d2_p2*temp.d1_p)) + temp.value*temp.value*temp.d3_p3); new->d3_q3 = 3*(2*(temp.d1_q*temp.d1_q*temp.d1_q + temp.value*(temp.d2_q2*temp.d1_q + temp.d2_q2*temp.d1_q + temp.d2_q2*temp.d1_q)) + temp.value*temp.value*temp.d3_q3); new->d3_r3 = 3*(2*(temp.d1_r*temp.d1_r*temp.d1_r + temp.value*(temp.d2_r2*temp.d1_r + temp.d2_r2*temp.d1_r + temp.d2_r2*temp.d1_r)) + temp.value*temp.value*temp.d3_r3); new->d3_p2r = 3*(2*(temp.d1_p*temp.d1_p*temp.d1_r + temp.value*(temp.d2_p2*temp.d1_r + temp.d2_pr*temp.d1_p + temp.d2_pr*temp.d1_p)) + temp.value*temp.value*temp.d3_p2r); new->d3_p2q = 3*(2*(temp.d1_p*temp.d1_p*temp.d1_q + temp.value*(temp.d2_p2*temp.d1_q + temp.d2_pq*temp.d1_p + temp.d2_pq*temp.d1_p)) + temp.value*temp.value*temp.d3_p2q); new->d3_q2r = 3*(2*(temp.d1_q*temp.d1_q*temp.d1_r + temp.value*(temp.d2_q2*temp.d1_r + temp.d2_qr*temp.d1_q + temp.d2_qr*temp.d1_q)) + temp.value*temp.value*temp.d3_q2r); new->d3_pq2 = 3*(2*(temp.d1_q*temp.d1_q*temp.d1_p + temp.value*(temp.d2_q2*temp.d1_p + temp.d2_pq*temp.d1_q + temp.d2_pq*temp.d1_q)) + temp.value*temp.value*temp.d3_pq2); new->d3_pr2 = 3*(2*(temp.d1_r*temp.d1_r*temp.d1_p + temp.value*(temp.d2_r2*temp.d1_p + temp.d2_pr*temp.d1_r + temp.d2_pr*temp.d1_r)) + temp.value*temp.value*temp.d3_pr2); new->d3_qr2 = 3*(2*(temp.d1_r*temp.d1_r*temp.d1_q + temp.value*(temp.d2_r2*temp.d1_q + temp.d2_qr*temp.d1_r + temp.d2_qr*temp.d1_r)) + temp.value*temp.value*temp.d3_qr2); new->d3_pqr = 3*(2*(temp.d1_p*temp.d1_q*temp.d1_r + temp.value*(temp.d2_pq*temp.d1_r + temp.d2_qr*temp.d1_p + temp.d2_pr*temp.d1_q)) + temp.value*temp.value*temp.d3_pqr); } tmpk8ny_4pz/src/maths/Makefile.am0000644000175000017500000000025313546075722017117 0ustar carstencarsten## Process this file with automake SUBDIRS = cmaths ni sparse poly deriv misc fft DIST_SUBDIRS = cmaths ni sparse poly deriv misc fft MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/maths/ni/0000755000175000017500000000000013546075722015471 5ustar carstencarstentmpk8ny_4pz/src/maths/ni/niniter.c0000644000175000017500000000174313546075722017312 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Gary W. Ng **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" /* * NInzIter (ckt, posDrive, negDrive) * * This routine solves the adjoint system. It assumes that the matrix has * already been loaded by a call to NIacIter, so it only alters the right * hand side vector. The unit-valued current excitation is applied * between nodes posDrive and negDrive. */ void NInzIter(CKTcircuit *ckt, int posDrive, int negDrive) { int i; /* clear out the right hand side vector */ for (i = 0; i <= SMPmatSize(ckt->CKTmatrix); i++) { ckt->CKTrhs [i] = 0.0; ckt->CKTirhs [i] = 0.0; } ckt->CKTrhs [posDrive] = 1.0; /* apply unit current excitation */ ckt->CKTrhs [negDrive] = -1.0; SMPcaSolve(ckt->CKTmatrix, ckt->CKTrhs, ckt->CKTirhs, ckt->CKTrhsSpare, ckt->CKTirhsSpare); ckt->CKTrhs [0] = 0.0; ckt->CKTirhs [0] = 0.0; } tmpk8ny_4pz/src/maths/ni/Makefile.am0000644000175000017500000000062613546075722017531 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libni.la libni_la_SOURCES = \ niaciter.c \ nicomcof.c \ niconv.c \ nidest.c \ niditer.c \ niinit.c \ niinteg.c \ niiter.c \ niniter.c \ nipred.c \ nipzmeth.c \ nireinit.c \ nisenre.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/maths/ni/nireinit.c0000644000175000017500000000222513546075722017457 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* NIreinit(ckt) * Perform reinitialization necessary for the numerical iteration * package - the matrix has now been fully accessed once, so we know * how big it is, so allocate RHS vector */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "ngspice/sperror.h" #define CKALLOC(ptr,size,type) if(( ckt->ptr =\ TMALLOC(type, size)) == NULL) return(E_NOMEM); int NIreinit( CKTcircuit *ckt) { int size; #ifdef PREDICTOR int i; #endif size = SMPmatSize(ckt->CKTmatrix); CKALLOC(CKTrhs,size+1,double); CKALLOC(CKTrhsOld,size+1,double); CKALLOC(CKTrhsSpare,size+1,double); CKALLOC(CKTirhs,size+1,double); CKALLOC(CKTirhsOld,size+1,double); CKALLOC(CKTirhsSpare,size+1,double); #ifdef PREDICTOR CKALLOC(CKTpred,size+1,double); for( i=0;i<8;i++) { CKALLOC(CKTsols[i],size+1,double); } #endif /* PREDICTOR */ ckt->CKTniState = NISHOULDREORDER | NIACSHOULDREORDER | NIPZSHOULDREORDER; return(0); } tmpk8ny_4pz/src/maths/ni/nisenre.c0000644000175000017500000000425113546075722017302 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* NIsenReinit(ckt) * Perform reinitialization necessary for the numerical iteration * package - the matrix has now been fully accessed once, so we know * how big it is, so allocate RHS vector */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "ngspice/sperror.h" #define CKALLOC(ptr,size,type) if(( ckt->ptr =\ TMALLOC(type, size)) == NULL) return(E_NOMEM); int NIsenReinit(CKTcircuit *ckt) { int size; int senparms; int i; #ifdef SENSDEBUG printf("NIsenReinit \n"); printf("senflag = %d\n",ckt->CKTsenInfo->SENinitflag); if(ckt->CKTniState & NIUNINITIALIZED) { printf("circuit uninitialized\n"); } else{ printf("circuit already initialized\n"); } #endif /* SENSDEBUG */ size = SMPmatSize(ckt->CKTmatrix); if(ckt->CKTsenInfo->SENinitflag){ if(!(ckt->CKTniState & NIUNINITIALIZED)) { #ifdef SENSDEBUG printf("NIsenReinit1\n"); #endif /* SENSDEBUG */ if(ckt->CKTrhsOp) FREE(ckt->CKTrhsOp); if(ckt->CKTsenRhs) FREE(ckt->CKTsenRhs); if(ckt->CKTseniRhs) FREE(ckt->CKTseniRhs); } senparms = ckt->CKTsenInfo->SENparms; #ifdef SENSDEBUG printf("NIsenReinit2\n"); #endif /* SENSDEBUG */ /* CKALLOC(CKTsenInfo->SEN_parmVal,senparms+1,double); */ ckt->CKTsenInfo->SENsize = size; CKALLOC(CKTrhsOp,size+1,double); CKALLOC(CKTsenRhs,size+1,double); CKALLOC(CKTseniRhs,size+1,double); CKALLOC(CKTsenInfo->SEN_Sap,size+1,double*); CKALLOC(CKTsenInfo->SEN_RHS,size+1,double*); CKALLOC(CKTsenInfo->SEN_iRHS,size+1,double*); for(i=0;i<=(size);i++){ CKALLOC(CKTsenInfo->SEN_Sap[i],senparms+1,double); CKALLOC(CKTsenInfo->SEN_RHS[i],senparms+1,double); CKALLOC(CKTsenInfo->SEN_iRHS[i],senparms+1,double); } #ifdef SENSDEBUG printf("NIsenReinit3\n"); #endif /* SENSDEBUG */ ckt->CKTsenInfo->SENinitflag = OFF; } return(0); } tmpk8ny_4pz/src/maths/ni/niinteg.c0000644000175000017500000000456113546075722017300 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* NIintegrate(ckt,geq,ceq,cap,qcap) * integrate the specified capacitor - method and order in the * ckt structure, ccap follows qcap. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" #define ccap qcap+1 int NIintegrate(CKTcircuit *ckt, double *geq, double *ceq, double cap, int qcap) { static char *ordmsg = "Illegal integration order"; static char *methodmsg = "Unknown integration method"; switch(ckt->CKTintegrateMethod) { case TRAPEZOIDAL: switch(ckt->CKTorder) { case 1: ckt->CKTstate0[ccap] = ckt->CKTag[0] * ckt->CKTstate0[qcap] + ckt->CKTag[1] * ckt->CKTstate1[qcap]; break; case 2: ckt->CKTstate0[ccap] = - ckt->CKTstate1[ccap] * ckt->CKTag[1] + ckt->CKTag[0] * ( ckt->CKTstate0[qcap] - ckt->CKTstate1[qcap] ); break; default: errMsg = TMALLOC(char, strlen(ordmsg) + 1); strcpy(errMsg,ordmsg); return(E_ORDER); } break; case GEAR: ckt->CKTstate0[ccap]=0; switch(ckt->CKTorder) { case 6: ckt->CKTstate0[ccap] += ckt->CKTag[6]* ckt->CKTstate6[qcap]; /* fall through */ case 5: ckt->CKTstate0[ccap] += ckt->CKTag[5]* ckt->CKTstate5[qcap]; /* fall through */ case 4: ckt->CKTstate0[ccap] += ckt->CKTag[4]* ckt->CKTstate4[qcap]; /* fall through */ case 3: ckt->CKTstate0[ccap] += ckt->CKTag[3]* ckt->CKTstate3[qcap]; /* fall through */ case 2: ckt->CKTstate0[ccap] += ckt->CKTag[2]* ckt->CKTstate2[qcap]; /* fall through */ case 1: ckt->CKTstate0[ccap] += ckt->CKTag[1]* ckt->CKTstate1[qcap]; ckt->CKTstate0[ccap] += ckt->CKTag[0]* ckt->CKTstate0[qcap]; break; default: return(E_ORDER); } break; default: errMsg = TMALLOC(char, strlen(methodmsg) + 1); strcpy(errMsg,methodmsg); return(E_METHOD); } *ceq = ckt->CKTstate0[ccap] - ckt->CKTag[0] * ckt->CKTstate0[qcap]; *geq = ckt->CKTag[0] * cap; return(OK); } tmpk8ny_4pz/src/maths/ni/nicomcof.c0000644000175000017500000001361713546075722017442 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" #include "ngspice/cpextern.h" /* xmu=0: Backward Euler * xmu=0.5: trapezoidal (standard) */ int NIcomCof(CKTcircuit *ckt) { double mat[8][8]; /* matrix to compute the gear coefficients in */ int i,j,k; /* generic loop indicies */ double arg; double arg1; /* this routine calculates the timestep-dependent terms used in the * numerical integration. */ /* * compute coefficients for particular integration method */ switch(ckt->CKTintegrateMethod) { case TRAPEZOIDAL: switch(ckt->CKTorder) { case 1: ckt->CKTag[0] = 1/ckt->CKTdelta; ckt->CKTag[1] = -1/ckt->CKTdelta; break; case 2: ckt->CKTag[0] = 1.0 / ckt->CKTdelta / (1.0 - ckt->CKTxmu); ckt->CKTag[1] = ckt->CKTxmu / (1.0 - ckt->CKTxmu); break; default: return(E_ORDER); } break; case GEAR: switch(ckt->CKTorder) { case 1: /* ckt->CKTag[0] = 1/ckt->CKTdelta; ckt->CKTag[1] = -1/ckt->CKTdelta; break;*/ case 2: case 3: case 4: case 5: case 6: memset(ckt->CKTag, 0, 7*sizeof(double)); ckt->CKTag[1] = -1/ckt->CKTdelta; /* first, set up the matrix */ arg=0; for(i=0;i<=ckt->CKTorder;i++) { mat[0][i]=1; } for(i=1;i<=ckt->CKTorder;i++) { mat[i][0]=0; } /* SPICE2 difference warning * the following block builds the corrector matrix * using (sum of h's)/h(final) instead of just (sum of h's) * because the h's are typically ~1e-10, so h^7 is an * underflow on many machines, but the ratio is ~1 * and produces much better results */ for(i=1;i<=ckt->CKTorder;i++) { arg += ckt->CKTdeltaOld[i-1]; arg1 = 1; for(j=1;j<=ckt->CKTorder;j++) { arg1 *= arg/ckt->CKTdelta; mat[j][i]=arg1; } } /* lu decompose */ /* weirdness warning! * The following loop (and the first one after the forward * substitution comment) start at one instead of zero * because of a SPECIAL CASE - the first column is 1 0 0 ... * thus, the first iteration of both loops does nothing, * so it is skipped */ for(i=1;i<=ckt->CKTorder;i++) { for(j=i+1;j<=ckt->CKTorder;j++) { mat[j][i] /= mat[i][i]; for(k=i+1;k<=ckt->CKTorder;k++) { mat[j][k] -= mat[j][i]*mat[i][k]; } } } /* forward substitution */ for(i=1;i<=ckt->CKTorder;i++) { for(j=i+1;j<=ckt->CKTorder;j++) { ckt->CKTag[j]=ckt->CKTag[j]-mat[j][i]*ckt->CKTag[i]; } } /* backward substitution */ ckt->CKTag[ckt->CKTorder] /= mat[ckt->CKTorder][ckt->CKTorder]; for(i=ckt->CKTorder-1;i>=0;i--) { for(j=i+1;j<=ckt->CKTorder;j++) { ckt->CKTag[i]=ckt->CKTag[i]-mat[i][j]*ckt->CKTag[j]; } ckt->CKTag[i] /= mat[i][i]; } break; default: return(E_ORDER); } break; default: return(E_METHOD); } #ifdef PREDICTOR /* ok, have the coefficients for corrector, now for the predictor */ switch(ckt->CKTintegrateMethod) { default: return(E_METHOD); case TRAPEZOIDAL: /* ADAMS-BASHFORD PREDICTOR FOR TRAPEZOIDAL CORRECTOR * MAY BE SUPPLEMENTED BY SECOND ORDER GEAR CORRECTOR * AGP(1) STORES b0 AND AGP(2) STORES b1 */ arg = ckt->CKTdelta/(2*ckt->CKTdeltaOld[1]); ckt->CKTagp[0] = 1+arg; ckt->CKTagp[1] = -arg; break; case GEAR: /* * CONSTRUCT GEAR PREDICTOR COEFICENT MATRIX * MUST STILL ACCOUNT FOR ARRAY AGP() * KEEP THE SAME NAME FOR GMAT */ memset(ckt->CKTagp, 0, 7*sizeof(double)); /* SET UP RHS OF EQUATIONS */ ckt->CKTagp[0]=1; for(i=0;i<=ckt->CKTorder;i++) { mat[0][i] = 1; } arg = 0; for(i=0;i<=ckt->CKTorder;i++){ arg += ckt->CKTdeltaOld[i]; arg1 = 1; for(j=1;j<=ckt->CKTorder;j++) { arg1 *= arg/ckt->CKTdelta; mat[j][i]=arg1; } } /* * SOLVE FOR GEAR COEFFICIENTS AGP(*) */ /* * LU DECOMPOSITION */ for(i=0;i<=ckt->CKTorder;i++) { for(j=i+1;j<=ckt->CKTorder;j++) { mat[j][i] /= mat[i][i]; for(k=i+1;k<=ckt->CKTorder;k++) { mat[j][k] -= mat[j][i]*mat[i][k]; } } } /* * FORWARD SUBSTITUTION */ for(i=0;i<=ckt->CKTorder;i++) { for(j=i+1;j<=ckt->CKTorder;j++) { ckt->CKTagp[j] -= mat[j][i]*ckt->CKTagp[i]; } } /* * BACKWARD SUBSTITUTION */ ckt->CKTagp[ckt->CKTorder] /= mat[ckt->CKTorder][ckt->CKTorder]; for(i=ckt->CKTorder-1;i>=0;i--) { for(j=i+1;j<=ckt->CKTorder;j++) { ckt->CKTagp[i] -= mat[i][j]*ckt->CKTagp[j]; } ckt->CKTagp[i] /= mat[i][i]; } /* * FINISHED */ break; } #endif /* PREDICTOR */ return(OK); } tmpk8ny_4pz/src/maths/ni/nipzmeth.c0000644000175000017500000002242313546075722017476 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #include "ngspice/ngspice.h" #include "ngspice/pzdefs.h" #include "ngspice/complex.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #ifdef PZDEBUG #define DEBUG(N) if (Debug >= (unsigned) (N)) static unsigned int Debug = 3; #endif extern void zaddeq(double *a, int *amag, double x, int xmag, double y, int ymag); extern int CKTpzTrapped; double NIpzK; int NIpzK_mag; int NIpzSym(PZtrial **set, PZtrial *new) { return NIpzSym2(set, new); } int NIpzComplex(PZtrial **set, PZtrial *new) { return NIpzSym2(set, new); } int NIpzMuller(PZtrial **set, PZtrial *newtry) { SPcomplex A, B, C, D, E; SPcomplex h0, h1; SPcomplex lambda_i, delta_i; double scale[3]; double q; int mag[3], magx, min; int i, j , total; min = -999999; j = 0; total = 0; for (i = 0; i < 3; i++) { if (set[i]->f_def.real != 0.0 || set[i]->f_def.imag != 0.0) { if (min < set[i]->mag_def - 50) min = set[i]->mag_def - 50; total += set[i]->mag_def; j += 1; } } magx = total / j; if (magx < min) magx = min; #ifdef PZDEBUG DEBUG(2) fprintf(stderr, "Base scale: %d / %d (0: %d, 1: %d, 2: %d)\n", magx, min, set[0]->mag_def, set[1]->mag_def, set[2]->mag_def); #endif for (i = 0; i < 3; i++) { mag[i] = set[i]->mag_def - magx; scale[i] = 1.0; while (mag[i] > 0) { scale[i] *= 2.0; mag[i] -= 1; } if (mag[i] < -90) scale[i] = 0.0; else { while (mag[i] < 0) { scale[i] /= 2.0; mag[i] += 1; } } } C_SUBEQ(h0,set[0]->s,set[1]->s); C_SUBEQ(h1,set[1]->s,set[2]->s); C_DIVEQ(lambda_i,h0,h1); /* Quadratic interpolation (Muller's method) */ C_EQ(delta_i,lambda_i); delta_i.real += 1.0; /* Quadratic coefficients A, B, C (Note: reciprocal form of eqn) */ /* A = lambda_i * (f[i-2] * lambda_i - f[i-1] * delta_i + f[i]) */ C_MULEQ(A,scale[2] * set[2]->f_def,lambda_i); C_MULEQ(C,scale[1] * set[1]->f_def,delta_i); C_SUB(A,C); C_ADD(A,scale[0] * set[0]->f_def); C_MUL(A,lambda_i); /* B = f[i-2] * lambda_i * lambda_1 - f[i-1] * delta_i * delta_i + f[i] * (lambda_i + delta_i) */ C_MULEQ(B,lambda_i,lambda_i); C_MUL(B,scale[2] * set[2]->f_def); C_MULEQ(C,delta_i,delta_i); C_MUL(C,scale[1] * set[1]->f_def); C_SUB(B,C); C_ADDEQ(C,lambda_i,delta_i); C_MUL(C,scale[0] * set[0]->f_def); C_ADD(B,C); /* C = delta_i * f[i] */ C_MULEQ(C,delta_i,scale[0] * set[0]->f_def); while (fabs(A.real) > 1.0 || fabs(A.imag) > 1.0 || fabs(B.real) > 1.0 || fabs(B.imag) > 1.0 || fabs(C.real) > 1.0 || fabs(C.imag) > 1.0) { A.real /= 2.0; B.real /= 2.0; C.real /= 2.0; A.imag /= 2.0; B.imag /= 2.0; C.imag /= 2.0; } /* discriminate = B * B - 4 * A * C */ C_MULEQ(D,B,B); C_MULEQ(E,4.0 * A,C); C_SUB(D,E); #ifdef PZDEBUG DEBUG(2) fprintf(stderr, " Discr: (%g,%g)\n",D.real, D.imag); #endif C_SQRT(D); #ifdef PZDEBUG DEBUG(1) fprintf(stderr, " sqrtDiscr: (%g,%g)\n",D.real, D.imag); #endif #ifndef notdef /* Maximize denominator */ #ifdef PZDEBUG DEBUG(1) fprintf(stderr, " B: (%g,%g)\n",B.real, B.imag); #endif /* Dot product */ q = B.real * D.real + B.imag * D.imag; if (q > 0.0) { #ifdef PZDEBUG DEBUG(1) fprintf(stderr, " add\n"); #endif C_ADD(B,D); } else { #ifdef PZDEBUG DEBUG(1) fprintf(stderr, " sub\n"); #endif C_SUB(B,D); } #else /* For trapped zeros, the step should always be positive */ if (C.real >= 0.0) { if (B.real < D.real) { C_SUB(B,D); } else { C_ADD(B,D); } } else { if (B.real > D.real) { C_SUB(B,D); } else { C_ADD(B,D); } } #endif #ifdef PZDEBUG DEBUG(1) fprintf(stderr, " C: (%g,%g)\n", C.real, C.imag); #endif C_DIV(C,-0.5 * B); newtry->next = NULL; #ifdef PZDEBUG DEBUG(1) fprintf(stderr, " lambda: (%g,%g)\n",C.real, C.imag); #endif C_MULEQ(newtry->s,h0,C); #ifdef PZDEBUG DEBUG(1) fprintf(stderr, " h: (%g,%g)\n", newtry->s.real, newtry->s.imag); #endif C_ADD(newtry->s,set[0]->s); #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "New try: (%g,%g)\n", newtry->s.real, newtry->s.imag); #endif return OK; } int NIpzSym2(PZtrial **set, PZtrial *new) { double a, b, c, x0, x1; double dx0, dx1, d2x, diff; double disc; int a_mag, b_mag, c_mag; int tmag; int error; int disc_mag; int new_mag = 0; error = OK; /* NIpzK = 0.0; NIpzK_mag = 0; */ /* Solve for X = the distance from set[1], where X > 0 => root < set[1] */ dx0 = set[1]->s.real - set[0]->s.real; dx1 = set[2]->s.real - set[1]->s.real; x0 = (set[0]->s.real + set[1]->s.real) / 2.0; x1 = (set[1]->s.real + set[2]->s.real) / 2.0; /* d2x = x1 - x0; */ d2x = (set[2]->s.real - set[0]->s.real) / 2.0; zaddeq(&a, &a_mag, set[1]->f_def.real, set[1]->mag_def, -set[0]->f_def.real, set[0]->mag_def); tmag = 0; R_NORM(dx0,tmag); a /= dx0; a_mag -= tmag; R_NORM(a,a_mag); zaddeq(&b, &b_mag, set[2]->f_def.real, set[2]->mag_def, -set[1]->f_def.real, set[1]->mag_def); tmag = 0; R_NORM(dx1,tmag); b /= dx1; b_mag -= tmag; R_NORM(b,b_mag); zaddeq(&c, &c_mag, b, b_mag, -a, a_mag); tmag = 0; R_NORM(d2x,tmag); c /= d2x; /* = f'' */ c_mag -= tmag; R_NORM(c,c_mag); if (c == 0.0 || ((a == 0.0 || c_mag < a_mag - 40) && (b = 0.0 ||c_mag < b_mag - 40))) { /*fprintf(stderr, "\t- linear (%g, %d)\n", c, c_mag);*/ if (a == 0.0) { a = b; a_mag = b_mag; } if (a != 0.0) { new->s.real = - set[1]->f_def.real / a; a_mag -= set[1]->mag_def; while (a_mag > 0) { new->s.real /= 2.0; a_mag -= 1; } while (a_mag < 0) { new->s.real *= 2.0; a_mag += 1; } new->s.real += set[1]->s.real; } else new->s.real = set[1]->s.real; } else { /* Quadratic power series about set[1]->s.real */ /* c : d2f/dx2 @ s1 (assumed constant for all s), or "2A" */ /* a : (df/dx) / (d2f/dx2) @ s1, or "B/2A" */ a /= c; R_NORM(a,a_mag); a_mag -= c_mag; diff = set[1]->s.real - x0; tmag = 0; R_NORM(diff,tmag); zaddeq(&a, &a_mag, a, a_mag, diff, tmag); /* b : f(s1) / (1/2 d2f/ds2), or "C / A" */ b = 2.0 * set[1]->f_def.real / c; b_mag = set[1]->mag_def - c_mag; R_NORM(b,b_mag); disc = a * a; disc_mag = 2 * a_mag; /* disc = a^2 - b :: (B/2A)^2 - C/A */ zaddeq(&disc, &disc_mag, disc, disc_mag, - b, b_mag); if (disc < 0.0) { /* Look for minima instead, but save radical for later work */ disc *= -1; new_mag = 1; } if (disc_mag % 2 == 0) disc = sqrt(disc); else { disc = sqrt(2.0 * disc); disc_mag -= 1; } disc_mag /= 2; if (new_mag != 0) { if (NIpzK == 0.0) { NIpzK = disc; NIpzK_mag = disc_mag; #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "New NIpzK: %g*2^%d\n", NIpzK, NIpzK_mag); #endif } else { #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "Ignore NIpzK: %g*2^%d for previous value of %g*2^%d\n", disc, disc_mag, NIpzK, NIpzK_mag); #endif } disc = 0.0; disc_mag = 0; } /* NOTE: c & b get reused here-after */ if (a * disc >= 0.0) { zaddeq(&c, &c_mag, a, a_mag, disc, disc_mag); } else { zaddeq(&c, &c_mag, a, a_mag, -disc, disc_mag); } /* second root = C / (first root) */ if (c != 0.0) { b /= c; b_mag -= c_mag; } else { /* special case */ b = 0.0; b_mag = 0; } zaddeq(&b, &b_mag, set[1]->s.real, 0, -b, b_mag); zaddeq(&c, &c_mag, set[1]->s.real, 0, -c, c_mag); while (b_mag > 0) { b *= 2.0; b_mag -= 1; } while (b_mag < 0) { b /= 2.0; b_mag += 1; } while (c_mag > 0) { c *= 2.0; c_mag -= 1; } while (c_mag < 0) { c /= 2.0; c_mag += 1; } #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "@@@ (%.15g) -vs- (%.15g)\n", b, c); #endif /* XXXX */ if (b < set[0]->s.real || b > set[2]->s.real) { /* b not in range */ if (c < set[0]->s.real || c > set[2]->s.real) { #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "@@@ both are junk\n"); #endif if (CKTpzTrapped == 1) new->s.real = (set[0]->s.real + set[1]->s.real) / 2.0; else if (CKTpzTrapped == 2) new->s.real = (set[1]->s.real + set[2]->s.real) / 2.0; else if (CKTpzTrapped == 3) { if (fabs(set[1]->s.real - c) < fabs(set[1]->s.real - b)) { #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "@@@ mix w/second (c)\n"); #endif new->s.real = (set[1]->s.real + c) / 2.0; } else { #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "@@@ mix w/first (b)\n"); #endif new->s.real = (set[1]->s.real + b) / 2.0; } } else MERROR(E_PANIC,"Lost numerical stability"); } else { #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "@@@ take second (c)\n"); #endif new->s.real = c; } } else { /* b in range */ if (c < set[0]->s.real || c > set[2]->s.real) { #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "@@@ take first (b)\n"); #endif new->s.real = b; } else { /* Both in range -- take the smallest mag */ if (a > 0.0) { #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "@@@ push -- first (b)\n"); #endif new->s.real = b; } else { #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "@@@ push -- first (b)\n"); #endif new->s.real = c; } } } } new->s.imag = 0.0; return error; } tmpk8ny_4pz/src/maths/ni/ChangeLog0000644000175000017500000000121413546075722017241 0ustar carstencarsten2000-07-18 Arno W. Peters * niconv.c: Removed NEWCONV. This symbol was defined by default, adjusted the code to this reality. 1999-09-03 Emmanuel Rouat * *.h: added header file for each .c file 1999-09-01 Paolo Nenzi * *.c: replaced GENERIC with void and removed #include suffix.h. 1999-08-12 Emmanuel Rouat * nipzmeth.c (NIpzMuller): removed unused variables * *.c : made functions ANSI compliant using 'protoize' 1999-08-08 Emmanuel Rouat * niiter.c: changed HAS_SENSE2 in WANT_SENSE2 tmpk8ny_4pz/src/maths/ni/niaciter.c0000644000175000017500000000470613546075722017442 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified 1999 Emmanuel Rouat **********/ /* * NIacIter(ckt) * * This subroutine performs the actual numerical iteration. * It uses the sparse matrix stored in the NIstruct by NIinit, * along with the matrix loading program, the load data, the * convergence test function, and the convergence parameters * - return value is non-zero for convergence failure */ #include "ngspice/ngspice.h" #include "ngspice/trandefs.h" #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" int NIacIter(CKTcircuit *ckt) { int error; int ignore; double startTime; retry: ckt->CKTnoncon=0; error = CKTacLoad(ckt); if(error) return(error); if(ckt->CKTniState & NIACSHOULDREORDER) { startTime = SPfrontEnd->IFseconds(); error = SMPcReorder(ckt->CKTmatrix,ckt->CKTpivotAbsTol, ckt->CKTpivotRelTol,&ignore); ckt->CKTstat->STATreorderTime += SPfrontEnd->IFseconds()- startTime; ckt->CKTniState &= ~NIACSHOULDREORDER; if(error != 0) { /* either singular equations or no memory, in either case, * let caller handle problem */ return(error); } } else { startTime = SPfrontEnd->IFseconds(); error = SMPcLUfac(ckt->CKTmatrix,ckt->CKTpivotAbsTol); ckt->CKTstat->STATdecompTime += SPfrontEnd->IFseconds()-startTime; if(error != 0) { if(error == E_SINGULAR) { /* the problem is that the matrix can't be solved with the * current LU factorization. Maybe if we reload and * try to reorder again it will help... */ ckt->CKTniState |= NIACSHOULDREORDER; goto retry; } return(error); /* can't handle E_BADMATRIX, so let caller */ } } startTime = SPfrontEnd->IFseconds(); SMPcSolve(ckt->CKTmatrix,ckt->CKTrhs, ckt->CKTirhs, ckt->CKTrhsSpare, ckt->CKTirhsSpare); ckt->CKTstat->STATsolveTime += SPfrontEnd->IFseconds() - startTime; ckt->CKTrhs[0] = 0; ckt->CKTrhsSpare[0] = 0; ckt->CKTrhsOld[0] = 0; ckt->CKTirhs[0] = 0; ckt->CKTirhsSpare[0] = 0; ckt->CKTirhsOld[0] = 0; SWAP(double *, ckt->CKTirhs, ckt->CKTirhsOld); SWAP(double *, ckt->CKTrhs, ckt->CKTrhsOld); return(OK); } tmpk8ny_4pz/src/maths/ni/niditer.c0000644000175000017500000000432313546075722017275 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S. Roychowdhury **********/ /* * NIdIter(ckt) * * This is absolutely the same as NIacIter, except that the RHS * vector is stored before acLoad so that it is not lost. Moreover, * acLoading is done only if reordering is necessary * */ #include "ngspice/ngspice.h" #include "ngspice/trandefs.h" #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" int NIdIter(CKTcircuit *ckt) { int error; int ignore; ckt->CKTnoncon = 0; goto skip; retry: ckt->CKTnoncon=0; SWAP(double *, ckt->CKTrhs, ckt->CKTrhsSpare); SWAP(double *, ckt->CKTirhs, ckt->CKTirhsSpare); error = CKTacLoad(ckt); if(error) return(error); SWAP(double *, ckt->CKTrhs, ckt->CKTrhsSpare); SWAP(double *, ckt->CKTirhs, ckt->CKTirhsSpare); skip: if(ckt->CKTniState & NIACSHOULDREORDER) { error = SMPcReorder(ckt->CKTmatrix,ckt->CKTpivotAbsTol, ckt->CKTpivotRelTol,&ignore); ckt->CKTniState &= ~NIACSHOULDREORDER; if(error != 0) { /* either singular equations or no memory, in either case, * let caller handle problem */ return(error); } } else { error = SMPcLUfac(ckt->CKTmatrix,ckt->CKTpivotAbsTol); if(error != 0) { if(error == E_SINGULAR) { /* the problem is that the matrix can't be solved with the * current LU factorization. Maybe if we reload and * try to reorder again it will help... */ ckt->CKTniState |= NIACSHOULDREORDER; goto retry; } return(error); /* can't handle E_BADMATRIX, so let caller */ } } SMPcSolve(ckt->CKTmatrix,ckt->CKTrhs, ckt->CKTirhs, ckt->CKTrhsSpare, ckt->CKTirhsSpare); ckt->CKTrhs[0] = 0; ckt->CKTrhsSpare[0] = 0; ckt->CKTrhsOld[0] = 0; ckt->CKTirhs[0] = 0; ckt->CKTirhsSpare[0] = 0; ckt->CKTirhsOld[0] = 0; SWAP(double *, ckt->CKTirhs, ckt->CKTirhsOld); SWAP(double *, ckt->CKTrhs, ckt->CKTrhsOld); return(OK); } tmpk8ny_4pz/src/maths/ni/nipred.c0000644000175000017500000001104213546075722017114 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* * NIpred(ckt) * * This subroutine does node voltage prediction based on the * integration method */ #include "ngspice/ngspice.h" #include "ngspice/trandefs.h" #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" #include "ngspice/smpdefs.h" #ifdef PREDICTOR int NIpred(CKTcircuit * ckt) { int i; int size; CKTnode *node; /* for our prediction, we have: * ckt->CKTrhs[] is the current solution * ckt->CKTsols[8][] is the set of previous solutions * * we want: * ckt->CKTpred[] = ckt->CKTrhs = prediction based on proper number of * previous time steps. */ size = SMPmatSize(ckt->CKTmatrix); switch (ckt->CKTintegrateMethod) { case TRAPEZOIDAL: { double dd0, dd1, a, b; switch (ckt->CKTorder) { case 1: for (i = 0; i <= size; i++) { dd0 = (ckt->CKTsols[0][i] - ckt->CKTsols[1][i]) / ckt->CKTdeltaOld[1]; ckt->CKTpred[i] = ckt->CKTrhs[i] = ckt->CKTsols[0][i] + ckt->CKTdeltaOld[0] * dd0; } break; case 2: for (i = 0; i <= size; i++) { b = - ckt->CKTdeltaOld[0] / (2*ckt->CKTdeltaOld[1]); a = 1 - b; dd0 = (ckt->CKTsols[0][i] - ckt->CKTsols[1][i]) / ckt->CKTdeltaOld[1]; dd1 = (ckt->CKTsols[1][i] - ckt->CKTsols[2][i]) / ckt->CKTdeltaOld[2]; ckt->CKTpred[i] = ckt->CKTrhs[i] = ckt->CKTsols[0][i] + (b * dd1 + a * dd0) * ckt->CKTdeltaOld[0]; } break; default: return(E_ORDER); } } break; case GEAR: node = ckt->CKTnodes; switch (ckt->CKTorder) { case 1: for (i = 0; i <= size; i++) { ckt->CKTpred[i] = ckt->CKTrhs[i] = ckt->CKTagp[0] * ckt->CKTsols[0][i] + ckt->CKTagp[1] * ckt->CKTsols[1][i] ; node = node->next; } break; case 2: for (i = 0; i <= size; i++) { ckt->CKTpred[i] = ckt->CKTrhs[i] = ckt->CKTagp[0] * ckt->CKTsols[0][i] + ckt->CKTagp[1] * ckt->CKTsols[1][i] + ckt->CKTagp[2] * ckt->CKTsols[2][i] ; node = node->next; } break; case 3: for (i = 0; i <= size; i++) { ckt->CKTpred[i] = ckt->CKTrhs[i] = ckt->CKTagp[0] * ckt->CKTsols[0][i] + ckt->CKTagp[1] * ckt->CKTsols[1][i] + ckt->CKTagp[2] * ckt->CKTsols[2][i] + ckt->CKTagp[3] * ckt->CKTsols[3][i] ; } break; case 4: for (i = 0; i <= size; i++) { ckt->CKTpred[i] = ckt->CKTrhs[i] = ckt->CKTagp[0] * ckt->CKTsols[0][i] + ckt->CKTagp[1] * ckt->CKTsols[1][i] + ckt->CKTagp[2] * ckt->CKTsols[2][i] + ckt->CKTagp[3] * ckt->CKTsols[3][i] + ckt->CKTagp[4] * ckt->CKTsols[4][i] ; } break; case 5: for (i = 0; i <= size; i++) { ckt->CKTpred[i] = ckt->CKTrhs[i] = ckt->CKTagp[0] * ckt->CKTsols[0][i] + ckt->CKTagp[1] * ckt->CKTsols[1][i] + ckt->CKTagp[2] * ckt->CKTsols[2][i] + ckt->CKTagp[3] * ckt->CKTsols[3][i] + ckt->CKTagp[4] * ckt->CKTsols[4][i] + ckt->CKTagp[5] * ckt->CKTsols[5][i] ; } break; case 6: for (i = 0; i <= size; i++) { ckt->CKTpred[i] = ckt->CKTrhs[i] = ckt->CKTagp[0] * ckt->CKTsols[0][i] + ckt->CKTagp[1] * ckt->CKTsols[1][i] + ckt->CKTagp[2] * ckt->CKTsols[2][i] + ckt->CKTagp[3] * ckt->CKTsols[3][i] + ckt->CKTagp[4] * ckt->CKTsols[4][i] + ckt->CKTagp[5] * ckt->CKTsols[5][i] + ckt->CKTagp[6] * ckt->CKTsols[6][i] ; } break; default: return(E_ORDER); } break; default: return(E_METHOD); } return(OK); } #else int Dummy_Symbol; #endif /* PREDICTOR */ tmpk8ny_4pz/src/maths/ni/niiter.c0000644000175000017500000002277313546075722017142 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2001 AlansFixes **********/ /* * NIiter(ckt,maxIter) * * This subroutine performs the actual numerical iteration. * It uses the sparse matrix stored in the circuit struct * along with the matrix loading program, the load data, the * convergence test function, and the convergence parameters */ #include "ngspice/ngspice.h" #include "ngspice/trandefs.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "ngspice/sperror.h" /* NIiter() - return value is non-zero for convergence failure */ int NIiter(CKTcircuit *ckt, int maxIter) { double startTime, *OldCKTstate0 = NULL; int error, i, j; int iterno = 0; int ipass = 0; /* some convergence issues that get resolved by increasing max iter */ if (maxIter < 100) maxIter = 100; if ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) { SWAP(double *, ckt->CKTrhs, ckt->CKTrhsOld); error = CKTload(ckt); if (error) return(error); return(OK); } #ifdef WANT_SENSE2 if (ckt->CKTsenInfo) { error = NIsenReinit(ckt); if (error) return(error); } #endif if (ckt->CKTniState & NIUNINITIALIZED) { error = NIreinit(ckt); if (error) { #ifdef STEPDEBUG printf("re-init returned error \n"); #endif return(error); } } /* OldCKTstate0 = TMALLOC(double, ckt->CKTnumStates + 1); */ for (;;) { ckt->CKTnoncon = 0; #ifdef NEWPRED if (!(ckt->CKTmode & MODEINITPRED)) #endif { error = CKTload(ckt); /* printf("loaded, noncon is %d\n", ckt->CKTnoncon); */ /* fflush(stdout); */ iterno++; if (error) { ckt->CKTstat->STATnumIter += iterno; #ifdef STEPDEBUG printf("load returned error \n"); #endif FREE(OldCKTstate0); return (error); } /* printf("after loading, before solving\n"); */ /* CKTdump(ckt); */ if (!(ckt->CKTniState & NIDIDPREORDER)) { error = SMPpreOrder(ckt->CKTmatrix); if (error) { ckt->CKTstat->STATnumIter += iterno; #ifdef STEPDEBUG printf("pre-order returned error \n"); #endif FREE(OldCKTstate0); return(error); /* badly formed matrix */ } ckt->CKTniState |= NIDIDPREORDER; } if ((ckt->CKTmode & MODEINITJCT) || ((ckt->CKTmode & MODEINITTRAN) && (iterno == 1))) { ckt->CKTniState |= NISHOULDREORDER; } if (ckt->CKTniState & NISHOULDREORDER) { startTime = SPfrontEnd->IFseconds(); error = SMPreorder(ckt->CKTmatrix, ckt->CKTpivotAbsTol, ckt->CKTpivotRelTol, ckt->CKTdiagGmin); ckt->CKTstat->STATreorderTime += SPfrontEnd->IFseconds() - startTime; if (error) { /* new feature - we can now find out something about what is * wrong - so we ask for the troublesome entry */ SMPgetError(ckt->CKTmatrix, &i, &j); SPfrontEnd->IFerrorf (ERR_WARNING, "singular matrix: check nodes %s and %s\n", NODENAME(ckt, i), NODENAME(ckt, j)); ckt->CKTstat->STATnumIter += iterno; #ifdef STEPDEBUG printf("reorder returned error \n"); #endif FREE(OldCKTstate0); return(error); /* can't handle these errors - pass up! */ } ckt->CKTniState &= ~NISHOULDREORDER; } else { startTime = SPfrontEnd->IFseconds(); error = SMPluFac(ckt->CKTmatrix, ckt->CKTpivotAbsTol, ckt->CKTdiagGmin); ckt->CKTstat->STATdecompTime += SPfrontEnd->IFseconds() - startTime; if (error) { if (error == E_SINGULAR) { ckt->CKTniState |= NISHOULDREORDER; DEBUGMSG(" forced reordering....\n"); continue; } /* CKTload(ckt); */ /* SMPprint(ckt->CKTmatrix, stdout); */ /* seems to be singular - pass the bad news up */ ckt->CKTstat->STATnumIter += iterno; #ifdef STEPDEBUG printf("lufac returned error \n"); #endif FREE(OldCKTstate0); return(error); } } /* moved it to here as if xspice is included then CKTload changes CKTnumStates the first time it is run */ if (!OldCKTstate0) OldCKTstate0 = TMALLOC(double, ckt->CKTnumStates + 1); memcpy(OldCKTstate0, ckt->CKTstate0, (size_t) ckt->CKTnumStates * sizeof(double)); startTime = SPfrontEnd->IFseconds(); SMPsolve(ckt->CKTmatrix, ckt->CKTrhs, ckt->CKTrhsSpare); ckt->CKTstat->STATsolveTime += SPfrontEnd->IFseconds() - startTime; #ifdef STEPDEBUG /*XXXX*/ if (ckt->CKTrhs[0] != 0.0) printf("NIiter: CKTrhs[0] = %g\n", ckt->CKTrhs[0]); if (ckt->CKTrhsSpare[0] != 0.0) printf("NIiter: CKTrhsSpare[0] = %g\n", ckt->CKTrhsSpare[0]); if (ckt->CKTrhsOld[0] != 0.0) printf("NIiter: CKTrhsOld[0] = %g\n", ckt->CKTrhsOld[0]); /*XXXX*/ #endif ckt->CKTrhs[0] = 0; ckt->CKTrhsSpare[0] = 0; ckt->CKTrhsOld[0] = 0; if (iterno > maxIter) { ckt->CKTstat->STATnumIter += iterno; /* we don't use this info during transient analysis */ if (ckt->CKTcurrentAnalysis != DOING_TRAN) { FREE(errMsg); errMsg = copy("Too many iterations without convergence"); #ifdef STEPDEBUG fprintf(stderr, "too many iterations without convergence: %d iter's (max iter == %d)\n", iterno, maxIter); #endif } FREE(OldCKTstate0); return(E_ITERLIM); } if ((ckt->CKTnoncon == 0) && (iterno != 1)) ckt->CKTnoncon = NIconvTest(ckt); else ckt->CKTnoncon = 1; #ifdef STEPDEBUG printf("noncon is %d\n", ckt->CKTnoncon); #endif } if ((ckt->CKTnodeDamping != 0) && (ckt->CKTnoncon != 0) && ((ckt->CKTmode & MODETRANOP) || (ckt->CKTmode & MODEDCOP)) && (iterno > 1)) { CKTnode *node; double diff, maxdiff = 0; for (node = ckt->CKTnodes->next; node; node = node->next) if (node->type == SP_VOLTAGE) { diff = ckt->CKTrhs[node->number] - ckt->CKTrhsOld[node->number]; if (maxdiff < diff) maxdiff = diff; } if (maxdiff > 10) { double damp_factor = 10 / maxdiff; if (damp_factor < 0.1) damp_factor = 0.1; for (node = ckt->CKTnodes->next; node; node = node->next) { diff = ckt->CKTrhs[node->number] - ckt->CKTrhsOld[node->number]; ckt->CKTrhs[node->number] = ckt->CKTrhsOld[node->number] + (damp_factor * diff); } for (i = 0; i < ckt->CKTnumStates; i++) { diff = ckt->CKTstate0[i] - OldCKTstate0[i]; ckt->CKTstate0[i] = OldCKTstate0[i] + (damp_factor * diff); } } } if (ckt->CKTmode & MODEINITFLOAT) { if ((ckt->CKTmode & MODEDC) && ckt->CKThadNodeset) { if (ipass) ckt->CKTnoncon = ipass; ipass = 0; } if (ckt->CKTnoncon == 0) { ckt->CKTstat->STATnumIter += iterno; FREE(OldCKTstate0); return(OK); } } else if (ckt->CKTmode & MODEINITJCT) { ckt->CKTmode = (ckt->CKTmode & ~INITF) | MODEINITFIX; ckt->CKTniState |= NISHOULDREORDER; } else if (ckt->CKTmode & MODEINITFIX) { if (ckt->CKTnoncon == 0) ckt->CKTmode = (ckt->CKTmode & ~INITF) | MODEINITFLOAT; ipass = 1; } else if (ckt->CKTmode & MODEINITSMSIG) { ckt->CKTmode = (ckt->CKTmode & ~INITF) | MODEINITFLOAT; } else if (ckt->CKTmode & MODEINITTRAN) { if (iterno <= 1) ckt->CKTniState |= NISHOULDREORDER; ckt->CKTmode = (ckt->CKTmode & ~INITF) | MODEINITFLOAT; } else if (ckt->CKTmode & MODEINITPRED) { ckt->CKTmode = (ckt->CKTmode & ~INITF) | MODEINITFLOAT; } else { ckt->CKTstat->STATnumIter += iterno; #ifdef STEPDEBUG printf("bad initf state \n"); #endif FREE(OldCKTstate0); return(E_INTERN); /* impossible - no such INITF flag! */ } /* build up the lvnim1 array from the lvn array */ SWAP(double *, ckt->CKTrhs, ckt->CKTrhsOld); /* printf("after loading, after solving\n"); */ /* CKTdump(ckt); */ } /*NOTREACHED*/ } tmpk8ny_4pz/src/maths/ni/niinit.c0000644000175000017500000000131213546075722017124 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* * NIinit(nistruct,loadpkg) * * Initialize the Numerical iteration package to perform Newton-Raphson * iterations on a sparse matrix filled by the specified load package, */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" #include "ngspice/smpdefs.h" int NIinit(CKTcircuit *ckt) { #ifdef SPARSE /* a concession to Ken Kundert's sparse matrix package - SMP doesn't need this*/ int Error; #endif /* SPARSE */ ckt->CKTniState = NIUNINITIALIZED; return SMPnewMatrix(&(ckt->CKTmatrix), 0); } tmpk8ny_4pz/src/maths/ni/nidest.c0000644000175000017500000000167713546075722017136 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* NIdestroy(ckt) * delete the data structures allocated for numeric integration. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" void NIdestroy(CKTcircuit *ckt) { if (ckt->CKTmatrix) SMPdestroy(ckt->CKTmatrix); ckt->CKTmatrix = NULL; if(ckt->CKTrhs) FREE(ckt->CKTrhs); if(ckt->CKTrhsOld) FREE(ckt->CKTrhsOld); if(ckt->CKTrhsSpare) FREE(ckt->CKTrhsSpare); if(ckt->CKTirhs) FREE(ckt->CKTirhs); if(ckt->CKTirhsOld) FREE(ckt->CKTirhsOld); if(ckt->CKTirhsSpare) FREE(ckt->CKTirhsSpare); #ifdef WANT_SENSE2 if(ckt->CKTsenInfo){ if(ckt->CKTrhsOp) FREE(ckt->CKTrhsOp); if(ckt->CKTsenRhs) FREE(ckt->CKTsenRhs); if(ckt->CKTseniRhs) FREE(ckt->CKTseniRhs); SENdestroy(ckt->CKTsenInfo); } #endif } tmpk8ny_4pz/src/maths/ni/niconv.c0000644000175000017500000000502613546075722017134 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* * NIconvTest(ckt) * perform the convergence test - returns 1 if any of the * values in the old and new arrays have changed by more * than absTol + relTol*(max(old,new)), otherwise returns 0 */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" extern bool ft_ngdebug; int NIconvTest(CKTcircuit *ckt) { int i; /* generic loop variable */ int size; /* size of the matrix */ CKTnode *node; /* current matrix entry */ double old; double new; double tol; node = ckt->CKTnodes; size = SMPmatSize(ckt->CKTmatrix); #ifdef STEPDEBUG for (i=1;i<=size;i++) { new = ckt->CKTrhs [i] ; old = ckt->CKTrhsOld [i] ; printf("chk for convergence: %s new: %g old: %g\n",CKTnodName(ckt,i),new,old); } #endif /* STEPDEBUG */ for (i=1;i<=size;i++) { node = node->next; new = ckt->CKTrhs [i] ; old = ckt->CKTrhsOld [i] ; if (isnan(new)) { if (ft_ngdebug) fprintf(stderr, "Warning: non-convergence, node %s is nan\n", CKTnodName(ckt, i)); return 1; } if(node->type == SP_VOLTAGE) { tol = ckt->CKTreltol * (MAX(fabs(old),fabs(new))) + ckt->CKTvoltTol; if (fabs(new-old) >tol ) { #ifdef STEPDEBUG printf(" non-convergence at node (type=3) %s (fabs(new-old)>tol --> fabs(%g-%g)>%g)\n",CKTnodName(ckt,i),new,old,tol); printf(" reltol: %g voltTol: %g (tol=reltol*(MAX(fabs(old),fabs(new))) + voltTol)\n",ckt->CKTreltol,ckt->CKTvoltTol); #endif /* STEPDEBUG */ ckt->CKTtroubleNode = i; ckt->CKTtroubleElt = NULL; return(1); } } else { tol = ckt->CKTreltol * (MAX(fabs(old),fabs(new))) + ckt->CKTabstol; if (fabs(new-old) >tol ) { #ifdef STEPDEBUG printf(" non-convergence at node (type=%d) %s (fabs(new-old)>tol --> fabs(%g-%g)>%g)\n",node->type,CKTnodName(ckt,i),new,old,tol); printf(" reltol: %g abstol: %g (tol=reltol*(MAX(fabs(old),fabs(new))) + abstol)\n",ckt->CKTreltol,ckt->CKTabstol); #endif /* STEPDEBUG */ ckt->CKTtroubleNode = i; ckt->CKTtroubleElt = NULL; return(1); } } } #ifdef NEWCONV i = CKTconvTest(ckt); if (i) ckt->CKTtroubleNode = 0; return(i); #else /* NEWCONV */ return(0); #endif /* NEWCONV */ } tmpk8ny_4pz/src/maths/fft/0000755000175000017500000000000013546075722015642 5ustar carstencarstentmpk8ny_4pz/src/maths/fft/Read-Me0000644000175000017500000000546313546075722017007 0ustar carstencarstenThis directory contains a public domain FFT library which was optimized for speed on RISC processors such as the PowerPC. All ffts use single precision floats, for double precision just use a global search and replace to change float to double in all source files. Codewarrier Pro 1.0 project files are also supplied. ** Warning ** Perform rigorous testing to your own standards before using this code. (John Green) green_jt@vsdec.npt.nuwc.navy.mil files: fftTiming Application to time complex ffts rfftTiming Application to time real ffts // Directory: fft libraries files: fftext.c Library of in-place fast fourier transforms. Contains forward and inverse complex and real transforms. The real fft's expect the frequency domain data to have the real part of the fsamp/2 bin (which has a 0 imaginary part) to be stored in the location for the imaginary part of the DC bin (the DC bin of real data is also strictly real.) You must first call an initialization routine fftInit before calling the fft computation routines ffts, iffts, rffts and riffts. The init routines malloc the memory to store the cosine and bit reversed counter tables as well as initializing their values. fftlib.c Lower level library of in-place fast fourier transforms. Same as fftext.c but you need to manage the mallocs for the cosine and bit reversed tables yourself. fft2d.c Library of 2d and 3d complex and 2d real in-place fast fourier transforms. The init routine fft2dInit must be called before using the 2d routines and fft3dInit must be called before using the 3d routines. These init routines will also call the appropriate 1d init routines in fftext.c matlib.c Matrix transpose routines used by fft2d.c and complex vector multiply for forming the product of two spectra. dxpose.c Double precision matrix transpose for quick single precision complex transposing // Directory: timing code This directory contains the source to fftTiming and rfftTiming // Directory: Numerical Recipes testing This directory contains files used to test the various fft routines using the Numerical Recipes in C routines as a baseline. These routines can be purchased in PeeCee (after expanding you can move them to a Mac) format from: http://cfata2.harvard.edu/numerical-recipes/ Unfortunately Numerical Recipes defines its forward and inverse fft's backwards. For complex fft's I just use their inverse fft as a forward one, but for real ffts their forward fft followed by my inverse fft reverses the data. They also have ugly matrix and tensor data types and start their indices with one, Fortran style, but these are minor annoyances. // Directory: Matlab testing This directory contains files to test fast 1d and 2d convolution with Matlab used to verify the results. An example of using Matlab to test the fft library routines is also given for the 2d real fft. tmpk8ny_4pz/src/maths/fft/NOTE0000644000175000017500000000344413546075722016337 0ustar carstencarstenSubject: FFT for RISC 2.0 To: macgifts@sumex-aim.stanford.edu Enclosure: FFTs-for-RISC-2.sit Enclosed is a stuffit archive of version 2.0 of my 'C' source code fft library. Very-Fast Fourier Transform routines. Routines are provided for real and complex forward and inverse 1d and 2d fourier transforms and 3d complex forward and inverse ffts. I coded these to optimize execution speed on Risc processors like the PowerPC. All fft sizes must still be a power of two. Test programs based on the Numerical Recipes in C routines are provided. Also included are some simple applications with source code which time the FFTs. See the enclosed read me file for more information. Revision version 2.0: Rewrote code to rely more on compiler optimization (and be less ugly.) Removed restrictions on too small or too large ffts. Provided a library extension that manages memory for cosine and bit reversed counter tables. Added 2d and 3d complex and 2d real ffts. Speeded routines for data too large to fit in primary cache. Changed most testing from Matlab to Numerical Recipes based (because its cheaper.) Changed call parameters (watch out.) Revision version 1.21: line 126 of rfftTest.c corrected. Revisions version 1.2: I now store the Nyquest point of the real transform where the 0 for the DC term's imaginary part used to be. !! WATCH OUT FOR THIS IF YOU USE rfft !! Added the real inverse Fourier transform. Revisions version 1.1: Re-arranged to put fft routines in a shared library and changed source file name to fftlib.c. Removed some ugly optimizations that are no longer needed for CodeWarrier. This code is public domain, do anything you want to with it. [Moderators- This file should replace ffts-for-risc-121-c.hqx and can be included on any CD] tmpk8ny_4pz/src/maths/fft/Makefile.am0000644000175000017500000000050713546075722017700 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libmathfft.la libmathfft_la_SOURCES = \ fftext.c \ fftlib.c \ fftlib.h \ matlib.c \ matlib.h EXTRA_DIST = NOTE Read-Me AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/maths/fft/fftlib.c0000644000175000017500000022730513546075722017265 0ustar carstencarsten/******************************************************************* lower level fft stuff including routines called in fftext.c and fft2d.c *******************************************************************/ #include "fftlib.h" #include #include #define MCACHE (11-(int)(sizeof(double)/8)) // fft's with M bigger than this bust primary cache // some math constants to 40 decimal places #define MYPI 3.141592653589793238462643383279502884197 // pi #define MYROOT2 1.414213562373095048801688724209698078569 // sqrt(2) #define MYCOSPID8 0.9238795325112867561281831893967882868224 // cos(pi/8) #define MYSINPID8 0.3826834323650897717284599840303988667613 // sin(pi/8) #ifdef _MSC_VER #define inline __inline #endif /************************************************* routines to initialize tables used by fft routines **************************************************/ void fftCosInit(int M, double *Utbl) { /* Compute Utbl, the cosine table for ffts */ /* of size (pow(2,M)/4 +1) */ /* INPUTS */ /* M = log2 of fft size */ /* OUTPUTS */ /* *Utbl = cosine table */ int fftN = POW2(M); int i1; Utbl[0] = 1.0; for (i1 = 1; i1 < fftN/4; i1++) Utbl[i1] = cos( (2.0 * MYPI * i1) / fftN ); Utbl[fftN/4] = 0.0; } void fftBRInit(int M, short *BRLow) { /* Compute BRLow, the bit reversed table for ffts */ /* of size pow(2,M/2 -1) */ /* INPUTS */ /* M = log2 of fft size */ /* OUTPUTS */ /* *BRLow = bit reversed counter table */ int Mroot_1 = M / 2 - 1; int Nroot_1 = POW2(Mroot_1); int i1; int bitsum; int bitmask; int bit; for (i1 = 0; i1 < Nroot_1; i1++) { bitsum = 0; bitmask = 1; for (bit=1; bit <= Mroot_1; bitmask<<=1, bit++) if (i1 & bitmask) bitsum = bitsum + (Nroot_1 >> bit); BRLow[i1] = (short) bitsum; } } /************************************************ parts of ffts1 *************************************************/ static inline void bitrevR2(double *ioptr, int M, short *BRLow); static inline void bitrevR2(double *ioptr, int M, short *BRLow) { /*** bit reverse and first radix 2 stage of forward or inverse fft ***/ double f0r; double f0i; double f1r; double f1i; double f2r; double f2i; double f3r; double f3i; double f4r; double f4i; double f5r; double f5i; double f6r; double f6i; double f7r; double f7i; double t0r; double t0i; double t1r; double t1i; double *p0r; double *p1r; double *IOP; double *iolimit; int Colstart; int iCol; int posA; int posAi; int posB; int posBi; const int Nrems2 = POW2((M+3)/2); const int Nroot_1_ColInc = POW2(M)-Nrems2; const int Nroot_1 = POW2(M/2-1)-1; const int ColstartShift = (M+1)/2 +1; posA = POW2(M); // 1/2 of POW2(M) complexes posAi = posA + 1; posB = posA + 2; posBi = posB + 1; iolimit = ioptr + Nrems2; const size_t ioptr_inc = (size_t) POW2((M / 2 + 1)); for (; ioptr < iolimit; ioptr += ioptr_inc) { for (Colstart = Nroot_1; Colstart >= 0; Colstart--) { iCol = Nroot_1; p0r = ioptr+ Nroot_1_ColInc + BRLow[Colstart]*4; IOP = ioptr + (Colstart << ColstartShift); p1r = IOP + BRLow[iCol]*4; f0r = *(p0r); f0i = *(p0r+1); f1r = *(p0r+posA); f1i = *(p0r+posAi); for (; iCol > Colstart;) { f2r = *(p0r+2); f2i = *(p0r+(2+1)); f3r = *(p0r+posB); f3i = *(p0r+posBi); f4r = *(p1r); f4i = *(p1r+1); f5r = *(p1r+posA); f5i = *(p1r+posAi); f6r = *(p1r+2); f6i = *(p1r+(2+1)); f7r = *(p1r+posB); f7i = *(p1r+posBi); t0r = f0r + f1r; t0i = f0i + f1i; f1r = f0r - f1r; f1i = f0i - f1i; t1r = f2r + f3r; t1i = f2i + f3i; f3r = f2r - f3r; f3i = f2i - f3i; f0r = f4r + f5r; f0i = f4i + f5i; f5r = f4r - f5r; f5i = f4i - f5i; f2r = f6r + f7r; f2i = f6i + f7i; f7r = f6r - f7r; f7i = f6i - f7i; *(p1r) = t0r; *(p1r+1) = t0i; *(p1r+2) = f1r; *(p1r+(2+1)) = f1i; *(p1r+posA) = t1r; *(p1r+posAi) = t1i; *(p1r+posB) = f3r; *(p1r+posBi) = f3i; *(p0r) = f0r; *(p0r+1) = f0i; *(p0r+2) = f5r; *(p0r+(2+1)) = f5i; *(p0r+posA) = f2r; *(p0r+posAi) = f2i; *(p0r+posB) = f7r; *(p0r+posBi) = f7i; p0r -= Nrems2; f0r = *(p0r); f0i = *(p0r+1); f1r = *(p0r+posA); f1i = *(p0r+posAi); iCol -= 1; p1r = IOP + BRLow[iCol]*4; } f2r = *(p0r+2); f2i = *(p0r+(2+1)); f3r = *(p0r+posB); f3i = *(p0r+posBi); t0r = f0r + f1r; t0i = f0i + f1i; f1r = f0r - f1r; f1i = f0i - f1i; t1r = f2r + f3r; t1i = f2i + f3i; f3r = f2r - f3r; f3i = f2i - f3i; *(p0r) = t0r; *(p0r+1) = t0i; *(p0r+2) = f1r; *(p0r+(2+1)) = f1i; *(p0r+posA) = t1r; *(p0r+posAi) = t1i; *(p0r+posB) = f3r; *(p0r+posBi) = f3i; } } } static inline void fft2pt(double *ioptr); static inline void fft2pt(double *ioptr) { /*** RADIX 2 fft ***/ double f0r, f0i, f1r, f1i; double t0r, t0i; /* bit reversed load */ f0r = ioptr[0]; f0i = ioptr[1]; f1r = ioptr[2]; f1i = ioptr[3]; /* Butterflys */ /* f0 - - t0 f1 - 1 - f1 */ t0r = f0r + f1r; t0i = f0i + f1i; f1r = f0r - f1r; f1i = f0i - f1i; /* store result */ ioptr[0] = t0r; ioptr[1] = t0i; ioptr[2] = f1r; ioptr[3] = f1i; } static inline void fft4pt(double *ioptr); static inline void fft4pt(double *ioptr) { /*** RADIX 4 fft ***/ double f0r, f0i, f1r, f1i, f2r, f2i, f3r, f3i; double t0r, t0i, t1r, t1i; /* bit reversed load */ f0r = ioptr[0]; f0i = ioptr[1]; f1r = ioptr[4]; f1i = ioptr[5]; f2r = ioptr[2]; f2i = ioptr[3]; f3r = ioptr[6]; f3i = ioptr[7]; /* Butterflys */ /* f0 - - t0 - - f0 f1 - 1 - f1 - - f1 f2 - - f2 - 1 - f2 f3 - 1 - t1 - -i - f3 */ t0r = f0r + f1r; t0i = f0i + f1i; f1r = f0r - f1r; f1i = f0i - f1i; t1r = f2r - f3r; t1i = f2i - f3i; f2r = f2r + f3r; f2i = f2i + f3i; f0r = t0r + f2r; f0i = t0i + f2i; f2r = t0r - f2r; f2i = t0i - f2i; f3r = f1r - t1i; f3i = f1i + t1r; f1r = f1r + t1i; f1i = f1i - t1r; /* store result */ ioptr[0] = f0r; ioptr[1] = f0i; ioptr[2] = f1r; ioptr[3] = f1i; ioptr[4] = f2r; ioptr[5] = f2i; ioptr[6] = f3r; ioptr[7] = f3i; } static inline void fft8pt(double *ioptr); static inline void fft8pt(double *ioptr) { /*** RADIX 8 fft ***/ double w0r = 1.0/MYROOT2; /* cos(pi/4) */ double f0r, f0i, f1r, f1i, f2r, f2i, f3r, f3i; double f4r, f4i, f5r, f5i, f6r, f6i, f7r, f7i; double t0r, t0i, t1r, t1i; const double Two = 2.0; /* bit reversed load */ f0r = ioptr[0]; f0i = ioptr[1]; f1r = ioptr[8]; f1i = ioptr[9]; f2r = ioptr[4]; f2i = ioptr[5]; f3r = ioptr[12]; f3i = ioptr[13]; f4r = ioptr[2]; f4i = ioptr[3]; f5r = ioptr[10]; f5i = ioptr[11]; f6r = ioptr[6]; f6i = ioptr[7]; f7r = ioptr[14]; f7i = ioptr[15]; /* Butterflys */ /* f0 - - t0 - - f0 - - f0 f1 - 1 - f1 - - f1 - - f1 f2 - - f2 - 1 - f2 - - f2 f3 - 1 - t1 - -i - f3 - - f3 f4 - - t0 - - f4 - 1 - t0 f5 - 1 - f5 - - f5 - w3 - f4 f6 - - f6 - 1 - f6 - -i - t1 f7 - 1 - t1 - -i - f7 - iw3- f6 */ t0r = f0r + f1r; t0i = f0i + f1i; f1r = f0r - f1r; f1i = f0i - f1i; t1r = f2r - f3r; t1i = f2i - f3i; f2r = f2r + f3r; f2i = f2i + f3i; f0r = t0r + f2r; f0i = t0i + f2i; f2r = t0r - f2r; f2i = t0i - f2i; f3r = f1r - t1i; f3i = f1i + t1r; f1r = f1r + t1i; f1i = f1i - t1r; t0r = f4r + f5r; t0i = f4i + f5i; f5r = f4r - f5r; f5i = f4i - f5i; t1r = f6r - f7r; t1i = f6i - f7i; f6r = f6r + f7r; f6i = f6i + f7i; f4r = t0r + f6r; f4i = t0i + f6i; f6r = t0r - f6r; f6i = t0i - f6i; f7r = f5r - t1i; f7i = f5i + t1r; f5r = f5r + t1i; f5i = f5i - t1r; t0r = f0r - f4r; t0i = f0i - f4i; f0r = f0r + f4r; f0i = f0i + f4i; t1r = f2r - f6i; t1i = f2i + f6r; f2r = f2r + f6i; f2i = f2i - f6r; f4r = f1r - f5r * w0r - f5i * w0r; f4i = f1i + f5r * w0r - f5i * w0r; f1r = f1r * Two - f4r; f1i = f1i * Two - f4i; f6r = f3r + f7r * w0r - f7i * w0r; f6i = f3i + f7r * w0r + f7i * w0r; f3r = f3r * Two - f6r; f3i = f3i * Two - f6i; /* store result */ ioptr[0] = f0r; ioptr[1] = f0i; ioptr[2] = f1r; ioptr[3] = f1i; ioptr[4] = f2r; ioptr[5] = f2i; ioptr[6] = f3r; ioptr[7] = f3i; ioptr[8] = t0r; ioptr[9] = t0i; ioptr[10] = f4r; ioptr[11] = f4i; ioptr[12] = t1r; ioptr[13] = t1i; ioptr[14] = f6r; ioptr[15] = f6i; } static inline void bfR2(double *ioptr, int M, int NDiffU); static inline void bfR2(double *ioptr, int M, int NDiffU) { /*** 2nd radix 2 stage ***/ int pos; int posi; int pinc; int pnext; int NSameU; int SameUCnt; double *pstrt; double *p0r, *p1r, *p2r, *p3r; double f0r, f0i, f1r, f1i, f2r, f2i, f3r, f3i; double f4r, f4i, f5r, f5i, f6r, f6i, f7r, f7i; /* const double Two = 2.0; */ pinc = NDiffU * 2; // 2 doubles per complex pnext = pinc * 4; pos = 2; posi = pos+1; NSameU = POW2(M) / 4 /NDiffU; // 4 Us at a time pstrt = ioptr; p0r = pstrt; p1r = pstrt+pinc; p2r = p1r+pinc; p3r = p2r+pinc; /* Butterflys */ /* f0 - - f4 f1 - 1 - f5 f2 - - f6 f3 - 1 - f7 */ /* Butterflys */ /* f0 - - f4 f1 - 1 - f5 f2 - - f6 f3 - 1 - f7 */ for (SameUCnt = NSameU; SameUCnt > 0 ; SameUCnt--) { f0r = *p0r; f1r = *p1r; f0i = *(p0r + 1); f1i = *(p1r + 1); f2r = *p2r; f3r = *p3r; f2i = *(p2r + 1); f3i = *(p3r + 1); f4r = f0r + f1r; f4i = f0i + f1i; f5r = f0r - f1r; f5i = f0i - f1i; f6r = f2r + f3r; f6i = f2i + f3i; f7r = f2r - f3r; f7i = f2i - f3i; *p0r = f4r; *(p0r + 1) = f4i; *p1r = f5r; *(p1r + 1) = f5i; *p2r = f6r; *(p2r + 1) = f6i; *p3r = f7r; *(p3r + 1) = f7i; f0r = *(p0r + pos); f1i = *(p1r + posi); f0i = *(p0r + posi); f1r = *(p1r + pos); f2r = *(p2r + pos); f3i = *(p3r + posi); f2i = *(p2r + posi); f3r = *(p3r + pos); f4r = f0r + f1i; f4i = f0i - f1r; f5r = f0r - f1i; f5i = f0i + f1r; f6r = f2r + f3i; f6i = f2i - f3r; f7r = f2r - f3i; f7i = f2i + f3r; *(p0r + pos) = f4r; *(p0r + posi) = f4i; *(p1r + pos) = f5r; *(p1r + posi) = f5i; *(p2r + pos) = f6r; *(p2r + posi) = f6i; *(p3r + pos) = f7r; *(p3r + posi) = f7i; p0r += pnext; p1r += pnext; p2r += pnext; p3r += pnext; } } static inline void bfR4(double *ioptr, int M, int NDiffU); static inline void bfR4(double *ioptr, int M, int NDiffU) { /*** 1 radix 4 stage ***/ int pos; int posi; int pinc; int pnext; int pnexti; int NSameU; int SameUCnt; double *pstrt; double *p0r, *p1r, *p2r, *p3r; double w1r = 1.0/MYROOT2; /* cos(pi/4) */ double f0r, f0i, f1r, f1i, f2r, f2i, f3r, f3i; double f4r, f4i, f5r, f5i, f6r, f6i, f7r, f7i; double t1r, t1i; const double Two = 2.0; pinc = NDiffU * 2; // 2 doubles per complex pnext = pinc * 4; pnexti = pnext + 1; pos = 2; posi = pos+1; NSameU = POW2(M) / 4 /NDiffU; // 4 pts per butterfly pstrt = ioptr; p0r = pstrt; p1r = pstrt+pinc; p2r = p1r+pinc; p3r = p2r+pinc; /* Butterflys */ /* f0 - - f0 - - f4 f1 - 1 - f5 - - f5 f2 - - f6 - 1 - f6 f3 - 1 - f3 - -i - f7 */ /* Butterflys */ /* f0 - - f4 - - f4 f1 - -i - t1 - - f5 f2 - - f2 - w1 - f6 f3 - -i - f7 - iw1- f7 */ f0r = *p0r; f1r = *p1r; f2r = *p2r; f3r = *p3r; f0i = *(p0r + 1); f1i = *(p1r + 1); f2i = *(p2r + 1); f3i = *(p3r + 1); f5r = f0r - f1r; f5i = f0i - f1i; f0r = f0r + f1r; f0i = f0i + f1i; f6r = f2r + f3r; f6i = f2i + f3i; f3r = f2r - f3r; f3i = f2i - f3i; for (SameUCnt = NSameU-1; SameUCnt > 0 ; SameUCnt--) { f7r = f5r - f3i; f7i = f5i + f3r; f5r = f5r + f3i; f5i = f5i - f3r; f4r = f0r + f6r; f4i = f0i + f6i; f6r = f0r - f6r; f6i = f0i - f6i; f2r = *(p2r + pos); f2i = *(p2r + posi); f1r = *(p1r + pos); f1i = *(p1r + posi); f3i = *(p3r + posi); f0r = *(p0r + pos); f3r = *(p3r + pos); f0i = *(p0r + posi); *p3r = f7r; *p0r = f4r; *(p3r + 1) = f7i; *(p0r + 1) = f4i; *p1r = f5r; *p2r = f6r; *(p1r + 1) = f5i; *(p2r + 1) = f6i; f7r = f2r - f3i; f7i = f2i + f3r; f2r = f2r + f3i; f2i = f2i - f3r; f4r = f0r + f1i; f4i = f0i - f1r; t1r = f0r - f1i; t1i = f0i + f1r; f5r = t1r - f7r * w1r + f7i * w1r; f5i = t1i - f7r * w1r - f7i * w1r; f7r = t1r * Two - f5r; f7i = t1i * Two - f5i; f6r = f4r - f2r * w1r - f2i * w1r; f6i = f4i + f2r * w1r - f2i * w1r; f4r = f4r * Two - f6r; f4i = f4i * Two - f6i; f3r = *(p3r + pnext); f0r = *(p0r + pnext); f3i = *(p3r + pnexti); f0i = *(p0r + pnexti); f2r = *(p2r + pnext); f2i = *(p2r + pnexti); f1r = *(p1r + pnext); f1i = *(p1r + pnexti); *(p2r + pos) = f6r; *(p1r + pos) = f5r; *(p2r + posi) = f6i; *(p1r + posi) = f5i; *(p3r + pos) = f7r; *(p0r + pos) = f4r; *(p3r + posi) = f7i; *(p0r + posi) = f4i; f6r = f2r + f3r; f6i = f2i + f3i; f3r = f2r - f3r; f3i = f2i - f3i; f5r = f0r - f1r; f5i = f0i - f1i; f0r = f0r + f1r; f0i = f0i + f1i; p3r += pnext; p0r += pnext; p1r += pnext; p2r += pnext; } f7r = f5r - f3i; f7i = f5i + f3r; f5r = f5r + f3i; f5i = f5i - f3r; f4r = f0r + f6r; f4i = f0i + f6i; f6r = f0r - f6r; f6i = f0i - f6i; f2r = *(p2r + pos); f2i = *(p2r + posi); f1r = *(p1r + pos); f1i = *(p1r + posi); f3i = *(p3r + posi); f0r = *(p0r + pos); f3r = *(p3r + pos); f0i = *(p0r + posi); *p3r = f7r; *p0r = f4r; *(p3r + 1) = f7i; *(p0r + 1) = f4i; *p1r = f5r; *p2r = f6r; *(p1r + 1) = f5i; *(p2r + 1) = f6i; f7r = f2r - f3i; f7i = f2i + f3r; f2r = f2r + f3i; f2i = f2i - f3r; f4r = f0r + f1i; f4i = f0i - f1r; t1r = f0r - f1i; t1i = f0i + f1r; f5r = t1r - f7r * w1r + f7i * w1r; f5i = t1i - f7r * w1r - f7i * w1r; f7r = t1r * Two - f5r; f7i = t1i * Two - f5i; f6r = f4r - f2r * w1r - f2i * w1r; f6i = f4i + f2r * w1r - f2i * w1r; f4r = f4r * Two - f6r; f4i = f4i * Two - f6i; *(p2r + pos) = f6r; *(p1r + pos) = f5r; *(p2r + posi) = f6i; *(p1r + posi) = f5i; *(p3r + pos) = f7r; *(p0r + pos) = f4r; *(p3r + posi) = f7i; *(p0r + posi) = f4i; } static inline void bfstages(double *ioptr, int M, double *Utbl, int Ustride, int NDiffU, int StageCnt); static inline void bfstages(double *ioptr, int M, double *Utbl, int Ustride, int NDiffU, int StageCnt) { /*** RADIX 8 Stages ***/ int pos; int posi; int pinc; int pnext; int NSameU; int Uinc; int Uinc2; int Uinc4; int DiffUCnt; int SameUCnt; int U2toU3; double *pstrt; double *p0r, *p1r, *p2r, *p3r; double *u0r, *u0i, *u1r, *u1i, *u2r, *u2i; double w0r, w0i, w1r, w1i, w2r, w2i, w3r, w3i; double f0r, f0i, f1r, f1i, f2r, f2i, f3r, f3i; double f4r, f4i, f5r, f5i, f6r, f6i, f7r, f7i; double t0r, t0i, t1r, t1i; const double Two = 2.0; pinc = NDiffU * 2; // 2 doubles per complex pnext = pinc * 8; pos = pinc * 4; posi = pos + 1; NSameU = POW2(M) / 8 /NDiffU; // 8 pts per butterfly Uinc = NSameU * Ustride; Uinc2 = Uinc * 2; Uinc4 = Uinc * 4; U2toU3 = (POW2(M) / 8)*Ustride; for (; StageCnt > 0 ; StageCnt--) { u0r = &Utbl[0]; u0i = &Utbl[POW2(M-2)*Ustride]; u1r = u0r; u1i = u0i; u2r = u0r; u2i = u0i; w0r = *u0r; w0i = *u0i; w1r = *u1r; w1i = *u1i; w2r = *u2r; w2i = *u2i; w3r = *(u2r+U2toU3); w3i = *(u2i-U2toU3); pstrt = ioptr; p0r = pstrt; p1r = pstrt+pinc; p2r = p1r+pinc; p3r = p2r+pinc; /* Butterflys */ /* f0 - - t0 - - f0 - - f0 f1 - w0- f1 - - f1 - - f1 f2 - - f2 - w1- f2 - - f4 f3 - w0- t1 - iw1- f3 - - f5 f4 - - t0 - - f4 - w2- t0 f5 - w0- f5 - - f5 - w3- t1 f6 - - f6 - w1- f6 - iw2- f6 f7 - w0- t1 - iw1- f7 - iw3- f7 */ for (DiffUCnt = NDiffU; DiffUCnt > 0 ; DiffUCnt--) { f0r = *p0r; f0i = *(p0r + 1); f1r = *p1r; f1i = *(p1r + 1); for (SameUCnt = NSameU-1; SameUCnt > 0 ; SameUCnt--) { f2r = *p2r; f2i = *(p2r + 1); f3r = *p3r; f3i = *(p3r + 1); t0r = f0r + f1r * w0r + f1i * w0i; t0i = f0i - f1r * w0i + f1i * w0r; f1r = f0r * Two - t0r; f1i = f0i * Two - t0i; f4r = *(p0r + pos); f4i = *(p0r + posi); f5r = *(p1r + pos); f5i = *(p1r + posi); f6r = *(p2r + pos); f6i = *(p2r + posi); f7r = *(p3r + pos); f7i = *(p3r + posi); t1r = f2r - f3r * w0r - f3i * w0i; t1i = f2i + f3r * w0i - f3i * w0r; f2r = f2r * Two - t1r; f2i = f2i * Two - t1i; f0r = t0r + f2r * w1r + f2i * w1i; f0i = t0i - f2r * w1i + f2i * w1r; f2r = t0r * Two - f0r; f2i = t0i * Two - f0i; f3r = f1r + t1r * w1i - t1i * w1r; f3i = f1i + t1r * w1r + t1i * w1i; f1r = f1r * Two - f3r; f1i = f1i * Two - f3i; t0r = f4r + f5r * w0r + f5i * w0i; t0i = f4i - f5r * w0i + f5i * w0r; f5r = f4r * Two - t0r; f5i = f4i * Two - t0i; t1r = f6r - f7r * w0r - f7i * w0i; t1i = f6i + f7r * w0i - f7i * w0r; f6r = f6r * Two - t1r; f6i = f6i * Two - t1i; f4r = t0r + f6r * w1r + f6i * w1i; f4i = t0i - f6r * w1i + f6i * w1r; f6r = t0r * Two - f4r; f6i = t0i * Two - f4i; f7r = f5r + t1r * w1i - t1i * w1r; f7i = f5i + t1r * w1r + t1i * w1i; f5r = f5r * Two - f7r; f5i = f5i * Two - f7i; t0r = f0r - f4r * w2r - f4i * w2i; t0i = f0i + f4r * w2i - f4i * w2r; f0r = f0r * Two - t0r; f0i = f0i * Two - t0i; t1r = f1r - f5r * w3r - f5i * w3i; t1i = f1i + f5r * w3i - f5i * w3r; f1r = f1r * Two - t1r; f1i = f1i * Two - t1i; *(p0r + pos) = t0r; *(p1r + pos) = t1r; *(p0r + posi) = t0i; *(p1r + posi) = t1i; *p0r = f0r; *p1r = f1r; *(p0r + 1) = f0i; *(p1r + 1) = f1i; p0r += pnext; f0r = *p0r; f0i = *(p0r + 1); p1r += pnext; f1r = *p1r; f1i = *(p1r + 1); f4r = f2r - f6r * w2i + f6i * w2r; f4i = f2i - f6r * w2r - f6i * w2i; f6r = f2r * Two - f4r; f6i = f2i * Two - f4i; f5r = f3r - f7r * w3i + f7i * w3r; f5i = f3i - f7r * w3r - f7i * w3i; f7r = f3r * Two - f5r; f7i = f3i * Two - f5i; *p2r = f4r; *p3r = f5r; *(p2r + 1) = f4i; *(p3r + 1) = f5i; *(p2r + pos) = f6r; *(p3r + pos) = f7r; *(p2r + posi) = f6i; *(p3r + posi) = f7i; p2r += pnext; p3r += pnext; } f2r = *p2r; f2i = *(p2r + 1); f3r = *p3r; f3i = *(p3r + 1); t0r = f0r + f1r * w0r + f1i * w0i; t0i = f0i - f1r * w0i + f1i * w0r; f1r = f0r * Two - t0r; f1i = f0i * Two - t0i; f4r = *(p0r + pos); f4i = *(p0r + posi); f5r = *(p1r + pos); f5i = *(p1r + posi); f6r = *(p2r + pos); f6i = *(p2r + posi); f7r = *(p3r + pos); f7i = *(p3r + posi); t1r = f2r - f3r * w0r - f3i * w0i; t1i = f2i + f3r * w0i - f3i * w0r; f2r = f2r * Two - t1r; f2i = f2i * Two - t1i; f0r = t0r + f2r * w1r + f2i * w1i; f0i = t0i - f2r * w1i + f2i * w1r; f2r = t0r * Two - f0r; f2i = t0i * Two - f0i; f3r = f1r + t1r * w1i - t1i * w1r; f3i = f1i + t1r * w1r + t1i * w1i; f1r = f1r * Two - f3r; f1i = f1i * Two - f3i; if (DiffUCnt == NDiffU/2) Uinc4 = -Uinc4; u0r += Uinc4; u0i -= Uinc4; u1r += Uinc2; u1i -= Uinc2; u2r += Uinc; u2i -= Uinc; pstrt += 2; t0r = f4r + f5r * w0r + f5i * w0i; t0i = f4i - f5r * w0i + f5i * w0r; f5r = f4r * Two - t0r; f5i = f4i * Two - t0i; t1r = f6r - f7r * w0r - f7i * w0i; t1i = f6i + f7r * w0i - f7i * w0r; f6r = f6r * Two - t1r; f6i = f6i * Two - t1i; f4r = t0r + f6r * w1r + f6i * w1i; f4i = t0i - f6r * w1i + f6i * w1r; f6r = t0r * Two - f4r; f6i = t0i * Two - f4i; f7r = f5r + t1r * w1i - t1i * w1r; f7i = f5i + t1r * w1r + t1i * w1i; f5r = f5r * Two - f7r; f5i = f5i * Two - f7i; w0r = *u0r; w0i = *u0i; w1r = *u1r; w1i = *u1i; if (DiffUCnt <= NDiffU/2) w0r = -w0r; t0r = f0r - f4r * w2r - f4i * w2i; t0i = f0i + f4r * w2i - f4i * w2r; f0r = f0r * Two - t0r; f0i = f0i * Two - t0i; f4r = f2r - f6r * w2i + f6i * w2r; f4i = f2i - f6r * w2r - f6i * w2i; f6r = f2r * Two - f4r; f6i = f2i * Two - f4i; *(p0r + pos) = t0r; *p2r = f4r; *(p0r + posi) = t0i; *(p2r + 1) = f4i; w2r = *u2r; w2i = *u2i; *p0r = f0r; *(p2r + pos) = f6r; *(p0r + 1) = f0i; *(p2r + posi) = f6i; p0r = pstrt; p2r = pstrt + pinc + pinc; t1r = f1r - f5r * w3r - f5i * w3i; t1i = f1i + f5r * w3i - f5i * w3r; f1r = f1r * Two - t1r; f1i = f1i * Two - t1i; f5r = f3r - f7r * w3i + f7i * w3r; f5i = f3i - f7r * w3r - f7i * w3i; f7r = f3r * Two - f5r; f7i = f3i * Two - f5i; *(p1r + pos) = t1r; *p3r = f5r; *(p1r + posi) = t1i; *(p3r + 1) = f5i; w3r = *(u2r+U2toU3); w3i = *(u2i-U2toU3); *p1r = f1r; *(p3r + pos) = f7r; *(p1r + 1) = f1i; *(p3r + posi) = f7i; p1r = pstrt + pinc; p3r = p2r + pinc; } NSameU /= 8; Uinc /= 8; Uinc2 /= 8; Uinc4 = Uinc * 4; NDiffU *= 8; pinc *= 8; pnext *= 8; pos *= 8; posi = pos + 1; } } void fftrecurs(double *ioptr, int M, double *Utbl, int Ustride, int NDiffU, int StageCnt); void fftrecurs(double *ioptr, int M, double *Utbl, int Ustride, int NDiffU, int StageCnt) { /* recursive bfstages calls to maximize on chip cache efficiency */ int i1; if (M <= MCACHE) // fits on chip ? bfstages(ioptr, M, Utbl, Ustride, NDiffU, StageCnt); /* RADIX 8 Stages */ else { for (i1=0; i1<8; i1++) { fftrecurs(&ioptr[i1*POW2(M-3)*2], M-3, Utbl, 8*Ustride, NDiffU, StageCnt-1); /* RADIX 8 Stages */ } bfstages(ioptr, M, Utbl, Ustride, POW2(M-3), 1); /* RADIX 8 Stage */ } } void ffts1(double *ioptr, int M, int Rows, double *Utbl, short *BRLow) { /* Compute in-place complex fft on the rows of the input array */ /* INPUTS */ /* *ioptr = input data array */ /* M = log2 of fft size (ex M=10 for 1024 point fft) */ /* Rows = number of rows in ioptr array (use Rows of 1 if ioptr is a 1 dimensional array) */ /* *Utbl = cosine table */ /* *BRLow = bit reversed counter table */ /* OUTPUTS */ /* *ioptr = output data array */ int StageCnt; int NDiffU; switch (M) { case 0: break; case 1: for (; Rows>0; Rows--) { fft2pt(ioptr); /* a 2 pt fft */ ioptr += 2*POW2(M); } break; case 2: for (; Rows>0; Rows--) { fft4pt(ioptr); /* a 4 pt fft */ ioptr += 2*POW2(M); } break; case 3: for (; Rows>0; Rows--) { fft8pt(ioptr); /* an 8 pt fft */ ioptr += 2*POW2(M); } break; default: for (; Rows>0; Rows--) { bitrevR2(ioptr, M, BRLow); /* bit reverse and first radix 2 stage */ StageCnt = (M-1) / 3; // number of radix 8 stages NDiffU = 2; // one radix 2 stage already complete if ( (M-1-(StageCnt * 3)) == 1 ) { bfR2(ioptr, M, NDiffU); /* 1 radix 2 stage */ NDiffU *= 2; } if ( (M-1-(StageCnt * 3)) == 2 ) { bfR4(ioptr, M, NDiffU); /* 1 radix 4 stage */ NDiffU *= 4; } if (M <= MCACHE) bfstages(ioptr, M, Utbl, 1, NDiffU, StageCnt); /* RADIX 8 Stages */ else { fftrecurs(ioptr, M, Utbl, 1, NDiffU, StageCnt); /* RADIX 8 Stages */ } ioptr += 2*POW2(M); } } } /************************************************ parts of iffts1 *************************************************/ static inline void scbitrevR2(double *ioptr, int M, short *BRLow, double scale); static inline void scbitrevR2(double *ioptr, int M, short *BRLow, double scale) { /*** scaled bit reverse and first radix 2 stage forward or inverse fft ***/ double f0r; double f0i; double f1r; double f1i; double f2r; double f2i; double f3r; double f3i; double f4r; double f4i; double f5r; double f5i; double f6r; double f6i; double f7r; double f7i; double t0r; double t0i; double t1r; double t1i; double *p0r; double *p1r; double *IOP; double *iolimit; int Colstart; int iCol; int posA; int posAi; int posB; int posBi; const int Nrems2 = POW2((M+3)/2); const int Nroot_1_ColInc = POW2(M)-Nrems2; const int Nroot_1 = POW2(M/2-1)-1; const int ColstartShift = (M+1)/2 +1; posA = POW2(M); // 1/2 of POW2(M) complexes posAi = posA + 1; posB = posA + 2; posBi = posB + 1; iolimit = ioptr + Nrems2; const size_t ioptr_inc = (size_t) POW2((M / 2 + 1)); for (; ioptr < iolimit; ioptr += ioptr_inc) { for (Colstart = Nroot_1; Colstart >= 0; Colstart--) { iCol = Nroot_1; p0r = ioptr+ Nroot_1_ColInc + BRLow[Colstart]*4; IOP = ioptr + (Colstart << ColstartShift); p1r = IOP + BRLow[iCol]*4; f0r = *(p0r); f0i = *(p0r+1); f1r = *(p0r+posA); f1i = *(p0r+posAi); for (; iCol > Colstart;) { f2r = *(p0r+2); f2i = *(p0r+(2+1)); f3r = *(p0r+posB); f3i = *(p0r+posBi); f4r = *(p1r); f4i = *(p1r+1); f5r = *(p1r+posA); f5i = *(p1r+posAi); f6r = *(p1r+2); f6i = *(p1r+(2+1)); f7r = *(p1r+posB); f7i = *(p1r+posBi); t0r = f0r + f1r; t0i = f0i + f1i; f1r = f0r - f1r; f1i = f0i - f1i; t1r = f2r + f3r; t1i = f2i + f3i; f3r = f2r - f3r; f3i = f2i - f3i; f0r = f4r + f5r; f0i = f4i + f5i; f5r = f4r - f5r; f5i = f4i - f5i; f2r = f6r + f7r; f2i = f6i + f7i; f7r = f6r - f7r; f7i = f6i - f7i; *(p1r) = scale*t0r; *(p1r+1) = scale*t0i; *(p1r+2) = scale*f1r; *(p1r+(2+1)) = scale*f1i; *(p1r+posA) = scale*t1r; *(p1r+posAi) = scale*t1i; *(p1r+posB) = scale*f3r; *(p1r+posBi) = scale*f3i; *(p0r) = scale*f0r; *(p0r+1) = scale*f0i; *(p0r+2) = scale*f5r; *(p0r+(2+1)) = scale*f5i; *(p0r+posA) = scale*f2r; *(p0r+posAi) = scale*f2i; *(p0r+posB) = scale*f7r; *(p0r+posBi) = scale*f7i; p0r -= Nrems2; f0r = *(p0r); f0i = *(p0r+1); f1r = *(p0r+posA); f1i = *(p0r+posAi); iCol -= 1; p1r = IOP + BRLow[iCol]*4; } f2r = *(p0r+2); f2i = *(p0r+(2+1)); f3r = *(p0r+posB); f3i = *(p0r+posBi); t0r = f0r + f1r; t0i = f0i + f1i; f1r = f0r - f1r; f1i = f0i - f1i; t1r = f2r + f3r; t1i = f2i + f3i; f3r = f2r - f3r; f3i = f2i - f3i; *(p0r) = scale*t0r; *(p0r+1) = scale*t0i; *(p0r+2) = scale*f1r; *(p0r+(2+1)) = scale*f1i; *(p0r+posA) = scale*t1r; *(p0r+posAi) = scale*t1i; *(p0r+posB) = scale*f3r; *(p0r+posBi) = scale*f3i; } } } static inline void ifft2pt(double *ioptr, double scale); static inline void ifft2pt(double *ioptr, double scale) { /*** RADIX 2 ifft ***/ double f0r, f0i, f1r, f1i; double t0r, t0i; /* bit reversed load */ f0r = ioptr[0]; f0i = ioptr[1]; f1r = ioptr[2]; f1i = ioptr[3]; /* Butterflys */ /* f0 - - t0 f1 - 1 - f1 */ t0r = f0r + f1r; t0i = f0i + f1i; f1r = f0r - f1r; f1i = f0i - f1i; /* store result */ ioptr[0] = scale*t0r; ioptr[1] = scale*t0i; ioptr[2] = scale*f1r; ioptr[3] = scale*f1i; } static inline void ifft4pt(double *ioptr, double scale); static inline void ifft4pt(double *ioptr, double scale) { /*** RADIX 4 ifft ***/ double f0r, f0i, f1r, f1i, f2r, f2i, f3r, f3i; double t0r, t0i, t1r, t1i; /* bit reversed load */ f0r = ioptr[0]; f0i = ioptr[1]; f1r = ioptr[4]; f1i = ioptr[5]; f2r = ioptr[2]; f2i = ioptr[3]; f3r = ioptr[6]; f3i = ioptr[7]; /* Butterflys */ /* f0 - - t0 - - f0 f1 - 1 - f1 - - f1 f2 - - f2 - 1 - f2 f3 - 1 - t1 - i - f3 */ t0r = f0r + f1r; t0i = f0i + f1i; f1r = f0r - f1r; f1i = f0i - f1i; t1r = f2r - f3r; t1i = f2i - f3i; f2r = f2r + f3r; f2i = f2i + f3i; f0r = t0r + f2r; f0i = t0i + f2i; f2r = t0r - f2r; f2i = t0i - f2i; f3r = f1r + t1i; f3i = f1i - t1r; f1r = f1r - t1i; f1i = f1i + t1r; /* store result */ ioptr[0] = scale*f0r; ioptr[1] = scale*f0i; ioptr[2] = scale*f1r; ioptr[3] = scale*f1i; ioptr[4] = scale*f2r; ioptr[5] = scale*f2i; ioptr[6] = scale*f3r; ioptr[7] = scale*f3i; } static inline void ifft8pt(double *ioptr, double scale); static inline void ifft8pt(double *ioptr, double scale) { /*** RADIX 8 ifft ***/ double w0r = 1.0/MYROOT2; /* cos(pi/4) */ double f0r, f0i, f1r, f1i, f2r, f2i, f3r, f3i; double f4r, f4i, f5r, f5i, f6r, f6i, f7r, f7i; double t0r, t0i, t1r, t1i; const double Two = 2.0; /* bit reversed load */ f0r = ioptr[0]; f0i = ioptr[1]; f1r = ioptr[8]; f1i = ioptr[9]; f2r = ioptr[4]; f2i = ioptr[5]; f3r = ioptr[12]; f3i = ioptr[13]; f4r = ioptr[2]; f4i = ioptr[3]; f5r = ioptr[10]; f5i = ioptr[11]; f6r = ioptr[6]; f6i = ioptr[7]; f7r = ioptr[14]; f7i = ioptr[15]; /* Butterflys */ /* f0 - - t0 - - f0 - - f0 f1 - 1 - f1 - - f1 - - f1 f2 - - f2 - 1 - f2 - - f2 f3 - 1 - t1 - i - f3 - - f3 f4 - - t0 - - f4 - 1 - t0 f5 - 1 - f5 - - f5 - w3 - f4 f6 - - f6 - 1 - f6 - i - t1 f7 - 1 - t1 - i - f7 - iw3- f6 */ t0r = f0r + f1r; t0i = f0i + f1i; f1r = f0r - f1r; f1i = f0i - f1i; t1r = f2r - f3r; t1i = f2i - f3i; f2r = f2r + f3r; f2i = f2i + f3i; f0r = t0r + f2r; f0i = t0i + f2i; f2r = t0r - f2r; f2i = t0i - f2i; f3r = f1r + t1i; f3i = f1i - t1r; f1r = f1r - t1i; f1i = f1i + t1r; t0r = f4r + f5r; t0i = f4i + f5i; f5r = f4r - f5r; f5i = f4i - f5i; t1r = f6r - f7r; t1i = f6i - f7i; f6r = f6r + f7r; f6i = f6i + f7i; f4r = t0r + f6r; f4i = t0i + f6i; f6r = t0r - f6r; f6i = t0i - f6i; f7r = f5r + t1i; f7i = f5i - t1r; f5r = f5r - t1i; f5i = f5i + t1r; t0r = f0r - f4r; t0i = f0i - f4i; f0r = f0r + f4r; f0i = f0i + f4i; t1r = f2r + f6i; t1i = f2i - f6r; f2r = f2r - f6i; f2i = f2i + f6r; f4r = f1r - f5r * w0r + f5i * w0r; f4i = f1i - f5r * w0r - f5i * w0r; f1r = f1r * Two - f4r; f1i = f1i * Two - f4i; f6r = f3r + f7r * w0r + f7i * w0r; f6i = f3i - f7r * w0r + f7i * w0r; f3r = f3r * Two - f6r; f3i = f3i * Two - f6i; /* store result */ ioptr[0] = scale*f0r; ioptr[1] = scale*f0i; ioptr[2] = scale*f1r; ioptr[3] = scale*f1i; ioptr[4] = scale*f2r; ioptr[5] = scale*f2i; ioptr[6] = scale*f3r; ioptr[7] = scale*f3i; ioptr[8] = scale*t0r; ioptr[9] = scale*t0i; ioptr[10] = scale*f4r; ioptr[11] = scale*f4i; ioptr[12] = scale*t1r; ioptr[13] = scale*t1i; ioptr[14] = scale*f6r; ioptr[15] = scale*f6i; } static inline void ibfR2(double *ioptr, int M, int NDiffU); static inline void ibfR2(double *ioptr, int M, int NDiffU) { /*** 2nd radix 2 stage ***/ int pos; int posi; int pinc; int pnext; int NSameU; int SameUCnt; double *pstrt; double *p0r, *p1r, *p2r, *p3r; double f0r, f0i, f1r, f1i, f2r, f2i, f3r, f3i; double f4r, f4i, f5r, f5i, f6r, f6i, f7r, f7i; /* const double Two = 2.0; */ pinc = NDiffU * 2; // 2 doubles per complex pnext = pinc * 4; pos = 2; posi = pos+1; NSameU = POW2(M) / 4 /NDiffU; // 4 Us at a time pstrt = ioptr; p0r = pstrt; p1r = pstrt+pinc; p2r = p1r+pinc; p3r = p2r+pinc; /* Butterflys */ /* f0 - - f4 f1 - 1 - f5 f2 - - f6 f3 - 1 - f7 */ /* Butterflys */ /* f0 - - f4 f1 - 1 - f5 f2 - - f6 f3 - 1 - f7 */ for (SameUCnt = NSameU; SameUCnt > 0 ; SameUCnt--) { f0r = *p0r; f1r = *p1r; f0i = *(p0r + 1); f1i = *(p1r + 1); f2r = *p2r; f3r = *p3r; f2i = *(p2r + 1); f3i = *(p3r + 1); f4r = f0r + f1r; f4i = f0i + f1i; f5r = f0r - f1r; f5i = f0i - f1i; f6r = f2r + f3r; f6i = f2i + f3i; f7r = f2r - f3r; f7i = f2i - f3i; *p0r = f4r; *(p0r + 1) = f4i; *p1r = f5r; *(p1r + 1) = f5i; *p2r = f6r; *(p2r + 1) = f6i; *p3r = f7r; *(p3r + 1) = f7i; f0r = *(p0r + pos); f1i = *(p1r + posi); f0i = *(p0r + posi); f1r = *(p1r + pos); f2r = *(p2r + pos); f3i = *(p3r + posi); f2i = *(p2r + posi); f3r = *(p3r + pos); f4r = f0r - f1i; f4i = f0i + f1r; f5r = f0r + f1i; f5i = f0i - f1r; f6r = f2r - f3i; f6i = f2i + f3r; f7r = f2r + f3i; f7i = f2i - f3r; *(p0r + pos) = f4r; *(p0r + posi) = f4i; *(p1r + pos) = f5r; *(p1r + posi) = f5i; *(p2r + pos) = f6r; *(p2r + posi) = f6i; *(p3r + pos) = f7r; *(p3r + posi) = f7i; p0r += pnext; p1r += pnext; p2r += pnext; p3r += pnext; } } static inline void ibfR4(double *ioptr, int M, int NDiffU); static inline void ibfR4(double *ioptr, int M, int NDiffU) { /*** 1 radix 4 stage ***/ int pos; int posi; int pinc; int pnext; int pnexti; int NSameU; int SameUCnt; double *pstrt; double *p0r, *p1r, *p2r, *p3r; double w1r = 1.0/MYROOT2; /* cos(pi/4) */ double f0r, f0i, f1r, f1i, f2r, f2i, f3r, f3i; double f4r, f4i, f5r, f5i, f6r, f6i, f7r, f7i; double t1r, t1i; const double Two = 2.0; pinc = NDiffU * 2; // 2 doubles per complex pnext = pinc * 4; pnexti = pnext + 1; pos = 2; posi = pos+1; NSameU = POW2(M) / 4 /NDiffU; // 4 pts per butterfly pstrt = ioptr; p0r = pstrt; p1r = pstrt+pinc; p2r = p1r+pinc; p3r = p2r+pinc; /* Butterflys */ /* f0 - - f0 - - f4 f1 - 1 - f5 - - f5 f2 - - f6 - 1 - f6 f3 - 1 - f3 - -i - f7 */ /* Butterflys */ /* f0 - - f4 - - f4 f1 - -i - t1 - - f5 f2 - - f2 - w1 - f6 f3 - -i - f7 - iw1- f7 */ f0r = *p0r; f1r = *p1r; f2r = *p2r; f3r = *p3r; f0i = *(p0r + 1); f1i = *(p1r + 1); f2i = *(p2r + 1); f3i = *(p3r + 1); f5r = f0r - f1r; f5i = f0i - f1i; f0r = f0r + f1r; f0i = f0i + f1i; f6r = f2r + f3r; f6i = f2i + f3i; f3r = f2r - f3r; f3i = f2i - f3i; for (SameUCnt = NSameU-1; SameUCnt > 0 ; SameUCnt--) { f7r = f5r + f3i; f7i = f5i - f3r; f5r = f5r - f3i; f5i = f5i + f3r; f4r = f0r + f6r; f4i = f0i + f6i; f6r = f0r - f6r; f6i = f0i - f6i; f2r = *(p2r + pos); f2i = *(p2r + posi); f1r = *(p1r + pos); f1i = *(p1r + posi); f3i = *(p3r + posi); f0r = *(p0r + pos); f3r = *(p3r + pos); f0i = *(p0r + posi); *p3r = f7r; *p0r = f4r; *(p3r + 1) = f7i; *(p0r + 1) = f4i; *p1r = f5r; *p2r = f6r; *(p1r + 1) = f5i; *(p2r + 1) = f6i; f7r = f2r + f3i; f7i = f2i - f3r; f2r = f2r - f3i; f2i = f2i + f3r; f4r = f0r - f1i; f4i = f0i + f1r; t1r = f0r + f1i; t1i = f0i - f1r; f5r = t1r - f7r * w1r - f7i * w1r; f5i = t1i + f7r * w1r - f7i * w1r; f7r = t1r * Two - f5r; f7i = t1i * Two - f5i; f6r = f4r - f2r * w1r + f2i * w1r; f6i = f4i - f2r * w1r - f2i * w1r; f4r = f4r * Two - f6r; f4i = f4i * Two - f6i; f3r = *(p3r + pnext); f0r = *(p0r + pnext); f3i = *(p3r + pnexti); f0i = *(p0r + pnexti); f2r = *(p2r + pnext); f2i = *(p2r + pnexti); f1r = *(p1r + pnext); f1i = *(p1r + pnexti); *(p2r + pos) = f6r; *(p1r + pos) = f5r; *(p2r + posi) = f6i; *(p1r + posi) = f5i; *(p3r + pos) = f7r; *(p0r + pos) = f4r; *(p3r + posi) = f7i; *(p0r + posi) = f4i; f6r = f2r + f3r; f6i = f2i + f3i; f3r = f2r - f3r; f3i = f2i - f3i; f5r = f0r - f1r; f5i = f0i - f1i; f0r = f0r + f1r; f0i = f0i + f1i; p3r += pnext; p0r += pnext; p1r += pnext; p2r += pnext; } f7r = f5r + f3i; f7i = f5i - f3r; f5r = f5r - f3i; f5i = f5i + f3r; f4r = f0r + f6r; f4i = f0i + f6i; f6r = f0r - f6r; f6i = f0i - f6i; f2r = *(p2r + pos); f2i = *(p2r + posi); f1r = *(p1r + pos); f1i = *(p1r + posi); f3i = *(p3r + posi); f0r = *(p0r + pos); f3r = *(p3r + pos); f0i = *(p0r + posi); *p3r = f7r; *p0r = f4r; *(p3r + 1) = f7i; *(p0r + 1) = f4i; *p1r = f5r; *p2r = f6r; *(p1r + 1) = f5i; *(p2r + 1) = f6i; f7r = f2r + f3i; f7i = f2i - f3r; f2r = f2r - f3i; f2i = f2i + f3r; f4r = f0r - f1i; f4i = f0i + f1r; t1r = f0r + f1i; t1i = f0i - f1r; f5r = t1r - f7r * w1r - f7i * w1r; f5i = t1i + f7r * w1r - f7i * w1r; f7r = t1r * Two - f5r; f7i = t1i * Two - f5i; f6r = f4r - f2r * w1r + f2i * w1r; f6i = f4i - f2r * w1r - f2i * w1r; f4r = f4r * Two - f6r; f4i = f4i * Two - f6i; *(p2r + pos) = f6r; *(p1r + pos) = f5r; *(p2r + posi) = f6i; *(p1r + posi) = f5i; *(p3r + pos) = f7r; *(p0r + pos) = f4r; *(p3r + posi) = f7i; *(p0r + posi) = f4i; } static inline void ibfstages(double *ioptr, int M, double *Utbl, int Ustride, int NDiffU, int StageCnt); static inline void ibfstages(double *ioptr, int M, double *Utbl, int Ustride, int NDiffU, int StageCnt) { /*** RADIX 8 Stages ***/ int pos; int posi; int pinc; int pnext; int NSameU; int Uinc; int Uinc2; int Uinc4; int DiffUCnt; int SameUCnt; int U2toU3; double *pstrt; double *p0r, *p1r, *p2r, *p3r; double *u0r, *u0i, *u1r, *u1i, *u2r, *u2i; double w0r, w0i, w1r, w1i, w2r, w2i, w3r, w3i; double f0r, f0i, f1r, f1i, f2r, f2i, f3r, f3i; double f4r, f4i, f5r, f5i, f6r, f6i, f7r, f7i; double t0r, t0i, t1r, t1i; const double Two = 2.0; pinc = NDiffU * 2; // 2 doubles per complex pnext = pinc * 8; pos = pinc * 4; posi = pos + 1; NSameU = POW2(M) / 8 /NDiffU; // 8 pts per butterfly Uinc = NSameU * Ustride; Uinc2 = Uinc * 2; Uinc4 = Uinc * 4; U2toU3 = (POW2(M) / 8)*Ustride; for (; StageCnt > 0 ; StageCnt--) { u0r = &Utbl[0]; u0i = &Utbl[POW2(M-2)*Ustride]; u1r = u0r; u1i = u0i; u2r = u0r; u2i = u0i; w0r = *u0r; w0i = *u0i; w1r = *u1r; w1i = *u1i; w2r = *u2r; w2i = *u2i; w3r = *(u2r+U2toU3); w3i = *(u2i-U2toU3); pstrt = ioptr; p0r = pstrt; p1r = pstrt+pinc; p2r = p1r+pinc; p3r = p2r+pinc; /* Butterflys */ /* f0 - - t0 - - f0 - - f0 f1 - w0- f1 - - f1 - - f1 f2 - - f2 - w1- f2 - - f4 f3 - w0- t1 - iw1- f3 - - f5 f4 - - t0 - - f4 - w2- t0 f5 - w0- f5 - - f5 - w3- t1 f6 - - f6 - w1- f6 - iw2- f6 f7 - w0- t1 - iw1- f7 - iw3- f7 */ for (DiffUCnt = NDiffU; DiffUCnt > 0 ; DiffUCnt--) { f0r = *p0r; f0i = *(p0r + 1); f1r = *p1r; f1i = *(p1r + 1); for (SameUCnt = NSameU-1; SameUCnt > 0 ; SameUCnt--) { f2r = *p2r; f2i = *(p2r + 1); f3r = *p3r; f3i = *(p3r + 1); t0r = f0r + f1r * w0r - f1i * w0i; t0i = f0i + f1r * w0i + f1i * w0r; f1r = f0r * Two - t0r; f1i = f0i * Two - t0i; f4r = *(p0r + pos); f4i = *(p0r + posi); f5r = *(p1r + pos); f5i = *(p1r + posi); f6r = *(p2r + pos); f6i = *(p2r + posi); f7r = *(p3r + pos); f7i = *(p3r + posi); t1r = f2r - f3r * w0r + f3i * w0i; t1i = f2i - f3r * w0i - f3i * w0r; f2r = f2r * Two - t1r; f2i = f2i * Two - t1i; f0r = t0r + f2r * w1r - f2i * w1i; f0i = t0i + f2r * w1i + f2i * w1r; f2r = t0r * Two - f0r; f2i = t0i * Two - f0i; f3r = f1r + t1r * w1i + t1i * w1r; f3i = f1i - t1r * w1r + t1i * w1i; f1r = f1r * Two - f3r; f1i = f1i * Two - f3i; t0r = f4r + f5r * w0r - f5i * w0i; t0i = f4i + f5r * w0i + f5i * w0r; f5r = f4r * Two - t0r; f5i = f4i * Two - t0i; t1r = f6r - f7r * w0r + f7i * w0i; t1i = f6i - f7r * w0i - f7i * w0r; f6r = f6r * Two - t1r; f6i = f6i * Two - t1i; f4r = t0r + f6r * w1r - f6i * w1i; f4i = t0i + f6r * w1i + f6i * w1r; f6r = t0r * Two - f4r; f6i = t0i * Two - f4i; f7r = f5r + t1r * w1i + t1i * w1r; f7i = f5i - t1r * w1r + t1i * w1i; f5r = f5r * Two - f7r; f5i = f5i * Two - f7i; t0r = f0r - f4r * w2r + f4i * w2i; t0i = f0i - f4r * w2i - f4i * w2r; f0r = f0r * Two - t0r; f0i = f0i * Two - t0i; t1r = f1r - f5r * w3r + f5i * w3i; t1i = f1i - f5r * w3i - f5i * w3r; f1r = f1r * Two - t1r; f1i = f1i * Two - t1i; *(p0r + pos) = t0r; *(p0r + posi) = t0i; *p0r = f0r; *(p0r + 1) = f0i; p0r += pnext; f0r = *p0r; f0i = *(p0r + 1); *(p1r + pos) = t1r; *(p1r + posi) = t1i; *p1r = f1r; *(p1r + 1) = f1i; p1r += pnext; f1r = *p1r; f1i = *(p1r + 1); f4r = f2r - f6r * w2i - f6i * w2r; f4i = f2i + f6r * w2r - f6i * w2i; f6r = f2r * Two - f4r; f6i = f2i * Two - f4i; f5r = f3r - f7r * w3i - f7i * w3r; f5i = f3i + f7r * w3r - f7i * w3i; f7r = f3r * Two - f5r; f7i = f3i * Two - f5i; *p2r = f4r; *(p2r + 1) = f4i; *(p2r + pos) = f6r; *(p2r + posi) = f6i; p2r += pnext; *p3r = f5r; *(p3r + 1) = f5i; *(p3r + pos) = f7r; *(p3r + posi) = f7i; p3r += pnext; } f2r = *p2r; f2i = *(p2r + 1); f3r = *p3r; f3i = *(p3r + 1); t0r = f0r + f1r * w0r - f1i * w0i; t0i = f0i + f1r * w0i + f1i * w0r; f1r = f0r * Two - t0r; f1i = f0i * Two - t0i; f4r = *(p0r + pos); f4i = *(p0r + posi); f5r = *(p1r + pos); f5i = *(p1r + posi); f6r = *(p2r + pos); f6i = *(p2r + posi); f7r = *(p3r + pos); f7i = *(p3r + posi); t1r = f2r - f3r * w0r + f3i * w0i; t1i = f2i - f3r * w0i - f3i * w0r; f2r = f2r * Two - t1r; f2i = f2i * Two - t1i; f0r = t0r + f2r * w1r - f2i * w1i; f0i = t0i + f2r * w1i + f2i * w1r; f2r = t0r * Two - f0r; f2i = t0i * Two - f0i; f3r = f1r + t1r * w1i + t1i * w1r; f3i = f1i - t1r * w1r + t1i * w1i; f1r = f1r * Two - f3r; f1i = f1i * Two - f3i; if (DiffUCnt == NDiffU/2) Uinc4 = -Uinc4; u0r += Uinc4; u0i -= Uinc4; u1r += Uinc2; u1i -= Uinc2; u2r += Uinc; u2i -= Uinc; pstrt += 2; t0r = f4r + f5r * w0r - f5i * w0i; t0i = f4i + f5r * w0i + f5i * w0r; f5r = f4r * Two - t0r; f5i = f4i * Two - t0i; t1r = f6r - f7r * w0r + f7i * w0i; t1i = f6i - f7r * w0i - f7i * w0r; f6r = f6r * Two - t1r; f6i = f6i * Two - t1i; f4r = t0r + f6r * w1r - f6i * w1i; f4i = t0i + f6r * w1i + f6i * w1r; f6r = t0r * Two - f4r; f6i = t0i * Two - f4i; f7r = f5r + t1r * w1i + t1i * w1r; f7i = f5i - t1r * w1r + t1i * w1i; f5r = f5r * Two - f7r; f5i = f5i * Two - f7i; w0r = *u0r; w0i = *u0i; w1r = *u1r; w1i = *u1i; if (DiffUCnt <= NDiffU/2) w0r = -w0r; t0r = f0r - f4r * w2r + f4i * w2i; t0i = f0i - f4r * w2i - f4i * w2r; f0r = f0r * Two - t0r; f0i = f0i * Two - t0i; f4r = f2r - f6r * w2i - f6i * w2r; f4i = f2i + f6r * w2r - f6i * w2i; f6r = f2r * Two - f4r; f6i = f2i * Two - f4i; *(p0r + pos) = t0r; *p2r = f4r; *(p0r + posi) = t0i; *(p2r + 1) = f4i; w2r = *u2r; w2i = *u2i; *p0r = f0r; *(p2r + pos) = f6r; *(p0r + 1) = f0i; *(p2r + posi) = f6i; p0r = pstrt; p2r = pstrt + pinc + pinc; t1r = f1r - f5r * w3r + f5i * w3i; t1i = f1i - f5r * w3i - f5i * w3r; f1r = f1r * Two - t1r; f1i = f1i * Two - t1i; f5r = f3r - f7r * w3i - f7i * w3r; f5i = f3i + f7r * w3r - f7i * w3i; f7r = f3r * Two - f5r; f7i = f3i * Two - f5i; *(p1r + pos) = t1r; *p3r = f5r; *(p1r + posi) = t1i; *(p3r + 1) = f5i; w3r = *(u2r+U2toU3); w3i = *(u2i-U2toU3); *p1r = f1r; *(p3r + pos) = f7r; *(p1r + 1) = f1i; *(p3r + posi) = f7i; p1r = pstrt + pinc; p3r = p2r + pinc; } NSameU /= 8; Uinc /= 8; Uinc2 /= 8; Uinc4 = Uinc * 4; NDiffU *= 8; pinc *= 8; pnext *= 8; pos *= 8; posi = pos + 1; } } void ifftrecurs(double *ioptr, int M, double *Utbl, int Ustride, int NDiffU, int StageCnt); void ifftrecurs(double *ioptr, int M, double *Utbl, int Ustride, int NDiffU, int StageCnt) { /* recursive bfstages calls to maximize on chip cache efficiency */ int i1; if (M <= MCACHE) ibfstages(ioptr, M, Utbl, Ustride, NDiffU, StageCnt); /* RADIX 8 Stages */ else { for (i1=0; i1<8; i1++) { ifftrecurs(&ioptr[i1*POW2(M-3)*2], M-3, Utbl, 8*Ustride, NDiffU, StageCnt-1); /* RADIX 8 Stages */ } ibfstages(ioptr, M, Utbl, Ustride, POW2(M-3), 1); /* RADIX 8 Stage */ } } void iffts1(double *ioptr, int M, int Rows, double *Utbl, short *BRLow) { /* Compute in-place inverse complex fft on the rows of the input array */ /* INPUTS */ /* *ioptr = input data array */ /* M = log2 of fft size */ /* Rows = number of rows in ioptr array (use Rows of 1 if ioptr is a 1 dimensional array) */ /* *Utbl = cosine table */ /* *BRLow = bit reversed counter table */ /* OUTPUTS */ /* *ioptr = output data array */ int StageCnt; int NDiffU; const double scale = 1.0/POW2(M); switch (M) { case 0: break; case 1: for (; Rows>0; Rows--) { ifft2pt(ioptr, scale); /* a 2 pt fft */ ioptr += 2*POW2(M); } break; case 2: for (; Rows>0; Rows--) { ifft4pt(ioptr, scale); /* a 4 pt fft */ ioptr += 2*POW2(M); } break; case 3: for (; Rows>0; Rows--) { ifft8pt(ioptr, scale); /* an 8 pt fft */ ioptr += 2*POW2(M); } break; default: for (; Rows>0; Rows--) { scbitrevR2(ioptr, M, BRLow, scale); /* bit reverse and first radix 2 stage */ StageCnt = (M-1) / 3; // number of radix 8 stages NDiffU = 2; // one radix 2 stage already complete if ( (M-1-(StageCnt * 3)) == 1 ) { ibfR2(ioptr, M, NDiffU); /* 1 radix 2 stage */ NDiffU *= 2; } if ( (M-1-(StageCnt * 3)) == 2 ) { ibfR4(ioptr, M, NDiffU); /* 1 radix 4 stage */ NDiffU *= 4; } if (M <= MCACHE) ibfstages(ioptr, M, Utbl, 1, NDiffU, StageCnt); /* RADIX 8 Stages */ else { ifftrecurs(ioptr, M, Utbl, 1, NDiffU, StageCnt); /* RADIX 8 Stages */ } ioptr += 2*POW2(M); } } } /************************************************ parts of rffts1 *************************************************/ static inline void rfft1pt(double *ioptr); static inline void rfft1pt(double *ioptr) { /*** RADIX 2 rfft ***/ double f0r, f0i; double t0r, t0i; /* bit reversed load */ f0r = ioptr[0]; f0i = ioptr[1]; /* finish rfft */ t0r = f0r + f0i; t0i = f0r - f0i; /* store result */ ioptr[0] = t0r; ioptr[1] = t0i; } static inline void rfft2pt(double *ioptr); static inline void rfft2pt(double *ioptr) { /*** RADIX 4 rfft ***/ double f0r, f0i, f1r, f1i; double t0r, t0i; /* bit reversed load */ f0r = ioptr[0]; f0i = ioptr[1]; f1r = ioptr[2]; f1i = ioptr[3]; /* Butterflys */ /* f0 - - t0 f1 - 1 - f1 */ t0r = f0r + f1r; t0i = f0i + f1i; f1r = f0r - f1r; f1i = f1i - f0i; /* finish rfft */ f0r = t0r + t0i; f0i = t0r - t0i; /* store result */ ioptr[0] = f0r; ioptr[1] = f0i; ioptr[2] = f1r; ioptr[3] = f1i; } static inline void rfft4pt(double *ioptr); static inline void rfft4pt(double *ioptr) { /*** RADIX 8 rfft ***/ double f0r, f0i, f1r, f1i, f2r, f2i, f3r, f3i; double t0r, t0i, t1r, t1i; double w0r = 1.0/MYROOT2; /* cos(pi/4) */ const double Two = 2.0; const double scale = 0.5; /* bit reversed load */ f0r = ioptr[0]; f0i = ioptr[1]; f1r = ioptr[4]; f1i = ioptr[5]; f2r = ioptr[2]; f2i = ioptr[3]; f3r = ioptr[6]; f3i = ioptr[7]; /* Butterflys */ /* f0 - - t0 - - f0 f1 - 1 - f1 - - f1 f2 - - f2 - 1 - f2 f3 - 1 - t1 - -i - f3 */ t0r = f0r + f1r; t0i = f0i + f1i; f1r = f0r - f1r; f1i = f0i - f1i; t1r = f2r - f3r; t1i = f2i - f3i; f2r = f2r + f3r; f2i = f2i + f3i; f0r = t0r + f2r; f0i = t0i + f2i; f2r = t0r - f2r; f2i = f2i - t0i; // neg for rfft f3r = f1r - t1i; f3i = f1i + t1r; f1r = f1r + t1i; f1i = f1i - t1r; /* finish rfft */ t0r = f0r + f0i; /* compute Re(x[0]) */ t0i = f0r - f0i; /* compute Re(x[N/2]) */ t1r = f1r + f3r; t1i = f1i - f3i; f0r = f1i + f3i; f0i = f3r - f1r; f1r = t1r + w0r * f0r + w0r * f0i; f1i = t1i - w0r * f0r + w0r * f0i; f3r = Two * t1r - f1r; f3i = f1i - Two * t1i; /* store result */ ioptr[4] = f2r; ioptr[5] = f2i; ioptr[0] = t0r; ioptr[1] = t0i; ioptr[2] = scale*f1r; ioptr[3] = scale*f1i; ioptr[6] = scale*f3r; ioptr[7] = scale*f3i; } static inline void rfft8pt(double *ioptr); static inline void rfft8pt(double *ioptr) { /*** RADIX 16 rfft ***/ double w0r = 1.0/MYROOT2; /* cos(pi/4) */ double w1r = MYCOSPID8; /* cos(pi/8) */ double w1i = MYSINPID8; /* sin(pi/8) */ double f0r, f0i, f1r, f1i, f2r, f2i, f3r, f3i; double f4r, f4i, f5r, f5i, f6r, f6i, f7r, f7i; double t0r, t0i, t1r, t1i; const double Two = 2.0; const double scale = 0.5; /* bit reversed load */ f0r = ioptr[0]; f0i = ioptr[1]; f1r = ioptr[8]; f1i = ioptr[9]; f2r = ioptr[4]; f2i = ioptr[5]; f3r = ioptr[12]; f3i = ioptr[13]; f4r = ioptr[2]; f4i = ioptr[3]; f5r = ioptr[10]; f5i = ioptr[11]; f6r = ioptr[6]; f6i = ioptr[7]; f7r = ioptr[14]; f7i = ioptr[15]; /* Butterflys */ /* f0 - - t0 - - f0 - - f0 f1 - 1 - f1 - - f1 - - f1 f2 - - f2 - 1 - f2 - - f2 f3 - 1 - t1 - -i - f3 - - f3 f4 - - t0 - - f4 - 1 - t0 f5 - 1 - f5 - - f5 - w3 - f4 f6 - - f6 - 1 - f6 - -i - t1 f7 - 1 - t1 - -i - f7 - iw3- f6 */ t0r = f0r + f1r; t0i = f0i + f1i; f1r = f0r - f1r; f1i = f0i - f1i; t1r = f2r - f3r; t1i = f2i - f3i; f2r = f2r + f3r; f2i = f2i + f3i; f0r = t0r + f2r; f0i = t0i + f2i; f2r = t0r - f2r; f2i = t0i - f2i; f3r = f1r - t1i; f3i = f1i + t1r; f1r = f1r + t1i; f1i = f1i - t1r; t0r = f4r + f5r; t0i = f4i + f5i; f5r = f4r - f5r; f5i = f4i - f5i; t1r = f6r - f7r; t1i = f6i - f7i; f6r = f6r + f7r; f6i = f6i + f7i; f4r = t0r + f6r; f4i = t0i + f6i; f6r = t0r - f6r; f6i = t0i - f6i; f7r = f5r - t1i; f7i = f5i + t1r; f5r = f5r + t1i; f5i = f5i - t1r; t0r = f0r - f4r; t0i = f4i - f0i; // neg for rfft f0r = f0r + f4r; f0i = f0i + f4i; t1r = f2r - f6i; t1i = f2i + f6r; f2r = f2r + f6i; f2i = f2i - f6r; f4r = f1r - f5r * w0r - f5i * w0r; f4i = f1i + f5r * w0r - f5i * w0r; f1r = f1r * Two - f4r; f1i = f1i * Two - f4i; f6r = f3r + f7r * w0r - f7i * w0r; f6i = f3i + f7r * w0r + f7i * w0r; f3r = f3r * Two - f6r; f3i = f3i * Two - f6i; /* finish rfft */ f5r = f0r + f0i; /* compute Re(x[0]) */ f5i = f0r - f0i; /* compute Re(x[N/2]) */ f0r = f2r + t1r; f0i = f2i - t1i; f7r = f2i + t1i; f7i = t1r - f2r; f2r = f0r + w0r * f7r + w0r * f7i; f2i = f0i - w0r * f7r + w0r * f7i; t1r = Two * f0r - f2r; t1i = f2i - Two * f0i; f0r = f1r + f6r; f0i = f1i - f6i; f7r = f1i + f6i; f7i = f6r - f1r; f1r = f0r + w1r * f7r + w1i * f7i; f1i = f0i - w1i * f7r + w1r * f7i; f6r = Two * f0r - f1r; f6i = f1i - Two * f0i; f0r = f3r + f4r; f0i = f3i - f4i; f7r = f3i + f4i; f7i = f4r - f3r; f3r = f0r + w1i * f7r + w1r * f7i; f3i = f0i - w1r * f7r + w1i * f7i; f4r = Two * f0r - f3r; f4i = f3i - Two * f0i; /* store result */ ioptr[8] = t0r; ioptr[9] = t0i; ioptr[0] = f5r; ioptr[1] = f5i; ioptr[4] = scale*f2r; ioptr[5] = scale*f2i; ioptr[12] = scale*t1r; ioptr[13] = scale*t1i; ioptr[2] = scale*f1r; ioptr[3] = scale*f1i; ioptr[6] = scale*f3r; ioptr[7] = scale*f3i; ioptr[10] = scale*f4r; ioptr[11] = scale*f4i; ioptr[14] = scale*f6r; ioptr[15] = scale*f6i; } static inline void frstage(double *ioptr, int M, double *Utbl); static inline void frstage(double *ioptr, int M, double *Utbl) { /* Finish RFFT */ int pos; int posi; int diffUcnt; double *p0r, *p1r; double *u0r, *u0i; double w0r, w0i; double f0r, f0i, f1r, f1i, f4r, f4i, f5r, f5i; double t0r, t0i, t1r, t1i; const double Two = 2.0; pos = POW2(M-1); posi = pos + 1; p0r = ioptr; p1r = ioptr + pos/2; u0r = Utbl + (size_t) POW2(M-3); w0r = *u0r, f0r = *(p0r); f0i = *(p0r + 1); f4r = *(p0r + pos); f4i = *(p0r + posi); f1r = *(p1r); f1i = *(p1r + 1); f5r = *(p1r + pos); f5i = *(p1r + posi); t0r = Two * f0r + Two * f0i; /* compute Re(x[0]) */ t0i = Two * f0r - Two * f0i; /* compute Re(x[N/2]) */ t1r = f4r + f4r; t1i = -f4i - f4i; f0r = f1r + f5r; f0i = f1i - f5i; f4r = f1i + f5i; f4i = f5r - f1r; f1r = f0r + w0r * f4r + w0r * f4i; f1i = f0i - w0r * f4r + w0r * f4i; f5r = Two * f0r - f1r; f5i = f1i - Two * f0i; *(p0r) = t0r; *(p0r + 1) = t0i; *(p0r + pos) = t1r; *(p0r + posi) = t1i; *(p1r) = f1r; *(p1r + 1) = f1i; *(p1r + pos) = f5r; *(p1r + posi) = f5i; u0r = Utbl + 1; u0i = Utbl + (POW2(M-2)-1); w0r = *u0r, w0i = *u0i; p0r = (ioptr + 2); p1r = (ioptr + (POW2(M-2)-1)*2); /* Butterflys */ /* f0 - t0 - - f0 f5 - t1 - w0 - f5 f1 - t0 - - f1 f4 - t1 -iw0 - f4 */ for (diffUcnt = POW2(M-3)-1; diffUcnt > 0 ; diffUcnt--) { f0r = *(p0r); f0i = *(p0r + 1); f5r = *(p1r + pos); f5i = *(p1r + posi); f1r = *(p1r); f1i = *(p1r + 1); f4r = *(p0r + pos); f4i = *(p0r + posi); t0r = f0r + f5r; t0i = f0i - f5i; t1r = f0i + f5i; t1i = f5r - f0r; f0r = t0r + w0r * t1r + w0i * t1i; f0i = t0i - w0i * t1r + w0r * t1i; f5r = Two * t0r - f0r; f5i = f0i - Two * t0i; t0r = f1r + f4r; t0i = f1i - f4i; t1r = f1i + f4i; t1i = f4r - f1r; f1r = t0r + w0i * t1r + w0r * t1i; f1i = t0i - w0r * t1r + w0i * t1i; f4r = Two * t0r - f1r; f4i = f1i - Two * t0i; *(p0r) = f0r; *(p0r + 1) = f0i; *(p1r + pos) = f5r; *(p1r + posi) = f5i; w0r = *++u0r; w0i = *--u0i; *(p1r) = f1r; *(p1r + 1) = f1i; *(p0r + pos) = f4r; *(p0r + posi) = f4i; p0r += 2; p1r -= 2; } } void rffts1(double *ioptr, int M, int Rows, double *Utbl, short *BRLow) { /* Compute in-place real fft on the rows of the input array */ /* The result is the complex spectra of the positive frequencies */ /* except the location for the first complex number contains the real */ /* values for DC and Nyquest */ /* INPUTS */ /* *ioptr = real input data array */ /* M = log2 of fft size */ /* Rows = number of rows in ioptr array (use Rows of 1 if ioptr is a 1 dimensional array) */ /* *Utbl = cosine table */ /* *BRLow = bit reversed counter table */ /* OUTPUTS */ /* *ioptr = output data array in the following order */ /* Re(x[0]), Re(x[N/2]), Re(x[1]), Im(x[1]), Re(x[2]), Im(x[2]), ... Re(x[N/2-1]), Im(x[N/2-1]). */ double scale; int StageCnt; int NDiffU; M=M-1; switch (M) { case -1: break; case 0: for (; Rows>0; Rows--) { rfft1pt(ioptr); /* a 2 pt fft */ ioptr += 2*POW2(M); } case 1: for (; Rows>0; Rows--) { rfft2pt(ioptr); /* a 4 pt fft */ ioptr += 2*POW2(M); } break; case 2: for (; Rows>0; Rows--) { rfft4pt(ioptr); /* an 8 pt fft */ ioptr += 2*POW2(M); } break; case 3: for (; Rows>0; Rows--) { rfft8pt(ioptr); /* a 16 pt fft */ ioptr += 2*POW2(M); } break; default: scale = 0.5; for (; Rows>0; Rows--) { scbitrevR2(ioptr, M, BRLow, scale); /* bit reverse and first radix 2 stage */ StageCnt = (M-1) / 3; // number of radix 8 stages NDiffU = 2; // one radix 2 stage already complete if ( (M-1-(StageCnt * 3)) == 1 ) { bfR2(ioptr, M, NDiffU); /* 1 radix 2 stage */ NDiffU *= 2; } if ( (M-1-(StageCnt * 3)) == 2 ) { bfR4(ioptr, M, NDiffU); /* 1 radix 4 stage */ NDiffU *= 4; } if (M <= MCACHE) { bfstages(ioptr, M, Utbl, 2, NDiffU, StageCnt); /* RADIX 8 Stages */ frstage(ioptr, M+1, Utbl); } else { fftrecurs(ioptr, M, Utbl, 2, NDiffU, StageCnt); /* RADIX 8 Stages */ frstage(ioptr, M+1, Utbl); } ioptr += 2*POW2(M); } } } /************************************************ parts of riffts1 *************************************************/ static inline void rifft1pt(double *ioptr, double scale); static inline void rifft1pt(double *ioptr, double scale) { /*** RADIX 2 rifft ***/ double f0r, f0i; double t0r, t0i; /* bit reversed load */ f0r = ioptr[0]; f0i = ioptr[1]; /* finish rfft */ t0r = f0r + f0i; t0i = f0r - f0i; /* store result */ ioptr[0] = scale*t0r; ioptr[1] = scale*t0i; } static inline void rifft2pt(double *ioptr, double scale); static inline void rifft2pt(double *ioptr, double scale) { /*** RADIX 4 rifft ***/ double f0r, f0i, f1r, f1i; double t0r, t0i; const double Two = 2.0; /* bit reversed load */ t0r = ioptr[0]; t0i = ioptr[1]; f1r = Two * ioptr[2]; f1i = Two * ioptr[3]; /* start rifft */ f0r = t0r + t0i; f0i = t0r - t0i; /* Butterflys */ /* f0 - - t0 f1 - 1 - f1 */ t0r = f0r + f1r; t0i = f0i - f1i; f1r = f0r - f1r; f1i = f0i + f1i; /* store result */ ioptr[0] = scale*t0r; ioptr[1] = scale*t0i; ioptr[2] = scale*f1r; ioptr[3] = scale*f1i; } static inline void rifft4pt(double *ioptr, double scale); static inline void rifft4pt(double *ioptr, double scale) { /*** RADIX 8 rifft ***/ double f0r, f0i, f1r, f1i, f2r, f2i, f3r, f3i; double t0r, t0i, t1r, t1i; double w0r = 1.0/MYROOT2; /* cos(pi/4) */ const double Two = 2.0; /* bit reversed load */ t0r = ioptr[0]; t0i = ioptr[1]; f2r = ioptr[2]; f2i = ioptr[3]; f1r = Two * ioptr[4]; f1i = Two * ioptr[5]; f3r = ioptr[6]; f3i = ioptr[7]; /* start rfft */ f0r = t0r + t0i; /* compute Re(x[0]) */ f0i = t0r - t0i; /* compute Re(x[N/2]) */ t1r = f2r + f3r; t1i = f2i - f3i; t0r = f2r - f3r; t0i = f2i + f3i; f2r = t1r - w0r * t0r - w0r * t0i; f2i = t1i + w0r * t0r - w0r * t0i; f3r = Two * t1r - f2r; f3i = f2i - Two * t1i; /* Butterflys */ /* f0 - - t0 - - f0 f1 - 1 - f1 - - f1 f2 - - f2 - 1 - f2 f3 - 1 - t1 - i - f3 */ t0r = f0r + f1r; t0i = f0i - f1i; f1r = f0r - f1r; f1i = f0i + f1i; t1r = f2r - f3r; t1i = f2i - f3i; f2r = f2r + f3r; f2i = f2i + f3i; f0r = t0r + f2r; f0i = t0i + f2i; f2r = t0r - f2r; f2i = t0i - f2i; f3r = f1r + t1i; f3i = f1i - t1r; f1r = f1r - t1i; f1i = f1i + t1r; /* store result */ ioptr[0] = scale*f0r; ioptr[1] = scale*f0i; ioptr[2] = scale*f1r; ioptr[3] = scale*f1i; ioptr[4] = scale*f2r; ioptr[5] = scale*f2i; ioptr[6] = scale*f3r; ioptr[7] = scale*f3i; } static inline void rifft8pt(double *ioptr, double scale); static inline void rifft8pt(double *ioptr, double scale) { /*** RADIX 16 rifft ***/ double w0r = 1.0/MYROOT2; /* cos(pi/4) */ double w1r = MYCOSPID8; /* cos(pi/8) */ double w1i = MYSINPID8; /* sin(pi/8) */ double f0r, f0i, f1r, f1i, f2r, f2i, f3r, f3i; double f4r, f4i, f5r, f5i, f6r, f6i, f7r, f7i; double t0r, t0i, t1r, t1i; const double Two = 2.0; /* bit reversed load */ t0r = ioptr[0]; t0i = ioptr[1]; f4r = ioptr[2]; f4i = ioptr[3]; f2r = ioptr[4]; f2i = ioptr[5]; f6r = ioptr[6]; f6i = ioptr[7]; f1r = Two * ioptr[8]; f1i = Two * ioptr[9]; f5r = ioptr[10]; f5i = ioptr[11]; f3r = ioptr[12]; f3i = ioptr[13]; f7r = ioptr[14]; f7i = ioptr[15]; /* start rfft */ f0r = t0r + t0i; /* compute Re(x[0]) */ f0i = t0r - t0i; /* compute Re(x[N/2]) */ t0r = f2r + f3r; t0i = f2i - f3i; t1r = f2r - f3r; t1i = f2i + f3i; f2r = t0r - w0r * t1r - w0r * t1i; f2i = t0i + w0r * t1r - w0r * t1i; f3r = Two * t0r - f2r; f3i = f2i - Two * t0i; t0r = f4r + f7r; t0i = f4i - f7i; t1r = f4r - f7r; t1i = f4i + f7i; f4r = t0r - w1i * t1r - w1r * t1i; f4i = t0i + w1r * t1r - w1i * t1i; f7r = Two * t0r - f4r; f7i = f4i - Two * t0i; t0r = f6r + f5r; t0i = f6i - f5i; t1r = f6r - f5r; t1i = f6i + f5i; f6r = t0r - w1r * t1r - w1i * t1i; f6i = t0i + w1i * t1r - w1r * t1i; f5r = Two * t0r - f6r; f5i = f6i - Two * t0i; /* Butterflys */ /* f0 - - t0 - - f0 - - f0 f1* - 1 - f1 - - f1 - - f1 f2 - - f2 - 1 - f2 - - f2 f3 - 1 - t1 - i - f3 - - f3 f4 - - t0 - - f4 - 1 - t0 f5 - 1 - f5 - - f5 - w3 - f4 f6 - - f6 - 1 - f6 - i - t1 f7 - 1 - t1 - i - f7 - iw3- f6 */ t0r = f0r + f1r; t0i = f0i - f1i; f1r = f0r - f1r; f1i = f0i + f1i; t1r = f2r - f3r; t1i = f2i - f3i; f2r = f2r + f3r; f2i = f2i + f3i; f0r = t0r + f2r; f0i = t0i + f2i; f2r = t0r - f2r; f2i = t0i - f2i; f3r = f1r + t1i; f3i = f1i - t1r; f1r = f1r - t1i; f1i = f1i + t1r; t0r = f4r + f5r; t0i = f4i + f5i; f5r = f4r - f5r; f5i = f4i - f5i; t1r = f6r - f7r; t1i = f6i - f7i; f6r = f6r + f7r; f6i = f6i + f7i; f4r = t0r + f6r; f4i = t0i + f6i; f6r = t0r - f6r; f6i = t0i - f6i; f7r = f5r + t1i; f7i = f5i - t1r; f5r = f5r - t1i; f5i = f5i + t1r; t0r = f0r - f4r; t0i = f0i - f4i; f0r = f0r + f4r; f0i = f0i + f4i; t1r = f2r + f6i; t1i = f2i - f6r; f2r = f2r - f6i; f2i = f2i + f6r; f4r = f1r - f5r * w0r + f5i * w0r; f4i = f1i - f5r * w0r - f5i * w0r; f1r = f1r * Two - f4r; f1i = f1i * Two - f4i; f6r = f3r + f7r * w0r + f7i * w0r; f6i = f3i - f7r * w0r + f7i * w0r; f3r = f3r * Two - f6r; f3i = f3i * Two - f6i; /* store result */ ioptr[0] = scale*f0r; ioptr[1] = scale*f0i; ioptr[2] = scale*f1r; ioptr[3] = scale*f1i; ioptr[4] = scale*f2r; ioptr[5] = scale*f2i; ioptr[6] = scale*f3r; ioptr[7] = scale*f3i; ioptr[8] = scale*t0r; ioptr[9] = scale*t0i; ioptr[10] = scale*f4r; ioptr[11] = scale*f4i; ioptr[12] = scale*t1r; ioptr[13] = scale*t1i; ioptr[14] = scale*f6r; ioptr[15] = scale*f6i; } static inline void ifrstage(double *ioptr, int M, double *Utbl); static inline void ifrstage(double *ioptr, int M, double *Utbl) { /* Start RIFFT */ int pos; int posi; int diffUcnt; double *p0r, *p1r; double *u0r, *u0i; double w0r, w0i; double f0r, f0i, f1r, f1i, f4r, f4i, f5r, f5i; double t0r, t0i, t1r, t1i; const double Two = 2.0; pos = POW2(M-1); posi = pos + 1; p0r = ioptr; p1r = ioptr + pos/2; u0r = Utbl + (size_t) POW2(M-3); w0r = *u0r, f0r = *(p0r); f0i = *(p0r + 1); f4r = *(p0r + pos); f4i = *(p0r + posi); f1r = *(p1r); f1i = *(p1r + 1); f5r = *(p1r + pos); f5i = *(p1r + posi); t0r = f0r + f0i; t0i = f0r - f0i; t1r = f4r + f4r; t1i = -f4i - f4i; f0r = f1r + f5r; f0i = f1i - f5i; f4r = f1r - f5r; f4i = f1i + f5i; f1r = f0r - w0r * f4r - w0r * f4i; f1i = f0i + w0r * f4r - w0r * f4i; f5r = Two * f0r - f1r; f5i = f1i - Two * f0i; *(p0r) = t0r; *(p0r + 1) = t0i; *(p0r + pos) = t1r; *(p0r + posi) = t1i; *(p1r) = f1r; *(p1r + 1) = f1i; *(p1r + pos) = f5r; *(p1r + posi) = f5i; u0r = Utbl + 1; u0i = Utbl + (POW2(M-2)-1); w0r = *u0r, w0i = *u0i; p0r = (ioptr + 2); p1r = (ioptr + (POW2(M-2)-1)*2); /* Butterflys */ /* f0 - t0 - f0 f1 - t1 -w0- f1 f2 - t0 - f2 f3 - t1 -iw0- f3 */ for (diffUcnt = POW2(M-3)-1; diffUcnt > 0 ; diffUcnt--) { f0r = *(p0r); f0i = *(p0r + 1); f5r = *(p1r + pos); f5i = *(p1r + posi); f1r = *(p1r); f1i = *(p1r + 1); f4r = *(p0r + pos); f4i = *(p0r + posi); t0r = f0r + f5r; t0i = f0i - f5i; t1r = f0r - f5r; t1i = f0i + f5i; f0r = t0r - w0i * t1r - w0r * t1i; f0i = t0i + w0r * t1r - w0i * t1i; f5r = Two * t0r - f0r; f5i = f0i - Two * t0i; t0r = f1r + f4r; t0i = f1i - f4i; t1r = f1r - f4r; t1i = f1i + f4i; f1r = t0r - w0r * t1r - w0i * t1i; f1i = t0i + w0i * t1r - w0r * t1i; f4r = Two * t0r - f1r; f4i = f1i - Two * t0i; *(p0r) = f0r; *(p0r + 1) = f0i; *(p1r + pos) = f5r; *(p1r + posi) = f5i; w0r = *++u0r; w0i = *--u0i; *(p1r) = f1r; *(p1r + 1) = f1i; *(p0r + pos) = f4r; *(p0r + posi) = f4i; p0r += 2; p1r -= 2; } } void riffts1(double *ioptr, int M, int Rows, double *Utbl, short *BRLow) { /* Compute in-place real ifft on the rows of the input array */ /* data order as from rffts1 */ /* INPUTS */ /* *ioptr = input data array in the following order */ /* M = log2 of fft size */ /* Re(x[0]), Re(x[N/2]), Re(x[1]), Im(x[1]), Re(x[2]), Im(x[2]), ... Re(x[N/2-1]), Im(x[N/2-1]). */ /* Rows = number of rows in ioptr array (use Rows of 1 if ioptr is a 1 dimensional array) */ /* *Utbl = cosine table */ /* *BRLow = bit reversed counter table */ /* OUTPUTS */ /* *ioptr = real output data array */ double scale; int StageCnt; int NDiffU; scale = 1.0/POW2(M); M=M-1; switch (M) { case -1: break; case 0: for (; Rows>0; Rows--) { rifft1pt(ioptr, scale); /* a 2 pt fft */ ioptr += 2*POW2(M); } case 1: for (; Rows>0; Rows--) { rifft2pt(ioptr, scale); /* a 4 pt fft */ ioptr += 2*POW2(M); } break; case 2: for (; Rows>0; Rows--) { rifft4pt(ioptr, scale); /* an 8 pt fft */ ioptr += 2*POW2(M); } break; case 3: for (; Rows>0; Rows--) { rifft8pt(ioptr, scale); /* a 16 pt fft */ ioptr += 2*POW2(M); } break; default: for (; Rows>0; Rows--) { ifrstage(ioptr, M+1, Utbl); scbitrevR2(ioptr, M, BRLow, scale); /* bit reverse and first radix 2 stage */ StageCnt = (M-1) / 3; // number of radix 8 stages NDiffU = 2; // one radix 2 stage already complete if ( (M-1-(StageCnt * 3)) == 1 ) { ibfR2(ioptr, M, NDiffU); /* 1 radix 2 stage */ NDiffU *= 2; } if ( (M-1-(StageCnt * 3)) == 2 ) { ibfR4(ioptr, M, NDiffU); /* 1 radix 4 stage */ NDiffU *= 4; } if (M <= MCACHE) { ibfstages(ioptr, M, Utbl, 2, NDiffU, StageCnt); /* RADIX 8 Stages */ } else { ifftrecurs(ioptr, M, Utbl, 2, NDiffU, StageCnt); /* RADIX 8 Stages */ } ioptr += 2*POW2(M); } } } tmpk8ny_4pz/src/maths/fft/matlib.h0000644000175000017500000000240513546075722017264 0ustar carstencarsten/* a few routines from a vector/matrix library */ void xpose(double *indata, long iRsiz, double *outdata, long oRsiz, long Nrows, long Ncols); /* not in-place matrix transpose */ /* INPUTS */ /* *indata = input data array */ /* iRsiz = offset to between rows of input data array */ /* oRsiz = offset to between rows of output data array */ /* Nrows = number of rows in input data array */ /* Ncols = number of columns in input data array */ /* OUTPUTS */ /* *outdata = output data array */ void cxpose(double *indata, long iRsiz, double *outdata, long oRsiz, long Nrows, long Ncols); /* not in-place complex matrix transpose */ /* INPUTS */ /* *indata = input data array */ /* iRsiz = offset to between rows of input data array */ /* oRsiz = offset to between rows of output data array */ /* Nrows = number of rows in input data array */ /* Ncols = number of columns in input data array */ /* OUTPUTS */ /* *outdata = output data array */ void cvprod(double *a, double *b, double *out, long N); /* complex vector product, can be in-place */ /* product of complex vector *a times complex vector *b */ /* INPUTS */ /* N vector length */ /* *a complex vector length N complex numbers */ /* *b complex vector length N complex numbers */ /* OUTPUTS */ /* *out complex vector length N */ tmpk8ny_4pz/src/maths/fft/matlib.c0000644000175000017500000002153713546075722017266 0ustar carstencarsten/* a few routines from a vector/matrix library */ #include "matlib.h" void xpose(double *indata, long iRsiz, double *outdata, long oRsiz, long Nrows, long Ncols) { /* not in-place matrix transpose */ /* INPUTS */ /* *indata = input data array */ /* iRsiz = offset to between rows of input data array */ /* oRsiz = offset to between rows of output data array */ /* Nrows = number of rows in input data array */ /* Ncols = number of columns in input data array */ /* OUTPUTS */ /* *outdata = output data array */ double *irow; /* pointer to input row start */ double *ocol; /* pointer to output col start */ double *idata; /* pointer to input data */ double *odata; /* pointer to output data */ long RowCnt; /* row counter */ long ColCnt; /* col counter */ double T0; /* data storage */ double T1; /* data storage */ double T2; /* data storage */ double T3; /* data storage */ double T4; /* data storage */ double T5; /* data storage */ double T6; /* data storage */ double T7; /* data storage */ const long inRsizd1 = iRsiz; const long inRsizd2 = 2*iRsiz; const long inRsizd3 = inRsizd2+iRsiz; const long inRsizd4 = 4*iRsiz; const long inRsizd5 = inRsizd3+inRsizd2; const long inRsizd6 = inRsizd4+inRsizd2; const long inRsizd7 = inRsizd4+inRsizd3; const long inRsizd8 = 8*iRsiz; ocol = outdata; irow = indata; for (RowCnt=Nrows/8; RowCnt>0; RowCnt--) { idata = irow; odata = ocol; for (ColCnt=Ncols; ColCnt>0; ColCnt--) { T0 = *idata; T1 = *(idata+inRsizd1); T2 = *(idata+inRsizd2); T3 = *(idata+inRsizd3); T4 = *(idata+inRsizd4); T5 = *(idata+inRsizd5); T6 = *(idata+inRsizd6); T7 = *(idata+inRsizd7); *odata = T0; *(odata+1) = T1; *(odata+2) = T2; *(odata+3) = T3; *(odata+4) = T4; *(odata+5) = T5; *(odata+6) = T6; *(odata+7) = T7; idata++; odata += oRsiz; } irow += inRsizd8; ocol += 8; } if (Nrows%8 != 0) { for (ColCnt=Ncols; ColCnt>0; ColCnt--) { idata = irow++; odata = ocol; ocol += oRsiz; for (RowCnt=Nrows%8; RowCnt>0; RowCnt--) { T0 = *idata; *odata++ = T0; idata += iRsiz; } } } } void cxpose(double *indata, long iRsiz, double *outdata, long oRsiz, long Nrows, long Ncols) { /* not in-place complex double matrix transpose */ /* INPUTS */ /* *indata = input data array */ /* iRsiz = offset to between rows of input data array */ /* oRsiz = offset to between rows of output data array */ /* Nrows = number of rows in input data array */ /* Ncols = number of columns in input data array */ /* OUTPUTS */ /* *outdata = output data array */ double *irow; /* pointer to input row start */ double *ocol; /* pointer to output col start */ double *idata; /* pointer to input data */ double *odata; /* pointer to output data */ long RowCnt; /* row counter */ long ColCnt; /* col counter */ double T0r; /* data storage */ double T0i; /* data storage */ double T1r; /* data storage */ double T1i; /* data storage */ double T2r; /* data storage */ double T2i; /* data storage */ double T3r; /* data storage */ double T3i; /* data storage */ const long inRsizd1 = 2*iRsiz; const long inRsizd1i = 2*iRsiz + 1; const long inRsizd2 = 4*iRsiz; const long inRsizd2i = 4*iRsiz + 1; const long inRsizd3 = inRsizd2+inRsizd1; const long inRsizd3i = inRsizd2+inRsizd1 + 1; const long inRsizd4 = 8*iRsiz; ocol = outdata; irow = indata; for (RowCnt=Nrows/4; RowCnt>0; RowCnt--) { idata = irow; odata = ocol; for (ColCnt=Ncols; ColCnt>0; ColCnt--) { T0r = *idata; T0i = *(idata +1); T1r = *(idata+inRsizd1); T1i = *(idata+inRsizd1i); T2r = *(idata+inRsizd2); T2i = *(idata+inRsizd2i); T3r = *(idata+inRsizd3); T3i = *(idata+inRsizd3i); *odata = T0r; *(odata+1) = T0i; *(odata+2) = T1r; *(odata+3) = T1i; *(odata+4) = T2r; *(odata+5) = T2i; *(odata+6) = T3r; *(odata+7) = T3i; idata+=2; odata += 2*oRsiz; } irow += inRsizd4; ocol += 8; } if (Nrows%4 != 0) { for (ColCnt=Ncols; ColCnt>0; ColCnt--) { idata = irow; odata = ocol; for (RowCnt=Nrows%4; RowCnt>0; RowCnt--) { T0r = *idata; T0i = *(idata+1); *odata = T0r; *(odata+1) = T0i; odata+=2; idata += 2*iRsiz; } irow+=2; ocol += 2*oRsiz; } } } void cvprod(double *a, double *b, double *out, long N) { /* complex vector product, can be in-place */ /* product of complex vector *a times complex vector *b */ /* INPUTS */ /* N vector length */ /* *a complex vector length N complex numbers */ /* *b complex vector length N complex numbers */ /* OUTPUTS */ /* *out complex vector length N */ long OutCnt; /* output counter */ double A0R; /* A storage */ double A0I; /* A storage */ double A1R; /* A storage */ double A1I; /* A storage */ double A2R; /* A storage */ double A2I; /* A storage */ double A3R; /* A storage */ double A3I; /* A storage */ double B0R; /* B storage */ double B0I; /* B storage */ double B1R; /* B storage */ double B1I; /* B storage */ double B2R; /* B storage */ double B2I; /* B storage */ double B3R; /* B storage */ double B3I; /* B storage */ double T0R; /* TMP storage */ double T0I; /* TMP storage */ double T1R; /* TMP storage */ double T1I; /* TMP storage */ double T2R; /* TMP storage */ double T2I; /* TMP storage */ double T3R; /* TMP storage */ double T3I; /* TMP storage */ if (N>=4) { A0R = *a; B0R = *b; A0I = *(a +1); B0I = *(b +1); A1R = *(a +2); B1R = *(b +2); A1I = *(a +3); B1I = *(b +3); A2R = *(a +4); B2R = *(b +4); A2I = *(a +5); B2I = *(b +5); A3R = *(a +6); B3R = *(b +6); A3I = *(a +7); B3I = *(b +7); T0R = A0R * B0R; T0I = (A0R * B0I); T1R = A1R * B1R; T1I = (A1R * B1I); T2R = A2R * B2R; T2I = (A2R * B2I); T3R = A3R * B3R; T3I = (A3R * B3I); T0R -= (A0I * B0I); T0I = A0I * B0R + T0I; T1R -= (A1I * B1I); T1I = A1I * B1R + T1I; T2R -= (A2I * B2I); T2I = A2I * B2R + T2I; T3R -= (A3I * B3I); T3I = A3I * B3R + T3I; for (OutCnt=N/4-1; OutCnt > 0; OutCnt--) { a += 8; b += 8; A0R = *a; B0R = *b; A0I = *(a +1); B0I = *(b +1); A1R = *(a +2); B1R = *(b +2); A1I = *(a +3); B1I = *(b +3); A2R = *(a +4); B2R = *(b +4); A2I = *(a +5); B2I = *(b +5); A3R = *(a +6); B3R = *(b +6); A3I = *(a +7); B3I = *(b +7); *out = T0R; *(out +1) = T0I; *(out +2) = T1R; *(out +3) = T1I; *(out +4) = T2R; *(out +5) = T2I; *(out +6) = T3R; *(out +7) = T3I; T0R = A0R * B0R; T0I = (A0R * B0I); T1R = A1R * B1R; T1I = (A1R * B1I); T2R = A2R * B2R; T2I = (A2R * B2I); T3R = A3R * B3R; T3I = (A3R * B3I); T0R -= (A0I * B0I); T0I = A0I * B0R + T0I; T1R -= (A1I * B1I); T1I = A1I * B1R + T1I; T2R -= (A2I * B2I); T2I = A2I * B2R + T2I; T3R -= (A3I * B3I); T3I = A3I * B3R + T3I; out += 8; } a += 8; b += 8; *out = T0R; *(out +1) = T0I; *(out +2) = T1R; *(out +3) = T1I; *(out +4) = T2R; *(out +5) = T2I; *(out +6) = T3R; *(out +7) = T3I; out += 8; } for (OutCnt=N%4; OutCnt > 0; OutCnt--) { A0R = *a++; B0R = *b++; A0I = *a++; B0I = *b++; T0R = A0R * B0R; T0I = (A0R * B0I); T0R -= (A0I * B0I); T0I = A0I * B0R + T0I; *out++ = T0R; *out++ = T0I; } } tmpk8ny_4pz/src/maths/fft/fftlib.h0000644000175000017500000000577013546075722017272 0ustar carstencarsten#define MYRECIPLN2 1.442695040888963407359924681001892137426 // 1.0/log(2) /* some useful conversions between a number and its power of 2 */ #define LOG2(a) (MYRECIPLN2*log(a)) // floating point logarithm base 2 #define POW2(m) (1 << (m)) // integer power of 2 for m<32 /******************************************************************* lower level fft stuff called by routines in fftext.c and fft2d.c *******************************************************************/ void fftCosInit(int M, double *Utbl); /* Compute Utbl, the cosine table for ffts */ /* of size (pow(2,M)/4 +1) */ /* INPUTS */ /* M = log2 of fft size */ /* OUTPUTS */ /* *Utbl = cosine table */ void fftBRInit(int M, short *BRLow); /* Compute BRLow, the bit reversed table for ffts */ /* of size pow(2,M/2 -1) */ /* INPUTS */ /* M = log2 of fft size */ /* OUTPUTS */ /* *BRLow = bit reversed counter table */ void ffts1(double *ioptr, int M, int Rows, double *Utbl, short *BRLow); /* Compute in-place complex fft on the rows of the input array */ /* INPUTS */ /* *ioptr = input data array */ /* M = log2 of fft size (ex M=10 for 1024 point fft) */ /* Rows = number of rows in ioptr array (use Rows of 1 if ioptr is a 1 dimensional array) */ /* *Utbl = cosine table */ /* *BRLow = bit reversed counter table */ /* OUTPUTS */ /* *ioptr = output data array */ void iffts1(double *ioptr, int M, int Rows, double *Utbl, short *BRLow); /* Compute in-place inverse complex fft on the rows of the input array */ /* INPUTS */ /* *ioptr = input data array */ /* M = log2 of fft size */ /* Rows = number of rows in ioptr array (use Rows of 1 if ioptr is a 1 dimensional array) */ /* *Utbl = cosine table */ /* *BRLow = bit reversed counter table */ /* OUTPUTS */ /* *ioptr = output data array */ void rffts1(double *ioptr, int M, int Rows, double *Utbl, short *BRLow); /* Compute in-place real fft on the rows of the input array */ /* The result is the complex spectra of the positive frequencies */ /* except the location for the first complex number contains the real */ /* values for DC and Nyquest */ /* INPUTS */ /* *ioptr = real input data array */ /* M = log2 of fft size */ /* Rows = number of rows in ioptr array (use Rows of 1 if ioptr is a 1 dimensional array) */ /* *Utbl = cosine table */ /* *BRLow = bit reversed counter table */ /* OUTPUTS */ /* *ioptr = output data array in the following order */ /* Re(x[0]), Re(x[N/2]), Re(x[1]), Im(x[1]), Re(x[2]), Im(x[2]), ... Re(x[N/2-1]), Im(x[N/2-1]). */ void riffts1(double *ioptr, int M, int Rows, double *Utbl, short *BRLow); /* Compute in-place real ifft on the rows of the input array */ /* data order as from rffts1 */ /* INPUTS */ /* *ioptr = input data array in the following order */ /* M = log2 of fft size */ /* Re(x[0]), Re(x[N/2]), Re(x[1]), Im(x[1]), Re(x[2]), Im(x[2]), ... Re(x[N/2-1]), Im(x[N/2-1]). */ /* Rows = number of rows in ioptr array (use Rows of 1 if ioptr is a 1 dimensional array) */ /* *Utbl = cosine table */ /* *BRLow = bit reversed counter table */ /* OUTPUTS */ /* *ioptr = real output data array */ tmpk8ny_4pz/src/maths/fft/fftext.c0000644000175000017500000002641613546075722017317 0ustar carstencarsten/******************************************************************* This file extends the fftlib with calls to maintain the cosine and bit reversed tables for you (including mallocs and free's). Call the init routine for each fft size you will be using. Then you can call the fft routines below which will make the fftlib library call with the appropriate tables passed. When you are done with all fft's you can call fftfree to release the storage for the tables. Note that you can call fftinit repeatedly with the same size, the extra calls will be ignored. So, you could make a macro to call fftInit every time you call ffts. For example you could have someting like: #define FFT(a,n) if(!fftInit(roundtol(LOG2(n)))) ffts(a,roundtol(LOG2(n)),1);else printf("fft error\n"); *******************************************************************/ #include #include #include #include #include "fftlib.h" #include "matlib.h" #include "ngspice/fftext.h" #include "ngspice/config.h" #include "ngspice/memory.h" #ifndef M_PI #define M_PI 3.141592653589793238462643383279502884197 // pi #endif #define eq(a,b) (!strcmp((a), (b))) // pointers to storage of Utbl's and BRLow's static double *UtblArray[8*sizeof(int)] = {0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0}; static short *BRLowArray[8*sizeof(int)/2] = {0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0}; int fftInit(int M) { // malloc and init cosine and bit reversed tables for a given size fft, ifft, rfft, rifft /* INPUTS */ /* M = log2 of fft size (ex M=10 for 1024 point fft) */ /* OUTPUTS */ /* private cosine and bit reversed tables */ int theError = 1; /*** I did NOT test cases with M>27 ***/ if ((M >= 0) && ((size_t) M < 8*sizeof(int))) { theError = 0; if (UtblArray[M] == NULL) { // have we not inited this size fft yet? // init cos table UtblArray[M] = TMALLOC(double, POW2(M)/4+1); if (UtblArray[M] == NULL) theError = 2; else { fftCosInit(M, UtblArray[M]); } if (M > 1) { if (BRLowArray[M/2] == NULL) { // init bit reversed table for cmplx fft BRLowArray[M/2] = TMALLOC(short, POW2(M/2-1)); if (BRLowArray[M/2] == NULL) theError = 2; else { fftBRInit(M, BRLowArray[M/2]); } } } if (M > 2) { if (BRLowArray[(M-1)/2] == NULL) { // init bit reversed table for real fft BRLowArray[(M-1)/2] = TMALLOC(short, POW2((M-1)/2-1)); if (BRLowArray[(M-1)/2] == NULL) theError = 2; else { fftBRInit(M-1, BRLowArray[(M-1)/2]); } } } } } return theError; } void fftFree(void) { // release storage for all private cosine and bit reversed tables int i1; for (i1=8*sizeof(int)/2-1; i1>=0; i1--) { if (BRLowArray[i1] != NULL) { tfree(BRLowArray[i1]); BRLowArray[i1] = NULL; } } for (i1=8*sizeof(int)-1; i1>=0; i1--) { if (UtblArray[i1] != NULL) { tfree(UtblArray[i1]); UtblArray[i1] = NULL; } } } int fft_windows(char *window, double *win, double *time, int length, double maxt, double span, int order) { int i; double sigma, scale; /* window functions - should have an average of one */ if (eq(window, "none")) for (i = 0; i < length; i++) win[i] = 1.0; else if (eq(window, "rectangular")) for (i = 0; i < length; i++) { if (maxt-time[i] > span) win[i] = 0.0; else win[i] = 1.0; } else if (eq(window, "triangle") || eq(window, "bartlet") || eq(window, "bartlett")) for (i = 0; i < length; i++) { if (maxt-time[i] > span) win[i] = 0.0; else win[i] = 2.0 - fabs(2+4*(time[i]-maxt)/span); } else if (eq(window, "hann") || eq(window, "hanning") || eq(window, "cosine")) for (i = 0; i < length; i++) { if (maxt-time[i] > span) win[i] = 0.0; else win[i] = 1.0 - cos(2*M_PI*(time[i]-maxt)/span); } else if (eq(window, "hamming")) for (i = 0; i < length; i++) { if (maxt-time[i] > span) win[i] = 0.0; else win[i] = 1.0 - 0.46/0.54*cos(2*M_PI*(time[i]-maxt)/span); } else if (eq(window, "blackman")) for (i = 0; i < length; i++) { if (maxt-time[i] > span) { win[i] = 0; } else { win[i] = 1.0; win[i] -= 0.50/0.42*cos(2*M_PI*(time[i]-maxt)/span); win[i] += 0.08/0.42*cos(4*M_PI*(time[i]-maxt)/span); } } else if (eq(window, "flattop")) for (i = 0; i < length; i++) { if (maxt-time[i] > span) { win[i] = 0; } else { win[i] = 1.0; win[i] -= 1.93*cos(2*M_PI*(time[i]-maxt)/span); win[i] += 1.29*cos(4*M_PI*(time[i]-maxt)/span); win[i] -= 0.388*cos(6*M_PI*(time[i]-maxt)/span); win[i] += 0.032*cos(8*M_PI*(time[i]-maxt)/span); } } else if (eq(window, "gaussian")) { sigma = 1.0/order; scale = 0.83/sigma; for (i = 0; i < length; i++) { if (maxt-time[i] > span) win[i] = 0; else win[i] = scale*exp(-0.5 * pow((time[i]-maxt/2)/(sigma*maxt/2), 2)); } } else { printf( "Warning: unknown window type %s\n", window); return 0; } return 1; } /************************************************* The following calls are easier than calling to fftlib directly. Just make sure fftlib has been called for each M first. **************************************************/ void ffts(double *data, int M, int Rows) { /* Compute in-place complex fft on the rows of the input array */ /* INPUTS */ /* *ioptr = input data array */ /* M = log2 of fft size (ex M=10 for 1024 point fft) */ /* Rows = number of rows in ioptr array (use 1 for Rows for a single fft) */ /* OUTPUTS */ /* *ioptr = output data array */ ffts1(data, M, Rows, UtblArray[M], BRLowArray[M/2]); } void iffts(double *data, int M, int Rows) { /* Compute in-place inverse complex fft on the rows of the input array */ /* INPUTS */ /* *ioptr = input data array */ /* M = log2 of fft size (ex M=10 for 1024 point fft) */ /* Rows = number of rows in ioptr array (use 1 for Rows for a single fft) */ /* OUTPUTS */ /* *ioptr = output data array */ iffts1(data, M, Rows, UtblArray[M], BRLowArray[M/2]); } void rffts(double *data, int M, int Rows) { /* Compute in-place real fft on the rows of the input array */ /* The result is the complex spectra of the positive frequencies */ /* except the location for the first complex number contains the real */ /* values for DC and Nyquest */ /* See rspectprod for multiplying two of these spectra together- ex. for fast convolution */ /* INPUTS */ /* *ioptr = real input data array */ /* M = log2 of fft size (ex M=10 for 1024 point fft) */ /* Rows = number of rows in ioptr array (use 1 for Rows for a single fft) */ /* OUTPUTS */ /* *ioptr = output data array in the following order */ /* Re(x[0]), Re(x[N/2]), Re(x[1]), Im(x[1]), Re(x[2]), Im(x[2]), ... Re(x[N/2-1]), Im(x[N/2-1]). */ rffts1(data, M, Rows, UtblArray[M], BRLowArray[(M-1)/2]); } void riffts(double *data, int M, int Rows) { /* Compute in-place real ifft on the rows of the input array */ /* data order as from rffts */ /* INPUTS */ /* *ioptr = input data array in the following order */ /* M = log2 of fft size (ex M=10 for 1024 point fft) */ /* Re(x[0]), Re(x[N/2]), Re(x[1]), Im(x[1]), Re(x[2]), Im(x[2]), ... Re(x[N/2-1]), Im(x[N/2-1]). */ /* Rows = number of rows in ioptr array (use 1 for Rows for a single fft) */ /* OUTPUTS */ /* *ioptr = real output data array */ riffts1(data, M, Rows, UtblArray[M], BRLowArray[(M-1)/2]); } void rspectprod(double *data1, double *data2, double *outdata, int N) { // When multiplying a pair of spectra from rfft care must be taken to multiply the // two real values seperately from the complex ones. This routine does it correctly. // the result can be stored in-place over one of the inputs /* INPUTS */ /* *data1 = input data array first spectra */ /* *data2 = input data array second spectra */ /* N = fft input size for both data1 and data2 */ /* OUTPUTS */ /* *outdata = output data array spectra */ if(N>1) { outdata[0] = data1[0] * data2[0]; // multiply the zero freq values outdata[1] = data1[1] * data2[1]; // multiply the nyquest freq values cvprod(data1 + 2, data2 + 2, outdata + 2, N/2-1); // multiply the other positive freq values } else { outdata[0] = data1[0] * data2[0]; } } #ifdef BOURKE static void fftext(double *x, double *y, long int n, long int nn, int dir) { /* http://local.wasp.uwa.edu.au/~pbourke/other/dft/ download 22.05.08 Used with permission from the author Paul Bourke */ /* This computes an in-place complex-to-complex FFT x and y are the real and imaginary arrays n is the number of points, has to be to the power of 2 nn is the number of points w/o zero padded values dir = 1 gives forward transform dir = -1 gives reverse transform */ long i, i1, j, k, i2, l, l1, l2; double c1, c2, tx, ty, t1, t2, u1, u2, z; int m = 0, M = 1; /* get the exponent to the base of 2 from the number of points */ while (M < n) { M *= 2; m++; } /* Do the bit reversal */ i2 = n >> 1; j = 0; for (i = 0; i < n-1; i++) { if (i < j) { tx = x[i]; ty = y[i]; x[i] = x[j]; y[i] = y[j]; x[j] = tx; y[j] = ty; } k = i2; while (k <= j) { j -= k; k >>= 1; } j += k; } /* Compute the FFT */ c1 = -1.0; c2 = 0.0; l2 = 1; for (l = 0; l < m; l++) { l1 = l2; l2 <<= 1; u1 = 1.0; u2 = 0.0; for (j = 0; j < l1; j++) { for (i = j; i < n; i += l2) { i1 = i + l1; t1 = u1 * x[i1] - u2 * y[i1]; t2 = u1 * y[i1] + u2 * x[i1]; x[i1] = x[i] - t1; y[i1] = y[i] - t2; x[i] += t1; y[i] += t2; } z = u1 * c1 - u2 * c2; u2 = u1 * c2 + u2 * c1; u1 = z; } c2 = sqrt((1.0 - c1) / 2.0); if (dir == 1) c2 = -c2; c1 = sqrt((1.0 + c1) / 2.0); } /* Scaling for forward transform */ if (dir == 1) { double scale = 1.0 / nn; for (i = 0; i < n; i++) { x[i] *= scale; /* don't consider zero padded values */ y[i] *= scale; } } } #endif /* BOURKE */ tmpk8ny_4pz/src/maths/sparse/0000755000175000017500000000000013546075722016360 5ustar carstencarstentmpk8ny_4pz/src/maths/sparse/Makefile.am0000644000175000017500000000055613546075722020422 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libsparse.la libsparse_la_SOURCES = \ spalloc.c \ spbuild.c \ spconfig.h \ spdefs.h \ spextra.c \ spfactor.c \ spoutput.c \ spsmp.c \ spsolve.c \ sputils.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/maths/sparse/spoutput.c0000644000175000017500000005343713546075722020443 0ustar carstencarsten/* * MATRIX OUTPUT MODULE * * Author: Advisor: * Kenneth S. Kundert Alberto Sangiovanni-Vincentelli * UC Berkeley * * This file contains the output-to-file and output-to-screen routines for * the matrix package. * * >>> User accessible functions contained in this file: * spPrint * spFileMatrix * spFileVector * spFileStats * * >>> Other functions contained in this file: */ /* * Revision and copyright information. * * Copyright (c) 1985,86,87,88,89,90 * by Kenneth S. Kundert and the University of California. * * Permission to use, copy, modify, and distribute this software and * its documentation for any purpose and without fee is hereby granted, * provided that the copyright notices appear in all copies and * supporting documentation and that the authors and the University of * California are properly credited. The authors and the University of * California make no representations as to the suitability of this * software for any purpose. It is provided `as is', without express * or implied warranty. */ /* * IMPORTS * * >>> Import descriptions: * spConfig.h * Macros that customize the sparse matrix routines. * spMatrix.h * Macros and declarations to be imported by the user. * spDefs.h * Matrix type and macro definitions for the sparse matrix routines. */ #include #include #define spINSIDE_SPARSE #include "spconfig.h" #include "ngspice/spmatrix.h" #include "spdefs.h" int Printer_Width = PRINTER_WIDTH; #include "ngspice/config.h" #ifdef HAS_WINGUI #include "ngspice/wstdio.h" #endif #if DOCUMENTATION /* * PRINT MATRIX * * Formats and send the matrix to standard output. Some elementary * statistics are also output. The matrix is output in a format that is * readable by people. * * >>> Arguments: * Matrix (char *) * Pointer to matrix. * PrintReordered (int) * Indicates whether the matrix should be printed out in its original * form, as input by the user, or whether it should be printed in its * reordered form, as used by the matrix routines. A zero indicates that * the matrix should be printed as inputed, a one indicates that it * should be printed reordered. * Data (int) * Boolean flag that when FALSE indicates that output should be * compressed such that only the existence of an element should be * indicated rather than giving the actual value. Thus 11 times as * many can be printed on a row. A zero signifies that the matrix * should be printed compressed. A one indicates that the matrix * should be printed in all its glory. * Header (int) * Flag indicating that extra information should be given, such as row * and column numbers. * * >>> Local variables: * Col (int) * Column being printed. * ElementCount (int) * Variable used to count the number of nonzero elements in the matrix. * LargestElement (RealNumber) * The magnitude of the largest element in the matrix. * LargestDiag (RealNumber) * The magnitude of the largest diagonal in the matrix. * Magnitude (RealNumber) * The absolute value of the matrix element being printed. * PrintOrdToIntColMap (int []) * A translation array that maps the order that columns will be * printed in (if not PrintReordered) to the internal column numbers. * PrintOrdToIntRowMap (int []) * A translation array that maps the order that rows will be * printed in (if not PrintReordered) to the internal row numbers. * pElement (ElementPtr) * Pointer to the element in the matrix that is to be printed. * pImagElements (ElementPtr [ ]) * Array of pointers to elements in the matrix. These pointers point * to the elements whose real values have just been printed. They are * used to quickly access those same elements so their imaginary values * can be printed. * Row (int) * Row being printed. * Size (int) * The size of the matrix. * SmallestDiag (RealNumber) * The magnitude of the smallest diagonal in the matrix. * SmallestElement (RealNumber) * The magnitude of the smallest element in the matrix excluding zero * elements. * StartCol (int) * The column number of the first column to be printed in the group of * columns currently being printed. * StopCol (int) * The column number of the last column to be printed in the group of * columns currently being printed. * Top (int) * The largest expected external row or column number. */ void spPrint(MatrixPtr Matrix, int PrintReordered, int Data, int Header) { int J = 0; int I, Row, Col, Size, Top; int StartCol = 1, StopCol, Columns, ElementCount = 0; double Magnitude; double SmallestDiag = 0; double SmallestElement = 0; double LargestElement = 0.0, LargestDiag = 0.0; ElementPtr pElement, *pImagElements; int *PrintOrdToIntRowMap, *PrintOrdToIntColMap; /* Begin `spPrint'. */ assert( IS_SPARSE( Matrix ) ); Size = Matrix->Size; SP_CALLOC(pImagElements, ElementPtr, Printer_Width / 10 + 1); if ( pImagElements == NULL) { Matrix->Error = spNO_MEMORY; SP_FREE(pImagElements); return; } /* Create a packed external to internal row and column translation array. */ # if TRANSLATE Top = Matrix->AllocatedExtSize; #else Top = Matrix->AllocatedSize; #endif SP_CALLOC( PrintOrdToIntRowMap, int, Top + 1 ); if ( PrintOrdToIntRowMap == NULL) { Matrix->Error = spNO_MEMORY; SP_FREE(pImagElements); return; } SP_CALLOC( PrintOrdToIntColMap, int, Top + 1 ); if (PrintOrdToIntColMap == NULL) { Matrix->Error = spNO_MEMORY; SP_FREE(pImagElements); SP_FREE(PrintOrdToIntRowMap); return; } for (I = 1; I <= Size; I++) { PrintOrdToIntRowMap[ Matrix->IntToExtRowMap[I] ] = I; PrintOrdToIntColMap[ Matrix->IntToExtColMap[I] ] = I; } /* Pack the arrays. */ for (J = 1, I = 1; I <= Top; I++) { if (PrintOrdToIntRowMap[I] != 0) PrintOrdToIntRowMap[ J++ ] = PrintOrdToIntRowMap[ I ]; } for (J = 1, I = 1; I <= Top; I++) { if (PrintOrdToIntColMap[I] != 0) PrintOrdToIntColMap[ J++ ] = PrintOrdToIntColMap[ I ]; } /* Print header. */ if (Header) { printf("MATRIX SUMMARY\n\n"); printf("Size of matrix = %1d x %1d.\n", Size, Size); if ( Matrix->Reordered && PrintReordered ) printf("Matrix has been reordered.\n"); putchar('\n'); if ( Matrix->Factored ) printf("Matrix after factorization:\n"); else printf("Matrix before factorization:\n"); SmallestElement = LARGEST_REAL; SmallestDiag = SmallestElement; } /* Determine how many columns to use. */ Columns = Printer_Width; if (Header) Columns -= 5; if (Data) Columns = (Columns+1) / 10; /* Print matrix by printing groups of complete columns until all * the columns are printed. */ J = 0; while ( J <= Size ) { /* Calculatestrchr of last column to printed in this group. */ StopCol = StartCol + Columns - 1; if (StopCol > Size) StopCol = Size; /* Label the columns. */ if (Header) { if (Data) { printf(" "); for (I = StartCol; I <= StopCol; I++) { if (PrintReordered) Col = I; else Col = PrintOrdToIntColMap[I]; printf(" %9d", Matrix->IntToExtColMap[ Col ]); } printf("\n\n"); } else { if (PrintReordered) printf("Columns %1d to %1d.\n",StartCol,StopCol); else { printf("Columns %1d to %1d.\n", Matrix->IntToExtColMap[ PrintOrdToIntColMap[StartCol] ], Matrix->IntToExtColMap[ PrintOrdToIntColMap[StopCol] ]); } } } /* Print every row ... */ for (I = 1; I <= Size; I++) { if (PrintReordered) Row = I; else Row = PrintOrdToIntRowMap[I]; if (Header) { if (PrintReordered && !Data) printf("%4d", I); else printf("%4d", Matrix->IntToExtRowMap[ Row ]); if (!Data) putchar(' '); } /* ... in each column of the group. */ for (J = StartCol; J <= StopCol; J++) { if (PrintReordered) Col = J; else Col = PrintOrdToIntColMap[J]; pElement = Matrix->FirstInCol[Col]; while(pElement != NULL && pElement->Row != Row) pElement = pElement->NextInCol; if (Data) pImagElements[J - StartCol] = pElement; if (pElement != NULL) { /* Case where element exists */ if (Data) printf(" %9.3g", pElement->Real); else putchar('x'); /* Update status variables */ if ( (Magnitude = ELEMENT_MAG(pElement)) > LargestElement ) LargestElement = Magnitude; if ((Magnitude < SmallestElement) && (Magnitude != 0.0)) SmallestElement = Magnitude; ElementCount++; } /* Case where element is structurally zero */ else { if (Data) printf(" ..."); else putchar('.'); } } putchar('\n'); if (Matrix->Complex && Data) { printf(" "); for (J = StartCol; J <= StopCol; J++) { if (pImagElements[J - StartCol] != NULL) { printf(" %8.2gj", pImagElements[J-StartCol]->Imag); } else printf(" "); } putchar('\n'); } } /* Calculatestrchr of first column in next group. */ StartCol = StopCol; StartCol++; putchar('\n'); } if (Header) { printf("\nLargest element in matrix = %-1.4g.\n", LargestElement); printf("Smallest element in matrix = %-1.4g.\n", SmallestElement); /* Search for largest and smallest diagonal values */ for (I = 1; I <= Size; I++) { if (Matrix->Diag[I] != NULL) { Magnitude = ELEMENT_MAG( Matrix->Diag[I] ); if ( Magnitude > LargestDiag ) LargestDiag = Magnitude; if ( Magnitude < SmallestDiag ) SmallestDiag = Magnitude; } } /* Print the largest and smallest diagonal values */ if ( Matrix->Factored ) { printf("\nLargest diagonal element = %-1.4g.\n", LargestDiag); printf("Smallest diagonal element = %-1.4g.\n", SmallestDiag); } else { printf("\nLargest pivot element = %-1.4g.\n", LargestDiag); printf("Smallest pivot element = %-1.4g.\n", SmallestDiag); } /* Calculate and print sparsity and number of fill-ins created. */ printf("\nDensity = %2.2f%%.\n", ((double)(ElementCount * 100)) / ((double)(Size * Size))); printf("Number of originals = %1d.\n", Matrix->Originals); if (!Matrix->NeedsOrdering) printf("Number of fill-ins = %1d.\n", Matrix->Fillins); } putchar('\n'); (void)fflush(stdout); SP_FREE(PrintOrdToIntColMap); SP_FREE(PrintOrdToIntRowMap); return; } /* * OUTPUT MATRIX TO FILE * * Writes matrix to file in format suitable to be read back in by the * matrix test program. * * >>> Returns: * One is returned if routine was successful, otherwise zero is returned. * The calling function can query errno (the system global error variable) * as to the reason why this routine failed. * * >>> Arguments: * Matrix (char *) * Pointer to matrix. * File (char *) * Name of file into which matrix is to be written. * Label (char *) * String that is transferred to file and is used as a label. * Reordered (int) * Specifies whether matrix should be output in reordered form, * or in original order. * Data (int) * Indicates that the element values should be output along with * the indices for each element. This parameter must be TRUE if * matrix is to be read by the sparse test program. * Header (int) * Indicates that header is desired. This parameter must be TRUE if * matrix is to be read by the sparse test program. * * >>> Local variables: * Col (int) * The original column number of the element being output. * pElement (ElementPtr) * Pointer to an element in the matrix. * pMatrixFile (FILE *) * File pointer to the matrix file. * Row (int) * The original row number of the element being output. * Size (int) * The size of the matrix. */ int spFileMatrix(MatrixPtr Matrix, char *File, char *Label, int Reordered, int Data, int Header) { int I, Size; ElementPtr pElement; int Row, Col, Err; FILE *pMatrixFile; /* Begin `spFileMatrix'. */ assert( IS_SPARSE( Matrix ) ); /* Open file matrix file in write mode. */ if ((pMatrixFile = fopen(File, "w")) == NULL) return 0; /* Output header. */ Size = Matrix->Size; if (Header) { if (Matrix->Factored && Data) { Err = fprintf(pMatrixFile, "Warning : The following matrix is " "factored in to LU form.\n"); if (Err < 0) return 0; } if (fprintf(pMatrixFile, "%s\n", Label) < 0) return 0; Err = fprintf( pMatrixFile, "%d\t%s\n", Size, (Matrix->Complex ? "complex" : "real")); if (Err < 0) return 0; } /* Output matrix. */ if (!Data) { for (I = 1; I <= Size; I++) { pElement = Matrix->FirstInCol[I]; while (pElement != NULL) { if (Reordered) { Row = pElement->Row; Col = I; } else { Row = Matrix->IntToExtRowMap[pElement->Row]; Col = Matrix->IntToExtColMap[I]; } pElement = pElement->NextInCol; if (fprintf(pMatrixFile, "%d\t%d\n", Row, Col) < 0) return 0; } } /* Output terminator, a line of zeros. */ if (Header) if (fprintf(pMatrixFile, "0\t0\n") < 0) return 0; } if (Data && Matrix->Complex) { for (I = 1; I <= Size; I++) { pElement = Matrix->FirstInCol[I]; while (pElement != NULL) { if (Reordered) { Row = pElement->Row; Col = I; } else { Row = Matrix->IntToExtRowMap[pElement->Row]; Col = Matrix->IntToExtColMap[I]; } Err = fprintf ( pMatrixFile,"%d\t%d\t%-.15g\t%-.15g\n", Row, Col, pElement->Real, pElement->Imag ); if (Err < 0) return 0; pElement = pElement->NextInCol; } } /* Output terminator, a line of zeros. */ if (Header) if (fprintf(pMatrixFile,"0\t0\t0.0\t0.0\n") < 0) return 0; } if (Data && !Matrix->Complex) { for (I = 1; I <= Size; I++) { pElement = Matrix->FirstInCol[I]; while (pElement != NULL) { Row = Matrix->IntToExtRowMap[pElement->Row]; Col = Matrix->IntToExtColMap[I]; Err = fprintf ( pMatrixFile,"%d\t%d\t%-.15g\n", Row, Col, pElement->Real ); if (Err < 0) return 0; pElement = pElement->NextInCol; } } /* Output terminator, a line of zeros. */ if (Header) if (fprintf(pMatrixFile,"0\t0\t0.0\n") < 0) return 0; } /* Close file. */ if (fclose(pMatrixFile) < 0) return 0; return 1; } /* * OUTPUT SOURCE VECTOR TO FILE * * Writes vector to file in format suitable to be read back in by the * matrix test program. This routine should be executed after the function * spFileMatrix. * * >>> Returns: * One is returned if routine was successful, otherwise zero is returned. * The calling function can query errno (the system global error variable) * as to the reason why this routine failed. * * >>> Arguments: * Matrix (char *) * Pointer to matrix. * File (char *) * Name of file into which matrix is to be written. * RHS (RealNumber []) * Right-hand side vector, real portion * iRHS (RealNumber []) * Right-hand side vector, imaginary portion. * * >>> Local variables: * pMatrixFile (FILE *) * File pointer to the matrix file. * Size (int) * The size of the matrix. * */ int spFileVector(MatrixPtr Matrix, char *File, RealVector RHS, RealVector iRHS) { int I, Size, Err; FILE *pMatrixFile; /* Begin `spFileVector'. */ assert( IS_SPARSE( Matrix ) && RHS != NULL); if (File) { /* Open File in append mode. */ pMatrixFile = fopen(File,"a"); if (pMatrixFile == NULL) return 0; } else pMatrixFile=stdout; /* Output vector. */ Size = Matrix->Size; if (Matrix->Complex) { for (I = 1; I <= Size; I++) { Err = fprintf ( pMatrixFile, "%-.15g\t%-.15g\n", RHS[I], iRHS[I] ); if (Err < 0) return 0; } } else { for (I = 1; I <= Size; I++) { if (fprintf(pMatrixFile, "%-.15g\n", RHS[I]) < 0) return 0; } } /* Close file. */ if (File) if (fclose(pMatrixFile) < 0) return 0; return 1; } /* * OUTPUT STATISTICS TO FILE * * Writes useful information concerning the matrix to a file. Should be * executed after the matrix is factored. * * >>> Returns: * One is returned if routine was successful, otherwise zero is returned. * The calling function can query errno (the system global error variable) * as to the reason why this routine failed. * * >>> Arguments: * Matrix (char *) * Pointer to matrix. * File (char *) * Name of file into which matrix is to be written. * Label (char *) * String that is transferred to file and is used as a label. * * >>> Local variables: * Data (RealNumber) * The value of the matrix element being output. * LargestElement (RealNumber) * The largest element in the matrix. * NumberOfElements (int) * Number of nonzero elements in the matrix. * pElement (ElementPtr) * Pointer to an element in the matrix. * pStatsFile (FILE *) * File pointer to the statistics file. * Size (int) * The size of the matrix. * SmallestElement (RealNumber) * The smallest element in the matrix excluding zero elements. */ int spFileStats(MatrixPtr Matrix, char *File, char *Label) { int Size, I; ElementPtr pElement; int NumberOfElements; RealNumber Data, LargestElement, SmallestElement; FILE *pStatsFile; /* Begin `spFileStats'. */ assert( IS_SPARSE( Matrix ) ); /* Open File in append mode. */ if ((pStatsFile = fopen(File, "a")) == NULL) return 0; /* Output statistics. */ Size = Matrix->Size; if (!Matrix->Factored) fprintf(pStatsFile, "Matrix has not been factored.\n"); fprintf(pStatsFile, "||| Starting new matrix |||\n"); fprintf(pStatsFile, "%s\n", Label); if (Matrix->Complex) fprintf(pStatsFile, "Matrix is complex.\n"); else fprintf(pStatsFile, "Matrix is real.\n"); fprintf(pStatsFile," Size = %d\n",Size); /* Search matrix. */ NumberOfElements = 0; LargestElement = 0.0; SmallestElement = LARGEST_REAL; for (I = 1; I <= Size; I++) { pElement = Matrix->FirstInCol[I]; while (pElement != NULL) { NumberOfElements++; Data = ELEMENT_MAG(pElement); if (Data > LargestElement) LargestElement = Data; if (Data < SmallestElement && Data != 0.0) SmallestElement = Data; pElement = pElement->NextInCol; } } SmallestElement = MIN( SmallestElement, LargestElement ); /* Output remaining statistics. */ fprintf(pStatsFile, " Initial number of elements = %d\n", NumberOfElements - Matrix->Fillins); fprintf(pStatsFile, " Initial average number of elements per row = %f\n", (double)(NumberOfElements - Matrix->Fillins) / (double)Size); fprintf(pStatsFile, " Fill-ins = %d\n",Matrix->Fillins); fprintf(pStatsFile, " Average number of fill-ins per row = %f%%\n", (double)Matrix->Fillins / (double)Size); fprintf(pStatsFile, " Total number of elements = %d\n", NumberOfElements); fprintf(pStatsFile, " Average number of elements per row = %f\n", (double)NumberOfElements / (double)Size); fprintf(pStatsFile," Density = %f%%\n", (double)(100.0*NumberOfElements)/(double)(Size*Size)); fprintf(pStatsFile," Relative Threshold = %e\n", Matrix->RelThreshold); fprintf(pStatsFile," Absolute Threshold = %e\n", Matrix->AbsThreshold); fprintf(pStatsFile," Largest Element = %e\n", LargestElement); fprintf(pStatsFile," Smallest Element = %e\n\n\n", SmallestElement); /* Close file. */ (void)fclose(pStatsFile); return 1; } #endif /* DOCUMENTATION */ tmpk8ny_4pz/src/maths/sparse/spalloc.c0000644000175000017500000005525213546075722020172 0ustar carstencarsten/* * MATRIX ALLOCATION MODULE * * Author: Advising professor: * Kenneth S. Kundert Alberto Sangiovanni-Vincentelli * UC Berkeley * * This file contains the allocation and deallocation routines for the * sparse matrix routines. * * >>> User accessible functions contained in this file: * spCreate * spDestroy * spError * spWhereSingular * spGetSize * spSetReal * spSetComplex * spFillinCount * spElementCount * spOriginalCount * * >>> Other functions contained in this file: * spcGetElement * InitializeElementBlocks * spcGetFillin * RecordAllocation * AllocateBlockOfAllocationList * EnlargeMatrix * ExpandTranslationArrays */ /* * Revision and copyright information. * * Copyright (c) 1985,86,87,88,89,90 * by Kenneth S. Kundert and the University of California. * * Permission to use, copy, modify, and distribute this software and * its documentation for any purpose and without fee is hereby granted, * provided that the copyright notices appear in all copies and * supporting documentation and that the authors and the University of * California are properly credited. The authors and the University of * California make no representations as to the suitability of this * software for any purpose. It is provided `as is', without express * or implied warranty. */ /* * IMPORTS * * >>> Import descriptions: * spConfig.h * Macros that customize the sparse matrix routines. * spMatrix.h * Macros and declarations to be imported by the user. * spDefs.h * Matrix type and macro definitions for the sparse matrix routines. */ #include #include #define spINSIDE_SPARSE #include "spconfig.h" #include "ngspice/spmatrix.h" #include "spdefs.h" /* * Function declarations */ static void InitializeElementBlocks( MatrixPtr, int, int ); static void RecordAllocation( MatrixPtr, void *); static void AllocateBlockOfAllocationList( MatrixPtr ); /* * MATRIX ALLOCATION * * Allocates and initializes the data structures associated with a matrix. * * >>> Returned: * A pointer to the matrix is returned cast into the form of a pointer to * a character. This pointer is then passed and used by the other matrix * routines to refer to a particular matrix. If an error occurs, the NULL * pointer is returned. * * >>> Arguments: * Size (int) * Size of matrix or estimate of size of matrix if matrix is EXPANDABLE. * Complex (int) * Type of matrix. If Complex is 0 then the matrix is real, otherwise * the matrix will be complex. Note that if the routines are not set up * to handle the type of matrix requested, then a spPANIC error will occur. * Further note that if a matrix will be both real and complex, it must * be specified here as being complex. * pError (int *) * Returns error flag, needed because function spError() will not work * correctly if spCreate() returns NULL. * * >>> Local variables: * AllocatedSize (int) * The size of the matrix being allocated. * Matrix (MatrixPtr) * A pointer to the matrix frame being created. * * >>> Possible errors: * spNO_MEMORY * spPANIC * Error is cleared in this routine. */ MatrixPtr spCreate(int Size, int Complex, int *pError) { unsigned SizePlusOne; MatrixPtr Matrix; int I; int AllocatedSize; /* Begin `spCreate'. */ /* Clear error flag. */ *pError = spOKAY; /* Test for valid size. */ #if EXPANDABLE if (Size < 0) { *pError = spPANIC; return NULL; } #else if (Size <= 0) { *pError = spPANIC; return NULL; } #endif #if 0 /* pn: skipped for cider */ /* Test for valid type. */ if (!Complex) { *pError = spPANIC; return NULL; } #endif /* Create Matrix. */ AllocatedSize = MAX( Size, MINIMUM_ALLOCATED_SIZE ); SizePlusOne = (unsigned)(AllocatedSize + 1); if ((Matrix = SP_MALLOC(struct MatrixFrame, 1)) == NULL) { *pError = spNO_MEMORY; return NULL; } /* Initialize matrix */ Matrix->ID = SPARSE_ID; Matrix->Complex = Complex; Matrix->PreviousMatrixWasComplex = Complex; Matrix->Factored = NO; Matrix->Elements = 0; Matrix->Error = *pError; Matrix->Originals = 0; Matrix->Fillins = 0; Matrix->Reordered = NO; Matrix->NeedsOrdering = YES; Matrix->NumberOfInterchangesIsOdd = NO; Matrix->Partitioned = NO; Matrix->RowsLinked = NO; Matrix->InternalVectorsAllocated = NO; Matrix->SingularCol = 0; Matrix->SingularRow = 0; Matrix->Size = Size; Matrix->AllocatedSize = AllocatedSize; Matrix->ExtSize = Size; Matrix->AllocatedExtSize = AllocatedSize; Matrix->CurrentSize = 0; Matrix->ExtToIntColMap = NULL; Matrix->ExtToIntRowMap = NULL; Matrix->IntToExtColMap = NULL; Matrix->IntToExtRowMap = NULL; Matrix->MarkowitzRow = NULL; Matrix->MarkowitzCol = NULL; Matrix->MarkowitzProd = NULL; Matrix->DoCmplxDirect = NULL; Matrix->DoRealDirect = NULL; Matrix->Intermediate = NULL; Matrix->RelThreshold = DEFAULT_THRESHOLD; Matrix->AbsThreshold = 0.0; Matrix->TopOfAllocationList = NULL; Matrix->RecordsRemaining = 0; Matrix->ElementsRemaining = 0; Matrix->FillinsRemaining = 0; RecordAllocation( Matrix, Matrix ); if (Matrix->Error == spNO_MEMORY) goto MemoryError; /* Take out the trash. */ Matrix->TrashCan.Real = 0.0; Matrix->TrashCan.Imag = 0.0; Matrix->TrashCan.Row = 0; Matrix->TrashCan.Col = 0; Matrix->TrashCan.NextInRow = NULL; Matrix->TrashCan.NextInCol = NULL; #if INITIALIZE Matrix->TrashCan.pInitInfo = NULL; #endif /* Allocate space in memory for Diag pointer vector. */ SP_CALLOC( Matrix->Diag, ElementPtr, SizePlusOne); if (Matrix->Diag == NULL) goto MemoryError; /* Allocate space in memory for FirstInCol pointer vector. */ SP_CALLOC( Matrix->FirstInCol, ElementPtr, SizePlusOne); if (Matrix->FirstInCol == NULL) goto MemoryError; /* Allocate space in memory for FirstInRow pointer vector. */ SP_CALLOC( Matrix->FirstInRow, ElementPtr, SizePlusOne); if (Matrix->FirstInRow == NULL) goto MemoryError; /* Allocate space in memory for IntToExtColMap vector. */ if (( Matrix->IntToExtColMap = SP_MALLOC(int, SizePlusOne)) == NULL) goto MemoryError; /* Allocate space in memory for IntToExtRowMap vector. */ if (( Matrix->IntToExtRowMap = SP_MALLOC(int, SizePlusOne)) == NULL) goto MemoryError; /* Initialize MapIntToExt vectors. */ for (I = 1; I <= AllocatedSize; I++) { Matrix->IntToExtRowMap[I] = I; Matrix->IntToExtColMap[I] = I; } #if TRANSLATE /* Allocate space in memory for ExtToIntColMap vector. */ if (( Matrix->ExtToIntColMap = SP_MALLOC(int, SizePlusOne)) == NULL) goto MemoryError; /* Allocate space in memory for ExtToIntRowMap vector. */ if (( Matrix->ExtToIntRowMap = SP_MALLOC(int, SizePlusOne)) == NULL) goto MemoryError; /* Initialize MapExtToInt vectors. */ for (I = 1; I <= AllocatedSize; I++) { Matrix->ExtToIntColMap[I] = -1; Matrix->ExtToIntRowMap[I] = -1; } Matrix->ExtToIntColMap[0] = 0; Matrix->ExtToIntRowMap[0] = 0; #endif /* Allocate space for fill-ins and initial set of elements. */ InitializeElementBlocks( Matrix, SPACE_FOR_ELEMENTS*AllocatedSize, SPACE_FOR_FILL_INS*AllocatedSize ); if (Matrix->Error == spNO_MEMORY) goto MemoryError; return Matrix; MemoryError: /* Deallocate matrix and return no pointer to matrix if there is not enough memory. */ *pError = spNO_MEMORY; spDestroy(Matrix); return NULL; } /* * ELEMENT ALLOCATION * * This routine allocates space for matrix elements. It requests large blocks * of storage from the system and doles out individual elements as required. * This technique, as opposed to allocating elements individually, tends to * speed the allocation process. * * >>> Returned: * A pointer to an element. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to matrix. * * >>> Local variables: * pElement (ElementPtr) * A pointer to the first element in the group of elements being allocated. * * >>> Possible errors: * spNO_MEMORY */ ElementPtr spcGetElement(MatrixPtr Matrix) { ElementPtr pElements; /* Begin `spcGetElement'. */ #if !COMBINE || STRIP || LINT /* Allocate block of MatrixElements if necessary. */ if (Matrix->ElementsRemaining == 0) { pElements = SP_MALLOC(struct MatrixElement, ELEMENTS_PER_ALLOCATION); RecordAllocation( Matrix, pElements ); if (Matrix->Error == spNO_MEMORY) return NULL; Matrix->ElementsRemaining = ELEMENTS_PER_ALLOCATION; Matrix->NextAvailElement = pElements; } #endif #if COMBINE || STRIP || LINT if (Matrix->ElementsRemaining == 0) { pListNode = Matrix->LastElementListNode; /* First see if there are any stripped elements left. */ if (pListNode->Next != NULL) { Matrix->LastElementListNode = pListNode = pListNode->Next; Matrix->ElementsRemaining = pListNode->NumberOfElementsInList; Matrix->NextAvailElement = pListNode->pElementList; } else { /* Allocate block of elements. */ pElements = SP_MALLOC(struct MatrixElement, ELEMENTS_PER_ALLOCATION); RecordAllocation( Matrix, pElements ); if (Matrix->Error == spNO_MEMORY) return NULL; Matrix->ElementsRemaining = ELEMENTS_PER_ALLOCATION; Matrix->NextAvailElement = pElements; /* Allocate an element list structure. */ pListNode->Next = SP_MALLOC(struct ElementListNodeStruct,1); RecordAllocation( Matrix, pListNode->Next ); if (Matrix->Error == spNO_MEMORY) return NULL; Matrix->LastElementListNode = pListNode = pListNode->Next; pListNode->pElementList = pElements; pListNode->NumberOfElementsInList = ELEMENTS_PER_ALLOCATION; pListNode->Next = NULL; } } #endif /* Update Element counter and return pointer to Element. */ Matrix->ElementsRemaining--; return Matrix->NextAvailElement++; } /* * ELEMENT ALLOCATION INITIALIZATION * * This routine allocates space for matrix fill-ins and an initial * set of elements. Besides being faster than allocating space for * elements one at a time, it tends to keep the fill-ins physically * close to the other matrix elements in the computer memory. This * keeps virtual memory paging to a minimum. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to the matrix. * InitialNumberOfElements (int) * This number is used as the size of the block of memory, in * MatrixElements, reserved for elements. If more than this number of * elements are generated, then more space is allocated later. * NumberOfFillinsExpected (int) * This number is used as the size of the block of memory, in * MatrixElements, reserved for fill-ins. If more than this number of * fill-ins are generated, then more space is allocated, but they may * not be physically close in computer's memory. * * >>> Local variables: * pElement (ElementPtr) * A pointer to the first element in the group of elements being allocated. * * >>> Possible errors: * spNO_MEMORY */ static void InitializeElementBlocks(MatrixPtr Matrix, int InitialNumberOfElements, int NumberOfFillinsExpected) { ElementPtr pElement; /* Begin `InitializeElementBlocks'. */ /* Allocate block of MatrixElements for elements. */ pElement = SP_MALLOC(struct MatrixElement, InitialNumberOfElements); RecordAllocation( Matrix, pElement ); if (Matrix->Error == spNO_MEMORY) return; Matrix->ElementsRemaining = InitialNumberOfElements; Matrix->NextAvailElement = pElement; /* Allocate an element list structure. */ Matrix->FirstElementListNode = SP_MALLOC(struct ElementListNodeStruct,1); RecordAllocation( Matrix, Matrix->FirstElementListNode ); if (Matrix->Error == spNO_MEMORY) return; Matrix->LastElementListNode = Matrix->FirstElementListNode; Matrix->FirstElementListNode->pElementList = pElement; Matrix->FirstElementListNode->NumberOfElementsInList = InitialNumberOfElements; Matrix->FirstElementListNode->Next = NULL; /* Allocate block of MatrixElements for fill-ins. */ pElement = SP_MALLOC(struct MatrixElement, NumberOfFillinsExpected); RecordAllocation( Matrix, pElement ); if (Matrix->Error == spNO_MEMORY) return; Matrix->FillinsRemaining = NumberOfFillinsExpected; Matrix->NextAvailFillin = pElement; /* Allocate a fill-in list structure. */ Matrix->FirstFillinListNode = SP_MALLOC(struct FillinListNodeStruct,1); RecordAllocation( Matrix, Matrix->FirstFillinListNode ); if (Matrix->Error == spNO_MEMORY) return; Matrix->LastFillinListNode = Matrix->FirstFillinListNode; Matrix->FirstFillinListNode->pFillinList = pElement; Matrix->FirstFillinListNode->NumberOfFillinsInList =NumberOfFillinsExpected; Matrix->FirstFillinListNode->Next = NULL; return; } /* * FILL-IN ALLOCATION * * This routine allocates space for matrix fill-ins. It requests * large blocks of storage from the system and doles out individual * elements as required. This technique, as opposed to allocating * elements individually, tends to speed the allocation process. * * >>> Returned: * A pointer to the fill-in. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to matrix. * * >>> Possible errors: * spNO_MEMORY */ ElementPtr spcGetFillin(MatrixPtr Matrix) { /* Begin `spcGetFillin'. */ #if !STRIP || LINT if (Matrix->FillinsRemaining == 0) return spcGetElement( Matrix ); #endif #if STRIP || LINT if (Matrix->FillinsRemaining == 0) { pListNode = Matrix->LastFillinListNode; /* First see if there are any stripped fill-ins left. */ if (pListNode->Next != NULL) { Matrix->LastFillinListNode = pListNode = pListNode->Next; Matrix->FillinsRemaining = pListNode->NumberOfFillinsInList; Matrix->NextAvailFillin = pListNode->pFillinList; } else { /* Allocate block of fill-ins. */ pFillins = SP_MALLOC(struct MatrixElement, ELEMENTS_PER_ALLOCATION); RecordAllocation( Matrix, pFillins ); if (Matrix->Error == spNO_MEMORY) return NULL; Matrix->FillinsRemaining = ELEMENTS_PER_ALLOCATION; Matrix->NextAvailFillin = pFillins; /* Allocate a fill-in list structure. */ pListNode->Next = SP_MALLOC(struct FillinListNodeStruct,1); RecordAllocation( Matrix, pListNode->Next ); if (Matrix->Error == spNO_MEMORY) return NULL; Matrix->LastFillinListNode = pListNode = pListNode->Next; pListNode->pFillinList = pFillins; pListNode->NumberOfFillinsInList = ELEMENTS_PER_ALLOCATION; pListNode->Next = NULL; } } #endif /* Update Fill-in counter and return pointer to Fill-in. */ Matrix->FillinsRemaining--; return Matrix->NextAvailFillin++; } /* * RECORD A MEMORY ALLOCATION * * This routine is used to record all memory allocations so that the * memory can be freed later. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to the matrix. * AllocatedPtr (void *) * The pointer returned by tmalloc or calloc. These pointers are * saved in a list so that they can be easily freed. * * >>> Possible errors: * spNO_MEMORY */ static void RecordAllocation(MatrixPtr Matrix, void *AllocatedPtr ) { /* Begin `RecordAllocation'. */ /* If Allocated pointer is NULL, assume that tmalloc returned a * NULL pointer, which indicates a spNO_MEMORY error. */ if (AllocatedPtr == NULL) { Matrix->Error = spNO_MEMORY; return; } /* Allocate block of MatrixElements if necessary. */ if (Matrix->RecordsRemaining == 0) { AllocateBlockOfAllocationList( Matrix ); if (Matrix->Error == spNO_MEMORY) { SP_FREE(AllocatedPtr); return; } } /* Add Allocated pointer to Allocation List. */ (++Matrix->TopOfAllocationList)->AllocatedPtr = AllocatedPtr; Matrix->RecordsRemaining--; return; } /* * ADD A BLOCK OF SLOTS TO ALLOCATION LIST * * This routine increases the size of the allocation list. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to the matrix. * * >>> Local variables: * ListPtr (AllocationListPtr) * Pointer to the list that contains the pointers to segments of * memory that were allocated by the operating system for the * current matrix. * * >>> Possible errors: * spNO_MEMORY */ static void AllocateBlockOfAllocationList(MatrixPtr Matrix) { int I; AllocationListPtr ListPtr; /* Begin `AllocateBlockOfAllocationList'. */ /* Allocate block of records for allocation list. */ ListPtr = SP_MALLOC(struct AllocationRecord, (ELEMENTS_PER_ALLOCATION+1)); if (ListPtr == NULL) { Matrix->Error = spNO_MEMORY; return; } /* String entries of allocation list into singly linked list. List is linked such that any record points to the one before it. */ ListPtr->NextRecord = Matrix->TopOfAllocationList; Matrix->TopOfAllocationList = ListPtr; ListPtr += ELEMENTS_PER_ALLOCATION; for (I = ELEMENTS_PER_ALLOCATION; I > 0; I--) { ListPtr->NextRecord = ListPtr - 1; ListPtr--; } /* Record allocation of space for allocation list on allocation list. */ Matrix->TopOfAllocationList->AllocatedPtr = (void *)ListPtr; Matrix->RecordsRemaining = ELEMENTS_PER_ALLOCATION; return; } /* * MATRIX DEALLOCATION * * Deallocates pointers and elements of Matrix. * * >>> Arguments: * Matrix (void *) * Pointer to the matrix frame which is to be removed from memory. * * >>> Local variables: * ListPtr (AllocationListPtr) * Pointer into the linked list of pointers to allocated data structures. * Points to pointer to structure to be freed. * NextListPtr (AllocationListPtr) * Pointer into the linked list of pointers to allocated data structures. * Points to the next pointer to structure to be freed. This is needed * because the data structure to be freed could include the current node * in the allocation list. */ void spDestroy(MatrixPtr Matrix) { AllocationListPtr ListPtr, NextListPtr; /* Begin `spDestroy'. */ assert( IS_SPARSE( Matrix ) ); /* Deallocate the vectors that are located in the matrix frame. */ SP_FREE( Matrix->IntToExtColMap ); SP_FREE( Matrix->IntToExtRowMap ); SP_FREE( Matrix->ExtToIntColMap ); SP_FREE( Matrix->ExtToIntRowMap ); SP_FREE( Matrix->Diag ); SP_FREE( Matrix->FirstInRow ); SP_FREE( Matrix->FirstInCol ); SP_FREE( Matrix->MarkowitzRow ); SP_FREE( Matrix->MarkowitzCol ); SP_FREE( Matrix->MarkowitzProd ); SP_FREE( Matrix->DoCmplxDirect ); SP_FREE( Matrix->DoRealDirect ); SP_FREE( Matrix->Intermediate ); /* Sequentially step through the list of allocated pointers * freeing pointers along the way. */ ListPtr = Matrix->TopOfAllocationList; while (ListPtr != NULL) { NextListPtr = ListPtr->NextRecord; if ((void *) ListPtr == ListPtr->AllocatedPtr) { SP_FREE( ListPtr ); } else { SP_FREE( ListPtr->AllocatedPtr ); } ListPtr = NextListPtr; } return; } /* * RETURN MATRIX ERROR STATUS * * This function is used to determine the error status of the given * matrix. * * >>> Returned: * The error status of the given matrix. * * >>> Arguments: * Matrix (void *) * The matrix for which the error status is desired. */ int spError(MatrixPtr Matrix ) { /* Begin `spError'. */ if (Matrix != NULL) { assert(Matrix->ID == SPARSE_ID); return Matrix->Error; } else { /* This error may actually be spPANIC, no way to tell. */ return spNO_MEMORY; } } /* * WHERE IS MATRIX SINGULAR * * This function returns the row and column number where the matrix was * detected as singular or where a zero was detected on the diagonal. * * >>> Arguments: * Matrix (void *) * The matrix for which the error status is desired. * pRow (int *) * The row number. * pCol (int *) * The column number. */ void spWhereSingular(MatrixPtr Matrix, int *pRow, int *pCol) { /* Begin `spWhereSingular'. */ assert( IS_SPARSE( Matrix ) ); if (Matrix->Error == spSINGULAR || Matrix->Error == spZERO_DIAG) { *pRow = Matrix->SingularRow; *pCol = Matrix->SingularCol; } else *pRow = *pCol = 0; return; } /* * MATRIX SIZE * * Returns the size of the matrix. Either the internal or external size of * the matrix is returned. * * >>> Arguments: * Matrix (void *) * Pointer to matrix. * External (int) * If External is set TRUE, the external size , i.e., the value of the * largest external row or column number encountered is returned. * Otherwise the TRUE size of the matrix is returned. These two sizes * may differ if the TRANSLATE option is set TRUE. */ int spGetSize(MatrixPtr Matrix, int External) { /* Begin `spGetSize'. */ assert( IS_SPARSE( Matrix ) ); #if TRANSLATE if (External) return Matrix->ExtSize; else return Matrix->Size; #else return Matrix->Size; #endif } /* * SET MATRIX COMPLEX OR REAL * * Forces matrix to be either real or complex. * * >>> Arguments: * Matrix (void *) * Pointer to matrix. */ void spSetReal(MatrixPtr Matrix) { /* Begin `spSetReal'. */ assert( IS_SPARSE( Matrix )); Matrix->Complex = NO; return; } void spSetComplex(MatrixPtr Matrix) { /* Begin `spSetComplex'. */ assert( IS_SPARSE( Matrix )); Matrix->Complex = YES; return; } /* * ELEMENT, FILL-IN OR ORIGINAL COUNT * * Two functions used to return simple statistics. Either the number * of total elements, or the number of fill-ins, or the number * of original elements can be returned. * * >>> Arguments: * Matrix (void *) * Pointer to matrix. */ int spFillinCount(MatrixPtr Matrix) { /* Begin `spFillinCount'. */ assert( IS_SPARSE( Matrix ) ); return Matrix->Fillins; } int spElementCount(MatrixPtr Matrix) { /* Begin `spElementCount'. */ assert( IS_SPARSE( Matrix ) ); return Matrix->Elements; } int spOriginalCount(MatrixPtr Matrix) { /* Begin `spOriginalCount'. */ assert( IS_SPARSE( Matrix ) ); return Matrix->Originals; } tmpk8ny_4pz/src/maths/sparse/spconfig.h0000644000175000017500000004415013546075722020345 0ustar carstencarsten/* * CONFIGURATION MACRO DEFINITIONS for sparse matrix routines * * Author: Advising professor: * Kenneth S. Kundert Alberto Sangiovanni-Vincentelli * U.C. Berkeley * * This file contains macros for the sparse matrix routines that are used * to define the personality of the routines. The user is expected to * modify this file to maximize the performance of the routines with * his/her matrices. * * Macros are distinguished by using solely capital letters in their * identifiers. This contrasts with C defined identifiers which are * strictly lower case, and program variable and procedure names which use * both upper and lower case. */ /* * Revision and copyright information. * * Copyright (c) 1985,86,87,88,89,90 * by Kenneth S. Kundert and the University of California. * * Permission to use, copy, modify, and distribute this software and * its documentation for any purpose and without fee is hereby granted, * provided that the copyright notices appear in all copies and * supporting documentation and that the authors and the University of * California are properly credited. The authors and the University of * California make no representations as to the suitability of this * software for any purpose. It is provided `as is', without express * or implied warranty. */ #ifndef ngspice_SPCONFIG_H #define ngspice_SPCONFIG_H #ifdef spINSIDE_SPARSE /* * OPTIONS * * These are compiler options. Set each option to one to compile that * section of the code. If a feature is not desired, set the macro * to NO. Recommendations are given in brackets, [ignore them]. * * >>> Option descriptions: * Arithmetic Precision * The precision of the arithmetic used by Sparse can be set by * changing changing the spREAL macro. This macro is * contained in the file spMatrix.h. It is strongly suggested to * used double precision with circuit simulators. Note that * because C always performs arithmetic operations in double * precision, the only benefit to using single precision is that * less storage is required. There is often a noticeable speed * penalty when using single precision. Sparse internally refers * to a spREAL as a RealNumber. * EXPANDABLE * Setting this compiler flag true (1) makes the matrix * expandable before it has been factored. If the matrix is * expandable, then if an element is added that would be * considered out of bounds in the current matrix, the size of * the matrix is increased to hold that element. As a result, * the size of the matrix need not be known before the matrix is * built. The matrix can be allocated with size zero and * expanded. * TRANSLATE * This option allows the set of external row and column numbers * to be non-packed. In other words, the row and column numbers * do not have to be contiguous. The priced paid for this * flexibility is that when TRANSLATE is set true, the time * required to initially build the matrix will be greater because * the external row and column number must be translated into * internal equivalents. This translation brings about other * benefits though. First, the spGetElement() and * spGetAdmittance() routines may be used after the matrix has * been factored. Further, elements, and even rows and columns, * may be added to the matrix, and row and columns may be deleted * from the matrix, after it has been factored. Note that when * the set of row and column number is not a packed set, neither * are the RHS and Solution vectors. Thus the size of these * vectors must be at least as large as the external size, which * is the value of the largest given row or column numbers. * INITIALIZE * Causes the spInitialize(), spGetInitInfo(), and * spInstallInitInfo() routines to be compiled. These routines * allow the user to store and read one pointer in each nonzero * element in the matrix. spInitialize() then calls a user * specified function for each structural nonzero in the matrix, * and includes this pointer as well as the external row and * column numbers as arguments. This allows the user to write * custom matrix initialization routines. * DIAGONAL_PIVOTING * Many matrices, and in particular node- and modified-node * admittance matrices, tend to be nearly symmetric and nearly * diagonally dominant. For these matrices, it is a good idea to * select pivots from the diagonal. With this option enabled, * this is exactly what happens, though if no satisfactory pivot * can be found on the diagonal, an off-diagonal pivot will be * used. If this option is disabled, Sparse does not * preferentially search the diagonal. Because of this, Sparse * has a wider variety of pivot candidates available, and so * presumably fewer fill-ins will be created. However, the * initial pivot selection process will take considerably longer. * If working with node admittance matrices, or other matrices * with a strong diagonal, it is probably best to use * DIAGONAL_PIVOTING for two reasons. First, accuracy will be * better because pivots will be chosen from the large diagonal * elements, thus reducing the chance of growth. Second, a near * optimal ordering will be chosen quickly. If the class of * matrices you are working with does not have a strong diagonal, * do not use DIAGONAL_PIVOTING, but consider using a larger * threshold. When DIAGONAL_PIVOTING is turned off, the following * options and constants are not used: MODIFIED_MARKOWITZ, * MAX_MARKOWITZ_TIES, and TIES_MULTIPLIER. * MODIFIED_MARKOWITZ * This specifies that the modified Markowitz method of pivot * selection is to be used. The modified Markowitz method differs * from standard Markowitz in two ways. First, under modified * Markowitz, the search for a pivot can be terminated early if a * adequate (in terms of sparsity) pivot candidate is found. * Thus, when using modified Markowitz, the initial factorization * can be faster, but at the expense of a suboptimal pivoting * order that may slow subsequent factorizations. The second * difference is in the way modified Markowitz breaks Markowitz * ties. When two or more elements are pivot candidates and they * all have the same Markowitz product, then the tie is broken by * choosing the element that is best numerically. The numerically * best element is the one with the largest ratio of its magnitude * to the magnitude of the largest element in the same column, * excluding itself. The modified Markowitz method results in * marginally better accuracy. This option is most appropriate * for use when working with very large matrices where the initial * factor time represents an unacceptable burden. [NO] * DELETE * This specifies that the spDeleteRowAndCol() routine * should be compiled. Note that for this routine to be * compiled, both DELETE and TRANSLATE should be set true. * STRIP * This specifies that the spStripFills() routine should be compiled. * MODIFIED_NODAL * This specifies that the routine that preorders modified node * admittance matrices should be compiled. This routine results * in greater speed and accuracy if used with this type of * matrix. * QUAD_ELEMENT * This specifies that the routines that allow four related * elements to be entered into the matrix at once should be * compiled. These elements are usually related to an * admittance. The routines affected by QUAD_ELEMENT are the * spGetAdmittance, spGetQuad and spGetOnes routines. * TRANSPOSE * This specifies that the routines that solve the matrix as if * it was transposed should be compiled. These routines are * useful when performing sensitivity analysis using the adjoint * method. * SCALING * This specifies that the routine that performs scaling on the * matrix should be complied. Scaling is not strongly * supported. The routine to scale the matrix is provided, but * no routines are provided to scale and descale the RHS and * Solution vectors. It is suggested that if scaling is desired, * it only be preformed when the pivot order is being chosen [in * spOrderAndFactor()]. This is the only time scaling has * an effect. The scaling may then either be removed from the * solution by the user or the scaled factors may simply be * thrown away. [NO] * DOCUMENTATION * This specifies that routines that are used to document the * matrix, such as spPrint() and spFileMatrix(), should be * compiled. * DETERMINANT * This specifies that the routine spDeterminant() should be complied. * STABILITY * This specifies that spLargestElement() and spRoundoff() should * be compiled. These routines are used to check the stability (and * hence the quality of the pivoting) of the factorization by * computing a bound on the size of the element is the matrix E = * A - LU. If this bound is very high after applying * spOrderAndFactor(), then the pivot threshold should be raised. * If the bound increases greatly after using spFactor(), then the * matrix should probably be reordered. * CONDITION * This specifies that spCondition() and spNorm(), the code that * computes a good estimate of the condition number of the matrix, * should be compiled. * PSEUDOCONDITION * This specifies that spPseudoCondition(), the code that computes * a crude and easily fooled indicator of ill-conditioning in the * matrix, should be compiled. * MULTIPLICATION * This specifies that the routines to multiply the unfactored * matrix by a vector should be compiled. * DEBUG * This specifies that additional error checking will be compiled. * The type of error checked are those that are common when the * matrix routines are first integrated into a user's program. Once * the routines have been integrated in and are running smoothly, this * option should be turned off. */ /* Begin options. */ #define EXPANDABLE YES #define TRANSLATE YES #define INITIALIZE NO #define DIAGONAL_PIVOTING YES #define MODIFIED_MARKOWITZ NO #define DELETE NO #define STRIP NO #define MODIFIED_NODAL YES #define QUAD_ELEMENT NO #define TRANSPOSE YES #define SCALING NO #define DOCUMENTATION YES #define MULTIPLICATION YES #define DETERMINANT YES #define DETERMINANT2 YES #define STABILITY NO #define CONDITION NO #define PSEUDOCONDITION NO #ifdef HAS_MINDATA # define DEBUG NO #else # define DEBUG YES #endif /* * The following options affect Sparse exports and so are exported as a * side effect. For this reason they use the `sp' prefix. The boolean * constants YES an NO are not defined in spMatrix.h to avoid conflicts * with user code, so use 0 for NO and 1 for YES. */ /* * MATRIX CONSTANTS * * These constants are used throughout the sparse matrix routines. They * should be set to suit the type of matrix being solved. Recommendations * are given in brackets. * * Some terminology should be defined. The Markowitz row count is the number * of non-zero elements in a row excluding the one being considered as pivot. * There is one Markowitz row count for every row. The Markowitz column * is defined similarly for columns. The Markowitz product for an element * is the product of its row and column counts. It is a measure of how much * work would be required on the next step of the factorization if that * element were chosen to be pivot. A small Markowitz product is desirable. * * >>> Constants descriptions: * DEFAULT_THRESHOLD * The relative threshold used if the user enters an invalid * threshold. Also the threshold used by spFactor() when * calling spOrderAndFactor(). The default threshold should * not be less than or equal to zero nor larger than one. [0.001] * DIAG_PIVOTING_AS_DEFAULT * This indicates whether spOrderAndFactor() should use diagonal * pivoting as default. This issue only arises when * spOrderAndFactor() is called from spFactor(). * SPACE_FOR_ELEMENTS * This number multiplied by the size of the matrix equals the number * of elements for which memory is initially allocated in * spCreate(). [6] * SPACE_FOR_FILL_INS * This number multiplied by the size of the matrix equals the number * of elements for which memory is initially allocated and specifically * reserved for fill-ins in spCreate(). [4] * ELEMENTS_PER_ALLOCATION * The number of matrix elements requested from the tmalloc utility on * each call to it. Setting this value greater than 1 reduces the * amount of overhead spent in this system call. On a virtual memory * machine, its good to allocate slightly less than a page worth of * elements at a time (or some multiple thereof). * [For the VAX, for real only use 41, otherwise use 31] * MINIMUM_ALLOCATED_SIZE * The minimum allocated size of a matrix. Note that this does not * limit the minimum size of a matrix. This just prevents having to * resize a matrix many times if the matrix is expandable, large and * allocated with an estimated size of zero. This number should not * be less than one. * EXPANSION_FACTOR * The amount the allocated size of the matrix is increased when it * is expanded. * MAX_MARKOWITZ_TIES * This number is used for two slightly different things, both of which * relate to the search for the best pivot. First, it is the maximum * number of elements that are Markowitz tied that will be sifted * through when trying to find the one that is numerically the best. * Second, it creates an upper bound on how large a Markowitz product * can be before it eliminates the possibility of early termination * of the pivot search. In other words, if the product of the smallest * Markowitz product yet found and TIES_MULTIPLIER is greater than * MAX_MARKOWITZ_TIES, then no early termination takes place. * Set MAX_MARKOWITZ_TIES to some small value if no early termination of * the pivot search is desired. An array of RealNumbers is allocated * of size MAX_MARKOWITZ_TIES so it must be positive and shouldn't * be too large. Active when MODIFIED_MARKOWITZ is 1 (true). [100] * TIES_MULTIPLIER * Specifies the number of Markowitz ties that are allowed to occur * before the search for the pivot is terminated early. Set to some * large value if no early termination of the pivot search is desired. * This number is multiplied times the Markowitz product to determine * how many ties are required for early termination. This means that * more elements will be searched before early termination if a large * number of fill-ins could be created by accepting what is currently * considered the best choice for the pivot. Active when * MODIFIED_MARKOWITZ is 1 (true). Setting this number to zero * effectively eliminates all pivoting, which should be avoided. * This number must be positive. TIES_MULTIPLIER is also used when * diagonal pivoting breaks down. [5] * DEFAULT_PARTITION * Which partition mode is used by spPartition() as default. * Possibilities include * spDIRECT_PARTITION -- each row used direct addressing, best for * a few relatively dense matrices. * spINDIRECT_PARTITION -- each row used indirect addressing, best * for a few very sparse matrices. * spAUTO_PARTITION -- direct or indirect addressing is chosen on * a row-by-row basis, carries a large overhead, but speeds up * both dense and sparse matrices, best if there is a large * number of matrices that can use the same ordering. */ /* Begin constants. */ #define DEFAULT_THRESHOLD 1.0e-3 #define DIAG_PIVOTING_AS_DEFAULT YES #define SPACE_FOR_ELEMENTS 6 #define SPACE_FOR_FILL_INS 4 #define ELEMENTS_PER_ALLOCATION 31 #define MINIMUM_ALLOCATED_SIZE 6 #define EXPANSION_FACTOR 1.5 #define MAX_MARKOWITZ_TIES 100 #define TIES_MULTIPLIER 5 #define DEFAULT_PARTITION spAUTO_PARTITION /* * PRINTER WIDTH * * This macro characterize the printer for the spPrint() routine. * * >>> Macros: * PRINTER_WIDTH * The number of characters per page width. Set to 80 for terminal, * 132 for line printer. */ /* Begin printer constants. */ #define PRINTER_WIDTH 80 /* * MACHINE CONSTANTS * * These numbers must be updated when the program is ported to a new machine. */ /* Begin machine constants. */ /* * Grab from Spice include files */ #define MACHINE_RESOLUTION DBL_EPSILON #define LARGEST_REAL DBL_MAX #define SMALLEST_REAL DBL_MIN #define LARGEST_SHORT_INTEGER SHRT_MAX #define LARGEST_LONG_INTEGER LONG_MAX /* * ANNOTATION * * This macro changes the amount of annotation produced by the matrix * routines. The annotation is used as a debugging aid. Change the number * associated with ANNOTATE to change the amount of annotation produced by * the program. */ /* Begin annotation definitions. */ #define ANNOTATE NONE #define NONE 0 #define ON_STRANGE_BEHAVIOR 1 #define FULL 2 #endif /* spINSIDE_SPARSE */ #endif tmpk8ny_4pz/src/maths/sparse/spsolve.c0000644000175000017500000004650713546075722020233 0ustar carstencarsten/* * MATRIX SOLVE MODULE * * Author: Advising professor: * Kenneth S. Kundert Alberto Sangiovanni-Vincentelli * UC Berkeley * * This file contains the forward and backward substitution routines for * the sparse matrix routines. * * >>> User accessible functions contained in this file: * spSolve * spSolveTransposed * * >>> Other functions contained in this file: * SolveComplexMatrix * SolveComplexTransposedMatrix */ /* * Revision and copyright information. * * Copyright (c) 1985,86,87,88,89,90 * by Kenneth S. Kundert and the University of California. * * Permission to use, copy, modify, and distribute this software and * its documentation for any purpose and without fee is hereby granted, * provided that the copyright notices appear in all copies and * supporting documentation and that the authors and the University of * California are properly credited. The authors and the University of * California make no representations as to the suitability of this * software for any purpose. It is provided `as is', without express * or implied warranty. */ /* * IMPORTS * * >>> Import descriptions: * spConfig.h * Macros that customize the sparse matrix routines. * spMatrix.h * Macros and declarations to be imported by the user. * spDefs.h * Matrix type and macro definitions for the sparse matrix routines. */ #include #define spINSIDE_SPARSE #include "spconfig.h" #include "ngspice/spmatrix.h" #include "spdefs.h" /* * Function declarations */ static void SolveComplexMatrix( MatrixPtr, RealVector, RealVector, RealVector, RealVector ); static void SolveComplexTransposedMatrix( MatrixPtr, RealVector, RealVector, RealVector, RealVector ); /* * SOLVE MATRIX EQUATION * * Performs forward elimination and back substitution to find the * unknown vector from the RHS vector and factored matrix. This * routine assumes that the pivots are associated with the lower * triangular (L) matrix and that the diagonal of the upper triangular * (U) matrix consists of ones. This routine arranges the computation * in different way than is traditionally used in order to exploit the * sparsity of the right-hand side. See the reference in spRevision. * * >>> Arguments: * Matrix (char *) * Pointer to matrix. * RHS (RealVector) * RHS is the input data array, the right hand side. This data is * undisturbed and may be reused for other solves. * Solution (RealVector) * Solution is the output data array. This routine is constructed such that * RHS and Solution can be the same array. * iRHS (RealVector) * iRHS is the imaginary portion of the input data array, the right * hand side. This data is undisturbed and may be reused for other solves. * iSolution (RealVector) * iSolution is the imaginary portion of the output data array. This * routine is constructed such that iRHS and iSolution can be * the same array. * * >>> Local variables: * Intermediate (RealVector) * Temporary storage for use in forward elimination and backward * substitution. Commonly referred to as c, when the LU factorization * equations are given as Ax = b, Lc = b, Ux = c Local version of * Matrix->Intermediate, which was created during the initial * factorization in function spcCreateInternalVectors() in the matrix * factorization module. * pElement (ElementPtr) * Pointer used to address elements in both the lower and upper triangle * matrices. * pExtOrder (int *) * Pointer used to sequentially access each entry in IntToExtRowMap * and IntToExtColMap arrays. Used to quickly scramble and unscramble * RHS and Solution to account for row and column interchanges. * pPivot (ElementPtr) * Pointer that points to current pivot or diagonal element. * Size (int) * Size of matrix. Made local to reduce indirection. * Temp (RealNumber) * Temporary storage for entries in arrays. */ /*VARARGS3*/ void spSolve(MatrixPtr Matrix, RealVector RHS, RealVector Solution, RealVector iRHS, RealVector iSolution) { ElementPtr pElement; RealVector Intermediate; RealNumber Temp; int I, *pExtOrder, Size; ElementPtr pPivot; /* Begin `spSolve'. */ assert( IS_VALID(Matrix) && IS_FACTORED(Matrix) ); if (Matrix->Complex) { SolveComplexMatrix( Matrix, RHS, Solution, iRHS, iSolution ); return; } Intermediate = Matrix->Intermediate; Size = Matrix->Size; /* Initialize Intermediate vector. */ pExtOrder = &Matrix->IntToExtRowMap[Size]; for (I = Size; I > 0; I--) Intermediate[I] = RHS[*(pExtOrder--)]; /* Forward elimination. Solves Lc = b.*/ for (I = 1; I <= Size; I++) { /* This step of the elimination is skipped if Temp equals zero. */ if ((Temp = Intermediate[I]) != 0.0) { pPivot = Matrix->Diag[I]; Intermediate[I] = (Temp *= pPivot->Real); pElement = pPivot->NextInCol; while (pElement != NULL) { Intermediate[pElement->Row] -= Temp * pElement->Real; pElement = pElement->NextInCol; } } } /* Backward Substitution. Solves Ux = c.*/ for (I = Size; I > 0; I--) { Temp = Intermediate[I]; pElement = Matrix->Diag[I]->NextInRow; while (pElement != NULL) { Temp -= pElement->Real * Intermediate[pElement->Col]; pElement = pElement->NextInRow; } Intermediate[I] = Temp; } /* Unscramble Intermediate vector while placing data in to Solution vector. */ pExtOrder = &Matrix->IntToExtColMap[Size]; for (I = Size; I > 0; I--) Solution[*(pExtOrder--)] = Intermediate[I]; return; } /* * SOLVE COMPLEX MATRIX EQUATION * * Performs forward elimination and back substitution to find the * unknown vector from the RHS vector and factored matrix. This * routine assumes that the pivots are associated with the lower * triangular (L) matrix and that the diagonal of the upper triangular * (U) matrix consists of ones. This routine arranges the computation * in different way than is traditionally used in order to exploit the * sparsity of the right-hand side. See the reference in spRevision. * * >>> Arguments: * Matrix (char *) * Pointer to matrix. * RHS (RealVector) * RHS is the real portion of the input data array, the right hand * side. This data is undisturbed and may be reused for other solves. * Solution (RealVector) * Solution is the real portion of the output data array. This routine * is constructed such that RHS and Solution can be the same * array. * iRHS (RealVector) * iRHS is the imaginary portion of the input data array, the right * hand side. This data is undisturbed and may be reused for other solves. * If spSEPARATED_COMPLEX_VECTOR is set FALSE, there is no need to * supply this array. * iSolution (RealVector) * iSolution is the imaginary portion of the output data array. This * routine is constructed such that iRHS and iSolution can be * the same array. If spSEPARATED_COMPLEX_VECTOR is set FALSE, there is no * need to supply this array. * * >>> Local variables: * Intermediate (ComplexVector) * Temporary storage for use in forward elimination and backward * substitution. Commonly referred to as c, when the LU factorization * equations are given as Ax = b, Lc = b, Ux = c. * Local version of Matrix->Intermediate, which was created during * the initial factorization in function spcCreateInternalVectors() in the * matrix factorization module. * pElement (ElementPtr) * Pointer used to address elements in both the lower and upper triangle * matrices. * pExtOrder (int *) * Pointer used to sequentially access each entry in IntToExtRowMap * and IntToExtColMap arrays. Used to quickly scramble and unscramble * RHS and Solution to account for row and column interchanges. * pPivot (ElementPtr) * Pointer that points to current pivot or diagonal element. * Size (int) * Size of matrix. Made local to reduce indirection. * Temp (ComplexNumber) * Temporary storage for entries in arrays. */ static void SolveComplexMatrix( MatrixPtr Matrix, RealVector RHS, RealVector Solution , RealVector iRHS, RealVector iSolution ) { ElementPtr pElement; ComplexVector Intermediate; int I, *pExtOrder, Size; ElementPtr pPivot; ComplexNumber Temp; /* Begin `SolveComplexMatrix'. */ Size = Matrix->Size; Intermediate = (ComplexVector)Matrix->Intermediate; /* Initialize Intermediate vector. */ pExtOrder = &Matrix->IntToExtRowMap[Size]; for (I = Size; I > 0; I--) { Intermediate[I].Real = RHS[*(pExtOrder)]; Intermediate[I].Imag = iRHS[*(pExtOrder--)]; } /* Forward substitution. Solves Lc = b.*/ for (I = 1; I <= Size; I++) { Temp = Intermediate[I]; /* This step of the substitution is skipped if Temp equals zero. */ if ((Temp.Real != 0.0) || (Temp.Imag != 0.0)) { pPivot = Matrix->Diag[I]; /* Cmplx expr: Temp *= (1.0 / Pivot). */ CMPLX_MULT_ASSIGN(Temp, *pPivot); Intermediate[I] = Temp; pElement = pPivot->NextInCol; while (pElement != NULL) { /* Cmplx expr: Intermediate[Element->Row] -= Temp * *Element. */ CMPLX_MULT_SUBT_ASSIGN(Intermediate[pElement->Row], Temp, *pElement); pElement = pElement->NextInCol; } } } /* Backward Substitution. Solves Ux = c.*/ for (I = Size; I > 0; I--) { Temp = Intermediate[I]; pElement = Matrix->Diag[I]->NextInRow; while (pElement != NULL) { /* Cmplx expr: Temp -= *Element * Intermediate[Element->Col]. */ CMPLX_MULT_SUBT_ASSIGN(Temp, *pElement,Intermediate[pElement->Col]); pElement = pElement->NextInRow; } Intermediate[I] = Temp; } /* Unscramble Intermediate vector while placing data in to Solution vector. */ pExtOrder = &Matrix->IntToExtColMap[Size]; for (I = Size; I > 0; I--) { Solution[*(pExtOrder)] = Intermediate[I].Real; iSolution[*(pExtOrder--)] = Intermediate[I].Imag; } return; } #if TRANSPOSE /* * SOLVE TRANSPOSED MATRIX EQUATION * * Performs forward elimination and back substitution to find the * unknown vector from the RHS vector and transposed factored * matrix. This routine is useful when performing sensitivity analysis * on a circuit using the adjoint method. This routine assumes that * the pivots are associated with the untransposed lower triangular * (L) matrix and that the diagonal of the untransposed upper * triangular (U) matrix consists of ones. * * >>> Arguments: * Matrix (char *) * Pointer to matrix. * RHS (RealVector) * RHS is the input data array, the right hand side. This data is * undisturbed and may be reused for other solves. * Solution (RealVector) * Solution is the output data array. This routine is constructed such that * RHS and Solution can be the same array. * iRHS (RealVector) * iRHS is the imaginary portion of the input data array, the right * hand side. This data is undisturbed and may be reused for other solves. * If spSEPARATED_COMPLEX_VECTOR is set FALSE, or if matrix is real, there * is no need to supply this array. * iSolution (RealVector) * iSolution is the imaginary portion of the output data array. This * routine is constructed such that iRHS and iSolution can be * the same array. If spSEPARATED_COMPLEX_VECTOR is set FALSE, or if * matrix is real, there is no need to supply this array. * * >>> Local variables: * Intermediate (RealVector) * Temporary storage for use in forward elimination and backward * substitution. Commonly referred to as c, when the LU factorization * equations are given as Ax = b, Lc = b, Ux = c. Local version of * Matrix->Intermediate, which was created during the initial * factorization in function spcCreateInternalVectors() in the matrix * factorization module. * pElement (ElementPtr) * Pointer used to address elements in both the lower and upper triangle * matrices. * pExtOrder (int *) * Pointer used to sequentially access each entry in IntToExtRowMap * and IntToExtRowMap arrays. Used to quickly scramble and unscramble * RHS and Solution to account for row and column interchanges. * pPivot (ElementPtr) * Pointer that points to current pivot or diagonal element. * Size (int) * Size of matrix. Made local to reduce indirection. * Temp (RealNumber) * Temporary storage for entries in arrays. */ /*VARARGS3*/ void spSolveTransposed(MatrixPtr Matrix, RealVector RHS, RealVector Solution, RealVector iRHS, RealVector iSolution) { ElementPtr pElement; RealVector Intermediate; int I, *pExtOrder, Size; ElementPtr pPivot; RealNumber Temp; /* Begin `spSolveTransposed'. */ assert( IS_VALID(Matrix) && IS_FACTORED(Matrix) ); if (Matrix->Complex) { SolveComplexTransposedMatrix( Matrix, RHS, Solution , iRHS, iSolution ); return; } Size = Matrix->Size; Intermediate = Matrix->Intermediate; /* Initialize Intermediate vector. */ pExtOrder = &Matrix->IntToExtColMap[Size]; for (I = Size; I > 0; I--) Intermediate[I] = RHS[*(pExtOrder--)]; /* Forward elimination. */ for (I = 1; I <= Size; I++) { /* This step of the elimination is skipped if Temp equals zero. */ if ((Temp = Intermediate[I]) != 0.0) { pElement = Matrix->Diag[I]->NextInRow; while (pElement != NULL) { Intermediate[pElement->Col] -= Temp * pElement->Real; pElement = pElement->NextInRow; } } } /* Backward Substitution. */ for (I = Size; I > 0; I--) { pPivot = Matrix->Diag[I]; Temp = Intermediate[I]; pElement = pPivot->NextInCol; while (pElement != NULL) { Temp -= pElement->Real * Intermediate[pElement->Row]; pElement = pElement->NextInCol; } Intermediate[I] = Temp * pPivot->Real; } /* Unscramble Intermediate vector while placing data in to Solution vector. */ pExtOrder = &Matrix->IntToExtRowMap[Size]; for (I = Size; I > 0; I--) Solution[*(pExtOrder--)] = Intermediate[I]; return; } #endif /* TRANSPOSE */ #if TRANSPOSE /* * SOLVE COMPLEX TRANSPOSED MATRIX EQUATION * * Performs forward elimination and back substitution to find the * unknown vector from the RHS vector and transposed factored * matrix. This routine is useful when performing sensitivity analysis * on a circuit using the adjoint method. This routine assumes that * the pivots are associated with the untransposed lower triangular * (L) matrix and that the diagonal of the untransposed upper * triangular (U) matrix consists of ones. * * >>> Arguments: * Matrix (char *) * Pointer to matrix. * RHS (RealVector) * RHS is the input data array, the right hand * side. This data is undisturbed and may be reused for other solves. * This vector is only the real portion if the matrix is complex. * Solution (RealVector) * Solution is the real portion of the output data array. This routine * is constructed such that RHS and Solution can be the same array. * This vector is only the real portion if the matrix is complex. * iRHS (RealVector) * iRHS is the imaginary portion of the input data array, the right * hand side. This data is undisturbed and may be reused for other solves. * iSolution (RealVector) * iSolution is the imaginary portion of the output data array. This * routine is constructed such that iRHS and iSolution can be * the same array. * * >>> Local variables: * Intermediate (ComplexVector) * Temporary storage for use in forward elimination and backward * substitution. Commonly referred to as c, when the LU factorization * equations are given as Ax = b, Lc = b, Ux = c. Local version of * Matrix->Intermediate, which was created during * the initial factorization in function spcCreateInternalVectors() in the * matrix factorization module. * pElement (ElementPtr) * Pointer used to address elements in both the lower and upper triangle * matrices. * pExtOrder (int *) * Pointer used to sequentially access each entry in IntToExtRowMap * and IntToExtColMap arrays. Used to quickly scramble and unscramble * RHS and Solution to account for row and column interchanges. * pPivot (ElementPtr) * Pointer that points to current pivot or diagonal element. * Size (int) * Size of matrix. Made local to reduce indirection. * Temp (ComplexNumber) * Temporary storage for entries in arrays. */ static void SolveComplexTransposedMatrix(MatrixPtr Matrix, RealVector RHS, RealVector Solution , RealVector iRHS, RealVector iSolution ) { ElementPtr pElement; ComplexVector Intermediate; int I, *pExtOrder, Size; ElementPtr pPivot; ComplexNumber Temp; /* Begin `SolveComplexTransposedMatrix'. */ Size = Matrix->Size; Intermediate = (ComplexVector)Matrix->Intermediate; /* Initialize Intermediate vector. */ pExtOrder = &Matrix->IntToExtColMap[Size]; for (I = Size; I > 0; I--) { Intermediate[I].Real = RHS[*(pExtOrder)]; Intermediate[I].Imag = iRHS[*(pExtOrder--)]; } /* Forward elimination. */ for (I = 1; I <= Size; I++) { Temp = Intermediate[I]; /* This step of the elimination is skipped if Temp equals zero. */ if ((Temp.Real != 0.0) || (Temp.Imag != 0.0)) { pElement = Matrix->Diag[I]->NextInRow; while (pElement != NULL) { /* Cmplx expr: Intermediate[Element->Col] -= Temp * *Element. */ CMPLX_MULT_SUBT_ASSIGN( Intermediate[pElement->Col], Temp, *pElement); pElement = pElement->NextInRow; } } } /* Backward Substitution. */ for (I = Size; I > 0; I--) { pPivot = Matrix->Diag[I]; Temp = Intermediate[I]; pElement = pPivot->NextInCol; while (pElement != NULL) { /* Cmplx expr: Temp -= Intermediate[Element->Row] * *Element. */ CMPLX_MULT_SUBT_ASSIGN(Temp,Intermediate[pElement->Row],*pElement); pElement = pElement->NextInCol; } /* Cmplx expr: Intermediate = Temp * (1.0 / *pPivot). */ CMPLX_MULT(Intermediate[I], Temp, *pPivot); } /* Unscramble Intermediate vector while placing data in to Solution vector. */ pExtOrder = &Matrix->IntToExtRowMap[Size]; for (I = Size; I > 0; I--) { Solution[*(pExtOrder)] = Intermediate[I].Real; iSolution[*(pExtOrder--)] = Intermediate[I].Imag; } return; } #endif /* TRANSPOSE */ tmpk8ny_4pz/src/maths/sparse/spsmp.c0000644000175000017500000002714313546075722017675 0ustar carstencarsten/* * Spice3 COMPATIBILITY MODULE * * Author: Advising professor: * Kenneth S. Kundert Alberto Sangiovanni-Vincentelli * UC Berkeley * * This module contains routines that make Sparse1.3 a direct * replacement for the SMP sparse matrix package in Spice3c1 or Spice3d1. * Sparse1.3 is in general a faster and more robust package than SMP. * These advantages become significant on large circuits. * * >>> User accessible functions contained in this file: * SMPaddElt * SMPmakeElt * SMPcClear * SMPclear * SMPcLUfac * SMPluFac * SMPcReorder * SMPreorder * SMPcaSolve * SMPcSolve * SMPsolve * SMPmatSize * SMPnewMatrix * SMPdestroy * SMPpreOrder * SMPprint * SMPgetError * SMPcProdDiag * LoadGmin * SMPfindElt */ /* * To replace SMP with Sparse, rename the file spSpice3.h to * spMatrix.h and place Sparse in a subdirectory of SPICE called * `sparse'. Then on UNIX compile Sparse by executing `make spice'. * If not on UNIX, after compiling Sparse and creating the sparse.a * archive, compile this file (spSMP.c) and spSMP.o to the archive, * then copy sparse.a into the SPICE main directory and rename it * SMP.a. Finally link SPICE. * * To be compatible with SPICE, the following Sparse compiler options * (in spConfig.h) should be set as shown below: * * EXPANDABLE YES * TRANSLATE NO * INITIALIZE NO or YES, YES for use with test prog. * DIAGONAL_PIVOTING YES * MODIFIED_MARKOWITZ NO * DELETE NO * STRIP NO * MODIFIED_NODAL YES * QUAD_ELEMENT NO * TRANSPOSE YES * SCALING NO * DOCUMENTATION YES * MULTIPLICATION NO * DETERMINANT YES * STABILITY NO * CONDITION NO * PSEUDOCONDITION NO * DEBUG YES * * spREAL double */ /* * Revision and copyright information. * * Copyright (c) 1985,86,87,88,89,90 * by Kenneth S. Kundert and the University of California. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and supporting * documentation and that the authors and the University of California * are properly credited. The authors and the University of California * make no representations as to the suitability of this software for * any purpose. It is provided `as is', without express or implied warranty. */ /* * IMPORTS * * >>> Import descriptions: * spMatrix.h * Sparse macros and declarations. * SMPdefs.h * Spice3's matrix macro definitions. */ #include "ngspice/config.h" #include #include #include #include "ngspice/spmatrix.h" #include "spdefs.h" #include "ngspice/smpdefs.h" #if defined (_MSC_VER) extern double scalbn(double, int); #define logb _logb extern double logb(double); #endif static void LoadGmin(SMPmatrix *Matrix, double Gmin); /* * SMPaddElt() */ int SMPaddElt(SMPmatrix *Matrix, int Row, int Col, double Value) { *spGetElement( Matrix, Row, Col ) = Value; return spError( Matrix ); } /* * SMPmakeElt() */ double * SMPmakeElt(SMPmatrix *Matrix, int Row, int Col) { return spGetElement( Matrix, Row, Col ); } /* * SMPcClear() */ void SMPcClear(SMPmatrix *Matrix) { spClear( Matrix ); } /* * SMPclear() */ void SMPclear(SMPmatrix *Matrix) { spClear( Matrix ); } #define NG_IGNORE(x) (void)x /* * SMPcLUfac() */ /*ARGSUSED*/ int SMPcLUfac(SMPmatrix *Matrix, double PivTol) { NG_IGNORE(PivTol); spSetComplex( Matrix ); return spFactor( Matrix ); } /* * SMPluFac() */ /*ARGSUSED*/ int SMPluFac(SMPmatrix *Matrix, double PivTol, double Gmin) { NG_IGNORE(PivTol); spSetReal( Matrix ); LoadGmin( Matrix, Gmin ); return spFactor( Matrix ); } /* * SMPcReorder() */ int SMPcReorder(SMPmatrix *Matrix, double PivTol, double PivRel, int *NumSwaps) { *NumSwaps = 1; spSetComplex( Matrix ); return spOrderAndFactor( Matrix, NULL, PivRel, PivTol, YES ); } /* * SMPreorder() */ int SMPreorder(SMPmatrix *Matrix, double PivTol, double PivRel, double Gmin) { spSetReal( Matrix ); LoadGmin( Matrix, Gmin ); return spOrderAndFactor( Matrix, NULL, PivRel, PivTol, YES ); } /* * SMPcaSolve() */ void SMPcaSolve(SMPmatrix *Matrix, double RHS[], double iRHS[], double Spare[], double iSpare[]) { NG_IGNORE(iSpare); NG_IGNORE(Spare); spSolveTransposed( Matrix, RHS, RHS, iRHS, iRHS ); } /* * SMPcSolve() */ void SMPcSolve(SMPmatrix *Matrix, double RHS[], double iRHS[], double Spare[], double iSpare[]) { NG_IGNORE(iSpare); NG_IGNORE(Spare); spSolve( Matrix, RHS, RHS, iRHS, iRHS ); } /* * SMPsolve() */ void SMPsolve(SMPmatrix *Matrix, double RHS[], double Spare[]) { NG_IGNORE(Spare); spSolve( Matrix, RHS, RHS, NULL, NULL ); } /* * SMPmatSize() */ int SMPmatSize(SMPmatrix *Matrix) { return spGetSize( Matrix, 1 ); } /* * SMPnewMatrix() */ int SMPnewMatrix(SMPmatrix **pMatrix, int size) { int Error; *pMatrix = spCreate( size, 1, &Error ); return Error; } /* * SMPdestroy() */ void SMPdestroy(SMPmatrix *Matrix) { spDestroy( Matrix ); } /* * SMPpreOrder() */ int SMPpreOrder(SMPmatrix *Matrix) { spMNA_Preorder( Matrix ); return spError( Matrix ); } /* * SMPprint() */ void SMPprintRHS(SMPmatrix *Matrix, char *Filename, RealVector RHS, RealVector iRHS) { spFileVector( Matrix, Filename, RHS, iRHS ); } /* * SMPprint() */ void SMPprint(SMPmatrix *Matrix, char *Filename) { if (Filename) spFileMatrix(Matrix, Filename, "Circuit Matrix", 0, 1, 1 ); else spPrint( Matrix, 0, 1, 1 ); } /* * SMPgetError() */ void SMPgetError(SMPmatrix *Matrix, int *Col, int *Row) { spWhereSingular( Matrix, Row, Col ); } /* * SMPcProdDiag() * note: obsolete for Spice3d2 and later */ int SMPcProdDiag(SMPmatrix *Matrix, SPcomplex *pMantissa, int *pExponent) { spDeterminant( Matrix, pExponent, &(pMantissa->real), &(pMantissa->imag) ); return spError( Matrix ); } /* * SMPcDProd() */ int SMPcDProd(SMPmatrix *Matrix, SPcomplex *pMantissa, int *pExponent) { double re, im, x, y, z; int p; spDeterminant( Matrix, &p, &re, &im); #ifndef M_LN2 #define M_LN2 0.69314718055994530942 #endif #ifndef M_LN10 #define M_LN10 2.30258509299404568402 #endif #ifdef debug_print printf("Determinant 10: (%20g,%20g)^%d\n", re, im, p); #endif /* Convert base 10 numbers to base 2 numbers, for comparison */ y = p * M_LN10 / M_LN2; x = (int) y; y -= x; /* ASSERT * x = integral part of exponent, y = fraction part of exponent */ /* Fold in the fractional part */ #ifdef debug_print printf(" ** base10 -> base2 int = %g, frac = %20g\n", x, y); #endif z = pow(2.0, y); re *= z; im *= z; #ifdef debug_print printf(" ** multiplier = %20g\n", z); #endif /* Re-normalize (re or im may be > 2.0 or both < 1.0 */ if (re != 0.0) { y = logb(re); if (im != 0.0) z = logb(im); else z = 0; } else if (im != 0.0) { z = logb(im); y = 0; } else { /* Singular */ /*printf("10 -> singular\n");*/ y = 0; z = 0; } #ifdef debug_print printf(" ** renormalize changes = %g,%g\n", y, z); #endif if (y < z) y = z; *pExponent = (int)(x + y); x = scalbn(re, (int) -y); z = scalbn(im, (int) -y); #ifdef debug_print printf(" ** values are: re %g, im %g, y %g, re' %g, im' %g\n", re, im, y, x, z); #endif pMantissa->real = scalbn(re, (int) -y); pMantissa->imag = scalbn(im, (int) -y); #ifdef debug_print printf("Determinant 10->2: (%20g,%20g)^%d\n", pMantissa->real, pMantissa->imag, *pExponent); #endif return spError( Matrix ); } /* * The following routines need internal knowledge of the Sparse data * structures. */ /* * LOAD GMIN * * This routine adds Gmin to each diagonal element. Because Gmin is * added to the current diagonal, which may bear little relation to * what the outside world thinks is a diagonal, and because the * elements that are diagonals may change after calling spOrderAndFactor, * use of this routine is not recommended. It is included here simply * for compatibility with Spice3. */ static void LoadGmin(SMPmatrix *Matrix, double Gmin) { int I; ArrayOfElementPtrs Diag; ElementPtr diag; /* Begin `LoadGmin'. */ assert( IS_SPARSE( Matrix ) ); if (Gmin != 0.0) { Diag = Matrix->Diag; for (I = Matrix->Size; I > 0; I--) { if ((diag = Diag[I]) != NULL) diag->Real += Gmin; } } return; } /* * FIND ELEMENT * * This routine finds an element in the matrix by row and column number. * If the element exists, a pointer to it is returned. If not, then NULL * is returned unless the CreateIfMissing flag is TRUE, in which case a * pointer to the new element is returned. */ SMPelement * SMPfindElt(SMPmatrix *Matrix, int Row, int Col, int CreateIfMissing) { ElementPtr Element; /* Begin `SMPfindElt'. */ assert( IS_SPARSE( Matrix ) ); Row = Matrix->ExtToIntRowMap[Row]; Col = Matrix->ExtToIntColMap[Col]; Element = Matrix->FirstInCol[Col]; Element = spcFindElementInCol(Matrix, &Element, Row, Col, CreateIfMissing); return Element; } /* XXX The following should probably be implemented in spUtils */ /* * SMPcZeroCol() */ int SMPcZeroCol(SMPmatrix *Matrix, int Col) { ElementPtr Element; Col = Matrix->ExtToIntColMap[Col]; for (Element = Matrix->FirstInCol[Col]; Element != NULL; Element = Element->NextInCol) { Element->Real = 0.0; Element->Imag = 0.0; } return spError( Matrix ); } /* * SMPcAddCol() */ int SMPcAddCol(SMPmatrix *Matrix, int Accum_Col, int Addend_Col) { ElementPtr Accum, Addend, *Prev; Accum_Col = Matrix->ExtToIntColMap[Accum_Col]; Addend_Col = Matrix->ExtToIntColMap[Addend_Col]; Addend = Matrix->FirstInCol[Addend_Col]; Prev = &Matrix->FirstInCol[Accum_Col]; Accum = *Prev; while (Addend != NULL) { while (Accum && Accum->Row < Addend->Row) { Prev = &Accum->NextInCol; Accum = *Prev; } if (!Accum || Accum->Row > Addend->Row) { Accum = spcCreateElement(Matrix, Addend->Row, Accum_Col, Prev, 0); } Accum->Real += Addend->Real; Accum->Imag += Addend->Imag; Addend = Addend->NextInCol; } return spError( Matrix ); } /* * SMPzeroRow() */ int SMPzeroRow(SMPmatrix *Matrix, int Row) { ElementPtr Element; Row = Matrix->ExtToIntColMap[Row]; if (Matrix->RowsLinked == NO) spcLinkRows(Matrix); if (Matrix->PreviousMatrixWasComplex || Matrix->Complex) { for (Element = Matrix->FirstInRow[Row]; Element != NULL; Element = Element->NextInRow) { Element->Real = 0.0; Element->Imag = 0.0; } } else { for (Element = Matrix->FirstInRow[Row]; Element != NULL; Element = Element->NextInRow) { Element->Real = 0.0; } } return spError( Matrix ); } /* * SMPconstMult() */ void SMPconstMult(SMPmatrix *Matrix, double constant) { spConstMult(Matrix, constant); } /* * SMPmultiply() */ void SMPmultiply(SMPmatrix *Matrix, double *RHS, double *Solution, double *iRHS, double *iSolution) { spMultiply(Matrix, RHS, Solution, iRHS, iSolution); } tmpk8ny_4pz/src/maths/sparse/ChangeLog0000644000175000017500000000023113546075722020126 0ustar carstencarsten1999-08-28 Emmanuel Rouat * spdefs.h: #includes spice.h instead of misc.h added a few #undefs to avoid redaclarations tmpk8ny_4pz/src/maths/sparse/sputils.c0000644000175000017500000020125313546075722020232 0ustar carstencarsten/* * MATRIX UTILITY MODULE * * Author: Advising professor: * Kenneth S. Kundert Alberto Sangiovanni-Vincentelli * UC Berkeley * * This file contains various optional utility routines. * * >>> User accessible functions contained in this file: * spMNA_Preorder * spScale * spMultiply * spMultTransposed * spDeterminant * spStripFills * spDeleteRowAndCol * spPseudoCondition * spCondition * spNorm * spLargestElement * spRoundoff * spErrorMessage * * >>> Other functions contained in this file: * CountTwins * SwapCols * ScaleComplexMatrix * ComplexMatrixMultiply * ComplexCondition */ /* * Revision and copyright information. * * Copyright (c) 1985,86,87,88,89,90 * by Kenneth S. Kundert and the University of California. * * Permission to use, copy, modify, and distribute this software and * its documentation for any purpose and without fee is hereby granted, * provided that the copyright notices appear in all copies and * supporting documentation and that the authors and the University of * California are properly credited. The authors and the University of * California make no representations as to the suitability of this * software for any purpose. It is provided `as is', without express * or implied warranty. */ /* * IMPORTS * * >>> Import descriptions: * spConfig.h * Macros that customize the sparse matrix routines. * spMatrix.h * Macros and declarations to be imported by the user. * spDefs.h * Matrix type and macro definitions for the sparse matrix routines. */ #include #include #define spINSIDE_SPARSE #include "spconfig.h" #include "ngspice/spmatrix.h" #include "spdefs.h" /* Function declarations */ static int CountTwins( MatrixPtr, int, ElementPtr*, ElementPtr* ); static void SwapCols( MatrixPtr, ElementPtr, ElementPtr ); static void ComplexMatrixMultiply( MatrixPtr, RealVector, RealVector, RealVector, RealVector ); static void ComplexTransposedMatrixMultiply( MatrixPtr, RealVector, RealVector, RealVector, RealVector); #if MODIFIED_NODAL /* * PREORDER MODIFIED NODE ADMITTANCE MATRIX TO REMOVE ZEROS FROM DIAGONAL * * This routine massages modified node admittance matrices to remove * zeros from the diagonal. It takes advantage of the fact that the * row and column associated with a zero diagonal usually have * structural ones placed symmetricly. This routine should be used * only on modified node admittance matrices and should be executed * after the matrix has been built but before the factorization * begins. It should be executed for the initial factorization only * and should be executed before the rows have been linked. Thus it * should be run before using spScale(), spMultiply(), * spDeleteRowAndCol(), or spNorm(). * * This routine exploits the fact that the structural ones are placed * in the matrix in symmetric twins. For example, the stamps for * grounded and a floating voltage sources are * grounded: floating: * [ x x 1 ] [ x x 1 ] * [ x x ] [ x x -1 ] * [ 1 ] [ 1 -1 ] * Notice for the grounded source, there is one set of twins, and for * the floating, there are two sets. We remove the zero from the diagonal * by swapping the rows associated with a set of twins. For example: * grounded: floating 1: floating 2: * [ 1 ] [ 1 -1 ] [ x x 1 ] * [ x x ] [ x x -1 ] [ 1 -1 ] * [ x x 1 ] [ x x 1 ] [ x x -1 ] * * It is important to deal with any zero diagonals that only have one * set of twins before dealing with those that have more than one because * swapping row destroys the symmetry of any twins in the rows being * swapped, which may limit future moves. Consider * [ x x 1 ] * [ x x -1 1 ] * [ 1 -1 ] * [ 1 ] * There is one set of twins for diagonal 4 and two for diagonal 3. * Dealing with diagonal 4 first requires swapping rows 2 and 4. * [ x x 1 ] * [ 1 ] * [ 1 -1 ] * [ x x -1 1 ] * We can now deal with diagonal 3 by swapping rows 1 and 3. * [ 1 -1 ] * [ 1 ] * [ x x 1 ] * [ x x -1 1 ] * And we are done, there are no zeros left on the diagonal. However, if * we originally dealt with diagonal 3 first, we could swap rows 2 and 3 * [ x x 1 ] * [ 1 -1 ] * [ x x -1 1 ] * [ 1 ] * Diagonal 4 no longer has a symmetric twin and we cannot continue. * * So we always take care of lone twins first. When none remain, we * choose arbitrarily a set of twins for a diagonal with more than one set * and swap the rows corresponding to that twin. We then deal with any * lone twins that were created and repeat the procedure until no * zero diagonals with symmetric twins remain. * * In this particular implementation, columns are swapped rather than rows. * The algorithm used in this function was developed by Ken Kundert and * Tom Quarles. * * >>> Arguments: * Matrix (char *) * Pointer to the matrix to be preordered. * * >>> Local variables; * J (int) * Column with zero diagonal being currently considered. * pTwin1 (ElementPtr) * Pointer to the twin found in the column belonging to the zero diagonal. * pTwin2 (ElementPtr) * Pointer to the twin found in the row belonging to the zero diagonal. * belonging to the zero diagonal. * AnotherPassNeeded (int) * Flag indicating that at least one zero diagonal with symmetric twins * remain. * StartAt (int) * Column number of first zero diagonal with symmetric twins. * Swapped (int) * Flag indicating that columns were swapped on this pass. * Twins (int) * Number of symmetric twins corresponding to current zero diagonal. */ void spMNA_Preorder(MatrixPtr Matrix) { int J, Size; ElementPtr pTwin1, pTwin2; int Twins, StartAt = 1; int Swapped, AnotherPassNeeded; /* Begin `spMNA_Preorder'. */ assert( IS_VALID(Matrix) && !Matrix->Factored ); if (Matrix->RowsLinked) return; Size = Matrix->Size; Matrix->Reordered = YES; do { AnotherPassNeeded = Swapped = NO; /* Search for zero diagonals with lone twins. */ for (J = StartAt; J <= Size; J++) { if (Matrix->Diag[J] == NULL) { Twins = CountTwins( Matrix, J, &pTwin1, &pTwin2 ); if (Twins == 1) { /* Lone twins found, swap rows. */ SwapCols( Matrix, pTwin1, pTwin2 ); Swapped = YES; } else if ((Twins > 1) && !AnotherPassNeeded) { AnotherPassNeeded = YES; StartAt = J; } } } /* All lone twins are gone, look for zero diagonals with multiple twins. */ if (AnotherPassNeeded) { for (J = StartAt; !Swapped && (J <= Size); J++) { if (Matrix->Diag[J] == NULL) { Twins = CountTwins( Matrix, J, &pTwin1, &pTwin2 ); SwapCols( Matrix, pTwin1, pTwin2 ); Swapped = YES; } } } } while (AnotherPassNeeded); return; } /* * COUNT TWINS * * This function counts the number of symmetric twins associated with * a zero diagonal and returns one set of twins if any exist. The * count is terminated early at two. */ static int CountTwins( MatrixPtr Matrix, int Col, ElementPtr *ppTwin1, ElementPtr *ppTwin2 ) { int Row, Twins = 0; ElementPtr pTwin1, pTwin2; /* Begin `CountTwins'. */ pTwin1 = Matrix->FirstInCol[Col]; while (pTwin1 != NULL) { if (ABS(pTwin1->Real) == 1.0) { Row = pTwin1->Row; pTwin2 = Matrix->FirstInCol[Row]; while ((pTwin2 != NULL) && (pTwin2->Row != Col)) pTwin2 = pTwin2->NextInCol; if ((pTwin2 != NULL) && (ABS(pTwin2->Real) == 1.0)) { /* Found symmetric twins. */ if (++Twins >= 2) return Twins; (*ppTwin1 = pTwin1)->Col = Col; (*ppTwin2 = pTwin2)->Col = Row; } } pTwin1 = pTwin1->NextInCol; } return Twins; } /* * SWAP COLUMNS * * This function swaps two columns and is applicable before the rows are * linked. */ static void SwapCols( MatrixPtr Matrix, ElementPtr pTwin1, ElementPtr pTwin2 ) { int Col1 = pTwin1->Col, Col2 = pTwin2->Col; /* Begin `SwapCols'. */ SWAP (ElementPtr, Matrix->FirstInCol[Col1], Matrix->FirstInCol[Col2]); SWAP (int, Matrix->IntToExtColMap[Col1], Matrix->IntToExtColMap[Col2]); #if TRANSLATE Matrix->ExtToIntColMap[Matrix->IntToExtColMap[Col2]]=Col2; Matrix->ExtToIntColMap[Matrix->IntToExtColMap[Col1]]=Col1; #endif Matrix->Diag[Col1] = pTwin2; Matrix->Diag[Col2] = pTwin1; Matrix->NumberOfInterchangesIsOdd = !Matrix->NumberOfInterchangesIsOdd; return; } #endif /* MODIFIED_NODAL */ #if SCALING /* * SCALE MATRIX * * This function scales the matrix to enhance the possibility of * finding a good pivoting order. Note that scaling enhances accuracy * of the solution only if it affects the pivoting order, so it makes * no sense to scale the matrix before spFactor(). If scaling is * desired it should be done before spOrderAndFactor(). There * are several things to take into account when choosing the scale * factors. First, the scale factors are directly multiplied against * the elements in the matrix. To prevent roundoff, each scale factor * should be equal to an integer power of the number base of the * machine. Since most machines operate in base two, scale factors * should be a power of two. Second, the matrix should be scaled such * that the matrix of element uncertainties is equilibrated. Third, * this function multiplies the scale factors by the elements, so if * one row tends to have uncertainties 1000 times smaller than the * other rows, then its scale factor should be 1024, not 1/1024. * Fourth, to save time, this function does not scale rows or columns * if their scale factors are equal to one. Thus, the scale factors * should be normalized to the most common scale factor. Rows and * columns should be normalized separately. For example, if the size * of the matrix is 100 and 10 rows tend to have uncertainties near * 1e-6 and the remaining 90 have uncertainties near 1e-12, then the * scale factor for the 10 should be 1/1,048,576 and the scale factors * for the remaining 90 should be 1. Fifth, since this routine * directly operates on the matrix, it is necessary to apply the scale * factors to the RHS and Solution vectors. It may be easier to * simply use spOrderAndFactor() on a scaled matrix to choose the * pivoting order, and then throw away the matrix. Subsequent * factorizations, performed with spFactor(), will not need to have * the RHS and Solution vectors descaled. Lastly, this function * should not be executed before the function spMNA_Preorder. * * >>> Arguments: * Matrix (char *) * Pointer to the matrix to be scaled. * SolutionScaleFactors (RealVector) * The array of Solution scale factors. These factors scale the columns. * All scale factors are real valued. * RHS_ScaleFactors (RealVector) * The array of RHS scale factors. These factors scale the rows. * All scale factors are real valued. * * >>> Local variables: * lSize (int) * Local version of the size of the matrix. * pElement (ElementPtr) * Pointer to an element in the matrix. * pExtOrder (int *) * Pointer into either IntToExtRowMap or IntToExtColMap vector. Used to * compensate for any row or column swaps that have been performed. * ScaleFactor (RealNumber) * The scale factor being used on the current row or column. */ void spScale(MatrixPtr Matrix, RealVector RHS_ScaleFactors, RealVector SolutionScaleFactors) { ElementPtr pElement; int I, lSize, *pExtOrder; RealNumber ScaleFactor; void ScaleComplexMatrix(); /* Begin `spScale'. */ assert( IS_VALID(Matrix) && !Matrix->Factored ); if (!Matrix->RowsLinked) spcLinkRows( Matrix ); if (Matrix->Complex) { ScaleComplexMatrix( Matrix, RHS_ScaleFactors, SolutionScaleFactors ); return; } lSize = Matrix->Size; /* Scale Rows */ pExtOrder = &Matrix->IntToExtRowMap[1]; for (I = 1; I <= lSize; I++) { if ((ScaleFactor = RHS_ScaleFactors[*(pExtOrder++)]) != 1.0) { pElement = Matrix->FirstInRow[I]; while (pElement != NULL) { pElement->Real *= ScaleFactor; pElement = pElement->NextInRow; } } } /* Scale Columns */ pExtOrder = &Matrix->IntToExtColMap[1]; for (I = 1; I <= lSize; I++) { if ((ScaleFactor = SolutionScaleFactors[*(pExtOrder++)]) != 1.0) { pElement = Matrix->FirstInCol[I]; while (pElement != NULL) { pElement->Real *= ScaleFactor; pElement = pElement->NextInCol; } } } return; } #endif /* SCALING */ #if SCALING /* * SCALE COMPLEX MATRIX * * This function scales the matrix to enhance the possibility of * finding a good pivoting order. Note that scaling enhances accuracy * of the solution only if it affects the pivoting order, so it makes * no sense to scale the matrix before spFactor(). If scaling is * desired it should be done before spOrderAndFactor(). There * are several things to take into account when choosing the scale * factors. First, the scale factors are directly multiplied against * the elements in the matrix. To prevent roundoff, each scale factor * should be equal to an integer power of the number base of the * machine. Since most machines operate in base two, scale factors * should be a power of two. Second, the matrix should be scaled such * that the matrix of element uncertainties is equilibrated. Third, * this function multiplies the scale factors by the elements, so if * one row tends to have uncertainties 1000 times smaller than the * other rows, then its scale factor should be 1024, not 1/1024. * Fourth, to save time, this function does not scale rows or columns * if their scale factors are equal to one. Thus, the scale factors * should be normalized to the most common scale factor. Rows and * columns should be normalized separately. For example, if the size * of the matrix is 100 and 10 rows tend to have uncertainties near * 1e-6 and the remaining 90 have uncertainties near 1e-12, then the * scale factor for the 10 should be 1/1,048,576 and the scale factors * for the remaining 90 should be 1. Fifth, since this routine * directly operates on the matrix, it is necessary to apply the scale * factors to the RHS and Solution vectors. It may be easier to * simply use spOrderAndFactor() on a scaled matrix to choose the * pivoting order, and then throw away the matrix. Subsequent * factorizations, performed with spFactor(), will not need to have * the RHS and Solution vectors descaled. Lastly, this function * should not be executed before the function spMNA_Preorder. * * >>> Arguments: * Matrix (char *) * Pointer to the matrix to be scaled. * SolutionScaleFactors (RealVector) * The array of Solution scale factors. These factors scale the columns. * All scale factors are real valued. * RHS_ScaleFactors (RealVector) * The array of RHS scale factors. These factors scale the rows. * All scale factors are real valued. * * >>> Local variables: * lSize (int) * Local version of the size of the matrix. * pElement (ElementPtr) * Pointer to an element in the matrix. * pExtOrder (int *) * Pointer into either IntToExtRowMap or IntToExtColMap vector. Used to * compensate for any row or column swaps that have been performed. * ScaleFactor (RealNumber) * The scale factor being used on the current row or column. */ static void ScaleComplexMatrix( Matrix, RHS_ScaleFactors, SolutionScaleFactors ) MatrixPtr Matrix; RealVector RHS_ScaleFactors, SolutionScaleFactors; { ElementPtr pElement; int I, lSize, *pExtOrder; RealNumber ScaleFactor; /* Begin `ScaleComplexMatrix'. */ lSize = Matrix->Size; /* Scale Rows */ pExtOrder = &Matrix->IntToExtRowMap[1]; for (I = 1; I <= lSize; I++) { if ((ScaleFactor = RHS_ScaleFactors[*(pExtOrder++)]) != 1.0) { pElement = Matrix->FirstInRow[I]; while (pElement != NULL) { pElement->Real *= ScaleFactor; pElement->Imag *= ScaleFactor; pElement = pElement->NextInRow; } } } /* Scale Columns */ pExtOrder = &Matrix->IntToExtColMap[1]; for (I = 1; I <= lSize; I++) { if ((ScaleFactor = SolutionScaleFactors[*(pExtOrder++)]) != 1.0) { pElement = Matrix->FirstInCol[I]; while (pElement != NULL) { pElement->Real *= ScaleFactor; pElement->Imag *= ScaleFactor; pElement = pElement->NextInCol; } } } return; } #endif /* SCALING */ #if MULTIPLICATION /* * MATRIX MULTIPLICATION * * Multiplies matrix by solution vector to find source vector. * Assumes matrix has not been factored. This routine can be used * as a test to see if solutions are correct. It should not be used * before spMNA_Preorder(). * * >>> Arguments: * Matrix (char *) * Pointer to the matrix. * RHS (RealVector) * RHS is the right hand side. This is what is being solved for. * Solution (RealVector) * Solution is the vector being multiplied by the matrix. * iRHS (RealVector) * iRHS is the imaginary portion of the right hand side. This is * what is being solved for. * iSolution (RealVector) * iSolution is the imaginary portion of the vector being multiplied * by the matrix. */ void spMultiply(MatrixPtr Matrix, RealVector RHS, RealVector Solution, RealVector iRHS, RealVector iSolution) { ElementPtr pElement; RealVector Vector; RealNumber Sum; int I, *pExtOrder; /* Begin `spMultiply'. */ assert( IS_SPARSE( Matrix ) && !Matrix->Factored ); if (!Matrix->RowsLinked) spcLinkRows(Matrix); if (!Matrix->InternalVectorsAllocated) spcCreateInternalVectors( Matrix ); if (Matrix->Complex) { ComplexMatrixMultiply( Matrix, RHS, Solution , iRHS, iSolution ); return; } /* Initialize Intermediate vector with reordered Solution vector. */ Vector = Matrix->Intermediate; pExtOrder = &Matrix->IntToExtColMap[Matrix->Size]; for (I = Matrix->Size; I > 0; I--) Vector[I] = Solution[*(pExtOrder--)]; pExtOrder = &Matrix->IntToExtRowMap[Matrix->Size]; for (I = Matrix->Size; I > 0; I--) { pElement = Matrix->FirstInRow[I]; Sum = 0.0; while (pElement != NULL) { Sum += pElement->Real * Vector[pElement->Col]; pElement = pElement->NextInRow; } RHS[*pExtOrder--] = Sum; } return; } #endif /* MULTIPLICATION */ #if MULTIPLICATION /* * COMPLEX MATRIX MULTIPLICATION * * Multiplies matrix by solution vector to find source vector. * Assumes matrix has not been factored. This routine can be used * as a test to see if solutions are correct. * * >>> Arguments: * Matrix (char *) * Pointer to the matrix. * RHS (RealVector) * RHS is the right hand side. This is what is being solved for. * Solution (RealVector) * Solution is the vector being multiplied by the matrix. * iRHS (RealVector) * iRHS is the imaginary portion of the right hand side. This is * what is being solved for. * iSolution (RealVector) * iSolution is the imaginary portion of the vector being multiplied * by the matrix. */ static void ComplexMatrixMultiply( MatrixPtr Matrix, RealVector RHS, RealVector Solution , RealVector iRHS, RealVector iSolution ) { ElementPtr pElement; ComplexVector Vector; ComplexNumber Sum; int I, *pExtOrder; /* Begin `ComplexMatrixMultiply'. */ /* Initialize Intermediate vector with reordered Solution vector. */ Vector = (ComplexVector)Matrix->Intermediate; pExtOrder = &Matrix->IntToExtColMap[Matrix->Size]; for (I = Matrix->Size; I > 0; I--) { Vector[I].Real = Solution[*pExtOrder]; Vector[I].Imag = iSolution[*(pExtOrder--)]; } pExtOrder = &Matrix->IntToExtRowMap[Matrix->Size]; for (I = Matrix->Size; I > 0; I--) { pElement = Matrix->FirstInRow[I]; Sum.Real = Sum.Imag = 0.0; while (pElement != NULL) { /* Cmplx expression : Sum += Element * Vector[Col] */ CMPLX_MULT_ADD_ASSIGN( Sum, *pElement, Vector[pElement->Col] ); pElement = pElement->NextInRow; } RHS[*pExtOrder] = Sum.Real; iRHS[*pExtOrder--] = Sum.Imag; } return; } #endif /* MULTIPLICATION */ #if MULTIPLICATION && TRANSPOSE /* * TRANSPOSED MATRIX MULTIPLICATION * * Multiplies transposed matrix by solution vector to find source vector. * Assumes matrix has not been factored. This routine can be used * as a test to see if solutions are correct. It should not be used * before spMNA_Preorder(). * * >>> Arguments: * Matrix (char *) * Pointer to the matrix. * RHS (RealVector) * RHS is the right hand side. This is what is being solved for. * Solution (RealVector) * Solution is the vector being multiplied by the matrix. * iRHS (RealVector) * iRHS is the imaginary portion of the right hand side. This is * what is being solved for. * iSolution (RealVector) * iSolution is the imaginary portion of the vector being multiplied * by the matrix. */ void spMultTransposed(MatrixPtr Matrix, RealVector RHS, RealVector Solution, RealVector iRHS, RealVector iSolution) { ElementPtr pElement; RealVector Vector; RealNumber Sum; int I, *pExtOrder; /* Begin `spMultTransposed'. */ assert( IS_SPARSE( Matrix ) && !Matrix->Factored ); if (!Matrix->InternalVectorsAllocated) spcCreateInternalVectors( Matrix ); if (Matrix->Complex) { ComplexTransposedMatrixMultiply( Matrix, RHS, Solution , iRHS, iSolution ); return; } /* Initialize Intermediate vector with reordered Solution vector. */ Vector = Matrix->Intermediate; pExtOrder = &Matrix->IntToExtRowMap[Matrix->Size]; for (I = Matrix->Size; I > 0; I--) Vector[I] = Solution[*(pExtOrder--)]; pExtOrder = &Matrix->IntToExtColMap[Matrix->Size]; for (I = Matrix->Size; I > 0; I--) { pElement = Matrix->FirstInCol[I]; Sum = 0.0; while (pElement != NULL) { Sum += pElement->Real * Vector[pElement->Row]; pElement = pElement->NextInCol; } RHS[*pExtOrder--] = Sum; } return; } #endif /* MULTIPLICATION && TRANSPOSE */ #if MULTIPLICATION && TRANSPOSE /* * COMPLEX TRANSPOSED MATRIX MULTIPLICATION * * Multiplies transposed matrix by solution vector to find source vector. * Assumes matrix has not been factored. This routine can be used * as a test to see if solutions are correct. * * >>> Arguments: * Matrix (char *) * Pointer to the matrix. * RHS (RealVector) * RHS is the right hand side. This is what is being solved for. * Solution (RealVector) * Solution is the vector being multiplied by the matrix. * iRHS (RealVector) * iRHS is the imaginary portion of the right hand side. This is * what is being solved for. * iSolution (RealVector) * iSolution is the imaginary portion of the vector being multiplied * by the matrix. */ static void ComplexTransposedMatrixMultiply( MatrixPtr Matrix, RealVector RHS, RealVector Solution , RealVector iRHS, RealVector iSolution ) { ElementPtr pElement; ComplexVector Vector; ComplexNumber Sum; int I, *pExtOrder; /* Begin `ComplexMatrixMultiply'. */ /* Initialize Intermediate vector with reordered Solution vector. */ Vector = (ComplexVector)Matrix->Intermediate; pExtOrder = &Matrix->IntToExtRowMap[Matrix->Size]; for (I = Matrix->Size; I > 0; I--) { Vector[I].Real = Solution[*pExtOrder]; Vector[I].Imag = iSolution[*(pExtOrder--)]; } pExtOrder = &Matrix->IntToExtColMap[Matrix->Size]; for (I = Matrix->Size; I > 0; I--) { pElement = Matrix->FirstInCol[I]; Sum.Real = Sum.Imag = 0.0; while (pElement != NULL) { /* Cmplx expression : Sum += Element * Vector[Row] */ CMPLX_MULT_ADD_ASSIGN( Sum, *pElement, Vector[pElement->Row] ); pElement = pElement->NextInCol; } RHS[*pExtOrder] = Sum.Real; iRHS[*pExtOrder--] = Sum.Imag; } return; } #endif /* MULTIPLICATION && TRANSPOSE */ #if DETERMINANT /* * CALCULATE DETERMINANT * * This routine in capable of calculating the determinant of the * matrix once the LU factorization has been performed. Hence, only * use this routine after spFactor() and before spClear(). * The determinant equals the product of all the diagonal elements of * the lower triangular matrix L, except that this product may need * negating. Whether the product or the negative product equals the * determinant is determined by the number of row and column * interchanges performed. Note that the determinants of matrices can * be very large or very small. On large matrices, the determinant * can be far larger or smaller than can be represented by a floating * point number. For this reason the determinant is scaled to a * reasonable value and the logarithm of the scale factor is returned. * * >>> Arguments: * Matrix (char *) * A pointer to the matrix for which the determinant is desired. * pExponent (int *) * The logarithm base 10 of the scale factor for the determinant. To find * the actual determinant, Exponent should be added to the exponent of * Determinant. * pDeterminant (RealNumber *) * The real portion of the determinant. This number is scaled to be * greater than or equal to 1.0 and less than 10.0. * piDeterminant (RealNumber *) * The imaginary portion of the determinant. When the matrix is real * this pointer need not be supplied, nothing will be returned. This * number is scaled to be greater than or equal to 1.0 and less than 10.0. * * >>> Local variables: * Norm (RealNumber) * L-infinity norm of a complex number. * Size (int) * Local storage for Matrix->Size. Placed in a for speed. * Temp (RealNumber) * Temporary storage for real portion of determinant. */ void spDeterminant(MatrixPtr Matrix, int *pExponent, RealNumber *pDeterminant, RealNumber *piDeterminant) { int I, Size; RealNumber Norm, nr, ni; ComplexNumber Pivot, cDeterminant; #define NORM(a) (nr = ABS((a).Real), ni = ABS((a).Imag), MAX (nr,ni)) /* Begin `spDeterminant'. */ assert( IS_SPARSE( Matrix ) && IS_FACTORED(Matrix) ); *pExponent = 0; if (Matrix->Error == spSINGULAR) { *pDeterminant = 0.0; if (Matrix->Complex) *piDeterminant = 0.0; return; } Size = Matrix->Size; I = 0; if (Matrix->Complex) /* Complex Case. */ { cDeterminant.Real = 1.0; cDeterminant.Imag = 0.0; while (++I <= Size) { CMPLX_RECIPROCAL( Pivot, *Matrix->Diag[I] ); CMPLX_MULT_ASSIGN( cDeterminant, Pivot ); /* Scale Determinant. */ Norm = NORM( cDeterminant ); if (Norm != 0.0) { while (Norm >= 1.0e12) { cDeterminant.Real *= 1.0e-12; cDeterminant.Imag *= 1.0e-12; *pExponent += 12; Norm = NORM( cDeterminant ); } while (Norm < 1.0e-12) { cDeterminant.Real *= 1.0e12; cDeterminant.Imag *= 1.0e12; *pExponent -= 12; Norm = NORM( cDeterminant ); } } } /* Scale Determinant again, this time to be between 1.0 <= x < 10.0. */ Norm = NORM( cDeterminant ); if (Norm != 0.0) { while (Norm >= 10.0) { cDeterminant.Real *= 0.1; cDeterminant.Imag *= 0.1; (*pExponent)++; Norm = NORM( cDeterminant ); } while (Norm < 1.0) { cDeterminant.Real *= 10.0; cDeterminant.Imag *= 10.0; (*pExponent)--; Norm = NORM( cDeterminant ); } } if (Matrix->NumberOfInterchangesIsOdd) CMPLX_NEGATE( cDeterminant ); *pDeterminant = cDeterminant.Real; *piDeterminant = cDeterminant.Imag; } else { /* Real Case. */ *pDeterminant = 1.0; while (++I <= Size) { *pDeterminant /= Matrix->Diag[I]->Real; /* Scale Determinant. */ if (*pDeterminant != 0.0) { while (ABS(*pDeterminant) >= 1.0e12) { *pDeterminant *= 1.0e-12; *pExponent += 12; } while (ABS(*pDeterminant) < 1.0e-12) { *pDeterminant *= 1.0e12; *pExponent -= 12; } } } /* Scale Determinant again, this time to be between 1.0 <= x < 10.0. */ if (*pDeterminant != 0.0) { while (ABS(*pDeterminant) >= 10.0) { *pDeterminant *= 0.1; (*pExponent)++; } while (ABS(*pDeterminant) < 1.0) { *pDeterminant *= 10.0; (*pExponent)--; } } if (Matrix->NumberOfInterchangesIsOdd) *pDeterminant = -*pDeterminant; } } #endif /* DETERMINANT */ #if STRIP /* * STRIP FILL-INS FROM MATRIX * * Strips the matrix of all fill-ins. * * >>> Arguments: * Matrix (char *) * Pointer to the matrix to be stripped. * * >>> Local variables: * pElement (ElementPtr) * Pointer that is used to step through the matrix. * ppElement (ElementPtr *) * Pointer to the location of an ElementPtr. This location will be * updated if a fill-in is stripped from the matrix. * pFillin (ElementPtr) * Pointer used to step through the lists of fill-ins while marking them. * pLastFillin (ElementPtr) * A pointer to the last fill-in in the list. Used to terminate a loop. * pListNode (struct FillinListNodeStruct *) * A pointer to a node in the FillinList linked-list. */ void spStripFills(MatrixPtr Matrix) { struct FillinListNodeStruct *pListNode; /* Begin `spStripFills'. */ assert( IS_SPARSE( Matrix ) ); if (Matrix->Fillins == 0) return; Matrix->NeedsOrdering = YES; Matrix->Elements -= Matrix->Fillins; Matrix->Fillins = 0; /* Mark the fill-ins. */ { ElementPtr pFillin, pLastFillin; pListNode = Matrix->LastFillinListNode = Matrix->FirstFillinListNode; Matrix->FillinsRemaining = pListNode->NumberOfFillinsInList; Matrix->NextAvailFillin = pListNode->pFillinList; while (pListNode != NULL) { pFillin = pListNode->pFillinList; pLastFillin = &(pFillin[ pListNode->NumberOfFillinsInList - 1 ]); while (pFillin <= pLastFillin) (pFillin++)->Row = 0; pListNode = pListNode->Next; } } /* Unlink fill-ins by searching for elements marked with Row = 0. */ { ElementPtr pElement, *ppElement; int I, Size = Matrix->Size; /* Unlink fill-ins in all columns. */ for (I = 1; I <= Size; I++) { ppElement = &(Matrix->FirstInCol[I]); while ((pElement = *ppElement) != NULL) { if (pElement->Row == 0) { *ppElement = pElement->NextInCol; /* Unlink fill-in. */ if (Matrix->Diag[pElement->Col] == pElement) Matrix->Diag[pElement->Col] = NULL; } else ppElement = &pElement->NextInCol; /* Skip element. */ } } /* Unlink fill-ins in all rows. */ for (I = 1; I <= Size; I++) { ppElement = &(Matrix->FirstInRow[I]); while ((pElement = *ppElement) != NULL) { if (pElement->Row == 0) *ppElement = pElement->NextInRow; /* Unlink fill-in. */ else ppElement = &pElement->NextInRow; /* Skip element. */ } } } return; } /* Same as above, but strips entire matrix without destroying the * frame. This assumes that the matrix will be replaced with one of * the same size. */ void spStripMatrix(MatrixPtr Matrix) { /* Begin `spStripMatrix'. */ assert( IS_SPARSE( Matrix ) ); if (Matrix->Elements == 0) return; Matrix->RowsLinked = NO; Matrix->NeedsOrdering = YES; Matrix->Elements = 0; Matrix->Originals = 0; Matrix->Fillins = 0; /* Reset the element lists. */ { struct ElementListNodeStruct *pListNode; pListNode = Matrix->LastElementListNode = Matrix->FirstElementListNode; Matrix->ElementsRemaining = pListNode->NumberOfElementsInList; Matrix->NextAvailElement = pListNode->pElementList; } /* Reset the fill-in lists. */ { struct FillinListNodeStruct *pListNode; pListNode = Matrix->LastFillinListNode = Matrix->FirstFillinListNode; Matrix->FillinsRemaining = pListNode->NumberOfFillinsInList; Matrix->NextAvailFillin = pListNode->pFillinList; } /* Reset the Row, Column and Diag pointers */ { int I, Size = Matrix->Size; for (I = 1; I <= Size; I++) { Matrix->FirstInRow[I] = NULL; Matrix->FirstInCol[I] = NULL; Matrix->Diag[I] = NULL; } } } #endif #if TRANSLATE && DELETE /* * DELETE A ROW AND COLUMN FROM THE MATRIX * * Deletes a row and a column from a matrix. * * Sparse will abort if an attempt is made to delete a row or column that * doesn't exist. * * >>> Arguments: * Matrix (char *) * Pointer to the matrix in which the row and column are to be deleted. * Row (int) * Row to be deleted. * Col (int) * Column to be deleted. * * >>> Local variables: * ExtCol (int) * The external column that is being deleted. * ExtRow (int) * The external row that is being deleted. * pElement (ElementPtr) * Pointer to an element in the matrix. Used when scanning rows and * columns in order to eliminate elements from the last row or column. * ppElement (ElementPtr *) * Pointer to the location of an ElementPtr. This location will be * filled with a NULL pointer if it is the new last element in its row * or column. * pElement (ElementPtr) * Pointer to an element in the last row or column of the matrix. * Size (int) * The local version Matrix->Size, the size of the matrix. */ void spDeleteRowAndCol(MatrixPtr Matrix, int Row, int Col) { ElementPtr pElement, *ppElement, pLastElement; int Size, ExtRow, ExtCol; ElementPtr spcFindElementInCol(); /* Begin `spDeleteRowAndCol'. */ assert( IS_SPARSE(Matrix) && Row > 0 && Col > 0 ); assert( Row <= Matrix->ExtSize && Col <= Matrix->ExtSize ); Size = Matrix->Size; ExtRow = Row; ExtCol = Col; if (!Matrix->RowsLinked) spcLinkRows( Matrix ); Row = Matrix->ExtToIntRowMap[Row]; Col = Matrix->ExtToIntColMap[Col]; assert( Row > 0 && Col > 0 ); /* Move Row so that it is the last row in the matrix. */ if (Row != Size) spcRowExchange( Matrix, Row, Size ); /* Move Col so that it is the last column in the matrix. */ if (Col != Size) spcColExchange( Matrix, Col, Size ); /* Correct Diag pointers. */ if (Row == Col) SWAP( ElementPtr, Matrix->Diag[Row], Matrix->Diag[Size] ); else { Matrix->Diag[Row] = spcFindElementInCol(Matrix, Matrix->FirstInCol+Row, Row, Row, NO ); Matrix->Diag[Col] = spcFindElementInCol(Matrix, Matrix->FirstInCol+Col, Col, Col, NO ); } /* Delete last row and column of the matrix. */ /* Break the column links to every element in the last row. */ pLastElement = Matrix->FirstInRow[ Size ]; while (pLastElement != NULL) { ppElement = &(Matrix->FirstInCol[ pLastElement->Col ]); while ((pElement = *ppElement) != NULL) { if (pElement == pLastElement) *ppElement = NULL; /* Unlink last element in column. */ else ppElement = &pElement->NextInCol; /* Skip element. */ } pLastElement = pLastElement->NextInRow; } /* Break the row links to every element in the last column. */ pLastElement = Matrix->FirstInCol[ Size ]; while (pLastElement != NULL) { ppElement = &(Matrix->FirstInRow[ pLastElement->Row ]); while ((pElement = *ppElement) != NULL) { if (pElement == pLastElement) *ppElement = NULL; /* Unlink last element in row. */ else ppElement = &pElement->NextInRow; /* Skip element. */ } pLastElement = pLastElement->NextInCol; } /* Clean up some details. */ Matrix->Size = Size - 1; Matrix->Diag[Size] = NULL; Matrix->FirstInRow[Size] = NULL; Matrix->FirstInCol[Size] = NULL; Matrix->CurrentSize--; Matrix->ExtToIntRowMap[ExtRow] = -1; Matrix->ExtToIntColMap[ExtCol] = -1; Matrix->NeedsOrdering = YES; return; } #endif #if PSEUDOCONDITION /* * CALCULATE PSEUDOCONDITION * * Computes the magnitude of the ratio of the largest to the smallest * pivots. This quantity is an indicator of ill-conditioning in the * matrix. If this ratio is large, and if the matrix is scaled such * that uncertainties in the RHS and the matrix entries are * equilibrated, then the matrix is ill-conditioned. However, a * small ratio does not necessarily imply that the matrix is * well-conditioned. This routine must only be used after a matrix * has been factored by spOrderAndFactor() or spFactor() and before * it is cleared by spClear() or spInitialize(). The pseudocondition * is faster to compute than the condition number calculated by * spCondition(), but is not as informative. * * >>> Returns: * The magnitude of the ratio of the largest to smallest pivot used during * previous factorization. If the matrix was singular, zero is returned. * * >>> Arguments: * Matrix (char *) * Pointer to the matrix. */ RealNumber spPseudoCondition(MatrixPtr Matrix) { int I; ArrayOfElementPtrs Diag; RealNumber MaxPivot, MinPivot, Mag; /* Begin `spPseudoCondition'. */ assert( IS_SPARSE(Matrix) && IS_FACTORED(Matrix) ); if (Matrix->Error == spSINGULAR || Matrix->Error == spZERO_DIAG) return 0.0; Diag = Matrix->Diag; MaxPivot = MinPivot = ELEMENT_MAG( Diag[1] ); for (I = 2; I <= Matrix->Size; I++) { Mag = ELEMENT_MAG( Diag[I] ); if (Mag > MaxPivot) MaxPivot = Mag; else if (Mag < MinPivot) MinPivot = Mag; } assert( MaxPivot > 0.0); return MaxPivot / MinPivot; } #endif #if CONDITION /* * ESTIMATE CONDITION NUMBER * * Computes an estimate of the condition number using a variation on * the LINPACK condition number estimation algorithm. This quantity * is an indicator of ill-conditioning in the matrix. To avoid * problems with overflow, the reciprocal of the condition number is * returned. If this number is small, and if the matrix is scaled * such that uncertainties in the RHS and the matrix entries are * equilibrated, then the matrix is ill-conditioned. If the this * number is near one, the matrix is well conditioned. This routine * must only be used after a matrix has been factored by * spOrderAndFactor() or spFactor() and before it is cleared by * spClear() or spInitialize(). * * Unlike the LINPACK condition number estimator, this routines * returns the L infinity condition number. This is an artifact of * Sparse placing ones on the diagonal of the upper triangular matrix * rather than the lower. This difference should be of no * importance. * * References: * A.K. Cline, C.B. Moler, G.W. Stewart, J.H. Wilkinson. An estimate * for the condition number of a matrix. SIAM Journal on Numerical * Analysis. Vol. 16, No. 2, pages 368-375, April 1979. * * J.J. Dongarra, C.B. Moler, J.R. Bunch, G.W. Stewart. LINPACK * User's Guide. SIAM, 1979. * * Roger G. Grimes, John G. Lewis. Condition number estimation for * sparse matrices. SIAM Journal on Scientific and Statistical * Computing. Vol. 2, No. 4, pages 384-388, December 1981. * * Dianne Prost O'Leary. Estimating matrix condition numbers. SIAM * Journal on Scientific and Statistical Computing. Vol. 1, No. 2, * pages 205-209, June 1980. * * >>> Returns: * The reciprocal of the condition number. If the matrix was singular, * zero is returned. * * >>> Arguments: * Matrix (char *) * Pointer to the matrix. * NormOfMatrix (RealNumber) * The L-infinity norm of the unfactored matrix as computed by * spNorm(). * pError (int *) * Used to return error code. * * >>> Possible errors: * spSINGULAR * spNO_MEMORY */ RealNumber spCondition(MatrixPtr Matrix, RealNumber NormOfMatrix, int *pError) { ElementPtr pElement; RealVector T, Tm; int I, K, Row; ElementPtr pPivot; int Size; RealNumber E, Em, Wp, Wm, ASp, ASm, ASw, ASy, ASv, ASz, MaxY, ScaleFactor; RealNumber Linpack, OLeary, InvNormOfInverse, ComplexCondition(); #define SLACK 1e4 /* Begin `spCondition'. */ assert( IS_SPARSE(Matrix) && IS_FACTORED(Matrix) ); *pError = Matrix->Error; if (Matrix->Error >= spFATAL) return 0.0; if (NormOfMatrix == 0.0) { *pError = spSINGULAR; return 0.0; } if (Matrix->Complex) return ComplexCondition( Matrix, NormOfMatrix, pError ); Size = Matrix->Size; T = Matrix->Intermediate; Tm = Matrix->Intermediate + Size; for (I = Size; I > 0; I--) T[I] = 0.0; /* * Part 1. Ay = e. * * Solve Ay = LUy = e where e consists of +1 and -1 terms with the * sign chosen to maximize the size of w in Lw = e. Since the * terms in w can get very large, scaling is used to avoid * overflow. */ /* Forward elimination. Solves Lw = e while choosing e. */ E = 1.0; for (I = 1; I <= Size; I++) { pPivot = Matrix->Diag[I]; if (T[I] < 0.0) Em = -E; else Em = E; Wm = (Em + T[I]) * pPivot->Real; if (ABS(Wm) > SLACK) { ScaleFactor = 1.0 / MAX( SQR( SLACK ), ABS(Wm) ); for (K = Size; K > 0; K--) T[K] *= ScaleFactor; E *= ScaleFactor; Em *= ScaleFactor; Wm = (Em + T[I]) * pPivot->Real; } Wp = (T[I] - Em) * pPivot->Real; ASp = ABS(T[I] - Em); ASm = ABS(Em + T[I]); /* Update T for both values of W, minus value is placed in Tm. */ pElement = pPivot->NextInCol; while (pElement != NULL) { Row = pElement->Row; Tm[Row] = T[Row] - (Wm * pElement->Real); T[Row] -= (Wp * pElement->Real); ASp += ABS(T[Row]); ASm += ABS(Tm[Row]); pElement = pElement->NextInCol; } /* If minus value causes more growth, overwrite T with its values. */ if (ASm > ASp) { T[I] = Wm; pElement = pPivot->NextInCol; while (pElement != NULL) { T[pElement->Row] = Tm[pElement->Row]; pElement = pElement->NextInCol; } } else T[I] = Wp; } /* Compute 1-norm of T, which now contains w, and scale ||T|| to 1/SLACK. */ for (ASw = 0.0, I = Size; I > 0; I--) ASw += ABS(T[I]); ScaleFactor = 1.0 / (SLACK * ASw); if (ScaleFactor < 0.5) { for (I = Size; I > 0; I--) T[I] *= ScaleFactor; E *= ScaleFactor; } /* Backward Substitution. Solves Uy = w.*/ for (I = Size; I >= 1; I--) { pElement = Matrix->Diag[I]->NextInRow; while (pElement != NULL) { T[I] -= pElement->Real * T[pElement->Col]; pElement = pElement->NextInRow; } if (ABS(T[I]) > SLACK) { ScaleFactor = 1.0 / MAX( SQR( SLACK ), ABS(T[I]) ); for (K = Size; K > 0; K--) T[K] *= ScaleFactor; E *= ScaleFactor; } } /* Compute 1-norm of T, which now contains y, and scale ||T|| to 1/SLACK. */ for (ASy = 0.0, I = Size; I > 0; I--) ASy += ABS(T[I]); ScaleFactor = 1.0 / (SLACK * ASy); if (ScaleFactor < 0.5) { for (I = Size; I > 0; I--) T[I] *= ScaleFactor; ASy = 1.0 / SLACK; E *= ScaleFactor; } /* Compute infinity-norm of T for O'Leary's estimate. */ for (MaxY = 0.0, I = Size; I > 0; I--) if (MaxY < ABS(T[I])) MaxY = ABS(T[I]); /* * Part 2. * * A* z = y where the * represents the transpose. Recall that A = * LU implies A* = U* L*. */ /* Forward elimination, U* v = y. */ for (I = 1; I <= Size; I++) { pElement = Matrix->Diag[I]->NextInRow; while (pElement != NULL) { T[pElement->Col] -= T[I] * pElement->Real; pElement = pElement->NextInRow; } if (ABS(T[I]) > SLACK) { ScaleFactor = 1.0 / MAX( SQR( SLACK ), ABS(T[I]) ); for (K = Size; K > 0; K--) T[K] *= ScaleFactor; ASy *= ScaleFactor; } } /* Compute 1-norm of T, which now contains v, and scale ||T|| to 1/SLACK. */ for (ASv = 0.0, I = Size; I > 0; I--) ASv += ABS(T[I]); ScaleFactor = 1.0 / (SLACK * ASv); if (ScaleFactor < 0.5) { for (I = Size; I > 0; I--) T[I] *= ScaleFactor; ASy *= ScaleFactor; } /* Backward Substitution, L* z = v. */ for (I = Size; I >= 1; I--) { pPivot = Matrix->Diag[I]; pElement = pPivot->NextInCol; while (pElement != NULL) { T[I] -= pElement->Real * T[pElement->Row]; pElement = pElement->NextInCol; } T[I] *= pPivot->Real; if (ABS(T[I]) > SLACK) { ScaleFactor = 1.0 / MAX( SQR( SLACK ), ABS(T[I]) ); for (K = Size; K > 0; K--) T[K] *= ScaleFactor; ASy *= ScaleFactor; } } /* Compute 1-norm of T, which now contains z. */ for (ASz = 0.0, I = Size; I > 0; I--) ASz += ABS(T[I]); Linpack = ASy / ASz; OLeary = E / MaxY; InvNormOfInverse = MIN( Linpack, OLeary ); return InvNormOfInverse / NormOfMatrix; } /* * ESTIMATE CONDITION NUMBER * * Complex version of spCondition(). * * >>> Returns: * The reciprocal of the condition number. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to the matrix. * NormOfMatrix (RealNumber) * The L-infinity norm of the unfactored matrix as computed by * spNorm(). * pError (int *) * Used to return error code. * * >>> Possible errors: * spNO_MEMORY */ static RealNumber ComplexCondition( Matrix, NormOfMatrix, pError ) MatrixPtr Matrix; RealNumber NormOfMatrix; int *pError; { ElementPtr pElement; ComplexVector T, Tm; int I, K, Row; ElementPtr pPivot; int Size; RealNumber E, Em, ASp, ASm, ASw, ASy, ASv, ASz, MaxY, ScaleFactor; RealNumber Linpack, OLeary, InvNormOfInverse; ComplexNumber Wp, Wm; /* Begin `ComplexCondition'. */ Size = Matrix->Size; T = (ComplexVector)Matrix->Intermediate; Tm = SP_MALLOC( ComplexNumber, Size+1 ); if (Tm == NULL) { *pError = spNO_MEMORY; return 0.0; } for (I = Size; I > 0; I--) T[I].Real = T[I].Imag = 0.0; /* * Part 1. Ay = e. * * Solve Ay = LUy = e where e consists of +1 and -1 terms with the * sign chosen to maximize the size of w in Lw = e. Since the * terms in w can get very large, scaling is used to avoid * overflow. */ /* Forward elimination. Solves Lw = e while choosing e. */ E = 1.0; for (I = 1; I <= Size; I++) { pPivot = Matrix->Diag[I]; if (T[I].Real < 0.0) Em = -E; else Em = E; Wm = T[I]; Wm.Real += Em; ASm = CMPLX_1_NORM( Wm ); CMPLX_MULT_ASSIGN( Wm, *pPivot ); if (CMPLX_1_NORM(Wm) > SLACK) { ScaleFactor = 1.0 / MAX( SQR( SLACK ), CMPLX_1_NORM(Wm) ); for (K = Size; K > 0; K--) SCLR_MULT_ASSIGN( T[K], ScaleFactor ); E *= ScaleFactor; Em *= ScaleFactor; ASm *= ScaleFactor; SCLR_MULT_ASSIGN( Wm, ScaleFactor ); } Wp = T[I]; Wp.Real -= Em; ASp = CMPLX_1_NORM( Wp ); CMPLX_MULT_ASSIGN( Wp, *pPivot ); /* Update T for both values of W, minus value is placed in Tm. */ pElement = pPivot->NextInCol; while (pElement != NULL) { Row = pElement->Row; /* Cmplx expr: Tm[Row] = T[Row] - (Wp * *pElement). */ CMPLX_MULT_SUBT( Tm[Row], Wm, *pElement, T[Row] ); /* Cmplx expr: T[Row] -= Wp * *pElement. */ CMPLX_MULT_SUBT_ASSIGN( T[Row], Wm, *pElement ); ASp += CMPLX_1_NORM(T[Row]); ASm += CMPLX_1_NORM(Tm[Row]); pElement = pElement->NextInCol; } /* If minus value causes more growth, overwrite T with its values. */ if (ASm > ASp) { T[I] = Wm; pElement = pPivot->NextInCol; while (pElement != NULL) { T[pElement->Row] = Tm[pElement->Row]; pElement = pElement->NextInCol; } } else T[I] = Wp; } /* Compute 1-norm of T, which now contains w, and scale ||T|| to 1/SLACK. */ for (ASw = 0.0, I = Size; I > 0; I--) ASw += CMPLX_1_NORM(T[I]); ScaleFactor = 1.0 / (SLACK * ASw); if (ScaleFactor < 0.5) { for (I = Size; I > 0; I--) SCLR_MULT_ASSIGN( T[I], ScaleFactor ); E *= ScaleFactor; } /* Backward Substitution. Solves Uy = w.*/ for (I = Size; I >= 1; I--) { pElement = Matrix->Diag[I]->NextInRow; while (pElement != NULL) { /* Cmplx expr: T[I] -= T[pElement->Col] * *pElement. */ CMPLX_MULT_SUBT_ASSIGN( T[I], T[pElement->Col], *pElement ); pElement = pElement->NextInRow; } if (CMPLX_1_NORM(T[I]) > SLACK) { ScaleFactor = 1.0 / MAX( SQR( SLACK ), CMPLX_1_NORM(T[I]) ); for (K = Size; K > 0; K--) SCLR_MULT_ASSIGN( T[K], ScaleFactor ); E *= ScaleFactor; } } /* Compute 1-norm of T, which now contains y, and scale ||T|| to 1/SLACK. */ for (ASy = 0.0, I = Size; I > 0; I--) ASy += CMPLX_1_NORM(T[I]); ScaleFactor = 1.0 / (SLACK * ASy); if (ScaleFactor < 0.5) { for (I = Size; I > 0; I--) SCLR_MULT_ASSIGN( T[I], ScaleFactor ); ASy = 1.0 / SLACK; E *= ScaleFactor; } /* Compute infinity-norm of T for O'Leary's estimate. */ for (MaxY = 0.0, I = Size; I > 0; I--) if (MaxY < CMPLX_1_NORM(T[I])) MaxY = CMPLX_1_NORM(T[I]); /* Part 2. A* z = y where the * represents the transpose. Recall * that A = LU implies A* = U* L*. */ /* Forward elimination, U* v = y. */ for (I = 1; I <= Size; I++) { pElement = Matrix->Diag[I]->NextInRow; while (pElement != NULL) { /* Cmplx expr: T[pElement->Col] -= T[I] * *pElement. */ CMPLX_MULT_SUBT_ASSIGN( T[pElement->Col], T[I], *pElement ); pElement = pElement->NextInRow; } if (CMPLX_1_NORM(T[I]) > SLACK) { ScaleFactor = 1.0 / MAX( SQR( SLACK ), CMPLX_1_NORM(T[I]) ); for (K = Size; K > 0; K--) SCLR_MULT_ASSIGN( T[K], ScaleFactor ); ASy *= ScaleFactor; } } /* Compute 1-norm of T, which now contains v, and scale ||T|| to 1/SLACK. */ for (ASv = 0.0, I = Size; I > 0; I--) ASv += CMPLX_1_NORM(T[I]); ScaleFactor = 1.0 / (SLACK * ASv); if (ScaleFactor < 0.5) { for (I = Size; I > 0; I--) SCLR_MULT_ASSIGN( T[I], ScaleFactor ); ASy *= ScaleFactor; } /* Backward Substitution, L* z = v. */ for (I = Size; I >= 1; I--) { pPivot = Matrix->Diag[I]; pElement = pPivot->NextInCol; while (pElement != NULL) { /* Cmplx expr: T[I] -= T[pElement->Row] * *pElement. */ CMPLX_MULT_SUBT_ASSIGN( T[I], T[pElement->Row], *pElement ); pElement = pElement->NextInCol; } CMPLX_MULT_ASSIGN( T[I], *pPivot ); if (CMPLX_1_NORM(T[I]) > SLACK) { ScaleFactor = 1.0 / MAX( SQR( SLACK ), CMPLX_1_NORM(T[I]) ); for (K = Size; K > 0; K--) SCLR_MULT_ASSIGN( T[K], ScaleFactor ); ASy *= ScaleFactor; } } /* Compute 1-norm of T, which now contains z. */ for (ASz = 0.0, I = Size; I > 0; I--) ASz += CMPLX_1_NORM(T[I]); SP_FREE( Tm ); Linpack = ASy / ASz; OLeary = E / MaxY; InvNormOfInverse = MIN( Linpack, OLeary ); return InvNormOfInverse / NormOfMatrix; } /* * L-INFINITY MATRIX NORM * * Computes the L-infinity norm of an unfactored matrix. It is a fatal * error to pass this routine a factored matrix. * * One difficulty is that the rows may not be linked. * * >>> Returns: * The largest absolute row sum of matrix. * * >>> Arguments: * Matrix (char *) * Pointer to the matrix. */ RealNumber spNorm(MatrixPtr Matrix) { ElementPtr pElement; int I; RealNumber Max = 0.0, AbsRowSum; /* Begin `spNorm'. */ assert( IS_SPARSE(Matrix) && !IS_FACTORED(Matrix) ); if (!Matrix->RowsLinked) spcLinkRows( Matrix ); /* Compute row sums. */ if (!Matrix->Complex) { for (I = Matrix->Size; I > 0; I--) { pElement = Matrix->FirstInRow[I]; AbsRowSum = 0.0; while (pElement != NULL) { AbsRowSum += ABS( pElement->Real ); pElement = pElement->NextInRow; } if (Max < AbsRowSum) Max = AbsRowSum; } } else { for (I = Matrix->Size; I > 0; I--) { pElement = Matrix->FirstInRow[I]; AbsRowSum = 0.0; while (pElement != NULL) { AbsRowSum += CMPLX_1_NORM( *pElement ); pElement = pElement->NextInRow; } if (Max < AbsRowSum) Max = AbsRowSum; } } return Max; } #endif /* CONDITION */ #if STABILITY /* * STABILITY OF FACTORIZATION * * The following routines are used to gauge the stability of a * factorization. If the factorization is determined to be too * unstable, then the matrix should be reordered. The routines * compute quantities that are needed in the computation of a bound * on the error attributed to any one element in the matrix during * the factorization. In other words, there is a matrix E = [e_ij] * of error terms such that A+E = LU. This routine finds a bound on * |e_ij|. Erisman & Reid [1] showed that |e_ij| < 3.01 u rho m_ij, * where u is the machine rounding unit, rho = max a_ij where the max * is taken over every row i, column j, and step k, and m_ij is the * number of multiplications required in the computation of l_ij if i * > j or u_ij otherwise. Barlow [2] showed that rho < max_i || l_i * ||_p max_j || u_j ||_q where 1/p + 1/q = 1. * * The first routine finds the magnitude on the largest element in * the matrix. If the matrix has not yet been factored, the largest * element is found by direct search. If the matrix is factored, a * bound on the largest element in any of the reduced submatrices is * computed using Barlow with p = oo and q = 1. The ratio of these * two numbers is the growth, which can be used to determine if the * pivoting order is adequate. A large growth implies that * considerable error has been made in the factorization and that it * is probably a good idea to reorder the matrix. If a large growth * in encountered after using spFactor(), reconstruct the matrix and * refactor using spOrderAndFactor(). If a large growth is * encountered after using spOrderAndFactor(), refactor using * spOrderAndFactor() with the pivot threshold increased, say to 0.1. * * Using only the size of the matrix as an upper bound on m_ij and * Barlow's bound, the user can estimate the size of the matrix error * terms e_ij using the bound of Erisman and Reid. The second * routine computes a tighter bound (with more work) based on work by * Gear [3], |e_ij| < 1.01 u rho (t c^3 + (1 + t)c^2) where t is the * threshold and c is the maximum number of off-diagonal elements in * any row of L. The expensive part of computing this bound is * determining the maximum number of off-diagonals in L, which * changes only when the order of the matrix changes. This number is * computed and saved, and only recomputed if the matrix is * reordered. * * [1] A. M. Erisman, J. K. Reid. Monitoring the stability of the * triangular factorization of a sparse matrix. Numerische * Mathematik. Vol. 22, No. 3, 1974, pp 183-186. * * [2] J. L. Barlow. A note on monitoring the stability of triangular * decomposition of sparse matrices. "SIAM Journal of Scientific * and Statistical Computing." Vol. 7, No. 1, January 1986, pp 166-168. * * [3] I. S. Duff, A. M. Erisman, J. K. Reid. "Direct Methods for Sparse * Matrices." Oxford 1986. pp 99. */ /* * LARGEST ELEMENT IN MATRIX * * >>> Returns: * If matrix is not factored, returns the magnitude of the largest element in * the matrix. If the matrix is factored, a bound on the magnitude of the * largest element in any of the reduced submatrices is returned. * * >>> Arguments: * Matrix (char *) * Pointer to the matrix. */ RealNumber spLargestElement(MatrixPtr Matrix) { int I; RealNumber Mag, AbsColSum, Max = 0.0, MaxRow = 0.0, MaxCol = 0.0; RealNumber Pivot; ComplexNumber cPivot; ElementPtr pElement, pDiag; /* Begin `spLargestElement'. */ assert( IS_SPARSE(Matrix) ); if (Matrix->Factored && !Matrix->Complex) { if (Matrix->Error == spSINGULAR) return 0.0; /* Find the bound on the size of the largest element over all factorization. */ for (I = 1; I <= Matrix->Size; I++) { pDiag = Matrix->Diag[I]; /* Lower triangular matrix. */ Pivot = 1.0 / pDiag->Real; Mag = ABS( Pivot ); if (Mag > MaxRow) MaxRow = Mag; pElement = Matrix->FirstInRow[I]; while (pElement != pDiag) { Mag = ABS( pElement->Real ); if (Mag > MaxRow) MaxRow = Mag; pElement = pElement->NextInRow; } /* Upper triangular matrix. */ pElement = Matrix->FirstInCol[I]; AbsColSum = 1.0; /* Diagonal of U is unity. */ while (pElement != pDiag) { AbsColSum += ABS( pElement->Real ); pElement = pElement->NextInCol; } if (AbsColSum > MaxCol) MaxCol = AbsColSum; } } else if (!Matrix->Complex) { for (I = 1; I <= Matrix->Size; I++) { pElement = Matrix->FirstInCol[I]; while (pElement != NULL) { Mag = ABS( pElement->Real ); if (Mag > Max) Max = Mag; pElement = pElement->NextInCol; } } return Max; } if (Matrix->Factored && Matrix->Complex) { if (Matrix->Error == spSINGULAR) return 0.0; /* Find the bound on the size of the largest element over all factorization. */ for (I = 1; I <= Matrix->Size; I++) { pDiag = Matrix->Diag[I]; /* Lower triangular matrix. */ CMPLX_RECIPROCAL( cPivot, *pDiag ); Mag = CMPLX_1_NORM( cPivot ); if (Mag > MaxRow) MaxRow = Mag; pElement = Matrix->FirstInRow[I]; while (pElement != pDiag) { Mag = CMPLX_1_NORM( *pElement ); if (Mag > MaxRow) MaxRow = Mag; pElement = pElement->NextInRow; } /* Upper triangular matrix. */ pElement = Matrix->FirstInCol[I]; AbsColSum = 1.0; /* Diagonal of U is unity. */ while (pElement != pDiag) { AbsColSum += CMPLX_1_NORM( *pElement ); pElement = pElement->NextInCol; } if (AbsColSum > MaxCol) MaxCol = AbsColSum; } } else if (Matrix->Complex) { for (I = 1; I <= Matrix->Size; I++) { pElement = Matrix->FirstInCol[I]; while (pElement != NULL) { Mag = CMPLX_1_NORM( *pElement ); if (Mag > Max) Max = Mag; pElement = pElement->NextInCol; } } return Max; } return MaxRow * MaxCol; } /* * MATRIX ROUNDOFF ERROR * * >>> Returns: * Returns a bound on the magnitude of the largest element in E = A - LU. * * >>> Arguments: * Matrix (char *) * Pointer to the matrix. * Rho (RealNumber) * The bound on the magnitude of the largest element in any of the * reduced submatrices. This is the number computed by the function * spLargestElement() when given a factored matrix. If this number is * negative, the bound will be computed automatically. */ RealNumber spRoundoff(MatrixPtr Matrix, RealNumber Rho) { ElementPtr pElement; int Count, I, MaxCount = 0; RealNumber Reid, Gear; /* Begin `spRoundoff'. */ assert( IS_SPARSE(Matrix) && IS_FACTORED(Matrix) ); /* Compute Barlow's bound if it is not given. */ if (Rho < 0.0) Rho = spLargestElement( Matrix ); /* Find the maximum number of off-diagonals in L if not previously computed. */ if (Matrix->MaxRowCountInLowerTri < 0) { for (I = Matrix->Size; I > 0; I--) { pElement = Matrix->FirstInRow[I]; Count = 0; while (pElement->Col < I) { Count++; pElement = pElement->NextInRow; } if (Count > MaxCount) MaxCount = Count; } Matrix->MaxRowCountInLowerTri = MaxCount; } else MaxCount = Matrix->MaxRowCountInLowerTri; /* Compute error bound. */ Gear = 1.01*((MaxCount + 1) * Matrix->RelThreshold + 1.0) * SQR(MaxCount); Reid = 3.01 * Matrix->Size; if (Gear < Reid) return (MACHINE_RESOLUTION * Rho * Gear); else return (MACHINE_RESOLUTION * Rho * Reid); } #endif #if DOCUMENTATION /* * SPARSE ERROR MESSAGE * * This routine prints a short message to a stream describing the error * error state of sparse. No message is produced if there is no error. * * >>> Arguments: * Matrix (char *) * Matrix for which the error message is to be printed. * Stream (FILE *) * Stream to which the error message is to be printed. * Originator (char *) * Name of originator of error message. If NULL, `sparse' is used. * If zero-length string, no originator is printed. */ void spErrorMessage(MatrixPtr Matrix, FILE *Stream, char *Originator) { int Row, Col, Error; /* Begin `spErrorMessage'. */ if (Matrix == NULL) Error = spNO_MEMORY; else { assert(Matrix->ID == SPARSE_ID); Error = Matrix->Error; } if (Error == spOKAY) return; if (Originator == NULL) Originator = "sparse"; if (Originator[0] != '\0') fprintf( Stream, "%s: ", Originator); if (Error >= spFATAL) fprintf( Stream, "fatal error, "); else fprintf( Stream, "warning, "); /* Print particular error message. Do not use switch statement * because error codes may not be unique. */ if (Error == spPANIC) fprintf( Stream, "Sparse called improperly.\n"); else if (Error == spNO_MEMORY) fprintf( Stream, "insufficient memory available.\n"); else if (Error == spSINGULAR) { spWhereSingular( Matrix, &Row, &Col ); fprintf( Stream, "singular matrix detected at row %d and column %d.\n", Row, Col); } else if (Error == spZERO_DIAG) { spWhereSingular( Matrix, &Row, &Col ); fprintf( Stream, "zero diagonal detected at row %d and column %d.\n", Row, Col); } else if (Error == spSMALL_PIVOT) { fprintf( Stream, "unable to find a pivot that is larger than absolute threshold.\n"); } else { abort(); } return; } #endif /* DOCUMENTATION */ tmpk8ny_4pz/src/maths/sparse/spdefs.h0000644000175000017500000007650213546075722020027 0ustar carstencarsten#ifndef ngspice_SPDEFS_H #define ngspice_SPDEFS_H /* * DATA STRUCTURE AND MACRO DEFINITIONS for Sparse. * * Author: Advising professor: * Kenneth S. Kundert Alberto Sangiovanni-Vincentelli * UC Berkeley * * This file contains common type definitions and macros for the sparse * matrix routines. These definitions are of no interest to the user. */ /* * Revision and copyright information. * * Copyright (c) 1985,86,87,88,89,90 * by Kenneth S. Kundert and the University of California. * * Permission to use, copy, modify, and distribute this software and * its documentation for any purpose and without fee is hereby granted, * provided that the copyright notices appear in all copies and * supporting documentation and that the authors and the University of * California are properly credited. The authors and the University of * California make no representations as to the suitability of this * software for any purpose. It is provided `as is', without express * or implied warranty. */ /* * IMPORTS */ #include #undef ABORT #undef FREE /* * MACRO DEFINITIONS * * Macros are distinguished by using solely capital letters in their * identifiers. This contrasts with C defined identifiers which are * strictly lower case, and program variable and procedure names * which use both upper and lower case. */ /* Begin macros. */ /* Boolean data type */ #define BOOLEAN int #define NO 0 #define YES 1 #define SPARSE_ID 0x772773 /* Arbitrary (is Sparse on phone). */ #define IS_SPARSE(matrix) ((matrix) != NULL && \ (matrix)->ID == SPARSE_ID) #define IS_VALID(matrix) ((matrix) != NULL && \ (matrix)->ID == SPARSE_ID && \ (matrix)->Error >= spOKAY && \ (matrix)->Error < spFATAL) #define IS_FACTORED(matrix) ((matrix)->Factored && !(matrix)->NeedsOrdering) /* Macro commands */ /* Macro functions that return the maximum or minimum independent of type. */ #define MAX(a,b) ((a) > (b) ? (a) : (b)) #define MIN(a,b) ((a) < (b) ? (a) : (b)) /* Macro function that returns the absolute value of a floating point number. */ #define ABS(a) ((a) < 0 ? -(a) : (a)) /* Macro function that returns the square of a number. */ #define SQR(a) ((a)*(a)) /* Macro procedure that swaps two entities. */ #define SWAP(type, a, b) \ do { \ type SWAP_macro_local = a; \ a = b; \ b = SWAP_macro_local; \ } while(0) /* Real and Complex numbers definition */ #define spREAL double /* Begin `realNumber'. */ typedef spREAL RealNumber, *RealVector; /* Begin `ComplexNumber'. */ typedef struct { RealNumber Real; RealNumber Imag; } ComplexNumber, *ComplexVector; /* Macro function that returns the approx absolute value of a complex number. */ #define ELEMENT_MAG(ptr) (ABS((ptr)->Real) + ABS((ptr)->Imag)) #define CMPLX_ASSIGN_VALUE(cnum, vReal, vImag) \ { (cnum).Real = vReal; \ (cnum).Imag = vImag; \ } /* Complex assignment statements. */ #define CMPLX_ASSIGN(to,from) \ { (to).Real = (from).Real; \ (to).Imag = (from).Imag; \ } #define CMPLX_CONJ_ASSIGN(to,from) \ { (to).Real = (from).Real; \ (to).Imag = -(from).Imag; \ } #define CMPLX_NEGATE_ASSIGN(to,from) \ { (to).Real = -(from).Real; \ (to).Imag = -(from).Imag; \ } #define CMPLX_CONJ_NEGATE_ASSIGN(to,from) \ { (to).Real = -(from).Real; \ (to).Imag = (from).Imag; \ } #define CMPLX_CONJ(a) (a).Imag = -(a).Imag #define CONJUGATE(a) (a).Imag = -(a).Imag #define CMPLX_NEGATE(a) \ { (a).Real = -(a).Real; \ (a).Imag = -(a).Imag; \ } #define CMPLX_NEGATE_SELF(cnum) \ { (cnum).Real = -(cnum).Real; \ (cnum).Imag = -(cnum).Imag; \ } /* Macro that returns the approx magnitude (L-1 norm) of a complex number. */ #define CMPLX_1_NORM(a) (ABS((a).Real) + ABS((a).Imag)) /* Macro that returns the approx magnitude (L-infinity norm) of a complex. */ #define CMPLX_INF_NORM(a) (MAX (ABS((a).Real),ABS((a).Imag))) /* Macro function that returns the magnitude (L-2 norm) of a complex number. */ #define CMPLX_2_NORM(a) (hypot((a).Real, (a).Imag)) /* Macro function that performs complex addition. */ #define CMPLX_ADD(to,from_a,from_b) \ { (to).Real = (from_a).Real + (from_b).Real; \ (to).Imag = (from_a).Imag + (from_b).Imag; \ } /* Macro function that performs addition of a complex and a scalar. */ #define CMPLX_ADD_SELF_SCALAR(cnum, scalar) \ { (cnum).Real += scalar; \ } /* Macro function that performs complex subtraction. */ #define CMPLX_SUBT(to,from_a,from_b) \ { (to).Real = (from_a).Real - (from_b).Real; \ (to).Imag = (from_a).Imag - (from_b).Imag; \ } /* Macro function that is equivalent to += operator for complex numbers. */ #define CMPLX_ADD_ASSIGN(to,from) \ { (to).Real += (from).Real; \ (to).Imag += (from).Imag; \ } /* Macro function that is equivalent to -= operator for complex numbers. */ #define CMPLX_SUBT_ASSIGN(to,from) \ { (to).Real -= (from).Real; \ (to).Imag -= (from).Imag; \ } /* Macro function that multiplies a complex number by a scalar. */ #define SCLR_MULT(to,sclr,cmplx) \ { (to).Real = (sclr) * (cmplx).Real; \ (to).Imag = (sclr) * (cmplx).Imag; \ } /* Macro function that multiply-assigns a complex number by a scalar. */ #define SCLR_MULT_ASSIGN(to,sclr) \ { (to).Real *= (sclr); \ (to).Imag *= (sclr); \ } /* Macro function that multiplies two complex numbers. */ #define CMPLX_MULT(to,from_a,from_b) \ { (to).Real = (from_a).Real * (from_b).Real - \ (from_a).Imag * (from_b).Imag; \ (to).Imag = (from_a).Real * (from_b).Imag + \ (from_a).Imag * (from_b).Real; \ } /* Macro function that multiplies a complex number and a scalar. */ #define CMPLX_MULT_SCALAR(to,from, scalar) \ { (to).Real = (from).Real * scalar; \ (to).Imag = (from).Imag * scalar; \ } /* Macro function that implements *= for a complex and a scalar number. */ #define CMPLX_MULT_SELF_SCALAR(cnum, scalar) \ { (cnum).Real *= scalar; \ (cnum).Imag *= scalar; \ } /* Macro function that multiply-assigns a complex number by a scalar. */ #define SCLR_MULT_ASSIGN(to,sclr) \ { (to).Real *= (sclr); \ (to).Imag *= (sclr); \ } /* Macro function that implements to *= from for complex numbers. */ #define CMPLX_MULT_ASSIGN(to,from) \ { RealNumber to_Real_ = (to).Real; \ (to).Real = to_Real_ * (from).Real - \ (to).Imag * (from).Imag; \ (to).Imag = to_Real_ * (from).Imag + \ (to).Imag * (from).Real; \ } /* Macro function that multiplies two complex numbers, the first of which is * conjugated. */ #define CMPLX_CONJ_MULT(to,from_a,from_b) \ { (to).Real = (from_a).Real * (from_b).Real + \ (from_a).Imag * (from_b).Imag; \ (to).Imag = (from_a).Real * (from_b).Imag - \ (from_a).Imag * (from_b).Real; \ } /* Macro function that multiplies two complex numbers and then adds them * to another. to = add + mult_a * mult_b */ #define CMPLX_MULT_ADD(to,mult_a,mult_b,add) \ { (to).Real = (mult_a).Real * (mult_b).Real - \ (mult_a).Imag * (mult_b).Imag + (add).Real; \ (to).Imag = (mult_a).Real * (mult_b).Imag + \ (mult_a).Imag * (mult_b).Real + (add).Imag; \ } /* Macro function that subtracts the product of two complex numbers from * another. to = subt - mult_a * mult_b */ #define CMPLX_MULT_SUBT(to,mult_a,mult_b,subt) \ { (to).Real = (subt).Real - (mult_a).Real * (mult_b).Real + \ (mult_a).Imag * (mult_b).Imag; \ (to).Imag = (subt).Imag - (mult_a).Real * (mult_b).Imag - \ (mult_a).Imag * (mult_b).Real; \ } /* Macro function that multiplies two complex numbers and then adds them * to another. to = add + mult_a* * mult_b where mult_a* represents mult_a * conjugate. */ #define CMPLX_CONJ_MULT_ADD(to,mult_a,mult_b,add) \ { (to).Real = (mult_a).Real * (mult_b).Real + \ (mult_a).Imag * (mult_b).Imag + (add).Real; \ (to).Imag = (mult_a).Real * (mult_b).Imag - \ (mult_a).Imag * (mult_b).Real + (add).Imag; \ } /* Macro function that multiplies two complex numbers and then adds them * to another. to += mult_a * mult_b */ #define CMPLX_MULT_ADD_ASSIGN(to,from_a,from_b) \ { (to).Real += (from_a).Real * (from_b).Real - \ (from_a).Imag * (from_b).Imag; \ (to).Imag += (from_a).Real * (from_b).Imag + \ (from_a).Imag * (from_b).Real; \ } /* Macro function that multiplies two complex numbers and then subtracts them * from another. */ #define CMPLX_MULT_SUBT_ASSIGN(to,from_a,from_b) \ { (to).Real -= (from_a).Real * (from_b).Real - \ (from_a).Imag * (from_b).Imag; \ (to).Imag -= (from_a).Real * (from_b).Imag + \ (from_a).Imag * (from_b).Real; \ } /* Macro function that multiplies two complex numbers and then adds them * to the destination. to += from_a* * from_b where from_a* represents from_a * conjugate. */ #define CMPLX_CONJ_MULT_ADD_ASSIGN(to,from_a,from_b) \ { (to).Real += (from_a).Real * (from_b).Real + \ (from_a).Imag * (from_b).Imag; \ (to).Imag += (from_a).Real * (from_b).Imag - \ (from_a).Imag * (from_b).Real; \ } /* Macro function that multiplies two complex numbers and then subtracts them * from the destination. to -= from_a* * from_b where from_a* represents from_a * conjugate. */ #define CMPLX_CONJ_MULT_SUBT_ASSIGN(to,from_a,from_b) \ { (to).Real -= (from_a).Real * (from_b).Real + \ (from_a).Imag * (from_b).Imag; \ (to).Imag -= (from_a).Real * (from_b).Imag - \ (from_a).Imag * (from_b).Real; \ } /* * Macro functions that provide complex division. */ /* Complex division: to = num / den */ #define CMPLX_DIV(to,num,den) \ { RealNumber r_, s_; \ if (((den).Real >= (den).Imag && (den).Real > -(den).Imag) || \ ((den).Real < (den).Imag && (den).Real <= -(den).Imag)) \ { r_ = (den).Imag / (den).Real; \ s_ = (den).Real + r_*(den).Imag; \ (to).Real = ((num).Real + r_*(num).Imag)/s_; \ (to).Imag = ((num).Imag - r_*(num).Real)/s_; \ } \ else \ { r_ = (den).Real / (den).Imag; \ s_ = (den).Imag + r_*(den).Real; \ (to).Real = (r_*(num).Real + (num).Imag)/s_; \ (to).Imag = (r_*(num).Imag - (num).Real)/s_; \ } \ } /* Complex division and assignment: num /= den */ #define CMPLX_DIV_ASSIGN(num,den) \ { RealNumber r_, s_, t_; \ if (((den).Real >= (den).Imag && (den).Real > -(den).Imag) || \ ((den).Real < (den).Imag && (den).Real <= -(den).Imag)) \ { r_ = (den).Imag / (den).Real; \ s_ = (den).Real + r_*(den).Imag; \ t_ = ((num).Real + r_*(num).Imag)/s_; \ (num).Imag = ((num).Imag - r_*(num).Real)/s_; \ (num).Real = t_; \ } \ else \ { r_ = (den).Real / (den).Imag; \ s_ = (den).Imag + r_*(den).Real; \ t_ = (r_*(num).Real + (num).Imag)/s_; \ (num).Imag = (r_*(num).Imag - (num).Real)/s_; \ (num).Real = t_; \ } \ } /* Complex reciprocation: to = 1.0 / den */ #define CMPLX_RECIPROCAL(to,den) \ { RealNumber r_; \ if (((den).Real >= (den).Imag && (den).Real > -(den).Imag) || \ ((den).Real < (den).Imag && (den).Real <= -(den).Imag)) \ { r_ = (den).Imag / (den).Real; \ (to).Imag = -r_*((to).Real = 1.0/((den).Real + r_*(den).Imag)); \ } \ else \ { r_ = (den).Real / (den).Imag; \ (to).Real = -r_*((to).Imag = -1.0/((den).Imag + r_*(den).Real));\ } \ } /* Allocation */ extern void * tmalloc(size_t); extern void txfree(const void *); extern void * trealloc(const void *, size_t); #define SP_MALLOC(type,number) (type *) tmalloc((size_t)(number) * sizeof(type)) #define SP_REALLOC(ptr,type,number) \ ptr = (type *) trealloc(ptr, (size_t)(number) * sizeof(type)) #define SP_FREE(ptr) { if ((ptr) != NULL) txfree(ptr); (ptr) = NULL; } #include "ngspice/config.h" /* A new calloc */ #ifndef HAVE_LIBGC #define SP_CALLOC(ptr,type,number) \ { ptr = (type *) calloc((size_t)(number), sizeof(type)); \ } #else /* HAVE_LIBCG */ #define SP_CALLOC(ptr,type,number) \ { ptr = (type *) tmalloc((size_t)(number) * sizeof(type)); \ } #include #define tmalloc(m) GC_malloc(m) #define trealloc(m, n) GC_realloc((m), (n)) #define tfree(m) #define txfree(m) #endif #include "ngspice/defines.h" /* * MATRIX ELEMENT DATA STRUCTURE * * Every nonzero element in the matrix is stored in a dynamically allocated * MatrixElement structure. These structures are linked together in an * orthogonal linked list. Two different MatrixElement structures exist. * One is used when only real matrices are expected, it is missing an entry * for imaginary data. The other is used if complex matrices are expected. * It contains an entry for imaginary data. * * >>> Structure fields: * Real (RealNumber) * The real portion of the value of the element. Real must be the first * field in this structure. * Imag (RealNumber) * The imaginary portion of the value of the element. If the matrix * routines are not compiled to handle complex matrices, then this * field does not exist. If it exists, it must follow immediately after * Real. * Row (int) * The row number of the element. * Col (int) * The column number of the element. * NextInRow (struct MatrixElement *) * NextInRow contains a pointer to the next element in the row to the * right of this element. If this element is the last nonzero in the * row then NextInRow contains NULL. * NextInCol (struct MatrixElement *) * NextInCol contains a pointer to the next element in the column below * this element. If this element is the last nonzero in the column then * NextInCol contains NULL. * pInitInfo (void *) * Pointer to user data used for initialization of the matrix element. * Initialized to NULL. * * >>> Type definitions: * ElementPtr * A pointer to a MatrixElement. * ArrayOfElementPtrs * An array of ElementPtrs. Used for FirstInRow, FirstInCol and * Diag pointer arrays. */ /* Begin `MatrixElement'. */ struct MatrixElement { RealNumber Real; RealNumber Imag; int Row; int Col; struct MatrixElement *NextInRow; struct MatrixElement *NextInCol; #if INITIALIZE void *pInitInfo; #endif }; typedef struct MatrixElement *ElementPtr; typedef ElementPtr *ArrayOfElementPtrs; /* * ALLOCATION DATA STRUCTURE * * The sparse matrix routines keep track of all memory that is allocated by * the operating system so the memory can later be freed. This is done by * saving the pointers to all the chunks of memory that are allocated to a * particular matrix in an allocation list. That list is organized as a * linked list so that it can grow without a priori bounds. * * >>> Structure fields: * AllocatedPtr (void *) * Pointer to chunk of memory that has been allocated for the matrix. * NextRecord (struct AllocationRecord *) * Pointer to the next allocation record. */ /* Begin `AllocationRecord'. */ struct AllocationRecord { void *AllocatedPtr; struct AllocationRecord *NextRecord; }; typedef struct AllocationRecord *AllocationListPtr; /* * FILL-IN LIST DATA STRUCTURE * * The sparse matrix routines keep track of all fill-ins separately from * user specified elements so they may be removed by spStripFills(). Fill-ins * are allocated in bunched in what is called a fill-in lists. The data * structure defined below is used to organize these fill-in lists into a * linked-list. * * >>> Structure fields: * pFillinList (ElementPtr) * Pointer to a fill-in list, or a bunch of fill-ins arranged contiguously * in memory. * NumberOfFillinsInList (int) * Seems pretty self explanatory to me. * Next (struct FillinListNodeStruct *) * Pointer to the next fill-in list structures. */ /* Begin `FillinListNodeStruct'. */ struct FillinListNodeStruct { ElementPtr pFillinList; int NumberOfFillinsInList; struct FillinListNodeStruct *Next; }; /* Similar to above, but keeps track of the original Elements */ /* Begin `ElementListNodeStruct'. */ struct ElementListNodeStruct { ElementPtr pElementList; int NumberOfElementsInList; struct ElementListNodeStruct *Next; }; /* * MATRIX FRAME DATA STRUCTURE * * This structure contains all the pointers that support the orthogonal * linked list that contains the matrix elements. Also included in this * structure are other numbers and pointers that are used globally by the * sparse matrix routines and are associated with one particular matrix. * * >>> Type definitions: * MatrixPtr * A pointer to MatrixFrame. Essentially, a pointer to the matrix. * * >>> Structure fields: * AbsThreshold (RealNumber) * The absolute magnitude an element must have to be considered as a * pivot candidate, except as a last resort. * AllocatedExtSize (int) * The allocated size of the arrays used to translate external row and * column numbers to their internal values. * AllocatedSize (int) * The currently allocated size of the matrix; the size the matrix can * grow to when EXPANDABLE is set true and AllocatedSize is the largest * the matrix can get without requiring that the matrix frame be * reallocated. * Complex (int) * The flag which indicates whether the matrix is complex (true) or * real. * CurrentSize (int) * This number is used during the building of the matrix when the * TRANSLATE option is set true. It indicates the number of internal * rows and columns that have elements in them. * Diag (ArrayOfElementPtrs) * Array of pointers that points to the diagonal elements. * DoCmplxDirect (int *) * Array of flags, one for each column in matrix. If a flag is true * then corresponding column in a complex matrix should be eliminated * in spFactor() using direct addressing (rather than indirect * addressing). * DoRealDirect (int *) * Array of flags, one for each column in matrix. If a flag is true * then corresponding column in a real matrix should be eliminated * in spFactor() using direct addressing (rather than indirect * addressing). * Elements (int) * The total number of elements present in matrix. * Error (int) * The error status of the sparse matrix package. * ExtSize (int) * The value of the largest external row or column number encountered. * ExtToIntColMap (int []) * An array that is used to convert external columns number to internal * external column numbers. Present only if TRANSLATE option is set true. * ExtToIntRowMap (int []) * An array that is used to convert external row numbers to internal * external row numbers. Present only if TRANSLATE option is set true. * Factored (int) * Indicates if matrix has been factored. This flag is set true in * spFactor() and spOrderAndFactor() and set false in spCreate() * and spClear(). * Fillins (int) * The number of fill-ins created during the factorization the matrix. * FirstInCol (ArrayOfElementPtrs) * Array of pointers that point to the first nonzero element of the * column corresponding to the index. * FirstInRow (ArrayOfElementPtrs) * Array of pointers that point to the first nonzero element of the row * corresponding to the index. * ID (unsigned long int) * A constant that provides the sparse data structure with a signature. * When DEBUG is true, all externally available sparse routines check * this signature to assure they are operating on a valid matrix. * Intermediate (RealVector) * Temporary storage used in the spSolve routines. Intermediate is an * array used during forward and backward substitution. It is * commonly called y when the forward and backward substitution process is * denoted Ax = b => Ly = b and Ux = y. * InternalVectorsAllocated (int) * A flag that indicates whether the Markowitz vectors and the * Intermediate vector have been created. * These vectors are created in spcCreateInternalVectors(). * IntToExtColMap (int []) * An array that is used to convert internal column numbers to external * external column numbers. * IntToExtRowMap (int []) * An array that is used to convert internal row numbers to external * external row numbers. * MarkowitzCol (int []) * An array that contains the count of the non-zero elements excluding * the pivots for each column. Used to generate and update MarkowitzProd. * MarkowitzProd (long []) * The array of the products of the Markowitz row and column counts. The * element with the smallest product is the best pivot to use to maintain * sparsity. * MarkowitzRow (int []) * An array that contains the count of the non-zero elements excluding * the pivots for each row. Used to generate and update MarkowitzProd. * MaxRowCountInLowerTri (int) * The maximum number of off-diagonal element in the rows of L, the * lower triangular matrix. This quantity is used when computing an * estimate of the roundoff error in the matrix. * NeedsOrdering (int) * This is a flag that signifies that the matrix needs to be ordered * or reordered. NeedsOrdering is set true in spCreate() and * spGetElement() or spGetAdmittance() if new elements are added to the * matrix after it has been previously factored. It is set false in * spOrderAndFactor(). * NumberOfInterchangesIsOdd (int) * Flag that indicates the sum of row and column interchange counts * is an odd number. Used when determining the sign of the determinant. * Originals (int) * The number of original elements (total elements minus fill ins) * present in matrix. * Partitioned (int) * This flag indicates that the columns of the matrix have been * partitioned into two groups. Those that will be addressed directly * and those that will be addressed indirectly in spFactor(). * PivotsOriginalCol (int) * Column pivot was chosen from. * PivotsOriginalRow (int) * Row pivot was chosen from. * PivotSelectionMethod (char) * Character that indicates which pivot search method was successful. * PreviousMatrixWasComplex (int) * This flag in needed to determine how to clear the matrix. When * dealing with real matrices, it is important that the imaginary terms * in the matrix elements be zero. Thus, if the previous matrix was * complex, then the current matrix will be cleared as if it were complex * even if it is real. * RelThreshold (RealNumber) * The magnitude an element must have relative to others in its row * to be considered as a pivot candidate, except as a last resort. * Reordered (int) * This flag signifies that the matrix has been reordered. It * is cleared in spCreate(), set in spMNA_Preorder() and * spOrderAndFactor() and is used in spPrint(). * RowsLinked (int) * A flag that indicates whether the row pointers exist. The AddByIndex * routines do not generate the row pointers, which are needed by some * of the other routines, such as spOrderAndFactor() and spScale(). * The row pointers are generated in the function spcLinkRows(). * SingularCol (int) * Normally zero, but if matrix is found to be singular, SingularCol is * assigned the external column number of pivot that was zero. * SingularRow (int) * Normally zero, but if matrix is found to be singular, SingularRow is * assigned the external row number of pivot that was zero. * Singletons (int) * The number of singletons available for pivoting. Note that if row I * and column I both contain singletons, only one of them is counted. * Size (int) * Number of rows and columns in the matrix. Does not change as matrix * is factored. * TrashCan (MatrixElement) * This is a dummy MatrixElement that is used to by the user to stuff * data related to the zero row or column. In other words, when the user * adds an element in row zero or column zero, then the matrix returns * a pointer to TrashCan. In this way the user can have a uniform way * data into the matrix independent of whether a component is connected * to ground. * * >>> The remaining fields are related to memory allocation. * TopOfAllocationList (AllocationListPtr) * Pointer which points to the top entry in a list. The list contains * all the pointers to the segments of memory that have been allocated * to this matrix. This is used when the memory is to be freed on * deallocation of the matrix. * RecordsRemaining (int) * Number of slots left in the list of allocations. * NextAvailElement (ElementPtr) * Pointer to the next available element which has been allocated but as * yet is unused. Matrix elements are allocated in groups of * ELEMENTS_PER_ALLOCATION in order to speed element allocation and * freeing. * ElementsRemaining (int) * Number of unused elements left in last block of elements allocated. * NextAvailFillin (ElementPtr) * Pointer to the next available fill-in which has been allocated but * as yet is unused. Fill-ins are allocated in a group in order to keep * them physically close in memory to the rest of the matrix. * FillinsRemaining (int) * Number of unused fill-ins left in the last block of fill-ins * allocated. * FirstFillinListNode (FillinListNodeStruct *) * A pointer to the head of the linked-list that keeps track of the * lists of fill-ins. * LastFillinListNode (FillinListNodeStruct *) * A pointer to the tail of the linked-list that keeps track of the * lists of fill-ins. */ /* Begin `MatrixFrame'. */ struct MatrixFrame { RealNumber AbsThreshold; int AllocatedSize; int AllocatedExtSize; int Complex; int CurrentSize; ArrayOfElementPtrs Diag; int *DoCmplxDirect; int *DoRealDirect; int Elements; int Error; int ExtSize; int *ExtToIntColMap; int *ExtToIntRowMap; int Factored; int Fillins; ArrayOfElementPtrs FirstInCol; ArrayOfElementPtrs FirstInRow; unsigned long ID; RealVector Intermediate; int InternalVectorsAllocated; int *IntToExtColMap; int *IntToExtRowMap; int *MarkowitzRow; int *MarkowitzCol; long *MarkowitzProd; int MaxRowCountInLowerTri; int NeedsOrdering; int NumberOfInterchangesIsOdd; int Originals; int Partitioned; int PivotsOriginalCol; int PivotsOriginalRow; char PivotSelectionMethod; int PreviousMatrixWasComplex; RealNumber RelThreshold; int Reordered; int RowsLinked; int SingularCol; int SingularRow; int Singletons; int Size; struct MatrixElement TrashCan; AllocationListPtr TopOfAllocationList; int RecordsRemaining; ElementPtr NextAvailElement; int ElementsRemaining; struct ElementListNodeStruct *FirstElementListNode; struct ElementListNodeStruct *LastElementListNode; ElementPtr NextAvailFillin; int FillinsRemaining; struct FillinListNodeStruct *FirstFillinListNode; struct FillinListNodeStruct *LastFillinListNode; }; /* * Function declarations */ extern ElementPtr spcGetElement( MatrixPtr ); extern ElementPtr spcGetFillin( MatrixPtr ); extern ElementPtr spcFindElementInCol( MatrixPtr, ElementPtr*, int, int, int ); extern ElementPtr spcCreateElement( MatrixPtr, int, int, ElementPtr*, int ); extern void spcCreateInternalVectors( MatrixPtr ); extern void spcLinkRows( MatrixPtr ); extern void spcColExchange( MatrixPtr, int, int ); extern void spcRowExchange( MatrixPtr, int, int ); void spErrorMessage(MatrixPtr, FILE *, char *); #endif tmpk8ny_4pz/src/maths/sparse/spbuild.c0000644000175000017500000010242413546075722020171 0ustar carstencarsten/* * MATRIX BUILD MODULE * * Author: Advising professor: * Kenneth S. Kundert Alberto Sangiovanni-Vincentelli * UC Berkeley * * This file contains the routines associated with clearing, loading and * preprocessing the matrix for the sparse matrix routines. * * >>> User accessible functions contained in this file: * spClear * spGetElement * spFindElement * spGetAdmittance * spGetQuad * spGetOnes * spInstallInitInfo * spGetInitInfo * spInitialize * * >>> Other functions contained in this file: * spcFindElementInCol * Translate * spcCreateElement * spcLinkRows * EnlargeMatrix * ExpandTranslationArrays */ /* * Revision and copyright information. * * Copyright (c) 1985,86,87,88,89,90 * by Kenneth S. Kundert and the University of California. * * Permission to use, copy, modify, and distribute this software and * its documentation for any purpose and without fee is hereby granted, * provided that the copyright notices appear in all copies and * supporting documentation and that the authors and the University of * California are properly credited. The authors and the University of * California make no representations as to the suitability of this * software for any purpose. It is provided `as is', without express * or implied warranty. */ /* * IMPORTS * * >>> Import descriptions: * spConfig.h * Macros that customize the sparse matrix routines. * spMatrix.h * Macros and declarations to be imported by the user. * spDefs.h * Matrix type and macro definitions for the sparse matrix routines. */ #include #define spINSIDE_SPARSE #include "spconfig.h" #include "ngspice/spmatrix.h" #include "spdefs.h" /* * Function declarations */ static void Translate( MatrixPtr, int*, int* ); static void EnlargeMatrix( MatrixPtr, int ); static void ExpandTranslationArrays( MatrixPtr, int ); /* * CLEAR MATRIX * * Sets every element of the matrix to zero and clears the error flag. * * >>> Arguments: * Matrix (char *) * Pointer to matrix that is to be cleared. * * >>> Local variables: * pElement (ElementPtr) * A pointer to the element being cleared. */ void spClear(MatrixPtr Matrix) { ElementPtr pElement; int I; /* Begin `spClear'. */ assert( IS_SPARSE( Matrix ) ); /* Clear matrix. */ if (Matrix->PreviousMatrixWasComplex || Matrix->Complex) { for (I = Matrix->Size; I > 0; I--) { pElement = Matrix->FirstInCol[I]; while (pElement != NULL) { pElement->Real = 0.0; pElement->Imag = 0.0; pElement = pElement->NextInCol; } } } else { for (I = Matrix->Size; I > 0; I--) { pElement = Matrix->FirstInCol[I]; while (pElement != NULL) { pElement->Real = 0.0; pElement = pElement->NextInCol; } } } /* Empty the trash. */ Matrix->TrashCan.Real = 0.0; Matrix->TrashCan.Imag = 0.0; Matrix->Error = spOKAY; Matrix->Factored = NO; Matrix->SingularCol = 0; Matrix->SingularRow = 0; Matrix->PreviousMatrixWasComplex = Matrix->Complex; return; } /* * SINGLE ELEMENT LOCATION IN MATRIX BY INDEX * * Finds element [Row,Col] and returns a pointer to it. If element is * not found then it is created and spliced into matrix. This routine * is only to be used after spCreate() and before spMNA_Preorder(), * spFactor() or spOrderAndFactor(). Returns a pointer to the * Real portion of a MatrixElement. This pointer is later used by * spADD_xxx_ELEMENT to directly access element. * * >>> Returns: * Returns a pointer to the element. This pointer is then used to directly * access the element during successive builds. * * >>> Arguments: * Matrix (char *) * Pointer to the matrix that the element is to be added to. * Row (int) * Row index for element. Must be in the range of [0..Size] unless * the options EXPANDABLE or TRANSLATE are used. Elements placed in * row zero are discarded. In no case may Row be less than zero. * Col (int) * Column index for element. Must be in the range of [0..Size] unless * the options EXPANDABLE or TRANSLATE are used. Elements placed in * column zero are discarded. In no case may Col be less than zero. * * >>> Local variables: * pElement (RealNumber *) * Pointer to the element. * * >>> Possible errors: * spNO_MEMORY * Error is not cleared in this routine. */ RealNumber * spFindElement(MatrixPtr Matrix, int Row, int Col) { ElementPtr pElement; /* Begin `spFindElement'. */ assert( IS_SPARSE( Matrix ) && Row >= 0 && Col >= 0 ); if ((Row == 0) || (Col == 0)) return &Matrix->TrashCan.Real; #if TRANSLATE Translate( Matrix, &Row, &Col ); if (Matrix->Error == spNO_MEMORY) return NULL; #endif #if ! TRANSLATE assert(Row <= Matrix->Size && Col <= Matrix->Size); #endif /* * The condition part of the following if statement tests to see if the * element resides along the diagonal, if it does then it tests to see * if the element has been created yet (Diag pointer not NULL). The * pointer to the element is then assigned to Element after it is cast * into a pointer to a RealNumber. This casting makes the pointer into * a pointer to Real. This statement depends on the fact that Real * is the first record in the MatrixElement structure. */ if ((Row != Col) || ((pElement = Matrix->Diag[Row]) == NULL)) { /* * Element does not exist or does not reside along diagonal. Search * column for element. As in the if statement above, the pointer to the * element which is returned by spcFindElementInCol is cast into a * pointer to Real, a RealNumber. */ pElement = spcFindElementInCol( Matrix, &(Matrix->FirstInCol[Col]), Row, Col, NO ); } return & pElement->Real; } /* * SINGLE ELEMENT ADDITION TO MATRIX BY INDEX * * Finds element [Row,Col] and returns a pointer to it. If element is * not found then it is created and spliced into matrix. This routine * is only to be used after spCreate() and before spMNA_Preorder(), * spFactor() or spOrderAndFactor(). Returns a pointer to the * Real portion of a MatrixElement. This pointer is later used by * spADD_xxx_ELEMENT to directly access element. * * >>> Returns: * Returns a pointer to the element. This pointer is then used to directly * access the element during successive builds. * * >>> Arguments: * Matrix (char *) * Pointer to the matrix that the element is to be added to. * Row (int) * Rowstrchr for element. Must be in the range of [0..Size] unless * the options EXPANDABLE or TRANSLATE are used. Elements placed in * row zero are discarded. In no case may Row be less than zero. * Col (int) * Columnstrchr for element. Must be in the range of [0..Size] unless * the options EXPANDABLE or TRANSLATE are used. Elements placed in * column zero are discarded. In no case may Col be less than zero. * * >>> Local variables: * pElement (RealNumber *) * Pointer to the element. * * >>> Possible errors: * spNO_MEMORY * Error is not cleared in this routine. */ RealNumber * spGetElement(MatrixPtr Matrix, int Row, int Col) { ElementPtr pElement; /* Begin `spGetElement'. */ assert( IS_SPARSE( Matrix ) && Row >= 0 && Col >= 0 ); if ((Row == 0) || (Col == 0)) return &Matrix->TrashCan.Real; #if !TRANSLATE assert(Matrix->NeedsOrdering); #endif #if TRANSLATE Translate( Matrix, &Row, &Col ); if (Matrix->Error == spNO_MEMORY) return NULL; #endif #if !TRANSLATE #if !EXPANDABLE assert(Row <= Matrix->Size && Col <= Matrix->Size); #endif #if EXPANDABLE /* Re-size Matrix if necessary. */ if ((Row > Matrix->Size) || (Col > Matrix->Size)) EnlargeMatrix( Matrix, MAX(Row, Col) ); if (Matrix->Error == spNO_MEMORY) return NULL; #endif #endif /* The condition part of the following if statement tests to see * if the element resides along the diagonal, if it does then it * tests to see if the element has been created yet (Diag pointer * not NULL). The pointer to the element is then assigned to * Element after it is cast into a pointer to a RealNumber. This * casting makes the pointer into a pointer to Real. This * statement depends on the fact that Real is the first record in * the MatrixElement structure. */ if ((Row != Col) || ((pElement = Matrix->Diag[Row]) == NULL)) { /* Element does not exist or does not reside along diagonal. * Search column for element. As in the if statement above, * the pointer to the element which is returned by * spcFindElementInCol is cast into a pointer to Real, a * RealNumber. */ pElement = spcFindElementInCol( Matrix, &(Matrix->FirstInCol[Col]), Row, Col, YES ); } return & pElement->Real; } /* * FIND ELEMENT BY SEARCHING COLUMN * * Searches column starting at element specified at PtrAddr and finds element * in Row. If Element does not exists, it is created. The pointer to the * element is returned. * * >>> Returned: * A pointer to the desired element: * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to Matrix. * LastAddr (ElementPtr *) * Address of pointer that initially points to the element in Col at which * the search is started. The pointer in this location may be changed if * a fill-in is required in and adjacent element. For this reason it is * important that LastAddr be the address of a FirstInCol or a NextInCol * rather than a temporary variable. * Row (int) * Row being searched for. * Col (int) * Column being searched. * CreateIfMissing (int) * Indicates what to do if element is not found, create one or return a * NULL pointer. * * Local variables: * pElement (ElementPtr) * Pointer used to search through matrix. */ ElementPtr spcFindElementInCol(MatrixPtr Matrix, ElementPtr *LastAddr, int Row, int Col, int CreateIfMissing) { ElementPtr pElement; /* Begin `spcFindElementInCol'. */ pElement = *LastAddr; /* Search for element. */ while (pElement != NULL) { if (pElement->Row < Row) { /* Have not reached element yet. */ LastAddr = &(pElement->NextInCol); pElement = pElement->NextInCol; } else if (pElement->Row == Row) { /* Reached element. */ return pElement; } else break; /* while loop */ } /* Element does not exist and must be created. */ if (CreateIfMissing) return spcCreateElement( Matrix, Row, Col, LastAddr, NO ); else return NULL; } #if TRANSLATE /* * TRANSLATE EXTERNAL INDICES TO INTERNAL * * Convert external row and column numbers to internal row and column numbers. * Also updates Ext/Int maps. * * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to the matrix. * Row (int *) * Upon entry Row is either a external row number or an external node * number. Upon return, the internal equivalent is supplied. * Col (int *) * Upon entry Column is either a external column number or an external node * number. Upon return, the internal equivalent is supplied. * * >>> Local variables: * ExtCol (int) * Temporary variable used to hold the external column or node number * during the external to internal column number translation. * ExtRow (int) * Temporary variable used to hold the external row or node number during * the external to internal row number translation. * IntCol (int) * Temporary variable used to hold the internal column or node number * during the external to internal column number translation. * IntRow (int) * Temporary variable used to hold the internal row or node number during * the external to internal row number translation. */ static void Translate(MatrixPtr Matrix, int *Row, int *Col) { int IntRow, IntCol, ExtRow, ExtCol; /* Begin `Translate'. */ ExtRow = *Row; ExtCol = *Col; /* Expand translation arrays if necessary. */ if ((ExtRow > Matrix->AllocatedExtSize) || (ExtCol > Matrix->AllocatedExtSize)) { ExpandTranslationArrays( Matrix, MAX(ExtRow, ExtCol) ); if (Matrix->Error == spNO_MEMORY) return; } /* Set ExtSize if necessary. */ if ((ExtRow > Matrix->ExtSize) || (ExtCol > Matrix->ExtSize)) Matrix->ExtSize = MAX(ExtRow, ExtCol); /* Translate external row or node number to internal row or node number. */ if ((IntRow = Matrix->ExtToIntRowMap[ExtRow]) == -1) { Matrix->ExtToIntRowMap[ExtRow] = ++Matrix->CurrentSize; Matrix->ExtToIntColMap[ExtRow] = Matrix->CurrentSize; IntRow = Matrix->CurrentSize; #if !EXPANDABLE assert(IntRow <= Matrix->Size); #endif #if EXPANDABLE /* Re-size Matrix if necessary. */ if (IntRow > Matrix->Size) EnlargeMatrix( Matrix, IntRow ); if (Matrix->Error == spNO_MEMORY) return; #endif Matrix->IntToExtRowMap[IntRow] = ExtRow; Matrix->IntToExtColMap[IntRow] = ExtRow; } /* Translate external column or node number to internal column or node number.*/ if ((IntCol = Matrix->ExtToIntColMap[ExtCol]) == -1) { Matrix->ExtToIntRowMap[ExtCol] = ++Matrix->CurrentSize; Matrix->ExtToIntColMap[ExtCol] = Matrix->CurrentSize; IntCol = Matrix->CurrentSize; #if !EXPANDABLE assert(IntCol <= Matrix->Size); #endif #if EXPANDABLE /* Re-size Matrix if necessary. */ if (IntCol > Matrix->Size) EnlargeMatrix( Matrix, IntCol ); if (Matrix->Error == spNO_MEMORY) return; #endif Matrix->IntToExtRowMap[IntCol] = ExtCol; Matrix->IntToExtColMap[IntCol] = ExtCol; } *Row = IntRow; *Col = IntCol; return; } #endif #if QUAD_ELEMENT /* * ADDITION OF ADMITTANCE TO MATRIX BY INDEX * * Performs same function as spGetElement except rather than one * element, all four Matrix elements for a floating component are * added. This routine also works if component is grounded. Positive * elements are placed at [Node1,Node2] and [Node2,Node1]. This * routine is only to be used after spCreate() and before * spMNA_Preorder(), spFactor() or spOrderAndFactor(). * * >>> Returns: * Error code. * * >>> Arguments: * Matrix (char *) * Pointer to the matrix that component is to be entered in. * Node1 (int) * Row and column indices for elements. Must be in the range of [0..Size] * unless the options EXPANDABLE or TRANSLATE are used. Node zero is the * ground node. In no case may Node1 be less than zero. * Node2 (int) * Row and column indices for elements. Must be in the range of [0..Size] * unless the options EXPANDABLE or TRANSLATE are used. Node zero is the * ground node. In no case may Node2 be less than zero. * Template (struct spTemplate *) * Collection of pointers to four elements that are later used to directly * address elements. User must supply the template, this routine will * fill it. * * Possible errors: * spNO_MEMORY * Error is not cleared in this routine. */ int spGetAdmittance(MatrixPtr Matrix, int Node1, int Node2, struct spTemplate *Template) { /* Begin `spGetAdmittance'. */ Template->Element1 = spGetElement(Matrix, Node1, Node1 ); Template->Element2 = spGetElement(Matrix, Node2, Node2 ); Template->Element3Negated = spGetElement( Matrix, Node2, Node1 ); Template->Element4Negated = spGetElement( Matrix, Node1, Node2 ); if ((Template->Element1 == NULL) || (Template->Element2 == NULL) || (Template->Element3Negated == NULL) || (Template->Element4Negated == NULL)) return spNO_MEMORY; if (Node1 == 0) SWAP( RealNumber*, Template->Element1, Template->Element2 ); return spOKAY; } #endif /* QUAD_ELEMENT */ #if QUAD_ELEMENT /* * ADDITION OF FOUR ELEMENTS TO MATRIX BY INDEX * * Similar to spGetAdmittance, except that spGetAdmittance only * handles 2-terminal components, whereas spGetQuad handles simple * 4-terminals as well. These 4-terminals are simply generalized * 2-terminals with the option of having the sense terminals different * from the source and sink terminals. spGetQuad adds four * elements to the matrix. Positive elements occur at Row1,Col1 * Row2,Col2 while negative elements occur at Row1,Col2 and Row2,Col1. * The routine works fine if any of the rows and columns are zero. * This routine is only to be used after spCreate() and before * spMNA_Preorder(), spFactor() or spOrderAndFactor() * unless TRANSLATE is set TRUE. * * >>> Returns: * Error code. * * >>> Arguments: * Matrix (char *) * Pointer to the matrix that component is to be entered in. * Row1 (int) * First rowstrchr for elements. Must be in the range of [0..Size] * unless the options EXPANDABLE or TRANSLATE are used. Zero is the * ground row. In no case may Row1 be less than zero. * Row2 (int) * Second rowstrchr for elements. Must be in the range of [0..Size] * unless the options EXPANDABLE or TRANSLATE are used. Zero is the * ground row. In no case may Row2 be less than zero. * Col1 (int) * First columnstrchr for elements. Must be in the range of [0..Size] * unless the options EXPANDABLE or TRANSLATE are used. Zero is the * ground column. In no case may Col1 be less than zero. * Col2 (int) * Second columnstrchr for elements. Must be in the range of [0..Size] * unless the options EXPANDABLE or TRANSLATE are used. Zero is the * ground column. In no case may Col2 be less than zero. * Template (struct spTemplate *) * Collection of pointers to four elements that are later used to directly * address elements. User must supply the template, this routine will * fill it. * Real (RealNumber) * Real data to be added to elements. * Imag (RealNumber) * Imag data to be added to elements. If matrix is real, this argument * may be deleted. * * Possible errors: * spNO_MEMORY * Error is not cleared in this routine. */ int spGetQuad(MatrixPtr Matrix, int Row1, int Row2, int Col1, int Col2, struct spTemplate *Template) { /* Begin `spGetQuad'. */ Template->Element1 = spGetElement( Matrix, Row1, Col1); Template->Element2 = spGetElement( Matrix, Row2, Col2 ); Template->Element3Negated = spGetElement( Matrix, Row2, Col1 ); Template->Element4Negated = spGetElement( Matrix, Row1, Col2 ); if ((Template->Element1 == NULL) || (Template->Element2 == NULL) || (Template->Element3Negated == NULL) || (Template->Element4Negated == NULL)) return spNO_MEMORY; if (Template->Element1 == & Matrix->TrashCan.Real) SWAP( RealNumber *, Template->Element1, Template->Element2 ); return spOKAY; } #endif /* QUAD_ELEMENT */ #if QUAD_ELEMENT /* * ADDITION OF FOUR STRUCTURAL ONES TO MATRIX BY INDEX * * Performs similar function to spGetQuad() except this routine is * meant for components that do not have an admittance representation. * * The following stamp is used: * Pos Neg Eqn * Pos [ . . 1 ] * Neg [ . . -1 ] * Eqn [ 1 -1 . ] * * >>> Returns: * Error code. * * >>> Arguments: * Matrix (char *) * Pointer to the matrix that component is to be entered in. * Pos (int) * See stamp above. Must be in the range of [0..Size] * unless the options EXPANDABLE or TRANSLATE are used. Zero is the * ground row. In no case may Pos be less than zero. * Neg (int) * See stamp above. Must be in the range of [0..Size] * unless the options EXPANDABLE or TRANSLATE are used. Zero is the * ground row. In no case may Neg be less than zero. * Eqn (int) * See stamp above. Must be in the range of [0..Size] * unless the options EXPANDABLE or TRANSLATE are used. Zero is the * ground row. In no case may Eqn be less than zero. * Template (struct spTemplate *) * Collection of pointers to four elements that are later used to directly * address elements. User must supply the template, this routine will * fill it. * * Possible errors: * spNO_MEMORY * Error is not cleared in this routine. */ int spGetOnes(MatrixPtr Matrix, int Pos, int Neg, int Eqn, struct spTemplate *Template) { /* Begin `spGetOnes'. */ Template->Element4Negated = spGetElement( Matrix, Neg, Eqn ); Template->Element3Negated = spGetElement( Matrix, Eqn, Neg ); Template->Element2 = spGetElement( Matrix, Pos, Eqn ); Template->Element1 = spGetElement( Matrix, Eqn, Pos ); if ((Template->Element1 == NULL) || (Template->Element2 == NULL) || (Template->Element3Negated == NULL) || (Template->Element4Negated == NULL)) return spNO_MEMORY; spADD_REAL_QUAD( *Template, 1.0 ); return spOKAY; } #endif /* QUAD_ELEMENT */ /* * * CREATE AND SPLICE ELEMENT INTO MATRIX * * This routine is used to create new matrix elements and splice them into the * matrix. * * >>> Returned: * A pointer to the element that was created is returned. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to matrix. * Row (int) * Rowstrchr for element. * Col (int) * Columnstrchr for element. * LastAddr (ElementPtr *) * This contains the address of the pointer to the element just above the * one being created. It is used to speed the search and it is updated with * address of the created element. * Fillin (int) * Flag that indicates if created element is to be a fill-in. * * >>> Local variables: * pElement (ElementPtr) * Pointer to an element in the matrix. It is used to refer to the newly * created element and to restring the pointers of the element's row and * column. * pLastElement (ElementPtr) * Pointer to the element in the matrix that was just previously pointed * to by pElement. It is used to restring the pointers of the element's * row and column. * pCreatedElement (ElementPtr) * Pointer to the desired element, the one that was just created. * * >>> Possible errors: * spNO_MEMORY */ ElementPtr spcCreateElement(MatrixPtr Matrix, int Row, int Col, ElementPtr *LastAddr, int Fillin) { ElementPtr pElement, pLastElement; ElementPtr pCreatedElement; /* Begin `spcCreateElement'. */ if (Matrix->RowsLinked) { /* Row pointers cannot be ignored. */ if (Fillin) { pElement = spcGetFillin( Matrix ); Matrix->Fillins++; } else { pElement = spcGetElement( Matrix ); Matrix->Originals++; Matrix->NeedsOrdering = YES; } if (pElement == NULL) return NULL; /* If element is on diagonal, store pointer in Diag. */ if (Row == Col) Matrix->Diag[Row] = pElement; /* Initialize Element. */ pCreatedElement = pElement; pElement->Row = Row; pElement->Col = Col; pElement->Real = 0.0; pElement->Imag = 0.0; #if INITIALIZE pElement->pInitInfo = NULL; #endif /* Splice element into column. */ pElement->NextInCol = *LastAddr; *LastAddr = pElement; /* Search row for proper element position. */ pElement = Matrix->FirstInRow[Row]; pLastElement = NULL; while (pElement != NULL) { /* Search for element row position. */ if (pElement->Col < Col) { /* Have not reached desired element. */ pLastElement = pElement; pElement = pElement->NextInRow; } else pElement = NULL; } /* Splice element into row. */ pElement = pCreatedElement; if (pLastElement == NULL) { /* Element is first in row. */ pElement->NextInRow = Matrix->FirstInRow[Row]; Matrix->FirstInRow[Row] = pElement; } else { /* Element is not first in row. */ pElement->NextInRow = pLastElement->NextInRow; pLastElement->NextInRow = pElement; } } else { /* Matrix has not been factored yet. Thus get element rather * than fill-in. Also, row pointers can be ignored. */ /* Allocate memory for Element. */ pElement = spcGetElement( Matrix ); Matrix->Originals++; if (pElement == NULL) return NULL; /* If element is on diagonal, store pointer in Diag. */ if (Row == Col) Matrix->Diag[Row] = pElement; /* Initialize Element. */ pCreatedElement = pElement; pElement->Row = Row; #if DEBUG pElement->Col = Col; #endif pElement->Real = 0.0; pElement->Imag = 0.0; #if INITIALIZE pElement->pInitInfo = NULL; #endif /* Splice element into column. */ pElement->NextInCol = *LastAddr; *LastAddr = pElement; } Matrix->Elements++; return pCreatedElement; } /* * * LINK ROWS * * This routine is used to generate the row links. The spGetElement() * routines do not create row links, which are needed by the spFactor() * routines. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to the matrix. * * >>> Local variables: * pElement (ElementPtr) * Pointer to an element in the matrix. * FirstInRowEntry (ElementPtr *) * A pointer into the FirstInRow array. Points to the FirstInRow entry * currently being operated upon. * FirstInRowArray (ArrayOfElementPtrs) * A pointer to the FirstInRow array. Same as Matrix->FirstInRow but * resides in a and requires less indirection so is faster to * use. * Col (int) * Column currently being operated upon. */ void spcLinkRows(MatrixPtr Matrix) { ElementPtr pElement, *FirstInRowEntry; ArrayOfElementPtrs FirstInRowArray; int Col; /* Begin `spcLinkRows'. */ FirstInRowArray = Matrix->FirstInRow; for (Col = Matrix->Size; Col >= 1; Col--) { /* Generate row links for the elements in the Col'th column. */ pElement = Matrix->FirstInCol[Col]; while (pElement != NULL) { pElement->Col = Col; FirstInRowEntry = &FirstInRowArray[pElement->Row]; pElement->NextInRow = *FirstInRowEntry; *FirstInRowEntry = pElement; pElement = pElement->NextInCol; } } Matrix->RowsLinked = YES; return; } /* * ENLARGE MATRIX * * Increases the size of the matrix. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to the matrix. * NewSize (int) * The new size of the matrix. * * >>> Local variables: * OldAllocatedSize (int) * The allocated size of the matrix before it is expanded. */ static void EnlargeMatrix(MatrixPtr Matrix, int NewSize) { int I, OldAllocatedSize = Matrix->AllocatedSize; /* Begin `EnlargeMatrix'. */ Matrix->Size = NewSize; if (NewSize <= OldAllocatedSize) return; /* Expand the matrix frame. */ NewSize = (int)MAX( NewSize, EXPANSION_FACTOR * OldAllocatedSize ); Matrix->AllocatedSize = NewSize; if (( SP_REALLOC(Matrix->IntToExtColMap, int, NewSize+1)) == NULL) { Matrix->Error = spNO_MEMORY; return; } if (( SP_REALLOC(Matrix->IntToExtRowMap, int, NewSize+1)) == NULL) { Matrix->Error = spNO_MEMORY; return; } if (( SP_REALLOC(Matrix->Diag, ElementPtr, NewSize+1)) == NULL) { Matrix->Error = spNO_MEMORY; return; } if (( SP_REALLOC(Matrix->FirstInCol, ElementPtr, NewSize+1)) == NULL) { Matrix->Error = spNO_MEMORY; return; } if (( SP_REALLOC(Matrix->FirstInRow, ElementPtr, NewSize+1)) == NULL) { Matrix->Error = spNO_MEMORY; return; } /* Destroy the Markowitz and Intermediate vectors, they will be * recreated in spOrderAndFactor(). */ SP_FREE( Matrix->MarkowitzRow ); SP_FREE( Matrix->MarkowitzCol ); SP_FREE( Matrix->MarkowitzProd ); SP_FREE( Matrix->DoRealDirect ); SP_FREE( Matrix->DoCmplxDirect ); SP_FREE( Matrix->Intermediate ); Matrix->InternalVectorsAllocated = NO; /* Initialize the new portion of the vectors. */ for (I = OldAllocatedSize+1; I <= NewSize; I++) { Matrix->IntToExtColMap[I] = I; Matrix->IntToExtRowMap[I] = I; Matrix->Diag[I] = NULL; Matrix->FirstInRow[I] = NULL; Matrix->FirstInCol[I] = NULL; } return; } #if TRANSLATE /* * EXPAND TRANSLATION ARRAYS * * Increases the size arrays that are used to translate external to internal * row and column numbers. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to the matrix. * NewSize (int) * The new size of the translation arrays. * * >>> Local variables: * OldAllocatedSize (int) * The allocated size of the translation arrays before being expanded. */ static void ExpandTranslationArrays(MatrixPtr Matrix, int NewSize) { int I, OldAllocatedSize = Matrix->AllocatedExtSize; /* Begin `ExpandTranslationArrays'. */ Matrix->ExtSize = NewSize; if (NewSize <= OldAllocatedSize) return; /* Expand the translation arrays ExtToIntRowMap and ExtToIntColMap. */ NewSize = (int)MAX( NewSize, EXPANSION_FACTOR * OldAllocatedSize ); Matrix->AllocatedExtSize = NewSize; if (( SP_REALLOC(Matrix->ExtToIntRowMap, int, NewSize+1)) == NULL) { Matrix->Error = spNO_MEMORY; return; } if (( SP_REALLOC(Matrix->ExtToIntColMap, int, NewSize+1)) == NULL) { Matrix->Error = spNO_MEMORY; return; } /* Initialize the new portion of the vectors. */ for (I = OldAllocatedSize+1; I <= NewSize; I++) { Matrix->ExtToIntRowMap[I] = -1; Matrix->ExtToIntColMap[I] = -1; } return; } #endif #if INITIALIZE /* * INITIALIZE MATRIX * * With the INITIALIZE compiler option (see spConfig.h) set TRUE, * Sparse allows the user to keep initialization information with each * structurally nonzero matrix element. Each element has a pointer * that is set and used by the user. The user can set this pointer * using spInstallInitInfo and may be read using spGetInitInfo. Both * may be used only after the element exists. The function * spInitialize() is a user customizable way to initialize the matrix. * Passed to this routine is a function pointer. spInitialize() sweeps * through every element in the matrix and checks the pInitInfo * pointer (the user supplied pointer). If the pInitInfo is NULL, * which is TRUE unless the user changes it (almost always TRUE for * fill-ins), then the element is zeroed. Otherwise, the function * pointer is called and passed the pInitInfo pointer as well as the * element pointer and the external row and column numbers. If the * user sets the value of each element, then spInitialize() replaces * spClear(). * * The user function is expected to return a nonzero integer if there * is a fatal error and zero otherwise. Upon encountering a nonzero * return code, spInitialize() terminates and returns the error code. * * >>> Arguments: * Matrix (char *) * Pointer to matrix. * * >>> Possible Errors: * Returns nonzero if error, zero otherwise. */ void spInstallInitInfo(RealNumber *pElement, void *pInitInfo) { /* Begin `spInstallInitInfo'. */ assert(pElement != NULL); ((ElementPtr)pElement)->pInitInfo = pInitInfo; } void * spGetInitInfo(RealNumber *pElement) { /* Begin `spGetInitInfo'. */ assert(pElement != NULL); return ((ElementPtr)pElement)->pInitInfo; } int spInitialize(MatrixPtr Matrix, int (*pInit)(RealNumber*, void *InitInfo, int , int Col)) { ElementPtr pElement; int J, Error, Col; /* Begin `spInitialize'. */ assert( IS_SPARSE( Matrix ) ); /* Clear imaginary part of matrix if matrix is real but was complex. */ if (Matrix->PreviousMatrixWasComplex && !Matrix->Complex) { for (J = Matrix->Size; J > 0; J--) { pElement = Matrix->FirstInCol[J]; while (pElement != NULL) { pElement->Imag = 0.0; pElement = pElement->NextInCol; } } } /* Initialize the matrix. */ for (J = Matrix->Size; J > 0; J--) { pElement = Matrix->FirstInCol[J]; Col = Matrix->IntToExtColMap[J]; while (pElement != NULL) { if (pElement->pInitInfo == NULL) { pElement->Real = 0.0; pElement->Imag = 0.0; } else { Error = pInit (& pElement->Real, pElement->pInitInfo, Matrix->IntToExtRowMap[pElement->Row], Col); if (Error) { Matrix->Error = spFATAL; return Error; } } pElement = pElement->NextInCol; } } /* Empty the trash. */ Matrix->TrashCan.Real = 0.0; Matrix->TrashCan.Imag = 0.0; Matrix->Error = spOKAY; Matrix->Factored = NO; Matrix->SingularCol = 0; Matrix->SingularRow = 0; Matrix->PreviousMatrixWasComplex = Matrix->Complex; return 0; } #endif /* INITIALIZE */ tmpk8ny_4pz/src/maths/sparse/spextra.c0000644000175000017500000000152213546075722020212 0ustar carstencarsten/* * MATRIX UTILITY MODULE * * This file contains new routines for Spice3f * * >>> User accessible functions contained in this file: * spConstMul * * >>> Other functions contained in this file: */ /* * IMPORTS * * >>> Import descriptions: * spConfig.h * Macros that customize the sparse matrix routines. * spMatrix.h * Macros and declarations to be imported by the user. * spDefs.h * Matrix type and macro definitions for the sparse matrix routines. */ #define spINSIDE_SPARSE #include "spconfig.h" #include "ngspice/spmatrix.h" #include "spdefs.h" void spConstMult(MatrixPtr matrix, double constant) { ElementPtr e; int i; int size = matrix->Size; for (i = 1; i <= size; i++) { for (e = matrix->FirstInCol[i]; e; e = e->NextInCol) { e->Real *= constant; e->Imag *= constant; } } } tmpk8ny_4pz/src/maths/sparse/spfactor.c0000644000175000017500000030542213546075722020353 0ustar carstencarsten/* * MATRIX FACTORIZATION MODULE * * Author: Advising Professor: * Kenneth S. Kundert Alberto Sangiovanni-Vincentelli * UC Berkeley * * This file contains the routines to factor the matrix into LU form. * * >>> User accessible functions contained in this file: * spOrderAndFactor * spFactor * spPartition * * >>> Other functions contained in this file: * FactorComplexMatrix spcCreateInternalVectors * CountMarkowitz MarkowitzProducts * SearchForPivot SearchForSingleton * QuicklySearchDiagonal SearchDiagonal * SearchEntireMatrix FindLargestInCol * FindBiggestInColExclude ExchangeRowsAndCols * spcRowExchange spcColExchange * ExchangeColElements ExchangeRowElements * RealRowColElimination ComplexRowColElimination * UpdateMarkowitzNumbers CreateFillin * MatrixIsSingular ZeroPivot * WriteStatus */ /* * Revision and copyright information. * * Copyright (c) 1985,86,87,88,89,90 * by Kenneth S. Kundert and the University of California. * * Permission to use, copy, modify, and distribute this software and * its documentation for any purpose and without fee is hereby granted, * provided that the copyright notices appear in all copies and * supporting documentation and that the authors and the University of * California are properly credited. The authors and the University of * California make no representations as to the suitability of this * software for any purpose. It is provided `as is', without express * or implied warranty. */ /* * IMPORTS * * >>> Import descriptions: * spConfig.h * Macros that customize the sparse matrix routines. * spMatrix.h * Macros and declarations to be imported by the user. * spDefs.h * Matrix type and macro definitions for the sparse matrix routines. */ #include #define spINSIDE_SPARSE #include "spconfig.h" #include "ngspice/spmatrix.h" #include "spdefs.h" /* * Function declarations */ static int FactorComplexMatrix( MatrixPtr ); static void CountMarkowitz( MatrixPtr, RealVector, int ); static void MarkowitzProducts( MatrixPtr, int ); static ElementPtr SearchForPivot( MatrixPtr, int, int ); static ElementPtr SearchForSingleton( MatrixPtr, int ); static ElementPtr QuicklySearchDiagonal( MatrixPtr, int ); static ElementPtr SearchDiagonal( MatrixPtr, int ); static ElementPtr SearchEntireMatrix( MatrixPtr, int ); static RealNumber FindLargestInCol( ElementPtr ); static RealNumber FindBiggestInColExclude( MatrixPtr, ElementPtr, int ); static void ExchangeRowsAndCols( MatrixPtr, ElementPtr, int ); static void ExchangeColElements( MatrixPtr, int, ElementPtr, int, ElementPtr, int ); static void ExchangeRowElements( MatrixPtr, int, ElementPtr, int, ElementPtr, int ); static void RealRowColElimination( MatrixPtr, ElementPtr ); static void ComplexRowColElimination( MatrixPtr, ElementPtr ); static void UpdateMarkowitzNumbers( MatrixPtr, ElementPtr ); static ElementPtr CreateFillin( MatrixPtr, int, int ); static int MatrixIsSingular( MatrixPtr, int ); static int ZeroPivot( MatrixPtr, int ); /* * ORDER AND FACTOR MATRIX * * This routine chooses a pivot order for the matrix and factors it * into LU form. It handles both the initial factorization and subsequent * factorizations when a reordering is desired. This is handled in a manner * that is transparent to the user. The routine uses a variation of * Gauss's method where the pivots are associated with L and the * diagonal terms of U are one. * * >>> Returned: * The error code is returned. Possible errors are listed below. * * >>> Arguments: * Matrix (char *) * Pointer to matrix. * RHS (RealVector) * Representative right-hand side vector that is used to determine * pivoting order when the right hand side vector is sparse. If * RHS is a NULL pointer then the RHS vector is assumed to * be full and it is not used when determining the pivoting * order. * RelThreshold (RealNumber) * This number determines what the pivot relative threshold will * be. It should be between zero and one. If it is one then the * pivoting method becomes complete pivoting, which is very slow * and tends to fill up the matrix. If it is set close to zero * the pivoting method becomes strict Markowitz with no * threshold. The pivot threshold is used to eliminate pivot * candidates that would cause excessive element growth if they * were used. Element growth is the cause of roundoff error. * Element growth occurs even in well-conditioned matrices. * Setting the RelThreshold large will reduce element growth and * roundoff error, but setting it too large will cause execution * time to be excessive and will result in a large number of * fill-ins. If this occurs, accuracy can actually be degraded * because of the large number of operations required on the * matrix due to the large number of fill-ins. A good value seems * to be 0.001. The default is chosen by giving a value larger * than one or less than or equal to zero. This value should be * increased and the matrix resolved if growth is found to be * excessive. Changing the pivot threshold does not improve * performance on matrices where growth is low, as is often the * case with ill-conditioned matrices. Once a valid threshold is * given, it becomes the new default. The default value of * RelThreshold was choosen for use with nearly diagonally * dominant matrices such as node- and modified-node admittance * matrices. For these matrices it is usually best to use * diagonal pivoting. For matrices without a strong diagonal, it * is usually best to use a larger threshold, such as 0.01 or * 0.1. * AbsThreshold (RealNumber) * The absolute magnitude an element must have to be considered * as a pivot candidate, except as a last resort. This number * should be set significantly smaller than the smallest diagonal * element that is is expected to be placed in the matrix. If * there is no reasonable prediction for the lower bound on these * elements, then AbsThreshold should be set to zero. * AbsThreshold is used to reduce the possibility of choosing as a * pivot an element that has suffered heavy cancellation and as a * result mainly consists of roundoff error. Once a valid * threshold is given, it becomes the new default. * DiagPivoting (int) * A flag indicating that pivot selection should be confined to the * diagonal if possible. If DiagPivoting is nonzero and if * DIAGONAL_PIVOTING is enabled pivots will be chosen only from * the diagonal unless there are no diagonal elements that satisfy * the threshold criteria. Otherwise, the entire reduced * submatrix is searched when looking for a pivot. The diagonal * pivoting in Sparse is efficient and well refined, while the * off-diagonal pivoting is not. For symmetric and near symmetric * matrices, it is best to use diagonal pivoting because it * results in the best performance when reordering the matrix and * when factoring the matrix without ordering. If there is a * considerable amount of nonsymmetry in the matrix, then * off-diagonal pivoting may result in a better equation ordering * simply because there are more pivot candidates to choose from. * A better ordering results in faster subsequent factorizations. * However, the initial pivot selection process takes considerably * longer for off-diagonal pivoting. * * >>> Local variables: * pPivot (ElementPtr) * Pointer to the element being used as a pivot. * ReorderingRequired (int) * Flag that indicates whether reordering is required. * * >>> Possible errors: * spNO_MEMORY * spSINGULAR * spSMALL_PIVOT * Error is cleared in this function. */ int spOrderAndFactor(MatrixPtr Matrix, RealNumber RHS[], RealNumber RelThreshold, RealNumber AbsThreshold, int DiagPivoting) { ElementPtr pPivot; int Step, Size, ReorderingRequired; RealNumber LargestInCol; /* Begin `spOrderAndFactor'. */ assert( IS_VALID(Matrix) && !Matrix->Factored); Matrix->Error = spOKAY; Size = Matrix->Size; if (RelThreshold <= 0.0) RelThreshold = Matrix->RelThreshold; if (RelThreshold > 1.0) RelThreshold = Matrix->RelThreshold; Matrix->RelThreshold = RelThreshold; if (AbsThreshold < 0.0) AbsThreshold = Matrix->AbsThreshold; Matrix->AbsThreshold = AbsThreshold; ReorderingRequired = NO; if (!Matrix->NeedsOrdering) { /* Matrix has been factored before and reordering is not required. */ for (Step = 1; Step <= Size; Step++) { pPivot = Matrix->Diag[Step]; LargestInCol = FindLargestInCol(pPivot->NextInCol); if ((LargestInCol * RelThreshold < ELEMENT_MAG(pPivot))) { if (Matrix->Complex) ComplexRowColElimination( Matrix, pPivot ); else RealRowColElimination( Matrix, pPivot ); } else { ReorderingRequired = YES; break; /* for loop */ } } if (!ReorderingRequired) goto Done; else { /* A pivot was not large enough to maintain accuracy, so a * partial reordering is required. */ #if (ANNOTATE >= ON_STRANGE_BEHAVIOR) printf("Reordering, Step = %1d\n", Step); #endif } } /* End of if(!Matrix->NeedsOrdering) */ else { /* This is the first time the matrix has been factored. These * few statements indicate to the rest of the code that a full * reodering is required rather than a partial reordering, * which occurs during a failure of a fast factorization. */ Step = 1; if (!Matrix->RowsLinked) spcLinkRows( Matrix ); if (!Matrix->InternalVectorsAllocated) spcCreateInternalVectors( Matrix ); if (Matrix->Error >= spFATAL) return Matrix->Error; } /* Form initial Markowitz products. */ CountMarkowitz( Matrix, RHS, Step ); MarkowitzProducts( Matrix, Step ); Matrix->MaxRowCountInLowerTri = -1; /* Perform reordering and factorization. */ for (; Step <= Size; Step++) { pPivot = SearchForPivot( Matrix, Step, DiagPivoting ); if (pPivot == NULL) return MatrixIsSingular( Matrix, Step ); ExchangeRowsAndCols( Matrix, pPivot, Step ); if (Matrix->Complex) ComplexRowColElimination( Matrix, pPivot ); else RealRowColElimination( Matrix, pPivot ); if (Matrix->Error >= spFATAL) return Matrix->Error; UpdateMarkowitzNumbers( Matrix, pPivot ); #if (ANNOTATE == FULL) WriteStatus( Matrix, Step ); #endif } Done: Matrix->NeedsOrdering = NO; Matrix->Reordered = YES; Matrix->Factored = YES; return Matrix->Error; } /* * FACTOR MATRIX * * This routine is the companion routine to spOrderAndFactor(). * Unlike spOrderAndFactor(), spFactor() cannot change the ordering. * It is also faster than spOrderAndFactor(). The standard way of * using these two routines is to first use spOrderAndFactor() for * the initial factorization. For subsequent factorizations, * spFactor() is used if there is some assurance that little growth * will occur (say for example, that the matrix is diagonally * dominant). If spFactor() is called for the initial factorization * of the matrix, then spOrderAndFactor() is automatically called * with the default threshold. This routine uses "row at a time" LU * factorization. Pivots are associated with the lower triangular * matrix and the diagonals of the upper triangular matrix are ones. * * >>> Returned: * The error code is returned. Possible errors are listed below. * * >>> Arguments: * Matrix (char *) * Pointer to matrix. * * >>> Possible errors: * spNO_MEMORY * spSINGULAR * spZERO_DIAG * spSMALL_PIVOT * Error is cleared in this function. */ int spFactor(MatrixPtr Matrix) { ElementPtr pElement; ElementPtr pColumn; int Step, Size; RealNumber Mult; /* Begin `spFactor'. */ assert( IS_VALID(Matrix) && !Matrix->Factored); if (Matrix->NeedsOrdering) { return spOrderAndFactor( Matrix, NULL, 0.0, 0.0, DIAG_PIVOTING_AS_DEFAULT ); } if (!Matrix->Partitioned) spPartition( Matrix, spDEFAULT_PARTITION ); if (Matrix->Complex) return FactorComplexMatrix( Matrix ); Size = Matrix->Size; if (Size == 0) { Matrix->Factored = YES; return (Matrix->Error = spOKAY); } if (Matrix->Diag[1]->Real == 0.0) return ZeroPivot( Matrix, 1 ); Matrix->Diag[1]->Real = 1.0 / Matrix->Diag[1]->Real; /* Start factorization. */ for (Step = 2; Step <= Size; Step++) { if (Matrix->DoRealDirect[Step]) { /* Update column using direct addressing scatter-gather. */ RealNumber *Dest = (RealNumber *)Matrix->Intermediate; /* Scatter. */ pElement = Matrix->FirstInCol[Step]; while (pElement != NULL) { Dest[pElement->Row] = pElement->Real; pElement = pElement->NextInCol; } /* Update column. */ pColumn = Matrix->FirstInCol[Step]; while (pColumn->Row < Step) { pElement = Matrix->Diag[pColumn->Row]; pColumn->Real = Dest[pColumn->Row] * pElement->Real; while ((pElement = pElement->NextInCol) != NULL) Dest[pElement->Row] -= pColumn->Real * pElement->Real; pColumn = pColumn->NextInCol; } /* Gather. */ pElement = Matrix->Diag[Step]->NextInCol; while (pElement != NULL) { pElement->Real = Dest[pElement->Row]; pElement = pElement->NextInCol; } /* Check for singular matrix. */ if (Dest[Step] == 0.0) return ZeroPivot( Matrix, Step ); Matrix->Diag[Step]->Real = 1.0 / Dest[Step]; } else { /* Update column using indirect addressing scatter-gather. */ RealNumber **pDest = (RealNumber **)Matrix->Intermediate; /* Scatter. */ pElement = Matrix->FirstInCol[Step]; while (pElement != NULL) { pDest[pElement->Row] = &pElement->Real; pElement = pElement->NextInCol; } /* Update column. */ pColumn = Matrix->FirstInCol[Step]; while (pColumn->Row < Step) { pElement = Matrix->Diag[pColumn->Row]; Mult = (*pDest[pColumn->Row] *= pElement->Real); while ((pElement = pElement->NextInCol) != NULL) *pDest[pElement->Row] -= Mult * pElement->Real; pColumn = pColumn->NextInCol; } /* Check for singular matrix. */ if (Matrix->Diag[Step]->Real == 0.0) return ZeroPivot( Matrix, Step ); Matrix->Diag[Step]->Real = 1.0 / Matrix->Diag[Step]->Real; } } Matrix->Factored = YES; return (Matrix->Error = spOKAY); } /* * FACTOR COMPLEX MATRIX * * This routine is the companion routine to spFactor(), it * handles complex matrices. It is otherwise identical. * * >>> Returned: * The error code is returned. Possible errors are listed below. * * >>> Arguments: * Matrix (char *) * Pointer to matrix. * * >>> Possible errors: * spSINGULAR * Error is cleared in this function. */ static int FactorComplexMatrix( MatrixPtr Matrix ) { ElementPtr pElement; ElementPtr pColumn; int Step, Size; ComplexNumber Mult, Pivot; /* Begin `FactorComplexMatrix'. */ assert(Matrix->Complex); Size = Matrix->Size; if (Size == 0) { Matrix->Factored = YES; return (Matrix->Error = spOKAY); } pElement = Matrix->Diag[1]; if (ELEMENT_MAG(pElement) == 0.0) return ZeroPivot( Matrix, 1 ); /* Cmplx expr: *pPivot = 1.0 / *pPivot. */ CMPLX_RECIPROCAL( *pElement, *pElement ); /* Start factorization. */ for (Step = 2; Step <= Size; Step++) { if (Matrix->DoCmplxDirect[Step]) { /* Update column using direct addressing scatter-gather. */ ComplexNumber *Dest; Dest = (ComplexNumber *)Matrix->Intermediate; /* Scatter. */ pElement = Matrix->FirstInCol[Step]; while (pElement != NULL) { Dest[pElement->Row] = *(ComplexNumber *)pElement; pElement = pElement->NextInCol; } /* Update column. */ pColumn = Matrix->FirstInCol[Step]; while (pColumn->Row < Step) { pElement = Matrix->Diag[pColumn->Row]; /* Cmplx expr: Mult = Dest[pColumn->Row] * (1.0 / *pPivot). */ CMPLX_MULT(Mult, Dest[pColumn->Row], *pElement); CMPLX_ASSIGN(*pColumn, Mult); while ((pElement = pElement->NextInCol) != NULL) { /* Cmplx expr: Dest[pElement->Row] -= Mult * pElement */ CMPLX_MULT_SUBT_ASSIGN(Dest[pElement->Row],Mult,*pElement); } pColumn = pColumn->NextInCol; } /* Gather. */ pElement = Matrix->Diag[Step]->NextInCol; while (pElement != NULL) { *(ComplexNumber *)pElement = Dest[pElement->Row]; pElement = pElement->NextInCol; } /* Check for singular matrix. */ Pivot = Dest[Step]; if (CMPLX_1_NORM(Pivot) == 0.0) return ZeroPivot( Matrix, Step ); CMPLX_RECIPROCAL( *Matrix->Diag[Step], Pivot ); } else { /* Update column using direct addressing scatter-gather. */ ComplexNumber **pDest; pDest = (ComplexNumber **)Matrix->Intermediate; /* Scatter. */ pElement = Matrix->FirstInCol[Step]; while (pElement != NULL) { pDest[pElement->Row] = (ComplexNumber *)pElement; pElement = pElement->NextInCol; } /* Update column. */ pColumn = Matrix->FirstInCol[Step]; while (pColumn->Row < Step) { pElement = Matrix->Diag[pColumn->Row]; /* Cmplx expr: Mult = *pDest[pColumn->Row] * (1.0 / *pPivot). */ CMPLX_MULT(Mult, *pDest[pColumn->Row], *pElement); CMPLX_ASSIGN(*pDest[pColumn->Row], Mult); while ((pElement = pElement->NextInCol) != NULL) { /* Cmplx expr: *pDest[pElement->Row] -= Mult * pElement */ CMPLX_MULT_SUBT_ASSIGN(*pDest[pElement->Row],Mult,*pElement); } pColumn = pColumn->NextInCol; } /* Check for singular matrix. */ pElement = Matrix->Diag[Step]; if (ELEMENT_MAG(pElement) == 0.0) return ZeroPivot( Matrix, Step ); CMPLX_RECIPROCAL( *pElement, *pElement ); } } Matrix->Factored = YES; return (Matrix->Error = spOKAY); } /* * PARTITION MATRIX * * This routine determines the cost to factor each row using both * direct and indirect addressing and decides, on a row-by-row basis, * which addressing mode is fastest. This information is used in * spFactor() to speed the factorization. * * When factoring a previously ordered matrix using spFactor(), * Sparse operates on a row-at-a-time basis. For speed, on each * step, the row being updated is copied into a full vector and the * operations are performed on that vector. This can be done one of * two ways, either using direct addressing or indirect addressing. * Direct addressing is fastest when the matrix is relatively dense * and indirect addressing is best when the matrix is quite sparse. * The user selects the type of partition used with Mode. If Mode is * set to spDIRECT_PARTITION, then the all rows are placed in the * direct addressing partition. Similarly, if Mode is set to * spINDIRECT_PARTITION, then the all rows are placed in the indirect * addressing partition. By setting Mode to spAUTO_PARTITION, the * user allows Sparse to select the partition for each row * individually. spFactor() generally runs faster if Sparse is * allowed to choose its own partitioning, however choosing a * partition is expensive. The time required to choose a partition * is of the same order of the cost to factor the matrix. If you * plan to factor a large number of matrices with the same structure, * it is best to let Sparse choose the partition. Otherwise, you * should choose the partition based on the predicted density of the * matrix. * * >>> Arguments: * Matrix (char *) * Pointer to matrix. * Mode (int) * Mode must be one of three special codes: spDIRECT_PARTITION, * spINDIRECT_PARTITION, or spAUTO_PARTITION. */ void spPartition(MatrixPtr Matrix, int Mode) { ElementPtr pElement, pColumn; int Step, Size; int *Nc, *No, *Nm; int *DoRealDirect, *DoCmplxDirect; /* Begin `spPartition'. */ assert( IS_SPARSE( Matrix ) ); if (Matrix->Partitioned) return; Size = Matrix->Size; DoRealDirect = Matrix->DoRealDirect; DoCmplxDirect = Matrix->DoCmplxDirect; Matrix->Partitioned = YES; /* If partition is specified by the user, this is easy. */ if (Mode == spDEFAULT_PARTITION) Mode = DEFAULT_PARTITION; if (Mode == spDIRECT_PARTITION) { for (Step = 1; Step <= Size; Step++) { DoRealDirect[Step] = YES; DoCmplxDirect[Step] = YES; } return; } else if (Mode == spINDIRECT_PARTITION) { for (Step = 1; Step <= Size; Step++) { DoRealDirect[Step] = NO; DoCmplxDirect[Step] = NO; } return; } else assert( Mode == spAUTO_PARTITION ); /* Otherwise, count all operations needed in when factoring matrix. */ Nc = Matrix->MarkowitzRow; No = Matrix->MarkowitzCol; Nm = (int *)Matrix->MarkowitzProd; /* Start mock-factorization. */ for (Step = 1; Step <= Size; Step++) { Nc[Step] = No[Step] = Nm[Step] = 0; pElement = Matrix->FirstInCol[Step]; while (pElement != NULL) { Nc[Step]++; pElement = pElement->NextInCol; } pColumn = Matrix->FirstInCol[Step]; while (pColumn->Row < Step) { pElement = Matrix->Diag[pColumn->Row]; Nm[Step]++; while ((pElement = pElement->NextInCol) != NULL) No[Step]++; pColumn = pColumn->NextInCol; } } for (Step = 1; Step <= Size; Step++) { /* The following are just estimates based on a count on the * number of machine instructions used on each machine to * perform the various tasks. It was assumed that each * machine instruction required the same amount of time (I * don't believe this is TRUE for the VAX, and have no idea if * this is TRUE for the 68000 family). For optimum * performance, these numbers should be tuned to the machine. * * Nc is the number of nonzero elements in the column. * Nm is the number of multipliers in the column. * No is the number of operations in the inner loop. */ #define generic #ifdef hp9000s300 DoRealDirect[Step] = (Nm[Step] + No[Step] > 3*Nc[Step] - 2*Nm[Step]); /* On the hp350, it is never profitable to use direct for complex. */ DoCmplxDirect[Step] = NO; #undef generic #endif #ifdef vax DoRealDirect[Step] = (Nm[Step] + No[Step] > 3*Nc[Step] - 2*Nm[Step]); DoCmplxDirect[Step] = (Nm[Step] + No[Step] > 7*Nc[Step] - 4*Nm[Step]); #undef generic #endif #ifdef generic DoRealDirect[Step] = (Nm[Step] + No[Step] > 3*Nc[Step] - 2*Nm[Step]); DoCmplxDirect[Step] = (Nm[Step] + No[Step] > 7*Nc[Step] - 4*Nm[Step]); #undef generic #endif } #if (ANNOTATE == FULL) { int Ops = 0; for (Step = 1; Step <= Size; Step++) Ops += No[Step]; printf("Operation count for inner loop of factorization = %d.\n", Ops); } #endif return; } /* * CREATE INTERNAL VECTORS * * Creates the Markowitz and Intermediate vectors. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to matrix. * * >>> Local variables: * SizePlusOne (unsigned) * Size of the arrays to be allocated. * * >>> Possible errors: * spNO_MEMORY */ void spcCreateInternalVectors( MatrixPtr Matrix ) { int Size; /* Begin `spcCreateInternalVectors'. */ /* Create Markowitz arrays. */ Size= Matrix->Size; if (Matrix->MarkowitzRow == NULL) { if (( Matrix->MarkowitzRow = SP_MALLOC(int, Size+1)) == NULL) Matrix->Error = spNO_MEMORY; } if (Matrix->MarkowitzCol == NULL) { if (( Matrix->MarkowitzCol = SP_MALLOC(int, Size+1)) == NULL) Matrix->Error = spNO_MEMORY; } if (Matrix->MarkowitzProd == NULL) { if (( Matrix->MarkowitzProd = SP_MALLOC(long, Size+2)) == NULL) Matrix->Error = spNO_MEMORY; } /* Create DoDirect vectors for use in spFactor(). */ if (Matrix->DoRealDirect == NULL) { if (( Matrix->DoRealDirect = SP_MALLOC(int, Size+1)) == NULL) Matrix->Error = spNO_MEMORY; } if (Matrix->DoCmplxDirect == NULL) { if (( Matrix->DoCmplxDirect = SP_MALLOC(int, Size+1)) == NULL) Matrix->Error = spNO_MEMORY; } /* Create Intermediate vectors for use in MatrixSolve. */ if (Matrix->Intermediate == NULL) { if ((Matrix->Intermediate = SP_MALLOC(RealNumber,2*(Size+1))) == NULL) Matrix->Error = spNO_MEMORY; } if (Matrix->Error != spNO_MEMORY) Matrix->InternalVectorsAllocated = YES; return; } /* * COUNT MARKOWITZ * * Scans Matrix to determine the Markowitz counts for each row and column. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to matrix. * RHS (RealVector) * Representative right-hand side vector that is used to determine * pivoting order when the right hand side vector is sparse. If * RHS is a NULL pointer then the RHS vector is assumed to be full * and it is not used when determining the pivoting order. * Step (int) * Index of the diagonal currently being eliminated. * * >>> Local variables: * Count (int) * Temporary counting variable. * ExtRow (int) * The external row number that corresponds to I. * pElement (ElementPtr) * Pointer to matrix elements. * Size (int) * The size of the matrix. */ static void CountMarkowitz(MatrixPtr Matrix, RealVector RHS, int Step) { int Count, I, Size = Matrix->Size; ElementPtr pElement; int ExtRow; /* Begin `CountMarkowitz'. */ /* Generate MarkowitzRow Count for each row. */ for (I = Step; I <= Size; I++) { /* Set Count to -1 initially to remove count due to pivot element. */ Count = -1; pElement = Matrix->FirstInRow[I]; while (pElement != NULL && pElement->Col < Step) pElement = pElement->NextInRow; while (pElement != NULL) { Count++; pElement = pElement->NextInRow; } /* Include nonzero elements in the RHS vector. */ ExtRow = Matrix->IntToExtRowMap[I]; if (RHS != NULL) if (RHS[ExtRow] != 0.0) Count++; Matrix->MarkowitzRow[I] = Count; } /* Generate the MarkowitzCol count for each column. */ for (I = Step; I <= Size; I++) { /* Set Count to -1 initially to remove count due to pivot element. */ Count = -1; pElement = Matrix->FirstInCol[I]; while (pElement != NULL && pElement->Row < Step) pElement = pElement->NextInCol; while (pElement != NULL) { Count++; pElement = pElement->NextInCol; } Matrix->MarkowitzCol[I] = Count; } return; } /* * MARKOWITZ PRODUCTS * * Calculates MarkowitzProduct for each diagonal element from the Markowitz * counts. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to matrix. * Step (int) * Index of the diagonal currently being eliminated. * * >>> Local Variables: * pMarkowitzProduct (long *) * Pointer that points into MarkowitzProduct array. Is used to * sequentially access entries quickly. * pMarkowitzRow (int *) * Pointer that points into MarkowitzRow array. Is used to sequentially * access entries quickly. * pMarkowitzCol (int *) * Pointer that points into MarkowitzCol array. Is used to sequentially * access entries quickly. * Product (long) * Temporary storage for Markowitz product./ * Size (int) * The size of the matrix. */ static void MarkowitzProducts(MatrixPtr Matrix, int Step) { int I, *pMarkowitzRow, *pMarkowitzCol; long Product, *pMarkowitzProduct; int Size = Matrix->Size; double fProduct; /* Begin `MarkowitzProducts'. */ Matrix->Singletons = 0; pMarkowitzProduct = &(Matrix->MarkowitzProd[Step]); pMarkowitzRow = &(Matrix->MarkowitzRow[Step]); pMarkowitzCol = &(Matrix->MarkowitzCol[Step]); for (I = Step; I <= Size; I++) { /* If chance of overflow, use real numbers. */ if ((*pMarkowitzRow > LARGEST_SHORT_INTEGER && *pMarkowitzCol != 0) || (*pMarkowitzCol > LARGEST_SHORT_INTEGER && *pMarkowitzRow != 0)) { fProduct = (double)(*pMarkowitzRow++) * (double)(*pMarkowitzCol++); if (fProduct >= LARGEST_LONG_INTEGER) *pMarkowitzProduct++ = LARGEST_LONG_INTEGER; else *pMarkowitzProduct++ = (long)fProduct; } else { Product = *pMarkowitzRow++ * *pMarkowitzCol++; if ((*pMarkowitzProduct++ = Product) == 0) Matrix->Singletons++; } } return; } /* * SEARCH FOR BEST PIVOT * * Performs a search to determine the element with the lowest Markowitz * Product that is also acceptable. An acceptable element is one that is * larger than the AbsThreshold and at least as large as RelThreshold times * the largest element in the same column. The first step is to look for * singletons if any exist. If none are found, then all the diagonals are * searched. The diagonal is searched once quickly using the assumption that * elements on the diagonal are large compared to other elements in their * column, and so the pivot can be chosen only on the basis of the Markowitz * criterion. After a element has been chosen to be pivot on the basis of * its Markowitz product, it is checked to see if it is large enough. * Waiting to the end of the Markowitz search to check the size of a pivot * candidate saves considerable time, but is not guaranteed to find an * acceptable pivot. Thus if unsuccessful a second pass of the diagonal is * made. This second pass checks to see if an element is large enough during * the search, not after it. If still no acceptable pivot candidate has * been found, the search expands to cover the entire matrix. * * >>> Returned: * A pointer to the element chosen to be pivot. If every element in the * matrix is zero, then NULL is returned. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to matrix. * Step (int) * The row and column number of the beginning of the reduced submatrix. * * >>> Local variables: * ChosenPivot (ElementPtr) * Pointer to element that has been chosen to be the pivot. * * >>> Possible errors: * spSINGULAR * spSMALL_PIVOT */ static ElementPtr SearchForPivot( MatrixPtr Matrix, int Step, int DiagPivoting ) { ElementPtr ChosenPivot; /* Begin `SearchForPivot'. */ /* If singletons exist, look for an acceptable one to use as pivot. */ if (Matrix->Singletons) { ChosenPivot = SearchForSingleton( Matrix, Step ); if (ChosenPivot != NULL) { Matrix->PivotSelectionMethod = 's'; return ChosenPivot; } } #if DIAGONAL_PIVOTING if (DiagPivoting) { /* * Either no singletons exist or they weren't acceptable. Take quick first * pass at searching diagonal. First search for element on diagonal of * remaining submatrix with smallest Markowitz product, then check to see * if it okay numerically. If not, QuicklySearchDiagonal fails. */ ChosenPivot = QuicklySearchDiagonal( Matrix, Step ); if (ChosenPivot != NULL) { Matrix->PivotSelectionMethod = 'q'; return ChosenPivot; } /* * Quick search of diagonal failed, carefully search diagonal and check each * pivot candidate numerically before even tentatively accepting it. */ ChosenPivot = SearchDiagonal( Matrix, Step ); if (ChosenPivot != NULL) { Matrix->PivotSelectionMethod = 'd'; return ChosenPivot; } } #endif /* DIAGONAL_PIVOTING */ /* No acceptable pivot found yet, search entire matrix. */ ChosenPivot = SearchEntireMatrix( Matrix, Step ); Matrix->PivotSelectionMethod = 'e'; return ChosenPivot; } /* * SEARCH FOR SINGLETON TO USE AS PIVOT * * Performs a search to find a singleton to use as the pivot. The * first acceptable singleton is used. A singleton is acceptable if * it is larger in magnitude than the AbsThreshold and larger * than RelThreshold times the largest of any other elements in the same * column. It may seem that a singleton need not satisfy the * relative threshold criterion, however it is necessary to prevent * excessive growth in the RHS from resulting in overflow during the * forward and backward substitution. A singleton does not need to * be on the diagonal to be selected. * * >>> Returned: * A pointer to the singleton chosen to be pivot. In no singleton is * acceptable, return NULL. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to matrix. * Step (int) * Index of the diagonal currently being eliminated. * * >>> Local variables: * ChosenPivot (ElementPtr) * Pointer to element that has been chosen to be the pivot. * PivotMag (RealNumber) * Magnitude of ChosenPivot. * Singletons (int) * The count of the number of singletons that can be used as pivots. * A local version of Matrix->Singletons. * pMarkowitzProduct (long *) * Pointer that points into MarkowitzProduct array. It is used to quickly * access successive Markowitz products. */ static ElementPtr SearchForSingleton( MatrixPtr Matrix, int Step ) { ElementPtr ChosenPivot; int I; long *pMarkowitzProduct; int Singletons; RealNumber PivotMag; /* Begin `SearchForSingleton'. */ /* Initialize pointer that is to scan through MarkowitzProduct vector. */ pMarkowitzProduct = &(Matrix->MarkowitzProd[Matrix->Size+1]); Matrix->MarkowitzProd[Matrix->Size+1] = Matrix->MarkowitzProd[Step]; /* Decrement the count of available singletons, on the assumption that an * acceptable one will be found. */ Singletons = Matrix->Singletons--; /* * Assure that following while loop will always terminate, this is just * preventive medicine, if things are working right this should never * be needed. */ Matrix->MarkowitzProd[Step-1] = 0; while (Singletons-- > 0) { /* Singletons exist, find them. */ /* * This is tricky. Am using a pointer to sequentially step through the * MarkowitzProduct array. Search terminates when singleton (Product = 0) * is found. Note that the conditional in the while statement * ( *pMarkowitzProduct ) is TRUE as long as the MarkowitzProduct is not * equal to zero. The row (and column)strchr on the diagonal is then * calculated by subtracting the pointer to the Markowitz product of * the first diagonal from the pointer to the Markowitz product of the * desired element, the singleton. * * Search proceeds from the end (high row and column numbers) to the * beginning (low row and column numbers) so that rows and columns with * large Markowitz products will tend to be move to the bottom of the * matrix. However, choosing Diag[Step] is desirable because it would * require no row and column interchanges, so inspect it first by * putting its Markowitz product at the end of the MarkowitzProd * vector. */ while ( *pMarkowitzProduct-- ) { /* * N bottles of beer on the wall; * N bottles of beer. * you take one down and pass it around; * N-1 bottles of beer on the wall. */ } I = (int)(pMarkowitzProduct - Matrix->MarkowitzProd) + 1; /* Assure that I is valid. */ if (I < Step) break; /* while (Singletons-- > 0) */ if (I > Matrix->Size) I = Step; /* Singleton has been found in either/both row or/and column I. */ if ((ChosenPivot = Matrix->Diag[I]) != NULL) { /* Singleton lies on the diagonal. */ PivotMag = ELEMENT_MAG(ChosenPivot); if ( PivotMag > Matrix->AbsThreshold && PivotMag > Matrix->RelThreshold * FindBiggestInColExclude( Matrix, ChosenPivot, Step ) ) return ChosenPivot; } else { /* Singleton does not lie on diagonal, find it. */ if (Matrix->MarkowitzCol[I] == 0) { ChosenPivot = Matrix->FirstInCol[I]; while ((ChosenPivot != NULL) && (ChosenPivot->Row < Step)) ChosenPivot = ChosenPivot->NextInCol; if (ChosenPivot != NULL) { /* Reduced column has no elements, matrix is singular. */ break; } PivotMag = ELEMENT_MAG(ChosenPivot); if ( PivotMag > Matrix->AbsThreshold && PivotMag > Matrix->RelThreshold * FindBiggestInColExclude( Matrix, ChosenPivot, Step ) ) return ChosenPivot; else { if (Matrix->MarkowitzRow[I] == 0) { ChosenPivot = Matrix->FirstInRow[I]; while((ChosenPivot != NULL) && (ChosenPivot->ColNextInRow; if (ChosenPivot != NULL) { /* Reduced row has no elements, matrix is singular. */ break; } PivotMag = ELEMENT_MAG(ChosenPivot); if ( PivotMag > Matrix->AbsThreshold && PivotMag > Matrix->RelThreshold * FindBiggestInColExclude( Matrix, ChosenPivot, Step ) ) return ChosenPivot; } } } else { ChosenPivot = Matrix->FirstInRow[I]; while ((ChosenPivot != NULL) && (ChosenPivot->Col < Step)) ChosenPivot = ChosenPivot->NextInRow; if (ChosenPivot != NULL) { /* Reduced row has no elements, matrix is singular. */ break; } PivotMag = ELEMENT_MAG(ChosenPivot); if ( PivotMag > Matrix->AbsThreshold && PivotMag > Matrix->RelThreshold * FindBiggestInColExclude( Matrix, ChosenPivot, Step ) ) return ChosenPivot; } } /* Singleton not acceptable (too small), try another. */ } /* end of while(lSingletons>0) */ /* * All singletons were unacceptable. Restore Matrix->Singletons count. * Initial assumption that an acceptable singleton would be found was wrong. */ Matrix->Singletons++; return NULL; } #if DIAGONAL_PIVOTING #if MODIFIED_MARKOWITZ /* * QUICK SEARCH OF DIAGONAL FOR PIVOT WITH MODIFIED MARKOWITZ CRITERION * * Searches the diagonal looking for the best pivot. For a pivot to be * acceptable it must be larger than the pivot RelThreshold times the largest * element in its reduced column. Among the acceptable diagonals, the * one with the smallest MarkowitzProduct is sought. Search terminates * early if a diagonal is found with a MarkowitzProduct of one and its * magnitude is larger than the other elements in its row and column. * Since its MarkowitzProduct is one, there is only one other element in * both its row and column, and, as a condition for early termination, * these elements must be located symmetricly in the matrix. If a tie * occurs between elements of equal MarkowitzProduct, then the element with * the largest ratio between its magnitude and the largest element in its * column is used. The search will be terminated after a given number of * ties have occurred and the best (largest ratio) of the tied element will * be used as the pivot. The number of ties that will trigger an early * termination is MinMarkowitzProduct * TIES_MULTIPLIER. * * >>> Returned: * A pointer to the diagonal element chosen to be pivot. If no diagonal is * acceptable, a NULL is returned. * * >>> Arguments: * Step (int) * Index of the diagonal currently being eliminated. * * >>> Local variables: * ChosenPivot (ElementPtr) * Pointer to the element that has been chosen to be the pivot. * LargestOffDiagonal (RealNumber) * Magnitude of the largest of the off-diagonal terms associated with * a diagonal with MarkowitzProduct equal to one. * Magnitude (RealNumber) * Absolute value of diagonal element. * MaxRatio (RealNumber) * Among the elements tied with the smallest Markowitz product, MaxRatio * is the best (smallest) ratio of LargestInCol to the diagonal Magnitude * found so far. The smaller the ratio, the better numerically the * element will be as pivot. * MinMarkowitzProduct (long) * Smallest Markowitz product found of pivot candidates that lie along * diagonal. * NumberOfTies (int) * A count of the number of Markowitz ties that have occurred at current * MarkowitzProduct. * pDiag (ElementPtr) * Pointer to current diagonal element. * pMarkowitzProduct (long *) * Pointer that points into MarkowitzProduct array. It is used to quickly * access successive Markowitz products. * Ratio (RealNumber) * For the current pivot candidate, Ratio is the ratio of the largest * element in its column (excluding itself) to its magnitude. * TiedElements (ElementPtr[]) * Array of pointers to the elements with the minimum Markowitz * product. * pOtherInCol (ElementPtr) * When there is only one other element in a column other than the * diagonal, pOtherInCol is used to point to it. Used when Markowitz * product is to determine if off diagonals are placed symmetricly. * pOtherInRow (ElementPtr) * When there is only one other element in a row other than the diagonal, * pOtherInRow is used to point to it. Used when Markowitz product is * to determine if off diagonals are placed symmetricly. */ static ElementPtr QuicklySearchDiagonal( MatrixPtr Matrix, int Step ) { long MinMarkowitzProduct, *pMarkowitzProduct; ElementPtr pDiag, pOtherInRow, pOtherInCol; int I, NumberOfTies; ElementPtr ChosenPivot, TiedElements[MAX_MARKOWITZ_TIES + 1]; RealNumber Magnitude, LargestInCol, Ratio, MaxRatio; RealNumber LargestOffDiagonal; RealNumber FindBiggestInColExclude(); /* Begin `QuicklySearchDiagonal'. */ NumberOfTies = -1; MinMarkowitzProduct = LARGEST_LONG_INTEGER; pMarkowitzProduct = &(Matrix->MarkowitzProd[Matrix->Size+2]); Matrix->MarkowitzProd[Matrix->Size+1] = Matrix->MarkowitzProd[Step]; /* Assure that following while loop will always terminate. */ Matrix->MarkowitzProd[Step-1] = -1; /* * This is tricky. Am using a pointer in the inner while loop to * sequentially step through the MarkowitzProduct array. Search * terminates when the Markowitz product of zero placed at location * Step-1 is found. The row (and column)strchr on the diagonal is then * calculated by subtracting the pointer to the Markowitz product of * the first diagonal from the pointer to the Markowitz product of the * desired element. The outer for loop is infinite, broken by using * break. * * Search proceeds from the end (high row and column numbers) to the * beginning (low row and column numbers) so that rows and columns with * large Markowitz products will tend to be move to the bottom of the * matrix. However, choosing Diag[Step] is desirable because it would * require no row and column interchanges, so inspect it first by * putting its Markowitz product at the end of the MarkowitzProd * vector. */ for(;;) { /* Endless for loop. */ while (MinMarkowitzProduct < *(--pMarkowitzProduct)) { /* * N bottles of beer on the wall; * N bottles of beer. * You take one down and pass it around; * N-1 bottles of beer on the wall. */ } I = pMarkowitzProduct - Matrix->MarkowitzProd; /* Assure that I is valid; if I < Step, terminate search. */ if (I < Step) break; /* Endless for loop */ if (I > Matrix->Size) I = Step; if ((pDiag = Matrix->Diag[I]) == NULL) continue; /* Endless for loop */ if ((Magnitude = ELEMENT_MAG(pDiag)) <= Matrix->AbsThreshold) continue; /* Endless for loop */ if (*pMarkowitzProduct == 1) { /* Case where only one element exists in row and column other than diagonal. */ /* Find off diagonal elements. */ pOtherInRow = pDiag->NextInRow; pOtherInCol = pDiag->NextInCol; if (pOtherInRow == NULL && pOtherInCol == NULL) { pOtherInRow = Matrix->FirstInRow[I]; while(pOtherInRow != NULL) { if (pOtherInRow->Col >= Step && pOtherInRow->Col != I) break; pOtherInRow = pOtherInRow->NextInRow; } pOtherInCol = Matrix->FirstInCol[I]; while(pOtherInCol != NULL) { if (pOtherInCol->Row >= Step && pOtherInCol->Row != I) break; pOtherInCol = pOtherInCol->NextInCol; } } /* Accept diagonal as pivot if diagonal is larger than off diagonals and the * off diagonals are placed symmetricly. */ if (pOtherInRow != NULL && pOtherInCol != NULL) { if (pOtherInRow->Col == pOtherInCol->Row) { LargestOffDiagonal = MAX(ELEMENT_MAG(pOtherInRow), ELEMENT_MAG(pOtherInCol)); if (Magnitude >= LargestOffDiagonal) { /* Accept pivot, it is unlikely to contribute excess error. */ return pDiag; } } } } if (*pMarkowitzProduct < MinMarkowitzProduct) { /* Notice strict inequality in test. This is a new smallest MarkowitzProduct. */ TiedElements[0] = pDiag; MinMarkowitzProduct = *pMarkowitzProduct; NumberOfTies = 0; } else { /* This case handles Markowitz ties. */ if (NumberOfTies < MAX_MARKOWITZ_TIES) { TiedElements[++NumberOfTies] = pDiag; if (NumberOfTies >= MinMarkowitzProduct * TIES_MULTIPLIER) break; /* Endless for loop */ } } } /* End of endless for loop. */ /* Test to see if any element was chosen as a pivot candidate. */ if (NumberOfTies < 0) return NULL; /* Determine which of tied elements is best numerically. */ ChosenPivot = NULL; MaxRatio = 1.0 / Matrix->RelThreshold; for (I = 0; I <= NumberOfTies; I++) { pDiag = TiedElements[I]; Magnitude = ELEMENT_MAG(pDiag); LargestInCol = FindBiggestInColExclude( Matrix, pDiag, Step ); Ratio = LargestInCol / Magnitude; if (Ratio < MaxRatio) { ChosenPivot = pDiag; MaxRatio = Ratio; } } return ChosenPivot; } #else /* Not MODIFIED_MARKOWITZ */ /* * QUICK SEARCH OF DIAGONAL FOR PIVOT WITH CONVENTIONAL MARKOWITZ * CRITERION * * Searches the diagonal looking for the best pivot. For a pivot to be * acceptable it must be larger than the pivot RelThreshold times the largest * element in its reduced column. Among the acceptable diagonals, the * one with the smallest MarkowitzProduct is sought. Search terminates * early if a diagonal is found with a MarkowitzProduct of one and its * magnitude is larger than the other elements in its row and column. * Since its MarkowitzProduct is one, there is only one other element in * both its row and column, and, as a condition for early termination, * these elements must be located symmetricly in the matrix. * * >>> Returned: * A pointer to the diagonal element chosen to be pivot. If no diagonal is * acceptable, a NULL is returned. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to matrix. * Step (int) * Index of the diagonal currently being eliminated. * * >>> Local variables: * ChosenPivot (ElementPtr) * Pointer to the element that has been chosen to be the pivot. * LargestOffDiagonal (RealNumber) * Magnitude of the largest of the off-diagonal terms associated with * a diagonal with MarkowitzProduct equal to one. * Magnitude (RealNumber) * Absolute value of diagonal element. * MinMarkowitzProduct (long) * Smallest Markowitz product found of pivot candidates which are * acceptable. * pDiag (ElementPtr) * Pointer to current diagonal element. * pMarkowitzProduct (long *) * Pointer that points into MarkowitzProduct array. It is used to quickly * access successive Markowitz products. * pOtherInCol (ElementPtr) * When there is only one other element in a column other than the * diagonal, pOtherInCol is used to point to it. Used when Markowitz * product is to determine if off diagonals are placed symmetricly. * pOtherInRow (ElementPtr) * When there is only one other element in a row other than the diagonal, * pOtherInRow is used to point to it. Used when Markowitz product is * to determine if off diagonals are placed symmetricly. */ static ElementPtr QuicklySearchDiagonal( MatrixPtr Matrix, int Step ) { long MinMarkowitzProduct, *pMarkowitzProduct; ElementPtr pDiag; int I; ElementPtr ChosenPivot, pOtherInRow, pOtherInCol; RealNumber Magnitude, LargestInCol, LargestOffDiagonal; /* Begin `QuicklySearchDiagonal'. */ ChosenPivot = NULL; MinMarkowitzProduct = LARGEST_LONG_INTEGER; pMarkowitzProduct = &(Matrix->MarkowitzProd[Matrix->Size+2]); Matrix->MarkowitzProd[Matrix->Size+1] = Matrix->MarkowitzProd[Step]; /* Assure that following while loop will always terminate. */ Matrix->MarkowitzProd[Step-1] = -1; /* * This is tricky. Am using a pointer in the inner while loop to * sequentially step through the MarkowitzProduct array. Search * terminates when the Markowitz product of zero placed at location * Step-1 is found. The row (and column)strchr on the diagonal is then * calculated by subtracting the pointer to the Markowitz product of * the first diagonal from the pointer to the Markowitz product of the * desired element. The outer for loop is infinite, broken by using * break. * * Search proceeds from the end (high row and column numbers) to the * beginning (low row and column numbers) so that rows and columns with * large Markowitz products will tend to be move to the bottom of the * matrix. However, choosing Diag[Step] is desirable because it would * require no row and column interchanges, so inspect it first by * putting its Markowitz product at the end of the MarkowitzProd * vector. */ for (;;) { /* Endless for loop. */ while (*(--pMarkowitzProduct) >= MinMarkowitzProduct) { /* Just passing through. */ } I = (int)(pMarkowitzProduct - Matrix->MarkowitzProd); /* Assure that I is valid; if I < Step, terminate search. */ if (I < Step) break; /* Endless for loop */ if (I > Matrix->Size) I = Step; if ((pDiag = Matrix->Diag[I]) == NULL) continue; /* Endless for loop */ if ((Magnitude = ELEMENT_MAG(pDiag)) <= Matrix->AbsThreshold) continue; /* Endless for loop */ if (*pMarkowitzProduct == 1) { /* Case where only one element exists in row and column other than diagonal. */ /* Find off-diagonal elements. */ pOtherInRow = pDiag->NextInRow; pOtherInCol = pDiag->NextInCol; if (pOtherInRow == NULL && pOtherInCol == NULL) { pOtherInRow = Matrix->FirstInRow[I]; while(pOtherInRow != NULL) { if (pOtherInRow->Col >= Step && pOtherInRow->Col != I) break; pOtherInRow = pOtherInRow->NextInRow; } pOtherInCol = Matrix->FirstInCol[I]; while(pOtherInCol != NULL) { if (pOtherInCol->Row >= Step && pOtherInCol->Row != I) break; pOtherInCol = pOtherInCol->NextInCol; } } /* Accept diagonal as pivot if diagonal is larger than off-diagonals and the * off-diagonals are placed symmetricly. */ if (pOtherInRow != NULL && pOtherInCol != NULL) { if (pOtherInRow->Col == pOtherInCol->Row) { LargestOffDiagonal = MAX(ELEMENT_MAG(pOtherInRow), ELEMENT_MAG(pOtherInCol)); if (Magnitude >= LargestOffDiagonal) { /* Accept pivot, it is unlikely to contribute excess error. */ return pDiag; } } } } MinMarkowitzProduct = *pMarkowitzProduct; ChosenPivot = pDiag; } /* End of endless for loop. */ if (ChosenPivot != NULL) { LargestInCol = FindBiggestInColExclude( Matrix, ChosenPivot, Step ); if( ELEMENT_MAG(ChosenPivot) <= Matrix->RelThreshold * LargestInCol ) ChosenPivot = NULL; } return ChosenPivot; } #endif /* Not MODIFIED_MARKOWITZ */ /* * SEARCH DIAGONAL FOR PIVOT WITH MODIFIED MARKOWITZ CRITERION * * Searches the diagonal looking for the best pivot. For a pivot to be * acceptable it must be larger than the pivot RelThreshold times the largest * element in its reduced column. Among the acceptable diagonals, the * one with the smallest MarkowitzProduct is sought. If a tie occurs * between elements of equal MarkowitzProduct, then the element with * the largest ratio between its magnitude and the largest element in its * column is used. The search will be terminated after a given number of * ties have occurred and the best (smallest ratio) of the tied element will * be used as the pivot. The number of ties that will trigger an early * termination is MinMarkowitzProduct * TIES_MULTIPLIER. * * >>> Returned: * A pointer to the diagonal element chosen to be pivot. If no diagonal is * acceptable, a NULL is returned. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to matrix. * Step (int) * Index of the diagonal currently being eliminated. * * >>> Local variables: * ChosenPivot (ElementPtr) * Pointer to the element that has been chosen to be the pivot. * Size (int) * Local version of size which is placed in a to increase speed. * Magnitude (RealNumber) * Absolute value of diagonal element. * MinMarkowitzProduct (long) * Smallest Markowitz product found of those pivot candidates which are * acceptable. * NumberOfTies (int) * A count of the number of Markowitz ties that have occurred at current * MarkowitzProduct. * pDiag (ElementPtr) * Pointer to current diagonal element. * pMarkowitzProduct (long*) * Pointer that points into MarkowitzProduct array. It is used to quickly * access successive Markowitz products. * Ratio (RealNumber) * For the current pivot candidate, Ratio is the * Ratio of the largest element in its column to its magnitude. * RatioOfAccepted (RealNumber) * For the best pivot candidate found so far, RatioOfAccepted is the * Ratio of the largest element in its column to its magnitude. */ static ElementPtr SearchDiagonal( MatrixPtr Matrix, int Step ) { int J; long MinMarkowitzProduct, *pMarkowitzProduct; int I; ElementPtr pDiag; int NumberOfTies = 0; int Size = Matrix->Size; ElementPtr ChosenPivot; RealNumber Magnitude, Ratio; RealNumber RatioOfAccepted = 0; RealNumber LargestInCol; /* Begin `SearchDiagonal'. */ ChosenPivot = NULL; MinMarkowitzProduct = LARGEST_LONG_INTEGER; pMarkowitzProduct = &(Matrix->MarkowitzProd[Size+2]); Matrix->MarkowitzProd[Size+1] = Matrix->MarkowitzProd[Step]; /* Start search of diagonal. */ for (J = Size+1; J > Step; J--) { if (*(--pMarkowitzProduct) > MinMarkowitzProduct) continue; /* for loop */ if (J > Matrix->Size) I = Step; else I = J; if ((pDiag = Matrix->Diag[I]) == NULL) continue; /* for loop */ if ((Magnitude = ELEMENT_MAG(pDiag)) <= Matrix->AbsThreshold) continue; /* for loop */ /* Test to see if diagonal's magnitude is acceptable. */ LargestInCol = FindBiggestInColExclude( Matrix, pDiag, Step ); if (Magnitude <= Matrix->RelThreshold * LargestInCol) continue; /* for loop */ if (*pMarkowitzProduct < MinMarkowitzProduct) { /* Notice strict inequality in test. This is a new smallest MarkowitzProduct. */ ChosenPivot = pDiag; MinMarkowitzProduct = *pMarkowitzProduct; RatioOfAccepted = LargestInCol / Magnitude; NumberOfTies = 0; } else { /* This case handles Markowitz ties. */ NumberOfTies++; Ratio = LargestInCol / Magnitude; if (Ratio < RatioOfAccepted) { ChosenPivot = pDiag; RatioOfAccepted = Ratio; } if (NumberOfTies >= MinMarkowitzProduct * TIES_MULTIPLIER) return ChosenPivot; } } /* End of for(Step) */ return ChosenPivot; } #endif /* DIAGONAL_PIVOTING */ /* * SEARCH ENTIRE MATRIX FOR BEST PIVOT * * Performs a search over the entire matrix looking for the acceptable * element with the lowest MarkowitzProduct. If there are several that * are tied for the smallest MarkowitzProduct, the tie is broken by using * the ratio of the magnitude of the element being considered to the largest * element in the same column. If no element is acceptable then the largest * element in the reduced submatrix is used as the pivot and the * matrix is declared to be spSMALL_PIVOT. If the largest element is * zero, the matrix is declared to be spSINGULAR. * * >>> Returned: * A pointer to the diagonal element chosen to be pivot. If no element is * found, then NULL is returned and the matrix is spSINGULAR. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to matrix. * Step (int) * Index of the diagonal currently being eliminated. * * >>> Local variables: * ChosenPivot (ElementPtr) * Pointer to the element that has been chosen to be the pivot. * LargestElementMag (RealNumber) * Magnitude of the largest element yet found in the reduced submatrix. * Size (int) * Local version of Size; placed in a for speed. * Magnitude (RealNumber) * Absolute value of diagonal element. * MinMarkowitzProduct (long) * Smallest Markowitz product found of pivot candidates which are * acceptable. * NumberOfTies (int) * A count of the number of Markowitz ties that have occurred at current * MarkowitzProduct. * pElement (ElementPtr) * Pointer to current element. * pLargestElement (ElementPtr) * Pointer to the largest element yet found in the reduced submatrix. * Product (long) * Markowitz product for the current row and column. * Ratio (RealNumber) * For the current pivot candidate, Ratio is the * Ratio of the largest element in its column to its magnitude. * RatioOfAccepted (RealNumber) * For the best pivot candidate found so far, RatioOfAccepted is the * Ratio of the largest element in its column to its magnitude. * * >>> Possible errors: * spSINGULAR * spSMALL_PIVOT */ static ElementPtr SearchEntireMatrix( MatrixPtr Matrix, int Step ) { int I, Size = Matrix->Size; ElementPtr pElement; int NumberOfTies = 0; long Product, MinMarkowitzProduct; ElementPtr ChosenPivot; ElementPtr pLargestElement = NULL; RealNumber Magnitude, LargestElementMag, Ratio; RealNumber RatioOfAccepted = 0; RealNumber LargestInCol; /* Begin `SearchEntireMatrix'. */ ChosenPivot = NULL; LargestElementMag = 0.0; MinMarkowitzProduct = LARGEST_LONG_INTEGER; /* Start search of matrix on column by column basis. */ for (I = Step; I <= Size; I++) { pElement = Matrix->FirstInCol[I]; while (pElement != NULL && pElement->Row < Step) pElement = pElement->NextInCol; if((LargestInCol = FindLargestInCol(pElement)) == 0.0) continue; /* for loop */ while (pElement != NULL) { /* Check to see if element is the largest encountered so far. If so, record its magnitude and address. */ if ((Magnitude = ELEMENT_MAG(pElement)) > LargestElementMag) { LargestElementMag = Magnitude; pLargestElement = pElement; } /* Calculate element's MarkowitzProduct. */ Product = Matrix->MarkowitzRow[pElement->Row] * Matrix->MarkowitzCol[pElement->Col]; /* Test to see if element is acceptable as a pivot candidate. */ if ((Product <= MinMarkowitzProduct) && (Magnitude > Matrix->RelThreshold * LargestInCol) && (Magnitude > Matrix->AbsThreshold)) { /* Test to see if element has lowest MarkowitzProduct yet found, or whether it is tied with an element found earlier. */ if (Product < MinMarkowitzProduct) { /* Notice strict inequality in test. This is a new smallest MarkowitzProduct. */ ChosenPivot = pElement; MinMarkowitzProduct = Product; RatioOfAccepted = LargestInCol / Magnitude; NumberOfTies = 0; } else { /* This case handles Markowitz ties. */ NumberOfTies++; Ratio = LargestInCol / Magnitude; if (Ratio < RatioOfAccepted) { ChosenPivot = pElement; RatioOfAccepted = Ratio; } if (NumberOfTies >= MinMarkowitzProduct * TIES_MULTIPLIER) return ChosenPivot; } } pElement = pElement->NextInCol; } /* End of while(pElement != NULL) */ } /* End of for(Step) */ if (ChosenPivot != NULL) return ChosenPivot; if (LargestElementMag == 0.0) { Matrix->Error = spSINGULAR; return NULL; } Matrix->Error = spSMALL_PIVOT; return pLargestElement; } /* * DETERMINE THE MAGNITUDE OF THE LARGEST ELEMENT IN A COLUMN * * This routine searches a column and returns the magnitude of the * largest element. This routine begins the search at the element * pointed to by pElement, the parameter. * * The search is conducted by starting at the element specified by a * pointer, which should be one below the diagonal, and moving down * the column. On the way down the column, the magnitudes of the * elements are tested to see if they are the largest yet found. * * >>> Returned: * The magnitude of the largest element in the column below and including * the one pointed to by the input parameter. * * >>> Arguments: * pElement (ElementPtr) * The pointer to the first element to be tested. Also, used by the * routine to access all lower elements in the column. * * >>> Local variables: * Largest (RealNumber) * The magnitude of the largest element. * Magnitude (RealNumber) * The magnitude of the currently active element. */ static RealNumber FindLargestInCol( ElementPtr pElement ) { RealNumber Magnitude, Largest = 0.0; /* Begin `FindLargestInCol'. */ /* Search column for largest element beginning at Element. */ while (pElement != NULL) { if ((Magnitude = ELEMENT_MAG(pElement)) > Largest) Largest = Magnitude; pElement = pElement->NextInCol; } return Largest; } /* * DETERMINE THE MAGNITUDE OF THE LARGEST ELEMENT IN A COLUMN * EXCLUDING AN ELEMENT * * This routine searches a column and returns the magnitude of the largest * element. One given element is specifically excluded from the search. * * The search is conducted by starting at the first element in the column * and moving down the column until the active part of the matrix is entered, * i.e. the reduced submatrix. The rest of the column is then traversed * looking for the largest element. * * >>> Returned: * The magnitude of the largest element in the active portion of the column, * excluding the specified element, is returned. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to the matrix. * pElement (ElementPtr) * The pointer to the element that is to be excluded from search. Column * to be searched is one that contains this element. Also used to * access the elements in the column. * Step (int) * Index of the diagonal currently being eliminated. Indicates where * the active part of the matrix begins. * * >>> Local variables: * Col (int) * The number of the column to be searched. Also the column number of * the element to be avoided in the search. * Largest (RealNumber) * The magnitude of the largest element. * Magnitude (RealNumber) * The magnitude of the currently active element. * Row (int) * The row number of element to be excluded from the search. */ static RealNumber FindBiggestInColExclude( MatrixPtr Matrix, ElementPtr pElement, int Step ) { int Row; int Col; RealNumber Largest, Magnitude; /* Begin `FindBiggestInColExclude'. */ Row = pElement->Row; Col = pElement->Col; pElement = Matrix->FirstInCol[Col]; /* Travel down column until reduced submatrix is entered. */ while ((pElement != NULL) && (pElement->Row < Step)) pElement = pElement->NextInCol; /* Initialize the variable Largest. */ if (pElement->Row != Row) Largest = ELEMENT_MAG(pElement); else Largest = 0.0; /* Search rest of column for largest element, avoiding excluded element. */ while ((pElement = pElement->NextInCol) != NULL) { if ((Magnitude = ELEMENT_MAG(pElement)) > Largest) { if (pElement->Row != Row) Largest = Magnitude; } } return Largest; } /* * EXCHANGE ROWS AND COLUMNS * * Exchanges two rows and two columns so that the selected pivot is moved to * the upper left corner of the remaining submatrix. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to the matrix. * pPivot (ElementPtr) * Pointer to the current pivot. * Step (int) * Index of the diagonal currently being eliminated. * * >>> Local variables: * Col (int) * Column where the pivot was found. * Row (int) * Row where the pivot was found. * OldMarkowitzProd_Col (long) * Markowitz product associated with the diagonal element in the row * the pivot was found in. * OldMarkowitzProd_Row (long) * Markowitz product associated with the diagonal element in the column * the pivot was found in. * OldMarkowitzProd_Step (long) * Markowitz product associated with the diagonal element that is being * moved so that the pivot can be placed in the upper left-hand corner * of the reduced submatrix. */ static void ExchangeRowsAndCols( MatrixPtr Matrix, ElementPtr pPivot, int Step ) { int Row, Col; long OldMarkowitzProd_Step, OldMarkowitzProd_Row, OldMarkowitzProd_Col; /* Begin `ExchangeRowsAndCols'. */ Row = pPivot->Row; Col = pPivot->Col; Matrix->PivotsOriginalRow = Row; Matrix->PivotsOriginalCol = Col; if ((Row == Step) && (Col == Step)) return; /* Exchange rows and columns. */ if (Row == Col) { spcRowExchange( Matrix, Step, Row ); spcColExchange( Matrix, Step, Col ); SWAP( long, Matrix->MarkowitzProd[Step], Matrix->MarkowitzProd[Row] ); SWAP( ElementPtr, Matrix->Diag[Row], Matrix->Diag[Step] ); } else { /* Initialize variables that hold old Markowitz products. */ OldMarkowitzProd_Step = Matrix->MarkowitzProd[Step]; OldMarkowitzProd_Row = Matrix->MarkowitzProd[Row]; OldMarkowitzProd_Col = Matrix->MarkowitzProd[Col]; /* Exchange rows. */ if (Row != Step) { spcRowExchange( Matrix, Step, Row ); Matrix->NumberOfInterchangesIsOdd = !Matrix->NumberOfInterchangesIsOdd; Matrix->MarkowitzProd[Row] = Matrix->MarkowitzRow[Row] * Matrix->MarkowitzCol[Row]; /* Update singleton count. */ if ((Matrix->MarkowitzProd[Row]==0) != (OldMarkowitzProd_Row==0)) { if (OldMarkowitzProd_Row == 0) Matrix->Singletons--; else Matrix->Singletons++; } } /* Exchange columns. */ if (Col != Step) { spcColExchange( Matrix, Step, Col ); Matrix->NumberOfInterchangesIsOdd = !Matrix->NumberOfInterchangesIsOdd; Matrix->MarkowitzProd[Col] = Matrix->MarkowitzCol[Col] * Matrix->MarkowitzRow[Col]; /* Update singleton count. */ if ((Matrix->MarkowitzProd[Col]==0) != (OldMarkowitzProd_Col==0)) { if (OldMarkowitzProd_Col == 0) Matrix->Singletons--; else Matrix->Singletons++; } Matrix->Diag[Col] = spcFindElementInCol( Matrix, Matrix->FirstInCol+Col, Col, Col, NO ); } if (Row != Step) { Matrix->Diag[Row] = spcFindElementInCol( Matrix, Matrix->FirstInCol+Row, Row, Row, NO ); } Matrix->Diag[Step] = spcFindElementInCol( Matrix, Matrix->FirstInCol+Step, Step, Step, NO ); /* Update singleton count. */ Matrix->MarkowitzProd[Step] = Matrix->MarkowitzCol[Step] * Matrix->MarkowitzRow[Step]; if ((Matrix->MarkowitzProd[Step]==0) != (OldMarkowitzProd_Step==0)) { if (OldMarkowitzProd_Step == 0) Matrix->Singletons--; else Matrix->Singletons++; } } return; } /* * EXCHANGE ROWS * * Performs all required operations to exchange two rows. Those operations * include: swap FirstInRow pointers, fixing up the NextInCol pointers, * swapping rowstrchres in MatrixElements, and swapping Markowitz row * counts. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to the matrix. * Row1 (int) * Rowstrchr of one of the rows, becomes the smalleststrchr. * Row2 (int) * Rowstrchr of the other row, becomes the largeststrchr. * * Local variables: * Column (int) * Column in which row elements are currently being exchanged. * Row1Ptr (ElementPtr) * Pointer to an element in Row1. * Row2Ptr (ElementPtr) * Pointer to an element in Row2. * Element1 (ElementPtr) * Pointer to the element in Row1 to be exchanged. * Element2 (ElementPtr) * Pointer to the element in Row2 to be exchanged. */ void spcRowExchange( MatrixPtr Matrix, int Row1, int Row2 ) { ElementPtr Row1Ptr, Row2Ptr; int Column; ElementPtr Element1, Element2; /* Begin `spcRowExchange'. */ if (Row1 > Row2) SWAP(int, Row1, Row2); Row1Ptr = Matrix->FirstInRow[Row1]; Row2Ptr = Matrix->FirstInRow[Row2]; while (Row1Ptr != NULL || Row2Ptr != NULL) { /* Exchange elements in rows while traveling from left to right. */ if (Row1Ptr == NULL) { Column = Row2Ptr->Col; Element1 = NULL; Element2 = Row2Ptr; Row2Ptr = Row2Ptr->NextInRow; } else if (Row2Ptr == NULL) { Column = Row1Ptr->Col; Element1 = Row1Ptr; Element2 = NULL; Row1Ptr = Row1Ptr->NextInRow; } else if (Row1Ptr->Col < Row2Ptr->Col) { Column = Row1Ptr->Col; Element1 = Row1Ptr; Element2 = NULL; Row1Ptr = Row1Ptr->NextInRow; } else if (Row1Ptr->Col > Row2Ptr->Col) { Column = Row2Ptr->Col; Element1 = NULL; Element2 = Row2Ptr; Row2Ptr = Row2Ptr->NextInRow; } else { /* Row1Ptr->Col == Row2Ptr->Col */ Column = Row1Ptr->Col; Element1 = Row1Ptr; Element2 = Row2Ptr; Row1Ptr = Row1Ptr->NextInRow; Row2Ptr = Row2Ptr->NextInRow; } ExchangeColElements( Matrix, Row1, Element1, Row2, Element2, Column); } /* end of while(Row1Ptr != NULL || Row2Ptr != NULL) */ if (Matrix->InternalVectorsAllocated) SWAP( int, Matrix->MarkowitzRow[Row1], Matrix->MarkowitzRow[Row2]); SWAP( ElementPtr, Matrix->FirstInRow[Row1], Matrix->FirstInRow[Row2]); SWAP( int, Matrix->IntToExtRowMap[Row1], Matrix->IntToExtRowMap[Row2]); #if TRANSLATE Matrix->ExtToIntRowMap[ Matrix->IntToExtRowMap[Row1] ] = Row1; Matrix->ExtToIntRowMap[ Matrix->IntToExtRowMap[Row2] ] = Row2; #endif return; } /* * EXCHANGE COLUMNS * * Performs all required operations to exchange two columns. Those operations * include: swap FirstInCol pointers, fixing up the NextInRow pointers, * swapping columnstrchres in MatrixElements, and swapping Markowitz * column counts. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to the matrix. * Col1 (int) * Columnstrchr of one of the columns, becomes the smalleststrchr. * Col2 (int) * Columnstrchr of the other column, becomes the largeststrchr * * Local variables: * Row (int) * Row in which column elements are currently being exchanged. * Col1Ptr (ElementPtr) * Pointer to an element in Col1. * Col2Ptr (ElementPtr) * Pointer to an element in Col2. * Element1 (ElementPtr) * Pointer to the element in Col1 to be exchanged. * Element2 (ElementPtr) * Pointer to the element in Col2 to be exchanged. */ void spcColExchange( MatrixPtr Matrix, int Col1, int Col2 ) { ElementPtr Col1Ptr, Col2Ptr; int Row; ElementPtr Element1, Element2; /* Begin `spcColExchange'. */ if (Col1 > Col2) SWAP(int, Col1, Col2); Col1Ptr = Matrix->FirstInCol[Col1]; Col2Ptr = Matrix->FirstInCol[Col2]; while (Col1Ptr != NULL || Col2Ptr != NULL) { /* Exchange elements in rows while traveling from top to bottom. */ if (Col1Ptr == NULL) { Row = Col2Ptr->Row; Element1 = NULL; Element2 = Col2Ptr; Col2Ptr = Col2Ptr->NextInCol; } else if (Col2Ptr == NULL) { Row = Col1Ptr->Row; Element1 = Col1Ptr; Element2 = NULL; Col1Ptr = Col1Ptr->NextInCol; } else if (Col1Ptr->Row < Col2Ptr->Row) { Row = Col1Ptr->Row; Element1 = Col1Ptr; Element2 = NULL; Col1Ptr = Col1Ptr->NextInCol; } else if (Col1Ptr->Row > Col2Ptr->Row) { Row = Col2Ptr->Row; Element1 = NULL; Element2 = Col2Ptr; Col2Ptr = Col2Ptr->NextInCol; } else { /* Col1Ptr->Row == Col2Ptr->Row */ Row = Col1Ptr->Row; Element1 = Col1Ptr; Element2 = Col2Ptr; Col1Ptr = Col1Ptr->NextInCol; Col2Ptr = Col2Ptr->NextInCol; } ExchangeRowElements( Matrix, Col1, Element1, Col2, Element2, Row); } /* end of while(Col1Ptr != NULL || Col2Ptr != NULL) */ if (Matrix->InternalVectorsAllocated) SWAP( int, Matrix->MarkowitzCol[Col1], Matrix->MarkowitzCol[Col2]); SWAP( ElementPtr, Matrix->FirstInCol[Col1], Matrix->FirstInCol[Col2]); SWAP( int, Matrix->IntToExtColMap[Col1], Matrix->IntToExtColMap[Col2]); #if TRANSLATE Matrix->ExtToIntColMap[ Matrix->IntToExtColMap[Col1] ] = Col1; Matrix->ExtToIntColMap[ Matrix->IntToExtColMap[Col2] ] = Col2; #endif return; } /* * EXCHANGE TWO ELEMENTS IN A COLUMN * * Performs all required operations to exchange two elements in a column. * Those operations are: restring NextInCol pointers and swapping rowstrchres * in the MatrixElements. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to the matrix. * Row1 (int) * Row of top element to be exchanged. * Element1 (ElementPtr) * Pointer to top element to be exchanged. * Row2 (int) * Row of bottom element to be exchanged. * Element2 (ElementPtr) * Pointer to bottom element to be exchanged. * Column (int) * Column that exchange is to take place in. * * >>> Local variables: * ElementAboveRow1 (ElementPtr *) * Location of pointer which points to the element above Element1. This * pointer is modified so that it points to correct element on exit. * ElementAboveRow2 (ElementPtr *) * Location of pointer which points to the element above Element2. This * pointer is modified so that it points to correct element on exit. * ElementBelowRow1 (ElementPtr) * Pointer to element below Element1. * ElementBelowRow2 (ElementPtr) * Pointer to element below Element2. * pElement (ElementPtr) * Pointer used to traverse the column. */ static void ExchangeColElements( MatrixPtr Matrix, int Row1, ElementPtr Element1, int Row2, ElementPtr Element2, int Column ) { ElementPtr *ElementAboveRow1, *ElementAboveRow2; ElementPtr ElementBelowRow1, ElementBelowRow2; ElementPtr pElement; /* Begin `ExchangeColElements'. */ /* Search to find the ElementAboveRow1. */ ElementAboveRow1 = &(Matrix->FirstInCol[Column]); pElement = *ElementAboveRow1; while (pElement->Row < Row1) { ElementAboveRow1 = &(pElement->NextInCol); pElement = *ElementAboveRow1; } if (Element1 != NULL) { ElementBelowRow1 = Element1->NextInCol; if (Element2 == NULL) { /* Element2 does not exist, move Element1 down to Row2. */ if ( ElementBelowRow1 != NULL && ElementBelowRow1->Row < Row2 ) { /* Element1 must be removed from linked list and moved. */ *ElementAboveRow1 = ElementBelowRow1; /* Search column for Row2. */ pElement = ElementBelowRow1; do { ElementAboveRow2 = &(pElement->NextInCol); pElement = *ElementAboveRow2; } while (pElement != NULL && pElement->Row < Row2); /* Place Element1 in Row2. */ *ElementAboveRow2 = Element1; Element1->NextInCol = pElement; *ElementAboveRow1 =ElementBelowRow1; } Element1->Row = Row2; } else { /* Element2 does exist, and the two elements must be exchanged. */ if ( ElementBelowRow1->Row == Row2) { /* Element2 is just below Element1, exchange them. */ Element1->NextInCol = Element2->NextInCol; Element2->NextInCol = Element1; *ElementAboveRow1 = Element2; } else { /* Element2 is not just below Element1 and must be searched for. */ pElement = ElementBelowRow1; do { ElementAboveRow2 = &(pElement->NextInCol); pElement = *ElementAboveRow2; } while (pElement->Row < Row2); ElementBelowRow2 = Element2->NextInCol; /* Switch Element1 and Element2. */ *ElementAboveRow1 = Element2; Element2->NextInCol = ElementBelowRow1; *ElementAboveRow2 = Element1; Element1->NextInCol = ElementBelowRow2; } Element1->Row = Row2; Element2->Row = Row1; } } else { /* Element1 does not exist. */ ElementBelowRow1 = pElement; /* Find Element2. */ if (ElementBelowRow1->Row != Row2) { do { ElementAboveRow2 = &(pElement->NextInCol); pElement = *ElementAboveRow2; } while (pElement->Row < Row2); ElementBelowRow2 = Element2->NextInCol; /* Move Element2 to Row1. */ *ElementAboveRow2 = Element2->NextInCol; *ElementAboveRow1 = Element2; Element2->NextInCol = ElementBelowRow1; } Element2->Row = Row1; } return; } /* * EXCHANGE TWO ELEMENTS IN A ROW * * Performs all required operations to exchange two elements in a row. * Those operations are: restring NextInRow pointers and swapping column * strchres in the MatrixElements. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to the matrix. * Col1 (int) * Col of left-most element to be exchanged. * Element1 (ElementPtr) * Pointer to left-most element to be exchanged. * Col2 (int) * Col of right-most element to be exchanged. * Element2 (ElementPtr) * Pointer to right-most element to be exchanged. * Row (int) * Row that exchange is to take place in. * * >>> Local variables: * ElementLeftOfCol1 (ElementPtr *) * Location of pointer which points to the element to the left of * Element1. This pointer is modified so that it points to correct * element on exit. * ElementLeftOfCol2 (ElementPtr *) * Location of pointer which points to the element to the left of * Element2. This pointer is modified so that it points to correct * element on exit. * ElementRightOfCol1 (ElementPtr) * Pointer to element right of Element1. * ElementRightOfCol2 (ElementPtr) * Pointer to element right of Element2. * pElement (ElementPtr) * Pointer used to traverse the row. */ static void ExchangeRowElements( MatrixPtr Matrix, int Col1, ElementPtr Element1, int Col2, ElementPtr Element2, int Row ) { ElementPtr *ElementLeftOfCol1, *ElementLeftOfCol2; ElementPtr ElementRightOfCol1, ElementRightOfCol2; ElementPtr pElement; /* Begin `ExchangeRowElements'. */ /* Search to find the ElementLeftOfCol1. */ ElementLeftOfCol1 = &(Matrix->FirstInRow[Row]); pElement = *ElementLeftOfCol1; while (pElement->Col < Col1) { ElementLeftOfCol1 = &(pElement->NextInRow); pElement = *ElementLeftOfCol1; } if (Element1 != NULL) { ElementRightOfCol1 = Element1->NextInRow; if (Element2 == NULL) { /* Element2 does not exist, move Element1 to right to Col2. */ if ( ElementRightOfCol1 != NULL && ElementRightOfCol1->Col < Col2 ) { /* Element1 must be removed from linked list and moved. */ *ElementLeftOfCol1 = ElementRightOfCol1; /* Search Row for Col2. */ pElement = ElementRightOfCol1; do { ElementLeftOfCol2 = &(pElement->NextInRow); pElement = *ElementLeftOfCol2; } while (pElement != NULL && pElement->Col < Col2); /* Place Element1 in Col2. */ *ElementLeftOfCol2 = Element1; Element1->NextInRow = pElement; *ElementLeftOfCol1 =ElementRightOfCol1; } Element1->Col = Col2; } else { /* Element2 does exist, and the two elements must be exchanged. */ if ( ElementRightOfCol1->Col == Col2) { /* Element2 is just right of Element1, exchange them. */ Element1->NextInRow = Element2->NextInRow; Element2->NextInRow = Element1; *ElementLeftOfCol1 = Element2; } else { /* Element2 is not just right of Element1 and must be searched for. */ pElement = ElementRightOfCol1; do { ElementLeftOfCol2 = &(pElement->NextInRow); pElement = *ElementLeftOfCol2; } while (pElement->Col < Col2); ElementRightOfCol2 = Element2->NextInRow; /* Switch Element1 and Element2. */ *ElementLeftOfCol1 = Element2; Element2->NextInRow = ElementRightOfCol1; *ElementLeftOfCol2 = Element1; Element1->NextInRow = ElementRightOfCol2; } Element1->Col = Col2; Element2->Col = Col1; } } else { /* Element1 does not exist. */ ElementRightOfCol1 = pElement; /* Find Element2. */ if (ElementRightOfCol1->Col != Col2) { do { ElementLeftOfCol2 = &(pElement->NextInRow); pElement = *ElementLeftOfCol2; } while (pElement->Col < Col2); ElementRightOfCol2 = Element2->NextInRow; /* Move Element2 to Col1. */ *ElementLeftOfCol2 = Element2->NextInRow; *ElementLeftOfCol1 = Element2; Element2->NextInRow = ElementRightOfCol1; } Element2->Col = Col1; } return; } /* * PERFORM ROW AND COLUMN ELIMINATION ON REAL MATRIX * * Eliminates a single row and column of the matrix and leaves single row of * the upper triangular matrix and a single column of the lower triangular * matrix in its wake. Uses Gauss's method. * * >>> Argument: * Matrix (MatrixPtr) * Pointer to the matrix. * pPivot (ElementPtr) * Pointer to the current pivot. * * >>> Local variables: * pLower (ElementPtr) * Points to matrix element in lower triangular column. * pSub (ElementPtr) * Points to elements in the reduced submatrix. * Row (int) * Rowstrchr. * pUpper (ElementPtr) * Points to matrix element in upper triangular row. * * >>> Possible errors: * spNO_MEMORY */ static void RealRowColElimination( MatrixPtr Matrix, ElementPtr pPivot ) { ElementPtr pSub; int Row; ElementPtr pLower, pUpper; /* Begin `RealRowColElimination'. */ /* Test for zero pivot. */ if (ABS(pPivot->Real) == 0.0) { (void)MatrixIsSingular( Matrix, pPivot->Row ); return; } pPivot->Real = 1.0 / pPivot->Real; pUpper = pPivot->NextInRow; while (pUpper != NULL) { /* Calculate upper triangular element. */ pUpper->Real *= pPivot->Real; pSub = pUpper->NextInCol; pLower = pPivot->NextInCol; while (pLower != NULL) { Row = pLower->Row; /* Find element in row that lines up with current lower triangular element. */ while (pSub != NULL && pSub->Row < Row) pSub = pSub->NextInCol; /* Test to see if desired element was not found, if not, create fill-in. */ if (pSub == NULL || pSub->Row > Row) { pSub = CreateFillin( Matrix, Row, pUpper->Col ); if (pSub == NULL) { Matrix->Error = spNO_MEMORY; return; } } pSub->Real -= pUpper->Real * pLower->Real; pSub = pSub->NextInCol; pLower = pLower->NextInCol; } pUpper = pUpper->NextInRow; } return; } /* * PERFORM ROW AND COLUMN ELIMINATION ON COMPLEX MATRIX * * Eliminates a single row and column of the matrix and leaves single row of * the upper triangular matrix and a single column of the lower triangular * matrix in its wake. Uses Gauss's method. * * >>> Argument: * Matrix (MatrixPtr) * Pointer to the matrix. * pPivot (ElementPtr) * Pointer to the current pivot. * * >>> Local variables: * pLower (ElementPtr) * Points to matrix element in lower triangular column. * pSub (ElementPtr) * Points to elements in the reduced submatrix. * Row (int) * Rowstrchr. * pUpper (ElementPtr) * Points to matrix element in upper triangular row. * * Possible errors: * spNO_MEMORY */ static void ComplexRowColElimination( MatrixPtr Matrix, ElementPtr pPivot ) { ElementPtr pSub; int Row; ElementPtr pLower, pUpper; /* Begin `ComplexRowColElimination'. */ /* Test for zero pivot. */ if (ELEMENT_MAG(pPivot) == 0.0) { (void)MatrixIsSingular( Matrix, pPivot->Row ); return; } CMPLX_RECIPROCAL(*pPivot, *pPivot); pUpper = pPivot->NextInRow; while (pUpper != NULL) { /* Calculate upper triangular element. */ /* Cmplx expr: *pUpper = *pUpper * (1.0 / *pPivot). */ CMPLX_MULT_ASSIGN(*pUpper, *pPivot); pSub = pUpper->NextInCol; pLower = pPivot->NextInCol; while (pLower != NULL) { Row = pLower->Row; /* Find element in row that lines up with current lower triangular element. */ while (pSub != NULL && pSub->Row < Row) pSub = pSub->NextInCol; /* Test to see if desired element was not found, if not, create fill-in. */ if (pSub == NULL || pSub->Row > Row) { pSub = CreateFillin( Matrix, Row, pUpper->Col ); if (pSub == NULL) { Matrix->Error = spNO_MEMORY; return; } } /* Cmplx expr: pElement -= *pUpper * pLower. */ CMPLX_MULT_SUBT_ASSIGN(*pSub, *pUpper, *pLower); pSub = pSub->NextInCol; pLower = pLower->NextInCol; } pUpper = pUpper->NextInRow; } return; } /* * UPDATE MARKOWITZ NUMBERS * * Updates the Markowitz numbers after a row and column have been eliminated. * Also updates singleton count. * * >>> Argument: * Matrix (MatrixPtr) * Pointer to the matrix. * pPivot (ElementPtr) * Pointer to the current pivot. * * >>> Local variables: * Row (int) * Rowstrchr. * Col (int) * Columnstrchr. * ColPtr (ElementPtr) * Points to matrix element in upper triangular column. * RowPtr (ElementPtr) * Points to matrix element in lower triangular row. */ static void UpdateMarkowitzNumbers( MatrixPtr Matrix, ElementPtr pPivot ) { int Row, Col; ElementPtr ColPtr, RowPtr; int *MarkoRow = Matrix->MarkowitzRow; int *MarkoCol = Matrix->MarkowitzCol; double Product; /* Begin `UpdateMarkowitzNumbers'. */ /* Update Markowitz numbers. */ for (ColPtr = pPivot->NextInCol; ColPtr != NULL; ColPtr = ColPtr->NextInCol) { Row = ColPtr->Row; --MarkoRow[Row]; /* Form Markowitz product while being cautious of overflows. */ if ((MarkoRow[Row] > LARGEST_SHORT_INTEGER && MarkoCol[Row] != 0) || (MarkoCol[Row] > LARGEST_SHORT_INTEGER && MarkoRow[Row] != 0)) { Product = MarkoCol[Row] * MarkoRow[Row]; if (Product >= LARGEST_LONG_INTEGER) Matrix->MarkowitzProd[Row] = LARGEST_LONG_INTEGER; else Matrix->MarkowitzProd[Row] = (long)Product; } else Matrix->MarkowitzProd[Row] = MarkoRow[Row] * MarkoCol[Row]; if (MarkoRow[Row] == 0) Matrix->Singletons++; } for (RowPtr = pPivot->NextInRow; RowPtr != NULL; RowPtr = RowPtr->NextInRow) { Col = RowPtr->Col; --MarkoCol[Col]; /* Form Markowitz product while being cautious of overflows. */ if ((MarkoRow[Col] > LARGEST_SHORT_INTEGER && MarkoCol[Col] != 0) || (MarkoCol[Col] > LARGEST_SHORT_INTEGER && MarkoRow[Col] != 0)) { Product = MarkoCol[Col] * MarkoRow[Col]; if (Product >= LARGEST_LONG_INTEGER) Matrix->MarkowitzProd[Col] = LARGEST_LONG_INTEGER; else Matrix->MarkowitzProd[Col] = (long)Product; } else Matrix->MarkowitzProd[Col] = MarkoRow[Col] * MarkoCol[Col]; if ((MarkoCol[Col] == 0) && (MarkoRow[Col] != 0)) Matrix->Singletons++; } return; } /* * CREATE FILL-IN * * This routine is used to create fill-ins and splice them into the * matrix. * * >>> Returns: * Pointer to fill-in. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to the matrix. * Col (int) * Columnstrchr for element. * Row (int) * Rowstrchr for element. * * >>> Local variables: * pElement (ElementPtr) * Pointer to an element in the matrix. * ppElementAbove (ElementPtr *) * This contains the address of the pointer to the element just above the * one being created. It is used to speed the search and it is updated * with address of the created element. * * >>> Possible errors: * spNO_MEMORY */ static ElementPtr CreateFillin( MatrixPtr Matrix, int Row, int Col ) { ElementPtr pElement, *ppElementAbove; /* Begin `CreateFillin'. */ /* Find Element above fill-in. */ ppElementAbove = &Matrix->FirstInCol[Col]; pElement = *ppElementAbove; while (pElement != NULL) { if (pElement->Row < Row) { ppElementAbove = &pElement->NextInCol; pElement = *ppElementAbove; } else break; /* while loop */ } /* End of search, create the element. */ pElement = spcCreateElement( Matrix, Row, Col, ppElementAbove, YES ); /* Update Markowitz counts and products. */ Matrix->MarkowitzProd[Row] = ++Matrix->MarkowitzRow[Row] * Matrix->MarkowitzCol[Row]; if ((Matrix->MarkowitzRow[Row] == 1) && (Matrix->MarkowitzCol[Row] != 0)) Matrix->Singletons--; Matrix->MarkowitzProd[Col] = ++Matrix->MarkowitzCol[Col] * Matrix->MarkowitzRow[Col]; if ((Matrix->MarkowitzRow[Col] != 0) && (Matrix->MarkowitzCol[Col] == 1)) Matrix->Singletons--; return pElement; } /* * ZERO PIVOT ENCOUNTERED * * This routine is called when a singular matrix is found. It then * records the current row and column and exits. * * >>> Returned: * The error code spSINGULAR or spZERO_DIAG is returned. * * >>> Arguments: * Matrix (MatrixPtr) * Pointer to matrix. * Step (int) * Index of diagonal that is zero. */ static int MatrixIsSingular( MatrixPtr Matrix, int Step ) { /* Begin `MatrixIsSingular'. */ Matrix->SingularRow = Matrix->IntToExtRowMap[ Step ]; Matrix->SingularCol = Matrix->IntToExtColMap[ Step ]; return (Matrix->Error = spSINGULAR); } static int ZeroPivot( MatrixPtr Matrix, int Step ) { /* Begin `ZeroPivot'. */ Matrix->SingularRow = Matrix->IntToExtRowMap[ Step ]; Matrix->SingularCol = Matrix->IntToExtColMap[ Step ]; return (Matrix->Error = spZERO_DIAG); } #if (ANNOTATE == FULL) /* * * WRITE STATUS * * Write a summary of important variables to standard output. */ static void WriteStatus( MatrixPtr Matrix, int Step ) { int I; /* Begin `WriteStatus'. */ printf("Step = %1d ", Step); printf("Pivot found at %1d,%1d using ", Matrix->PivotsOriginalRow, Matrix->PivotsOriginalCol); switch(Matrix->PivotSelectionMethod) { case 's': printf("SearchForSingleton\n"); break; case 'q': printf("QuicklySearchDiagonal\n"); break; case 'd': printf("SearchDiagonal\n"); break; case 'e': printf("SearchEntireMatrix\n"); break; } printf("MarkowitzRow = "); for (I = 1; I <= Matrix->Size; I++) printf("%2d ", Matrix->MarkowitzRow[I]); printf("\n"); printf("MarkowitzCol = "); for (I = 1; I <= Matrix->Size; I++) printf("%2d ", Matrix->MarkowitzCol[I]); printf("\n"); printf("MarkowitzProduct = "); for (I = 1; I <= Matrix->Size; I++) printf("%2d ", Matrix->MarkowitzProd[I]); printf("\n"); printf("Singletons = %2d\n", Matrix->Singletons); printf("IntToExtRowMap = "); for (I = 1; I <= Matrix->Size; I++) printf("%2d ", Matrix->IntToExtRowMap[I]); printf("\n"); printf("IntToExtColMap = "); for (I = 1; I <= Matrix->Size; I++) printf("%2d ", Matrix->IntToExtColMap[I]); printf("\n"); printf("ExtToIntRowMap = "); for (I = 1; I <= Matrix->ExtSize; I++) printf("%2d ", Matrix->ExtToIntRowMap[I]); printf("\n"); printf("ExtToIntColMap = "); for (I = 1; I <= Matrix->ExtSize; I++) printf("%2d ", Matrix->ExtToIntColMap[I]); printf("\n\n"); return; } #endif /* ANNOTATE == FULL */ tmpk8ny_4pz/src/maths/misc/0000755000175000017500000000000013546075722016016 5ustar carstencarstentmpk8ny_4pz/src/maths/misc/bernoull.h0000644000175000017500000000037013546075722020011 0ustar carstencarsten/********** (C) Paolo Nenzi 2001 **********/ /* * Bernoulli function */ #ifndef ngspice_BERNOULL_H #define ngspice_BERNOULL_H extern void bernoulli (double, double *, double *, double *, double *, BOOLEAN); #endif tmpk8ny_4pz/src/maths/misc/Makefile.am0000644000175000017500000000064413546075722020056 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libmathmisc.la libmathmisc_la_SOURCES = \ accuracy.c \ accuracy.h \ bernoull.h \ bernoull.c \ equality.c \ isinf.c \ isnan.c \ logb.c \ scalb.c \ norm.h \ norm.c \ randnumb.c EXTRA_DIST = test_accuracy.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/maths/misc/norm.h0000644000175000017500000000045113546075722017142 0ustar carstencarsten/********** (C) Paolo Nenzi 2001 **********/ /* * Bernoulli function */ #ifndef ngspice_NORM_H #define ngspice_NORM_H extern double maxNorm(double *, int); extern double oneNorm(double *, int); extern double l2Norm(double *, int); extern double dot(double *, double *, int); #endif tmpk8ny_4pz/src/maths/misc/equality.c0000644000175000017500000000344513546075722020025 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. **********/ #include "ngspice/ngspice.h" #include #include #ifdef _MSC_VER #define llabs(x) ((x) < 0 ? -(x) : (x)) #endif #define int64_min INT64_MIN /* From Bruce Dawson, Comparing floating point numbers, http://www.cygnus-software.com/papers/comparingfloats/Comparing%20floating%20point%20numbers.htm Original this function is named AlmostEqual2sComplement but we leave it to AlmostEqualUlps and can leave the code (measure.c, dctran.c) unchanged. The transformation to the 2's complement prevent problems around 0.0. One Ulp is equivalent to a maxRelativeError of between 1/4,000,000,000,000,000 and 1/8,000,000,000,000,000. Practical: 3 < maxUlps < some hundred's (or thousand's) - depending on numerical requirements. */ bool AlmostEqualUlps(double A, double B, int maxUlps) { int64_t aInt, bInt, intDiff; union { double d; int64_t i; } uA, uB; if (A == B) return TRUE; /* If not - the entire method can not work */ assert(sizeof(double) == sizeof(int64_t)); /* Make sure maxUlps is non-negative and small enough that the */ /* default NAN won't compare as equal to anything. */ assert(maxUlps > 0 && maxUlps < 4 * 1024 * 1024); uA.d = A; aInt = uA.i; /* Make aInt lexicographically ordered as a twos-complement int */ if (aInt < 0) aInt = int64_min - aInt; uB.d = B; bInt = uB.i; /* Make bInt lexicographically ordered as a twos-complement int */ if (bInt < 0) bInt = int64_min - bInt; intDiff = llabs(aInt - bInt); /* printf("A:%e B:%e aInt:%d bInt:%d diff:%d\n", A, B, aInt, bInt, intDiff); */ if (intDiff <= maxUlps) return TRUE; return FALSE; } tmpk8ny_4pz/src/maths/misc/accuracy.h0000644000175000017500000000106513546075722017763 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors: 1987 Karti Mayaram, 1991 David Gates **********/ #ifndef ngspice_ACCURACY_H #define ngspice_ACCURACY_H /* * Definitions of Globals for Machine Accuracy Limits */ extern double BMin; /* lower limit for B(x) */ extern double BMax; /* upper limit for B(x) */ extern double ExpLim; /* limit for exponential */ extern double Accuracy; /* accuracy of the machine */ extern double MuLim, MutLim; extern void evalAccLimits(void); #endif tmpk8ny_4pz/src/maths/misc/norm.c0000644000175000017500000000252613546075722017142 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "norm.h" /* functions to compute max and one norms of a given vector of doubles */ double maxNorm(double *vector, int size) { double norm = 0.0; double candidate; int index; for( index = 1; index <= size; index++ ) { candidate = fabs(vector[ index ]); if( candidate > norm ) { norm = candidate; } } return( norm ); } double oneNorm(double *vector, int size) { double norm = 0.0; double value; int index; for( index = 1; index <= size; index++ ) { value = vector[ index ]; if( value < 0.0 ) norm -= value; else norm += value; } return( norm ); } double l2Norm(double *vector, int size) { double norm = 0.0; double value; int index; for( index = 1; index <= size; index++ ) { value = vector[ index ]; norm += value * value; } norm = sqrt( norm ); return( norm ); } /* * dot(): * computes dot product of two vectors */ double dot(double *vector1, double *vector2, int size) { register double dot = 0.0; register int index; for( index = 1; index <= size; index++ ) { dot += vector1[ index ] * vector2[ index ]; } return( dot ); } tmpk8ny_4pz/src/maths/misc/scalb.c0000644000175000017500000000114413546075722017246 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. **********/ #include "ngspice/ngspice.h" #ifndef HAVE_SCALBN double scalbn(double x, int n) { double y, z = 1.0, k = 2.0; if (n < 0) { n = -n; k = 0.5; } if (x != 0.0) for (y = 1.0; n; n >>= 1) { y *= k; if (n & 1) z *= y; } return x * z; } #else /* HAVE_SCALBN */ int Dummy_Symbol_1; #endif /* HAVE_SCALBN */ #ifndef HAVE_SCALB double scalb(double x, double n) { return scalbn(x, (int) n); } #else /* HAVE_SCALB */ int Dummy_Symbol_2; #endif /* HAVE_SCALB */ tmpk8ny_4pz/src/maths/misc/accuracy.c0000644000175000017500000001165513546075722017764 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Modified: 2001 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "accuracy.h" /* XXX Globals are hiding here. * All globals have been moved to main.c were all true globals * should reside. May be in the future that the machine dependent * global symbols will be gathered into a structure. * * Paolo Nenzi 2002 */ /* * void * evalAccLimits(void) * * This function computes the floating point accuracy on your machine. * This part of the code is critical and will affect the result of * CIDER simulator. CIDER uses directly some constants calculated here * while SPICE does not (yet), but remember that spice runs on the same * machine that runs CIDER and uses the same floating point implementation. * * A note to x86 Linux users: * * Intel processors (from i386 up to the latest Pentiums) do FP calculations * in two ways: * 53-bit mantissa mode (64 bits overall) * 64-bit mantissa mode (80 bits overall) * * The 53-bit mantissa mode conforms to the IEEE 754 standard (double * precision), the other (64-bit mantissa mode) does not conform to * IEEE 754, butlet programmers to use the higher precision "long double" * data type. * * Now the problem: the x86 FPU can be in on mode only, therefore is * not possible to have IEEE conformant double and "long double" data * type at the same time. You have to choose which one you prefer. * * Linux developers decided that was better to give "long double" to * programmers that to provide a standard "double" implementation and, * by default, Linux set the FPU in 64 bit mantissa mode. FreeBSD, on * the other side, adopt the opposite solution : the FPU is in 53 bit * mantissa mode. * * Since no one but the programmers really knows what a program requires, * the final decision on the FPU mode of operation is left to her/him. * It is possible to alter the FPU mode of operation using instruction * produced by the operating system. * * Thanks to AMAKAWA Shuhei for the information on x86 FPU Linux and * freeBSD on which the above text was derived. * Paolo Nenzi 2002. */ void evalAccLimits(void) { double acc = 1.0; double xl = 0.0; double xu = 1.0; double xh, x1, x2, expLim; double muLim, temp1, temp2, temp3, temp4; double xhold, dif; /* Introduced to avoid numerical trap if using non IEEE754 FPU */ /* First we compute accuracy */ for( ; (acc + 1.0) > 1.0 ; ) { acc *= 0.5; } acc *= 2.0; Accuracy = acc; /* * This loop has been modified to include a variable to track * xh change. If it does not change, we exit the loop. This is * an ugly countermeasure to avoid infinite cycling when in * x86 64-bit mantissa mode. * * Paolo Nenzi 2002 */ xh = 0.5 * (xl + xu); for( ; (xu-xl > (2.0 * acc * (xu + xl))); ) { x1 = 1.0 / ( 1.0 + (0.5 * xh) ); x2 = xh / ( exp(xh) - 1.0 ); if( (x1 - x2) <= (acc * (x1 + x2))) { xl = xh; xhold = xh; } else { xu = xh; xhold = xh; } xh = 0.5 * (xl + xu); dif = fabs(xhold - xh); if (dif <= DBL_EPSILON) break; } BMin = xh; BMax = -log( acc ); /* * This loop calculate the maximum exponent x for * which the function exp(-x) returns a value greater * than 0. The result is used to prevent underflow * on large negative arguments to exponential. * AFAIK: used only in Bernoulli function. */ expLim = 80.0; for( ; exp( -expLim ) > 0.0; ) { expLim += 1.0; } expLim -= 1.0; ExpLim = expLim; /* * What this loop does ??? */ muLim = 1.0; temp4 = 0.0; for( ; 1.0 - temp4 > acc; ){ muLim *= 0.5; temp1 = muLim; temp2 = pow( temp1 , 0.333 ) ; temp3 = 1.0 / (1.0 + temp1 * temp2 ); temp4 = pow( temp3 , 0.37/1.333 ); } muLim *= 2.0; MuLim = muLim; muLim = 1.0; temp3 = 0.0; for( ; 1.0 - temp3 > acc; ){ muLim *= 0.5; temp1 = muLim; temp2 = 1.0 / (1.0 + temp1 * temp1 ); temp3 = sqrt( temp2 ); } muLim *= 2.0; MutLim = muLim; } /* * Other misterious code. * Berkeley's people love to leave spare code for info archeologists. * main () { double x; double bx, dbx, bMx, dbMx; evalAccLimits(); for( x = 0.0; x <= 100.0 ; x += 1.0 ) { bernoulliNew( x, &bx, &dbx, &bMx, &dbMx, 1); printf( "\nbernoulliNew: x = %e bx = %e dbx = %e bMx = %e dbMx = %e ", x, bx, dbx, bMx, dbMx ); bernoulli( x, &bx, &dbx, &bMx, &dbMx); printf( "\nbernoulli: x = %e bx = %e dbx = %e bMx = %e dbMx = %e ", x, bx, dbx, bMx, dbMx ); } for( x = 0.0; x >= -100.0 ; x -= 1.0 ) { bernoulliNew( x, &bx, &dbx, &bMx, &dbMx, 1); printf( "\nbernoulliNew: x = %e bx = %e dbx = %e bMx = %e dbMx = %e ", x, bx, dbx, bMx, dbMx ); bernoulli( x, &bx, &dbx, &bMx, &dbMx); printf( "\nbernoulli: x = %e bx = %e dbx = %e bMx = %e dbMx = %e ", x, bx, dbx, bMx, dbMx ); } } */ tmpk8ny_4pz/src/maths/misc/logb.c0000644000175000017500000000066513546075722017114 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. **********/ #include "ngspice/ngspice.h" #ifndef HAVE_LOGB double logb(double x) { double y = 0.0; if (x != 0.0) { if (x < 0.0) x = - x; while (x > 2.0) { y += 1.0; x /= 2.0; } while (x < 1.0) { y -= 1.0; x *= 2.0; } } else y = 0.0; return y; } #else int Dummy_Symbol_3; #endif tmpk8ny_4pz/src/maths/misc/test_accuracy.c0000644000175000017500000000224413546075722021015 0ustar carstencarsten/* Paolo Nenzi 2002 - This program tests some machine * dependent variables. */ /* Nota: * * Compilare due volte nel seguente modo: * * gcc test_accuracy.c -o test_64accuracy -lm * gcc -DIEEEDOUBLE test_accuracy.c -o test_53accuracy -lm * */ #include #include #include #include int main (void) { fpu_control_t prec; double acc=1.0; double xl = 0.0; double xu = 1.0; double xh, x1, x2; double xhold =0.0; #ifdef IEEEDOUBLE _FPU_GETCW(prec); prec &= ~_FPU_EXTENDED; prec |= _FPU_DOUBLE; _FPU_SETCW(prec); #endif for( ; (acc + 1.0) > 1.0 ; ) { acc *= 0.5; } acc *= 2.0; printf("Accuracy: %e\n", acc); printf("------------------------------------------------------------------\n"); xh = 0.5 * (xl + xu); for( ; (xu-xl > (2.0 * acc * (xu + xl))); ) { x1 = 1.0 / ( 1.0 + (0.5 * xh) ); x2 = xh / ( exp(xh) - 1.0 ); if( (x1 - x2) <= (acc * (x1 + x2))) { xl = xh; xhold = xh; } else { xu = xh; xhold = xh; } xh = 0.5 * (xl + xu); /* if (xhold == xh) break; */ } printf("xu-xl: %e \t cond: %e \t xh: %e\n", (xu-xl), (2.0 * acc * (xu + xl)), xh); exit(1); } tmpk8ny_4pz/src/maths/misc/randnumb.c0000644000175000017500000002330013546075722017766 0ustar carstencarsten/********** Copyright 2008 Holger Vogt **********/ /* Care about random numbers The seed value is set as random number in main.c, line 746. A fixed seed value may be set by 'set rndseed=value'. */ /* CombLCGTaus() Combined Tausworthe & LCG random number generator Algorithm has been suggested in: GPUGems 3, Addison Wesley, 2008, Chapter 37. It combines a three component Tausworthe generator taus88 (see P. L’Ecuyer: "Maximally equidistributed combined Tausworthe generators", Mathematics of Computation, 1996, http://www.iro.umontreal.ca/~lecuyer/myftp/papers/tausme.ps ) and a quick linear congruent generator (LCG), decribed in: Press: "Numerical recipes in C", Cambridge, 1992, p. 284. Generator has passed the bbattery_SmallCrush(gen) test of the TestU01 library from Pierre L’Ecuyer and Richard Simard, http://www.iro.umontreal.ca/~simardr/testu01/tu01.html */ /* TausSeed creates three start values for Tausworthe state variables. Uses rand() from , therefore values depend on the value of seed in srand(seed). A constant seed will result in a reproducible series of random variates. Calling sequence: srand(seed); TausSeed(); double randvar = CombLCGTaus(void); */ //#define HVDEBUG #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/randnumb.h" #include #include #include #ifdef _MSC_VER #include #else #include #endif #include // var. argumente /* Tausworthe state variables for double variates*/ static unsigned CombState1 = 129, CombState2 = 130, CombState3 = 131; static unsigned CombState4 = 132; /* LCG state variable */ /* Tausworthe state variables for integer variates*/ static unsigned CombState5 = 133, CombState6 = 135, CombState7 = 137; static unsigned CombState8 = 138; /* LCG state variable */ static unsigned TauS(unsigned *state, int C1, int C2, int C3, unsigned m); static unsigned LGCS(unsigned *state, unsigned A1, unsigned A2); double CombLCGTaus(void); float CombLCGTaus2(void); void rgauss(double* py1, double* py2); static bool seedinfo = FALSE; /* Check if a seed has been set by the command 'set rndseed=value' in spinit, .spiceinit or in a .control section with integer value > 0. If available, call srand(value). rndseed set in main.c to 1, if no 'set rndseed=val' is given. Called from functions in cmath2.c. */ void checkseed(void) { int newseed; static int oldseed; /* printf("Enter checkseed()\n"); */ if (cp_getvar("rndseed", CP_NUM, &newseed, 0)) { if ((newseed > 0) && (oldseed != newseed)) { srand((unsigned int)newseed); TausSeed(); if (oldseed > 0) /* no printout upon start-up */ printf("Seed value for random number generator is set to %d\n", newseed); oldseed = newseed; } } } /* uniform random number generator, interval [-1 .. +1[ */ double drand(void) { return 2.0 * CombLCGTaus() - 1.0; } void TausSeed(void) { /* The Tausworthe initial states should be greater than 128. We restrict the values up to 32767. Here we use the standard random functions srand, called in main.c upon ngspice startup or later in fcn checkseed(), rand() and the maximum return value RAND_MAX*/ CombState1 = (unsigned int)((double)rand()/(double)RAND_MAX * 32638.) + 129; CombState2 = (unsigned int)((double)rand()/(double)RAND_MAX * 32638.) + 129; CombState3 = (unsigned int)((double)rand()/(double)RAND_MAX * 32638.) + 129; CombState4 = (unsigned int)((double)rand()/(double)RAND_MAX * 32638.) + 129; CombState5 = (unsigned int)((double)rand()/(double)RAND_MAX * 32638.) + 129; CombState6 = (unsigned int)((double)rand()/(double)RAND_MAX * 32638.) + 129; CombState7 = (unsigned int)((double)rand()/(double)RAND_MAX * 32638.) + 129; CombState8 = (unsigned int)((double)rand()/(double)RAND_MAX * 32638.) + 129; #ifdef HVDEBUG printf("\nTausworthe Double generator init states: %d, %d, %d, %d\n", CombState1, CombState2, CombState3, CombState4); printf("Tausworthe Integer generator init states: %d, %d, %d, %d\n", CombState5, CombState6, CombState7, CombState8); #endif } static unsigned TauS(unsigned *state, int C1, int C2, int C3, unsigned m) { unsigned b = (((*state << C1) ^ *state) >> C2); return *state = (((*state & m) << C3) ^ b); } static unsigned LGCS(unsigned *state, unsigned A1, unsigned A2) { return *state = (A1 * *state + A2); } /* generate random variates randvar uniformly distributed in [0.0 .. 1.0[ by calls to CombLCGTaus() like: double randvar = CombLCGTaus(); */ double CombLCGTaus(void) { return 2.3283064365387e-10 * ( TauS(&CombState1, 13, 19, 12, 4294967294UL) ^ TauS(&CombState2, 2, 25, 4, 4294967288UL) ^ TauS(&CombState3, 3, 11, 17, 4294967280UL) ^ LGCS(&CombState4, 1664525, 1013904223UL) ); } /* generate random variates randvarint uniformly distributed in [0 .. 4294967296[ (32 bit unsigned int) by calls to CombLCGTausInt() like: unsigned int randvarint = CombLCGTausInt(); */ unsigned int CombLCGTausInt(void) { return ( TauS(&CombState5, 13, 19, 12, 4294967294UL) ^ TauS(&CombState6, 2, 25, 4, 4294967288UL) ^ TauS(&CombState7, 3, 11, 17, 4294967280UL) ^ LGCS(&CombState8, 1664525, 1013904223UL) ); } /* test versions of the generators listed above */ float CombLCGTaus2(void) { unsigned long b; b = (((CombState1 << 13) ^ CombState1) >> 19); CombState1 = (unsigned int)(((CombState1 & 4294967294UL) << 12) ^ b); b = (((CombState2 << 2) ^ CombState2) >> 25); CombState2 = (unsigned int)(((CombState2 & 4294967288UL) << 4) ^ b); b = (((CombState3 << 3) ^ CombState3) >> 11); CombState3 = (unsigned int)(((CombState3 & 4294967280UL) << 17) ^ b); CombState4 = (unsigned int)(1664525 * CombState4 + 1013904223UL); return ((float)(CombState1 ^ CombState2 ^ CombState3 ^ CombState4) * 2.3283064365387e-10f); } unsigned int CombLCGTausInt2(void) { unsigned long b; b = (((CombState5 << 13) ^ CombState5) >> 19); CombState5 = (unsigned int)(((CombState5 & 4294967294UL) << 12) ^ b); b = (((CombState6 << 2) ^ CombState6) >> 25); CombState6 = (unsigned int)(((CombState6 & 4294967288UL) << 4) ^ b); b = (((CombState7 << 3) ^ CombState7) >> 11); CombState7 = (unsigned int)(((CombState7 & 4294967280UL) << 17) ^ b); CombState8 = (unsigned int)(1664525 * CombState8 + 1013904223UL); return (CombState5 ^ CombState6 ^ CombState7 ^ CombState8); } /*** gauss *** for speed reasons get two values per pass */ double gauss0(void) { static bool gliset = TRUE; static double glgset = 0.0; double fac,r,v1,v2; if (gliset) { do { v1 = 2.0 * CombLCGTaus() - 1.0; v2 = 2.0 * CombLCGTaus() - 1.0; r = v1*v1 + v2*v2; } while (r >= 1.0); /* printf("v1 %f, v2 %f\n", v1, v2); */ fac = sqrt(-2.0 * log(r) / r); glgset = v1 * fac; gliset = FALSE; return v2 * fac; } else { gliset = TRUE; return glgset; } } /*** gauss *** to be reproducible, we just use one value per pass */ double gauss1(void) { double fac, r, v1, v2; do { v1 = 2.0 * CombLCGTaus() - 1.0; v2 = 2.0 * CombLCGTaus() - 1.0; r = v1 * v1 + v2 * v2; } while (r >= 1.0); /* printf("v1 %f, v2 %f\n", v1, v2); */ fac = sqrt(-2.0 * log(r) / r); return v2 * fac; } /* Polar form of the Box-Muller generator for Gaussian distributed random variates. Generator will be fed with two uniformly distributed random variates. Delivers two values per call */ void rgauss(double* py1, double* py2) { double x1, x2, w; do { x1 = 2.0 * CombLCGTaus() - 1.0; x2 = 2.0 * CombLCGTaus() - 1.0; w = x1 * x1 + x2 * x2; } while ( w >= 1.0 ); w = sqrt( (-2.0 * log( w ) ) / w ); *py1 = x1 * w; *py2 = x2 * w; } /** Code by: Inexpensive http://everything2.com/title/Generating+random+numbers+with+a+Poisson+distribution **/ int poisson(double lambda) { int k=0; //Counter const int max_k = 1000; //k upper limit double p = CombLCGTaus(); //uniform random number double P = exp(-lambda); //probability double sum=P; //cumulant if (sum>=p) return 0; //done allready for (k=1; k=p) break; //Leave loop } return k; //return random number } /* return an exponentially distributed random number */ double exprand(double mean) { double expval; expval = -log(CombLCGTaus()) * mean; return expval; } /* seed random number generators immediately * command "setseed" * take value of variable rndseed as seed * command "setseed " * seed with number */ void com_sseed(wordlist *wl) { int newseed; if (wl == NULL) { if (!cp_getvar("rndseed", CP_NUM, &newseed, 0)) { newseed = getpid(); cp_vset("rndseed", CP_NUM, &newseed); } srand((unsigned int)newseed); TausSeed(); } else if ((sscanf(wl->wl_word, " %d ", &newseed) != 1) || (newseed <= 0) || (newseed > INT_MAX)) { fprintf(cp_err, "\nWarning: Cannot use %s as seed!\n" " Command 'setseed %s' ignored.\n\n", wl->wl_word, wl->wl_word); return; } else { srand((unsigned int)newseed); TausSeed(); cp_vset("rndseed", CP_NUM, &newseed); } if (seedinfo) printf("\nSeed value for random number generator is set to %d\n", newseed); } void setseedinfo(void) { seedinfo = TRUE; } tmpk8ny_4pz/src/maths/misc/isnan.c0000644000175000017500000000203613546075722017273 0ustar carstencarsten#include "ngspice/ngspice.h" #if !HAVE_DECL_ISNAN #ifndef HAVE_ISNAN /* isnan (originally) for SOI devices in MINGW32 hvogt (dev.c) */ union ieee754_double { double d; /* This is the IEEE 754 double-precision format. */ struct { /* Together these comprise the mantissa. */ unsigned int mantissa1:32; unsigned int mantissa0:20; unsigned int exponent:11; unsigned int negative:1; } ieee; struct { /* Together these comprise the mantissa. */ unsigned int mantissa1:32; unsigned int mantissa0:19; unsigned int quiet_nan:1; unsigned int exponent:11; unsigned int negative:1; } ieee_nan; }; int isnan(double value) { union ieee754_double u; u.d = value; /* IEEE 754 NaN's have the maximum possible exponent and a nonzero mantissa. */ return ((u.ieee.exponent & 0x7ff) == 0x7ff && (u.ieee.mantissa0 != 0 || u.ieee.mantissa1 != 0)); } /* * end isnan.c */ #else /* HAVE_ISNAN */ int Dummy_Symbol_4; #endif /* HAVE_ISNAN */ #endif /* HAVE_DECL_ISNAN */ tmpk8ny_4pz/src/maths/misc/bernoull.c0000644000175000017500000000334013546075722020004 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "accuracy.h" #include "bernoull.h" /* * this function computes the bernoulli function * f(x) = x / ( exp (x) - 1 ) and its derivatives. the function * f(-x) alongwith its derivative is also computed. */ /* * input delta-psi * outputs f(x), df(x)/dx, f(-x), and df(-x)/dx */ void bernoulli (double x, double *pfx, double *pDfxDx, double *pfMx, double *pDfMxDx, BOOLEAN derivAlso) { double fx, fMx; double dFxDx = 0.0; double dFMxDx = 0.0; double expX, temp; if( x <= -BMax ) { fx = -x; if( x <= -ExpLim ) { fMx = 0.0; if( derivAlso ) { dFxDx = -1.0; dFMxDx = 0.0; } } else { expX = exp( x ); fMx = -x * expX; if( derivAlso ) { dFxDx = fMx - 1.0; dFMxDx = -expX * ( 1.0 + x ); } } } else if ( ABS( x) <= BMin ) { fx = 1.0 / (1.0 + 0.5 * x ); fMx = 1.0 / (1.0 - 0.5 * x ); if( derivAlso ) { temp = 1.0 + x; dFxDx = -(0.5 + x / 3.0) / temp; dFMxDx = (0.5 + 2 * x /3.0 )/ temp; } } else if ( x >= BMax ) { fMx = x; if( x >= ExpLim ) { fx = 0.0; if( derivAlso ) { dFxDx = 0.0; dFMxDx = 1.0; } } else { expX = exp( -x ); fx = x * expX; if( derivAlso ) { dFxDx = expX * ( 1.0 - x ); dFMxDx = 1.0 - fx; } } } else { expX = exp( x ); temp = 1.0 / ( expX - 1.0 ); fx = x * temp; fMx = expX * fx; if( derivAlso ) { dFxDx = temp * ( 1.0 - fMx ); dFMxDx = temp * ( expX - fMx ); } } *pfx = fx; *pfMx = fMx; *pDfxDx = dFxDx; *pDfMxDx = dFMxDx; } tmpk8ny_4pz/src/maths/misc/isinf.c0000644000175000017500000000107713546075722017277 0ustar carstencarsten#include "ngspice/ngspice.h" #if !HAVE_DECL_ISINF #ifndef HAVE_ISINF #if defined(HAVE_FINITE) /* not the best replacement - see missing_math.h */ int isinf(double x) { return !finite(x) && x==x; } #else /* HAVE_FINITE */ /* this is really ugly - but it is a emergency case */ static int isinf (const double x) { double y = x - x; int s = (y != y); if (s && x > 0) return +1; else if (s && x < 0) return -1; else return 0; } #endif /* HAVE_FINITE */ #else /* HAVE_ISINF */ int Dummy_Symbol_7; #endif /* HAVE_ISINF */ #endif /* HAVE_DECL_ISINF */ tmpk8ny_4pz/src/maths/poly/0000755000175000017500000000000013546075722016046 5ustar carstencarstentmpk8ny_4pz/src/maths/poly/Makefile.am0000644000175000017500000000055713546075722020111 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libpoly.la libpoly_la_SOURCES = \ interpolate.c \ interpolate.h \ polyfit.c \ polyfit.h \ polyderiv.c \ polyderiv.h \ polyeval.c \ polyeval.h EXTRA_DIST = poly.h AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/maths/poly/polyderiv.h0000644000175000017500000000016013546075722020231 0ustar carstencarsten#ifndef ngspice_POLYDERIV_H #define ngspice_POLYDERIV_H void ft_polyderiv(double *coeffs, int degree); #endif tmpk8ny_4pz/src/maths/poly/polyderiv.c0000644000175000017500000000023513546075722020227 0ustar carstencarsten#include "polyderiv.h" void ft_polyderiv(double *coeffs, int degree) { int i; for (i = 0; i < degree; i++) { coeffs[i] = (i + 1) * coeffs[i + 1]; } } tmpk8ny_4pz/src/maths/poly/polyeval.c0000644000175000017500000000044613546075722020051 0ustar carstencarsten#include "polyeval.h" double ft_peval(double x, double *coeffs, int degree) { double y; int i; if (!coeffs) return 0.0; /* XXX Should not happen */ y = coeffs[degree]; /* there are (degree+1) coeffs */ for (i = degree - 1; i >= 0; i--) { y *= x; y += coeffs[i]; } return y; } tmpk8ny_4pz/src/maths/poly/interpolate.c0000644000175000017500000000724313546075722020546 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "interpolate.h" #include "polyeval.h" #include "polyfit.h" /* Returns thestrchr of the last element that was calculated. oval is * the value of the old scale at the end of the interval that is being * interpolated from, and sign is 1 if the old scale was increasing, * and -1 if it was decreasing. */ static int putinterval(double *poly, int degree, double *nvec, int last, double *nscale, int nlen, double oval, int sign) { int end, i; /* See how far we have to go. */ for (end = last + 1; end < nlen; end++) if (nscale[end] * sign > oval * sign) break; end--; for (i = last + 1; i <= end; i++) nvec[i] = ft_peval(nscale[i], poly, degree); return (end); } /* Interpolate data from oscale to nscale. data is assumed to be olen long, * ndata will be nlen long. Returns FALSE if the scales are too strange * to deal with. Note that we are guaranteed that either both scales are * strictly increasing or both are strictly decreasing. */ bool ft_interpolate(double *data, double *ndata, double *oscale, int olen, double *nscale, int nlen, int degree) { double *result, *scratch, *xdata, *ydata; int sign, lastone, i, l; if ((olen < 2) || (nlen < 2)) { fprintf(cp_err, "Error: lengths too small to interpolate.\n"); return (FALSE); } if ((degree < 1) || (degree > olen)) { fprintf(cp_err, "Error: degree is %d, can't interpolate.\n", degree); return (FALSE); } if (oscale[1] < oscale[0]) sign = -1; else sign = 1; scratch = TMALLOC(double, (degree + 1) * (degree + 2)); result = TMALLOC(double, degree + 1); xdata = TMALLOC(double, degree + 1); ydata = TMALLOC(double, degree + 1); /* Deal with the first degree pieces. */ memcpy(ydata, data, (size_t) (degree + 1) * sizeof (double)); memcpy(xdata, oscale, (size_t) (degree + 1) * sizeof (double)); while (!ft_polyfit(xdata, ydata, result, degree, scratch)) { /* If it doesn't work this time, bump the interpolation * degree down by one. */ if (--degree == 0) { fprintf(cp_err, "ft_interpolate: Internal Error.\n"); return (FALSE); } } /* Add this part of the curve. What we do is evaluate the polynomial * at those points between the last one and the one that is greatest, * without being greater than the leftmost old scale point, or least * if the scale is decreasing at the end of the interval we are looking * at. */ lastone = -1; for (i = 0; i < degree; i++) { lastone = putinterval(result, degree, ndata, lastone, nscale, nlen, xdata[i], sign); } /* Now plot the rest, piece by piece. l is the * last element under consideration. */ for (l = degree + 1; l < olen; l++) { /* Shift the old stuff by one and get another value. */ for (i = 0; i < degree; i++) { xdata[i] = xdata[i + 1]; ydata[i] = ydata[i + 1]; } ydata[i] = data[l]; xdata[i] = oscale[l]; while (!ft_polyfit(xdata, ydata, result, degree, scratch)) { if (--degree == 0) { fprintf(cp_err, "interpolate: Internal Error.\n"); return (FALSE); } } lastone = putinterval(result, degree, ndata, lastone, nscale, nlen, xdata[i], sign); } if (lastone < nlen - 1) /* ??? */ ndata[nlen - 1] = data[olen - 1]; tfree(scratch); tfree(xdata); tfree(ydata); tfree(result); return (TRUE); } tmpk8ny_4pz/src/maths/poly/interpolate.h0000644000175000017500000000032213546075722020542 0ustar carstencarsten#ifndef ngspice_INTERPOLATE_H #define ngspice_INTERPOLATE_H #include "ngspice/bool.h" bool ft_interpolate(double *data, double *ndata, double *oscale, int olen, double *nscale, int nlen, int degree); #endif tmpk8ny_4pz/src/maths/poly/polyfit.h0000644000175000017500000000026613546075722017711 0ustar carstencarsten#ifndef ngspice_POLYFIT_H #define ngspice_POLYFIT_H #include "ngspice/bool.h" bool ft_polyfit(double *xdata, double *ydata, double *result, int degree, double *scratch); #endif tmpk8ny_4pz/src/maths/poly/ChangeLog0000644000175000017500000000026413546075722017622 0ustar carstencarsten2000-10-13 Arno W. Peters * polyfit.c: Input matrix got overwritten too soon, leading to NaN results for Fourier Analysis. Fix due to Daniele Gordini. tmpk8ny_4pz/src/maths/poly/poly.h0000644000175000017500000000030713546075722017202 0ustar carstencarsten/* The public interface to the polygon library. */ #ifndef ngspice_POLY_H #define ngspice_POLY_H #include "interpolate.h" #include "polyderiv.h" #include "polyeval.h" #include "polyfit.h" #endif tmpk8ny_4pz/src/maths/poly/polyfit.c0000644000175000017500000000733113546075722017704 0ustar carstencarsten#include "ngspice/ngspice.h" #include "polyfit.h" #include "polyeval.h" /* Takes n = (degree+1) doubles, and fills in result with the n * coefficients of the polynomial that will fit them. It also takes a * pointer to an array of n ^ 2 + n doubles to use for scratch -- we * want to make this fast and avoid doing tmallocs for each call. */ bool ft_polyfit(double *xdata, double *ydata, double *result, int degree, double *scratch) { double *mat1 = scratch; int l, k, j, i; int n = degree + 1; double *mat2 = scratch + n * n; /* XXX These guys are hacks! */ double d; /* speed up fitting process, e.g. for command 'linearize' */ if (degree == 1) { result[0] = (xdata[1] * ydata[0] - xdata[0] * ydata[1]) / (xdata[1] - xdata[0]); result[1] = (ydata[1] - ydata[0]) / (xdata[1] - xdata[0]); return (TRUE); } memset(result, 0, (size_t) (n) * sizeof(double)); memset(mat1, 0, (size_t) (n * n) * sizeof(double)); memcpy(mat2, ydata, (size_t) (n) * sizeof(double)); /* Fill in the matrix with x^k for 0 <= k <= degree for each point */ l = 0; for (i = 0; i < n; i++) { d = 1.0; for (j = 0; j < n; j++) { mat1[l] = d; d *= xdata[i]; l += 1; } } /* Do Gauss-Jordan elimination on mat1. */ for (i = 0; i < n; i++) { int lindex; double largest; /* choose largest pivot */ for (j=i, largest = mat1[i * n + i], lindex = i; j < n; j++) { if (fabs(mat1[j * n + i]) > largest) { largest = fabs(mat1[j * n + i]); lindex = j; } } if (lindex != i) { /* swap rows i and lindex */ for (k = 0; k < n; k++) { SWAP(double, mat1[i * n + k], mat1[lindex * n + k]); } SWAP(double, mat2[i], mat2[lindex]); } /* Make sure we have a non-zero pivot. */ if (mat1[i * n + i] == 0.0) { /* this should be rotated. */ return (FALSE); } for (j = i + 1; j < n; j++) { d = mat1[j * n + i] / mat1[i * n + i]; for (k = 0; k < n; k++) mat1[j * n + k] -= d * mat1[i * n + k]; mat2[j] -= d * mat2[i]; } } for (i = n - 1; i > 0; i--) for (j = i - 1; j >= 0; j--) { d = mat1[j * n + i] / mat1[i * n + i]; for (k = 0; k < n; k++) mat1[j * n + k] -= d * mat1[i * n + k]; mat2[j] -= d * mat2[i]; } /* Now write the stuff into the result vector. */ for (i = 0; i < n; i++) { result[i] = mat2[i] / mat1[i * n + i]; /* printf(cp_err, "result[%d] = %G\n", i, result[i]);*/ } #define ABS_TOL 0.001 #define REL_TOL 0.001 /* Let's check and make sure the coefficients are ok. If they aren't, * just return FALSE. This is not the best way to do it. */ for (i = 0; i < n; i++) { d = ft_peval(xdata[i], result, degree); if (fabs(d - ydata[i]) > ABS_TOL) { /* fprintf(cp_err, "Error: polyfit: x = %e, y = %le, int = %e\n", xdata[i], ydata[i], d); printmat("mat1", mat1, n, n); printmat("mat2", mat2, n, 1); */ return (FALSE); } else if (fabs(d - ydata[i]) / (fabs(d) > ABS_TOL ? fabs(d) : ABS_TOL) > REL_TOL) { /* fprintf(cp_err, "Error: polyfit: x = %e, y = %le, int = %e\n", xdata[i], ydata[i], d); printmat("mat1", mat1, n, n); printmat("mat2", mat2, n, 1); */ return (FALSE); } } return (TRUE); } tmpk8ny_4pz/src/maths/poly/polyeval.h0000644000175000017500000000016613546075722020055 0ustar carstencarsten#ifndef ngspice_POLYEVAL_H #define ngspice_POLYEVAL_H double ft_peval(double x, double *coeffs, int degree); #endif tmpk8ny_4pz/src/maths/cmaths/0000755000175000017500000000000013546075722016342 5ustar carstencarstentmpk8ny_4pz/src/maths/cmaths/cmath.h0000644000175000017500000000023413546075722017606 0ustar carstencarsten#ifndef ngspice_CMATH_H #define ngspice_CMATH_H #define alloc_c(len) (TMALLOC(ngcomplex_t, len)) #define alloc_d(len) (TMALLOC(double, len)) #endif tmpk8ny_4pz/src/maths/cmaths/test_cx_mag.c0000644000175000017500000000104513546075722021003 0ustar carstencarsten#include #include "ngspice/config.h" #include "ngspice/memory.h" #include "ngspice/dvec.h" #include "ngspice/complex.h" #include "cmath.h" #include "cmath1.h" FILE *cp_err; int main(void) { ngcomplex_t *c = NULL; double *d = NULL; short int t1; short int t2; int n1; int n2; cp_err = stderr; n1 = 1; t1 = VF_COMPLEX; c = alloc_c(n1); realpart(c[0]) = .0; imagpart(c[0]) = 1.0; d = (double *) cx_mag((void *) c, t1, n1, &n2, &t2); if (d[0] == 1) return 0; else return 1; } tmpk8ny_4pz/src/maths/cmaths/Makefile.am0000644000175000017500000000216713546075722020404 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libcmaths.la libcmaths_la_SOURCES = \ cmath.h \ cmath1.c \ cmath1.h \ cmath2.c \ cmath2.h \ cmath3.c \ cmath3.h \ cmath4.c \ cmath4.h if !TCL_MODULE if !WINGUI if !SHARED_MODULE noinst_PROGRAMS = test_cx_mag test_cx_j test_cx_ph test_cx_cph test_cx_ph_SOURCES = \ test_cx_ph.c test_cx_ph_LDADD = \ libcmaths.la \ ../../misc/libmisc.la \ $(TCL_LIB_SPEC) test_cx_cph_SOURCES = \ test_cx_cph.c test_cx_cph_LDADD = \ libcmaths.la \ ../../misc/libmisc.la \ $(TCL_LIB_SPEC) test_cx_mag_SOURCES = \ test_cx_mag.c test_cx_mag_LDADD = \ libcmaths.la \ ../../misc/libmisc.la \ $(TCL_LIB_SPEC) test_cx_j_SOURCES = \ test_cx_j.c test_cx_j_LDADD = \ libcmaths.la \ ../../misc/libmisc.la \ $(TCL_LIB_SPEC) TESTS = test_cx_mag test_cx_j test_cx_ph test_cx_cph endif !SHARED_MODULE endif !WINGUI endif !TCL_MODULE AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include -I$(top_srcdir)/src/maths/poly AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/maths/cmaths/cmath3.c0000644000175000017500000003030313546075722017664 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Routines to do complex mathematical functions. These routines require * the -lm libraries. We sacrifice a lot of space to be able * to avoid having to do a seperate call for every vector element, * but it pays off in time savings. These routines should never * allow FPE's to happen. * * Complex functions are called as follows: * cx_something(data, type, length, &newlength, &newtype), * and return a char * that is cast to complex or double. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/dvec.h" #include "cmath.h" #include "cmath3.h" static ngcomplex_t *cexp_sp3(ngcomplex_t *c); /* cexp exist's in some newer compiler */ static ngcomplex_t *cln(ngcomplex_t *c); static ngcomplex_t *ctimes(ngcomplex_t *c1, ngcomplex_t *c2); void * cx_divide(void *data1, void *data2, short int datatype1, short int datatype2, int length) { double *dd1 = (double *) data1; double *dd2 = (double *) data2; double *d; ngcomplex_t *cc1 = (ngcomplex_t *) data1; ngcomplex_t *cc2 = (ngcomplex_t *) data2; ngcomplex_t *c, c1, c2; int i; if ((datatype1 == VF_REAL) && (datatype2 == VF_REAL)) { d = alloc_d(length); for (i = 0; i < length; i++) { rcheck(dd2[i] != 0, "divide"); d[i] = dd1[i] / dd2[i]; } return ((void *) d); } else { c = alloc_c(length); for (i = 0; i < length; i++) { if (datatype1 == VF_REAL) { realpart(c1) = dd1[i]; imagpart(c1) = 0.0; } else { c1 = cc1[i]; } if (datatype2 == VF_REAL) { realpart(c2) = dd2[i]; imagpart(c2) = 0.0; } else { c2 = cc2[i]; } rcheck((realpart(c2) != 0) || (imagpart(c2) != 0), "divide"); #define xx5 realpart(c1) #define xx6 imagpart(c1) cdiv(xx5, xx6, realpart(c2), imagpart(c2), realpart(c[i]), imagpart(c[i])); } return ((void *) c); } } /* Should just use "j( )" */ /* The comma operator. What this does (unless it is part of the argument * list of a user-defined function) is arg1 + j(arg2). */ void * cx_comma(void *data1, void *data2, short int datatype1, short int datatype2, int length) { double *dd1 = (double *) data1; double *dd2 = (double *) data2; ngcomplex_t *cc1 = (ngcomplex_t *) data1; ngcomplex_t *cc2 = (ngcomplex_t *) data2; ngcomplex_t *c, c1, c2; int i; c = alloc_c(length); for (i = 0; i < length; i++) { if (datatype1 == VF_REAL) { realpart(c1) = dd1[i]; imagpart(c1) = 0.0; } else { c1 = cc1[i]; } if (datatype2 == VF_REAL) { realpart(c2) = dd2[i]; imagpart(c2) = 0.0; } else { c2 = cc2[i]; } realpart(c[i]) = realpart(c1) + imagpart(c2); imagpart(c[i]) = imagpart(c1) + realpart(c2); } return ((void *) c); } void * cx_power(void *data1, void *data2, short int datatype1, short int datatype2, int length) { double *dd1 = (double *) data1; double *dd2 = (double *) data2; double *d; ngcomplex_t *cc1 = (ngcomplex_t *) data1; ngcomplex_t *cc2 = (ngcomplex_t *) data2; ngcomplex_t *c, c1, c2, *t; int i; if ((datatype1 == VF_REAL) && (datatype2 == VF_REAL)) { d = alloc_d(length); for (i = 0; i < length; i++) { rcheck((dd1[i] >= 0) || (floor(dd2[i]) == ceil(dd2[i])), "power"); d[i] = pow(dd1[i], dd2[i]); } return ((void *) d); } else { c = alloc_c(length); for (i = 0; i < length; i++) { if (datatype1 == VF_REAL) { realpart(c1) = dd1[i]; imagpart(c1) = 0.0; } else { c1 = cc1[i]; } if (datatype2 == VF_REAL) { realpart(c2) = dd2[i]; imagpart(c2) = 0.0; } else { c2 = cc2[i]; } if ((realpart(c1) == 0.0) && (imagpart(c1) == 0.0)) { realpart(c[i]) = 0.0; imagpart(c[i]) = 0.0; } else { /* if ((imagpart(c1) != 0.0) && (imagpart(c2) != 0.0)) */ t = cexp_sp3(ctimes(&c2, cln(&c1))); c[i] = *t; /* } else { realpart(c[i]) = pow(realpart(c1), realpart(c2)); imagpart(c[i]) = 0.0; */ } } return ((void *) c); } } /* These are unnecessary... Only cx_power uses them... */ static ngcomplex_t * cexp_sp3(ngcomplex_t *c) { static ngcomplex_t r; double d; d = exp(realpart(*c)); realpart(r) = d * cos(imagpart(*c)); if (imagpart(*c) != 0.0) imagpart(r) = d * sin(imagpart(*c)); else imagpart(r) = 0.0; return (&r); } static ngcomplex_t * cln(ngcomplex_t *c) { static ngcomplex_t r; rcheck(cmag(*c) != 0, "ln"); realpart(r) = log(cmag(*c)); if (imagpart(*c) != 0.0) imagpart(r) = atan2(imagpart(*c), realpart(*c)); else imagpart(r) = 0.0; return (&r); } static ngcomplex_t * ctimes(ngcomplex_t *c1, ngcomplex_t *c2) { static ngcomplex_t r; realpart(r) = realpart(*c1) * realpart(*c2) - imagpart(*c1) * imagpart(*c2); imagpart(r) = imagpart(*c1) * realpart(*c2) + realpart(*c1) * imagpart(*c2); return (&r); } /* Now come all the relational and logical functions. It's overkill to put * them here, but... Note that they always return a real value, with the * result the same length as the arguments. */ void * cx_eq(void *data1, void *data2, short int datatype1, short int datatype2, int length) { double *dd1 = (double *) data1; double *dd2 = (double *) data2; double *d; ngcomplex_t *cc1 = (ngcomplex_t *) data1; ngcomplex_t *cc2 = (ngcomplex_t *) data2; ngcomplex_t c1, c2; int i; d = alloc_d(length); if ((datatype1 == VF_REAL) && (datatype2 == VF_REAL)) { for (i = 0; i < length; i++) if (dd1[i] == dd2[i]) d[i] = 1.0; else d[i] = 0.0; } else { for (i = 0; i < length; i++) { if (datatype1 == VF_REAL) { realpart(c1) = dd1[i]; imagpart(c1) = 0.0; } else { c1 = cc1[i]; } if (datatype2 == VF_REAL) { realpart(c2) = dd2[i]; imagpart(c2) = 0.0; } else { c2 = cc2[i]; } d[i] = ((realpart(c1) == realpart(c2)) && (imagpart(c1) == imagpart(c2))); } } return ((void *) d); } void * cx_gt(void *data1, void *data2, short int datatype1, short int datatype2, int length) { double *dd1 = (double *) data1; double *dd2 = (double *) data2; double *d; ngcomplex_t *cc1 = (ngcomplex_t *) data1; ngcomplex_t *cc2 = (ngcomplex_t *) data2; ngcomplex_t c1, c2; int i; d = alloc_d(length); if ((datatype1 == VF_REAL) && (datatype2 == VF_REAL)) { for (i = 0; i < length; i++) if (dd1[i] > dd2[i]) d[i] = 1.0; else d[i] = 0.0; } else { for (i = 0; i < length; i++) { if (datatype1 == VF_REAL) { realpart(c1) = dd1[i]; imagpart(c1) = 0.0; } else { c1 = cc1[i]; } if (datatype2 == VF_REAL) { realpart(c2) = dd2[i]; imagpart(c2) = 0.0; } else { c2 = cc2[i]; } d[i] = ((realpart(c1) > realpart(c2)) && (imagpart(c1) > imagpart(c2))); } } return ((void *) d); } void * cx_lt(void *data1, void *data2, short int datatype1, short int datatype2, int length) { double *dd1 = (double *) data1; double *dd2 = (double *) data2; double *d; ngcomplex_t *cc1 = (ngcomplex_t *) data1; ngcomplex_t *cc2 = (ngcomplex_t *) data2; ngcomplex_t c1, c2; int i; d = alloc_d(length); if ((datatype1 == VF_REAL) && (datatype2 == VF_REAL)) { for (i = 0; i < length; i++) if (dd1[i] < dd2[i]) d[i] = 1.0; else d[i] = 0.0; } else { for (i = 0; i < length; i++) { if (datatype1 == VF_REAL) { realpart(c1) = dd1[i]; imagpart(c1) = 0.0; } else { c1 = cc1[i]; } if (datatype2 == VF_REAL) { realpart(c2) = dd2[i]; imagpart(c2) = 0.0; } else { c2 = cc2[i]; } d[i] = ((realpart(c1) < realpart(c2)) && (imagpart(c1) < imagpart(c2))); } } return ((void *) d); } void * cx_ge(void *data1, void *data2, short int datatype1, short int datatype2, int length) { double *dd1 = (double *) data1; double *dd2 = (double *) data2; double *d; ngcomplex_t *cc1 = (ngcomplex_t *) data1; ngcomplex_t *cc2 = (ngcomplex_t *) data2; ngcomplex_t c1, c2; int i; d = alloc_d(length); if ((datatype1 == VF_REAL) && (datatype2 == VF_REAL)) { for (i = 0; i < length; i++) if (dd1[i] >= dd2[i]) d[i] = 1.0; else d[i] = 0.0; } else { for (i = 0; i < length; i++) { if (datatype1 == VF_REAL) { realpart(c1) = dd1[i]; imagpart(c1) = 0.0; } else { c1 = cc1[i]; } if (datatype2 == VF_REAL) { realpart(c2) = dd2[i]; imagpart(c2) = 0.0; } else { c2 = cc2[i]; } d[i] = ((realpart(c1) >= realpart(c2)) && (imagpart(c1) >= imagpart(c2))); } } return ((void *) d); } void * cx_le(void *data1, void *data2, short int datatype1, short int datatype2, int length) { double *dd1 = (double *) data1; double *dd2 = (double *) data2; double *d; ngcomplex_t *cc1 = (ngcomplex_t *) data1; ngcomplex_t *cc2 = (ngcomplex_t *) data2; ngcomplex_t c1, c2; int i; d = alloc_d(length); if ((datatype1 == VF_REAL) && (datatype2 == VF_REAL)) { for (i = 0; i < length; i++) if (dd1[i] <= dd2[i]) d[i] = 1.0; else d[i] = 0.0; } else { for (i = 0; i < length; i++) { if (datatype1 == VF_REAL) { realpart(c1) = dd1[i]; imagpart(c1) = 0.0; } else { c1 = cc1[i]; } if (datatype2 == VF_REAL) { realpart(c2) = dd2[i]; imagpart(c2) = 0.0; } else { c2 = cc2[i]; } d[i] = ((realpart(c1) <= realpart(c2)) && (imagpart(c1) <= imagpart(c2))); } } return ((void *) d); } void * cx_ne(void *data1, void *data2, short int datatype1, short int datatype2, int length) { double *dd1 = (double *) data1; double *dd2 = (double *) data2; double *d; ngcomplex_t *cc1 = (ngcomplex_t *) data1; ngcomplex_t *cc2 = (ngcomplex_t *) data2; ngcomplex_t c1, c2; int i; d = alloc_d(length); if ((datatype1 == VF_REAL) && (datatype2 == VF_REAL)) { for (i = 0; i < length; i++) if (dd1[i] != dd2[i]) d[i] = 1.0; else d[i] = 0.0; } else { for (i = 0; i < length; i++) { if (datatype1 == VF_REAL) { realpart(c1) = dd1[i]; imagpart(c1) = 0.0; } else { c1 = cc1[i]; } if (datatype2 == VF_REAL) { realpart(c2) = dd2[i]; imagpart(c2) = 0.0; } else { c2 = cc2[i]; } d[i] = ((realpart(c1) != realpart(c2)) && (imagpart(c1) != imagpart(c2))); } } return ((void *) d); } tmpk8ny_4pz/src/maths/cmaths/cmath2.c0000644000175000017500000005607713546075722017703 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Routines to do complex mathematical functions. These routines require * the -lm libraries. We sacrifice a lot of space to be able * to avoid having to do a seperate call for every vector element, * but it pays off in time savings. These routines should never * allow FPE's to happen. * * Complex functions are called as follows: * cx_something(data, type, length, &newlength, &newtype), * and return a char * that is cast to complex or double. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/dvec.h" #include "ngspice/randnumb.h" #include "cmath.h" #include "cmath2.h" static double cx_max_local(void *data, short int type, int length) { double largest = 0.0; if (type == VF_COMPLEX) { ngcomplex_t *cc = (ngcomplex_t *) data; int i; for (i = 0; i < length; i++) if (largest < cmag(cc[i])) largest = cmag(cc[i]); } else { double *dd = (double *) data; int i; for (i = 0; i < length; i++) if (largest < fabs(dd[i])) largest = fabs(dd[i]); } return largest; } /* Normalize the data so that the magnitude of the greatest value is 1. */ void * cx_norm(void *data, short int type, int length, int *newlength, short int *newtype) { double largest = 0.0; largest = cx_max_local(data, type, length); if (largest == 0.0) { fprintf(cp_err, "Error: can't normalize a 0 vector\n"); return (NULL); } *newlength = length; if (type == VF_COMPLEX) { ngcomplex_t *c; ngcomplex_t *cc = (ngcomplex_t *) data; int i; c = alloc_c(length); *newtype = VF_COMPLEX; for (i = 0; i < length; i++) { realpart(c[i]) = realpart(cc[i]) / largest; imagpart(c[i]) = imagpart(cc[i]) / largest; } return ((void *) c); } else { double *d; double *dd = (double *) data; int i; d = alloc_d(length); *newtype = VF_REAL; for (i = 0; i < length; i++) d[i] = dd[i] / largest; return ((void *) d); } } void * cx_uminus(void *data, short int type, int length, int *newlength, short int *newtype) { *newlength = length; if (type == VF_COMPLEX) { ngcomplex_t *c; ngcomplex_t *cc = (ngcomplex_t *) data; int i; c = alloc_c(length); *newtype = VF_COMPLEX; for (i = 0; i < length; i++) { realpart(c[i]) = - realpart(cc[i]); imagpart(c[i]) = - imagpart(cc[i]); } return ((void *) c); } else { double *d; double *dd = (double *) data; int i; d = alloc_d(length); *newtype = VF_REAL; for (i = 0; i < length; i++) d[i] = - dd[i]; return ((void *) d); } } /* random integers drawn from a uniform distribution * data in: integer numbers, their absolut values are used, * maximum is RAND_MAX (32767) * data out: random integers in interval [0, data[i][ * standard library function rand() is used */ void * cx_rnd(void *data, short int type, int length, int *newlength, short int *newtype) { *newlength = length; checkseed(); if (type == VF_COMPLEX) { ngcomplex_t *c; ngcomplex_t *cc = (ngcomplex_t *) data; int i; c = alloc_c(length); *newtype = VF_COMPLEX; for (i = 0; i < length; i++) { int j, k; j = (int)floor(realpart(cc[i])); k = (int)floor(imagpart(cc[i])); realpart(c[i]) = j ? rand() % j : 0; imagpart(c[i]) = k ? rand() % k : 0; } return ((void *) c); } else { double *d; double *dd = (double *) data; int i; d = alloc_d(length); *newtype = VF_REAL; for (i = 0; i < length; i++) { int j; j = (int)floor(dd[i]); d[i] = j ? rand() % j : 0; } return ((void *) d); } } /* random numbers drawn from a uniform distribution * data out: random numbers in interval [-1, 1[ */ void * cx_sunif(void *data, short int type, int length, int *newlength, short int *newtype) { NG_IGNORE(data); *newlength = length; checkseed(); if (type == VF_COMPLEX) { ngcomplex_t *c; int i; c = alloc_c(length); *newtype = VF_COMPLEX; for (i = 0; i < length; i++) { realpart(c[i]) = drand(); imagpart(c[i]) = drand(); } return ((void *) c); } else { double *d; int i; d = alloc_d(length); *newtype = VF_REAL; for (i = 0; i < length; i++) { d[i] = drand(); } return ((void *) d); } } /* random numbers drawn from a poisson distribution * data in: lambda * data out: random integers according to poisson distribution, * with lambda given by each vector element */ void * cx_poisson(void *data, short int type, int length, int *newlength, short int *newtype) { *newlength = length; checkseed(); if (type == VF_COMPLEX) { ngcomplex_t *c; ngcomplex_t *cc = (ngcomplex_t *) data; int i; c = alloc_c(length); *newtype = VF_COMPLEX; for (i = 0; i < length; i++) { realpart(c[i]) = poisson (realpart(cc[i])); imagpart(c[i]) = poisson (imagpart(cc[i])); } return ((void *) c); } else { double *d; double *dd = (double *) data; int i; d = alloc_d(length); *newtype = VF_REAL; for (i = 0; i < length; i++) { d[i] = poisson(dd[i]); } return ((void *) d); } } /* random numbers drawn from an exponential distribution * data in: Mean values * data out: exponentially distributed random numbers, * with mean given by each vector element */ void * cx_exponential(void *data, short int type, int length, int *newlength, short int *newtype) { *newlength = length; checkseed(); if (type == VF_COMPLEX) { ngcomplex_t *c; ngcomplex_t *cc = (ngcomplex_t *) data; int i; c = alloc_c(length); *newtype = VF_COMPLEX; for (i = 0; i < length; i++) { realpart(c[i]) = exprand(realpart(cc[i])); imagpart(c[i]) = exprand(imagpart(cc[i])); } return ((void *) c); } else { double *d; double *dd = (double *) data; int i; d = alloc_d(length); *newtype = VF_REAL; for (i = 0; i < length; i++) { d[i] = exprand(dd[i]); } return ((void *) d); } } /* random numbers drawn from a Gaussian distribution mean 0, std dev 1 */ void * cx_sgauss(void *data, short int type, int length, int *newlength, short int *newtype) { NG_IGNORE(data); *newlength = length; checkseed(); if (type == VF_COMPLEX) { ngcomplex_t *c; int i; c = alloc_c(length); *newtype = VF_COMPLEX; for (i = 0; i < length; i++) { realpart(c[i]) = gauss0(); imagpart(c[i]) = gauss0(); } return ((void *) c); } else { double *d; int i; d = alloc_d(length); *newtype = VF_REAL; for (i = 0; i < length; i++) { d[i] = gauss1(); } return ((void *) d); } } /* Compute the avg of a vector. * Created by A.M.Roldan 2005-05-21 */ void * cx_avg(void *data, short int type, int length, int *newlength, short int *newtype) { double sum_real = 0.0, sum_imag = 0.0; int i; if (type == VF_REAL) { double *d = alloc_d(length); double *dd = (double *) data; *newtype = VF_REAL; *newlength = length; for (i = 0; i < length; i++) { sum_real += dd[i]; d[i] = sum_real / ((double) i + 1.0); } return ((void *) d); } else { ngcomplex_t *c = alloc_c(length); ngcomplex_t *cc = (ngcomplex_t *) data; *newtype = VF_COMPLEX; *newlength = length; for (i = 0; i < length; i++) { sum_real += realpart(cc[i]); realpart(c[i]) = sum_real / ((double) i + 1.0); sum_imag += imagpart(cc[i]); imagpart(c[i]) = sum_imag / ((double) i + 1.0); } return ((void *) c); } } /* Compute the mean of a vector. */ void * cx_mean(void *data, short int type, int length, int *newlength, short int *newtype) { *newlength = 1; rcheck(length > 0, "mean"); if (type == VF_REAL) { double *d; double *dd = (double *) data; int i; d = alloc_d(1); *newtype = VF_REAL; for (i = 0; i < length; i++) *d += dd[i]; *d /= length; return ((void *) d); } else { ngcomplex_t *c; ngcomplex_t *cc = (ngcomplex_t *) data; int i; c = alloc_c(1); *newtype = VF_COMPLEX; for (i = 0; i < length; i++) { realpart(*c) += realpart(cc[i]); imagpart(*c) += imagpart(cc[i]); } realpart(*c) /= length; imagpart(*c) /= length; return ((void *) c); } } /* Compute the standard deviation of all elements of a vector. */ void * cx_stddev(void *data, short int type, int length, int *newlength, short int *newtype) { *newlength = 1; rcheck(length > 1, "stddev"); if (type == VF_REAL) { double *mean = (double *)cx_mean(data, type, length, newlength, newtype); double *d, sum = 0.; double *dd = (double *)data; int i; d = alloc_d(1); *newtype = VF_REAL; for (i = 0; i < length; i++) sum += (dd[i] - *mean) * (dd[i] - *mean); *d = sqrt(sum / ((double) length - 1.0)); tfree(mean); return ((void *)d); } else { ngcomplex_t *cmean = (ngcomplex_t *)cx_mean(data, type, length, newlength, newtype); double *d, sum = 0., a, b; ngcomplex_t *cc = (ngcomplex_t *)data; int i; d = alloc_d(1); *newtype = VF_REAL; for (i = 0; i < length; i++) { a = realpart(cc[i]) - realpart(*cmean); b = imagpart(cc[i]) - imagpart(*cmean); sum += a * a + b * b; } *d = sqrt(sum / ((double) length - 1.0)); tfree(cmean); return ((void *)d); } } void * cx_length(void *data, short int type, int length, int *newlength, short int *newtype) { double *d; NG_IGNORE(data); NG_IGNORE(type); *newlength = 1; *newtype = VF_REAL; d = alloc_d(1); *d = length; return ((void *) d); } /* Return a vector from 0 to the magnitude of the argument. Length of the * argument is irrelevent. */ void * cx_vector(void *data, short int type, int length, int *newlength, short int *newtype) { ngcomplex_t *cc = (ngcomplex_t *) data; double *dd = (double *) data; int i, len; double *d; NG_IGNORE(length); if (type == VF_REAL) len = (int)fabs(*dd); else len = (int)cmag(*cc); if (len == 0) len = 1; d = alloc_d(len); *newlength = len; *newtype = VF_REAL; for (i = 0; i < len; i++) d[i] = i; return ((void *) d); } /* Create a vector of the given length composed of all ones. */ void * cx_unitvec(void *data, short int type, int length, int *newlength, short int *newtype) { ngcomplex_t *cc = (ngcomplex_t *) data; double *dd = (double *) data; int i, len; double *d; NG_IGNORE(length); if (type == VF_REAL) len = (int)fabs(*dd); else len = (int)cmag(*cc); if (len == 0) len = 1; d = alloc_d(len); *newlength = len; *newtype = VF_REAL; for (i = 0; i < len; i++) d[i] = 1; return ((void *) d); } /* Calling methods for these functions are: * cx_something(data1, data2, datatype1, datatype2, length) * * The length of the two data vectors is always the same, and is the length * of the result. The result type is complex iff one of the args is * complex. */ void * cx_plus(void *data1, void *data2, short int datatype1, short int datatype2, int length) { double *dd1 = (double *) data1; double *dd2 = (double *) data2; double *d; ngcomplex_t *cc1 = (ngcomplex_t *) data1; ngcomplex_t *cc2 = (ngcomplex_t *) data2; ngcomplex_t *c, c1, c2; int i; if ((datatype1 == VF_REAL) && (datatype2 == VF_REAL)) { d = alloc_d(length); for (i = 0; i < length; i++) d[i] = dd1[i] + dd2[i]; return ((void *) d); } else { c = alloc_c(length); for (i = 0; i < length; i++) { if (datatype1 == VF_REAL) { realpart(c1) = dd1[i]; imagpart(c1) = 0.0; } else { c1 = cc1[i]; } if (datatype2 == VF_REAL) { realpart(c2) = dd2[i]; imagpart(c2) = 0.0; } else { c2 = cc2[i]; } realpart(c[i]) = realpart(c1) + realpart(c2); imagpart(c[i]) = imagpart(c1) + imagpart(c2); } return ((void *) c); } } void * cx_minus(void *data1, void *data2, short int datatype1, short int datatype2, int length) { double *dd1 = (double *) data1; double *dd2 = (double *) data2; double *d; ngcomplex_t *cc1 = (ngcomplex_t *) data1; ngcomplex_t *cc2 = (ngcomplex_t *) data2; ngcomplex_t *c, c1, c2; int i; if ((datatype1 == VF_REAL) && (datatype2 == VF_REAL)) { d = alloc_d(length); for (i = 0; i < length; i++) d[i] = dd1[i] - dd2[i]; return ((void *) d); } else { c = alloc_c(length); for (i = 0; i < length; i++) { if (datatype1 == VF_REAL) { realpart(c1) = dd1[i]; imagpart(c1) = 0.0; } else { c1 = cc1[i]; } if (datatype2 == VF_REAL) { realpart(c2) = dd2[i]; imagpart(c2) = 0.0; } else { c2 = cc2[i]; } realpart(c[i]) = realpart(c1) - realpart(c2); imagpart(c[i]) = imagpart(c1) - imagpart(c2); } return ((void *) c); } } void * cx_times(void *data1, void *data2, short int datatype1, short int datatype2, int length) { double *dd1 = (double *) data1; double *dd2 = (double *) data2; double *d; ngcomplex_t *cc1 = (ngcomplex_t *) data1; ngcomplex_t *cc2 = (ngcomplex_t *) data2; ngcomplex_t *c, c1, c2; int i; if ((datatype1 == VF_REAL) && (datatype2 == VF_REAL)) { d = alloc_d(length); for (i = 0; i < length; i++) d[i] = dd1[i] * dd2[i]; return ((void *) d); } else { c = alloc_c(length); for (i = 0; i < length; i++) { if (datatype1 == VF_REAL) { realpart(c1) = dd1[i]; imagpart(c1) = 0.0; } else { c1 = cc1[i]; } if (datatype2 == VF_REAL) { realpart(c2) = dd2[i]; imagpart(c2) = 0.0; } else { c2 = cc2[i]; } realpart(c[i]) = realpart(c1) * realpart(c2) - imagpart(c1) * imagpart(c2); imagpart(c[i]) = imagpart(c1) * realpart(c2) + realpart(c1) * imagpart(c2); } return ((void *) c); } } void * cx_mod(void *data1, void *data2, short int datatype1, short int datatype2, int length) { double *dd1 = (double *) data1; double *dd2 = (double *) data2; double *d; ngcomplex_t *cc1 = (ngcomplex_t *) data1; ngcomplex_t *cc2 = (ngcomplex_t *) data2; ngcomplex_t *c, c1, c2; int i, r1, r2, i1, i2, r3, i3; if ((datatype1 == VF_REAL) && (datatype2 == VF_REAL)) { d = alloc_d(length); for (i = 0; i < length; i++) { r1 = (int)floor(fabs(dd1[i])); rcheck(r1 > 0, "mod"); r2 = (int)floor(fabs(dd2[i])); rcheck(r2 > 0, "mod"); r3 = r1 % r2; d[i] = (double) r3; } return ((void *) d); } else { c = alloc_c(length); for (i = 0; i < length; i++) { if (datatype1 == VF_REAL) { realpart(c1) = dd1[i]; imagpart(c1) = 0.0; } else { c1 = cc1[i]; } if (datatype2 == VF_REAL) { realpart(c2) = dd2[i]; imagpart(c2) = 0.0; } else { c2 = cc2[i]; } r1 = (int)floor(fabs(realpart(c1))); rcheck(r1 > 0, "mod"); r2 = (int)floor(fabs(realpart(c2))); rcheck(r2 > 0, "mod"); i1 = (int)floor(fabs(imagpart(c1))); rcheck(i1 > 0, "mod"); i2 = (int)floor(fabs(imagpart(c2))); rcheck(i2 > 0, "mod"); r3 = r1 % r2; i3 = i1 % i2; realpart(c[i]) = (double) r3; imagpart(c[i]) = (double) i3; } return ((void *) c); } } /* Routoure JM : Compute the max of a vector. */ void * cx_max(void *data, short int type, int length, int *newlength, short int *newtype) { *newlength = 1; /* test if length >0 et affiche un message d'erreur */ rcheck(length > 0, "mean"); if (type == VF_REAL) { double largest=0.0; double *d; double *dd = (double *) data; int i; d = alloc_d(1); *newtype = VF_REAL; largest = dd[0]; for (i = 1; i < length; i++) if (largest < dd[i]) largest = dd[i]; *d = largest; return ((void *) d); } else { double largest_real=0.0; double largest_complex=0.0; ngcomplex_t *c; ngcomplex_t *cc = (ngcomplex_t *) data; int i; c = alloc_c(1); *newtype = VF_COMPLEX; largest_real = realpart(*cc); largest_complex = imagpart(*cc); for (i = 0; i < length; i++) { if (largest_real < realpart(cc[i])) largest_real = realpart(cc[i]); if (largest_complex < imagpart(cc[i])) largest_complex = imagpart(cc[i]); } realpart(*c) = largest_real; imagpart(*c) = largest_complex; return ((void *) c); } } /* Routoure JM : Compute the min of a vector. */ void * cx_min(void *data, short int type, int length, int *newlength, short int *newtype) { *newlength = 1; /* test if length >0 et affiche un message d'erreur */ rcheck(length > 0, "mean"); if (type == VF_REAL) { double smallest; double *d; double *dd = (double *) data; int i; d = alloc_d(1); *newtype = VF_REAL; smallest = dd[0]; for (i = 1; i < length; i++) if (smallest > dd[i]) smallest = dd[i]; *d = smallest; return ((void *) d); } else { double smallest_real; double smallest_complex; ngcomplex_t *c; ngcomplex_t *cc = (ngcomplex_t *) data; int i; c = alloc_c(1); *newtype = VF_COMPLEX; smallest_real = realpart(*cc); smallest_complex = imagpart(*cc); for (i = 1; i < length; i++) { if (smallest_real > realpart(cc[i])) smallest_real = realpart(cc[i]); if (smallest_complex > imagpart(cc[i])) smallest_complex = imagpart(cc[i]); } realpart(*c) = smallest_real; imagpart(*c) = smallest_complex; return ((void *) c); } } /* Routoure JM : Compute the differential of a vector. */ void * cx_d(void *data, short int type, int length, int *newlength, short int *newtype) { *newlength = length; /* test if length >0 et affiche un message d'erreur */ rcheck(length > 0, "deriv"); if (type == VF_REAL) { double *d; double *dd = (double *) data; int i; d = alloc_d(length); *newtype = VF_REAL; d[0] = dd[1] - dd[0]; d[length-1] = dd[length-1] - dd[length-2]; for (i = 1; i < length - 1; i++) d[i] = dd[i+1] - dd[i-1]; return ((void *) d); } else { ngcomplex_t *c; ngcomplex_t *cc = (ngcomplex_t *) data; int i; c = alloc_c(length); *newtype = VF_COMPLEX; realpart(*c) = realpart(cc[1]) - realpart(cc[0]); imagpart(*c) = imagpart(cc[1]) - imagpart(cc[0]); realpart(c[length-1]) = realpart(cc[length-1]) - realpart(cc[length-2]); imagpart(c[length-1]) = imagpart(cc[length-1]) - imagpart(cc[length-2]); for (i = 1; i < length - 1; i++) { realpart(c[i]) = realpart(cc[i+1]) - realpart(cc[i-1]); imagpart(c[i]) = imagpart(cc[i+1]) - imagpart(cc[i-1]); } return ((void *) c); } } void * cx_floor(void *data, short int type, int length, int *newlength, short int *newtype) { *newlength = length; if (type == VF_COMPLEX) { ngcomplex_t *c; ngcomplex_t *cc = (ngcomplex_t *) data; int i; c = alloc_c(length); *newtype = VF_COMPLEX; for (i = 0; i < length; i++) { realpart(c[i]) = floor(realpart(cc[i])); imagpart(c[i]) = floor(imagpart(cc[i])); } return ((void *) c); } else { double *d; double *dd = (double *) data; int i; d = alloc_d(length); *newtype = VF_REAL; for (i = 0; i < length; i++) d[i] = floor(dd[i]); return ((void *) d); } } void * cx_ceil(void *data, short int type, int length, int *newlength, short int *newtype) { *newlength = length; if (type == VF_COMPLEX) { ngcomplex_t *c; ngcomplex_t *cc = (ngcomplex_t *) data; int i; c = alloc_c(length); *newtype = VF_COMPLEX; for (i = 0; i < length; i++) { realpart(c[i]) = ceil(realpart(cc[i])); imagpart(c[i]) = ceil(imagpart(cc[i])); } return ((void *) c); } else { double *d; double *dd = (double *) data; int i; d = alloc_d(length); *newtype = VF_REAL; for (i = 0; i < length; i++) d[i] = ceil(dd[i]); return ((void *) d); } } void * cx_nint(void *data, short int type, int length, int *newlength, short int *newtype) { *newlength = length; if (type == VF_COMPLEX) { ngcomplex_t *c; ngcomplex_t *cc = (ngcomplex_t *) data; int i; c = alloc_c(length); *newtype = VF_COMPLEX; for (i = 0; i < length; i++) { realpart(c[i]) = nearbyint(realpart(cc[i])); imagpart(c[i]) = nearbyint(imagpart(cc[i])); } return ((void *) c); } else { double *d; double *dd = (double *) data; int i; d = alloc_d(length); *newtype = VF_REAL; for (i = 0; i < length; i++) d[i] = nearbyint(dd[i]); return ((void *) d); } } tmpk8ny_4pz/src/maths/cmaths/test_cx_ph.c0000644000175000017500000000124513546075722020650 0ustar carstencarsten#include #include #include #include "ngspice/config.h" #include "ngspice/memory.h" #include "ngspice/dvec.h" #include "ngspice/complex.h" #include "ngspice/defines.h" #include "cmath.h" #include "cmath1.h" FILE *cp_err; int main(void) { ngcomplex_t *c = NULL; double *d = NULL; short int t1; short int t2; int n1; int n2; double eps = DBL_EPSILON; cp_err = stderr; n1 = 1; t1 = VF_COMPLEX; c = alloc_c(n1); realpart(c[0]) = .0; imagpart(c[0]) = 1.0; d = (double *) cx_ph((void *) c, t1, n1, &n2, &t2); if (M_PI/2 - eps < d[0] && d[0] < M_PI/2 + eps) return 0; else return 1; } tmpk8ny_4pz/src/maths/cmaths/cmath1.h0000644000175000017500000000401613546075722017671 0ustar carstencarsten/************* * Header file for cmath1.c * 1999 E. Rouat ************/ #ifndef ngspice_CMATH1_H #define ngspice_CMATH1_H void * cx_mag(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_ph(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_cph(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_unwrap(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_j(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_real(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_imag(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_pos(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_db(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_log10(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_log(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_exp(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_sqrt(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_sin(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_sinh(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_cos(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_cosh(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_tan(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_tanh(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_atan(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_sortorder(void *data, short int type, int length, int *newlength, short int *newtype); #endif tmpk8ny_4pz/src/maths/cmaths/cmath1.c0000644000175000017500000005102413546075722017665 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Routines to do complex mathematical functions. These routines require * the -lm libraries. We sacrifice a lot of space to be able * to avoid having to do a seperate call for every vector element, * but it pays off in time savings. These routines should never * allow FPE's to happen. * * Complex functions are called as follows: * cx_something(data, type, length, &newlength, &newtype), * and return a char * that is cast to complex or double. * */ #include "ngspice/ngspice.h" #include "ngspice/memory.h" #include "ngspice/cpdefs.h" #include "ngspice/dvec.h" #include "cmath.h" #include "cmath1.h" #ifdef HAS_WINGUI #define win_x_fprintf fprintf #endif /* This flag determines whether degrees or radians are used. The radtodeg * and degtorad macros are no-ops if this is FALSE. */ bool cx_degrees = FALSE; void * cx_mag(void *data, short int type, int length, int *newlength, short int *newtype) { double *d = alloc_d(length); double *dd = (double *) data; ngcomplex_t *cc = (ngcomplex_t *) data; int i; *newlength = length; *newtype = VF_REAL; if (type == VF_REAL) for (i = 0; i < length; i++) d[i] = fabs(dd[i]); else for (i = 0; i < length; i++) d[i] = cmag(cc[i]); return ((void *) d); } void * cx_ph(void *data, short int type, int length, int *newlength, short int *newtype) { double *d = alloc_d(length); ngcomplex_t *cc = (ngcomplex_t *) data; int i; *newlength = length; *newtype = VF_REAL; if (type == VF_COMPLEX) for (i = 0; i < length; i++) { d[i] = radtodeg(cph(cc[i])); } /* Otherwise it is 0, but tmalloc zeros the stuff already. */ return ((void *) d); } /* SJdV Modified from above to find closest from +2pi,0, -2pi */ void * cx_cph(void *data, short int type, int length, int *newlength, short int *newtype) { double *d = alloc_d(length); ngcomplex_t *cc = (ngcomplex_t *) data; int i; *newlength = length; *newtype = VF_REAL; if (type == VF_COMPLEX) { double last_ph = cph(cc[0]); d[0] = radtodeg(last_ph); for (i = 1; i < length; i++) { double ph = cph(cc[i]); last_ph = ph - (2*M_PI) * floor((ph - last_ph)/(2*M_PI) + 0.5); d[i] = radtodeg(last_ph); } } /* Otherwise it is 0, but tmalloc zeros the stuff already. */ return ((void *) d); } /* Modified from above but with real phase vector in degrees as input */ void * cx_unwrap(void *data, short int type, int length, int *newlength, short int *newtype) { double *d = alloc_d(length); double *dd = (double *) data; int i; *newlength = length; *newtype = VF_REAL; if (type == VF_REAL) { double last_ph = degtorad(dd[0]); d[0] = last_ph; for (i = 1; i < length; i++) { double ph = degtorad(dd[i]); last_ph = ph - (2*M_PI) * floor((ph - last_ph)/(2*M_PI) + 0.5); d[i] = radtodeg(last_ph); } } /* Otherwise it is 0, but tmalloc zeros the stuff already. */ return ((void *) d); } /* If this is pure imaginary we might get real, but never mind... */ void * cx_j(void *data, short int type, int length, int *newlength, short int *newtype) { ngcomplex_t *c = alloc_c(length); ngcomplex_t *cc = (ngcomplex_t *) data; double *dd = (double *) data; int i; *newlength = length; *newtype = VF_COMPLEX; if (type == VF_COMPLEX) for (i = 0; i < length; i++) { realpart(c[i]) = - imagpart(cc[i]); imagpart(c[i]) = realpart(cc[i]); } else for (i = 0; i < length; i++) { imagpart(c[i]) = dd[i]; /* Real part is already 0. */ } return ((void *) c); } void * cx_real(void *data, short int type, int length, int *newlength, short int *newtype) { double *d = alloc_d(length); double *dd = (double *) data; ngcomplex_t *cc = (ngcomplex_t *) data; int i; *newlength = length; *newtype = VF_REAL; if (type == VF_COMPLEX) for (i = 0; i < length; i++) d[i] = realpart(cc[i]); else for (i = 0; i < length; i++) d[i] = dd[i]; return ((void *) d); } void * cx_imag(void *data, short int type, int length, int *newlength, short int *newtype) { double *d = alloc_d(length); double *dd = (double *) data; ngcomplex_t *cc = (ngcomplex_t *) data; int i; *newlength = length; *newtype = VF_REAL; if (type == VF_COMPLEX) for (i = 0; i < length; i++) d[i] = imagpart(cc[i]); else for (i = 0; i < length; i++) d[i] = dd[i]; return ((void *) d); } /* This is obsolete... */ void * cx_pos(void *data, short int type, int length, int *newlength, short int *newtype) { double *d = alloc_d(length); double *dd = (double *) data; ngcomplex_t *cc = (ngcomplex_t *) data; int i; *newlength = length; *newtype = VF_REAL; if (type == VF_COMPLEX) for (i = 0; i < length; i++) d[i] = ((realpart(cc[i]) > 0.0) ? 1.0 : 0.0); else for (i = 0; i < length; i++) d[i] = ((dd[i] > 0.0) ? 1.0 : 0.0); return ((void *) d); } void * cx_db(void *data, short int type, int length, int *newlength, short int *newtype) { double *d = alloc_d(length); double *dd = (double *) data; ngcomplex_t *cc = (ngcomplex_t *) data; double tt; int i; *newlength = length; *newtype = VF_REAL; if (type == VF_COMPLEX) for (i = 0; i < length; i++) { tt = cmag(cc[i]); rcheck(tt > 0, "db"); /* if (tt == 0.0) d[i] = 20.0 * - log(HUGE); else */ d[i] = 20.0 * log10(tt); } else for (i = 0; i < length; i++) { rcheck(dd[i] > 0, "db"); /* if (dd[i] == 0.0) d[i] = 20.0 * - log(HUGE); else */ d[i] = 20.0 * log10(dd[i]); } return ((void *) d); } void * cx_log10(void *data, short int type, int length, int *newlength, short int *newtype) { *newlength = length; if (type == VF_COMPLEX) { ngcomplex_t *c; ngcomplex_t *cc = (ngcomplex_t *) data; int i; c = alloc_c(length); *newtype = VF_COMPLEX; for (i = 0; i < length; i++) { double td; td = cmag(cc[i]); /* Perhaps we should trap when td = 0.0, but Ken wants * this to be possible... */ rcheck(td >= 0, "log10"); if (td == 0.0) { realpart(c[i]) = - log10(HUGE); imagpart(c[i]) = 0.0; } else { realpart(c[i]) = log10(td); imagpart(c[i]) = atan2(imagpart(cc[i]), realpart(cc[i])); } } return ((void *) c); } else { double *d; double *dd = (double *) data; int i; d = alloc_d(length); *newtype = VF_REAL; for (i = 0; i < length; i++) { rcheck(dd[i] >= 0, "log10"); if (dd[i] == 0.0) d[i] = - log10(HUGE); else d[i] = log10(dd[i]); } return ((void *) d); } } void * cx_log(void *data, short int type, int length, int *newlength, short int *newtype) { *newlength = length; if (type == VF_COMPLEX) { ngcomplex_t *c; ngcomplex_t *cc = (ngcomplex_t *) data; int i; c = alloc_c(length); *newtype = VF_COMPLEX; for (i = 0; i < length; i++) { double td; td = cmag(cc[i]); rcheck(td >= 0, "log"); if (td == 0.0) { realpart(c[i]) = - log(HUGE); imagpart(c[i]) = 0.0; } else { realpart(c[i]) = log(td); imagpart(c[i]) = atan2(imagpart(cc[i]), realpart(cc[i])); } } return ((void *) c); } else { double *d; double *dd = (double *) data; int i; d = alloc_d(length); *newtype = VF_REAL; for (i = 0; i < length; i++) { rcheck(dd[i] >= 0, "log"); if (dd[i] == 0.0) d[i] = - log(HUGE); else d[i] = log(dd[i]); } return ((void *) d); } } void * cx_exp(void *data, short int type, int length, int *newlength, short int *newtype) { *newlength = length; if (type == VF_COMPLEX) { ngcomplex_t *c; ngcomplex_t *cc = (ngcomplex_t *) data; int i; c = alloc_c(length); *newtype = VF_COMPLEX; for (i = 0; i < length; i++) { double td; td = exp(realpart(cc[i])); realpart(c[i]) = td * cos(imagpart(cc[i])); imagpart(c[i]) = td * sin(imagpart(cc[i])); } return ((void *) c); } else { double *d; double *dd = (double *) data; int i; d = alloc_d(length); *newtype = VF_REAL; for (i = 0; i < length; i++) d[i] = exp(dd[i]); return ((void *) d); } } void * cx_sqrt(void *data, short int type, int length, int *newlength, short int *newtype) { double *d = NULL; ngcomplex_t *c = NULL; double *dd = (double *) data; ngcomplex_t *cc = (ngcomplex_t *) data; int i, cres = (type == VF_REAL) ? 0 : 1; if (type == VF_REAL) for (i = 0; i < length; i++) if (dd[i] < 0.0) cres = 1; if (cres) { c = alloc_c(length); *newtype = VF_COMPLEX; } else { d = alloc_d(length); *newtype = VF_REAL; } *newlength = length; if (type == VF_COMPLEX) { for (i = 0; i < length; i++) { if (realpart(cc[i]) == 0.0) { if (imagpart(cc[i]) == 0.0) { realpart(c[i]) = 0.0; imagpart(c[i]) = 0.0; } else if (imagpart(cc[i]) > 0.0) { realpart(c[i]) = sqrt (0.5 * imagpart(cc[i])); imagpart(c[i]) = realpart(c[i]); } else { imagpart(c[i]) = sqrt( -0.5 * imagpart(cc[i])); realpart(c[i]) = - imagpart(c[i]); } } else if (realpart(cc[i]) > 0.0) { if (imagpart(cc[i]) == 0.0) { realpart(c[i]) = sqrt(realpart(cc[i])); imagpart(c[i]) = 0.0; } else if (imagpart(cc[i]) < 0.0) { realpart(c[i]) = -sqrt(0.5 * (cmag(cc[i]) + realpart(cc[i]))); } else { realpart(c[i]) = sqrt(0.5 * (cmag(cc[i]) + realpart(cc[i]))); } imagpart(c[i]) = imagpart(cc[i]) / (2.0 * realpart(c[i])); } else { /* realpart(cc[i]) < 0.0) */ if (imagpart(cc[i]) == 0.0) { realpart(c[i]) = 0.0; imagpart(c[i]) = sqrt(- realpart(cc[i])); } else { if (imagpart(cc[i]) < 0.0) imagpart(c[i]) = - sqrt(0.5 * (cmag(cc[i]) - realpart(cc[i]))); else imagpart(c[i]) = sqrt(0.5 * (cmag(cc[i]) - realpart(cc[i]))); realpart(c[i]) = imagpart(cc[i]) / (2.0 * imagpart(c[i])); } } } return ((void *) c); } else if (cres) { for (i = 0; i < length; i++) if (dd[i] < 0.0) imagpart(c[i]) = sqrt(- dd[i]); else realpart(c[i]) = sqrt(dd[i]); return ((void *) c); } else { for (i = 0; i < length; i++) d[i] = sqrt(dd[i]); return ((void *) d); } } void * cx_sin(void *data, short int type, int length, int *newlength, short int *newtype) { *newlength = length; if (type == VF_COMPLEX) { ngcomplex_t *c; ngcomplex_t *cc = (ngcomplex_t *) data; int i; c = alloc_c(length); *newtype = VF_COMPLEX; for (i = 0; i < length; i++) { realpart(c[i]) = sin(degtorad(realpart(cc[i]))) * cosh(degtorad(imagpart(cc[i]))); imagpart(c[i]) = cos(degtorad(realpart(cc[i]))) * sinh(degtorad(imagpart(cc[i]))); } return ((void *) c); } else { double *d; double *dd = (double *) data; int i; d = alloc_d(length); *newtype = VF_REAL; for (i = 0; i < length; i++) d[i] = sin(degtorad(dd[i])); return ((void *) d); } } void * cx_sinh(void *data, short int type, int length, int *newlength, short int *newtype) { *newlength = length; if (type == VF_COMPLEX) { ngcomplex_t *c; ngcomplex_t *cc = (ngcomplex_t *) data; int i; double u, v; c = alloc_c(length); *newtype = VF_COMPLEX; for (i = 0; i < length; i++) { /* sinh(x+iy) = sinh(x)*cos(y) + i * cosh(x)*sin(y) */ u = degtorad(realpart(cc[i])); v = degtorad(imagpart(cc[i])); realpart(c[i]) = sinh(u)*cos(v); imagpart(c[i]) = cosh(u)*sin(v); } return ((void *) c); } else { double *d; double *dd = (double *) data; int i; d = alloc_d(length); *newtype = VF_REAL; for (i = 0; i < length; i++) d[i] = sinh(degtorad(dd[i])); return ((void *) d); } } void * cx_cos(void *data, short int type, int length, int *newlength, short int *newtype) { *newlength = length; if (type == VF_COMPLEX) { ngcomplex_t *c; ngcomplex_t *cc = (ngcomplex_t *) data; int i; c = alloc_c(length); *newtype = VF_COMPLEX; for (i = 0; i < length; i++) { realpart(c[i]) = cos(degtorad(realpart(cc[i]))) * cosh(degtorad(imagpart(cc[i]))); imagpart(c[i]) = - sin(degtorad(realpart(cc[i]))) * sinh(degtorad(imagpart(cc[i]))); } return ((void *) c); } else { double *d; double *dd = (double *) data; int i; d = alloc_d(length); *newtype = VF_REAL; for (i = 0; i < length; i++) d[i] = cos(degtorad(dd[i])); return ((void *) d); } } void * cx_cosh(void *data, short int type, int length, int *newlength, short int *newtype) { *newlength = length; if (type == VF_COMPLEX) { ngcomplex_t *c; ngcomplex_t *cc = (ngcomplex_t *) data; int i; double u, v; c = alloc_c(length); *newtype = VF_COMPLEX; for (i = 0; i < length; i++) { /* cosh(x+iy) = cosh(x)*cos(y) + i * sinh(x)*sin(y) */ u = degtorad(realpart(cc[i])); v = degtorad(imagpart(cc[i])); realpart(c[i]) = cosh(u)*cos(v); imagpart(c[i]) = sinh(u)*sin(v); } return ((void *) c); } else { double *d; double *dd = (double *) data; int i; d = alloc_d(length); *newtype = VF_REAL; for (i = 0; i < length; i++) d[i] = cosh(degtorad(dd[i])); return ((void *) d); } } static double * d_tan(double *dd, int length) { double *d; int i; d = alloc_d(length); for (i = 0; i < length; i++) { rcheck(tan(degtorad(dd[i])) != 0, "tan"); d[i] = tan(degtorad(dd[i])); } return d; } static double * d_tanh(double *dd, int length) { double *d; int i; d = alloc_d(length); for (i = 0; i < length; i++) { d[i] = tanh(degtorad(dd[i])); } return d; } static ngcomplex_t * c_tan(ngcomplex_t *cc, int length) { ngcomplex_t *c; int i; c = alloc_c(length); for (i = 0; i < length; i++) { double u, v; rcheck(cos(degtorad(realpart(cc[i]))) * cosh(degtorad(imagpart(cc[i]))), "tan"); rcheck(sin(degtorad(realpart(cc[i]))) * sinh(degtorad(imagpart(cc[i]))), "tan"); u = degtorad(realpart(cc[i])); v = degtorad(imagpart(cc[i])); /* The Lattice C compiler won't take multi-line macros, and * CMS won't take >80 column lines.... */ #define xx1 sin(u) * cosh(v) #define xx2 cos(u) * sinh(v) #define xx3 cos(u) * cosh(v) #define xx4 -sin(u) * sinh(v) cdiv(xx1, xx2, xx3, xx4, realpart(c[i]), imagpart(c[i])); } return c; } /* complex tanh function, uses tanh(z) = -i * tan (i * z) */ static ngcomplex_t * c_tanh(ngcomplex_t *cc, int length) { ngcomplex_t *c, *s, *t; int i; c = alloc_c(length); s = alloc_c(1); t = alloc_c(1); for (i = 0; i < length; i++) { /* multiply by i */ t[0].cx_real = -1. * imagpart(cc[i]); t[0].cx_imag = realpart(cc[i]); /* get complex tangent */ s = c_tan(t, 1); /* if check in c_tan fails */ if (s == NULL) { tfree(t); return (NULL); } /* multiply by -i */ realpart(c[i]) = imagpart(s[0]); imagpart(c[i]) = -1. * realpart(s[0]); } tfree(s); tfree(t); return c; } void * cx_tan(void *data, short int type, int length, int *newlength, short int *newtype) { *newlength = length; if (type == VF_REAL) { *newtype = VF_REAL; return (void *) d_tan((double *) data, length); } else { *newtype = VF_COMPLEX; return (void *) c_tan((ngcomplex_t *) data, length); } } void * cx_tanh(void *data, short int type, int length, int *newlength, short int *newtype) { *newlength = length; if (type == VF_REAL) { *newtype = VF_REAL; return (void *) d_tanh((double *) data, length); } else { *newtype = VF_COMPLEX; return (void *) c_tanh((ngcomplex_t *) data, length); } } void * cx_atan(void *data, short int type, int length, int *newlength, short int *newtype) { double *d; d = alloc_d(length); *newtype = VF_REAL; *newlength = length; if (type == VF_COMPLEX) { ngcomplex_t *cc = (ngcomplex_t *) data; int i; for (i = 0; i < length; i++) d[i] = radtodeg(atan(realpart(cc[i]))); } else { double *dd = (double *) data; int i; for (i = 0; i < length; i++) d[i] = radtodeg(atan(dd[i])); } return ((void *) d); } /* Struct to store and order the values of the amplitudes preserving the index in the original array */ typedef struct { double amplitude; int index; } amplitude_index_t; static int compare_structs (const void *a, const void *b); /* * Returns the positions of the elements in a real vector * after they have been sorted into increasing order using a stable method (qsort). */ void * cx_sortorder(void *data, short int type, int length, int *newlength, short int *newtype) { double *d = alloc_d(length); double *dd = (double *) data; int i; amplitude_index_t *array_amplitudes; array_amplitudes = (amplitude_index_t *) tmalloc(sizeof(amplitude_index_t) * (size_t) length); *newlength = length; *newtype = VF_REAL; if (type == VF_REAL) { for(i = 0; i < length; i++){ array_amplitudes[i].amplitude = dd[i]; array_amplitudes[i].index = i; } qsort(array_amplitudes, (size_t) length, sizeof(array_amplitudes[0]), compare_structs); for(i = 0; i < length; i++) d[i] = array_amplitudes[i].index; } tfree(array_amplitudes); /* Otherwise it is 0, but tmalloc zeros the stuff already. */ return ((void *) d); } static int compare_structs(const void *a, const void *b) { amplitude_index_t *aa = (amplitude_index_t *) a; amplitude_index_t *bb = (amplitude_index_t *) b; if (aa->amplitude > bb->amplitude) return 1; else if (aa->amplitude == bb->amplitude) return 0; else return -1; } tmpk8ny_4pz/src/maths/cmaths/cmath4.h0000644000175000017500000000224413546075722017675 0ustar carstencarsten/************* * Header file for cmath4.c * 1999 E. Rouat ************/ #ifndef ngspice_CMATH4_H #define ngspice_CMATH4_H void * cx_and(void *data1, void *data2, short int datatype1, short int datatype2, int length); void * cx_or(void *data1, void *data2, short int datatype1, short int datatype2, int length); void * cx_not(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_interpolate(void *data, short int type, int length, int *newlength, short int *newtype, struct plot *pl, struct plot *newpl, int grouping); void * cx_deriv(void *data, short int type, int length, int *newlength, short int *newtype, struct plot *pl, struct plot *newpl, int grouping); void * cx_group_delay(void *data, short int type, int length, int *newlength, short int *newtype, struct plot *pl, struct plot *newpl, int grouping); void * cx_fft(void *data, short int type, int length, int *newlength, short int *newtype, struct plot *pl, struct plot *newpl, int grouping); void * cx_ifft(void *data, short int type, int length, int *newlength, short int *newtype, struct plot *pl, struct plot *newpl, int grouping); #endif tmpk8ny_4pz/src/maths/cmaths/test_cx_j.c0000644000175000017500000000111713546075722020470 0ustar carstencarsten#include #include "ngspice/config.h" #include "ngspice/memory.h" #include "ngspice/dvec.h" #include "ngspice/complex.h" #include "cmath.h" #include "cmath1.h" FILE *cp_err; int main(void) { ngcomplex_t *c = NULL; ngcomplex_t *d = NULL; short int t1; short int t2; int n1; int n2; cp_err = stderr; n1 = 1; t1 = VF_COMPLEX; c = alloc_c(n1); realpart(c[0]) = .0; imagpart(c[0]) = 1.0; d = (ngcomplex_t *) cx_j((void *) c, t1, n1, &n2, &t2); if (realpart(d[0]) == -1 && imagpart(d[0]) == 0) return 0; else return 1; } tmpk8ny_4pz/src/maths/cmaths/cmath3.h0000644000175000017500000000174113546075722017675 0ustar carstencarsten/************* * Header file for cmath3.c * 1999 E. Rouat ************/ #ifndef ngspice_CMATH3_H #define ngspice_CMATH3_H void * cx_divide(void *data1, void *data2, short int datatype1, short int datatype2, int length); void * cx_comma(void *data1, void *data2, short int datatype1, short int datatype2, int length); void * cx_power(void *data1, void *data2, short int datatype1, short int datatype2, int length); void * cx_eq(void *data1, void *data2, short int datatype1, short int datatype2, int length); void * cx_gt(void *data1, void *data2, short int datatype1, short int datatype2, int length); void * cx_lt(void *data1, void *data2, short int datatype1, short int datatype2, int length); void * cx_ge(void *data1, void *data2, short int datatype1, short int datatype2, int length); void * cx_le(void *data1, void *data2, short int datatype1, short int datatype2, int length); void * cx_ne(void *data1, void *data2, short int datatype1, short int datatype2, int length); #endif tmpk8ny_4pz/src/maths/cmaths/test_cx_cph.c0000644000175000017500000000300613546075722021010 0ustar carstencarsten#include #include #include #include "ngspice/config.h" #include "ngspice/memory.h" #include "ngspice/dvec.h" #include "ngspice/complex.h" #include "ngspice/defines.h" #include "cmath.h" #include "cmath1.h" FILE *cp_err; static int eq_p(double a, double b, double eps) { return fabs(a-b) < eps; } int main(void) { ngcomplex_t *c = NULL; double *d = NULL; short int t1; short int t2; int n1, n2; double eps = DBL_EPSILON; cp_err = stderr; n1 = 9; t1 = VF_COMPLEX; c = alloc_c(n1); realpart(c[0]) = 0.0; imagpart(c[0]) = +1.0; /* i^1 */ realpart(c[1]) = -1.0; imagpart(c[1]) = 0.0; /* i^2 */ realpart(c[2]) = 0.0; imagpart(c[2]) = -1.0; /* i^3 */ realpart(c[3]) = +1.0; imagpart(c[3]) = 0.0; /* i^4 */ realpart(c[4]) = 0.0; imagpart(c[4]) = +1.0; /* i^5 */ realpart(c[5]) = +1.0; imagpart(c[5]) = 0.0; /* i^4 */ realpart(c[6]) = 0.0; imagpart(c[6]) = -1.0; /* i^3 */ realpart(c[7]) = -1.0; imagpart(c[7]) = 0.0; /* i^2 */ realpart(c[8]) = 0.0; imagpart(c[8]) = +1.0; /* i^1 */ d = (double *) cx_cph((void *) c, t1, n1, &n2, &t2); if ( eq_p(1*M_PI/2, d[0], eps) && eq_p(2*M_PI/2, d[1], eps) && eq_p(3*M_PI/2, d[2], eps) && eq_p(4*M_PI/2, d[3], eps) && eq_p(5*M_PI/2, d[4], eps) && eq_p(4*M_PI/2, d[5], eps) && eq_p(3*M_PI/2, d[6], eps) && eq_p(2*M_PI/2, d[7], eps) && eq_p(1*M_PI/2, d[8], eps) ) return 0; else return 1; } tmpk8ny_4pz/src/maths/cmaths/cmath2.h0000644000175000017500000000436413546075722017700 0ustar carstencarsten/************* * Header file for cmath2.c * 1999 E. Rouat ************/ #ifndef ngspice_CMATH2_H #define ngspice_CMATH2_H void * cx_norm(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_uminus(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_rnd(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_sunif(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_sgauss(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_poisson(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_exponential(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_mean(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_stddev(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_length(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_vector(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_unitvec(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_plus(void *data1, void *data2, short int datatype1, short int datatype2, int length); void * cx_minus(void *data1, void *data2, short int datatype1, short int datatype2, int length); void * cx_times(void *data1, void *data2, short int datatype1, short int datatype2, int length); void * cx_mod(void *data1, void *data2, short int datatype1, short int datatype2, int length); void * cx_max(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_min(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_d(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_avg(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_floor(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_ceil(void *data, short int type, int length, int *newlength, short int *newtype); void * cx_nint(void *data, short int type, int length, int *newlength, short int *newtype); #endif tmpk8ny_4pz/src/maths/cmaths/cmath4.c0000644000175000017500000006406013546075722017674 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Routines to do complex mathematical functions. These routines require * the -lm libraries. We sacrifice a lot of space to be able * to avoid having to do a seperate call for every vector element, * but it pays off in time savings. These routines should never * allow FPE's to happen. * * Complex functions are called as follows: * cx_something(data, type, length, &newlength, &newtype), * and return a char * that is cast to complex or double. */ #include "ngspice/ngspice.h" #include "ngspice/plot.h" #include "ngspice/complex.h" #include "ngspice/cpdefs.h" #include #include #include #include #include "cmath.h" #include "cmath4.h" #include "ngspice/sim.h" /* To get SV_TIME */ #include "ngspice/fftext.h" extern bool cx_degrees; extern void vec_new(struct dvec *d); #ifdef HAVE_LIBFFTW3 #include "fftw3.h" #endif void * cx_and(void *data1, void *data2, short int datatype1, short int datatype2, int length) { double *dd1 = (double *) data1; double *dd2 = (double *) data2; double *d; ngcomplex_t *cc1 = (ngcomplex_t *) data1; ngcomplex_t *cc2 = (ngcomplex_t *) data2; ngcomplex_t c1, c2; int i; d = alloc_d(length); if ((datatype1 == VF_REAL) && (datatype2 == VF_REAL)) { for (i = 0; i < length; i++) d[i] = dd1[i] && dd2[i]; } else { for (i = 0; i < length; i++) { if (datatype1 == VF_REAL) { realpart(c1) = dd1[i]; imagpart(c1) = 0.0; } else { c1 = cc1[i]; } if (datatype2 == VF_REAL) { realpart(c2) = dd2[i]; imagpart(c2) = 0.0; } else { c2 = cc2[i]; } d[i] = ((realpart(c1) && realpart(c2)) && (imagpart(c1) && imagpart(c2))); } } return ((void *) d); } void * cx_or(void *data1, void *data2, short int datatype1, short int datatype2, int length) { double *dd1 = (double *) data1; double *dd2 = (double *) data2; double *d; ngcomplex_t *cc1 = (ngcomplex_t *) data1; ngcomplex_t *cc2 = (ngcomplex_t *) data2; ngcomplex_t c1, c2; int i; d = alloc_d(length); if ((datatype1 == VF_REAL) && (datatype2 == VF_REAL)) { for (i = 0; i < length; i++) d[i] = dd1[i] || dd2[i]; } else { for (i = 0; i < length; i++) { if (datatype1 == VF_REAL) { realpart(c1) = dd1[i]; imagpart(c1) = 0.0; } else { c1 = cc1[i]; } if (datatype2 == VF_REAL) { realpart(c2) = dd2[i]; imagpart(c2) = 0.0; } else { c2 = cc2[i]; } d[i] = ((realpart(c1) || realpart(c2)) && (imagpart(c1) || imagpart(c2))); } } return ((void *) d); } void * cx_not(void *data, short int type, int length, int *newlength, short int *newtype) { double *d; double *dd = (double *) data; ngcomplex_t *cc = (ngcomplex_t *) data; int i; d = alloc_d(length); *newtype = VF_REAL; *newlength = length; if (type == VF_COMPLEX) { for (i = 0; i < length; i++) { /* gcc doens't like !double */ d[i] = realpart(cc[i]) ? 0 : 1; d[i] = imagpart(cc[i]) ? 0 : 1; } } else { for (i = 0; i < length; i++) d[i] = ! dd[i]; } return ((void *) d); } /* This is a strange function. What we do is fit a polynomial to the * curve, of degree $polydegree, and then evaluate it at the points * in the time scale. What we do is this: for every set of points that * we fit a polynomial to, fill in as much of the new vector as we can * (i.e, between the last value of the old scale we went from to this * one). At the ends we just use what we have... We have to detect * badness here too... * * Note that we pass arguments differently for this one cx_ function... */ void * cx_interpolate(void *data, short int type, int length, int *newlength, short int *newtype, struct plot *pl, struct plot *newpl, int grouping) { struct dvec *ns, *os; double *d; int degree; register int i, oincreasing = 1, nincreasing = 1; int base; if (grouping == 0) grouping = length; /* First do some sanity checks. */ if (!pl || !pl->pl_scale || !newpl || !newpl->pl_scale) { fprintf(cp_err, "Internal error: cx_interpolate: bad scale\n"); return (NULL); } ns = newpl->pl_scale; os = pl->pl_scale; if (iscomplex(ns)) { fprintf(cp_err, "Error: new scale has complex data\n"); return (NULL); } if (iscomplex(os)) { fprintf(cp_err, "Error: old scale has complex data\n"); return (NULL); } if (length != os->v_length) { fprintf(cp_err, "Error: lengths don't match\n"); return (NULL); } if (type != VF_REAL) { fprintf(cp_err, "Error: argument has complex data\n"); return (NULL); } /* Now make sure that either both scales are strictly increasing * or both are strictly decreasing. */ if (os->v_realdata[0] < os->v_realdata[1]) oincreasing = TRUE; else oincreasing = FALSE; for (i = 0; i < os->v_length - 1; i++) if ((os->v_realdata[i] < os->v_realdata[i + 1]) != oincreasing) { fprintf(cp_err, "Error: old scale not monotonic\n"); return (NULL); } if (ns->v_realdata[0] < ns->v_realdata[1]) nincreasing = TRUE; else nincreasing = FALSE; for (i = 0; i < ns->v_length - 1; i++) if ((ns->v_realdata[i] < ns->v_realdata[i + 1]) != nincreasing) { fprintf(cp_err, "Error: new scale not monotonic\n"); return (NULL); } *newtype = VF_REAL; *newlength = ns->v_length; d = alloc_d(ns->v_length); if (!cp_getvar("polydegree", CP_NUM, °ree, 0)) degree = 1; for (base = 0; base < length; base += grouping) { if (!ft_interpolate((double *) data + base, d + base, os->v_realdata + base, grouping, ns->v_realdata + base, grouping, degree)) { tfree(d); return (NULL); } } return ((void *) d); } void * cx_deriv(void *data, short int type, int length, int *newlength, short int *newtype, struct plot *pl, struct plot *newpl, int grouping) { double *scratch; double *spare; double x; int i, j, k; int degree; int n, base; if (grouping == 0) grouping = length; /* First do some sanity checks. */ if (!pl || !pl->pl_scale || !newpl || !newpl->pl_scale) { fprintf(cp_err, "Internal error: cx_deriv: bad scale\n"); return (NULL); } if (!cp_getvar("dpolydegree", CP_NUM, °ree, 0)) degree = 2; /* default quadratic */ n = degree + 1; spare = alloc_d(n); scratch = alloc_d(n * (n + 1)); *newlength = length; *newtype = type; if (type == VF_COMPLEX) { ngcomplex_t *c_outdata, *c_indata; double *r_coefs, *i_coefs; double *scale; r_coefs = alloc_d(n); i_coefs = alloc_d(n); c_indata = (ngcomplex_t *) data; c_outdata = alloc_c(length); scale = alloc_d(length); /* XXX */ if (iscomplex(pl->pl_scale)) /* Not ideal */ for (i = 0; i < length; i++) scale[i] = realpart(pl->pl_scale->v_compdata[i]); else for (i = 0; i < length; i++) scale[i] = pl->pl_scale->v_realdata[i]; for (base = 0; base < length; base += grouping) { k = 0; for (i = degree; i < grouping; i += 1) { /* real */ for (j = 0; j < n; j++) spare[j] = c_indata[j + i + base].cx_real; if (!ft_polyfit(scale + i + base - degree, spare, r_coefs, degree, scratch)) { fprintf(stderr, "ft_polyfit @ %d failed\n", i); } ft_polyderiv(r_coefs, degree); /* for loop gets the beginning part */ for (j = k; j <= i + degree / 2; j++) { x = scale[j + base]; c_outdata[j + base].cx_real = ft_peval(x, r_coefs, degree - 1); } /* imag */ for (j = 0; j < n; j++) spare[j] = c_indata[j + i + base].cx_imag; if (!ft_polyfit(scale + i - degree + base, spare, i_coefs, degree, scratch)) { fprintf(stderr, "ft_polyfit @ %d failed\n", i); } ft_polyderiv(i_coefs, degree); /* for loop gets the beginning part */ for (j = k; j <= i - degree / 2; j++) { x = scale[j + base]; c_outdata[j + base].cx_imag = ft_peval(x, i_coefs, degree - 1); } k = j; } /* get the tail */ for (j = k; j < length; j++) { x = scale[j + base]; /* real */ c_outdata[j + base].cx_real = ft_peval(x, r_coefs, degree - 1); /* imag */ c_outdata[j + base].cx_imag = ft_peval(x, i_coefs, degree - 1); } } tfree(r_coefs); tfree(i_coefs); tfree(scale); tfree(spare); tfree(scratch); return (void *) c_outdata; } else { /* all-real case */ double *coefs; double *outdata, *indata; double *scale; coefs = alloc_d(n); indata = (double *) data; outdata = alloc_d(length); scale = alloc_d(length); /* XXX */ /* Here I encountered a problem because when we issue an instruction like this: * plot -deriv(vp(3)) to calculate something similar to the group delay, the code * detects that vector vp(3) is real and it is believed that the frequency is also * real. The frequency is COMPLEX and the program aborts so I'm going to put the * check that the frequency is complex vector not to abort. */ /* Original problematic code * for (i = 0; i < length; i++) * scale[i] = pl->pl_scale->v_realdata[i]; */ /* Modified to deal with complex frequency vector */ if (iscomplex(pl->pl_scale)) for (i = 0; i < length; i++) scale[i] = realpart(pl->pl_scale->v_compdata[i]); else for (i = 0; i < length; i++) scale[i] = pl->pl_scale->v_realdata[i]; for (base = 0; base < length; base += grouping) { k = 0; for (i = degree; i < grouping; i += 1) { if (!ft_polyfit(scale + i - degree + base, indata + i - degree + base, coefs, degree, scratch)) { fprintf(stderr, "ft_polyfit @ %d failed\n", i + base); } ft_polyderiv(coefs, degree); /* for loop gets the beginning part */ for (j = k; j <= i - degree / 2; j++) { /* Seems the same problem because the frequency vector is complex * and the real part of the complex should be accessed because if we * run x = pl-> pl_scale-> v_realdata [base + j]; the execution will * abort. */ if (iscomplex(pl->pl_scale)) x = realpart(pl->pl_scale->v_compdata[j+base]); /* For complex scale vector */ else x = pl->pl_scale->v_realdata[j + base]; /* For real scale vector */ outdata[j + base] = ft_peval(x, coefs, degree - 1); } k = j; } for (j = k; j < length; j++) { /* Again the same error */ /* x = pl->pl_scale->v_realdata[j + base]; */ if (iscomplex(pl->pl_scale)) x = realpart(pl->pl_scale->v_compdata[j+base]); /* For complex scale vector */ else x = pl->pl_scale->v_realdata[j + base]; /* For real scale vector */ outdata[j + base] = ft_peval(x, coefs, degree - 1); } } tfree(coefs); tfree(scale); tfree(spare); tfree(scratch); return (char *) outdata; } } void * cx_group_delay(void *data, short int type, int length, int *newlength, short int *newtype, struct plot *pl, struct plot *newpl, int grouping) { ngcomplex_t *cc = (ngcomplex_t *) data; double *v_phase = alloc_d(length); double *datos,adjust_final; double *group_delay = alloc_d(length); int i; /* char *datos_aux; */ /* Check to see if we have the frequency vector for the derivative */ if (!eq(pl->pl_scale->v_name, "frequency")) { fprintf(cp_err, "Internal error: cx_group_delay: need frequency based complex vector.\n"); return (NULL); } if (type == VF_COMPLEX) for (i = 0; i < length; i++) { v_phase[i] = radtodeg(cph(cc[i])); } else { fprintf(cp_err, "Signal must be complex to calculate group delay\n"); return (NULL); } type = VF_REAL; /* datos_aux = (char *)cx_deriv((char *)v_phase, type, length, newlength, newtype, pl, newpl, grouping); * datos = (double *) datos_aux; */ datos = (double *)cx_deriv((char *)v_phase, type, length, newlength, newtype, pl, newpl, grouping); /* With this global variable I will change how to obtain the group delay because * it is defined as: * * gd()=-dphase[rad]/dw[rad/s] * * if you have degrees in phase and frequency in Hz, must be taken into account * * gd()=-dphase[deg]/df[Hz]/360 * gd()=-dphase[rad]/df[Hz]/(2*pi) */ if(cx_degrees) { adjust_final=1.0/360; } else { adjust_final=1.0/(2*M_PI); } for (i = 0; i < length; i++) { group_delay[i] = -datos[i]*adjust_final; } /* Adjust to Real because the result is Real */ *newtype = VF_REAL; /* Set the type of Vector to "Time" because the speed of group units' s' * The different types of vectors are INCLUDE \ Fte_cons.h */ pl->pl_dvecs->v_type= SV_TIME; return ((char *) group_delay); } void * cx_fft(void *data, short int type, int length, int *newlength, short int *newtype, struct plot *pl, struct plot *newpl, int grouping) { int i, fpts, order; double span, scale, maxt; double *xscale; double *time = NULL, *win = NULL; ngcomplex_t *outdata = NULL; struct dvec *sv; char window[BSIZE_SP]; double *realdata; #ifdef HAVE_LIBFFTW3 fftw_complex *inc; double *ind; fftw_complex *out = NULL; fftw_plan plan_forward = NULL; #else int N, M; double *datax = NULL; #endif if (grouping == 0) grouping = length; /* First do some sanity checks. */ if (!pl || !pl->pl_scale || !newpl || !newpl->pl_scale) { fprintf(cp_err, "Internal error cx_fft: bad scale\n"); return (NULL); } if ((type != VF_REAL) && (type != VF_COMPLEX)) { fprintf(cp_err, "Internal error cx_fft: argument has wrong data\n"); return (NULL); } #ifdef HAVE_LIBFFTW3 if (type == VF_COMPLEX) fpts = length; else fpts = length/2 + 1; #else /* size of fft input vector is power of two and larger or equal than spice vector */ N = 1; M = 0; while (N < length) { N <<= 1; M++; } if (type == VF_COMPLEX) fpts = N; else fpts = N/2 + 1; #endif *newtype = VF_COMPLEX; time = alloc_d(length); xscale = TMALLOC(double, length); if (pl->pl_scale->v_type == SV_TIME) { /* calculate the frequency from time */ span = pl->pl_scale->v_realdata[length-1] - pl->pl_scale->v_realdata[0]; for (i = 0; ipl_scale->v_length; i++) time[i] = pl->pl_scale->v_realdata[i]; } else if (pl->pl_scale->v_type == SV_FREQUENCY) { /* take frequency from ac data and calculate time */ /* Deal with complex frequency vector */ if (iscomplex(pl->pl_scale)) { span = realpart(pl->pl_scale->v_compdata[pl->pl_scale->v_length-1]) - realpart(pl->pl_scale->v_compdata[0]); for (i = 0; ipl_scale->v_length; i++) xscale[i] = realpart(pl->pl_scale->v_compdata[i]); } else { span = pl->pl_scale->v_realdata[pl->pl_scale->v_length-1] - pl->pl_scale->v_realdata[0]; for (i = 0; ipl_scale->v_length; i++) xscale[i] = pl->pl_scale->v_realdata[i]; } for (i = 0; i < length; i++) #ifdef HAVE_LIBFFTW3 time[i] = i*1.0/span; #else time[i] = i*1.0/span*length/N; #endif span = time[length-1] - time[0]; } else { /* there is no usable plot vector - using simple bins */ for (i = 0; i < fpts; i++) xscale[i] = i; for (i = 0; i < length; i++) time[i] = i; span = time[length-1] - time[0]; } win = TMALLOC(double, length); maxt = time[length-1]; if (!cp_getvar("specwindow", CP_STRING, window, sizeof(window))) strcpy(window, "none"); if (!cp_getvar("specwindoworder", CP_NUM, &order, 0)) order = 2; if (order < 2) order = 2; if (fft_windows(window, win, time, length, maxt, span, order) == 0) goto done; /* create a new scale vector */ sv = dvec_alloc(copy("fft_scale"), SV_FREQUENCY, VF_REAL | VF_PERMANENT | VF_PRINT, fpts, xscale); vec_new(sv); if (type == VF_COMPLEX) { /* input vector is complex */ ngcomplex_t *indata = (ngcomplex_t *) data; #ifdef HAVE_LIBFFTW3 printf("FFT: Time span: %g s, input length: %d\n", span, length); printf("FFT: Frequency resolution: %g Hz, output length: %d\n", 1.0/span, fpts); inc = fftw_malloc(sizeof(fftw_complex) * (unsigned int) length); out = fftw_malloc(sizeof(fftw_complex) * (unsigned int) fpts); for (i = 0; i < length; i++) { inc[i][0] = indata[i].cx_real * win[i]; inc[i][1] = indata[i].cx_imag * win[i]; } plan_forward = fftw_plan_dft_1d(fpts, inc, out, FFTW_FORWARD, FFTW_ESTIMATE); fftw_execute(plan_forward); *newlength = fpts; outdata = alloc_c(fpts); scale = (double) fpts; for (i = 0; i < fpts; i++) { outdata[i].cx_real = out[i][0]/scale; outdata[i].cx_imag = out[i][1]/scale; } fftw_free(inc); #else /* Green's FFT */ printf("FFT: Time span: %g s, input length: %d, zero padding: %d\n", span, length, N-length); printf("FFT: Frequency resolution: %g Hz, output length: %d\n", 1.0/span, N); datax = TMALLOC(double, 2*N); for (i = 0; i < length; i++) { datax[2*i] = indata[i].cx_real * win[i]; datax[2*i+1] = indata[i].cx_imag * win[i]; } for (i = length; i < N; i++) { datax[2*i] = 0.0; datax[2*i+1] = 0.0; } fftInit(M); ffts(datax, M, 1); fftFree(); *newlength = N; outdata = alloc_c(N); scale = (double) N; for (i = 0; i < N; i++) { outdata[i].cx_real = datax[2*i]/scale; outdata[i].cx_imag = datax[2*i+1]/scale; } #endif } else { /* input vector is real */ realdata = (double *) data; *newlength = fpts; outdata = alloc_c(fpts); #ifdef HAVE_LIBFFTW3 printf("FFT: Time span: %g s, input length: %d\n", span, length); printf("FFT: Frequency resolution: %g Hz, output length: %d\n", 1.0/span, fpts); ind = fftw_malloc(sizeof(double) * (unsigned int) length); out = fftw_malloc(sizeof(fftw_complex) * (unsigned int) fpts); for (i = 0; i < length; i++) ind[i] = realdata[i] * win[i]; plan_forward = fftw_plan_dft_r2c_1d(length, ind, out, FFTW_ESTIMATE); fftw_execute(plan_forward); scale = (double) fpts - 1.0; for (i = 0; i < fpts; i++) { outdata[i].cx_real = out[i][0]/scale; outdata[i].cx_imag = out[i][1]/scale; } fftw_free(ind); #else /* Green's FFT */ printf("FFT: Time span: %g s, input length: %d, zero padding: %d\n", span, length, N-length); printf("FFT: Frequency resolution: %g Hz, output length: %d\n", 1.0/span, fpts); datax = TMALLOC(double, N); for (i = 0; i < length; i++) datax[i] = realdata[i] * win[i]; for (i = length; i < N; i++) datax[i] = 0.0; fftInit(M); rffts(datax, M, 1); fftFree(); scale = (double) fpts - 1.0; /* Re(x[0]), Re(x[N/2]), Re(x[1]), Im(x[1]), Re(x[2]), Im(x[2]), ... Re(x[N/2-1]), Im(x[N/2-1]). */ outdata[0].cx_real = datax[0]/scale; outdata[0].cx_imag = 0.0; for (i = 1; i < fpts-1; i++) { outdata[i].cx_real = datax[2*i]/scale; outdata[i].cx_imag = datax[2*i+1]/scale; } outdata[fpts-1].cx_real = datax[1]/scale; outdata[fpts-1].cx_imag = 0.0; #endif } done: #ifdef HAVE_LIBFFTW3 fftw_free(out); fftw_destroy_plan(plan_forward); #else tfree(datax); #endif tfree(time); tfree(win); return ((void *) outdata); } void * cx_ifft(void *data, short int type, int length, int *newlength, short int *newtype, struct plot *pl, struct plot *newpl, int grouping) { ngcomplex_t *indata = (ngcomplex_t *) data; int i, tpts; double span; double *xscale; ngcomplex_t *outdata = NULL; struct dvec *sv; #ifdef HAVE_LIBFFTW3 fftw_complex *in; fftw_complex *out = NULL; fftw_plan plan_backward = NULL; #else int N, M; double *datax = NULL; double scale; #endif if (grouping == 0) grouping = length; /* First do some sanity checks. */ if (!pl || !pl->pl_scale || !newpl || !newpl->pl_scale) { fprintf(cp_err, "Internal error cx_ifft: bad scale\n"); return (NULL); } if ((type != VF_REAL) && (type != VF_COMPLEX)) { fprintf(cp_err, "Internal error cx_ifft: argument has wrong data\n"); return (NULL); } #ifdef HAVE_LIBFFTW3 tpts = length; #else /* size of ifft input vector is power of two and larger or equal than spice vector */ N = 1; M = 0; while (N < length) { N <<= 1; M++; } tpts = N; #endif if (pl->pl_scale->v_type == SV_TIME) { /* take the time from transient */ /* output vector has same length as the plot scale vector */ tpts = pl->pl_scale->v_length; xscale = TMALLOC(double, tpts); for (i = 0; ipl_scale->v_realdata[i]; } else if (pl->pl_scale->v_type == SV_FREQUENCY) { /* calculate time from frequency */ /* output vector has same length as the plot scale vector */ tpts = pl->pl_scale->v_length; xscale = TMALLOC(double, tpts); /* Deal with complex frequency vector */ if (iscomplex(pl->pl_scale)) span = realpart(pl->pl_scale->v_compdata[tpts-1]) - realpart(pl->pl_scale->v_compdata[0]); else span = pl->pl_scale->v_realdata[tpts-1] - pl->pl_scale->v_realdata[0]; for (i = 0; i$@.tmp mv $@.tmp $@ spinit: $(srcdir)/spinit.in tclspinit: $(srcdir)/tclspinit.in ## General Includes and libraries: AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include -I$(top_srcdir)/src/spicelib/devices @X_CFLAGS@ AM_CFLAGS = -static LIBS = @LIBS@ @X_LIBS@ @X_PRE_LIBS@ @X_EXTRA_LIBS@ if WINGUI LIBS += -lpsapi -lShlwapi endif if WINCONSOLE LIBS += -lpsapi -lShlwapi endif ## FIXME: Should be allwed, but fails within MSYS2 #if SHWIN #LIBS += -lpsapi -lShlwapi #endif CLEANFILES = ngspice.idx spinit tclspinit pkgIndex.tcl MAINTAINERCLEANFILES = Makefile.in ## Tcl: if TCL_MODULE lib_LTLIBRARIES = libspice.la initdata_DATA += tclspinit pkgIndex_DATA = pkgIndex.tcl pkgIndexdir = $(pkglibdir) if TCLWIN LIBS += -lpsapi -lShlwapi -ltcl84 -lBLT24 endif libspice_la_SOURCES = \ main.c \ conf.c \ conf.h \ ngspice.c \ tclspice.c libspice_la_CPPFLAGS = $(AM_CPPFLAGS) -DSIMULATOR \ -DTCLSPICE_version="\"$(TCLSPICE_VERSION)\"" libspice_la_LIBADD = \ @X_LIBS@ \ frontend/libfte.la if WINGUI libspice_la_LIBADD += \ frontend/wdisp/libwindisp.la endif libspice_la_LIBADD += \ frontend/plotting/libplotting.la if XSPICE_WANTED libspice_la_LIBADD += \ xspice/cm/libcmxsp.la \ xspice/mif/libmifxsp.la endif libspice_la_LIBADD += \ $(DYNAMIC_DEVICELIBS) if NDEV_WANTED libspice_la_LIBADD += \ spicelib/devices/ndev/libndev.la endif if NUMDEV_WANTED libspice_la_LIBADD += \ spicelib/devices/nbjt/libnbjt.la \ spicelib/devices/nbjt2/libnbjt2.la \ spicelib/devices/numd/libnumd.la \ spicelib/devices/numd2/libnumd2.la \ spicelib/devices/numos/libnumos.la endif libspice_la_LIBADD += \ spicelib/analysis/libckt.la \ spicelib/devices/libdev.la if XSPICE_WANTED libspice_la_LIBADD += \ xspice/evt/libevtxsp.la \ xspice/enh/libenhxsp.la \ xspice/ipc/libipcxsp.la \ xspice/idn/libidnxsp.la \ @XSPICEDLLIBS@ endif libspice_la_LIBADD += \ frontend/parser/libparser.la \ frontend/numparam/libnumparam.la \ frontend/trannoise/libtrannoise.la \ spicelib/parser/libinp.la if CIDER_WANTED libspice_la_LIBADD += \ ciderlib/twod/libcidertwod.la \ ciderlib/oned/libcideroned.la \ ciderlib/input/libciderinput.la \ ciderlib/support/libcidersuprt.la endif libspice_la_LIBADD += \ maths/deriv/libderiv.la \ maths/cmaths/libcmaths.la \ maths/misc/libmathmisc.la \ maths/fft/libmathfft.la \ maths/poly/libpoly.la \ maths/ni/libni.la \ maths/sparse/libsparse.la \ misc/libmisc.la \ $(LIBS) libspice_la_CFLAGS = -shared libspice_la_LDFLAGS = -shared -Wl,--version-script=$(srcdir)/tclspice.map if TCLWIN libspice_la_LDFLAGS += -no-undefined libspice_la_LDFLAGS += --def spice.def @TCL_LIB_SPEC@ endif if TCLCYG libspice_la_LDFLAGS += -no-undefined libspice_la_LDFLAGS += --def spice.def @TCL_LIB_SPEC@ endif TCLSPICE_VERSION = @VERSION@ pkgIndex_edit = sed \ -e 's|%LIB_DIR%|$(libdir)|g' \ -e 's|%VERSION%|$(TCLSPICE_VERSION)|g' pkgIndex.tcl : Makefile rm -f $@ $@.tmp srcdir=''; \ test -f ./$@.in || srcdir=$(srcdir)/; \ $(pkgIndex_edit) $${srcdir}$@.in >$@.tmp mv $@.tmp $@ pkgIndex.tcl: $(srcdir)/pkgIndex.tcl.in endif TCL_MODULE EXTRA_DIST += spice.def ## ngspice as shared module: if SHARED_MODULE lib_LTLIBRARIES = libngspice.la libngspice_la_SOURCES = \ main.c \ conf.c \ conf.h \ ngspice.c \ sharedspice.c libngspice_la_CPPFLAGS = $(AM_CPPFLAGS) -DSIMULATOR \ -DSHAREDSPICE_version="\"$(SHAREDSPICE_VERSION)\"" libngspice_la_LIBADD = \ @X_LIBS@ \ frontend/libfte.la libngspice_la_LIBADD += \ frontend/plotting/libplotting.la if XSPICE_WANTED libngspice_la_LIBADD += \ xspice/cm/libcmxsp.la \ xspice/mif/libmifxsp.la endif libngspice_la_LIBADD += \ $(DYNAMIC_DEVICELIBS) if NDEV_WANTED libngspice_la_LIBADD += \ spicelib/devices/ndev/libndev.la endif if NUMDEV_WANTED libngspice_la_LIBADD += \ spicelib/devices/nbjt/libnbjt.la \ spicelib/devices/nbjt2/libnbjt2.la \ spicelib/devices/numd/libnumd.la \ spicelib/devices/numd2/libnumd2.la \ spicelib/devices/numos/libnumos.la endif libngspice_la_LIBADD += \ spicelib/analysis/libckt.la \ spicelib/devices/libdev.la if XSPICE_WANTED libngspice_la_LIBADD += \ xspice/evt/libevtxsp.la \ xspice/enh/libenhxsp.la \ xspice/ipc/libipcxsp.la \ xspice/idn/libidnxsp.la \ @XSPICEDLLIBS@ endif libngspice_la_LIBADD += \ frontend/parser/libparser.la \ frontend/numparam/libnumparam.la \ frontend/trannoise/libtrannoise.la \ spicelib/parser/libinp.la if CIDER_WANTED libngspice_la_LIBADD += \ ciderlib/twod/libcidertwod.la \ ciderlib/oned/libcideroned.la \ ciderlib/input/libciderinput.la \ ciderlib/support/libcidersuprt.la endif libngspice_la_LIBADD += \ maths/deriv/libderiv.la \ maths/cmaths/libcmaths.la \ maths/misc/libmathmisc.la \ maths/fft/libmathfft.la \ maths/poly/libpoly.la \ maths/ni/libni.la \ maths/sparse/libsparse.la \ misc/libmisc.la \ $(LIBS) \ $(OPENMP_CFLAGS) libngspice_la_CFLAGS = -shared libngspice_la_LDFLAGS = -shared if SHWIN libngspice_la_LDFLAGS += -Wl,--output-def=ngspice.def -Wl,--out-implib=ngspice.dll.a libngspice_la_LDFLAGS += -no-undefined EXTRA_DIST += ngspice.def endif if SHCYG libngspice_la_LDFLAGS += -Wl,--output-def=ngspice.def -Wl,--out-implib=ngspice.dll.a libngspice_la_LDFLAGS += -no-undefined EXTRA_DIST += ngspice.def endif SHAREDSPICE_VERSION = @VERSION@ endif SHARED_MODULE tmpk8ny_4pz/src/tclspice.c0000644000175000017500000021405113546075722015724 0ustar carstencarsten/* Copyright 2003-2008 Multigig Ltd * * Copied and written by Stefan Jones (stefan.jones@multigig.com) at Multigig Ltd * * Code based on and copied from ScriptEDA ( http://www-cad.eecs.berkeley.edu/~pinhong/scriptEDA ) * * Under LGPLv2 licence since 2008, December 1st */ /*******************/ /* Defines */ /*******************/ #define TCLSPICE_name "spice" #define TCLSPICE_prefix "spice::" #define TCLSPICE_namespace "spice" #ifdef _MSC_VER #define TCLSPICE_version "25.1" #define STDIN_FILENO 0 #define STDOUT_FILENO 1 #define STDERR_FILENO 2 #endif /**********************************************************************/ /* Header files for C functions */ /**********************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/randnumb.h" #include "misc/misc_time.h" #include /*Use Tcl threads if on W32 without pthreads*/ #ifndef HAVE_LIBPTHREAD #if defined(__MINGW32__) || defined(_MSC_VER) #define mutex_lock(a) Tcl_MutexLock(a) #define mutex_unlock(a) Tcl_MutexUnlock(a) #define thread_self() Tcl_GetCurrentThread() typedef Tcl_Mutex mutexType; typedef Tcl_ThreadId threadId_t; #define TCL_THREADS #define THREADS #endif #else #include #define mutex_lock(a) pthread_mutex_lock(a) #define mutex_unlock(a) pthread_mutex_unlock(a) #define thread_self() pthread_self() typedef pthread_mutex_t mutexType; typedef pthread_t threadId_t; #define THREADS #endif /* Copied from main.c in ngspice*/ #include #if defined(__MINGW32__) #include /* remove type incompatibility with winnt.h*/ #undef BOOLEAN #include #include /* Sleep */ #elif defined(_MSC_VER) #include /* remove type incompatibility with winnt.h*/ #undef BOOLEAN #include /* Sleep */ #include /* _getpid */ #define dup _dup #define dup2 _dup2 #define open _open #define close _close #else #include /* usleep */ #endif /* __MINGW32__ */ #include "ngspice/iferrmsg.h" #include "ngspice/ftedefs.h" #include "ngspice/devdefs.h" #include #include #include #include #include #ifdef _MSC_VER #include #define snprintf _snprintf #endif #include #include "ngspice/memory.h" #include #ifndef HAVE_GETRUSAGE #ifdef HAVE_FTIME #include #endif #endif /* To interupt a spice run */ #include typedef void (*sighandler)(int); #include #include "frontend/signal_handler.h" /*Included for the module to access data*/ #include "ngspice/dvec.h" #include "ngspice/plot.h" #ifdef __CYGWIN__ #undef WIN32 #endif #include #include "ngspice/sim.h" /* defines for Tcl support * Tcl 8.3 and Tcl 8.4 support, * suggested by http://mini.net/tcl/3669, 07.03.03 */ #ifndef CONST84 #define CONST84 #endif /* Arguments of Tcl_CmpProc for Tcl/Tk 8.4.x */ #define TCL_CMDPROCARGS(clientData, interp, argc, argv) \ (ClientData clientData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) /*For get_output*/ #include #include #ifdef _MSC_VER #define S_IRWXU _S_IWRITE #endif extern IFfrontEnd nutmeginfo; extern struct comm spcp_coms[ ]; extern void DevInit(void); extern int SIMinit(IFfrontEnd *frontEnd, IFsimulator **simulator); extern wordlist *cp_varwl(struct variable *var); /*For blt spice to use*/ typedef struct { char *name; #ifdef THREADS mutexType mutex; /*lock for this vector*/ #endif double *data; /* vector data*/ int size; /*data it can store*/ int length; /*actual amount of data*/ } vector; /*The current run (to get variable names, etc)*/ static runDesc *cur_run; static vector *vectors; static int ownVectors; /* save this each time called */ static Tcl_Interp *spice_interp; #define save_interp() \ do { \ spice_interp = interp; \ } while(0) void tcl_stdflush(FILE *f); int tcl_vfprintf(FILE *f, const char *fmt, va_list args); #if defined(__MINGW32__) || defined(_MSC_VER) __declspec(dllexport) #endif int Spice_Init(Tcl_Interp *interp); int Tcl_ExecutePerLoop(void); void triggerEventCheck(ClientData clientData, int flags); void triggerEventSetup(ClientData clientData, int flags); int triggerEventHandler(Tcl_Event *evPtr, int flags); void stepEventCheck(ClientData clientData, int flags); int stepEventHandler(Tcl_Event *evPtr, int flags); void stepEventSetup(ClientData clientData, int flags); int sp_Tk_Update(void); int sp_Tk_SetColor(int colorid); int sp_Tk_SetLinestyle(int linestyleid); int sp_Tk_DefineLinestyle(int linestyleid, int mask); int sp_Tk_DefineColor(int colorid, double red, double green, double blue); int sp_Tk_Text(char *text, int x, int y, int angle); int sp_Tk_Arc(int x0, int y0, int radius, double theta, double delta_theta); int sp_Tk_DrawLine(int x1, int y1, int x2, int y2); int sp_Tk_Clear(void); int sp_Tk_Close(void); int sp_Tk_NewViewport(GRAPH *graph); int sp_Tk_Init(void); int get_mod_param TCL_CMDPROCARGS(clientData, interp, argc, argv); void sighandler_tclspice(int num); void blt_relink(int index, void *tmp); void blt_lockvec(int index); void blt_add(int index, double value); void blt_init(void *run); int blt_plot(struct dvec *y, struct dvec *x, int new); /****************************************************************************/ /* BLT and data routines */ /****************************************************************************/ /*helper function*/ /*inline*/ static struct plot * get_plot_by_index(int plot) { struct plot *pl; pl = plot_list; for (; 0 < plot; plot--) { pl = pl->pl_next; if (!pl) return NULL; } return pl; } /*this holds the number of time points done (altered by spice)*/ int steps_completed; /* number of bltvectors*/ static int blt_vnum; /*Native Tcl functions */ static int spice_header TCL_CMDPROCARGS(clientData, interp, argc, argv) { char buf[256]; char *date, *name, *title; NG_IGNORE(clientData); NG_IGNORE(argv); if (argc != 1) { Tcl_SetResult(interp, "Wrong # args. spice::spice_header", TCL_STATIC); return TCL_ERROR; } if (cur_run) { Tcl_ResetResult(interp); date = datestring(); title = cur_run->name; name = cur_run->type; sprintf(buf, "{title \"%s\"} {name \"%s\"} {date \"%s\"} {variables %u}", title, name, date, cur_run->numData); Tcl_AppendResult(interp, buf, TCL_STATIC); return TCL_OK; } else { return TCL_ERROR; } } static int spice_data TCL_CMDPROCARGS(clientData, interp, argc, argv) { char buf[256]; int i, type; char *name; NG_IGNORE(clientData); if (argc > 2) { Tcl_SetResult(interp, "Wrong # args. spice::spice_data ?plot?", TCL_STATIC); return TCL_ERROR; } if (argc == 1) { if (blt_vnum) { Tcl_ResetResult(interp); for (i = 0; i < blt_vnum; i++) { name = vectors[i].name; if (substring("#branch", name)) type = SV_CURRENT; else if (cieq(name, "time")) type = SV_TIME; else if (cieq(name, "frequency")) type = SV_FREQUENCY; else type = SV_VOLTAGE; sprintf(buf, "{%s %s} ", name, ft_typenames(type)); Tcl_AppendResult(interp, buf, TCL_STATIC); } return TCL_OK; } else { return TCL_ERROR; } } else { struct plot *pl; struct dvec *v; if (!(pl = get_plot_by_index(atoi(argv[1])))) { Tcl_SetResult(interp, "Bad plot number", TCL_STATIC); return TCL_ERROR; } for (v = pl->pl_dvecs; v; v = v->v_next) { name = v->v_name; if (substring("#branch", name)) type = SV_CURRENT; else if (cieq(name, "time")) type = SV_TIME; else if (cieq(name, "frequency")) type = SV_FREQUENCY; else type = SV_VOLTAGE; sprintf(buf, "{%s %s} ", name, ft_typenames(type)); Tcl_AppendResult(interp, buf, TCL_STATIC); } return TCL_OK; } } static int resetTriggers(void); /*Creates and registers the blt vectors, used by spice*/ void blt_init(void *run) { int i; cur_run = NULL; /* reset varaibles and free*/ if (vectors) { resetTriggers(); for (i = blt_vnum-1, blt_vnum = 0 /*stops vector access*/; i >= 0; i--) { if (ownVectors) FREE(vectors[i].data); FREE(vectors[i].name); #ifdef HAVE_LIBPTHREAD pthread_mutex_destroy(&vectors[i].mutex); #endif } FREE(vectors); } /* initilise */ cur_run = (runDesc *)run; vectors = TMALLOC(vector, cur_run->numData); for (i = 0; i < cur_run->numData; i++) { vectors[i].name = copy((cur_run->data[i]).name); #ifdef HAVE_LIBPTHREAD pthread_mutex_init(&vectors[i].mutex, NULL); #endif vectors[i].data = NULL; vectors[i].size = 0; vectors[i].length = 0; } ownVectors = cur_run->writeOut; blt_vnum = i; /*allows access to vectors*/ return; } /*Adds data to the stored vector*/ void blt_add(int index, double value) { vector *v; v = &vectors[index]; #ifdef THREADS mutex_lock(&vectors[index].mutex); #endif if (!(v->length < v->size)) { v->size += 100; v->data = TREALLOC(double, v->data, v->size); } v->data[v->length] = value; v->length ++; #ifdef THREADS mutex_unlock(&vectors[index].mutex); #endif return; } /* Locks the vector data to stop conflicts*/ void blt_lockvec(int index) { #ifdef THREADS mutex_lock(&vectors[index].mutex); #else NG_IGNORE(index); #endif return; } /*links a dvec to a blt vector, used to stop duplication of data when writing to a plot, but makes BLT vectors more unsafe */ void blt_relink(int index, void *tmp) { struct dvec *v = (struct dvec *)tmp; vectors[index].data = v->v_realdata; vectors[index].length = v->v_length; vectors[index].size = v->v_length; /*silly spice doesn't use v_rlength*/ #ifdef THREADS mutex_unlock(&vectors[index].mutex); #endif return; } /* Tcl functions to access spice data */ /* This copys the last Spice state vector to the given blt_vector * arg1: blt_vector */ static int lastVector TCL_CMDPROCARGS(clientData, interp, argc, argv) { Blt_Vector *vec; char *blt; int i; double *V; NG_IGNORE(clientData); if (argc != 2) { Tcl_SetResult(interp, "Wrong # args. spice::lastVector vecName", TCL_STATIC); return TCL_ERROR; } Tcl_SetResult(interp, "test2", TCL_STATIC); return TCL_ERROR; blt = (char *)argv[1]; if (Blt_GetVector(interp, blt, &vec)) { Tcl_SetResult(interp, "Bad blt vector ", TCL_STATIC); Tcl_AppendResult(interp, (char *)blt, TCL_STATIC); return TCL_ERROR; } if (!(V = TMALLOC(double, blt_vnum))) { Tcl_SetResult(interp, "Out of Memory", TCL_STATIC); return TCL_ERROR; } Tcl_SetResult(interp, "test1", TCL_STATIC); return TCL_ERROR; for (i = 0; i < blt_vnum; i++) { #ifdef THREADS mutex_lock(&vectors[i].mutex); #endif V[i] = vectors[i].data[vectors[i].length-1]; #ifdef THREADS mutex_unlock(&vectors[i].mutex); #endif } Blt_ResetVector(vec, V, blt_vnum, blt_vnum, TCL_VOLATILE); txfree(V); return TCL_OK; } /*agr1: spice variable name *arg2: index */ static int get_value TCL_CMDPROCARGS(clientData, interp, argc, argv) { char *var; int i, vindex, j; double val = 0; NG_IGNORE(clientData); if (argc != 3) { Tcl_SetResult(interp, "Wrong # args. spice::get_value spice_variable index", TCL_STATIC); return TCL_ERROR; } var = (char *)argv[1]; for (i = 0; i < blt_vnum && strcmp(var, vectors[i].name); i++) ; if (i == blt_vnum) { Tcl_SetResult(interp, "Bad spice variable ", TCL_STATIC); Tcl_AppendResult(interp, (char *)var, TCL_STATIC); return TCL_ERROR; } else { vindex = i; } j = atoi(argv[2]); #ifdef THREADS mutex_lock(&vectors[vindex].mutex); #endif if (j < 0 || j >= vectors[vindex].length) { i = 1; } else { i = 0; val = vectors[vindex].data[j]; } #ifdef THREADS mutex_unlock(&vectors[vindex].mutex); #endif if (i) { Tcl_SetResult(interp, "Index out of range", TCL_STATIC); return TCL_ERROR; } else { Tcl_SetObjResult(interp, Tcl_NewDoubleObj(val)); return TCL_OK; } } /* * arg1: spice vector name * arg2: real data blt vector * arg3: Optional: imaginary data blt vector*/ static int vectoblt TCL_CMDPROCARGS(clientData, interp, argc, argv) { Blt_Vector *real_BltVector, *imag_BltVector; char *realBlt, *imagBlt, *var; struct dvec *var_dvec; double *realData, *compData; int compIndex; //index to loop inside the vectors' data NG_IGNORE(clientData); if (argc < 3 || argc > 4) { Tcl_SetResult(interp, "Wrong # args. spice::vectoblt spice_variable real_bltVector [imag_bltVector]", TCL_STATIC); return TCL_ERROR; } real_BltVector = NULL; imag_BltVector = NULL; var = (char *)argv[1]; var_dvec = vec_get(var); if (var_dvec == NULL) { Tcl_SetResult(interp, "Bad spice vector ", TCL_STATIC); Tcl_AppendResult(interp, (char *)var, TCL_STATIC); return TCL_ERROR; } realBlt = (char *)argv[2]; if (Blt_GetVector(interp, realBlt, &real_BltVector)) { Tcl_SetResult(interp, "Bad real blt vector ", TCL_STATIC); Tcl_AppendResult(interp, (char *)realBlt, TCL_STATIC); return TCL_ERROR; } if (argc == 4) { imagBlt = (char *)argv[3]; if (Blt_GetVector(interp, imagBlt, &imag_BltVector)) { Tcl_SetResult(interp, "Bad imag blt vector ", TCL_STATIC); Tcl_AppendResult(interp, (char *)imagBlt, TCL_STATIC); return TCL_ERROR; } } /*If data is complex, it is harder (more complex :) to export...*/ // int compIndex; //index to loop inside the vectors' data if (var_dvec->v_realdata == NULL) { if (var_dvec->v_compdata == NULL) { Tcl_SetResult(interp, "The vector contains no data", TCL_STATIC); Tcl_AppendResult(interp, (char *)var, TCL_STATIC); } else { realData = TMALLOC(double, var_dvec->v_length); for (compIndex = 0; compIndex < var_dvec->v_length; compIndex++) realData[compIndex] = ((var_dvec->v_compdata+compIndex)->cx_real); Blt_ResetVector(real_BltVector, realData, var_dvec->v_length, var_dvec->v_length, TCL_VOLATILE); if (imag_BltVector != NULL) { compData = TMALLOC(double, var_dvec->v_length); for (compIndex = 0; compIndex < var_dvec->v_length; compIndex++) compData[compIndex] = ((var_dvec->v_compdata+compIndex)->cx_imag); Blt_ResetVector(imag_BltVector, compData, var_dvec->v_length, var_dvec->v_length, TCL_VOLATILE); } } } else { Blt_ResetVector(real_BltVector, var_dvec->v_realdata, var_dvec->v_length, var_dvec->v_length, TCL_VOLATILE); if (imag_BltVector != NULL) { compData = TMALLOC(double, var_dvec->v_length); for (compIndex = 0; compIndex < var_dvec->v_length; compIndex++) compData[compIndex] = 0; Blt_ResetVector(imag_BltVector, compData, var_dvec->v_length, var_dvec->v_length, TCL_VOLATILE); } } Tcl_SetResult(interp, "finished!", TCL_STATIC); return TCL_OK; } /*agr1: spice variable name *arg2: blt_vector *arg3: start copy index, optional *arg4: end copy index. optional */ static int spicetoblt TCL_CMDPROCARGS(clientData, interp, argc, argv) { Blt_Vector *vec; int j, i; char *blt, *var; int start = 0, end = -1, len; NG_IGNORE(clientData); if (argc < 3 || argc > 5) { Tcl_SetResult(interp, "Wrong # args. spice::spicetoblt spice_variable vecName ?start? ?end?", TCL_STATIC); return TCL_ERROR; } var = (char *)argv[1]; blt = (char *)argv[2]; for (i = 0; i < blt_vnum && strcmp(var, vectors[i].name); i++) ; if (i == blt_vnum) { Tcl_SetResult(interp, "Bad spice variable ", TCL_STATIC); Tcl_AppendResult(interp, (char *)var, TCL_STATIC); return TCL_ERROR; } else { j = i; } if (Blt_GetVector(interp, blt, &vec)) { Tcl_SetResult(interp, "Bad blt vector ", TCL_STATIC); Tcl_AppendResult(interp, (char *)blt, TCL_STATIC); return TCL_ERROR; } if (argc >= 4) start = atoi(argv[3]); if (argc == 5) end = atoi(argv[4]); if (vectors[j].length) { #ifdef THREADS mutex_lock(&vectors[j].mutex); #endif len = vectors[j].length; if (start) { start = start % len; if (start < 0) start += len; } end = end % len; if (end < 0) end += len; len = abs(end - start + 1); Blt_ResetVector(vec, (vectors[j].data + start), len, len, TCL_VOLATILE); #ifdef THREADS mutex_unlock(&vectors[j].mutex); #endif } return TCL_OK; } /******************************************************************/ /* Main spice command executions and thread control */ /*****************************************************************/ #ifdef THREADS static threadId_t tid, bgtid = (threadId_t) 0; static bool fl_running = FALSE; static bool fl_exited = TRUE; #if defined(__MINGW32__) || defined(_MSC_VER) #define EXPORT_FLAVOR WINAPI #else #define EXPORT_FLAVOR #endif static void * EXPORT_FLAVOR _thread_run(void *string) { fl_exited = FALSE; bgtid = thread_self(); cp_evloop((char *)string); FREE(string); bgtid = (threadId_t)0; fl_exited = TRUE; return NULL; } /*Stops a running thread, hopefully */ static int EXPORT_FLAVOR _thread_stop(void) { int timeout = 0; if (fl_running) { while (!fl_exited && timeout < 100) { ft_intrpt = TRUE; timeout++; #if defined(__MINGW32__) || defined(_MSC_VER) Sleep(100); /* va: windows native */ #else usleep(10000); #endif } if (!fl_exited) { fprintf(stderr, "Couldn't stop tclspice\n"); return TCL_ERROR; } #ifdef HAVE_LIBPTHREAD pthread_join(tid, NULL); #endif fl_running = FALSE; ft_intrpt = FALSE; return TCL_OK; } else { fprintf(stderr, "Spice not running\n"); } return TCL_OK; } void sighandler_tclspice(int num) { NG_IGNORE(num); if (fl_running) _thread_stop(); return; } #endif /*THREADS*/ static int _run(int argc, char **argv) { char buf[1024] = ""; int i; sighandler oldHandler; #ifdef THREADS char *string; bool fl_bg = FALSE; /* run task in background if preceeded by "bg"*/ if (!strcmp(argv[0], "bg")) { argc--; argv = &argv[1]; fl_bg = TRUE; } #endif /* Catch Ctrl-C to break simulations */ #ifndef _MSC_VER_ oldHandler = signal(SIGINT, (SIGNAL_FUNCTION) ft_sigintr); if (SETJMP(jbuf, 1) != 0) { ft_sigintr_cleanup(); signal(SIGINT, oldHandler); return TCL_OK; } #else oldHandler = SIG_IGN; #endif /*build a char * to pass to cp_evloop */ for (i = 0; i < argc; i++) { strcat(buf, argv[i]); strcat(buf, " "); } #ifdef THREADS /* run in the background */ if (fl_bg) { if (fl_running) _thread_stop(); fl_running = TRUE; string = copy(buf); /*as buf gets freed fairly quickly*/ #ifdef HAVE_LIBPTHREAD pthread_create(&tid, NULL, _thread_run, (void *)string); #else Tcl_CreateThread(&tid, (Tcl_ThreadCreateProc *)_thread_run, string, TCL_THREAD_STACK_DEFAULT, TCL_THREAD_NOFLAGS); #endif } else /* halt (pause) a bg run */ if (!strcmp(argv[0], "halt")) { signal(SIGINT, oldHandler); return _thread_stop(); } else /* backwards compatability with old command */ if (!strcmp(argv[0], "stop")) if (argc > 1) { cp_evloop(buf); } else { _thread_stop(); cp_evloop(buf); } else { /* cannot do anything if spice is running in the bg*/ if (fl_running) { if (fl_exited) { _thread_stop(); cp_evloop(buf); } else { fprintf(stderr, "type \"spice stop\" first\n"); } } else { /*do the command*/ cp_evloop(buf); } } #else cp_evloop(buf); #endif /*THREADS*/ signal(SIGINT, oldHandler); return TCL_OK; } static int _tcl_dispatch TCL_CMDPROCARGS(clientData, interp, argc, argv) { int i; NG_IGNORE(clientData); save_interp(); char *prefix = strstr(argv[0], "spice::"); if (prefix) argv[0] = prefix + 7; return _run(argc, (char **)argv); } /* Runs the spice command given in spice */ static int _spice_dispatch TCL_CMDPROCARGS(clientData, interp, argc, argv) { NG_IGNORE(clientData); save_interp(); if (argc == 1) return TCL_OK; return _run(argc-1, (char **)&argv[1]); } #ifdef THREADS /*Checks if spice is runnuing in the background */ static int running TCL_CMDPROCARGS(clientData, interp, argc, argv) { NG_IGNORE(clientData); NG_IGNORE(argc); NG_IGNORE(argv); Tcl_SetObjResult(interp, Tcl_NewIntObj((long) (fl_running && !fl_exited))); return TCL_OK; } #endif /**************************************/ /* plot manipulation functions */ /* only usefull if plots are saved */ /**************************************/ /*Outputs the names of all variables in the plot */ static int plot_variables TCL_CMDPROCARGS(clientData, interp, argc, argv) { struct plot *pl; int plot; struct dvec *v; NG_IGNORE(clientData); if (argc != 2) { Tcl_SetResult(interp, "Wrong # args. spice::plot_variables plot", TCL_STATIC); return TCL_ERROR; } plot = atoi(argv[1]); if (!(pl = get_plot_by_index(plot))) { Tcl_SetResult(interp, "Bad plot given", TCL_STATIC); return TCL_ERROR; } for (v = pl->pl_dvecs; v; v = v->v_next) Tcl_AppendElement(interp, v->v_name); return TCL_OK; } static int plot_variablesInfo TCL_CMDPROCARGS(clientData, interp, argc, argv) { struct plot *pl; int plot; struct dvec *v; char buf[256]; char *name; int length; NG_IGNORE(clientData); if (argc != 2) { Tcl_SetResult(interp, "Wrong # args. spice::plot_variablesInfo plot", TCL_STATIC); return TCL_ERROR; } plot = atoi(argv[1]); if (!(pl = get_plot_by_index(plot))) { Tcl_SetResult(interp, "Bad plot given", TCL_STATIC); return TCL_ERROR; } Tcl_ResetResult(interp); for (v = pl->pl_dvecs; v; v = v->v_next) { name = v->v_name; length = v->v_length; sprintf(buf, "{%s %s %i} ", name, ft_typenames(v->v_type), length); Tcl_AppendResult(interp, (char *)buf, TCL_STATIC); } return TCL_OK; } /*returns the value of a variable */ static int plot_get_value TCL_CMDPROCARGS(clientData, interp, argc, argv) { struct plot *pl; struct dvec *v; char *name; int plot, index; NG_IGNORE(clientData); if (argc != 4) { Tcl_SetResult(interp, "Wrong # args. spice::plot_get_value name plot index", TCL_STATIC); return TCL_ERROR; } name = (char *)argv[1]; plot = atoi(argv[2]); index = atoi(argv[3]); if (!(pl = get_plot_by_index(plot))) { Tcl_SetResult(interp, "Bad plot", TCL_STATIC); return TCL_ERROR; } for (v = pl->pl_dvecs; v; v = v->v_next) if (!strcmp(v->v_name, name)) { if (index < v->v_length) { Tcl_SetObjResult(interp, Tcl_NewDoubleObj((double) v->v_realdata[index])); return TCL_OK; } else { Tcl_SetResult(interp, "Bad index", TCL_STATIC); return TCL_ERROR; } } Tcl_SetResult(interp, "variable not found", TCL_STATIC); return TCL_ERROR; } /*The length of the first vector in a plot*/ static int plot_datapoints TCL_CMDPROCARGS(clientData, interp, argc, argv) { struct plot *pl; struct dvec *v; int plot; NG_IGNORE(clientData); if (argc != 2) { Tcl_SetResult(interp, "Wrong # args. spice::plot_datapoints plot", TCL_STATIC); return TCL_ERROR; } plot = atoi(argv[1]); if (!(pl = get_plot_by_index(plot))) { Tcl_SetResult(interp, "Bad plot", TCL_STATIC); return TCL_ERROR; } v = pl->pl_dvecs; Tcl_SetObjResult(interp, Tcl_NewIntObj((long) v->v_length)); // could be very dangeous return TCL_OK; } /*These functions give you infomation about a plot*/ static int plot_title TCL_CMDPROCARGS(clientData, interp, argc, argv) { struct plot *pl; int plot; NG_IGNORE(clientData); if (argc != 2) { Tcl_SetResult(interp, "Wrong # args. spice::plot_title plot", TCL_STATIC); return TCL_ERROR; } plot = atoi(argv[1]); if (!(pl = get_plot_by_index(plot))) { Tcl_SetResult(interp, "Bad plot", TCL_STATIC); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewStringObj(pl->pl_title, -1)); return TCL_OK; } static int plot_date TCL_CMDPROCARGS(clientData, interp, argc, argv) { struct plot *pl; int plot; NG_IGNORE(clientData); if (argc != 2) { Tcl_SetResult(interp, "Wrong # args. spice::plot_date plot", TCL_STATIC); return TCL_ERROR; } plot = atoi(argv[1]); if (!(pl = get_plot_by_index(plot))) { Tcl_SetResult(interp, "Bad plot", TCL_STATIC); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewStringObj(pl->pl_date, -1)); return TCL_OK; } static int plot_name TCL_CMDPROCARGS(clientData, interp, argc, argv) { struct plot *pl; int plot; NG_IGNORE(clientData); if (argc != 2) { Tcl_SetResult(interp, "Wrong # args. spice::plot_name plot", TCL_STATIC); return TCL_ERROR; } plot = atoi(argv[1]); if (!(pl = get_plot_by_index(plot))) { Tcl_SetResult(interp, "Bad plot", TCL_STATIC); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewStringObj(pl->pl_name, -1)); return TCL_OK; } static int plot_typename TCL_CMDPROCARGS(clientData, interp, argc, argv) { struct plot *pl; int plot; NG_IGNORE(clientData); if (argc != 2) { Tcl_SetResult(interp, "Wrong # args. spice::plot_typename plot", TCL_STATIC); return TCL_ERROR; } plot = atoi(argv[1]); if (!(pl = get_plot_by_index(plot))) { Tcl_SetResult(interp, "Bad plot", TCL_STATIC); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewStringObj(pl->pl_typename, -1)); return TCL_OK; } /*number of variables in a plot*/ static int plot_nvars TCL_CMDPROCARGS(clientData, interp, argc, argv) { struct plot *pl; struct dvec *v; int plot; int i = 0; NG_IGNORE(clientData); if (argc != 2) { Tcl_SetResult(interp, "Wrong # args. spice::plot_nvars plot", TCL_STATIC); return TCL_ERROR; } plot = atoi(argv[1]); if (!(pl = get_plot_by_index(plot))) { Tcl_SetResult(interp, "Bad plot", TCL_STATIC); return TCL_ERROR; } for (v = pl->pl_dvecs; v; v = v->v_next) i++; Tcl_SetObjResult(interp, Tcl_NewIntObj((long) i)); return TCL_OK; } static int plot_defaultscale TCL_CMDPROCARGS(clientData, interp, argc, argv) { struct plot *pl; int plot; NG_IGNORE(clientData); if (argc != 2) { Tcl_SetResult(interp, "Wrong # args. spice::plot_defaultscale plot", TCL_STATIC); return TCL_ERROR; } plot = atoi(argv[1]); if (!(pl = get_plot_by_index(plot))) { Tcl_SetResult(interp, "Bad plot", TCL_STATIC); return TCL_ERROR; } if (pl->pl_scale) Tcl_SetObjResult(interp, Tcl_NewStringObj(pl->pl_scale->v_name, -1)); return TCL_OK; } /*agr1: plot index *agr2: spice variable name *arg3: blt_vector *arg4: start copy index, optional *arg5: end copy index. optional */ static int plot_getvector TCL_CMDPROCARGS(clientData, interp, argc, argv) { Blt_Vector *vec; char *blt, *var; int start = 0, end = -1, len; int plot; struct dvec *v; struct plot *pl; NG_IGNORE(clientData); if (argc < 4 || argc > 6) { Tcl_SetResult(interp, "Wrong # args. spice::plot_getvector plot spice_variable vecName ?start? ?end?", TCL_STATIC); return TCL_ERROR; } plot = atoi(argv[1]); if (!(pl = get_plot_by_index(plot))) { Tcl_SetResult(interp, "Bad plot", TCL_STATIC); return TCL_ERROR; } var = (char *)argv[2]; blt = (char *)argv[3]; for (v = pl->pl_dvecs; v; v = v->v_next) if (!strcmp(v->v_name, var)) break; if (v == NULL) { Tcl_SetResult(interp, "variable not found: ", TCL_STATIC); Tcl_AppendResult(interp, (char *)var, TCL_STATIC); return TCL_ERROR; } if (Blt_GetVector(interp, blt, &vec)) { Tcl_SetResult(interp, "Bad blt vector ", TCL_STATIC); Tcl_AppendResult(interp, (char *)blt, TCL_STATIC); return TCL_ERROR; } if (argc >= 5) start = atoi(argv[4]); if (argc == 6) end = atoi(argv[5]); if (v->v_length) { len = v->v_length; if (start) { start = start % len; if (start < 0) start += len; } end = end % len; if (end < 0) end += len; len = abs(end - start + 1); Blt_ResetVector(vec, (v->v_realdata + start), len, len, TCL_VOLATILE); } return TCL_OK; } static int plot_getplot TCL_CMDPROCARGS(clientData, interp, argc, argv) { NG_IGNORE(clientData); NG_IGNORE(argc); NG_IGNORE(argv); if (plot_cur) Tcl_SetObjResult(interp, Tcl_NewStringObj(plot_cur->pl_typename, -1)); return TCL_OK; } /*******************************************/ /* Misc functions */ /*******************************************/ /*Runs a tcl script and returns the output*/ static int get_output TCL_CMDPROCARGS(clientData, interp, argc, argv) { FILE *pipein; int tmp_1, tmp_2 = 0; char buf[1024]; int outfd, outfd2 = 0; NG_IGNORE(clientData); save_interp(); if ((argc < 2) || (argc > 3)) { Tcl_SetResult(interp, "Wrong # args. spice::get_output script ?var_for_stderr?", TCL_STATIC); return TCL_ERROR; } tmp_1 = dup(1); outfd = open("/tmp/tclspice.tmp_out", O_WRONLY|O_CREAT|O_TRUNC, S_IRWXU); if (argc == 3) { tmp_2 = dup(2); outfd2 = open("/tmp/tclspice.tmp_err", O_WRONLY|O_CREAT|O_TRUNC, S_IRWXU); } freopen("/tmp/tclspice.tmp_out", "w", stdout); if (argc == 3) freopen("/tmp/tclspice.tmp_err", "w", stderr); dup2(outfd, 1); if (argc == 3) dup2(outfd2, 2); Tcl_Eval(interp, argv[1]); fclose(stdout); close(outfd); if (argc == 3) { fclose(stderr); close(outfd2); } dup2(tmp_1, 1); close(tmp_1); if (argc == 3) { dup2(tmp_2, 2); close(tmp_2); } freopen("/dev/fd/1", "w", stdout); if (argc == 3) freopen("/dev/fd/2", "w", stderr); pipein = fopen("/tmp/tclspice.tmp_out", "r"); if (pipein == NULL) fprintf(stderr, "pipein==NULL\n"); Tcl_ResetResult(interp); while (fgets(buf, 1024, pipein) != NULL) Tcl_AppendResult(interp, (char *)buf, TCL_STATIC); fclose(pipein); if (argc == 3) { pipein = fopen("/tmp/tclspice.tmp_err", "r"); Tcl_SetVar(interp, argv[2], "", 0); while (fgets(buf, 1024, pipein) != NULL) Tcl_SetVar(interp, argv[2], buf, TCL_APPEND_VALUE); fclose(pipein); } return TCL_OK; } /* Returns the current value of a parameter * has lots of memory leaks */ static int get_param TCL_CMDPROCARGS(clientData, interp, argc, argv) { wordlist *wl = NULL; char *device, *param; struct variable *v; char buf[128]; NG_IGNORE(clientData); if (argc != 3) { Tcl_SetResult(interp, "Wrong # args. spice::get_param device param", TCL_STATIC); return TCL_ERROR; } if (!ft_curckt) { Tcl_SetResult(interp, "No circuit loaded ", TCL_STATIC); return TCL_ERROR; } device = (char *)argv[1]; param = (char *)argv[2]; /* copied from old_show(wordlist *) */ v = if_getparam (ft_curckt->ci_ckt, &device, param, 0, 0); if (!v) v = if_getparam (ft_curckt->ci_ckt, &device, param, 0, 1); if (v) { wl = cp_varwl(v); Tcl_SetResult(interp, wl->wl_word, TCL_VOLATILE); wl_free(wl); tfree(v); return TCL_OK; } else { sprintf(buf, "%s in %s not found", param, device); Tcl_AppendResult(interp, buf, TCL_STATIC); } return TCL_ERROR; } /* va - added call: s. errormessage returns: param == all: list of all model parameters of device/model param == name: description of given model parameter */ int get_mod_param TCL_CMDPROCARGS(clientData, interp, argc, argv) { char *name; char *paramname; GENinstance *devptr = NULL; GENmodel *modptr = NULL; IFdevice *device; IFparm *opt; IFvalue pv; int i, err, typecode = -1; char buf[128]; bool found; NG_IGNORE(clientData); if (argc < 2 || argc >3) { Tcl_SetResult(interp, "Wrong # args. spice::get_mod_param device|model [all|param]", TCL_STATIC); return TCL_ERROR; } if (ft_curckt == NULL) { Tcl_SetResult(interp, "No circuit loaded ", TCL_STATIC); return TCL_ERROR; } name = (char *)argv[1]; if (argc > 2) paramname = (char *)argv[2]; else paramname = "all"; if (name == NULL || name[0] == '\0') { Tcl_SetResult(interp, "No model or device name provided.", TCL_STATIC); return TCL_ERROR; } /* get the unique IFuid for name (device/model) */ INPretrieve(&name, ft_curckt->ci_symtab); devptr = ft_sim->findInstance (ft_curckt->ci_ckt, name); if (devptr) { typecode = devptr->GENmodPtr->GENmodType; } else { modptr = ft_sim->findModel (ft_curckt->ci_ckt, name); if (modptr) { typecode = modptr->GENmodType; } else { sprintf(buf, "No such device or model name %s", name); Tcl_SetResult(interp, buf, TCL_VOLATILE); return TCL_ERROR; } } device = ft_sim->devices[typecode]; found = FALSE; for (i = 0; i < *(device->numModelParms); i++) { opt = &device->modelParms[i]; if (opt->dataType != (IF_SET|IF_ASK|IF_REAL)) continue; /* only real IO-parameter */ if (strcmp(paramname, "all") == 0) { Tcl_AppendElement(interp, opt->keyword); found = TRUE; } else if (strcmp(paramname, opt->keyword) == 0) { if (devptr) err = ft_sim->askInstanceQuest (ft_curckt->ci_ckt, devptr, opt->id, &pv, NULL); else err = ft_sim->askModelQuest (ft_curckt->ci_ckt, modptr, opt->id, &pv, NULL); if (err == OK) { sprintf(buf, "%g", pv.rValue); /* dataType is here always real */ Tcl_SetResult(interp, buf, TCL_VOLATILE); return TCL_OK; } } } if (found != TRUE) { sprintf(buf, "unknown parameter %s", paramname); Tcl_SetResult(interp, buf, TCL_VOLATILE); return TCL_ERROR; } return TCL_OK; } /* Direct control over the step size * Spice will still adjust it to keep accuracy wuithin reltol and abstol */ static int delta TCL_CMDPROCARGS(clientData, interp, argc, argv) { NG_IGNORE(clientData); if (argc < 1 ||argc > 2) { Tcl_SetResult(interp, "Wrong # args. spice::delta ?value?", TCL_STATIC); return TCL_ERROR; } if (ft_curckt == NULL) { Tcl_SetResult(interp, "No circuit loaded ", TCL_STATIC); return TCL_ERROR; } if (argc == 2) (ft_curckt->ci_ckt)->CKTdelta = atof(argv[1]); Tcl_SetObjResult(interp, Tcl_NewDoubleObj((ft_curckt->ci_ckt)->CKTdelta)); return TCL_OK; } #include "ngspice/trandefs.h" /* Direct control over the maximum stepsize * Spice will still adjust it to keep accuracy wuithin reltol and abstol */ static int maxstep TCL_CMDPROCARGS(clientData, interp, argc, argv) { TRANan *job; NG_IGNORE(clientData); if (argc < 1 ||argc > 2) { Tcl_SetResult(interp, "Wrong # args. spice::maxstep ?value?", TCL_STATIC); return TCL_ERROR; } if (ft_curckt == NULL) { Tcl_SetResult(interp, "No circuit loaded ", TCL_STATIC); return TCL_ERROR; } job = (TRANan*)(ft_curckt->ci_ckt)->CKTcurJob; if (argc == 2) job->TRANmaxStep = atof(argv[1]); Tcl_SetObjResult(interp, Tcl_NewDoubleObj(job->TRANmaxStep)); return TCL_OK; } /* obtain the initial time of a transient analysis */ static int get_initTime TCL_CMDPROCARGS(clientData, interp, argc, argv) { TRANan *job; NG_IGNORE(argv); NG_IGNORE(clientData); if (argc < 1 ||argc > 1) { Tcl_SetResult(interp, "Wrong # args. spice::get_initTime", TCL_STATIC); return TCL_ERROR; } if (ft_curckt == NULL) { Tcl_SetResult(interp, "No circuit loaded ", TCL_STATIC); return TCL_ERROR; } job = (TRANan*)(ft_curckt->ci_ckt)->CKTcurJob; Tcl_SetObjResult(interp, Tcl_NewDoubleObj(job->TRANinitTime)); return TCL_OK; } /* obtain the final time of a transient analysis */ static int get_finalTime TCL_CMDPROCARGS(clientData, interp, argc, argv) { TRANan *job; NG_IGNORE(argv); NG_IGNORE(clientData); if (argc < 1 ||argc > 1) { Tcl_SetResult(interp, "Wrong # args. spice::get_finalTime", TCL_STATIC); return TCL_ERROR; } if (ft_curckt == NULL) { Tcl_SetResult(interp, "No circuit loaded ", TCL_STATIC); return TCL_ERROR; } job = (TRANan*)(ft_curckt->ci_ckt)->CKTcurJob; Tcl_SetObjResult(interp, Tcl_NewDoubleObj(job->TRANfinalTime)); return TCL_OK; } /****************************************/ /* The Tk frontend for plot */ /****************************************/ /* Use Tcl_GetStringResult to get canvas size etc. from Tcl */ #include "ngspice/ftedev.h" int sp_Tk_Init(void) { /* This is hard coded in C at the mo, use X11 values */ dispdev->numlinestyles = 8; dispdev->numcolors = 20; dispdev->width = 1280; dispdev->height = 1024; return 0; } #include "ngspice/graph.h" int sp_Tk_NewViewport(GRAPH *graph) { const char *result; int width, height, fontwidth, fontheight; graph->devdep = NULL; if (Tcl_GlobalEval(spice_interp, "spice_gr_NewViewport") != TCL_OK) { Tcl_ResetResult(spice_interp); return 1; } result = Tcl_GetStringResult(spice_interp); if (sscanf(result, "%i %i %i %i", &width, &height, &fontwidth, &fontheight) != 4) { Tcl_ResetResult(spice_interp); return 1; } graph->absolute.xpos = 0; /* these always seem sensible, let Tcl adjust coods */ graph->absolute.ypos = 0; graph->absolute.width = width; graph->absolute.height = height; graph->fontwidth = fontwidth; graph->fontheight = fontheight; Tcl_ResetResult(spice_interp); return 0; } int sp_Tk_Close(void) { if (Tcl_Eval(spice_interp, "spice_gr_Close") != TCL_OK) { Tcl_ResetResult(spice_interp); return 1; } Tcl_ResetResult(spice_interp); return 0; } int sp_Tk_Clear(void) { if (Tcl_Eval(spice_interp, "spice_gr_Clear") != TCL_OK) { Tcl_ResetResult(spice_interp); return 1; } Tcl_ResetResult(spice_interp); return 0; } int sp_Tk_DrawLine(int x1, int y1, int x2, int y2) { char buf[1024]; sprintf(buf, "spice_gr_DrawLine %i %i %i %i", x1, y1, x2, y2); if (Tcl_Eval(spice_interp, buf) != TCL_OK) { Tcl_ResetResult(spice_interp); return 1; } Tcl_ResetResult(spice_interp); return 0; } int sp_Tk_Arc(int x0, int y0, int radius, double theta, double delta_theta) { char buf[1024]; sprintf(buf, "spice_gr_Arc %i %i %i %f %f", x0, y0, radius, theta, delta_theta); if (Tcl_Eval(spice_interp, buf) != TCL_OK) { Tcl_ResetResult(spice_interp); return 1; } Tcl_ResetResult(spice_interp); return 0; } int sp_Tk_Text(char *text, int x, int y, int angle) { char buf[1024]; NG_IGNORE(angle); sprintf(buf, "spice_gr_Text \"%s\" %i %i", text, x, y); if (Tcl_Eval(spice_interp, buf) != TCL_OK) { Tcl_ResetResult(spice_interp); return 1; } Tcl_ResetResult(spice_interp); return 0; } int sp_Tk_DefineColor(int colorid, double red, double green, double blue) { char buf[1024]; sprintf(buf, "spice_gr_DefineColor %i %g %g %g", colorid, red, green, blue); if (Tcl_Eval(spice_interp, buf) != TCL_OK) { Tcl_ResetResult(spice_interp); return 1; } Tcl_ResetResult(spice_interp); return 0; } int sp_Tk_DefineLinestyle(int linestyleid, int mask) { char buf[1024]; sprintf(buf, "spice_gr_DefineLinestyle %i %i", linestyleid, mask); if (Tcl_Eval(spice_interp, buf) != TCL_OK) { Tcl_ResetResult(spice_interp); return 1; } Tcl_ResetResult(spice_interp); return 0; } int sp_Tk_SetLinestyle(int linestyleid) { char buf[1024]; sprintf(buf, "spice_gr_SetLinestyle %i", linestyleid); if (Tcl_Eval(spice_interp, buf) != TCL_OK) { Tcl_ResetResult(spice_interp); return 1; } Tcl_ResetResult(spice_interp); return 0; } int sp_Tk_SetColor(int colorid) { char buf[1024]; sprintf(buf, "spice_gr_SetColor %i", colorid); if (Tcl_Eval(spice_interp, buf) != TCL_OK) { Tcl_ResetResult(spice_interp); return 1; } Tcl_ResetResult(spice_interp); return 0; } int sp_Tk_Update(void) { if (Tcl_Eval(spice_interp, "spice_gr_Update") != TCL_OK) { Tcl_ResetResult(spice_interp); return 1; } Tcl_ResetResult(spice_interp); return 0; } /********************************************************/ /* The Blt method for plotting */ /********************************************************/ static void dvecToBlt(Blt_Vector *Data, struct dvec *x) { if (x->v_flags & VF_REAL) { Blt_ResetVector (Data, x->v_realdata , x->v_length, x->v_length, TCL_VOLATILE); } else { double *data; int i; data = TMALLOC(double, x->v_length); for (i = 0; i < x->v_length; i++) data[i] = realpart(x->v_compdata[i]); Blt_ResetVector (Data, data, x->v_length, x->v_length, TCL_VOLATILE); tfree(data); } return; } static void escape_brackets(char *string) { int printed = strlen(string), i; for (i = 0; i < printed; i++) { if (string[i] == ']' || string[i] == '[') { int j; for (j = printed; j >= i; j--) string[j+3] = string[j]; string[i] = '\\'; string[i+1] = '\\'; string[i+2] = '\\'; i += 3; printed += 3; } } return; } int blt_plot(struct dvec *y, struct dvec *x, int new) { static int ctr = -1; Blt_Vector *X_Data = NULL, *Y_Data = NULL; char buf[1024]; /* A bug in these functions? , crashes if used so make vectors in Tcl Blt_CreateVector(spice_interp, "::spice::X_Data", 1, &X_Data); Blt_CreateVector(spice_interp, "::spice::Y_Data", 1, &Y_Data); */ Blt_GetVector(spice_interp, "::spice::X_Data", &X_Data); Blt_GetVector(spice_interp, "::spice::Y_Data", &Y_Data); if (!X_Data || !Y_Data) { fprintf(stderr, "Error: Blt vector X_Data or Y_Data not created\n"); return 1; } dvecToBlt(X_Data, x); dvecToBlt(Y_Data, y); if (new) ctr++; sprintf(buf, "spice_gr_Plot %s %s %s %s %s %s %d", x->v_name, ft_typenames(x->v_type), ft_typabbrev(x->v_type), y->v_name, ft_typenames(y->v_type), ft_typabbrev(y->v_type), ctr); escape_brackets(buf); if (Tcl_Eval(spice_interp, buf) != TCL_OK) { Tcl_ResetResult(spice_interp); return 1; } Tcl_ResetResult(spice_interp); return 0; } /********************************************************/ /* Triggering stuff */ /********************************************************/ struct triggerEvent { struct triggerEvent *next; int vector; int type; int stepNumber; double time; double voltage; char ident[16]; }; struct triggerEvent *eventQueue; struct triggerEvent *eventQueueEnd; #ifdef THREADS mutexType triggerMutex; #endif struct watch { struct watch *next; char name[16]; int vector; /* index of vector to watch */ int type; /* +ive or -ive trigger */ int state; /* pretriggered or not */ double Vmin; /* the boundaries */ double Vmax; /* To get the exact trigger time */ double Vavg; double oT; double oV; }; struct watch *watches; char *triggerCallback; unsigned int triggerPollTime = 1; char *stepCallback; unsigned int stepPollTime = 1; unsigned int stepCount = 1; int stepCallbackPending; void stepEventSetup(ClientData clientData, int flags) { Tcl_Time t; NG_IGNORE(clientData); NG_IGNORE(flags); if (stepCallbackPending) { t.sec = 0; t.usec = 0; } else { t.sec = stepPollTime / 1000; t.usec = (stepPollTime % 1000) * 1000; } Tcl_SetMaxBlockTime(&t); } int stepEventHandler(Tcl_Event *evPtr, int flags) { NG_IGNORE(evPtr); NG_IGNORE(flags); if (stepCallbackPending) { stepCallbackPending = 0; Tcl_Preserve((ClientData)spice_interp); Tcl_Eval(spice_interp, stepCallback); Tcl_ResetResult(spice_interp); Tcl_Release((ClientData)spice_interp); } return TCL_OK; } void stepEventCheck(ClientData clientData, int flags) { NG_IGNORE(clientData); NG_IGNORE(flags); if (stepCallbackPending) { Tcl_Event *tclEvent; tclEvent = (Tcl_Event *) ckalloc(sizeof(Tcl_Event)); tclEvent->proc = stepEventHandler; Tcl_QueueEvent(tclEvent, TCL_QUEUE_TAIL); } } int triggerEventHandler(Tcl_Event *evPtr, int flags) { static char buf[512]; int rtn = TCL_OK; NG_IGNORE(evPtr); NG_IGNORE(flags); Tcl_Preserve((ClientData)spice_interp); #ifdef THREADS mutex_lock(&triggerMutex); #endif while (eventQueue) { struct triggerEvent *event = eventQueue; eventQueue = eventQueue->next; snprintf(buf, 512, "%s %s %g %d %d %g %s", triggerCallback, vectors[event->vector].name, event->time, event->stepNumber, event->type, event->voltage, event->ident); rtn = Tcl_Eval(spice_interp, buf); FREE(event); if (rtn) goto quit; } eventQueueEnd = NULL; quit: #ifdef THREADS mutex_unlock(&triggerMutex); #endif Tcl_ResetResult(spice_interp); Tcl_Release((ClientData)spice_interp); return TCL_OK; } void triggerEventSetup(ClientData clientData, int flags) { Tcl_Time t; NG_IGNORE(clientData); NG_IGNORE(flags); if (eventQueue) { t.sec = 0; t.usec = 0; } else { t.sec = triggerPollTime / 1000; t.usec = (triggerPollTime % 1000) * 1000; } Tcl_SetMaxBlockTime(&t); } void triggerEventCheck(ClientData clientData, int flags) { NG_IGNORE(clientData); NG_IGNORE(flags); #ifdef THREADS mutex_lock(&triggerMutex); #endif if (eventQueue) { Tcl_Event *tclEvent; tclEvent = (Tcl_Event *) ckalloc(sizeof(Tcl_Event)); tclEvent->proc = triggerEventHandler; Tcl_QueueEvent(tclEvent, TCL_QUEUE_TAIL); } #ifdef THREADS mutex_unlock(&triggerMutex); #endif } int Tcl_ExecutePerLoop(void) { struct watch *current; #ifdef THREADS mutex_lock(&vectors[0].mutex); mutex_lock(&triggerMutex); #endif for (current = watches; current; current = current->next) { vector *v; v = &vectors[current->vector]; #ifdef THREADS mutex_lock(&v->mutex); #endif if ((current->type > 0 && current->state && v->data[v->length-1] > current->Vmax) || (current->type < 0 && current->state && v->data[v->length-1] < current->Vmin)) { struct triggerEvent *tmp = TMALLOC(struct triggerEvent, 1); tmp->next = NULL; if (eventQueue) { eventQueueEnd->next = tmp; eventQueueEnd = tmp; } else { eventQueue = tmp; } eventQueueEnd = tmp; tmp->vector = current->vector; tmp->type = current->type; tmp->stepNumber = vectors[0].length; { double T = vectors[0].data[vectors[0].length-1]; double V = v->data[v->length-1]; tmp->time = current->oT + (current->Vavg - current->oV) * (T - current->oT) / (V - current->oV); tmp->voltage = current->Vavg; } strcpy(tmp->ident, current->name); current->state = 0; } else if ((current->type > 0 && v->data[v->length-1] < current->Vmin) || (current->type < 0 && v->data[v->length-1] > current->Vmax)) current->state = 1; current->oT = vectors[0].data[vectors[0].length-1]; current->oV = v->data[v->length-1]; #ifdef THREADS mutex_unlock(&v->mutex); #endif } if (stepCallback && vectors[0].length % stepCount == 0) stepCallbackPending = 1; #ifdef THREADS mutex_unlock(&triggerMutex); mutex_unlock(&vectors[0].mutex); if (triggerCallback && eventQueue && bgtid != thread_self()) triggerEventHandler(NULL, 0); if (stepCallback && stepCallbackPending && bgtid != thread_self()) stepEventHandler(NULL, 0); #else if (triggerCallback && eventQueue) triggerEventHandler(NULL, 0); if (stepCallback && stepCallbackPending) triggerEventHandler(NULL, 0); #endif return 0; } static int resetTriggers(void) { #ifdef THREADS mutex_lock(&triggerMutex); #endif while (watches) { struct watch *tmp = watches; watches = tmp->next; FREE(tmp); } while (eventQueue) { struct triggerEvent *tmp = eventQueue; eventQueue = tmp->next; FREE(tmp); } eventQueueEnd = NULL; #ifdef THREADS mutex_unlock(&triggerMutex); #endif return 0; } /* Registers a watch for a trigger *arg0: Callback function (optional - none removes callback) *arg1: Poll interval usec (optional - defaults to 500000 ) */ static int registerTriggerCallback TCL_CMDPROCARGS(clientData, interp, argc, argv) { NG_IGNORE(clientData); if (argc > 3) { Tcl_SetResult(interp, "Wrong # args. spice::registerTriggerCallback ?proc? ?ms?", TCL_STATIC); return TCL_ERROR; } if (triggerCallback) { Tcl_DeleteEventSource(triggerEventSetup, triggerEventCheck, NULL); free(triggerCallback); triggerCallback = NULL; } if (argc == 1) return TCL_OK; triggerCallback = strdup(argv[1]); Tcl_CreateEventSource(triggerEventSetup, triggerEventCheck, NULL); if (argc == 3) { triggerPollTime = atoi(argv[2]); if (triggerPollTime == 0) triggerPollTime = 500; } return TCL_OK; } /* Registers step counter callback *arg0: Callback function (optional - none removes callback) *arg1: Number of steps per Callback *arg2: Poll interval usec (optional - defaults to 500000 ) */ static int registerStepCallback TCL_CMDPROCARGS(clientData, interp, argc, argv) { NG_IGNORE(clientData); if (argc > 4) { Tcl_SetResult(interp, "Wrong # args. spice::registerStepCallback ?proc? ?steps? ?ms?", TCL_STATIC); return TCL_ERROR; } if (stepCallback) { Tcl_DeleteEventSource(stepEventSetup, stepEventCheck, NULL); free(stepCallback); stepCallback = NULL; } if (argc == 1) return TCL_OK; stepCallback = strdup(argv[1]); Tcl_CreateEventSource(stepEventSetup, stepEventCheck, NULL); if (argc >= 3) { stepCount = atoi(argv[2]); if (stepCount == 0) stepCount = 1; } if (argc == 4) { stepPollTime = atoi(argv[3]); if (stepPollTime == 0) stepPollTime = 50; } return TCL_OK; } /* Registers a watch for a trigger *arg0: Vector Name to watch *arg1: Vmin *arg2: Vmax *arg3: 1 / -1 for +ive(voltage goes +ive) or -ive trigger */ static int registerTrigger TCL_CMDPROCARGS(clientData, interp, argc, argv) { int i, index; const char *var; char ident[16]; struct watch *tmp; int type; double Vavg, Vmin, Vmax; NG_IGNORE(clientData); if (argc < 4 && argc > 6) { Tcl_SetResult(interp, "Wrong # args. spice::registerTrigger vecName Vmin Vmax ?type? ?string?", TCL_STATIC); return TCL_ERROR; } var = argv[1]; for (i = 0; i < blt_vnum && strcmp(var, vectors[i].name); i++) ; if (i == blt_vnum) { Tcl_SetResult(interp, "Bad spice variable ", TCL_STATIC); Tcl_AppendResult(interp, (char *)var, TCL_STATIC); return TCL_ERROR; } else { index = i; } if (argc >= 5) type = atoi(argv[4]); else type = 1; if (argc >= 6) { strncpy(ident, argv[5], sizeof(ident)); ident[sizeof(ident)-1] = '\0'; } else { ident[0] = '\0'; } Vmin = atof(argv[2]); Vmax = atof(argv[3]); Vavg = (Vmin + Vmax) / 2 ; #ifdef THREADS mutex_lock(&triggerMutex); #endif for (tmp = watches; tmp != NULL; tmp = tmp->next) if (ident[0] != '\0') { if (strcmp(ident, tmp->name) == 0) { watches->vector = index; watches->type = type; strcpy(watches->name, ident); watches->state = 0; watches->Vmin = Vmin; watches->Vmax = Vmax; watches->Vavg = Vavg; break; } } else { if (tmp->vector == index && tmp->type == type && tmp->Vavg == Vavg) { tmp->Vmin = Vmin; tmp->Vmax = Vmax; break; } } if (tmp == NULL) { tmp = TMALLOC(struct watch, 1); tmp->next = watches; watches = tmp; watches->vector = index; watches->type = type; strcpy(watches->name, ident); watches->state = 0; watches->Vmin = Vmin; watches->Vmax = Vmax; watches->Vavg = Vavg; } #ifdef THREADS mutex_unlock(&triggerMutex); #endif return TCL_OK; } /*unregisters a trigger *arg0: Vector name *arg1: type */ static int unregisterTrigger TCL_CMDPROCARGS(clientData, interp, argc, argv) { int i, index, type; char *var; struct watch *tmp; struct watch **cut; NG_IGNORE(clientData); if (argc != 2 && argc != 3) { Tcl_SetResult(interp, "Wrong # args. spice::unregisterTrigger vecName ?type?", TCL_STATIC); return TCL_ERROR; } var = (char *)argv[1]; for (i = 0; i < blt_vnum && strcmp(var, vectors[i].name); i++) ; if (i == blt_vnum) index = -1; else index = i; if (argc == 3) type = atoi(argv[4]); else type = 1; #ifdef THREADS mutex_lock(&triggerMutex); #endif cut = &watches; tmp = watches; while (tmp) if ((tmp->vector == index && tmp->type == type) || strcmp(var, tmp->name) == 0) { *cut = tmp->next; txfree(tmp); break; } else { cut = &tmp->next; tmp = tmp->next; } #ifdef THREADS mutex_unlock(&triggerMutex); #endif if (tmp == NULL) { Tcl_SetResult(interp, "Could not find trigger ", TCL_STATIC); Tcl_AppendResult(interp, (char *)var, TCL_STATIC); return TCL_ERROR; } return TCL_OK; } /* returns: "vecName" "time" "stepNumber" "type" */ static int popTriggerEvent TCL_CMDPROCARGS(clientData, interp, argc, argv) { NG_IGNORE(clientData); NG_IGNORE(argv); if (argc != 1) { Tcl_SetResult(interp, "Wrong # args. spice::popTriggerEvent", TCL_STATIC); return TCL_ERROR; } if (eventQueue) { struct triggerEvent *popedEvent; Tcl_Obj *list; #ifdef THREADS mutex_lock(&triggerMutex); #endif popedEvent = eventQueue; eventQueue = popedEvent->next; if (eventQueue == NULL) eventQueueEnd = NULL; list = Tcl_NewListObj(0, NULL); Tcl_ListObjAppendElement(interp, list, Tcl_NewStringObj(vectors[popedEvent->vector].name, strlen(vectors[popedEvent->vector].name))); Tcl_ListObjAppendElement(interp, list, Tcl_NewDoubleObj(popedEvent->time)); Tcl_ListObjAppendElement(interp, list, Tcl_NewIntObj(popedEvent->stepNumber)); Tcl_ListObjAppendElement(interp, list, Tcl_NewIntObj(popedEvent->type)); Tcl_ListObjAppendElement(interp, list, Tcl_NewDoubleObj(popedEvent->voltage)); Tcl_ListObjAppendElement(interp, list, Tcl_NewStringObj(popedEvent->ident, strlen(popedEvent->ident))); Tcl_SetObjResult(interp, list); FREE(popedEvent); #ifdef THREADS mutex_unlock(&triggerMutex); #endif } return TCL_OK; } static int listTriggers TCL_CMDPROCARGS(clientData, interp, argc, argv) { struct watch *tmp; Tcl_Obj *list; NG_IGNORE(clientData); NG_IGNORE(argv); if (argc != 1) { Tcl_SetResult(interp, "Wrong # args. spice::listTriggers", TCL_STATIC); return TCL_ERROR; } list = Tcl_NewListObj(0, NULL); #ifdef THREADS mutex_lock(&triggerMutex); #endif for (tmp = watches; tmp; tmp = tmp->next) Tcl_ListObjAppendElement(interp, list, Tcl_NewStringObj(vectors[tmp->vector].name, strlen(vectors[tmp->vector].name))); #ifdef THREADS mutex_unlock(&triggerMutex); #endif Tcl_SetObjResult(interp, list); return TCL_OK; } static int tmeasure TCL_CMDPROCARGS(clientData, interp, argc, argv) { wordlist *wl = NULL; double mvalue; NG_IGNORE(clientData); if (argc <= 2) { Tcl_SetResult(interp, "Wrong # args. spice::listTriggers", TCL_STATIC); return TCL_ERROR; } wl = wl_build((char **)argv); get_measure2(wl, &mvalue, NULL, FALSE); printf(" %e \n", mvalue); Tcl_ResetResult(spice_interp); Tcl_SetObjResult(interp, Tcl_NewDoubleObj((double) mvalue)); return TCL_OK; } /*******************************************************/ /* Initialise spice and setup native methods */ /*******************************************************/ #if defined(__MINGW32__) || defined(_MSC_VER) __declspec(dllexport) #endif int Spice_Init(Tcl_Interp *interp) { if (interp == 0) return TCL_ERROR; #ifdef USE_TCL_STUBS if (Tcl_InitStubs(interp, (char *)"8.1", 0) == NULL) return TCL_ERROR; #endif Tcl_PkgProvide(interp, (char*) TCLSPICE_name, (char*) TCLSPICE_version); Tcl_Eval(interp, "namespace eval " TCLSPICE_namespace " { }"); save_interp(); { int i; char *key; Tcl_CmdInfo infoPtr; char buf[256]; sighandler old_sigint; ft_rawfile = NULL; ivars(NULL); cp_in = stdin; cp_out = stdout; cp_err = stderr; /*timer*/ init_time(); /*IFsimulator struct initilised*/ SIMinit(&nutmeginfo, &ft_sim); /* program name*/ cp_program = ft_sim->simulator; srand((unsigned int) getpid()); TausSeed(); /*parameter fetcher, used in show*/ if_getparam = spif_getparam_special; /* Get startup system limits */ init_rlimits(); /*Command prompt stuff */ ft_cpinit(); /* Read the user config files */ /* To catch interrupts during .spiceinit... */ old_sigint = signal(SIGINT, (SIGNAL_FUNCTION) ft_sigintr); if (SETJMP(jbuf, 1) == 1) { ft_sigintr_cleanup(); fprintf(cp_err, "Warning: error executing .spiceinit.\n"); goto bot; } #ifdef HAVE_PWD_H /* Try to source either .spiceinit or ~/.spiceinit. */ if (access(".spiceinit", 0) == 0) { inp_source(".spiceinit"); } else { char *s; struct passwd *pw; pw = getpwuid(getuid()); s = tprintf("%s" DIR_PATHSEP "%s", pw->pw_dir, INITSTR); if (access(s, 0) == 0) inp_source(s); } #else /* ~ HAVE_PWD_H */ { FILE *fp; /* Try to source the file "spice.rc" in the current directory. */ if ((fp = fopen("spice.rc", "r")) != NULL) { (void) fclose(fp); inp_source("spice.rc"); } } #endif /* ~ HAVE_PWD_H */ bot: signal(SIGINT, old_sigint); /* initilise Tk display */ DevInit(); /* init the mutex */ #ifdef HAVE_LIBPTHREAD pthread_mutex_init(&triggerMutex, NULL); #endif #ifdef THREADS signal(SIGINT, sighandler_tclspice); #endif /*register functions*/ for (i = 0; (key = cp_coms[i].co_comname); i++) { sprintf(buf, "%s%s", TCLSPICE_prefix, key); if (Tcl_GetCommandInfo(interp, buf, &infoPtr) != 0) printf("Command '%s' can not be registered!\n", buf); else Tcl_CreateCommand(interp, buf, _tcl_dispatch, NULL, NULL); } Tcl_CreateCommand(interp, TCLSPICE_prefix "spice_header", spice_header, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "spice_data", spice_data, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "spicetoblt", spicetoblt, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "vectoblt", vectoblt, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "lastVector", lastVector, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "get_value", get_value, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "spice", _spice_dispatch, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "get_output", get_output, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "get_param", get_param, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "get_mod_param", get_mod_param, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "delta", delta, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "maxstep", maxstep, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "get_initTime", get_initTime, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "get_finalTime", get_finalTime, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "plot_variables", plot_variables, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "plot_variablesInfo", plot_variablesInfo, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "plot_get_value", plot_get_value, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "plot_datapoints", plot_datapoints, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "plot_title", plot_title, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "plot_date", plot_date, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "plot_name", plot_name, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "plot_typename", plot_typename, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "plot_nvars", plot_nvars, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "plot_defaultscale", plot_defaultscale, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "plot_getvector", plot_getvector, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "getplot", plot_getplot, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "registerTrigger", registerTrigger, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "registerTriggerCallback", registerTriggerCallback, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "popTriggerEvent", popTriggerEvent, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "unregisterTrigger", unregisterTrigger, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "listTriggers", listTriggers, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "registerStepCallback", registerTriggerCallback, NULL, NULL); #ifdef THREADS Tcl_CreateCommand(interp, TCLSPICE_prefix "bg", _tcl_dispatch, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "halt", _tcl_dispatch, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "running", running, NULL, NULL); #endif Tcl_CreateCommand(interp, TCLSPICE_prefix "tmeasure", tmeasure, NULL, NULL); Tcl_CreateCommand(interp, TCLSPICE_prefix "registerStepCallback", registerStepCallback, NULL, NULL); Tcl_LinkVar(interp, TCLSPICE_prefix "steps_completed", (char *)&steps_completed, TCL_LINK_READ_ONLY|TCL_LINK_INT); Tcl_LinkVar(interp, TCLSPICE_prefix "blt_vnum", (char *)&blt_vnum, TCL_LINK_READ_ONLY|TCL_LINK_INT); } return TCL_OK; } /***************************************/ /* printf wrappers to redirect to puts */ /***************************************/ /* Contributed by Tim Edwards (tim@stravinsky.jhuapl.edu), 2003 */ /*------------------------------------------------------*/ /* Redefine the vfprintf() functions for use with tkcon */ /*------------------------------------------------------*/ int tcl_vfprintf(FILE *f, const char *fmt, va_list args) { char buf[1024]; char *p, *s; int size, nchars, escapes, result; const char * const escape_chars = "$[]\"\\"; const char * const prolog = (f == stderr) ? "puts -nonewline stderr \"" : "puts -nonewline stdout \""; const char * const epilog = "\""; const int prolog_len = strlen(prolog); const int epilog_len = strlen(epilog); if ((fileno(f) != STDOUT_FILENO && fileno(f) != STDERR_FILENO && f != stderr && f != stdout) #ifdef THREADS || (fl_running && bgtid == thread_self()) #endif ) return vfprintf(f, fmt, args); p = buf; // size: how much ist left for chars and terminating '\0' size = sizeof(buf) - prolog_len - epilog_len; // assert(size > 0); for (;;) { va_list ap; va_copy(ap, args); nchars = vsnprintf(p + prolog_len, size, fmt, ap); va_end(ap); if(nchars == -1) { /* compatibility to old implementations */ size *= 2; } else if (size < nchars + 1) { size = nchars + 1; } else { break; } if(p == buf) p = Tcl_Alloc(prolog_len + size + epilog_len); else p = Tcl_Realloc(p, prolog_len + size + epilog_len); } strncpy(p, prolog, prolog_len); s = p + prolog_len; for (escapes = 0; ; escapes++) { s = strpbrk(s, escape_chars); if (!s) break; s++; } if (escapes) { int new_size = prolog_len + nchars + escapes + epilog_len + 1; char *src, *dst; if (p != buf) { p = Tcl_Realloc(p, new_size); } else if (new_size > sizeof(buf)) { p = Tcl_Alloc(new_size); strcpy(p, buf); } src = p + prolog_len + nchars; dst = src + escapes; while (dst > src) { char c = *--src; *--dst = c; if (strchr(escape_chars, c)) *--dst = '\\'; } } strcpy(p + prolog_len + nchars + escapes, epilog); result = Tcl_Eval(spice_interp, p); if (p != buf) Tcl_Free(p); return nchars; } /*----------------------------------------------------------------------*/ /* Reimplement fprintf() as a call to Tcl_Eval(). */ /*----------------------------------------------------------------------*/ int tcl_fprintf(FILE *f, const char *format, ...) { va_list args; int rtn; va_start (args, format); rtn = tcl_vfprintf(f, format, args); va_end(args); return rtn; } /*----------------------------------------------------------------------*/ /* Reimplement printf() as a call to Tcl_Eval(). */ /*----------------------------------------------------------------------*/ int tcl_printf(const char *format, ...) { va_list args; int rtn; va_start (args, format); rtn = tcl_vfprintf(stdout, format, args); va_end(args); return rtn; } /*------------------------------------------------------*/ /* Console output flushing which goes along with the */ /* routine tcl_vprintf() above. */ /*------------------------------------------------------*/ void tcl_stdflush(FILE *f) { Tcl_SavedResult state; static char stdstr[] = "flush stdxxx"; char *stdptr = stdstr + 9; #ifdef THREADS if (fl_running && bgtid == thread_self()) return; #endif Tcl_SaveResult(spice_interp, &state); strcpy(stdptr, (f == stderr) ? "err" : "out"); Tcl_Eval(spice_interp, stdstr); Tcl_RestoreResult(spice_interp, &state); } tmpk8ny_4pz/src/devaxis0000644000175000017500000000237613546075722015345 0ustar carstencarsten* initialize a device plot .control begin unset axis if $argc = 1 set axis = $argv[1] strcmp flag $axis "x" if ($flag = 0) echo "setting axis to x" strcmp flag "$?&devaxis" "0" if ($flag = 0) strcmp flag "$?&xaxis" "0" if ($flag = 0) echo "Error: no x axis present" else transpose all setscale xaxis let devaxis = 1 end else strcmp flag "$&devaxis" "-1" if ($flag = 0) strcmp flag "$?&xaxis" "0" if ($flag = 0) echo "Error: no x axis present" else transpose all setscale xaxis let devaxis = 1 end end end else strcmp flag $axis "y" if ($flag = 0) echo "setting axis to y" strcmp flag "$?&devaxis" "0" if ($flag = 0) strcmp flag "$?&yaxis" "0" if ($flag = 0) echo "Error: no y axis present" else setscale yaxis let devaxis = -1 end else strcmp flag "$&devaxis" "1" if ($flag = 0) strcmp flag "$?&yaxis" "0" if ($flag = 0) echo "Error: no y axis present" else transpose all setscale yaxis let devaxis = -1 end end end else echo "Error: unknown axis" $axis echo "usage: devaxis " end end else echo "usage: devaxis " end unset axis flag end tmpk8ny_4pz/src/unsupported/0000755000175000017500000000000013546075722016337 5ustar carstencarstentmpk8ny_4pz/src/unsupported/cktsndct.c0000644000175000017500000000322113546075722020316 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* * This routine performs the DC and Transient sensitivity * calculations */ #include "ngspice/ngspice.h" #include #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/trandefs.h" #include "ngspice/suffix.h" int CKTsenDCtran(CKTcircuit *ckt) { int error; #ifdef SENSDEBUG printf("time = %.7e\n", ckt->CKTtime); printf("CKTsenDCtran\n"); #endif if (ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN) && (ckt->CKTmode & MODEINITTRAN)) { error = CKTsenLoad(ckt); if (error) return error; #ifdef SENSDEBUG printf("after inittran senload\n"); #endif error = CKTsenUpdate(ckt); if (error) return error; #ifdef SENSDEBUG printf("after inittran senupdate\n"); #endif } if (ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN) && !(ckt->CKTmode & MODETRANOP)) { ckt->CKTmode = (ckt->CKTmode & (~INITF)) | MODEINITFLOAT; } error = CKTsenLoad(ckt); if (error) return error; #ifdef SENSDEBUG printf("after CKTsenLoad\n"); #endif error = CKTsenComp(ckt); if (error) return error; #ifdef SENSDEBUG printf("after CKTsenComp\n"); #endif if (ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN)) { error = CKTsenUpdate(ckt); if (error) return error; #ifdef SENSDEBUG printf("after CKTsenUpdate\n"); #endif } return OK; } tmpk8ny_4pz/src/unsupported/Makefile.am0000644000175000017500000000066013546075722020375 0ustar carstencarsten## Process this file with automake to produce Makefile.in EXTRA_DIST = readme spiced.c noinst_LTLIBRARIES = libunsupported.la libunsupported_la_SOURCES = \ cktsenac.c \ cktsenup.c \ cktsncom.c \ cktsndct.c \ cktsnset.c \ cktsnld.c \ cktsnprt.c \ sen2dest.c \ sen2setp.c \ snaskq.c \ snstart.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/unsupported/cktsncom.c0000644000175000017500000001271613546075722020333 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* CKTsenComp(ckt) * this is a program to solve the sensitivity equation * of the given circuit */ #include "ngspice/ngspice.h" #include #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/trandefs.h" #include "ngspice/suffix.h" // #include "../maths/sparse/spdefs.h" // // this include file from `sparse' is incompatible // with the rest of ngspice // so we can unfortunatly not include here // instead we cheat a bit and // introduce the opaque struct MatrixElement here // (only the first struct members which are of importance to us) struct MatrixElement { double Real; double Imag; // ... }; int CKTsenComp(CKTcircuit *ckt) { int size; int row; int col; SENstruct *info; #ifdef SENSDEBUG char *rowe; SMPelement *elt; #endif #ifdef SENSDEBUG printf("CKTsenComp\n"); #endif size = SMPmatSize(ckt->CKTmatrix); info = ckt->CKTsenInfo; if ((info->SENmode == DCSEN) || (info->SENmode == TRANSEN)) { /* loop throgh all the columns of RHS matrix - each column corresponding to a design parameter */ for (col = 1; col <= info->SENparms; col++) { for (row = 1; row <= size; row++) { ckt->CKTsenRhs[row] = info->SEN_RHS[row][col]; } /* solve for the sensitivity values */ SMPsolve(ckt->CKTmatrix, ckt->CKTsenRhs, ckt->CKTrhsSpare); /* store the sensitivity values */ for (row = 1; row <= size; row++) { info->SEN_Sap[row][col] = ckt->CKTsenRhs[row]; info->SEN_RHS[row][col] = ckt->CKTsenRhs[row]; } } #ifdef SENSDEBUG printf("\n"); printf("Sensitivity matrix :\n"); for (row = 1; row <= size; row++) { rowe = CKTnodName(ckt, row); // if (strcmp("4", rowe) == 0) { for (col = 1; col <= info->SENparms; col++) { printf("\t"); printf("Sap(%s,%d) = %.5e\t", rowe, col, info->SEN_Sap[row][col]); } printf("\n\n"); // } } printf(" RHS matrix :\n"); for (row = 1; row <= size; row++) { for (col = 1; col <= info->SENparms; col++) { printf(" "); printf("RHS(%d,%d) = %.7e ", row, col, info->SEN_RHS[row][col]); } printf("\n"); } printf(" Jacobian matrix :\n"); for (row = 1; row <= size; row++) { for (col = 1; col <= size; col++) { elt = SMPfindElt(ckt->CKTmatrix, row , col , 0); if (elt) printf("%.7e ", elt->Real); else printf("0.0000000e+00 "); } printf("\n"); } #endif } if (info->SENmode == ACSEN) { /* loop throgh all the columns of RHS matrix - each column corresponding to a design parameter */ for (col = 1; col <= info->SENparms; col++) { for (row = 1; row <= size; row++) { ckt->CKTsenRhs[row] = info->SEN_RHS[row][col]; ckt->CKTseniRhs[row] = info->SEN_iRHS[row][col]; } /* solve for the sensitivity values ( both real and imag parts)*/ SMPcSolve(ckt->CKTmatrix, ckt->CKTsenRhs, ckt->CKTseniRhs, ckt->CKTrhsSpare, ckt->CKTirhsSpare); /* store the sensitivity values ( both real and imag parts)*/ for (row = 1; row <= size; row++) { info->SEN_RHS[row][col] = ckt->CKTsenRhs[row]; info->SEN_iRHS[row][col] = ckt->CKTseniRhs[row]; } } #ifdef SENSDEBUG printf("\n"); printf("CKTomega = %.7e rad/sec\t\n", ckt->CKTomega); printf("Sensitivity matrix :\n"); for (row = 1; row <= size; row++) { rowe = CKTnodName(ckt, row); for (col = 1; col <= info->SENparms; col++) { printf("\t"); printf("RHS(%s,%d) = %.5e", rowe, col, info->SEN_RHS[row][col]); printf(" + j %.5e\t", info->SEN_iRHS[row][col]); printf("\n\n"); } printf("\n"); } printf("CKTomega = %.7e rad/sec\t\n", ckt->CKTomega); printf(" RHS matrix :\n"); for (row = 1; row <= size; row++) { for (col = 1; col <= info->SENparms; col++) { printf(" "); printf("RHS(%d,%d) = %.7e ", row, col, info->SEN_RHS[row][col]); printf("+j %.7e ", info->SEN_iRHS[row][col]); } printf("\n"); } printf(" Jacobian matrix for AC :\n"); for (row = 1; row <= size; row++) { for (col = 1; col <= size; col++) { elt = SMPfindElt(ckt->CKTmatrix, row , col , 0); if (elt) { printf("%.7e ", elt->Real); printf("+j%.7e\t", elt->Imag); } else{ printf("0.0000000e+00 "); printf("+j0.0000000e+00\t"); } } printf("\n\n"); } #endif } return OK; } tmpk8ny_4pz/src/unsupported/cktsnprt.c0000644000175000017500000000135713546075722020361 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/trandefs.h" #include "ngspice/suffix.h" /* CKTsenPrint(ckt) * this is a driver program to iterate through all the * various sensitivity print functions provided for * the circuit elements in the given circuit */ void CKTsenPrint(CKTcircuit *ckt) { int i; for (i = 0; i < DEVmaxnum; i++) if (DEVices[i] && DEVices[i]->DEVsenPrint && ckt->CKThead[i]) DEVices[i]->DEVsenPrint (ckt->CKThead[i], ckt); } tmpk8ny_4pz/src/unsupported/cktsnld.c0000644000175000017500000000336713546075722020156 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* * CKTsenLoad(ckt) * this is a driver program to iterate through all the various * sensitivity load functions provided for the circuit elements * in the given circuit */ #include "ngspice/ngspice.h" #include #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/trandefs.h" #include "ngspice/suffix.h" int CKTsenLoad(CKTcircuit *ckt) { int i; int size,row,col; int error; size = SMPmatSize(ckt->CKTmatrix); #ifdef SENSDEBUG printf("CKTsenLoad\n"); #endif if ((ckt->CKTsenInfo->SENmode == DCSEN) || (ckt->CKTsenInfo->SENmode == TRANSEN)) { for (col = 0; col <= ckt->CKTsenInfo->SENparms; col++) for (row = 0; row <= size; row++) ckt->CKTsenInfo->SEN_RHS[row][col] = 0; for (i = 0; i < DEVmaxnum; i++) if (DEVices[i] && DEVices[i]->DEVsenLoad && ckt->CKThead[i]) { error = DEVices[i]->DEVsenLoad (ckt->CKThead[i], ckt); if (error) return error; } } else { for (col = 0; col <= ckt->CKTsenInfo->SENparms; col++) for (row = 0; row <= size; row++) { ckt->CKTsenInfo->SEN_RHS[row][col] = 0; ckt->CKTsenInfo->SEN_iRHS[row][col] = 0; } for (i = 0; i < DEVmaxnum; i++) if (DEVices[i] && DEVices[i]->DEVsenAcLoad && ckt->CKThead[i]) { error = DEVices[i]->DEVsenAcLoad (ckt->CKThead[i], ckt); if (error) return error; } } return OK; } tmpk8ny_4pz/src/unsupported/snstart.c0000644000175000017500000000307113546075722020202 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* This is a routine to initialize the sensitivity * data structure */ int SENstartup(CKTcircuit *ckt, int restart) { int i; int err; IFvalue parmtemp; int type; GENinstance *fast; if (restart) { fprintf(stdout, "Sensitivity-2 analysis: unsupported code\n"); } #ifdef SENSDEBUG printf("SENstartup\n"); #endif ckt->CKTsenInfo->SENstatus = NORMAL; ckt->CKTsenInfo->SENpertfac = 1e-4; ckt->CKTsenInfo->SENinitflag = ON; /* allocate memory in NIsenReinit */ parmtemp.rValue = 1.0; for (i = 0; i < ckt->CKTsenInfo->SENnumVal; i++) { fast = CKTfndDev(ckt, ckt->CKTsenInfo->SENdevices[i]); if (!fast) return E_NODEV; type = fast->GENmodPtr->GENmodType; #ifdef SENSDEBUG printf("SENstartup Instance: %s Design parameter: %s\n", ckt->CKTsenInfo->SENdevices[i], ckt->CKTsenInfo->SENparmNames[i]); #endif err = CKTpName( ckt->CKTsenInfo->SENparmNames[i], &parmtemp, ckt, type, ckt->CKTsenInfo->SENdevices[i], &fast); if (err != OK) return err; } #ifdef SENSDEBUG printf("SENstartup end\n"); #endif return OK; } tmpk8ny_4pz/src/unsupported/sen2setp.c0000644000175000017500000000471413546075722020254 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/sen2defs.h" #include "ngspice/cktdefs.h" #include "ngspice/suffix.h" #include "../spicelib/analysis/analysis.h" int SENsetParm(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value) { SENstruct *job = (SENstruct *) anal; NG_IGNORE(ckt); switch(which) { case SEN_DC: if (value->iValue) job->SENmode |= DCSEN; break; case SEN_AC: if (value->iValue) job->SENmode |= ACSEN; break; case SEN_TRAN: if (value->iValue) job->SENmode |= TRANSEN; break; case SEN_DEV: job->SENnumVal += 1; if (!job->SENdevices) { job->SENdevices = TMALLOC(char *, job->SENnumVal); if (job->SENdevices == NULL) return E_NOMEM; job->SENparmNames = TMALLOC(char *, job->SENnumVal); if (job->SENparmNames == NULL) return E_NOMEM; } else { job->SENdevices = TREALLOC(char *, job->SENdevices, job->SENnumVal); if (job->SENdevices == NULL) return E_NOMEM; job->SENparmNames = TREALLOC(char *, job->SENparmNames, job->SENnumVal); if (job->SENparmNames == NULL) return E_NOMEM; } job->SENdevices [job->SENnumVal - 1] = value->sValue; break; case SEN_PARM: job->SENparmNames [job->SENnumVal - 1] = value->sValue; break; default: return E_BADPARM; } return OK; } static IFparm SENparms[] = { { "dc", SEN_DC, IF_SET|IF_FLAG, "sensitivity in DC analysis" }, { "op", SEN_DC, IF_SET|IF_FLAG, "sensitivity in DCop analysis" }, { "ac", SEN_AC, IF_SET|IF_FLAG, "sensitivity in AC analysis" }, { "tran", SEN_TRAN, IF_SET|IF_FLAG, "sensitivity in transient analysis"}, { "dev", SEN_DEV, IF_SET|IF_INSTANCE, "instance with design param." }, { "parm", SEN_PARM, IF_SET|IF_STRING, "name of design parameter" }, }; SPICEanalysis SEN2info = { { "SENS2", "Sensitivity analysis", NUMELEMS(SENparms), SENparms }, sizeof(SENstruct), NODOMAIN, 0, SENsetParm, SENaskQuest, NULL, SENstartup }; tmpk8ny_4pz/src/unsupported/cktsenac.c0000644000175000017500000000144113546075722020276 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/trandefs.h" #include "ngspice/suffix.h" /* CKTsenAC(ckt) * this is a routine for AC sensitivity calculations */ int CKTsenAC(CKTcircuit *ckt) { int error; #ifdef SENSDEBUG printf("CKTsenAC\n"); #endif error = CKTsenLoad(ckt); if (error) return error; #ifdef SENSDEBUG printf("after CKTsenLoad\n"); #endif error = CKTsenComp(ckt); if (error) return error; #ifdef SENSDEBUG printf("after CKTsenComp\n"); #endif return OK; } tmpk8ny_4pz/src/unsupported/sen2dest.c0000644000175000017500000000275613546075722020244 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* SENdestroy(ckt) * this is a driver program to iterate through all the various * destroy functions provided for the circuit elements in the * given circuit */ #include "ngspice/ngspice.h" #include #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" void SENdestroy(SENstruct *info) { int i; int size; size = info->SENsize; #ifdef SENSDEBUG printf("size = %d\n", size); printf("freeing sensitivity structure in SENdestroy\n"); #endif /* if (info->SENdevices) FREE(info->SENdevices); if (info->SENparmNames) FREE(info->SENparmNames); */ if (info->SEN_Sap) { #ifdef SENSDEBUG printf("freeing SEN_Sap in SENdestroy\n"); #endif for (i = 0; i <= size; i++) if (info->SEN_Sap[i]) FREE(info->SEN_Sap[i]); FREE(info->SEN_Sap); } if (info->SEN_RHS) { for (i = 0; i <= size; i++) if (info->SEN_RHS[i]) FREE(info->SEN_RHS[i]); FREE(info->SEN_RHS); } if (info->SEN_iRHS) { for (i = 0; i <= size; i++) if (info->SEN_iRHS[i]) FREE(info->SEN_iRHS[i]); FREE(info->SEN_Sap); } /* FREE(info); */ #ifdef SENSDEBUG printf("SENdestroy end\n"); #endif return; } tmpk8ny_4pz/src/unsupported/snaskq.c0000644000175000017500000000104113546075722017777 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/sen2defs.h" #include "ngspice/cktdefs.h" #include "ngspice/suffix.h" int SENaskQuest(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value) { NG_IGNORE(ckt); NG_IGNORE(anal); NG_IGNORE(value); switch(which) { default: break; } return E_BADPARM; } tmpk8ny_4pz/src/unsupported/spiced.c0000644000175000017500000001473713546075722017766 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Do remote spice jobs. The first line transmitted will be of the * format: "user host program". The program field may be left out, * in which case it defaults to SPICE_PATH. The program is then * executed, with the single argument "-S". The remote host should * wait for a response from spiced before sending any data -- so * far the only response sent is "ok". * Eventually we will want to deal with load-balancing * of spice jobs. */ #include "spice.h" #include #include "strext.h" #include #include #ifdef HAS_BSDSOCKETS #include #include #include #ifdef HAS_BSDRUSAGE #include #include #else #ifdef HAS_SYSVRUSAGE #include #include #endif #endif #include #include /* Better have #ifdef HAS_UNIX_SIGS XXX */ #include /* Better have #ifdef HAS_WAIT XXX */ #include #include "ngspice/suffix.h" #define MAXJOBS 2 int nrunning = 0; int maxjobs = MAXJOBS; extern int errno; extern char *sys_errlist[]; extern char **environ; /* ARGSUSED */ void main(ac, av) char **av; { int s, inetd = 0; struct servent *sp; struct protoent *pp; struct sockaddr_in from, sin; int g, i, len = sizeof (struct sockaddr_in); void dostuff(); int sigchild(); FILE *fp; char *datestring(); /* Process arguments. */ ivars(NULL); av++; while (*av) { if (!strcmp(*av, "-i")) inetd++; else maxjobs = atoi(av[1]); av++; } if (inetd == 0) { /* Find out who we are. */ sp = getservbyname("spice", "tcp"); if (sp == NULL) { fprintf(stderr, "Error: spice/tcp: unknown service\n"); exit(1); } pp = getprotobyname("tcp"); if (pp == NULL) { fprintf(stderr, "Error: tcp: unknown protocol\n"); exit(1); } /* Create the socket. */ s = socket(AF_INET, SOCK_STREAM, pp->p_proto); if (s < 0) { perror("spiced: socket"); exit(1); } sin.sin_port = sp->s_port; if (bind(s, (struct sockaddr *) &sin, sizeof (struct sockaddr_in)) < 0) { perror("spiced: bind"); exit(1); } #ifndef DEBUG /* Disconnect from the controlling terminal. */ if (fork()) exit(0); for (i = 0; i < 10; i++) if (i != s) (void) close(i); (void) open("/", O_RDONLY); (void) dup2(0, 1); (void) dup2(0, 2); i = open("/dev/tty", O_RDWR); if (i > 0) { (void) ioctl(i, TIOCNOTTY, NULL); (void) close(i); } #endif #ifdef SIGCHLD (void) signal(SIGCHLD, sigchild); #else #ifdef SIGCLD (void) signal(SIGCLD, sigchild); #endif #endif fp = fopen(Spiced_Log, "a"); fprintf(fp, "\n-- new daemon, pid = %d, date = %s\n\n", getpid(), datestring()); (void) fclose(fp); /* Start (void) listening for requests. */ (void) listen(s, 5); for (;;) { g = accept(s, (struct sockaddr *) &from, &len); if (g < 0) { if (errno != EINTR) { fp = fopen(Spiced_Log, "a"); fprintf(fp, "\n>>> accept: %s\n\n", sys_errlist[errno]); exit(1); } continue; } if (!fork()) { (void) close(s); #ifdef SIGCHLD (void) signal(SIGCHLD, SIG_IGN); #else #ifdef SIGCLD (void) signal(SIGCLD, SIG_IGN); #endif #endif dostuff(g); } nrunning++; (void) close(g); } } else { /* All this is already done for us. */ dostuff(0); } } void dostuff(s) { FILE *fp; char *datestring(); char buf[BUFSIZ], user[16], host[32], program[128]; char *argv[3], *t; int i, rc; #ifdef HAS_INTWAITSTATUS int stats; #else union wait stats; #endif #ifdef HAS_BSDRUSAGE struct rusage ru; #endif /* Should do some sort of verification */ i = read(s, buf, BUFSIZ); if (i < 0) { perror("spiced: read"); exit(1); } i = sscanf(buf, "%s %s %s", user, host, program); if (i < 2) { fprintf(stderr, "Error: bad init line: %s\n", buf); exit(1); } if (i == 2) (void) strcpy(program, tilde_expand(Spice_Path)); if (nrunning > maxjobs - 1) { /* Too many people. */ (void) write(s, "toomany", 8); fp = fopen(Spiced_Log, "a"); fprintf(fp, "%s: %s@%s: turned down - %d jobs now\n", datestring(), user, host, nrunning); (void) fclose(fp); exit(0); } (void) write(s, "ok", 3); if ((i = fork()) == 0) { (void) dup2(s, 0); (void) dup2(s, 1); (void) dup2(s, 2); argv[0] = program; argv[1] = "-S"; argv[2] = NULL; (void) execve(program, argv, environ); perror(program); exit(1); } #ifdef HAS_BSDRUSAGE /* Assume BSDRUSAGE -> wait3( ) XXX */ if (wait3(&stats, 0, &ru) != i) { perror("wait"); exit(1); } #else #ifdef HAS_WAIT wait(&stats); rc = 0; rc = WEXITSTATUS(stats); #endif #endif /* Write a log entry. */ #ifdef HAS_BSDRUSAGE (void) sprintf(buf, "%d:%d.%6d", ru.ru_utime.tv_sec / 60, ru.ru_utime.tv_sec % 60, ru.ru_utime.tv_usec); for (t = buf; *t; t++) ; for (t--; *t == '0'; *t-- = '\0') ; #else (void) strcpy(buf, "unknown"); #endif fp = fopen(Spiced_Log, "a"); fprintf(fp, "%s: %s@%s: %s - \n\texit %d, time %s\n", datestring(), user, host, program, rc, buf); (void) fclose(fp); exit(0); } /* Don't care what happens to the child */ int sigchild() { int pid; FILE *fp; pid = wait(NULL); if (pid == -1) { fp = fopen(Spiced_Log, "a"); fprintf(fp, "\n>>>spiced: wait: %s\n\n", sys_errlist[errno]); (void) fclose(fp); } else nrunning--; return; } #else /* not HAS_BSDSOCKETS */ main( ) { fprintf(stderr, "The program \"spiced\" is not available on this system.\n"); exit(1); } #endif /* HAS_BSDSOCKETS */ tmpk8ny_4pz/src/unsupported/cktsenup.c0000644000175000017500000000153313546075722020341 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* CKTsenUpdate(ckt) * this is a driver program to iterate through all the various * sensitivity update functions provided for the circuit elements * in the given circuit */ #include "ngspice/ngspice.h" #include #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/trandefs.h" #include "ngspice/suffix.h" int CKTsenUpdate(CKTcircuit *ckt) { int i; int error; for (i = 0; i < DEVmaxnum; i++) if (DEVices[i] && DEVices[i]->DEVsenUpdate && ckt->CKThead[i]) { error = DEVices[i]->DEVsenUpdate (ckt->CKThead[i], ckt); if (error) return error; } return OK; } tmpk8ny_4pz/src/unsupported/readme0000644000175000017500000000023313546075722017515 0ustar carstencarsten This directory contains code for an old, unsupported sensitivity analysis. It is not used in the current distribution and will be removed in the future. tmpk8ny_4pz/src/unsupported/cktsnset.c0000644000175000017500000000202513546075722020340 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* * CKTsenSetup(ckt) * this is a driver program to iterate through all the various * sensitivity setup functions provided for the circuit elements * in the given circuit */ #include "ngspice/ngspice.h" #include #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/trandefs.h" #include "ngspice/suffix.h" int CKTsenSetup(CKTcircuit *ckt) { int i; int error; SENstruct *info; #ifdef SENSDEBUG printf("CKTsenSetup\n"); #endif info = ckt->CKTsenInfo; info->SENparms = 0; for (i = 0; i < DEVmaxnum; i++) if (DEVices[i] && DEVices[i]->DEVsenSetup && ckt->CKThead[i]) { error = DEVices[i]->DEVsenSetup (info, ckt->CKThead[i]); if (error) return error; } #ifdef SENSDEBUG printf("CKTsenSetup end\n"); #endif return OK; } tmpk8ny_4pz/src/ciderinit0000644000175000017500000000075213546075722015650 0ustar carstencarsten*** This is a sample spice/cider initialization file. alias pl print line alias pc print col alias ds display alias hi history alias li listing alias p plot alias pr print alias q quit alias bye quit alias exit quit alias so source alias ld load alias xg xgraph tmp alias sp setplot alias dl devload alias dx devaxis set width = 80 height = 24 nosort noaskquit nobreak set xbrushheight = 3 xbrushwidth = 3 set unixcom set hcopydevtype = postscript set pointstyle = markers set term = vt100 tmpk8ny_4pz/src/xspice/0000755000175000017500000000000013546075722015242 5ustar carstencarstentmpk8ny_4pz/src/xspice/Makefile.am0000644000175000017500000000206413546075722017300 0ustar carstencarsten# Process this file with automake EXTRA_DIST = README examples icm xspice.c .gitignore ## This is removed because icm relies upon the existance of all other ## libs. It is currently compiled manually, last. ##SUBDIRS = mif cm enh evt ipc idn icm SUBDIRS = mif cm enh evt ipc idn cmpp icm dist-hook: rm -f "$(distdir)/icm/makedefs" rm -f "$(distdir)/icm/GNUmakefile" rm -rf `find $(distdir)/icm -name .deps` rm -rf `find $(distdir)/icm -name *.o` rm -rf `find $(distdir)/icm -name *.cm` for sub in analog digital spice2poly xtradev xtraevt table ; do \ rm -rf `find $(distdir)/icm/$$sub -name cmextrn.h`; \ rm -rf `find $(distdir)/icm/$$sub -name cminfo.h`; \ rm -rf `find $(distdir)/icm/$$sub -name udnextrn.h`; \ rm -rf `find $(distdir)/icm/$$sub -name udninfo.h`; \ rm -rf `find $(distdir)/icm/$$sub -name ifspec.c`; \ rm -rf `find $(distdir)/icm/$$sub -name cfunc.c`; \ rm -rf `find $(distdir)/icm/$$sub -name dlmain.c`; \ rm -rf `find $(distdir)/icm/$$sub -name objects.inc`; \ done MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/xspice/mif/0000755000175000017500000000000013546075722016015 5ustar carstencarstentmpk8ny_4pz/src/xspice/mif/Makefile.am0000644000175000017500000000076213546075722020056 0ustar carstencarsten## Process this file with automake to produce Makefile.in # # JW 3/9/01 - had a go and makeing an autoconf script. noinst_LTLIBRARIES = libmifxsp.la libmifxsp_la_SOURCES = \ mif_inp2.c \ mifgetmod.c \ mifgetvalue.c \ mifload.c \ mifmpara.c \ mifsetup.c \ mifutil.c \ mifask.c \ mifmask.c \ miftrunc.c \ mifconvt.c \ mifdelete.c \ mifmdelete.c \ mifdestr.c \ mif.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/xspice/mif/mifmpara.c0000644000175000017500000001500513546075722017756 0ustar carstencarsten/*============================================================================ FILE MIFmParam.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the function used to assign the value of a parameter read from the .model card into the appropriate structure in the model. INTERFACES MIFmParam() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ /* #include "prefix.h" */ #include "ngspice/ngspice.h" #include //#include "CONST.h" //#include "util.h" #include "ngspice/ifsim.h" //#include "resdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include #include "ngspice/mifproto.h" #include "ngspice/mifparse.h" #include "ngspice/mifdefs.h" #include "ngspice/mifcmdat.h" /* #include "suffix.h" */ /* MIFmParam This function is called by SPICE/Nutmeg to set the value of a parameter on a model according to information parsed from a .model card or information supplied interactively by a user. It takes the value of the parameter input in an IFvalue structure and sets the parameter on the specified model structure. Unlike the procedure for SPICE 3C1 devices, MIFmParam does not use enumerations for identifying the parameter to set. Instead, the parameter is identified directly by the index value of the parameter in the SPICEdev.DEVpublic.modelParms array. */ int MIFmParam( int param_index, /* The parameter to set */ IFvalue *value, /* The value of the parameter */ GENmodel *inModel) /* The model structure on which to set the value */ { MIFmodel *model; int mod_type; int value_type; int i; Mif_Boolean_t is_array; /* Arrange for access to MIF specific data in the model */ model = (MIFmodel *) inModel; /* Get model type */ mod_type = model->MIFmodType; if((mod_type < 0) || (mod_type >= DEVmaxnum)) return(E_BADPARM); /* Check parameter index for validity */ if((param_index < 0) || (param_index >= model->num_param)) return(E_BADPARM); /* get value type to know which members of unions to access */ value_type = DEVices[mod_type]->DEVpublic.modelParms[param_index].dataType; value_type &= IF_VARTYPES; /* determine if the parameter is an array or not */ is_array = value_type & IF_VECTOR; /* initialize the parameter is_null and size elements and allocate elements */ model->param[param_index]->is_null = MIF_FALSE; /* element may exist already, if called from 'altermod' */ FREE(model->param[param_index]->element); if(is_array) { model->param[param_index]->size = value->v.numValue; model->param[param_index]->element = TMALLOC(Mif_Value_t, value->v.numValue); } else { model->param[param_index]->size = 1; model->param[param_index]->element = TMALLOC(Mif_Value_t, 1); } /* Transfer the values from the SPICE3C1 value union to the param elements */ /* This is analagous to what SPICE3 does with other device types */ if(! is_array) { switch(value_type) { case IF_FLAG: model->param[param_index]->element[0].bvalue = value->iValue; model->param[param_index]->eltype = IF_FLAG; break; case IF_INTEGER: model->param[param_index]->element[0].ivalue = value->iValue; model->param[param_index]->eltype = IF_INTEGER; break; case IF_REAL: model->param[param_index]->element[0].rvalue = value->rValue; model->param[param_index]->eltype = IF_REAL; break; case IF_STRING: /* we don't trust the caller to keep the string alive, so copy it */ model->param[param_index]->element[0].svalue = TMALLOC(char, 1 + strlen(value->sValue)); strcpy(model->param[param_index]->element[0].svalue, value->sValue); model->param[param_index]->eltype = IF_STRING; break; case IF_COMPLEX: /* we don't trust the caller to have a parallel complex structure */ /* so copy the real and imaginary parts explicitly */ model->param[param_index]->element[0].cvalue.real = value->cValue.real; model->param[param_index]->element[0].cvalue.imag = value->cValue.imag; model->param[param_index]->eltype = IF_COMPLEX; break; default: return(E_BADPARM); } } else { /* it is an array */ for(i = 0; i < value->v.numValue; i++) { switch(value_type) { case IF_FLAGVEC: model->param[param_index]->element[i].bvalue = value->v.vec.iVec[i]; model->param[param_index]->eltype = IF_FLAGVEC; break; case IF_INTVEC: model->param[param_index]->element[i].ivalue = value->v.vec.iVec[i]; model->param[param_index]->eltype = IF_INTVEC; break; case IF_REALVEC: model->param[param_index]->element[i].rvalue = value->v.vec.rVec[i]; model->param[param_index]->eltype = IF_REALVEC; break; case IF_STRINGVEC: /* we don't trust the caller to keep the string alive, so copy it */ model->param[param_index]->element[i].svalue = TMALLOC(char, 1 + strlen(value->v.vec.sVec[i])); strcpy(model->param[param_index]->element[i].svalue, value->v.vec.sVec[i]); model->param[param_index]->eltype = IF_STRINGVEC; break; case IF_CPLXVEC: /* we don't trust the caller to have a parallel complex structure */ /* so copy the real and imaginary parts explicitly */ model->param[param_index]->element[i].cvalue.real = value->v.vec.cVec[i].real; model->param[param_index]->element[i].cvalue.imag = value->v.vec.cVec[i].imag; model->param[param_index]->eltype = IF_CPLXVEC; break; default: return(E_BADPARM); } /* end switch */ } /* end for number of elements of vector */ } /* end else */ return(OK); } tmpk8ny_4pz/src/xspice/mif/mifask.c0000644000175000017500000001420113546075722017431 0ustar carstencarsten/*============================================================================ FILE MIFask.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the function used by nutmeg to request the value of a code model static var. INTERFACES MIFask() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ /* #include "prefix.h" */ #include "ngspice/ngspice.h" #include //#include "CONST.h" //#include "util.h" #include "ngspice/ifsim.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include #include "ngspice/mifproto.h" #include "ngspice/mifdefs.h" /* #include "suffix.h" */ /* MIFask This function is called by SPICE/Nutmeg to query the value of a parameter on an instance. It locates the value of the parameter in the instance structure and converts the value into the IFvalue structure understood by Nutmeg. For code models, this function is provided to allow output of Instance Variables defined in the code model's Interface Specification. */ int MIFask( CKTcircuit *ckt, /* The circuit structure */ GENinstance *inInst, /* The instance to get the value from */ int which, /* The parameter to get */ IFvalue *value, /* The value returned */ IFvalue *select) /* Unused */ { MIFinstance *inst; MIFmodel *model; int mod_type; int value_type; int i; int size; int inst_index; Mif_Boolean_t is_array; NG_IGNORE(ckt); NG_IGNORE(select); /* Arrange for access to MIF specific data in the instance */ inst = (MIFinstance *) inInst; /* Arrange for access to MIF specific data in the model */ model = MIFmodPtr(inst); /* Get model type */ mod_type = model->MIFmodType; if((mod_type < 0) || (mod_type >= DEVmaxnum)) return(E_BADPARM); /* Adjust parameter tag to actual index into inst info array */ inst_index = which - model->num_param; /* Check instance index for validity */ if((inst_index < 0) || (inst_index >= inst->num_inst_var)) return(E_BADPARM); /* get value type to know which members of unions to access */ value_type = DEVices[mod_type]->DEVpublic.instanceParms[inst_index].dataType; value_type &= IF_VARTYPES; /* determine if the parameter is an array or not */ is_array = value_type & IF_VECTOR; /* Transfer the values to the SPICE3C1 value union from the param elements */ /* This is analagous to what SPICE3 does with other device types */ if(! is_array) { switch(value_type) { case IF_FLAG: value->iValue = inst->inst_var[inst_index]->element[0].bvalue; break; case IF_INTEGER: value->iValue = inst->inst_var[inst_index]->element[0].ivalue; break; case IF_REAL: value->rValue = inst->inst_var[inst_index]->element[0].rvalue; break; case IF_STRING: /* Make copy of string. We don't trust caller to not free it */ /* These copies could get expensive! */ value->sValue = MIFcopy(inst->inst_var[inst_index]->element[0].svalue); break; case IF_COMPLEX: /* we don't trust the caller to have a parallel complex structure */ /* so copy the real and imaginary parts explicitly */ value->cValue.real = inst->inst_var[inst_index]->element[0].cvalue.real; value->cValue.imag = inst->inst_var[inst_index]->element[0].cvalue.imag; break; default: return(E_BADPARM); } } else { /* it is an array */ size = inst->inst_var[inst_index]->size; if(size < 0) size = 0; value->v.numValue = size; switch(value_type) { /* Note that we malloc space each time this function is called. */ /* This is what TRAask.c does, so we do it too, even though */ /* we don't know if it is ever freed... */ case IF_FLAGVEC: if(size <= 0) break; value->v.vec.iVec = TMALLOC(int, size); for(i = 0; i < size; i++) value->v.vec.iVec[i] = inst->inst_var[inst_index]->element[i].bvalue; break; case IF_INTVEC: if(size <= 0) break; value->v.vec.iVec = TMALLOC(int, size); for(i = 0; i < size; i++) value->v.vec.iVec[i] = inst->inst_var[inst_index]->element[i].ivalue; break; case IF_REALVEC: if(size <= 0) break; value->v.vec.rVec = TMALLOC(double, size); for(i = 0; i < size; i++) value->v.vec.rVec[i] = inst->inst_var[inst_index]->element[i].rvalue; break; case IF_STRINGVEC: if(size <= 0) break; value->v.vec.sVec = TMALLOC(char *, size); for(i = 0; i < size; i++) /* Make copy of string. We don't trust caller to not free it */ /* These copies could get expensive! */ value->v.vec.sVec[i] = MIFcopy(inst->inst_var[inst_index]->element[i].svalue); break; case IF_CPLXVEC: if(size <= 0) break; /* we don't trust the caller to have a parallel complex structure */ /* so copy the real and imaginary parts explicitly */ value->v.vec.cVec = TMALLOC(IFcomplex, size); for(i = 0; i < size; i++) { value->v.vec.cVec[i].real = inst->inst_var[inst_index]->element[i].cvalue.real; value->v.vec.cVec[i].imag = inst->inst_var[inst_index]->element[i].cvalue.imag; } break; default: return(E_BADPARM); } /* end switch */ } /* end else */ return(OK); } tmpk8ny_4pz/src/xspice/mif/miftrunc.c0000644000175000017500000001300613546075722020010 0ustar carstencarsten/*============================================================================ FILE MIFtrunc.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the function called by SPICE to check truncation error of an integration state used by a code model. INTERFACES MIFtrunc() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ /* #include "prefix.h" */ #include "ngspice/ngspice.h" #include #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" //#include "util.h" #include #include "ngspice/mifproto.h" #include "ngspice/mifparse.h" #include "ngspice/mifdefs.h" #include "ngspice/mifcmdat.h" /* #include "suffix.h" */ static void MIFterr(Mif_Intgr_t *intgr, CKTcircuit *ckt, double *timeStep); /* MIFtrunc This function is called by the CKTtrunc() driver function to check numerical integration truncation error of any integrals associated with instances of a particular code model type. It traverses all models of that type and all instances of each model. For each instance, it looks in the instance structure to determine if any variables allocated by cm_analog_alloc() have been used in a call to cm_analog_integrate(). If so, the truncation error of that integration is computed and used to set the maximum delta allowed for the current timestep. */ int MIFtrunc( GENmodel *inModel, /* The head of the model list */ CKTcircuit *ckt, /* The circuit structure */ double *timeStep) /* The timestep delta */ { MIFmodel *model; MIFinstance *here; int i; /* Setup for access into MIF specific model data */ model = (MIFmodel *) inModel; /* loop through all models of this type */ for( ; model != NULL; model = MIFnextModel(model)) { /* Loop through all instances of this model */ for(here = MIFinstances(model); here != NULL; here = MIFnextInstance(here)) { /* Loop through all integration states on the instance */ for(i = 0; i < here->num_intgr; i++) { /* Limit timeStep according to truncation error */ MIFterr(&(here->intgr[i]), ckt, timeStep); } /* end for number of integration states */ } /* end for all instances */ } /* end for all models of this type */ return(OK); } /* * Copyright (c) 1985 Thomas L. Quarles * * This is a modified version of the function CKTterr(). It limits * timeStep according to computed truncation error. * * Modifications are Copyright 1991 Georgia Tech Research Institute * */ static void MIFterr( Mif_Intgr_t *intgr, CKTcircuit *ckt, double *timeStep) { double volttol; double chargetol; double tol; double del; double diff[8]; double deltmp[8]; double factor; int i; int j; static double gearCoeff[] = { .5, .2222222222, .1363636364, .096, .07299270073, .05830903790 }; static double trapCoeff[] = { .5, .08333333333 }; /* Define new local variables. Dimension = number of states in ckt struct */ char *byte_aligned_state_ptr; double *state_ptr[8]; /* Set state pointers to the (possibly byte-aligned) states */ for(i = 0; i < 8; i++) { byte_aligned_state_ptr = (char *) ckt->CKTstates[i]; byte_aligned_state_ptr += intgr->byte_index; state_ptr[i] = (double *) byte_aligned_state_ptr; } /* Modify computation of volttol to not include current from previous timestep */ /* which is unavailable in this implementation. Note that this makes the */ /* the overall trunction error timestep smaller (which is better accuracy) */ /* Old code */ /* volttol = ckt->CKTabstol + ckt->CKTreltol * MAX( fabs(ckt->CKTstate0[ccap]), fabs(ckt->CKTstate1[ccap])); */ /* New code */ volttol = ckt->CKTabstol + ckt->CKTreltol * fabs(*(state_ptr[0]) - *(state_ptr[1])) / ckt->CKTdelta; /* Modify remaining references to qcap to access byte-aligned MIF state */ /* Otherwise, remaining code is same as SPICE3C1 ... */ chargetol = MAX(fabs(*(state_ptr[0])),fabs(*(state_ptr[1]))); chargetol = ckt->CKTreltol * MAX(chargetol,ckt->CKTchgtol)/ckt->CKTdelta; tol = MAX(volttol,chargetol); /* now divided differences */ for(i=ckt->CKTorder+1;i>=0;i--) { diff[i] = *(state_ptr[i]); } for(i=0 ; i <= ckt->CKTorder ; i++) { deltmp[i] = ckt->CKTdeltaOld[i]; } j = ckt->CKTorder; for (;;) { for(i=0;i <= j;i++) { diff[i] = (diff[i] - diff[i+1])/deltmp[i]; } if (--j < 0) break; for(i=0;i <= j;i++) { deltmp[i] = deltmp[i+1] + ckt->CKTdeltaOld[i]; } } switch(ckt->CKTintegrateMethod) { case GEAR: default: factor = gearCoeff[ckt->CKTorder-1]; break; case TRAPEZOIDAL: factor = trapCoeff[ckt->CKTorder - 1] ; break; } del = ckt->CKTtrtol * tol/MAX(ckt->CKTabstol,factor * fabs(diff[0])); if(ckt->CKTorder == 2) { del = sqrt(del); } else if (ckt->CKTorder > 2) { del = exp(log(del)/ckt->CKTorder); } *timeStep = MIN(*timeStep,del); return; } tmpk8ny_4pz/src/xspice/mif/mifconvt.c0000644000175000017500000000757213546075722020021 0ustar carstencarsten/*============================================================================ FILE MIFconvTest.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the function used to check that internal states of a code model have converged. These internal states are typically integration states. INTERFACES MIFconvTest() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ /* #include "prefix.h" */ #include "ngspice/ngspice.h" #include #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" //#include "util.h" #include "ngspice/devdefs.h" //#include "CONST.h" #include "ngspice/trandefs.h" #include #include "ngspice/enh.h" #include "ngspice/mifproto.h" #include "ngspice/mifparse.h" #include "ngspice/mifdefs.h" #include "ngspice/mifcmdat.h" /* #include "suffix.h" */ /* MIFconvTest This function is called by the CKTconvTest() driver function to check convergence of any states owned by instances of a particular code model type. It loops through all models of that type and all instances of each model. For each instance, it looks in the instance structure to determine if any variables allocated by cm_analog_alloc() have been registered by a call to cm_analog_converge() to have their convergence tested. If so, the value of the function at the last iteration is compared with the value at the current iteration to see if it has converged to within the same delta amount used in node convergence checks (as defined by SPICE 3C1). */ int MIFconvTest( GENmodel *inModel, /* The head of the model list */ CKTcircuit *ckt) /* The circuit structure */ { MIFmodel *model; MIFinstance *here; int i; double value; double last_value; char *byte_aligned_double_ptr; double *double_ptr; double tol; Mif_Boolean_t gotone = MIF_FALSE; /* Setup for access into MIF specific model data */ model = (MIFmodel *) inModel; /* loop through all models of this type */ for( ; model != NULL; model = MIFnextModel(model)) { /* Loop through all instances of this model */ for(here = MIFinstances(model); here != NULL; here = MIFnextInstance(here)) { /* Loop through all items registered for convergence */ for(i = 0; i < here->num_conv; i++) { /* Get the current value and the last value */ byte_aligned_double_ptr = (char *) ckt->CKTstate0; byte_aligned_double_ptr += here->conv[i].byte_index; double_ptr = (double *) byte_aligned_double_ptr; value = *double_ptr; last_value = here->conv[i].last_value; /* If none have failed so far, check convergence */ if(! gotone) { tol = ckt->CKTreltol * MAX(fabs(value), fabs(last_value)) + ckt->CKTabstol; if (fabs(value - last_value) > tol) { if(ckt->enh->conv_debug.report_conv_probs) { ENHreport_conv_prob(ENH_ANALOG_INSTANCE, here->MIFname, ""); } ckt->CKTnoncon++; gotone = MIF_TRUE; } } /* Rotate the current value to last_value */ here->conv[i].last_value = value; } /* end for number of conv items */ } /* end for all instances */ } /* end for all models of this type */ return(OK); } tmpk8ny_4pz/src/xspice/mif/mifutil.c0000644000175000017500000002074413546075722017641 0ustar carstencarsten/*============================================================================ FILE MIFutil.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains various utility routines used by the MIF package. INTERFACES MIFgettok() MIFget_token() MIFget_cntl_src_type() MIFcopy() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ /* #include "prefix.h" */ #include "ngspice/ngspice.h" //#include "util.h" #include "ngspice/cpstd.h" #include #include "ngspice/miftypes.h" #include "ngspice/mifproto.h" /* #include "suffix.h" */ /* MIFgettok Get the next token from the input string. The input string pointer is advanced to the following token and the token from the input string is copied to malloced storage and a pointer to that storage is returned. The original input string is undisturbed. MIFgettok treats ( and ) like whitespace. */ char *MIFgettok(char **s) { char *ret_str; /* storage for returned string */ char *end; char *beg; /* skip over white spaces, '=', '(', ')', and ',' up to next token */ while (isspace_c(**s) || (**s == '=') || (**s == '(') || (**s == ')') || (**s == ',')) (*s)++; /* isolate the next token */ switch (**s) { case '\0': return(NULL); case '<': case '>': case '[': case ']': case '~': case '%': beg = *s; (*s)++; ret_str = copy_substring(beg, *s); /* skip over white spaces, '=', '(', ')', and ',' up to next token */ while (isspace_c(**s) || (**s == '=') || (**s == '(') || (**s == ')') || (**s == ',')) (*s)++; return ret_str; break; default: /* if first character is a quote, read until the closing */ /* quote, or the end of string, discarding the quotes */ if (**s == '"') { (*s)++; ret_str = gettok_char(s, '"', FALSE, FALSE); if (**s == '"') (*s)++; /* skip over white spaces, '=', '(', ')', and ',' up to next token */ while (isspace_c(**s) || (**s == '=') || (**s == '(') || (**s == ')') || (**s == ',')) (*s)++; return ret_str; } /* else, read until the next delimiter */ else { beg = *s; while ((**s != '\0') && (!(isspace_c(**s) || (**s == '=') || (**s == '%') || (**s == '(') || (**s == ')') || (**s == ',') || (**s == '[') || (**s == ']') || (**s == '<') || (**s == '>') || (**s == '~') ))) { (*s)++; } end = *s; /* skip over white spaces, '=', '(', ')', and ',' up to next token */ while (isspace_c(**s) || (**s == '=') || (**s == '(') || (**s == ')') || (**s == ',')) (*s)++; return (copy_substring(beg, end)); } break; } return NULL; /* should not happen */ } #if 0 /* preliminary fix */ char *MIFgettok(char **s) { char *buf; /* temporary storage to copy token into */ char *ret_str; /* storage for returned string */ int i; /* allocate space big enough for the whole string */ buf = TMALLOC(char, strlen(*s) + 2); /* FIXME, not yet understood why +1 leads to spurious crash in tfree, if optimized code for Windows*/ /* skip over any white space */ while(isspace_c(**s) || (**s == '=') || (**s == '(') || (**s == ')') || (**s == ',')) (*s)++; /* isolate the next token */ switch(**s) { case '\0': FREE(buf); return(NULL); case '<': case '>': case '[': case ']': case '~': case '%': buf[0] = **s; buf[1] = '\0'; (*s)++; break; default: i = 0; /* if first character is a quote, read until the closing */ /* quote, or the end of string, discarding the quotes */ if(**s == '"') { (*s)++; while( (**s != '\0') && (**s != '"') ) { buf[i] = **s; i++; (*s)++; } if(**s == '"') (*s)++; } /* else, read until the next delimiter */ else { while( (**s != '\0') && (! ( isspace_c(**s) || (**s == '=') || (**s == '%') || (**s == '(') || (**s == ')') || (**s == ',') || (**s == '[') || (**s == ']') || (**s == '<') || (**s == '>') || (**s == '~') ) ) ) { buf[i] = **s; i++; (*s)++; } } buf[i] = '\0'; break; } /* skip over white space up to next token */ while(isspace_c(**s) || (**s == '=') || (**s == '(') || (**s == ')') || (**s == ',')) (*s)++; /* make a copy using only the space needed by the string length */ /* Changed from copy to MIFcopy by SDB on 6.22.2003 */ ret_str = MIFcopy(buf); FREE(buf); return(ret_str); } #endif /* MIFget_token Get the next token from the input string together with its type. The input string pointer is advanced to the following token and the token from the input string is copied to malloced storage and a pointer to that storage is returned. The original input string is undisturbed. */ char *MIFget_token( char **s, /* The text line to get the token from */ Mif_Token_Type_t *type) /* The type of token found */ { char *ret_str; /* storage for returned string */ /* get the token from the input line */ ret_str = MIFgettok(s); /* if no next token, return */ if(ret_str == NULL) { *type = MIF_NO_TOK; return(NULL); } /* else, determine and return token type */ switch(*ret_str) { case '[': *type = MIF_LARRAY_TOK; break; case ']': *type = MIF_RARRAY_TOK; break; case '<': *type = MIF_LCOMPLEX_TOK; break; case '>': *type = MIF_RCOMPLEX_TOK; break; case '%': *type = MIF_PERCENT_TOK; break; case '~': *type = MIF_TILDE_TOK; break; default: if(strcmp(ret_str, "null") == 0) *type = MIF_NULL_TOK; else *type = MIF_STRING_TOK; break; } return(ret_str); } /* MIFget_cntl_src_type This function takes an input connection/port type and an output connection/port type (MIF_VOLTAGE, MIF_CURRENT, etc.) and maps this pair to one of the four controlled source types used in SPICE (VCVS, VCIS, ICVS, ICIS). */ Mif_Cntl_Src_Type_t MIFget_cntl_src_type( Mif_Port_Type_t in_port_type, /* The type of the input port */ Mif_Port_Type_t out_port_type) /* The type of the output port */ { switch(in_port_type) { case MIF_VOLTAGE: case MIF_DIFF_VOLTAGE: case MIF_CONDUCTANCE: case MIF_DIFF_CONDUCTANCE: switch(out_port_type) { case MIF_VOLTAGE: case MIF_DIFF_VOLTAGE: case MIF_RESISTANCE: case MIF_DIFF_RESISTANCE: return(MIF_VCVS); break; case MIF_CURRENT: case MIF_DIFF_CURRENT: case MIF_CONDUCTANCE: case MIF_DIFF_CONDUCTANCE: return(MIF_VCIS); break; default: break; } break; case MIF_CURRENT: case MIF_DIFF_CURRENT: case MIF_VSOURCE_CURRENT: case MIF_RESISTANCE: case MIF_DIFF_RESISTANCE: switch(out_port_type) { case MIF_VOLTAGE: case MIF_DIFF_VOLTAGE: case MIF_RESISTANCE: case MIF_DIFF_RESISTANCE: return(MIF_ICVS); break; case MIF_CURRENT: case MIF_DIFF_CURRENT: case MIF_CONDUCTANCE: case MIF_DIFF_CONDUCTANCE: return(MIF_ICIS); break; default: break; } break; default: break; } return(MIF_minus_one); } /* MIFcopy This function allocates a new copy of a string. */ char *MIFcopy(char *str) { if(str) return copy(str); else return NULL; } tmpk8ny_4pz/src/xspice/mif/mif.c0000644000175000017500000000206413546075722016736 0ustar carstencarsten/*============================================================================ FILE MIF.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file allocates globals used by various packages, including MIF. INTERFACES g_mif_info REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "ngspice/mif.h" int MIFiSize = sizeof(MIFinstance); int MIFmSize = sizeof(MIFmodel); /* Allocate global used to pass info on analysis type, etc. from */ /* SPICE to the MIF load routine */ /* This must be initialized so that EVTfindvec can check for */ /* NULL pointer in g_mif_info.ckt */ Mif_Info_t g_mif_info = { { MIF_FALSE, MIF_FALSE, MIF_DC, MIF_ANALOG, 0.0,}, NULL, NULL, NULL, { 0.0, 0.0,}, { MIF_FALSE, MIF_FALSE,}, }; tmpk8ny_4pz/src/xspice/mif/mifdelete.c0000644000175000017500000001337613546075722020131 0ustar carstencarsten/*============================================================================ FILE MIFdelete.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the function used by SPICE to delete an instance and its allocated data structures from the internal circuit description data structures. INTERFACES MIFdelete() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "ngspice/ngspice.h" #include "ngspice/sperror.h" #include "ngspice/gendefs.h" #include "ngspice/mifproto.h" #include "ngspice/mifdefs.h" #if defined(_MSC_VER) || defined(__MINGW32__) #include "ngspice/mifparse.h" #endif #include "ngspice/suffix.h" #include "ngspice/devdefs.h" /* MIFdelete This function deletes a particular instance from the linked list of instance structures, freeing all dynamically allocated memory used by the instance structure. */ int MIFdelete(GENinstance *gen_inst) { int i; int j; int k; int num_conn; int num_port; int num_inst_var; MIFinstance *here = (MIFinstance *) gen_inst; /*******************************************/ /* instance->callback(..., MIF_CB_DESTROY) */ /*******************************************/ if (here->callback) { Mif_Private_t cm_data; /* Prepare the structure to be passed to the code model */ cm_data.num_conn = here->num_conn; cm_data.conn = here->conn; cm_data.num_param = here->num_param; cm_data.param = here->param; cm_data.num_inst_var = here->num_inst_var; cm_data.inst_var = here->inst_var; cm_data.callback = &(here->callback); here->callback(&cm_data, MIF_CB_DESTROY); } /*******************************/ /* Free the instance structure */ /*******************************/ /* Loop through all connections on the instance */ /* and dismantle the stuff allocated during readin/setup */ /* in MIFinit_inst, MIFget_port, and MIFsetup */ num_conn = here->num_conn; for (i = 0; i < num_conn; i++) { /* If connection never used, skip it */ if (here->conn[i]->is_null) continue; /* If analog output, lots to free... */ if (here->conn[i]->is_output && here->analog) { num_port = here->conn[i]->size; /* For each port on the connector */ for (j = 0; j < num_port; j++) { /* Free the partial/ac_gain/smp stuff allocated in MIFsetup */ for (k = 0; k < num_conn; k++) { if ((here->conn[k]->is_null) || (! here->conn[k]->is_input)) continue; if (here->conn[i]->port[j]->partial) FREE(here->conn[i]->port[j]->partial[k].port); if (here->conn[i]->port[j]->ac_gain) FREE(here->conn[i]->port[j]->ac_gain[k].port); if (here->conn[i]->port[j]->smp_data.input) FREE(here->conn[i]->port[j]->smp_data.input[k].port); } FREE(here->conn[i]->port[j]->partial); FREE(here->conn[i]->port[j]->ac_gain); FREE(here->conn[i]->port[j]->smp_data.input); /* but don't free strings. They are either not owned */ /* by the inst or are part of tokens. SPICE3C1 never */ /* frees tokens, so we don't either... */ } } /* Free the basic port structure allocated in MIFget_port */ num_port = here->conn[i]->size; for (j = 0; j < num_port; j++) { /* Memory allocated in mif_inp2.c */ FREE(here->conn[i]->port[j]->type_str); FREE(here->conn[i]->port[j]); } FREE(here->conn[i]->port); } /* Free the connector stuff allocated in MIFinit_inst */ /* Don't free name/description! They are not owned */ /* by the instance */ for (i = 0; i < num_conn; i++) { FREE(here->conn[i]); } FREE(here->conn); /* Loop through all instance variables on the instance */ /* and free stuff */ num_inst_var = here->num_inst_var; for (i = 0; i < num_inst_var; i++) { if (here->inst_var[i]->element != NULL) { /* Do not delete inst_var[i]->element if MS Windows and is_array==1. Memory is then allocated in the code model dll, and it cannot be guaranteed that it can be freed safely here! A small memory leak is created. FIXME Finally one has to free the memory in the same module where allocated. */ #if defined(_MSC_VER) || defined(__MINGW32__) if (!DEVices[MIFmodPtr(here)->MIFmodType]->DEVpublic.inst_var[i].is_array) #endif FREE(here->inst_var[i]->element); } FREE(here->inst_var[i]); } FREE(here->inst_var); /* ************************************************************* */ /* Dont free params here. They are not currently implemented on */ /* a per-instance basis, so their allocated space is owned by */ /* the parent model, not the instance. Param stuff will be freed */ /* by MIFmDelete */ /* ************************************************************* */ /* Free the stuff used by the cm_... functions */ if (here->num_state && here->state) FREE(here->state); if (here->num_intgr && here->intgr) FREE(here->intgr); if (here->num_conv && here->conv) FREE(here->conv); return OK; } tmpk8ny_4pz/src/xspice/mif/mifload.c0000644000175000017500000010555613546075722017610 0ustar carstencarsten/*============================================================================ FILE MIFload.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the driver function for calling code model evaluation functions. This is one of the most important, complex, and often called functions in the model interface package. It iterates through all models and all instances of a specified code model device type, fills in the inputs for the model, calls the model, and then uses the outputs and partials returned by the model to load the matrix. INTERFACES MIFload() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ /* #include "prefix.h" */ #include "ngspice/ngspice.h" #include #include #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/evt.h" #include "ngspice/mifproto.h" #include "ngspice/mifparse.h" #include "ngspice/mifdefs.h" #include "ngspice/mifcmdat.h" #include "ngspice/mif.h" #include "ngspice/enh.h" #include "ngspice/cm.h" /* #include "suffix.h" */ static void MIFauto_partial( MIFinstance *here, void (*cm_func) (Mif_Private_t *), Mif_Private_t *cm_data ); /* MIFload This function is called by the CKTload() driver function to call the C function for each instance of a code model type. It loops through all models of that type and all instances of each model. For each instance, it prepares the structure that is passed to the code model by filling it with the input values for that instance. The code model's C function is then called, and the outputs and partial derivatives computed by the C function are used to fill the matrix for the next solution attempt. */ int MIFload( GENmodel *inModel, /* The head of the model list */ CKTcircuit *ckt) /* The circuit structure */ { MIFmodel *model; MIFinstance *here; Mif_Private_t cm_data; /* data to be passed to/from code model */ Mif_Port_Type_t type; Mif_Port_Data_t *fast; Mif_Smp_Ptr_t *smp_data_out; Mif_Port_Ptr_t *smp_ptr; Mif_Port_Type_t in_type; Mif_Port_Type_t out_type; Mif_Boolean_t is_input; Mif_Boolean_t is_output; Mif_Cntl_Src_Type_t cntl_src_type; Mif_Analysis_t anal_type; Mif_Complex_t czero; Mif_Complex_t ac_gain; int mod_type; int num_conn; int num_port; int num_port_k; int i; int j; int k; int l; /*int tag;*/ double *rhs; double *rhsOld; double partial; double temp; double *double_ptr0; double *double_ptr1; /*double *input;*/ /* double *oldinput;*/ char *byte_ptr0; char *byte_ptr1; double last_input; double conv_limit; double cntl_input; Evt_Node_Data_t *node_data; /* Prepare a zero complex number for AC gain initializations */ czero.real = 0.0; czero.imag = 0.0; /* Setup for access into MIF specific model data */ model = (MIFmodel *) inModel; mod_type = model->MIFmodType; /* Setup pointers for fast access to rhs and rhsOld elements of ckt struct */ rhs = ckt->CKTrhs; rhsOld = ckt->CKTrhsOld; node_data = ckt->evt->data.node; /* *********************************************************************** */ /* Setup the circuit data in the structure to be passed to the code models */ /* *********************************************************************** */ /* anal_init is set if this is the first iteration at any step in */ /* an analysis */ if(!(ckt->CKTmode & MODEINITFLOAT)) g_mif_info.circuit.anal_init = MIF_TRUE; cm_data.circuit.anal_init = g_mif_info.circuit.anal_init; /* anal_type is determined by CKTload */ anal_type = g_mif_info.circuit.anal_type; cm_data.circuit.anal_type = anal_type; /* get the analysis freq from the ckt struct if this is an AC analysis */ /* otherwise, set the freq to zero */ if(anal_type == MIF_AC) cm_data.circuit.frequency = ckt->CKTomega; else cm_data.circuit.frequency = 0.0; /* get the analysis times from the ckt struct if this is a transient analysis */ /* otherwise, set the times to zero */ if(anal_type == MIF_TRAN) { cm_data.circuit.time = ckt->CKTtime; cm_data.circuit.t[0] = ckt->CKTtime; for(i = 1; i < 8; i++) { cm_data.circuit.t[i] = cm_data.circuit.t[i-1] - ckt->CKTdeltaOld[i-1]; if(cm_data.circuit.t[i] < 0.0) cm_data.circuit.t[i] = 0.0; } } else { cm_data.circuit.time = 0.0; for(i = 0; i < 8; i++) { cm_data.circuit.t[i] = 0.0; } } cm_data.circuit.call_type = MIF_ANALOG; cm_data.circuit.temperature = ckt->CKTtemp - 273.15; g_mif_info.circuit.call_type = MIF_ANALOG; g_mif_info.ckt = ckt; /* ***************************************************************** */ /* loop through all models of this type */ /* ***************************************************************** */ for( ; model != NULL; model = MIFnextModel(model)) { /* If not an analog or hybrid model, continue to next */ if(! model->analog) continue; /* ***************************************************************** */ /* loop through all instances of this model */ /* ***************************************************************** */ for(here = MIFinstances(model); here != NULL; here = MIFnextInstance(here)) { /* If not an analog or hybrid instance, continue to next */ if(! here->analog) continue; /* ***************************************************************** */ /* Prepare the data needed by the cm_.. functions */ /* ***************************************************************** */ g_mif_info.instance = here; g_mif_info.errmsg = ""; if(here->initialized) { cm_data.circuit.init = MIF_FALSE; g_mif_info.circuit.init = MIF_FALSE; } else { cm_data.circuit.init = MIF_TRUE; g_mif_info.circuit.init = MIF_TRUE; } /* ***************************************************************** */ /* if tran analysis and anal_init is true, copy state 1 to state 0 */ /* Otherwise the data in state 0 would be invalid */ /* ***************************************************************** */ if((anal_type == MIF_TRAN) && g_mif_info.circuit.anal_init) { for(i = 0; i < here->num_state; i++) { double_ptr0 = ckt->CKTstate0 + here->state[i].index; double_ptr1 = ckt->CKTstate1 + here->state[i].index; byte_ptr0 = (char *) double_ptr0; byte_ptr1 = (char *) double_ptr1; for(j = 0; j < here->state[i].bytes; j++) byte_ptr0[j] = byte_ptr1[j]; } } /* ***************************************************************** */ /* If not AC analysis, loop through all connections on this instance */ /* and load the input values for each input port of each connection */ /* ***************************************************************** */ num_conn = here->num_conn; for(i = 0; i < num_conn; i++) { /* If AC analysis, skip getting input values. The input values */ /* should stay the same as they were at the last iteration of */ /* the operating point analysis */ if(anal_type == MIF_AC) break; /* if the connection is null, skip to next connection */ if(here->conn[i]->is_null) continue; /* if this connection is not an input, skip to next connection */ if(! here->conn[i]->is_input) continue; /* Get number of ports on this connection */ num_port = here->conn[i]->size; /* loop through all ports on this connection */ for(j = 0; j < num_port; j++) { /*setup a pointer for fast access to port data */ fast = here->conn[i]->port[j]; /* skip if this port is null */ if(fast->is_null) continue; /* determine the type of this port */ type = fast->type; /* If port type is Digital or User-Defined, we only need */ /* to get the total load. The input values are pointers */ /* already set by EVTsetup() */ if((type == MIF_DIGITAL) || (type == MIF_USER_DEFINED)) { fast->total_load = node_data->total_load[fast->evt_data.node_index]; } /* otherwise, it is an analog node and we get the input value */ else { /* load the input values based on type and mode */ if(ckt->CKTmode & MODEINITJCT) /* first iteration step for DC */ fast->input.rvalue = 0.0; else if((ckt->CKTmode & MODEINITTRAN) || (ckt->CKTmode & MODEINITPRED)) /* first iteration step at timepoint */ fast->input.rvalue = ckt->CKTstate1[fast->old_input]; else { /* subsequent iterations */ /* record last iteration's input value for convergence limiting */ last_input = fast->input.rvalue; /* get the new input value */ switch(type) { case MIF_VOLTAGE: case MIF_DIFF_VOLTAGE: case MIF_CONDUCTANCE: case MIF_DIFF_CONDUCTANCE: fast->input.rvalue = rhsOld[fast->smp_data.pos_node] - rhsOld[fast->smp_data.neg_node]; break; case MIF_CURRENT: case MIF_DIFF_CURRENT: case MIF_VSOURCE_CURRENT: case MIF_RESISTANCE: case MIF_DIFF_RESISTANCE: fast->input.rvalue = rhsOld[fast->smp_data.ibranch]; break; case MIF_DIGITAL: case MIF_USER_DEFINED: break; } /* end switch on type of port */ /* If convergence limiting enabled, limit maximum input change */ if(ckt->enh->conv_limit.enabled) { /* compute the maximum the input is allowed to change */ conv_limit = fabs(last_input) * ckt->enh->conv_limit.step; if(conv_limit < ckt->enh->conv_limit.abs_step) conv_limit = ckt->enh->conv_limit.abs_step; /* if input has changed too much, limit it and signal not converged */ if(fabs(fast->input.rvalue - last_input) > conv_limit) { if((fast->input.rvalue - last_input) > 0.0) fast->input.rvalue = last_input + conv_limit; else fast->input.rvalue = last_input - conv_limit; (ckt->CKTnoncon)++; /* report convergence problem if last call */ if(ckt->enh->conv_debug.report_conv_probs) { ENHreport_conv_prob(ENH_ANALOG_INSTANCE, here->MIFname, ""); } } } } /* end else */ /* Save value of input for use with MODEINITTRAN */ ckt->CKTstate0[fast->old_input] = fast->input.rvalue; } /* end else analog type */ } /* end for number of ports */ } /* end for number of connections */ /* ***************************************************************** */ /* loop through all connections on this instance and zero out all */ /* outputs/partials/AC gains for each output port of each connection */ /* ***************************************************************** */ num_conn = here->num_conn; for(i = 0; i < num_conn; i++) { /* if the connection is null or is not an output */ /* skip to next connection */ if(here->conn[i]->is_null || (! here->conn[i]->is_output)) continue; /* loop through all ports on this connection */ num_port = here->conn[i]->size; for(j = 0; j < num_port; j++) { /*setup a pointer for fast access to port data */ fast = here->conn[i]->port[j]; /* skip if this port is null */ if(fast->is_null) continue; /* determine the type of this port */ type = fast->type; /* If not an analog node, continue to next port */ if((type == MIF_DIGITAL) || (type == MIF_USER_DEFINED)) continue; /* initialize the output to zero */ fast->output.rvalue = 0.0; /* loop through all connections and ports that */ /* could be inputs for this port and zero the partials */ for(k = 0; k < num_conn; k++) { if(here->conn[k]->is_null || (! here->conn[k]->is_input)) continue; num_port_k = here->conn[k]->size; for(l = 0; l < num_port_k; l++) { /* skip if this port is null */ if(here->conn[k]->port[l]->is_null) continue; fast->partial[k].port[l] = 0.0; fast->ac_gain[k].port[l] = czero; } /* end for number of ports */ } /* end for number of connections */ } /* end for number of ports */ } /* end for number of connections */ /* ***************************************************************** */ /* Prepare the structure to be passed to the code model */ /* ***************************************************************** */ cm_data.num_conn = here->num_conn; cm_data.conn = here->conn; cm_data.num_param = here->num_param; cm_data.param = here->param; cm_data.num_inst_var = here->num_inst_var; cm_data.inst_var = here->inst_var; cm_data.callback = &(here->callback); /* Initialize the auto_partial flag to false */ g_mif_info.auto_partial.local = MIF_FALSE; /* ******************* */ /* Call the code model */ /* ******************* */ DEVices[mod_type]->DEVpublic.cm_func (&cm_data); /* Automatically compute partials if requested by .options auto_partial */ /* or by model through call to cm_analog_auto_partial() in DC or TRAN analysis */ if((anal_type != MIF_AC) && (g_mif_info.auto_partial.global || g_mif_info.auto_partial.local)) MIFauto_partial(here, DEVices[mod_type]->DEVpublic.cm_func, &cm_data); /* ***************************************************************** */ /* Loop through all connections on this instance and */ /* load the data into the matrix for each output port */ /* and for each V source associated with a current input. */ /* For AC analysis, we only load the +-1s required to satisfy */ /* KCL and KVL in the matrix equations. */ /* ***************************************************************** */ num_conn = here->num_conn; for(i = 0; i < num_conn; i++) { /* if the connection is null, skip to next connection */ if(here->conn[i]->is_null) continue; /* prepare things for convenient access later */ is_input = here->conn[i]->is_input; is_output = here->conn[i]->is_output; /* loop through all ports on this connection */ num_port = here->conn[i]->size; for(j = 0; j < num_port; j++) { /*setup a pointer for fast access to port data */ fast = here->conn[i]->port[j]; /* skip if this port is null */ if(fast->is_null) continue; /* determine the type of this port */ type = fast->type; /* If not an analog node, continue to next port */ if((type == MIF_DIGITAL) || (type == MIF_USER_DEFINED)) continue; /* create a pointer to the smp data for quick access */ smp_data_out = &(fast->smp_data); /* if it is a current input */ /* load the matrix data needed for the associated zero-valued V source */ if(is_input && (type == MIF_CURRENT || type == MIF_DIFF_CURRENT)) { *(smp_data_out->pos_ibranch) += 1.0; *(smp_data_out->neg_ibranch) -= 1.0; *(smp_data_out->ibranch_pos) += 1.0; *(smp_data_out->ibranch_neg) -= 1.0; /* rhs[smp_data_out->ibranch] += 0.0; */ } /* end if current input */ /* if it has a voltage source output, */ /* load the matrix with the V source output data */ if( (is_output && (type == MIF_VOLTAGE || type == MIF_DIFF_VOLTAGE)) || (type == MIF_RESISTANCE || type == MIF_DIFF_RESISTANCE) ) { *(smp_data_out->pos_branch) += 1.0; *(smp_data_out->neg_branch) -= 1.0; *(smp_data_out->branch_pos) += 1.0; *(smp_data_out->branch_neg) -= 1.0; if(anal_type != MIF_AC) rhs[smp_data_out->branch] += fast->output.rvalue; } /* end if V source output */ /* if it has a current source output, */ /* load the matrix with the V source output data */ if( (is_output && (type == MIF_CURRENT || type == MIF_DIFF_CURRENT)) || (type == MIF_CONDUCTANCE || type == MIF_DIFF_CONDUCTANCE) ) { if(anal_type != MIF_AC) { rhs[smp_data_out->pos_node] -= fast->output.rvalue; rhs[smp_data_out->neg_node] += fast->output.rvalue; } } /* end if current output */ } /* end for number of ports */ } /* end for number of connections */ /* ***************************************************************** */ /* loop through all output connections on this instance and */ /* load the partials/AC gains into the matrix */ /* ***************************************************************** */ for(i = 0; i < num_conn; i++) { /* if the connection is null or is not an output */ /* skip to next connection */ if((here->conn[i]->is_null) || (! here->conn[i]->is_output)) continue; /* loop through all ports on this connection */ num_port = here->conn[i]->size; for(j = 0; j < num_port; j++) { /*setup a pointer for fast access to port data */ fast = here->conn[i]->port[j]; /* skip if this port is null */ if(fast->is_null) continue; /* determine the type of this output port */ out_type = fast->type; /* If not an analog node, continue to next port */ if((out_type == MIF_DIGITAL) || (out_type == MIF_USER_DEFINED)) continue; /* create a pointer to the smp data for quick access */ smp_data_out = &(fast->smp_data); /* for this port, loop through all connections */ /* and all ports to touch on each possible input */ for(k = 0; k < num_conn; k++) { /* if the connection is null or is not an input */ /* skip to next connection */ if((here->conn[k]->is_null) || (! here->conn[k]->is_input)) continue; num_port_k = here->conn[k]->size; /* loop through all the ports of this connection */ for(l = 0; l < num_port_k; l++) { /* skip if this port is null */ if(here->conn[k]->port[l]->is_null) continue; /* determine the type of this input port */ in_type = here->conn[k]->port[l]->type; /* If not an analog node, continue to next port */ if((in_type == MIF_DIGITAL) || (in_type == MIF_USER_DEFINED)) continue; /* get the partial to local variable for fast access */ partial = fast->partial[k].port[l]; ac_gain = fast->ac_gain[k].port[l]; /* create a pointer to the matrix pointer data for quick access */ smp_ptr = &(smp_data_out->input[k].port[l]); /* get the input value */ cntl_input = here->conn[k]->port[l]->input.rvalue; /* determine type of controlled source according */ /* to input and output types */ cntl_src_type = MIFget_cntl_src_type(in_type, out_type); switch(cntl_src_type) { case MIF_VCVS: if(anal_type == MIF_AC) { smp_ptr->e.branch_poscntl[0] -= ac_gain.real; smp_ptr->e.branch_negcntl[0] += ac_gain.real; smp_ptr->e.branch_poscntl[1] -= ac_gain.imag; smp_ptr->e.branch_negcntl[1] += ac_gain.imag; } else { smp_ptr->e.branch_poscntl[0] -= partial; smp_ptr->e.branch_negcntl[0] += partial; rhs[smp_data_out->branch] -= partial * cntl_input; } break; case MIF_ICIS: if(anal_type == MIF_AC) { smp_ptr->f.pos_ibranchcntl[0] += ac_gain.real; smp_ptr->f.neg_ibranchcntl[0] -= ac_gain.real; smp_ptr->f.pos_ibranchcntl[1] += ac_gain.imag; smp_ptr->f.neg_ibranchcntl[1] -= ac_gain.imag; } else { smp_ptr->f.pos_ibranchcntl[0] += partial; smp_ptr->f.neg_ibranchcntl[0] -= partial; temp = partial * cntl_input; rhs[smp_data_out->pos_node] += temp; rhs[smp_data_out->neg_node] -= temp; } break; case MIF_VCIS: if(anal_type == MIF_AC) { smp_ptr->g.pos_poscntl[0] += ac_gain.real; smp_ptr->g.pos_negcntl[0] -= ac_gain.real; smp_ptr->g.neg_poscntl[0] -= ac_gain.real; smp_ptr->g.neg_negcntl[0] += ac_gain.real; smp_ptr->g.pos_poscntl[1] += ac_gain.imag; smp_ptr->g.pos_negcntl[1] -= ac_gain.imag; smp_ptr->g.neg_poscntl[1] -= ac_gain.imag; smp_ptr->g.neg_negcntl[1] += ac_gain.imag; } else { smp_ptr->g.pos_poscntl[0] += partial; smp_ptr->g.pos_negcntl[0] -= partial; smp_ptr->g.neg_poscntl[0] -= partial; smp_ptr->g.neg_negcntl[0] += partial; temp = partial * cntl_input; rhs[smp_data_out->pos_node] += temp; rhs[smp_data_out->neg_node] -= temp; } break; case MIF_ICVS: if(anal_type == MIF_AC) { smp_ptr->h.branch_ibranchcntl[0] -= ac_gain.real; smp_ptr->h.branch_ibranchcntl[1] -= ac_gain.imag; } else { smp_ptr->h.branch_ibranchcntl[0] -= partial; rhs[smp_data_out->branch] -= partial * cntl_input; } break; case MIF_minus_one: break; } /* end switch on controlled source type */ } /* end for number of input ports */ } /* end for number of input connections */ } /* end for number of output ports */ } /* end for number of output connections */ here->initialized = MIF_TRUE; } /* end for all instances */ } /* end for all models */ return(OK); } /* MIFauto_partial This function is called by MIFload() when a code model requests that partial derivatives be computed automatically. It calls the code model additional times with an individual input to the model varied by a small amount at each call. Partial derivatives of each output with respect to the varied input are then computed by divided differences. */ static void MIFauto_partial( MIFinstance *here, /* The instance structure */ void (*cm_func) (Mif_Private_t *), /* The code model function to be called */ Mif_Private_t *cm_data) /* The data to be passed to the code model */ { Mif_Port_Data_t *fast; Mif_Port_Data_t *out_fast; Mif_Port_Type_t type; Mif_Port_Type_t out_type; int num_conn; int num_port; int num_port_k; int i; int j; int k; int l; double epsilon; double nominal_input; /* Reset init and anal_init flags before making additional calls */ /* to the model */ cm_data->circuit.init = MIF_FALSE; g_mif_info.circuit.init = MIF_FALSE; cm_data->circuit.anal_init = MIF_FALSE; g_mif_info.circuit.anal_init = MIF_FALSE; /* *************************** */ /* Save nominal analog outputs */ /* *************************** */ /* loop through all connections */ num_conn = here->num_conn; for(i = 0; i < num_conn; i++) { /* if the connection is null or is not an output */ /* skip to next connection */ if(here->conn[i]->is_null || (! here->conn[i]->is_output)) continue; /* loop through all ports on this connection */ num_port = here->conn[i]->size; for(j = 0; j < num_port; j++) { /*setup a pointer for fast access to port data */ fast = here->conn[i]->port[j]; /* skip if this port is null */ if(fast->is_null) continue; /* determine the type of this port */ type = fast->type; /* If not an analog port, continue to next port */ if((type == MIF_DIGITAL) || (type == MIF_USER_DEFINED)) continue; /* copy the output for use in computing output deltas */ fast->nominal_output = fast->output.rvalue; } /* end for number of output ports */ } /* end for number of output connections */ /* ***************************************************************** */ /* Change each analog input by a small amount and call the model to */ /* compute new outputs. */ /* ***************************************************************** */ /* loop through all connections */ num_conn = here->num_conn; for(i = 0; i < num_conn; i++) { /* if the connection is null, skip to next connection */ if(here->conn[i]->is_null) continue; /* if this connection is not an input, skip to next connection */ if(! here->conn[i]->is_input) continue; /* Get number of ports on this connection */ num_port = here->conn[i]->size; /* loop through all ports on this connection */ for(j = 0; j < num_port; j++) { /*setup a pointer for fast access to port data */ fast = here->conn[i]->port[j]; /* skip if this port is null */ if(fast->is_null) continue; /* determine the type of this port */ type = fast->type; /* If port type is Digital or User-Defined, skip it */ if((type == MIF_DIGITAL) || (type == MIF_USER_DEFINED)) continue; /* otherwise, it is an analog port and we need to perturb it and */ /* then call the model */ /* compute the perturbation amount depending on type of input */ switch(type) { case MIF_VOLTAGE: case MIF_DIFF_VOLTAGE: case MIF_CONDUCTANCE: case MIF_DIFF_CONDUCTANCE: epsilon = 1.0e-6; break; case MIF_CURRENT: case MIF_DIFF_CURRENT: case MIF_VSOURCE_CURRENT: case MIF_RESISTANCE: case MIF_DIFF_RESISTANCE: epsilon = 1.0e-12; break; default: printf("INTERNAL ERROR - MIFauto_partial. Invalid port type\n"); epsilon = 1.0e-30; break; } /* end switch on type of port */ /* record and perturb input value */ nominal_input = fast->input.rvalue; fast->input.rvalue += epsilon; /* call model to compute new outputs */ cm_func (cm_data); /* ******************************************************* */ /* Compute the partials of each output with respect to the */ /* perturbed input by divided differences. */ /* ******************************************************* */ /* loop through all analog output connections */ for(k = 0; k < num_conn; k++) { /* if the connection is null or is not an output */ /* skip to next connection */ if((here->conn[k]->is_null) || (! here->conn[k]->is_output)) continue; /* loop through all the ports of this connection */ num_port_k = here->conn[k]->size; for(l = 0; l < num_port_k; l++) { /*setup a pointer for out_fast access to port data */ out_fast = here->conn[k]->port[l]; /* skip if this port is null */ if(out_fast->is_null) continue; /* determine the out_type of this port */ out_type = out_fast->type; /* If port type is Digital or User-Defined, skip it */ if((out_type == MIF_DIGITAL) || (out_type == MIF_USER_DEFINED)) continue; /* compute partial by divided differences */ out_fast->partial[i].port[j] = (out_fast->output.rvalue - out_fast->nominal_output) / epsilon; /* zero the output in preparation for next call */ out_fast->output.rvalue = 0.0; } /* end for number of output ports */ } /* end for number of output connections */ /* restore nominal input value */ fast->input.rvalue = nominal_input; } /* end for number of input ports */ } /* end for number of input connections */ /* *************************************************** */ /* Call model one last time to recompute nominal case. */ /* *************************************************** */ /* This is needed even though the outputs are recorded, because */ /* the model may compute other state values that cannot be restored */ /* to the nominal condition from here */ cm_func (cm_data); } tmpk8ny_4pz/src/xspice/mif/mifmask.c0000644000175000017500000001337713546075722017623 0ustar carstencarsten/*============================================================================ FILE MIFmAsk.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the function called by nutmeg to get the value of a specified code model parameter. INTERFACES MIFmAsk() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ /* #include "prefix.h" */ #include "ngspice/ngspice.h" #include //#include "CONST.h" //#include "util.h" #include "ngspice/ifsim.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include #include "ngspice/mifproto.h" #include "ngspice/mifdefs.h" /* #include "suffix.h" */ /* MIFmAsk This function is called by SPICE/Nutmeg to query the value of a parameter on a model. It is essentially the opposite of MIFmParam, taking the index of the parameter, locating the value of the parameter in the model structure, and converting that value into the IFvalue structure understood by Nutmeg. */ int MIFmAsk( CKTcircuit *ckt, /* The circuit structure */ GENmodel *inModel, /* The model to get the value from */ int param_index, /* The parameter to get */ IFvalue *value) /* The value returned */ { MIFmodel *model; int mod_type; int value_type; int i; int size; Mif_Boolean_t is_array; NG_IGNORE(ckt); /* Arrange for access to MIF specific data in the model */ model = (MIFmodel *) inModel; /* Get model type */ mod_type = model->MIFmodType; if((mod_type < 0) || (mod_type >= DEVmaxnum)) return(E_BADPARM); /* Check parameter index for validity */ if((param_index < 0) || (param_index >= model->num_param)) return(E_BADPARM); /* get value type to know which members of unions to access */ value_type = DEVices[mod_type]->DEVpublic.modelParms[param_index].dataType; value_type &= IF_VARTYPES; /* determine if the parameter is an array or not */ is_array = value_type & IF_VECTOR; /* Transfer the values to the SPICE3C1 value union from the param elements */ /* This is analagous to what SPICE3 does with other device types */ if(! is_array) { switch(value_type) { case IF_FLAG: value->iValue = model->param[param_index]->element[0].bvalue; break; case IF_INTEGER: value->iValue = model->param[param_index]->element[0].ivalue; break; case IF_REAL: value->rValue = model->param[param_index]->element[0].rvalue; break; case IF_STRING: /* Make copy of string. We don't trust caller to not free it */ /* These copies could get expensive! */ value->sValue = MIFcopy(model->param[param_index]->element[0].svalue); break; case IF_COMPLEX: /* we don't trust the caller to have a parallel complex structure */ /* so copy the real and imaginary parts explicitly */ value->cValue.real = model->param[param_index]->element[0].cvalue.real; value->cValue.imag = model->param[param_index]->element[0].cvalue.imag; break; default: return(E_BADPARM); } } else { /* it is an array */ size = model->param[param_index]->size; if(size < 0) size = 0; value->v.numValue = size; switch(value_type) { /* Note that we malloc space each time this function is called. */ /* This is what TRAask.c does, so we do it too, even though */ /* we don't know if it is ever freed... */ case IF_FLAGVEC: if(size <= 0) break; value->v.vec.iVec = TMALLOC(int, size); for(i = 0; i < size; i++) value->v.vec.iVec[i] = model->param[param_index]->element[i].bvalue; break; case IF_INTVEC: if(size <= 0) break; value->v.vec.iVec = TMALLOC(int, size); for(i = 0; i < size; i++) value->v.vec.iVec[i] = model->param[param_index]->element[i].ivalue; break; case IF_REALVEC: if(size <= 0) break; value->v.vec.rVec = TMALLOC(double, size); for(i = 0; i < size; i++) value->v.vec.rVec[i] = model->param[param_index]->element[i].rvalue; break; case IF_STRINGVEC: if(size <= 0) break; value->v.vec.sVec = TMALLOC(char *, size); for(i = 0; i < size; i++) /* Make copy of string. We don't trust caller to not free it */ /* These copies could get expensive! */ value->v.vec.sVec[i] = MIFcopy(model->param[param_index]->element[i].svalue); break; case IF_CPLXVEC: if(size <= 0) break; /* we don't trust the caller to have a parallel complex structure */ /* so copy the real and imaginary parts explicitly */ value->v.vec.cVec = TMALLOC(IFcomplex, size); for(i = 0; i < size; i++) { value->v.vec.cVec[i].real = model->param[param_index]->element[i].cvalue.real; value->v.vec.cVec[i].imag = model->param[param_index]->element[i].cvalue.imag; } break; default: return(E_BADPARM); } /* end switch */ } /* end else */ return(OK); } tmpk8ny_4pz/src/xspice/mif/mifdestr.c0000644000175000017500000000151313546075722017776 0ustar carstencarsten/*============================================================================ FILE MIFdestroy.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains a function that deletes all models of a particular device (code model) type from the circuit description structures. INTERFACES MIFdestroy() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ /* #include "prefix.h" */ #include "ngspice/ngspice.h" #include #include "ngspice/mifproto.h" /* #include "suffix.h" */ /* MIFdestroy */ void MIFdestroy(void) { } tmpk8ny_4pz/src/xspice/mif/mifgetvalue.c0000644000175000017500000002066413546075722020501 0ustar carstencarsten/*============================================================================ FILE MIFgetValue.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the function called to read parameter values from a .model card. INTERFACES MIFgetValue() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ /* #include "prefix.h" */ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" //#include "util.h" #include "ngspice/inpdefs.h" #include "ngspice/inpptree.h" /* #include */ #include #include "ngspice/mifproto.h" #include "ngspice/mifparse.h" #include "ngspice/mifdefs.h" #include "ngspice/mifcmdat.h" /* #include "suffix.h" */ static int MIFget_boolean(char *token, char **err); static int MIFget_integer(char *token, char **err); static double MIFget_real(char *token, char **err); static char *MIFget_string(char *token, char **err); static IFcomplex MIFget_complex(char *token, Mif_Token_Type_t token_type, char **line, char **err); /* MIFgetValue This function gets a parameter value from the .model text line into an IFvalue structure. The parameter type is specified in the argument list and is used to determine how to parse the text on the .model line. If the parameter is an array, the entire array is parsed and placed in the IFvalue structure along with the number of elements found. */ IFvalue * MIFgetValue ( CKTcircuit *ckt, /* The circuit structure */ char **line, /* The text line to read value from */ int type, /* The type of data to read */ INPtables *tab, /* Unused */ char **err ) /* Error string text */ { static IFvalue val; int btemp; int itemp; double rtemp; char *stemp; IFcomplex ctemp; char *token; Mif_Token_Type_t token_type; int value_type; int is_array; NG_IGNORE(ckt); NG_IGNORE(tab); /* Mask off non-type bits */ value_type = type & IF_VARTYPES; /* Setup array boolean */ is_array = value_type & IF_VECTOR; /* initialize stuff if array */ if(is_array) { token = MIFget_token(line, &token_type); tfree(token); if(token_type != MIF_LARRAY_TOK) { *err = "Array parameter expected - No array delimiter found"; return(NULL); } val.v.numValue = 0; val.v.vec.iVec = NULL; } /* now get the values into val */ for (;;) { token = MIFget_token(line, &token_type); /* exit if no more tokens */ if(token_type == MIF_NO_TOK) { *err = "Unexpected end of model card"; return(NULL); } /* exit if end of array found */ if(is_array && (token_type == MIF_RARRAY_TOK)) { if(val.v.numValue == 0) { *err = "Array parameter must have at least one value"; return(NULL); } break; } /* process the token to extract a value */ switch(value_type) { case IF_FLAG: val.iValue = MIFget_boolean(token, err); break; case IF_INTEGER: val.iValue = MIFget_integer(token, err); break; case IF_REAL: val.rValue = MIFget_real(token, err); break; case IF_STRING: val.sValue = MIFget_string(token, err); break; case IF_COMPLEX: val.cValue = MIFget_complex(token, token_type, line, err); break; case IF_FLAGVEC: btemp = MIFget_boolean(token, err); val.v.vec.iVec = TREALLOC(int, val.v.vec.iVec, val.v.numValue + 1); val.v.vec.iVec[val.v.numValue] = btemp; val.v.numValue++; break; case IF_INTVEC: itemp = MIFget_integer(token, err); val.v.vec.iVec = TREALLOC(int, val.v.vec.iVec, val.v.numValue + 1); val.v.vec.iVec[val.v.numValue] = itemp; val.v.numValue++; break; case IF_REALVEC: rtemp = MIFget_real(token, err); val.v.vec.rVec = TREALLOC(double, val.v.vec.rVec, val.v.numValue + 1); val.v.vec.rVec[val.v.numValue] = rtemp; val.v.numValue++; break; case IF_STRINGVEC: stemp = MIFget_string(token, err); val.v.vec.sVec = TREALLOC(char *, val.v.vec.sVec, val.v.numValue + 1); val.v.vec.sVec[val.v.numValue] = stemp; val.v.numValue++; break; case IF_CPLXVEC: ctemp = MIFget_complex(token, token_type, line, err); val.v.vec.cVec = TREALLOC(IFcomplex, val.v.vec.cVec, val.v.numValue + 1); val.v.vec.cVec[val.v.numValue] = ctemp; val.v.numValue++; break; default: *err = "Internal error - unexpected value type in MIFgetValue()"; return(NULL); } if(*err) return(NULL); /* exit after this single pass if not array */ if(! is_array) break; tfree(token); } /* end forever loop */ tfree(token); return(&val); } /* *************************************************************** */ static int MIFget_boolean(char *token, char **err) { int i; *err = NULL; if((strcmp(token, "t") == 0) || (strcmp(token, "true") == 0)) return(1); if((strcmp(token, "f") == 0) || (strcmp(token, "false") == 0)) return(0); i = MIFget_integer(token, err); // Try integer if(!*err && (i == 1 || i == 0)) return i; *err = "Bad boolean value"; return(-1); } /* *************************************************************** */ static int MIFget_integer(char *token, char **err) { int error; long l; double dtemp; char *endp; *err = NULL; errno = 0; l = strtol(token, &endp, 0); /* handles base 8, 10, 16 automatically */ if(!errno && (*endp == '\0')) return((int) l); /* if error, probably caused by engineering suffixes, */ /* so try parsing with INPevaluate */ dtemp = INPevaluate(&token, &error, 1); if(error) { *err = "Bad integer, octal, or hex value"; return(0); } return((int)floor(dtemp + 0.5)); } /* *************************************************************** */ static double MIFget_real(char *token, char **err) { double dtemp; int error; *err = NULL; dtemp = INPevaluate(&token, &error, 1); if(error) *err = "Bad real value"; return(dtemp); } /* *************************************************************** */ static char *MIFget_string(char *token, char **err) { char* ctoken = MIFcopy(token); *err = NULL; return(ctoken); } /* *************************************************************** */ static IFcomplex MIFget_complex(char *token, Mif_Token_Type_t token_type, char **line, char **err) { static char *msg = "Bad complex value"; IFcomplex ctemp; double dtemp; int error; *err = NULL; ctemp.real = 0.0; ctemp.imag = 0.0; /* Complex values must be of form < > */ if(token_type != MIF_LCOMPLEX_TOK) { *err = msg; return(ctemp); } /* the incoming 'token' is the opening < delimiter and will not handled furthermore */ /* get the real part */ token = MIFget_token(line, &token_type); if(token_type != MIF_STRING_TOK) { *err = msg; return(ctemp); } dtemp = INPevaluate(&token, &error, 1); if(error) { *err = msg; return(ctemp); } ctemp.real = dtemp; /* get the imaginary part */ token = MIFget_token(line, &token_type); if(token_type != MIF_STRING_TOK) { *err = msg; return(ctemp); } dtemp = INPevaluate(&token, &error, 1); if(error) { *err = msg; return(ctemp); } ctemp.imag = dtemp; /* eat the closing > delimiter */ token = MIFget_token(line, &token_type); if(token_type != MIF_RCOMPLEX_TOK) { *err = msg; return(ctemp); } return(ctemp); } tmpk8ny_4pz/src/xspice/mif/mifgetmod.c0000644000175000017500000002110713546075722020135 0ustar carstencarsten/*============================================================================ FILE MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved * * Copyright (c) 1985 Thomas L. Quarles * * NOTE: Portions of this code are Copyright Thomas L. Quarles and University of * California at Berkeley. Other portions are modified and added by * the Georgia Tech Research Institute. * PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the routine that allocates a new model structure and parses the .model card parameters. INTERFACES MIFgetMod() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "ngspice/ngspice.h" #include #include "ngspice/inpdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "ngspice/cpstd.h" #include "ngspice/fteext.h" #include "ngspice/mifproto.h" #include "ngspice/mifdefs.h" #include "ngspice/mifcmdat.h" #include "ngspice/suffix.h" /* This is the table of all models known to the program. It is now defined in inpmkmod.c. */ extern INPmodel *modtab; /* MIFgetMod This function is a modified version of SPICE 3C1 INPgetMod(). MIFgetMod looks in the table of model information created on the first pass of the parser to find the text of the .model card. It then checks to see if the .model card has already been processed by a previous element card reference. If so, it returns a pointer to the previously created model structure. If not, it allocates a new model structure and processes the parameters on the .model card. Parameter values for parameters not found on the .model card are not filled in by this function. They are defaulted later by MIFsetup(). The function returns NULL when successful, and an error string on failure. */ char *MIFgetMod( CKTcircuit *ckt, /* The circuit structure */ char *name, /* The name of the model to look for */ INPmodel **model, /* The model found/created */ INPtables *tab /* Table of model info from first pass */ ) { INPmodel *modtmp; IFvalue * val; register int j; char * line; char *parm; char *err = NULL; int error; int i; char *err1; char *err2; MIFmodel *mdfast; /* Mif_Param_Info_t *param_info;*/ /* =========== First locate the named model in the modtab list ================= */ #ifdef TRACE /* SDB debug statement */ printf("In MIFgetMod, looking for model name = %s . . .\n", name); #endif /* maschmann : remove : from name * char *pos; * if((pos=strchr(name,':'))!=NULL) *pos=0; */ /*------------------------------------ for (i = &modtab; *i != NULL; i = &((*i)->INPnextModel)) { if (strcmp((*i)->INPmodName, token) == 0) { return (OK); } } --------------------------*/ /* loop through modtable looking for this model (*name) */ for (modtmp = modtab; modtmp != NULL; modtmp = modtmp->INPnextModel) { #ifdef TRACE /* SDB debug statement */ printf("In MIFgetMod, checking model against stored model = %s . . .\n", modtmp->INPmodName); #endif if (strcmp(modtmp->INPmodName, name) == 0) { #ifdef TRACE /* SDB debug statement */ printf("In MIFgetMod, found model!!!\n"); #endif /* ========= found the model in question - now instantiate if necessary ========== */ /* ============== and return an appropriate pointer to it ===================== */ /* make sure the type is valid before proceeding */ if(modtmp->INPmodType < 0) { /* illegal device type, so can't handle */ *model = NULL; return tprintf("MIF: Unknown device type for model %s\n", name); } /* check to see if this model's parameters have been processed */ if(! modtmp->INPmodfast) { /* not already processed, so create data struct */ error = ft_sim->newModel ( ckt, modtmp->INPmodType, &(modtmp->INPmodfast), modtmp->INPmodName); if(error) return(INPerror(error)); /* gtri modification: allocate and initialize MIF specific model struct items */ mdfast = (MIFmodel*) modtmp->INPmodfast; mdfast->num_param = DEVices[modtmp->INPmodType]->DEVpublic.num_param; mdfast->param = TMALLOC(Mif_Param_Data_t *, mdfast->num_param); for(i = 0; i < mdfast->num_param; i++) { mdfast->param[i] = TMALLOC(Mif_Param_Data_t, 1); mdfast->param[i]->is_null = MIF_TRUE; mdfast->param[i]->size = 0; mdfast->param[i]->element = NULL; } /* remaining initializations will be done by MIFmParam() and MIFsetup() */ /* parameter isolation, identification, binding */ line = modtmp->INPmodLine->line; INPgetTok(&line,&parm,1); /* throw away '.model' */ tfree(parm); INPgetNetTok(&line,&parm,1); /* throw away 'modname' */ tfree(parm); /* throw away the modtype - we don't treat it as a parameter */ /* like SPICE does */ INPgetTok(&line,&parm,1); /* throw away 'modtype' */ tfree(parm); while(*line != '\0') { INPgetTok(&line,&parm,1); for(j=0 ; j < *(ft_sim->devices[modtmp->INPmodType]->numModelParms); j++) { if (strcmp(parm, ft_sim->devices[modtmp->INPmodType]->modelParms[j].keyword) == 0) { /* gtri modification: call MIFgetValue instead of INPgetValue */ err1 = NULL; val = MIFgetValue(ckt,&line, ft_sim->devices[modtmp->INPmodType]->modelParms[j].dataType, tab, &err1); if(err1) { err2 = tprintf("MIF-ERROR - model: %s - %s\n", name, err1); return(err2); } error = ft_sim->setModelParm (ckt, modtmp->INPmodfast, ft_sim->devices[modtmp->INPmodType]->modelParms[j].id, val, NULL); /* free val, allocated by MIFgetValue */ int vtype = (ft_sim->devices[modtmp->INPmodType]->modelParms[j].dataType & IF_VARTYPES); if (vtype == IF_FLAGVEC || vtype == IF_INTVEC) tfree(val->v.vec.iVec); if (vtype == IF_REALVEC) tfree(val->v.vec.rVec); if (vtype == IF_CPLXVEC) tfree(val->v.vec.cVec); if (vtype == IF_STRING) tfree(val->sValue); if (vtype == IF_STRINGVEC) { for (i = 0; i < val->v.numValue; i++) tfree(val->v.vec.sVec[i]); tfree(val->v.vec.sVec); } if(error) return(INPerror(error)); break; } } /* gtri modification: processing of special parameter "level" removed */ if(j >= *(ft_sim->devices[modtmp->INPmodType]->numModelParms)) { char *temp = tprintf("MIF: unrecognized parameter (%s) - ignored", parm); err = INPerrCat(err, temp); } FREE(parm); } /* end while end of line not reached */ modtmp->INPmodLine->error = err; } /* end if model parameters not processed yet */ *model = modtmp; return(NULL); } /* end if name matches */ } /* end for all models in modtab linked list */ /* didn't find model - ERROR - return NULL model */ *model = NULL; err = tprintf(" MIF-ERROR - unable to find definition of model %s\n", name); return(err); } tmpk8ny_4pz/src/xspice/mif/mifsetup.c0000644000175000017500000005410313546075722020020 0ustar carstencarsten/*============================================================================ FILE MIFsetup.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the function called by SPICE to setup data structures of a code model after parsing, but prior to beginning a simulation. The major responsibilities of this function are to default values for model parameters not given on the .model card, create equations in the matrix for any voltage sources, and setup the matrix pointers used during simulation to load the matrix. INTERFACES MIFsetup() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/mifproto.h" #include "ngspice/mifparse.h" #include "ngspice/mifdefs.h" #include "ngspice/mifcmdat.h" /* define macro for easy creation of matrix entries/pointers for outputs */ #define TSTALLOC(ptr,first,second) \ do { if((smp_data_out->ptr = \ SMPmakeElt(matrix, smp_data_out->first, smp_data_out->second)) == NULL) { \ return(E_NOMEM); \ } } while(0) /* define macro for easy creation of matrix entries/pointers for inputs */ #define CTSTALLOC(ptr,first,second) \ do { if((smp_data_out->input[k].port[l].ptr = \ SMPmakeElt(matrix, smp_data_out->first, smp_data_cntl->second)) == NULL) { \ return(E_NOMEM); \ } } while(0) /* MIFsetup This function is called by the CKTsetup() driver function to prepare all code model structures and all code model instance structures for simulation. It loops through all models of a particular code model type and provides defaults for any parameters not specified on a .model card. It loops through all instances of the model and prepares the instance structures for simulation. The most important setup task is the creation of entries in the SPICE matrix and the storage of pointers to locations of the matrix used by MIFload during a simulation. */ int MIFsetup( SMPmatrix *matrix, /* The analog simulation matrix structure */ GENmodel *inModel, /* The head of the model list */ CKTcircuit *ckt, /* The circuit structure */ int *states) /* The states vector */ { MIFmodel *model; MIFinstance *here; int mod_type; int max_size; int size; int error; int num_conn; int num_port; int num_port_k; int i; int j; int k; int l; Mif_Port_Type_t type; Mif_Port_Type_t in_type; Mif_Port_Type_t out_type; Mif_Cntl_Src_Type_t cntl_src_type; Mif_Smp_Ptr_t *smp_data_out; Mif_Smp_Ptr_t *smp_data_cntl; Mif_Param_Info_t *param_info; /* Mif_Conn_Info_t *conn_info;*/ Mif_Boolean_t is_input; Mif_Boolean_t is_output; char *suffix; CKTnode *tmp; /* Setup for access into MIF specific model data */ model = (MIFmodel *) inModel; mod_type = model->MIFmodType; /* loop through all models of this type */ for( ; model != NULL; model = MIFnextModel(model)) { /* For each parameter not given explicitly on the .model */ /* card, default it */ for(i = 0; i < model->num_param; i++) { if(model->param[i]->is_null) { /* setup a pointer for quick access */ param_info = &(DEVices[mod_type]->DEVpublic.param[i]); /* determine the size and allocate the parameter element(s) */ if(! param_info->is_array) { model->param[i]->size = 1; model->param[i]->element = TMALLOC(Mif_Value_t, 1); } else { /* parameter is an array */ /* MIF_INP2A() parser assures that there is an associated array connection */ /* Since several instances may share this model, we have to create an array */ /* big enough for the instance with the biggest connection array */ max_size = 0; for(here = MIFinstances(model); here != NULL; here = MIFnextInstance(here)) { size = here->conn[param_info->conn_ref]->size; if(size > max_size) max_size = size; } model->param[i]->size = max_size; model->param[i]->element = TMALLOC(Mif_Value_t, max_size); } /* end if parameter is an array */ /* set the parameter element(s) to default value */ for(j = 0; j < model->param[i]->size; j++) { switch(param_info->type) { case MIF_BOOLEAN: model->param[i]->element[j].bvalue = param_info->default_value.bvalue; break; case MIF_INTEGER: model->param[i]->element[j].ivalue = param_info->default_value.ivalue; break; case MIF_REAL: model->param[i]->element[j].rvalue = param_info->default_value.rvalue; break; case MIF_COMPLEX: model->param[i]->element[j].cvalue = param_info->default_value.cvalue; break; case MIF_STRING: model->param[i]->element[j].svalue = param_info->default_value.svalue; break; default: return(E_BADPARM); } } /* end for number of elements in param array */ } /* end if null */ } /* end for number of parameters */ /* For each instance, initialize stuff used by cm_... functions */ for(here = MIFinstances(model); here != NULL; here = MIFnextInstance(here)) { here->num_state = 0; here->state = NULL; here->num_intgr = 0; here->intgr = NULL; here->num_conv = 0; here->conv = NULL; } /* For each instance, allocate runtime structs for output connections/ports */ /* and grab a place in the state vector for all input connections/ports */ for(here = MIFinstances(model); here != NULL; here = MIFnextInstance(here)) { /* Skip these expensive allocations if the instance is not analog */ if(! here->analog) continue; num_conn = here->num_conn; for(i = 0; i < num_conn; i++) { if((here->conn[i]->is_null) || (! here->conn[i]->is_output) ) continue; num_port = here->conn[i]->size; for(j = 0; j < num_port; j++) { here->conn[i]->port[j]->partial = TMALLOC(Mif_Partial_t, num_conn); here->conn[i]->port[j]->ac_gain = TMALLOC(Mif_AC_Gain_t, num_conn); here->conn[i]->port[j]->smp_data.input = TMALLOC(Mif_Conn_Ptr_t, num_conn); for(k = 0; k < num_conn; k++) { if((here->conn[k]->is_null) || (! here->conn[k]->is_input) ) continue; num_port_k = here->conn[k]->size; here->conn[i]->port[j]->partial[k].port = TMALLOC(double, num_port_k); here->conn[i]->port[j]->ac_gain[k].port = TMALLOC(Mif_Complex_t, num_port_k); here->conn[i]->port[j]->smp_data.input[k].port = TMALLOC(Mif_Port_Ptr_t, num_port_k); } } } num_conn = here->num_conn; for(i = 0; i < num_conn; i++) { if((here->conn[i]->is_null) || (! here->conn[i]->is_input) ) continue; num_port = here->conn[i]->size; for(j = 0; j < num_port; j++) { here->conn[i]->port[j]->old_input = *states; (*states)++; } } } /* Loop through all instances of this model and for each port of each connection */ /* create current equations, matrix entries, and matrix pointers as necessary. */ for(here = MIFinstances(model); here != NULL; here = MIFnextInstance(here)) { /* Skip these expensive allocations if the instance is not analog */ if(! here->analog) continue; num_conn = here->num_conn; /* loop through all connections on this instance */ /* and create matrix data needed for outputs and */ /* V sources associated with I inputs */ for(i = 0; i < num_conn; i++) { /* if the connection is null, skip to next connection */ if(here->conn[i]->is_null) continue; /* prepare things for convenient access later */ is_input = here->conn[i]->is_input; is_output = here->conn[i]->is_output; num_port = here->conn[i]->size; /* loop through all ports on this connection */ for(j = 0; j < num_port; j++) { /* if port is null, skip to next */ if(here->conn[i]->port[j]->is_null) continue; /* determine the type of this port */ type = here->conn[i]->port[j]->type; /* create a pointer to the smp data for quick access */ smp_data_out = &(here->conn[i]->port[j]->smp_data); /* if it has a voltage source output, */ /* create the matrix data needed */ if( (is_output && (type == MIF_VOLTAGE || type == MIF_DIFF_VOLTAGE)) || (type == MIF_RESISTANCE || type == MIF_DIFF_RESISTANCE) ) { /* first, make the current equation */ suffix = tprintf("branch_%d_%d", i, j); error = CKTmkCur(ckt, &tmp, here->MIFname, suffix); FREE(suffix); if(error) return(error); smp_data_out->branch = tmp->number; /* ibranch is needed to find the input equation for RESISTANCE type */ smp_data_out->ibranch = tmp->number; /* then make the matrix pointers */ TSTALLOC(pos_branch, pos_node, branch); TSTALLOC(neg_branch, neg_node, branch); TSTALLOC(branch_pos, branch, pos_node); TSTALLOC(branch_neg, branch, neg_node); } /* end if current input */ /* if it is a current input */ /* create the matrix data needed for the associated zero-valued V source */ if(is_input && (type == MIF_CURRENT || type == MIF_DIFF_CURRENT)) { /* first, make the current equation */ suffix = tprintf("ibranch_%d_%d", i, j); error = CKTmkCur(ckt, &tmp, here->MIFname, suffix); FREE(suffix); if(error) return(error); smp_data_out->ibranch = tmp->number; /* then make the matrix pointers */ TSTALLOC(pos_ibranch, pos_node, ibranch); TSTALLOC(neg_ibranch, neg_node, ibranch); TSTALLOC(ibranch_pos, ibranch, pos_node); TSTALLOC(ibranch_neg, ibranch, neg_node); } /* end if current input */ /* if it is a vsource current input (refers to a vsource elsewhere */ /* in the circuit), locate the source and get its equation number */ if(is_input && (type == MIF_VSOURCE_CURRENT)) { smp_data_out->ibranch = CKTfndBranch(ckt, here->conn[i]->port[j]->vsource_str); if(smp_data_out->ibranch == 0) { SPfrontEnd->IFerrorf (ERR_FATAL, "%s: unknown controlling source %s", here->MIFname, here->conn[i]->port[j]->vsource_str); return(E_BADPARM); } } /* end if vsource current input */ } /* end for number of ports */ } /* end for number of connections */ /* now loop through all connections on the instance and create */ /* matrix data needed for partial derivatives of outputs */ for(i = 0; i < num_conn; i++) { /* if the connection is null or is not an output */ /* skip to next connection */ if((here->conn[i]->is_null) || (! here->conn[i]->is_output)) continue; /* loop through all ports on this connection */ num_port = here->conn[i]->size; for(j = 0; j < num_port; j++) { /* if port is null, skip to next */ if(here->conn[i]->port[j]->is_null) continue; /* determine the type of this output port */ out_type = here->conn[i]->port[j]->type; /* create a pointer to the smp data for quick access */ smp_data_out = &(here->conn[i]->port[j]->smp_data); /* for this port, loop through all connections */ /* and all ports to touch on each possible input */ for(k = 0; k < num_conn; k++) { /* if the connection is null or is not an input */ /* skip to next connection */ if((here->conn[k]->is_null) || (! here->conn[k]->is_input)) continue; num_port_k = here->conn[k]->size; /* loop through all the ports of this connection */ for(l = 0; l < num_port_k; l++) { /* if port is null, skip to next */ if(here->conn[k]->port[l]->is_null) continue; /* determine the type of this input port */ in_type = here->conn[k]->port[l]->type; /* create a pointer to the smp data for quick access */ smp_data_cntl = &(here->conn[k]->port[l]->smp_data); /* determine type of controlled source according */ /* to input and output types */ cntl_src_type = MIFget_cntl_src_type(in_type, out_type); switch(cntl_src_type) { case MIF_VCVS: CTSTALLOC(e.branch_poscntl, branch, pos_node); CTSTALLOC(e.branch_negcntl, branch, neg_node); break; case MIF_ICIS: CTSTALLOC(f.pos_ibranchcntl, pos_node, ibranch); CTSTALLOC(f.neg_ibranchcntl, neg_node, ibranch); break; case MIF_VCIS: CTSTALLOC(g.pos_poscntl, pos_node, pos_node); CTSTALLOC(g.pos_negcntl, pos_node, neg_node); CTSTALLOC(g.neg_poscntl, neg_node, pos_node); CTSTALLOC(g.neg_negcntl, neg_node, neg_node); break; case MIF_ICVS: CTSTALLOC(h.branch_ibranchcntl, branch, ibranch); break; case MIF_minus_one: break; } /* end switch on controlled source type */ } /* end for number of input ports */ } /* end for number of input connections */ } /* end for number of output ports */ } /* end for number of output connections */ } /* end for all instances */ } /* end for all models of this type */ return(OK); } int MIFunsetup(GENmodel *inModel,CKTcircuit *ckt) { MIFmodel *model; MIFinstance *here; Mif_Smp_Ptr_t *smp_data_out; Mif_Port_Type_t type; Mif_Boolean_t is_input, is_output; int num_conn, num_port, i, j, k; for (model = (MIFmodel *)inModel; model != NULL; model = MIFnextModel(model)) { for (i = 0; i < model->num_param; i++) if (model->param[i]->is_null) tfree(model->param[i]->element); for(here = MIFinstances(model); here != NULL; here = MIFnextInstance(here)) { /* Skip these expensive allocations if the instance is not analog */ if(! here->analog) continue; num_conn = here->num_conn; /* loop through all connections on this instance */ /* and create matrix data needed for outputs and */ /* V sources associated with I inputs */ for(i = 0; i < num_conn; i++) { /* if the connection is null, skip to next connection */ if(here->conn[i]->is_null) continue; /* prepare things for convenient access later */ is_input = here->conn[i]->is_input; is_output = here->conn[i]->is_output; num_port = here->conn[i]->size; /* loop through all ports on this connection */ for(j = 0; j < num_port; j++) { /* if port is null, skip to next */ if(here->conn[i]->port[j]->is_null) continue; /* determine the type of this port */ type = here->conn[i]->port[j]->type; /* create a pointer to the smp data for quick access */ smp_data_out = &(here->conn[i]->port[j]->smp_data); /* if it has a voltage source output, */ /* create the matrix data needed */ if( (is_output && (type == MIF_VOLTAGE || type == MIF_DIFF_VOLTAGE)) || (type == MIF_RESISTANCE || type == MIF_DIFF_RESISTANCE) ) { CKTdltNNum(ckt, smp_data_out->branch); smp_data_out->branch = 0; smp_data_out->ibranch = 0; } /* end if current input */ /* if it is a current input */ /* create the matrix data needed for the associated zero-valued V source */ if(is_input && (type == MIF_CURRENT || type == MIF_DIFF_CURRENT)) { CKTdltNNum(ckt, smp_data_out->ibranch); smp_data_out->ibranch = 0; } /* end if current input */ /* if it is a vsource current input (refers to a vsource elsewhere */ /* in the circuit), locate the source and get its equation number */ if(is_input && (type == MIF_VSOURCE_CURRENT)) { smp_data_out->ibranch = 0; } /* end if vsource current input */ /* free memory allocated in MIFsetup */ for (k = 0; k < num_conn; k++) { if ((here->conn[k]->is_null) || (!here->conn[k]->is_input)) continue; if (here->conn[i]->port[j]->partial) tfree(here->conn[i]->port[j]->partial[k].port); if (here->conn[i]->port[j]->ac_gain) tfree(here->conn[i]->port[j]->ac_gain[k].port); if (here->conn[i]->port[j]->smp_data.input) tfree(here->conn[i]->port[j]->smp_data.input[k].port); } tfree(here->conn[i]->port[j]->partial); tfree(here->conn[i]->port[j]->ac_gain); tfree(here->conn[i]->port[j]->smp_data.input); /* free memory allocated in mif_inp2.c */ tfree(here->conn[i]->port[j]->type_str); } /* end for number of ports */ } /* end for number of connections */ /* free memory allocated by cm_analog_alloc and cm_analog_converge */ tfree(here->state); tfree(here->conv); tfree(here->intgr); /* de-allocate the memory that has been allocated locally in the code model during INIT */ if (here->callback) { Mif_Private_t cm_data; /* Prepare the structure to be passed to the code model */ cm_data.num_conn = here->num_conn; cm_data.conn = here->conn; cm_data.num_param = here->num_param; cm_data.param = here->param; cm_data.num_inst_var = here->num_inst_var; cm_data.inst_var = here->inst_var; cm_data.callback = &(here->callback); here->callback(&cm_data, MIF_CB_DESTROY); } here->initialized = MIF_FALSE; } /* end for all instances */ } /* printf("MIFunsetup completed.\n");*/ return OK; } tmpk8ny_4pz/src/xspice/mif/mifmdelete.c0000644000175000017500000000361413546075722020300 0ustar carstencarsten/*============================================================================ FILE MIFmDelete.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the function called by SPICE to delete a model structure and all instances of that model. INTERFACES MIFmDelete() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ /* #include "prefix.h" */ #include "ngspice/ngspice.h" #include //#include "util.h" #include "ngspice/sperror.h" #include "ngspice/gendefs.h" #include "ngspice/mifproto.h" #include "ngspice/mifdefs.h" /* #include "suffix.h" */ /* MIFmDelete This function deletes a particular model defined by a .model card from the linked list of model structures of a particular code model type, freeing all dynamically allocated memory used by the model structure. It calls MIFdelete as needed to delete all instances of the specified model. */ int MIFmDelete(GENmodel *gen_model) { MIFmodel *model = (MIFmodel *) gen_model; int i, j; /* Free the model params stuff allocated in MIFget_mod */ for (i = 0; i < model->num_param; i++) { /* delete content of union 'element' if it contains a string */ if (model->param[i]->element) { if (model->param[i]->eltype == IF_STRING) FREE(model->param[i]->element[0].svalue); else if (model->param[i]->eltype == IF_STRINGVEC) for (j = 0; j < model->param[i]->size; j++) FREE(model->param[i]->element[j].svalue); FREE(model->param[i]->element); } FREE(model->param[i]); } FREE(model->param); return OK; } tmpk8ny_4pz/src/xspice/mif/mif_inp2.c0000644000175000017500000010741213546075722017671 0ustar carstencarsten/*============================================================================ FILE MIF_INP2A.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS 11/19/12 H Vogt patch by Marcel (mhx) added SUMMARY This file contains the main routine for parsing code model lines in the SPICE circuit description input deck. INTERFACES MIF_INP2A() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ /* #include "prefix.h" */ /* jgroves */ #include "ngspice/ngspice.h" #include #include "ngspice/fteext.h" #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/devdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "ngspice/mifproto.h" #include "ngspice/mifparse.h" #include "ngspice/mifdefs.h" #include "ngspice/mifcmdat.h" #include "ngspice/evt.h" #include "ngspice/evtproto.h" extern int *DEVicesfl; /*flags for the devices */ static void MIFinit_inst(MIFmodel *mdfast, MIFinstance *fast); static void MIFget_port_type( CKTcircuit *ckt, /* circuit structure to put mod/inst structs in */ INPtables *tab, /* symbol table for node names, etc. */ struct card *current, /* MUST be named 'current' for spice macros */ char **line, char **next_token, Mif_Token_Type_t *next_token_type, Mif_Port_Type_t *port_type, char **port_type_str, Mif_Conn_Info_t *conn_info, /* for faster access to conn info struct */ Mif_Status_t *status); static void MIFget_port( CKTcircuit *ckt, /* circuit structure to put mod/inst structs in */ INPtables *tab, /* symbol table for node names, etc. */ struct card *current, /* MUST be named 'current' for spice macros */ MIFinstance *fast, /* pointer to instance struct */ char **line, char **next_token, Mif_Token_Type_t *next_token_type, Mif_Port_Type_t def_port_type, char *def_port_type_str, Mif_Conn_Info_t *conn_inf, /* for faster access to conn info struct */ int conn_num, int port_num, Mif_Status_t *status); /** A local garbage collector ** The functions copy, MIFgettok, and MIFget_token have been used virtuously, without caring about memory leaks. This is a test with a local gc. Add the list of malloced addresses alltokens. Add a function copy_gc to copy and enter the address. Add a function MIFgettok_gc like MIFgettok, but entering the address Add a function MIFget_token_gc like MIFget_token, but entering the address Add a function gc_end to delete all entries in alltokens. Beware of addresses deleted elsewhere and use anew by malloc. Some tokens should not be deleted here, they need another copying. */ static char *MIFgettok_gc(char **line); static char *MIFget_token_gc(char **s, Mif_Token_Type_t *type); static char *copy_gc(char *in); static void gc_start(void); static void gc_end(void); #define MIFgettok MIFgettok_gc #define MIFget_token MIFget_token_gc static char *alltokens[BSIZE_SP]; static int curtoknr = 0; /* ********************************************************************* */ /* MIF_INP2A This function is called by INPpas2() in SPICE to parse the new ``a'' type element cards and build the required circuit structures for the associated code model device and instance. It first checks the model name at the end of the element card to be sure the model was found in pass 1 of the parser. If so, MIFgetMod is called to process the .model card, creating the necessary internal model structure and filling in the parameter value information. Next, the instance structure is allocated. Finally, the connections on the element card are scanned and the connection information is filled-in on the instance structure, and error checks are performed. */ /*--------------- Quick summary of algorithm ----------------------- 1. Get the spice card. Place card string into variable 'line'. 2. Get the name of the instance and add it to the symbol table 3. Locate the last token on the line and assign it to variable 'model' 4. Locate the model from pass 1. If it hasn't been processed yet, allocate structure in ckt for it, process the parameters, and return a pointer to its structure in 'thismodel' 5. Get model type. 6. Create a new instance structure in ckt for this instance. ------ Process the connections: here's where it gets interesting. ----- 7. Reset 'line'. Then read instance name again to go over it. 8. Read initial token. 9 Start loop through port tokens: 10. If token is a %, then read next token to get port type and save this port type. Otherwise, use default port type. 11. Check if connection is null. If so, iterate to next conn. 12. Get next token. Depending upon token type (scalar or array) do the following: -- Scalar: Process it, then continue loop. -- Array: Loop through all tokens until ] is found & process tokens. If token is a %, then read next token to get port type Then continue outer loop over port tokens. 13. After looping through connection tokens, do error checks. At this point, nothing should be left in 'line' -------------------------------------------------------------------------*/ void MIF_INP2A ( CKTcircuit *ckt, /* circuit structure to put mod/inst structs in */ INPtables *tab, /* symbol table for node names, etc. */ struct card *current ) /* the card we are to parse */ /* Must be called "current" for compatibility */ /* with macros */ { /* parse a code model instance card */ /* Aname */ char *line; /* the text line for this card */ char *name; /* the name of the instance */ char *model=NULL; /* the name of the model */ char *def_port_type_str = NULL; /* The default port type in string form */ char *next_token; /* a token string */ char *tmp_token; /* a token string */ int i; /* a loop counter */ int j; /* a loop counter */ int type; /* the type of the model for this instance */ /* int num_conn; number of connections for this model */ int error; /* for the IFC macro */ MIFmodel *mdfast; /* pointer to model struct */ MIFinstance *fast[1]; /* pointer to instance struct */ INPmodel *thismodel; /* pointer to model struct */ Mif_Conn_Info_t *conn_info; /* for faster access to conn info struct */ Mif_Param_Info_t *param_info; /* for faster access to param info struct */ Mif_Port_Type_t def_port_type = MIF_VOLTAGE; /* the default port type */ Mif_Status_t status; /* return status */ Mif_Token_Type_t next_token_type; /* the type of the next token */ #ifdef TRACE /* SDB debug statement */ printf("In MIF_INP2A, line to process = %s . . . \n", current->line); #endif /* get the line text from the card struct */ line = current->line; /* reset the garbage collector */ gc_start(); /* get the name of the instance and add it to the symbol table */ name = copy(MIFgettok(&line)); INPinsert(&name, tab); /* locate the last token on the line (i.e. model name) and put it into "model" */ while(*line != '\0') { model = MIFgettok(&line); } /* make sure the model name was there. */ if(model == NULL) { LITERR("Missing model on A type device"); gc_end(); return; } /* Locate model from pass 1. If it hasn't been processed yet, */ /* allocate a structure in ckt for it, process its parameters */ /* and return a pointer to its structure in 'thismodel' */ current->error = MIFgetMod(ckt, model, &thismodel, tab); if(current->error) { gc_end(); return; } /* get the integer index into the DEVices data array for this */ /* model */ type = thismodel->INPmodType; if((type >= DEVmaxnum) || DEVicesfl[type] == 0) { LITERR("Invalid model type for A type device"); gc_end(); return; } /* create a new structure for this instance in ckt */ mdfast = (MIFmodel*) thismodel->INPmodfast; IFC(newInstance, (ckt, (GENmodel*)mdfast, (GENinstance **)fast, name)); /* initialize the code model specific elements of the inst struct */ MIFinit_inst(mdfast, fast[0]); /* *********************** */ /* Process the connections */ /* *********************** */ /* reset 'line', and then read instance name again. */ line = current->line; tmp_token = MIFgettok(&line); /* read instance name again . . . .*/ /* OK -- now &line points to the first token after the instance name and we are ready to process the connections (netnames) */ /* now get next token. It should be either a % token, a [, or a connection (netname) which might be 'null'. */ next_token = MIFget_token(&line,&next_token_type); /* When we enter the loop, next_token holds the first thing *after* the instance name. Upon each iteration, we start the iteration with next_token holding the next *unprocessed* token. The loop proceeds through the fixed number of connections expected, as defined in the DEVices struct. */ for(i = 0; i < DEVices[type]->DEVpublic.num_conn; i++) { /* Check that the line is not finished yet. */ if(*line == '\0') { LITERR("Encountered end of line before all connections were found in model."); gc_end(); return; } /* At this point, we have one of three possibilities: 1. next_token holds a %, and &line points to either the port type identifier (id, vd, etc) 2. next_token holds a netname and &line points to the thing *after* the first netname. 3. next_token holds a [ indicating the start of an array of ports. */ /* prepare a pointer for fast access to info about this connection */ conn_info = &(DEVices[type]->DEVpublic.conn[i]); /* Now if we had a % token, get actual info about connection type. Otherwise use default info */ if(next_token_type == MIF_PERCENT_TOK) { /* we found a % */ /* get the port type identifier and check it for validity */ next_token = MIFget_token(&line, &next_token_type); /* Note that MIFget_port_type eats the next token and advances the token pointer in line */ MIFget_port_type(ckt, tab, current, &line, &next_token, &next_token_type, &def_port_type, &def_port_type_str, conn_info, &status); if (status == MIF_ERROR) { gc_end(); return; } } else { /* use the default port type for this connection */ def_port_type = conn_info->default_port_type; def_port_type_str = copy_gc(conn_info->default_type); } /* At this point, next_token should be either a [ char, or should hold the the first connection (netname) */ /* set analog and event_driven flags on instance and model */ if((def_port_type == MIF_DIGITAL) || (def_port_type == MIF_USER_DEFINED)) { fast[0]->event_driven = MIF_TRUE; mdfast->event_driven = MIF_TRUE; } else { fast[0]->analog = MIF_TRUE; mdfast->analog = MIF_TRUE; } /* check for a null connection and continue to next connection if found */ if(next_token_type == MIF_NULL_TOK) { /* make sure null is allowed */ if(! conn_info->null_allowed) { LITERR("NULL connection found where not allowed"); gc_end(); return; } /* set the null flag to true */ fast[0]->conn[i]->is_null = MIF_TRUE; fast[0]->conn[i]->size = 0; /* eat the null token and continue to next connection */ next_token = MIFget_token(&line,&next_token_type); continue; /* iterate */ } else { /* set the null flag to false */ fast[0]->conn[i]->is_null = MIF_FALSE; } /* ===== process connection as appropriate for scalar or array ====== */ if(! conn_info->is_array) { /* a scalar connection - the simpler case */ /* If we get to there, next_token should hold a netname in the port netlist. */ /* First, do a couple of error checks */ if(next_token_type == MIF_LARRAY_TOK) { LITERR("ERROR - Scalar connection expected, [ found"); printf("ERROR - Scalar connection expected, [ found. Returning . . ."); gc_end(); return; } if(next_token_type == MIF_RARRAY_TOK) { LITERR("ERROR - Unexpected ]"); printf("ERROR - Unexpected ]. Returning . . ."); gc_end(); return; } /* If all OK, get the port data into the instance struct */ /* allocating the port member of the instance struct as needed */ /* Note that MIFget_port eats next_token, and advances the &line pointer.. */ MIFget_port(ckt, tab, current, fast[0], &line, &next_token, &next_token_type, def_port_type, def_port_type_str, conn_info, i, /* connection index */ 0, /* port index for scalar connection */ &status); if (status == MIF_ERROR) { gc_end(); return; } fast[0]->conn[i]->size = 1; /* when we leave here, next_token should hold the next, unprocessed netname */ } else { /* ====== the connection is an array - much to be done ... ====== */ /* At this point, the next_token should be a [ */ /* check for required leading array delim character [ and eat it if found */ if(next_token_type != MIF_LARRAY_TOK) { LITERR("Missing [, an array connection was expected"); printf("Missing [, an array connection was expected. Returning . . ."); gc_end(); return; } else /* eat the [ */ next_token = MIFget_token(&line,&next_token_type); /*------ get and process ports until ] is encountered ------*/ for(j = 0; (next_token_type != MIF_RARRAY_TOK) && (*line != '\0'); j++) { /********** mhx Friday, August 19, 2011, 15:08 begin *** Now if we had a % token, get actual info about connection type, or else use the port type for this connection that was setup BEFORE the '[' token. Do NOT use conn_info->default_port_type! */ if (next_token_type == MIF_PERCENT_TOK) { next_token = MIFget_token (&line,&next_token_type); MIFget_port_type(ckt, tab, current, &line, &next_token, &next_token_type, &def_port_type, &def_port_type_str, conn_info, &status); if (status == MIF_ERROR) { gc_end(); return; } } /* At this point, next_token should be either a [ or ] char (not allowed), or hold a non-null connection (netname) */ if(next_token_type == MIF_NULL_TOK) { LITERR("NULL connection found where not allowed"); printf("NULL connection found where not allowed. Returning . . ."); gc_end(); return; } if(next_token_type == MIF_LARRAY_TOK) { LITERR("ERROR - Unexpected [ - Arrays of arrays not allowed"); printf("ERROR - Unexpected [ - Arrays of arrays not allowed. Returning . . ."); gc_end(); return; } if(next_token_type == MIF_RARRAY_TOK) { LITERR("ERROR - Unexpected ]"); printf("ERROR - Unexpected ]. Returning . . ."); gc_end(); return; } /********** mhx Friday, August 19, 2011, 15:08 end ***/ /* If all OK, get the port nodes into the instance struct */ /* allocating the port member of the instance struct as needed */ /* Note that MIFget_port eats next_token and advances &line by one. */ MIFget_port(ckt, tab, current, fast[0], &line, &next_token, &next_token_type, def_port_type, def_port_type_str, conn_info, i, /* connection index */ j, /* port index */ &status); if (status == MIF_ERROR) { gc_end(); return; } } /*------ end of for loop until ] is encountered ------*/ /* At this point, next_token should hold the next token after the port netnames. This token should be a ]. */ /* make sure we exited because the end of the array connection was reached. */ if(*line == '\0') { LITERR("Missing ] in array connection"); gc_end(); return; } /* record the number of ports found for this connection */ if(j < 1) { LITERR("Array connection must have at least one port"); gc_end(); return; } fast[0]->conn[i]->size = j; /* At this point, the next time we get_token, we should get a % or a net name. We'll do that now, since when we enter the loop, we expect next_token to hold the next unprocessed token. */ next_token = MIFget_token(&line, &next_token_type); } /* ====== array connection processing ====== */ /* be careful about putting stuff here, there is a 'continue' used */ /* in the processing of NULL connections above */ /* At this point, next_token should hold the next unprocessed token. */ } /******* for number of connections *******/ /* *********************** */ /* Error Checks */ /* *********************** */ /* check for too many connections */ /* At this point, we should have eaten all the net connections, and left next_token holding the model name. &line should be empty. */ if(strcmp(next_token, model) != 0) { LITERR("Too many connections -- expecting model name but encountered other tokens."); gc_end(); return; } /* check connection constraints */ for(i = 0; i < DEVices[type]->DEVpublic.num_conn; i++) { conn_info = &(DEVices[type]->DEVpublic.conn[i]); if( (fast[0]->conn[i]->is_null) && (! conn_info->null_allowed) ) { LITERR("Null found for connection where not allowed"); gc_end(); return; } if(conn_info->has_lower_bound) { if(fast[0]->conn[i]->size < conn_info->lower_bound) { LITERR("Too few ports in connection"); gc_end(); return; } } if(conn_info->has_upper_bound) { if(fast[0]->conn[i]->size > conn_info->upper_bound) { LITERR("Too many ports in connection"); gc_end(); return; } } } /* check model parameter constraints */ /* some of these should probably be done in MIFgetMod() */ /* to prevent multiple error messages */ for(i = 0; i < DEVices[type]->DEVpublic.num_param; i++) { param_info = &(DEVices[type]->DEVpublic.param[i]); if(mdfast->param[i]->is_null) { if(! param_info->has_default) { LITERR("Parameter on model has no default"); gc_end(); return; } else if((param_info->is_array) && (! param_info->has_conn_ref)) { LITERR("Defaulted array parameter must have associated array connection"); gc_end(); return; } } if((! mdfast->param[i]->is_null) && (param_info->is_array)) { if(param_info->has_conn_ref) { if(fast[0]->conn[param_info->conn_ref]->size != fast[0]->param[i]->size) { LITERR("Array parameter size on model does not match connection size"); gc_end(); return; } } } } gc_end(); } /* ********************************************************************* */ /* MIFinit_inst This function initializes the code model specific elements of the inst struct. */ static void MIFinit_inst( MIFmodel *mdfast, /* The model the instance is derived from */ MIFinstance *fast) /* The instance to initialize */ { int mod_type; /* type of this model */ Mif_Conn_Info_t *conn_info; int i; /* get an index into the DEVices information structure */ mod_type = mdfast->MIFmodType; /* allocate code model connector data in instance struct */ fast->num_conn = DEVices[mod_type]->DEVpublic.num_conn; fast->conn = TMALLOC(Mif_Conn_Data_t *, fast->num_conn); for(i = 0; i < fast->num_conn; i++) fast->conn[i] = TMALLOC(Mif_Conn_Data_t, 1); /* initialize code model connector data */ for(i = 0; i < fast->num_conn; i++) { conn_info = &(DEVices[mod_type]->DEVpublic.conn[i]); fast->conn[i]->name = conn_info->name; fast->conn[i]->description = conn_info->description; fast->conn[i]->is_null = MIF_TRUE; fast->conn[i]->size = 0; fast->conn[i]->port = NULL; switch(conn_info->direction) { case MIF_INOUT: fast->conn[i]->is_input = MIF_TRUE; fast->conn[i]->is_output = MIF_TRUE; break; case MIF_IN: fast->conn[i]->is_input = MIF_TRUE; fast->conn[i]->is_output = MIF_FALSE; break; case MIF_OUT: fast->conn[i]->is_input = MIF_FALSE; fast->conn[i]->is_output = MIF_TRUE; break; default: printf("\nERROR - Impossible direction type in MIFinit_inst\n"); controlled_exit(1); } } /* allocate and copy instance variable data to the instance */ fast->num_inst_var = DEVices[mod_type]->DEVpublic.num_inst_var; fast->inst_var = TMALLOC(Mif_Inst_Var_Data_t *, fast->num_inst_var); for(i = 0; i < fast->num_inst_var; i++) { fast->inst_var[i] = TMALLOC(Mif_Inst_Var_Data_t, 1); if(DEVices[mod_type]->DEVpublic.inst_var[i].is_array) { fast->inst_var[i]->size = 0; fast->inst_var[i]->element = NULL; /* The code model allocates space for the data and sets the size */ } else { fast->inst_var[i]->size = 1; fast->inst_var[i]->element = TMALLOC(Mif_Value_t, 1); } } /* copy model parameter data to the instance */ fast->num_param = mdfast->num_param; fast->param = mdfast->param; /* initialize any additional instance data */ fast->initialized = MIF_FALSE; fast->analog = MIF_FALSE; fast->event_driven = MIF_FALSE; fast->inst_index = 0; fast->callback = NULL; } /* ********************************************************************* */ /* MIFget_port_type This function gets the port type identifier and checks it for validity. It also replaces false default information in conn_info with the real info based upon the discovered port type string. When we call it, we expect that the next token type (sent from above) should be the port type (MIF_STRING_TOK type). That is, we should be sitting right on the def of the port type (i.e. %vnam, %vd, %id, etc.) Note that the parser should have stripped the % already. Upon return, this fcn should leave next_token holding the token *after* the port type (i.e. the thing after vnam, v, vd, id, etc). */ static void MIFget_port_type( CKTcircuit *ckt, /* circuit structure to put mod/inst structs in */ INPtables *tab, /* symbol table for node names, etc. */ struct card *current, /* MUST be named 'current' for spice macros */ char **line, char **next_token, Mif_Token_Type_t *next_token_type, Mif_Port_Type_t *port_type, char **port_type_str, Mif_Conn_Info_t *conn_info, /* for faster access to conn info struct */ Mif_Status_t *status) { Mif_Boolean_t found_type; char *temp; int i; NG_IGNORE(ckt); NG_IGNORE(tab); if(**line == '\0') { LITERR("Missing connections on A device"); *status = MIF_ERROR; return; } if(*next_token_type != MIF_STRING_TOK) { LITERR("Invalid port type specifier"); *status = MIF_ERROR; return; } /* OK, so get the port type string from the token and read next token */ temp = *next_token; *next_token = MIFget_token(line, next_token_type); /* check port type for validity */ found_type = MIF_FALSE; for(i = 0; i < conn_info->num_allowed_types; i++) { if(strcmp(temp, conn_info->allowed_type_str[i]) == 0) { found_type = MIF_TRUE; *port_type = conn_info->allowed_type[i]; *port_type_str = temp; break; } } if(! found_type) { LITERR("Port type is invalid"); *status = MIF_ERROR; } else { /* Fix by SDB so that the netlist parser uses the actual nature of the port instead of the default state to decide if it is an array. */ /* if ( (*port_type == MIF_DIFF_VOLTAGE) || (*port_type == MIF_DIFF_CURRENT) || (*port_type == MIF_DIFF_CONDUCTANCE) || (*port_type == MIF_DIFF_RESISTANCE) ) { conn_info->is_array = 1; } */ *status = MIF_OK; } } /* ********************************************************************* */ /* MIFget_port This function processes a port being parsed, either single ended, or both connections of a differential. When we call this fcn, next_token should be the *first* netname in the port net list. Depending upon the type of port, this fcn should eat the appropriate number of net tokens. When we leave this fcn, next_token should hold the next token after the last netname processed. */ static void MIFget_port( CKTcircuit *ckt, /* circuit structure to put mod/inst structs in */ INPtables *tab, /* symbol table for node names, etc. */ struct card *current, /* MUST be named 'current' for spice macros */ MIFinstance *fast, /* pointer to instance struct */ char **line, char **next_token, Mif_Token_Type_t *next_token_type, Mif_Port_Type_t def_port_type, char *def_port_type_str, Mif_Conn_Info_t *conn_info, /* for faster access to conn info struct */ int conn_num, int port_num, Mif_Status_t *status) { CKTnode *pos_node[1]; /* positive connection node */ CKTnode *neg_node[1]; /* negative connection node */ char *node; /* allocate space in the instance data struct for this port */ if(port_num == 0) { fast->conn[conn_num]->port = TMALLOC(Mif_Port_Data_t *, 1); fast->conn[conn_num]->port[0] = TMALLOC(Mif_Port_Data_t, 1); } else { fast->conn[conn_num]->port = TREALLOC(Mif_Port_Data_t *, fast->conn[conn_num]->port, port_num + 1); fast->conn[conn_num]->port[port_num] = TMALLOC(Mif_Port_Data_t, 1); } /* store the port type information in the instance struct */ fast->conn[conn_num]->port[port_num]->type = def_port_type; fast->conn[conn_num]->port[port_num]->type_str = copy(def_port_type_str); /* check for a leading tilde on digital ports */ if(*next_token_type == MIF_TILDE_TOK) { if((def_port_type != MIF_DIGITAL) && (def_port_type != MIF_USER_DEFINED)) { LITERR("ERROR - Tilde not allowed on analog nodes"); *status = MIF_ERROR; return; } fast->conn[conn_num]->port[port_num]->invert = MIF_TRUE; /* eat the tilde and get the next token */ *next_token = MIFget_token(line, next_token_type); if(**line == '\0') { LITERR("ERROR - Not enough ports"); *status = MIF_ERROR; return; } } else fast->conn[conn_num]->port[port_num]->invert = MIF_FALSE; /* check for null port */ if(*next_token_type == MIF_NULL_TOK) { /* make sure null is allowed */ if(! conn_info->null_allowed) { LITERR("NULL connection found where not allowed"); *status = MIF_ERROR; return; } /* set the (port specific) null flag to true */ fast->conn[conn_num]->port[port_num]->is_null = MIF_TRUE; /* set input value to zero in case user code model refers to it */ fast->conn[conn_num]->port[port_num]->input.rvalue = 0.0; /* eat the null token and return */ *next_token = MIFget_token(line, next_token_type); *status = MIF_OK; return; } else { /* set the (port specific) null flag to false */ fast->conn[conn_num]->port[port_num]->is_null = MIF_FALSE; } /* next token must be a node/instance identifier ... */ if(*next_token_type != MIF_STRING_TOK) { LITERR("ERROR - Expected node/instance identifier"); *status = MIF_ERROR; return; } /* Get the first connection or the voltage source name */ switch(def_port_type) { case MIF_VOLTAGE: case MIF_DIFF_VOLTAGE: case MIF_CURRENT: case MIF_DIFF_CURRENT: case MIF_CONDUCTANCE: case MIF_DIFF_CONDUCTANCE: case MIF_RESISTANCE: case MIF_DIFF_RESISTANCE: *next_token = copy(*next_token); /* Call the spice3c1 function to put this node in the node list in ckt */ INPtermInsert(ckt, next_token, tab, pos_node); /* store the equation number and node identifier */ /* This is the equivalent of what CKTbindNode() does in 3C1 */ fast->conn[conn_num]->port[port_num]->pos_node_str = *next_token; fast->conn[conn_num]->port[port_num]->smp_data.pos_node = pos_node[0]->number; break; case MIF_VSOURCE_CURRENT: *next_token = copy(*next_token); /* Call the spice3c1 function to put this vsource instance name in */ /* the symbol table */ INPinsert(next_token, tab); /* Now record the name of the vsource instance for processing */ /* later by MIFsetup. This is equivalent to what INPpName */ /* does in 3C1. Checking to see if the source is present in */ /* the circuit is deferred to MIFsetup as is done in 3C1. */ fast->conn[conn_num]->port[port_num]->vsource_str = *next_token; break; case MIF_DIGITAL: case MIF_USER_DEFINED: /* Insert data into event-driven info structs */ EVTtermInsert(ckt, fast, *next_token, def_port_type_str, conn_num, port_num, &(current->error)); if(current->error) { *status = MIF_ERROR; return; } break; default: /* impossible connection type */ LITERR("INTERNAL ERROR - Impossible connection type"); *status = MIF_ERROR; return; } /* get the next token */ *next_token = MIFget_token(line, next_token_type); /* get other node if appropriate */ switch(def_port_type) { case MIF_VOLTAGE: case MIF_CURRENT: case MIF_CONDUCTANCE: case MIF_RESISTANCE: /* These are single ended types, so default other node to ground */ // This don't work dickhead, INPtermInsert tries to FREE(&node) K.A. Feb 27, 2000 // which was not allocted node = TMALLOC(char, 2);// added by K.A. march 5th 2000 *node = '0'; // added by K.A. March 5th 2000 node[1] ='\0'; // added by K.A. March 5th 2000 INPtermInsert(ckt, &node, tab, neg_node); fast->conn[conn_num]->port[port_num]->neg_node_str = node; fast->conn[conn_num]->port[port_num]->smp_data.neg_node = neg_node[0]->number; break; case MIF_DIFF_VOLTAGE: case MIF_DIFF_CURRENT: case MIF_DIFF_CONDUCTANCE: case MIF_DIFF_RESISTANCE: /* These are differential types, so get the other node */ if((**line == '\0') || (*next_token_type != MIF_STRING_TOK)) { LITERR("ERROR - Expected node identifier"); *status = MIF_ERROR; return; } *next_token = copy(*next_token); INPtermInsert(ckt, next_token, tab, neg_node); fast->conn[conn_num]->port[port_num]->neg_node_str = *next_token; fast->conn[conn_num]->port[port_num]->smp_data.neg_node = neg_node[0]->number; *next_token = MIFget_token(line, next_token_type); break; default: /* must be vsource name, digital, or user defined, so there is no other node */ break; } *status = MIF_OK; return; } #undef MIFgettok #undef MIFget_token static char *MIFgettok_gc(char **line) { char *newtok = MIFgettok(line); alltokens[curtoknr++] = newtok; return newtok; } static char *MIFget_token_gc(char **s, Mif_Token_Type_t *type) { char *newtok = MIFget_token(s, type); alltokens[curtoknr++] = newtok; return newtok; } static void gc_start(void) { int i; for (i = 0; i < BSIZE_SP; i++) alltokens[i] = NULL; curtoknr = 0; } static void gc_end(void) { int i, j; for (i = 0; i < BSIZE_SP; i++) { /* We have multiple entries with the same address */ for (j = i + 1; j < curtoknr; j++) if (alltokens[i] == alltokens[j]) alltokens[j] = NULL; tfree(alltokens[i]); } } char * copy_gc(char* in) { char *newtok = copy(in); alltokens[curtoknr++] = newtok; return newtok; } tmpk8ny_4pz/src/xspice/cmpp/0000755000175000017500000000000013546075722016201 5ustar carstencarstentmpk8ny_4pz/src/xspice/cmpp/ifs_yacc_y.h0000644000175000017500000000270413546075722020465 0ustar carstencarsten/*============================================================================ FILE ifs_yacc.h MEMBER OF process cmpp Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Steve Tynor MODIFICATIONS SUMMARY Typedefs needed by the YYSTYPE union (%union operator) in the yacc file. These are only used in the yacc file, but must be defined here since the generated token.h file includes a definition of the union YYSTYPE. INTERFACES None. REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "cmpp.h" typedef struct { Boolean_t has_value; Data_Type_t kind; union { Boolean_t bvalue; int ivalue; double rvalue; Complex_t cvalue; char *svalue; } u; } My_Value_t; typedef struct { Boolean_t has_bound; My_Value_t bound; } Bound_t; typedef struct { Boolean_t is_named; union { char *name; struct { Bound_t upper; Bound_t lower; } bounds; } u; } Range_t; typedef struct { Port_Type_t kind; char *id; /* undefined unless kind == USER_DEFINED */ } My_Port_Type_t; typedef struct ctype_list_s { My_Port_Type_t ctype; struct ctype_list_s *next; } Ctype_List_t; extern void ifs_yyerror(char*); tmpk8ny_4pz/src/xspice/cmpp/Makefile.am0000644000175000017500000000204113546075722020232 0ustar carstencarsten## Process this file with automake to produce Makefile.in BUILT_SOURCES = ifs_yacc.h mod_yacc.h EXTRA_DIST = .gitignore MAINTAINERCLEANFILES = Makefile.in bin_PROGRAMS = cmpp AM_CPPFLAGS = -I. -I$(srcdir) AM_YFLAGS = -d cmpp_SOURCES = main.c cmpp.h \ pp_ifs.c pp_lst.c pp_mod.c read_ifs.c writ_ifs.c util.c \ ifs_lex.l ifs_yacc.y ifs_yacc_y.h \ mod_lex.l mod_yacc.y mod_yacc_y.h mod_lex.c : mod_lex.l $(am__skiplex) $(LEXCOMPILE) -o $@ $< mod_yacc.c : mod_yacc.y $(am__skipyacc) $(YACCCOMPILE) -o $@ $< ifs_lex.c : ifs_lex.l $(am__skiplex) $(LEXCOMPILE) -o $@ $< ifs_yacc.c : ifs_yacc.y $(am__skipyacc) $(YACCCOMPILE) -o $@ $< if CROSS_COMPILING BUILT_SOURCES += build/cmpp$(BUILD_EXEEXT) CLEANFILES = build/cmpp$(BUILD_EXEEXT) BUILD_CMPP_FILES = main.c \ pp_ifs.c pp_lst.c pp_mod.c read_ifs.c writ_ifs.c util.c \ ifs_lex.c ifs_yacc.c \ mod_lex.c mod_yacc.c build/cmpp$(BUILD_EXEEXT) : $(BUILD_CMPP_FILES) $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) \ $(AM_CPPFLAGS) $(LDFLAGS_FOR_BUILD) -o $@ $^ distclean-local: -rm -rf build endif tmpk8ny_4pz/src/xspice/cmpp/pp_ifs.c0000644000175000017500000000332013546075722017623 0ustar carstencarsten/*============================================================================ FILE pp_ifs.c MEMBER OF process cmpp Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the main function for processing an Interface Spec File (ifspec.ifs). INTERFACES preprocess_ifs_file() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include #include "cmpp.h" /* *********************************************************************** */ /* preprocess_ifs_file Function preprocess_ifs_file is the top-level driver function for preprocessing an Interface Specification file (ifspec.ifs). This function calls read_ifs_file() requesting it to read and parse the Interface Specification file and place the information contained in it into an internal data structure. Then write_ifs_c_file() is called to write the information out in a C file that will be compiled and linked with the simulator. */ void preprocess_ifs_file(void) { Ifs_Table_t ifs_table; /* Repository for info read from ifspec.ifs file */ Status_t status; /* Return status */ /* Read the entire ifspec.ifs file and load the data into ifs_table */ status = read_ifs_file(IFSPEC_FILENAME,GET_IFS_TABLE,&ifs_table); if(status != OK) { exit(1); } /* Write the ifspec.c file required by the spice simulator */ status = write_ifs_c_file("ifspec.c",&ifs_table); if(status != OK) { exit(1); } } tmpk8ny_4pz/src/xspice/cmpp/mod_lex.l0000644000175000017500000000603213546075722020006 0ustar carstencarsten%option prefix="mod_yy" %option yylineno %option noyywrap %option nounput %{ /*============================================================================ FILE mod_lex.l MEMBER OF process cmpp Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Steve Tynor MODIFICATIONS SUMMARY This file defines tokens applicable to parsing the cfunc.mod file, and actions to be taken on encountering those tokens. INTERFACES None. REFERENCED FILES mod_yacc.y NON-STANDARD FEATURES None. ============================================================================*/ #include "mod_yacc_y.h" #include "mod_yacc.h" %} I [A-Za-z_] Z [0-9A-Za-z_] %% "/*" {int ch, last_ch; ECHO; /* a comment - repeat it */ ch = '\0'; do { last_ch = ch; #ifdef __cplusplus ch = yyinput(); #else ch = input(); #endif if(ch == EOF) { mod_yyerror ("Unterminated comment"); break; } fputc(ch,mod_yyout); } while (!((last_ch == '*') && (ch == '/'))); } "//" {int ch; ECHO; /* a comment - repeat it */ do { #ifdef __cplusplus ch = yyinput(); #else ch = input(); #endif if(ch == EOF) { mod_yyerror ("Unterminated comment"); break; } fputc(ch, mod_yyout); } while (ch != '\n'); } ARGS {return TOK_ARGS;} INIT {return TOK_INIT;} CALLBACK {return TOK_CALLBACK;} ANALYSIS {return TOK_ANALYSIS;} NEW_TIMEPOINT {return TOK_NEW_TIMEPOINT;} CALL_TYPE {return TOK_CALL_TYPE;} TIME {return TOK_TIME;} RAD_FREQ {return TOK_RAD_FREQ;} TEMPERATURE {return TOK_TEMPERATURE;} T {return TOK_T;} LOAD {return TOK_LOAD;} TOTAL_LOAD {return TOK_TOTAL_LOAD;} MESSAGE {return TOK_MESSAGE;} PARAM {return TOK_PARAM;} PARAM_SIZE {return TOK_PARAM_SIZE;} PARAM_NULL {return TOK_PARAM_NULL;} PORT_SIZE {return TOK_PORT_SIZE;} PORT_NULL {return TOK_PORT_NULL;} PARTIAL {return TOK_PARTIAL;} AC_GAIN {return TOK_AC_GAIN;} OUTPUT_DELAY {return TOK_OUTPUT_DELAY;} STATIC_VAR {return TOK_STATIC_VAR;} STATIC_VAR_SIZE {return TOK_STATIC_VAR_SIZE;} STATIC_VAR_INST {return TOK_STATIC_VAR_INST;} INPUT {return TOK_INPUT;} INPUT_STATE {return TOK_INPUT_STATE;} INPUT_TYPE {return TOK_INPUT_TYPE;} INPUT_STRENGTH {return TOK_INPUT_STRENGTH;} OUTPUT {return TOK_OUTPUT;} OUTPUT_STATE {return TOK_OUTPUT_STATE;} OUTPUT_STRENGTH {return TOK_OUTPUT_STRENGTH;} OUTPUT_TYPE {return TOK_OUTPUT_TYPE;} OUTPUT_CHANGED {return TOK_OUTPUT_CHANGED;} "(" {return TOK_LPAREN;} ")" {return TOK_RPAREN;} "[" {return TOK_LBRACKET;} "]" {return TOK_RBRACKET;} "," {return TOK_COMMA;} {I}+{Z}* {return TOK_IDENTIFIER;} [ \t] ECHO; /* just eat non-newline whitespace */ \n ECHO; /* echo newlines */ . {return TOK_MISC_C;} %% tmpk8ny_4pz/src/xspice/cmpp/cmpp.h0000644000175000017500000002133513546075722017315 0ustar carstencarsten/*============================================================================ FILE cmpp.h MEMBER OF process cmpp Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains shared constants, type definitions, and function prototypes used in the cmpp process. INTERFACES None. REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include #define IFSPEC_FILENAME "ifspec.ifs" #define UDNFUNC_FILENAME "udnfunc.c" #define MODPATH_FILENAME "modpath.lst" #define UDNPATH_FILENAME "udnpath.lst" #ifdef _MSC_VER #include #define strdup _strdup #define unlink _unlink #define isatty _isatty #define fileno _fileno #endif /* *********************************************************************** */ typedef enum { OK, /* Returned with no error */ ERROR, /* Returned with error */ } Status_t; #define GET_IFS_TABLE 0 /* Read the entire ifs table */ #define GET_IFS_NAME 1 /* Get the C function name out of the table only */ #define MAX_PATH_LEN 1024 /* Maximum pathname length */ #define MAX_NAME_LEN 1024 /* Maximum SPICE name length */ #define MAX_FN_LEN 31 /* Maximum filename length */ /* ******************************************************************** */ /* Structures used by parser to check for valid connections/parameters */ /* ******************************************************************** */ /* * The boolean type */ typedef enum { FALSE, TRUE, } Boolean_t; /* * The direction of a connector */ typedef enum { IN, OUT, INOUT, } Dir_t; /* * The type of a port */ typedef enum { VOLTAGE, /* v - Single-ended voltage */ DIFF_VOLTAGE, /* vd - Differential voltage */ CURRENT, /* i - Single-ended current */ DIFF_CURRENT, /* id - Differential current */ VSOURCE_CURRENT, /* vnam - Vsource name for input current */ CONDUCTANCE, /* g - Single-ended VCIS */ DIFF_CONDUCTANCE, /* gd - Differential VCIS */ RESISTANCE, /* h - Single-ended ICVS */ DIFF_RESISTANCE, /* hd - Differential ICVS */ DIGITAL, /* d - Digital */ USER_DEFINED, /* - Any user defined type */ } Port_Type_t; /* * The type of a parameter or Static_Var */ typedef enum { BOOLEAN, INTEGER, REAL, COMPLEX, STRING, POINTER, /* NOTE: POINTER should not be used for Parameters - only * Static_Vars - this is enforced by the cmpp. */ } Data_Type_t; /* * The complex type */ typedef struct { double real; double imag; } Complex_t; /* * Values of different types. * * Note that a struct is used instead of a union for conformity * with the use of the Mif_Value_t type in the simulator where * the type must be statically initialized. ANSI C does not * support useful initialization of unions. * */ typedef struct { Boolean_t bvalue; /* For BOOLEAN parameters */ int ivalue; /* For INTEGER parameters */ double rvalue; /* For REAL parameters */ Complex_t cvalue; /* For COMPLEX parameters */ char *svalue; /* For STRING parameters */ } Value_t; /* * Information about the model as a whole */ typedef struct { char *c_fcn_name; /* Name used in the C function */ char *model_name; /* Name used in a spice deck */ char *description; /* Description of the model */ } Name_Info_t; /* * Information about a connection */ typedef struct { char *name; /* Name of this connection */ char *description; /* Description of this connection */ Dir_t direction; /* IN, OUT, or INOUT */ Port_Type_t default_port_type; /* The default port type */ char *default_type; /* The default type in string form */ int num_allowed_types; /* The size of the allowed type arrays */ Port_Type_t *allowed_port_type; /* Array of allowed types */ char **allowed_type; /* Array of allowed types in string form */ Boolean_t is_array; /* True if connection is an array */ Boolean_t has_conn_ref; /* True if there is associated with an array conn */ int conn_ref; /* Subscript of the associated array conn */ Boolean_t has_lower_bound; /* True if there is an array size lower bound */ int lower_bound; /* Array size lower bound */ Boolean_t has_upper_bound; /* True if there is an array size upper bound */ int upper_bound; /* Array size upper bound */ Boolean_t null_allowed; /* True if null is allowed for this connection */ } Conn_Info_t; /* * Information about a parameter */ typedef struct { char *name; /* Name of this parameter */ char *description; /* Description of this parameter */ Data_Type_t type; /* Data type, e.g. REAL, INTEGER, ... */ Boolean_t has_default; /* True if there is a default value */ Value_t default_value; /* The default value */ Boolean_t has_lower_limit; /* True if there is a lower limit */ Value_t lower_limit; /* The lower limit for this parameter */ Boolean_t has_upper_limit; /* True if there is a upper limit */ Value_t upper_limit; /* The upper limit for this parameter */ Boolean_t is_array; /* True if parameter is an array */ Boolean_t has_conn_ref; /* True if there is associated with an array conn */ int conn_ref; /* Subscript of the associated array conn */ Boolean_t has_lower_bound; /* True if there is an array size lower bound */ int lower_bound; /* Array size lower bound */ Boolean_t has_upper_bound; /* True if there is an array size upper bound */ int upper_bound; /* Array size upper bound */ Boolean_t null_allowed; /* True if null is allowed for this parameter */ } Param_Info_t; /* * Information about an instance variable */ typedef struct { char *name; /* Name of this parameter */ char *description; /* Description of this parameter */ Data_Type_t type; /* Data type, e.g. REAL, INTEGER, ... */ Boolean_t is_array; /* True if parameter is an array */ } Inst_Var_Info_t; /* * The all encompassing structure for the ifs table information */ typedef struct { Name_Info_t name; /* The name table entries */ int num_conn; /* Number of entries in the connection table(s) */ Conn_Info_t *conn; /* Array of connection info structs */ int num_param; /* Number of entries in the parameter table(s) */ Param_Info_t *param; /* Array of parameter info structs */ int num_inst_var; /* Number of entries in the instance var table(s) */ Inst_Var_Info_t *inst_var; /* Array of instance variable info structs */ } Ifs_Table_t; /* *********************************************************************** */ void preprocess_ifs_file(void); void preprocess_lst_files(void); void preprocess_mod_file(char *filename); void init_error (char *program_name); #ifdef __GNUC__ void print_error(const char *fmt, ...) __attribute__ ((format (__printf__, 1, 2))); #else void print_error(const char *fmt, ...); #endif void str_to_lower(char *s); Status_t read_ifs_file(const char *filename, int mode, Ifs_Table_t *ifs_table); Status_t write_ifs_c_file(const char *filename, Ifs_Table_t *ifs_table); FILE *fopen_cmpp(const char **path_p, const char *mode); /* * type safe variants of the functions for char arguments */ #if !defined(isalpha_c) inline static int char_to_int(char c) { return (unsigned char) c; } #define isalpha_c(x) isalpha(char_to_int(x)) #define islower_c(x) islower(char_to_int(x)) #define isdigit_c(x) isdigit(char_to_int(x)) #define isalnum_c(x) isalnum(char_to_int(x)) #define isprint_c(x) isprint(char_to_int(x)) #define isblank_c(x) isblank(char_to_int(x)) #define isspace_c(x) isspace(char_to_int(x)) #define isupper_c(x) isupper(char_to_int(x)) #define tolower_c(x) ((char) tolower(char_to_int(x))) #define toupper_c(x) ((char) toupper(char_to_int(x))) #endif tmpk8ny_4pz/src/xspice/cmpp/pp_lst.c0000644000175000017500000007645313546075722017665 0ustar carstencarsten/*============================================================================ FILE pp_lst.c MEMBER OF process cmpp Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains functions used in processing the files: modpath.lst udnpath.lst The files 'modpath.lst' and 'udnpath.lst' are read to get the pathnames to directories containing the models and node types desired in the simulator to be built. Files in each of these directories are then examined to get the names of functions and/or data structures that the simulator must know about. The names are then checked for uniqueness, and finally, a collection of files needed in the 'make' for the simulator are written. INTERFACES preprocess_lst_files() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "cmpp.h" #include #include #include /* *********************************************************************** */ /* * Information for processing the pathname files */ typedef struct { char *path_name; /* Pathname read from model path file */ char *spice_name; /* Name of model from ifspec.ifs */ char *cfunc_name; /* Name of C fcn from ifspec.ifs */ Boolean_t spice_unique; /* True if spice name unique */ Boolean_t cfunc_unique; /* True if C fcn name unique */ } Model_Info_t; typedef struct { char *path_name; /* Pathname read from udn path file */ char *node_name; /* Name of node type */ Boolean_t unique; /* True if node type name unique */ } Node_Info_t; /* *********************************************************************** */ static Status_t read_modpath(int *num_models, Model_Info_t **model_info); static Status_t read_udnpath(int *num_nodes, Node_Info_t **node_info); static Status_t read_model_names(int num_models, Model_Info_t *model_info); static Status_t read_node_names(int num_nodes, Node_Info_t *node_info); static Status_t check_uniqueness(int num_models, Model_Info_t *model_info, int num_nodes, Node_Info_t *node_info); static Status_t write_CMextrn(int num_models, Model_Info_t *model_info); static Status_t write_CMinfo(int num_models, Model_Info_t *model_info); static Status_t write_UDNextrn(int num_nodes, Node_Info_t *node_info); static Status_t write_UDNinfo(int num_nodes, Node_Info_t *node_info); static Status_t write_objects_inc(int num_models, Model_Info_t *model_info, int num_nodes, Node_Info_t *node_info); static Status_t read_udn_type_name(const char *path, char **node_name); /* *********************************************************************** */ /* preprocess_lst_files Function preprocess_lst_files is the top-level driver function for preprocessing a simulator model path list file (modpath.lst). This function calls read_ifs_file() requesting it to read and parse the Interface Specification file (ifspec.ifs) to extract the model name and associated C function name and place this information into an internal data structure. It then calls check_uniqueness() to verify that the model names and function names are unique with respect to each other and to the models and functions internal to SPICE 3C1. Following this check, it calls write_CMextrn(), write_CMinfo(), and write_make_include() to write out the C include files CMextrn.h and CMinfo.h required by SPICE function SPIinit.c to define the models known to the simulator, and to write out a make include file used by the make utility to locate the object modules necessary to link the models into the simulator. */ void preprocess_lst_files(void) { Status_t status; /* Return status */ Model_Info_t *model_info; /* Info about each model */ Node_Info_t *node_info; /* Info about each user-defined node type */ int num_models; /* The number of models */ int num_nodes; /* The number of user-defined nodes */ /* Get list of models from model pathname file */ status = read_modpath(&num_models, &model_info); if(status != OK) { exit(1); } /* Get list of node types from udn pathname file */ status = read_udnpath(&num_nodes, &node_info); if(status != OK) { exit(1); } /* Get the spice and C function names from the ifspec.ifs files */ status = read_model_names(num_models, model_info); if(status != OK) { exit(1); } /* Get the user-defined node type names */ status = read_node_names(num_nodes, node_info); if(status != OK) { exit(1); } /* Check to be sure the names are unique */ status = check_uniqueness(num_models, model_info, num_nodes, node_info); if(status != OK) { exit(1); } /* Write out the CMextrn.h file used to compile SPIinit.c */ status = write_CMextrn(num_models, model_info); if(status != OK) { exit(1); } /* Write out the CMinfo.h file used to compile SPIinit.c */ status = write_CMinfo(num_models, model_info); if(status != OK) { exit(1); } /* Write out the UDNextrn.h file used to compile SPIinit.c */ status = write_UDNextrn(num_nodes, node_info); if(status != OK) { exit(1); } /* Write out the UDNinfo.h file used to compile SPIinit.c */ status = write_UDNinfo(num_nodes, node_info); if(status != OK) { exit(1); } /* Write the make_include file used to link the models and */ /* user-defined node functions with the simulator */ status = write_objects_inc(num_models, model_info, num_nodes, node_info); if(status != OK) { exit(1); } } /* *********************************************************************** */ /* read_modpath This function opens the modpath.lst file, reads the pathnames from the file, and puts them into an internal data structure for future processing. */ static Status_t read_modpath( int *num_models, /* Number of model pathnames found */ Model_Info_t **model_info /* Info about each model */ ) { FILE *fp; /* Model pathname file pointer */ char path[MAX_PATH_LEN+2]; /* space to read pathnames into */ Model_Info_t *model = NULL; /* temporary pointer to model info */ int n; int i; int j; int len; int line_num; const char *filename = MODPATH_FILENAME; /* Initialize number of models to zero in case of error */ *num_models = 0; /* Open the model pathname file */ fp = fopen_cmpp(&filename, "r"); if(fp == NULL) { print_error("ERROR - File not found: %s", filename); return(ERROR); } /* Read the pathnames from the file, one line at a time until EOF */ n = 0; line_num = 0; while( fgets(path, sizeof(path), fp) ) { line_num++; len = (int) strlen(path); /* If line was too long for buffer, exit with error */ if(len > MAX_PATH_LEN) { print_error("ERROR - Line %d of %s exceeds %d characters", line_num, filename, MAX_PATH_LEN); return(ERROR); } /* Strip white space including newline */ for(i = 0, j = 0; i < len; ) { if(isspace_c(path[i])) { i++; } else { path[j] = path[i]; i++; j++; } } path[j] = '\0'; len = j; /* Strip trailing '/' if any */ if(path[len - 1] == '/') path[--len] = '\0'; /* If blank line, continue */ if(len == 0) continue; /* Make sure pathname is short enough to add a filename at the end */ if(len > (MAX_PATH_LEN - (MAX_FN_LEN + 1)) ) { print_error("ERROR - Pathname on line %d of %s exceeds %d characters", line_num, filename, (MAX_PATH_LEN - (MAX_FN_LEN + 1))); return(ERROR); } /* Allocate and initialize a new model info structure */ if(n == 0) model = (Model_Info_t *) malloc(sizeof(Model_Info_t)); else model = (Model_Info_t *) realloc(model, (size_t) (n + 1) * sizeof(Model_Info_t)); model[n].path_name = NULL; model[n].spice_name = NULL; model[n].cfunc_name = NULL; model[n].spice_unique = TRUE; model[n].cfunc_unique = TRUE; /* Put pathname into info structure */ model[n].path_name = (char *) malloc((size_t) (len+1)); strcpy(model[n].path_name, path); /* Increment count of paths read */ n++; } /* Close model pathname file and return data read */ fclose(fp); *num_models = n; *model_info = model; return(OK); } /* *********************************************************************** */ /* read_udnpath This function opens the udnpath.lst file, reads the pathnames from the file, and puts them into an internal data structure for future processing. */ static Status_t read_udnpath( int *num_nodes, /* Number of node pathnames found */ Node_Info_t **node_info /* Info about each node */ ) { FILE *fp; /* Udn pathname file pointer */ char path[MAX_PATH_LEN+2]; /* space to read pathnames into */ Node_Info_t *node = NULL; /* temporary pointer to node info */ int n; int i; int j; int len; int line_num; const char *filename = UDNPATH_FILENAME; /* Initialize number of nodes to zero in case of error */ *num_nodes = 0; /* Open the node pathname file */ fp = fopen_cmpp(&filename, "r"); /* For backward compatibility, return with WARNING only if file not found */ if(fp == NULL) { print_error("WARNING - File not found: %s", filename); return(OK); } /* Read the pathnames from the file, one line at a time until EOF */ n = 0; line_num = 0; while( fgets(path, sizeof(path), fp) ) { line_num++; len = (int) strlen(path); /* If line was too long for buffer, exit with error */ if(len > MAX_PATH_LEN) { print_error("ERROR - Line %d of %s exceeds %d characters", line_num, filename, MAX_PATH_LEN); return(ERROR); } /* Strip white space including newline */ for(i = 0, j = 0; i < len; ) { if(isspace_c(path[i])) { i++; } else { path[j] = path[i]; i++; j++; } } path[j] = '\0'; len = j; /* Strip trailing '/' if any */ if(path[len - 1] == '/') path[--len] = '\0'; /* If blank line, continue */ if(len == 0) continue; /* Make sure pathname is short enough to add a filename at the end */ if(len > (MAX_PATH_LEN - (MAX_FN_LEN + 1)) ) { print_error("ERROR - Pathname on line %d of %s exceeds %d characters", line_num, filename, (MAX_PATH_LEN - (MAX_FN_LEN + 1))); return(ERROR); } /* Allocate and initialize a new node info structure */ if(n == 0) node = (Node_Info_t *) malloc(sizeof(Node_Info_t)); else node = (Node_Info_t *) realloc(node, (size_t) (n + 1) * sizeof(Node_Info_t)); node[n].path_name = NULL; node[n].node_name = NULL; node[n].unique = TRUE; /* Put pathname into info structure */ node[n].path_name = (char *) malloc((size_t) (len+1)); strcpy(node[n].path_name, path); /* Increment count of paths read */ n++; } /* Close node pathname file and return data read */ fclose(fp); *num_nodes = n; *node_info = node; return(OK); } /* *********************************************************************** */ /* read_model_names This function opens each of the models and gets the names of the model and the C function into the internal model information structure. */ static Status_t read_model_names( int num_models, /* Number of model pathnames */ Model_Info_t *model_info /* Info about each model */ ) { Boolean_t all_found; /* True if all ifspec files read */ int i; /* A temporary counter */ char path[MAX_PATH_LEN+1]; /* full pathname to ifspec file */ Status_t status; /* Return status */ Ifs_Table_t ifs_table; /* Repository for info read from ifspec file */ /* For each model found in model pathname file, read the interface */ /* spec file to get the SPICE and C function names into model_info */ for(i = 0, all_found = TRUE; i < num_models; i++) { /* Form the full pathname to the interface spec file */ strcpy(path, model_info[i].path_name); strcat(path, "/"); strcat(path, IFSPEC_FILENAME); /* Read the SPICE and C function names from the interface spec file */ status = read_ifs_file(path, GET_IFS_NAME, &ifs_table); /* Transfer the names into the model_info structure */ if(status == OK) { model_info[i].spice_name = ifs_table.name.model_name; model_info[i].cfunc_name = ifs_table.name.c_fcn_name; } else { all_found = FALSE; print_error("ERROR - Problems reading %s in directory %s", IFSPEC_FILENAME, model_info[i].path_name); } } if(all_found) return(OK); else return(ERROR); } /* *********************************************************************** */ /* read_node_names This function opens each of the user-defined node definition files and gets the names of the node into the internal information structure. */ static Status_t read_node_names( int num_nodes, /* Number of node pathnames */ Node_Info_t *node_info /* Info about each node */ ) { Boolean_t all_found; /* True if all files read OK */ int i; /* A temporary counter */ char path[MAX_PATH_LEN+1]; /* full pathname to file */ Status_t status; /* Return status */ char *node_name; /* Name of node type read from file */ /* For each node found in node pathname file, read the udnfunc.c */ /* file to get the node type names into node_info */ for(i = 0, all_found = TRUE; i < num_nodes; i++) { /* Form the full pathname to the interface spec file */ strcpy(path, node_info[i].path_name); strcat(path, "/"); strcat(path, UDNFUNC_FILENAME); /* Read the udn node type name from the file */ status = read_udn_type_name(path, &node_name); /* Transfer the names into the node_info structure */ if(status == OK) { node_info[i].node_name = node_name; } else { all_found = FALSE; print_error("ERROR - Problems reading %s in directory %s", UDNFUNC_FILENAME, node_info[i].path_name); } } if(all_found) return(OK); else return(ERROR); } /* *********************************************************************** */ /* check_uniqueness Function check_uniqueness determines if model names and function names are unique with respect to each other and to the models and functions internal to SPICE 3C1. */ static Status_t check_uniqueness( int num_models, /* Number of model pathnames */ Model_Info_t *model_info, /* Info about each model */ int num_nodes, /* Number of node type pathnames */ Node_Info_t *node_info /* Info about each node type */ ) { int i; /* A temporary counter */ int j; /* A temporary counter */ Boolean_t all_unique; /* true if names are unique */ /* Define a list of model names used internally by XSPICE */ /* These names (except 'poly') are defined in src/sim/INP/INPdomodel.c and */ /* are case insensitive */ static char *SPICEmodel[] = { "npn", "pnp", "d", "njf", "pjf", "nmf", "pmf", "urc", "nmos", "pmos", "r", "c", "sw", "csw", "poly" }; static int numSPICEmodels = sizeof(SPICEmodel) / sizeof(char *); /* Define a list of node type names used internally by the simulator */ /* These names are defined in src/sim/include/MIFtypes.h and are case */ /* insensitive */ static char *UDNidentifier[] = { "v", "vd", "i", "id", "vnam", "g", "gd", "h", "hd", "d" }; static int numUDNidentifiers = sizeof(UDNidentifier) / sizeof(char *); /* First, normalize case of all model and node names to lower since */ /* SPICE is case insensitive in parsing decks */ for(i = 0; i < num_models; i++) str_to_lower(model_info[i].spice_name); for(i = 0; i < num_nodes; i++) str_to_lower(node_info[i].node_name); /* Then, loop through all model names and report errors if same as SPICE */ /* model name or same as another model name in list */ for(i = 0, all_unique = TRUE; i < num_models; i++) { /* First check against list of SPICE internal names */ for(j = 0; j < numSPICEmodels; j++) { if(strcmp(model_info[i].spice_name, SPICEmodel[j]) == 0) { all_unique = FALSE; print_error("ERROR - Model name '%s' is same as internal SPICE model name\n", model_info[i].spice_name); } } /* Skip if already seen once */ if(model_info[i].spice_unique == FALSE) continue; /* Then check against other names in list */ for(j = 0; j < num_models; j++) { /* Skip checking against itself */ if(i == j) continue; /* Compare the names */ if(strcmp(model_info[i].spice_name, model_info[j].spice_name) == 0) { all_unique = FALSE; model_info[i].spice_unique = FALSE; model_info[j].spice_unique = FALSE; print_error("ERROR - Model name '%s' in directory: %s", model_info[i].spice_name, model_info[i].path_name); print_error(" is same as"); print_error(" model name '%s' in directory: %s\n", model_info[j].spice_name, model_info[j].path_name); } } } /* Loop through all C function names and report errors if duplicates found */ for(i = 0; i < num_models; i++) { /* Skip if already seen once */ if(model_info[i].cfunc_unique == FALSE) continue; /* Check against other names in list only, not against SPICE identifiers */ /* Let linker catch collisions with SPICE identifiers for now */ for(j = 0; j < num_models; j++) { /* Skip checking against itself */ if(i == j) continue; /* Compare the names */ if(strcmp(model_info[i].cfunc_name, model_info[j].cfunc_name) == 0) { all_unique = FALSE; model_info[i].cfunc_unique = FALSE; model_info[j].cfunc_unique = FALSE; print_error("ERROR - C function name '%s' in directory: %s", model_info[i].cfunc_name, model_info[i].path_name); print_error(" is same as"); print_error(" C function name '%s' in directory: %s\n", model_info[j].cfunc_name, model_info[j].path_name); } } } /* Loop through all node type names and report errors if same as internal */ /* name or same as another name in list */ for(i = 0; i < num_nodes; i++) { /* First check against list of internal names */ for(j = 0; j < numUDNidentifiers; j++) { if(strcmp(node_info[i].node_name, UDNidentifier[j]) == 0) { all_unique = FALSE; print_error("ERROR - Node type '%s' is same as internal node type\n", node_info[i].node_name); } } /* Skip if already seen once */ if(node_info[i].unique == FALSE) continue; /* Then check against other names in list */ for(j = 0; j < num_nodes; j++) { /* Skip checking against itself */ if(i == j) continue; /* Compare the names */ if(strcmp(node_info[i].node_name, node_info[j].node_name) == 0) { all_unique = FALSE; node_info[i].unique = FALSE; node_info[j].unique = FALSE; print_error("ERROR - Node type '%s' in directory: %s", node_info[i].node_name, node_info[i].path_name); print_error(" is same as"); print_error(" node type '%s' in directory: %s\n", node_info[j].node_name, node_info[j].path_name); } } } /* Return error status */ if(all_unique) return(OK); else return(ERROR); } /* *********************************************************************** */ /* write_CMextrn Function write_CMextrn writes the CMextrn.h file used in compiling SPIinit.c immediately prior to linking the simulator and code models. This SPICE source file uses the structures mentioned in the include file to define the models known to the simulator. */ static Status_t write_CMextrn( int num_models, /* Number of model pathnames */ Model_Info_t *model_info /* Info about each model */ ) { int i; /* A temporary counter */ FILE *fp; /* File pointer for writing CMextrn.h */ const char *filename = "cmextrn.h"; /* Open the file to be written */ fp = fopen_cmpp(&filename, "w"); if(fp == NULL) { print_error("ERROR - Problems opening %s for write", filename); return(ERROR); } /* Write out the data */ for(i = 0; i < num_models; i++) { fprintf(fp, "extern SPICEdev %s_info;\n", model_info[i].cfunc_name); } /* Close the file and return */ fclose(fp); return(OK); } /* *********************************************************************** */ /* write_CMinfo Function write_CMinfo writes the CMinfo.h file used in compiling SPIinit.c immediately prior to linking the simulator and code models. This SPICE source file uses the structures mentioned in the include file to define the models known to the simulator. */ static Status_t write_CMinfo( int num_models, /* Number of model pathnames */ Model_Info_t *model_info /* Info about each model */ ) { int i; /* A temporary counter */ FILE *fp; /* File pointer for writing CMinfo.h */ const char *filename = "cminfo.h"; /* Open the file to be written */ fp = fopen_cmpp(&filename, "w"); if(fp == NULL) { print_error("ERROR - Problems opening %s for write", filename); return(ERROR); } /* Write out the data */ for(i = 0; i < num_models; i++) { fprintf(fp, "&%s_info,\n", model_info[i].cfunc_name); } /* Close the file and return */ fclose(fp); return(OK); } /* *********************************************************************** */ /* write_UDNextrn Function write_UDNextrn writes the UDNextrn.h file used in compiling SPIinit.c immediately prior to linking the simulator and user-defined nodes. This SPICE source file uses the structures mentioned in the include file to define the node types known to the simulator. */ static Status_t write_UDNextrn( int num_nodes, /* Number of node pathnames */ Node_Info_t *node_info /* Info about each node */ ) { int i; /* A temporary counter */ FILE *fp; /* File pointer for writing UDNextrn.h */ const char *filename = "udnextrn.h"; /* Open the file to be written */ fp = fopen_cmpp(&filename, "w"); if(fp == NULL) { print_error("ERROR - Problems opening %s for write", filename); return(ERROR); } /* Write out the data */ for(i = 0; i < num_nodes; i++) { fprintf(fp, "extern Evt_Udn_Info_t udn_%s_info;\n", node_info[i].node_name); } /* Close the file and return */ fclose(fp); return(OK); } /* *********************************************************************** */ /* write_UDNinfo Function write_UDNinfo writes the UDNinfo.h file used in compiling SPIinit.c immediately prior to linking the simulator and user-defined nodes. This SPICE source file uses the structures mentioned in the include file to define the node types known to the simulator. */ static Status_t write_UDNinfo( int num_nodes, /* Number of node pathnames */ Node_Info_t *node_info /* Info about each node */ ) { int i; /* A temporary counter */ FILE *fp; /* File pointer for writing UDNinfo.h */ const char *filename = "udninfo.h"; /* Open the file to be written */ fp = fopen_cmpp(&filename, "w"); if(fp == NULL) { print_error("ERROR - Problems opening %s for write", filename); return(ERROR); } /* Write out the data */ for(i = 0; i < num_nodes; i++) { fprintf(fp, "&udn_%s_info,\n", node_info[i].node_name); } /* Close the file and return */ fclose(fp); return(OK); } /* *********************************************************************** */ /* write_objects_inc Function write_objects_inc writes a make include file used by the make utility to locate the object modules needed to link the simulator with the code models and user-defined node types. */ static Status_t write_objects_inc( int num_models, /* Number of model pathnames */ Model_Info_t *model_info, /* Info about each model */ int num_nodes, /* Number of udn pathnames */ Node_Info_t *node_info /* Info about each node type */ ) { int i; /* A temporary counter */ FILE *fp; /* File pointer for writing make_include */ const char *filename = "objects.inc"; /* Open the file to be written */ fp = fopen_cmpp(&filename, "w"); if(fp == NULL) { print_error("ERROR - Problems opening %s for write", filename); return(ERROR); } /* Write out the data */ for(i = 0; i < num_models; i++) { fprintf(fp, "%s/*.o", model_info[i].path_name); if((i < (num_models - 1)) || (num_nodes > 0)) fprintf(fp, " \\\n"); else fprintf(fp, "\n"); } for(i = 0; i < num_nodes; i++) { fprintf(fp, "%s/*.o", node_info[i].path_name); if(i < (num_nodes - 1)) fprintf(fp, " \\\n"); else fprintf(fp, "\n"); } /* Close the file and return */ fclose(fp); return(OK); } /* read_udn_type_name This function reads a User-Defined Node Definition File until the definition of the Evt_Udn_Info_t struct is found, and then gets the name of the node type from the first member of the structure. */ static Status_t read_udn_type_name( const char *path, /* the path to the node definition file */ char **node_name /* the node type name found in the file */ ) { FILE *fp; /* file pointer for opened file */ Boolean_t found; /* true if name found successfully */ Boolean_t in_struct; /* true if found struct with name */ char name[MAX_NAME_LEN + 1]; /* temporary storage for name read */ int c; /* a character read from the file */ int i; /* a counter */ static char *struct_type = "Evt_Udn_Info_t"; /* Open the file from which the node type name will be read */ fp = fopen_cmpp(&path, "r"); if(fp == NULL) return(ERROR); /* Read the file until the definition of the Evt_Udn_Info_t struct */ /* is found, then get the name of the node type from the first */ /* member of the structure */ found = FALSE; do { /* read the next character */ c = fgetc(fp); /* check for and gobble up comments */ if(c == '/') { c = fgetc(fp); if(c == '*') { do { c = fgetc(fp); if(c == '*') { c = fgetc(fp); if((c == '/') || (c == EOF)) break; else ungetc(c, fp); } } while(c != EOF); } } if(c == EOF) break; /* read until "Evt_Udn_Info_t" is encountered */ for(i = 0, in_struct = FALSE; ; i++) { if(c != struct_type[i]) break; else if(i == (sizeof(struct_type) - 2)) { in_struct = TRUE; break; } else c = fgetc(fp); } /* if found it, read until open quote found */ /* and then read the name until the closing quote is found */ if(in_struct) { do { c = fgetc(fp); if(c == '"') { i = 0; do { c = fgetc(fp); if(c == '"') { found = TRUE; name[i] = '\0'; } else if(c != EOF) name[i++] = (char) c; } while((c != EOF) && (! found)); } } while((c != EOF) && (! found)); } } while((c != EOF) && (! found)); /* Close the file and return */ fclose(fp); if(found) { *node_name = (char *) malloc(strlen(name) + 1); strcpy(*node_name, name); return(OK); } else { *node_name = NULL; return(ERROR); } } tmpk8ny_4pz/src/xspice/cmpp/mod_yacc.y0000644000175000017500000004203013546075722020150 0ustar carstencarsten%{ /*============================================================================ FILE mod_yacc.y MEMBER OF process cmpp Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Steve Tynor MODIFICATIONS 20050420 Steven Borley Renamed strcmpi() to local_strcmpi() to avoid clash with strcmpi() in a windows header file. SUMMARY This file contains a BNF specification of the translation of cfunc.mod files to cfunc.c files, together with various support functions. INTERFACES mod_yyparse() - Function 'yyparse()' is generated automatically by UNIX 'yacc' utility and then converted to 'mod_yyparse()' by UNIX 'sed' utility under direction of Makefile. REFERENCED FILES mod_lex.l NON-STANDARD FEATURES Names of functions generated by 'yacc' are translated by 'sed' under direction of the Makefile to prevent collisions with functions generated from ifs_yacc.y. ============================================================================*/ #include #include #include #include "mod_yacc_y.h" extern int mod_yylex(void); #define yymaxdepth mod_yymaxdepth #define yyparse mod_yyparse #define yylex mod_yylex #define yyerror mod_yyerror #define yylval mod_yylval #define yychar mod_yychar #define yydebug mod_yydebug #define yypact mod_yypact #define yyr1 mod_yyr1 #define yyr2 mod_yyr2 #define yydef mod_yydef #define yychk mod_yychk #define yypgo mod_yypgo #define yyact mod_yyact #define yyexca mod_yyexca #define yyerrflag mod_yyerrflag #define yynerrs mod_yynerrs #define yyps mod_yyps #define yypv mod_yypv #define yys mod_yys #define yy_yys mod_yyyys #define yystate mod_yystate #define yytmp mod_yytmp #define yyv mod_yyv #define yy_yyv mod_yyyyv #define yyval mod_yyval #define yylloc mod_yylloc #define yyreds mod_yyreds #define yytoks mod_yytoks #define yylhs mod_yyyylhs #define yylen mod_yyyylen #define yydefred mod_yyyydefred #define yydgoto mod_yyyydgoto #define yysindex mod_yyyysindex #define yyrindex mod_yyyyrindex #define yygindex mod_yyyygindex #define yytable mod_yyyytable #define yycheck mod_yyyycheck #define yyname mod_yyyyname #define yyrule mod_yyyyrule Ifs_Table_t *mod_ifs_table; extern char *mod_yytext; extern FILE* mod_yyout; #include #include int mod_num_errors; #define BUFFER_SIZE 3000 static char buffer [BUFFER_SIZE]; static int buf_len; typedef enum {CONN, PARAM, STATIC_VAR} Id_Kind_t; /*--------------------------------------------------------------------------*/ static char *subscript (Sub_Id_t sub_id) { if (sub_id.has_subscript) { return sub_id.subscript; } else { return "0"; } } /*--------------------------------------------------------------------------*/ static int local_strcmpi(char *s, char *t) /* string compare - case insensitive */ { for (; *s && t && tolower_c(*s) == tolower_c(*t); s++, t++) ; if (*s && !*t) { return 1; } if (!*s && *t) { return -1; } if (! (*s || *t)) { return 0; } return tolower((unsigned char) *s) - tolower((unsigned char) *t); } /*---------------------------------------------------------------------------*/ static void put_type (FILE *fp, Data_Type_t type) { char ch = ' '; switch (type) { case INTEGER: ch = 'i'; break; case REAL: ch = 'r'; break; case COMPLEX: ch = 'c'; break; case BOOLEAN: ch = 'b'; break; case STRING: ch = 's'; break; case POINTER: ch = 'p'; break; } fprintf (fp, ".%cvalue", ch); } /*---------------------------------------------------------------------------*/ static void put_conn_type (FILE *fp, Port_Type_t type) { char ch; switch (type) { case USER_DEFINED: ch = 'p'; break; case DIGITAL: ch = 'p'; break; default: ch = 'r'; break; } fprintf (fp, ".%cvalue", ch); } /*---------------------------------------------------------------------------*/ static void check_dir (int conn_number, Dir_t dir, char *context) { Dir_t conn_dir; if (conn_number >= 0) { /* * If negative, this is an invalid port ID and we've already issued * an error. */ conn_dir = mod_ifs_table->conn[conn_number].direction; if ((conn_dir != dir) && (conn_dir != INOUT)) { char error_str[200]; sprintf (error_str, "Direction of port `%s' in %s() is not %s or INOUT", mod_ifs_table->conn[conn_number].name, context, (dir == IN) ? "IN" : "OUT"); yyerror (error_str); mod_num_errors++; } } } /*---------------------------------------------------------------------------*/ static void check_subscript (Boolean_t formal, Boolean_t actual, Boolean_t missing_actual_ok, char *context, char *id) { char error_str[200]; if ((formal && !actual) && !missing_actual_ok) { sprintf (error_str, "%s `%s' is an array - subscript required", context, id); yyerror (error_str); mod_num_errors++; return; } else if (!formal && actual) { sprintf (error_str, "%s `%s' is not an array - subscript prohibited", context, id); yyerror (error_str); mod_num_errors++; return; } } /*---------------------------------------------------------------------------*/ static int check_id (Sub_Id_t sub_id, Id_Kind_t kind, Boolean_t do_subscript) { int i; char error_str[200]; switch (kind) { case CONN: for (i = 0; i < mod_ifs_table->num_conn; i++) { if (0 == local_strcmpi (sub_id.id, mod_ifs_table->conn[i].name)) { if (do_subscript) { check_subscript (mod_ifs_table->conn[i].is_array, sub_id.has_subscript, FALSE, "Port", sub_id.id); } return i; } } break; case PARAM: for (i = 0; i < mod_ifs_table->num_param; i++) { if (0 == local_strcmpi (sub_id.id, mod_ifs_table->param[i].name)) { if (do_subscript) { check_subscript (mod_ifs_table->param[i].is_array, sub_id.has_subscript, FALSE, "Parameter", sub_id.id); } return i; } } break; case STATIC_VAR: for (i = 0; i < mod_ifs_table->num_inst_var; i++) { if (0 == local_strcmpi (sub_id.id, mod_ifs_table->inst_var[i].name)) { if (do_subscript) { check_subscript (mod_ifs_table->inst_var[i].is_array, sub_id.has_subscript, TRUE, "Static Variable", sub_id.id); } return i; } } break; } sprintf (error_str, "No %s named '%s'", ((kind==CONN) ? "port" : ((kind==PARAM) ? "parameter" :"static variable")), sub_id.id); yyerror (error_str); mod_num_errors++; return -1; } /*---------------------------------------------------------------------------*/ static int valid_id (Sub_Id_t sub_id, Id_Kind_t kind) { return check_id (sub_id, kind, FALSE); } /*---------------------------------------------------------------------------*/ static int valid_subid (Sub_Id_t sub_id, Id_Kind_t kind) { return check_id (sub_id, kind, TRUE); } /*---------------------------------------------------------------------------*/ static void init_buffer (void) { buf_len = 0; buffer[0] = '\0'; } /*---------------------------------------------------------------------------*/ static void append (char *str) { int len = (int) strlen (str); if (len + buf_len > BUFFER_SIZE) { yyerror ("Buffer overflow - try reducing the complexity of CM-macro array subscripts"); exit (1); } (void)strcat (buffer,str); } %} %union { char *str; Sub_Id_t sub_id; } %type buffered_c_code %type subscriptable_id id %token TOK_ARGS %token TOK_INIT %token TOK_CALLBACK %token TOK_ANALYSIS %token TOK_NEW_TIMEPOINT %token TOK_TIME %token TOK_RAD_FREQ %token TOK_TEMPERATURE %token TOK_T %token TOK_PARAM %token TOK_PARAM_SIZE %token TOK_PARAM_NULL %token TOK_PORT_SIZE %token TOK_PORT_NULL %token TOK_PARTIAL %token TOK_AC_GAIN %token TOK_CHANGED %token TOK_OUTPUT_DELAY %token TOK_STATIC_VAR %token TOK_STATIC_VAR_SIZE %token TOK_STATIC_VAR_INST %token TOK_INPUT %token TOK_INPUT_STRENGTH %token TOK_INPUT_STATE %token TOK_INPUT_TYPE %token TOK_OUTPUT %token TOK_OUTPUT_CHANGED %token TOK_OUTPUT_STRENGTH %token TOK_OUTPUT_STATE %token TOK_OUTPUT_TYPE %token TOK_COMMA %token TOK_LPAREN %token TOK_RPAREN %token TOK_LBRACKET %token TOK_RBRACKET %token TOK_MISC_C %token TOK_IDENTIFIER %token TOK_LOAD %token TOK_TOTAL_LOAD %token TOK_MESSAGE %token TOK_CALL_TYPE %start mod_file %% mod_file : /* empty */ | mod_file c_code ; c_code : /* empty */ | c_code c_char | c_code macro /*| TOK_RPAREN {yyerror ("Unmatched )"); YYERROR;} | TOK_RBRACKET {yyerror ("Unmatched ]"); YYERROR;}*/ ; buffered_c_code : {init_buffer();} buffered_c_code2 {$$ = strdup (buffer);} ; buffered_c_code2 : /* empty */ | buffered_c_code2 buffered_c_char ; buffered_c_char : TOK_IDENTIFIER {append (mod_yytext);} | TOK_MISC_C {append (mod_yytext);} | TOK_COMMA {append (mod_yytext);} | TOK_LBRACKET {append("[");} buffered_c_code2 TOK_RBRACKET {append("]");} | TOK_LPAREN {append("(");} buffered_c_code2 TOK_RPAREN {append(")");} ; c_char : TOK_IDENTIFIER {fputs (mod_yytext, mod_yyout);} | TOK_MISC_C {fputs (mod_yytext, mod_yyout);} | TOK_COMMA {fputs (mod_yytext, mod_yyout);} | TOK_LBRACKET {putc ('[', mod_yyout);} c_code TOK_RBRACKET {putc (']', mod_yyout);} | TOK_LPAREN {putc ('(', mod_yyout);} c_code TOK_RPAREN {putc (')', mod_yyout);} ; macro : TOK_INIT {fprintf (mod_yyout, "mif_private->circuit.init");} | TOK_CALLBACK {fprintf (mod_yyout, "*(mif_private->callback)");} | TOK_ARGS {fprintf (mod_yyout, "Mif_Private_t *mif_private");} | TOK_ANALYSIS {fprintf (mod_yyout, "mif_private->circuit.anal_type");} | TOK_NEW_TIMEPOINT {fprintf (mod_yyout, "mif_private->circuit.anal_init");} | TOK_CALL_TYPE {fprintf (mod_yyout, "mif_private->circuit.call_type");} | TOK_TIME {fprintf (mod_yyout, "mif_private->circuit.time");} | TOK_RAD_FREQ {fprintf (mod_yyout, "mif_private->circuit.frequency");} | TOK_TEMPERATURE {fprintf (mod_yyout, "mif_private->circuit.temperature");} | TOK_T TOK_LPAREN buffered_c_code TOK_RPAREN {fprintf (mod_yyout, "mif_private->circuit.t[%s]", $3);} | TOK_PARAM TOK_LPAREN subscriptable_id TOK_RPAREN {int i = valid_subid ($3, PARAM); fprintf (mod_yyout, "mif_private->param[%d]->element[%s]", i, subscript ($3)); put_type (mod_yyout, mod_ifs_table->param[i].type); } | TOK_PARAM_SIZE TOK_LPAREN id TOK_RPAREN {int i = valid_id ($3, PARAM); fprintf (mod_yyout, "mif_private->param[%d]->size", i);} | TOK_PARAM_NULL TOK_LPAREN id TOK_RPAREN {int i = valid_id ($3, PARAM); fprintf (mod_yyout, "mif_private->param[%d]->is_null", i);} | TOK_PORT_SIZE TOK_LPAREN id TOK_RPAREN {int i = valid_id ($3, CONN); fprintf (mod_yyout, "mif_private->conn[%d]->size", i);} | TOK_PORT_NULL TOK_LPAREN id TOK_RPAREN {int i = valid_id ($3, CONN); fprintf (mod_yyout, "mif_private->conn[%d]->is_null", i);} | TOK_PARTIAL TOK_LPAREN subscriptable_id TOK_COMMA subscriptable_id TOK_RPAREN {int i = valid_subid ($3, CONN); int j = valid_subid ($5, CONN); check_dir (i, OUT, "PARTIAL"); check_dir (j, IN, "PARTIAL"); fprintf (mod_yyout, "mif_private->conn[%d]->port[%s]->partial[%d].port[%s]", i, subscript($3), j, subscript($5));} | TOK_AC_GAIN TOK_LPAREN subscriptable_id TOK_COMMA subscriptable_id TOK_RPAREN {int i = valid_subid ($3, CONN); int j = valid_subid ($5, CONN); check_dir (i, OUT, "AC_GAIN"); check_dir (j, IN, "AC_GAIN"); fprintf (mod_yyout, "mif_private->conn[%d]->port[%s]->ac_gain[%d].port[%s]", i, subscript($3), j, subscript($5));} | TOK_STATIC_VAR TOK_LPAREN subscriptable_id TOK_RPAREN {int i = valid_subid ($3, STATIC_VAR); fprintf (mod_yyout, "mif_private->inst_var[%d]->element[%s]", i, subscript($3)); if (mod_ifs_table->inst_var[i].is_array && !($3.has_subscript)) { /* null - eg. for malloc lvalue */ } else { put_type (mod_yyout, mod_ifs_table->inst_var[i].type); } } | TOK_STATIC_VAR_SIZE TOK_LPAREN id TOK_RPAREN {int i = valid_subid ($3, STATIC_VAR); fprintf (mod_yyout, "mif_private->inst_var[%d]->size", i);} | TOK_STATIC_VAR_INST TOK_LPAREN id TOK_RPAREN {int i = valid_subid ($3, STATIC_VAR); fprintf (mod_yyout, "mif_private->inst_var[%d]", i);} | TOK_OUTPUT_DELAY TOK_LPAREN subscriptable_id TOK_RPAREN {int i = valid_subid ($3, CONN); check_dir (i, OUT, "OUTPUT_DELAY"); fprintf (mod_yyout, "mif_private->conn[%d]->port[%s]->delay", i, subscript($3));} | TOK_CHANGED TOK_LPAREN subscriptable_id TOK_RPAREN {int i = valid_subid ($3, CONN); check_dir (i, OUT, "CHANGED"); fprintf (mod_yyout, "mif_private->conn[%d]->port[%s]->changed", i, subscript($3));} | TOK_INPUT TOK_LPAREN subscriptable_id TOK_RPAREN {int i = valid_subid ($3, CONN); check_dir (i, IN, "INPUT"); fprintf (mod_yyout, "mif_private->conn[%d]->port[%s]->input", i, subscript($3)); put_conn_type (mod_yyout, mod_ifs_table->conn[i].allowed_port_type[0]);} | TOK_INPUT_TYPE TOK_LPAREN subscriptable_id TOK_RPAREN {int i = valid_subid ($3, CONN); check_dir (i, IN, "INPUT_TYPE"); fprintf (mod_yyout, "mif_private->conn[%d]->port[%s]->type_str", i, subscript($3)); } | TOK_OUTPUT_TYPE TOK_LPAREN subscriptable_id TOK_RPAREN {int i = valid_subid ($3, CONN); check_dir (i, OUT, "OUTPUT_TYPE"); fprintf (mod_yyout, "mif_private->conn[%d]->port[%s]->type_str", i, subscript($3)); } | TOK_INPUT_STRENGTH TOK_LPAREN subscriptable_id TOK_RPAREN {int i = valid_subid ($3, CONN); check_dir (i, IN, "INPUT_STRENGTH"); fprintf (mod_yyout, "((Digital_t*)(mif_private->conn[%d]->port[%s]->input", i, subscript($3)); put_conn_type (mod_yyout, mod_ifs_table->conn[i].allowed_port_type[0]); fprintf (mod_yyout, "))->strength");} | TOK_INPUT_STATE TOK_LPAREN subscriptable_id TOK_RPAREN {int i = valid_subid ($3, CONN); check_dir (i, IN, "INPUT_STATE"); fprintf (mod_yyout, "((Digital_t*)(mif_private->conn[%d]->port[%s]->input", i, subscript($3)); put_conn_type (mod_yyout, mod_ifs_table->conn[i].allowed_port_type[0]); fprintf (mod_yyout, "))->state");} | TOK_OUTPUT TOK_LPAREN subscriptable_id TOK_RPAREN {int i = valid_subid ($3, CONN); check_dir (i, OUT, "OUTPUT"); fprintf (mod_yyout, "mif_private->conn[%d]->port[%s]->output", i, subscript($3)); put_conn_type (mod_yyout, mod_ifs_table->conn[i].allowed_port_type[0]);} | TOK_OUTPUT_STRENGTH TOK_LPAREN subscriptable_id TOK_RPAREN {int i = valid_subid ($3, CONN); check_dir (i, OUT, "OUTPUT_STRENGTH"); fprintf (mod_yyout, "((Digital_t*)(mif_private->conn[%d]->port[%s]->output", i, subscript($3)); put_conn_type (mod_yyout, mod_ifs_table->conn[i].allowed_port_type[0]); fprintf (mod_yyout, "))->strength");} | TOK_OUTPUT_STATE TOK_LPAREN subscriptable_id TOK_RPAREN {int i = valid_subid ($3, CONN); check_dir (i, OUT, "OUTPUT_STATE"); fprintf (mod_yyout, "((Digital_t*)(mif_private->conn[%d]->port[%s]->output", i, subscript($3)); put_conn_type (mod_yyout, mod_ifs_table->conn[i].allowed_port_type[0]); fprintf (mod_yyout, "))->state");} | TOK_OUTPUT_CHANGED TOK_LPAREN subscriptable_id TOK_RPAREN {int i = valid_subid ($3, CONN); fprintf (mod_yyout, "mif_private->conn[%d]->port[%s]->changed", i, subscript($3));} | TOK_LOAD TOK_LPAREN subscriptable_id TOK_RPAREN {int i = valid_subid ($3, CONN); fprintf (mod_yyout, "mif_private->conn[%d]->port[%s]->load", i, subscript($3));} | TOK_TOTAL_LOAD TOK_LPAREN subscriptable_id TOK_RPAREN {int i = valid_subid ($3, CONN); fprintf (mod_yyout, "mif_private->conn[%d]->port[%s]->total_load", i, subscript($3));} | TOK_MESSAGE TOK_LPAREN subscriptable_id TOK_RPAREN {int i = valid_subid ($3, CONN); fprintf (mod_yyout, "mif_private->conn[%d]->port[%s]->msg", i, subscript($3));} ; subscriptable_id : id | id TOK_LBRACKET buffered_c_code TOK_RBRACKET {$$ = $1; $$.has_subscript = TRUE; $$.subscript = $3;} ; id : TOK_IDENTIFIER {$$.has_subscript = FALSE; $$.id = strdup (mod_yytext);} ; %% tmpk8ny_4pz/src/xspice/cmpp/main.c0000644000175000017500000000515313546075722017275 0ustar carstencarsten/*============================================================================ FILE main.c MEMBER OF process cmpp Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the top-level function for the Code Model PreProcessor (cmpp). It handles reading the command-line arguments, and then vectors to an appropriate function. INTERFACES main() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include #include #include #include "cmpp.h" #define USAGE_MSG "Usage: cmpp [-ifs] [-mod []] [-lst]" #define TOO_FEW_ARGS "ERROR - Too few arguments" #define TOO_MANY_ARGS "ERROR - Too many arguments" #define UNRECOGNIZED_ARGS "ERROR - Unrecognized argument" /* *********************************************************************** */ /* main Function main checks the validity of the command-line arguments supplied when the program is invoked and calls one of the three major functions as appropriate: preprocess_ifs_file Process Interface Specification File. preprocess_mod_file Process Model Definition File. preprocess_lst_file Process Pathname List Files. depending on the argument. */ int main( int argc, /* Number of command line arguments */ char *argv[]) /* Command line argument text */ { init_error (argv[0]); /* Process command line arguments and vector to appropriate function */ if(argc < 2) { print_error(TOO_FEW_ARGS); print_error(USAGE_MSG); exit(1); } if(strcmp(argv[1],"-ifs") == 0) { if(argc == 2) { preprocess_ifs_file(); } else { print_error(TOO_MANY_ARGS); print_error(USAGE_MSG); exit(1); } } else if(strcmp(argv[1],"-lst") == 0) { if(argc == 2) { preprocess_lst_files(); } else { print_error(TOO_MANY_ARGS); print_error(USAGE_MSG); exit(1); } } else if(strcmp(argv[1],"-mod") == 0) { if(argc == 2) { preprocess_mod_file("cfunc.mod"); } else if(argc == 3) { preprocess_mod_file(argv[2]); } else { print_error(TOO_MANY_ARGS); print_error(USAGE_MSG); exit(1); } } else { print_error(UNRECOGNIZED_ARGS); print_error(USAGE_MSG); exit(1); } exit(0); } tmpk8ny_4pz/src/xspice/cmpp/mod_yacc_y.h0000644000175000017500000000155313546075722020464 0ustar carstencarsten/*============================================================================ FILE mod_yacc.h MEMBER OF process cmpp Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Steve Tynor MODIFICATIONS SUMMARY Typedefs needed by the YYSTYPE union (%union operator) in the yacc file. These are only used in the yacc file, but must be defined here since the generated token.h file includes a definition of the union YYSTYPE. INTERFACES None. REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "cmpp.h" typedef struct { char *id; Boolean_t has_subscript; char *subscript; } Sub_Id_t; extern void mod_yyerror(char*); tmpk8ny_4pz/src/xspice/cmpp/pp_mod.c0000644000175000017500000001104513546075722017624 0ustar carstencarsten/*============================================================================ FILE pp_mod.c MEMBER OF process cmpp Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Steve Tynor MODIFICATIONS SUMMARY This file contains the top-level driver function for preprocessing the "cfunc.mod" file. First, the "ifspec.ifs" file is opened and parsed to get the data that will be needed in the .mod to .c translation (See read_ifs.c). Then the .mod file is translated. Most of the work of the translation is handled by the UNIX 'lex' and 'yacc' utilities. This translation is begun at the call to mod_yyparse() below. See also files: mod_lex.l mod_yacc.y Note that to allow lex/yacc to be used twice (once for the ifspec.ifs file, and then again for the cfunc.mod file), the functions created by lex/yacc for the latter are translated using the UNIX text editor 'sed' under the direction of the Makefile and the following 'sed scripts': mod_lex.sed mod_yacc.sed Hence the call to 'mod_yyparse()' rather than 'yyparse()' below. INTERFACES preprocess_mod_file() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include #include #include #ifndef _MSC_VER #include #endif #include "mod_yacc_y.h" extern int mod_yyparse(void); extern void mod_yyrestart (FILE*); extern FILE *mod_yyin; extern FILE *mod_yyout; extern int mod_yylineno; extern char *mod_yytext; extern int mod_num_errors; extern Ifs_Table_t *mod_ifs_table; extern const char *current_filename; extern char *prog_name; /*---------------------------------------------------------------------------*/ static char *change_extension (char *filename, char *ext) { char *p = strrchr(filename, '.'); size_t prefix_len = p ? (size_t) (p-filename+1) : strlen(filename); char *new_filename = malloc(prefix_len + strlen(ext) + 1); strncpy(new_filename, filename, prefix_len); strcpy(new_filename+prefix_len, ext); return new_filename; } /*---------------------------------------------------------------------------*/ /* preprocess_mod_file Function preprocess_mod_file is the top-level driver function for preprocessing a code model file (cfunc.mod). This function calls read_ifs_file() requesting it to read and parse the Interface Specification file (ifspec.ifs) and place the information contained in it into an internal data structure. It then calls mod_yyparse() to read the cfunc.mod file and translate it according to the Interface Specification information. Function mod_yyparse() is automatically generated by UNIX lex/yacc utilities. */ void preprocess_mod_file ( char *filename) /* The file to read */ { Ifs_Table_t ifs_table; /* info read from ifspec.ifs file */ Status_t status; /* Return status */ const char *output_filename; /* * Read the entire ifspec.ifs file and load the data into ifs_table */ status = read_ifs_file (IFSPEC_FILENAME, GET_IFS_TABLE, &ifs_table); if (status != OK) { exit(1); } current_filename = filename; mod_yyin = fopen_cmpp (¤t_filename, "r"); if (mod_yyin == NULL) { print_error("ERROR - Could not open input .mod file: %s", current_filename); exit(1); } output_filename = change_extension (filename, "c"); mod_yyout = fopen_cmpp (&output_filename, "w"); if (mod_yyout == NULL) { print_error("ERROR - Could not open output .c file: %s", output_filename); exit(1); } mod_ifs_table = &ifs_table; mod_num_errors = 0; fprintf (mod_yyout, "#line 1 \"%s\"\n", current_filename); fprintf (mod_yyout, "#include \"ngspice/cm.h\"\n"); fprintf (mod_yyout, "extern void %s(Mif_Private_t *);\n", ifs_table.name.c_fcn_name); fprintf (mod_yyout, "#line 1 \"%s\"\n", current_filename); mod_yylineno = 1; if (mod_yyparse() || (mod_num_errors > 0)) { print_error("Error parsing .mod file: \"%s\"", current_filename); unlink (output_filename); exit (1); } fclose (mod_yyout); mod_yyrestart(NULL); } /*---------------------------------------------------------------------------*/ void mod_yyerror (char *str) { fprintf (stderr, "%s: Error: \"%s\": line %d (near \'%s\'):\n\t%s.\n", prog_name, current_filename, mod_yylineno, mod_yytext, str); } tmpk8ny_4pz/src/xspice/cmpp/util.c0000644000175000017500000000376513546075722017335 0ustar carstencarsten/*============================================================================ FILE util.c MEMBER OF process cmpp Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn and Steve Tynor MODIFICATIONS SUMMARY This file contains miscellaneous utility functions used in cmpp. INTERFACES init_error() print_error() str_to_lower() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "cmpp.h" #include #include #include #include #include /* *********************************************************************** */ char *prog_name; /* Initialize print_error() with the name of the program */ void init_error (char *program_name) { prog_name = program_name; } /* Print an error message to stderr */ void print_error(const char *fmt, ...) { va_list ap; va_start(ap, fmt); fprintf(stderr, "%s: ", prog_name); vfprintf(stderr, fmt, ap); fprintf(stderr, "\n"); va_end(ap); } /* Convert a string to all lower case */ void str_to_lower(char *s) { int i; char c; for(i = 0; (c = s[i]) != '\0'; i++) if(isalpha_c(c)) if(isupper_c(c)) s[i] = tolower_c(c); } FILE *fopen_cmpp(const char **path_p, const char *mode) { const char *path = *path_p; char buf[MAX_PATH_LEN+1]; if(path[0] != '/') { const char *e = getenv((*mode == 'w') ? "CMPP_ODIR" : "CMPP_IDIR"); if(e) { if(strlen(e) + 1 + strlen(path) < sizeof(buf)) { strcpy(buf, e); strcat(buf, "/"); strcat(buf, path); path = buf; } else { path = NULL; } } } *path_p = strdup(path); return fopen(path, mode); } tmpk8ny_4pz/src/xspice/cmpp/writ_ifs.c0000644000175000017500000010427113546075722020200 0ustar carstencarsten/*============================================================================ FILE writ_ifs.c MEMBER OF process cmpp Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains functions used to write out the file "ifspec.c" based on information read from "ifspec.ifs", which is now held in structure 'ifs_table' passed to write_ifs_c_file(). INTERFACES write_ifs_c_file() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include #include #include #include "cmpp.h" /* Local function prototypes */ static void write_comment(FILE *fp, Ifs_Table_t *ifs_table); static void write_includes(FILE *fp); static void write_mPTable(FILE *fp, Ifs_Table_t *ifs_table); static void write_pTable(FILE *fp, Ifs_Table_t *ifs_table); static void write_conn_info(FILE *fp, Ifs_Table_t *ifs_table); static void write_param_info(FILE *fp, Ifs_Table_t *ifs_table); static void write_inst_var_info(FILE *fp, Ifs_Table_t *ifs_table); static void write_SPICEdev(FILE *fp, Ifs_Table_t *ifs_table); static char *data_type_to_str(Data_Type_t type); static char *port_type_to_str(Port_Type_t port); static char *dir_to_str(Dir_t dir); static char *value_to_str(Data_Type_t type, Value_t value); static char *no_value_to_str(void); static char *boolean_to_str(Boolean_t value); static char *integer_to_str(int value); static char *gen_port_type_str(Port_Type_t port); /* *********************************************************************** */ /* write_ifs_c_file Function write_ifs_c_file is a top-level driver function for creating a C file (ifspec.c) that defines the model Interface Specification in a form usable by the simulator. The ifspec.c output file is opened for writing, and then each of the following functions is called in order to write the necessary statements and data structures into the file: write_comment write_includes write_mPTable write_conn_info write_param_info write_inst_var_info write_SPICEdev The output file is then closed. */ Status_t write_ifs_c_file( const char *filename, /* File to write to */ Ifs_Table_t *ifs_table) /* Table of Interface Specification data */ { FILE *fp; /* File pointer */ int int_status; /* returned status from fclose */ /* Open the ifspec.c file for write access */ fp = fopen_cmpp(&filename, "w"); if(fp == NULL) { print_error("ERROR - Can't create file: %s", filename); return(ERROR); } /* Write out a comment section at the top of the file */ write_comment(fp, ifs_table); /* Put in the # includes */ write_includes(fp); /* Write the SPICE3 required XXXmPTable structure */ write_mPTable(fp, ifs_table); /* Write the SPICE3 required XXXpTable structure */ write_pTable(fp, ifs_table); /* Write out the connector table required for the code model element parser */ write_conn_info(fp, ifs_table); /* Write out the parameter table required for the code model element parser */ write_param_info(fp, ifs_table); /* Write out the instance variable table required for the code model element parser */ write_inst_var_info(fp, ifs_table); /* Write out the externally visible structure for this model */ write_SPICEdev(fp, ifs_table); /* Close the ifspec.c file and return */ int_status = fclose(fp); if(int_status == 0) return(OK); else return(ERROR); } /* *********************************************************************** */ /* write_comment Function write_comment places a comment at the top of the ifspec.c file warning the user that this file is automatically generated and should not be edited. */ static void write_comment( FILE *fp, /* File to write to */ Ifs_Table_t *ifs_table) /* Table of Interface Specification data */ { fprintf(fp, "\n"); fprintf(fp, "/*\n"); fprintf(fp, " * Structures for model: %s\n", ifs_table->name.model_name); fprintf(fp, " *\n"); fprintf(fp, " * Automatically generated by cmpp preprocessor\n"); fprintf(fp, " *\n"); fprintf(fp, " * !!! DO NOT EDIT !!!\n"); fprintf(fp, " *\n"); fprintf(fp, " */\n"); fprintf(fp, "\n"); } /* *********************************************************************** */ /* write_includes Function write_includes writes the C header files required in ifspec.c. */ static void write_includes( FILE *fp) /* File to write to */ { fprintf(fp, "\n"); fprintf(fp, "#include \"ngspice/ngspice.h\"\n"); /* fprintf(fp, "#include \"ngspice/prefix.h\"\n");*/ fprintf(fp, "#include \n"); fprintf(fp, "#include \"ngspice/devdefs.h\"\n"); fprintf(fp, "#include \"ngspice/ifsim.h\"\n"); fprintf(fp, "#include \"ngspice/mifdefs.h\"\n"); fprintf(fp, "#include \"ngspice/mifproto.h\"\n"); fprintf(fp, "#include \"ngspice/mifparse.h\"\n"); /* fprintf(fp, "#include \"ngspice/suffix.h\"\n");*/ fprintf(fp, "\n"); } /* *********************************************************************** */ /* write_pTable Function write_pTable writes the instance parameter information using SPICE's IFparm structure type. This table defines the parameters as output only variables using SPICE's ``OP'' macro. These instance parameters are derived from the Interface Specification file's STATIC_VAR table and define the parameters that can be queried using the SPICE 3C1 .save feature. */ static void write_pTable( FILE *fp, /* File to write to */ Ifs_Table_t *ifs_table) /* Table of Interface Specification data */ { int i; char str[80]; Boolean_t is_array; Data_Type_t type; /* Only write the pTable if there is something to put in it. */ /* Otherwise, we will put NULL in the SPICEdev structure in its slot */ if(ifs_table->num_inst_var == 0) return; /* Write the structure beginning */ fprintf(fp, "\n"); fprintf(fp, "static IFparm MIFpTable[] = {\n"); /* Write out an entry for each instance variable in the table */ /* Use the index of the element in the instance variable info array */ /* ADDED TO the number of parameters as the SPICE3 integer tag. */ for(i = 0; i < ifs_table->num_inst_var; i++) { /* Use the SPICE3 OP macro since instance vars are output-only */ fprintf(fp, " OP("); /* Put in the name of the parameter and the integer tag */ fprintf(fp, "\"%s\", ", ifs_table->inst_var[i].name); fprintf(fp, "%d, ", i + ifs_table->num_param); /* Format SPICE3 type according to parameter type field */ type = ifs_table->inst_var[i].type; is_array = ifs_table->inst_var[i].is_array; strcpy(str,""); if(is_array == TRUE) { strcat(str,"("); } if(type == BOOLEAN) { strcat(str,"IF_FLAG"); /* There is no BOOLEAN in SPICE3 */ } else if(type == INTEGER) { strcat(str,"IF_INTEGER"); } else if(type == REAL) { strcat(str,"IF_REAL"); } else if(type == COMPLEX) { strcat(str,"IF_COMPLEX"); } else if(type == STRING) { strcat(str,"IF_STRING"); } else if(type == POINTER) { strcat(str,"IF_STRING"); } else { print_error("INTERNAL ERROR - write_pTable() - Impossible data type."); } if(is_array == TRUE) { strcat(str,"|IF_VECTOR)"); } fprintf(fp, "%s, ", str); /* Put in the description string and finish this line off */ fprintf(fp, "\"%s\"", ifs_table->inst_var[i].description); fprintf(fp, "),\n"); } /* Finish off the structure */ fprintf(fp, "};\n"); fprintf(fp, "\n"); } /* *********************************************************************** */ /* write_mPTable Function write_mPTable writes the model parameter information using SPICE's IFparm structure type. This table defines the parameters to be input/output variables using SPICE's ``IOP'' macro so that these variables can be set or queried from SPICE. These model parameters are derived from the Interface Specification's PARAMETER table. */ static void write_mPTable( FILE *fp, /* File to write to */ Ifs_Table_t *ifs_table) /* Table of Interface Specification data */ { int i; char str[80]; Boolean_t is_array; Data_Type_t type; /* Only write the mPTable if there is something to put in it. */ /* Otherwise, we will put NULL in the SPICEdev structure in its slot */ if(ifs_table->num_param == 0) return; /* Write the structure beginning */ fprintf(fp, "\n"); fprintf(fp, "static IFparm MIFmPTable[] = {\n"); /* Write out an entry for each parameter in the table */ /* Use the index of the element in the parameter info array */ /* as the SPICE3 integer tag. */ for(i = 0; i < ifs_table->num_param; i++) { /* Use the SPICE3 IOP macro since model parameters are input/output */ fprintf(fp, " IOP("); /* Put in the name of the parameter and the integer tag */ fprintf(fp, "\"%s\", ", ifs_table->param[i].name); fprintf(fp, "%d, ", i); /* Format SPICE3 type according to parameter type field */ type = ifs_table->param[i].type; is_array = ifs_table->param[i].is_array; strcpy(str,""); if(is_array == TRUE) { strcat(str,"("); } if(type == BOOLEAN) { strcat(str,"IF_FLAG"); /* There is no BOOLEAN in SPICE3 */ } else if(type == INTEGER) { strcat(str,"IF_INTEGER"); } else if(type == REAL) { strcat(str,"IF_REAL"); } else if(type == COMPLEX) { strcat(str,"IF_COMPLEX"); } else if(type == STRING) { strcat(str,"IF_STRING"); } else { print_error("INTERNAL ERROR - write_mPTable() - Impossible data type."); } if(is_array == TRUE) { strcat(str,"|IF_VECTOR)"); } fprintf(fp, "%s, ", str); /* Put in the description string and finish this line off */ fprintf(fp, "\"%s\"", ifs_table->param[i].description); fprintf(fp, "),\n"); } /* Finish off the structure */ fprintf(fp, "};\n"); fprintf(fp, "\n"); } /* *********************************************************************** */ /* write_conn_info Function write_conn_info writes information used by the Simulator's new MIF package to interpret and error check a model's connection list in a SPICE deck. This information is derived from the Interface Specification file's PORT table. */ static void write_conn_info( FILE *fp, /* File to write to */ Ifs_Table_t *ifs_table) /* Table of Interface Specification data */ { int i; int j; char *str; /* Only write the connTable if there is something to put in it. */ /* Otherwise, we will put NULL in the SPICEdev structure in its slot */ if(ifs_table->num_conn == 0) /* An unlikely condition for sure ... */ return; /* First, we must define arrays of port types */ /* Note that there should be always at least one allowed port type */ /* so we don't have to worry about arrays with no elements */ for(i = 0; i < ifs_table->num_conn; i++) { fprintf(fp, "\n"); fprintf(fp, "static Mif_Port_Type_t MIFportEnum%d[] = {\n", i); if(ifs_table->conn[i].num_allowed_types < 1) print_error("ERROR - write_conn_info() - Number of allowed types cannot be zero"); for(j = 0; j < ifs_table->conn[i].num_allowed_types; j++) { str = port_type_to_str(ifs_table->conn[i].allowed_port_type[j]); fprintf(fp, "\t%s,\n", str); } /* for number of allowed types */ fprintf(fp, "};\n"); fprintf(fp, "\n"); fprintf(fp, "\n"); fprintf(fp, "static char *MIFportStr%d[] = {\n", i); for(j = 0; j < ifs_table->conn[i].num_allowed_types; j++) { if(ifs_table->conn[i].allowed_port_type[j] == USER_DEFINED) fprintf(fp, "\t\"%s\",\n", ifs_table->conn[i].allowed_type[j]); else { str = gen_port_type_str(ifs_table->conn[i].allowed_port_type[j]); fprintf(fp, "\t\"%s\",\n", str); } } /* for number of allowed types */ fprintf(fp, "};\n"); fprintf(fp, "\n"); } /* for number of connections */ /* Now write the structure */ fprintf(fp, "\n"); fprintf(fp, "static Mif_Conn_Info_t MIFconnTable[] = {\n"); /* Write out an entry for each parameter in the table */ for(i = 0; i < ifs_table->num_conn; i++) { fprintf(fp, " {\n"); fprintf(fp, " \"%s\",\n",ifs_table->conn[i].name); fprintf(fp, " \"%s\",\n",ifs_table->conn[i].description); str = dir_to_str(ifs_table->conn[i].direction); fprintf(fp, " %s,\n", str); str = port_type_to_str(ifs_table->conn[i].default_port_type); fprintf(fp, " %s,\n", str); fprintf(fp, " \"%s\",\n", (ifs_table->conn[i].default_port_type == USER_DEFINED) ? ifs_table->conn[i].default_type : gen_port_type_str (ifs_table->conn[i].default_port_type)); fprintf(fp," %d,\n",ifs_table->conn[i].num_allowed_types); fprintf(fp, " MIFportEnum%d,\n", i); fprintf(fp, " MIFportStr%d,\n", i); str = boolean_to_str(ifs_table->conn[i].is_array); fprintf(fp, " %s,\n", str); if(ifs_table->conn[i].is_array == FALSE) { str = boolean_to_str(FALSE); /* has_lower_bound */ fprintf(fp, " %s,\n", str); str = integer_to_str(0); /* lower_bound */ fprintf(fp, " %s,\n", str); str = boolean_to_str(FALSE); /* has_upper_bound */ fprintf(fp, " %s,\n", str); str = integer_to_str(0); /* upper_bound */ fprintf(fp, " %s,\n", str); } else { /* is_array == TRUE */ str = boolean_to_str(ifs_table->conn[i].has_lower_bound); fprintf(fp, " %s,\n", str); if(ifs_table->conn[i].has_lower_bound == TRUE) str = integer_to_str(ifs_table->conn[i].lower_bound); else str = integer_to_str(0); fprintf(fp, " %s,\n", str); str = boolean_to_str(ifs_table->conn[i].has_upper_bound); fprintf(fp, " %s,\n", str); if(ifs_table->conn[i].has_upper_bound == TRUE) str = integer_to_str(ifs_table->conn[i].upper_bound); else str = integer_to_str(0); fprintf(fp, " %s,\n", str); } /* if is_array */ str = boolean_to_str(ifs_table->conn[i].null_allowed); fprintf(fp, " %s,\n", str); fprintf(fp, " },\n"); } /* for number of parameters */ /* Finish off the structure */ fprintf(fp, "};\n"); fprintf(fp, "\n"); } /* *********************************************************************** */ /* write_param_info Function write_param_info writes information used by the Simulator's new MIF package to interpret and error check a model's parameter list in an XSPICE deck. This information is derived from the Interface Specification file's PARAMETER table. It is essentially a superset of the IFparm information written by write_mPTable(). The IFparm information written by write_mPTable() is required to work with SPICE's device set and query functions. The information written by write_param_info is more extensive and is required to parse and error check the XSPICE input deck. */ static void write_param_info( FILE *fp, /* File to write to */ Ifs_Table_t *ifs_table) /* Table of Interface Specification data */ { int i; char *str; /* Only write the paramTable if there is something to put in it. */ /* Otherwise, we will put NULL in the SPICEdev structure in its slot */ if(ifs_table->num_param == 0) return; /* Write the structure beginning */ fprintf(fp, "\n"); fprintf(fp, "static Mif_Param_Info_t MIFparamTable[] = {\n"); /* Write out an entry for each parameter in the table */ for(i = 0; i < ifs_table->num_param; i++) { fprintf(fp, " {\n"); fprintf(fp, " \"%s\",\n",ifs_table->param[i].name); fprintf(fp, " \"%s\",\n",ifs_table->param[i].description); str = data_type_to_str(ifs_table->param[i].type); fprintf(fp, " %s,\n", str); str = boolean_to_str(ifs_table->param[i].has_default); fprintf(fp, " %s,\n", str); if(ifs_table->param[i].has_default == TRUE) str = value_to_str(ifs_table->param[i].type, ifs_table->param[i].default_value); else str = no_value_to_str(); fprintf(fp, " %s,\n", str); str = boolean_to_str(ifs_table->param[i].has_lower_limit); fprintf(fp, " %s,\n", str); if(ifs_table->param[i].has_lower_limit == TRUE) str = value_to_str(ifs_table->param[i].type, ifs_table->param[i].lower_limit); else str = no_value_to_str(); fprintf(fp, " %s,\n", str); str = boolean_to_str(ifs_table->param[i].has_upper_limit); fprintf(fp, " %s,\n", str); if(ifs_table->param[i].has_upper_limit == TRUE) str = value_to_str(ifs_table->param[i].type, ifs_table->param[i].upper_limit); else str = no_value_to_str(); fprintf(fp, " %s,\n", str); str = boolean_to_str(ifs_table->param[i].is_array); fprintf(fp, " %s,\n", str); if(ifs_table->param[i].is_array == FALSE) { str = boolean_to_str(FALSE); /* has_conn_ref */ fprintf(fp, " %s,\n", str); str = integer_to_str(0); /* conn_ref */ fprintf(fp, " %s,\n", str); str = boolean_to_str(FALSE); /* has_lower_bound */ fprintf(fp, " %s,\n", str); str = integer_to_str(0); /* lower_bound */ fprintf(fp, " %s,\n", str); str = boolean_to_str(FALSE); /* has_upper_bound */ fprintf(fp, " %s,\n", str); str = integer_to_str(0); /* upper_bound */ fprintf(fp, " %s,\n", str); } else { /* is_array == TRUE */ str = boolean_to_str(ifs_table->param[i].has_conn_ref); fprintf(fp, " %s,\n", str); if(ifs_table->param[i].has_conn_ref == TRUE) { str = integer_to_str(ifs_table->param[i].conn_ref); fprintf(fp, " %s,\n", str); str = boolean_to_str(FALSE); /* has_lower_bound */ fprintf(fp, " %s,\n", str); str = integer_to_str(0); /* lower_bound */ fprintf(fp, " %s,\n", str); str = boolean_to_str(FALSE); /* has_upper_bound */ fprintf(fp, " %s,\n", str); str = integer_to_str(0); /* upper_bound */ fprintf(fp, " %s,\n", str); } else { /* has_conn_ref == FALSE */ str = integer_to_str(0); /* conn_ref */ fprintf(fp, " %s,\n", str); str = boolean_to_str(ifs_table->param[i].has_lower_bound); fprintf(fp, " %s,\n", str); if(ifs_table->param[i].has_lower_bound == TRUE) str = integer_to_str(ifs_table->param[i].lower_bound); else str = integer_to_str(0); fprintf(fp, " %s,\n", str); str = boolean_to_str(ifs_table->param[i].has_upper_bound); fprintf(fp, " %s,\n", str); if(ifs_table->param[i].has_upper_bound == TRUE) str = integer_to_str(ifs_table->param[i].upper_bound); else str = integer_to_str(0); fprintf(fp, " %s,\n", str); } /* if has_conn_ref */ } /* if is_array */ str = boolean_to_str(ifs_table->param[i].null_allowed); fprintf(fp, " %s,\n", str); fprintf(fp, " },\n"); } /* for number of parameters */ /* Finish off the structure */ fprintf(fp, "};\n"); fprintf(fp, "\n"); } /* *********************************************************************** */ /* write_inst_var_info Function write_inst_var_info writes information used by the Simulator's new MIF package to allocate space for and to output (using SPICE's .save feature) variables defined in the Interface Specification file's STATIC_VAR table. It is essentially a superset of the IFparm information written by write_mPTable(). The IFparm information written by write_pTable() is required to work with SPICE's device query functions. The information written by write_inst_var_info is more extensive. */ static void write_inst_var_info( FILE *fp, /* File to write to */ Ifs_Table_t *ifs_table) /* Table of Interface Specification data */ { int i; char *str; /* Only write the inst_varTable if there is something to put in it. */ /* Otherwise, we will put NULL in the SPICEdev structure in its slot */ if(ifs_table->num_inst_var == 0) return; /* Write the structure beginning */ fprintf(fp, "\n"); fprintf(fp, "static Mif_Inst_Var_Info_t MIFinst_varTable[] = {\n"); /* Write out an entry for each parameter in the table */ for(i = 0; i < ifs_table->num_inst_var; i++) { fprintf(fp, " {\n"); fprintf(fp, " \"%s\",\n",ifs_table->inst_var[i].name); fprintf(fp, " \"%s\",\n",ifs_table->inst_var[i].description); str = data_type_to_str(ifs_table->inst_var[i].type); fprintf(fp, " %s,\n", str); str = boolean_to_str(ifs_table->inst_var[i].is_array); fprintf(fp, " %s,\n", str); fprintf(fp, " },\n"); } /* for number of parameters */ /* Finish off the structure */ fprintf(fp, "};\n"); fprintf(fp, "\n"); } /* *********************************************************************** */ /* write_SPICEdev Function write_SPICEdev writes the global XXX_info structure used by SPICE to define a model. Here ``XXX'' is the name of the code model. This structure contains the name of the model, a pointer to the C function that implements the model, and pointers to all of the above data structures. */ static void write_SPICEdev( FILE *fp, /* File to write to */ Ifs_Table_t *ifs_table) /* Table of Interface Specification data */ { /* Extern the code model function name */ fprintf(fp, "\n"); fprintf(fp, "extern void %s(Mif_Private_t *);\n", ifs_table->name.c_fcn_name); /* SPICE now needs these static integers */ fprintf(fp, "\n"); fprintf(fp, "static int val_terms = 0;\n"); fprintf(fp, "static int val_numNames = 0;\n"); fprintf(fp, "static int val_numInstanceParms = %d;\n",ifs_table->num_inst_var); fprintf(fp, "static int val_numModelParms = %d;\n",ifs_table->num_param); fprintf(fp, "static int val_sizeofMIFinstance = sizeof(MIFinstance);\n"); fprintf(fp, "static int val_sizeofMIFmodel = sizeof(MIFmodel);\n"); /* Write out the structure beginning */ /* Use the c function external identifier appended with _info as the */ /* external identifier for the structure. */ fprintf(fp, "\n"); fprintf(fp, "SPICEdev %s_info = {\n", ifs_table->name.c_fcn_name); /* Write the IFdevice structure */ fprintf(fp, " .DEVpublic = {\n"); fprintf(fp, " .name = \"%s\",\n", ifs_table->name.model_name); fprintf(fp, " .description = \"%s\",\n", ifs_table->name.description); fprintf(fp, " .terms = &val_terms,\n"); fprintf(fp, " .numNames = &val_numNames,\n"); fprintf(fp, " .termNames = NULL,\n"); fprintf(fp, " .numInstanceParms = &val_numInstanceParms,\n"); if(ifs_table->num_inst_var > 0) fprintf(fp, " .instanceParms = MIFpTable,\n"); else fprintf(fp, " .instanceParms = NULL,\n"); fprintf(fp, " .numModelParms = &val_numModelParms,\n"); if(ifs_table->num_param > 0) fprintf(fp, " .modelParms = MIFmPTable,\n"); else fprintf(fp, " .modelParms = NULL,\n"); fprintf(fp, " .flags = 0,\n\n"); fprintf(fp, " .cm_func = %s,\n", ifs_table->name.c_fcn_name); fprintf(fp, " .num_conn = %d,\n", ifs_table->num_conn); if(ifs_table->num_conn > 0) fprintf(fp, " .conn = MIFconnTable,\n"); else fprintf(fp, " .conn = NULL,\n"); fprintf(fp, " .num_param = %d,\n", ifs_table->num_param); if(ifs_table->num_param > 0) fprintf(fp, " .param = MIFparamTable,\n"); else fprintf(fp, " .param = NULL,\n"); fprintf(fp, " .num_inst_var = %d,\n", ifs_table->num_inst_var); if(ifs_table->num_inst_var > 0) fprintf(fp, " .inst_var = MIFinst_varTable,\n"); else fprintf(fp, " .inst_var = NULL,\n"); fprintf(fp, " },\n\n"); /* Write the names of the generic code model functions */ fprintf(fp, " .DEVparam = NULL,\n"); fprintf(fp, " .DEVmodParam = MIFmParam,\n"); fprintf(fp, " .DEVload = MIFload,\n"); fprintf(fp, " .DEVsetup = MIFsetup,\n"); fprintf(fp, " .DEVunsetup = MIFunsetup,\n"); fprintf(fp, " .DEVpzSetup = NULL,\n"); fprintf(fp, " .DEVtemperature = NULL,\n"); fprintf(fp, " .DEVtrunc = MIFtrunc,\n"); fprintf(fp, " .DEVfindBranch = NULL,\n"); fprintf(fp, " .DEVacLoad = MIFload,\n"); fprintf(fp, " .DEVaccept = NULL,\n"); fprintf(fp, " .DEVdestroy = MIFdestroy,\n"); fprintf(fp, " .DEVmodDelete = MIFmDelete,\n"); fprintf(fp, " .DEVdelete = MIFdelete,\n"); fprintf(fp, " .DEVsetic = NULL,\n"); fprintf(fp, " .DEVask = MIFask,\n"); fprintf(fp, " .DEVmodAsk = MIFmAsk,\n"); fprintf(fp, " .DEVpzLoad = NULL,\n"); fprintf(fp, " .DEVconvTest = MIFconvTest,\n"); fprintf(fp, " .DEVsenSetup = NULL,\n"); fprintf(fp, " .DEVsenLoad = NULL,\n"); fprintf(fp, " .DEVsenUpdate = NULL,\n"); fprintf(fp, " .DEVsenAcLoad = NULL,\n"); fprintf(fp, " .DEVsenPrint = NULL,\n"); fprintf(fp, " .DEVsenTrunc = NULL,\n"); fprintf(fp, " .DEVdisto = NULL,\n"); fprintf(fp, " .DEVnoise = NULL,\n"); fprintf(fp, " .DEVsoaCheck = NULL,\n"); fprintf(fp, " .DEVinstSize = &val_sizeofMIFinstance,\n"); fprintf(fp, " .DEVmodSize = &val_sizeofMIFmodel,\n"); fprintf(fp, "\n"); fprintf(fp, "#ifdef CIDER\n"); fprintf(fp, " .DEVdump = NULL,\n"); fprintf(fp, " .DEVacct = NULL,\n"); fprintf(fp, "#endif\n"); fprintf(fp, "};\n"); fprintf(fp, "\n"); } /* *********************************************************************** */ /* The following functions are utility routines used to convert internal enums and data to ASCII form for placing into the .c file being created. */ #define BASE_STR_LEN 80 static char *data_type_to_str(Data_Type_t type) { static char *str = NULL; if(str == NULL) str = (char *) malloc(BASE_STR_LEN+1); switch(type) { case BOOLEAN: strcpy(str,"MIF_BOOLEAN"); break; case INTEGER: strcpy(str,"MIF_INTEGER"); break; case REAL: strcpy(str,"MIF_REAL"); break; case COMPLEX: strcpy(str,"MIF_COMPLEX"); break; case STRING: strcpy(str,"MIF_STRING"); break; case POINTER: strcpy(str,"MIF_STRING"); break; default: print_error("INTERNAL ERROR - data_type_to_str() - Impossible data type."); } return(str); } /* *********************************************************************** */ static char *port_type_to_str(Port_Type_t port) { static char *str = NULL; if(str == NULL) str = (char *) malloc(BASE_STR_LEN+1); switch(port) { case VOLTAGE: strcpy(str,"MIF_VOLTAGE"); break; case DIFF_VOLTAGE: strcpy(str,"MIF_DIFF_VOLTAGE"); break; case CURRENT: strcpy(str,"MIF_CURRENT"); break; case DIFF_CURRENT: strcpy(str,"MIF_DIFF_CURRENT"); break; case VSOURCE_CURRENT: strcpy(str,"MIF_VSOURCE_CURRENT"); break; case CONDUCTANCE: strcpy(str,"MIF_CONDUCTANCE"); break; case DIFF_CONDUCTANCE: strcpy(str,"MIF_DIFF_CONDUCTANCE"); break; case RESISTANCE: strcpy(str,"MIF_RESISTANCE"); break; case DIFF_RESISTANCE: strcpy(str,"MIF_DIFF_RESISTANCE"); break; case DIGITAL: strcpy(str,"MIF_DIGITAL"); break; case USER_DEFINED: strcpy(str,"MIF_USER_DEFINED"); break; default: print_error("INTERNAL ERROR - port_type_to_str() - Impossible port type."); } return(str); } /* *********************************************************************** */ static char *gen_port_type_str(Port_Type_t port) { static char *str = NULL; if(str == NULL) str = (char *) malloc(BASE_STR_LEN+1); switch(port) { case VOLTAGE: strcpy(str,"v"); break; case DIFF_VOLTAGE: strcpy(str,"vd"); break; case CURRENT: strcpy(str,"i"); break; case DIFF_CURRENT: strcpy(str,"id"); break; case VSOURCE_CURRENT: strcpy(str,"vnam"); break; case CONDUCTANCE: strcpy(str,"g"); break; case DIFF_CONDUCTANCE: strcpy(str,"gd"); break; case RESISTANCE: strcpy(str,"h"); break; case DIFF_RESISTANCE: strcpy(str,"hd"); break; case DIGITAL: strcpy(str,"d"); break; case USER_DEFINED: strcpy(str,""); break; default: print_error("INTERNAL ERROR - gen_port_type_str() - Impossible port type."); } return(str); } /* *********************************************************************** */ static char *dir_to_str(Dir_t dir) { static char *str = NULL; if(str == NULL) str = (char *) malloc(BASE_STR_LEN+1); switch(dir) { case IN: strcpy(str,"MIF_IN"); break; case OUT: strcpy(str,"MIF_OUT"); break; case INOUT: strcpy(str,"MIF_INOUT"); break; default: print_error("INTERNAL ERROR - dir_to_str() - Impossible direction type."); } return(str); } /* *********************************************************************** */ static char *value_to_str(Data_Type_t type, Value_t value) { static char *str = NULL; static int max_len = 0; char *bool_str; int str_len; if(str == NULL) { str = (char *) malloc(2 * BASE_STR_LEN + 1); max_len = 2 * BASE_STR_LEN; } switch(type) { case BOOLEAN: bool_str = boolean_to_str(value.bvalue); sprintf(str, "{%s, 0, 0.0, {0.0, 0.0}, NULL}", bool_str); break; case INTEGER: sprintf(str, "{MIF_FALSE, %d, 0.0, {0.0, 0.0}, NULL}", value.ivalue); break; case REAL: sprintf(str, "{MIF_FALSE, 0, %e, {0.0, 0.0}, NULL}", value.rvalue); break; case COMPLEX: sprintf(str, "{MIF_FALSE, 0, 0.0, {%e, %e}, NULL}", value.cvalue.real, value.cvalue.imag); break; case STRING: /* be careful, the string could conceivably be very long... */ str_len = (int) strlen(value.svalue); if((str_len + BASE_STR_LEN) > max_len) { str = (char *) realloc(str, (size_t) (max_len + str_len + 1)); max_len += str_len; } sprintf(str, "{MIF_FALSE, 0, 0.0, {0.0, 0.0}, \"%s\"}", value.svalue); break; default: print_error("INTERNAL ERROR - value_to_str() - Impossible data type."); } return(str); } /* *********************************************************************** */ static char *boolean_to_str(Boolean_t value) { static char *str = NULL; if(str == NULL) str = (char *) malloc(BASE_STR_LEN+1); switch(value) { case TRUE: strcpy(str,"MIF_TRUE"); break; case FALSE: strcpy(str,"MIF_FALSE"); break; default: print_error("INTERNAL ERROR - boolean_to_str() - Impossible boolean value."); } return(str); } /* *********************************************************************** */ static char *integer_to_str(int value) { static char *str = NULL; if(str == NULL) { str = (char *) malloc(BASE_STR_LEN + 1); } sprintf(str, "%d", value); return(str); } /* *********************************************************************** */ static char *no_value_to_str(void) { static char *str = NULL; if(str == NULL) { str = (char *) malloc(BASE_STR_LEN + 1); } sprintf(str, "{MIF_FALSE, 0, 0.0, {0.0, 0.0}, NULL}"); return(str); } tmpk8ny_4pz/src/xspice/cmpp/ifs_yacc.y0000644000175000017500000005632313546075722020164 0ustar carstencarsten%{ /*============================================================================ FILE ifs_yacc.y MEMBER OF process cmpp Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Steve Tynor MODIFICATIONS 12/31/91 Bill Kuhn Fix bug in usage of strcmp in check_default_type() SUMMARY This file contains the BNF specification of the language used in the ifspec.ifs file together with various support functions, and parses the ifspec.ifs file to get the information from it and place this information into a data structure of type Ifs_Table_t. INTERFACES yyparse() - Generated automatically by UNIX 'yacc' utility. REFERENCED FILES ifs_lex.l NON-STANDARD FEATURES None. ============================================================================*/ #include #include #include #include "ifs_yacc_y.h" #define yymaxdepth ifs_yymaxdepth #define yyparse ifs_yyparse #define yylex ifs_yylex #define yyerror ifs_yyerror #define yylval ifs_yylval #define yychar ifs_yychar #define yydebug ifs_yydebug #define yypact ifs_yypact #define yyr1 ifs_yyr1 #define yyr2 ifs_yyr2 #define yydef ifs_yydef #define yychk ifs_yychk #define yypgo ifs_yypgo #define yyact ifs_yyact #define yyexca ifs_yyexca #define yyerrflag ifs_yyerrflag #define yynerrs ifs_yynerrs #define yyps ifs_yyps #define yypv ifs_yypv #define yys ifs_yys #define yy_yys ifs_yyyys #define yystate ifs_yystate #define yytmp ifs_yytmp #define yyv ifs_yyv #define yy_yyv ifs_yyyyv #define yyval ifs_yyval #define yylloc ifs_yylloc #define yyreds ifs_yyreds #define yytoks ifs_yytoks #define yylhs ifs_yyyylhs #define yylen ifs_yyyylen #define yydefred ifs_yyyydefred #define yydgoto ifs_yyyydgoto #define yysindex ifs_yyyysindex #define yyrindex ifs_yyyyrindex #define yygindex ifs_yyyygindex #define yytable ifs_yyyytable #define yycheck ifs_yyyycheck #define yyname ifs_yyyyname #define yyrule ifs_yyyyrule extern int yylineno; extern int yyival; extern double yydval; extern char *ifs_yytext; extern int ifs_yylex(void); Boolean_t parser_just_names; static Boolean_t saw_model_name; static Boolean_t saw_function_name; static char *dtype_to_str[] = { "BOOLEAN", "INTEGER", "REAL", "COMPLEX", "STRING", "POINTER" }; static Boolean_t did_default_type; static Boolean_t did_allowed_types; static int num_items; static int item; static int item_offset; static Boolean_t num_items_fixed; Ifs_Table_t *parser_ifs_table; #define TBL parser_ifs_table int ifs_num_errors; static size_t alloced_size [4]; /* * !!!!! Make sure these are large enough so that they never get realloced * !!!!! since that will cause garbage uninitialized data... * !!!!! (FIX THIS!) */ #define DEFAULT_SIZE_CONN 100 #define DEFAULT_SIZE_PARAM 100 #define DEFAULT_SIZE_INST_VAR 100 #define GROW_SIZE 10 typedef enum { TBL_NAME, TBL_PORT, TBL_PARAMETER, TBL_STATIC_VAR, } Table_t; typedef struct { Table_t table; int record; } Context_t; Context_t context; #define ITEM_BUFFER_SIZE 20 /* number of items that can be put in a table * before requiring a new xxx_TABLE: keyword */ #define FOR_ITEM(i) for (i = item_offset; i < num_items; i++) #define ITEM_BUF(i) item_buffer[i-item_offset] #define ASSIGN_BOUNDS(struct_name, i) \ if (ITEM_BUF(i).range.is_named) {\ TBL->struct_name[i].has_conn_ref = TRUE;\ TBL->struct_name[i].conn_ref = find_conn_ref (ITEM_BUF(i).range.u.name);\ } else {\ TBL->struct_name[i].has_conn_ref = FALSE;\ TBL->struct_name[i].has_lower_bound =\ ITEM_BUF(i).range.u.bounds.lower.has_bound;\ TBL->struct_name[i].has_upper_bound =\ ITEM_BUF(i).range.u.bounds.upper.has_bound;\ if (TBL->struct_name[i].has_lower_bound) {\ assert (ITEM_BUF(i).range.u.bounds.lower.bound.kind == INTEGER);\ TBL->struct_name[i].lower_bound =\ ITEM_BUF(i).range.u.bounds.lower.bound.u.ivalue;\ }\ if (TBL->struct_name[i].has_upper_bound) {\ assert (ITEM_BUF(i).range.u.bounds.upper.bound.kind == INTEGER);\ TBL->struct_name[i].upper_bound =\ ITEM_BUF(i).range.u.bounds.upper.bound.u.ivalue;\ }\ } /*---------------------------------------------------------------------------*/ static void fatal (char *str) { yyerror (str); exit(1); } /*---------------------------------------------------------------------------*/ static int find_conn_ref (char *name) { int i; char str[130]; for (i = 0; i < TBL->num_conn; i++) { if (strcmp (name, TBL->conn[i].name) == 0) { return i; } } sprintf (str, "Port `%s' not found", name); yyerror (str); ifs_num_errors++; return 0; } typedef enum {C_DOUBLE, C_BOOLEAN, C_POINTER, C_UNDEF} Ctype_Class_t; /*---------------------------------------------------------------------------*/ static Ctype_Class_t get_ctype_class (Port_Type_t type) { switch (type) { case USER_DEFINED: return C_POINTER; break; case DIGITAL: return C_BOOLEAN; break; default: return C_DOUBLE; break; } } /*---------------------------------------------------------------------------*/ static void check_port_type_direction (Dir_t dir, Port_Type_t port_type) { switch (port_type) { case VOLTAGE: case DIFF_VOLTAGE: case CURRENT: case DIFF_CURRENT: case DIGITAL: case USER_DEFINED: /* * anything goes */ break; case VSOURCE_CURRENT: if (dir != IN) { yyerror ("Port type `vnam' is only valid for `in' ports"); ifs_num_errors++; } break; case CONDUCTANCE: case DIFF_CONDUCTANCE: case RESISTANCE: case DIFF_RESISTANCE: if (dir != INOUT) { yyerror ("Port types `g', `gd', `h', `hd' are only valid for `inout' ports"); ifs_num_errors++; } break; default: assert (0); } } /*---------------------------------------------------------------------------*/ static void check_dtype_not_pointer (Data_Type_t dtype) { if (dtype == POINTER) { yyerror("Invalid parameter type - POINTER type valid only for STATIC_VARs"); ifs_num_errors++; } } /*---------------------------------------------------------------------------*/ static void check_default_type (Conn_Info_t conn) { int i; for (i = 0; i < conn.num_allowed_types; i++) { if (conn.default_port_type == conn.allowed_port_type[i]) { if ((conn.default_port_type != USER_DEFINED) || (strcmp (conn.default_type, conn.allowed_type[i]) == 0)) { return; } } } yyerror ("Port default type is not an allowed type"); ifs_num_errors++; } /*---------------------------------------------------------------------------*/ static void assign_ctype_list (Conn_Info_t *conn, Ctype_List_t *ctype_list ) { int i; Ctype_List_t *p; Ctype_Class_t ctype_class = C_UNDEF; conn->num_allowed_types = 0; for (p = ctype_list; p; p = p->next) { conn->num_allowed_types++; } conn->allowed_type = (char**) calloc ((size_t) conn->num_allowed_types, sizeof (char*)); conn->allowed_port_type = (Port_Type_t*) calloc ((size_t) conn->num_allowed_types, sizeof (Port_Type_t)); if (! (conn->allowed_type && conn->allowed_port_type)) { fatal ("Could not allocate memory"); } for (i = conn->num_allowed_types-1, p = ctype_list; p; i--, p = p->next) { if (ctype_class == C_UNDEF) { ctype_class = get_ctype_class (p->ctype.kind); } if (ctype_class != get_ctype_class (p->ctype.kind)) { yyerror ("Incompatible port types in `allowed_types' clause"); ifs_num_errors++; } check_port_type_direction (conn->direction, p->ctype.kind); conn->allowed_port_type[i] = p->ctype.kind; conn->allowed_type[i] = p->ctype.id; } } /*---------------------------------------------------------------------------*/ static void assign_value (Data_Type_t type, Value_t *dest_value, My_Value_t src_value) { char str[200]; if ((type == REAL) && (src_value.kind == INTEGER)) { dest_value->rvalue = src_value.u.ivalue; return; } else if (type != src_value.kind) { sprintf (str, "Invalid parameter type (saw %s - expected %s)", dtype_to_str[src_value.kind], dtype_to_str[type] ); yyerror (str); ifs_num_errors++; } switch (type) { case BOOLEAN: dest_value->bvalue = src_value.u.bvalue; break; case INTEGER: dest_value->ivalue = src_value.u.ivalue; break; case REAL: dest_value->rvalue = src_value.u.rvalue; break; case COMPLEX: dest_value->cvalue = src_value.u.cvalue; break; case STRING: dest_value->svalue = src_value.u.svalue; break; default: yyerror ("INTERNAL ERROR - unexpected data type in `assign_value'"); ifs_num_errors++; } } /*---------------------------------------------------------------------------*/ static void assign_limits (Data_Type_t type, Param_Info_t *param, Range_t range) { if (range.is_named) { yyerror ("Named range not allowed for limits"); ifs_num_errors++; } param->has_lower_limit = range.u.bounds.lower.has_bound; if (param->has_lower_limit) { assign_value (type, ¶m->lower_limit, range.u.bounds.lower.bound); } param->has_upper_limit = range.u.bounds.upper.has_bound; if (param->has_upper_limit) { assign_value (type, ¶m->upper_limit, range.u.bounds.upper.bound); } } /*---------------------------------------------------------------------------*/ static void check_item_num (void) { if (item-item_offset >= ITEM_BUFFER_SIZE) { fatal ("Too many items in table - split into sub-tables"); } if (item > (int) alloced_size [context.table] ) { switch (context.table) { case TBL_NAME: break; case TBL_PORT: alloced_size[context.table] += GROW_SIZE; TBL->conn = (Conn_Info_t*) realloc (TBL->conn, alloced_size [context.table] * sizeof (Conn_Info_t)); if (! TBL->conn) { fatal ("Error allocating memory for port definition"); } break; case TBL_PARAMETER: alloced_size [context.table] += GROW_SIZE; TBL->param = (Param_Info_t*) realloc (TBL->param, alloced_size [context.table] * sizeof (Param_Info_t)); if (! TBL->param) { fatal ("Error allocating memory for parameter definition"); } break; case TBL_STATIC_VAR: alloced_size [context.table] += GROW_SIZE; TBL->inst_var = (Inst_Var_Info_t*) realloc (TBL->inst_var, alloced_size [context.table] * sizeof (Inst_Var_Info_t)); if (! TBL->inst_var) { fatal ("Error allocating memory for static variable definition"); } break; } } item++; } /*---------------------------------------------------------------------------*/ static void check_end_item_num (void) { if (num_items_fixed) { if (item != num_items) { char buf[200]; sprintf (buf, "Wrong number of elements in sub-table (saw %d - expected %d)", item - item_offset, num_items - item_offset); fatal (buf); } } else { num_items = item; num_items_fixed = TRUE; switch (context.table) { case TBL_NAME: break; case TBL_PORT: TBL->num_conn = num_items; break; case TBL_PARAMETER: TBL->num_param = num_items; break; case TBL_STATIC_VAR: TBL->num_inst_var = num_items; break; } } item = item_offset; } #define INIT(n) item = (n); item_offset = (n); num_items = (n); num_items_fixed = FALSE #define ITEM check_item_num() #define END check_end_item_num() %} %token TOK_ALLOWED_TYPES %token TOK_ARRAY %token TOK_ARRAY_BOUNDS %token TOK_BOOL_NO %token TOK_BOOL_YES %token TOK_COMMA %token TOK_PORT_NAME %token TOK_PORT_TABLE %token TOK_CTYPE_D %token TOK_CTYPE_G %token TOK_CTYPE_GD %token TOK_CTYPE_H %token TOK_CTYPE_HD %token TOK_CTYPE_I %token TOK_CTYPE_ID %token TOK_CTYPE_V %token TOK_CTYPE_VD %token TOK_CTYPE_VNAM %token TOK_C_FUNCTION_NAME %token TOK_DASH %token TOK_DATA_TYPE %token TOK_DEFAULT_TYPE %token TOK_DEFAULT_VALUE %token TOK_DESCRIPTION %token TOK_DIRECTION %token TOK_DIR_IN %token TOK_DIR_INOUT %token TOK_DIR_OUT %token TOK_DTYPE_BOOLEAN %token TOK_DTYPE_COMPLEX %token TOK_DTYPE_INT %token TOK_DTYPE_POINTER %token TOK_DTYPE_REAL %token TOK_DTYPE_STRING %token TOK_IDENTIFIER %token TOK_STATIC_VAR_NAME %token TOK_STATIC_VAR_TABLE %token TOK_INT_LITERAL %token TOK_LANGLE %token TOK_LBRACKET %token TOK_LIMITS %token TOK_NAME_TABLE %token TOK_NULL_ALLOWED %token TOK_PARAMETER_NAME %token TOK_PARAMETER_TABLE %token TOK_RANGLE %token TOK_RBRACKET %token TOK_REAL_LITERAL %token TOK_SPICE_MODEL_NAME %token TOK_STRING_LITERAL %union { Ctype_List_t *ctype_list; Dir_t dir; Boolean_t bool; Range_t range; Data_Type_t dtype; My_Port_Type_t ctype; My_Value_t value; char *str; Bound_t bound; int ival; double rval; Complex_t cval; } %type ctype_list delimited_ctype_list %type direction %type ctype %type dtype %type range int_range %type value number integer_value value_or_dash %type identifier string %type bool %type int_or_dash number_or_dash %type integer %type real %type complex %start ifs_file %{ /* * resuse the Yacc union for our buffer: */ YYSTYPE item_buffer [ITEM_BUFFER_SIZE]; /* * Shorthand for refering to the current element of the item buffer: */ #define BUF ITEM_BUF(item-1) %} %% ifs_file : {TBL->num_conn = 0; TBL->num_param = 0; TBL->num_inst_var = 0; saw_function_name = FALSE; saw_model_name = FALSE; alloced_size [TBL_PORT] = DEFAULT_SIZE_CONN; alloced_size [TBL_PARAMETER] = DEFAULT_SIZE_PARAM; alloced_size [TBL_STATIC_VAR] = DEFAULT_SIZE_INST_VAR; TBL->conn = (Conn_Info_t*) calloc (DEFAULT_SIZE_CONN, sizeof (Conn_Info_t)); TBL->param = (Param_Info_t*) calloc (DEFAULT_SIZE_PARAM, sizeof (Param_Info_t)); TBL->inst_var = (Inst_Var_Info_t*) calloc (DEFAULT_SIZE_INST_VAR, sizeof (Inst_Var_Info_t)); if (! (TBL->conn && TBL->param && TBL->inst_var) ) { fatal ("Could not allocate enough memory"); } } list_of_tables ; list_of_tables : table | list_of_tables table ; table : TOK_NAME_TABLE {context.table = TBL_NAME;} name_table | TOK_PORT_TABLE {context.table = TBL_PORT; did_default_type = FALSE; did_allowed_types = FALSE; INIT (TBL->num_conn);} port_table {TBL->num_conn = num_items;} | TOK_PARAMETER_TABLE {context.table = TBL_PARAMETER; INIT (TBL->num_param);} parameter_table {TBL->num_param = num_items;} | TOK_STATIC_VAR_TABLE {context.table = TBL_STATIC_VAR; INIT (TBL->num_inst_var);} static_var_table {TBL->num_inst_var = num_items;} ; name_table : /* empty */ | name_table name_table_item ; name_table_item : TOK_C_FUNCTION_NAME identifier {TBL->name.c_fcn_name =strdup (ifs_yytext); saw_function_name = TRUE; if (parser_just_names && saw_model_name) return 0;} | TOK_SPICE_MODEL_NAME identifier {TBL->name.model_name = strdup (ifs_yytext); saw_model_name = TRUE; if (parser_just_names && saw_function_name) return 0;} | TOK_DESCRIPTION string {TBL->name.description = strdup (ifs_yytext);} ; port_table : /* empty */ | port_table port_table_item ; port_table_item : TOK_PORT_NAME list_of_ids {int i; END; FOR_ITEM (i) { TBL->conn[i].name = ITEM_BUF(i).str; }} | TOK_DESCRIPTION list_of_strings {int i; END; FOR_ITEM (i) { TBL->conn[i].description = ITEM_BUF(i).str; }} | TOK_DIRECTION list_of_directions {int i; END; FOR_ITEM (i) { TBL->conn[i].direction = ITEM_BUF(i).dir; }} | TOK_DEFAULT_TYPE list_of_ctypes {int i; END; did_default_type = TRUE; FOR_ITEM (i) { TBL->conn[i].default_port_type = ITEM_BUF(i).ctype.kind; TBL->conn[i].default_type = ITEM_BUF(i).ctype.id; if (did_allowed_types) { check_default_type (TBL->conn[i]); } }} | TOK_ALLOWED_TYPES list_of_ctype_lists {int i; END; did_allowed_types = TRUE; FOR_ITEM (i) { assign_ctype_list (&TBL->conn[i], ITEM_BUF(i).ctype_list); if (did_default_type) { check_default_type (TBL->conn[i]); } }} | TOK_ARRAY list_of_bool {int i; END; FOR_ITEM (i) { TBL->conn[i].is_array = ITEM_BUF(i).bool; }} | TOK_ARRAY_BOUNDS list_of_array_bounds {int i; END; FOR_ITEM (i) { ASSIGN_BOUNDS (conn, i); assert (!TBL->conn[i].has_conn_ref); }} | TOK_NULL_ALLOWED list_of_bool {int i; END; FOR_ITEM (i) { TBL->conn[i].null_allowed = ITEM_BUF(i).bool; }} ; parameter_table : /* empty */ | parameter_table parameter_table_item ; parameter_table_item : TOK_PARAMETER_NAME list_of_ids {int i; END; FOR_ITEM (i) { TBL->param[i].name = ITEM_BUF(i).str; }} | TOK_DESCRIPTION list_of_strings {int i; END; FOR_ITEM (i) { TBL->param[i].description = ITEM_BUF(i).str; }} | TOK_DATA_TYPE list_of_dtypes {int i; END; FOR_ITEM (i) { check_dtype_not_pointer (ITEM_BUF(i).dtype); TBL->param[i].type = ITEM_BUF(i).dtype; }} | TOK_DEFAULT_VALUE list_of_values {int i; END; FOR_ITEM (i) { TBL->param[i].has_default = ITEM_BUF(i).value.has_value; if (TBL->param[i].has_default) { assign_value (TBL->param[i].type, &TBL->param[i].default_value, ITEM_BUF(i).value); } }} | TOK_LIMITS list_of_ranges {int i; END; FOR_ITEM (i) { assign_limits (TBL->param[i].type, &TBL->param[i], ITEM_BUF(i).range); }} | TOK_ARRAY list_of_bool {int i; END; FOR_ITEM (i) { TBL->param[i].is_array = ITEM_BUF(i).bool; }} | TOK_ARRAY_BOUNDS list_of_array_bounds {int i; END; FOR_ITEM (i) { ASSIGN_BOUNDS (param, i); }} | TOK_NULL_ALLOWED list_of_bool {int i; END; FOR_ITEM (i) { TBL->param[i].null_allowed = ITEM_BUF(i).bool; }} ; static_var_table : /* empty */ | static_var_table static_var_table_item ; static_var_table_item : TOK_STATIC_VAR_NAME list_of_ids {int i; END; FOR_ITEM (i) { TBL->inst_var[i].name = ITEM_BUF(i).str; }} | TOK_DESCRIPTION list_of_strings {int i; END; FOR_ITEM (i) { TBL->inst_var[i].description = ITEM_BUF(i).str; }} | TOK_DATA_TYPE list_of_dtypes {int i; END; FOR_ITEM (i) { TBL->inst_var[i].type = ITEM_BUF(i).dtype; }} | TOK_ARRAY list_of_bool {int i; END; FOR_ITEM (i) { TBL->inst_var[i].is_array = ITEM_BUF(i).bool; }} ; list_of_ids : /* empty */ | list_of_ids identifier {ITEM; BUF.str = $2;} ; list_of_array_bounds : /* empty */ | list_of_array_bounds int_range {ITEM; BUF.range = $2;} | list_of_array_bounds identifier {ITEM; BUF.range.is_named = TRUE; BUF.range.u.name = $2;} ; list_of_strings : /* empty */ | list_of_strings string {ITEM; BUF.str = $2;} ; list_of_directions : /* empty */ | list_of_directions direction {ITEM; BUF.dir = $2;} ; direction : TOK_DIR_IN {$$ = IN;} | TOK_DIR_OUT {$$ = OUT;} | TOK_DIR_INOUT {$$ = INOUT;} ; list_of_bool : /* empty */ | list_of_bool bool {ITEM; BUF.bool = $2;} ; list_of_ctypes : /* empty */ | list_of_ctypes ctype {ITEM; BUF.ctype = $2;} ; ctype : TOK_CTYPE_V {$$.kind = VOLTAGE;} | TOK_CTYPE_VD {$$.kind = DIFF_VOLTAGE;} | TOK_CTYPE_VNAM {$$.kind = VSOURCE_CURRENT;} | TOK_CTYPE_I {$$.kind = CURRENT;} | TOK_CTYPE_ID {$$.kind = DIFF_CURRENT;} | TOK_CTYPE_G {$$.kind = CONDUCTANCE;} | TOK_CTYPE_GD {$$.kind = DIFF_CONDUCTANCE;} | TOK_CTYPE_H {$$.kind = RESISTANCE;} | TOK_CTYPE_HD {$$.kind = DIFF_RESISTANCE;} | TOK_CTYPE_D {$$.kind = DIGITAL;} | identifier {$$.kind = USER_DEFINED; $$.id = $1;} ; list_of_dtypes : /* empty */ | list_of_dtypes dtype {ITEM; BUF.dtype = $2;} ; dtype : TOK_DTYPE_REAL {$$ = REAL;} | TOK_DTYPE_INT {$$ = INTEGER;} | TOK_DTYPE_BOOLEAN {$$ = BOOLEAN;} | TOK_DTYPE_COMPLEX {$$ = COMPLEX;} | TOK_DTYPE_STRING {$$ = STRING;} | TOK_DTYPE_POINTER {$$ = POINTER;} ; list_of_ranges : /* empty */ | list_of_ranges range {ITEM; BUF.range = $2;} ; int_range : TOK_DASH {$$.is_named = FALSE; $$.u.bounds.lower.has_bound = FALSE; $$.u.bounds.upper.has_bound = FALSE;} | TOK_LBRACKET int_or_dash maybe_comma int_or_dash TOK_RBRACKET {$$.is_named = FALSE; $$.u.bounds.lower = $2; $$.u.bounds.upper = $4;} ; maybe_comma : /* empty */ | TOK_COMMA ; int_or_dash : TOK_DASH {$$.has_bound = FALSE;} | integer_value {$$.has_bound = TRUE; $$.bound = $1;} ; range : TOK_DASH {$$.is_named = FALSE; $$.u.bounds.lower.has_bound = FALSE; $$.u.bounds.upper.has_bound = FALSE;} | TOK_LBRACKET number_or_dash maybe_comma number_or_dash TOK_RBRACKET {$$.is_named = FALSE; $$.u.bounds.lower = $2; $$.u.bounds.upper = $4;} ; number_or_dash : TOK_DASH {$$.has_bound = FALSE;} | number {$$.has_bound = TRUE; $$.bound = $1;} ; list_of_values : /* empty */ | list_of_values value_or_dash {ITEM; BUF.value = $2;} ; value_or_dash : TOK_DASH {$$.has_value = FALSE;} | value ; value : string {$$.has_value = TRUE; $$.kind = STRING; $$.u.svalue = $1;} | bool {$$.has_value = TRUE; $$.kind = BOOLEAN; $$.u.bvalue = $1;} | complex {$$.has_value = TRUE; $$.kind = COMPLEX; $$.u.cvalue = $1;} | number ; complex : TOK_LANGLE real maybe_comma real TOK_RANGLE {$$.real = $2; $$.imag = $4;} ; list_of_ctype_lists : /* empty */ | list_of_ctype_lists delimited_ctype_list {ITEM; BUF.ctype_list = $2;} ; delimited_ctype_list : TOK_LBRACKET ctype_list TOK_RBRACKET {$$ = $2;} ; ctype_list : ctype {$$ = (Ctype_List_t*)calloc (1, sizeof (Ctype_List_t)); if (!$$) { fatal ("Error allocating memory"); } $$->ctype = $1; $$->next = (Ctype_List_t*)0;} | ctype_list maybe_comma ctype {$$ = (Ctype_List_t*)calloc (1, sizeof (Ctype_List_t)); if (!$$) { fatal ("Error allocating memory"); } $$->ctype = $3; $$->next = $1; /*$$->next = (Ctype_List_t*)0; assert ($1); $1->next = $$;*/} ; bool : TOK_BOOL_YES {$$ = TRUE;} | TOK_BOOL_NO {$$ = FALSE;} ; string : TOK_STRING_LITERAL {$$ = strdup(ifs_yytext);} ; identifier : TOK_IDENTIFIER {$$ = strdup(ifs_yytext);} ; number : real {$$.has_value = TRUE; $$.kind = REAL; $$.u.rvalue = $1;} | integer_value ; integer_value : integer {$$.has_value = TRUE; $$.kind = INTEGER; $$.u.ivalue = $1;} ; real : TOK_REAL_LITERAL {$$ = yydval;} ; integer : TOK_INT_LITERAL {$$ = yyival;} ; %% tmpk8ny_4pz/src/xspice/cmpp/read_ifs.c0000644000175000017500000000757713546075722020141 0ustar carstencarsten/*============================================================================ FILE read_ifs.c MEMBER OF process cmpp Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn and Steve Tynor MODIFICATIONS SUMMARY This file contains top-level functions used in reading information from the ifspec.ifs file and building an internal data structure that holds the information. Most of the work in parsing of the ifspec.ifs file and in building the structure is handled by the UNIX 'lex' and 'yacc' utilities. This processing is begun at the call to yyparse() in read_ifs_table() below. See also files: ifs_lex.l ifs_yacc.y INTERFACES read_ifs_file() yywrap() yyerror() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include #include #include "ifs_yacc_y.h" extern char *prog_name; extern int ifs_yyparse (void); extern void ifs_yyrestart (FILE*); extern FILE *ifs_yyin; extern int ifs_yylineno; extern char *ifs_yytext; extern Ifs_Table_t *parser_ifs_table; extern Boolean_t parser_just_names; extern int ifs_num_errors; static Status_t read_ifs_table(FILE *fp, int mode, Ifs_Table_t *ifs_table); const char *current_filename; /* *********************************************************************** */ /* NOTE The following function may be called either by cmpp -ifs or cmpp -lst with mode set to GET_IFS_TABLE or GET_IFS_NAME respectively. */ /* read_ifs_file Function read_ifs_file() opens the Interface Specification file (ifspec.ifs) for read access and calls read_ifs_table() with the assigned file pointer to read and parse the file. Upon return from read_ifs_table(), the file is closed. */ Status_t read_ifs_file( const char *filename, /* File to read */ int mode, /* Get names only or get everything? */ Ifs_Table_t *ifs_table) /* Table to put info in */ { FILE *fp; /* Ifs file pointer */ Status_t status; /* returned status from function */ /* Open the ifs file for read access */ fp = fopen_cmpp(&filename, "r"); if(fp == NULL) { perror (prog_name); print_error("ERROR - File not found: %s", filename); return(ERROR); } current_filename = filename; /* Get the stuff from the file into the ifs_table struct */ status = read_ifs_table(fp, mode, ifs_table); /* Close file and return */ fclose(fp); return(status); } /* *********************************************************************** */ /* read_ifs_table Function read_ifs_table() calls yyparse() to read and parse the Interface Specification file contents and place the information into an internal data structure. Function yyparse() is automatically generated by UNIX lex/yacc. */ static Status_t read_ifs_table( FILE *fp, /* File to read from */ int mode, /* Get names only or get everything? */ Ifs_Table_t *ifs_table) /* Table to put info in */ { assert (ifs_table); assert (fp); ifs_yylineno = 1; ifs_yyin = fp; parser_just_names = (mode == GET_IFS_NAME) ? TRUE : FALSE; parser_ifs_table = ifs_table; ifs_num_errors = 0; if (ifs_yyparse() || (ifs_num_errors > 0)) { print_error ("Error parsing interface specification file"); ifs_yyrestart(NULL); return ERROR; } ifs_yyrestart(NULL); return OK; } /*---------------------------------------------------------------------------*/ void ifs_yyerror (char *str) { fprintf (stderr, "%s: Error: \"%s\": line %d (near \'%s\'):\n\t%s.\n", prog_name, current_filename, ifs_yylineno, ifs_yytext, str); } tmpk8ny_4pz/src/xspice/cmpp/ifs_lex.l0000644000175000017500000001010413546075722020003 0ustar carstencarsten%option case-insensitive %option prefix="ifs_yy" %option yylineno %option noyywrap %option noinput %option nounput %{ /*============================================================================ FILE ifs_lex.l MEMBER OF process cmpp Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Steve Tynor MODIFICATIONS 12/31/91 Bill Kuhn Change "array" to "vector" and "array_bounds" to "vector_bounds". SUMMARY This file defines tokens applicable to parsing the ifspec.ifs file, and actions to be taken on encountering those tokens. INTERFACES None. REFERENCED FILES ifs_yacc.y NON-STANDARD FEATURES None. ============================================================================*/ #include #include "ifs_yacc_y.h" #include "ifs_yacc.h" int yyival; double yydval; /* * IFS specs are case insensitive: */ /*---------------------------------------------------------------------------*/ %} %start BOOL CTYPE DIR DTYPE %x comment stringl %p 5000 W [ \t\n] A [_a-z] D [0-9] I [a-z_] Z [0-9a-z_] E [eE][+-]?{D}+ %% "/*" { BEGIN(comment); } [^*\n]* /* eat anything that's not a '*' */ "*"+[^*/\n]* /* eat up '*'s not followed by '/'s */ \n /* new line */ <> {ifs_yyerror ("Unterminated comment"); BEGIN(INITIAL); yyterminate(); } "*"+"/" { BEGIN(INITIAL); } "\"" { BEGIN(stringl); } [^\"]* { return TOK_STRING_LITERAL; } "\"" { BEGIN(INITIAL); } <> {ifs_yyerror ("Unterminated string literal"); BEGIN(INITIAL); yyterminate(); } allowed_types{W}*: {BEGIN CTYPE; return TOK_ALLOWED_TYPES;} vector{W}*: {BEGIN BOOL; return TOK_ARRAY;} vector_bounds{W}*: {return TOK_ARRAY_BOUNDS;} c_function_name{W}*: {return TOK_C_FUNCTION_NAME;} port_name{W}*: {return TOK_PORT_NAME;} port_table{W}*: {return TOK_PORT_TABLE;} data_type{W}*: {BEGIN DTYPE; return TOK_DATA_TYPE;} default_type{W}*: {BEGIN CTYPE; return TOK_DEFAULT_TYPE;} default_value{W}*: {return TOK_DEFAULT_VALUE;} description{W}*: {return TOK_DESCRIPTION;} direction{W}*: {BEGIN DIR; return TOK_DIRECTION;} static_var_name{W}*: {return TOK_STATIC_VAR_NAME;} static_var_table{W}*: {return TOK_STATIC_VAR_TABLE;} limits{W}*: {return TOK_LIMITS;} name_table{W}*: {return TOK_NAME_TABLE;} null_allowed{W}*: {BEGIN BOOL; return TOK_NULL_ALLOWED;} parameter_name{W}*: {return TOK_PARAMETER_NAME;} parameter_table{W}*: {return TOK_PARAMETER_TABLE;} spice_model_name{W}*: {return TOK_SPICE_MODEL_NAME;} yes {return TOK_BOOL_YES;} no {return TOK_BOOL_NO;} true {return TOK_BOOL_YES;} false {return TOK_BOOL_NO;} v {return TOK_CTYPE_V;} vd {return TOK_CTYPE_VD;} vnam {return TOK_CTYPE_VNAM;} i {return TOK_CTYPE_I;} id {return TOK_CTYPE_ID;} g {return TOK_CTYPE_G;} gd {return TOK_CTYPE_GD;} h {return TOK_CTYPE_H;} hd {return TOK_CTYPE_HD;} d {return TOK_CTYPE_D;} in {return TOK_DIR_IN;} out {return TOK_DIR_OUT;} inout {return TOK_DIR_INOUT;} real {return TOK_DTYPE_REAL;} int {return TOK_DTYPE_INT;} boolean {return TOK_DTYPE_BOOLEAN;} complex {return TOK_DTYPE_COMPLEX;} string {return TOK_DTYPE_STRING;} pointer {return TOK_DTYPE_POINTER;} "<" {return TOK_LANGLE;} ">" {return TOK_RANGLE;} "[" {return TOK_LBRACKET;} "]" {return TOK_RBRACKET;} "," {return TOK_COMMA;} "-" {return TOK_DASH;} {I}+{Z}* {return TOK_IDENTIFIER;} [+-]?{D}+ {yyival = atoi (yytext); return TOK_INT_LITERAL;} [+-]?{D}+"."{D}*({E})? | [+-]?{D}*"."{D}+({E})? | [+-]?{D}+({E})? {yydval = atof (yytext); return TOK_REAL_LITERAL;} . ; /* ignore anything else */ \n ; /* ignore anything else */ %% /*--------------------------------------------------------------------------*/ #if 0 void reset_lex_context (void) { BEGIN 0; } #endif tmpk8ny_4pz/src/xspice/cmpp/.gitignore0000644000175000017500000000010713546075722020167 0ustar carstencarsten/mod_yacc.c /mod_yacc.h /mod_lex.c /ifs_yacc.c /ifs_yacc.h /ifs_lex.c tmpk8ny_4pz/src/xspice/xspice.c0000644000175000017500000000265313546075722016707 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/mif.h" #include "ngspice/cm.h" #include "ngspice/dllitf.h" /*how annoying!, needed for structure below*/ static void *tcalloc(size_t a, size_t b) { return tmalloc(a*b); /* FIXME, tcalloc must zero !?!? */ } static void no_free(const void *p) { NG_IGNORE(p); } static FILE * no_file(void) { return NULL; } struct coreInfo_t coreInfo = { MIF_INP2A, MIFgetMod, MIFgetValue, MIFsetup, MIFunsetup, MIFload, MIFmParam, MIFask, MIFmAsk, MIFtrunc, MIFconvTest, MIFdelete, MIFmDelete, MIFdestroy, MIFgettok, MIFget_token, MIFget_cntl_src_type, MIFcopy, cm_climit_fcn, cm_smooth_corner, cm_smooth_discontinuity, cm_smooth_pwl, cm_analog_ramp_factor, cm_analog_alloc, cm_analog_get_ptr, cm_analog_integrate, cm_analog_converge, cm_analog_set_temp_bkpt, cm_analog_set_perm_bkpt, cm_analog_not_converged, cm_analog_auto_partial, cm_event_alloc, cm_event_get_ptr, cm_event_queue, cm_message_get_errmsg, cm_message_send, cm_netlist_get_c, cm_netlist_get_l, cm_complex_set, cm_complex_add, cm_complex_subtract, cm_complex_multiply, cm_complex_divide, cm_get_path, cm_get_circuit, no_file, no_file, no_file, #ifndef HAVE_LIBGC tmalloc, tcalloc, trealloc, txfree, tmalloc, trealloc, txfree #else GC_malloc, tcalloc, GC_realloc, no_free, GC_malloc, GC_realloc, no_free #endif }; tmpk8ny_4pz/src/xspice/evt/0000755000175000017500000000000013546075722016040 5ustar carstencarstentmpk8ny_4pz/src/xspice/evt/evtsetup.c0000644000175000017500000003762113546075722020074 0ustar carstencarsten/*============================================================================ FILE EVTsetup.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains function EVTsetup which clears/allocates the event-driven queues and data structures immediately prior to a new analysis. In addition, it places entries in the job list so that results data from multiple analysis can be retrieved similar to SPICE3C1 saving multiple 'plots'. INTERFACES int EVTsetup(CKTcircuit *ckt) REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "ngspice/ngspice.h" //#include "misc.h" #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" //#include "util.h" #include "ngspice/mif.h" #include "ngspice/evt.h" #include "ngspice/evtudn.h" #include "ngspice/mifproto.h" #include "ngspice/evtproto.h" static int EVTsetup_queues(CKTcircuit *ckt); static int EVTsetup_data(CKTcircuit *ckt); static int EVTsetup_jobs(CKTcircuit *ckt); static int EVTsetup_load_ptrs(CKTcircuit *ckt); /* Allocation macros with built-in check for out-of-memory */ /* Adapted from SPICE 3C1 code in CKTsetup.c */ #define CKALLOC(var,size,type) \ if(size) { \ if((var = TMALLOC(type, size)) == NULL) \ return(E_NOMEM); \ } #define CKREALLOC(var,size,type) \ if((size) == 1) { \ if((var = TMALLOC(type, size)) == NULL) \ return(E_NOMEM); \ } else if((size) > 1) { \ if((var = TREALLOC(type, (var), size)) == NULL) \ return(E_NOMEM); \ } /* EVTsetup This function clears/allocates the event-driven queues and data structures immediately prior to a new analysis. In addition, it places entries in the job list so that results data from multiple analysis can be retrieved similar to SPICE3C1 saving multiple 'plots'. */ int EVTsetup( CKTcircuit *ckt) /* The circuit structure */ { int err; /* Exit immediately if no event-driven instances in circuit */ if(ckt->evt->counts.num_insts == 0) return(OK); /* Clear the inst, node, and output queues, and initialize the to_call */ /* elements in the instance queue to call all event-driven instances */ err = EVTsetup_queues(ckt); if(err) return(err); /* Allocate and initialize the node, state, message, and statistics data */ err = EVTsetup_data(ckt); if(err) return(err); /* Set the job pointers to the allocated results, states, messages, */ /* and statistics so that data will be accessable after run */ err = EVTsetup_jobs(ckt); if(err) return(err); /* Setup the pointers in the MIFinstance structure for inputs, outputs, */ /* and total loads */ err = EVTsetup_load_ptrs(ckt); if(err) return(err); /* Initialize additional event data */ g_mif_info.circuit.evt_step = 0.0; /* Return OK */ return(OK); } /* EVTsetup_queues This function clears the event-driven queues in preparation for a new simulation. */ static int EVTsetup_queues( CKTcircuit *ckt) /* The circuit structure */ { int i; int num_insts; int num_nodes; int num_outputs; Evt_Inst_Queue_t *inst_queue; Evt_Node_Queue_t *node_queue; Evt_Output_Queue_t *output_queue; Evt_Inst_Event_t *inst_event; Evt_Output_Event_t *output_event; void *ptr; /* ************************ */ /* Clear the instance queue */ /* ************************ */ num_insts = ckt->evt->counts.num_insts; inst_queue = &(ckt->evt->queue.inst); for(i = 0; i < num_insts; i++) { inst_event = inst_queue->head[i]; while(inst_event) { ptr = inst_event; inst_event = inst_event->next; FREE(ptr); } inst_event = inst_queue->free[i]; while(inst_event) { ptr = inst_event; inst_event = inst_event->next; FREE(ptr); } inst_queue->head[i] = NULL; inst_queue->current[i] = &(inst_queue->head[i]); inst_queue->last_step[i] = &(inst_queue->head[i]); inst_queue->free[i] = NULL; } inst_queue->next_time = 0.0; inst_queue->last_time = 0.0; inst_queue->num_modified = 0; inst_queue->num_pending = 0; inst_queue->num_to_call = 0; for(i = 0; i < num_insts; i++) { inst_queue->modified[i] = MIF_FALSE; inst_queue->pending[i] = MIF_FALSE; inst_queue->to_call[i] = MIF_FALSE; } /* ******************** */ /* Clear the node queue */ /* ******************** */ num_nodes = ckt->evt->counts.num_nodes; node_queue = &(ckt->evt->queue.node); node_queue->num_changed = 0; node_queue->num_to_eval = 0; for(i = 0; i < num_nodes; i++) { node_queue->changed[i] = MIF_FALSE; node_queue->to_eval[i] = MIF_FALSE; } /* ********************** */ /* Clear the output queue */ /* ********************** */ num_outputs = ckt->evt->counts.num_outputs; output_queue = &(ckt->evt->queue.output); for(i = 0; i < num_outputs; i++) { output_event = output_queue->head[i]; while(output_event) { ptr = output_event; output_event = output_event->next; FREE(ptr); } output_event = output_queue->free[i]; while(output_event) { ptr = output_event; output_event = output_event->next; FREE(ptr); } output_queue->head[i] = NULL; output_queue->current[i] = &(output_queue->head[i]); output_queue->last_step[i] = &(output_queue->head[i]); output_queue->free[i] = NULL; } output_queue->next_time = 0.0; output_queue->last_time = 0.0; output_queue->num_modified = 0; output_queue->num_pending = 0; output_queue->num_changed = 0; for(i = 0; i < num_outputs; i++) { output_queue->modified[i] = MIF_FALSE; output_queue->pending[i] = MIF_FALSE; output_queue->changed[i] = MIF_FALSE; } return(OK); } /* EVTsetup_data This function sets up the event-driven node, state, and message data runtime structures in preparation for a new simulation. */ static int EVTsetup_data( CKTcircuit *ckt) /* The circuit structure */ { Evt_Data_t *data; int i; int j; int num_insts; int num_ports; int num_nodes; int udn_index; int num_outputs; Mif_Boolean_t invert; Evt_Node_Data_t *node_data; Evt_State_Data_t *state_data; Evt_Msg_Data_t *msg_data; /* Evt_Statistic_t *statistics_data;*/ Evt_Node_t *rhs; Evt_Node_t *rhsold; Evt_Node_Info_t *node_info; /* Allocate main substructures of data */ /* Note that we don't free any old structures */ /* since they are pointed to by jobs and need */ /* to be maintained so that results from multiple */ /* jobs are kept around like SPICE does */ data = &(ckt->evt->data); CKALLOC(data->node, 1, Evt_Node_Data_t) CKALLOC(data->state, 1, Evt_State_Data_t) CKALLOC(data->msg, 1, Evt_Msg_Data_t) CKALLOC(data->statistics, 1, Evt_Statistic_t) /* Allocate node data */ num_nodes = ckt->evt->counts.num_nodes; node_data = data->node; CKALLOC(node_data->head, num_nodes, Evt_Node_t *) CKALLOC(node_data->tail, num_nodes, Evt_Node_t **) CKALLOC(node_data->last_step, num_nodes, Evt_Node_t **) CKALLOC(node_data->free, num_nodes, Evt_Node_t *) CKALLOC(node_data->modified_index, num_nodes, int) CKALLOC(node_data->modified, num_nodes, Mif_Boolean_t) CKALLOC(node_data->rhs, num_nodes, Evt_Node_t) CKALLOC(node_data->rhsold, num_nodes, Evt_Node_t) CKALLOC(node_data->total_load, num_nodes, double) /* Initialize the node data */ for(i = 0; i < num_nodes; i++) { node_data->tail[i] = &(node_data->head[i]); node_data->last_step[i] = &(node_data->head[i]); } for(i = 0; i < num_nodes; i++) { /* Get pointers to rhs & rhsold, the user-defined node type index, */ /* the number of outputs on the node and the invert flag */ rhs = &(node_data->rhs[i]); rhsold = &(node_data->rhsold[i]); node_info = ckt->evt->info.node_table[i]; udn_index = node_info->udn_index; num_outputs = node_info->num_outputs; invert = node_info->invert; /* Initialize the elements within rhs and rhsold */ rhs->step = 0.0; rhsold->step = 0.0; if(num_outputs > 1) { CKALLOC(rhs->output_value, num_outputs, void *) CKALLOC(rhsold->output_value, num_outputs, void *) for(j = 0; j < num_outputs; j++) { g_evt_udn_info[udn_index]->create (&(rhs->output_value[j])); g_evt_udn_info[udn_index]->initialize (rhs->output_value[j]); g_evt_udn_info[udn_index]->create (&(rhsold->output_value[j])); g_evt_udn_info[udn_index]->initialize (rhsold->output_value[j]); } } g_evt_udn_info[udn_index]->create (&(rhs->node_value)); g_evt_udn_info[udn_index]->initialize (rhs->node_value); g_evt_udn_info[udn_index]->create (&(rhsold->node_value)); g_evt_udn_info[udn_index]->initialize (rhsold->node_value); if(invert) { g_evt_udn_info[udn_index]->create (&(rhs->inverted_value)); g_evt_udn_info[udn_index]->initialize (rhs->inverted_value); g_evt_udn_info[udn_index]->create (&(rhsold->inverted_value)); g_evt_udn_info[udn_index]->initialize (rhsold->inverted_value); } /* Initialize the total load value to zero */ node_data->total_load[i] = 0.0; } /* Allocate and initialize state data */ num_insts = ckt->evt->counts.num_insts; state_data = data->state; CKALLOC(state_data->head, num_insts, Evt_State_t *) CKALLOC(state_data->tail, num_insts, Evt_State_t **) CKALLOC(state_data->last_step, num_insts, Evt_State_t **) CKALLOC(state_data->free, num_insts, Evt_State_t *) CKALLOC(state_data->modified_index, num_insts, int) CKALLOC(state_data->modified, num_insts, Mif_Boolean_t) CKALLOC(state_data->total_size, num_insts, int) CKALLOC(state_data->desc, num_insts, Evt_State_Desc_t *) for(i = 0; i < num_insts; i++) { state_data->tail[i] = &(state_data->head[i]); state_data->last_step[i] = &(state_data->head[i]); } /* Allocate and initialize msg data */ num_ports = ckt->evt->counts.num_ports; msg_data = data->msg; CKALLOC(msg_data->head, num_ports, Evt_Msg_t *) CKALLOC(msg_data->tail, num_ports, Evt_Msg_t **) CKALLOC(msg_data->last_step, num_ports, Evt_Msg_t **) CKALLOC(msg_data->free, num_ports, Evt_Msg_t *) CKALLOC(msg_data->modified_index, num_ports, int) CKALLOC(msg_data->modified, num_ports, Mif_Boolean_t) for(i = 0; i < num_ports; i++) { msg_data->tail[i] = &(msg_data->head[i]); msg_data->last_step[i] = &(msg_data->head[i]); } /* Don't need to initialize statistics since they were */ /* calloc'ed above */ return(OK); } /* EVTsetup_jobs This function prepares the jobs data for a new simulation. */ static int EVTsetup_jobs( CKTcircuit *ckt) /* The circuit structure */ { int i; int num_jobs; Evt_Job_t *jobs; Evt_Data_t *data; jobs = &(ckt->evt->jobs); data = &(ckt->evt->data); /* Increment the number of jobs */ num_jobs = ++(jobs->num_jobs); /* Allocate/reallocate necessary pointers */ CKREALLOC(jobs->job_name, num_jobs, char *) CKREALLOC(jobs->node_data, num_jobs, Evt_Node_Data_t *) CKREALLOC(jobs->state_data, num_jobs, Evt_State_Data_t *) CKREALLOC(jobs->msg_data, num_jobs, Evt_Msg_Data_t *) CKREALLOC(jobs->statistics, num_jobs, Evt_Statistic_t *) /* Fill in the pointers, etc. for this new job */ i = num_jobs - 1; jobs->job_name[i] = MIFcopy(ckt->CKTcurJob->JOBname); jobs->node_data[i] = data->node; jobs->state_data[i] = data->state; jobs->msg_data[i] = data->msg; jobs->statistics[i] = data->statistics; return(OK); } /* EVTsetup_load_ptrs This function setups up the required data in the MIFinstance structure of event-driven and hybrid instances. */ static int EVTsetup_load_ptrs( CKTcircuit *ckt) /* The circuit structure */ { int i; int j; int k; int num_insts; int num_conn; int num_port; int num_outputs; int node_index; int output_subindex; MIFinstance *fast; Mif_Conn_Data_t *conn; Mif_Port_Type_t type; Mif_Port_Data_t *port; Evt_Node_Data_t *node_data; /* This function setups up the required data in the MIFinstance */ /* structure of event-driven and hybrid instances */ /* Loop through all event-driven and hybrid instances */ num_insts = ckt->evt->counts.num_insts; for(i = 0; i < num_insts; i++) { /* Get the MIFinstance pointer */ fast = ckt->evt->info.inst_table[i]->inst_ptr; /* Loop through all connections */ num_conn = fast->num_conn; for(j = 0; j < num_conn; j++) { /* Skip if connection is null */ if(fast->conn[j]->is_null) continue; conn = fast->conn[j]; /* Loop through all ports */ num_port = conn->size; for(k = 0; k < num_port; k++) { /* Get port data pointer for quick access */ port = conn->port[k]; if(port->is_null) continue; /* Skip if port is not digital or user-defined type */ type = port->type; if((type != MIF_DIGITAL) && (type != MIF_USER_DEFINED)) continue; /* Set input.pvalue to point to rhsold.node_value or to */ /* rhsold.inverted_value as appropriate */ node_index = port->evt_data.node_index; node_data = ckt->evt->data.node; if(conn->is_input) { if(port->invert) { port->input.pvalue = node_data->rhsold[node_index]. inverted_value; } else { port->input.pvalue = node_data->rhsold[node_index]. node_value; } } /* Set output.pvalue to point to rhs.node_value or rhs.output_value[i] */ /* where i is given by the output_subindex in output info */ /* depending on whether more than one output is connected to the node. */ /* Note that this is only for the DCOP analysis. During a transient */ /* analysis, new structures will be created and the pointers will */ /* be set by EVTload */ if(conn->is_output) { num_outputs = ckt->evt->info.node_table[node_index]->num_outputs; if(num_outputs <= 1) { port->output.pvalue = node_data->rhs[node_index]. node_value; } else { output_subindex = port->evt_data.output_subindex; port->output.pvalue = node_data->rhs[node_index]. output_value[output_subindex]; } } } /* end for number of ports */ } /* end for number of connections */ } /* end for number of insts */ return(OK); } tmpk8ny_4pz/src/xspice/evt/evtaccept.c0000644000175000017500000001122113546075722020157 0ustar carstencarsten/*============================================================================ FILE EVTaccept.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains a function called at the end of a successful (accepted) analog timepoint. It saves pointers to the states of the queues and data at this accepted time. INTERFACES void EVTaccept(CKTcircuit *ckt, double time) REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ /*=== INCLUDE FILES ===*/ #include "ngspice/config.h" #include #include "ngspice/cktdefs.h" #include "ngspice/mif.h" #include "ngspice/evt.h" #include "ngspice/evtproto.h" /* EVTaccept() This function is called at the end of a successful (accepted) analog timepoint. It saves pointers to the states of the queues and data at this accepted time. */ void EVTaccept( CKTcircuit *ckt, /* main circuit struct */ double time) /* time at which analog soln was accepted */ { int i; int index; int num_modified; Evt_Inst_Queue_t *inst_queue; Evt_Output_Queue_t *output_queue; Evt_Node_Data_t *node_data; Evt_State_Data_t *state_data; Evt_Msg_Data_t *msg_data; /* Exit if no event instances */ if(ckt->evt->counts.num_insts == 0) return; /* Get often used pointers */ inst_queue = &(ckt->evt->queue.inst); output_queue = &(ckt->evt->queue.output); node_data = ckt->evt->data.node; state_data = ckt->evt->data.state; msg_data = ckt->evt->data.msg; /* Process the inst queue */ num_modified = inst_queue->num_modified; /* Loop through list of items modified since last time */ for(i = 0; i < num_modified; i++) { /* Get the index of the inst modified */ index = inst_queue->modified_index[i]; /* Update last_step for this index */ inst_queue->last_step[index] = inst_queue->current[index]; /* Reset the modified flag */ inst_queue->modified[index] = MIF_FALSE; } /* Record the new last_time and reset number modified to zero */ inst_queue->last_time = time; inst_queue->num_modified = 0; /* Process the output queue */ num_modified = output_queue->num_modified; /* Loop through list of items modified since last time */ for(i = 0; i < num_modified; i++) { /* Get the index of the output modified */ index = output_queue->modified_index[i]; /* Update last_step for this index */ output_queue->last_step[index] = output_queue->current[index]; /* Reset the modified flag */ output_queue->modified[index] = MIF_FALSE; } /* Record the new last_time and reset number modified to zero */ output_queue->last_time = time; output_queue->num_modified = 0; /* Process the node data */ num_modified = node_data->num_modified; /* Loop through list of items modified since last time */ for(i = 0; i < num_modified; i++) { /* Get the index of the node modified */ index = node_data->modified_index[i]; /* Update last_step for this index */ node_data->last_step[index] = node_data->tail[index]; /* Reset the modified flag */ node_data->modified[index] = MIF_FALSE; } /* Reset number modified to zero */ node_data->num_modified = 0; /* Process the state data */ num_modified = state_data->num_modified; /* Loop through list of items modified since last time */ for(i = 0; i < num_modified; i++) { /* Get the index of the state modified */ index = state_data->modified_index[i]; /* Update last_step for this index */ state_data->last_step[index] = state_data->tail[index]; /* Reset the modified flag */ state_data->modified[index] = MIF_FALSE; } /* Reset number modified to zero */ state_data->num_modified = 0; /* Process the msg data */ num_modified = msg_data->num_modified; /* Loop through list of items modified since last time */ for(i = 0; i < num_modified; i++) { /* Get the index of the msg modified */ index = msg_data->modified_index[i]; /* Update last_step for this index */ msg_data->last_step[index] = msg_data->tail[index]; /* Reset the modified flag */ msg_data->modified[index] = MIF_FALSE; } /* Reset number modified to zero */ msg_data->num_modified = 0; } /* EVTaccept */ tmpk8ny_4pz/src/xspice/evt/Makefile.am0000644000175000017500000000107313546075722020075 0ustar carstencarsten## Process this file with automake to produce Makefile.in # # JW 3/9/01 - had a go and makeing an autoconf script. noinst_LTLIBRARIES = libevtxsp.la libevtxsp_la_SOURCES = \ evtaccept.c \ evtcall_hybrids.c \ evtdump.c \ evtiter.c \ evtnext_time.c \ evtop.c \ evtprint.c \ evtsetup.c \ evtdest.c \ evtbackup.c \ evtdeque.c \ evtinit.c \ evtload.c \ evtnode_copy.c \ evtplot.c \ evtqueue.c \ evttermi.c \ evtshared.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/xspice/evt/evtshared.c0000644000175000017500000001516313546075722020177 0ustar carstencarsten/*============================================================================ FILE EVTshared.c MEMBER OF process XSPICE This code is in the public domain. AUTHORS 5/12/17 Holger Vogt MODIFICATIONS SUMMARY This file function to prepare event node data for transfer over the shared ngspice interface. INTERFACES void EVTprint(wordlist *wl) REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "ngspice/ngspice.h" #include "ngspice/sharedspice.h" #include "ngspice/cpstd.h" #include "ngspice/cpextern.h" #include "ngspice/fteext.h" #include "ngspice/mif.h" #include "ngspice/evt.h" #include "ngspice/evtudn.h" #include "ngspice/evtproto.h" #include "ngspice/evtshared.h" #include static int get_index(char *node_name); /* // typedefs are done in sharedspice.h typedef struct evt_data { Mif_Boolean_t dcop; double step; char *node_value; } evt_data, *pevt_data; typedef struct evt_shared_data { pevt_data evt_dect; int num_steps; } evt_shared_data, *pevt_shared_data; */ pevt_data *return_node; pevt_shared_data return_all; /* delete the information return structures */ static void delete_ret(void) { int i; if (return_all) for (i = 0; i < return_all->num_steps; i++) { tfree(return_all->evt_dect[i]->node_value); tfree(return_all->evt_dect[i]); } tfree(return_all); } pevt_shared_data EVTshareddata( char *node_name) /* The command called by ngGet_EVT_Info(char* nodename) */ { int i; int num_points; int node_index; int udn_index; Evt_Node_t *node_data, *count_data; char *node_value; CKTcircuit *ckt; Evt_Node_Info_t **node_table; Mif_Boolean_t more; Mif_Boolean_t dcop; double step = 0.0; double next_step; double this_step; char *value; delete_ret(); /* just return if only deletion of previous data is requested */ if (!node_name) return NULL; /* Get needed pointers */ ckt = g_mif_info.ckt; if (!ckt) { fprintf(cp_err, "Error: no circuit loaded.\n"); return NULL; } node_table = ckt->evt->info.node_table; /* Get data for the node */ node_index = get_index(node_name); if(node_index < 0) { fprintf(cp_err, "ERROR - Node %s is not an event node.\n", node_name); return NULL; } udn_index = node_table[node_index]->udn_index; if (ckt->evt->data.node) node_data = ckt->evt->data.node->head[node_index]; else { fprintf(cp_err, "ERROR - No node data: simulation not yet run?\n"); return NULL; } node_value = ""; /* Scan the node data and determine if the first vector */ /* is for a DCOP analysis or the first step in a swept DC */ /* or transient analysis. Also, determine if there is */ /* more data following it and if so, what the next step */ /* is. */ more = MIF_FALSE; dcop = MIF_FALSE; next_step = 1e30; if(node_data->op) dcop = MIF_TRUE; else step = node_data->step; (*(g_evt_udn_info[udn_index]->print_val)) (node_data->node_value, "all", &value); node_value = value; node_data = node_data->next; if(node_data) { more = MIF_TRUE; if(node_data->step < next_step) next_step = node_data->step; } /* Count the number of data points of this node */ count_data = node_data; num_points = 0; while (count_data) { num_points++; count_data = count_data->next; } /* Store the data */ return_node = TMALLOC(pevt_data, num_points + 1); pevt_data newnode = TMALLOC(evt_data, 1); newnode->dcop = dcop; newnode->node_value = copy(value); newnode->step = step; return_node[0] = newnode; /* While there is more data, get the next values and print */ i = 1; while(more) { more = MIF_FALSE; this_step = next_step; next_step = 1e30; if(node_data) { if(node_data->step == this_step) { (*(g_evt_udn_info[udn_index]->print_val)) (node_data->node_value, "all", &value); node_value = value; node_data = node_data->next; } if(node_data) { more = MIF_TRUE; if(node_data->step < next_step) next_step = node_data->step; } } /* end if node_data not NULL */ newnode = TMALLOC(evt_data, 1); newnode->dcop = dcop; newnode->node_value = copy(value); newnode->step = this_step; return_node[i] = newnode; i++; } /* end while there is more data */ return_all = TMALLOC(evt_shared_data, 1); return_all->evt_dect = return_node; return_all->num_steps = i; return return_all; } /* get_index This function determines the index of a specified event-driven node. */ static int get_index( char *node_name /* The name of the node to search for */ ) { /* Get the event-driven node index for the specified name */ int index; Mif_Boolean_t found; Evt_Node_Info_t *node; CKTcircuit *ckt; /* Scan list of nodes in event structure to see if there */ found = MIF_FALSE; index = 0; ckt = g_mif_info.ckt; if (!ckt) { fprintf(cp_err, "Error: no circuit loaded.\n"); return(-1); } node = ckt->evt->info.node_list; while(node) { if(strcmp(node_name, node->name) == 0) { found = MIF_TRUE; break; } else { index++; node = node->next; } } /* Return the index or -1 if not found */ if(! found) return(-1); else return(index); } char** EVTallnodes(void) { static char** allnodes; int len = 0, i = 0; Evt_Node_Info_t *node; CKTcircuit *ckt = g_mif_info.ckt; if (!ckt) { fprintf(cp_err, "Error: no circuit loaded.\n"); return NULL; } if (allnodes) tfree(allnodes); node = ckt->evt->info.node_list; /* count the event nodes */ while (node) { len++; node = node->next; } if (len == 0) { fprintf(cp_err, "Error: no event nodes found.\n"); return NULL; } allnodes = TMALLOC(char*, len + 1); node = ckt->evt->info.node_list; for (i = 0; i < len; i++) { allnodes[i] = node->name; node = node->next; } allnodes[len] = '\0'; return allnodes; } tmpk8ny_4pz/src/xspice/evt/evtnode_copy.c0000644000175000017500000000756213546075722020714 0ustar carstencarsten/*============================================================================ FILE EVTnode_copy.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains function EVTnode_copy which copies the state of a node structure. INTERFACES void EVTnode_copy(CKTcircuit *ckt, int node_index, Evt_Node_t *from, Evt_Node_t **to) REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" //#include "util.h" #include "ngspice/mif.h" #include "ngspice/evt.h" #include "ngspice/evtudn.h" #include "ngspice/mifproto.h" #include "ngspice/evtproto.h" #include "ngspice/cm.h" /* EVTnode_copy This function copies the state of a node structure. If the destination is NULL, it is allocated before the copy. This is the case when EVTiter copies a node during a transient analysis to save the state of an element of rhsold into the node data structure lists. If the destination is non-NULL, only the internal elements of the node structure are copied. This is the case when EVTbackup restores that state of nodes that existed at a certain timestep back into rhs and rhsold. */ void EVTnode_copy( CKTcircuit *ckt, /* The circuit structure */ int node_index, /* The node to copy */ Evt_Node_t *from, /* Location to copy from */ Evt_Node_t **to) /* Location to copy to */ { int i; int udn_index; int num_outputs; Mif_Boolean_t invert; Evt_Node_Data_t *node_data; Evt_Node_Info_t **node_table; Evt_Node_t *here; /* Digital_t *dummy;*/ /* char buff[128];*/ /* Get data for fast access */ node_data = ckt->evt->data.node; node_table = ckt->evt->info.node_table; udn_index = node_table[node_index]->udn_index; num_outputs = node_table[node_index]->num_outputs; invert = node_table[node_index]->invert; /* If destination is not allocated, allocate it */ /* otherwise we just copy into the node struct */ here = *to; if(here == NULL) { /* Use allocated structure on free list if available */ /* Otherwise, allocate a new one */ here = node_data->free[node_index]; if(here) { *to = here; node_data->free[node_index] = here->next; here->next = NULL; } else { here = TMALLOC(Evt_Node_t, 1); *to = here; /* Allocate/initialize the data in the new node struct */ if(num_outputs > 1) { here->output_value = TMALLOC(void *, num_outputs); for(i = 0; i < num_outputs; i++) { g_evt_udn_info[udn_index]->create ( &(here->output_value[i]) ); } } here->node_value = NULL; g_evt_udn_info[udn_index]->create ( &(here->node_value) ); if(invert) g_evt_udn_info[udn_index]->create ( &(here->inverted_value) ); } } /* Copy the node data */ here->op = from->op; here->step = from->step; if(num_outputs > 1) { for(i = 0; i < num_outputs; i++) { g_evt_udn_info[udn_index]->copy (from->output_value[i], here->output_value[i]); } } g_evt_udn_info[udn_index]->copy (from->node_value, here->node_value); if(invert) { g_evt_udn_info[udn_index]->copy (from->inverted_value, here->inverted_value); } } tmpk8ny_4pz/src/xspice/evt/evtop.c0000644000175000017500000002127613546075722017351 0ustar carstencarsten/*============================================================================ FILE EVTop.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains function EVTop which is used to perform an operating point analysis in place of CKTop when there are event-driven instances in the circuit. It alternates between doing event-driven iterations with EVTiter and doing analog iterations with NIiter/CKTop until no more event-driven outputs change. INTERFACES EVTop() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" //#include "util.h" #include "ngspice/sperror.h" #include "ngspice/mif.h" #include "ngspice/evt.h" #include "ngspice/enh.h" #include "ngspice/evtproto.h" #include "ngspice/evtudn.h" static void EVTnode_compare( CKTcircuit *ckt, int node_index, Evt_Node_t *node1, Evt_Node_t *node2, Mif_Boolean_t *equal); /* EVTop This function is used to perform an operating point analysis in place of CKTop when there are event-driven instances in the circuit. It alternates between doing event-driven iterations with EVTiter and doing analog iterations with NIiter/CKTop until no more event-driven outputs change. */ int EVTop( CKTcircuit *ckt, /* The circuit structure */ long firstmode, /* The SPICE 3C1 CKTop() firstmode parameter */ long continuemode, /* The SPICE 3C1 CKTop() continuemode paramter */ int max_iter, /* The SPICE 3C1 CKTop() max iteration parameter */ Mif_Boolean_t first_call) /* Is this the first time through? */ { int i; int num_insts; int converged; int output_index; int port_index; char *err_msg; Mif_Boolean_t firstime; Evt_Inst_Queue_t *inst_queue; Evt_Output_Queue_t *output_queue; Evt_Output_Info_t **output_table; Evt_Port_Info_t **port_table; /* get data to local storage for fast access */ num_insts = ckt->evt->counts.num_insts; inst_queue = &(ckt->evt->queue.inst); /* Initialize to_call entries in event inst queue */ /* to force calling all event/hybrid instance the first */ /* time through */ if(first_call) { for(i = 0; i < num_insts; i++) { inst_queue->to_call[i] = MIF_TRUE; inst_queue->to_call_index[i] = i; } inst_queue->num_to_call = num_insts; } /* Alternate between event-driven and analog solutions until */ /* there are no changed event-driven outputs */ firstime = MIF_TRUE; for(;;) { /* Call EVTiter to establish initial outputs from */ /* event/hybrid instances with states (e.g. flip-flops) */ ckt->CKTmode = firstmode; converged = EVTiter(ckt); if(converged != 0) return(converged); /* Now do analog solution for current state of hybrid outputs */ /* If first analog solution, call CKTop */ if(firstime) { firstime = MIF_FALSE; converged = CKTop(ckt, firstmode, continuemode, max_iter); if(converged != 0) return(converged); } /* Otherwise attempt to converge with mode = continuemode */ else { ckt->CKTmode = continuemode; converged = NIiter(ckt,max_iter); if(converged != 0) { converged = CKTop(ckt, firstmode, continuemode, max_iter); if(converged != 0) return(converged); } } /* Call all hybrids to allow new event outputs to be posted */ EVTcall_hybrids(ckt); /* Increment count of successful alternations */ (ckt->evt->data.statistics->op_alternations)++; /* If .option card specified not to alternate solutions, exit */ /* immediately with this first pass solution */ if(! ckt->evt->options.op_alternate) return(0); /* If no hybrid instances produced different event outputs, */ /* alternation is completed, so exit */ if(ckt->evt->queue.output.num_changed == 0) return(0); /* If too many alternations, exit with error */ if(ckt->evt->data.statistics->op_alternations >= ckt->evt->limits.max_op_alternations) { SPfrontEnd->IFerrorf (ERR_WARNING, "Too many analog/event-driven solution alternations"); err_msg = TMALLOC(char, 10000); output_queue = &(ckt->evt->queue.output); output_table = ckt->evt->info.output_table; port_table = ckt->evt->info.port_table; for(i = 0; i < output_queue->num_changed; i++) { output_index = output_queue->changed_index[i]; port_index = output_table[output_index]->port_index; sprintf(err_msg, "\n Instance: %s\n Connection: %s\n Port: %d", port_table[port_index]->inst_name, port_table[port_index]->conn_name, port_table[port_index]->port_num); ENHreport_conv_prob(ENH_EVENT_NODE, port_table[port_index]->node_name, err_msg); } FREE(err_msg); return(E_ITERLIM); } } /* end forever */ } /* EVTop_save Save result from operating point iteration into the node data area. */ void EVTop_save( CKTcircuit *ckt, /* The circuit structure */ Mif_Boolean_t op, /* True if from a DCOP analysis, false if TRANOP, etc. */ double step) { int i; int num_nodes; Mif_Boolean_t equal; Evt_Node_Data_t *node_data; Evt_Node_t *rhsold; Evt_Node_t **head; Evt_Node_t **here; /* char buff[128];*/ /* Get pointers for fast access */ node_data = ckt->evt->data.node; rhsold = node_data->rhsold; head = node_data->head; /* For number of event nodes, copy rhsold to node data */ /* and set the op member if appropriate */ num_nodes = ckt->evt->counts.num_nodes; for(i = 0; i < num_nodes; i++) { /* if head is null, just copy there */ if(head[i] == NULL) { EVTnode_copy(ckt, i, &(rhsold[i]), &(head[i])); head[i]->op = op; head[i]->step = step; } /* Otherwise, add to the end of the list */ else { /* Locate end of list */ here = &(head[i]); for(;;) { if((*here)->next) here = &((*here)->next); else break; } /* Compare entry at end of list to rhsold */ EVTnode_compare(ckt, i, &(rhsold[i]), *here, &equal); /* If new value in rhsold is different, add it to the list */ if(!equal) { here = &((*here)->next); EVTnode_copy(ckt, i, &(rhsold[i]), here); (*here)->op = op; (*here)->step = step; } } /* end else add to end of list */ } /* end for number of nodes */ } /* ************************************************************ */ /* EVTnode_compare This function compares the resolved values of the old and new states on a node. The actual comparison is done by calling the appropriate user-defined node compare function. */ static void EVTnode_compare( CKTcircuit *ckt, /* The circuit structure */ int node_index, /* The index for the node in question */ Evt_Node_t *node1, /* The first value */ Evt_Node_t *node2, /* The second value */ Mif_Boolean_t *equal) /* The computed result */ { Evt_Node_Data_t *node_data; Evt_Node_Info_t **node_table; int udn_index; /* Get data for fast access */ node_data = ckt->evt->data.node; node_table = ckt->evt->info.node_table; udn_index = node_table[node_index]->udn_index; /* Do compare based on changes in resolved node value only */ g_evt_udn_info[udn_index]->compare ( node1->node_value, node2->node_value, equal); } tmpk8ny_4pz/src/xspice/evt/evtdeque.c0000644000175000017500000002327213546075722020034 0ustar carstencarsten/*============================================================================ FILE EVTdequeue.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains function EVTdequeue which removes any items on the output and instance queues with event times matching the specified simulation time. INTERFACES void EVTdequeue(CKTcircuit *ckt, double time) REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" //#include "util.h" #include "ngspice/mif.h" #include "ngspice/evt.h" #include "ngspice/evtudn.h" #include "ngspice/evtproto.h" static void EVTdequeue_output(CKTcircuit *ckt, double time); static void EVTdequeue_inst(CKTcircuit *ckt, double time); static void EVTprocess_output( CKTcircuit *ckt, int output_index, void *value); /* EVTdequeue This function removes any items on the output and instance queues with event times matching the specified simulation time. EVTiter is then called to determine which instances need to be called. */ void EVTdequeue( CKTcircuit *ckt, /* The circuit structure */ double time) /* The event time of the events to dequeue */ { /* Take all items on output queue with matching time */ /* and set changed flags in output queue */ EVTdequeue_output(ckt, time); /* Take all items on inst queue with matching time */ /* and set to_call flags in inst queue */ EVTdequeue_inst(ckt, time); } /* EVTdequeue_output This function de-queues output events with times matching the specified time. */ static void EVTdequeue_output( CKTcircuit *ckt, /* The circuit structure */ double time) /* The event time of the events to dequeue */ { int i; int j; int num_pending; int index; int output_index; double next_time; double event_time; Evt_Output_Queue_t *output_queue; Evt_Output_Event_t *output; Evt_Output_Event_t **output_ptr; /* Get pointers for fast access */ output_queue = &(ckt->evt->queue.output); /* Exit if nothing pending on output queue or if next_time */ /* != specified time */ if(output_queue->num_pending == 0) return; if(output_queue->next_time != time) return; /* Scan the list of outputs pending */ num_pending = output_queue->num_pending; for(i = 0; i < num_pending; i++) { /* Get the index of the output */ index = output_queue->pending_index[i]; /* Get pointer to next event in queue at this index */ output = *(output_queue->current[index]); /* If event time does not match current time, skip */ if(output->event_time != time) continue; /* It must match, so pull the event from the queue and process it */ EVTprocess_output(ckt, index, output->value); /* Move current to point to next non-removed item in list */ output_ptr = &(output->next); output = *output_ptr; while(output) { if(! output->removed) break; output_ptr = &(output->next); output = *output_ptr; } output_queue->current[index] = output_ptr; /* Mark that this index in the queue has been modified */ if(! output_queue->modified[index]) { output_queue->modified[index] = MIF_TRUE; output_queue->modified_index[(output_queue->num_modified)++] = index; } } /* Update/compact the pending list and update the next_time */ next_time = 1e30; for(i = 0, j = 0; i < num_pending; i++) { output_index = output_queue->pending_index[i]; output = *(output_queue->current[output_index]); /* If nothing in queue at last_step, remove this index from the pending list */ if(! output) { output_queue->pending[output_index] = MIF_FALSE; (output_queue->num_pending)--; } /* else, keep the index and update the next time */ else { output_queue->pending_index[j] = output_queue->pending_index[i]; j++; event_time = output->event_time; if(event_time < next_time) next_time = event_time; } } output_queue->next_time = next_time; } /* EVTdequeue_inst This function de-queues instance events with times matching the specified time. */ void EVTdequeue_inst( CKTcircuit *ckt, /* The circuit structure */ double time) /* The event time of the events to dequeue */ { int i; int j; int num_pending; int index; int inst_index; double next_time; double event_time; Evt_Inst_Queue_t *inst_queue; Evt_Inst_Event_t *inst; /* Get pointers for fast access */ inst_queue = &(ckt->evt->queue.inst); /* Exit if nothing pending on inst queue or if next_time */ /* != specified time */ if(inst_queue->num_pending == 0) return; if(inst_queue->next_time != time) return; /* Scan the list of insts pending */ num_pending = inst_queue->num_pending; for(i = 0; i < num_pending; i++) { /* Get the index of the inst */ index = inst_queue->pending_index[i]; /* Get pointer to next event in queue at this index */ inst = *(inst_queue->current[index]); /* If event time does not match current time, skip */ if(inst->event_time != time) continue; /* It must match, so pull the event from the queue and process it */ if(! inst_queue->to_call[index]) { inst_queue->to_call[index] = MIF_TRUE; inst_queue->to_call_index[(inst_queue->num_to_call)++] = index; } /* Move current to point to next item in list */ inst_queue->current[index] = &(inst->next); /* Mark that this index in the queue has been modified */ if(! inst_queue->modified[index]) { inst_queue->modified[index] = MIF_TRUE; inst_queue->modified_index[(inst_queue->num_modified)++] = index; } } /* Update/compact the pending list and update the next_time */ next_time = 1e30; for(i = 0, j = 0; i < num_pending; i++) { inst_index = inst_queue->pending_index[i]; inst = *(inst_queue->current[inst_index]); /* If nothing in queue at last_step, remove this index from the pending list */ if(! inst) { inst_queue->pending[inst_index] = MIF_FALSE; (inst_queue->num_pending)--; } /* else, keep the index and update the next time */ else { inst_queue->pending_index[j] = inst_queue->pending_index[i]; j++; event_time = inst->event_time; if(event_time < next_time) next_time = event_time; } } inst_queue->next_time = next_time; } /* EVTprocess_output This function processes a specified output after it is pulled from the queue. */ static void EVTprocess_output( CKTcircuit *ckt, /* The circuit structure */ int output_index, /* The index of the output to process */ void *value) /* The output value */ { int num_outputs; int node_index; int udn_index; int output_subindex; Evt_Output_Info_t **output_table; Evt_Node_Info_t **node_table; Evt_Node_t *rhs; Evt_Node_t *rhsold; Evt_Output_Queue_t *output_queue; Mif_Boolean_t equal; output_table = ckt->evt->info.output_table; node_table = ckt->evt->info.node_table; node_index = output_table[output_index]->node_index; num_outputs = node_table[node_index]->num_outputs; udn_index = node_table[node_index]->udn_index; rhs = ckt->evt->data.node->rhs; rhsold = ckt->evt->data.node->rhsold; /* Determine if output is different from rhsold value */ /* and copy it to rhs AND rhsold if so */ /* This is somewhat inefficient, but that's the way */ /* we have setup the structures (rhs and rhsold must match)... */ if(num_outputs > 1) { output_subindex = output_table[output_index]->output_subindex; g_evt_udn_info[udn_index]->compare (value, rhsold[node_index].output_value[output_subindex], &equal); if(! equal) { g_evt_udn_info[udn_index]->copy (value, rhs[node_index].output_value[output_subindex]); g_evt_udn_info[udn_index]->copy (value, rhsold[node_index].output_value[output_subindex]); } } else { g_evt_udn_info[udn_index]->compare (value, rhsold[node_index].node_value, &equal); if(! equal) { g_evt_udn_info[udn_index]->copy (value, rhs[node_index].node_value); g_evt_udn_info[udn_index]->copy (value, rhsold[node_index].node_value); } } /* If different, put in changed list of output queue */ if(! equal) { output_queue = &(ckt->evt->queue.output); if(! output_queue->changed[output_index]) { output_queue->changed[output_index] = MIF_TRUE; output_queue->changed_index[(output_queue->num_changed)++] = output_index; } } } tmpk8ny_4pz/src/xspice/evt/evtload.c0000644000175000017500000004362613546075722017655 0ustar carstencarsten/*============================================================================ FILE EVTload.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains function EVTload which is used to call a specified event-driven or hybrid code model during an event-driven iteration. The 'CALL_TYPE' is set to 'EVENT_DRIVEN' when the model is called from this function. INTERFACES int EVTload(CKTcircuit *ckt, int inst_index) REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" //#include "util.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/mif.h" #include "ngspice/evt.h" #include "ngspice/evtudn.h" #include "ngspice/mifproto.h" #include "ngspice/evtproto.h" static void EVTcreate_state( CKTcircuit *ckt, int inst_index); static void EVTadd_msg( CKTcircuit *ckt, int port_index, char *msg_text); static void EVTcreate_output_event( CKTcircuit *ckt, int node_index, int output_index, void **value_ptr); static void EVTprocess_output( CKTcircuit *ckt, Mif_Boolean_t changed, int output_index, Mif_Boolean_t invert, double delay); /* EVTload This function calls the code model function for the specified instance with CALL_TYPE set to EVENT_DRIVEN. Event outputs, messages, etc. are processed on return from the code model. Analog outputs, partials, etc. should not be computed by the code model when the call type is event-driven and are ignored. */ int EVTload( CKTcircuit *ckt, /* The circuit structure */ int inst_index) /* The instance to call code model for */ { int i; int j; int num_conn; int num_port; int mod_type; Mif_Conn_Data_t *conn; Mif_Port_Data_t *port; Mif_Private_t cm_data; MIFinstance *inst; Evt_Node_Data_t *node_data; void *value_ptr; /* ***************************** */ /* Prepare the code model inputs */ /* ***************************** */ /* Get pointer to instance data structure and other data */ /* needed for fast access */ inst = ckt->evt->info.inst_table[inst_index]->inst_ptr; node_data = ckt->evt->data.node; /* Setup circuit data in struct to be passed to code model function */ if(inst->initialized) cm_data.circuit.init = MIF_FALSE; else cm_data.circuit.init = MIF_TRUE; cm_data.circuit.anal_init = MIF_FALSE; cm_data.circuit.anal_type = g_mif_info.circuit.anal_type; if(g_mif_info.circuit.anal_type == MIF_TRAN) cm_data.circuit.time = g_mif_info.circuit.evt_step; else cm_data.circuit.time = 0.0; cm_data.circuit.call_type = MIF_EVENT_DRIVEN; cm_data.circuit.temperature = ckt->CKTtemp - 273.15; /* Setup data needed by cm_... functions */ g_mif_info.ckt = ckt; g_mif_info.instance = inst; g_mif_info.errmsg = ""; g_mif_info.circuit.call_type = MIF_EVENT_DRIVEN; if(inst->initialized) g_mif_info.circuit.init = MIF_FALSE; else g_mif_info.circuit.init = MIF_TRUE; /* If after initialization and in transient analysis mode */ /* create a new state for the instance */ if((g_mif_info.circuit.anal_type == MIF_TRAN) && inst->initialized) EVTcreate_state(ckt, inst_index); /* Loop through all connections on the instance and setup */ /* load, total_load, and msg on all ports, and changed flag */ /* and output pointer on all outputs */ num_conn = inst->num_conn; for(i = 0; i < num_conn; i++) { conn = inst->conn[i]; /* if connection is null, continue to next */ if(conn->is_null) continue; /* Loop through each port on the connection */ num_port = conn->size; for(j = 0; j < num_port; j++) { port = conn->port[j]; /* Skip if port is null */ if(port->is_null) continue; /* If port type is Digital or User-Defined */ if((port->type == MIF_DIGITAL) || (port->type == MIF_USER_DEFINED)) { /* Initialize the msg pointer on the port to NULL, */ /* initialize the load value to zero, and get the total load */ port->msg = NULL; port->load = 0.0; port->total_load = node_data->total_load[port->evt_data.node_index]; /* If connection is an output, initialize changed to true */ /* and create a new output event object in the free list */ /* if transient analysis mode */ if(conn->is_output) { port->changed = MIF_TRUE; if(g_mif_info.circuit.anal_type == MIF_TRAN) { EVTcreate_output_event(ckt, port->evt_data.node_index, port->evt_data.output_index, &value_ptr); port->output.pvalue = value_ptr; } } } else { /* Get the analog input value. All we need to do is */ /* set it to zero if mode is INITJCT. Otherwise, value */ /* should still be around from last successful analog call */ if(ckt->CKTmode & MODEINITJCT) port->input.rvalue = 0.0; } } /* end for number of ports */ } /* end for number of connections */ /* Prepare the structure to be passed to the code model */ cm_data.num_conn = inst->num_conn; cm_data.conn = inst->conn; cm_data.num_param = inst->num_param; cm_data.param = inst->param; cm_data.num_inst_var = inst->num_inst_var; cm_data.inst_var = inst->inst_var; cm_data.callback = &(inst->callback); /* ******************* */ /* Call the code model */ /* ******************* */ mod_type = MIFmodPtr(inst)->MIFmodType; DEVices[mod_type]->DEVpublic.cm_func (&cm_data); /* ****************************** */ /* Process the code model outputs */ /* ****************************** */ /* Loop through all connections and ports and process the msgs */ /* and event outputs */ num_conn = inst->num_conn; for(i = 0; i < num_conn; i++) { conn = inst->conn[i]; if(conn->is_null) continue; /* Loop through each port on the connection */ num_port = conn->size; for(j = 0; j < num_port; j++) { port = conn->port[j]; /* Skip if port is null */ if(port->is_null) continue; /* Process the message if any */ if(port->msg) EVTadd_msg(ckt, port->evt_data.port_index, port->msg); /* If this is the initialization pass, process the load factor */ if(! inst->initialized) { node_data->total_load[port->evt_data.node_index] += port->load; } /* If connection is not an event output, continue to next port */ if(! conn->is_output) continue; if((port->type != MIF_DIGITAL) && (port->type != MIF_USER_DEFINED)) continue; /* If output changed, process it */ EVTprocess_output(ckt, port->changed, port->evt_data.output_index, port->invert, port->delay); /* And prevent erroneous models from overwriting it during */ /* analog iterations */ if(g_mif_info.circuit.anal_type == MIF_TRAN) port->output.pvalue = NULL; } /* end for number of ports */ } /* end for number of connections */ /* Record statistics */ if(g_mif_info.circuit.anal_type == MIF_DC) (ckt->evt->data.statistics->op_load_calls)++; else if(g_mif_info.circuit.anal_type == MIF_TRAN) (ckt->evt->data.statistics->tran_load_calls)++; /* Mark that the instance has been called once */ inst->initialized = MIF_TRUE; return(OK); } /* EVTcreate_state This function creates a new state storage area for a particular instance during an event-driven simulation. New states must be created so that old states are saved and can be accessed by code models in the future. The new state is initialized to the previous state value. */ static void EVTcreate_state( CKTcircuit *ckt, /* The circuit structure */ int inst_index) /* The instance to create state for */ { size_t total_size; Evt_State_Data_t *state_data; Evt_State_t *new_state; Evt_State_t *prev_state; /* Get variables for fast access */ state_data = ckt->evt->data.state; /* Exit immediately if no states on this instance */ if(state_data->desc[inst_index] == NULL) return; /* Get size of state block to be allocated */ total_size = (size_t) state_data->total_size[inst_index]; /* Allocate a new state for the instance */ if(state_data->free[inst_index]) { new_state = state_data->free[inst_index]; state_data->free[inst_index] = new_state->next; } else { new_state = TMALLOC(Evt_State_t, 1); new_state->block = tmalloc(total_size); } /* Splice the new state into the state data linked list */ /* and update the tail pointer */ prev_state = *(state_data->tail[inst_index]); prev_state->next = new_state; new_state->prev = prev_state; state_data->tail[inst_index] = &(prev_state->next); /* Copy the old state to the new state and set the step */ memcpy(new_state->block, prev_state->block, total_size); new_state->step = g_mif_info.circuit.evt_step; /* Mark that the state data on the instance has been modified */ if(! state_data->modified[inst_index]) { state_data->modified[inst_index] = MIF_TRUE; state_data->modified_index[(state_data->num_modified)++] = inst_index; } } /* EVTcreate_output_event This function creates a new output event. */ static void EVTcreate_output_event( CKTcircuit *ckt, /* The circuit structure */ int node_index, /* The node type port is on */ int output_index, /* The output index for this port */ void **value_ptr) /* The event created */ { int udn_index; Evt_Node_Info_t **node_table; Evt_Output_Queue_t *output_queue; Evt_Output_Event_t *event; /* Check the output queue free list and use the structure */ /* at the head of the list if non-null. Otherwise, create a new one. */ output_queue = &(ckt->evt->queue.output); if(output_queue->free[output_index]) { *value_ptr = output_queue->free[output_index]->value; } else { /* Create a new event */ event = TMALLOC(Evt_Output_Event_t, 1); event->next = NULL; /* Initialize the value */ node_table = ckt->evt->info.node_table; udn_index = node_table[node_index]->udn_index; g_evt_udn_info[udn_index]->create (&(event->value)); /* Put the event onto the free list and return the value pointer */ output_queue->free[output_index] = event; *value_ptr = event->value; } } /* EVTadd_msg This function records a message output by a code model into the message results data structure. */ static void EVTadd_msg( CKTcircuit *ckt, /* The circuit structure */ int port_index, /* The port to add message to */ char *msg_text) /* The message text */ { Evt_Msg_Data_t *msg_data; Evt_Msg_t **msg_ptr; Evt_Msg_t *msg; /* Get pointers for fast access */ msg_data = ckt->evt->data.msg; msg_ptr = msg_data->tail[port_index]; /* Set pointer to location at which to add, and update tail */ if(*msg_ptr != NULL) { msg_ptr = &((*msg_ptr)->next); msg_data->tail[port_index] = msg_ptr; } /* Add a new entry in the list of messages for this port */ if(msg_data->free[port_index]) { *msg_ptr = msg_data->free[port_index]; msg_data->free[port_index] = msg_data->free[port_index]->next; if ((*msg_ptr)->text) tfree((*msg_ptr)->text); } else { *msg_ptr = TMALLOC(Evt_Msg_t, 1); } /* Fill in the values */ msg = *msg_ptr; msg->next = NULL; if((ckt->CKTmode & MODEDCOP) == MODEDCOP) msg->op = MIF_TRUE; else msg->step = g_mif_info.circuit.evt_step; msg->text = MIFcopy(msg_text); /* Update the modified indexes */ if(g_mif_info.circuit.anal_type == MIF_TRAN) { if(! msg_data->modified[port_index]) { msg_data->modified[port_index] = MIF_TRUE; msg_data->modified_index[(msg_data->num_modified)++] = port_index; } } } /* EVTprocess_output This function processes an event-driven output produced by a code model. If transient analysis mode, the event is placed into the output queue according to its (non-zero) delay. If DC analysis, the event is processed immediately. */ static void EVTprocess_output( CKTcircuit *ckt, /* The circuit structure */ Mif_Boolean_t changed, /* Has output changed? */ int output_index, /* The output of interest */ Mif_Boolean_t invert, /* Does output need to be inverted? */ double delay) /* The output delay in transient analysis */ { int num_outputs; int node_index; int udn_index; int output_subindex; Evt_Output_Info_t **output_table; Evt_Node_Info_t **node_table; Evt_Node_t *rhs; Evt_Node_t *rhsold; Evt_Output_Queue_t *output_queue; Evt_Output_Event_t *output_event; Mif_Boolean_t equal; output_queue = &(ckt->evt->queue.output); output_table = ckt->evt->info.output_table; node_table = ckt->evt->info.node_table; node_index = output_table[output_index]->node_index; udn_index = node_table[node_index]->udn_index; /* if transient analysis, just put the output event on the queue */ /* to be processed at a later time */ if(g_mif_info.circuit.anal_type == MIF_TRAN) { /* If model signaled that output was not posted, */ /* leave the event struct on the free list and return */ if(!changed) return; if(delay <= 0.0) { printf("\nERROR - Output delay <= 0 not allowed - output ignored!\n"); printf(" Instance: %s\n Node: %s\n Time: %f \n", g_mif_info.instance->MIFname, node_table[node_index]->name, g_mif_info.ckt->CKTtime); return; } /* Remove the (now used) struct from the head of the free list */ output_event = output_queue->free[output_index]; output_queue->free[output_index] = output_event->next; /* Invert the output value if necessary */ if(invert) g_evt_udn_info[udn_index]->invert (output_event->value); /* Add it to the queue */ EVTqueue_output(ckt, output_index, udn_index, output_event, g_mif_info.circuit.evt_step, g_mif_info.circuit.evt_step + delay); return; } /* If not transient analysis, process immediately. */ /* Determine if output has changed from rhsold value */ /* and put entry in output queue changed list if so */ else { /* If model signaled that output was not posted, */ /* just return */ if(! changed) return; /* if(delay > 0.0) printf("\nWARNING - Non-zero output delay not allowed in DCOP - delay ignored!\n"); */ rhs = ckt->evt->data.node->rhs; rhsold = ckt->evt->data.node->rhsold; /* Determine if changed */ num_outputs = node_table[node_index]->num_outputs; if(num_outputs > 1) { output_subindex = output_table[output_index]->output_subindex; if(invert) g_evt_udn_info[udn_index]->invert (rhs[node_index].output_value[output_subindex]); g_evt_udn_info[udn_index]->compare (rhs[node_index].output_value[output_subindex], rhsold[node_index].output_value[output_subindex], &equal); if(! equal) { g_evt_udn_info[udn_index]->copy (rhs[node_index].output_value[output_subindex], rhsold[node_index].output_value[output_subindex]); } } else { if(invert) g_evt_udn_info[udn_index]->invert (rhs[node_index].node_value); g_evt_udn_info[udn_index]->compare (rhs[node_index].node_value, rhsold[node_index].node_value, &equal); if(! equal) { g_evt_udn_info[udn_index]->copy (rhs[node_index].node_value, rhsold[node_index].node_value); } } /* If changed, put in changed list of output queue */ if(! equal) { if(! output_queue->changed[output_index]) { output_queue->changed[output_index] = MIF_TRUE; output_queue->changed_index[(output_queue->num_changed)++] = output_index; } } return; } /* end else process immediately */ } tmpk8ny_4pz/src/xspice/evt/evtdest.c0000644000175000017500000001736713546075722017700 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/iferrmsg.h" #include "ngspice/evt.h" #include "ngspice/evtproto.h" static void Evt_Node_destroy(Evt_Node_Info_t *info, Evt_Node_t *node); static void Evt_Node_Data_destroy(Evt_Ckt_Data_t *evt, Evt_Node_Data_t *node_data); static void Evt_Msg_Data_destroy(Evt_Ckt_Data_t *evt, Evt_Msg_Data_t *msg_data); static void Evt_Queue_destroy(Evt_Ckt_Data_t *evt, Evt_Queue_t *queue); static void Evt_State_Data_destroy(Evt_Ckt_Data_t *evt, Evt_State_Data_t *state_data); static void Evt_Data_destroy(Evt_Ckt_Data_t *evt, Evt_Data_t *data); static void Evt_Job_destroy(Evt_Job_t *job); static void Evt_Info_destroy(Evt_Info_t *info); int EVTdest(Evt_Ckt_Data_t *evt) { /* Exit immediately if no event-driven instances in circuit */ if (evt->counts.num_insts == 0) return OK; Evt_Queue_destroy(evt, & evt->queue); Evt_Data_destroy(evt, & evt->data); Evt_Job_destroy(& evt->jobs); Evt_Info_destroy(& evt->info); return OK; } static void Evt_Queue_destroy(Evt_Ckt_Data_t *evt, Evt_Queue_t *queue) { Evt_Output_Queue_t *output_queue = &(queue->output); Evt_Node_Queue_t *node_queue = &(queue->node); Evt_Inst_Queue_t *inst_queue = &(queue->inst); int i; /* instance queue */ for (i = 0; i < evt->counts.num_insts; i++) { Evt_Inst_Event_t *event = inst_queue->head[i]; while (event) { Evt_Inst_Event_t *next = event->next; tfree(event); event = next; } } tfree(inst_queue->head); tfree(inst_queue->current); tfree(inst_queue->last_step); tfree(inst_queue->free); tfree(inst_queue->modified_index); tfree(inst_queue->modified); tfree(inst_queue->pending_index); tfree(inst_queue->pending); tfree(inst_queue->to_call_index); tfree(inst_queue->to_call); /* node queue */ tfree(node_queue->to_eval_index); tfree(node_queue->to_eval); tfree(node_queue->changed_index); tfree(node_queue->changed); /* output queue */ for (i = 0; i < evt->counts.num_outputs; i++) { Evt_Output_Event_t *event; event = output_queue->head[i]; while (event) { Evt_Output_Event_t *next = event->next; tfree(event->value); tfree(event); event = next; } event = output_queue->free[i]; while (event) { Evt_Output_Event_t *next = event->next; tfree(event->value); tfree(event); event = next; } } tfree(output_queue->head); tfree(output_queue->current); tfree(output_queue->last_step); tfree(output_queue->free); tfree(output_queue->modified_index); tfree(output_queue->modified); tfree(output_queue->pending_index); tfree(output_queue->pending); tfree(output_queue->changed_index); tfree(output_queue->changed); } static void Evt_Data_destroy(Evt_Ckt_Data_t *evt, Evt_Data_t *data) { Evt_State_Data_destroy(evt, data->state); Evt_Node_Data_destroy(evt, data->node); Evt_Msg_Data_destroy(evt, data->msg); tfree(data->node); tfree(data->state); tfree(data->msg); tfree(data->statistics); } static void Evt_State_Data_destroy(Evt_Ckt_Data_t *evt, Evt_State_Data_t *state_data) { int i; if (!state_data) return; for (i = 0; i < evt->counts.num_insts; i++) { Evt_State_t *state = state_data->head[i]; while (state) { Evt_State_t *next = state->next; tfree(state->block); tfree(state); state = next; } } tfree(state_data->head); tfree(state_data->tail); tfree(state_data->last_step); tfree(state_data->free); tfree(state_data->modified); tfree(state_data->modified_index); tfree(state_data->total_size); for (i = 0; i < evt->counts.num_insts; i++) { Evt_State_Desc_t *p = state_data->desc[i]; while (p) { Evt_State_Desc_t *next_p = p->next; tfree(p); p = next_p; } } tfree(state_data->desc); } static void Evt_Node_Data_destroy(Evt_Ckt_Data_t *evt, Evt_Node_Data_t *node_data) { int i; if (!node_data) return; for (i = 0; i < evt->counts.num_nodes; i++) { Evt_Node_Info_t *info = evt->info.node_table[i]; Evt_Node_t *node; node = node_data->head[i]; while (node) { Evt_Node_t *next = node->next; Evt_Node_destroy(info, node); tfree(node); node = next; } node = node_data->free[i]; while (node) { Evt_Node_t *next = node->next; Evt_Node_destroy(info, node); tfree(node); node = next; } } tfree(node_data->head); tfree(node_data->tail); tfree(node_data->last_step); tfree(node_data->free); tfree(node_data->modified); tfree(node_data->modified_index); for (i = 0; i < evt->counts.num_nodes; i++) { Evt_Node_Info_t *info = evt->info.node_table[i]; Evt_Node_destroy(info, &(node_data->rhs[i])); Evt_Node_destroy(info, &(node_data->rhsold[i])); } tfree(node_data->rhs); tfree(node_data->rhsold); tfree(node_data->total_load); } static void Evt_Node_destroy(Evt_Node_Info_t *info, Evt_Node_t *node) { tfree(node->node_value); tfree(node->inverted_value); if (node->output_value) { int k = info->num_outputs; while (--k >= 0) tfree(node->output_value[k]); tfree(node->output_value); } } static void Evt_Msg_Data_destroy(Evt_Ckt_Data_t *evt, Evt_Msg_Data_t *msg_data) { int i; if (!msg_data) return; for (i = 0; i < evt->counts.num_ports; i++) { Evt_Msg_t *msg; msg = msg_data->head[i]; while (msg) { Evt_Msg_t *next = msg->next; if (msg->text) tfree(msg->text); tfree(msg); msg = next; } msg = msg_data->free[i]; while (msg) { Evt_Msg_t *next = msg->next; if (msg->text) tfree(msg->text); tfree(msg); msg = next; } } tfree(msg_data->head); tfree(msg_data->tail); tfree(msg_data->last_step); tfree(msg_data->free); tfree(msg_data->modified); tfree(msg_data->modified_index); } static void Evt_Job_destroy(Evt_Job_t *job) { int i; for (i = 0; i < job->num_jobs; i++) tfree(job->job_name[i]); tfree(job->job_name); tfree(job->node_data); tfree(job->state_data); tfree(job->msg_data); tfree(job->statistics); } static void Evt_Info_destroy(Evt_Info_t *info) { Evt_Inst_Info_t *inst = info->inst_list; while (inst) { Evt_Inst_Info_t *next_inst = inst->next; tfree(inst); inst = next_inst; } tfree(info->inst_table); Evt_Node_Info_t *nodei = info->node_list; while (nodei) { Evt_Node_Info_t *next_nodei = nodei->next; tfree(nodei->name); Evt_Inst_Index_t *p = nodei->inst_list; while (p) { Evt_Inst_Index_t *next_p = p->next; tfree(p); p = next_p; } tfree(nodei); nodei = next_nodei; } tfree(info->node_table); Evt_Port_Info_t *port = info->port_list; while (port) { Evt_Port_Info_t *next_port = port->next; tfree(port->node_name); tfree(port->inst_name); tfree(port->conn_name); tfree(port); port = next_port; } tfree(info->port_table); Evt_Output_Info_t *output = info->output_list; while (output) { Evt_Output_Info_t *next_output = output->next; tfree(output); output = next_output; } tfree(info->output_table); tfree(info->hybrid_index); } tmpk8ny_4pz/src/xspice/evt/evtprint.c0000644000175000017500000004363613546075722020073 0ustar carstencarsten/*============================================================================ FILE EVTprint.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS 7/11/2012 Holger Vogt Replace printf by out_printf to allow output redirection 5/21/2017 Holger Vogt Update 'edisplay': add node type and number of events 5/26/2018 Uros Platise Update 'EVTprintvcd': stepsize based on tstep SUMMARY This file contains function EVTprint which is used to provide a simple tabular output of event-driven node data. This printout is invoked through a new nutmeg command called 'eprint' which takes event-driven node names as argument. INTERFACES void EVTprint(wordlist *wl) REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "ngspice/ngspice.h" #include "ngspice/cpstd.h" #include "ngspice/cpextern.h" #include "ngspice/fteext.h" #include "ngspice/mif.h" #include "ngspice/evt.h" #include "ngspice/evtudn.h" #include "ngspice/evtproto.h" #include static int get_index(char *node_name); static void print_data( Mif_Boolean_t dcop, double step, char **node_value, int nargs); /* EVTprint This function implements the 'eprint' command used to print event-driven node values and messages from the latest simulation. This is a simple prototype implementation of the eprint command for testing purposes. It is currently lacking in the following areas: 1) It accepts only up to 93 nodes. (EPRINT_MAXARGS) 2) It does not support the selected printing of different members of a user-defined data struct. 3) It is dumb in its output formatting - just tries to print everything on a line with 4 space separators. 4) It works only for the latest simulation - i.e. it does not use the evt jobs structure to find old results. 5) It does not allow a range of timesteps to be selected. */ #define EPRINT_MAXARGS 93 void EVTprint( wordlist *wl) /* The command line entered by user */ { int i; int nargs; int num_ports; wordlist *w; char *node_name[EPRINT_MAXARGS]; int node_index[EPRINT_MAXARGS]; int udn_index[EPRINT_MAXARGS]; Evt_Node_t *node_data[EPRINT_MAXARGS]; char *node_value[EPRINT_MAXARGS]; CKTcircuit *ckt; Evt_Node_Info_t **node_table; Evt_Port_Info_t **port_table; Mif_Boolean_t more; Mif_Boolean_t dcop; double step = 0.0; double next_step; double this_step; char *value; Evt_Msg_t *msg_data; Evt_Statistic_t *statistics; /* Count the number of arguments to the command */ nargs = 0; w = wl; while(w) { nargs++; w = w->wl_next; } if(nargs < 1) { printf("Usage: eprint ...\n"); return; } if(nargs > EPRINT_MAXARGS) { fprintf(cp_err, "ERROR - eprint currently limited to %d arguments\n", EPRINT_MAXARGS); return; } /* Get needed pointers */ ckt = g_mif_info.ckt; if (!ckt) { fprintf(cp_err, "Error: no circuit loaded.\n"); return; } node_table = ckt->evt->info.node_table; /* Get data for each argument */ w = wl; for(i = 0; i < nargs; i++) { node_name[i] = w->wl_word; node_index[i] = get_index(node_name[i]); if(node_index[i] < 0) { fprintf(cp_err, "ERROR - Node %s is not an event node.\n", node_name[i]); return; } udn_index[i] = node_table[node_index[i]]->udn_index; if (ckt->evt->data.node) node_data[i] = ckt->evt->data.node->head[node_index[i]]; else { fprintf(cp_err, "ERROR - No node data: simulation not yet run?\n"); return; } node_value[i] = ""; w = w->wl_next; } out_init(); /* Print results data */ out_printf("\n**** Results Data ****\n\n"); /* Print the column identifiers */ out_printf("Time or Step\n"); for(i = 0; i < nargs; i++) out_printf("%s\n",node_name[i]); out_printf("\n\n"); /* Scan the node data and determine if the first vector */ /* is for a DCOP analysis or the first step in a swept DC */ /* or transient analysis. Also, determine if there is */ /* more data following it and if so, what the next step */ /* is. */ more = MIF_FALSE; dcop = MIF_FALSE; next_step = 1e30; for(i = 0; i < nargs; i++) { if(node_data[i]->op) dcop = MIF_TRUE; else step = node_data[i]->step; (*(g_evt_udn_info[udn_index[i]]->print_val)) (node_data[i]->node_value, "all", &value); node_value[i] = value; node_data[i] = node_data[i]->next; if(node_data[i]) { more = MIF_TRUE; if(node_data[i]->step < next_step) next_step = node_data[i]->step; } } /* Print the data */ print_data(dcop, step, node_value, nargs); /* While there is more data, get the next values and print */ while(more) { more = MIF_FALSE; this_step = next_step; next_step = 1e30; for(i = 0; i < nargs; i++) { if(node_data[i]) { if(node_data[i]->step == this_step) { (*(g_evt_udn_info[udn_index[i]]->print_val)) (node_data[i]->node_value, "all", &value); node_value[i] = value; node_data[i] = node_data[i]->next; } if(node_data[i]) { more = MIF_TRUE; if(node_data[i]->step < next_step) next_step = node_data[i]->step; } } /* end if node_data not NULL */ } /* end for number of args */ print_data(MIF_FALSE, this_step, node_value, nargs); } /* end while there is more data */ out_printf("\n\n"); /* Print messages for all ports */ out_printf("\n**** Messages ****\n\n"); num_ports = ckt->evt->counts.num_ports; port_table = ckt->evt->info.port_table; for(i = 0; i < num_ports; i++) { /* Get pointer to messages for this port */ msg_data = ckt->evt->data.msg->head[i]; /* If no messages on this port, skip */ if(! msg_data) continue; /* Print the port description */ out_printf("Node: %s Inst: %s Conn: %s Port: %d\n\n", port_table[i]->node_name, port_table[i]->inst_name, port_table[i]->conn_name, port_table[i]->port_num); /* Print the messages on this port */ while(msg_data) { if(msg_data->op) printf("DCOP "); else printf("%-16.9e", msg_data->step); printf("%s\n", msg_data->text); msg_data = msg_data->next; } out_printf("\n\n"); } /* end for number of ports */ /* Print statistics */ out_printf("\n**** Statistics ****\n\n"); statistics = ckt->evt->data.statistics; out_printf("Operating point analog/event alternations: %d\n", statistics->op_alternations); out_printf("Operating point load calls: %d\n", statistics->op_load_calls); out_printf("Operating point event passes: %d\n", statistics->op_event_passes); out_printf("Transient analysis load calls: %d\n", statistics->tran_load_calls); out_printf("Transient analysis timestep backups: %d\n", statistics->tran_time_backups); out_printf("\n\n"); } /* get_index This function determines the index of a specified event-driven node. */ static int get_index( char *node_name /* The name of the node to search for */ ) { /* Get the event-driven node index for the specified name */ int index; Mif_Boolean_t found; Evt_Node_Info_t *node; CKTcircuit *ckt; /* Scan list of nodes in event structure to see if there */ found = MIF_FALSE; index = 0; ckt = g_mif_info.ckt; if (!ckt) { fprintf(cp_err, "Error: no circuit loaded.\n"); return(-1); } node = ckt->evt->info.node_list; while(node) { if(strcmp(node_name, node->name) == 0) { found = MIF_TRUE; break; } else { index++; node = node->next; } } /* Return the index or -1 if not found */ if(! found) return(-1); else return(index); } /* print_data This function prints the values of one or more nodes to standard output. */ static void print_data( Mif_Boolean_t dcop, /* Is this the operating point data */ double step, /* The analysis step if dcop */ char **node_value, /* The array of values to be printed */ int nargs) /* The size of the value array */ { int i, preci; char step_str[100]; /* If option numdgt is set, use it for printout precision. */ if (cp_numdgt > 0) preci = cp_numdgt; else preci = 9; if(dcop) strcpy(step_str, "DCOP "); else sprintf(step_str, "%.*e", preci, step); out_printf("%s", step_str); for(i = 0; i < nargs; i++) out_printf(" %s", node_value[i]); out_printf("\n"); } /* print all event node names */ void EVTdisplay(wordlist *wl) { Evt_Node_Info_t *node; CKTcircuit *ckt; int node_index, udn_index; Evt_Node_Info_t **node_table; NG_IGNORE(wl); ckt = g_mif_info.ckt; if (!ckt) { fprintf(cp_err, "Error: no circuit loaded.\n"); return; } node = ckt->evt->info.node_list; node_table = ckt->evt->info.node_table; out_init(); if (!node) { out_printf("No event node available!\n"); return; } out_printf("\nList of event nodes\n"); out_printf(" %-20s: %-5s, %s\n\n", "node name", "type", "number of events"); node_index = 0; while (node) { Evt_Node_t *node_data = NULL; int count = 0; char *type; udn_index = node_table[node_index]->udn_index; if (ckt->evt->data.node) node_data = ckt->evt->data.node->head[node_index]; while (node_data) { count++; node_data = node_data->next; } type = g_evt_udn_info[udn_index]->name; out_printf(" %-20s: %-5s, %5d\n", node->name, type, count); node = node->next; node_index++; } } /* xspice valid 12-state values (idndig.c): * 0s, 1s, Us, 0r, 1r, Ur, 0z, 1z, Uz, 0u, 1u, Uu * 0 1 x 0 1 x 0 1 z 0 1 x * * tentative vcd translation, return value: * 0: digital value, 1: real number, 2: unknown */ static int get_vcdval(char *xspiceval, char **newval) { int i, err; double retval; static char *map[] = { "0s", "1s", "Us", "0r", "1r", "Ur", "0z", "1z", "Uz", "0u", "1u", "Uu" }; static char *returnmap[] = { "0", "1", "x", "0", "1", "x", "0", "1", "z", "0", "1", "x" }; for (i = 0; i < 12; i++) if (eq(xspiceval, map[i])) { *newval = copy(returnmap[i]); return 0; } /* is it a real number ? */ retval = INPevaluate(&xspiceval, &err, 1); if (err) { *newval = copy("unknown"); return 2; } *newval = tprintf("%.16g", retval); return 1; } #ifdef _MSC_VER #define time _time64 #define localtime _localtime64 #endif /* * A simple vcd file printer. * command 'eprvcd a0 a1 a2 b0 b1 b2 clk > myvcd.vcd' * prints the event nodes listed to file myvcd.vcd * which then may be viewed with an vcd viewer, * for example 'gtkwave' * Still missing: * hierarchy, vector variables */ void EVTprintvcd(wordlist *wl) { int i; int nargs; wordlist *w; char *node_name[EPRINT_MAXARGS]; int node_index[EPRINT_MAXARGS]; int udn_index[EPRINT_MAXARGS]; Evt_Node_t *node_data[EPRINT_MAXARGS]; char *node_value[EPRINT_MAXARGS]; char *old_node_value[EPRINT_MAXARGS]; char node_ident[EPRINT_MAXARGS + 1]; CKTcircuit *ckt; Evt_Node_Info_t **node_table; Mif_Boolean_t more; double step = 0.0; double next_step; double this_step; char *value; /* Count the number of arguments to the command */ nargs = 0; for (w = wl; w; w = w->wl_next) nargs++; if (nargs < 1) { printf("Usage: eprvcd ...\n"); return; } if (nargs > EPRINT_MAXARGS) { fprintf(cp_err, "ERROR - eprvcd currently limited to %d arguments\n", EPRINT_MAXARGS); return; } /* Get needed pointers */ ckt = g_mif_info.ckt; if (!ckt) { fprintf(cp_err, "Error: no circuit loaded.\n"); return; } if (!ckt->evt->data.node) { fprintf(cp_err, "ERROR - No node data: simulation not yet run?\n"); return; } node_table = ckt->evt->info.node_table; /* Get data for each argument */ w = wl; for (i = 0; i < nargs; i++) { node_name[i] = w->wl_word; node_index[i] = get_index(node_name[i]); if (node_index[i] < 0) { fprintf(cp_err, "ERROR - Node %s is not an event node.\n", node_name[i]); return; } udn_index[i] = node_table[node_index[i]]->udn_index; node_data[i] = ckt->evt->data.node->head[node_index[i]]; node_value[i] = ""; w = w->wl_next; } /* generate the vcd identifier code made of the printable ASCII character set from ! to ~ (decimal 33 to 126) */ for (i = 0; i < nargs; i++) node_ident[i] = (char) ('!' + i); node_ident[i] = '\0'; out_init(); /* get actual time */ time_t ltime; char datebuff[80]; struct tm *my_time; time(<ime); /* Obtain the local time: */ my_time = localtime(<ime); /* time output format according to vcd spec */ strftime(datebuff, sizeof(datebuff), "%B %d, %Y %H:%M:%S", my_time); out_printf("$date %s $end\n", datebuff); out_printf("$version %s %s $end\n", ft_sim->simulator, ft_sim->version); /* get the sim time resolution based on tstep */ char *unit; double scale; double tstep = ckt->CKTstep; /* if selected time step is down to [ms] then report time at [us] etc., always with one level higher resolution */ if (tstep >= 1e-3) { unit = "us"; scale = 1e6; } else if (tstep >= 1e-6) { unit = "ns"; scale = 1e9; } else if (tstep >= 1e-9) { unit = "ps"; scale = 1e12; } else { unit = "fs"; scale = 1e15; } out_printf("$timescale 1 %s $end\n", unit); /* Scan the node data. Go for printing using $dumpvars for the initial values. Also, determine if there is more data following it and if so, what the next step is. */ more = MIF_FALSE; next_step = 1e30; for (i = 0; i < nargs; i++) { step = node_data[i]->step; g_evt_udn_info[udn_index[i]]->print_val (node_data[i]->node_value, "all", &value); old_node_value[i] = node_value[i] = value; node_data[i] = node_data[i]->next; if (node_data[i]) { more = MIF_TRUE; if (next_step > node_data[i]->step) next_step = node_data[i]->step; } } for (i = 0; i < nargs; i++) { char *buf; if (get_vcdval(node_value[i], &buf) == 1) /* real number format */ out_printf("$var real 1 %c %s $end\n", node_ident[i], node_name[i]); else /* digital data format */ out_printf("$var wire 1 %c %s $end\n", node_ident[i], node_name[i]); tfree(buf); } out_printf("$enddefinitions $end\n"); out_printf("#%lld\n", (unsigned long long)(step * scale)); /* first set of data for initialization or if only op has been calculated */ out_printf("$dumpvars\n"); for (i = 0; i < nargs; i++) { char *buf; if (get_vcdval(node_value[i], &buf) == 1) /* real number format */ out_printf("r%s %c\n", buf, node_ident[i]); else /* digital data format */ out_printf("%s%c\n", buf, node_ident[i]); tfree(buf); } out_printf("$end\n"); /* While there is more data, get the next values and print */ while (more) { more = MIF_FALSE; this_step = next_step; next_step = 1e30; for (i = 0; i < nargs; i++) if (node_data[i]) { if (node_data[i]->step == this_step) { g_evt_udn_info[udn_index[i]]->print_val (node_data[i]->node_value, "all", &value); node_value[i] = value; node_data[i] = node_data[i]->next; } if (node_data[i]) { more = MIF_TRUE; if (next_step > node_data[i]->step) next_step = node_data[i]->step; } } /* timestamp */ out_printf("#%lld\n", (unsigned long long)(this_step * scale)); /* print only values that have changed */ for (i = 0; i < nargs; i++) { if (!eq(old_node_value[i], node_value[i])) { char *buf; if (get_vcdval(node_value[i], &buf) == 1) out_printf("r%s %c\n", buf, node_ident[i]); else out_printf("%s%c\n", buf, node_ident[i]); old_node_value[i] = node_value[i]; tfree(buf); } } } /* end while there is more data */ out_printf("\n\n"); } tmpk8ny_4pz/src/xspice/evt/evtinit.c0000644000175000017500000002670613546075722017701 0ustar carstencarsten/*============================================================================ FILE EVTinit.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains function EVTinit which allocates and initializes evt structure elements after the number of instances, nodes, etc. have been determined in parsing during INPpas2. EVTinit also checks to be sure no nodes have been used for both analog and event-driven algorithms simultaneously. INTERFACES int EVTinit(CKTcircuit *ckt) REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" //#include "util.h" #include "ngspice/sperror.h" #include "ngspice/evt.h" #include "ngspice/evtproto.h" static int EVTcheck_nodes(CKTcircuit *ckt); static int EVTcount_hybrids(CKTcircuit *ckt); static int EVTinit_info(CKTcircuit *ckt); static int EVTinit_queue(CKTcircuit *ckt); static int EVTinit_limits(CKTcircuit *ckt); /* Allocation macro with built-in check for out-of-memory */ /* Adapted from SPICE 3C1 code in CKTsetup.c */ #define CKALLOC(var,size,type) \ if(size) { \ if((var = TMALLOC(type, size)) == NULL) \ return(E_NOMEM); \ } /* EVTinit Allocate and initialize additional evt structure elements now that we can determine the number of instances, nodes, etc. Also check to be sure that no nodes have been used in both event-driven and analog domains. In this version, we also report an error if there are no hybrids in the circuit. This restriction may be removed in the future to allow the simulator to be used with digital only circuits... */ int EVTinit( CKTcircuit *ckt) /* the circuit structure */ { int err; /* SPICE error return code 0 = OK */ /* static char *err_no_hybrids = "ERROR - no hybrids found in input deck";*/ /* Exit immediately if there are no event-driven instances */ /* but don't complain */ if(ckt->evt->counts.num_insts == 0) return(OK); /* Count the number of hybrids and hybrid outputs */ err = EVTcount_hybrids(ckt); if(err) return(err); /* Exit with error if there are no hybrids in the circuit. */ /* Will probably remove this restriction later... */ /* if(ckt->evt->counts.num_hybrids == 0) { errMsg = TMALLOC(char, strlen(err_no_hybrids) + 1); strcpy(errMsg, err_no_hybrids); return(E_PRIVATE); } */ /* Check that event nodes have not been used as analog nodes also */ err = EVTcheck_nodes(ckt); if(err) return(err); /* Create info table arrays */ err = EVTinit_info(ckt); if(err) return(err); /* Setup queues */ err = EVTinit_queue(ckt); if(err) return(err); /* Initialize limits */ err = EVTinit_limits(ckt); if(err) return(err); /* Note: Options were initialized in CKTinit so that INPpas2 */ /* could set values according to .options cards in deck. The */ /* structure 'jobs' will be setup immediately prior to each */ /* simulation job. The results data structure is also */ /* allocated immediately prior to each simulation job. */ /* Return */ return(OK); } /* EVTcount_hybrids Count the number of hybrids and the number of outputs on all hybrids. */ static int EVTcount_hybrids( CKTcircuit *ckt) /* The circuit structure */ { int i; int j; int num_hybrids; int num_hybrid_outputs; int num_conn; int num_port; MIFinstance *fast; Evt_Inst_Info_t *inst; /* Count number of hybrids and hybrid outputs in the inst list */ /* created during parsing. Note: other counts */ /* are created during parsing, but these were */ /* too difficult to do until now... */ num_hybrids = 0; num_hybrid_outputs = 0; inst = ckt->evt->info.inst_list; while(inst) { fast = inst->inst_ptr; if(fast->analog && fast->event_driven) { num_hybrids++; num_conn = fast->num_conn; for(i = 0; i < num_conn; i++) { if((! fast->conn[i]->is_null) && (fast->conn[i]->is_output)) { num_port = fast->conn[i]->size; for(j = 0; j < num_port; j++) if(! fast->conn[i]->port[j]->is_null) num_hybrid_outputs++; } } } inst = inst->next; } ckt->evt->counts.num_hybrids = num_hybrids; ckt->evt->counts.num_hybrid_outputs = num_hybrid_outputs; return(OK); } /* EVTcheck_nodes Report error if any event node name is also used as an analog node. */ static int EVTcheck_nodes( CKTcircuit *ckt) /* The circuit structure */ { CKTnode *analog_node; Evt_Node_Info_t *event_node; static char *err_prefix = "ERROR - node "; static char *err_collide = " cannot be both analog and digital"; /* Report error if any analog node name matches any event node name */ event_node = ckt->evt->info.node_list; while(event_node) { analog_node = ckt->CKTnodes; while(analog_node) { if(strcmp(event_node->name, analog_node->name) == 0) { errMsg = tprintf("%s%s%s", err_prefix, event_node->name, err_collide); fprintf(stdout, "%s\n", errMsg); return(E_PRIVATE); } analog_node = analog_node->next; } event_node = event_node->next; } /* Return */ return(OK); } /* EVTinit_info This function creates the ``info'' pointer tables used in the event-driven circuit representation. These arrays allow faster access to data associated with instances, nodes, ports, and outputs than could be provided by having to scan the linked-list representations created during parsing. */ static int EVTinit_info( CKTcircuit *ckt) /* the circuit structure */ { int i; int j; int num_insts; int num_nodes; int num_ports; int num_outputs; Evt_Inst_Info_t *inst; Evt_Node_Info_t *node; Evt_Port_Info_t *port; Evt_Output_Info_t *output; Evt_Inst_Info_t **inst_table = NULL; Evt_Node_Info_t **node_table = NULL; Evt_Port_Info_t **port_table = NULL; Evt_Output_Info_t **output_table = NULL; int *hybrid_index = NULL; int num_hybrids; /* Allocate and initialize table of inst pointers */ num_insts = ckt->evt->counts.num_insts; CKALLOC(inst_table, num_insts, Evt_Inst_Info_t *) inst = ckt->evt->info.inst_list; for(i = 0; i < num_insts; i++) { inst_table[i] = inst; inst = inst->next; } ckt->evt->info.inst_table = inst_table; /* Allocate and initialize table of node pointers */ num_nodes = ckt->evt->counts.num_nodes; CKALLOC(node_table, num_nodes, Evt_Node_Info_t *) node = ckt->evt->info.node_list; for(i = 0; i < num_nodes; i++) { node_table[i] = node; node = node->next; } ckt->evt->info.node_table = node_table; /* Allocate and initialize table of port pointers */ num_ports = ckt->evt->counts.num_ports; CKALLOC(port_table, num_ports, Evt_Port_Info_t *) port = ckt->evt->info.port_list; for(i = 0; i < num_ports; i++) { port_table[i] = port; port = port->next; } ckt->evt->info.port_table = port_table; /* Allocate and initialize table of output pointers */ num_outputs = ckt->evt->counts.num_outputs; CKALLOC(output_table, num_outputs, Evt_Output_Info_t *) output = ckt->evt->info.output_list; for(i = 0; i < num_outputs; i++) { output_table[i] = output; output = output->next; } ckt->evt->info.output_table = output_table; /* Allocate and create table of indexes into inst_table for hybrids */ num_hybrids = ckt->evt->counts.num_hybrids; CKALLOC(hybrid_index, num_hybrids, int) for(i = 0, j = 0; i < num_insts; i++) { if(inst_table[i]->inst_ptr->analog) hybrid_index[j++] = i; } ckt->evt->info.hybrid_index = hybrid_index; /* Return */ return(OK); } /* EVTinit_queue This function prepares the event-driven queues for simulation. */ static int EVTinit_queue( CKTcircuit *ckt) /* the circuit structure */ { int num_insts; int num_nodes; int num_outputs; Evt_Inst_Queue_t *inst_queue; Evt_Node_Queue_t *node_queue; Evt_Output_Queue_t *output_queue; /* Allocate elements in the inst queue */ num_insts = ckt->evt->counts.num_insts; inst_queue = &(ckt->evt->queue.inst); CKALLOC(inst_queue->head, num_insts, Evt_Inst_Event_t *) CKALLOC(inst_queue->current, num_insts, Evt_Inst_Event_t **) CKALLOC(inst_queue->last_step, num_insts, Evt_Inst_Event_t **) CKALLOC(inst_queue->free, num_insts, Evt_Inst_Event_t *) CKALLOC(inst_queue->modified_index, num_insts, int) CKALLOC(inst_queue->modified, num_insts, Mif_Boolean_t) CKALLOC(inst_queue->pending_index, num_insts, int) CKALLOC(inst_queue->pending, num_insts, Mif_Boolean_t) CKALLOC(inst_queue->to_call_index, num_insts, int) CKALLOC(inst_queue->to_call, num_insts, Mif_Boolean_t) /* Allocate elements in the node queue */ num_nodes = ckt->evt->counts.num_nodes; node_queue = &(ckt->evt->queue.node); CKALLOC(node_queue->to_eval_index, num_nodes, int) CKALLOC(node_queue->to_eval, num_nodes, Mif_Boolean_t) CKALLOC(node_queue->changed_index, num_nodes, int) CKALLOC(node_queue->changed, num_nodes, Mif_Boolean_t) /* Allocate elements in the output queue */ num_outputs = ckt->evt->counts.num_outputs; output_queue = &(ckt->evt->queue.output); CKALLOC(output_queue->head, num_outputs, Evt_Output_Event_t *) CKALLOC(output_queue->current, num_outputs, Evt_Output_Event_t **) CKALLOC(output_queue->last_step, num_outputs, Evt_Output_Event_t **) CKALLOC(output_queue->free, num_outputs, Evt_Output_Event_t *) CKALLOC(output_queue->modified_index, num_outputs, int) CKALLOC(output_queue->modified, num_outputs, Mif_Boolean_t) CKALLOC(output_queue->pending_index, num_outputs, int) CKALLOC(output_queue->pending, num_outputs, Mif_Boolean_t) CKALLOC(output_queue->changed_index, num_outputs, int) CKALLOC(output_queue->changed, num_outputs, Mif_Boolean_t) /* Return */ return(OK); } /* EVTinit_limits This function initializes the iteration limits applicable to the event-driven algorithm. */ static int EVTinit_limits( CKTcircuit *ckt) /* the circuit structure */ { /* Set maximum number of event load calls within a single event iteration */ /* to the number of event outputs. This should allow for the */ /* maximum possible number of events that can trickle through any */ /* circuit that does not contain loops. */ ckt->evt->limits.max_event_passes = ckt->evt->counts.num_outputs + 1; /* Set maximum number of alternations between analog and event-driven */ /* iterations to the number of event outputs on hybrids. */ ckt->evt->limits.max_op_alternations = ckt->evt->counts.num_hybrid_outputs + 1; /* Return */ return(OK); } tmpk8ny_4pz/src/xspice/evt/evtdump.c0000644000175000017500000004375413546075722017705 0ustar carstencarsten/*============================================================================ FILE EVTdump.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 6/15/92 Bill Kuhn MODIFICATIONS 06/05/17 Holger Vogt Shared ngspice additions SUMMARY This file contains functions used to send event-driven node results data to the IPC channel when the simulator is used with CAE software. It also sends data to a caller via callback, if shared ngspice is enabled. INTERFACES EVTdump() EVTshareddump() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "ngspice/ngspice.h" //#include "misc.h" #include "ngspice/cktdefs.h" //#include "util.h" #include "ngspice/sperror.h" #include "ngspice/mif.h" #include "ngspice/evt.h" #include "ngspice/evtproto.h" #include "ngspice/evtudn.h" #include "ngspice/ipc.h" #include "ngspice/ipctiein.h" #include "ngspice/ipcproto.h" #ifdef SHARED_MODULE /* global flag, TRUE if callback is used */ extern bool wantevtdata; extern void shared_send_event(int, double, double, char *, void *, int, int); extern void shared_send_dict(int, int, char*, char*); static void EVTshareddump( CKTcircuit *ckt, /* The circuit structure */ Ipc_Anal_t mode, /* The analysis mode for this call */ double step); /* The sweep step for a DCTRCURVE analysis, or */ /* 0.0 for DCOP and TRAN */ static void EVTsharedsend_line( int ipc_index, /* The index used in the dictionary */ double step, /* The analysis step */ void *node_value, /* The node value */ int udn_index, /* The user-defined node index */ int mode); /* mode (op, dc, tran) we are in */ #endif static void EVTsend_line( int ipc_index, /* The index used in the dictionary */ double step, /* The analysis step */ void *node_value, /* The node value */ int udn_index); /* The user-defined node index */ /* EVTdump This function is called to send event-driven node data to the IPC channel. A ``mode'' argument determines how the data is located in the event data structure and what data is sent. If the mode is DCOP, then this is necessarily the first call to the function. In this case, the set of event-driven nodes is scanned to determine which should be sent. Only nodes that are not inside subcircuits are sent. Next, the function sends a ``dictionary'' of node names/types vs. node indexes. Finally, the function sends the DC operating point solutions for the event-driven nodes in the dictionary. If the mode is DCTRCURVE, it is assumed that the function has already been called with mode = DCOP. The function scans the solution vector and sends data for any nodes that have changed. If the mode is TRAN, it is assumed that the function has already been called once with mode = DCOP. The function scans the event data for nodes that have changed since the last accepted analog timepoint and sends the new data. Note: This function must be called BEFORE calling EVTop_save or EVTaccept() so that the state of the node data structure will allow it to determine what has changed. */ typedef struct evtdump_s { Mif_Boolean_t send; /* True if this node should be sent */ int ipc_index; /* Index for this node in dict sent to CAE system */ char *node_name_str; /* Node name */ char *udn_type_str; /* UDN type */ } evtdump_dict_t; void EVTdump( CKTcircuit *ckt, /* The circuit structure */ Ipc_Anal_t mode, /* The analysis mode for this call */ double step) /* The sweep step for a DCTRCURVE analysis, or */ /* 0.0 for DCOP and TRAN */ { static evtdump_dict_t *node_dict = NULL; static int num_send_nodes; int i; int j; int num_nodes; int num_modified; int index; char *name; int name_len; Mif_Boolean_t firstcall; Evt_Node_Data_t *node_data; Evt_Node_t *rhsold; Evt_Node_t **head; Evt_Node_t *here; Evt_Node_Info_t **node_table; char buff[10000]; Mif_Boolean_t equal; #ifdef SHARED_MODULE if((! g_ipc.enabled) && (!wantevtdata)) return; if ((!g_ipc.enabled) && (wantevtdata)) { EVTshareddump(ckt, mode, step); return; } #else /* Return immediately if IPC is not enabled */ if(! g_ipc.enabled) return; #endif /* Get number of event-driven nodes */ num_nodes = ckt->evt->counts.num_nodes; /* Exit immediately if no event-driven nodes in circuit */ if(num_nodes <= 0) return; /* Get pointers for fast access to event data */ node_data = ckt->evt->data.node; node_table = ckt->evt->info.node_table; rhsold = node_data->rhsold; head = node_data->head; /* Determine if this is the first call */ if(node_dict == NULL) firstcall = MIF_TRUE; else firstcall = MIF_FALSE; /* If this is the first call, get the dictionary info */ if(firstcall) { /* Allocate local data structure used to process nodes */ node_dict = TMALLOC(evtdump_dict_t, num_nodes); /* Loop through all nodes to determine which nodes should be sent. */ /* Only nodes not within subcircuits qualify. */ num_send_nodes = 0; for(i = 0; i < num_nodes; i++) { /* Get the name of the node. */ name = node_table[i]->name; /* If name is in a subcircuit, mark that node should not be sent */ /* and continue to next node. */ name_len = (int) strlen(name); for(j = 0; j < name_len; j++) { if(name[j] == ':') break; } if(j < name_len) { node_dict[i].send = MIF_FALSE; continue; } /* Otherwise, fill in info in dictionary. */ node_dict[i].send = MIF_TRUE; node_dict[i].ipc_index = num_send_nodes; node_dict[i].node_name_str = name; node_dict[i].udn_type_str = g_evt_udn_info[node_table[i]->udn_index]->name; /* Increment the count of nodes to be sent. */ num_send_nodes++; } /* end for */ } /* end if first call */ /* Exit if there are no nodes to be sent */ if(num_send_nodes <= 0) return; /* If this is the first call, send the dictionary */ if(firstcall) { ipc_send_evtdict_prefix(); for(i = 0; i < num_nodes; i++) { if(node_dict[i].send) { sprintf(buff, "%d %s %s", node_dict[i].ipc_index, node_dict[i].node_name_str, node_dict[i].udn_type_str); ipc_send_line(buff); } } ipc_send_evtdict_suffix(); } /* If this is the first call, send the operating point solution */ /* and return. */ if(firstcall) { ipc_send_evtdata_prefix(); for(i = 0; i < num_nodes; i++) { if(node_dict[i].send) { EVTsend_line(node_dict[i].ipc_index, step, rhsold[i].node_value, node_table[i]->udn_index); } } ipc_send_evtdata_suffix(); return; } /* Otherwise, this must be DCTRCURVE or TRAN mode and we need to */ /* send only stuff that has changed since the last call. */ /* The determination of what to send is modeled after code in */ /* EVTop_save() for DCTRCURVE and EVTaccept() for TRAN. */ if(mode == IPC_ANAL_DCTRCURVE) { /* Send data prefix */ ipc_send_evtdata_prefix(); /* Loop through event nodes */ for(i = 0; i < num_nodes; i++) { /* If dictionary indicates this node should be sent */ if(node_dict[i].send) { /* Locate end of node data */ here = head[i]; for(;;) { if(here->next) here = here->next; else break; } /* Compare entry at end of list to rhsold */ g_evt_udn_info[node_table[i]->udn_index]->compare ( rhsold[i].node_value, here->node_value, &equal); /* If value in rhsold is different, send it */ if(!equal) { EVTsend_line(node_dict[i].ipc_index, step, rhsold[i].node_value, node_table[i]->udn_index); } } } /* Send data suffix and return */ ipc_send_evtdata_suffix(); return; } if(mode == IPC_ANAL_TRAN) { /* Send data prefix */ ipc_send_evtdata_prefix(); /* Loop through list of nodes modified since last time */ num_modified = node_data->num_modified; for(i = 0; i < num_modified; i++) { /* Get the index of the node modified */ index = node_data->modified_index[i]; /* If dictionary indicates this node should be sent */ if(node_dict[index].send) { /* Scan through new events and send the data for each event */ here = *(node_data->last_step[index]); while((here = here->next) != NULL) { EVTsend_line(node_dict[index].ipc_index, here->step, here->node_value, node_table[index]->udn_index); } } } /* Send data suffix and return */ ipc_send_evtdata_suffix(); return; } } /* EVTsend_line This function formats the event node data and sends it to the IPC channel. */ static void EVTsend_line( int ipc_index, /* The index used in the dictionary */ double step, /* The analysis step */ void *node_value, /* The node value */ int udn_index) /* The user-defined node index */ { double dvalue; char *svalue; void *pvalue; int len; /* Get the data to send */ if(g_evt_udn_info[udn_index]->plot_val) g_evt_udn_info[udn_index]->plot_val (node_value, "", &dvalue); else dvalue = 0.0; if(g_evt_udn_info[udn_index]->print_val) g_evt_udn_info[udn_index]->print_val (node_value, "", &svalue); else svalue = ""; if(g_evt_udn_info[udn_index]->ipc_val) g_evt_udn_info[udn_index]->ipc_val (node_value, &pvalue, &len); else { pvalue = NULL; len = 0; } /* Send it to the IPC channel */ ipc_send_event(ipc_index, step, dvalue, svalue, pvalue, len); } #ifdef SHARED_MODULE static void EVTshareddump( CKTcircuit *ckt, /* The circuit structure */ Ipc_Anal_t mode, /* The analysis mode for this call */ double step) /* The sweep step for a DCTRCURVE analysis, or */ /* 0.0 for DCOP and TRAN */ { static evtdump_dict_t *node_dict = NULL; static int num_send_nodes; int i; int j; int num_nodes; int num_modified; int index; char *name; int name_len; Mif_Boolean_t firstcall; Evt_Node_Data_t *node_data; Evt_Node_t *rhsold; Evt_Node_t **head; Evt_Node_t *here; Evt_Node_Info_t **node_table; Mif_Boolean_t equal; /* Get number of event-driven nodes */ num_nodes = ckt->evt->counts.num_nodes; /* Exit immediately if no event-driven nodes in circuit */ if (num_nodes <= 0) return; /* Get pointers for fast access to event data */ node_data = ckt->evt->data.node; node_table = ckt->evt->info.node_table; rhsold = node_data->rhsold; head = node_data->head; /* Determine if this is the first call */ if (node_dict == NULL) firstcall = MIF_TRUE; else firstcall = MIF_FALSE; /* If this is the first call, get the dictionary info */ if (firstcall) { /* Allocate local data structure used to process nodes */ node_dict = TMALLOC(evtdump_dict_t, num_nodes); /* Loop through all nodes to determine which nodes should be sent. */ /* Only nodes not within subcircuits qualify. */ num_send_nodes = 0; for (i = 0; i < num_nodes; i++) { /* Get the name of the node. */ name = node_table[i]->name; /* If name is in a subcircuit, mark that node should not be sent */ /* and continue to next node. */ name_len = (int)strlen(name); for (j = 0; j < name_len; j++) { if (name[j] == ':') break; } if (j < name_len) { node_dict[i].send = MIF_FALSE; continue; } /* Otherwise, fill in info in dictionary. */ node_dict[i].send = MIF_TRUE; node_dict[i].ipc_index = num_send_nodes; node_dict[i].node_name_str = name; node_dict[i].udn_type_str = g_evt_udn_info[node_table[i]->udn_index]->name; /* Increment the count of nodes to be sent. */ num_send_nodes++; } /* end for */ } /* end if first call */ /* Exit if there are no nodes to be sent */ if (num_send_nodes <= 0) return; /* If this is the first call, send the dictionary (the list of event nodes, line by line) */ if (firstcall) { for (i = 0; i < num_nodes; i++) { if (node_dict[i].send) shared_send_dict(node_dict[i].ipc_index, num_nodes, node_dict[i].node_name_str, node_dict[i].udn_type_str); } } /* If this is the first call, send the operating point solution */ /* and return. */ if (firstcall) { for (i = 0; i < num_nodes; i++) { if (node_dict[i].send) { EVTsharedsend_line(node_dict[i].ipc_index, step, rhsold[i].node_value, node_table[i]->udn_index, mode); } } return; } /* Otherwise, this must be DCTRCURVE or TRAN mode and we need to */ /* send only stuff that has changed since the last call. */ /* The determination of what to send is modeled after code in */ /* EVTop_save() for DCTRCURVE and EVTaccept() for TRAN. */ if (mode == IPC_ANAL_DCTRCURVE) { /* Send data prefix */ /* Loop through event nodes */ for (i = 0; i < num_nodes; i++) { /* If dictionary indicates this node should be sent */ if (node_dict[i].send) { /* Locate end of node data */ here = head[i]; for (;;) { if (here->next) here = here->next; else break; } /* Compare entry at end of list to rhsold */ g_evt_udn_info[node_table[i]->udn_index]->compare( rhsold[i].node_value, here->node_value, &equal); /* If value in rhsold is different, send it */ if (!equal) { EVTsharedsend_line(node_dict[i].ipc_index, step, rhsold[i].node_value, node_table[i]->udn_index, mode); } } } return; } if (mode == IPC_ANAL_TRAN) { /* Loop through list of nodes modified since last time */ num_modified = node_data->num_modified; for (i = 0; i < num_modified; i++) { /* Get the index of the node modified */ index = node_data->modified_index[i]; /* If dictionary indicates this node should be sent */ if (node_dict[index].send) { /* Scan through new events and send the data for each event */ here = *(node_data->last_step[index]); while ((here = here->next) != NULL) { EVTsharedsend_line(node_dict[index].ipc_index, here->step, here->node_value, node_table[index]->udn_index, mode); } } } return; } } /* EVTsharedsend_line This function formats the event node data and sends it to the caller via sharedspice.c. */ static void EVTsharedsend_line( int dict_index, /* The index used in the dictionary */ double step, /* The analysis step */ void *node_value, /* The node value */ int udn_index, /* The user-defined node index */ int mode) /* the mode (op, dc, tran) we are in */ { double dvalue; char *svalue; void *pvalue; int len; /* Get the data to send */ if (g_evt_udn_info[udn_index]->plot_val) g_evt_udn_info[udn_index]->plot_val(node_value, "", &dvalue); else dvalue = 0.0; if (g_evt_udn_info[udn_index]->print_val) g_evt_udn_info[udn_index]->print_val(node_value, "", &svalue); else svalue = ""; if (g_evt_udn_info[udn_index]->ipc_val) g_evt_udn_info[udn_index]->ipc_val(node_value, &pvalue, &len); else { pvalue = NULL; len = 0; } /* Send it to sharedspice.c */ shared_send_event(dict_index, step, dvalue, svalue, pvalue, len, mode); } #endif tmpk8ny_4pz/src/xspice/evt/evtbackup.c0000644000175000017500000004427213546075722020201 0ustar carstencarsten/*============================================================================ FILE EVTbackup.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains a function that resets the queues and data structures to their state at the new analog simulation time specified following the rejection of an analog timestep by the DCtran routine. INTERFACES void EVTbackup(CKTcircuit *ckt, double new_time) REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ /*=== INCLUDE FILES ===*/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" //#include "util.h" #include "ngspice/mif.h" #include "ngspice/evt.h" #include "ngspice/evtproto.h" /*=== FUNCTION PROTOTYPES ===*/ static void EVTbackup_node_data(CKTcircuit *ckt, double new_time); static void EVTbackup_state_data(CKTcircuit *ckt, double new_time); static void EVTbackup_msg_data(CKTcircuit *ckt, double new_time); static void EVTbackup_inst_queue(CKTcircuit *ckt, double new_time); static void EVTbackup_output_queue(CKTcircuit *ckt, double new_time); /* EVTbackup() This function resets the queues and data structures to their state at the new analog simulation time specified. The algorithms in this file assume the following timestep coordination between analog and event-driven algorithms: while(not end of analysis) { while (next event time <= next analog time) { do event solution with call_type = event_driven if any instance set analog breakpoint < next analog time set next analog time to breakpoint } do analog timestep solution with call_type = analog call all hybrid models with call_type = event_driven if(analog solution doesn't converge) Call EVTbackup else Call EVTaccept } */ void EVTbackup( CKTcircuit *ckt, /* the main circuit structure */ double new_time) /* the time to backup to */ { /* Backup the node data */ EVTbackup_node_data(ckt, new_time); /* Backup the state data */ EVTbackup_state_data(ckt, new_time); /* Backup the msg data */ EVTbackup_msg_data(ckt, new_time); /* Backup the inst queue */ EVTbackup_inst_queue(ckt, new_time); /* Backup the output queue */ EVTbackup_output_queue(ckt, new_time); /* Record statistics */ (ckt->evt->data.statistics->tran_time_backups)++; } /* EVTbackup */ /* EVTbackup_node_data() Reset the node structure data. */ static void EVTbackup_node_data( CKTcircuit *ckt, /* the main circuit structure */ double new_time) /* the time to backup to */ { int i; int j; int num_modified; int node_index; Evt_Node_Info_t **node_table; Evt_Node_Data_t *node_data; Evt_Node_t **node_ptr; Evt_Node_t *node; Evt_Node_t *from_node; Evt_Node_t *to_node; Evt_Node_t *head; Evt_Node_t *tail; Evt_Node_t *free_head; /* Get pointers for quick access */ node_data = ckt->evt->data.node; node_table = ckt->evt->info.node_table; /* Loop through list of indexes modified since last accepted timepoint */ num_modified = node_data->num_modified; for(i = 0; i < num_modified; i++) { /* Get the needed node and udn indexes */ node_index = node_data->modified_index[i]; /* Scan data for this node from last_step to determine new setting */ /* for tail, and splice later data into the free list */ node_ptr = node_data->last_step[node_index]; node = *node_ptr; for (;;) { if((node->next == NULL) || (node->next->step > new_time)) { /* Splice rest of list, if any, into free list */ head = node->next; if(head) { tail = *(node_data->tail[node_index]); free_head = node_data->free[node_index]; node_data->free[node_index] = head; tail->next = free_head; } /* Set the tail */ node_data->tail[node_index] = node_ptr; node->next = NULL; break; } node_ptr = &(node->next); node = node->next; } /* Copy data from the location at tail to rhs and rhsold */ from_node = *(node_data->tail[node_index]); to_node = &(node_data->rhs[node_index]); EVTnode_copy(ckt, node_index, from_node, &to_node); to_node = &(node_data->rhsold[node_index]); EVTnode_copy(ckt, node_index, from_node, &to_node); } /* end for number modified */ /* Update/compact the modified list */ for(i = 0, j = 0; i < num_modified; i++) { node_index = node_data->modified_index[i]; /* If nothing after last_step, remove this index from the modified list */ if((*(node_data->last_step[node_index]))->next == NULL) { node_data->modified[node_index] = MIF_FALSE; (node_data->num_modified)--; } /* else, keep the index */ else { node_data->modified_index[j] = node_data->modified_index[i]; j++; } } } /* EVTbackup_node_data */ /* EVTbackup_state_data() Reset the state structure data. */ static void EVTbackup_state_data( CKTcircuit *ckt, /* the main circuit structure */ double new_time) /* the time to backup to */ { int i; int j; int num_modified; int inst_index; Evt_State_Data_t *state_data; Evt_State_t **state_ptr; Evt_State_t *state; Evt_State_t *head; Evt_State_t *tail; Evt_State_t *free_head; /* Get pointers for quick access */ state_data = ckt->evt->data.state; /* Loop through list of indexes modified since last accepted timepoint */ num_modified = state_data->num_modified; for(i = 0; i < num_modified; i++) { /* Get the inst index */ inst_index = state_data->modified_index[i]; /* Scan data for this inst from last_step to determine new setting */ /* for tail, and splice later data into the free list */ state_ptr = state_data->last_step[inst_index]; state = *state_ptr; for (;;) { if((state->next == NULL) || (state->next->step > new_time)) { /* Splice rest of list, if any, into free list */ head = state->next; if(head) { tail = *(state_data->tail[inst_index]); free_head = state_data->free[inst_index]; state_data->free[inst_index] = head; tail->next = free_head; } /* Set the tail */ state_data->tail[inst_index] = state_ptr; state->next = NULL; break; } state_ptr = &(state->next); state = state->next; } } /* end for number modified */ /* Update/compact the modified list */ for(i = 0, j = 0; i < num_modified; i++) { inst_index = state_data->modified_index[i]; /* If nothing after last_step, remove this index from the modified list */ if((*(state_data->last_step[inst_index]))->next == NULL) { state_data->modified[inst_index] = MIF_FALSE; (state_data->num_modified)--; } /* else, keep the index */ else { state_data->modified_index[j] = state_data->modified_index[i]; j++; } } } /* EVTbackup_state_data */ /* EVTbackup_msg_data() Backup the message data. */ static void EVTbackup_msg_data( CKTcircuit *ckt, /* the main circuit structure */ double new_time) /* the time to backup to */ { int i; int j; int num_modified; int port_index; Evt_Msg_Data_t *msg_data; Evt_Msg_t **msg_ptr; Evt_Msg_t *msg; Evt_Msg_t *head; Evt_Msg_t *tail; Evt_Msg_t *free_head; /* Get pointers for quick access */ msg_data = ckt->evt->data.msg; /* Loop through list of indexes modified since last accepted timepoint */ num_modified = msg_data->num_modified; for(i = 0; i < num_modified; i++) { /* Get the port index */ port_index = msg_data->modified_index[i]; /* Scan data for this port from last_step to determine new setting */ /* for tail, and splice later data into the free list */ msg_ptr = msg_data->last_step[port_index]; msg = *msg_ptr; for (;;) { if((msg->next == NULL) || (msg->next->step > new_time)) { /* Splice rest of list, if any, into free list */ head = msg->next; if(head) { tail = *(msg_data->tail[port_index]); free_head = msg_data->free[port_index]; msg_data->free[port_index] = head; tail->next = free_head; } /* Set the tail */ msg_data->tail[port_index] = msg_ptr; msg->next = NULL; break; } msg_ptr = &(msg->next); msg = msg->next; } } /* end for number modified */ /* Update/compact the modified list */ for(i = 0, j = 0; i < num_modified; i++) { port_index = msg_data->modified_index[i]; /* If nothing after last_step, remove this index from the modified list */ if((*(msg_data->last_step[port_index]))->next == NULL) { msg_data->modified[port_index] = MIF_FALSE; (msg_data->num_modified)--; } /* else, keep the index */ else { msg_data->modified_index[j] = msg_data->modified_index[i]; j++; } } } /* EVTbackup_inst_queue() Backup data in inst queue. */ static void EVTbackup_inst_queue( CKTcircuit *ckt, /* the main circuit structure */ double new_time) /* the time to backup to */ { int i; int j; int num_modified; int num_pending; int inst_index; Evt_Inst_Queue_t *inst_queue; Evt_Inst_Event_t **inst_ptr; Evt_Inst_Event_t *inst; double next_time; double event_time; /* Get pointers for quick access */ inst_queue = &(ckt->evt->queue.inst); /* Loop through list of indexes modified since last accepted timepoint */ /* and remove events with posted time > new_time */ num_modified = inst_queue->num_modified; for(i = 0; i < num_modified; i++) { /* Get the inst index */ inst_index = inst_queue->modified_index[i]; /* Scan forward from last_step and cut out data with posted time */ /* > new_time and add it to the free list */ inst_ptr = inst_queue->last_step[inst_index]; inst = *inst_ptr; while(inst) { if(inst->posted_time > new_time) { *inst_ptr = inst->next; inst->next = inst_queue->free[inst_index]; inst_queue->free[inst_index] = inst; inst = *inst_ptr; } else { inst_ptr = &(inst->next); inst = *inst_ptr; } } /* Scan forward from last_step and set current to first */ /* event with event_time > new_time */ inst_ptr = inst_queue->last_step[inst_index]; inst = *inst_ptr; while(inst) { if(inst->event_time > new_time) break; inst_ptr = &((*inst_ptr)->next); inst = *inst_ptr; } inst_queue->current[inst_index] = inst_ptr; } /* Add set of items modified to set of items pending before updating the */ /* pending list because things may have been pulled from the pending list */ for(i = 0; i < num_modified; i++) { j = inst_queue->modified_index[i]; if(! inst_queue->pending[j]) { inst_queue->pending[j] = MIF_TRUE; inst_queue->pending_index[(inst_queue->num_pending)++] = j; } } /* Update the pending list and the next time by seeing if there */ /* is anything at the location pointed to by current */ next_time = 1e30; num_pending = inst_queue->num_pending; for(i = 0, j = 0; i < num_pending; i++) { inst_index = inst_queue->pending_index[i]; inst = *(inst_queue->current[inst_index]); /* If nothing in queue at last_step, remove this index from the pending list */ if(! inst) { inst_queue->pending[inst_index] = MIF_FALSE; (inst_queue->num_pending)--; } /* else, keep the index and update the next time */ else { inst_queue->pending_index[j] = inst_queue->pending_index[i]; j++; event_time = inst->event_time; if(event_time < next_time) next_time = event_time; } } inst_queue->next_time = next_time; /* Update the modified list by looking for any queued events */ /* with posted time > last_time */ for(i = 0, j = 0; i < num_modified; i++) { inst_index = inst_queue->modified_index[i]; inst = *(inst_queue->last_step[inst_index]); while(inst) { if(inst->posted_time > inst_queue->last_time) break; inst = inst->next; } if(! inst) { inst_queue->modified[inst_index] = MIF_FALSE; (inst_queue->num_modified)--; } else { inst_queue->modified_index[j] = inst_queue->modified_index[i]; j++; } } } /* EVTbackup_output_queue() Backup data in output queue. */ static void EVTbackup_output_queue( CKTcircuit *ckt, /* the main circuit structure */ double new_time) /* the time to backup to */ { int i; int j; int num_modified; int num_pending; int output_index; Evt_Output_Queue_t *output_queue; Evt_Output_Event_t **output_ptr; Evt_Output_Event_t *output; double next_time; double event_time; /* Get pointers for quick access */ output_queue = &(ckt->evt->queue.output); /* Loop through list of indexes modified since last accepted timepoint */ /* and remove events with posted time > new_time */ num_modified = output_queue->num_modified; for(i = 0; i < num_modified; i++) { /* Get the output index */ output_index = output_queue->modified_index[i]; /* Scan forward from last_step and cut out data with posted time */ /* > new_time and add it to the free list */ /* Also, unremove anything with removed time > new_time */ output_ptr = output_queue->last_step[output_index]; output = *output_ptr; while(output) { if(output->posted_time > new_time) { *output_ptr = output->next; output->next = output_queue->free[output_index]; output_queue->free[output_index] = output; output = *output_ptr; } else { if(output->removed && (output->removed_time > new_time)) output->removed = MIF_FALSE; output_ptr = &(output->next); output = *output_ptr; } } /* Scan forward from last_step and set current to first */ /* event with event_time > new_time */ output_ptr = output_queue->last_step[output_index]; output = *output_ptr; while(output) { if(output->event_time > new_time) break; output_ptr = &((*output_ptr)->next); output = *output_ptr; } output_queue->current[output_index] = output_ptr; } /* Add set of items modified to set of items pending before updating the */ /* pending list because things may have been pulled from the pending list */ for(i = 0; i < num_modified; i++) { j = output_queue->modified_index[i]; if(! output_queue->pending[j]) { output_queue->pending[j] = MIF_TRUE; output_queue->pending_index[(output_queue->num_pending)++] = j; } } /* Update the pending list and the next time by seeing if there */ /* is anything at the location pointed to by current */ next_time = 1e30; num_pending = output_queue->num_pending; for(i = 0, j = 0; i < num_pending; i++) { output_index = output_queue->pending_index[i]; output = *(output_queue->current[output_index]); /* If nothing in queue at last_step, remove this index from the pending list */ if(! output) { output_queue->pending[output_index] = MIF_FALSE; (output_queue->num_pending)--; } /* else, keep the index and update the next time */ else { output_queue->pending_index[j] = output_queue->pending_index[i]; j++; event_time = output->event_time; if(event_time < next_time) next_time = event_time; } } output_queue->next_time = next_time; /* Update the modified list by looking for any queued events */ /* with posted time > last_time */ for(i = 0, j = 0; i < num_modified; i++) { output_index = output_queue->modified_index[i]; output = *(output_queue->last_step[output_index]); while(output) { if(output->posted_time > output_queue->last_time) break; output = output->next; } if(! output) { output_queue->modified[output_index] = MIF_FALSE; (output_queue->num_modified)--; } else { output_queue->modified_index[j] = output_queue->modified_index[i]; j++; } } } tmpk8ny_4pz/src/xspice/evt/evtplot.c0000644000175000017500000001223313546075722017702 0ustar carstencarsten/*============================================================================ FILE EVTplot.c MEMBER OF process XSPICE Copyright 1992 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 5/7/92 Bill Kuhn MODIFICATIONS SUMMARY This file contains function EVTplot which is used to provide basic plotting of event driven nodes through SPICE3's 'plot' command. INTERFACES void EVTplot() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "ngspice/ngspice.h" //nclude "misc.h" #include "ngspice/evt.h" #include "ngspice/evtudn.h" #include "ngspice/evtproto.h" #include "ngspice/mif.h" #include "ngspice/mifproto.h" /*saj for output */ #include "ngspice/sim.h" #include "ngspice/dvec.h" //#include "ftedata.h" //#include "fteconstant.h" //#include "util.h" #include "ngspice/cpstd.h" /* EVTfindvec() This function is called from FTE/vectors.c:findvec() when a node specified for plotting cannot be located in the analog plot data. It scans the event driven data structures looking for the node, and if found, returns a new 'dvec' structure holding the data to be plotted. The dvec struct is created with it's own v_scale member holding the event time vector for this node since the time vector is not aligned with the analog data points or with other event vectors. The node name supplied as argument can either be a simple node name, or a name of the form (), where is the member of the event-driven structure to be plotted. These member names are defined by the individual "user-defined node" plot_val routines for the node type in question. If the simple node name form is used, the special keyword "all" is supplied to the plot_val routine for the member name. */ struct dvec *EVTfindvec( char *node) /* The node name (and optional member name) */ { char *name; char *member = "all"; char *ptr; int i; int num_nodes; int udn_index; int num_events; Mif_Boolean_t found; Evt_Node_Info_t **node_table; Evt_Node_t *head; Evt_Node_t *event; double *anal_point_vec; double *value_vec; double value = 0; struct dvec *d; struct dvec *scale; /* Exit immediately if event-driven stuff not allocated yet, */ /* or if number of event nodes is zero. */ if(! g_mif_info.ckt) return(NULL); if(! g_mif_info.ckt->evt) return(NULL); if(g_mif_info.ckt->evt->counts.num_nodes == 0) return(NULL); /* Make a copy of the node name. */ /* Do not free this string. It is assigned into the dvec structure below. */ name = MIFcopy(node); /* Convert to all lower case */ strtolower(name); /* Divide into the node name and member name */ for(ptr = name; *ptr != '\0'; ptr++) if(*ptr == '(') break; if(*ptr == '(') { *ptr = '\0'; ptr++; member = ptr; for( ; *ptr != '\0'; ptr++) if(*ptr == ')') break; *ptr = '\0'; } /* Look for node name in the event-driven node list */ num_nodes = g_mif_info.ckt->evt->counts.num_nodes; node_table = g_mif_info.ckt->evt->info.node_table; for(i = 0, found = MIF_FALSE; i < num_nodes; i++) { if(cieq(name, node_table[i]->name)) { found = MIF_TRUE; break; } } if(! found) { tfree(name); return(NULL); } /* Get the UDN type index */ udn_index = node_table[i]->udn_index; /* Count the number of events */ head = g_mif_info.ckt->evt->data.node->head[i]; for(event = head, num_events = 0; event; event = event->next) num_events++; /* Allocate arrays to hold the analysis point and node value vectors */ anal_point_vec = TMALLOC(double, 2 * (num_events + 2)); value_vec = TMALLOC(double, 2 * (num_events + 2)); /* Iterate through the events and fill the arrays. */ /* Note that we create vertical segments every time an event occurs. */ /* Need to modify this in the future to complete the vector out to the */ /* last analysis point... */ for(i = 0, event = head; event; event = event->next) { /* If not first point, put the second value of the horizontal line in the vectors */ if(i > 0) { anal_point_vec[i] = event->step; value_vec[i] = value; i++; } /* Get the next value by calling the appropriate UDN plot_val function */ value = 0.0; g_evt_udn_info[udn_index]->plot_val (event->node_value, member, &value); /* Put the first value of the horizontal line in the vector */ anal_point_vec[i] = event->step; value_vec[i] = value; i++; } /* Allocate dvec structures and assign the vectors into them. */ /* See FTE/OUTinterface.c:plotInit() for initialization example. */ scale = dvec_alloc(MIFcopy("step"), SV_TIME, VF_REAL & ~VF_PERMANENT, i, anal_point_vec); d = dvec_alloc(name, SV_VOLTAGE, VF_REAL & ~VF_PERMANENT, i, value_vec); d->v_scale = scale; /* Return the dvec */ return(d); } tmpk8ny_4pz/src/xspice/evt/evttermi.c0000644000175000017500000003431513546075722020051 0ustar carstencarsten/*============================================================================ FILE EVTtermInsert.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains function EVTtermInsert which is called by MIF_INP2A during the parsing of the input deck. EVTtermInsert is similar to SPICE3's INPtermInsert except that it is used when the node type is event-driven. Calls to this function build the info lists for instances, nodes, outputs, and ports. The completion of the info struct is carried out by EVTinit following the parsing of all instances in the deck. INTERFACES void EVTtermInsert( CKTcircuit *ckt, MIFinstance *fast, char *node_name, char *type_name, int conn_num, int port_num, char **err_msg) REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "ngspice/ngspice.h" //#include "misc.h" #include "ngspice/cktdefs.h" //#include "util.h" #include "ngspice/mif.h" #include "ngspice/evt.h" #include "ngspice/evtudn.h" #include "ngspice/mifproto.h" #include "ngspice/evtproto.h" static void EVTinst_insert( CKTcircuit *ckt, MIFinstance *fast, int *inst_index, char **err_msg); static void EVTnode_insert( CKTcircuit *ckt, MIFinstance *fast, int inst_index, char *node_name, char *type_name, int conn_num, int port_num, int *node_index, int *output_subindex, char **err_msg); static void EVTport_insert( CKTcircuit *ckt, MIFinstance *fast, int inst_index, int node_index, char *node_name, int conn_num, int port_num, int *port_index, char **err_msg); static void EVToutput_insert( CKTcircuit *ckt, MIFinstance *fast, int inst_index, int node_index, int port_index, int output_subindex, int conn_num, int port_num, char **err_msg); /* EVTtermInsert This function is called by MIF_INP2A during the parsing of the input deck. EVTtermInsert is similar to 3C1's INPtermInsert except that it is used when the node type is event-driven. Calls to this function build the info lists for instances, nodes, outputs, and ports. The completion of the info struct is carried out by EVTinit following the parsing of all instances in the deck. */ void EVTtermInsert( CKTcircuit *ckt, /* The circuit structure */ MIFinstance *fast, /* The instance being parsed */ char *node_name, /* The node name */ char *type_name, /* The type of node */ int conn_num, /* The port connection number */ int port_num, /* The sub-port number - 0 for scalar ports */ char **err_msg) /* Returned error message if any */ { int inst_index; int node_index; int port_index; int output_subindex; /* Get the instance index and create new entry in inst */ /* info list if this is a new instance. */ EVTinst_insert(ckt, fast, &inst_index, err_msg); if(*err_msg) return; /* Get the node index and create new entry in node info */ /* list if this is a new node */ EVTnode_insert(ckt, fast, inst_index, node_name, type_name, conn_num, port_num, &node_index, &output_subindex, err_msg); if(*err_msg) return; /* Create new entry in port info list and return port index */ EVTport_insert(ckt, fast, inst_index, node_index, node_name, conn_num, port_num, &port_index, err_msg); if(*err_msg) return; /* Create new entry in output info list if appropriate */ if(fast->conn[conn_num]->is_output) { EVToutput_insert(ckt, fast, inst_index, node_index, port_index, output_subindex, conn_num, port_num, err_msg); if(*err_msg) return; } } /* EVTinst_insert This function locates or creates a new entry for the specified instance in the event-driven ``info'' structures during parsing. */ static void EVTinst_insert( CKTcircuit *ckt, /* The circuit structure */ MIFinstance *fast, /* The instance being parsed */ int *inst_index, /* The index found or added */ char **err_msg) /* Error message if any */ { Mif_Boolean_t found; int index; Evt_Inst_Info_t *inst; Evt_Inst_Info_t **inst_ptr; NG_IGNORE(err_msg); /* Scan list of instances in event structure to see if already there */ /* and get the index */ found = MIF_FALSE; index = 0; inst = ckt->evt->info.inst_list; inst_ptr = &(ckt->evt->info.inst_list); while(inst) { if(inst->inst_ptr == fast) { found = MIF_TRUE; break; } else { index++; inst_ptr = &(inst->next); inst = inst->next; } } /* If not found, create a new entry in list and increment the */ /* instance count in the event structure */ if(! found) { *inst_ptr = TMALLOC(Evt_Inst_Info_t, 1); inst = *inst_ptr; inst->next = NULL; inst->inst_ptr = fast; index = ckt->evt->counts.num_insts; (ckt->evt->counts.num_insts)++; } /* Record the inst index in the MIFinstance structure and return it */ fast->inst_index = index; *inst_index = index; } /* EVTnode_insert This function locates or creates a new entry for the specified node in the event-driven ``info'' structures during parsing. */ static void EVTnode_insert( CKTcircuit *ckt, /* The circuit structure */ MIFinstance *fast, /* The instance being parsed */ int inst_index, /* The index of inst in evt structures */ char *node_name, /* The node name */ char *type_name, /* The node type specified */ int conn_num, /* The port connection number */ int port_num, /* The sub-port number - 0 if scalar port */ int *node_index, /* The node index found or added */ int *output_subindex, /* The output number on this node */ char **err_msg) /* Error message text if any */ { int i; int udn_index=0; Mif_Boolean_t found; int index; Evt_Node_Info_t *node; Evt_Node_Info_t **node_ptr; Evt_Inst_Index_t *inst; Evt_Inst_Index_t **inst_ptr; /* *************************************** */ /* Get and check the node type information */ /* *************************************** */ /* Scan the list of user-defined node types and get the index */ found = MIF_FALSE; for(i = 0; i < g_evt_num_udn_types; i++) { if(strcmp(type_name, g_evt_udn_info[i]->name) == 0) { udn_index = i; found = MIF_TRUE; break; } } /* Report error if not recognized */ if(! found) { *err_msg = "Unrecognized connection type"; return; } /* If inverted, check to be sure invert function exists for type */ if(fast->conn[conn_num]->port[port_num]->invert) { if(g_evt_udn_info[udn_index]->invert == NULL) { *err_msg = "Connection type cannot be inverted"; return; } } /* ******************************************* */ /* Find/create entry in event-driven node list */ /* ******************************************* */ /* Scan list of nodes in event structure to see if already there */ /* and get the index */ found = MIF_FALSE; index = 0; node = ckt->evt->info.node_list; node_ptr = &(ckt->evt->info.node_list); while(node) { if(strcmp(node_name, node->name) == 0) { found = MIF_TRUE; break; } else { index++; node_ptr = &(node->next); node = node->next; } } /* If found, verify that connection type is same as type of node */ if(found) { if(udn_index != node->udn_index) { *err_msg = "Node cannot have two different types"; return; } } /* If not found, create a new entry in list and increment the */ /* node count in the event structure */ if(! found) { *node_ptr = TMALLOC(Evt_Node_Info_t, 1); node = *node_ptr; node->next = NULL; node->name = MIFcopy(node_name); node->udn_index = udn_index; index = ckt->evt->counts.num_nodes; (ckt->evt->counts.num_nodes)++; } /* ******************************************* */ /* Update remaining items in node list struct */ /* ******************************************* */ /* Update flag on node that indicates if inversion is used by any */ /* instance inputs */ if(fast->conn[conn_num]->is_input) if(! node->invert) node->invert = fast->conn[conn_num]->port[port_num]->invert; /* Increment counts of ports, outputs connected to node */ (node->num_ports)++; if(fast->conn[conn_num]->is_output) (node->num_outputs)++; /* If this is an input, add instance to list if not already there */ if(fast->conn[conn_num]->is_input) { found = MIF_FALSE; inst = node->inst_list; inst_ptr = &(node->inst_list); while(inst) { if(inst_index == inst->index) { found = MIF_TRUE; break; } else { inst_ptr = &(inst->next); inst = inst->next; } } if(! found) { (node->num_insts)++; *inst_ptr = TMALLOC(Evt_Inst_Index_t, 1); inst = *inst_ptr; inst->next = NULL; inst->index = inst_index; } } /* Record the node index in the MIFinstance structure */ fast->conn[conn_num]->port[port_num]->evt_data.node_index = index; /* Return the node index */ *node_index = index; if(fast->conn[conn_num]->is_output) *output_subindex = node->num_outputs - 1; else *output_subindex = 0; /* just for safety - shouldn't need this */ } /* EVTport_insert This function locates or creates a new entry for the specified port in the event-driven ``info'' structures during parsing. */ static void EVTport_insert( CKTcircuit *ckt, /* The circuit structure */ MIFinstance *fast, /* The instance being parsed */ int inst_index, /* The index of inst in evt structures */ int node_index, /* The index of the node in evt structures */ char *node_name, /* The node name */ int conn_num, /* The port connection number */ int port_num, /* The sub-port number - 0 if scalar port */ int *port_index, /* The port index found or added */ char **err_msg) /* Error message text if any */ { Evt_Port_Info_t *port; Evt_Port_Info_t **port_ptr; int index; NG_IGNORE(err_msg); /* Find the end of the port info list */ port = ckt->evt->info.port_list; port_ptr = &(ckt->evt->info.port_list); index = 0; while(port) { port_ptr = &(port->next); port = port->next; index++; } /* Update the port count and create a new entry in the list */ (ckt->evt->counts.num_ports)++; *port_ptr = TMALLOC(Evt_Port_Info_t, 1); port = *port_ptr; /* Fill in the elements */ port->next = NULL; port->inst_index = inst_index; port->node_index = node_index; port->node_name = MIFcopy(node_name); port->inst_name = MIFcopy(fast->MIFname); port->conn_name = MIFcopy(fast->conn[conn_num]->name); port->port_num = port_num; /* Record the port index in the MIFinstance structure */ fast->conn[conn_num]->port[port_num]->evt_data.port_index = index; /* Return the port index */ *port_index = index; } /* EVToutput_insert This function locates or creates a new entry for the specified output in the event-driven ``info'' structures during parsing. */ static void EVToutput_insert( CKTcircuit *ckt, /* The circuit structure */ MIFinstance *fast, /* The instance being parsed */ int inst_index, /* The index of inst in evt structures */ int node_index, /* The index of the node in evt structures */ int port_index, /* The index of the port in the evt structures */ int output_subindex, /* The output on this node */ int conn_num, /* The port connection number */ int port_num, /* The sub-port number - 0 if scalar port */ char **err_msg) /* Error message text if any */ { Evt_Output_Info_t *output; Evt_Output_Info_t **output_ptr; int index; NG_IGNORE(err_msg); /* Find the end of the port info list */ output = ckt->evt->info.output_list; output_ptr = &(ckt->evt->info.output_list); index = 0; while(output) { output_ptr = &(output->next); output = output->next; index++; } /* Update the port count and create a new entry in the list */ (ckt->evt->counts.num_outputs)++; *output_ptr = TMALLOC(Evt_Output_Info_t, 1); output = *output_ptr; /* Fill in the elements */ output->next = NULL; output->inst_index = inst_index; output->node_index = node_index; output->port_index = port_index; output->output_subindex = output_subindex; /* Record the output index and subindex in the MIFinstance structure */ fast->conn[conn_num]->port[port_num]->evt_data.output_index = index; fast->conn[conn_num]->port[port_num]->evt_data.output_subindex = output_subindex; } tmpk8ny_4pz/src/xspice/evt/evtqueue.c0000644000175000017500000001547513546075722020063 0ustar carstencarsten/*============================================================================ FILE EVTqueue.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains functions that place new events into the output and instance queues. INTERFACES void EVTqueue_output( CKTcircuit *ckt, int output_index, int udn_index, Evt_Output_Event_t *new_event, double posted_time, double event_time) void EVTqueue_inst( CKTcircuit *ckt, int inst_index, double posted_time, double event_time) REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" //#include "util.h" #include "ngspice/mif.h" #include "ngspice/evt.h" #include "ngspice/evtudn.h" #include "ngspice/evtproto.h" /* EVTqueue_output This function places the specified output event onto the output queue. It is called by EVTload during a transient analysis. The linked list in the queue for the specified output is searched beginning at the current head of the pending events to find the location at which to insert the new event. The events are ordered in the list by event_time. If the event is placed before the end of the list, subsequent events are removed from the list by marking them as 'removed' and recording the time of removal. This allows efficient backup of the state of the queue if a subsequent analog timestep fails. */ void EVTqueue_output( CKTcircuit *ckt, /* The circuit structure */ int output_index, /* The output in question */ int udn_index, /* The associated user-defined node type */ Evt_Output_Event_t *new_event, /* The event to queue */ double posted_time, /* The current time */ double event_time) /* The time the event should happen */ { Evt_Output_Queue_t *output_queue; Evt_Output_Event_t **here; Evt_Output_Event_t *next; Mif_Boolean_t splice; NG_IGNORE(udn_index); /* Get pointers for fast access */ output_queue = &(ckt->evt->queue.output); /* Put the times into the event struct */ new_event->event_time = event_time; new_event->posted_time = posted_time; new_event->removed = MIF_FALSE; /* Update next_time in output queue */ if((output_queue->num_pending <= 0) || (event_time < output_queue->next_time)) output_queue->next_time = event_time; /* Find location at which to insert event */ splice = MIF_FALSE; here = output_queue->current[output_index]; while(*here) { if(event_time <= (*here)->event_time) { splice = MIF_TRUE; break; } here = &((*here)->next); } /* If needs to be spliced into middle of existing list */ if(splice) { /* splice it in */ next = *here; *here = new_event; new_event->next = next; /* mark later events as removed */ while(next) { if(! next->removed) { next->removed = MIF_TRUE; next->removed_time = posted_time; } next = next->next; } } /* else, just put it at the end */ else { *here = new_event; new_event->next = NULL; } /* Add to the list of outputs modified since last accepted timestep */ if(! output_queue->modified[output_index]) { output_queue->modified[output_index] = MIF_TRUE; output_queue->modified_index[(output_queue->num_modified)++] = output_index; } /* Add to the list of outputs with events pending */ if(! output_queue->pending[output_index]) { output_queue->pending[output_index] = MIF_TRUE; output_queue->pending_index[(output_queue->num_pending)++] = output_index; } } /* EVTqueue_inst This function places the specified inst event onto the inst queue. The linked list in the queue for the specified inst is searched beginning at the current head of the pending events to find the location at which to insert the new event. The events are ordered in the list by event_time. */ void EVTqueue_inst( CKTcircuit *ckt, /* The circuit structure */ int inst_index, /* The instance in question */ double posted_time, /* The current time */ double event_time) /* The time the event should happen */ { Evt_Inst_Queue_t *inst_queue; Evt_Inst_Event_t **here; Evt_Inst_Event_t *new_event; Evt_Inst_Event_t *next; Mif_Boolean_t splice, malloced = FALSE; /* Get pointers for fast access */ inst_queue = &(ckt->evt->queue.inst); /* Update next_time in inst queue */ if((inst_queue->num_pending <= 0) || (event_time < inst_queue->next_time)) inst_queue->next_time = event_time; /* Create a new event or get one from the free list and copy in data */ if(inst_queue->free[inst_index]) { new_event = inst_queue->free[inst_index]; inst_queue->free[inst_index] = new_event->next; } else { new_event = TMALLOC(Evt_Inst_Event_t, 1); malloced = TRUE; } new_event->event_time = event_time; new_event->posted_time = posted_time; /* Find location at which to insert event */ splice = MIF_FALSE; here = inst_queue->current[inst_index]; while(*here) { /* If there's an event with the same time, don't duplicate it */ if(event_time == (*here)->event_time) { if(malloced) tfree(new_event); return; } else if(event_time < (*here)->event_time) { splice = MIF_TRUE; break; } here = &((*here)->next); } /* If needs to be spliced into middle of existing list */ if(splice) { /* splice it in */ next = *here; *here = new_event; new_event->next = next; } /* else, just put it at the end */ else { *here = new_event; new_event->next = NULL; } /* Add to the list of insts modified since last accepted timestep */ if(! inst_queue->modified[inst_index]) { inst_queue->modified[inst_index] = MIF_TRUE; inst_queue->modified_index[(inst_queue->num_modified)++] = inst_index; } /* Add to the list of insts with events pending */ if(! inst_queue->pending[inst_index]) { inst_queue->pending[inst_index] = MIF_TRUE; inst_queue->pending_index[(inst_queue->num_pending)++] = inst_index; } } tmpk8ny_4pz/src/xspice/evt/evtiter.c0000644000175000017500000002160513546075722017672 0ustar carstencarsten/*============================================================================ FILE EVTiter.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains function EVTiter which iterates through event-driven outputs and instances until the outputs no longer change. INTERFACES int EVTiter(CKTcircuit *ckt) REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "ngspice/ngspice.h" //#include "misc.h" #include "ngspice/cktdefs.h" //#include "util.h" #include "ngspice/sperror.h" #include "ngspice/mif.h" #include "ngspice/evt.h" #include "ngspice/enh.h" #include "ngspice/evtudn.h" #include "ngspice/evtproto.h" /* EVTiter This function iterates through event-driven outputs and instances until the outputs no longer change. The general algorithm used is: Do: Scan list of changed outputs Put items on the node queue 'to_eval' list for each changed output. Scan list of changed nodes Resolve nodes with multiple outputs posted. Create inverted state for nodes with attached inverted inputs. Put items on the instance queue 'to_call' list for each changed node. If transient analysis, put state of the node into the node data structure. Scan instance to_call list Call EVTload for each instance on list. While there are changed outputs */ int EVTiter( CKTcircuit *ckt) /* the circuit structure */ { int i; int num_changed; int num_to_eval; int num_to_call; int output_index; /* int output_subindex;*/ int inst_index; int node_index; int port_index; int num_outputs; int udn_index; int passes; Evt_Ckt_Data_t *evt; Evt_Output_Queue_t *output_queue; Evt_Node_Queue_t *node_queue; Evt_Inst_Queue_t *inst_queue; Evt_Output_Info_t **output_table; Evt_Node_Info_t **node_table; Evt_Port_Info_t **port_table; Evt_Inst_Index_t *inst_list; Evt_Node_Data_t *node_data; Evt_Node_t *rhs; Evt_Node_t *rhsold; Evt_Node_t *node; Mif_Boolean_t equal; char *err_msg; /* Get temporary pointers for fast access */ evt = ckt->evt; output_queue = &(evt->queue.output); node_queue = &(evt->queue.node); inst_queue = &(evt->queue.inst); output_table = evt->info.output_table; node_table = evt->info.node_table; port_table = evt->info.port_table; node_data = evt->data.node; rhs = node_data->rhs; rhsold = node_data->rhsold; /* Loop until no more output change, or too many passes through loop */ for(passes = 0; passes < evt->limits.max_event_passes; passes++) { /* Create list of nodes to evaluate from list of changed outputs */ num_changed = output_queue->num_changed; for(i = 0; i < num_changed; i++) { /* Get index of node that output is connected to */ output_index = output_queue->changed_index[i]; node_index = output_table[output_index]->node_index; /* If not already on list of nodes to evaluate, add it */ if(! node_queue->to_eval[node_index]) { node_queue->to_eval[node_index] = MIF_TRUE; node_queue->to_eval_index[(node_queue->num_to_eval)++] = node_index; } /* Reset the changed flag on the output queue */ output_queue->changed[output_index] = MIF_FALSE; } output_queue->num_changed = 0; /* Evaluate nodes and for any which have changed, enter */ /* the instances that receive inputs from them on the list */ /* of instances to call */ num_to_eval = node_queue->num_to_eval; for(i = 0; i < num_to_eval; i++) { /* Get the node index, udn index and number of outputs */ node_index = node_queue->to_eval_index[i]; udn_index = node_table[node_index]->udn_index; num_outputs = node_table[node_index]->num_outputs; /* Resolve the node value if multiple outputs on it */ /* and test if new node value is different than old value */ if(num_outputs > 1) { g_evt_udn_info[udn_index]->resolve (num_outputs, rhs[node_index].output_value, rhs[node_index].node_value); g_evt_udn_info[udn_index]->compare (rhs[node_index].node_value, rhsold[node_index].node_value, &equal); if(! equal) { g_evt_udn_info[udn_index]->copy (rhs[node_index].node_value, rhsold[node_index].node_value); } } /* Else, load function has already determined that they were */ /* not equal */ else equal = MIF_FALSE; /* If not equal, make inverted copy in rhsold if */ /* needed, and place indexes of instances with inputs connected */ /* to the node in the to_call list of inst queue */ if(! equal) { if(node_table[node_index]->invert) { g_evt_udn_info[udn_index]->copy (rhsold[node_index].node_value, rhsold[node_index].inverted_value); g_evt_udn_info[udn_index]->invert (rhsold[node_index].inverted_value); } inst_list = node_table[node_index]->inst_list; while(inst_list) { inst_index = inst_list->index; if(! inst_queue->to_call[inst_index]) { inst_queue->to_call[inst_index] = MIF_TRUE; inst_queue->to_call_index[(inst_queue->num_to_call)++] = inst_index; } inst_list = inst_list->next; } /* end while instances with inputs on node */ } /* end if not equal */ /* If transient analysis mode */ /* Save the node data onto the node results list and mark */ /* that it has been modified, even if the */ /* resolved node value has not changed */ if(g_mif_info.circuit.anal_type == MIF_TRAN) { node = *(node_data->tail[node_index]); node_data->tail[node_index] = &(node->next); EVTnode_copy(ckt, node_index, &(rhsold[node_index]), &(node->next)); node->next->step = g_mif_info.circuit.evt_step; if(! node_data->modified[node_index]) { node_data->modified[node_index] = MIF_TRUE; node_data->modified_index[(node_data->num_modified)++] = node_index; } } /* Reset the to_eval flag on the node queue */ node_queue->to_eval[node_index] = MIF_FALSE; } /* end for number of nodes to evaluate */ node_queue->num_to_eval = 0; /* Call the instances with inputs on nodes that have changed */ num_to_call = inst_queue->num_to_call; for(i = 0; i < num_to_call; i++) { inst_index = inst_queue->to_call_index[i]; inst_queue->to_call[inst_index] = MIF_FALSE; EVTload(ckt, inst_index); } inst_queue->num_to_call = 0; /* Record statistics */ if(g_mif_info.circuit.anal_type == MIF_DC) (ckt->evt->data.statistics->op_event_passes)++; /* If no outputs changed, iteration is over, so return with success! */ if(output_queue->num_changed == 0) return(0); } /* end for */ /* Too many passes through loop, report problems and exit with error */ err_msg = TMALLOC(char, 10000); for(i = 0; i < output_queue->num_changed; i++) { output_index = output_queue->changed_index[i]; port_index = output_table[output_index]->port_index; sprintf(err_msg, "\n Instance: %s\n Connection: %s\n Port: %d", port_table[port_index]->inst_name, port_table[port_index]->conn_name, port_table[port_index]->port_num); ENHreport_conv_prob(ENH_EVENT_NODE, port_table[port_index]->node_name, err_msg); } FREE(err_msg); SPfrontEnd->IFerrorf (ERR_WARNING, "Too many iteration passes in event-driven circuits"); return(E_ITERLIM); } tmpk8ny_4pz/src/xspice/evt/evtcall_hybrids.c0000644000175000017500000000304613546075722021365 0ustar carstencarsten/*============================================================================ FILE EVTcall_hybrids.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains function EVTcall_hybrids which calls all models which have both analog and event-driven ports. It is called following successful evaluation of an analog iteration attempt to allow events to be scheduled by the hybrid models. The 'CALL_TYPE' is set to 'EVENT_DRIVEN' when the model is called from this function. INTERFACES void EVTcall_hybrids(CKTcircuit *ckt) REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/evt.h" #include "ngspice/evtproto.h" /* EVTcall_hybrids This function calls all the hybrid instances. It is called following the successful evaluation of an analog iteration. */ void EVTcall_hybrids( CKTcircuit *ckt) /* the main circuit structure */ { int i; int num_hybrids; int *hybrid_index; /* Get needed data for fast access */ num_hybrids = ckt->evt->counts.num_hybrids; hybrid_index = ckt->evt->info.hybrid_index; /* Call EVTload for all hybrids */ for(i = 0; i < num_hybrids; i++) EVTload(ckt, hybrid_index[i]); } tmpk8ny_4pz/src/xspice/evt/evtnext_time.c0000644000175000017500000000360513546075722020723 0ustar carstencarsten/*============================================================================ FILE EVTnext_time.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains function EVTnext_time which determines and returns the time of the next scheduled event on the inst and output queues. INTERFACES double EVTnext_time(CKTcircuit *ckt) REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" //#include "util.h" #include "ngspice/mif.h" #include "ngspice/evt.h" #include "ngspice/evtproto.h" /* EVTnext_time Get the next event time as the minimum of the next times in the inst and output queues. If no next time in either, return machine infinity. */ double EVTnext_time( CKTcircuit *ckt) /* The circuit structure */ { double next_time; Evt_Inst_Queue_t *inst_queue; Evt_Output_Queue_t *output_queue; /* Initialize next time to machine infinity */ next_time = 1e30; /* Get pointers for fast access */ inst_queue = &(ckt->evt->queue.inst); output_queue = &(ckt->evt->queue.output); /* If anything pending in inst queue, set next time */ /* to minimum of itself and the inst queue next time */ if(inst_queue->num_pending) if(inst_queue->next_time < next_time) next_time = inst_queue->next_time; /* If anything pending in output queue, set next time */ /* to minimum of itself and the output queue next time */ if(output_queue->num_pending) if(output_queue->next_time < next_time) next_time = output_queue->next_time; return(next_time); } tmpk8ny_4pz/src/xspice/enh/0000755000175000017500000000000013546075722016014 5ustar carstencarstentmpk8ny_4pz/src/xspice/enh/Makefile.am0000644000175000017500000000047313546075722020054 0ustar carstencarsten## Process this file with automake to produce Makefile.in # # JW 3/9/01 - had a go and makeing an autoconf script. noinst_LTLIBRARIES = libenhxsp.la libenhxsp_la_SOURCES = \ enh.c \ enhtrans.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/xspice/enh/enh.c0000644000175000017500000000374413546075722016742 0ustar carstencarsten/*============================================================================ FILE ENH.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains routines used for general enhancements made to the Berkeley SPICE3 core. INTERFACES ENHreport_conv_prob() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ /*=== INCLUDE FILES ===*/ #include #include "ngspice/enh.h" /* ENHreport_conv_prob() Report convergence problem messages from nodes, branch currents, or instances. This function is setup to allow providing the SI with information identifying the type of convergence problem. For now, it simply writes to stdout. */ void ENHreport_conv_prob( Enh_Conv_Source_t type, /* node, branch, or instance */ char *name, /* the name of the node/branch/instance */ char *msg) /* an optional message */ { char *type_str; char *msg_str; /* Convert the type enum to a string for printing */ switch(type) { case ENH_ANALOG_NODE: case ENH_EVENT_NODE: type_str = "node"; break; case ENH_ANALOG_BRANCH: type_str = "branch current"; break; case ENH_ANALOG_INSTANCE: case ENH_EVENT_INSTANCE: case ENH_HYBRID_INSTANCE: type_str = "instance"; break; default: printf("\nERROR: Internal error in ENHreport_conv_prob - impossible type\n"); return; } /* Check for msg == NULL and turn into null string */ if(msg) msg_str = msg; else msg_str = ""; /* Print the convergence problem report */ printf("\nWARNING: Convergence problems at %s (%s). %s\n", type_str, name, msg_str); } /* ENHreport_conv_prob */ tmpk8ny_4pz/src/xspice/enh/enhtrans.c0000644000175000017500000003500513546075722020005 0ustar carstencarsten/* =========================================================================== FILE ENHtranslate_poly.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS 7/24/2012 Holger Vogt Update to error messages SUMMARY This file contains functions used by the simulator in calling the internal "poly" code model to substitute for SPICE 2G6 style poly sources found in the input deck. INTERFACES ENHtranslate_poly() REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ /*=== FUNCTION PROTOTYPES ===*/ /*=== INCLUDE FILES ===*/ /* #include "prefix.h" */ #include "ngspice/ngspice.h" //#include "misc.h" #include "ngspice/fteinp.h" #include "ngspice/enh.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/mifproto.h" /* #include "suffix.h" */ /*=== FUNCTION PROTOTYPES ===*/ static int needs_translating(char *card); static int count_tokens(char *card); static char *two2three_translate(char *orig_card, char **inst_card, char **mod_card); static int get_poly_dimension(char *card); /* ENHtranslate_poly() Translate all 2G6 style polynomial controlled sources in the deck to new polynomial controlled source code model syntax. */ /*---------------------------------------------------------------------*/ /* ENHtranslate_poly takes (a pointer to) the SPICE deck as argument. */ /* It loops through the deck, and translates all POLY statements */ /* in dependent sources into a .model conformant with the needs of */ /* XSPICE. It splices the new statements in the deck, and comments */ /* out the old dependent source. */ /* It returns (a pointer to) the processed deck. */ /*---------------------------------------------------------------------*/ struct card * ENHtranslate_poly( struct card *deck) { /* Linked list of lines in input deck */ struct card *d; struct card *l1; struct card *l2; char *card; /* Iterate through each card in the deck and translate as needed */ for(d = deck; d; d = d->nextcard) { #ifdef TRACE /* SDB debug statement */ printf("In ENHtranslate_poly, now examining card %s . . . \n", d->line); #endif /* If doesn't need to be translated, continue to next card */ if(! needs_translating(d->line)) { #ifdef TRACE /* SDB debug statement */ /* printf("Card doesn't need translating. Continuing . . . .\n"); */ #endif continue; } #ifdef TRACE /* SDB debug statement */ printf("Found a card to translate . . . .\n"); #endif /* Create two new line structs and splice into deck */ l1 = TMALLOC(struct card, 1); l2 = TMALLOC(struct card, 1); l2->nextcard = d->nextcard; l1->nextcard = l2; d->nextcard = l1; /* PN 2004: Add original linenumber to ease the debug process * for malfromned netlist */ l1->linenum = d->linenum; l2->linenum = d->linenum; /* Create the translated cards */ d->error = two2three_translate(d->line, &(l1->line), &(l2->line)); /* Comment out the original line */ card = TMALLOC(char, strlen(d->line) + 2); strcpy(card,"*"); strcat(card, d->line); tfree(d->line); d->line = card; #ifdef TRACE /* SDB debug statement */ printf("In ENHtranslate_poly, translated card = %s . . . \n", card); #endif /* Advance deck pointer to last line added */ d = l2; } /* Return head of deck */ return(deck); } /* ENHtranslate_poly */ /*---------------------------------------------------------------------*/ /* needs_translating() Test to see if card needs translating. Return true if card defines an e,f,g, or h controlled source, has too many tokens to be a simple linear dependent source and contains the 'poly' token. Otherwise return false. */ static int needs_translating( char *card) /* the card text to check */ { #ifdef TRACE /* SDB debug statement */ /* printf("In needs_translating, examining card %s . . . \n", card); */ #endif switch(*card) { case 'e': case 'E': case 'g': case 'G': if(count_tokens(card) > 6) return(1); else return(0); case 'f': case 'F': case 'h': case 'H': if(count_tokens(card) > 5) return(1); else return(0); default: return(0); } } /* needs_translating */ /*---------------------------------------------------------------------*/ /* count_tokens() Count and return the number of tokens on the card. */ static int count_tokens( char *card) /* the card text on which to count tokens */ { int i; bool has_poly = FALSE; /* Get and count tokens until end of line reached and find the "poly" token */ for(i = 0; *card != '\0'; i++) { char *newtoken; newtoken = MIFgettok(&card); if ((i == 3) && ciprefix(newtoken, "poly")) has_poly = TRUE; txfree(newtoken); } /* no translation, if 'poly' not in the line */ if (!has_poly) i=0; return(i); } /* count_tokens */ /********************************************************************/ /*==================================================================== two2three_translate() Do the syntax translation of the 2G6 source to the new code model syntax. The translation proceeds according to the template below. -------------------------------------------- VCVS: ename N+ N- POLY(dim) NC+ NC- P0 P1 P2 . . . N+ N- = outputs NC+ NC- = inputs aname %vd[NC+ NC-] %vd[N+ N-] pname .model pname spice2poly(coef=P0 P1 P2 . . . ) %vd[NC+ NC-] = inputs %vd[N+ N-] = outputs -------------------------------------------- CCCS fname N+ N- POLY(dim) Vname P0 P1 P2 . . . N+ N- = outputs Vname = input voltage source (measures current) aname %vnam[Vname] %id[N+ N-] pname .model pname spice2poly(coef=P0 P1 P2 . . . ) %vnam[Vname] = input %id[N+ N-] = output -------------------------------------------- VCCS gname N+ N- POLY(dim) NC+ NC- P0 P1 P2 , , , N+ N- = outputs NC+ NC- = inputs aname %vd[NC+ NC-] %id[N+ N-] pname .model pname spice2poly(coef=P0 P1 P2 . . . ) %vd[NC+ NC-] = inputs %id[N+ N-] = outputs -------------------------------------------- CCVS hname N+ N- POLY(dim) Vname P0 P1 P2 . . . N+ N- = outputs Vname = input voltage source (measures current) aname %vnam[Vname] %vd[N+ N-] pname .model pname spice2poly(coef=P0 P1 P2 . . . ) %vnam[Vname] = input %vd[N+ N-] = output ====================================================================*/ /********************************************************************/ static char *two2three_translate( char *orig_card, /* the original untranslated card */ char **inst_card, /* the instance card created by the translation */ char **mod_card) /* the model card created by the translation */ { int dim; int num_tokens; int num_conns; int num_coefs; size_t inst_card_len; size_t mod_card_len; int i; char type; char *name; char **out_conn; char **in_conn; char **coef; char *card; #ifdef TRACE /* SDB debug statement */ printf("In two2three_translate, card to translate = %s . . .\n", orig_card); #endif /* Put the first character into local storage for checking type */ type = *orig_card; /* Count the number of tokens for use in parsing */ num_tokens = count_tokens(orig_card); /* Determine the dimension of the poly source */ /* Note that get_poly_dimension returns 0 for "no poly", -1 for invalid dimensiion, otherwise returns numeric value of POLY */ dim = get_poly_dimension(orig_card); if(dim == -1) { char *errmsg; printf("ERROR in two2three_translate -- Argument to poly() is not an integer\n"); printf("ERROR while parsing: %s\n", orig_card); errmsg = copy("ERROR in two2three_translate -- Argument to poly() is not an integer\n"); *inst_card = copy(" * ERROR Argument to poly() is not an integer"); *mod_card = copy(" * ERROR Argument to poly() is not an integer"); return errmsg; } /* Compute number of output connections based on type and dimension */ switch(type) { case 'E': case 'e': case 'G': case 'g': num_conns = 2 * dim; break; default: num_conns = dim; } /* Compute number of coefficients. Return error if less than one. */ if(dim == 0) num_coefs = num_tokens - num_conns - 3; /* no POLY token */ else num_coefs = num_tokens - num_conns - 5; /* POLY token present */ #ifdef TRACE /* SDB debug statement */ printf("In two2three_translate, num_tokens=%d, num_conns=%d, num_coefs=%d . . .\n", num_tokens, num_conns, num_coefs); #endif if(num_coefs < 1) { char *errmsg; printf("ERROR - Number of connections differs from poly dimension\n"); printf("ERROR while parsing: %s\n", orig_card); errmsg = copy("ERROR in two2three_translate -- Argument to poly() is not an integer\n"); *inst_card = copy("* ERROR - Number of connections differs from poly dimension\n"); *mod_card = copy(" * ERROR - Number of connections differs from poly dimension\n"); return(errmsg); } /* Split card into name, output connections, input connections, */ /* and coefficients */ card = orig_card; name = MIFgettok(&card); /* Get output connections (2 netnames) */ out_conn = TMALLOC(char *, 2); for(i = 0; i < 2; i++) out_conn[i] = MIFgettok(&card); /* check for POLY, and ignore it if present */ if (dim > 0) { #ifdef TRACE /* SDB debug statement */ printf("In two2three_translate, found poly!!! dim = %d \n", dim); #endif txfree(MIFgettok(&card)); /* read and discard POLY */ txfree(MIFgettok(&card)); /* read and discard dimension */ } /* Get input connections (2 netnames per dimension) */ in_conn = TMALLOC(char *, num_conns); for(i = 0; i < num_conns; i++) in_conn[i] = MIFgettok(&card); /* The remainder of the line are the poly coeffs. */ coef = TMALLOC(char *, num_coefs); for(i = 0; i < num_coefs; i++) coef[i] = MIFgettok(&card); /* Compute the size needed for the new cards to be created */ /* Allow a fair amount of extra space for connection types, etc. */ /* to be safe... */ inst_card_len = 70; inst_card_len += 2 * (strlen(name) + 1); for(i = 0; i < 2; i++) inst_card_len += strlen(out_conn[i]) + 1; for(i = 0; i < num_conns; i++) inst_card_len += strlen(in_conn[i]) + 1; mod_card_len = 70; mod_card_len += strlen(name) + 1; for(i = 0; i < num_coefs; i++) mod_card_len += strlen(coef[i]) + 1; /* Allocate space for the cards and write them into the strings */ *inst_card = TMALLOC(char, inst_card_len); *mod_card = TMALLOC(char, mod_card_len); strcpy(*inst_card, "a$poly$"); sprintf(*inst_card + strlen(*inst_card), "%s ", name); /* Write input nets/sources */ if((type == 'e') || (type == 'g') || (type == 'E') || (type == 'G')) /* These input port types are vector & need a [. */ sprintf(*inst_card + strlen(*inst_card), "%%vd [ "); else /* This input port type is scalar */ sprintf(*inst_card + strlen(*inst_card), "%%vnam [ "); for(i = 0; i < num_conns; i++) sprintf(*inst_card + strlen(*inst_card), "%s ", in_conn[i]); sprintf(*inst_card + strlen(*inst_card), "] "); /* Write output nets */ if((type == 'e') || (type == 'h') || (type == 'E') || (type == 'H')) sprintf(*inst_card + strlen(*inst_card), "%%vd ( "); else sprintf(*inst_card + strlen(*inst_card), "%%id ( "); for(i = 0; i < 2; i++) sprintf(*inst_card + strlen(*inst_card), "%s ", out_conn[i]); sprintf(*inst_card + strlen(*inst_card), ") "); /* Write model name */ sprintf(*inst_card + strlen(*inst_card), "a$poly$%s", name); /* Now create model card */ sprintf(*mod_card, ".model a$poly$%s spice2poly coef = [ ", name); for(i = 0; i < num_coefs; i++) sprintf(*mod_card + strlen(*mod_card), "%s ", coef[i]); sprintf(*mod_card + strlen(*mod_card), "]"); #ifdef TRACE /* SDB debug statement */ printf("In two2three_translate, translated statements:\n%s \n%s \n", *inst_card, *mod_card); #endif /* Free the temporary space */ FREE(name); name = NULL; for(i = 0; i < 2; i++) { FREE(out_conn[i]); out_conn[i] = NULL; } FREE(out_conn); out_conn = NULL; for(i = 0; i < num_conns; i++) { FREE(in_conn[i]); in_conn[i] = NULL; } FREE(in_conn); in_conn = NULL; for(i = 0; i < num_coefs; i++) { FREE(coef[i]); coef[i] = NULL; } FREE(coef); coef = NULL; /* Return NULL to indicate no error */ return(NULL); } /* two2three_translate */ /*--------------------------------------------------------------------*/ /* get_poly_dimension() Get the poly source dimension from the token immediately following the 'poly' if any. Return values changed by SDB on 5.23.2003 to be: If "poly" is not present, return 0. If the dimension token following "poly" is invalid, return -1. Otherwise, return the integer dimension. */ static int get_poly_dimension( char *card) /* the card text */ { int i; int dim; char *local_tok; /* Skip over name and output connections */ for(i = 0; i < 3; i++) txfree(MIFgettok(&card)); /* Check the next token to see if it is "poly" */ /* If not, return 0 */ local_tok = MIFgettok(&card); if( strcmp(local_tok, "poly") && strcmp(local_tok, "POLY") ) { /* check that local_tok is *not* poly */ FREE(local_tok); local_tok = NULL; return(0); } FREE(local_tok); /* Must have been "poly", so next line must be a number */ /* Try to convert it. If successful, return the number */ /* else, return -1 to indicate an error... */ local_tok = MIFgettok(&card); dim = atoi(local_tok); FREE(local_tok); if (dim > 0) { return(dim); } else { return(-1); } } /* get_poly_dimension */ tmpk8ny_4pz/src/xspice/README0000644000175000017500000000501513546075722016123 0ustar carstencarstenngspice Xspice code model support. 2012 05 06 -------------------------------------- Use configure the flag --enable-xspice to compile xspice support in, when you run the ./configure script. This creates a new command, "codemodel", which you can use to load a codemodel. The command codemodel attempts to load all the codemodels specified in the arguments, eg "ngspice 1 ->codemodel /usr/lib/ngspice/analog.cm /usr/lib/ngspice/spice2poly.cm" ( note: the codemodel path must begin with ./ or / to work ) The codemodels are automatically compiled and then installed in ${prefix}/lib/ngspice/ when ngspice is installed. To create your own codemodels: * Unpack the ngspice source and compile as normal. * cd src/xspice/icm * make the directory structure for the new library: Create the nested library_name and module_name directories and copy the source code to the module_name directories src/xspice/icm/ / modpath.lst udnpath.lst / files: cfunc.mod ifspec.ifs ( for a device ) or udnfunc.c ( or a user defined node ) * For each library create the files modpath.lst and udnpath.lst, which contain a list of the user devices and nodes respectivily, in the location shown above. * Edit src/xspice/icm/makedefs.in and alter the CMDIRS line to include your library directory. * Run make in the src/xspice/icm directory. ( the makefile does the rest ) The codemodel can be then found in src/xspice/icm//.cm ----------------------------------------- SPICE2 POLY codemodel support. SPICE2 POLY attributes are now available for controlled sources. To use POLY attributes, configure and install ( make install ) ngspice with the --enable-xspice flag set as described above. After compilation of ngspice edit ${prefix}/share/tclspice/scripts/spinit or ${prefix}/share/ngspice/scripts/spinit ( depending if you included tcl support or not ) and uncomment the "* codemodel /usr/lib/spice/spice2poly.cm" line and edit as required. ( the path to spice2poly.cm may be wrong ) ( alternativily create a ~/.spiceinit file with the above codemodel line ) Then read in your SPICE netlist. SPICE 2 POLY attributes in controlled sources will be translated into .models invoking the spice2poly codemodel. You should be able to run ngspice and simulate in the usual way! Please direct questions/comments/complaints to the ngspice user's list or forum. tmpk8ny_4pz/src/xspice/examples/0000755000175000017500000000000013546075722017060 5ustar carstencarstentmpk8ny_4pz/src/xspice/examples/d_to_real/0000755000175000017500000000000013546075722021010 5ustar carstencarstentmpk8ny_4pz/src/xspice/examples/d_to_real/ifspec.ifs0000644000175000017500000000230613546075722022765 0ustar carstencarsten NAME_TABLE: Spice_Model_Name: d_to_real C_Function_Name: ucm_d_to_real Description: "Node bridge from digital to real with enable" PORT_TABLE: Port_Name: in enable out Description: "input" "enable" "output" Direction: in in out Default_Type: d d real Allowed_Types: [d] [d] [real] Vector: no no no Vector_Bounds: - - - Null_Allowed: no yes no PARAMETER_TABLE: Parameter_Name: zero one delay Description: "value for 0" "value for 1" "delay" Data_Type: real real real Default_Value: 0.0 1.0 1e-9 Limits: - - [1e-15 -] Vector: no no no Vector_Bounds: - - - Null_Allowed: yes yes yes tmpk8ny_4pz/src/xspice/examples/d_to_real/Makefile0000644000175000017500000000160113546075722022446 0ustar carstencarsten# # Makefile for Code Model directories # # Include global XSPICE selections for CC and other macros include /usr/local/xspice-1-0/include/make.include INCLUDE = -I. -I$(ROOT)/include/sim CFLAGS = -g #----------------------------------------------------------------------------- # Edit the following definition to specify the object files that comprise # your code model. If your code model is completely specified in the # cfunc.mod file, there is no need to edit this definition. # DO NOT include the ifspec.o file. CODE_MODEL_OBJECTS = cfunc.o #----------------------------------------------------------------------------- # DO NOT MODIFY THE FOLLOWING DEFINITIONS: .SUFFIXES: $(SUFFIXES) .mod .ifs .mod.c: $(BINDIR)/cmpp -mod $< .ifs.c: $(BINDIR)/cmpp -ifs .c.o: $*.c ${CC} ${CFLAGS} ${INCLUDE} -c $*.c all : ifspec.o $(CODE_MODEL_OBJECTS) cfunc.o : cfunc.c ifspec.o : ifspec.c tmpk8ny_4pz/src/xspice/examples/d_to_real/cfunc.mod0000644000175000017500000000124413546075722022610 0ustar carstencarsten void ucm_d_to_real (ARGS) { Digital_State_t in; double *out; double delay; double zero; double one; double ena; in = INPUT_STATE(in); if(PORT_NULL(enable)) ena = 1.0; else if(INPUT_STATE(enable) == ONE) ena = 1.0; else ena = 0.0; out = OUTPUT(out); zero = PARAM(zero); one = PARAM(one); delay = PARAM(delay); if(in == ZERO) *out = zero * ena; else if(in == UNKNOWN) *out = (zero + one) / 2.0 * ena; else *out = one * ena; if(TIME > 0.0) OUTPUT_DELAY(out) = delay; } tmpk8ny_4pz/src/xspice/examples/nco/0000755000175000017500000000000013546075722017637 5ustar carstencarstentmpk8ny_4pz/src/xspice/examples/nco/ifspec.ifs0000644000175000017500000000202313546075722021610 0ustar carstencarsten NAME_TABLE: Spice_Model_Name: nco C_Function_Name: ucm_nco Description: "A simple MIDI numerically controlled oscillator" PORT_TABLE: Port_Name: in out Description: "program input" "oscillator output" Direction: in out Default_Type: d d Allowed_Types: [d] [d] Vector: yes no Vector_Bounds: [7 7] - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: delay mult_factor Description: "output delay" "freq multiplier" Data_Type: real real Default_Value: 1e-9 1 Limits: [1e-15 -] [1e-9 -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes STATIC_VAR_TABLE: Static_Var_Name: freq Data_Type: pointer Description: "frequencies of notes" tmpk8ny_4pz/src/xspice/examples/nco/Makefile0000644000175000017500000000160113546075722021275 0ustar carstencarsten# # Makefile for Code Model directories # # Include global XSPICE selections for CC and other macros include /usr/local/xspice-1-0/include/make.include INCLUDE = -I. -I$(ROOT)/include/sim CFLAGS = -g #----------------------------------------------------------------------------- # Edit the following definition to specify the object files that comprise # your code model. If your code model is completely specified in the # cfunc.mod file, there is no need to edit this definition. # DO NOT include the ifspec.o file. CODE_MODEL_OBJECTS = cfunc.o #----------------------------------------------------------------------------- # DO NOT MODIFY THE FOLLOWING DEFINITIONS: .SUFFIXES: $(SUFFIXES) .mod .ifs .mod.c: $(BINDIR)/cmpp -mod $< .ifs.c: $(BINDIR)/cmpp -ifs .c.o: $*.c ${CC} ${CFLAGS} ${INCLUDE} -c $*.c all : ifspec.o $(CODE_MODEL_OBJECTS) cfunc.o : cfunc.c ifspec.o : ifspec.c tmpk8ny_4pz/src/xspice/examples/nco/cfunc.mod0000644000175000017500000000421213546075722021435 0ustar carstencarsten void *malloc(unsigned); #define OUT_STATE 0 #define NXT_TIME 1 #define NUM_NOTES 128 /* A numerically controlled oscillator. Output frequencies */ /* are determined according to the MIDI note number at input */ void ucm_nco (ARGS) { double *freq; int *output_state; double *next_time; int i; int index; int scale_factor; double half_period; if(INIT) { /* Setup storage for the toggled output state */ cm_event_alloc(OUT_STATE, sizeof(int)); cm_event_alloc(NXT_TIME, sizeof(double)); output_state = (int *) cm_event_get_ptr(OUT_STATE, 0); next_time = (double *) cm_event_get_ptr(NXT_TIME, 0); /* Allocate storage for frequencies */ STATIC_VAR(freq) = malloc(NUM_NOTES * sizeof(double)); freq = STATIC_VAR(freq); /* Initialize the frequency array */ for(i = 0; i < NUM_NOTES; i++) { if(i == 0) freq[0] = 8.17578 * PARAM(mult_factor); else freq[i] = freq[i-1] * 1.059463094; } } else { /* Get old output state */ output_state = (int *) cm_event_get_ptr(OUT_STATE, 0); next_time = (double *) cm_event_get_ptr(NXT_TIME, 0); } /* Convert the input bits to an integer */ index = 0; scale_factor = 64; for(i = 0; i < 7; i++) { if(INPUT_STATE(in[i]) == ONE) index += scale_factor; scale_factor /= 2; } /* Look up the frequency and compute half its period */ freq = STATIC_VAR(freq); half_period = 1.0 / freq[index]; /* Queue up events and output the new state */ if(TIME == 0.0) { *next_time = half_period; cm_event_queue(*next_time); OUTPUT_STATE(out) = *output_state; } else { if(TIME == *next_time) { *next_time = TIME + half_period; cm_event_queue(*next_time); *output_state = 1 - *output_state; OUTPUT_STATE(out) = *output_state; OUTPUT_DELAY(out) = PARAM(delay); } else OUTPUT_CHANGED(out) = FALSE; } } tmpk8ny_4pz/src/xspice/examples/real_to_v/0000755000175000017500000000000013546075722021032 5ustar carstencarstentmpk8ny_4pz/src/xspice/examples/real_to_v/ifspec.ifs0000644000175000017500000000165213546075722023012 0ustar carstencarsten NAME_TABLE: Spice_Model_Name: real_to_v C_Function_Name: ucm_real_to_v Description: "Node bridge from real to analog voltage" PORT_TABLE: Port_Name: in out Description: "input" "output" Direction: in out Default_Type: real v Allowed_Types: [real] [v, vd, i, id] Vector: no no Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: gain transition_time Description: "gain" "output transition time" Data_Type: real real Default_Value: 1.0 1e-9 Limits: - [1e-15 -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes tmpk8ny_4pz/src/xspice/examples/real_to_v/Makefile0000644000175000017500000000160113546075722022470 0ustar carstencarsten# # Makefile for Code Model directories # # Include global XSPICE selections for CC and other macros include /usr/local/xspice-1-0/include/make.include INCLUDE = -I. -I$(ROOT)/include/sim CFLAGS = -g #----------------------------------------------------------------------------- # Edit the following definition to specify the object files that comprise # your code model. If your code model is completely specified in the # cfunc.mod file, there is no need to edit this definition. # DO NOT include the ifspec.o file. CODE_MODEL_OBJECTS = cfunc.o #----------------------------------------------------------------------------- # DO NOT MODIFY THE FOLLOWING DEFINITIONS: .SUFFIXES: $(SUFFIXES) .mod .ifs .mod.c: $(BINDIR)/cmpp -mod $< .ifs.c: $(BINDIR)/cmpp -ifs .c.o: $*.c ${CC} ${CFLAGS} ${INCLUDE} -c $*.c all : ifspec.o $(CODE_MODEL_OBJECTS) cfunc.o : cfunc.c ifspec.o : ifspec.c tmpk8ny_4pz/src/xspice/examples/real_to_v/cfunc.mod0000644000175000017500000000272713546075722022641 0ustar carstencarsten #define TS 0 #define VS 1 void ucm_real_to_v (ARGS) { double *t, *v; double *in; double out; in = INPUT(in); if(INIT) { cm_event_alloc(TS, 2 * sizeof(double)); cm_event_alloc(VS, 2 * sizeof(double)); t = (void *) cm_event_get_ptr(TS, 0); v = (void *) cm_event_get_ptr(VS, 0); t[0] = -2.0; t[1] = -1.0; v[0] = *in; v[1] = *in; } else { t = (void *) cm_event_get_ptr(TS, 0); v = (void *) cm_event_get_ptr(VS, 0); } switch(CALL_TYPE) { case ANALOG: if(TIME == 0.0) { OUTPUT(out) = *in; v[0] = *in; v[1] = *in; } else { if(TIME <= t[0]) OUTPUT(out) = v[0]; else if(TIME >= t[1]) OUTPUT(out) = v[1]; else { OUTPUT(out) = v[0] + (v[1] - v[0]) * (TIME - t[0]) / (t[1] - t[0]); } } break; case EVENT: if(TIME == 0.0) return; if(TIME >= t[1]) { v[0] = v[1]; v[1] = *in; t[0] = TIME; t[1] = TIME + PARAM(transition_time); } else { v[0] = v[0] + (v[1] - v[0]) * (TIME - t[0]) / (t[1] - t[0]); v[1] = *in; t[0] = TIME; t[1] = TIME + PARAM(transition_time); } break; } } tmpk8ny_4pz/src/xspice/examples/print_param_types/0000755000175000017500000000000013546075722022620 5ustar carstencarstentmpk8ny_4pz/src/xspice/examples/print_param_types/ifspec.ifs0000644000175000017500000000501113546075722024571 0ustar carstencarsten NAME_TABLE: Spice_Model_Name: print_param_types C_Function_Name: ucm_print_param_types Description: "ignores its input, but prints its parameters" PORT_TABLE: Port_Name: in Description: "input" Direction: in Default_Type: v Allowed_Types: [v,vd,i,id,vnam] Vector: yes Vector_Bounds: - Null_Allowed: no PARAMETER_TABLE: Parameter_Name: integer Description: "integer parameter" Data_Type: int Default_Value: 1 Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: real Description: "real parameter" Data_Type: real Default_Value: 1 Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: complex Description: "complex parameter" Data_Type: complex Default_Value: <1.0, 1.0> Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: string Description: "string parameter" Data_Type: string Default_Value: "one" Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: integer_array Description: "integer array parameter" Data_Type: int Default_Value: 1 Limits: - Vector: yes Vector_Bounds: in Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: real_array Description: "real array parameter" Data_Type: real Default_Value: 1 Limits: - Vector: yes Vector_Bounds: in Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: complex_array Description: "complex array parameter" Data_Type: complex Default_Value: <1.0 1.0> Limits: - Vector: yes Vector_Bounds: in Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: string_array Description: "string array parameter" Data_Type: string Default_Value: "one" Limits: - Vector: yes Vector_Bounds: in Null_Allowed: yes tmpk8ny_4pz/src/xspice/examples/print_param_types/Makefile0000644000175000017500000000160113546075722024256 0ustar carstencarsten# # Makefile for Code Model directories # # Include global XSPICE selections for CC and other macros include /usr/local/xspice-1-0/include/make.include INCLUDE = -I. -I$(ROOT)/include/sim CFLAGS = -g #----------------------------------------------------------------------------- # Edit the following definition to specify the object files that comprise # your code model. If your code model is completely specified in the # cfunc.mod file, there is no need to edit this definition. # DO NOT include the ifspec.o file. CODE_MODEL_OBJECTS = cfunc.o #----------------------------------------------------------------------------- # DO NOT MODIFY THE FOLLOWING DEFINITIONS: .SUFFIXES: $(SUFFIXES) .mod .ifs .mod.c: $(BINDIR)/cmpp -mod $< .ifs.c: $(BINDIR)/cmpp -ifs .c.o: $*.c ${CC} ${CFLAGS} ${INCLUDE} -c $*.c all : ifspec.o $(CODE_MODEL_OBJECTS) cfunc.o : cfunc.c ifspec.o : ifspec.c tmpk8ny_4pz/src/xspice/examples/print_param_types/cfunc.mod0000644000175000017500000000202713546075722024420 0ustar carstencarsten void ucm_print_param_types (ARGS) { int i; if(INIT) { /* Print scalar parameters */ printf("\nScalar parameters\n\n"); printf("integer = %d\n", PARAM(integer)); printf("real = %e\n", PARAM(real)); printf("complex = <%e %e>\n", PARAM(complex).real, PARAM(complex).imag); printf("string = %s\n", PARAM(string)); /* Print vector parameters */ printf("\nVector parameters\n\n"); for(i = 0; i < PARAM_SIZE(integer_array); i++) printf("integer = %d\n", PARAM(integer_array[i])); for(i = 0; i < PARAM_SIZE(real_array); i++) printf("real = %e\n", PARAM(real_array[i])); for(i = 0; i < PARAM_SIZE(complex_array); i++) printf("complex = <%e %e>\n", PARAM(complex_array[i]).real, PARAM(complex_array[i]).imag); for(i = 0; i < PARAM_SIZE(string_array); i++) printf("string = %s\n", PARAM(string_array[i])); } } tmpk8ny_4pz/src/xspice/examples/real_delay/0000755000175000017500000000000013546075722021161 5ustar carstencarstentmpk8ny_4pz/src/xspice/examples/real_delay/ifspec.ifs0000644000175000017500000000162113546075722023135 0ustar carstencarsten NAME_TABLE: Spice_Model_Name: real_delay C_Function_Name: ucm_real_delay Description: "A Z ** -1 block working on real data" PORT_TABLE: Port_Name: in clk out Description: "input" "clock" "output" Direction: in in out Default_Type: real d real Allowed_Types: [real] [d] [real] Vector: no no no Vector_Bounds: - - - Null_Allowed: no no no PARAMETER_TABLE: Parameter_Name: delay Description: "delay from clk to out" Data_Type: real Default_Value: 1e-9 Limits: [1e-15 -] Vector: no Vector_Bounds: - Null_Allowed: yes tmpk8ny_4pz/src/xspice/examples/real_delay/Makefile0000644000175000017500000000160113546075722022617 0ustar carstencarsten# # Makefile for Code Model directories # # Include global XSPICE selections for CC and other macros include /usr/local/xspice-1-0/include/make.include INCLUDE = -I. -I$(ROOT)/include/sim CFLAGS = -g #----------------------------------------------------------------------------- # Edit the following definition to specify the object files that comprise # your code model. If your code model is completely specified in the # cfunc.mod file, there is no need to edit this definition. # DO NOT include the ifspec.o file. CODE_MODEL_OBJECTS = cfunc.o #----------------------------------------------------------------------------- # DO NOT MODIFY THE FOLLOWING DEFINITIONS: .SUFFIXES: $(SUFFIXES) .mod .ifs .mod.c: $(BINDIR)/cmpp -mod $< .ifs.c: $(BINDIR)/cmpp -ifs .c.o: $*.c ${CC} ${CFLAGS} ${INCLUDE} -c $*.c all : ifspec.o $(CODE_MODEL_OBJECTS) cfunc.o : cfunc.c ifspec.o : ifspec.c tmpk8ny_4pz/src/xspice/examples/real_delay/cfunc.mod0000644000175000017500000000166713546075722022772 0ustar carstencarsten #define CLK_STATE 0 void ucm_real_delay (ARGS) { double *in; double *out; Digital_State_t *state; Digital_State_t *old_state; if(INIT) { cm_event_alloc(CLK_STATE, sizeof(Digital_State_t)); state = (void *) cm_event_get_ptr(CLK_STATE, 0); old_state = state; *state = INPUT_STATE(clk); } else { state = (void *) cm_event_get_ptr(CLK_STATE, 0); old_state = (void *) cm_event_get_ptr(CLK_STATE, 1); } if(ANALYSIS != TRANSIENT) OUTPUT_CHANGED(out) = FALSE; else { *state = INPUT_STATE(clk); if(*state == *old_state) OUTPUT_CHANGED(out) = FALSE; else if(*state != ONE) OUTPUT_CHANGED(out) = FALSE; else { in = INPUT(in); out = OUTPUT(out); *out = *in; OUTPUT_DELAY(out) = PARAM(delay); } } } tmpk8ny_4pz/src/xspice/examples/real_gain/0000755000175000017500000000000013546075722021001 5ustar carstencarstentmpk8ny_4pz/src/xspice/examples/real_gain/ifspec.ifs0000644000175000017500000000261513546075722022761 0ustar carstencarsten NAME_TABLE: Spice_Model_Name: real_gain C_Function_Name: ucm_real_gain Description: "A gain block for event-driven real data" PORT_TABLE: Port_Name: in out Description: "input" "output" Direction: in out Default_Type: real real Allowed_Types: [real] [real] Vector: no no Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: in_offset gain out_offset Description: "input offset" "gain" "output offset" Data_Type: real real real Default_Value: 0.0 1.0 0.0 Limits: - - - Vector: no no no Vector_Bounds: - - - Null_Allowed: yes yes yes PARAMETER_TABLE: Parameter_Name: delay ic Description: "delay" "initial condition" Data_Type: real real Default_Value: 1.0e-9 0.0 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes tmpk8ny_4pz/src/xspice/examples/real_gain/Makefile0000644000175000017500000000160113546075722022437 0ustar carstencarsten# # Makefile for Code Model directories # # Include global XSPICE selections for CC and other macros include /usr/local/xspice-1-0/include/make.include INCLUDE = -I. -I$(ROOT)/include/sim CFLAGS = -g #----------------------------------------------------------------------------- # Edit the following definition to specify the object files that comprise # your code model. If your code model is completely specified in the # cfunc.mod file, there is no need to edit this definition. # DO NOT include the ifspec.o file. CODE_MODEL_OBJECTS = cfunc.o #----------------------------------------------------------------------------- # DO NOT MODIFY THE FOLLOWING DEFINITIONS: .SUFFIXES: $(SUFFIXES) .mod .ifs .mod.c: $(BINDIR)/cmpp -mod $< .ifs.c: $(BINDIR)/cmpp -ifs .c.o: $*.c ${CC} ${CFLAGS} ${INCLUDE} -c $*.c all : ifspec.o $(CODE_MODEL_OBJECTS) cfunc.o : cfunc.c ifspec.o : ifspec.c tmpk8ny_4pz/src/xspice/examples/real_gain/cfunc.mod0000644000175000017500000000132613546075722022602 0ustar carstencarsten void ucm_real_gain (ARGS) { double *in; double *out; double in_offset; double gain; double out_offset; double delay; double ic; /* Get the input and output pointers */ in = INPUT(in); out = OUTPUT(out); /* Get the parameters */ in_offset = PARAM(in_offset); gain = PARAM(gain); out_offset = PARAM(out_offset); delay = PARAM(delay); ic = PARAM(ic); /* Assign the output and delay */ if(ANALYSIS == DC) { *out = ic; if(INIT) cm_event_queue(delay); } else { *out = gain * (*in + in_offset) + out_offset; OUTPUT_DELAY(out) = delay; } } tmpk8ny_4pz/src/xspice/idn/0000755000175000017500000000000013546075722016014 5ustar carstencarstentmpk8ny_4pz/src/xspice/idn/Makefile.am0000644000175000017500000000045713546075722020056 0ustar carstencarsten## Process this file with automake to produce Makefile.in # # JW 3/9/01 - had a go and makeing an autoconf script. noinst_LTLIBRARIES = libidnxsp.la libidnxsp_la_SOURCES = \ idndig.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/xspice/idn/idndig.c0000644000175000017500000002053313546075722017421 0ustar carstencarsten/*============================================================================ FILE IDNdig.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the definition of the 'digital' node type used by 12-state digital models in the code model library. These functions are called exclusively through function pointers in an Evt_Udn_Info_t data structure. INTERFACES Evt_Udn_Info_t idn_digital_info REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include "ngspice/ngspice.h" #include "ngspice/cm.h" #include "ngspice/evtudn.h" /* ************************************************************************ */ static void idn_digital_create(void **evt_struct) { /* Malloc space for a digital struct */ *evt_struct = TMALLOC(Digital_t, 1); } /* ************************************************************************ */ static void idn_digital_dismantle(void *evt_struct) { NG_IGNORE(evt_struct); /* Do nothing. There are no internally malloc'ed things to dismantle */ } /* ************************************************************************ */ static void idn_digital_initialize(void *evt_struct) { Digital_t *dig_struct = (Digital_t *) evt_struct; /* Initialize to unknown state and strength */ dig_struct->state = ZERO; dig_struct->strength = UNDETERMINED; } /* ************************************************************************ */ static void idn_digital_invert(void *evt_struct) { Digital_t *dig_struct = (Digital_t *) evt_struct; /* Invert the state */ switch(dig_struct->state) { case ZERO: dig_struct->state = ONE; return; case ONE: dig_struct->state = ZERO; return; default: return; } } /* ************************************************************************ */ static void idn_digital_copy(void *evt_from_struct, void *evt_to_struct) { Digital_t *dig_from_struct = (Digital_t *) evt_from_struct; Digital_t *dig_to_struct = (Digital_t *) evt_to_struct; /* Copy the structure */ dig_to_struct->state = dig_from_struct->state; dig_to_struct->strength = dig_from_struct->strength; } /* ************************************************************************ */ static void idn_digital_resolve(int num_struct, void **evt_struct_array, void *evt_struct) { Digital_t **dig_struct_array; Digital_t *dig_struct; static int map[12][12] = { { 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2}, { 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1}, { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, { 0, 1, 2, 3, 5, 5, 3, 3, 3, 9, 11, 11}, { 0, 1, 2, 5, 4, 5, 4, 4, 4, 11, 10, 11}, { 0, 1, 2, 5, 5, 5, 5, 5, 5, 10, 11, 11}, { 0, 1, 2, 3, 4, 5, 6, 8, 8, 9, 11, 11}, { 0, 1, 2, 3, 4, 5, 8, 7, 8, 11, 10, 11}, { 0, 1, 2, 3, 4, 5, 8, 8, 8, 11, 11, 11}, { 0, 2, 2, 9, 11, 11, 9, 11, 11, 9, 11, 11}, { 2, 1, 2, 11, 10, 11, 11, 10, 11, 11, 10, 11}, { 2, 1, 2, 11, 11, 11, 11, 11, 11, 11, 11, 11} }; int i; int index1; int index2; /* Cast the input void pointers to pointers of the digital type */ dig_struct = (Digital_t *) evt_struct; dig_struct_array = (Digital_t **)evt_struct_array; /* Copy the first member of the array directly to the output */ dig_struct->state = dig_struct_array[0]->state; dig_struct->strength = dig_struct_array[0]->strength; /* Convert struct to index into map */ index1 = (int) (dig_struct->state + dig_struct->strength * 3); /* For the remaining members, perform the resolution algorithm */ for(i = 1; i < num_struct; i++) { /* Convert struct to index into map */ index2 = (int)(dig_struct_array[i]->state + dig_struct_array[i]->strength * 3); /* Compute the result */ index1 = map[index1][index2]; } /* Convert result back to state and strength */ dig_struct->state = (Digital_State_t) (index1 % 3); dig_struct->strength = (Digital_Strength_t) (index1 / 3); } /* ************************************************************************ */ static void idn_digital_compare(void *evt_struct1, void *evt_struct2, Boolean_t *equal) { Digital_t *dig_struct1 = (Digital_t *) evt_struct1; Digital_t *dig_struct2 = (Digital_t *) evt_struct2; /* Compare the structures in order of most likely differences */ if(dig_struct1->state != dig_struct2->state) *equal = FALSE; else if(dig_struct1->strength != dig_struct2->strength) *equal = FALSE; else *equal = TRUE; } /* ************************************************************************ */ static void idn_digital_plot_val(void *evt_struct, char *member, double *val) { Digital_t *dig_struct = (Digital_t *) evt_struct; /* Output a value for the requested member of the digital struct */ if(strcmp(member,"strength") == 0) { /* Choose values that will not make plots lie on state plots */ switch(dig_struct->strength) { case STRONG: *val = 0.1; return; case RESISTIVE: *val = 0.6; return; case HI_IMPEDANCE: *val = 1.1; return; case UNDETERMINED: *val = -0.4; return; } } else { /* member = "state" or anything else */ /* Pick reasonable values */ switch(dig_struct->state) { case ZERO: *val = 0.0; return; case ONE: *val = 1.0; return; case UNKNOWN: *val = 0.5; return; } } } /* ************************************************************************ */ static void idn_digital_print_val(void *evt_struct, char *member, char **val) { Digital_t *dig_struct = (Digital_t *) evt_struct; int index; static char *map[] = { "0s", "1s", "Us", "0r", "1r", "Ur", "0z", "1z", "Uz", "0u", "1u", "Uu" }; /* Output a value for the requested member of the digital struct */ if(strcmp(member,"state") == 0) { /* Pick reasonable values */ switch(dig_struct->state) { case ZERO: *val = "0"; return; case ONE: *val = "1"; return; case UNKNOWN: *val = "U"; return; default: *val = "?"; return; } } else if(strcmp(member,"strength") == 0) { /* Choose values that will not make plots lie on state plots */ switch(dig_struct->strength) { case STRONG: *val = "s"; return; case RESISTIVE: *val = "r"; return; case HI_IMPEDANCE: *val = "z"; return; case UNDETERMINED: *val = "u"; return; default: *val = "?"; return; } } else { index = (int)(dig_struct->state + dig_struct->strength * 3); if((index < 0) || (index > 11)) *val = "??"; else *val = map[index]; return; } } /* ************************************************************************ */ static void idn_digital_ipc_val(void *evt_struct, void **ipc_val, int *ipc_val_size) { /* Return the digital data structure and its size */ *ipc_val = evt_struct; *ipc_val_size = sizeof(Digital_t); } Evt_Udn_Info_t idn_digital_info = { "d", "12 state digital data", idn_digital_create, idn_digital_dismantle, idn_digital_initialize, idn_digital_invert, idn_digital_copy, idn_digital_resolve, idn_digital_compare, idn_digital_plot_val, idn_digital_print_val, idn_digital_ipc_val }; tmpk8ny_4pz/src/xspice/ipc/0000755000175000017500000000000013546075722016015 5ustar carstencarstentmpk8ny_4pz/src/xspice/ipc/Makefile.am0000644000175000017500000000062613546075722020055 0ustar carstencarsten## Process this file with automake to produce Makefile.in # # JW 3/9/01 - had a go and makeing an autoconf script. noinst_LTLIBRARIES = libipcxsp.la libipcxsp_la_SOURCES = \ ipcaegis.c \ ipc.c \ ipcsockets.c \ ipcstdio.c \ ipctiein.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include -I$(top_srcdir)/src/spicelib/devices AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/xspice/ipc/ipc.c0000644000175000017500000006252413546075722016745 0ustar carstencarsten/*============================================================================ FILE IPC.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Steve Tynor MODIFICATIONS 6/13/92 Bill Kuhn Added some comments SUMMARY Provides compatibility for the new SPICE simulator to both the MSPICE user interface and BCP (via ATESSE v.1 style AEGIS mailboxes) and the new ATESSE v.2 Simulator Interface and BCP (via Bsd Sockets). The Interprocess Communications package provides functions called to receive XSPICE decks from the ATESSE Simulator Interface or Batch Control processes, and to return results to those processes. Functions callable from the simulator packages include: ipc_initialize_server ipc_terminate_server ipc_get_line ipc_send_line ipc_send_data_prefix ipc_send_data_suffix ipc_send_dcop_prefix ipc_send_dcop_suffix ipc_send_evtdict_prefix ipc_send_evtdict_suffix ipc_send_evtdata_prefix ipc_send_evtdata_suffix ipc_send_errchk ipc_send_end ipc_send_boolean ipc_send_int ipc_send_double ipc_send_complex ipc_send_event ipc_flush These functions communicate with a set of transport-level functions that implement the interprocess communications under one of the following protocol types determined by a compile-time option: BSD UNIX Sockets HP/Apollo Mailboxes For each transport protocol, the following functions are written: ipc_transport_initialize_server ipc_transport_get_line ipc_transport_terminate_server ipc_transport_send_line ============================================================================*/ #include "ngspice/ngspice.h" #include #include "ngspice/memory.h" /* NOTE: I think this is a Sys5ism (there is not man * page for it under Bsd, but it's in /usr/include * and it has a BSD copyright header. Go figure. */ #include "ngspice/ipc.h" #include "ngspice/ipctiein.h" #include "ngspice/ipcproto.h" /* * Conditional compilation sanity check: */ #if !defined (IPC_AEGIS_MAILBOXES) && !defined (IPC_UNIX_SOCKETS)\ && !defined (IPC_DEBUG_VIA_STDIO) " compiler error - must specify a transport mechanism"; #endif /* * static 'globals' */ /* typedef unsigned char Buffer_Char_t; */ typedef char Buffer_Char_t; #define OUT_BUFFER_SIZE 1000 #define MAX_NUM_RECORDS 200 static int end_of_record_index [MAX_NUM_RECORDS]; static int num_records; static Buffer_Char_t out_buffer [OUT_BUFFER_SIZE]; static int fill_count; static Ipc_Mode_t mode; static Ipc_Protocol_t protocol; static Ipc_Boolean_t end_of_deck_seen; static int batch_fd; #define FMT_BUFFER_SIZE 80 static char fmt_buffer [FMT_BUFFER_SIZE]; /*---------------------------------------------------------------------------*/ Ipc_Boolean_t kw_match (char *keyword, char *str) /* * returns IPC_TRUE if the first `strlen(keyword)' characters of `str' match * the ones in `keyword' - case sensitive */ { char *k = keyword; char *s = str; /* * quit if we run off the end of either string: */ while (*s && *k) { if (*s != *k) { return IPC_FALSE; } s++; k++; } /* * if we get this far, it sould be because we ran off the end of the * keyword else we didn't match: */ return (*k == '\0'); } /*---------------------------------------------------------------------------*/ /* ipc_initialize_server This function creates the interprocess communication channel server mailbox or socket. */ Ipc_Status_t ipc_initialize_server ( char *server_name, /* Mailbox path or host/portnumber pair */ Ipc_Mode_t m, /* Interactive or batch */ Ipc_Protocol_t p ) /* Type of IPC protocol */ /* * For mailboxes, `server_name' would be the mailbox pathname; for * sockets, this needs to be a host/portnumber pair. Maybe this should be * automatically generated by the routine... */ { Ipc_Status_t status; char batch_filename [1025]; mode = m; protocol = p; end_of_deck_seen = IPC_FALSE; num_records = 0; fill_count = 0; status = ipc_transport_initialize_server (server_name, m, p, batch_filename); if (status != IPC_STATUS_OK) { fprintf (stderr, "ERROR: IPC: error initializing server\n"); return IPC_STATUS_ERROR; } if (mode == IPC_MODE_BATCH) { #ifdef IPC_AEGIS_MAILBOXES strcat (batch_filename, ".log"); #endif batch_fd = open (batch_filename, O_WRONLY | O_CREAT, 0666); if (batch_fd < 0) { /* fprintf (stderr, "ERROR: IPC: Error opening batch output file: %s\n",batch_filename); */ perror ("IPC"); return IPC_STATUS_ERROR; } } return status; } /*---------------------------------------------------------------------------*/ /* ipc_terminate_server This function deallocates the interprocess communication channel mailbox or socket. */ Ipc_Status_t ipc_terminate_server (void) { return ipc_transport_terminate_server (); } /*---------------------------------------------------------------------------*/ /* ipc_get_line This function gets a SPICE deck input line from the interprocess communication channel. Any special control commands in the deck beginning with a ``>'' or ``#'' character are processed internally by this function and not returned to SPICE. */ Ipc_Status_t ipc_get_line ( char *str, /* Text retrieved from IPC channel */ int *len, /* Length of text string */ Ipc_Wait_t wait ) /* Select blocking or non-blocking */ /* * Reads one SPICE line from the connection. Strips any control lines * which cannot be interpretted by the simulator (e.g. >INQCON) and * processes them. If such a line is read, it is processed and the next * line is read. `ipc_get_line' does not return until a non-interceptable * line is read or end of file. * * If `wait' is IPC_NO_WAIT and there is no data available on the * connection, `ipc_get_line' returns IPC_STATUS_NO_DATA. If `wait' is * IPC_WAIT, `ipc_get_line' will not return until there is data available * or and end of file condition is reached or an error occurs. * * Intercepts and processes the following commands: * #RETURNI, #MINTIME, #VTRANS, * >PAUSE, >CONT, >STOP, >INQCON, >NETLIST, >ENDNET * Other > records are silently ignored. * * Intercepts old-style .TEMP card generated by MSPICE * * Returns: * IPC_STATUS_OK - for successful reads * IPC_STATUS_NO_DATA - when NO_WAIT and no data available * IPC_STATUS_END_OF_DECK - at end of deck (>ENDNET seen) * IPC_STATUS_ERROR - otherwise */ { Ipc_Status_t status; Ipc_Boolean_t need_another = IPC_TRUE; do { status = ipc_transport_get_line (str, len, wait); switch (status) { case IPC_STATUS_NO_DATA: case IPC_STATUS_ERROR: need_another = IPC_FALSE; break; case IPC_STATUS_END_OF_DECK: assert (0); /* should never get this from the low-level get-line */ status = IPC_STATUS_ERROR; need_another = IPC_FALSE; break; case IPC_STATUS_OK: /* * Got a good line - check to see if it's one of the ones we need to * intercept */ if (str[0] == '>') { if (kw_match (">STOP", str)) { ipc_handle_stop(); } else if (kw_match (">PAUSE", str)) { /* assert (need_another); */ /* * once more around the loop to do a blocking wait for the >CONT */ need_another = IPC_TRUE; wait = IPC_WAIT; } else if (kw_match (">INQCON", str)) { ipc_send_line (">ABRTABL"); ipc_send_line (">PAUSABL"); ipc_send_line (">KEEPABL"); status = ipc_flush (); if (IPC_STATUS_OK != status) { need_another = IPC_FALSE; } } else if (kw_match (">ENDNET", str)) { end_of_deck_seen = IPC_TRUE; need_another = IPC_FALSE; status = IPC_STATUS_END_OF_DECK; } else { /* silently ignore */ } } else if (str[0] == '#') { if (kw_match ("#RETURNI", str)) { ipc_handle_returni (); } else if (kw_match ("#MINTIME", str)) { double d1/*,d2*/; if (1 != sscanf (&str[8], "%lg", &d1)) { status = IPC_STATUS_ERROR; need_another = IPC_FALSE; } else { ipc_handle_mintime (d1); } } else if (kw_match ("#VTRANS", str)) { char *tok1; char *tok2; char *tok3; tok1 = &str[8]; for (tok2 = tok1; *tok2; tok2++) { if (isspace_c(*tok2)) { *tok2 = '\0'; tok2++; break; } } for(tok3 = tok2; *tok3; tok3++) { if(isspace_c(*tok3)) { *tok3 = '\0'; break; } } ipc_handle_vtrans (tok1, tok2); } else { /* silently ignore */ } } else if (str[0] == '.') { if (kw_match (".TEMP", str)) { /* don't pass .TEMP card to caller */ printf("Old-style .TEMP card found - ignored\n"); } else { /* pass all other . cards to the caller */ need_another = IPC_FALSE; } } else { /* * Not a '>' or '#' record - let the caller deal with it */ need_another = IPC_FALSE; } break; default: /* * some unknown status value! */ assert (0); status = IPC_STATUS_ERROR; need_another = IPC_FALSE; break; } } while (need_another); return status; } /*---------------------------------------------------------------------------*/ /* ipc_flush This function flushes the interprocess communication channel buffer contents. */ Ipc_Status_t ipc_flush (void) /* * Flush all buffered messages out the connection. */ { Ipc_Status_t status; int last = 0; /*int bytes;*/ int i; /* if batch mode */ if (mode == IPC_MODE_BATCH) { assert (batch_fd >= 0); /* for number of records in buffer */ for (i = 0; i < num_records; i++) { /* write the records to the .log file */ if ((end_of_record_index [i] - last) != write (batch_fd, &out_buffer[last], (size_t) (end_of_record_index [i] - last))) { /* fprintf (stderr,"ERROR: IPC: Error writing to batch output file\n"); */ perror ("IPC"); return IPC_STATUS_ERROR; } /* If the record is one of the batch simulation status messages, */ /* send it over the ipc channel too */ if( kw_match("#ERRCHK", &out_buffer[last]) || kw_match(">ENDANAL", &out_buffer[last]) || kw_match(">ABORTED", &out_buffer[last]) ) { status = ipc_transport_send_line (&out_buffer[last], end_of_record_index [i] - last); if (IPC_STATUS_OK != status) { return status; } } last = end_of_record_index [i]; } /* else, must be interactive mode */ } else { /* send the full buffer over the ipc channel */ status = ipc_transport_send_line (&out_buffer[0], end_of_record_index [num_records - 1]); if (IPC_STATUS_OK != status) { return status; } } /* reset counts to zero and return */ num_records = 0; fill_count = 0; return IPC_STATUS_OK; } /*---------------------------------------------------------------------------*/ Ipc_Status_t ipc_send_line_binary ( char *str, int len ) /* * Same as `ipc_send_line' except does not expect the str to be null * terminated. Sends exactly `len' characters. Use this for binary data * strings that may have embedded nulls. * * Modified by wbk to append newlines for compatibility with * ATESSE 1.0 * */ { int length = len + 1; /*int diff;*/ Ipc_Status_t status; /* * If we can't add the whole str to the buffer, or if there are no more * record indices free, flush the buffer: */ if (((fill_count + length) >= OUT_BUFFER_SIZE) || (num_records >= MAX_NUM_RECORDS)) { status = ipc_flush (); if (IPC_STATUS_OK != status) { return status; } } /* * make sure that the str will fit: */ if (length + fill_count > OUT_BUFFER_SIZE) { /* fprintf (stderr,"ERROR: IPC: String too long to fit in output buffer (> %d bytes) - truncated\n",OUT_BUFFER_SIZE); */ length = OUT_BUFFER_SIZE - fill_count; } /* * finally, concatenate the str to the end of the buffer and add the newline: */ memcpy (&out_buffer[fill_count], str, (size_t) len); fill_count += len; out_buffer[fill_count] = '\n'; fill_count++; end_of_record_index [num_records++] = fill_count; return IPC_STATUS_OK; } /*---------------------------------------------------------------------------*/ /* ipc_send_line This function sends a line of text over the interprocess communication channel. */ Ipc_Status_t ipc_send_line (char *str ) /* The text to send */ { int len; int send_len; char *s; Ipc_Status_t status= IPC_STATUS_OK; len = (int) strlen(str); /* if short string, send it immediately */ if(len < 80) status = ipc_send_line_binary (str, len); else { /* otherwise, we have to send it as multiple strings */ /* because Mspice cannot handle things longer than 80 chars */ s = str; while(len > 0) { if(len < 80) send_len = len; else send_len = 79; status = ipc_send_line_binary (str, send_len); if(status != IPC_STATUS_OK) break; s += send_len; len -= send_len; } } return(status); } /*---------------------------------------------------------------------------*/ /* ipc_send_data_prefix This function sends a ``>DATAB'' line over the interprocess communication channel to signal that this is the beginning of a results dump for the current analysis point. */ Ipc_Status_t ipc_send_data_prefix (double time ) /* The analysis point for this data set */ { char buffer[40]; sprintf (buffer, ">DATAB %.5E", time); return ipc_send_line (buffer); } /*---------------------------------------------------------------------------*/ /* ipc_send_data_suffix This function sends a ``>ENDDATA'' line over the interprocess communication channel to signal that this is the end of a results dump from a particular analysis point. */ Ipc_Status_t ipc_send_data_suffix (void) { Ipc_Status_t status; status = ipc_send_line (">ENDDATA"); if(status != IPC_STATUS_OK) return(status); return(ipc_flush()); } /*---------------------------------------------------------------------------*/ /* ipc_send_dcop_prefix This function sends a ``>DCOPB'' line over the interprocess communication channel to signal that this is the beginning of a results dump from a DC operating point analysis. */ Ipc_Status_t ipc_send_dcop_prefix (void) { return ipc_send_line (">DCOPB"); } /*---------------------------------------------------------------------------*/ /* ipc_send_dcop_suffix This function sends a ``>ENDDATA'' line over the interprocess communication channel to signal that this is the end of a results dump from a particular analysis point. */ Ipc_Status_t ipc_send_dcop_suffix (void) { Ipc_Status_t status; status = ipc_send_line (">ENDDCOP"); if(status != IPC_STATUS_OK) return(status); return(ipc_flush()); } /*---------------------------------------------------------------------------*/ /* ipc_send_evtdict_prefix This function sends a ``>EVTDICT'' line over the interprocess communication channel to signal that this is the beginning of an event-driven node dictionary. The line is sent only if the IPC is configured for UNIX sockets, indicating use with the V2 ATESSE SI process. */ Ipc_Status_t ipc_send_evtdict_prefix (void) { #ifdef IPC_AEGIS_MAILBOXES return IPC_STATUS_OK; #else return ipc_send_line (">EVTDICT"); #endif } /*---------------------------------------------------------------------------*/ /* ipc_send_evtdict_suffix This function sends a ``>ENDDICT'' line over the interprocess communication channel to signal that this is the end of an event-driven node dictionary. The line is sent only if the IPC is configured for UNIX sockets, indicating use with the V2 ATESSE SI process. */ Ipc_Status_t ipc_send_evtdict_suffix (void) { #ifdef IPC_AEGIS_MAILBOXES return IPC_STATUS_OK; #else Ipc_Status_t status; status = ipc_send_line (">ENDDICT"); if(status != IPC_STATUS_OK) return(status); return(ipc_flush()); #endif } /*---------------------------------------------------------------------------*/ /* ipc_send_evtdata_prefix This function sends a ``>EVTDATA'' line over the interprocess communication channel to signal that this is the beginning of an event-driven node data block. The line is sent only if the IPC is configured for UNIX sockets, indicating use with the V2 ATESSE SI process. */ Ipc_Status_t ipc_send_evtdata_prefix (void) { #ifdef IPC_AEGIS_MAILBOXES return IPC_STATUS_OK; #else return ipc_send_line (">EVTDATA"); #endif } /*---------------------------------------------------------------------------*/ /* ipc_send_evtdata_suffix This function sends a ``>ENDDATA'' line over the interprocess communication channel to signal that this is the end of an event-driven node data block. The line is sent only if the IPC is configured for UNIX sockets, indicating use with the V2 ATESSE SI process. */ Ipc_Status_t ipc_send_evtdata_suffix (void) { #ifdef IPC_AEGIS_MAILBOXES return IPC_STATUS_OK; #else Ipc_Status_t status; status = ipc_send_line (">ENDDATA"); if(status != IPC_STATUS_OK) return(status); return(ipc_flush()); #endif } /*---------------------------------------------------------------------------*/ /* ipc_send_errchk This function sends a ``\ERRCHK [GO|NOGO]'' message over the interprocess communication channel to signal that the initial parsing of the input deck has been completed and to indicate whether or not errors were detected. */ Ipc_Status_t ipc_send_errchk(void) { char str[IPC_MAX_LINE_LEN+1]; Ipc_Status_t status; if(g_ipc.errchk_sent) return(IPC_STATUS_OK); if(g_ipc.syntax_error) sprintf(str, "#ERRCHK NOGO"); else sprintf(str, "#ERRCHK GO"); g_ipc.errchk_sent = IPC_TRUE; status = ipc_send_line(str); if(status != IPC_STATUS_OK) return(status); return(ipc_flush()); } /*---------------------------------------------------------------------------*/ /* ipc_send_end This function sends either an ``>ENDANAL'' or an ``>ABORTED'' message over the interprocess communication channel together with the total CPU time used to indicate whether or not the simulation completed normally. */ Ipc_Status_t ipc_send_end(void) { char str[IPC_MAX_LINE_LEN+1]; Ipc_Status_t status; if(g_ipc.syntax_error || g_ipc.run_error) sprintf(str, ">ABORTED %.4f", g_ipc.cpu_time); else sprintf(str, ">ENDANAL %.4f", g_ipc.cpu_time); status = ipc_send_line(str); if(status != IPC_STATUS_OK) return(status); return(ipc_flush()); } /*---------------------------------------------------------------------------*/ int stuff_binary_v1 ( double d1, double d2, /* doubles to be stuffed */ int n, /* how many of d1, d2 ( 1 <= n <= 2 ) */ char *buf, /* buffer to stuff to */ int pos ) /* index at which to stuff */ { union { float float_val[2]; char ch[32]; } trick; int i, j; assert (protocol == IPC_PROTOCOL_V1); assert (sizeof(float) == 4); assert (sizeof(char) == 1); assert ((n >= 1) && (n <= 2)); trick.float_val[0] = (float)d1; if (n > 1) { trick.float_val[1] = (float)d2; } for (i = 0, j = pos; i < n * (int) sizeof(float); j++, i++) buf[j] = trick.ch[i]; buf[0] = (char) ('A' + j - 1); return j; } /*---------------------------------------------------------------------------*/ /* ipc_send_double This function sends a double data value over the interprocess communication channel preceded by a character string that identifies the simulation variable. */ Ipc_Status_t ipc_send_double ( char *tag, /* The node or instance */ double value ) /* The data value to send */ { int len = 0; switch (protocol) { case IPC_PROTOCOL_V1: strcpy (fmt_buffer, " "); /* save room for the length byte */ strcat (fmt_buffer, tag); strcat (fmt_buffer, " "); /* If talking to Mentor tools, must force upper case for Mspice 7.0 */ strtoupper(fmt_buffer); len = stuff_binary_v1 (value, 0.0, 1, fmt_buffer, (int) strlen(fmt_buffer)); break; case IPC_PROTOCOL_V2: break; } return ipc_send_line_binary (fmt_buffer, len); } /*---------------------------------------------------------------------------*/ /* ipc_send_complex This function sends a complex data value over the interprocess communication channel preceded by a character string that identifies the simulation variable. */ Ipc_Status_t ipc_send_complex ( char *tag, /* The node or instance */ Ipc_Complex_t value ) /* The data value to send */ { int len=0; switch (protocol) { case IPC_PROTOCOL_V1: strcpy (fmt_buffer, " "); /* save room for the length byte */ strcat (fmt_buffer, tag); strcat (fmt_buffer, " "); /* If talking to Mentor tools, must force upper case for Mspice 7.0 */ strtoupper(fmt_buffer); len = stuff_binary_v1 (value.real, value.imag, 2, fmt_buffer, (int) strlen(fmt_buffer)); break; case IPC_PROTOCOL_V2: break; } return ipc_send_line_binary (fmt_buffer, len); } /*---------------------------------------------------------------------------*/ /* ipc_send_event This function sends data from an event-driven node over the interprocess communication channel. The data is sent only if the IPC is configured for UNIX sockets, indicating use with the V2 ATESSE SI process. */ Ipc_Status_t ipc_send_event ( int ipc_index, /* Index used in EVTDICT */ double step, /* Analysis point or timestep (0.0 for DC) */ double plot_val, /* The value for plotting purposes */ char *print_val, /* The value for printing purposes */ void *ipc_val, /* The binary representation of the node data */ int len ) /* The length of the binary representation */ { #ifdef IPC_AEGIS_MAILBOXES return IPC_STATUS_OK; #else char buff[OUT_BUFFER_SIZE]; int i; int buff_len; char *buff_ptr; char *temp_ptr; float fvalue; /* Report error if size of data is too big for IPC channel block size */ if((len + (int) strlen(print_val) + 100) >= OUT_BUFFER_SIZE) { printf("ERROR - Size of event-driven data too large for IPC channel\n"); return IPC_STATUS_ERROR; } /* Place the index into the buffer with a trailing space */ sprintf(buff, "%d ", ipc_index); assert(sizeof(float) == 4); assert(sizeof(int) == 4); /* Put the analysis step bytes in */ buff_len = (int) strlen(buff); buff_ptr = buff + buff_len; fvalue = (float)step; temp_ptr = (char *) &fvalue; for(i = 0; i < 4; i++) { *buff_ptr = temp_ptr[i]; buff_ptr++; buff_len++; } /* Put the plot value in */ fvalue = (float)plot_val; temp_ptr = (char *) &fvalue; for(i = 0; i < 4; i++) { *buff_ptr = temp_ptr[i]; buff_ptr++; buff_len++; } /* Put the length of the binary representation in */ temp_ptr = (char *) &len; for(i = 0; i < 4; i++) { *buff_ptr = temp_ptr[i]; buff_ptr++; buff_len++; } /* Put the binary representation bytes in last */ temp_ptr = (char*) ipc_val; for(i = 0; i < len; i++) buff_ptr[i] = temp_ptr[i]; buff_ptr += len; buff_len += len; /* Put the print value in */ strcpy(buff_ptr, print_val); buff_ptr += strlen(print_val); buff_len += (int) strlen(print_val); /* Send the data to the IPC channel */ return ipc_send_line_binary(buff, buff_len); #endif } tmpk8ny_4pz/src/xspice/ipc/ipcstdio.c0000644000175000017500000000303513546075722020000 0ustar carstencarsten/* * Steve Tynor * * Generic Interprocess Communication module * * Used for debugging in absense of IPC interface. * */ #include "ngspice/ngspice.h" #ifdef IPC_DEBUG_VIA_STDIO #include #include "ngspice/ipc.h" #include "ngspice/ipcproto.h" #include /* 12/1/97 jg */ /*---------------------------------------------------------------------------*/ Ipc_Status_t ipc_transport_initialize_server ( char *server_name, Ipc_Mode_t m, Ipc_Protocol_t p, char *batch_filename ) { NG_IGNORE(server_name); NG_IGNORE(p); NG_IGNORE(batch_filename); assert (m == IPC_MODE_INTERACTIVE); printf ("INITIALIZE_SERVER\n"); return IPC_STATUS_OK; } /*---------------------------------------------------------------------------*/ Ipc_Status_t ipc_transport_get_line ( char *str, int *len, Ipc_Wait_t wait ) { NG_IGNORE(wait); printf ("GET_LINE\n"); gets (str); *len = (int) strlen (str); return IPC_STATUS_OK; } /*---------------------------------------------------------------------------*/ Ipc_Status_t ipc_transport_send_line ( char *str, int len ) { int i; printf ("SEND_LINE: /"); for (i = 0; i < len; i++) putchar (str[i]); printf ("/\n"); return IPC_STATUS_OK; } /*---------------------------------------------------------------------------*/ Ipc_Status_t ipc_transport_terminate_server (void) { return IPC_STATUS_OK; } #endif /* IPC_DEBUG_VIA_STDIO */ tmpk8ny_4pz/src/xspice/ipc/ipctiein.c0000644000175000017500000003212713546075722017772 0ustar carstencarsten/*============================================================================ FILE IPCtiein.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY Provides a protocol independent interface between the simulator and the IPC method used to interface to CAE packages. INTERFACES g_ipc (global variable) ipc_handle_stop() ipc_handle_returni() ipc_handle_mintime() ipc_handle_vtrans() ipc_send_stdout() ipc_send_stderr() ipc_send_std_files() ipc_screen_name() ipc_get_devices() ipc_free_devices() ipc_check_pause_stop() REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #define CONFIG #include "ngspice/ngspice.h" #include "ngspice/inpdefs.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "bjt/bjtdefs.h" #include "jfet/jfetdefs.h" #include "mos1/mos1defs.h" #include "mos2/mos2defs.h" #include "mos3/mos3defs.h" #include "ngspice/mifproto.h" #include "ngspice/ipc.h" #include "ngspice/ipctiein.h" /* Global variable g_ipc is used by the SPICE mods that take care of interprocess communications activities. */ Ipc_Tiein_t g_ipc = { IPC_FALSE, /* enabled */ IPC_MODE_INTERACTIVE, /* mode */ IPC_ANAL_DCOP, /* analysis mode */ IPC_FALSE, /* parse_error */ IPC_FALSE, /* run_error */ IPC_FALSE, /* errchk_sent */ IPC_FALSE, /* returni */ 0.0, /* mintime */ 0.0, /* lasttime */ 0.0, /* cpu time */ NULL, /* send array */ NULL, /* log file */ { /* vtrans struct */ 0, /* size */ NULL, /* vsrc_name array */ NULL, /* device_name array */ }, IPC_FALSE, /* stop analysis */ }; /* ipc_handle_stop This function sets a flag in the g_ipc variable to signal that a stop message has been received over the IPC channel. */ void ipc_handle_stop(void) { g_ipc.stop_analysis = IPC_TRUE; } /* ipc_handle_returni This function sets a flag in the g_ipc variable to signal that a message has been received over the IPC channel specifying that current values are to be returned in the results data sets. */ void ipc_handle_returni(void) { g_ipc.returni = IPC_TRUE; } /* ipc_handle_mintime This function sets a value in the g_ipc variable that specifies how often data is to be returned as it is computed. If the simulator takes timestep backups, data may still be returned more often that that specified by 'mintime' so that glitches are not missed. */ void ipc_handle_mintime(double time) { g_ipc.mintime = time; } /* ipc_handle_vtrans This function processes arguments from a #VTRANS card received over the IPC channel. The data on the card specifies that a particular zero-valued voltage source name should be translated to the specified instance name for which it was setup to monitor currents. */ void ipc_handle_vtrans( char *vsrc, /* The name of the voltage source to be translated */ char *dev) /* The device name the vsource name should be translated to */ { int i; int size; if(g_ipc.vtrans.size == 0) { g_ipc.vtrans.size = 1; g_ipc.vtrans.vsrc_name = TMALLOC(char *, 1); g_ipc.vtrans.device_name = TMALLOC(char *, 1); g_ipc.vtrans.vsrc_name[0] = MIFcopy(vsrc); g_ipc.vtrans.device_name[0] = MIFcopy(dev); } else { g_ipc.vtrans.size++; size = g_ipc.vtrans.size; i = g_ipc.vtrans.size - 1; g_ipc.vtrans.vsrc_name = TREALLOC(char *, g_ipc.vtrans.vsrc_name, size); g_ipc.vtrans.device_name = TREALLOC(char *, g_ipc.vtrans.device_name, size); g_ipc.vtrans.vsrc_name[i] = MIFcopy(vsrc); g_ipc.vtrans.device_name[i] = MIFcopy(dev); } } /* ipc_send_stdout This function sends the data written to stdout over the IPC channel. This stream was previously redirected to a temporary file during the simulation. */ void ipc_send_stdout(void) { int c; int len; char buf[IPC_MAX_LINE_LEN+1]; /* rewind the redirected stdout stream */ rewind(stdout); /* Begin reading from the top of file and send lines */ /* over the IPC channel. */ /* Don't send newlines. Also, if line is > IPC_MAX_LINE_LEN chars */ /* we must wrap it because Mspice can't handle it */ len = 0; while( (c=fgetc(stdout)) != EOF) { if(c != '\n') { buf[len] = (char) c; len++; } if((c == '\n') || (len == IPC_MAX_LINE_LEN)) { buf[len] = '\0'; ipc_send_line(buf); len = 0; } } if(len > 0) { buf[len] = '\0'; ipc_send_line(buf); } /* Finally, rewind file again to discard the data already sent */ rewind(stdout); } /* ipc_send_stderr This function sends the data written to stderr over the IPC channel. This stream was previously redirected to a temporary file during the simulation. */ void ipc_send_stderr(void) { int c; int len; char buf[IPC_MAX_LINE_LEN+1]; /* rewind the redirected stderr stream */ rewind(stderr); /* Begin reading from the top of file and send lines */ /* over the IPC channel. */ /* Don't send newlines. Also, if line is > IPC_MAX_LINE_LEN chars */ /* we must wrap it because Mspice can't handle it */ len = 0; while( (c=fgetc(stderr)) != EOF) { if(c != '\n') { buf[len] = (char) c; len++; } if((c == '\n') || (len == IPC_MAX_LINE_LEN)) { buf[len] = '\0'; ipc_send_line(buf); len = 0; } } if(len > 0) { buf[len] = '\0'; ipc_send_line(buf); } /* Finally, rewind file again to discard the data already sent */ rewind(stderr); } /* ipc_send_std_files This function sends the data written to stdout and stderr over the IPC channel. These streams were previously redirected to temporary files during the simulation. */ Ipc_Status_t ipc_send_std_files(void) { ipc_send_stdout(); ipc_send_stderr(); return(ipc_flush()); } /* ipc_screen_name This function screens names of instances and nodes to limit the data returned over the IPC channel. */ Ipc_Boolean_t ipc_screen_name(char *name, char *mapped_name) { char *endp; int i; int len; long l; /* Return FALSE if name is in a subcircuit */ for(i = 0; name[i] != '\0'; i++) { if(name[i] == ':') return(IPC_FALSE); } /* Determine if name is numeric and what value is */ l = strtol(name, &endp, 10); /* If numeric */ if(*endp == '\0') { /* Return FALSE if >100,000 -> added by ms_server in ATESSE 1.0 */ if(l >= 100000) return(IPC_FALSE); /* Otherwise, copy name to mapped name and return true */ else { strcpy(mapped_name,name); return(IPC_TRUE); } } /* If node is an internal node from a semiconductor (indicated by a */ /* trailing #collector, #source, ...), do not return its current. */ /* Otherwise, map to upper case and eliminate trailing "#branch" if any. */ for(i = 0; name[i]; i++) { if(name[i] == '#') { if(strcmp(name + i, "#branch") == 0) break; else return(IPC_FALSE); } else { if(islower_c(name[i])) mapped_name[i] = toupper_c(name[i]); else mapped_name[i] = name[i]; } } mapped_name[i] = '\0'; len = i; /* If len != 8 or 6'th char not equal to $, then doesn't need vtrans */ /* Otherwise, translate to device name that it monitors */ if(len != 8) return(IPC_TRUE); else if(name[5] != '$') return(IPC_TRUE); else { /* Scan list of prefixes in VTRANS table and convert name */ for(i = 0; i < g_ipc.vtrans.size; i++) { if(strncmp(mapped_name, g_ipc.vtrans.vsrc_name[i], 5) == 0) { strcpy(mapped_name, g_ipc.vtrans.device_name[i]); return(IPC_TRUE); } } return(IPC_TRUE); } } /* ipc_get_devices This function is used to setup the OUTinterface data structure that determines what instances will have data returned over the IPC channel. */ int ipc_get_devices( CKTcircuit *ckt, /* The circuit structure */ char *device, /* The device name as it appears in the info struct */ char ***names, /* Array of name strings to be built */ double **modtypes) /* Array of types to be built */ { int index; int num_instances; GENmodel *model; GENinstance *here; char *inst_name; int inst_name_len; int i; BJTmodel *BJTmod; JFETmodel *JFETmod; MOS1model *MOS1mod; MOS2model *MOS2mod; MOS3model *MOS3mod; /* Initialize local variables */ num_instances = 0; /* Get the index into the circuit structure linked list of models */ index = INPtypelook(device); /* Iterate through all models of this type */ for(model = ckt->CKThead[index]; model; model = model->GENnextModel) { /* Iterate through all instance of this model */ for(here = model->GENinstances; here; here = here->GENnextInstance) { /* Get the name of the instance */ inst_name = here->GENname; inst_name_len = (int) strlen(inst_name); /* Skip if it is a inside a subcircuit */ for(i = 0; i < inst_name_len; i++) if(inst_name[i] == ':') break; if(i < inst_name_len) continue; /* Otherwise, add the name to the list */ num_instances++; if(num_instances == 1) *names = TMALLOC(char *, 1); else *names = TREALLOC(char *, *names, num_instances); (*names)[num_instances-1] = MIFcopy(inst_name); /* Then get the type if it is a Q J or M */ if(num_instances == 1) *modtypes = TMALLOC(double, 1); else *modtypes = TREALLOC(double, *modtypes, num_instances); if(strcmp(device,"BJT") == 0) { BJTmod = (BJTmodel *) model; (*modtypes)[num_instances-1] = BJTmod->BJTtype; } else if(strcmp(device,"JFET") == 0) { JFETmod = (JFETmodel *) model; (*modtypes)[num_instances-1] = JFETmod->JFETtype; } else if(strcmp(device,"Mos1") == 0) { MOS1mod = (MOS1model *) model; (*modtypes)[num_instances-1] = MOS1mod->MOS1type; } else if(strcmp(device,"Mos2") == 0) { MOS2mod = (MOS2model *) model; (*modtypes)[num_instances-1] = MOS2mod->MOS2type; } else if(strcmp(device,"Mos3") == 0) { MOS3mod = (MOS3model *) model; (*modtypes)[num_instances-1] = MOS3mod->MOS3type; } else { (*modtypes)[num_instances-1] = 1.0; } } /* end for all instances */ } /* end for all models */ return(num_instances); } /* ipc_free_devices This function frees temporary data created by ipc_get_devices(). */ void ipc_free_devices( int num_items, /* Number of things to free */ char **names, /* Array of name strings to be built */ double *modtypes) /* Array of types to be built */ { int i; for(i = 0; i < num_items; i++) { FREE(names[i]); names[i] = NULL; } if(num_items > 0) { FREE(names); FREE(modtypes); names = NULL; modtypes = NULL; } } /* ipc_check_pause_stop This function is called at various times during a simulation to check for incoming messages of the form >STOP or >PAUSE signaling that simulation should be stopped or paused. Processing of the messages is handled by ipc_get_line(). */ void ipc_check_pause_stop(void) { char buf[1025]; int len; /* If already seen stop analysis, don't call ipc_get_line, just return. */ /* This is provided so that the function can be called multiple times */ /* during the process of stopping */ if(g_ipc.stop_analysis) return; /* Otherwise do a non-blocking call to ipc_get_line() to check for messages. */ /* We assume that the only possible messages at this point are >PAUSE */ /* and >STOP, so we don't do anything with the returned text if any */ ipc_get_line(buf, &len, IPC_NO_WAIT); } tmpk8ny_4pz/src/xspice/ipc/ipcsockets.c0000644000175000017500000005031113546075722020330 0ustar carstencarsten/*============================================================================= FILE IPCsockets.c Copyright 1991 Georgia Tech Research Corporation, Atlanta, Georgia 30332 All Rights Reserved PROJECT ATESSE A-8503 AUTHOR Stefan Roth July 1991 MODIFICATIONS none SUMMARY Generic Interprocess Communication module Provides compatibility for the new SPICE simulator to both the MSPICE user interface and BCP (via ATESSE v.1 style AEGIS mailboxes) and the new ATESSE v.2 Simulator Interface and BCP (via BSD Sockets). This file contains the BSD sockets version. The Simulator is the server, while the SI and BCP will be the clients. INTERFACES FILE ROUTINE CALLED IPC.c ipc_get_line(); REFERENCED FILES Outputs to stderr. =============================================================================*/ /*============================================================================= DESCRIPTION OF FUNCTIONALITY: Outline of Initialize_Server function: create socket; bind name to socket; getsockname; listen; sock_state = IPC_SOCK_INITIALIZED; return ipc_get_line (); Format of a message line: bytes description ----- ------------------- 0 recognition character for beginning of line; value is BOL_CHAR. 1-4 message length (not including bytes 0-4); 32 bits in htonl format; if value = -1, then EOF and socket should be closed. 5-N+5 message body of length specified in bytes 1-4. The bytes before the message body are the message header. The header length is specified as SOCK_MSG_HDR_LEN bytes. Outline of Get_Line function: read 5 characters; verify that first char is BOL_CHAR; interpret message length (N) from bytes 1-4; do error checking on message header bytes; read N characters as message body; do error checking on message body read; Outline of Send_Line function: write BOL_CHAR; write 4-byte message body length write message body (N bytes) do error checking after each write operation Outline of Terminate_Server function: Continue to read lines (with ipc_transport_get_line) and ignore them until socket EOF is reached; Close the socket. =============================================================================*/ #include "ngspice/ngspice.h" #ifdef IPC_UNIX_SOCKETS /*=== INCLUDE FILES ===*/ #include #include #include "ngspice/ipc.h" #include "ngspice/ipctiein.h" /*=== TYPE DEFINITIONS ===*/ typedef enum { IPC_SOCK_UNINITIALIZED, IPC_SOCK_INITIALIZED, IPC_SOCK_CONNECTED_TO_CLIENT } Ipc_Sock_State_t; /*=== LOCAL VARIABLES ===*/ static int sock_desc; /* socket descriptor */ static int msg_stream; /* socket stream */ static Ipc_Sock_State_t sock_state = IPC_SOCK_UNINITIALIZED; /*=== INCLUDE FILES ===*/ #include "ngspice/ipcproto.h" /*============================================================================= FUNCTION ipc_transport_initialize_server AUTHORS July 1991 Stefan Roth MODIFICATIONS NONE SUMMARY Creates and opens the BSD socket of the server. Listens for requests by a client and then reads the first line message. INTERFACES Called by: (IPC.c) ipc_initialize_server(); RETURNED VALUE Ipc_Status_t - returns status of the socket connection. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE =============================================================================*/ Ipc_Status_t ipc_transport_initialize_server ( char *server_name, /* not used */ Ipc_Mode_t mode, /* not used */ Ipc_Protocol_t protocol, /* IN - only used in assert */ char *batch_filename ) /* OUT - returns a value */ /* Note that unused parameters are required to maintain compatibility */ /* with version 1 (mailboxes) functions of the same names. */ { struct sockaddr_in server; /* Server specifications for socket*/ unsigned int server_length; /* Size of server structure */ int port_num; /* Port number converted from server_name */ NG_IGNORE(mode); NG_IGNORE(protocol); /* assert (protocol == IPC_PROTOCOL_V2); */ /* allow v1 protocol - wbk */ assert (sock_state == IPC_SOCK_UNINITIALIZED); /* convert server_name (from atesse_xspice invocation line) to a port */ /* number */ port_num = atoi(server_name); if((port_num > 0) && (port_num < 1024)) { /* Reserved port number */ perror ("ERROR: IPC Port numbers below 1024 are reserved"); sock_state = IPC_SOCK_UNINITIALIZED; return IPC_STATUS_ERROR; } sock_desc = socket (AF_INET, SOCK_STREAM, 0); if (sock_desc < 0) { /* Unsuccessful socket opening */ perror ("ERROR: IPC Creating socket"); sock_state = IPC_SOCK_UNINITIALIZED; return IPC_STATUS_ERROR; } /* Socket opened successfully */ server.sin_family = AF_INET; server.sin_addr.s_addr = INADDR_ANY; server.sin_port = SOCKET_PORT; server_length = sizeof (server); if (bind (sock_desc, (struct sockaddr *)&server, server_length) < 0) { fprintf (stderr, "ERROR: IPC: Bind unsuccessful\n"); perror ("ERROR: IPC"); sock_state = IPC_SOCK_UNINITIALIZED; return IPC_STATUS_ERROR; } if (getsockname (sock_desc, (struct sockaddr *)&server, &server_length) < 0) { fprintf (stderr, "ERROR: IPC: getting socket name\n"); perror ("ERROR: IPC"); sock_state = IPC_SOCK_UNINITIALIZED; return IPC_STATUS_ERROR; } fprintf (stderr, "Socket port %d.\n", ntohs(server.sin_port)); listen (sock_desc, 5); sock_state = IPC_SOCK_INITIALIZED; /* Socket ok to use now */ /* * First record is the name of the batch filename if we're in batch mode. */ if(g_ipc.mode == IPC_MODE_BATCH) { int len; return ipc_get_line (batch_filename, &len, IPC_WAIT); } /* Return success */ return IPC_STATUS_OK; } /* end ipc_transport_initialize_server */ /*============================================================================= FUNCTION bytes_to_integer AUTHORS July 1991 Stefan Roth MODIFICATIONS NONE SUMMARY Convert four bytes at START in the string STR to a 32-bit unsigned integer. The string is assumed to be in network byte order and the returned value is converted to host byte order (with ntohl). INTERFACES Local to this file. Called by: ipc_transport_get_line(); RETURNED VALUE u_long - unsigned 32 bit integer GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE =============================================================================*/ /* FIXME, * this is seriously broken, * once it was probably based upon htonl(), * yet with broken types * then the game has changed and strtoul() was used * with a ascii representation of the length * (probably as a hacky workaround, because it proved unreliable) * but the buffer is not terminated properly * Fix this when needed, currently this functionality looks like * an unused ancient artefact * Fix it with regard to ipc_transport_get_line() and ipc_transport_send_line() * and in concert with the actual user at the other side of the socket */ static u_long bytes_to_integer ( char *str, /* IN - string that contains the bytes to convert */ int start ) /* IN - index into string where bytes are */ { uint32_t u; /* Value to be returned */ char buff[4]; /* Transfer str into buff to word align reqd data */ int index; /* Index into str and buff for transfer */ /* Get the str+start character and cast it into a u_long and put the value through the network-to-host-short converter and store it in the variable u. */ index = 0; while (index < (int) sizeof(u)) { buff[index] = str[index+start]; index++; } /* u = ntohl (*((u_long *) buff)); */ u = (uint32_t) strtoul(buff, NULL, 10); return u; } /* end bytes_to_integer */ /*============================================================================= FUNCTION handle_socket_eof AUTHORS July 1991 Stefan Roth MODIFICATIONS NONE SUMMARY Do processing when the socket reaches EOF or when a message from the client states that EOF has been reached. INTERFACES Local to this file. Called by: ipc_transport_get_line(); RETURNED VALUE Ipc_Status_t - always IPC_STATUS_EOF GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE =============================================================================*/ static Ipc_Status_t handle_socket_eof (void) { close (msg_stream); close (sock_desc); sock_state = IPC_SOCK_UNINITIALIZED; return IPC_STATUS_EOF; } /* handle_socket_eof */ /*============================================================================= FUNCTION read_sock AUTHORS July 1991 Stefan Roth MODIFICATIONS NONE SUMMARY Read N bytes from a socket. Only returns when the read had an error, when 0 bytes (EOF) could be read, or LENGTH bytes are read. INTERFACES Local to this file. Called by: ipc_transport_get_line(); RETURNED VALUE int - Returns the total number of bytes read. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE =============================================================================*/ static int read_sock ( int stream, /* IN - Socket stream */ char *buffer, /* OUT - buffer to store incoming data */ int length, /* IN - Number of bytes to be read */ Ipc_Wait_t wait, /* IN - type of read operation */ int flags ) /* IN - Original socket flags for blocking read */ { int count; /* Number of bytes read with last `read` */ int totalcount; /* total number of bytes read */ char *buf2; /* count = 0; */ /* while (count < length) { */ /* buffer[count] = 'x'; */ /* count++; */ /* } */ count = (int) read (stream, buffer, (size_t) length); if (wait == IPC_NO_WAIT) { fcntl (stream, F_SETFL, flags); /* Revert to blocking read */ } if ((count <= 0) || (count == length)) { /* If error or if read in reqd number of bytes: */ return count; } else { /* Only got some of the bytes requested */ totalcount = count; buf2 = &buffer[totalcount]; length = length - count; while (length > 0) { count = (int) read (stream, buf2, (size_t) length); if (count <= 0) /* EOF or read error */ break; totalcount = totalcount + count; buf2 = &buffer[totalcount]; length = length - count; } if (length != 0) { fprintf (stderr, "WARNING: READ_SOCK read %d bytes instead of %d\n", totalcount, totalcount + length); } return totalcount; } } /* end read_sock */ /*============================================================================= FUNCTION ipc_transport_get_line AUTHORS July 1991 Stefan Roth MODIFICATIONS NONE SUMMARY Main function for reading one line from a socket. Requires that the socket be open. Lines are mostly SPICE code, but commands may also be embedded in the socket data and they are interpreted by this function. Therefore, this function may cause the socket to be closed. INTERFACES Called by: ipc_transport_terminate_server(); (IPC.c) ipc_get_line(); RETURNED VALUE Ipc_Status_t - returns status of the read operation GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE =============================================================================*/ Ipc_Status_t ipc_transport_get_line ( char *str, /* returns the result, null terminated */ int *len, /* length of str passed IN and passed OUT */ Ipc_Wait_t wait ) /* IN - wait or dont wait on incoming msg */ { int count = 0; /* number of bytes read */ int message_length; /* extracted from message header */ if (sock_state == IPC_SOCK_UNINITIALIZED) { fprintf (stderr, "ERROR: IPC: Attempted to read from uninitialized socket\n"); return IPC_STATUS_ERROR; } assert ((sock_state == IPC_SOCK_CONNECTED_TO_CLIENT) || (sock_state == IPC_SOCK_INITIALIZED)); if (sock_state == IPC_SOCK_INITIALIZED) { /* We have an open socket but have not connected to a client. */ /* Accept a connection from a client. */ msg_stream = accept (sock_desc, (struct sockaddr *)0, (unsigned int *)0); if (msg_stream == -1) { fprintf (stderr, "ERROR: IPC: Server accepting request\n"); perror ("ERROR: IPC"); return IPC_STATUS_ERROR; } sock_state = IPC_SOCK_CONNECTED_TO_CLIENT; } /*-----------------------------------------------------------------------*/ /* First read in the message header. */ { int flags; flags = fcntl(msg_stream, F_GETFL, NULL); /* Blocking read mode */ if (wait == IPC_WAIT) { /* Block here and wait for the next message */ count = read_sock (msg_stream, str, SOCK_MSG_HDR_LEN, wait, flags); if (count == 0) { /* EOF, will this ever happen? */ /* fprintf (stderr, "WARNING: IPC: Reached eof on socket\n"); */ return handle_socket_eof (); } } else if (wait == IPC_NO_WAIT) { /* Read message, but do not wait if none available. */ fcntl (msg_stream, F_SETFL, flags | O_NDELAY); count = read_sock (msg_stream, str, SOCK_MSG_HDR_LEN, wait, flags); if (count == 0) { /* EOF, will this ever happen? */ /* fprintf (stderr, "WARNING: IPC: Reached eof on socket\n"); */ return handle_socket_eof (); } else if (count == -1) { if (errno == EWOULDBLOCK) { return IPC_STATUS_NO_DATA; } } } else { /* Serious problem, since it is not reading anything. */ fprintf (stderr, "ERROR: IPC: invalid wait arg to ipc_transport_get_line\n"); } } /* Do more error checking on the read in values of the message header: */ if (count == -1) { fprintf (stderr, "ERROR: IPC: Reading from socket\n"); perror ("ERROR: IPC"); return IPC_STATUS_ERROR; } else if (str[0] != BOL_CHAR) { fprintf (stderr, "ERROR: IPC: Did not find beginning of message header (%c)\n", str[0]); return IPC_STATUS_ERROR; } else if ((message_length = (int) bytes_to_integer (str, 1)) == -1) { /* fprintf (stderr, "WARNING: IPC: Reached eof on socket\n"); */ return handle_socket_eof (); } else if (message_length == 0) { *len = 0; return IPC_STATUS_NO_DATA; /* Invalid test... delete - wbk } else if (message_length > *len) { fprintf (stderr, "ERROR: IPC: Buffer (%d) is too short for message (%d)\n", *len, message_length); return IPC_STATUS_ERROR; */ } /*-----------------------------------------------------------------------*/ /* Now read in the message body. */ /* Always block here since the message header was already read and */ /* we must get the body. */ *len = message_length; count = read_sock (msg_stream, str, message_length, IPC_WAIT, 0); if (count == 0) { /* EOF, will this ever happen? */ /* fprintf (stderr, */ /* "WARNING: IPC: Reached eof in message body on socket\n");*/ return handle_socket_eof (); } else if (count == -1) { fprintf (stderr, "ERROR: IPC: reading message body from socket\n"); perror ("ERROR: IPC"); return IPC_STATUS_ERROR; } /* Looks like we have a valid message here. Put in the string terminator. */ *len = count; str[count] = '\0'; return IPC_STATUS_OK; } /* end ipc_transport_get_line */ /*============================================================================= FUNCTION ipc_transport_send_line AUTHORS July 1991 Stefan Roth MODIFICATIONS NONE SUMMARY Send a line of information. First sends a message header and then the actual message body. Error checking is done to make reasonably sure that the data was sent. INTERFACES Called by: (IPC.c) ipc_flush (); RETURNED VALUE Ipc_Status_t - returns status of the send operation (typically IPC_STATUS_ERROR or IPC_STATUS_OK). GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE =============================================================================*/ Ipc_Status_t ipc_transport_send_line ( char *str, /* IN - String to write */ int len ) /* IN - Number of characters out of STR to write */ { int count; /* Counts how many bytes were actually written */ u_long u; /* 32-bit placeholder for transmission of LEN */ char hdr_buff[5]; /* Buffer for building header message in */ int i; /* Temporary counter */ char *char_ptr; /* Pointer for int to bytes conversion */ if (sock_state != IPC_SOCK_CONNECTED_TO_CLIENT) { fprintf (stderr, "ERROR: IPC: Attempt to write to non-open socket\n"); return IPC_STATUS_ERROR; } /* Write message body header with length: */ hdr_buff[0] = BOL_CHAR; u = htonl ((uint32_t) len); char_ptr = (char *) &u; for(i = 0; i < 4; i++) hdr_buff[i+1] = char_ptr[i]; count = (int) write (msg_stream, hdr_buff, 5); if (count != 5) { fprintf (stderr, "ERROR: IPC: (%d) send line error 1\n", count); return IPC_STATUS_ERROR; } /* Write message body: */ count = (int) write (msg_stream, str, (size_t) len); if (count != len) { fprintf (stderr, "ERROR: IPC: (%d) send line error 2\n", count); return IPC_STATUS_ERROR; } return IPC_STATUS_OK; } /* end ipc_transport_send_line */ /*============================================================================= FUNCTION ipc_transport_terminate_server AUTHORS July 1991 Stefan Roth MODIFICATIONS NONE SUMMARY This function reads all pending incoming messages and discards them. Reading continues until a read error occurs or EOF is reached, at which time the socket is closed. Note that this function does not actually close the socket. This is done in ipc_transport_get_line, which is called in this function. In this function, the incoming line length is limited. See buffer below. INTERFACES Called by: (IPC.c) ipc_terminate_server(); RETURNED VALUE Ipc_Status_t - returns status of last read operation (always IPC_STATUS_ERROR or IPC_STATUS_EOF). GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE =============================================================================*/ Ipc_Status_t ipc_transport_terminate_server (void) { char buffer[17000]; /* temp buffer for incoming data */ int len; /* placeholder var to as arg to function */ Ipc_Status_t status; /* value to be returned from function */ int max_size; /* Max length of buffer */ max_size = sizeof (buffer); do { len = max_size; status = ipc_transport_get_line (buffer, &len, IPC_WAIT); } while ((status != IPC_STATUS_ERROR) && (status != IPC_STATUS_EOF)); return status; } #endif /* IPC_UNIX_SOCKETS */ tmpk8ny_4pz/src/xspice/ipc/ipcaegis.c0000644000175000017500000002045013546075722017746 0ustar carstencarsten/*============================================================================ FILE IPCaegis.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Steve Tynor MODIFICATIONS SUMMARY Provides compatibility for the new XSPICE simulator to both the MSPICE user interface and BCP via ATESSE v.1 style AEGIS mailboxes. INTERFACES REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #ifdef IPC_AEGIS_MAILBOXES #include #include #include #include #include "ngspice/memory.h" #include "ngspice/ipc.h" typedef unsigned char Buffer_char_t; static status_$t status; typedef enum { IPC_MBX_UNINITIALIZED, IPC_MBX_INITIALIZED, IPC_MBX_CONNECTED_TO_CLIENT, } Ipc_Mbx_State_t; static void *mbx_handle; static Ipc_Mbx_State_t mbx_state = IPC_MBX_UNINITIALIZED; static mbx_$server_msg_t mbx_send_msg_buf; static mbx_$server_msg_t mbx_recieve_msg_buf; static mbx_$server_msg_t *mbx_ret_ptr; static int mbx_ret_len; static short mbx_chan; #include "ngspice/ipcproto.h" /*---------------------------------------------------------------------------*/ /* ipc_transport_initialize_server This function creates an Aegis mailbox, and if successful, calls ipc_get_line to wait for the first record sent which is assumed to be the batch output filename. */ Ipc_Status_t ipc_transport_initialize_server (server_name, m, p, batch_filename) char *server_name; /* The mailbox pathname */ Ipc_Mode_t m; /* Mode - interactive or batch */ Ipc_Protocol_t p; /* Protocol type */ char *batch_filename; /* Batch filename returned */ { int len; /* extern void *malloc(); */ assert (p == IPC_PROTOCOL_V1); mbx_$create_server (server_name, strlen (server_name), mbx_$serv_msg_max, 1, &mbx_handle, &status); if (status.all != status_$ok) { fprintf (stderr, "ERROR: IPC: Error creating mailbox server \"%s\"\n", server_name); error_$print (status); mbx_state = IPC_MBX_UNINITIALIZED; return IPC_STATUS_ERROR; } else { mbx_state = IPC_MBX_INITIALIZED; /* * First record is the name of the batch filename - whether we're in * batch mode or not: */ return ipc_get_line (batch_filename, &len, IPC_WAIT); } /* * shouldn't get here */ assert (0); return IPC_STATUS_ERROR; } /*---------------------------------------------------------------------------*/ Ipc_Status_t extract_msg (str, len) char *str; int *len; { *len = mbx_ret_len - mbx_$serv_msg_hdr_len; assert (*len >= 0); /* * null terminate before copy: */ mbx_ret_ptr->data [*len] = '\0'; strcpy (str, mbx_ret_ptr->data); return IPC_STATUS_OK; } /*---------------------------------------------------------------------------*/ /* ipc_transport_get_line This function reads data sent by a client over the mailbox channel. It also handles the initial opening of the mailbox channel when requested by a client. */ Ipc_Status_t ipc_transport_get_line (str, len, wait) char *str; /* The string text read from IPC channel */ int *len; /* The length of str */ Ipc_Wait_t wait; /* Blocking or non-blocking */ { if (mbx_state == IPC_MBX_UNINITIALIZED) { fprintf (stderr, "ERROR: IPC: Attempted to read from non-initialized mailbox\n"); return IPC_STATUS_ERROR; } assert ((mbx_state == IPC_MBX_CONNECTED_TO_CLIENT) || (mbx_state == IPC_MBX_INITIALIZED)); for (;;) { if (wait == IPC_WAIT) { mbx_$get_rec (mbx_handle, &mbx_recieve_msg_buf, mbx_$serv_msg_max, &mbx_ret_ptr, &mbx_ret_len, &status); } else { mbx_$get_conditional (mbx_handle, &mbx_recieve_msg_buf, mbx_$serv_msg_max, &mbx_ret_ptr, &mbx_ret_len, &status); if (status.all == mbx_$channel_empty) { return IPC_STATUS_NO_DATA; } } if (status.all != status_$ok) { fprintf (stderr, "ERROR: IPC: Error reading from mailbox\n"); error_$print (status); return IPC_STATUS_ERROR; } switch (mbx_ret_ptr->mt) { case mbx_$channel_open_mt: if (mbx_state == IPC_MBX_CONNECTED_TO_CLIENT) { /* * we're already connected to a client... refuse the connection */ mbx_send_msg_buf.mt = mbx_$reject_open_mt; } else { mbx_send_msg_buf.mt = mbx_$accept_open_mt; mbx_state = IPC_MBX_CONNECTED_TO_CLIENT; } mbx_send_msg_buf.cnt = mbx_$serv_msg_hdr_len; mbx_chan = mbx_ret_ptr->chan; mbx_send_msg_buf.chan = mbx_chan; mbx_$put_rec (mbx_handle, &mbx_send_msg_buf, mbx_$serv_msg_hdr_len, &status); if (status.all != status_$ok) { fprintf (stderr, "ERROR: IPC: Error writing to mailbox\n"); error_$print (status); return IPC_STATUS_ERROR; } /* * check to see if there was a message buried in the open request: */ if (mbx_ret_len > mbx_$serv_msg_hdr_len) { return extract_msg (str, len); } break; case mbx_$eof_mt: mbx_chan = mbx_ret_ptr->chan; mbx_$deallocate(mbx_handle, mbx_chan, &status); if (status.all != status_$ok) { fprintf (stderr, "ERROR: IPC: Error deallocating mailbox\n"); error_$print (status); return IPC_STATUS_ERROR; } mbx_state = IPC_MBX_INITIALIZED; return IPC_STATUS_EOF; break; case mbx_$data_mt: assert (mbx_state == IPC_MBX_CONNECTED_TO_CLIENT); return extract_msg (str, len); break; case mbx_$data_partial_mt: fprintf (stderr, "ERROR: IPC: Recieved partial data message - ignored\n"); break; default: fprintf (stderr, "ERROR: IPC: Bad message type (0x%x) recieved\n", mbx_ret_ptr->mt); } } return IPC_STATUS_ERROR; } /*---------------------------------------------------------------------------*/ /* ipc_transport_terminate_server This function calls ipc\_transport\_get\_line until it receives an EOF from the client, which concludes the communication. */ Ipc_Status_t ipc_transport_terminate_server () { char buffer[300]; int len; Ipc_Status_t status; do { status = ipc_transport_get_line (buffer, &len, IPC_WAIT); } while ((status != IPC_STATUS_ERROR) && (status != IPC_STATUS_EOF)); return status; } /*---------------------------------------------------------------------------*/ /* ipc_transport_send_line This function sends a message to the current client through the mailbox channel. */ Ipc_Status_t ipc_transport_send_line (str, len) char *str; /* The bytes to send */ int len; /* The number of bytes from str to send */ { long cnt; if (mbx_state != IPC_MBX_CONNECTED_TO_CLIENT) { fprintf (stderr, "ERROR: IPC: Attempted to write to non-open mailbox\n"); return IPC_STATUS_ERROR; } mbx_send_msg_buf.mt = mbx_$data_mt; if (mbx_$serv_msg_hdr_len + len > mbx_$serv_msg_max) { fprintf (stderr, "ERROR: IPC: send_line message too long - truncating\n"); len = mbx_$serv_msg_max - mbx_$serv_msg_hdr_len; } mbx_send_msg_buf.cnt = mbx_$serv_msg_hdr_len + len; mbx_send_msg_buf.chan = mbx_chan; memcpy (mbx_send_msg_buf.data, str, len); cnt = mbx_send_msg_buf.cnt; mbx_$put_rec (mbx_handle, &mbx_send_msg_buf, cnt, &status); if (status.all != status_$ok) { fprintf (stderr, "ERROR: IPC: Error writing to mailbox\n"); error_$print (status); return IPC_STATUS_ERROR; } return IPC_STATUS_OK; } #else int intDummy1; #endif /* IPC_AEGIS_MAILBOXES */ tmpk8ny_4pz/src/xspice/icm/0000755000175000017500000000000013546075722016012 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/GNUmakefile.in0000644000175000017500000000725413546075722020501 0ustar carstencarsten# The master makefile to make spiceopus (TM) like codemodels # Under the GPLV2 or later license # 2003 - Stefan Jones include makedefs # The codemodels to make CMDIRS = spice2poly digital analog xtradev xtraevt table all: for cm in $(CMDIRS) ; do \ $(MAKE) cm=$$cm $$cm/$$cm.cm \ || exit 1; \ done install: all $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" for cm in $(CMDIRS) ; do \ $(INSTALL_PROGRAM) $$cm/$$cm.cm "$(DESTDIR)$(pkglibdir)" \ || exit 1; \ done $(INSTALL_DATA) $(srcdir)/dlmain.c "$(DESTDIR)$(pkgdatadir)" || exit $$?; uninstall: for cm in $(CMDIRS) ; do \ rm -f "$(DESTDIR)$(pkglibdir)/$$cm.cm"; \ done clean: for cm in $(CMDIRS) ; do \ $(MAKE) cm=$$cm cm-clean \ || exit 1; \ done #----------------------------------------------------------------------------- ifdef cm modlst := $(shell cat $(srcdir)/$(cm)/modpath.lst) udnlst := $(shell cat $(srcdir)/$(cm)/udnpath.lst) cm-dirs := $(cm) $(udnlst:%=$(cm)/%) $(modlst:%=$(cm)/%) cm-dep-dirs := $(cm-dirs:%=%/.deps) cm-gens := \ $(modlst:%=$(cm)/%/cfunc.c) \ $(modlst:%=$(cm)/%/ifspec.c) cm-objs := \ $(cm)/dlmain.o \ $(modlst:%=$(cm)/%/cfunc.o) \ $(modlst:%=$(cm)/%/ifspec.o) \ $(udnlst:%=$(cm)/%/udnfunc.o) cm-deps := \ $(cm)/.deps/dlmain.P \ $(modlst:%=$(cm)/%/.deps/cfunc.P) \ $(modlst:%=$(cm)/%/.deps/ifspec.P) \ $(udnlst:%=$(cm)/%/.deps/udnfunc.P) cm-descr := \ $(cm)/cmextrn.h \ $(cm)/cminfo.h \ $(cm)/udnextrn.h \ $(cm)/udninfo.h \ $(cm)/objects.inc -include $(cm-deps) .SECONDARY : $(cm-gens) cm-clean : -rm -f $(cm)/$(cm).cm -rm -f $(cm-descr) $(cm-objs) $(cm-gens) -rm -f $(cm-deps) cm-distclean : -rm -rf $(cm-dep-dirs) #----- $(cm)/$(cm).cm : $(cm-objs) $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(VIS_CFLAGS) $(LDFLAGS) $^ $(LIBS) -o $@ # "order-only" prerequisites # (info "(make) Prerequisite Types") $(cm-gens) $(cm-objs) $(cm-descr) : | cm-dirs cm-dirs : $(cm-dirs) $(cm-dep-dirs) $(cm-dirs) $(cm-dep-dirs) : $(MKDIR_P) $(cm-dirs) $(cm-dep-dirs) #----- # cancel builtin rules %.o : %.c %.o : %.mod # multiple targets in a pattern group ... # (info "(make) Pattern Intro") %/cmextrn.h %/cminfo.h %/udnextrn.h %/udninfo.h %/objects.inc : $(srcdir)/%/modpath.lst $(srcdir)/%/udnpath.lst CMPP_IDIR=$(srcdir)/$(@D) CMPP_ODIR=$(@D) $(CMPP) -lst %/ifspec.c : $(srcdir)/%/ifspec.ifs CMPP_IDIR=$(srcdir)/$(@D) CMPP_ODIR=$(@D) $(CMPP) -ifs %/cfunc.c : $(srcdir)/%/cfunc.mod CMPP_IDIR=$(srcdir)/$(@D) CMPP_ODIR=$(@D) $(CMPP) -mod gen_pp = $(DEPFLAGS) $(@D)/.deps/$(basename $(> $$x.P; \ rm $$x.pp endef COMPILE = $(CC) $(INCLUDES) -I$(cm) -I$(srcdir)/$(cm) $(CFLAGS) $(EXTRA_CFLAGS) $(VIS_CFLAGS) $(cm)/dlmain.o : $(srcdir)/dlmain.c $(cm-descr) $(COMPILE) $(gen_pp) -o $@ -c $< $(do-deps) $(cm)/%/cfunc.o : $(cm)/%/cfunc.c $(COMPILE) $(gen_pp) -I$(srcdir)/$( #include #include ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// // Do not modify anything below this line ////////////////////////////////////////////////////////////////////////////// SPICEdev *cmDEVices[] = { #include "cminfo.h" NULL }; int cmDEVicesCNT = sizeof(cmDEVices)/sizeof(SPICEdev *)-1; Evt_Udn_Info_t *cmEVTudns[] = { #include "udninfo.h" NULL }; int cmEVTudnCNT = sizeof(cmEVTudns)/sizeof(Evt_Udn_Info_t *)-1; // Pointer to core info structure containing pointers to core functions. struct coreInfo_t *coreitf; ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// // Functions that return pointers to structures. ////////////////////////////////////////////////////////////////////////////// #if defined (__MINGW32__) || defined (__CYGWIN__) || defined (_MSC_VER) #define CM_EXPORT __declspec(dllexport) #else /* use with gcc flag -fvisibility=hidden */ #if __GNUC__ >= 4 #define CM_EXPORT __attribute__ ((visibility ("default"))) #define CM_EXPORT_LOCAL __attribute__ ((visibility ("hidden"))) #else #define CM_EXPORT #define CM_EXPORT_LOCAL #endif #endif extern CM_EXPORT void *CMdevs(void); extern CM_EXPORT void *CMdevNum(void); extern CM_EXPORT void *CMudns(void); extern CM_EXPORT void *CMudnNum(void); extern CM_EXPORT void *CMgetCoreItfPtr(void); extern void *tmalloc(size_t num); extern void *trealloc(const void *str, size_t num); extern void txfree(const void *ptr); // This one returns the device table CM_EXPORT void *CMdevs(void) { return (void *)cmDEVices; } // This one returns the device count CM_EXPORT void *CMdevNum(void) { return (void *)&cmDEVicesCNT; } // This one returns the UDN table CM_EXPORT void *CMudns(void) { return (void *)cmEVTudns; } // This one returns the UDN count CM_EXPORT void *CMudnNum(void) { return (void *)&cmEVTudnCNT; } // This one returns the pointer to the pointer to the core interface structure CM_EXPORT void *CMgetCoreItfPtr(void) { return (void *)(&coreitf); } ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// // These functions call the real core functions of SPICE OPUS using the // pointers in coreitf structure. ////////////////////////////////////////////////////////////////////////////// void MIF_INP2A( CKTcircuit *ckt, /* circuit structure to put mod/inst structs in */ INPtables *tab, /* symbol table for node names, etc. */ struct card *current /* the card we are to parse */ ) { (coreitf->dllitf_MIF_INP2A)(ckt,tab,current); } char * MIFgetMod( CKTcircuit *ckt, char *name, INPmodel **model, INPtables *tab ) { return (coreitf->dllitf_MIFgetMod)(ckt,name,model,tab); } IFvalue * MIFgetValue( CKTcircuit *ckt, char **line, int type, INPtables *tab, char **err ) { return (coreitf->dllitf_MIFgetValue)(ckt,line,type,tab,err); } int MIFsetup( SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *state ) { return (coreitf->dllitf_MIFsetup)(matrix,inModel,ckt,state); } int MIFunsetup( GENmodel *inModel, CKTcircuit *ckt ) { return (coreitf->dllitf_MIFunsetup)(inModel,ckt); } int MIFload( GENmodel *inModel, CKTcircuit *ckt ) { return (coreitf->dllitf_MIFload)(inModel,ckt); } int MIFmParam( int param_index, IFvalue *value, GENmodel *inModel ) { return (coreitf->dllitf_MIFmParam)(param_index,value,inModel); } int MIFask( CKTcircuit *ckt, GENinstance *inst, int param_index, IFvalue *value, IFvalue *select ) { return (coreitf->dllitf_MIFask)(ckt,inst,param_index,value,select); } int MIFmAsk( CKTcircuit *ckt, GENmodel *inModel, int param_index, IFvalue *value ) { return (coreitf->dllitf_MIFmAsk)(ckt,inModel,param_index,value); } int MIFtrunc( GENmodel *inModel, CKTcircuit *ckt, double *timeStep ) { return (coreitf->dllitf_MIFtrunc)(inModel,ckt,timeStep); } int MIFconvTest( GENmodel *inModel, CKTcircuit *ckt ) { return (coreitf->dllitf_MIFconvTest)(inModel,ckt); } int MIFdelete( GENinstance *inst ) { return (coreitf->dllitf_MIFdelete)(inst); } int MIFmDelete( GENmodel *gen_model ) { return (coreitf->dllitf_MIFmDelete)(gen_model); } void MIFdestroy( void ) { (coreitf->dllitf_MIFdestroy)(); } char *MIFgettok( char **s ) { return (coreitf->dllitf_MIFgettok)(s); } char *MIFget_token( char **s, Mif_Token_Type_t *type ) { return (coreitf->dllitf_MIFget_token)(s,type); } Mif_Cntl_Src_Type_t MIFget_cntl_src_type( Mif_Port_Type_t in_port_type, Mif_Port_Type_t out_port_type ) { return (coreitf->dllitf_MIFget_cntl_src_type)(in_port_type,out_port_type); } char *MIFcopy(char *c) { return (coreitf->dllitf_MIFcopy)(c); } void cm_climit_fcn(double in, double in_offset, double cntl_upper, double cntl_lower, double lower_delta, double upper_delta, double limit_range, double gain, int percent, double *out_final, double *pout_pin_final, double *pout_pcntl_lower_final, double *pout_pcntl_upper_final) { (coreitf->dllitf_cm_climit_fcn)(in,in_offset,cntl_upper,cntl_lower,lower_delta, upper_delta,limit_range,gain,percent,out_final, pout_pin_final,pout_pcntl_lower_final, pout_pcntl_upper_final); } void cm_smooth_corner(double x_input, double x_center, double y_center, double domain, double lower_slope, double upper_slope, double *y_output, double *dy_dx) { (coreitf->dllitf_cm_smooth_corner)(x_input,x_center,y_center,domain,lower_slope, upper_slope,y_output,dy_dx); } void cm_smooth_discontinuity(double x_input, double x_lower, double y_lower, double x_upper, double y_upper, double *y_output, double *dy_dx) { (coreitf->dllitf_cm_smooth_discontinuity)(x_input,x_lower,y_lower,x_upper,y_upper, y_output,dy_dx); } double cm_smooth_pwl(double x_input, double *x, double *y, int size, double input_domain, double *dout_din) { return (coreitf->dllitf_cm_smooth_pwl)(x_input,x,y,size,input_domain,dout_din); } double cm_analog_ramp_factor(void) { return (coreitf->dllitf_cm_analog_ramp_factor)(); } void cm_analog_alloc(int tag, int bytes) { (coreitf->dllitf_cm_analog_alloc)(tag,bytes); } void *cm_analog_get_ptr(int tag, int timepoint) { return (coreitf->dllitf_cm_analog_get_ptr)(tag,timepoint); } int cm_analog_integrate(double integrand, double *integral, double *partial) { return (coreitf->dllitf_cm_analog_integrate)(integrand,integral,partial); } int cm_analog_converge(double *state) { return (coreitf->dllitf_cm_analog_converge)(state); } int cm_analog_set_temp_bkpt(double time) { return (coreitf->dllitf_cm_analog_set_temp_bkpt)(time); } int cm_analog_set_perm_bkpt(double time) { return (coreitf->dllitf_cm_analog_set_perm_bkpt)(time); } void cm_analog_not_converged(void) { (coreitf->dllitf_cm_analog_not_converged)(); } void cm_analog_auto_partial(void) { (coreitf->dllitf_cm_analog_auto_partial)(); } void cm_event_alloc(int tag, int bytes){ (coreitf->dllitf_cm_event_alloc)(tag,bytes); } void *cm_event_get_ptr(int tag, int timepoint) { return (coreitf->dllitf_cm_event_get_ptr)(tag,timepoint); } int cm_event_queue(double time) { return (coreitf->dllitf_cm_event_queue)(time); } char *cm_message_get_errmsg(void) { return (coreitf->dllitf_cm_message_get_errmsg)(); } int cm_message_send(char *msg) { return (coreitf->dllitf_cm_message_send)(msg); } double cm_netlist_get_c(void) { return (coreitf->dllitf_cm_netlist_get_c)(); } double cm_netlist_get_l(void) { return (coreitf->dllitf_cm_netlist_get_l)(); } Complex_t cm_complex_set(double real, double imag) { return (coreitf->dllitf_cm_complex_set)(real,imag); } Complex_t cm_complex_add(Complex_t x, Complex_t y) { return (coreitf->dllitf_cm_complex_add)(x,y); } Complex_t cm_complex_subtract(Complex_t x, Complex_t y) { return (coreitf->dllitf_cm_complex_subtract)(x,y); } Complex_t cm_complex_multiply(Complex_t x, Complex_t y) { return (coreitf->dllitf_cm_complex_multiply)(x,y); } Complex_t cm_complex_divide(Complex_t x, Complex_t y) { return (coreitf->dllitf_cm_complex_divide)(x,y); } char * cm_get_path(void) { return (coreitf->dllitf_cm_get_path)(); } CKTcircuit *cm_get_circuit(void) { return (coreitf->dllitf_cm_get_circuit)(); } FILE * cm_stream_out(void) { return (coreitf->dllitf_cm_stream_out)(); } FILE * cm_stream_in(void) { return (coreitf->dllitf_cm_stream_in)(); } FILE * cm_stream_err(void) { return (coreitf->dllitf_cm_stream_err)(); } void * malloc_pj(size_t s) { return (coreitf->dllitf_malloc_pj)(s); } void * calloc_pj(size_t s1, size_t s2) { return (coreitf->dllitf_calloc_pj)(s1,s2); } void * realloc_pj(const void *ptr, size_t s) { return (coreitf->dllitf_realloc_pj)(ptr,s); } void free_pj(const void *ptr) { (coreitf->dllitf_free_pj)(ptr); } void * tmalloc(size_t s) { return (coreitf->dllitf_tmalloc)(s); } void * trealloc(const void *ptr, size_t s) { return (coreitf->dllitf_trealloc)(ptr,s); } void txfree(const void *ptr) { (coreitf->dllitf_txfree)(ptr); } /* fopen_with_path() Opens an input file . Called from d_state, file_source, d_source. Firstly retrieves the path Infile_Path of the ngspice input netlist. Then searches for (and opens) an a sequence from Infile_Path/ NGSPICE_INPUT_DIR/, where the path is given by the environmental variable , where the path is the current directory */ #define MAX_PATH_LEN 1024 FILE *fopen_with_path(const char *path, const char *mode) { char buf[MAX_PATH_LEN+1]; FILE *fp; if((path[0] != '/') && (path[1] != ':')) { // const char *x = getenv("ngspice_vpath"); const char *x = cm_get_path(); if(x) { strncpy(buf, x, MAX_PATH_LEN); strcat(buf, "/"); strcat(buf, path); fp = fopen(buf, mode); if (fp) return fp; else { char *y = getenv( "NGSPICE_INPUT_DIR" ); if (y && *y) { char *a; strncpy(buf, y, MAX_PATH_LEN); a = strrchr(buf, '/'); if(a && a[1] == '\0') a[0] = '\0'; strcat(buf, "/"); strcat(buf, path); fp = fopen(buf, mode); if (fp) return fp; } } } } fp = fopen(path, mode); return fp; } int cm_message_printf(const char *fmt, ...) { char buf[1024]; char *p = buf; int size = sizeof(buf); int rv; for (;;) { int nchars; va_list ap; va_start(ap, fmt); nchars = vsnprintf(p, (size_t) size, fmt, ap); va_end(ap); if (nchars == -1) { // compatibility to old implementations size *= 2; } else if (size < nchars + 1) { size = nchars + 1; } else { break; } if (p == buf) p = tmalloc((size_t) size * sizeof(char)); else p = trealloc(p, (size_t) size * sizeof(char)); } rv = cm_message_send(p); if (p != buf) txfree(p); return rv; } tmpk8ny_4pz/src/xspice/icm/xtraevt/0000755000175000017500000000000013546075722017507 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/xtraevt/udnpath.lst0000644000175000017500000000001113546075722021666 0ustar carstencarstenint real tmpk8ny_4pz/src/xspice/icm/xtraevt/d_to_real/0000755000175000017500000000000013546075722021437 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/xtraevt/d_to_real/ifspec.ifs0000644000175000017500000000230613546075722023414 0ustar carstencarsten NAME_TABLE: Spice_Model_Name: d_to_real C_Function_Name: ucm_d_to_real Description: "Node bridge from digital to real with enable" PORT_TABLE: Port_Name: in enable out Description: "input" "enable" "output" Direction: in in out Default_Type: d d real Allowed_Types: [d] [d] [real] Vector: no no no Vector_Bounds: - - - Null_Allowed: no yes no PARAMETER_TABLE: Parameter_Name: zero one delay Description: "value for 0" "value for 1" "delay" Data_Type: real real real Default_Value: 0.0 1.0 1e-9 Limits: - - [1e-15 -] Vector: no no no Vector_Bounds: - - - Null_Allowed: yes yes yes tmpk8ny_4pz/src/xspice/icm/xtraevt/d_to_real/cfunc.mod0000644000175000017500000000126313546075722023240 0ustar carstencarsten void ucm_d_to_real (ARGS) { Digital_State_t in; double *out; double delay; double zero; double one; double ena; in = INPUT_STATE(in); if(PORT_NULL(enable)) ena = 1.0; else if(INPUT_STATE(enable) == ONE) ena = 1.0; else ena = 0.0; out = (double *) OUTPUT(out); zero = PARAM(zero); one = PARAM(one); delay = PARAM(delay); if(in == ZERO) *out = zero * ena; else if(in == UNKNOWN) *out = (zero + one) / 2.0 * ena; else *out = one * ena; if(TIME > 0.0) OUTPUT_DELAY(out) = delay; } tmpk8ny_4pz/src/xspice/icm/xtraevt/real_to_v/0000755000175000017500000000000013546075722021461 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/xtraevt/real_to_v/ifspec.ifs0000644000175000017500000000165213546075722023441 0ustar carstencarsten NAME_TABLE: Spice_Model_Name: real_to_v C_Function_Name: ucm_real_to_v Description: "Node bridge from real to analog voltage" PORT_TABLE: Port_Name: in out Description: "input" "output" Direction: in out Default_Type: real v Allowed_Types: [real] [v, vd, i, id] Vector: no no Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: gain transition_time Description: "gain" "output transition time" Data_Type: real real Default_Value: 1.0 1e-9 Limits: - [1e-15 -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes tmpk8ny_4pz/src/xspice/icm/xtraevt/real_to_v/cfunc.mod0000644000175000017500000000275613546075722023272 0ustar carstencarsten #define TS 0 #define VS 1 void ucm_real_to_v (ARGS) { double *t, *v; double *in; /*double out;*/ in = (double *) INPUT(in); if(INIT) { cm_event_alloc(TS, 2 * sizeof(double)); cm_event_alloc(VS, 2 * sizeof(double)); t = (double *) cm_event_get_ptr(TS, 0); v = (double *) cm_event_get_ptr(VS, 0); t[0] = -2.0; t[1] = -1.0; v[0] = *in; v[1] = *in; } else { t = (double *) cm_event_get_ptr(TS, 0); v = (double *) cm_event_get_ptr(VS, 0); } switch(CALL_TYPE) { case ANALOG: if(TIME == 0.0) { OUTPUT(out) = *in; v[0] = *in; v[1] = *in; } else { if(TIME <= t[0]) OUTPUT(out) = v[0]; else if(TIME >= t[1]) OUTPUT(out) = v[1]; else { OUTPUT(out) = v[0] + (v[1] - v[0]) * (TIME - t[0]) / (t[1] - t[0]); } } break; case EVENT: if(TIME == 0.0) return; if(TIME >= t[1]) { v[0] = v[1]; v[1] = *in; t[0] = TIME; t[1] = TIME + PARAM(transition_time); } else { v[0] = v[0] + (v[1] - v[0]) * (TIME - t[0]) / (t[1] - t[0]); v[1] = *in; t[0] = TIME; t[1] = TIME + PARAM(transition_time); } break; } } tmpk8ny_4pz/src/xspice/icm/xtraevt/real_delay/0000755000175000017500000000000013546075722021610 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/xtraevt/real_delay/ifspec.ifs0000644000175000017500000000162113546075722023564 0ustar carstencarsten NAME_TABLE: Spice_Model_Name: real_delay C_Function_Name: ucm_real_delay Description: "A Z ** -1 block working on real data" PORT_TABLE: Port_Name: in clk out Description: "input" "clock" "output" Direction: in in out Default_Type: real d real Allowed_Types: [real] [d] [real] Vector: no no no Vector_Bounds: - - - Null_Allowed: no no no PARAMETER_TABLE: Parameter_Name: delay Description: "delay from clk to out" Data_Type: real Default_Value: 1e-9 Limits: [1e-15 -] Vector: no Vector_Bounds: - Null_Allowed: yes tmpk8ny_4pz/src/xspice/icm/xtraevt/real_delay/cfunc.mod0000644000175000017500000000175613546075722023420 0ustar carstencarsten #define CLK_STATE 0 void ucm_real_delay (ARGS) { double *in; double *out; Digital_State_t *state; Digital_State_t *old_state; if(INIT) { cm_event_alloc(CLK_STATE, sizeof(Digital_State_t)); state = (Digital_State_t *) cm_event_get_ptr(CLK_STATE, 0); old_state = state; *state = INPUT_STATE(clk); } else { state = (Digital_State_t *) cm_event_get_ptr(CLK_STATE, 0); old_state = (Digital_State_t *) cm_event_get_ptr(CLK_STATE, 1); } if(ANALYSIS != TRANSIENT) OUTPUT_CHANGED(out) = FALSE; else { *state = INPUT_STATE(clk); if(*state == *old_state) OUTPUT_CHANGED(out) = FALSE; else if(*state != ONE) OUTPUT_CHANGED(out) = FALSE; else { in = (double *) INPUT(in); out = (double *) OUTPUT(out); *out = *in; OUTPUT_DELAY(out) = PARAM(delay); } } } tmpk8ny_4pz/src/xspice/icm/xtraevt/real_gain/0000755000175000017500000000000013546075722021430 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/xtraevt/real_gain/ifspec.ifs0000644000175000017500000000261513546075722023410 0ustar carstencarsten NAME_TABLE: Spice_Model_Name: real_gain C_Function_Name: ucm_real_gain Description: "A gain block for event-driven real data" PORT_TABLE: Port_Name: in out Description: "input" "output" Direction: in out Default_Type: real real Allowed_Types: [real] [real] Vector: no no Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: in_offset gain out_offset Description: "input offset" "gain" "output offset" Data_Type: real real real Default_Value: 0.0 1.0 0.0 Limits: - - - Vector: no no no Vector_Bounds: - - - Null_Allowed: yes yes yes PARAMETER_TABLE: Parameter_Name: delay ic Description: "delay" "initial condition" Data_Type: real real Default_Value: 1.0e-9 0.0 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes tmpk8ny_4pz/src/xspice/icm/xtraevt/real_gain/cfunc.mod0000644000175000017500000000135613546075722023234 0ustar carstencarsten void ucm_real_gain (ARGS) { double *in; double *out; double in_offset; double gain; double out_offset; double delay; double ic; /* Get the input and output pointers */ in = (double *) INPUT(in); out = (double *) OUTPUT(out); /* Get the parameters */ in_offset = PARAM(in_offset); gain = PARAM(gain); out_offset = PARAM(out_offset); delay = PARAM(delay); ic = PARAM(ic); /* Assign the output and delay */ if(ANALYSIS == DC) { *out = ic; if(INIT) cm_event_queue(delay); } else { *out = gain * (*in + in_offset) + out_offset; OUTPUT_DELAY(out) = delay; } } tmpk8ny_4pz/src/xspice/icm/xtraevt/.gitignore0000644000175000017500000000014713546075722021501 0ustar carstencarsten/xtraevt.cm /cmextrn.h /cminfo.h /dlmain.c /objects.inc /udnextrn.h /udninfo.h /*/*.c !/*/udnfunc.c tmpk8ny_4pz/src/xspice/icm/xtraevt/int/0000755000175000017500000000000013546075722020301 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/xtraevt/int/udnfunc.c0000644000175000017500000001017313546075722022111 0ustar carstencarsten/*============================================================================ FILE int/udnfunc.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the definition of the 'int' node type used by event-driven models that simulate with integer type data. These functions are called exclusively through function pointers in an Evt_Udn_Info_t data structure. INTERFACES Evt_Udn_Info_t udn_int_info REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include #include "ngspice/cm.h" #include "ngspice/evtudn.h" void *tmalloc(size_t); #define TMALLOC(t,n) (t*) tmalloc(sizeof(t) * (size_t)(n)) /* macro to ignore unused variables and parameters */ #define NG_IGNORE(x) (void)x /* ************************************************************************ */ static void udn_int_create(CREATE_ARGS) { /* Malloc space for an int */ MALLOCED_PTR = TMALLOC(int, 1); } /* ************************************************************************ */ static void udn_int_dismantle(DISMANTLE_ARGS) { NG_IGNORE(STRUCT_PTR); /* Do nothing. There are no internally malloc'ed things to dismantle */ } /* ************************************************************************ */ static void udn_int_initialize(INITIALIZE_ARGS) { int *int_struct = (int *) STRUCT_PTR; /* Initialize to zero */ *int_struct = 0; } /* ************************************************************************ */ static void udn_int_invert(INVERT_ARGS) { int *int_struct = (int *) STRUCT_PTR; /* Invert the state */ *int_struct = -(*int_struct); } /* ************************************************************************ */ static void udn_int_copy(COPY_ARGS) { int *int_from_struct = (int *) INPUT_STRUCT_PTR; int *int_to_struct = (int *) OUTPUT_STRUCT_PTR; /* Copy the structure */ *int_to_struct = *int_from_struct; } /* ************************************************************************ */ static void udn_int_resolve(RESOLVE_ARGS) { int **array = (int**)INPUT_STRUCT_PTR_ARRAY; int *out = (int *) OUTPUT_STRUCT_PTR; int num_struct = INPUT_STRUCT_PTR_ARRAY_SIZE; int sum; int i; /* Sum the values */ for(i = 0, sum = 0; i < num_struct; i++) sum += *(array[i]); /* Assign the result */ *out = sum; } /* ************************************************************************ */ static void udn_int_compare(COMPARE_ARGS) { int *int_struct1 = (int *) STRUCT_PTR_1; int *int_struct2 = (int *) STRUCT_PTR_2; /* Compare the structures */ if((*int_struct1) == (*int_struct2)) EQUAL = TRUE; else EQUAL = FALSE; } /* ************************************************************************ */ static void udn_int_plot_val(PLOT_VAL_ARGS) { int *int_struct = (int *) STRUCT_PTR; NG_IGNORE(STRUCT_MEMBER_ID); /* Output a value for the int struct */ PLOT_VAL = *int_struct; } /* ************************************************************************ */ static void udn_int_print_val(PRINT_VAL_ARGS) { int *int_struct = (int *) STRUCT_PTR; NG_IGNORE(STRUCT_MEMBER_ID); /* Allocate space for the printed value */ PRINT_VAL = TMALLOC(char, 30); /* Print the value into the string */ sprintf(PRINT_VAL, "%8d", *int_struct); } /* ************************************************************************ */ static void udn_int_ipc_val(IPC_VAL_ARGS) { /* Simply return the structure and its size */ IPC_VAL = STRUCT_PTR; IPC_VAL_SIZE = sizeof(int); } Evt_Udn_Info_t udn_int_info = { "int", "integer valued data", udn_int_create, udn_int_dismantle, udn_int_initialize, udn_int_invert, udn_int_copy, udn_int_resolve, udn_int_compare, udn_int_plot_val, udn_int_print_val, udn_int_ipc_val }; tmpk8ny_4pz/src/xspice/icm/xtraevt/real/0000755000175000017500000000000013546075722020432 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/xtraevt/real/udnfunc.c0000644000175000017500000001036513546075722022245 0ustar carstencarsten/*============================================================================ FILE real/udnfunc.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the definition of the 'real' node type used by event-driven models that simulate with real type data. These functions are called exclusively through function pointers in an Evt_Udn_Info_t data structure. INTERFACES Evt_Udn_Info_t udn_real_info REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #include #include "ngspice/cm.h" #include "ngspice/evtudn.h" void *tmalloc(size_t); #define TMALLOC(t,n) (t*) tmalloc(sizeof(t) * (size_t)(n)) /* macro to ignore unused variables and parameters */ #define NG_IGNORE(x) (void)x /* ************************************************************************ */ static void udn_real_create(CREATE_ARGS) { /* Malloc space for a real struct */ MALLOCED_PTR = TMALLOC(double, 1); } /* ************************************************************************ */ static void udn_real_dismantle(DISMANTLE_ARGS) { NG_IGNORE(STRUCT_PTR); /* Do nothing. There are no internally malloc'ed things to dismantle */ } /* ************************************************************************ */ static void udn_real_initialize(INITIALIZE_ARGS) { double *real_struct = (double *) STRUCT_PTR; /* Initialize to zero */ *real_struct = 0.0; } /* ************************************************************************ */ static void udn_real_invert(INVERT_ARGS) { double *real_struct = (double *) STRUCT_PTR; /* Invert the state */ *real_struct = -(*real_struct); } /* ************************************************************************ */ static void udn_real_resolve(RESOLVE_ARGS) { double **array = (double**)INPUT_STRUCT_PTR_ARRAY; double *out = (double *) OUTPUT_STRUCT_PTR; int num_struct = INPUT_STRUCT_PTR_ARRAY_SIZE; double sum; int i; /* Sum the values */ for(i = 0, sum = 0.0; i < num_struct; i++) sum += *(array[i]); /* Assign the result */ *out = sum; } /* ************************************************************************ */ static void udn_real_copy(COPY_ARGS) { double *real_from_struct = (double *) INPUT_STRUCT_PTR; double *real_to_struct = (double *) OUTPUT_STRUCT_PTR; /* Copy the structure */ *real_to_struct = *real_from_struct; } /* ************************************************************************ */ static void udn_real_compare(COMPARE_ARGS) { double *real_struct1 = (double *) STRUCT_PTR_1; double *real_struct2 = (double *) STRUCT_PTR_2; /* Compare the structures */ if((*real_struct1) == (*real_struct2)) EQUAL = TRUE; else EQUAL = FALSE; } /* ************************************************************************ */ static void udn_real_plot_val(PLOT_VAL_ARGS) { double *real_struct = (double *) STRUCT_PTR; NG_IGNORE(STRUCT_MEMBER_ID); /* Output a value for the real struct */ PLOT_VAL = *real_struct; } /* ************************************************************************ */ static void udn_real_print_val(PRINT_VAL_ARGS) { double *real_struct = (double *) STRUCT_PTR; NG_IGNORE(STRUCT_MEMBER_ID); /* Allocate space for the printed value */ PRINT_VAL = TMALLOC(char, 30); /* Print the value into the string */ sprintf(PRINT_VAL, "%15.6e", *real_struct); } /* ************************************************************************ */ static void udn_real_ipc_val(IPC_VAL_ARGS) { /* Simply return the structure and its size */ IPC_VAL = STRUCT_PTR; IPC_VAL_SIZE = sizeof(double); } Evt_Udn_Info_t udn_real_info = { "real", "real valued data", udn_real_create, udn_real_dismantle, udn_real_initialize, udn_real_invert, udn_real_copy, udn_real_resolve, udn_real_compare, udn_real_plot_val, udn_real_print_val, udn_real_ipc_val }; tmpk8ny_4pz/src/xspice/icm/xtraevt/modpath.lst0000644000175000017500000000005113546075722021663 0ustar carstencarstend_to_real real_delay real_gain real_to_v tmpk8ny_4pz/src/xspice/icm/xtradev/0000755000175000017500000000000013546075722017467 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/xtradev/udnpath.lst0000644000175000017500000000000013546075722021644 0ustar carstencarstentmpk8ny_4pz/src/xspice/icm/xtradev/lmeter/0000755000175000017500000000000013546075722020757 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/xtradev/lmeter/ifspec.ifs0000644000175000017500000000261413546075722022736 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 302 Jul 1991 Bill Kuhn SUMMARY This file contains the interface specification file for the analog lmeter code model. ===============================================================================*/ NAME_TABLE: Spice_Model_Name: lmeter C_Function_Name: cm_lmeter Description: "ATESSE 1 compatible inductance meter" PORT_TABLE: Port_Name: in out Description: "input" "output" Direction: in out Default_Type: v v Allowed_Types: [v, vd] [v, vd, i, id] Vector: no no Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: gain Description: "L to voltage conversion factor" Data_Type: real Default_Value: 1.0 Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes STATIC_VAR_TABLE: Static_Var_Name: l Data_Type: real Description: "inductance connected to input node" tmpk8ny_4pz/src/xspice/icm/xtradev/lmeter/cfunc.mod0000644000175000017500000000422013546075722022554 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE lmeter/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 30 Jul 1991 Bill Kuhn MODIFICATIONS 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the model-specific routines used to functionally describe the lmeter code model. INTERFACES FILE ROUTINE CALLED CMmeters.c double cm_netlist_get_l() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION void cm_lmeter() AUTHORS 30 Jul 1991 Bill Kuhn MODIFICATIONS 2 Oct 1991 Jeffrey P. Murray SUMMARY This function implements the lmeter code model. INTERFACES FILE ROUTINE CALLED CMmeters.c double cm_netlist_get_l() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_LMETER ROUTINE ===*/ void cm_lmeter (ARGS) { double leq; if(INIT) { leq = cm_netlist_get_l(); STATIC_VAR(l) = leq; } else leq = STATIC_VAR(l); OUTPUT(out) = PARAM(gain) * leq; } tmpk8ny_4pz/src/xspice/icm/xtradev/potentiometer/0000755000175000017500000000000013546075722022365 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/xtradev/potentiometer/ifspec.ifs0000644000175000017500000000442113546075722024342 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 19 June 1992 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the analog potentiometer code model. ===============================================================================*/ NAME_TABLE: Spice_Model_Name: potentiometer C_Function_Name: cm_potentiometer Description: "potentiometer" PORT_TABLE: Port_Name: r0 wiper Description: "pot connection 0" "wiper contact" Direction: inout inout Default_Type: g g Allowed_Types: [g] [g] Vector: no no Vector_Bounds: - - Null_Allowed: no no PORT_TABLE: Port_Name: r1 Description: "pot connection 1" Direction: inout Default_Type: g Allowed_Types: [g] Vector: no Vector_Bounds: - Null_Allowed: no PARAMETER_TABLE: Parameter_Name: position Description: "position of wiper connection (0.0 to 1.0)" Data_Type: real Default_Value: 0.5 Limits: [0.0 1.0] Vector: no Vector_Bounds: - Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: log r Description: "log-linear switch" "total resistance" Data_Type: boolean real Default_Value: FALSE 1.0e5 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: log_multiplier Description: "multiplier constant for log resistance" Data_Type: real Default_Value: 1.0 Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes STATIC_VAR_TABLE: Static_Var_Name: Data_Type: Description: tmpk8ny_4pz/src/xspice/icm/xtradev/potentiometer/cfunc.mod0000644000175000017500000001100313546075722024157 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE potentiometer/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 19 June 1992 Jeffrey P. Murray MODIFICATIONS 19 June 1992 Jeffrey P. Murray SUMMARY This file contains the functional description of the potentiometer code model. INTERFACES FILE ROUTINE CALLED CMmacros.h cm_message_send(); REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION cm_potentiometer() AUTHORS 19 June 1992 Jeffrey P. Murray MODIFICATIONS 19 June 1992 Jeffrey P. Murray SUMMARY This function implements the potentiometer code model. INTERFACES FILE ROUTINE CALLED CMmacros.h cm_message_send(); RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_POTENTIOMETER ROUTINE ===*/ void cm_potentiometer (ARGS) { double position; /* position of wiper contact */ double resistance; /* total resistance */ double r_lower; /* resistance from r0 to wiper */ double r_upper; /* resistance from wiper to r1 */ double vr0; /* voltage at r0 */ double vr1; /* voltage at r1 */ double vwiper; /* voltage at wiper */ Mif_Complex_t ac_gain; /* Retrieve frequently used parameters... */ position = PARAM(position); resistance = PARAM(r); /* Retrieve input voltages... */ vr0 = INPUT(r0); vwiper = INPUT(wiper); vr1 = INPUT(r1); if ( PARAM(log) == FALSE ) { /* Linear Variation in resistance w.r.t. position */ r_lower = position * resistance; r_upper = resistance - r_lower; } else { /* Logarithmic Variation in resistance w.r.t. position */ r_lower = resistance / pow(10.0,(position * PARAM(log_multiplier))); r_upper = resistance - r_lower; } /* Output DC & Transient Values */ if(ANALYSIS != MIF_AC) { OUTPUT(r0) = (vr0 - vwiper) / r_lower; OUTPUT(r1) = (vr1 - vwiper) / r_upper; OUTPUT(wiper) = ((vwiper - vr0)/r_lower) + ((vwiper - vr1)/r_upper); PARTIAL(r0,r0) = 1.0 / r_lower; PARTIAL(r0,r1) = 0.0; PARTIAL(r0,wiper) = -1.0 / r_lower; PARTIAL(r1,r0) = 0.0; PARTIAL(r1,r1) = 1.0 / r_upper; PARTIAL(r1,wiper) = -1.0 / r_upper; PARTIAL(wiper,r0) = -1.0 / r_lower; PARTIAL(wiper,r1) = -1.0 / r_upper; PARTIAL(wiper,wiper) = (1.0/r_lower) + (1.0/r_upper); } else { /* Output AC Gain Values */ ac_gain.imag= 0.0; ac_gain.real = -1.0 / r_lower; AC_GAIN(r0,r0) = ac_gain; ac_gain.real = 0.0; AC_GAIN(r0,r1) = ac_gain; ac_gain.real = 1.0 / r_lower; AC_GAIN(r0,wiper) = ac_gain; ac_gain.real = 0.0; AC_GAIN(r1,r0) = ac_gain; ac_gain.real = -1.0 / r_upper; AC_GAIN(r1,r1) = ac_gain; ac_gain.real = 1.0 / r_upper; AC_GAIN(r1,wiper) = ac_gain; ac_gain.real = 1.0 / r_lower; AC_GAIN(wiper,r0) = ac_gain; ac_gain.real = 1.0 / r_upper; AC_GAIN(wiper,r1) = ac_gain; ac_gain.real = -(1.0/r_lower) - (1.0/r_upper); AC_GAIN(wiper,wiper) = ac_gain; } } tmpk8ny_4pz/src/xspice/icm/xtradev/cmeter/0000755000175000017500000000000013546075722020746 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/xtradev/cmeter/ifspec.ifs0000644000175000017500000000266013546075722022726 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 30 July 1991 Bill Kuhn SUMMARY This file contains the interface specification file for the analog cmeter code model. ===============================================================================*/ NAME_TABLE: Spice_Model_Name: cmeter C_Function_Name: cm_cmeter Description: "ATESSE 1 compatible capacitance meter" PORT_TABLE: Port_Name: in out Description: "input" "output" Direction: in out Default_Type: v v Allowed_Types: [v, vd] [v, vd, i, id] Vector: no no Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: gain Description: "C to voltage conversion factor" Data_Type: real Default_Value: 1.0 Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes STATIC_VAR_TABLE: Static_Var_Name: c Data_Type: real Description: "capacitance connected to input node" tmpk8ny_4pz/src/xspice/icm/xtradev/cmeter/cfunc.mod0000644000175000017500000000416513546075722022553 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE cmeter/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 30 July 1991 Bill Kuhn MODIFICATIONS 26 Sept 1991 Jeffrey P. Murray SUMMARY This file contains the functional description of the cmeter code model. INTERFACES FILE ROUTINE CALLED CMmeters.c double cm_netlist_get_c() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION cm_cmeter() AUTHORS 30 July 1991 Bill Kuhn MODIFICATIONS 26 Sept 1991 Jeffrey P. Murray SUMMARY This function implements the cmeter code model. INTERFACES FILE ROUTINE CALLED CMmeters.c double cm_netlist_get_c() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_CMETER ROUTINE ===*/ void cm_cmeter (ARGS) { double ceq; /* holding variable for read capacitance value */ if(INIT) { ceq = cm_netlist_get_c(); STATIC_VAR(c) = ceq; } else ceq = STATIC_VAR(c); OUTPUT(out) = PARAM(gain) * ceq; } tmpk8ny_4pz/src/xspice/icm/xtradev/lcouple/0000755000175000017500000000000013546075722021132 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/xtradev/lcouple/ifspec.ifs0000644000175000017500000000246113546075722023111 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the analog lcouple code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_lcouple Spice_Model_Name: lcouple Description: "inductive coupling (for use with 'core' model)" PORT_TABLE: Port_Name: l mmf_out Description: "inductor" "mmf output (in Ampere-turns)" Direction: inout inout Default_Type: hd hd Allowed_Types: [h,hd] [hd] Vector: no no Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: num_turns Description: "number of inductor turns" Data_Type: real Default_Value: 1.0 Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes tmpk8ny_4pz/src/xspice/icm/xtradev/lcouple/cfunc.mod0000644000175000017500000001642613546075722022742 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE lcouple/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 6 Jun 1991 Jeffrey P. Murray MODIFICATIONS 13 Sep 1991 Jeffrey P. Murray 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the model-specific routines used to functionally describe the lcouple code model. INTERFACES FILE ROUTINE CALLED CM.c void *cm_analog_alloc() void *cm_analog_get_ptr() int cm_analog_integrate() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION void cm_lcouple() AUTHORS 6 Jun 1991 Jeffrey P. Murray MODIFICATIONS 13 Sep 1991 Jeffrey P. Murray 2 Oct 1991 Jeffrey P. Murray SUMMARY This function implements the lcouple code model. INTERFACES FILE ROUTINE CALLED CM.c void *cm_analog_alloc() void *cm_analog_get_ptr() int cm_analog_integrate() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_LCOUPLE ROUTINE ===*/ /*********************************************** * Note that this model incorporates a fake * * integration in order to link in truncation * * error checking...this may be removed at a * * future date. JPM 9/13/91 * ***********************************************/ void cm_lcouple(ARGS) /* structure holding parms, inputs, outputs, etc. */ { double input_current, /* input current from electrical-side windings */ output_voltage, /* output voltage reflected to electricaL-side */ *output_voltage_fake, /* fake output voltage for use with truncation error checking. */ /*input_flux,*/ /* input flux value from core side (represented as a current. */ output_mmf, /* output driving amp-turns to core side. */ num_turns, /* number of turns on inductor */ /*pout_pin_fake,*/ /* fake partial derivative of output w.r.t. input (for use with integration */ *in_flux, /* current input flux value from core side (represented as a current). */ *in_flux_old, /* previous timestep flux value */ *in_flux_fake, /* fake input flux value for use with truncation error checking. */ delta; /* time delta from previous timepoint to current value */ Mif_Complex_t ac_gain; /* AC gain */ /** Retrieve frequently used parameters... **/ num_turns = PARAM(num_turns); if (ANALYSIS != MIF_AC) { /**** DC & Transient Analyses ****/ /** Test for INIT; if so, allocate storage, otherwise, retrieve previous timepoint input value... **/ if (INIT==1) { /* First pass...allocate storage for previous state. */ /* Also, calculate roughly where the current output */ /* will be and use this value to define current state. */ cm_analog_alloc(1,sizeof(double)); cm_analog_alloc(2,sizeof(double)); cm_analog_alloc(3,sizeof(double)); } /* Allocation not necessary...retrieve previous values */ in_flux = (double *) cm_analog_get_ptr(1,0); /* Set out pointer to current time storage */ in_flux_old = (double *) cm_analog_get_ptr(1,1); /* Set old-output-state pointer to previous time storage */ /* retrieve fake input and output values for truncation error checking */ in_flux_fake = (double *) cm_analog_get_ptr(2,0); output_voltage_fake = (double *) cm_analog_get_ptr(3,0); /** Retrieve inputs... **/ input_current = INPUT(l); /* input from electrical side is a current */ *in_flux = -INPUT(mmf_out); /* input from core side is a flux represented as a current...note that a negative is introduced, because current INTO the positive node would normally result in a NEGATIVE output_voltage... the minus sign corrects this. */ /** Calculate output value for mmf... **/ output_mmf = num_turns * input_current; OUTPUT(mmf_out) = output_mmf; PARTIAL(mmf_out,l) = num_turns; /** Calculate output value for output_voltage... **/ if ( 0.0 == TIME ) { /*** Test to see if this is the first ***/ /*** timepoint calculation...if ***/ *in_flux_old = *in_flux; /*** so, return a zero d/dt value. ***/ output_voltage = *output_voltage_fake = 0.0; OUTPUT(l) = output_voltage; PARTIAL(l,mmf_out) = 0.0; } else { /*** Calculate value of d_dt.... ***/ delta = TIME - T(1); output_voltage = *output_voltage_fake = num_turns * (*in_flux - *in_flux_old) / delta; OUTPUT(l) = output_voltage; PARTIAL(l,mmf_out) = -num_turns / delta; /* add fake cm_analog_integrate for truncation error checks */ /* not initialized, not used */ /*cm_analog_integrate(*output_voltage_fake,in_flux_fake,&pout_pin_fake); */ } } else { /**** AC Analysis...****/ ac_gain.real = 0.0; ac_gain.imag= num_turns * RAD_FREQ; AC_GAIN(l,mmf_out) = ac_gain; ac_gain.real= num_turns; ac_gain.imag= 0.0; AC_GAIN(mmf_out,l) = ac_gain; } } tmpk8ny_4pz/src/xspice/icm/xtradev/inductor/0000755000175000017500000000000013546075722021316 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/xtradev/inductor/ifspec.ifs0000644000175000017500000000256613546075722023303 0ustar carstencarsten/* =========================================================================== FILE ifspec.ifs MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the definition of an inductor code model with current initial conditions. INTERFACES None. REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ NAME_TABLE: Spice_Model_Name: inductor C_Function_Name: cm_inductor Description: "Inductor with current initial condition" PORT_TABLE: Port_Name: ind Description: "inductor terminals" Direction: inout Default_Type: gd Allowed_Types: [gd] Vector: no Vector_Bounds: - Null_Allowed: no PARAMETER_TABLE: Parameter_Name: l ic Description: "inductance" "current initial condition" Data_Type: real real Default_Value: - 0.0 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: no no tmpk8ny_4pz/src/xspice/icm/xtradev/inductor/cfunc.mod0000644000175000017500000000347313546075722023124 0ustar carstencarsten/* =========================================================================== FILE cfunc.mod MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the definition of an inductor code model with current initial conditions. INTERFACES cm_inductor() REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ #define LI 0 void cm_inductor (ARGS) { Complex_t ac_gain; double partial; double ramp_factor; double *li; /* Get the ramp factor from the .option ramptime */ ramp_factor = cm_analog_ramp_factor(); /* Initialize/access instance specific storage for capacitor voltage */ if(INIT) { cm_analog_alloc(LI, sizeof(double)); li = (double *) cm_analog_get_ptr(LI, 0); *li = PARAM(ic) * ramp_factor; } else { li = (double *) cm_analog_get_ptr(LI, 0); } /* Compute the output */ if(ANALYSIS == DC) { OUTPUT(ind) = PARAM(ic) * ramp_factor; PARTIAL(ind, ind) = 0.0; } else if(ANALYSIS == AC) { ac_gain.real = 0.0; ac_gain.imag = 1.0 * RAD_FREQ * PARAM(l); AC_GAIN(ind, ind) = ac_gain; } else if(ANALYSIS == TRANSIENT) { if(ramp_factor < 1.0) { *li = PARAM(ic) * ramp_factor; OUTPUT(ind) = *li; PARTIAL(ind, ind) = 0.0; } else { cm_analog_integrate(INPUT(ind) / PARAM(l), li, &partial); partial /= PARAM(l); OUTPUT(ind) = *li; PARTIAL(ind, ind) = partial; } } } tmpk8ny_4pz/src/xspice/icm/xtradev/sidiode/0000755000175000017500000000000013546075722021107 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/xtradev/sidiode/ifspec.ifs0000644000175000017500000000556513546075722023076 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 2018 Holger Vogt All Rights Reserved AUTHORS 2 October 2018 Holger Vogt SUMMARY This file contains the interface specification file for the analog simple diode code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_sidiode Spice_Model_Name: sidiode Description: "simple diode" PORT_TABLE: Port_Name: ds Description: "diode port" Direction: inout Default_Type: gd Allowed_Types: [gd] Vector: no Vector_Bounds: - Null_Allowed: no PARAMETER_TABLE: Parameter_Name: ron roff Description: "resistance on-state" "resistance off-state" Data_Type: real real Default_Value: 1 1 Limits: [1e-6 - ] [1e-12 -] Vector: no no Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: vfwd vrev Description: "forward voltage" "reverse breakdown voltage" Data_Type: real real Default_Value: 0. 1e30 Limits: [0. -] [0. -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: ilimit revilimit Description: "limit of on-current" "limit of breakdown current" Data_Type: real real Default_Value: 1e30 1e30 Limits: [1e-15 -] [1e-15 -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: epsilon revepsilon Description: "width quadrat. r 1" "width quadratic region 2" Data_Type: real real Default_Value: 0. 0. Limits: [0. -] [0. -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: rrev Description: "resistance in breakdown" Data_Type: real Default_Value: 0. Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes STATIC_VAR_TABLE: Static_Var_Name: locdata Data_Type: pointer Description: "table with constants" tmpk8ny_4pz/src/xspice/icm/xtradev/sidiode/cfunc.mod0000644000175000017500000001347513546075722022720 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE sidiode/cfunc.mod Copyright 2018 GHolger Vogt All Rights Reserved AUTHORS 2 October 2018 Holger Vogt MODIFICATIONS SUMMARY This file contains the model-specific routines used to functionally describe a simplified diode code model. INTERFACES FILE ROUTINE CALLED REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include #include /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ typedef struct { double a1; /* parameter of first quadratic equation */ double a2; /* parameter of first tanh equation */ double b1; /* parameter of second quadratic equation */ double b2; /* parameter of second tanh equation */ double hRevepsilon; /* half delta between Va and Vb */ double hEpsilon; /* half delta between Vc and Vd */ double Va; /* voltage limits of the quadratic regions */ double Vb; double Vc; double Vd; double grev; /* conductance in all three regions */ double goff; double gon; Boolean_t Ili; /* TRUE, if current limits are given */ Boolean_t Revili; Boolean_t epsi; /* TRUE, if quadratic overlap */ Boolean_t revepsi; } Local_Data_t; /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ static void cm_sidiode_callback(ARGS, Mif_Callback_Reason_t reason) { switch (reason) { case MIF_CB_DESTROY: { Local_Data_t *loc = STATIC_VAR (locdata); free(loc); break; } } } /*============================================================================== FUNCTION void cm_sidiode() ==============================================================================*/ void cm_sidiode(ARGS) /* structure holding parms, inputs, outputs, etc. */ { Local_Data_t *loc; /* Pointer to local static data, not to be included in the state vector */ Mif_Complex_t ac_gain; /* AC gain */ double Vrev, Vfwd, Vin, Idd, deriv, Ilimit, Revilimit; Vrev = -PARAM(vrev); Vfwd = PARAM(vfwd); Ilimit = PARAM(ilimit); Revilimit = -PARAM(revilimit); if (INIT==1) { /* First pass...allocate memory and calculate some constants... */ double grev, goff, gon, Va, Vb, Vc, Vd, hEpsilon, hRevepsilon; CALLBACK = cm_sidiode_callback; /* allocate static storage for *loc */ STATIC_VAR(locdata) = calloc (1, sizeof(Local_Data_t)); loc = STATIC_VAR(locdata); goff = 1./PARAM(roff); gon = 1./PARAM(ron); if (PARAM(rrev) == 0.) grev = gon; else grev = 1./PARAM(rrev); hRevepsilon = 0.5 * PARAM(revepsilon); loc->Va = Va = Vrev - hRevepsilon; loc->Vb = Vb = Vrev + hRevepsilon; if(hRevepsilon > 0.0) { loc->a1 = (goff - grev)/PARAM(revepsilon); loc->a2 = grev/Revilimit; loc->revepsi = MIF_TRUE; } else loc->revepsi = MIF_FALSE; hEpsilon = 0.5 * PARAM(epsilon); loc->Vc = Vc = Vfwd - hEpsilon; loc->Vd = Vd = Vfwd + hEpsilon; if(hEpsilon > 0.0) { loc->b1 = (gon - goff)/PARAM(epsilon); loc->b2 = gon/Ilimit; loc->epsi = MIF_TRUE; } else loc->epsi = MIF_FALSE; if (Ilimit < 1e29) loc->Ili = MIF_TRUE; else loc->Ili = MIF_FALSE; if (Revilimit > -1e29) loc->Revili = MIF_TRUE; else loc->Revili = MIF_FALSE; loc->grev = grev; loc->goff = goff; loc->gon = gon; } else loc = STATIC_VAR(locdata); /* Calculate diode current Id and its derivative deriv=dId/dVin */ Vin = INPUT(ds); if (Vin < loc->Va) { if(loc->Revili) { double tmp = tanh(loc->a2 * (Vin - loc->Va)); double ia = loc->goff * loc->Va + 0.5 * (loc->Va - loc->Vb) * (loc->Va - loc->Vb) * loc->a1; Idd = (Revilimit - ia) * tmp + ia; deriv = loc->grev * (1. - tmp * tmp); } else { Idd = Vrev * loc->goff + (Vin - Vrev) * loc->grev; deriv = loc->grev; } } else if (loc->revepsi && Vin >= loc->Va && Vin < loc->Vb) { Idd = 0.5 * (Vin -loc->Vb) * (Vin - loc->Vb) * loc->a1 + Vin * loc->goff; deriv = (Vin - loc->Vb) * loc->a1 + loc->goff; } else if (Vin >= loc->Vb && Vin < loc->Vc) { Idd = Vin * loc->goff; deriv = loc->goff; } else if (loc->epsi && Vin >= loc->Vc && Vin < loc->Vd) { Idd = 0.5 * (Vin -loc->Vc) * (Vin - loc->Vc) * loc->b1 + Vin * loc->goff; deriv = (Vin - loc->Vc) * loc->b1 + loc->goff; } else { if(loc->Ili) { double tmp = tanh(loc->b2 * (Vin - loc->Vd)); double id = loc->goff * loc->Vd + 0.5 * (loc->Vd - loc->Vc) * (loc->Vd - loc->Vc) * loc->b1; Idd = (Ilimit - id) * tmp + id; deriv = loc->gon * (1. - tmp * tmp); } else { Idd = Vfwd * loc->goff + (Vin - Vfwd) * loc->gon; deriv = loc->gon; } } if(ANALYSIS != MIF_AC) { /* Output DC & Transient Values */ OUTPUT(ds) = Idd; PARTIAL(ds,ds) = deriv; } else { /* Output AC Gain */ ac_gain.real = deriv; ac_gain.imag= 0.0; AC_GAIN(ds,ds) = ac_gain; } } tmpk8ny_4pz/src/xspice/icm/xtradev/core/0000755000175000017500000000000013546075722020417 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/xtradev/core/ifspec.ifs0000644000175000017500000000674513546075722022407 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 27 Sept 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the analog core code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_core Spice_Model_Name: core Description: "magnetic core" PORT_TABLE: Port_Name: mc Description: "magnetic core" Direction: inout Default_Type: gd Allowed_Types: [g,gd] Vector: no Vector_Bounds: - Null_Allowed: no PARAMETER_TABLE: Parameter_Name: h_array b_array Description: "magnetic field array" "flux density array" Data_Type: real real Default_Value: - - Limits: - - Vector: yes yes Vector_Bounds: [2 -] [2 -] Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: area length Description: "cross-sectional area" "core length" Data_Type: real real Default_Value: - - Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: input_domain Description: "input sm. domain" Data_Type: real Default_Value: 0.01 Limits: [1e-12 0.5] Vector: no Vector_Bounds: - Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: fraction Description: "smoothing fractional/abs switch" Data_Type: boolean Default_Value: TRUE Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: mode Description: "mode switch (1 = pwl, 2 = hyst)" Data_Type: int Default_Value: 1 Limits: [1 2] Vector: no Vector_Bounds: - Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: in_low in_high Description: "input low value" "input high value" Data_Type: real real Default_Value: 0.0 1.0 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: hyst out_lower_limit Description: "hysteresis" "output lower limit" Data_Type: real real Default_Value: 0.1 0.0 Limits: [0 -] - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: out_upper_limit Description: "output upper limit" Data_Type: real Default_Value: 1.0 Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes tmpk8ny_4pz/src/xspice/icm/xtradev/core/cfunc.mod0000644000175000017500000004672713546075722022236 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE core/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 24 Apr 1991 Jeffrey P. Murray MODIFICATIONS 24 Apr 1991 Jeffrey P. Murray 26 Sep 1991 Jeffrey P. Murray SUMMARY This file contains the functional description of the core code model. INTERFACES FILE ROUTINE CALLED CMmacros.h cm_message_send(); CMutil.c void cm_smooth_corner(); REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include /*=== CONSTANTS ========================*/ #define HYST 1 #define X_RISING TRUE #define X_FALLING FALSE #define PWL 1 #define HYSTERESIS 2 /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION cm_core() AUTHORS 24 Apr 1991 Jeffrey P. Murray MODIFICATIONS 24 Apr 1991 Jeffrey P. Murray 26 Sep 1991 Jeffrey P. Murray SUMMARY This function implements the core code model. INTERFACES FILE ROUTINE CALLED CMmacros.h cm_message_send(); CMutil.c void cm_smooth_corner(); RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_CORE ROUTINE ===*/ /*******************************************************************/ /* */ /* CORE Model: */ /* */ /* The core model is designed to operate in one of two modes. */ /* The first of these, and the one most likely to be used by */ /* the engineer, is a modified version of the pwl model. This */ /* behavior occurs when the model is in pwl mode (the default). */ /* If the model is set to hyst mode, its behavior mimics that of */ /* the hysteresis block. The following provides additional */ /* detail: */ /* */ /* PWL Mode */ /* */ /* In pwl mode, the core model is a modified version of the */ /* PWL model... */ /* it has a single two-terminal input/output, and accepts as */ /* input the mmf value, represented by a voltage. Its output is */ /* a flux value, which is represented as a current. Additional */ /* inputs include the cross-sectional area of the physical */ /* core, and the median length of the core, seen from the */ /* perspective of the flux that traverses it. */ /* */ /* The core model in pwl mode DOES NOT include hysteresis... */ /* current thinking is that such provides */ /* little benefit to the designer, aside from the ability to */ /* calculate eddy losses in a modeled device...the nonlinear */ /* B vs. H behavior, however, is of great importance. */ /* */ /* Note that the user must input a piece-wise-linear */ /* description, in the form of a series of coordinate B vs. H */ /* values, in order to model a particular core material type. */ /* Such curves may be found in textbooks, or from manufacturer's */ /* databooks. In this model, the "x" values are assumed to */ /* represent the magnetic field (H), and the "y" values are */ /* assumed to represent the flux density (B). */ /* */ /* Hyst Mode */ /* */ /* In hyst mode, the core model is a modified version of the */ /* HYST code model... */ /* it has a single two-terminal input/output, and accepts as */ /* input the mmf value, represented by a voltage. Its output is */ /* a flux value, which is represented as a current. Additional */ /* inputs include the input high and low values for the */ /* hysteretic behavior, and the output high and low values. */ /* Also, a value of hysteresis must be included, as must an */ /* input_domain value, and a fraction value, which tell the model */ /* whether to interpret the input_domain as an absolute value */ /* or as a relative figure. */ /* */ /* When the hyst mode is invoked on the core model, the user is */ /* in the position of having to define reasonable values for the */ /* upper and lower output limiting values. These can be very */ /* difficule to nail down accurately. Current thinking is tha */ /* the hysteresis capability will be of only nominal benefit to */ /* the engineer, as it will not typically allow for as accurate */ /* tailoring of the response as is possible in the pwl mode. */ /* */ /* 4/24/91 J.P.Murray */ /* Last modified: 10/24/91 */ /*******************************************************************/ void cm_core(ARGS) { /*** The following declarations pertain to PWL mode ***/ int i; /* generic loop counter index */ int size; /* size of the x_array */ int mode; /* mode parameter which determines whether pwl or hyst will be used in analysis. */ double input_domain; /* smoothing range */ Mif_Value_t *H; /* pointer to the H-field array */ Mif_Value_t *B; /* pointer to the B-field array */ double lower_seg; /* x segment below which input resides */ double upper_seg; /* x segment above which the input resides */ double lower_slope; /* slope of the lower segment */ double upper_slope; /* slope of the upper segment */ double mmf_input; /* input mmf value */ double H_input; /* calculated input H value */ double B_out; /* output B value */ double flux_out; /* calculated output flux */ double dout_din; /* partial derivative of the output wrt input */ double threshold_lower; /* value below which the output begins smoothing */ double threshold_upper; /* value above which the output begins smoothing */ double area; /* cross-sectional area of the core (in meters)*/ double length; /* length of core (in meters) */ Mif_Complex_t ac_gain; char *limit_error="\n***ERROR***\nCORE: Violation of 50% rule in breakpoints!\n"; /*** The following declarations pertain to HYSTERESIS mode... ***/ double in, /* input to hysteresis block */ out, /* output from hysteresis block */ in_low, /* lower input value for hyst=0 at which the transfer curve changes from constant to linear */ in_high, /* upper input value for hyst=0 at which the transfer curve changes from constant to linear */ hyst, /* the hysteresis value (see above diagram) */ out_lower_limit, /* the minimum output value from the block */ out_upper_limit, /* the maximum output value from the block */ slope, /* calculated rise and fall slope for the block */ pout_pin, /* partial derivative of output w.r.t. input */ x_rise_linear, /* = in_low + hyst */ x_rise_zero, /* = in_high + hyst */ x_fall_linear, /* = in_high - hyst */ x_fall_zero; /* = in_low - hyst */ Boolean_t *hyst_state, /* TRUE => input is on lower leg of hysteresis curve, between -infinity and in_high + hyst. FALSE => input is on upper leg of hysteresis curve, between in_low - hyst and +infinity */ *old_hyst_state; /* previous value of *hyst_state */ /* Retrieve mode parameter... */ mode = PARAM(mode); /** Based on mode value, switch to the appropriate model code... **/ if (HYSTERESIS != mode) { /******** pwl mode *****************/ /* Retrieve frequently used parameters... */ input_domain = PARAM(input_domain); area = PARAM(area); length = PARAM(length); size = PARAM_SIZE(H_array); H = (Mif_Value_t*) &PARAM(H_array[0]); B = (Mif_Value_t*) &PARAM(B_array[0]); /* See if input_domain is absolute...if so, test against */ /* breakpoint segments for violation of 50% rule... */ if (PARAM(fraction) == MIF_FALSE) for (i = 0; i < size - 1; i++) if ((H[i+1].rvalue - H[i].rvalue) < 2.0 * input_domain) { cm_message_send(limit_error); return; } /* Retrieve mmf_input value. */ mmf_input = INPUT(mc); /* Calculate H_input value from mmf_input... */ H_input = mmf_input / length; /* Determine segment boundaries within which H_input resides */ if (H_input <= (H[1].rvalue + H[0].rvalue) / 2.0) {/*** H_input below lowest midpoint ***/ dout_din = (B[1].rvalue - B[0].rvalue) / (H[1].rvalue - H[0].rvalue); B_out = B[0].rvalue + (H_input - H[0].rvalue) * dout_din; } else if (H_input >= (H[size-2].rvalue + H[size-1].rvalue) / 2.0) { /*** H_input above highest midpoint ***/ dout_din = (B[size-1].rvalue - B[size-2].rvalue) / (H[size-1].rvalue - H[size-2].rvalue); B_out = B[size-1].rvalue + (H_input - H[size-1].rvalue) * dout_din; } else { /*** H_input within bounds of end midpoints... ***/ /*** must determine position progressively & then ***/ /*** calculate required output. ***/ dout_din = NAN; B_out = NAN; for (i = 1; i < size; i++) if (H_input < (H[i].rvalue + H[i+1].rvalue) / 2.0) { /* approximate position known... */ lower_seg = (H[i].rvalue - H[i-1].rvalue); upper_seg = (H[i+1].rvalue - H[i].rvalue); /* Calculate input_domain about this region's breakpoint.*/ if (PARAM(fraction) == MIF_TRUE) { /* Translate input_domain */ /* into an absolute.... */ if (lower_seg <= upper_seg) /* Use lower */ /* segment */ /* for % calc.*/ input_domain = input_domain * lower_seg; else /* Use upper */ /* segment */ /* for % calc.*/ input_domain = input_domain * upper_seg; } /* Set up threshold values about breakpoint... */ threshold_lower = H[i].rvalue - input_domain; threshold_upper = H[i].rvalue + input_domain; /* Determine where H_input is within region & determine */ /* output and partial values.... */ if (H_input < threshold_lower) { /* Lower linear region */ dout_din = (B[i].rvalue - B[i-1].rvalue) / lower_seg; B_out = B[i].rvalue + (H_input - H[i].rvalue) * dout_din; } else if (H_input < threshold_upper) { /* Parabolic region */ lower_slope = (B[i].rvalue - B[i-1].rvalue) / lower_seg; upper_slope = (B[i+1].rvalue - B[i].rvalue) / upper_seg; cm_smooth_corner(H_input, H[i].rvalue, B[i].rvalue, input_domain, lower_slope, upper_slope, &B_out, &dout_din); } else { /* Upper linear region */ dout_din = (B[i+1].rvalue - B[i].rvalue) / upper_seg; B_out = B[i].rvalue + (H_input - H[i].rvalue) * dout_din; } break; /* Break search loop...H_input has been found, */ /* and B_out and dout_din have been assigned. */ } } /* Calculate value of flux_out... */ flux_out = B_out * area; /* Adjust dout_din value to reflect area and length multipliers... */ dout_din = dout_din * area / length; if (ANALYSIS != MIF_AC) { /* Output DC & Transient Values */ OUTPUT(mc) = flux_out; PARTIAL(mc, mc) = dout_din; } else { /* Output AC Gain */ ac_gain.real = dout_din; ac_gain.imag = 0.0; AC_GAIN(mc, mc) = ac_gain; } } else { /******** hysteresis mode ******************/ /** Retrieve frequently used parameters... **/ in_low = PARAM(in_low); in_high = PARAM(in_high); hyst = PARAM(hyst); out_lower_limit = PARAM(out_lower_limit); out_upper_limit = PARAM(out_upper_limit); input_domain = PARAM(input_domain); /** Calculate Hysteresis Linear Region Slopes & Derived Values **/ /* Define slope of rise and fall lines when not being smoothed */ slope = (out_upper_limit - out_lower_limit) / (in_high - in_low); x_rise_linear = in_low + hyst; /* Breakpoint - x rising to linear region */ x_rise_zero = in_high + hyst; /* Breakpoint - x rising to zero-slope (out_upper_limit) */ x_fall_linear = in_high - hyst; /* Breakpoint - x falling to linear region */ x_fall_zero = in_low - hyst; /* Breakpoint - x falling to zero-slope (out_lower_limit) */ /* Set range to absolute value */ if (PARAM(fraction) == MIF_TRUE) input_domain = input_domain * (in_high - in_low); /** Retrieve frequently used inputs... **/ in = INPUT(mc); /** Test for INIT; if so, allocate storage, otherwise, retrieve previous timepoint value for output... **/ /* First pass...allocate storage for previous state. */ /* Also, calculate roughly where the current output */ /* will be and use this value to define current state. */ if (INIT == 1) { cm_analog_alloc(TRUE, sizeof(Boolean_t)); hyst_state = (Boolean_t *) cm_analog_get_ptr(TRUE, 0); old_hyst_state = (Boolean_t *) cm_analog_get_ptr(TRUE, 1); if (in < x_rise_zero + input_domain) /* Set state to X_RISING */ *old_hyst_state = X_RISING; else *old_hyst_state = X_FALLING; } else { /* Allocation not necessary...retrieve previous values */ hyst_state = (Boolean_t *) cm_analog_get_ptr(TRUE, 0); /* Set out pointer to current time storage */ old_hyst_state = (Boolean_t *) cm_analog_get_ptr(TRUE, 1); /* Set old-output-state pointer to previous time storage */ } /** Set *hyst_out = *old_hyst_out, unless changed below... we don't need the last iteration value of *hyst_state. **/ *hyst_state = *old_hyst_state; /*** Calculate value of hyst_state, pout_pin.... ***/ if (*old_hyst_state == X_RISING) { /* Assume calculations on lower */ /* hysteresis section (x rising) */ if (in <= x_rise_linear - input_domain) { /* Output @ lower limit */ out = out_lower_limit; pout_pin = 0.0; } else if (in <= x_rise_linear + input_domain) { /* lower smoothing region */ cm_smooth_corner(in, x_rise_linear, out_lower_limit, input_domain, 0.0, slope, &out, &pout_pin); } else if (in <= x_rise_zero - input_domain) { /* Rising linear region */ out = (in - x_rise_linear)*slope + out_lower_limit; pout_pin = slope; } else if (in <= x_rise_zero + input_domain) { /* Upper smoothing region */ cm_smooth_corner(in, x_rise_zero, out_upper_limit, input_domain, slope, 0.0, &out, &pout_pin); } else { /* input has transitioned to X_FALLING region... */ out = out_upper_limit; pout_pin = 0.0; *hyst_state = X_FALLING; } } else { /* Assume calculations on upper hysteresis section (x falling) */ if ( in >= x_fall_linear + input_domain ) { /* Output @ upper limit */ out = out_upper_limit; pout_pin = 0.0; } else if ( in >= x_fall_linear - input_domain ) { /* Upper smoothing region */ cm_smooth_corner(in, x_fall_linear, out_upper_limit, input_domain, slope, 0.0, &out, &pout_pin); } else if (in >= x_fall_zero + input_domain) { /* Falling linear region */ out = (in - x_fall_zero)*slope + out_lower_limit; pout_pin = slope; } else if (in >= x_fall_zero - input_domain) { /* Lower smoothing region */ cm_smooth_corner(in, x_fall_zero, out_lower_limit, input_domain, 0.0, slope, &out, &pout_pin); } else { /* input has transitioned to X_RISING region... */ out = out_lower_limit; pout_pin = 0.0; *hyst_state = X_RISING; } } if (ANALYSIS != MIF_AC) { /* DC & Transient Analyses */ OUTPUT(mc) = out; PARTIAL(mc, mc) = pout_pin; } else { /* AC Analysis */ ac_gain.real = pout_pin; ac_gain.imag = 0.0; AC_GAIN(mc, mc) = ac_gain; } } } tmpk8ny_4pz/src/xspice/icm/xtradev/memristor/0000755000175000017500000000000013546075722021510 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/xtradev/memristor/ifspec.ifs0000644000175000017500000000463413546075722023473 0ustar carstencarsten/* =========================================================================== FILE ifspec.ifs MEMBER OF process XSPICE Copyright 2012 Holger Vogt Mülheim, Germany All Rights Reserved AUTHORS 06/08/2012 Holger Vogt MODIFICATIONS SUMMARY This file contains the definition of a memristor code model with threshold according to Y. V. Pershin, M. Di Ventra: "SPICE model of memristive devices with threshold", arXiv:1204.2600v1 [physics.comp-ph] 12 Apr 2012, http://arxiv.org/pdf/1204.2600.pdf. ** Experimental, still to be tested in circuits !! ** INTERFACES None. REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ NAME_TABLE: Spice_Model_Name: memristor C_Function_Name: cm_memristor Description: "Memristor interface" PORT_TABLE: Port_Name: memris Description: "memristor terminals" Direction: inout Default_Type: gd Allowed_Types: [gd] Vector: no Vector_Bounds: - Null_Allowed: no PARAMETER_TABLE: Parameter_Name: rmin rmax rinit Description: "minimum resistance" "maximum resistance" "initial resistance" Data_Type: real real real Default_Value: 10.0 10000.0 7000.0 Limits: - - - Vector: no no no Vector_Bounds: - - - Null_Allowed: no no no PARAMETER_TABLE: Parameter_Name: alpha beta vt Description: "model parameter 1" "model parameter 2" "threshold" Data_Type: real real real Default_Value: 0.0 1.0 0.0 Limits: - - - Vector: no no no Vector_Bounds: - - - Null_Allowed: no no no tmpk8ny_4pz/src/xspice/icm/xtradev/memristor/cfunc.mod0000644000175000017500000000513513546075722023313 0ustar carstencarsten/* =========================================================================== FILE memristor/cfunc.mod MEMBER OF process XSPICE Copyright 2012 Holger Vogt Mülheim, Germany All Rights Reserved AUTHORS 6/08/2012 Holger Vogt MODIFICATIONS SUMMARY This file contains the definition of a memristor code model with threshold according to Y. V. Pershin, M. Di Ventra: "SPICE model of memristive devices with threshold", arXiv:1204.2600v1 [physics.comp-ph] 12 Apr 2012, http://arxiv.org/pdf/1204.2600.pdf. ** Experimental, still to be tested in circuits !! ** dc and ac simulation just return rinit. INTERFACES cm_memristor() REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ /*=== INCLUDE FILES ====================*/ #include #define RV 0 /* model parameters */ double alpha, beta, vt; /* forward of window function */ double f1(double y); void cm_memristor (ARGS) { Complex_t ac_gain; double partial; double int_value; double *rval; double inpdiff; /* get the parameters */ alpha = PARAM(alpha); beta = PARAM(beta); vt = PARAM(vt); /* Initialize/access instance specific storage for resistance value */ if(INIT) { cm_analog_alloc(RV, sizeof(double)); rval = (double *) cm_analog_get_ptr(RV, 0); *rval = PARAM(rinit); } else { rval = (double *) cm_analog_get_ptr(RV, 0); } /* Compute the output */ if(ANALYSIS == TRANSIENT) { /* input the voltage across the terminals */ inpdiff = f1(INPUT(memris)); if ((inpdiff > 0) && (*rval < PARAM(rmax))) int_value = inpdiff; else if ((inpdiff < 0) && (*rval > PARAM(rmin))) int_value = inpdiff; else int_value = 0.0; /* integrate the new resistance */ cm_analog_integrate(int_value, rval, &partial); /* output the current */ OUTPUT(memris) = INPUT(memris) / *rval; /* This does work, but is questionable */ PARTIAL(memris, memris) = partial; /* This may be a (safe?) replacement, but in fact is not so good at high voltage (at strong non-linearity) cm_analog_auto_partial();*/ } else if(ANALYSIS == AC) { ac_gain.real = 1/ *rval; ac_gain.imag = 0.0; AC_GAIN(memris, memris) = ac_gain; } else OUTPUT(memris) = INPUT(memris) / *rval; } /* the window function */ double f1(double y) { return (beta*y+0.5*(alpha-beta)*(fabs(y+vt)-fabs(y-vt))); } tmpk8ny_4pz/src/xspice/icm/xtradev/zener/0000755000175000017500000000000013546075722020612 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/xtradev/zener/ifspec.ifs0000644000175000017500000000526413546075722022575 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 2 May 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the analog zener code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_zener Spice_Model_Name: zener Description: "zener diode" PORT_TABLE: Port_Name: z Description: "zener" Direction: inout Default_Type: gd Allowed_Types: [gd] Vector: no Vector_Bounds: - Null_Allowed: no PARAMETER_TABLE: Parameter_Name: v_breakdown i_breakdown Description: "breakdown voltage" "breakdown current" Data_Type: real real Default_Value: - 2e-2 Limits: [1e-6 1e6] [1e-9 -] Vector: no no Vector_Bounds: - - Null_Allowed: no yes PARAMETER_TABLE: Parameter_Name: r_breakdown i_rev Description: "breakdown resistance" "reverse current" Data_Type: real real Default_Value: 1.0 1e-6 Limits: [1e-12 -] [1e-9 -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: i_sat n_forward Description: "saturation current" "forward emission co" Data_Type: real real Default_Value: 1e-12 1.0 Limits: [1e-15 -] [.1 10] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: limit_switch Description: "switch for on-board limiting (convergence aid)" Data_Type: boolean Default_Value: FALSE Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes STATIC_VAR_TABLE: Static_Var_Name: previous_voltage Data_Type: pointer Description: "iteration holding variable for limiting" tmpk8ny_4pz/src/xspice/icm/xtradev/zener/cfunc.mod0000644000175000017500000002346713546075722022425 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE zener/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 2 May 1991 Jeffrey P. Murray MODIFICATIONS 18 Sep 1991 Jeffrey P. Murray 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the model-specific routines used to functionally describe the zener code model. INTERFACES FILE ROUTINE CALLED CM.c void cm_analog_not_converged() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION void cm_zener() AUTHORS 2 May 1991 Jeffrey P. Murray MODIFICATIONS 18 Sep 1991 Jeffrey P. Murray 2 Oct 1991 Jeffrey P. Murray SUMMARY This function implements the zener code model. INTERFACES FILE ROUTINE CALLED CM.c void cm_analog_not_converged() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ #include /*=== CM_ZENER ROUTINE ===*/ void cm_zener(ARGS) /* structure holding parms, inputs, outputs, etc. */ { double v_breakdown, /* breakdown voltage parameter */ i_breakdown, /* breakdown current parameter */ r_breakdown, /* breakdown resistance parameter */ i_rev, /* reverse current parameter */ i_sat, /* saturation current parameter... a.k.a. Io in the forward diode characteristic equation...see below. */ n_forward, /* forward emission coefficient parameter... a.k.a. "n" in the forward diode characteristic equation...see below. */ vt, /* volt-equivalent of temperature, Vt, used in conjunction with n = n_forward value to describe the forward-voltage diode behavior described as: I = Io * (e^(V/n*Vt) - 1.0) */ v_1_2, /* Boundary value voltage between region 1 (forward diode characteristic) and region 2 (linear region) */ k, /* intermediate value used to find v_2_3 */ v_2_3, /* Boundary value voltage between region 2 (linear region) and region 3 (reverse breakdown region) */ slope1, /* Slope of endpoint for a two segment model */ slope2, /* Slope of endpoint for a two segment model */ temp, /* temporary variable used to calulate the derivatives */ v_zener, /* input voltage across zener */ i_zener, /* current which is allowed to flow through zener, for a given voltage */ i0, v0, a, /* coefficient used to calculate "c" */ b, /* coefficient used to calculate "c" */ c, /* A constant to match ordinates at region 2/3 boundary */ deriv, /* partial derivative of the output current w.r.t. the input voltage */ diff, /* difference between slope1 and slope2 */ ord_1_2, /* Compute ordinate at boundary of regions 1 & 2 */ *previous_voltage, /* Previous voltage value (used for limiting) */ increment, /* Increment value calculated from the previous_input for v_zener input limiting */ g; /* conductance value equal to i_rev / v_breakdown. This value is used to simulate a reverse-leakage conductance in parallel with the zener characteristic. */ Mif_Complex_t ac_gain; /* AC gain */ if (INIT==1) { /* First pass...allocate storage for previous value... */ /* Allocate storage for frequencies */ STATIC_VAR(previous_voltage) = (double *) malloc(sizeof(double)); previous_voltage = (double *) STATIC_VAR(previous_voltage); /* Set previous_voltage value to zero... */ *previous_voltage = 0.0; } else { previous_voltage = (double *) STATIC_VAR(previous_voltage); } /* Retrieve frequently used parameters & inputs... */ v_breakdown = PARAM(v_breakdown); i_breakdown = PARAM(i_breakdown); r_breakdown = PARAM(r_breakdown); i_rev = PARAM(i_rev); i_sat = PARAM(i_sat); n_forward = PARAM(n_forward); v_zener = INPUT(z); /** If the limit_switch parameter is set, test the **/ /** current input against previous value for limiting **/ if ( MIF_TRUE == PARAM(limit_switch) ) { /* Check magnitude of v_zener */ if ( fabs(*previous_voltage) >= 1.0 ) { increment = 0.1 * *previous_voltage; } else { if (v_zener < 0.0) { increment = -0.1; } else { increment = 0.1; } } /* Test v_zener for reasonable change in value since last call.. */ if ( fabs(v_zener) > ( fabs(*previous_voltage + increment) ) ) { /* Apply limiting... */ *previous_voltage = v_zener = *previous_voltage + increment; cm_analog_not_converged(); } else { *previous_voltage = v_zener; } } /* Compute voltage at boundary of regions 1 & 2 */ vt = 0.026; v_1_2 = n_forward * vt * log(n_forward * vt / 10.0); /* Compute voltage at boundary of regions 2 & 3 */ k = 1.0 / i_breakdown / r_breakdown; v_2_3 = -v_breakdown + log(10.0/i_sat/r_breakdown)/k; /* Compare v_1_2 and v_2_3 to determine if a 3 segment model is possible */ if (v_2_3 < v_1_2) { /* Use a 3 segment model */ /* Compute v0 for region 3... */ i0 = 1.e-6; v0 = -v_breakdown + 1.0/k*log(i_breakdown/i0); /* Compute ordinate at boundary of regions 1 & 2 */ ord_1_2 = i_sat * (exp(v_1_2/n_forward/vt) - 1.0); /* Compute a & b coefficients for linear section in region 2 */ a = i_sat / 10.0; b = ord_1_2 - a * v_1_2; /* Compute constant to match ordinates at region 2/3 boundary */ c = a*v_2_3 + b + i0*exp(-k * (v_2_3 - v0)); /* Compute zener current */ if (v_zener >= v_1_2) { temp = exp(v_zener / n_forward / vt); i_zener = i_sat * (temp - 1.0); deriv = i_sat / n_forward / vt * temp; } else { if (v_zener >= v_2_3) { i_zener = a * v_zener + b; deriv = i_sat / 10.0; } else { temp = exp(-k * (v_zener - v0)); i_zener = -i0 * temp + c; deriv = k * i0 * temp; } } } else { /* Must use a 2 segment model */ /* Determine i0 for reverse region */ i0 = i_breakdown / (exp(k * v_breakdown) - 1.0); /* Determine the slopes at the region endpoints */ slope1 = i_sat / n_forward / vt; slope2 = i0 * k; /* Determine zener current & first partial... */ /* Use a linear conductance in one region to match */ /* slopes at the boundary. */ if (v_zener >= 0.0) { temp = exp(v_zener / n_forward / vt); i_zener = i_sat * (temp - 1.0); deriv = i_sat / n_forward / vt * temp; diff = slope2 - slope1; if (diff > 0.0) { i_zener = i_zener + diff * v_zener; deriv = deriv + diff; } } else { temp = exp(-k * v_zener); i_zener = -i0 * (temp - 1.0); deriv = k * i0 * temp; diff = slope1 - slope2; if (diff > 0.0) { i_zener = i_zener + diff * v_zener; deriv = deriv + diff; } } } /* Add resistor in parallel to simulate reverse leakage */ g = i_rev / v_breakdown; i_zener = i_zener + g * v_zener; deriv = deriv + g; if(ANALYSIS != MIF_AC) { /* Output DC & Transient Values */ OUTPUT(z) = i_zener; PARTIAL(z,z) = deriv; } else { /* Output AC Gain */ ac_gain.real = deriv; ac_gain.imag= 0.0; AC_GAIN(z,z) = ac_gain; } } tmpk8ny_4pz/src/xspice/icm/xtradev/aswitch/0000755000175000017500000000000013546075722021131 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/xtradev/aswitch/ifspec.ifs0000644000175000017500000000410013546075722023100 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 26 Sept 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the analog aswitch code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_aswitch Spice_Model_Name: aswitch Description: "analog switch" PORT_TABLE: Port_Name: cntl_in out Description: "input" "resistive output" Direction: in inout Default_Type: v gd Allowed_Types: [v,vd,i,id,vnam] [gd] Vector: no no Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: cntl_off cntl_on Description: "control 'off' val" "control 'on' val" Data_Type: real real Default_Value: 0.0 1.0 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: log r_off Description: "Log-linear switch" "off resistance" Data_Type: boolean real Default_Value: TRUE 1.0e12 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: r_on Description: "on resistance" Data_Type: real Default_Value: 1.0 Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes tmpk8ny_4pz/src/xspice/icm/xtradev/aswitch/cfunc.mod0000644000175000017500000001140213546075722022726 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE aswitch/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 6 June 1991 Jeffrey P. Murray MODIFICATIONS 26 Sept 1991 Jeffrey P. Murray SUMMARY This file contains the functional description of the aswitch code model. INTERFACES FILE ROUTINE CALLED CMmacros.h cm_message_send(); REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION cm_aswitch() AUTHORS 6 June 1991 Jeffrey P. Murray MODIFICATIONS 26 Sept 1991 Jeffrey P. Murray SUMMARY This function implements the aswitch code model. INTERFACES FILE ROUTINE CALLED CMmacros.h cm_message_send(); RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_ASWITCH ROUTINE ===*/ void cm_aswitch(ARGS) /* structure holding parms, inputs, outputs, etc. */ { double cntl_on; /* voltage above which switch come on */ double cntl_off; /* voltage below the switch has resistance roff */ double r_on; /* on resistance */ double r_off; /* off resistance */ double intermediate; /* intermediate value used to calculate the resistance of the switch when the controlling voltage is between cntl_on and cntl_of */ double r; /* value of the resistance of the switch */ double pi_pvout; /* partial of the output wrt input */ double pi_pcntl; /* partial of the output wrt control input */ Mif_Complex_t ac_gain; char *cntl_error = "\n*****ERROR*****\nASWITCH: CONTROL voltage delta less than 1.0e-12\n"; /* Retrieve frequently used parameters... */ cntl_on = PARAM(cntl_on); cntl_off = PARAM(cntl_off); r_on = PARAM(r_on); r_off = PARAM(r_off); if( r_on < 1.0e-3 ) r_on = 1.0e-3; /* Set minimum 'ON' resistance */ if( (fabs(cntl_on - cntl_off) < 1.0e-12) ) { cm_message_send(cntl_error); return; } if ( PARAM(log) == MIF_TRUE ) { /* Logarithmic Variation in 'R' */ intermediate = log(r_off / r_on) / (cntl_on - cntl_off); r = r_on * exp(intermediate * (cntl_on - INPUT(cntl_in))); if(r<=1.0e-9) r=1.0e-9;/* minimum resistance limiter */ pi_pvout = 1.0 / r; pi_pcntl = intermediate * INPUT(out) / r; } else { /* Linear Variation in 'R' */ intermediate = (r_on - r_off) / (cntl_on - cntl_off); r = INPUT(cntl_in) * intermediate + ((r_off*cntl_on - r_on*cntl_off) / (cntl_on - cntl_off)); if(r<=1.0e-9) r=1.0e-9;/* minimum resistance limiter */ pi_pvout = 1.0 / r; pi_pcntl = -intermediate * INPUT(out) / (r*r); } /*pi_pvout = 1.0 / r;*/ if(ANALYSIS != MIF_AC) { /* Output DC & Transient Values */ OUTPUT(out) = INPUT(out) / r; /* Note that the minus */ PARTIAL(out,out) = pi_pvout; /* Signs are required */ PARTIAL(out,cntl_in) = pi_pcntl; /* because current is */ /* positive flowing INTO */ /* rather than OUT OF a */ /* component node. */ } else { /* Output AC Gain Values */ ac_gain.real = -pi_pvout; /* See comment on minus */ ac_gain.imag= 0.0; /* signs above.... */ AC_GAIN(out,out) = ac_gain; ac_gain.real = -pi_pcntl; ac_gain.imag= 0.0; AC_GAIN(out,cntl_in) = ac_gain; } } tmpk8ny_4pz/src/xspice/icm/xtradev/capacitor/0000755000175000017500000000000013546075722021434 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/xtradev/capacitor/ifspec.ifs0000644000175000017500000000260013546075722023406 0ustar carstencarsten/* =========================================================================== FILE ifspec.ifs MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the definition of a capacitor code model with voltage type initial conditions. INTERFACES None. REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ NAME_TABLE: Spice_Model_Name: capacitor C_Function_Name: cm_capacitor Description: "Capacitor with voltage initial condition" PORT_TABLE: Port_Name: cap Description: "capacitor terminals" Direction: inout Default_Type: hd Allowed_Types: [hd] Vector: no Vector_Bounds: - Null_Allowed: no PARAMETER_TABLE: Parameter_Name: c ic Description: "capacitance" "voltage initial condition" Data_Type: real real Default_Value: - 0.0 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: no no tmpk8ny_4pz/src/xspice/icm/xtradev/capacitor/cfunc.mod0000644000175000017500000000353213546075722023236 0ustar carstencarsten/* =========================================================================== FILE capacitor/cfunc.mod MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the definition of a capacitor code model with voltage type initial conditions. INTERFACES cm_capacitor() REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ #define VC 0 void cm_capacitor (ARGS) { Complex_t ac_gain; double partial; double ramp_factor; double *vc; /* Get the ramp factor from the .option ramptime */ ramp_factor = cm_analog_ramp_factor(); /* Initialize/access instance specific storage for capacitor voltage */ if(INIT) { cm_analog_alloc(VC, sizeof(double)); vc = (double *) cm_analog_get_ptr(VC, 0); *vc = PARAM(ic) * cm_analog_ramp_factor(); } else { vc = (double *) cm_analog_get_ptr(VC, 0); } /* Compute the output */ if(ANALYSIS == DC) { OUTPUT(cap) = PARAM(ic) * ramp_factor; PARTIAL(cap, cap) = 0.0; } else if(ANALYSIS == AC) { ac_gain.real = 0.0; ac_gain.imag = -1.0 / RAD_FREQ / PARAM(c); AC_GAIN(cap, cap) = ac_gain; } else if(ANALYSIS == TRANSIENT) { if(ramp_factor < 1.0) { *vc = PARAM(ic) * ramp_factor; OUTPUT(cap) = *vc; PARTIAL(cap, cap) = 0.0; } else { cm_analog_integrate(INPUT(cap) / PARAM(c), vc, &partial); partial /= PARAM(c); OUTPUT(cap) = *vc; PARTIAL(cap, cap) = partial; } } } tmpk8ny_4pz/src/xspice/icm/xtradev/.gitignore0000644000175000017500000000014713546075722021461 0ustar carstencarsten/xtradev.cm /cmextrn.h /cminfo.h /dlmain.c /objects.inc /udnextrn.h /udninfo.h /*/*.c !/*/udnfunc.c tmpk8ny_4pz/src/xspice/icm/xtradev/modpath.lst0000644000175000017500000000013413546075722021645 0ustar carstencarstenaswitch capacitor cmeter core inductor lcouple lmeter potentiometer zener memristor sidiode tmpk8ny_4pz/src/xspice/icm/digital/0000755000175000017500000000000013546075722017427 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/digital/d_srff/0000755000175000017500000000000013546075722020672 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/digital/d_srff/ifspec.ifs0000644000175000017500000001016213546075722022646 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 30 Sept 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the digital d_srff code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_d_srff Spice_Model_Name: d_srff Description: "digital set-reset flip flop" PORT_TABLE: Port_Name: s r Description: "s input" "r input" Direction: in in Default_Type: d d Allowed_Types: [d] [d] Vector: no no Vector_Bounds: - - Null_Allowed: no no PORT_TABLE: Port_Name: clk Description: "clock" Direction: in Default_Type: d Allowed_Types: [d] Vector: no Vector_Bounds: - Null_Allowed: no PORT_TABLE: Port_Name: set reset Description: "asynch. set" "asynch. reset" Direction: in in Default_Type: d d Allowed_Types: [d] [d] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PORT_TABLE: Port_Name: out Nout Description: "data output" "inverted data output" Direction: out out Default_Type: d d Allowed_Types: [d] [d] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: clk_delay set_delay Description: "delay from clk" "delay from set" Data_Type: real real Default_Value: 1.0e-9 1.0e-9 Limits: [1e-12 -] [1e-12 -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: reset_delay ic Description: "delay from reset" "output initial state" Data_Type: real int Default_Value: 1.0e-9 0 Limits: [1e-12 -] [0 2] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: rise_delay fall_delay Description: "rise delay" "fall delay" Data_Type: real real Default_Value: 1.0e-9 1.0e-9 Limits: [1e-12 -] [1e-12 -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: sr_load clk_load Description: "s,r load values (F)" "clk load value (F)" Data_Type: real real Default_Value: 1.0e-12 1.0e-12 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: set_load reset_load Description: "set load value (F)" "reset load value (F)" Data_Type: real real Default_Value: 1.0e-12 1.0e-12 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes tmpk8ny_4pz/src/xspice/icm/digital/d_srff/cfunc.mod0000644000175000017500000005575413546075722022511 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_srff/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 24 Jun 1991 Jeffrey P. Murray MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray 29 Jan 1992 Jeffrey P. Murray SUMMARY This file contains the model-specific routines used to functionally describe the d_srff code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_toggle_bit(); CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION cm_toggle_bit() AUTHORS 27 Sept 1991 Jeffrey P. Murray MODIFICATIONS NONE SUMMARY Alters the state of a passed digital variable to its complement. Thus, a ONE changes to a ZERO. A ZERO changes to a ONE, and an UNKNOWN remains unchanged. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE No returned value. Passed pointer to variable is used to redefine the variable value. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== CM_TOGGLE_BIT ROUTINE ===*/ static void cm_toggle_bit(Digital_State_t *bit) { /* Toggle bit from ONE to ZERO or vice versa, unless the bit value is UNKNOWN. In the latter case, return without changing the bit value. */ if ( UNKNOWN != *bit ) { if ( ONE == *bit ) { *bit = ZERO; } else { *bit = ONE; } } } /*============================================================================== FUNCTION cm_eval_sr_result AUTHORS 30 Sept 1991 Jeffrey P. Murray MODIFICATIONS NONE SUMMARY Evaluates the S and R input states, plus the last state of the flip flop, and returns the expected output value. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_toggle_bit(); RETURNED VALUE A Digital_State_t. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_EVAL_SR_RESULT ROUTINE ===*/ static Digital_State_t cm_eval_sr_result(Digital_State_t s_input, Digital_State_t r_input, Digital_State_t old_output) { Digital_State_t output = ZERO; switch (s_input) { case ZERO: switch (r_input) { case ZERO: output = old_output; break; case ONE: output = ZERO; break; case UNKNOWN: output = UNKNOWN; break; } break; case ONE: switch (r_input) { case ZERO: output = ONE; break; case ONE: output = UNKNOWN; break; case UNKNOWN: output = UNKNOWN; break; } break; case UNKNOWN: output = UNKNOWN; break; } return output; } /*============================================================================== FUNCTION cm_d_srff() AUTHORS 24 Jun 1991 Jeffrey P. Murray MODIFICATIONS 24 Sep 1991 Jeffrey P. Murray 29 Jan 1992 Jeffrey P. Murray SUMMARY This function implements the d_srff code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_toggle_bit(); CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_D_SRFF ROUTINE ===*/ /************************************************ * The following is the model for the * * digital sr-type flip flop for the * * ATESSE Version 2.0 system. * * * * Created 6/24/91 J.P.Murray * ************************************************/ void cm_d_srff(ARGS) { /*int i;*/ /* generic loop counter index */ Digital_State_t *clk, /* current clk value */ *clk_old, /* previous clk value */ *set, /* current set value for dff */ *set_old, /* previous set value for dff */ *reset, /* current reset value for dff */ *reset_old, /* previous reset value for dff */ *out, /* current output for dff */ *out_old, /* previous output for dff */ s_input, /* current j input value */ r_input, /* current k input value */ temp; /* temp storage for state values */ /*** Setup required state variables ***/ if(INIT) { /* initial pass */ /* allocate storage */ cm_event_alloc(0,sizeof(Digital_State_t)); cm_event_alloc(1,sizeof(Digital_State_t)); cm_event_alloc(2,sizeof(Digital_State_t)); cm_event_alloc(3,sizeof(Digital_State_t)); /* declare load values */ LOAD(s) = PARAM(sr_load); LOAD(r) = PARAM(sr_load); LOAD(clk) = PARAM(clk_load); if ( !PORT_NULL(set) ) { LOAD(set) = PARAM(set_load); } if ( !PORT_NULL(reset) ) { LOAD(reset) = PARAM(reset_load); } /* retrieve storage for the outputs */ clk = clk_old = (Digital_State_t *) cm_event_get_ptr(0,0); set = set_old = (Digital_State_t *) cm_event_get_ptr(1,0); reset = reset_old = (Digital_State_t *) cm_event_get_ptr(2,0); out = out_old = (Digital_State_t *) cm_event_get_ptr(3,0); } else { /* Retrieve previous values */ /* retrieve storage for the outputs */ clk = (Digital_State_t *) cm_event_get_ptr(0,0); clk_old = (Digital_State_t *) cm_event_get_ptr(0,1); set = (Digital_State_t *) cm_event_get_ptr(1,0); set_old = (Digital_State_t *) cm_event_get_ptr(1,1); reset = (Digital_State_t *) cm_event_get_ptr(2,0); reset_old = (Digital_State_t *) cm_event_get_ptr(2,1); out = (Digital_State_t *) cm_event_get_ptr(3,0); out_old = (Digital_State_t *) cm_event_get_ptr(3,1); } /******** load current input values if set or reset are not connected, set to zero... ********/ *clk = INPUT_STATE(clk); if ( PORT_NULL(set) ) { *set = *set_old = ZERO; } else { *set = INPUT_STATE(set); } if ( PORT_NULL(reset) ) { *reset = *reset_old = ZERO; } else { *reset = INPUT_STATE(reset); } /******* Determine analysis type and output appropriate values *******/ if (0.0 == TIME) { /****** DC analysis...output w/o delays ******/ temp = (Digital_State_t) PARAM(ic); /** Modify output if set or reset lines are active **/ if ( (*set==ONE) && (*reset==ZERO) ) temp = ONE; if ( (*set==ZERO) && (*reset==ONE) ) temp = ZERO; if ( (*set==ONE) && (*reset==ONE) ) temp = UNKNOWN; *out = *out_old = temp; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = temp; } cm_toggle_bit(&temp); if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = temp; } } else { /****** Transient Analysis ******/ /***** Find input that has changed... *****/ /**** Test set value for change ****/ if ( *set != *set_old ) { /* either set or set release */ switch ( *set ) { case ONE: if ( ONE != *reset) { if (*out_old != ONE) { /* set will change output */ /* output goes to ONE */ *out = ONE; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = ONE; OUTPUT_DELAY(out) = PARAM(set_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = ZERO; OUTPUT_DELAY(Nout) = PARAM(set_delay); } } else { *out = *out_old; /* output already set */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } else { if (*out_old != UNKNOWN) { /* set will change output */ /* output goes to UNKNOWN */ *out = UNKNOWN; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = UNKNOWN; OUTPUT_DELAY(out) = PARAM(set_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = UNKNOWN; OUTPUT_DELAY(Nout) = PARAM(set_delay); } } else { *out = *out_old; /* output already unknown */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } break; case ZERO: if ( ONE != *reset) { /* output remains at current value */ *out = *out_old; if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } else { if (*out_old != ZERO) { /* set will change output */ /* output returns to reset condition */ *out = ZERO; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = ZERO; OUTPUT_DELAY(out) = PARAM(set_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = ONE; OUTPUT_DELAY(Nout) = PARAM(set_delay); } } else { *out = *out_old; /* output already reset */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } break; case UNKNOWN: if ( ONE == *reset ) { /* output goes to ZERO */ *out = ZERO; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = ZERO; OUTPUT_DELAY(out) = PARAM(set_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = ONE; OUTPUT_DELAY(Nout) = PARAM(set_delay); } } else { *out = *out_old; /* output already unknown */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } break; } } else { /**** Test reset value for change ****/ if ( *reset != *reset_old ) { /* either reset or reset release */ switch ( *reset ) { case ONE: if ( ONE != *set) { if (*out_old != ZERO) { /* reset will change output */ /* output goes to ZERO */ *out = ZERO; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = ZERO; OUTPUT_DELAY(out) = PARAM(reset_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = ONE; OUTPUT_DELAY(Nout) = PARAM(reset_delay); } } else { *out = *out_old; /* output already reset */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } else { if (*out_old != UNKNOWN) { /* reset will change output */ /* output goes to UNKNOWN */ *out = UNKNOWN; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = UNKNOWN; OUTPUT_DELAY(out) = PARAM(reset_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = UNKNOWN; OUTPUT_DELAY(Nout) = PARAM(reset_delay); } } else { *out = *out_old; /* output already unknown */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } break; case ZERO: if ( ONE != *set) { /* output remains at current value */ *out = *out_old; if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } else { if (*out_old != ONE) { /* reset will change output */ /* output returns to set condition */ *out = ONE; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = ONE; OUTPUT_DELAY(out) = PARAM(reset_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = ZERO; OUTPUT_DELAY(Nout) = PARAM(reset_delay); } } else { *out = *out_old; /* output already reset */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } break; case UNKNOWN: if ( ONE == *set ) { /* output goes to ONE */ *out = ONE; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = ONE; OUTPUT_DELAY(out) = PARAM(reset_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = ZERO; OUTPUT_DELAY(Nout) = PARAM(reset_delay); } } else { *out = *out_old; /* output already unknown */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } break; } } else { /**** Test clk value for change ****/ if ( (*clk != *clk_old) && (*reset != ONE) && (*set != ONE) ) { /* clock or clock release */ switch ( *clk ) { case ONE: /* active edge...calculate new data output */ s_input = INPUT_STATE(s); r_input = INPUT_STATE(r); temp = cm_eval_sr_result(s_input,r_input,*out_old); if (*out_old != temp) { /* clk will change output */ *out = temp; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = temp; OUTPUT_DELAY(out) = PARAM(clk_delay); } cm_toggle_bit(&temp); if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = temp; OUTPUT_DELAY(Nout) = PARAM(clk_delay); } } else { *out = *out_old; /* output same as before */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } break; case ZERO: case UNKNOWN: /* inactive edge...return previous values */ *out = *out_old; if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } break; } } else { /* data value must have changed... return previous output value. */ *out = *out_old; if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } } /***** Add additional rise or fall delays, if appropriate *****/ if ( *out != *out_old ) { /*** output value is changing ***/ switch ( *out ) { /** fall to zero value **/ case 0: if ( !PORT_NULL(out) ) { OUTPUT_DELAY(out) += PARAM(fall_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_DELAY(Nout) += PARAM(rise_delay); } break; /** rise to one value **/ case 1: if ( !PORT_NULL(out) ) { OUTPUT_DELAY(out) += PARAM(rise_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_DELAY(Nout) += PARAM(fall_delay); } break; /** unknown output **/ default: /* based on old value, add rise or fall delay */ if (0 == *out_old) { /* add rising delay */ if ( !PORT_NULL(out) ) { OUTPUT_DELAY(out) += PARAM(rise_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_DELAY(Nout) += PARAM(fall_delay); } } else { /* add falling delay */ if ( !PORT_NULL(out) ) { OUTPUT_DELAY(out) += PARAM(fall_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_DELAY(Nout) += PARAM(rise_delay); } } break; } } } /*** output strength values ***/ if ( !PORT_NULL(out) ) { OUTPUT_STRENGTH(out) = STRONG; } if ( !PORT_NULL(Nout) ) { OUTPUT_STRENGTH(Nout) = STRONG; } } tmpk8ny_4pz/src/xspice/icm/digital/d_or/0000755000175000017500000000000013546075722020352 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/digital/d_or/ifspec.ifs0000644000175000017500000000352713546075722022335 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 30 Sept 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the digital d_or code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_d_or Spice_Model_Name: d_or Description: "digital n-input or gate" PORT_TABLE: Port_Name: in out Description: "input" "output" Direction: in out Default_Type: d d Allowed_Types: [d] [d] Vector: yes no Vector_Bounds: [2 -] - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: rise_delay fall_delay Description: "rise delay" "fall delay" Data_Type: real real Default_Value: 1.0e-9 1.0e-9 Limits: [1e-12 -] [1e-12 -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: input_load Description: "input load value (F)" Data_Type: real Default_Value: 1.0e-12 Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes tmpk8ny_4pz/src/xspice/icm/digital/d_or/cfunc.mod0000644000175000017500000001324413546075722022155 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_or/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 18 Jun 1991 Jeffrey P. Murray MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY This file contains the functional description of the d_or code model. INTERFACES FILE ROUTINE CALLED CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION cm_d_or() AUTHORS 18 Jun 1991 Jeffrey P. Murray MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY This function implements the d_or code model. INTERFACES FILE ROUTINE CALLED CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_D_OR ROUTINE ===*/ /************************************************ * The following is the model for the * * digital OR gate for the * * ATESSE Version 2.0 system. * * * * Created 6/18/91 J.P.Murray * ************************************************/ void cm_d_or(ARGS) { int i, /* generic loop counter index */ size; /* number of input & output ports */ Digital_State_t *out, /* temporary output for buffers */ *out_old, /* previous output for buffers */ input; /* temp storage for input bits */ /** Retrieve size value... **/ size = PORT_SIZE(in); /*** Setup required state variables ***/ if(INIT) { /* initial pass */ /* allocate storage for the outputs */ cm_event_alloc(0,sizeof(Digital_State_t)); for (i=0; i #include #include #include /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION cm_d_fdiv() AUTHORS 10 Jul 1991 Jeffrey P. Murray MODIFICATIONS 22 Aug 1991 Jeffrey P. Murray 30 Sep 1991 Jeffrey P. Murray SUMMARY This function implements the d_fdiv code model. INTERFACES FILE ROUTINE CALLED CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_D_FDIV ROUTINE ===*/ /************************************************ * The following is the model for the * * digital frequency divider for the * * ATESSE Version 2.0 system. * * * * Created 7/10/91 J.P.Murray * ************************************************/ void cm_d_fdiv(ARGS) { int div_factor; /* division factor */ Digital_State_t *freq_in, /* freq_in clock value */ *freq_in_old, /* previous freq_in value */ *freq_out, /* current output for fdiv */ *freq_out_old; /* previous output for fdiv */ int *count, /* counter value */ *count_old; /* previous counter value */ /*** Setup required state variables ***/ if(INIT) { /* initial pass */ /* allocate storage */ cm_event_alloc(0,sizeof(Digital_State_t)); cm_event_alloc(1,sizeof(Digital_State_t)); cm_event_alloc(2,sizeof(int)); /* declare load values */ LOAD(freq_in) = PARAM(freq_in_load); /* retrieve storage for the outputs */ freq_in = freq_in_old = (Digital_State_t *) cm_event_get_ptr(0,0); freq_out = freq_out_old = (Digital_State_t *) cm_event_get_ptr(1,0); count = count_old = (int *) cm_event_get_ptr(2,0); } else { /* Retrieve previous values */ /* retrieve storage for the outputs */ freq_in = (Digital_State_t *) cm_event_get_ptr(0,0); freq_in_old = (Digital_State_t *) cm_event_get_ptr(0,1); freq_out = (Digital_State_t *) cm_event_get_ptr(1,0); freq_out_old = (Digital_State_t *) cm_event_get_ptr(1,1); count = (int *) cm_event_get_ptr(2,0); count_old = (int *) cm_event_get_ptr(2,1); } /*** Output the strength of freq_out (always strong)... ***/ OUTPUT_STRENGTH(freq_out) = STRONG; /** Retrieve parameters */ div_factor = PARAM(div_factor); /******* Determine analysis type and output appropriate values *******/ if (0.0 == TIME) { /****** DC analysis...output w/o delays ******/ /* read initial count value, normalize, and if it is out of bounds, set to "zero" equivalent */ *count = PARAM(i_count); if ( (div_factor <= *count) || (0 > *count) ) { *count = 0; OUTPUT_STATE(freq_out) = *freq_out = *freq_out_old = ZERO; } if ( (0 < *count) && (*count <= PARAM(high_cycles)) ) { OUTPUT_STATE(freq_out) = *freq_out = *freq_out_old = ONE; } } else { /****** Transient Analysis ******/ /*** load current input value... ***/ *freq_in = INPUT_STATE(freq_in); /**** Test to see if the input has provided an edge... ****/ if ( (*freq_in != *freq_in_old)&&(*freq_in == 1) ) { /** An edge has been provided...revise count value **/ *count = *count_old + 1; /* If new count value is equal to the div_factor+1 value, need to normalize count to "1", and raise output */ if ( ((div_factor+1) == *count)||(1 == *count) ) { *count = 1; OUTPUT_STATE(freq_out) = *freq_out = ONE; OUTPUT_DELAY(freq_out) = PARAM(rise_delay); } else { /* If new count value is equal to the high_cycles+1 value, drop the output to ZERO */ if ( ( PARAM(high_cycles)+1) == *count ) { OUTPUT_STATE(freq_out) = *freq_out = ZERO; OUTPUT_DELAY(freq_out) = PARAM(fall_delay); } else { OUTPUT_CHANGED(freq_out) = FALSE; } } } else { /** Output does not change!! **/ OUTPUT_CHANGED(freq_out) = FALSE; } } } tmpk8ny_4pz/src/xspice/icm/digital/d_genlut/0000755000175000017500000000000013546075722021230 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/digital/d_genlut/ifspec.ifs0000644000175000017500000000432413546075722023207 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ AUTHORS 25 Aug 2016 Tim Edwards efabless inc., San Jose, CA SUMMARY This file contains the interface specification file for the digital d_genlut code model. LICENSE This software is in the public domain. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_d_genlut Spice_Model_Name: d_genlut Description: "digital n-input x m-output look-up table gate" PORT_TABLE: Port_Name: in out Description: "input" "output" Direction: in out Default_Type: d d Allowed_Types: [d] [d] Vector: yes yes Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: rise_delay fall_delay Description: "rise delay" "fall delay" Data_Type: real real Default_Value: 1.0e-9 1.0e-9 Limits: [1e-12 -] [1e-12 -] Vector: yes yes Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: input_load input_delay Description: "input load value (F)" "input delay" Data_Type: real real Default_Value: 1.0e-12 0.0 Limits: - - Vector: yes yes Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: table_values Description: "lookup table values" Data_Type: string Default_Value: "0" Limits: - Vector: no Vector_Bounds: - Null_Allowed: no STATIC_VAR_TABLE: Static_Var_Name: locdata Description: "lookup table" Data_Type: pointer tmpk8ny_4pz/src/xspice/icm/digital/d_genlut/cfunc.mod0000644000175000017500000003030713546075722023032 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_genlut/cfunc.mod AUTHORS 25 Aug 2016 Tim Edwards efabless inc., San Jose, CA SUMMARY This file contains the functional description of the d_genlut code model. LICENSE This software is in the public domain. INTERFACES FILE ROUTINE CALLED CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include #include #include #include #include /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION cm_d_genlut() AUTHORS 25 Aug 2016 Tim Edwards SUMMARY This function implements the d_genlut code model. INTERFACES FILE ROUTINE CALLED CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_D_LUT ROUTINE ===*/ /************************************************ * The following is the model for the * * digital n-input LUT gate * * * * Created 8/25/16 Tim Edwards * ************************************************/ void cm_d_genlut(ARGS) { int i, /* generic loop counter index */ j, /* lookup index bit value */ k, /* generic loop counter index */ idx, /* lookup index */ ivalid, /* check for valid input */ isize, /* number of input ports */ osize, /* number of output ports */ dsize, /* number of input delay params */ rsize, /* number of output rise delay params */ fsize, /* number of output fall delay params */ lsize, /* number of input load params */ entrylen, /* length of table per output (2^isize) */ tablelen; /* length of table (osize * (2^isize)) */ char *table_string; double maxdelay, /* maximum input-to-output delay */ testdelay; Digital_State_t *in, /* temp storage for input bits */ *in_old; /* previous input for buffers */ Digital_t *out, /* temporary output for buffers */ *out_old, /* previous output for buffers */ *lookup_table; /* lookup table */ /** Retrieve size values and compute table length... **/ isize = PORT_SIZE(in); osize = PORT_SIZE(out); if (PARAM_NULL(input_load)) lsize = 0; else lsize = PARAM_SIZE(input_load); if (PARAM_NULL(input_delay)) dsize = 0; else dsize = PARAM_SIZE(input_delay); if (PARAM_NULL(rise_delay)) rsize = 0; else rsize = PARAM_SIZE(rise_delay); if (PARAM_NULL(fall_delay)) fsize = 0; else fsize = PARAM_SIZE(fall_delay); entrylen = (1 << isize); tablelen = osize * entrylen; /*** Setup required state variables ***/ if (INIT) { /* initial pass */ /* allocate storage for the lookup table */ STATIC_VAR (locdata) = calloc((size_t) tablelen, sizeof(Digital_t)); lookup_table = STATIC_VAR (locdata); /* allocate storage for the outputs */ cm_event_alloc(0, osize * (int) sizeof(Digital_t)); cm_event_alloc(1, isize * (int) sizeof(Digital_State_t)); /* set loading for inputs */ for (i = 0; i < isize; i++) if (i < lsize) LOAD(in[i]) = PARAM(input_load[i]); else if (lsize > 0) LOAD(in[i]) = PARAM(input_load[lsize - 1]); else LOAD(in[i]) = 1.0e-12; /* retrieve storage for the outputs */ out = out_old = (Digital_t *) cm_event_get_ptr(0, 0); in = in_old = (Digital_State_t *) cm_event_get_ptr(1, 0); /* read parameter string into lookup table */ table_string = PARAM(table_values); for (idx = 0; idx < (int)strlen(table_string); idx++) { if (idx == tablelen) // If string is longer than 2^num_inputs, ignore // the extra values at the end break; if (table_string[idx] == '1') { lookup_table[idx].state = ONE; lookup_table[idx].strength = STRONG; } else if (table_string[idx] == '0') { lookup_table[idx].state = ZERO; lookup_table[idx].strength = STRONG; } else if (table_string[idx] == 'z') { lookup_table[idx].state = UNKNOWN; lookup_table[idx].strength = HI_IMPEDANCE; } else { lookup_table[idx].state = UNKNOWN; lookup_table[idx].strength = UNDETERMINED; } } for (; idx < tablelen; idx++) { // If string is shorter than 2^num_inputs, fill // the remainder of the lookup table with UNKNOWN // values. lookup_table[idx].state = UNKNOWN; lookup_table[idx].strength = UNDETERMINED; } } else { /* Retrieve previous values */ /* retrieve lookup table */ lookup_table = STATIC_VAR (locdata); /* retrieve storage for the inputs and outputs */ out = (Digital_t *) cm_event_get_ptr(0, 0); out_old = (Digital_t *) cm_event_get_ptr(0, 1); in = (Digital_State_t *) cm_event_get_ptr(1, 0); in_old = (Digital_State_t *) cm_event_get_ptr(1, 1); } /*** Calculate new output value based on inputs and table ***/ j = 1; idx = 0; ivalid = 1; for (k = 0; k < osize; k++) { out[k].state = UNKNOWN; out[k].strength = UNDETERMINED; } for (i = 0; i < isize; i++) { /* make sure this input isn't floating... */ if (PORT_NULL(in) == FALSE) { /* use inputs to find index into lookup table */ if ((in[i] = INPUT_STATE(in[i])) == UNKNOWN) { ivalid = 0; break; } else if (in[i] == ONE) { idx += j; } j <<= 1; } else { /* at least one port is floating...output is unknown */ ivalid = 0; break; } } if (ivalid) for (k = 0; k < osize; k++) out[k] = lookup_table[idx + (k * entrylen)]; /*** Determine analysis type and output appropriate values ***/ if (ANALYSIS == DC) { /** DC analysis...output w/o delays **/ for (i = 0; i < osize; i++) { OUTPUT_STATE(out[i]) = out[i].state; OUTPUT_STRENGTH(out[i]) = out[i].strength; } } else { /** Transient Analysis **/ /* Determine maximum input-to-output delay */ maxdelay = 0.0; for (i = 0; i < isize; i++) if (in[i] != in_old[i]) { if (i < dsize) testdelay = PARAM(input_delay[i]); else if (dsize > 0) testdelay = PARAM(input_delay[dsize - 1]); else testdelay = 0.0; if (maxdelay < testdelay) maxdelay = testdelay; } for (i = 0; i < osize; i++) { if (out[i].state != out_old[i].state) { /* output value is changing */ OUTPUT_DELAY(out[i]) = maxdelay; switch (out[i].state) { /* fall to zero value */ case ZERO: OUTPUT_STATE(out[i]) = ZERO; if (i < fsize) OUTPUT_DELAY(out[i]) += PARAM(fall_delay[i]); else if (fsize > 0) OUTPUT_DELAY(out[i]) += PARAM(fall_delay[fsize - 1]); else OUTPUT_DELAY(out[i]) += 1.0e-9; OUTPUT_STRENGTH(out[i]) = out[i].strength; break; /* rise to one value */ case ONE: OUTPUT_STATE(out[i]) = ONE; if (i < rsize) OUTPUT_DELAY(out[i]) += PARAM(rise_delay[i]); else if (rsize > 0) OUTPUT_DELAY(out[i]) += PARAM(rise_delay[rsize - 1]); else OUTPUT_DELAY(out[i]) += 1.0e-9; OUTPUT_STRENGTH(out[i]) = out[i].strength; break; /* unknown output */ default: OUTPUT_STATE(out[i]) = out[i].state = UNKNOWN; OUTPUT_STRENGTH(out[i]) = out[i].strength; /* based on old value, add rise or fall delay */ if (out_old[i].state == 0) { /* add rising delay */ if (i < rsize) OUTPUT_DELAY(out[i]) += PARAM(rise_delay[i]); else if (rsize > 0) OUTPUT_DELAY(out[i]) += PARAM(rise_delay[rsize - 1]); else OUTPUT_DELAY(out[i]) += 1.0e-9; } else { /* add falling delay */ if (i < fsize) OUTPUT_DELAY(out[i]) += PARAM(fall_delay[i]); else if (fsize > 0) OUTPUT_DELAY(out[i]) += PARAM(fall_delay[fsize - 1]); else OUTPUT_DELAY(out[i]) += 1.0e-9; } break; } } else if (out[i].strength != out_old[i].strength) { /* output strength is changing */ OUTPUT_STRENGTH(out[i]) = out[i].strength; switch (out[i].strength) { case STRONG: if (out_old[i].state == 0) { /* add falling delay */ if (i < fsize) OUTPUT_DELAY(out[i]) += PARAM(fall_delay[i]); else if (fsize > 0) OUTPUT_DELAY(out[i]) += PARAM(fall_delay[fsize - 1]); else OUTPUT_DELAY(out[i]) += 1.0e-9; } else { /* add rising delay */ if (i < rsize) OUTPUT_DELAY(out[i]) += PARAM(rise_delay[i]); else if (rsize > 0) OUTPUT_DELAY(out[i]) += PARAM(rise_delay[rsize - 1]); else OUTPUT_DELAY(out[i]) += 1.0e-9; } break; default: if (out_old[i].state == 0) { /* add rising delay */ if (i < rsize) OUTPUT_DELAY(out[i]) += PARAM(rise_delay[i]); else if (rsize > 0) OUTPUT_DELAY(out[i]) += PARAM(rise_delay[rsize - 1]); else OUTPUT_DELAY(out[i]) += 1.0e-9; } else { /* add falling delay */ if (i < fsize) OUTPUT_DELAY(out[i]) += PARAM(fall_delay[i]); else if (fsize > 0) OUTPUT_DELAY(out[i]) += PARAM(fall_delay[fsize - 1]); else OUTPUT_DELAY(out[i]) += 1.0e-9; } break; } } else { /* output value not changing */ OUTPUT_CHANGED(out[i]) = FALSE; } } } } tmpk8ny_4pz/src/xspice/icm/digital/d_xor/0000755000175000017500000000000013546075722020542 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/digital/d_xor/ifspec.ifs0000644000175000017500000000353213546075722022521 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the digital d_xor code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_d_xor Spice_Model_Name: d_xor Description: "digital n-input xor gate" PORT_TABLE: Port_Name: in out Description: "input" "output" Direction: in out Default_Type: d d Allowed_Types: [d] [d] Vector: yes no Vector_Bounds: [2 -] - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: rise_delay fall_delay Description: "rise delay" "fall delay" Data_Type: real real Default_Value: 1.0e-9 1.0e-9 Limits: [1e-12 -] [1e-12 -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: input_load Description: "input load value (F)" Data_Type: real Default_Value: 1.0e-12 Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes tmpk8ny_4pz/src/xspice/icm/digital/d_xor/cfunc.mod0000644000175000017500000001543613546075722022352 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_xor/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 18 Jun 1991 Jeffrey P. Murray MODIFICATIONS 7 Aug 1991 Jeffrey P. Murray 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the model-specific routines used to functionally describe the d_xor code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_toggle_bit(); CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ================================================================================ FUNCTION cm_toggle_bit() AUTHORS 27 Sept 1991 Jeffrey P. Murray MODIFICATIONS NONE SUMMARY Alters the state of a passed digital variable to its complement. Thus, a ONE changes to a ZERO. A ZERO changes to a ONE, and an UNKNOWN remains unchanged. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE No returned value. Passed pointer to variable is used to redefine the variable value. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== CM_TOGGLE_BIT ROUTINE ===*/ static void cm_toggle_bit(Digital_State_t *bit) { /* Toggle bit from ONE to ZERO or vice versa, unless the bit value is UNKNOWN. In the latter case, return without changing the bit value. */ if ( UNKNOWN != *bit ) { if ( ONE == *bit ) { *bit = ZERO; } else { *bit = ONE; } } } /*============================================================================== FUNCTION cm_d_xor() AUTHORS 18 Jun 1991 Jeffrey P. Murray MODIFICATIONS 7 Aug 1991 Jeffrey P. Murray 2 Oct 1991 Jeffrey P. Murray SUMMARY This function implements the d_xor code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_toggle_bit(); CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== CM_D_XOR ROUTINE ===*/ /************************************************ * The following is the model for the * * digital XOR gate for the * * ATESSE Version 2.0 system. * * * * Created 6/18/91 J.P.Murray * ************************************************/ void cm_d_xor(ARGS) { int i, /* generic loop counter index */ size; /* number of input & output ports */ Digital_State_t *out, /* temporary output for buffers */ *out_old, /* previous output for buffers */ input; /* temp storage for input bits */ /** Retrieve size value... **/ size = PORT_SIZE(in); /*** Setup required state variables ***/ if(INIT) { /* initial pass */ /* allocate storage for the outputs */ cm_event_alloc(0,sizeof(Digital_State_t)); for (i=0; i ROUTINE ===*/ /*============================================================================== FUNCTION cm_toggle_bit() AUTHORS 27 Sept 1991 Jeffrey P. Murray MODIFICATIONS NONE SUMMARY Alters the state of a passed digital variable to its complement. Thus, a ONE changes to a ZERO. A ZERO changes to a ONE, and an UNKNOWN remains unchanged. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE No returned value. Passed pointer to variable is used to redefine the variable value. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== CM_TOGGLE_BIT ROUTINE ===*/ static void cm_toggle_bit(Digital_State_t *bit) { /* Toggle bit from ONE to ZERO or vice versa, unless the bit value is UNKNOWN. In the latter case, return without changing the bit value. */ if ( UNKNOWN != *bit ) { if ( ONE == *bit ) { *bit = ZERO; } else { *bit = ONE; } } } /*============================================================================== FUNCTION cm_d_tff() AUTHORS 24 Jun 1991 Jeffrey P. Murray MODIFICATIONS 29 Jan 1992 Jeffrey P. Murray SUMMARY This function implements the d_tff code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_toggle_bit(); CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== CM_D_TFF ROUTINE ===*/ /************************************************ * The following is the model for the * * digital t-type flip flop for the * * ATESSE Version 2.0 system. * * * * Created 6/24/91 J.P.Murray * ************************************************/ void cm_d_tff(ARGS) { /*int i;*/ /* generic loop counter index */ Digital_State_t *clk, /* current clk value */ *clk_old, /* previous clk value */ *set, /* current set value for dff */ *set_old, /* previous set value for dff */ *reset, /* current reset value for dff */ *reset_old, /* previous reset value for dff */ *out, /* current output for dff */ *out_old, /* previous output for dff */ toggle_input, /* current toggle input value */ temp; /* temp storage for state values */ /*** Setup required state variables ***/ if(INIT) { /* initial pass */ /* allocate storage */ cm_event_alloc(0,sizeof(Digital_State_t)); cm_event_alloc(1,sizeof(Digital_State_t)); cm_event_alloc(2,sizeof(Digital_State_t)); cm_event_alloc(3,sizeof(Digital_State_t)); /* declare load values */ LOAD(t) = PARAM(t_load); LOAD(clk) = PARAM(clk_load); if ( !PORT_NULL(set) ) { LOAD(set) = PARAM(set_load); } if ( !PORT_NULL(reset) ) { LOAD(reset) = PARAM(reset_load); } /* retrieve storage for the outputs */ clk = clk_old = (Digital_State_t *) cm_event_get_ptr(0,0); set = set_old = (Digital_State_t *) cm_event_get_ptr(1,0); reset = reset_old = (Digital_State_t *) cm_event_get_ptr(2,0); out = out_old = (Digital_State_t *) cm_event_get_ptr(3,0); } else { /* Retrieve previous values */ /* retrieve storage for the outputs */ clk = (Digital_State_t *) cm_event_get_ptr(0,0); clk_old = (Digital_State_t *) cm_event_get_ptr(0,1); set = (Digital_State_t *) cm_event_get_ptr(1,0); set_old = (Digital_State_t *) cm_event_get_ptr(1,1); reset = (Digital_State_t *) cm_event_get_ptr(2,0); reset_old = (Digital_State_t *) cm_event_get_ptr(2,1); out = (Digital_State_t *) cm_event_get_ptr(3,0); out_old = (Digital_State_t *) cm_event_get_ptr(3,1); } /******** load current input values if set or reset are not connected, set to zero... ********/ *clk = INPUT_STATE(clk); if ( PORT_NULL(set) ) { *set = *set_old = ZERO; } else { *set = INPUT_STATE(set); } if ( PORT_NULL(reset) ) { *reset = *reset_old = ZERO; } else { *reset = INPUT_STATE(reset); } /******* Determine analysis type and output appropriate values *******/ if (0.0 == TIME) { /****** DC analysis...output w/o delays ******/ temp = (Digital_State_t) PARAM(ic); /** Modify output if set or reset lines are active **/ if ( (*set==ONE) && (*reset==ZERO) ) temp = ONE; if ( (*set==ZERO) && (*reset==ONE) ) temp = ZERO; if ( (*set==ONE) && (*reset==ONE) ) temp = UNKNOWN; *out = *out_old = temp; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = temp; } cm_toggle_bit(&temp); if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = temp; } } else { /****** Transient Analysis ******/ /***** Find input that has changed... *****/ /**** Test set value for change ****/ if ( *set != *set_old ) { /* either set or set release */ switch ( *set ) { case ONE: if ( ONE != *reset) { if (*out_old != ONE) { /* set will change output */ /* output goes to ONE */ *out = ONE; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = ONE; OUTPUT_DELAY(out) = PARAM(set_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = ZERO; OUTPUT_DELAY(Nout) = PARAM(set_delay); } } else { *out = *out_old; /* output already set */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } else { if (*out_old != UNKNOWN) { /* set will change output */ /* output goes to UNKNOWN */ *out = UNKNOWN; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = UNKNOWN; OUTPUT_DELAY(out) = PARAM(set_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = UNKNOWN; OUTPUT_DELAY(Nout) = PARAM(set_delay); } } else { *out = *out_old; /* output already unknown */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } break; case ZERO: if ( ONE != *reset) { /* output remains at current value */ *out = *out_old; if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } else { if (*out_old != ZERO) { /* set will change output */ /* output returns to reset condition */ *out = ZERO; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = ZERO; OUTPUT_DELAY(out) = PARAM(set_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = ONE; OUTPUT_DELAY(Nout) = PARAM(set_delay); } } else { *out = *out_old; /* output already reset */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } break; case UNKNOWN: if ( ONE == *reset ) { /* output goes to ZERO */ *out = ZERO; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = ZERO; OUTPUT_DELAY(out) = PARAM(set_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = ONE; OUTPUT_DELAY(Nout) = PARAM(set_delay); } } else { *out = *out_old; /* output already unknown */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } break; } } else { /**** Test reset value for change ****/ if ( *reset != *reset_old ) { /* either reset or reset release */ switch ( *reset ) { case ONE: if ( ONE != *set) { if (*out_old != ZERO) { /* reset will change output */ /* output goes to ZERO */ *out = ZERO; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = ZERO; OUTPUT_DELAY(out) = PARAM(reset_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = ONE; OUTPUT_DELAY(Nout) = PARAM(reset_delay); } } else { *out = *out_old; /* output already reset */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } else { if (*out_old != UNKNOWN) { /* reset will change output */ /* output goes to UNKNOWN */ *out = UNKNOWN; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = UNKNOWN; OUTPUT_DELAY(out) = PARAM(reset_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = UNKNOWN; OUTPUT_DELAY(Nout) = PARAM(reset_delay); } } else { *out = *out_old; /* output already unknown */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } break; case ZERO: if ( ONE != *set) { /* output remains at current value */ *out = *out_old; if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } else { if (*out_old != ONE) { /* reset will change output */ /* output returns to set condition */ *out = ONE; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = ONE; OUTPUT_DELAY(out) = PARAM(reset_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = ZERO; OUTPUT_DELAY(Nout) = PARAM(reset_delay); } } else { *out = *out_old; /* output already reset */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } break; case UNKNOWN: if ( ONE == *set ) { /* output goes to ONE */ *out = ONE; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = ONE; OUTPUT_DELAY(out) = PARAM(reset_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = ZERO; OUTPUT_DELAY(Nout) = PARAM(reset_delay); } } else { *out = *out_old; /* output already unknown */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } break; } } else { /**** Test clk value for change ****/ if ( (*clk != *clk_old) && (*reset != ONE) && (*set != ONE) ) { /* clock or clock release */ switch ( *clk ) { case ONE: /* active edge...calculate new data output */ toggle_input = INPUT_STATE(t); switch (toggle_input) { case ONE: temp = *out_old; cm_toggle_bit(&temp); break; case ZERO: temp = *out_old; break; case UNKNOWN: temp = UNKNOWN; break; } if (*out_old != temp) { /* clk will change output */ *out = temp; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = temp; OUTPUT_DELAY(out) = PARAM(clk_delay); } cm_toggle_bit(&temp); if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = temp; OUTPUT_DELAY(Nout) = PARAM(clk_delay); } } else { *out = *out_old; /* output same as before */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } break; case ZERO: case UNKNOWN: /* inactive edge...return previous values */ *out = *out_old; if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } break; } } else { /* data value must have changed... return previous output value. */ *out = *out_old; if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } } /***** Add additional rise or fall delays, if appropriate *****/ if ( *out != *out_old ) { /*** output value is changing ***/ switch ( *out ) { /** fall to zero value **/ case 0: if ( !PORT_NULL(out) ) { OUTPUT_DELAY(out) += PARAM(fall_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_DELAY(Nout) += PARAM(rise_delay); } break; /** rise to one value **/ case 1: if ( !PORT_NULL(out) ) { OUTPUT_DELAY(out) += PARAM(rise_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_DELAY(Nout) += PARAM(fall_delay); } break; /** unknown output **/ default: /* based on old value, add rise or fall delay */ if (0 == *out_old) { /* add rising delay */ if ( !PORT_NULL(out) ) { OUTPUT_DELAY(out) += PARAM(rise_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_DELAY(Nout) += PARAM(fall_delay); } } else { /* add falling delay */ if ( !PORT_NULL(out) ) { OUTPUT_DELAY(out) += PARAM(fall_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_DELAY(Nout) += PARAM(rise_delay); } } break; } } } /*** output strength values ***/ if ( !PORT_NULL(out) ) { OUTPUT_STRENGTH(out) = STRONG; } if ( !PORT_NULL(Nout) ) { OUTPUT_STRENGTH(Nout) = STRONG; } } tmpk8ny_4pz/src/xspice/icm/digital/d_lut/0000755000175000017500000000000013546075722020536 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/digital/d_lut/ifspec.ifs0000644000175000017500000000375713546075722022526 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ AUTHORS 25 Aug 2016 Tim Edwards efabless inc., San Jose, CA SUMMARY This file contains the interface specification file for the digital d_lut code model. LICENSE This software is in the public domain. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_d_lut Spice_Model_Name: d_lut Description: "digital n-input look-up table gate" PORT_TABLE: Port_Name: in out Description: "input" "output" Direction: in out Default_Type: d d Allowed_Types: [d] [d] Vector: yes no Vector_Bounds: [1 -] - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: rise_delay fall_delay Description: "rise delay" "fall delay" Data_Type: real real Default_Value: 1.0e-9 1.0e-9 Limits: [1e-12 -] [1e-12 -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: input_load Description: "input load value (F)" Data_Type: real Default_Value: 1.0e-12 Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: table_values Description: "lookup table values" Data_Type: string Default_Value: "0" Limits: - Vector: no Vector_Bounds: - Null_Allowed: no STATIC_VAR_TABLE: Static_Var_Name: locdata Description: "lookup table" Data_Type: pointer tmpk8ny_4pz/src/xspice/icm/digital/d_lut/cfunc.mod0000644000175000017500000001435313546075722022343 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_lut/cfunc.mod AUTHORS 25 Aug 2016 Tim Edwards efabless inc., San Jose, CA SUMMARY This file contains the functional description of the d_lut code model. LICENSE This software is in the public domain. INTERFACES FILE ROUTINE CALLED CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include #include #include #include #include /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION cm_d_lut() AUTHORS 25 Aug 2016 Tim Edwards SUMMARY This function implements the d_lut code model. INTERFACES FILE ROUTINE CALLED CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_D_LUT ROUTINE ===*/ /************************************************ * The following is the model for the * * digital n-input LUT gate * * * * Created 8/25/16 Tim Edwards * ************************************************/ void cm_d_lut(ARGS) { int i, /* generic loop counter index */ j, /* lookup index bit value */ idx, /* lookup index */ size, /* number of input & output ports */ tablelen; /* length of table (2^size) */ char *table_string; Digital_State_t *out, /* temporary output for buffers */ *out_old, /* previous output for buffers */ input, /* temp storage for input bits */ *lookup_table; /* lookup table */ /** Retrieve size value and compute table length... **/ size = PORT_SIZE(in); tablelen = 1 << size; /*** Setup required state variables ***/ if (INIT) { /* initial pass */ /* allocate storage for the lookup table */ STATIC_VAR (locdata) = calloc((size_t) tablelen, sizeof(Digital_State_t)); lookup_table = STATIC_VAR (locdata); /* allocate storage for the outputs */ cm_event_alloc(0, sizeof(Digital_State_t)); cm_event_alloc(1, size * (int) sizeof(Digital_State_t)); /* set loading for inputs */ for (i = 0; i < size; i++) LOAD(in[i]) = PARAM(input_load); /* retrieve storage for the outputs */ out = out_old = (Digital_State_t *) cm_event_get_ptr(0, 0); /* read parameter string into lookup table */ table_string = PARAM(table_values); for (idx = 0; idx < (int) strlen(table_string); idx++) { if (idx == tablelen) // If string is longer than 2^num_inputs, ignore // the extra values at the end break; if (table_string[idx] == '1') lookup_table[idx] = ONE; else if (table_string[idx] == '0') lookup_table[idx] = ZERO; else lookup_table[idx] = UNKNOWN; } // If string is shorter than 2^num_inputs, fill // the remainder of the lookup table with UNKNOWN values. for (; idx < tablelen; idx++) lookup_table[idx] = UNKNOWN; } else { /* Retrieve previous values */ /* retrieve lookup table */ lookup_table = STATIC_VAR (locdata); /* retrieve storage for the outputs */ out = (Digital_State_t *) cm_event_get_ptr(0, 0); out_old = (Digital_State_t *) cm_event_get_ptr(0, 1); } /*** Calculate new output value based on inputs and table ***/ *out = ZERO; j = 1; idx = 0; for (i = 0; i < size; i++) { /* make sure this input isn't floating... */ if (PORT_NULL(in) == FALSE) { /* use inputs to find index into lookup table */ if ((input = INPUT_STATE(in[i])) == UNKNOWN) { *out = UNKNOWN; break; } else if (input == ONE) { idx += j; } j <<= 1; } else { /* at least one port is floating...output is unknown */ *out = UNKNOWN; break; } } if (*out != UNKNOWN) *out = lookup_table[idx]; /*** Determine analysis type and output appropriate values ***/ if (ANALYSIS == DC) { /** DC analysis...output w/o delays **/ OUTPUT_STATE(out) = *out; } else { /** Transient Analysis **/ if (*out != *out_old) { /* output value is changing */ switch (*out) { /* fall to zero value */ case 0: OUTPUT_STATE(out) = ZERO; OUTPUT_DELAY(out) = PARAM(fall_delay); break; /* rise to one value */ case 1: OUTPUT_STATE(out) = ONE; OUTPUT_DELAY(out) = PARAM(rise_delay); break; /* unknown output */ default: OUTPUT_STATE(out) = *out = UNKNOWN; /* based on old value, add rise or fall delay */ if (0 == *out_old) OUTPUT_DELAY(out) = PARAM(rise_delay); else OUTPUT_DELAY(out) = PARAM(fall_delay); break; } } else { /* output value not changing */ OUTPUT_CHANGED(out) = FALSE; } } OUTPUT_STRENGTH(out) = STRONG; } tmpk8ny_4pz/src/xspice/icm/digital/adc_bridge/0000755000175000017500000000000013546075722021472 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/digital/adc_bridge/ifspec.ifs0000644000175000017500000000435413546075722023454 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 26 Sept 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the hybrid adc_bridge code model. ===============================================================================*/ NAME_TABLE: Spice_Model_Name: adc_bridge C_Function_Name: cm_adc_bridge Description: "analog-to-digital converter node bridge" PORT_TABLE: Port_Name: in out Description: "input" "output" Direction: in out Default_Type: v d Allowed_Types: [v,vd,i,id,vnam] [d] Vector: yes yes Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: in_low Description: "maximum 0-valued analog input" Data_Type: real Default_Value: 0.1 Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: in_high Description: "minimum 1-valued analog input" Data_Type: real Default_Value: 0.9 Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: rise_delay fall_delay Description: "rise delay" "fall delay" Data_Type: real real Default_Value: 1.0e-9 1.0e-9 Limits: [1e-12 -] [1e-12 -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes tmpk8ny_4pz/src/xspice/icm/digital/adc_bridge/cfunc.mod0000644000175000017500000002431113546075722023272 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE adc_bridge/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 6 June 1991 Jeffrey P. Murray MODIFICATIONS 26 Sept 1991 Jeffrey P. Murray SUMMARY This file contains the functional description of the adc_bridge code model. INTERFACES FILE ROUTINE CALLED CM.c void *cm_analog_alloc() void *cm_analog_get_ptr() CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() int cm_event_queue() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION cm_adc_bridge() AUTHORS 6 June 1991 Jeffrey P. Murray MODIFICATIONS 26 Sept 1991 Jeffrey P. Murray SUMMARY This function implements the adc_bridge code model. INTERFACES FILE ROUTINE CALLED CM.c void *cm_analog_alloc() void *cm_analog_get_ptr() CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() int cm_event_queue() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_ADC_BRIDGE ROUTINE ===*/ /************************************************ * The following is the model for the * * analog-to-digital nodebridge for the * * ATESSE Version 2.0 system. * * * * Created 6/6/91 * * Last Modified 7/26/91 J.P.Murray * ************************************************/ void cm_adc_bridge(ARGS) { double in_low, /* analog output value corresponding to '0' digital input */ in_high, /* analog output value corresponding to '1' digital input */ current_time, /* the current time value */ *in, /* base address of array holding all digital output values plus their previous values */ *in_old; /* base address of array holding previous output values */ int i, /* generic loop counter index */ size; /* number of input & output ports */ Digital_State_t *out, /* base address of array holding all input values plus their previous values */ *out_old, /* base address of array holding previous input values */ test; /* temp holding variable for digital states */ /* determine "width" of the node bridge... */ size = PORT_SIZE(in); in_high = PARAM(in_high); in_low = PARAM(in_low); if (INIT) { /*** Test for INIT == TRUE. If so, allocate storage, etc. ***/ /* Allocate storage for inputs */ cm_analog_alloc(0, size * (int) sizeof(double)); /* Allocate storage for outputs */ cm_event_alloc(1, size * (int) sizeof(Digital_State_t)); /* Get analog addresses */ in = in_old = (double *) cm_analog_get_ptr(0,0); /* Get discrete addresses */ out = out_old = (Digital_State_t *) cm_event_get_ptr(1,0); } else { /*** This is not an initialization pass...retrieve storage addresses and calculate new outputs, if required. ***/ /** Retrieve previous values... **/ /* assign discrete addresses */ in = (double *) cm_analog_get_ptr(0,0); in_old = (double *) cm_analog_get_ptr(0,1); /* assign analog addresses */ out = (Digital_State_t *) cm_event_get_ptr(1,0); out_old = (Digital_State_t *) cm_event_get_ptr(1,1); } /* read current input values */ for (i=0; i= in_high) { /* high output required */ test = ONE; if ( test != out_old[i] ) { /* call for event breakpoint... */ current_time = TIME; cm_event_queue(current_time); } else { /* no change since last time */ } } else { /* unknown output required */ if ( UNKNOWN != out_old[i] ) { /* call for event breakpoint... */ current_time = TIME; cm_event_queue(current_time); } else { /* no change since last time */ } } } } break; case EVENT: /** discrete call...lots to do **/ /* loop through all inputs... */ for (i=0; i= in_high) { /* high output required */ out[i] = ONE; if ( out[i] != out_old[i] ) { /* post changed value */ OUTPUT_STATE(out[i]) = ONE; OUTPUT_DELAY(out[i]) = PARAM(rise_delay); } else { /* no change since last time */ OUTPUT_CHANGED(out[i]) = FALSE; } } else { /* unknown output required */ out[i] = UNKNOWN; if ( UNKNOWN != out_old[i] ) { /* post changed value */ OUTPUT_STATE(out[i]) = UNKNOWN; switch (out_old[i]) { case ONE: OUTPUT_DELAY(out[i]) = PARAM(fall_delay); break; case ZERO: OUTPUT_DELAY(out[i]) = PARAM(rise_delay); break; case UNKNOWN: /* should never get here! */ break; } } else { /* no change since last time */ OUTPUT_CHANGED(out[i]) = FALSE; } } } /* regardless, output the strength */ OUTPUT_STRENGTH(out[i]) = STRONG; } break; } } else { /*** TIME == 0.0 => set outputs to input value... ***/ /* loop through all inputs... */ for (i=0; i= in_high) { /* high output required */ OUTPUT_STATE(out[i]) = out[i] = ONE; } else { OUTPUT_STATE(out[i]) = out[i] = UNKNOWN; } OUTPUT_STRENGTH(out[i]) = STRONG; } } } tmpk8ny_4pz/src/xspice/icm/digital/d_dlatch/0000755000175000017500000000000013546075722021171 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/digital/d_dlatch/ifspec.ifs0000644000175000017500000001044213546075722023146 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 30 Sept 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the digital d_latch code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_d_dlatch Spice_Model_Name: d_dlatch Description: "digital d-type latch" PORT_TABLE: Port_Name: data enable Description: "input data" "enable" Direction: in in Default_Type: d d Allowed_Types: [d] [d] Vector: no no Vector_Bounds: - - Null_Allowed: no no PORT_TABLE: Port_Name: set reset Description: "asynch. set" "asynch. reset" Direction: in in Default_Type: d d Allowed_Types: [d] [d] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PORT_TABLE: Port_Name: out Nout Description: "data output" "inverted data output" Direction: out out Default_Type: d d Allowed_Types: [d] [d] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: data_delay Description: "delay from data" Data_Type: real Default_Value: 1.0e-9 Limits: [1e-12 -] Vector: no Vector_Bounds: - Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: enable_delay set_delay Description: "delay from clk" "delay from set" Data_Type: real real Default_Value: 1.0e-9 1.0e-9 Limits: [1e-12 -] [1e-12 -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: reset_delay ic Description: "delay from reset" "output initial state" Data_Type: real int Default_Value: 1.0e-9 0 Limits: [1e-12 -] [0 2] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: rise_delay fall_delay Description: "rise delay" "fall delay" Data_Type: real real Default_Value: 1.0e-9 1.0e-9 Limits: [1e-12 -] [1e-12 -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: data_load enable_load Description: "data load value (F)" "clk load value (F)" Data_Type: real real Default_Value: 1.0e-12 1.0e-12 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: set_load reset_load Description: "set load value (F)" "reset load value (F)" Data_Type: real real Default_Value: 1.0e-12 1.0e-12 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes tmpk8ny_4pz/src/xspice/icm/digital/d_dlatch/cfunc.mod0000644000175000017500000006163313546075722023001 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_dlatch/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 25 Jun 1991 Jeffrey P. Murray MODIFICATIONS 13 Aug 1991 Jeffrey P. Murray 30 Sep 1991 Jeffrey P. Murray 29 Jan 1992 Jeffrey P. Murray SUMMARY This file contains the functional description of the d_latch code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_toggle_bit(); CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION cm_toggle_bit() AUTHORS 30 Sept 1991 Jeffrey P. Murray MODIFICATIONS NONE SUMMARY Alters the state of a passed digital variable to its complement. Thus, a ONE changes to a ZERO. A ZERO changes to a ONE, and an UNKNOWN remains unchanged. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE No returned value. Passed pointer to variable is used to redefine the variable value. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== CM_TOGGLE_BIT ROUTINE ===*/ static void cm_toggle_bit(Digital_State_t *bit) { /* Toggle bit from ONE to ZERO or vice versa, unless the bit value is UNKNOWN. In the latter case, return without changing the bit value. */ if ( UNKNOWN != *bit ) { if ( ONE == *bit ) { *bit = ZERO; } else { *bit = ONE; } } } /*============================================================================== FUNCTION cm_dlatch() AUTHORS 25 Jun 1991 Jeffrey P. Murray MODIFICATIONS 13 Aug 1991 Jeffrey P. Murray 30 Sep 1991 Jeffrey P. Murray 29 Jan 1992 Jeffrey P. Murray SUMMARY This function implements the d_dlatch code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_toggle_bit(); CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_D_DLATCH ROUTINE ===*/ /************************************************ * The following is the model for the * * digital d-type latch for the * * ATESSE Version 2.0 system. * * * * Created 6/25/91 J.P.Murray * ************************************************/ void cm_d_dlatch(ARGS) { /*int i;*/ /* generic loop counter index */ Digital_State_t *data, /* current data value */ *data_old, /* previous data value */ *enable, /* current enable value */ *enable_old, /* previous enable value */ *set, /* current set value for dlatch */ *set_old, /* previous set value for dlatch */ *reset, /* current reset value for dlatch */ *reset_old, /* previous reset value for dlatch */ *out, /* current output for dlatch */ *out_old, /* previous output for dlatch */ temp; /* temp storage for state values */ /*** Setup required state variables ***/ if(INIT) { /* initial pass */ /* allocate storage */ cm_event_alloc(0,sizeof(Digital_State_t)); cm_event_alloc(1,sizeof(Digital_State_t)); cm_event_alloc(2,sizeof(Digital_State_t)); cm_event_alloc(3,sizeof(Digital_State_t)); cm_event_alloc(4,sizeof(Digital_State_t)); /* declare load values */ LOAD(data) = PARAM(data_load); LOAD(enable) = PARAM(enable_load); if ( !PORT_NULL(set) ) { LOAD(set) = PARAM(set_load); } if ( !PORT_NULL(reset) ) { LOAD(reset) = PARAM(reset_load); } /* retrieve storage for the outputs */ data = data_old = (Digital_State_t *) cm_event_get_ptr(0,0); enable = enable_old = (Digital_State_t *) cm_event_get_ptr(1,0); set = set_old = (Digital_State_t *) cm_event_get_ptr(2,0); reset = reset_old =(Digital_State_t *) cm_event_get_ptr(3,0); out = out_old = (Digital_State_t *) cm_event_get_ptr(4,0); } else { /* Retrieve previous values */ /* retrieve storage for the outputs */ data = (Digital_State_t *) cm_event_get_ptr(0,0); data_old = (Digital_State_t *) cm_event_get_ptr(0,1); enable = (Digital_State_t *) cm_event_get_ptr(1,0); enable_old = (Digital_State_t *) cm_event_get_ptr(1,1); set = (Digital_State_t *) cm_event_get_ptr(2,0); set_old = (Digital_State_t *) cm_event_get_ptr(2,1); reset = (Digital_State_t *) cm_event_get_ptr(3,0); reset_old = (Digital_State_t *) cm_event_get_ptr(3,1); out = (Digital_State_t *) cm_event_get_ptr(4,0); out_old = (Digital_State_t *) cm_event_get_ptr(4,1); } /******* load current input values if set or reset are not connected, set to zero... *******/ *data = INPUT_STATE(data); *enable = INPUT_STATE(enable); if ( PORT_NULL(set) ) { *set = *set_old = ZERO; } else { *set = INPUT_STATE(set); } if ( PORT_NULL(reset) ) { *reset = *reset_old = ZERO; } else { *reset = INPUT_STATE(reset); } /******* Determine analysis type and output appropriate values *******/ if (0.0 == TIME) { /****** DC analysis...output w/o delays ******/ temp = (Digital_State_t) PARAM(ic); /** Modify output if set or reset lines are active **/ if (*enable==ONE) temp = *data; if ( (*set==ONE) && (*reset==ZERO) ) temp = ONE; if ( (*set==ZERO) && (*reset==ONE) ) temp = ZERO; if ( (*set==ONE) && (*reset==ONE) ) temp = UNKNOWN; *out = *out_old = temp; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = temp; } if ( !PORT_NULL(Nout) ) { cm_toggle_bit(&temp); OUTPUT_STATE(Nout) = temp; } } else { /****** Transient Analysis ******/ /***** Find input that has changed... *****/ /**** Test set value for change ****/ if ( *set != *set_old ) { /* either set or set release */ switch ( *set ) { case ONE: if ( ONE != *reset) { if (*out_old != ONE) { /* set will change output */ /* output goes to ONE */ *out = ONE; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = ONE; OUTPUT_DELAY(out) = PARAM(set_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = ZERO; OUTPUT_DELAY(Nout) = PARAM(set_delay); } } else { *out = *out_old; /* output already set */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } else { if (*out_old != UNKNOWN) { /* set will change output */ /* output goes to UNKNOWN */ *out = UNKNOWN; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = UNKNOWN; OUTPUT_DELAY(out) = PARAM(set_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = UNKNOWN; OUTPUT_DELAY(Nout) = PARAM(set_delay); } } else { *out = *out_old; /* output already unknown */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } break; case ZERO: case UNKNOWN: if ( ONE != *reset) { if ( ONE == *enable ) { /* active level...save & output current data value */ temp = *data; if (*out_old != temp) { /* enable will change output */ *out = temp; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = temp; OUTPUT_DELAY(out) = PARAM(set_delay); } cm_toggle_bit(&temp); if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = temp; OUTPUT_DELAY(Nout) = PARAM(set_delay); } } else { *out = *out_old; /* output same as before */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } else { /* output remains at current value */ *out = *out_old; if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } else { if (*out_old != ZERO) { /* set will change output */ /* output returns to reset condition */ *out = ZERO; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = ZERO; OUTPUT_DELAY(out) = PARAM(set_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = ONE; OUTPUT_DELAY(Nout) = PARAM(set_delay); } } else { *out = *out_old; /* output already reset */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } break; } } else { /**** Test reset value for change ****/ if ( *reset != *reset_old ) { /* either reset or reset release */ switch ( *reset ) { case ONE: if ( ONE != *set) { if (*out_old != ZERO) { /* reset will change output */ /* output goes to ZERO */ *out = ZERO; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = ZERO; OUTPUT_DELAY(out) = PARAM(reset_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = ONE; OUTPUT_DELAY(Nout) = PARAM(reset_delay); } } else { *out = *out_old; /* output already reset */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } else { if (*out_old != UNKNOWN) { /* reset will change output */ /* output goes to UNKNOWN */ *out = UNKNOWN; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = UNKNOWN; OUTPUT_DELAY(out) = PARAM(reset_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = UNKNOWN; OUTPUT_DELAY(Nout) = PARAM(reset_delay); } } else { *out = *out_old; /* output already unknown */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } break; case ZERO: case UNKNOWN: if ( ONE != *set) { if ( ONE == *enable ) { /* active level...save & output current data value */ temp = *data; if (*out_old != temp) { /* enable will change output */ *out = temp; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = temp; OUTPUT_DELAY(out) = PARAM(reset_delay); } cm_toggle_bit(&temp); if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = temp; OUTPUT_DELAY(Nout) = PARAM(reset_delay); } } else { *out = *out_old; /* output same as before */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } else { /* output remains at current value */ *out = *out_old; if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } else { if (*out_old != ONE) { /* reset will change output */ /* output returns to set condition */ *out = ONE; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = ONE; OUTPUT_DELAY(out) = PARAM(reset_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = ZERO; OUTPUT_DELAY(Nout) = PARAM(reset_delay); } } else { *out = *out_old; /* output already reset */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } break; } } else { /**** Test for enable change... ****/ if ( (*enable != *enable_old) && (*reset != ONE) && (*set != ONE) ) { /* enable or enable release */ switch ( *enable ) { case ONE: /* active edge...save & output current data value */ temp = *data; if (*out_old != temp) { /* enable will change output */ *out = temp; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = temp; OUTPUT_DELAY(out) = PARAM(enable_delay); } cm_toggle_bit(&temp); if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = temp; OUTPUT_DELAY(Nout) = PARAM(enable_delay); } } else { *out = *out_old; /* output same as before */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } break; case ZERO: case UNKNOWN: /* inactive edge...return previous values */ *out = *out_old; if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } break; } } else { /* test data value for change... */ if ( (*data != *data_old) && (*reset != ONE) && (*set != ONE) ) { /* data value has changed... test enable, and if active, update the output...else return w/o change. */ switch ( *enable ) { case ONE: /* active level...save & output current data value */ temp = *data; if (*out_old != temp) { /* enable will change output */ *out = temp; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = temp; OUTPUT_DELAY(out) = PARAM(data_delay); } if ( !PORT_NULL(Nout) ) { cm_toggle_bit(&temp); OUTPUT_STATE(Nout) = temp; OUTPUT_DELAY(Nout) = PARAM(data_delay); } } else { *out = *out_old; /* output same as before */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } break; case ZERO: case UNKNOWN: /* inactive level...return previous values */ *out = *out_old; if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } break; } } else { /* nothing has changed!!! This shouldn't happen! */ *out = *out_old; if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } } } /***** Add additional rise or fall delays, if appropriate *****/ if ( *out != *out_old ) { /*** output value is changing ***/ switch ( *out ) { /** fall to zero value **/ case 0: if ( !PORT_NULL(out) ) { OUTPUT_DELAY(out) += PARAM(fall_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_DELAY(Nout) += PARAM(rise_delay); } break; /** rise to one value **/ case 1: if ( !PORT_NULL(out) ) { OUTPUT_DELAY(out) += PARAM(rise_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_DELAY(Nout) += PARAM(fall_delay); } break; /** unknown output **/ default: /* based on old value, add rise or fall delay */ if (0 == *out_old) { /* add rising delay */ if ( !PORT_NULL(out) ) { OUTPUT_DELAY(out) += PARAM(rise_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_DELAY(Nout) += PARAM(fall_delay); } } else { /* add falling delay */ if ( !PORT_NULL(out) ) { OUTPUT_DELAY(out) += PARAM(fall_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_DELAY(Nout) += PARAM(rise_delay); } } break; } } } /*** output strength values ***/ if ( !PORT_NULL(out) ) { OUTPUT_STRENGTH(out) = STRONG; } if ( !PORT_NULL(Nout) ) { OUTPUT_STRENGTH(Nout) = STRONG; } } tmpk8ny_4pz/src/xspice/icm/digital/d_pullup/0000755000175000017500000000000013546075722021253 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/digital/d_pullup/ifspec.ifs0000644000175000017500000000237713546075722023240 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 19 Nov 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the digital d_pullup code model. ===============================================================================*/ NAME_TABLE: Spice_Model_Name: d_pullup C_Function_Name: cm_d_pullup Description: "digital pullup resistor" PORT_TABLE: Port_Name: out Description: "output" Direction: out Default_Type: d Allowed_Types: [d] Vector: no Vector_Bounds: - Null_Allowed: no PARAMETER_TABLE: Parameter_Name: load Description: "load value (F)" Data_Type: real Default_Value: 1.0e-12 Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes tmpk8ny_4pz/src/xspice/icm/digital/d_pullup/cfunc.mod0000644000175000017500000000467213546075722023063 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_pullup/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 19 Nov 1991 Jeffrey P. Murray MODIFICATIONS 19 Nov 1991 Jeffrey P. Murray SUMMARY This file contains the functional description of the d_pullup code model. INTERFACES FILE ROUTINE CALLED CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION cm_d_pullup() AUTHORS 19 Nov 1991 Jeffrey P. Murray MODIFICATIONS 19 Nov 1991 Jeffrey P. Murray SUMMARY This function implements the d_pullup code model. INTERFACES FILE ROUTINE CALLED CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_D_PULLUP ROUTINE ===*/ /************************************************ * The following is the model for the * * digital pullup resistor for the * * ATESSE Version 2.0 system. * * * * Created 11/19/91 J.P,Murray * ************************************************/ void cm_d_pullup(ARGS) { LOAD(out) = PARAM(load); OUTPUT_STATE(out) = ONE; OUTPUT_STRENGTH(out) = RESISTIVE; } tmpk8ny_4pz/src/xspice/icm/digital/d_nor/0000755000175000017500000000000013546075722020530 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/digital/d_nor/ifspec.ifs0000644000175000017500000000351013546075722022503 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 30 Sept 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the digital d_nor code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_d_nor Spice_Model_Name: d_nor Description: "digital n-input nor gate" PORT_TABLE: Port_Name: in out Description: "input" "output" Direction: in out Default_Type: d d Allowed_Types: [d] [d] Vector: yes no Vector_Bounds: [2 -] - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: rise_delay fall_delay Description: "rise delay" "fall delay" Data_Type: real real Default_Value: 1.0e-9 1.0e-9 Limits: [1e-12 -] [1e-12 -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: input_load Description: "input load value (pF)" Data_Type: real Default_Value: 1.0e-12 Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes tmpk8ny_4pz/src/xspice/icm/digital/d_nor/cfunc.mod0000644000175000017500000001325113546075722022331 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_nor/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 18 Jun 1991 Jeffrey P. Murray MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY This file contains the functional description of the d_nor code model. INTERFACES FILE ROUTINE CALLED CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION cm_d_nor() AUTHORS 18 Jun 1991 Jeffrey P. Murray MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY This function implements the d_nor code model. INTERFACES FILE ROUTINE CALLED CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_D_NOR ROUTINE ===*/ /************************************************ * The following is the model for the * * digital NOR gate for the * * ATESSE Version 2.0 system. * * * * Created 6/18/91 J.P.Murray * ************************************************/ void cm_d_nor(ARGS) { int i, /* generic loop counter index */ size; /* number of input & output ports */ Digital_State_t *out, /* temporary output for buffers */ *out_old, /* previous output for buffers */ input; /* temp storage for input bits */ /** Retrieve size value... **/ size = PORT_SIZE(in); /*** Setup required state variables ***/ if(INIT) { /* initial pass */ /* allocate storage for the outputs */ cm_event_alloc(0,sizeof(Digital_State_t)); for (i=0; i #include #include #include /*=== CONSTANTS ========================*/ #define OK 0 #define FAIL 1 /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ typedef char line_t[82]; /* A SPICE size line. <= 80 characters plus '\n\0' */ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*=============================================================================*/ tmpk8ny_4pz/src/xspice/icm/digital/d_source/cfunc.mod0000644000175000017500000007322213546075722023037 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_source/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 6 June 1991 Jeffrey P. Murray MODIFICATIONS 30 Sept 1991 Jeffrey P. Murray 19 Aug 2012 Holger Vogt SUMMARY This file contains the model-specific routines used to functionally describe the code model. INTERFACES FILE ROUTINE CALLED CMmacros.h cm_message_send(); CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() int cm_event_queue() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include "d_source.h" /* ...contains macros & type defns. for this model. 6/13/90 - JPM */ #include #include #include #include /*=== CONSTANTS ========================*/ #define MAX_STRING_SIZE 1024 /*=== MACROS ===========================*/ #if defined(__MINGW32__) || defined(_MSC_VER) #define DIR_PATHSEP "\\" #else #define DIR_PATHSEP "/" #endif /*=== LOCAL VARIABLES & TYPEDEFS =======*/ typedef struct { int width, /* width of table...equal to size of out port */ depth; /* depth of table...equal to size of "timepoints" array, and to the total number of vectors retrieved from the source.in file. */ double *all_timepoints; /* the storage array for the timepoints, as read from file. This will have size equal to "depth" */ char **all_data; /* the storage array for the output bit representations; as read from file. This will have size equal to width*depth, one short will hold a 12-state bit description. */ } Local_Data_t; /* Type definition for each possible token returned. */ typedef enum token_type_s {CNV_NO_TOK,CNV_STRING_TOK} Cnv_Token_Type_t; /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION *CNVgettok() AUTHORS 13 Jun 1991 Jeffrey P. Murray MODIFICATIONS 8 Aug 1991 Jeffrey P. Murray 30 Sep 1991 Jeffrey P. Murray SUMMARY This function obtains the next token from an input stream. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns a string value representing the next token. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== Static CNVgettok ROUTINE ================*/ /* Get the next token from the input string. The input string pointer is advanced to the following token and the token from the input string is copied to malloced storage and a pointer to that storage is returned. The original input string is undisturbed. */ #include static char *CNVgettok(char **s) { char *buf; /* temporary storage to copy token into */ /*char *temp;*/ /* temporary storage to copy token into */ char *ret_str; /* storage for returned string */ int i; /* allocate space big enough for the whole string */ buf = (char *) malloc(strlen(*s) + 1); /* skip over any white space */ while(isspace_c(**s) || (**s == '=') || (**s == '(') || (**s == ')') || (**s == ',')) (*s)++; /* isolate the next token */ switch(**s) { case '\0': /* End of string found */ if(buf) free(buf); return(NULL); default: /* Otherwise, we are dealing with a */ /* string representation of a number */ /* or a mess o' characters. */ i = 0; while( (**s != '\0') && (! ( isspace_c(**s) || (**s == '=') || (**s == '(') || (**s == ')') || (**s == ',') ) ) ) { buf[i] = **s; i++; (*s)++; } buf[i] = '\0'; break; } /* skip over white space up to next token */ while(isspace_c(**s) || (**s == '=') || (**s == '(') || (**s == ')') || (**s == ',')) (*s)++; /* make a copy using only the space needed by the string length */ ret_str = (char *) malloc(strlen(buf) + 1); ret_str = strcpy(ret_str,buf); if(buf) free(buf); return(ret_str); } /*============================================================================== FUNCTION *CNVget_token() AUTHORS 13 Jun 1991 Jeffrey P. Murray MODIFICATIONS 8 Aug 1991 Jeffrey P. Murray 30 Sep 1991 Jeffrey P. Murray SUMMARY This function obtains the next token from an input stream. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns a string value representing the next token. Uses *CNVget_tok. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== Static CNVget_token ROUTINE =============*/ /* Get the next token from the input string together with its type. The input string pointer is advanced to the following token and the token from the input string is copied to malloced storage and a pointer to that storage is returned. The original input string is undisturbed. */ static char *CNVget_token(char **s, Cnv_Token_Type_t *type) { char *ret_str; /* storage for returned string */ /* get the token from the input line */ ret_str = CNVgettok(s); /* if no next token, return */ if(ret_str == NULL) { *type = CNV_NO_TOK; return(NULL); } /* else, determine and return token type */ switch(*ret_str) { default: *type = CNV_STRING_TOK; break; } return(ret_str); } /*============================================================================== FUNCTION cnv_get_spice_value() AUTHORS ??? Bill Kuhn MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY This function takes as input a string token from a SPICE deck and returns a floating point equivalent value. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns the floating point value in pointer *p_value. Also returns an integer representing successful completion. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== Static CNV_get_spice_value ROUTINE =============*/ /* Function takes as input a string token from a SPICE deck and returns a floating point equivalent value. */ static int cnv_get_spice_value( char *str, /* IN - The value text e.g. 1.2K */ double *p_value ) /* OUT - The numerical value */ { /* the following were "int4" devices - jpm */ size_t len; size_t i; int n_matched; line_t val_str; /*char *suffix;*/ char c = ' '; char c1; double scale_factor; double value; /* Scan the input string looking for an alpha character that is not */ /* 'e' or 'E'. Such a character is assumed to be an engineering */ /* suffix as defined in the Spice 2G.6 user's manual. */ len = strlen(str); if( len > (sizeof(val_str) - 1)) len = sizeof(val_str) - 1; for(i = 0; i < len; i++) { c = str[i]; if( isalpha_c(c) && (c != 'E') && (c != 'e') ) break; else if( isspace_c(c) ) break; else val_str[i] = c; } val_str[i] = '\0'; /* Determine the scale factor */ if( (i >= len) || (! isalpha_c(c)) ) scale_factor = 1.0; else { if(isupper_c(c)) c = tolower_c(c); switch(c) { case 't': scale_factor = 1.0e12; break; case 'g': scale_factor = 1.0e9; break; case 'k': scale_factor = 1.0e3; break; case 'u': scale_factor = 1.0e-6; break; case 'n': scale_factor = 1.0e-9; break; case 'p': scale_factor = 1.0e-12; break; case 'f': scale_factor = 1.0e-15; break; case 'm': i++; if(i >= len) { scale_factor = 1.0e-3; break; } c1 = str[i]; if(! isalpha_c(c1)) { scale_factor = 1.0e-3; break; } if(islower_c(c1)) c1 = toupper_c(c1); if(c1 == 'E') scale_factor = 1.0e6; else if(c1 == 'I') scale_factor = 25.4e-6; else scale_factor = 1.0e-3; break; default: scale_factor = 1.0; } } /* Convert the numeric portion to a float and multiply by the */ /* scale factor. */ n_matched = sscanf(val_str,"%le",&value); if(n_matched < 1) { *p_value = 0.0; return(FAIL); } *p_value = value * scale_factor; return(OK); } /*============================================================================== FUNCTION cm_source_retrieve() AUTHORS 15 Jul 1991 Jeffrey P. Murray MODIFICATIONS 16 Jul 1991 Jeffrey P. Murray 30 Sep 1991 Jeffrey P. Murray 19 Aug 2012 H. Vogt SUMMARY Retrieves a bit value from a char character INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns a Digital_t value. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== Static CM_SOURCE_RETRIEVE ROUTINE ===*/ /************************************************** * The following routine retrieves * * the value passed to it by the out value. * * * * Created 7/15/91 J.P.Murray * **************************************************/ static void cm_source_retrieve(char val, Digital_t *out) { int value = (int)val; switch (value) { case 0: out->state = ZERO; out->strength = STRONG; break; case 1: out->state = ONE; out->strength = STRONG; break; case 2: out->state = UNKNOWN; out->strength = STRONG; break; case 3: out->state = ZERO; out->strength = RESISTIVE; break; case 4: out->state = ONE; out->strength = RESISTIVE; break; case 5: out->state = UNKNOWN; out->strength = RESISTIVE; break; case 6: out->state = ZERO; out->strength = HI_IMPEDANCE; break; case 7: out->state = ONE; out->strength = HI_IMPEDANCE; break; case 8: out->state = UNKNOWN; out->strength = HI_IMPEDANCE; break; case 9: out->state = ZERO; out->strength = UNDETERMINED; break; case 10: out->state = ONE; out->strength = UNDETERMINED; break; case 11: out->state = UNKNOWN; out->strength = UNDETERMINED; break; } } /*============================================================================== FUNCTION cm_get_source_value() AUTHORS 15 Jul 1991 Jeffrey P. Murray MODIFICATIONS 16 Jul 1991 Jeffrey P. Murray 30 Sep 1991 Jeffrey P. Murray 19 Aug 2012 H. Vogt SUMMARY Retrieves a char per bit value from the array "all_data". INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns data via *out pointer. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== Static CM_GET_SOURCE_VALUE ROUTINE ===*/ /************************************************ * The following routine retrieves a bit * * from all_data and stores them in out * * * * Created 8/19/12 H. Vogt * ************************************************/ static void cm_get_source_value(int row, int bit_number, char **all_data, Digital_t *out) { char val; val = all_data[row][bit_number]; cm_source_retrieve(val,out); } /*============================================================================== FUNCTION cm_read_source() AUTHORS 15 Jul 1991 Jeffrey P. Murray MODIFICATIONS 19 Jul 1991 Jeffrey P. Murray 30 Sep 1991 Jeffrey P. Murray 19 Aug 2012 H. Vogt SUMMARY This function reads the source file and stores the results for later output by the model. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns output bits stored in "all_data" array, time values in "all_timepoints" array, return != 0 code if error. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== Static CM_READ_SOURCE ROUTINE ===*/ /************************************************** * The following routine reads the file * * *source, parses the file, and stores * * the values found there into the *bits & * * *timepoints arrays. * * * * Created 7/15/91 J.P.Murray * **************************************************/ static int cm_read_source(FILE *source, Local_Data_t *loc) { int n; /* loop index */ int i, /* indexing variable */ j, /* indexing variable */ num_tokens; /* number of tokens in a given string */ Cnv_Token_Type_t type; /* variable for testing token type returned. */ char temp[MAX_STRING_SIZE], /* holding string variable for testing input from source.in */ *s, /* main string variable */ *base_address, /* storage location for base address of string. */ *token; /* a particular token from the string */ double number; /* holding variable for timepoint values */ char bit_value; /* holding variable for value read from source file which needs to be stored */ i = 0; s = temp; while ( fgets(s,MAX_STRING_SIZE,source) != NULL) { /* Test this string to see if it is whitespace... */ base_address = s; while(isspace_c(*s) || (*s == '*')) (s)++; if ( *s != '\0' ) { /* This is not a blank line, so process... */ s = base_address; if ( '*' != s[0] ) { /* Count up total number of tokens including \0... */ j = 0; type = CNV_STRING_TOK; while ( type != CNV_NO_TOK ) { token = CNVget_token(&s, &type); if (token) free(token); j++; } num_tokens = j; /* If this number is incorrect, return with an error */ if ( (loc->width + 2) != num_tokens) { return 2; } /* reset s to beginning... */ s = base_address; /* set storage space for bits in a row and set them to 0*/ loc->all_data[i] = (char*)malloc(sizeof(char) * (size_t) loc->width); for (n = 0; n < loc->width; n++) loc->all_data[i][n] = 0; /** Retrieve each token, analyze, and **/ /** store the timepoint and bit information **/ for (j=0; j<(loc->width + 1); j++) { token = CNVget_token(&s, &type); if ( 0 == j ) { /* obtain timepoint value... */ /* convert to a floating point number... */ cnv_get_spice_value(token,&number); loc->all_timepoints[i] = number; /* provided this is not the first timepoint to be written... */ if ( 0 != i ) { /* if current timepoint value is not greater than the previous value, then return with an error message... */ if ( loc->all_timepoints[i] <= loc->all_timepoints[i-1] ) { return 3; } } } else { /* obtain each bit value & set bits entry */ /* preset this bit location */ bit_value = 12; if (0 == strcmp(token,"0s")) bit_value = 0; if (0 == strcmp(token,"1s")) bit_value = 1; if (0 == strcmp(token,"Us")) bit_value = 2; if (0 == strcmp(token,"0r")) bit_value = 3; if (0 == strcmp(token,"1r")) bit_value = 4; if (0 == strcmp(token,"Ur")) bit_value = 5; if (0 == strcmp(token,"0z")) bit_value = 6; if (0 == strcmp(token,"1z")) bit_value = 7; if (0 == strcmp(token,"Uz")) bit_value = 8; if (0 == strcmp(token,"0u")) bit_value = 9; if (0 == strcmp(token,"1u")) bit_value = 10; if (0 == strcmp(token,"Uu")) bit_value = 11; /* if this bit was not recognized, return with an error */ if (12 == bit_value) { return 4; } else { /* need to store this value in the all_data[] array */ loc->all_data[i][j-1] = bit_value; } } if (token) free(token); } i++; } s = temp; } } return 0; } /*============================================================================== FUNCTION cm_d_source() AUTHORS 13 Jun 1991 Jeffrey P. Murray MODIFICATIONS 8 Aug 1991 Jeffrey P. Murray 30 Sep 1991 Jeffrey P. Murray 19 Aug 2012 H. Vogt SUMMARY This function implements the d_source code model. INTERFACES FILE ROUTINE CALLED CMmacros.h cm_message_send(); CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() int cm_event_queue() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_D_SOURCE ROUTINE ==============*/ /************************************************ * The following is the new model for * * the digital source * * * * Created 8/19/12 H. Vogt * ************************************************/ void cm_d_source(ARGS) { int i, /* generic loop counter index */ err; /* integer for storage of error status */ /**** the state variables, memory allocation with cm_event_alloc *****/ char *bits, /* the storage array for the output bit representations... this will have size equal to width, since one short will hold a 12-state bit description. */ *bits_old; /* the storage array for old bit values */ int *row_index, /* current index into source tables */ *row_index_old; /* previous index into source tables */ double *timepoint, /* the storage array for the timepoints, a single point */ *timepoint_old; /* the storage for the old timepoint */ /*********************************************************************/ volatile double /* enforce 64 bit precision, (equality comparison) */ test_double; /* test variable for doubles */ FILE *source; /* pointer to the source.in input vector file */ Digital_t out; /* storage for each output bit */ char temp[MAX_STRING_SIZE], /* holding string variable for testing input from source.in */ *s; /* main string variable */ char *loading_error = "\nERROR **\n D_SOURCE: source.in file was not read successfully. \n"; Local_Data_t *loc; /* Pointer to local static data, not to be included in the state vector (save memory!) */ /**** Setup required local and state variables ****/ /* local data will be setup once during INIT and never change again */ if(INIT) { /* initial pass */ /*** open file and count the number of vectors in it ***/ char* filename = PARAM(input_file); source = fopen_with_path( filename, "r"); if (!source) { char *lbuffer, *p; lbuffer = getenv("NGSPICE_INPUT_DIR"); if (lbuffer && *lbuffer) { p = (char*) malloc(strlen(lbuffer) + strlen(DIR_PATHSEP) + strlen(PARAM(input_file)) + 1); sprintf(p, "%s%s%s", lbuffer, DIR_PATHSEP, PARAM(input_file)); source = fopen(p, "r"); free(p); } if (!source) cm_message_printf("cannot open file %s", PARAM(input_file)); } /* increment counter if not a comment until EOF reached... */ i = 0; if (source) { s = temp; while ( fgets(s,MAX_STRING_SIZE,source) != NULL) { if ( '*' != s[0] ) { while(isspace_c(*s) || (*s == '*')) (s)++; if ( *s != '\0' ) i++; } s = temp; } } /*** allocate static storage for *loc ***/ STATIC_VAR (locdata) = calloc (1 , sizeof ( Local_Data_t )); loc = STATIC_VAR (locdata); /*** allocate storage for *index, *bits & *timepoint ***/ cm_event_alloc(0, sizeof(int)); cm_event_alloc(1, PORT_SIZE(out) * (int) sizeof(char)); cm_event_alloc(2, (int) sizeof(double)); /**** Get all pointers again (to avoid realloc problems) ****/ row_index = row_index_old = (int *) cm_event_get_ptr(0,0); bits = bits_old = (char *) cm_event_get_ptr(1,0); timepoint = timepoint_old = (double *) cm_event_get_ptr(2,0); /* Initialize info values... */ *row_index = 0; loc->depth = i; /* Retrieve width of the source */ loc->width = PORT_SIZE(out); /*** allocate storage for **all_data, & *all_timepoints ***/ loc->all_timepoints = (double*)calloc((size_t) i, sizeof(double)); loc->all_data = (char**)calloc((size_t) i, sizeof(char*)); /* Send file pointer and the two array storage pointers */ /* to "cm_read_source()". This will return after */ /* reading the contents of source.in, and if no */ /* errors have occurred, the "*all_data" and "*all_timepoints" */ /* vectors will be loaded and the width and depth */ /* values supplied. */ if (source) { rewind(source); err = cm_read_source(source, loc); } else { err=1; } if (err) { /* problem occurred in load...send error msg. */ cm_message_send(loading_error); switch (err) { case 2: cm_message_send(" d_source word length and number of columns in file differ.\n" ); break; case 3: cm_message_send(" Time values in first column have to increase monotonically.\n"); break; case 4: cm_message_send(" Unknown bit value.\n"); break; default: break; } } /* close source file */ if (source) fclose(source); } else { /*** Retrieve previous values ***/ /** Retrieve info... **/ row_index = (int *) cm_event_get_ptr(0,0); row_index_old = (int *) cm_event_get_ptr(0,1); loc = STATIC_VAR (locdata); /* Set old values to new... */ *row_index = *row_index_old; /** Retrieve bits... **/ bits = (char *) cm_event_get_ptr(1,0); bits_old = (char *) cm_event_get_ptr(1,1); for (i=0; iall_timepoints[*row_index]; if ( 0.0 == test_double && loc->depth > 0 ) { /* Set DC value */ /* reset current breakpoint */ test_double = loc->all_timepoints[*row_index]; cm_event_queue( test_double ); /* Output new values... */ for (i=0; iwidth; i++) { /* retrieve output value */ cm_get_source_value(*row_index, i, loc->all_data, &out); OUTPUT_STATE(out[i]) = out.state; OUTPUT_STRENGTH(out[i]) = out.strength; } /* increment breakpoint */ (*row_index)++; /* set next breakpoint as long as depth has not been exceeded */ if ( *row_index < loc->depth ) { test_double = loc->all_timepoints[*row_index] - 1.0e-10; cm_event_queue( test_double ); } } else { /* Set breakpoint for first time index */ /* set next breakpoint as long as depth has not been exceeded */ if ( *row_index < loc->depth ) { test_double = loc->all_timepoints[*row_index] - 1.0e-10; cm_event_queue( test_double ); } for(i=0; iwidth; i++) { OUTPUT_STATE(out[i]) = UNKNOWN; OUTPUT_STRENGTH(out[i]) = UNDETERMINED; } } } else { /*** Retrieve last index value and branch to appropriate *** *** routine based on the last breakpoint's relationship *** *** to the current time value. ***/ test_double = loc->all_timepoints[*row_index] - 1.0e-10; if ( TIME < test_double ) { /* Breakpoint has not occurred */ /** Output hasn't changed...do nothing this time. **/ for (i=0; iwidth; i++) { OUTPUT_CHANGED(out[i]) = FALSE; } if ( *row_index < loc->depth ) { test_double = loc->all_timepoints[*row_index] - 1.0e-10; cm_event_queue( test_double ); } } else /* Breakpoint has been reached or exceeded */ if ( TIME == test_double ) { /* Breakpoint reached */ /* reset current breakpoint */ test_double = loc->all_timepoints[*row_index] - 1.0e-10; cm_event_queue( test_double ); /* Output new values... */ for (i=0; iwidth; i++) { /* retrieve output value */ cm_get_source_value(*row_index, i , loc->all_data, &out); OUTPUT_STATE(out[i]) = out.state; OUTPUT_DELAY(out[i]) = 1.0e-10; OUTPUT_STRENGTH(out[i]) = out.strength; } /* increment breakpoint */ (*row_index)++; /* set next breakpoint as long as depth has not been exceeded */ if ( *row_index < loc->depth ) { test_double = loc->all_timepoints[*row_index] - 1.0e-10; cm_event_queue( test_double ); } } else { /* Last source file breakpoint has been exceeded... do not change the value of the output */ for (i=0; iwidth; i++) { OUTPUT_CHANGED(out[i]) = FALSE; } } } } tmpk8ny_4pz/src/xspice/icm/digital/d_nand/0000755000175000017500000000000013546075722020652 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/digital/d_nand/ifspec.ifs0000644000175000017500000000353713546075722022636 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 30 Sept 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the digital d_nand code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_d_nand Spice_Model_Name: d_nand Description: "digital n-input nand gate" PORT_TABLE: Port_Name: in out Description: "input" "output" Direction: in out Default_Type: d d Allowed_Types: [d] [d] Vector: yes no Vector_Bounds: [2 -] - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: rise_delay fall_delay Description: "rise delay" "fall delay" Data_Type: real real Default_Value: 1.0e-9 1.0e-9 Limits: [1e-12 -] [1e-12 -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: input_load Description: "input load value (F)" Data_Type: real Default_Value: 1.0e-12 Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes tmpk8ny_4pz/src/xspice/icm/digital/d_nand/cfunc.mod0000644000175000017500000001324113546075722022452 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_nand/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 18 June 1991 Jeffrey P. Murray MODIFICATIONS 30 Sept 1991 Jeffrey P. Murray SUMMARY This file contains the functional description of the d_nand code model. INTERFACES FILE ROUTINE CALLED CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION cm_d_nand() AUTHORS 18 Jun 1991 Jeffrey P. Murray MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY This function implements the d_nand code model. INTERFACES FILE ROUTINE CALLED CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_D_NAND ROUTINE ===*/ /************************************************ * The following is the model for the * * digital NAND gate for the * * ATESSE Version 2.0 system. * * * * Created 6/18/91 J.P.Murray * ************************************************/ void cm_d_nand(ARGS) { int i, /* generic loop counter index */ size; /* number of input & output ports */ Digital_State_t *out, /* temporary output for buffers */ *out_old, /* previous output for buffers */ input; /* temp storage for input bits */ /** Retrieve size value... **/ size = PORT_SIZE(in); /*** Setup required state variables ***/ if(INIT) { /* initial pass */ /* allocate storage for the outputs */ cm_event_alloc(0,sizeof(Digital_State_t)); for (i=0; i #include #include #include /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION cm_d_and() AUTHORS 14 Jun 1991 Jeffrey P. Murray MODIFICATIONS 27 Sep 1991 Jeffrey P. Murray SUMMARY This function implements the d_and code model. INTERFACES FILE ROUTINE CALLED CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_D_AND ROUTINE ===*/ /************************************************ * The following is the model for the * * digital AND gate for the * * ATESSE Version 2.0 system. * * * * Created 6/14/91 J.P.Murray * ************************************************/ void cm_d_and(ARGS) { int i, /* generic loop counter index */ size; /* number of input & output ports */ Digital_State_t *out, /* temporary output for buffers */ *out_old, /* previous output for buffers */ input; /* temp storage for input bits */ /** Retrieve size value... **/ size = PORT_SIZE(in); /*** Setup required state variables ***/ if(INIT) { /* initial pass */ /* allocate storage for the outputs */ cm_event_alloc(0,sizeof(Digital_State_t)); /* set loading for inputs */ for (i=0; i #include #include #include /*=== CONSTANTS =========================================================*/ /**** Error Messages ****/ char *d_osc_allocation_error = "\n**** Error ****\nD_OSC: Error allocating VCO block storage \n"; char *d_osc_array_error = "\n**** Error ****\nD_OSC: Size of control array different than frequency array \n"; char *d_osc_negative_freq_error = "\n**** Error ****\nD_OSC: The extrapolated value for frequency\nhas been found to be negative... \n Lower frequency level has been clamped to 0.0 Hz \n"; /*=== MACROS ============================================================*/ /*=== LOCAL VARIABLES & TYPEDEFS ========================================*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ====================================*/ /*=======================================================================*/ tmpk8ny_4pz/src/xspice/icm/digital/d_osc/cfunc.mod0000644000175000017500000003254013546075722022321 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_osc/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 24 Jul 1991 Jeffrey P. Murray MODIFICATIONS 23 Aug 1991 Jeffrey P. Murray 30 Sep 1991 Jeffrey P. Murray SUMMARY This file contains the model-specific routines used to functionally describe the d_osc code model. INTERFACES FILE ROUTINE CALLED CMmacros.h cm_message_send(); CM.c void *cm_analog_alloc() void *cm_analog_get_ptr() CMevt.c void cm_event_queue() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include "d_osc.h" /* ...contains macros & type defns. for this model. 7/24/91 - JPM */ /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION cm_d_osc() AUTHORS 24 Jul 1991 Jeffrey P. Murray MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY This function implements the d_osc code model. INTERFACES FILE ROUTINE CALLED CMmacros.h cm_message_send(); CM.c void *cm_analog_alloc() void *cm_analog_get_ptr() CMevt.c void cm_event_queue() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_D_OSC ROUTINE ===*/ /************************************************************* * The following is the model for the controlled digital * * oscillator for the ATESSE Version 2.0 system. * * * * Created 7/24/91 J.P.Murray * *************************************************************/ /************************************************************* * * * * * <-----duty_cycle-----> * * I * * I t2 t3 * * I \______________/_____ * * I | | * * I | | | | * * I | | * * I | | | | * * I | | * * I | | | | * * I-----------------*-----* - - - - - - - - - -*--------- * * t1 t4 * * * * * * t2 = t1 + rise_delay * * t4 = t3 + fall_delay * * * * Note that for the digital model, unlike for the * * analog "square" model, t1 and t3 are stored and * * adjusted values, but t2 & t4 are implied by the * * rise and fall delays of the model, but are otherwise * * not stored values. JPM * * * *************************************************************/ #include void cm_d_osc(ARGS) { double *x, /* analog input value control array */ *y, /* frequency array */ cntl_input, /* control input value */ *phase, /* instantaneous phase of the model */ *phase_old, /* previous phase of the model */ *t1, /* pointer to t1 value */ *t3, /* pointer to t3 value */ /*time1,*/ /* variable for calculating new time1 value */ /*time3,*/ /* variable for calculating new time3 value */ freq = 0.0, /* instantaneous frequency value */ dphase, /* fractional part into cycle */ duty_cycle, /* duty_cycle value */ test_double, /* testing variable */ slope; /* slope value...used to extrapolate freq values past endpoints. */ int i, /* generic loop counter index */ cntl_size, /* control array size */ freq_size; /* frequency array size */ /**** Retrieve frequently used parameters... ****/ cntl_size = PARAM_SIZE(cntl_array); freq_size = PARAM_SIZE(freq_array); duty_cycle = PARAM(duty_cycle); /* check and make sure that the control array is the same size as the frequency array */ if(cntl_size != freq_size){ cm_message_send(d_osc_array_error); return; } if (INIT) { /*** Test for INIT == TRUE. If so, allocate storage, etc. ***/ /* Allocate storage for internal variables */ cm_analog_alloc(0, sizeof(double)); cm_analog_alloc(1, sizeof(double)); cm_analog_alloc(2, sizeof(double)); /* assign internal variables */ phase = phase_old = (double *) cm_analog_get_ptr(0,0); t1 = (double *) cm_analog_get_ptr(1,0); t3 = (double *) cm_analog_get_ptr(2,0); } else { /*** This is not an initialization pass...retrieve storage addresses and calculate new outputs, if required. ***/ /** Retrieve previous values... **/ /* assign internal variables */ phase = (double *) cm_analog_get_ptr(0,0); phase_old = (double *) cm_analog_get_ptr(0,1); t1 = (double *) cm_analog_get_ptr(1,0); t3 = (double *) cm_analog_get_ptr(2,0); } switch (CALL_TYPE) { case ANALOG: /** analog call **/ test_double = TIME; if ( AC == ANALYSIS ) { /* this model does not function in AC analysis mode. */ return; } else { if ( 0.0 == TIME ) { /* DC analysis */ /* retrieve & normalize phase value */ *phase = PARAM(init_phase); if ( 0 > *phase ) { *phase = *phase + 360.0; } *phase = *phase / 360.0; /* set phase value to init_phase */ *phase_old = *phase; /* preset time values to harmless values... */ *t1 = -1; *t3 = -1; } /* Allocate storage for breakpoint domain & freq. range values */ x = (double *) calloc((size_t) cntl_size, sizeof(double)); if (!x) { cm_message_send(d_osc_allocation_error); return; } y = (double *) calloc((size_t) freq_size, sizeof(double)); if (!y) { cm_message_send(d_osc_allocation_error); if(x) free(x); return; } /* Retrieve x and y values. */ for (i=0; i= x[cntl_size-1]) { slope = (y[cntl_size-1] - y[cntl_size-2]) / (x[cntl_size-1] - x[cntl_size-2]); freq = y[cntl_size-1] + (cntl_input - x[cntl_size-1]) * slope; } else { /*** cntl_input within bounds of end midpoints... must determine position progressively & then calculate required output. ***/ for (i=0; i= x[i]) ) { /* Interpolate to the correct frequency value */ freq = ( (cntl_input - x[i]) / (x[i+1] - x[i]) ) * ( y[i+1]-y[i] ) + y[i]; } } } /*** If freq < 0.0, clamp to 1e-16 & issue a warning ***/ if ( 0.0 > freq ) { freq = 1.0e-16; cm_message_send(d_osc_negative_freq_error); } /* calculate the instantaneous phase */ *phase = *phase_old + freq * (TIME - T(1)); /* dphase is the percent into the cycle for the period */ dphase = *phase_old - floor(*phase_old); /* Calculate the time variables and the output value for this iteration */ if((*t1 <= TIME) && (TIME <= *t3)) { /* output high */ *t3 = T(1) + (1 - dphase)/freq; if(TIME < *t3) { cm_event_queue(*t3); } } else if((*t3 <= TIME) && (TIME <= *t1)) { /* output low */ if(dphase > (1.0 - duty_cycle) ) { dphase = dphase - 1.0; } *t1 = T(1) + ( (1.0 - duty_cycle) - dphase)/freq; if(TIME < *t1) { cm_event_queue(*t1); } } else { if(dphase > (1.0 - duty_cycle) ) { dphase = dphase - 1.0; } *t1 = T(1) + ( (1.0 - duty_cycle) - dphase )/freq; if((TIME < *t1) || (T(1) == 0)) { cm_event_queue(*t1); } *t3 = T(1) + (1 - dphase)/freq; } if(x) free(x); if(y) free(y); } break; case EVENT: /** discrete call...lots to do **/ test_double = TIME; if ( 0.0 == TIME ) { /* DC analysis...preset values, as appropriate.... */ /* retrieve & normalize phase value */ *phase = PARAM(init_phase); if ( 0 > *phase ) { *phase = *phase + 360.0; } *phase = *phase / 360.0; /* set phase value to init_phase */ *phase_old = *phase; /* preset time values to harmless values... */ *t1 = -1; *t3 = -1; } /* Calculate the time variables and the output value for this iteration */ /* Output is always set to STRONG */ OUTPUT_STRENGTH(out) = STRONG; if( *t1 == TIME ) { /* rising edge */ OUTPUT_STATE(out) = ONE; OUTPUT_DELAY(out) = PARAM(rise_delay); } else { if ( *t3 == TIME ) { /* falling edge */ OUTPUT_STATE(out) = ZERO; OUTPUT_DELAY(out) = PARAM(fall_delay); } else { /* no change in output */ if ( TIME != 0.0 ) { OUTPUT_CHANGED(out) = FALSE; } if ( (*t1 < TIME) && (TIME < *t3) ) { OUTPUT_STATE(out) = ONE; } else { OUTPUT_STATE(out) = ZERO; } } } break; } } tmpk8ny_4pz/src/xspice/icm/digital/d_ram/0000755000175000017500000000000013546075722020511 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/digital/d_ram/ifspec.ifs0000644000175000017500000000741013546075722022467 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 30 Sept 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the digital d_ram code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_d_ram Spice_Model_Name: d_ram Description: "digital random-access memory" PORT_TABLE: Port_Name: data_in data_out Description: "data input line(s)" "data output line(s)" Direction: in out Default_Type: d d Allowed_Types: [d] [d] Vector: yes yes Vector_Bounds: [1 -] [1 -] Null_Allowed: no no PORT_TABLE: Port_Name: address write_en Description: "address input line(s)" "write enable" Direction: in in Default_Type: d d Allowed_Types: [d] [d] Vector: yes no Vector_Bounds: [1 -] - Null_Allowed: no no PORT_TABLE: Port_Name: select Description: "chip select line(s)" Direction: in Default_Type: d Allowed_Types: [d] Vector: yes Vector_Bounds: [1 16] Null_Allowed: no PARAMETER_TABLE: Parameter_Name: select_value Description: "decimal active value for select line comparison" Data_Type: int Default_Value: 1 Limits: [0 32767] Vector: no Vector_Bounds: - Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: ic Description: "initial bit state @ DC" Data_Type: int Default_Value: 2 Limits: [0 2] Vector: no Vector_Bounds: - Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: read_delay Description: "read delay from address/select/write_en active" Data_Type: real Default_Value: 100.0e-9 Limits: [1e-12 -] Vector: no Vector_Bounds: - Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: data_load address_load Description: "data_in load value (F)" "address line load value (F)" Data_Type: real real Default_Value: 1.0e-12 1.0e-12 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: select_load enable_load Description: "select load value (F)" "enable line load value (F)" Data_Type: real real Default_Value: 1.0e-12 1.0e-12 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes tmpk8ny_4pz/src/xspice/icm/digital/d_ram/cfunc.mod0000644000175000017500000006733413546075722022325 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_ram/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 23 Aug 1991 Jeffrey P. Murray MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY This file contains the model-specific routines used to functionally describe the d_ram code model. INTERFACES FILE ROUTINE CALLED CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include #include #include #include /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION cm_address_to_decimal() AUTHORS 27 Jun 1991 Jeffrey P. Murray MODIFICATIONS 8 Jul 1991 Jeffrey P. Murray 30 Sep 1991 Jeffrey P. Murray SUMMARY Calculates a decimal value from binary values passed. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE A pointer containing the total (*total). GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_ADDRESS_TO_DECIMAL ROUTINE ===*/ /************************************************ * The following routine calculates a * * decimal value equivalent to the binary * * value passed to it on address[i] bits. * * The determined value is written to the * * integer *total. * * * * Created 6/27/91 J.P.Murray * ************************************************/ static int cm_address_to_decimal(Digital_State_t *address,int address_size,int *total) { int i, /* indexing variable */ multiplier, /* binary multiplier value */ err; /* error value: 1 => output is unknown 0 => output is valid */ err = 0; *total = 0; multiplier = 1; for (i=0; i> (ram_offset * 2)); switch (value) { case 0: return ZERO; case 1: return ONE; default: return UNKNOWN; } } /*============================================================================== FUNCTION cm_initialize_ram() AUTHORS 9 Jul 1991 Jeffrey P. Murray MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY This function stores digital data into specific short integer array locations. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns updated ram[] value. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_INITIALIZE_RAM ROUTINE ===*/ /************************************************ * The following routine stores two-bit * * data into short integer array "ram". The * * integers are assumed to be at least two * * bytes each, so each will hold eight two- * * bit values. * * * * Created 7/9/91 J.P.Murray * ************************************************/ static void cm_initialize_ram(Digital_State_t out,int word_width,int bit_number, int word_number,short *ram) { int /*err,*/ /* error index value */ int1, /* temp storage variable */ /*int2,*/ /* temp storage variable */ ram_index, /* ram base address at which word bits will be found */ ram_offset; /* offset from ram base address at which bit[0] of the required word can be found */ short base; /* variable to hold current base integer for comparison purposes. */ /* obtain offset value from word_number, word_width & bit_number */ int1 = word_number * word_width + bit_number; ram_index = int1 >> 3; ram_offset = int1 & 7; /* retrieve entire base_address ram integer... */ base = ram[ram_index]; /* for each offset, mask off the bits and store values */ cm_mask_and_store(&base,ram_offset,out); /* store modified base value */ ram[ram_index] = base; } /*============================================================================== FUNCTION cm_store_ram_value() AUTHORS 27 Jun 1991 Jeffrey P. Murray MODIFICATIONS 9 Jul 1991 Jeffrey P. Murray 30 Sep 1991 Jeffrey P. Murray SUMMARY This function stores digital data into specific short integer array locations, after decoding address bits passed to it (using cm_address_to_decimal routine). INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns updated ram[] value via *ram pointer. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_STORE_RAM_VALUE ROUTINE ===*/ /************************************************ * The following routine stores two-bit * * data into short integer array "ram". The * * integers are assumed to be at least two * * bytes each, so each will hold eight two- * * bit values. A sister routine, cm_get_ * * ram_value is used to retrieve the two- * * bit values from the "ram" array. * * * * Created 6/27/91 J.P.Murray * ************************************************/ static void cm_store_ram_value(Digital_State_t out,int word_width,int bit_number, Digital_State_t *address,int address_size, short *ram) { int err, /* error index value */ int1, /* temp storage variable */ word_number, /* particular word of interest...this value is derived from the passed address bits */ ram_index, /* ram base address at which word bits will be found */ ram_offset; /* offset from ram base address at which bit[0] of the required word can be found */ short base; /* variable to hold current base integer for comparison purposes. */ /** first obtain word_number from *address values **/ err = cm_address_to_decimal(address,address_size,&word_number); if ( FALSE == err ) { /** valid data was returned...store value **/ /* obtain offset value from word_number, word_width & bit_number */ int1 = word_number * word_width + bit_number; ram_index = int1 >> 3; ram_offset = int1 & 7; /* retrieve entire base_address ram integer... */ base = ram[ram_index]; /* for each offset, mask off the bits and store values */ cm_mask_and_store(&base,ram_offset,out); /* store modified base value */ ram[ram_index] = base; } } /*============================================================================== FUNCTION cm_get_ram_value() AUTHORS 27 Jun 1991 Jeffrey P. Murray MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY This function retrieves digital data from specific short integer array locations, after decoding address bits passed to it (using cm_address_to_decimal routine). This is a sister routine to cm_store_ram_value. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns output value via *out pointer. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_GET_RAM_VALUE ROUTINE ===*/ /************************************************ * The following routine retrieves two-bit * * data from short integer array "ram". The * * integers are assumed to be at least two * * bytes each, so each will hold eight two- * * bit values. A sister routine, cm_store_ * * ram_value is used to store the two-bit * * values into the "ram" array. * * * * Created 6/27/91 J.P.Murray * ************************************************/ static Digital_State_t cm_get_ram_value(int word_width,int bit_number,Digital_State_t *address, int address_size,short *ram) { int err, /* error index value */ int1, /* temp storage variable */ word_number, /* particular word of interest...this value is derived from the passed address bits */ ram_index, /* ram base address at which word bits will be found */ ram_offset; /* offset from ram base address at which bit[0] of the required word can be found */ short base; /* variable to hold current base integer for comparison purposes. */ /** first obtain word_number from *address values **/ err = cm_address_to_decimal(address,address_size,&word_number); if ( FALSE == err ) { /** valid data was returned **/ /* obtain offset value from word_number, word_width & bit_number */ int1 = word_number * word_width + bit_number; ram_index = int1 >> 3; ram_offset = int1 & 7; /* retrieve entire base_address ram integer... */ base = ram[ram_index]; /* for each offset, mask off the bits and determine values */ return cm_mask_and_retrieve(base,ram_offset); } else { /** incorrect data returned...return UNKNOWN values **/ return UNKNOWN; } } /*============================================================================== FUNCTION cm_d_ram() AUTHORS 26 Jun 1991 Jeffrey P. Murray MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY This function implements the d_ram code model. INTERFACES FILE ROUTINE CALLED CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_D_RAM ROUTINE ===*/ /************************************************ * The following is the model for the * * digital M x N random access memory for the * * ATESSE Version 2.0 system. * * * * Created 6/26/91 J.P.Murray * ************************************************/ void cm_d_ram(ARGS) { int i, /* generic loop counter index */ j, /* generic loop counter index */ ram_size, /* total number of words in ram */ num_of_ram_ints, /* actual number of "short" integer values necessary to store all of the ram_size integers */ address_size, /* total number of address lines */ select_size, /* total number of address lines */ select_value, /* decimal value compared with select inputs to confirm that the ram has indeed been activated */ word_width, /* width of each word in bits */ int_test, /* integer test variable */ address_changed, /* TRUE if address is different from that on the previous call...FALSE otherwise */ address_unknown; /* TRUE if currently-read address has at least one line which is an unknown value. */ short int *ram, /* storage words...note that the total ram data will be stored in the two-bytes-per-Digital_State_t...since we require 2 bits per ram bit (for ZERO, ONE & UNKNOWN), we will store 8 ram bits per Digital_State_t location */ *ram_old; /* previous values of storage words */ Digital_State_t *address, /* address line values */ *address_old, /* previous address line values */ *write_en, /* write_en value */ *write_en_old, /* previous write_en value */ *select, /* current selected state of ram... note that this is derived from all of the select lines into the ram */ *select_old, /* previous selected state of ram */ d_test, /* digital debugging variable */ out; /* current output bit */ /** retrieve device size values...& other parameters **/ address_size = PORT_SIZE(address); /* calculate ram word size from address size */ ram_size = 1; for (i=0; i>1; } /******* Determine analysis type and output appropriate values *******/ if (0.0 == TIME) { /****** DC analysis...output w/o delays ******/ /** initialize ram to ic value **/ out = (Digital_State_t) PARAM(ic); for (i=0; i/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 25 Jun 1991 Jeffrey P. Murray MODIFICATIONS 13 Aug 1991 Jeffrey P. Murray 30 Sep 1991 Jeffrey P. Murray 29 Jan 1992 Jeffrey P. Murray SUMMARY This file contains the model-specific routines used to functionally describe the code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_toggle_bit(); CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION cm_toggle_bit() AUTHORS 27 Sept 1991 Jeffrey P. Murray MODIFICATIONS NONE SUMMARY Alters the state of a passed digital variable to its complement. Thus, a ONE changes to a ZERO. A ZERO changes to a ONE, and an UNKNOWN remains unchanged. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE No returned value. Passed pointer to variable is used to redefine the variable value. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== CM_TOGGLE_BIT ROUTINE ===*/ static void cm_toggle_bit(Digital_State_t *bit) { /* Toggle bit from ONE to ZERO or vice versa, unless the bit value is UNKNOWN. In the latter case, return without changing the bit value. */ if ( UNKNOWN != *bit ) { if ( ONE == *bit ) { *bit = ZERO; } else { *bit = ONE; } } } /*============================================================================== FUNCTION cm_eval_sr_result AUTHORS 30 Sept 1991 Jeffrey P. Murray MODIFICATIONS NONE SUMMARY Evaluates the S and R input states, plus the last state of the latch, and returns the expected output value. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_toggle_bit(); RETURNED VALUE A Digital_State_t. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_EVAL_SR_RESULT ROUTINE ===*/ static Digital_State_t cm_eval_sr_result(Digital_State_t s_input, Digital_State_t r_input, Digital_State_t old_output) { Digital_State_t output = ZERO; switch (s_input) { case ZERO: switch (r_input) { case ZERO: output = old_output; break; case ONE: output = ZERO; break; case UNKNOWN: output = UNKNOWN; break; } break; case ONE: switch (r_input) { case ZERO: output = ONE; break; case ONE: output = UNKNOWN; break; case UNKNOWN: output = UNKNOWN; break; } break; case UNKNOWN: output = UNKNOWN; break; } return output; } /*============================================================================== FUNCTION cm_d_srlatch() AUTHORS 25 Jun 1991 Jeffrey P. Murray MODIFICATIONS 13 Aug 1991 Jeffrey P. Murray 30 Sep 1991 Jeffrey P. Murray 29 Jan 1992 Jeffrey P. Murray SUMMARY This function implements the d_srlatch code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_toggle_bit(); CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_D_SRLATCH ROUTINE ===*/ /************************************************ * The following is the model for the * * digital sr-type latch for the * * ATESSE Version 2.0 system. * * * * Created 6/25/91 J.P.Murray * ************************************************/ void cm_d_srlatch(ARGS) { /*int i;*/ /* generic loop counter index */ Digital_State_t *s, /* current s-input value */ *s_old, /* previous s-input value */ *r, /* current r-input value */ *r_old, /* previous r-input value */ *enable, /* current enable value */ *enable_old, /* previous enable value */ *set, /* current set value for srlatch */ *set_old, /* previous set value for srlatch */ *reset, /* current reset value for srlatch */ *reset_old, /* previous reset value for srlatch */ *out, /* current output for srlatch */ *out_old, /* previous output for srlatch */ temp; /* temp storage for state values */ /*** Setup required state variables ***/ if(INIT) { /* initial pass */ /* allocate storage */ cm_event_alloc(0,sizeof(Digital_State_t)); cm_event_alloc(1,sizeof(Digital_State_t)); cm_event_alloc(2,sizeof(Digital_State_t)); cm_event_alloc(3,sizeof(Digital_State_t)); cm_event_alloc(4,sizeof(Digital_State_t)); cm_event_alloc(5,sizeof(Digital_State_t)); /* declare load values */ LOAD(s) = PARAM(sr_load); LOAD(r) = PARAM(sr_load); LOAD(enable) = PARAM(enable_load); if ( !PORT_NULL(set) ) { LOAD(set) = PARAM(set_load); } if ( !PORT_NULL(reset) ) { LOAD(reset) = PARAM(reset_load); } /* retrieve storage for the outputs */ s = s_old = (Digital_State_t *) cm_event_get_ptr(0,0); r = r_old = (Digital_State_t *) cm_event_get_ptr(1,0); enable = enable_old = (Digital_State_t *) cm_event_get_ptr(2,0); set = set_old = (Digital_State_t *) cm_event_get_ptr(3,0); reset = reset_old = (Digital_State_t *) cm_event_get_ptr(4,0); out = out_old = (Digital_State_t *) cm_event_get_ptr(5,0); } else { /* Retrieve previous values */ /* retrieve storage for the outputs */ s = (Digital_State_t *) cm_event_get_ptr(0,0); s_old = (Digital_State_t *) cm_event_get_ptr(0,1); r = (Digital_State_t *) cm_event_get_ptr(1,0); r_old = (Digital_State_t *) cm_event_get_ptr(1,1); enable = (Digital_State_t *) cm_event_get_ptr(2,0); enable_old = (Digital_State_t *) cm_event_get_ptr(2,1); set = (Digital_State_t *) cm_event_get_ptr(3,0); set_old = (Digital_State_t *) cm_event_get_ptr(3,1); reset = (Digital_State_t *) cm_event_get_ptr(4,0); reset_old = (Digital_State_t *) cm_event_get_ptr(4,1); out = (Digital_State_t *) cm_event_get_ptr(5,0); out_old = (Digital_State_t *) cm_event_get_ptr(5,1); } /******* load current input values if set or reset are not connected, set to zero... *******/ *s = INPUT_STATE(s); *r = INPUT_STATE(r); *enable = INPUT_STATE(enable); if ( PORT_NULL(set) ) { *set = *set_old = ZERO; } else { *set = INPUT_STATE(set); } if ( PORT_NULL(reset) ) { *reset = *reset_old = ZERO; } else { *reset = INPUT_STATE(reset); } /******* Determine analysis type and output appropriate values *******/ if (0.0 == TIME) { /****** DC analysis...output w/o delays ******/ temp = (Digital_State_t) PARAM(ic); /** Modify output if set or reset lines are active **/ if ( (*enable==ONE) && (*s==ONE) && (*r==ZERO) ) temp = ONE; if ( (*enable==ONE) && (*s==ZERO) && (*r==ONE) ) temp = ZERO; if ( (*set==ONE) && (*reset==ZERO) ) temp = ONE; if ( (*set==ZERO) && (*reset==ONE) ) temp = ZERO; if ( (*set==ONE) && (*reset==ONE) ) temp = UNKNOWN; *out = *out_old = temp; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = temp; } if ( !PORT_NULL(Nout) ) { cm_toggle_bit(&temp); OUTPUT_STATE(Nout) = temp; } } else { /****** Transient Analysis ******/ /***** Find input that has changed... *****/ /**** Test set value for change ****/ if ( *set != *set_old ) { /* either set or set release */ switch ( *set ) { case ONE: if ( ONE != *reset) { if (*out_old != ONE) { /* set will change output */ *out = ONE; /* output goes to ONE */ if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = ONE; OUTPUT_DELAY(out) = PARAM(set_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = ZERO; OUTPUT_DELAY(Nout) = PARAM(set_delay); } } else { *out = *out_old; /* output already set */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } else { if (*out_old != UNKNOWN) { /* set will change output */ *out = UNKNOWN; /* output goes to UNKNOWN */ if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = UNKNOWN; OUTPUT_DELAY(out) = PARAM(set_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = UNKNOWN; OUTPUT_DELAY(Nout) = PARAM(set_delay); } } else { *out = *out_old; /* output already unknown */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } break; case ZERO: case UNKNOWN: if ( ONE != *reset) { if ( ONE == *enable ) { /* active level...save & output current value */ temp = cm_eval_sr_result(*s,*r,*out_old); if (*out_old != temp) { /* enable will change output */ *out = temp; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = temp; OUTPUT_DELAY(out) = PARAM(set_delay); } if ( !PORT_NULL(Nout) ) { cm_toggle_bit(&temp); OUTPUT_STATE(Nout) = temp; OUTPUT_DELAY(Nout) = PARAM(set_delay); } } else { *out = *out_old; /* output same as before */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } else { /* output remains at current value */ *out = *out_old; if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } else { if (*out_old != ZERO) { /* set will change output */ /* output returns to reset condition */ *out = ZERO; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = ZERO; OUTPUT_DELAY(out) = PARAM(set_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = ONE; OUTPUT_DELAY(Nout) = PARAM(set_delay); } } else { *out = *out_old; /* output already reset */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } break; } } else { /**** Test reset value for change ****/ if ( *reset != *reset_old ) { /* either reset or reset release */ switch ( *reset ) { case ONE: if ( ONE != *set) { if (*out_old != ZERO) { /* reset will change output */ /* output goes to ZERO */ *out = ZERO; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = ZERO; OUTPUT_DELAY(out) = PARAM(reset_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = ONE; OUTPUT_DELAY(Nout) = PARAM(reset_delay); } } else { *out = *out_old; /* output already reset */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } else { if (*out_old != UNKNOWN) { /* reset will change output */ /* output goes to UNKNOWN */ *out = UNKNOWN; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = UNKNOWN; OUTPUT_DELAY(out) = PARAM(reset_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = UNKNOWN; OUTPUT_DELAY(Nout) = PARAM(reset_delay); } } else { *out = *out_old; /* output already unknown */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } break; case ZERO: case UNKNOWN: if ( ONE != *set) { if ( ONE == *enable ) { /* active level...save & output current value */ temp = cm_eval_sr_result(*s,*r,*out_old); if (*out_old != temp) { /* enable will change output */ *out = temp; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = temp; OUTPUT_DELAY(out) = PARAM(reset_delay); } if ( !PORT_NULL(Nout) ) { cm_toggle_bit(&temp); OUTPUT_STATE(Nout) = temp; OUTPUT_DELAY(Nout) = PARAM(reset_delay); } } else { *out = *out_old; /* output same as before */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } else { /* output remains at current value */ *out = *out_old; if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } else { if (*out_old != ONE) { /* reset will change output */ /* output returns to set condition */ *out = ONE; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = ONE; OUTPUT_DELAY(out) = PARAM(reset_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_STATE(Nout) = ZERO; OUTPUT_DELAY(Nout) = PARAM(reset_delay); } } else { *out = *out_old; /* output already reset */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } break; } } else { /**** Test for enable change... ****/ if ( (*enable != *enable_old) && (*reset != ONE) && (*set != ONE) ) { /* enable or enable release */ switch ( *enable ) { case ONE: /* active edge...save & output current data value */ temp = cm_eval_sr_result(*s,*r,*out_old); if (*out_old != temp) { /* enable will change output */ *out = temp; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = temp; OUTPUT_DELAY(out) = PARAM(enable_delay); } if ( !PORT_NULL(Nout) ) { cm_toggle_bit(&temp); OUTPUT_STATE(Nout) = temp; OUTPUT_DELAY(Nout) = PARAM(enable_delay); } } else { *out = *out_old; /* output same as before */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } break; case ZERO: case UNKNOWN: /* inactive edge...return previous values */ *out = *out_old; if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } break; } } else { /* test data value for change... */ if ( ((*s != *s_old) || (*r != *r_old)) && (*reset != ONE) && (*set != ONE) ) { /* input values have changed... test enable, and if active, update the output...else return w/o change. */ switch ( *enable ) { case ONE: /* active level...save & output current data value */ temp = cm_eval_sr_result(*s,*r,*out_old); if (*out_old != temp) { /* enable will change output */ *out = temp; if ( !PORT_NULL(out) ) { OUTPUT_STATE(out) = temp; OUTPUT_DELAY(out) = PARAM(sr_delay); } if ( !PORT_NULL(Nout) ) { cm_toggle_bit(&temp); OUTPUT_STATE(Nout) = temp; OUTPUT_DELAY(Nout) = PARAM(sr_delay); } } else { *out = *out_old; /* output same as before */ if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } break; case ZERO: case UNKNOWN: /* inactive level...return previous values */ *out = *out_old; if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } break; } } else { /* nothing has changed!!! This shouldn't happen! */ *out = *out_old; if ( !PORT_NULL(out) ) { OUTPUT_CHANGED(out) = FALSE; } if ( !PORT_NULL(Nout) ) { OUTPUT_CHANGED(Nout) = FALSE; } } } } } /***** Add additional rise or fall delays, if appropriate *****/ if ( *out != *out_old ) { /*** output value is changing ***/ switch ( *out ) { /** fall to zero value **/ case 0: if ( !PORT_NULL(out) ) { OUTPUT_DELAY(out) += PARAM(fall_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_DELAY(Nout) += PARAM(rise_delay); } break; /** rise to one value **/ case 1: if ( !PORT_NULL(out) ) { OUTPUT_DELAY(out) += PARAM(rise_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_DELAY(Nout) += PARAM(fall_delay); } break; /** unknown output **/ default: /* based on old value, add rise or fall delay */ if (0 == *out_old) { /* add rising delay */ if ( !PORT_NULL(out) ) { OUTPUT_DELAY(out) += PARAM(rise_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_DELAY(Nout) += PARAM(fall_delay); } } else { /* add falling delay */ if ( !PORT_NULL(out) ) { OUTPUT_DELAY(out) += PARAM(fall_delay); } if ( !PORT_NULL(Nout) ) { OUTPUT_DELAY(Nout) += PARAM(rise_delay); } } break; } } } /*** output strength values ***/ if ( !PORT_NULL(out) ) { OUTPUT_STRENGTH(out) = STRONG; } if ( !PORT_NULL(Nout) ) { OUTPUT_STRENGTH(Nout) = STRONG; } } tmpk8ny_4pz/src/xspice/icm/digital/d_xnor/0000755000175000017500000000000013546075722020720 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/digital/d_xnor/ifspec.ifs0000644000175000017500000000354113546075722022677 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the digital d_xnor code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_d_xnor Spice_Model_Name: d_xnor Description: "digital n-input xnor gate" PORT_TABLE: Port_Name: in out Description: "input" "output" Direction: in out Default_Type: d d Allowed_Types: [d] [d] Vector: yes no Vector_Bounds: [2 -] - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: rise_delay fall_delay Description: "rise delay" "fall delay" Data_Type: real real Default_Value: 1.0e-9 1.0e-9 Limits: [1e-12 -] [1e-12 -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: input_load Description: "input load value (pF)" Data_Type: real Default_Value: 1.0 Limits: [0.0 -] Vector: no Vector_Bounds: - Null_Allowed: yes tmpk8ny_4pz/src/xspice/icm/digital/d_xnor/cfunc.mod0000644000175000017500000001630313546075722022522 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_xnor/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 18 Jun 1991 Jeffrey P. Murray MODIFICATIONS 7 Aug 1991 Jeffrey P. Murray 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the model-specific routines used to functionally describe the d_xnor code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_toggle_bit(); CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION cm_toggle_bit() AUTHORS 27 Sept 1991 Jeffrey P. Murray MODIFICATIONS NONE SUMMARY Alters the state of a passed digital variable to its complement. Thus, a ONE changes to a ZERO. A ZERO changes to a ONE, and an UNKNOWN remains unchanged. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE No returned value. Passed pointer to variable is used to redefine the variable value. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== CM_TOGGLE_BIT ROUTINE ===*/ static void cm_toggle_bit(Digital_State_t *bit) { /* Toggle bit from ONE to ZERO or vice versa, unless the bit value is UNKNOWN. In the latter case, return without changing the bit value. */ if ( UNKNOWN != *bit ) { if ( ONE == *bit ) { *bit = ZERO; } else { *bit = ONE; } } } /*============================================================================== FUNCTION cm_d_xnor() AUTHORS 18 Jun 1991 Jeffrey P. Murray MODIFICATIONS 7 Aug 1991 Jeffrey P. Murray 2 Oct 1991 Jeffrey P. Murray SUMMARY This function implements the d_xnor code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_toggle_bit(); CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== CM_D_XNOR ROUTINE ===*/ /************************************************ * The following is the model for the * * digital XNOR gate for the * * ATESSE Version 2.0 system. * * * * Created 6/18/91 J.P.Murray * ************************************************/ void cm_d_xnor(ARGS) { int i, /* generic loop counter index */ size; /* number of input & output ports */ Digital_State_t *out, /* temporary output for buffers */ *out_old, /* previous output for buffers */ input; /* temp storage for input bits */ /** Retrieve size value... **/ size = PORT_SIZE(in); /*** Setup required state variables ***/ if(INIT) { /* initial pass */ /* allocate storage for the outputs */ cm_event_alloc(0,sizeof(Digital_State_t)); for (i=0; i code model. INTERFACES FILE ROUTINE CALLED CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include #include #include #include /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION cm_d_inverter() AUTHORS 14 Jun 1991 Jeffrey P. Murray MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY This function implements the d_inverter code model. INTERFACES FILE ROUTINE CALLED CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_D_INVERTER ROUTINE ===*/ /************************************************ * The following is the model for the * * digital inverter gate for the * * ATESSE Version 2.0 system. * * * * Created 6/14/91 J.P.Murray * ************************************************/ void cm_d_inverter(ARGS) { /*int i;*/ /* generic loop counter index */ Digital_State_t *out, /* temporary output for inverter */ *out_old; /* previous output for inverter */ /** Setup required state variables **/ if(INIT) { /* initial pass */ /* allocate storage for the outputs */ cm_event_alloc(0,sizeof(Digital_State_t)); /* define load value on inputs */ LOAD(in) = PARAM(input_load); /* retrieve storage for the outputs */ out = out_old = (Digital_State_t *) cm_event_get_ptr(0,0); } else { /* Retrieve previous values */ /* retrieve storage for the outputs */ out = (Digital_State_t *) cm_event_get_ptr(0,0); out_old = (Digital_State_t *) cm_event_get_ptr(0,1); } /** Check on analysis type **/ if (ANALYSIS == DC) { /* DC analysis...output w/o delays */ switch ( INPUT_STATE(in) ) { case ZERO: OUTPUT_STATE(out) = *out = *out_old = ONE; break; case ONE: OUTPUT_STATE(out) = *out = *out_old = ZERO; break; default: OUTPUT_STATE(out) = *out = *out_old = UNKNOWN; break; } } else { /* Transient Analysis */ switch ( INPUT_STATE(in) ) { /* fall to zero value */ case 1: OUTPUT_STATE(out) = *out = ZERO; OUTPUT_DELAY(out) = PARAM(fall_delay); break; /* rise to one value */ case 0: OUTPUT_STATE(out) = *out = ONE; OUTPUT_DELAY(out) = PARAM(rise_delay); break; /* unknown output */ default: OUTPUT_STATE(out) = *out = UNKNOWN; /* based on old value, add rise or fall delay */ if (0 == *out_old) { /* add rising delay */ OUTPUT_DELAY(out) = PARAM(rise_delay); } else { /* add falling delay */ OUTPUT_DELAY(out) = PARAM(fall_delay); } break; } } OUTPUT_STRENGTH(out) = STRONG; } tmpk8ny_4pz/src/xspice/icm/digital/dac_bridge/0000755000175000017500000000000013546075722021472 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/digital/dac_bridge/ifspec.ifs0000644000175000017500000000554013546075722023452 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the hybrid dac_bridge code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_dac_bridge Spice_Model_Name: dac_bridge Description: "digital-to-analog converter node bridge" PORT_TABLE: Port_Name: in out Description: "input" "output" Direction: in out Default_Type: d v Allowed_Types: [d] [v,vd,i,id] Vector: yes yes Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: out_low Description: "analog output for 'ZERO' digital input" Data_Type: real Default_Value: 0.0 Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: out_high Description: "analog output for 'ONE' digital input" Data_Type: real Default_Value: 1.0 Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: out_undef Description: "analog output for 'UNDEFINED' digital input" Data_Type: real Default_Value: 0.5 Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: input_load Description: "capacitive input load (F)" Data_Type: real Default_Value: 1.0e-12 Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: t_rise t_fall Description: "rise time 0 -> 1" "fall time 1 -> 0" Data_Type: real real Default_Value: 1.0e-9 1.0e-9 Limits: [1e-12 -] [1e-12 -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes tmpk8ny_4pz/src/xspice/icm/digital/dac_bridge/cfunc.mod0000644000175000017500000003472613546075722023305 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE dac_bridge/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 3 Jun 1991 Jeffrey P. Murray MODIFICATIONS 16 Aug 1991 Jeffrey P. Murray 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the model-specific routines used to functionally describe the dac_bridge code model. INTERFACES FILE ROUTINE CALLED CM.c void *cm_analog_alloc() void *cm_analog_get_ptr() int cm_analog_set_perm_bkpt() CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include #include #include #include /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION cm_dac_bridge() AUTHORS 3 Jun 1991 Jeffrey P. Murray MODIFICATIONS 16 Aug 1991 Jeffrey P. Murray 2 Oct 1991 Jeffrey P. Murray SUMMARY This function implements the dac_bridge code model. INTERFACES FILE ROUTINE CALLED CM.c void *cm_analog_alloc() void *cm_analog_get_ptr() int cm_analog_set_perm_bkpt() CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_DAC_BRIDGE ROUTINE ===*/ /************************************************ * The following is the model for the * * digital-to-analog nodebridge for the * * ATESSE Version 2.0 system. * * * * Created 6/3/91 J.P.Murray * ************************************************/ void cm_dac_bridge(ARGS) { double out_low, /* analog output value corresponding to '0' digital input */ out_high, /* analog output value corresponding to '1' digital input */ out_undef, /* analog output value corresponding to 'U' digital input */ t_rise, /* rise time...used to produce d(out)/d(time) values for gradual change in analog output. */ t_fall, /* fall time...used to produce d(out)/d(time) values for gradual change in analog output. */ *out, /* array holding all output values */ *out_old, /* array holding previous output values */ fraction, /* fraction of total rise or fall time to add to current time value for breakpoint calculation */ level_inc, /* incremental level value out_high - out_low */ rise_slope, /* level_inc divided by t_rise */ fall_slope, /* level_inc divided by t_fall */ time_inc, /* time increment since last analog call */ test, /* testing variable */ *breakpoint; /* holding variable to prevent infinite posting of the same breakpoint */ int i, /* generic loop counter index */ size; /* number of input & output ports */ Digital_State_t *in, /* base address of array holding all input values */ *in_old; /* array holding previous input values */ /* determine "width" of the node bridge... */ size = PORT_SIZE(in); /** Read in remaining model parameters **/ out_low = PARAM(out_low); out_high = PARAM(out_high); t_rise = PARAM(t_rise); t_fall = PARAM(t_fall); /* Test to see if out_low and out_high were specified, but */ /* out_undef was not... */ /* if so, take out_undef as mean of out_high and out_low. */ if (!PARAM_NULL(out_low) && !PARAM_NULL(out_high) && PARAM_NULL(out_undef) ) { out_undef = out_low + (out_high - out_low) / 2.0; } else { out_undef = PARAM(out_undef); } if (INIT) { /*** Test for INIT == TRUE. If so, allocate storage, etc. ***/ /* Allocate storage for inputs */ cm_event_alloc(0, size * (int) sizeof(Digital_State_t)); /* Allocate storage for outputs */ /* retrieve previously-allocated discrete input and */ /* allocate storage for analog output values. */ /* allocate output space and obtain adresses */ cm_analog_alloc(0, size * (int) sizeof(double)); cm_analog_alloc(1, sizeof(double)); /* assign discrete addresses */ in = in_old = (Digital_State_t *) cm_event_get_ptr(0,0); /* assign analog addresses */ out = out_old = (double *) cm_analog_get_ptr(0,0); breakpoint = (double *) cm_analog_get_ptr(1,0); /* read current input values */ for (i=0; i out_low) { /* output still dropping */ out[i] = out_old[i] - fall_slope*time_inc; if ( out_low > out[i]) out[i]=out_low; } else { /* output at out_low */ out[i] = out_low; } break; case ONE: if (out_old[i] < out_high) { /* output still rising */ out[i] = out_old[i] + rise_slope*time_inc; if ( out_high < out[i]) out[i]=out_high; } else { /* output at out_high */ out[i] = out_high; } break; case UNKNOWN: if (out_old[i] < out_undef) { /* output still rising */ out[i] = out_old[i] + (rise_slope * time_inc); if ( out_undef < out[i]) out[i]=out_undef; } else { if (out_old[i] > out_undef) { /* output still falling */ out[i] = out_old[i] - fall_slope*time_inc; if ( out_undef > out[i]) out[i]=out_undef; } else { /* output at out_undef */ out[i] = out_undef; } } break; } } else { /* There HAS been a change in this digital input since the last analog access...need to use the old value of input to complete the breakpoint slope before changing directions... */ switch (in_old[i]) { case ZERO: if (out_old[i] > out_low) { /* output still dropping */ out[i] = out_old[i] - fall_slope*time_inc; if ( out_low > out[i]) out[i]=out_low; } else { /* output at out_low */ out[i] = out_low; } break; case ONE: if (out_old[i] < out_high) { /* output still rising */ out[i] = out_old[i] + rise_slope*time_inc; if ( out_high < out[i]) out[i]=out_high; } else { /* output at out_high */ out[i] = out_high; } break; case UNKNOWN: if (out_old[i] < out_undef) { /* output still rising */ out[i] = out_old[i] + (rise_slope * time_inc); if ( out_undef < out[i]) out[i]=out_undef; } else { if (out_old[i] > out_undef) { /* output still falling */ out[i] = out_old[i] - fall_slope*time_inc; if ( out_undef > out[i]) out[i]=out_undef; } else { /* output at out_undef */ out[i] = out_undef; } } break; } /* determine required new breakpoint for the end of the output analog transition & post */ switch (in[i]) { case ONE: /* rising for all outputs */ fraction = (out_high - out[i]) / (out_high - out_low); test = TIME + (fraction * t_rise); cm_analog_set_perm_bkpt(test); break; case UNKNOWN: /* may be rising or falling */ if ( out_undef > out[i] ) { /* rising to U */ fraction = (out_undef - out[i]) / (out_high - out_low); test = TIME + (fraction * t_rise); cm_analog_set_perm_bkpt(test); } else { /* falling to U */ fraction = (out[i] - out_undef) / (out_high - out_low); test = TIME + (fraction * t_fall); cm_analog_set_perm_bkpt(test); } break; case ZERO: /* falling for all outputs */ fraction = (out[i] - out_low) / (out_high - out_low); test = TIME + (fraction * t_fall); cm_analog_set_perm_bkpt(test); break; } } } /* Output values... */ for (i=0; i code model. INTERFACES FILE ROUTINE CALLED CMmacros.h cm_message_send(); CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include #include #include #include #include /*=== CONSTANTS ========================*/ #define MAX_STRING_SIZE 200 #define HEADER 1 #define CONTINUATION 2 #define OK 0 #define FAIL 1 /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ typedef struct { int current_state, /* current state of the machine (similar to current state of the union, current state of the economy, etc. etc. 8-) */ index0, /* actual word number (0 to depth-1) in which the first line of the current_state definition may be found. */ indexN, /* word number (0 to depth-1) of the final curren_state definition line...if a state is defined in only one line, index0 and indexN will be equal. */ num_outputs, /* width of bits[] table...equal to size of out port */ num_inputs, /* width of inputs[] table...equal to size of in port */ depth, /* depth of table...equal to size of current_state & next_state arrays, and to the total number of vectors retrieved from the state.in file. */ *state, /* integer array holding the state index values...note that each state will have at least one and as many as 2^N "words" assigned to it, where N = number of input lines to the state machine. */ *next_state; /* integer array holding the next state to jump to given the input values held by the inputs[] array...note that each state will have at least one and as many as 2^N "words" assigned to it, where N = number of input lines to the state machine. */ short *bits, /* the storage array for the output bit representations... this will have size equal to (width * depth)/4, since one short will hold four 12-state bit descriptions. */ *inputs; /* the storage array for the input bit representations... this will have size equal to (width * depth)/8, since one short will hold eight 3-state bit descriptions. */ } State_Table_t; /* Type definition for each possible token returned. */ typedef enum token_type_s {CNV_NO_TOK,CNV_STRING_TOK} Cnv_Token_Type_t; typedef char line_t[82]; /* A SPICE size line. <= 80 characters plus '\n\0' */ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION *CNVgettok() AUTHORS 13 Jun 1991 Jeffrey P. Murray MODIFICATIONS 8 Aug 1991 Jeffrey P. Murray 30 Sep 1991 Jeffrey P. Murray SUMMARY This function obtains the next token from an input stream. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns a string value representing the next token. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== Static CNVgettok ROUTINE ================*/ /* Get the next token from the input string. The input string pointer is advanced to the following token and the token from the input string is copied to malloced storage and a pointer to that storage is returned. The original input string is undisturbed. */ static char *CNVgettok(char **s) { char *buf; /* temporary storage to copy token into */ /*char *temp;*/ /* temporary storage to copy token into */ char *ret_str; /* storage for returned string */ int i; /* allocate space big enough for the whole string */ buf = (char *) malloc(strlen(*s) + 1); /* skip over any white space */ while(isspace_c(**s) || (**s == '=') || (**s == '(') || (**s == ')') || (**s == ',')) (*s)++; /* isolate the next token */ switch(**s) { case '\0': /* End of string found */ if(buf) free(buf); return(NULL); default: /* Otherwise, we are dealing with a */ /* string representation of a number */ /* or a mess o' characters. */ i = 0; while( (**s != '\0') && (! ( isspace_c(**s) || (**s == '=') || (**s == '(') || (**s == ')') || (**s == ',') ) ) ) { buf[i] = **s; i++; (*s)++; } buf[i] = '\0'; break; } /* skip over white space up to next token */ while(isspace_c(**s) || (**s == '=') || (**s == '(') || (**s == ')') || (**s == ',')) (*s)++; /* make a copy using only the space needed by the string length */ ret_str = (char *) malloc(strlen(buf) + 1); ret_str = strcpy(ret_str,buf); if(buf) free(buf); return(ret_str); } /*============================================================================== FUNCTION *CNVget_token() AUTHORS 13 Jun 1991 Jeffrey P. Murray MODIFICATIONS 8 Aug 1991 Jeffrey P. Murray 30 Sep 1991 Jeffrey P. Murray SUMMARY This function obtains the next token from an input stream. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns a string value representing the next token. Uses *CNVget_tok. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== Static CNVget_token ROUTINE =============*/ /* Get the next token from the input string together with its type. The input string pointer is advanced to the following token and the token from the input string is copied to malloced storage and a pointer to that storage is returned. The original input string is undisturbed. */ static char *CNVget_token(char **s, Cnv_Token_Type_t *type) { char *ret_str; /* storage for returned string */ /* get the token from the input line */ ret_str = CNVgettok(s); /* if no next token, return */ if(ret_str == NULL) { *type = CNV_NO_TOK; return(NULL); } /* else, determine and return token type */ switch(*ret_str) { default: *type = CNV_STRING_TOK; break; } return(ret_str); } /*============================================================================== FUNCTION cnv_get_spice_value() AUTHORS ??? Bill Kuhn MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY This function takes as input a string token from a SPICE deck and returns a floating point equivalent value. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns the floating point value in pointer *p_value. Also returns an integer representing successful completion. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== Static CNV_get_spice_value ROUTINE =============*/ /* Function takes as input a string token from a SPICE deck and returns a floating point equivalent value. */ static int cnv_get_spice_value( char *str, /* IN - The value text e.g. 1.2K */ double *p_value ) /* OUT - The numerical value */ { /* the following were "int4" devices - jpm */ size_t len; size_t i; int n_matched; line_t val_str; /*char *suffix;*/ char c = ' '; char c1; double scale_factor; double value; /* Scan the input string looking for an alpha character that is not */ /* 'e' or 'E'. Such a character is assumed to be an engineering */ /* suffix as defined in the Spice 2G.6 user's manual. */ len = strlen(str); if( len > (sizeof(val_str) - 1)) len = sizeof(val_str) - 1; for(i = 0; i < len; i++) { c = str[i]; if( isalpha_c(c) && (c != 'E') && (c != 'e') ) break; else if( isspace_c(c) ) break; else val_str[i] = c; } val_str[i] = '\0'; /* Determine the scale factor */ if( (i >= len) || (! isalpha_c(c)) ) scale_factor = 1.0; else { if(islower_c(c)) c = tolower_c(c); switch(c) { case 't': scale_factor = 1.0e12; break; case 'g': scale_factor = 1.0e9; break; case 'k': scale_factor = 1.0e3; break; case 'u': scale_factor = 1.0e-6; break; case 'n': scale_factor = 1.0e-9; break; case 'p': scale_factor = 1.0e-12; break; case 'f': scale_factor = 1.0e-15; break; case 'm': i++; if(i >= len) { scale_factor = 1.0e-3; break; } c1 = str[i]; if(! isalpha_c(c1)) { scale_factor = 1.0e-3; break; } if(islower_c(c1)) c1 = toupper_c(c1); if(c1 == 'E') scale_factor = 1.0e6; else if(c1 == 'I') scale_factor = 25.4e-6; else scale_factor = 1.0e-3; break; default: scale_factor = 1.0; } } /* Convert the numeric portion to a float and multiply by the */ /* scale factor. */ n_matched = sscanf(val_str,"%le",&value); if(n_matched < 1) { *p_value = 0.0; return(FAIL); } *p_value = value * scale_factor; return(OK); } /*============================================================================== FUNCTION cm_inputs_mask_and_retrieve() AUTHORS 23 Jul 1991 Jeffrey P. Murray MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY Masks off and retrieves a two-bit value from a short integer word passed to the function, using an offset value. This effectively handles retrieval of eight two-bit values from a single short integer space in order to conserve memory. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns a Digital_t value. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== Static CM_INPUTS_MASK_AND_RETRIEVE ROUTINE ===*/ /************************************************** * The following routine masks and retrieves * * the value passed to it by the out value * * by masking the appropriate bits in the * * base integer. The particular bit affected * * is determined by the bit_offset value. * * * * Created 7/23/91 J.P.Murray * **************************************************/ static Digital_State_t cm_inputs_mask_and_retrieve(short base, int bit_offset) { int value; /* the hexadecimal value of the masked bit */ value = 0x0003 & (base >> (bit_offset * 2)); switch (value) { case 0: return ZERO; case 1: return ONE; default: return UNKNOWN; } } /*============================================================================== FUNCTION cm_set_indices() AUTHORS 23 Jul 1991 Jeffrey P. Murray MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY The following routine retrieves the current_state value from the *states structure. It then searches the entire state[] array to determine the index0 and indexN values corresponding to the first and last entries in the state[] array for the current state. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns a status int value. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== Static CM_SET_INDICES ROUTINE ===*/ /************************************************ * The following routine retrieves the * * current_state value from the *states * * structure. It then searches the entire * * state[] array to determine the index0 and * * indexN values corresponding to the first * * and last entries in the state[] array for * * the current state. * * * * Created 7/23/91 J.P. Murray * ************************************************/ static int cm_set_indices(State_Table_t *states) { int i, /* indexing variable */ index0_set, /* flag for index0 */ indexN_set; /* flag for index1 */ states->index0 = 0; states->indexN = 0; index0_set = 0; indexN_set = 0; for (i=0; i< states->depth; i++) { /* loop through all states */ if ( states->state[i] == states->current_state ) { /* states match... */ /* if not already set, set index0... */ if ( 0 == index0_set ) { states->index0 = i; states->indexN = i; index0_set = 1; } if ( 1 < (i - states->indexN) ) { /* ERROR!! This means that a state match was found in a nonn-contiguous portion of the state.in file...this is not allowed! */ return TRUE; } else { /* update indexN. */ states->indexN = i; } } } return FALSE; } /*============================================================================== FUNCTION cm_compare_to_inputs() AUTHORS 23 Jul 1991 Jeffrey P. Murray MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY The following routine retrieves the the inputs[] bit value pointed to by the word_num and bit_num integers, compares this value with the "in" state value, and returns a "0" if they match, and a "1" if they do not match. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns a status int value. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== Static CM_COMPARE_TO_INPUTS ROUTINE ===*/ /************************************************ * The following routine retrieves the * * the inputs[] bit value pointed to by * * the word_num and bit_num integers, compares * * this value with the "in" state value, and * * returns a "0" if they match, and a "1" if * * they do not match. * * * * Created 7/23/91 J.P.Murray * ************************************************/ static int cm_compare_to_inputs(State_Table_t *states,int index,int bit_number, Digital_State_t in) { int int1, /* temp storage variable */ bit_index, /* bits base address at which word bits will be found */ bit_offset; /* offset from ram base address at which bit[0] of the required word can be found */ short base; /* variable to hold current base integer for comparison purposes. */ Digital_State_t out; /* output variable for state retrieved */ /* obtain offset value from index, word_width & bit_number */ int1 = index * states->num_inputs + bit_number; bit_index = int1 >> 3; bit_offset = int1 & 7; /* retrieve entire base_address bits integer... */ base = states->inputs[bit_index]; /* for each offset, mask off the bits and determine values */ out = cm_inputs_mask_and_retrieve(base, bit_offset); if ( out == in ) { /* bit matches */ return 0; } else if ( out == UNKNOWN ) { /* bit compared to is a "don't care" */ return 0; } else { /* no match */ return 1; } } /*============================================================================== FUNCTION cm_inputs_mask_and_store() AUTHORS 22 Jul 1991 Jeffrey P. Murray MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY The following routine masks and stores the value passed to it by the out value by masking the appropriate bits in the base integer. The particular bit affected is determined by the bit_offset value. This routine stores to the inputs[] array. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns a status int value. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== Static CM_INPUTS_MASK_AND_STORE ROUTINE ===*/ /************************************************ * The following routine masks and stores * * the value passed to it by the out value * * by masking the appropriate bits in the * * base integer. The particular bit affected * * is determined by the bit_offset value. * * This routine stores to the inputs[] array. * * * * Created 7/22/91 * * Last Modified 7/22/91 J.P.Murray * ************************************************/ static void cm_inputs_mask_and_store(short *base,int bit_offset,int bit_value) { *base &= (short) ~ (0x0003 << (bit_offset * 2)); *base |= (short) (bit_value << (bit_offset * 2)); } /*============================================================================== FUNCTION cm_store_inputs_value() AUTHORS 23 Jul 1991 Jeffrey P. Murray MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY The following routine retrieves four-bit data from short integer array "bits". The integers are assumed to be at least two bytes each, so each will hold four four- bit values. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE NONE GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== Static CM_STORE_INPUTS_VALUE ROUTINE ===*/ /************************************************ * The following routine retrieves four-bit * * data from short integer array "bits". The * * integers are assumed to be at least two * * bytes each, so each will hold four four- * * bit values. * * * * Created 7/23/91 J.P.Murray * ************************************************/ static void cm_store_inputs_value(State_Table_t *states,int index, int bit_number, int in_val) { int /*err,*/ /* error index value */ int1, /* temp storage variable */ bit_index, /* bits base address at which word bits will be found */ bit_offset; /* offset from ram base address at which bit[0] of the required word can be found */ short base; /* variable to hold current base integer for comparison purposes. */ /* obtain offset value from word_number, word_width & bit_number */ int1 = index * states->num_inputs + bit_number; bit_index = int1 >> 3; bit_offset = int1 & 7; /* retrieve entire base_address bits integer... */ base = states->inputs[bit_index]; /* for each offset, mask off the bits and store values */ cm_inputs_mask_and_store(&base,bit_offset,in_val); /* store modified base value */ states->inputs[bit_index] = base; } /*============================================================================== FUNCTION cm_bits_mask_and_store() AUTHORS 22 Jul 1991 Jeffrey P. Murray MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY The following routine masks and stores the value passed to it by the out value by masking the appropriate bits in the base integer. The particular bit affected is determined by the bit_offset value. This routine stores to the bits[] array. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns a status integer. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== Static CM_BITS_MASK_AND_STORE ROUTINE ===*/ /************************************************ * The following routine masks and stores * * the value passed to it by the out value * * by masking the appropriate bits in the * * base integer. The particular bit affected * * is determined by the bit_offset value. * * This routine stores to the bits[] array. * * * * Created 7/22/91 * * Last Modified 7/22/91 J.P.Murray * ************************************************/ static void cm_bits_mask_and_store(short *base,int bit_offset,int bit_value) { *base &= (short) ~ (0x000f << (bit_offset * 4)); *base |= (short) (bit_value << (bit_offset * 4)); } /*============================================================================== FUNCTION cm_bits_mask_and_retrieve() AUTHORS 22 Jul 1991 Jeffrey P. Murray MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY The following routine masks and retrieves the value passed to it by the out value by masking the appropriate bits in the base integer. The particular bit affected is determined by the bit_offset value. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE NONE GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== Static CM_BITS_MASK_AND_RETRIEVE ROUTINE ===*/ /************************************************** * The following routine masks and retrieves * * the value passed to it by the out value * * by masking the appropriate bits in the * * base integer. The particular bit affected * * is determined by the ram_offset value. * * * * Created 7/22/91 * * Last Modified 7/22/91 J.P.Murray * **************************************************/ static void cm_bits_mask_and_retrieve(short base,int bit_offset,Digital_t *out) { int value; /* the hexadecimal value of the masked bit */ value = 0x000f & (base >> (bit_offset * 4)); switch (value) { case 0: out->state = ZERO; out->strength = STRONG; break; case 1: out->state = ONE; out->strength = STRONG; break; case 2: out->state = UNKNOWN; out->strength = STRONG; break; case 3: out->state = ZERO; out->strength = RESISTIVE; break; case 4: out->state = ONE; out->strength = RESISTIVE; break; case 5: out->state = UNKNOWN; out->strength = RESISTIVE; break; case 6: out->state = ZERO; out->strength = HI_IMPEDANCE; break; case 7: out->state = ONE; out->strength = HI_IMPEDANCE; break; case 8: out->state = UNKNOWN; out->strength = HI_IMPEDANCE; break; case 9: out->state = ZERO; out->strength = UNDETERMINED; break; case 10: out->state = ONE; out->strength = UNDETERMINED; break; case 11: out->state = UNKNOWN; out->strength = UNDETERMINED; break; } } /*============================================================================== FUNCTION cm_get_bits_value() AUTHORS 22 Jul 1991 Jeffrey P. Murray MODIFICATIONS 23 Jul 1991 Jeffrey P. Murray 30 Sep 1991 Jeffrey P. Murray SUMMARY The following routine retrieves four-bit data from short integer array "bits". The integers are assumed to be at least two bytes each, so each will hold four four- bit values. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE NONE GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== Static CM_GET_BITS_VALUE ROUTINE ===*/ /************************************************ * The following routine retrieves four-bit * * data from short integer array "bits". The * * integers are assumed to be at least two * * bytes each, so each will hold four four- * * bit values. * * * * Created 7/22/91 * * Last Modified 7/23/91 J.P.Murray * ************************************************/ static void cm_get_bits_value(State_Table_t *states,int index, int bit_number, Digital_t *out) { int /*err,*/ /* error index value */ int1, /* temp storage variable */ bit_index, /* bits base address at which word bits will be found */ bit_offset; /* offset from ram base address at which bit[0] of the required word can be found */ short base; /* variable to hold current base integer for comparison purposes. */ /* obtain offset value from index, word_width & bit_number */ int1 = index * states->num_outputs + bit_number; bit_index = int1 >> 2; bit_offset = int1 & 3; /* retrieve entire base_address bits integer... */ base = states->bits[bit_index]; /* for each offset, mask off the bits and determine values */ cm_bits_mask_and_retrieve(base,bit_offset,out); } /*============================================================================== FUNCTION cm_store_bits_value() AUTHORS 23 Jul 1991 Jeffrey P. Murray MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY The following routine retrieves four-bit data from short integer array "bits". The integers are assumed to be at least two bytes each, so each will hold four four- bit values. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE NONE GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== Static CM_STORE_BITS_VALUE ROUTINE ===*/ /************************************************ * The following routine retrieves four-bit * * data from short integer array "bits". The * * integers are assumed to be at least two * * bytes each, so each will hold four four- * * bit values. * * * * Created 7/23/91 * * Last Modified 7/23/91 J.P.Murray * ************************************************/ static void cm_store_bits_value(State_Table_t *states,int index, int bit_number, int in_val) { int /*err,*/ /* error index value */ int1, /* temp storage variable */ bit_index, /* bits base address at which word bits will be found */ bit_offset; /* offset from ram base address at which bit[0] of the required word can be found */ short base; /* variable to hold current base integer for comparison purposes. */ /* obtain offset value from word_number, word_width & bit_number */ int1 = index * states->num_outputs + bit_number; bit_index = int1 >> 2; bit_offset = int1 & 3; /* retrieve entire base_address bits integer... */ base = states->bits[bit_index]; /* for each offset, mask off the bits and store values */ cm_bits_mask_and_store(&base,bit_offset,in_val); /* store modified base value */ states->bits[bit_index] = base; } /*============================================================================== FUNCTION cm_read_state_file() AUTHORS 15 Jul 1991 Jeffrey P. Murray MODIFICATIONS 23 Jul 1991 Jeffrey P. Murray 30 Sep 1991 Jeffrey P. Murray SUMMARY The following routine reads the file *state_file, parses the file, and stores the values found there into the *state, *bits, *inputs and *next_state arrays. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns a status integer value. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== Static CM_READ_STATE_FILE ROUTINE ===*/ /************************************************** * The following routine reads the file * * *state_file, parses the file, and stores * * the values found there into the *state, * * *bits, *inputs and *next_state arrays. * * * * Created 7/15/91 * * Last Modified 7/23/91 J.P.Murray * **************************************************/ static int cm_read_state_file(FILE *state_file,State_Table_t *states) { int i, /* indexing variable */ j, /* indexing variable */ num_tokens, /* number of tokens in a given string */ /*bit_index,*/ /* index to which bits[] integer we are accessing */ /*bit_offset,*/ /* index to which bit within the current bits[] integer we are accessing */ string_type; /* integer holding value corresponding to the type of input string obtained: 1 = HEADER => State Header string 2 = CONTINUATION => a continuation line... values of state and bits must be retreived from the previous string. */ /*int1;*/ /* temporary holding variable */ Cnv_Token_Type_t type; /* variable for testing token type returned. */ char temp[MAX_STRING_SIZE], /* holding string variable for testing input from state.in */ *s, /* main string variable */ *base_address, /* storage location for base address of string. */ *token; /* a particular token from the string */ double number; /* holding variable for timepoint values */ short bit_value=0; /* holding variable for value read from state.in file which needs to be stored */ /*base;*/ /* holding variable for existing non-masked bits[] integer */ if (!state_file) { return 2; } i = 0; s = temp; while ( fgets(s,MAX_STRING_SIZE,state_file) != NULL) { /* Test this string to see if it is whitespace... */ base_address = s; while(isspace_c(*s) || (*s == '*')) (s)++; if ( *s != '\0' ) { /* This is not a blank line, so process... */ s = base_address; if ( '*' != s[0] ) { /* Count up total number of tokens including \0... */ j = 0; type = CNV_STRING_TOK; while ( type != CNV_NO_TOK ) { token = CNVget_token(&s, &type); j++; } num_tokens = (j-1); /* Test the type of entry this number of tokens represents. Valid types are: a. State Header with state, bits, inputs and next_state entries...total tokens equals num_inputs + num_outputs + 3 (e.g. "5 0s 0s 0s 0 0 -> 6"). b. State continuation line with inputs and next_state only...total tokens equals num_inputs + 2. (e.g. " 0 1 -> 7"). */ if ( (3 + states->num_inputs + states->num_outputs) == num_tokens) { string_type = HEADER; } else { if ( (2 + states->num_inputs) == num_tokens) { string_type = CONTINUATION; } else { /* Number of tokens is incorrect */ return 1; } } /* reset s to beginning... */ s = base_address; /** Retrieve each token, analyze, and **/ /** store the state, bits, inputs & **/ /** next_state information. **/ if ( HEADER == string_type ) { /**** header type loop ****/ for (j=0; j<(states->num_inputs + states->num_outputs + 3); j++) { token = CNVget_token(&s, &type); if ( 0 == j ) { /* obtain state value... */ /* convert to a floating point number... */ cnv_get_spice_value(token,&number); states->state[i] = (int) number; } else { /* obtain each bit value & set bits entry */ if ( states->num_outputs >= j ) { /* preset this bit location */ bit_value = 12; if (0 == strcmp(token,"0s")) bit_value = 0; if (0 == strcmp(token,"1s")) bit_value = 1; if (0 == strcmp(token,"Us")) bit_value = 2; if (0 == strcmp(token,"0r")) bit_value = 3; if (0 == strcmp(token,"1r")) bit_value = 4; if (0 == strcmp(token,"Ur")) bit_value = 5; if (0 == strcmp(token,"0z")) bit_value = 6; if (0 == strcmp(token,"1z")) bit_value = 7; if (0 == strcmp(token,"Uz")) bit_value = 8; if (0 == strcmp(token,"0u")) bit_value = 9; if (0 == strcmp(token,"1u")) bit_value = 10; if (0 == strcmp(token,"Uu")) bit_value = 11; /* if this bit was not recognized, return with an error */ if (12 == bit_value) { return 1; } else { /* need to store this value in the bits[] array */ cm_store_bits_value(states,i,(j-1),bit_value); } } else { /* obtain inputs info... */ if ( (states->num_outputs + states->num_inputs) >= j ) { /* preset this bit location */ bit_value = 3; if (0 == strcmp(token,"0")) bit_value = 0; if (0 == strcmp(token,"1")) bit_value = 1; if (0 == strcmp(token,"x")) bit_value = 2; if (0 == strcmp(token,"X")) bit_value = 2; /* if this bit was not recognized, return with an error */ if (3 == bit_value) { return 1; } else { /* need to store this value in the inputs[] array */ cm_store_inputs_value(states,i,(j-1-states->num_outputs),bit_value); } } else { /* obtain next_state value */ if ( (1 + states->num_outputs + states->num_inputs) == j ) { /* skip the "->" token */ } else { /* convert to a floating point number... */ cnv_get_spice_value(token,&number); states->next_state[i] = (int) number; } } } } } } else { /**** continuation type loop ****/ /* set state value to previous state value */ states->state[i] = states->state[i-1]; /* set bits values to previous bits values */ for (j=0; jnum_outputs; j++) { /*** Retrieve the previous bit value ***? cm_get_bits_value(*states,i,j,&out); switch (out.state) { case ZERO: switch (out.strength) { case STRONG: bit_value = 0; break; case RESISTIVE: bit_value = 3; break; case HI_IMPEDANCE: bit_value = 6; break; case UNDETERMINED: bit_value = 9; break; } break; case ONE: switch (out.strength) { case STRONG: bit_value = 1; break; case RESISTIVE: bit_value = 4; break; case HI_IMPEDANCE: bit_value = 7; break; case UNDETERMINED: bit_value = 10; break; } break; case UNKNOWN: switch (out.strength) { case STRONG: bit_value = 2; break; case RESISTIVE: bit_value = 5; break; case HI_IMPEDANCE: bit_value = 8; break; case UNDETERMINED: bit_value = 11; break; } break; } */ /*** Store this bit value ***/ cm_store_bits_value(states,i,j,bit_value); } for (j=0; j<(2 + states->num_inputs); j++) { token = CNVget_token(&s, &type); if ( j < states->num_inputs ) { /* preset this bit location */ bit_value = 3; if (0 == strcmp(token,"0")) bit_value = 0; if (0 == strcmp(token,"1")) bit_value = 1; if (0 == strcmp(token,"x")) bit_value = 2; if (0 == strcmp(token,"X")) bit_value = 2; /* if this bit was not recognized, return with an error */ if (3 == bit_value) { return 1; } else { /* need to store this value in the inputs[] array */ cm_store_inputs_value(states,i,j,bit_value); } } else { /* obtain next_state value */ if ( states->num_inputs == j ) { /* skip the "->" token */ } else { /* convert to a floating point number... */ cnv_get_spice_value(token,&number); states->next_state[i] = (int) number; } } } } i++; } s = temp; } } return 0; } /*============================================================================== FUNCTION cm_d_state() AUTHORS 17 Jun 1991 Jeffrey P. Murray MODIFICATIONS 20 Aug 1991 Jeffrey P. Murray 30 Sep 1991 Jeffrey P. Murray SUMMARY This function implements the d_state code model. INTERFACES FILE ROUTINE CALLED CMmacros.h cm_message_send(); CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_D_STATE ROUTINE ==============*/ /************************************************ * The following is the model for the * * digital state machine for the * * ATESSE Version 2.0 system. * * * * Created 7/17/91 * * Last Modified 8/20/91 J.P.Murray * ************************************************/ void cm_d_state(ARGS) { int i, /* generic loop counter index */ j, /* generic loop counter index */ err=0, /* integer for storage of error status */ test; /* testing integer */ State_Table_t *states, /* pointer to base address structure for all state arrays. *states contains the pointers to state[], bits[], input[] and next_state[] arrays. These arrays are allocated using calloc, so they do not take up rotational storage space...only the *states structure does this. */ *states_old; FILE *state_file; /* pointer to the state.in input vector file */ Digital_t in, /* storage for each input bit */ out; /* storage for each output bit */ Digital_State_t *clk, /* storage for clock value */ *clk_old, /* previous clock value */ *reset, /* current reset value */ *reset_old; /* previous reset value */ char temp[MAX_STRING_SIZE], /* holding string variable for testing input from state.in */ *s; /* main string variable */ char *open_error = "\nERROR\n D_STATE: failed to open state file.\n"; char *loading_error = "\nERROR\n D_STATE: state file was not read successfully. \n The most common cause of this problem is a\n trailing blank line in the state.in file \n"; char *index_error = "\nERROR\n D_STATE: An error exists in the ordering of states values\n in the states->state[] array. This is usually caused \n by non-contiguous state definitions in the state.in file \n"; /* char buf[100];*/ /****** Setup required state variables ******/ if(INIT) { /* initial pass */ /*** open file and count the number of vectors in it ***/ state_file = fopen_with_path( PARAM(state_file), "r"); /* increment counter if not a comment until EOF reached... */ i = 0; s = temp; if (state_file!=NULL) while ( fgets(s,MAX_STRING_SIZE,state_file) != NULL) { if ( '*' != s[0] ) { while(isspace_c(*s) || (*s == '*')) (s)++; if ( *s != '\0' ) i++; } s = temp; } /*** allocate storage for *states... ***/ cm_event_alloc(0,sizeof(State_Table_t)); states = states_old = (State_Table_t *) cm_event_get_ptr(0,0); /* Store depth value */ states->depth = i; /* Retrieve widths for bits[] and inputs[] */ states->num_inputs = PORT_SIZE(in); states->num_outputs = PORT_SIZE(out); /* assign storage for arrays to pointers in states table */ states->state = (int *) calloc((size_t) (states->depth + 1), sizeof(int)); states->bits = (short *) calloc((size_t) (states->num_outputs * states->depth / 4 + 1), sizeof(short)); states->inputs = (short *) calloc((size_t) (states->num_inputs * states->depth / 8 + 1), sizeof(short)); states->next_state = (int *) calloc((size_t) (states->depth + 1), sizeof(int)); /* Initialize *state, *bits, *inputs & *next_state to zero */ for (i=0; idepth; i++) { states->state[i] = 0; states->next_state[i] = 0; } for (i=0; i<(test=(states->num_outputs * states->depth)/4); i++) states->bits[i] = 0; for (i=0; i<(test=(states->num_inputs * states->depth)/8); i++) states->inputs[i] = 0; /*** allocate storage for *clk, *clk_old, *reset & *reset_old... ***/ cm_event_alloc(1,sizeof(Digital_State_t)); cm_event_alloc(2,sizeof(Digital_State_t)); /* fetch states again, it might have moved per realloc */ states = states_old = (State_Table_t *) cm_event_get_ptr(0,0); clk = clk_old = (Digital_State_t *) cm_event_get_ptr(1,0); reset = reset_old = (Digital_State_t *) cm_event_get_ptr(2,0); /*** Send file pointer and the four storage pointers ***/ /*** to "cm_read_state_file()". This will return after ***/ /*** reading the contents of state.in, and if no ***/ /*** errors have occurred, the "*state" and "*bits" ***/ /*** "*inputs", and "*next_state" vectors will be loaded ***/ /*** and the num_inputs, num_outputs and depth ***/ /*** values supplied. ***/ if (state_file) { rewind(state_file); err = cm_read_state_file(state_file,states); } else { err = 2; } if (err == 1) /* problem occurred in load...send error msg. */ cm_message_send(loading_error); else if (err == 2) /* problem opening the state file...send error msg. */ cm_message_send(open_error); if (err > 0) { /* Reset arrays to zero */ for (i=0; idepth; i++) { states->state[i] = 0; states->next_state[i] = 0; } for (i=0; i<(test=(states->num_outputs * states->depth)/4); i++) states->bits[i] = 0; for (i=0; i<(test=(states->num_inputs * states->depth)/8); i++) states->inputs[i] = 0; return; } /* close state_file */ if (state_file) fclose(state_file); /* declare load values */ // for (i=0; inum_outputs; i++) { for (i=0; inum_inputs; i++) { LOAD(in[i]) = PARAM(input_load); } LOAD(clk) = PARAM(clk_load); LOAD(reset) = PARAM(reset_load); } else { /**** Retrieve previous values ****/ states = (State_Table_t *) cm_event_get_ptr(0,0); states_old = (State_Table_t *) cm_event_get_ptr(0,1); // Copy storage *states = *states_old; clk = (Digital_State_t *) cm_event_get_ptr(1,0); clk_old = (Digital_State_t *) cm_event_get_ptr(1,1); reset = (Digital_State_t *) cm_event_get_ptr(2,0); reset_old = (Digital_State_t *) cm_event_get_ptr(2,1); } /******* Determine analysis type and output appropriate values *******/ if ( 0.0 == TIME ) { /****** DC analysis...output w/o delays ******/ /* set current state to default */ states->current_state = PARAM(reset_state); /* set indices for this state */ err = cm_set_indices(states); if ( err == TRUE ) { cm_message_send(index_error); return; } /* Output new values... */ for (i=0; inum_outputs; i++) { /* retrieve output value */ cm_get_bits_value(states,states->index0,i,&out); OUTPUT_STATE(out[i]) = out.state; OUTPUT_STRENGTH(out[i]) = out.strength; } } else { /****** Transient Analysis ******/ /*** load current input values if reset is not connected, set to zero... ***/ *clk = INPUT_STATE(clk); if ( PORT_NULL(reset) ) { *reset = *reset_old = ZERO; } else { *reset = INPUT_STATE(reset); } /***** Find input that has changed... *****/ /**** Test reset value for change ****/ if ( *reset != *reset_old ) { /* either reset or reset release */ switch ( *reset ) { case ONE: states->current_state = PARAM(reset_state); /* set indices for this state */ err = cm_set_indices(states); if ( err == TRUE ) { cm_message_send(index_error); return; } /* Output new values... */ for (i=0; inum_outputs; i++) { /* retrieve output value */ cm_get_bits_value(states,states->index0,i,&out); OUTPUT_STATE(out[i]) = out.state; OUTPUT_STRENGTH(out[i]) = out.strength; OUTPUT_DELAY(out[i]) = PARAM(reset_delay); } break; case ZERO: case UNKNOWN: /* output remains at current value */ for (i=0; inum_outputs; i++) { OUTPUT_CHANGED(out[i]) = FALSE; } break; } } else { if ( ONE != *reset ) { /**** model is not held to reset value ****/ /**** Test clk value for change ****/ if (*clk != *clk_old) { /* clock or clock release */ switch ( *clk ) { case ONE: /** active edge...need to find out if a match **/ /** exists between the current inputs and **/ /** any of the inputs which drive the state **/ /** machine to the next state...if so, we **/ /** will need to retrieve that state value, **/ /** and set the new index boundaries... **/ /* for each of the entries for the current_state... */ for (i=states->index0; i<=states->indexN; i++) { /* first set err to zero... */ err = 0; /* for each bit of the inputs value for this entry...*/ for (j=0; jnum_inputs; j++) { /* retrieve the current input bit... */ in.state = INPUT_STATE(in[j]); /* ...& compare to the corresponding inputs[i] value. */ err = cm_compare_to_inputs(states,i,j,in.state); /* break if comparison was no-good... */ if ( 0 != err ) break; } /* if the comparison of the entire input word was good, break out of this loop too... */ if ( 0 == err ) break; } /* if err == 0, then a match was found...otherwise, we will not change states... */ if ( 0 == err ) { /* use "i" to retrieve the next state value: store this into current_state... */ states->current_state = states->next_state[i]; /* set indices for this new state */ err = cm_set_indices(states); if ( err == TRUE ) { cm_message_send(index_error); return; } /* Output new values... */ for (i=0; inum_outputs; i++) { /* retrieve output value */ cm_get_bits_value(states,states->index0,i,&out); OUTPUT_STATE(out[i]) = out.state; OUTPUT_STRENGTH(out[i]) = out.strength; OUTPUT_DELAY(out[i]) = PARAM(clk_delay); } } else { /* no change in state or in output */ for (i=0; inum_outputs; i++) { OUTPUT_CHANGED(out[i]) = FALSE; } } break; case ZERO: case UNKNOWN: /* no change in state or in output */ for (i=0; inum_outputs; i++) { OUTPUT_CHANGED(out[i]) = FALSE; } break; } } else { /* input value must have changed... return previous output value. */ for (i=0; inum_outputs; i++) { OUTPUT_CHANGED(out[i]) = FALSE; } } } else { /* Reset is active... return previous output values. */ for (i=0; inum_outputs; i++) { OUTPUT_CHANGED(out[i]) = FALSE; } } } } } tmpk8ny_4pz/src/xspice/icm/digital/.gitignore0000644000175000017500000000014713546075722021421 0ustar carstencarsten/digital.cm /cmextrn.h /cminfo.h /dlmain.c /objects.inc /udnextrn.h /udninfo.h /*/*.c !/*/udnfunc.c tmpk8ny_4pz/src/xspice/icm/digital/modpath.lst0000644000175000017500000000034013546075722021604 0ustar carstencarstenadc_bridge dac_bridge d_and d_buffer d_dff d_dlatch d_fdiv d_genlut d_inverter d_jkff d_lut d_nand d_nor d_open_c d_open_e d_or d_osc d_pulldown d_pullup d_ram d_source d_srff d_srlatch d_state d_tff d_tristate d_xnor d_xor tmpk8ny_4pz/src/xspice/icm/spice2poly/0000755000175000017500000000000013546075722020103 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/spice2poly/udnpath.lst0000644000175000017500000000000013546075722022260 0ustar carstencarstentmpk8ny_4pz/src/xspice/icm/spice2poly/icm_spice2poly/0000755000175000017500000000000013546075722023024 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/spice2poly/icm_spice2poly/ifspec.ifs0000644000175000017500000000312513546075722025001 0ustar carstencarsten/* =========================================================================== FILE ifspec.ifs MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the definition of a code model polynomial controlled source compatible with SPICE 2G6 poly sources. INTERFACES None. REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ NAME_TABLE: Spice_Model_Name: spice2poly C_Function_Name: spice2poly Description: "2G6 compatible polynomial controlled source" PORT_TABLE: Port_Name: in out Description: "input" "output" Direction: in out Default_Type: vd vd Allowed_Types: [vd,id,vnam] [vd,id] Vector: yes no Vector_Bounds: [1 -] - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: coef Description: "2G6 compatible spice card coefficient list" Data_Type: real Default_Value: - Limits: - Vector: yes Vector_Bounds: [2 -] Null_Allowed: no STATIC_VAR_TABLE: Static_Var_Name: acgains Data_Type: real Description: "Partial derivatives from DC analysis used for AC gains" Vector: yes tmpk8ny_4pz/src/xspice/icm/spice2poly/icm_spice2poly/README0000644000175000017500000000364513546075722023714 0ustar carstencarstenThis directory holds a codemodel which enables ngspice to handle SPICE 2 POLY attributes on controlled sources. In short, when a SPICE 2 netlist is read in, any controlled sources with POLY attributes are translated into codemodel devices with an associated .model which invokes spice2poly to evaluate the polynomial. To use this model, you need to do the following: 1. Compile the rest of ngspice/tclspice in the usual way from the base directory. 2. Download and install SPICE Opus (available from http://www.fe.uni-lj.si/ ). From this you need the program cmpp, as well as some of the include files. 3. Edit the Makefile in this directory and make the variable CMPPDIR point to the base location of your Opus installation. 4. Edit the Makefile in the directory above (..) and make the variable CMPDIR point to the base location of your Opus installation. 5. Do "make" in the directory above (..). The makefiles are set up to do all the necessary stuff to turn the spice2poly sources into a shared object named spice2poly.cm which you can load into ngspice. (Alternatively, you can do "make codemodels" from $(top_srcdir); I have included codemodels as a target which cd's into the directory below and does "make".) 6. Read the codemodel into ngspice in the following way: ngspice 1 -> codemodel /usr/local/src/tclspice-0.2.10/src/xspice/icm/spice2poly.cm (Of course, you should point to the location where *you* built spice2poly.cm!) You might want to put this invocation into your spinit file (which usually lives in $(top_srcdir)/src/). 7. Then read in your SPICE netlist. SPICE 2 POLY attributes in controlled sources will be translated into .models invoking the spice2poly codemodel. You should be able to run ngspice and simulate in the usual way! ---------------------------------------------------------------------- Please send any comments/questions/bug reports to: Stuart Brorson sdb@cloud9.net -- SDB 6.19.2003 tmpk8ny_4pz/src/xspice/icm/spice2poly/icm_spice2poly/cfunc.mod0000644000175000017500000002110013546075722024615 0ustar carstencarsten/* =========================================================================== FILE cfunc.mod MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the definition of a code model polynomial controlled source compatible with SPICE 2G6 poly sources. INTERFACES spice2poly() REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ /* This code model implements the non-linear polynomial controlled sources available in SPICE 2G6. An automatic translator added into the simulator front end is used to map 2G6 syntax into a call to this model in the required syntax. This model may also be called directly as follows: a1 [ ] xxx .model xxx spice2poly ( coef = [ ] ) Refer to the 2G6 User Guide for an explanation of the coefficients. This model is patterned after the FORTRAN code used in the 2G6 simulator. Function cm_poly() below performs the functions of subroutines NLCSRC and EVPOLY. Function evterm() performs the function of subroutine EVTERM, and function nxtpwr() performs the function of subroutine NXTPWR. */ #include /* SPICE 2G6 type utility functions */ static double evterm(double x, int n); static void nxtpwr(int *pwrseq, int pdim); static void cm_spice2poly_callback(ARGS, Mif_Callback_Reason_t reason) { switch (reason) { case MIF_CB_DESTROY: { Mif_Inst_Var_Data_t *p = STATIC_VAR_INST(acgains); if(p->element) { free(p->element); p->element = NULL; } break; } } } void spice2poly (ARGS) { int num_inputs; /* Number of inputs to model */ int num_coefs; /* Number of coefficients */ int *exp; /* List of exponents in products */ /* One for each input */ int i; /* Counter */ int j; /* Counter */ int k; /* Counter */ double *in; /* Values of inputs to model */ double *coef; /* Values of coefficients */ double sum; /* Temporary for accumulating sum of terms */ double product; /* Temporary for accumulating product */ /* Get number of input values */ num_inputs = PORT_SIZE(in); /* If this is the first call to the model, allocate the static variable */ /* array */ if(INIT) { CALLBACK = cm_spice2poly_callback; Mif_Inst_Var_Data_t *p = STATIC_VAR_INST(acgains); p -> size = num_inputs; p -> element = (Mif_Value_t *) malloc((size_t) num_inputs * sizeof(Mif_Value_t)); for(i = 0; i < num_inputs; i++) STATIC_VAR(acgains[i]) = 0.0; } /* If analysis type is AC, use the previously computed DC partials */ /* for the AC gains */ if(ANALYSIS == MIF_AC) { for(i = 0; i < num_inputs; i++) { AC_GAIN(out,in[i]).real = STATIC_VAR(acgains[i]); AC_GAIN(out,in[i]).imag = 0.0; } return; } /* Get input values and coefficients to local storage for faster access */ in = (double *) malloc((size_t) num_inputs * sizeof(double)); for(i = 0; i < num_inputs; i++) in[i] = INPUT(in[i]); num_coefs = PARAM_SIZE(coef); coef = (double *) malloc((size_t) num_coefs * sizeof(double)); for(i = 0; i < num_coefs; i++) coef[i] = PARAM(coef[i]); /* Allocate the array of exponents used in computing the poly terms */ exp = (int *) malloc((size_t) num_inputs * sizeof(int)); /* Initialize the exponents to zeros */ for(i = 0; i < num_inputs; i++) exp[i] = 0; /* Compute the output of the source by summing the required products */ for(i = 1, sum = coef[0]; i < num_coefs; i++) { /* Get the list of powers for the product terms in this term of the sum */ nxtpwr(exp, num_inputs); /* Form the product of the inputs taken to the required powers */ for(j = 0, product = 1.0; j < num_inputs; j++) product *= evterm(in[j], exp[j]); /* Add the product times the appropriate coefficient into the sum */ sum += coef[i] * product; } OUTPUT(out) = sum; /* Compute and output the partials for each input */ for(i = 0; i < num_inputs; i++) { /* Reinitialize the exponent list to zeros */ for(j = 0; j < num_inputs; j++) exp[j] = 0; /* Compute the partials by summing the required products */ for(j = 1, sum = 0.0; j < num_coefs; j++) { /* Get the list of powers for the product terms in this term of the sum */ nxtpwr(exp, num_inputs); /* If power for input for which partial is being evaluated */ /* is zero, the term is a constant, so the partial is zero */ if(exp[i] == 0) continue; /* Form the product of the inputs taken to the required powers */ for(k = 0, product = 1.0; k < num_inputs; k++) { /* If input is not the one for which the partial is being taken */ /* take the term to the specified exponent */ if(k != i) product *= evterm(in[k], exp[k]); /* else, take the derivative of this term as n*x**(n-1) */ else product *= exp[k] * evterm(in[k], exp[k] - 1); } /* Add the product times the appropriate coefficient into the sum */ sum += coef[j] * product; } PARTIAL(out,in[i]) = sum; /* If this is DC analysis, save the partial for use as AC gain */ /* value in an AC analysis */ if(ANALYSIS == MIF_DC) STATIC_VAR(acgains[i]) = sum; } /* Free the allocated items and return */ free(in); free(coef); free(exp); return; } /* Function evterm computes the value of x**n */ static double evterm( double x, int n) { double product; /* Temporary accumlator for forming the product */ product = 1.0; while(n > 0) { product *= x; n--; } return(product); } /* This function is a literal translation of subroutine NXTPWR in SPICE 2G6. This was done to guarantee compatibility with the ordering of coefficients used by 2G6. The 2G6 User Guide does not completely define the algorithm used and the GOTO loaded FORTRAN code is difficult to unravel. Therefore, a one-to-one translation was deemed the safest approach. No attempt is made to document the function statements since no documentaton is available in the 2G6 code. However, it can be noted that the code appears to generate the exponents of the product terms in the sum-of-products produced by the following expansion for two and three dimensional polynomials: 2D (a + b) ** n 3D (a + (b + c)) ** n where n begins at 1 and increments as needed for as many terms as there are coefficients on the polynomial source SPICE deck card, and where terms that are identical under the laws of associativity are dropped. Thus, for example, the exponents for the following sums are produced: 2D a + b + a**2 + ab + b**2 + c**3 + ... 3D a + b + c + a**2 + a*b + a*c + b**2 + bc + c**2 + a**3 + ... */ /* Define a macro to tranlate between FORTRAN-style array references */ /* and C-style array references */ #define PWRSEQ(x) pwrseq[x - 1] static void nxtpwr( int *pwrseq, /* Array of exponents */ int pdim) { int i; int k; int km1; int psum; if(pdim == 1) goto stmt80; k = pdim; stmt10: if(PWRSEQ(k) != 0) goto stmt20; k = k - 1; if(k != 0) goto stmt10; goto stmt80; stmt20: if(k == pdim) goto stmt30; PWRSEQ(k) = PWRSEQ(k) - 1; PWRSEQ(k+1) = PWRSEQ(k+1) + 1; goto stmt100; stmt30: km1 = k - 1; for(i = 1; i <= km1; i++) if(PWRSEQ(i) != 0) goto stmt50; /*stmt40:*/ PWRSEQ(1) = PWRSEQ(pdim) + 1; PWRSEQ(pdim) = 0; goto stmt100; stmt50: psum = 1; k = pdim; stmt60: if(PWRSEQ(k-1) >= 1) goto stmt70; psum = psum + PWRSEQ(k); PWRSEQ(k) = 0; k = k - 1; goto stmt60; stmt70: PWRSEQ(k) = PWRSEQ(k) + psum; PWRSEQ(k-1) = PWRSEQ(k-1) - 1; goto stmt100; stmt80: PWRSEQ(1) = PWRSEQ(1) + 1; stmt100: return; } tmpk8ny_4pz/src/xspice/icm/spice2poly/.gitignore0000644000175000017500000000015213546075722022071 0ustar carstencarsten/spice2poly.cm /cmextrn.h /cminfo.h /dlmain.c /objects.inc /udnextrn.h /udninfo.h /*/*.c !/*/udnfunc.c tmpk8ny_4pz/src/xspice/icm/spice2poly/modpath.lst0000644000175000017500000000001713546075722022261 0ustar carstencarstenicm_spice2poly tmpk8ny_4pz/src/xspice/icm/README0000644000175000017500000000376313546075722016703 0ustar carstencarstenThis directory holds a codemodel which enables ngspice to handle SPICE 2 POLY attributes on controlled sources. In short, when a SPICE 2 netlist is read in, any controlled sources with POLY attributes are translated into codemodel devices with an associated .model which invokes spice2poly to evaluate the polynomial. To use this model, you need to do the following: 1. Compile the rest of ngspice/tclspice in the usual way from the base directory. Make sure you do configure --enable-xspice when configuring. 2. Download and install SPICE Opus (available from http://www.fe.uni-lj.si/). From this you need the program cmpp, as well as some of the include files. 3. Edit the Makefile in this directory and make the variable CMPPDIR point to the base location of your Opus installation. (Hint: I place it in /usr/local/opus.) 4. Edit the Makefile in the directory below (icm_spice2poly/) and make the variable CMPDIR point to the base location of your Opus installation. 5. Do "make" in this directory. The makefiles are set up to do all the necessary stuff to turn the spice2poly sources into a shared object named spice2poly.cm which you can load into ngspice. (Alternatively, you can do "make codemodels" from $(top_srcdir); I have included codemodels as a target which cd's into this directory and does "make".) 6. Read the codemodel into ngspice in the following way: ngspice 1 -> codemodel /usr/local/lib/spice/spice2poly.cm (Of course, you should point to the location where *you* built spice2poly.cm!) You might want to put this invocation into your spinit file (which usually lives in $(top_srcdir)/src/). 7. Then read in your SPICE netlist. SPICE 2 POLY attributes in controlled sources will be translated into .models invoking the spice2poly codemodel. You should be able to run ngspice and simulate in the usual way! ---------------------------------------------------------------------- Please send any comments/questions/bug reports to: Stuart Brorson sdb@cloud9.net -- SDB 6.19.2003 tmpk8ny_4pz/src/xspice/icm/table/0000755000175000017500000000000013546075722017101 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/table/udnpath.lst0000644000175000017500000000000013546075722021256 0ustar carstencarstentmpk8ny_4pz/src/xspice/icm/table/table3D/0000755000175000017500000000000013546075722020357 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/table/table3D/ifspec.ifs0000644000175000017500000000450413546075722022336 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 2015 Holger Vogt AUTHORS 06 Nov 2015 Holger Vogt SUMMARY This file contains the interface specification file for the 3D table code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_table3D Spice_Model_Name: table3d Description: "3D table model" PORT_TABLE: Port_Name: inx iny inz Description: "inputx" "inputy" "inputz" Direction: in in in Default_Type: v v v Allowed_Types: [v,vd,i,id,vnam] [v,vd,i,id,vnam] [v,vd,i,id,vnam] Vector: no no no Vector_Bounds: - - - Null_Allowed: no no no PORT_TABLE: Port_Name: out Description: "output" Direction: out Default_Type: i Allowed_Types: [v,vd,i,id] Vector: no Vector_Bounds: - Null_Allowed: no PARAMETER_TABLE: Parameter_Name: order verbose Description: "order" "verbose" Data_Type: int int Default_Value: 3 0 Limits: [2 -] [0 2] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: offset gain Description: "offset" "gain" Data_Type: real real Default_Value: 0.0 1.0 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: file Description: "file name" Data_Type: string Default_Value: "3D-table-model.txt" Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes STATIC_VAR_TABLE: Static_Var_Name: locdata Description: "local static data" Data_Type: pointer tmpk8ny_4pz/src/xspice/icm/table/table3D/cfunc.mod0000644000175000017500000006071413546075722022166 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE table3D/cfunc.mod Copyright 2015 Holger Vogt 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 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA AUTHORS 03 Nov 2015 Holger Vogt MODIFICATIONS 10 Aug 2018 Holger Vogt SUMMARY This file contains the model-specific routines used to functionally describe the 3D table code model used to read and interpolate a value from a 3D table from a file. The essentially non-oscillatory (ENO) interpolation in 3-D (eno3.c) is taken from the Madagascar Project at http://www.ahay.org/wiki/Main_Page Currently ENO is used only to obtain the derivatives, the data values are obtained by trilinear interpolation. This combination allows op convergence for some data tables (no guarantee though). INTERFACES FILE ROUTINE CALLED N/A N/A REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include #include #include #include #include #include #include #include "mada/eno2.h" #include "mada/eno3.h" /*=== CONSTANTS ========================*/ #define OK 0 #define FAIL 1 /*=== MACROS ===========================*/ #if defined(__MINGW32__) || defined(_MSC_VER) #define DIR_PATHSEP "\\" #else #define DIR_PATHSEP "/" #endif #if defined(_MSC_VER) #define strdup _strdup #endif /*=== LOCAL VARIABLES & TYPEDEFS =======*/ struct filesource_state { FILE *fp; long pos; unsigned char atend; }; typedef struct { int ix; /* size of array in x */ int iy; /* size of array in y */ int iz; /* size of array in z */ struct filesource_state *state; /* the storage array for the filesource status. */ int init_err; sf_eno3 newtable; /* the table, code borrowed from madagascar project */ double *xcol; /* array of doubles in x */ double *ycol; /* array of doubles in y */ double *zcol; /* array of doubles in z */ double ***table; } Local_Data_t; /*********************/ /* 3d geometry types */ /*********************/ typedef char line_t[82]; /* A SPICE size line. <= 80 characters plus '\n\0' */ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ extern int findCrossOver(double arr[], int low, int high, double x); extern double TrilinearInterpolation(double x, double y, double z, int xind, int yind, int zind, double ***td); extern char *CNVgettok(char **s); /*============================================================================== FUNCTION cnv_get_spice_value() AUTHORS ??? Bill Kuhn MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY This function takes as input a string token from a SPICE deck and returns a floating point equivalent value. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns the floating point value in pointer *p_value. Also returns an integer representing successful completion. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== Static CNV_get_spice_value ROUTINE =============*/ /* Function takes as input a string token from a SPICE deck and returns a floating point equivalent value. */ static int cnv_get_spice_value(char *str, /* IN - The value text e.g. 1.2K */ double *p_value) /* OUT - The numerical value */ { /* the following were "int4" devices - jpm */ size_t len; size_t i; int n_matched; line_t val_str; char c = ' '; char c1; double scale_factor; double value; /* Scan the input string looking for an alpha character that is not */ /* 'e' or 'E'. Such a character is assumed to be an engineering */ /* suffix as defined in the Spice 2G.6 user's manual. */ len = strlen(str); if (len > sizeof(val_str) - 1) len = sizeof(val_str) - 1; for (i = 0; i < len; i++) { c = str[i]; if (isalpha_c(c) && (c != 'E') && (c != 'e')) break; else if (isspace_c(c)) break; else val_str[i] = c; } val_str[i] = '\0'; /* Determine the scale factor */ if ((i >= len) || (! isalpha_c(c))) scale_factor = 1.0; else { if (isupper_c(c)) c = tolower_c(c); switch (c) { case 't': scale_factor = 1.0e12; break; case 'g': scale_factor = 1.0e9; break; case 'k': scale_factor = 1.0e3; break; case 'u': scale_factor = 1.0e-6; break; case 'n': scale_factor = 1.0e-9; break; case 'p': scale_factor = 1.0e-12; break; case 'f': scale_factor = 1.0e-15; break; case 'm': i++; if (i >= len) { scale_factor = 1.0e-3; break; } c1 = str[i]; if (!isalpha_c(c1)) { scale_factor = 1.0e-3; break; } if (islower_c(c1)) c1 = toupper_c(c1); if (c1 == 'E') scale_factor = 1.0e6; else if (c1 == 'I') scale_factor = 25.4e-6; else scale_factor = 1.0e-3; break; default: scale_factor = 1.0; } } /* Convert the numeric portion to a float and multiply by the */ /* scale factor. */ n_matched = sscanf(val_str, "%le", &value); if (n_matched < 1) { *p_value = 0.0; return FAIL; } *p_value = value * scale_factor; return OK; } static void cm_table3D_callback(ARGS, Mif_Callback_Reason_t reason) { switch (reason) { case MIF_CB_DESTROY: { int i, j; Local_Data_t *loc = STATIC_VAR (locdata); free(loc->state); for (i = 0; i < loc->iz; i++) { for (j = 0; j < loc->iy; j++) free(loc->table[i][j]); free(loc->table[i]); } free(loc->table); free(loc->xcol); free(loc->ycol); free(loc->zcol); sf_eno3_close (loc->newtable); free(loc); break; } } } /*============================================================================== FUNCTION void cm_table3D() AUTHORS 08 Nov 2015 Holger Vogt MODIFICATIONS SUMMARY This function implements 3D table code model. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE INPUT FILE SPEC * Title (comments preceded by * ignored) * table size ix iy * x row independent variables x0 x1 x2 x3 ... xix-1 y column independent variables y0 y1 y2 y3 ... yiy-1 * table x0y0 x1y0 x2y0 ... xix-1y0 ... x0yiy-1 x1yiy-1 x2yiy-1 ... xix-1yiy-1 ==============================================================================*/ /*=== CM_table3D ROUTINE ===*/ void cm_table3D(ARGS) /* structure holding parms, inputs, outputs, etc. */ { int size, xind, yind, zind; double xval, yval, zval, xoff, yoff, zoff, xdiff, ydiff, zdiff; double derivval[3], outval; Local_Data_t *loc; /* Pointer to local static data, not to be included in the state vector */ Mif_Complex_t ac_gain; size = PORT_SIZE(out); if (INIT == 1) { int i, j; int ix = 0, /* elements in a row */ iy = 0, /* number of rows */ iz = 0; /* number of 2D tables */ double ***table_data; double tmp; char *cFile, *cThisPtr, *cThisLine, *cThisLinePtr; int isNewline; /* Boolean indicating we've read a CR or LF */ size_t lFileLen; /* Length of file */ size_t lFileRead; /* Length of file read in */ long lIndex; /* Index into cThisLine array */ int lLineCount; /* Current line number */ size_t lStartPos; /* Offset of start of current line */ size_t lTotalChars; /* Total characters read */ int lTableCount; /* Number of tables */ int interporder; /* order of interpolation for eno */ CALLBACK = cm_table3D_callback; /* allocate static storage for *loc */ STATIC_VAR (locdata) = calloc (1, sizeof(Local_Data_t)); loc = STATIC_VAR (locdata); /* Allocate storage for internal state */ loc->state = (struct filesource_state*) malloc(sizeof(struct filesource_state)); loc->ix = loc->iy = loc->iz = 0; loc->init_err = 0; /* open file */ loc->state->fp = fopen_with_path(PARAM(file), "r"); loc->state->pos = 0; loc->state->atend = 0; if (!loc->state->fp) { char *lbuffer, *pp; lbuffer = getenv("NGSPICE_INPUT_DIR"); if (lbuffer && *lbuffer) { pp = (char*) malloc(strlen(lbuffer) + strlen(DIR_PATHSEP) + strlen(PARAM(file)) + 1); sprintf(pp, "%s%s%s", lbuffer, DIR_PATHSEP, PARAM(file)); loc->state->fp = fopen(pp, "r"); free(pp); } } struct stat st; if (!loc->state->fp || fstat(fileno(loc->state->fp), &st)) { cm_message_printf("cannot open file %s", PARAM(file)); loc->state->atend = 1; loc->init_err = 1; return; } /* get file length */ lFileLen = (size_t) st.st_size; /* create string to hold the whole file */ cFile = calloc(lFileLen + 1, sizeof(char)); /* create another string long enough for file manipulation */ cThisLine = calloc(lFileLen + 1, sizeof(char)); if (cFile == NULL || cThisLine == NULL) { cm_message_printf("Insufficient memory to read file %s", PARAM(file)); loc->state->atend = 1; loc->init_err = 1; if(cFile) free(cFile); if(cThisLine) free(cThisLine); return; } /* read whole file into cFile */ lFileRead = fread(cFile, sizeof(char), lFileLen, loc->state->fp); fclose(loc->state->fp); /* Number of chars read may be less than lFileLen, because /r are skipt by 'fread' */ cFile[lFileRead] = '\0'; cThisPtr = cFile; cThisLinePtr = cThisLine; lLineCount = 0L; lTotalChars = 0L; while (*cThisPtr) { /* Read until reaching null char */ lIndex = 0L; /* Reset counters and flags */ isNewline = 0; lStartPos = lTotalChars; while (*cThisPtr) { /* Read until reaching null char */ if (!isNewline) { /* Haven't read a LF yet */ if (*cThisPtr == '\n') /* This char is a LF */ isNewline = 1; /* Set flag */ } else if (*cThisPtr != '\n') /* Already found LF */ break; /* Done with line */ cThisLinePtr[lIndex++] = *cThisPtr++; /* Add char to output and increment */ lTotalChars++; } cThisLinePtr[lIndex] = '\0'; /* Terminate the string */ lLineCount++; /* Increment the line counter */ /* continue if comment or empty */ if (cThisLinePtr[0] == '*' || cThisLinePtr[0] == '\n') { lLineCount--; /* we count only real lines */ continue; } if (lLineCount == 1) { cnv_get_spice_value(cThisLinePtr, &tmp); loc->ix = ix = (int) tmp; /* generate row data structure (x) */ loc->xcol = (double*) calloc((size_t) ix, sizeof(double)); } else if (lLineCount == 2) { cnv_get_spice_value(cThisLinePtr, &tmp); loc->iy = iy = (int) tmp; /* generate column data structure (y) */ loc->ycol = (double*) calloc((size_t) iy, sizeof(double)); } else if (lLineCount == 3) { cnv_get_spice_value(cThisLinePtr, &tmp); loc->iz = iz = (int) tmp; /* generate column data structure (y) */ loc->zcol = (double*) calloc((size_t) iz, sizeof(double)); } else if (lLineCount == 4) { char *token = CNVgettok(&cThisLinePtr); i = 0; while (token) { if (i == ix) { cm_message_printf("Too many numbers in x row."); loc->init_err = 1; return; } cnv_get_spice_value(token, &loc->xcol[i++]); free(token); token = CNVgettok(&cThisLinePtr); } if (i < ix) { cm_message_printf("Not enough numbers in x row."); loc->init_err = 1; return; } } else if (lLineCount == 5) { char *token = CNVgettok(&cThisLinePtr); i = 0; while (token) { if (i == iy) { cm_message_printf("Too many numbers in y row."); loc->init_err = 1; return; } cnv_get_spice_value(token, &loc->ycol[i++]); free(token); token = CNVgettok(&cThisLinePtr); } if (i < iy) { cm_message_printf("Not enough numbers in y row."); loc->init_err = 1; return; } } else if (lLineCount == 6) { char *token = CNVgettok(&cThisLinePtr); i = 0; while (token) { if (i == iz) { cm_message_printf("Too many numbers in z row."); loc->init_err = 1; return; } cnv_get_spice_value(token, &loc->zcol[i++]); free(token); token = CNVgettok(&cThisLinePtr); } if (i < iz) { cm_message_printf("Not enough numbers in z row."); loc->init_err = 1; return; } /* jump out of while loop to read in the table */ break; } } /* generate table core */ interporder = PARAM(order); /* boundary limits set to param 'order' aren't recognized, so limit them here */ if (interporder < 2) { cm_message_printf("Parameter Order=%d not possible, set to minimum value 2", interporder); interporder = 2; } /* int order : interpolation order, int n1, int n2, int n3 : data dimensions */ loc->newtable = sf_eno3_init(interporder, ix, iy, iz); /* create table_data in memory */ /* data [n3][n2][n1] */ table_data = calloc((size_t) iy, sizeof(double *)); for (i = 0; i < iz; i++) { table_data[i] = calloc((size_t) iy, sizeof(double *)); for (j = 0; j < iy; j++) table_data[i][j] = calloc((size_t) ix, sizeof(double)); } loc->table = table_data; /* continue reading from cFile */ for (lTableCount = 0; lTableCount < iz; lTableCount++) { lLineCount = 0; while (lLineCount < iy) { char *token; lIndex = 0L; /* Reset counters and flags */ isNewline = 0; lStartPos = lTotalChars; /* read a line */ while (*cThisPtr) { /* Read until reaching null char */ if (!isNewline) { /* Haven't read a CR or LF yet */ if (*cThisPtr == '\n') /* This char is LF */ isNewline = 1; /* Set flag */ } else if (*cThisPtr != '\n') /* Already found LF */ break; /* Done with line */ cThisLinePtr[lIndex++] = *cThisPtr++; /* Add char to output and increment */ lTotalChars++; } cThisLinePtr[lIndex] = '\0'; /* Terminate the string */ /* continue if comment or empty */ if (cThisLinePtr[0] == '*' || cThisLinePtr[0] == '\0') { if (lTotalChars >= lFileLen) { cm_message_printf("Not enough data in file %s", PARAM(file)); loc->init_err = 1; return; } continue; } token = CNVgettok(&cThisLinePtr); i = 0; while (token) { double tmpval; if (i == ix) { cm_message_printf("Too many numbers in y row no. %d of table %d.", lLineCount, lTableCount); loc->init_err = 1; return; } /* read table core from cFile, fill local static table structure table_data */ cnv_get_spice_value(token, &tmpval); table_data[lTableCount][lLineCount][i++] = tmpval; free(token); token = CNVgettok(&cThisLinePtr); } if (i < ix) { cm_message_printf("Not enough numbers in y row no. %d of table %d.", lLineCount, lTableCount); loc->init_err = 1; return; } lLineCount++; } } /* fill table data into eno3 structure */ sf_eno3_set(loc->newtable, table_data /* data [n3][n2][n1] */); /* free file memory allocated */ free(cFile); free(cThisLine); } /* end of initialization "if (INIT == 1)" */ loc = STATIC_VAR (locdata); /* return immediately if there was an initialization error */ if (loc->init_err == 1) return; /* get input x, y, z; find corresponding indices; get x and y offsets; call interpolation functions with value and derivative */ xval = INPUT(inx); yval = INPUT(iny); zval = INPUT(inz); /* check table ranges */ if (xval < loc->xcol[0] || xval > loc->xcol[loc->ix - 1]) { if (PARAM(verbose) > 0) cm_message_printf("x value %g exceeds table limits, \nplease enlarge range of your table", xval); return; } if (yval < loc->ycol[0] || yval > loc->ycol[loc->iy - 1]) { if (PARAM(verbose) > 0) cm_message_printf("y value %g exceeds table limits, \nplease enlarge range of your table", yval); return; } if (zval < loc->zcol[0] || zval > loc->zcol[loc->iz - 1]) { if (PARAM(verbose) > 0) cm_message_printf("z value %g exceeds table limits, \nplease enlarge range of your table", zval); return; } /* find index */ /* something like binary search to get the index */ xind = findCrossOver(loc->xcol, 0, loc->ix - 1, xval); /* find index with minimum distance between xval and row value if (fabs(loc->xcol[xind + 1] - xval) < fabs(xval - loc->xcol[xind])) xind++; */ xoff = xval - loc->xcol[xind]; yind = findCrossOver(loc->ycol, 0, loc->iy - 1, yval); /* find index with minimum distance between yval and column value if (fabs(loc->ycol[yind + 1] - yval) < fabs(yval - loc->ycol[yind])) yind++; */ yoff = yval - loc->ycol[yind]; zind = findCrossOver(loc->zcol, 0, loc->iz - 1, zval); /* find index with minimum distance between zval and table value if (fabs(loc->zcol[zind + 1] - zval) < fabs(zval - loc->zcol[zind])) zind++; */ zoff = zval - loc->zcol[zind]; /* find local difference around index of independent row and column values */ if (xind == loc->ix - 1) xdiff = loc->xcol[xind] - loc->xcol[xind - 1]; else if (xind == 0) xdiff = loc->xcol[xind + 1] - loc->xcol[xind]; else xdiff = 0.5 * (loc->xcol[xind + 1] - loc->xcol[xind - 1]); if (yind == loc->iy - 1) ydiff = loc->ycol[yind] - loc->ycol[yind - 1]; else if (yind == 0) ydiff = loc->ycol[yind + 1] - loc->ycol[yind]; else ydiff = 0.5 * (loc->ycol[yind + 1] - loc->ycol[yind - 1]); if (zind == loc->iz - 1) zdiff = loc->zcol[zind] - loc->zcol[zind - 1]; else if (zind == 0) zdiff = loc->zcol[zind + 1] - loc->zcol[zind]; else zdiff = 0.5 * (loc->zcol[zind + 1] - loc->zcol[zind - 1]); /* Essentially non-oscillatory (ENO) interpolation to obtain the derivatives only. Using outval for now yields ngspice op non-convergence */ sf_eno3_apply (loc->newtable, xind, yind, zind, /* grid location */ xoff, yoff, zoff, /* offset from grid */ &outval, /* output data value */ derivval, /* output derivatives [3] */ DER /* what to compute [FUNC, DER, BOTH] */ ); /* xind yind zind may become too large */ if (xind == loc->ix - 1) xind--; if (yind == loc->iy - 1) yind--; if (zind == loc->iz - 1) zind--; /* overwrite outval from sf_eno3_apply by trilinear interpolation */ outval = TrilinearInterpolation(xoff / (loc->xcol[xind + 1] - loc->xcol[xind]), yoff / (loc->ycol[yind + 1] - loc->ycol[yind]), zoff / (loc->zcol[zind + 1] - loc->zcol[zind]), xind, yind, zind, loc->table); if (ANALYSIS != MIF_AC) { double xderiv, yderiv, zderiv, outv; outv = PARAM(offset) + PARAM(gain) * outval; OUTPUT(out) = outv; xderiv = PARAM(gain) * derivval[0] / xdiff; PARTIAL(out, inx) = xderiv; yderiv = PARAM(gain) * derivval[1] / ydiff; PARTIAL(out, iny) = yderiv; zderiv = PARAM(gain) * derivval[2] / zdiff; PARTIAL(out, inz) = zderiv; if (PARAM(verbose) > 1) cm_message_printf("\nI: %g, xval: %g, yval: %g, zval: %g, xderiv: %g, yderiv: %g, zderiv: %g", outv, xval, yval, zval, xderiv, yderiv, zderiv); } else { ac_gain.real = PARAM(gain) * derivval[0] / xdiff; ac_gain.imag= 0.0; AC_GAIN(out, inx) = ac_gain; ac_gain.real = PARAM(gain) * derivval[1] / ydiff; ac_gain.imag= 0.0; AC_GAIN(out, iny) = ac_gain; } } /* These includes add functions from extra source code files, * still using the standard XSPICE procedure of cmpp-ing cfunc.mod * and then only compiling the resulting *.c file. */ #include "../support/gettokens.c" /* reading tokens */ #include "../support/interp.c" /* 2D and 3D linear interpolation */ #include "../mada/alloc.c" /* eno interpolation from madagascar project */ #include "../mada/eno.c" /* eno interpolation from madagascar project */ #include "../mada/eno2.c" /* eno interpolation from madagascar project */ #include "../mada/eno3.c" /* eno interpolation from madagascar project */ tmpk8ny_4pz/src/xspice/icm/table/support/0000755000175000017500000000000013546075722020615 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/table/support/interp.c0000644000175000017500000001150113546075722022260 0ustar carstencarsten#include #include #include #include #include /*********************/ /* 3d geometry types */ /*********************/ typedef struct Point3Struct { /* 3d point */ double x, y, z; } Point3; typedef Point3 Vector3; //FIXME double BilinearInterpolation(double q11, double q12, double q21, double q22, double x1, double x2, double y1, double y2, double x, double y); /* Function to find the cross over point (the point before which elements are smaller than or equal to x and after which greater than x) http://www.geeksforgeeks.org/find-k-closest-elements-given-value/ */ int findCrossOver(double arr[], int low, int high, double x) { int mid; // Base cases if (arr[high] <= x) // x is greater than all return high; if (arr[low] > x) // x is smaller than all return low; // Find the middle point mid = (low + high)/2; /* low + (high - low)/2 */ /* If x is same as middle element, then return mid */ if (arr[mid] <= x && arr[mid+1] > x) return mid; /* If x is greater than arr[mid], then either arr[mid + 1] is ceiling of x or ceiling lies in arr[mid+1...high] */ if (arr[mid] < x) return findCrossOver(arr, mid+1, high, x); return findCrossOver(arr, low, mid - 1, x); } /* https://helloacm.com/cc-function-to-compute-the-bilinear-interpolation/ */ double BilinearInterpolation(double q11, double q12, double q21, double q22, double x1, double x2, double y1, double y2, double x, double y) { double x2x1, y2y1, x2x, y2y, yy1, xx1; x2x1 = x2 - x1; y2y1 = y2 - y1; x2x = x2 - x; y2y = y2 - y; yy1 = y - y1; xx1 = x - x1; return 1.0 / (x2x1 * y2y1) * ( q11 * x2x * y2y + q21 * xx1 * y2y + q12 * x2x * yy1 + q22 * xx1 * yy1 ); } /* * C code from the article * "Tri-linear Interpolation" * by Steve Hill, sah@ukc.ac.uk * in "Graphics Gems IV", Academic Press, 1994 * */ #if 0 double trilinear(Point3 *p, double *d, int xsize, int ysize, int zsize, double def) { # define DENS(X, Y, Z) d[(X)+xsize*((Y)+ysize*(Z))] int x0, y0, z0, x1, y1, z1; double *dp, fx, fy, fz, d000, d001, d010, d011, d100, d101, d110, d111, dx00, dx01, dx10, dx11, dxy0, dxy1, dxyz; x0 = floor(p->x); fx = p->x - x0; y0 = floor(p->y); fy = p->y - y0; z0 = floor(p->z); fz = p->z - z0; x1 = x0 + 1; y1 = y0 + 1; z1 = z0 + 1; if (x0 >= 0 && x1 < xsize && y0 >= 0 && y1 < ysize && z0 >= 0 && z1 < zsize) { dp = &DENS(x0, y0, z0); d000 = dp[0]; d100 = dp[1]; dp += xsize; d010 = dp[0]; d110 = dp[1]; dp += xsize*ysize; d011 = dp[0]; d111 = dp[1]; dp -= xsize; d001 = dp[0]; d101 = dp[1]; } else { # define INRANGE(X, Y, Z) \ ((X) >= 0 && (X) < xsize && \ (Y) >= 0 && (Y) < ysize && \ (Z) >= 0 && (Z) < zsize) d000 = INRANGE(x0, y0, z0) ? DENS(x0, y0, z0) : def; d001 = INRANGE(x0, y0, z1) ? DENS(x0, y0, z1) : def; d010 = INRANGE(x0, y1, z0) ? DENS(x0, y1, z0) : def; d011 = INRANGE(x0, y1, z1) ? DENS(x0, y1, z1) : def; d100 = INRANGE(x1, y0, z0) ? DENS(x1, y0, z0) : def; d101 = INRANGE(x1, y0, z1) ? DENS(x1, y0, z1) : def; d110 = INRANGE(x1, y1, z0) ? DENS(x1, y1, z0) : def; d111 = INRANGE(x1, y1, z1) ? DENS(x1, y1, z1) : def; } /* linear interpolation from l (when a=0) to h (when a=1)*/ /* (equal to (a*h)+((1-a)*l) */ #define LERP(a,l,h) ((l)+(((h)-(l))*(a))) dx00 = LERP(fx, d000, d100); dx01 = LERP(fx, d001, d101); dx10 = LERP(fx, d010, d110); dx11 = LERP(fx, d011, d111); dxy0 = LERP(fy, dx00, dx10); dxy1 = LERP(fy, dx01, dx11); dxyz = LERP(fz, dxy0, dxy1); return dxyz; } #endif /* trilinear interpolation Paul Bourke July 1997 http://paulbourke.net/miscellaneous/interpolation/ */ double TrilinearInterpolation(double x, double y, double z, int xind, int yind, int zind, double ***td) { double V000, V100, V010, V001, V101, V011, V110, V111, Vxyz; V000 = td[zind][yind][xind]; V100 = td[zind][yind][xind+1]; V010 = td[zind][yind+1][xind]; V001 = td[zind+1][yind][xind]; V101 = td[zind+1][yind][xind+1]; V011 = td[zind+1][yind+1][xind]; V110 = td[zind][yind+1][xind+1]; V111 = td[zind+1][yind+1][xind+1]; Vxyz = V000 * (1 - x) * (1 - y) * (1 - z) + V100 * x * (1 - y) * (1 - z) + V010 * (1 - x) * y * (1 - z) + V001 * (1 - x) * (1 - y) * z + V101 * x * (1 - y) * z + V011 * (1 - x) * y * z + V110 * x * y * (1 - z) + V111 * x * y * z; return Vxyz; } tmpk8ny_4pz/src/xspice/icm/table/support/gettokens.c0000644000175000017500000000631213546075722022766 0ustar carstencarsten/*=== Static CNVgettok ROUTINE ================*/ /* Get the next token from the input string. The input string pointer is advanced to the following token and the token from the input string is copied to malloced storage and a pointer to that storage is returned. The original input string is undisturbed. */ #include #include #include #include #include /*=== CONSTANTS ========================*/ #define OK 0 #define FAIL 1 /* Type definition for each possible token returned. */ typedef enum token_type_s { CNV_NO_TOK, CNV_STRING_TOK } Cnv_Token_Type_t; extern char *CNVget_token(char **s, Cnv_Token_Type_t *type); /*=== MACROS ===========================*/ #if defined(__MINGW32__) || defined(_MSC_VER) #define DIR_PATHSEP "\\" #else #define DIR_PATHSEP "/" #endif #if defined(_MSC_VER) #define strdup _strdup #define snprintf _snprintf #endif char * CNVgettok(char **s) { char *buf; /* temporary storage to copy token into */ /*char *temp;*/ /* temporary storage to copy token into */ char *ret_str; /* storage for returned string */ int i; /* allocate space big enough for the whole string */ buf = (char *) malloc(strlen(*s) + 1); /* skip over any white space */ while (isspace_c(**s) || (**s == '=') || (**s == '(') || (**s == ')') || (**s == ',')) (*s)++; /* isolate the next token */ switch (**s) { case '\0': /* End of string found */ if (buf) free(buf); return NULL; default: /* Otherwise, we are dealing with a */ /* string representation of a number */ /* or a mess o' characters. */ i = 0; while ( (**s != '\0') && (! ( isspace_c(**s) || (**s == '=') || (**s == '(') || (**s == ')') || (**s == ',') ) ) ) { buf[i] = **s; i++; (*s)++; } buf[i] = '\0'; break; } /* skip over white space up to next token */ while (isspace_c(**s) || (**s == '=') || (**s == '(') || (**s == ')') || (**s == ',')) (*s)++; /* make a copy using only the space needed by the string length */ ret_str = (char *) malloc(strlen(buf) + 1); ret_str = strcpy(ret_str,buf); if (buf) free(buf); return ret_str; } /*=== Static CNVget_token ROUTINE =============*/ /* Get the next token from the input string together with its type. The input string pointer is advanced to the following token and the token from the input string is copied to malloced storage and a pointer to that storage is returned. The original input string is undisturbed. */ char * CNVget_token(char **s, Cnv_Token_Type_t *type) { char *ret_str; /* storage for returned string */ /* get the token from the input line */ ret_str = CNVgettok(s); /* if no next token, return */ if (ret_str == NULL) { *type = CNV_NO_TOK; return NULL; } /* else, determine and return token type */ switch (*ret_str) { default: *type = CNV_STRING_TOK; break; } return ret_str; } tmpk8ny_4pz/src/xspice/icm/table/table2D/0000755000175000017500000000000013546075722020356 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/table/table2D/ifspec.ifs0000644000175000017500000000412513546075722022334 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 2015 Holger Vogt AUTHORS 06 Nov 2015 Holger Vogt SUMMARY This file contains the interface specification file for the 2D table code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_table2D Spice_Model_Name: table2d Description: "2D table model" PORT_TABLE: Port_Name: inx iny out Description: "inputx" "inputy" "output" Direction: in in out Default_Type: v v i Allowed_Types: [v,vd,i,id,vnam] [v,vd,i,id,vnam] [v,vd,i,id] Vector: no no no Vector_Bounds: - - - Null_Allowed: no no no PARAMETER_TABLE: Parameter_Name: order verbose Description: "order" "verbose" Data_Type: int int Default_Value: 3 0 Limits: [2 -] [0 2] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: offset gain Description: "offset" "gain" Data_Type: real real Default_Value: 0.0 1.0 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: file Description: "file name" Data_Type: string Default_Value: "2D-table-model.txt" Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes STATIC_VAR_TABLE: Static_Var_Name: locdata Description: "local static data" Data_Type: pointer tmpk8ny_4pz/src/xspice/icm/table/table2D/cfunc.mod0000644000175000017500000005261213546075722022163 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE table2D/cfunc.mod Copyright 2015 Holger Vogt 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 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA AUTHORS 03 Nov 2015 Holger Vogt MODIFICATIONS 10 Aug 2018 Holger Vogt SUMMARY This file contains the model-specific routines used to functionally describe the 2D table code model used to read and interpolate a value from a 2D table from a file. The essentially non-oscillatory (ENO) interpolation in 2-D (eno2.c) is taken from the Madagascar Project at http://www.ahay.org/wiki/Main_Page Currently ENO is used only to obtain the derivatives, the data values are obtained by bilinear interpolation. This combination allows op convergence for some data tables (no guarantee though). INTERFACES FILE ROUTINE CALLED N/A N/A REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include #include #include #include #include #include #include #include "mada/eno2.h" /*=== CONSTANTS ========================*/ #define OK 0 #define FAIL 1 /*=== MACROS ===========================*/ #if defined(__MINGW32__) || defined(_MSC_VER) #define DIR_PATHSEP "\\" #else #define DIR_PATHSEP "/" #endif #if defined(_MSC_VER) #define strdup _strdup #endif /*=== LOCAL VARIABLES & TYPEDEFS =======*/ struct filesource_state { FILE *fp; long pos; unsigned char atend; }; typedef struct { int ix; /* size of array in x */ int iy; /* size of array in y */ struct filesource_state *state; /* the storage array for the filesource status. */ int init_err; sf_eno2 newtable; /* the table, code borrowed from madagascar project */ double *xcol; /* array of floats in x */ double *ycol; /* array of floats in y */ double **table; } Local_Data_t; /* Type definition for each possible token returned. */ typedef enum token_type_s {CNV_NO_TOK, CNV_STRING_TOK} Cnv_Token_Type_t; typedef char line_t[82]; /* A SPICE size line. <= 80 characters plus '\n\0' */ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ extern int findCrossOver(double arr[], int low, int high, double x); extern double BilinearInterpolation(double q11, double q12, double q21, double q22, double x1, double x2, double y1, double y2, double x, double y); extern char *CNVgettok(char **s); /*============================================================================== FUNCTION cnv_get_spice_value() AUTHORS ??? Bill Kuhn MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY This function takes as input a string token from a SPICE deck and returns a floating point equivalent value. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns the floating point value in pointer *p_value. Also returns an integer representing successful completion. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== Static CNV_get_spice_value ROUTINE =============*/ /* Function takes as input a string token from a SPICE deck and returns a floating point equivalent value. */ static int cnv_get_spice_value(char *str, /* IN - The value text e.g. 1.2K */ double *p_value) /* OUT - The numerical value */ { /* the following were "int4" devices - jpm */ size_t len; size_t i; int n_matched; line_t val_str; char c = ' '; char c1; double scale_factor; double value; /* Scan the input string looking for an alpha character that is not */ /* 'e' or 'E'. Such a character is assumed to be an engineering */ /* suffix as defined in the Spice 2G.6 user's manual. */ len = strlen(str); if (len > sizeof(val_str) - 1) len = sizeof(val_str) - 1; for (i = 0; i < len; i++) { c = str[i]; if (isalpha_c(c) && (c != 'E') && (c != 'e')) break; else if (isspace_c(c)) break; else val_str[i] = c; } val_str[i] = '\0'; /* Determine the scale factor */ if ((i >= len) || !isalpha_c(c)) scale_factor = 1.0; else { if (isupper_c(c)) c = tolower_c(c); switch (c) { case 't': scale_factor = 1.0e12; break; case 'g': scale_factor = 1.0e9; break; case 'k': scale_factor = 1.0e3; break; case 'u': scale_factor = 1.0e-6; break; case 'n': scale_factor = 1.0e-9; break; case 'p': scale_factor = 1.0e-12; break; case 'f': scale_factor = 1.0e-15; break; case 'm': i++; if (i >= len) { scale_factor = 1.0e-3; break; } c1 = str[i]; if (!isalpha_c(c1)) { scale_factor = 1.0e-3; break; } if (islower_c(c1)) c1 = toupper_c(c1); if (c1 == 'E') scale_factor = 1.0e6; else if (c1 == 'I') scale_factor = 25.4e-6; else scale_factor = 1.0e-3; break; default: scale_factor = 1.0; } } /* Convert the numeric portion to a float and multiply by the */ /* scale factor. */ n_matched = sscanf(val_str, "%le", &value); if (n_matched < 1) { *p_value = 0.0; return FAIL; } *p_value = value * scale_factor; return OK; } static void cm_table2D_callback(ARGS, Mif_Callback_Reason_t reason) { switch (reason) { case MIF_CB_DESTROY: { int i; Local_Data_t *loc = STATIC_VAR (locdata); free(loc->state); for (i = 0; i < loc->iy; i++) free(loc->table[i]); free(loc->table); free(loc->xcol); free(loc->ycol); sf_eno2_close (loc->newtable); free(loc); break; } } } /*============================================================================== FUNCTION void cm_table2D() AUTHORS 08 Nov 2015 Holger Vogt MODIFICATIONS SUMMARY This function implements 2D table code model. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE INPUT FILE SPEC * Title (comments preceded by * ignored) * table size ix iy * x row independent variables x0 x1 x2 x3 ... xix-1 y column independent variables y0 y1 y2 y3 ... yiy-1 * table x0y0 x1y0 x2y0 ... xix-1y0 ... x0yiy-1 x1yiy-1 x2yiy-1 ... xix-1yiy-1 ==============================================================================*/ /*=== CM_table2D ROUTINE ===*/ void cm_table2D(ARGS) /* structure holding parms, inputs, outputs, etc. */ { int size, xind, yind; double xval, yval, xoff, yoff, xdiff, ydiff; double derivval[2], outval; double q11, q12, q21, q22, x1, x2, y1, y2; Local_Data_t *loc; /* Pointer to local static data, not to be included in the state vector */ Mif_Complex_t ac_gain; size = PORT_SIZE(out); if (INIT == 1) { int i; int ix = 0, /* elements in a row */ iy = 0; /* number of rows */ double **table_data; double tmp; char *cFile, *cThisPtr, *cThisLine, *cThisLinePtr; int isNewline; /* Boolean indicating we've read a CR or LF */ size_t lFileLen; /* Length of file */ size_t lFileRead; /* Length of file read in */ long lIndex; /* Index into cThisLine array */ int lLineCount; /* Current line number */ size_t lStartPos; /* Offset of start of current line */ size_t lTotalChars; /* Total characters read */ int interporder; /* order of interpolation for eno */ CALLBACK = cm_table2D_callback; /* allocate static storage for *loc */ STATIC_VAR (locdata) = calloc(1, sizeof(Local_Data_t)); loc = STATIC_VAR (locdata); /* Allocate storage for internal state */ loc->state = (struct filesource_state*) malloc(sizeof(struct filesource_state)); loc->ix = loc->iy = 0; /* open file */ loc->state->fp = fopen_with_path(PARAM(file), "r"); loc->state->pos = 0; loc->state->atend = 0; if (!loc->state->fp) { char *lbuffer, *p; lbuffer = getenv("NGSPICE_INPUT_DIR"); if (lbuffer && *lbuffer) { p = (char*) malloc(strlen(lbuffer) + strlen(DIR_PATHSEP) + strlen(PARAM(file)) + 1); sprintf(p, "%s%s%s", lbuffer, DIR_PATHSEP, PARAM(file)); loc->state->fp = fopen(p, "r"); free(p); } } struct stat st; if (!loc->state->fp || fstat(fileno(loc->state->fp), &st)) { cm_message_printf("cannot open file %s", PARAM(file)); loc->state->atend = 1; loc->init_err = 1; return; } /* get file length */ lFileLen = (size_t) st.st_size; /* create string to hold the whole file */ cFile = calloc(lFileLen + 1, sizeof(char)); /* create another string long enough for file manipulation */ cThisLine = calloc(lFileLen + 1, sizeof(char)); if (cFile == NULL || cThisLine == NULL) { cm_message_printf("Insufficient memory to read file %s", PARAM(file)); loc->state->atend = 1; loc->init_err = 1; if(cFile) free(cFile); if(cThisLine) free(cThisLine); return; } /* read whole file into cFile */ lFileRead = fread(cFile, sizeof(char), lFileLen, loc->state->fp); fclose(loc->state->fp); /* Number of chars read may be less than lFileLen, because /r are skipt by 'fread' */ cFile[lFileRead] = '\0'; cThisPtr = cFile; cThisLinePtr = cThisLine; lLineCount = 0L; lTotalChars = 0L; while (*cThisPtr) { /* Read until reaching null char */ lIndex = 0L; /* Reset counters and flags */ isNewline = 0; lStartPos = lTotalChars; while (*cThisPtr) { if (!isNewline) { /* Haven't read a LF yet */ if (*cThisPtr == '\n') /* This char is LF */ isNewline = 1; /* Set flag */ } else if (*cThisPtr != '\n') /* Already found LF */ break; /* Done with line */ cThisLinePtr[lIndex++] = *cThisPtr++; /* Add char to output and increment */ lTotalChars++; } cThisLinePtr[lIndex] = '\0'; /* Terminate the string */ lLineCount++; /* Increment the line counter */ /* continue if comment or empty */ if (cThisLinePtr[0] == '*' || cThisLinePtr[0] == '\n') { lLineCount--; /* we count only real lines */ continue; } if (lLineCount == 1) { cnv_get_spice_value(cThisLinePtr, &tmp); loc->ix = ix = (int) tmp; /* generate row data structure (x) */ loc->xcol = (double*) calloc((size_t) ix, sizeof(double)); } else if (lLineCount == 2) { cnv_get_spice_value(cThisLinePtr, &tmp); loc->iy = iy = (int) tmp; /* generate column data structure (y) */ loc->ycol = (double*) calloc((size_t) iy, sizeof(double)); } else if (lLineCount == 3) { char *token = CNVgettok(&cThisLinePtr); i = 0; while (token) { if (i == ix) { cm_message_printf("Too many numbers in x row."); loc->init_err = 1; return; } cnv_get_spice_value(token, &loc->xcol[i++]); free(token); token = CNVgettok(&cThisLinePtr); } if (i < ix) { cm_message_printf("Not enough numbers in x row."); loc->init_err = 1; return; } } else if (lLineCount == 4) { char *token = CNVgettok(&cThisLinePtr); i = 0; while (token) { if (i == iy) { cm_message_printf("Too many numbers in y row."); loc->init_err = 1; return; } cnv_get_spice_value(token, &loc->ycol[i++]); free(token); token = CNVgettok(&cThisLinePtr); } if (i < iy) { cm_message_printf("Not enough numbers in y row."); loc->init_err = 1; return; } /* jump out of while loop to read in the table */ break; } } /* generate table core */ interporder = PARAM(order); /* boundary limits set to param 'order' aren't recognized, so limit them here */ if (interporder < 2) { cm_message_printf("Parameter Order=%d not possible, set to minimum value 2", interporder); interporder = 2; } /* int order : interpolation order, int n1, int n2 : data dimensions */ loc->newtable = sf_eno2_init(interporder, ix, iy); /* create table_data in memory */ /* data [n2][n1] */ table_data = calloc((size_t) iy, sizeof(double *)); for (i = 0; i < iy; i++) table_data[i] = calloc((size_t) ix, sizeof(double)); loc->table = table_data; /* continue reading from cFile */ lLineCount = 0; while (*cThisPtr) { /* Read until reaching null char */ char *token; lIndex = 0L; /* Reset counters and flags */ isNewline = 0; lStartPos = lTotalChars; while (*cThisPtr) { /* Read until reaching null char */ if (!isNewline) { /* Haven't read a LF yet */ if (*cThisPtr == '\n') /* This char is a LF */ isNewline = 1; /* Set flag */ } else if (*cThisPtr != '\n') /* Already found LF */ break; /* Done with line */ cThisLinePtr[lIndex++] = *cThisPtr++; /* Add char to output and increment */ lTotalChars++; } cThisLinePtr[lIndex] = '\0'; /* Terminate the string */ lLineCount++; /* Increment the line counter */ /* continue if comment or empty */ if (cThisLinePtr[0] == '*' || cThisLinePtr[0] == '\0') { if (lTotalChars >= lFileLen) { cm_message_printf("Not enough data in file %s", PARAM(file)); loc->init_err = 1; return; } lLineCount--; /* we count only real lines */ continue; } token = CNVgettok(&cThisLinePtr); i = 0; while (token) { double tmpval; if (i == ix) { cm_message_printf("Too many numbers in y row no. %d.", lLineCount); loc->init_err = 1; return; } /* read table core from cFile, fill local static table structure table_data */ cnv_get_spice_value(token, &tmpval); table_data[lLineCount - 1][i++] = tmpval; free(token); token = CNVgettok(&cThisLinePtr); } if (i < ix) { cm_message_printf("Not enough numbers in y row no. %d.", lLineCount); loc->init_err = 1; return; } } /* fill table data into eno2 structure */ sf_eno2_set (loc->newtable, table_data /* data [n2][n1] */); /* free the file memory allocated */ free(cFile); free(cThisLine); } /* end of initialization "if (INIT == 1)" */ loc = STATIC_VAR (locdata); /* return immediately if there was an initialization error */ if (loc->init_err == 1) return; /* get input x, y, find corresponding indices, get x and y offsets, call interpolation function with value and derivative */ xval = INPUT(inx); yval = INPUT(iny); /* find index */ if (xval < loc->xcol[0] || xval > loc->xcol[loc->ix - 1]) { if (PARAM(verbose) > 0) cm_message_printf("x value %g exceeds table limits,\n" " please enlarge range of your table", xval); return; } if (yval < loc->ycol[0] || yval > loc->ycol[loc->iy - 1]) { if (PARAM(verbose) > 0) cm_message_printf("y value %g exceeds table limits,\n" " please enlarge range of your table", yval); return; } /* something like binary search to get the index */ xind = findCrossOver(loc->xcol, 0, loc->ix - 1, xval); /* find index with minimum distance between xval and row value */ if (fabs(loc->xcol[xind + 1] - xval) < fabs(xval - loc->xcol[xind])) xind++; xoff = xval - loc->xcol[xind]; yind = findCrossOver(loc->ycol, 0, loc->iy - 1, yval); /* find index with minimum distance between yval and column value */ if (fabs(loc->ycol[yind + 1] - yval) < fabs(yval - loc->ycol[yind])) yind++; yoff = yval - loc->ycol[yind]; /* find local difference around index of independent row and column values */ if (xind == loc->ix - 1) xdiff = loc->xcol[xind] - loc->xcol[xind - 1]; else if (xind == 0) xdiff = loc->xcol[xind + 1] - loc->xcol[xind]; else xdiff = 0.5 * (loc->xcol[xind + 1] - loc->xcol[xind - 1]); if (yind == loc->iy - 1) ydiff = loc->ycol[yind] - loc->ycol[yind - 1]; else if (yind == 0) ydiff = loc->ycol[yind + 1] - loc->ycol[yind]; else ydiff = 0.5 * (loc->ycol[yind + 1] - loc->ycol[yind - 1]); /* Essentially non-oscillatory (ENO) interpolation to obtain the derivatives only. Using outval for now yields ngspice op non-convergence */ sf_eno2_apply (loc->newtable, xind, yind, /* grid location */ xoff, yoff, /* offset from grid */ &outval, /* output data value */ derivval, /* output derivatives [2] */ DER /* what to compute [FUNC, DER, BOTH] */ ); /* bilinear interpolation to obtain the output value */ xind = findCrossOver(loc->xcol, 0, loc->ix - 1, xval); yind = findCrossOver(loc->ycol, 0, loc->iy - 1, yval); x1 = loc->xcol[xind]; x2 = loc->xcol[xind + 1]; y1 = loc->ycol[yind]; y2 = loc->ycol[yind + 1]; q11 = loc->table[yind][xind]; q12 = loc->table[yind + 1][xind]; q21 = loc->table[yind][xind + 1]; q22 = loc->table[yind + 1][xind + 1]; outval = BilinearInterpolation(q11, q12, q21, q22, x1, x2, y1, y2, xval, yval); if (ANALYSIS != MIF_AC) { double xderiv, yderiv, outv; outv = PARAM(offset) + PARAM(gain) * outval; OUTPUT(out) = outv; xderiv = PARAM(gain) * derivval[0] / xdiff; PARTIAL(out, inx) = xderiv; yderiv = PARAM(gain) * derivval[1] / ydiff; PARTIAL(out, iny) = yderiv; if (PARAM(verbose) > 1) cm_message_printf("\nI: %g, xval: %g, yval: %g, xderiv: %g, yderiv: %g", outv, xval, yval, xderiv, yderiv); } else { ac_gain.real = PARAM(gain) * derivval[0] / xdiff; ac_gain.imag= 0.0; AC_GAIN(out, inx) = ac_gain; ac_gain.real = PARAM(gain) * derivval[1] / ydiff; ac_gain.imag= 0.0; AC_GAIN(out, iny) = ac_gain; } } tmpk8ny_4pz/src/xspice/icm/table/mada/0000755000175000017500000000000013546075722020003 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/table/mada/eno.c0000644000175000017500000000670513546075722020740 0ustar carstencarsten/* 1-D ENO interpolation */ /* Copyright (C) 2004 University of Texas at Austin 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 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include "eno.h" #include "alloc.h" #define SF_MAX(a,b) ((a) < (b) ? (b) : (a)) #define SF_MIN(a,b) ((a) < (b) ? (a) : (b)) struct Eno { int order, n; double **diff; }; /* concrete data type */ sf_eno sf_eno_init (int order, /* interpolation order */ int n /* data size */) /*< Initialize interpolation object. >*/ { sf_eno ent; int i; ent = (sf_eno) sf_alloc(1, sizeof(*ent)); ent->order = order; ent->n = n; ent->diff = (double**) sf_alloc(order, sizeof(double*)); for (i = 0; i < order; i++) ent->diff[i] = sf_doublealloc(n - i); return ent; } void sf_eno_close (sf_eno ent) /*< Free internal storage >*/ { int i; for (i = 0; i < ent->order; i++) free (ent->diff[i]); free (ent->diff); free (ent); } void sf_eno_set (sf_eno ent, double *c /* data [n] */) /*< Set the interpolation table. c can be changed or freed afterwords >*/ { int i, j; for (i = 0; i < ent->n; i++) { /* copy the initial data */ ent->diff[0][i] = c[i]; } for (j = 1; j < ent->order; j++) { for (i = 0; i < ent->n - j; i++) { /* compute difference tables */ ent->diff[j][i] = ent->diff[j - 1][i + 1] - ent->diff[j - 1][i]; } } } void sf_eno_apply (sf_eno ent, int i, /* grid location */ double x, /* offset from grid */ double *f, /* output data value */ double *f1, /* output derivative */ der what /* flag of what to compute */) /*< Apply interpolation >*/ { int j, k, i1, i2, n; double s, s1, y, w, g, g1; i2 = SF_MAX (0, SF_MIN(i, ent->n - ent->order)); i1 = SF_MIN (i2, SF_MAX(0, i - ent->order + 2)); w = fabs(ent->diff[ent->order - 1][i1]); for (j = i1 + 1; j <= i2; j++) { g = fabs(ent->diff[ent->order - 1][j]); if (w > g) w = g; } /* loop over starting points */ for (g = 0., g1 = 0., n = 0, j = i1; j <= i2; j++) { if (fabs(ent->diff[ent->order - 1][j]) > w) continue; n++; y = x + i - j; /* loop to compute the polynomial */ for (s = 1., s1 = 0., k = 0; k < ent->order; k++) { if (what != FUNC) { g1 += s1 * ent->diff[k][j]; s1 = (s + s1 * (y - k)) / (k + 1.); } if (what != DER) g += s * ent->diff[k][j]; s *= (y - k) / (k + 1.); } } if (what != DER) *f = g / n; if (what != FUNC) *f1 = g1 / n; } /* $Id: eno.c 8699 2012-07-03 22:10:38Z vovizmus $ */ tmpk8ny_4pz/src/xspice/icm/table/mada/eno3.c0000644000175000017500000000761613546075722021025 0ustar carstencarsten/* ENO interpolation in 3-D */ /* Copyright (C) 2004 University of Texas at Austin 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 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "eno2.h" #include "eno3.h" #include "alloc.h" #include "ngspice/cm.h" struct Eno3 { int order, ng, n1, n2, n3; sf_eno **ent; sf_eno2 jnt; double **f, **f1; }; /* concrete data type */ sf_eno3 sf_eno3_init(int order, /* interpolation order */ int n1, int n2, int n3 /* data dimensions */) /*< Initialize interpolation object >*/ { sf_eno3 pnt; int i2, i3; pnt = (sf_eno3) sf_alloc (1, sizeof(*pnt)); pnt->order = order; pnt->n1 = n1; pnt->n2 = n2; pnt->n3 = n3; pnt->ng = 2 * order - 2; if (pnt->ng > n2 || pnt->ng > n3) cm_message_printf("%s: ng=%d is too big", __FILE__, pnt->ng); pnt->jnt = sf_eno2_init (order, pnt->ng, pnt->ng); pnt->f = sf_doublealloc2 (pnt->ng, pnt->ng); pnt->f1 = sf_doublealloc2 (pnt->ng, pnt->ng); pnt->ent = (sf_eno**) sf_alloc (n3, sizeof(sf_eno*)); for (i3 = 0; i3 < n3; i3++) { pnt->ent[i3] = (sf_eno*) sf_alloc (n2, sizeof(sf_eno)); for (i2 = 0; i2 < n2; i2++) pnt->ent[i3][i2] = sf_eno_init (order, n1); } return pnt; } void sf_eno3_set(sf_eno3 pnt, double ***c /* data [n3][n2][n1] */) /*< Set the interpolation table. c can be changed or freed afterwords. >*/ { int i2, i3; for (i3 = 0; i3 < pnt->n3; i3++) for (i2 = 0; i2 < pnt->n2; i2++) sf_eno_set (pnt->ent[i3][i2], c[i3][i2]); } void sf_eno3_close(sf_eno3 pnt) /*< Free internal storage. >*/ { int i2, i3; sf_eno2_close (pnt->jnt); for (i3 = 0; i3 < pnt->n3; i3++) { for (i2 = 0; i2 < pnt->n2; i2++) sf_eno_close (pnt->ent[i3][i2]); free (pnt->ent[i3]); } free (pnt->ent); free (pnt->f[0]); free (pnt->f); free (pnt->f1[0]); free (pnt->f1); free (pnt); } void sf_eno3_apply(sf_eno3 pnt, int i, int j, int k, /* grid location */ double x, double y, double z, /* offsets from grid */ double *f, /* output data */ double *f1, /* output derivative [3] */ der what /* to compute [FUNC|DER|BOTH] */) /*< Apply interpolation. >*/ { int i2, i3, b2, b3; double g; if (j - pnt->order + 2 < 0) b2 = 0; else if (j + pnt->order - 1 > pnt->n2 - 1) b2 = pnt->n2 - pnt->ng; else b2 = j - pnt->order + 2; j -= b2; if (k - pnt->order + 2 < 0) b3 = 0; else if (k + pnt->order - 1 > pnt->n3 - 1) b3 = pnt->n3 - pnt->ng; else b3 = k - pnt->order + 2; k -= b3; for (i3 = 0; i3 < pnt->ng; i3++) for (i2 = 0; i2 < pnt->ng; i2++) sf_eno_apply (pnt->ent[b3 + i3][b2 + i2], i, x, &(pnt->f[i3][i2]), &(pnt->f1[i3][i2]), (what==FUNC ? FUNC : BOTH)); sf_eno2_set (pnt->jnt, pnt->f); sf_eno2_apply (pnt->jnt, j, k, y, z, f, f1 + 1, what); if (what != FUNC) { sf_eno2_set (pnt->jnt, pnt->f1); sf_eno2_apply (pnt->jnt, j, k, y, z, f1, &g, FUNC); } } /* $Id: eno3.c 4148 2009-02-09 03:55:32Z sfomel $ */ tmpk8ny_4pz/src/xspice/icm/table/mada/alloc.c0000644000175000017500000000402013546075722021235 0ustar carstencarsten/* Convenience allocation programs. */ /* Copyright (C) 2004 University of Texas at Austin Copyright (C) 2007 Colorado School of Mines 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 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "alloc.h" #include "ngspice/cm.h" /*------------------------------------------------------------*/ void * sf_alloc(int n /* number of elements */, size_t size /* size of one element */) /*< output-checking allocation >*/ { void *ptr; size *= (size_t) n; if (0 >= size) cm_message_printf("%s: illegal allocation(%d bytes)", __FILE__, (int) size); ptr = malloc(size); if (NULL == ptr) cm_message_printf("%s: cannot allocate %d bytes : ", __FILE__, (int) size); return ptr; } /*------------------------------------------------------------*/ double * sf_doublealloc(int n /* number of elements */) /*< float allocation >*/ { return (double*) sf_alloc(n, sizeof(double)); } /*------------------------------------------------------------*/ double ** sf_doublealloc2(int n1 /* fast dimension */, int n2 /* slow dimension */) /*< float 2-D allocation, out[0] points to a contiguous array >*/ { int i2; double **ptr = (double**) sf_alloc(n2, sizeof(double*)); ptr[0] = sf_doublealloc(n1 * n2); for (i2 = 1; i2 < n2; i2++) ptr[i2] = ptr[0] + i2 * n1; return ptr; } tmpk8ny_4pz/src/xspice/icm/table/mada/eno2.h0000644000175000017500000000167013546075722021023 0ustar carstencarsten/* This file is automatically generated. DO NOT EDIT! */ #ifndef _sf_eno2_h #define _sf_eno2_h #include "eno.h" typedef struct Eno2 *sf_eno2; /* abstract data type */ sf_eno2 sf_eno2_init (int order, /* interpolation order */ int n1, int n2 /* data dimensions */); /*< Initialize interpolation object >*/ void sf_eno2_set (sf_eno2 pnt, double **c /* data [n2][n1] */); /*< Set the interpolation table. c can be changed or freed afterwords. >*/ void sf_eno2_close (sf_eno2 pnt); /*< Free internal storage >*/ void sf_eno2_apply (sf_eno2 pnt, int i, int j, /* grid location */ double x, double y, /* offset from grid */ double *f, /* output data value */ double *f1, /* output derivative [2] */ der what /* what to compute [FUNC,DER,BOTH] */); /*< Apply interpolation. >*/ #endif tmpk8ny_4pz/src/xspice/icm/table/mada/alloc.h0000644000175000017500000000126313546075722021250 0ustar carstencarsten#ifndef _sf_alloc_h #define _sf_alloc_h #include #include /*------------------------------------------------------------*/ void *sf_alloc (int n, /* number of elements */ size_t size /* size of one element */); /*< output-checking allocation >*/ /*------------------------------------------------------------*/ double *sf_doublealloc (int n /* number of elements */); /*< double allocation >*/ /*------------------------------------------------------------*/ double **sf_doublealloc2(int n1, /* fast dimension */ int n2 /* slow dimension */); /*< float 2-D allocation, out[0] points to a contiguous array >*/ #endif tmpk8ny_4pz/src/xspice/icm/table/mada/eno.h0000644000175000017500000000160113546075722020733 0ustar carstencarsten/* This file is automatically generated. DO NOT EDIT! */ #ifndef _sf_eno_h #define _sf_eno_h typedef struct Eno *sf_eno; /* abstract data type */ typedef enum {FUNC, DER, BOTH} der; /* flag values */ sf_eno sf_eno_init (int order, /* interpolation order */ int n /* data size */); /*< Initialize interpolation object. >*/ void sf_eno_close (sf_eno ent); /*< Free internal storage >*/ void sf_eno_set (sf_eno ent, double* c /* data [n] */); /*< Set the interpolation table. c can be changed or freed afterwords >*/ void sf_eno_apply (sf_eno ent, int i, /* grid location */ double x, /* offset from grid */ double *f, /* output data value */ double *f1, /* output derivative */ der what /* flag of what to compute */); /*< Apply interpolation >*/ #endif tmpk8ny_4pz/src/xspice/icm/table/mada/eno2.c0000644000175000017500000000632513546075722021020 0ustar carstencarsten/* ENO interpolation in 2-D */ /* Copyright (C) 2004 University of Texas at Austin 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 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "eno.h" #include "eno2.h" #include "alloc.h" #include "ngspice/cm.h" struct Eno2 { int order, ng, n1, n2; sf_eno jnt, *ent; double *f, *f1; }; /* concrete data type */ sf_eno2 sf_eno2_init (int order, /* interpolation order */ int n1, int n2 /* data dimensions */) /*< Initialize interpolation object >*/ { sf_eno2 pnt; int i2; pnt = (sf_eno2) sf_alloc(1, sizeof(*pnt)); pnt->order = order; pnt->n1 = n1; pnt->n2 = n2; pnt->ng = 2 * order - 2; if (pnt->ng > pnt->n2) cm_message_printf("%s: ng=%d is too big", __FILE__, pnt->ng); pnt->jnt = sf_eno_init (order, pnt->ng); pnt->f = sf_doublealloc (pnt->ng); pnt->f1 = sf_doublealloc (pnt->ng); pnt->ent = (sf_eno*) sf_alloc(n2, sizeof(sf_eno)); for (i2 = 0; i2 < n2; i2++) pnt->ent[i2] = sf_eno_init (order, n1); return pnt; } void sf_eno2_set (sf_eno2 pnt, double **c /* data [n2][n1] */) /*< Set the interpolation table. c can be changed or freed afterwords. >*/ { int i2; for (i2 = 0; i2 < pnt->n2; i2++) sf_eno_set (pnt->ent[i2], c[i2]); } void sf_eno2_close (sf_eno2 pnt) /*< Free internal storage >*/ { int i2; sf_eno_close (pnt->jnt); for (i2 = 0; i2 < pnt->n2; i2++) sf_eno_close (pnt->ent[i2]); free (pnt->f); free (pnt->f1); free (pnt->ent); free (pnt); } void sf_eno2_apply (sf_eno2 pnt, int i, int j, /* grid location */ double x, double y, /* offset from grid */ double *f, /* output data value */ double *f1, /* output derivative [2] */ der what /* what to compute [FUNC,DER,BOTH] */) /*< Apply interpolation. >*/ { int k, b2; double g; if (j - pnt->order + 2 < 0) b2 = 0; else if (j + pnt->order - 1 > pnt->n2 - 1) b2 = pnt->n2 - pnt->ng; else b2 = j - pnt->order + 2; j -= b2; for (k = 0; k < pnt->ng; k++) if (what != FUNC) sf_eno_apply (pnt->ent[b2 + k], i, x, pnt->f + k, pnt->f1 + k, BOTH); else sf_eno_apply (pnt->ent[b2 + k], i, x, pnt->f + k, pnt->f1 + k, FUNC); sf_eno_set (pnt->jnt, pnt->f); sf_eno_apply (pnt->jnt, j, y, f, f1 + 1, what); if (what != FUNC) { sf_eno_set (pnt->jnt, pnt->f1); sf_eno_apply (pnt->jnt, j, y, f1, &g, FUNC); } } /* $Id: eno2.c 9044 2012-08-13 19:35:59Z vovizmus $ */ tmpk8ny_4pz/src/xspice/icm/table/mada/eno3.h0000644000175000017500000000176713546075722021033 0ustar carstencarsten/* This file is automatically generated. DO NOT EDIT! */ #ifndef _sf_eno3_h #define _sf_eno3_h #include "eno2.h" typedef struct Eno3 *sf_eno3; /* abstract data type */ sf_eno3 sf_eno3_init (int order, /* interpolation order */ int n1, int n2, int n3 /* data dimensions */); /*< Initialize interpolation object >*/ void sf_eno3_set (sf_eno3 pnt, double ***c /* data [n3][n2][n1] */); /*< Set the interpolation table. c can be changed or freed afterwords. >*/ void sf_eno3_close (sf_eno3 pnt); /*< Free internal storage. >*/ void sf_eno3_apply (sf_eno3 pnt, int i, int j, int k, /* grid location */ double x, double y, double z, /* offsets from grid */ double *f, /* output data */ double *f1, /* output derivative [3] */ der what /* to compute [FUNC|DER|BOTH] */); /*< Apply interpolation. >*/ #endif tmpk8ny_4pz/src/xspice/icm/table/modpath.lst0000644000175000017500000000002013546075722021251 0ustar carstencarstentable2D table3D tmpk8ny_4pz/src/xspice/icm/makedefs.in0000644000175000017500000000276613546075722020134 0ustar carstencarsten# -*- makefile -*- # Edit this file to set global include paths, # compiler info and subdirs # Directory sturcture SHELL = @SHELL@ srcdir = @srcdir@ top_builddir = ../../.. top_srcdir = @top_srcdir@ subdir = src/xspice/icm MKDIR_P = @MKDIR_P@ uname = $(shell uname) # C compiler to use CC = @CC@ CFLAGS = @CFLAGS@ VIS_CFLAGS = @VIS_CFLAGS@ EXEEXT = @EXEEXT@ BUILD_EXEEXT = @BUILD_EXEEXT@ # Spice header include path INCLUDES = -I$(top_builddir)/src/include -I$(top_srcdir)/src/include # CFLAGS to use here EXTRA_CFLAGS = -fPIC DEPFLAGS = -MD -MF ISMINGW = $(shell uname | grep -c "MINGW32") ifeq ($(ISMINGW), 1) EXTRA_CFLAGS = endif ISCYGWIN = $(shell uname | grep -c "CYGWIN") ifeq ($(ISCYGWIN), 1) EXTRA_CFLAGS = endif ISSUNOS = $(shell uname | grep -c "SunOS") ifeq ($(ISSUNOS), 1) ifneq "$(CC)" "gcc" EXTRA_CFLAGS = -KPIC DEPFLAGS = -xMD -xMF endif endif # Path to the cmpp utility CMPP = @CMPP@ LIBS = -lm # Flags to use when linking shared library LDFLAGS = -shared ifeq ($(ISMINGW), 1) LDFLAGS = -shared @LDFLAGS@ endif ifeq "$(strip $(uname))" "Darwin" LDFLAGS = -bundle -flat_namespace -undefined suppress endif ifeq "$(strip $(uname))" "SunOS" ifneq "$(CC)" "gcc" LDFLAGS = -G endif endif # Install instructions INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ prefix = @prefix@ exec_prefix = @exec_prefix@ libdir = @libdir@ pkglibdir = $(libdir)/@PACKAGE@ datarootdir = @datarootdir@ datadir = @datadir@ pkgdatadir = $(datadir)/@PACKAGE@ tmpk8ny_4pz/src/xspice/icm/analog/0000755000175000017500000000000013546075722017253 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/analog/triangle/0000755000175000017500000000000013546075722021060 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/analog/triangle/ifspec.ifs0000644000175000017500000000434513546075722023042 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 12 Apr 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the analog triangle (controlled trianglewave oscillator) code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_triangle Spice_Model_Name: triangle Description: "controlled triangle wave oscillator" PORT_TABLE: Port_Name: cntl_in out Description: "input" "output" Direction: in out Default_Type: v v Allowed_Types: [v,vd,i,id,vnam] [v,vd,i,id] Vector: no no Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: cntl_array freq_array Description: "control in array" "frequency array" Data_Type: real real Default_Value: 0.0 1.0e3 Limits: - [0 -] Vector: yes yes Vector_Bounds: [2 -] [2 -] Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: out_low out_high Description: "output low value" "output high value" Data_Type: real real Default_Value: -1.0 1.0 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: duty_cycle Description: "rise time duty cycle" Data_Type: real Default_Value: 0.5 Limits: [1e-6 .999999] Vector: no Vector_Bounds: - Null_Allowed: yes STATIC_VAR_TABLE: Static_Var_Name: tran_init Description: "tran initialisation" Data_Type: boolean tmpk8ny_4pz/src/xspice/icm/analog/triangle/cfunc.mod0000644000175000017500000002460413546075722022665 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE triangle/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 12 Apr 1991 Harry Li MODIFICATIONS 2 Oct 1991 Jeffrey P. Murray 9 Sep 2012 Holger Vogt SUMMARY This file contains the model-specific routines used to functionally describe the triangle (controlled trianglewave oscillator) code model. INTERFACES FILE ROUTINE CALLED CMmacros.h cm_message_send(); CM.c void *cm_analog_alloc() void *cm_analog_get_ptr() int cm_analog_set_temp_bkpt() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include /*=== CONSTANTS ========================*/ char *triangle_allocation_error = "\n**** Error ****\nTRIANGLE: Error allocating triangle block storage \n"; char *triangle_freq_clamp = "\n**** Warning ****\nTRIANGLE: Extrapolated Minimum Frequency Set to 1e-16 Hz \n"; char *triangle_array_error = "\n**** Error ****\nTRIANGLE: Size of control array different than frequency array \n"; #define INT1 1 #define T1 2 #define T2 3 #define T3 4 /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION void cm_triangle() AUTHORS 12 Apr 1991 Harry Li MODIFICATIONS 2 Oct 1991 Jeffrey P. Murray 9 Sep 2012 Holger Vogt SUMMARY This function implements the triangle (controlled trianglewave oscillator) code model. INTERFACES FILE ROUTINE CALLED CMmacros.h cm_message_send(); CM.c void *cm_analog_alloc() void *cm_analog_get_ptr() int cm_analog_set_temp_bkpt() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_TRIANGLE ROUTINE ===*/ /***************************************************** * * * I /\ <- output_high * * I / \ * * I / \ * * I / \ * * I / \ * * I / \ * * I / \ * * I / \ * * I / \ * * I/------------------------------------------ * * \ / * * \ / * * \ / * * \ / * * \ / * * \ / * * \ / * * \/ <- output_low * * * *****************************************************/ void cm_triangle(ARGS) { int i; /* generic loop counter index */ int cntl_size; /* size of the control array */ int freq_size; /* size of the frequency array */ int int_cycle; /* the number of cycles rounded to the nearest int */ Mif_Value_t *x; /* pointer holds the values of the control array */ Mif_Value_t *y; /* pointer holds the values of the freq array */ double cntl_input; /* control input */ double dout_din; /* partial out wrt to control input */ double output_low; /* lowest point of the wave */ double output_hi; /* highest point of the wave */ double dphase; /* percent into the current phase of the cycle */ double *phase; /* instantaneous phase value */ double *phase1; /* pointer to the previous phase value */ double freq = 0.0; /* actual frequency of the wave */ double d_cycle; /* duty cycle */ double *t1; /* pointer which stores time1 */ double *t2; /* pointer which stores time2 */ double *t_end; /* pointer which stores t_start */ double time1; /* time of high peak */ double time2; /* time of low peak */ double t_start; /* time of the beginning of each cycle */ Mif_Complex_t ac_gain; /**** Retrieve frequently used parameters... ****/ cntl_size = PARAM_SIZE(cntl_array); freq_size = PARAM_SIZE(freq_array); output_low = PARAM(out_low); output_hi = PARAM(out_high); d_cycle = PARAM(duty_cycle); if(cntl_size != freq_size) { cm_message_send(triangle_array_error); return; } /* Allocate memory */ if (INIT == 1) { cm_analog_alloc(INT1, sizeof(double)); cm_analog_alloc(T1, sizeof(double)); cm_analog_alloc(T2, sizeof(double)); cm_analog_alloc(T3, sizeof(double)); STATIC_VAR(tran_init) = MIF_FALSE; } x = (Mif_Value_t*) &PARAM(cntl_array[0]); y = (Mif_Value_t*) &PARAM(freq_array[0]); if (ANALYSIS == MIF_DC) { /* initialize time values */ t1 = (double *) cm_analog_get_ptr(T1, 0); t2 = (double *) cm_analog_get_ptr(T2, 0); t_end = (double *) cm_analog_get_ptr(T3, 0); *t1 = -1; *t2 = -1; *t_end = 0; OUTPUT(out) = output_low; PARTIAL(out, cntl_in) = 0; } else if (ANALYSIS == MIF_TRAN) { /* Retrieve previous values and set equal to corresponding variables */ phase = (double *) cm_analog_get_ptr(INT1, 0); phase1 = (double *) cm_analog_get_ptr(INT1, 1); t1 = (double *) cm_analog_get_ptr(T1, 1); t2 = (double *) cm_analog_get_ptr(T2, 1); t_end = (double *) cm_analog_get_ptr(T3, 1); time1 = *t1; time2 = *t2; t_start = *t_end; if (STATIC_VAR(tran_init) == MIF_FALSE) { *phase1 = 0.0; STATIC_VAR(tran_init) = MIF_TRUE; } /* Retrieve cntl_input value. */ cntl_input = INPUT(cntl_in); /* Determine segment boundaries within which cntl_input resides */ /*** cntl_input below lowest cntl_voltage ***/ if (cntl_input <= x[0].rvalue) { dout_din = (y[1].rvalue - y[0].rvalue) / (x[1].rvalue - x[0].rvalue); freq = y[0].rvalue + (cntl_input - x[0].rvalue) * dout_din; if (freq <= 0) { cm_message_send(triangle_freq_clamp); freq = 1e-16; } } else if (cntl_input >= x[cntl_size-1].rvalue) { /*** cntl_input above highest cntl_voltage ***/ dout_din = (y[cntl_size-1].rvalue - y[cntl_size-2].rvalue) / (x[cntl_size-1].rvalue - x[cntl_size-2].rvalue); freq = y[cntl_size-1].rvalue + (cntl_input - x[cntl_size-1].rvalue) * dout_din; /* freq = y[cntl_size-1].rvalue; */ } else { /*** cntl_input within bounds of end midpoints... must determine position progressively & then calculate required output. ***/ for (i = 0; i < cntl_size - 1; i++) { if ((cntl_input < x[i+1].rvalue) && (cntl_input >= x[i].rvalue)) { /* Interpolate to the correct frequency value */ freq = ((cntl_input - x[i].rvalue) / (x[i+1].rvalue - x[i].rvalue)) * (y[i+1].rvalue - y[i].rvalue) + y[i].rvalue; } } } /* Instantaneous phase is the old phase + frequency/(delta time) int_cycle is the integer value for the number cycles. */ *phase = *phase1 + freq * (TIME - T(1)); int_cycle = (int) *phase1; dphase = *phase1 - int_cycle; /* if the current time is greater than time1, but less than time2, calculate time2 and set the temporary breakpoint. */ if ((time1 <= TIME) && (TIME <= time2)) { time2 = T(1) + (1 - dphase) / freq; if (TIME < time2) cm_analog_set_temp_bkpt(time2); /* store the time that the next cycle is scheduled to begin */ t_start = time2; /* set output value */ OUTPUT(out) = output_hi - ((TIME - time1) / (time2 - time1)) * (output_hi - output_low); } else { /* otherwise, calculate time1 and time2 and set their respective breakpoints */ if (dphase > d_cycle) dphase = dphase - 1.0; time1 = T(1) + (d_cycle - dphase) / freq; time2 = T(1) + (1 - dphase) / freq; if ((TIME < time1) || (T(1) == 0)) cm_analog_set_temp_bkpt(time1); cm_analog_set_temp_bkpt(time2); /* set output value */ OUTPUT(out) = output_low + ((TIME - t_start) / (time1 - t_start)) * (output_hi - output_low); } PARTIAL(out, cntl_in) = 0.0; /* set the time values for storage */ t1 = (double *) cm_analog_get_ptr(T1, 0); t2 = (double *) cm_analog_get_ptr(T2, 0); t_end = (double *) cm_analog_get_ptr(T3, 0); *t1 = time1; *t2 = time2; *t_end = t_start; } else { /* Output AC Gain */ /* This model has no AC capabilities */ ac_gain.real = 0.0; ac_gain.imag = 0.0; AC_GAIN(out, cntl_in) = ac_gain; } } tmpk8ny_4pz/src/xspice/icm/analog/pwl/0000755000175000017500000000000013546075722020055 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/analog/pwl/ifspec.ifs0000644000175000017500000000451213546075722022033 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 19 Apr 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the analog pwl code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_pwl Spice_Model_Name: pwl Description: "piecwise linear controlled source" PORT_TABLE: Port_Name: in out Description: "input" "output" Direction: in out Default_Type: v v Allowed_Types: [v,vd,i,id,vnam] [v,vd,i,id] Vector: no no Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: x_array y_array Description: "x-element array" "y-element array" Data_Type: real real Default_Value: - - Limits: - - Vector: yes yes Vector_Bounds: [2 -] [2 -] Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: input_domain fraction Description: "input sm. domain" "smoothing %/abs switch" Data_Type: real boolean Default_Value: 0.01 TRUE Limits: [1e-12 0.5] - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes STATIC_VAR_TABLE: Static_Var_Name: last_x_value Data_Type: pointer Vector: no Description: "iteration holding variable for limiting" STATIC_VAR_TABLE: Static_Var_Name: x y Data_Type: pointer pointer Description: "x-coefficient array" "y-coefficient array" tmpk8ny_4pz/src/xspice/icm/analog/pwl/cfunc.mod0000644000175000017500000004023613546075722021661 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE pwl/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 19 Apr 1991 Jeffrey P. Murray MODIFICATIONS 25 Sep 1991 Jeffrey P. Murray 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the model-specific routines used to functionally describe the pwl (piece-wise linear) code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_smooth_corner(); CMmacros.h cm_message_send(); CM.c void cm_analog_not_converged() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include /*=== CONSTANTS ========================*/ #define FRACTION 0.30 #define EPSILON 1.0e-9 /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION double limit_x_value() AUTHORS 25 Sep 1991 Jeffrey P. Murray MODIFICATIONS 2 Oct 1991 Jeffrey P. Murray SUMMARY Limits a passed input value to some fraction of the segment length defined by (x_upper - x_lower). The fractional value in question is passed as a value to the routine (fraction). INTERFACES FILE ROUTINE CALLED CM.c void cm_analog_not_converged() RETURNED VALUE Returns a double. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ #include /*=== Static LIMIT_X_VALUE ROUTINE ================*/ /** limit_x_value ******************************************/ /** **/ /** Limits a passed input value to some fraction **/ /** of the segment length defined by **/ /** (x_upper - x_lower). The fractional value in **/ /** question is passed as a value to the routine **/ /** (fraction). **/ /** **/ /** 9/25/91 JPM **/ /***********************************************************/ static double limit_x_value(double x_lower,double x_upper, double x_input,double fraction, double *last_x_value) { double max_x_delta, /* maximum delta value permissible for this segment domain. */ hold; /* Holding variable for previous x_input value */ /** Limit effective change of input to fraction of value of lowest **/ /** x-segment length... **/ /* calculate maximum delta value for this region */ max_x_delta = fraction * (x_upper - x_lower); /* Test new input */ if ( max_x_delta < fabs(x_input - *last_x_value) ) { hold = x_input; /* Assign new x_input based of direction of movement */ /* since last iteration call */ if ( 0.0 <= (x_input - *last_x_value) ) { x_input = *last_x_value = *last_x_value + max_x_delta; } else { x_input = *last_x_value = *last_x_value - max_x_delta; } /* Alert the simulator to non-convergence */ cm_analog_not_converged(); /*** Debugging printf statement ***/ /* printf("Assigning new x_input...\nPrevious value=%e, New value=%e\n\n", hold,x_input); */ } else { /* No limiting of x_input required */ *last_x_value = x_input; } return x_input; } /*============================================================================== FUNCTION void cm_pwl(> AUTHORS 19 Apr 1991 Jeffrey P. Murray MODIFICATIONS 25 Sep 1991 Jeffrey P. Murray 2 Oct 1991 Jeffrey P. Murray SUMMARY This function implements the pwl code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_smooth_corner(); CMmacros.h cm_message_send(); CM.c void cm_analog_not_converged() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_PWL ROUTINE ================*/ void cm_pwl(ARGS) /* structure holding parms, inputs, outputs, etc. */ { int i; /* generic loop counter index */ int size; /* size of the x_array */ double input_domain; /* smoothing range */ double *x; /* pointer to the x-coordinate array */ double *y; /* pointer to the y-coordinate array */ double lower_seg; /* x segment below which input resides */ double upper_seg; /* x segment above which the input resides */ double lower_slope; /* slope of the lower segment */ double upper_slope; /* slope of the upper segment */ double x_input; /* input */ double out; /* output */ double dout_din; /* partial derivative of the output wrt input */ double threshold_lower; /* value below which the output begins smoothing */ double threshold_upper; /* value above which the output begins smoothing */ double test1; /* debug testing value */ double test2; /* debug testing value */ double *last_x_value; /* static variable for limiting */ double test; /* temp storage variable for limit testing */ Mif_Complex_t ac_gain; char *allocation_error="\n***ERROR***\nPWL: Allocation calloc failed!\n"; char *limit_error="\n***ERROR***\nPWL: Violation of 50% rule in breakpoints!\n"; /* Retrieve frequently used parameters... */ input_domain = PARAM(input_domain); size = PARAM_SIZE(x_array); if (INIT==1) { /* First pass...allocate storage for previous value... */ /* Allocate storage for last_x_value */ STATIC_VAR(last_x_value) = (double *) malloc(sizeof(double)); last_x_value = (double *) STATIC_VAR(last_x_value); /* Allocate storage for breakpoint domain & range values */ STATIC_VAR(x) = (double *) calloc((size_t) size, sizeof(double)); x = (double *) STATIC_VAR(x); if (!x) { cm_message_send(allocation_error); } STATIC_VAR(y) = (double *) calloc((size_t) size, sizeof(double)); y = (double *) STATIC_VAR(y); if (!y) { cm_message_send(allocation_error); } /* Retrieve x and y values. */ for (i=0; i (x[1] - x[0]) ) { test = limit_x_value(x_input,x[0],x_input,FRACTION,last_x_value); } else { test = limit_x_value(x[0],x[1],x_input,FRACTION,last_x_value); } /* If the test value is greater than x[0], force to x[0] */ if ( test >= x[0] ) { x_input = *last_x_value = x[0]; /* Alert the simulator to non-convergence */ cm_analog_not_converged(); } else { x_input = *last_x_value = test; } } else if ( *last_x_value >= x[size-1] ) { /** Non-Limited input greater than x[size-1] **/ /* Obtain the test value of the input, if it has changed excessively */ if ( (x_input - x[size-1]) > (x[size-1] - x[size-2]) ) { test = limit_x_value(x[size-1],x_input,x_input,FRACTION,last_x_value); } else { test = limit_x_value(x[size-2],x[size-1],x_input,FRACTION,last_x_value); } /* If the test value is less than x[size-1], force to x[size-1] */ /* minus some epsilon value. */ if ( test < x[size-1] ) { x_input = *last_x_value = x[size-1] - EPSILON; /* Alert the simulator to non-convergence */ cm_analog_not_converged(); } else { x_input = *last_x_value = test; } } else { for (i=1; i x[i] ) { x_input = *last_x_value = x[i]; /* Alert the simulator to non-convergence */ cm_analog_not_converged(); break; } else /* If the test value is less than x[i-1], force to x[i-1] */ /* minus some epsilon value... */ if ( test < x[i-1] ) { x_input = *last_x_value = x[i-1] - EPSILON; /* Alert the simulator to non-convergence */ cm_analog_not_converged(); break; } else { /* Use returned value for next input */ x_input = *last_x_value = test; break; } } } } /* Assign new limited value back to the input for */ /* use in the matrix calculations.... */ INPUT(in) = x_input; /*** Add debugging printf statement ***/ /* printf("Limited x_input=%e\n\n", x_input); */ /**** End internal limiting ****/ /* Determine segment boundaries within which x_input resides */ if (x_input <= (x[0] + x[1])/2.0) {/*** x_input below lowest midpoint ***/ dout_din = (y[1] - y[0])/(x[1] - x[0]); /* Compute new output */ out = y[0] + (x_input - x[0]) * dout_din; } else { if (x_input >= (x[size-2] + x[size-1])/2.0) { /*** x_input above highest midpoint ***/ dout_din = (y[size-1] - y[size-2]) / (x[size-1] - x[size-2]); out = y[size-1] + (x_input - x[size-1]) * dout_din; } else { /*** x_input within bounds of end midpoints... ***/ /*** must determine position progressively & then ***/ /*** calculate required output. ***/ for (i=1; i #include #include #include /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ #if defined(__MINGW32__) || defined(_MSC_VER) #define DIR_PATHSEP "\\" #else #define DIR_PATHSEP "/" #endif #if defined(_MSC_VER) #define strdup _strdup #endif /*=== LOCAL VARIABLES & TYPEDEFS =======*/ struct filesource_state { FILE *fp; unsigned char atend; }; struct infiledata { double *datavec; int vecallocated; int maxoccupied; int actpointer; int size; }; typedef struct { double *amplinterval; /* the storage array for the amplitude offsets */ double *timeinterval; /* the storage array for the time offset */ struct filesource_state *state; /* the storage array for the filesource status. */ struct infiledata *indata; /* the storage vector for the input data sourced from file. */ } Local_Data_t; /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION void cm_filesource() AUTHORS 20 May 2011 Thomas Sailer MODIFICATIONS 07 Sept 2012 Holger Vogt 27 Feb 2017 Marcel Hendrix 23 JUL 2018 Holger Vogt SUMMARY This function implements the filesource code model. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_FILESOURCE ROUTINE ===*/ static void cm_filesource_callback(ARGS, Mif_Callback_Reason_t reason) { switch (reason) { case MIF_CB_DESTROY: { Local_Data_t *loc = STATIC_VAR (locdata); if (loc->state->fp) fclose(loc->state->fp); free(loc->state); free(loc->amplinterval); free(loc->timeinterval); free(loc->indata->datavec); free(loc->indata); free(loc); break; } } } void cm_filesource(ARGS) /* structure holding parms, inputs, outputs, etc. */ { int size = PORT_SIZE(out); int stepsize = size + 1; int amplscalesize; int amploffssize; int j; Local_Data_t *loc; /* Pointer to local static data, not to be included in the state vector */ if(ANALYSIS == MIF_AC) { return; } if (INIT == 1) { int count; CALLBACK = cm_filesource_callback; /*** allocate static storage for *loc ***/ STATIC_VAR (locdata) = calloc (1 , sizeof ( Local_Data_t )); loc = STATIC_VAR (locdata); /* Allocate storage for internal state */ loc->timeinterval = (double*)calloc(2, sizeof(double)); loc->amplinterval = (double*)calloc(2 * (size_t) size, sizeof(double)); loc->state = (struct filesource_state*)malloc(sizeof(struct filesource_state)); loc->indata = (struct infiledata*)malloc(sizeof(struct infiledata)); loc->indata->datavec = (double*)malloc(sizeof(double) * stepsize * 1000); loc->indata->vecallocated = stepsize * 1000; loc->indata->maxoccupied = 0; loc->indata->actpointer = 0; loc->indata->size = stepsize; /* open the file */ loc->state->fp = fopen_with_path(PARAM(file), "r"); loc->state->atend = 0; if (!loc->state->fp) { char *lbuffer, *p; lbuffer = getenv("NGSPICE_INPUT_DIR"); if (lbuffer && *lbuffer) { p = (char*) malloc(strlen(lbuffer) + strlen(DIR_PATHSEP) + strlen(PARAM(file)) + 1); sprintf(p, "%s%s%s", lbuffer, DIR_PATHSEP, PARAM(file)); loc->state->fp = fopen(p, "r"); free(p); } if (!loc->state->fp) { cm_message_printf("cannot open file %s", PARAM(file)); loc->state->atend = 1; } } /* read, preprocess and store the data */ amplscalesize = PARAM_NULL(amplscale) ? 0 : PARAM_SIZE(amplscale); amploffssize = PARAM_NULL(amploffset) ? 0 : PARAM_SIZE(amploffset); count = 0; while (!loc->state->atend) { char line[512]; char *cp, *cpdel; char *cp2; double t, tprev = 0; int i; if (!fgets(line, sizeof(line), loc->state->fp)) { loc->state->atend = 1; break; } cpdel = cp = strdup(line); /* read the time channel; update the time difference */ while (*cp && isspace_c(*cp)) ++cp; if (*cp == '*' || *cp == '#' || *cp == ';') { free(cpdel); continue; } t = strtod(cp, &cp2); if (cp2 == cp) { free(cpdel); continue; } cp = cp2; if (!PARAM_NULL(timescale)) t *= PARAM(timescale); if (!PARAM_NULL(timerelative) && PARAM(timerelative) == MIF_TRUE) t += tprev; else if (!PARAM_NULL(timeoffset)) t += PARAM(timeoffset); tprev = t; /* before storing, check if vector size is large enough. If not, add another 1000*size doubles */ if (count > loc->indata->vecallocated - size) { loc->indata->vecallocated += size * 1000; loc->indata->datavec = (double*)realloc(loc->indata->datavec, sizeof(double) * loc->indata->vecallocated); } if(loc->indata->datavec == NULL){ cm_message_printf("cannot allocate enough memory"); break; // loc->state->atend = 1; } loc->indata->datavec[count++] = t; /* read the data channels; update the amplitude difference of each channel */ for (i = 0; i < size; ++i) { while (*cp && (isspace_c(*cp) || *cp == ',')) ++cp; t = strtod(cp, &cp2); if (cp2 == cp) break; cp = cp2; if (i < amplscalesize) t *= PARAM(amplscale[i]); if (i < amploffssize) t += PARAM(amploffset[i]); loc->indata->datavec[count++] = t; } free(cpdel); } loc->indata->maxoccupied = count; if(loc->state->fp) { fclose(loc->state->fp); loc->state->fp = NULL; } /* set the start time data */ loc->timeinterval[0] = loc->indata->datavec[loc->indata->actpointer]; loc->timeinterval[1] = loc->indata->datavec[loc->indata->actpointer + stepsize]; } loc = STATIC_VAR (locdata); /* The file pointer is at the same position it was for the last simulator TIME ... * If TIME steps backward, for example due to a second invocation of a 'tran' analysis * step back in datavec[loc->indata->actpointer] . */ if (TIME < loc->timeinterval[0]) { while (TIME < loc->indata->datavec[loc->indata->actpointer] && loc->indata->actpointer >= 0) loc->indata->actpointer -= stepsize; loc->timeinterval[0] = loc->indata->datavec[loc->indata->actpointer]; loc->timeinterval[1] = loc->indata->datavec[loc->indata->actpointer + stepsize]; } while (TIME > loc->timeinterval[1]) { loc->indata->actpointer += stepsize; if (loc->indata->actpointer > loc->indata->maxoccupied) { /* we are done */ return; } loc->timeinterval[1] = loc->indata->datavec[loc->indata->actpointer + stepsize]; loc->timeinterval[0] = loc->indata->datavec[loc->indata->actpointer]; } for (j = 0; j < size; j++) { loc->amplinterval[2 * j] = loc->indata->datavec[loc->indata->actpointer + j + 1]; loc->amplinterval[2 * j + 1] = loc->indata->datavec[loc->indata->actpointer + stepsize + j + 1]; } if (loc->timeinterval[0] <= TIME && TIME <= loc->timeinterval[1]) { if (!PARAM_NULL(amplstep) && PARAM(amplstep) == MIF_TRUE) { int i; for (i = 0; i < size; ++i) OUTPUT(out[i]) = loc->amplinterval[2 * i]; } else { double mul0 = (loc->timeinterval[1] - TIME) / (loc->timeinterval[1] - loc->timeinterval[0]); double mul1 = 1.0 - mul0; int i; for (i = 0; i < size; ++i) OUTPUT(out[i]) = mul0 * loc->amplinterval[2 * i] + mul1 * loc->amplinterval[2 * i + 1]; } } else { int i; for (i = 0; i < size; ++i) OUTPUT(out[i]) = loc->amplinterval[2 * i + 1]; } } tmpk8ny_4pz/src/xspice/icm/analog/d_dt/0000755000175000017500000000000013546075722020165 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/analog/d_dt/ifspec.ifs0000644000175000017500000000452513546075722022147 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 30 Sept 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the analog d_dt (differentiator) code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_d_dt Spice_Model_Name: d_dt Description: "differentiator block" PORT_TABLE: Port_Name: in out Description: "input" "output" Direction: in out Default_Type: v v Allowed_Types: [v,vd,i,id,vnam] [v,vd,i,id] Vector: no no Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: out_offset gain Description: "output offset" "gain" Data_Type: real real Default_Value: 0.0 1.0 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: out_lower_limit out_upper_limit Description: "output lower limit" "output upper limit" Data_Type: real real Default_Value: - - Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: limit_range Description: "upper & lower sm. range" Data_Type: real Default_Value: 1.0e-6 Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes tmpk8ny_4pz/src/xspice/icm/analog/d_dt/cfunc.mod0000644000175000017500000001577313546075722022001 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_dt/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 6 June 1991 Jeffrey P. Murray MODIFICATIONS 30 Sept 1991 Jeffrey P. Murray SUMMARY This file contains the functional description of the d_dt (differentiator) code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_smooth_corner(); CM.c void *cm_analog_alloc() void *cm_analog_get_ptr() int cm_analog_integrate() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION cm_d_dt() AUTHORS 6 Jun 1991 Jeffrey P. Murray MODIFICATIONS 30 Sep 1991 Jeffrey P. Murray SUMMARY This function implements the d_dt code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_smooth_corner(); CM.c void *cm_analog_alloc() void *cm_analog_get_ptr() int cm_analog_integrate() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_D_DT ROUTINE ===*/ void cm_d_dt(ARGS) { double *in, /* current input value */ *in_old, /* previous input value */ out, /* output */ dum, /* fake input value...used for truncation error checking */ gain, /* gain parameter */ out_offset, /* output offset parameter */ out_lower_limit, /* output mower limit */ out_upper_limit, /* output upper limit */ limit_range, /* range of output below out_upper_limit or above out_lower_limit to which smoothing will be applied */ pout_pin, /* partial derivative of output w.r.t. input */ dumpout_pin, /* fake partial derivative of output w.r.t. input (for use with integration */ delta, /* delta time value = TIME - T(1) */ pout_gain; /* temporary storage for partial returned by smoothing function (subsequently multiplied w/pout_pin) */ Mif_Complex_t ac_gain; /* AC gain */ /** Retrieve frequently used parameters (used by all analyses)... **/ gain = PARAM(gain); if (ANALYSIS != MIF_AC) { /**** DC & Transient Analyses ****/ /** Retrieve frequently used parameters... **/ out_offset = PARAM(out_offset); out_lower_limit = PARAM(out_lower_limit); out_upper_limit = PARAM(out_upper_limit); limit_range = PARAM(limit_range); /** Test for INIT; if so, allocate storage, otherwise, retrieve previous timepoint input value... **/ if (INIT==1) { /* First pass...allocate storage for previous state. */ /* Also, calculate roughly where the current output */ /* will be and use this value to define current state. */ cm_analog_alloc(TRUE,sizeof(double)); } /* retrieve previous values */ in = (double *) cm_analog_get_ptr(TRUE,0); /* Set out pointer to current time storage */ in_old = (double *) cm_analog_get_ptr(TRUE,1); /* Set old-output-state pointer to previous time storage */ if ( 0.0 == TIME ) { /*** Test to see if this is the first ***/ /*** timepoint calculation...if ***/ *in_old = *in = INPUT(in); /*** so, return a zero d/dt value. ***/ out = 0.0; /*** so, return a zero d/dt value. ***/ pout_pin = 0.0; } else { /*** Calculate value of d_dt.... ***/ delta = TIME - T(1); *in = INPUT(in); out = gain * (*in - *in_old) / delta + out_offset; pout_pin = gain / delta; } /*** Smooth output if it is within limit_range of out_lower_limit or out_upper_limit. ***/ if (out < (out_lower_limit - limit_range)) { /* At lower limit. */ out = out_lower_limit; pout_pin = 0.0; } else { if (out < (out_lower_limit + limit_range)) { /* Lower smoothing range */ cm_smooth_corner(out,out_lower_limit,out_lower_limit,limit_range, 0.0,1.0,&out,&pout_gain); pout_pin = pout_pin * pout_gain; } else { if (out > (out_upper_limit + limit_range)) { /* At upper limit */ out = out_upper_limit; pout_pin = 0.0; } else { if (out > (out_upper_limit - limit_range)) { /* Upper smoothing region */ cm_smooth_corner(out,out_upper_limit,out_upper_limit,limit_range, 1.0,0.0,&out,&pout_gain); pout_pin = pout_pin * pout_gain; } } } } /** Output values for DC & Transient **/ OUTPUT(out) = out; PARTIAL(out,in) = pout_pin; /* this cm_analog_integrate call is required in order to force truncation error to be evaluated */ cm_analog_integrate(out,&dum,&dumpout_pin); } else { /**** AC Analysis...output (0.0,s*gain) ****/ ac_gain.real = 0.0; ac_gain.imag= gain * RAD_FREQ; AC_GAIN(out,in) = ac_gain; } } tmpk8ny_4pz/src/xspice/icm/analog/divide/0000755000175000017500000000000013546075722020517 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/analog/divide/ifspec.ifs0000644000175000017500000000631513546075722022500 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the analog divide code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_divide Spice_Model_Name: divide Description: "divider block" PORT_TABLE: Port_Name: num den out Description: "numerator" "denominator" "output" Direction: in in out Default_Type: v v v Allowed_Types: [v,vd,i,id,vnam] [v,vd,i,id,vnam] [v,vd,i,id] Vector: no no no Vector_Bounds: - - - Null_Allowed: no no no PARAMETER_TABLE: Parameter_Name: num_offset num_gain Description: "numerator offset" "numerator gain" Data_Type: real real Default_Value: 0.0 1.0 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: den_offset den_gain Description: "denominator offset" "denominator gain" Data_Type: real real Default_Value: 0.0 1.0 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: den_lower_limit den_domain Description: "denominator lower limit" "denominator smoothing domain" Data_Type: real real Default_Value: 1.0e-10 1.0e-16 Limits: [1.0e-10 -] - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: fraction Description: "smoothing fraction/absolute value switch" Data_Type: boolean Default_Value: false Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: out_gain out_offset Description: "output gain" "output offset" Data_Type: real real Default_Value: 1.0 0.0 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes tmpk8ny_4pz/src/xspice/icm/analog/divide/cfunc.mod0000644000175000017500000001206413546075722022321 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE divide/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 6 Jun 1991 Jeffrey P. Murray MODIFICATIONS 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the model-specific routines used to functionally describe the divide code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_smooth_corner(); REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION void cm_divide() AUTHORS 2 Oct 1991 Jeffrey P. Murray MODIFICATIONS NONE SUMMARY This function implements the divide code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_smooth_corner(); RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_DIVIDE ROUTINE ===*/ void cm_divide(ARGS) { double den_lower_limit; /* denominator lower limit */ double den_domain; /* smoothing range for the lower limit */ double threshold_upper; /* value above which smoothing occurs */ double threshold_lower; /* value below which smoothing occurs */ double numerator; /* numerator input */ double denominator; /* denominator input */ double limited_den; /* denominator value if limiting is needed */ double den_partial; /* partial of the output wrt denominator */ double out_gain; /* output gain */ double num_gain; /* numerator gain */ double den_gain; /* denominator gain */ Mif_Complex_t ac_gain; /* Retrieve frequently used parameters... */ den_lower_limit = PARAM(den_lower_limit); den_domain = PARAM(den_domain); out_gain = PARAM(out_gain); num_gain = PARAM(num_gain); den_gain = PARAM(den_gain); if (PARAM(fraction) == MIF_TRUE) /* Set domain to absolute value */ den_domain = den_domain * den_lower_limit; threshold_upper = den_lower_limit + /* Set Upper Threshold */ den_domain; threshold_lower = den_lower_limit - /* Set Lower Threshold */ den_domain; numerator = (INPUT(num) + PARAM(num_offset)) * num_gain; denominator = (INPUT(den) + PARAM(den_offset)) * den_gain; if ((denominator < threshold_upper) && (denominator >= 0)) { /* Need to limit den...*/ if (denominator > threshold_lower) /* Parabolic Region */ cm_smooth_corner(denominator,den_lower_limit, den_lower_limit,den_domain,0.0,1.0, &limited_den,&den_partial); else { /* Hard-Limited Region */ limited_den = den_lower_limit; den_partial = 0.0; } } else if ((denominator > -threshold_upper) && (denominator < 0)) { /* Need to limit den...*/ if (denominator < -threshold_lower) /* Parabolic Region */ cm_smooth_corner(denominator,-den_lower_limit, -den_lower_limit,den_domain,0.0,1.0, &limited_den,&den_partial); else { /* Hard-Limited Region */ limited_den = -den_lower_limit; den_partial = 0.0; } } else { /* No limiting needed */ limited_den = denominator; den_partial = 1.0; } if (ANALYSIS != MIF_AC) { OUTPUT(out) = PARAM(out_offset) + out_gain * ( numerator/limited_den ); PARTIAL(out,num) = out_gain * num_gain / limited_den; PARTIAL(out,den) = -out_gain * numerator * den_gain * den_partial / (limited_den * limited_den); } else { ac_gain.real = out_gain * num_gain / limited_den; ac_gain.imag= 0.0; AC_GAIN(out,num) = ac_gain; ac_gain.real = -out_gain * numerator * den_gain * den_partial / (limited_den * limited_den); ac_gain.imag= 0.0; AC_GAIN(out,den) = ac_gain; } } tmpk8ny_4pz/src/xspice/icm/analog/slew/0000755000175000017500000000000013546075722020225 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/analog/slew/slew.h0000644000175000017500000000225013546075722021347 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE slew/slew.h Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 15 Apr 1991 Harry Li MODIFICATIONS 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains additional header information for the slew code model. INTERFACES FILE ROUTINE CALLED N/A N/A REFERENCED FILES NONE NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ /*=== CONSTANTS ========================*/ #define INT1 1 #define INT2 2 #define INT3 3 #define INT4 4 /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ tmpk8ny_4pz/src/xspice/icm/analog/slew/ifspec.ifs0000644000175000017500000000303513546075722022202 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 15 Apr 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the analog slew (slew rate) code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_slew Spice_Model_Name: slew Description: "a simple slew rate follower block" PORT_TABLE: Port_Name: in out Description: "input" "output" Direction: in out Default_Type: v v Allowed_Types: [v,vd,i,id,vnam] [v,vd,i,id] Vector: no no Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: rise_slope fall_slope Description: "rising slew limit" "falling slew limit" Data_Type: real real Default_Value: 1.0e-9 1.0e-9 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes tmpk8ny_4pz/src/xspice/icm/analog/slew/cfunc.mod0000644000175000017500000001761413546075722022035 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE slew/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 15 Apr 1991 Harry Li MODIFICATIONS 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the model-specific routines used to functionally describe the slew (slew rate) code model. INTERFACES FILE ROUTINE CALLED CM.c void *cm_analog_alloc() void *cm_analog_get_ptr() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include "slew.h" /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION void cm_slew() AUTHORS 15 Apr 1991 Harry Li MODIFICATIONS 2 Oct 1991 Jeffrey P. Murray SUMMARY This function implements the slew code model. INTERFACES FILE ROUTINE CALLED CM.c void *cm_analog_alloc() void *cm_analog_get_ptr() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_SLEW ROUTINE ===*/ /**************************************************************** * * * This model describes a single input, single output slew * * rate limited block. The user may specify the positive * * and negative slew rates. * * * * Note that the model makes no provision for output high and * * low values. That is assumed to be handled by another model. * * * ****************************************************************/ void cm_slew(ARGS) { double *ins; /* input value */ double *in_old; /* previous input value */ double *outs; /* output value */ double *out_old; /* previous output value */ double pout_pin; /* partial derivative--output wrt input */ double delta; /* change in time from previous iteration */ double slope_rise; /* positive going slew rate */ double slope_fall; /* negative going slew rate */ double out_slew; /* "slewed" output value */ double slope; /* slope of the input wrt time */ Mif_Complex_t ac_gain; /** Retrieve frequently used parameters (used by all analyses)... **/ if (INIT == 1) { /* First pass...allocate storage for previous state. */ cm_analog_alloc(INT1,sizeof(double)); cm_analog_alloc(INT4,sizeof(double)); cm_analog_alloc(INT2,sizeof(double)); cm_analog_alloc(INT3,sizeof(double)); } if (ANALYSIS == MIF_DC) { /* DC analysis, get old values */ ins= (double *) cm_analog_get_ptr(INT1,0); outs= (double *) cm_analog_get_ptr(INT4,0); in_old = (double *) cm_analog_get_ptr(INT1,0); out_old = (double *) cm_analog_get_ptr(INT4,0); *ins = *in_old = INPUT(in); *outs = *out_old = *ins; /*** so, return a zero d/dt value. ***/ pout_pin = 1.0; OUTPUT(out) = INPUT(in); PARTIAL(out,in) = 1; }else if (ANALYSIS == MIF_TRAN) { /**** DC & Transient Analyses ****/ /** Retrieve frequently used parameters... **/ slope_rise = PARAM(rise_slope); slope_fall = PARAM(fall_slope); /* Allocation not necessary...retrieve previous values */ ins = (double *) cm_analog_get_ptr(INT1,0); /* Set out pointer to current time storage */ in_old = (double *) cm_analog_get_ptr(INT1,1); /* Set old-output-state pointer */ outs = (double *) cm_analog_get_ptr(INT4,0); out_old = (double *) cm_analog_get_ptr(INT4,1); /* Set old-output-state pointer previous time storage */ if ( TIME == 0.0 ) { /*** Test to see if this is the first ***/ /*** timepoint calculation...if ***/ *ins = *in_old = INPUT(in); *outs = *out_old = *ins; /* input = output, d/dt = 1 */ pout_pin = 1.0; }else{ /* determine the slope of the input */ delta = TIME - T(1); *ins = INPUT(in); slope = (*ins - *in_old)/delta; if(slope >= 0){ out_slew = *out_old + slope_rise*delta; if(*ins < (*out_old - slope_fall*delta)){ /* If the input had a negative slope (and the output was slewing) and then changed direction to a positive slope and the "slewed" response hasn't caught up to the input yet (input < slewed output), then continue negative slewing until the slewed output meets the positive sloping input */ *outs = *out_old - slope_fall*delta; pout_pin = 0; }else /* Two conditions for slewing, if the slope is greater than the positive slew rate, or if the input slope is less than the positive slew rate and the slewed output is less than the input. This second condition occurs if the input levels off and the slewed output hasn't caught up to the input yet */ if((slope > slope_rise) || ((slope < slope_rise) && (out_slew <= *ins))){ /* SLEWING ! */ *outs = out_slew; pout_pin = 0; }else{ /* No slewing, output=input */ *outs = *ins; pout_pin = 1; } }else{ /* this ends the positive slope stuff */ out_slew = *out_old - slope_fall*delta; if(*ins > (*out_old + slope_rise*delta)){ /* If the input had a positive slope (and the output was slewing) and then changed direction to a negative slope and the "slewed" response hasn't caught up to the input yet (input > slewed output), then continue positive slewing until the slewed output meets the negative sloping input */ *outs = *out_old + slope_rise*delta; pout_pin = 0; }else /* Two conditions for slewing, if the negative slope is greater than the neg. slew rate, or if the neg. input slope is less than the negative slew rate and the slewed output is greater than the input. This second condition occurs if the input levels off and the slewed output hasn't caught up to the input yet */ if((-slope > slope_fall) || ((-slope < slope_fall) && (out_slew > *ins))){ /* SLEWING ! */ *outs = out_slew; pout_pin = 0; }else{ *outs = *ins; pout_pin = 1; } } } /** Output values for DC & Transient **/ OUTPUT(out) = *outs; PARTIAL(out,in) = pout_pin; }else{ /**** AC Analysis...output (0.0,s*gain) ****/ ac_gain.real = 1.0; ac_gain.imag= 0; AC_GAIN(out,in) = ac_gain; } } tmpk8ny_4pz/src/xspice/icm/analog/sine/0000755000175000017500000000000013546075722020211 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/analog/sine/ifspec.ifs0000644000175000017500000000353013546075722022166 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 20 Mar 1991 Harry Li SUMMARY This file contains the interface specification file for the analog sine (controlled sinewave oscillator) code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_sine Spice_Model_Name: sine Description: "controlled sine wave oscillator" PORT_TABLE: Port_Name: cntl_in out Description: "input" "output" Direction: in out Default_Type: v v Allowed_Types: [v,vd,i,id,vnam] [v,vd,i,id] Vector: no no Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: cntl_array freq_array Description: "control in array" "frequency array" Data_Type: real real Default_Value: 0.0 1.0e3 Limits: - [0 -] Vector: yes yes Vector_Bounds: [2 -] [2 -] Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: out_low out_high Description: "output low value" "output high value" Data_Type: real real Default_Value: -1.0 1.0 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes tmpk8ny_4pz/src/xspice/icm/analog/sine/cfunc.mod0000644000175000017500000001441413546075722022014 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE sine/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 20 Mar 1991 Harry Li MODIFICATIONS 2 Oct 1991 Jeffrey P. Murray 7 Sep 2012 Holger Vogt SUMMARY This file contains the model-specific routines used to functionally describe the sine (controlled sine-wave oscillator) code model. INTERFACES FILE ROUTINE CALLED CMmacros.h cm_message_send(); CM.c void *cm_analog_alloc() void *cm_analog_get_ptr() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include #include /*=== CONSTANTS ========================*/ #define INT1 1 char *allocation_error = "\n**** Error ****\nSINE: Error allocating sine block storage \n"; char *limit_error = "\n**** Error ****\nSINE: Smoothing domain value too large \n"; char *sine_freq_clamp = "\n**** Warning ****\nSINE: Extrapolated frequency limited to 1e-16 Hz \n"; char *array_error = "\n**** Error ****\nSINE: Size of control array different than frequency array \n"; /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION void cm_sine() AUTHORS 20 Mar 1991 Harry Li MODIFICATIONS 2 Oct 1991 Jeffrey P. Murray 7 Sep 2012 Holger Vogt SUMMARY This function implements the sine (controlled sinewave oscillator) code model. INTERFACES FILE ROUTINE CALLED CMmacros.h cm_message_send(); CM.c void *cm_analog_alloc() void *cm_analog_get_ptr() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_SINE ROUTINE ===*/ void cm_sine(ARGS) { int i; /* generic loop counter index */ int cntl_size; /* control array size */ int freq_size; /* frequency array size */ Mif_Value_t *x; /* pointer to the control array values */ Mif_Value_t *y; /* pointer to the frequency array values */ double cntl_input; /* control input */ double dout_din; /* partial derivative of output wrt control in */ double output_low; /* output low value */ double output_hi; /* output high value */ double *phase; /* pointer to the instantaneous phase value */ double *phase1; /* pointer to the previous value for the phase */ double freq=0.0; /* frequency of the sine wave */ double center; /* dc offset for the sine wave */ double peak; /* peak voltage value for the wave */ double radian; /* phase value in radians */ Mif_Complex_t ac_gain; /**** Retrieve frequently used parameters... ****/ cntl_size = PARAM_SIZE(cntl_array); freq_size = PARAM_SIZE(freq_array); output_low = PARAM(out_low); output_hi = PARAM(out_high); if (cntl_size != freq_size) { cm_message_send(array_error); return; } if (INIT == 1) { cm_analog_alloc(INT1, sizeof(double)); } x = (Mif_Value_t*) &PARAM(cntl_array[0]); y = (Mif_Value_t*) &PARAM(freq_array[0]); if (ANALYSIS == MIF_DC) { OUTPUT(out) = (output_hi + output_low) / 2; PARTIAL(out, cntl_in) = 0; phase = (double *) cm_analog_get_ptr(INT1, 0); *phase = 0; } else if (ANALYSIS == MIF_TRAN) { phase = (double *) cm_analog_get_ptr(INT1, 0); phase1 = (double *) cm_analog_get_ptr(INT1, 1); /* Retrieve cntl_input value. */ cntl_input = INPUT(cntl_in); /* Determine segment boundaries within which cntl_input resides */ if (cntl_input <= x[0].rvalue) { /*** cntl_input below lowest cntl_voltage ***/ dout_din = (y[1].rvalue - y[0].rvalue) / (x[1].rvalue - x[0].rvalue); freq = y[0].rvalue + (cntl_input - x[0].rvalue) * dout_din; if (freq <= 0) { cm_message_send(sine_freq_clamp); freq = 1e-16; } } else if (cntl_input >= x[cntl_size-1].rvalue) { /*** cntl_input above highest cntl_voltage ***/ dout_din = (y[cntl_size-1].rvalue - y[cntl_size-2].rvalue) / (x[cntl_size-1].rvalue - x[cntl_size-2].rvalue); freq = y[cntl_size-1].rvalue + (cntl_input - x[cntl_size-1].rvalue) * dout_din; } else { /*** cntl_input within bounds of end midpoints... must determine position progressively & then calculate required output. ***/ for (i = 0; i < cntl_size - 1; i++) if ((cntl_input < x[i+1].rvalue) && (cntl_input >= x[i].rvalue)) { /* Interpolate to the correct frequency value */ freq = ((cntl_input - x[i].rvalue) / (x[i+1].rvalue - x[i].rvalue)) * (y[i+1].rvalue - y[i].rvalue) + y[i].rvalue; } } /* calculate the peak value of the wave, the center of the wave, the instantaneous phase and the radian value of the phase */ peak = (output_hi - output_low) / 2; center = (output_hi + output_low) / 2; *phase = *phase1 + freq*(TIME - T(1)); radian = *phase * 2.0 * M_PI; OUTPUT(out) = peak * sin(radian) + center; PARTIAL(out, cntl_in) = 0; } else { /* Output AC Gain */ ac_gain.real = 0.0; ac_gain.imag = 0.0; AC_GAIN(out, cntl_in) = ac_gain; } } tmpk8ny_4pz/src/xspice/icm/analog/square/0000755000175000017500000000000013546075722020553 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/analog/square/ifspec.ifs0000644000175000017500000000512613546075722022533 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 12 Apr 1991 Harry Li SUMMARY This file contains the interface specification file for the analog square (controlled squarewave oscillator) code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_square Spice_Model_Name: square Description: "controlled square wave oscillator" PORT_TABLE: Port_Name: cntl_in out Description: "input" "output" Direction: in out Default_Type: v v Allowed_Types: [v,vd,i,id,vnam] [v,vd,i,id] Vector: no no Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: cntl_array freq_array Description: "control in array" "frequency array" Data_Type: real real Default_Value: 0.0 1.0e3 Limits: - [0 -] Vector: yes yes Vector_Bounds: [2 -] [2 -] Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: out_low out_high Description: "output low value" "output high value" Data_Type: real real Default_Value: -1.0 1.0 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: duty_cycle rise_time Description: "duty cycle" "rise time" Data_Type: real real Default_Value: 0.5 1.0e-9 Limits: [1e-6 .999999] - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: fall_time Description: "fall time" Data_Type: real Default_Value: 1.0e-9 Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes STATIC_VAR_TABLE: Static_Var_Name: tran_init Description: "tran initialisation" Data_Type: boolean tmpk8ny_4pz/src/xspice/icm/analog/square/cfunc.mod0000644000175000017500000003006613546075722022357 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE square/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 12 Apr 1991 Harry Li MODIFICATIONS 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the model-specific routines used to functionally describe the square (controlled squarewave oscillator) code model. INTERFACES FILE ROUTINE CALLED CMmacros.h cm_message_send(); CM.c void *cm_analog_alloc() void *cm_analog_get_ptr() int cm_analog_set_temp_bkpt() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include /*=== CONSTANTS ========================*/ char *square_allocation_error = "\n**** Error ****\nSQUARE: Error allocating square block storage \n"; char *square_limit_error = "\n**** Error ****\nSQUARE: Smoothing domain value too large \n"; char *square_freq_clamp = "\n**** WARNING ****\nSQUARE: Frequency extrapolation limited to 1e-16 \n"; char *square_array_error = "\n**** Error ****\nSQUARE: Size of control array different than frequency array \n"; #define INT1 1 #define T1 2 #define T2 3 #define T3 4 #define T4 5 /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ typedef struct { Boolean_t tran_init; /* for initialization of phase1) */ } Local_Data_t; /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION void cm_square() AUTHORS 12 Apr 1991 Harry Li MODIFICATIONS 2 Oct 1991 Jeffrey P. Murray SUMMARY This function implements the square (controlled squarewave oscillator) code model. INTERFACES FILE ROUTINE CALLED CMmacros.h cm_message_send(); CM.c void *cm_analog_alloc() void *cm_analog_get_ptr() int cm_analog_set_temp_bkpt() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_SQUARE ROUTINE ===*/ /*********************************************************** * * * I <-dutycycle-> * * I * * I out_high * * I t2 | t3 * * I \____v_____/ * * I / \ * * I * * I / \ * * I * * I / \ * * I * * I-----------------I I--------------- * * ^ t1 t4 * * | * * out_low * * t2 = t1 + t_rise * * t4 = t3 + t_fall * * * ***********************************************************/ void cm_square(ARGS) { int i; /* generic loop counter index */ int cntl_size; /* control array size */ int freq_size; /* frequency array size */ int int_cycle; /* integer number of cycles */ Mif_Value_t *x; /* pointer to the control array values */ Mif_Value_t *y; /* pointer to the frequency array values */ double cntl_input; /* control input */ double dout_din; /* slope of the frequency array wrt the control array. Used to extrapolate a frequency above and below the control input high and low level */ double output_low; /* output low */ double output_hi; /* output high */ double dphase; /* fractional part into cycle */ double *phase; /* pointer to the phase value */ double *phase1; /* pointer to the old phase value */ double freq = 0.0; /* frequency of the wave */ double d_cycle; /* duty cycle */ double *t1; /* pointer containing the value of time1 */ double *t2; /* pointer containing the value of time2 */ double *t3; /* pointer containing the value of time3 */ double *t4; /* pointer containing the value of time4 */ double time1; /* time1 = duty_cycle * period of the wave */ double time2; /* time2 = time1 + risetime */ double time3; /* time3 = current time+time to end of period*/ double time4; /* time4 = time3 + falltime */ double t_rise; /* risetime */ double t_fall; /* falltime */ Mif_Complex_t ac_gain; /**** Retrieve frequently used parameters... ****/ cntl_size = PARAM_SIZE(cntl_array); freq_size = PARAM_SIZE(freq_array); output_low = PARAM(out_low); output_hi = PARAM(out_high); d_cycle = PARAM(duty_cycle); t_rise = PARAM(rise_time); t_fall = PARAM(fall_time); /* check and make sure that the control array is the same size as the frequency array */ if (cntl_size != freq_size) { cm_message_send(square_array_error); return; } /* First time throught allocate memory */ if (INIT == 1) { cm_analog_alloc(INT1, sizeof(double)); cm_analog_alloc(T1, sizeof(double)); cm_analog_alloc(T2, sizeof(double)); cm_analog_alloc(T3, sizeof(double)); cm_analog_alloc(T4, sizeof(double)); STATIC_VAR(tran_init) = MIF_FALSE; } x = (Mif_Value_t*) &PARAM(cntl_array[0]); y = (Mif_Value_t*) &PARAM(freq_array[0]); if (ANALYSIS == MIF_DC) { /* initialize time values */ t1 = (double *) cm_analog_get_ptr(T1, 0); t2 = (double *) cm_analog_get_ptr(T2, 0); t3 = (double *) cm_analog_get_ptr(T3, 0); t4 = (double *) cm_analog_get_ptr(T4, 0); *t1 = -1; *t2 = -1; *t3 = -1; *t4 = -1; OUTPUT(out) = output_low; PARTIAL(out, cntl_in) = 0; } else if (ANALYSIS == MIF_TRAN) { /* Retrieve previous values */ phase = (double *) cm_analog_get_ptr(INT1, 0); phase1 = (double *) cm_analog_get_ptr(INT1, 1); t1 = (double *) cm_analog_get_ptr(T1, 1); t2 = (double *) cm_analog_get_ptr(T2, 1); t3 = (double *) cm_analog_get_ptr(T3, 1); t4 = (double *) cm_analog_get_ptr(T4, 1); time1 = *t1; time2 = *t2; time3 = *t3; time4 = *t4; if (STATIC_VAR(tran_init) == MIF_FALSE) { *phase1 = 0.0; STATIC_VAR(tran_init) = MIF_TRUE; } /* Retrieve cntl_input value. */ cntl_input = INPUT(cntl_in); /* Determine segment boundaries within which cntl_input resides */ /*** cntl_input below lowest cntl_voltage ***/ if (cntl_input <= x[0].rvalue) { dout_din = (y[1].rvalue - y[0].rvalue) / (x[1].rvalue - x[0].rvalue); freq = y[0].rvalue + (cntl_input - x[0].rvalue) * dout_din; if (freq <= 0) { cm_message_send(square_freq_clamp); freq = 1e-16; } } else if (cntl_input >= x[cntl_size-1].rvalue) { /*** cntl_input above highest cntl_voltage ***/ dout_din = (y[cntl_size-1].rvalue - y[cntl_size-2].rvalue) / (x[cntl_size-1].rvalue - x[cntl_size-2].rvalue); freq = y[cntl_size-1].rvalue + (cntl_input - x[cntl_size-1].rvalue) * dout_din; } else { /*** cntl_input within bounds of end midpoints... must determine position progressively & then calculate required output. ***/ for (i = 0; i < cntl_size - 1; i++) { if ((cntl_input < x[i+1].rvalue) && (cntl_input >= x[i].rvalue)) { /* Interpolate to the correct frequency value */ freq = ((cntl_input - x[i].rvalue)/(x[i+1].rvalue - x[i].rvalue)) * (y[i+1].rvalue-y[i].rvalue) + y[i].rvalue; } } } /* calculate the instantaneous phase */ *phase = *phase1 + freq*(TIME - T(1)); /* convert the phase to an integer */ int_cycle = (int) *phase1; /* dphase is the percent into the cycle for the period */ dphase = *phase1 - int_cycle; /* Calculate the time variables and the output value for this iteration */ if ((time1 <= TIME) && (TIME <= time2)) { time3 = T(1) + (1 - dphase) / freq; time4 = time3 + t_fall; if (TIME < time2) cm_analog_set_temp_bkpt(time2); cm_analog_set_temp_bkpt(time3); cm_analog_set_temp_bkpt(time4); OUTPUT(out) = output_low + ((TIME - time1) / (time2 - time1)) * (output_hi - output_low); } else if ((time2 <= TIME) && (TIME <= time3)) { time3 = T(1) + (1.0 - dphase) / freq; time4 = time3 + t_fall; if (TIME < time3) cm_analog_set_temp_bkpt(time3); cm_analog_set_temp_bkpt(time4); OUTPUT(out) = output_hi; } else if ((time3 <= TIME) && (TIME <= time4)) { if (dphase > 1 - d_cycle) dphase = dphase - 1.0; /* subtract d_cycle from 1 because my initial definition of duty cyle was that part of the cycle which the output is low. The more standard definition is the part of the cycle where the output is high. */ time1 = T(1) + ((1-d_cycle) - dphase) / freq; time2 = time1 + t_rise; if (TIME < time4) cm_analog_set_temp_bkpt(time4); cm_analog_set_temp_bkpt(time1); cm_analog_set_temp_bkpt(time2); OUTPUT(out) = output_hi + ((TIME - time3) / (time4 - time3)) * (output_low - output_hi); } else { if (dphase > 1 - d_cycle) dphase = dphase - 1.0; /* subtract d_cycle from 1 because my initial definition of duty cyle was that part of the cycle which the output is low. The more standard definition is the part of the cycle where the output is high. */ time1 = T(1) + ((1-d_cycle) - dphase) / freq; time2 = time1 + t_rise; if ((TIME < time1) || (T(1) == 0)) cm_analog_set_temp_bkpt(time1); cm_analog_set_temp_bkpt(time2); OUTPUT(out) = output_low; } PARTIAL(out, cntl_in) = 0.0; /* set the time values for storage */ t1 = (double *) cm_analog_get_ptr(T1, 0); t2 = (double *) cm_analog_get_ptr(T2, 0); t3 = (double *) cm_analog_get_ptr(T3, 0); t4 = (double *) cm_analog_get_ptr(T4, 0); *t1 = time1; *t2 = time2; *t3 = time3; *t4 = time4; } else { /* Output AC Gain */ /* This model has no AC capabilities */ ac_gain.real = 0.0; ac_gain.imag = 0.0; AC_GAIN(out, cntl_in) = ac_gain; } } tmpk8ny_4pz/src/xspice/icm/analog/multi_input_pwl/0000755000175000017500000000000013546075722022506 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/analog/multi_input_pwl/ifspec.ifs0000644000175000017500000000302213546075722024457 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 2005 Intrinsity, Inc. Austin, TX 78738 All Rights Reserved AUTHORS 20 Oct 2005 Phil Barker SUMMARY This file contains the interface specification file for the analog multi-input gate pwl code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_multi_input_pwl Spice_Model_Name: multi_input_pwl Description: "multi_input_pwl block" PORT_TABLE: Port_Name: in out Description: "input array" "output" Direction: in out Default_Type: vd vd Allowed_Types: [vd,id] [vd,id] Vector: yes no Vector_Bounds: [2 -] - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: x y model Description: "x array" "y array" "model type" Data_Type: real real string Default_Value: 0.0 0.0 "and" Limits: - - - Vector: yes yes no Vector_Bounds: [2 -] [2 -] - Null_Allowed: no no yes tmpk8ny_4pz/src/xspice/icm/analog/multi_input_pwl/cfunc.mod0000644000175000017500000001013413546075722024304 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE multi_input_pwl/cfunc.mod Copyright 2005 Intrinsity, Inc. Austin, TX 78738 All Rights Reserved AUTHORS 20 Oct 2005 Phil Barker MODIFICATIONS 20 Oct 2005 Phil Barker SUMMARY This file contains the model-specific routines used to functionally describe the multi-input gate pwl. INTERFACES FILE ROUTINE CALLED N/A N/A REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION void cm_multi_input_pwl() AUTHORS 20 Oct 2005 Phil Barker MODIFICATIONS 20 Oct 2005 Phil Barker SUMMARY This function implements the multi-input gate pwl code model. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_MULTI_INPUT_PWL ROUTINE ===*/ #include #include #include static double get_smallest_input( ARGS ) { double smallest = INPUT(in[0]); int size = PORT_SIZE(in); int i; for ( i = 1; i < size; i++ ) if ( INPUT(in[i]) < smallest ) smallest = INPUT(in[i]); return smallest; } static double get_largest_input( ARGS ) { double largest = INPUT(in[0]); int size = PORT_SIZE(in); int i; for ( i = 1; i < size; i++ ) if ( INPUT(in[i]) > largest ) largest = INPUT(in[i]); return largest; } static double get_slope( ARGS, int i ) { return ( PARAM(y[i]) - PARAM(y[i-1]) )/( PARAM(x[i]) - PARAM(x[i-1]) ); } static double y_intercept( ARGS, int i, double slope ) { return ( PARAM(y[i]) - slope*PARAM(x[i]) ); } static double get_output( ARGS, double x ) { int size = PARAM_SIZE(x); double result = 0; double slope = 0; int i; /* check if x beyond specified limits */ if ( x <= PARAM(x[0]) ) return PARAM(y[0]); if ( x >= PARAM(x[size-1]) ) return PARAM(y[size-1]); for ( i = 1; i < size; i++ ) if ( x > PARAM(x[i-1]) && x <= PARAM(x[i]) ) { slope = get_slope( mif_private, i ); result = slope*x + y_intercept( mif_private, i, slope ); break; } return result; } void cm_multi_input_pwl(ARGS) { const char* model = ( PARAM_NULL(model) == 1 ) ? "and" : PARAM(model); double output; if ( ANALYSIS == TRANSIENT || ANALYSIS == DC ) { if ( strcmp( model, "and" ) != 0 && strcmp( model, "or" ) != 0 && strcmp( model, "nand" ) != 0 && strcmp( model, "nor" ) != 0 ) { fprintf( stderr, "ERROR(cm_multi_input_pwl): unknown gate model type '%s'; expecting 'and|or|nand|nor'.\n", model ); exit(-1); } if ( PARAM_SIZE(x) != PARAM_SIZE(y) ) { fprintf( stderr, "ERROR(cm_multi_input_pwl): 'x' and 'y' input vectors are not the same size!\n" ); exit(-1); } /* Iterate through each input and find output value and/nand: controlling input is chosen on the basis of the smallest value or/nor: controlling input is chosen on the basis of the largest value */ if (strstr(model, "and")) output = get_output(mif_private, get_smallest_input(mif_private)); else output = get_output(mif_private, get_largest_input(mif_private)); OUTPUT(out) = output; } } tmpk8ny_4pz/src/xspice/icm/analog/hyst/0000755000175000017500000000000013546075722020242 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/analog/hyst/ifspec.ifs0000644000175000017500000000524613546075722022225 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the analog hyst code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_hyst Spice_Model_Name: hyst Description: "hysteresis block" PORT_TABLE: Port_Name: in out Description: "input" "output" Direction: in out Default_Type: v v Allowed_Types: [v,vd,i,id,vnam] [v,vd,i,id] Vector: no no Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: in_low in_high Description: "input low value" "input high value" Data_Type: real real Default_Value: 0.0 1.0 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: hyst out_lower_limit Description: "hysteresis" "output lower limit" Data_Type: real real Default_Value: 0.1 0.0 Limits: [0 -] - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: out_upper_limit input_domain Description: "output upper limit" "input smoothing domain" Data_Type: real real Default_Value: 1.0 0.01 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: fraction Description: "smoothing percent/abs switch" Data_Type: boolean Default_Value: TRUE Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes tmpk8ny_4pz/src/xspice/icm/analog/hyst/cm_hyst.h0000644000175000017500000000227713546075722022071 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE hyst/cm_hyst.h Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 23 Oct 1990 Jeffrey P. Murray MODIFICATIONS 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains additional header information for the hyst code model. INTERFACES FILE ROUTINE CALLED N/A N/A REFERENCED FILES N/A NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ /*=== CONSTANTS ========================*/ #define HYST 1 #define X_RISING TRUE #define X_FALLING FALSE /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ tmpk8ny_4pz/src/xspice/icm/analog/hyst/cfunc.mod0000644000175000017500000003107113546075722022043 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE hyst/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 6 Jun 1991 Jeffrey P. Murray MODIFICATIONS 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the model-specific routines used to functionally describe the hyst code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_smooth_corner(); CM.c void *cm_analog_alloc() void *cm_analog_get_ptr() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include "cm_hyst.h" /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION void hyst() AUTHORS 2 Oct 1991 Jeffrey P. Murray MODIFICATIONS NONE SUMMARY This function implements the hyst code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_smooth_corner(); CM.c void *cm_analog_alloc() void *cm_analog_get_ptr() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_HYST ROUTINE ===*/ /************************************************************************* * BEHAVIOR OF HYSTERESIS: * * out hyst hyst * * ^ ____/\_____ ____/\_____ * * | / \/ \ * * | x_fall_linear x_rise_zero * * out_upper_limit- - *----<-------------<------*-------> * * | /| /| /| * * | / /in_high / * * | / | / | / | * * | / / __/ * * | |/_ | / | /| | * * | / / / * * | / | / | / | * * <------O----/------------/------------/-----------------------> in * * | | / | / | / * * | / / / * * <--------*------->----|---->-------* - - - - out_lower_limit * * x_fall_zero in_low x_rise_linear * * V * * * * input_domain defines "in" increment below & above the "*" points * * shown, within which smoothing of the d(out)/d(in) values * * occurs...this prevents abrupt changes in d(out)/d(in) which * * could prevent the simulator from reaching convergence during * * a transient or DC analysis. * * * **************************************************************************/ /**************************************************************************/ /* Usage of cm_smooth_corner: */ /* */ /* void cm_smooth_corner(double x_input, double x_center, double y_center, */ /* double domain, double lower_slope, */ /* double upper_slope,double *y_output, double *dy_dx) */ /* */ /**************************************************************************/ void cm_hyst(ARGS) /* structure holding parms, inputs, outputs, etc. */ { double in, /* input to hysteresis block */ out, /* output from hysteresis block */ in_low, /* lower input value for hyst=0 at which the transfer curve changes from constant to linear */ in_high, /* upper input value for hyst=0 at which the transfer curve changes from constant to linear */ hyst, /* the hysteresis value (see above diagram) */ out_lower_limit, /* the minimum output value from the block */ out_upper_limit, /* the maximum output value from the block */ input_domain, /* the delta value of the input above and below in_low and in_high within which smoothing will be applied to the output in order to maintain continuous first partial derivatives. */ slope, /* calculated rise and fall slope for the block */ pout_pin, /* partial derivative of output w.r.t. input */ x_rise_linear, /* = in_low + hyst */ x_rise_zero, /* = in_high + hyst */ x_fall_linear, /* = in_high - hyst */ x_fall_zero; /* = in_low - hyst */ Boolean_t *hyst_state, /* TRUE => input is on lower leg of hysteresis curve, between -infinity and in_high + hyst. FALSE => input is on upper leg of hysteresis curve, between in_low - hyst and +infinity */ *old_hyst_state; /* previous value of *hyst_state */ Mif_Complex_t ac_gain; /* AC gain */ /** Retrieve frequently used parameters... **/ in_low = PARAM(in_low); in_high = PARAM(in_high); hyst = PARAM(hyst); out_lower_limit = PARAM(out_lower_limit); out_upper_limit = PARAM(out_upper_limit); input_domain = PARAM(input_domain); /** Calculate Hysteresis Linear Region Slopes & Derived Values **/ /* Define slope of rise and fall lines when not being smoothed */ slope = (out_upper_limit - out_lower_limit)/(in_high - in_low); x_rise_linear = in_low + hyst; /* Breakpoint - x rising to linear region */ x_rise_zero = in_high + hyst; /* Breakpoint - x rising to zero-slope (out_upper_limit) */ x_fall_linear = in_high - hyst; /* Breakpoint - x falling to linear region */ x_fall_zero = in_low - hyst; /* Breakpoint - x falling to zero-slope (out_lower_limit) */ if (PARAM(fraction) == MIF_TRUE) /* Set range to absolute value */ input_domain = input_domain * (in_high - in_low); /** Retrieve frequently used inputs... **/ in = INPUT(in); /** Test for INIT; if so, allocate storage, otherwise, retrieve previous timepoint value for output... **/ if (INIT==1) { /* First pass...allocate storage for previous state. */ /* Also, calculate roughly where the current output */ /* will be and use this value to define current state. */ cm_analog_alloc(TRUE,sizeof(Boolean_t)); hyst_state = (Boolean_t *) cm_analog_get_ptr(TRUE,0); old_hyst_state = (Boolean_t *) cm_analog_get_ptr(TRUE,1); if (in < x_rise_zero + input_domain) { /* Set state to X_RISING */ *old_hyst_state = X_RISING; } else { *old_hyst_state = X_FALLING; } } else { /* Allocation not necessary...retrieve previous values */ hyst_state = (Boolean_t *) cm_analog_get_ptr(TRUE,0); /* Set out pointer to current time storage */ old_hyst_state = (Boolean_t *) cm_analog_get_ptr(TRUE,1); /* Set old-output-state pointer to previous time storage */ } /** Set *hyst_out = *old_hyst_out, unless changed below... we don't need the last iteration value of *hyst_state. **/ *hyst_state = *old_hyst_state; /*** Calculate value of hyst_state, pout_pin.... ***/ if (*old_hyst_state == X_RISING) { /* Assume calculations on lower */ /* hysteresis section (x rising) */ if ( in <= x_rise_linear - input_domain ) { /* Output @ lower limit */ out = out_lower_limit; pout_pin = 0.0; } else { if ( in <= x_rise_linear + input_domain ) { /* lower smoothing region */ cm_smooth_corner(in,x_rise_linear,out_lower_limit,input_domain, 0.0,slope,&out,&pout_pin); } else { if (in <= x_rise_zero - input_domain) { /* Rising linear region */ out = (in - x_rise_linear)*slope + out_lower_limit; pout_pin = slope; } else { if (in <= x_rise_zero + input_domain) { /* Upper smoothing region */ cm_smooth_corner(in,x_rise_zero,out_upper_limit,input_domain, slope,0.0,&out,&pout_pin); } else { /* input has transitioned to X_FALLING region... */ out = out_upper_limit; pout_pin = 0.0; *hyst_state = X_FALLING; } } } } } else { /* Assume calculations on upper hysteresis section (x falling) */ if ( in >= x_fall_linear + input_domain ) { /* Output @ upper limit */ out = out_upper_limit; pout_pin = 0.0; } else { if ( in >= x_fall_linear - input_domain ) { /* Upper smoothing region */ cm_smooth_corner(in,x_fall_linear,out_upper_limit,input_domain, slope,0.0,&out,&pout_pin); } else { if (in >= x_fall_zero + input_domain) { /* Falling linear region */ out = (in - x_fall_zero)*slope + out_lower_limit; pout_pin = slope; } else { if (in >= x_fall_zero - input_domain) { /* Lower smoothing region */ cm_smooth_corner(in,x_fall_zero,out_lower_limit,input_domain, 0.0,slope,&out,&pout_pin); } else { /* input has transitioned to X_RISING region... */ out = out_lower_limit; pout_pin = 0.0; *hyst_state = X_RISING; } } } } } if (ANALYSIS != MIF_AC) { /* DC & Transient Analyses */ OUTPUT(out) = out; PARTIAL(out,in) = pout_pin; } else { /* AC Analysis */ ac_gain.real = pout_pin; ac_gain.imag= 0.0; AC_GAIN(out,in) = ac_gain; } } tmpk8ny_4pz/src/xspice/icm/analog/oneshot/0000755000175000017500000000000013546075722020732 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/analog/oneshot/ifspec.ifs0000644000175000017500000001010513546075722022703 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 20 Mar 1991 Harry Li SUMMARY This file contains the interface specification file for the analog oneshot code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_oneshot Spice_Model_Name: oneshot Description: "one-shot" PORT_TABLE: Port_Name: clk cntl_in Description: "clock input" "input" Direction: in in Default_Type: v v Allowed_Types: [v,vd,vnam,i,id] [v,vnam,vd,i,id] Vector: no no Vector_Bounds: - - Null_Allowed: no yes PORT_TABLE: Port_Name: clear out Description: "clear signal" "output" Direction: in out Default_Type: v v Allowed_Types: [v,vd,vnam,i,id] [v,vd,i,id] Vector: no no Vector_Bounds: - - Null_Allowed: yes no PARAMETER_TABLE: Parameter_Name: cntl_array pw_array Description: "control in array" "pulse width array" Data_Type: real real Default_Value: 0.0 1.0e-6 Limits: - [0 -] Vector: yes yes Vector_Bounds: [2 -] [2 -] Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: clk_trig pos_edge_trig Description: "clock trigger value" "pos/neg edge trigger switch" Data_Type: real boolean Default_Value: 0.5 TRUE Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: out_low out_high Description: "output low value" "output high value" Data_Type: real real Default_Value: 0.0 1.0 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: rise_time Description: "output rise time" Data_Type: real Default_Value: 1.0e-9 Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: rise_delay fall_delay Description: "output delay from trigger" "output delay from pw" Data_Type: real real Default_Value: 1.0e-9 1.0e-9 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: fall_time retrig Description: "output rise time" "retrigger switch" Data_Type: real boolean Default_Value: 1.0e-9 FALSE Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes STATIC_VAR_TABLE: Static_Var_Name: locdata Description: "local static data" Data_Type: pointer tmpk8ny_4pz/src/xspice/icm/analog/oneshot/oneshot.h0000644000175000017500000000174413546075722022570 0ustar carstencarsten/************************************************/ /****** Structures, etc. for pwl model. ******/ /****** 10/10/90 JPM ******/ /************************************************/ /**** Error Messages ****/ char *oneshot_allocation_error = "\n**** Error ****\nONESHOT: Error allocating oneshot block storage \n"; char *oneshot_array_error = "\n**** Error ****\nONESHOT: Size of control array different than pulse-width array \n"; char *oneshot_pw_clamp = "\n**** Warning ****\nONESHOT: Extrapolated Pulse-Width Limited to zero \n"; #define T1 1 #define T2 2 #define T3 3 #define T4 4 #define SET 5 #define STATE 6 #define CLOCK 7 #define OUTPUT_OLD 8 #define LOCKED 9 /***** Define Error Messages **************************************/ /***** Structure Definitions *************************************/ /***** Function Definitions ***************************************/ tmpk8ny_4pz/src/xspice/icm/analog/oneshot/cfunc.mod0000644000175000017500000004331413546075722022536 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE oneshot/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 20 Mar 1991 Harry Li MODIFICATIONS 17 Sep 1991 Jeffrey P. Murray 2 Oct 1991 Jeffrey P. Murray 9 Sep 2012 Holger Vogt SUMMARY This file contains the model-specific routines used to functionally describe the oneshot code model. INTERFACES FILE ROUTINE CALLED CMmacros.h cm_message_send(); CM.c void *cm_analog_alloc() void *cm_analog_get_ptr() int cm_analog_set_temp_bkpt() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include "oneshot.h" /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ typedef struct { double *control; /* the storage array for the control vector (cntl_array) */ double *pw; /* the storage array for the pulse width array (pw_array) */ int tran_init; /* for initialization of old_clock) */ } Local_Data_t; /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION void cm_oneshot() AUTHORS 20 Mar 1991 Harry Li MODIFICATIONS 17 Sep 1991 Jeffrey P. Murray 2 Oct 1991 Jeffrey P. Murray 9 Sep 2012 Holger Vogt SUMMARY This function implements the oneshot code model. INTERFACES FILE ROUTINE CALLED CMmacros.h cm_message_send(); CM.c void *cm_analog_alloc() void *cm_analog_get_ptr() int cm_analog_set_temp_bkpt() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_ONESHOT ROUTINE ===*/ /*************************************************************************************** * * This model describes a totally analog oneshot. * After a rising edge is detected, the model will * output a pulse width specified by the controling * voltage. * HWL 20Mar91 * * * * ___________________________________ * /<---pulse width ---> :\ * / : : : \ * <---rise_delay--> / : :<-fall_delay->: \ * ___|________________/ : : : \____________ * ^ <-->: : :<--> * Trigger Risetime Falltime * * ****************************************************************************************/ #include void cm_oneshot(ARGS) /* structure holding parms, inputs, outputs, etc. */ { int i; /* generic loop counter index */ int *locked; /* pointer used to store the locked1 variable */ int locked1; /* flag which allows the time points to be reset. value determined by retrig parameter */ int cntl_size; /* size of the control array */ int pw_size; /* size of the pulse-width array */ int *state; /* pointer used to store state1 variable */ int state1; /* if state1 = 1, then oneshot has been triggered. if state1 = 0, no change */ int *set; /* pointer used to store the state of set1 */ int set1; /* flag used to set/reset the oneshot */ int trig_pos_edge; /* flag used to define positive or negative edge triggering. 1=positive, 0=negative */ double *x; /* pointer used to store the control array */ double *y; /* pointer used to store the pulse-width array */ double cntl_input; /* the actual value of the control input */ /*double out;*/ /* value of the output */ double dout_din; /* slope of the pw wrt the control voltage */ double output_low; /* output low value */ double output_hi; /* output high value */ double pw=0.0; /* actual value of the pulse-width */ /* double del_out; value of the delay time between triggering and a change in the output */ double del_rise; /* value of the delay time between triggering and a change in the output */ double del_fall; /* value of the delay time between the end of the pw and a change in the output */ double *t1; /* pointer used to store time1 */ double *t2; /* pointer used to store time2 */ double *t3; /* pointer used to store time3 */ double *t4; /* pointer used to store time4 */ double time1; /* time at which the output first begins to change (trigger + delay) */ double time2; /* time2 = time1 + risetime */ double time3; /* time3 = time2 + pw */ double time4; /* time4 = time3 + falltime */ double t_rise; /* risetime */ double t_fall; /* falltime */ double *output_old;/* pointer which stores the previous output */ double *clock; /* pointer which stores the clock */ double *old_clock; /* pointer which stores the previous clock */ double trig_clk; /* value at which the clock triggers the oneshot */ Mif_Complex_t ac_gain; Local_Data_t *loc; /* Pointer to local static data, not to be included in the state vector */ /**** Retrieve frequently used parameters... ****/ cntl_size = PARAM_SIZE(cntl_array); pw_size = PARAM_SIZE(pw_array); trig_clk = PARAM(clk_trig); trig_pos_edge = PARAM(pos_edge_trig); output_low = PARAM(out_low); output_hi = PARAM(out_high); /*del_out = PARAM(delay);*/ del_rise = PARAM(rise_delay); del_fall = PARAM(fall_delay); t_rise = PARAM(rise_time); t_fall = PARAM(fall_time); /* set minimum rise and fall_times */ if(t_rise < 1e-12) { t_rise = 1e-12; } if(t_fall < 1e-12) { t_fall = 1e-12; } /* the control array must be the same size as the pulse-width array */ if(cntl_size != pw_size) { cm_message_send(oneshot_array_error); return; } if(INIT == 1) { /* first time through, allocate memory */ cm_analog_alloc(T1,sizeof(double)); cm_analog_alloc(T2,sizeof(double)); cm_analog_alloc(T3,sizeof(double)); cm_analog_alloc(T4,sizeof(double)); cm_analog_alloc(SET,sizeof(int)); cm_analog_alloc(STATE,sizeof(int)); cm_analog_alloc(CLOCK,sizeof(double)); cm_analog_alloc(LOCKED,sizeof(int)); cm_analog_alloc(OUTPUT_OLD,sizeof(double)); /*** allocate static storage for *loc ***/ STATIC_VAR (locdata) = calloc (1 , sizeof ( Local_Data_t )); loc = STATIC_VAR (locdata); /* Allocate storage for breakpoint domain & pulse width values */ x = loc->control = (double *) calloc((size_t) cntl_size, sizeof(double)); if (!x) { cm_message_send(oneshot_allocation_error); return; } y = loc->pw = (double *) calloc((size_t) pw_size, sizeof(double)); if (!y) { cm_message_send(oneshot_allocation_error); return; } loc->tran_init = FALSE; } if(ANALYSIS == MIF_DC) { /* for DC, initialize values and set the output = output_low */ t1 = (double *) cm_analog_get_ptr(T1,0); t2 = (double *) cm_analog_get_ptr(T2,0); t3 = (double *) cm_analog_get_ptr(T3,0); t4 = (double *) cm_analog_get_ptr(T4,0); set = (int *) cm_analog_get_ptr(SET,0); state = (int *) cm_analog_get_ptr(STATE,0); locked = (int *) cm_analog_get_ptr(LOCKED,0); output_old = (double *) cm_analog_get_ptr(OUTPUT_OLD,0); /* initialize time and state values */ *t1 = -1; *t2 = -1; *t3 = -1; *t4 = -1; *set = 0; *locked = 0; *state = 0; *output_old = output_low; OUTPUT(out) = output_low; if(PORT_NULL(cntl_in) != 1) { PARTIAL(out,cntl_in) = 0; } if(PORT_NULL(clear) != 1) { PARTIAL(out,clear) = 0; } PARTIAL(out,clk) = 0; } else if(ANALYSIS == MIF_TRAN) { /* retrieve previous values, set them equal to the variables Note that these pointer values are immediately dumped into other variables because the previous values can't change- can't rewrite the old values */ t1 = (double *) cm_analog_get_ptr(T1,1); t2 = (double *) cm_analog_get_ptr(T2,1); t3 = (double *) cm_analog_get_ptr(T3,1); t4 = (double *) cm_analog_get_ptr(T4,1); set = (int*) cm_analog_get_ptr(SET,1); state = (int *) cm_analog_get_ptr(STATE,1); locked = (int *) cm_analog_get_ptr(LOCKED,1); clock = (double *) cm_analog_get_ptr(CLOCK,0); old_clock = (double *) cm_analog_get_ptr(CLOCK,1); output_old = (double *) cm_analog_get_ptr(OUTPUT_OLD,1); time1 = *t1; time2 = *t2; time3 = *t3; time4 = *t4; set1 = *set; state1 = *state; locked1 = *locked; if((PORT_NULL(clear) != 1) && (INPUT(clear) > trig_clk)) { time1 = -1; time2 = -1; time3 = -1; time4 = -1; set1 = 0; locked1 = 0; state1 = 0; OUTPUT(out) = output_low; } else { loc = STATIC_VAR (locdata); x = loc->control; y = loc->pw; if (!loc->tran_init) { *old_clock = 0.0; loc->tran_init = TRUE; } /* Retrieve control and pulse-width values. */ for (i=0; i= x[cntl_size-1]) { dout_din = (y[cntl_size-1] - y[cntl_size-2]) / (x[cntl_size-1] - x[cntl_size-2]); pw = y[cntl_size-1] + (cntl_input - x[cntl_size-1]) * dout_din; } else { /*** cntl_input within bounds of end midpoints... must determine position progressively & then calculate required output. ***/ for (i=0; i= x[i])) { /* Interpolate to get the correct pulse width value */ pw = ((cntl_input - x[i])/(x[i+1] - x[i]))* (y[i+1]-y[i]) + y[i]; } } } if(trig_pos_edge) { /* for a positive edge trigger */ if(!set1) { /* if set1=0, then look for 1. a rising edge trigger 2. the clock to be higher than the trigger value */ if((*clock > *old_clock) && (*clock > trig_clk)) { state1 = 1; set1 = 1; } } else /* look for a neg edge before resetting the trigger */ if((*clock < *old_clock) && (*clock < trig_clk)) { set1 = 0; } } else { /* This stuff belongs to the case where a negative edge is needed */ if(!set1) { if((*clock < *old_clock) && (*clock < trig_clk)) { state1 = 1; set1 = 1; } } else /* look for a pos edge before resetting the trigger */ if((*clock > *old_clock) && (*clock > trig_clk)) { set1 = 0; } } /* I can only set the breakpoints if the state1 is high and the output is low, and locked = 0 */ if((state1) && (*output_old - output_low < 1e-20) && (!locked1)) { /* if state1 is 1, and the output is low, then set the time points and the temporary breakpoints */ time1 = TIME + del_rise; time2 = time1 + t_rise; time3 = time2 + pw + del_fall; time4 = time3 + t_fall; if(PARAM(retrig) == MIF_FALSE) { locked1 = 1; } if((TIME < time1) || (T(1) == 0)) { cm_analog_set_perm_bkpt(time1); } cm_analog_set_perm_bkpt(time2); cm_analog_set_perm_bkpt(time3); cm_analog_set_perm_bkpt(time4); /* reset the state value */ state1 = 0; OUTPUT(out) = output_low; } else /* state1 = 1, and the output is high, then just set time3 and time4. Temporary breakpoints don't do for now, so use permanent breakpoints. This implies that the oneshot was retriggered */ if((state1) && (*output_old - output_hi < 1e-20) && (!locked1)) { time3 = TIME + pw + del_rise + del_fall + t_rise; time4 = time3 + t_fall; cm_analog_set_perm_bkpt(time3); cm_analog_set_perm_bkpt(time4); OUTPUT(out) = output_hi; state1 = 0; } /* reset the state if it's 1 and the locked flag is 1. This means that the clock tried to retrigger the oneshot, but the retrig flag prevented it from doing so */ if((state1) && (locked1)) { state1 = 0; } /* set the value for the output depending on the current time, and the values of time1, time2, time3, and time4 */ if(TIME < time1) { OUTPUT(out) = output_low; } else if((time1 <= TIME) && (TIME < time2)) { OUTPUT(out) = output_low + ((TIME - time1)/(time2 - time1))* (output_hi - output_low); } else if((time2 <= TIME) && (TIME < time3)) { OUTPUT(out) = output_hi; } else if((time3 <= TIME) && (TIME < time4)) { OUTPUT(out) = output_hi + ((TIME - time3)/(time4 - time3))* (output_low - output_hi); } else { OUTPUT(out) = output_low; /* oneshot can now be retriggered, set locked to 0 */ if(PARAM(retrig) == MIF_FALSE) { locked1 = 0; } } } /* set the variables which need to be stored for the next iteration */ t1 = (double *) cm_analog_get_ptr(T1,0); t2 = (double *) cm_analog_get_ptr(T2,0); t3 = (double *) cm_analog_get_ptr(T3,0); t4 = (double *) cm_analog_get_ptr(T4,0); set = (int *) cm_analog_get_ptr(SET,0); locked = (int *) cm_analog_get_ptr(LOCKED,0); state = (int *) cm_analog_get_ptr(STATE,0); output_old = (double *) cm_analog_get_ptr(OUTPUT_OLD,0); *t1 = time1; *t2 = time2; *t3 = time3; *t4 = time4; *set = set1; *state = state1; *output_old = OUTPUT(out); *locked = locked1; if(PORT_NULL(cntl_in) != 1) { PARTIAL(out,cntl_in) = 0; } if(PORT_NULL(clear) != 1) { PARTIAL(out,clear) = 0; } PARTIAL(out,clk) = 0 ; } else { /* Output AC Gain */ /* This model has no AC capability */ ac_gain.real = 0.0; ac_gain.imag= 0.0; AC_GAIN(out,clk) = ac_gain; } } tmpk8ny_4pz/src/xspice/icm/analog/ilimit/0000755000175000017500000000000013546075722020542 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/analog/ilimit/ifspec.ifs0000644000175000017500000000754013546075722022524 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the analog ilimit code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_ilimit Spice_Model_Name: ilimit Description: "current limiter block" PORT_TABLE: Port_Name: in pos_pwr Description: "input" "positive power supply" Direction: in inout Default_Type: v g Allowed_Types: [v,vd,i,id,vnam] [g,gd] Vector: no no Vector_Bounds: - - Null_Allowed: no yes PORT_TABLE: Port_Name: neg_pwr out Description: "negative power supply" "output" Direction: inout inout Default_Type: g g Allowed_Types: [g,gd] [g,gd] Vector: no no Vector_Bounds: - - Null_Allowed: yes no PARAMETER_TABLE: Parameter_Name: in_offset gain Description: "input offset" "gain" Data_Type: real real Default_Value: 0.0 1.0 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: r_out_source r_out_sink Description: "sourcing resistance" "sinking resistance" Data_Type: real real Default_Value: 1.0 1.0 Limits: [1e-9 1e9] [1e-9 1e9] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: i_limit_source i_limit_sink Description: "current sourcing limit" "current sinking limit" Data_Type: real real Default_Value: 10.0e-3 10.0e-3 Limits: [1e-12 -] [1e-12 -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: v_pwr_range i_source_range Description: "pwr. smoothing range" "sourcing cur sm. rng" Data_Type: real real Default_Value: 1e-6 1e-9 Limits: [1e-15 -] [1e-15 -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: i_sink_range r_out_domain Description: "sinking cur sm. rng" "output resistance sm. domain" Data_Type: real real Default_Value: 1e-9 1e-9 Limits: [1e-15 -] [1e-15 -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes tmpk8ny_4pz/src/xspice/icm/analog/ilimit/cfunc.mod0000644000175000017500000003277713546075722022361 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE ilimit/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 6 Jun 1991 Jeffrey P. Murray MODIFICATIONS 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the model-specific routines used to functionally describe the ilimit code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_smooth_corner(); void cm_smooth_discontinuity(); void cm_climit_fcn() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION void cm_ilimit() AUTHORS 6 Jun 1991 Jeffrey P. Murray MODIFICATIONS 2 Oct 1991 Jeffrey P. Murray SUMMARY This function implements the ilimit code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_smooth_corner(); void cm_smooth_discontinuity(); void cm_climit_fcn() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_ILIMIT ROUTINE ===*/ void cm_ilimit(ARGS) /* structure holding parms, inputs, outputs, etc. */ { double in_offset,gain,r_out_source,r_out_sink,i_limit_source, i_limit_sink,v_pwr_range,i_source_range,i_sink_range, r_out_domain,/*out_lower_limit,out_upper_limit,*/veq,pveq_pvin, pveq_pvpos,pveq_pvneg,r_out,pr_out_px,i_out,i_threshold_lower, i_threshold_upper,i_pos_pwr,pi_out_pvin,pi_pos_pvneg, pi_pos_pvpos,pi_pos_pvout,i_neg_pwr,pi_neg_pvin,pi_neg_pvneg, pi_neg_pvpos,pi_neg_pvout,vout,pi_out_plimit,pi_out_pvout, pi_out_ppos_pwr,pi_out_pneg_pwr,pi_pos_pvin,pi_neg_plimit, pi_pos_plimit,pos_pwr_in,neg_pwr_in; Mif_Complex_t ac_gain; /* Retrieve frequently used parameters... */ in_offset = PARAM(in_offset); gain = PARAM(gain); r_out_source = PARAM(r_out_source); r_out_sink = PARAM(r_out_sink); i_limit_source = PARAM(i_limit_source); i_limit_sink = PARAM(i_limit_sink); v_pwr_range = PARAM(v_pwr_range); i_source_range = PARAM(i_source_range); i_sink_range = PARAM(i_sink_range); r_out_domain = PARAM(r_out_domain); /* Retrieve frequently used inputs... */ vout = INPUT(out); /* Test to see if pos_pwr or neg_pwr are connected... */ /* if not, assign large voltage values to the variables */ /* pos_pwr andneg_pwr... */ if ( PORT_NULL(pos_pwr) ) { pos_pwr_in = 1.0e6; } else { pos_pwr_in = INPUT(pos_pwr); } if ( PORT_NULL(neg_pwr) ) { neg_pwr_in = -1.0e6; } else { neg_pwr_in = INPUT(neg_pwr); } /* Compute Veq plus derivatives using climit_fcn */ if(INIT != 1){ /* If reasonable power and voltage values exist (i.e., not INIT)... */ /* then calculate expected equivalent voltage values and derivs. */ cm_climit_fcn(INPUT(in), in_offset, pos_pwr_in, neg_pwr_in, 0.0, 0.0, v_pwr_range, gain, MIF_FALSE, &veq, &pveq_pvin, &pveq_pvneg, &pveq_pvpos); } else { /* Initialization pass...set nominal values */ veq = (pos_pwr_in - neg_pwr_in) / 2.0; pveq_pvin = 0.0; pveq_pvpos = 0.0; pveq_pvneg = 0.0; } /* Calculate Rout */ if (r_out_source == r_out_sink) { /* r_out constant => no calculation necessary */ r_out = r_out_source; pr_out_px = 0.0; } else { /* Interpolate smoothly between sourcing & sinking values */ cm_smooth_discontinuity(veq - vout, -r_out_domain, r_out_sink, r_out_domain, r_out_source, &r_out, &pr_out_px); } /* Calculate i_out & derivatives */ i_threshold_lower = -i_limit_sink + i_sink_range; i_threshold_upper = i_limit_source - i_source_range; i_out = (veq - vout) / r_out; pi_out_pvin = (pveq_pvin/r_out - veq*pr_out_px*pveq_pvin/ (r_out*r_out)); pi_out_pvout = (-1.0/r_out - vout*pr_out_px/(r_out*r_out)); pi_out_ppos_pwr = (pveq_pvpos/r_out - veq*pr_out_px*pveq_pvpos/ (r_out*r_out)); pi_out_pneg_pwr = (pveq_pvneg/r_out - veq*pr_out_px*pveq_pvneg/ (r_out*r_out)); /* Preset i_pos_pwr & i_neg_pwr & partials to 0.0 */ i_pos_pwr = 0.0; pi_pos_pvin = 0.0; pi_pos_pvneg = 0.0; pi_pos_pvpos = 0.0; pi_pos_pvout = 0.0; i_neg_pwr = 0.0; pi_neg_pvin = 0.0; pi_neg_pvneg = 0.0; pi_neg_pvpos = 0.0; pi_neg_pvout = 0.0; /* Determine operating point of i_out for limiting */ if (i_out < 0.0) { /* i_out sinking */ if (i_out < i_threshold_lower) { if (i_out < (-i_limit_sink-i_sink_range)) { /* i_out lower-limited */ i_out = -i_limit_sink; i_neg_pwr = -i_out; pi_out_pvin = 0.0; pi_out_pvout = 0.0; pi_out_ppos_pwr = 0.0; pi_out_pneg_pwr = 0.0; } else { /* i_out in lower smoothing region */ cm_smooth_corner(i_out,-i_limit_sink,-i_limit_sink,i_sink_range, 0.0,1.0,&i_out,&pi_out_plimit); pi_out_pvin = pi_out_pvin * pi_out_plimit; pi_out_pvout = pi_out_pvout * pi_out_plimit; pi_out_ppos_pwr = pi_out_ppos_pwr * pi_out_plimit; pi_out_pneg_pwr = pi_out_pneg_pwr * pi_out_plimit; i_neg_pwr = -i_out; pi_neg_pvin = -pi_out_pvin; pi_neg_pvneg = -pi_out_pneg_pwr; pi_neg_pvpos = -pi_out_ppos_pwr; pi_neg_pvout = -pi_out_pvout; } } else { /* i_out in lower linear region...calculate i_neg_pwr */ if (i_out > -2.0*i_sink_range) { /* i_out near 0.0...smooth i_neg_pwr */ cm_smooth_corner(i_out,-i_sink_range,0.0,i_sink_range,1.0,0.0, &i_neg_pwr,&pi_neg_plimit); i_neg_pwr = -i_neg_pwr; pi_neg_pvin = -pi_out_pvin * pi_neg_plimit; pi_neg_pvneg = -pi_out_pneg_pwr * pi_neg_plimit; pi_neg_pvpos = -pi_out_ppos_pwr * pi_neg_plimit; pi_neg_pvout = -pi_out_pvout * pi_neg_plimit; } else { i_neg_pwr = -i_out; /* Not near i_out=0.0 => i_neg_pwr=-i_out */ pi_neg_pvin = -pi_out_pvin; pi_neg_pvneg = -pi_out_pneg_pwr; pi_neg_pvpos = -pi_out_ppos_pwr; pi_neg_pvout = -pi_out_pvout; } } } else { /* i_out sourcing */ if (i_out > i_threshold_upper) { if (i_out > (i_limit_source + i_source_range)) { /* i_out upper-limited */ i_out = i_limit_source; i_pos_pwr = -i_out; pi_out_pvin = 0.0; pi_out_pvout = 0.0; pi_out_ppos_pwr = 0.0; pi_out_pneg_pwr = 0.0; } else { /* i_out in upper smoothing region */ cm_smooth_corner(i_out,i_limit_source,i_limit_source,i_sink_range, 1.0,0.0,&i_out,&pi_out_plimit); pi_out_pvin = pi_out_pvin * pi_out_plimit; pi_out_pvout = pi_out_pvout * pi_out_plimit; pi_out_ppos_pwr = pi_out_ppos_pwr * pi_out_plimit; pi_out_pneg_pwr = pi_out_pneg_pwr * pi_out_plimit; i_pos_pwr = -i_out; pi_pos_pvin = -pi_out_pvin; pi_pos_pvneg = -pi_out_pneg_pwr; pi_pos_pvpos = -pi_out_ppos_pwr; pi_pos_pvout = -pi_out_pvout; } } else { /* i_out in upper linear region...calculate i_pos_pwr */ if (i_out < 2.0*i_source_range) { /* i_out near 0.0...smooth i_pos_pwr */ cm_smooth_corner(i_out,i_source_range,0.0,i_source_range,0.0,1.0, &i_pos_pwr,&pi_pos_plimit); i_pos_pwr = -i_pos_pwr; pi_pos_pvin = -pi_out_pvin * pi_pos_plimit; pi_pos_pvneg = -pi_out_pneg_pwr * pi_pos_plimit; pi_pos_pvpos = -pi_out_ppos_pwr * pi_pos_plimit; pi_pos_pvout = -pi_out_pvout * pi_pos_plimit; } else { /* Not near i_out=0.0 => i_pos_pwr=-i_out */ i_pos_pwr = -i_out; pi_pos_pvin = -pi_out_pvin; pi_pos_pvneg = -pi_out_pneg_pwr; pi_pos_pvpos = -pi_out_ppos_pwr; pi_pos_pvout = -pi_out_pvout; } } } if (ANALYSIS != MIF_AC) { /* DC & Transient Analyses */ /* Debug line...REMOVE FOR FINAL VERSION!!! */ /*OUTPUT(t1) = veq; OUTPUT(t2) = r_out; OUTPUT(t3) = pveq_pvin; OUTPUT(t4) = pveq_pvpos; OUTPUT(t5) = pveq_pvneg;*/ OUTPUT(out) = -i_out; /* Remember...current polarity must be */ PARTIAL(out,in) = -pi_out_pvin; /* reversed for SPICE...all previous code */ PARTIAL(out,out) = -pi_out_pvout; /* assumes i_out positive when EXITING */ /* the model and negative when entering. */ /* SPICE assumes the opposite, so a */ /* minus sign is added to all currents */ /* and current partials to compensate for */ /* this fact.... JPM */ if ( !PORT_NULL(neg_pwr) ) { OUTPUT(neg_pwr) = -i_neg_pwr; PARTIAL(neg_pwr,in) = -pi_neg_pvin; PARTIAL(neg_pwr,out) = -pi_neg_pvout; if(!PORT_NULL(pos_pwr)){ PARTIAL(neg_pwr,pos_pwr) = -pi_neg_pvpos; } PARTIAL(neg_pwr,neg_pwr) = -pi_neg_pvneg; PARTIAL(out,neg_pwr) = -pi_out_pneg_pwr; } if ( !PORT_NULL(pos_pwr) ) { OUTPUT(pos_pwr) = -i_pos_pwr; PARTIAL(pos_pwr,in) = -pi_pos_pvin; PARTIAL(pos_pwr,out) = -pi_pos_pvout; PARTIAL(pos_pwr,pos_pwr) = -pi_pos_pvpos; if ( !PORT_NULL(neg_pwr) ) { PARTIAL(pos_pwr,neg_pwr) = -pi_pos_pvneg; } PARTIAL(out,pos_pwr) = -pi_out_ppos_pwr; } } else { /* AC Analysis */ ac_gain.real = -pi_out_pvin; ac_gain.imag= 0.0; AC_GAIN(out,in) = ac_gain; ac_gain.real = -pi_out_pvout; ac_gain.imag= 0.0; AC_GAIN(out,out) = ac_gain; if ( !PORT_NULL(neg_pwr) ) { ac_gain.real = -pi_neg_pvin; ac_gain.imag= 0.0; AC_GAIN(neg_pwr,in) = ac_gain; ac_gain.real = -pi_out_pneg_pwr; ac_gain.imag= 0.0; AC_GAIN(out,neg_pwr) = ac_gain; ac_gain.real = -pi_neg_pvout; ac_gain.imag= 0.0; AC_GAIN(neg_pwr,out) = ac_gain; ac_gain.real = -pi_neg_pvpos; ac_gain.imag= 0.0; AC_GAIN(neg_pwr,pos_pwr) = ac_gain; ac_gain.real = -pi_neg_pvneg; ac_gain.imag= 0.0; AC_GAIN(neg_pwr,neg_pwr) = ac_gain; } if ( !PORT_NULL(pos_pwr) ) { ac_gain.real = -pi_pos_pvin; ac_gain.imag= 0.0; AC_GAIN(pos_pwr,in) = ac_gain; ac_gain.real = -pi_out_ppos_pwr; ac_gain.imag= 0.0; AC_GAIN(out,pos_pwr) = ac_gain; ac_gain.real = -pi_pos_pvout; ac_gain.imag= 0.0; AC_GAIN(pos_pwr,out) = ac_gain; ac_gain.real = -pi_pos_pvpos; ac_gain.imag= 0.0; AC_GAIN(pos_pwr,pos_pwr) = ac_gain; ac_gain.real = -pi_pos_pvneg; ac_gain.imag= 0.0; AC_GAIN(pos_pwr,neg_pwr) = ac_gain; } } } tmpk8ny_4pz/src/xspice/icm/analog/limit/0000755000175000017500000000000013546075722020371 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/analog/limit/ifspec.ifs0000644000175000017500000000467613546075722022362 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the analog limit code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_limit Spice_Model_Name: limit Description: "limit block" PORT_TABLE: Port_Name: in out Description: "input" "output" Direction: in out Default_Type: v v Allowed_Types: [v,vd,i,id,vnam] [v,vd,i,id] Vector: no no Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: in_offset gain Description: "input offset" "gain" Data_Type: real real Default_Value: 0.0 1.0 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: out_lower_limit out_upper_limit Description: "output lower limit" "output upper limit" Data_Type: real real Default_Value: - - Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: limit_range fraction Description: "upper & lower sm. range" "smoothing percent/abs switch" Data_Type: real boolean Default_Value: 1.0e-6 FALSE Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes tmpk8ny_4pz/src/xspice/icm/analog/limit/cfunc.mod0000644000175000017500000001135213546075722022172 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE limit/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 6 Jun 1991 Jeffrey P. Murray MODIFICATIONS 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the model-specific routines used to functionally describe the limit code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_smooth_corner(); REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION void cm_limit() AUTHORS 2 Oct 1991 Jeffrey P. Murray MODIFICATIONS NONE SUMMARY This function implements the limit code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_smooth_corner(); RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_LIMIT ROUTINE ===*/ void cm_limit(ARGS) /* structure holding parms, inputs, outputs, etc. */ { double out_lower_limit; /* output lower limit */ double out_upper_limit; /* output upper limit */ double limit_range; /* upper and lower limit smoothing range */ double gain; /* gain */ double threshold_upper; /* value above which smoothing takes place */ double threshold_lower; /* value below which smoothing takes place */ double out; /* output */ double limited_out; /* limited output value */ double out_partial; /* partial of the output wrt input */ Mif_Complex_t ac_gain; /* Retrieve frequently used parameters... */ out_lower_limit = PARAM(out_lower_limit); out_upper_limit = PARAM(out_upper_limit); limit_range = PARAM(limit_range); gain = PARAM(gain); if (PARAM(fraction) == MIF_TRUE) /* Set range to absolute value */ limit_range = limit_range * (out_upper_limit - out_lower_limit); threshold_upper = out_upper_limit - /* Set Upper Threshold */ limit_range; threshold_lower = out_lower_limit + /* Set Lower Threshold */ limit_range; /* Compute Un-Limited Output */ out = gain * (PARAM(in_offset) + INPUT(in)); if (out < threshold_lower) { /* Limit Out @ Lower Bound */ if (out > (out_lower_limit - limit_range)) { /* Parabolic */ cm_smooth_corner(out,out_lower_limit,out_lower_limit, limit_range,0.0,1.0,&limited_out, &out_partial); out_partial = gain * out_partial; } else { /* Hard-Limited Region */ limited_out = out_lower_limit; out_partial = 0.0; } } else { if (out > threshold_upper) { /* Limit Out @ Upper Bound */ if (out < (out_upper_limit + limit_range)) { /* Parabolic */ cm_smooth_corner(out,out_upper_limit,out_upper_limit, limit_range,1.0,0.0,&limited_out, &out_partial); out_partial = gain * out_partial; } else { /* Hard-Limited Region */ limited_out = out_upper_limit; out_partial = 0.0; } } else { /* No Limiting Needed */ limited_out = out; out_partial = gain; } } if (ANALYSIS != MIF_AC) { /* DC & Transient Analyses */ OUTPUT(out) = limited_out; PARTIAL(out,in) = out_partial; } else { /* AC Analysis */ ac_gain.real = out_partial; ac_gain.imag= 0.0; AC_GAIN(out,in) = ac_gain; } } tmpk8ny_4pz/src/xspice/icm/analog/summer/0000755000175000017500000000000013546075722020563 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/analog/summer/ifspec.ifs0000644000175000017500000000352113546075722022540 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 9 Apr 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the analog summer code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_summer Spice_Model_Name: summer Description: "summer block" PORT_TABLE: Port_Name: in out Description: "input array" "output" Direction: in out Default_Type: v v Allowed_Types: [v,vd,i,id,vnam] [v,vd,i,id] Vector: yes no Vector_Bounds: [2 -] - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: in_offset in_gain Description: "input offset array" "input gain array" Data_Type: real real Default_Value: 0.0 1.0 Limits: - - Vector: yes yes Vector_Bounds: in in Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: out_gain out_offset Description: "output gain" "output offset" Data_Type: real real Default_Value: 1.0 0.0 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes tmpk8ny_4pz/src/xspice/icm/analog/summer/cfunc.mod0000644000175000017500000000625413546075722022371 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE summer/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 9 Apr 1991 Jeffrey P. Murray MODIFICATIONS 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the model-specific routines used to functionally describe the summer code model. INTERFACES FILE ROUTINE CALLED N/A N/A REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION void cm_summer() AUTHORS 9 Apr 1991 Jeffrey P. Murray MODIFICATIONS 2 Oct 1991 Jeffrey P. Murray SUMMARY This function implements the summer code model. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_SUMMER ROUTINE ===*/ void cm_summer(ARGS) { int i; /* generic loop counter index */ int size; /* number of inputs */ double accumulate; /* sum of all the (inputs times their respective gains plus their offset). */ double final_gain; /* output gain stage */ double in_gain_temp; /* temporary variable used to calculate accumulate */ Mif_Complex_t ac_gain; size = PORT_SIZE(in); /* Note that port size */ final_gain = PARAM(out_gain); /* and out_gain are read only */ /* once...saves access time. */ if(ANALYSIS != MIF_AC) { /* DC & Transient */ accumulate = 0.0; for (i=0; i /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================= FUNCTION cm_complex_div AUTHORS 27 Sept 1991 Jeffrey P. Murray MODIFICATIONS NONE SUMMARY Performs a complex division. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE A Mif_Complex_t value representing the result of the complex division. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ #include /*=== Static CM_COMPLEX_DIV ROUTINE ===*/ /**** Cm_complex_div Function - FAKE ***********/ /* */ /* Function will not be used in finished */ /* system...provides a stub for performing */ /* a simple complex division. */ /* 12/3/90 JPM */ /* */ /***********************************************/ static Mif_Complex_t cm_complex_div(Mif_Complex_t x, Mif_Complex_t y) { double mag_x, phase_x, mag_y, phase_y; Mif_Complex_t out; mag_x = hypot(x.real, x.imag); phase_x = atan2(x.imag, x.real); mag_y = hypot(y.real, y.imag); phase_y = atan2(y.imag, y.real); mag_x = mag_x/mag_y; phase_x = phase_x - phase_y; out.real = mag_x * cos(phase_x); out.imag = mag_x * sin(phase_x); return out; } /*============================================================================== FUNCTION cm_s_xfer() AUTHORS 17 Mar 1991 Jeffrey P. Murray MODIFICATIONS 18 Apr 1991 Harry Li 27 Sept 1991 Jeffrey P. Murray SUMMARY This function implements the s_xfer code model. INTERFACES FILE ROUTINE CALLED CMmacros.h cm_message_send(); CM.c void *cm_analog_alloc() void *cm_analog_get_ptr() int cm_analog_integrate() RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_S_XFER ROUTINE ===*/ /**************************************** * S-Domain Transfer Function - * * Code Body * * * * Last Modified - 9/27/91 JPM * ****************************************/ void cm_s_xfer(ARGS) /* structure holding parms, inputs, outputs, etc. */ { double *out; /* pointer to the output */ double *in; /* pointer to the input */ double in_offset; /* input offset */ double *gain; /* pointer to the gain */ double **den_coefficient; /* dynamic array that holds the denominator coefficients */ double **old_den_coefficient;/* dynamic array that holds the old denonminator coefficients */ double **num_coefficient; /* dynamic array that holds the numerator coefficients */ double **old_num_coefficient;/* dynamic array that holds the old numerator coefficients */ double factor; /* gain factor in case the highest denominator coefficient is not 1 */ double **integrator; /* outputs of the integrators */ double **old_integrator; /* previous integrator outputs */ double null; /* dummy pointer for use with the integrate function */ double pout_pin; /* partial out wrt in */ /*double total_gain;*/ /* not used, currently-used with ITP stuff */ double temp; /* temporary variable used with the correct type of AC value */ double frac; /* holds fractional part of a divide */ double divide_integer; /* integer part of a modf used in AC */ double denormalized_freq; /* denormalization constant...the nominal corner or center frequencies specified by the model coefficients will be denormalized by this amount. Thus, if coefficients were obtained which specified a 1 rad/sec cornere frequency, specifying a value of 1000.0 for denormalized_freq will cause the model to shift the corner freq. to 2.0 * pi * 1000.0 */ double *old_gain; /* pointer to the gain if the highest order denominator coefficient is not factored out */ Mif_Complex_t ac_gain, acc_num, acc_den; int i; /* generic loop counter index */ int den_size; /* size of the denominator coefficient array */ int num_size; /* size of the numerator coefficient array */ char *num_size_error="\n***ERROR***\nS_XFER: Numerator coefficient array size greater than\ndenominator coefficiant array size.\n"; /** Retrieve frequently used parameters (used by all analyses)... **/ in_offset = PARAM(in_offset); num_size = PARAM_SIZE(num_coeff); den_size = PARAM_SIZE(den_coeff); if ( PARAM_NULL(denormalized_freq) ) { denormalized_freq = 1.0; } else { denormalized_freq = PARAM(denormalized_freq); } if ( num_size > den_size ) { cm_message_send(num_size_error); return; } /** Test for INIT; if so, allocate storage, otherwise, retrieve previous **/ /** timepoint input values as necessary in subsequent analysis sections... **/ if (INIT==1) { /* First pass...allocate storage for previous values... */ /* Allocate rotational storage for integrator outputs, in & out */ /***** The following two lines may be unnecessary in the final version *****/ /* We have to allocate memory and use cm_analog_alloc, because the ITP variables are not functional */ integrator = (double **) calloc((size_t) den_size, sizeof(double *)); old_integrator = (double **) calloc((size_t) den_size, sizeof(double *)); /* Allocate storage for coefficient values */ den_coefficient = (double **) calloc((size_t) den_size, sizeof(double *)); old_den_coefficient = (double **) calloc((size_t) den_size, sizeof(double *)); num_coefficient = (double **) calloc((size_t) num_size, sizeof(double *)); old_num_coefficient = (double **) calloc((size_t) num_size, sizeof(double *)); for (i=0; i < (2*den_size + num_size + 3); i++) cm_analog_alloc(i,sizeof(double)); /* ITP_VAR_SIZE(den) = den_size; */ /* gain = (double *) calloc(1,sizeof(double)); ITP_VAR(total_gain) = gain; ITP_VAR_SIZE(total_gain) = 1.0; */ // Retrieve pointers for (i=0; i0; i--) { cm_analog_integrate(*(integrator[i]),(integrator[i-1]),&null); } /* Calculate the output based on the new integrator values... */ *out = 0.0; for (i=0; i 0.0 ) { /* Negative coefficient */ /* values for this iteration. */ if (frac > 0.0 ) { /** Odd Powers of "s" **/ acc_num.imag = acc_num.imag - *(num_coefficient[i]) * pow(RAD_FREQ,i) * (*gain); } else { /** Even Powers of "s" **/ acc_num.real = acc_num.real - *(num_coefficient[i]) * pow(RAD_FREQ,i) * (*gain); } } else { /* Positive coefficient values for this iteration */ if (frac> 0.0 ) { /** Odd Powers of "s" **/ acc_num.imag = acc_num.imag + *(num_coefficient[i]) * pow(RAD_FREQ,i) * (*gain); } else { /** Even Powers of "s" **/ acc_num.real = acc_num.real + *(num_coefficient[i]) * pow(RAD_FREQ,i) * (*gain); } } } /*** Calculate Denominator Real & Imaginary Components... ***/ acc_den.real = 0.0; acc_den.imag = 0.0; for (i=0; i 0.0 ) { /* Negative coefficient */ /* values for this iteration. */ if (frac > 0.0 ) { /** Odd Powers of "s" **/ acc_den.imag = acc_den.imag - *(den_coefficient[i]) * pow(RAD_FREQ,i); } else { /** Even Powers of "s" **/ acc_den.real = acc_den.real - *(den_coefficient[i]) * pow(RAD_FREQ,i); } } else { /* Positive coefficient values for this iteration */ if (frac > 0.0 ) { /** Odd Powers of "s" **/ acc_den.imag = acc_den.imag + *(den_coefficient[i]) * pow(RAD_FREQ,i); } else { /** Even Powers of "s" **/ acc_den.real = acc_den.real + *(den_coefficient[i]) * pow(RAD_FREQ,i); } } } /* divide numerator values by denominator values */ ac_gain = cm_complex_div(acc_num, acc_den); AC_GAIN(out,in) = ac_gain; } /* free all allocated memory */ if(integrator) free(integrator); if(old_integrator) free(old_integrator); if(den_coefficient) free(den_coefficient); if(old_den_coefficient) free(old_den_coefficient); if(num_coefficient) free(num_coefficient); if(old_num_coefficient) free(old_num_coefficient); } tmpk8ny_4pz/src/xspice/icm/analog/climit/0000755000175000017500000000000013546075722020534 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/analog/climit/ifspec.ifs0000644000175000017500000000502213546075722022507 0ustar carstencarsten /* INTERFACE TABLE FOR CODE MODEL CLIMIT */ NAME_TABLE: C_Function_Name: cm_climit Spice_Model_Name: climit Description: "controlled limiter block" PORT_TABLE: Port_Name: in cntl_upper Description: "input" "upper lim. control input" Direction: in in Default_Type: v v Allowed_Types: [v,vd,i,id,vnam] [v,vd,i,id,vnam] Vector: no no Vector_Bounds: - - Null_Allowed: no no PORT_TABLE: Port_Name: cntl_lower out Description: "lower limit control input" "output" Direction: in out Default_Type: v v Allowed_Types: [v,vd,i,id,vnam] [v,vd,i,id] Vector: no no Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: in_offset gain Description: "input offset" "gain" Data_Type: real real Default_Value: 0.0 1.0 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: upper_delta lower_delta Description: "output upper delta" "output lower delta" Data_Type: real real Default_Value: 0.0 0.0 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: limit_range fraction Description: "upper & lower sm. range" "smoothing %/abs switch" Data_Type: real boolean Default_Value: 1.0e-6 FALSE Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes tmpk8ny_4pz/src/xspice/icm/analog/climit/cfunc.mod0000644000175000017500000001673113546075722022343 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE climit/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 6 June 1991 Jeffrey P. Murray MODIFICATIONS 26 Sept 1991 Jeffrey P. Murray SUMMARY This file contains the functional description of the adc_bridge code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_smooth_corner(); void cm_smooth_discontinuity(); CMmacros.h cm_message_send(); REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION cm_climit() AUTHORS 6 June 1991 Jeffrey P. Murray MODIFICATIONS 26 Sept 1991 Jeffrey P. Murray SUMMARY This function implements the climit code model. INTERFACES FILE ROUTINE CALLED CMutil.c void cm_smooth_corner(); void cm_smooth_discontinuity(); CMmacros.h cm_message_send(); RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_CLIMIT ROUTINE ===*/ void cm_climit(ARGS) /* structure holding parms, inputs, outputs, etc. */ { /* Define error message string constants */ char *climit_range_error = "\n**** ERROR ****\n* CLIMIT function linear range less than zero. *\n"; double lower_delta, /* lower delta value parameter */ upper_delta, /* upper delta value parameter */ limit_range, /* range of output below (out_upper_limit - upper_delta) or above (out_lower_limit + lower_delta) within which smoothing will be applied */ gain, /* gain parameter */ threshold_upper, /* = out_upper_limit - upper_delta */ threshold_lower, /* = out_lower_limit + lower_delta */ linear_range, /* = threshold_upper - threshold_lower */ out_lower_limit, /* output lower limit parameter */ out_upper_limit, /* output upper limit parameter */ out, /* originally-calculated output value */ limited_out, /* output value after limiting */ pout_pin, /* partial derivative of output w.r.t.input */ pout_pcntl_upper, /* partial derivative of output w.r.t. cntl_upper input */ pout_pcntl_lower, /* partial derivative of output w.r.t. cntl_lower input */ junk; /* dummy variable */ Mif_Complex_t ac_gain; /* AC gain */ /* Retrieve frequently used parameters... */ lower_delta = PARAM(lower_delta); upper_delta = PARAM(upper_delta); limit_range = PARAM(limit_range); gain = PARAM(gain); /* Find Upper & Lower Limits */ out_lower_limit = INPUT(cntl_lower) + lower_delta; out_upper_limit = INPUT(cntl_upper) - upper_delta; if (PARAM(fraction) == MIF_TRUE) /* Set range to absolute value */ limit_range = limit_range * (out_upper_limit - out_lower_limit); threshold_upper = out_upper_limit - /* Set Upper Threshold */ limit_range; threshold_lower = out_lower_limit + /* Set Lower Threshold */ limit_range; linear_range = threshold_upper - threshold_lower; /* Test the linear region & make sure there IS one... */ if (linear_range < 0.0) { /* This INIT test keeps the models from outputting an error message the first time through when all the inputs are initialized to zero */ if( (INIT != 1) && (0.0 != TIME) ){ cm_message_send(climit_range_error); } limited_out = 0.0; pout_pin = 0.0; pout_pcntl_lower = 0.0; pout_pcntl_upper = 0.0; return; } /* Compute Un-Limited Output */ out = gain * (PARAM(in_offset) + INPUT(in)); if (out < threshold_lower) { /* Limit Out @ Lower Bound */ pout_pcntl_upper= 0.0; if (out > (out_lower_limit - limit_range)) { /* Parabolic */ cm_smooth_corner(out,out_lower_limit,out_lower_limit, limit_range,0.0,1.0,&limited_out, &pout_pin); pout_pin = gain * pout_pin; cm_smooth_discontinuity(out,out_lower_limit,1.0,threshold_lower, 0.0,&pout_pcntl_lower,&junk); } else { /* Hard-Limited Region */ limited_out = out_lower_limit; pout_pin = 0.0; pout_pcntl_lower = 1.0; } } else { if (out > threshold_upper) { /* Limit Out @ Upper Bound */ pout_pcntl_lower= 0.0; if (out < (out_upper_limit+limit_range)) { /* Parabolic */ cm_smooth_corner(out,out_upper_limit,out_upper_limit, limit_range,1.0,0.0,&limited_out, &pout_pin); pout_pin = gain * pout_pin; cm_smooth_discontinuity(out,threshold_upper,0.0,out_upper_limit, 1.0,&pout_pcntl_upper,&junk); } else { /* Hard-Limited Region */ limited_out = out_upper_limit; pout_pin = 0.0; pout_pcntl_upper = 1.0; } } else { /* No Limiting Needed */ limited_out = out; pout_pin = gain; pout_pcntl_lower = 0.0; pout_pcntl_upper = 0.0; } } if (ANALYSIS != MIF_AC) { /* DC & Transient Analyses */ OUTPUT(out) = limited_out; PARTIAL(out,in) = pout_pin; PARTIAL(out,cntl_lower) = pout_pcntl_lower; PARTIAL(out,cntl_upper) = pout_pcntl_upper; } else { /* AC Analysis */ ac_gain.real = pout_pin; ac_gain.imag= 0.0; AC_GAIN(out,in) = ac_gain; ac_gain.real = pout_pcntl_lower; ac_gain.imag= 0.0; AC_GAIN(out,cntl_lower) = ac_gain; ac_gain.real = pout_pcntl_upper; ac_gain.imag= 0.0; AC_GAIN(out,cntl_upper) = ac_gain; } } tmpk8ny_4pz/src/xspice/icm/analog/mult/0000755000175000017500000000000013546075722020234 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/analog/mult/ifspec.ifs0000644000175000017500000000352513546075722022215 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the analog mult code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_mult Spice_Model_Name: mult Description: "multiplier block" PORT_TABLE: Port_Name: in out Description: "input array" "output" Direction: in out Default_Type: v v Allowed_Types: [v,vd,i,id,vnam] [v,vd,i,id] Vector: yes no Vector_Bounds: [2 -] - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: in_offset in_gain Description: "input offset array" "input gain array" Data_Type: real real Default_Value: 0.0 1.0 Limits: - - Vector: yes yes Vector_Bounds: in in Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: out_gain out_offset Description: "output gain" "output offset" Data_Type: real real Default_Value: 1.0 0.0 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes tmpk8ny_4pz/src/xspice/icm/analog/mult/cfunc.mod0000644000175000017500000001042713546075722022037 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE mult/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 20 Mar 1991 Jeffrey P. Murray MODIFICATIONS 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the model-specific routines used to functionally describe the mult code model. INTERFACES FILE ROUTINE CALLED N/A N/A REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION void cm_mult() AUTHORS 20 Mar 1991 Jeffrey P. Murray MODIFICATIONS 2 Oct 1991 Jeffrey P. Murray SUMMARY This function implements the mult code model. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_MULT ROUTINE ===*/ void cm_mult(ARGS) { int i; /* generic loop counter index */ int size; /* number of input ports */ double accumulate_gain; /* product of all the gains */ double accumulate_in; /* product of all (inputs + offsets) */ double final_gain; /* output gain */ Mif_Complex_t ac_gain; size = PORT_SIZE(in); /* Note that port size */ final_gain = PARAM(out_gain); /* and out_gain are read only */ /* once...saves access time. */ /* Calculate multiplication of inputs and gains for */ /* all types of analyes.... */ accumulate_gain = 1.0; accumulate_in = 1.0; for (i=0; i (out_upper_limit + limit_range)) { /* At upper limit */ *out = out_upper_limit; pout_pin = 0.0; } else { if (*out > (out_upper_limit - limit_range)) { /* Upper smoothing region */ cm_smooth_corner(*out,out_upper_limit,out_upper_limit,limit_range, 1.0,0.0,out,&pout_gain); pout_pin = pout_pin * pout_gain; } } } } /** Output values for DC & Transient **/ OUTPUT(out) = *out; PARTIAL(out,in) = pout_pin; } else { /**** AC Analysis...output (0.0,gain/s) ****/ ac_gain.real = 0.0; ac_gain.imag = -gain / RAD_FREQ; AC_GAIN(out,in) = ac_gain; } } tmpk8ny_4pz/src/xspice/icm/analog/modpath.lst0000644000175000017500000000020313546075722021426 0ustar carstencarstenclimit divide d_dt gain hyst ilimit int limit mult multi_input_pwl oneshot pwl sine slew square summer s_xfer triangle file_source tmpk8ny_4pz/src/xspice/icm/analog/gain/0000755000175000017500000000000013546075722020171 5ustar carstencarstentmpk8ny_4pz/src/xspice/icm/analog/gain/ifspec.ifs0000644000175000017500000000274513546075722022155 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved AUTHORS 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the interface specification file for the analog gain code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_gain Spice_Model_Name: gain Description: "A simple gain block" PORT_TABLE: Port_Name: in out Description: "input" "output" Direction: in out Default_Type: v v Allowed_Types: [v,vd,i,id,vnam] [v,vd,i,id] Vector: no no Vector_Bounds: - - Null_Allowed: no no PARAMETER_TABLE: Parameter_Name: in_offset gain out_offset Description: "input offset" "gain" "output offset" Data_Type: real real real Default_Value: 0.0 1.0 0.0 Limits: - - - Vector: no no no Vector_Bounds: - - - Null_Allowed: yes yes yes tmpk8ny_4pz/src/xspice/icm/analog/gain/cfunc.mod0000644000175000017500000000442213546075722021772 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE gain/cfunc.mod Copyright 1991 Georgia Tech Research Corporation, Atlanta, Ga. 30332 All Rights Reserved PROJECT A-8503-405 AUTHORS 6 Jun 1991 Jeffrey P. Murray MODIFICATIONS 2 Oct 1991 Jeffrey P. Murray SUMMARY This file contains the model-specific routines used to functionally describe the gain code model. INTERFACES FILE ROUTINE CALLED N/A N/A REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*============================================================================== FUNCTION void cm_gain() AUTHORS 2 Oct 1991 Jeffrey P. Murray MODIFICATIONS NONE SUMMARY This function implements the gain code model. INTERFACES FILE ROUTINE CALLED N/A N/A RETURNED VALUE Returns inputs and outputs via ARGS structure. GLOBAL VARIABLES NONE NON-STANDARD FEATURES NONE ==============================================================================*/ /*=== CM_GAIN ROUTINE ===*/ void cm_gain(ARGS) /* structure holding parms, inputs, outputs, etc. */ { Mif_Complex_t ac_gain; if(ANALYSIS != MIF_AC) { OUTPUT(out) = PARAM(out_offset) + PARAM(gain) * ( INPUT(in) + PARAM(in_offset)); PARTIAL(out,in) = PARAM(gain); } else { ac_gain.real = PARAM(gain); ac_gain.imag= 0.0; AC_GAIN(out,in) = ac_gain; } } tmpk8ny_4pz/src/xspice/.gitignore0000644000175000017500000000010213546075722017223 0ustar carstencarsten/cmpp/cmpp /icm/GNUmakefile /icm/makedefs !/examples/*/Makefile tmpk8ny_4pz/src/xspice/cm/0000755000175000017500000000000013546075722015641 5ustar carstencarstentmpk8ny_4pz/src/xspice/cm/Makefile.am0000644000175000017500000000061613546075722017700 0ustar carstencarsten## Process this file with automake to produce Makefile.in # # JW 3/9/01 - had a go and makeing an autoconf script. noinst_LTLIBRARIES = libcmxsp.la libcmxsp_la_SOURCES = \ cm.c \ cmevt.c \ cmmeters.c \ cmutil.c \ cmexport.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include -I$(top_srcdir)/src/spicelib/devices AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/xspice/cm/cmutil.c0000644000175000017500000004717513546075722017320 0ustar carstencarsten/* =========================================================================== FILE CMutil.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Jeff Murray MODIFICATIONS SUMMARY This file contains functions callable from user code models. These functions were written to support code models in the XSPICE library, but may be useful in general. INTERFACES cm_smooth_corner() cm_smooth_discontinuity() cm_smooth_pwl() cm_climit_fcn() cm_complex_set() cm_complex_add() cm_complex_subtract() cm_complex_multiply() cm_complex_divide() REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ #include "ngspice/ngspice.h" /* for NaN */ #include #include #include "ngspice/cm.h" /* Corner Smoothing Function ************************************ * * * The following function smooths the transition between two * * slopes into a quadratic (parabolic) curve. The calling * * function passes an x,y coordinate representing the * * "breakpoint", a smoothing domain value (d), and the slopes at * * both endpoints, and the x value itself. The situation is * * shown below: B C * * A |<-d->| ^ y * * ---------*-----* | | * * lower_slope-^ |<-d->|\ | | * * \ | | * * \ | *------>x * * At Ax * *****************************************************************/ void cm_smooth_discontinuity( double x_input, /* The x value at which to compute y */ double x_lower, /* The x value of the lower corner */ double y_lower, /* The y value of the lower corner */ double x_upper, /* The x value of the upper corner */ double y_upper, /* The y value of the upper corner */ double *y_output, /* The computed smoothed y value */ double *dy_dx) /* The partial of y wrt x */ { double x_center,y_center,a,b,c,center_slope; /* Derive x_center, y_center & center_slope values */ x_center = (x_upper + x_lower) / 2.0; y_center = (y_upper + y_lower) / 2.0; center_slope = 2.0 * (y_upper - y_lower) / (x_upper - x_lower); if (x_input < x_lower) { /* x_input @ lower level */ *y_output = y_lower; *dy_dx = 0.0; } else { if (x_input < x_center) { /* x_input in lower transition */ a = center_slope / (x_upper - x_lower); b = center_slope - 2.0 * a * x_center; c = y_center - a * x_center * x_center - b * x_center; *y_output = a * x_input * x_input + b * x_input + c; *dy_dx = 2.0 * a * x_input + b; } else { /* x_input in upper transition */ if (x_input < x_upper) { a = -center_slope / (x_upper - x_lower); b = -2.0 * a * x_upper; c = y_upper - a * x_upper * x_upper - b * x_upper; *y_output = a * x_input * x_input + b * x_input + c; *dy_dx = 2.0 * a * x_input + b; } else { /* x_input @ upper level */ *y_output = y_upper; *dy_dx = 0.0; } } } } /* Controlled Limiter Function (modified CLIMIT) */ /* This is a special function created for use with the CLIMIT controlled limiter model. */ void cm_climit_fcn( double in, /* The input value */ double in_offset, /* The input offset */ double cntl_upper, /* The upper control input value */ double cntl_lower, /* The lower control input value */ double lower_delta, /* The delta from control to limit value */ double upper_delta, /* The delta from control to limit value */ double limit_range, /* The limiting range */ double gain, /* The gain from input to output */ int percent, /* The fraction vs. absolute range flag */ double *out_final, /* The output value */ double *pout_pin_final, /* The partial of output wrt input */ double *pout_pcntl_lower_final, /* The partial of output wrt lower control input */ double *pout_pcntl_upper_final) /* The partial of output wrt upper control input */ { /* Define error message string constants */ char *climit_range_error = "\n**** ERROR ****\n* CLIMIT function linear range less than zero. *\n"; double threshold_upper,threshold_lower,linear_range, out_lower_limit,out_upper_limit,limited_out, out,pout_pin,pout_pcntl_lower,pout_pcntl_upper,junk; /* Find Upper & Lower Limits */ out_lower_limit = cntl_lower + lower_delta; out_upper_limit = cntl_upper - upper_delta; if (percent == TRUE) /* Set range to absolute value */ limit_range = limit_range * (out_upper_limit - out_lower_limit); threshold_upper = out_upper_limit - /* Set Upper Threshold */ limit_range; threshold_lower = out_lower_limit + /* Set Lower Threshold */ limit_range; linear_range = threshold_upper - threshold_lower; /* Test the linear region & make sure there IS one... */ if (linear_range < 0.0) { printf("%s\n",climit_range_error); /* limited_out = 0.0; pout_pin = 0.0; pout_pcntl_lower = 0.0; pout_pcntl_upper = 0.0; return; */ } /* Compute Un-Limited Output */ out = gain * (in_offset + in); if (out < threshold_lower) { /* Limit Out @ Lower Bound */ pout_pcntl_upper= 0.0; if (out > (out_lower_limit - limit_range)) { /* Parabolic */ cm_smooth_corner(out,out_lower_limit,out_lower_limit, limit_range,0.0,1.0,&limited_out, &pout_pin); pout_pin = gain * pout_pin; cm_smooth_discontinuity(out,out_lower_limit,1.0,threshold_lower, 0.0,&pout_pcntl_lower,&junk); } else { /* Hard-Limited Region */ limited_out = out_lower_limit; pout_pin = 0.0; pout_pcntl_lower = 1.0; } } else { if (out > threshold_upper) { /* Limit Out @ Upper Bound */ pout_pcntl_lower= 0.0; if (out < (out_upper_limit+limit_range)) { /* Parabolic */ cm_smooth_corner(out,out_upper_limit,out_upper_limit, limit_range,1.0,0.0,&limited_out, &pout_pin); pout_pin = gain * pout_pin; cm_smooth_discontinuity(out,threshold_upper,0.0,out_upper_limit, 1.0,&pout_pcntl_upper,&junk); } else { /* Hard-Limited Region */ limited_out = out_upper_limit; pout_pin = 0.0; pout_pcntl_upper = 1.0; } } else { /* No Limiting Needed */ limited_out = out; pout_pin = gain; pout_pcntl_lower = 0.0; pout_pcntl_upper = 0.0; } } *out_final = limited_out; *pout_pin_final = pout_pin; *pout_pcntl_lower_final = pout_pcntl_lower; *pout_pcntl_upper_final = pout_pcntl_upper; } /**** End Controlled Limiter Function ****/ /*=============================================================================*/ /* Piecewise Linear Smoothing Function ********************* * The following is a transfer curve function which * * accepts as input an "x" value, and returns a "y" * * value. The transfer characteristic is a smoothed * * piece-wise linear curve described by *x and *y array * * coordinate pairs. * * * * Created 8/14/91 * * Last Modified 8/14/91 J.P.Murray * ***********************************************************/ /*********************************************************** * * * ^ x[4] * * x[1] | * * * | midpoint /|\ * * | | / \ * * | V | / | \ * * *----*----* \ * * midpoint /| | | \ * * | / || * <- midpoint * * V/ | |x[3] \ * * <-----------*------------O------------\-------------> * * | / | \ | | * * / | \ * * |/ | \| | * * * | *-----*---> * * /| | x[5] x[6] * * / | * * / x[0] | * * / | * * / | * * / | * * V * * * ***********************************************************/ /*********************************************************** * * * Note that for the cm_smooth_pwl function, the arguments * * are as listed below: * * * * * * double x_input; input * * * double *x; pointer to the x-coordinate * * array * * * double *y; pointer to the y-coordinate * * array * * * int size; size of the arrays * * * * double input_domain; smoothing range * * * double dout_din; partial derivative of the * * output w.r.t. the input * * * * ***********************************************************/ double cm_smooth_pwl(double x_input, double *x, double *y, int size, double input_domain, double *dout_din) { int i; /* generic loop counter index */ double lower_seg; /* x segment below which input resides */ double upper_seg; /* x segment above which the input resides */ double lower_slope; /* slope of the lower segment */ double upper_slope; /* slope of the upper segment */ double out; /* output */ double threshold_lower; /* value below which the output begins smoothing */ double threshold_upper; /* value above which the output begins smoothing */ /* char *limit_error="\n***ERROR***\nViolation of 50% rule in breakpoints!\n";*/ /* Determine segment boundaries within which x_input resides */ if (x_input <= (x[1] + x[0])/2.0) {/*** x_input below lowest midpoint ***/ *dout_din = (y[1] - y[0])/(x[1] - x[0]); out = *y + (x_input - *x) * *dout_din; return out; } else { if (x_input >= (x[size-2] + x[size-1])/2.0) { /*** x_input above highest midpoint ***/ *dout_din = (y[size-1] - y[size-2]) / (x[size-1] - x[size-2]); out = y[size-1] + (x_input - x[size-1]) * *dout_din; return out; } else { /*** x_input within bounds of end midpoints... ***/ /*** must determine position progressively & then ***/ /*** calculate required output. ***/ for (i=1; i SUMMARY This file contains functions callable from code models. These functions are primarily designed for use by the "cmeter" and "lmeter" models provided in the XSPICE code model library. INTERFACES cm_netlist_get_c() cm_netlist_get_l() REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ #include "ngspice/ngspice.h" #include "ngspice/cm.h" #include "ngspice/mif.h" #include "ngspice/cktdefs.h" #include "ngspice/mifdefs.h" #include "cap/capdefs.h" #include "ind/inddefs.h" #include "vsrc/vsrcdefs.h" #include "ngspice/inpdefs.h" /* cm_netlist_get_c() This is a special function designed for use with the c_meter model. It returns the parallel combination of the capacitance connected to the first port on the instance. */ double cm_netlist_get_c(void) { CKTcircuit *ckt; MIFinstance *cmeter_inst; CAPinstance *cap_inst; VSRCinstance *vsrc_inst; CAPmodel *cap_head; CAPmodel *cap_model; VSRCmodel *vsrc_head; VSRCmodel *vsrc_model; int cap_type; int vsrc_type; int cmeter_node; int vsrc_node; double c; /* Get the circuit data structure and current instance */ ckt = g_mif_info.ckt; cmeter_inst = g_mif_info.instance; /* Get internal node number for positive node of cmeter input */ cmeter_node = cmeter_inst->conn[0]->port[0]->smp_data.pos_node; /* Initialize total capacitance value to zero */ c = 0.0; /* ****************************************************** */ /* Look for capacitors connected directly to cmeter input */ /* ****************************************************** */ /* Get the head of the list of capacitor models in the circuit */ cap_type = INPtypelook("Capacitor"); if(cap_type < 0) { printf("\nERROR - Capacitor type not supported in this binary\n"); return(0); } cap_head = (CAPmodel *) ckt->CKThead[cap_type]; /* Scan through all capacitor instances and add in values */ /* of any capacitors connected to cmeter input */ for(cap_model = cap_head; cap_model; cap_model = CAPnextModel(cap_model)) { for(cap_inst = CAPinstances(cap_model); cap_inst; cap_inst = CAPnextInstance(cap_inst)) { if((cmeter_node == cap_inst->CAPposNode) || (cmeter_node == cap_inst->CAPnegNode)) { c += cap_inst->CAPcapac; } } } /* ***************************************************************** */ /* Look for capacitors connected through zero-valued voltage sources */ /* ***************************************************************** */ /* Get the head of the list of voltage source models in the circuit */ vsrc_type = INPtypelook("Vsource"); if(vsrc_type < 0) { printf("\nERROR - Vsource type not supported in this binary\n"); return(0); } vsrc_head = (VSRCmodel *) ckt->CKThead[vsrc_type]; /* Scan through all voltage source instances and add in values */ /* of any capacitors connected to cmeter input through voltage source */ for(vsrc_model = vsrc_head; vsrc_model; vsrc_model = VSRCnextModel(vsrc_model)) { for(vsrc_inst = VSRCinstances(vsrc_model); vsrc_inst; vsrc_inst = VSRCnextInstance(vsrc_inst)) { /* Skip to next if not DC source with value = 0.0 */ if((vsrc_inst->VSRCfunctionType != 0) || (vsrc_inst->VSRCdcValue != 0.0)) continue; /* See if voltage source is connected to cmeter input */ /* If so, get other node voltage source is connected to */ /* If not, skip to next source */ if(cmeter_node == vsrc_inst->VSRCposNode) vsrc_node = vsrc_inst->VSRCnegNode; else if(cmeter_node == vsrc_inst->VSRCnegNode) vsrc_node = vsrc_inst->VSRCposNode; else continue; /* Scan through all capacitor instances and add in values */ /* of any capacitors connected to the voltage source node */ for(cap_model = cap_head; cap_model; cap_model = CAPnextModel(cap_model)) { for(cap_inst = CAPinstances(cap_model); cap_inst; cap_inst = CAPnextInstance(cap_inst)) { if((vsrc_node == cap_inst->CAPposNode) || (vsrc_node == cap_inst->CAPnegNode)) { c += cap_inst->CAPcapac; } } } } /* end for all vsrc instances */ } /* end for all vsrc models */ /* Return the total capacitance value */ return(c); } /* cm_netlist_get_l() This is a special function designed for use with the l_meter model. It returns the equivalent value of inductance connected to the first port on the instance. */ double cm_netlist_get_l(void) { CKTcircuit *ckt; MIFinstance *lmeter_inst; INDinstance *ind_inst; VSRCinstance *vsrc_inst; INDmodel *ind_head; INDmodel *ind_model; VSRCmodel *vsrc_head; VSRCmodel *vsrc_model; int ind_type; int vsrc_type; int lmeter_node; int vsrc_node; double l; /* Get the circuit data structure and current instance */ ckt = g_mif_info.ckt; lmeter_inst = g_mif_info.instance; /* Get internal node number for positive node of lmeter input */ lmeter_node = lmeter_inst->conn[0]->port[0]->smp_data.pos_node; /* Initialize total inductance to infinity */ l = 1.0e12; /* ****************************************************** */ /* Look for inductors connected directly to lmeter input */ /* ****************************************************** */ /* Get the head of the list of inductor models in the circuit */ ind_type = INPtypelook("Inductor"); if(ind_type < 0) { printf("\nERROR - Inductor type not supported in this binary\n"); return(0); } ind_head = (INDmodel *) ckt->CKThead[ind_type]; /* Scan through all inductor instances and add in values */ /* of any inductors connected to lmeter input */ for(ind_model = ind_head; ind_model; ind_model = INDnextModel(ind_model)) { for(ind_inst = INDinstances(ind_model); ind_inst; ind_inst = INDnextInstance(ind_inst)) { if((lmeter_node == ind_inst->INDposNode) || (lmeter_node == ind_inst->INDnegNode)) { l = 1.0 / ( (1.0 / l) + (1.0 / ind_inst->INDinduct) ); } } } /* ***************************************************************** */ /* Look for inductors connected through zero-valued voltage sources */ /* ***************************************************************** */ /* Get the head of the list of voltage source models in the circuit */ vsrc_type = INPtypelook("Vsource"); if(vsrc_type < 0) { printf("\nERROR - Vsource type not supported in this binary\n"); return(0); } vsrc_head = (VSRCmodel *) ckt->CKThead[vsrc_type]; /* Scan through all voltage source instances and add in values */ /* of any inductors connected to lmeter input through voltage source */ for(vsrc_model = vsrc_head; vsrc_model; vsrc_model = VSRCnextModel(vsrc_model)) { for(vsrc_inst = VSRCinstances(vsrc_model); vsrc_inst; vsrc_inst = VSRCnextInstance(vsrc_inst)) { /* Skip to next if not DC source with value = 0.0 */ if((vsrc_inst->VSRCfunctionType != 0) || (vsrc_inst->VSRCdcValue != 0.0)) continue; /* See if voltage source is connected to lmeter input */ /* If so, get other node voltage source is connected to */ /* If not, skip to next source */ if(lmeter_node == vsrc_inst->VSRCposNode) vsrc_node = vsrc_inst->VSRCnegNode; else if(lmeter_node == vsrc_inst->VSRCnegNode) vsrc_node = vsrc_inst->VSRCposNode; else continue; /* Scan through all inductor instances and add in values */ /* of any inductors connected to the voltage source node */ for(ind_model = ind_head; ind_model; ind_model = INDnextModel(ind_model)) { for(ind_inst = INDinstances(ind_model); ind_inst; ind_inst = INDnextInstance(ind_inst)) { if((vsrc_node == ind_inst->INDposNode) || (vsrc_node == ind_inst->INDnegNode)) { l = 1.0 / ( (1.0 / l) + (1.0 / ind_inst->INDinduct) ); } } } } /* end for all vsrc instances */ } /* end for all vsrc models */ /* Return the total capacitance value */ return(l); } tmpk8ny_4pz/src/xspice/cm/cm.c0000644000175000017500000004712713546075722016417 0ustar carstencarsten/* =========================================================================== FILE CM.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains functions callable from user code models. INTERFACES cm_analog_alloc() cm_analog_get_ptr() cm_analog_integrate() cm_analog_converge() cm_analog_set_temp_bkpt() cm_analog_set_perm_bkpt() cm_analog_ramp_factor() cm_analog_not_converged() cm_analog_auto_partial() cm_message_get_errmsg() cm_message_send() cm_get_path() cm_get_circuit() REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ #include "ngspice/ngspice.h" #include "ngspice/cm.h" #include "ngspice/enh.h" #include "ngspice/mif.h" #include "ngspice/cktdefs.h" //#include "util.h" static void cm_static_integrate(int byte_index, double integrand, double *integral, double *partial); /* cm_analog_alloc() This function is called from code model C functions to allocate state storage for a particular instance. It computes the number of doubles that need to be allocated in SPICE's state storage vectors from the number of bytes specified in it's argument and then allocates space for the states. An index into the SPICE state-vectors is stored in the instance's data structure along with a ``tag'' variable supplied by the caller so that the location of the state storage area can be found by cm_analog_get_ptr(). */ void cm_analog_alloc( int tag, /* The user-specified tag for this block of memory */ int bytes) /* The number of bytes to allocate */ { MIFinstance *here; CKTcircuit *ckt; Mif_State_t *state; int doubles_needed; int i; /* Get the address of the ckt and instance structs from g_mif_info */ here = g_mif_info.instance; ckt = g_mif_info.ckt; /* Scan states in instance struct and see if tag has already been used */ for(i = 0; i < here->num_state; i++) { if(tag == here->state[i].tag) { g_mif_info.errmsg = "ERROR - cm_analog_alloc() - Tag already used in previous call\n"; return; } } /* Compute number of doubles needed and allocate space in ckt->CKTstates[i] */ doubles_needed = bytes / (int) sizeof(double) + 1; /* Allocate space in instance struct for this state descriptor */ if(here->num_state == 0) { here->num_state = 1; here->state = TMALLOC(Mif_State_t, 1); } else { here->num_state++; here->state = TREALLOC(Mif_State_t, here->state, here->num_state); } /* Fill in the members of the state descriptor struct */ state = &(here->state[here->num_state - 1]); state->tag = tag; state->index = ckt->CKTnumStates; state->doubles = doubles_needed; state->bytes = bytes; /* Add the states to the ckt->CKTstates vectors */ ckt->CKTnumStates += doubles_needed; for(i=0;i<=ckt->CKTmaxOrder+1;i++) { if(ckt->CKTnumStates == doubles_needed) ckt->CKTstates[i] = TMALLOC(double, ckt->CKTnumStates); else ckt->CKTstates[i] = TREALLOC(double, ckt->CKTstates[i], ckt->CKTnumStates); } } /* cm_analog_get_ptr() This function is called from code model C functions to return a pointer to state storage allocated with cm_analog_alloc(). A tag specified in its argument list is used to locate the state in question. A second argument specifies whether the desired state is for the current timestep or from a preceding timestep. The location of the state in memory is then computed and returned. */ void *cm_analog_get_ptr( int tag, /* The user-specified tag for this block of memory */ int timepoint) /* The timepoint of interest - 0=current 1=previous */ { MIFinstance *here; CKTcircuit *ckt; Mif_State_t *state=NULL; Mif_Boolean_t got_tag; int i; /* Get the address of the ckt and instance structs from g_mif_info */ here = g_mif_info.instance; ckt = g_mif_info.ckt; /* Scan states in instance struct and see if tag exists */ for(got_tag = MIF_FALSE, i = 0; i < here->num_state; i++) { if(tag == here->state[i].tag) { state = &(here->state[i]); got_tag = MIF_TRUE; break; } } /* Return error if tag not found */ if(! got_tag) { g_mif_info.errmsg = "ERROR - cm_analog_get_ptr() - Bad tag\n"; return(NULL); } /* Return error if timepoint is not 0 or 1 */ if((timepoint < 0) || (timepoint > 1)) { g_mif_info.errmsg = "ERROR - cm_analog_get_ptr() - Bad timepoint\n"; return(NULL); } /* Return address of requested state in ckt->CKTstates[timepoint] vector */ return( (void *) (ckt->CKTstates[timepoint] + state->index) ); } /* cm_analog_integrate() This function performs a numerical integration on the state supplied in its argument list according to the integrand also supplied in the argument list. The next value of the integral and the partial derivative with respect to the integrand input is returned. The integral argument must be a pointer to memory previously allocated through a call to cm_analog_alloc(). If this is the first call to cm_analog_integrate(), information is entered into the instance structure to mark that the integral should be processed by MIFtrunc and MIFconvTest. */ int cm_analog_integrate( double integrand, /* The integrand */ double *integral, /* The current and returned value of integral */ double *partial) /* The partial derivative of integral wrt integrand */ { MIFinstance *here; CKTcircuit *ckt; Mif_Intgr_t *intgr; Mif_Boolean_t got_index; char *char_state0; char *char_state; int byte_index; int i; /* Get the address of the ckt and instance structs from g_mif_info */ here = g_mif_info.instance; ckt = g_mif_info.ckt; /* Check to be sure we're in transient analysis */ if(g_mif_info.circuit.anal_type != MIF_TRAN) { g_mif_info.errmsg = "ERROR - cm_analog_integrate() - Called in non-transient analysis\n"; *partial = 0.0; return(MIF_ERROR); } /* Preliminary check to be sure argument was allocated by cm_analog_alloc() */ if(ckt->CKTnumStates <= 0) { g_mif_info.errmsg = "ERROR - cm_analog_integrate() - Integral must be memory allocated by cm_analog_alloc()\n"; *partial = 0.0; return(MIF_ERROR); } /* Compute byte offset from start of state0 vector */ char_state0 = (char *) ckt->CKTstate0; char_state = (char *) integral; byte_index = (int) (char_state - char_state0); /* Check to be sure argument address is in range of state0 vector */ if((byte_index < 0) || (byte_index > (ckt->CKTnumStates - 1) * (int) sizeof(double))) { g_mif_info.errmsg = "ERROR - cm_analog_integrate() - Argument must be in state vector 0\n"; *partial = 0.0; return(MIF_ERROR); } /* Scan the intgr array in the instance struct to see if already exists */ for(got_index = MIF_FALSE, i = 0; i < here->num_intgr; i++) { if(here->intgr[i].byte_index == byte_index) { got_index = MIF_TRUE; } } /* Report error if not found and this is not the first load pass in tran analysis */ if((! got_index) && (! g_mif_info.circuit.anal_init)) { g_mif_info.errmsg = "ERROR - cm_analog_integrate() - New integral and not initialization pass\n"; *partial = 0.0; return(MIF_ERROR); } /* If new integral state, allocate space in instance */ /* struct for this intgr descriptor and register it with */ /* the cm_analog_converge() function */ if(! got_index) { if(here->num_intgr == 0) { here->num_intgr = 1; here->intgr = TMALLOC(Mif_Intgr_t, 1); } else { here->num_intgr++; here->intgr = TREALLOC(Mif_Intgr_t, here->intgr, here->num_intgr); } intgr = &(here->intgr[here->num_intgr - 1]); intgr->byte_index = byte_index; if(cm_analog_converge(integral)) { printf("%s\n",g_mif_info.errmsg); g_mif_info.errmsg = "ERROR - cm_analog_integrate() - Failure in cm_analog_converge() call\n"; return(MIF_ERROR); } } /* Compute the new integral and the partial */ cm_static_integrate(byte_index, integrand, integral, partial); return(MIF_OK); } /* cm_analog_converge() This function registers a state variable allocated with cm_analog_alloc() to be subjected to a convergence test at the end of each iteration. The state variable must be a double. Information is entered into the instance structure to mark that the state variable should be processed by MIFconvTest. */ int cm_analog_converge( double *state) /* The state to be converged */ { MIFinstance *here; CKTcircuit *ckt; Mif_Conv_t *conv; char *char_state0; char *char_state; int byte_index; int i; /* Get the address of the ckt and instance structs from g_mif_info */ here = g_mif_info.instance; ckt = g_mif_info.ckt; /* Preliminary check to be sure argument was allocated by cm_analog_alloc() */ if(ckt->CKTnumStates <= 0) { g_mif_info.errmsg = "ERROR - cm_analog_converge() - Argument must be memory allocated by cm_analog_alloc()\n"; return(MIF_ERROR); } /* Compute byte offset from start of state0 vector */ char_state0 = (char *) ckt->CKTstate0; char_state = (char *) state; byte_index = (int) (char_state - char_state0); /* Check to be sure argument address is in range of state0 vector */ if((byte_index < 0) || (byte_index > (ckt->CKTnumStates - 1) * (int) sizeof(double))) { g_mif_info.errmsg = "ERROR - cm_analog_converge() - Argument must be in state vector 0\n"; return(MIF_ERROR); } /* Scan the conv array in the instance struct to see if already registered */ /* If so, do nothing, just return */ for(i = 0; i < here->num_conv; i++) { if(here->conv[i].byte_index == byte_index) return(MIF_OK); } /* Allocate space in instance struct for this conv descriptor */ if(here->num_conv == 0) { here->num_conv = 1; here->conv = TMALLOC(Mif_Conv_t, 1); } else { here->num_conv++; here->conv = TREALLOC(Mif_Conv_t, here->conv, here->num_conv); } /* Fill in the conv descriptor data */ conv = &(here->conv[here->num_conv - 1]); conv->byte_index = byte_index; conv->last_value = 1.0e30; /* There should be a better way ... */ return(MIF_OK); } /* cm_message_get_errmsg() This function returns the address of an error message string set by a call to some code model support function. */ char *cm_message_get_errmsg(void) { return(g_mif_info.errmsg); } /* cm_analog_set_temp_bkpt() This function is called by a code model C function to set a temporary breakpoint. These temporary breakpoints remain in effect only until the next timestep is taken. A temporary breakpoint added with a time less than the current time, but greater than the last successful timestep causes the simulator to abandon the current timestep and decrease the timestep to hit the breakpoint. A temporary breakpoint with a time greater than the current time causes the simulator to make the breakpoint the next timepoint if the next timestep would produce a time greater than that of the breakpoint. */ int cm_analog_set_temp_bkpt( double time) /* The time of the breakpoint to be set */ { CKTcircuit *ckt; /* Get the address of the ckt and instance structs from g_mif_info */ ckt = g_mif_info.ckt; /* Make sure breakpoint is not prior to last accepted timepoint */ if(time < ((ckt->CKTtime - ckt->CKTdelta) + ckt->CKTminBreak)) { g_mif_info.errmsg = "ERROR - cm_analog_set_temp_bkpt() - Time < last accepted timepoint\n"; return(MIF_ERROR); } /* If too close to a permanent breakpoint or the current time, discard it */ if( (fabs(time - ckt->CKTbreaks[0]) < ckt->CKTminBreak) || (fabs(time - ckt->CKTbreaks[1]) < ckt->CKTminBreak) || (fabs(time - ckt->CKTtime) < ckt->CKTminBreak) ) return(MIF_OK); /* If < current dynamic breakpoint, make it the current breakpoint */ if( time < g_mif_info.breakpoint.current) g_mif_info.breakpoint.current = time; return(MIF_OK); } /* cm_analog_set_perm_bkpt() This function is called by a code model C function to set a permanent breakpoint. These permanent breakpoints remain in effect from the time they are introduced until the simulation time equals or exceeds the breakpoint time. A permanent breakpoint added with a time less than the current time, but greater than the last successful timestep causes the simulator to abandon the current timestep and decrease the timestep to hit the breakpoint. A permanent breakpoint with a time greater than the current time causes the simulator to make the breakpoint the next timepoint if the next timestep would produce a time greater than that of the breakpoint. */ int cm_analog_set_perm_bkpt( double time) /* The time of the breakpoint to be set */ { CKTcircuit *ckt; /* Get the address of the ckt and instance structs from g_mif_info */ ckt = g_mif_info.ckt; /* Call cm_analog_set_temp_bkpt() to force backup if less than current time */ if(time < (ckt->CKTtime + ckt->CKTminBreak)) return(cm_analog_set_temp_bkpt(time)); else CKTsetBreak(ckt,time); return(MIF_OK); } /* cm_analog_ramp_factor() This function returns the current value of the ramp factor associated with the ``ramptime'' option. For this option to work best, models with analog outputs that may be non-zero at time zero should call this function and scale their outputs and partials by the ramp factor. */ double cm_analog_ramp_factor(void) { CKTcircuit *ckt; /* Get the address of the ckt and instance structs from g_mif_info */ ckt = g_mif_info.ckt; /* if ramptime == 0.0, no ramptime option given, so return 1.0 */ /* this is the most common case, so it goes first */ if(ckt->enh->ramp.ramptime == 0.0) return(1.0); /* else if not transient analysis, return 1.0 */ else if( (!(ckt->CKTmode & MODETRANOP)) && (!(ckt->CKTmode & MODETRAN)) ) return(1.0); /* else if time >= ramptime, return 1.0 */ else if(ckt->CKTtime >= ckt->enh->ramp.ramptime) return(1.0); /* else time < end of ramp, so compute and return factor based on time */ else return(ckt->CKTtime / ckt->enh->ramp.ramptime); } /* ************************************************************ */ /* * Copyright (c) 1985 Thomas L. Quarles * * This is a modified version of the function NIintegrate() * * Modifications are Copyright 1991 Georgia Tech Research Institute * */ static void cm_static_integrate(int byte_index, double integrand, double *integral, double *partial) { CKTcircuit *ckt; double intgr[7]; double cur=0; double *double_ptr; double ceq; double geq; char *char_ptr; int i; /* Get the address of the ckt struct from g_mif_info */ ckt = g_mif_info.ckt; /* Get integral values from current and previous timesteps */ for(i = 0; i <= ckt->CKTorder; i++) { char_ptr = (char *) ckt->CKTstates[i]; char_ptr += byte_index; double_ptr = (double *) char_ptr; intgr[i] = *double_ptr; } /* Do what SPICE3C1 does for its implicit integration */ switch(ckt->CKTintegrateMethod) { case TRAPEZOIDAL: switch(ckt->CKTorder) { case 1: cur = ckt->CKTag[1] * intgr[1]; break; case 2: /* WARNING - This code needs to be redone. */ /* The correct code should rely on one previous value */ /* of cur as done in NIintegrate() */ cur = -0.5 * ckt->CKTag[0] * intgr[1]; break; } break; case GEAR: cur = 0.0; switch(ckt->CKTorder) { case 6: cur += ckt->CKTag[6] * intgr[6]; /* fall through */ case 5: cur += ckt->CKTag[5] * intgr[5]; /* fall through */ case 4: cur += ckt->CKTag[4] * intgr[4]; /* fall through */ case 3: cur += ckt->CKTag[3] * intgr[3]; /* fall through */ case 2: cur += ckt->CKTag[2] * intgr[2]; /* fall through */ case 1: cur += ckt->CKTag[1] * intgr[1]; break; } break; } ceq = cur; geq = ckt->CKTag[0]; /* WARNING: Take this out when the case 2: above is fixed */ if((ckt->CKTintegrateMethod == TRAPEZOIDAL) && (ckt->CKTorder == 2)) geq *= 0.5; /* The following code is equivalent to */ /* the solution of one matrix iteration to produce the */ /* integral value. */ *integral = (integrand - ceq) / geq; *partial = 1.0 / geq; } /* cm_analog_not_converged() This function tells the simulator not to allow the current iteration to be the final iteration. It is called when a code model performs internal limiting on one or more of its inputs to assist convergence. */ void cm_analog_not_converged(void) { (g_mif_info.ckt->CKTnoncon)++; } /* cm_message_send() This function prints a message output from a code model, prepending the instance name. */ int cm_message_send( char *msg) /* The message to output. */ { MIFinstance *here; /* Get the address of the instance struct from g_mif_info */ here = g_mif_info.instance; /* Print the name of the instance and the message */ printf("\nInstance: %s Message: %s\n", here->MIFname, msg); return(0); } /* cm_analog_auto_partial() This function tells the simulator to automatically compute approximations of partial derivatives of analog outputs with respect to analog inputs. When called from a code model, it sets a flag in the g_mif_info structure which tells function MIFload() and it's associated MIFauto_partial() function to perform the necessary calculations. */ void cm_analog_auto_partial(void) { g_mif_info.auto_partial.local = MIF_TRUE; } /* cm_get_path() Return the path of the first file given on the command line after the command line options or set by the 'source' command. Will be used in function fopen_with_path(). */ char *cm_get_path(void) { return Infile_Path; } /* cm_get_circuit(void) To build complex custom-built xspice-models, access to certain parameters (e.g. maximum step size) may be needed to get reasonable results of a simulation. In detail, this may be necessary when spice interacts with an external sensor-simulator and the results of that external simulator do not have a direct impact on the spice circuit. Then, modifying the maximum step size on the fly may help to improve the simulation results. Modifying such parameters has to be done carefully. The patch enhances the xspice interface with access to the (fundamental) ckt pointer. */ CKTcircuit *cm_get_circuit(void) { return(g_mif_info.ckt); } tmpk8ny_4pz/src/xspice/cm/cmexport.c0000644000175000017500000000270413546075722017651 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/mif.h" #include "ngspice/cm.h" #include "ngspice/dllitf.h" /*how annoying!, needed for structure below*/ static void *tcalloc(size_t a, size_t b) { return tmalloc(a*b); /* FIXME, tcalloc must zero !?!? */ } #ifdef HAVE_LIBGC static void no_free(const void *p) { NG_IGNORE(p); } #endif static FILE * no_file(void) { return NULL; } struct coreInfo_t coreInfo = { MIF_INP2A, MIFgetMod, MIFgetValue, MIFsetup, MIFunsetup, MIFload, MIFmParam, MIFask, MIFmAsk, MIFtrunc, MIFconvTest, MIFdelete, MIFmDelete, MIFdestroy, MIFgettok, MIFget_token, MIFget_cntl_src_type, MIFcopy, cm_climit_fcn, cm_smooth_corner, cm_smooth_discontinuity, cm_smooth_pwl, cm_analog_ramp_factor, cm_analog_alloc, cm_analog_get_ptr, cm_analog_integrate, cm_analog_converge, cm_analog_set_temp_bkpt, cm_analog_set_perm_bkpt, cm_analog_not_converged, cm_analog_auto_partial, cm_event_alloc, cm_event_get_ptr, cm_event_queue, cm_message_get_errmsg, cm_message_send, cm_netlist_get_c, cm_netlist_get_l, cm_complex_set, cm_complex_add, cm_complex_subtract, cm_complex_multiply, cm_complex_divide, cm_get_path, cm_get_circuit, no_file, no_file, no_file, #ifndef HAVE_LIBGC tmalloc, tcalloc, trealloc, txfree, tmalloc, trealloc, txfree #else GC_malloc, tcalloc, GC_realloc, no_free, GC_malloc, GC_realloc, no_free #endif }; tmpk8ny_4pz/src/xspice/cm/cmevt.c0000644000175000017500000001417113546075722017127 0ustar carstencarsten/* =========================================================================== FILE CMevt.c MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains functions callable from user code models that are associated with the event-driven algorithm. INTERFACES cm_event_alloc() cm_event_get_ptr() cm_event_queue() REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/cm.h" #include "ngspice/mif.h" #include "ngspice/evt.h" #include "ngspice/evtproto.h" /* cm_event_alloc() This function is called from code model C functions to allocate state storage for a particular event-driven instance. It is similar to the function cm_analog_alloc() used by analog models, but allocates states that are rotated during event-driven 'timesteps' instead of analog timesteps. */ void cm_event_alloc( int tag, /* The user-specified tag for the memory block */ int bytes) /* The number of bytes to be allocated */ { int inst_index; int num_tags; MIFinstance *here; CKTcircuit *ckt; Evt_State_Desc_t **desc_ptr; Evt_State_Desc_t *desc; Evt_State_Data_t *state_data; Evt_State_t *state; /* Get the address of the ckt and instance structs from g_mif_info */ here = g_mif_info.instance; ckt = g_mif_info.ckt; /* If not initialization pass, return error */ if(here->initialized) { g_mif_info.errmsg = "ERROR - cm_event_alloc() - Cannot alloc when not initialization pass\n"; return; } /* Get pointers for fast access */ inst_index = here->inst_index; state_data = ckt->evt->data.state; /* Scan state descriptor list to determine if tag is present and to */ /* find the end of the list. Report error if duplicate tag */ desc_ptr = &(state_data->desc[inst_index]); desc = *desc_ptr; num_tags = 1; while(desc) { if(desc->tag == tag) { g_mif_info.errmsg = "ERROR - cm_event_alloc() - Duplicate tag\n"; return; } desc_ptr = &(desc->next); desc = *desc_ptr; num_tags++; } /* Create a new state description structure at end of list */ /* and fill in the data and update the total size */ *desc_ptr = TMALLOC(Evt_State_Desc_t, 1); desc = *desc_ptr; desc->tag = tag; desc->size = bytes; desc->offset = state_data->total_size[inst_index]; state_data->total_size[inst_index] += bytes; /* Create a new state structure if list starting at head is null */ state = state_data->head[inst_index]; if(state == NULL) { state = TMALLOC(Evt_State_t, 1); state_data->head[inst_index] = state; } /* Create or enlarge the block and set the time */ if(num_tags == 1) state->block = tmalloc((size_t) state_data->total_size[inst_index]); else state->block = trealloc(state->block, (size_t) state_data->total_size[inst_index]); state->step = g_mif_info.circuit.evt_step; } /* cm_event_get_ptr() This function is called from code model C functions to return a pointer to state storage allocated with cm_event_alloc(). A tag specified in its argument list is used to locate the state in question. A second argument specifies whether the desired state is for the current timestep or from a preceding timestep. The location of the state in memory is then computed and returned. */ void *cm_event_get_ptr( int tag, /* The user-specified tag for the memory block */ int timepoint) /* The timepoint - 0=current, 1=previous */ { int i; int inst_index; MIFinstance *here; CKTcircuit *ckt; void *ptr; Evt_State_Desc_t *desc; Evt_State_Data_t *state_data; Evt_State_t *state; /* Get the address of the ckt and instance structs from g_mif_info */ here = g_mif_info.instance; ckt = g_mif_info.ckt; /* If initialization pass, return error */ if((! here->initialized) && (timepoint > 0)) { g_mif_info.errmsg = "ERROR - cm_event_get_ptr() - Cannot get_ptr(tag,1) during initialization pass\n"; return(NULL); } /* Get pointers for fast access */ inst_index = here->inst_index; state_data = ckt->evt->data.state; /* Scan state descriptor list to find the descriptor for this tag. */ /* Report error if tag not found */ desc = state_data->desc[inst_index]; while(desc) { if(desc->tag == tag) break; desc = desc->next; } if(desc == NULL) { g_mif_info.errmsg = "ERROR - cm_event_get_ptr() - Specified tag not found\n"; return(NULL); } /* Get the state pointer from the current array */ state = *(state_data->tail[inst_index]); /* Backup the specified number of timesteps */ for(i = 0; i < timepoint; i++) if(state->prev) state = state->prev; /* Return pointer */ ptr = ((char *) state->block) + desc->offset; return(ptr); } /* cm_event_queue() This function queues an event for an instance participating in the event-driven algorithm. */ int cm_event_queue( double time) /* The time of the event to be queued */ { MIFinstance *here; CKTcircuit *ckt; /* Get the address of the ckt and instance structs from g_mif_info */ here = g_mif_info.instance; ckt = g_mif_info.ckt; /* If breakpoint time <= current event time, return error */ if(time <= g_mif_info.circuit.evt_step) { g_mif_info.errmsg = "ERROR - cm_event_queue() - Event time cannot be <= current time\n"; return(MIF_ERROR); } /* Add the event time to the inst queue */ EVTqueue_inst(ckt, here->inst_index, g_mif_info.circuit.evt_step, time); return(MIF_OK); } tmpk8ny_4pz/src/sharedspice.c0000644000175000017500000016456113546075722016422 0ustar carstencarsten/* Copyright 2013 - 2019 Holger Vogt * * Modified BSD license */ /* For comments and explanations see sharedspice.h */ /*******************/ /* Defines */ /*******************/ #ifdef _MSC_VER #define SHAREDSPICE_version "31.0" #define STDIN_FILENO 0 #define STDOUT_FILENO 1 #define STDERR_FILENO 2 #endif /* If a calling function has high latency times during printing, causing memory access errors, you may undef the following line. Printing messages are assembled in a wordlist, and sent to the caller via a new thread. Delays may occur. */ #define low_latency /************* About threads in sharedspice.c ************************* If the calling (main) thread loads a circuit, the .control section commands in the input file are executed immediately by the calling thread after the ciruit has been parsed and loaded. Command bg_run from the calling thread then immediately starts the background thread (id. tid) that issues the 'run' command to start the simulation in this thread. The main thread returns to the caller. .control commands typically are executed prematurely before bg_run has returned. If the flag 'set controlswait' is given in the .control section, all commands following are assembled in the wordlist 'shcontrols', a new thread is started (id: tid2) and suspended immediately. Only when the background thread tid (and thus the simulation) is ready, the tid2 thread is released and the .control commands are executed. Before a repeated 'bg_run' is given, or after a 'reset', the command 'bg_ctrl' has to be sent by the caller to re-start and suspend the thread tid2, using the still existing shcontrols. */ /**********************************************************************/ /* Header files for C functions */ /**********************************************************************/ #include #include #include /* workaround since fputs, putc are replaced by sh_fputs, sh_putc, through redefinition in ngspice.h */ int myputs(const char* inp, FILE* f); int myputc(int inp, FILE* f); int myfputc(int inp, FILE* f); int myputs(const char* inp, FILE* f) { return fputs(inp, f); } int myputc(int inp, FILE* f) { return putc(inp, f); } int myfputc(int inp, FILE* f) { return fputc(inp, f); } #if defined(__MINGW32__) || defined(_MSC_VER) #include #endif #include "ngspice/ngspice.h" #include "misc/misc_time.h" #include "ngspice/randnumb.h" /*Use Windows threads if on W32 without pthreads*/ #ifndef HAVE_LIBPTHREAD #if defined(__MINGW32__) || defined(_MSC_VER) //#if defined(_MSC_VER) #ifdef SRW #define mutex_lock(a) AcquireSRWLockExclusive(a) #define mutex_unlock(a) ReleaseSRWLockExclusive(a) typedef SRWLOCK mutexType; #else #define mutex_lock(a) EnterCriticalSection(a) #define mutex_unlock(a) LeaveCriticalSection(a) typedef CRITICAL_SECTION mutexType; #endif #define thread_self() GetCurrentThread() #define threadid_self() GetCurrentThreadId() typedef HANDLE threadId_t; #define WIN_THREADS #define THREADS #endif #else #include #define mutex_lock(a) pthread_mutex_lock(a) #define mutex_unlock(a) pthread_mutex_unlock(a) #define thread_self() pthread_self() #define threadid_self() 0 //FIXME t.b.d. typedef pthread_mutex_t mutexType; typedef pthread_t threadId_t; #define THREADS static pthread_cond_t cond = PTHREAD_COND_INITIALIZER; static bool cont_condition; #endif /* Copied from main.c in ngspice*/ #if defined(__MINGW32__) #include /* remove type incompatibility with winnt.h*/ #undef BOOLEAN #include #include /* Sleep */ #elif defined(_MSC_VER) #include /* remove type incompatibility with winnt.h*/ #undef BOOLEAN #include /* Sleep */ #include /* _getpid */ #define dup _dup #define dup2 _dup2 #define open _open #define close _close #else #include /* usleep */ #endif /* __MINGW32__ */ #include "ngspice/iferrmsg.h" #include "ngspice/ftedefs.h" #include "ngspice/devdefs.h" #include "spicelib/devices/dev.h" #include "spicelib/analysis/analysis.h" #include "misc/ivars.h" #include "frontend/resource.h" #include "frontend/com_measure2.h" #include "frontend/outitf.h" #include "ngspice/memory.h" #include "frontend/com_measure2.h" #include "frontend/misccoms.h" #ifdef HAVE_FTIME #include #endif /* To interupt a spice run */ #include typedef void (*sighandler)(int); #include #include "frontend/signal_handler.h" /*Included for the module to access data*/ #include "ngspice/dvec.h" #include "ngspice/plot.h" #ifdef __CYGWIN__ #undef WIN32 #endif #include "ngspice/sim.h" /*For get_output*/ #include #include #ifdef _MSC_VER #define S_IRWXU _S_IWRITE #endif #ifdef XSPICE #include "ngspice/evtshared.h" extern bool wantevtdata; #endif extern IFfrontEnd nutmeginfo; extern struct comm spcp_coms[ ]; extern void DevInit(void); extern int SIMinit(IFfrontEnd *frontEnd, IFsimulator **simulator); extern wordlist *cp_varwl(struct variable *var); extern void create_circbyline(char *line); void exec_controls(wordlist *shcontrols); void rem_controls(void); /*The current run (to get variable names, etc)*/ static runDesc *cur_run; double getisrcval(double time, char *iname); int sh_fputsll(const char *input, FILE* outf); int sh_ExecutePerLoop(void); double getvsrcval(double, char*); int sh_vecinit(runDesc *run); ATTRIBUTE_NORETURN void shared_exit(int status); void sighandler_sharedspice(int num); void wl_delete_first(wordlist **wlstart, wordlist **wlend); int add_bkpt(void); int sharedsync(double*, double*, double, double, double, int, int*, int); void sh_delete_myvec(void); #ifdef XSPICE void shared_send_event(int, double, double, char *, void *, int, int); void shared_send_dict(int, int, char*, char*); #endif #if !defined(low_latency) static char* outstorage(char*, bool); static void printsend(void); #endif #include "ngspice/sharedspice.h" static SendChar* pfcn; static void* userptr; static SendStat* statfcn; static ControlledExit* ngexit; static SendData* datfcn; static SendInitData* datinitfcn; static BGThreadRunning* bgtr; static GetVSRCData* getvdat; static GetISRCData* getidat; static GetSyncData* getsync; static pvector_info myvec = NULL; #ifdef XSPICE static struct dvec *infovec = NULL; #endif char **allvecs = NULL; char **allplots = NULL; static bool noprintfwanted = FALSE; static bool nostatuswanted = FALSE; static bool nodatawanted = FALSE; static bool nodatainitwanted = FALSE; static bool nobgtrwanted = FALSE; static bool wantvdat = FALSE; static bool wantidat = FALSE; static bool wantsync = FALSE; static bool immediate = FALSE; static bool coquit = FALSE; static jmp_buf errbufm, errbufc; static int intermj = 1; #ifdef XSPICE static SendInitEvtData* sendinitevt; static SendEvtData* sendevt; #endif static void* euserptr; static wordlist *shcontrols; // thread IDs unsigned int main_id, ng_id, command_id; #ifdef THREADS mutexType triggerMutex; mutexType allocMutex; mutexType fputsMutex; #endif /* initialization status */ static bool is_initialized = FALSE; static char* no_init = "Error: ngspice is not initialized!\n Run ngSpice_Init first"; /* identifier for this ngspice invocation */ int ng_ident = 0; static struct plot * get_plot_byname(char* plotname) { struct plot *pl; pl = plot_list; while (pl) { if(cieq(pl->pl_typename, plotname)) break; pl = pl->pl_next; } return pl; } /******************************************************************/ /* Main spice command executions and thread control */ /*****************************************************************/ #ifdef THREADS static threadId_t tid, printtid, tid2; static bool fl_running = FALSE; static bool fl_exited = TRUE; static bool printstopp = FALSE; static bool ps_exited = TRUE; #if defined(__MINGW32__) || defined(_MSC_VER) #define EXPORT_FLAVOR WINAPI #else #define EXPORT_FLAVOR #endif /* starts a thread to run the controls, started when bg thread finishes */ static void * EXPORT_FLAVOR _cthread_run(void *controls) { wordlist *wl; #ifdef HAVE_LIBPTHREAD if (!cont_condition) printf("Prepared to start controls after bg_run has finished\n"); pthread_mutex_lock(&triggerMutex); cont_condition = FALSE; do { pthread_cond_wait(&cond, &triggerMutex); } while (!cont_condition); pthread_mutex_unlock(&triggerMutex); #endif fl_exited = FALSE; for (wl = controls; wl; wl = wl->wl_next) cp_evloop(wl->wl_word); fl_exited = TRUE; #ifdef HAVE_LIBPTHREAD cont_condition = FALSE; #endif return NULL; } /* starts a background thread, e.g. from command bg_run, releases controls thread tid2 */ static void * EXPORT_FLAVOR _thread_run(void *string) { ng_id = threadid_self(); fl_exited = FALSE; /* notify caller that thread is running */ if (!nobgtrwanted) bgtr(fl_exited, ng_ident, userptr); // bgtid = thread_self(); cp_evloop((char *)string); FREE(string); // #ifdef __MINGW32__ // bgtid.p = NULL; // bgtid.x = 0; // #else // bgtid = (threadId_t)0; // #endif fl_exited = TRUE; /* notify caller that thread has exited */ if (!nobgtrwanted) bgtr(fl_exited, ng_ident, userptr); /* release thread tid2 */ if (tid2) { #ifdef HAVE_LIBPTHREAD pthread_mutex_lock(&triggerMutex); cont_condition = TRUE; pthread_cond_signal(&cond); pthread_mutex_unlock(&triggerMutex); pthread_join(tid2, NULL); #elif defined _MSC_VER || defined __MINGW32__ ResumeThread(tid2); #else #endif tid2 = 0; } return NULL; } /* Stops a running background thread, hopefully */ static int EXPORT_FLAVOR _thread_stop(void) { int timeout = 0; if (fl_running) { while (!fl_exited && timeout < 100) { /* ft_intrpt is the flag to stop simulation, if set TRUE ! E.g. SPfrontEnd->IFpauseTest() in dctran.c points to OUTstopnow(void), which returns 1, which leads dctran to return with -1 and thus terminates the simulation*/ ft_intrpt = TRUE; timeout++; #if defined(__MINGW32__) || defined(_MSC_VER) Sleep(100); // va: windows native #else usleep(10000); #endif } if (!fl_exited) { fprintf(stderr, "Error: Couldn't stop ngspice\n"); return EXIT_BAD; } else fprintf(stdout, "Background thread stopped with timeout = %d\n", timeout); fl_running = FALSE; ft_intrpt = FALSE; return EXIT_NORMAL; } else { fprintf(stderr, "Spice not running\n"); } return EXIT_NORMAL; } void sighandler_sharedspice(int num) { NG_IGNORE(num); if (fl_running) _thread_stop(); return; } #endif /*THREADS*/ /* create a suspended thread tid2 that is activated when bg_run has finished. It executes the .control commands. If the arguemnt is NULL, the thread is started with the existing controls (e.g. during command 'reset'. */ void exec_controls(wordlist *newcontrols) { if (newcontrols && newcontrols->wl_word && !eq(newcontrols->wl_word,"")) { shcontrols = newcontrols; } else { tid2 = 0; return; } #ifdef THREADS #ifdef HAVE_LIBPTHREAD cont_condition = FALSE; usleep(20000); /* wait a little */ pthread_create(&tid2, NULL, (void * (*)(void *))_cthread_run, (void *)shcontrols); #elif defined _MSC_VER || defined __MINGW32__ tid2 = (HANDLE)_beginthreadex(NULL, 0, (unsigned int(__stdcall *)(void *))_cthread_run, (void*)shcontrols, CREATE_SUSPENDED, NULL); #else tid2 = CreateThread(NULL, 0, (PTHREAD_START_ROUTINE)_cthread_run, (void*)shcontrols, 0, NULL); #endif #else wordlist *wl; for (wl = shcontrols; wl; wl = wl->wl_next) cp_evloop(wl->wl_word); #endif } /* free controls after 'quit' */ void rem_controls(void) { wl_free(shcontrols); } /* run a ngspice command */ static int runc(char* command) { char buf[1024] = ""; sighandler oldHandler; #ifdef THREADS #ifndef low_latency int timeout = 0; #endif char *string; bool fl_bg = FALSE; command_id = threadid_self(); /* run task in background if command is preceeded by "bg_" */ if (!cieq("bg_halt", command) && !cieq("bg_pstop", command) && !cieq("bg_ctrl", command) && ciprefix("bg_", command)) { strncpy(buf, command+3, 1024); fl_bg = TRUE; } #ifndef low_latency /* stop the printf thread 'printsend()' */ else if (cieq("bg_pstop", command)) { while (!ps_exited && timeout < 100) { printstopp = TRUE; #if defined __MINGW32__ || defined _MSC_VER Sleep(100); // va: windows native #else usleep(10000); #endif timeout++; } if (!ps_exited) { fprintf(stderr, "Error: Couldn't stop printsend thread\n"); return EXIT_BAD; } else fprintf(stdout, "Printsend thread stopped with timeout = %d\n", timeout); printstopp = FALSE; return 2; } #endif else strncpy(buf, command, 1024); #else strncpy(buf, command, 1024); #endif /* Catch Ctrl-C to break simulations */ #if 1 //!defined(_MSC_VER) /*&& !defined(__MINGW32__) */ oldHandler = signal(SIGINT, (SIGNAL_FUNCTION) ft_sigintr); if (SETJMP(jbuf, 1) != 0) { ft_sigintr_cleanup(); signal(SIGINT, oldHandler); return 0; } #else oldHandler = SIG_IGN; #endif #ifdef THREADS /* run in the background */ if (fl_bg && fl_exited) { if (fl_running) _thread_stop(); fl_running = TRUE; string = copy(buf); /*as buf gets freed fairly quickly*/ #ifdef HAVE_LIBPTHREAD pthread_create(&tid, NULL, (void * (*)(void *))_thread_run, (void *)string); pthread_detach(tid); #elif defined _MSC_VER || defined __MINGW32__ tid = (HANDLE)_beginthreadex(NULL, 0, (unsigned int (__stdcall *)(void *))_thread_run, (void*)string, 0, NULL); #else tid = CreateThread(NULL, 0, (PTHREAD_START_ROUTINE)_thread_run, (void*)string, 0, NULL); #endif } else /* bg_halt (pause) a bg run */ if (!strcmp(buf, "bg_halt")) { signal(SIGINT, oldHandler); return _thread_stop(); /* bg_ctrl prepare running the controls after bg_run */ } else if (!strcmp(buf, "bg_ctrl")) { if (shcontrols) exec_controls(wl_copy(shcontrols)); else fprintf(stderr, "Warning: No .control commands available, bg_ctrl skipped\n"); return 0; } else /* cannot do anything if ngspice is running in the bg*/ if (fl_running) { if (fl_exited) { _thread_stop(); cp_evloop(buf); } else { fprintf(stderr, "Warning: cannot execute \"%s\", type \"bg_halt\" first\n", buf); } } else { /*do the command*/ cp_evloop(buf); } #else cp_evloop(buf); #endif /*THREADS*/ signal(SIGINT, oldHandler); return 0; } /* -------------------------------------------------------------------------- */ /* Read an initialisation file. dir is the directory (use NULL or "" for current directory) name is the initialisation file's name Return true on success SJB 25th April 2005 */ static bool read_initialisation_file(char *dir, char *name) { char *path; bool result = FALSE; /* check name */ if (!name || *name == '\0') return FALSE; /* Fail; name needed */ /* contruct the full path */ if (!dir || *dir == '\0') { path = name; } else { path = tprintf("%s" DIR_PATHSEP "%s", dir, name); if (!path) return FALSE; /* memory allocation error */ } /* now access the file */ #ifdef HAVE_UNISTD_H if (access(path, R_OK) == 0) result = TRUE; #else { FILE *fp = fopen(path, "r"); if (fp) { fclose(fp); result = TRUE; } } #endif if (result) { inp_source(path); #ifdef TRACE printf("Init file: '%s'\n", path); #endif } if (path != name) tfree(path); return result; } /* -------------------------------------------------------------------------- */ /**********************************************************/ /* The functions exported explicitely from shared ngspice */ /**********************************************************/ #ifdef THREADS /* Checks if ngspice is running in the background */ IMPEXP bool ngSpice_running (void) { return (fl_running && !fl_exited); } #endif /* Initialise external voltage source and synchronization */ IMPEXP int ngSpice_Init_Sync(GetVSRCData *vsrcdat, GetISRCData *isrcdat, GetSyncData *syncdat, int *ident, void *userData) { getvdat = vsrcdat; getidat = isrcdat; getsync = syncdat; /* set userdata, but don't overwrite with NULL */ if (userData) userptr = userData; /* set ngspice shared lib identification number */ if (ident) ng_ident = *ident; /* if caller sends NULL, don't try to retrieve voltage */ if (getvdat) { wantvdat = TRUE; } /* if caller sends NULL, don't try to retrieve current */ if (getidat) { wantidat = TRUE; } /* if caller sends NULL, don't synchronize */ if (getsync) { wantsync = TRUE; } return 0; } /* Initialise ngspice and setup native methods */ IMPEXP int ngSpice_Init(SendChar* printfcn, SendStat* statusfcn, ControlledExit* ngspiceexit, SendData* sdata, SendInitData* sinitdata, BGThreadRunning* bgtrun, void* userData) { sighandler old_sigint; pfcn = printfcn; /* if caller sends NULL, don't send printf strings */ if (!pfcn) noprintfwanted = TRUE; userptr = userData; statfcn = statusfcn; /* if caller sends NULL, don't send status data */ if (!statfcn) nostatuswanted = TRUE; ngexit = ngspiceexit; datfcn = sdata; /* if caller sends NULL, don't send data */ if (!datfcn) nodatawanted = TRUE; /* if caller sends NULL, don't initialize and send data */ datinitfcn = sinitdata; if (!datinitfcn) nodatawanted = nodatainitwanted = TRUE; bgtr = bgtrun; if (!bgtr) nobgtrwanted = TRUE; immediate = FALSE; #ifdef THREADS /* init the mutexes */ #ifdef HAVE_LIBPTHREAD pthread_mutex_init(&triggerMutex, NULL); pthread_mutex_init(&allocMutex, NULL); pthread_mutex_init(&fputsMutex, NULL); cont_condition = FALSE; #else #ifdef SRW InitializeSRWLock(&triggerMutex); InitializeSRWLock(&allocMutex); InitializeSRWLock(&fputsMutex); #else InitializeCriticalSection(&triggerMutex); InitializeCriticalSection(&allocMutex); InitializeCriticalSection(&fputsMutex); #endif #endif // Id of primary thread main_id = threadid_self(); signal(SIGINT, sighandler_sharedspice); #endif ft_rawfile = NULL; ivars(NULL); cp_in = stdin; cp_out = stdout; cp_err = stderr; /*timer*/ init_time(); /*IFsimulator struct initilised*/ SIMinit(&nutmeginfo, &ft_sim); /* program name*/ cp_program = ft_sim->simulator; /* initialze random number generator with seed = 1 */ int ii = 1; cp_vset("rndseed", CP_NUM, &ii); com_sseed(NULL); /* set a boolean variable to be used in .control sections */ bool sm = TRUE; cp_vset("sharedmode", CP_BOOL, &sm); /*parameter fetcher, used in show, alter, altermod */ if_getparam = spif_getparam_special; /* Get startup system limits */ init_rlimits(); /*Command prompt stuff */ ft_cpinit(); /* Read the user config files */ /* To catch interrupts during .spiceinit... */ old_sigint = signal(SIGINT, (SIGNAL_FUNCTION) ft_sigintr); if (SETJMP(jbuf, 1) == 1) { ft_sigintr_cleanup(); fprintf(cp_err, "Warning: error executing .spiceinit.\n"); goto bot; } #ifdef HAVE_PWD_H /* Try to source either .spiceinit or ~/.spiceinit. */ if (access(".spiceinit", 0) == 0) { inp_source(".spiceinit"); } else { char *s; struct passwd *pw; pw = getpwuid(getuid()); s = tprintf("%s" DIR_PATHSEP "%s", pw->pw_dir, INITSTR); if (access(s, 0) == 0) inp_source(s); tfree(s); } #else /* ~ HAVE_PWD_H */ /* load user's initialisation file .spiceinit (or old spice.rc) try accessing the initialisation file in the current directory, or the user's home directories HOME (Linux) and USERPROFILE (MS Windows)*/ char *homedir; bool userfileok = read_initialisation_file("", INITSTR); /*.spiceinit*/ if (!userfileok) { homedir = getenv("HOME"); if (homedir) userfileok = read_initialisation_file(homedir, INITSTR); else { homedir = getenv("USERPROFILE"); if (homedir) userfileok = read_initialisation_file(homedir, INITSTR); } } if (!userfileok) userfileok = read_initialisation_file("", ALT_INITSTR); /*spice.rc*/ if (!userfileok) { homedir = getenv("HOME"); if (homedir) userfileok = read_initialisation_file(homedir, ALT_INITSTR); else { homedir = getenv("USERPROFILE"); if (homedir) userfileok = read_initialisation_file(homedir, ALT_INITSTR); } } if (!userfileok && ft_ngdebug) fprintf(stdout, "Warning: No user initialization file .spiceinit or spice.rc found\n"); #endif /* ~ HAVE_PWD_H */ bot: signal(SIGINT, old_sigint); /* initilise display to 'no display at all'*/ DevInit(); #ifdef FastRand // initialization and seed for FastNorm Gaussian random generator { unsigned int rseed = 66; initnorm (0, 0); if (!cp_getvar("rndseed", CP_NUM, &rseed, 0)) { time_t acttime = time(NULL); rseed = (unsigned int) acttime; } initnorm (rseed, 2); fprintf (cp_out, "SoS %f, seed value: %ld\n", renormalize(), rseed); } #elif defined (WaGauss) initw(); #endif // com_version(NULL); fprintf(cp_out, "******\n" "** %s-%s shared library\n", ft_sim->simulator, ft_sim->version); if (Spice_Build_Date != NULL && *Spice_Build_Date != 0) fprintf(cp_out, "** Creation Date: %s\n", Spice_Build_Date); fprintf(cp_out, "******\n"); is_initialized = TRUE; if(!myvec) myvec = TMALLOC(vector_info, sizeof(vector_info)); #if !defined(low_latency) /* If caller has sent valid address for pfcn */ if (!noprintfwanted) #ifdef HAVE_LIBPTHREAD pthread_create(&printtid, NULL, (void * (*)(void *))printsend, (void *)NULL); #elif defined _MSC_VER || defined __MINGW32__ printtid = (HANDLE)_beginthreadex(NULL, 0, (unsigned int (__stdcall *)(void *))printsend, (void*) NULL, 0, NULL); #else printtid = CreateThread(NULL, 0, (PTHREAD_START_ROUTINE) printsend, NULL, 0, NULL); #endif #endif return 0; } /* to be called upon 'quit' */ void sh_delete_myvec(void) { tfree(myvec); #ifdef XSPICE if (infovec) { dvec_free(infovec->v_scale); dvec_free(infovec); } #endif } /* retrieve a ngspice command from caller and run it immediately */ IMPEXP int ngSpice_Command(char* comexec) { /* Check if command is reasonable */ if (comexec == NULL) { fprintf(stderr, "Warning: Received command NULL, ignored"); return 1; } if (*comexec == '\0') { fprintf(stderr, "Warning: Received empty string as command, ignored"); return 1; } if ( ! setjmp(errbufc) ) { immediate = FALSE; intermj = 1; if (!is_initialized) { fprintf(stderr, no_init); return 1; } runc(comexec); /* main thread prepares immediate detaching of dll */ immediate = TRUE; return 0; } return 1; } /* Return information about a vector to the caller */ IMPEXP pvector_info ngGet_Vec_Info(char* vecname) { struct dvec* newvec; if (!is_initialized) { fprintf(stderr, no_init); return NULL; } #ifdef XSPICE /* If vector is derived from event data, free it */ if (infovec) { dvec_free(infovec->v_scale); dvec_free(infovec); infovec = NULL; } #endif newvec = vec_get(vecname); if (newvec == NULL) { fprintf(stderr, "Error: vector %s not found!\n", vecname); return NULL; } if (newvec->v_numdims > 1) { fprintf(stderr, "Error: vector %s is multidimensional!\n This is not yet handled\n!", vecname); return NULL; } myvec->v_name = newvec->v_name; myvec->v_type = newvec->v_type; myvec->v_flags = newvec->v_flags; myvec->v_realdata = newvec->v_realdata; myvec->v_compdata = newvec->v_compdata; myvec->v_length = newvec->v_length; #ifdef XSPICE /* If we have a vector derived from event data, store its pointer */ if (newvec->v_scale && newvec->v_scale->v_name && eq(newvec->v_scale->v_name, "step")) infovec = newvec; #endif return myvec; } /* Receive a circuit from the caller as a pointer to an array of char* . Last entry in array has to be NULL */ IMPEXP int ngSpice_Circ(char** circa){ int entries = 0, i; char* newline; if ( ! setjmp(errbufm) ) { intermj = 0; immediate = FALSE; /* count the entries */ while (circa[entries]) { entries++; } /* create a local copy (to be freed in inpcom.c) */ for (i = 0; i < entries; i++) { newline = copy(circa[i]); create_circbyline(newline); } return 0; } /* upon error */ return 1; } /* return to the caller a pointer to the name of the current plot */ IMPEXP char* ngSpice_CurPlot(void) { struct plot *pl = plot_cur; return pl->pl_typename; } /* return to the caller a pointer to an array of all plots created by ngspice. Last entry in the array is NULL. */ IMPEXP char** ngSpice_AllPlots(void) { int len = 0, i = 0; struct plot *pl = plot_list; if (allplots) tfree(allplots); while (pl) { len++; pl = pl->pl_next; } allplots = TMALLOC(char*, len+1); pl = plot_list; for (i = 0; i < len; i++) { allplots[i] = pl->pl_typename; pl = pl->pl_next; } allplots[len] = '\0'; return allplots; } /* return to the caller a pointer to an array of vector names in the plot named by plotname. Last entry in the array is NULL. */ IMPEXP char** ngSpice_AllVecs(char* plotname) { struct dvec *d; int len = 0, i = 0; struct plot *pl; if (allvecs) tfree(allvecs); /* get the plot plotname */ pl = get_plot_byname(plotname); if (pl) for (d = pl->pl_dvecs; d; d = d->v_next) len++; if (len == 0) { fprintf(cp_err, "Error: There are no vectors currently active.\n"); return NULL; } allvecs = TMALLOC(char*, len + 1); for (d = pl->pl_dvecs, i = 0; d; d = d->v_next, i++) allvecs[i] = d->v_name; allvecs[len] = NULL; return allvecs; } static double *bkpttmp = NULL; static int bkpttmpsize = 0; /* set a breakpoint in ngspice */ IMPEXP bool ngSpice_SetBkpt(double time) { int error; CKTcircuit *ckt = NULL; if (!ft_curckt || !ft_curckt->ci_ckt) { fprintf(cp_err, "Error: no circuit loaded.\n"); return(FALSE); } ckt = ft_curckt->ci_ckt; if (ckt->CKTbreakSize == 0) { /* breakpoints have not yet been set up, so store here preliminary and add with fcn add_bkpt() called from DCTran() */ if (bkpttmp == NULL) { bkpttmp = TMALLOC(double, bkpttmpsize + 1); if(bkpttmp == NULL) return(FALSE); bkpttmpsize++; } else { bkpttmp = TREALLOC(double, bkpttmp, bkpttmpsize + 1); bkpttmpsize++; } bkpttmp[bkpttmpsize-1] = time; error = 0; } else error = CKTsetBreak(ckt, time); if(error) return(FALSE); return(TRUE); } #ifdef XSPICE /* return callback initialization addresses to caller */ IMPEXP int ngSpice_Init_Evt(SendEvtData* sevtdata, SendInitEvtData* sinitevtdata, void* userData) { if (sevtdata) wantevtdata = TRUE; else wantevtdata = FALSE; sendinitevt = sinitevtdata; sendevt = sevtdata; euserptr = userData; return(TRUE); } /* Get info about the event node vector. If node_name is NULL, just delete previous data */ IMPEXP pevt_shared_data ngGet_Evt_NodeInfo(char* node_name) { return EVTshareddata(node_name); } /* get a list of all event nodes */ IMPEXP char** ngSpice_AllEvtNodes(void) { return EVTallnodes(); } #endif /* add the preliminary breakpoints to the list. called from dctran.c */ int add_bkpt(void) { int i; int error = 0; CKTcircuit *ckt = ft_curckt->ci_ckt; if(bkpttmp && (bkpttmpsize > 0)) { for (i = 0; i < bkpttmpsize; i++) error = CKTsetBreak(ckt, bkpttmp[i]); FREE(bkpttmp); bkpttmpsize = 0; } if(error) return(error); return(OK); } /* use the original vprintf() in the rest of this file * instead of the redirected variant */ #undef vfprintf /*------------------------------------------------------*/ /* Redefine the vfprintf() functions for callback */ /*------------------------------------------------------*/ /* handling of escape characters (extra \ added) only, if 'set addescape' is given in .spiceinit */ int sh_vfprintf(FILE *f, const char *fmt, va_list args) { char buf[1024]; char *p/*, *s*/; int nchars, /*escapes,*/ result; size_t size; if ((fileno(f) != STDOUT_FILENO && fileno(f) != STDERR_FILENO && f != stderr && f != stdout) // #ifdef THREADS // || (fl_running && bgtid == thread_self()) // #endif ) return vfprintf(f, fmt, args); p = buf; // size: how much ist left for chars and terminating '\0' size = sizeof(buf); // assert(size > 0); for (;;) { va_list ap; va_copy(ap, args); nchars = vsnprintf(p, size, fmt, ap); va_end(ap); if(nchars == -1) { // compatibility to old implementations size *= 2; } else if (size < (size_t)nchars + 1) { size = (size_t)nchars + 1; } else { break; } if(p == buf) p = TMALLOC(char, size); else p = TREALLOC(char, p, size); } /* add / to escape characters, if 'set addescape' is called in .spiceinit */ if (cp_getvar("addescape", CP_BOOL, NULL, 0)) { size_t escapes; const char * const escape_chars = "$[]\"\\"; char *s = p; for (escapes = 0; ; escapes++) { s = strpbrk(s, escape_chars); if (!s) break; s++; } if (escapes) { size_t new_size = (size_t)nchars + escapes + 1; char *src, *dst; if (p != buf) { p = TREALLOC(char, p, new_size); } else if (new_size > sizeof(buf)) { p = TMALLOC(char, new_size); strcpy(p, buf); } src = p + nchars; dst = src + escapes; while (dst > src) { char c = *--src; *--dst = c; if (strchr(escape_chars, c)) *--dst = '\\'; } } } /* use sharedspice.c implementation of fputs (sh_fputs) to assess callback function derived from address printfcn received via Spice_Init() from caller of ngspice.dll */ result = sh_fputs(p, f); if (p != buf) tfree(p); return nchars; } /*---------------------------------------------------------------------- Reimplement fprintf() as a call to callback function pfcn via sh_vfprintf, sh_fputs, and sh_fputsll ----------------------------------------------------------------------*/ int sh_fprintf(FILE *f, const char *format, ...) { va_list args; int rtn; va_start (args, format); rtn = sh_vfprintf(f, format, args); va_end(args); return rtn; } /*---------------------------------------------------------------------- Reimplement printf() as a call to callback function pfcn via sh_vfprintf, sh_fputs, and sh_fputsll ----------------------------------------------------------------------*/ int sh_printf(const char *format, ...) { va_list args; int rtn; va_start (args, format); rtn = sh_vfprintf(stdout, format, args); va_end(args); return rtn; } int sh_putc(int inp, FILE* f) { char inpconv[2]; if ((fileno(f) != STDOUT_FILENO && fileno(f) != STDERR_FILENO && f != stderr && f != stdout)) return myfputc(inp, f); sprintf(inpconv, "%c", inp); fputs(inpconv, f); return inp; } int sh_fputc(int inp, FILE* f) { char inpconv[2]; if ((fileno(f) != STDOUT_FILENO && fileno(f) != STDERR_FILENO && f != stderr && f != stdout)) return myfputc(inp, f); sprintf(inpconv, "%c", inp); fputs(inpconv, f); return inp; } /*----------------------------------------------------------------------*/ /* Reimplement fputs() as a call to callback function pfcn */ /*----------------------------------------------------------------------*/ /* Collect and cat strings. If \n is detected, send string to caller via pfcn() */ static char* outstringerr = NULL; static char* outstringout = NULL; #if defined low_latency || !defined THREADS /* The strings issued by printf etc. are sent directly to the caller. The callback has to be fast enough (low latency). */ int sh_fputsll(const char *input, FILE* outf) { int result = 0; size_t len; char *delstring, *newstring, *prstring; size_t inputlen = strlen(input); /* If caller has sent NULL address for pfcn */ if (noprintfwanted) return -1; if (outf == stderr) { if (!outstringerr) delstring = outstringerr = copy(input); else { len = strlen(outstringerr); delstring = outstringerr = TREALLOC(char, outstringerr, len + inputlen + 2); strcat(outstringerr, input); } if (strchr(input, '\n')) { while (outstringerr) { newstring = gettok_char(&outstringerr, '\n', FALSE, FALSE); if(!newstring) break; prstring = tprintf("stderr %s", newstring); result = pfcn(prstring, ng_ident, userptr); tfree(newstring); tfree(prstring); } /* copy the rest following \n, but without trailing \n to new address */ if (outstringerr && *outstringerr != '\0') outstringerr = copy(outstringerr); else outstringerr = NULL; tfree(delstring); return result; } else if (strchr(input, '\r')) { result = pfcn(outstringerr, ng_ident, userptr); tfree(outstringerr); return result; } } else if (outf == stdout) { if (!outstringout) delstring = outstringout = copy(input); else { len = strlen(outstringout); delstring = outstringout = TREALLOC(char, outstringout, len + inputlen + 1); strcat(outstringout, input); } if (strchr(input, '\n')) { while (outstringout) { newstring = gettok_char(&outstringout, '\n', FALSE, FALSE); if(!newstring) break; prstring = tprintf("stdout %s", newstring); result = pfcn(prstring, ng_ident, userptr); tfree(newstring); tfree(prstring); } /* copy the rest following \n, but without trailing \n to new address */ if (outstringout && *outstringout != '\0') outstringout = copy(outstringout); else outstringout = NULL; tfree(delstring); return result; } else if (strchr(input, '\r')) { result = pfcn(outstringout, ng_ident, userptr); tfree(outstringout); return result; } } else myputs(input, outf); return 0; } /* provide a lock around printing function. May become critical if latency of callback is too high. */ int sh_fputs(const char *input, FILE* outf) { mutex_lock(&fputsMutex); sh_fputsll(input, outf); mutex_unlock(&fputsMutex); return 0; } #else /* FIFO storage for strings created by fputs and all other printing commands. A string will be appended to the FIFO by fcn outstorage() by the main thread or the background (bg_) thread. Each string is read from top of the FIFO by independent thread using again fcn outstoraghe(), top entry is deleted and string is sent to caller in an endless loop by fcn printsend() */ static wordlist *wlstart = NULL, *wlend = NULL; //static bool printstopp = FALSE; int sh_fputs(const char *input, FILE* outf) { int result = 0; size_t len; char *delstring, *newstring, *prstring; size_t inputlen = strlen(input); /* If caller has sent NULL address for pfcn */ if (noprintfwanted) return -1; if (outf == stderr) { if (!outstringerr) delstring = outstringerr = copy(input); else { len = strlen(outstringerr); delstring = outstringerr = TREALLOC(char, outstringerr, len + inputlen + 2); strcat(outstringerr, input); } if (strchr(input, '\n')) { while (outstringerr) { newstring = gettok_char(&outstringerr, '\n', FALSE, FALSE); if(!newstring) break; prstring = tprintf("stderr %s", newstring); mutex_lock(&fputsMutex); outstorage(prstring, TRUE); mutex_unlock(&fputsMutex); tfree(newstring); prstring = NULL; /* keep prstring here, address is in use */ } /* copy the rest following \n, but without trailing \n to new address */ if (outstringerr && *outstringerr != '\0') outstringerr = copy(outstringerr); else outstringerr = NULL; tfree(delstring); return result; } else if (strchr(input, '\r')) { mutex_lock(&fputsMutex); outstorage(outstringerr, TRUE); mutex_unlock(&fputsMutex); outstringerr = NULL; return 0; } } if (outf == stdout) { if (!outstringout) delstring = outstringout = copy(input); else { len = strlen(outstringout); delstring = outstringout = TREALLOC(char, outstringout, len + inputlen + 1); strcat(outstringout, input); } if (strchr(input, '\n')) { while (outstringout) { newstring = gettok_char(&outstringout, '\n', FALSE, FALSE); if(!newstring) break; prstring = tprintf("stdout %s", newstring); mutex_lock(&fputsMutex); outstorage(prstring, TRUE); mutex_unlock(&fputsMutex); tfree(newstring); prstring = NULL; } /* copy the rest following \n, but without trailing \n to new address */ if (outstringout && *outstringout != '\0') outstringout = copy(outstringout); else outstringout = NULL; tfree(delstring); return result; } else if (strchr(input, '\r')) { mutex_lock(&fputsMutex); outstorage(outstringout, TRUE); mutex_unlock(&fputsMutex); outstringout = NULL; return result; } } else myputs(input, outf); return 0; } static char *outsend = NULL; /* Endless loop in its own thread for reading data from FIFO and sending to caller */ static void printsend(void) { ps_exited = FALSE; printstopp = FALSE; for (;;) { #if defined(__MINGW32__) || defined(_MSC_VER) Sleep(50); // loop delay #else usleep(50000); #endif if (printstopp) { // issued by shared_exit() // catch the final error message mutex_lock(&fputsMutex); outsend = outstorage(NULL, FALSE); mutex_unlock(&fputsMutex); break; } mutex_lock(&fputsMutex); outsend = outstorage(NULL, FALSE); mutex_unlock(&fputsMutex); if (outsend) { /* requires outsend to be copied by the caller, because it is freed immediately */ pfcn(outsend, userptr); tfree(outsend); } } ps_exited = TRUE; } /* remove the first entry of a wordlist, but keep wl->wl_word */ void wl_delete_first(wordlist **wlstart, wordlist **wlend) { wordlist *wl_temp; if (!(*wlstart)) return; if ((*wlstart) && !((*wlstart)->wl_next)) { tfree(*wlstart); /* keep wlstart->wl_word */ (*wlstart) = NULL; (*wlend) = NULL; return; } wl_temp = (*wlstart)->wl_next; wl_temp->wl_prev = NULL; tfree(*wlstart); /* keep wlstart->wl_word */ (*wlstart) = wl_temp; } /* create a wordlist FIFO using global static variables wlstart and wlend. wordin has to be malloced on the heap */ char* outstorage(char* wordin, bool write) { char *wordout = NULL; if(write) wl_append_word(&wlstart, &wlend, wordin); else if (wlstart) { wordout = wlstart->wl_word; wl_delete_first(&wlstart, &wlend); } return wordout; } #endif /* New progress report to statfcn(). An update occurs only every DELTATIME milliseconds. */ #define DELTATIME 150 void SetAnalyse( char * Analyse, /*in: analysis type */ int DecaPercent /*in: 10 times the progress [%]*/ /*HWND hwAnalyse, in: global handle to analysis window */ ) { /* If caller has sent NULL address for statfcn */ if (nostatuswanted) return; #ifdef HAVE_FTIME static int OldPercent = -2; /* Previous progress value */ static char OldAn[128]; /* Previous analysis type */ char* s; /* outputs to callback function */ static char olds[128]; /* previous output */ static struct timeb timebefore; /* previous time stamp */ struct timeb timenow; /* actual time stamp */ int diffsec, diffmillisec; /* differences actual minus prev. time stamp */ int result; /* return value from callback function */ CKTcircuit *ckt = NULL; if (ft_curckt) ckt = ft_curckt->ci_ckt; strcpy(OldAn, "?"); /* initial value */ if ((DecaPercent == OldPercent) && !strcmp(OldAn, Analyse)) return; /* get actual time */ ftime(&timenow); timediff(&timenow, &timebefore, &diffsec, &diffmillisec); s = TMALLOC(char, 128); if (!strcmp(Analyse, "tran")) { if (ckt && (ckt->CKTtime > ckt->CKTfinalTime - ckt->CKTmaxStep)) { sprintf(s, "--ready--"); result = statfcn(s, ng_ident, userptr); tfree(s); return; } } if (DecaPercent >= 1000){ /* Because CKTmaxStep may be smaller than 0.1%, we print only when CKTtime is large enough. */ if (!strcmp(Analyse, "tran") && ckt && (ckt->CKTtime < ckt->CKTfinalTime - ckt->CKTmaxStep)) { tfree(s); return; } sprintf( s, "--ready--"); result = statfcn(s, ng_ident, userptr); tfree(s); return; } /* info every one percent of progress: actual time, progress, to catch linearity of progress of simulation */ if (ft_ngdebug && !strcmp(Analyse, "tran")) if ((int)((double)DecaPercent/10.) > (int)((double)OldPercent/10.)) { printf("%3.1f%% percent progress after %4.2f seconds.\n", (double)DecaPercent/10., seconds()); } OldPercent = DecaPercent; /* output only into hwAnalyse window and if time elapsed is larger than DELTATIME given value, or if analysis has changed, else return */ if ((diffsec > 0) || (diffmillisec > DELTATIME) || strcmp(OldAn, Analyse)) { if (DecaPercent < 0) { sprintf( s, "--ready--"); } else if (DecaPercent == 0) { sprintf( s, "%s", Analyse); } else if (!strcmp(Analyse, "shooting")) { sprintf( s, "%s: %d", Analyse, DecaPercent); } else { sprintf( s, "%s: %3.1f%%", Analyse, (double)DecaPercent/10.); } timebefore.dstflag = timenow.dstflag; timebefore.millitm = timenow.millitm; timebefore.time = timenow.time; timebefore.timezone = timenow.timezone; /* info when previous analysis period has finished */ if (strcmp(OldAn, Analyse)) { if (ft_ngdebug && (strcmp(OldAn, ""))) printf("%s finished after %4.2f seconds.\n", OldAn, seconds()); strncpy(OldAn, Analyse, 127); } /* ouput only after a change */ if (strcmp(olds, s)) result = statfcn(s, ng_ident, userptr); strcpy(olds, s); } tfree(s); #else char* s; int result; static bool havesent = FALSE; if (!havesent) { s = copy("No usage info available"); result = statfcn(s, ng_ident, userptr); tfree(s); havesent = TRUE; } #endif } /* a dll or shared library should never exit, if loaded dynamically, but ask for graceful shutdown (e.g. being detached) via a callback function */ ATTRIBUTE_NORETURN void shared_exit(int status) { /* alert caller to detach dll (if we are in the main thread), or detach after a short sleep, if immediate is true, and we are in a worker thread */ if (immediate) #if defined(__MINGW32__) || defined(_MSC_VER) Sleep(100); // va: windows native #else usleep(10000); #endif /* status >= 1000 tells us that we react on command 'quit' hand this information over to caller */ if (status >= 1000) { coquit = TRUE; fprintf(stdout, "\nNote: 'quit' asks for detaching ngspice.dll.\n"); status -= 1000; } else { coquit = FALSE; fprintf(stderr, "Error: ngspice.dll cannot recover and awaits to be detached\n"); } #ifndef low_latency // set flag to stop the printsend thread printstopp = TRUE; // leave this thread for 100ms to stop the printsend thread #if defined __MINGW32__ || defined _MSC_VER Sleep(100); #else usleep(100000); #endif // send the final error message already caught in printsend() if (outsend) { /* requires outsend to be copied by the caller, because it is freed immediately */ pfcn(outsend, ng_ident, userptr); tfree(outsend); } #endif // if we are in a worker thread, we exit it here // detaching then has to be done explicitely by the caller if (fl_running && !fl_exited) { fl_exited = TRUE; bgtr(fl_exited, ng_ident, userptr); // set a flag that ngspice wants to be detached ngexit(status, FALSE, coquit, ng_ident, userptr); // finish and exit the worker thread #ifdef HAVE_LIBPTHREAD pthread_exit(NULL); #elif defined _MSC_VER || defined __MINGW32__ _endthreadex(1); #endif } // set a flag in caller to detach ngspice.dll ngexit(status, immediate, coquit, ng_ident, userptr); // jump back to finish the calling function if (!intermj) longjmp(errbufm,1); /* jump back to ngSpice_Circ() */ else longjmp(errbufc,1); /* jump back to ngSpice_Command() */ } static int len = 0; static pvecvaluesall curvecvalsall; #ifdef olld static pvecvalues* curvecvals; static char type_name[128]; int sh_ExecutePerLoop_old(void) { struct dvec *d; int i, veclen; struct plot *pl = plot_cur; /* return immediately if callback not wanted */ if (nodatawanted) return 2; /* reset data structure if there is a change in plot type */ if (strcmp(type_name, pl->pl_typename)) { if (curvecvals) { for (i = 0; i < len; i++) tfree(curvecvals[i]); tfree(curvecvals); } len = 0; memset(type_name, 0, 128); } /* initialize new for every new plot, e.g. if changed from op1 to ac1 or from tran1 to tran2 */ if ((pl) && (len == 0)) { strcpy(type_name, pl->pl_typename); for (d = pl->pl_dvecs; d; d = d->v_next) len++; if (len == 0) { fprintf(cp_err, "Error: There are no vectors currently active.\n"); return 1; } /* allocate memory for the number of vectors */ curvecvals = TMALLOC(pvecvalues, len); /* allocate memory for each entry and add vector names once */ for (d = pl->pl_dvecs, i = 0; d; d = d->v_next, i++) { curvecvals[i] = TMALLOC(vecvalues, 1); curvecvals[i]->name = copy(d->v_name); } } /* get the data of the last entry to the plot vector */ veclen = pl->pl_dvecs->v_length - 1; for (d = pl->pl_dvecs, i = 0; d; d = d->v_next, i++) { /* test if real */ if (d->v_flags & VF_REAL) { curvecvals[i]->is_complex = FALSE; curvecvals[i]->creal = d->v_realdata[veclen]; curvecvals[i]->cimag = 0.; } else { curvecvals[i]->is_complex = TRUE; curvecvals[i]->creal = d->v_compdata[veclen].cx_real; curvecvals[i]->cimag = d->v_compdata[veclen].cx_imag; } } /* now call the callback function to return the data to the caller */ if (!nodatawanted) // datfcn(curvecvals, len, ng_ident, userptr); return 0; } #endif /* called each time a new data set is written to the output vectors */ int sh_ExecutePerLoop(void) { struct dvec *d; int i, veclen; // double testval; struct plot *pl = plot_cur; /* return immediately if callback not wanted */ if (nodatawanted) return 2; /* get the data of the last entry to the plot vector */ veclen = pl->pl_dvecs->v_length - 1; /* safeguard against vectors with 0 length (e.g. @c1[i] during ac simulation) */ if (veclen < 1) return 2; curvecvalsall->vecindex = veclen; for (d = pl->pl_dvecs, i = 0; d; d = d->v_next, i++) { /* test if real */ if (d->v_flags & VF_REAL) { curvecvalsall->vecsa[i]->is_complex = FALSE; // testval = d->v_realdata[veclen]; curvecvalsall->vecsa[i]->creal = d->v_realdata[veclen]; curvecvalsall->vecsa[i]->cimag = 0.; } else { curvecvalsall->vecsa[i]->is_complex = TRUE; curvecvalsall->vecsa[i]->creal = d->v_compdata[veclen].cx_real; curvecvalsall->vecsa[i]->cimag = d->v_compdata[veclen].cx_imag; } } /* now call the callback function to return the data to the caller */ datfcn(curvecvalsall, len, ng_ident, userptr); return 0; } /* called once for a new plot from beginPlot() in outitf.c, after the vectors in ngspice for this plot have been set. Transfers vector information to the caller via callback datinitfcn() and sets transfer structure for use in sh_ExecutePerLoop() */ int sh_vecinit(runDesc *run) { struct dvec *d, *ds; int veccount, i; static pvecinfoall pvca = NULL; pvecinfo *pvc; /* return immediately if callback not wanted */ if (nodatainitwanted) return 2; cur_run = run; len = veccount = cur_run->numData; if (veccount == 0) { fprintf(cp_err, "Error: There are no vectors currently active.\n"); return 1; } /* delete the structs from the previous plot */ if (pvca) { for (i = 0; i < pvca->veccount; i++) tfree(pvca->vecs[i]); tfree(pvca->vecs); tfree(pvca); pvca = NULL; } pvc = TMALLOC(pvecinfo, veccount); ds = cur_run->runPlot->pl_scale; for (i = 0, d = cur_run->runPlot->pl_dvecs; i < veccount; i++, d = d->v_next) { pvc[i] = TMALLOC(vecinfo, 1); pvc[i]->number = i; pvc[i]->pdvec = (void*)d; pvc[i]->pdvecscale = (void*)ds; pvc[i]->vecname = d->v_name; pvc[i]->is_real = (d->v_flags & VF_REAL); } pvca = TMALLOC(vecinfoall, 1); // the plot pvca->title = cur_run->runPlot->pl_title; pvca->date = cur_run->runPlot->pl_date; pvca->name = cur_run->runPlot->pl_name; pvca->type = cur_run->runPlot->pl_typename; pvca->veccount = veccount; // the data pvca->vecs = pvc; /* now call the callback function to return the data to the caller */ datinitfcn(pvca, ng_ident, userptr); /* generate the data tranfer structure, data will be sent from sh_ExecutePerLoop() via datfcn() */ if (!curvecvalsall) { curvecvalsall = TMALLOC(vecvaluesall, 1); } else { for (i = 0; i < curvecvalsall->veccount; i++) tfree(curvecvalsall->vecsa[i]); tfree(curvecvalsall->vecsa); } curvecvalsall->veccount = veccount; curvecvalsall->vecsa = TMALLOC(pvecvalues, veccount); for (i = 0, d = cur_run->runPlot->pl_dvecs; i < veccount; i++, d = d->v_next) { curvecvalsall->vecsa[i] = TMALLOC(vecvalues,1); curvecvalsall->vecsa[i]->name = d->v_name; if (cieq(d->v_plot->pl_scale->v_name, d->v_name)) curvecvalsall->vecsa[i]->is_scale = TRUE; else curvecvalsall->vecsa[i]->is_scale = FALSE; } return 0; } /* issue callback to request external voltage data for source vname */ double getvsrcval(double time, char *vname) { double vval; if (!wantvdat) { fprintf(stderr, "Error: No callback supplied for source %s\n", vname); shared_exit(EXIT_BAD); return(EXIT_BAD); } else { /* callback fcn */ getvdat(&vval, time, vname, ng_ident, userptr); return vval; } } /* issue callback to request external current data for source iname*/ double getisrcval(double time, char *iname) { double ival; if (!wantidat) { fprintf(stderr, "Error: No callback supplied for source %s\n", iname); shared_exit(EXIT_BAD); return(EXIT_BAD); } else { /* callback fcn */ getidat(&ival, time, iname, ng_ident, userptr); return ival; } } /* return value 1: continue with new time step, ckt->CKTtime + ckt->CKTdelta will be done next automatically. For time synchronization we may choose our own ckt->CKTdelta, being smaller than the one suggested by ngspice. return value 0: will redo the most recent time step. We may subtract olddelta and continue with new ckt-CKTdelta. This is necessary if non-convergence has been detected (redostep = 1). The newly suggested ckt-CKTdelta has already been divided by 8. This is also enforced if the truncation error is too large. The newly suggested ckt-CKTdelta may be accompanied by an increase of integration order. For time synchronization, if the actual, converged ckt-CKTtime is beyond the optimum common time, we subtract olddelta and then choose our own ckt->CKTdelta, being smaller than olddelta. Whereas redostep is set by ngspice, the user may decide via the callback function, to redo the most recent step because of other reasons. This is accomplished by returning a 1 with the callback function. */ /* ckttime pointer to ckt->CKTtime, which already has been used trying to achieve convergence, after olddelta had been added in the previous step. cktdelta pointer to newly defined ckt->CKTdelta, e.g. by recognizing truncation errors olddelta old ckt->CKTdelta, has already been added in the previous step. finalt final time CKTfinaltime delmin minimum delta CKTdelmin redostep if 0, converged, if 1, either no convergence, need to redo with new ckt->CKTdelta or ckt->CKTdelta has been reduced by tuncation errors too large. rejected pointer to ckt->CKTstat->STATrejected, counts rejected time points. loc location of function call in dctran.c: 0: after breakpoint handling, 1: at end of for loop */ int sharedsync(double *pckttime, double *pcktdelta, double olddelta, double finalt, double delmin, int redostep, int *rejected, int loc) { /* standard procedure, cktdelta has been provided by ngspice */ if (!wantsync) { if (redostep) { *pckttime -= olddelta; (*rejected)++; return 1; } else return 0; /* synchronization required, to be done by changing cktdelta */ } else { if (redostep) { *pckttime -= olddelta; (*rejected)++; /* use cktdelta as suggested by ngspice or acquire new cktdelta via pointer pcktdelta in user supplied callback */ getsync(*pckttime, pcktdelta, olddelta, redostep, ng_ident, loc, userptr); /* never move beyond final time */ if (*pckttime + *pcktdelta > finalt) *pcktdelta = finalt - *pckttime - 1.1 * delmin; return 1; } else { /* Use cktdelta as suggested by ngspice or acquire new cktdelta via pointer pcktdelta in user supplied callback. Redo the previous step if return value from getsync is 1. */ int retval = getsync(*pckttime, pcktdelta, olddelta, redostep, ng_ident, loc, userptr); /* never move beyond final time */ if (*pckttime + *pcktdelta > finalt) *pcktdelta = finalt - *pckttime - 1.1 * delmin; /* user has decided to redo the step, ignoring redostep being set to 0 by ngspice. */ if (retval) { *pckttime -= olddelta; (*rejected)++; } return retval; } } } #ifdef XSPICE void shared_send_event(int index, double step, double dvalue, char *svalue, void *pvalue, int plen, int mode) { if(wantevtdata) sendevt(index, step, dvalue, svalue, pvalue, plen, mode, ng_ident, euserptr); return; } void shared_send_dict(int index, int no_of_nodes, char* name, char*type) { if (sendinitevt) sendinitevt(index, no_of_nodes, name, type, ng_ident, euserptr); } #endif tmpk8ny_4pz/src/conf.h0000644000175000017500000000054113546075722015045 0ustar carstencarsten#ifndef ngspice_CONF_H #define ngspice_CONF_H extern char Spice_Version[]; extern char Spice_Notice[]; extern char Spice_Build_Date[]; extern char Spice_Manual[]; extern char *Spice_Exec_Dir; extern char *Spice_Lib_Dir; extern char *Def_Editor; extern int AsciiRawFile; extern char *Bug_Addr; extern char *Spice_Host; extern char *Spiced_Log; #endif tmpk8ny_4pz/src/spinit.in0000644000175000017500000000155113546075722015607 0ustar carstencarsten* Standard ngspice init file alias exit quit alias acct rusage all set x11lineararcs *set rndseed=12 ** ascii rawfile ** *set filetype=ascii ** frontend debug output ** *set ngdebug ** asking after quit ** *set askquit ** set the number of threads in openmp ** default (if compiled with --enable-openmp) is: 2 *set num_threads=4 set interactive * step size is limited to TSTEP in tansient simulation set stepsizelimit strcmp __flag $program "ngspice" if $__flag = 0 * For SPICE2 POLYs, edit the below line to point to the location * of your codemodel. @XSPICEINIT@ codemodel @pkglibdir@/spice2poly.cm * The other codemodels @XSPICEINIT@ codemodel @pkglibdir@/analog.cm @XSPICEINIT@ codemodel @pkglibdir@/digital.cm @XSPICEINIT@ codemodel @pkglibdir@/xtradev.cm @XSPICEINIT@ codemodel @pkglibdir@/xtraevt.cm @XSPICEINIT@ codemodel @pkglibdir@/table.cm end unset __flag tmpk8ny_4pz/src/ngspice.txt0000644000175000017500000142263313546075722016153 0ustar carstencarstenSUBJECT: main TITLE: Table of Contents TEXT: H TEXT: H TEXT: H TEXT: H Important Notice: TEXT: H This manual is describing the original Spice3 code. It does TEXT: H not contain all the updates which have been added to ngspice TEXT: H over the last 10 years! Even if most of its content is still TEXT: H valid, it may be considered outdated. TEXT: H TEXT: H For updated information, please have a look at the actual TEXT: H ngspicexx-manual.pdf. TEXT: H TEXT: H TEXT: H TEXT: H SUBTOPIC: NGSPICE:INTRODUCTION SUBTOPIC: NGSPICE:CIRCUIT DESCRIPTION SUBTOPIC: NGSPICE:CIRCUIT ELEMENTS AND MODELS SUBTOPIC: NGSPICE:ANALYSES AND OUTPUT CONTROL SUBTOPIC: NGSPICE:INTERACTIVE INTERPRETER SUBTOPIC: NGSPICE:BIBLIOGRAPHY SUBTOPIC: NGSPICE:APPENDIX A SUBTOPIC: NGSPICE:APPENDIX B SUBJECT: INTRODUCTION TITLE: INTRODUCTION TEXT: H TEXT: H _1. _I_N_T_R_O_D_U_C_T_I_O_N TEXT: H TEXT: H TEXT: H SPICE is a general-purpose circuit simulation program TEXT: H for nonlinear dc, nonlinear transient, and linear ac ana- TEXT: H lyses. Circuits may contain resistors, capacitors, induc- TEXT: H tors, mutual inductors, independent voltage and current TEXT: H sources, four types of dependent sources, lossless and lossy TEXT: H transmission lines (two separate implementations), switches, TEXT: H uniform distributed RC lines, and the five most common sem- TEXT: H iconductor devices: diodes, BJTs, JFETs, MESFETs, and MOS- TEXT: H FETs. TEXT: H TEXT: H The SPICE3 version is based directly on SPICE 2G.6. TEXT: H While SPICE3 is being developed to include new features, it TEXT: H continues to support those capabilities and models which TEXT: H remain in extensive use in the SPICE2 program. TEXT: H TEXT: H SPICE has built-in models for the semiconductor dev- TEXT: H ices, and the user need specify only the pertinent model TEXT: H parameter values. The model for the BJT is based on the TEXT: H integral-charge model of Gummel and Poon; however, if the TEXT: H Gummel- Poon parameters are not specified, the model reduces TEXT: H to the simpler Ebers-Moll model. In either case, charge- TEXT: H storage effects, ohmic resistances, and a current-dependent TEXT: H output conductance may be included. The diode model can be TEXT: H used for either junction diodes or Schottky barrier diodes. TEXT: H The JFET model is based on the FET model of Shichman and TEXT: H Hodges. Six MOSFET models are implemented: MOS1 is TEXT: H described by a square-law I-V characteristic, MOS2 [1] is an TEXT: H analytical model, while MOS3 [1] is a semi-empirical model; TEXT: H MOS6 [2] is a simple analytic model accurate in the short- TEXT: H channel region; MOS4 [3, 4] and MOS5 [5] are the BSIM TEXT: H (Berkeley Short-channel IGFET Model) and BSIM2. MOS2, MOS3, TEXT: H and MOS4 include second-order effects such as channel-length TEXT: H modulation, subthreshold conduction, scattering-limited TEXT: H velocity saturation, small-size effects, and charge- TEXT: H controlled capacitances. SUBTOPIC: NGSPICE:TYPES OF ANALYSIS SUBTOPIC: NGSPICE:ANALYSIS AT DIFFERENT TEMPERATURES SUBTOPIC: NGSPICE:CONVERGENCE SUBJECT: TYPES OF ANALYSIS TITLE: TYPES OF ANALYSIS TEXT: H TEXT: H _1._1. _T_Y_P_E_S _O_F _A_N_A_L_Y_S_I_S TEXT: H SUBTOPIC: NGSPICE:DC Analysis SUBTOPIC: NGSPICE:AC SmallSignal Analysis SUBTOPIC: NGSPICE:Transient Analysis SUBTOPIC: NGSPICE:PoleZero Analysis SUBTOPIC: NGSPICE:SmallSignal Distortion Analysis SUBTOPIC: NGSPICE:Sensitivity Analysis SUBTOPIC: NGSPICE:Noise Analysis SUBJECT: DC Analysis TITLE: DC Analysis TEXT: H TEXT: H _1._1._1. _D_C _A_n_a_l_y_s_i_s TEXT: H TEXT: H TEXT: H The dc analysis portion of SPICE determines the dc TEXT: H operating point of the circuit with inductors shorted and TEXT: H capacitors opened. The dc analysis options are specified on TEXT: H the .DC, .TF, and .OP control lines. A dc analysis is TEXT: H automatically performed prior to a transient analysis to TEXT: H determine the transient initial conditions, and prior to an TEXT: H ac small-signal analysis to determine the linearized, TEXT: H small-signal models for nonlinear devices. If requested, TEXT: H the dc small-signal value of a transfer function (ratio of TEXT: H output variable to input source), input resistance, and out- TEXT: H put resistance is also computed as a part of the dc solu- TEXT: H tion. The dc analysis can also be used to generate dc TEXT: H transfer curves: a specified independent voltage or current TEXT: H source is stepped over a user-specified range and the dc TEXT: H output variables are stored for each sequential source TEXT: H value. TEXT: H SUBJECT: AC SmallSignal Analysis TITLE: AC Small-Signal Analysis TEXT: H TEXT: H _1._1._2. _A_C _S_m_a_l_l-_S_i_g_n_a_l _A_n_a_l_y_s_i_s TEXT: H TEXT: H TEXT: H The ac small-signal portion of SPICE computes the ac TEXT: H output variables as a function of frequency. The program TEXT: H first computes the dc operating point of the circuit and TEXT: H determines linearized, small-signal models for all of the TEXT: H nonlinear devices in the circuit. The resultant linear cir- TEXT: H cuit is then analyzed over a user-specified range of fre- TEXT: H quencies. The desired output of an ac small- signal TEXT: H analysis is usually a transfer function (voltage gain, tran- TEXT: H simpedance, etc). If the circuit has only one ac input, it TEXT: H is convenient to set that input to unity and zero phase, so TEXT: H that output variables have the same value as the transfer TEXT: H function of the output variable with respect to the input. TEXT: H SUBJECT: Transient Analysis TITLE: Transient Analysis TEXT: H TEXT: H _1._1._3. _T_r_a_n_s_i_e_n_t _A_n_a_l_y_s_i_s TEXT: H TEXT: H The transient analysis portion of SPICE computes the TEXT: H transient output variables as a function of time over a TEXT: H user-specified time interval. The initial conditions are TEXT: H automatically determined by a dc analysis. All sources TEXT: H which are not time dependent (for example, power supplies) TEXT: H are set to their dc value. The transient time interval is TEXT: H specified on a .TRAN control line. TEXT: H SUBJECT: PoleZero Analysis TITLE: Pole-Zero Analysis TEXT: H TEXT: H _1._1._4. _P_o_l_e-_Z_e_r_o _A_n_a_l_y_s_i_s TEXT: H TEXT: H TEXT: H The pole-zero analysis portion of SPICE computes the TEXT: H poles and/or zeros in the small-signal ac transfer function. TEXT: H The program first computes the dc operating point and then TEXT: H determines the linearized, small-signal models for all the TEXT: H nonlinear devices in the circuit. This circuit is then used TEXT: H to find the poles and zeros of the transfer function. TEXT: H TEXT: H Two types of transfer functions are allowed : one of TEXT: H the form (output voltage)/(input voltage) and the other of TEXT: H the form (output voltage)/(input current). These two types TEXT: H of transfer functions cover all the cases and one can find TEXT: H the poles/zeros of functions like input/output impedance and TEXT: H voltage gain. The input and output ports are specified as TEXT: H two pairs of nodes. TEXT: H TEXT: H The pole-zero analysis works with resistors, capaci- TEXT: H tors, inductors, linear-controlled sources, independent TEXT: H sources, BJTs, MOSFETs, JFETs and diodes. Transmission TEXT: H lines are not supported. TEXT: H TEXT: H The method used in the analysis is a sub-optimal numer- TEXT: H ical search. For large circuits it may take a considerable TEXT: H time or fail to find all poles and zeros. For some cir- TEXT: H cuits, the method becomes "lost" and finds an excessive TEXT: H number of poles or zeros. TEXT: H SUBJECT: SmallSignal Distortion Analysis TITLE: Small-Signal Distortion Analysis TEXT: H TEXT: H _1._1._5. _S_m_a_l_l-_S_i_g_n_a_l _D_i_s_t_o_r_t_i_o_n _A_n_a_l_y_s_i_s TEXT: H TEXT: H TEXT: H The distortion analysis portion of SPICE computes TEXT: H steady-state harmonic and intermodulation products for small TEXT: H input signal magnitudes. If signals of a single frequency TEXT: H are specified as the input to the circuit, the complex TEXT: H values of the second and third harmonics are determined at TEXT: H every point in the circuit. If there are signals of two TEXT: H frequencies input to the circuit, the analysis finds out the TEXT: H complex values of the circuit variables at the sum and TEXT: H difference of the input frequencies, and at the difference TEXT: H of the smaller frequency from the second harmonic of the TEXT: H larger frequency. TEXT: H TEXT: H Distortion analysis is supported for the following non- TEXT: H linear devices: diodes (DIO), BJT, JFET, MOSFETs (levels 1, TEXT: H 2, 3, 4/BSIM1, 5/BSIM2, and 6) and MESFETS. All linear dev- TEXT: H ices are automatically supported by distortion analysis. If TEXT: H there are switches present in the circuit, the analysis con- TEXT: H tinues to be accurate provided the switches do not change TEXT: H state under the small excitations used for distortion calcu- TEXT: H lations. TEXT: H SUBJECT: Sensitivity Analysis TITLE: Sensitivity Analysis TEXT: H TEXT: H _1._1._6. _S_e_n_s_i_t_i_v_i_t_y _A_n_a_l_y_s_i_s TEXT: H TEXT: H TEXT: H Spice3 will calculate either the DC operating-point TEXT: H sensitivity or the AC small-signal sensitivity of an output TEXT: H variable with respect to all circuit variables, including TEXT: H model parameters. Spice calculates the difference in an TEXT: H output variable (either a node voltage or a branch current) TEXT: H by perturbing each parameter of each device independently. TEXT: H Since the method is a numerical approximation, the results TEXT: H may demonstrate second order effects in highly sensitive TEXT: H parameters, or may fail to show very low but non-zero sensi- TEXT: H tivity. Further, since each variable is perturb by a small TEXT: H fraction of its value, zero-valued parameters are not analy- TEXT: H ized (this has the benefit of reducing what is usually a TEXT: H very large amount of data). TEXT: H SUBJECT: Noise Analysis TITLE: Noise Analysis TEXT: H TEXT: H _1._1._7. _N_o_i_s_e _A_n_a_l_y_s_i_s TEXT: H TEXT: H TEXT: H The noise analysis portion of SPICE does analysis TEXT: H device-generated noise for the given circuit. When provided TEXT: H with an input source and an output port, the analysis calcu- TEXT: H lates the noise contributions of each device (and each noise TEXT: H generator within the device) to the output port voltage. It TEXT: H also calculates the input noise to the circuit, equivalent TEXT: H to the output noise referred to the specified input source. TEXT: H This is done for every frequency point in a specified range TEXT: H - the calculated value of the noise corresponds to the spec- TEXT: H tral density of the circuit variable viewed as a stationary TEXT: H gaussian stochastic process. TEXT: H TEXT: H After calculating the spectral densities, noise TEXT: H analysis integrates these values over the specified fre- TEXT: H quency range to arrive at the total noise voltage/current TEXT: H (over this frequency range). This calculated value TEXT: H corresponds to the variance of the circuit variable viewed TEXT: H as a stationary gaussian process. SUBJECT: ANALYSIS AT DIFFERENT TEMPERATURES TITLE: ANALYSIS AT DIFFERENT TEMPERATURES TEXT: H TEXT: H _1._2. _A_N_A_L_Y_S_I_S _A_T _D_I_F_F_E_R_E_N_T _T_E_M_P_E_R_A_T_U_R_E_S TEXT: H TEXT: H TEXT: H All input data for SPICE is assumed to have been meas- TEXT: H o TEXT: H ured at a nominal temperature of 27 C, which can be changed TEXT: H by use of the TNOM parameter on the .OPTION control line. TEXT: H This value can further be overridden for any device which TEXT: H models temperature effects by specifying the TNOM parameter TEXT: H on the model itself. The circuit simulation is performed at TEXT: H o TEXT: H a temperature of 27 C, unless overridden by a TEMP parameter TEXT: H on the .OPTION control line. Individual instances may TEXT: H further override the circuit temperature through the specif- TEXT: H ication of a TEMP parameter on the instance. TEXT: H TEXT: H Temperature dependent support is provided for resis- TEXT: H tors, diodes, JFETs, BJTs, and level 1, 2, and 3 MOSFETs. TEXT: H BSIM (levels 4 and 5) MOSFETs have an alternate temperature TEXT: H dependency scheme which adjusts all of the model parameters TEXT: H before input to SPICE. For details of the BSIM temperature TEXT: H adjustment, see [6] and [7]. TEXT: H TEXT: H TEXT: H Temperature appears explicitly in the exponential terms TEXT: H of the BJT and diode model equations. In addition, satura- TEXT: H tion currents have a built-in temperature dependence. The TEXT: H temperature dependence of the saturation current in the BJT TEXT: H models is determined by: TEXT: H TEXT: H XTI TEXT: H |T | | E q(T T )| TEXT: H 1 g 1 0 TEXT: H I (T ) = I (T ) |--| exp|-----------| TEXT: H S 1 S 0 TEXT: H |T | |k (T - T )| TEXT: H 0 1 0 TEXT: H TEXT: H TEXT: H TEXT: H where k is Boltzmann's constant, q is the electronic TEXT: H charge, E is the energy gap which is a model parameter, TEXT: H G TEXT: H and XTI is the saturation current temperature exponent TEXT: H (also a model parameter, and usually equal to 3). TEXT: H TEXT: H TEXT: H TEXT: H The temperature dependence of forward and reverse beta TEXT: H is according to the formula: TEXT: H TEXT: H XTB TEXT: H |T | TEXT: H 1 TEXT: H B(T ) = B(T ) |--| TEXT: H 1 0 TEXT: H |T | TEXT: H 0 TEXT: H TEXT: H TEXT: H TEXT: H where T and T are in degrees Kelvin, and XTB is a TEXT: H 1 0 TEXT: H user-supplied model parameter. Temperature effects on TEXT: H beta are carried out by appropriate adjustment to the TEXT: H values of B , I , B , and I (spice model parameters TEXT: H F SE R SC TEXT: H BF, ISE, BR, and ISC, respectively). TEXT: H TEXT: H TEXT: H TEXT: H Temperature dependence of the saturation current in the TEXT: H junction diode model is determined by: TEXT: H TEXT: H XTI TEXT: H --- TEXT: H N TEXT: H |T | | E q(T T ) | TEXT: H 1 g 1 0 TEXT: H I (T ) = I (T ) |--| exp|-------------| TEXT: H S 1 S 0 TEXT: H |T | |N k (T - T )| TEXT: H 0 1 0 TEXT: H TEXT: H TEXT: H TEXT: H where N is the emission coefficient, which is a model TEXT: H parameter, and the other symbols have the same meaning TEXT: H as above. Note that for Schottky barrier diodes, the TEXT: H value of the saturation current temperature exponent, TEXT: H XTI, is usually 2. TEXT: H TEXT: H TEXT: H TEXT: H Temperature appears explicitly in the value of junction TEXT: H potential, U (in spice PHI), for all the device models. The TEXT: H temperature dependence is determined by: TEXT: H TEXT: H TEXT: H | N N | TEXT: H a d TEXT: H kT |------ | TEXT: H U(T) = -- log 2 TEXT: H q e |N (T) | TEXT: H i TEXT: H TEXT: H TEXT: H where k is Boltzmann's constant, q is the electronic TEXT: H charge, N is the acceptor impurity density, N is the TEXT: H a d TEXT: H donor impurity density, N is the intrinsic carrier con- TEXT: H i TEXT: H centration, and E is the energy gap. TEXT: H g TEXT: H TEXT: H TEXT: H TEXT: H Temperature appears explicitly in the value of surface TEXT: H mobility, M (or UO), for the MOSFET model. The temperature TEXT: H 0 TEXT: H dependence is determined by: TEXT: H TEXT: H TEXT: H M (T ) TEXT: H 0 0 TEXT: H M (T) = ------- TEXT: H 0 1.5 TEXT: H | T| TEXT: H |--| TEXT: H |T | TEXT: H 0 TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H The effects of temperature on resistors is modeled by TEXT: H the formula: TEXT: H TEXT: H TEXT: H 2 TEXT: H R(T) = R(T ) [1 + TC (T - T ) + TC (T - T ) ] TEXT: H 0 1 0 2 0 TEXT: H TEXT: H TEXT: H TEXT: H where T is the circuit temperature, T is the nominal TEXT: H 0 TEXT: H temperature, and TC and TC are the first- and second- TEXT: H 1 2 TEXT: H order temperature coefficients. TEXT: H SUBJECT: CONVERGENCE TITLE: CONVERGENCE TEXT: H TEXT: H _1._3. _C_O_N_V_E_R_G_E_N_C_E TEXT: H TEXT: H TEXT: H Both dc and transient solutions are obtained by an TEXT: H iterative process which is terminated when both of the fol- TEXT: H lowing conditions hold: TEXT: H TEXT: H TEXT: H 1) The nonlinear branch currents converge to within a TEXT: H tolerance of 0.1% or 1 picoamp (1.0e-12 Amp), whichever TEXT: H is larger. TEXT: H TEXT: H 2) The node voltages converge to within a tolerance of TEXT: H 0.1% or 1 microvolt (1.0e-6 Volt), whichever is larger. TEXT: H TEXT: H Although the algorithm used in SPICE has been found to TEXT: H be very reliable, in some cases it fails to converge to a TEXT: H solution. When this failure occurs, the program terminates TEXT: H the job. TEXT: H TEXT: H Failure to converge in dc analysis is usually due to an TEXT: H error in specifying circuit connections, element values, or TEXT: H model parameter values. Regenerative switching circuits or TEXT: H circuits with positive feedback probably will not converge TEXT: H in the dc analysis unless the OFF option is used for some of TEXT: H the devices in the feedback path, or the .NODESET control TEXT: H line is used to force the circuit to converge to the desired TEXT: H state. SUBJECT: CIRCUIT DESCRIPTION TITLE: CIRCUIT DESCRIPTION TEXT: H TEXT: H _2. _C_I_R_C_U_I_T _D_E_S_C_R_I_P_T_I_O_N SUBTOPIC: NGSPICE:GENERAL STRUCTURE AND CONVENTIONS SUBTOPIC: NGSPICE:TITLE LINE COMMENT LINES AND .END LINE SUBTOPIC: NGSPICE:DEVICE MODELS SUBTOPIC: NGSPICE:SUBCIRCUITS SUBTOPIC: NGSPICE:COMBINING FILES SUBJECT: GENERAL STRUCTURE AND CONVENTIONS TITLE: GENERAL STRUCTURE AND CONVENTIONS TEXT: H TEXT: H _2._1. _G_E_N_E_R_A_L _S_T_R_U_C_T_U_R_E _A_N_D _C_O_N_V_E_N_T_I_O_N_S TEXT: H TEXT: H TEXT: H The circuit to be analyzed is described to SPICE by a TEXT: H set of element lines, which define the circuit topology and TEXT: H element values, and a set of control lines, which define the TEXT: H model parameters and the run controls. The first line in TEXT: H the input file must be the title, and the last line must be TEXT: H ".END". The order of the remaining lines is arbitrary TEXT: H (except, of course, that continuation lines must immediately TEXT: H follow the line being continued). TEXT: H TEXT: H Each element in the circuit is specified by an element TEXT: H line that contains the element name, the circuit nodes to TEXT: H which the element is connected, and the values of the param- TEXT: H eters that determine the electrical characteristics of the TEXT: H element. The first letter of the element name specifies the TEXT: H element type. The format for the SPICE element types is TEXT: H given in what follows. The strings XXXXXXX, YYYYYYY, and TEXT: H ZZZZZZZ denote arbitrary alphanumeric strings. For example, TEXT: H a resistor name must begin with the letter R and can contain TEXT: H one or more characters. Hence, R, R1, RSE, ROUT, and TEXT: H R3AC2ZY are valid resistor names. Details of each type of TEXT: H device are supplied in a following section. TEXT: H TEXT: H Fields on a line are separated by one or more blanks, a TEXT: H comma, an equal ('=') sign, or a left or right parenthesis; TEXT: H extra spaces are ignored. A line may be continued by enter- TEXT: H ing a '+' (plus) in column 1 of the following line; SPICE TEXT: H continues reading beginning with column 2. TEXT: H TEXT: H A name field must begin with a letter (A through Z) and TEXT: H cannot contain any delimiters. TEXT: H TEXT: H TEXT: H A number field may be an integer field (12, -44), a TEXT: H floating point field (3.14159), either an integer or float- TEXT: H ing point number followed by an integer exponent (1e-14, TEXT: H 2.65e3), or either an integer or a floating point number TEXT: H followed by one of the following scale factors: TEXT: H TEXT: H 12 9 6 3 -6 TEXT: H T = 10 G = 10 Meg = 10 K = 10 mil = 25.4 TEXT: H -3 -6 -9 -12 -15 TEXT: H m = 10 u (or M) = 10 n = 10 p = 10 f = 10 TEXT: H TEXT: H TEXT: H TEXT: H Letters immediately following a number that are not scale TEXT: H factors are ignored, and letters immediately following a TEXT: H scale factor are ignored. Hence, 10, 10V, 10Volts, and 10Hz TEXT: H all represent the same number, and M, MA, MSec, and MMhos TEXT: H all represent the same scale factor. Note that 1000, TEXT: H 1000.0, 1000Hz, 1e3, 1.0e3, 1KHz, and 1K all represent the TEXT: H same number. TEXT: H TEXT: H Nodes names may be arbitrary character strings. The TEXT: H datum (ground) node must be named '0'. Note the difference TEXT: H in SPICE3 where the nodes are treated as character strings TEXT: H and not evaluated as numbers, thus '0' and '00' are distinct TEXT: H nodes in SPICE3 but not in SPICE2. The circuit cannot con- TEXT: H tain a loop of voltage sources and/or inductors and cannot TEXT: H contain a cut-set of current sources and/or capacitors. TEXT: H Each node in the circuit must have a dc path to ground. TEXT: H Every node must have at least two connections except for TEXT: H transmission line nodes (to permit unterminated transmission TEXT: H lines) and MOSFET substrate nodes (which have two internal TEXT: H connections anyway). TEXT: H SUBJECT: TITLE LINE COMMENT LINES AND .END LINE TITLE: TITLE LINE, COMMENT LINES AND .END LINE TEXT: H TEXT: H _2._2. _T_I_T_L_E _L_I_N_E, _C_O_M_M_E_N_T _L_I_N_E_S _A_N_D ._E_N_D _L_I_N_E TEXT: H SUBTOPIC: NGSPICE:Title Line SUBTOPIC: NGSPICE:.END Line SUBTOPIC: NGSPICE:Comments SUBJECT: Title Line TITLE: Title Line TEXT: H TEXT: H _2._2._1. _T_i_t_l_e _L_i_n_e TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H POWER AMPLIFIER CIRCUIT TEXT: H TEST OF CAM CELL TEXT: H TEXT: H TEXT: H The title line must be the first in the input file. TEXT: H Its contents are printed verbatim as the heading for each TEXT: H section of output. TEXT: H TEXT: H SUBJECT: .END Line TITLE: .END Line TEXT: H TEXT: H _2._2._2. ._E_N_D _L_i_n_e TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H .END TEXT: H TEXT: H TEXT: H The "End" line must always be the last in the input TEXT: H file. Note that the period is an integral part of the TEXT: H name. TEXT: H TEXT: H TEXT: H SUBJECT: Comments TITLE: Comments TEXT: H TEXT: H _2._2._3. _C_o_m_m_e_n_t_s TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m: TEXT: H TEXT: H * TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H * RF=1K Gain should be 100 TEXT: H * Check open-loop gain and phase margin TEXT: H TEXT: H TEXT: H The asterisk in the first column indicates that TEXT: H this line is a comment line. Comment lines may be TEXT: H placed anywhere in the circuit description. Note that TEXT: H SPICE3 also considers any line with leading white space TEXT: H to be a comment. TEXT: H TEXT: H SUBJECT: DEVICE MODELS TITLE: DEVICE MODELS TEXT: H TEXT: H _2._3. _D_E_V_I_C_E _M_O_D_E_L_S TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H .MODEL MNAME TYPE(PNAME1=PVAL1 PNAME2=PVAL2 ... ) TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H .MODEL MOD1 NPN (BF=50 IS=1E-13 VBF=50) TEXT: H TEXT: H TEXT: H TEXT: H Most simple circuit elements typically require only a TEXT: H few parameter values. However, some devices (semiconductor TEXT: H devices in particular) that are included in SPICE require TEXT: H many parameter values. Often, many devices in a circuit are TEXT: H defined by the same set of device model parameters. For TEXT: H these reasons, a set of device model parameters is defined TEXT: H on a separate .MODEL line and assigned a unique model name. TEXT: H The device element lines in SPICE then refer to the model TEXT: H name. TEXT: H TEXT: H For these more complex device types, each device ele- TEXT: H ment line contains the device name, the nodes to which the TEXT: H device is connected, and the device model name. In addi- TEXT: H tion, other optional parameters may be specified for some TEXT: H devices: geometric factors and an initial condition (see TEXT: H the following section on Transistors and Diodes for more de- TEXT: H tails). TEXT: H TEXT: H MNAME in the above is the model name, and type is one TEXT: H of the following fifteen types: TEXT: H TEXT: H R Semiconductor resistor model TEXT: H C Semiconductor capacitor model TEXT: H SW Voltage controlled switch TEXT: H CSW Current controlled switch TEXT: H URC Uniform distributed RC model TEXT: H LTRA Lossy transmission line model TEXT: H D Diode model TEXT: H NPN NPN BJT model TEXT: H PNP PNP BJT model TEXT: H NJF N-channel JFET model TEXT: H PJF P-channel JFET model TEXT: H NMOS N-channel MOSFET model TEXT: H PMOS P-channel MOSFET model TEXT: H NMF N-channel MESFET model TEXT: H PMF P-channel MESFET model TEXT: H TEXT: H TEXT: H TEXT: H Parameter values are defined by appending the parameter TEXT: H name followed by an equal sign and the parameter value. TEXT: H Model parameters that are not given a value are assigned the TEXT: H default values given below for each model type. Models, TEXT: H model parameters, and default values are listed in the next TEXT: H section along with the description of device element lines. TEXT: H SUBJECT: SUBCIRCUITS TITLE: SUBCIRCUITS TEXT: H TEXT: H _2._4. _S_U_B_C_I_R_C_U_I_T_S TEXT: H TEXT: H TEXT: H A subcircuit that consists of SPICE elements can be TEXT: H defined and referenced in a fashion similar to device TEXT: H models. The subcircuit is defined in the input file by a TEXT: H grouping of element lines; the program then automatically TEXT: H inserts the group of elements wherever the subcircuit is TEXT: H referenced. There is no limit on the size or complexity of TEXT: H subcircuits, and subcircuits may contain other subcircuits. TEXT: H An example of subcircuit usage is given in Appendix A. TEXT: H TEXT: H SUBTOPIC: NGSPICE:.SUBCKT Line SUBTOPIC: NGSPICE:.ENDS Line SUBTOPIC: NGSPICE:Subcircuit Calls SUBJECT: .SUBCKT Line TITLE: .SUBCKT Line TEXT: H TEXT: H _2._4._1. ._S_U_B_C_K_T _L_i_n_e TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H .SUBCKT subnam N1 TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H .SUBCKT OPAMP 1 2 3 4 TEXT: H TEXT: H TEXT: H TEXT: H A circuit definition is begun with a .SUBCKT line. TEXT: H SUBNAM is the subcircuit name, and N1, N2, ... are the TEXT: H external nodes, which cannot be zero. The group of element TEXT: H lines which immediately follow the .SUBCKT line define the TEXT: H subcircuit. The last line in a subcircuit definition is the TEXT: H .ENDS line (see below). Control lines may not appear within TEXT: H a subcircuit definition; however, subcircuit definitions TEXT: H may contain anything else, including other subcircuit defin- TEXT: H itions, device models, and subcircuit calls (see below). TEXT: H Note that any device models or subcircuit definitions TEXT: H included as part of a subcircuit definition are strictly TEXT: H local (i.e., such models and definitions are not known out- TEXT: H side the subcircuit definition). Also, any element nodes TEXT: H not included on the .SUBCKT line are strictly local, with TEXT: H the exception of 0 (ground) which is always global. TEXT: H TEXT: H SUBJECT: .ENDS Line TITLE: .ENDS Line TEXT: H TEXT: H _2._4._2. ._E_N_D_S _L_i_n_e TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H .ENDS TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H .ENDS OPAMP TEXT: H TEXT: H TEXT: H The "Ends" line must be the last one for any sub- TEXT: H circuit definition. The subcircuit name, if included, TEXT: H indicates which subcircuit definition is being terminat- TEXT: H ed; if omitted, all subcircuits being defined are ter- TEXT: H minated. The name is needed only when nested subcircuit TEXT: H definitions are being made. TEXT: H TEXT: H TEXT: H SUBJECT: Subcircuit Calls TITLE: Subcircuit Calls TEXT: H TEXT: H _2._4._3. _S_u_b_c_i_r_c_u_i_t _C_a_l_l_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H XYYYYYYY N1 SUBNAM TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H X1 2 4 17 3 1 MULTI TEXT: H TEXT: H TEXT: H Subcircuits are used in SPICE by specifying TEXT: H pseudo-elements beginning with the letter X, followed by TEXT: H the circuit nodes to be used in expanding the subcir- TEXT: H cuit. TEXT: H TEXT: H SUBJECT: COMBINING FILES TITLE: COMBINING FILES: .INCLUDE LINES TEXT: H TEXT: H _2._5. _C_O_M_B_I_N_I_N_G _F_I_L_E_S: ._I_N_C_L_U_D_E _L_I_N_E_S TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H .INCLUDE _f_i_l_e_n_a_m_e TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H .INCLUDE /users/spice/common/wattmeter.cir TEXT: H TEXT: H TEXT: H Frequently, portions of circuit descriptions will be TEXT: H reused in several input files, particularly with common TEXT: H models and subcircuits. In any spice input file, the TEXT: H ".include" line may be used to copy some other file as if TEXT: H that second file appeared in place of the ".include" line in TEXT: H the original file. There is no restriction on the file name TEXT: H imposed by spice beyond those imposed by the local operating TEXT: H system. SUBJECT: CIRCUIT ELEMENTS AND MODELS TITLE: CIRCUIT ELEMENTS AND MODELS TEXT: H TEXT: H _3. _C_I_R_C_U_I_T _E_L_E_M_E_N_T_S _A_N_D _M_O_D_E_L_S TEXT: H TEXT: H TEXT: H Data fields that are enclosed in less-than and TEXT: H greater-than signs ('< >') are optional. All indicated TEXT: H punctuation (parentheses, equal signs, etc.) is optional but TEXT: H indicate the presence of any delimiter. Further, future TEXT: H implementations may require the punctuation as stated. A TEXT: H consistent style adhering to the punctuation shown here TEXT: H makes the input easier to understand. With respect to TEXT: H branch voltages and currents, SPICE uniformly uses the asso- TEXT: H ciated reference convention (current flows in the direction TEXT: H of voltage drop). SUBTOPIC: NGSPICE:ELEMENTARY DEVICES SUBTOPIC: NGSPICE:VOLTAGE AND CURRENT SOURCES SUBTOPIC: NGSPICE:TRANSMISSION LINES SUBTOPIC: NGSPICE:TRANSISTORS AND DIODES SUBJECT: ELEMENTARY DEVICES TITLE: ELEMENTARY DEVICES TEXT: H TEXT: H _3._1. _E_L_E_M_E_N_T_A_R_Y _D_E_V_I_C_E_S TEXT: H SUBTOPIC: NGSPICE:Resistors SUBTOPIC: NGSPICE:Semiconductor Resistors SUBTOPIC: NGSPICE:Semiconductor Resistor Model SUBTOPIC: NGSPICE:Capacitors SUBTOPIC: NGSPICE:Semiconductor Capacitors SUBTOPIC: NGSPICE:Semiconductor Capacitor Model SUBTOPIC: NGSPICE:Inductors SUBTOPIC: NGSPICE:Coupled Inductors SUBTOPIC: NGSPICE:Switches SUBTOPIC: NGSPICE:Switch Model SUBJECT: Resistors TITLE: Resistors TEXT: H TEXT: H _3._1._1. _R_e_s_i_s_t_o_r_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H RXXXXXXX N1 N2 VALUE TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H R1 1 2 100 TEXT: H RC1 12 17 1K TEXT: H TEXT: H TEXT: H N1 and N2 are the two element nodes. VALUE is the TEXT: H resistance (in ohms) and may be positive or negative but not TEXT: H zero. TEXT: H TEXT: H SUBJECT: Semiconductor Resistors TITLE: Semiconductor Resistors TEXT: H TEXT: H _3._1._2. _S_e_m_i_c_o_n_d_u_c_t_o_r _R_e_s_i_s_t_o_r_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H RXXXXXXX N1 N2 TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H RLOAD 2 10 10K TEXT: H RMOD 3 7 RMODEL L=10u W=1u TEXT: H TEXT: H TEXT: H TEXT: H This is the more general form of the resistor presented TEXT: H in section 6.1, and allows the modeling of temperature TEXT: H effects and for the calculation of the actual resistance TEXT: H value from strictly geometric information and the specifica- TEXT: H tions of the process. If VALUE is specified, it overrides TEXT: H the geometric information and defines the resistance. If TEXT: H MNAME is specified, then the resistance may be calculated TEXT: H from the process information in the model MNAME and the TEXT: H given LENGTH and WIDTH. If VALUE is not specified, then TEXT: H MNAME and LENGTH must be specified. If WIDTH is not speci- TEXT: H fied, then it is taken from the default width given in the TEXT: H model. The (optional) TEMP value is the temperature at TEXT: H which this device is to operate, and overrides the tempera- TEXT: H ture specification on the .OPTION control line. TEXT: H TEXT: H SUBJECT: Semiconductor Resistor Model TITLE: Semiconductor Resistor Model (R) TEXT: H TEXT: H _3._1._3. _S_e_m_i_c_o_n_d_u_c_t_o_r _R_e_s_i_s_t_o_r _M_o_d_e_l (_R) TEXT: H TEXT: H TEXT: H The resistor model consists of process-related device TEXT: H data that allow the resistance to be calculated from TEXT: H geometric information and to be corrected for temperature. TEXT: H The parameters available are: TEXT: H TEXT: H name parameter units default example TEXT: H TEXT: H o TEXT: H TC1 first order temperature coeff. Z/ C 0.0 - TEXT: H o 2 TEXT: H TC2 second order temperature coeff. Z/ C 0.0 - TEXT: H RSH sheet resistance Z/[] - 50 TEXT: H DEFW default width meters 1e-6 2e-6 TEXT: H NARROW narrowing due to side etching meters 0.0 1e-7 TEXT: H o TEXT: H TNOM parameter measurement temperature C 27 50 TEXT: H TEXT: H TEXT: H TEXT: H The sheet resistance is used with the narrowing parame- TEXT: H ter and L and W from the resistor device to determine the TEXT: H nominal resistance by the formula TEXT: H TEXT: H L - NARROW TEXT: H R = RSH ---------- TEXT: H W - NARROW TEXT: H TEXT: H DEFW is used to supply a default value for W if one is not TEXT: H specified for the device. If either RSH or L is not speci- TEXT: H fied, then the standard default resistance value of 1k Z is TEXT: H used. TNOM is used to override the circuit-wide value given TEXT: H on the .OPTIONS control line where the parameters of this TEXT: H model have been measured at a different temperature. After TEXT: H the nominal resistance is calculated, it is adjusted for TEXT: H temperature by the formula: TEXT: H TEXT: H 2 TEXT: H R(T) = R(T ) [1 + TC1 (T - T ) + TC2 (T-T ) ] TEXT: H 0 0 0 TEXT: H TEXT: H TEXT: H SUBJECT: Capacitors TITLE: Capacitors TEXT: H TEXT: H _3._1._4. _C_a_p_a_c_i_t_o_r_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H CXXXXXXX N+ N- VALUE TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H CBYP 13 0 1UF TEXT: H COSC 17 23 10U IC=3V TEXT: H TEXT: H TEXT: H N+ and N- are the positive and negative element TEXT: H nodes, respectively. VALUE is the capacitance in TEXT: H Farads. TEXT: H TEXT: H TEXT: H The (optional) initial condition is the initial (time- TEXT: H zero) value of capacitor voltage (in Volts). Note that the TEXT: H initial conditions (if any) apply 'only' if the UIC option TEXT: H is specified on the .TRAN control line. TEXT: H TEXT: H SUBJECT: Semiconductor Capacitors TITLE: Semiconductor Capacitors TEXT: H TEXT: H _3._1._5. _S_e_m_i_c_o_n_d_u_c_t_o_r _C_a_p_a_c_i_t_o_r_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H CXXXXXXX N1 N2 TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H CLOAD 2 10 10P TEXT: H CMOD 3 7 CMODEL L=10u W=1u TEXT: H TEXT: H TEXT: H TEXT: H This is the more general form of the Capacitor TEXT: H presented in section 6.2, and allows for the calculation of TEXT: H the actual capacitance value from strictly geometric infor- TEXT: H mation and the specifications of the process. If VALUE is TEXT: H specified, it defines the capacitance. If MNAME is speci- TEXT: H fied, then the capacitance is calculated from the process TEXT: H information in the model MNAME and the given LENGTH and TEXT: H WIDTH. If VALUE is not specified, then MNAME and LENGTH TEXT: H must be specified. If WIDTH is not specified, then it is TEXT: H taken from the default width given in the model. Either TEXT: H VALUE or MNAME, LENGTH, and WIDTH may be specified, but not TEXT: H both sets. TEXT: H TEXT: H SUBJECT: Semiconductor Capacitor Model TITLE: Semiconductor Capacitor Model (C) TEXT: H TEXT: H _3._1._6. _S_e_m_i_c_o_n_d_u_c_t_o_r _C_a_p_a_c_i_t_o_r _M_o_d_e_l (_C) TEXT: H TEXT: H TEXT: H The capacitor model contains process information that TEXT: H may be used to compute the capacitance from strictly TEXT: H geometric information. TEXT: H TEXT: H TEXT: H TEXT: H name parameter units default example TEXT: H TEXT: H 2 TEXT: H CJ junction bottom capacitance F/meters - 5e-5 TEXT: H CJSW junction sidewall capacitance F/meters - 2e-11 TEXT: H DEFW default device width meters 1e-6 2e-6 TEXT: H NARROW narrowing due to side etching meters 0.0 1e-7 TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H The capacitor has a capacitance computed as TEXT: H TEXT: H CAP = CJ (LENGTH - NARROW) (WIDTH - NARROW) + 2 CJSW (LENGTH + WIDTH - 2 NARROW) TEXT: H TEXT: H SUBJECT: Inductors TITLE: Inductors TEXT: H TEXT: H _3._1._7. _I_n_d_u_c_t_o_r_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H LYYYYYYY N+ N- VALUE TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H LLINK 42 69 1UH TEXT: H LSHUNT 23 51 10U IC=15.7MA TEXT: H TEXT: H TEXT: H N+ and N- are the positive and negative element TEXT: H nodes, respectively. VALUE is the inductance in Hen- TEXT: H ries. TEXT: H TEXT: H TEXT: H The (optional) initial condition is the initial (time- TEXT: H zero) value of inductor current (in Amps) that flows from TEXT: H N+, through the inductor, to N-. Note that the initial con- TEXT: H ditions (if any) apply only if the UIC option is specified TEXT: H on the .TRAN analysis line. TEXT: H TEXT: H SUBJECT: Coupled Inductors TITLE: Coupled (Mutual) Inductors TEXT: H TEXT: H _3._1._8. _C_o_u_p_l_e_d (_M_u_t_u_a_l) _I_n_d_u_c_t_o_r_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H KXXXXXXX LYYYYYYY LZZZZZZZ VALUE TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H K43 LAA LBB 0.999 TEXT: H KXFRMR L1 L2 0.87 TEXT: H TEXT: H TEXT: H LYYYYYYY and LZZZZZZZ are the names of the two cou- TEXT: H pled inductors, and VALUE is the coefficient of cou- TEXT: H pling, K, which must be greater than 0 and less than or TEXT: H equal to 1. Using the 'dot' convention, place a 'dot' TEXT: H on the first node of each inductor. TEXT: H TEXT: H TEXT: H SUBJECT: Switches TITLE: Switches TEXT: H TEXT: H _3._1._9. _S_w_i_t_c_h_e_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H SXXXXXXX N+ N- NC+ NC- MODEL TEXT: H WYYYYYYY N+ N- VNAM MODEL TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H s1 1 2 3 4 switch1 ON TEXT: H s2 5 6 3 0 sm2 off TEXT: H Switch1 1 2 10 0 smodel1 TEXT: H w1 1 2 vclock switchmod1 TEXT: H W2 3 0 vramp sm1 ON TEXT: H wreset 5 6 vclck lossyswitch OFF TEXT: H TEXT: H TEXT: H Nodes 1 and 2 are the nodes between which the TEXT: H switch terminals are connected. The model name is man- TEXT: H datory while the initial conditions are optional. For TEXT: H the voltage controlled switch, nodes 3 and 4 are the po- TEXT: H sitive and negative controlling nodes respectively. For TEXT: H the current controlled switch, the controlling current TEXT: H is that through the specified voltage source. The TEXT: H direction of positive controlling current flow is from TEXT: H the positive node, through the source, to the negative TEXT: H node. TEXT: H TEXT: H TEXT: H SUBJECT: Switch Model TITLE: Switch Model (SW/CSW) TEXT: H TEXT: H _3._1._1_0. _S_w_i_t_c_h _M_o_d_e_l (_S_W/_C_S_W) TEXT: H TEXT: H TEXT: H The switch model allows an almost ideal switch to be TEXT: H described in SPICE. The switch is not quite ideal, in that TEXT: H the resistance can not change from 0 to infinity, but must TEXT: H always have a finite positive value. By proper selection of TEXT: H the on and off resistances, they can be effectively zero and TEXT: H infinity in comparison to other circuit elements. The TEXT: H parameters available are: TEXT: H TEXT: H name parameter units default switch TEXT: H TEXT: H VT threshold voltage Volts 0.0 S TEXT: H IT threshold current Amps 0.0 W TEXT: H VH hysteresis voltage Volts 0.0 S TEXT: H IH hysteresis current Amps 0.0 W TEXT: H RON on resistance Z 1.0 both TEXT: H ROFF off resistance Z 1/GMIN* both TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H *(See the .OPTIONS control line for a description of TEXT: H GMIN, its default value results in an off-resistance of TEXT: H 1.0e+12 ohms.) TEXT: H TEXT: H TEXT: H The use of an ideal element that is highly nonlinear TEXT: H such as a switch can cause large discontinuities to occur in TEXT: H the circuit node voltages. A rapid change such as that TEXT: H associated with a switch changing state can cause numerical TEXT: H roundoff or tolerance problems leading to erroneous results TEXT: H or timestep difficulties. The user of switches can improve TEXT: H the situation by taking the following steps: TEXT: H TEXT: H First, it is wise to set ideal switch impedances just TEXT: H high or low enough to be negligible with respect to other TEXT: H circuit elements. Using switch impedances that are close to TEXT: H "ideal" in all cases aggravates the problem of discontinui- TEXT: H ties mentioned above. Of course, when modeling real devices TEXT: H such as MOSFETS, the on resistance should be adjusted to a TEXT: H realistic level depending on the size of the device being TEXT: H modeled. TEXT: H TEXT: H If a wide range of ON to OFF resistance must be used in TEXT: H the switches (ROFF/RON >1e+12), then the tolerance on errors TEXT: H allowed during transient analysis should be decreased by TEXT: H using the .OPTIONS control line and specifying TRTOL to be TEXT: H less than the default value of 7.0. When switches are TEXT: H placed around capacitors, then the option CHGTOL should also TEXT: H be reduced. Suggested values for these two options are 1.0 TEXT: H and 1e-16 respectively. These changes inform SPICE3 to be TEXT: H more careful around the switch points so that no errors are TEXT: H made due to the rapid change in the circuit. TEXT: H SUBJECT: VOLTAGE AND CURRENT SOURCES TITLE: VOLTAGE AND CURRENT SOURCES TEXT: H TEXT: H _3._2. _V_O_L_T_A_G_E _A_N_D _C_U_R_R_E_N_T _S_O_U_R_C_E_S TEXT: H SUBTOPIC: NGSPICE:Independent Sources SUBTOPIC: NGSPICE:Linear Dependent Sources SUBTOPIC: NGSPICE:Nonlinear Dependent Sources SUBJECT: Independent Sources TITLE: Independent Sources TEXT: H TEXT: H _3._2._1. _I_n_d_e_p_e_n_d_e_n_t _S_o_u_r_c_e_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H VXXXXXXX N+ N- < DC/TRAN VALUE> >> TEXT: H + >> >> TEXT: H IYYYYYYY N+ N- < DC/TRAN VALUE> >> TEXT: H + >> >> TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H VCC 10 0 DC 6 TEXT: H VIN 13 2 0.001 AC 1 SIN(0 1 1MEG) TEXT: H ISRC 23 21 AC 0.333 45.0 SFFM(0 1 10K 5 1K) TEXT: H VMEAS 12 9 TEXT: H VCARRIER 1 0 DISTOF1 0.1 -90.0 TEXT: H VMODULATOR 2 0 DISTOF2 0.01 TEXT: H IIN1 1 5 AC 1 DISTOF1 DISTOF2 0.001 TEXT: H TEXT: H TEXT: H N+ and N- are the positive and negative nodes, respec- TEXT: H tively. Note that voltage sources need not be grounded. TEXT: H Positive current is assumed to flow from the positive node, TEXT: H through the source, to the negative node. A current source TEXT: H of positive value forces current to flow out of the N+ node, TEXT: H through the source, and into the N- node. Voltage sources, TEXT: H in addition to being used for circuit excitation, are the TEXT: H 'ammeters' for SPICE, that is, zero valued voltage sources TEXT: H may be inserted into the circuit for the purpose of measur- TEXT: H ing current. They of course have no effect on circuit TEXT: H operation since they represent short-circuits. TEXT: H TEXT: H TEXT: H DC/TRAN is the dc and transient analysis value of the TEXT: H source. If the source value is zero both for dc and tran- TEXT: H sient analyses, this value may be omitted. If the source TEXT: H value is time-invariant (e.g., a power supply), then the TEXT: H value may optionally be preceded by the letters DC. TEXT: H TEXT: H TEXT: H ACMAG is the ac magnitude and ACPHASE is the ac phase. TEXT: H The source is set to this value in the ac analysis. If TEXT: H ACMAG is omitted following the keyword AC, a value of unity TEXT: H is assumed. If ACPHASE is omitted, a value of zero is TEXT: H assumed. If the source is not an ac small-signal input, the TEXT: H keyword AC and the ac values are omitted. TEXT: H TEXT: H TEXT: H DISTOF1 and DISTOF2 are the keywords that specify that TEXT: H the independent source has distortion inputs at the frequen- TEXT: H cies F1 and F2 respectively (see the description of the TEXT: H .DISTO control line). The keywords may be followed by an TEXT: H optional magnitude and phase. The default values of the TEXT: H magnitude and phase are 1.0 and 0.0 respectively. TEXT: H TEXT: H TEXT: H Any independent source can be assigned a time-dependent TEXT: H value for transient analysis. If a source is assigned a TEXT: H time-dependent value, the time-zero value is used for dc TEXT: H analysis. There are five independent source functions: TEXT: H pulse, exponential, sinusoidal, piece-wise linear, and TEXT: H single-frequency FM. If parameters other than source values TEXT: H are omitted or set to zero, the default values shown are TEXT: H assumed. (TSTEP is the printing increment and TSTOP is the TEXT: H final time (see the .TRAN control line for explanation)). TEXT: H TEXT: H SUBTOPIC: NGSPICE:Pulse SUBTOPIC: NGSPICE:Sinusoidal SUBTOPIC: NGSPICE:Exponential SUBTOPIC: NGSPICE:PieceWise Linear SUBTOPIC: NGSPICE:SingleFrequency FM SUBJECT: Pulse TITLE: Pulse TEXT: H TEXT: H _3._2._1._1. _P_u_l_s_e TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H PULSE(V1 V2 TD TR TF PW PER) TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H VIN 3 0 PULSE(-1 1 2NS 2NS 2NS 50NS 100NS) TEXT: H TEXT: H TEXT: H TEXT: H parameter default value units TEXT: H ----------------------------------------------------- TEXT: H V1 (initial value) Volts or Amps TEXT: H V2 (pulsed value) Volts or Amps TEXT: H TD (delay time) 0.0 seconds TEXT: H TR (rise time) TSTEP seconds TEXT: H TF (fall time) TSTEP seconds TEXT: H PW (pulse width) TSTOP seconds TEXT: H PER(period) TSTOP seconds TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H A single pulse so specified is described by the follow- TEXT: H ing table: TEXT: H TEXT: H TEXT: H TEXT: H time value TEXT: H ------------------- TEXT: H 0 V1 TEXT: H TD V1 TEXT: H TD+TR V2 TEXT: H TD+TR+PW V2 TEXT: H TD+TR+PW+TF V1 TEXT: H TSTOP V1 TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H Intermediate points are determined by linear interpola- TEXT: H tion. TEXT: H TEXT: H SUBJECT: Sinusoidal TITLE: Sinusoidal TEXT: H TEXT: H _3._2._1._2. _S_i_n_u_s_o_i_d_a_l TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H SIN(VO VA FREQ TD THETA) TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H VIN 3 0 SIN(0 1 100MEG 1NS 1E10) TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H parameters default value units TEXT: H ------------------------------------------------------- TEXT: H VO (offset) Volts or Amps TEXT: H VA (amplitude) Volts or Amps TEXT: H FREQ (frequency) 1/TSTOP Hz TEXT: H TD (delay) 0.0 seconds TEXT: H THETA (damping factor) 0.0 1/seconds TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H The shape of the waveform is described by the following TEXT: H table: TEXT: H TEXT: H TEXT: H time value TEXT: H ------------------------------------------------------------ TEXT: H 0 to TD VO TEXT: H -(t - TD)THETA TEXT: H TD to TSTOP VO + VA e sin(2 J FREQ (t + TD)) TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H SUBJECT: Exponential TITLE: Exponential TEXT: H TEXT: H _3._2._1._3. _E_x_p_o_n_e_n_t_i_a_l TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m: TEXT: H TEXT: H EXP(V1 V2 TD1 TAU1 TD2 TAU2) TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H VIN 3 0 EXP(-4 -1 2NS 30NS 60NS 40NS) TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H parameter default value units TEXT: H --------------------------------------------------------- TEXT: H V1 (initial value) Volts or Amps TEXT: H V2 (pulsed value) Volts or Amps TEXT: H TD1 (rise delay time) 0.0 seconds TEXT: H TAU1 (rise time constant) TSTEP seconds TEXT: H TD2 (fall delay time) TD1+TSTEP seconds TEXT: H TAU2 (fall time constant) TSTEP seconds TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H The shape of the waveform is described by the following TEXT: H table: TEXT: H TEXT: H TEXT: H TEXT: H time value TEXT: H ---------------------------------------------------------------------------- TEXT: H 0 to TD1 V1 TEXT: H | ------------| TEXT: H TAU1 TEXT: H | -(t - TD1) | -(t - TD2) TEXT: H TD1 to TD2 V1 + (V2 - V1) 1 - e TEXT: H | ----------| | ----------| TEXT: H | TAU1 | | TAU2 | TEXT: H TD2 to TSTOP V1 + (V2 - V1) - e + (V1 - V2) 1 - e TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H SUBJECT: PieceWise Linear TITLE: Piece-Wise Linear TEXT: H TEXT: H _3._2._1._4. _P_i_e_c_e-_W_i_s_e _L_i_n_e_a_r TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m: TEXT: H TEXT: H PWL(T1 V1 ) TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H VCLOCK 7 5 PWL(0 -7 10NS -7 11NS -3 17NS -3 18NS -7 50NS -7) TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H Each pair of values (Ti, Vi) specifies that the value TEXT: H of the source is Vi (in Volts or Amps) at time=Ti. The TEXT: H value of the source at intermediate values of time is deter- TEXT: H mined by using linear interpolation on the input values. TEXT: H TEXT: H SUBJECT: SingleFrequency FM TITLE: Single-Frequency FM TEXT: H TEXT: H _3._2._1._5. _S_i_n_g_l_e-_F_r_e_q_u_e_n_c_y _F_M TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m: TEXT: H TEXT: H SFFM(VO VA FC MDI FS) TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H V1 12 0 SFFM(0 1M 20K 5 1K) TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H parameter default value units TEXT: H ------------------------------------------------------- TEXT: H VO (offset) Volts or Amps TEXT: H VA (amplitude) Volts or Amps TEXT: H FC (carrier frequency) 1/TSTOP Hz TEXT: H MDI (modulation index) TEXT: H FS (signal frequency) 1/TSTOP Hz TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H The shape of the waveform is described by the following TEXT: H equation: TEXT: H TEXT: H TEXT: H | | TEXT: H V(t)=V + V sin 2 J FC t + MDI sin(2 J FS t) TEXT: H O A | | TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H SUBJECT: Linear Dependent Sources TITLE: Linear Dependent Sources TEXT: H TEXT: H _3._2._2. _L_i_n_e_a_r _D_e_p_e_n_d_e_n_t _S_o_u_r_c_e_s TEXT: H TEXT: H TEXT: H SPICE allows circuits to contain linear dependent TEXT: H sources characterized by any of the four equations TEXT: H TEXT: H i = g v v = e v i = f i v TEXT: H = h i TEXT: H TEXT: H where g, e, f, and h are constants representing transconduc- TEXT: H tance, voltage gain, current gain, and transresistance, TEXT: H respectively. TEXT: H TEXT: H TEXT: H SUBTOPIC: NGSPICE:Linear VoltageControlled Current Sources SUBTOPIC: NGSPICE:Linear VoltageControlled Voltage Sources SUBTOPIC: NGSPICE:Linear CurrentControlled Current Sources SUBTOPIC: NGSPICE:Linear CurrentControlled Voltage Sources SUBJECT: Linear VoltageControlled Current Sources TITLE: Linear Voltage-Controlled Current Sources TEXT: H TEXT: H _3._2._2._1. _L_i_n_e_a_r _V_o_l_t_a_g_e-_C_o_n_t_r_o_l_l_e_d _C_u_r_r_e_n_t _S_o_u_r_c_e_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H GXXXXXXX N+ N- NC+ NC- VALUE TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H G1 2 0 5 0 0.1MMHO TEXT: H TEXT: H TEXT: H N+ and N- are the positive and negative nodes, TEXT: H respectively. Current flow is from the positive node, TEXT: H through the source, to the negative node. NC+ and NC- TEXT: H are the positive and negative controlling nodes, respec- TEXT: H tively. VALUE is the transconductance (in mhos). TEXT: H TEXT: H TEXT: H SUBJECT: Linear VoltageControlled Voltage Sources TITLE: Linear Voltage-Controlled Voltage Sources TEXT: H TEXT: H _3._2._2._2. _L_i_n_e_a_r _V_o_l_t_a_g_e-_C_o_n_t_r_o_l_l_e_d _V_o_l_t_a_g_e _S_o_u_r_c_e_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H EXXXXXXX N+ N- NC+ NC- VALUE TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H E1 2 3 14 1 2.0 TEXT: H TEXT: H TEXT: H N+ is the positive node, and N- is the negative TEXT: H node. NC+ and NC- are the positive and negative con- TEXT: H trolling nodes, respectively. VALUE is the voltage TEXT: H gain. TEXT: H TEXT: H TEXT: H SUBJECT: Linear CurrentControlled Current Sources TITLE: Linear Current-Controlled Current Sources TEXT: H TEXT: H _3._2._2._3. _L_i_n_e_a_r _C_u_r_r_e_n_t-_C_o_n_t_r_o_l_l_e_d _C_u_r_r_e_n_t _S_o_u_r_c_e_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H FXXXXXXX N+ N- VNAM VALUE TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H F1 13 5 VSENS 5 TEXT: H TEXT: H TEXT: H N+ and N- are the positive and negative nodes, TEXT: H respectively. Current flow is from the positive node, TEXT: H through the source, to the negative node. VNAM is the TEXT: H name of a voltage source through which the controlling TEXT: H current flows. The direction of positive controlling TEXT: H current flow is from the positive node, through the TEXT: H source, to the negative node of VNAM. VALUE is the TEXT: H current gain. TEXT: H TEXT: H TEXT: H SUBJECT: Linear CurrentControlled Voltage Sources TITLE: Linear Current-Controlled Voltage Sources TEXT: H TEXT: H _3._2._2._4. _L_i_n_e_a_r _C_u_r_r_e_n_t-_C_o_n_t_r_o_l_l_e_d _V_o_l_t_a_g_e _S_o_u_r_c_e_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H HXXXXXXX N+ N- VNAM VALUE TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H HX 5 17 VZ 0.5K TEXT: H TEXT: H TEXT: H N+ and N- are the positive and negative nodes, TEXT: H respectively. VNAM is the name of a voltage source TEXT: H through which the controlling current flows. The direc- TEXT: H tion of positive controlling current flow is from the TEXT: H positive node, through the source, to the negative node TEXT: H of VNAM. VALUE is the transresistance (in ohms). TEXT: H TEXT: H TEXT: H SUBJECT: Nonlinear Dependent Sources TITLE: Non-linear Dependent Sources TEXT: H TEXT: H _3._2._3. _N_o_n-_l_i_n_e_a_r _D_e_p_e_n_d_e_n_t _S_o_u_r_c_e_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H BXXXXXXX N+ N- TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H B1 0 1 I=cos(v(1))+sin(v(2)) TEXT: H B1 0 1 V=ln(cos(log(v(1,2)^2)))-v(3)^4+v(2)^v(1) TEXT: H B1 3 4 I=17 TEXT: H B1 3 4 V=exp(pi^i(vdd)) TEXT: H TEXT: H TEXT: H TEXT: H _N+ is the positive node, and _N- is the negative node. TEXT: H The values of the V and I parameters determine the voltages TEXT: H and currents across and through the device, respectively. TEXT: H If I is given then the device is a current source, and if V TEXT: H is given the device is a voltage source. One and only one TEXT: H of these parameters must be given. TEXT: H TEXT: H The small-signal AC behavior of the nonlinear source is TEXT: H a linear dependent source (or sources) with a proportional- TEXT: H ity constant equal to the derivative (or derivatives) of the TEXT: H source at the DC operating point. TEXT: H TEXT: H TEXT: H The expressions given for V and I may be any function TEXT: H of voltages and currents through voltage sources in the sys- TEXT: H tem. The following functions of real variables are defined: TEXT: H TEXT: H abs asinh cosh sin TEXT: H acos atan exp sinh TEXT: H acosh atanh ln sqrt TEXT: H asin cos log tan TEXT: H TEXT: H TEXT: H TEXT: H The function "u" is the unit step function, with a TEXT: H value of one for arguments greater than one and a value of TEXT: H zero for arguments less than zero. The function "uramp" is TEXT: H the integral of the unit step: for an input _x, the value is TEXT: H zero if _x is less than zero, or if _x is greater than zero TEXT: H the value is _x. These two functions are useful in sythesiz- TEXT: H ing piece-wise non-linear functions, though convergence may TEXT: H be adversely affected. TEXT: H TEXT: H TEXT: H The following standard operators are defined: TEXT: H TEXT: H + - * / ^ unary - TEXT: H TEXT: H TEXT: H If the argument of log, ln, or sqrt becomes less than TEXT: H zero, the absolute value of the argument is used. If a TEXT: H divisor becomes zero or the argument of log or ln becomes TEXT: H zero, an error will result. Other problems may occur when TEXT: H the argument for a function in a partial derivative enters a TEXT: H region where that function is undefined. TEXT: H TEXT: H TEXT: H To get time into the expression you can integrate the TEXT: H current from a constant current source with a capacitor and TEXT: H use the resulting voltage (don't forget to set the initial TEXT: H voltage across the capacitor). Non-linear resistors, capa- TEXT: H citors, and inductors may be synthesized with the nonlinear TEXT: H dependent source. Non-linear resistors are obvious. Non- TEXT: H linear capacitors and inductors are implemented with their TEXT: H linear counterparts by a change of variables implemented TEXT: H with the nonlinear dependent source. The following subcir- TEXT: H cuit will implement a nonlinear capacitor: TEXT: H TEXT: H .Subckt nlcap pos neg TEXT: H * Bx: calculate f(input voltage) TEXT: H Bx 1 0 v = f(v(pos,neg)) TEXT: H * Cx: linear capacitance TEXT: H Cx 2 0 1 TEXT: H * Vx: Ammeter to measure current into the capacitor TEXT: H Vx 2 1 DC 0Volts TEXT: H * Drive the current through Cx back into the circuit TEXT: H Fx pos neg Vx 1 TEXT: H .ends TEXT: H TEXT: H TEXT: H Non-linear inductors are similar. TEXT: H TEXT: H SUBJECT: TRANSMISSION LINES TITLE: TRANSMISSION LINES TEXT: H TEXT: H _3._3. _T_R_A_N_S_M_I_S_S_I_O_N _L_I_N_E_S TEXT: H SUBTOPIC: NGSPICE:Lossless Transmission Lines SUBTOPIC: NGSPICE:Lossy Transmission Lines SUBTOPIC: NGSPICE:Lossy Transmission Line Model SUBTOPIC: NGSPICE:Uniform Distributed RC Lines SUBTOPIC: NGSPICE:Uniform Distributed RC Model SUBJECT: Lossless Transmission Lines TITLE: Lossless Transmission Lines TEXT: H TEXT: H _3._3._1. _L_o_s_s_l_e_s_s _T_r_a_n_s_m_i_s_s_i_o_n _L_i_n_e_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H TXXXXXXX N1 N2 N3 N4 Z0=VALUE > TEXT: H + TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H T1 1 0 2 0 Z0=50 TD=10NS TEXT: H TEXT: H TEXT: H N1 and N2 are the nodes at port 1; N3 and N4 are the TEXT: H nodes at port 2. Z0 is the characteristic impedance. The TEXT: H length of the line may be expressed in either of two forms. TEXT: H The transmission delay, TD, may be specified directly (as TEXT: H TD=10ns, for example). Alternatively, a frequency F may be TEXT: H given, together with NL, the normalized electrical length of TEXT: H the transmission line with respect to the wavelength in the TEXT: H line at the frequency F. If a frequency is specified but NL TEXT: H is omitted, 0.25 is assumed (that is, the frequency is TEXT: H assumed to be the quarter-wave frequency). Note that TEXT: H although both forms for expressing the line length are indi- TEXT: H cated as optional, one of the two must be specified. TEXT: H TEXT: H Note that this element models only one propagating TEXT: H mode. If all four nodes are distinct in the actual circuit, TEXT: H then two modes may be excited. To simulate such a situa- TEXT: H tion, two transmission-line elements are required. (see the TEXT: H example in Appendix A for further clarification.) TEXT: H TEXT: H The (optional) initial condition specification consists TEXT: H of the voltage and current at each of the transmission line TEXT: H ports. Note that the initial conditions (if any) apply TEXT: H 'only' if the UIC option is specified on the .TRAN control TEXT: H line. TEXT: H TEXT: H Note that a lossy transmission line (see below) with TEXT: H zero loss may be more accurate than than the lossless TEXT: H transmission line due to implementation details. TEXT: H TEXT: H SUBJECT: Lossy Transmission Lines TITLE: Lossy Transmission Lines TEXT: H TEXT: H _3._3._2. _L_o_s_s_y _T_r_a_n_s_m_i_s_s_i_o_n _L_i_n_e_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H OXXXXXXX N1 N2 N3 N4 MNAME TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H O23 1 0 2 0 LOSSYMOD TEXT: H OCONNECT 10 5 20 5 INTERCONNECT TEXT: H TEXT: H TEXT: H TEXT: H This is a two-port convolution model for single- TEXT: H conductor lossy transmission lines. N1 and N2 are the nodes TEXT: H at port 1; N3 and N4 are the nodes at port 2. Note that a TEXT: H lossy transmission line with zero loss may be more accurate TEXT: H than than the lossless transmission line due to implementa- TEXT: H tion details. TEXT: H SUBJECT: Lossy Transmission Line Model TITLE: Lossy Transmission Line Model (LTRA) TEXT: H TEXT: H _3._3._3. _L_o_s_s_y _T_r_a_n_s_m_i_s_s_i_o_n _L_i_n_e _M_o_d_e_l (_L_T_R_A) TEXT: H TEXT: H TEXT: H The uniform RLC/RC/LC/RG transmission line model (re- TEXT: H ferred to as the LTRA model henceforth) models a uniform TEXT: H constant-parameter distributed transmission line. The RC TEXT: H and LC cases may also be modeled using the URC and TRA TEXT: H models; however, the newer LTRA model is usually faster and TEXT: H more accurate than the others. The operation of the LTRA TEXT: H model is based on the convolution of the transmission line's TEXT: H impulse responses with its inputs (see [8]). TEXT: H TEXT: H The LTRA model takes a number of parameters, some of TEXT: H which must be given and some of which are optional. TEXT: H TEXT: H name parameter units/type default example TEXT: H TEXT: H R resistance/length Z/unit 0.0 0.2 TEXT: H L inductance/length henrys/unit 0.0 9.13e-9 TEXT: H G conductance/length mhos/unit 0.0 0.0 TEXT: H C capacitance/length farads/unit 0.0 3.65e-12 TEXT: H LEN length of line no default 1.0 TEXT: H REL breakpoint control arbitrary unit 1 0.5 TEXT: H ABS breakpoint control 1 5 TEXT: H NOSTEPLIMIT don't limit timestep to less than flag not set set TEXT: H line delay TEXT: H NOCONTROL don't do complex timestep control flag not set set TEXT: H LININTERP use linear interpolation flag not set set TEXT: H MIXEDINTERP use linear when quadratic seems bad not set set TEXT: H COMPACTREL special reltol for history compaction flag RELTOL 1.0e-3 TEXT: H COMPACTABS special abstol for history compaction ABSTOL 1.0e-9 TEXT: H TRUNCNR use Newton-Raphson method for flag not set set TEXT: H timestep control TEXT: H TRUNCDONTCUT don't limit timestep to keep flag not set set TEXT: H impulse-response errors low TEXT: H TEXT: H TEXT: H TEXT: H The following types of lines have been implemented so TEXT: H far: RLC (uniform transmission line with series loss only), TEXT: H RC (uniform RC line), LC (lossless transmission line), and TEXT: H RG (distributed series resistance and parallel conductance TEXT: H only). Any other combination will yield erroneous results TEXT: H and should not be tried. The length LEN of the line must be TEXT: H specified. TEXT: H TEXT: H NOSTEPLIMIT is a flag that will remove the default res- TEXT: H triction of limiting time-steps to less than the line delay TEXT: H in the RLC case. NOCONTROL is a flag that prevents the TEXT: H default limiting of the time-step based on convolution error TEXT: H criteria in the RLC and RC cases. This speeds up simulation TEXT: H but may in some cases reduce the accuracy of results. TEXT: H LININTERP is a flag that, when specified, will use linear TEXT: H interpolation instead of the default quadratic interpolation TEXT: H for calculating delayed signals. MIXEDINTERP is a flag TEXT: H that, when specified, uses a metric for judging whether qua- TEXT: H dratic interpolation is not applicable and if so uses linear TEXT: H interpolation; otherwise it uses the default quadratic TEXT: H interpolation. TRUNCDONTCUT is a flag that removes the TEXT: H default cutting of the time-step to limit errors in the TEXT: H actual calculation of impulse-response related quantities. TEXT: H COMPACTREL and COMPACTABS are quantities that control the TEXT: H compaction of the past history of values stored for convolu- TEXT: H tion. Larger values of these lower accuracy but usually TEXT: H increase simulation speed. These are to be used with the TEXT: H TRYTOCOMPACT option, described in the .OPTIONS section. TEXT: H TRUNCNR is a flag that turns on the use of Newton-Raphson TEXT: H iterations to determine an appropriate timestep in the TEXT: H timestep control routines. The default is a trial and error TEXT: H procedure by cutting the previous timestep in half. REL and TEXT: H ABS are quantities that control the setting of breakpoints. TEXT: H TEXT: H The option most worth experimenting with for increasing TEXT: H the speed of simulation is REL. The default value of 1 is TEXT: H usually safe from the point of view of accuracy but occa- TEXT: H sionally increases computation time. A value greater than 2 TEXT: H eliminates all breakpoints and may be worth trying depending TEXT: H on the nature of the rest of the circuit, keeping in mind TEXT: H that it might not be safe from the viewpoint of accuracy. TEXT: H Breakpoints may usually be entirely eliminated if it is TEXT: H expected the circuit will not display sharp discontinuities. TEXT: H Values between 0 and 1 are usually not required but may be TEXT: H used for setting many breakpoints. TEXT: H TEXT: H COMPACTREL may also be experimented with when the TEXT: H option TRYTOCOMPACT is specified in a .OPTIONS card. The TEXT: H legal range is between 0 and 1. Larger values usually TEXT: H decrease the accuracy of the simulation but in some cases TEXT: H improve speed. If TRYTOCOMPACT is not specified on a TEXT: H .OPTIONS card, history compaction is not attempted and accu- TEXT: H racy is high. NOCONTROL, TRUNCDONTCUT and NOSTEPLIMIT also TEXT: H tend to increase speed at the expense of accuracy. TEXT: H SUBJECT: Uniform Distributed RC Lines TITLE: Uniform Distributed RC Lines (Lossy) TEXT: H TEXT: H _3._3._4. _U_n_i_f_o_r_m _D_i_s_t_r_i_b_u_t_e_d _R_C _L_i_n_e_s (_L_o_s_s_y) TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H UXXXXXXX N1 N2 N3 MNAME L=LEN TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H U1 1 2 0 URCMOD L=50U TEXT: H URC2 1 12 2 UMODL l=1MIL N=6 TEXT: H TEXT: H TEXT: H TEXT: H N1 and N2 are the two element nodes the RC line con- TEXT: H nects, while N3 is the node to which the capacitances are TEXT: H connected. MNAME is the model name, LEN is the length of TEXT: H the RC line in meters. LUMPS, if specified, is the number TEXT: H of lumped segments to use in modeling the RC line (see the TEXT: H model description for the action taken if this parameter is TEXT: H omitted). TEXT: H SUBJECT: Uniform Distributed RC Model TITLE: Uniform Distributed RC Model (URC) TEXT: H TEXT: H _3._3._5. _U_n_i_f_o_r_m _D_i_s_t_r_i_b_u_t_e_d _R_C _M_o_d_e_l (_U_R_C) TEXT: H TEXT: H TEXT: H The URC model is derived from a model proposed by L. TEXT: H Gertzberrg in 1974. The model is accomplished by a subcir- TEXT: H cuit type expansion of the URC line into a network of lumped TEXT: H RC segments with internally generated nodes. The RC seg- TEXT: H ments are in a geometric progression, increasing toward the TEXT: H middle of the URC line, with K as a proportionality con- TEXT: H stant. The number of lumped segments used, if not specified TEXT: H for the URC line device, is determined by the following for- TEXT: H mula: TEXT: H 2 TEXT: H | R C |(K-1)| | TEXT: H _ _ 2 TEXT: H log|F 2 J L |-----| | TEXT: H max TEXT: H | L L | K | | TEXT: H TEXT: H N = ------------------------------ TEXT: H log K TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H The URC line is made up strictly of resistor and capa- TEXT: H citor segments unless the ISPERL parameter is given a non- TEXT: H zero value, in which case the capacitors are replaced with TEXT: H reverse biased diodes with a zero-bias junction capacitance TEXT: H equivalent to the capacitance replaced, and with a satura- TEXT: H tion current of ISPERL amps per meter of transmission line TEXT: H and an optional series resistance equivalent to RSPERL ohms TEXT: H per meter. TEXT: H TEXT: H name parameter units default example area TEXT: H TEXT: H 1 K Propagation Constant - 2.0 1.2 - TEXT: H 2 FMAX Maximum Frequency of interest Hz 1.0G 6.5Meg - TEXT: H 3 RPERL Resistance per unit length Z/m 1000 10 - TEXT: H 4 CPERL Capacitance per unit length F/m 1.0e-15 1pF - TEXT: H 5 ISPERL Saturation Current per unit length A/m 0 - - TEXT: H 6 RSPERL Diode Resistance per unit length Z/m 0 - - TEXT: H TEXT: H TEXT: H SUBJECT: TRANSISTORS AND DIODES TITLE: TRANSISTORS AND DIODES TEXT: H TEXT: H _3._4. _T_R_A_N_S_I_S_T_O_R_S _A_N_D _D_I_O_D_E_S TEXT: H TEXT: H TEXT: H The area factor used on the diode, BJT, JFET, and MES- TEXT: H FET devices determines the number of equivalent parallel TEXT: H devices of a specified model. The affected parameters are TEXT: H marked with an asterisk under the heading 'area' in the TEXT: H model descriptions below. Several geometric factors associ- TEXT: H ated with the channel and the drain and source diffusions TEXT: H can be specified on the MOSFET device line. TEXT: H TEXT: H Two different forms of initial conditions may be speci- TEXT: H fied for some devices. The first form is included to TEXT: H improve the dc convergence for circuits that contain more TEXT: H than one stable state. If a device is specified OFF, the dc TEXT: H operating point is determined with the terminal voltages for TEXT: H that device set to zero. After convergence is obtained, the TEXT: H program continues to iterate to obtain the exact value for TEXT: H the terminal voltages. If a circuit has more than one dc TEXT: H stable state, the OFF option can be used to force the solu- TEXT: H tion to correspond to a desired state. If a device is TEXT: H specified OFF when in reality the device is conducting, the TEXT: H program still obtains the correct solution (assuming the TEXT: H solutions converge) but more iterations are required since TEXT: H the program must independently converge to two separate TEXT: H solutions. The .NODESET control line serves a similar pur- TEXT: H pose as the OFF option. The .NODESET option is easier to TEXT: H apply and is the preferred means to aid convergence. TEXT: H TEXT: H The second form of initial conditions are specified for TEXT: H use with the transient analysis. These are true 'initial TEXT: H conditions' as opposed to the convergence aids above. See TEXT: H the description of the .IC control line and the .TRAN con- TEXT: H trol line for a detailed explanation of initial conditions. TEXT: H TEXT: H TEXT: H SUBTOPIC: NGSPICE:Junction Diodes SUBTOPIC: NGSPICE:Diode Model SUBTOPIC: NGSPICE:Bipolar Junction Transistors SUBTOPIC: NGSPICE:BJT Models SUBTOPIC: NGSPICE:Junction FieldEffect Transistors SUBTOPIC: NGSPICE:JFET Models SUBTOPIC: NGSPICE:MOSFETs SUBTOPIC: NGSPICE:MOSFET Models SUBTOPIC: NGSPICE:MESFETs SUBTOPIC: NGSPICE:MESFET Models SUBJECT: Junction Diodes TITLE: Junction Diodes TEXT: H TEXT: H _3._4._1. _J_u_n_c_t_i_o_n _D_i_o_d_e_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H DXXXXXXX N+ N- MNAME TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H DBRIDGE 2 10 DIODE1 TEXT: H DCLMP 3 7 DMOD 3.0 IC=0.2 TEXT: H TEXT: H TEXT: H TEXT: H N+ and N- are the positive and negative nodes, respec- TEXT: H tively. MNAME is the model name, AREA is the area factor, TEXT: H and OFF indicates an (optional) starting condition on the TEXT: H device for dc analysis. If the area factor is omitted, a TEXT: H value of 1.0 is assumed. The (optional) initial condition TEXT: H specification using IC=VD is intended for use with the UIC TEXT: H option on the .TRAN control line, when a transient analysis TEXT: H is desired starting from other than the quiescent operating TEXT: H point. The (optional) TEMP value is the temperature at TEXT: H which this device is to operate, and overrides the tempera- TEXT: H ture specification on the .OPTION control line. TEXT: H TEXT: H SUBJECT: Diode Model TITLE: Diode Model (D) TEXT: H TEXT: H _3._4._2. _D_i_o_d_e _M_o_d_e_l (_D) TEXT: H TEXT: H TEXT: H The dc characteristics of the diode are determined by TEXT: H the parameters IS and N. An ohmic resistance, RS, is in- TEXT: H cluded. Charge storage effects are modeled by a transit TEXT: H time, TT, and a nonlinear depletion layer capacitance which TEXT: H is determined by the parameters CJO, VJ, and M. The tem- TEXT: H perature dependence of the saturation current is defined by TEXT: H the parameters EG, the energy and XTI, the saturation TEXT: H current temperature exponent. The nominal temperature at TEXT: H which these parameters were measured is TNOM, which defaults TEXT: H to the circuit-wide value specified on the .OPTIONS control TEXT: H line. Reverse breakdown is modeled by an exponential in- TEXT: H crease in the reverse diode current and is determined by the TEXT: H parameters BV and IBV (both of which are positive numbers). TEXT: H TEXT: H TEXT: H TEXT: H name parameter units default example area TEXT: H TEXT: H 1 IS saturation current A 1.0e-14 1.0e-14 * TEXT: H 2 RS ohmic resistance Z 0 10 * TEXT: H 3 N emission coefficient - 1 1.0 TEXT: H 4 TT transit-time sec 0 0.1ns TEXT: H 5 CJO zero-bias junction capacitance F 0 2pF * TEXT: H 6 VJ junction potential V 1 0.6 TEXT: H 7 M grading coefficient - 0.5 0.5 TEXT: H 8 EG activation energy eV 1.11 1.11 Si TEXT: H 0.69 Sbd TEXT: H 0.67 Ge TEXT: H 9 XTI saturation-current temp. exp - 3.0 3.0 jn TEXT: H 2.0 Sbd TEXT: H 10 KF flicker noise coefficient - 0 TEXT: H 11 AF flicker noise exponent - 1 TEXT: H 12 FC coefficient for forward-bias - 0.5 TEXT: H depletion capacitance formula TEXT: H 13 BV reverse breakdown voltage V infinite 40.0 TEXT: H 14 IBV current at breakdown voltage A 1.0e-3 TEXT: H o TEXT: H 15 TNOM parameter measurement temperature C 27 50 TEXT: H TEXT: H TEXT: H TEXT: H SUBJECT: Bipolar Junction Transistors TITLE: Bipolar Junction Transistors (BJTs) TEXT: H TEXT: H _3._4._3. _B_i_p_o_l_a_r _J_u_n_c_t_i_o_n _T_r_a_n_s_i_s_t_o_r_s (_B_J_T_s) TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H QXXXXXXX NC NB NE MNAME TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H Q23 10 24 13 QMOD IC=0.6, 5.0 TEXT: H Q50A 11 26 4 20 MOD1 TEXT: H TEXT: H TEXT: H TEXT: H NC, NB, and NE are the collector, base, and emitter TEXT: H nodes, respectively. NS is the (optional) substrate node. TEXT: H If unspecified, ground is used. MNAME is the model name, TEXT: H AREA is the area factor, and OFF indicates an (optional) TEXT: H initial condition on the device for the dc analysis. If the TEXT: H area factor is omitted, a value of 1.0 is assumed. The TEXT: H (optional) initial condition specification using IC=VBE, VCE TEXT: H is intended for use with the UIC option on the .TRAN control TEXT: H line, when a transient analysis is desired starting from TEXT: H other than the quiescent operating point. See the .IC con- TEXT: H trol line description for a better way to set transient ini- TEXT: H tial conditions. The (optional) TEMP value is the tempera- TEXT: H ture at which this device is to operate, and overrides the TEXT: H temperature specification on the .OPTION control line. TEXT: H TEXT: H SUBJECT: BJT Models TITLE: BJT Models (NPN/PNP) TEXT: H TEXT: H _3._4._4. _B_J_T _M_o_d_e_l_s (_N_P_N/_P_N_P) TEXT: H TEXT: H TEXT: H The bipolar junction transistor model in SPICE is an TEXT: H adaptation of the integral charge control model of Gummel TEXT: H and Poon. This modified Gummel-Poon model extends the ori- TEXT: H ginal model to include several effects at high bias levels. TEXT: H The model automatically simplifies to the simpler Ebers-Moll TEXT: H model when certain parameters are not specified. The param- TEXT: H eter names used in the modified Gummel-Poon model have been TEXT: H chosen to be more easily understood by the program user, and TEXT: H to reflect better both physical and circuit design thinking. TEXT: H TEXT: H TEXT: H The dc model is defined by the parameters IS, BF, NF, TEXT: H ISE, IKF, and NE which determine the forward current gain TEXT: H characteristics, IS, BR, NR, ISC, IKR, and NC which deter- TEXT: H mine the reverse current gain characteristics, and VAF and TEXT: H VAR which determine the output conductance for forward and TEXT: H reverse regions. Three ohmic resistances RB, RC, and RE are TEXT: H included, where RB can be high current dependent. Base TEXT: H charge storage is modeled by forward and reverse transit TEXT: H times, TF and TR, the forward transit time TF being bias TEXT: H dependent if desired, and nonlinear depletion layer capaci- TEXT: H tances which are determined by CJE, VJE, and MJE for the B-E TEXT: H junction , CJC, VJC, and MJC for the B-C junction and CJS, TEXT: H VJS, and MJS for the C-S (Collector-Substrate) junction. TEXT: H The temperature dependence of the saturation current, IS, is TEXT: H determined by the energy-gap, EG, and the saturation current TEXT: H temperature exponent, XTI. Additionally base current tem- TEXT: H perature dependence is modeled by the beta temperature TEXT: H exponent XTB in the new model. The values specified are TEXT: H assumed to have been measured at the temperature TNOM, which TEXT: H can be specified on the .OPTIONS control line or overridden TEXT: H by a specification on the .MODEL line. TEXT: H TEXT: H The BJT parameters used in the modified Gummel-Poon TEXT: H model are listed below. The parameter names used in earlier TEXT: H versions of SPICE2 are still accepted. TEXT: H TEXT: H Modified Gummel-Poon BJT Parameters. TEXT: H TEXT: H TEXT: H name parameter units default example area TEXT: H TEXT: H 1 IS transport saturation current A 1.0e-16 1.0e-15 * TEXT: H 2 BF ideal maximum forward beta - 100 100 TEXT: H 3 NF forward current emission coefficient - 1.0 1 TEXT: H 4 VAF forward Early voltage V infinite 200 TEXT: H 5 IKF corner for forward beta TEXT: H high current roll-off A infinite 0.01 * TEXT: H 6 ISE B-E leakage saturation current A 0 1.0e-13 * TEXT: H 7 NE B-E leakage emission coefficient - 1.5 2 TEXT: H 8 BR ideal maximum reverse beta - 1 0.1 TEXT: H 9 NR reverse current emission coefficient - 1 1 TEXT: H 10 VAR reverse Early voltage V infinite 200 TEXT: H 11 IKR corner for reverse beta TEXT: H high current roll-off A infinite 0.01 * TEXT: H 12 ISC B-C leakage saturation current A 0 1.0e-13 * TEXT: H 13 NC B-C leakage emission coefficient - 2 1.5 TEXT: H 14 RB zero bias base resistance Z 0 100 * TEXT: H 15 IRB current where base resistance TEXT: H falls halfway to its min value A infinite 0.1 * TEXT: H 16 RBM minimum base resistance TEXT: H at high currents Z RB 10 * TEXT: H 17 RE emitter resistance Z 0 1 * TEXT: H 18 RC collector resistance Z 0 10 * TEXT: H 19 CJE B-E zero-bias depletion capacitance F 0 2pF * TEXT: H 20 VJE B-E built-in potential V 0.75 0.6 TEXT: H 21 MJE B-E junction exponential factor - 0.33 0.33 TEXT: H 22 TF ideal forward transit time sec 0 0.1ns TEXT: H 23 XTF coefficient for bias dependence of TF - 0 TEXT: H 24 VTF voltage describing VBC TEXT: H dependence of TF V infinite TEXT: H 25 ITF high-current parameter TEXT: H for effect on TF A 0 * TEXT: H 26 PTF excess phase at freq=1.0/(TF*2PI) Hz deg 0 TEXT: H 27 CJC B-C zero-bias depletion capacitance F 0 2pF * TEXT: H 28 VJC B-C built-in potential V 0.75 0.5 TEXT: H 29 MJC B-C junction exponential factor - 0.33 0.5 TEXT: H 30 XCJC fraction of B-C depletion capacitance - 1 TEXT: H connected to internal base node TEXT: H 31 TR ideal reverse transit time sec 0 10ns TEXT: H 32 CJS zero-bias collector-substrate TEXT: H capacitance F 0 2pF * TEXT: H 33 VJS substrate junction built-in potential V 0.75 TEXT: H 34 MJS substrate junction exponential factor - 0 0.5 TEXT: H 35 XTB forward and reverse beta TEXT: H temperature exponent - 0 TEXT: H 36 EG energy gap for temperature TEXT: H effect on IS eV 1.11 TEXT: H 37 XTI temperature exponent for effect on IS - 3 TEXT: H 38 KF flicker-noise coefficient - 0 TEXT: H 39 AF flicker-noise exponent - 1 TEXT: H 40 FC coefficient for forward-bias TEXT: H depletion capacitance formula - 0.5 TEXT: H o TEXT: H 41 TNOM Parameter measurement temperature C 27 50 TEXT: H TEXT: H TEXT: H SUBJECT: Junction FieldEffect Transistors TITLE: Junction Field-Effect Transistors (JFETs) TEXT: H TEXT: H _3._4._5. _J_u_n_c_t_i_o_n _F_i_e_l_d-_E_f_f_e_c_t _T_r_a_n_s_i_s_t_o_r_s (_J_F_E_T_s) TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H JXXXXXXX ND NG NS MNAME TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H J1 7 2 3 JM1 OFF TEXT: H TEXT: H TEXT: H TEXT: H ND, NG, and NS are the drain, gate, and source nodes, TEXT: H respectively. MNAME is the model name, AREA is the area TEXT: H factor, and OFF indicates an (optional) initial condition on TEXT: H the device for dc analysis. If the area factor is omitted, TEXT: H a value of 1.0 is assumed. The (optional) initial condition TEXT: H specification, using IC=VDS, VGS is intended for use with TEXT: H the UIC option on the .TRAN control line, when a transient TEXT: H analysis is desired starting from other than the quiescent TEXT: H operating point. See the .IC control line for a better way TEXT: H to set initial conditions. The (optional) TEMP value is the TEXT: H temperature at which this device is to operate, and over- TEXT: H rides the temperature specification on the .OPTION control TEXT: H line. TEXT: H TEXT: H SUBJECT: JFET Models TITLE: JFET Models (NJF/PJF) TEXT: H TEXT: H _3._4._6. _J_F_E_T _M_o_d_e_l_s (_N_J_F/_P_J_F) TEXT: H TEXT: H TEXT: H The JFET model is derived from the FET model of Shich- TEXT: H man and Hodges. The dc characteristics are defined by the TEXT: H parameters VTO and BETA, which determine the variation of TEXT: H drain current with gate voltage, LAMBDA, which determines TEXT: H the output conductance, and IS, the saturation current of TEXT: H the two gate junctions. Two ohmic resistances, RD and RS, TEXT: H are included. Charge storage is modeled by nonlinear deple- TEXT: H tion layer capacitances for both gate junctions which vary TEXT: H as the -1/2 power of junction voltage and are defined by the TEXT: H parameters CGS, CGD, and PB. TEXT: H TEXT: H Note that in Spice3f and later, a fitting parameter B TEXT: H has been added. For details, see [9]. TEXT: H TEXT: H TEXT: H name parameter units default example area TEXT: H TEXT: H 1 VTO threshold voltage (V V -2.0 -2.0 TEXT: H TO 2 TEXT: H 2 BETA transconductance parameter (B) A/V 1.0e-4 1.0e-3 * TEXT: H 3 LAMBDA channel-length modulation TEXT: H parameter (L) 1/V 0 1.0e-4 TEXT: H 4 RD drain ohmic resistance Z 0 100 * TEXT: H 5 RS source ohmic resistance Z 0 100 * TEXT: H 6 CGS zero-bias G-S junction capacitance (C ) F 0 5pF * TEXT: H gs TEXT: H 7 CGD zero-bias G-D junction capacitance (C ) F 0 1pF * TEXT: H gs TEXT: H 8 PB gate junction potential V 1 0.6 TEXT: H 9 IS gate junction saturation current (I ) A 1.0e-14 1.0e-14 * TEXT: H S TEXT: H 10 B doping tail parameter - 1 1.1 TEXT: H 11 KF flicker noise coefficient - 0 TEXT: H 12 AF flicker noise exponent - 1 TEXT: H 13 FC coefficient for forward-bias - 0.5 TEXT: H depletion capacitance formula TEXT: H o TEXT: H 14 TNOM parameter measurement temperature C 27 50 TEXT: H TEXT: H TEXT: H TEXT: H SUBJECT: MOSFETs TITLE: MOSFETs TEXT: H TEXT: H _3._4._7. _M_O_S_F_E_T_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H MXXXXXXX ND NG NS NB MNAME TEXT: H + TEXT: H + TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H M1 24 2 0 20 TYPE1 TEXT: H M31 2 17 6 10 MODM L=5U W=2U TEXT: H M1 2 9 3 0 MOD1 L=10U W=5U AD=100P AS=100P PD=40U PS=40U TEXT: H TEXT: H TEXT: H ND, NG, NS, and NB are the drain, gate, source, and bulk TEXT: H (substrate) nodes, respectively. MNAME is the model name. TEXT: H L and W are the channel length and width, in meters. AD and TEXT: H AS are the areas of the drain and source diffusions, in TEXT: H 2 TEXT: H meters . Note that the suffix U specifies microns (1e-6 m) TEXT: H 2 TEXT: H and P sq-microns (1e-12 m ). If any of L, W, AD, or AS are TEXT: H not specified, default values are used. The use of defaults TEXT: H simplifies input file preparation, as well as the editing TEXT: H required if device geometries are to be changed. PD and PS TEXT: H are the perimeters of the drain and source junctions, in TEXT: H meters. NRD and NRS designate the equivalent number of TEXT: H squares of the drain and source diffusions; these values TEXT: H multiply the sheet resistance RSH specified on the .MODEL TEXT: H control line for an accurate representation of the parasitic TEXT: H series drain and source resistance of each transistor. PD TEXT: H and PS default to 0.0 while NRD and NRS to 1.0. OFF indi- TEXT: H cates an (optional) initial condition on the device for dc TEXT: H analysis. The (optional) initial condition specification TEXT: H using IC=VDS, VGS, VBS is intended for use with the UIC TEXT: H option on the .TRAN control line, when a transient analysis TEXT: H is desired starting from other than the quiescent operating TEXT: H point. See the .IC control line for a better and more con- TEXT: H venient way to specify transient initial conditions. The TEXT: H (optional) TEMP value is the temperature at which this dev- TEXT: H ice is to operate, and overrides the temperature specifica- TEXT: H tion on the .OPTION control line. The temperature specifi- TEXT: H cation is ONLY valid for level 1, 2, 3, and 6 MOSFETs, not TEXT: H for level 4 or 5 (BSIM) devices. TEXT: H TEXT: H SUBJECT: MOSFET Models TITLE: MOSFET Models (NMOS/PMOS) TEXT: H TEXT: H _3._4._8. _M_O_S_F_E_T _M_o_d_e_l_s (_N_M_O_S/_P_M_O_S) TEXT: H TEXT: H TEXT: H SPICE provides four MOSFET device models, which differ TEXT: H in the formulation of the I-V characteristic. The variable TEXT: H LEVEL specifies the model to be used: TEXT: H TEXT: H LEVEL=1 -> Shichman-Hodges TEXT: H LEVEL=2 -> MOS2 (as described in [1]) TEXT: H LEVEL=3 -> MOS3, a semi-empirical model(see [1]) TEXT: H LEVEL=4 -> BSIM (as described in [3]) TEXT: H LEVEL=5 -> new BSIM (BSIM2; as described in [5]) TEXT: H LEVEL=6 -> MOS6 (as described in [2]) TEXT: H TEXT: H TEXT: H The dc characteristics of the level 1 through level 3 MOS- TEXT: H FETs are defined by the device parameters VTO, KP, LAMBDA, TEXT: H PHI and GAMMA. These parameters are computed by SPICE if TEXT: H process parameters (NSUB, TOX, ...) are given, but user- TEXT: H specified values always override. VTO is positive (nega- TEXT: H tive) for enhancement mode and negative (positive) for TEXT: H depletion mode N-channel (P-channel) devices. Charge TEXT: H storage is modeled by three constant capacitors, CGSO, CGDO, TEXT: H and CGBO which represent overlap capacitances, by the non- TEXT: H linear thin-oxide capacitance which is distributed among the TEXT: H gate, source, drain, and bulk regions, and by the nonlinear TEXT: H depletion-layer capacitances for both substrate junctions TEXT: H divided into bottom and periphery, which vary as the MJ and TEXT: H MJSW power of junction voltage respectively, and are deter- TEXT: H mined by the parameters CBD, CBS, CJ, CJSW, MJ, MJSW and PB. TEXT: H Charge storage effects are modeled by the piecewise linear TEXT: H voltages-dependent capacitance model proposed by Meyer. The TEXT: H thin-oxide charge-storage effects are treated slightly dif- TEXT: H ferent for the LEVEL=1 model. These voltage-dependent capa- TEXT: H citances are included only if TOX is specified in the input TEXT: H description and they are represented using Meyer's formula- TEXT: H tion. TEXT: H TEXT: H There is some overlap among the parameters describing TEXT: H the junctions, e.g. the reverse current can be input either TEXT: H 2 TEXT: H as IS (in A) or as JS (in A/m ). Whereas the first is an TEXT: H absolute value the second is multiplied by AD and AS to give TEXT: H the reverse current of the drain and source junctions TEXT: H respectively. This methodology has been chosen since there TEXT: H is no sense in relating always junction characteristics with TEXT: H AD and AS entered on the device line; the areas can be TEXT: H defaulted. The same idea applies also to the zero-bias TEXT: H junction capacitances CBD and CBS (in F) on one hand, and CJ TEXT: H 2 TEXT: H (in F/m ) on the other. The parasitic drain and source TEXT: H series resistance can be expressed as either RD and RS (in TEXT: H ohms) or RSH (in ohms/sq.), the latter being multiplied by TEXT: H the number of squares NRD and NRS input on the device line. TEXT: H TEXT: H A discontinuity in the MOS level 3 model with respect TEXT: H to the KAPPA parameter has been detected (see [10]). The TEXT: H supplied fix has been implemented in Spice3f2 and later. TEXT: H Since this fix may affect parameter fitting, the option TEXT: H "BADMOS3" may be set to use the old implementation (see the TEXT: H section on simulation variables and the ".OPTIONS" line). TEXT: H SPICE level 1, 2, 3 and 6 parameters: TEXT: H TEXT: H TEXT: H name parameter units default example TEXT: H TEXT: H 1 LEVEL model index - 1 TEXT: H 2 VTO zero-bias threshold voltage (V ) V 0.0 1.0 TEXT: H TO 2 TEXT: H 3 KP transconductance parameter A/V 2.0e-5 3.1e-5 TEXT: H 1/2 TEXT: H 4 GAMMA bulk threshold parameter (\) V 0.0 0.37 TEXT: H 5 PHI surface potential (U) V 0.6 0.65 TEXT: H 6 LAMBDA channel-length modulation TEXT: H (MOS1 and MOS2 only) (L) 1/V 0.0 0.02 TEXT: H 7 RD drain ohmic resistance Z 0.0 1.0 TEXT: H 8 RS source ohmic resistance Z 0.0 1.0 TEXT: H 9 CBD zero-bias B-D junction capacitance F 0.0 20fF TEXT: H 10 CBS zero-bias B-S junction capacitance F 0.0 20fF TEXT: H 11 IS bulk junction saturation current (I ) A 1.0e-14 1.0e-15 TEXT: H S TEXT: H 12 PB bulk junction potential V 0.8 0.87 TEXT: H 13 CGSO gate-source overlap capacitance TEXT: H per meter channel width F/m 0.0 4.0e-11 TEXT: H 14 CGDO gate-drain overlap capacitance TEXT: H per meter channel width F/m 0.0 4.0e-11 TEXT: H 15 CGBO gate-bulk overlap capacitance TEXT: H per meter channel length F/m 0.0 2.0e-10 TEXT: H 16 RSH drain and source diffusion TEXT: H sheet resistance Z/[] 0.0 10.0 TEXT: H 17 CJ zero-bias bulk junction bottom cap. TEXT: H 2 TEXT: H per sq-meter of junction area F/m 0.0 2.0e-4 TEXT: H 18 MJ bulk junction bottom grading coeff. - 0.5 0.5 TEXT: H 19 CJSW zero-bias bulk junction sidewall cap. TEXT: H per meter of junction perimeter F/m 0.0 1.0e-9 TEXT: H 20 MJSW bulk junction sidewall grading coeff. - 0.50(level1) TEXT: H 0.33(level2, 3) TEXT: H 21 JS bulk junction saturation current TEXT: H 2 TEXT: H per sq-meter of junction area A/m 1.0e-8 TEXT: H 22 TOX oxide thickness meter 1.0e-7 1.0e-7 TEXT: H 3 TEXT: H 23 NSUB substrate doping 1/cm 0.0 4.0e15 TEXT: H 2 TEXT: H 24 NSS surface state density 1/cm 0.0 1.0e10 TEXT: H 2 TEXT: H 25 NFS fast surface state density 1/cm 0.0 1.0e10 TEXT: H TEXT: H _c_o_n_t_i_n_u_e_d TEXT: H TEXT: H name parameter units default example TEXT: H TEXT: H 26 TPG type of gate material: - 1.0 TEXT: H +1 opp. to substrate TEXT: H -1 same as substrate TEXT: H 0 Al gate TEXT: H 27 XJ metallurgical junction depth meter 0.0 1M TEXT: H 28 LD lateral diffusion meter 0.0 0.8M TEXT: H 2 TEXT: H 29 UO surface mobility cm /Vs 600 700 TEXT: H 30 UCRIT critical field for mobility TEXT: H degradation (MOS2 only) V/cm 1.0e4 1.0e4 TEXT: H 31 UEXP critical field exponent in TEXT: H mobility degradation (MOS2 only) - 0.0 0.1 TEXT: H 32 UTRA transverse field coeff. (mobility) TEXT: H (deleted for MOS2) - 0.0 0.3 TEXT: H 33 VMAX maximum drift velocity of carriers m/s 0.0 5.0e4 TEXT: H 34 NEFF total channel-charge (fixed and TEXT: H mobile) coefficient (MOS2 only) - 1.0 5.0 TEXT: H 35 KF flicker noise coefficient - 0.0 1.0e-26 TEXT: H 36 AF flicker noise exponent - 1.0 1.2 TEXT: H 37 FC coefficient for forward-bias TEXT: H depletion capacitance formula - 0.5 TEXT: H 38 DELTA width effect on threshold voltage TEXT: H (MOS2 and MOS3) - 0.0 1.0 TEXT: H 39 THETA mobility modulation (MOS3 only) 1/V 0.0 0.1 TEXT: H 40 ETA static feedback (MOS3 only) - 0.0 1.0 TEXT: H 41 KAPPA saturation field factor (MOS3 only) - 0.2 0.5 TEXT: H o TEXT: H 42 TNOM parameter measurement temperature C 27 50 TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H The level 4 and level 5 (BSIM1 and BSIM2) parameters TEXT: H are all values obtained from process characterization, and TEXT: H can be generated automatically. J. Pierret [4] describes a TEXT: H means of generating a 'process' file, and the program TEXT: H Proc2Mod provided with SPICE3 converts this file into a se- TEXT: H quence of BSIM1 ".MODEL" lines suitable for inclusion in a TEXT: H SPICE input file. Parameters marked below with an * in the TEXT: H l/w column also have corresponding parameters with a length TEXT: H and width dependency. For example, VFB is the basic parame- TEXT: H ter with units of Volts, and LVFB and WVFB also exist and TEXT: H have units of Volt-Mmeter The formula TEXT: H TEXT: H P P TEXT: H L W TEXT: H P = P + ---------- + ---------- TEXT: H 0 TEXT: H L W TEXT: H effective effective TEXT: H TEXT: H is used to evaluate the parameter for the actual device TEXT: H specified with TEXT: H TEXT: H L = L - DL TEXT: H effective input TEXT: H and TEXT: H TEXT: H W = W - DW TEXT: H effective input TEXT: H TEXT: H TEXT: H TEXT: H Note that unlike the other models in SPICE, the BSIM TEXT: H model is designed for use with a process characterization TEXT: H system that provides all the parameters, thus there are no TEXT: H defaults for the parameters, and leaving one out is con- TEXT: H sidered an error. For an example set of parameters and the TEXT: H format of a process file, see the SPICE2 implementation TEXT: H notes[3]. TEXT: H TEXT: H For more information on BSIM2, see reference [5]. TEXT: H TEXT: H SPICE BSIM (level 4) parameters. TEXT: H TEXT: H TEXT: H name parameter units l/w TEXT: H TEXT: H VFB flat-band voltage V * TEXT: H PHI surface inversion potential V * TEXT: H 1/2 TEXT: H K1 body effect coefficient V * TEXT: H K2 drain/source depletion charge-sharing coefficient - * TEXT: H ETA zero-bias drain-induced barrier-lowering coefficient - * TEXT: H 2 TEXT: H MUZ zero-bias mobility cm /V-s TEXT: H DL shortening of channel Mm TEXT: H DW narrowing of channel Mm TEXT: H -1 TEXT: H U0 zero-bias transverse-field mobility degradation coefficient V * TEXT: H U1 zero-bias velocity saturation coefficient Mm/V * TEXT: H 2 2 TEXT: H X2MZ sens. of mobility to substrate bias at v =0 cm /V -s * TEXT: H ds -1 TEXT: H X2E sens. of drain-induced barrier lowering effect to substrate bias V * TEXT: H -1 TEXT: H X3E sens. of drain-induced barrier lowering effect to drain bias at V =V V * TEXT: H ds dd -2 TEXT: H X2U0 sens. of transverse field mobility degradation effect to substrate bias V * TEXT: H -2 TEXT: H X2U1 sens. of velocity saturation effect to substrate bias MmV * TEXT: H 2 2 TEXT: H MUS mobility at zero substrate bias and at V =V cm /V -s TEXT: H ds dd 2 2 TEXT: H X2MS sens. of mobility to substrate bias at V =V cm /V -s * TEXT: H ds dd 2 2 TEXT: H X3MS sens. of mobility to drain bias at V =V cm /V -s * TEXT: H ds dd -2 TEXT: H X3U1 sens. of velocity saturation effect on drain bias at V =V MmV * TEXT: H ds dd TEXT: H TOX gate oxide thickness Mm TEXT: H o TEXT: H TEMP temperature at which parameters were measured C TEXT: H VDD measurement bias range V TEXT: H CGDO gate-drain overlap capacitance per meter channel width F/m TEXT: H CGSO gate-source overlap capacitance per meter channel width F/m TEXT: H CGBO gate-bulk overlap capacitance per meter channel length F/m TEXT: H XPART gate-oxide capacitance-charge model flag - TEXT: H N0 zero-bias subthreshold slope coefficient - * TEXT: H NB sens. of subthreshold slope to substrate bias - * TEXT: H ND sens. of subthreshold slope to drain bias - * TEXT: H RSH drain and source diffusion sheet resistance Z/[] TEXT: H 2 TEXT: H JS source drain junction current density A/m TEXT: H PB built in potential of source drain junction V TEXT: H MJ Grading coefficient of source drain junction - TEXT: H PBSW built in potential of source, drain junction sidewall V TEXT: H MJSW grading coefficient of source drain junction sidewall - TEXT: H 2 TEXT: H CJ Source drain junction capacitance per unit area F/m TEXT: H CJSW source drain junction sidewall capacitance per unit length F/m TEXT: H WDF source drain junction default width m TEXT: H DELL Source drain junction length reduction m TEXT: H TEXT: H TEXT: H TEXT: H XPART = 0 selects a 40/60 drain/source charge partition TEXT: H in saturation, while XPART=1 selects a 0/100 drain/source TEXT: H charge partition. TEXT: H TEXT: H TEXT: H ND, NG, and NS are the drain, gate, and source nodes, TEXT: H respectively. MNAME is the model name, AREA is the area TEXT: H factor, and OFF indicates an (optional) initial condition on TEXT: H the device for dc analysis. If the area factor is omitted, TEXT: H a value of 1.0 is assumed. The (optional) initial condition TEXT: H specification, using IC=VDS, VGS is intended for use with TEXT: H the UIC option on the .TRAN control line, when a transient TEXT: H analysis is desired starting from other than the quiescent TEXT: H operating point. See the .IC control line for a better way TEXT: H to set initial conditions. TEXT: H TEXT: H SUBJECT: MESFETs TITLE: MESFETs TEXT: H TEXT: H _3._4._9. _M_E_S_F_E_T_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H ZXXXXXXX ND NG NS MNAME TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H Z1 7 2 3 ZM1 OFF TEXT: H TEXT: H TEXT: H TEXT: H SUBJECT: MESFET Models TITLE: MESFET Models (NMF/PMF) TEXT: H TEXT: H _3._4._1_0. _M_E_S_F_E_T _M_o_d_e_l_s (_N_M_F/_P_M_F) TEXT: H TEXT: H TEXT: H The MESFET model is derived from the GaAs FET model of TEXT: H Statz et al. as described in [11]. The dc characteristics TEXT: H are defined by the parameters VTO, B, and BETA, which deter- TEXT: H mine the variation of drain current with gate voltage, AL- TEXT: H PHA, which determines saturation voltage, and LAMBDA, which TEXT: H determines the output conductance. The formula are given TEXT: H by: TEXT: H TEXT: H 3 TEXT: H 2 TEXT: H B (V -V ) | | V | | 3 TEXT: H gs T ds _ TEXT: H I = --------------- |1 - |1-A---| |(1 + L V ) for 0 < V < TEXT: H d ds ds TEXT: H 1 + b(V - V ) | | 3 | | A TEXT: H gs T TEXT: H 2 TEXT: H B (V -V ) 3 TEXT: H gs T _ TEXT: H I = ---------------(1 + L V ) for V > TEXT: H d ds ds TEXT: H 1 + b(V - V ) A TEXT: H gs T TEXT: H TEXT: H TEXT: H Two ohmic resistances, RD and RS, are included. Charge TEXT: H storage is modeled by total gate charge as a function of TEXT: H gate-drain and gate-source voltages and is defined by the TEXT: H parameters CGS, CGD, and PB. TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H name parameter units default example area TEXT: H TEXT: H 1 VTO pinch-off voltage V -2.0 -2.0 TEXT: H 2 TEXT: H 2 BETA transconductance parameter A/V 1.0e-4 1.0e-3 * TEXT: H 3 B doping tail extending parameter 1/V 0.3 0.3 * TEXT: H 4 ALPHA saturation voltage parameter 1/V 2 2 * TEXT: H 5 LAMBDA channel-length modulation TEXT: H parameter 1/V 0 1.0e-4 TEXT: H 6 RD drain ohmic resistance Z 0 100 * TEXT: H 7 RS source ohmic resistance Z 0 100 * TEXT: H 8 CGS zero-bias G-S junction capacitance F 0 5pF * TEXT: H 9 CGD zero-bias G-D junction capacitance F 0 1pF * TEXT: H 10 PB gate junction potential V 1 0.6 TEXT: H 11 KF flicker noise coefficient - 0 TEXT: H 12 AF flicker noise exponent - 1 TEXT: H 13 FC coefficient for forward-bias - 0.5 TEXT: H depletion capacitance formula TEXT: H TEXT: H SUBJECT: ANALYSES AND OUTPUT CONTROL TITLE: ANALYSES AND OUTPUT CONTROL TEXT: H TEXT: H _4. _A_N_A_L_Y_S_E_S _A_N_D _O_U_T_P_U_T _C_O_N_T_R_O_L TEXT: H TEXT: H TEXT: H The following command lines are for specifying analyses TEXT: H or plots within the circuit description file. Parallel com- TEXT: H mands exist in the interactive command interpreter (detailed TEXT: H in the following section). Specifying analyses and plots TEXT: H (or tables) in the input file is useful for batch runs. TEXT: H Batch mode is entered when either the -b option is given or TEXT: H when the default input source is redirected from a file. In TEXT: H batch mode, the analyses specified by the control lines in TEXT: H the input file (e.g. ".ac", ".tran", etc.) are immediately TEXT: H executed (unless ".control" lines exists; see the section on TEXT: H the interactive command interpretor). If the -r _r_a_w_f_i_l_e TEXT: H option is given then all data generated is written to a TEXT: H Spice3 rawfile. The rawfile may be read by either the TEXT: H interactive mode of Spice3 or by nutmeg; see the previous TEXT: H section for details. In this case, the .SAVE line (see TEXT: H below) may be used to record the value of internal device TEXT: H variables (see Appendix B). TEXT: H TEXT: H If a rawfile is not specified, then output plots (in TEXT: H "line-printer" form) and tables can be printed according to TEXT: H the .PRINT, .PLOT, and .FOUR control lines, described next. TEXT: H .PLOT, .PRINT, and .FOUR lines are meant for compatibility TEXT: H with Spice2. TEXT: H SUBTOPIC: NGSPICE:SIMULATOR VARIABLES SUBTOPIC: NGSPICE:INITIAL CONDITIONS SUBTOPIC: NGSPICE:ANALYSES SUBTOPIC: NGSPICE:BATCH OUTPUT SUBJECT: SIMULATOR VARIABLES TITLE: SIMULATOR VARIABLES (.OPTIONS) TEXT: H TEXT: H _4._1. _S_I_M_U_L_A_T_O_R _V_A_R_I_A_B_L_E_S (._O_P_T_I_O_N_S) TEXT: H TEXT: H TEXT: H Various parameters of the simulations available in TEXT: H Spice3 can be altered to control the accuracy, speed, or TEXT: H default values for some devices. These parameters may be TEXT: H changed via the "set" command (described later in the sec- TEXT: H tion on the interactive front-end) or via the ".OPTIONS" TEXT: H line: TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H .OPTIONS OPT1 OPT2 ... (or OPT=OPTVAL ...) TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H .OPTIONS RELTOL=.005 TRTOL=8 TEXT: H TEXT: H TEXT: H The options line allows the user to reset program con- TEXT: H trol and user options for specific simulation purposes. TEXT: H Additional options for Nutmeg may be specified as well and TEXT: H take effect when Nutmeg reads the input file. Options TEXT: H specified to Nutmeg via the 'set' command are also passed on TEXT: H to SPICE3 as if specified on a .OPTIONS line. See the fol- TEXT: H lowing section on the interactive command interpreter for TEXT: H the parameters which may be set with a .OPTIONS line and the TEXT: H format of the 'set' command. Any combination of the follow- TEXT: H ing options may be included, in any order. 'x' (below) TEXT: H represents some positive number. TEXT: H TEXT: H option effect TEXT: H TEXT: H ABSTOL=x resets the absolute current error tolerance of the TEXT: H program. TEXT: H The default value is 1 picoamp. TEXT: H BADMOS3 Use the older version of the MOS3 model with the "kappa" TEXT: H discontinuity. TEXT: H CHGTOL=x resets the charge tolerance of the program. The default TEXT: H value is 1.0e-14. TEXT: H DEFAD=x resets the value for MOS drain diffusion area; the TEXT: H default is 0.0. TEXT: H DEFAS=x resets the value for MOS source diffusion area; the TEXT: H default is 0.0. TEXT: H DEFL=x resets the value for MOS channel length; the default TEXT: H is 100.0 micrometer. TEXT: H DEFW=x resets the value for MOS channel width; the default TEXT: H is 100.0 micrometer. TEXT: H GMIN=x resets the value of GMIN, the minimum conductance TEXT: H allowed by the program. TEXT: H The default value is 1.0e-12. TEXT: H ITL1=x resets the dc iteration limit. The default is 100. TEXT: H ITL2=x resets the dc transfer curve iteration limit. The TEXT: H default is 50. TEXT: H ITL3=x resets the lower transient analysis iteration limit. TEXT: H the default value is 4. (Note: not implemented in Spice3). TEXT: H ITL4=x resets the transient analysis timepoint iteration limit. TEXT: H the default is 10. TEXT: H ITL5=x resets the transient analysis total iteration limit. TEXT: H the default is 5000. Set ITL5=0 to omit this test. TEXT: H (Note: not implemented in Spice3). TEXT: H KEEPOPINFO Retain the operating point information when either an TEXT: H AC, Distortion, or Pole-Zero analysis is run. TEXT: H This is particularly useful if the circuit is large TEXT: H and you do not want to run a (redundant) ".OP" analysis. TEXT: H METHOD=name sets the numerical integration method used by SPICE. TEXT: H Possible names are "Gear" or "trapezoidal" (or just "trap"). TEXT: H The default is trapezoidal. TEXT: H PIVREL=x resets the relative ratio between the largest column entry TEXT: H and an acceptable pivot value. The default value is 1.0e-3. TEXT: H In the numerical pivoting algorithm the allowed minimum TEXT: H pivot value is determined by TEXT: H EPSREL=AMAX1(PIVREL*MAXVAL, PIVTOL) TEXT: H where MAXVAL is the maximum element in the column where TEXT: H a pivot is sought (partial pivoting). TEXT: H PIVTOL=x resets the absolute minimum value for a matrix entry TEXT: H to be accepted as a pivot. The default value is 1.0e-13. TEXT: H RELTOL=x resets the relative error tolerance of the program. TEXT: H The TEXT: H default value is 0.001 (0.1%). TEXT: H TEMP=x Resets the operating temperature of the circuit. The TEXT: H default value is 27 deg C (300 deg K). TEMP can be overridden TEXT: H by a temperature specification on any temperature dependent TEXT: H instance. TEXT: H TNOM=x resets the nominal temperature at which device parameters TEXT: H are measured. The default value is 27 deg C (300 deg K). TEXT: H TNOM can be overridden by a specification on any temperature TEXT: H dependent device model. TEXT: H TRTOL=x resets the transient error tolerance. The default value TEXT: H is 7.0. This parameter is an estimate of the factor by TEXT: H which SPICE overestimates the actual truncation error. TEXT: H TRYTOCOMPACT Applicable only to the LTRA model. TEXT: H When specified, the simulator tries to condense LTRA transmission TEXT: H lines' past history of input voltages and currents. TEXT: H VNTOL=x resets the absolute voltage error tolerance of the TEXT: H program. The default value is 1 microvolt. TEXT: H TEXT: H TEXT: H In addition, the following options have the listed TEXT: H effect when operating in spice2 emulation mode: TEXT: H TEXT: H option effect TEXT: H TEXT: H option effect TEXT: H ACCT causes accounting and run time statistics to be printed TEXT: H LIST causes the summary listing of the input data to be printed TEXT: H NOMOD suppresses the printout of the model parameters TEXT: H NOPAGE suppresses page ejects TEXT: H NODE causes the printing of the node table. TEXT: H OPTS causes the option values to be printed. TEXT: H TEXT: H SUBJECT: INITIAL CONDITIONS TITLE: INITIAL CONDITIONS TEXT: H TEXT: H _4._2. _I_N_I_T_I_A_L _C_O_N_D_I_T_I_O_N_S TEXT: H SUBTOPIC: NGSPICE:.NODESET SUBTOPIC: NGSPICE:.IC SUBJECT: .NODESET TITLE: .NODESET: Specify Initial Node Voltage Guesses TEXT: H TEXT: H _4._2._1. ._N_O_D_E_S_E_T: _S_p_e_c_i_f_y _I_n_i_t_i_a_l _N_o_d_e _V_o_l_t_a_g_e _G_u_e_s_s_e_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H .NODESET V(NODNUM)=VAL V(NODNUM)=VAL ... TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H .NODESET V(12)=4.5 V(4)=2.23 TEXT: H TEXT: H TEXT: H TEXT: H The Nodeset line helps the program find the dc or ini- TEXT: H tial transient solution by making a preliminary pass with TEXT: H the specified nodes held to the given voltages. The res- TEXT: H triction is then released and the iteration continues to the TEXT: H true solution. The .NODESET line may be necessary for con- TEXT: H vergence on bistable or a-stable circuits. In general, this TEXT: H line should not be necessary. TEXT: H TEXT: H SUBJECT: .IC TITLE: .IC: Set Initial Conditions TEXT: H TEXT: H _4._2._2. ._I_C: _S_e_t _I_n_i_t_i_a_l _C_o_n_d_i_t_i_o_n_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H .IC V(NODNUM)=VAL V(NODNUM)=VAL ... TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H .IC V(11)=5 V(4)=-5 V(2)=2.2 TEXT: H TEXT: H TEXT: H TEXT: H The IC line is for setting transient initial condi- TEXT: H tions. It has two different interpretations, depending on TEXT: H whether the UIC parameter is specified on the .TRAN control TEXT: H line. Also, one should not confuse this line with the TEXT: H .NODESET line. The .NODESET line is only to help dc conver- TEXT: H gence, and does not affect final bias solution (except for TEXT: H multi-stable circuits). The two interpretations of this TEXT: H line are as follows: TEXT: H TEXT: H 1. When the UIC parameter is specified on the .TRAN line, TEXT: H then the node voltages specified on the .IC control line are TEXT: H used to compute the capacitor, diode, BJT, JFET, and MOSFET TEXT: H initial conditions. This is equivalent to specifying the TEXT: H IC=... parameter on each device line, but is much more con- TEXT: H venient. The IC=... parameter can still be specified and TEXT: H takes precedence over the .IC values. Since no dc bias TEXT: H (initial transient) solution is computed before the tran- TEXT: H sient analysis, one should take care to specify all dc TEXT: H source voltages on the .IC control line if they are to be TEXT: H used to compute device initial conditions. TEXT: H TEXT: H 2. When the UIC parameter is not specified on the .TRAN TEXT: H control line, the dc bias (initial transient) solution is TEXT: H computed before the transient analysis. In this case, the TEXT: H node voltages specified on the .IC control line is forced to TEXT: H the desired initial values during the bias solution. During TEXT: H transient analysis, the constraint on these node voltages is TEXT: H removed. This is the preferred method since it allows SPICE TEXT: H to compute a consistent dc solution. TEXT: H SUBJECT: ANALYSES TITLE: ANALYSES TEXT: H TEXT: H _4._3. _A_N_A_L_Y_S_E_S TEXT: H TEXT: H SUBTOPIC: NGSPICE:.AC SUBTOPIC: NGSPICE:.DC SUBTOPIC: NGSPICE:.DISTO SUBTOPIC: NGSPICE:.NOISE SUBTOPIC: NGSPICE:.OP SUBTOPIC: NGSPICE:.PZ SUBTOPIC: NGSPICE:.SENS SUBTOPIC: NGSPICE:.TF SUBTOPIC: NGSPICE:.TRAN SUBJECT: .AC TITLE: .AC: Small-Signal AC Analysis TEXT: H TEXT: H _4._3._1. ._A_C: _S_m_a_l_l-_S_i_g_n_a_l _A_C _A_n_a_l_y_s_i_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H .AC DEC ND FSTART FSTOP TEXT: H .AC OCT NO FSTART FSTOP TEXT: H .AC LIN NP FSTART FSTOP TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H .AC DEC 10 1 10K TEXT: H .AC DEC 10 1K 100MEG TEXT: H .AC LIN 100 1 100HZ TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H DEC stands for decade variation, and ND is the number TEXT: H of points per decade. OCT stands for octave variation, and TEXT: H NO is the number of points per octave. LIN stands for TEXT: H linear variation, and NP is the number of points. FSTART is TEXT: H the starting frequency, and FSTOP is the final frequency. TEXT: H If this line is included in the input file, SPICE performs TEXT: H an AC analysis of the circuit over the specified frequency TEXT: H range. Note that in order for this analysis to be meaning- TEXT: H ful, at least one independent source must have been speci- TEXT: H fied with an ac value. TEXT: H TEXT: H SUBJECT: .DC TITLE: .DC: DC Transfer Function TEXT: H TEXT: H _4._3._2. ._D_C: _D_C _T_r_a_n_s_f_e_r _F_u_n_c_t_i_o_n TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H .DC SRCNAM VSTART VSTOP VINCR [SRC2 START2 STOP2 INCR2] TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H .DC VIN 0.25 5.0 0.25 TEXT: H .DC VDS 0 10 .5 VGS 0 5 1 TEXT: H .DC VCE 0 10 .25 IB 0 10U 1U TEXT: H TEXT: H TEXT: H TEXT: H The DC line defines the dc transfer curve source and TEXT: H sweep limits (again with capacitors open and inductors TEXT: H shorted). SRCNAM is the name of an independent voltage or TEXT: H current source. VSTART, VSTOP, and VINCR are the starting, TEXT: H final, and incrementing values respectively. The first TEXT: H example causes the value of the voltage source VIN to be TEXT: H swept from 0.25 Volts to 5.0 Volts in increments of 0.25 TEXT: H Volts. A second source (SRC2) may optionally be specified TEXT: H with associated sweep parameters. In this case, the first TEXT: H source is swept over its range for each value of the second TEXT: H source. This option can be useful for obtaining semiconduc- TEXT: H tor device output characteristics. See the second example TEXT: H circuit description in Appendix A. TEXT: H TEXT: H SUBJECT: .DISTO TITLE: .DISTO: Distortion Analysis TEXT: H TEXT: H _4._3._3. ._D_I_S_T_O: _D_i_s_t_o_r_t_i_o_n _A_n_a_l_y_s_i_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H .DISTO DEC ND FSTART FSTOP TEXT: H .DISTO OCT NO FSTART FSTOP TEXT: H .DISTO LIN NP FSTART FSTOP TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H .DISTO DEC 10 1kHz 100MHz TEXT: H .DISTO DEC 10 1kHz 100MHz 0.9 TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H The Disto line does a small-signal distortion analysis TEXT: H of the circuit. A multi-dimensional Volterra series TEXT: H analysis is done using multi-dimensional Taylor series to TEXT: H represent the nonlinearities at the operating point. Terms TEXT: H of up to third order are used in the series expansions. TEXT: H TEXT: H If the optional parameter F2OVERF1 is not specified, TEXT: H .DISTO does a harmonic analysis - i.e., it analyses distor- TEXT: H tion in the circuit using only a single input frequency F1, TEXT: H which is swept as specified by arguments of the .DISTO com- TEXT: H mand exactly as in the .AC command. Inputs at this fre- TEXT: H quency may be present at more than one input source, and TEXT: H their magnitudes and phases are specified by the arguments TEXT: H of the DISTOF1 keyword in the input file lines for the input TEXT: H sources (see the description for independent sources). (The TEXT: H arguments of the DISTOF2 keyword are not relevant in this TEXT: H case). The analysis produces information about the A.C. TEXT: H values of all node voltages and branch currents at the har- TEXT: H monic frequencies 2F1 and 3F1, vs. the input frequency F1 as TEXT: H it is swept. (A value of 1 (as a complex distortion output) TEXT: H signifies cos(2J(2F1)t) at 2F1 and cos(2J(3F1)t) at 3F1, TEXT: H using the convention that 1 at the input fundamental fre- TEXT: H quency is equivalent to cos(2JF1t).) The distortion com- TEXT: H ponent desired (2F1 or 3F1) can be selected using commands TEXT: H in nutmeg, and then printed or plotted. (Normally, one is TEXT: H interested primarily in the magnitude of the harmonic com- TEXT: H ponents, so the magnitude of the AC distortion value is TEXT: H looked at). It should be noted that these are the A.C. TEXT: H values of the actual harmonic components, and are not equal TEXT: H to HD2 and HD3. To obtain HD2 and HD3, one must divide by TEXT: H the corresponding A.C. values at F1, obtained from an .AC TEXT: H line. This division can be done using nutmeg commands. TEXT: H TEXT: H If the optional F2OVERF1 parameter is specified, it TEXT: H should be a real number between (and not equal to) 0.0 and TEXT: H 1.0; in this case, .DISTO does a spectral analysis. It con- TEXT: H siders the circuit with sinusoidal inputs at two different TEXT: H frequencies F1 and F2. F1 is swept according to the .DISTO TEXT: H control line options exactly as in the .AC control line. F2 TEXT: H is kept fixed at a single frequency as F1 sweeps - the value TEXT: H at which it is kept fixed is equal to F2OVERF1 times FSTART. TEXT: H Each independent source in the circuit may potentially have TEXT: H two (superimposed) sinusoidal inputs for distortion, at the TEXT: H frequencies F1 and F2. The magnitude and phase of the F1 TEXT: H component are specified by the arguments of the DISTOF1 key- TEXT: H word in the source's input line (see the description of TEXT: H independent sources); the magnitude and phase of the F2 com- TEXT: H ponent are specified by the arguments of the DISTOF2 key- TEXT: H word. The analysis produces plots of all node TEXT: H voltages/branch currents at the intermodulation product fre- TEXT: H quencies F1 + F2, F1 - F2, and (2 F1) - F2, vs the swept TEXT: H frequency F1. The IM product of interest may be selected TEXT: H using the setplot command, and displayed with the print and TEXT: H plot commands. It is to be noted as in the harmonic TEXT: H analysis case, the results are the actual AC voltages and TEXT: H currents at the intermodulation frequencies, and need to be TEXT: H normalized with respect to .AC values to obtain the IM TEXT: H parameters. TEXT: H TEXT: H If the DISTOF1 or DISTOF2 keywords are missing from the TEXT: H description of an independent source, then that source is TEXT: H assumed to have no input at the corresponding frequency. TEXT: H The default values of the magnitude and phase are 1.0 and TEXT: H 0.0 respectively. The phase should be specified in degrees. TEXT: H TEXT: H It should be carefully noted that the number F2OVERF1 TEXT: H should ideally be an irrational number, and that since this TEXT: H is not possible in practice, efforts should be made to keep TEXT: H the denominator in its fractional representation as large as TEXT: H possible, certainly above 3, for accurate results (i.e., if TEXT: H F2OVERF1 is represented as a fraction A/B, where A and B are TEXT: H integers with no common factors, B should be as large as TEXT: H possible; note that A < B because F2OVERF1 is constrained to TEXT: H be < 1). To illustrate why, consider the cases where TEXT: H F2OVERF1 is 49/100 and 1/2. In a spectral analysis, the TEXT: H outputs produced are at F1 + F2, F1 - F2 and 2 F1 - F2. In TEXT: H the latter case, F1 - F2 = F2, so the result at the F1-F2 TEXT: H component is erroneous because there is the strong fundamen- TEXT: H tal F2 component at the same frequency. Also, F1 + F2 = 2 TEXT: H F1 - F2 in the latter case, and each result is erroneous TEXT: H individually. This problem is not there in the case where TEXT: H F2OVERF1 = 49/100, because F1-F2 = 51/100 F1 < > 49/100 F1 = TEXT: H F2. In this case, there are two very closely spaced fre- TEXT: H quency components at F2 and F1 - F2. One of the advantages TEXT: H of the Volterra series technique is that it computes distor- TEXT: H tions at mix frequencies expressed symbolically (i.e. n F1 + TEXT: H m F2), therefore one is able to obtain the strengths of dis- TEXT: H tortion components accurately even if the separation between TEXT: H them is very small, as opposed to transient analysis for TEXT: H example. The disadvantage is of course that if two of the TEXT: H mix frequencies coincide, the results are not merged TEXT: H together and presented (though this could presumably be done TEXT: H as a postprocessing step). Currently, the interested user TEXT: H should keep track of the mix frequencies himself or herself TEXT: H and add the distortions at coinciding mix frequencies TEXT: H together should it be necessary. TEXT: H TEXT: H SUBJECT: .NOISE TITLE: .NOISE: Noise Analysis TEXT: H TEXT: H _4._3._4. ._N_O_I_S_E: _N_o_i_s_e _A_n_a_l_y_s_i_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H .NOISE V(OUTPUT <,REF>) SRC ( DEC | LIN | OCT ) PTS FSTART FSTOP TEXT: H + TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H .NOISE V(5) VIN DEC 10 1kHz 100MHz TEXT: H .NOISE V(5,3) V1 OCT 8 1.0 1.0e6 1 TEXT: H TEXT: H TEXT: H TEXT: H The Noise line does a noise analysis of the circuit. TEXT: H OUTPUT is the node at which the total output noise is TEXT: H desired; if REF is specified, then the noise voltage TEXT: H V(OUTPUT) - V(REF) is calculated. By default, REF is TEXT: H assumed to be ground. SRC is the name of an independent TEXT: H source to which input noise is referred. PTS, FSTART and TEXT: H FSTOP are .AC type parameters that specify the frequency TEXT: H range over which plots are desired. PTS_PER_SUMMARY is an TEXT: H optional integer; if specified, the noise contributions of TEXT: H each noise generator is produced every PTS_PER_SUMMARY fre- TEXT: H quency points. TEXT: H TEXT: H The .NOISE control line produces two plots - one for TEXT: H the Noise Spectral Density curves and one for the total TEXT: H Integrated Noise over the specified frequency range. All TEXT: H 2 TEXT: H noise voltages/currents are in squared units (V /Hz and TEXT: H 2 2 2 TEXT: H A /Hz for spectral density, V and A for integrated noise). TEXT: H SUBJECT: .OP TITLE: .OP: Operating Point Analysis TEXT: H TEXT: H _4._3._5. ._O_P: _O_p_e_r_a_t_i_n_g _P_o_i_n_t _A_n_a_l_y_s_i_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H .OP TEXT: H TEXT: H TEXT: H TEXT: H The inclusion of this line in an input file directs TEXT: H SPICE to determine the dc operating point of the circuit TEXT: H with inductors shorted and capacitors opened. Note: a DC TEXT: H analysis is automatically performed prior to a transient TEXT: H analysis to determine the transient initial conditions, and TEXT: H prior to an AC small-signal, Noise, and Pole-Zero analysis TEXT: H to determine the linearized, small-signal models for non- TEXT: H linear devices (see the KEEPOPINFO variable above). TEXT: H TEXT: H SUBJECT: .PZ TITLE: .PZ: Pole-Zero Analysis TEXT: H TEXT: H _4._3._6. ._P_Z: _P_o_l_e-_Z_e_r_o _A_n_a_l_y_s_i_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H .PZ NODE1 NODE2 NODE3 NODE4 CUR POL TEXT: H .PZ NODE1 NODE2 NODE3 NODE4 CUR ZER TEXT: H .PZ NODE1 NODE2 NODE3 NODE4 CUR PZ TEXT: H .PZ NODE1 NODE2 NODE3 NODE4 VOL POL TEXT: H .PZ NODE1 NODE2 NODE3 NODE4 VOL ZER TEXT: H .PZ NODE1 NODE2 NODE3 NODE4 VOL PZ TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H .PZ 1 0 3 0 CUR POL TEXT: H .PZ 2 3 5 0 VOL ZER TEXT: H .PZ 4 1 4 1 CUR PZ TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H CUR stands for a transfer function of the type (output TEXT: H voltage)/(input current) while VOL stands for a transfer TEXT: H function of the type (output voltage)/(input voltage). POL TEXT: H stands for pole analysis only, ZER for zero analysis only TEXT: H and PZ for both. This feature is provided mainly because if TEXT: H there is a nonconvergence in finding poles or zeros, then, TEXT: H at least the other can be found. Finally, NODE1 and NODE2 TEXT: H are the two input nodes and NODE3 and NODE4 are the two out- TEXT: H put nodes. Thus, there is complete freedom regarding the TEXT: H output and input ports and the type of transfer function. TEXT: H TEXT: H In interactive mode, the command syntax is the same TEXT: H except that the first field is PZ instead of .PZ. To print TEXT: H the results, one should use the command 'print all'. TEXT: H TEXT: H SUBJECT: .SENS TITLE: .SENS: DC or Small-Signal AC Sensitivity Analysis TEXT: H TEXT: H _4._3._7. ._S_E_N_S: _D_C _o_r _S_m_a_l_l-_S_i_g_n_a_l _A_C _S_e_n_s_i_t_i_v_i_t_y _A_n_a_l_y_s_i_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H .SENS OUTVAR TEXT: H .SENS OUTVAR AC DEC ND FSTART FSTOP TEXT: H .SENS OUTVAR AC OCT NO FSTART FSTOP TEXT: H .SENS OUTVAR AC LIN NP FSTART FSTOP TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H .SENS V(1,OUT) TEXT: H .SENS V(OUT) AC DEC 10 100 100k TEXT: H .SENS I(VTEST) TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H The sensitivity of OUTVAR to all non-zero device param- TEXT: H eters is calculated when the SENS analysis is specified. TEXT: H OUTVAR is a circuit variable (node voltage or voltage-source TEXT: H branch current). The first form calculates sensitivity of TEXT: H the DC operating-point value of OUTVAR. The second form TEXT: H calculates sensitivity of the AC values of OUTVAR. The TEXT: H parameters listed for AC sensitivity are the same as in an TEXT: H AC analysis (see ".AC" above). The output values are in TEXT: H dimensions of change in output per unit change of input (as TEXT: H opposed to percent change in output or per percent change of TEXT: H input). TEXT: H TEXT: H SUBJECT: .TF TITLE: .TF: Transfer Function Analysis TEXT: H TEXT: H _4._3._8. ._T_F: _T_r_a_n_s_f_e_r _F_u_n_c_t_i_o_n _A_n_a_l_y_s_i_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H .TF OUTVAR INSRC TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H .TF V(5, 3) VIN TEXT: H .TF I(VLOAD) VIN TEXT: H TEXT: H TEXT: H TEXT: H The TF line defines the small-signal output and input TEXT: H for the dc small-signal analysis. OUTVAR is the small- TEXT: H signal output variable and INSRC is the small-signal input TEXT: H source. If this line is included, SPICE computes the dc TEXT: H small-signal value of the transfer function (output/input), TEXT: H input resistance, and output resistance. For the first TEXT: H example, SPICE would compute the ratio of V(5, 3) to VIN, TEXT: H the small-signal input resistance at VIN, and the small- TEXT: H signal output resistance measured across nodes 5 and 3. TEXT: H TEXT: H SUBJECT: .TRAN TITLE: .TRAN: Transient Analysis TEXT: H TEXT: H _4._3._9. ._T_R_A_N: _T_r_a_n_s_i_e_n_t _A_n_a_l_y_s_i_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H .TRAN TSTEP TSTOP > TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H .TRAN 1NS 100NS TEXT: H .TRAN 1NS 1000NS 500NS TEXT: H .TRAN 10NS 1US TEXT: H TEXT: H TEXT: H TEXT: H TSTEP is the printing or plotting increment for line- TEXT: H printer output. For use with the post-processor, TSTEP is TEXT: H the suggested computing increment. TSTOP is the final time, TEXT: H and TSTART is the initial time. If TSTART is omitted, it is TEXT: H assumed to be zero. The transient analysis always begins at TEXT: H time zero. In the interval , the circuit is TEXT: H analyzed (to reach a steady state), but no outputs are TEXT: H stored. In the interval , the circuit is TEXT: H analyzed and outputs are stored. TMAX is the maximum step- TEXT: H size that SPICE uses; for default, the program chooses TEXT: H either TSTEP or (TSTOP-TSTART)/50.0, whichever is smaller. TEXT: H TMAX is useful when one wishes to guarantee a computing TEXT: H interval which is smaller than the printer increment, TSTEP. TEXT: H TEXT: H UIC (use initial conditions) is an optional keyword TEXT: H which indicates that the user does not want SPICE to solve TEXT: H for the quiescent operating point before beginning the tran- TEXT: H sient analysis. If this keyword is specified, SPICE uses TEXT: H the values specified using IC=... on the various elements as TEXT: H the initial transient condition and proceeds with the TEXT: H analysis. If the .IC control line has been specified, then TEXT: H the node voltages on the .IC line are used to compute the TEXT: H initial conditions for the devices. Look at the description TEXT: H on the .IC control line for its interpretation when UIC is TEXT: H not specified. TEXT: H SUBJECT: BATCH OUTPUT TITLE: BATCH OUTPUT TEXT: H TEXT: H _4._4. _B_A_T_C_H _O_U_T_P_U_T TEXT: H TEXT: H SUBTOPIC: NGSPICE:.SAVE Lines SUBTOPIC: NGSPICE:.PRINT Lines SUBTOPIC: NGSPICE:.PLOT Lines SUBTOPIC: NGSPICE:.FOUR SUBJECT: .SAVE Lines TITLE: .SAVE Lines TEXT: H TEXT: H _4._4._1. ._S_A_V_E _L_i_n_e_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H .SAVE _v_e_c_t_o_r _v_e_c_t_o_r _v_e_c_t_o_r ... TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H .SAVE i(vin) input output TEXT: H .SAVE @m1[id] TEXT: H TEXT: H TEXT: H TEXT: H The vectors listed on the .SAVE line are recorded in TEXT: H the rawfile for use later with spice3 or nutmeg (nutmeg is TEXT: H just the data-analysis half of spice3, without the ability TEXT: H to simulate). The standard vector names are accepted. If TEXT: H no .SAVE line is given, then the default set of vectors are TEXT: H saved (node voltages and voltage source branch currents). TEXT: H If .SAVE lines are given, only those vectors specified are TEXT: H saved. For more discussion on internal device data, see TEXT: H Appendix B. See also the section on the interactive command TEXT: H interpretor for information on how to use the rawfile. TEXT: H SUBJECT: .PRINT Lines TITLE: .PRINT Lines TEXT: H TEXT: H _4._4._2. ._P_R_I_N_T _L_i_n_e_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H .PRINT PRTYPE OV1 TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H .PRINT TRAN V(4) I(VIN) TEXT: H .PRINT DC V(2) I(VSRC) V(23, 17) TEXT: H .PRINT AC VM(4, 2) VR(7) VP(8, 3) TEXT: H TEXT: H TEXT: H The Print line defines the contents of a tabular list- TEXT: H ing of one to eight output variables. PRTYPE is the type of TEXT: H the analysis (DC, AC, TRAN, NOISE, or DISTO) for which the TEXT: H specified outputs are desired. The form for voltage or TEXT: H current output variables is the same as given in the previ- TEXT: H ous section for the print command; Spice2 restricts the out- TEXT: H put variable to the following forms (though this restriction TEXT: H is not enforced by Spice3): TEXT: H TEXT: H TEXT: H V(N1<,N2>) TEXT: H specifies the voltage difference between nodes N1 TEXT: H and N2. If N2 (and the preceding comma) is omit- TEXT: H ted, ground (0) is assumed. See the print command TEXT: H in the previous section for more details. For TEXT: H compatibility with spice2, the following five TEXT: H additional values can be accessed for the ac TEXT: H analysis by replacing the "V" in V(N1,N2) with: TEXT: H TEXT: H TEXT: H VR - real part TEXT: H VI - imaginary part TEXT: H VM - magnitude TEXT: H VP - phase TEXT: H VDB - 20 log10(magnitude) TEXT: H TEXT: H TEXT: H TEXT: H I(VXXXXXXX) TEXT: H specifies the current flowing in the independent TEXT: H voltage source named VXXXXXXX. Positive current TEXT: H flows from the positive node, through the source, TEXT: H to the negative node. For the ac analysis, the TEXT: H corresponding replacements for the letter I may be TEXT: H made in the same way as described for voltage out- TEXT: H puts. TEXT: H TEXT: H TEXT: H Output variables for the noise and distortion analyses TEXT: H have a different general form from that of the other ana- TEXT: H lyses. TEXT: H TEXT: H There is no limit on the number of .PRINT lines for TEXT: H each type of analysis. TEXT: H TEXT: H SUBJECT: .PLOT Lines TITLE: .PLOT Lines TEXT: H TEXT: H _4._4._3. ._P_L_O_T _L_i_n_e_s TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H .PLOT PLTYPE OV1 <(PLO1, PHI1)> ... OV8> TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H .PLOT DC V(4) V(5) V(1) TEXT: H .PLOT TRAN V(17, 5) (2, 5) I(VIN) V(17) (1, 9) TEXT: H .PLOT AC VM(5) VM(31, 24) VDB(5) VP(5) TEXT: H .PLOT DISTO HD2 HD3(R) SIM2 TEXT: H .PLOT TRAN V(5, 3) V(4) (0, 5) V(7) (0, 10) TEXT: H TEXT: H TEXT: H The Plot line defines the contents of one plot of TEXT: H from one to eight output variables. PLTYPE is the type TEXT: H of analysis (DC, AC, TRAN, NOISE, or DISTO) for which TEXT: H the specified outputs are desired. The syntax for the TEXT: H OVI is identical to that for the .PRINT line and for the TEXT: H plot command in the interactive mode. TEXT: H TEXT: H TEXT: H The overlap of two or more traces on any plot is indi- TEXT: H cated by the letter X. TEXT: H TEXT: H When more than one output variable appears on the same TEXT: H plot, the first variable specified is printed as well as TEXT: H plotted. If a printout of all variables is desired, then a TEXT: H companion .PRINT line should be included. TEXT: H TEXT: H There is no limit on the number of .PLOT lines speci- TEXT: H fied for each type of analysis. TEXT: H TEXT: H SUBJECT: .FOUR TITLE: .FOUR: Fourier Analysis of Transient Analysis Output TEXT: H TEXT: H _4._4._4. ._F_O_U_R: _F_o_u_r_i_e_r _A_n_a_l_y_s_i_s _o_f _T_r_a_n_s_i_e_n_t _A_n_a_l_y_s_i_s _O_u_t- TEXT: H _p_u_t TEXT: H TEXT: H _G_e_n_e_r_a_l _f_o_r_m: TEXT: H TEXT: H .FOUR FREQ OV1 TEXT: H TEXT: H TEXT: H _E_x_a_m_p_l_e_s: TEXT: H TEXT: H .FOUR 100K V(5) TEXT: H TEXT: H TEXT: H The Four (or Fourier) line controls whether SPICE TEXT: H performs a Fourier analysis as a part of the transient TEXT: H analysis. FREQ is the fundamental frequency, and OV1, TEXT: H desired. The Fourier analysis is performed over the in- TEXT: H terval , where TSTOP is the final TEXT: H time specified for the transient analysis, and period is TEXT: H one period of the fundamental frequency. The dc com- TEXT: H ponent and the first nine harmonics are determined. For TEXT: H maximum accuracy, TMAX (see the .TRAN line) should be TEXT: H set to period/100.0 (or less for very high-Q circuits). TEXT: H SUBJECT: INTERACTIVE INTERPRETER TITLE: INTERACTIVE INTERPRETER TEXT: H TEXT: H _5. _I_N_T_E_R_A_C_T_I_V_E _I_N_T_E_R_P_R_E_T_E_R TEXT: H TEXT: H Spice3 consists of a simulator and a front-end for data TEXT: H analysis and plotting. The front-end may be run as a TEXT: H separate "stand-alone" program under the name Nutmeg. TEXT: H TEXT: H _N_u_t_m_e_g will read in the "raw" data output file created TEXT: H by spice -r or with the write command in an interactive TEXT: H Spice3 session. Nutmeg or interactive Spice3 can plot data TEXT: H from a simulation on a graphics terminal or a workstation TEXT: H display. Most of the commands available in the interactive TEXT: H Spice3 front end are available in nutmeg; where this is not TEXT: H the case, Spice-only commands have been marked with an TEXT: H asterisk ("*"). Note that the raw output file is different TEXT: H from the data that Spice2 writes to the standard output, TEXT: H which may also be produced by spice3 with the "-b" command TEXT: H line option. TEXT: H TEXT: H Spice and Nutmeg use the X Window System for plotting TEXT: H if they find the environment variable DISPLAY. Otherwise, a TEXT: H graphics-terminal independent interface (MFB) is used. If TEXT: H you are using X on a workstation, the DISPLAY variable TEXT: H should already be set; if you want to display graphics on a TEXT: H system different from the one you are running Spice3 or Nut- TEXT: H meg on, DISPLAY should be of the form "_m_a_c_h_i_n_e:0.0". See TEXT: H the appropriate documentation on the X Window Sytem for more TEXT: H details. TEXT: H TEXT: H TEXT: H _C_o_m_m_a_n_d _S_y_n_o_p_s_i_s TEXT: H TEXT: H spice [ -n ] [ -t term ] [ -r rawfile] [ -b ] [ -i ] [ input file ... ] TEXT: H TEXT: H nutmeg [ - ] [ -n ] [ -t term ] [ datafile ... ] TEXT: H TEXT: H TEXT: H TEXT: H TEXT: H Options are: TEXT: H TEXT: H - Don't try to load the default data file TEXT: H ("rawspice.raw") if no other files are given. Nutmeg TEXT: H only. TEXT: H TEXT: H -n (or -N) TEXT: H Don't try to source the file ".spiceinit" upon startup. TEXT: H Normally spice and nutmeg try to find the file in the TEXT: H current directory, and if it is not found then in the TEXT: H user's home directory. TEXT: H TEXT: H -t term (or -T term) TEXT: H The program is being run on a terminal with _m_f_b name TEXT: H term. TEXT: H TEXT: H -b (or -B) TEXT: H Run in batch mode. Spice3 reads the default input TEXT: H source (e.g. keyboard) or reads the given input file TEXT: H and performs the analyses specified; output is either TEXT: H Spice2-like line-printer plots ("ascii plots") or a TEXT: H spice rawfile. See the following section for details. TEXT: H Note that if the input source is not a terminal (e.g. TEXT: H using the IO redirection notation of "<") Spice3 de- TEXT: H faults to batch mode (-i overrides). This option is TEXT: H valid for Spice3 only. TEXT: H TEXT: H TEXT: H TEXT: H -s (or -S) TEXT: H Run in server mode. This is like batch mode, except TEXT: H that a temporary rawfile is used and then written to TEXT: H the standard output, preceded by a line with a single TEXT: H "@", after the simulation is done. This mode is used TEXT: H by the spice daemon. This option is valid for Spice3 TEXT: H only. TEXT: H TEXT: H TEXT: H TEXT: H -i (or -I) TEXT: H Run in interactive mode. This is useful if the stan- TEXT: H dard input is not a terminal but interactive mode is TEXT: H desired. Command completion is not available unless TEXT: H the standard input is a terminal, however. This option TEXT: H is valid for Spice3 only. TEXT: H TEXT: H TEXT: H TEXT: H -r _r_a_w_f_i_l_e (or -P _r_a_w_f_i_l_e) TEXT: H Use _r_a_w_f_i_l_e as the default file into which the results TEXT: H of the simulation are saved. This option is valid for TEXT: H Spice3 only. TEXT: H TEXT: H TEXT: H Further arguments to spice are taken to be Spice3 input TEXT: H files, which are read and saved (if running in batch mode TEXT: H then they are run immediately). Spice3 accepts most Spice2 TEXT: H input file, and output ascii plots, fourier analyses, and TEXT: H node printouts as specified in .plot, .four, and .print TEXT: H cards. If an out parameter is given on a .width card, the TEXT: H effect is the same as set width = .... Since Spice3 ascii TEXT: H plots do not use multiple ranges, however, if vectors TEXT: H together on a .plot card have different ranges they are not TEXT: H provide as much information as they would in Spice2. The TEXT: H output of Spice3 is also much less verbose than Spice2, in TEXT: H that the only data printed is that requested by the above TEXT: H cards. TEXT: H TEXT: H For nutmeg, further arguments are taken to be data TEXT: H files in binary or ascii format (see sconvert(1)) which are TEXT: H loaded into nutmeg. If the file is in binary format, it may TEXT: H be only partially completed (useful for examining Spice2 TEXT: H output before the simulation is finished). One file may TEXT: H contain any number of data sets from different analyses. SUBTOPIC: NGSPICE:EXPRESSIONS FUNCTIONS AND CONSTANTS SUBTOPIC: NGSPICE:COMMAND INTERPRETATION SUBTOPIC: NGSPICE:COMMANDS SUBTOPIC: NGSPICE:CONTROL STRUCTURES SUBTOPIC: NGSPICE:VARIABLES SUBTOPIC: NGSPICE:MISCELLANEOUS SUBTOPIC: NGSPICE:BUGS SUBJECT: EXPRESSIONS FUNCTIONS AND CONSTANTS TITLE: EXPRESSIONS, FUNCTIONS, AND CONSTANTS TEXT: H TEXT: H _5._1. _E_X_P_R_E_S_S_I_O_N_S, _F_U_N_C_T_I_O_N_S, _A_N_D _C_O_N_S_T_A_N_T_S TEXT: H TEXT: H Spice and Nutmeg data is in the form of vectors: time, TEXT: H voltage, etc. Each vector has a type, and vectors can be TEXT: H operated on and combined algebraicly in ways consistent with TEXT: H their types. Vectors are normally created when a data file TEXT: H is read in (see the _l_o_a_d command below), and when the ini- TEXT: H tial datafile is loaded. They can also be created with the TEXT: H _l_e_t command. TEXT: H TEXT: H TEXT: H An expression is an algebraic formula involving vectors TEXT: H and scalars (a scalar is a vector of length 1) and the fol- TEXT: H lowing operations: TEXT: H TEXT: H + - * / ^ % TEXT: H TEXT: H TEXT: H % is the modulo operator, and the comma operator has two TEXT: H meanings: if it is present in the argument list of a user- TEXT: H definable function, it serves to separate the arguments. TEXT: H Otherwise, the term x , y is synonymous with x + j(y). TEXT: H TEXT: H TEXT: H TEXT: H Also available are the logical operations & (and), | TEXT: H (or), ! (not), and the relational operations <, >, >=, <=, TEXT: H =, and <> (not equal). If used in an algebraic expression TEXT: H they work like they would in C, producing values of 0 or 1. TEXT: H The relational operators have the following synonyms: TEXT: H TEXT: H TEXT: H gt > TEXT: H lt < TEXT: H ge >= TEXT: H le <= TEXT: H ne <> TEXT: H eq = TEXT: H and & TEXT: H or | TEXT: H not ! TEXT: H TEXT: H TEXT: H These are useful when < and > might be confused with IO TEXT: H redirection (which is almost always). TEXT: H TEXT: H TEXT: H TEXT: H The following functions are available: TEXT: H TEXT: H mag(vector) The magnitude of vector TEXT: H ph(vector) The phase of vector TEXT: H j(vector) _i (sqrt(-1)) times vector TEXT: H real(vector) The real component of vector TEXT: H imag(vector) The imaginary part of vector TEXT: H db(vector) 20 log10(mag(vector)) TEXT: H log(vector) The logarithm (base 10) of vector TEXT: H ln(vector) The natural logarithm (base e) of vector TEXT: H exp(vector) e to the vector power TEXT: H abs(vector) The absolute value of vector. TEXT: H sqrt(vector) The square root of vector. TEXT: H sin(vector) The sine of vector. TEXT: H cos(vector) The cosine of vector. TEXT: H tan(vector) The tangent of vector. TEXT: H atan(vector) The inverse tangent of vector. TEXT: H norm(vector) The vector normalized to 1 (i.e, the TEXT: H largest magnitude of any component is TEXT: H 1). TEXT: H rnd(vector) A vector with each component a random TEXT: H integer between 0 and the absolute value TEXT: H of the vectors's corresponding com- TEXT: H ponent. TEXT: H mean(vector) The result is a scalar (a length 1 vec- TEXT: H tor) that is the mean of the elements of TEXT: H vector. TEXT: H vector(number) The result is a vector of length number, TEXT: H with elements 0, 1, ... number - 1. If TEXT: H number is a vector then just the first TEXT: H element is taken, and if it isn't an in- TEXT: H teger then the floor of the magnitude is TEXT: H used. TEXT: H length(vector) The length of vector. TEXT: H interpolate(plot.vector) The result of interpolating the named TEXT: H vector onto the scale of the current TEXT: H plot. This function uses the variable TEXT: H polydegree to determine the degree of TEXT: H interpolation. TEXT: H deriv(vector) Calculates the derivative of the given TEXT: H vector. This uses numeric differentia- TEXT: H tion by interpolating a polynomial and TEXT: H may not produce satisfactory results TEXT: H (particularly with iterated differentia- TEXT: H tion). The implementation only cacu- TEXT: H lates the dirivative with respect to the TEXT: H real componant of that vector's scale. TEXT: H TEXT: H TEXT: H A vector may be either the name of a vector already TEXT: H defined or a floating-point number (a scalar). A number may TEXT: H be written in any format acceptable to SPICE, such as TEXT: H 14.6Meg or -1.231e-4. Note that you can either use scien- TEXT: H tific notation or one of the abbreviations like _M_E_G or _G, TEXT: H but not both. As with SPICE, a number may have trailing TEXT: H alphabetic characters after it. TEXT: H TEXT: H The notation expr [num] denotes the num'th element of TEXT: H expr. For multi-dimensional vectors, a vector of one less TEXT: H dimension is returned. Also for multi-dimensional vectors, TEXT: H the notation expr[m][n] will return the _nth element of the TEXT: H mth subvector. To get a subrange of a vector, use the form TEXT: H expr[lower, upper]. TEXT: H TEXT: H To reference vectors in a plot that is not the _c_u_r_r_e_n_t TEXT: H _p_l_o_t (see the setplot command, below), the notation TEXT: H plotname.vecname can be used. TEXT: H TEXT: H TEXT: H Either a plotname or a vector name may be the wildcard TEXT: H all. If the plotname is all, matching vectors from all TEXT: H plots are specified, and if the vector name is all, all vec- TEXT: H tors in the specified plots are referenced. Note that you TEXT: H may not use binary operations on expressions involving wild- TEXT: H cards - it is not obvious what all + all should denote, for TEXT: H instance. Thus some (contrived) examples of expressions TEXT: H are: TEXT: H TEXT: H cos(TIME) + db(v(3)) TEXT: H sin(cos(log([1 2 3 4 5 6 7 8 9 10]))) TEXT: H TIME * rnd(v(9)) - 15 * cos(vin#branch) ^ [7.9e5 8] TEXT: H not ((ac3.FREQ[32] & tran1.TIME[10]) gt 3) TEXT: H TEXT: H TEXT: H TEXT: H Vector names in spice may have a name such as TEXT: H @name[param], where name is either the name of a device TEXT: H instance or model. This denotes the value of the param TEXT: H parameter of the device or model. See Appendix B for TEXT: H details of what parameters are available. The value is a TEXT: H vector of length 1. This function is also available with TEXT: H the show command, and is available with variables for con- TEXT: H venience for command scripts. TEXT: H TEXT: H TEXT: H There are a number of pre-defined constants in nutmeg. TEXT: H They are: TEXT: H TEXT: H pi J (3.14159...) TEXT: H e The base of natural logarithms (2.71828...) TEXT: H c The speed of light (299,792,500 m/sec) TEXT: H i The square root of -1 TEXT: H o TEXT: H kelvin Absolute 0 in Centigrade (-273.15 C) TEXT: H echarge The charge on an electron (1.6021918e-19 C) TEXT: H boltz Boltzman's constant (1.3806226e-23) TEXT: H planck Planck's constant (h = 6.626200e-34) TEXT: H TEXT: H TEXT: H These are all in MKS units. If you have another vari- TEXT: H able with a name that conflicts with one of these then it TEXT: H takes precedence. TEXT: H SUBJECT: COMMAND INTERPRETATION TITLE: COMMAND INTERPRETATION TEXT: H TEXT: H _5._2. _C_O_M_M_A_N_D _I_N_T_E_R_P_R_E_T_A_T_I_O_N TEXT: H TEXT: H If a word is typed as a command, and there is no TEXT: H built-in command with that name, the directories in the TEXT: H _s_o_u_r_c_e_p_a_t_h list are searched in order for the file. If it TEXT: H is found, it is read in as a command file (as if it were TEXT: H sourced). Before it is read, however, the variables _a_r_g_c TEXT: H and _a_r_g_v are set to the number of words following the TEXT: H filename on the command line, and a list of those words TEXT: H respectively. After the file is finished, these variables TEXT: H are unset. Note that if a command file calls another, it TEXT: H must save its _a_r_g_v and _a_r_g_c since they are altered. Also, TEXT: H command files may not be re-entrant since there are no local TEXT: H variables. (Of course, the procedures may explicitly mani- TEXT: H pulate a stack...) This way one can write scripts analogous TEXT: H to shell scripts for nutmeg and Spice3. TEXT: H TEXT: H Note that for the script to work with Spice3, it must TEXT: H begin with a blank line (or whatever else, since it is TEXT: H thrown away) and then a line with .control on it. This is TEXT: H an unfortunate result of the source command being used for TEXT: H both circuit input and command file execution. Note also TEXT: H that this allows the user to merely type the name of a cir- TEXT: H cuit file as a command and it is automatically run. The TEXT: H commands are executed immediately, without running any ana- TEXT: H lyses that may be spicified in the circuit (to execute the TEXT: H analyses before the script executes, include a "run" command TEXT: H in the script). TEXT: H TEXT: H There are various command scripts installed in TEXT: H /_u_s_r/_l_o_c_a_l/_l_i_b/_s_p_i_c_e/_s_c_r_i_p_t_s (or whatever the path is on TEXT: H your machine), and the default _s_o_u_r_c_e_p_a_t_h includes this TEXT: H directory, so you can use these command files (almost) like TEXT: H builtin commands. SUBJECT: COMMANDS TITLE: COMMANDS TEXT: H TEXT: H _5._3. _C_O_M_M_A_N_D_S TEXT: H TEXT: H SUBTOPIC: NGSPICE:Ac SUBTOPIC: NGSPICE:Alias SUBTOPIC: NGSPICE:Alter SUBTOPIC: NGSPICE:Asciiplot SUBTOPIC: NGSPICE:Aspice SUBTOPIC: NGSPICE:Bug SUBTOPIC: NGSPICE:Cd SUBTOPIC: NGSPICE:Destroy SUBTOPIC: NGSPICE:Dc SUBTOPIC: NGSPICE:Define SUBTOPIC: NGSPICE:Delete SUBTOPIC: NGSPICE:Diff SUBTOPIC: NGSPICE:Display SUBTOPIC: NGSPICE:Echo SUBTOPIC: NGSPICE:Edit SUBTOPIC: NGSPICE:Fourier SUBTOPIC: NGSPICE:Hardcopy SUBTOPIC: NGSPICE:Help SUBTOPIC: NGSPICE:History SUBTOPIC: NGSPICE:Iplot SUBTOPIC: NGSPICE:Jobs SUBTOPIC: NGSPICE:Let SUBTOPIC: NGSPICE:Linearize SUBTOPIC: NGSPICE:Listing SUBTOPIC: NGSPICE:Load SUBTOPIC: NGSPICE:Op SUBTOPIC: NGSPICE:Plot SUBTOPIC: NGSPICE:Print SUBTOPIC: NGSPICE:Quit SUBTOPIC: NGSPICE:Rehash SUBTOPIC: NGSPICE:Reset SUBTOPIC: NGSPICE:Reshape SUBTOPIC: NGSPICE:Resume SUBTOPIC: NGSPICE:Rspice SUBTOPIC: NGSPICE:Run SUBTOPIC: NGSPICE:Rusage SUBTOPIC: NGSPICE:Save SUBTOPIC: NGSPICE:Sens SUBTOPIC: NGSPICE:Set SUBTOPIC: NGSPICE:Setcirc SUBTOPIC: NGSPICE:Setplot SUBTOPIC: NGSPICE:Settype SUBTOPIC: NGSPICE:Shell SUBTOPIC: NGSPICE:Shift SUBTOPIC: NGSPICE:Show SUBTOPIC: NGSPICE:Showmod SUBTOPIC: NGSPICE:Source SUBTOPIC: NGSPICE:Status SUBTOPIC: NGSPICE:Step SUBTOPIC: NGSPICE:Stop SUBTOPIC: NGSPICE:Tf SUBTOPIC: NGSPICE:Trace SUBTOPIC: NGSPICE:Tran SUBTOPIC: NGSPICE:Transpose SUBTOPIC: NGSPICE:Unalias SUBTOPIC: NGSPICE:Undefine SUBTOPIC: NGSPICE:Unset SUBTOPIC: NGSPICE:Version SUBTOPIC: NGSPICE:Where SUBTOPIC: NGSPICE:Write SUBTOPIC: NGSPICE:Xgraph SUBJECT: Ac TITLE: Ac*: Perform an AC, small-signal frequency response analysis TEXT: H TEXT: H _5._3._1. _A_c*: _P_e_r_f_o_r_m _a_n _A_C, _s_m_a_l_l-_s_i_g_n_a_l _f_r_e_q_u_e_n_c_y _r_e_s_p_o_n_s_e TEXT: H _a_n_a_l_y_s_i_s TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H ac ( DEC | OCT | LIN ) _N _F_s_t_a_r_t _F_s_t_o_p TEXT: H TEXT: H TEXT: H Do an ac analysis. See the previous sections of TEXT: H this manual for more details. TEXT: H TEXT: H SUBJECT: Alias TITLE: Alias: Create an alias for a command TEXT: H TEXT: H _5._3._2. _A_l_i_a_s: _C_r_e_a_t_e _a_n _a_l_i_a_s _f_o_r _a _c_o_m_m_a_n_d TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H alias [word] [text ...] TEXT: H TEXT: H TEXT: H Causes word to be aliased to text. History substi- TEXT: H tutions may be used, as in C-shell aliases. TEXT: H TEXT: H SUBJECT: Alter TITLE: Alter*: Change a device or model parameter TEXT: H TEXT: H _5._3._3. _A_l_t_e_r*: _C_h_a_n_g_e _a _d_e_v_i_c_e _o_r _m_o_d_e_l _p_a_r_a_m_e_t_e_r TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H alter _d_e_v_i_c_e _v_a_l_u_e TEXT: H alter _d_e_v_i_c_e _p_a_r_a_m_e_t_e_r _v_a_l_u_e [ _p_a_r_a_m_e_t_e_r _v_a_l_u_e ] TEXT: H TEXT: H TEXT: H Alter changes the value for a device or a specified TEXT: H parameter of a device or model. The first form is used TEXT: H by simple devices which have one principal value (resis- TEXT: H tors, capacitors, etc.) where the second form is for TEXT: H more complex devices (bjt's, etc.). Model parameters TEXT: H can be changed with the second form if the name contains TEXT: H a "#". TEXT: H TEXT: H For specifying vectors as values, start the vector TEXT: H with "[", followed by the values in the vector, and end TEXT: H with "]". Be sure to place a space between each of the TEXT: H values and before and after the "[" and "]". TEXT: H TEXT: H SUBJECT: Asciiplot TITLE: Asciiplot: Plot values using old-style character plots TEXT: H TEXT: H _5._3._4. _A_s_c_i_i_p_l_o_t: _P_l_o_t _v_a_l_u_e_s _u_s_i_n_g _o_l_d-_s_t_y_l_e _c_h_a_r_a_c_t_e_r TEXT: H _p_l_o_t_s TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H asciiplot _p_l_o_t_a_r_g_s TEXT: H TEXT: H TEXT: H Produce a line printer plot of the vectors. The TEXT: H plot is sent to the standard output, so you can put it TEXT: H into a file with _a_s_c_i_i_p_l_o_t _a_r_g_s ... > _f_i_l_e. The set op- TEXT: H tions width, height, and nobreak determine the width and TEXT: H height of the plot, and whether there are page breaks, TEXT: H respectively. Note that you will have problems if you TEXT: H try to asciiplot something with an X-scale that isn't TEXT: H monotonic (i.e, something like _s_i_n(_T_I_M_E) ), because as- TEXT: H ciiplot uses a simple-minded linear interpolation. TEXT: H TEXT: H SUBJECT: Aspice TITLE: Aspice: Asynchronous spice run TEXT: H TEXT: H _5._3._5. _A_s_p_i_c_e: _A_s_y_n_c_h_r_o_n_o_u_s _s_p_i_c_e _r_u_n TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H aspice input-file [output-file] TEXT: H TEXT: H TEXT: H Start a SPICE-3 run, and when it is finished load TEXT: H the resulting data. The raw data is kept in a temporary TEXT: H file. If _o_u_t_p_u_t-_f_i_l_e is specified then the diagnostic TEXT: H output is directed into that file, otherwise it is TEXT: H thrown away. TEXT: H TEXT: H SUBJECT: Bug TITLE: Bug: Mail a bug report TEXT: H TEXT: H _5._3._6. _B_u_g: _M_a_i_l _a _b_u_g _r_e_p_o_r_t TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H bug TEXT: H TEXT: H TEXT: H Send a bug report. Please include a short summary TEXT: H of the problem, the version number and name of the TEXT: H operating system that you are running, the version of TEXT: H Spice that you are running, and the relevant spice input TEXT: H file. (If you have defined BUGADDR, the mail is TEXT: H delivered to there.) TEXT: H TEXT: H SUBJECT: Cd TITLE: Cd: Change directory TEXT: H TEXT: H _5._3._7. _C_d: _C_h_a_n_g_e _d_i_r_e_c_t_o_r_y TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H cd [directory] TEXT: H TEXT: H TEXT: H Change the current working directory to directory, TEXT: H or to the user's home directory if none is given. TEXT: H TEXT: H SUBJECT: Destroy TITLE: Destroy: Delete a data set TEXT: H TEXT: H _5._3._8. _D_e_s_t_r_o_y: _D_e_l_e_t_e _a _d_a_t_a _s_e_t TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H destroy [_p_l_o_t_n_a_m_e_s | all] TEXT: H TEXT: H TEXT: H Release the memory holding the data for the speci- TEXT: H fied runs. TEXT: H TEXT: H SUBJECT: Dc TITLE: Dc*: Perform a DC-sweep analysis TEXT: H TEXT: H _5._3._9. _D_c*: _P_e_r_f_o_r_m _a _D_C-_s_w_e_e_p _a_n_a_l_y_s_i_s TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H dc _S_o_u_r_c_e-_N_a_m_e _V_s_t_a_r_t _V_s_t_o_p _V_i_n_c_r [ _S_o_u_r_c_e_2 _V_s_t_a_r_t_2 _V_s_t_o_p_2 _V_i_n_c_r_2 ] TEXT: H TEXT: H TEXT: H Do a dc transfer curve analysis. See the previous TEXT: H sections of this manual for more details. TEXT: H TEXT: H SUBJECT: Define TITLE: Define: Define a function TEXT: H TEXT: H _5._3._1_0. _D_e_f_i_n_e: _D_e_f_i_n_e _a _f_u_n_c_t_i_o_n TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H define function(arg1, arg2, ...) expression TEXT: H TEXT: H TEXT: H Define the _u_s_e_r-_d_e_f_i_n_a_b_l_e _f_u_n_c_t_i_o_n with the name TEXT: H _f_u_n_c_t_i_o_n and arguments _a_r_g_1, _a_r_g_2, ... to be _e_x_p_r_e_s_s_i_o_n, TEXT: H which may involve the arguments. When the function is TEXT: H later used, the arguments it is given are substituted TEXT: H for the formal arguments when it is parsed. If _e_x_p_r_e_s- TEXT: H _s_i_o_n is not present, any definition for _f_u_n_c_t_i_o_n is TEXT: H printed, and if there are no arguments to _d_e_f_i_n_e then TEXT: H all currently active definitions are printed. Note that TEXT: H you may have different functions defined with the same TEXT: H name but different arities. TEXT: H TEXT: H TEXT: H TEXT: H Some useful definitions are: TEXT: H TEXT: H define max(x,y) (x > y) * x + (x <= y) * y TEXT: H define min(x,y) (x < y) * x + (x >= y) * y TEXT: H TEXT: H TEXT: H SUBJECT: Delete TITLE: Delete*: Remove a trace or breakpoint TEXT: H TEXT: H _5._3._1_1. _D_e_l_e_t_e*: _R_e_m_o_v_e _a _t_r_a_c_e _o_r _b_r_e_a_k_p_o_i_n_t TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H delete [ _d_e_b_u_g-_n_u_m_b_e_r ... ] TEXT: H TEXT: H TEXT: H Delete the specified breakpoints and traces. The TEXT: H debug numbers are those shown by the status command (un- TEXT: H less you do status > file, in which case the debug TEXT: H numbers are not printed). TEXT: H TEXT: H SUBJECT: Diff TITLE: Diff: Compare vectors TEXT: H TEXT: H _5._3._1_2. _D_i_f_f: _C_o_m_p_a_r_e _v_e_c_t_o_r_s TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H diff plot1 plot2 [vec ...] TEXT: H TEXT: H TEXT: H Compare all the vectors in the specified _p_l_o_t_s, or TEXT: H only the named vectors if any are given. There are dif- TEXT: H ferent vectors in the two plots, or any values in the TEXT: H vectors differ significantly the difference is reported. TEXT: H The variable diff_abstol, diff_reltol, and diff_vntol TEXT: H are used to determine a significant difference. TEXT: H TEXT: H SUBJECT: Display TITLE: Display: List known vectors and types TEXT: H TEXT: H _5._3._1_3. _D_i_s_p_l_a_y: _L_i_s_t _k_n_o_w_n _v_e_c_t_o_r_s _a_n_d _t_y_p_e_s TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H display [varname ...] TEXT: H TEXT: H TEXT: H Prints a summary of currently defined vectors, or TEXT: H of the names specified. The vectors are sorted by name TEXT: H unless the variable nosort is set. The information TEXT: H given is the name of the vector, the length, the type of TEXT: H the vector, and whether it is real or complex data. Ad- TEXT: H ditionally, one vector is labeled [scale]. When a com- TEXT: H mand such as _p_l_o_t is given without a _v_s argument, this TEXT: H scale is used for the X-axis. It is always the first TEXT: H vector in a rawfile, or the first vector defined in a TEXT: H new plot. If you undefine the scale (i.e, _l_e_t _T_I_M_E = TEXT: H []), one of the remaining vectors becomes the new scale TEXT: H (which is undetermined). TEXT: H TEXT: H SUBJECT: Echo TITLE: Echo: Print text TEXT: H TEXT: H _5._3._1_4. _E_c_h_o: _P_r_i_n_t _t_e_x_t TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H echo [text...] TEXT: H TEXT: H TEXT: H Echos the given text to the screen. TEXT: H TEXT: H SUBJECT: Edit TITLE: Edit*: Edit the current circuit TEXT: H TEXT: H _5._3._1_5. _E_d_i_t*: _E_d_i_t _t_h_e _c_u_r_r_e_n_t _c_i_r_c_u_i_t TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H edit [ _f_i_l_e ] TEXT: H TEXT: H TEXT: H Print the current Spice3 input file into a file, TEXT: H call up the editor on that file and allow the user to TEXT: H modify it, and then read it back in, replacing the ori- TEXT: H ginal file. If a _f_i_l_e_n_a_m_e is given, then edit that file TEXT: H and load it, making the circuit the current one. TEXT: H TEXT: H SUBJECT: Fourier TITLE: Fourier: Perform a fourier transform TEXT: H TEXT: H _5._3._1_6. _F_o_u_r_i_e_r: _P_e_r_f_o_r_m _a _f_o_u_r_i_e_r _t_r_a_n_s_f_o_r_m TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H fourier fundamental_frequency [value ...] TEXT: H TEXT: H TEXT: H Does a fourier analysis of each of the given TEXT: H values, using the first 10 multiples of the fundamental TEXT: H frequency (or the first _n_f_r_e_q_s, if that variable is set TEXT: H - see below). The output is like that of the .four TEXT: H Spice3 line. The values may be any valid expression. TEXT: H The values are interpolated onto a fixed-space grid with TEXT: H the number of points given by the fourgridsize variable, TEXT: H or 200 if it is not set. The interpolation is of degree TEXT: H polydegree if that variable is set, or 1. If polydegree TEXT: H is 0, then no interpolation is done. This is likely to TEXT: H give erroneous results if the time scale is not monoton- TEXT: H ic, though. TEXT: H TEXT: H SUBJECT: Hardcopy TITLE: Hardcopy: Save a plot to a file for printing TEXT: H TEXT: H _5._3._1_7. _H_a_r_d_c_o_p_y: _S_a_v_e _a _p_l_o_t _t_o _a _f_i_l_e _f_o_r _p_r_i_n_t_i_n_g TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H hardcopy file _p_l_o_t_a_r_g_s TEXT: H TEXT: H TEXT: H Just like plot, except creates a file called _f_i_l_e TEXT: H containing the plot. The file is an image in _p_l_o_t(_5) TEXT: H format, and can be printed by either the plot(1) program TEXT: H or lpr with the -g flag. TEXT: H TEXT: H SUBJECT: Help TITLE: Help: Print summaries of Spice3 commands TEXT: H TEXT: H _5._3._1_8. _H_e_l_p: _P_r_i_n_t _s_u_m_m_a_r_i_e_s _o_f _S_p_i_c_e_3 _c_o_m_m_a_n_d_s TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H help [all] [command ...] TEXT: H TEXT: H TEXT: H Prints help. If the argument all is given, a short TEXT: H description of everything you could possibly type is TEXT: H printed. If commands are given, descriptions of those TEXT: H commands are printed. Otherwise help for only a few ma- TEXT: H jor commands is printed. TEXT: H TEXT: H SUBJECT: History TITLE: History: Review previous commands TEXT: H TEXT: H _5._3._1_9. _H_i_s_t_o_r_y: _R_e_v_i_e_w _p_r_e_v_i_o_u_s _c_o_m_m_a_n_d_s TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H history [number] TEXT: H TEXT: H TEXT: H Print out the history, or the last number commands TEXT: H typed at the keyboard. _N_o_t_e: in Spice3 version 3a7 and TEXT: H earlier, all commands (including ones read from files) TEXT: H were saved. TEXT: H TEXT: H SUBJECT: Iplot TITLE: Iplot*: Incremental plot TEXT: H TEXT: H _5._3._2_0. _I_p_l_o_t*: _I_n_c_r_e_m_e_n_t_a_l _p_l_o_t TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H iplot [ node ...] TEXT: H TEXT: H TEXT: H Incrementally plot the values of the nodes while TEXT: H Spice3 runs. The iplot command can be used with the TEXT: H where command to find trouble spots in a transient simu- TEXT: H lation. TEXT: H TEXT: H SUBJECT: Jobs TITLE: Jobs: List active asynchronous spice runs TEXT: H TEXT: H _5._3._2_1. _J_o_b_s: _L_i_s_t _a_c_t_i_v_e _a_s_y_n_c_h_r_o_n_o_u_s _s_p_i_c_e _r_u_n_s TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H jobs TEXT: H TEXT: H TEXT: H Report on the asynchronous SPICE-3 jobs currently TEXT: H running. Nutmeg checks to see if the jobs are finished TEXT: H every time you execute a command. If it is done then TEXT: H the data is loaded and becomes available. TEXT: H TEXT: H SUBJECT: Let TITLE: Let: Assign a value to a vector TEXT: H TEXT: H _5._3._2_2. _L_e_t: _A_s_s_i_g_n _a _v_a_l_u_e _t_o _a _v_e_c_t_o_r TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H let name = expr TEXT: H TEXT: H TEXT: H Creates a new vector called _n_a_m_e with the value TEXT: H specified by _e_x_p_r, an expression as described above. If TEXT: H expr is [] (a zero-length vector) then the vector be- TEXT: H comes undefined. Individual elements of a vector may be TEXT: H modified by appending a subscript to name (ex. name[0]). TEXT: H If there are no arguments, let is the same as display. TEXT: H TEXT: H SUBJECT: Linearize TITLE: Linearize*: Interpolate to a linear scale TEXT: H TEXT: H _5._3._2_3. _L_i_n_e_a_r_i_z_e*: _I_n_t_e_r_p_o_l_a_t_e _t_o _a _l_i_n_e_a_r _s_c_a_l_e TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H linearize vec ... TEXT: H TEXT: H TEXT: H Create a new plot with all of the vectors in the TEXT: H current plot, or only those mentioned if arguments are TEXT: H given. The new vectors are interpolated onto a linear TEXT: H time scale, which is determined by the values of tstep, TEXT: H tstart, and tstop in the currently active transient TEXT: H analysis. The currently loaded input file must include TEXT: H a transient analysis (a tran command may be run interac- TEXT: H tively before the last reset, alternately), and the TEXT: H current plot must be from this transient analysis. This TEXT: H command is needed because Spice3 doesn't output the TEXT: H results from a transient analysis in the same manner TEXT: H that Spice2 did. TEXT: H TEXT: H SUBJECT: Listing TITLE: Listing*: Print a listing of the current circuit TEXT: H TEXT: H _5._3._2_4. _L_i_s_t_i_n_g*: _P_r_i_n_t _a _l_i_s_t_i_n_g _o_f _t_h_e _c_u_r_r_e_n_t _c_i_r_c_u_i_t TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H listing [logical] [physical] [deck] [expand] TEXT: H TEXT: H TEXT: H If the logical argument is given, the listing is TEXT: H with all continuation lines collapsed into one line, and TEXT: H if the physical argument is given the lines are printed TEXT: H out as they were found in the file. The default is log- TEXT: H ical. A deck listing is just like the physical listing, TEXT: H except without the line numbers it recreates the input TEXT: H file verbatim (except that it does not preserve case). TEXT: H If the word expand is present, the circuit is printed TEXT: H with all subcircuits expanded. TEXT: H TEXT: H SUBJECT: Load TITLE: Load: Load rawfile data TEXT: H TEXT: H _5._3._2_5. _L_o_a_d: _L_o_a_d _r_a_w_f_i_l_e _d_a_t_a TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H load [filename] ... TEXT: H TEXT: H TEXT: H Loads either binary or ascii format rawfile data TEXT: H from the files named. The default filename is TEXT: H rawspice.raw, or the argument to the -r flag if there TEXT: H was one. TEXT: H TEXT: H SUBJECT: Op TITLE: Op*: Perform an operating point analysis TEXT: H TEXT: H _5._3._2_6. _O_p*: _P_e_r_f_o_r_m _a_n _o_p_e_r_a_t_i_n_g _p_o_i_n_t _a_n_a_l_y_s_i_s TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H op TEXT: H TEXT: H TEXT: H Do an operating point analysis. See the previous TEXT: H sections of this manual for more details. TEXT: H TEXT: H SUBJECT: Plot TITLE: Plot: Plot values on the display TEXT: H TEXT: H _5._3._2_7. _P_l_o_t: _P_l_o_t _v_a_l_u_e_s _o_n _t_h_e _d_i_s_p_l_a_y TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H plot exprs [ylimit ylo yhi] [xlimit xlo xhi] [xindices xilo xihi] TEXT: H [xcompress comp] [xdelta xdel] [ydelta ydel] [xlog] [ylog] [loglog] TEXT: H [vs xname] [xlabel word] [ylabel word] [title word] [samep] TEXT: H [linear] TEXT: H TEXT: H TEXT: H TEXT: H Plot the given _e_x_p_r_s on the screen (if you are on a TEXT: H graphics terminal). The _x_l_i_m_i_t and _y_l_i_m_i_t arguments deter- TEXT: H mine the high and low x- and y-limits of the axes, respec- TEXT: H tively. The _x_i_n_d_i_c_e_s arguments determine what range of TEXT: H points are to be plotted - everything between the xilo'th TEXT: H point and the xihi'th point is plotted. The _x_c_o_m_p_r_e_s_s argu- TEXT: H ment specifies that only one out of every comp points should TEXT: H be plotted. If an xdelta or a ydelta parameter is present, TEXT: H it specifies the spacing between grid lines on the X- and TEXT: H Y-axis. These parameter names may be abbreviated to _x_l, _y_l, TEXT: H _x_i_n_d, _x_c_o_m_p, _x_d_e_l, and _y_d_e_l respectively. TEXT: H TEXT: H The _x_n_a_m_e argument is an expression to use as the scale TEXT: H on the x-axis. If xlog or ylog are present then the X or Y TEXT: H scale, respectively, is logarithmic (loglog is the same as TEXT: H specifying both). The xlabel and ylabel arguments cause the TEXT: H specified labels to be used for the X and Y axes, respec- TEXT: H tively. TEXT: H TEXT: H If samep is given, the values of the other parameters TEXT: H (other than xname) from the previous plot, hardcopy, or TEXT: H asciiplot command is used unless re-defined on the command TEXT: H line. TEXT: H TEXT: H The title argument is used in the place of the plot TEXT: H name at the bottom of the graph. TEXT: H TEXT: H The linear keyword is used to override a default log- TEXT: H scale plot (as in the output for an AC analysis). TEXT: H TEXT: H Finally, the keyword polar to generate a polar plot. TEXT: H To produce a smith plot, use the keyword smith. Note that TEXT: H the data is transformed, so for smith plots you will see the TEXT: H data transformed by the function (x-1)/(x+1). To produce a TEXT: H polar plot with a smith grid but without performing the TEXT: H smith transform, use the keyword smithgrid. TEXT: H SUBJECT: Print TITLE: Print: Print values TEXT: H TEXT: H _5._3._2_8. _P_r_i_n_t: _P_r_i_n_t _v_a_l_u_e_s TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H print [col] [line] expr ... TEXT: H TEXT: H TEXT: H Prints the vector described by the expression _e_x_p_r. TEXT: H If the _c_o_l argument is present, print the vectors named TEXT: H side by side. If line is given, the vectors are printed TEXT: H horizontally. col is the default, unless all the vec- TEXT: H tors named have a length of one, in which case line is TEXT: H the default. The options width, length, and nobreak are TEXT: H effective for this command (see asciiplot). If the ex- TEXT: H pression is all, all of the vectors available are print- TEXT: H ed. Thus print col all > file prints everything in the TEXT: H file in SPICE2 format. The scale vector (time, frequen- TEXT: H cy) is always in the first column unless the variable TEXT: H noprintscale is true. TEXT: H TEXT: H SUBJECT: Quit TITLE: Quit: Leave Spice3 or Nutmeg TEXT: H TEXT: H _5._3._2_9. _Q_u_i_t: _L_e_a_v_e _S_p_i_c_e_3 _o_r _N_u_t_m_e_g TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H quit TEXT: H TEXT: H TEXT: H Quit nutmeg or spice. TEXT: H TEXT: H SUBJECT: Rehash TITLE: Rehash: Reset internal hash tables TEXT: H TEXT: H _5._3._3_0. _R_e_h_a_s_h: _R_e_s_e_t _i_n_t_e_r_n_a_l _h_a_s_h _t_a_b_l_e_s TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H rehash TEXT: H TEXT: H TEXT: H Recalculate the internal hash tables used when TEXT: H looking up UNIX commands, and make all UNIX commands in TEXT: H the user's PATH available for command completion. This TEXT: H is useless unless you have set unixcom first (see TEXT: H above). TEXT: H TEXT: H SUBJECT: Reset TITLE: Reset*: Reset an analysis TEXT: H TEXT: H _5._3._3_1. _R_e_s_e_t*: _R_e_s_e_t _a_n _a_n_a_l_y_s_i_s TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H reset TEXT: H TEXT: H TEXT: H Throw out any intermediate data in the circuit TEXT: H (e.g, after a breakpoint or after one or more analyses TEXT: H have been done already), and re-parse the input file. TEXT: H The circuit can then be re-run from it's initial state, TEXT: H overriding the effect of any set or alter commands. In TEXT: H Spice-3e and earlier versions this was done automatical- TEXT: H ly by the run command. TEXT: H TEXT: H SUBJECT: Reshape TITLE: Reshape: Alter the dimensionality or dimensions of a vector TEXT: H TEXT: H _5._3._3_2. _R_e_s_h_a_p_e: _A_l_t_e_r _t_h_e _d_i_m_e_n_s_i_o_n_a_l_i_t_y _o_r _d_i_m_e_n_s_i_o_n_s _o_f TEXT: H _a _v_e_c_t_o_r TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H reshape _v_e_c_t_o_r _v_e_c_t_o_r ... TEXT: H or TEXT: H reshape _v_e_c_t_o_r _v_e_c_t_o_r ... [ _d_i_m_e_n_s_i_o_n, _d_i_m_e_n_s_i_o_n, ... ] TEXT: H or TEXT: H reshape _v_e_c_t_o_r _v_e_c_t_o_r ... [ _d_i_m_e_n_s_i_o_n ][ _d_i_m_e_n_s_i_o_n ] ... TEXT: H TEXT: H TEXT: H This command changes the dimensions of a vector or TEXT: H a set of vectors. The final dimension may be left off TEXT: H and it will be filled in automatically. If no dimen- TEXT: H sions are specified, then the dimensions of the first TEXT: H vector are copied to the other vectors. An error mes- TEXT: H sage of the form 'dimensions of _x were inconsistent' can TEXT: H be ignored. TEXT: H TEXT: H SUBJECT: Resume TITLE: Resume*: Continue a simulation after a stop TEXT: H TEXT: H _5._3._3_3. _R_e_s_u_m_e*: _C_o_n_t_i_n_u_e _a _s_i_m_u_l_a_t_i_o_n _a_f_t_e_r _a _s_t_o_p TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H resume TEXT: H TEXT: H TEXT: H Resume a simulation after a stop or interruption TEXT: H (control-C). TEXT: H TEXT: H SUBJECT: Rspice TITLE: Rspice: Remote spice submission TEXT: H TEXT: H _5._3._3_4. _R_s_p_i_c_e: _R_e_m_o_t_e _s_p_i_c_e _s_u_b_m_i_s_s_i_o_n TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H rspice _i_n_p_u_t _f_i_l_e TEXT: H TEXT: H TEXT: H Runs a SPICE-3 remotely taking the input file as a TEXT: H SPICE-3 input file, or the current circuit if no argu- TEXT: H ment is given. Nutmeg or Spice3 waits for the job to TEXT: H complete, and passes output from the remote job to the TEXT: H user's standard output. When the job is finished the TEXT: H data is loaded in as with aspice. If the variable _r_h_o_s_t TEXT: H is set, nutmeg connects to this host instead of the de- TEXT: H fault remote Spice3 server machine. This command uses TEXT: H the "rsh" command and thereby requires authentication TEXT: H via a ".rhosts" file or other equivalent method. Note TEXT: H that "rsh" refers to the "remote shell" program, which TEXT: H may be "remsh" on your system; to override the default TEXT: H name of "rsh", set the variable _r_e_m_o_t_e__s_h_e_l_l. If the TEXT: H variable _r_p_r_o_g_r_a_m is set, then rspice uses this as the TEXT: H pathname to the program to run on the remote system. TEXT: H TEXT: H Note: rspice will not acknowledge elements that TEXT: H have been changed via the "alter" or "altermod" com- TEXT: H mands. TEXT: H TEXT: H SUBJECT: Run TITLE: Run*: Run analysis from the input file TEXT: H TEXT: H _5._3._3_5. _R_u_n*: _R_u_n _a_n_a_l_y_s_i_s _f_r_o_m _t_h_e _i_n_p_u_t _f_i_l_e TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H run [rawfile] TEXT: H TEXT: H TEXT: H Run the simulation as specified in the input file. TEXT: H If there were any of the control lines .ac, .op, .tran, TEXT: H or .dc, they are executed. The output is put in rawfile TEXT: H if it was given, in addition to being available interac- TEXT: H tively. In Spice-3e and earlier versions, the input TEXT: H file would be re-read and any effects of the set or TEXT: H alter commands would be reversed. This is no longer the TEXT: H effect. TEXT: H TEXT: H SUBJECT: Rusage TITLE: Rusage: Resource usage TEXT: H TEXT: H _5._3._3_6. _R_u_s_a_g_e: _R_e_s_o_u_r_c_e _u_s_a_g_e TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H rusage [resource ...] TEXT: H TEXT: H TEXT: H Print resource usage statistics. If any resources TEXT: H are given, just print the usage of that resource. Most TEXT: H resources require that a circuit be loaded. Currently TEXT: H valid resources are: TEXT: H TEXT: H elapsed The amount of time elapsed since the last rusage TEXT: H elaped call. TEXT: H faults Number of page faults and context switches (BSD only). TEXT: H space Data space used. TEXT: H time CPU time used so far. TEXT: H TEXT: H temp Operating temperature. TEXT: H tnom Temperature at which device parameters were measured. TEXT: H equations Circuit Equations TEXT: H TEXT: H time Total Analysis Time TEXT: H totiter Total iterations TEXT: H accept Accepted timepoints TEXT: H rejected Rejected timepoints TEXT: H TEXT: H loadtime Time spent loading the circuit matrix and RHS. TEXT: H reordertime Matrix reordering time TEXT: H lutime L-U decomposition time TEXT: H solvetime Matrix solve time TEXT: H TEXT: H trantime Transient analysis time TEXT: H tranpoints Transient timepoints TEXT: H traniter Transient iterations TEXT: H trancuriters Transient iterations for the last time point* TEXT: H tranlutime Transient L-U decomposition time TEXT: H transolvetime Transient matrix solve time TEXT: H TEXT: H everything All of the above. TEXT: H TEXT: H * listed incorrectly as "Transient iterations per point". TEXT: H TEXT: H SUBJECT: Save TITLE: Save*: Save a set of outputs TEXT: H TEXT: H _5._3._3_7. _S_a_v_e*: _S_a_v_e _a _s_e_t _o_f _o_u_t_p_u_t_s TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H save [all | _o_u_t_p_u_t ...] TEXT: H .save [all | _o_u_t_p_u_t ...] TEXT: H TEXT: H TEXT: H Save a set of outputs, discarding the rest. If a TEXT: H node has been mentioned in a save command, it appears in TEXT: H the working plot after a run has completed, or in the TEXT: H rawfile if spice is run in batch mode. If a node is TEXT: H traced or plotted (see below) it is also saved. For TEXT: H backward compatibility, if there are no save commands TEXT: H given, all outputs are saved. TEXT: H TEXT: H When the keyword "all" or the keyword "allv", appears in TEXT: H the save command, all node voltages, voltage source TEXT: H currents and inductor currents are saved in addition to TEXT: H any other values listed. If the keyword "alli" appears TEXT: H in the save command, all devices currents are saved. TEXT: H TEXT: H Note: the current implementation saves only the currents TEXT: H of devices which have internal nodes, i.e. MOSFETs TEXT: H with non zero RD and RS; BJTs with non-zero RC, RB TEXT: H and RE; DIODEs with non-zero RS; etc. Resistor and TEXT: H capacitor currents are not saved with this option. TEXT: H These deficiencies will be addressed in a later TEXT: H revision. SUBJECT: Sens TITLE: Sens*: Run a sensitivity analysis TEXT: H TEXT: H _5._3._3_8. _S_e_n_s*: _R_u_n _a _s_e_n_s_i_t_i_v_i_t_y _a_n_a_l_y_s_i_s TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H sens _o_u_t_p_u_t__v_a_r_i_a_b_l_e TEXT: H sens _o_u_t_p_u_t__v_a_r_i_a_b_l_e ac ( DEC | OCT | LIN ) _N _F_s_t_a_r_t _F_s_t_o_p TEXT: H TEXT: H TEXT: H Perform a Sensitivity analysis. _o_u_t_p_u_t__v_a_r_i_a_b_l_e is TEXT: H either a node voltage (ex. "v(1)" or "v(A,out)") or a TEXT: H current through a voltage source (ex. "i(vtest)"). The TEXT: H first form calculates DC sensitivities, the second form TEXT: H calculates AC sensitivies. The output values are in di- TEXT: H mensions of change in output per unit change of input TEXT: H (as opposed to percent change in output or per percent TEXT: H change of input). TEXT: H TEXT: H SUBJECT: Set TITLE: Set: Set the value of a variable TEXT: H TEXT: H _5._3._3_9. _S_e_t: _S_e_t _t_h_e _v_a_l_u_e _o_f _a _v_a_r_i_a_b_l_e TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H set [word] TEXT: H set [word = value] ... TEXT: H TEXT: H TEXT: H Set the value of word to be value, if it is TEXT: H present. You can set any word to be any value, numeric TEXT: H or string. If no value is given then the value is the TEXT: H boolean 'true'. TEXT: H TEXT: H TEXT: H The value of _w_o_r_d may be inserted into a command by TEXT: H writing $_w_o_r_d. If a variable is set to a list of values TEXT: H that are enclosed in parentheses (which must be separated TEXT: H from their values by white space), the value of the variable TEXT: H is the list. TEXT: H TEXT: H The variables used by nutmeg are listed in the follow- TEXT: H ing section. TEXT: H SUBJECT: Setcirc TITLE: Setcirc*: Change the current circuit TEXT: H TEXT: H _5._3._4_0. _S_e_t_c_i_r_c*: _C_h_a_n_g_e _t_h_e _c_u_r_r_e_n_t _c_i_r_c_u_i_t TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H setcirc [circuit name] TEXT: H TEXT: H TEXT: H The current circuit is the one that is used for the TEXT: H simulation commands below. When a circuit is loaded TEXT: H with the source command (see below) it becomes the TEXT: H current circuit. TEXT: H TEXT: H SUBJECT: Setplot TITLE: Setplot: Switch the current set of vectors TEXT: H TEXT: H _5._3._4_1. _S_e_t_p_l_o_t: _S_w_i_t_c_h _t_h_e _c_u_r_r_e_n_t _s_e_t _o_f _v_e_c_t_o_r_s TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H setplot [plotname] TEXT: H TEXT: H TEXT: H Set the current plot to the plot with the given TEXT: H name, or if no name is given, prompt the user with a TEXT: H menu. (Note that the plots are named as they are loaded, TEXT: H with names like tran1 or op2. These names are shown by TEXT: H the setplot and display commands and are used by diff, TEXT: H below.) If the "New plot" item is selected, the current TEXT: H plot becomes one with no vectors defined. TEXT: H TEXT: H Note that here the word "plot" refers to a group of TEXT: H vectors that are the result of one SPICE run. When more TEXT: H than one file is loaded in, or more than one plot is TEXT: H present in one file, nutmeg keeps them separate and only TEXT: H shows you the vectors in the current plot. TEXT: H TEXT: H SUBJECT: Settype TITLE: Settype: Set the type of a vector TEXT: H TEXT: H _5._3._4_2. _S_e_t_t_y_p_e: _S_e_t _t_h_e _t_y_p_e _o_f _a _v_e_c_t_o_r TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H settype type vector ... TEXT: H TEXT: H TEXT: H Change the type of the named vectors to type. Type TEXT: H names can be found in the manual page for sconvert. TEXT: H TEXT: H SUBJECT: Shell TITLE: Shell: Call the command interpreter TEXT: H TEXT: H _5._3._4_3. _S_h_e_l_l: _C_a_l_l _t_h_e _c_o_m_m_a_n_d _i_n_t_e_r_p_r_e_t_e_r TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H shell [ _c_o_m_m_a_n_d ] TEXT: H TEXT: H TEXT: H Call the operating system's command interpreter; TEXT: H execute the specified command or call for interactive TEXT: H use. TEXT: H TEXT: H SUBJECT: Shift TITLE: Shift: Alter a list variable TEXT: H TEXT: H _5._3._4_4. _S_h_i_f_t: _A_l_t_e_r _a _l_i_s_t _v_a_r_i_a_b_l_e TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H shift [varname] [number] TEXT: H TEXT: H TEXT: H If _v_a_r_n_a_m_e is the name of a list variable, it is TEXT: H shifted to the left by _n_u_m_b_e_r elements (i.e, the _n_u_m_b_e_r TEXT: H leftmost elements are removed). The default _v_a_r_n_a_m_e is TEXT: H argv, and the default _n_u_m_b_e_r is 1. TEXT: H TEXT: H SUBJECT: Show TITLE: Show*: List device state TEXT: H TEXT: H _5._3._4_5. _S_h_o_w*: _L_i_s_t _d_e_v_i_c_e _s_t_a_t_e TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H show _d_e_v_i_c_e_s [ : _p_a_r_a_m_e_t_e_r_s ] , ... TEXT: H TEXT: H TEXT: H _O_l_d _F_o_r_m TEXT: H TEXT: H show -v @_d_e_v_i_c_e [ [ _n_a_m_e ] ] TEXT: H TEXT: H TEXT: H The show command prints out tables summarizing the TEXT: H operating condition of selected devices (much like the TEXT: H spice2 operation point summary). If _d_e_v_i_c_e is missing, TEXT: H a default set of devices are listed, if _d_e_v_i_c_e is a sin- TEXT: H gle letter, devices of that type are listed; if _d_e_v_i_c_e TEXT: H is a subcircuit name (beginning and ending in ":") only TEXT: H devices in that subcircuit are shown (end the name in a TEXT: H double-":" to get devices within sub-subcircuits recur- TEXT: H sively). The second and third forms may be combined TEXT: H ("letter:subcircuit:") or "letter:subcircuit::") to TEXT: H select a specific type of device from a subcircuit. A TEXT: H device's full name may be specified to list only that TEXT: H device. Finally, devices may be selected by model by TEXT: H using the form "#modelname" or ":subcircuit#modelname" TEXT: H or "letter:subcircuit#modelname". TEXT: H TEXT: H If no _p_a_r_a_m_e_t_e_r_s are specified, the values for a TEXT: H standard set of parameters are listed. If the list of TEXT: H _p_a_r_a_m_e_t_e_r_s contains a "+", the default set of parameters TEXT: H is listed along with any other specified parameters. TEXT: H TEXT: H For both _d_e_v_i_c_e_s and _p_a_r_a_m_e_t_e_r_s, the word "all" has TEXT: H the obvious meaning. Note: there must be spaces TEXT: H separating the ":" that divides the _d_e_v_i_c_e list from the TEXT: H _p_a_r_a_m_e_t_e_r list. TEXT: H TEXT: H The "old form" (with "-v") prints the data in a TEXT: H older, more verbose pre-spice3f format. TEXT: H TEXT: H SUBJECT: Showmod TITLE: Showmod*: List model parameter values TEXT: H TEXT: H _5._3._4_6. _S_h_o_w_m_o_d*: _L_i_s_t _m_o_d_e_l _p_a_r_a_m_e_t_e_r _v_a_l_u_e_s TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H showmod _m_o_d_e_l_s [ : _p_a_r_a_m_e_t_e_r_s ] , ... TEXT: H TEXT: H TEXT: H The showmod command operates like the show command TEXT: H (above) but prints out model parameter values. The ap- TEXT: H plicable forms for _m_o_d_e_l_s are a single letter specifying TEXT: H the device type letter, "letter:subckt:", "modelname", TEXT: H ":subckt:modelname", or "letter:subcircuit:modelname". TEXT: H TEXT: H SUBJECT: Source TITLE: Source: Read a Spice3 input file TEXT: H TEXT: H _5._3._4_7. _S_o_u_r_c_e: _R_e_a_d _a _S_p_i_c_e_3 _i_n_p_u_t _f_i_l_e TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H source _f_i_l_e TEXT: H TEXT: H TEXT: H For Spice3: Read the Spice3 input file file. Nut- TEXT: H meg and Spice3 commands may be included in the file, and TEXT: H must be enclosed between the lines ._c_o_n_t_r_o_l and ._e_n_d_c. TEXT: H These commands are executed immediately after the cir- TEXT: H cuit is loaded, so a control line of _a_c ... works the TEXT: H same as the corresponding ._a_c card. The first line in TEXT: H any input file is considered a title line and not parsed TEXT: H but kept as the name of the circuit. The exception to TEXT: H this rule is the file ._s_p_i_c_e_i_n_i_t. Thus, a Spice3 com- TEXT: H mand script must begin with a blank line and then with a TEXT: H .control line. Also, any line beginning with the char- TEXT: H acters *# is considered a control line. This makes it TEXT: H possible to imbed commands in Spice3 input files that TEXT: H are ignored by earlier versions of Spice2 TEXT: H TEXT: H For Nutmeg: Reads commands from the file _f_i_l_e_n_a_m_e. TEXT: H Lines beginning with the character * are considered com- TEXT: H ments and ignored. TEXT: H TEXT: H SUBJECT: Status TITLE: Status*: Display breakpoint information TEXT: H TEXT: H _5._3._4_8. _S_t_a_t_u_s*: _D_i_s_p_l_a_y _b_r_e_a_k_p_o_i_n_t _i_n_f_o_r_m_a_t_i_o_n TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H status TEXT: H TEXT: H TEXT: H Display all of the traces and breakpoints currently TEXT: H in effect. TEXT: H TEXT: H SUBJECT: Step TITLE: Step*: Run a fixed number of timepoints TEXT: H TEXT: H _5._3._4_9. _S_t_e_p*: _R_u_n _a _f_i_x_e_d _n_u_m_b_e_r _o_f _t_i_m_e_p_o_i_n_t_s TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H step [number] TEXT: H TEXT: H TEXT: H Iterate number times, or once, and then stop. TEXT: H TEXT: H SUBJECT: Stop TITLE: Stop*: Set a breakpoint TEXT: H TEXT: H _5._3._5_0. _S_t_o_p*: _S_e_t _a _b_r_e_a_k_p_o_i_n_t TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H stop [ after n] [ when _v_a_l_u_e _c_o_n_d _v_a_l_u_e ] ... TEXT: H TEXT: H TEXT: H Set a breakpoint. The argument after n means stop TEXT: H after n iteration number n, and the argument when _v_a_l_u_e TEXT: H _c_o_n_d _v_a_l_u_e means stop when the first _v_a_l_u_e is in the TEXT: H given relation with the second _v_a_l_u_e, the possible rela- TEXT: H tions being TEXT: H TEXT: H eq or = equal to TEXT: H ne or <> not equal to TEXT: H gt or > greater than TEXT: H lt or < less than TEXT: H ge or >= greater than or equal to TEXT: H le or <= less than or equal to TEXT: H TEXT: H TEXT: H IO redirection is disabled for the stop command, since the TEXT: H relational operations conflict with it (it doesn't produce TEXT: H any output anyway). The _v_a_l_u_es above may be node names in TEXT: H the running circuit, or real values. If more than one con- TEXT: H dition is given, e.g. stop after 4 when v(1) > 4 when v(2) TEXT: H < 2, the conjunction of the conditions is implied. TEXT: H TEXT: H SUBJECT: Tf TITLE: Tf*: Run a Transfer Function analysis TEXT: H TEXT: H _5._3._5_1. _T_f*: _R_u_n _a _T_r_a_n_s_f_e_r _F_u_n_c_t_i_o_n _a_n_a_l_y_s_i_s TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H tf _o_u_t_p_u_t__n_o_d_e _i_n_p_u_t__s_o_u_r_c_e TEXT: H TEXT: H TEXT: H The tf command performs a transfer function TEXT: H analysis, returning the transfer function TEXT: H (output/input), output resistance, and input resistance TEXT: H between the given output node and the given input TEXT: H source. The analysis assumes a small-signal DC (slowly TEXT: H varying) input. TEXT: H TEXT: H SUBJECT: Trace TITLE: Trace*: Trace nodes TEXT: H TEXT: H _5._3._5_2. _T_r_a_c_e*: _T_r_a_c_e _n_o_d_e_s TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H trace [ node ...] TEXT: H TEXT: H TEXT: H For every step of an analysis, the value of the TEXT: H node is printed. Several traces may be active at once. TEXT: H Tracing is not applicable for all analyses. To remove a TEXT: H trace, use the delete command. TEXT: H TEXT: H SUBJECT: Tran TITLE: Tran*: Perform a transient analysis TEXT: H TEXT: H _5._3._5_3. _T_r_a_n*: _P_e_r_f_o_r_m _a _t_r_a_n_s_i_e_n_t _a_n_a_l_y_s_i_s TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H tran _T_s_t_e_p _T_s_t_o_p [ _T_s_t_a_r_t [ _T_m_a_x ] ] [ UIC ] TEXT: H TEXT: H TEXT: H Perform a transient analysis. See the previous TEXT: H sections of this manual for more details. TEXT: H TEXT: H SUBJECT: Transpose TITLE: Transpose: Swap the elements in a multi-dimensional data set TEXT: H TEXT: H _5._3._5_4. _T_r_a_n_s_p_o_s_e: _S_w_a_p _t_h_e _e_l_e_m_e_n_t_s _i_n _a _m_u_l_t_i-_d_i_m_e_n_s_i_o_n_a_l TEXT: H _d_a_t_a _s_e_t TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H transpose _v_e_c_t_o_r _v_e_c_t_o_r ... TEXT: H TEXT: H TEXT: H This command transposes a multidimensional vector. TEXT: H No analysis in Spice3 produces multidimensional vectors, TEXT: H although the DC transfer curve may be run with two vary- TEXT: H ing sources. You must use the "reshape" command to re- TEXT: H form the one-dimensional vectors into two dimensional TEXT: H vectors. In addition, the default scale is incorrect TEXT: H for plotting. You must plot versus the vector TEXT: H corresponding to the second source, but you must also TEXT: H refer only to the first segment of this second source TEXT: H vector. For example (circuit to produce the tranfer TEXT: H characteristic of a MOS transistor): TEXT: H TEXT: H spice3 > dc vgg 0 5 1 vdd 0 5 1 TEXT: H spice3 > plot i(vdd) TEXT: H spice3 > reshape all [6,6] TEXT: H spice3 > transpose i(vdd) v(drain) TEXT: H spice3 > plot i(vdd) vs v(drain)[0] TEXT: H TEXT: H TEXT: H SUBJECT: Unalias TITLE: Unalias: Retract an alias TEXT: H TEXT: H _5._3._5_5. _U_n_a_l_i_a_s: _R_e_t_r_a_c_t _a_n _a_l_i_a_s TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H unalias [word ...] TEXT: H TEXT: H TEXT: H Removes any aliases present for the words. TEXT: H TEXT: H SUBJECT: Undefine TITLE: Undefine: Retract a definition TEXT: H TEXT: H _5._3._5_6. _U_n_d_e_f_i_n_e: _R_e_t_r_a_c_t _a _d_e_f_i_n_i_t_i_o_n TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H undefine function TEXT: H TEXT: H TEXT: H Definitions for the named user-defined functions TEXT: H are deleted. TEXT: H TEXT: H SUBJECT: Unset TITLE: Unset: Clear a variable TEXT: H TEXT: H _5._3._5_7. _U_n_s_e_t: _C_l_e_a_r _a _v_a_r_i_a_b_l_e TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H unset [_w_o_r_d ...] TEXT: H TEXT: H TEXT: H Clear the value of the specified variable(s) TEXT: H (_w_o_r_d). TEXT: H TEXT: H SUBJECT: Version TITLE: Version: Print the version of Spice TEXT: H TEXT: H _5._3._5_8. _V_e_r_s_i_o_n: _P_r_i_n_t _t_h_e _v_e_r_s_i_o_n _o_f _S_p_i_c_e TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H version [version id] TEXT: H TEXT: H TEXT: H Print out the version of nutmeg that is running. TEXT: H If there are arguments, it checks to make sure that the TEXT: H arguments match the current version of SPICE. (This is TEXT: H mainly used as a Command: line in rawfiles.) TEXT: H TEXT: H SUBJECT: Where TITLE: Where: Identify troublesome node or device TEXT: H TEXT: H _5._3._5_9. _W_h_e_r_e: _I_d_e_n_t_i_f_y _t_r_o_u_b_l_e_s_o_m_e _n_o_d_e _o_r _d_e_v_i_c_e TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H where TEXT: H TEXT: H TEXT: H When performing a transient or operating point TEXT: H analysis, the name of the last node or device to cause TEXT: H non-convergence is saved. The where command prints out TEXT: H this information so that you can examine the circuit and TEXT: H either correct the problem or make a bug report. You TEXT: H may do this either in the middle of a run or after the TEXT: H simulator has given up on the analysis. For transient TEXT: H simulation, the iplot command can be used to monitor the TEXT: H progress of the analysis. When the analysis slows down TEXT: H severly or hangs, interrupt the simulator (with TEXT: H control-C) and issue the where command. Note that only TEXT: H one node or device is printed; there may be problems TEXT: H with more than one node. TEXT: H TEXT: H SUBJECT: Write TITLE: Write: Write data to a file TEXT: H TEXT: H _5._3._6_0. _W_r_i_t_e: _W_r_i_t_e _d_a_t_a _t_o _a _f_i_l_e TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H write [file] [exprs] TEXT: H TEXT: H TEXT: H Writes out the expressions to _f_i_l_e. TEXT: H TEXT: H First vectors are grouped together by plots, and TEXT: H written out as such (i.e, if the expression list con- TEXT: H tained three vectors from one plot and two from another, TEXT: H then two plots are written, one with three vectors and TEXT: H one with two). Additionally, if the scale for a vector TEXT: H isn't present, it is automatically written out as well. TEXT: H TEXT: H The default format is ascii, but this can be TEXT: H changed with the set filetype command. The default TEXT: H filename is rawspice.raw, or the argument to the -r flag TEXT: H on the command line, if there was one, and the default TEXT: H expression list is all. TEXT: H TEXT: H SUBJECT: Xgraph TITLE: Xgraph: use the xgraph(1) program for plotting. TEXT: H TEXT: H _5._3._6_1. _X_g_r_a_p_h: _u_s_e _t_h_e _x_g_r_a_p_h(_1) _p_r_o_g_r_a_m _f_o_r _p_l_o_t_t_i_n_g. TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H xgraph _f_i_l_e [exprs] [plot options] TEXT: H TEXT: H TEXT: H The spice3/nutmeg xgraph command plots data like TEXT: H the plot command but via xgraph, a popular X11 plotting TEXT: H program. TEXT: H TEXT: H If _f_i_l_e is either "temp" or "tmp" a temporary file TEXT: H is used to hold the data while being plotted. For TEXT: H available plot options, see the plot command. All op- TEXT: H tions except for polar or smith plots are supported. TEXT: H SUBJECT: CONTROL STRUCTURES TITLE: CONTROL STRUCTURES TEXT: H TEXT: H _5._4. _C_O_N_T_R_O_L _S_T_R_U_C_T_U_R_E_S TEXT: H TEXT: H SUBTOPIC: NGSPICE:While End SUBTOPIC: NGSPICE:Repeat End SUBTOPIC: NGSPICE:Dowhile End SUBTOPIC: NGSPICE:Foreach End SUBTOPIC: NGSPICE:If Then Else SUBTOPIC: NGSPICE:Label SUBTOPIC: NGSPICE:Goto SUBTOPIC: NGSPICE:Continue SUBTOPIC: NGSPICE:Break SUBJECT: While End TITLE: While - End TEXT: H TEXT: H _5._4._1. _W_h_i_l_e - _E_n_d TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H while _c_o_n_d_i_t_i_o_n TEXT: H statement TEXT: H ... TEXT: H end TEXT: H TEXT: H TEXT: H While _c_o_n_d_i_t_i_o_n, an arbitrary algebraic expression, TEXT: H is true, execute the statements. TEXT: H TEXT: H SUBJECT: Repeat End TITLE: Repeat - End TEXT: H TEXT: H _5._4._2. _R_e_p_e_a_t - _E_n_d TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H repeat [_n_u_m_b_e_r] TEXT: H statement TEXT: H ... TEXT: H end TEXT: H TEXT: H TEXT: H Execute the statements _n_u_m_b_e_r times, or forever if TEXT: H no argument is given. TEXT: H TEXT: H SUBJECT: Dowhile End TITLE: Dowhile - End TEXT: H TEXT: H _5._4._3. _D_o_w_h_i_l_e - _E_n_d TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H dowhile _c_o_n_d_i_t_i_o_n TEXT: H statement TEXT: H ... TEXT: H end TEXT: H TEXT: H TEXT: H The same as while, except that the _c_o_n_d_i_t_i_o_n is TEXT: H tested after the statements are executed. TEXT: H TEXT: H SUBJECT: Foreach End TITLE: Foreach - End TEXT: H TEXT: H _5._4._4. _F_o_r_e_a_c_h - _E_n_d TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H foreach _v_a_r _v_a_l_u_e ... TEXT: H statement TEXT: H ... TEXT: H end TEXT: H TEXT: H TEXT: H The statements are executed once for each of the TEXT: H _v_a_l_u_es, each time with the variable _v_a_r set to the TEXT: H current one. (_v_a_r can be accessed by the $_v_a_r notation TEXT: H - see below). TEXT: H TEXT: H SUBJECT: If Then Else TITLE: If - Then - Else TEXT: H TEXT: H _5._4._5. _I_f - _T_h_e_n - _E_l_s_e TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H if _c_o_n_d_i_t_i_o_n TEXT: H statement TEXT: H ... TEXT: H else TEXT: H statement TEXT: H ... TEXT: H end TEXT: H TEXT: H TEXT: H If the _c_o_n_d_i_t_i_o_n is non-zero then the first set of TEXT: H statements are executed, otherwise the second set. The TEXT: H else and the second set of statements may be omitted. TEXT: H TEXT: H SUBJECT: Label TITLE: Label TEXT: H TEXT: H _5._4._6. _L_a_b_e_l TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H label _w_o_r_d TEXT: H TEXT: H TEXT: H If a statement of the form goto _w_o_r_d is encoun- TEXT: H tered, control is transferred to this point, otherwise TEXT: H this is a no-op. TEXT: H TEXT: H SUBJECT: Goto TITLE: Goto TEXT: H TEXT: H _5._4._7. _G_o_t_o TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H goto _w_o_r_d TEXT: H TEXT: H TEXT: H If a statement of the form label _w_o_r_d is present in TEXT: H the block or an enclosing block, control is transferred TEXT: H there. Note that if the label is at the top level, it TEXT: H _m_u_s_t be before the goto _s_t_a_t_e_m_e_n_t (_i._e, _a _f_o_r_w_a_r_d _g_o_t_o TEXT: H may occur only within a block). TEXT: H TEXT: H SUBJECT: Continue TITLE: Continue TEXT: H TEXT: H _5._4._8. _C_o_n_t_i_n_u_e TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H continue TEXT: H TEXT: H TEXT: H If there is a while, dowhile, or foreach block en- TEXT: H closing this statement, control passes to the test, or TEXT: H in the case of foreach, the next value is taken. Other- TEXT: H wise an error results. TEXT: H TEXT: H SUBJECT: Break TITLE: Break TEXT: H TEXT: H _5._4._9. _B_r_e_a_k TEXT: H TEXT: H _G_e_n_e_r_a_l _F_o_r_m TEXT: H TEXT: H break TEXT: H TEXT: H TEXT: H If there is a while, dowhile, or foreach block en- TEXT: H closing this statement, control passes out of the block. TEXT: H Otherwise an error results. TEXT: H TEXT: H Of course, control structures may be nested. When TEXT: H a block is entered and the input is the terminal, the TEXT: H prompt becomes a number of >'s corresponding to the TEXT: H number of blocks the user has entered. The current con- TEXT: H trol structures may be examined with the debugging com- TEXT: H mand _c_d_u_m_p. TEXT: H SUBJECT: VARIABLES TITLE: VARIABLES TEXT: H TEXT: H _5._5. _V_A_R_I_A_B_L_E_S TEXT: H TEXT: H TEXT: H The operation of both Nutmeg and Spice3 may be affected TEXT: H by setting variables with the "set" command. In addition to TEXT: H the variables mentioned below, the set command in Spice3 TEXT: H also affect the behaviour of the simulator via the options TEXT: H previously described under the section on ".OPTIONS". TEXT: H TEXT: H The variables meaningful to nutmeg which may be altered TEXT: H by the set command are: TEXT: H TEXT: H diff_abstol The absolute tolerance used by the diff command. TEXT: H appendwrite Append to the file when a write command is is- TEXT: H sued, if one already exists. TEXT: H color_N These variables determine the colors used, if X TEXT: H is being run on a color display. _N may be TEXT: H between 0 and 15. Color 0 is the background, TEXT: H color 1 is the grid and text color, and colors 2 TEXT: H through 15 are used in order for vectors plot- TEXT: H ted. The value of the color variables should be TEXT: H names of colors, which may be found in the file TEXT: H /usr/lib/rgb.txt. TEXT: H combplot Plot vectors by drawing a vertical line from TEXT: H each point to the X-axis, as opposed to joining TEXT: H the points. Note that this option is subsumed TEXT: H in the _p_l_o_t_t_y_p_e option, below. TEXT: H cpdebug Print _c_s_h_p_a_r debugging information (must be com- TEXT: H plied with the -DCPDEBUG flag). Unsupported in TEXT: H the current release. TEXT: H TEXT: H TEXT: H debug If set then a lot of debugging information is TEXT: H printed (must be compiled with the -DFTEDEBUG TEXT: H flag). Unsupported in the current release. TEXT: H device The name (/dev/tty??) of the graphics device. TEXT: H If this variable isn't set then the user's TEXT: H terminal is used. To do plotting on another TEXT: H monitor you probably have to set both the TEXT: H device and term variables. (If device is set TEXT: H to the name of a file, nutmeg dumps the TEXT: H graphics control codes into this file -- this TEXT: H is useful for saving plots.) TEXT: H echo Print out each command before it is executed. TEXT: H filetype This can be either _a_s_c_i_i or _b_i_n_a_r_y, and TEXT: H determines what format are. The default is TEXT: H _a_s_c_i_i. TEXT: H TEXT: H TEXT: H fourgridsize How many points to use for interpolating TEXT: H into when doing fourier analysis. TEXT: H gridsize If this variable is set to an integer, TEXT: H this number is used as the number of TEXT: H equally spaced points to use for the Y- TEXT: H axis when plotting. Otherwise the TEXT: H current scale is used (which may not TEXT: H have equally spaced points). If the TEXT: H current scale isn't strictly monotonic, TEXT: H then this option has no effect. TEXT: H hcopydev If this is set, when the hardcopy com- TEXT: H mand is run the resulting file is au- TEXT: H tomatically printed on the printer named TEXT: H hcopydev with the command _l_p_r -_Phcopydev TEXT: H -_g file. TEXT: H TEXT: H TEXT: H hcopyfont This variable specifies the font name TEXT: H for hardcopy output plots. The value is TEXT: H device dependent. TEXT: H hcopyfontsize This is a scaling factor for the font TEXT: H used in hardcopy plots. TEXT: H hcopydevtype This variable specifies the type of the TEXT: H printer output to use in the hardcopy TEXT: H command. If hcopydevtype is not set, TEXT: H plot (5) format is assumed. The stan- TEXT: H dard distribution currently recognizes TEXT: H postscript as an alternative output for- TEXT: H mat. When used in conjunction with TEXT: H hcopydev, hcopydevtype should specify a TEXT: H format supported by the printer. TEXT: H height The length of the page for asciiplot and TEXT: H print col. TEXT: H history The number of events to save in the his- TEXT: H tory list. TEXT: H lprplot5 This is a printf(3s) style format string TEXT: H used to specify the command to use for TEXT: H sending plot(5)-style plots to a printer TEXT: H or plotter. The first parameter sup- TEXT: H plied is the printer name, the second TEXT: H parameter supplied is a file name con- TEXT: H taining the plot. Both parameters are TEXT: H strings. It is trivial to cause Spice3 TEXT: H to abort by supplying a unreasonable TEXT: H format string. TEXT: H lprps This is a printf(3s) style format string TEXT: H used to specify the command to use for TEXT: H sending PostScript plots to a printer or TEXT: H plotter. The first parameter supplied TEXT: H is the printer name, the second parame- TEXT: H ter supplied is a file name containing TEXT: H the plot. Both parameters are strings. TEXT: H It is trivial to cause Spice3 to abort TEXT: H by supplying a unreasonable format TEXT: H string. TEXT: H nfreqs The number of frequencies to compute in TEXT: H the _f_o_u_r_i_e_r command. (Defaults to 10.) TEXT: H nobreak Don't have asciiplot and print col break TEXT: H between pages. TEXT: H TEXT: H TEXT: H noasciiplotvalue Don't print the first vector plotted to TEXT: H the left when doing an asciiplot. TEXT: H noclobber Don't overwrite existing files when do- TEXT: H ing IO redirection. TEXT: H noglob Don't expand the global characters `*', TEXT: H `?', `[', and `]'. This is the default. TEXT: H nogrid Don't plot a grid when graphing curves TEXT: H (but do label the axes). TEXT: H nomoremode If nomoremode is not set, whenever a TEXT: H large amount of data is being printed to TEXT: H the screen (e.g, the print or asciiplot TEXT: H commands), the output is stopped every TEXT: H screenful and continues when a carriage TEXT: H return is typed. If nomoremode is set TEXT: H then data scrolls off the screen without TEXT: H check. TEXT: H nonomatch If noglob is unset and a global expres- TEXT: H sion cannot be matched, use the global TEXT: H characters literally instead of com- TEXT: H plaining. TEXT: H TEXT: H TEXT: H nosort Don't have display sort the variable names. TEXT: H noprintscale Don't print the scale in the leftmost TEXT: H column when a print col command is given. TEXT: H numdgt The number of digits to print when printing TEXT: H tables of data (fourier, print col). The TEXT: H default precision is 6 digits. On the VAX, TEXT: H approximately 16 decimal digits are avail- TEXT: H able using double precision, so numdgt TEXT: H should not be more than 16. If the number TEXT: H is negative, one fewer digit is printed to TEXT: H ensure constant widths in tables. TEXT: H plottype This should be one of normal, comb, or TEXT: H point:_c_h_a_r_s. normal, the default, causes TEXT: H points to be plotted as parts of connected TEXT: H lines. comb causes a comb plot to be done TEXT: H (see the description of the combplot vari- TEXT: H able above). point causes each point to be TEXT: H plotted separately - the chars are a list TEXT: H of characters that are used for each vector TEXT: H plotted. If they are omitted then a de- TEXT: H fault set is used. TEXT: H polydegree The degree of the polynomial that the plot TEXT: H command should fit to the data. If _p_o_l_y_d_e- TEXT: H _g_r_e_e is N, then nutmeg fits a degree N po- TEXT: H lynomial to every set of N points and draw TEXT: H 10 intermediate points in between each end- TEXT: H point. If the points aren't monotonic, TEXT: H then it tries rotating the curve and reduc- TEXT: H ing the degree until a fit is achieved. TEXT: H polysteps The number of points to interpolate between TEXT: H every pair of points available when doing TEXT: H curve fitting. The default is 10. TEXT: H program The name of the current program (_a_r_g_v[_0]). TEXT: H prompt The prompt, with the character `!' replaced TEXT: H by the current event number. TEXT: H TEXT: H TEXT: H rawfile The default name for rawfiles created. TEXT: H diff_reltol The relative tolerance used by the diff command. TEXT: H remote_shell Overrides the name used for generating rspice TEXT: H runs (default is "rsh"). TEXT: H rhost The machine to use for remote SPICE-3 runs, in- TEXT: H stead of the default one (see the description of TEXT: H the rspice command, below). TEXT: H rprogram The name of the remote program to use in the TEXT: H rspice command. TEXT: H slowplot Stop between each graph plotted and wait for the TEXT: H user to type return before continuing. TEXT: H sourcepath A list of the directories to search when a TEXT: H source command is given. The default is the TEXT: H current directory and the standard spice library TEXT: H (/_u_s_r/_l_o_c_a_l/_l_i_b/_s_p_i_c_e, or whatever LIBPATH is TEXT: H #defined to in the Spice3 source. TEXT: H spicepath The program to use for the aspice command. The TEXT: H default is /cad/bin/spice. TEXT: H term The _m_f_b name of the current terminal. TEXT: H units If this is degrees, then all the trig functions TEXT: H will use degrees instead of radians. TEXT: H unixcom If a command isn't defined, try to execute it as TEXT: H a UNIX command. Setting this option has the ef- TEXT: H fect of giving a rehash command, below. This is TEXT: H useful for people who want to use nutmeg as a TEXT: H login shell. TEXT: H verbose Be verbose. This is midway between echo and de- TEXT: H bug / cpdebug. TEXT: H diff_vntol The absolute voltage tolerance used by the diff TEXT: H command. TEXT: H TEXT: H TEXT: H width The width of the page for asciiplot and TEXT: H print col. TEXT: H x11lineararcs Some X11 implementations have poor arc TEXT: H drawing. If you set this option, Spice3 TEXT: H will plot using an approximation to the TEXT: H curve using straight lines. TEXT: H xbrushheight The height of the brush to use if X is TEXT: H being run. TEXT: H xbrushwidth The width of the brush to use if X is TEXT: H being run. TEXT: H xfont The name of the X font to use when plot- TEXT: H ting data and entering labels. The plot TEXT: H may not look good if this is a TEXT: H variable-width font. TEXT: H TEXT: H TEXT: H There are several set variables that Spice3 uses but TEXT: H Nutmeg does not. They are: TEXT: H TEXT: H editor The editor to use for the edit command. TEXT: H modelcard The name of the model card (normally TEXT: H .model). TEXT: H noaskquit Do not check to make sure that there are TEXT: H no circuits suspended and no plots un- TEXT: H saved. Normally Spice3 warns the user TEXT: H when he tries to quit if this is the TEXT: H case. TEXT: H noparse Don't attempt to parse input files when TEXT: H they are read in (useful for debugging). TEXT: H Of course, they cannot be run if they TEXT: H are not parsed. TEXT: H nosubckt Don't expand subcircuits. TEXT: H renumber Renumber input lines when an input file TEXT: H has .include's. TEXT: H subend The card to end subcircuits (normally TEXT: H .ends). TEXT: H subinvoke The prefix to invoke subcircuits (nor- TEXT: H mally x). TEXT: H substart The card to begin subcircuits (normally TEXT: H .subckt). TEXT: H TEXT: H SUBJECT: MISCELLANEOUS TITLE: MISCELLANEOUS TEXT: H TEXT: H _5._6. _M_I_S_C_E_L_L_A_N_E_O_U_S TEXT: H TEXT: H If there are subcircuits in the input file, Spice3 TEXT: H expands instances of them. A subcircuit is delimited by the TEXT: H cards ._s_u_b_c_k_t and ._e_n_d_s, or whatever the value of the vari- TEXT: H ables _s_u_b_s_t_a_r_t and _s_u_b_e_n_d is, respectively. An instance of TEXT: H a subcircuit is created by specifying a device with type 'x' TEXT: H - the device line is written TEXT: H TEXT: H xname node1 node2 ... subcktname TEXT: H TEXT: H TEXT: H where the nodes are the node names that replace the formal TEXT: H parameters on the .subckt line. All nodes that are not for- TEXT: H mal parameters are prepended with the name given to the TEXT: H instance and a ':', as are the names of the devices in the TEXT: H subcircuit. If there are several nested subcircuits, node TEXT: H and device names look like subckt1:subckt2:...:name. If the TEXT: H variable subinvoke is set, then it is used as the prefix TEXT: H that specifies instances of subcircuits, instead of 'x'. TEXT: H TEXT: H Nutmeg occasionally checks to see if it is getting TEXT: H close to running out of space, and warns the user if this is TEXT: H the case. (This is more likely to be useful with the SPICE TEXT: H front end.) TEXT: H TEXT: H C-shell type quoting with "" and '', and backquote sub- TEXT: H stitution may be used. Within single quotes, no further TEXT: H substitution (like history substitution) is done, and within TEXT: H double quotes, the words are kept together but further sub- TEXT: H stitution is done. Any text between backquotes is replaced TEXT: H by the result of executing the text as a command to the TEXT: H shell. TEXT: H TEXT: H Tenex-style ('set filec' in the 4.3 C-shell) command, TEXT: H filename, and keyword completion is possible: If EOF TEXT: H (control-D) is typed after the first character on the line, TEXT: H a list of the commands or possible arguments is printed (If TEXT: H it is alone on the line it exits nutmeg). If escape is TEXT: H typed, then nutmeg trys to complete what the user has TEXT: H already typed. To get a list of all commands, the user TEXT: H should type ^D. TEXT: H TEXT: H The values of variables may be used in commands by TEXT: H writing $varname where the value of the variable is to TEXT: H appear. The special variables $$ and $< refer to the pro- TEXT: H cess ID of the program and a line of input which is read TEXT: H from the terminal when the variable is evaluated, respec- TEXT: H tively. If a variable has a name of the form $&word, then TEXT: H word is considered a vector (see above), and its value is TEXT: H taken to be the value of the variable. If $_f_o_o is a valid TEXT: H variable, and is of type list, then the expression TEXT: H $_f_o_o[_l_o_w-_h_i_g_h] represents a range of elements. Either the TEXT: H upper index or the lower may be left out, and the reverse of TEXT: H a list may be obtained with $_f_o_o[_l_e_n-_0]. Also, the notation TEXT: H $?_f_o_o evaluates to 1 if the variable _f_o_o is defined, 0 oth- TEXT: H erwise, and $#_f_o_o evaluates to the number of elements in _f_o_o TEXT: H if it is a list, 1 if it is a number or string, and 0 if it TEXT: H is a boolean variable. TEXT: H TEXT: H History substitutions, similar to C-shell history sub- TEXT: H stitutions, are also available - see the C-shell manual page TEXT: H for all of the details. TEXT: H TEXT: H The characters ~, {, and } have the same effects as TEXT: H they do in the C-Shell, i.e., home directory and alternative TEXT: H expansion. It is possible to use the wildcard characters *, TEXT: H ?, [, and ] also, but only if you unset noglob first. This TEXT: H makes them rather useless for typing algebraic expressions, TEXT: H so you should set noglob again after you are done with wild- TEXT: H card expansion. Note that the pattern [^abc] matchs all TEXT: H characters _e_x_c_e_p_t a, b, _a_n_d c. TEXT: H TEXT: H IO redirection is available - the symbols >, >>, >&, TEXT: H >>&, and < have the same effects as in the C-shell. TEXT: H TEXT: H You may type multiple commands on one line, separated TEXT: H by semicolons. TEXT: H TEXT: H If you want to use a different mfbcap file than the TEXT: H default (usually ~cad/lib/mfbcap), you have to set the TEXT: H environment variable SPICE_MFBCAP before you start nutmeg or TEXT: H spice. The -m option and the mfbcap variable no longer TEXT: H work. TEXT: H TEXT: H If X is being used, the cursor may be positioned at any TEXT: H point on the screen when the window is up and characters TEXT: H typed at the keyboard are added to the window at that point. TEXT: H The window may then be sent to a printer using the xpr(1) TEXT: H program. TEXT: H TEXT: H Nutmeg can be run under VAX/VMS, as well as several TEXT: H other operating systems. Some features like command comple- TEXT: H tion, expansion of *, ?, and [], backquote substitution, the TEXT: H shell command, and so forth do not work. TEXT: H TEXT: H On some systems you have to respond to the -_m_o_r_e- TEXT: H prompt during plot with a carriage return instead of any key TEXT: H as you can do on UNIX. SUBJECT: BUGS TITLE: BUGS TEXT: H TEXT: H _5._7. _B_U_G_S TEXT: H TEXT: H The label entry facilities are primitive. You must be TEXT: H careful to type slowly when entering labels -- nutmeg checks TEXT: H for input once every second, and can get confused if charac- TEXT: H ters arrive faster. TEXT: H TEXT: H If you redefine colors after creating a plot window TEXT: H with X, and then cause the window to be redrawn, it does not TEXT: H redraw in the correct colors. TEXT: H TEXT: H TEXT: H When defining aliases like TEXT: H TEXT: H alias pdb plot db( '!:1' - '!:2' ) TEXT: H TEXT: H TEXT: H you must be careful to quote the argument list substitu- TEXT: H tions in this manner. If you quote the whole argument TEXT: H it might not work properly. TEXT: H TEXT: H TEXT: H TEXT: H In a user-defined function, the arguments cannot be TEXT: H part of a name that uses the _p_l_o_t._v_e_c syntax. For example: TEXT: H TEXT: H define check(v(1)) cos(tran1.v(1)) TEXT: H TEXT: H TEXT: H does not work. TEXT: H TEXT: H TEXT: H If you type plot all all, or otherwise use a wildcard TEXT: H reference for one plot twice in a command, the effect is TEXT: H unpredictable. TEXT: H TEXT: H The asciiplot command doesn't deal with log scales or TEXT: H the delta keywords. TEXT: H TEXT: H TEXT: H Often the names of terminals recognized by MFB are dif- TEXT: H ferent from those in /etc/termcap. Thus you may have to TEXT: H reset your terminal type with the command TEXT: H TEXT: H set term = termname TEXT: H TEXT: H TEXT: H where termname is the name in the mfbcap file. TEXT: H TEXT: H TEXT: H The hardcopy command is useless on VMS and other sys- TEXT: H tems without the plot command, unless the user has a program TEXT: H that understands _p_l_o_t(_5) format. TEXT: H TEXT: H Spice3 recognizes all the notations used in SPICE2 TEXT: H .plot cards, and translates vp(1) into ph(v(1)), and so TEXT: H forth. However, if there are spaces in these names it won't TEXT: H work. Hence v(1, 2) and (-.5, .5) aren't recognized. TEXT: H TEXT: H BJTs can have either 3 or 4 nodes, which makes it dif- TEXT: H ficult for the subcircuit expansion routines to decide what TEXT: H to rename. If the fourth parameter has been declared as a TEXT: H model name, then it is assumed that there are 3 nodes, oth- TEXT: H erwise it is considered a node. TEXT: H TEXT: H The @name[param] notation might not work with trace, TEXT: H iplot, etc. yet. TEXT: H TEXT: H The first line of a command file (except for the ._s_p_i_- TEXT: H _c_e_i_n_i_t file) should be a comment, otherwise SPICE may create TEXT: H an empty circuit. TEXT: H TEXT: H Files specified on the command line are read before TEXT: H .spiceinit is read. SUBJECT: BIBLIOGRAPHY TITLE: BIBLIOGRAPHY TEXT: H TEXT: H _6. _B_I_B_L_I_O_G_R_A_P_H_Y TEXT: H TEXT: H TEXT: H [1] A. Vladimirescu and S. Liu, _T_h_e _S_i_m_u_l_a_t_i_o_n _o_f _M_O_S TEXT: H _I_n_t_e_g_r_a_t_e_d _C_i_r_c_u_i_t_s _U_s_i_n_g _S_P_I_C_E_2 TEXT: H ERL Memo No. ERL M80/7, Electronics Research Laboratory TEXT: H University of California, Berkeley, October 1980 TEXT: H TEXT: H [2] T. Sakurai and A. R. Newton, _A _S_i_m_p_l_e _M_O_S_F_E_T _M_o_d_e_l _f_o_r TEXT: H _C_i_r_c_u_i_t _A_n_a_l_y_s_i_s _a_n_d _i_t_s _a_p_p_l_i_c_a_t_i_o_n _t_o _C_M_O_S _g_a_t_e _d_e_l_a_y TEXT: H _a_n_a_l_y_s_i_s _a_n_d _s_e_r_i_e_s-_c_o_n_n_e_c_t_e_d _M_O_S_F_E_T _S_t_r_u_c_t_u_r_e TEXT: H ERL Memo No. ERL M90/19, Electronics Research Labora- TEXT: H tory, TEXT: H University of California, Berkeley, March 1990 TEXT: H TEXT: H [3] B. J. Sheu, D. L. Scharfetter, and P. K. Ko, _S_P_I_C_E_2 TEXT: H _I_m_p_l_e_m_e_n_t_a_t_i_o_n _o_f _B_S_I_M TEXT: H ERL Memo No. ERL M85/42, Electronics Research Labora- TEXT: H tory TEXT: H University of California, Berkeley, May 1985 TEXT: H TEXT: H [4] J. R. Pierret, _A _M_O_S _P_a_r_a_m_e_t_e_r _E_x_t_r_a_c_t_i_o_n _P_r_o_g_r_a_m _f_o_r TEXT: H _t_h_e _B_S_I_M _M_o_d_e_l TEXT: H ERL Memo Nos. ERL M84/99 and M84/100, Electronics TEXT: H Research Laboratory TEXT: H University of California, Berkeley, November 1984 TEXT: H TEXT: H [5] Min-Chie Jeng, _D_e_s_i_g_n _a_n_d _M_o_d_e_l_i_n_g _o_f _D_e_e_p- TEXT: H _S_u_b_m_i_c_r_o_m_e_t_e_r _M_O_S_F_E_T_S_s TEXT: H ERL Memo Nos. ERL M90/90, Electronics Research Labora- TEXT: H tory TEXT: H University of California, Berkeley, October 1990 TEXT: H TEXT: H [6] Soyeon Park, _A_n_a_l_y_s_i_s _a_n_d _S_P_I_C_E _i_m_p_l_e_m_e_n_t_a_t_i_o_n _o_f _H_i_g_h TEXT: H _T_e_m_p_e_r_a_t_u_r_e _E_f_f_e_c_t_s _o_n _M_O_S_F_E_T, TEXT: H Master's thesis, University of California, Berkeley, TEXT: H December 1986. TEXT: H TEXT: H [7] Clement Szeto, _S_i_m_u_l_a_t_o_r _o_f _T_e_m_p_e_r_a_t_u_r_e _E_f_f_e_c_t_s _i_n _M_O_S_- TEXT: H _F_E_T_s (_S_T_E_I_M), TEXT: H Master's thesis, University of California, Berkeley, TEXT: H May 1988. TEXT: H TEXT: H [8] J.S. Roychowdhury and D.O. Pederson, _E_f_f_i_c_i_e_n_t _T_r_a_n_- TEXT: H _s_i_e_n_t _S_i_m_u_l_a_t_i_o_n _o_f _L_o_s_s_y _I_n_t_e_r_c_o_n_n_e_c_t, TEXT: H Proc. of the 28th ACM/IEEE Design Automation Confer- TEXT: H ence, June 17-21 1991, San Francisco TEXT: H TEXT: H [9] A. E. Parker and D. J. Skellern, _A_n _I_m_p_r_o_v_e_d _F_E_T _M_o_d_e_l TEXT: H _f_o_r _C_o_m_p_u_t_e_r _S_i_m_u_l_a_t_o_r_s, TEXT: H IEEE Trans CAD, vol. 9, no. 5, pp. 551-553, May 1990. TEXT: H TEXT: H [10] R. Saleh and A. Yang, Editors, _S_i_m_u_l_a_t_i_o_n _a_n_d _M_o_d_e_l_i_n_g, TEXT: H IEEE Circuits and Devices, vol. 8, no. 3, pp. 7-8 and TEXT: H 49, May 1992 TEXT: H TEXT: H [11] H.Statz et al., _G_a_A_s _F_E_T _D_e_v_i_c_e _a_n_d _C_i_r_c_u_i_t _S_i_m_u_l_a_t_i_o_n TEXT: H _i_n _S_P_I_C_E, TEXT: H IEEE Transactions on Electron Devices, V34, Number 2, TEXT: H February, 1987 pp160-169. SUBJECT: APPENDIX A TITLE: APPENDIX A: EXAMPLE CIRCUITS TEXT: H TEXT: H _A. _A_P_P_E_N_D_I_X _A: _E_X_A_M_P_L_E _C_I_R_C_U_I_T_S TEXT: H TEXT: H SUBTOPIC: NGSPICE:Circuit 1 SUBTOPIC: NGSPICE:Circuit 2 SUBTOPIC: NGSPICE:Circuit 3 SUBTOPIC: NGSPICE:Circuit 4 SUBTOPIC: NGSPICE:Circuit 5 SUBJECT: Circuit 1 TITLE: Circuit 1: Differential Pair TEXT: H TEXT: H _A._1. _C_i_r_c_u_i_t _1: _D_i_f_f_e_r_e_n_t_i_a_l _P_a_i_r TEXT: H TEXT: H TEXT: H The following deck determines the dc operating point of TEXT: H a simple differential pair. In addition, the ac small-signal TEXT: H response is computed over the frequency range 1Hz to TEXT: H 100MEGHz. TEXT: H TEXT: H SIMPLE DIFFERENTIAL PAIR TEXT: H VCC 7 0 12 TEXT: H VEE 8 0 -12 TEXT: H VIN 1 0 AC 1 TEXT: H RS1 1 2 1K TEXT: H RS2 6 0 1K TEXT: H Q1 3 2 4 MOD1 TEXT: H Q2 5 6 4 MOD1 TEXT: H RC1 7 3 10K TEXT: H RC2 7 5 10K TEXT: H RE 4 8 10K TEXT: H .MODEL MOD1 NPN BF=50 VAF=50 IS=1.E-12 RB=100 CJC=.5PF TF=.6NS TEXT: H .TF V(5) VIN TEXT: H .AC DEC 10 1 100MEG TEXT: H .END TEXT: H TEXT: H TEXT: H TEXT: H SUBJECT: Circuit 2 TITLE: Circuit 2: MOSFET Characterization TEXT: H TEXT: H _A._2. _C_i_r_c_u_i_t _2: _M_O_S_F_E_T _C_h_a_r_a_c_t_e_r_i_z_a_t_i_o_n TEXT: H TEXT: H The following deck computes the output characteristics of a TEXT: H MOSFET device over the range 0-10V for VDS and 0-5V for VGS. TEXT: H TEXT: H TEXT: H MOS OUTPUT CHARACTERISTICS TEXT: H .OPTIONS NODE NOPAGE TEXT: H VDS 3 0 TEXT: H VGS 2 0 TEXT: H M1 1 2 0 0 MOD1 L=4U W=6U AD=10P AS=10P TEXT: H * VIDS MEASURES ID, WE COULD HAVE USED VDS, BUT ID WOULD BE NEGATIVE TEXT: H VIDS 3 1 TEXT: H .MODEL MOD1 NMOS VTO=-2 NSUB=1.0E15 UO=550 TEXT: H .DC VDS 0 10 .5 VGS 0 5 1 TEXT: H .END TEXT: H TEXT: H TEXT: H TEXT: H SUBJECT: Circuit 3 TITLE: Circuit 3: RTL Inverter TEXT: H TEXT: H _A._3. _C_i_r_c_u_i_t _3: _R_T_L _I_n_v_e_r_t_e_r TEXT: H TEXT: H TEXT: H The following deck determines the dc transfer curve and TEXT: H the transient pulse response of a simple RTL inverter. The TEXT: H input is a pulse from 0 to 5 Volts with delay, rise, and TEXT: H fall times of 2ns and a pulse width of 30ns. The transient TEXT: H interval is 0 to 100ns, with printing to be done every TEXT: H nanosecond. TEXT: H TEXT: H TEXT: H SIMPLE RTL INVERTER TEXT: H VCC 4 0 5 TEXT: H VIN 1 0 PULSE 0 5 2NS 2NS 2NS 30NS TEXT: H RB 1 2 10K TEXT: H Q1 3 2 0 Q1 TEXT: H RC 3 4 1K TEXT: H .MODEL Q1 NPN BF 20 RB 100 TF .1NS CJC 2PF TEXT: H .DC VIN 0 5 0.1 TEXT: H .TRAN 1NS 100NS TEXT: H .END TEXT: H TEXT: H TEXT: H SUBJECT: Circuit 4 TITLE: Circuit 4: Four-Bit Binary Adder TEXT: H TEXT: H _A._4. _C_i_r_c_u_i_t _4: _F_o_u_r-_B_i_t _B_i_n_a_r_y _A_d_d_e_r TEXT: H TEXT: H TEXT: H The following deck simulates a four-bit binary adder, TEXT: H using several subcircuits to describe various pieces of the TEXT: H overall circuit. TEXT: H TEXT: H TEXT: H ADDER - 4 BIT ALL-NAND-GATE BINARY ADDER TEXT: H TEXT: H *** SUBCIRCUIT DEFINITIONS TEXT: H .SUBCKT NAND 1 2 3 4 TEXT: H * NODES: INPUT(2), OUTPUT, VCC TEXT: H Q1 9 5 1 QMOD TEXT: H D1CLAMP 0 1 DMOD TEXT: H Q2 9 5 2 QMOD TEXT: H D2CLAMP 0 2 DMOD TEXT: H RB 4 5 4K TEXT: H R1 4 6 1.6K TEXT: H Q3 6 9 8 QMOD TEXT: H R2 8 0 1K TEXT: H RC 4 7 130 TEXT: H Q4 7 6 10 QMOD TEXT: H DVBEDROP 10 3 DMOD TEXT: H Q5 3 8 0 QMOD TEXT: H .ENDS NAND TEXT: H TEXT: H .SUBCKT ONEBIT 1 2 3 4 5 6 TEXT: H * NODES: INPUT(2), CARRY-IN, OUTPUT, CARRY-OUT, VCC TEXT: H X1 1 2 7 6 NAND TEXT: H X2 1 7 8 6 NAND TEXT: H X3 2 7 9 6 NAND TEXT: H X4 8 9 10 6 NAND TEXT: H X5 3 10 11 6 NAND TEXT: H X6 3 11 12 6 NAND TEXT: H X7 10 11 13 6 NAND TEXT: H X8 12 13 4 6 NAND TEXT: H X9 11 7 5 6 NAND TEXT: H .ENDS ONEBIT TEXT: H TEXT: H .SUBCKT TWOBIT 1 2 3 4 5 6 7 8 9 TEXT: H * NODES: INPUT - BIT0(2) / BIT1(2), OUTPUT - BIT0 / BIT1, TEXT: H * CARRY-IN, CARRY-OUT, VCC TEXT: H X1 1 2 7 5 10 9 ONEBIT TEXT: H X2 3 4 10 6 8 9 ONEBIT TEXT: H .ENDS TWOBIT TEXT: H TEXT: H .SUBCKT FOURBIT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 TEXT: H * NODES: INPUT - BIT0(2) / BIT1(2) / BIT2(2) / BIT3(2), TEXT: H * OUTPUT - BIT0 / BIT1 / BIT2 / BIT3, CARRY-IN, CARRY-OUT, VCC TEXT: H X1 1 2 3 4 9 10 13 16 15 TWOBIT TEXT: H X2 5 6 7 8 11 12 16 14 15 TWOBIT TEXT: H .ENDS FOURBIT TEXT: H TEXT: H *** DEFINE NOMINAL CIRCUIT TEXT: H .MODEL DMOD D TEXT: H .MODEL QMOD NPN(BF=75 RB=100 CJE=1PF CJC=3PF) TEXT: H VCC 99 0 DC 5V TEXT: H VIN1A 1 0 PULSE(0 3 0 10NS 10NS 10NS 50NS) TEXT: H VIN1B 2 0 PULSE(0 3 0 10NS 10NS 20NS 100NS) TEXT: H VIN2A 3 0 PULSE(0 3 0 10NS 10NS 40NS 200NS) TEXT: H VIN2B 4 0 PULSE(0 3 0 10NS 10NS 80NS 400NS) TEXT: H VIN3A 5 0 PULSE(0 3 0 10NS 10NS 160NS 800NS) TEXT: H VIN3B 6 0 PULSE(0 3 0 10NS 10NS 320NS 1600NS) TEXT: H VIN4A 7 0 PULSE(0 3 0 10NS 10NS 640NS 3200NS) TEXT: H VIN4B 8 0 PULSE(0 3 0 10NS 10NS 1280NS 6400NS) TEXT: H X1 1 2 3 4 5 6 7 8 9 10 11 12 0 13 99 FOURBIT TEXT: H RBIT0 9 0 1K TEXT: H RBIT1 10 0 1K TEXT: H RBIT2 11 0 1K TEXT: H RBIT3 12 0 1K TEXT: H RCOUT 13 0 1K TEXT: H TEXT: H *** (FOR THOSE WITH MONEY (AND MEMORY) TO BURN) TEXT: H .TRAN 1NS 6400NS TEXT: H .END TEXT: H TEXT: H TEXT: H SUBJECT: Circuit 5 TITLE: Circuit 5: Transmission-Line Inverter TEXT: H TEXT: H _A._5. _C_i_r_c_u_i_t _5: _T_r_a_n_s_m_i_s_s_i_o_n-_L_i_n_e _I_n_v_e_r_t_e_r TEXT: H TEXT: H TEXT: H The following deck simulates a transmission-line in- TEXT: H verter. Two transmission-line elements are required since TEXT: H two propagation modes are excited. In the case of a coaxial TEXT: H line, the first line (T1) models the inner conductor with TEXT: H respect to the shield, and the second line (T2) models the TEXT: H shield with respect to the outside world. TEXT: H TEXT: H TEXT: H TRANSMISSION-LINE INVERTER TEXT: H V1 1 0 PULSE(0 1 0 0.1N) TEXT: H R1 1 2 50 TEXT: H X1 2 0 0 4 TLINE TEXT: H R2 4 0 50 TEXT: H TEXT: H .SUBCKT TLINE 1 2 3 4 TEXT: H T1 1 2 3 4 Z0=50 TD=1.5NS TEXT: H T2 2 0 4 0 Z0=100 TD=1NS TEXT: H .ENDS TLINE TEXT: H TEXT: H .TRAN 0.1NS 20NS TEXT: H .END TEXT: H TEXT: H SUBJECT: APPENDIX B TITLE: APPENDIX B: MODEL AND DEVICE PARAMETERS TEXT: H TEXT: H _B. _A_P_P_E_N_D_I_X _B: _M_O_D_E_L _A_N_D _D_E_V_I_C_E _P_A_R_A_M_E_T_E_R_S TEXT: H TEXT: H The following tables summarize the parameters available TEXT: H on each of the devices and models in (note that for some TEXT: H systems with limited memory, output parameters are not TEXT: H available). There are several tables for each type of dev- TEXT: H ice supported by . Input parameters to instances and models TEXT: H are parameters that can occur on an instance or model defin- TEXT: H ition line in the form "keyword=value" where "keyword" is TEXT: H the parameter name as given in the tables. Default input TEXT: H parameters (such as the resistance of a resistor or the TEXT: H capacitance of a capacitor) obviously do not need the key- TEXT: H word specified. TEXT: H TEXT: H Output parameters are those additional parameters which TEXT: H are available for many types of instances for the output of TEXT: H operating point and debugging information. These parameters TEXT: H are specified as "@device[keyword]" and are available for TEXT: H the most recent point computed or, if specified in a ".save" TEXT: H statement, for an entire simulation as a normal output vec- TEXT: H tor. Thus, to monitor the gate-to-source capacitance of a TEXT: H MOSFET, a command TEXT: H TEXT: H save @m1[cgs] TEXT: H TEXT: H given before a transient simulation causes the specified TEXT: H capacitance value to be saved at each timepoint, and a sub- TEXT: H sequent command such as TEXT: H TEXT: H plot @m1[cgs] TEXT: H TEXT: H produces the desired plot. (Note that the show command does TEXT: H not use this format). TEXT: H TEXT: H Some variables are listed as both input and output, and TEXT: H their output simply returns the previously input value, or TEXT: H the default value after the simulation has been run. Some TEXT: H parameter are input only because the output system can not TEXT: H handle variables of the given type yet, or the need for them TEXT: H as output variables has not been apparent. Many such input TEXT: H variables are available as output variables in a different TEXT: H format, such as the initial condition vectors that can be TEXT: H retrieved as individual initial condition values. Finally, TEXT: H internally derived values are output only and are provided TEXT: H for debugging and operating point output purposes. TEXT: H TEXT: H Please note that these tables do not provide the TEXT: H detailed information available about the parameters provided TEXT: H in the section on each device and model, but are provided as TEXT: H a quick reference guide. SUBTOPIC: NGSPICE:URC SUBTOPIC: NGSPICE:ASRC SUBTOPIC: NGSPICE:BJT SUBTOPIC: NGSPICE:BSIM1 SUBTOPIC: NGSPICE:BSIM2 SUBTOPIC: NGSPICE:Capacitor SUBTOPIC: NGSPICE:CCCS SUBTOPIC: NGSPICE:CCVS SUBTOPIC: NGSPICE:CSwitch SUBTOPIC: NGSPICE:Diode SUBTOPIC: NGSPICE:Inductor SUBTOPIC: NGSPICE:mutual SUBTOPIC: NGSPICE:Isource SUBTOPIC: NGSPICE:JFET SUBTOPIC: NGSPICE:LTRA SUBTOPIC: NGSPICE:MES SUBTOPIC: NGSPICE:Mos1 SUBTOPIC: NGSPICE:Mos2 SUBTOPIC: NGSPICE:Mos3 SUBTOPIC: NGSPICE:Mos6 SUBTOPIC: NGSPICE:Resistor SUBTOPIC: NGSPICE:Switch SUBTOPIC: NGSPICE:Tranline SUBTOPIC: NGSPICE:VCCS SUBTOPIC: NGSPICE:VCVS SUBTOPIC: NGSPICE:Vsource SUBJECT: URC TITLE: URC: Uniform R.C. line TEXT: H TEXT: H _B._1. _U_R_C: _U_n_i_f_o_r_m _R._C. _l_i_n_e TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| URC - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| l Length of transmission line | TEXT: H| n Number of lumps | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| URC - instance parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| pos_node Positive node of URC | TEXT: H| neg_node Negative node of URC | TEXT: H| gnd Ground node of URC | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| URC - model parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| urc Uniform R.C. line model | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| URC - model parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| k Propagation constant | TEXT: H| fmax Maximum frequency of interest | TEXT: H| rperl Resistance per unit length | TEXT: H| cperl Capacitance per unit length | TEXT: H| isperl Saturation current per length | TEXT: H| rsperl Diode resistance per length | TEXT: H ------------------------------------------------------------ TEXT: H SUBJECT: ASRC TITLE: ASRC: Arbitrary Source TEXT: H TEXT: H _B._2. _A_S_R_C: _A_r_b_i_t_r_a_r_y _S_o_u_r_c_e TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| ASRC - instance parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| i Current source | TEXT: H| v Voltage source | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| ASRC - instance parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| i Current through source | TEXT: H| v Voltage across source | TEXT: H| pos_node Positive Node | TEXT: H| neg_node Negative Node | TEXT: H ------------------------------------------------------------ SUBJECT: BJT TITLE: BJT: Bipolar Junction Transistor TEXT: H TEXT: H _B._3. _B_J_T: _B_i_p_o_l_a_r _J_u_n_c_t_i_o_n _T_r_a_n_s_i_s_t_o_r TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| BJT - instance parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| ic Initial condition vector | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| BJT - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| off Device initially off | TEXT: H| icvbe Initial B-E voltage | TEXT: H| icvce Initial C-E voltage | TEXT: H| area Area factor | TEXT: H| temp instance temperature | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| BJT - instance parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| colnode Number of collector node | TEXT: H| basenode Number of base node | TEXT: H| emitnode Number of emitter node | TEXT: H| substnode Number of substrate node | TEXT: H ------------------------------------------------------------ TEXT: H| colprimenode Internal collector node | TEXT: H| baseprimenode Internal base node | TEXT: H| emitprimenode Internal emitter node | TEXT: H| ic Current at collector node | TEXT: H|-----------------------------------------------------------+ TEXT: H ib Current at base node TEXT: H| ie Emitter current | TEXT: H| is Substrate current | TEXT: H| vbe B-E voltage | TEXT: H ------------------------------------------------------------ TEXT: H| vbc B-C voltage | TEXT: H| gm Small signal transconductance | TEXT: H| gpi Small signal input conductance - pi | TEXT: H| gmu Small signal conductance - mu | TEXT: H|-----------------------------------------------------------+ TEXT: H| gx Conductance from base to internal base | TEXT: H| go Small signal output conductance | TEXT: H| geqcb d(Ibe)/d(Vbc) | TEXT: H| gccs Internal C-S cap. equiv. cond. | TEXT: H ------------------------------------------------------------ TEXT: H| geqbx Internal C-B-base cap. equiv. cond. | TEXT: H| cpi Internal base to emitter capactance | TEXT: H| cmu Internal base to collector capactiance | TEXT: H| cbx Base to collector capacitance | TEXT: H|-----------------------------------------------------------+ TEXT: H| ccs Collector to substrate capacitance | TEXT: H| cqbe Cap. due to charge storage in B-E jct. | TEXT: H| cqbc Cap. due to charge storage in B-C jct. | TEXT: H| cqcs Cap. due to charge storage in C-S jct. | TEXT: H| cqbx Cap. due to charge storage in B-X jct. | TEXT: H| _c_o_n_t_i_n_u_e_d | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| BJT - instance output-only parameters - _c_o_n_t_i_n_u_e_d TEXT: H|-----------------------------------------------------------+ TEXT: H| cexbc Total Capacitance in B-X junction | TEXT: H| qbe Charge storage B-E junction | TEXT: H| qbc Charge storage B-C junction | TEXT: H| qcs Charge storage C-S junction | TEXT: H| qbx Charge storage B-X junction | TEXT: H| p Power dissipation | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| BJT - model parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| npn NPN type device | TEXT: H| pnp PNP type device | TEXT: H| is Saturation Current | TEXT: H| bf Ideal forward beta | TEXT: H ------------------------------------------------------------ TEXT: H| nf Forward emission coefficient | TEXT: H| vaf Forward Early voltage | TEXT: H| va (null) | TEXT: H| ikf Forward beta roll-off corner current | TEXT: H|-----------------------------------------------------------+ TEXT: H| ik (null) | TEXT: H| ise B-E leakage saturation current | TEXT: H| ne B-E leakage emission coefficient | TEXT: H| br Ideal reverse beta | TEXT: H ------------------------------------------------------------ TEXT: H| nr Reverse emission coefficient | TEXT: H| var Reverse Early voltage | TEXT: H| vb (null) | TEXT: H| ikr reverse beta roll-off corner current | TEXT: H|-----------------------------------------------------------+ TEXT: H| isc B-C leakage saturation current | TEXT: H| nc B-C leakage emission coefficient | TEXT: H| rb Zero bias base resistance | TEXT: H| irb Current for base resistance=(rb+rbm)/2 | TEXT: H ------------------------------------------------------------ TEXT: H| rbm Minimum base resistance | TEXT: H| re Emitter resistance | TEXT: H| rc Collector resistance | TEXT: H| cje Zero bias B-E depletion capacitance | TEXT: H|-----------------------------------------------------------+ TEXT: H| vje B-E built in potential | TEXT: H| pe (null) | TEXT: H| mje B-E junction grading coefficient | TEXT: H| me (null) | TEXT: H ------------------------------------------------------------ TEXT: H| tf Ideal forward transit time | TEXT: H| xtf Coefficient for bias dependence of TF | TEXT: H| vtf Voltage giving VBC dependence of TF | TEXT: H| itf High current dependence of TF | TEXT: H|-----------------------------------------------------------+ TEXT: H| ptf Excess phase | TEXT: H| cjc Zero bias B-C depletion capacitance | TEXT: H| vjc B-C built in potential | TEXT: H| _c_o_n_t_i_n_u_e_d | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| BJT - model input-output parameters - _c_o_n_t_i_n_u_e_d TEXT: H|-----------------------------------------------------------+ TEXT: H| pc (null) | TEXT: H| mjc B-C junction grading coefficient | TEXT: H| mc (null) | TEXT: H| xcjc Fraction of B-C cap to internal base | TEXT: H ------------------------------------------------------------ TEXT: H| tr Ideal reverse transit time | TEXT: H| cjs Zero bias C-S capacitance | TEXT: H| ccs Zero bias C-S capacitance | TEXT: H| vjs Substrate junction built in potential | TEXT: H|-----------------------------------------------------------+ TEXT: H| ps (null) | TEXT: H| mjs Substrate junction grading coefficient | TEXT: H| ms (null) | TEXT: H| xtb Forward and reverse beta temp. exp. | TEXT: H ------------------------------------------------------------ TEXT: H| eg Energy gap for IS temp. dependency | TEXT: H| xti Temp. exponent for IS | TEXT: H| fc Forward bias junction fit parameter | TEXT: H| tnom Parameter measurement temperature | TEXT: H| kf Flicker Noise Coefficient | TEXT: H| af Flicker Noise Exponent | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| BJT - model parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| type NPN or PNP | TEXT: H| invearlyvoltf Inverse early voltage:forward | TEXT: H| invearlyvoltr Inverse early voltage:reverse | TEXT: H| invrollofff Inverse roll off - forward | TEXT: H ------------------------------------------------------------ TEXT: H| invrolloffr Inverse roll off - reverse | TEXT: H| collectorconduct Collector conductance | TEXT: H| emitterconduct Emitter conductance | TEXT: H| transtimevbcfact Transit time VBC factor | TEXT: H| excessphasefactor Excess phase fact. | TEXT: H ------------------------------------------------------------ TEXT: H SUBJECT: BSIM1 TITLE: BSIM1: Berkeley Short Channel IGFET Model TEXT: H TEXT: H _B._4. _B_S_I_M_1: _B_e_r_k_e_l_e_y _S_h_o_r_t _C_h_a_n_n_e_l _I_G_F_E_T _M_o_d_e_l TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| BSIM1 - instance parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| ic Vector of DS,GS,BS initial voltages | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| BSIM1 - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| l Length | TEXT: H| w Width | TEXT: H| ad Drain area | TEXT: H| as Source area | TEXT: H ------------------------------------------------------------ TEXT: H| pd Drain perimeter | TEXT: H| ps Source perimeter | TEXT: H| nrd Number of squares in drain | TEXT: H| nrs Number of squares in source | TEXT: H|-----------------------------------------------------------+ TEXT: H| off Device is initially off | TEXT: H| vds Initial D-S voltage | TEXT: H| vgs Initial G-S voltage | TEXT: H| vbs Initial B-S voltage | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| BSIM1 - model parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| nmos Flag to indicate NMOS | TEXT: H| pmos Flag to indicate PMOS | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| BSIM1 - model parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| vfb Flat band voltage | TEXT: H lvfb Length dependence of vfb TEXT: H| wvfb Width dependence of vfb | TEXT: H| phi Strong inversion surface potential | TEXT: H ------------------------------------------------------------ TEXT: H| lphi Length dependence of phi | TEXT: H| wphi Width dependence of phi | TEXT: H| k1 Bulk effect coefficient 1 | TEXT: H| lk1 Length dependence of k1 | TEXT: H|-----------------------------------------------------------+ TEXT: H| wk1 Width dependence of k1 | TEXT: H| k2 Bulk effect coefficient 2 | TEXT: H| lk2 Length dependence of k2 | TEXT: H| wk2 Width dependence of k2 | TEXT: H ------------------------------------------------------------ TEXT: H| eta VDS dependence of threshold voltage | TEXT: H| leta Length dependence of eta | TEXT: H| weta Width dependence of eta | TEXT: H| x2e VBS dependence of eta | TEXT: H| lx2e Length dependence of x2e | TEXT: H| _c_o_n_t_i_n_u_e_d | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H --------------------------------------------------------------------- TEXT: H| BSIM1 - model input-output parameters - _c_o_n_t_i_n_u_e_d| TEXT: H|--------------------------------------------------------------------+ TEXT: H|wx2e Width dependence of x2e | TEXT: H|x3e VDS dependence of eta | TEXT: H|lx3e Length dependence of x3e | TEXT: H|wx3e Width dependence of x3e | TEXT: H --------------------------------------------------------------------- TEXT: H|dl Channel length reduction in um | TEXT: H|dw Channel width reduction in um | TEXT: H|muz Zero field mobility at VDS=0 VGS=VTH | TEXT: H|x2mz VBS dependence of muz | TEXT: H|--------------------------------------------------------------------+ TEXT: H|lx2mz Length dependence of x2mz | TEXT: H|wx2mz Width dependence of x2mz | TEXT: H mus Mobility at VDS=VDD VGS=VTH, channel length modulation TEXT: H|lmus Length dependence of mus | TEXT: H --------------------------------------------------------------------- TEXT: H|wmus Width dependence of mus | TEXT: H|x2ms VBS dependence of mus | TEXT: H|lx2ms Length dependence of x2ms | TEXT: H|wx2ms Width dependence of x2ms | TEXT: H|--------------------------------------------------------------------+ TEXT: H|x3ms VDS dependence of mus | TEXT: H|lx3ms Length dependence of x3ms | TEXT: H|wx3ms Width dependence of x3ms | TEXT: H|u0 VGS dependence of mobility | TEXT: H --------------------------------------------------------------------- TEXT: H|lu0 Length dependence of u0 | TEXT: H|wu0 Width dependence of u0 | TEXT: H|x2u0 VBS dependence of u0 | TEXT: H|lx2u0 Length dependence of x2u0 | TEXT: H|--------------------------------------------------------------------+ TEXT: H|wx2u0 Width dependence of x2u0 | TEXT: H|u1 VDS depence of mobility, velocity saturation | TEXT: H|lu1 Length dependence of u1 | TEXT: H|wu1 Width dependence of u1 | TEXT: H --------------------------------------------------------------------- TEXT: H|x2u1 VBS depence of u1 | TEXT: H|lx2u1 Length depence of x2u1 | TEXT: H|wx2u1 Width depence of x2u1 | TEXT: H|x3u1 VDS depence of u1 | TEXT: H|--------------------------------------------------------------------+ TEXT: H|lx3u1 Length dependence of x3u1 | TEXT: H|wx3u1 Width depence of x3u1 | TEXT: H|n0 Subthreshold slope | TEXT: H ln0 Length dependence of n0 TEXT: H --------------------------------------------------------------------- TEXT: H|wn0 Width dependence of n0 | TEXT: H|nb VBS dependence of subthreshold slope | TEXT: H|lnb Length dependence of nb | TEXT: H|wnb Width dependence of nb | TEXT: H|--------------------------------------------------------------------+ TEXT: H|nd VDS dependence of subthreshold slope | TEXT: H|lnd Length dependence of nd | TEXT: H|wnd Width dependence of nd | TEXT: H| _c_o_n_t_i_n_u_e_d | TEXT: H --------------------------------------------------------------------- TEXT: H TEXT: H TEXT: H --------------------------------------------------------------------------- TEXT: H| BSIM1 - model input-output parameters - _c_o_n_t_i_n_u_e_d | TEXT: H|--------------------------------------------------------------------------+ TEXT: H|tox Gate oxide thickness in um | TEXT: H|temp Temperature in degree Celcius | TEXT: H|vdd Supply voltage to specify mus | TEXT: H|cgso Gate source overlap capacitance per unit channel width(m) | TEXT: H --------------------------------------------------------------------------- TEXT: H|cgdo Gate drain overlap capacitance per unit channel width(m) | TEXT: H|cgbo Gate bulk overlap capacitance per unit channel length(m) | TEXT: H|xpart Flag for channel charge partitioning | TEXT: H|rsh Source drain diffusion sheet resistance in ohm per square | TEXT: H|--------------------------------------------------------------------------+ TEXT: H|js Source drain junction saturation current per unit area | TEXT: H|pb Source drain junction built in potential | TEXT: H mj Source drain bottom junction capacitance grading coefficient TEXT: H|pbsw Source drain side junction capacitance built in potential | TEXT: H --------------------------------------------------------------------------- TEXT: H|mjsw Source drain side junction capacitance grading coefficient | TEXT: H|cj Source drain bottom junction capacitance per unit area | TEXT: H|cjsw Source drain side junction capacitance per unit area | TEXT: H|wdf Default width of source drain diffusion in um | TEXT: H|dell Length reduction of source drain diffusion | TEXT: H --------------------------------------------------------------------------- TEXT: H SUBJECT: BSIM2 TITLE: BSIM2: Berkeley Short Channel IGFET Model TEXT: H TEXT: H _B._5. _B_S_I_M_2: _B_e_r_k_e_l_e_y _S_h_o_r_t _C_h_a_n_n_e_l _I_G_F_E_T _M_o_d_e_l TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| BSIM2 - instance parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| ic Vector of DS,GS,BS initial voltages | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| BSIM2 - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| l Length | TEXT: H| w Width | TEXT: H| ad Drain area | TEXT: H| as Source area | TEXT: H ------------------------------------------------------------ TEXT: H| pd Drain perimeter | TEXT: H| ps Source perimeter | TEXT: H| nrd Number of squares in drain | TEXT: H| nrs Number of squares in source | TEXT: H|-----------------------------------------------------------+ TEXT: H| off Device is initially off | TEXT: H| vds Initial D-S voltage | TEXT: H| vgs Initial G-S voltage | TEXT: H| vbs Initial B-S voltage | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| BSIM2 - model parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| nmos Flag to indicate NMOS | TEXT: H| pmos Flag to indicate PMOS | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| BSIM2 - model parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H|vfb Flat band voltage | TEXT: H|lvfb Length dependence of vfb | TEXT: H|wvfb Width dependence of vfb | TEXT: H|phi Strong inversion surface potential | TEXT: H ------------------------------------------------------------ TEXT: H|lphi Length dependence of phi | TEXT: H|wphi Width dependence of phi | TEXT: H|k1 Bulk effect coefficient 1 | TEXT: H|lk1 Length dependence of k1 | TEXT: H|-----------------------------------------------------------+ TEXT: H|wk1 Width dependence of k1 | TEXT: H|k2 Bulk effect coefficient 2 | TEXT: H|lk2 Length dependence of k2 | TEXT: H|wk2 Width dependence of k2 | TEXT: H ------------------------------------------------------------ TEXT: H|eta0 VDS dependence of threshold voltage at VDD=0 TEXT: H|leta0 Length dependence of eta0 | TEXT: H|weta0 Width dependence of eta0 | TEXT: H|etab VBS dependence of eta | TEXT: H|-----------------------------------------------------------+ TEXT: H|letab Length dependence of etab | TEXT: H|wetab Width dependence of etab | TEXT: H|dl Channel length reduction in um | TEXT: H|dw Channel width reduction in um | TEXT: H ------------------------------------------------------------ TEXT: H|mu0 Low-field mobility, at VDS=0 VGS=VTH | TEXT: H|mu0b VBS dependence of low-field mobility | TEXT: H|lmu0b Length dependence of mu0b | TEXT: H|wmu0b Width dependence of mu0b | TEXT: H|-----------------------------------------------------------+ TEXT: H|mus0 Mobility at VDS=VDD VGS=VTH | TEXT: H|lmus0 Length dependence of mus0 | TEXT: H|wmus0 Width dependence of mus | TEXT: H|musb VBS dependence of mus | TEXT: H ------------------------------------------------------------ TEXT: H|lmusb Length dependence of musb | TEXT: H|wmusb Width dependence of musb | TEXT: H|mu20 VDS dependence of mu in tanh term | TEXT: H|lmu20 Length dependence of mu20 | TEXT: H|-----------------------------------------------------------+ TEXT: H|wmu20 Width dependence of mu20 | TEXT: H|mu2b VBS dependence of mu2 | TEXT: H|lmu2b Length dependence of mu2b | TEXT: H|wmu2b Width dependence of mu2b | TEXT: H ------------------------------------------------------------ TEXT: H|mu2g VGS dependence of mu2 | TEXT: H| _c_o_n_t_i_n_u_e_d | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| BSIM2 - model input-output parameters - _c_o_n_t_i_n_u_e_d TEXT: H|-----------------------------------------------------------+ TEXT: H| lmu2g Length dependence of mu2g | TEXT: H| wmu2g Width dependence of mu2g | TEXT: H| mu30 VDS dependence of mu in linear term | TEXT: H| lmu30 Length dependence of mu30 | TEXT: H ------------------------------------------------------------ TEXT: H| wmu30 Width dependence of mu30 | TEXT: H| mu3b VBS dependence of mu3 | TEXT: H| lmu3b Length dependence of mu3b | TEXT: H| wmu3b Width dependence of mu3b | TEXT: H|-----------------------------------------------------------+ TEXT: H| mu3g VGS dependence of mu3 | TEXT: H| lmu3g Length dependence of mu3g | TEXT: H| wmu3g Width dependence of mu3g | TEXT: H| mu40 VDS dependence of mu in linear term | TEXT: H ------------------------------------------------------------ TEXT: H| lmu40 Length dependence of mu40 | TEXT: H| wmu40 Width dependence of mu40 | TEXT: H| mu4b VBS dependence of mu4 | TEXT: H| lmu4b Length dependence of mu4b | TEXT: H|-----------------------------------------------------------+ TEXT: H| wmu4b Width dependence of mu4b | TEXT: H| mu4g VGS dependence of mu4 | TEXT: H| lmu4g Length dependence of mu4g | TEXT: H| wmu4g Width dependence of mu4g | TEXT: H ------------------------------------------------------------ TEXT: H| ua0 Linear VGS dependence of mobility | TEXT: H| lua0 Length dependence of ua0 | TEXT: H| wua0 Width dependence of ua0 | TEXT: H| uab VBS dependence of ua | TEXT: H|-----------------------------------------------------------+ TEXT: H| luab Length dependence of uab | TEXT: H| wuab Width dependence of uab | TEXT: H| ub0 Quadratic VGS dependence of mobility | TEXT: H| lub0 Length dependence of ub0 | TEXT: H ------------------------------------------------------------ TEXT: H| wub0 Width dependence of ub0 | TEXT: H| ubb VBS dependence of ub | TEXT: H| lubb Length dependence of ubb | TEXT: H| wubb Width dependence of ubb | TEXT: H|-----------------------------------------------------------+ TEXT: H| u10 VDS depence of mobility | TEXT: H| lu10 Length dependence of u10 | TEXT: H wu10 Width dependence of u10 TEXT: H| u1b VBS depence of u1 | TEXT: H ------------------------------------------------------------ TEXT: H| lu1b Length depence of u1b | TEXT: H| wu1b Width depence of u1b | TEXT: H| u1d VDS depence of u1 | TEXT: H| lu1d Length depence of u1d | TEXT: H|-----------------------------------------------------------+ TEXT: H| wu1d Width depence of u1d | TEXT: H| n0 Subthreshold slope at VDS=0 VBS=0 | TEXT: H| ln0 Length dependence of n0 | TEXT: H| _c_o_n_t_i_n_u_e_d | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------------------ TEXT: H| BSIM2 - model input-output parameters - _c_o_n_t_i_n_u_e_d | TEXT: H|-----------------------------------------------------------------------+ TEXT: H|wn0 Width dependence of n0 | TEXT: H|nb VBS dependence of n | TEXT: H|lnb Length dependence of nb | TEXT: H|wnb Width dependence of nb | TEXT: H ------------------------------------------------------------------------ TEXT: H|nd VDS dependence of n | TEXT: H|lnd Length dependence of nd | TEXT: H|wnd Width dependence of nd | TEXT: H|vof0 Threshold voltage offset AT VDS=0 VBS=0 | TEXT: H|-----------------------------------------------------------------------+ TEXT: H|lvof0 Length dependence of vof0 | TEXT: H|wvof0 Width dependence of vof0 | TEXT: H|vofb VBS dependence of vof | TEXT: H|lvofb Length dependence of vofb | TEXT: H ------------------------------------------------------------------------ TEXT: H|wvofb Width dependence of vofb | TEXT: H|vofd VDS dependence of vof | TEXT: H|lvofd Length dependence of vofd | TEXT: H|wvofd Width dependence of vofd | TEXT: H|-----------------------------------------------------------------------+ TEXT: H|ai0 Pre-factor of hot-electron effect. | TEXT: H|lai0 Length dependence of ai0 | TEXT: H|wai0 Width dependence of ai0 | TEXT: H|aib VBS dependence of ai | TEXT: H ------------------------------------------------------------------------ TEXT: H|laib Length dependence of aib | TEXT: H|waib Width dependence of aib | TEXT: H|bi0 Exponential factor of hot-electron effect. | TEXT: H|lbi0 Length dependence of bi0 | TEXT: H|-----------------------------------------------------------------------+ TEXT: H|wbi0 Width dependence of bi0 | TEXT: H|bib VBS dependence of bi | TEXT: H|lbib Length dependence of bib | TEXT: H|wbib Width dependence of bib | TEXT: H ------------------------------------------------------------------------ TEXT: H|vghigh Upper bound of the cubic spline function. | TEXT: H|lvghigh Length dependence of vghigh | TEXT: H|wvghigh Width dependence of vghigh | TEXT: H|vglow Lower bound of the cubic spline function. | TEXT: H|-----------------------------------------------------------------------+ TEXT: H|lvglow Length dependence of vglow | TEXT: H|wvglow Width dependence of vglow | TEXT: H|tox Gate oxide thickness in um | TEXT: H|temp Temperature in degree Celcius | TEXT: H ------------------------------------------------------------------------ TEXT: H|vdd Maximum Vds | TEXT: H|vgg Maximum Vgs | TEXT: H|vbb Maximum Vbs | TEXT: H|cgso Gate source overlap capacitance per unit channel width(m) TEXT: H|-----------------------------------------------------------------------+ TEXT: H|cgdo Gate drain overlap capacitance per unit channel width(m)| TEXT: H|cgbo Gate bulk overlap capacitance per unit channel length(m)| TEXT: H|xpart Flag for channel charge partitioning | TEXT: H| _c_o_n_t_i_n_u_e_d | TEXT: H ------------------------------------------------------------------------ TEXT: H TEXT: H TEXT: H --------------------------------------------------------------------------- TEXT: H| BSIM2 - model input-output parameters - _c_o_n_t_i_n_u_e_d | TEXT: H|--------------------------------------------------------------------------+ TEXT: H|rsh Source drain diffusion sheet resistance in ohm per square | TEXT: H|js Source drain junction saturation current per unit area | TEXT: H|pb Source drain junction built in potential | TEXT: H mj Source drain bottom junction capacitance grading coefficient TEXT: H| | TEXT: H --------------------------------------------------------------------------- TEXT: H|pbsw Source drain side junction capacitance built in potential | TEXT: H|mjsw Source drain side junction capacitance grading coefficient | TEXT: H|cj Source drain bottom junction capacitance per unit area | TEXT: H|cjsw Source drain side junction capacitance per unit area | TEXT: H|wdf Default width of source drain diffusion in um | TEXT: H|dell Length reduction of source drain diffusion | TEXT: H --------------------------------------------------------------------------- TEXT: H SUBJECT: Capacitor TITLE: Capacitor: Fixed capacitor TEXT: H TEXT: H _B._6. _C_a_p_a_c_i_t_o_r: _F_i_x_e_d _c_a_p_a_c_i_t_o_r TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Capacitor - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| capacitance Device capacitance | TEXT: H| ic Initial capacitor voltage | TEXT: H| w Device width | TEXT: H| l Device length | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Capacitor - instance parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| i Device current | TEXT: H| p Instantaneous device power | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Capacitor - model parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| c Capacitor model | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Capacitor - model parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| cj Bottom Capacitance per area | TEXT: H| cjsw Sidewall capacitance per meter | TEXT: H| defw Default width | TEXT: H| narrow width correction factor | TEXT: H ------------------------------------------------------------ TEXT: H SUBJECT: CCCS TITLE: CCCS: Current controlled current source TEXT: H TEXT: H _B._7. _C_C_C_S: _C_u_r_r_e_n_t _c_o_n_t_r_o_l_l_e_d _c_u_r_r_e_n_t _s_o_u_r_c_e TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| CCCS - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| gain Gain of source | TEXT: H| control Name of controlling source | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| CCCS - instance parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| neg_node Negative node of source | TEXT: H| pos_node Positive node of source | TEXT: H| i CCCS output current | TEXT: H| v CCCS voltage at output | TEXT: H| p CCCS power | TEXT: H ------------------------------------------------------------ TEXT: H SUBJECT: CCVS TITLE: CCVS: Linear current controlled current source TEXT: H TEXT: H _B._8. _C_C_V_S: _L_i_n_e_a_r _c_u_r_r_e_n_t _c_o_n_t_r_o_l_l_e_d _c_u_r_r_e_n_t _s_o_u_r_c_e TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| CCVS - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| gain Transresistance (gain) | TEXT: H| control Controlling voltage source | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| CCVS - instance parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| pos_node Positive node of source | TEXT: H| neg_node Negative node of source | TEXT: H| i CCVS output current | TEXT: H| v CCVS output voltage | TEXT: H| p CCVS power | TEXT: H ------------------------------------------------------------ TEXT: H SUBJECT: CSwitch TITLE: CSwitch: Current controlled ideal switch TEXT: H TEXT: H _B._9. _C_S_w_i_t_c_h: _C_u_r_r_e_n_t _c_o_n_t_r_o_l_l_e_d _i_d_e_a_l _s_w_i_t_c_h TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| CSwitch - instance parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| on Initially closed | TEXT: H| off Initially open | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| CSwitch - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| control Name of controlling source | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| CSwitch - instance parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| pos_node Positive node of switch | TEXT: H| neg_node Negative node of switch | TEXT: H| i Switch current | TEXT: H| p Instantaneous power | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| CSwitch - model parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| csw Current controlled switch model | TEXT: H| it Threshold current | TEXT: H| ih Hysterisis current | TEXT: H| ron Closed resistance | TEXT: H| roff Open resistance | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| CSwitch - model parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| gon Closed conductance | TEXT: H| goff Open conductance | TEXT: H ------------------------------------------------------------ TEXT: H SUBJECT: Diode TITLE: Diode: Junction Diode model TEXT: H TEXT: H _B._1_0. _D_i_o_d_e: _J_u_n_c_t_i_o_n _D_i_o_d_e _m_o_d_e_l TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Diode - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| off Initially off | TEXT: H| temp Instance temperature | TEXT: H| ic Initial device voltage | TEXT: H| area Area factor | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Diode - instance parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| vd Diode voltage | TEXT: H| id Diode current | TEXT: H| c Diode current | TEXT: H| gd Diode conductance | TEXT: H ------------------------------------------------------------ TEXT: H| cd Diode capacitance | TEXT: H| charge Diode capacitor charge | TEXT: H| capcur Diode capacitor current | TEXT: H| p Diode power | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Diode - model parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| d Diode model | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Diode - model parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| is Saturation current | TEXT: H| tnom Parameter measurement temperature | TEXT: H| rs Ohmic resistance | TEXT: H| n Emission Coefficient | TEXT: H ------------------------------------------------------------ TEXT: H| tt Transit Time | TEXT: H| cjo Junction capacitance | TEXT: H| cj0 (null) | TEXT: H| vj Junction potential | TEXT: H|-----------------------------------------------------------+ TEXT: H| m Grading coefficient | TEXT: H| eg Activation energy | TEXT: H| xti Saturation current temperature exp. | TEXT: H| kf flicker noise coefficient | TEXT: H ------------------------------------------------------------ TEXT: H| af flicker noise exponent | TEXT: H| fc Forward bias junction fit parameter | TEXT: H| bv Reverse breakdown voltage | TEXT: H| ibv Current at reverse breakdown voltage | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Diode - model parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| cond Ohmic conductance | TEXT: H ------------------------------------------------------------ TEXT: H SUBJECT: Inductor TITLE: Inductor: Inductors TEXT: H TEXT: H _B._1_1. _I_n_d_u_c_t_o_r: _I_n_d_u_c_t_o_r_s TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Inductor - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| inductance Inductance of inductor | TEXT: H| ic Initial current through inductor | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------- TEXT: H| Inductor - instance parameters (output-only) | TEXT: H|------------------------------------------------------------+ TEXT: H|flux Flux through inductor | TEXT: H|v Terminal voltage of inductor | TEXT: H|volt | TEXT: H|i Current through the inductor | TEXT: H|current | TEXT: H p instantaneous power dissipated by the inductor TEXT: H| | TEXT: H ------------------------------------------------------------- TEXT: H SUBJECT: mutual TITLE: mutual: Mutual inductors TEXT: H TEXT: H _B._1_2. _m_u_t_u_a_l: _M_u_t_u_a_l _i_n_d_u_c_t_o_r_s TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| mutual - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| k Mutual inductance | TEXT: H| coefficient (null) | TEXT: H| inductor1 First coupled inductor | TEXT: H| inductor2 Second coupled inductor | TEXT: H ------------------------------------------------------------ TEXT: H SUBJECT: Isource TITLE: Isource: Independent current source TEXT: H TEXT: H _B._1_3. _I_s_o_u_r_c_e: _I_n_d_e_p_e_n_d_e_n_t _c_u_r_r_e_n_t _s_o_u_r_c_e TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Isource - instance parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| pulse Pulse description | TEXT: H| sine Sinusoidal source description | TEXT: H| sin Sinusoidal source description | TEXT: H| exp Exponential source description | TEXT: H ------------------------------------------------------------ TEXT: H| pwl Piecewise linear description | TEXT: H| sffm single freq. FM description | TEXT: H| ac AC magnitude,phase vector | TEXT: H| c Current through current source | TEXT: H| distof1 f1 input for distortion | TEXT: H| distof2 f2 input for distortion | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Isource - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| dc DC value of source | TEXT: H| acmag AC magnitude | TEXT: H| acphase AC phase | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Isource - instance parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| neg_node Negative node of source | TEXT: H| pos_node Positive node of source | TEXT: H acreal AC real part TEXT: H| acimag AC imaginary part | TEXT: H ------------------------------------------------------------ TEXT: H| function Function of the source | TEXT: H| order Order of the source function | TEXT: H| coeffs Coefficients of the source | TEXT: H| v Voltage across the supply | TEXT: H| p Power supplied by the source | TEXT: H ------------------------------------------------------------ TEXT: H SUBJECT: JFET TITLE: JFET: Junction Field effect transistor TEXT: H TEXT: H _B._1_4. _J_F_E_T: _J_u_n_c_t_i_o_n _F_i_e_l_d _e_f_f_e_c_t _t_r_a_n_s_i_s_t_o_r TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| JFET - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| off Device initially off | TEXT: H| ic Initial VDS,VGS vector | TEXT: H| area Area factor | TEXT: H| ic-vds Initial D-S voltage | TEXT: H| ic-vgs Initial G-S volrage | TEXT: H| temp Instance temperature | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H --------------------------------------------------------------- TEXT: H| JFET - instance parameters (output-only) | TEXT: H|--------------------------------------------------------------+ TEXT: H|drain-node Number of drain node | TEXT: H|gate-node Number of gate node | TEXT: H|source-node Number of source node | TEXT: H|drain-prime-node Internal drain node | TEXT: H --------------------------------------------------------------- TEXT: H|source-prime-nodeInternal source node | TEXT: H|vgs Voltage G-S | TEXT: H|vgd Voltage G-D | TEXT: H|ig Current at gate node | TEXT: H|--------------------------------------------------------------+ TEXT: H|id Current at drain node | TEXT: H|is Source current | TEXT: H|igd Current G-D | TEXT: H|gm Transconductance | TEXT: H --------------------------------------------------------------- TEXT: H|gds Conductance D-S | TEXT: H|ggs Conductance G-S | TEXT: H|ggd Conductance G-D | TEXT: H|qgs Charge storage G-S junction | TEXT: H|--------------------------------------------------------------+ TEXT: H|qgd Charge storage G-D junction | TEXT: H cqgs Capacitance due to charge storage G-S junction TEXT: H| | TEXT: H cqgd Capacitance due to charge storage G-D junction TEXT: H|p Power dissipated by the JFET | TEXT: H --------------------------------------------------------------- TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| JFET - model parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| njf N type JFET model | TEXT: H| pjf P type JFET model | TEXT: H| vt0 Threshold voltage | TEXT: H| vto (null) | TEXT: H ------------------------------------------------------------ TEXT: H| beta Transconductance parameter | TEXT: H| lambda Channel length modulation param. | TEXT: H| rd Drain ohmic resistance | TEXT: H| rs Source ohmic resistance | TEXT: H| cgs G-S junction capactance | TEXT: H| _c_o_n_t_i_n_u_e_d | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| JFET - model input-output parameters - _c_o_n_t_i_n_u_e_d TEXT: H|-----------------------------------------------------------+ TEXT: H| cgd G-D junction cap | TEXT: H| pb Gate junction potential | TEXT: H| is Gate junction saturation current | TEXT: H| fc Forward bias junction fit parm. | TEXT: H ------------------------------------------------------------ TEXT: H| b Doping tail parameter | TEXT: H| tnom parameter measurement temperature | TEXT: H| kf Flicker Noise Coefficient | TEXT: H| af Flicker Noise Exponent | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| JFET - model parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| type N-type or P-type JFET model | TEXT: H| gd Drain conductance | TEXT: H| gs Source conductance | TEXT: H ------------------------------------------------------------ TEXT: H SUBJECT: LTRA TITLE: LTRA: Lossy transmission line TEXT: H TEXT: H _B._1_5. _L_T_R_A: _L_o_s_s_y _t_r_a_n_s_m_i_s_s_i_o_n _l_i_n_e TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| LTRA - instance parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| ic Initial condition vector:v1,i1,v2,i2 | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| LTRA - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| v1 Initial voltage at end 1 | TEXT: H| v2 Initial voltage at end 2 | TEXT: H| i1 Initial current at end 1 | TEXT: H| i2 Initial current at end 2 | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| LTRA - instance parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| pos_node1 Positive node of end 1 of t-line | TEXT: H| neg_node1 Negative node of end 1 of t.line | TEXT: H| pos_node2 Positive node of end 2 of t-line | TEXT: H| neg_node2 Negative node of end 2 of t-line | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| LTRA - model parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H|ltra LTRA model | TEXT: H|r Resistance per metre | TEXT: H|l Inductance per metre | TEXT: H|g (null) | TEXT: H ------------------------------------------------------------ TEXT: H|c Capacitance per metre | TEXT: H|len length of line | TEXT: H|nocontrol No timestep control | TEXT: H|steplimit always limit timestep to 0.8*(delay of line) TEXT: H| _c_o_n_t_i_n_u_e_d | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H ----------------------------------------------------------------------------------- TEXT: H| LTRA - model input-output parameters - _c_o_n_t_i_n_u_e_d | TEXT: H|----------------------------------------------------------------------------------+ TEXT: H|nosteplimit don't always limit timestep to 0.8*(delay of line) | TEXT: H|lininterp use linear interpolation | TEXT: H|quadinterp use quadratic interpolation | TEXT: H|mixedinterp use linear interpolation if quadratic results look unacceptable | TEXT: H ----------------------------------------------------------------------------------- TEXT: H|truncnr use N-R iterations for step calculation in LTRAtrunc | TEXT: H|truncdontcut don't limit timestep to keep impulse response calculation errors low TEXT: H|compactrel special reltol for straight line checking | TEXT: H|compactabs special abstol for straight line checking | TEXT: H ----------------------------------------------------------------------------------- TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| LTRA - model parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| rel Rel. rate of change of deriv. for bkpt | TEXT: H| abs Abs. rate of change of deriv. for bkpt | TEXT: H ------------------------------------------------------------ TEXT: H SUBJECT: MES TITLE: MES: GaAs MESFET model TEXT: H TEXT: H _B._1_6. _M_E_S: _G_a_A_s _M_E_S_F_E_T _m_o_d_e_l TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| MES - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| area Area factor | TEXT: H| icvds Initial D-S voltage | TEXT: H| icvgs Initial G-S voltage | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| MES - instance parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H|off Device initially off | TEXT: H|dnode Number of drain node | TEXT: H|gnode Number of gate node | TEXT: H|snode Number of source node | TEXT: H ------------------------------------------------------------ TEXT: H|dprimenode Number of internal drain node | TEXT: H|sprimenode Number of internal source node | TEXT: H|vgs Gate-Source voltage | TEXT: H|vgd Gate-Drain voltage | TEXT: H|-----------------------------------------------------------+ TEXT: H|cg Gate capacitance | TEXT: H|cd Drain capacitance | TEXT: H|cgd Gate-Drain capacitance | TEXT: H|gm Transconductance | TEXT: H ------------------------------------------------------------ TEXT: H|gds Drain-Source conductance | TEXT: H|ggs Gate-Source conductance | TEXT: H|ggd Gate-Drain conductance | TEXT: H|cqgs Capacitance due to gate-source charge storage TEXT: H|-----------------------------------------------------------+ TEXT: H|cqgd Capacitance due to gate-drain charge storage| TEXT: H|qgs Gate-Source charge storage | TEXT: H|qgd Gate-Drain charge storage | TEXT: H|is Source current | TEXT: H| _c_o_n_t_i_n_u_e_d | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| MES - instance output-only parameters - _c_o_n_t_i_n_u_e_d TEXT: H|-----------------------------------------------------------+ TEXT: H| p Power dissipated by the mesfet | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| MES - model parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| nmf N type MESfet model | TEXT: H| pmf P type MESfet model | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| MES - model parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| vt0 Pinch-off voltage | TEXT: H| vto (null) | TEXT: H| alpha Saturation voltage parameter | TEXT: H| beta Transconductance parameter | TEXT: H ------------------------------------------------------------ TEXT: H| lambda Channel length modulation parm. | TEXT: H| b Doping tail extending parameter | TEXT: H| rd Drain ohmic resistance | TEXT: H| rs Source ohmic resistance | TEXT: H|-----------------------------------------------------------+ TEXT: H| cgs G-S junction capacitance | TEXT: H| cgd G-D junction capacitance | TEXT: H| pb Gate junction potential | TEXT: H| is Junction saturation current | TEXT: H ------------------------------------------------------------ TEXT: H| fc Forward bias junction fit parm. | TEXT: H| kf Flicker noise coefficient | TEXT: H| af Flicker noise exponent | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| MES - model parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| type N-type or P-type MESfet model | TEXT: H| gd Drain conductance | TEXT: H| gs Source conductance | TEXT: H| depl_cap Depletion capacitance | TEXT: H| vcrit Critical voltage | TEXT: H ------------------------------------------------------------ TEXT: H SUBJECT: Mos1 TITLE: Mos1: Level 1 MOSfet model with Meyer capacitance model TEXT: H TEXT: H _B._1_7. _M_o_s_1: _L_e_v_e_l _1 _M_O_S_f_e_t _m_o_d_e_l _w_i_t_h _M_e_y_e_r _c_a_p_a_c_i_t_a_n_c_e TEXT: H _m_o_d_e_l TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos1 - instance parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| off Device initially off | TEXT: H| ic Vector of D-S, G-S, B-S voltages | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos1 - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| l Length | TEXT: H| w Width | TEXT: H| ad Drain area | TEXT: H| as Source area | TEXT: H ------------------------------------------------------------ TEXT: H| pd Drain perimeter | TEXT: H| ps Source perimeter | TEXT: H| nrd Drain squares | TEXT: H| nrs Source squares | TEXT: H|-----------------------------------------------------------+ TEXT: H| icvds Initial D-S voltage | TEXT: H| icvgs Initial G-S voltage | TEXT: H| icvbs Initial B-S voltage | TEXT: H| temp Instance temperature | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos1 - instance parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| id Drain current | TEXT: H| is Source current | TEXT: H| ig Gate current | TEXT: H| ib Bulk current | TEXT: H ------------------------------------------------------------ TEXT: H| ibd B-D junction current | TEXT: H| ibs B-S junction current | TEXT: H| vgs Gate-Source voltage | TEXT: H| vds Drain-Source voltage | TEXT: H|-----------------------------------------------------------+ TEXT: H| vbs Bulk-Source voltage | TEXT: H| vbd Bulk-Drain voltage | TEXT: H| dnode Number of the drain node | TEXT: H| gnode Number of the gate node | TEXT: H ------------------------------------------------------------ TEXT: H| snode Number of the source node | TEXT: H| bnode Number of the node | TEXT: H| dnodeprime Number of int. drain node | TEXT: H| snodeprime Number of int. source node | TEXT: H|-----------------------------------------------------------+ TEXT: H| von | TEXT: H| vdsat Saturation drain voltage | TEXT: H| sourcevcrit Critical source voltage | TEXT: H| drainvcrit Critical drain voltage | TEXT: H| rs Source resistance | TEXT: H| _c_o_n_t_i_n_u_e_d | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H -------------------------------------------------------------- TEXT: H| Mos1 - instance output-only parameters - _c_o_n_t_i_n_u_e_d TEXT: H|-------------------------------------------------------------+ TEXT: H|sourceconductanceConductance of source | TEXT: H|rd Drain conductance | TEXT: H|drainconductance Conductance of drain | TEXT: H|gm Transconductance | TEXT: H -------------------------------------------------------------- TEXT: H|gds Drain-Source conductance | TEXT: H|gmb Bulk-Source transconductance | TEXT: H|gmbs | TEXT: H|gbd Bulk-Drain conductance | TEXT: H|-------------------------------------------------------------+ TEXT: H|gbs Bulk-Source conductance | TEXT: H|cbd Bulk-Drain capacitance | TEXT: H|cbs Bulk-Source capacitance | TEXT: H|cgs Gate-Source capacitance | TEXT: H -------------------------------------------------------------- TEXT: H|cgd Gate-Drain capacitance | TEXT: H|cgb Gate-Bulk capacitance | TEXT: H|cqgs Capacitance due to gate-source charge storage TEXT: H|cqgd Capacitance due to gate-drain charge storage| TEXT: H|-------------------------------------------------------------+ TEXT: H|cqgb Capacitance due to gate-bulk charge storage | TEXT: H|cqbd Capacitance due to bulk-drain charge storage| TEXT: H cqbs Capacitance due to bulk-source charge storage TEXT: H|cbd0 Zero-Bias B-D junction capacitance | TEXT: H -------------------------------------------------------------- TEXT: H|cbdsw0 | TEXT: H|cbs0 Zero-Bias B-S junction capacitance | TEXT: H|cbssw0 | TEXT: H|qgs Gate-Source charge storage | TEXT: H|-------------------------------------------------------------+ TEXT: H|qgd Gate-Drain charge storage | TEXT: H|qgb Gate-Bulk charge storage | TEXT: H|qbd Bulk-Drain charge storage | TEXT: H|qbs Bulk-Source charge storage | TEXT: H|p Instaneous power | TEXT: H -------------------------------------------------------------- TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos1 - model parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| nmos N type MOSfet model | TEXT: H| pmos P type MOSfet model | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos1 - model parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| vto Threshold voltage | TEXT: H| vt0 (null) | TEXT: H| kp Transconductance parameter | TEXT: H| gamma Bulk threshold parameter | TEXT: H ------------------------------------------------------------ TEXT: H| phi Surface potential | TEXT: H| lambda Channel length modulation | TEXT: H| rd Drain ohmic resistance | TEXT: H| _c_o_n_t_i_n_u_e_d | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos1 - model input-output parameters - _c_o_n_t_i_n_u_e_d TEXT: H|-----------------------------------------------------------+ TEXT: H| rs Source ohmic resistance | TEXT: H| cbd B-D junction capacitance | TEXT: H| cbs B-S junction capacitance | TEXT: H| is Bulk junction sat. current | TEXT: H ------------------------------------------------------------ TEXT: H| pb Bulk junction potential | TEXT: H| cgso Gate-source overlap cap. | TEXT: H| cgdo Gate-drain overlap cap. | TEXT: H| cgbo Gate-bulk overlap cap. | TEXT: H|-----------------------------------------------------------+ TEXT: H| rsh Sheet resistance | TEXT: H| cj Bottom junction cap per area | TEXT: H| mj Bottom grading coefficient | TEXT: H| cjsw Side junction cap per area | TEXT: H ------------------------------------------------------------ TEXT: H| mjsw Side grading coefficient | TEXT: H| js Bulk jct. sat. current density | TEXT: H| tox Oxide thickness | TEXT: H| ld Lateral diffusion | TEXT: H|-----------------------------------------------------------+ TEXT: H| u0 Surface mobility | TEXT: H| uo (null) | TEXT: H| fc Forward bias jct. fit parm. | TEXT: H| nsub Substrate doping | TEXT: H ------------------------------------------------------------ TEXT: H| tpg Gate type | TEXT: H| nss Surface state density | TEXT: H| tnom Parameter measurement temperature | TEXT: H| kf Flicker noise coefficient | TEXT: H| af Flicker noise exponent | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos1 - model parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| type N-channel or P-channel MOS | TEXT: H ------------------------------------------------------------ TEXT: H SUBJECT: Mos2 TITLE: Mos2: Level 2 MOSfet model with Meyer capacitance model TEXT: H TEXT: H _B._1_8. _M_o_s_2: _L_e_v_e_l _2 _M_O_S_f_e_t _m_o_d_e_l _w_i_t_h _M_e_y_e_r _c_a_p_a_c_i_t_a_n_c_e TEXT: H _m_o_d_e_l TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos2 - instance parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| off Device initially off | TEXT: H| ic Vector of D-S, G-S, B-S voltages | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos2 - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| l Length | TEXT: H| w Width | TEXT: H| ad Drain area | TEXT: H| as Source area | TEXT: H ------------------------------------------------------------ TEXT: H| pd Drain perimeter | TEXT: H| ps Source perimeter | TEXT: H| nrd Drain squares | TEXT: H| nrs Source squares | TEXT: H|-----------------------------------------------------------+ TEXT: H| icvds Initial D-S voltage | TEXT: H| icvgs Initial G-S voltage | TEXT: H| icvbs Initial B-S voltage | TEXT: H| temp Instance operating temperature | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos2 - instance parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| id Drain current | TEXT: H| cd | TEXT: H| ibd B-D junction current | TEXT: H| ibs B-S junction current | TEXT: H ------------------------------------------------------------ TEXT: H| is Source current | TEXT: H| ig Gate current | TEXT: H| ib Bulk current | TEXT: H| vgs Gate-Source voltage | TEXT: H|-----------------------------------------------------------+ TEXT: H| vds Drain-Source voltage | TEXT: H| vbs Bulk-Source voltage | TEXT: H| vbd Bulk-Drain voltage | TEXT: H| dnode Number of drain node | TEXT: H ------------------------------------------------------------ TEXT: H| gnode Number of gate node | TEXT: H| snode Number of source node | TEXT: H| bnode Number of bulk node | TEXT: H| dnodeprime Number of internal drain node | TEXT: H|-----------------------------------------------------------+ TEXT: H| snodeprime Number of internal source node | TEXT: H| von | TEXT: H| vdsat Saturation drain voltage | TEXT: H| sourcevcrit Critical source voltage | TEXT: H| drainvcrit Critical drain voltage | TEXT: H| _c_o_n_t_i_n_u_e_d | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H -------------------------------------------------------------- TEXT: H| Mos2 - instance output-only parameters - _c_o_n_t_i_n_u_e_d TEXT: H|-------------------------------------------------------------+ TEXT: H|rs Source resistance | TEXT: H|sourceconductanceSource conductance | TEXT: H|rd Drain resistance | TEXT: H|drainconductance Drain conductance | TEXT: H -------------------------------------------------------------- TEXT: H|gm Transconductance | TEXT: H|gds Drain-Source conductance | TEXT: H|gmb Bulk-Source transconductance | TEXT: H|gmbs | TEXT: H|-------------------------------------------------------------+ TEXT: H|gbd Bulk-Drain conductance | TEXT: H|gbs Bulk-Source conductance | TEXT: H|cbd Bulk-Drain capacitance | TEXT: H|cbs Bulk-Source capacitance | TEXT: H -------------------------------------------------------------- TEXT: H|cgs Gate-Source capacitance | TEXT: H|cgd Gate-Drain capacitance | TEXT: H|cgb Gate-Bulk capacitance | TEXT: H|cbd0 Zero-Bias B-D junction capacitance | TEXT: H|-------------------------------------------------------------+ TEXT: H|cbdsw0 | TEXT: H|cbs0 Zero-Bias B-S junction capacitance | TEXT: H|cbssw0 | TEXT: H cqgs Capacitance due to gate-source charge storage TEXT: H| | TEXT: H -------------------------------------------------------------- TEXT: H|cqgd Capacitance due to gate-drain charge storage| TEXT: H|cqgb Capacitance due to gate-bulk charge storage | TEXT: H|cqbd Capacitance due to bulk-drain charge storage| TEXT: H|cqbs Capacitance due to bulk-source charge storage TEXT: H|-------------------------------------------------------------+ TEXT: H|qgs Gate-Source charge storage | TEXT: H|qgd Gate-Drain charge storage | TEXT: H|qgb Gate-Bulk charge storage | TEXT: H|qbd Bulk-Drain charge storage | TEXT: H|qbs Bulk-Source charge storage | TEXT: H|p Instantaneous power | TEXT: H -------------------------------------------------------------- TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos2 - model parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| nmos N type MOSfet model | TEXT: H| pmos P type MOSfet model | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos2 - model parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| vto Threshold voltage | TEXT: H| vt0 (null) | TEXT: H| kp Transconductance parameter | TEXT: H| gamma Bulk threshold parameter | TEXT: H ------------------------------------------------------------ TEXT: H| phi Surface potential | TEXT: H| lambda Channel length modulation | TEXT: H| rd Drain ohmic resistance | TEXT: H| rs Source ohmic resistance | TEXT: H|-----------------------------------------------------------+ TEXT: H| cbd B-D junction capacitance | TEXT: H| cbs B-S junction capacitance | TEXT: H| is Bulk junction sat. current | TEXT: H| pb Bulk junction potential | TEXT: H ------------------------------------------------------------ TEXT: H| cgso Gate-source overlap cap. | TEXT: H| cgdo Gate-drain overlap cap. | TEXT: H| cgbo Gate-bulk overlap cap. | TEXT: H| rsh Sheet resistance | TEXT: H|-----------------------------------------------------------+ TEXT: H| cj Bottom junction cap per area | TEXT: H| mj Bottom grading coefficient | TEXT: H| cjsw Side junction cap per area | TEXT: H| mjsw Side grading coefficient | TEXT: H ------------------------------------------------------------ TEXT: H| js Bulk jct. sat. current density | TEXT: H| tox Oxide thickness | TEXT: H| ld Lateral diffusion | TEXT: H| u0 Surface mobility | TEXT: H|-----------------------------------------------------------+ TEXT: H| uo (null) | TEXT: H| fc Forward bias jct. fit parm. | TEXT: H| nsub Substrate doping | TEXT: H| tpg Gate type | TEXT: H ------------------------------------------------------------ TEXT: H| nss Surface state density | TEXT: H| delta Width effect on threshold | TEXT: H| uexp Crit. field exp for mob. deg. | TEXT: H| ucrit Crit. field for mob. degradation | TEXT: H|-----------------------------------------------------------+ TEXT: H| vmax Maximum carrier drift velocity | TEXT: H| xj Junction depth | TEXT: H| neff Total channel charge coeff. | TEXT: H| nfs Fast surface state density | TEXT: H ------------------------------------------------------------ TEXT: H| tnom Parameter measurement temperature | TEXT: H| kf Flicker noise coefficient | TEXT: H| af Flicker noise exponent | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos2 - model parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| type N-channel or P-channel MOS | TEXT: H ------------------------------------------------------------ SUBJECT: Mos3 TITLE: Mos3: Level 3 MOSfet model with Meyer capacitance model TEXT: H TEXT: H _B._1_9. _M_o_s_3: _L_e_v_e_l _3 _M_O_S_f_e_t _m_o_d_e_l _w_i_t_h _M_e_y_e_r _c_a_p_a_c_i_t_a_n_c_e TEXT: H _m_o_d_e_l TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos3 - instance parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| off Device initially off | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos3 - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| l Length | TEXT: H| w Width | TEXT: H| ad Drain area | TEXT: H| as Source area | TEXT: H ------------------------------------------------------------ TEXT: H| pd Drain perimeter | TEXT: H| ps Source perimeter | TEXT: H| nrd Drain squares | TEXT: H| nrs Source squares | TEXT: H|-----------------------------------------------------------+ TEXT: H| icvds Initial D-S voltage | TEXT: H| icvgs Initial G-S voltage | TEXT: H| icvbs Initial B-S voltage | TEXT: H| ic Vector of D-S, G-S, B-S voltages | TEXT: H| temp Instance operating temperature | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos3 - instance parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| id Drain current | TEXT: H| cd Drain current | TEXT: H| ibd B-D junction current | TEXT: H| ibs B-S junction current | TEXT: H ------------------------------------------------------------ TEXT: H| is Source current | TEXT: H| ig Gate current | TEXT: H| ib Bulk current | TEXT: H| vgs Gate-Source voltage | TEXT: H|-----------------------------------------------------------+ TEXT: H| vds Drain-Source voltage | TEXT: H| vbs Bulk-Source voltage | TEXT: H| vbd Bulk-Drain voltage | TEXT: H| dnode Number of drain node | TEXT: H ------------------------------------------------------------ TEXT: H| gnode Number of gate node | TEXT: H| snode Number of source node | TEXT: H| bnode Number of bulk node | TEXT: H| dnodeprime Number of internal drain node | TEXT: H| snodeprime Number of internal source node | TEXT: H| _c_o_n_t_i_n_u_e_d | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H -------------------------------------------------------------- TEXT: H| Mos3 - instance output-only parameters - _c_o_n_t_i_n_u_e_d TEXT: H|-------------------------------------------------------------+ TEXT: H|von Turn-on voltage | TEXT: H|vdsat Saturation drain voltage | TEXT: H|sourcevcrit Critical source voltage | TEXT: H|drainvcrit Critical drain voltage | TEXT: H -------------------------------------------------------------- TEXT: H|rs Source resistance | TEXT: H|sourceconductanceSource conductance | TEXT: H|rd Drain resistance | TEXT: H|drainconductance Drain conductance | TEXT: H|-------------------------------------------------------------+ TEXT: H|gm Transconductance | TEXT: H|gds Drain-Source conductance | TEXT: H|gmb Bulk-Source transconductance | TEXT: H|gmbs Bulk-Source transconductance | TEXT: H -------------------------------------------------------------- TEXT: H|gbd Bulk-Drain conductance | TEXT: H|gbs Bulk-Source conductance | TEXT: H|cbd Bulk-Drain capacitance | TEXT: H|cbs Bulk-Source capacitance | TEXT: H|-------------------------------------------------------------+ TEXT: H|cgs Gate-Source capacitance | TEXT: H|cgd Gate-Drain capacitance | TEXT: H|cgb Gate-Bulk capacitance | TEXT: H cqgs Capacitance due to gate-source charge storage TEXT: H| | TEXT: H -------------------------------------------------------------- TEXT: H|cqgd Capacitance due to gate-drain charge storage| TEXT: H|cqgb Capacitance due to gate-bulk charge storage | TEXT: H|cqbd Capacitance due to bulk-drain charge storage| TEXT: H|cqbs Capacitance due to bulk-source charge storage TEXT: H|-------------------------------------------------------------+ TEXT: H|cbd0 Zero-Bias B-D junction capacitance | TEXT: H|cbdsw0 Zero-Bias B-D sidewall capacitance | TEXT: H|cbs0 Zero-Bias B-S junction capacitance | TEXT: H|cbssw0 Zero-Bias B-S sidewall capacitance | TEXT: H -------------------------------------------------------------- TEXT: H|qbs Bulk-Source charge storage | TEXT: H|qgs Gate-Source charge storage | TEXT: H|qgd Gate-Drain charge storage | TEXT: H|qgb Gate-Bulk charge storage | TEXT: H|qbd Bulk-Drain charge storage | TEXT: H|p Instantaneous power | TEXT: H -------------------------------------------------------------- TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos3 - model parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| nmos N type MOSfet model | TEXT: H| pmos P type MOSfet model | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos3 - model parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| vto Threshold voltage | TEXT: H| vt0 (null) | TEXT: H| kp Transconductance parameter | TEXT: H| gamma Bulk threshold parameter | TEXT: H ------------------------------------------------------------ TEXT: H| phi Surface potential | TEXT: H| rd Drain ohmic resistance | TEXT: H| rs Source ohmic resistance | TEXT: H| cbd B-D junction capacitance | TEXT: H|-----------------------------------------------------------+ TEXT: H| cbs B-S junction capacitance | TEXT: H| is Bulk junction sat. current | TEXT: H| pb Bulk junction potential | TEXT: H| cgso Gate-source overlap cap. | TEXT: H ------------------------------------------------------------ TEXT: H| cgdo Gate-drain overlap cap. | TEXT: H| cgbo Gate-bulk overlap cap. | TEXT: H| rsh Sheet resistance | TEXT: H| cj Bottom junction cap per area | TEXT: H|-----------------------------------------------------------+ TEXT: H| mj Bottom grading coefficient | TEXT: H| cjsw Side junction cap per area | TEXT: H| mjsw Side grading coefficient | TEXT: H| js Bulk jct. sat. current density | TEXT: H ------------------------------------------------------------ TEXT: H| tox Oxide thickness | TEXT: H| ld Lateral diffusion | TEXT: H| u0 Surface mobility | TEXT: H| uo (null) | TEXT: H|-----------------------------------------------------------+ TEXT: H| fc Forward bias jct. fit parm. | TEXT: H| nsub Substrate doping | TEXT: H| tpg Gate type | TEXT: H| nss Surface state density | TEXT: H ------------------------------------------------------------ TEXT: H| vmax Maximum carrier drift velocity | TEXT: H| xj Junction depth | TEXT: H| nfs Fast surface state density | TEXT: H| xd Depletion layer width | TEXT: H|-----------------------------------------------------------+ TEXT: H| alpha Alpha | TEXT: H| eta Vds dependence of threshold voltage | TEXT: H| delta Width effect on threshold | TEXT: H| input_delta (null) | TEXT: H ------------------------------------------------------------ TEXT: H| theta Vgs dependence on mobility | TEXT: H| kappa Kappa | TEXT: H| tnom Parameter measurement temperature | TEXT: H| kf Flicker noise coefficient | TEXT: H| af Flicker noise exponent | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos3 - model parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| type N-channel or P-channel MOS | TEXT: H ------------------------------------------------------------ TEXT: H SUBJECT: Mos6 TITLE: Mos6: Level 6 MOSfet model with Meyer capacitance model TEXT: H TEXT: H _B._2_0. _M_o_s_6: _L_e_v_e_l _6 _M_O_S_f_e_t _m_o_d_e_l _w_i_t_h _M_e_y_e_r _c_a_p_a_c_i_t_a_n_c_e TEXT: H _m_o_d_e_l TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos6 - instance parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| off Device initially off | TEXT: H| ic Vector of D-S, G-S, B-S voltages | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos6 - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| l Length | TEXT: H| w Width | TEXT: H| ad Drain area | TEXT: H| as Source area | TEXT: H ------------------------------------------------------------ TEXT: H| pd Drain perimeter | TEXT: H| ps Source perimeter | TEXT: H| nrd Drain squares | TEXT: H| nrs Source squares | TEXT: H|-----------------------------------------------------------+ TEXT: H| icvds Initial D-S voltage | TEXT: H| icvgs Initial G-S voltage | TEXT: H| icvbs Initial B-S voltage | TEXT: H| temp Instance temperature | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos6 - instance parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| id Drain current | TEXT: H| cd Drain current | TEXT: H| is Source current | TEXT: H| ig Gate current | TEXT: H ------------------------------------------------------------ TEXT: H| ib Bulk current | TEXT: H| ibs B-S junction capacitance | TEXT: H| ibd B-D junction capacitance | TEXT: H| vgs Gate-Source voltage | TEXT: H|-----------------------------------------------------------+ TEXT: H| vds Drain-Source voltage | TEXT: H| vbs Bulk-Source voltage | TEXT: H| vbd Bulk-Drain voltage | TEXT: H| dnode Number of the drain node | TEXT: H ------------------------------------------------------------ TEXT: H| gnode Number of the gate node | TEXT: H| snode Number of the source node | TEXT: H| bnode Number of the node | TEXT: H| dnodeprime Number of int. drain node | TEXT: H| snodeprime Number of int. source node | TEXT: H| _c_o_n_t_i_n_u_e_d | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H -------------------------------------------------------------- TEXT: H| Mos6 - instance output-only parameters - _c_o_n_t_i_n_u_e_d TEXT: H|-------------------------------------------------------------+ TEXT: H|rs Source resistance | TEXT: H|sourceconductanceSource conductance | TEXT: H|rd Drain resistance | TEXT: H|drainconductance Drain conductance | TEXT: H -------------------------------------------------------------- TEXT: H|von Turn-on voltage | TEXT: H|vdsat Saturation drain voltage | TEXT: H|sourcevcrit Critical source voltage | TEXT: H|drainvcrit Critical drain voltage | TEXT: H|-------------------------------------------------------------+ TEXT: H|gmbs Bulk-Source transconductance | TEXT: H|gm Transconductance | TEXT: H|gds Drain-Source conductance | TEXT: H|gbd Bulk-Drain conductance | TEXT: H -------------------------------------------------------------- TEXT: H|gbs Bulk-Source conductance | TEXT: H|cgs Gate-Source capacitance | TEXT: H|cgd Gate-Drain capacitance | TEXT: H|cgb Gate-Bulk capacitance | TEXT: H|-------------------------------------------------------------+ TEXT: H|cbd Bulk-Drain capacitance | TEXT: H|cbs Bulk-Source capacitance | TEXT: H|cbd0 Zero-Bias B-D junction capacitance | TEXT: H|cbdsw0 | TEXT: H -------------------------------------------------------------- TEXT: H|cbs0 Zero-Bias B-S junction capacitance | TEXT: H|cbssw0 | TEXT: H|cqgs Capacitance due to gate-source charge storage TEXT: H|cqgd Capacitance due to gate-drain charge storage| TEXT: H|-------------------------------------------------------------+ TEXT: H|cqgb Capacitance due to gate-bulk charge storage | TEXT: H|cqbd Capacitance due to bulk-drain charge storage| TEXT: H cqbs Capacitance due to bulk-source charge storage TEXT: H|qgs Gate-Source charge storage | TEXT: H -------------------------------------------------------------- TEXT: H|qgd Gate-Drain charge storage | TEXT: H|qgb Gate-Bulk charge storage | TEXT: H|qbd Bulk-Drain charge storage | TEXT: H|qbs Bulk-Source charge storage | TEXT: H|p Instaneous power | TEXT: H -------------------------------------------------------------- TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos6 - model parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| nmos N type MOSfet model | TEXT: H| pmos P type MOSfet model | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos6 - model parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| vto Threshold voltage | TEXT: H| vt0 (null) | TEXT: H| kv Saturation voltage factor | TEXT: H| nv Saturation voltage coeff. | TEXT: H ------------------------------------------------------------ TEXT: H| kc Saturation current factor | TEXT: H| nc Saturation current coeff. | TEXT: H| nvth Threshold voltage coeff. | TEXT: H| ps Sat. current modification par. | TEXT: H|-----------------------------------------------------------+ TEXT: H| gamma Bulk threshold parameter | TEXT: H| gamma1 Bulk threshold parameter 1 | TEXT: H| sigma Static feedback effect par. | TEXT: H| phi Surface potential | TEXT: H ------------------------------------------------------------ TEXT: H| lambda Channel length modulation param. | TEXT: H| lambda0 Channel length modulation param. 0 | TEXT: H| lambda1 Channel length modulation param. 1 | TEXT: H| rd Drain ohmic resistance | TEXT: H|-----------------------------------------------------------+ TEXT: H| rs Source ohmic resistance | TEXT: H| cbd B-D junction capacitance | TEXT: H| cbs B-S junction capacitance | TEXT: H| is Bulk junction sat. current | TEXT: H ------------------------------------------------------------ TEXT: H| pb Bulk junction potential | TEXT: H| cgso Gate-source overlap cap. | TEXT: H| cgdo Gate-drain overlap cap. | TEXT: H| cgbo Gate-bulk overlap cap. | TEXT: H|-----------------------------------------------------------+ TEXT: H| rsh Sheet resistance | TEXT: H| cj Bottom junction cap per area | TEXT: H| mj Bottom grading coefficient | TEXT: H| cjsw Side junction cap per area | TEXT: H ------------------------------------------------------------ TEXT: H| mjsw Side grading coefficient | TEXT: H| js Bulk jct. sat. current density | TEXT: H| ld Lateral diffusion | TEXT: H| tox Oxide thickness | TEXT: H|-----------------------------------------------------------+ TEXT: H| u0 Surface mobility | TEXT: H| uo (null) | TEXT: H| fc Forward bias jct. fit parm. | TEXT: H| tpg Gate type | TEXT: H ------------------------------------------------------------ TEXT: H| nsub Substrate doping | TEXT: H| nss Surface state density | TEXT: H| tnom Parameter measurement temperature | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Mos6 - model parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| type N-channel or P-channel MOS | TEXT: H ------------------------------------------------------------ TEXT: H SUBJECT: Resistor TITLE: Resistor: Simple linear resistor TEXT: H TEXT: H _B._2_1. _R_e_s_i_s_t_o_r: _S_i_m_p_l_e _l_i_n_e_a_r _r_e_s_i_s_t_o_r TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Resistor - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| resistance Resistance | TEXT: H| temp Instance operating temperature | TEXT: H| l Length | TEXT: H| w Width | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Resistor - instance parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| i Current | TEXT: H| p Power | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Resistor - model parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| r Device is a resistor model | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Resistor - model parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| rsh Sheet resistance | TEXT: H| narrow Narrowing of resistor | TEXT: H| tc1 First order temp. coefficient | TEXT: H| tc2 Second order temp. coefficient | TEXT: H| defw Default device width | TEXT: H| tnom Parameter measurement temperature | TEXT: H ------------------------------------------------------------ TEXT: H SUBJECT: Switch TITLE: Switch: Ideal voltage controlled switch TEXT: H TEXT: H _B._2_2. _S_w_i_t_c_h: _I_d_e_a_l _v_o_l_t_a_g_e _c_o_n_t_r_o_l_l_e_d _s_w_i_t_c_h TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Switch - instance parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| on Switch initially closed | TEXT: H| off Switch initially open | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Switch - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| pos_node Positive node of switch | TEXT: H| neg_node Negative node of switch | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Switch - instance parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| cont_p_node Positive contr. node of switch | TEXT: H| cont_n_node Positive contr. node of switch | TEXT: H| i Switch current | TEXT: H| p Switch power | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Switch - model parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| sw Switch model | TEXT: H| vt Threshold voltage | TEXT: H| vh Hysteresis voltage | TEXT: H| ron Resistance when closed | TEXT: H| roff Resistance when open | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Switch - model parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| gon Conductance when closed | TEXT: H| goff Conductance when open | TEXT: H ------------------------------------------------------------ TEXT: H SUBJECT: Tranline TITLE: Tranline: Lossless transmission line TEXT: H TEXT: H _B._2_3. _T_r_a_n_l_i_n_e: _L_o_s_s_l_e_s_s _t_r_a_n_s_m_i_s_s_i_o_n _l_i_n_e TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Tranline - instance parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| ic Initial condition vector:v1,i1,v2,i2 | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Tranline - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| z0 Characteristic impedance | TEXT: H| zo (null) | TEXT: H| f Frequency | TEXT: H| td Transmission delay | TEXT: H ------------------------------------------------------------ TEXT: H| nl Normalized length at frequency given | TEXT: H| v1 Initial voltage at end 1 | TEXT: H| v2 Initial voltage at end 2 | TEXT: H| i1 Initial current at end 1 | TEXT: H| i2 Initial current at end 2 | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Tranline - instance parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| rel Rel. rate of change of deriv. for bkpt | TEXT: H| abs Abs. rate of change of deriv. for bkpt | TEXT: H| pos_node1 Positive node of end 1 of t. line | TEXT: H| neg_node1 Negative node of end 1 of t. line | TEXT: H ------------------------------------------------------------ TEXT: H| pos_node2 Positive node of end 2 of t. line | TEXT: H| neg_node2 Negative node of end 2 of t. line | TEXT: H| delays Delayed values of excitation | TEXT: H ------------------------------------------------------------ TEXT: H SUBJECT: VCCS TITLE: VCCS: Voltage controlled current source TEXT: H TEXT: H _B._2_4. _V_C_C_S: _V_o_l_t_a_g_e _c_o_n_t_r_o_l_l_e_d _c_u_r_r_e_n_t _s_o_u_r_c_e TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| VCCS - instance parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| ic Initial condition of controlling source | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| VCCS - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| gain Transconductance of source (gain) | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| VCCS - instance parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| pos_node Positive node of source | TEXT: H| neg_node Negative node of source | TEXT: H| cont_p_node Positive node of contr. source | TEXT: H| cont_n_node Negative node of contr. source | TEXT: H ------------------------------------------------------------ TEXT: H| i Output current | TEXT: H| v Voltage across output | TEXT: H| p Power | TEXT: H ------------------------------------------------------------ TEXT: H SUBJECT: VCVS TITLE: VCVS: Voltage controlled voltage source TEXT: H TEXT: H _B._2_5. _V_C_V_S: _V_o_l_t_a_g_e _c_o_n_t_r_o_l_l_e_d _v_o_l_t_a_g_e _s_o_u_r_c_e TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| VCVS - instance parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| ic Initial condition of controlling source | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| VCVS - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| gain Voltage gain | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| VCVS - instance parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| pos_node Positive node of source | TEXT: H| neg_node Negative node of source | TEXT: H| cont_p_node Positive node of contr. source | TEXT: H cont_n_node Negative node of contr. source TEXT: H ------------------------------------------------------------ TEXT: H| i Output current | TEXT: H| v Output voltage | TEXT: H| p Power | TEXT: H ------------------------------------------------------------ TEXT: H SUBJECT: Vsource TITLE: Vsource: Independent voltage source TEXT: H TEXT: H _B._2_6. _V_s_o_u_r_c_e: _I_n_d_e_p_e_n_d_e_n_t _v_o_l_t_a_g_e _s_o_u_r_c_e TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Vsource - instance parameters (input-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| pulse Pulse description | TEXT: H| sine Sinusoidal source description | TEXT: H| sin Sinusoidal source description | TEXT: H| exp Exponential source description | TEXT: H ------------------------------------------------------------ TEXT: H| pwl Piecewise linear description | TEXT: H| sffm Single freq. FM descripton | TEXT: H| ac AC magnitude, phase vector | TEXT: H| distof1 f1 input for distortion | TEXT: H| distof2 f2 input for distortion | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Vsource - instance parameters (input-output) | TEXT: H|-----------------------------------------------------------+ TEXT: H| dc D.C. source value | TEXT: H| acmag A.C. Magnitude | TEXT: H| acphase A.C. Phase | TEXT: H ------------------------------------------------------------ TEXT: H TEXT: H TEXT: H ------------------------------------------------------------ TEXT: H| Vsource - instance parameters (output-only) | TEXT: H|-----------------------------------------------------------+ TEXT: H| pos_node Positive node of source | TEXT: H| neg_node Negative node of source | TEXT: H| function Function of the source | TEXT: H| order Order of the source function | TEXT: H ------------------------------------------------------------ TEXT: H| coeffs Coefficients for the function | TEXT: H| acreal AC real part | TEXT: H| acimag AC imaginary part | TEXT: H| i Voltage source current | TEXT: H| p Instantaneous power | TEXT: H ------------------------------------------------------------ tmpk8ny_4pz/src/winmain.c0000644000175000017500000012772413546075722015572 0ustar carstencarsten/* Main program for ngspice under Windows OS Autor: Wolfgang Muees Stand: 28.10.97 Copyright: Holger Vogt Stand: 20.07.2019 Modified BSD license */ #include "ngspice/config.h" #ifdef HAS_WINGUI #define STRICT // strict type checking #define WIN32_LEAN_AND_MEAN #include // standard Windows calls #include // Win32 message cracker #include // sprintf and co #include // exit codes #include // var. arguments #include // assert macro #include "ngspice/stringutil.h" // copy #include // _read #include #include #include #include #include #include "hist_info.h" /* history management */ #include "ngspice/bool.h" /* bool defined as unsigned char */ #include "misc/misc_time.h" /* timediff */ #include "winmain.h" /* Constants */ #define TBufSize 65536 // size of text buffer #define CR VK_RETURN // Carriage Return #define VK_EOT 0x1A // End of Transmission, should emulate ctrl-z #define LF 10 // Line Feed #define SE 0 // String termination #define BorderSize 8 // Umrandung des Stringfeldes #define SBufSize 100 // Groesze des Stringbuffers #define IOBufSize 16348 // Groesze des printf-Buffers #define HIST_SIZE 20 /* Max # commands held in history */ #define N_BYTE_HIST_BUF 512 /* Initial size of history buffer in bytes */ #define StatusHeight 25 // Hoehe des Status Bars #define StatusFrame 2 // Abstand Statusbar / StatusElement #define StatusElHeight (StatusHeight - 2 * StatusFrame) #define SourceLength 500 // Platz fuer Source File Name #define AnalyseLength 100 // Platz fuer Analyse #define QuitButtonLength 80 /* Define the macro below to create a larger main window that is useful * for seeing debug output that is generated before the window can be * resized */ //#define BIG_WINDOW_FOR_DEBUGGING /* macro to ignore unused variables and parameters */ #define NG_IGNORE(x) (void)x #define QUIT_BUTTON_ID 2 /* Types */ typedef char SBufLine[SBufSize + 1]; // Eingabezeile /* Global variables */ HINSTANCE hInst; /* Application instance */ int WinLineWidth = 690; /* Window width */ HWND hwMain; /* Main Window of the application */ HWND twText; /* Text window */ HWND swString; /* input string */ HWND hwStatus; /* status bar */ HWND hwSource; /* display of source name */ HWND hwAnalyse; /* analysis window */ HWND hwQuitButton; /* Pause button */ static int nReturnCode = 0; /* WinMain return value */ static int nShowState; /* Display mode of main window */ static WNDCLASS hwMainClass; /* Class definition for the main window */ static LPCTSTR hwClassName = "SPICE_TEXT_WND";/* Class name of the main window */ static LPCTSTR hwWindowName = PACKAGE_STRING; /* main window displayed name */ static WNDCLASS twTextClass; /* Class definition for the text box */ static LPCTSTR twClassName = "SPICE_TEXT_BOX"; /* Class name for the text box */ static LPCTSTR twWindowName = "TextOut"; /* text box name */ static size_t TBufEnd = 0; /* Pointer to \0 */ static char TBuffer[TBufSize + 1]; /* Text buffer */ static SBufLine SBuffer; /* Input buffer */ static WNDCLASS swStringClass; /* Class definition of string window */ static LPCTSTR swClassName = "SPICE_STR_IN"; /* Class name of text input */ static LPCTSTR swWindowName = "StringIn"; /* Window name */ static char CRLF[] = {CR, LF, SE}; /* CR/LF */ static WNDCLASS hwElementClass; /* Class definition of status displays */ static LPCTSTR hwElementClassName = "ElementClass"; static LPCTSTR hwSourceWindowName = "SourceDisplay"; static LPCTSTR hwAnalyseWindowName = "AnalyseDisplay"; static int RowHeight = 16; /* Height of line of text */ static int LineHeight = 25; /* Height of input line */ static int VisibleRows = 10; /* Number of visible lines in text window */ static BOOL DoUpdate = FALSE; /* Update text window */ static WNDPROC swProc = NULL; /* original string window procedure */ static WNDPROC twProc = NULL; /* original text window procedure */ extern bool ft_ngdebug; /* some additional debug info printed */ extern bool ft_batchmode; extern FILE *flogp; /* definition see xmain.c, stdout redirected to file */ extern void cp_doquit(void); static struct History_info *init_history(void); // ---------------------------------------------------------- // Warte, bis keine Messages mehr zu bearbeiten sind void WaitForIdle(void) { MSG m; // arbeite alle Nachrichten ab while (PeekMessage(&m, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&m); DispatchMessage(&m); } } // ---------------------------------------------------------- // Warte, bis keine Messages mehr zu bearbeiten sind, // dann warte auf neue Message (Input handling ohne Dauerloop) static void WaitForMessage(void) { MSG m; // arbeite alle Nachrichten ab while (PeekMessage(&m, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&m); DispatchMessage(&m); } WaitMessage(); } // ------------------------------------------------------------- // Loeschen des Stringfensters static void ClearInput(void) { // Darstellen Edit_SetText(swString, ""); } // -------------------------------------------------------- /* New text to Source file window */ void SetSource(char *Name) { if (hwSource) { SetWindowText(hwSource, Name); InvalidateRgn(hwSource, NULL, TRUE); } } // ----------------------------------------------------------- /* New progress report into analysis window. Update only every DELTATIME milliseconds */ #define DELTATIME 150 void SetAnalyse(char *Analyse, /* in: analysis type */ int DecaPercent) /* in: 10 times the progress [%] */ { static int OldPercent = -2; /* Previous progress value */ static char OldAn[128]; /* Previous analysis type */ char s[128], t[128]; /* outputs to analysis window and task bar */ static struct timeb timebefore; /* previous time stamp */ struct timeb timenow; /* actual time stamp */ int diffsec, diffmillisec; /* differences actual minus prev. time stamp */ WaitForIdle(); if ((DecaPercent == OldPercent) && !strcmp(OldAn, Analyse)) return; /* get actual time */ ftime(&timenow); timediff(&timenow, &timebefore, &diffsec, &diffmillisec); /* info every one percent of progress: actual time, progress, to catch linearity of progress of simulation */ if (ft_ngdebug && !strcmp(Analyse, "tran")) if ((int)((double)DecaPercent/10.) > (int)((double)OldPercent/10.)) win_x_printf("%3.1f%% percent progress after %4.2f seconds.\n", (double)DecaPercent/10., seconds()); OldPercent = DecaPercent; /* output only into hwAnalyse window and if time elapsed is larger than DELTATIME given value, or if analysis has changed, else return */ if (((diffsec > 0) || (diffmillisec > DELTATIME) || strcmp(OldAn, Analyse))) { if (DecaPercent < 0) { sprintf(s, "--ready--"); sprintf(t, "%s", PACKAGE_STRING); } else if (DecaPercent == 0) { sprintf(s, "%s", Analyse); sprintf(t, "%s %s", PACKAGE_STRING, Analyse); } else if (!strcmp(Analyse, "shooting")) { sprintf(s, "%s: %d", Analyse, DecaPercent); sprintf(t, "%s %d", PACKAGE_STRING, DecaPercent); } else { sprintf(s, "%s: %3.1f%%", Analyse, (double)DecaPercent/10.); sprintf(t, "%s %3.1f%%", PACKAGE_STRING, (double)DecaPercent/10.); } timebefore.dstflag = timenow.dstflag; timebefore.millitm = timenow.millitm; timebefore.time = timenow.time; timebefore.timezone = timenow.timezone; /* info when previous analysis period has finished */ if (strcmp(OldAn, Analyse)) { if (ft_ngdebug && (strcmp(OldAn, ""))) win_x_printf("%s finished after %4.2f seconds.\n", OldAn, seconds()); strncpy(OldAn, Analyse, 127); } SetWindowText(hwAnalyse, s); SetWindowText(hwMain, t); InvalidateRgn(hwAnalyse, NULL, TRUE); InvalidateRgn(hwMain, NULL, TRUE); } UpdateWindow(hwAnalyse); UpdateWindow(hwMain); } // --------------------------------------------------------------- // Anpassen des Scrollers im Textfenster // Stellt gleichzeitig den Text neu dar static void AdjustScroller(void) { int LineCount; int FirstLine; int MyFirstLine; LineCount = Edit_GetLineCount(twText); FirstLine = Edit_GetFirstVisibleLine(twText); MyFirstLine = LineCount - VisibleRows; if (MyFirstLine < 0 ) MyFirstLine = 0; Edit_Scroll(twText, (WPARAM) MyFirstLine - FirstLine, 0); // Das wars DoUpdate = FALSE; } // Loeschen einer Zeile im Textbuffer static void _DeleteFirstLine(void) { char *cp = strchr(TBuffer, LF); if (!cp) { // Buffer leeren TBufEnd = 0; TBuffer[TBufEnd] = SE; return; } cp++; TBufEnd -= (size_t)(cp - TBuffer); memmove(TBuffer, cp, TBufEnd); TBuffer[TBufEnd] = SE; } /* Compare old system time with current system time. If difference is larger than ms milliseconds, return TRUE. If time is less than the delay time (in milliseconds), return TRUE. */ static bool CompareTime(int ms, int delay) { static __int64 prevfileTime64Bit; static __int64 startfileTime64Bit; /* conversion: time in ms -> 100ns */ __int64 reftime = ms * 10000; __int64 delaytime = delay * 10000; FILETIME newtime; /* get time in 100ns units */ GetSystemTimeAsFileTime(&newtime); ULARGE_INTEGER theTime; theTime.LowPart = newtime.dwLowDateTime; theTime.HighPart = newtime.dwHighDateTime; __int64 fileTime64Bit = theTime.QuadPart; __int64 difffileTime64Bit = fileTime64Bit - prevfileTime64Bit; /* Catch the delay start time */ if ((startfileTime64Bit) == 0) { startfileTime64Bit = fileTime64Bit; } if ((fileTime64Bit - startfileTime64Bit) < delaytime) return TRUE; if ((difffileTime64Bit) > reftime) { prevfileTime64Bit = fileTime64Bit; return TRUE; } else return FALSE; } // Add a char to the text buffer static void AppendChar(char c) { // Limit the text buffer size to TBufSize while ((TBufEnd + 4) >= TBufSize) _DeleteFirstLine(); // Add character TBuffer[TBufEnd++] = c; TBuffer[TBufEnd] = SE; DoUpdate = TRUE; /* If line is complete, and waiting time has passed, show it in text window. If time is less than delay time, always show the line (useful during start-up) */ if (c == LF && CompareTime(30, 500)) { DisplayText(); WaitForIdle(); } } // Anfuegen eines Strings an den TextBuffer static void AppendString(const char *Line) { size_t i; if (!Line) return; // Zeilenlaenge bestimmen i = strlen(Line); // Textbuffer nicht zu grosz werden lassen while ((i + TBufEnd + 3) >= TBufSize) _DeleteFirstLine(); // Zeile dranhaengen strcpy(&TBuffer[TBufEnd], Line); TBufEnd += i; DoUpdate = TRUE; } // Text neu darstellen static void DisplayText(void) { // Darstellen Edit_SetText(twText, TBuffer); // Scroller updaten, neuen Text darstellen AdjustScroller(); } // Anfuegen einer Zeile an den Textbuffer #if 0 void AppendLine(const char *Line) { if (!Line) return; // String anhaengen AppendString(Line); // CRLF anhaengen AppendString(CRLF); } #endif // ------------------------------------------------------------------- // Lese ein Zeichen ein static int w_getch(void) { int c; // Sind noch Zeichen da? c = SBuffer[0]; if (!c) { // Alte Informationen darstellen if (DoUpdate) DisplayText(); // Focus setzen SetFocus(swString); // Cursor = normal SetCursor(LoadCursor(NULL, IDC_IBEAM)); // Analyse ist fertig SetAnalyse("", -1); // Warten auf die Eingabe do { WaitForMessage(); c = SBuffer[0]; } while (!c); // Zeichen an die Ausgabe anhaengen AppendString(SBuffer); // Cursor = warten SetCursor(LoadCursor(NULL, IDC_WAIT)); } /* Shift out the character being returned. After the entire * contents of the buffer is read, it first byte is '\0' from * the null termination of the buffer. * * Inefficient way to process the string, but it should work */ (void) memmove(SBuffer, SBuffer + 1, sizeof SBuffer - 1); return c; } // Gebe ein Zeichen aus static int w_putch(int c) { if (c) AppendChar((char) c); return c; } /* --------------------------------------------------------- */ /* Main window changes size */ static void Main_OnSize(HWND hwnd, UINT state, int cx, int cy) { int h = cy - LineHeight - StatusHeight; NG_IGNORE(hwnd); NG_IGNORE(state); /* Expand text window */ MoveWindow(twText, 0, 0, cx, h , TRUE); VisibleRows = (h / RowHeight) - 1; AdjustScroller(); /* Expand string window */ MoveWindow(swString, 0, h, cx, LineHeight, TRUE); /* Expand Status Elements */ h = cy - LineHeight + StatusFrame - 1; MoveWindow(hwSource, StatusFrame, h, SourceLength, StatusElHeight, TRUE); MoveWindow(hwAnalyse, cx - 3 * StatusFrame - QuitButtonLength - AnalyseLength - 20, h, AnalyseLength, StatusElHeight, TRUE); MoveWindow(hwQuitButton, cx - StatusFrame - QuitButtonLength - 20, h, QuitButtonLength, StatusElHeight, TRUE); } /* Write a command into the command buffer */ static void PostSpiceCommand(const char * const cmd) { strcpy(SBuffer, cmd); strcat(SBuffer, CRLF); } /* Main Window procedure */ static LRESULT CALLBACK MainWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { /* command issued by pushing the "Quit" button */ case WM_COMMAND: if (HIWORD(wParam) == BN_CLICKED) if (ft_batchmode && (MessageBox(NULL, "Do you want to quit ngspice?", "Quit", MB_OKCANCEL | MB_ICONERROR) == IDCANCEL)) goto DEFAULT_AFTER; if (LOWORD(wParam) == QUIT_BUTTON_ID) SendMessage(GetParent((HWND)lParam), WM_CLOSE, 0, 0); /* write all achieved so far to log file */ if (flogp) win_x_fflush(flogp); goto DEFAULT_AFTER; case WM_CLOSE: cp_doquit(); /* continue if the user declined the 'quit' command */ return 0; case WM_SIZE: HANDLE_WM_SIZE(hwnd, wParam, lParam, Main_OnSize); goto DEFAULT_AFTER; default: DEFAULT_AFTER: return DefWindowProc(hwnd, uMsg, wParam, lParam); } } /* Procedure for string (input) window */ static LRESULT CALLBACK StringWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { static struct History_info **pp_hi; /* handle to history */ switch (uMsg) { case WM_CREATE: /* Get access to history information */ pp_hi = (struct History_info **) ((LPCREATESTRUCT) lParam)->lpCreateParams; break; case WM_KEYDOWN: { const UINT i = (UINT) wParam; if ((i == VK_UP) || (i == VK_DOWN)) { /* Set old text to new */ SetWindowText(hwnd, (i == VK_UP) ? history_get_prev(*pp_hi, NULL) : history_get_next(*pp_hi, NULL)); /* Put cursor to end of line */ CallWindowProc(swProc, hwnd, uMsg, (WPARAM) VK_END, lParam); return 0; } if (i == VK_ESCAPE) { ClearInput(); return 0; } break; } case WM_CHAR: { const char c = (char) wParam; if (c == CR) { /* Get text from the window. Must leave space for crlf * that is appended. -1 accounts for NULL as follows: * The last argument to GetWindowText is the size of the * buffer for writing the string + NULL. The NULL will be * overwritten by the strcpy below, so it should not be * counted in the size needed for the CRLF string. */ const int n_char_returned = GetWindowText( hwnd, SBuffer, sizeof SBuffer - (sizeof CRLF - 1)); unsigned int n_char_prev_cmd; /* Add the command to the history if it is different from the * previous one. This avoids filling the buffer with the same * command and allows faster scrolling through the commands. * history_get_newest() is called rather than history_get_prev() * since the current return position may not be the last one * and the position should not be changed. */ const char *cmd_prev = history_get_newest( *pp_hi, &n_char_prev_cmd); if ((int) n_char_prev_cmd != n_char_returned || strcmp(SBuffer, cmd_prev) != 0) { /* Different, so add */ history_add(pp_hi, n_char_returned, SBuffer); } else { history_reset_pos(*pp_hi); } strcpy(SBuffer + n_char_returned, CRLF); ClearInput(); return 0; } if (c == VK_ESCAPE) return 0; /* ctrl-z ends input from string window (like a console input), FIXME: not yet working */ if (c == VK_EOT) { // strcat(SBuffer, ""); SBuffer[0] = c; // '\004'; SBuffer[1] = '\n'; return 0; } /* ctrl-c interrupts simulation */ if (c == VK_CANCEL) { raise (SIGINT); return 0; } } } /* end of switch over handled messages */ /* Fowrard to be processed further by swProc */ return CallWindowProc(swProc, hwnd, uMsg, wParam, lParam); } /* Procedure for text window */ static LRESULT CALLBACK TextWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { unsigned char c; UINT i; switch (uMsg) { case WM_KEYDOWN: i = (UINT) wParam; if ((i == VK_UP) || (i == VK_DOWN) || (i == VK_ESCAPE)) { /* redirect input into string window */ SetFocus(swString); return SendMessage(swString, uMsg, wParam, lParam); } goto DEFAULT_TEXT; case WM_CHAR: c = (unsigned char) wParam; if ((c == CR) || (c >= ' ') || (c == VK_ESCAPE)) { /* redirect input into string window */ SetFocus(swString); return SendMessage(swString, uMsg, wParam, lParam); } /* ctrl-c interrupts simulation */ if (c == VK_CANCEL) { raise (SIGINT); return 0; } default: DEFAULT_TEXT: return CallWindowProc(twProc, hwnd, uMsg, wParam, lParam); } } static void Element_OnPaint(HWND hwnd) { PAINTSTRUCT ps; RECT r; RECT s; HGDIOBJ o; char buffer[128]; int i; /* Prepare */ HDC hdc = BeginPaint(hwnd, &ps); GetClientRect(hwnd, &r); /* Draw frame */ o = GetStockObject(GRAY_BRUSH); s.left = r.left; s.right = r.right; s.top = r.top; s.bottom = r.top + 1; FillRect(hdc, &s, o); s.right = r.left + 1; s.bottom = r.bottom; FillRect(hdc, &s, o); o = GetStockObject(WHITE_BRUSH); s.right = r.right; s.top = r.bottom - 1; FillRect(hdc, &s, o); s.left = r.right - 1; s.top = r.top; FillRect(hdc, &s, o); /* Draw contents */ buffer[0] = '\0'; i = GetWindowText(hwnd, buffer, 127); s.left = r.left + 1; s.right = r.right - 1; s.top = r.top + 1; s.bottom = r.bottom - 1; o = GetStockObject(LTGRAY_BRUSH); FillRect(hdc, &s, o); SetBkMode(hdc, TRANSPARENT); ExtTextOut(hdc, s.left + 1, s.top + 1, ETO_CLIPPED, &s, buffer, (unsigned)i, NULL); /* End */ EndPaint(hwnd, &ps); } /* Procedure for element window */ static LRESULT CALLBACK ElementWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_PAINT: HANDLE_WM_PAINT(hwnd, wParam, lParam, Element_OnPaint); return 0; default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } } #define SPACE ' ' #define QUOTE '\"' #define DELIMITER 26 /* for the lack of anything better */ #define DELIMITERSTRING "\26" /* This function converts a string into an argc/argv represenation. INPUT: cmdline - a string OUTPUT: argc - the number of equivalent argv strings which is also the number of strings in argv argv - the argv given the input string which consists of seperate strings for each argument RETURNS: 0 on success -1 on failure */ static int MakeArgcArgv(char *cmdline, int *argc, char ***argv) { char *pC1; /* a temporary character pointer */ char *pWorkString = NULL; /* a working copy of cmdline */ int i; /* a loop counter */ int quoteflag = 0; /* for the finite state machine parsing cmdline */ bool firstspace = TRUE; /* count only the first space */ int numargs = 1; /* the number of command line arguments, later copied to *argc */ char **tmpargv; /* the temporary argv, later copied to *argv */ int status = ERROR_SUCCESS; /* status */ char buffer[MAX_PATH + 1]; char deli[2]; /* make sure we aren't dealing with any NULL pointers */ if ((NULL == argc) || (NULL == argv)) { status = -1; goto outahere; } *argc = 0; /* set the count to zero to start */ *argv = NULL; /* set the pointer to NULL to start */ /* if the string passed in was a NULL pointer, consider this to be an empty command line and give back only an argc of 1 and an argv[0] */ if (NULL != cmdline) { /* make a copy of the string so that we can modify it without messing up the original */ pWorkString = copy(cmdline); if (NULL == pWorkString) return -1; /* memory allocation error */ /* Now, to make sure we don't have any quoted arguments with spaces in them, replace all spaces except those between " marks with our own special delimiter for strtok */ /* trim all the whitespace off the end of the string. */ for (i = (signed)strlen(pWorkString) - 1; i >= 0; i--) if (isspace((unsigned char) pWorkString[i])) pWorkString[i] = '\0'; else break; #if defined(__CYGWIN__) /* for CYGWIN: trim off the leading white space delivered by lpszCmdLine. */ pWorkString = rlead(pWorkString); #endif /* If we still have a string left, parse it for all the arguments. */ if (strlen(pWorkString)) { /* This could probably be done with strtok as well but strtok is destructive if I wanted to look for " \"" and I couldn't tell what delimiter that I had bumped against */ for (i = 0; i < (signed)strlen(pWorkString); i++) switch (pWorkString[i]) { case SPACE: if (!quoteflag) { pWorkString[i] = DELIMITER; /* change space to delimiter */ if (firstspace) /* count only the first space */ numargs++; firstspace = FALSE; } break; case QUOTE: quoteflag = !quoteflag; /* turns on and off as we pass quotes */ break; default: firstspace = TRUE; break; } /* Now, we should have ctrl-Zs everywhere that there used to be a space not protected by quote marks. We should also have the number of command line arguments that were in the command line (not including argv[0] which should be the program name). We should add one more to numargs to take into account argv[0]. */ numargs++; } } /* malloc an argv */ tmpargv = (char**) malloc((unsigned)numargs * sizeof(char *)); if (NULL == tmpargv) { status = -1; goto outahere; } /* API to give the program name */ GetModuleFileName(NULL, buffer, sizeof(buffer)); tmpargv[0] = copy(buffer); /* add program name to argv */ deli[0] = DELIMITER; deli[1] = '\0'; /* delimiter for strtok */ pC1 = NULL; /* Now actually strdup all the arguments out of the string and store them in the argv */ for (i = 1; i < numargs; i++) { if (NULL == pC1) pC1 = pWorkString; if (i == 1) tmpargv[i] = copy(strtok(pC1, deli)); else tmpargv[i] = copy(strtok(NULL, deli)); } /* copy the working values over to the arguments */ *argc = numargs; *argv = tmpargv; outahere: /* free the working string if one was allocated */ if (pWorkString) free(pWorkString); return status; } /* Main entry point for our Windows application */ int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpszCmdLine, _In_ int nCmdShow) { int ix, iy; /* width and height of screen */ int status; int argc; char **argv; /* Initialize history info to a maximum of HIST_SIZE commands. * The initial buffer for storage is N_BYTE_HIST_BUF bytes. */ struct History_info *p_hi = init_history(); if (p_hi == (struct History_info *) NULL) { goto THE_END; } RECT wsize; /* size of usable window */ NG_IGNORE(hPrevInstance); /* fill global variables */ hInst = hInstance; nShowState = nCmdShow; /* Initialize text buffer */ TBufEnd = 0; TBuffer[TBufEnd] = SE; SBuffer[0] = SE; /* Define main window class */ hwMainClass.style = CS_HREDRAW | CS_VREDRAW; hwMainClass.lpfnWndProc = MainWindowProc; hwMainClass.cbClsExtra = 0; hwMainClass.cbWndExtra = 0; hwMainClass.hInstance = hInst; hwMainClass.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(101)); hwMainClass.hCursor = LoadCursor(NULL, IDC_ARROW); hwMainClass.hbrBackground = GetStockObject(LTGRAY_BRUSH); hwMainClass.lpszMenuName = NULL; hwMainClass.lpszClassName = hwClassName; if (!RegisterClass(&hwMainClass)) goto THE_END; /* Define text window class */ if (!GetClassInfo(NULL, "EDIT", &twTextClass)) goto THE_END; twProc = twTextClass.lpfnWndProc; twTextClass.lpfnWndProc = TextWindowProc; twTextClass.hInstance = hInst; twTextClass.lpszMenuName = NULL; twTextClass.lpszClassName = twClassName; if (!RegisterClass(&twTextClass)) goto THE_END; /* Define string window class */ if (!GetClassInfo(NULL, "EDIT", &swStringClass)) goto THE_END; swProc = swStringClass.lpfnWndProc; swStringClass.lpfnWndProc = StringWindowProc; swStringClass.hInstance = hInst; swStringClass.lpszMenuName = NULL; swStringClass.lpszClassName = swClassName; if (!RegisterClass(&swStringClass)) goto THE_END; /* Define status element class */ hwElementClass.style = CS_HREDRAW | CS_VREDRAW; hwElementClass.lpfnWndProc = ElementWindowProc; hwElementClass.cbClsExtra = 0; hwElementClass.cbWndExtra = 0; hwElementClass.hInstance = hInst; hwElementClass.hIcon = NULL; hwElementClass.hCursor = LoadCursor(NULL, IDC_ARROW); hwElementClass.hbrBackground = GetStockObject(LTGRAY_BRUSH); hwElementClass.lpszMenuName = NULL; hwElementClass.lpszClassName = hwElementClassName; if (!RegisterClass(&hwElementClass)) goto THE_END; /*Create main window */ // iy = GetSystemMetrics(SM_CYSCREEN); // iyt = GetSystemMetrics(SM_CYSCREEN) / 3; // ix = GetSystemMetrics(SM_CXSCREEN); SystemParametersInfo(SPI_GETWORKAREA, 0, &wsize, 0); iy = wsize.bottom; ix = wsize.right; #ifndef BIG_WINDOW_FOR_DEBUGGING const int iyt = iy / 3; /* height of screen divided by 3 */ hwMain = CreateWindow(hwClassName, hwWindowName, WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, 0, iyt * 2, ix, iyt, NULL, NULL, hInst, NULL); #else hwMain = CreateWindow(hwClassName, hwWindowName, WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, 0, 0, ix, iy, NULL, NULL, hInst, NULL); #endif if (!hwMain) goto THE_END; /* Create text window */ twText = CreateWindowEx(WS_EX_NOPARENTNOTIFY, twClassName, twWindowName, ES_LEFT | ES_MULTILINE | ES_READONLY | WS_CHILD | WS_BORDER | WS_VSCROLL, 20, 20, 300, 100, hwMain, NULL, hInst, NULL); if (!twText) goto THE_END; /* Ansii fixed font */ { HDC textDC; HFONT font; TEXTMETRIC tm; font = GetStockFont(ANSI_FIXED_FONT); SetWindowFont(twText, font, FALSE); textDC = GetDC(twText); if (textDC) { SelectObject(textDC, font); if (GetTextMetrics(textDC, &tm)) { RowHeight = tm.tmHeight; WinLineWidth = 90 * tm.tmAveCharWidth; } ReleaseDC(twText, textDC); } } /* Create string window for input. Give a handle to history info to * the window for saving and retrieving commands */ swString = CreateWindowEx(WS_EX_NOPARENTNOTIFY, swClassName, swWindowName, ES_LEFT | WS_CHILD | WS_BORDER | ES_AUTOHSCROLL, /* Allow text to scroll */ 20, 20, 300, 100, hwMain, NULL, hInst, &p_hi); if (!swString) { goto THE_END; } { HDC stringDC; TEXTMETRIC tm; stringDC = GetDC(swString); if (stringDC) { if (GetTextMetrics(stringDC, &tm)) LineHeight = tm.tmHeight + tm.tmExternalLeading + BorderSize; ReleaseDC(swString, stringDC); } } /* Create source window */ hwSource = CreateWindowEx(WS_EX_NOPARENTNOTIFY, hwElementClassName, hwSourceWindowName, WS_CHILD, 0, 0, SourceLength, StatusElHeight, hwMain, NULL, hInst, NULL); if (!hwSource) goto THE_END; /* Create analysis window */ hwAnalyse = CreateWindowEx(WS_EX_NOPARENTNOTIFY, hwElementClassName, hwAnalyseWindowName, WS_CHILD, 0, 0, AnalyseLength, StatusElHeight, hwMain, NULL, hInst, NULL); if (!hwAnalyse) goto THE_END; /* Create "Quit" button */ hwQuitButton = CreateWindow("BUTTON", "Quit", WS_CHILD | BS_PUSHBUTTON, 0, 0, QuitButtonLength, StatusElHeight, hwMain, (HMENU)(UINT_PTR)QUIT_BUTTON_ID, hInst, NULL); if (!hwQuitButton) goto THE_END; /* Make main window and subwindows visible. Size of windows allows display of 80 character line. Limit window to screen size (if only VGA). */ if (WinLineWidth > ix) WinLineWidth = ix; #ifndef BIG_WINDOW_FOR_DEBUGGING MoveWindow(hwMain, 0, (iyt * 2), WinLineWidth, iyt, FALSE); #endif ShowWindow(hwMain, nShowState); ShowWindow(twText, SW_SHOWNORMAL); ShowWindow(swString, SW_SHOWNORMAL); ShowWindow(hwSource, SW_SHOWNORMAL); ShowWindow(hwAnalyse, SW_SHOWNORMAL); ShowWindow(hwQuitButton, SW_SHOWNORMAL); ClearInput(); DisplayText(); SetSource(""); SetAnalyse("Start", 0); UpdateWindow(hwMain); SetFocus(swString); status = MakeArgcArgv(lpszCmdLine, &argc, &argv); /* Wait until everything is settled */ WaitForIdle(); /* Go to main() */ nReturnCode = xmain(argc, argv); THE_END: /* terminate */ /* Free history information if initialized */ if (p_hi != (struct History_info *) NULL) { history_free(p_hi); } return nReturnCode; } /* end of function WinMain */ /* This funtion initializes the history buffering with a welcome command */ static struct History_info *init_history(void) { static struct History_info_opt hi_opt = { sizeof hi_opt, HIST_SIZE, HIST_SIZE, N_BYTE_HIST_BUF, 4, 20, 10 }; struct History_info *p_hi = history_init(&hi_opt); if (p_hi == (struct History_info *) NULL) { return (struct History_info *) NULL; } { /* Initialize history buffer with a greeting */ static const char cmd_welcome[] = "# Welcome to ngspice!"; (void) history_add(&p_hi, sizeof cmd_welcome - 1, cmd_welcome); } return p_hi; } /* end of function init_history */ // ------------------------------------------------------------------- /* Eigentlich wollte ich die Standard-Streams durch einen Hook in der Library umleiten, aber so etwas gibt es anscheinend nicht. Deswegen musz ich praktisch alle IO-Funktionen umdefinieren (siehe wstdio.h). Leider geht das nicht bei allen. Man schaue also nach, bevor man eine Funktion benutzt! */ int win_x_fflush(FILE *stream) { if (((stream == stdout) && !flogp) || (stream == stderr)) return 0; else return fflush(stream); } int win_x_fgetc(FILE *stream) { if (stream == stdin) { int c; do c = w_getch(); while (c == CR); return c; } else return fgetc(stream); } int win_x_fgetpos(FILE *stream, fpos_t *pos) { int result; if ((stream == stdin) || ((stream == stdout) && !flogp) || (stream == stderr)) { assert(FALSE); return 0; } else result = fgetpos(stream, pos); return result; } char * win_x_fgets(char *s, int n, FILE *stream) { if (stream == stdin) { int i = 0; int c; while (i < (n - 1)) { c = w_getch(); if (c == LF) { s[i++] = LF; break; } if (c != CR) s[i++] = (char)c; } s[i] = SE; return s; } else return fgets(s, n, stream); } int win_x_fputc(int c, FILE *stream) { if (!flogp && ((stream == stdout) || (stream == stderr))) { if (c == LF) w_putch(CR); return w_putch(c); // Ausgabe in Datei *.log 14.6.2000 } else if (flogp && ((stream == stdout) || stream == stderr)) { return fputc(c, flogp); } else return fputc(c, stream); } int win_x_fputs(const char *s, FILE *stream) { // if (((stream == stdout) && !flogp) || (stream == stderr)) { hvogt 14.6.2000 if ((stream == stdout) || (stream == stderr)) { int c = SE; if (!s) return EOF; for (;;) { if (*s) { c = *s++; win_x_fputc(c, stream); } else return c; } } else return fputs(s, stream); } int win_x_fprintf(FILE *stream, const char *format, ...) { int result; char s[IOBufSize]; va_list args; va_start(args, format); // if (((stream == stdout) && !flogp) || (stream == stderr)) { if ((stream == stdout) || (stream == stderr)) { s[0] = SE; result = vsprintf(s, format, args); win_x_fputs(s, stream); } else result = vfprintf(stream, format, args); va_end(args); return result; } int win_x_fclose(FILE *stream) { if ((stream == stdin) || ((stream == stdout) && !flogp) || (stream == stderr)) { assert(FALSE); return 0; } return fclose(stream); } size_t win_x_fread(void *ptr, size_t size, size_t n, FILE *stream) { // if ((stream == stdin) || ((stream == stdout) && !flogp) || (stream == stderr)) { if (((stream == stdout) && !flogp) || (stream == stderr)) { assert(FALSE); return 0; } if (stream == stdin) { size_t i = 0; int c; char *s = (char *) ptr; while (i < (size * n - 1)) { c = w_getch(); if (c == LF) { // s[i++] = LF; break; } if (c != CR) { s[i++] = (char) c; } } // s[i] = SE; return (size_t) (i / size); } /* end of case of stdin */ return fread(ptr, size, n, stream); } FILE * win_x_freopen(const char *path, const char *mode, FILE *stream) { if ((stream == stdin)/* || ((stream == stdout) && !flogp) || (stream == stderr)*/) { assert(FALSE); return 0; } return freopen(path, mode, stream); } int win_x_fscanf(FILE *stream, const char *format, ...) { int result; va_list args; va_start(args, format); if ((stream == stdin) || ((stream == stdout) && !flogp) || (stream == stderr)) { assert(FALSE); return 0; } result = vfscanf(stream, format, args); va_end(args); return result; } int win_x_fseek(FILE *stream, long offset, int whence) { if ((stream == stdin) || ((stream == stdout) && !flogp) || (stream == stderr)) { assert(FALSE); return 0; } return fseek(stream, offset, whence); } int win_x_fsetpos(FILE *stream, const fpos_t *pos) { if ((stream == stdin) || ((stream == stdout) && !flogp) || (stream == stderr)) { assert(FALSE); return 0; } return fsetpos(stream, pos); } long win_x_ftell(FILE *stream) { if ((stream == stdin) || ((stream == stdout) && !flogp) || (stream == stderr)) { assert(FALSE); return 0; } return ftell(stream); } size_t win_x_fwrite(const void *ptr, size_t size, size_t n, FILE *stream) { // win_x_printf("entered fwrite, size %d, n %d \n", size, n); if (stream == stdin) { assert(FALSE); // win_x_printf("False \n"); return 0; } if ((stream == stdout) || (stream == stderr)) { const char *s = ptr; int c = SE; size_t i = 0; // char *out; // win_x_printf("test1 %s\n", s); if (!s) return 0 /* EOF */; for (i = 0; i < (size * n); i++) { if (*s) { c = *s++; win_x_fputc(c, stream); } else break; } // win_x_fread(out, size, n, stream); // win_x_printf("test2 %s", out); return (int)(i / size); } // win_x_printf("test3 %s\n", ptr); return fwrite(ptr, size, n, stream); } char * win_x_gets(char *s) { return win_x_fgets(s, 10000, stdin); } void win_x_perror(const char *s) { const char *cp; // char s[IOBufSize]; cp = strerror(errno); win_x_fprintf(stderr, "%s: %s\n", s, cp); /* output to message box sprintf(s, "%s: %s\n", s, cp); if (!flogp) winmessage(s);*/ } int win_x_printf(const char *format, ...) { int result; char s[IOBufSize]; va_list args; va_start(args, format); s[0] = SE; result = vsprintf(s, format, args); win_x_fputs(s, stdout); va_end(args); return result; } int win_x_puts(const char *s) { return win_x_fputs(s, stdout); } int win_x_scanf(const char *format, ...) { NG_IGNORE(format); assert(FALSE); return FALSE; } int win_x_ungetc(int c, FILE *stream) { NG_IGNORE(c); NG_IGNORE(stream); assert(FALSE); return FALSE; } int win_x_vfprintf(FILE *stream, const char *format, void *arglist) { int result; char s[IOBufSize]; s[0] = SE; // if (((stream == stdout) && !flogp) || (stream == stderr)) { if ((stream == stdout) || (stream == stderr)) { result = vsprintf(s, format, arglist); win_x_fputs(s, stdout); } else result = vfprintf(stream, format, arglist); return result; } #if 0 int win_x_vfscanf(FILE *stream, const char *format, void *arglist) { if (stream == stdin) { assert(FALSE); return 0; } return vfscanf(stream, format, arglist); } #endif int win_x_vprintf(const char *format, void *arglist) { int result; char s[IOBufSize]; s[0] = SE; result = vsprintf(s, format, arglist); win_x_fputs(s, stdout); return result; } #if 0 int win_x_vscanf(const char *format, void *arglist) { assert(FALSE); return FALSE; } #endif int win_x_getc(FILE *fp) { return win_x_fgetc(fp); } int win_x_getchar(void) { return win_x_fgetc(stdin); } int win_x_putchar(const int c) { return win_x_fputc(c, stdout); } int win_x_putc(const int c, FILE *fp) { return win_x_fputc(c, fp); } int win_x_feof(FILE *fp) { if ((fp == stdin) || (fp == stdout) || (fp == stderr)) { assert(FALSE); return 0; } return feof(fp); } int win_x_ferror(FILE *fp) { if ((fp == stdin) || (fp == stdout) || (fp == stderr)) { assert(FALSE); return 0; } return ferror(fp); } int win_x_fputchar(int c) { return win_x_fputc(c, stdout); } // ------------------------------------------------------ #if 0 size_t _memavl(void) { MEMORYSTATUS ms; DWORD sum; ms.dwLength = sizeof(MEMORYSTATUS); GlobalMemoryStatus(&ms); sum = ms.dwAvailPhys + ms.dwAvailPageFile; return (size_t) sum; } #endif // -------------------------------------------- #if 0 #ifndef _MSC_VER int system(const char *command) { // info-Bloecke STARTUPINFO si; PROCESS_INFORMATION pi; DWORD ExitStatus; // Datenstrukturen fuellen memset(&si, 0, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); memset(&pi, 0, sizeof(PROCESS_INFORMATION)); // starte den neuen Prozess if (!CreateProcess( NULL, // address of module name (char *) command, // address of command line NULL, // address of process security attributes NULL, // address of thread security attributes FALSE, // new process inherits handles NORMAL_PRIORITY_CLASS, // creation flags NULL, // address of new environment block NULL, // address of current directory name &si, // address of STARTUPINFO &pi // address of PROCESS_INFORMATION )) return -1; // dieses Handle musz da sein if (!pi.hProcess) return -1; do { // Multitasking ermoeglichen WaitForIdle(); // hole mir den Exit-Code des Prozesses if (!GetExitCodeProcess(pi.hProcess, &ExitStatus)) return -1; // solange er existiert } while (ExitStatus == STILL_ACTIVE); // Handles freigeben if (pi.hThread) CloseHandle(pi.hThread); if (pi.hProcess) CloseHandle(pi.hProcess); // fertig return 0; } // system Windows95 #endif #endif #ifdef __CYGWIN__ /* Strip leading spaces, return a copy of s */ static char * rlead(char *s) { int i, j = 0; static char temp[512]; bool has_space = TRUE; for (i = 0; s[i] != '\0'; i++) { if (isspace((unsigned char) s[i]) && has_space) { ; //Do nothing } else { temp[j] = s[i]; j++; has_space = FALSE; } } temp[j] = '\0'; return copy(temp); } #endif void winmessage(char *new_msg) { /* open a message box only if message is not written into -o xxx.log */ if (!flogp) MessageBox(NULL, new_msg, "Ngspice Info", MB_OK | MB_ICONERROR); } #endif /* HAS_WINGUI */ tmpk8ny_4pz/src/hist_info.h0000644000175000017500000000442613546075722016110 0ustar carstencarsten/* Header for saving and retrieving history strings */ #ifndef HIST_INFO_H #define HIST_INFO_H struct History_info; /* Options for history logging */ struct History_info_opt { size_t n_byte_struct; /* sizeof(struct History_info_opt) * Used for possible versioning */ unsigned int n_str_init; /* initial number of allocated string locators * Value must be at least 2 */ unsigned int n_str_max; /* max number of string locators * Value must be at least n_str_init when * initializing but not when changing options. * Then it must be at least 2 */ size_t n_byte_str_buf_init; /* initial size of the string buffer. * Value must be at least 2 */ /* If the amount of the buffer for storing strings that is in use * multiplied by oversize_factor is less than the allocated amount, * the buffer for storing strings is reduced by a factor of 2. * Value must be at least 4. * * The first check for an oversized buffer is made after * n_insert_first_oversize_check calls to history_add(). * A value of 0 suppresses checks. * * Subsequent checks are made after n_insert_per_oversize_check calls * to history_add(). * A value of 0 suppresses checks after the first one. */ unsigned int oversize_factor; unsigned int n_insert_first_oversize_check; unsigned int n_insert_per_oversize_check; }; struct History_info *history_init(struct History_info_opt *p_hi_opt); int history_add(struct History_info **pp_hi, unsigned int n_char_str, const char *str); void history_free(struct History_info *p_hi);\ const char *history_get_newest(struct History_info *p_hi, unsigned int *p_n_char_str); const char *history_get_next(struct History_info *p_hi, unsigned int *p_n_char_str); const char *history_get_prev(struct History_info *p_hi, unsigned int *p_n_char_str); void history_reset_pos(struct History_info *p_hi); int history_getopt(const struct History_info *p_hi, struct History_info_opt *p_hi_opt); int history_setopt(struct History_info **pp_hi, struct History_info_opt *p_hi_opt); #endif /* HIST_INFO_H include guard */ tmpk8ny_4pz/src/ngproc2mod.c0000644000175000017500000003214013546075722016165 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ /* convert .process file to set of .model cards */ #include "ngspice/ngspice.h" #include #include #include "ngspice/inpdefs.h" #include "ngspice/suffix.h" void getdata(double*,int,int); typedef struct snmod { struct snmod *nnext; char *nname; double nparms[69]; } nmod; typedef struct spmod { struct spmod *pnext; char *pname; double pparms[69]; } pmod; typedef struct sdmod { struct sdmod *dnext; char *dname; double dparms[10]; } dmod; typedef struct symod { struct symod *ynext; char *yname; double yparms[10]; } ymod; typedef struct smmod { struct smmod *mnext; char *mname; double mparms[10]; } mmod; FILE *m = NULL; FILE *p = NULL; char *dataline; int main(void) { char *typeline; char *prname; nmod *nlist=NULL,*ncur; pmod *plist=NULL,*pcur; dmod *dlist=NULL,*dcur; ymod *ylist=NULL,*ycur; mmod *mlist=NULL,*mcur; char *filename; filename = TMALLOC(char, 1024); typeline = TMALLOC(char, 1024); dataline = TMALLOC(char, 1024); while(p == NULL) { printf("name of process file (input): "); if(scanf("%s",filename)!=1) { printf("error reading process file name\n"); exit(1); } p = fopen(filename,"r"); if(p==NULL) { printf("can't open %s:",filename); perror(""); } } while(m == NULL) { printf("name of .model file (output): "); if(scanf("%s",filename)!=1) { printf("error reading model file name\n"); exit(1); } m = fopen(filename,"w"); if(m==NULL) { printf("can't open %s:",filename); perror(""); } } printf("process name : "); if(scanf("%s",filename)!=1) { printf("error reading process name\n"); exit(1); } prname = filename; if(fgets(typeline,1023,p)==NULL) { printf("error reading input description line\n"); exit(1); } INPcaseFix(typeline); for (;;) { while(*typeline == ' ' || *typeline == '\t' || *typeline == ',' || *typeline == '\n' ) { typeline ++; } if(*typeline == '\0') break; if(strncmp("nm",typeline,2) == 0) { ncur = TMALLOC(nmod, 1); ncur->nnext = NULL; ncur->nname = typeline; typeline[3] = '\0'; typeline += 4; getdata(ncur->nparms,69,3); ncur->nnext = nlist; nlist = ncur; } else if(strncmp("pm",typeline,2) == 0) { pcur = TMALLOC(pmod, 1); pcur->pnext = NULL; pcur->pname = typeline; typeline[3] = '\0'; typeline += 4; getdata(pcur->pparms,69,3); pcur->pnext = plist; plist = pcur; } else if(strncmp("py",typeline,2) == 0) { ycur = TMALLOC(ymod, 1); ycur->ynext = NULL; ycur->yname = typeline; typeline[3] = '\0'; typeline += 4; getdata(ycur->yparms,10,5); ycur->ynext = ylist; ylist = ycur; } else if(strncmp("du",typeline,2) == 0) { dcur = TMALLOC(dmod, 1); dcur->dnext = NULL; dcur->dname = typeline; typeline[3] = '\0'; typeline += 4; getdata(dcur->dparms,10,5); dcur->dnext = dlist; dlist = dcur; } else if(strncmp("ml",typeline,2) == 0) { mcur = TMALLOC(mmod, 1); mcur->mnext = NULL; mcur->mname = typeline; typeline[3] = '\0'; typeline += 4; getdata(mcur->mparms,10,5); mcur->mnext = mlist; mlist = mcur; } else { printf(" illegal header line in process file: run terminated\n"); printf(" error occurred while parsing %s\n",typeline); exit(1); } } for(dcur=dlist;dcur;dcur=dcur->dnext) { fprintf(m,".model %s_%s r rsh = %g defw = %g narrow = %g\n", prname,dcur->dname,dcur->dparms[0],dcur->dparms[8],dcur->dparms[9]); fprintf(m,".model %s_%s c cj = %g cjsw = %g defw = %g narrow = %g\n", prname,dcur->dname,dcur->dparms[1],dcur->dparms[2],dcur->dparms[8], dcur->dparms[9]); } for(ycur=ylist;ycur;ycur=ycur->ynext) { fprintf(m,".model %s_%s r rsh = %g defw = %g narrow = %g\n", prname,ycur->yname,ycur->yparms[0],ycur->yparms[8],ycur->yparms[9]); fprintf(m,".model %s_%s c cj = %g cjsw = %g defw = %g narrow = %g\n", prname,ycur->yname,ycur->yparms[1],ycur->yparms[2],ycur->yparms[8], ycur->yparms[9]); } for(mcur=mlist;mcur;mcur=mcur->mnext) { fprintf(m,".model %s_%s r rsh = %g defw = %g narrow = %g\n", prname,mcur->mname,mcur->mparms[0],mcur->mparms[8],mcur->mparms[9]); fprintf(m,".model %s_%s c cj = %g cjsw = %g defw = %g narrow = %g\n", prname,mcur->mname,mcur->mparms[1],mcur->mparms[2],mcur->mparms[8], mcur->mparms[9]); } for(pcur=plist;pcur;pcur=pcur->pnext) { for(dcur=dlist;dcur;dcur=dcur->dnext) { fprintf(m,".model %s_%s_%s pmos level=4\n",prname,pcur->pname, dcur->dname); fprintf(m,"+ vfb = %g lvfb = %g wvfb = %g\n", pcur->pparms[0],pcur->pparms[1],pcur->pparms[2]); fprintf(m,"+ phi = %g lphi = %g wphi = %g\n", pcur->pparms[3],pcur->pparms[4],pcur->pparms[5]); fprintf(m,"+ k1 = %g lk1 = %g wk1 = %g\n", pcur->pparms[6],pcur->pparms[7],pcur->pparms[8]); fprintf(m,"+ k2 = %g lk2 = %g wk2 = %g\n", pcur->pparms[9],pcur->pparms[10],pcur->pparms[11]); fprintf(m,"+ eta = %g leta = %g weta = %g\n", pcur->pparms[12],pcur->pparms[13],pcur->pparms[14]); fprintf(m,"+ muz = %g dl = %g dw = %g\n", pcur->pparms[15],pcur->pparms[16],pcur->pparms[17]); fprintf(m,"+ u0 = %g lu0 = %g wu0 = %g\n", pcur->pparms[18],pcur->pparms[19],pcur->pparms[20]); fprintf(m,"+ u1 = %g lu1 = %g wu1 = %g\n", pcur->pparms[21],pcur->pparms[22],pcur->pparms[23]); fprintf(m,"+ x2mz = %g lx2mz = %g wx2mz = %g\n", pcur->pparms[24],pcur->pparms[25],pcur->pparms[26]); fprintf(m,"+ x2e = %g lx2e = %g wx2e = %g\n", pcur->pparms[27],pcur->pparms[28],pcur->pparms[29]); fprintf(m,"+ x3e = %g lx3e = %g wx3e = %g\n", pcur->pparms[30],pcur->pparms[31],pcur->pparms[32]); fprintf(m,"+ x2u0 = %g lx2u0 = %g wx2u0 = %g\n", pcur->pparms[33],pcur->pparms[34],pcur->pparms[35]); fprintf(m,"+ x2u1 = %g lx2u1 = %g wx2u1 = %g\n", pcur->pparms[36],pcur->pparms[37],pcur->pparms[38]); fprintf(m,"+ mus = %g lmus = %g wmus = %g\n", pcur->pparms[39],pcur->pparms[40],pcur->pparms[41]); fprintf(m,"+ x2ms = %g lx2ms = %g wx2ms = %g\n", pcur->pparms[42],pcur->pparms[43],pcur->pparms[44]); fprintf(m,"+ x3ms = %g lx3ms = %g wx3ms = %g\n", pcur->pparms[45],pcur->pparms[46],pcur->pparms[47]); fprintf(m,"+ x3u1 = %g lx3u1 = %g wx3u1 = %g\n", pcur->pparms[48],pcur->pparms[49],pcur->pparms[50]); fprintf(m,"+ tox = %g temp = %g vdd = %g\n", pcur->pparms[51],pcur->pparms[52],pcur->pparms[53]); fprintf(m,"+ cgdo = %g cgso = %g cgbo = %g\n", pcur->pparms[54],pcur->pparms[55],pcur->pparms[56]); fprintf(m,"+ xpart = %g \n", pcur->pparms[57]); fprintf(m,"+ n0 = %g ln0 = %g wn0 = %g\n", pcur->pparms[60],pcur->pparms[61],pcur->pparms[62]); fprintf(m,"+ nb = %g lnb = %g wnb = %g\n", pcur->pparms[63],pcur->pparms[64],pcur->pparms[65]); fprintf(m,"+ nd = %g lnd = %g wnd = %g\n", pcur->pparms[66],pcur->pparms[67],pcur->pparms[68]); fprintf(m,"+ rsh = %g cj = %g cjsw = %g\n", dcur->dparms[0], dcur->dparms[1], dcur->dparms[2]); fprintf(m,"+ js = %g pb = %g pbsw = %g\n", dcur->dparms[3], dcur->dparms[4], dcur->dparms[5]); fprintf(m,"+ mj = %g mjsw = %g wdf = %g\n", dcur->dparms[6], dcur->dparms[7], dcur->dparms[8]); fprintf(m,"+ dell = %g\n", dcur->dparms[9]); } } for(ncur=nlist;ncur;ncur=ncur->nnext) { for(dcur=dlist;dcur;dcur=dcur->dnext) { fprintf(m,".model %s_%s_%s nmos level=4\n",prname,ncur->nname, dcur->dname); fprintf(m,"+ vfb = %g lvfb = %g wvfb = %g\n", ncur->nparms[0],ncur->nparms[1],ncur->nparms[2]); fprintf(m,"+ phi = %g lphi = %g wphi = %g\n", ncur->nparms[3],ncur->nparms[4],ncur->nparms[5]); fprintf(m,"+ k1 = %g lk1 = %g wk1 = %g\n", ncur->nparms[6],ncur->nparms[7],ncur->nparms[8]); fprintf(m,"+ k2 = %g lk2 = %g wk2 = %g\n", ncur->nparms[9],ncur->nparms[10],ncur->nparms[11]); fprintf(m,"+ eta = %g leta = %g weta = %g\n", ncur->nparms[12],ncur->nparms[13],ncur->nparms[14]); fprintf(m,"+ muz = %g dl = %g dw = %g\n", ncur->nparms[15],ncur->nparms[16],ncur->nparms[17]); fprintf(m,"+ u0 = %g lu0 = %g wu0 = %g\n", ncur->nparms[18],ncur->nparms[19],ncur->nparms[20]); fprintf(m,"+ u1 = %g lu1 = %g wu1 = %g\n", ncur->nparms[21],ncur->nparms[22],ncur->nparms[23]); fprintf(m,"+ x2mz = %g lx2mz = %g wx2mz = %g\n", ncur->nparms[24],ncur->nparms[25],ncur->nparms[26]); fprintf(m,"+ x2e = %g lx2e = %g wx2e = %g\n", ncur->nparms[27],ncur->nparms[28],ncur->nparms[29]); fprintf(m,"+ x3e = %g lx3e = %g wx3e = %g\n", ncur->nparms[30],ncur->nparms[31],ncur->nparms[32]); fprintf(m,"+ x2u0 = %g lx2u0 = %g wx2u0 = %g\n", ncur->nparms[33],ncur->nparms[34],ncur->nparms[35]); fprintf(m,"+ x2u1 = %g lx2u1 = %g wx2u1 = %g\n", ncur->nparms[36],ncur->nparms[37],ncur->nparms[38]); fprintf(m,"+ mus = %g lmus = %g wmus = %g\n", ncur->nparms[39],ncur->nparms[40],ncur->nparms[41]); fprintf(m,"+ x2ms = %g lx2ms = %g wx2ms = %g\n", ncur->nparms[42],ncur->nparms[43],ncur->nparms[44]); fprintf(m,"+ x3ms = %g lx3ms = %g wx3ms = %g\n", ncur->nparms[45],ncur->nparms[46],ncur->nparms[47]); fprintf(m,"+ x3u1 = %g lx3u1 = %g wx3u1 = %g\n", ncur->nparms[48],ncur->nparms[49],ncur->nparms[50]); fprintf(m,"+ tox = %g temp = %g vdd = %g\n", ncur->nparms[51],ncur->nparms[52],ncur->nparms[53]); fprintf(m,"+ cgdo = %g cgso = %g cgbo = %g\n", ncur->nparms[54],ncur->nparms[55],ncur->nparms[56]); fprintf(m,"+ xpart = %g \n", ncur->nparms[57]); fprintf(m,"+ n0 = %g ln0 = %g wn0 = %g\n", ncur->nparms[60],ncur->nparms[61],ncur->nparms[62]); fprintf(m,"+ nb = %g lnb = %g wnb = %g\n", ncur->nparms[63],ncur->nparms[64],ncur->nparms[65]); fprintf(m,"+ nd = %g lnd = %g wnd = %g\n", ncur->nparms[66],ncur->nparms[67],ncur->nparms[68]); fprintf(m,"+ rsh = %g cj = %g cjsw = %g\n", dcur->dparms[0], dcur->dparms[1], dcur->dparms[2]); fprintf(m,"+ js = %g pb = %g pbsw = %g\n", dcur->dparms[3], dcur->dparms[4], dcur->dparms[5]); fprintf(m,"+ mj = %g mjsw = %g wdf = %g\n", dcur->dparms[6], dcur->dparms[7], dcur->dparms[8]); fprintf(m,"+ dell = %g\n", dcur->dparms[9]); } } return EXIT_NORMAL; } void getdata(double *vals, int count, int width) /* width: maximum number of values to accept per line */ { int i; int error; int start; char *c; do { if(fgets(dataline,1023,p)==NULL) { printf("premature end of file getting input data line\n"); exit(1); } start=0; } while (*dataline == '*') ; c = dataline; for(i=0;iwidth)) { /* end of line, so read another one */ do { if(fgets(dataline,1023,p)==NULL) { printf("premature end of file reading input data line \n"); exit(1); } start=0; } while (*dataline == '*') ; c = dataline; goto retry; } } } tmpk8ny_4pz/src/conf.c0000644000175000017500000000175713546075722015052 0ustar carstencarsten/* Common configuration file for ng-spice and nutmeg */ #include "ngspice/config.h" #include "conf.h" /* The GNU configure system should set PACKAGE_BUGREPORT use this if it does, otherwise fall back to a hardcoded address */ #ifdef PACKAGE_BUGREPORT #define BUG_ADDRESS PACKAGE_BUGREPORT #else #define BUG_ADDRESS "http://ngspice.sourceforge.net/bugrep.html" #endif char Spice_Version[] = PACKAGE_VERSION; char Spice_Notice[] = "Please file your bug-reports at " BUG_ADDRESS; #ifndef _MSC_VER char Spice_Build_Date[] = NGSPICEBUILDDATE; #else char Spice_Build_Date[] = __DATE__" "__TIME__; #endif char Spice_Manual[] = "Please get your ngspice manual from http://ngspice.sourceforge.net/docs.html"; char *Spice_Exec_Dir = NGSPICEBINDIR; char *Spice_Lib_Dir = NGSPICEDATADIR; #if defined (__MINGW32__) || defined (_MSC_VER) char *Def_Editor = "notepad.exe"; #else char *Def_Editor = "vi"; #endif int AsciiRawFile = 0; char *Bug_Addr = BUG_ADDRESS; char *Spice_Host = ""; char *Spiced_Log = ""; tmpk8ny_4pz/src/main.c0000644000175000017500000010715013546075722015043 0ustar carstencarsten/* Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher The main routine for ngspice */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include #include /* Added GNU Readline Support 11/3/97 -- Andrew Veliath */ /* from spice3f4 patch to ng-spice. jmr */ #ifdef HAVE_GNUREADLINE # include # include #endif /* editline development has added the following typdef to readline.h in 06/2018. It is not vailable with older libedit versions (pre-1.42.2) , thus we have to set it ourselves */ #ifdef HAVE_BSDEDITLINE #include #ifndef rl_hook_func_t typedef int rl_hook_func_t(void); #endif extern rl_hook_func_t *rl_event_hook; /* missing from editline/readline.h */ extern int rl_catch_signals; /* missing from editline/readline.h */ #endif #include "ngspice/iferrmsg.h" #include "ngspice/ftedefs.h" #include "ngspice/devdefs.h" #include "spicelib/devices/dev.h" #include "spicelib/analysis/analysis.h" #include "misc/ivars.h" #include "misc/misc_time.h" #include "misc/util.h" #if defined(HAS_WINGUI) || defined(_MSC_VER) || defined(__MINGW32__) # include "misc/mktemp.h" #endif #if defined(HAVE_GETOPT_LONG) && defined(HAVE_GETOPT_H) # include #else # include "misc/getopt_bsd.h" #endif #include "frontend/spiceif.h" #include "frontend/resource.h" #include "frontend/variable.h" #include "frontend/display.h" /* added by SDB to pick up Input() fcn */ #include "frontend/signal_handler.h" #include "frontend/misccoms.h" #include "ngspice/compatmode.h" #include "ngspice/randnumb.h" /* saj xspice headers */ #ifdef XSPICE # include "ngspice/ipctiein.h" # include "ngspice/mif.h" # include "ngspice/enh.h" # include "ngspice/mifproto.h" # include "ngspice/evtproto.h" #endif #ifdef CIDER # include "ngspice/numenum.h" # include "maths/misc/accuracy.h" #endif #if defined(HAVE_GNUREADLINE) || defined(HAVE_BSDEDITLINE) char history_file[512] = {'\0'}; static char *application_name; #endif /* Undefine this next line for debug tracing */ /* #define TRACE */ /* Main options */ static bool ft_servermode = FALSE; bool ft_batchmode = FALSE; bool ft_pipemode = FALSE; bool rflag = FALSE; /* has rawfile */ /* Frontend options */ bool ft_intrpt = FALSE; /* Set by the (void) signal handlers. TRUE = we've been interrupted. */ bool ft_setflag = FALSE; /* TRUE = Don't abort simulation after an interrupt. */ char *ft_rawfile = "rawspice.raw"; #ifdef XSPICE bool wantevtdata = FALSE; #endif #ifdef HAS_WINGUI extern void winmessage(char *new_msg); /* display a message box (defined in winmain.c)*/ extern void SetSource(char *Name); /* display the source file name in the source window */ extern int xmain(int argc, char **argv); FILE *flogp = NULL; /* log file ('-o logfile' command line option) */ #else bool orflag = FALSE; /* global for -o option */ #endif FILE *slogp = NULL; /* soa log file ('--soa-log file' command line option) */ /* Frontend and circuit options */ IFsimulator *ft_sim = NULL; char *errRtn; /* name of the routine declaring error */ char *errMsg = NULL; /* descriptive message about what went wrong */ char *cp_program; /* program name 'ngspice' */ char *Infile_Path = NULL; /* Path to netlist input file */ /* Globals definitions for Machine Accuracy Limits * (needed by CIDER) */ double BMin; /* lower limit for B(x) */ double BMax; /* upper limit for B(x) */ double ExpLim; /* limit for exponential */ double Accuracy; /* accuracy of the machine */ double MuLim, MutLim; #ifdef CIDER /* Global debug flags from CIDER, soon they will become * spice variables :) */ BOOLEAN ONEacDebug = FALSE; BOOLEAN ONEdcDebug = TRUE; BOOLEAN ONEtranDebug = TRUE; BOOLEAN ONEjacDebug = FALSE; BOOLEAN TWOacDebug = FALSE; BOOLEAN TWOdcDebug = TRUE; BOOLEAN TWOtranDebug = TRUE; BOOLEAN TWOjacDebug = FALSE; /* CIDER Global Variable Declarations */ int BandGapNarrowing; int TempDepMobility, ConcDepMobility, FieldDepMobility, TransDepMobility; int SurfaceMobility, MatchingMobility, MobDeriv; int CCScattering; int Srh, Auger, ConcDepLifetime, AvalancheGen; int FreezeOut = FALSE; int OneCarrier; int MaxIterations = 100; int AcAnalysisMethod = DIRECT; double Temp, RelTemp, Vt; double RefPsi;/* potential at Infinity */ double EpsNorm, VNorm, NNorm, LNorm, TNorm, JNorm, GNorm, ENorm; /* end cider globals */ #endif /* CIDER */ struct variable *(*if_getparam)(CKTcircuit *ckt, char **name, char *param, int ind, int do_model); /* static functions */ int SIMinit(IFfrontEnd *frontEnd, IFsimulator **simulator); static ATTRIBUTE_NORETURN void sp_shutdown(int exitval); static void app_rl_readlines(void); #if defined(HAVE_GNUREADLINE) || defined(HAVE_BSDEDITLINE) static char *prompt(void); #ifndef X_DISPLAY_MISSING # include "frontend/plotting/x11.h" static int app_event_func(void); #endif #endif static void show_help(void); static void show_version(void); static bool read_initialisation_file(char *dir, char *name); #ifdef SIMULATOR static void append_to_stream(FILE *dest, FILE *source); #endif extern IFsimulator SIMinfo; #ifdef SIMULATOR const bool ft_nutmeg = FALSE; extern struct comm spcp_coms[]; struct comm *cp_coms = spcp_coms; extern int OUTpBeginPlot(CKTcircuit *, JOB *, IFuid, IFuid, int, int, IFuid *, int, runDesc **); extern int OUTpData(runDesc *, IFvalue *, IFvalue *); extern int OUTwBeginPlot(CKTcircuit *, JOB *, IFuid, IFuid, int, int, IFuid *, int, runDesc **); extern int OUTwReference(runDesc *, IFvalue *, void **); extern int OUTwData(runDesc *, int, IFvalue *, void *), OUTwEnd(runDesc *), OUTendPlot(runDesc *); extern int OUTbeginDomain(runDesc *, IFuid, int, IFvalue *); extern int OUTendDomain(runDesc *), OUTstopnow(void); extern void OUTerror(int, char *, IFuid *); #ifdef __GNUC__ extern void OUTerrorf(int, const char *fmt, ...) __attribute__ ((format (__printf__, 2, 3))); #else extern void OUTerrorf(int, const char *fmt, ...); #endif extern int OUTattributes(runDesc *, IFuid, int, IFvalue *); IFfrontEnd nutmeginfo = { IFnewUid, IFdelUid, OUTstopnow, seconds, OUTerror, OUTerrorf, OUTpBeginPlot, OUTpData, OUTwBeginPlot, OUTwReference, OUTwData, OUTwEnd, OUTendPlot, OUTbeginDomain, OUTendDomain, OUTattributes }; #else /* SIMULATOR */ const bool ft_nutmeg = TRUE; extern struct comm nutcp_coms[]; struct comm *cp_coms = nutcp_coms; IFfrontEnd nutmeginfo; /* -------------------------------------------------------------------------- */ int if_run(CKTcircuit *t, char *w, wordlist *s, INPtables *b) { NG_IGNORE(b); NG_IGNORE(s); NG_IGNORE(w); NG_IGNORE(t); return 0; } /* -------------------------------------------------------------------------- */ int if_sens_run(CKTcircuit *t, wordlist *args, INPtables *tab) { NG_IGNORE(tab); NG_IGNORE(args); NG_IGNORE(t); return 0; } /* -------------------------------------------------------------------------- */ void if_dump(CKTcircuit *ckt, FILE *fp) { NG_IGNORE(fp); NG_IGNORE(ckt); } /* -------------------------------------------------------------------------- */ CKTcircuit * if_inpdeck(struct card *deck, INPtables **tab) { NG_IGNORE(tab); NG_IGNORE(deck); return NULL; } /* -------------------------------------------------------------------------- */ int if_option(CKTcircuit *ckt, char *name, enum cp_types type, void *value) { NG_IGNORE(value); NG_IGNORE(type); NG_IGNORE(name); NG_IGNORE(ckt); return 0; } /* -------------------------------------------------------------------------- */ void if_cktfree(CKTcircuit *ckt, INPtables *tab) { NG_IGNORE(tab); NG_IGNORE(ckt); } /* -------------------------------------------------------------------------- */ void if_setndnames(char *line) { NG_IGNORE(line); } /* -------------------------------------------------------------------------- */ char * if_errstring(int code) { NG_IGNORE(code); return copy("spice error"); } /* -------------------------------------------------------------------------- */ void if_setparam_model(CKTcircuit *ckt, char **name, char *val) { NG_IGNORE(val); NG_IGNORE(name); NG_IGNORE(ckt); } void if_setparam(CKTcircuit *ckt, char **name, char *param, struct dvec *val, int do_model) { NG_IGNORE(do_model); NG_IGNORE(val); NG_IGNORE(param); NG_IGNORE(name); NG_IGNORE(ckt); } /* -------------------------------------------------------------------------- */ bool if_tranparams(struct circ *ci, double *start, double *stop, double *step) { NG_IGNORE(step); NG_IGNORE(stop); NG_IGNORE(start); NG_IGNORE(ci); return FALSE; } /* -------------------------------------------------------------------------- */ struct variable * if_getstat(CKTcircuit *ckt, char *name) { NG_IGNORE(name); NG_IGNORE(ckt); return NULL; } void com_snload(wordlist *wl) { NG_IGNORE(wl); } void com_snsave(wordlist *wl) { NG_IGNORE(wl); } void SMPprint(SMPmatrix *n1, char *n2) { NG_IGNORE(n1); NG_IGNORE(n2); } void SMPprintRHS(SMPmatrix *n1, char *n2, double *n3, double *n4) { NG_IGNORE(n1); NG_IGNORE(n2); NG_IGNORE(n3); NG_IGNORE(n4); } void spice_destroy_devices(void) { } #endif /* SIMULATOR */ #ifndef SIMULATOR #ifdef XSPICE /* saj to get nutmeg to compile, not nice but necessary */ Ipc_Tiein_t g_ipc; Ipc_Status_t ipc_send_errchk(void) { Ipc_Status_t x = IPC_STATUS_OK; return x; } Ipc_Status_t ipc_get_line(char *str, int *len, Ipc_Wait_t wait) { Ipc_Status_t x = IPC_STATUS_OK; NG_IGNORE(str); NG_IGNORE(len); NG_IGNORE(wait); return x; } struct card * ENHtranslate_poly(struct card *deck) { NG_IGNORE(deck); return NULL; } int load_opus(char *name) { NG_IGNORE(name); return 1; } char * MIFgettok(char **s) { NG_IGNORE(s); return NULL; } void EVTprint(wordlist *wl) { NG_IGNORE(wl); } void EVTprintvcd(wordlist *wl) { NG_IGNORE(wl); } void EVTdisplay(wordlist *wl) { NG_IGNORE(wl); } struct dvec * EVTfindvec(char *node) { NG_IGNORE(node); return NULL; } #endif /* XSPICE */ #endif /* SIMULATOR */ char *hlp_filelist[] = { "ngspice", NULL }; /* Allocate space for global constants declared in const.h * and set their values */ double CONSTroot2 = CONSTsqrt2; double CONSTvt0 = CONSTboltz * REFTEMP / CHARGE; double CONSTKoverQ = CONSTboltz / CHARGE; double CONSTe = CONSTnap; IFfrontEnd *SPfrontEnd = NULL; int DEVmaxnum = 0; /* -------------------------------------------------------------------------- */ int SIMinit(IFfrontEnd *frontEnd, IFsimulator **simulator) { #ifdef SIMULATOR spice_init_devices(); SIMinfo.numDevices = DEVmaxnum = num_devices(); SIMinfo.devices = devices_ptr(); SIMinfo.numAnalyses = spice_num_analysis(); /* va: we recast, because we use only the public part */ SIMinfo.analyses = (IFanalysis **)spice_analysis_ptr(); #ifdef CIDER /* Evaluates limits of machine accuracy for CIDER */ evalAccLimits(); #endif /* CIDER */ #endif /* SIMULATOR */ SPfrontEnd = frontEnd; *simulator = &SIMinfo; return OK; } /* end of function SIMinit */ /* -------------------------------------------------------------------------- */ /* Shutdown gracefully. */ static ATTRIBUTE_NORETURN void sp_shutdown(int exitval) { destroy_ivars(); #ifdef HAS_WINGUI if (exitval == EXIT_BAD) winmessage("Fatal error in SPICE"); else if (exitval == EXIT_INFO) winmessage("Information during setup, see main window!"); #endif if (exitval == EXIT_INFO) exitval = EXIT_NORMAL; exit(exitval); } /* -------------------------------------------------------------------------- */ #if defined(HAVE_GNUREADLINE) || defined(HAVE_BSDEDITLINE) /* Adapted ../lib/cp/lexical.c:prompt() for GNU Readline -- Andrew Veliath */ static char * prompt(void) { static char pbuf[128]; char *p = pbuf, *s; if (cp_interactive == FALSE) return NULL; /* NULL means no prompt */ s = get_alt_prompt(); if (!s) s = cp_promptstring; if (!s) s = "->"; while (*s) { char c = (char) strip(*s++); switch (c) { case '!': p += sprintf(p, "%d", where_history() + 1); break; case '\\': if (*s) c = (char) strip(*s++); default: *p++ = c; break; } } *p = '\0'; return pbuf; } #endif /* HAVE_GNUREADLINE || HAVE_BSDEDITLINE */ #ifndef X_DISPLAY_MISSING #if defined(HAVE_GNUREADLINE) || defined(HAVE_BSDEDITLINE) /* -------------------------------------------------------------------------- */ /* Process device events in Readline's hook since there is no where else to do it now - AV */ static int app_event_func(void) /* called by GNU readline periodically to know what to do about keypresses */ { static REQUEST reqst = { char_option, 0 }; reqst.fp = rl_instream; X11_Input(&reqst, NULL); return 0; } #endif #endif /* -------------------------------------------------------------------------- */ /* This is the command processing loop for spice and nutmeg. The function is called even when GNU readline is unavailable, in which case it falls back to repeatable calling cp_evloop() SJB 26th April 2005 */ static void app_rl_readlines(void) { #if defined(HAVE_GNUREADLINE) || defined(HAVE_BSDEDITLINE) /* GNU Readline Support -- Andrew Veliath */ char *line, *expanded_line; /* --- set up readline params --- */ strcpy(history_file, getenv("HOME")); strcat(history_file, "/."); strcat(history_file, application_name); strcat(history_file, "_history"); using_history(); read_history(history_file); rl_readline_name = application_name; rl_instream = cp_in; rl_outstream = cp_out; #ifndef __APPLE__ #ifndef X_DISPLAY_MISSING if (dispdev->Input == X11_Input) rl_event_hook = app_event_func; #endif rl_catch_signals = 0; /* disable signal handling */ /* sjb - what to do for editline? This variable is not supported by editline. */ #if defined(HAVE_GNUREADLINE) rl_catch_sigwinch = 1; /* allow readline to respond to resized windows */ #endif #endif /* note that we want some mechanism to detect ctrl-D and expand it to exit */ for (;;) { history_set_pos(history_length); if (SETJMP(jbuf, 1)) /* Set location to jump to after handling SIGINT (ctrl-C) */ ft_sigintr_cleanup(); line = readline(prompt()); if (!line) { cp_evloop("quit"); continue; } if (*line) { int s = history_expand(line, &expanded_line); if (s == 2) { fprintf(stderr, "-> %s\n", expanded_line); } else if (s == -1) { fprintf(stderr, "readline: %s\n", expanded_line); } else { cp_evloop(expanded_line); add_history(expanded_line); } tfree(expanded_line); } tfree(line); } /* History gets written in ../fte/misccoms.c com_quit */ #else while (cp_evloop(NULL) == 1) ; #endif /* defined(HAVE_GNUREADLINE) || defined(HAVE_BSDEDITLINE) */ } /* -------------------------------------------------------------------------- */ static void show_help(void) { printf("Usage: %s [OPTION]... [FILE]...\n" "Simulate the electical circuits in FILE.\n" "\n" " -a --autorun run the loaded netlist\n" " -b, --batch process FILE in batch mode\n" " -c, --circuitfile=FILE set the circuitfile\n" " -i, --interactive run in interactive mode\n" " -n, --no-spiceinit don't load the local or user's config file\n" " -o, --output=FILE set the outputfile\n" " -p, --pipe run in I/O pipe mode\n" " -q, --completion activate command completion\n" " -r, --rawfile=FILE set the rawfile output\n" " --soa-log=FILE set the outputfile for SOA warnings\n" " -s, --server run spice as a server process\n" " -t, --term=TERM set the terminal type\n" " -h, --help display this help and exit\n" " -v, --version output version information and exit\n" "\n" "Report bugs to %s.\n", cp_program, Bug_Addr); } /* -------------------------------------------------------------------------- */ static void show_version(void) { printf("%s compiled from %s revision %s\n" "Written originally by Berkeley University\n" "Currently maintained by the NGSpice Project\n\n" "Copyright (C) 1985-1996," " The Regents of the University of California\n" "Copyright (C) 1999-2011," " The NGSpice Project\n", cp_program, PACKAGE, VERSION); } #ifdef SIMULATOR /* -------------------------------------------------------------------------- */ static void append_to_stream(FILE *dest, FILE *source) { char buf[BSIZE_SP]; size_t n; while ((n = fread(buf, 1, BSIZE_SP, source)) > 0) fwrite(buf, n, 1, dest); } #endif /* SIMULATOR */ /* -------------------------------------------------------------------------- */ /* Read an initialisation file. dir is the directory (use NULL or "" for current directory) name is the initialisation file's name Return true on success SJB 25th April 2005 */ static bool read_initialisation_file(char *dir, char *name) { char *path; bool result = FALSE; /* check name */ if (!name || *name == '\0') return FALSE; /* Fail; name needed */ /* contruct the full path */ if (!dir || *dir == '\0') { path = name; } else { path = tprintf("%s" DIR_PATHSEP "%s", dir, name); if (!path) return FALSE; /* memory allocation error */ } /* now access the file */ #ifdef HAVE_UNISTD_H if (access(path, R_OK) == 0) result = TRUE; #else { FILE *fp = fopen(path, "r"); if (fp) { fclose(fp); result = TRUE; } } #endif if (result) { inp_source(path); #ifdef TRACE printf("Init file: '%s'\n", path); #endif } if (path != name) tfree(path); return result; } /* -------------------------------------------------------------------------- */ static void print_news(void) { if (News_File && *News_File) { char *fname = cp_tildexpand(News_File); /*DG Memory leak */ FILE *fp = fopen(fname, "r"); tfree(fname); if (fp) { char buf[BSIZE_SP]; while (fgets(buf, BSIZE_SP, fp)) fputs(buf, stdout); fclose(fp); } } } #ifdef HAS_WINGUI #define main xmain #endif int main(int argc, char **argv) { char log_file[BSIZE_SP]; char soa_log_file[BSIZE_SP]; volatile bool readinit = TRUE; volatile bool istty = TRUE; bool iflag = FALSE; bool qflag = FALSE; FILE * volatile circuit_file; bool oflag = FALSE; bool srflag = FALSE; #ifdef TRACE /* this is used to detect memory leaks during debugging */ /* added by SDB during debug . . . . */ /* mtrace(); */ #endif #ifdef TRACE /* this is also used for memory leak plugging . . . */ /* added by SDB during debug . . . . */ /* mwDoFlush(1); */ #endif /* MFB tends to jump to 0 on errors. This tends to catch it. */ { static int started = 0; if (started++) { fprintf(cp_err, "main: Internal Error: jump to zero\n"); sp_shutdown(EXIT_BAD); } } #if defined(HAVE_GNUREADLINE) || defined(HAVE_BSDEDITLINE) application_name = strrchr(argv[0], '/'); if (application_name) application_name ++; else application_name = argv[0]; #endif ivars(argv[0]); cp_in = stdin; cp_out = stdout; cp_err = stderr; circuit_file = stdin; #if defined(HAVE_ISATTY) && !defined(HAS_WINGUI) istty = (bool) isatty(fileno(stdin)); #endif init_time(); { int rv = SIMinit(&nutmeginfo, &ft_sim); if (rv != OK) { ft_sperror(rv, "SIMinit"); sp_shutdown(EXIT_BAD); } } cp_program = ft_sim->simulator; /* initialze random number generator with seed = 1 */ int ii = 1; cp_vset("rndseed", CP_NUM, &ii); com_sseed(NULL); /* --- Process command line options --- */ for (;;) { enum { soa_log = 1001, }; static struct option long_options[] = { {"help", no_argument, NULL, 'h'}, {"version", no_argument, NULL, 'v'}, {"batch", no_argument, NULL, 'b'}, {"autorun", no_argument, NULL, 'a'}, {"circuitfile", required_argument, NULL, 'c'}, {"interactive", no_argument, NULL, 'i'}, {"no-spiceinit", no_argument, NULL, 'n'}, {"output", required_argument, NULL, 'o'}, {"pipe", no_argument, NULL, 'p'}, {"completion", no_argument, NULL, 'q'}, {"rawfile", required_argument, NULL, 'r'}, {"server", no_argument, NULL, 's'}, {"terminal", required_argument, NULL, 't'}, {"soa-log", required_argument, NULL, soa_log}, {NULL, 0, NULL, 0} }; int option_index = 0; int c = getopt_long(argc, argv, "hvbac:ino:pqr:st:", long_options, &option_index); if (c == -1) break; switch (c) { case 'h': /* Help */ show_help(); sp_shutdown(EXIT_INFO); break; case 'v': /* Version info */ show_version(); sp_shutdown(EXIT_INFO); break; case 'b': /* Batch mode */ { bool x_false = FALSE; bool x_true = TRUE; cp_vset("addcontrol", CP_BOOL, &x_false); cp_vset("batchmode", CP_BOOL, &x_true); ft_batchmode = TRUE; } break; case 'a': /* Add control section for autorun */ if (!ft_batchmode) { bool x_true = TRUE; cp_vset("addcontrol", CP_BOOL, &x_true); } break; case 'c': /* Circuit file */ if (optarg) { if ((circuit_file = fopen(optarg, "r")) == NULL) { perror(optarg); sp_shutdown(EXIT_BAD); } istty = FALSE; } break; case 'i': /* Interactive mode */ iflag = TRUE; break; case 'n': /* Don't read initialisation file */ readinit = FALSE; break; case 'o': /* Output file */ if (optarg) { /* switch to line buffering for stdout */ setvbuf(stdout, NULL, _IOLBF, BUFSIZ); sprintf(log_file, "%s", optarg); oflag = TRUE; } break; case 'p': /* Run in pipe mode */ iflag = TRUE; istty = TRUE; ft_pipemode = TRUE; /* switch to line buffering for stdout */ setvbuf(stdout, NULL, _IOLBF, BUFSIZ); break; case 'q': /* Command completion */ qflag = TRUE; break; case 'r': /* The raw file */ if (optarg) cp_vset("rawfile", CP_STRING, optarg); rflag = TRUE; break; case 's': /* Server mode */ ft_servermode = TRUE; break; case 't': if (optarg) cp_vset("term", CP_STRING, optarg); break; case soa_log: if (optarg) { sprintf(soa_log_file, "%s", optarg); srflag = TRUE; } break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } /* --- End of command line option processing (While(1)-loop) --- */ if (oflag) { /* -o option has been set */ com_version(NULL); if (ft_servermode) fprintf(stdout, "\nServer mode\n\n"); else if (ft_batchmode) fprintf(stdout, "\nBatch mode\n\n"); else fprintf(stdout, "\nInteractive mode, better used without -o option\n\n"); if (rflag) fprintf(stdout, "Simulation output goes to rawfile: %s\n", ft_rawfile); fprintf(stdout, "Comments and warnings go to log-file: %s\n\n", log_file); /* Open the log file */ #ifdef HAS_WINGUI /* flogp used by winmain's putc which writes to file 'log_file' */ flogp = fopen(log_file, "w"); if (!flogp) { perror(log_file); sp_shutdown(EXIT_BAD); } #else orflag = TRUE; /* Connect stdout and stderr to file log_file and log stdout */ if (!freopen(log_file, "w", stdout)) { perror(log_file); sp_shutdown(EXIT_BAD); } dup2(fileno(stdout), fileno(stderr)); setvbuf(stdout, NULL, _IOLBF, BUFSIZ); /* enable line buffering */ #endif } /* orflag */ if (srflag) { /* --soa-log option has been set */ fprintf(stdout, "\nSOA warnings go to log-file: %s\n", soa_log_file); /* Open the soa log file */ slogp = fopen(soa_log_file, "w"); if (!slogp) { perror(soa_log_file); sp_shutdown(EXIT_BAD); } } /* srflag */ #ifdef SIMULATOR if_getparam = spif_getparam_special; #else if_getparam = nutif_getparam; #endif if ((!iflag && !istty) || ft_servermode) /* (batch and file) or server operation */ ft_batchmode = TRUE; if ((iflag && !istty) || qflag) /* (interactive and file) or command completion */ cp_nocc = TRUE; /* set command completion */ else cp_nocc = FALSE; if (ft_servermode) /* in server no init file */ readinit = FALSE; if (!istty || ft_batchmode) /* file or batch - no more output */ out_moremode = FALSE; /* Get information on memory status upon startup. Would like to do this later, but cpinit evals commands. fcn is in resource.c */ init_rlimits(); /* Have to initialize cp now. fcn is in cpitf.c*/ ft_cpinit(); /* Set up signal handling */ if (!ft_batchmode) { /* Set up interrupt handler */ signal(SIGINT, (SIGNAL_FUNCTION) ft_sigintr); /* floating point exception */ signal(SIGFPE, (SIGNAL_FUNCTION) sigfloat); #ifdef SIGTSTP signal(SIGTSTP, (SIGNAL_FUNCTION) sigstop); #endif } /* Set up signal handling for fatal errors. */ signal(SIGILL, (SIGNAL_FUNCTION) sigill); #ifdef SIGBUS signal(SIGBUS, (SIGNAL_FUNCTION) sigbus); #endif #if defined(SIGSEGV) && !defined(NGDEBUG) && defined(HAS_WINGUI) /* Allow a comment and graceful shutdown after seg fault */ signal(SIGSEGV, (SIGNAL_FUNCTION) sigsegv); #endif #ifdef SIGSYS signal(SIGSYS, (SIGNAL_FUNCTION) sig_sys); #endif /* To catch interrupts during .spiceinit... */ if (SETJMP(jbuf, 1)) { ft_sigintr_cleanup(); fprintf(cp_err, "Warning: error executing .spiceinit.\n"); } else { if (readinit) { /* load user's initialisation file try accessing the initialisation file in the current directory if that fails try the alternate name */ if (FALSE == read_initialisation_file("", INITSTR) && FALSE == read_initialisation_file("", ALT_INITSTR)) { /* if that failed try in the user's home directory if their HOME environment variable is set */ char *homedir = getenv("HOME"); if (homedir) { if (FALSE == read_initialisation_file(homedir, INITSTR) && FALSE == read_initialisation_file(homedir, ALT_INITSTR)) { ; } } else { /* If there is no HOME environment (e.g. MS Windows), try user's profile directory */ homedir = getenv("USERPROFILE"); if (homedir) if (FALSE == read_initialisation_file(homedir, INITSTR) && FALSE == read_initialisation_file(homedir, ALT_INITSTR)) { ; } } } } if (!ft_batchmode) { com_version(NULL); DevInit(); print_news(); } } #ifdef SIMULATOR /* Pass 2 -- get the filenames. If we are spice, then this means * build a circuit for this file. If this is in server mode, don't * process any of these args. */ if (SETJMP(jbuf, 1)) { ft_sigintr_cleanup(); fprintf(cp_err, "Warning: error executing during ngspice startup.\n"); } else { bool gotone = FALSE; cp_interactive = FALSE; #ifdef FastRand // initialization and seed for FastNorm Gaussian random generator { unsigned int rseed = 66; initnorm(0, 0); if (!cp_getvar("rndseed", CP_NUM, &rseed, 0)) { time_t acttime = time(NULL); rseed = (unsigned int) acttime; } initnorm(rseed, 2); fprintf(cp_out, "SoS %f, seed value: %ld\n", renormalize(), rseed); } #elif defined(WaGauss) initw(); #endif if (!ft_servermode) { int err = 0; /* Concatenate all non-option arguments into a temporary file and load that file into the spice core. The original routine took a special path if there was only one non-option argument. In that case, it didn't create the temporary file but used the original file instead. The current algorithm is uniform at the expense of a little startup time. */ FILE *tempfile = tmpfile(); char *dname = NULL; /* input file*/ #if defined(HAS_WINGUI) || defined(_MSC_VER) || defined(__MINGW32__) char *tpf = NULL; /* temporary file */ /* tmpfile() returns NULL, if in MS Windows as non admin user in directory C:\something (no write permission to root C:). Then we add a tempfile in the local directory. File will be removed automatically due to TD option in fopen */ if (tempfile == NULL) { tpf = smktemp("sp"); tempfile = fopen(tpf, "w+bTD"); if (tempfile == NULL) { fprintf(stderr, "Could not open a temporary file to save and use optional arguments."); sp_shutdown(EXIT_BAD); } } #endif if (!tempfile) { perror("tmpfile()"); sp_shutdown(EXIT_BAD); } if (optind == argc && !istty) append_to_stream(tempfile, stdin); while (optind < argc) { char *arg = argv[optind++]; FILE *tp; /* Copy the the path of the first filename only */ if (!Infile_Path) Infile_Path = ngdirname(arg); /* unquote the input string, needed if it results from double clicking the filename */ #if defined(HAS_WINGUI) arg = cp_unquote(arg); #endif /* Copy all the arguments into the temporary file */ tp = fopen(arg, "r"); if (!tp) { char *lbuffer = getenv("NGSPICE_INPUT_DIR"); if (lbuffer && *lbuffer) { char *p = tprintf("%s%s%s", lbuffer, DIR_PATHSEP, arg); tp = fopen(p, "r"); tfree(p); } if (!tp) { perror(arg); err = 1; break; } } /* Copy the input file name which otherwise will be lost due to the temporary file */ dname = copy(arg); #if defined(HAS_WINGUI) /* write source file name into source window */ SetSource(dname); /* free arg that has been unquoted above */ tfree(arg); #endif append_to_stream(tempfile, tp); fclose(tp); } fseek(tempfile, 0L, SEEK_SET); if (tempfile && (!err || !ft_batchmode)) { /* Copy the input file name for becoming another file search path */ inp_spsource(tempfile, FALSE, dname, FALSE); tfree(dname); gotone = TRUE; } if (ft_batchmode && err) sp_shutdown(EXIT_BAD); } /* --- if (!ft_servermode) --- */ if (!gotone && ft_batchmode) inp_spsource(circuit_file, FALSE, NULL, FALSE); } if (ft_batchmode) { /* If we get back here in batch mode then something is wrong, * so exit. */ if (SETJMP(jbuf, 1)) { ft_sigintr_cleanup(); sp_shutdown(EXIT_BAD); } if (ft_servermode) { if (ft_curckt == NULL) { fprintf(cp_err, "Error: no circuit loaded!\n"); sp_shutdown(EXIT_BAD); } if (ft_dorun("")) sp_shutdown(EXIT_BAD); sp_shutdown(EXIT_NORMAL); } cp_interactive = FALSE; if (rflag) { /* If -r is specified, then dot cards (.width, .plot, .print, .op, .meas, .tf) are ignored, except .save, which has been handled by ft_dotsaves() from within inp_spsource (), data are put into linked list dbs. */ int error2 = ft_dorun(ft_rawfile); /* Execute the .whatever lines found in the deck, after we are done running. */ if (ft_cktcoms(TRUE) || error2) sp_shutdown(EXIT_BAD); } else if (ft_savedotargs()) { /* all dot card data to be put into dbs */ int error2 = ft_dorun(NULL); /* Execute the .whatever lines found in the deck, after we are done running. */ if (ft_cktcoms(FALSE) || error2) sp_shutdown(EXIT_BAD); } else { fprintf(stderr, "Note: No \".plot\", \".print\", or \".fourier\" lines; " "no simulations run\n"); sp_shutdown(EXIT_BAD); } sp_shutdown(EXIT_NORMAL); } /* --- if (ft_batchmode) --- */ #else /* ~ SIMULATOR */ if (SETJMP(jbuf, 1)) { ft_sigintr_cleanup(); fprintf(cp_err, "Warning: error executing during ft_loadfile().\n"); } else { cp_interactive = FALSE; while (optind < argc) ft_loadfile(argv[optind++]); } #endif /* ~ SIMULATOR */ for (;;) if (!SETJMP(jbuf, 1)) { /* enter the command processing loop */ cp_interactive = TRUE; #ifdef HAS_WINGUI int i; if (argv) { for (i = 0; i < argc; i++) tfree(argv[i]); tfree(argv); } #endif app_rl_readlines(); } else { ft_sigintr_cleanup(); } } tmpk8ny_4pz/src/spice.def0000644000175000017500000000007213546075722015531 0ustar carstencarstenLIBRARY spice DESCRIPTION "tclspice" EXPORTS _Spice_Init tmpk8ny_4pz/src/frontend/0000755000175000017500000000000013546075722015566 5ustar carstencarstentmpk8ny_4pz/src/frontend/com_hardcopy.h0000644000175000017500000000015113546075722020403 0ustar carstencarsten#ifndef ngspice_COM_HARDCOPY_H #define ngspice_COM_HARDCOPY_H void com_hardcopy(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/com_chdir.h0000644000175000017500000000033113546075722017663 0ustar carstencarsten/************* * Header file for com_chdir.c ************/ #ifndef ngspice_COM_CHDIR_H #define ngspice_COM_CHDIR_H #include "ngspice/wordlist.h" void com_chdir(wordlist *wl); void com_getcwd(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/vectors.h0000644000175000017500000000054213546075722017425 0ustar carstencarsten/************* * Header file for vectors.c * 1999 E. Rouat ************/ #ifndef ngspice_VECTORS_H #define ngspice_VECTORS_H #define vec_free(ptr) \ do { \ vec_free_x(ptr); \ ptr = NULL; \ } while(0) #endif tmpk8ny_4pz/src/frontend/variable.h0000644000175000017500000000312013546075722017520 0ustar carstencarsten/* variable.h */ #ifndef ngspice_VARIABLE_H #define ngspice_VARIABLE_H #include "ngspice/cpextern.h" /* Variables that are accessible to the parser via $varname * expansions. If the type is CP_LIST the value is a pointer to a * list of the elements. */ struct variable { enum cp_types va_type; char *va_name; union { bool vV_bool; int vV_num; double vV_real; char *vV_string; struct variable *vV_list; } va_V; struct variable *va_next; /* Link. */ }; #define va_bool va_V.vV_bool #define va_num va_V.vV_num #define va_real va_V.vV_real #define va_string va_V.vV_string #define va_vlist va_V.vV_list extern struct variable *variables; extern bool cp_echo; /* extern struct variable *variables; */ wordlist *cp_varwl(struct variable *var); wordlist *cp_variablesubst(wordlist *wlist); void free_struct_variable(struct variable *v); struct variable *var_alloc(char *name, struct variable *next); struct variable *var_alloc_bool(char *name, bool, struct variable *next); struct variable *var_alloc_num(char *name, int, struct variable *next); struct variable *var_alloc_real(char *name, double, struct variable *next); struct variable *var_alloc_string(char *name, char *, struct variable *next); struct variable *var_alloc_vlist(char *name, struct variable *, struct variable *next); void var_set_bool(struct variable *, bool); void var_set_num(struct variable *, int); void var_set_real(struct variable *, double); void var_set_string(struct variable *, char *); void var_set_vlist(struct variable *, struct variable *); #endif tmpk8ny_4pz/src/frontend/aspice.h0000644000175000017500000000034413546075722017204 0ustar carstencarsten/************* * Header file for aspice.c * 1999 E. Rouat ************/ #ifndef ngspice_ASPICE_H #define ngspice_ASPICE_H void com_aspice(wordlist *wl); void com_jobs(wordlist *wl); void com_rspice(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/com_help.c0000644000175000017500000000526213546075722017525 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/macros.h" #include "ngspice/wordlist.h" #include "ngspice/cpdefs.h" #include "ngspice/bool.h" #include "hcomp.h" #include "com_help.h" #include "ngspice/fteext.h" void com_help(wordlist *wl) { struct comm *c; struct comm *ccc[512]; /* Should be enough. */ int numcoms, i; bool allflag = FALSE; if (wl && eq(wl->wl_word, "all")) { allflag = TRUE; wl = NULL; /* XXX Probably right */ } /* We want to use more mode whether "moremode" is set or not. */ out_moremode = TRUE; out_init(); out_moremode = FALSE; if (wl == NULL) { out_printf("For a complete description " "read the Spice3 User's Manual.\n"); if (!allflag) { out_printf("For a list of all commands " "type \"help all\", for a short\n" "description of \"command\", " "type \"help command\".\n"); } /* Sort the commands */ for (numcoms = 0; cp_coms[numcoms].co_func != NULL; numcoms++) ccc[numcoms] = &cp_coms[numcoms]; qsort(ccc, (size_t) numcoms, sizeof(struct comm *), hcomp); for (i = 0; i < numcoms; i++) { if ((ccc[i]->co_spiceonly && ft_nutmeg) || (ccc[i]->co_help == NULL) || (!allflag && !ccc[i]->co_major)) continue; out_printf("%s ", ccc[i]->co_comname); out_printf(ccc[i]->co_help, cp_program); out_send("\n"); } } else { while (wl != NULL) { for (c = &cp_coms[0]; c->co_func != NULL; c++) if (eq(wl->wl_word, c->co_comname)) { out_printf("%s ", c->co_comname); out_printf(c->co_help, cp_program); if (c->co_spiceonly && ft_nutmeg) out_send(" (Not available in nutmeg)"); out_send("\n"); break; } if (c->co_func == NULL) { /* See if this is aliased. */ struct alias *al; for (al = cp_aliases; al; al = al->al_next) if (eq(al->al_name, wl->wl_word)) break; if (al == NULL) { fprintf(cp_out, "Sorry, no help for %s.\n", wl->wl_word); } else { out_printf("%s is aliased to ", wl->wl_word); /* Minor badness here... */ wl_print(al->al_text, cp_out); out_send("\n"); } } wl = wl->wl_next; } } out_send("\n"); } tmpk8ny_4pz/src/frontend/nutmegif.c0000644000175000017500000000106313546075722017550 0ustar carstencarsten /* * Dummy interface stuff, for nutmeg. This is the easiest way of * making sure that nutmeg doesn't try to load spice in also. */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/fteinp.h" #include "nutmegif.h" struct variable * nutif_getparam(CKTcircuit *ckt, char **name, char *param, int ind, int do_model) { NG_IGNORE(do_model); NG_IGNORE(ind); NG_IGNORE(param); NG_IGNORE(name); NG_IGNORE(ckt); return (NULL); } tmpk8ny_4pz/src/frontend/com_alias.c0000644000175000017500000001317613546075722017671 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* Do alias substitution. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "com_alias.h" struct alias *cp_aliases = NULL; /* Return NULL if no alias was found. We can get away with just * calling cp_histsubst now because the line will have gone onto the * history list by now and cp_histsubst will look in the right place. */ static wordlist * asubst(wordlist *wlist) { struct alias *al; wordlist *wl; char *word; word = wlist->wl_word; if (*word == '\\') { while ((word[0] = word[1]) != '\0') word++; return (NULL); } for (al = cp_aliases; al; al = al->al_next) if (eq(word, al->al_name)) break; if (!al) return (NULL); wl = cp_histsubst(wl_copy(al->al_text)); if (cp_didhsubst) { /* Make sure that we have an up-to-date last history entry. */ wl_free(cp_lastone->hi_wlist); cp_lastone->hi_wlist = wl_copy(wl); } else { /* If it had no history args, then append the rest of the wl */ wl_append(wl, wl_copy(wlist->wl_next)); } return (wl); } /* MW. This function should not use cp_lastone, see cp_parse in cpshar.c * Many things are deleted here and memory leak closed */ wordlist * cp_doalias(wordlist *wlist) { wordlist *comm; /* The alias process is going to modify the "last" line typed, so * save a copy of what it really is and restore it after aliasing * is done. We have to do tricky things do get around the problems * with ; ... */ comm = wlist; while (comm) { int ntries; wordlist *end, *nextc; nextc = wl_find(cp_csep, comm); if (nextc == comm) { /* skip leading `;' */ comm = comm->wl_next; continue; } /* Temporarily hide the rest of the command... */ end = comm->wl_prev; wl_chop(comm); wl_chop(nextc); for (ntries = 21; ntries; ntries--) { wordlist *nwl = asubst(comm); if (nwl == NULL) break; if (eq(nwl->wl_word, comm->wl_word)) { /* Just once through... */ wl_free(comm); comm = nwl; break; } else { wl_free(comm); comm = nwl; } } if (!ntries) { fprintf(cp_err, "Error: alias loop.\n"); wlist->wl_word = NULL; return (wlist); } wl_append(end, comm); wl_append(comm, nextc); if (!end) wlist = comm; comm = nextc; } return (wlist); } /* If we use this, aliases will be in alphabetical order. */ void cp_setalias(char *word, wordlist *wlist) { struct alias *al, *ta; cp_unalias(word); cp_addkword(CT_ALIASES, word); if (cp_aliases == NULL) { al = cp_aliases = TMALLOC(struct alias, 1); al->al_next = NULL; al->al_prev = NULL; } else { for (al = cp_aliases; al->al_next; al = al->al_next) { if (strcmp(al->al_name, word) > 0) break; } /* The new one goes before al */ if (al->al_prev) { al = al->al_prev; ta = al->al_next; al->al_next = TMALLOC(struct alias, 1); al->al_next->al_prev = al; al = al->al_next; al->al_next = ta; ta->al_prev = al; } else { cp_aliases = TMALLOC(struct alias, 1); cp_aliases->al_next = al; cp_aliases->al_prev = NULL; al->al_prev = cp_aliases; al = cp_aliases; } } al->al_name = copy(word); al->al_text = wl_copy(wlist); cp_striplist(al->al_text); /* We can afford to not worry about the bits, because before the * keyword lookup is done the alias is evaluated. Make everything * file completion, just in case... */ cp_addcomm(word, (long) 1, (long) 1, (long) 1, (long) 1); } void cp_unalias(char *word) { struct alias *al; cp_remkword(CT_ALIASES, word); for (al = cp_aliases; al; al = al->al_next) if (eq(word, al->al_name)) break; if (al == NULL) return; if (al->al_next) al->al_next->al_prev = al->al_prev; if (al->al_prev) { al->al_prev->al_next = al->al_next; } else { al->al_next->al_prev = NULL; cp_aliases = al->al_next; } wl_free(al->al_text); tfree(al->al_name); tfree(al); cp_remcomm(word); } void cp_paliases(char *word) { struct alias *al; for (al = cp_aliases; al; al = al->al_next) if ((word == NULL) || eq(al->al_name, word)) { if (!word) fprintf(cp_out, "%s\t", al->al_name); wl_print(al->al_text, cp_out); (void) putc('\n', cp_out); } } /* The routine for the "alias" command. */ void com_alias(wordlist *wl) { if (wl == NULL) cp_paliases(NULL); else if (wl->wl_next == NULL) cp_paliases(wl->wl_word); else cp_setalias(wl->wl_word, wl->wl_next); } void com_unalias(wordlist *wl) { struct alias *al, *na; if (eq(wl->wl_word, "*")) { for (al = cp_aliases; al; al = na) { na = al->al_next; wl_free(al->al_text); tfree(al->al_name); tfree(al); } cp_aliases = NULL; wl = wl->wl_next; } while (wl != NULL) { cp_unalias(wl->wl_word); wl = wl->wl_next; } } tmpk8ny_4pz/src/frontend/Makefile.am0000644000175000017500000000570313546075722017627 0ustar carstencarsten## Process this file with automake to produce Makefile.in SUBDIRS = plotting help parser wdisp numparam trannoise DIST_SUBDIRS = plotting help parser wdisp numparam trannoise EXTRA_DIST = testcommands.c parse-bison-y.h BUILT_SOURCES = parse-bison.h noinst_LTLIBRARIES = libfte.la libfte_la_SOURCES = \ com_measure2.c \ com_measure2.h \ commands.c \ commands.h \ com_ahelp.c \ com_ahelp.h \ com_alias.c \ com_alias.h \ com_asciiplot.c \ com_asciiplot.h \ com_cdump.c \ com_cdump.h \ com_chdir.c \ com_chdir.h \ com_compose.c \ com_compose.h \ com_commands.h \ com_dl.c \ com_dl.h \ com_display.c \ com_display.h \ com_dump.c \ com_dump.h \ com_echo.c \ com_echo.h \ com_ghelp.c \ com_ghelp.h \ com_gnuplot.h \ com_gnuplot.c \ com_hardcopy.c \ com_hardcopy.h \ com_help.c \ com_help.h \ com_history.c \ com_history.h \ com_let.c \ com_let.h \ com_option.c \ com_option.h \ com_plot.c \ com_plot.h \ com_rehash.c \ com_rehash.h \ com_set.c \ com_set.h \ com_setscale.c \ com_setscale.h \ com_shell.c \ com_shell.h \ com_shift.c \ com_shift.h \ com_fft.c \ com_fft.h \ com_state.c \ com_state.h \ com_strcmp.c \ com_strcmp.h \ com_sysinfo.c \ com_unset.c \ com_unset.h \ com_xgraph.c \ com_xgraph.h \ completion.h \ control.h \ control.c \ ftehelp.h \ ftesopt.c \ hcomp.c \ hcomp.h \ init.c \ init.h \ quote.c \ quote.h \ streams.h \ streams.c \ terminal.c \ terminal.h \ variable.c \ variable.h \ \ arg.c \ arg.h \ aspice.c \ aspice.h \ breakp.c \ breakp.h \ breakp2.c \ breakp2.h \ circuits.c \ circuits.h \ cpitf.c \ cpitf.h \ define.c \ define.h \ device.c \ device.h \ diff.c \ diff.h \ dimens.c \ dimens.h \ display.c \ display.h \ dotcards.c \ dotcards.h \ dvec.c \ error.c \ evaluate.c \ evaluate.h \ fourier.c \ fourier.h \ gens.c \ gens.h \ hpgl.c \ hpgl.h \ inp.c \ inp.h \ inpcom.c \ inpcom.h \ interp.c \ interp.h \ inventory.c \ linear.c \ linear.h \ measure.c \ misccoms.c \ misccoms.h \ miscvars.c \ miscvars.h \ mw_coms.c \ mw_coms.h \ newcoms.c \ newcoms.h \ nutinp.c \ nutinp.h \ nutmegif.c \ nutmegif.h \ options.c \ options.h \ outitf.c \ outitf.h \ parse.c \ parse.h \ parse-bison.y \ points.c \ points.h \ postcoms.c \ postcoms.h \ postsc.c \ postsc.h \ rawfile.c \ rawfile.h \ resource.c \ resource.h \ runcoms.c \ runcoms.h \ runcoms2.c \ runcoms2.h \ shyu.c \ shyu.h \ signal_handler.c \ signal_handler.h \ spec.c \ spec.h \ spiceif.c \ spiceif.h \ subckt.c \ subckt.h \ typesdef.c \ typesdef.h \ vectors.c \ vectors.h \ where.c \ where.h # TESTS = testcommands # # bin_PROGRAMS = testcommands # # testcommands_SOURCES = \ # testcommands.c \ # testcommands.h # # testcommands_LDADD = libfte.a plotting/libplotting.a ../misc/libmisc.a AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include @X_CFLAGS@ AM_CFLAGS = $(STATIC) AM_YFLAGS = -d MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/frontend/com_cdump.c0000644000175000017500000001117513546075722017705 0ustar carstencarsten/* Command cdump: dump the control structure to the console output */ #include "ngspice/ngspice.h" #include #include "ngspice/wordlist.h" #include "control.h" #include "ngspice/cpextern.h" #include "ngspice/fteext.h" #include "ngspice/cktdefs.h" #include "com_cdump.h" static int indent; static void tab(int num) { int i; for (i = 0; i < num; i++) putc(' ', cp_out); } static void dodump(struct control *cc) { struct control *tc; switch (cc->co_type) { case CO_UNFILLED: tab(indent); fprintf(cp_out, "(unfilled)\n"); break; case CO_STATEMENT: tab(indent); wl_print(cc->co_text, cp_out); putc('\n', cp_out); break; case CO_WHILE: tab(indent); fprintf(cp_out, "while "); wl_print(cc->co_cond, cp_out); putc('\n', cp_out); indent += TABINDENT; for (tc = cc->co_children; tc; tc = tc->co_next) dodump(tc); indent -= TABINDENT; tab(indent); fprintf(cp_out, "end\n"); break; case CO_REPEAT: tab(indent); fprintf(cp_out, "repeat "); if (cc->co_numtimes != -1) fprintf(cp_out, "%d (%d left to do)\n", cc->co_numtimes, cc->co_timestodo); /* CDHW */ else putc('\n', cp_out); indent += TABINDENT; for (tc = cc->co_children; tc; tc = tc->co_next) dodump(tc); indent -= TABINDENT; tab(indent); fprintf(cp_out, "end\n"); break; case CO_DOWHILE: tab(indent); fprintf(cp_out, "dowhile "); wl_print(cc->co_cond, cp_out); putc('\n', cp_out); indent += TABINDENT; for (tc = cc->co_children; tc; tc = tc->co_next) dodump(tc); indent -= TABINDENT; tab(indent); fprintf(cp_out, "end\n"); break; case CO_IF: tab(indent); fprintf(cp_out, "if "); wl_print(cc->co_cond, cp_out); putc('\n', cp_out); indent += TABINDENT; for (tc = cc->co_children; tc; tc = tc->co_next) dodump(tc); indent -= TABINDENT; tab(indent); fprintf(cp_out, "end\n"); break; case CO_FOREACH: tab(indent); fprintf(cp_out, "foreach %s ", cc->co_foreachvar); wl_print(cc->co_text, cp_out); putc('\n', cp_out); indent += TABINDENT; for (tc = cc->co_children; tc; tc = tc->co_next) dodump(tc); indent -= TABINDENT; tab(indent); fprintf(cp_out, "end\n"); break; case CO_BREAK: tab(indent); if (cc->co_numtimes != 1) fprintf(cp_out, "break %d\n", cc->co_numtimes); else fprintf(cp_out, "break\n"); break; case CO_CONTINUE: tab(indent); if (cc->co_numtimes != 1) fprintf(cp_out, "continue %d\n", cc->co_numtimes); else fprintf(cp_out, "continue\n"); break; case CO_LABEL: tab(indent); fprintf(cp_out, "label %s\n", cc->co_text->wl_word); break; case CO_GOTO: tab(indent); fprintf(cp_out, "goto %s\n", cc->co_text->wl_word); break; default: tab(indent); fprintf(cp_out, "bad type %d\n", cc->co_type); break; } } void com_cdump(wordlist *wl) { struct control *c; NG_IGNORE(wl); indent = 0; for (c = control[stackp]; c; c = c->co_next) dodump(c); } /* dump circuit matrix to stdout or file */ void com_mdump(wordlist *wl) { CKTcircuit *ckt = NULL; char *s; if (!ft_curckt || !ft_curckt->ci_ckt) { fprintf(cp_err, "Error: no circuit loaded.\n"); return; } ckt = ft_curckt->ci_ckt; if (ckt->CKTmatrix) if (wl == NULL) { SMPprint(ckt->CKTmatrix , NULL); } else { s = cp_unquote(wl->wl_word); SMPprint(ckt->CKTmatrix , s); } else fprintf(cp_err, "Error: no matrix available.\n"); } /* dump circuit matrix RHS to stdout or file */ void com_rdump(wordlist *wl) { CKTcircuit *ckt = NULL; char *s; if (!ft_curckt || !ft_curckt->ci_ckt) { fprintf(cp_err, "Error: no circuit loaded.\n"); return; } ckt = ft_curckt->ci_ckt; if ((ckt->CKTmatrix) && (ckt->CKTrhs)) if (wl == NULL) { SMPprintRHS(ckt->CKTmatrix , NULL, ckt->CKTrhs, ckt->CKTirhs); } else { s = cp_unquote(wl->wl_word); SMPprintRHS(ckt->CKTmatrix , s, ckt->CKTrhs, ckt->CKTirhs); } else fprintf(cp_err, "Error: no matrix or RHS available.\n"); } tmpk8ny_4pz/src/frontend/aspice.c0000644000175000017500000002536613546075722017212 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Stuff for asynchronous spice runs, and also rspice. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "aspice.h" #include "variable.h" #include "circuits.h" # ifdef HAVE_SYS_WAIT_H /* should be more tests here I think */ # define OK_ASPICE # endif #ifdef OK_ASPICE #ifdef HAVE_PWD_H # include #endif #include #include #include #include #include "ngspice/fteinp.h" #include "ngspice/dvec.h" #include "../misc/mktemp.h" /* This is required for the GCC pre-processor and might be needed for others Added to resolve ngspice bug 1293746 http://sourceforge.net/tracker/index.php?func=detail&aid=1293746&group_id=38962&atid=423915 */ #if !defined(SOLARIS) && defined(__SVR4) && defined(__sun) # define SOLARIS #endif #ifndef SEEK_SET # define SEEK_SET 0 #endif static RETSIGTYPE sigchild(void); struct proc { int pr_pid; /* The pid of the spice job. */ char *pr_rawfile; /* The temporary raw file. */ char *pr_name; /* The name of the spice run. */ char *pr_inpfile; /* The name of the input file. */ char *pr_outfile; /* The name of the (tmp) output file. */ bool pr_saveout; /* Don't (void) unlink the output file */ struct proc *pr_next; /* Link. */ }; static struct proc *running = NULL; static int numchanged = 0; /* How many children have changed in state. */ void com_aspice(wordlist *wl) { char *deck, *output = NULL, spicepath[BSIZE_SP], s[BSIZE_SP]; char *raw, *t; FILE *inp; struct proc *p; int pid; bool saveout = FALSE; deck = wl->wl_word; if (!cp_getvar("spicepath", CP_STRING, spicepath, sizeof(spicepath))) { if (!Spice_Path || !*Spice_Path) { fprintf(cp_err, "No spice-3 binary is available for the aspice command.\n"); return; } (void) strcpy(spicepath, Spice_Path); } if (wl->wl_next) { output = wl->wl_next->wl_word; saveout = TRUE; } else { output = smktemp("spout"); } if ((inp = fopen(deck, "r")) == NULL) { perror(deck); return; } if (!fgets(s, BSIZE_SP, inp)) { fprintf(cp_err, "Error: bad deck %s\n", deck); (void) fclose(inp); return; } for (t = s; *t && (*t != '\n'); t++) ; *t = '\0'; fprintf(cp_out, "Starting spice run for:\n%s\n", s); (void) fclose(inp); raw = smktemp("raw"); (void) fclose(fopen(raw, "w")); /* So there isn't a race condition. */ pid = fork(); if (pid == 0) { if (!(freopen(deck, "r", stdin))) { perror(deck); exit(EXIT_BAD); } if (!(freopen(output, "w", stdout))) { perror(output); exit(EXIT_BAD); } (void) dup2(fileno(stdout), fileno(stderr)); (void) execl(spicepath, spicepath, "-r", raw, NULL); /* Screwed up. */ perror(spicepath); exit(EXIT_BAD); } /* Add this one to the job list. */ p = TMALLOC(struct proc, 1); p->pr_pid = pid; p->pr_name = copy(s); p->pr_rawfile = copy(raw); p->pr_inpfile = copy(deck); p->pr_outfile = copy(output); p->pr_saveout = saveout; if (running) p->pr_next = running; running = p; # ifdef SIGCHLD (void) signal(SIGCHLD, (SIGNAL_FUNCTION) sigchild); # else # ifdef SIGCLD (void) signal(SIGCLD, (SIGNAL_FUNCTION) sigchild); # endif # endif } void com_jobs(wordlist *wl) { struct proc *p; NG_IGNORE(wl); for (p = running; p; p = p->pr_next) fprintf(cp_out, "%d\t%.70s\n", p->pr_pid, p->pr_name); } static RETSIGTYPE sigchild(void) { numchanged++; if (ft_asyncdb) fprintf(cp_err, "%d jobs done now\n", numchanged); if (cp_cwait) ft_checkkids(); } /* This gets called every once in a while, and checks to see if any * jobs have finished. If they have it gets the data. The problem is * that wait(0) is probably more portable, but it can't tell * whether the exit was normal or not. */ /* * On posix systems, wait() is: * pid_t wait(int *status); */ int status; void ft_checkkids(void) { struct proc *p = NULL, *lp = NULL; char buf[BSIZE_SP]; FILE *fp; pid_t pid = 0; static bool here = FALSE; /* Don't want to be re-entrant. */ if (!numchanged || here) return; here = TRUE; while (numchanged > 0) { pid = wait(&status); if (pid == -1) { fprintf(cp_err, "ft_checkkids: Internal Error: should be %d jobs done but there aren't any.\n", numchanged); numchanged = 0; running = NULL; here = FALSE; return; } for (p = running; p; p = p->pr_next) { if (p->pr_pid == pid) break; lp = p; } if (p == NULL) { fprintf(cp_err, "ft_checkkids: Internal Error: Process %d not a job!\n", (int) pid); here = FALSE; return; } if (p == running) running = p->pr_next; else lp->pr_next = p->pr_next; fprintf(cp_out, "Job finished: %.60s\n", p->pr_name); numchanged--; ft_loadfile(p->pr_rawfile); (void) unlink(p->pr_rawfile); out_init(); if (!(fp = fopen(p->pr_outfile, "r"))) { perror(p->pr_outfile); here = FALSE; return; } while (fgets(buf, BSIZE_SP, fp)) out_send(buf); (void) fclose(fp); if (!p->pr_saveout) (void) unlink(p->pr_outfile); printf("\n-----\n"); } printf("\n"); #ifdef TIOCSTI (void) ioctl(0, TIOCSTI, "\022"); /* Reprint the line. */ #endif here = FALSE; } /* Run a spice job remotely. See the description of the spice daemon for * the protocol. This is no longer 4.2 specific. */ void com_rspice(wordlist *wl) { char rhost[64], program[128], buf[BSIZE_SP]; char remote_shell[513]; char *outfile; FILE *inp, *serv, *out, *srv_input, *err_outp; struct plot *pl; size_t n; int to_serv[2], from_serv[2], err_serv[2]; int pid; long pos; int num; char *p; /* Figure out where the spicedaemon is and connect to it. */ if (!cp_getvar("rhost", CP_STRING, rhost, sizeof(rhost))) (void) strcpy(rhost, Spice_Host); if (!cp_getvar("rprogram", CP_STRING, program, sizeof(program))) *program = '\0'; if (!cp_getvar("remote_shell", CP_STRING, remote_shell, sizeof(remote_shell))) strcpy(remote_shell, "rsh"); if (*rhost == '\0') { fprintf(cp_err, "Error: there is no remote ngspice.host for this site -- set \"rhost\".\n"); return; } if (*program == '\0') { fprintf(cp_err, "Error: there is no remote spice program for this site -- set \"rprogram\".\n"); return; } if (pipe(to_serv) < 0) { perror("pipe to server"); return; } if (pipe(from_serv) < 0) { perror("pipe from server"); return; } if (pipe(err_serv) < 0) { perror("2nd pipe from server"); return; } pid = fork(); if (pid == 0) { /* I am the "server" process */ close(to_serv[1]); close(from_serv[0]); close(err_serv[0]); fclose(stdin); fclose(stdout); fclose(stderr); dup2(to_serv[0], 0); /* stdin */ dup2(from_serv[1], 1); /* stdout */ dup2(err_serv[1], 2); /* stderr */ execlp(remote_shell, remote_shell, rhost, program, "-s", NULL); /* system(com_buf); */ perror(remote_shell); exit(-1); } else if (pid == -1) { perror("fork"); return; } /* I am the "client" side */ close(to_serv[0]); close(from_serv[1]); close(err_serv[1]); srv_input = fdopen(to_serv[1], "w"); serv = fdopen(from_serv[0], "r"); err_outp = fdopen(err_serv[0], "r"); /* Send the circuit over. */ if (wl) { while (wl) { if (!(inp = fopen(wl->wl_word, "r"))) { perror(wl->wl_word); wl = wl->wl_next; continue; /* Should be careful */ } while ((n = fread(buf, 1, BSIZE_SP, inp)) > 0) (void) fwrite(buf, 1, strlen(buf), srv_input); /* (void) write(s, buf, n); */ wl = wl->wl_next; fclose(inp); } /* (void) write(s, "@\n", 3);*/ } else { if (ft_nutmeg || !ft_curckt) { fprintf(cp_err, "Error: no circuits loaded\n"); fclose(srv_input); fclose(serv); return; } inp_list(srv_input, ft_curckt->ci_deck, ft_curckt->ci_options, LS_DECK); } fclose(srv_input); /* Now wait for things to come through */ while ((p = fgets(buf, BSIZE_SP, serv)) != NULL) { if (!strncmp(buf, "Title:", 6)) break; fputs(buf, cp_out); } outfile = smktemp("rsp"); if ((out = fopen(outfile, "w+")) == NULL) { perror(outfile); (void) fclose(serv); return; } if (p) fputs(buf, out); while ((n = fread(buf, 1, BSIZE_SP, serv)) != 0) (void) fwrite(buf, 1, n, out); /* We hope that positioning info + error messages < pipe size */ while (fgets(buf, BSIZE_SP, err_outp)) if (!strncmp("@@@", buf, 3)) { if (sscanf(buf, "@@@ %ld %d", &pos, &num) != 2) { fprintf(stderr, "Error reading rawdata: %s\n", buf); continue; } if (fseek(out, pos, SEEK_SET)) fprintf(stderr, "Error adjusting rawfile: write \"%d\" at %ld\n", num, pos); else fprintf(out, "%d", num); } else { fprintf(stderr, "%s", buf); } (void) fclose(out); (void) fclose(serv); (void) fclose(err_outp); pl = raw_read(outfile); if (pl) plot_add(pl); (void) unlink(outfile); fprintf(stderr, "done.\n"); } #else void com_aspice(wordlist *wl) { NG_IGNORE(wl); fprintf(cp_err, "Asynchronous spice jobs are not available.\n"); } void com_jobs(wordlist *wl) { NG_IGNORE(wl); fprintf(cp_err, "Asynchronous spice jobs are not available.\n"); } void ft_checkkids(void) { } void com_rspice(wordlist *wl) { NG_IGNORE(wl); fprintf(cp_err, "Remote spice jobs are not available.\n"); } #endif tmpk8ny_4pz/src/frontend/device.c0000644000175000017500000013142313546075722017175 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1986 Wayne A. Christopher, U. C. Berkeley CAD Group Modified: 2000 AlansFixes **********/ /* * Routines to query and alter devices. */ #include "ngspice/ngspice.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dgen.h" #include "ngspice/sim.h" #include "circuits.h" #include "device.h" #include "variable.h" #include "com_commands.h" #include "../misc/util.h" /* ngdirname() */ #include "gens.h" /* wl_forall */ static wordlist *devexpand(char *name); static void all_show(wordlist *wl, int mode); static void all_show_old(wordlist *wl, int mode); static void com_alter_mod(wordlist *wl); static void if_set_binned_model(CKTcircuit *, char *, char *, struct dvec *); /* * devhelp: lists available devices and information on parameters * devhelp : shows all available devices * devhelp devname : shows all parameters of that model/instance * devhelp devname parname : shows parameter meaning * Options: -csv (comma separated value for generating docs) */ void com_devhelp(wordlist *wl) { /* Just a simple driver now */ devhelp(wl); } void devhelp(wordlist *wl) { int i, k = 0; int devindex = -1, devInstParNo = 0, devModParNo = 0; bool found = FALSE; bool csv = FALSE; wordlist *wlist; IFparm *plist; /*First copy the base pointer */ wlist = wl; /* If there are no arguments output the list of available devices */ if (!wlist) { out_init(); out_printf("\nDevices available in the simulator\n\n"); for (k = 0; k < ft_sim->numDevices; k++) if (ft_sim->devices[k]) out_printf("%-*s:\t%s\n", DEV_WIDTH, ft_sim->devices[k]->name, ft_sim->devices[k]->description); out_send("\n"); return; } /* The first argument must be the csv option or a device name */ if (wlist && wlist->wl_word && eq(wlist->wl_word, "-csv")) { csv = TRUE; if (wlist->wl_next) wlist = wlist->wl_next; else return; } /* This argument, if exists, must be the device name */ if (wlist && wlist->wl_word) { while (k < ft_sim->numDevices && !found) { if (ft_sim->devices[k]) if (strcasecmp(ft_sim->devices[k]->name, wlist->wl_word) == 0) { devindex = k; if (ft_sim->devices[devindex]->numInstanceParms) devInstParNo = *(ft_sim->devices[devindex]->numInstanceParms); else devInstParNo = 0; if (ft_sim->devices[devindex]->numModelParms) devModParNo = *(ft_sim->devices[devindex]->numModelParms); else devModParNo = 0; wlist = wlist->wl_next; found = TRUE; } k++; } if (!found) { fprintf(cp_out, "Error: Device %s not found\n", wlist->wl_word); return; } } /* At this point, found is TRUE and we have found the device. * Now we have to scan the model and instance parameters to print * the string */ found = FALSE; if (wlist && wlist->wl_word) { plist = ft_sim->devices[devindex]->modelParms; for (i = 0; i < devModParNo; i++) { /* Scan model parameters first */ if (strcasecmp(plist[i].keyword, wlist->wl_word) == 0) { found = TRUE; out_init(); out_printf("Model Parameters\n"); if (csv) out_printf("id#, Name, Dir, Description\n"); else out_printf("%5s\t %-10s\t Dir\t Description\n", "id#", "Name"); printdesc(plist[i], csv); out_send("\n"); } } if (!found) { plist = ft_sim->devices[devindex]->instanceParms; for (i = 0; i < devInstParNo; i++) { /* Scan instance parameters then */ if (strcasecmp(plist[i].keyword, wlist->wl_word) == 0) { found = TRUE; out_init(); out_printf("Instance Parameters\n"); if (csv) out_printf("id#, Name, Dir, Description\n"); else out_printf("%5s\t %-10s\t Dir\t Description\n", "id#", "Name"); printdesc(plist[i], csv); out_send("\n"); } } } if (!found) fprintf(cp_out, "Error: Parameter %s not found\n", wlist->wl_word); return; } /* No arguments - we want all the parameters*/ out_init(); out_printf("%s - %s\n\n", ft_sim->devices[devindex]->name, ft_sim->devices[devindex]->description); out_printf("Model Parameters\n"); if (csv) out_printf("id#, Name, Dir, Description\n"); else out_printf("%5s\t %-10s\t Dir\t Description\n", "id#", "Name"); plist = ft_sim->devices[devindex]->modelParms; for (i = 0; i < devModParNo; i++) printdesc(plist[i], csv); out_printf("\n"); out_printf("Instance Parameters\n"); if (csv) out_printf("id#, Name, Dir, Description\n"); else out_printf("%5s\t %-10s\t Dir\t Description\n", "id#", "Name"); plist = ft_sim->devices[devindex]->instanceParms; for (i = 0; i < devInstParNo; i++) printdesc(plist[i], csv); out_send("\n"); } /* * Pretty print parameter descriptions * This function prints description of device parameters */ void printdesc(IFparm p, bool csv) { char sep; int spacer1, spacer2; /* First we indentify the separator */ if (csv) { sep = ','; spacer1 = 0; spacer2 = 0; } else { sep = '\t'; spacer1 = 5; spacer2 = 10; } out_printf("%*d%c %-*s%c ", spacer1, p.id, sep, spacer2, p.keyword, sep); if (p.dataType & IF_SET) if (p.dataType & IF_ASK) out_printf("inout%c ", sep); else out_printf("in%c ", sep); else out_printf("out%c ", sep); if (p.description) out_printf("%s\n", p.description); else out_printf("n.a.\n"); } /* * show: list device operating point info * show * show devs : params * show devs : params ; devs : params * show dev dev dev : param param param , dev dev : param param * show t : param param param, t : param param */ static int count; void com_showmod(wordlist *wl) { if (cp_getvar("altshow", CP_BOOL, NULL, 0)) all_show(wl, 1); else all_show_old(wl, 1); } void com_show(wordlist *wl) { if (cp_getvar("altshow", CP_BOOL, NULL, 0)) all_show(wl, 0); else all_show_old(wl, 0); } static void all_show(wordlist *wl, int mode) { wordlist *params, *nextgroup, *thisgroup; wordlist *prev, *next, *w; int screen_width; dgen *dg; int instances; int i, j, n; int param_flag, dev_flag; if (!ft_curckt) { fprintf(cp_err, "Error: no circuit loaded\n"); return; } if (wl && wl->wl_word && eq(wl->wl_word, "-v")) { old_show(wl->wl_next); return; } if (!cp_getvar("width", CP_NUM, &screen_width, 0)) screen_width = DEF_WIDTH; count = (screen_width - LEFT_WIDTH) / (DEV_WIDTH + 1); count = 1; n = 0; do { prev = NULL; params = NULL; nextgroup = NULL; thisgroup = wl; param_flag = 0; dev_flag = 0; /* find the parameter list and the nextgroup */ for (w = wl; w && !nextgroup; w = next) { next = w->wl_next; if (eq(w->wl_word, "*")) { tfree(w->wl_word); w->wl_word = copy("all"); } if (eq(w->wl_word, "++") || eq(w->wl_word, "all")) { if (params) { param_flag = DGEN_ALLPARAMS; if (prev) prev->wl_next = w->wl_next; else params = next; } else { dev_flag = DGEN_ALLDEVS; if (prev) prev->wl_next = w->wl_next; else thisgroup = next; } /* w must not be freed here */ w = NULL; } else if (eq(w->wl_word, "+")) { if (params) { param_flag = DGEN_DEFPARAMS; if (prev) prev->wl_next = w->wl_next; else params = next; } else { dev_flag = DGEN_DEFDEVS; if (prev) prev->wl_next = w->wl_next; else thisgroup = next; } /* w must not be freed here */ w = NULL; } else if (eq(w->wl_word, ":")) { /* w must not be freed here */ w = NULL; if (!params) { params = next; if (prev) prev->wl_next = NULL; else thisgroup = NULL; } else { if (prev) prev->wl_next = next; else params = next; } } else if (eq(w->wl_word, ";") || eq(w->wl_word, ",")) { nextgroup = next; /* w must not be freed here */ w = NULL; if (prev) prev->wl_next = NULL; break; } prev = w; } instances = 0; for (dg = dgen_init(ft_curckt->ci_ckt, thisgroup, 1, dev_flag, mode); dg; dgen_nth_next(&dg, count)) { instances = 1; if (dg->flags & DGEN_INSTANCE) { instances = 2; n += 1; fprintf(cp_out, "%s:\n", dg->instance->GENname); fprintf(cp_out, " %-19s= %s\n", "model", dg->model->GENmodName); if (param_flag) param_forall(dg, param_flag); else if (!params) param_forall(dg, DGEN_DEFPARAMS); if (params) wl_forall(params, listparam, dg); } else if (ft_sim->devices[dg->dev_type_no]->numModelParms) { fprintf(cp_out, " %s models (%s)\n", ft_sim->devices[dg->dev_type_no]->name, ft_sim->devices[dg->dev_type_no]->description); n += 1; i = 0; do { fprintf(cp_out, "%*s", LEFT_WIDTH, "model"); j = dgen_for_n(dg, count, printstr_m, NULL, i); i += 1; fprintf(cp_out, "\n"); } while (j); fprintf(cp_out, "\n"); if (param_flag) param_forall(dg, param_flag); else if (!params) param_forall(dg, DGEN_DEFPARAMS); if (params) wl_forall(params, listparam, dg); fprintf(cp_out, "\n"); } } wl = nextgroup; } while (wl); if (!n) { if (instances == 0) printf("No matching instances or models\n"); else if (instances == 1) printf("No matching models\n"); else printf("No matching elements\n"); } } static void all_show_old(wordlist *wl, int mode) { wordlist *params, *nextgroup, *thisgroup; wordlist *prev, *next, *w; int screen_width; dgen *dg; int instances; int i, j, n; int param_flag, dev_flag; if (!ft_curckt) { fprintf(cp_err, "Error: no circuit loaded\n"); return; } if (wl && wl->wl_word && eq(wl->wl_word, "-v")) { old_show(wl->wl_next); return; } if (!cp_getvar("width", CP_NUM, &screen_width, 0)) screen_width = DEF_WIDTH; count = (screen_width - LEFT_WIDTH) / (DEV_WIDTH + 1); n = 0; do { prev = NULL; params = NULL; nextgroup = NULL; thisgroup = wl; param_flag = 0; dev_flag = 0; /* find the parameter list and the nextgroup */ for (w = wl; w && !nextgroup; w = next) { next = w->wl_next; if (eq(w->wl_word, "*")) { tfree(w->wl_word); w->wl_word = copy("all"); } if (eq(w->wl_word, "++") || eq(w->wl_word, "all")) { if (params) { param_flag = DGEN_ALLPARAMS; if (prev) prev->wl_next = w->wl_next; else params = next; } else { dev_flag = DGEN_ALLDEVS; if (prev) prev->wl_next = w->wl_next; else thisgroup = next; } /* w must not be freed here */ w = NULL; } else if (eq(w->wl_word, "+")) { if (params) { param_flag = DGEN_DEFPARAMS; if (prev) prev->wl_next = w->wl_next; else params = next; } else { dev_flag = DGEN_DEFDEVS; if (prev) prev->wl_next = w->wl_next; else thisgroup = next; } /* w must not be freed here */ w = NULL; } else if (eq(w->wl_word, ":")) { /* w must not be freed here */ w = NULL; if (!params) { params = next; if (prev) prev->wl_next = NULL; else thisgroup = NULL; } else { if (prev) prev->wl_next = next; else params = next; } } else if (eq(w->wl_word, ";") || eq(w->wl_word, ",")) { nextgroup = next; /* w must not be freed here */ w = NULL; if (prev) prev->wl_next = NULL; break; } prev = w; } instances = 0; for (dg = dgen_init(ft_curckt->ci_ckt, thisgroup, 1, dev_flag, mode); dg; dgen_nth_next(&dg, count)) { instances = 1; if (dg->flags & DGEN_INSTANCE) { instances = 2; fprintf(cp_out, " %s: %s\n", ft_sim->devices[dg->dev_type_no]->name, ft_sim->devices[dg->dev_type_no]->description); n += 1; i = 0; do { fprintf(cp_out, "%*s", LEFT_WIDTH, "device"); j = dgen_for_n(dg, count, printstr_n, NULL, i); i += 1; fprintf(cp_out, "\n"); } while (j); if (ft_sim->devices[dg->dev_type_no]->numModelParms) { i = 0; do { fprintf(cp_out, "%*s", LEFT_WIDTH, "model"); j = dgen_for_n(dg, count, printstr_m, NULL, i); i += 1; fprintf(cp_out, "\n"); } while (j); } if (param_flag) param_forall_old(dg, param_flag); else if (!params) param_forall_old(dg, DGEN_DEFPARAMS); if (params) wl_forall(params, listparam, dg); fprintf(cp_out, "\n"); } else if (ft_sim->devices[dg->dev_type_no]->numModelParms) { fprintf(cp_out, " %s models (%s)\n", ft_sim->devices[dg->dev_type_no]->name, ft_sim->devices[dg->dev_type_no]->description); n += 1; i = 0; do { fprintf(cp_out, "%*s", LEFT_WIDTH, "model"); j = dgen_for_n(dg, count, printstr_m, NULL, i); i += 1; fprintf(cp_out, "\n"); } while (j); fprintf(cp_out, "\n"); if (param_flag) param_forall_old(dg, param_flag); else if (!params) param_forall_old(dg, DGEN_DEFPARAMS); if (params) wl_forall(params, listparam, dg); fprintf(cp_out, "\n"); } } wl = nextgroup; } while (wl); if (!n) { if (instances == 0) printf("No matching instances or models\n"); else if (instances == 1) printf("No matching models\n"); else printf("No matching elements\n"); } } int printstr_n(dgen *dg, IFparm *p, int i) { NG_IGNORE(p); NG_IGNORE(i); if (dg->instance) fprintf(cp_out, " %*.*s", DEV_WIDTH, DEV_WIDTH, dg->instance->GENname); else fprintf(cp_out, " %*s", DEV_WIDTH, "<\?\?\?\?\?\?\?>"); return 0; } int printstr_m(dgen *dg, IFparm *p, int i) { NG_IGNORE(p); NG_IGNORE(i); if (dg->model) fprintf(cp_out, " %*.*s", DEV_WIDTH, DEV_WIDTH, dg->model->GENmodName); else fprintf(cp_out, " %*s", DEV_WIDTH, "<\?\?\?\?\?\?\?>"); return 0; } void param_forall(dgen *dg, int flags) { int i, j, k; int xcount; IFparm *plist; if (dg->flags & DGEN_INSTANCE) { xcount = *ft_sim->devices[dg->dev_type_no]->numInstanceParms; plist = ft_sim->devices[dg->dev_type_no]->instanceParms; } else { xcount = *ft_sim->devices[dg->dev_type_no]->numModelParms; plist = ft_sim->devices[dg->dev_type_no]->modelParms; } for (i = 0; i < xcount; i++) if ((plist[i].dataType & IF_ASK) && !(plist[i].dataType & IF_REDUNDANT) && ((plist[i].dataType & IF_SET) || dg->ckt->CKTrhsOld) && (!(plist[i].dataType & IF_UNINTERESTING) || (flags == DGEN_ALLPARAMS))) { j = 0; do { fprintf(cp_out, " %-19s=", plist[i].keyword); k = dgen_for_n(dg, count, printvals, (plist + i), j); fprintf(cp_out, "\n"); j += 1; } while (k); } } void param_forall_old(dgen *dg, int flags) { int i, j, k; int xcount; IFparm *plist; if (dg->flags & DGEN_INSTANCE) { xcount = *ft_sim->devices[dg->dev_type_no]->numInstanceParms; plist = ft_sim->devices[dg->dev_type_no]->instanceParms; } else { xcount = *ft_sim->devices[dg->dev_type_no]->numModelParms; plist = ft_sim->devices[dg->dev_type_no]->modelParms; } for (i = 0; i < xcount; i++) if ((plist[i].dataType & IF_ASK) && !(plist[i].dataType & IF_REDUNDANT) && ((plist[i].dataType & IF_SET) || dg->ckt->CKTrhsOld) && (!(plist[i].dataType & IF_UNINTERESTING) || (flags == DGEN_ALLPARAMS))) { j = 0; do { if (!j) fprintf(cp_out, "%*.*s", LEFT_WIDTH, LEFT_WIDTH, plist[i].keyword); else fprintf(cp_out, "%*.*s", LEFT_WIDTH, LEFT_WIDTH, " "); k = dgen_for_n(dg, count, printvals_old, (plist + i), j); fprintf(cp_out, "\n"); j += 1; } while (k); } } void listparam(wordlist *p, dgen *dg) { int i, j, k, found; int xcount; IFparm *plist; found = 0; if (dg->flags & DGEN_INSTANCE) { xcount = *ft_sim->devices[dg->dev_type_no]->numInstanceParms; plist = ft_sim->devices[dg->dev_type_no]->instanceParms; } else { xcount = *ft_sim->devices[dg->dev_type_no]->numModelParms; plist = ft_sim->devices[dg->dev_type_no]->modelParms; } for (i = 0; i < xcount; i++) if (eqc(p->wl_word, plist[i].keyword) && (plist[i].dataType & IF_ASK)) { found = 1; break; } if (found) { if (dg->ckt->CKTrhsOld || (plist[i].dataType & IF_SET)) { j = 0; do { if (!j) fprintf(cp_out, "%*.*s", LEFT_WIDTH, LEFT_WIDTH, p->wl_word); else fprintf(cp_out, "%*.*s", LEFT_WIDTH, LEFT_WIDTH, " "); k = dgen_for_n(dg, count, printvals_old, (plist + i), j); printf("\n"); j += 1; } while (k > 0); } else { j = 0; do { if (!j) fprintf(cp_out, "%*.*s", LEFT_WIDTH, LEFT_WIDTH, p->wl_word); else fprintf(cp_out, "%*s", LEFT_WIDTH, " "); k = dgen_for_n(dg, count, bogus1, NULL, j); fprintf(cp_out, "\n"); j += 1; } while (k > 0); } } else { j = 0; do { if (!j) fprintf(cp_out, "%*.*s", LEFT_WIDTH, LEFT_WIDTH, p->wl_word); else fprintf(cp_out, "%*s", LEFT_WIDTH, " "); k = dgen_for_n(dg, count, bogus2, NULL, j); fprintf(cp_out, "\n"); j += 1; } while (k > 0); } } int bogus1(dgen *dg, IFparm *p, int i) { NG_IGNORE(dg); NG_IGNORE(p); NG_IGNORE(i); fprintf(cp_out, " %*s", DEV_WIDTH, "---------"); return 0; } int bogus2(dgen *dg, IFparm *p, int i) { NG_IGNORE(dg); NG_IGNORE(p); NG_IGNORE(i); fprintf(cp_out, " %*s", DEV_WIDTH, "?????????"); return 0; } int printvals(dgen *dg, IFparm *p, int i) { IFvalue val; int n; if (dg->flags & DGEN_INSTANCE) ft_sim->askInstanceQuest (ft_curckt->ci_ckt, dg->instance, p->id, &val, &val); else ft_sim->askModelQuest (ft_curckt->ci_ckt, dg->model, p->id, &val, &val); if (p->dataType & IF_VECTOR) n = val.v.numValue; else n = 1; if (((p->dataType & IF_VARTYPES) & ~IF_VECTOR) == IF_COMPLEX) n *= 2; if (i >= n) { if (i == 0) fprintf(cp_out, " -"); else fprintf(cp_out, " "); return 0; } if (p->dataType & IF_VECTOR) { /* va: ' ' is no flag for %s */ switch ((p->dataType & IF_VARTYPES) & ~IF_VECTOR) { case IF_FLAG: fprintf(cp_out, " %d", val.v.vec.iVec[i]); break; case IF_INTEGER: fprintf(cp_out, " %d", val.v.vec.iVec[i]); break; case IF_REAL: fprintf(cp_out, " %.6g", val.v.vec.rVec[i]); break; case IF_COMPLEX: if (!(i % 2)) fprintf(cp_out, " %.6g", val.v.vec.cVec[i / 2].real); else fprintf(cp_out, " %.6g", val.v.vec.cVec[i / 2].imag); break; case IF_STRING: fprintf(cp_out, " %s", val.v.vec.sVec[i]); break; case IF_INSTANCE: fprintf(cp_out, " %s", val.v.vec.uVec[i]); break; default: fprintf(cp_out, " %s", " ******** "); } } else { switch ((p->dataType & IF_VARTYPES) & ~IF_VECTOR) { case IF_FLAG: fprintf(cp_out, " %d", val.iValue); break; case IF_INTEGER: fprintf(cp_out, " %d", val.iValue); break; case IF_REAL: fprintf(cp_out, " %.6g", val.rValue); break; case IF_COMPLEX: if (i % 2) fprintf(cp_out, " %.6g", val.cValue.real); else fprintf(cp_out, " %.6g", val.cValue.imag); break; case IF_STRING: fprintf(cp_out, " %s", val.sValue); break; case IF_INSTANCE: fprintf(cp_out, " %s", val.uValue); break; default: fprintf(cp_out, " %s", " ******** "); } } return n - 1; } int printvals_old(dgen *dg, IFparm *p, int i) { IFvalue val; int n, error; if (dg->flags & DGEN_INSTANCE) error = ft_sim->askInstanceQuest (ft_curckt->ci_ckt, dg->instance, p->id, &val, &val); else error = ft_sim->askModelQuest (ft_curckt->ci_ckt, dg->model, p->id, &val, &val); if (p->dataType & IF_VECTOR) n = val.v.numValue; else n = 1; if (((p->dataType & IF_VARTYPES) & ~IF_VECTOR) == IF_COMPLEX) n *= 2; if (i >= n) { if (i == 0) fprintf(cp_out, " -"); else fprintf(cp_out, " "); return 0; } if (error) { fprintf(cp_out, " <>", error); } else if (p->dataType & IF_VECTOR) { /* va: ' ' is no flag for %s */ switch ((p->dataType & IF_VARTYPES) & ~IF_VECTOR) { case IF_FLAG: fprintf(cp_out, " % *d", DEV_WIDTH, val.v.vec.iVec[i]); break; case IF_INTEGER: fprintf(cp_out, " % *d", DEV_WIDTH, val.v.vec.iVec[i]); break; case IF_REAL: fprintf(cp_out, " % *.6g", DEV_WIDTH, val.v.vec.rVec[i]); break; case IF_COMPLEX: if (!(i % 2)) fprintf(cp_out, " % *.6g", DEV_WIDTH, val.v.vec.cVec[i / 2].real); else fprintf(cp_out, " % *.6g", DEV_WIDTH, val.v.vec.cVec[i / 2].imag); break; case IF_STRING: fprintf(cp_out, " %*.*s", DEV_WIDTH, DEV_WIDTH, val.v.vec.sVec[i]); break; case IF_INSTANCE: fprintf(cp_out, " %*.*s", DEV_WIDTH, DEV_WIDTH, val.v.vec.uVec[i]); break; default: fprintf(cp_out, " %*.*s", DEV_WIDTH, DEV_WIDTH, " ******** "); } } else { switch ((p->dataType & IF_VARTYPES) & ~IF_VECTOR) { case IF_FLAG: fprintf(cp_out, " % *d", DEV_WIDTH, val.iValue); break; case IF_INTEGER: fprintf(cp_out, " % *d", DEV_WIDTH, val.iValue); break; case IF_REAL: fprintf(cp_out, " % *.6g", DEV_WIDTH, val.rValue); break; case IF_COMPLEX: if (i % 2) fprintf(cp_out, " % *.6g", DEV_WIDTH, val.cValue.real); else fprintf(cp_out, " % *.6g", DEV_WIDTH, val.cValue.imag); break; case IF_STRING: fprintf(cp_out, " %*.*s", DEV_WIDTH, DEV_WIDTH, val.sValue); break; case IF_INSTANCE: fprintf(cp_out, " %*.*s", DEV_WIDTH, DEV_WIDTH, val.uValue); break; default: fprintf(cp_out, " %*.*s", DEV_WIDTH, DEV_WIDTH, " ******** "); } } return n - 1; } /* * (old "show" command) * Display various device parameters. The syntax of this command is * show devicelist : parmlist * where devicelist can be "all", the name of a device, a string like r*, * which means all devices with names that begin with 'r', repeated one * or more times. The parms are names of parameters that are (hopefully) * valid for all the named devices, or "all". */ void old_show(wordlist *wl) { wordlist *devs, *parms, *tw, *ww; struct variable *v; char *nn; devs = wl; wl = wl_find(":", wl); if (!wl) { parms = NULL; } else { if (wl->wl_prev) wl->wl_prev->wl_next = NULL; parms = wl->wl_next; if (parms) parms->wl_prev = NULL; } /* Now expand the devicelist... */ for (tw = NULL; devs; devs = devs->wl_next) { inp_casefix(devs->wl_word); tw = wl_append(tw, devexpand(devs->wl_word)); } devs = tw; tw = wl_find("all", parms); if (tw) parms = NULL; /* This is a crock... */ if (!devs) devs = cp_cctowl(ft_curckt->ci_devices); out_init(); while (devs) { out_printf("%s:\n", devs->wl_word); if (parms) { for (tw = parms; tw; tw = tw->wl_next) { nn = copy(devs->wl_word); v = if_getparam(ft_curckt->ci_ckt, &nn, tw->wl_word, 0, 0); if (!v) v = if_getparam(ft_curckt->ci_ckt, &nn, tw->wl_word, 0, 1); if (v) { out_printf("\t%s =", tw->wl_word); for (ww = cp_varwl(v); ww; ww = ww->wl_next) out_printf(" %s", ww->wl_word); out_send("\n"); } } } else { nn = copy(devs->wl_word); v = if_getparam(ft_curckt->ci_ckt, &nn, "all", 0, 0); if (!v) v = if_getparam(ft_curckt->ci_ckt, &nn, "all", 0, 1); while (v) { out_printf("\t%s =", v->va_name); for (ww = cp_varwl(v); ww; ww = ww->wl_next) out_printf(" %s", ww->wl_word); out_send("\n"); v = v->va_next; } } devs = devs->wl_next; } } /* * Alter a device parameter. The new syntax here is * alter @device[parameter] = expr * alter device = expr * alter device parameter = expr * expr must be real (complex isn't handled right now, integer is fine though, * but no strings ... for booleans, use 0/1). */ static void com_alter_common(wordlist *wl, int do_model); void com_alter(wordlist *wl) { if (!wl) { fprintf(cp_err, "usage: alter dev param = expression\n"); fprintf(cp_err, " or alter @dev[param] = expression\n"); fprintf(cp_err, " or alter dev = expression\n"); return; } com_alter_common(wl, 0); } void com_altermod(wordlist *wl) { wordlist *fileword; bool newfile = FALSE; fileword = wl; while (fileword) { if (ciprefix("file", fileword->wl_word)) newfile = TRUE; fileword = fileword->wl_next; } if (newfile) com_alter_mod(wl); else com_alter_common(wl, 1); } static void if_set_binned_model(CKTcircuit *ckt, char *devname, char *param, struct dvec *val) { char *width_length; double w = 0.0, l = 0.0; struct variable *v; v = if_getparam(ckt, &devname, "w", 0, 0); if (!v) { fprintf(cp_err, "Error: Can't access width instance parameter.\n"); return; } w = v->va_V.vV_real; v = if_getparam(ckt, &devname, "l", 0, 0); if (!v) { fprintf(cp_err, "Error: Can't access length instance parameter.\n"); return; } l = v->va_V.vV_real; if (param[0] == 'w') w = *val->v_realdata; /* overwrite the width with the alter param */ else l = *val->v_realdata; /* overwrite the length with the alter param */ width_length = tprintf("w=%15.7e l=%15.7e", w, l); if_setparam_model(ft_curckt->ci_ckt, &devname, width_length); FREE(width_length); } static void com_alter_common(wordlist *wl, int do_model) { wordlist *wl_head = wl; wordlist *eqword, *words; char *dev, *param; struct dvec *dv; struct pnode *names; int i; if (!ft_curckt) { fprintf(cp_err, "Error: no circuit loaded\n"); return; } /* * when the assignment operator '=' is embedded in a wl_word * then split the word into several words * * Spaces around the '=' sign have to be removed. This is provided * by inp_remove_excess_ws(). But take care if command is entered manually! */ for (; wl; wl = wl->wl_next) { char *argument = wl->wl_word; char *eqptr = strchr(argument, '='); if (eqptr) { if (strlen(argument) > 1) { wordlist *wn = NULL; if (eqptr[1]) wn = wl_cons(copy(eqptr + 1), wn); wn = wl_cons(copy("="), wn); if (eqptr > argument) wn = wl_cons(copy_substring(argument, eqptr), wn); wl_splice(wl, wn); if (wl_head == wl) wl_head = wn; } break; } } if (!wl) { /* no equal sign found, probably a pre3f4 input format * 'alter device value' * 'alter device parameter value' * are supported, * 'alter device parameter value parameter value [ parameter value ]' * with multiple param value pairs are not supported! */ wordlist *wlin = wl_head; int wlen = wl_length(wlin); int maxelem = 3; /* Return the last element of wlin */ wlin = wl_nthelem(100, wlin); /* no more than 100 vector elements */ if (eq(wlin->wl_word, "]")) /* we have a vector */ for (i = 0; i < 100; i++) { /* no more than 100 vector elements */ wlin = wlin->wl_prev; maxelem++; if (eq(wlin->wl_word, "[")) break; if (wlin->wl_prev == NULL) { fprintf(cp_err, "Error: '[' is missing.\n"); fprintf(cp_err, "Cannot alter parameters.\n"); return; } } if (wlen > maxelem) { fprintf(cp_err, "Error: Only a single param - value pair supported.\n"); fprintf(cp_err, "Cannot alter parameters.\n"); return; } /* add the '=' */ wlin = wlin->wl_prev; wlin = wl_append(wlin, wl_cons(copy("="), wl_chop_rest(wlin))); } wl = wl_head; /* Everything is ready, parsing of the wordlist starts here. */ eqword = wl_find("=", wl); if (!eqword || !eqword->wl_next) { fprintf(cp_err, "Error: no assignment found.\n"); fprintf(cp_err, "Cannot alter parameters.\n"); return; } /* * device parameter = expr * device = expr * @dev[param] = expr */ dev = NULL; param = NULL; words = wl; while (words != eqword) { char *p = words->wl_word; if (param) { fprintf(cp_err, "Warning: excess parameter name \"%s\" ignored.\n", p); } else if (dev) { param = words->wl_word; } else if (*p == '@' || *p == '#') { dev = p + 1; p = strchr(p, '['); if (p) { *p++ = '\0'; param = p; p = strchr(p, ']'); if (p) *p = '\0'; } } else { dev = p; } words = words->wl_next; } if (!dev) { fprintf(cp_err, "Error: no model or device name provided.\n"); fprintf(cp_err, "Cannot alter parameters.\n"); return; } /* in case the altermod command comes from commandline or over shared library we have to provide lowercase */ strtolower(param); words = eqword->wl_next; /* skip next line if words is a vector */ if (!eq(words->wl_word, "[")) names = ft_getpnames(words, FALSE); else names = NULL; if (!names) { /* Put this to try to resolve the case of * alter @vin[pulse] = [ 0 5 10n 10n 10n 50n 100n ] */ char *xsbuf, *rem_xsbuf; double *list; double tmp; int error; /* move beyond '[' to allow INPevaluate() */ if (eq(words->wl_word, "[")) words = words->wl_next; xsbuf = rem_xsbuf = wl_flatten(words); /* fprintf(cp_err, "Chain converted %s \n", xsbuf); */ for (i = 0, list = NULL;;) { tmp = INPevaluate(&xsbuf, &error, 1); if (error) break; /* printf(" returning vector value %g\n", tmp); */ list = TREALLOC(double, list, i + 1); list[i++] = tmp; } if (i < 1) { fprintf(cp_err, "Error: cannot evaluate new parameter value.\n"); return; } dv = dvec_alloc(copy("real vector"), SV_NOTYPE, VF_REAL, i, list); if (!dv) return; /* Here I was, to change the inclusion in the circuit. * will have to revise that dv is right for its insertion. */ if_setparam(ft_curckt->ci_ckt, &dev, param, dv, do_model); tfree(rem_xsbuf); vec_free(dv); return; } dv = ft_evaluate(names); if (!dv) goto done; if (dv->v_length < 1) { fprintf(cp_err, "Error: cannot evaluate new parameter value.\n"); goto done; } /* If we want alter the geometry of a MOS device we have to ensure that we are in the valid model bin. */ if ((dev[0] == 'm') && ((param[0] == 'w') || (param[0] == 'l'))) if_set_binned_model(ft_curckt->ci_ckt, dev, param, dv); if_setparam(ft_curckt->ci_ckt, &dev, param, dv, do_model); done: /* va: garbage collection for dv, if pnode names is no simple value */ if (names && !names->pn_value && dv) vec_free(dv); free_pnode(names); /* free also dv, if pnode names is simple value */ } /* Given a device name, possibly with wildcards, return the matches. */ static wordlist * devexpand(char *name) { wordlist *wl, *devices; if (strchr(name, '*') || strchr(name, '[') || strchr(name, '?')) { devices = cp_cctowl(ft_curckt->ci_devices); for (wl = NULL; devices; devices = devices->wl_next) if (cp_globmatch(name, devices->wl_word)) wl = wl_cons(devices->wl_word, wl); } else if (cieq(name, "all")) { wl = cp_cctowl(ft_curckt->ci_devices); } else { wl = wl_cons(name, NULL); } wl_sort(wl); return wl; } /* altermod mod_1 [mod_nn] file=modelparam.mod load model file and overwrite models mod_1 till mod_nn with all new parameters (limited to 16 models) */ static void com_alter_mod(wordlist *wl) { #define MODLIM 16 /* max number of models */ FILE *modfile; char *modellist[MODLIM] = {NULL}, *modellines[MODLIM] = {NULL}, *newmodelname, *newmodelline; char *filename = NULL, *eqword, *input, *modelline = NULL, *inptoken; int modno = 0, molineno = 0, i, j; wordlist *newcommand; struct card *modeldeck, *tmpdeck; char *readmode = "r"; char **arglist; bool modelfound = FALSE; int ij[MODLIM]; /* initialize */ for (i = 0; i < MODLIM; i++) ij[i] = -1; /* read all model names */ while (!ciprefix("file", wl->wl_word)) { if (modno == MODLIM) { fprintf(cp_err, "Error: too many model names in altermod command\n"); controlled_exit(1); } modellist[modno] = copy(wl->wl_word); modno++; wl = wl->wl_next; } input = wl_flatten(wl); /* get the file name */ eqword = strchr(input, '='); if (eqword) { eqword++; while (*eqword == ' ') eqword++; if (*eqword == '\0') { fprintf(cp_err, "Error: no filename given\n"); controlled_exit(1); } filename = copy(eqword); } else { eqword = strstr(input, "file"); eqword += 4; while (*eqword == ' ') eqword++; if (*eqword == '\0') { fprintf(cp_err, "Error: no filename given\n"); controlled_exit(1); } filename = copy(eqword); } modfile = inp_pathopen(filename, readmode); { char *dir_name = ngdirname(filename); modeldeck = inp_readall(modfile, dir_name, 0, 0, NULL); tfree(dir_name); } tfree(input); tfree(filename); /* get all lines starting with *model */ for (tmpdeck = modeldeck; tmpdeck; tmpdeck = tmpdeck->nextcard) if (ciprefix("*model", tmpdeck->line)) { if (molineno == MODLIM) { fprintf(cp_err, "Error: more than %d models in deck, rest ignored\n", molineno); break; } modellines[molineno] = tmpdeck->line; molineno++; } /* Check if all models named in altermod command are to be found in input deck. Exit if not successfull */ for (i = 0; i < modno; i++) { for (j = 0; j < molineno; j++) { newmodelline = modellines[j]; /* get model name from model line */ inptoken = gettok(&newmodelline); /* *model */ tfree(inptoken); newmodelname = gettok(&newmodelline); /* modelname */ if (cieq(newmodelname, modellist[i])) { modelfound = TRUE; tfree(newmodelname); break; } tfree(newmodelname); } if (modelfound) { modelfound = FALSE; ij[i] = j; /* model in altermod, found in model line */ continue; } else { fprintf(cp_err, "Error: could not find model %s in input deck\n", modellist[i]); controlled_exit(1); } } /* read the model line, generate the altermod commands as a wordlist, and call com_alter_common() */ arglist = TMALLOC(char *, 4); arglist[0] = copy("altermod"); arglist[3] = NULL; /* for each model name of altermod command */ for (i = 0; i < modno; i++) { /* model name */ arglist[1] = copy(modellist[i]); /* parse model line from deck */ modelline = modellines[ij[i]]; inptoken = gettok(&modelline); /* skip *model */ tfree(inptoken); inptoken = gettok(&modelline); /* skip modelname */ tfree(inptoken); inptoken = gettok(&modelline); /* skip model type */ tfree(inptoken); while ((inptoken = gettok(&modelline)) != NULL) { /* exclude level and version */ if (ciprefix("version", inptoken) || ciprefix("level", inptoken)) { tfree(inptoken); continue; } arglist[2] = inptoken; /* create a new wordlist from array arglist */ newcommand = wl_build(arglist); com_alter_common(newcommand->wl_next, 1); wl_free(newcommand); tfree(inptoken); } tfree(arglist[1]); } tfree(arglist[0]); tfree(arglist[3]); } #ifdef HAVE_TSEARCH #include static int check_ifparm_compare(const void *a, const void *b) { IFparm *pa = (IFparm *) a; IFparm *pb = (IFparm *) b; return pa->id - pb->id; } static void check_ifparm_freenode(void *node) { NG_IGNORE(node); } static void check_ifparm(IFdevice *device, int instance_flag) { int i, xcount; IFparm *plist; if (instance_flag) { plist = device->instanceParms; if (!plist) return; fprintf(stderr, " checking %s instanceParams\n", device->name); xcount = *device->numInstanceParms; } else { plist = device->modelParms; if (!plist) return; fprintf(stderr, " checking %s modelParams\n", device->name); xcount = *device->numModelParms; } void *root = NULL; for (i = 0; i < xcount; i++) { IFparm *psearch = *(IFparm **) tsearch(plist + i, &root, check_ifparm_compare); int type_err = (psearch->dataType ^ plist[i].dataType) & ~IF_REDUNDANT; if (type_err) fprintf(stderr, " ERROR, dataType mismatch \"%s\" \"%s\" %08x\n", psearch->keyword, plist[i].keyword, type_err); if ((plist[i].dataType & IF_REDUNDANT) && (i == 0 || plist[i-1].id != plist[i].id)) { fprintf(stderr, "ERROR, alias \"%s\" has non matching predecessor \"%s\"\n", plist[i].keyword, plist[i-1].keyword); } if (i == 0) continue; if (plist[i-1].id != plist[i].id) { if (psearch != plist + i) fprintf(stderr, "ERROR: non neighbored duplicate id: \"%s\" \"%s\"\n", psearch->keyword, plist[i].keyword); } else if (!(plist[i].dataType & IF_REDUNDANT)) { fprintf(stderr, "ERROR: non R duplicate id: \"%s\" \"%s\"\n", plist[i-1].keyword, plist[i].keyword); } } #ifdef HAVE_TDESTROY tdestroy (root, check_ifparm_freenode); #endif } void com_check_ifparm(wordlist *wl) { NG_IGNORE(wl); int k; for (k = 0; k < ft_sim->numDevices; k++) if (ft_sim->devices[k]) { check_ifparm(ft_sim->devices[k], 0); check_ifparm(ft_sim->devices[k], 1); } } #endif tmpk8ny_4pz/src/frontend/com_option.h0000644000175000017500000000014213546075722020102 0ustar carstencarsten#ifndef ngspice_COM_OPTION_H #define ngspice_COM_OPTION_H void com_option(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/signal_handler.c0000644000175000017500000001006713546075722020710 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * The signal routines for spice 3 and nutmeg. */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/ftedev.h" #include #include #include "signal_handler.h" #include "plotting/graf.h" #ifdef HAS_WINGUI void winmessage(char* new_msg); #endif #ifdef HAVE_GNUREADLINE /* Added GNU Readline Support 11/3/97 -- Andrew Veliath */ /* from spice3f4 patch to ng-spice. jmr */ #include #include #endif #ifdef HAVE_BSDEDITLINE /* SJB added edit line support 2005-05-05 */ #include #endif /* HAVE_BSDEDITLINE */ JMP_BUF jbuf; /* The (void) signal handlers... SIGINT is the only one that gets reset (by * cshpar) so it is global. They are ifdef BSD because of the sigmask * stuff in sigstop. We set the interrupt flag and return if ft_setflag * is TRUE. */ /* The purpose of ft_sigintr_cleanup() is to handle all processing of asynchronous * signals which require user process context. Some kernel services are not * allowed to be called from asynchronous signal handlers. (e.g. mutexes) */ void ft_sigintr_cleanup(void) { gr_clean(); /* Clean up plot window */ /* sjb - what to do for editline??? The following are not supported in editline */ #if defined(HAVE_GNUREADLINE) && !defined(__APPLE__) /* Clean up readline after catching signals */ /* One or all of these might be superfluous */ (void) rl_free_line_state(); (void) rl_cleanup_after_signal(); (void) rl_reset_after_signal(); #endif /* defined(HAVE_GNUREADLINE) || defined(HAVE_BSDEDITLINE) */ /* To restore screen after an interrupt to a plot for instance */ cp_interactive = TRUE; cp_resetcontrol(); } /* invoke this function upon keyboard interrupt */ RETSIGTYPE ft_sigintr(void) { static int interrupt_counter = 0; /* fprintf(cp_err, "Received interrupt. Handling it . . . . .\n"); */ /* Reinstall ft_signintr as the signal handler. */ (void) signal(SIGINT, (SIGNAL_FUNCTION) ft_sigintr); if (ft_intrpt) { /* check to see if we're being interrupted repeatedly */ fprintf(cp_err, "\nInterrupted again (ouch)\n"); interrupt_counter++; } else { fprintf(cp_err, "\nInterrupted once . . .\n"); ft_intrpt = TRUE; interrupt_counter = 1; } if (interrupt_counter >= 3) { fprintf(cp_err, "\nKilling, since %d interrupts have been requested\n\n", interrupt_counter); controlled_exit(1); } if (ft_setflag) { return; /* just return without aborting simulation if ft_setflag = TRUE */ } /* here we jump to the start of command processing in main() after resetting everything. */ LONGJMP(jbuf, 1); } RETSIGTYPE sigfloat(int sig, int code) { NG_IGNORE(sig); fperror("Error", code); rewind(cp_out); (void) signal(SIGFPE, (SIGNAL_FUNCTION) sigfloat); LONGJMP(jbuf, 1); } /* This should give a new prompt if cshpar is waiting for input. */ #ifdef SIGTSTP RETSIGTYPE sigstop(void) { gr_clean(); cp_ccon(FALSE); (void) signal(SIGTSTP, SIG_DFL); (void) kill(getpid(), SIGTSTP); /* This should stop us */ } RETSIGTYPE sigcont(void) { (void) signal(SIGTSTP, (SIGNAL_FUNCTION) sigstop); if (cp_cwait) LONGJMP(jbuf, 1); } #endif /* Special (void) signal handlers. */ RETSIGTYPE sigill(void) { fprintf(cp_err, "\ninternal error -- illegal instruction\n"); fatal(); } RETSIGTYPE sigbus(void) { fprintf(cp_err, "\ninternal error -- bus error\n"); fatal(); } RETSIGTYPE sigsegv(void) { fprintf(cp_err, "\ninternal error -- segmentation violation\n"); #ifdef HAS_WINGUI winmessage("Fatal error in NGSPICE"); #endif fatal(); } RETSIGTYPE sig_sys(void) { fprintf(cp_err, "\ninternal error -- bad argument to system call\n"); fatal(); } tmpk8ny_4pz/src/frontend/postsc.h0000644000175000017500000000101113546075722017243 0ustar carstencarsten/************* * Header file for postsc.c * 1999 E. Rouat ************/ #ifndef ngspice_POSTSC_H #define ngspice_POSTSC_H disp_fn_Init_t PS_Init; disp_fn_NewViewport_t PS_NewViewport; disp_fn_Close_t PS_Close; disp_fn_Clear_t PS_Clear; disp_fn_DrawLine_t PS_DrawLine; disp_fn_Arc_t PS_Arc; disp_fn_Text_t PS_Text; disp_fn_SetLinestyle_t PS_SetLinestyle; disp_fn_SetColor_t PS_SetColor; disp_fn_Update_t PS_Update; #endif tmpk8ny_4pz/src/frontend/com_commands.h0000644000175000017500000000051013546075722020372 0ustar carstencarsten#ifndef ngspice_COM_COMMANDS_H #define ngspice_COM_COMMANDS_H void com_showmod(wordlist *wl); void com_show(wordlist *wl); void com_alter(wordlist *wl); void com_altermod(wordlist *wl); void com_alterparam(wordlist *wl); void com_meas(wordlist *wl); void com_sysinfo(wordlist *wl); void com_check_ifparm(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/com_set.h0000644000175000017500000000013113546075722017363 0ustar carstencarsten#ifndef ngspice_COM_SET_H #define ngspice_COM_SET_H void com_set(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/dotcards.c0000644000175000017500000004412613546075722017544 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group Modified: 2000 AlansFixes **********/ /* * Spice-2 compatibility stuff for .plot, .print, .four, and .width. */ #include "ngspice/ngspice.h" #include #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/fteinp.h" #include "ngspice/sim.h" #include "circuits.h" #include "dotcards.h" #include "variable.h" #include "fourier.h" #include "breakp2.h" #include "com_measure2.h" #include "com_commands.h" #include "com_asciiplot.h" #include "resource.h" #include "postcoms.h" /* Extract all the .save lines */ static void fixdotplot(wordlist *wl); static void fixdotprint(wordlist *wl); static char *fixem(char *string); void ft_savemeasure(void); static struct plot * setcplot(char *name) { struct plot *pl; for (pl = plot_list; pl; pl = pl->pl_next) if (ciprefix(name, pl->pl_typename)) return pl; return NULL; } /* All lines with .width, .plot, .print, .save, .op, .meas, .tf have been assembled into a wordlist (wl_first) in inp.c:inp_spsource(), and then stored to ci_commands in inp.c:inp_dodeck(). The .save lines are selected, com_save will put the commands into dbs. */ void ft_dotsaves(void) { wordlist *iline, *wl = NULL; char *s; if (!ft_curckt) /* Shouldn't happen. */ return; for (iline = ft_curckt->ci_commands; iline; iline = iline->wl_next) if (ciprefix(".save", iline->wl_word)) { s = iline->wl_word; /* skip .save */ s = nexttok(s); wl = wl_append(wl, gettoks(s)); } com_save(wl); wl_free(wl); } /* Go through the dot lines given and make up a big "save" command with * all the node names mentioned. Note that if a node is requested for * one analysis, it is saved for all of them. */ static char *plot_opts[ ] = { "linear", "xlog", "ylog", "loglog" }; int ft_savedotargs(void) { wordlist *w, *wl = NULL, *iline, **prev_wl, *w_next; char *name; char *s; int some = 0; static wordlist all = { "all", NULL, NULL }; int isaplot; int i; int status; if (!ft_curckt) /* Shouldn't happen. */ return 0; for (iline = ft_curckt->ci_commands; iline; iline = iline->wl_next) { s = iline->wl_word; if (ciprefix(".plot", s)) isaplot = 1; else isaplot = 0; if (isaplot || ciprefix(".print", s)) { s = nexttok(s); name = gettok(&s); if ((w = gettoks(s)) == NULL) { fprintf(cp_err, "Warning: no nodes given: %s\n", iline->wl_word); } else { if (isaplot) { prev_wl = &w; for (wl = w; wl; wl = w_next) { w_next = wl->wl_next; for (i = 0; (size_t) i < NUMELEMS(plot_opts); i++) { if (!strcmp(wl->wl_word, plot_opts[i])) { /* skip it */ *prev_wl = w_next; tfree(wl); break; } } if (i == NUMELEMS(plot_opts)) prev_wl = &wl->wl_next; } } some = 1; com_save2(w, name); } } else if (ciprefix(".four", s)) { s = nexttok(s); s = nexttok(s); if ((w = gettoks(s)) == NULL) { fprintf(cp_err, "Warning: no nodes given: %s\n", iline->wl_word); } else { some = 1; com_save2(w, "TRAN"); /* A hack */ } } else if (ciprefix(".meas", s)) { status = measure_extract_variables(s); if (!(status)) { some = 1; } } else if (ciprefix(".op", s)) { some = 1; com_save2(&all, "OP"); } else if (ciprefix(".tf", s)) { some = 1; com_save2(&all, "TF"); } } return some; } void ft_savemeasure(void) { char *s; wordlist *iline; if (!ft_curckt) /* Shouldn't happen. */ return; for (iline = ft_curckt->ci_commands; iline; iline = iline->wl_next) { s = iline->wl_word; if (ciprefix(".measure", s)) { (void) measure_extract_variables(s); } } } /* Execute the .whatever lines found in the deck, after we are done running. * We'll be cheap and use cp_lexer to get the words... This should make us * spice-2 compatible. If terse is TRUE then there was a rawfile, so don't * print lots of junk. */ int ft_cktcoms(bool terse) { wordlist *coms, *command, all; char *plottype, *s; struct dvec *v; static wordlist twl = { "col", NULL, NULL }; struct plot *pl; int i, found; char numbuf[BSIZE_SP]; /* For printnum*/ all.wl_next = NULL; all.wl_word = "all"; if (!ft_curckt) return 1; plot_cur = setcplot("op"); if (!ft_curckt->ci_commands && !plot_cur) goto nocmds; coms = ft_curckt->ci_commands; cp_interactive = FALSE; /* Listing */ if (ft_listprint) { if (terse) fprintf(cp_err, ".options: no listing, rawfile was generated.\n"); else inp_list(cp_out, ft_curckt->ci_deck, ft_curckt->ci_options, LS_DECK); } /* If there was a .op line, then we have to do the .op output. */ plot_cur = setcplot("op"); if (plot_cur != NULL) { assert(plot_cur->pl_dvecs != NULL); if (plot_cur->pl_dvecs->v_realdata != NULL) { if (terse) { fprintf(cp_out, "OP information in rawfile.\n"); } else { fprintf(cp_out, "\t%-30s%15s\n", "Node", "Voltage"); fprintf(cp_out, "\t%-30s%15s\n", "----", "-------"); fprintf(cp_out, "\t----\t-------\n"); for (v = plot_cur->pl_dvecs; v; v = v->v_next) { if (!isreal(v)) { fprintf(cp_err, "Internal error: op vector %s not real\n", v->v_name); continue; } if ((v->v_type == SV_VOLTAGE) && (*(v->v_name) != '@')) { printnum(numbuf, v->v_realdata[0]); fprintf(cp_out, "\t%-30s%15s\n", v->v_name, numbuf); } } fprintf(cp_out, "\n\tSource\tCurrent\n"); fprintf(cp_out, "\t------\t-------\n\n"); for (v = plot_cur->pl_dvecs; v; v = v->v_next) if (v->v_type == SV_CURRENT) { printnum(numbuf, v->v_realdata[0]); fprintf(cp_out, "\t%-30s%15s\n", v->v_name, numbuf); } fprintf(cp_out, "\n"); if (!ft_nomod) com_showmod(&all); com_show(&all); } } } for (pl = plot_list; pl; pl = pl->pl_next) if (ciprefix("tf", pl->pl_typename)) { if (terse) { fprintf(cp_out, "TF information in rawfile.\n"); break; } plot_cur = pl; fprintf(cp_out, "Transfer function information:\n"); com_print(&all); fprintf(cp_out, "\n"); } /* Now all the '.' lines */ while (coms) { command = cp_lexer(coms->wl_word); if (!command) goto bad; if (eq(command->wl_word, ".width")) { do command = command->wl_next; while (command && !ciprefix("out", command->wl_word)); if (command) { s = strchr(command->wl_word, '='); if (!s || !s[1]) { fprintf(cp_err, "Error: bad line %s\n", coms->wl_word); coms = coms->wl_next; continue; } i = atoi(++s); cp_vset("width", CP_NUM, &i); } } else if (eq(command->wl_word, ".print")) { if (terse) { fprintf(cp_out, ".print line ignored since rawfile was produced.\n"); } else { command = command->wl_next; if (!command) { fprintf(cp_err, "Error: bad line %s\n", coms->wl_word); coms = coms->wl_next; continue; } plottype = command->wl_word; command = command->wl_next; fixdotprint(command); twl.wl_next = command; found = 0; for (pl = plot_list; pl; pl = pl->pl_next) if (ciprefix(plottype, pl->pl_typename)) { plot_cur = pl; com_print(&twl); fprintf(cp_out, "\n"); found = 1; } if (!found) fprintf(cp_err, "Error: .print: no %s analysis found.\n", plottype); } } else if (eq(command->wl_word, ".plot")) { if (terse) { fprintf(cp_out, ".plot line ignored since rawfile was produced.\n"); } else { command = command->wl_next; if (!command) { fprintf(cp_err, "Error: bad line %s\n", coms->wl_word); coms = coms->wl_next; continue; } plottype = command->wl_word; command = command->wl_next; fixdotplot(command); found = 0; for (pl = plot_list; pl; pl = pl->pl_next) if (ciprefix(plottype, pl->pl_typename)) { plot_cur = pl; com_asciiplot(command); fprintf(cp_out, "\n"); found = 1; } if (!found) fprintf(cp_err, "Error: .plot: no %s analysis found.\n", plottype); } } else if (ciprefix(".four", command->wl_word)) { if (terse) { fprintf(cp_out, ".fourier line ignored since rawfile was produced.\n"); } else { int err; plot_cur = setcplot("tran"); err = fourier(command->wl_next, plot_cur); if (!err) fprintf(cp_out, "\n\n"); else fprintf(cp_err, "No transient data available for " "fourier analysis"); } } else if (!eq(command->wl_word, ".save") && !eq(command->wl_word, ".op") && // !eq(command->wl_word, ".measure") && !ciprefix(".meas", command->wl_word) && !eq(command->wl_word, ".tf")) { goto bad; } coms = coms->wl_next; } nocmds: /* Now the node table if (ft_nodesprint) ; */ /* The options */ if (ft_optsprint) { fprintf(cp_out, "Options:\n\n"); cp_vprint(); (void) putc('\n', cp_out); } /* And finally the accounting info. */ if (ft_acctprint) { static wordlist ww = { "everything", NULL, NULL }; com_rusage(&ww); } else if ((!ft_noacctprint) && (!ft_acctprint)) { com_rusage(NULL); } /* absolutely no accounting if noacct is given */ putc('\n', cp_out); return 0; bad: fprintf(cp_err, "Internal Error: ft_cktcoms: bad commands\n"); return 1; } /* These routines make sure that the arguments to .plot and .print in * spice2 decks are acceptable to spice3. The things we look for are: * trailing (a,b) in .plot -> xlimit a b * vm(x) -> mag(v(x)) * vp(x) -> ph(v(x)) * v(x,0) -> v(x) * v(0,x) -> -v(x) */ static void fixdotplot(wordlist *wl) { char *s; char numbuf[128]; /* Printnum Fix */ double *d, d1, d2; while (wl) { wl->wl_word = fixem(wl->wl_word); /* Is this a trailing (a,b) ? Note that we require it to be * one word. */ if (!wl->wl_next && (*wl->wl_word == '(')) { s = wl->wl_word + 1; d = ft_numparse(&s, FALSE); if (*s != ',') { fprintf(cp_err, "Error: bad limits \"%s\"\n", wl->wl_word); return; } d1 = *d; s++; d = ft_numparse(&s, FALSE); if ((*s != ')') || s[1]) { fprintf(cp_err, "Error: bad limits \"%s\"\n", wl->wl_word); return; } d2 = *d; tfree(wl->wl_word); wl->wl_word = copy("xlimit"); printnum(numbuf, d1); wl_append_word(NULL, &wl, copy(numbuf)); printnum(numbuf, d2); wl_append_word(NULL, &wl, copy(numbuf)); } wl = wl->wl_next; } } static void fixdotprint(wordlist *wl) { while (wl) { wl->wl_word = fixem(wl->wl_word); wl = wl->wl_next; } } static char * fixem(char *string) { char buf[BSIZE_SP], *s, *t; char *ss = string; /* Get rid of ss ? */ if (ciprefix("v(", string) &&strchr(string, ',')) { for (s = string; *s && (*s != ','); s++) ; *s++ = '\0'; for (t = s; *t && (*t != ')'); t++) ; *t = '\0'; if (eq(s, "0")) (void) sprintf(buf, "v(%s)", string + 2); else if (eq(string + 2, "0")) (void) sprintf(buf, "-v(%s)", s); else (void) sprintf(buf, "v(%s)-v(%s)", string + 2, s); } else if (ciprefix("vm(", string) &&strchr(string, ',')) { for (s = string; *s && (*s != ','); s++) ; *s++ = '\0'; for (t = s; *t && (*t != ')'); t++) ; *t = '\0'; if (eq(s, "0")) (void) sprintf(buf, "mag(v(%s))", string + 3); else if (eq(string + 3, "0")) (void) sprintf(buf, "mag(-v(%s))", s); else (void) sprintf(buf, "mag(v(%s)-v(%s))", string + 3, s); } else if (ciprefix("vp(", string) &&strchr(string, ',')) { for (s = string; *s && (*s != ','); s++) ; *s++ = '\0'; for (t = s; *t && (*t != ')'); t++) ; *t = '\0'; if (eq(s, "0")) (void) sprintf(buf, "ph(v(%s))", string + 3); else if (eq(string + 3, "0")) (void) sprintf(buf, "ph(-v(%s))", s); else (void) sprintf(buf, "ph(v(%s)-v(%s))", string + 3, s); } else if (ciprefix("vi(", string) &&strchr(string, ',')) { for (s = string; *s && (*s != ','); s++) ; *s++ = '\0'; for (t = s; *t && (*t != ')'); t++) ; *t = '\0'; if (eq(s, "0")) (void) sprintf(buf, "imag(v(%s))", string + 3); else if (eq(string + 3, "0")) (void) sprintf(buf, "imag(-v(%s))", s); else (void) sprintf(buf, "imag(v(%s)-v(%s))", string + 3, s); } else if (ciprefix("vr(", string) &&strchr(string, ',')) { for (s = string; *s && (*s != ','); s++) ; *s++ = '\0'; for (t = s; *t && (*t != ')'); t++) ; *t = '\0'; if (eq(s, "0")) (void) sprintf(buf, "real(v(%s))", string + 3); else if (eq(string + 3, "0")) (void) sprintf(buf, "real(-v(%s))", s); else (void) sprintf(buf, "real(v(%s)-v(%s))", string + 3, s); } else if (ciprefix("vdb(", string) &&strchr(string, ',')) { for (s = string; *s && (*s != ','); s++) ; *s++ = '\0'; for (t = s; *t && (*t != ')'); t++) ; *t = '\0'; if (eq(s, "0")) (void) sprintf(buf, "db(v(%s))", string + 4); else if (eq(string + 4, "0")) (void) sprintf(buf, "db(-v(%s))", s); else (void) sprintf(buf, "db(v(%s)-v(%s))", string + 4, s); } else if (ciprefix("i(", string)) { for (s = string; *s && (*s != ')'); s++) ; *s = '\0'; string += 2; (void) sprintf(buf, "%s#branch", string); } else { return (string); } tfree(ss); string = copy(buf); return (string); } wordlist * gettoks(char *s) { char *t, *s0; char *l, *r, *c; /* left, right, center/comma */ wordlist *wl, *list, **prevp; list = NULL; prevp = &list; /* stripWhite.... uses copy() to return a malloc'ed s, so we have to free it, using s0 as its starting address */ if (strchr(s, '(')) s0 = s = stripWhiteSpacesInsideParens(s); else s0 = s = copy(s); while ((t = gettok(&s)) != NULL) { if (*t == '(') { /* gettok uses copy() to return a malloc'ed t, so we have to free it */ tfree(t); continue; } l = strrchr(t, '('); if (!l) { wl = wl_cons(copy(t), NULL); *prevp = wl; prevp = &wl->wl_next; tfree(t); continue; } r = strchr(t, ')'); c = strchr(t, ','); if (!c) c = r; if (c) *c = '\0'; wl = wl_cons(NULL, NULL); *prevp = wl; prevp = &wl->wl_next; if (*(l - 1) == 'i' || *(l - 1) == 'I') { char buf[513]; sprintf(buf, "%s#branch", l + 1); wl->wl_word = copy(buf); c = r = NULL; } else { wl->wl_word = copy(l + 1); } if (c != r) { *r = '\0'; wl = wl_cons(copy(c + 1), NULL); *prevp = wl; prevp = &wl->wl_next; } tfree(t); } tfree(s0); return list; } tmpk8ny_4pz/src/frontend/commands.c0000644000175000017500000011365413546075722017545 0ustar carstencarsten/* NG-SPICE -- An electrical circuit simulator * * Copyright (c) 1990 University of California * Copyright (c) 2000 Arno W. Peters * * Permission to use, copy, modify, and distribute this software and * its documentation without fee, and without a written agreement is * hereby granted, provided that the above copyright notice, this * paragraph and the following three paragraphs appear in all copies. * * This software program and documentation are copyrighted by their * authors. The software program and documentation are supplied "as * is", without any accompanying services from the authors. The * authors do not warrant that the operation of the program will be * uninterrupted or error-free. The end-user understands that the * program was developed for research purposes and is advised not to * rely exclusively on the program for any reason. * * IN NO EVENT SHALL THE AUTHORS BE LIABLE TO ANY PARTY FOR DIRECT, * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING * LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS * DOCUMENTATION, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. THE AUTHORS SPECIFICALLY DISCLAIMS ANY * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE * SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHORS * HAVE NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, * ENHANCEMENTS, OR MODIFICATIONS. */ /* Table of available commands. Note that they're sorted so that the * commands that appear in the spiceinit file are at the top. */ #include "ngspice/ngspice.h" #include "ngspice/ftedefs.h" #include "ngspice/cpdefs.h" #include "ftehelp.h" #include "commands.h" #include "com_ahelp.h" #include "com_ghelp.h" #include "com_asciiplot.h" #include "com_compose.h" #include "com_display.h" #include "com_hardcopy.h" #include "com_help.h" #include "com_let.h" #include "com_plot.h" #include "com_setscale.h" #include "com_xgraph.h" #include "com_gnuplot.h" #include "com_state.h" #include "com_chdir.h" #include "com_echo.h" #include "com_rehash.h" #include "com_shell.h" #include "com_shift.h" #include "com_unset.h" #include "fourier.h" #include "newcoms.h" #include "define.h" #include "com_set.h" #include "misccoms.h" #include "com_commands.h" #include "runcoms.h" #include "com_alias.h" #include "typesdef.h" #include "postcoms.h" #include "com_option.h" #include "inp.h" #include "com_dump.h" #include "com_fft.h" #include "spec.h" #include "runcoms2.h" #include "breakp.h" #include "breakp2.h" #include "aspice.h" #include "com_history.h" #include "com_cdump.h" #include "linear.h" #include "where.h" #include "mw_coms.h" #include "resource.h" #include "diff.h" #include "com_strcmp.h" #include "ngspice/randnumb.h" #include "arg.h" #include "spiceif.h" /* for com_snload() and com_snsave() */ #include "com_dl.h" #ifdef XSPICE /* gtri - begin - wbk - add include files */ #include "ngspice/evtproto.h" /* gtri - end - wbk - add include files */ #endif /* Information about spice commands (struct comm). */ // char *co_comname; /* The name of the command. */ // void (*co_func) (wordlist *wl); /* The function that handles the command. */ // bool co_spiceonly; /* These can't be used from nutmeg. */ // bool co_major; /* Is this a "major" command? */ // long co_cctypes[4]; /* Bitmasks for command completion. */ // unsigned int co_env; /* print help message on this environment mask */ // int co_minargs; /* minimum number of arguments required */ // int co_maxargs; /* maximum number of arguments allowed */ // void (*co_argfn) (wordlist *wl, struct comm *command); /* The fn that prompts the user. */ // char *co_help; /* When these are printed, printf(string, av[0]) .. */ struct comm spcp_coms[] = { { "let", com_let, FALSE, TRUE, { 040000, 040000, 040000, 040000 }, E_DEFHMASK, 0, LOTS, arg_let, "varname = expr : Assign vector variables." } , { "reshape", com_reshape, FALSE, TRUE, { 040000, 040000, 040000, 040000 }, E_DEFHMASK, 1, LOTS, arg_let, "vector ... [ shape ] : change the dimensions of a vector." } , { "define", com_define, FALSE, TRUE, { 010000, 040000, 040000, 040000 }, E_DEFHMASK, 0, LOTS, NULL, "[[func (args)] stuff] : Define a user-definable function." } , { "set", com_set, FALSE, TRUE, { 020000, 020000, 020000, 020000 }, E_DEFHMASK, 0, LOTS, arg_set, "[option] [option = value] ... : Set a variable." } , { "setcs", com_set, FALSE, TRUE, { 020000, 020000, 020000, 020000 }, E_DEFHMASK, 0, LOTS, arg_set, "[option] [option = value] ... : Set a variable, case remains as given." } , /* support for altering options in interactive mode, using either command 'option' or 'options'*/ { "option", com_option, TRUE, TRUE, { 020000, 020000, 020000, 020000 }, E_DEFHMASK, 0, LOTS, arg_set, "[option] [option = value] ... : Set a simulator option." } , { "options", com_option, TRUE, TRUE, { 020000, 020000, 020000, 020000 }, E_DEFHMASK, 0, LOTS, arg_set, "[option] [option = value] ... : Set a simulator option." } , { "snsave", com_snsave, FALSE, TRUE, { 1, 040000, 040000, 040000 }, E_DEFHMASK, 1, 1, NULL, "file : Save a snapshot." } , { "snload", com_snload, FALSE, TRUE, { 1, 040000, 040000, 040000 }, E_DEFHMASK, 2, 2, NULL, "file : Load a snapshot." } , { "circbyline", com_circbyline, FALSE, TRUE, { 1, 040000, 040000, 040000 }, E_DEFHMASK, 1, LOTS, NULL, "line : Enter a circuit line." } , { "alias", com_alias, FALSE, FALSE, { 02, 04, 04, 04 }, E_ADVANCED, 0, LOTS, NULL, "[[word] alias] : Define an alias." } , { "deftype", com_dftype, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 3, LOTS, NULL, "spec name pat ... : Redefine vector and plot types.\n" } , #ifdef TCL_MODULE { "bltplot", com_bltplot, FALSE, TRUE, { 041000, 041000, 041000, 041000 }, E_BEGINNING | E_HASPLOTS, 1, LOTS, arg_plot, "expr ... [vs expr] [xl xlo xhi] [yl ylo yhi] : Plot things." }, { "plot", com_bltplot, FALSE, TRUE, { 041000, 041000, 041000, 041000 }, E_BEGINNING | E_HASPLOTS, 1, LOTS, arg_plot, "expr ... [vs expr] [xl xlo xhi] [yl ylo yhi] : Plot things." }, #else { "plot", com_plot, FALSE, TRUE, { 041000, 041000, 041000, 041000 }, E_BEGINNING | E_HASPLOTS, 1, LOTS, arg_plot, "expr ... [vs expr] [xl xlo xhi] [yl ylo yhi] : Plot things." }, #endif { "display", com_display, FALSE, TRUE, { 040000, 040000, 040000, 040000 }, E_BEGINNING, 0, LOTS, arg_display, ": Display vector status." } , { "destroy", com_destroy, FALSE, FALSE, { 0400, 0400, 0400, 0400 }, E_DEFHMASK, 0, LOTS, NULL, "[plotname] ... : Throw away all the data in the plot." } , { "setplot", com_splot, FALSE, TRUE, { 0400, 0, 0, 0 }, E_DEFHMASK, 0, 1, NULL, "[plotname] : Change the current working plot." } , { "setcirc", com_scirc, TRUE, FALSE, { 04, 0, 0, 0 }, E_DEFHMASK, 0, 1, NULL, "[circuit name] : Change the current circuit." } , { "setscale", com_setscale, FALSE, FALSE, { 040000, 0, 0, 0 }, E_DEFHMASK, 0, 1, NULL, "[vecname] : Change default scale of current working plot." } , { "setseed", com_sseed, FALSE, FALSE, { 04, 0, 0, 0 }, E_DEFHMASK, 0, 1, NULL, "[seed value] : Reset the random number generator with new seed value." } , { "transpose", com_transpose, FALSE, FALSE, { 040000, 040000, 040000, 040000 }, E_DEFHMASK, 1, LOTS, NULL, "varname ... : Perform matrix transposition on multi-D vectors." } , { "xgraph", com_xgraph, FALSE, TRUE, { 1, 041000, 041000, 041000 }, E_DEFHMASK, 1, LOTS, NULL, "file plotargs : Send plot to Xgraph-11." } , { "gnuplot", com_gnuplot, FALSE, TRUE, { 1, 041000, 041000, 041000 }, E_DEFHMASK, 2, LOTS, NULL, "file plotargs : Send plot to gnuplot." } , { "wrdata", com_write_simple, FALSE, TRUE, { 1, 041000, 041000, 041000 }, E_DEFHMASK, 2, NLOTS, NULL, "file plotargs : Send plot data to file." } , { "wrs2p", com_write_sparam, FALSE, TRUE, { 1, 041000, 041000, 041000 }, E_DEFHMASK, 0, LOTS, NULL, "file : Send s-param data to file." } , { "hardcopy", com_hardcopy, FALSE, TRUE, { 1, 041000, 041000, 041000 }, E_DEFHMASK, 0, LOTS, NULL, "file plotargs : Produce hardcopy plots." } , { "asciiplot", com_asciiplot, FALSE, TRUE, { 041000, 041000, 041000, 041000 }, E_DEFHMASK, 1, LOTS, NULL, "plotargs : Produce ascii plots." } , { "write", com_write, FALSE, TRUE, { 1, 040000, 040000, 040000 }, E_DEFHMASK, 0, LOTS, NULL, "file expr ... : Write data to a file." } , { "compose", com_compose, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 2, LOTS, NULL, "var parm=val ... : Compose a vector." } , { "unlet", com_unlet, FALSE, FALSE, { 040000, 040000, 040000, 040000 }, E_DEFHMASK, 1, LOTS, NULL, "varname ... : Undefine vectors." } , { "print", com_print, FALSE, TRUE, { 040000, 040000, 040000, 040000 }, E_BEGINNING, 1, LOTS, arg_print, "[col] expr ... : Print vector values." } , #ifdef XSPICE { "eprint", EVTprint, FALSE, TRUE, { 040000, 040000, 040000, 040000 }, E_BEGINNING, 1, LOTS, NULL, "node node ... : Print event values." } , { "eprvcd", EVTprintvcd, FALSE, TRUE, { 040000, 040000, 040000, 040000 }, E_BEGINNING, 1, LOTS, NULL, "node node ... : Print event values into vcd file." }, { "edisplay", EVTdisplay, FALSE, TRUE, { 040000, 040000, 040000, 040000 }, E_BEGINNING, 0, 0, NULL, "node node ... : Print all event nodes." }, { "codemodel", com_codemodel, FALSE, TRUE, { 040000, 040000, 040000, 040000 }, E_BEGINNING, 1, LOTS, NULL, "library library ... : Loads the code model libraries." } , #endif #ifdef DEVLIB { "use", com_use, FALSE, TRUE, { 040000, 040000, 040000, 040000 }, E_BEGINNING, 1, LOTS, NULL, "library library ... : Loads the device libraries." } , #endif { "load", com_load, FALSE, TRUE, { 1, 1, 1, 1 }, E_BEGINNING | E_NOPLOTS, 1, LOTS, arg_load, "file ... : Load in data." } , { "cross", com_cross, FALSE, TRUE, { 040000, 0, 040000, 040000 }, E_DEFHMASK, 2, LOTS, NULL, "vecname number [ vector ... ] : Make a vector in a strange way." } , { "undefine", com_undefine, FALSE, FALSE, { 010000, 010000, 010000, 010000 }, E_DEFHMASK, 0, LOTS, NULL, "[func ...] : Undefine a user-definable function." } , { "op", com_op, TRUE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, "[.op line args] : Determine the operating point of the circuit." } , { "tf", com_tf, TRUE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, "[.tran line args] : Do a transient analysis." } , { "tran", com_tran, TRUE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, "[.tran line args] : Do a transient analysis." } , #ifdef WITH_PSS /* SP: Steady State Analysis */ { "pss", com_pss, TRUE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, "[.pss line args] : Do a periodic state analysis." } , /* SP */ #endif { "ac", com_ac, TRUE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, "[.ac line args] : Do an ac analysis." } , { "dc", com_dc, TRUE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, "[.dc line args] : Do a dc analysis." } , { "pz", com_pz, TRUE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, "[.pz line args] : Do a pole / zero analysis." } , { "sens", com_sens, TRUE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, "[.sens line args] : Do a sensitivity analysis." } , { "disto", com_disto, TRUE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, "[.disto line args] : Do an distortion analysis." } , { "noise", com_noise, TRUE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, "[.noise line args] : Do a noise analysis." } , { "listing", com_listing, TRUE, TRUE, { 0100, 0100, 0100, 0100 }, E_DEFHMASK, 0, LOTS, NULL, "[logical] [physical] [deck] : Print the current circuit." } , { "edit", com_edit, TRUE, TRUE, { 1, 0, 0, 0 }, E_DEFHMASK, 0, 1, NULL, "[filename] : Edit a spice deck and then load it in." } , { "mc_source", com_mc_source, TRUE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Re-source the actual circuit deck for MC simulation." }, { "dump", com_dump, TRUE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Print a dump of the current circuit." } , { "fft", com_fft, FALSE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 1, LOTS, NULL, "vector ... : Create a frequency domain plot with FFT." } , { "psd", com_psd, FALSE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 2, LOTS, NULL, "vector ... : Create a power spetral density plot with FFT." } , { "fourier", com_fourier, FALSE, TRUE, { 0, 040000, 040000, 040000 }, E_DEFHMASK, 1, LOTS, NULL, "fund_freq vector ... : Do a fourier analysis of some data." } , { "spec", com_spec, FALSE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 4, LOTS, NULL, "start_freq stop_freq step_freq vector ... : Create a frequency domain plot." } , { "meas", com_meas, FALSE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 1, LOTS, NULL, "various ... : User defined signal evaluation." } , { "show", com_show, TRUE, FALSE, { 040, 040, 040, 040 }, E_DEFHMASK, 0, LOTS, NULL, "devices ... : parameters ... : Print out device summary." } , { "showmod", com_showmod, TRUE, FALSE, { 040, 040, 040, 040 }, E_DEFHMASK, 0, LOTS, NULL, "models ... : parameters ... : Print out model summary." } , { "sysinfo", com_sysinfo, TRUE, FALSE, { 040, 040, 040, 040 }, E_DEFHMASK, 0, LOTS, NULL, "Print out system info summary." } , { "alter", com_alter, TRUE, FALSE, { 040, 040, 040, 040 }, E_DEFHMASK, 0, LOTS, NULL, "devspecs : parmname value : Alter device parameters." } , { "altermod", com_altermod, TRUE, FALSE, { 040, 040, 040, 040 }, E_DEFHMASK, 0, LOTS, NULL, "devspecs : parmname value : Alter model parameters." } , { "alterparam", com_alterparam, TRUE, FALSE, { 040, 040, 040, 040 }, E_DEFHMASK, 1, LOTS, NULL, "devspecs : parmname value : Alter .param parameters." }, { "resume", com_resume, TRUE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Continue after a stop." } , { "state", com_state, TRUE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, "(unimplemented) : Print the state of the circuit." }, { "stop", com_stop, TRUE, FALSE, { 04200, 04200, 04200, 04200 }, E_DEFHMASK, 0, LOTS, NULL, "[stop args] : Set a breakpoint." } , { "trace", com_trce, TRUE, FALSE, { 0200, 0200, 0200, 0200 }, E_DEFHMASK, 0, LOTS, NULL, "[all] [node ...] : Trace a node." } , { "save", com_save, TRUE, FALSE, { 0200, 0200, 0200, 0200 }, E_DEFHMASK, 0, LOTS, NULL, "[all] [node ...] : Save a spice output." } , { "iplot", com_iplot, TRUE, TRUE, { 0200, 0200, 0200, 0200 }, E_DEFHMASK, 0, LOTS, NULL, "[all] [node ...] : Incrementally plot a node." } , { "status", com_sttus, TRUE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Print the current breakpoints and traces." } , { "delete", com_delete, TRUE, FALSE, { 020, 020, 020, 020 }, E_DEFHMASK, 0, LOTS, NULL, "[all] [break number ...] : Delete breakpoints and traces." } , { "step", com_step, TRUE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 1, NULL, "[number] : Iterate number times, or one." } , { "remcirc", com_remcirc, TRUE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Remove current citcuit." } , { "reset", com_rset, TRUE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Terminate a simulation after a breakpoint (formerly 'end')." } , { "run", com_run, TRUE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 1, NULL, "[rawfile] : Run the simulation as specified in the input file." } , { "aspice", com_aspice, FALSE, FALSE, { 1, 1, 1, 1 }, E_DEFHMASK, 1, 2, NULL, "file [outfile] : Run a spice job asynchronously." } , { "jobs", com_jobs, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Report on asynchronous spice jobs." } , { "rspice", com_rspice, FALSE, FALSE, { 1, 1, 1, 1 }, E_DEFHMASK, 0, LOTS, NULL, "[input file] : Run a spice job remotely." } , { "bug", com_bug, FALSE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Report a %s bug." } , { "where", com_where, TRUE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Print last non-converging node or device" } , { "newhelp", com_ahelp, FALSE, TRUE, { 010, 010, 010, 010 }, E_DEFHMASK, 0, LOTS, NULL, "[command name] ... : help." }, { "tutorial", com_ghelp, FALSE, TRUE, { 023010, 023010, 023010, 023010 }, E_BEGINNING, 0, LOTS, NULL, "[subject] ... : Hierarchical documentation browser." } , { "help", com_ghelp, FALSE, TRUE, { 023010, 023010, 023010, 023010 }, E_DEFHMASK, 0, LOTS, NULL, "[subject] ... : Hierarchical documentation browser." } , { "oldhelp", com_help, FALSE, TRUE, { 010, 010, 010, 010 }, E_DEFHMASK, 0, LOTS, NULL, "[command name] ... : Print help." } , /* to remove circuits loaded */ { "removecirc", com_removecirc, TRUE, FALSE, { 04, 0, 0, 0 }, E_DEFHMASK, 0, 1, NULL, "[circuit name] : Remove the current circuit from memory." } , { "quit", com_quit, FALSE, TRUE, { 0, 0, 0, 0 }, E_BEGINNING, 0, 1, NULL, ": Quit %s." } , { "source", com_source, FALSE, TRUE, { 1, 1, 1, 1 }, E_DEFHMASK, 1, LOTS, NULL, "file : Source a %s file." } , { "shift", com_shift, FALSE, FALSE, { 020000, 0, 0, 0 }, E_DEFHMASK, 0, 2, NULL, "[var] [number] : Shift argv or the named list var to the left." } , { "unset", com_unset, FALSE, FALSE, { 020000, 020000, 020000, 020000 }, E_DEFHMASK, 1, LOTS, NULL, "varname ... : Unset a variable." } , { "unalias", com_unalias, FALSE, FALSE, { 02, 02, 02, 02 }, E_DEFHMASK, 1, LOTS, NULL, "word ... : Undefine an alias." } , { "history", com_history, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 2, NULL, "[-r] [number] : Print command history." } , { "echo", com_echo, FALSE, FALSE, { 1, 1, 1, 1 }, E_DEFHMASK, 0, NLOTS, NULL, "[stuff ...] : Print stuff." } , { "shell", com_shell, FALSE, TRUE, { 1, 1, 1, 1 }, E_DEFHMASK, 0, LOTS, NULL, "[args] : Fork a shell, or execute the command." } , { "rusage", com_rusage, FALSE, FALSE, { 02000, 02000, 02000, 02000 }, E_DEFHMASK, 0, LOTS, NULL, "[resource ...] : Print current resource usage." } , { "cd", com_chdir, FALSE, FALSE, { 1, 0, 0, 0 }, E_DEFHMASK, 0, 1, NULL, "[directory] : Change working directory." } , { "getcwd", com_getcwd, FALSE, FALSE, { 1, 0, 0, 0 }, E_DEFHMASK, 0, 1, NULL, "[directory] : Print current working directory." } , { "version", com_version, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, "[number] : Print the version number." } , { "diff", com_diff, FALSE, FALSE, { 0400, 0400, 040000, 040000 }, E_DEFHMASK, 0, LOTS, NULL, "plotname plotname [vec ...] : 'diff' two plots." } , { "rehash", com_rehash, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Rebuild the unix command database." } , { "while", NULL, FALSE, FALSE, { 040000, 040000, 040000, 040000 }, E_DEFHMASK, 1, LOTS, NULL, "condition : Execute while the condition is TRUE." } , { "repeat", NULL, FALSE, FALSE, { 0, 0, 0, 0}, E_DEFHMASK, 0, 1, NULL, "[number] : Repeat number times, or forever." } , { "dowhile", NULL, FALSE, FALSE, { 040000, 040000, 040000, 040000 }, E_DEFHMASK, 1, LOTS, NULL, "condition : Execute while the condition is TRUE." } , { "foreach", NULL, FALSE, FALSE, { 0, 040000, 040000, 040000 }, E_DEFHMASK, 2, LOTS, NULL, "variable value ... : Do once for each value." } , { "if", NULL, FALSE, FALSE, { 040000, 040000, 040000, 040000 }, E_DEFHMASK, 1, LOTS, NULL, "condition : Execute if the condition is TRUE." } , { "else", NULL, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Goes with if." } , { "end", NULL, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": End a block." } , { "break", NULL, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Break out of a block." } , { "continue", NULL, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Continue a loop." } , { "label", NULL, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 1, 1, NULL, "word : Create someplace to go to." } , { "goto", NULL, FALSE, FALSE, { 0100000, 0, 0, 0 }, E_DEFHMASK, 1, 1, NULL, "word : Go to a label." } , { "cdump", com_cdump, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Dump the current control structures." } , { "mdump", com_mdump, TRUE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 1, NULL, "outfile: Dump the current matrix." } , { "mrdump", com_rdump, TRUE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 1, NULL, "outfile: Dump the current RHS to file." } , { "settype", com_stype, FALSE, FALSE, { 0200000, 040000, 040000, 040000 }, E_DEFHMASK, 2, LOTS, NULL, "type vec ... : Change the type of a vector." } , { "strcmp", com_strcmp, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 3, 3, NULL, "varname s1 s2 : Set $varname to strcmp(s1, s2)." } , { "linearize", com_linearize, FALSE, FALSE, { 040000, 040000, 040000, 040000 }, E_DEFHMASK, 0, LOTS, NULL, " [ vec ... ] : Convert plot into one with linear scale." } , { "devhelp", com_devhelp, FALSE, FALSE, { 040000, 0400000, 040000, 040000 }, E_DEFHMASK, 0, 5 , NULL, "devspecs : show device information." }, { "inventory", com_inventory, TRUE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Print circuit inventory" }, #ifdef HAVE_TSEARCH { "check_ifparm", com_check_ifparm, TRUE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Check model ifparm descriptors (for developers)" }, #endif { NULL, NULL, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, NULL } }; /* Bool fields: spiceonly, major */ struct comm nutcp_coms[] = { { "let", com_let, FALSE, TRUE, { 040000, 040000, 040000, 040000 }, E_DEFHMASK, 0, LOTS, arg_let, "varname = expr : Assign vector variables." } , { "reshape", com_reshape, FALSE, TRUE, { 040000, 040000, 040000, 040000 }, E_DEFHMASK, 1, LOTS, arg_let, "vector ... [ shape ] : change the dimensions of a vector." } , { "define", com_define, FALSE, TRUE, { 010000, 040000, 040000, 040000 }, E_DEFHMASK, 0, LOTS, NULL, "[[func (args)] stuff] : Define a user-definable function." } , { "set", com_set, FALSE, TRUE, { 020000, 020000, 020000, 020000 }, E_DEFHMASK, 0, LOTS, arg_set, "[option] [option = value] ... : Set a variable." } , { "setcs", com_set, FALSE, TRUE, { 020000, 020000, 020000, 020000 }, E_DEFHMASK, 0, LOTS, arg_set, "[option] [option = value] ... : Set a variable, case remains as given." } , #ifdef EXPERIMENTAL_CODE /* PN support for altering options in interactive mode */ { "option", com_option, TRUE, TRUE, { 020000, 020000, 020000, 020000 }, E_DEFHMASK, 0, LOTS, arg_set, "[option] [option = value] ... : Set a simulator option." } , #endif { "alias", com_alias, FALSE, FALSE, { 02, 04, 04, 04 }, E_ADVANCED, 0, LOTS, NULL, "[[word] alias] : Define an alias." } , { "deftype", com_dftype, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 3, LOTS, NULL, "spec name pat ... : Redefine vector and plot types.\n" } , { "plot", com_plot, FALSE, TRUE, { 041000, 041000, 041000, 041000 }, E_BEGINNING | E_HASPLOTS, 1, LOTS, arg_plot, "expr ... [vs expr] [xl xlo xhi] [yl ylo yhi] : Plot things." }, { "display", com_display, FALSE, TRUE, { 040000, 040000, 040000, 040000 }, E_BEGINNING, 0, LOTS, arg_display, ": Display vector status." } , { "destroy", com_destroy, FALSE, FALSE, { 0400, 0400, 0400, 0400 }, E_DEFHMASK, 0, LOTS, NULL, "[plotname] ... : Throw away all the data in the plot." } , { "setplot", com_splot, FALSE, TRUE, { 0400, 0, 0, 0 }, E_DEFHMASK, 0, 1, NULL, "[plotname] : Change the current working plot." } , { "setcirc", com_scirc, TRUE, FALSE, { 04, 0, 0, 0 }, E_DEFHMASK, 0, 1, NULL, "[circuit name] : Change the current circuit." } , { "setscale", com_setscale, FALSE, FALSE, { 040000, 0, 0, 0 }, E_DEFHMASK, 0, 1, NULL, "[vecname] : Change default scale of current working plot." } , { "setseed", com_sseed, FALSE, FALSE, { 04, 0, 0, 0 }, E_DEFHMASK, 0, 1, NULL, "[seed value] : Reset the random number generator with new seed value." } , { "transpose", com_transpose, FALSE, FALSE, { 040000, 040000, 040000, 040000 }, E_DEFHMASK, 1, LOTS, NULL, "varname ... : Perform matrix transposition on multi-D vectors." } , { "xgraph", com_xgraph, FALSE, TRUE, { 1, 041000, 041000, 041000 }, E_DEFHMASK, 1, LOTS, NULL, "file plotargs : Send plot to Xgraph-11." } , { "gnuplot", com_gnuplot, FALSE, TRUE, { 1, 041000, 041000, 041000 }, E_DEFHMASK, 2, LOTS, NULL, "file plotargs : Send plot to gnuplot." } , { "wrdata", com_write_simple, FALSE, TRUE, { 1, 041000, 041000, 041000 }, E_DEFHMASK, 2, NLOTS, NULL, "file plotargs : Send plot data to file." } , { "wrs2p", com_write_sparam, FALSE, TRUE, { 1, 041000, 041000, 041000 }, E_DEFHMASK, 0, LOTS, NULL, "file : Send s-param data to file." } , { "hardcopy", com_hardcopy, FALSE, TRUE, { 1, 041000, 041000, 041000 }, E_DEFHMASK, 0, LOTS, NULL, "file plotargs : Produce hardcopy plots." } , { "asciiplot", com_asciiplot, FALSE, TRUE, { 041000, 041000, 041000, 041000 }, E_DEFHMASK, 1, LOTS, NULL, "plotargs : Produce ascii plots." } , { "write", com_write, FALSE, TRUE, { 1, 040000, 040000, 040000 }, E_DEFHMASK, 0, LOTS, NULL, "file expr ... : Write data to a file." } , { "compose", com_compose, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 2, LOTS, NULL, "var parm=val ... : Compose a vector." } , { "unlet", com_unlet, FALSE, FALSE, { 040000, 040000, 040000, 040000 }, E_DEFHMASK, 1, LOTS, NULL, "varname ... : Undefine vectors." } , { "print", com_print, FALSE, TRUE, { 040000, 040000, 040000, 040000 }, E_BEGINNING, 1, LOTS, arg_print, "[col] expr ... : Print vector values." } , { "load", com_load, FALSE, TRUE, { 1, 1, 1, 1 }, E_BEGINNING | E_NOPLOTS, 1, LOTS, arg_load, "file ... : Load in data." } , { "cross", com_cross, FALSE, TRUE, { 040000, 0, 040000, 040000 }, E_DEFHMASK, 2, LOTS, NULL, "vecname number [ vector ... ] : Make a vector in a strange way." } , { "undefine", com_undefine, FALSE, FALSE, { 010000, 010000, 010000, 010000 }, E_DEFHMASK, 0, LOTS, NULL, "[func ...] : Undefine a user-definable function." } , { "op", NULL, TRUE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, "[.op line args] : Determine the operating point of the circuit." } , { "tran", NULL, TRUE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, "[.tran line args] : Do a transient analysis." } , #ifdef WITH_PSS /* SP: Steady State Analysis */ { "pss", NULL, TRUE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, "[.pss line args] : Do a periodic steady state analysis." } , /* SP */ #endif { "ac", NULL, TRUE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, "[.ac line args] : Do an ac analysis." } , { "dc", NULL, TRUE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, "[.dc line args] : Do a dc analysis." } , { "pz", NULL, TRUE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, "[.pz line args] : Do a pole / zero analysis." } , { "sens", NULL, TRUE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, "[.ac line args] : Do a sensitivity analysis." } , { "disto", NULL, TRUE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, "[.disto line args] : Do an distortion analysis." } , { "noise", NULL, TRUE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, "[.noise line args] : Do a noise analysis." } , { "listing", NULL, TRUE, TRUE, { 0100, 0100, 0100, 0100 }, E_DEFHMASK, 0, LOTS, NULL, "[logical] [physical] [deck] : Print the current circuit." } , { "edit", NULL, TRUE, TRUE, { 1, 0, 0, 0 }, E_DEFHMASK, 0, 1, NULL, "[filename] : Edit a spice deck and then load it in." } , { "dump", NULL, TRUE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Print a dump of the current circuit." } , { "fft", com_fft, FALSE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 1, LOTS, NULL, "vector ... : Create a frequency domain plot with FFT." } , { "psd", com_psd, FALSE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 2, LOTS, NULL, "vector ... : Create a power spetral density plot with FFT." } , { "fourier", com_fourier, FALSE, TRUE, { 0, 040000, 040000, 040000 }, E_DEFHMASK, 1, LOTS, NULL, "fund_freq vector ... : Do a fourier analysis of some data." } , { "spec", com_spec, FALSE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 4, LOTS, NULL, "start_freq stop_freq step_freq vector ... : Create a frequency domain plot." } , { "show", NULL, TRUE, FALSE, { 040, 040, 040, 040 }, E_DEFHMASK, 0, LOTS, NULL, "devspecs ... : parmspecs ... : Print out device parameters." } , { "alter", NULL, TRUE, FALSE, { 040, 040, 040, 040 }, E_DEFHMASK, 3, LOTS, NULL, "devspecs : parmname value : Alter device parameters." } , { "altermod", NULL, TRUE, FALSE, { 040, 040, 040, 040 }, E_DEFHMASK, 3, LOTS, NULL, "devspecs : parmname value : Alter model parameters." } , { "resume", NULL, TRUE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Continue after a stop." } , { "state", NULL, TRUE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, "(unimplemented) : Print the state of the circuit." }, { "stop", NULL, TRUE, FALSE, { 04200, 04200, 04200, 04200 }, E_DEFHMASK, 0, LOTS, NULL, "[stop args] : Set a breakpoint." } , { "trace", NULL, TRUE, FALSE, { 0200, 0200, 0200, 0200 }, E_DEFHMASK, 0, LOTS, NULL, "[all] [node ...] : Trace a node." } , { "save", NULL, TRUE, FALSE, { 0200, 0200, 0200, 0200 }, E_DEFHMASK, 0, LOTS, NULL, "[all] [node ...] : Save a spice output." } , { "iplot", NULL, TRUE, TRUE, { 0200, 0200, 0200, 0200 }, E_DEFHMASK, 0, LOTS, NULL, "[all] [node ...] : Incrementally plot a node." } , { "status", NULL, TRUE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Print the current breakpoints and traces." } , { "delete", NULL, TRUE, FALSE, { 020, 020, 020, 020 }, E_DEFHMASK, 0, LOTS, NULL, "[all] [break number ...] : Delete breakpoints and traces." } , { "step", NULL, TRUE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 1, NULL, "[number] : Iterate number times, or one." } , { "reset", NULL, TRUE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Terminate a simulation after a breakpoint (formerly 'end')." } , { "run", NULL, TRUE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 1, NULL, "[rawfile] : Run the simulation as specified in the input file." } , { "bug", com_bug, FALSE, TRUE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Report a %s bug." } , { "newhelp", com_ahelp, FALSE, TRUE, { 010, 010, 010, 010 }, E_DEFHMASK, 0, LOTS, NULL, "[command name] ... : help." }, { "tutorial", com_ghelp, FALSE, TRUE, { 023010, 023010, 023010, 023010 }, E_BEGINNING, 0, LOTS, NULL, "[subject] ... : Hierarchical documentation browser." } , { "help", com_ghelp, FALSE, TRUE, { 023010, 023010, 023010, 023010 }, E_DEFHMASK, 0, LOTS, NULL, "[subject] ... : Hierarchical documentation browser." } , { "oldhelp", com_help, FALSE, TRUE, { 010, 010, 010, 010 }, E_DEFHMASK, 0, LOTS, NULL, "[command name] ... : Print help." } , { "quit", com_quit, FALSE, TRUE, { 0, 0, 0, 0 }, E_BEGINNING, 0, 1, NULL, ": Quit %s." } , /* to remove circuits loaded */ { "removecirc", com_removecirc, TRUE, FALSE, { 04, 0, 0, 0 }, E_DEFHMASK, 0, 1, NULL, "[circuit name] : Remove the current circuit from memory." } , { "source", nutcom_source, FALSE, TRUE, { 1, 1, 1, 1 }, E_DEFHMASK, 1, LOTS, NULL, "file : Source a %s file." } , { "shift", com_shift, FALSE, FALSE, { 020000, 0, 0, 0 }, E_DEFHMASK, 0, 2, NULL, "[var] [number] : Shift argv or the named list var to the left." } , { "unset", com_unset, FALSE, FALSE, { 020000, 020000, 020000, 020000 }, E_DEFHMASK, 1, LOTS, NULL, "varname ... : Unset a variable." } , { "unalias", com_unalias, FALSE, FALSE, { 02, 02, 02, 02 }, E_DEFHMASK, 1, LOTS, NULL, "word ... : Undefine an alias." } , { "history", com_history, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 2, NULL, "[-r] [number] : Print command history." } , { "echo", com_echo, FALSE, FALSE, { 1, 1, 1, 1 }, E_DEFHMASK, 0, LOTS, NULL, "[stuff ...] : Print stuff." } , { "shell", com_shell, FALSE, TRUE, { 1, 1, 1, 1 }, E_DEFHMASK, 0, LOTS, NULL, "[args] : Fork a shell, or execute the command." } , { "rusage", com_rusage, FALSE, FALSE, { 02000, 02000, 02000, 02000 }, E_DEFHMASK, 0, LOTS, NULL, "[resource ...] : Print current resource usage." } , { "cd", com_chdir, FALSE, FALSE, { 1, 0, 0, 0 }, E_DEFHMASK, 0, 1, NULL, "[directory] : Change working directory." } , { "getcwd", com_getcwd, FALSE, FALSE, { 1, 0, 0, 0 }, E_DEFHMASK, 0, 1, NULL, "[directory] : Print current working directory." } , { "version", com_version, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, "[number] : Print the version number." } , { "diff", com_diff, FALSE, FALSE, { 0400, 0400, 040000, 040000 }, E_DEFHMASK, 0, LOTS, NULL, "plotname plotname [vec ...] : 'diff' two plots." } , { "rehash", com_rehash, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Rebuild the unix command database." } , { "while", NULL, FALSE, FALSE, { 040000, 040000, 040000, 040000 }, E_DEFHMASK, 1, LOTS, NULL, "condition : Execute while the condition is TRUE." } , { "repeat", NULL, FALSE, FALSE, { 0, 0, 0, 0}, E_DEFHMASK, 0, 1, NULL, "[number] : Repeat number times, or forever." } , { "dowhile", NULL, FALSE, FALSE, { 040000, 040000, 040000, 040000 }, E_DEFHMASK, 1, LOTS, NULL, "condition : Execute while the condition is TRUE." } , { "foreach", NULL, FALSE, FALSE, { 0, 040000, 040000, 040000 }, E_DEFHMASK, 2, LOTS, NULL, "variable value ... : Do once for each value." } , { "if", NULL, FALSE, FALSE, { 040000, 040000, 040000, 040000 }, E_DEFHMASK, 1, LOTS, NULL, "condition : Execute if the condition is TRUE." } , { "else", NULL, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Goes with if." } , { "end", NULL, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": End a block." } , { "break", NULL, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Break out of a block." } , { "continue", NULL, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Continue a loop." } , { "label", NULL, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 1, 1, NULL, "word : Create someplace to go to." } , { "goto", NULL, FALSE, FALSE, { 0100000, 0, 0, 0 }, E_DEFHMASK, 1, 1, NULL, "word : Go to a label." } , { "cdump", com_cdump, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Dump the current control structures." } , { "settype", com_stype, FALSE, FALSE, { 0200000, 040000, 040000, 040000 }, E_DEFHMASK, 2, LOTS, NULL, "type vec ... : Change the type of a vector." } , { "strcmp", com_strcmp, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 3, 3, NULL, "varname s1 s2 : Set $varname to strcmp(s1, s2)." } , { "linearize", com_linearize, TRUE, FALSE, { 040000, 040000, 040000, 040000 }, E_DEFHMASK, 0, LOTS, NULL, " [ vec ... ] : Convert plot into one with linear scale." } , { "devhelp", NULL, FALSE, FALSE, { 040, 040, 040, 040 }, E_DEFHMASK, 0, 5 , NULL, " devspecs : show device information." }, { "inventory", NULL, TRUE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 0, NULL, ": Print circuit inventory" } , { NULL, NULL, FALSE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS, NULL, NULL } }; tmpk8ny_4pz/src/frontend/ftesopt.c0000644000175000017500000000330413546075722017416 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 2010 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ftedefs.h" #include "ngspice/wordlist.h" #include "variable.h" #include "ngspice/sperror.h" struct FTEparm { char *keyword; int id; char *description; }; static struct FTEparm FTEOPTtbl[] = { { "decklineno", FTEOPT_NLDECK, "Number of lines in the deck" }, { "netloadtime", FTEOPT_NLT, "Netlist loading time" }, { "netparsetime", FTEOPT_NPT, "Netlist parsing time" } }; static const int FTEOPTcount = sizeof(FTEOPTtbl)/sizeof(*FTEOPTtbl); static struct variable *getFTEstat(struct FTEparm *, FTESTATistics *, struct variable *); struct variable * ft_getstat(struct circ *ci, char *name) { int i; if (name) { for (i = 0; i < FTEOPTcount; i++) if (eq(name, FTEOPTtbl[i].keyword)) return getFTEstat(FTEOPTtbl + i, ci->FTEstats, NULL); return (NULL); } else { struct variable *vars = NULL; for (i = FTEOPTcount; --i >= 0;) vars = getFTEstat(FTEOPTtbl + i, ci->FTEstats, vars); return vars; } } static struct variable * getFTEstat(struct FTEparm *p, FTESTATistics *stat, struct variable *next) { switch (p->id) { case FTEOPT_NLDECK: return var_alloc_num(copy(p->description), stat->FTESTATdeckNumLines, next); case FTEOPT_NLT: return var_alloc_real(copy(p->description), stat->FTESTATnetLoadTime, next); case FTEOPT_NPT: return var_alloc_real(copy(p->description), stat->FTESTATnetParseTime, next); default: return NULL; } } tmpk8ny_4pz/src/frontend/com_xgraph.h0000644000175000017500000000014213546075722020063 0ustar carstencarsten#ifndef ngspice_COM_XGRAPH_H #define ngspice_COM_XGRAPH_H void com_xgraph(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/linear.h0000644000175000017500000000025213546075722017210 0ustar carstencarsten/************* * Header file for linear.c * 1999 E. Rouat ************/ #ifndef ngspice_LINEAR_H #define ngspice_LINEAR_H void com_linearize(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/breakp2.h0000644000175000017500000000047113546075722017267 0ustar carstencarsten/************* * Header file for breakp2.c * 1999 E. Rouat ************/ #ifndef ngspice_BREAKP2_H #define ngspice_BREAKP2_H void com_save(wordlist *wl); void com_save2(wordlist *wl, char *name); void settrace(wordlist *wl, int what, char *name); extern struct dbcomm *dbs; extern int debugnumber; #endif tmpk8ny_4pz/src/frontend/mw_coms.c0000644000175000017500000000666413546075722017412 0ustar carstencarsten/* Michael Widlok 2 Jun 1999 */ /* New commands for unloading circuits */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/ftedev.h" #include "ngspice/ftedebug.h" #include "ngspice/dvec.h" #include "circuits.h" #include "mw_coms.h" #include "variable.h" #include "runcoms.h" #include "spiceif.h" /* Clears ckt and removes current circ. form database */ void com_removecirc(wordlist *wl) { struct variable *v, *next; struct circ *ct; struct circ *caux = NULL; struct plot *p; struct plot *paux; int auxCir = 1, i, auxPlot; char* namecircuit; NG_IGNORE(wl); if (!ft_curckt) { fprintf(cp_err, "Error: there is no circuit loaded.\n"); return; } ct = ft_curckt; if_cktfree(ct->ci_ckt, ct->ci_symtab); for (v = ct->ci_vars; v; v = next) { next = v->va_next; tfree(v); } /* PN FTESTATS*/ tfree(ct->FTEstats); ct->ci_vars = NULL; caux = ft_circuits; namecircuit = copy(ft_curckt->ci_name); /* The circuit being removed is the first loaded and you have more circuits */ if (ft_curckt == ft_circuits && ft_circuits->ci_next) ft_circuits = ft_circuits->ci_next; /* The circuit being removed id the first loaded and there are no more circuits */ else if (ft_circuits->ci_next == NULL) ft_circuits = NULL; else { /* Run over the circuit list to find how many of them are * in front of the one to be removed */ for (; ft_curckt != caux && caux; caux = caux->ci_next) auxCir++; caux = ft_circuits; /* Remove the circuit and move pointer to the next one */ for (i = 1; i < auxCir-1; i++) caux = caux->ci_next; caux->ci_next = caux->ci_next->ci_next; /* ft_curckt = ft_circuits; */ } /* If the plot is the first one and there are no other plots */ if (!plot_list->pl_next && strcmp(plot_list->pl_title, namecircuit) == 0) plot_list = NULL; else if (plot_list && plot_list->pl_next) { p = plot_list; while (p) { auxPlot = 1; /* If the plot is in the first position */ if (plot_list->pl_next && strcmp(plot_list->pl_title, namecircuit) == 0) plot_list = plot_list->pl_next; /* otherwise we run over the list of plots */ else { for (; strcmp(p->pl_title, namecircuit) != 0 && p->pl_next; p = p->pl_next) auxPlot++; if (strcmp(p->pl_title, namecircuit) == 0) { paux = plot_list; for (i = 1; i < auxPlot-1; i++) paux = paux->pl_next; paux->pl_next = paux->pl_next->pl_next; } } p = p->pl_next; } } /* if (ft_curckt) { ft_curckt->ci_devices = cp_kwswitch(CT_DEVNAMES, ft_circuits->ci_devices); ft_curckt->ci_nodes = cp_kwswitch(CT_NODENAMES, ft_circuits->ci_nodes); } */ if (ft_circuits && caux->ci_next) { struct wordlist *wlist; wlist = wl_cons(tprintf("%d", auxCir), NULL); com_scirc(wlist); wl_free(wlist); } else if (ft_circuits) { struct wordlist *wlist; wlist = wl_cons(tprintf("%d", auxCir - 1), NULL); com_scirc(wlist); wl_free(wlist); } else ft_curckt = NULL; } tmpk8ny_4pz/src/frontend/com_history.h0000644000175000017500000000026413546075722020300 0ustar carstencarsten/************* * Header file for history.c * 1999 E. Rouat ************/ #ifndef ngspice_COM_HISTORY_H #define ngspice_COM_HISTORY_H void com_history(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/breakp.h0000644000175000017500000000052313546075722017203 0ustar carstencarsten/************* * Header file for breakp.c * 1999 E. Rouat ************/ #ifndef ngspice_BREAKP_H #define ngspice_BREAKP_H void com_stop(wordlist *wl); void com_trce(wordlist *wl); void com_iplot(wordlist *wl); void com_step(wordlist *wl); void com_sttus(wordlist *wl); void com_delete(wordlist *wl); void ft_trquery(void); #endif tmpk8ny_4pz/src/frontend/options.c0000644000175000017500000002724213546075722017434 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * The user-supplied routine to deal with variables. Most variables we * don't use often, so just call cp_getvar when they are needed. Spice * variables, though, and a few commonly used ones are dealt with here. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/fteinp.h" #include "circuits.h" #include "options.h" #include "variable.h" #include "control.h" #include "spiceif.h" static void setdb(char *str); bool ft_acctprint = FALSE, ft_noacctprint = FALSE, ft_listprint = FALSE; bool ft_nodesprint = FALSE, ft_optsprint = FALSE, ft_noinitprint = FALSE; bool ft_norefprint = FALSE; bool ft_ngdebug = FALSE, ft_stricterror = FALSE; /* The user-supplied routine to query the address of a variable, if its * name is given. This recognises the $&varname notation, and also * searches the address of plot and circuit environment variables. * tbfreed is set to 1, if the variable is malloced here and may safely * be freed, and is set to 0 if plot and circuit environment variables * are returned. */ struct variable * cp_enqvar(char *word, int *tbfreed) { struct dvec *d; struct variable *vv; if (*word == '&') { word++; *tbfreed = 1; d = vec_get(word); if (!d) return (NULL); if (d->v_link2) fprintf(cp_err, "Warning: only one vector may be accessed with the $& notation.\n"); if (d->v_length == 1) { double value = isreal(d) ? d->v_realdata[0] : realpart(d->v_compdata[0]); return var_alloc_real(copy(word), value, NULL); } else { struct variable *list = NULL; int i; for (i = d->v_length; --i >= 0;) { double value = isreal(d) ? d->v_realdata[i] : realpart(d->v_compdata[i]); list = var_alloc_real(NULL, value, list); } return var_alloc_vlist(copy(word), list, NULL); } } if (plot_cur) { *tbfreed = 0; for (vv = plot_cur->pl_env; vv; vv = vv->va_next) if (eq(vv->va_name, word)) return (vv); *tbfreed = 1; if (eq(word, "curplotname")) return var_alloc_string(copy(word), copy(plot_cur->pl_name), NULL); if (eq(word, "curplottitle")) return var_alloc_string(copy(word), copy(plot_cur->pl_title), NULL); if (eq(word, "curplotdate")) return var_alloc_string(copy(word), copy(plot_cur->pl_date), NULL); if (eq(word, "curplot")) return var_alloc_string(copy(word), copy(plot_cur->pl_typename), NULL); if (eq(word, "plots")) { struct variable *list = NULL; struct plot *pl; for (pl = plot_list; pl; pl = pl->pl_next) list = var_alloc_string(NULL, copy(pl->pl_typename), list); return var_alloc_vlist(copy(word), list, NULL); } } *tbfreed = 0; if (ft_curckt) for (vv = ft_curckt->ci_vars; vv; vv = vv->va_next) if (eq(vv->va_name, word)) return (vv); return (NULL); } /* Return $plots, $curplot, $curplottitle, $curplotname, $curplotdate */ struct variable * cp_usrvars(void) { struct variable *v, *tv; int tbfreed; v = NULL; if ((tv = cp_enqvar("plots", &tbfreed)) != NULL) { tv->va_next = v; v = tv; } if ((tv = cp_enqvar("curplot", &tbfreed)) != NULL) { tv->va_next = v; v = tv; } if ((tv = cp_enqvar("curplottitle", &tbfreed)) != NULL) { tv->va_next = v; v = tv; } if ((tv = cp_enqvar("curplotname", &tbfreed)) != NULL) { tv->va_next = v; v = tv; } if ((tv = cp_enqvar("curplotdate", &tbfreed)) != NULL) { tv->va_next = v; v = tv; } return v; } /* Extract the .option lines from the deck */ struct card * inp_getopts(struct card *deck) { struct card *last = NULL, *opts = NULL, *dd, *next = NULL; for (dd = deck->nextcard; dd; dd = next) { next = dd->nextcard; if (ciprefix(".opt", dd->line)) { inp_casefix(dd->line); if (last) last->nextcard = dd->nextcard; else deck->nextcard = dd->nextcard; dd->nextcard = opts; opts = dd; } else { last = dd; } } return (opts); } /* copy the given option line, * (presumably from a comfile, e.g. spinit or .spiceinit) * substitute '.options' for 'option' * then put it in front of the given 'options' list */ struct card * inp_getoptsc(char *line, struct card *options) { line = nexttok(line); /* skip option */ struct card *next = TMALLOC(struct card, 1); next->line = tprintf(".options %s", line); next->linenum = 0; next->error = NULL; next->actualLine = NULL; /* put new line in front */ next->nextcard = options; return next; } /* The one variable that we consider read-only so far is plots. The ones * that are 'dontrecord' are curplottitle, curplotname, and curplotdate. * Also things already in the plot env are 'dontrecord'. */ int cp_usrset(struct variable *var, bool isset) { void *vv; struct variable *tv; int iv; double dv; bool bv; if (eq(var->va_name, "debug")) { if (var->va_type == CP_BOOL) { cp_debug = ft_simdb = ft_parsedb = ft_evdb = ft_vecdb = ft_grdb = ft_gidb = ft_controldb = isset; } else if (var->va_type == CP_LIST) { for (tv = var->va_vlist; tv; tv = tv->va_next) if (var->va_type == CP_STRING) setdb(tv->va_string); else fprintf(cp_err, "Error: bad type for debug var\n"); } else if (var->va_type == CP_STRING) { setdb(var->va_string); } else { fprintf(cp_err, "Error: bad type for debug var\n"); } #ifndef FTEDEBUG fprintf(cp_err, "Warning: %s compiled without debug messages\n", cp_program); #endif } else if (eq(var->va_name, "program")) { cp_program = var->va_string; } else if (eq(var->va_name, "rawfile")) { ft_rawfile = copy(var->va_string); } else if (eq(var->va_name, "acct")) { ft_acctprint = isset; } else if (eq(var->va_name, "noacct")) { ft_noacctprint = isset; } else if (eq(var->va_name, "ngdebug")) { ft_ngdebug = isset; } else if (eq(var->va_name, "noinit")) { ft_noinitprint = isset; } else if (eq(var->va_name, "norefvalue")) { ft_norefprint = isset; } else if (eq(var->va_name, "list")) { ft_listprint = isset; } else if (eq(var->va_name, "nopage")) { ft_nopage = isset; } else if (eq(var->va_name, "nomod")) { ft_nomod = isset; } else if (eq(var->va_name, "node")) { ft_nodesprint = isset; } else if (eq(var->va_name, "opts")) { ft_optsprint = isset; } else if (eq(var->va_name, "strictnumparse")) { ft_strictnumparse = isset; } else if (eq(var->va_name, "strict_errorhandling")) { ft_stricterror = isset; } else if (eq(var->va_name, "rawfileprec")) { if ((var->va_type == CP_BOOL) && (isset == FALSE)) raw_prec = -1; else if (var->va_type == CP_REAL) raw_prec = (int)floor(var->va_real + 0.5); else if (var->va_type == CP_NUM) raw_prec = var->va_num; else fprintf(cp_err, "Bad 'rawfileprec' \"%s\"\n", var->va_name); } else if (eq(var->va_name, "numdgt")) { if ((var->va_type == CP_BOOL) && (isset == FALSE)) cp_numdgt = -1; else if (var->va_type == CP_REAL) cp_numdgt = (int)floor(var->va_real + 0.5); else if (var->va_type == CP_NUM) cp_numdgt = var->va_num; else fprintf(cp_err, "Excuse me??\n"); } else if (eq(var->va_name, "unixcom")) { cp_dounixcom = isset; if (isset) { char *s = getenv("PATH"); if (s) cp_rehash(s, TRUE); else fprintf(cp_err, "Warning: no PATH in environment.\n"); } } else if (eq(var->va_name, "units") && (var->va_type == CP_STRING)) { if (isset && ((*var->va_string == 'd') || (*var->va_string == 'D'))) cx_degrees = TRUE; else cx_degrees = FALSE; } else if (eq(var->va_name, "curplot")) { if (var->va_type == CP_STRING) plot_setcur(var->va_string); else fprintf(cp_err, "Error: plot name not a string\n"); return (US_DONTRECORD); } else if (eq(var->va_name, "curplotname")) { if (plot_cur && (var->va_type == CP_STRING)) { FREE(plot_cur->pl_name); plot_cur->pl_name = copy(var->va_string); } else fprintf(cp_err, "Error: can't set plot name\n"); return (US_DONTRECORD); } else if (eq(var->va_name, "curplottitle")) { if (plot_cur && (var->va_type == CP_STRING)) { FREE(plot_cur->pl_title); plot_cur->pl_title = copy(var->va_string); } else fprintf(cp_err, "Error: can't set plot title\n"); return (US_DONTRECORD); } else if (eq(var->va_name, "curplotdate")) { if (plot_cur && (var->va_type == CP_STRING)) { FREE(plot_cur->pl_date); plot_cur->pl_date = copy(var->va_string); } else fprintf(cp_err, "Error: can't set plot date\n"); return (US_DONTRECORD); } else if (eq(var->va_name, "plots")) { return (US_READONLY); } if (plot_cur) for (tv = plot_cur->pl_env; tv; tv = tv->va_next) if (eq(tv->va_name, var->va_name)) return (US_READONLY); /* if (ft_curckt) for (tv = ft_curckt->ci_vars; tv; tv = tv->va_next) if (eq(tv->va_name, var->va_name)) return (US_READONLY); */ if (ft_nutmeg) return (US_OK); /* Now call the interface option routine. */ switch (var->va_type) { case CP_BOOL: bv = (var->va_bool) ? TRUE : FALSE; vv = &bv; break; case CP_STRING: vv = var->va_string; break; case CP_NUM: iv = var->va_num; vv = &iv; break; case CP_REAL: dv = var->va_real; vv = &dv; break; case CP_LIST: /* if_option can't handle lists anyway. */ vv = NULL; break; default: fprintf(cp_err, "cp_usrset: Internal Error: Bad var type %d\n", var->va_type); return (0); } if (ft_curckt) { if (if_option(ft_curckt->ci_ckt, var->va_name, var->va_type, vv)) return US_SIMVAR; } else { if (if_option(NULL, var->va_name, var->va_type, vv)) return US_NOSIMVAR; } return (US_OK); } static void setdb(char *str) { if (eq(str, "siminterface")) ft_simdb = TRUE; else if (eq(str, "cshpar")) cp_debug = TRUE; else if (eq(str, "parser")) ft_parsedb = TRUE; else if (eq(str, "eval")) ft_evdb = TRUE; else if (eq(str, "vecdb")) ft_vecdb = TRUE; else if (eq(str, "graf")) ft_grdb = TRUE; else if (eq(str, "ginterface")) ft_gidb = TRUE; else if (eq(str, "control")) ft_controldb = TRUE; else if (eq(str, "async")) ft_asyncdb = TRUE; else fprintf(cp_err, "Warning: no such debug class %s\n", str); } tmpk8ny_4pz/src/frontend/postsc.c0000644000175000017500000004110413546075722017245 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jeffrey M. Hsu **********/ /* Postscript driver */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/graph.h" #include "ngspice/ftedbgra.h" #include "ngspice/ftedev.h" #include "ngspice/fteinput.h" #include "ngspice/fteext.h" #include "postsc.h" #include "variable.h" #include "plotting/graphdb.h" #define RAD_TO_DEG (180.0 / M_PI) #define DEVDEP(g) (*((PSdevdep *) (g)->devdep)) #define MAX_PS_LINES 1000 #define SOLID 0 #define DOTTED 1 #define gtype graph->grid.gridtype #define xoff dispdev->minx #define yoff dispdev->miny #define XOFF 48 /* printer left margin */ #define YOFF 48 /* printer bottom margin */ #define XTADJ 0 /* printer text adjustment x */ #define YTADJ 4 /* printer text adjustment y */ #define GRIDSIZE 420 /* printer gridsize divisible by 10, [7-2] */ #define GRIDSIZES 360 /* printer gridsize divisible by [10-8], [6-2] */ #define FONTSIZE 10 /* printer default fontsize */ #define FONTWIDTH 6 /* printer default fontwidth */ #define FONTHEIGHT 14 /* printer default fontheight */ typedef struct { int lastlinestyle, lastcolor; /* initial invalid value */ int lastx, lasty, linecount; } PSdevdep; static char *linestyle[] = { "[]", /* solid */ "[1 2]", /* dotted */ "[7 7]", /* longdashed */ "[3 3]", /* shortdashed */ "[7 2 2 2]", /* longdotdashed */ "[3 2 1 2]", /* shortdotdashed */ "[8 3 2 3]", "[14 2]", "[3 5 1 5]" /* dotdashed */ }; static FILE *plotfile; char psfont[128], psfontsize[32], psscale[32], pscolor[32]; static int fontsize = FONTSIZE; static int fontwidth = FONTWIDTH; static int fontheight = FONTHEIGHT; static int screenflag = 0; static int colorflag = 0; static int setbgcolor = 0; static int settxcolor = -1; static double scale; /* Used for fine tuning */ static int xtadj; /* text adjustment x */ static int ytadj; /* text adjustment y */ static int hcopygraphid; void PS_LinestyleColor(int linestyleid, int colorid); void PS_SelectColor(int colorid); void PS_Stroke(void); /* Set scale, color and size of the plot */ int PS_Init(void) { char pswidth[30], psheight[30]; if (!cp_getvar("hcopyscale", CP_STRING, psscale, sizeof(psscale))) { scale = 1.0; } else { sscanf(psscale, "%lf", &scale); if ((scale <= 0) || (scale > 10)) scale = 1.0; } dispdev->numlinestyles = NUMELEMS(linestyle); /* plot color */ if (!cp_getvar("hcopypscolor", CP_NUM, &setbgcolor, 0)) { /* if not set, set plot to b&w and use line styles */ colorflag = 0; dispdev->numcolors = 2; } else { /* get backgroung color and set plot to color */ colorflag = 1; dispdev->numcolors = 21; /* don't know what the maximum should be */ cp_getvar("hcopypstxcolor", CP_NUM, &settxcolor, 0); } /* plot size */ if (!cp_getvar("hcopywidth", CP_STRING, pswidth, sizeof( pswidth))) { dispdev->width = (int)(7.75 * 72.0 * scale); /* (8 1/2 - 3/4) * 72 */ } else { sscanf(pswidth, "%d", &(dispdev->width)); if (dispdev->width <= 100) dispdev->width = 100; if (dispdev->width >= 10000) dispdev->width = 10000; } if (!cp_getvar("hcopyheight", CP_STRING, psheight, sizeof(psheight))) { dispdev->height = dispdev->width; } else { sscanf(psheight, "%d", &(dispdev->height)); if (dispdev->height <= 100) dispdev->height = 100; if (dispdev->height >= 10000) dispdev->height = 10000; } /* The following side effects have to be considered * when the printer is called by com_hardcopy ! * gr_init: * viewportxoff = 8 * fontwidth * viewportyoff = 4 * fontheight * gr_resize_internal: * viewport.width = absolute.width - 2 * viewportxoff * viewport.height = absolute.height - 2 * viewportyoff */ if (!cp_getvar("hcopyfont", CP_STRING, psfont, sizeof(psfont))) strcpy(psfont, "Helvetica"); if (!cp_getvar("hcopyfontsize", CP_STRING, psfontsize, sizeof(psfontsize))) { fontsize = 10; fontwidth = 6; fontheight = 14; xtadj = (int)(XTADJ * scale); ytadj = (int)(YTADJ * scale); } else { sscanf(psfontsize, "%d", &fontsize); if ((fontsize < 10) || (fontsize > 14)) fontsize = 10; fontwidth = (int)(0.5 + 0.6 * fontsize); fontheight = (int)(2.5 + 1.2 * fontsize); xtadj = (int)(XTADJ * scale * fontsize / 10); ytadj = (int)(YTADJ * scale * fontsize / 10); } screenflag = 0; dispdev->minx = (int)(XOFF / scale); dispdev->miny = (int)(YOFF / scale); return (0); } /* Plot and fill bounding box */ int PS_NewViewport(GRAPH *graph) { int x1, x2, y1, y2; hcopygraphid = graph->graphid; /* devdep initially contains name of output file */ if ((plotfile = fopen((char*)graph->devdep, "w")) == NULL) { perror((char*)graph->devdep); graph->devdep = NULL; return (1); } if (graph->absolute.width) { /* hardcopying from the screen */ screenflag = 1; } /* reasonable values, used in gr_ for placement */ graph->fontwidth = (int)(fontwidth * scale); /* was 12, p.w.h. */ graph->fontheight = (int)(fontheight * scale); /* was 24, p.w.h. */ graph->absolute.width = dispdev->width; graph->absolute.height = dispdev->height; /* Also done in gr_init, if called . . . */ graph->viewportxoff = 8 * fontwidth; graph->viewportyoff = 4 * fontheight; xoff = (int)(scale * XOFF); yoff = (int)(scale * YOFF); x1 = (int)(0.75 * 72); y1 = x1; x2 = (int)(graph->absolute.width + .75 * 72); y2 = (int)(graph->absolute.height + .75 * 72); /* start file off with a % */ fprintf(plotfile, "%%!PS-Adobe-3.0 EPSF-3.0\n"); fprintf(plotfile, "%%%%Creator: nutmeg\n"); fprintf(plotfile, "%%%%BoundingBox: %d %d %d %d\n", x1, y1, x2, y2); /* Re-encoding to allow 'extended asccii' * thanks to http://apps.jcns.fz-juelich.de/doku/sc/ps-latin/ */ fprintf(plotfile, "/Re-encode { %% inFont outFont encoding | -\n"); fprintf(plotfile, " /MyEncoding exch def\n"); fprintf(plotfile, " exch findfont\n"); fprintf(plotfile, " dup length dict\n"); fprintf(plotfile, " begin\n"); fprintf(plotfile, " {def} forall\n"); fprintf(plotfile, " /Encoding MyEncoding def\n"); fprintf(plotfile, " currentdict\n"); fprintf(plotfile, " end\n"); fprintf(plotfile, " definefont\n"); fprintf(plotfile, "} def\n"); fprintf(plotfile, "/%s /%sLatin1 ISOLatin1Encoding Re-encode\n", psfont, psfont); fprintf(plotfile, "%g %g scale\n", 1.0 / scale, 1.0 / scale); if (colorflag == 1) { /* set the background to color given in spinit (or 0) */ PS_SelectColor(setbgcolor); fprintf(plotfile, "%s setrgbcolor\n", pscolor); fprintf(plotfile, "newpath\n"); fprintf(plotfile, "%d %d moveto %d %d lineto\n", x1, y1, x2, y1); fprintf(plotfile, "%d %d lineto %d %d lineto\n", x2, y2, x1, y2); fprintf(plotfile, "closepath fill\n"); } /* set up a reasonable font */ fprintf(plotfile, "/%sLatin1 findfont %d scalefont setfont\n\n", psfont, (int) (fontsize * scale)); graph->devdep = TMALLOC(PSdevdep, 1); DEVDEP(graph).lastlinestyle = -1; DEVDEP(graph).lastcolor = -1; DEVDEP(graph).lastx = -1; DEVDEP(graph).lasty = -1; DEVDEP(graph).linecount = 0; PS_SelectColor(0); graph->linestyle = -1; return 0; } int PS_Close(void) { /* in case PS_Close is called as part of an abort, w/o having reached PS_NewViewport */ if (plotfile) { PS_Stroke(); fprintf(plotfile, "showpage\n%%%%EOF\n"); fclose(plotfile); plotfile = NULL; } /* In case of hardcopy command destroy the hardcopy graph * and reset currentgraph to graphid 1, if possible */ if (!screenflag) { DestroyGraph(hcopygraphid); currentgraph = FindGraph(1); } return 0; } int PS_Clear(void) { /* do nothing */ return 0; } int PS_DrawLine(int x1, int y1, int x2, int y2) { /* note: this is not extendible to more than one graph => will have to give NewViewport a writeable graph XXX */ if (DEVDEP(currentgraph).linecount > MAX_PS_LINES || DEVDEP(currentgraph).linecount == 0 || x1 != DEVDEP(currentgraph).lastx || y1 != DEVDEP(currentgraph).lasty) { PS_Stroke(); fprintf(plotfile, "newpath\n"); fprintf(plotfile, "%d %d moveto\n", x1 + xoff, y1 + yoff); DEVDEP(currentgraph).linecount += 1; } if (x1 != x2 || y1 != y2) { fprintf(plotfile, "%d %d lineto\n", x2 + xoff, y2 + yoff); DEVDEP(currentgraph).linecount += 1; } DEVDEP(currentgraph).lastx = x2; DEVDEP(currentgraph).lasty = y2; return 0; } int PS_Arc(int x0, int y0, int r, double theta, double delta_theta) { double x1, y1; double angle1, angle2; PS_Stroke(); angle1 = (double) (RAD_TO_DEG * theta); angle2 = (double) (RAD_TO_DEG * (theta + delta_theta)); x1 = (double) x0 + r * cos(theta); y1 = (double) y0 + r * sin(theta); fprintf(plotfile, "%f %f moveto ", x1+(double)xoff, y1+(double)yoff); fprintf(plotfile, "%d %d %d %f %f arc\n", x0+xoff, y0+yoff, r, angle1, angle2); fprintf(plotfile, "stroke\n"); DEVDEP(currentgraph).linecount = 0; return 0; } int PS_Text(char *text, int x, int y, int angle) { int savedlstyle, savedcolor; /* set linestyle to solid or may get funny color text on some plotters */ savedlstyle = currentgraph->linestyle; savedcolor = currentgraph->currentcolor; PS_SetLinestyle(SOLID); /* set text color to black if background is not white */ if (setbgcolor > 0) PS_SetColor(0); else PS_SetColor(1); /* if color is given by set hcopytxpscolor=settxcolor, give it a try */ if (settxcolor >= 0) PS_SetColor(settxcolor); /* stroke the path if there's an open one */ PS_Stroke(); /* move to (x, y) */ fprintf(plotfile, "%d %d moveto\n", x + xoff + xtadj, y + yoff + ytadj); /* rotate the text counterclockwise by 'angle' degrees */ fprintf(plotfile, "%d rotate\n", angle); fprintf(plotfile, "(%s) show\n", text); /* rotate the text back clockwise by 'angle' degrees */ fprintf(plotfile, "-%d rotate\n", angle); DEVDEP(currentgraph).lastx = -1; DEVDEP(currentgraph).lasty = -1; /* restore old linestyle */ PS_SetColor(savedcolor); PS_SetLinestyle(savedlstyle); return 0; } /* PS_DefineColor */ /* PS_DefineLinestyle */ int PS_SetLinestyle(int linestyleid) { /* special case get it when PS_Text restores a -1 linestyle */ if (linestyleid == -1) { currentgraph->linestyle = -1; return 0; } if (linestyleid < 0 || linestyleid > dispdev->numlinestyles) { internalerror("bad linestyleid inside PS_SetLinestyle"); fprintf(cp_err, "linestyleid is: %d\n", linestyleid); return 0; } PS_LinestyleColor(linestyleid, currentgraph->currentcolor); return 0; } int PS_SetColor(int colorid) { PS_LinestyleColor(currentgraph->linestyle, colorid); return 0; } int PS_Update(void) { fflush(plotfile); return 0; } /**************** PRIVAT FUNCTIONS OF PS FRONTEND *****************************/ void PS_SelectColor(int colorid) /* should be replaced by PS_DefineColor */ { char colorN[30] = "", colorstring[30] = ""; char rgb[30], s_red[30] = "0x", s_green[30] = "0x", s_blue[30] = "0x"; int red = 0, green = 0, blue = 0, maxval = 1; int i; typedef struct { int red, green, blue;} COLOR; /* duplicated colors from src/frontend/plotting/x11.c in rgb-style */ const COLOR colors[] = {{ 0, 0, 0}, /*0: black */ {255, 255, 255}, /*1: white */ {255, 0, 0}, /*2: red */ { 0, 0, 255}, /*3: blue */ {255, 165, 0}, /*4: orange */ { 0, 255, 0}, /*5: green */ {255, 192, 203}, /*6: pink */ {165, 42, 42}, /*7: brown */ {240, 230, 140}, /*8: khaki */ {221, 160, 221}, /*9: plum */ {218, 112, 214}, /*10: orchid */ {238, 130, 238}, /*11: violet */ {176, 48, 96}, /*12: maroon */ { 64, 224, 208}, /*13: turqoise */ {160, 82, 45}, /*14: sienna */ {255, 127, 80}, /*15: coral */ { 0, 255, 255}, /*16: cyan */ {255, 0, 255}, /*17: magenta */ /*{255, 215, 0}, 18: gold */ { 96, 96, 96}, /*18: gray for smith grid */ /*{255, 255, 0}, 19: yello */ {150, 150, 150}, /*19: gray for smith grid */ {128, 128, 128}}; /*20: gray for normal grid */ /* Extract the rgbcolor, format is: "rgb://" */ sprintf(colorN, "color%d", colorid); if (cp_getvar(colorN, CP_STRING, colorstring, sizeof(colorstring))) { for (i = 0; colorstring[i]; i++) if (colorstring[i] == '/' || colorstring[i] == ':') colorstring[i] = ' '; sscanf(colorstring, "%s %s %s %s", rgb, &(s_red[2]), &(s_green[2]), &(s_blue[2])); if ((strlen(s_blue) == strlen(s_red) && strlen(s_green) == strlen(s_red)) && (strlen(s_blue) > 2) && (strlen(s_blue) < 7)) { sscanf(s_red, "%x", &red); sscanf(s_green, "%x", &green); sscanf(s_blue, "%x", &blue); maxval = (1 << (strlen(s_blue) - 2) * 4) - 1; sprintf(colorstring, "%1.3f %1.3f %1.3f", (double) red/maxval, (double) green/maxval, (double) blue/maxval); strcpy(pscolor, colorstring); } } if (colorid < 0 || colorid > 20) { internalerror("bad colorid inside PS_SelectColor"); } else if (maxval == 1) { /* colorN is not an rgbstring, use default color */ sprintf(colorstring, "%1.3f %1.3f %1.3f", colors[colorid].red/255.0, colors[colorid].green/255.0, colors[colorid].blue/255.0); strcpy(pscolor, colorstring); } } void PS_LinestyleColor(int linestyleid, int colorid) { /* we have some different linestyles and colors: - color and linestyle we got via function call - color and linestyle we used last time for drawing - generated color and linestyle we'll use for drawing this time */ /* these are the rules: DOTTED and colored ps -> color20 (used for grid) and SOLID color18 or 19 and black-white -> linestyle is DOTTED */ int gencolor = 0, genstyle = 0; if (colorflag == 1) { genstyle = SOLID; if (linestyleid == DOTTED) gencolor = 20; else gencolor = colorid; } else { /* colorflag == 0 -> mono*/ if ((colorid == 18) || (colorid == 19)) genstyle = DOTTED; else if (linestyleid == -1) genstyle = 0; else genstyle = linestyleid; } /* change color if nessecary */ if (colorflag == 1 && gencolor != DEVDEP(currentgraph).lastcolor) { /* if background is white, set all white line colors to black */ if ((setbgcolor == 1) && (gencolor == 1)) PS_SelectColor(0); else PS_SelectColor(gencolor); PS_Stroke(); fprintf(plotfile, "%s setrgbcolor\n", pscolor); DEVDEP(currentgraph).lastcolor = gencolor; } currentgraph->currentcolor = colorid; /* change linestyle if nessecary */ if (colorflag == 0 && genstyle != DEVDEP(currentgraph).lastlinestyle) { PS_Stroke(); fprintf(plotfile, "%s 0 setdash\n", linestyle[genstyle]); DEVDEP(currentgraph).lastlinestyle = genstyle; } currentgraph->linestyle = linestyleid; } void PS_Stroke(void) { /* strokes an open path */ if (DEVDEP(currentgraph).linecount > 0) { fprintf(plotfile, "stroke\n"); DEVDEP(currentgraph).linecount = 0; } } tmpk8ny_4pz/src/frontend/com_measure2.h0000644000175000017500000000043613546075722020323 0ustar carstencarsten#ifndef ngspice_COM_MEASURE2_H #define ngspice_COM_MEASURE2_H extern int measure_get_precision(void); extern int get_measure2(wordlist *wl, double *result, char *out_line, bool auto_check); extern int measure_extract_variables(char *line); void com_dotmeasure(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/com_shell.c0000644000175000017500000000273413546075722017705 0ustar carstencarsten/************* * com_shell.c ************/ #include "ngspice/ngspice.h" #include "ngspice/wordlist.h" #include "com_shell.h" #include "streams.h" #include "ngspice/cpextern.h" #ifdef _WIN32 #define SHELL "cmd /k" #else #define SHELL "/bin/csh" #endif /* Fork a shell. */ void com_shell(wordlist *wl) { char *com, *shell = NULL; shell = getenv("SHELL"); if (shell == NULL) { shell = SHELL; } cp_ccon(FALSE); #ifdef HAVE_VFORK_H /* XXX Needs to switch process groups. Also, worry about suspend */ /* Only bother for efficiency */ pid = vfork(); if (pid == 0) { fixdescriptors(); if (wl == NULL) { execl(shell, shell, 0); _exit(99); } else { com = wl_flatten(wl); execl("/bin/sh", "sh", "-c", com, 0); } } else { /* XXX Better have all these signals */ svint = signal(SIGINT, SIG_DFL); svquit = signal(SIGQUIT, SIG_DFL); svtstp = signal(SIGTSTP, SIG_DFL); /* XXX Sig on proc group */ do r = wait(NULL); while ((r != pid) && pid != -1); signal(SIGINT, (SIGNAL_FUNCTION) svint); signal(SIGQUIT, (SIGNAL_FUNCTION) svquit); signal(SIGTSTP, (SIGNAL_FUNCTION) svtstp); } #else /* Easier to forget about changing the io descriptors. */ if (wl) { com = wl_flatten(wl); system(com); tfree(com); } else { system(shell); } #endif } tmpk8ny_4pz/src/frontend/spec.h0000644000175000017500000000023613546075722016672 0ustar carstencarsten/************* * Header file for spec.c * 1999 E. Rouat ************/ #ifndef ngspice_SPEC_H #define ngspice_SPEC_H void com_spec(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/outitf.h0000644000175000017500000000453613546075722017261 0ustar carstencarsten/************* * Header file for outitf.c * 1999 E. Rouat ************/ #ifndef ngspice_OUTITF_H #define ngspice_OUTITF_H #include "ngspice/typedefs.h" typedef struct dataDesc { char *name; /* The name of the vector. */ int type; /* The type. */ GRIDTYPE gtype; /* default plot scale */ bool regular; /* Is this given to us? */ int outIndex; /* If regular then the index. */ char *specName; /* The device name if special. */ char *specParamName; /* The parameter name if special. */ int specIndex; /* For sensitivity, if special. */ int specType; GENinstance *specFast; int refIndex; /* The index of our ref vector. */ struct dvec *vec; } dataDesc; struct runDesc { void *analysis; CKTcircuit *circuit; char *name; char *type; int numData; int refIndex; dataDesc *data; bool writeOut; bool windowed; bool binary; struct plot *runPlot; FILE *fp; long pointPos; /* where to write pointCount */ int pointCount; int isComplex; int windowCount; int maxData; }; int OUTpBeginPlot(CKTcircuit *circuitPtr, JOB *analysisPtr, IFuid analName, IFuid refName, int refType, int numNames, IFuid *dataNames, int dataType, runDesc **plotPtr); int OUTwBeginPlot(CKTcircuit *circuitPtr, JOB *analysisPtr, IFuid analName, IFuid refName, int refType, int numNames, IFuid *dataNames, int dataType, runDesc **plotPtr); int OUTpData(runDesc *plotPtr, IFvalue *refValue, IFvalue *valuePtr); int OUTwReference(void *plotPtr, IFvalue *valuePtr, void **refPtr); int OUTwData(runDesc *plotPtr, int dataIndex, IFvalue *valuePtr, void *refPtr); int OUTwEnd(runDesc *plotPtr); int OUTendPlot(runDesc *plotPtr); int OUTbeginDomain(runDesc *plotPtr, IFuid refName, int refType, IFvalue *outerRefValue); int OUTendDomain(runDesc *plotPtr); int OUTattributes(runDesc *plotPtr, IFuid varName, int param, IFvalue *value); int OUTstopnow(void); void OUTerror(int flags, char *format, IFuid *names); #ifdef __GNUC__ void OUTerrorf(int, const char *fmt, ...) __attribute__ ((format (__printf__, 2, 3))); #else void OUTerrorf(int, const char *fmt, ...); #endif #endif tmpk8ny_4pz/src/frontend/com_ahelp.c0000644000175000017500000000365213546075722017667 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/bool.h" #include "ngspice/wordlist.h" #include "ngspice/fteext.h" #include "variable.h" #include "com_help.h" #include "com_ahelp.h" #include "hcomp.h" #include "ftehelp.h" #include "plotting/plotting.h" void com_ahelp(wordlist *wl) { int i, n; /* assert: number of commands must be less than 512 */ struct comm *cc[512]; unsigned int env = 0; struct comm *com; unsigned int level; char slevel[256]; if (wl) { com_help(wl); return; } out_init(); /* determine environment */ if (plot_list->pl_next) /* plots load */ env |= E_HASPLOTS; else env |= E_NOPLOTS; /* determine level */ if (cp_getvar("level", CP_STRING, slevel, sizeof(slevel))) { switch (*slevel) { case 'b': level = 1; break; case 'i': level = 2; break; case 'a': level = 4; break; default: level = 1; break; } } else { level = 1; } out_printf( "For a complete description read the Spice3 User's Manual manual.\n"); out_printf( "For a list of all commands type \"help all\", for a short\n"); out_printf( "description of \"command\", type \"help command\".\n"); /* sort the commands */ for (n = 0; cp_coms[n].co_func != NULL; n++) cc[n] = &cp_coms[n]; qsort(cc, (size_t) n, sizeof(struct comm *), hcomp); /* filter the commands */ for (i = 0; i < n; i++) { com = cc[i]; if ((com->co_env < (level << 13)) && (!(com->co_env & 4095) || (env & com->co_env))) { if ((com->co_spiceonly && ft_nutmeg) || (com->co_help == NULL)) continue; out_printf("%s ", com->co_comname); out_printf(com->co_help, cp_program); out_send("\n"); } } out_send("\n"); } tmpk8ny_4pz/src/frontend/com_shell.h0000644000175000017500000000023313546075722017702 0ustar carstencarsten/************* * Header file for com_shell.c ************/ #ifndef ngspice_COM_SHELL_H #define ngspice_COM_SHELL_H void com_shell(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/resource.h0000644000175000017500000000153713546075722017574 0ustar carstencarsten/************* * Header file for resources.c * 1999 E. Rouat ************/ #ifndef ngspice_RESOURCE_H #define ngspice_RESOURCE_H void init_rlimits(void); void init_time(void); void com_rusage(wordlist *wl); struct proc_mem { unsigned long long size; /* Total ngspice program size */ unsigned long long resident;/* Resident set size */ unsigned long long shared; /* Shared ngspice pages */ unsigned long long trs; /* Text (code) pages */ unsigned long long drs; /* Stack */ unsigned long long lrs; /* Library pages */ unsigned long long dt; /* Dirty pages (not used in kernel 2.6) */ }; struct sys_mem { unsigned long long size; /* Total memory size */ unsigned long long free; /* Free memory */ unsigned long long swap_t; /* Swap total */ unsigned long long swap_f; /* Swap free */ }; #endif tmpk8ny_4pz/src/frontend/commands.h0000644000175000017500000000020113546075722017531 0ustar carstencarsten#ifndef ngspice_COMMANDS_H #define ngspice_COMMANDS_H extern struct comm spcp_coms[]; extern struct comm nutcp_coms[]; #endif tmpk8ny_4pz/src/frontend/runcoms.c0000644000175000017500000002406513546075722017427 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group Modified: 2000 AlansFixes **********/ /* * Circuit simulation commands. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/ftedev.h" #include "ngspice/ftedebug.h" #include "ngspice/dvec.h" #include "numparam/numpaif.h" #include "circuits.h" #include "completion.h" #include "runcoms.h" #include "variable.h" #include "spiceif.h" #include "runcoms2.h" #ifdef XSPICE /* gtri - add - 12/12/90 - wbk - include ipc stuff */ #include "ngspice/ipctiein.h" /* gtri - end - 12/12/90 */ #endif static int dosim(char *what, wordlist *wl); extern struct INPmodel *modtab; extern struct dbcomm *dbs; /* Routines for the commands op, tran, ac, dc, listing, device, state, * resume, stop, trace, run, end. Op, tran, ac, and dc cause the action * to be performed immediately, and run causes whatever actions were * present in the deck to be carried out. End has the effect of stopping * any simulations in progress, as opposed to ending the input deck as * the .end line does. */ FILE *rawfileFp; bool rawfileBinary; /*To tell resume the rawfile name saj*/ char *last_used_rawfile = NULL; /*end saj */ /* * command "setcirc" * print a list of circuits loaded * command "setcirc " * switch to circuit number */ void com_scirc(wordlist *wl) { struct circ *p; int i, j = 0; if (ft_circuits == NULL) { fprintf(cp_err, "Error: there aren't any circuits loaded.\n"); return; } if (wl == NULL) { fprintf(cp_out, "List of circuits loaded:\n\n"); for (p = ft_circuits; p; p = p->ci_next) { if (ft_curckt == p) fprintf(cp_out, "Current"); fprintf(cp_out, "\t%d\t%s\n", ++j, p->ci_name); } return; } else { for (p = ft_circuits; p; p = p->ci_next) j++; p = NULL; if ((sscanf(wl->wl_word, " %d ", &i) != 1) || (i < 0) || (i > j)) ; else for (p = ft_circuits; --i > 0; p = p->ci_next) ; /* for (p = ft_circuits; p; p = p->ci_next) * if (ciprefix(wl->wl_word, p->ci_name)) * break; */ if (p == NULL) { fprintf(cp_err, "Warning: no such circuit \"%s\"\n", wl->wl_word); return; } fprintf(cp_out, "\t%s\n", p->ci_name); } if (ft_curckt) { /* Actually this can't be FALSE */ ft_curckt->ci_devices = cp_kwswitch(CT_DEVNAMES, p->ci_devices); ft_curckt->ci_nodes = cp_kwswitch(CT_NODENAMES, p->ci_nodes); } ft_curckt = p; /* get the model table for the current circuit, store it in the global variable modtab */ modtab = ft_curckt->ci_modtab; /* get the database for save, iplot, stop */ dbs = ft_curckt->ci_dbs; /* set the numparam dicos structure for use with measure */ nupa_set_dicoslist(ft_curckt->ci_dicos); } void com_pz(wordlist *wl) { dosim("pz", wl); } void com_op(wordlist *wl) { dosim("op", wl); } void com_dc(wordlist *wl) { dosim("dc", wl); } void com_ac(wordlist *wl) { dosim("ac", wl); } void com_tf(wordlist *wl) { dosim("tf", wl); } void com_tran(wordlist *wl) { dosim("tran", wl); } void com_sens(wordlist *wl) { dosim("sens", wl); } void com_disto(wordlist *wl) { dosim("disto", wl); } void com_noise(wordlist *wl) { dosim("noise", wl); } #ifdef WITH_PSS /* SP: Steady State Analysis */ void com_pss(wordlist *wl) { dosim("pss", wl); } /* SP */ #endif static int dosim( char *what, /* in: command (pz,op,dc,ac,tf,tran,sens,disto,noise,run) */ wordlist *wl /* in: command option */ /* global variables in: ft_curckt, ft_circuits, out: ft_setflag, ft_intrpt, rawfileFp, rawfileBinary, last_used_rawfile */ ) { wordlist *ww = NULL; bool dofile = FALSE; char buf[BSIZE_SP]; struct circ *ct; int err = 0; /* set file type to binary or to what is given by environmental variable SPICE_ASCIIRAWFILE in ivars.c */ bool ascii = AsciiRawFile; if (eq(what, "run") && wl) dofile = TRUE; /* add "what" to beginning of wordlist wl, except "what" equals "run" and a rawfile name is given (in wl) */ if (!dofile) { ww = wl_cons(copy(what), wl); } /* reset output file type according to variable given in spinit */ if (cp_getvar("filetype", CP_STRING, buf, sizeof(buf))) { if (eq(buf, "binary")) ascii = FALSE; else if (eq(buf, "ascii")) ascii = TRUE; else { fprintf(cp_err, "Warning: strange file type \"%s\" (using \"ascii\")\n", buf); ascii = TRUE; } } if (!ft_curckt) { fprintf(cp_err, "Error: there aren't any circuits loaded.\n"); return 1; } else if (ft_curckt->ci_ckt == NULL) { /* Set noparse? */ fprintf(cp_err, "Error: circuit not parsed.\n"); return 1; } for (ct = ft_circuits; ct; ct = ct->ci_next) if (ct->ci_inprogress && (ct != ft_curckt)) { fprintf(cp_err, "Warning: losing old state for circuit '%s'\n", ct->ci_name); ct->ci_inprogress = FALSE; } /* "resume" will never occur in ngspice */ if (ft_curckt->ci_inprogress && eq(what, "resume")) { ft_setflag = TRUE; /* don't allow abort upon interrupt during run */ ft_intrpt = FALSE; fprintf(cp_err, "Warning: resuming run in progress.\n"); com_resume(NULL); ft_setflag = FALSE; /* Now allow aborts again */ return 0; } /* From now on until the next prompt, an interrupt will just * set a flag and let spice finish up, then control will be * passed back to the user. */ ft_setflag = TRUE; /* Don't allow abort upon interrupt during run. */ ft_intrpt = FALSE; /* command "run" is given with rawfile name in wl */ if (dofile) { if (!*wl->wl_word) rawfileFp = stdout; #if defined(__MINGW32__) || defined(_MSC_VER) /* ask if binary or ASCII, open file with wb or w */ else if (ascii) { if ((rawfileFp = fopen(wl->wl_word, "w")) == NULL) { perror(wl->wl_word); ft_setflag = FALSE; return 1; } fprintf(cp_out, "ASCII raw file \"%s\"\n", wl->wl_word); } else if (!ascii) { if ((rawfileFp = fopen(wl->wl_word, "wb")) == NULL) { perror(wl->wl_word); ft_setflag = FALSE; return 1; } fprintf(cp_out, "binary raw file \"%s\"\n", wl->wl_word); } /*---------------------------------------------------------------------------*/ #else else if (!(rawfileFp = fopen(wl->wl_word, "w"))) { perror(wl->wl_word); ft_setflag = FALSE; return 1; } #endif /* __MINGW32__ */ rawfileBinary = !ascii; } else { rawfileFp = NULL; } /*save rawfile name */ if (last_used_rawfile) tfree(last_used_rawfile); if (rawfileFp) last_used_rawfile = copy(wl->wl_word); else last_used_rawfile = NULL; ft_curckt->ci_inprogress = TRUE; cp_vset("sim_status", CP_NUM, &err); /* "sens2" not used in ngspice */ if (eq(what, "sens2")) { if (if_sens_run(ft_curckt->ci_ckt, ww, ft_curckt->ci_symtab) == 1) { /* The circuit was interrupted somewhere. */ fprintf(cp_err, "%s simulation interrupted\n", what); #ifdef XSPICE /* gtri - add - 12/12/90 - wbk - record error and return errchk */ g_ipc.run_error = IPC_TRUE; if (g_ipc.enabled) ipc_send_errchk(); /* gtri - end - 12/12/90 */ #endif } else { ft_curckt->ci_inprogress = FALSE; } /* Do a run of the circuit */ } else { err = if_run(ft_curckt->ci_ckt, what, ww, ft_curckt->ci_symtab); if (err == 1) { /* The circuit was interrupted somewhere. */ fprintf(cp_err, "%s simulation interrupted\n", what); #ifdef XSPICE /* record error and return errchk */ g_ipc.run_error = IPC_TRUE; if (g_ipc.enabled) ipc_send_errchk(); /* gtri - end - 12/12/90 */ #endif err = 0; } else if (err == 2) { fprintf(cp_err, "%s simulation(s) aborted\n", what); ft_curckt->ci_inprogress = FALSE; err = 1; cp_vset("sim_status", CP_NUM, &err); } else { ft_curckt->ci_inprogress = FALSE; } } /* close the rawfile */ if (rawfileFp) { if (ftell(rawfileFp) == 0) { (void) fclose(rawfileFp); if (wl) (void) unlink(wl->wl_word); } else { (void) fclose(rawfileFp); } } ft_curckt->ci_runonce = TRUE; ft_setflag = FALSE; /* va: garbage collection: unlink first word (inserted here) and tfree it */ if (!dofile) { tfree(ww->wl_word); if (wl) wl->wl_prev = NULL; tfree(ww); } /* execute the .measure statements */ if (!err && ft_curckt->ci_last_an && ft_curckt->ci_meas) do_measure(ft_curckt->ci_last_an, FALSE); return err; } /* Usage is run [filename] */ void com_run(wordlist *wl) { /* ft_getsaves(); */ dosim("run", wl); } int ft_dorun(char *file) { static wordlist wl = { NULL, NULL, NULL }; wl.wl_word = file; if (file) return dosim("run", &wl); else return dosim("run", NULL); } /* ARGSUSED */ /* until the else clause gets put back */ bool ft_getOutReq(FILE **fpp, struct plot **plotp, bool *binp, char *name, char *title) { NG_IGNORE(title); NG_IGNORE(name); NG_IGNORE(plotp); if (rawfileFp) { *fpp = rawfileFp; *binp = rawfileBinary; return (TRUE); } else { return (FALSE); } } tmpk8ny_4pz/src/frontend/hcomp.c0000644000175000017500000000040113546075722017033 0ustar carstencarsten#include "ngspice/cpdefs.h" #include #include "hcomp.h" int hcomp(const void *a, const void *b) { struct comm **c1 = (struct comm **) a; struct comm **c2 = (struct comm **) b; return (strcmp((*c1)->co_comname, (*c2)->co_comname)); } tmpk8ny_4pz/src/frontend/rawfile.h0000644000175000017500000000021413546075722017365 0ustar carstencarsten/************* * Header file for rawfile.c * 1999 E. Rouat ************/ #ifndef ngspice_RAWFILE_H #define ngspice_RAWFILE_H #endif tmpk8ny_4pz/src/frontend/define.h0000644000175000017500000000031613546075722017171 0ustar carstencarsten/************* * Header file for define.c * 1999 E. Rouat ************/ #ifndef ngspice_DEFINE_H #define ngspice_DEFINE_H void com_define(wordlist *wlist); void com_undefine(wordlist *wlist); #endif tmpk8ny_4pz/src/frontend/arg.h0000644000175000017500000000105613546075722016512 0ustar carstencarsten/************* * Header file for arg.c * 1999 E. Rouat ************/ #ifndef ngspice_ARG_H #define ngspice_ARG_H char *prompt(FILE *fp); int countargs(wordlist *wl); wordlist *process(wordlist *wlist); void arg_print(wordlist *wl, struct comm *command); void arg_plot(wordlist *wl, struct comm *command); void arg_load(wordlist *wl, struct comm *command); void arg_let(wordlist *wl, struct comm *command); void arg_set(wordlist *wl, struct comm *command); void arg_display(wordlist *wl, struct comm *command); void outmenuprompt(char *string); #endif tmpk8ny_4pz/src/frontend/com_gnuplot.c0000644000175000017500000000237213546075722020264 0ustar carstencarsten#include #include "ngspice/ngspice.h" #include "ngspice/bool.h" #include "ngspice/wordlist.h" #include "plotting/plotit.h" #include "../misc/mktemp.h" #include "com_gnuplot.h" /* gnuplot file plotargs */ void com_gnuplot(wordlist *wl) { char *fname = NULL; bool tempf = FALSE; if (wl) { fname = wl->wl_word; wl = wl->wl_next; } if (!wl) return; if (cieq(fname, "temp") || cieq(fname, "tmp")) { fname = smktemp("gp"); /* Is this the correct name ? */ tempf = TRUE; } (void) plotit(wl, fname, "gnuplot"); /* Leave temp file sitting around so gnuplot can grab it from background. */ if (tempf) tfree(fname); } /* data printout to file plotargs */ void com_write_simple(wordlist *wl) { char *fname = NULL; bool tempf = FALSE; if (wl) { fname = wl->wl_word; wl = wl->wl_next; } if (!wl) return; if (cieq(fname, "temp") || cieq(fname, "tmp")) { fname = smktemp("gp"); /* Is this the correct name ? */ tempf = TRUE; } (void) plotit(wl, fname, "writesimple"); /* Leave temp file sitting around so gnuplot can grab it from background. */ if (tempf) tfree(fname); } tmpk8ny_4pz/src/frontend/hpgl.h0000644000175000017500000000076113546075722016675 0ustar carstencarsten/************* * Header file for hpgl.c ************/ #ifndef ngspice_HPGL_H #define ngspice_HPGL_H disp_fn_Init_t GL_Init; disp_fn_NewViewport_t GL_NewViewport; disp_fn_Close_t GL_Close; disp_fn_Clear_t GL_Clear; disp_fn_DrawLine_t GL_DrawLine; disp_fn_Arc_t GL_Arc; disp_fn_Text_t GL_Text; disp_fn_SetLinestyle_t GL_SetLinestyle; disp_fn_SetColor_t GL_SetColor; disp_fn_Update_t GL_Update; #endif tmpk8ny_4pz/src/frontend/evaluate.h0000644000175000017500000000245213546075722017550 0ustar carstencarsten/************* * Header file for evaluate.c * 1999 E. Rouat ************/ #ifndef ngspice_EVALUATE_H #define ngspice_EVALUATE_H #include "ngspice/dvec.h" #include "ngspice/pnode.h" struct dvec *op_plus(struct pnode *arg1, struct pnode *arg2); struct dvec *op_minus(struct pnode *arg1, struct pnode *arg2); struct dvec *op_comma(struct pnode *arg1, struct pnode *arg2); struct dvec *op_times(struct pnode *arg1, struct pnode *arg2); struct dvec *op_mod(struct pnode *arg1, struct pnode *arg2); struct dvec *op_divide(struct pnode *arg1, struct pnode *arg2); struct dvec *op_power(struct pnode *arg1, struct pnode *arg2); struct dvec *op_eq(struct pnode *arg1, struct pnode *arg2); struct dvec *op_gt(struct pnode *arg1, struct pnode *arg2); struct dvec *op_lt(struct pnode *arg1, struct pnode *arg2); struct dvec *op_ge(struct pnode *arg1, struct pnode *arg2); struct dvec *op_le(struct pnode *arg1, struct pnode *arg2); struct dvec *op_ne(struct pnode *arg1, struct pnode *arg2); struct dvec *op_and(struct pnode *arg1, struct pnode *arg2); struct dvec *op_or(struct pnode *arg1, struct pnode *arg2); struct dvec *op_range(struct pnode *arg1, struct pnode *arg2); struct dvec *op_ind(struct pnode *arg1, struct pnode *arg2); struct dvec *op_uminus(struct pnode *arg); struct dvec *op_not(struct pnode *arg); #endif tmpk8ny_4pz/src/frontend/nutinp.h0000644000175000017500000000025113546075722017252 0ustar carstencarsten/************* * Header file for nutinp.c * 1999 E. Rouat ************/ #ifndef ngspice_NUTINP_H #define ngspice_NUTINP_H void nutinp_source(char *file); #endif tmpk8ny_4pz/src/frontend/com_ahelp.h0000644000175000017500000000014013546075722017661 0ustar carstencarsten#ifndef ngspice_COM_AHELP_H #define ngspice_COM_AHELP_H void com_ahelp(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/circuits.h0000644000175000017500000000032513546075722017564 0ustar carstencarsten/************* * Header file for circuits.c * 1999 E. Rouat ************/ #ifndef ngspice_CIRCUITS_H #define ngspice_CIRCUITS_H struct subcirc { char *sc_name; /* Whatever... */ }; #endif tmpk8ny_4pz/src/frontend/miscvars.c0000644000175000017500000000424213546075722017563 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/fteinp.h" #include "miscvars.h" bool ft_nomod = FALSE; bool ft_nopage = FALSE; bool ft_parsedb = FALSE; bool ft_vecdb = FALSE; bool ft_simdb = FALSE; bool ft_evdb = FALSE; bool ft_grdb = FALSE; bool ft_gidb = FALSE; bool ft_controldb = FALSE; bool ft_asyncdb = FALSE; char *ft_setkwords[] = { "acct", "addcontrol", "altshow", "appendwrite", "askquit", "brief", "bypass", "chgtol", "color", "cpdebug", "cptime", "curplot", "curplotdate", "curplotname", "curplottitle", "debug", "defad", "defas", "defl", "defw", "device", "diff_abstol", "diff_reltol", "diff_vntol", "display", "dontplot", "dpolydegree", "editor", "filetype", "fourgridsize", "geometry", "geometry", "gmin", "gridsize", "hcopydev", "hcopydevtype", "hcopyfont", "hcopyfontsize", "hcopyscale", "height", "history", "ignoreeof", "interactive", "itl1", "itl2", "itl3", "itl4", "itl5", "list", "lprplot5", "lprps", "maxwins", "modelcard", "modelline", "moremode", "nfreqs", "noasciiplotvalue", "nobreak", "noclobber", "node", "noglob", "nogrid", "nomod", "nonomatch", "nopadding", "nopage", "noparse", "noprintscale", "nosort", "nosubckt", "notrnoise", "numdgt", "opts", "pivrel", "pivtol", "plots", "pointchars", "polydegree", "polysteps", "program", "prompt", "rawfile", "rawfileprec", "renumber", "rhost", "rprogram", "slowplot", "sourcepath", "spicepath", "subend", "subinvoke", "substart", "term", "ticmarks", "tnom", "trtol", "units", "unixcom", "width", "x11lineararcs", "xbrushheight", "xbrushwidth", "xfont", NULL }; tmpk8ny_4pz/src/frontend/com_dl.c0000644000175000017500000000140513546075722017167 0ustar carstencarsten#include "ngspice/ngspice.h" /* for wl */ #include "ngspice/ftedefs.h" #include "ngspice/devdefs.h" /* solve deps in dev.h*/ #include "../spicelib/devices/dev.h" /* for load library commands */ #include "com_dl.h" #ifdef XSPICE void com_codemodel(wordlist *wl) { wordlist *ww; for (ww = wl; ww; ww = ww->wl_next) if (load_opus(wl->wl_word)) { fprintf(cp_err, "Error: Library %s couldn't be loaded!\n", ww->wl_word); if (ft_stricterror) controlled_exit(EXIT_BAD); } } #endif #ifdef DEVLIB void com_use(wordlist *wl) { wordlist *ww; for (ww = wl; ww; ww = ww->wl_next) if (load_dev(wl->wl_word)) fprintf(cp_err, "Error: Library %s couldn't be loaded!\n", ww->wl_word); } #endif tmpk8ny_4pz/src/frontend/parse-bison-y.h0000644000175000017500000000103113546075722020422 0ustar carstencarstenstruct PPltype { const char *start, *stop; }; extern int PPlex(YYSTYPE *lvalp, struct PPltype *llocp, char **line); extern struct pnode *PP_mkunode(int op, struct pnode *arg); extern struct pnode *PP_mkfnode(const char *func, struct pnode *arg); extern struct pnode *PP_mknnode(double number); extern struct pnode *PP_mkbnode(int opnum, struct pnode *arg1, struct pnode *arg2); extern struct pnode *PP_mksnode(const char *string); #if defined (_MSC_VER) # define __func__ __FUNCTION__ /* __func__ is C99, but MSC can't */ #endif tmpk8ny_4pz/src/frontend/options.h0000644000175000017500000000021313546075722017426 0ustar carstencarsten/************* * Header file for options.c * 1999 E. Rouat ************/ #ifndef ngspice_OPTIONS_H #define ngspice_OPTIONS_H #endif tmpk8ny_4pz/src/frontend/runcoms.h0000644000175000017500000000116113546075722017424 0ustar carstencarsten/************* * Header file for runcoms.c * 1999 E. Rouat ************/ #ifndef ngspice_RUNCOMS_H #define ngspice_RUNCOMS_H void com_scirc(wordlist *wl); void com_pz(wordlist *wl); void com_op(wordlist *wl); void com_dc(wordlist *wl); void com_ac(wordlist *wl); void com_tf(wordlist *wl); void com_tran(wordlist *wl); /* SP: Stady State Analysis */ void com_pss(wordlist *wl); /* SP */ void com_sens(wordlist *wl); void com_disto(wordlist *wl); void com_noise(wordlist *wl); void com_run(wordlist *wl); extern FILE *rawfileFp; extern bool rawfileBinary; extern char *last_used_rawfile; extern bool resumption; #endif tmpk8ny_4pz/src/frontend/interp.c0000644000175000017500000000215413546075722017235 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Polynomial interpolation code. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "interp.h" void lincopy(struct dvec *ov, double *newscale, int newlen, struct dvec *oldscale) { struct dvec *v; double *nd; if (!isreal(ov)) { fprintf(cp_err, "Warning: %s is not real\n", ov->v_name); return; } if (ov->v_length < oldscale->v_length) { fprintf(cp_err, "Warning: %s is too short\n", ov->v_name); return; } v = dvec_alloc(copy(ov->v_name), ov->v_type, ov->v_flags | VF_PERMANENT, newlen, NULL); nd = v->v_realdata; if (!ft_interpolate(ov->v_realdata, nd, oldscale->v_realdata, oldscale->v_length, newscale, newlen, 1)) { fprintf(cp_err, "Error: can't interpolate %s\n", ov->v_name); return; } vec_new(v); } tmpk8ny_4pz/src/frontend/rawfile.c0000644000175000017500000006570013546075722017373 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1986 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Read and write the ascii and binary rawfile formats. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "dimens.h" #include "ngspice/dvec.h" #include "ngspice/sim.h" #include "ngspice/stringskip.h" #include "rawfile.h" #include "variable.h" #include "../misc/misc_time.h" static void fixdims(struct dvec *v, char *s); int raw_prec = -1; /* How many sigfigs to use, default 15 (max). */ #define DEFPREC 15 #ifdef HAS_WINGUI #undef fscanf /* redo I/O from WINMAIN.C here otherwise reading ASCII will not work */ #endif /* Write a raw file. We write everything in the plot pointed to. */ void raw_write(char *name, struct plot *pl, bool app, bool binary) { FILE *fp; bool realflag = TRUE, writedims; bool raw_padding; int length, numdims, dims[MAXDIMS]; int nvars, i, j, prec; struct dvec *v, *lv; wordlist *wl; struct variable *vv; double dd; char buf[BSIZE_SP]; char *branch; raw_padding = !cp_getvar("nopadding", CP_BOOL, NULL, 0); /* Why bother printing out an empty plot? */ if (!pl->pl_dvecs) { fprintf(cp_err, "Error: plot is empty, nothing written.\n"); return; } if (raw_prec != -1) prec = raw_prec; else prec = DEFPREC; #if defined(__MINGW32__) || defined(_MSC_VER) /* - Binary file binary write - hvogt 15.03.2000 ---------------------*/ if (binary) { if ((fp = fopen(name, app ? "ab" : "wb")) == NULL) { perror(name); return; } fprintf(cp_out, "binary raw file \"%s\"\n", name); } else { if ((fp = fopen(name, app ? "a" : "w")) == NULL) { perror(name); return; } fprintf(cp_out, "ASCII raw file \"%s\"\n", name); } /* --------------------------------------------------------------------*/ #else if (!(fp = fopen(name, app ? "a" : "w"))) { perror(name); return; } #endif numdims = nvars = length = 0; for (v = pl->pl_dvecs; v; v = v->v_next) { if (iscomplex(v)) realflag = FALSE; nvars++; /* Find the length and dimensions of the longest vector * in the plot. * Be paranoid and assume somewhere we may have * forgotten to set the dimensions of 1-D vectors. */ if (v->v_numdims <= 1) { v->v_numdims = 1; v->v_dims[0] = v->v_length; } if (v->v_length > length) { length = v->v_length; numdims = v->v_numdims; for (j = 0; j < numdims; j++) { dims[j] = v->v_dims[j]; } } } fprintf(fp, "Title: %s\n", pl->pl_title); fprintf(fp, "Date: %s\n", pl->pl_date); fprintf(fp, "Plotname: %s\n", pl->pl_name); fprintf(fp, "Flags: %s%s\n", realflag ? "real" : "complex", raw_padding ? "" : " unpadded"); fprintf(fp, "No. Variables: %d\n", nvars); fprintf(fp, "No. Points: %d\n", length); if (numdims > 1) { dimstring(dims, numdims, buf); fprintf(fp, "Dimensions: %s\n", buf); } for (wl = pl->pl_commands; wl; wl = wl->wl_next) fprintf(fp, "Command: %s\n", wl->wl_word); for (vv = pl->pl_env; vv; vv = vv->va_next) { wl = cp_varwl(vv); if (vv->va_type == CP_BOOL) { fprintf(fp, "Option: %s\n", vv->va_name); } else { fprintf(fp, "Option: %s = ", vv->va_name); if (vv->va_type == CP_LIST) fprintf(fp, "( "); wl_print(wl, fp); if (vv->va_type == CP_LIST) fprintf(fp, " )"); (void) putc('\n', fp); } } /* Before we write the stuff out, make sure that the scale is the first * in the list. */ for (lv = NULL, v = pl->pl_dvecs; v != pl->pl_scale; v = v->v_next) lv = v; if (lv) { lv->v_next = v->v_next; v->v_next = pl->pl_dvecs; pl->pl_dvecs = v; } fprintf(fp, "Variables:\n"); for (i = 0, v = pl->pl_dvecs; v; v = v->v_next) { if (v->v_type == SV_CURRENT) { branch = NULL; if ((branch = strstr(v->v_name, "#branch")) != NULL) { *branch = '\0'; } fprintf(fp, "\t%d\ti(%s)\t%s", i++, v->v_name, ft_typenames(v->v_type)); if (branch != NULL) *branch = '#'; } else if (v->v_type == SV_VOLTAGE) { fprintf(fp, "\t%d\t%s\t%s", i++, v->v_name, ft_typenames(v->v_type)); } else { fprintf(fp, "\t%d\t%s\t%s", i++, v->v_name, ft_typenames(v->v_type)); } if (v->v_flags & VF_MINGIVEN) fprintf(fp, " min=%e", v->v_minsignal); if (v->v_flags & VF_MAXGIVEN) fprintf(fp, " max=%e", v->v_maxsignal); if (v->v_defcolor) fprintf(fp, " color=%s", v->v_defcolor); if (v->v_gridtype) fprintf(fp, " grid=%d", v->v_gridtype); if (v->v_plottype) fprintf(fp, " plot=%d", v->v_plottype); /* Only write dims if they are different from default. */ writedims = FALSE; if (v->v_numdims != numdims) { writedims = TRUE; } else { for (j = 0; j < numdims; j++) if (dims[j] != v->v_dims[j]) writedims = TRUE; } if (writedims) { dimstring(v->v_dims, v->v_numdims, buf); fprintf(fp, " dims=%s", buf); } (void) putc('\n', fp); } if (binary) { fprintf(fp, "Binary:\n"); for (i = 0; i < length; i++) { for (v = pl->pl_dvecs; v; v = v->v_next) { /* Don't run off the end of this vector's data. */ if (i < v->v_length) { if (realflag) { dd = (isreal(v) ? v->v_realdata[i] : realpart(v->v_compdata[i])); (void) fwrite(&dd, sizeof(double), 1, fp); } else if (isreal(v)) { dd = v->v_realdata[i]; (void) fwrite(&dd, sizeof(double), 1, fp); dd = 0.0; (void) fwrite(&dd, sizeof(double), 1, fp); } else { dd = realpart(v->v_compdata[i]); (void) fwrite(&dd, sizeof(double), 1, fp); dd = imagpart(v->v_compdata[i]); (void) fwrite(&dd, sizeof(double), 1, fp); } } else if (raw_padding) { dd = 0.0; if (realflag) { (void) fwrite(&dd, sizeof(double), 1, fp); } else { (void) fwrite(&dd, sizeof(double), 1, fp); (void) fwrite(&dd, sizeof(double), 1, fp); } } } } } else { fprintf(fp, "Values:\n"); for (i = 0; i < length; i++) { fprintf(fp, " %d", i); for (v = pl->pl_dvecs; v; v = v->v_next) { if (i < v->v_length) { if (realflag) fprintf(fp, "\t%.*e\n", prec, isreal(v) ? v->v_realdata[i] : realpart(v->v_compdata[i])); else if (isreal(v)) fprintf(fp, "\t%.*e,0.0\n", prec, v->v_realdata[i]); else fprintf(fp, "\t%.*e,%.*e\n", prec, realpart(v->v_compdata[i]), prec, imagpart(v->v_compdata[i])); } else if (raw_padding) { if (realflag) fprintf(fp, "\t%.*e\n", prec, 0.0); else fprintf(fp, "\t%.*e,%.*e\n", prec, 0.0, prec, 0.0); } } (void) putc('\n', fp); } } (void) fclose(fp); } /* Read a raw file. Returns a list of plot structures. This routine should be * very flexible about what it expects to see in the rawfile. Really all we * require is that there be one variables and one values section per plot * and that the variables precede the values. */ #define SKIP(s) \ skip_ws(skip_non_ws(s)) #define NONL(s) \ do { \ r = (s); \ while (*r && (*r != '\n')) \ r++; \ *r = '\0'; \ } while(0) #define GETOUT() \ do { \ fprintf(cp_err, \ "Error: bad rawfile\n" \ " point %d, var %s\n" \ " load aborted\n", \ i, v->v_name); \ return (NULL); \ } while(0) struct plot * raw_read(char *name) { char *title = NULL; char *date = NULL; struct plot *plots = NULL, *curpl = NULL; char buf[BSIZE_SP], *s, *t, *r; int flags = 0, nvars = 0, npoints = 0, i, j; int ndimpoints, numdims = 0, dims[MAXDIMS]; bool raw_padded = TRUE, is_ascii = FALSE; double junk; struct dvec *v, *nv; struct variable *vv; wordlist *wl, *nwl; FILE *fp, *lastin, *lastout, *lasterr; if ((fp = fopen(name, "rb")) == NULL) { perror(name); return NULL; } /* Since we call cp_evloop() from here, we have to do this junk. */ lastin = cp_curin; lastout = cp_curout; lasterr = cp_curerr; cp_curin = cp_in; cp_curout = cp_out; cp_curerr = cp_err; cp_pushcontrol(); while (fgets(buf, BSIZE_SP, fp)) { r = strchr(buf, '\n'); if (r && r > buf && r[-1] == '\r') { r[-1] = '\n'; r[0] = '\0'; } /* Figure out what this line is... */ if (ciprefix("title:", buf)) { s = SKIP(buf); NONL(s); title = copy(s); } else if (ciprefix("date:", buf)) { s = SKIP(buf); NONL(s); date = copy(s); } else if (ciprefix("offset:", buf)) { fprintf(cp_err, "Warning: Offset: is not supported\n"); } else if (ciprefix("plotname:", buf)) { s = SKIP(buf); NONL(s); if (curpl) { /* reverse commands list */ for (wl = curpl->pl_commands, curpl->pl_commands = NULL; wl && wl->wl_next; wl = nwl) { nwl = wl->wl_next; wl->wl_next = curpl->pl_commands; curpl->pl_commands = wl; } } curpl = TMALLOC(struct plot, 1); curpl->pl_next = plots; plots = curpl; curpl->pl_name = copy(s); if (!date) date = copy(datestring()); curpl->pl_date = date; if (!title) title = copy("default title"); curpl->pl_title = title; date = NULL; title = NULL; flags = VF_PERMANENT; nvars = npoints = 0; } else if (ciprefix("flags:", buf)) { s = SKIP(buf); while ((t = gettok(&s)) != NULL) { if (cieq(t, "real")) flags |= VF_REAL; else if (cieq(t, "complex")) flags |= VF_COMPLEX; else if (cieq(t, "unpadded")) raw_padded = FALSE; else if (cieq(t, "padded")) raw_padded = TRUE; else fprintf(cp_err, "Warning: unknown flag %s\n", t); } } else if (ciprefix("no. variables:", buf)) { s = SKIP(buf); s = SKIP(s); nvars = scannum(s); } else if (ciprefix("no. points:", buf)) { s = SKIP(buf); s = SKIP(s); npoints = scannum(s); } else if (ciprefix("dimensions:", buf)) { if (npoints == 0) { fprintf(cp_err, "Error: misplaced Dimensions: line\n"); continue; } s = SKIP(buf); if (atodims(s, dims, &numdims)) { /* Something's wrong. */ fprintf(cp_err, "Warning: syntax error in dimensions, ignored.\n"); numdims = 0; continue; } if (numdims > MAXDIMS) { numdims = 0; continue; } /* Let's just make sure that the no. of points * and the dimensions are consistent. */ for (j = 0, ndimpoints = 1; j < numdims; j++) ndimpoints *= dims[j]; if (ndimpoints != npoints) { fprintf(cp_err, "Warning: dimensions inconsistent with no. of points, ignored.\n"); numdims = 0; } } else if (ciprefix("command:", buf)) { /* Note that we reverse these commands eventually... */ s = SKIP(buf); NONL(s); if (curpl) { curpl->pl_commands = wl_cons(copy(s), curpl->pl_commands); wl = curpl->pl_commands; } else { fprintf(cp_err, "Error: misplaced Command: line\n"); } /* Now execute the command if we can. */ (void) cp_evloop(s); } else if (ciprefix("option:", buf)) { s = SKIP(buf); NONL(s); if (curpl) { wl = cp_lexer(s); for (vv = curpl->pl_env; vv && vv->va_next; vv = vv->va_next) ; if (vv) vv->va_next = cp_setparse(wl); else curpl->pl_env = cp_setparse(wl); } else { fprintf(cp_err, "Error: misplaced Option: line\n"); } } else if (ciprefix("variables:", buf)) { /* We reverse the dvec list eventually... */ if (!curpl) { fprintf(cp_err, "Error: no plot name given\n"); plots = NULL; break; } s = SKIP(buf); if (!*s) { (void) fgets(buf, BSIZE_SP, fp); s = buf; } if (numdims == 0) { numdims = 1; dims[0] = npoints; } /* Now read all the variable lines in. */ for (i = 0; i < nvars; i++) { /* Allocate the data array. We would use * the desired vector length, but this would * be dangerous if the file is invalid. */ v = dvec_alloc(NULL, SV_NOTYPE, (short) flags, npoints, NULL); /* Length and dims might be changed by options. */ v->v_plot = curpl; if (!curpl->pl_scale) curpl->pl_scale = v; if (!i) { curpl->pl_scale = v; } else { (void) fgets(buf, BSIZE_SP, fp); s = buf; } s = nexttok(s); /* The strchr field. */ if ((t = gettok(&s)) != NULL) { v->v_name = t; } else { fprintf(cp_err, "Error: bad var line %s\n", buf); /* MW. v_name must be valid in the case that no. points = 0 */ v->v_name = copy("no vars\n"); } t = gettok(&s); /* The type name. */ if (t) v->v_type = ft_typnum(t); else fprintf(cp_err, "Error: bad var line %s\n", buf); /* Fix the name... */ if (isdigit_c(v->v_name[0]) && (r = ft_typabbrev(v ->v_type)) != NULL) { char *x = v->v_name; v->v_name = tprintf("%s(%s)", r, v->v_name); tfree(x); } /* Now come the strange options... */ while ((t = gettok(&s)) != NULL) { if (ciprefix("min=", t)) { if (sscanf(t + 4, "%lf", &v->v_minsignal) != 1) fprintf(cp_err, "Error: bad arg %s\n", t); v->v_flags |= VF_MINGIVEN; } else if (ciprefix("max=", t)) { if (sscanf(t + 4, "%lf", &v->v_maxsignal) != 1) fprintf(cp_err, "Error: bad arg %s\n", t); v->v_flags |= VF_MAXGIVEN; } else if (ciprefix("color=", t)) { v->v_defcolor = copy(t + 6); } else if (ciprefix("scale=", t)) { // This cast is bad, but... v->v_scale = (struct dvec *) copy(t + 6); } else if (ciprefix("grid=", t)) { v->v_gridtype = (GRIDTYPE) scannum(t + 5); } else if (ciprefix("plot=", t)) { v->v_plottype = (PLOTTYPE) scannum(t + 5); } else if (ciprefix("dims=", t)) { fixdims(v, t + 5); } else { fprintf(cp_err, "Warning: bad var param %s\n", t); } } /* Now we default any missing dimensions. */ if (!v->v_numdims) { v->v_numdims = numdims; for (j = 0; j < numdims; j++) v->v_dims[j] = dims[j]; } v->v_next = curpl->pl_dvecs; curpl->pl_dvecs = v; } } else if (ciprefix("values:", buf) || ciprefix("binary:", buf)) { if (!curpl) { fprintf(cp_err, "Error: no plot name given\n"); plots = NULL; break; } /* We'd better reverse the dvec list now... */ for (v = curpl->pl_dvecs, curpl->pl_dvecs = NULL; v; v = nv) { nv = v->v_next; v->v_next = curpl->pl_dvecs; curpl->pl_dvecs = v; } /* And fix the scale pointers. */ for (v = curpl->pl_dvecs; v; v = v->v_next) { if (v->v_scale) { for (nv = curpl->pl_dvecs; nv; nv = nv->v_next) // This cast is bad, but... if (cieq((char *) v->v_scale, nv->v_name)) { v->v_scale = nv; break; } if (!nv) { // This cast is bad, but... fprintf(cp_err, "Error: no such vector %s\n", (char *) v->v_scale); v->v_scale = NULL; } } } if ((*buf == 'v') || (*buf == 'V')) is_ascii = TRUE; else is_ascii = FALSE; for (i = 0; i < npoints; i++) { if (is_ascii) { /* It's an ASCII file. */ (void) fscanf(fp, " %d", &j); for (v = curpl->pl_dvecs; v; v = v->v_next) { if (i < v->v_length) { if (flags & VF_REAL) { if (fscanf(fp, " %lf", &v->v_realdata[i]) != 1) GETOUT(); } else { if (fscanf(fp, " %lf, %lf", &realpart(v->v_compdata[i]), &imagpart(v->v_compdata[i])) != 2) GETOUT(); } } else if (raw_padded) { if (flags & VF_REAL) { if (fscanf(fp, " %lf", &junk) != 1) GETOUT(); } else { if (fscanf(fp, " %lf, %lf", &junk, &junk) != 2) GETOUT(); } } } } else { /* It's a Binary file. */ for (v = curpl->pl_dvecs; v; v = v->v_next) { if (i < v->v_length) { if (flags & VF_REAL) { if (fread(&v->v_realdata[i], sizeof(double), 1, fp) != 1) GETOUT(); } else { if (fread(&v->v_compdata[i].cx_real, sizeof(double), 1, fp) != 1) GETOUT(); if (fread(&v->v_compdata[i].cx_imag, sizeof(double), 1, fp) != 1) GETOUT(); } } else if (raw_padded) { if (flags & VF_REAL) { if (fread(&junk, sizeof(double), 1, fp) != 1) GETOUT(); } else { if (fread(&junk, sizeof(double), 1, fp) != 1) GETOUT(); if (fread(&junk, sizeof(double), 1, fp) != 1) GETOUT(); } } } } } } else { s = buf; if (is_ascii) { s = SKIP(s); } if (*s) { fprintf(cp_err, "Error: strange line in rawfile:\n %s\n load aborted.\n", buf); return (NULL); } } } if (curpl) { /* reverse commands list */ for (wl = curpl->pl_commands, curpl->pl_commands = NULL; wl && wl->wl_next; wl = nwl) { nwl = wl->wl_next; wl->wl_next = curpl->pl_commands; curpl->pl_commands = wl; } } /* Fix everything up nicely again. */ cp_popcontrol(); cp_curin = lastin; cp_curout = lastout; cp_curerr = lasterr; (void) fclose(fp); return (plots); } /* s is a string of the form d1,d2,d3... */ static void fixdims(struct dvec *v, char *s) { int i, ndimpoints; if (atodims(s, v->v_dims, &(v->v_numdims))) { /* Something's wrong. */ fprintf(cp_err, "Warning: syntax error in dimensions, ignored.\n"); return; } else if (v->v_numdims > MAXDIMS) { return; } /* If the no. of points is less than the the total data length, * truncate the vector length. If it's greater in length, we * have serious problems with this vector. Try to fix * by setting to default dimensions when we return. */ for (i = 0, ndimpoints = 1; i < v->v_numdims; i++) ndimpoints *= v->v_dims[i]; if (v->v_length >= ndimpoints) dvec_trunc(v, ndimpoints); else v->v_numdims = 0; } /* Write a s-param file according to format Touchstone Vers. 1. */ void spar_write(char *name, struct plot *pl, double Rbaseval) { FILE *fp; int length; int i, prec; struct dvec *v, *lv; /* Why bother printing out an empty plot? */ if (!pl->pl_dvecs) { fprintf(cp_err, "Error writing s2p: plot is empty, nothing written.\n"); return; } if (raw_prec != -1) prec = raw_prec; else prec = 6; length = 0; for (v = pl->pl_dvecs; v; v = v->v_next) { /* All vectors have to have same length, only dimension 1 is allowed */ if (length == 0) length = v->v_length; if (length != v->v_length) { fprintf(stderr, "Error writing s2p: lentgth of vector %s differs from length of vector 'frequency'\n", v->v_name); return; } if (v->v_numdims != 1) { fprintf(stderr, "Error writing s2p: Dimension of vector %s greater than 1\n", v->v_name); return; } /* Find the length and dimensions of the longest vector * in the plot. * Be paranoid and assume somewhere we may have * forgotten to set the dimensions of 1-D vectors. if (v->v_numdims <= 1) { v->v_numdims = 1; v->v_dims[0] = v->v_length; } if (v->v_length > length) { length = v->v_length; numdims = v->v_numdims; for (j = 0; j < numdims; j++) { dims[j] = v->v_dims[j]; } }*/ } if ((fp = fopen(name, "w")) == NULL) { perror(name); return; } fprintf(fp, "!2-port S-parameter file\n"); fprintf(fp, "!Title: %s\n", pl->pl_title); fprintf(fp, "!Generated by ngspice at %s\n", pl->pl_date); fprintf(fp, "# Hz S RI R %g\n", Rbaseval); fprintf(fp, "!%-*.5s %-*.5s %-*.5s %-*.5s %-*.5s %-*.5s %-*.5s %-*.5s %-*.5s\n", prec+8, "freq", prec+8, "ReS11", prec+8, "ImS11", prec+8, "ReS21", prec+8, "ImS21", prec+8, "ReS12", prec+8, "ImS12", prec+8, "ReS22", prec+8, "ImS22"); /* Before we write the stuff out, make sure that the scale is the first * in the list. */ for (lv = NULL, v = pl->pl_dvecs; v != pl->pl_scale; v = v->v_next) lv = v; if (lv) { lv->v_next = v->v_next; v->v_next = pl->pl_dvecs; pl->pl_dvecs = v; } /* print frequency first as real value, the real and imag part of S11, S21, S12, S22 respectively */ for (i = 0; i < length; i++) { for (v = pl->pl_dvecs; v; v = v->v_next) { if (i < v->v_length) { if (cieq(v->v_name, "frequency")) fprintf(fp, "% .*e ", prec, realpart(v->v_compdata[i])); else fprintf(fp, "% .*e % .*e ", prec, realpart(v->v_compdata[i]), prec, imagpart(v->v_compdata[i])); } } (void) putc('\n', fp); } (void) fclose(fp); } tmpk8ny_4pz/src/frontend/init.c0000644000175000017500000000200713546075722016674 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* Initialize io, cp_chars[], variable "history". */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "init.h" #include "variable.h" char cp_chars[128]; /* used in fcn cp_lexer() from lexical.c */ static char *singlec = "<>;&"; void cp_init(void) /* called from ft_cpinit() in cpitf.c. Uses global variables: cp_chars[128] cp_maxhistlength (set to 10000 in com_history.c) cp_curin, cp_curout, cp_curerr (defined in streams.c) */ { char *s; memset(cp_chars, 0, 128); for (s = singlec; *s; s++) /* break word to right or left of characters <>;&*/ cp_chars[(int) *s] = (CPC_BRR | CPC_BRL); cp_vset("history", CP_NUM, &cp_maxhistlength); cp_curin = stdin; cp_curout = stdout; cp_curerr = stderr; /* io redirection in streams.c: cp_in set to cp_curin etc. */ cp_ioreset(); } tmpk8ny_4pz/src/frontend/control.c0000644000175000017500000007300313546075722017415 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* The front-end command loop. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "control.h" #include "com_cdump.h" #include "variable.h" #include "ngspice/fteext.h" /* Return values from doblock(). I am assuming that nobody will use * these characters in a string. */ #define NORMAL '\001' #define BROKEN '\002' #define CONTINUED '\003' #define NORMAL_STR "\001" #define BROKEN_STR "\002" #define CONTINUED_STR "\003" static void cp_free_control(void); /* needed by resetcontrol */ /* Are we waiting for a command? This lets signal handling be * more clever. */ bool cp_cwait = FALSE; char *cp_csep = ";"; bool cp_dounixcom = FALSE; /* We have to keep the control structures in a stack, so that when we * do a 'source', we can push a fresh set onto the top... Actually * there have to be two stacks -- one for the pointer to the list of * control structs, and one for the 'current command' pointer... */ struct control *control[CONTROLSTACKSIZE]; struct control *cend[CONTROLSTACKSIZE]; int stackp = 0; /* If there is an argument, give this to cshpar to use instead of * stdin. In a few places, we call cp_evloop again if it returns 1 and * exit (or close a file) if it returns 0... Because of the way * sources are done, we can't allow the control structures to get * blown away every time we return -- probably every time we type * source at the keyboard and every time a source returns to keyboard * input is ok though -- use ft_controlreset. */ /* Notes by CDHW: * This routine leaked like a sieve because each getcommand() created a * wordlist that was never freed because it might have been added into * the control structure. I've tackled this by making sure that everything * put into the cend[stackp] is a copy. This means that wlist can be * destroyed safely */ /* no redirection after the following commands (we may need more to add here!) */ static char *noredirect[] = { "stop", "define", NULL }; static struct control * findlabel(char *s, struct control *ct) { while (ct) { if ((ct->co_type == CO_LABEL) && eq(s, ct->co_text->wl_word)) break; ct = ct->co_next; } return (ct); } /* This is also in cshpar.c ... */ static void pwlist(wordlist *wlist, char *name) { wordlist *wl; if (!cp_debug) return; fprintf(cp_err, "%s : [ ", name); for (wl = wlist; wl; wl = wl->wl_next) fprintf(cp_err, "%s ", wl->wl_word); fprintf(cp_err, "]\n"); } /* CDHW defined functions */ static void pwlist_echo(wordlist *wlist, char *name) /*CDHW used to perform function of set echo */ { wordlist *wl; if ((!cp_echo)||cp_debug) /* cpdebug prints the same info */ return; fprintf(cp_err, "%s ", name); for (wl = wlist; wl; wl = wl->wl_next) fprintf(cp_err, "%s ", wl->wl_word); fprintf(cp_err, "\n"); } /*CDHW Remove control structure and free the memory its hogging CDHW*/ static void ctl_free(struct control *ctrl) { if (!ctrl) { return; } wl_free(ctrl->co_cond); ctrl->co_cond = NULL; tfree(ctrl->co_foreachvar); ctrl->co_foreachvar = NULL; wl_free(ctrl->co_text); ctrl->co_text = NULL; ctl_free(ctrl->co_children); ctrl->co_children = NULL; ctl_free(ctrl->co_elseblock); ctrl->co_elseblock = NULL; ctl_free(ctrl->co_next); ctrl->co_next = NULL; txfree(ctrl); } /* Note that we only do io redirection when we get to here - we also * postpone some other things until now. */ static void docommand(wordlist *wlist) { wordlist *rwlist; if (cp_debug) { printf("docommand "); wl_print(wlist, stdout); putc('\n', stdout); } /* Do all the things that used to be done by cshpar when the line * was read... */ wlist = cp_variablesubst(wlist); pwlist(wlist, "After variable substitution"); wlist = cp_bquote(wlist); pwlist(wlist, "After backquote substitution"); wlist = cp_doglob(wlist); pwlist(wlist, "After globbing"); pwlist_echo(wlist, "Becomes >"); if (!wlist || !wlist->wl_word) /*CDHW need to free wlist in second case? CDHW*/ return; /* Now loop through all of the commands given. */ rwlist = wlist; while (wlist) { char *s; int i; struct comm *command; wordlist *nextc, *ee; nextc = wl_find(cp_csep, wlist); if (nextc == wlist) { /* skip leading `;' */ wlist = wlist->wl_next; continue; } /* Temporarily hide the rest of the command... */ ee = wlist->wl_prev; wl_chop(nextc); wl_chop(wlist); /* And do the redirection. */ cp_ioreset(); for (i = 0; noredirect[i]; i++) if (eq(wlist->wl_word, noredirect[i])) break; if (!noredirect[i]) if ((wlist = cp_redirect(wlist)) == NULL) { cp_ioreset(); return; } /* Get rid of all the 8th bits now... */ cp_striplist(wlist); s = wlist->wl_word; /* Look for the command in the command list. */ for (i = 0; cp_coms[i].co_comname; i++) if (strcasecmp(cp_coms[i].co_comname, s) == 0) break; command = &cp_coms[i]; /* Now give the user-supplied command routine a try... */ if (!command->co_func && cp_oddcomm(s, wlist->wl_next)) goto out; /* If it's not there, try it as a unix command. */ if (!command->co_comname) { if (cp_dounixcom && cp_unixcom(wlist)) goto out; fprintf(cp_err, "%s: no such command available in %s\n", s, cp_program); goto out; /* If it hasn't been implemented */ } else if (!command->co_func) { fprintf(cp_err, "%s: command is not implemented\n", s); goto out; /* If it's there but spiceonly, and this is nutmeg, error. */ } else if (ft_nutmeg && command->co_spiceonly) { fprintf(cp_err, "%s: command available only in spice\n", s); goto out; } /* The command was a valid spice/nutmeg command. */ { int nargs = wl_length(wlist->wl_next); if (nargs < command->co_minargs) { if (command->co_argfn) { command->co_argfn (wlist->wl_next, command); } else { fprintf(cp_err, "%s: too few args.\n", s); } } else if (nargs > command->co_maxargs) { fprintf(cp_err, "%s: too many args.\n", s); } else { command->co_func (wlist->wl_next); } } out: wl_append(ee, wlist); wl_append(wlist, nextc); if (!ee) rwlist = wlist; wlist = nextc; } wl_free(rwlist); /* Do periodic sorts of things... */ cp_periodic(); cp_ioreset(); } /* Execute a block. There can be a number of return values from this routine. * NORMAL indicates a normal termination * BROKEN indicates a break -- if the caller is a breakable loop, * terminate it, otherwise pass the break upwards * CONTINUED indicates a continue -- if the caller is a continuable loop, * continue, else pass the continue upwards * Any other return code is considered a pointer to a string which is * a label somewhere -- if this label is present in the block, * goto it, otherwise pass it up. Note that this prevents jumping * into a loop, which is good. * * Note that here is where we expand variables, ``, and globs for * controls. * * The 'num' argument is used by break n and continue n. */ static char * doblock(struct control *bl, int *num) { struct control *ch, *cn = NULL; wordlist *wl, *wltmp; char *i, *wlword; int nn; nn = *num + 1; /*CDHW this is a guess... CDHW*/ switch (bl->co_type) { case CO_WHILE: if (!bl->co_children) { fprintf(cp_err, "Warning: Executing empty 'while' block.\n"); fprintf(cp_err, " (Use a label statement as a no-op to suppress this warning.)\n"); } while (bl->co_cond && cp_istrue(bl->co_cond)) { if (!bl->co_children) cp_periodic(); /*CDHW*/ for (ch = bl->co_children; ch; ch = cn) { cn = ch->co_next; i = doblock(ch, &nn); switch (*i) { case NORMAL: break; case BROKEN: /* Break. */ if (nn < 2) { return (NORMAL_STR); } else { *num = nn - 1; return (BROKEN_STR); } case CONTINUED: /* Continue. */ if (nn < 2) { cn = NULL; break; } else { *num = nn - 1; return (CONTINUED_STR); } default: cn = findlabel(i, bl->co_children); if (!cn) return (i); } } } break; case CO_DOWHILE: do { for (ch = bl->co_children; ch; ch = cn) { cn = ch->co_next; i = doblock(ch, &nn); switch (*i) { case NORMAL: break; case BROKEN: /* Break. */ if (nn < 2) { return (NORMAL_STR); } else { *num = nn - 1; return (BROKEN_STR); } case CONTINUED: /* Continue. */ if (nn < 2) { cn = NULL; break; } else { *num = nn - 1; return (CONTINUED_STR); } default: cn = findlabel(i, bl->co_children); if (!cn) return (i); } } } while (bl->co_cond && cp_istrue(bl->co_cond)); break; case CO_REPEAT: if (!bl->co_children) { fprintf(cp_err, "Warning: Executing empty 'repeat' block.\n"); fprintf(cp_err, " (Use a label statement as a no-op to suppress this warning.)\n"); } if (!bl->co_timestodo) bl->co_timestodo = bl->co_numtimes; /*bl->co_numtimes: total repeat count bl->co_numtimes = -1: repeat forever bl->co_timestodo: remaining repeats*/ while ((bl->co_timestodo > 0) || (bl->co_timestodo == -1)) { if (!bl->co_children) cp_periodic(); /*CDHW*/ if (bl->co_timestodo != -1) bl->co_timestodo--; /* loop through all stements inside rpeat ... end */ for (ch = bl->co_children; ch; ch = cn) { cn = ch->co_next; i = doblock(ch, &nn); switch (*i) { case NORMAL: break; case BROKEN: /* Break. */ /* before leaving repeat loop set remaining timestodo to 0 */ bl->co_timestodo = 0; if (nn < 2) { return (NORMAL_STR); } else { *num = nn - 1; return (BROKEN_STR); } case CONTINUED: /* Continue. */ if (nn < 2) { cn = NULL; break; } else { /* before leaving repeat loop set remaining timestodo to 0 */ bl->co_timestodo = 0; *num = nn - 1; return (CONTINUED_STR); } default: cn = findlabel(i, bl->co_children); if (!cn) { /* no label found inside repeat loop: before leaving loop set remaining timestodo to 0 */ bl->co_timestodo = 0; return (i); } } } } break; case CO_IF: if (bl->co_cond && cp_istrue(bl->co_cond)) { for (ch = bl->co_children; ch; ch = cn) { cn = ch->co_next; i = doblock(ch, &nn); if (*i > 2) { cn = findlabel(i, bl->co_children); if (!cn) return (i); else tfree(i); } else if (*i != NORMAL) { *num = nn; return (i); } } } else { for (ch = bl->co_elseblock; ch; ch = cn) { cn = ch->co_next; i = doblock(ch, &nn); if (*i > 2) { cn = findlabel(i, bl->co_elseblock); if (!cn) return (i); } else if (*i != NORMAL) { *num = nn; return (i); } } } break; case CO_FOREACH: wltmp = cp_variablesubst(cp_bquote(cp_doglob(wl_copy(bl->co_text)))); for (wl = wltmp; wl; wl = wl->wl_next) { cp_vset(bl->co_foreachvar, CP_STRING, wl->wl_word); for (ch = bl->co_children; ch; ch = cn) { cn = ch->co_next; i = doblock(ch, &nn); switch (*i) { case NORMAL: break; case BROKEN: /* Break. */ if (nn < 2) { wl_free(wltmp); return (NORMAL_STR); } else { *num = nn - 1; wl_free(wltmp); return (BROKEN_STR); } case CONTINUED: /* Continue. */ if (nn < 2) { cn = NULL; break; } else { *num = nn - 1; wl_free(wltmp); return (CONTINUED_STR); } default: cn = findlabel(i, bl->co_children); if (!cn) { wl_free(wltmp); return (i); } } } } wl_free(wltmp); break; case CO_BREAK: if (bl->co_numtimes > 0) { *num = bl->co_numtimes; return (BROKEN_STR); } else { fprintf(cp_err, "Warning: break %d a no-op\n", bl->co_numtimes); return (NORMAL_STR); } case CO_CONTINUE: if (bl->co_numtimes > 0) { *num = bl->co_numtimes; return (CONTINUED_STR); } else { fprintf(cp_err, "Warning: continue %d a no-op\n", bl->co_numtimes); return (NORMAL_STR); } case CO_GOTO: wl = cp_variablesubst(cp_bquote(cp_doglob(wl_copy(bl->co_text)))); wlword = wl->wl_word; wl->wl_word = NULL; wl_free(wl); return (wlword); case CO_LABEL: /* Do nothing. */ cp_periodic(); /*CDHW needed to avoid lock-ups when loop contains only a label CDHW*/ break; case CO_STATEMENT: docommand(wl_copy(bl->co_text)); break; case CO_UNFILLED: /* There was probably an error here... */ fprintf(cp_err, "Warning: ignoring previous error\n"); break; default: fprintf(cp_err, "doblock: Internal Error: bad block type %d\n", bl->co_type); return (NORMAL_STR); } return (NORMAL_STR); } /* Maxiumum number of cheverons used for the alternative prompt */ #define MAX_CHEVRONS 16 /* Get the alternate prompt. Number of chevrons indicates stack depth. Returns NULL when there is no alternate prompt. SJB 28th April 2005 */ char * get_alt_prompt(void) { int i = 0, j; static char buf[MAX_CHEVRONS + 2]; /* includes terminating space & null */ struct control *c; /* if nothing on the command stack return NULL */ if (cend[stackp] == NULL) return NULL; /* measure stack depth */ for (c = cend[stackp]->co_parent; c; c = c->co_parent) i++; if (i <= 0) return NULL; /* Avoid overflow of buffer and indicate when we've limited the chevrons by starting with a '+' */ if (i > MAX_CHEVRONS) { i = MAX_CHEVRONS; buf[0] = '+'; } else { buf[0] = '>'; } /* return one chevron per command stack depth */ for (j = 1; j < i; j++) buf[j] = '>'; /* Add space and terminate */ buf[j] = ' '; buf[j + 1] = '\0'; return buf; } /* Get a command. This does all the bookkeeping things like turning * command completion on and off... */ static wordlist * getcommand(char *string) { wordlist *wlist; if (cp_debug) fprintf(cp_err, "calling getcommand %s\n", string ? string : ""); #if !defined(HAVE_GNUREADLINE) && !defined(HAVE_BSDEDITLINE) /* set cp_altprompt for use by the lexer - see parser/lexical.c */ cp_altprompt = get_alt_prompt(); #endif /* !defined(HAVE_GNUREADLINE) && !defined(HAVE_BSDEDITLINE) */ cp_cwait = TRUE; wlist = cp_parse(string); cp_cwait = FALSE; if (cp_debug) { printf("getcommand "); wl_print(wlist, stdout); putc('\n', stdout); } return (wlist); } /* va: TODO: free control structure(s) before overwriting (memory leakage) */ int cp_evloop(char *string) { wordlist *wlist, *ww, *freewl; struct control *x; char *i; int nn; #define newblock \ do { \ cend[stackp]->co_children = TMALLOC(struct control, 1); \ ZERO(cend[stackp]->co_children, struct control); \ cend[stackp]->co_children->co_parent = cend[stackp]; \ cend[stackp] = cend[stackp]->co_children; \ cend[stackp]->co_type = CO_UNFILLED; \ } while(0) for (;;) { freewl = wlist = getcommand(string); if (wlist == NULL) { /* End of file or end of user input. */ if (cend[stackp] && cend[stackp]->co_parent && !string) { cp_resetcontrol(); continue; } else { return (0); } } if ((wlist->wl_word == NULL) || (*wlist->wl_word == '\0')) { /* User just typed return. */ wl_free(wlist); /* va, avoid memory leak */ if (string) { return (1); } else { cp_event--; continue; } } /* Just a check... */ for (ww = wlist; ww; ww = ww->wl_next) if (!ww->wl_word) { fprintf(cp_err, "cp_evloop: Internal Error: NULL word pointer\n"); continue; } /* Add this to the control structure list. If cend->co_type is * CO_UNFILLED, the last line was the beginning of a block, * and this is the unfilled first statement. */ /* va: TODO: free old structure and its content, before overwriting */ if (cend[stackp] && (cend[stackp]->co_type != CO_UNFILLED)) { cend[stackp]->co_next = TMALLOC(struct control, 1); ZERO(cend[stackp]->co_next, struct control); cend[stackp]->co_next->co_prev = cend[stackp]; cend[stackp]->co_next->co_parent = cend[stackp]->co_parent; cend[stackp] = cend[stackp]->co_next; } else if (!cend[stackp]) { control[stackp] = cend[stackp] = TMALLOC(struct control, 1); ZERO(cend[stackp], struct control); } if (eq(wlist->wl_word, "while")) { cend[stackp]->co_type = CO_WHILE; cend[stackp]->co_cond = wl_copy(wlist->wl_next); /* va, wl_copy */ if (!cend[stackp]->co_cond) { fprintf(stderr, "Error: missing while condition, 'false' will be assumed.\n"); } newblock; } else if (eq(wlist->wl_word, "dowhile")) { cend[stackp]->co_type = CO_DOWHILE; cend[stackp]->co_cond = wl_copy(wlist->wl_next); /* va, wl_copy */ if (!cend[stackp]->co_cond) { /* va: prevent misinterpretation as trigraph sequence with \-sign */ fprintf(stderr, "Error: missing dowhile condition, '?\?\?' will be assumed.\n"); } newblock; } else if (eq(wlist->wl_word, "repeat")) { cend[stackp]->co_type = CO_REPEAT; if (!wlist->wl_next) { cend[stackp]->co_numtimes = -1; } else { char *s; double *dd; struct wordlist *t; /*CDHW*/ /*CDHW wlist = cp_variablesubst(cp_bquote(cp_doglob(wl_copy(wlist)))); Wrong order? Leak? CDHW*/ t = cp_doglob(cp_bquote(cp_variablesubst(wl_copy(wlist)))); /*CDHW leak from cp_doglob? */ s = t->wl_next->wl_word; dd = ft_numparse(&s, FALSE); if (dd) { if (*dd < 0) { fprintf(cp_err, "Error: can't repeat a negative number of times\n"); *dd = 0.0; } cend[stackp]->co_numtimes = (int) *dd; } else { fprintf(cp_err, "Error: bad repeat argument %s\n", t->wl_next->wl_word); /* CDHW */ } wl_free(t); t = NULL; /* CDHW */ } newblock; } else if (eq(wlist->wl_word, "if")) { cend[stackp]->co_type = CO_IF; cend[stackp]->co_cond = wl_copy(wlist->wl_next); /* va, wl_copy */ if (!cend[stackp]->co_cond) { fprintf(stderr, "Error: missing if condition.\n"); } newblock; } else if (eq(wlist->wl_word, "foreach")) { cend[stackp]->co_type = CO_FOREACH; if (wlist->wl_next) { wlist = wlist->wl_next; cend[stackp]->co_foreachvar = copy(wlist->wl_word); wlist = wlist->wl_next; } else { fprintf(stderr, "Error: missing foreach variable.\n"); } wlist = cp_doglob(wlist); cend[stackp]->co_text = wl_copy(wlist); newblock; } else if (eq(wlist->wl_word, "label")) { cend[stackp]->co_type = CO_LABEL; if (wlist->wl_next) { cend[stackp]->co_text = wl_copy(wlist->wl_next); /* I think of everything, don't I? */ cp_addkword(CT_LABEL, wlist->wl_next->wl_word); if (wlist->wl_next->wl_next) fprintf(cp_err, "Warning: ignored extra junk after label.\n"); } else { fprintf(stderr, "Error: missing label.\n"); } } else if (eq(wlist->wl_word, "goto")) { /* Incidentally, this won't work if the values 1 and 2 ever get * to be valid character pointers -- I think it's reasonably * safe to assume they aren't... */ cend[stackp]->co_type = CO_GOTO; if (wlist->wl_next) { cend[stackp]->co_text = wl_copy(wlist->wl_next); if (wlist->wl_next->wl_next) fprintf(cp_err, "Warning: ignored extra junk after goto.\n"); } else { fprintf(stderr, "Error: missing label.\n"); } } else if (eq(wlist->wl_word, "continue")) { cend[stackp]->co_type = CO_CONTINUE; if (wlist->wl_next) { cend[stackp]->co_numtimes = scannum(wlist->wl_next->wl_word); if (wlist->wl_next->wl_next) fprintf(cp_err, "Warning: ignored extra junk after continue %d.\n", cend[stackp]->co_numtimes); } else { cend[stackp]->co_numtimes = 1; } } else if (eq(wlist->wl_word, "break")) { cend[stackp]->co_type = CO_BREAK; if (wlist->wl_next) { cend[stackp]->co_numtimes = scannum(wlist->wl_next->wl_word); if (wlist->wl_next->wl_next) fprintf(cp_err, "Warning: ignored extra junk after break %d.\n", cend[stackp]->co_numtimes); } else { cend[stackp]->co_numtimes = 1; } } else if (eq(wlist->wl_word, "end")) { /* Throw away this thing. */ if (!cend[stackp]->co_parent) { fprintf(stderr, "Error: no block to end.\n"); cend[stackp]->co_type = CO_UNFILLED; } else if (cend[stackp]->co_prev) { cend[stackp]->co_prev->co_next = NULL; x = cend[stackp]; cend[stackp] = cend[stackp]->co_parent; tfree(x); x = NULL; } else { x = cend[stackp]; cend[stackp] = cend[stackp]->co_parent; cend[stackp]->co_children = NULL; tfree(x); x = NULL; } } else if (eq(wlist->wl_word, "else")) { if (!cend[stackp]->co_parent || (cend[stackp]->co_parent->co_type != CO_IF)) { fprintf(stderr, "Error: misplaced else.\n"); cend[stackp]->co_type = CO_UNFILLED; } else { if (cend[stackp]->co_prev) cend[stackp]->co_prev->co_next = NULL; else cend[stackp]->co_parent->co_children = NULL; cend[stackp]->co_parent->co_elseblock = cend[stackp]; cend[stackp]->co_prev = NULL; } } else { cend[stackp]->co_type = CO_STATEMENT; cend[stackp]->co_text = wl_copy(wlist); } if (!cend[stackp]->co_parent) { x = cend[stackp]; /* We have to toss this do-while loop in here so * that gotos at the top level will work. */ do { nn = 0; /* CDHW */ i = doblock(x, &nn); switch (*i) { case NORMAL: break; case BROKEN: fprintf(cp_err, "Error: break not in loop or too many break levels given\n"); break; case CONTINUED: fprintf(cp_err, "Error: continue not in loop or too many continue levels given\n"); break; default: x = findlabel(i, control[stackp]); if (!x) fprintf(cp_err, "Error: label %s not found\n", i); tfree(i); } if (x) x = x->co_next; } while (x); } wl_free(freewl); if (string) return (1); /* The return value is irrelevant. */ } } /* This blows away the control structures... */ void cp_resetcontrol(void) { fprintf(cp_err, "Warning: clearing control structures\n"); if (cend[stackp] && cend[stackp]->co_parent) fprintf(cp_err, "Warning: EOF before block terminated\n"); /* We probably should free the control structures... */ cp_free_control(); /* va: free it */ control[0] = cend[0] = NULL; stackp = 0; cp_kwswitch(CT_LABEL, NULL); } /* Push or pop a new control structure set... */ void cp_popcontrol(void) { if (cp_debug) fprintf(cp_err, "pop: stackp: %d -> %d\n", stackp, stackp - 1); if (stackp < 1) { fprintf(cp_err, "cp_popcontrol: Internal Error: stack empty\n"); } else { /* va: free unused control structure */ ctl_free(control[stackp]); stackp--; } } void cp_pushcontrol(void) { if (cp_debug) fprintf(cp_err, "push: stackp: %d -> %d\n", stackp, stackp + 1); if (stackp > CONTROLSTACKSIZE - 2) { fprintf(cp_err, "Error: stack overflow -- max depth = %d\n", CONTROLSTACKSIZE); stackp = 0; } else { stackp++; control[stackp] = cend[stackp] = NULL; } } /* And this returns to the top level (for use in the interrupt handlers). */ void cp_toplevel(void) { stackp = 0; if (cend[stackp]) while (cend[stackp]->co_parent) cend[stackp] = cend[stackp]->co_parent; } /* va: This totally frees the control structures */ static void cp_free_control(void) { int i; /* Free the control structures */ for (i = stackp; i >= 0; i--) { ctl_free(control[i]); } control[0] = cend[0] = NULL; stackp = 0; } tmpk8ny_4pz/src/frontend/com_echo.h0000644000175000017500000000027113546075722017513 0ustar carstencarsten/************* * Header file for com_echo.c ************/ #ifndef ngspice_COM_ECHO_H #define ngspice_COM_ECHO_H #include "ngspice/wordlist.h" void com_echo(wordlist *wlist); #endif tmpk8ny_4pz/src/frontend/wdisp/0000755000175000017500000000000013546075722016714 5ustar carstencarstentmpk8ny_4pz/src/frontend/wdisp/Makefile.am0000644000175000017500000000052113546075722020746 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libwindisp.la libwindisp_la_SOURCES = \ windisp.c \ windisp.h \ winprint.c \ winprint.h \ ftegraf.h AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include -I$(top_srcdir)/src/frontend/wdisp AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/frontend/wdisp/winprint.h0000644000175000017500000000136213546075722020741 0ustar carstencarsten/************* * Header file for winprint.c ************/ #ifndef ngspice_WINPRINT_H #define ngspice_WINPRINT_H void WPRINT_PrintInit(HWND hwnd); BOOL CALLBACK WPRINT_Abort( HDC hdc, int iError); int WPRINT_Init(void); int WPRINT_NewViewport( GRAPH * graph); int WPRINT_Close(void); int WPRINT_Clear(void); int WPRINT_DrawLine(int x1, int y1, int x2, int y2); int WPRINT_Arc(int x0, int y0, int radius, double theta, double delta_theta); int WPRINT_Text( char * text, int x, int y, int degrees); int WPRINT_DefineColor(int colorid, double red, double green, double blue); int WPRINT_DefineLinestyle(int num, int mask); int WPRINT_SetLinestyle(int style); int WPRINT_SetColor( int color); int WPRINT_Update(void); int WPRINT_DiagramReady(void); #endif tmpk8ny_4pz/src/frontend/wdisp/ftegraf.h0000644000175000017500000000047313546075722020507 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1986 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * * Definitions common to the various graphics modules. */ #define G_NONE 0 #define G_HCOPY 1 #define G_TERM 2 #define G_MFB 3 #define G_X 4 tmpk8ny_4pz/src/frontend/wdisp/windisp.c0000644000175000017500000007061413546075722020545 0ustar carstencarsten/* * Frame buffer for the PC using MS Windows * Wolfgang Muees 27.10.97 * Holger Vogt 07.12.01 * Holger Vogt 05.12.07 * Holger Vogt 01.11.18 */ #include "ngspice/ngspice.h" #ifdef HAS_WINGUI #include "ngspice/graph.h" #include "ngspice/ftedev.h" #include "ngspice/ftedbgra.h" #include "ngspice/fteext.h" #include "../plotting/graf.h" #include "../plotting/graphdb.h" #include "windisp.h" /* * The ngspice.h file included above defines BOOLEAN (via bool.h) and this * clashes with the definition obtained from windows.h (via winnt.h). * However, BOOLEAN is not used by this file so we can work round this problem * by undefining BOOLEAN before including windows.h * SJB - May 2005 */ #undef BOOLEAN #define STRICT #include #include #include "ngspice/suffix.h" /* Typen */ typedef struct { /* Extra window data */ HWND wnd; /* window */ HDC hDC; /* Device context of window */ RECT Area; /* plot area */ int ColorIndex; /* Index of actual color */ int PaintFlag; /* 1 with WM_PAINT */ int FirstFlag; /* 1 before first update */ } tWindowData; typedef tWindowData *tpWindowData; /* pointer to it */ #define pWindowData(g) ((tpWindowData)(g->devdep)) LRESULT CALLBACK PlotWindowProc(HWND hwnd, /* window procedure */ UINT uMsg, WPARAM wParam, LPARAM lParam); void WPRINT_PrintInit(HWND hwnd); /* Windows printer init */ void WaitForIdle(void); /* wait until no more events */ static void WIN_ScreentoData(GRAPH *graph, int x, int y, double *fx, double *fy); static LRESULT HcpyPlot(HWND hwnd); static LRESULT HcpyPlotBW(HWND hwnd); static LRESULT PrintPlot(HWND hwnd); static LRESULT PrintInit(HWND hwnd); //static void RealClose(void); extern HINSTANCE hInst; /* application instance */ extern int WinLineWidth; /* width of text window */ extern HWND swString; /* string input window of main window */ //extern struct plot *plot_cur; extern int DevSwitch(char *devname); extern int NewViewport(GRAPH *pgraph); extern void com_hardcopy(wordlist *wl); /* defines */ #define RAD_TO_DEG (180.0 / M_PI) #ifndef M_LN10 #define M_LN10 2.30258509299404568402 #endif #define DEF_FONTW "Arial" /* local variables */ static int IsRegistered = 0; /* 1 if window class is registered */ #define NumWinColors 23 /* predefined colors */ static COLORREF ColorTable[NumWinColors]; /* color memory */ static char *WindowName = "Spice Plot"; /* window name */ static WNDCLASS TheWndClass; /* Plot-window class */ static HFONT PlotFont; /* which font */ #define ID_DRUCKEN 0xEFF0 /* System Menue: print */ #define ID_DRUCKEINR 0xEFE0 /* System Menue: printer setup */ #define ID_HARDCOPY 0xEFD0 /* System Menue: hardcopy color*/ #define ID_HARDCOPY_BW 0xEFB0 /* System Menue: hardcopy b&w*/ #define ID_MASK 0xFFF0; /* System-Menue: mask */ static char *STR_DRUCKEN = "Printer..."; /* System menue strings */ static char *STR_DRUCKEINR = "Printer setup..."; static char *STR_HARDCOPY = "Postscript file, color"; static char *STR_HARDCOPY_BW = "Postscript file, b&w"; static bool isblack = TRUE; /* background color of plot is black */ static bool isblackold = TRUE; static int linewidth = 0; /* linewidth of grid and plot */ /****************************************************************************** WIN_Init() makes connection to graphics. We have to determine dispdev->numlinestyles (if color screen == 1) dispdev->numcolors dispdev->width (preliminary window width) dispdev->height (preliminary window height) WIN_Init() returns 0, if no error ocurred. WIN_Init() does not yet open a window, this happens only in WIN_NewViewport() ******************************************************************************/ int WIN_Init(void) { char colorstring[BSIZE_SP]; /* Initialization of display descriptor */ dispdev->width = GetSystemMetrics(SM_CXSCREEN); dispdev->height = GetSystemMetrics(SM_CYSCREEN); dispdev->numlinestyles = 5; /* see implications in WinPrint! */ dispdev->numcolors = NumWinColors; /* always, user may have set color0 to white */ /* get background color information from spinit, only "white" is recognized as a suitable option! */ if (cp_getvar("color0", CP_STRING, colorstring, sizeof(colorstring))) isblack = !cieq(colorstring, "white"); /* get linewidth information from spinit */ if (!cp_getvar("xbrushwidth", CP_NUM, &linewidth, 0)) linewidth = 0; if (linewidth < 0) linewidth = 0; /* only for the first time: */ if (!IsRegistered) { isblackold = isblack; /* get linewidth information from spinit * if (!cp_getvar("xbrushwidth", CP_NUM, &linewidth, 0)) * linewidth = 0; * if (linewidth < 0) * linewidth = 0; */ /* Initialize colors */ if (isblack) { ColorTable[0] = RGB( 0, 0, 0); /* black = background */ ColorTable[1] = RGB(255, 255, 255); /* white = text and grid */ } else { ColorTable[0] = RGB(255, 255, 255); /* white = background */ ColorTable[1] = RGB( 0, 0, 0); /* black = text and grid */ } ColorTable[2] = RGB( 0, 255, 0); /* green = first line */ ColorTable[3] = RGB(255, 0, 0); /* red */ ColorTable[4] = RGB( 0, 0, 255); /* blue */ ColorTable[5] = RGB(255, 255, 0); /* yellow */ ColorTable[6] = RGB(255, 0, 255); /* violett */ ColorTable[7] = RGB( 0, 255, 255); /* azur */ ColorTable[8] = RGB(255, 128, 0); /* orange */ ColorTable[9] = RGB(128, 64, 0); /* brown */ ColorTable[10] = RGB(128, 0, 255); /* light violett */ ColorTable[11] = RGB(255, 128, 128); /* pink */ /* 2. color bank (with different line style */ if (isblack) ColorTable[12] = RGB(255, 255, 255); /* white */ else ColorTable[12] = RGB( 0, 0, 0); /* black */ ColorTable[13] = RGB( 0, 255, 0); /* green */ ColorTable[14] = RGB(255, 0, 0); /* red */ ColorTable[15] = RGB( 0, 0, 255); /* blue */ ColorTable[16] = RGB(255, 255, 0); /* yellow */ ColorTable[17] = RGB(255, 0, 255); /* violett */ ColorTable[18] = RGB( 0, 255, 255); /* azur */ ColorTable[19] = RGB(255, 128, 0); /* orange */ ColorTable[20] = RGB(128, 64, 0); /* brown */ ColorTable[21] = RGB(128, 0, 255); /* light violett */ ColorTable[22] = RGB(255, 128, 128); /* pink */ /* Ansii fixed font */ PlotFont = GetStockFont(ANSI_FIXED_FONT); /* register window class */ TheWndClass.lpszClassName = WindowName; TheWndClass.hInstance = hInst; TheWndClass.lpfnWndProc = PlotWindowProc; TheWndClass.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW; TheWndClass.lpszMenuName = NULL; TheWndClass.hCursor = LoadCursor(NULL, IDC_ARROW); if (isblack) TheWndClass.hbrBackground = GetStockObject(BLACK_BRUSH); else TheWndClass.hbrBackground = GetStockObject(WHITE_BRUSH); TheWndClass.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(2)); TheWndClass.cbClsExtra = 0; TheWndClass.cbWndExtra = sizeof(GRAPH *); if (!RegisterClass(&TheWndClass)) return 1; } /* not first time */ else if (isblackold != isblack) { if (isblack) { ColorTable[0] = RGB( 0, 0, 0); /* black = background */ ColorTable[1] = RGB(255, 255, 255); /* white = text and grid */ } else { ColorTable[0] = RGB(255, 255, 255); /* white = background */ ColorTable[1] = RGB( 0, 0, 0); /* black = text and grid */ } if (isblack) ColorTable[12] = RGB(255, 255, 255); /* white */ else ColorTable[12] = RGB( 0, 0, 0); /* black */ isblackold = isblack; } IsRegistered = 1; /* ready */ return 0; } /* get pointer to graph */ /* (attach to window) */ static GRAPH * pGraph(HWND hwnd) { return (GRAPH *) GetWindowLongPtr(hwnd, 0); } /* return line style for plotting */ static int LType(int ColorIndex) { if (ColorIndex >= 12) return PS_DOT; else return PS_SOLID; } /* postscript hardcopy from a plot window */ /* called by SystemMenue / Postscript hardcopy */ static LRESULT HcpyPlot(HWND hwnd) { int colorval = isblack? 0 : 1; NG_IGNORE(hwnd); cp_vset("hcopypscolor", CP_NUM, &colorval); com_hardcopy(NULL); return 0; } static LRESULT HcpyPlotBW(HWND hwnd) { int bgcolor; NG_IGNORE(hwnd); if (cp_getvar("hcopypscolor", CP_NUM, &bgcolor, 0)) cp_remvar("hcopypscolor"); com_hardcopy(NULL); return 0; } /* print a plot window */ /* called by SystemMenue / Print */ static LRESULT PrintPlot(HWND hwnd) { GRAPH *graph; GRAPH *temp; /* get pointer to graph */ graph = pGraph(hwnd); if (!graph) return 0; /* switch to printer */ /* (results in WPRINT_Init()) */ if (DevSwitch("WinPrint")) return 0; /* Cursor = wait */ SetCursor(LoadCursor(NULL, IDC_WAIT)); /* copy graph */ temp = CopyGraph(graph); if (!temp) goto PrintEND; /* add to the copy the new printer data */ if (NewViewport(temp)) goto PrintEND2; /* make correction to placement of grid (copy from gr_init) */ temp->viewportxoff = temp->fontwidth * 8; temp->viewportyoff = temp->fontheight * 4; /* print the graph */ gr_resize(temp); PrintEND2: /* delete temporary graph */ DestroyGraph(temp->graphid); PrintEND: /* switch back to screen */ DevSwitch(NULL); /* Cursor = normal */ SetCursor(LoadCursor(NULL, IDC_ARROW)); return 0; } /* initialze printer */ static LRESULT PrintInit(HWND hwnd) { /* hand over to printer module */ WPRINT_PrintInit(hwnd); return 0; } /* window procedure */ LRESULT CALLBACK PlotWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { static int x0, y0, xep, yep; int xe, ye, prevmix; static double fx0, fy0; double fxe, fye; double angle; char buf[BSIZE_SP]; char buf2[128]; char *t; HDC hdc; HPEN OldPen; HPEN NewPen; switch (uMsg) { case WM_SYSCOMMAND: { /* test command */ WPARAM cmd = wParam & ID_MASK; switch(cmd) { case ID_DRUCKEN: return PrintPlot(hwnd); case ID_DRUCKEINR: return PrintInit(hwnd); case ID_HARDCOPY: return HcpyPlot(hwnd); case ID_HARDCOPY_BW: return HcpyPlotBW(hwnd); } } goto WIN_DEFAULT; case WM_LBUTTONDOWN: { GRAPH *gr = pGraph(hwnd); xep = x0 = LOWORD (lParam); yep = y0 = HIWORD (lParam); /* generate x,y data from grid coordinates */ WIN_ScreentoData(gr, x0, y0, &fx0, &fy0); } goto WIN_DEFAULT; case WM_MOUSEMOVE: { /* left mouse button: connect coordinate pair by dashed pair of x, y lines */ if (wParam & MK_LBUTTON) { hdc = GetDC(hwnd); if (isblack) prevmix = SetROP2(hdc, R2_XORPEN); else prevmix = SetROP2(hdc, R2_NOTXORPEN); /* Create white dashed pen */ NewPen = CreatePen(LType(12), 0, ColorTable[1]); OldPen = SelectObject(hdc, NewPen); /* draw lines with previous coodinates -> delete old line because of XOR */ MoveToEx (hdc, x0, y0, NULL); LineTo (hdc, x0, yep); LineTo (hdc, xep, yep); /* get new end point */ xe = LOWORD (lParam); ye = HIWORD (lParam); /* draw new lines */ MoveToEx (hdc, x0, y0, NULL); LineTo (hdc, x0, ye); LineTo (hdc, xe, ye); /* restore standard color mix */ SetROP2(hdc, prevmix); OldPen = SelectObject(hdc, OldPen); DeleteObject(NewPen); ReleaseDC (hwnd, hdc); /* restore new to previous coordinates */ yep = ye; xep = xe; } /* right mouse button: create white (black) dashed box */ else if (wParam & MK_RBUTTON) { hdc = GetDC (hwnd); if (isblack) prevmix = SetROP2(hdc, R2_XORPEN); else prevmix = SetROP2(hdc, R2_NOTXORPEN); /* Create white (black) dashed pen */ NewPen = CreatePen(LType(12), 0, ColorTable[1]); OldPen = SelectObject(hdc, NewPen); /* draw box with previous coodinates -> delete old lines because of XOR */ MoveToEx (hdc, x0, y0, NULL); LineTo (hdc, x0, yep); LineTo (hdc, xep, yep); LineTo (hdc, xep, y0); LineTo (hdc, x0, y0); /* get new end point */ xe = LOWORD (lParam); ye = HIWORD (lParam); /* draw new box */ MoveToEx (hdc, x0, y0, NULL); LineTo (hdc, x0, ye); LineTo (hdc, xe, ye); LineTo (hdc, xe, y0); LineTo (hdc, x0, y0); /* restore standard color mix */ SetROP2(hdc, prevmix); OldPen = SelectObject(hdc, OldPen); DeleteObject(NewPen); ReleaseDC (hwnd, hdc); /* restore new to previous coordinates */ yep = ye; xep = xe; } } goto WIN_DEFAULT; /* get final coordinates upon left mouse up */ /* calculate and print out the data */ case WM_LBUTTONUP: { GRAPH *gr = pGraph(hwnd); InvalidateRect (hwnd, NULL, TRUE); xe = LOWORD (lParam); ye = HIWORD (lParam); WIN_ScreentoData(gr, xe, ye, &fxe, &fye); /* print it out */ if (xe == x0 && ye == y0) { /* only one location */ fprintf(stdout, "\nx0 = %g, y0 = %g\n", fx0, fy0); if (gr->grid.gridtype == GRID_POLAR || gr->grid.gridtype == GRID_SMITH || gr->grid.gridtype == GRID_SMITHGRID) { angle = RAD_TO_DEG * atan2(fy0, fx0); fprintf(stdout, "r0 = %g, a0 = %g\n", hypot(fx0, fy0), (angle > 0) ? angle : 360.0 + angle); } } else { /* need to print info about two points */ fprintf(stdout, "\nx0 = %g, y0 = %g x1 = %g, y1 = %g\n", fx0, fy0, fxe, fye); fprintf(stdout, "dx = %g, dy = %g\n", fxe-fx0, fye - fy0); if (xe != x0 && ye != y0) { /* add slope info if both dx and dy are zero, */ /* because otherwise either dy/dx or dx/dy is zero, */ /* which is uninteresting */ fprintf(stdout, "dy/dx = %g dx/dy = %g\n", (fye - fy0) / (fxe - fx0), (fxe - fx0) / (fye - fy0)); } } SetFocus(swString); } goto WIN_DEFAULT; /* get starting coordinates upon right mouse button down */ case WM_RBUTTONDOWN: { GRAPH *gr = pGraph(hwnd); x0 = xep = LOWORD (lParam); y0 = yep = HIWORD (lParam); WIN_ScreentoData(gr, x0, y0, &fx0, &fy0); } goto WIN_DEFAULT; /* get final coordinates upon right mouse button up */ /* copy xlimit, ylimit command into buf */ /* start plot loop with argument buf */ case WM_RBUTTONUP: { GRAPH *gr = pGraph(hwnd); InvalidateRect (hwnd, NULL, TRUE); xe = LOWORD (lParam); ye = HIWORD (lParam); /* do nothing if mouse curser is not moved in both x and y */ if ((xe == x0) || (ye == y0)) { SetFocus(swString); goto WIN_DEFAULT; } WIN_ScreentoData(gr, xe, ye, &fxe, &fye); strncpy(buf2, gr->plotname, sizeof(buf2)); if ((t = strchr(buf2, ':')) != NULL) *t = '\0'; if (!eq(plot_cur->pl_typename, buf2)) { (void) sprintf(buf, // "setplot %s; %s xlimit %e %e ylimit %e %e; setplot $curplot\n", "setplot %s; %s xlimit %e %e ylimit %e %e\n", buf2, gr->commandline, fx0, fxe, fy0, fye); } else { (void) sprintf(buf, "%s xlimit %e %e ylimit %e %e\n", gr->commandline, fx0, fxe, fy0, fye); } (void) cp_evloop(buf); SetFocus(swString); } goto WIN_DEFAULT; case WM_CLOSE: /* close window */ { GRAPH *g = pGraph(hwnd); if (g) { /* if g equals currentgraph, reset currentgraph. */ if (g == currentgraph) currentgraph = NULL; DestroyGraph(g->graphid); } } goto WIN_DEFAULT; case WM_PAINT: /* replot window (e.g. after Resize) */ { PAINTSTRUCT ps; GRAPH *g; tpWindowData wd; HDC saveDC; /* the DC from BeginPaint is different... */ HDC newDC; /* has to happen */ newDC = BeginPaint(hwnd, &ps); g = pGraph(hwnd); if (g) { wd = pWindowData(g); if (wd) { if (!wd->PaintFlag && !wd->FirstFlag) { /* avoid recursive call */ wd->PaintFlag = 1; /* get window sizes */ GetClientRect(hwnd, &(wd->Area)); g->absolute.width = wd->Area.right; g->absolute.height = wd->Area.bottom; /* switch DC */ saveDC = wd->hDC; wd->hDC = newDC; /* plot anew */ { GRAPH *tmp = currentgraph; currentgraph = g; gr_resize(g); currentgraph = tmp; } /* switch DC */ wd->hDC = saveDC; /* ready */ wd->PaintFlag = 0; } } } /* finish */ EndPaint(hwnd, &ps); } return 0; default: WIN_DEFAULT: return DefWindowProc(hwnd, uMsg, wParam, lParam); } } /****************************************************************************** WIN_NewViewport() creates a new window with a graph inside. WIN_NewViewport() returns 0 if successful ******************************************************************************/ int WIN_NewViewport(GRAPH *graph) { int i; HWND window; HDC dc; TEXTMETRIC tm; tpWindowData wd; HMENU sysmenu; /* test the parameters */ if (!graph) return 1; /* initialize if not yet done */ if (WIN_Init() != 0) { externalerror("Can't initialize GDI."); return 1; } /* allocate device dependency info */ wd = calloc(1, sizeof(tWindowData)); if (!wd) return 1; graph->devdep = wd; /* Create the window */ i = GetSystemMetrics(SM_CYSCREEN) / 3; window = CreateWindow(WindowName, graph->plotname, WS_OVERLAPPEDWINDOW, 0, 0, WinLineWidth, i * 2 - 22, NULL, NULL, hInst, NULL); if (!window) return 1; /* change the background color of all windows (both new and already plotted) by assessing the registered window class */ if (isblack) SetClassLongPtr(window, GCLP_HBRBACKGROUND, (LONG_PTR)GetStockObject(BLACK_BRUSH)); else SetClassLongPtr(window, GCLP_HBRBACKGROUND, (LONG_PTR)GetStockObject(WHITE_BRUSH)); wd->wnd = window; SetWindowLongPtr(window, 0, (LONG_PTR)graph); /* show window */ ShowWindow(window, SW_SHOWNORMAL); /* get the mask */ GetClientRect(window, &(wd->Area)); /* get the DC */ dc = GetDC(window); wd->hDC = dc; /* set the Color Index */ wd->ColorIndex = 0; /* still no flag */ wd->PaintFlag = 0; wd->FirstFlag = 1; /* modify system menue */ sysmenu = GetSystemMenu(window, FALSE); AppendMenu(sysmenu, MF_SEPARATOR, 0, NULL); AppendMenu(sysmenu, MF_STRING, ID_DRUCKEN, STR_DRUCKEN); AppendMenu(sysmenu, MF_STRING, ID_DRUCKEINR, STR_DRUCKEINR); AppendMenu(sysmenu, MF_STRING, ID_HARDCOPY, STR_HARDCOPY); AppendMenu(sysmenu, MF_STRING, ID_HARDCOPY_BW, STR_HARDCOPY_BW); /* set default parameters of DC */ SetBkColor(dc, ColorTable[0]); SetBkMode(dc, TRANSPARENT ); /* set font */ SelectObject(dc, PlotFont); /* query the font parameters */ if (GetTextMetrics(dc, &tm)) { graph->fontheight = tm.tmHeight; graph->fontwidth = tm.tmAveCharWidth; } /* set viewport parameters */ graph->viewport.height = wd->Area.bottom; graph->viewport.width = wd->Area.right; /* set absolute parameters */ graph->absolute.xpos = 0; graph->absolute.ypos = 0; graph->absolute.width = wd->Area.right; graph->absolute.height = wd->Area.bottom; /* wait until the window is really there */ WaitForIdle(); /* ready */ return 0; } /****************************************************************************** WIN_Close is essentially the counterpart to WIN_Init. unfortunately it might happen, that WIN_Close is called during plotting, because one wants to switch to the printer. Therefore WIN_Close is not allowed to do anything, cancelling of the structures occurs at program termination. ******************************************************************************/ int WIN_Close(void) { return 0; } #if 0 static void RealClose(void) { // delete window class if (IsRegistered) { if (TheWndClass.hIcon) { DestroyIcon(TheWndClass.hIcon); TheWndClass.hIcon = NULL; } UnregisterClass(WindowName, hInst); IsRegistered = FALSE; } } #endif int WIN_Clear(void) { tpWindowData wd; if (!currentgraph) return 0; wd = pWindowData(currentgraph); if (!wd) return 0; /* this is done by the window itself */ if (!wd->PaintFlag) /* not necessary with WM_PAINT */ SendMessage(wd->wnd, WM_ERASEBKGND, (WPARAM) wd->hDC, 0); return 0; } int WIN_DrawLine(int x1, int y1, int x2, int y2) { tpWindowData wd; HPEN OldPen; HPEN NewPen; if (!currentgraph) return 0; wd = pWindowData(currentgraph); if (!wd) return 0; MoveToEx(wd->hDC, x1, wd->Area.bottom - y1, NULL); NewPen = CreatePen(LType(wd->ColorIndex), linewidth, ColorTable[wd->ColorIndex]); OldPen = SelectObject(wd->hDC, NewPen); LineTo(wd->hDC, x2, wd->Area.bottom - y2); OldPen = SelectObject(wd->hDC, OldPen); DeleteObject(NewPen); WaitForIdle(); return 0; } int WIN_Arc(int x0, int y0, int radius, double theta, double delta_theta) /* * Notes: * Draws an arc of and center at (x0,y0) beginning at * angle theta (in rad) and ending at theta + delta_theta */ { tpWindowData wd; HPEN OldPen; HPEN NewPen; int left, right, top, bottom; int xs, ys, xe, ye; int yb; int direction; double r; double dx0; double dy0; if (!currentgraph) return 0; wd = pWindowData(currentgraph); if (!wd) return 0; direction = AD_COUNTERCLOCKWISE; if (delta_theta < 0) { theta += delta_theta; delta_theta = - delta_theta; direction = AD_CLOCKWISE; } SetArcDirection(wd->hDC, direction); /* some geometric considerations in advance */ yb = wd->Area.bottom; left = x0 - radius; right = x0 + radius; top = y0 + radius; bottom = y0 - radius; r = radius; dx0 = x0; dy0 = y0; xs = (int)(dx0 + (r * cos(theta))); ys = (int)(dy0 + (r * sin(theta))); xe = (int)(dx0 + (r * cos(theta + delta_theta))); ye = (int)(dy0 + (r * sin(theta + delta_theta))); /* plot */ NewPen = CreatePen(LType(wd->ColorIndex), linewidth, ColorTable[wd->ColorIndex]); OldPen = SelectObject(wd->hDC, NewPen); Arc(wd->hDC, left, yb-top, right, yb-bottom, xs, yb-ys, xe, yb-ye); OldPen = SelectObject(wd->hDC, OldPen); DeleteObject(NewPen); WaitForIdle(); return 0; } #if 0 int WIN_Text_old(char *text, int x, int y, int degrees) { tpWindowData wd; if (!currentgraph) return 0; wd = pWindowData(currentgraph); if (!wd) return 0; SetTextColor(wd->hDC, ColorTable[wd->ColorIndex]); TextOut(wd->hDC, x, wd->Area.bottom - y - currentgraph->fontheight, text, strlen(text)); return 0; } #endif int WIN_Text(char *text, int x, int y, int angle) { tpWindowData wd; HFONT hfont; LOGFONT lf; if (!currentgraph) return 0; wd = pWindowData(currentgraph); if (!wd) return 0; lf.lfHeight = (int) (1.1 * currentgraph->fontheight); lf.lfWidth = 0; lf.lfEscapement = angle * 10; lf.lfOrientation = angle * 10; lf.lfWeight = 500; lf.lfItalic = 0; lf.lfUnderline = 0; lf.lfStrikeOut = 0; lf.lfCharSet = 0; lf.lfOutPrecision = 0; lf.lfClipPrecision = 0; lf.lfQuality = 0; lf.lfPitchAndFamily = 0; /* set up fonts */ if (!cp_getvar("wfont", CP_STRING, lf.lfFaceName, sizeof(lf.lfFaceName))) (void) lstrcpy(lf.lfFaceName, DEF_FONTW); if (!cp_getvar("wfont_size", CP_NUM, &(lf.lfHeight), 0)) lf.lfHeight = (int) (1.3 * currentgraph->fontheight); hfont = CreateFontIndirect (&lf); SelectObject(wd->hDC, hfont); SetTextColor(wd->hDC, ColorTable[wd->ColorIndex]); TextOut(wd->hDC, x, wd->Area.bottom - y - currentgraph->fontheight, text, (int)strlen(text)); DeleteObject(SelectObject(wd->hDC, GetStockObject(SYSTEM_FONT))); return 0; } int WIN_DefineColor(int colorid, double red, double green, double blue) { NG_IGNORE(colorid); NG_IGNORE(red); NG_IGNORE(green); NG_IGNORE(blue); return 0; } int WIN_DefineLinestyle(int num, int mask) { NG_IGNORE(num); NG_IGNORE(mask); return 0; } int WIN_SetLinestyle(int style) { NG_IGNORE(style); return 0; } int WIN_SetColor(int color) { tpWindowData wd; if (!currentgraph) return 0; wd = pWindowData(currentgraph); if (!wd) return 0; wd->ColorIndex = color % NumWinColors; return 0; } int WIN_Update(void) { tpWindowData wd; if (!currentgraph) return 0; wd = pWindowData(currentgraph); if (!wd) return 0; /* After the first run of Update() */ /* FirstFlag again handles WM_PAINT messages. */ /* This prevents double painting during displaying the window. */ wd->FirstFlag = 0; return 0; } #if 0 int WIN_DiagramReady(void) { return 0; } #endif void RemoveWindow(GRAPH *dgraph) { tpWindowData wd; wd = pWindowData(dgraph); if (wd) SendMessage(wd->wnd, WM_CLOSE, (WPARAM) wd->hDC, 0); } /* Function borrowed from x11.c */ static void WIN_ScreentoData(GRAPH *graph, int x, int y, double *fx, double *fy) { double lmin, lmax; if (graph->grid.gridtype == GRID_XLOG || graph->grid.gridtype == GRID_LOGLOG) { lmin = log10(graph->datawindow.xmin); lmax = log10(graph->datawindow.xmax); *fx = exp(((x - graph->viewportxoff) * (lmax - lmin) / graph->viewport.width + lmin) * M_LN10); } else { *fx = (x - graph->viewportxoff) * graph->aspectratiox + graph->datawindow.xmin; } if (graph->grid.gridtype == GRID_YLOG || graph->grid.gridtype == GRID_LOGLOG) { lmin = log10(graph->datawindow.ymin); lmax = log10(graph->datawindow.ymax); *fy = exp(((graph->absolute.height - y - graph->viewportyoff) * (lmax - lmin) / graph->viewport.height + lmin) * M_LN10); } else { *fy = ((graph->absolute.height - y) - graph->viewportyoff) * graph->aspectratioy + graph->datawindow.ymin; } } #endif /* HAS_WINGUI */ tmpk8ny_4pz/src/frontend/wdisp/windisp.h0000644000175000017500000000221613546075722020543 0ustar carstencarsten/************* * Header file for windisp.c ************/ #ifndef ngspice_WINDISP_H #define ngspice_WINDISP_H disp_fn_Init_t WIN_Init; disp_fn_NewViewport_t WIN_NewViewport; disp_fn_Close_t WIN_Close; disp_fn_Clear_t WIN_Clear; disp_fn_DrawLine_t WIN_DrawLine; disp_fn_Arc_t WIN_Arc; disp_fn_Text_t WIN_Text; disp_fn_DefineColor_t WIN_DefineColor; disp_fn_DefineLinestyle_t WIN_DefineLinestyle; disp_fn_SetLinestyle_t WIN_SetLinestyle; disp_fn_SetColor_t WIN_SetColor; disp_fn_Update_t WIN_Update; disp_fn_Init_t WPRINT_Init; disp_fn_NewViewport_t WPRINT_NewViewport; disp_fn_Close_t WPRINT_Close; disp_fn_Clear_t WPRINT_Clear; disp_fn_DrawLine_t WPRINT_DrawLine; disp_fn_Arc_t WPRINT_Arc; disp_fn_Text_t WPRINT_Text; disp_fn_DefineColor_t WPRINT_DefineColor; disp_fn_DefineLinestyle_t WPRINT_DefineLinestyle; disp_fn_SetLinestyle_t WPRINT_SetLinestyle; disp_fn_SetColor_t WPRINT_SetColor; disp_fn_Update_t WPRINT_Update; //extern int WIN_DiagramReady(); #endif tmpk8ny_4pz/src/frontend/wdisp/winprint.c0000644000175000017500000002557613546075722020751 0ustar carstencarsten/* * Printing Routines for the IBM PC using MS Windows * Wolfgang Muees 27.10.97 * Holger Vogt 07.12.01 */ #include "ngspice/ngspice.h" #ifdef HAS_WINGUI #include "ngspice/graph.h" #include "ngspice/ftedev.h" #include "ngspice/ftedbgra.h" #include "ngspice/fteext.h" /* * The ngspice.h file included above defines BOOLEAN (via bool.h) and this * clashes with the definition obtained from windows.h (via winnt.h). * However, BOOLEAN is not used by this file so we can work round this problem * by undefining BOOLEAN before including windows.h * SJB - May 2005 */ #undef BOOLEAN #define STRICT #include #include #include "ngspice/suffix.h" #ifdef _MSC_VER #pragma hdrstop #endif /* _MSC_VER */ #include "winprint.h" /* function prototypes */ /* Typen */ typedef struct { /* Extra Printdaten */ int ColorIndex; /* Index auf die akt. Farbe */ int LineIndex; /* Index auf den akt. Linientyp */ } tPrintData; typedef tPrintData * tpPrintData; /* Zeiger darauf */ #define pPrintData(g) ((tpPrintData)(g->devdep)) /* externals */ void WaitForIdle(void); /* Warte, bis keine Events da */ /* lokale Variablen */ static HFONT PlotFont = NULL; /* Font-Merker */ static HFONT OldFont = NULL; #define NumLines 7 /* Anzahl der LineStyles */ static int LineTable[NumLines]; /* Speicher fuer die LineStyles */ static HDC PrinterDC = NULL; /* Device Context */ #define NumPrintColors 2 /* vordef. Farben */ static COLORREF ColorTable[NumPrintColors];/* Speicher fuer die Farben */ static int PrinterWidth = 1000; /* Breite des Papiers */ static int PrinterHeight = 1000; /* Hoehe des Papiers */ /****************************************************************************** Drucker-Initialisierung ******************************************************************************/ void WPRINT_PrintInit(HWND hwnd) { /* Parameter-Block */ PRINTDLG pd; /* Initialisieren */ pd.lStructSize = sizeof(PRINTDLG); pd.hwndOwner = hwnd; pd.hDevMode = NULL; pd.hDevNames = NULL; pd.hDC = NULL; pd.Flags = PD_PRINTSETUP; pd.nFromPage = 1; pd.nToPage = 1; pd.nMinPage = 0; pd.nMaxPage = 0; pd.nCopies = 1; pd.hInstance = NULL; pd.lCustData = 0; pd.lpfnPrintHook = NULL; pd.lpfnSetupHook = NULL; pd.lpPrintTemplateName = NULL; pd.lpSetupTemplateName = NULL; pd.hPrintTemplate = NULL; pd.hSetupTemplate = NULL; /* Default-Drucker initialisieren */ (void) PrintDlg( &pd); /* Speicher freigeben */ if( pd.hDevMode) GlobalFree( pd.hDevMode); if( pd.hDevNames) GlobalFree( pd.hDevNames); } /* Abort-Procedur zum Drucken */ BOOL CALLBACK WPRINT_Abort( HDC hdc, int iError) { NG_IGNORE(hdc); NG_IGNORE(iError); /* Multitasking */ WaitForIdle(); /* Warten */ return TRUE; } /****************************************************************************** WPRINT_Init() stellt die Verbindung zur Grafik her. Dazu gehoert die Feststellung von dispdev->numlinestyles dispdev->numcolors dispdev->width dispdev->height WPRINT_Init() gibt 0 zurueck, falls kein Fehler auftrat. ******************************************************************************/ int WPRINT_Init(void) { int pWidth; int pHeight; /* Printer-DC holen */ if (!PrinterDC) { /* Parameter-Block */ PRINTDLG pd; /* Initialisieren */ pd.lStructSize = sizeof(PRINTDLG); pd.hwndOwner = NULL; pd.hDevMode = NULL; pd.hDevNames = NULL; pd.hDC = NULL; pd.Flags = PD_NOPAGENUMS | PD_NOSELECTION | PD_RETURNDC; pd.nFromPage = 1; pd.nToPage = 1; pd.nMinPage = 0; pd.nMaxPage = 0; pd.nCopies = 1; pd.hInstance = NULL; pd.lCustData = 0; pd.lpfnPrintHook = NULL; pd.lpfnSetupHook = NULL; pd.lpPrintTemplateName = NULL; pd.lpSetupTemplateName = NULL; pd.hPrintTemplate = NULL; pd.hSetupTemplate = NULL; /* Default-Drucker initialisieren */ (void) PrintDlg( &pd); /* Speicher freigeben */ if( pd.hDevMode) GlobalFree( pd.hDevMode); if( pd.hDevNames) GlobalFree( pd.hDevNames); /* DC holen */ PrinterDC = pd.hDC; if (!PrinterDC) return 1; /* Abmasze bestimmen */ PrinterWidth = GetDeviceCaps( PrinterDC, HORZRES); PrinterHeight = GetDeviceCaps( PrinterDC, VERTRES); pWidth = GetDeviceCaps( PrinterDC, HORZSIZE); pHeight = GetDeviceCaps( PrinterDC, VERTSIZE); /* Mapping Mode setzen (fuer Kreise) */ if ( pWidth > pHeight) /* Querformat */ PrinterWidth = (PrinterHeight * pWidth) / pHeight; else /* Hochformat */ PrinterHeight = (PrinterWidth * pHeight) / pWidth; SetMapMode( PrinterDC, MM_ISOTROPIC); SetWindowExtEx( PrinterDC, PrinterWidth, PrinterHeight, NULL); SetViewportExtEx( PrinterDC, PrinterWidth, PrinterHeight, NULL); /* nicht hoeher als breit zeichnen */ if (pWidth < pHeight) { /* Papier im Hochformat */ PrinterHeight = PrinterWidth; } /* Initialisierungen des Display-Descriptors */ dispdev->width = PrinterWidth; dispdev->height = PrinterHeight; dispdev->numlinestyles = NumLines; dispdev->numcolors = NumPrintColors; /* Farben initialisieren */ ColorTable[0] = RGB(255,255,255); /* Weisz */ ColorTable[1] = RGB( 0, 0, 0); /* Schwarz */ /* LineStyles initialisieren */ LineTable[0] = PS_SOLID; LineTable[1] = PS_DOT; /* Gitter */ LineTable[2] = PS_SOLID; /* Erste Linie */ LineTable[3] = PS_DOT; /* Zweite Linie */ LineTable[4] = PS_DASH; /* usw */ LineTable[5] = PS_DASHDOT; LineTable[6] = PS_DASHDOTDOT; /* Font */ if (!PlotFont) { PlotFont = CreateFont( 0,0,0,0, FW_DONTCARE, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FIXED_PITCH, NULL); } /* Abort-Prozedur setzen */ SetAbortProc( PrinterDC, WPRINT_Abort); } /* fertig */ return (0); } /****************************************************************************** WPRINT_NewViewport() oeffnet den Drucker WPRINT_NewViewport() gibt 0 zurueck, falls erfolgreich ******************************************************************************/ int WPRINT_NewViewport( GRAPH * graph) { TEXTMETRIC tm; tpPrintData pd; DOCINFO di; /* Parameter testen */ if (!graph) return 1; /* Initialisiere, falls noch nicht geschehen */ if (WPRINT_Init() != 0) { externalerror("Can't initialize Printer."); return(1); } /* Device dep. Info allocieren */ pd = calloc(1, sizeof(tPrintData)); if (!pd) return 1; graph->devdep = pd; /* Setze den Color-Index */ pd->ColorIndex = 0; /* Font setzen */ OldFont = SelectObject( PrinterDC, PlotFont); /* Font-Parameter abfragen */ if (GetTextMetrics( PrinterDC, &tm)) { graph->fontheight = tm.tmHeight; graph->fontwidth = tm.tmAveCharWidth; } /* Setze den Linien-Index */ pd->LineIndex = 0; /* Viewport-Parameter setzen */ graph->viewport.height = PrinterHeight; graph->viewport.width = PrinterWidth; /* Absolut-Parameter setzen */ graph->absolute.xpos = 0; graph->absolute.ypos = 0; graph->absolute.width = PrinterWidth; graph->absolute.height = PrinterHeight; /* Druckauftrag anmelden */ di.cbSize = sizeof( DOCINFO); di.lpszDocName = graph->plotname; di.lpszOutput = NULL; if (StartDoc( PrinterDC, &di) <= 0) return 1; if (StartPage( PrinterDC) <= 0) return 1; /* titel drucken */ if (graph->plotname) { UINT align; align = GetTextAlign( PrinterDC); SetTextAlign( PrinterDC, TA_RIGHT | TA_TOP | TA_NOUPDATECP); TextOut( PrinterDC, PrinterWidth-graph->fontwidth, 1, graph->plotname, (int)strlen(graph->plotname)); SetTextAlign( PrinterDC, align); } /* fertig */ return(0); } int WPRINT_Close(void) { if (PrinterDC) { EndPage( PrinterDC); EndDoc( PrinterDC); if (OldFont) { SelectObject( PrinterDC, OldFont); OldFont = NULL; } DeleteObject( PlotFont); DeleteDC( PrinterDC); PrinterDC = NULL; } return (0); } int WPRINT_Clear(void) { return 0; } int WPRINT_DrawLine(int x1, int y1, int x2, int y2) { tpPrintData pd; HPEN OldPen; HPEN NewPen; int ColIndex; if (!currentgraph) return 0; pd = pPrintData(currentgraph); if (!pd) return 0; /* Farben/Dicke */ ColIndex = pd->ColorIndex; if (ColIndex > 1) ColIndex = 1; MoveToEx(PrinterDC, x1, PrinterHeight - y1, NULL); NewPen = CreatePen( LineTable[pd->LineIndex], 0, ColorTable[ColIndex] ); OldPen = SelectObject(PrinterDC, NewPen); LineTo(PrinterDC, x2, PrinterHeight - y2); OldPen = SelectObject(PrinterDC, OldPen); DeleteObject( NewPen); return (0); } int WPRINT_Arc(int x0, int y0, int radius, double theta, double delta_theta) /* * Notes: * Draws an arc of and center at (x0,y0) beginning at * angle theta (in rad) and ending at theta + delta_theta */ { tpPrintData pd; HPEN OldPen; HPEN NewPen; int left, right, top, bottom; int xs, ys, xe, ye; int yb; int direction; int ColIndex; double r; double dx0; double dy0; if (!currentgraph) return 0; pd = pPrintData(currentgraph); if (!pd) return 0; ColIndex = pd->ColorIndex; if (ColIndex > 1) ColIndex = 1; direction = AD_COUNTERCLOCKWISE; if (delta_theta < 0) { theta = theta + delta_theta; delta_theta = - delta_theta; direction = AD_CLOCKWISE; } SetArcDirection( PrinterDC, direction); /* Geometrische Vorueberlegungen */ yb = PrinterHeight; left = x0 - radius; right = x0 + radius; top = y0 + radius; bottom = y0 - radius; r = radius; dx0 = x0; dy0 = y0; xs = (int)(dx0 + (r * cos(theta))); ys = (int)(dy0 + (r * sin(theta))); xe = (int)(dx0 + (r * cos(theta + delta_theta))); ye = (int)(dy0 + (r * sin(theta + delta_theta))); /* Zeichnen */ NewPen = CreatePen( LineTable[pd->LineIndex], 0, ColorTable[ColIndex] ); OldPen = SelectObject(PrinterDC, NewPen); Arc( PrinterDC, left, yb-top, right, yb-bottom, xs, yb-ys, xe, yb-ye); OldPen = SelectObject(PrinterDC, OldPen); DeleteObject( NewPen); return 0; } int WPRINT_Text( char * text, int x, int y, int degrees) { tpPrintData pd; int ColIndex; NG_IGNORE(degrees); if (!currentgraph) return 0; pd = pPrintData(currentgraph); if (!pd) return 0; ColIndex = pd->ColorIndex; if (ColIndex > 1) { ColIndex = 1; } SetTextColor( PrinterDC, ColorTable[ColIndex]); TextOut( PrinterDC, x, PrinterHeight - y - currentgraph->fontheight, text, (int) strlen(text)); return (0); } int WPRINT_DefineColor(int colorid, double red, double green, double blue) { /* nix */ NG_IGNORE(colorid); NG_IGNORE(red); NG_IGNORE(green); NG_IGNORE(blue); return (0); } int WPRINT_DefineLinestyle(int num, int mask) { /* nix */ NG_IGNORE(num); NG_IGNORE(mask); return (0); } int WPRINT_SetLinestyle(int style) { tpPrintData pd; if (!currentgraph) return 0; pd = pPrintData(currentgraph); if (!pd) return 0; pd->LineIndex = style % NumLines; return (0); } int WPRINT_SetColor( int color) { tpPrintData pd; if (!currentgraph) return 0; pd = pPrintData(currentgraph); if (!pd) return 0; pd->ColorIndex = color; return (0); } int WPRINT_Update(void) { return (0); } int WPRINT_DiagramReady(void) { return 0; } #endif /* HAS_WINGUI */ tmpk8ny_4pz/src/frontend/trannoise/0000755000175000017500000000000013546075722017570 5ustar carstencarstentmpk8ny_4pz/src/frontend/trannoise/Makefile.am0000644000175000017500000000037213546075722021626 0ustar carstencarstennoinst_LTLIBRARIES = libtrannoise.la libtrannoise_la_SOURCES = \ FastNorm3.c \ 1-f-code.c \ wallace.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include -I$(top_srcdir)/src/frontend AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/frontend/trannoise/wallace.c0000644000175000017500000003461113546075722021351 0ustar carstencarsten/* Wallace generator for normally distributed random variates Copyright: Holger Vogt, 2008 */ //#define FASTNORM_ORIG #ifdef HasMain #include #else #ifndef NOSPICE #include "ngspice/ngspice.h" #endif #endif #ifdef _MSC_VER #include #define getpid _getpid #else #include #endif #include #include "ngspice/wallace.h" #include "ngspice/FastNorm3.h" #include "ngspice/randnumb.h" #define POOLSIZE 4096 #define LPOOLSIZE 12 #define NOTRANS 3 /* number of (dual) transformations */ #define VE 10 #define VL (1 << VE) #define VM (VL-1) #define WL (4*VL) #define WM (WL-1) double *outgauss; /* output vector for user access */ unsigned int variate_used; /* actual index of variate called by user */ double ScaleGauss; static double *pool1; static double *pool2; static unsigned int *addrif, *addrib; static unsigned n = POOLSIZE; static double chi1, chi2; /* chi^2 correction values */ static unsigned int newpools; void PolarGauss(double* py1, double* py2) { double x1, x2, w; do { x1 = drand(); x2 = drand(); w = x1 * x1 + x2 * x2; } while ((w > 1.0) || (w < 0.25)); w = sqrt((-2.0 * log(w)) / w); *py1 = (double)(x1 * w); *py2 = (double)(x2 * w); } static void destroy_wallace(void) { tfree(pool1); tfree(pool2); tfree(addrif); tfree(addrib); } void initw(void) { unsigned i; double totsqr, nomsqr; unsigned int coa; /* initialize the uniform generator */ srand((unsigned int) getpid()); // srand(17); TausSeed(); ScaleGauss = 1.; newpools = 1; /* set up the two pools */ pool1 = TMALLOC(double, n); pool2 = TMALLOC(double, n); addrif = TMALLOC(unsigned int, (n + NOTRANS)); addrib = TMALLOC(unsigned int, (n + NOTRANS)); atexit(destroy_wallace); /* fill the first pool with normally distributed values */ PolarGauss(&pool1[0], &pool1[1]); for (i = 1; i < n>>1; i++) PolarGauss(&pool1[i<<1], &pool1[(i<<1) + 1]); /* normalize pool content */ /* totsqr = totsum = 0.0; * for (i = 0; i < n; i++) { * totsqr += pool1[i] * pool1[i]; * totsum += pool1[i]; * } * totsum = totsum/n; * for (i = 0; i < n; i++) { * totsqr += (pool1[i] - totsum) * (pool1[i] - totsum); * } * nomsqr = sqrt(n / totsqr); * for (i = 0; i < n; i++) * pool1[i] = (pool1[i] - totsum) * nomsqr; */ totsqr = 0.0; for (i = 0; i < n; i++) totsqr += pool1[i] * pool1[i]; nomsqr = sqrt(n / totsqr); for (i = 0; i < n; i++) pool1[i] *= nomsqr; /* calculate ch^2 value */ chi1 = sqrt(sqrt(1.0 - 1.0/n)); chi2 = sqrt(1.0 - chi1*chi1); /* first scaling, based on unused pool1[n-2] */ ScaleGauss = chi1 + chi2 * ScaleGauss * pool1[n-2]; /* access to first pool */ outgauss = pool1; /* set data counter, we return n-2 values here */ variate_used = n - 2; /* generate random reading addresses using a LCG */ coa = 241; for (i = 0; i < (n + NOTRANS); i++) { // addrif[i] = s = (s * coa + cob) % (n); coa = CombLCGTausInt(); addrif[i] = coa >> (32 - LPOOLSIZE); // printf ("Random add:\t%ld\n" , s); } coa = 193; for (i = 0; i < (n + NOTRANS); i++) { // addrib[i] = s = (s * coa + cob) % (n); coa = CombLCGTausInt(); addrib[i] = coa >> (32 - LPOOLSIZE); // printf ("Random add:\t%ld\n" , addrib[i]); } // printf("norm for orig. Gauss: %e, chi^2 scale: %e\n", nomsqr, ScaleGauss); // NewWa(); } /* original FastNorm3.c code */ #ifdef FASTNORM_ORIG float NewWa() { int i, j, k, m; float p, q, r, s, t; int topv[6], ord[4], *top; float *ppt[4], *ptn; float nulval, endval; float totsqr, nomsqr; nulval = ScaleGauss * pool1[0]; endval = pool1[n-1]; /* Choose 4 random start points in the wk1[] vector I want them all different. */ top = topv + 1; /* Set limiting values in top[-1], top[4] */ top[-1] = VL; top[4] = 0; reran1: m = CombLCGTausInt(); /* positive 32-bit random */ /* Extract two VE-sized randoms from m, which has 31 useable digits */ m = m >> (31 - 2*VE); top[0] = m & VM; m = m >> VE; top[1] = m & VM; m = CombLCGTausInt(); /* positive 32-bit random */ /* Extract two VE-sized randoms from m, which has 31 useable digits */ m = m >> (31 - 2*VE); top[2] = m & VM; m = m >> VE; top[3] = m & VM; for (i = 0; i < 4; i++) ord[i] = i; /* Sort in decreasing size */ for (i = 2; i >= 0; i--) for (j = 0; j <= i; j++) if (top[j] < top[j+1]) { SWAP(int, top[j], top[j+1]); SWAP(int, ord[j], ord[j+1]); } /* Ensure all different */ for (i = 0; i < 3; i++) if (top[i] == top[i+1]) goto reran1; /* Set pt pointers to their start values for the first chunk. */ for (i = 0; i < 4; i++) { j = ord[i]; ppt[j] = pool2 + j * VL + top[i]; } /* Set ptn to point into wk1 */ ptn = pool1; /* Now ready to do five chunks. The length of chunk i is top[i-1] - top[i] (I hope) At the end of chunk i, pointer ord[i] should have reached the end of its part, and need to be wrapped down to the start of its part. */ i = 0; chunk: j = top[i] - top[i-1]; /* Minus the chunk length */ for (; j < 0; j++) { p = *ptn++; s = *ptn++; q = *ptn++; r = *ptn++; t = (p + q + r + s) * 0.5; *ppt[0]++ = t - p; *ppt[1]++ = t - q; *ppt[2]++ = r - t; *ppt[3]++ = s - t; } /* This should end the chunk. See if all done */ if (i == 4) goto passdone; /* The pointer for part ord[i] should have passed its end */ j = ord[i]; #ifdef dddd printf ("Chunk %1d done. Ptr %1d now %4d\n", i, j, ppt[j]-pool2); #endif ppt[j] -= VL; i++; goto chunk; passdone: /* wk1[] values have been transformed and placed in wk2[] Transform from wk2 to wk1 with a simple shuffle */ m = (CombLCGTausInt2() >> (29 - VE)) & WM; j = 0; for (i = 0; i < 4; i++) ppt[i] = pool1 + i * VL; for (i = 0; i < VL; i++) { p = pool2[j^m]; j++; s = pool2[j^m]; j++; q = pool2[j^m]; j++; r = pool2[j^m]; j++; t = (p + q + r + s) * 0.5; *ppt[0]++ = t - p; *ppt[1]++ = q - t; *ppt[2]++ = t - r; *ppt[3]++ = s - t; } /* renormalize again if number of pools beyond limit */ if (!(newpools & 0xFFFF)) { totsqr = 0.0; for (i = 0; i < n; i++) totsqr += pool1[i] * pool1[i]; nomsqr = sqrt(n / totsqr); for (i = 0; i < n; i++) pool1[i] *= nomsqr; } outgauss = pool1; /* reset data counter */ variate_used = n - 1; /* set counter counting nomber of pools made */ newpools++; /* new scale factor using ch^2 correction, using pool1[n-1] from last pool */ ScaleGauss = chi1 + chi2 * ScaleGauss * endval; // printf("Pool number: %d, chi^2 scale: %e\n", newpools, ScaleGauss); return nulval; /* use old scale */ } #else /* Simplified code according to an algorithm published by C. S. Wallace: "Fast Pseudorandom Generators for Normal and Exponential Variates", ACM Transactions on Mathmatical Software, Vol. 22, No. 1, March 1996, pp. 119-127. Transform pool1 to pool2 and back to pool1 NOTRANS times by orthogonal 4 x 4 Hadamard-Matrix. Mixing of values is very important: Any value in the pool should contribute to every value in the new pools, at least after several passes (number of passes is set by NOTRANS to 2 or 3). 4 values are read in a continuous sequence from the total of POOLSIZE values. Values are stored in steps modulo POOLSIZE/4. During backward transformation the values are shuffled by a random number jj. */ double NewWa(void) { double nulval, endval; double bl1, bl2, bl3, bl4; /* the four values to be transformed */ double bsum; double totsqr, nomsqr; unsigned int i, j, jj, m, mm, mmm; nulval = ScaleGauss * pool1[0]; endval = pool1[n-1]; m = n >> 2; // printf("New pool after next value\n"); /* generate new pool by transformation Transformation is repeated NOTRANS times */ for (i = 0; i < NOTRANS; i++) { mm = m << 1; mmm = mm + m; /* forward transformation */ // for (j = 0; j < n; j += 4) { for (j = 0; j < m; j++) { bl1 = pool1[j]; bl2 = pool1[j+m]; bl3 = pool1[j+mm]; bl4 = pool1[j+mmm]; /* Hadamard-Matrix */ bsum = (bl1 + bl2 + bl3 + bl4) * 0.5f; jj = j<<2; pool2[jj] = bl1 - bsum; pool2[jj+1] = bl2 - bsum; pool2[jj+2] = bsum - bl3; pool2[jj+3] = bsum - bl4; } /* backward transformation */ jj = (CombLCGTausInt2() >> (31 - LPOOLSIZE)) & (n - 1); for (j = 0; j < m; j++) { bl1 = pool2[j^jj]; bl2 = pool2[(j+m)^jj]; bl3 = pool2[(j+mm)^jj]; bl4 = pool2[(j+mmm)^jj]; /* Hadamard-Matrix */ bsum = (bl1 + bl2 + bl3 + bl4) * 0.5f; jj = j<<2; pool1[jj] = bl1 - bsum; pool1[jj+1] = bl2 - bsum; pool1[jj+2] = bsum - bl3; pool1[jj+3] = bsum - bl4; } } /* renormalize again if number of pools beyond limit */ if (!(newpools & 0xFFFF)) { totsqr = 0.0; for (i = 0; i < n; i++) totsqr += pool1[i] * pool1[i]; nomsqr = sqrt(n / totsqr); for (i = 0; i < n; i++) pool1[i] *= nomsqr; } outgauss = pool1; /* reset data counter */ variate_used = n - 1; /* set counter counting nomber of pools made */ newpools++; /* new scale factor using ch^2 correction, using pool1[n-1] from previous pool */ ScaleGauss = chi1 + chi2 * ScaleGauss * endval; // printf("Pool number: %d, chi^2 scale: %e\n", newpools, ScaleGauss); return nulval; /* use old scale */ // return pool1[0]; /* use new scale */ } #endif #ifdef FASTNORMTEST float NewWa_not(void) { float nulval, endval; float bl1, bl2, bl3, bl4; /* the four values to be transformed */ float bsum; float totsqr, nomsqr; unsigned int i, j, jj; nulval = ScaleGauss * pool1[0]; endval = pool1[n-1]; // printf("New pool after next value\n"); /* generate new pool by transformation Transformation is repeated NOTRANS times */ for (i = 0; i < NOTRANS; i++) { /* forward transformation */ for (j = 0; j < n; j += 4) { jj = j + i; bl1 = pool1[addrif[jj]]; bl2 = pool1[addrif[jj+1]]; bl3 = pool1[addrif[jj+2]]; bl4 = pool1[addrif[jj+3]]; /* s = (s*coa + cob) & (n - 1); bl1 = pool1[s]; s = (s*coa + cob) & (n - 1); bl2 = pool1[s + 1]; s = (s*coa + cob) & (n - 1); bl3 = pool1[s + 2]; s = (s*coa + cob) & (n - 1); bl4 = pool1[s + 3]; */ /* jj = j + i; bl1 = pool1[addrif[jj]]; bl2 = pool1[addrif[jj+1]]; bl3 = pool1[addrif[jj+2]]; bl4 = pool1[addrif[jj+3]]; */ /* bl1 = pool1[j]; bl2 = pool1[j+1]; bl3 = pool1[j+2]; bl4 = pool1[j+3]; */ /* Hadamard-Matrix */ bsum = (bl1 + bl2 + bl3 + bl4) * 0.5; /* pool2[j] = bl1 - bsum; pool2[j+1] = bl2 - bsum; pool2[j+2] = bsum - bl3; pool2[j+3] = bsum - bl4; */ pool2[addrib[jj]] = bl1 - bsum; pool2[addrib[jj+1]] = bl2 - bsum; pool2[addrib[jj+2]] = bsum - bl3; pool2[addrib[jj+3]] = bsum - bl4; } /* backward transformation */ for (j = 0; j < n; j += 4) { bl1 = pool2[j]; bl2 = pool2[j+1]; bl3 = pool2[j+2]; bl4 = pool2[j+3]; /* bl1 = pool2[addrib[j]]; bl2 = pool2[addrib[j+1]]; bl3 = pool2[addrib[j+2]]; bl4 = pool2[addrib[j+3]]; */ /* Hadamard-Matrix */ bsum = (bl1 + bl2 + bl3 + bl4) * 0.5; pool1[j] = bl1 - bsum; pool1[j+1] = bl2 - bsum; pool1[j+2] = bsum - bl3; pool1[j+3] = bsum - bl4; } } /* renormalize again if number of pools beyond limit */ if (!(newpools & 0xFFFF)) { totsqr = 0.0; for (i = 0; i < n; i++) totsqr += pool1[i] * pool1[i]; nomsqr = sqrt(n / totsqr); for (i = 0; i < n; i++) pool1[i] *= nomsqr; } outgauss = pool1; /* reset data counter */ variate_used = n - 1; /* set counter counting nomber of pools made */ newpools++; /* new scale factor using ch^2 correction, using pool1[n-1] from last pool */ ScaleGauss = chi1 + chi2 * ScaleGauss * endval; // printf("Pool number: %d, chi^2 scale: %e\n", newpools, ScaleGauss); return nulval; /* use old scale */ // return pool1[0]; /* use new scale */ } #endif /* --------------------- (test) main ------------------------- */ /* gcc -Wall -g -DHasMain -I../../include wallace.c CombTaus.o -o watest.exe */ #ifdef HasMain #include "ngspice/wallace.h" struct timeb timenow; struct timeb timebegin; int sec, msec; void timediff(struct timeb *now, struct timeb *begin, int *sec, int *msec) { *msec = now->millitm - begin->millitm; *sec = now->time - begin->time; if (*msec < 0) { *msec += 1000; (*sec)--; } } int main() { float x; unsigned int i; long int count; initw(); ftime(&timebegin); count = 100000000; for (i = 0; i < count; i++) { x = GaussWa; // printf("%d\t%f\n", i, x); } ftime(&timenow); timediff(&timenow, &timebegin, &sec, &msec); printf("WallaceHV: %ld normal variates: %f s\n", count, sec + (float) msec / 1000.0); initnorm(0, 0); initnorm(77, 3); ftime(&timebegin); count = 100000000; for (i = 0; i < count; i++) { x = FastNorm; // printf("%d\t%f\n", i, x); } ftime(&timenow); timediff(&timenow, &timebegin, &sec, &msec); printf("FastNorm3: %ld normal variates: %f s\n", count, sec + (float) msec / 1000.0); return (1); } #endif tmpk8ny_4pz/src/frontend/trannoise/1-f-code.c0000644000175000017500000001420113546075722021225 0ustar carstencarsten/* Copyright: Holger Vogt, 2008 Generates 1/f noise values according to: "Discrete simulation of colored noise and stochastic processes and 1/fa power law noise generation" Kasdin, N.J.; Proceedings of the IEEE Volume 83, Issue 5, May 1995 Page(s):802 - 827 */ #include "ngspice/ngspice.h" #include "ngspice/cpextern.h" #include "ngspice/cktdefs.h" #include "ngspice/1-f-code.h" #include "ngspice/fftext.h" #include "ngspice/wallace.h" #ifdef HAVE_LIBFFTW3 #include "fftw3.h" #endif void f_alpha(int n_pts, int n_exp, double X[], double Q_d, double alpha) { int i, length; double ha; double *hfa, *wfa; #ifdef HAVE_LIBFFTW3 fftw_complex *out = NULL; fftw_plan plan_forward = NULL; fftw_plan plan_backward = NULL; NG_IGNORE(n_exp); #endif ha = alpha/2.0; // Q_d = sqrt(Q_d); /* find the deviation of the noise */ #ifdef HAVE_LIBFFTW3 length = n_pts + 2; #else length = n_pts; #endif hfa = TMALLOC(double, length); wfa = TMALLOC(double, length); hfa[0] = 1.0; wfa[0] = Q_d * GaussWa; /* generate the coefficients hk */ for (i = 1; i < n_pts; i++) { /* generate the coefficients hk */ hfa[i] = hfa[i-1] * (ha + (double)(i-1)) / ((double)(i)); /* fill the sequence wk with white noise */ wfa[i] = Q_d * GaussWa; } #ifdef HAVE_LIBFFTW3 /* in-place transformation needs zero padding on the end */ hfa[n_pts] = 0.0; wfa[n_pts] = 0.0; hfa[n_pts+1] = 0.0; wfa[n_pts+1] = 0.0; /* perform the discrete Fourier transform */ plan_forward = fftw_plan_dft_r2c_1d(n_pts, hfa, (fftw_complex *)hfa, FFTW_ESTIMATE); fftw_execute(plan_forward); fftw_destroy_plan(plan_forward); plan_forward = fftw_plan_dft_r2c_1d(n_pts, wfa, (fftw_complex *)wfa, FFTW_ESTIMATE); fftw_execute(plan_forward); fftw_destroy_plan(plan_forward); out = fftw_malloc(sizeof(fftw_complex) * (unsigned int) (n_pts/2 + 1)); /* multiply the two complex vectors */ for (i = 0; i < n_pts/2 + 1; i++) { out[i][0] = hfa[i]*wfa[i] - hfa[i+1]*wfa[i+1]; out[i][1] = hfa[i]*wfa[i+1] + hfa[i+1]*wfa[i]; } /* inverse transform */ plan_backward = fftw_plan_dft_c2r_1d(n_pts, out, X, FFTW_ESTIMATE); fftw_execute(plan_backward); fftw_destroy_plan(plan_backward); for (i = 0; i < n_pts; i++) { X[i] = X[i] / (double) n_pts; } fftw_free(out); #else /* Green's FFT */ /* perform the discrete Fourier transform */ fftInit(n_exp); rffts(hfa, n_exp, 1); rffts(wfa, n_exp, 1); /* multiply the two complex vectors */ rspectprod(hfa, wfa, X, n_pts); /* inverse transform */ riffts(X, n_exp, 1); #endif tfree(hfa); tfree(wfa); /* fft tables will be freed in vsrcaccept.c and isrcaccept.c fftFree(); */ fprintf(stdout, "%d 1/f noise values in time domain created\n", n_pts); } /*-----------------------------------------------------------------------------*/ void trnoise_state_gen(struct trnoise_state *this, CKTcircuit *ckt) { if (this->top == 0) { if (cp_getvar("notrnoise", CP_BOOL, NULL, 0)) this -> NA = this -> TS = this -> NALPHA = this -> NAMP = this -> RTSAM = this -> RTSCAPT = this -> RTSEMT = 0.0; if ((this->NALPHA > 0.0) && (this->NAMP > 0.0)) { // add 10 steps for start up sequence size_t nosteps = (size_t) (ckt->CKTfinalTime / this->TS) + 10; size_t newsteps = 1; int newexp = 0; #ifdef HAVE_LIBFFTW3 newsteps = nosteps; newexp = 1; #else // generate number of steps as power of 2 while (newsteps < nosteps) { newsteps <<= 1; newexp++; } #endif tfree(this->oneof); /* FIXME, this is just a trivial trial to avoid memory leaks */ this->oneof = TMALLOC(double, newsteps); this->oneof_length = newsteps; f_alpha((int) newsteps, newexp, this -> oneof, this -> NAMP, this -> NALPHA); } trnoise_state_push(this, 0.0); /* first is deterministic */ return; } // make use of two random variables per call to rgauss() { double ra1, ra2; double NA = this -> NA; if (NA != 0.0) { #ifdef FastRand // use FastNorm3 ra1 = NA * FastNorm; ra2 = NA * FastNorm; #elif defined(WaGauss) // use WallaceHV ra1 = NA * GaussWa; ra2 = NA * GaussWa; #else rgauss(&ra1, &ra2); ra1 *= NA; ra2 *= NA; #endif } else { ra1 = 0.0; ra2 = 0.0; } if (this -> oneof) { if (this->top + 1 >= this->oneof_length) { fprintf(stderr, "ouch, noise data exhausted\n"); controlled_exit(1); } ra1 += this->oneof[this->top] - this->oneof[0]; ra2 += this->oneof[this->top + 1] - this->oneof[0]; } trnoise_state_push(this, ra1); trnoise_state_push(this, ra2); } } struct trnoise_state * trnoise_state_init(double NA, double TS, double NALPHA, double NAMP, double RTSAM, double RTSCAPT, double RTSEMT) { struct trnoise_state *this = TMALLOC(struct trnoise_state, 1); this->NA = NA; this->TS = TS; this->NALPHA = NALPHA; this->NAMP = NAMP; this->RTSAM = RTSAM; this->RTSCAPT = RTSCAPT; this->RTSEMT = RTSEMT; if (RTSAM > 0) { this->RTScapTime = exprand(RTSCAPT); this->RTSemTime = this->RTScapTime + exprand(RTSEMT); } this -> top = 0; this -> oneof = NULL; return this; } struct trrandom_state * trrandom_state_init(int rndtype, double TS, double TD, double PARAM1, double PARAM2) { struct trrandom_state *this = TMALLOC(struct trrandom_state, 1); this->rndtype = rndtype; this->TS = TS; this->TD = TD; this->PARAM1 = PARAM1; this->PARAM2 = PARAM2; this->value = 0.0; return this; } void trnoise_state_free(struct trnoise_state *this) { if (!this) return; tfree(this->oneof); tfree(this); } tmpk8ny_4pz/src/frontend/trannoise/FastNorm3.c0000644000175000017500000006736713546075722021573 0ustar carstencarsten/* This is file FastNorm3.c */ /* SUPERCEDES FastNorm.c, FastNorm2.c. Use with FastNorm3.h */ /* 24 June 2003 */ /* A package containing a very fast generator of pseudo-random Unit NORMAL variates, and some fairly high-quality UNIFORM generators. It also contains a straightforward implementation of a ChiSquared and Gamma generator copied from Ahrens and Dieter. */ /* Version 3 with double transformations and controllable extension to repeat the double transformations for higher quality at lower speed. Dated 17 May 20003. Copyright Christopher Stewart Wallace. */ /* %A C. S. Wallace %T Fast Pseudo-Random Generators for Normal and Exponential Variates. %J ACM Trans. Math. Software %V 22 %N 1 %P 119-127 %M MAR %D 1996 %O TR 94/197, May 1994, Dept. Computer Science, Monash University %K CSW, CSWallace, Monash, pseudo random number generator, algorithm, jrnl, TOMS, numbers, normal, probability, distribution, PRNG, RNG, Gaussian, distribution, jrnl, ACM, TOMS, TR 94 197, TR197, c1996, c199x, c19xx */ /* Use of this package requires the file "FastNorm3.h" which must be #include-ed in any C files using this package. The main purpose of this package is to provide a very fast source of pseudo-random variates from the Unit Normal N(0,1) distribution, having the density function f(x) = (1/sqrt(2*PI)) * exp (-0.5 * x^2) Variates are obtained not by calling a function, but by use of a macro "FastNorm" defined in FastNorm3.h. In a C program, this macro may appear anywhere a (double) expression could appear, e.g in statements like z += FastNorm; if (FastNorm < 1.1) ..... q = fabs (FastNorm); etc. The revision history, and a reference to the method description, is given later in this file under the heading "Revision history Fastnorm". Major sections of this file, such as the revision history and the major subroutines, are all headed by a line containing a row of minus signs (-) and the name of the section or subroutine. The generators included are: a Uniform source of integers, unsigned integers and doubles. Chi-sq(N) (based on Ahrens and Dieter) Gamma(N) (= 0.5 * Chi-sq(2N)) Normal (a very fast routine) */ /* ----------------- inclusions and some definitions ------------ */ #ifndef NOSPICE #include "ngspice/ngspice.h" #endif #include #include #include "ngspice/FastNorm3.h" /* --------------- (Uniform) c7rand, irandm, urandm ---------- */ /* c A random number generator called as a function by c c7rand (iseed) or irandm (iseed) or urandm (iseed) c The parameter should be a pointer to a 2-element Sw vector. c The first call gives a double uniform in 0 .. 1. c The second gives an Sw integer uniform in 0 .. 2**31-1 c The third gives an Sw integer with 32 bits, so unif in c -2**31 .. 2**31-1 if used in 32-bit signed arithmetic. c All update iseed[] in exactly the same way. c iseed[] must be a 2-element Sw vector. c The initial value of iseed[1] may be any 32-bit integer. c The initial value of iseed[0] may be any 32-bit integer except -1. c c The period of the random sequence is 2**32 * (2**32-1) c Its quality is quite good. It is based on the mixed multiplicative c congruential (Lehmer) generator x[n+1] = (69069 * x[n] + odd constant) MOD 2^32 c but avoids most of the well-known defects of this type of generator c by, in effect, generating x[n+k] from x[n] as defined by the c sequence above, where k is chosen randomly in 1 ... 128 with the c help of a subsidiary Tauseworth-type generator. c For the positve integer generator irandm, the less c significant digits are more random than is usual for a Lehmer c generator. The last n<31 digits do not repeat with a period of 2^n. c This is also true of the unsigned integer generator urandm, but less c so. c This is an implementation in C of the algorithm described in c Technical Report "A Long-Period Pseudo-Random Generator" c TR89/123, Computer Science, Monash University, c Clayton, Vic 3168 AUSTRALIA c by c c C.S.Wallace csw@cs.monash.edu.au c The table mt[0:127] is defined by mt[i] = 69069 ** (128-i) */ #define MASK ((Sw) 0x12DD4922) /* or in decimal, 316492066 */ #define SCALE ((double) 1.0 / (1024.0 * 1024.0 * 1024.0 * 2.0)) /* i.e. 2 to power -31 */ static Sw mt [128] = { 902906369, 2030498053, -473499623, 1640834941, 723406961, 1993558325, -257162999, -1627724755, 913952737, 278845029, 1327502073, -1261253155, 981676113, -1785280363, 1700077033, 366908557, -1514479167, -682799163, 141955545, -830150595, 317871153, 1542036469, -946413879, -1950779155, 985397153, 626515237, 530871481, 783087261, -1512358895, 1031357269, -2007710807, -1652747955, -1867214463, 928251525, 1243003801, -2132510467, 1874683889, -717013323, 218254473, -1628774995, -2064896159, 69678053, 281568889, -2104168611, -165128239, 1536495125, -39650967, 546594317, -725987007, 1392966981, 1044706649, 687331773, -2051306575, 1544302965, -758494647, -1243934099, -75073759, 293132965, -1935153095, 118929437, 807830417, -1416222507, -1550074071, -84903219, 1355292929, -380482555, -1818444007, -204797315, 170442609, -1636797387, 868931593, -623503571, 1711722209, 381210981, -161547783, -272740131, -1450066095, 2116588437, 1100682473, 358442893, -1529216831, 2116152005, -776333095, 1265240893, -482278607, 1067190005, 333444553, 86502381, 753481377, 39000101, 1779014585, 219658653, -920253679, 2029538901, 1207761577, -1515772851, -236195711, 442620293, 423166617, -1763648515, -398436623, -1749358155, -538598519, -652439379, 430550625, -1481396507, 2093206905, -1934691747, -962631983, 1454463253, -1877118871, -291917555, -1711673279, 201201733, -474645415, -96764739, -1587365199, 1945705589, 1303896393, 1744831853, 381957665, 2135332261, -55996615, -1190135011, 1790562961, -1493191723, 475559465, 69069 }; double c7rand(Sw *is) { int32_t it, leh; it = is [0]; leh = is [1]; /* Do a 7-place right cyclic shift of it */ it = ((it >> 7) & 0x01FFFFFF) + ((it & 0x7F) << 25); if (it >= 0) it = it ^ MASK; leh = leh * mt[it & 127] + it; is [0] = it; is [1] = leh; if (leh < 0) leh = ~leh; return (SCALE * leh); } Sw irandm(Sw *is) { int32_t it, leh; it = is [0]; leh = is [1]; /* Do a 7-place right cyclic shift of it */ it = ((it >> 7) & 0x01FFFFFF) + ((it & 0x7F) << 25); if (it >= 0) it = it ^ MASK; leh = leh * mt[it & 127] + it; is [0] = it; is [1] = leh; if (leh < 0) leh = ~leh; return (leh); } unsigned int urandm(Sw *is) { int32_t it, leh; it = is [0]; leh = is [1]; /* Do a 7-place right cyclic shift of it */ it = ((it >> 7) & 0x01FFFFFF) + ((it & 0x7F) << 25); if (it >= 0) it = it ^ MASK; leh = leh * mt[it & 127] + it; is [0] = it; is [1] = leh; return (uint32_t) leh; } /* --------------- (Chi-squared) adchi ----------------------- */ /* Simple implementation of Ahrens and Dieter method for a chi-sq random variate of order a >> 1. Uses c7rand, maths library */ /* 13 July 1998 */ /* Slightly faster if 'a' is the same as on previous call */ /* This routine is no longer used in the fastnorm code, but is included because it may be useful */ static double gorder, gm, rt2gm, aold; double adchi(double a, int *is) { double x, y, z, sq; if (a != aold) { aold = a; gorder = 0.5 * a; gm = gorder - 1.0; rt2gm = sqrt (aold - 1.0); } polar: x = 2.0 * c7rand(is) - 1.0; z = c7rand(is); sq = x*x + z*z; if ((sq > 1.0) || (sq < 0.25)) goto polar; y = x / z; x = rt2gm * y + gm; if (x < 0.0) goto polar; z = (1.0 + y*y) * exp (gm * log(x/gm) - rt2gm * y); if (c7rand(is) > z) goto polar; return (2.0 * x); } /* -------------------- (Gamma) rgamma (g, is) ----------- */ double rgamma(double g, int *is) { double x, y, z, sq; if (g != gorder) { gorder = g; gm = gorder - 1.0; aold = 2.0 * gorder; rt2gm = sqrt (aold - 1.0); } polar: x = 2.0 * c7rand(is) - 1.0; z = c7rand(is); sq = x*x + z*z; if ((sq > 1.0) || (sq < 0.25)) goto polar; y = x / z; x = rt2gm * y + gm; if (x < 0.0) goto polar; z = (1.0 + y*y) * exp (gm * log(x/gm) - rt2gm * y); if (c7rand(is) > z) goto polar; return (x); } /* ------------------ Revision history Fastnorm ------------- */ /* Items in this revision history appear in chronological order, so the most recent revsion appears last. Revision items are separated by a line of '+' characters. ++++++++++++++++++++++++++++++++++++++++++++++++++++++ This is a revised version of the algorithm decribed in ACM Transactions on Mathematical Software, Vol 22, No 1 March 1996, pp 119-127. A fast generator of pseudo-random variates from the unit Normal distribution. It keeps a pool of about 1000 variates, and generates new ones by picking 4 from the pool, rotating the 4-vector with these as its components, and replacing the old variates with the components of the rotated vector. The program should initialize the generator by calling initnorm(seed) with seed a Sw integer seed value. Different seed values will give different sequences of Normals. Seed may be any 32-bit integer. BUT SEE REVISION of 17 May 2003 for initnorm() parameters. The revised initnorm requires two integer parameters, iseed and quoll, the latter specifying a tradeoff between speed and quality. Then, wherever the program needs a new Normal variate, it should use the macro FastNorm, e.g. in statements like: x = FastNorm; (Sets x to a random Normal value) or x += a + FastNorm * b; (Adds a normal with mean a, SD b, to x) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Changed basic formula, which was: t = (p+q+r+s)*0.5; p = p-t; q = t-q; r = t-r; s = t-s; This gives sum of new p+q+r+s = 2p(old) which may not be a great choice. The new version is: t = (p+q+r+s)*0.5; p = p-t; q = q-t; r = t-r; s = t-s; which gives new p+q+r+s = p+q-r-s (old) which may be better. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Revision 14 November 1998 The older version "FastNorm" which was available via ftp was found to have a defect which could affect some applications. Dr Christine Rueb, (Max Planck Institut fur Infomatik, Im Stadtwald W 66123 Saabrucken, F.G.R., (rueb@mpi-sb.mpg.de) found that if a large number N of consecutive variates were summed to give a variate S with nominally N(0,N) distribution, the variance of S was in some cases too small. The effect was noticed with N=400, and was particularly strong for N=1023 if the first several (about 128) variates from FastNorm were discarded. Dr. Rueb traced the effect to an unexpected tendency of FastNorm to concentrate values with an anomolous correlation into the first 128 elements of the variate pool. With the help of her analysis, the algorithm has been revised in a way which appears to overcome the problem, at the cost of about a 19% reduction in speed (which still leaves the method very fast.) IT MUST BE RECOGNISED THAT THIS ALGORITHM IS NOVEL AND WHILE IT PASSES A NUMBER OF STANDARD TESTS FOR DISTRIBUTIONAL FORM, LACK OF SERIAL CORRELATION ETC., IT MAY STILL HAVE DEFECTS. RECALL THE NUMBER OF YEARS WHICH IT TOOK FOR THE LIMITATIONS OF THE LEHMER GENERATOR FOR UNIFORM VARIATES TO BECOME APPARENT !!! UNTIL MORE EXPERIENCE IS GAINED WITH THIS TYPE OF GENERATOR, IT WOULD BE WISE IN ANY CRITICAL APPLICATION TO COMPARE RESULTS OBTAINED USING IT WITH RESULTS OBTAINED USING A "STANDARD" FORM OF GENERATOR OF NORMAL VARIATES COUPLED WITH A WELL-DOCUMENTED GENERATOR OF UNIFORM VARIATES. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Revision 1 April 2003. Trying a scanning process proposed by R.P.Brent. It needs 2 pool vectors, as it cannot update in-situ, but may be more robust. It is a bit slower on a 133 Mhz PC but just as fast on a newer PC (moggie) at about 16 ns per call in the 'speed.c' test. The extreme-value defect is the same on old and new versions. If one finds a value 'A' such that a batch of B genuine Normal variates has probability 0.2 of containing a variate with abolute value greater than A, then the probability that both of two consecive batches of B will contain such a value should be 0.2 times 0.2, or 0.04. Instead, both versions give the extreme value prob. as 0.200 (over a million batches) but give the consective-pair prob as 0.050 for batch size B = 1024. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Revision 17 May 2003. The fundamental defect of the method, namely an inadequate 'mixing' of squared value ('energy') between one generation of the pool and the next, cannot readily be removed. In going from one pool to the next, the energy in an old variate is shared among just 4 variates in the new pool. Hence it takes many generations before the energy of some original variate can be distributed across the whole pool. The number of generations needed cannot be less than the log to base 4 of the pool size, or 5 for a pool size of 1024. In fact, the pseudo-random indexing of the pool means that rather more generations are needed on average. The defect is readily revealed by the following test. One picks a "batch size" comparable to the pool size, say 500 or 1000. One then computes a value A such that a batch will with probability 0.2 contain one or more variates with absolute value exceeding A. One then draws batches from FastNorm, and tests each batch to see if it contains such an extreme value. Over many batches, one counts the frequency of such 'extreme' batches, and finds (with FastNorm2) that it is indeed about 0.2. However, when one counts the frequency with which succesive batches are both extreme, one finds it to be higher than the proper value (0.2)^2 = 0.04. For batch sizes round the pool size, it can be as high as 0.05. That is, although the frequncy of extreme values is about right, their occurrence in the stream is correlated over a scale of the order of the pool size. The same correlation effect is seen in the average 4th moment of successive batches. Since this inter-generational correlation cannot be avoided, the this revision seeks to reduce it by performing at least two simple rotations of the pool at each generation. Obviously, some speed is lost, but the correlations are reduced. To allow the user to trade off speed and quality, the initialization function initnorm() now provides a QUALITY parameter 'quoll' which controls how many double-rotations are done for each generation. See the comments in initnorm() for more detail. ++++++++++ End of revision notes +++++++++ */ /* ----------------- Some test results ------------------------ */ /* General form: Some simple tests were conducted by transforming FastNorm variates in several ways to yield a variable nominally uniformly distributed in 0 ... 1. Uniformity of the derived variate was then tested by a ChiSquared test on a 100-cell histogram with cell counts around 10000. These tests are crude, but showed no untoward results on the present version. Transformations included: y = 0.5 * (1.0 + erf (n1 / sqrt(2)) y = 0.5 * (n1 / (n1^2 + n2^2 + n3^2) - 1) y = exp (-0.5 * (n1^2 + n2^2)) y = (n1^2 + n2^2) / (n1^2 + n2^2 + n3^2 + n4^2) where n1, n2 etc are successive Normal variates. It may be noted that some of these are sensitive to serial correlation if present. Fourth moment of batches: Extensive tests for correlation among the fourth moments of successive batches of variates were made, with batch sizes comparabe to or (worst case) equal to the size of the variate pool (4096 in this revision). With 'quality' 1, significant correlation appears after 10^6 batches of worst-case size. With quality 2, no significant correlation is evident after 10^7 batches. A just-significant correlation appears after 3.6*10^7 batches. As this requires some 1.4*10^11 deviates to be drawn, it may be irrelevent for many applications. The observed correlation coefficent was 0.0008. With quality 3, results are OK after 10^8 batches, or more than 4*10^11 variates. No tests have been done with quality 4 as yet. Speed: Speed tests were done on a PC running RedHat Linux, using "-O" compiler optimization. The test loop was for (i = 0; i < 500000000; i++) { a += FastNorm; a -= FastNorm; } Thus the test makes 10^9 uses of FastNorm. The time taken, (which includes time for a call in 'initnorm' and the loop overhead) depends on the 'quality' set by initnorm. Quality 1: 21.5 sec Quality 2: 32.1 sec Quality 3: 42.5 sec Quality 4: 53.1 sec By way of comparison, the same 10^9 call loop was timed with the Unix library "random()" routine substituted for FastNorm, and the variable 'a' defined as integer rather than double. Also, since most use of a Uniform generator such as "random()" requires that the returned integer be scaled into a floating- point number in 0 ... 1, the timing was repeated with "a += random" ('a' integer) replaced by "a += Scale*random()" where 'a' is double and Scale = 2^(-31). The times obtained were: Random (integer): 44.1 sec Random (double) : 47.7 sec It can be seen that FastNorm (even at quality 3) is faster than a commonly-used Uniform generator. To some extent, this result may vary on different computers and compilers. Since FastNorm (at least for qualities above 1) no doubt does more arithmetic per variate than "random()", much of its speed advantage must come from its replacement of a function call per variate by a macro which makes only one function call every 4095 variates. Computers with lower 'call' overheads than the PC used here might show differnt results. Incidently, the Uniform generator 'c7rand()' included in this package, which returns a double uniform in 0 ... 1, and is of fairly high quality, gives a time in the same test of 36.8 sec, a little faster than 'random()'. */ /* ----------------- globals ------------------------- */ /* A pool must have a length which is a multiple of 4. * During regeneration of a new pool, the pool is treated as 4 * consecutive vectors, each of length VL. */ #define VE 10 #define VL (1 << VE) #define VM (VL-1) #define WL (4*VL) #define WM (WL-1) Sw gaussfaze; Sf *gausssave; Sf GScale; /* GScale,fastnorm,gaussfaze, -save must be visible to callers */ static Sf chic1, chic2; /* Constants used in getting ChiSq_WL */ Sw gslew; /* Counts generations */ static Sw qual; /* Sets number of double transforms per generation. */ static Sw c7g [2]; /* seed values for c7rand */ Sf wk1 [WL], wk2 [WL]; /* Pools of variates. */ /* ------------------ regen ---------------------- */ /* Takes variates from wk1[], transforms to wk[2], then back to wk1[]. */ static void regen(void) { Sw i, j, m; Sf p, q, r, s, t; Sw topv[6], ord[4], *top; Sf *ppt[4], *ptn; /* Choose 4 random start points in the wk1[] vector I want them all different. */ top = topv + 1; /* Set limiting values in top[-1], top[4] */ top[-1] = VL; top[4] = 0; reran1: m = irandm (c7g); /* positive 32-bit random */ /* Extract two VE-sized randoms from m, which has 31 useable digits */ m = m >> (31 - 2*VE); top[0] = m & VM; m = m >> VE; top[1] = m & VM; m = irandm (c7g); /* positive 32-bit random */ /* Extract two VE-sized randoms from m, which has 31 useable digits */ m = m >> (31 - 2*VE); top[2] = m & VM; m = m >> VE; top[3] = m & VM; for (i = 0; i < 4; i++) ord[i] = i; /* Sort in decreasing size */ for (i = 2; i >= 0; i--) for (j = 0; j <= i; j++) if (top[j] < top[j+1]) { SWAP(Sw, top[j], top[j+1]); SWAP(Sw, ord[j], ord[j+1]); } /* Ensure all different */ for (i = 0; i < 3; i++) if (top[i] == top[i+1]) goto reran1; /* Set pt pointers to their start values for the first chunk. */ for (i = 0; i < 4; i++) { j = ord[i]; ppt[j] = wk2 + j * VL + top[i]; } /* Set ptn to point into wk1 */ ptn = wk1; /* Now ready to do five chunks. The length of chunk i is top[i-1] - top[i] (I hope) At the end of chunk i, pointer ord[i] should have reached the end of its part, and need to be wrapped down to the start of its part. */ i = 0; chunk: j = top[i] - top[i-1]; /* Minus the chunk length */ for (; j < 0; j++) { p = *ptn++; s = *ptn++; q = *ptn++; r = *ptn++; t = (p + q + r + s) * 0.5; *ppt[0]++ = t - p; *ppt[1]++ = t - q; *ppt[2]++ = r - t; *ppt[3]++ = s - t; } /* This should end the chunk. See if all done */ if (i == 4) goto passdone; /* The pointer for part ord[i] should have passed its end */ j = ord[i]; #ifdef dddd printf ("Chunk %1d done. Ptr %1d now %4d\n", i, j, ppt[j]-wk2); #endif ppt[j] -= VL; i++; goto chunk; passdone: /* wk1[] values have been transformed and placed in wk2[] Transform from wk2 to wk1 with a simple shuffle */ m = (irandm (c7g) >> (29 - VE)) & WM; j = 0; for (i = 0; i < 4; i++) ppt[i] = wk1 + i * VL; for (i = 0; i < VL; i++) { p = wk2[j^m]; j++; s = wk2[j^m]; j++; q = wk2[j^m]; j++; r = wk2[j^m]; j++; t = (p + q + r + s) * 0.5; *ppt[0]++ = t - p; *ppt[1]++ = q - t; *ppt[2]++ = t - r; *ppt[3]++ = s - t; } /* We have a new lot of variates in wk1 */ } /* ------------------- renormalize --------------------------- */ /* Rescales wk1[] so sum of squares = WL */ /* Returns the original sum-of-squares */ Sf renormalize(void) { Sf ts, vv; Sw i; ts = 0.0; for (i = 0; i < WL; i++) ts += wk1[i] * wk1[i]; vv = sqrt (WL / ts); for (i = 0; i < WL; i++) wk1[i] *= vv; return (ts); } /* ------------------------ BoxMuller ---------------------- */ /* Fills block gvec of length ll with proper normals */ static void boxmuller(Sf *gvec, Sw ll) { Sw i; Sf tx, ty, tr, tz; /* Here, replace the whole pool with conventional Normal variates */ i = 0; nextpair: tx = 2.0 * c7rand(c7g) - 1.0; /* Uniform in -1..1 */ ty = 2.0 * c7rand(c7g) - 1.0; /* Uniform in -1..1 */ tr = tx * tx + ty * ty; if ((tr > 1.0) || (tr < 0.25)) goto nextpair; tz = -2.0 * log (c7rand(c7g)); /* Sum of squares */ tz = sqrt(tz / tr); gvec [i++] = tx * tz; gvec [i++] = ty * tz; if (i < ll) goto nextpair; /* Horrid, but good enough */ } /* ------------------------- initnorm ---------------------- */ /* To initialize, given a seed integer and a quality level. The seed can be any integer. The quality level quoll should be between 1 and 4. Quoll = 1 gives high speed, but leaves some correlation between the 4th moments of successive batches of values. Higher values of quoll give lower speed but less correlation. If called with quoll = 0, initnorm performs a check that the most crucial routine (regen) is performing correctly. In this case, the value of 'iseed' is ignored. Initnorm will report the results of the test, which compares pool values with check17 and check98, which are defined below. When a check call is made, a proper call on initnorm must then be made before using the FastNorm macro. A check call does not properly initialize the routines even if it succeeds. */ static Sf check17 = 0.1255789; static Sf check98 = -0.7113293; void initnorm(Sw seed, Sw quoll) { Sw i; /* At one stage, we need to generate a random variable Z such that (WL * Z*Z) has a Chi-squared-WL density. Now, a var with an approximate Chi-sq-K distn can be got as (A + B*n)**2 where n has unit Normal distn, A**2 = K * sqrt (1 - 1/K), A**2 + B**2 = K. (For large K) So we form Z as (1/sqrt(WL)) * (A + B*n) or chic1 + chic2 * n where chic1 = A / sqrt(WL), chic2 = B / sqrt(WL). Hence chic1 = sqrt(A*A / WL) = sqrt(sqrt(1 - 1/WL)), chic2 = sqrt(1 - chic1*chic1) */ chic1 = sqrt(sqrt(1.0 - 1.0 / WL)); chic2 = sqrt(1.0 - chic1 * chic1); /* Set regen counter "gslew" which will affect renormalizations. Since pools are OK already, we wont't need to renorm for a while */ gslew = 1; /* Finally, set "gaussfaze" to return all of wk1 * except the last entry at WL-1 */ gaussfaze = WL-1; gausssave = wk1; /* If quoll = 0, do a check on installation */ if (quoll == 0) goto docheck; qual = quoll; /* Check sensible values for quoll, say 1 to 4 */ if ((quoll < 0) || (quoll > 4)) { printf ("From initnorm(): quoll parameter %d out of\ range 1 to 4\n", quoll); return; } c7g[0] = seed; c7g[1] = -3337792; /* Fill wk1[] with good normals */ boxmuller (wk1, WL); /* Scale so sum-of-squares = WL */ GScale = sqrt (renormalize () / WL); /* We have set GScale to restore the original ChiSq_WL sum-of-squares */ return; docheck: /* Set a simple pattern in wk1[] and test results of regen */ for (i = 0; i < WL; i++) wk1[i] = wk2[i] = 0.0; wk1[0] = sqrt ((double) WL); c7g[0] = 1234567; c7g[1] = 9876543; for (i = 0; i < 60; i++) regen(); /* Check a couple of values */ if ((fabs (wk1[17] - check17) > 0.00001) || (fabs (wk1[98] - check98) > 0.00001)) { printf ("\nInitnorm check failed.\n"); printf ("Expected %8.5f got %10.7f\n", check17, wk1[17]); printf ("Expected %8.5f got %10.7f\n", check98, wk1[98]); } else { printf ("\nInitnorm check OK\n"); } } /* ---------------------- fastnorm -------------------------- */ /* If gslew shows time is ripe, renormalizes the pool fastnorm() returns the value GScale*gausssave[0]. */ Sf fastnorm(void) { Sf sos; Sw n1; if (!(gslew & 0xFFFF)) sos = renormalize (); /* The last entry of gausssave, at WL-1, will not have been used. Use it to get an approx. to sqrt (ChiSq_WL / WL). See initnorm() code for details */ GScale = chic1 + chic2 * GScale * gausssave [WL-1]; for (n1 = 0; n1 < qual; n1++) regen (); gslew++; gaussfaze = WL - 1; return (GScale * gausssave [0]); } /* --------------------- (test) main ------------------------- */ #ifdef Main #include "ngspice/FastNorm3.h" int main() { Sf x; Sw i; initnorm (0, 0); initnorm (77, 2); printf ("SoS %20.6f\n", renormalize()); // for (i = 0; i < 2000000; i++) // x = FastNorm; for (i = 0; i < 200; i++) { x = FastNorm; printf("%d\t%f\n", i, x); } printf ("SoS %20.6f\n", renormalize()); exit (1); } #endif tmpk8ny_4pz/src/frontend/nutinp.c0000644000175000017500000002016513546075722017253 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher **********/ /* * For dealing with nutmeg input decks and command scripts */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/fteinp.h" #include "ngspice/stringskip.h" #include "nutinp.h" #include "variable.h" #include "../misc/mktemp.h" #include "subckt.h" /* The routine to source a spice input deck. We read the deck in, take out * the front-end commands, and create a CKT structure. Also we filter out * the following lines: .save, .width, .four, .print, and .plot, to perform * after the run is over. */ void inp_nutsource(FILE *fp, bool comfile, char *filename) { struct card *deck, *dd, *ld; struct card *realdeck, *options = NULL; char *tt = NULL, name[BSIZE_SP], *s, *t; bool commands = FALSE; wordlist *wl = NULL, *end = NULL; wordlist *controls = NULL; FILE *lastin, *lastout, *lasterr; deck = inp_readall(fp, NULL, comfile, FALSE, NULL); /* still to check if . or filename instead of NULL */ if (!deck) return; realdeck = inp_deckcopy(deck); if (!comfile) { /* Save the title before INPgetTitle gets it. */ tt = copy(deck->line); if (!deck->nextcard) fprintf(cp_err, "Warning: no lines in deck...\n"); } (void) fclose(fp); /* Now save the IO context and start a new control set... After * we are done with the source we'll put the old file descriptors * back. I guess we could use a FILE stack, but since this routine * is recursive anyway... */ lastin = cp_curin; lastout = cp_curout; lasterr = cp_curerr; cp_curin = cp_in; cp_curout = cp_out; cp_curerr = cp_err; cp_pushcontrol(); /* We should now go through the deck and execute front-end * commands and remove them. Front-end commands are enclosed by * the lines .control and .endc, unless comfile * is TRUE, in which case every line must be a front-end command. * There are too many problems with matching the first word on * the line. */ ld = deck; if (comfile) { /* This is easy. */ for (dd = deck; dd; dd = ld) { ld = dd->nextcard; if ((dd->line[0] == '*') && (dd->line[1] != '#')) continue; if (!ciprefix(".control", dd->line) && !ciprefix(".endc", dd->line)) { if (dd->line[0] == '*') (void) cp_evloop(dd->line + 2); else (void) cp_evloop(dd->line); } tfree(dd->line); tfree(dd); } } else { for (dd = deck->nextcard; dd; dd = ld->nextcard) { if ((dd->line[0] == '*') && (dd->line[1] != '#')) { ld = dd; continue; } (void) strncpy(name, dd->line, BSIZE_SP); s = skip_ws(name); t = skip_non_ws(s); *t = '\0'; if (ciprefix(".control", dd->line)) { ld->nextcard = dd->nextcard; tfree(dd->line); tfree(dd); if (commands) fprintf(cp_err, "Warning: redundant .control line\n"); else commands = TRUE; } else if (ciprefix(".endc", dd->line)) { ld->nextcard = dd->nextcard; tfree(dd->line); tfree(dd); if (commands) commands = FALSE; else fprintf(cp_err, "Warning: misplaced .endc line\n"); } else if (commands || prefix("*#", dd->line)) { controls = wl_cons(NULL, controls); wl = controls; if (prefix("*#", dd->line)) wl->wl_word = copy(dd->line + 2); else wl->wl_word = dd->line; ld->nextcard = dd->nextcard; tfree(dd); } else if (!*dd->line) { /* So blank lines in com files don't get * considered as circuits. */ ld->nextcard = dd->nextcard; tfree(dd->line); tfree(dd); } else { inp_casefix(s); inp_casefix(dd->line); if (eq(s, ".width") || ciprefix(".four", s) || eq(s, ".plot") || eq(s, ".print") || eq(s, ".save")) { wl_append_word(&wl, &end, copy(dd->line)); ld->nextcard = dd->nextcard; tfree(dd->line); tfree(dd); } else { ld = dd; } } } if (deck->nextcard) { /* There is something left after the controls. */ fprintf(cp_out, "\nCircuit: %s\n\n", tt); fprintf(stderr, "\nCircuit: %s\n\n", tt); /* Now expand subcircuit macros. Note that we have to * fix the case before we do this but after we * deal with the commands. */ if (!cp_getvar("nosubckt", CP_BOOL, NULL, 0)) deck->nextcard = inp_subcktexpand(deck->nextcard); deck->actualLine = realdeck; nutinp_dodeck(deck, tt, wl, FALSE, options, filename); } /* Now that the deck is loaded, do the commands... */ controls = wl_reverse(controls); for (wl = controls; wl; wl = wl->wl_next) (void) cp_evloop(wl->wl_word); wl_free(controls); } /* Now reset everything. Pop the control stack, and fix up the IO * as it was before the source. */ cp_popcontrol(); cp_curin = lastin; cp_curout = lastout; cp_curerr = lasterr; tfree(tt); } void nutcom_source(wordlist *wl) { FILE *fp, *tp; char buf[BSIZE_SP]; bool inter; char *tempfile = NULL; wordlist *owl = wl; size_t n; inter = cp_interactive; cp_interactive = FALSE; if (wl->wl_next) { /* There are several files -- put them into a temp file... */ tempfile = smktemp("sp"); if ((fp = inp_pathopen(tempfile, "w+")) == NULL) { perror(tempfile); cp_interactive = TRUE; return; } while (wl) { if ((tp = inp_pathopen(wl->wl_word, "r")) == NULL) { perror(wl->wl_word); (void) fclose(fp); cp_interactive = TRUE; (void) unlink(tempfile); return; } while ((n = fread(buf, 1, BSIZE_SP, tp)) > 0) (void) fwrite(buf, 1, n, fp); (void) fclose(tp); wl = wl->wl_next; } (void) fseek(fp, 0L, SEEK_SET); } else { fp = inp_pathopen(wl->wl_word, "r"); } if (fp == NULL) { perror(wl->wl_word); cp_interactive = TRUE; return; } /* Don't print the title if this is a .spiceinit file. */ if (ft_nutmeg || substring(INITSTR, owl->wl_word) || substring(ALT_INITSTR, owl->wl_word)) { inp_nutsource(fp, TRUE, tempfile ? NULL : wl->wl_word); } else { inp_nutsource(fp, FALSE, tempfile ? NULL : wl->wl_word); } cp_interactive = inter; if (tempfile) (void) unlink(tempfile); } void nutinp_source(char *file) { static struct wordlist wl = { NULL, NULL, NULL }; wl.wl_word = file; nutcom_source(&wl); } /* This routine is cut in half here because com_rset has to do what follows * also. End is the list of commands we execute when the job is finished: * we only bother with this if we might be running in batch mode, since * it isn't much use otherwise. */ void nutinp_dodeck(struct card *deck, char *tt, wordlist *end, bool reuse, struct card *options, char *filename) { NG_IGNORE(filename); NG_IGNORE(options); NG_IGNORE(reuse); NG_IGNORE(end); NG_IGNORE(tt); NG_IGNORE(deck); /* This was "ifdef notdef"-ed out, so I tossed it */ } tmpk8ny_4pz/src/frontend/breakp2.c0000644000175000017500000001012413546075722017256 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Code to deal with breakpoints and tracing. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/ftedebug.h" #include "quote.h" #include "breakp2.h" /* global linked list to store .save data and breakpoint data */ struct dbcomm *dbs = NULL; /* export for iplot */ /* used in breakp.c and breakp2.c */ int debugnumber = 1; static char *copynode(char* s); /* Analyse the data given by the .save card or 'save' command. Store the data in the global dbs struct. */ /* Save a vector. */ void com_save(wordlist *wl) { settrace(wl, VF_ACCUM, NULL); } /* Save a vector with the analysis type given (name). */ void com_save2(wordlist *wl, char *name) { settrace(wl, VF_ACCUM, name); } void settrace(wordlist *wl, int what, char *name) { struct dbcomm *d, *last; if (!ft_curckt) { fprintf(cp_err, "Error: no circuit loaded\n"); return; } if (dbs) for (last = dbs; last->db_next; last = last->db_next) ; else last = NULL; for (;wl ;wl = wl->wl_next) { char *s = cp_unquote(wl->wl_word); char *db_nodename1 = NULL; char db_type = 0; if (eq(s, "all")) { switch (what) { case VF_PRINT: db_type = DB_TRACEALL; break; /* case VF_PLOT: db_type = DB_IPLOTALL; break; */ case VF_ACCUM: /* db_type = DB_SAVEALL; */ db_nodename1 = copy(s); db_type = DB_SAVE; break; } tfree(s); /* wrd_chtrace(NULL, TRUE, what); */ } else { switch (what) { case VF_PRINT: db_type = DB_TRACENODE; break; /* case VF_PLOT: db_type = DB_IPLOT; break; */ case VF_ACCUM: db_type = DB_SAVE; break; } /* v(2) --> 2, i(vds) --> vds#branch */ db_nodename1 = copynode(s); tfree(s); if (!db_nodename1) /* skip on error */ continue; /* wrd_chtrace(s, TRUE, what); */ } d = TMALLOC(struct dbcomm, 1); d->db_analysis = name; d->db_type = db_type; d->db_nodename1 = db_nodename1; d->db_number = debugnumber++; if (last) last->db_next = d; else ft_curckt->ci_dbs = dbs = d; last = d; } } /* retrieve the save nodes from dbs into an array */ int ft_getSaves(struct save_info **savesp) /* global variable: dbs */ { struct dbcomm *d; int count = 0, i = 0; struct save_info *array; for (d = dbs; d; d = d->db_next) if (d->db_type == DB_SAVE) count++; if (!count) return (0); *savesp = array = TMALLOC(struct save_info, count); for (d = dbs; d; d = d->db_next) if (d->db_type == DB_SAVE) { array[i].used = 0; if (d->db_analysis) array[i].analysis = copy(d->db_analysis); else array[i].analysis = NULL; array[i++].name = copy(d->db_nodename1); } return (count); } /* v(2) --> 2, i(vds) --> vds#branch, 3 --> 3, @mn1[vth0] --> @mn1[vth0] * derived from wordlist *gettoks(char *s) */ static char* copynode(char *s) { char *l, *r; char *ret = NULL; if (strchr(s, '(')) s = stripWhiteSpacesInsideParens(s); else s = copy(s); l = strrchr(s, '('); if (!l) return s; r = strchr(s, ')'); if (!r) { fprintf(cp_err, "Warning: Missing ')' in %s\n Not saved!\n", s); tfree(s); return NULL; } *r = '\0'; if (*(l - 1) == 'i' || *(l - 1) == 'I') ret = tprintf("%s#branch", l + 1); else ret = copy(l + 1); tfree(s); return ret; } tmpk8ny_4pz/src/frontend/quote.c0000644000175000017500000000420013546075722017063 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * * Various things for quoting words. If this is not ascii, quote and * strip are no-ops, so '' and \ quoting won't work. To fix this, sell * your IBM machine and buy a vax. */ #include #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "quote.h" /* Strip all the 8th bits from a string (destructively). */ void cp_wstrip(char *str) { char c, d; if (str) while ((c = *str) != '\0') { /* assign and test */ d = (char) strip(c); if (c != d) *str = d; str++; } } /* Quote all characters in a word. */ void cp_quoteword(char *str) { if (str) while (*str) { *str = (char) quote(*str); str++; } } /* Print a word (strip the word first). */ void cp_printword(char *string, FILE *fp) { char *s; if (string) for (s = string; *s; s++) (void) putc((strip(*s)), fp); } /* (Destructively) strip all the words in a wlist. */ void cp_striplist(wordlist *wlist) { wordlist *wl; for (wl = wlist; wl; wl = wl->wl_next) cp_wstrip(wl->wl_word); } /* Create a copy of the input string removing the enclosing quotes, * if they are present */ char * cp_unquote(const char *p_src) { if (!p_src) { /* case of no string */ return (char *) NULL; } const size_t len_src = strlen(p_src); /* input str length */ size_t len_dst; /* If enclosed in quotes locate the source after the quote and * make the destination length 2 chars less */ if (len_src >= 2 && *p_src == '"' && p_src[len_src - 1] == '"') { len_dst = len_src - 2; ++p_src; /* step past first quote */ } else { /* not enclosed in quotes */ len_dst = len_src; } /* Allocate string being returned and fill. */ char * const p_dst = TMALLOC(char, len_dst + 1); strncpy(p_dst, p_src, len_dst); p_dst[len_dst] = '\0'; return p_dst; } /* end of function cp_unquote */ tmpk8ny_4pz/src/frontend/testcommands.c0000644000175000017500000000061213546075722020432 0ustar carstencarsten#include #include "commands.h" void print_struct_comm(struct comm coms[]) { int i; for (i = 0; coms[i].co_comname != NULL; i++) { printf("Command: %s\n" "help: %s\n\n", coms[i].co_comname, coms[i].co_help); } } int main(void) { print_struct_comm(nutcp_coms); print_struct_comm(spcp_coms); return 0; } tmpk8ny_4pz/src/frontend/circuits.c0000644000175000017500000000122713546075722017561 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* Routines for dealing with the circuit database. This is currently * unimplemented. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "circuits.h" struct circ *ft_curckt = NULL; /* The default active circuit. */ struct circ *ft_circuits = NULL; /* Now stuff to deal with circuits */ /* Add a circuit to the circuit list */ void ft_newcirc(struct circ *ci) { ci->ci_next = ft_circuits; ft_circuits = ci; } tmpk8ny_4pz/src/frontend/numparam/0000755000175000017500000000000013546075722017406 5ustar carstencarstentmpk8ny_4pz/src/frontend/numparam/Makefile.am0000644000175000017500000000052513546075722021444 0ustar carstencarsten## Process this file with automake to produce Makefile.in EXTRA_DIST = readme.txt noinst_LTLIBRARIES = libnumparam.la libnumparam_la_SOURCES = \ spicenum.c \ xpressn.c \ mystring.c \ general.h \ numpaif.h \ numparam.h AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/frontend/numparam/xpressn.c0000644000175000017500000011737513546075722021272 0ustar carstencarsten/* xpressn.c Copyright (C) 2002 Georg Post This file is part of Numparam, see: readme.txt Free software under the terms of the GNU Lesser General Public License */ #include "ngspice/ngspice.h" #include "general.h" #include "numparam.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "../frontend/variable.h" #include "ngspice/compatmode.h" #include "ngspice/stringskip.h" /* random numbers in /maths/misc/randnumb.c */ #include "ngspice/randnumb.h" /************ keywords ************/ extern long dynsubst; /* see inpcom.c */ #define ACT_CHARACTS 25 /* actual string length to be inserted and replaced */ #define S_init 0 #define S_atom 1 #define S_binop 2 #define S_unop 3 #define S_stop 4 static double ternary_fcn(double conditional, double if_value, double else_value) { if (conditional != 0.0) return if_value; else return else_value; } static double agauss(double nominal_val, double abs_variation, double sigma) { double stdvar; stdvar = abs_variation / sigma; return (nominal_val + stdvar * gauss1()); } static double gauss(double nominal_val, double rel_variation, double sigma) { double stdvar; stdvar = nominal_val * rel_variation / sigma; return (nominal_val + stdvar * gauss1()); } static double unif(double nominal_val, double rel_variation) { return (nominal_val + nominal_val * rel_variation * drand()); } static double aunif(double nominal_val, double abs_variation) { return (nominal_val + abs_variation * drand()); } static double limit(double nominal_val, double abs_variation) { return (nominal_val + (drand() > 0 ? abs_variation : -1. * abs_variation)); } static const char *fmathS = /* all math functions */ "sqr sqrt sin cos exp ln arctan abs pow pwr max min int log log10 sinh cosh" " tanh ternary_fcn agauss sgn gauss unif aunif limit ceil floor" " asin acos atan asinh acosh atanh tan nint"; enum { XFU_SQR = 1, XFU_SQRT, XFU_SIN, XFU_COS, XFU_EXP, XFU_LN, XFU_ARCTAN, XFU_ABS, XFU_POW, XFU_PWR, XFU_MAX, XFU_MIN, XFU_INT, XFU_LOG, XFU_LOG10, XFU_SINH, XFU_COSH, XFU_TANH, XFU_TERNARY_FCN, XFU_AGAUSS, XFU_SGN, XFU_GAUSS, XFU_UNIF, XFU_AUNIF, XFU_LIMIT, XFU_CEIL, XFU_FLOOR, XFU_ASIN, XFU_ACOS, XFU_ATAN, XFU_ASINH, XFU_ACOSH, XFU_ATANH, XFU_TAN, XFU_NINT }; static double mathfunction(int f, double z, double x) /* the list of built-in functions. Patch 'fmath', here and near line 888 to get more ...*/ { double y; switch (f) { case XFU_SQR: y = x * x; break; case XFU_SQRT: y = sqrt(x); break; case XFU_SIN: y = sin(x); break; case XFU_COS: y = cos(x); break; case XFU_EXP: y = exp(x); break; case XFU_LN: y = log(x); break; case XFU_ARCTAN: y = atan(x); break; case XFU_ABS: y = fabs(x); break; case XFU_POW: y = pow(z, x); break; case XFU_PWR: y = pow(fabs(z), x); break; case XFU_MAX: y = MAX(x, z); break; case XFU_MIN: y = MIN(x, z); break; case XFU_INT: y = trunc(x); break; case XFU_NINT: /* round to "nearest integer", * round half-integers to the nearest even integer * rely on default rounding mode of IEEE 754 to do so */ y = nearbyint(x); break; case XFU_LOG: y = log(x); break; case XFU_LOG10: y = log10(x); break; case XFU_SINH: y = sinh(x); break; case XFU_COSH: y = cosh(x); break; case XFU_TANH: y = tanh(x); break; case XFU_SGN: if (x > 0) y = 1.; else if (x == 0) y = 0.; else y = -1.; break; case XFU_CEIL: y = ceil(x); break; case XFU_FLOOR: y = floor(x); break; case XFU_ASIN: y = asin(x); break; case XFU_ACOS: y = acos(x); break; case XFU_ATAN: y = atan(x); break; case XFU_ASINH: y = asinh(x); break; case XFU_ACOSH: y = acosh(x); break; case XFU_ATANH: y = atanh(x); break; case XFU_TAN: y = tan(x); break; default: y = x; break; } return y; } #ifdef __GNUC__ static bool message(dico_t *dico, const char *fmt, ...) __attribute__ ((format (__printf__, 2, 3))); #endif static bool message(dico_t *dico, const char *fmt, ...) { va_list ap; if (dico->srcline >= 0) fprintf (stderr, "Original line no.: %d, new internal line no.: %d:\n", dico->oldline, dico->srcline); va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); dico->errcount++; return 1; /* error! */ } /************ the input text symbol table (dictionary) *************/ void initdico(dico_t *dico) { int asize = 10; /* default allocation depth of the synbol stack */ dico->srcline = -1; dico->errcount = 0; dico->symbols = TMALLOC(NGHASHPTR, asize); dico->inst_name = TMALLOC(char*, asize); dico->max_stack_depth = asize; dico->stack_depth = 0; /* top of the stack */ dico->symbols[0] = nghash_init(NGHASH_MIN_SIZE); nghash_unique(dico->symbols[0], TRUE); /* no rewrite of global symbols */ dico->inst_symbols = NULL; /* instance qualified are lazily allocated */ if (inp_compat_mode == COMPATMODE_HS) dico->hs_compatibility = 1; else dico->hs_compatibility = 0; } void dico_free_entry(entry_t *entry) { if (entry->symbol) txfree(entry->symbol); txfree(entry); } /* local semantics for parameters inside a subckt */ /* arguments as wll as .param expressions */ /* to do: scope semantics ? "params:" and all new symbols should have local scope inside subcircuits. redefinition of old symbols gives a warning message. */ static void dicostack_push(dico_t *dico, char *inst_name) /* push operation for nested subcircuit locals */ { dico->stack_depth++; if (dico->stack_depth >= dico->max_stack_depth) { int asize = (dico->max_stack_depth *= 2); dico->symbols = TREALLOC(NGHASHPTR, dico->symbols, asize); dico->inst_name = TREALLOC(char*, dico->inst_name, asize); } /* lazy allocation - don't allocate space if we can help it */ dico->symbols[dico->stack_depth] = NULL; dico->inst_name[dico->stack_depth] = inst_name; } static void dicostack_pop(dico_t *dico) /* pop operation for nested subcircuit locals */ { char *inst_name; /* name of subcircuit instance */ char *param_p; /* qualified inst parameter name */ entry_t *entry; /* current entry */ NGHASHPTR htable_p; /* current hash table */ NGHASHITER iter; /* hash iterator - thread safe */ if (dico->stack_depth <= 0) { message(dico, " Subckt Stack underflow.\n"); return; } /* ----------------------------------------------------------------- * Keep instance parameters around by transferring current local * scope variables to an instance qualified hash table. * ----------------------------------------------------------------- */ inst_name = dico->inst_name[dico->stack_depth]; htable_p = dico->symbols[dico->stack_depth]; if (htable_p) { SPICE_DSTRING param_name; /* build a qualified name */ spice_dstring_init(¶m_name); NGHASH_FIRST(&iter); for (entry = (entry_t *) nghash_enumerateRE(htable_p, &iter); entry; entry = (entry_t *) nghash_enumerateRE(htable_p, &iter)) { spice_dstring_reinit(¶m_name); param_p = spice_dstring_print(¶m_name, "%s.%s", inst_name, entry->symbol); nupa_add_inst_param(param_p, entry->vl); dico_free_entry(entry); } nghash_free(htable_p, NULL, NULL); spice_dstring_free(¶m_name); } tfree(inst_name); dico->inst_name[dico->stack_depth] = NULL; dico->symbols[dico->stack_depth] = NULL; dico->stack_depth--; } int donedico(dico_t *dico) { int sze = nghash_get_size(dico->symbols[0]); return sze; } /* ----------------------------------------------------------------- * Now entryb works on the given hash table hierarchy. First * look thru the stack of local symbols and then look at the global * symbols in that order. * ----------------------------------------------------------------- */ entry_t * entrynb(dico_t *dico, char *s) { int depth; /* stack depth */ entry_t *entry; /* search hash table */ NGHASHPTR htable_p; /* hash table */ /* look at the current scope and then backup the stack */ for (depth = dico->stack_depth; depth >= 0; depth--) { htable_p = dico->symbols[depth]; if (htable_p) { entry = (entry_t *) nghash_find(htable_p, s); if (entry) return (entry); } } return NULL; } static double fetchnumentry(dico_t *dico, char *s, bool *perr) { entry_t *entry = entrynb(dico, s); if (entry && (entry->tp == NUPA_REAL)) return entry->vl; *perr = message(dico, "Undefined number [%s]\n", s); return 0.0; } /******* writing dictionary entries *********/ entry_t * attrib(dico_t *dico, NGHASHPTR htable_p, char *t, char op) { /* seek or attribute dico entry number for string t. Option op='N' : force a new entry, if tos>level and old is valid. */ entry_t *entry; /* symbol table entry */ entry = (entry_t *) nghash_find(htable_p, t); if (entry && (op == 'N') && (entry->level < dico->stack_depth) && (entry->tp != NUPA_UNKNOWN)) { entry = NULL; } if (!entry) { entry = TMALLOC(entry_t, 1); entry->symbol = copy(t); entry->tp = NUPA_UNKNOWN; /* signal Unknown */ entry->level = dico->stack_depth; nghash_insert(htable_p, t, entry); } return entry; } /* user defined delete function: * free the dictionary entries malloc'ed above * will be called by nghash_free() in nupa_del_dicoS() */ void del_attrib(void *entry_p) { entry_t *entry = (entry_t*) entry_p; if(entry) { tfree(entry->symbol); tfree(entry); } } static bool nupa_define(dico_t *dico, char *t, /* identifier to define */ char op, /* option */ nupa_type tpe, /* type marker */ double z, /* float value if any */ int w, /* integer value if any */ char *base) /* string pointer if any */ { /*define t as real or integer, opcode= 'N' impose a new item under local conditions. check for pointers, too, in full macrolanguage version: Call with 'N','P',0.0, ksymbol ... for VAR parameter passing. Overwrite warning, beware: During 1st pass (macro definition), we already make symbol entries which are dummy globals ! we mark each id with its subckt level, and warn if write at higher one. */ nupa_type c; bool warn; entry_t *entry; /* spice table entry */ NGHASHPTR htable_p; /* hash table */ /* can't be lazy anymore */ if (!(dico->symbols[dico->stack_depth])) dico->symbols[dico->stack_depth] = nghash_init(NGHASH_MIN_SIZE); htable_p = dico->symbols[dico->stack_depth]; entry = attrib(dico, htable_p, t, op); if (!entry) return message(dico, " Symbol table overflow\n"); c = entry->tp; if (c != NUPA_SUBCKT) { entry->vl = z; entry->tp = tpe; entry->ivl = w; entry->sbbase = base; /* if ((c != '?') && (i <= dico->stack[dico->tos])) { */ if (c == NUPA_UNKNOWN) entry->level = dico->stack_depth; /* promote! */ /* warn about re-write to a global scope! */ if (entry->level < dico->stack_depth) warn = message(dico, "%s:%d overwritten.\n", t, entry->level); } else { /* error message for redefinition of subcircuits */ if (0) message(dico, "subckt %s is already used,\n cannot be redefined\n", t); } return 0; } bool defsubckt(dico_t *dico, struct card *card) /* called on 1st pass of spice source code, to enter subcircuit names */ { const char *s = card->line; int w = card->linenum; bool err; const char *s_end; while (*s && (*s != '.')) s++; /* skip 1st dotword */ while (*s && (*s > ' ')) s++; while (*s && (*s <= ' ')) s++; /* skip blank */ s_end = s; while (*s_end && (*s_end > ' ')) s_end++; if (s_end > s) { SPICE_DSTRING ustr; /* temp user string */ spice_dstring_init(&ustr); pscopy(&ustr, s, s_end); err = nupa_define(dico, spice_dstring_value(&ustr), ' ', NUPA_SUBCKT, 0.0, w, NULL); spice_dstring_free(&ustr); } else { err = message(dico, "Subcircuit or Model without name.\n"); } return err; } int findsubckt(dico_t *dico, const char *s) /* input: s is a subcircuit invocation line. returns 0 if not found, else the stored definition line number value */ { const char *name_e = skip_back_ws(s + strlen(s), s); const char *name_b = skip_back_non_ws(name_e, s); SPICE_DSTRING ustr; /* u= subckt name is last token in string s */ entry_t *entry; /* symbol table entry */ spice_dstring_init(&ustr); pscopy(&ustr, name_b, name_e); entry = entrynb(dico, spice_dstring_value(&ustr)); spice_dstring_free(&ustr); if (entry && (entry->tp == NUPA_SUBCKT)) { return entry->ivl; } else { message(dico, "Cannot find subcircuit.\n"); return 0; } } /************ input scanner stuff **************/ static unsigned char keyword(const char *keys, const char *s, const char *s_end) { /* return 0 if s not found in list keys, else the ordinal number */ unsigned char j = 1; if (!*s) return 0; for (;;) { const char *p = s; while ((p < s_end) && (*p == *keys)) p++, keys++; if ((p >= s_end) && (*keys <= ' ')) return j; keys = strchr(keys, ' '); if (!keys) return 0; keys++; j++; } } static double parseunit(const char *s) /* the Spice suffixes */ { switch (toupper_c(s[0])) { case 'T': return 1e12; case 'G': return 1e9; case 'K': return 1e3; case 'M': return ciprefix("MEG", s) ? 1e6 : 1e-3; case 'U': return 1e-6; case 'N': return 1e-9; case 'P': return 1e-12; case 'F': return 1e-15; default : return 1; } } static const char * fetchid(const char *s, const char *s_end) { for (; s < s_end; s++) if (!(alfanum(*s) || *s == '.')) return s; return s; } static double fetchnumber(dico_t *dico, const char **pi, bool *perror) /* parse a Spice number in string s */ { double u; int n = 0; const char *s = *pi; if (1 != sscanf(s, "%lG%n", &u, &n)) { *perror = message(dico, "Number format error: \"%s\"\n", s); return 0.0; /* FIXME return NaN */ } u *= parseunit(s + n); /* swallow unit * FIXME `100MegBaz42' should emit an error message * FIXME should we allow whitespace ? `100 MEG' ? */ while (s[n] && alfa(s[n])) n++; *pi += n; return u; } static char fetchoperator(dico_t *dico, const char *s_end, const char **pi, unsigned char *pstate, unsigned char *plevel, bool *perror) /* grab an operator from string s and advance scan index pi. each operator has: one-char alias, precedence level, new interpreter state. */ { const char *iptr = *pi; unsigned char state = *pstate; unsigned char level = *plevel; bool error = *perror; char c, d; c = *iptr++; d = *iptr; if (iptr >= s_end) d = '\0'; if ((c == '!') && (d == '=')) { c = '#'; iptr++; } else if ((c == '<') && (d == '>')) { c = '#'; iptr++; } else if ((c == '<') && (d == '=')) { c = 'L'; iptr++; } else if ((c == '>') && (d == '=')) { c = 'G'; iptr++; } else if ((c == '*') && (d == '*')) { c = '^'; iptr++; } else if ((c == '=') && (d == '=')) { iptr++; } else if ((c == '&') && (d == '&')) { c = 'A'; iptr++; } else if ((c == '|') && (d == '|')) { c = 'O'; iptr++; } if ((c == '+') || (c == '-')) { state = S_binop; /* pending operator */ level = 4; } else if ((c == '*') || (c == '/') || (c == '%') || (c == '\\')) { state = S_binop; level = 3; } else if (c == '^') { state = S_binop; level = 2; } else if (strchr("=<>#GL", c)) { state = S_binop; level = 5; } else if (c == 'A') { state = S_binop; level = 6; } else if (c == 'O') { state = S_binop; level = 7; } else if (c == '!') { state = S_unop; } else if (c == '?') { state = S_binop; level = 9; } else if (c == ':') { state = S_binop; level = 8; } else { state = S_init; if (c > ' ') error = message(dico, "Syntax error: letter [%c]\n", c); } *pi = iptr; *pstate = state; *plevel = level; *perror = error; return c; } static double operate(char op, double x, double y) { /* execute operator op on a pair of reals */ /* bug: x:=x op y or simply x:=y for empty op? No error signalling! */ double u = 1.0; double z = 0.0; double t; switch (op) { case ' ': x = y; /* problem here: do type conversions ?! */ break; case '+': x = x + y; break; case '-': x = x - y; break; case '*': x = x * y; break; case '/': x = x / y; break; case '^': /* power */ x = pow(fabs(x), y); break; case 'A': /* && */ x = ((x != 0.0) && (y != 0.0)) ? 1.0 : 0.0; break; case 'O': /* || */ x = ((x != 0.0) || (y != 0.0)) ? 1.0 : 0.0; break; case '=': if (x == y) x = u; else x = z; break; case '#': /* <> */ if (x != y) x = u; else x = z; break; case '>': if (x > y) x = u; else x = z; break; case '<': if (x < y) x = u; else x = z; break; case 'G': /* >= */ if (x >= y) x = u; else x = z; break; case 'L': /* <= */ if (x <= y) x = u; else x = z; break; case '!': /* ! */ if (y == z) x = u; else x = z; break; case '%': /* % */ t = trunc(x / y); x = x - y * t; break; case '\\': /* / */ x = trunc(fabs(x / y)); break; } return x; } #define nprece 9 /* maximal nb of precedence levels */ static double formula(dico_t *dico, const char *s, const char *s_end, bool *perror) { /* Expression parser. s is a formula with parentheses and math ops +-* / ... State machine and an array of accumulators handle operator precedence. Parentheses handled by recursion. Empty expression is forbidden: must find at least 1 atom. Syntax error if no toggle between binoperator && (unop/state1) ! States : 1=atom, 2=binOp, 3=unOp, 4= stop-codon. Allowed transitions: 1->2->(3,1) and 3->(3,1). */ bool error = *perror; bool negate = 0; unsigned char state, oldstate, topop, ustack, level, fu; double u = 0.0; double accu[nprece + 1]; char oper[nprece + 1]; char uop[nprece + 1]; int i, natom; bool ok; SPICE_DSTRING tstr; const char *s_orig = s; spice_dstring_init(&tstr); for (i = 0; i <= nprece; i++) { accu[i] = 0.0; oper[i] = ' '; } /* trim trailing whitespace */ while ((s_end > s) && (s_end[-1] <= ' ')) s_end--; state = S_init; natom = 0; ustack = 0; topop = 0; oldstate = S_init; fu = 0; error = 0; level = 0; while ((s < s_end) && !error) { char c = *s; if (c == '(') { /* sub-formula or math function */ double v = 1.0, w = 0.0; /* new: must support multi-arg functions */ const char *kptr = ++s; const char *arg2 = NULL; const char *arg3 = NULL; level = 1; for (; kptr < s_end; kptr++) { char d = *kptr; if (d == '(') level++; else if (d == ')') level--; if ((d == ',') && (level == 1)) { if (arg2 == NULL) arg2 = kptr; else arg3 = kptr; /* kludge for more than 2 args (ternary expression) */ } /* comma list? */ if ((d == ')') && (level <= 0)) { break; } } // fixme, here level = 0 !!!!! (almost) if (kptr >= s_end) { error = message(dico, "Closing \")\" not found.\n"); natom++; /* shut up other error message */ } else { if (arg2 >= s) { v = formula(dico, s, arg2, &error); s = arg2 + 1; } if (arg3 >= s) { w = formula(dico, s, arg3, &error); s = arg3 + 1; } u = formula(dico, s, kptr, &error); state = S_atom; if (fu > 0) { if ((fu == XFU_TERNARY_FCN)) u = ternary_fcn(v, w, u); else if ((fu == XFU_AGAUSS)) u = agauss(v, w, u); else if ((fu == XFU_GAUSS)) u = gauss(v, w, u); else if ((fu == XFU_UNIF)) u = unif(v, u); else if ((fu == XFU_AUNIF)) u = aunif(v, u); else if ((fu == XFU_LIMIT)) u = limit(v, u); else u = mathfunction(fu, v, u); } } s = kptr + 1; fu = 0; } else if (alfa(c)) { const char *s_next = fetchid(s, s_end); fu = keyword(fmathS, s, s_next); /* numeric function? */ if (fu > 0) { state = S_init; /* S_init means: ignore for the moment */ } else { spice_dstring_reinit(&tstr); pscopy(&tstr, s, s_next); u = fetchnumentry(dico, spice_dstring_value(&tstr), &error); state = S_atom; } s = s_next; } else if (((c == '.') || ((c >= '0') && (c <= '9')))) { u = fetchnumber(dico, &s, &error); if (negate) { u = -1 * u; negate = 0; } state = S_atom; } else { c = fetchoperator(dico, s_end, &s, &state, &level, &error); } /* may change c to some other operator char! */ /* control chars <' ' ignored */ ok = (oldstate == S_init) || (state == S_init) || ((oldstate == S_atom) && (state == S_binop)) || ((oldstate != S_atom) && (state != S_binop)); if (oldstate == S_binop && state == S_binop && c == '-') { ok = 1; negate = 1; continue; } if (!ok) error = message(dico, " Misplaced operator\n"); if (state == S_unop) { /* push unary operator */ uop[++ustack] = c; } else if (state == S_atom) { /* atom pending */ natom++; if (s >= s_end) { state = S_stop; level = topop; } /* close all ops below */ while (ustack > 0) u = operate(uop[ustack--], u, u); accu[0] = u; /* done: all pending unary operators */ } if ((state == S_binop) || (state == S_stop)) { /* do pending binaries of priority Upto "level" */ for (i = 1; i <= level; i++) { if (i < level && oper[i] == ':' && (oper[i+1] == '?' || oper[i+1] == 'x')) { if (oper[i+1] == 'x') { /* this is a `first-of-triple' op */ accu[i+1] = accu[i+1]; c = 'x'; /* transform next '?' to 'first-of-triple' */ } else if (accu[i+1] != 0.0) { /* this is a `true' ternary */ accu[i+1] = accu[i]; c = 'x'; /* transform next '?' to `first-of-triple' */ } else { /* this is a `false' ternary */ accu[i+1] = accu[i-1]; } accu[i-1] = 0.0; oper[i] = ' '; /* reset intermediates */ i++; accu[i-1] = 0.0; oper[i] = ' '; /* reset intermediates */ } else { /* not yet speed optimized! */ accu[i] = operate(oper[i], accu[i], accu[i-1]); accu[i-1] = 0.0; oper[i] = ' '; /* reset intermediates */ } } oper[level] = c; if (topop < level) topop = level; } if (state != S_init) oldstate = state; } if ((natom == 0) || (oldstate != S_stop)) error = message(dico, " Expression err: %s\n", s_orig); if (negate == 1) error = message(dico, " Problem with formula eval -- wrongly determined negation!\n"); *perror = error; spice_dstring_free(&tstr); if (error) return 1.0; else return accu[topop]; } /* stupid, produce a string representation of a given double * to be spliced back into the circuit deck * we want *exactly* 25 chars, we have * sign, leading digit, '.', 'e', sign, upto 3 digits exponent * ==> 8 chars, thus we have 17 left for precision * don't print a leading '+', something choked */ static void double_to_string(SPICE_DSTRINGPTR qstr_p, double value) { char buf[ACT_CHARACTS + 1]; if (snprintf(buf, sizeof(buf), "% 25.17e", value) != ACT_CHARACTS) { fprintf(stderr, "ERROR: xpressn.c, %s(%d)\n", __FUNCTION__, __LINE__); controlled_exit(1); } scopys(qstr_p, buf); } /* transform exression in string `t' to result q */ static bool evaluate_expr(dico_t *dico, SPICE_DSTRINGPTR qstr_p, const char *t, const char * const t_end) { bool err = 0; double u; spice_dstring_reinit(qstr_p); u = formula(dico, t, t_end, &err); if (err) return err; double_to_string(qstr_p, u); return 0; } /********* interface functions for spice3f5 extension ***********/ static char * insertnumber(dico_t *dico, char * const s, SPICE_DSTRINGPTR ustr_p) /* insert u in string s in place of the next placeholder number */ { const char *u = spice_dstring_value(ustr_p); char buf[ACT_CHARACTS+1]; long id = 0; int n = 0; char *p = strstr(s, "numparm__________"); if (p && (1 == sscanf(p, "numparm__________%8lx%n", &id, &n)) && (n == ACT_CHARACTS) && (id > 0) && (id < dynsubst + 1) && (snprintf(buf, sizeof(buf), "%-25s", u) == ACT_CHARACTS)) { memcpy(p, buf, ACT_CHARACTS); return p + ACT_CHARACTS; } message (dico, "insertnumber: fails.\n" " s = \"%s\" u=\"%s\" id=%ld\n", s, u, id); /* swallow everything on failure */ return s + strlen(s); } bool nupa_substitute(dico_t *dico, const char *s, char *r) /* s: pointer to original source line. r: pointer to result line, already heavily modified wrt s anywhere we find a 10-char numstring in r, substitute it. bug: wont flag overflow! */ { const char * const s_end = s + strlen(s); bool err = 0; SPICE_DSTRING qstr; /* temp result dynamic string */ spice_dstring_init(&qstr); while (s < s_end) { char c = *s++; if (c == '{') { /* try ps expression syntax */ const char *kptr = s; int nnest = 1; for (; *kptr; kptr++) { char d = *kptr; if (d == '{') nnest++; else if (d == '}') nnest--; if (nnest == 0) break; } if (*kptr == '\0') { err = message(dico, "Closing \"}\" not found.\n"); goto Lend; } /* exeption made for .meas */ if (s + 4 == kptr && strncasecmp(s, "LAST", 4) == 0) { spice_dstring_reinit(&qstr); sadd(&qstr, "last"); } else { err = evaluate_expr(dico, &qstr, s, kptr); if (err) { err = message(dico, "Cannot compute substitute\n"); goto Lend; } } s = kptr + 1; r = insertnumber(dico, r, &qstr); } } Lend: spice_dstring_free(&qstr); return err; } static const char * getword(const char *s, SPICE_DSTRINGPTR tstr_p) { const char *s_end = s + strlen(s); const char *word; while ((s < s_end - 1) && !alfa(*s)) s++; word = s; while (alfa(*s) || isdigit_c(*s)) s++; spice_dstring_reinit(tstr_p); pscopy(tstr_p, word, s); return s; } static char * getexpress(nupa_type *type, SPICE_DSTRINGPTR tstr_p, const char *s) /* returns expression-like string until next separator Input i=position before expr, output i=just after expr, on separator. returns tpe=='R' if (numeric, 'S' if (string only */ { const char * const s_end = s + strlen(s); const char *p; nupa_type tpe; while ((s < s_end - 1) && (*s <= ' ')) s++; /*white space ? */ if (*s == '"') { /* string constant */ s++; p = s; while ((p < s_end - 1) && (*p != '"')) p++; do p++; while ((p < s_end) && (*p <= ' ')); tpe = NUPA_STRING; } else { if (*s == '{') s++; p = s; for (; p < s_end; p++) { if (strchr(",;)}", *p)) /* legal separators */ break; if (*p == '(') { /* sub-formula */ int level = 1; p++; for (; p < s_end; p++) { char d = *p; if (d == '(') level++; else if (d == ')') level--; if (level <= 0) break; } } } tpe = NUPA_REAL; } pscopy(tstr_p, s, p); if (*p == '}') p++; if (tpe == NUPA_STRING) p++; /* beyond quote */ if (type) *type = tpe; return (char *) p; } bool nupa_assignment(dico_t *dico, const char *s, char mode) /* is called for all 'Param' lines of the input file. is also called for the params: section of a subckt . mode='N' define new local variable, else global... bug: we cannot rely on the transformed line, must re-parse everything! */ { /* s has the format: ident = expression; ident= expression ... */ const char * const s_end = s + strlen(s); const char *p = s; bool error = 0; nupa_type dtype; int wval = 0; double rval = 0.0; char *t_p; /* dstring contents value */ SPICE_DSTRING tstr; /* temporary dstring */ SPICE_DSTRING ustr; /* temporary dstring */ spice_dstring_init(&tstr); spice_dstring_init(&ustr); while ((p < s_end) && (*p <= ' ')) p++; if (*p == '.') /* skip any dot keyword */ while (*p > ' ') p++; while (p < s_end) { p = getword(p, &tstr); t_p = spice_dstring_value(&tstr); if (t_p[0] == '\0') { error = message(dico, " Identifier expected\n"); break; } /* assignment expressions */ while ((p < s_end) && (*p != '=')) p++; if (p >= s_end) { error = message(dico, " = sign expected.\n"); break; } p = getexpress(&dtype, &ustr, p + 1) + 1; if (dtype == NUPA_REAL) { const char *tmp = spice_dstring_value(&ustr); rval = formula(dico, tmp, tmp + strlen(tmp), &error); if (error) { message(dico, " Formula() error.\n" " %s\n", s); break; } } else if (dtype == NUPA_STRING) { wval = (int) (p - s); } error = nupa_define(dico, spice_dstring_value(&tstr), mode /* was ' ' */ , dtype, rval, wval, NULL); if (error) break; if ((p < s_end) && (p[-1] != ';')) { error = message(dico, " ; sign expected.\n"); break; } } spice_dstring_free(&tstr); spice_dstring_free(&ustr); return error; } /* * search for whitespace delimited occurence of `identifier' in str * delimited by whitespace or begin/end of string */ static char * search_isolated_identifier(char *str, const char *identifier) { char *str_begin = str; while ((str = strstr(str, identifier)) != NULL) { if (str <= str_begin || isspace_c(str[-1])) { char after = str[strlen(identifier)]; if (!after || isspace_c(after)) return str; } str += strlen(identifier); } return NULL; } bool nupa_subcktcall(dico_t *dico, const char *s, const char *x, char *inst_name) /* s= a subckt define line, with formal params. x= a matching subckt call line, with actual params */ { int n, narg = 0; SPICE_DSTRING subname; SPICE_DSTRING tstr; SPICE_DSTRING ustr; SPICE_DSTRING vstr; SPICE_DSTRING idlist; bool err = 0; spice_dstring_init(&subname); spice_dstring_init(&tstr); spice_dstring_init(&ustr); spice_dstring_init(&vstr); spice_dstring_init(&idlist); /***** first, analyze the subckt definition line */ n = 0; /* number of parameters if any */ scopys(&tstr, s); const char *j2 = strstr(spice_dstring_value(&tstr), "subckt"); if (j2) { j2 = skip_ws(j2 + 6); /* skip subckt and whitespace */ pscopy(&subname, j2, skip_non_ws(j2)); } else { err = message(dico, " ! a subckt line!\n"); } const char *i2 = strstr(spice_dstring_value(&tstr), "params:"); if (i2) { const char *optr, *jptr; pscopy(&tstr, i2 + 7, NULL); /* search identifier to the left of '=' assignments */ for (optr = spice_dstring_value(&tstr); (jptr = strchr(optr, '=')) != NULL; optr = jptr + 1) { const char *kptr, *hptr; /* skip "==" */ if (jptr[1] == '=') { jptr++; continue; } /* skip "<=" ">=" "!=" */ if (jptr > optr && strchr("<>!", jptr[-1])) continue; kptr = jptr; while (--kptr >= optr && isspace_c(*kptr)) ; hptr = kptr; while (hptr >= optr && alfanum(*hptr)) hptr--; if (hptr < kptr && alfa(hptr[1])) { while (hptr++ < kptr) cadd(&idlist, *hptr); sadd(&idlist, "=$;"); n++; } else { message(dico, "identifier expected.\n"); } } } /***** next, analyze the circuit call line */ if (!err) { /* skip over instance name -- fixes bug where instance 'x1' is same name as subckt 'x1' */ scopys(&tstr, skip_non_ws(x)); char * const t_p = spice_dstring_value(&tstr); char *jp = NULL; /* search for the last occurence of `subname' in the given line */ for (;;) { char *next_p = search_isolated_identifier(jp ? jp + 1 : t_p, spice_dstring_value(&subname)); if (!next_p) break; jp = next_p; } if (jp) { jp += spice_dstring_length(&subname); while (isspace_c(*jp) || (*jp == ',')) jp++; /* jp is pointing to the 1st position of arglist now */ while (*jp) { /* try to fetch valid arguments */ char *kp = jp; spice_dstring_reinit(&ustr); if (alfanum(*kp) || *kp == '.') { /* number, identifier */ jp = skip_non_ws(kp); pscopy(&ustr, kp, jp); } else if (*kp == '{') { jp = getexpress(NULL, &ustr, jp); } else { jp++; if (*kp > ' ') message(dico, "Subckt call, symbol %c not understood\n", *kp); } char * const u_p = spice_dstring_value(&ustr); if (*u_p) { char * const idlist_p = spice_dstring_value(&idlist); char *dollar = strchr(idlist_p, '$'); if (dollar) { /* replace dollar with expression string u */ pscopy(&vstr, idlist_p, dollar); sadd(&vstr, u_p); sadd(&vstr, dollar + 1); scopyd(&idlist, &vstr); } narg++; } } } else { message(dico, "Cannot find called subcircuit\n"); } } /***** finally, execute the multi-assignment line */ dicostack_push(dico, inst_name); /* create local symbol scope */ if (narg != n) { err = message(dico, " Mismatch: %d formal but %d actual params.\n" "%s\n", n, narg, spice_dstring_value(&idlist)); /* ;} else { debugwarn(dico, idlist) */ } err = nupa_assignment(dico, spice_dstring_value(&idlist), 'N'); spice_dstring_free(&subname); spice_dstring_free(&tstr); spice_dstring_free(&ustr); spice_dstring_free(&vstr); spice_dstring_free(&idlist); return err; } void nupa_subcktexit(dico_t *dico) { dicostack_pop(dico); } struct nupa_type { /* used as a type-checked enum */ const char *name; }; const struct nupa_type S_nupa_real = { "NUPA_REAL" }; const struct nupa_type S_nupa_string = { "NUPA_STRING" }; const struct nupa_type S_nupa_subckt = { "NUPA_SUBCKT" }; const struct nupa_type S_nupa_unknown = { "NUPA_UNKNOWN" }; tmpk8ny_4pz/src/frontend/numparam/spicenum.c0000644000175000017500000005155313546075722021406 0ustar carstencarsten/* spicenum.c Copyright (C) 2002 Georg Post * * This file is part of Numparam, see: readme.txt * Free software under the terms of the GNU Lesser General Public License */ /* number parameter add-on for Spice. to link with mystring.o, xpressn.o (math formula interpreter), and with Spice frontend src/lib/fte.a . Interface function nupa_signal to tell us about automaton states. Buglist (some are 'features'): blank lines get category '*' inserts conditional blanks before or after braces between .control and .endc, flags all lines as 'category C', dont touch. there are reserved magic numbers (1e9 + n) as placeholders control lines must not contain {} . ignores the '.option numparam' line planned to trigger the actions operation of .include certainly doesnt work there are frozen maxima for source and expanded circuit size. Todo: add support for nested .if .elsif .else .endif controls. */ #include "ngspice/ngspice.h" #include "general.h" #include "numparam.h" #include "ngspice/fteext.h" #include "ngspice/stringskip.h" #include "ngspice/compatmode.h" #ifdef SHARED_MODULE extern ATTRIBUTE_NORETURN void shared_exit(int status); #endif extern bool ft_batchmode; /* number of parameter substitutions, available only after the substitution */ extern long dynsubst; /* spicenum.c:144 */ /* number of lines in input deck */ extern int dynmaxline; /* inpcom.c:1529 */ /* Uncomment this line to allow debug tracing */ /* #define TRACE_NUMPARAMS */ /* the nupa_signal arguments sent from Spice: sig=1: Start of the subckt expansion. sig=2: Stop of the subckt expansion. sig=3: Stop of the evaluation phase. sig=0: Start of a deck copy operation After sig=1 until sig=2, nupa_copy does no transformations. At sig=2, we prepare for nupa_eval loop. After sig=3, we assume the initial state (clean). In Clean state, a lot of deckcopy operations come in and we overwrite any line pointers, or we start a new set after each sig=0 ? Anyway, we neutralize all & and .param lines (category[] array!) and we substitute all {} &() and &id placeholders by dummy identifiers. those look like numparm__________XXXXXXXX (8 hexadecimal digits) */ /********** string handling ***********/ static long placeholder = 0; static void stripsomespace(SPICE_DSTRINGPTR dstr_p, bool incontrol) { /* if s starts with one of some markers, strip leading space */ const char *markers = incontrol ? "*.&+#$" : "*.&+#$" "xX"; char *s = spice_dstring_value(dstr_p); int i = 0; while (s[i] && (s[i] <= ' ')) i++; if ((i > 0) && s[i] && strchr(markers, s[i])) pscopy(dstr_p, s + i, NULL); } static int stripbraces(SPICE_DSTRINGPTR dstr_p) /* puts the funny placeholders. returns the number of {...} substitutions */ { int n = 0; char *s = spice_dstring_value(dstr_p); char *p, *brace; SPICE_DSTRING tstr; /* temporary dynamic string */ spice_dstring_init(&tstr); p = s; while ((brace = strchr(p, '{')) != NULL) { /* something to strip */ const char *j_ptr = brace + 1; int nest = 1; n++; while ((nest > 0) && *j_ptr) { if (*j_ptr == '{') nest++; else if (*j_ptr == '}') nest--; j_ptr++; } pscopy(&tstr, s, brace); if (brace[-1] > ' ') cadd(&tstr, ' '); cadd(&tstr, ' '); { char buf[25+1]; sprintf(buf, "numparm__________%08lx", ++placeholder); sadd(&tstr, buf); } cadd(&tstr, ' '); if (*j_ptr >= ' ') cadd(&tstr, ' '); int ilen = spice_dstring_length(&tstr); sadd(&tstr, j_ptr); scopyd(dstr_p, &tstr); s = spice_dstring_value(dstr_p); p = s + ilen; } dynsubst = placeholder; spice_dstring_free(&tstr); return n; } static void findsubname(dico_t *dico, SPICE_DSTRINGPTR dstr_p) /* truncate the parameterized subckt call to regular old Spice */ /* scan a string from the end, skipping non-idents and {expressions} */ /* then truncate s after the last subckt(?) identifier */ { char * const s = spice_dstring_value(dstr_p); char *p = s + spice_dstring_length(dstr_p); SPICE_DSTRING name; /* extract a name */ spice_dstring_init(&name); while (p > s) { /* skip space, then non-space */ char *p_end = p = skip_back_ws(p, s); /* at p_end: space */ while ((p > s) && !isspace_c(p[-1])) if (p[-1] == '}') { int nest = 1; while (--p > s) { if (p[-1] == '{') nest--; else if (p[-1] == '}') nest++; if (nest <= 0) { p--; break; } } p_end = p; /* p_end points to '{' */ } else { p--; } if ((p > s) && alfanum(*p)) { /* suppose an identifier */ char *t; entry_t *entry; /* check for known subckt name */ if (inp_compat_mode == COMPATMODE_PS || inp_compat_mode == COMPATMODE_PSA || inp_compat_mode == COMPATMODE_LTPS || inp_compat_mode == COMPATMODE_LTPSA) for (t = p; alfanumps(*t); t++) ; else for (t = p; alfanum(*t); t++) ; spice_dstring_reinit(&name); pscopy(&name, p, t); entry = entrynb(dico, spice_dstring_value(&name)); if (entry && (entry->tp == NUPA_SUBCKT)) { spice_dstring_setlength(dstr_p, (int) (p_end - s)); spice_dstring_free(&name); return; } } } spice_dstring_free(&name); } static char transform(dico_t *dico, SPICE_DSTRINGPTR dstr_p, bool incontrol) /* line s is categorized and crippled down to basic Spice * returns in u control word following dot, if any * * any + line is copied as-is. * any & or .param line is commented-out. * any .subckt line has params section stripped off * any X line loses its arguments after sub-circuit name * any &id or &() or {} inside line gets a 10-digit substitute. * * strip the new syntax off the codeline s, and * return the line category as follows: * '*' comment line * '+' continuation line * ' ' other untouched netlist or command line * 'P' parameter line, commented-out; (name,linenr)-> symbol table. * 'S' subckt entry line, stripped; (name,linenr)-> symbol table. * 'U' subckt exit line * 'X' subckt call line, stripped * 'C' control entry line * 'E' control exit line * '.' any other dot line * 'B' netlist (or .model ?) line that had Braces killed */ { char *s; /* dstring value of dstr_p */ char category; stripsomespace(dstr_p, incontrol); s = spice_dstring_value(dstr_p); if (s[0] == '.') { /* check PS parameter format */ if (prefix(".param", s)) { /* comment it out */ /* s[0] = '*'; */ category = 'P'; } else if (prefix(".subckt", s)) { char *params; /* split off any "params" tail */ params = strstr(s, "params:"); if (params) pscopy(dstr_p, s, params); category = 'S'; } else if (prefix(".control", s)) { category = 'C'; } else if (prefix(".endc", s)) { category = 'E'; } else if (prefix(".ends", s)) { category = 'U'; } else { category = '.'; if (stripbraces(dstr_p) > 0) category = 'B'; /* priority category ! */ } } else if (s[0] == 'x') { /* strip actual parameters */ findsubname(dico, dstr_p); category = 'X'; } else if (s[0] == '+') { /* continuation line */ category = '+'; } else if (!strchr("*$#", s[0])) { /* not a comment line! */ if (stripbraces(dstr_p) > 0) category = 'B'; /* line that uses braces */ else category = ' '; /* ordinary code line */ } else { category = '*'; } return category; } /************ core of numparam **************/ /* some day, all these nasty globals will go into the dico_t structure and everything will get hidden behind some "handle" ... For the time being we will rename this variable to end in S so we know they are statics within this file for easier reading of the code. */ static int linecountS = 0; /* global: number of lines received via nupa_copy */ static int evalcountS = 0; /* number of lines through nupa_eval() */ static bool inexpansionS = 0; /* flag subckt expansion phase */ static bool incontrolS = 0; /* flag control code sections */ static bool firstsignalS = 1; static dico_t *dicoS = NULL; static dico_t *dicos_list[100]; static void nupa_init(void) { int i; /* init the symbol table and so on, before the first nupa_copy. */ evalcountS = 0; linecountS = 0; incontrolS = 0; placeholder = 0; dicoS = TMALLOC(dico_t, 1); initdico(dicoS); dicoS->dynrefptr = TMALLOC(char*, dynmaxline + 1); dicoS->dyncategory = TMALLOC(char, dynmaxline + 1); for (i = 0; i <= dynmaxline; i++) { dicoS->dynrefptr[i] = NULL; dicoS->dyncategory[i] = '?'; } dicoS->linecount = dynmaxline; } /* free dicoS (called from com_remcirc()) */ void nupa_del_dicoS(void) { int i; if(!dicoS) return; for (i = dicoS->linecount; i >= 0; i--) txfree(dicoS->dynrefptr[i]); txfree(dicoS->dynrefptr); txfree(dicoS->dyncategory); txfree(dicoS->inst_name); nghash_free(dicoS->symbols[0], del_attrib, NULL); txfree(dicoS->symbols); txfree(dicoS); dicoS = NULL; } static void nupa_done(void) { int nerrors = dicoS->errcount; int dictsize = donedico(dicoS); /* We cannot remove dicoS here because numparam is used by the .measure statements, which are invoked only after the simulation has finished. */ if (nerrors) { bool is_interactive = FALSE; if (cp_getvar("interactive", CP_BOOL, NULL, 0)) is_interactive = TRUE; printf(" Copies=%d Evals=%d Placeholders=%ld Symbols=%d Errors=%d\n", linecountS, evalcountS, placeholder, dictsize, nerrors); /* debug: ask if spice run really wanted */ if (ft_batchmode) controlled_exit(EXIT_FAILURE); if (!is_interactive) { fprintf(cp_err, "Numparam expansion errors: Problem with input file.\n"); controlled_exit(EXIT_FAILURE); } for (;;) { int c; printf("Numparam expansion errors: Run Spice anyway? y/n ?\n"); c = yes_or_no(); if (c == 'n' || c == EOF) controlled_exit(EXIT_FAILURE); if (c == 'y') break; } } linecountS = 0; evalcountS = 0; placeholder = 0; /* release symbol table data */ } /* SJB - Scan the line for subcircuits */ void nupa_scan(struct card *card) { defsubckt(dicoS, card); } /* ----------------------------------------------------------------- * Dump the contents of a symbol table. * ----------------------------------------------------------------- */ static void dump_symbol_table(NGHASHPTR htable_p, FILE *fp) { entry_t *entry; /* current entry */ NGHASHITER iter; /* hash iterator - thread safe */ NGHASH_FIRST(&iter); for (entry = (entry_t *) nghash_enumerateRE(htable_p, &iter); entry; entry = (entry_t *) nghash_enumerateRE(htable_p, &iter)) { if (entry->tp == NUPA_REAL) fprintf(fp, " ---> %s = %g\n", entry->symbol, entry->vl); } } /* ----------------------------------------------------------------- * Dump the contents of the symbol table. * ----------------------------------------------------------------- */ void nupa_list_params(FILE *fp) { dico_t *dico = dicoS; /* local copy for speed */ int depth; /* nested subcircit depth */ if (dico == NULL) { fprintf(cp_err, "\nWarning: No symbol table available for 'listing param'\n"); return; } fprintf(fp, "\n\n"); for (depth = dico->stack_depth; depth >= 0; depth--) { NGHASHPTR htable_p = dico->symbols[depth]; if (htable_p) { if (depth > 0) fprintf(fp, " local symbol definitions for: %s\n", dico->inst_name[depth]); else fprintf(fp, " global symbol definitions:\n"); dump_symbol_table(htable_p, fp); } } } /* ----------------------------------------------------------------- * Lookup a parameter value in the symbol tables. This involves * multiple lookups in various hash tables in order to get the scope * correct. Each subcircuit instance will have its own local hash * table if it has parameters. We can return whenever we get a hit. * Otherwise, we have to exhaust all of the tables including the global * table. * ----------------------------------------------------------------- */ double nupa_get_param(char *param_name, int *found) { dico_t *dico = dicoS; /* local copy for speed */ int depth; /* nested subcircit depth */ for (depth = dico->stack_depth; depth >= 0; depth--) { NGHASHPTR htable_p = dico->symbols[depth]; if (htable_p) { entry_t *entry = (entry_t *) nghash_find(htable_p, param_name); if (entry) { *found = 1; return entry->vl; } } } *found = 0; return 0; } void nupa_add_param(char *param_name, double value) { dico_t *dico = dicoS; /* local copy for speed */ entry_t *entry; /* current entry */ NGHASHPTR htable_p; /* hash table of interest */ /* can't be lazy anymore */ if (!(dico->symbols[dico->stack_depth])) dico->symbols[dico->stack_depth] = nghash_init(NGHASH_MIN_SIZE); htable_p = dico->symbols[dico->stack_depth]; entry = attrib(dico, htable_p, param_name, 'N'); if (entry) { entry->vl = value; entry->tp = NUPA_REAL; entry->ivl = 0; entry->sbbase = NULL; } } void nupa_add_inst_param(char *param_name, double value) { dico_t *dico = dicoS; /* local copy for speed */ entry_t *entry; /* current entry */ if (!(dico->inst_symbols)) dico->inst_symbols = nghash_init(NGHASH_MIN_SIZE); entry = attrib(dico, dico->inst_symbols, param_name, 'N'); if (entry) { entry->vl = value; entry->tp = NUPA_REAL; entry->ivl = 0; entry->sbbase = NULL; } } /* ----------------------------------------------------------------- * This function copies any definitions in the inst_symbols hash * table which are qualified symbols and makes them available at * the global level. Afterwards, the inst_symbols table is freed. * ----------------------------------------------------------------- */ void nupa_copy_inst_dico(void) { dico_t *dico = dicoS; /* local copy for speed */ entry_t *entry; /* current entry */ NGHASHITER iter; /* hash iterator - thread safe */ if (dico->inst_symbols) { /* We we perform this operation we should be in global scope */ if (dico->stack_depth > 0) fprintf(stderr, "stack depth should be zero.\n"); NGHASH_FIRST(&iter); for (entry = (entry_t *) nghash_enumerateRE(dico->inst_symbols, &iter); entry; entry = (entry_t *) nghash_enumerateRE(dico->inst_symbols, &iter)) { nupa_add_param(entry->symbol, entry->vl); dico_free_entry(entry); } nghash_free(dico->inst_symbols, NULL, NULL); dico->inst_symbols = NULL; } } char * nupa_copy(struct card *deck) /* returns a copy (not quite) of s in freshly allocated memory. linenum, for info only, is the source line number. origin pointer s is kept, memory is freed later in nupa_done. must abort all Spice if malloc() fails. :{ called for the first time sequentially for all spice deck lines. :{ then called again for all X invocation lines, top-down for subckts defined at the outer level, but bottom-up for local subcircuit expansion, but has no effect in that phase. we steal a copy of the source line pointer. - comment-out a .param or & line - substitute placeholders for all {..} --> 10-digit numeric values. */ { char * const s = deck->line; char * const s_end = skip_back_ws(s + strlen(s), s); const int linenum = deck->linenum; char *t; char c, d; SPICE_DSTRING u; spice_dstring_init(&u); pscopy(&u, s, s_end); /* strip trailing space, CrLf and so on */ dicoS->srcline = linenum; if ((!inexpansionS) && (linenum >= 0) && (linenum <= dynmaxline)) { linecountS++; dicoS->dynrefptr[linenum] = deck->line; c = transform(dicoS, &u, incontrolS); if (c == 'C') incontrolS = 1; else if (c == 'E') incontrolS = 0; if (incontrolS) c = 'C'; /* force it */ d = dicoS->dyncategory[linenum]; /* warning if already some strategic line! */ if ((d == 'P') || (d == 'S') || (d == 'X')) fprintf(stderr, " Numparam warning: overwriting P,S or X line (linenum == %d).\n", linenum); dicoS->dyncategory[linenum] = c; } /* keep a local copy and mangle the string */ t = copy(spice_dstring_value(&u)); if (!t) { fputs("Fatal: String malloc crash in nupa_copy()\n", stderr); controlled_exit(EXIT_FAILURE); } spice_dstring_free(&u); return t; } int nupa_eval(struct card *card) /* s points to a partially transformed line. compute variables if linenum points to a & or .param line. if ( the original is an X line, compute actual params.; } else { substitute any &(expr) with the current values. All the X lines are preserved (commented out) in the expanded circuit. */ { char *s = card->line; int linenum = card->linenum; int orig_linenum = card->linenum_orig; int idef; /* subckt definition line */ char c; bool err = 1; dicoS->srcline = linenum; dicoS->oldline = orig_linenum; c = dicoS->dyncategory[linenum]; #ifdef TRACE_NUMPARAMS fprintf(stderr, "** SJB - in nupa_eval()\n"); fprintf(stderr, "** SJB - processing line %3d: %s\n", linenum, s); fprintf(stderr, "** SJB - category '%c'\n", c); #endif if (c == 'P') { /* evaluate parameters */ // err = nupa_substitute(dico, dico->dynrefptr[linenum], s); nupa_assignment(dicoS, dicoS->dynrefptr[linenum], 'N'); } else if (c == 'B') { /* substitute braces line */ err = nupa_substitute(dicoS, dicoS->dynrefptr[linenum], s); } else if (c == 'X') { /* compute args of subcircuit, if required */ char *inst_name = copy_substring(s, skip_non_ws(s)); *inst_name = 'x'; idef = findsubckt(dicoS, s); if (idef > 0) nupa_subcktcall(dicoS, dicoS->dynrefptr[idef], dicoS->dynrefptr[linenum], inst_name); else fprintf(stderr, "Error, illegal subckt call.\n %s\n", s); } else if (c == 'U') { /* release local symbols = parameters */ nupa_subcktexit(dicoS); } evalcountS++; #ifdef TRACE_NUMPARAMS fprintf(stderr, "** SJB - leaving nupa_eval(): %s %d\n", s, err); printf("** SJB - --> %s\n", s); printf("** SJB - leaving nupa_eval()\n\n"); #endif if (err) return 0; else return 1; } void nupa_signal(int sig) /* warning: deckcopy may come inside a recursion ! substart no! */ /* info is context-dependent string data */ { if (sig == NUPADECKCOPY) { if (firstsignalS) { nupa_init(); firstsignalS = 0; } } else if (sig == NUPASUBSTART) { inexpansionS = 1; } else if (sig == NUPASUBDONE) { inexpansionS = 0; } else if (sig == NUPAEVALDONE) { nupa_done(); firstsignalS = 1; } } /* Store dicoS for each circuit loaded. The return value will be stored in ft_curckt->ci_dicos. We need to keep dicoS because it may be used by measure. */ int nupa_add_dicoslist(void) { int i; for (i = 0; i < 100; i++) if (dicos_list[i] == NULL) { dicos_list[i] = dicoS; break; } return (i); } /* remove dicoS from list if circuit is removed */ void nupa_rem_dicoslist(int ir) { dicos_list[ir] = NULL; } /* change dicoS to the active circuit */ void nupa_set_dicoslist(int ir) { dicoS = dicos_list[ir]; } tmpk8ny_4pz/src/frontend/numparam/general.h0000644000175000017500000000113213546075722021171 0ustar carstencarsten/* general.h */ /* include beforehand the following: #include // NULL FILE fopen feof fgets fclose fputs fputc gets #include the function code is in 'mystring.c' . */ #include "ngspice/dstring.h" #include "ngspice/bool.h" char *pscopy(SPICE_DSTRINGPTR s, const char *str, const char *stop); void scopyd(SPICE_DSTRINGPTR a, SPICE_DSTRINGPTR b); void scopys(SPICE_DSTRINGPTR a, const char *b); void sadd(SPICE_DSTRINGPTR s, const char *t); void cadd(SPICE_DSTRINGPTR s, char c); bool alfa(char c); bool alfanum(char c); bool alfanumps(char c); int yes_or_no(void); tmpk8ny_4pz/src/frontend/numparam/numpaif.h0000644000175000017500000000161313546075722021217 0ustar carstencarsten/* * numpaif.h * external interface to spice frontend subckt.c */ #ifndef ngspice_NUMPAIF_H #define ngspice_NUMPAIF_H #define NUPADECKCOPY 0 #define NUPASUBSTART 1 #define NUPASUBDONE 2 #define NUPAEVALDONE 3 struct card; extern char *nupa_copy(struct card *c); extern int nupa_eval(struct card *card); extern void nupa_signal(int sig); extern void nupa_scan(struct card *card); extern void nupa_list_params(FILE *cp_out); extern double nupa_get_param(char *param_name, int *found); extern void nupa_add_param(char *param_name, double value); extern void nupa_add_inst_param(char *param_name, double value); extern void nupa_copy_inst_dico(void); extern void nupa_del_dicoS(void); extern int nupa_add_dicoslist(void); extern void nupa_rem_dicoslist(int); extern void nupa_set_dicoslist(int); extern int dynMaxckt; /* number of lines in deck after expansion */ #endif tmpk8ny_4pz/src/frontend/numparam/mystring.c0000644000175000017500000000751713546075722021440 0ustar carstencarsten/* mystring.c Copyright (C) 2002 Georg Post * * This file is part of Numparam, see: readme.txt * Free software under the terms of the GNU Lesser General Public License */ #include "ngspice/ngspice.h" #include #include #include #include #include #include #include "ngspice/config.h" #include "ngspice/memory.h" #ifdef HAS_WINGUI #include "ngspice/wstdio.h" #endif #include "general.h" /* * fetch a human answer to a y/n question from stdin * insist on a single non white-space char on a '\n' terminated line * return this char or '\n' or EOF * return '\0' if the answer doesn't fit this pattern */ int yes_or_no(void) { int first; do { first = getchar(); if (first == '\n' || first == EOF) return first; } while (isspace(first)); for (;;) { int c = getchar(); if (c == EOF) return c; if (c == '\n') return tolower(first); if (!isspace(c)) first = '\0'; } } /******* Strings ************ * are 0-terminated char arrays with a 2-byte trailer: max length. * the string mini-library is "overflow-safe" under these conditions: * use Str(n,s) macro: define and initialize a string s of maxlen n<255 * to allocate a string on the heap, use newstring(n). * use maxlen() and length() to retrieve string max and actual length * use: cadd, sadd, scopy, pscopy to manipulate them * never put '\x0' characters inside strings ! * * the 'killer idea' is the following: * on string overflow and/or on heap allocation failure, a program * MUST die. Now we only die on a heap failure as with dynamic * string we cannot have a string overflow. */ /* ----------------------------------------------------------------- * Function: add string t to dynamic string dstr_p. * ----------------------------------------------------------------- */ void sadd(SPICE_DSTRINGPTR dstr_p, const char *t) { spice_dstring_append(dstr_p, t, -1); } /* ----------------------------------------------------------------- * Function: add character c to dynamic string dstr_p. * ----------------------------------------------------------------- */ void cadd(SPICE_DSTRINGPTR dstr_p, char c) { char tmp_str[2]; tmp_str[0] = c; tmp_str[1] = '\0'; spice_dstring_append(dstr_p, tmp_str, -1); } /* ----------------------------------------------------------------- * Create copy of the dynamic string. Dynamic strings are always NULL * terminated. * ----------------------------------------------------------------- */ void scopyd(SPICE_DSTRINGPTR s, SPICE_DSTRINGPTR t) /* returns success flag */ { spice_dstring_reinit(s); spice_dstring_append(s, spice_dstring_value(t), -1); } /* ----------------------------------------------------------------- * Create copy of the string in the dynamic string. Dynamic strings * are always NULLterminated. * ----------------------------------------------------------------- */ void scopys(SPICE_DSTRINGPTR s, const char *t) /* returns success flag */ { spice_dstring_reinit(s); spice_dstring_append(s, t, -1); } char * pscopy(SPICE_DSTRINGPTR dstr_p, const char *t, const char *stop) { int i; char *s_p; if (!stop) stop = strchr(t, '\0'); s_p = _spice_dstring_setlength(dstr_p, (int)(stop - t)); for (i = 0; t < stop;) s_p[i++] = *t++; s_p[i] = '\0'; return s_p; } bool alfa(char c) { return ((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')) || c == '_' || c == '[' || c == ']'; } bool alfanum(char c) { return alfa(c) || ((c >= '0') && (c <= '9')); } /* Additionally '-' allowed in subckt name if ps compatible */ bool alfanumps(char c) { return alfa(c) || ((c >= '0') && (c <= '9')) || c == '-'; } tmpk8ny_4pz/src/frontend/numparam/numparam.h0000644000175000017500000000457113546075722021406 0ustar carstencarsten/* * numparam.h */ /*** interface to spice frontend subckt.c ***/ #include "numpaif.h" #include "ngspice/hash.h" /***** numparam internals ********/ /* ----------------------------------------------------------------- * I believe the entry_t should be a union of type but I need more info. * ----------------------------------------------------------------- */ struct nupa_type; extern const struct nupa_type S_nupa_real; extern const struct nupa_type S_nupa_string; extern const struct nupa_type S_nupa_subckt; extern const struct nupa_type S_nupa_unknown; #define NUPA_REAL (&S_nupa_real) #define NUPA_STRING (&S_nupa_string) #define NUPA_SUBCKT (&S_nupa_subckt) #define NUPA_UNKNOWN (&S_nupa_unknown) typedef const struct nupa_type *nupa_type; typedef struct entry_s { nupa_type tp; /* type: I)nt R)eal S)tring F)unction M)acro P)ointer */ char *symbol; int level; /* subckt nesting level */ double vl; /* float value if defined */ int ivl; /* int value or string buffer index */ char *sbbase; /* string buffer base address if any */ } entry_t; typedef struct { /* the input scanner data structure */ int srcline; int oldline; int errcount; int max_stack_depth; /* alloced maximum depth of the symbol stack */ int stack_depth; /* current depth of the symbol stack */ NGHASHPTR *symbols; /* stack of scopes for symbol lookup */ /* [0] denotes global scope */ NGHASHPTR inst_symbols; /* instance qualified symbols - after a pop */ char **inst_name; /* name of subcircuit */ char **dynrefptr; char *dyncategory; int hs_compatibility; /* allow extra keywords */ int linecount; /* number of lines in deck */ } dico_t; void initdico(dico_t *); int donedico(dico_t *); void dico_free_entry(entry_t *); bool defsubckt(dico_t *, struct card *); int findsubckt(dico_t *, const char *s); bool nupa_substitute(dico_t *, const char *s, char *r); bool nupa_assignment(dico_t *, const char *s, char mode); bool nupa_subcktcall(dico_t *, const char *s, const char *x, char *inst_name); void nupa_subcktexit(dico_t *); entry_t *entrynb(dico_t *dico, char *s); entry_t *attrib(dico_t *, NGHASHPTR htable, char *t, char op); void del_attrib(void *); tmpk8ny_4pz/src/frontend/numparam/readme.txt0000644000175000017500000006761313546075722021421 0ustar carstencarsten******************************************************** README.TXT the minimal Numparam documentation ******************************************************** Numparam: an add-on library for electronic circuit analysis front-ends Copyright (C) 2002 Georg Post This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA CONTENTS A. The Numparam library B. Circuit description with Numparam (in lieu of a tutorial) C. Reference section D. Installation E. Theory of operation F. Files in this package G. Known bugs A. The Numparam library: The spice-3f(x) front end lacks some features of commercial derivatives, such as the ability to define numerical attributes of devices by symbols or by constant (at circuit-expansion time) numerical expressions. Numerical parameters - other than node names - for subcircuits are also commonly available in these non-free Spices. This library provides a retrofit to the Spice circuit description language to add these features. By design, the new code is organized as an independent library which does not import any Spice header files and whose only interface to Spice is a set of three function headers. The only place where these functions are called - if a new compile-time option for Spice is set - is the code file src/lib/fte/subckt.c. There are no patches anywhere else. The purpose of this minimal coupling was to freely license the additional code. It is distributed under the GNU-LGPL and thus can be linked to the original Spice which is open-source software but maintains a special license. (As I read somewhere, Berkeley Spice is reserved to people friendly to the USA). Due to GPL-type requirements, I cannot merge any lines from Spice with the new code, and I cannot avoid redundancies, such as one more symbol table manager and the umpteenth arithmetic expression parser. Coding style of my add-on is a bit personal. Using a set of keyword-hiding macros, it is closer to Pascal and/or Basic than to authentic C programs. Most of it originated from my initial Turbo Pascal preprocessors that have been translated to C. After all, I'm definitely not "friendly to the C language". Even in disguise, the code is pure Ansi-C and compiles without a warning under the severest settings of gcc (under GNU/Linux) or Turbo C++ (under MS-DOS). For C hardliners, I include the 'washprog' utility which downgrades the source code to the common C look-&-feel. Extreme purists might apply some appropriate "indent" utility, in addition. B. Circuit description with Numparam (in lieu of a tutorial). As we now know, all the text entry to Spice comes in two separate languages: - a circuit description language (CDL) which defines the electronic hardware. - an analysis job and data management language (JDML) which may be used as an interactive shell or in batch files. In the circuit description "CDL" file, the design is typically organized as a hierarchical set of subcircuits which are connected together in the 'main' circuit (they are "called", like procedures in a general-purpose programming language). CDL is line-oriented, with a recognizer role assigned to the first non-space character of a line. (In the ancient times of data processing, a line was called a "card".) For example, '*' introduces comment lines. 'C' places a capacitor device in the circuit, 'R' a resistor, 'L' an inductor, and so on. 'X' signals the "call" of a subcircuit. Character '+' introduces a continuation line (the way to split exceedingly long lines into pieces). A special class of lines that start with a dot '.' have control functions inside CDL: they do not add physical circuit elements. For instance, the control pair '.subckt' and '.ends' brackets a subcircuit definition section in CDL. In the old days of Spice-2, some of the functions now assigned to JDML were also inserted as dot cards. You can still insert pieces of JDML inside a CDL file, as a section enclosed within lines '.control' and '.endc' . Example CDL file, a netlist of some double T RC-filter: * First-example .subckt myfilter in out Ra in p1 2k Rb p1 out 2k C1 p1 0 2nF Ca in p2 1nF Cb p2 out 1nF R1 p2 0 1k .ends myfilter X1 input output myfilter V1 input 0 AC 1V .end Let us recall what the Spice "front-end" essentially does to your circuit-description (CDL) file whenever it is submitted, either at program start-up or after some interactive JDML commands like 'edit' or 'source'. First, all the JDML sections in the file are sorted out and kept for later use (unless the file is pure JDML and thus immediately executed). Next, the hierarchy of subcircuits is expanded and an internal representation of the flattened circuit is stored, i.e. a set of CDL lines without any more 'X' and '.subckt' lines. This flat circuit is also known as the "netlist". Then, the netlist is translated into the internal data structures of Spice, essentially a sparse matrix of elements indexed by pairs of circuit nodes. Finally, the mathematical analysis is carried out under the control of JDML, and output data may be stored, printed, plotted, compared, and so on. Analyses may be repeated under varying bias/frequency/time... conditions. But to change the circuit topology, the CDL must be edited and re-compiled. Numparam-specific features of CDL : The Numparam library is an enhancement of the Spice front-end which adds clarity and arithmetic functionality to the circuit description language. The most wanted feature of a language is to have word-like symbols that take the place of specific values or objects. The dot-line .param = defines such symbols. For example, to describe a triple RC filter with identical values of components, we do not need to explicitly repeat constant numbers. The CDL code may go like this: .param res= 1kohm // numparam allows comment tails like in C++ .param tau= 10ns // we want a time constant .param cap= tau/res // tau= RC, of course .subckt triplerc in out R1 in p1 {res} C1 p1 0 {cap} R2 p1 p2 {res} C2 p2 0 {cap} R3 p2 out {res} C3 out 0 {cap} .ends As you can see, the use of symbols anywhere in the circuit description requires the curly braces : { } This coding style is even more interesting if circuit elements have known fixed ratios (Butterworth filters and the like) and we only need to touch one value (a time constant) to tune the circuit. Only numerical constants such as '30pF' may be used without enclosing braces. It is the braces that tell our CDL front-end to look up symbols and to crunch arithmetic expressions inside. Obviously, it was restrictive that subcircuit definitions could only accept interface node names as symbolic parameters. With the following syntax of the .subckt line, we add numerical parameters: .subckt ... params: = = ... Example, a parameterized filter: .subckt triplerc2 in out params: res=1kohm cap=50pF * all the following lines as above. * the specified default values are always overridden with X lines. To call variants of such a subcircuit later on, we may write: X1 in out1 triplerc2 {r1} {c1} X2 in out2 triplerc2 {2*r1} {c1/2} X3 in out3 triplerc2 {3*r1} {c1/3} where the r1 and c1 symbols are defined in .param lines. So, we can use subcircuits with one or more parameters, the same way as Spice2 already allowed an area parameter for diodes and transistors. Here is the first example, rewritten with parameters: * Param-example .param amplitude= 1V .subckt myfilter in out + params: rval=100k cval= 100nF Ra in p1 {2*rval} Rb p1 out {2*rval} C1 p1 0 {2*cval} Ca in p2 {cval} Cb p2 out {cval} R1 p2 0 {rval} .ends myfilter X1 input output myfilter 1k 1nF V1 input 0 AC {amplitude} .end Note: Now, there is some possible confusion in Spice because of multiple numerical expression features. The .param lines and the braces expressions are evaluated in the front-end, that is, just after the subcircuit expansion. (Technically, the X lines are kept as comments in the expanded circuit so that the actual parameters can correctly be substituted ). So, after the netlist expansion and before the internal data setup, all number attributes in the circuit are known constants. However, there are some circuit elements in Spice which accept arithmetic expressions that are NOT evaluated at this point, but only later during circuit analysis. These are the arbitrary current and voltage sources. The syntactic difference is that "compile-time" expressions are within braces, but "run-time" expressions have no braces. To make things more complicated, the backend language JDML also accepts arithmetic/logic expressions that operate on its own scalar or vector data sets. It would be desirable to have the same expression syntax, operator and function set, and precedence rules, for the three contexts mentioned above. In the current Numparam implementation, that goal is not yet achieved... C. Reference section: The Numparam add-on supports the following elements in the circuit description language. 1. '.param' control lines to define symbolic numbers 2. arithmetic expressions in place of any numeric constant 3. formal and actual numeric parameters for subcircuit definition and 'call'. NOT YET IMPLEMENTED: To activate the additional functions, put a line near the top of the CDL file: .option numparam In the syntax description, means an alphanumeric identifier (<20 chars, starting with a letter) means an expression, composed of s, Spice numbers, and operators. 1. The .param line: Syntax: .param = ; = .... This line assigns numerical values to identifiers. More than one assignment per line is possible using the ';' separator. The .param lines inside subcircuits are copied per call, like any other line. All assignments are executed sequentially through the expanded circuit. Before its first use, a name must have been assigned a value. 2. Brace expressions in cicuit elements: Syntax: { } These are allowed in .model lines and in device lines, wherever only constant Spice numbers could be used in spice2/3. A Spice number is a floating point number with an optional scaling suffix, immediately glued to the numeric tokens (see below). Warning: {..} cannot be used to 'parameterize' node names or parts of names. ( We are not into obfuscated shell scripting ...) All identifiers used within an must have known values at the time when the line is evaluated, else an error is flagged. 3. Subcircuit parameters: The syntax of a subcircuit definition header is: .subckt node node ... params: = =... node is an integer number or an identifier, for one of the external nodes. The 'params:' keyword introduces an optional section of the line. Each is a formal parameter, and each is either a Spice number or a brace expression. Inside the '.subckt' ... '.ends' context, each formal parameter may be used like any identifier that was defined on a .param control line. The parts are supposed to be default values of the parameters. However, in the current version of Numparam, they are not used and each invocation of the subcircuit must supply the _exact_ number of actual parameters. The syntax of a subcircuit call (invocation) is: X node node ... .... Here is the symbolic name given to that instance of the subcircuit, is the name of a subcircuit defined beforehand. node node ... is the list of actual nodes where the subcircuit is connected. is either a Spice number or a brace expression { } . The sequence of items on the X line must exactly match the number and the order of formal parameters of the subcircuit. 4. Symbol scope All Subcircuit and Model names are considered global and must be unique. The .param symbols that are defined outside of any '.subckt' ... '.ends' section are global. Inside such a section, the pertaining 'params:' symbols and any .param assignments are considered local: they mask any global identical names, until the .ends line is encountered. You cannot reassign to a global number inside a .subckt, a local copy is created instead. Scope nesting now works up to any level. For example, if the main circuit calls A which has a formal parameter xx, A calls B which has a param. xx, and B calls C which also has a formal param. xx, there will be three versions of 'xx' in the symbol table but only the most local one - belonging to C - is visible. 5. Syntax of expressions ( optional parts within [ ...] ): An expression may be one of: where is either a Spice number or an identifier ( [ , ...] ) ( ) As expected, atoms, builtin function calls and stuff within parentheses are evaluated before the other operators. The operators are evaluated following a list of precedence close to the one of the C language. For equal precedence binary ops, evaluation goes left to right. Operators: Alias Internal symb. Precedence - - 1 (unary -) not ! ! 1 (unary not) ** ^ ^ 2 (power) * * 3 (multiply) / / 3 (divide) mod % % 3 (modulo) div \ \ 3 (integer divide) + + 4 (add) - - 4 (subtract) == = 5 (equality) <> != # 5 (un-equal) <= L 5 (less or equal) >= G 5 (greater or equal) < < 5 (less than) > > 5 (greater than) and && & 6 (and) or || | 7 (or) The result of logical operators is 1 or 0 , for True or False. Builtin functions: Internal ref. defined 0 (returns 1 if symbol is defined, else 0) sqr 1 sqrt 2 sin 3 cos 4 exp 5 ln 6 arctan 7 abs 8 pwr 9 Scaling suffixes (any decorative alphanum. string may follow ...) g 1e9 meg 1e6 k 1e3 m 1e-3 u 1e-6 n 1e-9 p 1e-12 f 1e-15 Note: there are intentional redundancies in expression syntax, e.g. x^y , x**y and pwr(x,y) all have nearly the same result. 6. Reserved words In addition to the above function names and to the verbose operators ( not and or div mod ), other words are reserved and cannot be used as parameter names. Historically, they come from a version of Numparam that was a full-blown macro language. I won't link that one to Spice, not before somebody proves to me that such a thing could be useful... and or not div mod if else end while macro funct defined include for to downto is var sqr sqrt sin cos exp ln arctan abs pwr 7. Alternative syntax the & sign is tolerated to provide some 'historical' parameter notation: & as the first character of a line is equivalent to: .param Inside a line, the notation &(....) is equivalent to {....}, and &identifier means the same thing as {identifier} . This notation exists a bit for the same reason as my macros which wipe the curly braces out of the C language: entering those signs is a pain in the neck on IBM French-type keyboards. You hit, among others, a vanishingly small AltGr key which is squeezed by superfluous buttons that show ugly office-software logos... Comments in the style of C++ line trailers (//) are detected and erased. Warning: this is NOT possible in embedded .control parts of a source file, these JDML lines are outside of Numparam's scope. DOS-style carriage returns at line ends are difficult for JDML, too. D. Installation There are two versions of Spice on which this library has been tried: a. a 1997 version spice3f5 that was arranged for Red Hat Linux b. the version 14 of ngspice (will now be privileged for development) On my system, the size of libnupa.a is about 47k, so this is the additional bloat that the spice3 and nutmeg binary programs will accumulate. ( The numparam source tarball weighs in for some 70k ) The common part to build the Numparam library is this: 0. choose any directory you like for Numparam, let's call it $HACK. 1. un-tar the .c and .h files and the rest, in Numparam's directory : tar xzvf numparam.tgz 2. compile the lib sources with gcc -c -Wall: gcc -c -ansi -pedantic -Wall spicenum.c nupatest.c xpressn.c mystring.c 3. pre-link together the library part to numparam.o and libnupa.a: ld -r -o numparam.o spicenum.o xpressn.o mystring.o ar -rcs libnupa.a spicenum.o xpressn.o mystring.o 4. make the test executable nupatest: gcc -o nupatest nupatest.o spicenum.o xpressn.o mystring.o -lm The script file 'mknumpar.sh' does all this (2-4). 5a. Link with the "third version of Spice3f5 for RedHat Linux 2.6" (1997) do the following in the spice3f5 top-level directory: 1. patch the file src/lib/fte/subckt.c : cp -biv $HACK/rhsubckt.c src/lib/fte/subckt.c 2. edit src/bin/makeops , to add $HACK/libnupa.a to LIBS and LIBN. 3. ./util/build linux 4. ./util/build linux install 5b. Link procedure for ngspice version 14 I haven't yet a working knowledge of the 'automake/autoconf' system, so I'll describe the pedestrian hacks to get Numparam in. That's evil; the right way would need a configuration flag that chooses to make and to link the library. Only the top level files 'configure.in' and 'Makefile.am' should be revised to process the numparam option. (?) Help! 1. replace the file src/frontend/subckt.c with Numparam's patched version : cp -biv $HACK/ngsubckt.c src/frontend/subckt.c 2. run ./configure with a "LIBS prefix" to include numparam (see below) 3. make 4. make install Here is one "prefixed" ngspice configure script that works on my system: #!/bin/sh # ngconfig.sh # configure options for ngspice with numparam add-on # run this in ngspice's top-level directory # specify your Numparam directory HACK=/home/post/spice3f5/hack # over-write the original subckt.c cp -biv $HACK/ngsubckt.c src/frontend/subckt.c # my box needs CFLAGS on 1st run, else 'terminal.c' wont find 'termcap.h' ? CFLAGS=-I/usr/include/ncurses \ LIBS=$HACK/libnupa.a \ ./configure --without-x --prefix=/usr/local/ngsp #### end of sample script #### E. Theory of operation Spice's front end does a lot of malloc/free type memory gymnastics and does not seem to care much about small leaks here and there. Numparam will do some malloc'ing in place of Spice (essentially the translated strings of the input deck) and rely on Spice to clean it up - or not - later on. My library will clean up its private space only (the symbol tables) and will make some assumptions about the interface function calls coming from Spice. Here is the scenario supposed to be followed by Spice and Numparam: 0. the patched codefile subckt.c imports the following header lines: #define NUPADECKCOPY 0 #define NUPASUBSTART 1 #define NUPASUBDONE 2 #define NUPAEVALDONE 3 extern char * nupa_copy(char *s, int linenum); extern int nupa_eval(char *s, int linenum); extern int nupa_signal(int sig); These are the three library functions called, i.e. - nupa_copy by inp_subcktexpand to preprocess all extended-syntax lines. - nupa_eval by inp_subcktexpand to do the parameter substitutions - nupa_signal with one of the 4 signals, from various places to send state information to the Numparam library. The only places with numparam patches are the functions inp_subcktexpand() and its recursive subroutine doit(), in the file subckt.c . At this stage, we suppose that: - any .control sections are filtered out - any .include are expanded - any + continuation line chunks are glued together 1. In the first phase, Numparam runs through the deck (whose .control sections have already been removed by Spice) to create copies of the lines without the extended syntax. Pointers to the original deck lines are kept and the copies are traditional Spice, with placeholders for symbols and expressions. Spice loses the originals and gets the bleached-out copies. 2. The "doit()" circuit expansions are modified to keep more information. Contrary to the initial Spice code, now the subcircuit invocation lines are preserved as comments, which allows Numparam to update symbolic subcircuit parameters a bit later. Subcircuit exit lines are also copied and out-commented, to keep track of identifier scopes during the final pass. If this seems waste of storage, just consider all those sloppy memory leaks in the circuit expansion code... 3. The final wash-up is a sequential call to the library (nupa_eval()) line-by-line through the expanded circuit. By using its pointers to the original lines, Numparam recovers the added syntax features. It triggers all the symbol value computations and inserts constant numbers into the circuit definition lines, whose length must not change! This option is a kludge to avoid memory reallocation [ my intuitive fear is that these free() malloc() realloc() and friends swallow a lot of CPU time ? ]. 4. The termination signal at the end of inp_subcktexpand() tells the Numparam library to clean up its mess, release its pointers to the original Spice circuit description text, and to get prepared for another run. Note: Numparam frees the storage related to the original lines whose pointers have been stolen in phase 1. In a future release, Numparam will be re-entrant, all its 'global' data being referenced via a handle which the client program should keep around. F. Files in this package The following Ansi C code files belong to Numparam: general.h header file with macros to disguise the C language. stuff for an 'overflow-safe' string library ( whose biggest bug is that it indexes strings from 1 like Pascal). numparam.h header file for numparam-specific symbols and functions mystring.c collection of 'safer' character string (and misc.) functions. beware of the nasty Turbo Pascal conventions. xpressn.c the interpreter of arithmetic/logical expressions spicenum.c the interface part, functions that are called by Spice. nupatest.c a stand-alone subcircuit expander, for test purpose. washprog.c a program that washes all the above C files, including itself, to recover the crude syntax of the True Language (see below). Patched versions of spice's subckt.c file incorporate the library calls and maybe try to repair some memory leaks (in rhsubckt.c, not yet tested). rhsubckt.c for spice3f5 1997 Red Hat (src/lib/fte/subckt.c) ngsubckt.c for ngspice version 14 (src/frontend/subckt.c) subckt.dif 'diff' between ngsubckt.c and ngspice frontend/subckt.c The following text, data and script files are also included: readme.txt this documentation file downgrad.txt the substitution rules required for washprog.c mknumpar.sh script to make the library binaries ngconfig.sh sample script to run ./configure for ngspice configure.in crappy ? Makefile.am crappy ? testfile.nup a test text (nonsense circuit) for Numparam ? So, if you are a Real Programmer, think that the Pascal amateurs confound programming with writing novels, and find those Basic greenhorns' style too childish, then execute the following two-liner first of all (should work on GNU/Linux, but it's not a speed monster) : gcc -o washprog washprog.c mystring.c ./washprog *.c You get all the *.c files in a version where the first character becomes an underbar, and the interior resembles to _code_. (although it lacks such powerful features as continue, break, goto, ?:-expressions, gets(), ... ) G. Known Bugs First of all, lots of size limits - incompatible with the Spirit of the Gnu, who wants that everything may grow as much as malloc() can grab ... - circuit source code line length: 80 chars - circuit '+' extended code lines: 250 chars - number of source lines: 1000 - number of lines in expanded circuit: 5000 - length of numparam identifiers: 20 chars - number of numparam identifiers: 200 - length of file names: 80 chars - significant digits in param results: 5 - nesting depth of parentheses 9 - nesting of subckt calls 10 All these constants should be in the header file but aren't. After each circuit expansion, numparam asks a silly question of the "Abort/Continue" type. A debugging feature, to be killed soon. The Numparam symbol table accumulates the following sets of names: subcircuits, models, global parameters, subcircuit arguments. Node names, however, are completely ignored. Call the following "bugs" or "features": - A model/subckt name cannot be defined twice, even if local to a subcircuit. - The same name cannot design a model here, and a parameter elsewhere. - A subcircuit argument masks any global parameter of same name, anytime the subckt is invoked. Inside a .subckt context, .param assignments also have local scope and override global identical names. It is wise to always use unique names for everything. While Numparam is in 'early beta stage', I strongly suggest to use 'nupatest' first, on any 'parameterized' Spice circuit file, before starting the enhanced circuit analyser. The command nupatest foobar.cir produces an output file 'foobar.out' which is the expanded and parameter-reduced flat netlist. By the way, it produces error messages whenever it chokes on the source file. If nupatest succeeds, the spice+numparam combo should swallow it, too. Big bug: Nupatest does not yet prefix and infix things inside v() and i(). Numparam comes with two very experimental files 'configure.in' and 'Makefile.am' as an exercise of the automake/autoconf mechanisms. I certainly got a lot of things wrong and had to do _eight_ steps to have it kind of work: 1. edit/create configure.in 2. edit/create Makefile.am 3. run autoheader --> config.h.in 4. run automake --foreign --add-missing --verbose --> Makefile.in 5. run aclocal --> aclocal.m4 6. run autoconf --> configure 7. run ./configure --> Makefile config.h 8. run make Do we need all this, and -worse- do we need to repeat it whenever we touch 'configure.in' and/or 'Makefile.am' ? Help! Please send your bug reports, improvements, flames etc. to the author: georg.post @ wanadoo.fr tmpk8ny_4pz/src/frontend/misccoms.c0000644000175000017500000002215713546075722017556 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/iferrmsg.h" #include "ftehelp.h" #include "ngspice/hlpdefs.h" #include "misccoms.h" #include "postcoms.h" #include "circuits.h" #include "variable.h" #include "plotting/graf.h" #include "display.h" #include "../misc/ivars.h" #include "com_alias.h" #include "define.h" #include "runcoms2.h" #ifdef HAVE_GNUREADLINE #include #include extern char history_file[]; #endif #ifdef HAVE_BSDEDITLINE #include extern char history_file[]; #endif #ifdef SHARED_MODULE extern void rem_controls(void); #endif extern IFsimulator SIMinfo; extern void spice_destroy_devices(void); /* FIXME need a better place */ static void byemesg(void); static int confirm_quit(void); void com_quit(wordlist *wl) { int exitcode = EXIT_NORMAL; bool noask = (wl && wl->wl_word && 1 == sscanf(wl->wl_word, "%d", &exitcode)) || (wl && wl->wl_word && cieq(wl->wl_word, "noask")) || !cp_getvar("askquit", CP_BOOL, NULL, 0); /* update screen and reset terminal */ gr_clean(); cp_ccon(FALSE); /* Make sure the guy really wants to quit. */ if (!ft_nutmeg) if (!noask && !confirm_quit()) return; /* start to clean up the mess */ #ifdef SHARED_MODULE { wordlist all = { "all", NULL, NULL }; wordlist star = { "*", NULL, NULL }; com_destroy(&all); com_unalias(&star); com_undefine(&star); cp_remvar("history"); cp_remvar("noglob"); cp_remvar("brief"); cp_remvar("sourcepath"); cp_remvar("program"); cp_remvar("prompt"); } rem_controls(); /* Destroy CKT when quit. */ if (!ft_nutmeg) { while(ft_curckt) com_remcirc(NULL); } cp_destroy_keywords(); destroy_ivars(); #else while (ft_curckt) com_remcirc(NULL); #endif tfree(errMsg); byemesg(); #ifdef SHARED_MODULE destroy_const_plot(); spice_destroy_devices(); /* add 1000 to notify that we exit from 'quit' */ controlled_exit(1000 + exitcode); #else exit(exitcode); #endif } #ifdef SYSTEM_MAIL void com_bug(wordlist *wl) { char buf[BSIZE_SP]; NG_IGNORE(wl); if (!Bug_Addr || !*Bug_Addr) { fprintf(cp_err, "Error: No address to send bug reports to.\n"); return; } fprintf(cp_out, "Calling the mail program . . .(sending to %s)\n\n" "Please include the OS version number and machine architecture.\n" "If the problem is with a specific circuit, please include the\n" "input file.\n", Bug_Addr); (void) sprintf(buf, SYSTEM_MAIL, ft_sim->simulator, ft_sim->version, Bug_Addr); (void) system(buf); fprintf(cp_out, "Bug report sent. Thank you.\n"); } #else void com_bug(wordlist *wl) { NG_IGNORE(wl); fprintf(cp_out, "Please use the ngspice bug tracker at:\n" "http://sourceforge.net/p/ngspice/bugs/\n"); } #endif /* printout upon startup or 'version' command. options to version are -s (short), -f (full), -v (just version), -d (just compile date). 'version' with options may also be used in ngspice pipe mode. */ void com_version(wordlist *wl) { if (!wl) { /* no printout in pipe mode (-p) */ if (ft_pipemode) return; fprintf(cp_out, "******\n" "** %s-%s : %s\n" "** The U. C. Berkeley CAD Group\n" "** Copyright 1985-1994, Regents of the University of California.\n" "** %s\n", ft_sim->simulator, ft_sim->version, ft_sim->description, Spice_Manual); if (Spice_Notice != NULL && *Spice_Notice != '\0') fprintf(cp_out, "** %s\n", Spice_Notice); if (Spice_Build_Date != NULL && *Spice_Build_Date != '\0') fprintf(cp_out, "** Creation Date: %s\n", Spice_Build_Date); fprintf(cp_out, "******\n"); } else { char *s = wl_flatten(wl); if (!strncasecmp(s, "-s", 2)) { fprintf(cp_out, "******\n" "** %s-%s\n" "** %s\n", ft_sim->simulator, ft_sim->version, Spice_Manual); if (Spice_Notice != NULL && *Spice_Notice != '\0') fprintf(cp_out, "** %s\n", Spice_Notice); if (Spice_Build_Date != NULL && *Spice_Build_Date != '\0') fprintf(cp_out, "** Creation Date: %s\n", Spice_Build_Date); fprintf(cp_out, "******\n"); } else if (!strncasecmp(s, "-v", 2)) { fprintf(cp_out, "%s-%s\n",ft_sim->simulator, ft_sim->version); } else if (!strncasecmp(s, "-d", 2) && Spice_Build_Date != NULL && *Spice_Build_Date != '\0'){ fprintf(cp_out, "%s\n", Spice_Build_Date); } else if (!strncasecmp(s, "-f", 2)) { fprintf(cp_out, "******\n" "** %s-%s : %s\n" "** The U. C. Berkeley CAD Group\n" "** Copyright 1985-1994, Regents of the University of California.\n" "** %s\n", ft_sim->simulator, ft_sim->version, ft_sim->description, Spice_Manual); if (Spice_Notice != NULL && *Spice_Notice != '\0') fprintf(cp_out, "** %s\n", Spice_Notice); if (Spice_Build_Date != NULL && *Spice_Build_Date != '\0') fprintf(cp_out, "** Creation Date: %s\n", Spice_Build_Date); fprintf(cp_out, "**\n"); #ifdef CIDER fprintf(cp_out, "** CIDER 1.b1 (CODECS simulator) included\n"); #endif #ifdef XSPICE fprintf(cp_out, "** XSPICE extensions included\n"); #endif fprintf(cp_out, "** Relevant compilation options (refer to user's manual):\n"); #ifdef NGDEBUG fprintf(cp_out, "** Debugging option (-g) enabled\n"); #endif #ifdef ADMS fprintf(cp_out, "** Adms interface enabled\n"); #endif #ifdef USE_OMP fprintf(cp_out, "** OpenMP multithreading for BSIM3, BSIM4 enabled\n"); #endif #if defined(X_DISPLAY_MISSING) && !defined(HAS_WINGUI) fprintf(cp_out, "** X11 interface not compiled into ngspice\n"); #endif #ifdef NOBYPASS fprintf(cp_out, "** --enable-nobypass\n"); #endif #ifdef CAPBYPASS fprintf(cp_out, "** --enable-capbypass\n"); #endif #ifdef NODELIMITING fprintf(cp_out, "** --enable-nodelimiting\n"); #endif #ifdef PREDICTOR fprintf(cp_out, "** --enable-predictor\n"); #endif #ifdef NEWTRUNC fprintf(cp_out, "** --enable-newtrunc\n"); #endif #ifdef WANT_SENSE2 fprintf(cp_out, "** --enable-sense2\n"); #endif fprintf(cp_out, "**\n"); #ifdef EXPERIMENTAL_CODE fprintf(cp_out, "** Experimental code enabled.\n"); #endif #ifdef EXP_DEV fprintf(cp_out, "** Experimental devices enabled.\n"); #endif fprintf(cp_out, "******\n"); } else if (!eq(ft_sim->version, s)) { fprintf(stderr, "Note: rawfile is version %s (current version is %s)\n", wl->wl_word, ft_sim->version); } tfree(s); } } static void byemesg(void) { #if defined(HAVE_GNUREADLINE) || defined(HAVE_BSDEDITLINE) /* write out command history only when saying goodbye. */ if (cp_interactive && (cp_maxhistlength > 0)) { stifle_history(cp_maxhistlength); write_history(history_file); } #endif printf("%s-%s done\n", ft_sim->simulator, ft_sim->version); } static int confirm_quit(void) { struct circ *cc; struct plot *pl; int ncc = 0, npl = 0; char buf[64]; for (cc = ft_circuits; cc; cc = cc->ci_next) if (cc->ci_inprogress) ncc++; for (pl = plot_list; pl; pl = pl->pl_next) if (!pl->pl_written && pl->pl_dvecs) npl++; if (!ncc && !npl) return 1; fprintf(cp_out, "Warning: "); if (ncc) { fprintf(cp_out, "the following simulation%s still in progress:\n", (ncc > 1) ? "s are" : " is"); for (cc = ft_circuits; cc; cc = cc->ci_next) if (cc->ci_inprogress) fprintf(cp_out, "\t%s\n", cc->ci_name); } if (ncc && npl) fprintf(cp_out, "and "); if (npl) { fprintf(cp_out, "the following plot%s been saved:\n", (npl > 1) ? "s haven't" : " hasn't"); for (pl = plot_list; pl; pl = pl->pl_next) if (!pl->pl_written && pl->pl_dvecs) fprintf(cp_out, "%s\t%s, %s\n", pl->pl_typename, pl->pl_title, pl->pl_name); } fprintf(cp_out, "\nAre you sure you want to quit (yes)? "); (void) fflush(cp_out); if (!fgets(buf, sizeof(buf), stdin)) { clearerr(stdin); *buf = 'y'; } return ((*buf == 'y') || (*buf == 'Y') || (*buf == '\n')); } tmpk8ny_4pz/src/frontend/cpitf.h0000644000175000017500000000020513546075722017041 0ustar carstencarsten/************* * Header file for cpitf.c * 1999 E. Rouat ************/ #ifndef ngspice_CPITF_H #define ngspice_CPITF_H #endif tmpk8ny_4pz/src/frontend/terminal.h0000644000175000017500000000031713546075722017553 0ustar carstencarsten#ifndef ngspice_TERMINAL_H #define ngspice_TERMINAL_H void outbufputc(void); void promptreturn(void); void term_clear(void); void term_home(void); void term_cleol(void); void tcap_init(void); #endif tmpk8ny_4pz/src/frontend/com_option.c0000644000175000017500000000742513546075722020110 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/bool.h" #include "circuits.h" #include "ngspice/wordlist.h" #include "variable.h" #include "com_option.h" /* The option command. Syntax is option [opt ...] [opt = val ...]. * Val may be a string, an int, a float, or a list of the * form (elt1 elt2 ...). */ void com_option(wordlist *wl) { struct variable *vars, *v; CKTcircuit *circuit = NULL; if (!ft_curckt) { fprintf(cp_err, "Error: no circuit loaded\n"); return; } circuit = (ft_curckt->ci_ckt); if (wl == NULL) { printf("******************************\n"); printf("* Current simulation options *\n"); printf("******************************\n\n"); printf("Temperatures:\n"); printf("temp = %f\n", circuit->CKTtemp); printf("tnom = %f\n", circuit->CKTnomTemp); printf("\nIntegration method summary:\n"); switch (circuit->CKTintegrateMethod) { case TRAPEZOIDAL: printf("Integration Method = TRAPEZOIDAL\n"); break; case GEAR: printf("Integration Method = GEAR\n"); break; default: printf("Unknown integration method\n"); } printf("MaxOrder = %d\n", circuit->CKTmaxOrder); printf("xmu = %g\n", circuit->CKTxmu); printf("indverbosity = %d\n", circuit->CKTindverbosity); printf("epsmin = %g\n", circuit->CKTepsmin); printf("\nTolerances (absolute):\n"); printf("abstol (current) = %g\n", circuit->CKTabstol); printf("chgtol (charge) = %g\n", circuit->CKTchgtol); printf("vntol (voltage) = %g\n", circuit->CKTvoltTol); printf("pivtol (pivot) = %g\n", circuit->CKTpivotAbsTol); printf("\nTolerances (relative):\n"); printf("reltol (current) = %g\n", circuit->CKTreltol); printf("pivrel (pivot) = %g\n", circuit->CKTpivotRelTol); printf("\nIteration limits:\n"); printf("ITL1 = %d\n", circuit->CKTdcMaxIter); printf("ITL2 = %d\n", circuit->CKTdcTrcvMaxIter); printf("ITL4 = %d\n", circuit->CKTtranMaxIter); printf("\nTruncation error correction:\n"); printf("trtol = %f\n", circuit->CKTtrtol); #ifdef NEWTRUNC printf("ltereltol = %g\n", circuit->CKTlteReltol); printf("lteabstol = %g\n", circuit->CKTlteAbstol); #endif /* NEWTRUNC */ printf("\nConductances:\n"); printf("gmin (devices) = %g\n", circuit->CKTgmin); printf("diaggmin (stepping) = %g\n", circuit->CKTdiagGmin); printf("gshunt = %g\n", circuit->CKTgshunt); printf("delmin = %g\n", circuit->CKTdelmin); printf("\nDefault parameters for MOS devices\n"); printf("Default M: %f\n", circuit->CKTdefaultMosM); printf("Default L: %f\n", circuit->CKTdefaultMosL); printf("Default W: %f\n", circuit->CKTdefaultMosW); printf("Default AD: %f\n", circuit->CKTdefaultMosAD); printf("Default AS: %f\n", circuit->CKTdefaultMosAS); return; } vars = cp_setparse(wl); /* This is sort of a hassle... */ for (v = vars; v; v = v->va_next) { void *s; switch (v->va_type) { case CP_BOOL: s = &v->va_bool; break; case CP_NUM: s = &v->va_num; break; case CP_REAL: s = &v->va_real; break; case CP_STRING: s = v->va_string; break; case CP_LIST: s = v->va_vlist; break; default: s = NULL; } /* qui deve settare le opzioni di simulazione */ cp_vset(v->va_name, v->va_type, s); } free_struct_variable(vars); } tmpk8ny_4pz/src/frontend/inpcom.c0000644000175000017500000103215113546075722017222 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher **********/ /* For dealing with spice input decks and command scripts Central function is inp_readall() */ #include "ngspice/ngspice.h" #include "ngspice/compatmode.h" #include "ngspice/cpdefs.h" #include "ngspice/dvec.h" #include "ngspice/ftedefs.h" #include "ngspice/fteext.h" #include "ngspice/fteinp.h" #include #include #include #include #if !defined(__MINGW32__) && !defined(_MSC_VER) #include #endif #include "../misc/util.h" /* ngdirname() */ #include "inpcom.h" #include "ngspice/stringskip.h" #include "ngspice/stringutil.h" #include "ngspice/wordlist.h" #include "subckt.h" #include "variable.h" #ifdef XSPICE /* gtri - add - 12/12/90 - wbk - include new stuff */ #include "ngspice/enh.h" #include "ngspice/ipctiein.h" /* gtri - end - 12/12/90 */ #endif /* SJB - Uncomment this line for debug tracing */ /*#define TRACE*/ /* globals -- wanted to avoid complicating inp_readall interface */ #define N_LIBRARIES 1000 #define N_PARAMS 1000 #define N_SUBCKT_W_PARAMS 4000 #define NPARAMS 10000 #define FCN_PARAMS 1000 #define VALIDCHARS "!$%_#?@.[]&" static struct library { char *realpath; char *habitat; struct card *deck; } libraries[N_LIBRARIES]; static int num_libraries; struct names { char *names[N_SUBCKT_W_PARAMS]; int num_names; }; struct function_env { struct function_env *up; struct function { struct function *next; char *name; char *body; char *params[N_PARAMS]; int num_parameters; const char *accept; } * functions; }; struct func_temper { char *funcname; int subckt_depth; int subckt_count; struct func_temper *next; }; extern void line_free_x(struct card *deck, bool recurse); COMPATMODE_T inp_compat_mode; /* Collect information for dynamic allocation of numparam arrays */ /* number of lines in input deck */ int dynmaxline; /* inpcom.c 1529 */ /* number of lines in deck after expansion */ int dynMaxckt = 0; /* subckt.c 307 */ /* number of parameter substitutions */ long dynsubst; /* spicenum.c 221 */ static bool has_if = FALSE; /* if we have an .if ... .endif pair */ static char *readline(FILE *fd); static int get_number_terminals(char *c); static void inp_stripcomments_deck(struct card *deck, bool cs); static void inp_stripcomments_line(char *s, bool cs); static void inp_fix_for_numparam( struct names *subckt_w_params, struct card *deck); static void inp_remove_excess_ws(struct card *deck); static void expand_section_references(struct card *deck, char *dir_name); static void inp_grab_func(struct function_env *, struct card *deck); static void inp_fix_inst_calls_for_numparam( struct names *subckt_w_params, struct card *deck); static void inp_expand_macros_in_func(struct function_env *); static struct card *inp_expand_macros_in_deck( struct function_env *, struct card *deck); static void inp_fix_param_values(struct card *deck); static void inp_reorder_params( struct names *subckt_w_params, struct card *list_head); static int inp_split_multi_param_lines(struct card *deck, int line_number); static void inp_sort_params(struct card *param_cards, struct card *card_bf_start, struct card *s_c, struct card *e_c); static char *inp_remove_ws(char *s); static void inp_compat(struct card *deck); static void inp_bsource_compat(struct card *deck); static bool inp_temper_compat(struct card *card); static void inp_meas_current(struct card *card); static void inp_dot_if(struct card *deck); static char *inp_modify_exp(char *expression); static struct func_temper *inp_new_func(char *funcname, char *funcbody, struct card *card, int *sub_count, int subckt_depth); static void inp_delete_funcs(struct func_temper *funcs); static bool chk_for_line_continuation(char *line); static void comment_out_unused_subckt_models(struct card *start_card); static char inp_get_elem_ident(char *type); static void rem_mfg_from_models(struct card *start_card); static void inp_fix_macro_param_func_paren_io(struct card *begin_card); static void inp_fix_gnd_name(struct card *deck); static void inp_chk_for_multi_in_vcvs(struct card *deck, int *line_number); static void inp_add_control_section(struct card *deck, int *line_number); static char *get_quoted_token(char *string, char **token); static void replace_token(char *string, char *token, int where, int total); static void inp_add_series_resistor(struct card *deck); static void subckt_params_to_param(struct card *deck); static void inp_fix_temper_in_param(struct card *deck); static void inp_fix_agauss_in_param(struct card *deck, char *fcn); static void inp_vdmos_model(struct card *deck); static void inp_check_syntax(struct card *deck); static char *inp_spawn_brace(char *s); static char *inp_pathresolve(const char *name); static char *inp_pathresolve_at(char *name, char *dir); static char *search_plain_identifier(char *str, const char *identifier); static struct nscope *inp_add_levels(struct card *deck); static struct card_assoc *find_subckt(struct nscope *scope, const char *name); static void inp_rem_levels(struct nscope *root); static void inp_rem_unused_models(struct nscope *root, struct card *deck); static struct modellist *inp_find_model(struct nscope *scope, const char *name); void tprint(struct card *deck); static struct card *pspice_compat(struct card *newcard); static void pspice_compat_a(struct card *oldcard); static struct card *ltspice_compat(struct card *oldcard); static void ltspice_compat_a(struct card *oldcard); struct inp_read_t { struct card *cc; int line_number; }; static struct inp_read_t inp_read( FILE *fp, int call_depth, char *dir_name, bool comfile, bool intfile); #ifndef XSPICE static void inp_poly_err(struct card *deck); #endif /* insert a new card, just behind the given card */ static struct card *insert_new_line( struct card *card, char *line, int linenum, int linenum_orig) { struct card *x = TMALLOC(struct card, 1); x->nextcard = card ? card->nextcard : NULL; x->error = NULL; x->actualLine = NULL; x->line = line; x->linenum = linenum; x->linenum_orig = linenum_orig; x->level = card ? card->level : NULL; if (card) card->nextcard = x; return x; } /* insert new_card, just behind the given card */ static struct card *insert_deck(struct card *card, struct card *new_card) { if (card) { new_card->nextcard = card->nextcard; card->nextcard = new_card; } else { new_card->nextcard = NULL; } return new_card; } static struct library *new_lib(void) { if (num_libraries >= N_LIBRARIES) { fprintf(stderr, "ERROR, N_LIBRARIES overflow\n"); controlled_exit(EXIT_FAILURE); } return &libraries[num_libraries++]; } static void delete_libs(void) { int i; for (i = 0; i < num_libraries; i++) { tfree(libraries[i].realpath); tfree(libraries[i].habitat); line_free_x(libraries[i].deck, TRUE); } } static struct library *find_lib(char *name) { int i; for (i = 0; i < num_libraries; i++) if (cieq(libraries[i].realpath, name)) return &libraries[i]; return NULL; } static struct card *find_section_definition(struct card *c, char *name) { for (; c; c = c->nextcard) { char *line = c->line; if (ciprefix(".lib", line)) { char *s, *t, *y; s = skip_non_ws(line); while (isspace_c(*s) || isquote(*s)) s++; for (t = s; *t && !isspace_c(*t) && !isquote(*t); t++) ; y = t; while (isspace_c(*y) || isquote(*y)) y++; if (!*y) { /* library section definition: `.lib ' .. * `.endl' */ char keep_char = *t; *t = '\0'; if (strcasecmp(name, s) == 0) { *t = keep_char; return c; } *t = keep_char; } } } return NULL; } static struct library *read_a_lib(char *y, char *dir_name) { char *yy, *y_resolved; struct library *lib; y_resolved = inp_pathresolve_at(y, dir_name); if (!y_resolved) { fprintf(cp_err, "Error: Could not find library file %s\n", y); return NULL; } #if defined(__MINGW32__) || defined(_MSC_VER) yy = _fullpath(NULL, y_resolved, 0); #else yy = realpath(y_resolved, NULL); #endif if (!yy) { fprintf(cp_err, "Error: Could not `realpath' library file %s\n", y); controlled_exit(EXIT_FAILURE); } lib = find_lib(yy); if (!lib) { FILE *newfp = fopen(y_resolved, "r"); if (!newfp) { fprintf(cp_err, "Error: Could not open library file %s\n", y); return NULL; } /* lib points to a new entry in global lib array * libraries[N_LIBRARIES] */ lib = new_lib(); lib->realpath = copy(yy); lib->habitat = ngdirname(yy); lib->deck = inp_read(newfp, 1 /*dummy*/, lib->habitat, FALSE, FALSE).cc; fclose(newfp); } tfree(yy); tfree(y_resolved); return lib; } static struct names *new_names(void) { struct names *p = TMALLOC(struct names, 1); p->num_names = 0; return p; } static void delete_names(struct names *p) { int i; for (i = 0; i < p->num_names; i++) tfree(p->names[i]); tfree(p); } /* line1 + line2 ----> line1 line 2 Proccedure: store regular card in prev, skip comment lines (*..) and some others */ static void inp_stitch_continuation_lines(struct card *working) { struct card *prev = NULL; while (working) { char *s, c, *buffer; for (s = working->line; (c = *s) != '\0' && c <= ' '; s++) ; #ifdef TRACE /* SDB debug statement */ printf("In inp_read, processing linked list element line = %d, s = " "%s . . . \n", working->linenum, s); #endif switch (c) { case '#': case '$': case '*': case '\0': /* skip these cards, and keep prev as the last regular card */ working = working->nextcard; /* for these chars, go to next card */ break; case '+': /* handle continuation */ if (!prev) { working->error = copy("Illegal continuation line: ignored."); working = working->nextcard; break; } /* We now may have lept over some comment lines, which are located among the continuation lines. We have to delete them here to prevent a memory leak */ while (prev->nextcard != working) { struct card *tmpl = prev->nextcard->nextcard; line_free_x(prev->nextcard, FALSE); prev->nextcard = tmpl; } /* create buffer and write last and current line into it. */ buffer = tprintf("%s %s", prev->line, s + 1); /* replace prev->line by buffer */ s = prev->line; prev->line = buffer; prev->nextcard = working->nextcard; working->nextcard = NULL; /* add original line to prev->actualLine */ if (prev->actualLine) { struct card *end; for (end = prev->actualLine; end->nextcard; end = end->nextcard) ; end->nextcard = working; tfree(s); } else { prev->actualLine = insert_new_line(NULL, s, prev->linenum, 0); prev->actualLine->level = prev->level; prev->actualLine->nextcard = working; } working = prev->nextcard; break; default: /* regular one-line card */ prev = working; working = working->nextcard; break; } } } /* * search for `=' assignment operator * take care of `!=' `<=' `==' and `>=' */ char *find_assignment(const char *str) { const char *p = str; while ((p = strchr(p, '=')) != NULL) { // check for equality '==' if (p[1] == '=') { p += 2; continue; } // check for '!=', '<=', '>=' if (p > str) if (p[-1] == '!' || p[-1] == '<' || p[-1] == '>') { p += 1; continue; } return (char *) p; } return NULL; } /* * backward search for an assignment * fixme, doesn't honour neither " nor ' quotes */ char *find_back_assignment(const char *p, const char *start) { while (--p >= start) { if (*p != '=') continue; // check for '!=', '<=', '>=', '==' if (p <= start || !strchr("!<=>", p[-1])) return (char *) p; p--; } return NULL; } /* Set a compatibility flag. Currently available are flags for: - ngspice (standard) - a commercial simulator - Spice3 - all compatibility stuff */ static COMPATMODE_T ngspice_compat_mode(void) { char behaviour[80]; if (cp_getvar("ngbehavior", CP_STRING, behaviour, sizeof(behaviour))) { if (strcasecmp(behaviour, "all") == 0) return COMPATMODE_ALL; if (strcasecmp(behaviour, "hs") == 0) return COMPATMODE_HS; if (strcasecmp(behaviour, "ps") == 0) return COMPATMODE_PS; if (strcasecmp(behaviour, "lt") == 0) return COMPATMODE_LT; if (strcasecmp(behaviour, "ltps") == 0) return COMPATMODE_LTPS; if (strcasecmp(behaviour, "psa") == 0) return COMPATMODE_PSA; if (strcasecmp(behaviour, "lta") == 0) return COMPATMODE_LTA; if (strcasecmp(behaviour, "ltpsa") == 0) return COMPATMODE_LTPSA; if (strcasecmp(behaviour, "spice3") == 0) return COMPATMODE_SPICE3; } return COMPATMODE_ALL; } /*------------------------------------------------------------------------- Read the entire input file and return a pointer to the first line of the linked list of 'card' records in data. The pointer is stored in *data. Called from fcn inp_spsource() in inp.c to load circuit or command files. Called from fcn com_alter_mod() in device.c to load model files. Called from here to load .library or .include files. Procedure: read in all lines & put them in the struct cc read next line process .TITLE line store contents in string new_title process .lib lines read file and library name, open file using fcn inp_pathopen() read file contents and put into struct libraries[].deck, one entry per .lib line process .inc lines read file and library name, open file using fcn inp_pathopen() read file contents and add lines to cc make line entry lower case allow for shell end of line continuation (\\) add '+' to beginning of next line add line entry to list cc add '.global gnd' add libraries find library section add lines add .end card strip end-of-line comments make continuation lines a single line *** end of processing for command files *** start preparation of input deck for numparam ... debug printout to debug-out.txt remove the 'level' entries from each card *-------------------------------------------------------------------------*/ struct card *inp_readall(FILE *fp, char *dir_name, bool comfile, bool intfile, bool *expr_w_temper_p) { struct card *cc; struct inp_read_t rv; num_libraries = 0; inp_compat_mode = ngspice_compat_mode(); rv = inp_read(fp, 0, dir_name, comfile, intfile); cc = rv.cc; /* files starting with *ng_script are user supplied command files */ if (cc && ciprefix("*ng_script", cc->line)) comfile = TRUE; /* The following processing of an input file is not required for command files like spinit or .spiceinit, so return command files here. */ if (!comfile && cc) { unsigned int no_braces; /* number of '{' */ size_t max_line_length; /* max. line length in input deck */ struct card *tmp_ptr1; struct names *subckt_w_params = new_names(); /* skip title line */ struct card *working = cc->nextcard; delete_libs(); /* some syntax checks, including title line */ inp_check_syntax(cc); if (inp_compat_mode == COMPATMODE_LTA) ltspice_compat_a(working); else if (inp_compat_mode == COMPATMODE_PSA) pspice_compat_a(working); else if (inp_compat_mode == COMPATMODE_LTPSA) { ltspice_compat_a(working); pspice_compat_a(working); } struct nscope *root = inp_add_levels(working); inp_fix_for_numparam(subckt_w_params, working); inp_remove_excess_ws(working); inp_vdmos_model(working); /* don't remove unused model if we have an .if clause, because we cannot yet decide here which model we finally will need */ if (!has_if) { comment_out_unused_subckt_models(working); inp_rem_unused_models(root, working); } rem_mfg_from_models(working); subckt_params_to_param(working); rv.line_number = inp_split_multi_param_lines(working, rv.line_number); inp_fix_macro_param_func_paren_io(working); static char *statfcn[] = { "agauss", "gauss", "aunif", "unif", "limit"}; int ii; for (ii = 0; ii < 5; ii++) inp_fix_agauss_in_param(working, statfcn[ii]); inp_fix_temper_in_param(working); inp_expand_macros_in_deck(NULL, working); inp_fix_param_values(working); inp_reorder_params(subckt_w_params, cc); inp_fix_inst_calls_for_numparam(subckt_w_params, working); delete_names(subckt_w_params); subckt_w_params = NULL; if (!cp_getvar("no_auto_gnd", CP_BOOL, NULL, 0)) inp_fix_gnd_name(working); inp_chk_for_multi_in_vcvs(working, &rv.line_number); if (cp_getvar("addcontrol", CP_BOOL, NULL, 0)) inp_add_control_section(working, &rv.line_number); #ifndef XSPICE inp_poly_err(working); #endif bool expr_w_temper = FALSE; if (inp_compat_mode != COMPATMODE_SPICE3) { /* Do all the compatibility stuff here */ working = cc->nextcard; inp_meas_current(working); /* E, G, L, R, C compatibility transformations */ inp_compat(working); working = cc->nextcard; /* B source numparam compatibility transformation */ inp_bsource_compat(working); inp_dot_if(working); expr_w_temper = inp_temper_compat(working); } if (expr_w_temper_p) *expr_w_temper_p = expr_w_temper; inp_add_series_resistor(working); /* get max. line length and number of lines in input deck, and renumber the lines, count the number of '{' per line as an upper estimate of the number of parameter substitutions in a line */ dynmaxline = 0; max_line_length = 0; no_braces = 0; for (tmp_ptr1 = cc; tmp_ptr1; tmp_ptr1 = tmp_ptr1->nextcard) { char *s; unsigned int braces_per_line = 0; /* count number of lines */ dynmaxline++; /* renumber the lines of the processed input deck */ tmp_ptr1->linenum = dynmaxline; if (max_line_length < strlen(tmp_ptr1->line)) max_line_length = strlen(tmp_ptr1->line); /* count '{' */ for (s = tmp_ptr1->line; *s; s++) if (*s == '{') braces_per_line++; if (no_braces < braces_per_line) no_braces = braces_per_line; } if (ft_ngdebug) { FILE *fd = fopen("debug-out.txt", "w"); if (fd) { /*debug: print into file*/ struct card *t; fprintf(fd, "**************** uncommented deck " "**************\n\n"); /* always print first line */ fprintf(fd, "%6d %6d %s\n", cc->linenum_orig, cc->linenum, cc->line); /* here without out-commented lines */ for (t = cc->nextcard; t; t = t->nextcard) { if (*(t->line) == '*') continue; fprintf(fd, "%6d %6d %s\n", t->linenum_orig, t->linenum, t->line); } fprintf(fd, "\n****************** complete deck " "***************\n\n"); /* now completely */ for (t = cc; t; t = t->nextcard) fprintf(fd, "%6d %6d %s\n", t->linenum_orig, t->linenum, t->line); fclose(fd); fprintf(stdout, "max line length %d, max subst. per line %d, number " "of lines %d\n", (int) max_line_length, no_braces, dynmaxline); } else fprintf(stderr, "Warning: Cannot open file debug-out.txt for saving " "debug info\n"); } inp_rem_levels(root); } return cc; } struct inp_read_t inp_read( FILE *fp, int call_depth, char *dir_name, bool comfile, bool intfile) /* fp: in, pointer to file to be read, call_depth: in, nested call to fcn dir_name: in, name of directory of file to be read comfile: in, TRUE if command file (e.g. spinit, .spiceinit) intfile: in, TRUE if deck is generated from internal circarray */ { struct inp_read_t rv; struct card *end = NULL, *cc = NULL; char *buffer = NULL; /* segfault fix */ #ifdef XSPICE char big_buff[5000]; int line_count = 0; #endif char *new_title = NULL; int line_number = 1; /* sjb - renamed to avoid confusion with struct card */ int line_number_orig = 1; int cirlinecount = 0; /* length of circarray */ static int is_control = 0; /* We are reading from a .control section */ bool found_end = FALSE, shell_eol_continuation = FALSE; /* First read in all lines & put them in the struct cc */ for (;;) { /* derive lines from circarray */ if (intfile) { buffer = circarray[cirlinecount++]; if (!buffer) { tfree(circarray); break; } } /* read lines from file fp */ else { #ifdef XSPICE /* gtri - modify - 12/12/90 - wbk - read from mailbox if ipc * enabled */ /* If IPC is not enabled, do equivalent of what SPICE did before */ if (!g_ipc.enabled) { if (call_depth == 0 && line_count == 0) { line_count++; if (fgets(big_buff, 5000, fp)) buffer = copy(big_buff); } else { buffer = readline(fp); if (!buffer) break; } } else { /* else, get the line from the ipc channel. */ /* We assume that newlines are not sent by the client */ /* so we add them here */ char ipc_buffer[1025]; /* Had better be big enough */ int ipc_len; Ipc_Status_t ipc_status = ipc_get_line(ipc_buffer, &ipc_len, IPC_WAIT); if (ipc_status == IPC_STATUS_END_OF_DECK) { buffer = NULL; break; } else if (ipc_status == IPC_STATUS_OK) { buffer = TMALLOC(char, strlen(ipc_buffer) + 3); strcpy(buffer, ipc_buffer); strcat(buffer, "\n"); } else { /* No good way to report this so just die */ controlled_exit(EXIT_FAILURE); } } /* gtri - end - 12/12/90 */ #else buffer = readline(fp); if (!buffer) break; #endif } #ifdef TRACE /* SDB debug statement */ printf("in inp_read, just read %s", buffer); #endif if (!buffer) continue; /* OK -- now we have loaded the next line into 'buffer'. Process it. */ /* If input line is blank, ignore it & continue looping. */ if ((strcmp(buffer, "\n") == 0) || (strcmp(buffer, "\r\n") == 0)) if (call_depth != 0 || (call_depth == 0 && cc != NULL)) { line_number_orig++; tfree(buffer); /* was allocated by readline() */ continue; } if (*buffer == '@') { tfree(buffer); /* was allocated by readline() */ break; } /* now check if we are in a .control section */ if (ciprefix(".control", buffer)) is_control++; else if (ciprefix(".endc", buffer)) is_control--; /* now handle .title statement */ if (ciprefix(".title", buffer)) { char *s; s = skip_non_ws(buffer); /* skip over .title */ s = skip_ws(s); /* advance past space chars */ /* only the last title line remains valid */ tfree(new_title); new_title = copy(s); if ((s = strchr(new_title, '\n')) != NULL) *s = '\0'; if ((s = strchr(new_title, '\r')) != NULL) *s = '\0'; *buffer = '*'; /* change .TITLE line to comment line */ } /* now handle old style .lib entries */ /* new style .lib entries handling is in expand_section_references() */ if (ciprefix(".lib", buffer)) if (inp_compat_mode == COMPATMODE_PS || inp_compat_mode == COMPATMODE_PSA || inp_compat_mode == COMPATMODE_LTPS || inp_compat_mode == COMPATMODE_LTPSA) { /* compatibility mode, * this is neither a libray section definition nor a * reference interpret as old style .lib (no lib * name given) */ char *s = skip_non_ws(buffer); /* skip over .lib */ fprintf(cp_err, " File included as: .inc %s\n", s); memcpy(buffer, ".inc", 4); } /* now handle .include statements */ if (ciprefix(".include", buffer) || ciprefix(".inc", buffer)) { char *y = NULL; char *s; struct card *newcard; inp_stripcomments_line(buffer, FALSE); s = skip_non_ws(buffer); /* advance past non-space chars */ s = get_quoted_token(s, &y); if (!y) { fprintf(cp_err, "Error: .include filename missing\n"); tfree(buffer); /* was allocated by readline() */ controlled_exit(EXIT_FAILURE); } { char *y_resolved = inp_pathresolve_at(y, dir_name); char *y_dir_name; FILE *newfp; if (!y_resolved) { fprintf(cp_err, "Error: Could not find include file %s\n", y); rv.line_number = line_number; rv.cc = NULL; return rv; } newfp = fopen(y_resolved, "r"); if (!newfp) { fprintf(cp_err, "Error: .include statement failed.\n"); tfree(buffer); /* allocated by readline() above */ controlled_exit(EXIT_FAILURE); } y_dir_name = ngdirname(y_resolved); newcard = inp_read( newfp, call_depth + 1, y_dir_name, FALSE, FALSE) .cc; /* read stuff in include file into netlist */ tfree(y_dir_name); tfree(y_resolved); (void) fclose(newfp); } /* Make the .include a comment */ *buffer = '*'; /* append `buffer' to the (cc, end) chain of decks */ { end = insert_new_line( end, copy(buffer), line_number, line_number); if (!cc) cc = end; line_number++; } if (newcard) { if (inp_compat_mode == COMPATMODE_LT) newcard = ltspice_compat(newcard); else if (inp_compat_mode == COMPATMODE_PS) newcard = pspice_compat(newcard); else if (inp_compat_mode == COMPATMODE_LTPS) { newcard = ltspice_compat(newcard); newcard = pspice_compat(newcard); } int line_number_inc = 1; end->nextcard = newcard; /* Renumber the lines */ for (end = newcard; end && end->nextcard; end = end->nextcard) { end->linenum = line_number++; end->linenum_orig = line_number_inc++; } end->linenum = line_number++; /* SJB - renumber the last line */ end->linenum_orig = line_number_inc++; /* SJB - renumber the last line */ } /* Fix the buffer up a bit. */ (void) strncpy(buffer + 1, "end of: ", 8); } /* end of .include handling */ /* loop through 'buffer' until end is reached. Make all letters lower * case except for the commands given below. Special treatment for * commands 'hardcopy' and 'plot', where all letters are made lower * case except for the tokens following xlabel, ylabel and title. * These tokens may contain spaces, if they are enclosed in single or * double quotes. Single quotes are later on swallowed and disappear, * double quotes are printed. */ { char *s; if (ciprefix("plot", buffer) || ciprefix("gnuplot", buffer) || ciprefix("hardcopy", buffer)) { /* lower case excluded for tokens following title, xlabel, * ylabel. tokens may contain spaces, then they have to be * enclosed in quotes. keywords and tokens have to be * separated by spaces. */ int j; char t = ' '; for (s = buffer; *s && (*s != '\n'); s++) { *s = tolower_c(*s); if (ciprefix("title", s)) { /* jump beyond title */ for (j = 0; j < 5; j++) { s++; *s = tolower_c(*s); } while (*s == ' ') s++; if (!s || (*s == '\n')) break; /* check if single quote is at start of token */ else if (*s == '\'') { s++; t = '\''; } /* check if double quote is at start of token */ else if (*s == '\"') { s++; t = '\"'; } else t = ' '; /* jump beyond token without lower casing */ while ((*s != '\n') && (*s != t)) s++; } else if (ciprefix("xlabel", s) || ciprefix("ylabel", s)) { /* jump beyond xlabel, ylabel */ for (j = 0; j < 6; j++) { s++; *s = tolower_c(*s); } while (*s == ' ') s++; if (!s || (*s == '\n')) break; /* check if single quote is at start of token */ else if (*s == '\'') { s++; t = '\''; } /* check if double quote is at start of token */ else if (*s == '\"') { s++; t = '\"'; } else t = ' '; /* jump beyond token without lower casing */ while ((*s != '\n') && (*s != t)) s++; } } } else if (ciprefix("print", buffer) || ciprefix("eprint", buffer) || ciprefix("asciiplot", buffer)) { /* lower case excluded for tokens following output redirection * '>' */ bool redir = FALSE; for (s = buffer; *s && (*s != '\n'); s++) { if (*s == '>') redir = TRUE; /* do not lower, but move to end of string */ if (!redir) *s = tolower_c(*s); } } /* no lower case letters for lines beginning with: */ else if (!ciprefix("write", buffer) && !ciprefix("wrdata", buffer) && !ciprefix(".lib", buffer) && !ciprefix(".inc", buffer) && !ciprefix("codemodel", buffer) && !ciprefix("echo", buffer) && !ciprefix("shell", buffer) && !ciprefix("source", buffer) && !ciprefix("load", buffer) && !ciprefix("setcs", buffer)) { /* lower case for all other lines */ for (s = buffer; *s && (*s != '\n'); s++) *s = tolower_c(*s); } else { /* s points to end of buffer for all cases not treated so far */ for (s = buffer; *s && (*s != '\n'); s++) ; } /* add Inp_Path to sourcepath variable */ if (cieq(buffer, "set") || cieq(buffer, "setcs")) { char *p = strstr(buffer, "sourcepath"); if (p) { p = strchr(buffer, ')'); if (p) { *p = 0; // clear ) and insert Inp_Path in between p = tprintf("%s %s ) %s", buffer, Inp_Path ? Inp_Path : "", p + 1); tfree(buffer); buffer = p; /* s points to end of buffer */ for (s = buffer; *s && (*s != '\n'); s++) ; } } } if (!*s) { // fprintf(cp_err, "Warning: premature EOF\n"); } *s = '\0'; /* Zap the newline. */ if ((s - 1) >= buffer && *(s - 1) == '\r') /* Zop the carriage return under windows */ *(s - 1) = '\0'; } /* find the true .end command out of .endc, .ends, .endl, .end * (comments may follow) */ if (ciprefix(".end", buffer)) if ((buffer[4] == '\0') || isspace_c(buffer[4])) { found_end = TRUE; *buffer = '*'; } if (shell_eol_continuation) { char *new_buffer = tprintf("+%s", buffer); tfree(buffer); buffer = new_buffer; } /* If \\ at end of line is found, next line in loop will get + (see * code above) */ shell_eol_continuation = chk_for_line_continuation(buffer); { end = insert_new_line( end, copy(buffer), line_number++, line_number_orig++); if (!cc) cc = end; } tfree(buffer); } /* end while ((buffer = readline(fp)) != NULL) */ if (!cc) /* No stuff here */ { rv.line_number = line_number; rv.cc = cc; return rv; } /* files starting with *ng_script are user supplied command files */ if (call_depth == 0 && ciprefix("*ng_script", cc->line)) comfile = TRUE; if (call_depth == 0 && !comfile) { if (!cp_getvar("no_auto_gnd", CP_BOOL, NULL, 0)) insert_new_line(cc, copy(".global gnd"), 1, 0); else insert_new_line( cc, copy("* gnd is not set to 0 automatically "), 1, 0); if (inp_compat_mode == COMPATMODE_ALL || inp_compat_mode == COMPATMODE_HS || inp_compat_mode == COMPATMODE_NATIVE) { /* process all library section references */ expand_section_references(cc, dir_name); } } /* add a terminal ".end" card */ if (call_depth == 0 && !comfile) if (found_end == TRUE) end = insert_new_line( end, copy(".end"), line_number++, line_number_orig++); /* Replace first line with the new title, if available */ if (call_depth == 0 && !comfile && new_title) { tfree(cc->line); cc->line = new_title; } /* Strip or convert end-of-line comments. Afterwards stitch the continuation lines. If the line only contains an end-of-line comment then it is converted into a normal comment with a '*' at the start. Some special handling if this is a command file or called from within a .control section. */ inp_stripcomments_deck(cc->nextcard, comfile || is_control); inp_stitch_continuation_lines(cc->nextcard); rv.line_number = line_number; rv.cc = cc; return rv; } static bool is_absolute_pathname(const char *p) { #if defined(__MINGW32__) || defined(_MSC_VER) /* /... or \... or D:\... or D:/... */ return p[0] == DIR_TERM || p[0] == DIR_TERM_LINUX || (isalpha_c(p[0]) && p[1] == ':' && (p[2] == DIR_TERM_LINUX || p[2] == DIR_TERM)); #else return p[0] == DIR_TERM; #endif } #if 0 static bool is_plain_filename(const char *p) { #if defined(__MINGW32__) || defined(_MSC_VER) return !strchr(p, DIR_TERM) && !strchr(p, DIR_TERM_LINUX); #else return !strchr(p, DIR_TERM); #endif } #endif FILE *inp_pathopen(char *name, char *mode) { char *path = inp_pathresolve(name); if (path) { FILE *fp = fopen(path, mode); tfree(path); return fp; } return NULL; } /*-------------------------------------------------------------------------* Look up the variable sourcepath and try everything in the list in order if the file isn't in . and it isn't an abs path name. *-------------------------------------------------------------------------*/ static char *inp_pathresolve(const char *name) { char buf[BSIZE_SP]; struct variable *v; struct stat st; #if defined(__MINGW32__) || defined(_MSC_VER) /* If variable 'mingwpath' is set: convert mingw /d/... to d:/... */ if (cp_getvar("mingwpath", CP_BOOL, NULL, 0) && name[0] == DIR_TERM_LINUX && isalpha_c(name[1]) && name[2] == DIR_TERM_LINUX) { strcpy(buf, name); buf[0] = buf[1]; buf[1] = ':'; return inp_pathresolve(buf); } #endif /* just try it */ if (stat(name, &st) == 0) return copy(name); /* fail if this was an absolute filename or if there is no sourcepath var */ if (is_absolute_pathname(name) || !cp_getvar("sourcepath", CP_LIST, &v, 0)) return NULL; for (; v; v = v->va_next) { switch (v->va_type) { case CP_STRING: cp_wstrip(v->va_string); (void) sprintf( buf, "%s%s%s", v->va_string, DIR_PATHSEP, name); break; case CP_NUM: (void) sprintf(buf, "%d%s%s", v->va_num, DIR_PATHSEP, name); break; case CP_REAL: /* This is foolish */ (void) sprintf(buf, "%g%s%s", v->va_real, DIR_PATHSEP, name); break; default: fprintf(stderr, "ERROR: enumeration value `CP_BOOL' or `CP_LIST' not " "handled in inp_pathresolve\nAborting...\n"); controlled_exit(EXIT_FAILURE); break; } if (stat(buf, &st) == 0) return copy(buf); } return (NULL); } static char *inp_pathresolve_at(char *name, char *dir) { char buf[BSIZE_SP], *end; /* if name is an absolute path name, * or if we haven't anything to prepend anyway */ if (is_absolute_pathname(name) || !dir || !dir[0]) return inp_pathresolve(name); if (name[0] == '~' && name[1] == '/') { char *y = cp_tildexpand(name); if (y) { char *r = inp_pathresolve(y); tfree(y); return r; } } /* * Try in current dir and then in the actual dir the file was read. * Current dir . is needed to correctly support absolute paths in * sourcepath */ strcpy(buf, "."); end = strchr(buf, '\0'); if (end[-1] != DIR_TERM) *end++ = DIR_TERM; strcpy(end, name); char *r = inp_pathresolve(buf); if (r) return r; strcpy(buf, dir); end = strchr(buf, '\0'); if (end[-1] != DIR_TERM) *end++ = DIR_TERM; strcpy(end, name); return inp_pathresolve(buf); } /*-------------------------------------------------------------------------* * This routine reads a line (of arbitrary length), up to a '\n' or 'EOF' * * and returns a pointer to the resulting null terminated string. * * The '\n' if found, is included in the returned string. * * From: jason@ucbopal.BERKELEY.EDU (Jason Venner) * * Newsgroups: net.sources * *-------------------------------------------------------------------------*/ #define STRGROW 256 static char *readline(FILE *fd) { int c; int memlen; char *strptr; int strlen; strlen = 0; memlen = STRGROW; strptr = TMALLOC(char, memlen); memlen -= 1; /* Save constant -1's in while loop */ while ((c = getc(fd)) != EOF) { if (strlen == 0 && (c == '\t' || c == ' ')) /* Leading spaces away */ continue; if (c == '\r') continue; strptr[strlen++] = (char) c; if (strlen >= memlen) { memlen += STRGROW; if ((strptr = TREALLOC(char, strptr, memlen + 1)) == NULL) return (NULL); } if (c == '\n') break; } if (!strlen) { tfree(strptr); return (NULL); } // strptr[strlen] = '\0'; /* Trim the string */ strptr = TREALLOC(char, strptr, strlen + 1); strptr[strlen] = '\0'; return (strptr); } /* Replace "gnd" by " 0 " Delimiters of gnd may be ' ' or ',' or '(' or ')', may be disabled by setting variable no_auto_gnd */ static void inp_fix_gnd_name(struct card *c) { for (; c; c = c->nextcard) { char *gnd = c->line; // if there is a comment or no gnd, go to next line if ((*gnd == '*') || !strstr(gnd, "gnd")) continue; // replace "?gnd?" by "? 0 ?", ? being a ' ' ',' '(' ')'. while ((gnd = strstr(gnd, "gnd")) != NULL) { if ((isspace_c(gnd[-1]) || gnd[-1] == '(' || gnd[-1] == ',') && (isspace_c(gnd[3]) || gnd[3] == ')' || gnd[3] == ',')) { memcpy(gnd, " 0 ", 3); } gnd += 3; } // now remove the extra white spaces around 0 c->line = inp_remove_ws(c->line); } } /* * transform a VCVS "gate" instance into a XSPICE instance * * Exx out+ out- {nand|nor|and|or}(n) * + in[1]+ in[1]- ... in[n]+ in[n]- * + x1,y1 x2,y2 * ==> * Axx %vd[ in[1]+ in[1]- ... in[n]+ in[n]- ] * + %vd( out+ out- ) Exx * .model Exx multi_input_pwd ( x = [x1 x2] x = [y1 y2] model = * {nand|nor|and|or} ) * * fixme, * `n' is not checked * the x,y list is fixed to length 2 */ static void inp_chk_for_multi_in_vcvs(struct card *c, int *line_number) { int skip_control = 0; for (; c; c = c->nextcard) { char *line = c->line; /* there is no e source inside .control ... .endc */ if (ciprefix(".control", line)) { skip_control++; continue; } else if (ciprefix(".endc", line)) { skip_control--; continue; } else if (skip_control > 0) { continue; } if (*line == 'e') { char *fcn_b; if (((fcn_b = strstr(line, "nand(")) != NULL || (fcn_b = strstr(line, "and(")) != NULL || (fcn_b = strstr(line, "nor(")) != NULL || (fcn_b = strstr(line, "or(")) != NULL) && isspace_c(fcn_b[-1])) { char keep, *comma_ptr, *xy_values1[5], *xy_values2[5]; char *out_str, *ctrl_nodes_str, *xy_values1_b = NULL, *ref_str, *fcn_name, *fcn_e = NULL, *out_b, *out_e, *ref_e; char *m_instance, *m_model; char *xy_values2_b = NULL, *xy_values1_e = NULL, *ctrl_nodes_b = NULL, *ctrl_nodes_e = NULL; int xy_count1, xy_count2; bool ok = FALSE; #ifndef XSPICE fprintf(stderr, "\n" "Error: XSPICE is required to run the 'multi-input " "pwl' option in line %d\n" " %s\n" "\n" "See manual chapt. 31 for installation " "instructions\n", *line_number, line); controlled_exit(EXIT_BAD); #endif do { ref_e = skip_non_ws(line); out_b = skip_ws(ref_e); out_e = skip_back_ws(fcn_b, out_b); if (out_e <= out_b) break; fcn_e = strchr(fcn_b, '('); ctrl_nodes_b = strchr(fcn_e, ')'); if (!ctrl_nodes_b) break; ctrl_nodes_b = skip_ws(ctrl_nodes_b + 1); comma_ptr = strchr(ctrl_nodes_b, ','); if (!comma_ptr) break; xy_values1_b = skip_back_ws(comma_ptr, ctrl_nodes_b); if (xy_values1_b[-1] == '}') { while (--xy_values1_b >= ctrl_nodes_b) if (*xy_values1_b == '{') break; } else { xy_values1_b = skip_back_non_ws(xy_values1_b, ctrl_nodes_b); } if (xy_values1_b <= ctrl_nodes_b) break; ctrl_nodes_e = skip_back_ws(xy_values1_b, ctrl_nodes_b); if (ctrl_nodes_e <= ctrl_nodes_b) break; xy_values1_e = skip_ws(comma_ptr + 1); if (*xy_values1_e == '{') { xy_values1_e = inp_spawn_brace(xy_values1_e); } else { xy_values1_e = skip_non_ws(xy_values1_e); } if (!xy_values1_e) break; xy_values2_b = skip_ws(xy_values1_e); ok = TRUE; } while (0); if (!ok) { fprintf(stderr, "ERROR: malformed line: %s\n", line); controlled_exit(EXIT_FAILURE); } ref_str = copy_substring(line, ref_e); out_str = copy_substring(out_b, out_e); fcn_name = copy_substring(fcn_b, fcn_e); ctrl_nodes_str = copy_substring(ctrl_nodes_b, ctrl_nodes_e); keep = *xy_values1_e; *xy_values1_e = '\0'; xy_count1 = get_comma_separated_values(xy_values1, xy_values1_b); *xy_values1_e = keep; xy_count2 = get_comma_separated_values(xy_values2, xy_values2_b); // place restrictions on only having 2 point values; this can // change later if (xy_count1 != 2 && xy_count2 != 2) fprintf(stderr, "ERROR: only expecting 2 pair values for " "multi-input vcvs!\n"); m_instance = tprintf("%s %%vd[ %s ] %%vd( %s ) %s", ref_str, ctrl_nodes_str, out_str, ref_str); m_instance[0] = 'a'; m_model = tprintf(".model %s multi_input_pwl ( x = [%s %s] y " "= [%s %s] model = \"%s\" )", ref_str, xy_values1[0], xy_values2[0], xy_values1[1], xy_values2[1], fcn_name); tfree(ref_str); tfree(out_str); tfree(fcn_name); tfree(ctrl_nodes_str); tfree(xy_values1[0]); tfree(xy_values1[1]); tfree(xy_values2[0]); tfree(xy_values2[1]); *c->line = '*'; c = insert_new_line(c, m_instance, (*line_number)++, 0); c = insert_new_line(c, m_model, (*line_number)++, 0); } } } } /* If ngspice is started with option -a, then variable 'autorun' * will be set and the following function scans the deck. * If 'run' is not found, a .control section will be added: * .control * run * op ; if .op is found * write rawfile ; if rawfile given * .endc */ static void inp_add_control_section(struct card *deck, int *line_number) { struct card *c, *prev_card = NULL; bool found_control = FALSE, found_run = FALSE; bool found_end = FALSE; char *op_line = NULL, rawfile[1000], *line; for (c = deck; c; c = c->nextcard) { if (*c->line == '*') continue; if (ciprefix(".op ", c->line)) { *c->line = '*'; op_line = c->line + 1; } if (ciprefix(".end", c->line)) found_end = TRUE; if (found_control && ciprefix("run", c->line)) found_run = TRUE; if (ciprefix(".control", c->line)) found_control = TRUE; if (ciprefix(".endc", c->line)) { found_control = FALSE; if (!found_run) { prev_card = insert_new_line( prev_card, copy("run"), (*line_number)++, 0); found_run = TRUE; } if (cp_getvar("rawfile", CP_STRING, rawfile, sizeof(rawfile))) { line = tprintf("write %s", rawfile); prev_card = insert_new_line(prev_card, line, (*line_number)++, 0); } } prev_card = c; } // check if need to add control section if (!found_run && found_end) { deck = insert_new_line(deck, copy(".control"), (*line_number)++, 0); deck = insert_new_line(deck, copy("run"), (*line_number)++, 0); if (op_line) deck = insert_new_line(deck, copy(op_line), (*line_number)++, 0); if (cp_getvar("rawfile", CP_STRING, rawfile, sizeof(rawfile))) { line = tprintf("write %s", rawfile); deck = insert_new_line(deck, line, (*line_number)++, 0); } deck = insert_new_line(deck, copy(".endc"), (*line_number)++, 0); } } /* overwrite shell-style end-of-line continuation '\\' with spaces, * and return TRUE when found */ static bool chk_for_line_continuation(char *line) { if (*line != '*' && *line != '$') { char *ptr = skip_back_ws(strchr(line, '\0'), line); if ((ptr - 2 >= line) && (ptr[-1] == '\\') && (ptr[-2] == '\\')) { ptr[-1] = ' '; ptr[-2] = ' '; return TRUE; } } return FALSE; } // // change .macro --> .subckt // .eom --> .ends // .subckt name 1 2 3 params: w=9u l=180n --> .subckt name 1 2 3 w=9u // l=180n .subckt name (1 2 3) --> .subckt name 1 2 3 x1 (1 2 3) --> x1 // 1 2 3 .param func1(x,y) = {x*y} --> .func func1(x,y) {x*y} static void inp_fix_macro_param_func_paren_io(struct card *card) { char *str_ptr, *new_str; for (; card; card = card->nextcard) { if (*card->line == '*') continue; if (ciprefix(".macro", card->line) || ciprefix(".eom", card->line)) { str_ptr = skip_non_ws(card->line); if (ciprefix(".macro", card->line)) { new_str = tprintf(".subckt%s", str_ptr); } else { new_str = tprintf(".ends%s", str_ptr); } tfree(card->line); card->line = new_str; } if (ciprefix(".subckt", card->line) || ciprefix("x", card->line)) { /* remove () */ str_ptr = skip_non_ws( card->line); // skip over .subckt, instance name str_ptr = skip_ws(str_ptr); if (ciprefix(".subckt", card->line)) { str_ptr = skip_non_ws(str_ptr); // skip over subckt name str_ptr = skip_ws(str_ptr); } if (*str_ptr == '(') { *str_ptr = ' '; while (*str_ptr != '\0') { if (*str_ptr == ')') { *str_ptr = ' '; break; } str_ptr++; } card->line = inp_remove_ws( card->line); /* remove the extra white spaces just introduced */ } } if (ciprefix(".para", card->line)) { bool is_func = FALSE; str_ptr = skip_non_ws(card->line); // skip over .param str_ptr = skip_ws(str_ptr); while (!isspace_c(*str_ptr) && *str_ptr != '=') { if (*str_ptr == '(') is_func = TRUE; str_ptr++; } if (is_func) { str_ptr = strchr(card->line, '='); if (str_ptr) *str_ptr = ' '; str_ptr = card->line + 1; str_ptr[0] = 'f'; str_ptr[1] = 'u'; str_ptr[2] = 'n'; str_ptr[3] = 'c'; str_ptr[4] = ' '; } } } } static char *get_instance_subckt(char *line) { char *end_ptr, *inst_name_ptr; char *equal_ptr = strchr(line, '='); // see if instance has parameters if (equal_ptr) { end_ptr = skip_back_ws(equal_ptr, line); end_ptr = skip_back_non_ws(end_ptr, line); } else { end_ptr = strchr(line, '\0'); } end_ptr = skip_back_ws(end_ptr, line); inst_name_ptr = skip_back_non_ws(end_ptr, line); return copy_substring(inst_name_ptr, end_ptr); } static char *get_subckt_model_name(char *line) { char *name, *end_ptr; name = skip_non_ws(line); // eat .subckt|.model name = skip_ws(name); end_ptr = skip_non_ws(name); return copy_substring(name, end_ptr); } static char *get_model_name(char *line, int num_terminals) { char *beg_ptr, *end_ptr; int i = 0; beg_ptr = skip_non_ws(line); /* eat device name */ beg_ptr = skip_ws(beg_ptr); for (i = 0; i < num_terminals; i++) { /* skip the terminals */ beg_ptr = skip_non_ws(beg_ptr); beg_ptr = skip_ws(beg_ptr); } if (*line == 'r') /* special dealing for r models */ if ((*beg_ptr == '+') || (*beg_ptr == '-') || isdigit_c(*beg_ptr)) { /* looking for a value before model */ beg_ptr = skip_non_ws(beg_ptr); /* skip the value */ beg_ptr = skip_ws(beg_ptr); } end_ptr = skip_non_ws(beg_ptr); return copy_substring(beg_ptr, end_ptr); } static char *get_model_type(char *line) { char *beg_ptr; if (!ciprefix(".model", line)) return NULL; beg_ptr = skip_non_ws(line); /* eat .model */ beg_ptr = skip_ws(beg_ptr); beg_ptr = skip_non_ws(beg_ptr); /* eat model name */ beg_ptr = skip_ws(beg_ptr); return gettok_noparens(&beg_ptr); } static char *get_adevice_model_name(char *line) { char *ptr_end, *ptr_beg; ptr_end = skip_back_ws(strchr(line, '\0'), line); ptr_beg = skip_back_non_ws(ptr_end, line); return copy_substring(ptr_beg, ptr_end); } /* * To distinguish modelname tokens from other tokens * by checking if token is not a valid ngspice number */ static int is_a_modelname(const char *s) { char *st; double testval; /*token contains a '=' */ if (strchr(s, '=')) return FALSE; /* first character of model name is character from alphabet */ if (isalpha_c(s[0])) return TRUE; /* first characters not allowed in model name (including '\0')*/ if (strchr("{*^@\\\'", s[0])) return FALSE; /* not beeing a valid number */ testval = strtod(s, &st); /* conversion failed, so no number */ if (eq(s, st)) return TRUE; /* test if we have a true number */ else if (*st == '\0' || isspace(*st)) return FALSE; else { /* look for the scale factor (alphabetic) and skip it. * INPevaluate will not do it because is does not swallow * the scale factor from the string. */ switch (*st) { case 't': case 'T': case 'g': case 'G': case 'k': case 'K': case 'u': case 'U': case 'n': case 'N': case 'p': case 'P': case 'f': case 'F': st = st + 1; break; case 'm': case 'M': if (((st[1] == 'E') || (st[1] == 'e')) && ((st[2] == 'G') || (st[2] == 'g'))) { st = st + 3; /* Meg */ } else if (((st[1] == 'I') || (st[1] == 'i')) && ((st[2] == 'L') || (st[2] == 'l'))) { st = st + 3; /* Mil */ } else { st = st + 1; /* m, milli */ } break; default: break; } /* test if we have a true scale factor */ if (*st == '\0' || isspace(*st)) return FALSE; /* test if people use Ohms, F, H for RLC, like pF or uOhms */ if (ciprefix("ohms", st)) st = st + 4; else if (ciprefix("farad", st)) st = st + 5; else if (ciprefix("henry", st)) st = st + 5; else if ((*st == 'f') || (*st == 'h')) st = st + 1; if (*st == '\0' || isspace(*st)) return FALSE; } /* token starts with non alphanum character */ return TRUE; } struct nlist { char **names; int num_names; int size; }; static const char *nlist_find(const struct nlist *nlist, const char *name) { int i; for (i = 0; i < nlist->num_names; i++) if (strcmp(nlist->names[i], name) == 0) return nlist->names[i]; return NULL; } #if 0 static const char *nlist_model_find( const struct nlist *nlist, const char *name) { int i; for (i = 0; i < nlist->num_names; i++) if (model_name_match(nlist->names[i], name)) return nlist->names[i]; return NULL; } #endif static void nlist_adjoin(struct nlist *nlist, char *name) { if (nlist_find(nlist, name)) { tfree(name); return; } if (nlist->num_names >= nlist->size) nlist->names = TREALLOC(char *, nlist->names, nlist->size *= 2); nlist->names[nlist->num_names++] = name; } static struct nlist *nlist_allocate(int size) { struct nlist *t = TMALLOC(struct nlist, 1); t->names = TMALLOC(char *, size); t->size = size; return t; } static void nlist_destroy(struct nlist *nlist) { int i; for (i = 0; i < nlist->num_names; i++) tfree(nlist->names[i]); tfree(nlist->names); tfree(nlist); } static void get_subckts_for_subckt(struct card *start_card, char *subckt_name, struct nlist *used_subckts, struct nlist *used_models, bool has_models) { struct card *card; int first_new_subckt = used_subckts->num_names; bool found_subckt = FALSE; int i, fence; for (card = start_card; card; card = card->nextcard) { char *line = card->line; /* no models embedded in these lines */ if (strchr("*vibefghkt", *line)) continue; if ((ciprefix(".ends", line) || ciprefix(".eom", line)) && found_subckt) break; if (ciprefix(".subckt", line) || ciprefix(".macro", line)) { char *curr_subckt_name = get_subckt_model_name(line); if (strcmp(curr_subckt_name, subckt_name) == 0) found_subckt = TRUE; tfree(curr_subckt_name); } if (found_subckt) { if (*line == 'x') { char *inst_subckt_name = get_instance_subckt(line); nlist_adjoin(used_subckts, inst_subckt_name); } else if (*line == 'a') { char *model_name = get_adevice_model_name(line); nlist_adjoin(used_models, model_name); } else if (has_models) { int num_terminals = get_number_terminals(line); if (num_terminals != 0) { char *model_name = get_model_name(line, num_terminals); if (is_a_modelname(model_name)) nlist_adjoin(used_models, model_name); else tfree(model_name); } } } } // now make recursive call on instances just found above fence = used_subckts->num_names; for (i = first_new_subckt; i < fence; i++) get_subckts_for_subckt(start_card, used_subckts->names[i], used_subckts, used_models, has_models); } /* iterate through the deck and comment out unused subckts, models (don't want to waste time processing everything) also comment out .param lines with no parameters defined */ static void comment_out_unused_subckt_models(struct card *start_card) { struct card *card; struct nlist *used_subckts, *used_models; int i = 0, fence; bool processing_subckt = FALSE, remove_subckt = FALSE, has_models = FALSE; int skip_control = 0, nested_subckt = 0; used_subckts = nlist_allocate(100); used_models = nlist_allocate(100); for (card = start_card; card; card = card->nextcard) { if (ciprefix(".model", card->line)) has_models = TRUE; if (ciprefix(".cmodel", card->line)) has_models = TRUE; if (ciprefix(".para", card->line) && !strchr(card->line, '=')) *card->line = '*'; } for (card = start_card; card; card = card->nextcard) { char *line = card->line; /* no models embedded in these lines */ if (strchr("*vibefghkt", *line)) continue; /* there is no .subckt, .model or .param inside .control ... .endc */ if (ciprefix(".control", line)) { skip_control++; continue; } else if (ciprefix(".endc", line)) { skip_control--; continue; } else if (skip_control > 0) { continue; } if (ciprefix(".subckt", line) || ciprefix(".macro", line)) processing_subckt = TRUE; if (ciprefix(".ends", line) || ciprefix(".eom", line)) processing_subckt = FALSE; if (!processing_subckt) { if (*line == 'x') { char *subckt_name = get_instance_subckt(line); nlist_adjoin(used_subckts, subckt_name); } else if (*line == 'a') { char *model_name = get_adevice_model_name(line); nlist_adjoin(used_models, model_name); } else if (has_models) { /* This is a preliminary version, until we have found a reliable method to detect the model name out of the input line (Many options have to be taken into account.). */ int num_terminals = get_number_terminals(line); if (num_terminals != 0) { char *model_name = get_model_name(line, num_terminals); if (is_a_modelname(model_name)) nlist_adjoin(used_models, model_name); else tfree(model_name); } } /* if (has_models) */ } /* if (!processing_subckt) */ } /* for loop through all cards */ fence = used_subckts->num_names; for (i = 0; i < fence; i++) get_subckts_for_subckt(start_card, used_subckts->names[i], used_subckts, used_models, has_models); /* comment out any unused subckts, currently only at top level */ for (card = start_card; card; card = card->nextcard) { char *line = card->line; if (*line == '*') continue; if (ciprefix(".subckt", line) || ciprefix(".macro", line)) { char *subckt_name = get_subckt_model_name(line); /* check if unused, only at top level */ if (nested_subckt++ == 0) remove_subckt = !nlist_find(used_subckts, subckt_name); tfree(subckt_name); } if (ciprefix(".ends", line) || ciprefix(".eom", line)) { if (remove_subckt) *line = '*'; if (--nested_subckt == 0) remove_subckt = FALSE; } if (remove_subckt) *line = '*'; #if 0 else if (has_models && (ciprefix(".model", line) || ciprefix(".cmodel", line))) { char *model_type = get_model_type(line); char *model_name = get_subckt_model_name(line); /* keep R, L, C models because in addition to no. of terminals the value may be given, as in RE1 1 2 800 newres dtemp=5, so model name may be token no. 4 or 5, and, if 5, will not be detected by get_subckt_model_name()*/ if (!cieq(model_type, "c") && !cieq(model_type, "l") && !cieq(model_type, "r") && !nlist_model_find(used_models, model_name)) { *line = '*'; } tfree(model_type); tfree(model_name); } #endif } nlist_destroy(used_subckts); nlist_destroy(used_models); } #if 0 // find closing paren static char * inp_search_closing_paren(char *s) { int count = 0; // assert(*s == '(') while (*s) { if (*s == '(') count++; if (*s == ')') count--; if (count == 0) return s + 1; s++; } return NULL; } #endif #if 0 /* search backwards for opening paren */ static char * inp_search_opening_paren(char *s, char *start) { int count = 0; // assert(*s == ')') while (s >= start) { if (*s == '(') count--; if (*s == ')') count++; if (count == 0) return s; s--; } return NULL; } #endif /* search forward for closing brace */ static char *inp_spawn_brace(char *s) { int count = 0; // assert(*s == '{') while (*s) { if (*s == '{') count++; if (*s == '}') count--; if (count == 0) return s + 1; s++; } return NULL; } /*-------------------------------------------------------------------------* removes " " quotes, returns lower case letters, replaces non-printable characterss with '_', however if non-printable character is the only character in a line, replace it by '*' *-------------------------------------------------------------------------*/ void inp_casefix(char *string) { #ifdef HAVE_CTYPE_H /* single non-printable character */ if(string && !isspace_c(*string) && !isprint_c(*string) && (string[1] == '\0' || isspace_c(string[1]))) { *string = '*'; return; } if (string) while (*string) { #ifdef HAS_ASCII /* ((*string) & 0177): mask off all but the first seven bits, * 0177: octal */ *string = (char) strip(*string); #endif if (*string == '"') { *string++ = ' '; while (*string && *string != '"') string++; if (*string == '\0') continue; /* needed if string is "something ! */ if (*string == '"') *string = ' '; } if (!isspace_c(*string) && !isprint_c(*string)) *string = '_'; if (isupper_c(*string)) *string = tolower_c(*string); string++; } #endif } /* Strip all end-of-line comments from a deck For cf == TRUE (script files, command files like spinit, .spiceinit) and for .control sections only '$ ' is accepted as end-of-line comment, to avoid conflict with $variable definition, otherwise we accept '$'. */ static void inp_stripcomments_deck(struct card *c, bool cf) { bool found_control = FALSE; for (; c; c = c->nextcard) { /* exclude lines between .control and .endc from removing white spaces */ if (ciprefix(".control", c->line)) found_control = TRUE; if (ciprefix(".endc", c->line)) found_control = FALSE; inp_stripcomments_line(c->line, found_control | cf); } } /* * Support for end-of-line comments that begin with any of the following: * ';' * '$' (only outside of a .control section) * '$ ' * '//' (like in c++ and as per the numparam code) * Any following text to the end of the line is ignored. * Note requirement for $ to be followed by a space, if we are inside of a * .control section or in a command file. This is to avoid conflict * with use of $ in front of a variable. * Comments on a continuation line (i.e. line begining with '+') are allowed * and are removed before lines are stitched. * Lines that contain only an end-of-line comment with or without leading white * space are also allowed. If there is only white space before the end-of-line comment the the whole line is converted to a normal comment line (i.e. one that begins with a '*'). BUG: comment characters in side of string literals are not ignored ('$' outside of .control section is o.k. however). If the comaptibility mode is PS, LTPS or LTPSA, '$' is treated as a valid character, not as end-of-line comment delimiter, except for that it is located at the beginning of a line. If inside of a control section, still '$ ' is read a an end-of-line comment delimiter.*/ static void inp_stripcomments_line(char *s, bool cs) { char c = ' '; /* anything other than a comment character */ char *d = s; if (*s == '\0') return; /* empty line */ if (*s == '*') return; /* line is already a comment */ /* look for comments */ while ((c = *d) != '\0') { d++; if (*d == ';') { break; } /* outside of .control section, and not in PS mode */ else if (!cs && (c == '$') && inp_compat_mode != COMPATMODE_PS && inp_compat_mode != COMPATMODE_LTPS && inp_compat_mode != COMPATMODE_LTPSA) { /* The character before '&' has to be ',' or ' ' or tab. A valid numerical expression directly before '$' is not yet supported. */ if ((d - 2 >= s) && ((d[-2] == ' ') || (d[-2] == ',') || (d[-2] == '\t'))) { d--; break; } } else if (cs && (c == '$') && (*d == ' ')) { /* inside of .control section or command file */ d--; /* move d back to first comment character */ break; } else if ((c == '/') && (*d == '/')) { d--; /* move d back to first comment character */ break; } } /* d now points to the first comment character or the null at the string * end */ /* check for special case of comment at start of line */ if (d == s) { *s = '*'; /* turn into normal comment */ return; } if (d > s) { d--; /* d now points to character just before comment */ /* eat white space at new end of line */ while (d >= s) { if ((*d != ' ') && (*d != '\t')) break; d--; } d++; /* d now points to the first white space character before the end-of-line or end-of-line comment, or it points to the first end-of-line comment character, or to the begining of the line */ } /* Check for special case of comment at start of line with or without preceeding white space */ if (d <= s) { *s = '*'; /* turn the whole line into normal comment */ return; } *d = '\0'; /* terminate line in new location */ } static void inp_change_quotes(char *s) { bool first_quote = FALSE; for (; *s; s++) if (*s == '\'') { if (first_quote == FALSE) { *s = '{'; first_quote = TRUE; } else { *s = '}'; first_quote = FALSE; } } } static void add_name(struct names *p, char *name) { if (p->num_names >= N_SUBCKT_W_PARAMS) { fprintf(stderr, "ERROR, N_SUBCKT_W_PARMS overflow\n"); controlled_exit(EXIT_FAILURE); } p->names[p->num_names++] = name; } static char **find_name(struct names *p, char *name) { int i; for (i = 0; i < p->num_names; i++) if (strcmp(p->names[i], name) == 0) return &p->names[i]; return NULL; } static char *inp_fix_subckt(struct names *subckt_w_params, char *s) { struct card *head, *first_param_card, *c; char *equal, *beg, *buffer, *ptr1, *ptr2, *new_str; equal = strchr(s, '='); if (equal && !strstr(s, "params:")) { /* get subckt name (ptr1 will point to name) */ ptr1 = skip_non_ws(s); ptr1 = skip_ws(ptr1); for (ptr2 = ptr1; *ptr2 && !isspace_c(*ptr2) && !isquote(*ptr2); ptr2++) ; add_name(subckt_w_params, copy_substring(ptr1, ptr2)); /* go to beginning of first parameter word */ /* s will contain only subckt definition */ /* beg will point to start of param list */ beg = skip_back_ws(equal, s); beg = skip_back_non_ws(beg, s); beg[-1] = '\0'; /* fixme can be < s */ head = insert_new_line(NULL, NULL, 0, 0); /* create list of parameters that need to get sorted */ first_param_card = c = NULL; while ((ptr1 = strchr(beg, '=')) != NULL) { ptr2 = skip_ws(ptr1 + 1); ptr1 = skip_back_ws(ptr1, beg); ptr1 = skip_back_non_ws(ptr1, beg); /* ptr1 points to beginning of parameter */ if (*ptr2 == '{') ptr2 = inp_spawn_brace(ptr2); else ptr2 = skip_non_ws(ptr2); if (!ptr2) { fprintf(stderr, "Error: Missing } in line %s\n", s); controlled_exit(EXIT_FAILURE); } beg = ptr2; c = insert_new_line(c, copy_substring(ptr1, ptr2), 0, 0); if (!first_param_card) first_param_card = c; } /* now sort parameters in order of dependencies */ inp_sort_params(first_param_card, head, NULL, NULL); /* create new ordered parameter string for subckt call */ new_str = NULL; for (c = head->nextcard; c; c = c->nextcard) if (new_str == NULL) { new_str = copy(c->line); } else { char *x = tprintf("%s %s", new_str, c->line); tfree(new_str); new_str = x; } line_free_x(head, TRUE); /* create buffer and insert params: */ buffer = tprintf("%s params: %s", s, new_str); tfree(s); tfree(new_str); s = buffer; } return s; } /* * this function shall: * reduce sequences of whitespace to one space * and to drop even that if it seems to be at a `safe' place to do so * safe place means: * before or behind a '=' * before or behind an operator within a {} expression * whereby `operator' is classified by `is_arith_char()' * fixme: * thats odd and very naive business */ static char *inp_remove_ws(char *s) { char *x = s; char *d = s; int brace_level = 0; /* preserve at least one whitespace at beginning of line * fixme, * is this really necessary ? * or is this an artefact of original inp_remove_ws() implementation ? */ if (isspace_c(*s)) *d++ = *s++; while (*s != '\0') { if (*s == '{') brace_level++; if (*s == '}') brace_level--; if (isspace_c(*s)) { s = skip_ws(s); if (!(*s == '\0' || *s == '=' || ((brace_level > 0) && (is_arith_char(*s) || *s == ',')))) *d++ = ' '; continue; } if (*s == '=' || ((brace_level > 0) && (is_arith_char(*s) || *s == ','))) { *d++ = *s++; s = skip_ws(s); continue; } *d++ = *s++; } *d = '\0'; if (d == s) return x; s = copy(x); tfree(x); return s; } /* change quotes from '' to {} .subckt name 1 2 3 params: l=1 w=2 --> .subckt name 1 2 3 l=1 w=2 x1 1 2 3 params: l=1 w=2 --> x1 1 2 3 l=1 w=2 modify .subckt lines by calling inp_fix_subckt() No changes to lines in .control section ! */ static void inp_fix_for_numparam( struct names *subckt_w_params, struct card *c) { bool found_control = FALSE; for (; c; c = c->nextcard) { if (*(c->line) == '*' || ciprefix(".lib", c->line)) continue; /* exclude lines between .control and .endc from getting quotes * changed */ if (ciprefix(".control", c->line)) found_control = TRUE; if (ciprefix(".endc", c->line)) found_control = FALSE; if (found_control) continue; inp_change_quotes(c->line); if ((inp_compat_mode == COMPATMODE_ALL) || (inp_compat_mode == COMPATMODE_PS) || (inp_compat_mode == COMPATMODE_PSA) || (inp_compat_mode == COMPATMODE_LTPS) || (inp_compat_mode == COMPATMODE_LTPSA)) if (ciprefix(".subckt", c->line) || ciprefix("x", c->line)) { /* remove params: */ char *str_ptr = strstr(c->line, "params:"); if (str_ptr) memcpy(str_ptr, " ", 7); } if (ciprefix(".subckt", c->line)) c->line = inp_fix_subckt(subckt_w_params, c->line); } } static void inp_remove_excess_ws(struct card *c) { bool found_control = FALSE; for (; c; c = c->nextcard) { if (*c->line == '*') continue; /* exclude echo lines between .control and .endc from removing white * spaces */ if (ciprefix(".control", c->line)) found_control = TRUE; if (ciprefix(".endc", c->line)) found_control = FALSE; if (found_control && ciprefix("echo", c->line)) continue; c->line = inp_remove_ws(c->line); /* freed in fcn */ } } static struct card *expand_section_ref(struct card *c, char *dir_name) { char *line = c->line; char *s, *s_e, *y; s = skip_non_ws(line); while (isspace_c(*s) || isquote(*s)) s++; for (s_e = s; *s_e && !isspace_c(*s_e) && !isquote(*s_e); s_e++) ; y = s_e; while (isspace_c(*y) || isquote(*y)) y++; if (*y) { /* library section reference: `.lib ' */ struct card *section_def; char keep_char1, keep_char2; char *y_e; struct library *lib; for (y_e = y; *y_e && !isspace_c(*y_e) && !isquote(*y_e); y_e++) ; keep_char1 = *s_e; keep_char2 = *y_e; *s_e = '\0'; *y_e = '\0'; lib = read_a_lib(s, dir_name); if (!lib) { fprintf(stderr, "ERROR, library file %s not found\n", s); controlled_exit(EXIT_FAILURE); } section_def = find_section_definition(lib->deck, y); if (!section_def) { fprintf(stderr, "ERROR, library file %s, section definition %s not " "found\n", s, y); controlled_exit(EXIT_FAILURE); } /* recursively expand the refered section itself */ { struct card *t = section_def; for (; t; t = t->nextcard) { if (ciprefix(".endl", t->line)) break; if (ciprefix(".lib", t->line)) t = expand_section_ref(t, lib->habitat); } if (!t) { fprintf(stderr, "ERROR, .endl not found\n"); controlled_exit(EXIT_FAILURE); } } /* insert the library section definition into `c' */ { struct card *t = section_def; for (; t; t = t->nextcard) { c = insert_new_line( c, copy(t->line), t->linenum, t->linenum_orig); if (t == section_def) { c->line[0] = '*'; c->line[1] = '<'; } if (ciprefix(".endl", t->line)) { c->line[0] = '*'; c->line[1] = '>'; break; } } if (!t) { fprintf(stderr, "ERROR, .endl not found\n"); controlled_exit(EXIT_FAILURE); } } *line = '*'; /* comment out .lib line */ *s_e = keep_char1; *y_e = keep_char2; } return c; } /* * recursively expand library section references, * either * every library section reference (when the given section_name_ === NULL) * or * just those references occuring in the given library section definition */ static void expand_section_references(struct card *c, char *dir_name) { for (; c; c = c->nextcard) if (ciprefix(".lib", c->line)) c = expand_section_ref(c, dir_name); } static char *inp_get_subckt_name(char *s) { char *subckt_name, *end_ptr = strchr(s, '='); if (end_ptr) { end_ptr = skip_back_ws(end_ptr, s); end_ptr = skip_back_non_ws(end_ptr, s); } else { end_ptr = strchr(s, '\0'); } end_ptr = skip_back_ws(end_ptr, s); subckt_name = skip_back_non_ws(end_ptr, s); return copy_substring(subckt_name, end_ptr); } static int inp_get_params( char *line, char *param_names[], char *param_values[]) { char *equal_ptr; char *end, *name, *value; int num_params = 0; char keep; while ((equal_ptr = find_assignment(line)) != NULL) { /* get parameter name */ end = skip_back_ws(equal_ptr, line); name = skip_back_non_ws(end, line); if (num_params == NPARAMS) { fprintf(stderr, "Error: to many params in a line, max is %d\n", NPARAMS); controlled_exit(EXIT_FAILURE); } param_names[num_params++] = copy_substring(name, end); /* get parameter value */ value = skip_ws(equal_ptr + 1); if (*value == '{') end = inp_spawn_brace(value); else end = skip_non_ws(value); if (!end) { fprintf(stderr, "Error: Missing } in %s\n", line); controlled_exit(EXIT_FAILURE); } keep = *end; *end = '\0'; if (*value == '{' || isdigit_c(*value) || (*value == '.' && isdigit_c(value[1]))) { value = copy(value); } else { value = tprintf("{%s}", value); } param_values[num_params - 1] = value; *end = keep; line = end; } return num_params; } static char *inp_fix_inst_line(char *inst_line, int num_subckt_params, char *subckt_param_names[], char *subckt_param_values[], int num_inst_params, char *inst_param_names[], char *inst_param_values[]) { char *end, *inst_name, *inst_name_end; char *curr_line = inst_line, *new_line = NULL; int i, j; inst_name_end = skip_non_ws(inst_line); inst_name = copy_substring(inst_line, inst_name_end); end = strchr(inst_line, '='); if (end) { end = skip_back_ws(end, inst_line); end = skip_back_non_ws(end, inst_line); end[-1] = '\0'; /* fixme can be < inst_line */ } for (i = 0; i < num_subckt_params; i++) for (j = 0; j < num_inst_params; j++) if (strcmp(subckt_param_names[i], inst_param_names[j]) == 0) { tfree(subckt_param_values[i]); subckt_param_values[i] = copy(inst_param_values[j]); } for (i = 0; i < num_subckt_params; i++) { new_line = tprintf("%s %s", curr_line, subckt_param_values[i]); tfree(curr_line); tfree(subckt_param_names[i]); tfree(subckt_param_values[i]); curr_line = new_line; } for (i = 0; i < num_inst_params; i++) { tfree(inst_param_names[i]); tfree(inst_param_values[i]); } tfree(inst_name); return curr_line; } /* If multiplier parameter 'm' is found on a X line, flag is set to TRUE. Function is called from inp_fix_inst_calls_for_numparam() */ static bool found_mult_param(int num_params, char *param_names[]) { int i; for (i = 0; i < num_params; i++) if (strcmp(param_names[i], "m") == 0) return TRUE; return FALSE; } /* If a subcircuit invocation (X-line) is found, which contains the multiplier parameter 'm', m is added to all lines inside the corresponding subcircuit except of some excluded in the code below Function is called from inp_fix_inst_calls_for_numparam() */ static int inp_fix_subckt_multiplier(struct names *subckt_w_params, struct card *subckt_card, int num_subckt_params, char *subckt_param_names[], char *subckt_param_values[]) { struct card *card; char *new_str; subckt_param_names[num_subckt_params] = copy("m"); subckt_param_values[num_subckt_params] = copy("1"); num_subckt_params++; if (!strstr(subckt_card->line, "params:")) { new_str = tprintf("%s params: m=1", subckt_card->line); add_name(subckt_w_params, get_subckt_model_name(subckt_card->line)); } else { new_str = tprintf("%s m=1", subckt_card->line); } tfree(subckt_card->line); subckt_card->line = new_str; for (card = subckt_card->nextcard; card && !ciprefix(".ends", card->line); card = card->nextcard) { char *curr_line = card->line; /* no 'm' for comment line, B, V, E, H and some others that are not * using 'm' in their model description */ if (strchr("*bvehaknopstuwy", curr_line[0])) continue; /* no 'm' for model cards */ if (ciprefix(".model", curr_line)) continue; new_str = tprintf("%s m={m}", curr_line); tfree(card->line); card->line = new_str; } return num_subckt_params; } static void inp_fix_inst_calls_for_numparam( struct names *subckt_w_params, struct card *deck) { struct card *c; char *subckt_param_names[NPARAMS]; char *subckt_param_values[NPARAMS]; char *inst_param_names[NPARAMS]; char *inst_param_values[NPARAMS]; int i; // first iterate through instances and find occurences where 'm' // multiplier needs to be added to the subcircuit -- subsequent instances // will then need this parameter as well for (c = deck; c; c = c->nextcard) { char *inst_line = c->line; if (*inst_line == '*') continue; if (ciprefix("x", inst_line)) { int num_inst_params = inp_get_params( inst_line, inst_param_names, inst_param_values); char *subckt_name = inp_get_subckt_name(inst_line); if (found_mult_param(num_inst_params, inst_param_names)) { struct card_assoc *a = find_subckt(c->level, subckt_name); if (a) { int num_subckt_params = inp_get_params(a->line->line, subckt_param_names, subckt_param_values); if (!found_mult_param( num_subckt_params, subckt_param_names)) inp_fix_subckt_multiplier(subckt_w_params, a->line, num_subckt_params, subckt_param_names, subckt_param_values); for (i = 0; i < num_subckt_params; i++) { tfree(subckt_param_names[i]); tfree(subckt_param_values[i]); } } } tfree(subckt_name); for (i = 0; i < num_inst_params; i++) { tfree(inst_param_names[i]); tfree(inst_param_values[i]); } } } for (c = deck; c; c = c->nextcard) { char *inst_line = c->line; if (*inst_line == '*') continue; if (ciprefix("x", inst_line)) { char *subckt_name = inp_get_subckt_name(inst_line); if (find_name(subckt_w_params, subckt_name)) { struct card *d; d = find_subckt(c->level, subckt_name)->line; { char *subckt_line = d->line; subckt_line = skip_non_ws(subckt_line); subckt_line = skip_ws(subckt_line); int num_subckt_params = inp_get_params(subckt_line, subckt_param_names, subckt_param_values); int num_inst_params = inp_get_params( inst_line, inst_param_names, inst_param_values); c->line = inp_fix_inst_line(inst_line, num_subckt_params, subckt_param_names, subckt_param_values, num_inst_params, inst_param_names, inst_param_values); for (i = 0; i < num_subckt_params; i++) { tfree(subckt_param_names[i]); tfree(subckt_param_values[i]); } for (i = 0; i < num_inst_params; i++) { tfree(inst_param_names[i]); tfree(inst_param_values[i]); } } } tfree(subckt_name); } } } static struct function *new_function(struct function_env *env, char *name) { struct function *f = TMALLOC(struct function, 1); f->name = name; f->num_parameters = 0; f->next = env->functions; env->functions = f; return f; } static struct function *find_function(struct function_env *env, char *name) { struct function *f; for (; env; env = env->up) for (f = env->functions; f; f = f->next) if (strcmp(f->name, name) == 0) return f; return NULL; } static void free_function(struct function *fcn) { int i; tfree(fcn->name); tfree(fcn->body); tfree(fcn->accept); for (i = 0; i < fcn->num_parameters; i++) tfree(fcn->params[i]); } static void new_function_parameter(struct function *fcn, char *parameter) { if (fcn->num_parameters >= N_PARAMS) { fprintf(stderr, "ERROR, N_PARAMS overflow\n"); controlled_exit(EXIT_FAILURE); } fcn->params[fcn->num_parameters++] = parameter; } static bool inp_strip_braces(char *s) { int nesting = 0; char *d = s; for (; *s; s++) if (*s == '{') { nesting++; } else if (*s == '}') { if (--nesting < 0) return FALSE; } else if (!isspace_c(*s)) { *d++ = *s; } *d++ = '\0'; return TRUE; } static void inp_get_func_from_line(struct function_env *env, char *line) { char *end, *orig_line = line; struct function *function; /* skip `.func' */ line = skip_non_ws(line); line = skip_ws(line); /* get function name */ end = line; while (*end && !isspace_c(*end) && *end != '(') end++; function = new_function(env, copy_substring(line, end)); end = skip_ws(end); if (*end != '(') goto Lerror; end = skip_ws(end + 1); /* get function parameters */ for (;;) { char *beg = end; while (*end && !isspace_c(*end) && *end != ',' && *end != ')') end++; if (end == beg) break; new_function_parameter(function, copy_substring(beg, end)); end = skip_ws(end); if (*end != ',') break; end = skip_ws(end + 1); if (*end == ')') goto Lerror; } if (*end != ')') goto Lerror; end = skip_ws(end + 1); // skip an unwanted and non advertised optional '=' if (*end == '=') end = skip_ws(end + 1); function->body = copy(end); if (inp_strip_braces(function->body)) { int i; char *accept = TMALLOC(char, function->num_parameters + 1); for (i = 0; i < function->num_parameters; i++) accept[i] = function->params[i][0]; accept[i] = '\0'; function->accept = accept; return; } tfree(function->body); Lerror: // fixme, free() fprintf(stderr, "ERROR: failed to parse .func in: %s\n", orig_line); controlled_exit(EXIT_FAILURE); } /* * grab functions at the current .subckt nesting level */ static void inp_grab_func(struct function_env *env, struct card *c) { int nesting = 0; for (; c; c = c->nextcard) { if (*c->line == '*') continue; if (ciprefix(".subckt", c->line)) nesting++; if (ciprefix(".ends", c->line)) nesting--; if (nesting < 0) break; if (nesting > 0) continue; if (ciprefix(".func", c->line)) { inp_get_func_from_line(env, c->line); *c->line = '*'; } } } static char *search_func_arg( char *str, struct function *fcn, int *which, char *str_begin) { for (; (str = strpbrk(str, fcn->accept)) != NULL; str++) { char before; if (str > str_begin) before = str[-1]; else before = '\0'; if (is_arith_char(before) || isspace_c(before) || strchr(",=", before)) { int i; for (i = 0; i < fcn->num_parameters; i++) { size_t len = strlen(fcn->params[i]); if (strncmp(str, fcn->params[i], len) == 0) { char after = str[len]; if (is_arith_char(after) || isspace_c(after) || strchr(",=", after)) { *which = i; return str; } } } } } return NULL; } static char *inp_do_macro_param_replace(struct function *fcn, char *params[]) { char *str = copy(fcn->body); int i; char *collect_ptr = NULL; char *arg_ptr = str; char *rest = str; while ((arg_ptr = search_func_arg(arg_ptr, fcn, &i, str)) != NULL) { char *p; int is_vi = 0; /* exclude v(nn, parameter), v(parameter, nn), v(parameter), and i(parameter) if here 'parameter' is also a node name */ /* go backwards from 'parameter' and find '(' */ for (p = arg_ptr; --p > str;) if (*p == '(' || *p == ')') { if ((*p == '(') && strchr("vi", p[-1]) && (p - 2 < str || is_arith_char(p[-2]) || isspace_c(p[-2]) || strchr(",=", p[-2]))) is_vi = 1; break; } /* if we have a true v( or i( */ if (is_vi) { /* go forward and find closing ')' */ for (p = arg_ptr + 1; *p; p++) if (*p == '(' || *p == ')') break; /* We have a true v(...) or i(...), so skip it, and continue searching for new 'parameter' */ if (*p == ')') { arg_ptr = p; continue; } } { size_t collect_ptr_len = collect_ptr ? strlen(collect_ptr) : 0; size_t len = strlen(rest) + strlen(params[i]) + 1; int prefix_len = (int) (arg_ptr - rest); if (str_has_arith_char(params[i])) { collect_ptr = TREALLOC( char, collect_ptr, collect_ptr_len + len + 2); sprintf(collect_ptr + collect_ptr_len, "%.*s(%s)", prefix_len, rest, params[i]); } else { collect_ptr = TREALLOC(char, collect_ptr, collect_ptr_len + len); sprintf(collect_ptr + collect_ptr_len, "%.*s%s", prefix_len, rest, params[i]); } } arg_ptr += strlen(fcn->params[i]); rest = arg_ptr; } if (collect_ptr) { char *new_str = tprintf("%s%s", collect_ptr, rest); tfree(collect_ptr); tfree(str); str = new_str; } return str; } static char *inp_expand_macro_in_str(struct function_env *env, char *str) { struct function *function; char *open_paren_ptr, *close_paren_ptr, *fcn_name, *params[FCN_PARAMS]; char *curr_ptr, *macro_str, *curr_str = NULL; int num_params, i; char *orig_ptr = str, *search_ptr = str, *orig_str = copy(str); char keep; // printf("%s: enter(\"%s\")\n", __FUNCTION__, str); while ((open_paren_ptr = strchr(search_ptr, '(')) != NULL) { fcn_name = open_paren_ptr; while (--fcn_name >= search_ptr) /* function name consists of numbers, letters and special * characters (VALIDCHARS) */ if (!isalnum_c(*fcn_name) && !strchr(VALIDCHARS, *fcn_name)) break; fcn_name++; search_ptr = open_paren_ptr + 1; if (open_paren_ptr == fcn_name) continue; *open_paren_ptr = '\0'; function = find_function(env, fcn_name); *open_paren_ptr = '('; if (!function) continue; /* find the closing paren */ { int num_parens = 1; char *c = open_paren_ptr + 1; for (; *c; c++) { if (*c == '(') num_parens++; if (*c == ')' && --num_parens == 0) break; } if (num_parens) { fprintf(stderr, "ERROR: did not find closing parenthesis for " "function call in str: %s\n", orig_str); controlled_exit(EXIT_FAILURE); } close_paren_ptr = c; } /* * if (ciprefix("v(", curr_ptr)) { * // look for any commas and change to ' ' * char *str_ptr = curr_ptr; * while (*str_ptr != '\0' && *str_ptr != ')') { * if (*str_ptr == ',' || *str_ptr == '(') * *str_ptr = ' '; str_ptr++; } * if (*str_ptr == ')') * *str_ptr = ' '; * } */ /* get the parameters */ curr_ptr = open_paren_ptr + 1; for (num_params = 0; curr_ptr < close_paren_ptr; curr_ptr++) { char *beg_parameter; int num_parens; if (isspace_c(*curr_ptr)) continue; beg_parameter = curr_ptr; num_parens = 0; for (; curr_ptr < close_paren_ptr; curr_ptr++) { if (*curr_ptr == '(') num_parens++; if (*curr_ptr == ')') num_parens--; if (*curr_ptr == ',' && num_parens == 0) break; } if (num_params == FCN_PARAMS) { fprintf(stderr, "Error: Too many params in fcn, max is %d\n", FCN_PARAMS); controlled_exit(EXIT_FAILURE); } params[num_params++] = inp_expand_macro_in_str( env, copy_substring(beg_parameter, curr_ptr)); } if (function->num_parameters != num_params) { fprintf(stderr, "ERROR: parameter mismatch for function call in str: " "%s\n", orig_str); controlled_exit(EXIT_FAILURE); } macro_str = inp_do_macro_param_replace(function, params); macro_str = inp_expand_macro_in_str(env, macro_str); keep = *fcn_name; *fcn_name = '\0'; { size_t curr_str_len = curr_str ? strlen(curr_str) : 0; size_t len = strlen(str) + strlen(macro_str) + 3; curr_str = TREALLOC(char, curr_str, curr_str_len + len); sprintf(curr_str + curr_str_len, "%s(%s)", str, macro_str); } *fcn_name = keep; tfree(macro_str); search_ptr = str = close_paren_ptr + 1; for (i = 0; i < num_params; i++) tfree(params[i]); } if (curr_str == NULL) { curr_str = orig_ptr; } else { if (str != NULL) { size_t curr_str_len = strlen(curr_str); size_t len = strlen(str) + 1; curr_str = TREALLOC(char, curr_str, curr_str_len + len); sprintf(curr_str + curr_str_len, "%s", str); } tfree(orig_ptr); } tfree(orig_str); // printf("%s: --> \"%s\"\n", __FUNCTION__, curr_str); return curr_str; } static void inp_expand_macros_in_func(struct function_env *env) { struct function *f; for (f = env->functions; f; f = f->next) f->body = inp_expand_macro_in_str(env, f->body); } static struct function_env *new_function_env(struct function_env *up) { struct function_env *env = TMALLOC(struct function_env, 1); env->up = up; env->functions = NULL; return env; } static struct function_env *delete_function_env(struct function_env *env) { struct function_env *up = env->up; struct function *f; for (f = env->functions; f;) { struct function *here = f; f = f->next; free_function(here); tfree(here); } tfree(env); return up; } static struct card *inp_expand_macros_in_deck( struct function_env *env, struct card *c) { env = new_function_env(env); inp_grab_func(env, c); inp_expand_macros_in_func(env); for (; c; c = c->nextcard) { if (*c->line == '*') continue; if (ciprefix(".subckt", c->line)) { struct card *subckt = c; c = inp_expand_macros_in_deck(env, c->nextcard); if (c) continue; fprintf(stderr, "Error: line %d, missing .ends\n %s\n", subckt->linenum_orig, subckt->line); controlled_exit(EXIT_BAD); } if (ciprefix(".ends", c->line)) break; c->line = inp_expand_macro_in_str(env, c->line); } env = delete_function_env(env); return c; } /* Put {} around tokens for handling in numparam. Searches for the next '=' in the line to become active. Several exceptions (eg. no 'set' or 'b' lines, no .cmodel lines, no lines between .control and .endc, no .option lines). Special handling of vectors with [] and complex values with < > h_vogt 20 April 2008 * For xspice and num_pram compatibility .cmodel added * .cmodel will be replaced by .model in inp_fix_param_values() * and then the entire line is skipped (will not be changed by this function). * Usage of numparam requires {} around the parameters in the .cmodel line. * May be obsolete? */ static void inp_fix_param_values(struct card *c) { char *beg_of_str, *end_of_str, *old_str, *equal_ptr, *new_str; char *vec_str, *tmp_str, *natok, *buffer, *newvec, *whereisgt; bool control_section = FALSE; wordlist *nwl; int parens; for (; c; c = c->nextcard) { char *line = c->line; if (*line == '*' || (ciprefix(".para", line) && strchr(line, '{'))) continue; if (ciprefix(".control", line)) { control_section = TRUE; continue; } if (ciprefix(".endc", line)) { control_section = FALSE; continue; } /* no handling of params in "option" lines */ if (control_section || ciprefix(".option", line)) continue; /* no handling of params in "set" lines */ if (ciprefix("set", line)) continue; /* no handling of params in B source lines */ if (*line == 'b') continue; /* for xspice .cmodel: replace .cmodel with .model and skip entire * line) */ if (ciprefix(".cmodel", line)) { *(++line) = 'm'; *(++line) = 'o'; *(++line) = 'd'; *(++line) = 'e'; *(++line) = 'l'; *(++line) = ' '; continue; } /* exclude CIDER models */ if (ciprefix(".model", line) && (strstr(line, "numos") || strstr(line, "numd") || strstr(line, "nbjt") || strstr(line, "nbjt2") || strstr(line, "numd2"))) { continue; } /* exclude CIDER devices with ic.file parameter */ if (strstr(line, "ic.file")) continue; while ((equal_ptr = find_assignment(line)) != NULL) { // special case: .MEASURE {DC|AC|TRAN} result FIND out_variable // WHEN out_variable2=out_variable3 no braces around // out_variable3. out_variable3 may be v(...) or i(...) if (ciprefix(".meas", line)) if (((equal_ptr[1] == 'v') || (equal_ptr[1] == 'i')) && (equal_ptr[2] == '(')) { // find closing ')' and skip token v(...) or i(...) while (*equal_ptr != ')' && equal_ptr[1] != '\0') equal_ptr++; line = equal_ptr + 1; continue; } beg_of_str = skip_ws(equal_ptr + 1); /* all cases where no {} have to be put around selected token */ if (isdigit_c(*beg_of_str) || *beg_of_str == '{' || *beg_of_str == '.' || *beg_of_str == '"' || ((*beg_of_str == '-' || *beg_of_str == '+') && isdigit_c(beg_of_str[1])) || ((*beg_of_str == '-' || *beg_of_str == '+') && beg_of_str[1] == '.' && isdigit_c(beg_of_str[2])) || ciprefix("true", beg_of_str) || ciprefix("false", beg_of_str)) { line = equal_ptr + 1; } else if (*beg_of_str == '[') { /* A vector following the '=' token: code to put curly brackets around all params inside a pair of square brackets */ end_of_str = beg_of_str; while (*end_of_str != ']') end_of_str++; /* string xx yyy from vector [xx yyy] */ tmp_str = vec_str = copy_substring(beg_of_str + 1, end_of_str); /* work on vector elements inside [] */ nwl = NULL; for (;;) { natok = gettok(&vec_str); if (!natok) break; buffer = TMALLOC(char, strlen(natok) + 4); if (isdigit_c(*natok) || *natok == '{' || *natok == '.' || *natok == '"' || (*natok == '-' && isdigit_c(natok[1])) || ciprefix("true", natok) || ciprefix("false", natok) || eq(natok, "<") || eq(natok, ">")) { (void) sprintf(buffer, "%s", natok); /* A complex value found inside a vector [< x1 y1> ] */ /* < xx and yy > have been dealt with before */ /* */ } else if (strchr(natok, '>')) { if (isdigit_c(*natok) || (*natok == '-' && isdigit_c(natok[1]))) { (void) sprintf(buffer, "%s", natok); } else { whereisgt = strchr(natok, '>'); *whereisgt = '}'; (void) sprintf(buffer, "{%s>", natok); } /* all other tokens */ } else { (void) sprintf(buffer, "{%s}", natok); } tfree(natok); nwl = wl_cons(copy(buffer), nwl); tfree(buffer); } tfree(tmp_str); nwl = wl_reverse(nwl); /* new vector elements */ newvec = wl_flatten(nwl); wl_free(nwl); /* insert new vector into actual line */ *equal_ptr = '\0'; new_str = tprintf( "%s=[%s] %s", c->line, newvec, end_of_str + 1); tfree(newvec); old_str = c->line; c->line = new_str; line = new_str + strlen(old_str) + 1; tfree(old_str); } else if (*beg_of_str == '<') { /* A complex value following the '=' token: code to put curly brackets around all params inside a pair < > */ end_of_str = beg_of_str; while (*end_of_str != '>') end_of_str++; /* string xx yyy from vector [xx yyy] */ vec_str = copy_substring(beg_of_str + 1, end_of_str); /* work on tokens inside <> */ nwl = NULL; for (;;) { natok = gettok(&vec_str); if (!natok) break; buffer = TMALLOC(char, strlen(natok) + 4); if (isdigit_c(*natok) || *natok == '{' || *natok == '.' || *natok == '"' || (*natok == '-' && isdigit_c(natok[1])) || ciprefix("true", natok) || ciprefix("false", natok)) { (void) sprintf(buffer, "%s", natok); } else { (void) sprintf(buffer, "{%s}", natok); } tfree(natok); nwl = wl_cons(copy(buffer), nwl); tfree(buffer); } nwl = wl_reverse(nwl); /* new elements of complex variable */ newvec = wl_flatten(nwl); wl_free(nwl); /* insert new complex value into actual line */ *equal_ptr = '\0'; new_str = tprintf( "%s=<%s> %s", c->line, newvec, end_of_str + 1); tfree(newvec); old_str = c->line; c->line = new_str; line = new_str + strlen(old_str) + 1; tfree(old_str); } else { /* put {} around token to be accepted as numparam */ end_of_str = beg_of_str; parens = 0; while (*end_of_str != '\0' && (!isspace_c(*end_of_str) || (parens > 0))) { if (*end_of_str == '(') parens++; if (*end_of_str == ')') parens--; end_of_str++; } *equal_ptr = '\0'; if (*end_of_str == '\0') { new_str = tprintf("%s={%s}", c->line, beg_of_str); } else { *end_of_str = '\0'; new_str = tprintf("%s={%s} %s", c->line, beg_of_str, end_of_str + 1); } old_str = c->line; c->line = new_str; line = new_str + strlen(old_str) + 1; tfree(old_str); } } } } static char *get_param_name(char *line) { char *beg; char *equal_ptr = strchr(line, '='); if (!equal_ptr) { fprintf(stderr, "ERROR: could not find '=' on parameter line '%s'!\n", line); controlled_exit(EXIT_FAILURE); } equal_ptr = skip_back_ws(equal_ptr, line); beg = skip_back_non_ws(equal_ptr, line); return copy_substring(beg, equal_ptr); } static char *get_param_str(char *line) { char *equal_ptr = strchr(line, '='); if (equal_ptr) return skip_ws(equal_ptr + 1); else return line; } struct dependency { int level; int skip; char *param_name; char *param_str; char *depends_on[100]; struct card *card; }; static int inp_get_param_level( int param_num, struct dependency *deps, int num_params) { int i, k, l, level = 0; if (deps[param_num].level != -1) return deps[param_num].level; for (i = 0; deps[param_num].depends_on[i]; i++) { for (k = 0; k < num_params; k++) if (deps[param_num].depends_on[i] == deps[k].param_name) break; if (k >= num_params) { fprintf(stderr, "ERROR: unable to find dependency parameter for %s!\n", deps[param_num].param_name); controlled_exit(EXIT_FAILURE); } l = inp_get_param_level(k, deps, num_params) + 1; if (level < l) level = l; } deps[param_num].level = level; return level; } static int get_number_terminals(char *c) { int i, j, k; char *name[12]; char nam_buf[128]; bool area_found = FALSE; switch (*c) { case 'r': case 'c': case 'l': case 'k': case 'f': case 'h': case 'b': case 'v': case 'i': case 'd': return 2; break; case 'u': case 'j': case 'w': case 'z': return 3; break; case 't': case 'o': case 'g': case 'e': case 's': case 'y': return 4; break; case 'm': /* recognition of 4, 5, 6, or 7 nodes for SOI devices needed */ i = 0; /* find the first token with "off" or "=" in the line*/ while ((i < 20) && (*c != '\0')) { char *inst = gettok_instance(&c); strncpy(nam_buf, inst, sizeof(nam_buf) - 1); txfree(inst); if (strstr(nam_buf, "off") || strchr(nam_buf, '=')) break; i++; } return i - 2; break; case 'p': /* recognition of up to 100 cpl nodes */ i = j = 0; /* find the last token in the line*/ while ((i < 100) && (*c != '\0')) { char *tmp_inst = gettok_instance(&c); strncpy(nam_buf, tmp_inst, 32); tfree(tmp_inst); if (strchr(nam_buf, '=')) j++; i++; } if (i == 100) return 0; return i - j - 2; break; case 'q': /* recognition of 3, 4 or 5 terminal bjt's needed */ /* QXXXXXXX NC NB NE MNAME * */ /* 12 tokens maximum */ i = j = 0; while ((i < 12) && (*c != '\0')) { char *comma; name[i] = gettok_instance(&c); if (strstr(name[i], "off") || strchr(name[i], '=')) j++; #ifdef CIDER if (strstr(name[i], "save") || strstr(name[i], "print")) j++; #endif /* If we have IC=VBE, VCE instead of IC=VBE,VCE we need to inc * j */ if ((comma = strchr(name[i], ',')) != NULL && (*(++comma) == '\0')) j++; /* If we have IC=VBE , VCE ("," is a token) we need to inc j */ if (eq(name[i], ",")) j++; i++; } i--; area_found = FALSE; for (k = i; k > i - j - 1; k--) { bool only_digits = TRUE; char *nametmp = name[k]; /* MNAME has to contain at least one alpha character. AREA may be assumed if we have a token with only digits, and where the previous token does not end with a ',' */ while (*nametmp) { if (isalpha_c(*nametmp) || (*nametmp == ',')) only_digits = FALSE; nametmp++; } if (only_digits && (strchr(name[k - 1], ',') == NULL)) area_found = TRUE; } for (k = i; k >= 0; k--) tfree(name[k]); if (area_found) { return i - j - 2; } else { return i - j - 1; } break; default: return 0; break; } } static char *ya_search_identifier( char *str, const char *identifier, char *str_begin); static void inp_quote_params(struct card *s_c, struct card *e_c, struct dependency *deps, int num_params); /* sort parameters based on parameter dependencies */ static void inp_sort_params(struct card *param_cards, struct card *card_bf_start, struct card *s_c, struct card *e_c) { int i, j, num_params, ind = 0, max_level; struct card *c; int skipped; int arr_size; struct dependency *deps; if (param_cards == NULL) return; /* determine the number of lines with .param */ arr_size = 0; for (c = param_cards; c; c = c->nextcard) if (strchr(c->line, '=')) arr_size++; deps = TMALLOC(struct dependency, arr_size); num_params = 0; for (c = param_cards; c; c = c->nextcard) // ignore .param lines without '=' if (strchr(c->line, '=')) { deps[num_params].depends_on[0] = NULL; deps[num_params].level = -1; deps[num_params].skip = 0; deps[num_params].param_name = get_param_name(c->line); /* copy in fcn */ deps[num_params].param_str = copy(get_param_str(c->line)); deps[num_params].card = c; num_params++; } // look for duplicately defined parameters and mark earlier one to skip // param list is ordered as defined in netlist skipped = 0; for (i = 0; i < num_params; i++) { for (j = i + 1; j < num_params; j++) if (strcmp(deps[i].param_name, deps[j].param_name) == 0) break; if (j < num_params) { deps[i].skip = 1; skipped++; } } for (i = 0; i < num_params; i++) if (!deps[i].skip) { char *param = deps[i].param_name; for (j = 0; j < num_params; j++) if (j != i && search_plain_identifier(deps[j].param_str, param)) { for (ind = 0; deps[j].depends_on[ind]; ind++) ; deps[j].depends_on[ind++] = param; deps[j].depends_on[ind] = NULL; } } max_level = 0; for (i = 0; i < num_params; i++) { deps[i].level = inp_get_param_level(i, deps, num_params); if (max_level < deps[i].level) max_level = deps[i].level; } c = card_bf_start; ind = 0; for (i = 0; i <= max_level; i++) for (j = 0; j < num_params; j++) if (!deps[j].skip && deps[j].level == i) { c = insert_deck(c, deps[j].card); ind++; } else if (deps[j].skip) { line_free_x(deps[j].card, FALSE); deps[j].card = NULL; } num_params -= skipped; if (ind != num_params) { fprintf(stderr, "ERROR: found wrong number of parameters during levelization " "( %d instead of %d parameter s)!\n", ind, num_params); controlled_exit(EXIT_FAILURE); } inp_quote_params(s_c, e_c, deps, num_params); // clean up memory for (i = 0; i < arr_size; i++) { tfree(deps[i].param_name); tfree(deps[i].param_str); } tfree(deps); } static void inp_add_params_to_subckt( struct names *subckt_w_params, struct card *subckt_card) { struct card *card = subckt_card->nextcard; char *subckt_line = subckt_card->line; char *new_line, *param_ptr, *subckt_name, *end_ptr; for (; card; card = card->nextcard) { char *curr_line = card->line; if (!ciprefix(".para", curr_line)) break; param_ptr = strchr(curr_line, ' '); param_ptr = skip_ws(param_ptr); if (!strstr(subckt_line, "params:")) { new_line = tprintf("%s params: %s", subckt_line, param_ptr); subckt_name = skip_non_ws(subckt_line); subckt_name = skip_ws(subckt_name); end_ptr = skip_non_ws(subckt_name); add_name(subckt_w_params, copy_substring(subckt_name, end_ptr)); } else { new_line = tprintf("%s %s", subckt_line, param_ptr); } tfree(subckt_line); subckt_line = new_line; *curr_line = '*'; } subckt_card->line = subckt_line; } /* * process a sequence of decks * starting from a `.suckt' deck * upto the corresponding `.ends' deck * return a pointer to the terminating `.ends' deck * * recursivly descend * when another `.subckt' is found * * parameters are removed from the main list * and collected into a local list `first_param_card' * then processed and reinserted into the main list * */ static struct card *inp_reorder_params_subckt( struct names *subckt_w_params, struct card *subckt_card) { struct card *first_param_card = NULL; struct card *last_param_card = NULL; struct card *prev_card = subckt_card; struct card *c = subckt_card->nextcard; /* move .param lines to beginning of deck */ while (c != NULL) { char *curr_line = c->line; if (*curr_line == '*') { prev_card = c; c = c->nextcard; continue; } if (ciprefix(".subckt", curr_line)) { prev_card = inp_reorder_params_subckt(subckt_w_params, c); c = prev_card->nextcard; continue; } if (ciprefix(".ends", curr_line)) { if (first_param_card) { inp_sort_params(first_param_card, subckt_card, subckt_card->nextcard, c); inp_add_params_to_subckt(subckt_w_params, subckt_card); } return c; } if (ciprefix(".para", curr_line)) { prev_card->nextcard = c->nextcard; last_param_card = insert_deck(last_param_card, c); if (!first_param_card) first_param_card = last_param_card; c = prev_card->nextcard; continue; } prev_card = c; c = c->nextcard; } /* the terminating `.ends' deck wasn't found */ controlled_exit(EXIT_FAILURE); } static void inp_reorder_params( struct names *subckt_w_params, struct card *list_head) { struct card *first_param_card = NULL; struct card *last_param_card = NULL; struct card *prev_card = list_head; struct card *c = prev_card->nextcard; /* move .param lines to beginning of deck */ while (c != NULL) { char *curr_line = c->line; if (*curr_line == '*') { prev_card = c; c = c->nextcard; continue; } if (ciprefix(".subckt", curr_line)) { prev_card = inp_reorder_params_subckt(subckt_w_params, c); c = prev_card->nextcard; continue; } /* check for an unexpected extra `.ends' deck */ if (ciprefix(".ends", curr_line)) { fprintf(stderr, "Error: Unexpected extra .ends in line:\n %s.\n", curr_line); controlled_exit(EXIT_FAILURE); } if (ciprefix(".para", curr_line)) { prev_card->nextcard = c->nextcard; last_param_card = insert_deck(last_param_card, c); if (!first_param_card) first_param_card = last_param_card; c = prev_card->nextcard; continue; } prev_card = c; c = c->nextcard; } inp_sort_params(first_param_card, list_head, list_head->nextcard, NULL); } // iterate through deck and find lines with multiply defined parameters // // split line up into multiple lines and place those new lines immediately // afetr the current multi-param line in the deck static int inp_split_multi_param_lines(struct card *card, int line_num) { for (; card; card = card->nextcard) { char *curr_line = card->line; if (*curr_line == '*') continue; if (ciprefix(".para", curr_line)) { char *equal_ptr, **array; int i, counter = 0; while ((equal_ptr = find_assignment(curr_line)) != NULL) { counter++; curr_line = equal_ptr + 1; } if (counter <= 1) continue; array = TMALLOC(char *, counter); // need to split multi param line curr_line = card->line; counter = 0; while ((equal_ptr = find_assignment(curr_line)) != NULL) { char *beg_param, *end_param; bool get_expression = FALSE; bool get_paren_expression = FALSE; beg_param = skip_back_ws(equal_ptr, curr_line); beg_param = skip_back_non_ws(beg_param, curr_line); end_param = skip_ws(equal_ptr + 1); while (*end_param != '\0' && (!isspace_c(*end_param) || get_expression || get_paren_expression)) { if (*end_param == '{') get_expression = TRUE; if (*end_param == '(') get_paren_expression = TRUE; if (*end_param == '}') get_expression = FALSE; if (*end_param == ')') get_paren_expression = FALSE; end_param++; } if (end_param[-1] == ',') end_param--; array[counter++] = tprintf(".param %.*s", (int) (end_param - beg_param), beg_param); curr_line = end_param; } // comment out current multi-param line *(card->line) = '*'; // insert new param lines immediately after current line for (i = 0; i < counter; i++) card = insert_new_line(card, array[i], line_num++, 0); tfree(array); } } return line_num; } static int identifier_char(char c) { return (c == '_') || isalnum_c(c); } static bool b_transformation_wanted(const char *p) { const char *start = p; for (p = start; (p = strpbrk(p, "vith")) != NULL; p++) { if (p > start && identifier_char(p[-1])) continue; if (strncmp(p, "v(", 2) == 0 || strncmp(p, "i(", 2) == 0) return TRUE; if (strncmp(p, "temper", 6) == 0 && !identifier_char(p[6])) return TRUE; if (strncmp(p, "hertz", 5) == 0 && !identifier_char(p[5])) return TRUE; if (strncmp(p, "time", 4) == 0 && !identifier_char(p[4])) return TRUE; } return FALSE; } char *search_identifier(char *str, const char *identifier, char *str_begin) { if (str && identifier) { while ((str = strstr(str, identifier)) != NULL) { char before; if (str > str_begin) before = str[-1]; else before = '\0'; if (is_arith_char(before) || isspace_c(before) || strchr("=,{", before)) { char after = str[strlen(identifier)]; if (is_arith_char(after) || isspace_c(after) || strchr(",}", after)) return str; } str++; } } return NULL; } char *ya_search_identifier(char *str, const char *identifier, char *str_begin) { if (str && identifier) { while ((str = strstr(str, identifier)) != NULL) { char before; if (str > str_begin) before = str[-1]; else before = '\0'; if (is_arith_char(before) || isspace_c(before) || (str <= str_begin)) { char after = str[strlen(identifier)]; if ((is_arith_char(after) || isspace_c(after) || after == '\0')) break; } str++; } } return str; } static char *search_plain_identifier(char *str, const char *identifier) { if (str && identifier) { char *str_begin = str; while ((str = strstr(str, identifier)) != NULL) { char before; if (str > str_begin) before = str[-1]; else before = '\0'; if (!before || !identifier_char(before)) { char after = str[strlen(identifier)]; if (!after || !identifier_char(after)) return str; } str += strlen(identifier); } } return NULL; } /* ps compatibility: ECOMP 3 0 TABLE {V(1,2)} = (-1 0V) (1, 10V) --> ECOMP 3 0 int3 int0 1 BECOMP int3 int0 V = pwl(V(1,2), -2, 0, -1, 0 , 1, 10V, 2, 10V) GD16 16 1 TABLE {V(16,1)} ((-100V,-1pV)(0,0)(1m,1u)(2m,1m)) --> GD16 16 1 int_16 int_1 1 BGD16 int_16 int_1 V = pwl (v(16,1) , -100V , -1pV , 0 , 0 , 1m , 1u , 2m , 1m) */ /* hs compatibility: Exxx n1 n2 VCVS n3 n4 gain --> Exxx n1 n2 n3 n4 gain Gxxx n1 n2 VCCS n3 n4 tr --> Gxxx n1 n2 n3 n4 tr Two step approach to keep the original names for reuse, i.e. for current measurements like i(Exxx): Exxx n1 n2 VOL = {equation} --> Exxx n1 n2 int1 0 1 BExxx int1 0 V = {equation} Gxxx n1 n2 CUR = {equation} --> Gxxx n1 n2 int1 0 1 BGxxx int1 0 V = {equation} Do the following transformations only if {equation} contains simulation output like v(node), v(node1, node2), i(branch). Otherwise let do numparam the substitutions (R=const is handled in inp2r.c). Rxxx n1 n2 R = {equation} or Rxxx n1 n2 {equation} --> BRxxx n1 n2 I = V(n1,n2)/{equation} Unfortunately the capability for ac noise calculation of resistance may be lost. Cxxx n1 n2 C = {equation} or Cxxx n1 n2 {equation} --> Exxx n-aux 0 n1 n2 1 Cxxx n-aux 0 1 Bxxx n2 n1 I = i(Exxx) * equation Lxxx n1 n2 L = {equation} or Lxxx n1 n2 {equation} --> Fxxx n-aux 0 Bxxx -1 Lxxx n-aux 0 1 Bxxx n1 n2 V = v(n-aux) * 1e-16 */ static void inp_compat(struct card *card) { char *str_ptr, *cut_line, *title_tok, *node1, *node2; char *out_ptr, *exp_ptr, *beg_ptr, *end_ptr, *copy_ptr, *del_ptr; char *xline, *x2line = NULL, *x3line = NULL, *x4line = NULL; size_t xlen, i, pai = 0, paui = 0, ii; char *ckt_array[100]; int skip_control = 0; char *equation, *tc1_ptr = NULL, *tc2_ptr = NULL; double tc1 = 0.0, tc2 = 0.0; for (; card; card = card->nextcard) { char *curr_line = card->line; /* exclude any command inside .control ... .endc */ if (ciprefix(".control", curr_line)) { skip_control++; continue; } else if (ciprefix(".endc", curr_line)) { skip_control--; continue; } else if (skip_control > 0) { continue; } if (*curr_line == '*') continue; if (*curr_line == 'e') { /* Exxx n1 n2 VCVS n3 n4 gain --> Exxx n1 n2 n3 n4 gain remove vcvs */ replace_token(curr_line, "vcvs", 4, 7); /* Exxx n1 n2 value={equation} --> Exxx n1 n2 vol={equation} */ if ((str_ptr = search_plain_identifier(curr_line, "value")) != NULL) { if (str_ptr[5] == '=') *str_ptr++ = ' '; strncpy(str_ptr, " vol=", 5); } /* Exxx n1 n2 TABLE {expression} = (x0, y0) (x1, y1) (x2, y2) --> Exxx n1 n2 int1 0 1 BExxx int1 0 V = pwl (expression, x0-(x2-x0)/2, y0, x0, y0, x1, y1, x2, y2, x2+(x2-x0)/2, y2) */ if ((str_ptr = strstr(curr_line, "table")) != NULL) { char *expression, *firstno, *ffirstno, *secondno, *midline, *lastno, *lastlastno; double fnumber, lnumber, delta; int nerror; cut_line = curr_line; /* title and nodes */ title_tok = gettok(&cut_line); node1 = gettok(&cut_line); node2 = gettok(&cut_line); // Exxx n1 n2 int1 0 1 ckt_array[0] = tprintf("%s %s %s %s_int1 0 1", title_tok, node1, node2, title_tok); // skip "table" cut_line = skip_ws(cut_line); if (ciprefix("table", cut_line)) { /* a regular TABLE line */ cut_line += 5; // compatibility, allow table = {expr} {pairs} if (*cut_line == '=') *cut_line++ = ' '; // get the expression str_ptr = gettok_char(&cut_line, '{', FALSE, FALSE); expression = gettok_char( &cut_line, '}', TRUE, TRUE); /* expression */ if (!expression || !str_ptr) { fprintf(stderr, "Error: bad syntax in line %d\n %s\n", card->linenum_orig, card->line); controlled_exit(EXIT_BAD); } tfree(str_ptr); /* remove '{' and '}' from expression */ if ((str_ptr = strchr(expression, '{')) != NULL) *str_ptr = ' '; if ((str_ptr = strchr(expression, '}')) != NULL) *str_ptr = ' '; /* cut_line may now have a '=', if yes, it will have '{' and '}' (braces around token after '=') */ if ((str_ptr = strchr(cut_line, '=')) != NULL) *str_ptr = ' '; if ((str_ptr = strchr(cut_line, '{')) != NULL) *str_ptr = ' '; if ((str_ptr = strchr(cut_line, '}')) != NULL) *str_ptr = ' '; /* get first two numbers to establish extrapolation */ str_ptr = cut_line; ffirstno = gettok_node(&cut_line); if (!ffirstno) { fprintf(stderr, "Error: bad syntax in line %d\n %s\n", card->linenum_orig, card->line); controlled_exit(EXIT_BAD); } firstno = copy(ffirstno); fnumber = INPevaluate(&ffirstno, &nerror, TRUE); secondno = gettok_node(&cut_line); midline = cut_line; cut_line = strrchr(str_ptr, '('); if (!cut_line) { fprintf(stderr, "Error: bad syntax in line %d (missing " "parentheses)\n %s\n", card->linenum_orig, card->line); controlled_exit(EXIT_BAD); } /* replace '(' with ',' and ')' with ' ' */ for (; *str_ptr; str_ptr++) if (*str_ptr == '(') *str_ptr = ','; else if (*str_ptr == ')') *str_ptr = ' '; /* scan for last two numbers */ lastno = gettok_node(&cut_line); lnumber = INPevaluate(&lastno, &nerror, FALSE); /* check for max-min and take half the difference for * delta */ delta = (lnumber - fnumber) / 2.; lastlastno = gettok_node(&cut_line); if (!secondno || (*midline == '\0') || (delta <= 0.) || !lastlastno) { fprintf(stderr, "Error: bad syntax in line %d\n %s\n", card->linenum_orig, card->line); controlled_exit(EXIT_BAD); } ckt_array[1] = tprintf("b%s %s_int1 0 v = pwl(%s, %e, " "%s, %s, %s, %s, %e, %s)", title_tok, title_tok, expression, fnumber - delta, secondno, firstno, secondno, midline, lnumber + delta, lastlastno); // comment out current variable e line *(card->line) = '*'; // insert new B source line immediately after current line for (i = 0; i < 2; i++) card = insert_new_line(card, ckt_array[i], 0, 0); tfree(firstno); tfree(lastlastno); } else { /* not used */ tfree(ckt_array[0]); } tfree(title_tok); tfree(node1); tfree(node2); } /* Exxx n1 n2 VOL = {equation} --> Exxx n1 n2 int1 0 1 BExxx int1 0 V = {equation} */ /* search for ' vol=' or ' vol =' */ if (((str_ptr = strchr(curr_line, '=')) != NULL) && prefix("vol", skip_back_non_ws(skip_back_ws(str_ptr, curr_line), curr_line))) { cut_line = curr_line; /* title and nodes */ title_tok = gettok(&cut_line); node1 = gettok(&cut_line); node2 = gettok(&cut_line); /* Find equation, starts with '{', till end of line */ str_ptr = strchr(cut_line, '{'); if (str_ptr == NULL) { fprintf(stderr, "ERROR: mal formed E line: %s\n", curr_line); controlled_exit(EXIT_FAILURE); } // Exxx n1 n2 int1 0 1 ckt_array[0] = tprintf("%s %s %s %s_int1 0 1", title_tok, node1, node2, title_tok); // BExxx int1 0 V = {equation} ckt_array[1] = tprintf("b%s %s_int1 0 v = %s", title_tok, title_tok, str_ptr); // comment out current variable e line *(card->line) = '*'; // insert new B source line immediately after current line for (i = 0; i < 2; i++) card = insert_new_line(card, ckt_array[i], 0, 0); tfree(title_tok); tfree(node1); tfree(node2); } } else if (*curr_line == 'g') { /* Gxxx n1 n2 VCCS n3 n4 tr --> Gxxx n1 n2 n3 n4 tr remove vccs */ replace_token(curr_line, "vccs", 4, 7); /* Gxxx n1 n2 value={equation} --> Gxxx n1 n2 cur={equation} */ if ((str_ptr = search_plain_identifier(curr_line, "value")) != NULL) { if (str_ptr[5] == '=') *str_ptr++ = ' '; strncpy(str_ptr, " cur=", 5); } /* Gxxx n1 n2 TABLE {expression} = (x0, y0) (x1, y1) (x2, y2) --> Gxxx n1 n2 int1 0 1 BGxxx int1 0 V = pwl (expression, x0-(x2-x0)/2, y0, x0, y0, x1, y1, x2, y2, x2+(x2-x0)/2, y2) */ if ((str_ptr = strstr(curr_line, "table")) != NULL) { char *expression, *firstno, *ffirstno, *ffirstnof, *secondno, *midline, *lastno, *lastnof, *lastlastno; char *m_ptr, *m_token; double fnumber, lnumber, delta; int nerror; cut_line = curr_line; /* title and nodes */ title_tok = gettok(&cut_line); node1 = gettok(&cut_line); node2 = gettok(&cut_line); // Gxxx n1 n2 int1 0 1 // or // Gxxx n1 n2 int1 0 m='expr' /* find multiplier m at end of line */ m_ptr = strstr(cut_line, "m="); if (m_ptr) { m_token = copy(m_ptr + 2); // get only the expression *m_ptr = '\0'; } else m_token = copy("1"); ckt_array[0] = tprintf("%s %s %s %s_int1 0 %s", title_tok, node1, node2, title_tok, m_token); // skip "table" cut_line = skip_ws(cut_line); if (!ciprefix("table", cut_line)) { fprintf(stderr, "Error: bad syntax in line %d\n %s\n", card->linenum_orig, card->line); controlled_exit(EXIT_BAD); } cut_line += 5; // compatibility, allow table = {expr} {pairs} if (*cut_line == '=') *cut_line++ = ' '; // get the expression str_ptr = gettok_char(&cut_line, '{', FALSE, FALSE); expression = gettok_char( &cut_line, '}', TRUE, TRUE); /* expression */ if (!expression || !str_ptr) { fprintf(stderr, "Error: bad syntax in line %d\n %s\n", card->linenum_orig, card->line); controlled_exit(EXIT_BAD); } tfree(str_ptr); /* remove '{' and '}' from expression */ if ((str_ptr = strchr(expression, '{')) != NULL) *str_ptr = ' '; if ((str_ptr = strchr(expression, '}')) != NULL) *str_ptr = ' '; /* cut_line may now have a '=', if yes, it will have '{' and '}' (braces around token after '=') */ if ((str_ptr = strchr(cut_line, '=')) != NULL) *str_ptr = ' '; if ((str_ptr = strchr(cut_line, '{')) != NULL) *str_ptr = ' '; if ((str_ptr = strchr(cut_line, '}')) != NULL) *str_ptr = ' '; /* get first two numbers to establish extrapolation */ str_ptr = cut_line; ffirstnof = ffirstno = gettok_node(&cut_line); if (!ffirstno) { fprintf(stderr, "Error: bad syntax in line %d\n %s\n", card->linenum_orig, card->line); controlled_exit(EXIT_BAD); } firstno = copy(ffirstno); fnumber = INPevaluate(&ffirstno, &nerror, TRUE); secondno = gettok_node(&cut_line); midline = cut_line; cut_line = strrchr(str_ptr, '('); /* replace '(' with ',' and ')' with ' ' */ for (; *str_ptr; str_ptr++) if (*str_ptr == '(') *str_ptr = ','; else if (*str_ptr == ')') *str_ptr = ' '; /* scan for last two numbers */ lastnof = lastno = gettok_node(&cut_line); lnumber = INPevaluate(&lastno, &nerror, FALSE); /* check for max-min and take half the difference for delta */ delta = (lnumber - fnumber) / 2.; lastlastno = gettok_node(&cut_line); if (!secondno || (*midline == '\0') || (delta <= 0.) || !lastlastno) { fprintf(stderr, "Error: bad syntax in line %d\n %s\n", card->linenum_orig, card->line); controlled_exit(EXIT_BAD); } /* BGxxx int1 0 V = pwl (expression, x0-(x2-x0)/2, y0, x0, y0, * x1, y1, x2, y2, x2+(x2-x0)/2, y2) */ ckt_array[1] = tprintf("b%s %s_int1 0 v = pwl(%s, %e, %s, " "%s, %s, %s, %e, %s)", title_tok, title_tok, expression, fnumber - delta, secondno, firstno, secondno, midline, lnumber + delta, lastlastno); // comment out current variable e line *(card->line) = '*'; // insert new B source line immediately after current line for (i = 0; i < 2; i++) card = insert_new_line(card, ckt_array[i], 0, 0); tfree(firstno); tfree(ffirstnof); tfree(secondno); tfree(lastnof); tfree(lastlastno); tfree(expression); tfree(title_tok); tfree(node1); tfree(node2); tfree(m_token); } /* Gxxx n1 n2 CUR = {equation} --> Gxxx n1 n2 int1 0 1 BGxxx int1 0 V = {equation} */ /* search for ' cur=' or ' cur =' */ if (((str_ptr = strchr(curr_line, '=')) != NULL) && prefix("cur", skip_back_non_ws(skip_back_ws(str_ptr, curr_line), curr_line))) { char *m_ptr, *m_token; cut_line = curr_line; /* title and nodes */ title_tok = gettok(&cut_line); node1 = gettok(&cut_line); node2 = gettok(&cut_line); /* Find equation, starts with '{', till end of line */ str_ptr = strchr(cut_line, '{'); if (str_ptr == NULL) { fprintf(stderr, "ERROR: mal formed G line: %s\n", curr_line); controlled_exit(EXIT_FAILURE); } /* find multiplier m at end of line */ m_ptr = strstr(cut_line, "m="); if (m_ptr) { m_token = copy(m_ptr + 2); // get only the expression *m_ptr = '\0'; } else m_token = copy("1"); // Gxxx n1 n2 int1 0 1 // or // Gxxx n1 n2 int1 0 m='expr' ckt_array[0] = tprintf("%s %s %s %s_int1 0 %s", title_tok, node1, node2, title_tok, m_token); // BGxxx int1 0 V = {equation} ckt_array[1] = tprintf("b%s %s_int1 0 v = %s", title_tok, title_tok, str_ptr); // comment out current variable g line *(card->line) = '*'; // insert new B source line immediately after current line for (i = 0; i < 2; i++) card = insert_new_line(card, ckt_array[i], 0, 0); tfree(title_tok); tfree(m_token); tfree(node1); tfree(node2); } } /* F element compatibility */ else if (*curr_line == 'f') { char *equastr, *vnamstr; /* Fxxx n1 n2 CCCS vnam gain --> Fxxx n1 n2 vnam gain remove cccs */ replace_token(curr_line, "cccs", 4, 6); /* Deal with Fxxx n1 n2 vnam {equation} if equation contains the 'temper' token */ if (search_identifier(curr_line, "temper", curr_line)) { cut_line = curr_line; title_tok = gettok(&cut_line); node1 = gettok(&cut_line); node2 = gettok(&cut_line); vnamstr = gettok(&cut_line); equastr = gettok(&cut_line); /* Fxxx n1 n2 vnam {equation} --> Fxxx n1 n2 vbFxxx -1 bFxxx int1 0 i = i(vnam)*{equation} vbFxxx int1 0 0 */ // Fxxx n1 n2 VBFxxx -1 ckt_array[0] = tprintf("%s %s %s vb%s -1", title_tok, node1, node2, title_tok); // BFxxx BFxxx_int1 0 I = I(vnam)*{equation} ckt_array[1] = tprintf("b%s %s_int1 0 i = i(%s) * (%s)", title_tok, title_tok, vnamstr, equastr); // VBFxxx int1 0 0 ckt_array[2] = tprintf("vb%s %s_int1 0 dc 0", title_tok, title_tok); // comment out current variable f line *(card->line) = '*'; // insert new three lines immediately after current line for (i = 0; i < 3; i++) card = insert_new_line(card, ckt_array[i], 0, 0); tfree(title_tok); tfree(vnamstr); tfree(equastr); tfree(node1); tfree(node2); } } /* H element compatibility */ else if (*curr_line == 'h') { char *equastr, *vnamstr; /* Hxxx n1 n2 CCVS vnam transres --> Hxxx n1 n2 vnam transres remove cccs */ replace_token(curr_line, "ccvs", 4, 6); /* Deal with Hxxx n1 n2 vnam {equation} if equation contains the 'temper' token */ if (search_identifier(curr_line, "temper", curr_line)) { cut_line = curr_line; title_tok = gettok(&cut_line); node1 = gettok(&cut_line); node2 = gettok(&cut_line); vnamstr = gettok(&cut_line); equastr = gettok(&cut_line); /* Hxxx n1 n2 vnam {equation} --> Hxxx n1 n2 vbHxxx -1 bHxxx int1 0 i = i(vnam)*{equation} vbHxxx int1 0 0 */ // Hxxx n1 n2 VBHxxx -1 ckt_array[0] = tprintf("%s %s %s vb%s -1", title_tok, node1, node2, title_tok); // BHxxx BHxxx_int1 0 I = I(vnam)*{equation} ckt_array[1] = tprintf("b%s %s_int1 0 i = i(%s) * (%s)", title_tok, title_tok, vnamstr, equastr); // VBHxxx int1 0 0 ckt_array[2] = tprintf("vb%s %s_int1 0 dc 0", title_tok, title_tok); // comment out current variable h line *(card->line) = '*'; // insert new three lines immediately after current line for (i = 0; i < 3; i++) card = insert_new_line(card, ckt_array[i], 0, 0); tfree(title_tok); tfree(vnamstr); tfree(equastr); tfree(node1); tfree(node2); } } /* Rxxx n1 n2 R = {equation} or Rxxx n1 n2 {equation} --> BRxxx pos neg I = V(pos, neg)/{equation} */ else if (*curr_line == 'r') { cut_line = curr_line; /* make BRxxx pos neg I = V(pos, neg)/{equation}*/ title_tok = gettok(&cut_line); node1 = gettok(&cut_line); node2 = gettok(&cut_line); /* check only after skipping Rname and nodes, either may contain * time (e.g. Rtime)*/ if (!b_transformation_wanted(cut_line)) { tfree(title_tok); tfree(node1); tfree(node2); continue; } /* Find equation, starts with '{', till end of line */ str_ptr = strchr(cut_line, '{'); if (str_ptr == NULL) { /* if not, equation may start with a '(' */ str_ptr = strchr(cut_line, '('); if (str_ptr == NULL) { fprintf(stderr, "ERROR: mal formed R line: %s\n", curr_line); controlled_exit(EXIT_FAILURE); } equation = gettok_char(&str_ptr, ')', TRUE, TRUE); } else equation = gettok_char(&str_ptr, '}', TRUE, TRUE); str_ptr = strstr(cut_line, "tc1"); if (str_ptr) { /* We need to have 'tc1=something */ if (str_ptr[3] && (isspace_c(str_ptr[3]) || (str_ptr[3] == '='))) { tc1_ptr = strchr(str_ptr, '='); if (tc1_ptr) { tc1_ptr++; int error; tc1 = INPevaluate(&tc1_ptr, &error, 1); } } } str_ptr = strstr(cut_line, "tc2"); if (str_ptr) { /* We need to have 'tc2=something */ if (str_ptr[3] && (isspace_c(str_ptr[3]) || (str_ptr[3] == '='))) { tc2_ptr = strchr(str_ptr, '='); if (tc2_ptr) { tc2_ptr++; int error; tc2 = INPevaluate(&tc2_ptr, &error, 1); } } } /* white noise model by x2line, x3line, x4line if instance parameter noisy=1 (or noise=1) is set */ bool rnoise = FALSE; if (strstr(cut_line, "noisy=1") || strstr(cut_line, "noise=1")) rnoise = TRUE; if ((tc1_ptr == NULL) && (tc2_ptr == NULL)) { xline = tprintf("b%s %s %s i = v(%s, %s)/(%s)", title_tok, node1, node2, node1, node2, equation); if (rnoise) { x2line = tprintf("b%s_1 %s %s i = i(v%s_3)/sqrt(%s)", title_tok, node1, node2, title_tok, equation); x3line = tprintf("r%s_2 %s_3 0 1.0", title_tok, title_tok); x4line = tprintf("v%s_3 %s_3 0 0", title_tok, title_tok); } } else if (tc2_ptr == NULL) { xline = tprintf("b%s %s %s i = v(%s, %s)/(%s) tc1=%15.8e " "reciproctc=1", title_tok, node1, node2, node1, node2, equation, tc1); if (rnoise) { x2line = tprintf("b%s_1 %s %s i = i(v%s_3)/sqrt(%s)", title_tok, node1, node2, title_tok, equation); x3line = tprintf("r%s_2 %s_3 0 1.0 tc1=%15.8e", title_tok, title_tok, tc1); x4line = tprintf("v%s_3 %s_3 0 0", title_tok, title_tok); } } else { xline = tprintf("b%s %s %s i = v(%s, %s)/(%s) tc1=%15.8e " "tc2=%15.8e reciproctc=1", title_tok, node1, node2, node1, node2, equation, tc1, tc2); if (rnoise) { x2line = tprintf("b%s_1 %s %s i = i(v%s_3)/sqrt(%s)", title_tok, node1, node2, title_tok, equation); x3line = tprintf("r%s_2 %s_3 0 1.0 tc1=%15.8e tc2=%15.8e", title_tok, title_tok, tc1, tc2); x4line = tprintf("v%s_3 %s_3 0 0", title_tok, title_tok); } } tc1_ptr = NULL; tc2_ptr = NULL; // comment out current old R line *(card->line) = '*'; // insert new B source line immediately after current line card = insert_new_line(card, xline, 0, 0); if (rnoise) { card = insert_new_line(card, x2line, 0, 0); card = insert_new_line(card, x3line, 0, 0); card = insert_new_line(card, x4line, 0, 0); } tfree(title_tok); tfree(node1); tfree(node2); tfree(equation); } /* Cxxx n1 n2 C = {equation} or Cxxx n1 n2 {equation} --> Exxx n-aux 0 n1 n2 1 Cxxx n-aux 0 1 Bxxx n2 n1 I = i(Exxx) * equation */ else if (*curr_line == 'c') { cut_line = curr_line; title_tok = gettok(&cut_line); node1 = gettok(&cut_line); node2 = gettok(&cut_line); /* check only after skipping Cname and nodes, either may contain * time (e.g. Ctime)*/ if (!b_transformation_wanted(cut_line)) { tfree(title_tok); tfree(node1); tfree(node2); continue; } /* Find equation, starts with '{', till end of line */ str_ptr = strchr(cut_line, '{'); if (str_ptr == NULL) { /* if not, equation may start with a '(' */ str_ptr = strchr(cut_line, '('); if (str_ptr == NULL) { fprintf(stderr, "ERROR: mal formed C line: %s\n", curr_line); controlled_exit(EXIT_FAILURE); } equation = gettok_char(&str_ptr, ')', TRUE, TRUE); } else equation = gettok_char(&str_ptr, '}', TRUE, TRUE); str_ptr = strstr(cut_line, "tc1"); if (str_ptr) { /* We need to have 'tc1=something */ if (str_ptr[3] && (isspace_c(str_ptr[3]) || (str_ptr[3] == '='))) { tc1_ptr = strchr(str_ptr, '='); if (tc1_ptr) { tc1_ptr++; int error; tc1 = INPevaluate(&tc1_ptr, &error, 1); } } } str_ptr = strstr(cut_line, "tc2"); if (str_ptr) { /* We need to have 'tc2=something */ if (str_ptr[3] && (isspace_c(str_ptr[3]) || (str_ptr[3] == '='))) { tc2_ptr = strchr(str_ptr, '='); if (tc2_ptr) { tc2_ptr++; int error; tc2 = INPevaluate(&tc2_ptr, &error, 1); } } } // Exxx n-aux 0 n1 n2 1 ckt_array[0] = tprintf("e%s %s_int2 0 %s %s 1", title_tok, title_tok, node1, node2); // Cxxx n-aux 0 1 ckt_array[1] = tprintf("c%s %s_int2 0 1", title_tok, title_tok); // Bxxx n2 n1 I = i(Exxx) * equation if ((tc1_ptr == NULL) && (tc2_ptr == NULL)) { ckt_array[2] = tprintf("b%s %s %s i = i(e%s) * (%s)", title_tok, node2, node1, title_tok, equation); } else if (tc2_ptr == NULL) { ckt_array[2] = tprintf( "b%s %s %s i = i(e%s) * (%s) tc1=%15.8e reciproctc=1", title_tok, node2, node1, title_tok, equation, tc1); } else { ckt_array[2] = tprintf("b%s %s %s i = i(e%s) * (%s) " "tc1=%15.8e tc2=%15.8e reciproctc=1", title_tok, node2, node1, title_tok, equation, tc1, tc2); } tc1_ptr = NULL; tc2_ptr = NULL; // comment out current variable capacitor line *(card->line) = '*'; // insert new B source line immediately after current line for (i = 0; i < 3; i++) card = insert_new_line(card, ckt_array[i], 0, 0); tfree(title_tok); tfree(node1); tfree(node2); tfree(equation); } /* Lxxx n1 n2 L = {equation} or Lxxx n1 n2 {equation} --> Fxxx n-aux 0 Bxxx -1 Lxxx n-aux 0 1 Bxxx n1 n2 V = v(n-aux) * equation */ else if (*curr_line == 'l') { cut_line = curr_line; /* title and nodes */ title_tok = gettok(&cut_line); node1 = gettok(&cut_line); node2 = gettok(&cut_line); if (!b_transformation_wanted(cut_line)) { tfree(title_tok); tfree(node1); tfree(node2); continue; } /* Find equation, starts with '{', till end of line */ str_ptr = strchr(cut_line, '{'); if (str_ptr == NULL) { /* if not, equation may start with a '(' */ str_ptr = strchr(cut_line, '('); if (str_ptr == NULL) { fprintf(stderr, "ERROR: mal formed L line: %s\n", curr_line); controlled_exit(EXIT_FAILURE); } equation = gettok_char(&str_ptr, ')', TRUE, TRUE); } else equation = gettok_char(&str_ptr, '}', TRUE, TRUE); str_ptr = strstr(cut_line, "tc1"); if (str_ptr) { /* We need to have 'tc1=something */ if (str_ptr[3] && (isspace_c(str_ptr[3]) || (str_ptr[3] == '='))) { tc1_ptr = strchr(str_ptr, '='); if (tc1_ptr) { tc1_ptr++; int error; tc1 = INPevaluate(&tc1_ptr, &error, 1); } } } str_ptr = strstr(cut_line, "tc2"); if (str_ptr) { /* We need to have 'tc2=something */ if (str_ptr[3] && (isspace_c(str_ptr[3]) || (str_ptr[3] == '='))) { tc2_ptr = strchr(str_ptr, '='); if (tc2_ptr) { tc2_ptr++; int error; tc2 = INPevaluate(&tc2_ptr, &error, 1); } } } // Fxxx n-aux 0 Bxxx 1 ckt_array[0] = tprintf( "f%s %s_int2 0 b%s -1", title_tok, title_tok, title_tok); // Lxxx n-aux 0 1 ckt_array[1] = tprintf("l%s %s_int2 0 1", title_tok, title_tok); // Bxxx n1 n2 V = v(n-aux) * equation if ((tc1_ptr == NULL) && (tc2_ptr == NULL)) { ckt_array[2] = tprintf("b%s %s %s v = v(%s_int2) * (%s)", title_tok, node1, node2, title_tok, equation); } else if (tc2_ptr == NULL) { ckt_array[2] = tprintf("b%s %s %s v = v(%s_int2) * (%s) " "tc1=%15.8e reciproctc=0", title_tok, node2, node1, title_tok, equation, tc1); } else { ckt_array[2] = tprintf("b%s %s %s v = v(%s_int2) * (%s) " "tc1=%15.8e tc2=%15.8e reciproctc=0", title_tok, node2, node1, title_tok, equation, tc1, tc2); } tc1_ptr = NULL; tc2_ptr = NULL; // comment out current variable inductor line *(card->line) = '*'; // insert new B source line immediately after current line for (i = 0; i < 3; i++) card = insert_new_line(card, ckt_array[i], 0, 0); tfree(title_tok); tfree(node1); tfree(node2); tfree(equation); } /* .probe -> .save .print, .plot, .save, .four, An ouput vector may be replaced by the following: myoutput=par('expression') .meas A vector out_variable may be replaced by par('expression') */ else if (*curr_line == '.') { // replace .probe by .save if ((str_ptr = strstr(curr_line, ".probe")) != NULL) memcpy(str_ptr, ".save ", 6); /* Various formats for measure statement: * .MEASURE {DC|AC|TRAN} result WHEN out_variable=val * + * + * * .MEASURE {DC|AC|TRAN} result WHEN out_variable=out_variable2 * + * + * * .MEASURE {DC|AC|TRAN} result FIND out_variable WHEN out_variable2=val * + * + * * .MEASURE {DC|AC|TRAN} result FIND out_variable WHEN out_variable2=out_variable3 * + * + * * .MEASURE {DC|AC|TRAN} result FIND out_variable AT=val * + * * .MEASURE {DC|AC|TRAN} result {AVG|MIN|MAX|MIN_AT|MAX_AT|PP|RMS} out_variable * + * * .MEASURE {DC|AC|TRAN} result INTEG out_variable * + * * .MEASURE {DC|AC|TRAN} result DERIV out_variable AT=val * * .MEASURE {DC|AC|TRAN} result DERIV out_variable WHEN out_variable2=val * + * + * * .MEASURE {DC|AC|TRAN} result DERIV out_variable WHEN out_variable2=out_variable3 * + * + The user may set any out_variable to par(' expr '). We have to replace this by v(pa_xx) and generate a B source line. * ----------------------------------------------------------------- */ if (ciprefix(".meas", curr_line)) { if (strstr(curr_line, "par(") == NULL) continue; cut_line = curr_line; // search for 'par(' while ((str_ptr = strstr(cut_line, "par(")) != NULL) { if (pai > 99) { fprintf(stderr, "ERROR: More than 99 function calls to " "par()\n"); fprintf(stderr, " Limited to 99 per input file\n"); controlled_exit(EXIT_FAILURE); } // we have ' par({ ... })', the right delimeter is a ' ' // or '=' if (ciprefix(" par({", (str_ptr - 1))) { // find expression beg_ptr = end_ptr = str_ptr + 5; while ((*end_ptr != ' ') && (*end_ptr != '=') && (*end_ptr != '\0')) end_ptr++; exp_ptr = copy_substring(beg_ptr, end_ptr - 2); cut_line = str_ptr; // generate node out_ptr = tprintf("pa_%02d", (int) pai); // Bout_ptr out_ptr 0 V = v(expr_ptr) ckt_array[pai] = tprintf( "b%s %s 0 v = %s", out_ptr, out_ptr, exp_ptr); ckt_array[++pai] = NULL; // length of the replacement V(out_ptr) del_ptr = copy_ptr = tprintf("v(%s)", out_ptr); // length of the replacement part in original line xlen = strlen(exp_ptr) + 7; // copy the replacement without trailing '\0' for (ii = 0; ii < xlen; ii++) if (*copy_ptr) *cut_line++ = *copy_ptr++; else *cut_line++ = ' '; tfree(del_ptr); tfree(exp_ptr); tfree(out_ptr); } // or we have '={par({ ... })}', the right delimeter is a // ' ' else if (ciprefix("={par({", (str_ptr - 2))) { // find expression beg_ptr = end_ptr = str_ptr + 5; while ((*end_ptr != ' ') && (*end_ptr != '\0')) end_ptr++; exp_ptr = copy_substring(beg_ptr, end_ptr - 3); // generate node out_ptr = tprintf("pa_%02d", (int) pai); // Bout_ptr out_ptr 0 V = v(expr_ptr) ckt_array[pai] = tprintf( "b%s %s 0 v = %s", out_ptr, out_ptr, exp_ptr); ckt_array[++pai] = NULL; // length of the replacement V(out_ptr) del_ptr = copy_ptr = tprintf("v(%s)", out_ptr); // length of the replacement part in original line xlen = strlen(exp_ptr) + 9; // skip '=' cut_line++; // copy the replacement without trailing '\0' for (ii = 0; ii < xlen; ii++) if (*copy_ptr) *cut_line++ = *copy_ptr++; else *cut_line++ = ' '; tfree(del_ptr); tfree(exp_ptr); tfree(out_ptr); } else { // nothing to replace cut_line = str_ptr + 1; continue; } } // while 'par' // no replacement done, go to next line if (pai == paui) continue; // remove white spaces card->line = inp_remove_ws(curr_line); // insert new B source line immediately after current line for (ii = paui; ii < pai; ii++) card = insert_new_line(card, ckt_array[ii], 0, 0); paui = pai; } else if ((ciprefix(".save", curr_line)) || (ciprefix(".four", curr_line)) || (ciprefix(".print", curr_line)) || (ciprefix(".plot", curr_line))) { if (strstr(curr_line, "par(") == NULL) continue; cut_line = curr_line; // search for 'par(' while ((str_ptr = strstr(cut_line, "par(")) != NULL) { if (pai > 99) { fprintf(stderr, "ERROR: More than 99 function calls to " "par()\n"); fprintf(stderr, " Limited to 99 per input file\n"); controlled_exit(EXIT_FAILURE); } // we have ' par({ ... })' if (ciprefix(" par({", (str_ptr - 1))) { // find expression beg_ptr = end_ptr = str_ptr + 5; while ((*end_ptr != ' ') && (*end_ptr != '\0')) end_ptr++; exp_ptr = copy_substring(beg_ptr, end_ptr - 2); cut_line = str_ptr; // generate node out_ptr = tprintf("pa_%02d", (int) pai); // Bout_ptr out_ptr 0 V = v(expr_ptr) ckt_array[pai] = tprintf( "b%s %s 0 v = %s", out_ptr, out_ptr, exp_ptr); ckt_array[++pai] = NULL; // length of the replacement V(out_ptr) del_ptr = copy_ptr = tprintf("%s", out_ptr); // length of the replacement part in original line xlen = strlen(exp_ptr) + 7; // copy the replacement without trailing '\0' for (ii = 0; ii < xlen; ii++) if (*copy_ptr) *cut_line++ = *copy_ptr++; else *cut_line++ = ' '; tfree(del_ptr); tfree(exp_ptr); tfree(out_ptr); } // or we have '={par({ ... })}' else if (ciprefix("={par({", (str_ptr - 2))) { // find myoutput beg_ptr = end_ptr = str_ptr - 2; while (*beg_ptr != ' ') beg_ptr--; out_ptr = copy_substring(beg_ptr + 1, end_ptr); cut_line = beg_ptr + 1; // find expression beg_ptr = end_ptr = str_ptr + 5; while ((*end_ptr != ' ') && (*end_ptr != '\0')) end_ptr++; exp_ptr = copy_substring(beg_ptr, end_ptr - 3); // Bout_ptr out_ptr 0 V = v(expr_ptr) ckt_array[pai] = tprintf( "b%s %s 0 v = %s", out_ptr, out_ptr, exp_ptr); ckt_array[++pai] = NULL; // length of the replacement V(out_ptr) del_ptr = copy_ptr = tprintf("%s", out_ptr); // length of the replacement part in original line xlen = strlen(out_ptr) + strlen(exp_ptr) + 10; // copy the replacement without trailing '\0' for (ii = 0; ii < xlen; ii++) if (*copy_ptr) *cut_line++ = *copy_ptr++; else *cut_line++ = ' '; tfree(del_ptr); tfree(exp_ptr); tfree(out_ptr); } // nothing to replace else cut_line = str_ptr + 1; } // while 'par(' // no replacement done, go to next line if (pai == paui) continue; // remove white spaces card->line = inp_remove_ws(curr_line); // comment out current variable capacitor line // *(ckt_array[0]) = '*'; // insert new B source line immediately after current line for (ii = paui; ii < pai; ii++) card = insert_new_line(card, ckt_array[ii], 0, 0); paui = pai; // continue; } // if .print etc. } // if ('.') } } /* replace a token (length 4 char) in string by spaces, if it is found at the correct position and the total number of tokens is o.k. */ static void replace_token( char *string, char *token, int wherereplace, int total) { int count = 0, i; char *actstring = string; /* token to be replaced not in string */ if (strstr(string, token) == NULL) return; /* get total number of tokens */ while (*actstring) { actstring = nexttok(actstring); count++; } /* If total number of tokens correct */ if (count == total) { actstring = string; for (i = 1; i < wherereplace; i++) actstring = nexttok(actstring); /* If token to be replaced at right position */ if (ciprefix(token, actstring)) { actstring[0] = ' '; actstring[1] = ' '; actstring[2] = ' '; actstring[3] = ' '; } } } /* lines for B sources (except for pwl lines): no parsing in numparam code, just replacement of parameters. pwl lines are still handled in numparam. Parsing for all other B source lines are done in the B source parser. To achive this, do the following: Remove all '{' and '}' --> no parsing of equations in numparam Place '{' and '}' directly around all potential parameters, but skip function names like exp (search for 'exp(' to detect fcn name), functions containing nodes like v(node), v(node1, node2), i(branch) and other keywords like TEMPER. --> Only parameter replacement in numparam */ static void inp_bsource_compat(struct card *card) { char *equal_ptr, *str_ptr, *new_str, *final_str; int skip_control = 0; for (; card; card = card->nextcard) { char *curr_line = card->line; /* exclude any command inside .control ... .endc */ if (ciprefix(".control", curr_line)) { skip_control++; continue; } else if (ciprefix(".endc", curr_line)) { skip_control--; continue; } else if (skip_control > 0) { continue; } if (*curr_line == 'b') { /* remove white spaces of everything inside {}*/ card->line = inp_remove_ws(card->line); curr_line = card->line; /* exclude special pwl lines */ if (strstr(curr_line, "=pwl(")) continue; /* store starting point for later parsing, beginning of * {expression} */ equal_ptr = strchr(curr_line, '='); /* check for errors */ if (equal_ptr == NULL) { fprintf(stderr, "ERROR: mal formed B line: %s\n", curr_line); controlled_exit(EXIT_FAILURE); } /* find the m={m} token and remove it */ if ((str_ptr = strstr(curr_line, "m={m}")) != NULL) memcpy(str_ptr, " ", 5); new_str = inp_modify_exp(equal_ptr + 1); final_str = tprintf("%.*s %s", (int) (equal_ptr + 1 - curr_line), curr_line, new_str); // comment out current line (old B source line) *(card->line) = '*'; // insert new B source line immediately after current line /* Copy old line numbers into new B source line */ card = insert_new_line( card, final_str, card->linenum, card->linenum_orig); tfree(new_str); } /* end of if 'b' */ } /* end of for loop */ } /* Find all expressions containing the keyword 'temper', * except for B lines and some other exclusions. Prepare * these expressions by calling inp_modify_exp() and return * a modified card->line */ static bool inp_temper_compat(struct card *card) { int skip_control = 0; char *beg_str, *end_str, *beg_tstr, *end_tstr, *exp_str; bool with_temper = FALSE; for (; card; card = card->nextcard) { char *new_str = NULL; char *curr_line = card->line; if (curr_line == NULL) continue; /* exclude any command inside .control ... .endc */ if (ciprefix(".control", curr_line)) { skip_control++; continue; } else if (ciprefix(".endc", curr_line)) { skip_control--; continue; } else if (skip_control > 0) { continue; } /* exclude some elements */ if (strchr("*vbiegfh", curr_line[0])) continue; /* exclude all dot commands except .model */ if (curr_line[0] == '.' && !prefix(".model", curr_line)) continue; /* exclude lines not containing 'temper' */ if (!strstr(curr_line, "temper")) continue; /* now start processing of the remaining lines containing 'temper' */ /* remove white spaces of everything inside {}*/ card->line = inp_remove_ws(card->line); curr_line = card->line; beg_str = beg_tstr = curr_line; while ((beg_tstr = search_identifier( beg_tstr, "temper", curr_line)) != NULL) { char *modified_exp; /* set the global variable */ with_temper = TRUE; /* find the expression: first go back to the opening '{', then find the closing '}' */ while ((*beg_tstr) != '{') beg_tstr--; end_str = end_tstr = beg_tstr; exp_str = gettok_char(&end_tstr, '}', TRUE, TRUE); /* modify the expression string */ modified_exp = inp_modify_exp(exp_str); tfree(exp_str); /* add the intermediate string between previous and next * expression to the new line */ new_str = INPstrCat(new_str, ' ', copy_substring(beg_str, end_str)); /* add the modified expression string to the new line */ new_str = INPstrCat(new_str, ' ', modified_exp); new_str = INPstrCat(new_str, ' ', copy(" ")); /* move on to the next intermediate string */ beg_str = beg_tstr = end_tstr; } if (*beg_str) new_str = INPstrCat(new_str, ' ', copy(beg_str)); tfree(card->line); card->line = inp_remove_ws(new_str); } return with_temper; } /* lines containing expressions with keyword 'temper': * no parsing in numparam code, just replacement of parameters. * Parsing done with B source parser in function inp_parse_temper * in inp.c. Evaluation is the done with fcn inp_evaluate_temper * from inp.c, taking the actual temperature into account. * To achive this, do the following here: * Remove all '{' and '}' --> no parsing of equations in numparam * Place '{' and '}' directly around all potential parameters, * but skip function names like exp (search for 'exp(' to detect fcn name), * functions containing nodes like v(node), v(node1, node2), i(branch) * and other keywords like TEMPER. --> Only parameter replacement in numparam */ static char *inp_modify_exp(char *expr) { char *s; wordlist *wl = NULL, *wlist = NULL; /* scan the expression and remove all '{' and '}' */ for (s = expr; *s; s++) if ((*s == '{') || (*s == '}')) *s = ' '; /* scan the expression */ s = expr; while (*(s = skip_ws(s))) { static bool c_arith_prev = FALSE; bool c_arith = FALSE; char c_prev = '\0'; char c = *s; wl_append_word(&wlist, &wl, NULL); if ((c == ',') || (c == '(') || (c == ')') || (c == '*') || (c == '/') || (c == '^') || (c == '+') || (c == '?') || (c == ':') || (c == '-')) { if ((c == '*') && (s[1] == '*')) { wl->wl_word = tprintf("**"); s += 2; } else if (c == '-' && c_arith_prev && c_prev != ')') { /* enter whole number string if '-' is a sign */ int error1; /* allow 100p, 5MEG etc. */ double dvalue = INPevaluate(&s, &error1, 0); if (error1) { wl->wl_word = tprintf("%c", c); s++; } else { wl->wl_word = tprintf("%18.10e", dvalue); /* skip the `unit', FIXME INPevaluate() should do this */ while (isalpha_c(*s)) s++; } } else { wl->wl_word = tprintf("%c", c); s++; } c_arith = TRUE; } else if ((c == '>') || (c == '<') || (c == '!') || (c == '=')) { /* >=, <=, !=, ==, <>, ... */ char *beg = s++; if ((*s == '=') || (*s == '<') || (*s == '>')) s++; wl->wl_word = copy_substring(beg, s); } else if ((c == '|') || (c == '&')) { char *beg = s++; if ((*s == '|') || (*s == '&')) s++; wl->wl_word = copy_substring(beg, s); } else if (isalpha_c(c) || c == '_') { char buf[512]; int i = 0; if (((c == 'v') || (c == 'i')) && (s[1] == '(')) { while (*s != ')') buf[i++] = *s++; buf[i++] = *s++; buf[i] = '\0'; wl->wl_word = copy(buf); } else { while (isalnum_c(*s) || (*s == '!') || (*s == '#') || (*s == '$') || (*s == '%') || (*s == '_') || (*s == '[') || (*s == ']')) { buf[i++] = *s++; } buf[i] = '\0'; /* no parens {} around time, hertz, temper, the constants pi and e which are defined in inpptree.c, around pwl and temp. coeffs */ if ((*s == '(') || cieq(buf, "hertz") || cieq(buf, "temper") || cieq(buf, "time") || cieq(buf, "pi") || cieq(buf, "e") || cieq(buf, "pwl")) { wl->wl_word = copy(buf); } else if (cieq(buf, "tc1") || cieq(buf, "tc2") || cieq(buf, "reciproctc")) { s = skip_ws(s); /* no {} around tc1 = or tc2 = , these are temp coeffs. */ if (s[0] == '=' && s[1] != '=') { buf[i++] = '='; buf[i] = '\0'; s++; wl->wl_word = copy(buf); } else { wl->wl_word = tprintf("({%s})", buf); } /* '-' following the '=' is attached to number as its sign */ c_arith = TRUE; } else { /* {} around all other tokens */ wl->wl_word = tprintf("({%s})", buf); } } } else if (isdigit_c(c) || (c == '.')) { /* allow .5 format too */ int error1; /* allow 100p, 5MEG etc. */ double dvalue = INPevaluate(&s, &error1, 0); wl->wl_word = tprintf("%18.10e", dvalue); /* skip the `unit', FIXME INPevaluate() should do this */ while (isalpha_c(*s)) s++; } else { /* strange char */ printf("Preparing expression for numparam\nWhat is this?\n%s\n", s); wl->wl_word = tprintf("%c", *s++); } c_prev = c; c_arith_prev = c_arith; } expr = wl_flatten(wlist); wl_free(wlist); return expr; } /* * destructively fetch a token from the input string * token is either quoted, or a plain nonwhitespace sequence * function will return the place from where to continue */ static char *get_quoted_token(char *string, char **token) { char *s = skip_ws(string); if (!*s) /* nothing found */ return string; if (isquote(*s)) { char *t = ++s; while (*t && !isquote(*t)) t++; if (!*t) { /* teriminator quote not found */ *token = NULL; return string; } *t++ = '\0'; *token = s; return t; } else { char *t = skip_non_ws(s); if (t == s) { /* nothing found */ *token = NULL; return string; } if (*t) *t++ = '\0'; *token = s; return t; } } /* Option RSERIES=rval * Lxxx n1 n2 Lval * --> * Lxxx n1 n2_intern__ Lval * RLxxx_n2_intern__ n2_intern__ n2 rval */ static void inp_add_series_resistor(struct card *deck) { int skip_control = 0; struct card *card; char *rval = NULL; for (card = deck; card; card = card->nextcard) { char *curr_line = card->line; if (*curr_line != '*' && strstr(curr_line, "option")) { char *t = strstr(curr_line, "rseries"); if (t) { tfree(rval); t += 7; if (*t++ == '=') rval = gettok(&t); /* default to "1e-3" if no value given */ if (!rval) rval = copy("1e-3"); } } } if (!rval) return; fprintf(stdout, "\nOption rseries given: \n" "resistor %s Ohms added in series to each inductor L\n\n", rval); for (card = deck; card; card = card->nextcard) { char *cut_line = card->line; /* exclude any command inside .control ... .endc */ if (ciprefix(".control", cut_line)) { skip_control++; continue; } else if (ciprefix(".endc", cut_line)) { skip_control--; continue; } else if (skip_control > 0) { continue; } if (ciprefix("l", cut_line)) { char *title_tok = gettok(&cut_line); char *node1 = gettok(&cut_line); char *node2 = gettok(&cut_line); /* new L line and new R line */ char *newL = tprintf("%s %s %s_intern__ %s", title_tok, node1, title_tok, cut_line); char *newR = tprintf("R%s_intern__ %s_intern__ %s %s", title_tok, title_tok, node2, rval); // comment out current L line *(card->line) = '*'; // insert new new L and R lines immediately after current line card = insert_new_line(card, newL, 0, 0); card = insert_new_line(card, newR, 0, 0); tfree(title_tok); tfree(node1); tfree(node2); } } tfree(rval); } /* * rewrite * .subckt node1 node2 node3 name params: l={x} w={y} * to * .subckt node1 node2 node3 name * .param l={x} w={y} */ static void subckt_params_to_param(struct card *card) { for (; card; card = card->nextcard) { char *curr_line = card->line; if (ciprefix(".subckt", curr_line)) { char *cut_line, *new_line; cut_line = strstr(curr_line, "params:"); if (!cut_line) continue; /* new_line starts with "params: " */ new_line = copy(cut_line); /* replace "params:" by ".param " */ memcpy(new_line, ".param ", 7); /* card->line ends with subcircuit name */ cut_line[-1] = '\0'; /* insert new_line after card->line */ insert_new_line(card, new_line, card->linenum + 1, 0); } } } /* If XSPICE option is not selected, run this function to alert and exit if the 'poly' option is found in e, g, f, or h controlled sources. */ #ifndef XSPICE static void inp_poly_err(struct card *card) { size_t skip_control = 0; for (; card; card = card->nextcard) { char *curr_line = card->line; if (*curr_line == '*') continue; /* exclude any command inside .control ... .endc */ if (ciprefix(".control", curr_line)) { skip_control++; continue; } else if (ciprefix(".endc", curr_line)) { skip_control--; continue; } else if (skip_control > 0) { continue; } /* get the fourth token in a controlled source line and exit, if it is 'poly' */ if ((ciprefix("e", curr_line)) || (ciprefix("g", curr_line)) || (ciprefix("f", curr_line)) || (ciprefix("h", curr_line))) { curr_line = nexttok(curr_line); curr_line = nexttok(curr_line); curr_line = nexttok(curr_line); if (ciprefix("poly", curr_line)) { fprintf(stderr, "\nError: XSPICE is required to run the 'poly' " "option in line %d\n", card->linenum_orig); fprintf(stderr, " %s\n", card->line); fprintf(stderr, "\nSee manual chapt. 31 for installation " "instructions\n"); controlled_exit(EXIT_BAD); } } } } #endif /* Used for debugging. You may add * tprint(working); * somewhere in function inp_readall() of this file to have * a printout of the actual deck written to file "tprint-out.txt" */ void tprint(struct card *t) { struct card *tmp; /*debug: print into file*/ FILE *fd = fopen("tprint-out.txt", "w"); for (tmp = t; tmp; tmp = tmp->nextcard) if (*(tmp->line) != '*') fprintf(fd, "%6d %6d %s\n", tmp->linenum_orig, tmp->linenum, tmp->line); fprintf(fd, "\n**************************************************************" "*******************\n"); fprintf(fd, "****************************************************************" "*****************\n"); fprintf(fd, "****************************************************************" "*****************\n\n"); for (tmp = t; tmp; tmp = tmp->nextcard) fprintf(fd, "%6d %6d %s\n", tmp->linenum_orig, tmp->linenum, tmp->line); fprintf(fd, "\n**************************************************************" "*******************\n"); fprintf(fd, "****************************************************************" "*****************\n"); fprintf(fd, "****************************************************************" "*****************\n\n"); for (tmp = t; tmp; tmp = tmp->nextcard) if (*(tmp->line) != '*') fprintf(fd, "%s\n", tmp->line); fclose(fd); } /* prepare .if and .elseif for numparam .if(expression) --> .if{expression} */ static void inp_dot_if(struct card *card) { for (; card; card = card->nextcard) { char *curr_line = card->line; if (*curr_line == '*') continue; if (ciprefix(".if", curr_line) || ciprefix(".elseif", curr_line)) { char *firstbr = strchr(curr_line, '('); char *lastbr = strrchr(curr_line, ')'); if ((!firstbr) || (!lastbr)) { fprintf(cp_err, "Error in netlist line %d\n", card->linenum_orig); fprintf(cp_err, " Bad syntax: %s\n\n", curr_line); controlled_exit(EXIT_BAD); } *firstbr = '{'; *lastbr = '}'; } } } /* Convert .param lines containing keyword 'temper' into .func lines: * .param xxx1 = 'temper + 25' ---> .func xxx1() 'temper + 25' * Add info about the functions (name, subcircuit depth, number of * subckt) to linked list new_func. * Then scan new_func, for each xxx1 scan all lines of deck, * find all xxx1 and convert them to a function: * xxx1 ---> xxx1() * If this happens to be in another .param line, convert it to .func, * add info to end of new_func and continue scanning. */ static char *inp_functionalise_identifier(char *curr_line, char *identifier); static void inp_fix_temper_in_param(struct card *deck) { int skip_control = 0, subckt_depth = 0, j, *sub_count; char *funcbody, *funcname; struct func_temper *f, *funcs = NULL, **funcs_tail_ptr = &funcs; struct card *card; sub_count = TMALLOC(int, 16); for (j = 0; j < 16; j++) sub_count[j] = 0; /* first pass: determine all .param with temper inside and replace by .func .param xxx1 = 'temper + 25' will become .func xxx1() 'temper + 25' */ card = deck; for (; card; card = card->nextcard) { char *curr_line = card->line; if (*curr_line == '*') continue; /* determine nested depths of subcircuits */ if (ciprefix(".subckt", curr_line)) { subckt_depth++; sub_count[subckt_depth]++; continue; } else if (ciprefix(".ends", curr_line)) { subckt_depth--; continue; } /* exclude any command inside .control ... .endc */ if (ciprefix(".control", curr_line)) { skip_control++; continue; } else if (ciprefix(".endc", curr_line)) { skip_control--; continue; } else if (skip_control > 0) { continue; } if (ciprefix(".para", curr_line)) { char *p, *temper, *equal_ptr, *lhs_b, *lhs_e; temper = search_identifier(curr_line, "temper", curr_line); if (!temper) continue; equal_ptr = find_assignment(curr_line); if (!equal_ptr) { fprintf(stderr, "ERROR: could not find '=' on parameter line '%s'!\n", curr_line); controlled_exit(EXIT_FAILURE); } /* .param lines with `,' separated multiple parameters * must have been split in inp_split_multi_param_lines() */ if (find_assignment(equal_ptr + 1)) { fprintf(stderr, "ERROR: internal error on line '%s'!\n", curr_line); controlled_exit(EXIT_FAILURE); } lhs_b = skip_non_ws(curr_line); // eat .param lhs_b = skip_ws(lhs_b); lhs_e = skip_back_ws(equal_ptr, curr_line); /* skip if this is a function already */ p = strpbrk(lhs_b, "(,)"); if (p && p < lhs_e) continue; if (temper < equal_ptr) { fprintf(stderr, "Error: you cannot assign a value to TEMPER\n" " Line no. %d, %s\n", card->linenum, curr_line); controlled_exit(EXIT_BAD); } funcname = copy_substring(lhs_b, lhs_e); funcbody = copy(equal_ptr + 1); *funcs_tail_ptr = inp_new_func( funcname, funcbody, card, sub_count, subckt_depth); funcs_tail_ptr = &(*funcs_tail_ptr)->next; tfree(funcbody); } } /* second pass */ /* for each .func entry in `funcs' start the insertion operation: search each line from the deck which has the suitable subcircuit nesting data. for tokens xxx equalling the funcname, replace xxx by xxx(). if the replacement is done in a .param line then convert it to a .func line and append an entry to `funcs'. Continue up to the very end of `funcs'. */ for (f = funcs; f; f = f->next) { for (j = 0; j < 16; j++) sub_count[j] = 0; card = deck; for (; card; card = card->nextcard) { char *new_str = NULL; /* string we assemble here */ char *curr_line = card->line; char *firsttok_str; if (*curr_line == '*') continue; /* determine nested depths of subcircuits */ if (ciprefix(".subckt", curr_line)) { subckt_depth++; sub_count[subckt_depth]++; continue; } else if (ciprefix(".ends", curr_line)) { subckt_depth--; continue; } /* exclude any command inside .control ... .endc */ if (ciprefix(".control", curr_line)) { skip_control++; continue; } else if (ciprefix(".endc", curr_line)) { skip_control--; continue; } else if (skip_control > 0) { continue; } /* exclude lines which do not have the same subcircuit nesting depth and number as found in f */ if (subckt_depth != f->subckt_depth) continue; if (sub_count[subckt_depth] != f->subckt_count) continue; /* remove first token, ignore it here, restore it later */ firsttok_str = gettok(&curr_line); if (*curr_line == '\0') { tfree(firsttok_str); continue; } new_str = inp_functionalise_identifier(curr_line, f->funcname); if (new_str == curr_line) { tfree(firsttok_str); continue; } /* restore first part of the line */ new_str = INPstrCat(firsttok_str, ' ', new_str); new_str = inp_remove_ws(new_str); /* if we have inserted into a .param line, convert to .func */ if (prefix(".para", new_str)) { char *new_tmp_str = new_str; new_tmp_str = nexttok(new_tmp_str); funcname = gettok_char(&new_tmp_str, '=', FALSE, FALSE); funcbody = copy(new_tmp_str + 1); *funcs_tail_ptr = inp_new_func( funcname, funcbody, card, sub_count, subckt_depth); funcs_tail_ptr = &(*funcs_tail_ptr)->next; tfree(new_str); tfree(funcbody); } else { /* Or just enter new line into deck */ insert_new_line(card, new_str, 0, card->linenum); *card->line = '*'; } } } /* final memory clearance */ tfree(sub_count); inp_delete_funcs(funcs); } /* Convert .param lines containing function 'agauss' and others * (function name handed over by *fcn), into .func lines: * .param xxx1 = 'aunif()' ---> .func xxx1() 'aunif()' * Add info about the functions (name, subcircuit depth, number of * subckt) to linked list new_func. * Then scan new_func, for each xxx1 scan all lines of deck, * find all xxx1 and convert them to a function: * xxx1 ---> xxx1() * * In a second step, after subcircuits have been expanded, all occurencies * of agauss in a b-line are replaced by their suitable value (function * eval_agauss() in inp.c). */ static void inp_fix_agauss_in_param(struct card *deck, char *fcn) { int skip_control = 0, subckt_depth = 0, j, *sub_count; char *funcbody, *funcname; struct func_temper *f, *funcs = NULL, **funcs_tail_ptr = &funcs; struct card *card; sub_count = TMALLOC(int, 16); for (j = 0; j < 16; j++) sub_count[j] = 0; /* first pass: * determine all .param with agauss inside and replace by .func * convert * .param xxx1 = 'agauss(x,y,z) * 25' * to * .func xxx1() 'agauss(x,y,z) * 25' */ card = deck; for (; card; card = card->nextcard) { char *curr_line = card->line; if (*curr_line == '*') continue; /* determine nested depths of subcircuits */ if (ciprefix(".subckt", curr_line)) { subckt_depth++; sub_count[subckt_depth]++; continue; } else if (ciprefix(".ends", curr_line)) { subckt_depth--; continue; } /* exclude any command inside .control ... .endc */ if (ciprefix(".control", curr_line)) { skip_control++; continue; } else if (ciprefix(".endc", curr_line)) { skip_control--; continue; } else if (skip_control > 0) { continue; } if (ciprefix(".para", curr_line)) { char *p, *temper, *equal_ptr, *lhs_b, *lhs_e; temper = search_identifier(curr_line, fcn, curr_line); if (!temper) continue; equal_ptr = find_assignment(curr_line); if (!equal_ptr) { fprintf(stderr, "ERROR: could not find '=' on parameter line '%s'!\n", curr_line); controlled_exit(EXIT_FAILURE); } /* .param lines with `,' separated multiple parameters * must have been split in inp_split_multi_param_lines() */ if (find_assignment(equal_ptr + 1)) { fprintf(stderr, "ERROR: internal error on line '%s'!\n", curr_line); controlled_exit(EXIT_FAILURE); } lhs_b = skip_non_ws(curr_line); // eat .param lhs_b = skip_ws(lhs_b); lhs_e = skip_back_ws(equal_ptr, curr_line); /* skip if this is a function already */ p = strpbrk(lhs_b, "(,)"); if (p && p < lhs_e) continue; if (temper < equal_ptr) { fprintf(stderr, "Error: you cannot assign a value to %s\n" " Line no. %d, %s\n", fcn, card->linenum, curr_line); controlled_exit(EXIT_BAD); } funcname = copy_substring(lhs_b, lhs_e); funcbody = copy(equal_ptr + 1); *funcs_tail_ptr = inp_new_func( funcname, funcbody, card, sub_count, subckt_depth); funcs_tail_ptr = &(*funcs_tail_ptr)->next; tfree(funcbody); } } /* second pass: * for each .func entry in `funcs' start the insertion operation: * search each line from the deck which has the suitable * subcircuit nesting data. * for tokens xxx equalling the funcname, replace xxx by xxx(). */ for (f = funcs; f; f = f->next) { for (j = 0; j < 16; j++) sub_count[j] = 0; card = deck; for (; card; card = card->nextcard) { char *new_str = NULL; /* string we assemble here */ char *curr_line = card->line; char *firsttok_str; if (*curr_line == '*') continue; /* determine nested depths of subcircuits */ if (ciprefix(".subckt", curr_line)) { subckt_depth++; sub_count[subckt_depth]++; continue; } else if (ciprefix(".ends", curr_line)) { subckt_depth--; continue; } /* exclude any command inside .control ... .endc */ if (ciprefix(".control", curr_line)) { skip_control++; continue; } else if (ciprefix(".endc", curr_line)) { skip_control--; continue; } else if (skip_control > 0) { continue; } /* if function is not at top level, exclude lines which do not have the same subcircuit nesting depth and number as found in f */ if (f->subckt_depth > 0) { if (subckt_depth != f->subckt_depth) continue; if (sub_count[subckt_depth] != f->subckt_count) continue; } /* remove first token, ignore it here, restore it later */ firsttok_str = gettok(&curr_line); if (*curr_line == '\0') { tfree(firsttok_str); continue; } new_str = inp_functionalise_identifier(curr_line, f->funcname); if (new_str == curr_line) { tfree(firsttok_str); continue; } /* restore first part of the line */ new_str = INPstrCat(firsttok_str, ' ', new_str); new_str = inp_remove_ws(new_str); *card->line = '*'; /* Enter new line into deck */ insert_new_line(card, new_str, 0, card->linenum); } } /* final memory clearance */ tfree(sub_count); inp_delete_funcs(funcs); } /* append "()" to each 'identifier' in 'curr_line', * unless already there */ static char *inp_functionalise_identifier(char *curr_line, char *identifier) { size_t len = strlen(identifier); char *p, *str = curr_line; for (p = str; (p = search_identifier(p, identifier, str)) != NULL;) if (p[len] != '(') { int prefix_len = (int) (p + len - str); char *x = str; str = tprintf("%.*s()%s", prefix_len, str, str + prefix_len); if (x != curr_line) tfree(x); p = str + prefix_len + 2; } else { p++; } return str; } /* enter function name, nested .subckt depths, and * number of .subckt at given level into struct new_func * and add line to deck */ static struct func_temper *inp_new_func(char *funcname, char *funcbody, struct card *card, int *sub_count, int subckt_depth) { struct func_temper *f; char *new_str; f = TMALLOC(struct func_temper, 1); f->funcname = funcname; f->next = NULL; f->subckt_depth = subckt_depth; f->subckt_count = sub_count[subckt_depth]; /* replace line in deck */ new_str = tprintf(".func %s() %s", funcname, funcbody); *card->line = '*'; insert_new_line(card, new_str, 0, card->linenum); return f; } static void inp_delete_funcs(struct func_temper *f) { while (f) { struct func_temper *f_next = f->next; tfree(f->funcname); tfree(f); f = f_next; } } /* look for unquoted parameters and quote them */ /* FIXME, this function seems to be useless and/or buggy and/or naive */ static void inp_quote_params(struct card *c, struct card *end_c, struct dependency *deps, int num_params) { bool in_control = FALSE; for (; c && c != end_c; c = c->nextcard) { int i, j, num_terminals; char *curr_line = c->line; if (ciprefix(".control", curr_line)) { in_control = TRUE; continue; } if (ciprefix(".endc", curr_line)) { in_control = FALSE; continue; } if (in_control || curr_line[0] == '.' || curr_line[0] == '*') continue; num_terminals = get_number_terminals(curr_line); if (num_terminals <= 0) continue; /* There are devices that should not get quotes around tokens following after the terminals. See bug 384 */ if (curr_line[0] == 'f' || curr_line[0] == 'h') num_terminals++; for (i = 0; i < num_params; i++) { char *s = curr_line; for (j = 0; j < num_terminals + 1; j++) { s = skip_non_ws(s); s = skip_ws(s); } while ((s = ya_search_identifier( s, deps[i].param_name, curr_line)) != NULL) { char *rest = s + strlen(deps[i].param_name); if (s > curr_line && (isspace_c(s[-1]) || s[-1] == '=') && (isspace_c(*rest) || *rest == '\0' || *rest == ')')) { int prefix_len; if (isspace_c(s[-1])) { s = skip_back_ws(s, curr_line); if (s > curr_line && s[-1] == '{') s--; } if (isspace_c(*rest)) { /* possible case: "{ length }" -> {length} */ rest = skip_ws(rest); if (*rest == '}') rest++; else rest--; } prefix_len = (int) (s - curr_line); curr_line = tprintf("%.*s {%s}%s", prefix_len, curr_line, deps[i].param_name, rest); s = curr_line + prefix_len + strlen(deps[i].param_name) + 3; tfree(c->line); c->line = curr_line; } else { s += strlen(deps[i].param_name); } } } } } /* VDMOS special: Check for 'vdmos' in .model line. check if 'pchan', then add p to vdmos and ignore 'pchan'. If no 'pchan' is found, add n to vdmos. Ignore annotations on Vds, Ron, Qg, and mfg. Assemble all other tokens in a wordlist, and flatten it to become the new .model line. */ static void inp_vdmos_model(struct card *deck) { struct card *card; for (card = deck; card; card = card->nextcard) { char *curr_line, *cut_line, *token, *new_line; wordlist *wl = NULL, *wlb; curr_line = cut_line = card->line; if (ciprefix(".model", curr_line) && strstr(curr_line, "vdmos")) { cut_line = strstr(curr_line, "vdmos"); wl_append_word(&wl, &wl, copy_substring(curr_line, cut_line)); wlb = wl; if (strstr(cut_line, "pchan")) { wl_append_word(NULL, &wl, "vdmosp ("); } else { wl_append_word(NULL, &wl, "vdmosn ("); } cut_line = cut_line + 5; cut_line = skip_ws(cut_line); if (*cut_line == '(') cut_line = cut_line + 1; new_line = NULL; while (cut_line && *cut_line) { token = gettok_model(&cut_line); if (!ciprefix("pchan", token) && !ciprefix("ron=", token) && !ciprefix("vds=", token) && !ciprefix("qg=", token) && !ciprefix("mfg=", token) && !ciprefix("nchan", token)) wl_append_word(NULL, &wl, token); if (*cut_line == ')') { wl_append_word(NULL, &wl, ")"); break; } } new_line = wl_flatten(wlb); tfree(card->line); card->line = new_line; } } } /* storage for devices which get voltage source added */ struct replace_currm { struct card *s_start; struct card *cline; char *rtoken; struct replace_currm *next; }; /* check if fourth token of sname starts with POLY */ static bool is_poly_source(char *sname) { char *nstr = nexttok(sname); nstr = nexttok(nstr); nstr = nexttok(nstr); if (ciprefix("POLY", nstr)) return TRUE; else return FALSE; } /* Measure current in node 1 of all devices, e.g. I, B, F, G. I(V...) will be ignored, I(E...) and I(H...) will be undone if they are simple linear sources, however E nonlinear voltage source will be converted later to B source, therefore we need to add current measurement here. First find all ocurrencies of i(XYZ), store their cards, then search for XYZ, but only within respective subcircuit, or if all happens at top level. Other hierarchy is ignored for now. Replace I(XYZ) bx I(V_XYZ), add voltage source V_XYZ with suitable extra nodes. */ static void inp_meas_current(struct card *deck) { struct card *card, *subc_start = NULL, *subc_prev = NULL; struct replace_currm *new_rep, *act_rep = NULL, *rep = NULL; char *s, *t, *u, *v, *w; int skip_control = 0, subs = 0, sn = 0; /* scan through deck and find i(xyz), replace by i(v_xyz) */ for (card = deck; card; card = card->nextcard) { char *curr_line = card->line; /* exclude any command inside .control ... .endc */ if (ciprefix(".control", curr_line)) { skip_control++; continue; } else if (ciprefix(".endc", curr_line)) { skip_control--; continue; } else if (skip_control > 0) { continue; } if (*curr_line == '*') continue; if (*curr_line == '.') { if (ciprefix(".subckt", curr_line)) { subs++; subc_prev = subc_start; subc_start = card; } else if (ciprefix(".ends", curr_line)) { subs--; subc_start = subc_prev; } else continue; } if (!strstr(curr_line, "i(")) continue; s = v = w = stripWhiteSpacesInsideParens(curr_line); while (s) { /* i( may occur more than once in a line */ s = u = strstr(s, "i("); /* we have found it, but not (in error) at the beginning of the * line */ if (s && s > v) { /* '{' if at beginning of expression, '=' possible in B-line */ if (is_arith_char(s[-1]) || s[-1] == '{' || s[-1] == '=' || isspace_c(s[-1])) { s += 2; if (*s == 'v') { // printf("i(v...) found in\n%s\n not converted!\n\n", // curr_line); continue; } else { char *beg_str, *new_str; get_r_paren(&u); /* token containing name of devices to be measured */ t = copy_substring(s, --u); if (ft_ngdebug) printf("i(%s) found in\n%s\n\n", t, v); /* new entry to the end of struct rep */ new_rep = TMALLOC(struct replace_currm, 1); new_rep->s_start = subc_start; new_rep->next = NULL; new_rep->cline = card; new_rep->rtoken = t; if (act_rep) { act_rep->next = new_rep; act_rep = act_rep->next; } else rep = act_rep = new_rep; /* change line, convert i(XXX) to i(v_XXX) */ beg_str = copy_substring(v, s); new_str = tprintf("%s%s%s", beg_str, "v_", s); if (ft_ngdebug) printf("converted to\n%s\n\n", new_str); tfree(card->line); card->line = s = v = new_str; s++; tfree(beg_str); } } else s++; } } tfree(w); } /* return if we did not find any i( */ if (rep == NULL) return; /* scan through all the devices, search for xyz, modify node 1 by adding _vmeas, add a line with zero voltage v_xyz, having original node 1 and modified node 1. Do this within the top level or the same level of subcircuit only. */ new_rep = rep; for (; rep; rep = rep->next) { card = rep->s_start; subs = 0; if (card) card = card->nextcard; else card = deck; for (; card; card = card->nextcard) { char *tok, *new_tok, *node1, *new_line; char *curr_line = card->line; /* exclude any command inside .control ... .endc */ if (ciprefix(".control", curr_line)) { skip_control++; continue; } else if (ciprefix(".endc", curr_line)) { skip_control--; continue; } else if (skip_control > 0) { continue; } if (*curr_line == '*') continue; if (*curr_line == '.') { if (ciprefix(".subckt", curr_line)) subs++; else if (ciprefix(".ends", curr_line)) subs--; else continue; } if (subs > 0) continue; /* We are at now top level or in top level of subcircuit where i(xyz) has been found */ tok = gettok(&curr_line); /* done when end of subcircuit is reached */ if (eq(".ends", tok) && rep->s_start) { tfree(tok); break; } if (eq(rep->rtoken, tok)) { /* special treatment if we have an e (VCVS) or h (CCVS) source: check if it is a simple linear source, if yes, don't do a replacement, instead undo the already done name conversion */ if (((tok[0] == 'e') || (tok[0] == 'h')) && !strchr(curr_line, '=') && !is_poly_source(card->line)) { /* simple linear e source */ char *searchstr = tprintf("i(v_%s)", tok); char *thisline = rep->cline->line; char *findstr = strstr(thisline, searchstr); while (findstr) { if (prefix(searchstr, findstr)) memcpy(findstr, " i(", 4); findstr = strstr(thisline, searchstr); if (ft_ngdebug) printf("i(%s) moved back to i(%s) in\n%s\n\n", searchstr, tok, rep->cline->line); } tfree(searchstr); tfree(tok); continue; } node1 = gettok(&curr_line); /* Add _vmeas only once to first device node. Continue if we already have modified device "tok" */ if (!strstr(node1, "_vmeas")) { new_line = tprintf( "%s %s_vmeas_%d %s", tok, node1, sn, curr_line); tfree(card->line); card->line = new_line; } new_tok = tprintf("v_%s", tok); /* We have already added a line v_xyz to the deck */ if (!ciprefix(new_tok, card->nextcard->line)) { /* add new line */ new_line = tprintf( "%s %s %s_vmeas_%d 0", new_tok, node1, node1, sn); /* insert new_line after card->line */ insert_new_line(card, new_line, card->linenum + 1, 0); } sn++; tfree(new_tok); tfree(node1); } tfree(tok); } } /* free rep */ while (new_rep) { struct replace_currm *repn = new_rep->next; tfree(new_rep->rtoken); tfree(new_rep); new_rep = repn; } } /* replace the E source TABLE function by a B source pwl (used by ST OpAmps and comparators). E_RO_3 VB_3 VB_4 VALUE={ TABLE( V(VCCP,VCCN), 2 , 35 , 3.3 , 15 , 5 , 10 )*I(VreadIo)} will become BE_RO_3_1 TABLE_NEW_1 0 v = pwl( V(VCCP,VCCN), 2 , 35 , 3.3 , 15 , 5 , 10 ) E_RO_3 VB_3 VB_4 VALUE={ V(TABLE_NEW_1)*I(VreadIo)} */ static void replace_table(struct card *startcard) { struct card *card; static int numb = 0; for (card = startcard; card; card = card->nextcard) { char *cut_line = card->line; if (*cut_line == 'e') { char *valp = strstr(cut_line, "value={"); if (valp) { char *ftablebeg = strstr(cut_line, "table("); while (ftablebeg) { /* get the beginning of the line */ char *begline = copy_substring(cut_line, ftablebeg); /* get the table function */ char *tabfun = gettok_char(&ftablebeg, ')', TRUE, TRUE); /* the new e line */ char *neweline = tprintf( "%s v(table_new_%d)%s", begline, numb, ftablebeg); char *newbline = tprintf("btable_new_%d table_new_%d 0 v=pwl%s", numb, numb, tabfun + 5); numb++; tfree(tabfun); tfree(begline); tfree(card->line); card->line = cut_line = neweline; insert_new_line(card, newbline, 0, 0); /* read next TABLE function in cut_line */ ftablebeg = strstr(cut_line, "table("); } continue; } } } } /* find the model requested by ako:model and do the replacement */ static struct card *find_model(struct card *startcard, struct card *changecard, char *searchname, char *newmname, char *newmtype, char *endstr) { struct card *nomod, *returncard = changecard; char *origmname, *origmtype; char *beginline = startcard->line; if (ciprefix(".subckt", beginline)) startcard = startcard->nextcard; int nesting2 = 0; for (nomod = startcard; nomod; nomod = nomod->nextcard) { char *origmodline = nomod->line; if (ciprefix(".subckt", origmodline)) nesting2++; if (ciprefix(".ends", origmodline)) nesting2--; /* skip any subcircuit */ if (nesting2 > 0) continue; if (nesting2 == -1) { returncard = changecard; break; } if (ciprefix(".model", origmodline)) { origmodline = nexttok(origmodline); origmname = gettok(&origmodline); origmtype = gettok_noparens(&origmodline); if (cieq(origmname, searchname)) { if (!eq(origmtype, newmtype)) { fprintf(stderr, "Error: Original (%s) and new (%s) type for AKO " "model disagree\n", origmtype, newmtype); controlled_exit(1); } /* we have got it */ char *newmodcard = tprintf(".model %s %s %s%s", newmname, newmtype, origmodline, endstr); char *tmpstr = strstr(newmodcard, ")("); if (tmpstr) { tmpstr[0] = ' '; tmpstr[1] = ' '; } tfree(changecard->line); changecard->line = newmodcard; tfree(origmname); tfree(origmtype); returncard = NULL; break; } tfree(origmname); tfree(origmtype); } else returncard = changecard; } return returncard; } /* do the .model replacement required by ako (a kind of) * PSPICE does not support ested .subckt definitions, so * a simple structure is needed: search for ako:modelname, * then for modelname in the subcircuit or in the top level. * .model qorig npn (BF=48 IS=2e-7) * .model qbip1 ako:qorig NPN (BF=60 IKF=45m) * after the replacement we have * .model qbip1 NPN (BF=48 IS=2e-7 BF=60 IKF=45m) * and we benefit from the fact that if parameters have * doubled, the last entry of a parameter (e.g. BF=60) * overwrites the previous one (BF=48). */ static struct card *ako_model(struct card *startcard) { char *newmname, *newmtype; struct card *card, *returncard = NULL, *subcktcard = NULL; for (card = startcard; card; card = card->nextcard) { char *akostr, *searchname; char *cut_line = card->line; if (ciprefix(".subckt", cut_line)) subcktcard = card; else if (ciprefix(".ends", cut_line)) subcktcard = NULL; if (ciprefix(".model", cut_line) && ((akostr = strstr(cut_line, "ako:")) != NULL) && isspace_c(akostr[-1])) { akostr += 4; searchname = gettok(&akostr); cut_line = nexttok(cut_line); newmname = gettok(&cut_line); newmtype = gettok_noparens(&akostr); /* find the model and do the replacement */ if (subcktcard) returncard = find_model(subcktcard, card, searchname, newmname, newmtype, akostr); if (returncard || !subcktcard) returncard = find_model(startcard, card, searchname, newmname, newmtype, akostr); tfree(searchname); tfree(newmname); tfree(newmtype); /* replacement not possible, bail out */ if (returncard) break; } } return returncard; } /* in out von cntl_on voff cntl_off ron r_on roff r_off */ static int rep_spar(char *inpar[4]) { int i; for (i = 0; i < 4; i++) { char *t, *strend; char *tok = inpar[i]; if ((t = strstr(tok, "von")) != NULL) { strend = copy(t + 1); tfree(inpar[i]); inpar[i] = tprintf("cntl_%s", strend); tfree(strend); } else if ((t = strstr(tok, "voff")) != NULL) { strend = copy(t + 1); tfree(inpar[i]); inpar[i] = tprintf("cntl_%s", strend); tfree(strend); } else if ((t = strstr(tok, "ron")) != NULL) { strend = copy(t + 1); tfree(inpar[i]); inpar[i] = tprintf("r_%s", strend); tfree(strend); } else if ((t = strstr(tok, "roff")) != NULL) { strend = copy(t + 1); tfree(inpar[i]); inpar[i] = tprintf("r_%s", strend); tfree(strend); } else { fprintf(stderr, "Bad vswitch parameter %s\n", tok); return 1; } } return 0; } struct vsmodels { char *modelname; char *subcktline; struct vsmodels *nextmodel; }; /* insert a new model, just behind the given model */ static struct vsmodels *insert_new_model( struct vsmodels *vsmodel, char *name, char *subcktline) { struct vsmodels *x = TMALLOC(struct vsmodels, 1); x->nextmodel = vsmodel ? vsmodel->nextmodel : NULL; x->modelname = copy(name); x->subcktline = copy(subcktline); if (vsmodel) vsmodel->nextmodel = x; else vsmodel = x; return vsmodel; } /* find the model */ static bool find_a_model( struct vsmodels *vsmodel, char *name, char *subcktline) { struct vsmodels *x; for (x = vsmodel; vsmodel; vsmodel = vsmodel->nextmodel) if (eq(vsmodel->modelname, name) && eq(vsmodel->subcktline, subcktline)) return TRUE; return FALSE; } /* delete the vsmodels list */ static bool del_models(struct vsmodels *vsmodel) { struct vsmodels *x; if (!vsmodel) return FALSE; while (vsmodel) { x = vsmodel->nextmodel; tfree(vsmodel->modelname); tfree(vsmodel->subcktline); tfree(vsmodel); vsmodel = x; } return TRUE; } /**** PSPICE to ngspice ************** * .model replacement in ako (a kind of) model descriptions * replace the E source TABLE function by a B source pwl * add predefined params TEMP, VT, GMIN to beginning of deck * add predefined params TEMP, VT, GMIN to beginning of each .subckt call * add .functions limit, pwr, pwrs, stp, if, int * replace S1 D S DG GND SWN .MODEL SWN VSWITCH(VON = { 0.55 } VOFF = { 0.49 } RON = { 1 / (2 * M*(W / LE)*(KPN / 2) * 10) } ROFF = { 1G }) * by as1 %vd(DG GND) % gd(D S) aswn .model aswn aswitch(cntl_off={0.49} cntl_on={0.55} r_off={1G} + r_on={ 1 / (2 * M*(W / LE)*(KPN / 2) * 10) } log = TRUE) * replace & by && * replace | by || * in R instance, replace TC = xx1, xx2 by TC1=xx1 TC2=xx2 * replace T_ABS by temp and T_REL_GLOBAL by dtemp in .model cards * get the area factor for diodes and bipolar devices */ static struct card *pspice_compat(struct card *oldcard) { struct card *card, *newcard, *nextcard; struct vsmodels *modelsfound = NULL; int skip_control = 0; /* .model replacement in ako (a kind of) model descriptions * in first .subckt and top level only */ struct card *errcard; if ((errcard = ako_model(oldcard)) != NULL) { fprintf(stderr, "Error: no model found for %s\n", errcard->line); controlled_exit(1); } /* replace TABLE function in E source */ replace_table(oldcard); /* add predefined params TEMP, VT, GMIN to beginning of deck */ char *new_str = copy(".param temp = 'temper'"); newcard = insert_new_line(NULL, new_str, 1, 0); new_str = copy(".param vt = '(temper + 273.15) * 8.6173303e-5'"); nextcard = insert_new_line(newcard, new_str, 2, 0); new_str = copy(".param gmin = 1e-12"); nextcard = insert_new_line(nextcard, new_str, 3, 0); /* add funcs limit, pwr, pwrs, stp, if, int */ new_str = copy(".func limit(x, a, b) { min(max(x, a), b) }"); nextcard = insert_new_line(nextcard, new_str, 4, 0); new_str = copy(".func pwr(x, a) { abs(x) ** a }"); nextcard = insert_new_line(nextcard, new_str, 5, 0); new_str = copy(".func pwrs(x, a) { sgn(x) * pwr(x, a) }"); nextcard = insert_new_line(nextcard, new_str, 6, 0); new_str = copy(".func stp(x) { u(x) }"); nextcard = insert_new_line(nextcard, new_str, 7, 0); new_str = copy(".func if(a, b, c) {ternary_fcn( a , b , c )}"); nextcard = insert_new_line(nextcard, new_str, 8, 0); new_str = copy(".func int(x) { sign(x)*floor(abs(x)) }"); nextcard = insert_new_line(nextcard, new_str, 9, 0); nextcard->nextcard = oldcard; /* add predefined parameters TEMP, VT after each subckt call */ /* FIXME: This should not be necessary if we had a better sense of hierarchy during the evaluation of TEMPER */ for (card = newcard; card; card = card->nextcard) { char *cut_line = card->line; if (ciprefix(".subckt", cut_line)) { new_str = copy(".param temp = 'temper'"); nextcard = insert_new_line(card, new_str, 0, 0); new_str = copy(".param vt = '(temper + 273.15) * 8.6173303e-5'"); nextcard = insert_new_line(nextcard, new_str, 1, 0); } } /* in R instance, replace TC = xx1, xx2 by TC1=xx1 TC2=xx2 */ for (card = newcard; card; card = card->nextcard) { char *cut_line = card->line; /* exclude any command inside .control ... .endc */ if (ciprefix(".control", cut_line)) { skip_control++; continue; } else if (ciprefix(".endc", cut_line)) { skip_control--; continue; } else if (skip_control > 0) { continue; } if (*cut_line == 'r' || *cut_line == 'l' || *cut_line == 'c') { /* Skip name and two nodes */ char *ntok = nexttok(cut_line); ntok = nexttok(ntok); ntok = nexttok(ntok); if (!ntok){ fprintf(stderr, "Error: Missing token in line %d:\n%s\n", card->linenum, cut_line); fprintf(stderr, " Please correct the input file\n"); controlled_exit(1); } char *tctok = search_plain_identifier(ntok, "tc"); if (tctok) { char *tctok1 = strchr(tctok, '='); if (tctok1) /* skip '=' */ tctok1 += 1; else /* no '=' found, skip 'tc' */ tctok1 = tctok + 2; char *tc1 = gettok_node(&tctok1); char *tc2 = gettok_node(&tctok1); tctok[-1] = '\0'; char *newstring; if (tc1 && tc2) newstring = tprintf("%s tc1=%s tc2=%s", cut_line, tc1, tc2); else if (tc1) newstring = tprintf("%s tc1=%s", cut_line, tc1); else { fprintf(stderr, "Warning: tc without parameters removed in line " "\n %s\n", cut_line); continue; } tfree(card->line); card->line = newstring; tfree(tc1); tfree(tc2); } } } /* replace & with && and | with || and *# with * # */ for (card = newcard; card; card = card->nextcard) { char *t; char *cut_line = card->line; /* we don't have command lines in a PSPICE model */ if (ciprefix("*#", cut_line)) { char *tmpstr = tprintf("* #%s", cut_line + 2); tfree(card->line); card->line = tmpstr; continue; } if (*cut_line == '*') continue; /* exclude any command inside .control ... .endc */ if (ciprefix(".control", cut_line)) { skip_control++; continue; } else if (ciprefix(".endc", cut_line)) { skip_control--; continue; } else if (skip_control > 0) { continue; } if ((t = strstr(card->line, "&")) != NULL) { while (t && (t[1] != '&')) { char *tt = NULL; char *tn = copy(t + 1); /*skip |*/ char *strbeg = copy_substring(card->line, t); tfree(card->line); card->line = tprintf("%s&&%s", strbeg, tn); tfree(strbeg); tfree(tn); t = card->line; while ((t = strstr(t, "&&")) != NULL) tt = t = t + 2; if (!tt) break; else t = strstr(tt, "&"); } } if ((t = strstr(card->line, "|")) != NULL) { while (t && (t[1] != '|')) { char *tt = NULL; char *tn = copy(t + 1); /*skip |*/ char *strbeg = copy_substring(card->line, t); tfree(card->line); card->line = tprintf("%s||%s", strbeg, tn); tfree(strbeg); tfree(tn); t = card->line; while ((t = strstr(t, "||")) != NULL) tt = t = t + 2; if (!tt) break; else t = strstr(tt, "|"); } } } /* replace T_ABS by temp, T_REL_GLOBAL by dtemp, and T_MEASURED by TNOM in .model cards. What about T_REL_LOCAL ? T_REL_LOCAL is used in conjunction with AKO and is not yet implemented. */ for (card = newcard; card; card = card->nextcard) { char *cut_line = card->line; if (ciprefix(".model", cut_line)) { char *t_str; if ((t_str = strstr(cut_line, "t_abs")) != NULL) memcpy(t_str, " temp", 5); else if ((t_str = strstr(cut_line, "t_rel_global")) != NULL) memcpy(t_str, " dtemp", 12); else if ((t_str = strstr(cut_line, "t_measured")) != NULL) memcpy(t_str, " tnom", 10); } } /* get the area factor for diodes and bipolar devices d1 n1 n2 dmod 7 --> d1 n1 n2 dmod area=7 q2 n1 n2 n3 [n4] bjtmod 1.35 --> q2 n1 n2 n3 n4 bjtmod area=1.35 q3 1 2 3 4 bjtmod 1.45 --> q2 1 2 3 4 bjtmod area=1.45 */ for (card = newcard; card; card = card->nextcard) { char *cut_line = card->line; if (*cut_line == '*') continue; // exclude any command inside .control ... .endc if (ciprefix(".control", cut_line)) { skip_control++; continue; } else if (ciprefix(".endc", cut_line)) { skip_control--; continue; } else if (skip_control > 0) { continue; } if (*cut_line == 'q') { cut_line = nexttok(cut_line); //.model cut_line = nexttok(cut_line); // node1 cut_line = nexttok(cut_line); // node2 cut_line = nexttok(cut_line); // node3 if (!cut_line) { fprintf(stderr, "Line no. %d, %s missing tokens\n", card->linenum_orig, card->line); continue; } if (*cut_line == '[') { // node4 not a number *cut_line = ' '; cut_line = strchr(cut_line, ']'); *cut_line = ' '; cut_line = skip_ws(cut_line); cut_line = nexttok(cut_line); // model name } else { // if an integer number, it is node4 bool is_node4 = TRUE; while (*cut_line && !isspace(*cut_line)) if (!isdigit(*cut_line++)) is_node4 = FALSE; // already model name if (is_node4) cut_line = nexttok(cut_line); // model name } if (*cut_line && atof(cut_line) > 0.0) { // size of area is a real number char *tmpstr1 = copy_substring(card->line, cut_line); char *tmpstr2 = tprintf("%s area=%s", tmpstr1, cut_line); tfree(tmpstr1); tfree(card->line); card->line = tmpstr2; } else if (*cut_line && *(skip_ws(cut_line)) == '{') { // size of area is parametrized inside {} char *tmpstr1 = copy_substring(card->line, cut_line); char *tmpstr2 = gettok_char(&cut_line, '}', TRUE, TRUE); char *tmpstr3 = tprintf("%s area=%s %s", tmpstr1, tmpstr2, cut_line); tfree(tmpstr1); tfree(tmpstr2); tfree(card->line); card->line = tmpstr3; } } else if (*cut_line == 'd') { cut_line = nexttok(cut_line); //.model cut_line = nexttok(cut_line); // node1 cut_line = nexttok(cut_line); // node2 if (!cut_line) { fprintf(stderr, "Line no. %d, %s missing tokens\n", card->linenum_orig, card->line); continue; } cut_line = nexttok(cut_line); // model name if (*cut_line && atof(cut_line) > 0.0) { // size of area char *tmpstr1 = copy_substring(card->line, cut_line); char *tmpstr2 = tprintf("%s area=%s", tmpstr1, cut_line); tfree(tmpstr1); tfree(card->line); card->line = tmpstr2; } } } /* replace * S1 D S DG GND SWN * .MODEL SWN VSWITCH ( VON = {0.55} VOFF = {0.49} RON={1/(2*M*(W/LE)*(KPN/2)*10)} ROFF={1G} ) * by * a1 %v(DG) %gd(D S) swa * .MODEL SWA aswitch(cntl_off=0.49 cntl_on=0.55 r_off=1G r_on={1/(2*M*(W/LE)*(KPN/2)*10)} log=TRUE) * simple hierachy, as nested subcircuits are not allowed in PSPICE */ /* first scan: find the vswitch models, transform them and put them into a * list */ for (card = newcard; card; card = card->nextcard) { char *str; static struct card *subcktline = NULL; static int nesting = 0; char *cut_line = card->line; if (ciprefix(".subckt", cut_line)) { subcktline = card; nesting++; } if (ciprefix(".ends", cut_line)) nesting--; if (ciprefix(".model", card->line) && strstr(card->line, "vswitch")) { char *modpar[4]; char *modname; int i; card->line = str = inp_remove_ws(card->line); str = nexttok(str); /* throw away '.model' */ INPgetNetTok(&str, &modname, 0); /* model name */ if (!ciprefix("vswitch", str)) { tfree(modname); continue; } /* we have to find 4 parameters, identified by '=', separated by * spaces */ char *equalptr[4]; equalptr[0] = strstr(str, "="); if (!equalptr[0]) { fprintf(stderr, "Error: not enough parameters in vswitch model\n " "%s\n", card->line); controlled_exit(1); } for (i = 1; i < 4; i++) { equalptr[i] = strstr(equalptr[i - 1] + 1, "="); if (!equalptr[i]) { fprintf(stderr, "Error: not enough parameters in vswitch model\n " " %s\n", card->line); controlled_exit(1); } } for (i = 0; i < 4; i++) { equalptr[i] = skip_back_ws(equalptr[i], str); while (*(equalptr[i]) != '(' && !isspace_c(*(equalptr[i])) && *(equalptr[i]) != ',') (equalptr[i])--; (equalptr[i])++; } for (i = 0; i < 3; i++) modpar[i] = copy_substring(equalptr[i], equalptr[i + 1] - 1); if (strrchr(equalptr[3], ')')) modpar[3] = copy_substring( equalptr[3], strrchr(equalptr[3], ')')); else /* vswitch defined without parens */ modpar[3] = copy(equalptr[3]); tfree(card->line); /* replace VON by cntl_on, VOFF by cntl_off, RON by r_on, and ROFF * by r_off */ rep_spar(modpar); card->line = tprintf(".model a%s aswitch(%s %s %s %s log=TRUE)", modname, modpar[0], modpar[1], modpar[2], modpar[3]); for (i = 0; i < 4; i++) tfree(modpar[i]); if (nesting > 0) modelsfound = insert_new_model( modelsfound, modname, subcktline->line); else modelsfound = insert_new_model(modelsfound, modname, "top"); tfree(modname); } } /* no need to continue if no vswitch is found */ if (!modelsfound) return newcard; /* second scan: find the switch instances s calling a vswitch model and * transform them */ for (card = newcard; card; card = card->nextcard) { static struct card *subcktline = NULL; static int nesting = 0; char *cut_line = card->line; if (*cut_line == '*') continue; // exclude any command inside .control ... .endc if (ciprefix(".control", cut_line)) { skip_control++; continue; } else if (ciprefix(".endc", cut_line)) { skip_control--; continue; } else if (skip_control > 0) { continue; } if (ciprefix(".subckt", cut_line)) { subcktline = card; nesting++; } if (ciprefix(".ends", cut_line)) nesting--; if (ciprefix("s", cut_line)) { /* check for the model name */ int i; char *stoks[6]; for (i = 0; i < 6; i++) stoks[i] = gettok_node(&cut_line); /* rewrite s line and replace it if a model is found */ if ((nesting > 0) && find_a_model(modelsfound, stoks[5], subcktline->line)) { tfree(card->line); card->line = tprintf("a%s %%vd(%s %s) %%gd(%s %s) a%s", stoks[0], stoks[3], stoks[4], stoks[1], stoks[2], stoks[5]); } /* if model is not within same subcircuit, search at top level */ else if (find_a_model(modelsfound, stoks[5], "top")) { tfree(card->line); card->line = tprintf("a%s %%vd(%s %s) %%gd(%s %s) a%s", stoks[0], stoks[3], stoks[4], stoks[1], stoks[2], stoks[5]); } for (i = 0; i < 6; i++) tfree(stoks[i]); } } del_models(modelsfound); return newcard; } /* do not modify oldcard address, insert everything after first line only */ static void pspice_compat_a(struct card *oldcard) { oldcard->nextcard = pspice_compat(oldcard->nextcard); } /**** LTSPICE to ngspice ************** * add functions uplim, dnlim * Replace * D1 A K SDMOD * .MODEL SDMOD D (Roff=1000 Ron=0.7 Rrev=0.2 Vfwd=1 Vrev=10 Revepsilon=0.2 * Epsilon=0.2 Ilimit=7 Revilimit=7) by ad1 a k asdmod .model asdmod * sidiode(Roff=1000 Ron=0.7 Rrev=0.2 Vfwd=1 Vrev=10 Revepsilon=0.2 * Epsilon=0.2 Ilimit=7 Revilimit=7) */ struct card *ltspice_compat(struct card *oldcard) { struct card *card, *newcard, *nextcard; struct vsmodels *modelsfound = NULL; int skip_control = 0; /* add funcs uplim, dnlim to beginning of deck */ char *new_str = copy(".func uplim(x, pos, z) { min(x, pos - z) + (1 - " "(min(max(0, x - pos + z), 2 * z) / 2 / z - 1)**2)*z }"); newcard = insert_new_line(NULL, new_str, 1, 0); new_str = copy(".func dnlim(x, neg, z) { max(x, neg + z) - (1 - " "(min(max(0, -x + neg + z), 2 * z) / 2 / z - 1)**2)*z }"); nextcard = insert_new_line(newcard, new_str, 2, 0); new_str = copy(".func uplim_tanh(x, pos, z) { min(x, pos - z) + " "tanh(max(0, x - pos + z) / z)*z }"); nextcard = insert_new_line(nextcard, new_str, 3, 0); new_str = copy(".func dnlim_tanh(x, neg, z) { max(x, neg + z) - " "tanh(max(0, neg + z - x) / z)*z }"); nextcard = insert_new_line(nextcard, new_str, 4, 0); nextcard->nextcard = oldcard; /* replace * D1 A K SDMOD * .MODEL SDMOD D (Roff=1000 Ron=0.7 Rrev=0.2 Vfwd=1 Vrev=10 Revepsilon=0.2 Epsilon=0.2 Ilimit=7 Revilimit=7) * by * a1 a k SDMOD * .model SDMOD sidiode(Roff=1000 Ron=0.7 Rrev=0.2 Vfwd=1 Vrev=10 Revepsilon=0.2 Epsilon=0.2 Ilimit=7 Revilimit=7) * Do this if one of the parameters, which are uncommon to standard diode model, has been found. * simple hierachy, as nested subcircuits are not allowed in PSPICE */ /* first scan: find the d models, transform them and put them into a list */ for (card = nextcard; card; card = card->nextcard) { char *str; static struct card *subcktline = NULL; static int nesting = 0; char *cut_line = card->line; if (ciprefix(".subckt", cut_line)) { subcktline = card; nesting++; } if (ciprefix(".ends", cut_line)) nesting--; if (ciprefix(".model", card->line) && search_plain_identifier(card->line, "d")) { if (search_plain_identifier(card->line, "roff") || search_plain_identifier(card->line, "ron") || search_plain_identifier(card->line, "rrev") || search_plain_identifier(card->line, "vfwd") || search_plain_identifier(card->line, "vrev") || search_plain_identifier(card->line, "revepsilon") || search_plain_identifier(card->line, "epsilon") || search_plain_identifier(card->line, "revilimit") || search_plain_identifier(card->line, "ilimit")) { char *modname; card->line = str = inp_remove_ws(card->line); str = nexttok(str); /* throw away '.model' */ INPgetNetTok(&str, &modname, 0); /* model name */ if (!ciprefix("d", str)) { tfree(modname); continue; } /* skip d */ str++; /* we take all the existing parameters */ char *newstr = copy(str); tfree(card->line); card->line = tprintf(".model a%s sidiode%s", modname, newstr); if (nesting > 0) modelsfound = insert_new_model( modelsfound, modname, subcktline->line); else modelsfound = insert_new_model(modelsfound, modname, "top"); tfree(modname); tfree(newstr); } } else continue; } /* no need to continue if no d is found */ if (!modelsfound) return newcard; /* second scan: find the diode instances d calling a simple diode model * and transform them */ for (card = nextcard; card; card = card->nextcard) { static struct card *subcktline = NULL; static int nesting = 0; char *cut_line = card->line; if (*cut_line == '*') continue; // exclude any command inside .control ... .endc if (ciprefix(".control", cut_line)) { skip_control++; continue; } else if (ciprefix(".endc", cut_line)) { skip_control--; continue; } else if (skip_control > 0) { continue; } if (ciprefix(".subckt", cut_line)) { subcktline = card; nesting++; } if (ciprefix(".ends", cut_line)) nesting--; if (ciprefix("d", cut_line)) { /* check for the model name */ int i; char *stoks[4]; for (i = 0; i < 4; i++) stoks[i] = gettok_node(&cut_line); /* rewrite d line and replace it if a model is found */ if ((nesting > 0) && find_a_model(modelsfound, stoks[3], subcktline->line)) { tfree(card->line); card->line = tprintf("a%s %s %s a%s", stoks[0], stoks[1], stoks[2], stoks[3]); } /* if model is not within same subcircuit, search at top level */ else if (find_a_model(modelsfound, stoks[3], "top")) { tfree(card->line); card->line = tprintf("a%s %s %s a%s", stoks[0], stoks[1], stoks[2], stoks[3]); } for (i = 0; i < 4; i++) tfree(stoks[i]); } } del_models(modelsfound); return newcard; } /* do not modify oldcard address, insert everything after first line only */ static void ltspice_compat_a(struct card *oldcard) { oldcard->nextcard = ltspice_compat(oldcard->nextcard); } /* syntax check: Check if we have a .control ... .endc pair, a .if ... .endif pair, a .suckt ... .ends pair */ static void inp_check_syntax(struct card *deck) { struct card *card; int check_control = 0, check_subs = 0, check_if = 0; /* will lead to crash in inp.c, fcn inp_spsource */ if (ciprefix(".param", deck->line) || ciprefix(".meas", deck->line)) { fprintf(cp_err, "\nError: title line is missing!\n\n"); controlled_exit(EXIT_BAD); } for (card = deck; card; card = card->nextcard) { char *cut_line = card->line; if (*cut_line == '*') continue; // check for .control ... .endc if (ciprefix(".control", cut_line)) { if (check_control > 0) { fprintf(cp_err, "\nError: Nesting of .control statements is not " "allowed!\n\n"); controlled_exit(EXIT_BAD); } check_control++; continue; } else if (ciprefix(".endc", cut_line)) { check_control--; continue; } // check for .subckt ... .ends else if (ciprefix(".subckt", cut_line)) { // nesting may be critical if params are involved if (check_subs > 0 && strchr(cut_line, '=')) fprintf(cp_err, "\nWarning: Nesting of subcircuits with parameters " "is only marginally supported!\n\n"); check_subs++; continue; } else if (ciprefix(".ends", cut_line)) { check_subs--; continue; } // check for .if ... .endif if (ciprefix(".if", cut_line)) { check_if++; has_if = TRUE; continue; } else if (ciprefix(".endif", cut_line)) { check_if--; continue; } } if (check_control > 0) { fprintf(cp_err, "\nWarning: Missing .endc statement!\n"); fprintf(cp_err, " This may cause subsequent errors.\n\n"); } if (check_control < 0) { fprintf(cp_err, "\nWarning: Missing .control statement!\n"); fprintf(cp_err, " This may cause subsequent errors.\n\n"); } if (check_subs != 0) { fprintf(cp_err, "\nError: Mismatch of .subckt ... .ends statements!\n"); fprintf(cp_err, " This will cause subsequent errors.\n\n"); controlled_exit(EXIT_BAD); } if (check_if != 0) { fprintf(cp_err, "\nError: Mismatch of .if ... .endif statements!\n"); fprintf(cp_err, " This may cause subsequent errors.\n\n"); } } /* remove the mfg=mfgname entry from the .model cards */ static void rem_mfg_from_models(struct card *deck) { struct card *card; for (card = deck; card; card = card->nextcard) { char *curr_line, *end, *start; curr_line = start = card->line; /* remove mfg=name */ if (ciprefix(".model", curr_line)) { start = strstr(curr_line, "mfg="); if (start) { end = nexttok(start); if (*end == '\0') *start = '\0'; else while (start < end) { *start = ' '; start++; } } } } } /* model type as input, element identifier as output */ static char inp_get_elem_ident(char *type) { if (cieq(type, "r")) return 'r'; else if (cieq(type, "c")) return 'c'; else if (cieq(type, "l")) return 'l'; else if (cieq(type, "nmos")) return 'm'; else if (cieq(type, "pmos")) return 'm'; else if (cieq(type, "numos")) return 'm'; else if (cieq(type, "d")) return 'd'; else if (cieq(type, "numd")) return 'd'; else if (cieq(type, "numd2")) return 'd'; else if (cieq(type, "npn")) return 'q'; else if (cieq(type, "pnp")) return 'q'; else if (cieq(type, "nbjt")) return 'q'; else if (cieq(type, "nbjt2")) return 'q'; else if (cieq(type, "njf")) return 'j'; else if (cieq(type, "pjf")) return 'j'; else if (cieq(type, "nmf")) return 'z'; else if (cieq(type, "pmf")) return 'z'; else if (cieq(type, "nhfet")) return 'z'; else if (cieq(type, "phfet")) return 'z'; else if (cieq(type, "sw")) return 's'; else if (cieq(type, "csw")) return 'w'; else if (cieq(type, "txl")) return 'y'; else if (cieq(type, "cpl")) return 'p'; else if (cieq(type, "ltra")) return 'o'; else if (cieq(type, "urc")) return 'u'; else if (ciprefix("vdmos", type)) return 'm'; if (cieq(type, "res")) return 'r'; /* xspice code models do not have unique type names */ else return 'a'; } static struct card_assoc *find_subckt_1( struct nscope *scope, const char *name) { struct card_assoc *p = scope->subckts; for (; p; p = p->next) if (eq(name, p->name)) break; return p; } static struct card_assoc *find_subckt(struct nscope *scope, const char *name) { for (; scope; scope = scope->next) { struct card_assoc *p = find_subckt_1(scope, name); if (p) return p; } return NULL; } static void add_subckt(struct nscope *scope, struct card *subckt_line) { char *n = skip_ws(skip_non_ws(subckt_line->line)); char *name = copy_substring(n, skip_non_ws(n)); if (find_subckt_1(scope, name)) { fprintf(stderr, "Warning: redefinition of .subckt %s, ignored\n", name); /* rename the redefined subcircuit */ *n = '_'; } struct card_assoc *entry = TMALLOC(struct card_assoc, 1); entry->name = name; entry->line = subckt_line; entry->next = scope->subckts; scope->subckts = entry; } /* linked list of models, includes use info */ struct modellist { struct card *model; char *modelname; bool used; char elemb; struct modellist *next; }; static struct modellist *inp_find_model_1(struct nscope *scope, const char *name) { struct modellist *p = scope->models; for (; p; p = p->next) if (model_name_match(name, p->modelname)) break; return p; } static struct modellist *inp_find_model(struct nscope *scope, const char *name) { for (; scope; scope = scope->next) { struct modellist *p = inp_find_model_1(scope, name); if (p) return p; } return NULL; } /* scan through deck and add level information to all struct card * depending on nested subcircuits */ static struct nscope *inp_add_levels(struct card *deck) { struct card *card; int skip_control = 0; struct nscope *root = TMALLOC(struct nscope, 1); root->next = NULL; root->subckts = NULL; root->models = NULL; struct nscope *lvl = root; for (card = deck; card; card = card->nextcard) { char *curr_line = card->line; /* exclude any command inside .control ... .endc */ if (ciprefix(".control", curr_line)) { skip_control++; continue; } else if (ciprefix(".endc", curr_line)) { skip_control--; continue; } else if (skip_control > 0) { continue; } if (*curr_line == '.') { if (ciprefix(".subckt", curr_line)) { add_subckt(lvl, card); struct nscope *scope = TMALLOC(struct nscope, 1); // lvl->name = ..., or just point to the deck scope->next = lvl; scope->subckts = NULL; scope->models = NULL; lvl = card->level = scope; } else if (ciprefix(".ends", curr_line)) { if (lvl == root) { fprintf(stderr, ".subckt/.ends not balanced\n"); controlled_exit(1); } card->level = lvl; lvl = lvl->next; } else { card->level = lvl; } } else { card->level = lvl; } } if (lvl != root) fprintf(stderr, "nesting error\n"); return root; } /* remove the level and subckts entries */ static void inp_rem_levels(struct nscope *root) { struct card_assoc *p = root->subckts; while (p) { inp_rem_levels(p->line->level); tfree(p->name); struct card_assoc *pn = p->next; tfree(p); p = pn; } tfree(root); } static void rem_unused_xxx(struct nscope *level) { struct modellist *m = level->models; while (m) { struct modellist *next_m = m->next; if (!m->used) m->model->line[0] = '*'; tfree(m->modelname); tfree(m); m = next_m; } level->models = NULL; struct card_assoc *p = level->subckts; for (; p; p = p->next) rem_unused_xxx(p->line->level); } static void mark_all_binned(struct nscope *scope, char *name) { struct modellist *p = scope->models; for (; p; p = p->next) if (model_name_match(name, p->modelname)) p->used = TRUE; } static void inp_rem_unused_models(struct nscope *root, struct card *deck) { struct card *card; int skip_control = 0; /* create a list of .model */ for (card = deck; card; card = card->nextcard) { char *curr_line = card->line; /* exclude any command inside .control ... .endc */ if (ciprefix(".control", curr_line)) { skip_control++; continue; } else if (ciprefix(".endc", curr_line)) { skip_control--; continue; } else if (skip_control > 0) { continue; } if (*curr_line == '*') continue; if (ciprefix(".model", curr_line)) { struct modellist *modl_new; modl_new = TMALLOC(struct modellist, 1); char *model_type = get_model_type(curr_line); modl_new->elemb = inp_get_elem_ident(model_type); modl_new->modelname = get_subckt_model_name(curr_line); modl_new->model = card; modl_new->used = FALSE; modl_new->next = card->level->models; card->level->models = modl_new; tfree(model_type); } } /* scan through all element lines that require or may need a model */ for (card = deck; card; card = card->nextcard) { char *curr_line = card->line; /* exclude any command inside .control ... .endc */ if (ciprefix(".control", curr_line)) { skip_control++; continue; } else if (ciprefix(".endc", curr_line)) { skip_control--; continue; } else if (skip_control > 0) { continue; } switch (*curr_line) { case '*': case '.': case 'v': case 'i': case 'b': case 'x': case 'e': case 'h': case 'g': case 'f': case 'k': case 't': continue; break; default: break; } /* check if correct model name */ int num_terminals = get_number_terminals(curr_line); /* num_terminals may be 0 for a elements */ if ((num_terminals != 0) || (*curr_line == 'a')) { char *elem_model_name; if (*curr_line == 'a') elem_model_name = get_adevice_model_name(curr_line); else elem_model_name = get_model_name(curr_line, num_terminals); /* ignore certain cases, for example * C5 node1 node2 42.0 */ if (is_a_modelname(elem_model_name)) { struct modellist *m = inp_find_model(card->level, elem_model_name); if (m) { if (*curr_line != m->elemb) fprintf(stderr, "warning, model type mismatch in line\n " "%s\n", curr_line); mark_all_binned(m->model->level, elem_model_name); } else { fprintf(stderr, "warning, can't find model %s\n", elem_model_name); } } tfree(elem_model_name); } } // disable unused .model lines, and free the models assoc lists rem_unused_xxx(root); } tmpk8ny_4pz/src/frontend/runcoms2.h0000644000175000017500000000035113546075722017506 0ustar carstencarsten/************* * Header file for runcoms2.c * 1999 E. Rouat ************/ #ifndef ngspice_RUNCOMS2_H #define ngspice_RUNCOMS2_H void com_resume(wordlist *wl); void com_rset(wordlist *wl); void com_remcirc(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/parse.c0000644000175000017500000005003113546075722017043 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * A simple operator-precedence parser for algebraic expressions. * This also handles relational and logical expressions. */ #include "ngspice/ngspice.h" #include "ngspice/bool.h" #include "ngspice/fteparse.h" #include "ngspice/fteext.h" #include "ngspice/sim.h" #include "evaluate.h" #include "parse.h" #include "parse-bison.h" #include "parse-bison-y.h" static bool checkvalid(struct pnode *pn); #ifdef OLD_BISON extern int PPparse(char **, struct pnode **); #endif void db_print_pnode_tree(struct pnode *p, char *print); struct pnode * ft_getpnames_from_string(const char *sz, bool check) { struct pnode *pn; /* The first argument to PPparse is not const char **, but it does not * appear to modify the string that is being parsed */ if (PPparse((char **) &sz, &pn) != 0) { return (struct pnode *) NULL; } /* If validation is requested, do it and return NULL on failure. The * structure must also be freed if the check fails since it is not * being returned. */ if (check && !checkvalid(pn)) { free_pnode(pn); return (struct pnode *) NULL; } return pn; } /* end of function ft_getpnames_from_string */ struct pnode * ft_getpnames(const wordlist *wl, bool check) { /* Validate input */ if (!wl) { (void) fprintf(cp_err, "Warning: NULL arithmetic expression\n"); return (struct pnode *) NULL; } /* Convert the list to a string then parse the string */ const char * const sz = wl_flatten(wl); struct pnode * const pn = ft_getpnames_from_string(sz, check); txfree((void *) sz); return pn; /* Return the parsed result */ } /* end of function ft_getpnames */ /* See if there are any variables around which have length 0 and are * not named 'list'. There should really be another flag for this... */ static bool checkvalid(struct pnode *pn) { while (pn) { if (pn->pn_value) { if ((pn->pn_value->v_length == 0) && !eq(pn->pn_value->v_name, "list")) { if (eq(pn->pn_value->v_name, "all")) fprintf(cp_err, "Error: %s: no matching vectors.\n", pn->pn_value->v_name); else fprintf(cp_err, "Error(parse.c--checkvalid): %s: no such vector.\n", pn->pn_value->v_name); return (FALSE); } } else if (pn->pn_func || (pn->pn_op && (pn->pn_op->op_arity == 1))) { if (!checkvalid(pn->pn_left)) return (FALSE); } else if (pn->pn_op && (pn->pn_op->op_arity == 2)) { if (!checkvalid(pn->pn_left)) return (FALSE); if (!checkvalid(pn->pn_right)) return (FALSE); } else { fprintf(cp_err, "checkvalid: Internal Error: bad node\n"); } pn = pn->pn_next; } return (TRUE); } /* Some auxiliary functions for building the parse tree. */ static struct op ops[] = { { PT_OP_PLUS, "+", 2, {(void(*)(void)) op_plus} }, { PT_OP_MINUS, "-", 2, {(void(*)(void)) op_minus} }, { PT_OP_TIMES, "*", 2, {(void(*)(void)) op_times} }, { PT_OP_MOD, "%", 2, {(void(*)(void)) op_mod} }, { PT_OP_DIVIDE, "/", 2, {(void(*)(void)) op_divide} }, { PT_OP_COMMA, ",", 2, {(void(*)(void)) op_comma} }, { PT_OP_POWER, "^", 2, {(void(*)(void)) op_power} }, { PT_OP_EQ, "=", 2, {(void(*)(void)) op_eq} }, { PT_OP_GT, ">", 2, {(void(*)(void)) op_gt} }, { PT_OP_LT, "<", 2, {(void(*)(void)) op_lt} }, { PT_OP_GE, ">=", 2, {(void(*)(void)) op_ge} }, { PT_OP_LE, "<=", 2, {(void(*)(void)) op_le} }, { PT_OP_NE, "<>", 2, {(void(*)(void)) op_ne} }, { PT_OP_AND, "&", 2, {(void(*)(void)) op_and} }, { PT_OP_OR, "|", 2, {(void(*)(void)) op_or} }, { PT_OP_INDX, "[", 2, {(void(*)(void)) op_ind} }, { PT_OP_RANGE, "[[", 2, {(void(*)(void)) op_range} }, { PT_OP_TERNARY, "?:", 2, {NULL} }, { 0, NULL, 0, {NULL} } }; static struct op uops[] = { { PT_OP_UMINUS, "-", 1, {(void(*)(void)) op_uminus} }, { PT_OP_NOT, "~", 1, {(void(*)(void)) op_not} }, { 0, NULL, 0, {NULL} } }; /* We have 'v' declared as a function, because if we don't then the defines * we do for vm(), etc won't work. This is caught in evaluate(). Bad kludge. */ typedef void* cx_function_t(void*, short int, int, int*, short int*); struct func ft_funcs[] = { { "mag", cx_mag }, { "magnitude", cx_mag }, { "cph", cx_cph }, /* SJdV */ { "cphase", cx_cph }, /* SJdV Continious phase*/ { "unwrap", cx_unwrap }, { "ph", cx_ph }, { "phase", cx_ph }, { "j", cx_j }, { "real", cx_real }, { "re", cx_real }, { "imag", cx_imag }, { "im", cx_imag }, { "db", cx_db }, { "log", cx_log }, { "log10", cx_log10 }, { "ln", cx_log }, { "exp", cx_exp }, { "abs", cx_mag }, { "sqrt", cx_sqrt }, { "sin", cx_sin }, { "cos", cx_cos }, { "tan", cx_tan }, { "sinh", cx_sinh }, { "cosh", cx_cosh }, { "tanh", cx_tanh }, { "atan", cx_atan }, { "sortorder", cx_sortorder }, { "norm", cx_norm }, { "rnd", cx_rnd }, { "sunif", cx_sunif }, { "poisson", cx_poisson }, { "exponential", cx_exponential }, { "sgauss", cx_sgauss }, { "pos", cx_pos }, { "nint", cx_nint }, { "floor", cx_floor }, { "ceil", cx_ceil }, { "mean", cx_mean }, { "stddev", cx_stddev }, { "avg", cx_avg }, /* A.Roldan 03/06/05 incremental average new function */ { "group_delay", (cx_function_t*) cx_group_delay }, /* A.Roldan 10/06/05 group delay new function */ { "vector", cx_vector }, { "unitvec", cx_unitvec }, { "length", cx_length }, { "vecmin", cx_min }, { "minimum", cx_min }, { "vecmax", cx_max }, { "maximum", cx_max }, { "vecd", cx_d }, { "interpolate", (cx_function_t*) cx_interpolate }, { "deriv", (cx_function_t*) cx_deriv }, { "fft", (cx_function_t*) cx_fft }, { "ifft", (cx_function_t*) cx_ifft }, { "v", NULL }, { NULL, NULL } }; struct func func_uminus = { "minus", cx_uminus }; struct func func_not = { "not", cx_not }; /* Binary operator node. */ struct pnode * PP_mkbnode(int opnum, struct pnode *arg1, struct pnode *arg2) { struct op *o; struct pnode *p; for (o = &ops[0]; o->op_name; o++) if (o->op_num == opnum) break; if (!o->op_name) fprintf(cp_err, "PP_mkbnode: Internal Error: no such op num %d\n", opnum); p = alloc_pnode(); p->pn_op = o; p->pn_left = arg1; if (p->pn_left) p->pn_left->pn_use++; p->pn_right = arg2; if (p->pn_right) p->pn_right->pn_use++; return (p); } /* Unary operator node. */ struct pnode * PP_mkunode(int op, struct pnode *arg) { struct pnode *p; struct op *o; p = alloc_pnode(); for (o = uops; o->op_name; o++) if (o->op_num == op) break; if (!o->op_name) fprintf(cp_err, "PP_mkunode: Internal Error: no such op num %d\n", op); p->pn_op = o; p->pn_left = arg; if (p->pn_left) p->pn_left->pn_use++; return (p); } /* Function node. We have to worry about a lot of things here. Something * like f(a) could be three things -- a call to a standard function, which * is easiest to deal with, a variable name, in which case we do the * kludge with 0-length lists, or it could be a user-defined function, * in which case we have to figure out which one it is, substitute for * the arguments, and then return a copy of the expression that it was * defined to be. */ struct pnode * PP_mkfnode(const char *func, struct pnode *arg) { struct func *f; struct pnode *p, *q; struct dvec *d; char buf[BSIZE_SP]; (void) strcpy(buf, func); strtolower(buf); /* Make sure the case is ok. */ for (f = &ft_funcs[0]; f->fu_name; f++) if (eq(f->fu_name, buf)) break; if (f->fu_name == NULL) { /* Give the user-defined functions a try. */ q = ft_substdef(func, arg); if (q) return (q); } if ((f->fu_name == NULL) && arg->pn_value) { /* Kludge -- maybe it is really a variable name. */ (void) sprintf(buf, "%s(%s)", func, arg->pn_value->v_name); free_pnode(arg); d = vec_get(buf); if (d == NULL) { /* Well, too bad. */ fprintf(cp_err, "Error: no such function as %s.\n", func); return (NULL); } /* (void) strcpy(buf, d->v_name); XXX */ return (PP_mksnode(buf)); } else if (f->fu_name == NULL) { fprintf(cp_err, "Error: no function as %s with that arity.\n", func); free_pnode(arg); return (NULL); } if (!f->fu_func && arg->pn_op && arg->pn_op->op_num == PT_OP_COMMA) { p = PP_mkbnode(PT_OP_MINUS, PP_mkfnode(func, arg->pn_left), PP_mkfnode(func, arg->pn_right)); free_pnode(arg); return p; } p = alloc_pnode(); p->pn_func = f; p->pn_left = arg; if (p->pn_left) p->pn_left->pn_use++; return (p); } /* Number node. */ struct pnode * PP_mknnode(double number) { struct pnode *p; struct dvec *v; /* We don't use printnum because it screws up PP_mkfnode above. We have * to be careful to deal properly with node numbers that are quite * large... */ v = dvec_alloc(number < MAXPOSINT ? tprintf("%d", (int) number) : tprintf("%G", number), SV_NOTYPE, VF_REAL, 1, NULL); v->v_realdata[0] = number; vec_new(v); p = alloc_pnode(); p->pn_value = v; return (p); } /* String node. */ struct pnode * PP_mksnode(const char *string) { struct dvec *v, *nv, *vs, *newv = NULL, *end = NULL; struct pnode *p; p = alloc_pnode(); v = vec_get(string); if (v == NULL) { nv = dvec_alloc(copy(string), SV_NOTYPE, 0, 0, NULL); p->pn_value = nv; return (p); } /* It's not obvious that we should be doing this, but... */ for (vs = v; vs; vs = vs->v_link2) { nv = vec_copy(vs); vec_new(nv); if (end) end->v_link2 = nv; else newv = end = nv; end = nv; } p->pn_value = newv; /* va: tfree v in case of @xxx[par], because vec_get created a new vec and nobody will free it elsewhere */ /*if (v && v->v_name && *v->v_name == '@' && isreal(v) && v->v_realdata) { vec_free(v); } */ /* The two lines above have been commented out to prevent deletion of @xxx[par] after execution of only a single command like plot @xxx[par] or write. We need to monitor if this will lead to excessive memory usage. h_vogt 090221 */ return (p); } struct pnode * alloc_pnode(void) { struct pnode *pn = TMALLOC(struct pnode, 1); pn->pn_use = 0; pn->pn_name = NULL; // fixme, thats actually a union ... pn->pn_value = NULL; pn->pn_func = NULL; pn->pn_op = NULL; pn->pn_left = NULL; pn->pn_right = NULL; pn->pn_next = NULL; return pn; } /* Don't call this directly, always use the free_pnode() macro. The linked pnodes do not necessarily form a perfect tree as some nodes get reused. Hence, in this recursive walk trough the 'tree' we only free node that have their pn_use value at zero. Nodes that have pn_use values above zero have the link severed and their pn_use value decremented. In addition, we don't walk past nodes with pn_use values avoid zero, just in case we have a circular reference (this probable does not happen in practice, but it does no harm playing safe) */ void free_pnode_x(struct pnode *t) { if (!t) return; /* don't walk past nodes used elsewhere. We decrement the pn_use value here, but the link gets severed by the action of the free_pnode() macro */ if (t->pn_use > 1) { t->pn_use--; } else { /* pn_use is now 1, so its safe to free the pnode */ free_pnode(t->pn_left); free_pnode(t->pn_right); free_pnode(t->pn_next); tfree(t->pn_name); /* va: it is a copy() of original string, can be free'd */ if (t->pn_value && !(t->pn_value->v_flags & VF_PERMANENT)) vec_free(t->pn_value); /* patch by Stefan Jones */ tfree(t); } } static void db_print_func(FILE *fdst, struct func *f) { if (!f) { fprintf(fdst, "nil"); return; } fprintf(fdst, "(func :fu_name %s :fu_func %p)", f->fu_name, f->fu_func); } static void db_print_op(FILE *fdst, struct op *op) { if (!op) { fprintf(fdst, "nil"); return; } fprintf(fdst, "(op :op_num %d :op_name %s :op_arity %d :op_func %p)", op->op_num, op->op_name, op->op_arity, op->op_func.anonymous); } static void db_print_dvec(FILE *fdst, struct dvec *d) { if (!d) { fprintf(fdst, "nil"); return; } fprintf(fdst, "(dvec :v_name %s :v_type %d :v_flags %d :v_length %d ...)", d->v_name, d->v_type, d->v_flags, d->v_length); } static void db_print_pnode(FILE *fdst, struct pnode *p) { if (!p) { fprintf(fdst, "nil\n"); return; } if (!p->pn_name && p->pn_value && !p->pn_func && !p->pn_op && !p->pn_left && !p->pn_right && !p->pn_next) { fprintf(fdst, "(pnode-value :pn_use %d", p->pn_use); fprintf(fdst, " :pn_value "); db_print_dvec(fdst, p->pn_value); fprintf(fdst, ")\n"); return; } if (!p->pn_name && !p->pn_value && p->pn_func && !p->pn_op && !p->pn_right && !p->pn_next) { fprintf(fdst, "(pnode-func :pn_use %d", p->pn_use); fprintf(fdst, "\n :pn_func "); db_print_func(fdst, p->pn_func); fprintf(fdst, "\n :pn_left "); db_print_pnode(fdst, p->pn_left); fprintf(fdst, ")\n"); return; } if (!p->pn_name && !p->pn_value && !p->pn_func && p->pn_op && !p->pn_next) { fprintf(fdst, "(pnode-op :pn_use %d", p->pn_use); fprintf(fdst, "\n :pn_op "); db_print_op(fdst, p->pn_op); fprintf(fdst, "\n :pn_left "); db_print_pnode(fdst, p->pn_left); fprintf(fdst, "\n :pn_right "); db_print_pnode(fdst, p->pn_right); fprintf(fdst, ")\n"); return; } fprintf(fdst, "(pnode :pn_name \"%s\" pn_use %d", p->pn_name, p->pn_use); fprintf(fdst, "\n :pn_value "); db_print_dvec(fdst, p->pn_value); fprintf(fdst, "\n :pn_func "); db_print_func(fdst, p->pn_func); fprintf(fdst, "\n :pn_op "); db_print_op(fdst, p->pn_op); fprintf(fdst, "\n :pn_left "); db_print_pnode(fdst, p->pn_left); fprintf(fdst, "\n :pn_right "); db_print_pnode(fdst, p->pn_right); fprintf(fdst, "\n :pn_next "); db_print_pnode(fdst, p->pn_next); fprintf(fdst, "\n)\n"); } void db_print_pnode_tree(struct pnode *p, char *print) { #if 1 NG_IGNORE(print); db_print_pnode(stdout, p); #else char *buf; size_t buf_size; FILE *db_stream = open_memstream(&buf, &buf_size); db_print_pnode(db_stream, p); fclose(db_stream); if (print) printf("%s:%d: %s {%s}\n%s\n", __FILE__, __LINE__, __func__, print, buf); tfree(buf); #endif } int PPlex(YYSTYPE *lvalp, struct PPltype *llocp, char **line) { static char *specials = " \t%()-^+*,/|&<>~="; char *sbuf = *line; int token; while ((*sbuf == ' ') || (*sbuf == '\t')) sbuf++; llocp->start = sbuf; #define lexer_return(token_, length) \ do { token = token_; sbuf += length; goto done; } while(0) if ((sbuf[0] == 'g') && (sbuf[1] == 't') && strchr(specials, sbuf[2])) { lexer_return('>', 2); } else if ((sbuf[0] == 'l') && (sbuf[1] == 't') && strchr(specials, sbuf[2])) { lexer_return('<', 2); } else if ((sbuf[0] == 'g') && (sbuf[1] == 'e') && strchr(specials, sbuf[2])) { lexer_return(TOK_GE, 2); } else if ((sbuf[0] == 'l') && (sbuf[1] == 'e') && strchr(specials, sbuf[2])) { lexer_return(TOK_LE, 2); } else if ((sbuf[0] == 'n') && (sbuf[1] == 'e') && strchr(specials, sbuf[2])) { lexer_return(TOK_NE, 2); } else if ((sbuf[0] == 'e') && (sbuf[1] == 'q') && strchr(specials, sbuf[2])) { lexer_return('=', 2); } else if ((sbuf[0] == 'o') && (sbuf[1] == 'r') && strchr(specials, sbuf[2])) { lexer_return('|', 2); } else if ((sbuf[0] == 'a') && (sbuf[1] == 'n') && (sbuf[2] == 'd') && strchr(specials, sbuf[3])) { lexer_return('&', 3); } else if ((sbuf[0] == 'n') && (sbuf[1] == 'o') && (sbuf[2] == 't') && strchr(specials, sbuf[3])) { lexer_return('~', 3); } switch (*sbuf) { case '[': case ']': lexer_return(*sbuf, 1); case '>': case '<': { /* Workaround, The Frontend makes "<>" into "< >" */ int j = 1; while (isspace_c(sbuf[j])) j++; if (((sbuf[j] == '<') || (sbuf[j] == '>')) && (sbuf[0] != sbuf[j])) { /* Allow both <> and >< for NE. */ lexer_return(TOK_NE, j+1); } else if (sbuf[1] == '=') { lexer_return((sbuf[0] == '>') ? TOK_GE : TOK_LE, 2); } else { lexer_return(*sbuf, 1); } } case '?': case ':': case ',': case '+': case '-': case '*': case '%': case '/': case '^': case '(': case ')': case '=': case '&': case '|': case '~': lexer_return(*sbuf, 1); case '\0': lexer_return(*sbuf, 0); case '"': { char *start = ++sbuf; while (*sbuf && (*sbuf != '"')) sbuf++; lvalp->str = copy_substring(start, sbuf); if (*sbuf) sbuf++; lexer_return(TOK_STR, 0); } default: { char *s = sbuf; double *td = ft_numparse(&s, FALSE); if ((!s || *s != ':') && td) { sbuf = s; lvalp->num = *td; lexer_return(TOK_NUM, 0); } else { int atsign = 0; char *start = sbuf; /* It is bad how we have to recognise '[' -- sometimes * it is part of a word, when it defines a parameter * name, and otherwise it isn't. * * what is valid here ? * foo dc1.foo dc1.@m1[vth] * this too ? * vthing#branch * should we convert the pseudo identifier ? * i(v5) --> v5#branch */ for (; *sbuf && !strchr(specials, *sbuf); sbuf++) if (*sbuf == '@') atsign = 1; else if (!atsign && *sbuf == '[') break; else if (*sbuf == ']') { if (atsign) sbuf++; break; } lvalp->str = copy_substring(start, sbuf); lexer_return(TOK_STR, 0); } } } done: if (ft_parsedb) { if (token == TOK_STR) fprintf(stderr, "lexer: TOK_STR, \"%s\"\n", lvalp->str); else if (token == TOK_NUM) fprintf(stderr, "lexer: TOK_NUM, %G\n", lvalp->num); else fprintf(stderr, "lexer: token %d\n", token); } *line = sbuf; llocp->stop = sbuf; return (token); } tmpk8ny_4pz/src/frontend/com_cdump.h0000644000175000017500000000033113546075722017702 0ustar carstencarsten#ifndef ngspice_COM_CDUMP_H #define ngspice_COM_CDUMP_H void com_cdump(wordlist *wl); void com_mdump(wordlist *wl); void com_rdump(wordlist *wl); #define TABINDENT 2 /* CDHW */ /* The orginal value was 8 */ #endif tmpk8ny_4pz/src/frontend/com_chdir.c0000644000175000017500000000304013546075722017656 0ustar carstencarsten/************* * com_chdir.c ************/ #include "ngspice/ngspice.h" #include "ngspice/wordlist.h" #ifdef HAVE_PWD_H #include #endif #include "com_chdir.h" #include "quote.h" #include "ngspice/cpextern.h" void com_chdir(wordlist *wl) { char *s; #ifdef HAVE_PWD_H struct passwd *pw; #endif #ifdef HAVE_GETCWD char localbuf[257]; #endif int copied = 0; s = NULL; if (wl == NULL) { s = getenv("HOME"); if (!s) s = getenv("USERPROFILE"); #ifdef HAVE_PWD_H if (s == NULL) { pw = getpwuid(getuid()); if (pw == NULL) { fprintf(cp_err, "Can't get your password entry\n"); return; } s = pw->pw_dir; } #endif } else { s = cp_unquote(wl->wl_word); copied = 1; } if (s != NULL) if (chdir(s) == -1) perror(s); if (copied) tfree(s); #ifdef HAVE_GETCWD s = getcwd(localbuf, sizeof(localbuf)); if (s) printf("Current directory: %s\n", s); else fprintf(cp_err, "Can't get current working directory.\n"); #endif } /* just print the current working directory */ void com_getcwd(wordlist *wl) { NG_IGNORE(wl); #ifdef HAVE_GETCWD char *s; char localbuf[257]; s = getcwd(localbuf, sizeof(localbuf)); if (s) printf("Current directory: %s\n", s); else fprintf(cp_err, "Can't get current working directory.\n"); #else fprintf(cp_err, "Error, function getcwd not available\n"); #endif } tmpk8ny_4pz/src/frontend/com_set.c0000644000175000017500000000253113546075722017364 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/bool.h" #include "ngspice/wordlist.h" #include "variable.h" #include "com_set.h" /* The set command. Syntax is set [opt ...] [opt = val ...]. Val may * be a string, an int, a float, or a list of the form (elt1 elt2 * ...). */ void com_set(wordlist *wl) { struct variable *vars, *oldvar; if (wl == NULL) { cp_vprint(); return; } vars = cp_setparse(wl); /* This is sort of a hassle... */ while (vars) { void *s; switch (vars->va_type) { case CP_BOOL: s = &vars->va_bool; break; case CP_NUM: s = &vars->va_num; break; case CP_REAL: s = &vars->va_real; break; case CP_STRING: s = vars->va_string; break; case CP_LIST: s = vars->va_vlist; break; default: s = NULL; } cp_vset(vars->va_name, vars->va_type, s); oldvar = vars; vars = vars->va_next; /* va: avoid memory leak: free oldvar carefully */ tfree(oldvar->va_name); if (oldvar->va_type == CP_STRING) tfree(oldvar->va_string); /* copied in cp_vset */ /* don't free oldvar->va_list! This structure is used furthermore! */ tfree(oldvar); } } tmpk8ny_4pz/src/frontend/inp.h0000644000175000017500000000044013546075722016523 0ustar carstencarsten/************* * Header file for inp.c * 1999 E. Rouat ************/ #ifndef ngspice_INP_H #define ngspice_INP_H void com_listing(wordlist *wl); void com_edit(wordlist *wl); void com_source(wordlist *wl); void com_mc_source(wordlist *wl); void com_circbyline(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/mw_coms.h0000644000175000017500000000025613546075722017406 0ustar carstencarsten/************* * Header file for mw_coms.c * 1999 E. Rouat ************/ #ifndef ngspice_MW_COMS_H #define ngspice_MW_COMS_H void com_removecirc(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/com_dump.c0000644000175000017500000000070613546075722017540 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/bool.h" #include "ngspice/wordlist.h" #include "ngspice/inpdefs.h" #include "circuits.h" #include "com_dump.h" #include "ngspice/cpextern.h" #include "ngspice/fteext.h" #include "spiceif.h" void com_dump(wordlist *wl) { NG_IGNORE(wl); if (!ft_curckt || !ft_curckt->ci_ckt) { fprintf(cp_err, "Error: no circuit loaded.\n"); return; } if_dump(ft_curckt->ci_ckt, cp_out); } tmpk8ny_4pz/src/frontend/com_setscale.h0000644000175000017500000000021013546075722020371 0ustar carstencarsten#ifndef ngspice_COM_SETSCALE_H #define ngspice_COM_SETSCALE_H #include "ngspice/wordlist.h" void com_setscale(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/misccoms.h0000644000175000017500000000034713546075722017560 0ustar carstencarsten/************* * Header file for misccoms.c * 1999 E. Rouat ************/ #ifndef ngspice_MISCCOMS_H #define ngspice_MISCCOMS_H void com_quit(wordlist *wl); void com_bug(wordlist *wl); void com_version(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/miscvars.h0000644000175000017500000000021713546075722017566 0ustar carstencarsten/************* * Header file for miscvars.c * 1999 E. Rouat ************/ #ifndef ngspice_MISCVARS_H #define ngspice_MISCVARS_H #endif tmpk8ny_4pz/src/frontend/plotting/0000755000175000017500000000000013546075722017426 5ustar carstencarstentmpk8ny_4pz/src/frontend/plotting/agraf.c0000644000175000017500000002415113546075722020655 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Line-printer (ASCII) plots. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/fteparse.h" #include "agraf.h" #define FUDGE 7 #define MARGIN_BASE 11 #define LCHAR '.' #define MCHAR 'X' #define PCHARS "+*=$%!0123456789" /* We should really deal with the xlog and delta arguments. This routine is * full of magic numbers that make the formatting correct. */ void ft_agraf(double *xlims, double *ylims, struct dvec *xscale, struct plot *plot, struct dvec *vecs, double xdel, double ydel, bool xlog, bool ylog, bool nointerp) { int height; bool nobreakp, novalue; int maxx, maxy, omaxy; /* The size of the plotting area. */ bool /* xlogscale = FALSE, */ ylogscale = FALSE; char *field, buf[BSIZE_SP]; char *line1, *line2, c, cb; double xrange[2], yrange[2], x1, x2, yy1, y2, x, y; int mag, hmt, lmt, dst, spacing, nsp, ypt, upper, lower, curline; double tenpowmag, diff; double *values = NULL; struct dvec *v; int margin = MARGIN_BASE; int omargin; int i, j, k; int shift; NG_IGNORE(xdel); NG_IGNORE(ydel); NG_IGNORE(ylog); /* ANSI C does not specify how many digits are in an exponent for %c * We assumed it was 2. If it's more, shift starting position over. */ sprintf(buf, "%1.1e", 0.0); /* expect 0.0e+00 */ shift = (int) strlen(buf) - 7; margin += shift; /* Make sure the margin is correct */ omargin = margin; novalue = cp_getvar("noasciiplotvalue", CP_BOOL, NULL, 0); if (!novalue && !vec_eq(xscale, vecs)) margin *= 2; else novalue = TRUE; if ((xscale->v_gridtype == GRID_YLOG) || (xscale->v_gridtype == GRID_LOGLOG)) ylogscale = TRUE; if (!cp_getvar("width", CP_NUM, &maxy, 0)) maxy = DEF_WIDTH; if (!cp_getvar("height", CP_NUM, &height, 0)) height = DEF_HEIGHT; if (ft_nopage) nobreakp = TRUE; else nobreakp = cp_getvar("nobreak", CP_BOOL, NULL, 0); maxy -= (margin + FUDGE); maxx = xscale->v_length; xrange[0] = xlims[0]; xrange[1] = xlims[1]; yrange[0] = ylims[0]; yrange[1] = ylims[1]; if (maxx < 2) { fprintf(cp_err, "Error: asciiplot can't handle scale with length < 2\n"); return; } if (maxx <= 0) { fprintf(cp_err, "Note: no points to plot\n"); return; } for (v = vecs, i = 0; v; v = v->v_link2) v->v_linestyle = (PCHARS[i] ? PCHARS[i++] : '#'); /* Now allocate the field and stuff. */ field = TMALLOC(char, (maxy + 1) * (maxx + 1)); line1 = TMALLOC(char, maxy + margin + FUDGE + 1); line2 = TMALLOC(char, maxy + margin + FUDGE + 1); if (!novalue) values = TMALLOC(double, maxx); /* Clear the field, put the lines in the right places, and create * the headers. */ for (i = 0, j = (maxx + 1) * (maxy + 1); i < j; i++) field[i] = ' '; for (i = 0, j = maxy + margin + FUDGE; i < j; i++) { line1[i] = '-'; line2[i] = ' '; } line1[j] = line2[j] = '\0'; /* The following is similar to the stuff in grid.c */ if ((xrange[0] > xrange[1]) || (yrange[0] > yrange[1])) { fprintf(cp_err, "ft_agraf: Internal Error: bad limits %g, %g, %g, %g\n", xrange[0], xrange[1], yrange[0], yrange[1]); return; } /* gcc doesn't like !double */ if (ylims[1] == 0.0) { mag = (int) floor(mylog10(- ylims[0])); tenpowmag = pow(10.0, (double) mag); } else if (ylims[0] == 0.0) { mag = (int) floor(mylog10(ylims[1])); tenpowmag = pow(10.0, (double) mag); } else { diff = ylims[1] - ylims[0]; mag = (int) floor(mylog10(diff)); tenpowmag = pow(10.0, (double) mag); } lmt = (int) floor(ylims[0] / tenpowmag); yrange[0] = ylims[0] = lmt * tenpowmag; hmt = (int) ceil(ylims[1] / tenpowmag); yrange[1] = ylims[1] = hmt * tenpowmag; dst = hmt - lmt; /* This is a strange case; I don't know why it's here. */ if (dst == 11) { dst = 12; } else if (dst == 1) { dst = 10; mag++; hmt *= 10; lmt *= 10; } else if (dst == 0) { dst = 2; lmt -= 1; hmt += 1; } for (nsp = 4; nsp < 8; nsp++) if (!(dst % nsp)) break; if (nsp == 8) for (nsp = 2; nsp < 4; nsp++) if (!(dst % nsp)) break; spacing = maxy / nsp; /* Reset the max X coordinate to deal with round-off error. */ omaxy = maxy + 1; maxy = spacing * nsp; for (i = 0, j = lmt; j <= hmt; i += spacing, j += dst / nsp) { for (k = 0; k < maxx; k++) field[k * omaxy + i] = LCHAR; line1[i + margin + 2 * shift] = '|'; (void) sprintf(buf, "%.2e", j * pow(10.0, (double) mag)); memcpy(&line2[i + margin - ((j < 0) ? 2 : 1) - shift], buf, strlen(buf)); } line1[i - spacing + margin + 1] = '\0'; for (i = 1; i < omargin - 1 && xscale->v_name[i - 1]; i++) line2[i] = xscale->v_name[i - 1]; if (!novalue) for (i = omargin + 1; i < margin - 2 && (vecs->v_name[i - omargin - 1]); i++) line2[i] = vecs->v_name[i - omargin - 1]; /* Now the buffers are all set up properly. Plot points for each * vector using interpolation. For each point on the x-axis, find the * two bracketing points in xscale, and then interpolate their * y values for each vector. */ upper = lower = 0; for (i = 0; i < maxx; i++) { if (nointerp) x = isreal(xscale) ? xscale->v_realdata[i] : realpart(xscale->v_compdata[i]); else if (xlog && xrange[0] > 0.0 && xrange[1] > 0.0) x = xrange[0] * pow(10.0, mylog10(xrange[1]/xrange[0]) * i / (maxx - 1)); else x = xrange[0] + (xrange[1] - xrange[0]) * i / (maxx - 1); while ((isreal(xscale) ? (xscale->v_realdata[upper] < x) : (realpart(xscale->v_compdata[upper]) < x)) && (upper < xscale->v_length - 1)) upper++; while ((isreal(xscale) ? (xscale->v_realdata[lower] < x) : (realpart(xscale->v_compdata[lower]) < x)) && (lower < xscale->v_length - 1)) lower++; if ((isreal(xscale) ? (xscale->v_realdata[lower] > x) : (realpart(xscale->v_compdata[lower]) > x)) && (lower > 0)) lower--; x1 = (isreal(xscale) ? xscale->v_realdata[lower] : realpart(xscale->v_compdata[lower])); x2 = (isreal(xscale) ? xscale->v_realdata[upper] : realpart(xscale->v_compdata[upper])); if (x1 > x2) { fprintf(cp_err, "Error: X scale (%s) not monotonic\n", xscale->v_name); return; } for (v = vecs; v; v = v->v_link2) { yy1 = (isreal(v) ? v->v_realdata[lower] : realpart(v->v_compdata[lower])); y2 = (isreal(v) ? v->v_realdata[upper] : realpart(v->v_compdata[upper])); if (x1 == x2) y = yy1; else y = yy1 + (y2 - yy1) * (x - x1) / (x2 - x1); if (!novalue && (v == vecs)) values[i] = y; ypt = ft_findpoint(y, yrange, maxy, 0, ylogscale); c = field[omaxy * i + ypt]; if ((c == ' ') || (c == LCHAR)) field[omaxy * i + ypt] = (char) v->v_linestyle; else field[omaxy * i + ypt] = MCHAR; } } out_init(); for (i = 0; i < omaxy + margin; i++) out_send("-"); out_send("\n"); i = (omaxy + margin - (int) strlen(plot->pl_title)) / 2; while (i-- > 0) out_send(" "); (void) strcpy(buf, plot->pl_title); buf[maxy + margin] = '\0'; /* Cut off if too wide */ out_send(buf); out_send("\n"); (void) sprintf(buf, "%s %s", plot->pl_name, plot->pl_date); buf[maxy + margin] = '\0'; i = (omaxy + margin - (int) strlen(buf)) / 2; while (i-- > 0) out_send(" "); out_send(buf); out_send("\n\n"); curline = 7; out_send("Legend: "); i = 0; j = (maxx + margin - 8) / 20; if (j == 0) j = 1; for (v = vecs; v; v = v->v_link2) { out_printf("%c = %-17s", (char) v->v_linestyle, v->v_name); if (!(++i % j) && v->v_link2) { out_send("\n "); curline++; } } out_send("\n"); for (i = 0; i < omaxy + margin; i++) out_send("-"); out_send("\n"); i = 0; out_printf("%s\n%s\n", line2, line1); curline += 2; for (i = 0; i < maxx; i++) { if (nointerp) x = isreal(xscale) ? xscale->v_realdata[i] : realpart(xscale->v_compdata[i]); else if (xlog && xrange[0] > 0.0 && xrange[1] > 0.0) x = xrange[0] * pow(10.0, mylog10(xrange[1]/xrange[0]) * i / (maxx - 1)); else x = xrange[0] + (xrange[1] - xrange[0]) * i / (maxx - 1); if (x < 0.0) out_printf("%.3e ", x); else out_printf(" %.3e ", x); if (!novalue) { if (values[i] < 0.0) out_printf("%.3e ", values[i]); else out_printf(" %.3e ", values[i]); } cb = field[(i + 1) * omaxy]; field[(i + 1) * omaxy] = '\0'; out_send(&field[i * omaxy]); field[(i + 1) * omaxy] = cb; out_send("\n"); if (((curline++ % height) == 0) && (i < maxx - 1) && !nobreakp) { out_printf("%s\n%s\n\014\n%s\n%s\n", line1, line2, line2, line1); curline += 5; } } out_printf("%s\n%s\n", line1, line2); tfree(field); tfree(line1); tfree(line2); if (!novalue) tfree(values); } tmpk8ny_4pz/src/frontend/plotting/x11.c0000644000175000017500000007771313546075722020222 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jeffrey M. Hsu **********/ /* X11 drivers. */ #include "ngspice/ngspice.h" #ifndef X_DISPLAY_MISSING # include # include /* PN */ # include /* PN */ # include "ngspice/graph.h" # include "ngspice/ftedbgra.h" # include "ngspice/ftedev.h" # include "ngspice/fteinput.h" # include "ngspice/cpdefs.h" # include "ngspice/ftedefs.h" # include # include "../com_hardcopy.h" /* Added X11/ prefix to the next includes - ER */ # include # include # include # include # include # include # include # include # include # include # ifdef DEBUG # include /* for _Xdebug */ # endif #include "x11.h" #include "graphdb.h" #include "display.h" #include "graf.h" #define RAD_TO_DEG (180.0 / M_PI) /* X dependent default parameters */ #define DEF_FONT "10x14" #define NUMLINESTYLES 8 #define MW_LINEWIDTH 2 /* MW. I want larger lines */ #define NXPLANES 5 /* note: What is this used for? */ #define BOXSIZE 30 /* initial size of bounding box for zoomin */ #define NUMCOLORS 20 typedef struct x11info { Window window; int isopen; Widget shell, form, view, buttonbox, buttons[2]; XFontStruct *font; GC gc; int lastx, lasty; /* used in X_DrawLine */ int lastlinestyle; /* used in X_DrawLine */ Pixel colors[NUMCOLORS]; } X11devdep; #define DEVDEP(g) (*((X11devdep *) (g)->devdep)) static Display *display; static GC xorgc; static char *xlinestyles[NUMLINESTYLES] = { /* test patterns XXX */ "\001\001\001\001", /* solid */ "\001\002\001\002", /* dots */ "\007\007\007\007", /* longdash */ "\003\003\003\003", /* shortdash */ "\007\002\002\002", /* dots longdash */ "\003\002\001\002", /* dots shortdash */ "\003\003\007\003", /* short/longdash */ }; /* atoms for catching window delet by WM x-button */ static Atom atom_wm_delete_window; static Atom atom_wm_protocols; static Widget toplevel; static Bool noclear = False; static GRAPH *lasthardcopy; /* graph user selected */ static int X11_Open = 0; static int numdispplanes; /* static functions */ static void initlinestyles(void); static void initcolors(GRAPH *graph); static void X_ScreentoData(GRAPH *graph, int x, int y, double *fx, double *fy); static void linear_arc(int x0, int y0, int radius, double theta, double delta_theta); static void slopelocation(GRAPH *graph, int x0, int y0); static void zoomin(GRAPH *graph); //XtEventHandler static void handlekeypressed(Widget w, XtPointer clientdata, XEvent *ev, Boolean *continue_dispatch); static void handlebuttonev(Widget w, XtPointer graph, XEvent *ev, Boolean *continue_dispatch); static void redraw(Widget w, XtPointer client_data, XEvent *ev, Boolean *continue_dispatch); static void resize(Widget w, XtPointer client_data, XEvent *ev, Boolean *continue_dispatch); //XtCallbackProc static void hardcopy(Widget w, XtPointer client_data, XtPointer call_data); static void killwin(Widget w, XtPointer client_data, XtPointer call_data); static int errorhandler(Display *display, XErrorEvent *errorev) { XGetErrorText(display, errorev->error_code, ErrorMessage, 1024); externalerror(ErrorMessage); return 0; } int X11_Init(void) { char buf[512]; char *displayname; XGCValues gcvalues; /* grrr, Xtk forced contortions */ char *argv[2]; int argc = 2; if (cp_getvar("display", CP_STRING, buf, sizeof(buf))) { displayname = buf; } else if (!(displayname = getenv("DISPLAY"))) { internalerror("Can't open X display."); return (1); } # ifdef DEBUG _Xdebug = 1; # endif argv[0] = "ngspice"; argv[1] = displayname; /* argv[2] = "-geometry"; argv[3] = "=1x1+2+2"; */ /* initialize X toolkit */ toplevel = XtInitialize("ngspice", "Nutmeg", NULL, 0, &argc, argv); display = XtDisplay(toplevel); X11_Open = 1; /* "invert" works better than "xor" for B&W */ /* xor gc should be a function of the pixels that are written on */ /* gcvalues.function = GXxor; */ /* this patch makes lines visible on true color displays Guenther Roehrich 22-Jan-99 */ gcvalues.function = GXinvert; gcvalues.line_width = 1; gcvalues.foreground = 1; gcvalues.background = 0; xorgc = XCreateGC(display, DefaultRootWindow(display), GCLineWidth | GCFunction | GCForeground | GCBackground, &gcvalues); /* set correct information */ dispdev->numlinestyles = NUMLINESTYLES; dispdev->numcolors = NUMCOLORS; dispdev->width = DisplayWidth(display, DefaultScreen(display)); dispdev->height = DisplayHeight(display, DefaultScreen(display)); /* we don't want non-fatal X errors to call exit */ XSetErrorHandler(errorhandler); numdispplanes = DisplayPlanes(display, DefaultScreen(display)); return (0); } static void initlinestyles(void) { int i; if (numdispplanes > 1) /* Dotted lines are a distraction when we have colors. */ for (i = 2; i < NUMLINESTYLES; i++) xlinestyles[i] = xlinestyles[0]; } static void initcolors(GRAPH *graph) { int i; static char *colornames[] = { "black", /* white */ "white", "red", "blue", "orange", "green", "pink", "brown", "khaki", "plum", "orchid", "violet", "maroon", "turquoise", "sienna", "coral", "cyan", "magenta", "gold", "yellow", "" }; XColor visualcolor, exactcolor; char buf[BSIZE_SP], colorstring[BSIZE_SP]; int xmaxcolors = NUMCOLORS; /* note: can we get rid of this? */ if (numdispplanes == 1) { /* black and white */ xmaxcolors = 2; DEVDEP(graph).colors[0] = DEVDEP(graph).view->core.background_pixel; if (DEVDEP(graph).colors[0] == WhitePixel(display, DefaultScreen(display))) DEVDEP(graph).colors[1] = BlackPixel(display, DefaultScreen(display)); else DEVDEP(graph).colors[1] = WhitePixel(display, DefaultScreen(display)); } else { if (numdispplanes < NXPLANES) xmaxcolors = 1 << numdispplanes; for (i = 0; i < xmaxcolors; i++) { (void) sprintf(buf, "color%d", i); if (!cp_getvar(buf, CP_STRING, colorstring, sizeof(colorstring))) (void) strcpy(colorstring, colornames[i]); if (!XAllocNamedColor(display, DefaultColormap(display, DefaultScreen(display)), colorstring, &visualcolor, &exactcolor)) { (void) sprintf(ErrorMessage, "can't get color %s\n", colorstring); externalerror(ErrorMessage); DEVDEP(graph).colors[i] = i ? BlackPixel(display, DefaultScreen(display)) : WhitePixel(display, DefaultScreen(display)); continue; } DEVDEP(graph).colors[i] = visualcolor.pixel; /* MW. I don't need this, everyone must know what he is doing if (i > 0 && DEVDEP(graph).colors[i] == DEVDEP(graph).view->core.background_pixel) { DEVDEP(graph).colors[i] = DEVDEP(graph).colors[0]; } */ } /* MW. Set Beackgroound here */ XSetWindowBackground(display, DEVDEP(graph).window, DEVDEP(graph).colors[0]); /* if (DEVDEP(graph).colors[0] != DEVDEP(graph).view->core.background_pixel) { DEVDEP(graph).colors[0] = DEVDEP(graph).view->core.background_pixel; } */ } for (i = xmaxcolors; i < NUMCOLORS; i++) { DEVDEP(graph).colors[i] = DEVDEP(graph).colors[i + 1 - xmaxcolors]; } } static void handlekeypressed(Widget w, XtPointer client_data, XEvent *ev, Boolean *continue_dispatch) { XKeyEvent *keyev = & ev->xkey; GRAPH *graph = (GRAPH *) client_data; char text[4]; int nbytes; NG_IGNORE(w); NG_IGNORE(continue_dispatch); nbytes = XLookupString(keyev, text, 4, NULL, NULL); if (!nbytes) return; /* write it */ PushGraphContext(graph); text[nbytes] = '\0'; SetColor(1); DevDrawText(text, keyev->x, graph->absolute.height - keyev->y, 0); /* save it */ SaveText(graph, text, keyev->x, graph->absolute.height - keyev->y); /* warp mouse so user can type in sequence */ XWarpPointer(display, None, DEVDEP(graph).window, 0, 0, 0, 0, keyev->x + XTextWidth(DEVDEP(graph).font, text, nbytes), keyev->y); PopGraphContext(); } static void handlebuttonev(Widget w, XtPointer client_data, XEvent *ev, Boolean *continue_dispatch) { GRAPH *graph = (GRAPH *) client_data; NG_IGNORE(w); NG_IGNORE(continue_dispatch); switch (ev->xbutton.button) { case Button1: slopelocation(graph, ev->xbutton.x, ev->xbutton.y); break; case Button3: zoomin(graph); break; } } /* callback function for catching window deletion by WM x-button */ static void handle_wm_messages(Widget w, XtPointer client_data, XEvent *ev, Boolean *cont) { GRAPH *graph = (GRAPH *) client_data; NG_IGNORE(w); NG_IGNORE(cont); if (ev->type == ClientMessage && ev->xclient.message_type == atom_wm_protocols && (Atom) ev->xclient.data.l[0] == atom_wm_delete_window) { RemoveWindow(graph); } } /* Recover from bad NewViewPort call. */ #define RECOVERNEWVIEWPORT() \ do { \ tfree(graph); \ graph = NULL; \ } while(0) /* need to do this or else DestroyGraph will free it again */ /* NewViewport is responsible for filling in graph->viewport */ int X11_NewViewport(GRAPH *graph) { char fontname[513]; /* who knows . . . */ char *p, *q; Cursor cursor; XSetWindowAttributes w_attrs; XGCValues gcvalues; static Arg formargs[ ] = { { XtNleft, (XtArgVal) XtChainLeft }, { XtNresizable, (XtArgVal) TRUE } }; static Arg bboxargs[ ] = { { XtNfromHoriz, (XtArgVal) NULL }, { XtNbottom, (XtArgVal) XtChainTop }, { XtNtop, (XtArgVal) XtChainTop }, { XtNleft, (XtArgVal) XtChainRight }, { XtNright, (XtArgVal) XtChainRight } }; static Arg buttonargs[ ] = { { XtNlabel, (XtArgVal) NULL }, { XtNfromVert, (XtArgVal) NULL }, { XtNbottom, (XtArgVal) XtChainTop }, { XtNtop, (XtArgVal) XtChainTop }, { XtNleft, (XtArgVal) XtRubber }, { XtNright, (XtArgVal) XtRubber }, { XtNresizable, (XtArgVal) TRUE } }; static Arg viewargs[] = { { XtNresizable, (XtArgVal) TRUE }, { XtNwidth, (XtArgVal) 300 }, { XtNheight, (XtArgVal) 300 }, { XtNright, (XtArgVal) XtChainRight } }; int trys; graph->devdep = TMALLOC(X11devdep, 1); /* set up new shell */ DEVDEP(graph).shell = XtCreateApplicationShell ("shell", topLevelShellWidgetClass, NULL, 0); XtVaSetValues(DEVDEP(graph).shell, XtNtitle, graph->plotname, NULL); /* set up form widget */ DEVDEP(graph).form = XtCreateManagedWidget ("form", formWidgetClass, DEVDEP(graph).shell, formargs, XtNumber(formargs)); /* set up viewport */ DEVDEP(graph).view = XtCreateManagedWidget ("viewport", widgetClass, DEVDEP(graph).form, viewargs, XtNumber(viewargs)); XtAddEventHandler(DEVDEP(graph).view, ButtonPressMask, FALSE, handlebuttonev, graph); XtAddEventHandler(DEVDEP(graph).view, KeyPressMask, FALSE, handlekeypressed, graph); XtAddEventHandler(DEVDEP(graph).view, StructureNotifyMask, FALSE, resize, graph); XtAddEventHandler(DEVDEP(graph).view, ExposureMask, FALSE, redraw, graph); /* set up button box */ XtSetArg(bboxargs[1], XtNfromHoriz, DEVDEP(graph).view); DEVDEP(graph).buttonbox = XtCreateManagedWidget ("buttonbox", boxWidgetClass, DEVDEP(graph).form, bboxargs, XtNumber(bboxargs)); /* set up buttons */ XtSetArg(buttonargs[0], XtNlabel, "quit"); XtSetArg(bboxargs[1], XtNfromVert, NULL); DEVDEP(graph).buttons[0] = XtCreateManagedWidget ("quit", commandWidgetClass, DEVDEP(graph).buttonbox, buttonargs, 1); XtAddCallback(DEVDEP(graph).buttons[0], XtNcallback, killwin, graph); XtSetArg(buttonargs[0], XtNlabel, "hardcopy"); XtSetArg(bboxargs[1], XtNfromVert, DEVDEP(graph).buttons[0]); DEVDEP(graph).buttons[1] = XtCreateManagedWidget ("hardcopy", commandWidgetClass, DEVDEP(graph).buttonbox, buttonargs, 1); XtAddCallback(DEVDEP(graph).buttons[1], XtNcallback, hardcopy, graph); /* set up fonts */ if (!cp_getvar("xfont", CP_STRING, fontname, sizeof(fontname))) (void) strcpy(fontname, DEF_FONT); for (p = fontname; *p && *p <= ' '; p++) ; if (p != fontname) { for (q = fontname; *p; *q++ = *p++) ; *q = '\0'; } trys = 1; while (!(DEVDEP(graph).font = XLoadQueryFont(display, fontname))) { sprintf(ErrorMessage, "can't open font %s", fontname); strcpy(fontname, "fixed"); if (trys > 1) { internalerror(ErrorMessage); RECOVERNEWVIEWPORT(); return (1); } trys += 1; } graph->fontwidth = DEVDEP(graph).font->max_bounds.rbearing - DEVDEP(graph).font->min_bounds.lbearing + 1; graph->fontheight = DEVDEP(graph).font->max_bounds.ascent + DEVDEP(graph).font->max_bounds.descent + 1; XtRealizeWidget(DEVDEP(graph).shell); DEVDEP(graph).window = XtWindow(DEVDEP(graph).view); DEVDEP(graph).isopen = 0; w_attrs.bit_gravity = ForgetGravity; XChangeWindowAttributes(display, DEVDEP(graph).window, CWBitGravity, &w_attrs); /* have to note font and set mask GCFont in XCreateGC, p.w.h. */ gcvalues.font = DEVDEP(graph).font->fid; gcvalues.line_width = MW_LINEWIDTH; gcvalues.cap_style = CapNotLast; gcvalues.function = GXcopy; DEVDEP(graph).gc = XCreateGC(display, DEVDEP(graph).window, GCFont | GCLineWidth | GCCapStyle | GCFunction, &gcvalues); /* should absolute.positions really be shell.pos? */ graph->absolute.xpos = DEVDEP(graph).view->core.x; graph->absolute.ypos = DEVDEP(graph).view->core.y; graph->absolute.width = DEVDEP(graph).view->core.width; graph->absolute.height = DEVDEP(graph).view->core.height; initlinestyles(); initcolors(graph); /* set up cursor */ cursor = XCreateFontCursor(display, XC_left_ptr); XDefineCursor(display, DEVDEP(graph).window, cursor); /* WM_DELETE_WINDOW protocol */ atom_wm_protocols = XInternAtom(display, "WM_PROTOCOLS", False); atom_wm_delete_window = XInternAtom(display, "WM_DELETE_WINDOW", False); XtAddEventHandler(DEVDEP(graph).shell, NoEventMask, True, handle_wm_messages, graph); XSetWMProtocols(display, XtWindow(DEVDEP(graph).shell), &atom_wm_delete_window, 1); return (0); } /* This routine closes the X connection. It is not to be called for finishing a graph. */ int X11_Close(void) { // don't, this has never been mapped, there is no window ... // XtUnmapWidget(toplevel); XtDestroyWidget(toplevel); XtAppContext app = XtDisplayToApplicationContext(display); XtDestroyApplicationContext(app); // don't, XtDestroyApplicationContext(app) seems to have done that // XCloseDisplay(display); return 0; } int X11_DrawLine(int x1, int y1, int x2, int y2) { if (DEVDEP(currentgraph).isopen) XDrawLine(display, DEVDEP(currentgraph).window, DEVDEP(currentgraph).gc, x1, currentgraph->absolute.height - y1, x2, currentgraph->absolute.height - y2); return 0; } int X11_Arc(int x0, int y0, int radius, double theta, double delta_theta) { int t1, t2; if (0 && !cp_getvar("x11lineararcs", CP_BOOL, NULL, 0)) linear_arc(x0, y0, radius, theta, delta_theta); if (DEVDEP(currentgraph).isopen) { t1 = (int) (64 * (180.0 / M_PI) * theta); t2 = (int) (64 * (180.0 / M_PI) * delta_theta); if (t2 == 0) return 0; XDrawArc(display, DEVDEP(currentgraph).window, DEVDEP(currentgraph).gc, x0 - radius, currentgraph->absolute.height - radius - y0, (Dimension) (2 * radius), (Dimension) (2 * radius), t1, t2); } return 0; } /* note: x and y are the LOWER left corner of text */ int X11_Text(char *text, int x, int y, int angle) { /* We specify text position by lower left corner, so have to adjust for X11's font nonsense. */ NG_IGNORE(angle); if (DEVDEP(currentgraph).isopen) XDrawString(display, DEVDEP(currentgraph).window, DEVDEP(currentgraph).gc, x, currentgraph->absolute.height - (y + DEVDEP(currentgraph).font->max_bounds.descent), text, (int) strlen(text)); /* note: unlike before, we do not save any text here */ return 0; } int X11_DefineColor(int colorid, double red, double green, double blue) { NG_IGNORE(blue); NG_IGNORE(green); NG_IGNORE(red); NG_IGNORE(colorid); internalerror("X11_DefineColor not implemented."); return 0; } int X11_DefineLinestyle(int linestyleid, int mask) { NG_IGNORE(mask); NG_IGNORE(linestyleid); internalerror("X11_DefineLinestyle not implemented."); return 0; } int X11_SetLinestyle(int linestyleid) { XGCValues values; if (currentgraph->linestyle != linestyleid) { if ((linestyleid == 0 || numdispplanes > 1) && linestyleid != 1) { /* solid if linestyle 0 or if has color, allow only one * dashed linestyle */ values.line_style = LineSolid; } else { values.line_style = LineOnOffDash; } XChangeGC(display, DEVDEP(currentgraph).gc, GCLineStyle, &values); currentgraph->linestyle = linestyleid; XSetDashes(display, DEVDEP(currentgraph).gc, 0, xlinestyles[linestyleid], 4); } return 0; } int X11_SetColor(int colorid) { currentgraph->currentcolor = colorid; XSetForeground(display, DEVDEP(currentgraph).gc, DEVDEP(currentgraph).colors[colorid]); return 0; } int X11_Update(void) { if (X11_Open) XSync(display, 0); return 0; } int X11_Clear(void) { if (!noclear) /* hack so exposures look like they're handled nicely */ XClearWindow(display, DEVDEP(currentgraph).window); return 0; } static void X_ScreentoData(GRAPH *graph, int x, int y, double *fx, double *fy) { double lmin, lmax; if (graph->grid.gridtype == GRID_XLOG || graph->grid.gridtype == GRID_LOGLOG) { lmin = log10(graph->datawindow.xmin); lmax = log10(graph->datawindow.xmax); *fx = exp(((x - graph->viewportxoff) * (lmax - lmin) / graph->viewport.width + lmin) * M_LN10); } else { *fx = (x - graph->viewportxoff) * graph->aspectratiox + graph->datawindow.xmin; } if (graph->grid.gridtype == GRID_YLOG || graph->grid.gridtype == GRID_LOGLOG) { lmin = log10(graph->datawindow.ymin); lmax = log10(graph->datawindow.ymax); *fy = exp(((graph->absolute.height - y - graph->viewportyoff) * (lmax - lmin) / graph->viewport.height + lmin) * M_LN10); } else { *fy = ((graph->absolute.height - y) - graph->viewportyoff) * graph->aspectratioy + graph->datawindow.ymin; } } static void slopelocation(GRAPH *graph, int x0, int y0) /* initial position of mouse */ { int x1, y1; int x, y; Window rootwindow, childwindow; int rootx, rooty; unsigned int state; double fx0, fx1, fy0, fy1; double angle; x1 = x0; y1 = y0; XQueryPointer(display, DEVDEP(graph).window, &rootwindow, &childwindow, &rootx, &rooty, &x, &y, &state); XDrawLine(display, DEVDEP(graph).window, xorgc, x0, y0, x0, y1-1); XDrawLine(display, DEVDEP(graph).window, xorgc, x0, y1, x1, y1); while (state & Button1Mask) { if (x != x1 || y != y1) { XDrawLine(display, DEVDEP(graph).window, xorgc, x0, y0, x0, y1-1); XDrawLine(display, DEVDEP(graph).window, xorgc, x0, y1, x1, y1); x1 = x; y1 = y; XDrawLine(display, DEVDEP(graph).window, xorgc, x0, y0, x0, y1-1); XDrawLine(display, DEVDEP(graph).window, xorgc, x0, y1, x1, y1); } XQueryPointer(display, DEVDEP(graph).window, &rootwindow, &childwindow, &rootx, &rooty, &x, &y, &state); } XDrawLine(display, DEVDEP(graph).window, xorgc, x0, y0, x0, y1-1); XDrawLine(display, DEVDEP(graph).window, xorgc, x0, y1, x1, y1); X_ScreentoData(graph, x0, y0, &fx0, &fy0); X_ScreentoData(graph, x1, y1, &fx1, &fy1); /* print it out */ if (x1 == x0 && y1 == y0) { /* only one location */ fprintf(stdout, "\nx0 = %g, y0 = %g\n", fx0, fy0); if (graph->grid.gridtype == GRID_POLAR || graph->grid.gridtype == GRID_SMITH || graph->grid.gridtype == GRID_SMITHGRID) { angle = RAD_TO_DEG * atan2(fy0, fx0); fprintf(stdout, "r0 = %g, a0 = %g\n", hypot(fx0, fy0), (angle>0)?angle:360.0+angle); } } else { /* need to print info about two points */ fprintf(stdout, "\nx0 = %g, y0 = %g x1 = %g, y1 = %g\n", fx0, fy0, fx1, fy1); fprintf(stdout, "dx = %g, dy = %g\n", fx1-fx0, fy1 - fy0); if (x1 != x0 && y1 != y0) { /* add slope info if both dx and dy are zero, because otherwise either dy/dx or dx/dy is zero, which is uninteresting */ fprintf(stdout, "dy/dx = %g dx/dy = %g\n", (fy1-fy0)/(fx1-fx0), (fx1-fx0)/(fy1-fy0)); } } } /* should be able to do this by sleight of hand on graph parameters */ static void zoomin(GRAPH *graph) { /* note: need to add circular boxes XXX */ int x0, y0, x1, y1; double fx0, fx1, fy0, fy1; char buf[BSIZE_SP]; char buf2[128]; char *t; Window rootwindow, childwindow; int rootx, rooty; unsigned int state; int x, y, upperx, uppery; unsigned width, height; /* open box and get area to zoom in on */ XQueryPointer(display, DEVDEP(graph).window, &rootwindow, &childwindow, &rootx, &rooty, &x0, &y0, &state); x = x1 = x0 + BOXSIZE; y = y1 = y0 + BOXSIZE; upperx = x0; uppery = y0; width = BOXSIZE; height = BOXSIZE; XDrawRectangle(display, DEVDEP(graph).window, xorgc, upperx, uppery, width, height); XWarpPointer(display, None, DEVDEP(graph).window, 0, 0, 0, 0, x1, y1); while (state & Button3Mask) { if (x != x1 || y != y1) { x1 = x; y1 = y; XDrawRectangle(display, DEVDEP(graph).window, xorgc, upperx, uppery, width, height); upperx = MIN(x1, x0); uppery = MIN(y1, y0); width = (unsigned) ABS(x1 - x0); height = (unsigned) ABS(y1 - y0); XDrawRectangle(display, DEVDEP(graph).window, xorgc, upperx, uppery, width, height); } XQueryPointer(display, DEVDEP(graph).window, &rootwindow, &childwindow, &rootx, &rooty, &x, &y, &state); } XDrawRectangle(display, DEVDEP(graph).window, xorgc, upperx, uppery, width, height); X_ScreentoData(graph, x0, y0, &fx0, &fy0); X_ScreentoData(graph, x1, y1, &fx1, &fy1); if (fx0 > fx1) { SWAP(double, fx0, fx1); } if (fy0 > fy1) { SWAP(double, fy0, fy1); } strncpy(buf2, graph->plotname, sizeof(buf2)); if ((t = strchr(buf2, ':')) != NULL) *t = '\0'; if (!eq(plot_cur->pl_typename, buf2)) { (void) sprintf(buf, "setplot %s; %s xlimit %.20e %.20e ylimit %.20e %.20e; setplot $curplot\n", buf2, graph->commandline, fx0, fx1, fy0, fy1); } else { (void) sprintf(buf, "%s xlimit %e %e ylimit %e %e\n", graph->commandline, fx0, fx1, fy0, fy1); } /* don't use the following if using GNU Readline or BSD EditLine */ #if !defined(HAVE_GNUREADLINE) && !defined(HAVE_BSDEDITLINE) { wordlist *wl; /* hack for Gordon Jacobs */ /* add to history list if plothistory is set */ if (cp_getvar("plothistory", CP_BOOL, NULL, 0)) { wl = cp_parse(buf); (void) cp_addhistent(cp_event++, wl); } } #endif /* !defined(HAVE_GNUREADLINE) && !defined(HAVE_BSDEDITLINE) */ (void) cp_evloop(buf); } static void hardcopy(Widget w, XtPointer client_data, XtPointer call_data) { NG_IGNORE(call_data); NG_IGNORE(w); /* com_hardcopy() -> gr_resize() -> setcolor() dirung postscript printing will act on currentgraph with a DEVDEP inherited from PSdevdep. But currentgraph had not changed its devdep, which was derived from incompatible X11devdep, thus overwriting some variables. Here you find a temporary remedy, until there will be a cleanup of graph handling. E.g. CopyGraph() does not make a copy of its devdep, but just copies the pointer, so keeping the old devdep. */ lasthardcopy = (GRAPH *) client_data; /* FIXME #1: this should print currentgraph with * currentgraph dynamically bound to client_data * FIXME #2: the !currentgraphs case, * don't bother do call com_hardcopy */ if (currentgraph) { void *devdep = currentgraph->devdep; com_hardcopy(NULL); currentgraph->devdep = devdep; } else { com_hardcopy(NULL); } } static void killwin(Widget w, XtPointer client_data, XtPointer call_data) { GRAPH *graph = (GRAPH *) client_data; NG_IGNORE(call_data); NG_IGNORE(w); RemoveWindow(graph); } /* called from postcoms.c In the command 'destroy ac2' Will remove window associated with the plot (e.g. ac2) just before data of the plot are deleted.*/ void RemoveWindow(GRAPH *graph) { if (graph->devdep) { /* Iplots are done asynchronously */ DEVDEP(graph).isopen = 0; /* MW. Not sure but DestroyGraph might free() to much - try Xt...() first */ XtUnmapWidget(DEVDEP(graph).shell); XtDestroyWidget(DEVDEP(graph).shell); XFreeFont(display, DEVDEP(graph).font); XFreeGC(display, DEVDEP(graph).gc); } if (graph == currentgraph) currentgraph = NULL; DestroyGraph(graph->graphid); } /* call higher gr_redraw routine */ static void redraw(Widget w, XtPointer client_data, XEvent *event, Boolean *continue_dispatch) { GRAPH *graph = (GRAPH *) client_data; XExposeEvent *pev = & event->xexpose; XEvent ev; XRectangle rects[30]; int n = 1; NG_IGNORE(w); NG_IGNORE(continue_dispatch); DEVDEP(graph).isopen = 1; rects[0].x = (Position) pev->x; rects[0].y = (Position) pev->y; rects[0].width = (Dimension) pev->width; rects[0].height = (Dimension) pev->height; /* XXX */ /* pull out all other expose regions that need to be redrawn */ while (n < 30 && XCheckWindowEvent(display, DEVDEP(graph).window, ExposureMask, &ev)) { pev = (XExposeEvent *) &ev; rects[n].x = (Position) pev->x; rects[n].y = (Position) pev->y; rects[n].width = (Dimension) pev->width; rects[n].height = (Dimension) pev->height; n++; } XSetClipRectangles(display, DEVDEP(graph).gc, 0, 0, rects, n, Unsorted); noclear = True; { GRAPH *tmp = currentgraph; currentgraph = graph; gr_redraw(graph); currentgraph = tmp; } noclear = False; XSetClipMask(display, DEVDEP(graph).gc, None); } static void resize(Widget w, XtPointer client_data, XEvent *call_data, Boolean *continue_dispatch) { GRAPH *graph = (GRAPH *) client_data; XEvent ev; NG_IGNORE(call_data); NG_IGNORE(continue_dispatch); /* pull out all other exposure events Also, get rid of other StructureNotify events on this window. */ while (XCheckWindowEvent(display, DEVDEP(graph).window, /* ExposureMask | */ StructureNotifyMask, &ev)) ; XClearWindow(display, DEVDEP(graph).window); graph->absolute.width = w->core.width; graph->absolute.height = w->core.height; { GRAPH *tmp = currentgraph; currentgraph = graph; gr_resize(graph); currentgraph = tmp; } } int X11_Input(REQUEST *request, RESPONSE *response) { XEvent ev; int nfds; fd_set rfds; switch (request->option) { case char_option: nfds = ConnectionNumber(display) > fileno(request->fp) ? ConnectionNumber(display) : fileno(request->fp); for (;;) { /* first read off the queue before doing the select */ while (XtPending()) { XtNextEvent(&ev); XtDispatchEvent(&ev); } /* block on ConnectionNumber and request->fp */ /* PN: added fd_set * casting */ FD_ZERO(&rfds); FD_SET(fileno(request->fp), &rfds); FD_SET(ConnectionNumber(display), &rfds); select (nfds + 1, &rfds, NULL, NULL, NULL); /* handle X events first */ if (FD_ISSET (ConnectionNumber(display), &rfds)) /* handle ALL X events */ while (XtPending()) { XtNextEvent(&ev); XtDispatchEvent(&ev); } if (FD_ISSET (fileno(request->fp), &rfds)) goto out; } break; case click_option: /* let's fake this */ response->reply.graph = lasthardcopy; break; case button_option: /* sit and handle events until get a button selection */ internalerror("button_option not implemented"); response->option = error_option; return 1; break; case checkup_option: /* first read off the queue before doing the select */ while (XtPending()) { XtNextEvent(&ev); XtDispatchEvent(&ev); } break; default: internalerror("unrecognized input type"); if (response) response->option = error_option; return 1; break; } out: if (response) response->option = request->option; return 0; } static void linear_arc(int x0, int y0, int radius, double theta, double delta_theta) /* x coordinate of center */ /* y coordinate of center */ /* radius of arc */ /* initial angle ( +x axis = 0 rad ) */ /* delta angle */ /* * Notes: * Draws an arc of radius and center at (x0,y0) beginning at * angle theta (in rad) and ending at theta + delta_theta */ { int x1, y1, x2, y2; int i, s = 60; double dphi; x2 = x0 + (int) (radius * cos(theta)); y2 = y0 + (int) (radius * sin(theta)); dphi = delta_theta / s; for (i = 1; i <= s; i++) { x1 = x2; y1 = y2; x2 = x0 + (int)(radius * cos(theta + i*dphi)); y2 = y0 + (int)(radius * sin(theta + i*dphi)); X11_DrawLine(x1, y1, x2, y2); } } #else int x11_dummy_symbol; /* otherwise, some linkers get upset */ #endif /* X_DISPLAY_MISSING */ tmpk8ny_4pz/src/frontend/plotting/agraf.h0000644000175000017500000000064413546075722020663 0ustar carstencarsten/************* * Header file for agraf.c * 1999 E. Rouat ************/ #ifndef ngspice_AGRAF_H #define ngspice_AGRAF_H #include "ngspice/dvec.h" #include "ngspice/bool.h" #include "ngspice/plot.h" void ft_agraf(double *xlims, double *ylims, struct dvec *xscale, struct plot *plot, struct dvec *vecs, double xdel, double ydel, bool xlog, bool ylog, bool nointerp); #endif tmpk8ny_4pz/src/frontend/plotting/plot5.c0000644000175000017500000001017313546075722020637 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #include "ngspice/ngspice.h" #include "ngspice/graph.h" #include "ngspice/ftedev.h" #include "plot5.h" #include "graf.h" #include "ngspice/fteext.h" static FILE *plotfile; #define putsi(a) \ do { \ putc((char) (a), plotfile); \ putc((char) ((a) >> 8), plotfile); \ } while(0) #define SOLID 0 static char *linestyle[] = { "solid", "dotted", "longdashed", "shortdashed", "dotdashed" }; static int currentlinestyle = SOLID; int Plt5_Init(void) { dispdev->numlinestyles = 4; dispdev->numcolors = 2; /* arbitrary */ dispdev->width = 1000; dispdev->height = 1000; return (0); } int Plt5_NewViewport(GRAPH *graph) { if ((plotfile = fopen((char*) graph->devdep, "w")) == NULL) { graph->devdep = NULL; perror((char*) graph->devdep); return (1); } if (graph->absolute.width) { /* hardcopying from the scree, ie, we are passed a copy of an existing graph */ putc('s', plotfile); putsi(0); putsi(0); putsi(graph->absolute.width); putsi(graph->absolute.height); /* re-scale linestyles */ gr_relinestyle(graph); } else { /* scale space */ putc('s', plotfile); putsi(0); putsi(0); putsi(dispdev->width); putsi(dispdev->height); /* reasonable values, used in gr_ for placement */ graph->fontwidth = 12; graph->fontheight = 24; graph->absolute.width = dispdev->width; graph->absolute.height = dispdev->height; } /* set to NULL so graphdb doesn't incorrectly de-allocate it */ graph->devdep = NULL; return (0); } int Plt5_Close(void) { /* in case Plt5_Close is called as part of an abort, w/o having reached Plt5_NewViewport */ if (plotfile) fclose(plotfile); return 0; } int Plt5_Clear(void) { /* do nothing */ return 0; } int Plt5_DrawLine(int x1, int y1, int x2, int y2) { putc('l', plotfile); putsi(x1); putsi(y1); putsi(x2); putsi(y2); return 0; } int Plt5_Arc(int xc, int yc, int radius, double theta, double delta_theta) { int x0, y0, x1, y1; if (delta_theta < 0) { theta += delta_theta; delta_theta = -delta_theta; } if ((2*M_PI - delta_theta)*radius < 0.5) { putc('c', plotfile); putsi(xc); putsi(yc); putsi(radius); return 0; } while (delta_theta*radius > 0.5) { double delta_phi = M_PI/2; if (delta_phi > delta_theta) delta_phi = delta_theta; x0 = xc + (int)(radius * cos(theta)); y0 = yc + (int)(radius * sin(theta)); x1 = xc + (int)(radius * cos(theta + delta_phi)); y1 = yc + (int)(radius * sin(theta + delta_phi)); putc('a', plotfile); putsi(xc); putsi(yc); putsi(x0); putsi(y0); putsi(x1); putsi(y1); delta_theta -= delta_phi; theta += delta_phi; } return 0; } int Plt5_Text(char *text, int x, int y, int angle) { int savedlstyle; NG_IGNORE(angle); /* set linestyle to solid or may get funny color text on some plotters */ savedlstyle = currentlinestyle; Plt5_SetLinestyle(SOLID); /* move to (x, y) */ putc('m', plotfile); putsi(x); putsi(y); /* use the label option */ fprintf(plotfile, "t%s\n", text); /* restore old linestyle */ Plt5_SetLinestyle(savedlstyle); return 0; } int Plt5_SetLinestyle(int linestyleid) { if (linestyleid < 0 || linestyleid > dispdev->numlinestyles) { internalerror("bad linestyleid"); return 0; } putc('f', plotfile); fprintf(plotfile, "%s\n", linestyle[linestyleid]); currentlinestyle = linestyleid; return 0; } /* ARGSUSED */ int Plt5_SetColor(int colorid) { NG_IGNORE(colorid); /* do nothing */ return 0; } int Plt5_Update(void) { fflush(plotfile); return 0; } tmpk8ny_4pz/src/frontend/plotting/Makefile.am0000644000175000017500000000106013546075722021457 0ustar carstencarstennoinst_LTLIBRARIES = libplotting.la libplotting_la_SOURCES = \ plotting.c \ plotting.h \ agraf.c \ agraf.h \ clip.c \ clip.h \ gnuplot.c \ gnuplot.h \ graf.c \ graf.h \ graphdb.c \ graphdb.h \ grid.c \ pvec.c \ pvec.h \ plot5.c \ plot5.h \ plotcurv.c \ plotcurv.h \ plotit.c \ plotit.h if !NO_X libplotting_la_SOURCES += \ x11.c \ x11.h \ xgraph.c \ xgraph.h endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include -I$(top_srcdir)/src/frontend @X_CFLAGS@ AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/frontend/plotting/pvec.c0000644000175000017500000000371613546075722020536 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/dvec.h" #include "ngspice/plot.h" #include "ngspice/fteext.h" #include "pvec.h" #include "dimens.h" void pvec(struct dvec *d) { char buf[BSIZE_SP], buf2[BSIZE_SP], buf3[BSIZE_SP]; sprintf(buf, " %-20s: %s, %s, %d long", d->v_name, ft_typenames(d->v_type), isreal(d) ? "real" : "complex", d->v_length); if (d->v_flags & VF_MINGIVEN) { sprintf(buf2, ", min = %g", d->v_minsignal); strcat(buf, buf2); } if (d->v_flags & VF_MAXGIVEN) { sprintf(buf2, ", max = %g", d->v_maxsignal); strcat(buf, buf2); } switch (d->v_gridtype) { case GRID_LOGLOG: strcat(buf, ", grid = loglog"); break; case GRID_XLOG: strcat(buf, ", grid = xlog"); break; case GRID_YLOG: strcat(buf, ", grid = ylog"); break; case GRID_POLAR: strcat(buf, ", grid = polar"); break; case GRID_SMITH: strcat(buf, ", grid = smith (xformed)"); break; case GRID_SMITHGRID: strcat(buf, ", grid = smithgrid (not xformed)"); break; default: /* va: GRID_NONE or GRID_LIN */ break; } switch (d->v_plottype) { case PLOT_COMB: strcat(buf, ", plot = comb"); break; case PLOT_POINT: strcat(buf, ", plot = point"); break; default: /* va: PLOT_LIN, */ break; } if (d->v_defcolor) { sprintf(buf2, ", color = %s", d->v_defcolor); strcat(buf, buf2); } if (d->v_scale) { sprintf(buf2, ", scale = %s", d->v_scale->v_name); strcat(buf, buf2); } if (d->v_numdims > 1) { dimstring(d->v_dims, d->v_numdims, buf3); sprintf(buf2, ", dims = [%s]", buf3); strcat(buf, buf2); } if (d->v_plot->pl_scale == d) strcat(buf, " [default scale]\n"); else strcat(buf, "\n"); out_send(buf); } tmpk8ny_4pz/src/frontend/plotting/plotit.c0000644000175000017500000007432713546075722021122 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/bool.h" #include "ngspice/wordlist.h" #include "ngspice/graph.h" #include "ngspice/cpdefs.h" #include "ngspice/pnode.h" #include "ngspice/sim.h" #include "ngspice/fteext.h" #include #include "plotit.h" #include "agraf.h" #include "xgraph.h" #include "gnuplot.h" #include "graf.h" static bool sameflag; #ifdef TCL_MODULE #include "ngspice/tclspice.h" #endif /* This routine gets parameters from the command line, which are of * the form "name number ..." It returns a pointer to the parameter * values. */ static double * getlims(wordlist *wl, char *name, int number) { double *d; wordlist *beg, *wk; int n; if (number < 1) return NULL; beg = wl_find(name, wl->wl_next); if (!beg) return NULL; wk = beg->wl_next; d = TMALLOC(double, number); for (n = 0; n < number; n++) { char *ss; double *td; if (!wk) { fprintf(cp_err, "Syntax error: not enough parameters for \"%s\".\n", name); txfree(d); return NULL; } ss = wk->wl_word; td = ft_numparse(&ss, FALSE); if (!td) { fprintf(cp_err, "Syntax error: bad parameters for \"%s\".\n", name); txfree(d); return NULL; } d[n] = *td; wk = wk->wl_next; } wl_delete_slice(beg, wk); return d; } /* Extend a data vector to length by replicating the last element, or * truncate it if it is too long. */ static void xtend(struct dvec *v, int length) { int i; if (v->v_length == length) return; if (v->v_length > length) { dvec_trunc(v, length); return; } i = v->v_length; dvec_realloc(v, length, NULL); if (isreal(v)) { double d = NAN; if (i > 0) d = v->v_realdata[i - 1]; while (i < length) v->v_realdata[i++] = d; } else { ngcomplex_t c = {NAN, NAN}; if (i > 0) c = v->v_compdata[i - 1]; while (i < length) v->v_compdata[i++] = c; } } /* Collapse every *xcomp elements into one, and use only the elements * between xind[0] and xind[1]. */ static void compress(struct dvec *d, double *xcomp, double *xind) { int cfac, ihi, ilo, newlen, i; if (xind) { ilo = (int) xind[0]; ihi = (int) xind[1]; if ((ihi >= ilo) && (ilo > 0) && (ilo < d->v_length) && (ihi > 1) && (ihi <= d->v_length)) { newlen = ihi - ilo; if (isreal(d)) { double *dd = TMALLOC(double, newlen); memcpy(dd, d->v_realdata + ilo, (size_t) newlen * sizeof(double)); dvec_realloc(d, newlen, dd); } else { ngcomplex_t *cc = TMALLOC(ngcomplex_t, newlen); memcpy(cc, d->v_compdata + ilo, (size_t) newlen * sizeof(ngcomplex_t)); dvec_realloc(d, newlen, cc); } } } if (xcomp) { cfac = (int) *xcomp; if ((cfac > 1) && (cfac < d->v_length)) { for (i = 0; i * cfac < d->v_length; i++) if (isreal(d)) d->v_realdata[i] = d->v_realdata[i * cfac]; else d->v_compdata[i] = d->v_compdata[i * cfac]; dvec_trunc(d, i); } } } /* Check for and remove a one-word keyword. */ static bool getflag(wordlist *wl, char *name) { wl = wl_find(name, wl->wl_next); if (!wl) return FALSE; wl_delete_slice(wl, wl->wl_next); return TRUE; } /* Return a parameter of the form "xlabel foo" */ static char * getword(wordlist *wl, char *name) { wordlist *beg; char *s; beg = wl_find(name, wl->wl_next); if (!beg) return NULL; if (!beg->wl_next) { fprintf(cp_err, "Syntax error: looking for plot keyword at \"%s\".\n", name); return NULL; } s = copy(beg->wl_next->wl_word); wl_delete_slice(beg, beg->wl_next->wl_next); return s; } /* The common routine for all plotting commands. This does hardcopy * and graphics plotting. */ bool plotit(wordlist *wl, char *hcopy, char *devname) { /* All these things are static so that "samep" will work. */ static double *xcompress = NULL, *xindices = NULL; static double *xlim = NULL, *ylim = NULL, *xynull; static double *xdelta = NULL, *ydelta = NULL; static char *xlabel = NULL, *ylabel = NULL, *title = NULL; static bool nointerp = FALSE; static GRIDTYPE gtype = GRID_LIN; static PLOTTYPE ptype = PLOT_LIN; bool gfound = FALSE, pfound = FALSE, oneval = FALSE; double *dd, ylims[2], xlims[2]; struct pnode *pn, *names; struct dvec *d = NULL, *vecs = NULL, *lv, *lastvs = NULL; char *xn; int i, y_type, xt; wordlist *wwl, *tail; char *cline = NULL, buf[BSIZE_SP], *pname; char *nxlabel = NULL, *nylabel = NULL, *ntitle = NULL; double tstep, tstart, tstop, ttime; /* return value, error by default */ bool rtn = FALSE; if (!wl) return rtn; /* * we need a preceding element here, * and we will destructively modify the wordlist in stupid ways, * thus lets make our own copy which fits our purpose */ wl = wl_cons(NULL, wl_copy(wl)); /* First get the command line, without the limits. Wii be used for zoomed windows */ wwl = wl_copy(wl); xynull = getlims(wwl, "xl", 2); tfree(xynull); xynull = getlims(wwl, "xlimit", 2); tfree(xynull); xynull = getlims(wwl, "yl", 2); tfree(xynull); xynull = getlims(wwl, "ylimit", 2); tfree(xynull); /* remove tile, xlabel, ylabel */ nxlabel = getword(wwl, "xlabel"); nylabel = getword(wwl, "ylabel"); ntitle = getword(wwl, "title"); pname = wl_flatten(wwl->wl_next); tail = wl_cons(tprintf("plot %s", pname), NULL); tfree(pname); wl_free(wwl); /* add title, xlabel or ylabel, if available, with quotes '' */ if (nxlabel) { tail = wl_cons(tprintf("xlabel '%s'", nxlabel), tail); tfree(nxlabel); } if (nylabel) { tail = wl_cons(tprintf("ylabel '%s'", nylabel), tail); tfree(nylabel); } if (ntitle) { tail = wl_cons(tprintf("title '%s'", ntitle), tail); tfree(ntitle); } tail = wl_reverse(tail); cline = wl_flatten(tail); wl_free(tail); /* Now extract all the parameters. */ sameflag = getflag(wl, "samep"); if (!sameflag || !xlim) { xlim = getlims(wl, "xl", 2); if (!xlim) xlim = getlims(wl, "xlimit", 2); } else { txfree(getlims(wl, "xl", 2)); txfree(getlims(wl, "xlimit", 2)); } if (!sameflag || !ylim) { ylim = getlims(wl, "yl", 2); if (!ylim) ylim = getlims(wl, "ylimit", 2); } else { txfree(getlims(wl, "yl", 2)); txfree(getlims(wl, "ylimit", 2)); } if (!sameflag || !xcompress) { xcompress = getlims(wl, "xcompress", 1); if (!xcompress) xcompress = getlims(wl, "xcomp", 1); } else { txfree(getlims(wl, "xcompress", 1)); txfree(getlims(wl, "xcomp", 1)); } if (!sameflag || !xindices) { xindices = getlims(wl, "xindices", 2); if (!xindices) xindices = getlims(wl, "xind", 2); } else { txfree(getlims(wl, "xindices", 2)); txfree(getlims(wl, "xind", 2)); } if (!sameflag || !xdelta) { xdelta = getlims(wl, "xdelta", 1); if (!xdelta) xdelta = getlims(wl, "xdel", 1); } else { txfree(getlims(wl, "xdelta", 1)); txfree(getlims(wl, "xdel", 1)); } if (!sameflag || !ydelta) { ydelta = getlims(wl, "ydelta", 1); if (!ydelta) ydelta = getlims(wl, "ydel", 1); } else { txfree(getlims(wl, "ydelta", 1)); txfree(getlims(wl, "ydel", 1)); } /* Get the grid type and the point type. Note we can't do if-else * here because we want to catch all the grid types. */ if (getflag(wl, "lingrid")) { if (gfound) { fprintf(cp_err, "Warning: too many grid types given\n"); } else { gtype = GRID_LIN; gfound = TRUE; } } if (getflag(wl, "loglog")) { if (gfound) { fprintf(cp_err, "Warning: too many grid types given\n"); } else { gtype = GRID_LOGLOG; gfound = TRUE; } } if (getflag(wl, "nogrid")) { if (gfound) { fprintf(cp_err, "Warning: too many grid types given\n"); } else { gtype = GRID_NONE; gfound = TRUE; } } if (getflag(wl, "linear")) { if (gfound) { fprintf(cp_err, "Warning: too many grid types given\n"); } else { gtype = GRID_LIN; gfound = TRUE; } } if (getflag(wl, "xlog")) { if (gfound) { if (gtype == GRID_YLOG) gtype = GRID_LOGLOG; else fprintf(cp_err, "Warning: too many grid types given\n"); } else { gtype = GRID_XLOG; gfound = TRUE; } } if (getflag(wl, "ylog")) { if (gfound) { if (gtype == GRID_XLOG) gtype = GRID_LOGLOG; else fprintf(cp_err, "Warning: too many grid types given\n"); } else { gtype = GRID_YLOG; gfound = TRUE; } } if (getflag(wl, "polar")) { if (gfound) { fprintf(cp_err, "Warning: too many grid types given\n"); } else { gtype = GRID_POLAR; gfound = TRUE; } } if (getflag(wl, "smith")) { if (gfound) { fprintf(cp_err, "Warning: too many grid types given\n"); } else { gtype = GRID_SMITH; gfound = TRUE; } } if (getflag(wl, "smithgrid")) { if (gfound) { fprintf(cp_err, "Warning: too many grid types given\n"); } else { gtype = GRID_SMITHGRID; gfound = TRUE; } } if (!sameflag && !gfound) { if (cp_getvar("gridstyle", CP_STRING, buf, sizeof(buf))) { if (eq(buf, "lingrid")) gtype = GRID_LIN; else if (eq(buf, "loglog")) gtype = GRID_LOGLOG; else if (eq(buf, "xlog")) gtype = GRID_XLOG; else if (eq(buf, "ylog")) gtype = GRID_YLOG; else if (eq(buf, "smith")) gtype = GRID_SMITH; else if (eq(buf, "smithgrid")) gtype = GRID_SMITHGRID; else if (eq(buf, "polar")) gtype = GRID_POLAR; else if (eq(buf, "nogrid")) gtype = GRID_NONE; else { fprintf(cp_err, "Warning: strange grid type %s\n", buf); gtype = GRID_LIN; } gfound = TRUE; } else { gtype = GRID_LIN; } } /* Now get the point type. */ if (getflag(wl, "linplot")) { if (pfound) { fprintf(cp_err, "Warning: too many plot types given\n"); } else { ptype = PLOT_LIN; pfound = TRUE; } } if (getflag(wl, "noretraceplot")) { if (pfound) { fprintf(cp_err, "Warning: too many plot types given\n"); } else { ptype = PLOT_MONOLIN; pfound = TRUE; } } if (getflag(wl, "combplot")) { if (pfound) { fprintf(cp_err, "Warning: too many plot types given\n"); } else { ptype = PLOT_COMB; pfound = TRUE; } } if (getflag(wl, "pointplot")) { if (pfound) { fprintf(cp_err, "Warning: too many plot types given\n"); } else { ptype = PLOT_POINT; pfound = TRUE; } } if (!sameflag && !pfound) { if (cp_getvar("plotstyle", CP_STRING, buf, sizeof(buf))) { if (eq(buf, "linplot")) ptype = PLOT_LIN; else if (eq(buf, "noretraceplot")) ptype = PLOT_MONOLIN; else if (eq(buf, "combplot")) ptype = PLOT_COMB; else if (eq(buf, "pointplot")) ptype = PLOT_POINT; else { fprintf(cp_err, "Warning: strange plot type %s\n", buf); ptype = PLOT_LIN; } pfound = TRUE; } else { ptype = PLOT_LIN; } } if (!sameflag || !xlabel) xlabel = getword(wl, "xlabel"); else txfree(getword(wl, "xlabel")); if (!sameflag || !ylabel) ylabel = getword(wl, "ylabel"); else txfree(getword(wl, "ylabel")); if (!sameflag || !title) title = getword(wl, "title"); else txfree(getword(wl, "title")); if (!sameflag) nointerp = getflag(wl, "nointerp"); else if (getflag(wl, "nointerp")) nointerp = TRUE; if (!wl->wl_next) { fprintf(cp_err, "Error: no vectors given\n"); goto quit1; } /* Now parse the vectors. We have a list of the form * "a b vs c d e vs f g h". Since it's a bit of a hassle for * us to parse the vector boundaries here, we do this -- call * ft_getpnames() without the check flag, and then look for 0-length * vectors with the name "vs"... This is a sort of a gross hack, * since we have to check for 0-length vectors ourselves after * evaulating the pnodes... */ names = ft_getpnames(wl->wl_next, FALSE); if (names == NULL) goto quit1; /* Now evaluate the names. */ for (pn = names, lv = NULL; pn; pn = pn->pn_next) if (pn->pn_value && (pn->pn_value->v_length == 0) && eq(pn->pn_value->v_name, "vs")) { struct dvec *dv; if (!lv) { fprintf(cp_err, "Error: misplaced vs arg\n"); goto quit; } if ((pn = pn->pn_next) == NULL) { fprintf(cp_err, "Error: missing vs arg\n"); goto quit; } dv = ft_evaluate(pn); if (!dv) goto quit; if (lastvs) lv = lastvs->v_link2; else lv = vecs; while (lv) { lv->v_scale = dv; lastvs = lv; lv = lv->v_link2; } } else { struct dvec *dv; dv = ft_evaluate(pn); if (!dv) goto quit; if (!d) vecs = dv; else d->v_link2 = dv; for (d = dv; d->v_link2; d = d->v_link2) ; lv = dv; } /* free_pnode(names); pn:really should be commented out ? */ d->v_link2 = NULL; /* Now check for 0-length vectors. */ for (d = vecs; d; d = d->v_link2) if (!d->v_length) { fprintf(cp_err, "Error(plotit.c--plotit): %s: no such vector\n", d->v_name); goto quit; } /* If there are higher dimensional vectors, transform them into a * family of vectors. */ for (d = vecs, lv = NULL; d; d = d->v_link2) if (d->v_numdims > 1) { if (lv) lv->v_link2 = vec_mkfamily(d); else vecs = lv = vec_mkfamily(d); while (lv->v_link2) lv = lv->v_link2; lv->v_link2 = d->v_link2; d = lv; } else { lv = d; } /* Now fill in the scales for vectors who aren't already fixed up. */ for (d = vecs; d; d = d->v_link2) if (!d->v_scale) { if (d->v_plot->pl_scale) d->v_scale = d->v_plot->pl_scale; else d->v_scale = d; } /* The following line displays the unit at the time of temp-sweep, res-sweep, and i-sweep. This may not be a so good solution. by H.T */ if (strcmp(vecs->v_scale->v_name, "temp-sweep") == 0) vecs->v_scale->v_type = SV_TEMP; if (strcmp(vecs->v_scale->v_name, "res-sweep") == 0) vecs->v_scale->v_type = SV_RES; if (strcmp(vecs->v_scale->v_name, "i-sweep") == 0) vecs->v_scale->v_type = SV_CURRENT; /* See if the log flag is set anywhere... */ if (!gfound) { for (d = vecs; d; d = d->v_link2) if (d->v_scale && (d->v_scale->v_gridtype == GRID_XLOG)) gtype = GRID_XLOG; for (d = vecs; d; d = d->v_link2) if (d->v_gridtype == GRID_YLOG) { if ((gtype == GRID_XLOG) || (gtype == GRID_LOGLOG)) gtype = GRID_LOGLOG; else gtype = GRID_YLOG; } for (d = vecs; d; d = d->v_link2) if (d->v_gridtype == GRID_SMITH || d->v_gridtype == GRID_SMITHGRID || d->v_gridtype == GRID_POLAR) { gtype = d->v_gridtype; break; } } /* See if there are any default plot types... Here, like above, we * don't do entirely the best thing when there is a mixed set of * default plot types... */ if (!sameflag && !pfound) { ptype = PLOT_LIN; for (d = vecs; d; d = d->v_link2) if (d->v_plottype != PLOT_LIN) { ptype = d->v_plottype; break; } } /* Check and see if this is pole zero stuff. */ if ((vecs->v_type == SV_POLE) || (vecs->v_type == SV_ZERO)) oneval = TRUE; for (d = vecs; d; d = d->v_link2) if (((d->v_type == SV_POLE) || (d->v_type == SV_ZERO)) != oneval ? 1 : 0) { fprintf(cp_err, "Error: plot must be either all pole-zero or contain no poles or zeros\n"); goto quit; } if ((gtype == GRID_POLAR) || (gtype == GRID_SMITH || gtype == GRID_SMITHGRID)) oneval = TRUE; /* If we are plotting scalars, make sure there is enough * data to fit on the screen. */ for (d = vecs; d; d = d->v_link2) if (d->v_length == 1) xtend(d, d->v_scale->v_length); /* Now patch up each vector with the compression and thestrchr * selection. */ if (xcompress || xindices) for (d = vecs; d; d = d->v_link2) { compress(d, xcompress, xindices); d->v_scale = vec_copy(d->v_scale); compress(d->v_scale, xcompress, xindices); } /* Transform for smith plots */ if (gtype == GRID_SMITH) { double re, im, rex, imx; double r; struct dvec **prevvp, *n; int j; prevvp = &vecs; for (d = vecs; d; d = d->v_link2) { if (d->v_flags & VF_PERMANENT) { n = vec_copy(d); n->v_flags &= ~VF_PERMANENT; n->v_link2 = d->v_link2; d = n; *prevvp = d; } prevvp = &d->v_link2; if (isreal(d)) { fprintf(cp_err, "Warning: plotting real data \"%s\" on a smith grid\n", d->v_name); for (j = 0; j < d->v_length; j++) { r = d->v_realdata[j]; d->v_realdata[j] = (r - 1) / (r + 1); } } else { for (j = 0; j < d->v_length; j++) { /* (re - 1, im) / (re + 1, im) */ re = realpart(d->v_compdata[j]); im = imagpart(d->v_compdata[j]); rex = re + 1; imx = im; re = re - 1; /* (re, im) / (rex, imx) */ /* x = 1 - (imx / rex) * (imx / rex); * r = re / rex + im / rex * imx / rex; * i = im / rex - re / rex * imx / rex; * * * realpart(d->v_compdata[j]) = r / x; * imagpart(d->v_compdata[j]) = i / x; */ realpart(d->v_compdata[j]) = (rex*re+imx*imx) / (rex*rex+imx*imx); imagpart(d->v_compdata[j]) = (2*imx) / (rex*rex+imx*imx); } } } } /* Figure out the proper x- and y-axis limits. */ if (ylim) { ylims[0] = ylim[0]; ylims[1] = ylim[1]; } else if (oneval) { ylims[0] = HUGE; ylims[1] = - ylims[0]; for (d = vecs; d; d = d->v_link2) { /* dd = ft_minmax(d, TRUE); */ /* With this we seek the maximum and minimum of imaginary part * that will go to Y axis */ dd = ft_minmax(d, FALSE); if (ylims[0] > dd[0]) ylims[0] = dd[0]; if (ylims[1] < dd[1]) ylims[1] = dd[1]; } } else { ylims[0] = HUGE; ylims[1] = - ylims[0]; for (d = vecs; d; d = d->v_link2) { dd = ft_minmax(d, TRUE); if (ylims[0] > dd[0]) ylims[0] = dd[0]; if (ylims[1] < dd[1]) ylims[1] = dd[1]; } /* XXX */ for (d = vecs; d; d = d->v_link2) { if (d->v_flags & VF_MINGIVEN) if (ylims[0] < d->v_minsignal) ylims[0] = d->v_minsignal; if (d->v_flags & VF_MAXGIVEN) if (ylims[1] > d->v_maxsignal) ylims[1] = d->v_maxsignal; } } if (xlim) { xlims[0] = xlim[0]; xlims[1] = xlim[1]; } else if (oneval) { xlims[0] = HUGE; xlims[1] = - xlims[0]; for (d = vecs; d; d = d->v_link2) { /* dd = ft_minmax(d, FALSE); */ /* With this we seek the maximum and minimum of imaginary part * that will go to Y axis */ dd = ft_minmax(d, TRUE); if (xlims[0] > dd[0]) xlims[0] = dd[0]; if (xlims[1] < dd[1]) xlims[1] = dd[1]; } } else { xlims[0] = HUGE; xlims[1] = - xlims[0]; for (d = vecs; d; d = d->v_link2) { dd = ft_minmax(d->v_scale, TRUE); if (xlims[0] > dd[0]) xlims[0] = dd[0]; if (xlims[1] < dd[1]) xlims[1] = dd[1]; } for (d = vecs; d; d = d->v_link2) { if (d->v_scale->v_flags & VF_MINGIVEN) if (xlims[0] < d->v_scale->v_minsignal) xlims[0] = d->v_scale->v_minsignal; if (d->v_scale->v_flags & VF_MAXGIVEN) if (xlims[1] > d->v_scale->v_maxsignal) xlims[1] = d->v_scale->v_maxsignal; } } /* Do some coercion of the limits to make them reasonable. */ if ((xlims[0] == 0) && (xlims[1] == 0)) { xlims[0] = -1.0; xlims[1] = 1.0; } if ((ylims[0] == 0) && (ylims[1] == 0)) { ylims[0] = -1.0; ylims[1] = 1.0; } if (xlims[0] > xlims[1]) { SWAP(double, xlims[0], xlims[1]); } if (ylims[0] > ylims[1]) { SWAP(double, ylims[0], ylims[1]); } if (AlmostEqualUlps(xlims[0], xlims[1], 10)) { xlims[0] *= (xlims[0] > 0) ? 0.9 : 1.1; xlims[1] *= (xlims[1] > 0) ? 1.1 : 0.9; } if (AlmostEqualUlps(ylims[0], ylims[1], 10)) { ylims[0] *= (ylims[0] > 0) ? 0.9 : 1.1; ylims[1] *= (ylims[1] > 0) ? 1.1 : 0.9; } if ((xlims[0] <= 0.0) && ((gtype == GRID_XLOG) || (gtype == GRID_LOGLOG))) { fprintf(cp_err, "Error: X values must be > 0 for log scale\n"); goto quit; } if ((ylims[0] <= 0.0) && ((gtype == GRID_YLOG) || (gtype == GRID_LOGLOG))) { fprintf(cp_err, "Error: Y values must be > 0 for log scale\n"); goto quit; } /* Fix the plot limits for smith and polar grids. */ if ((!xlim || !ylim) && (gtype == GRID_POLAR)) { double mx, my, rad; /* (0,0) must be in the center of the screen. */ mx = (fabs(xlims[0]) > fabs(xlims[1])) ? fabs(xlims[0]) : fabs(xlims[1]); my = (fabs(ylims[0]) > fabs(ylims[1])) ? fabs(ylims[0]) : fabs(ylims[1]); /* rad = (mx > my) ? mx : my; */ /* AM.Roldán * Change this reason that this was discussed, as in the case of 1 + i want to plot point * is outside the drawing area so I'll stay as the maximum size of the hypotenuse of * the complex value */ rad = hypot(mx, my); xlims[0] = - rad; xlims[1] = rad; ylims[0] = - rad; ylims[1] = rad; } else if ((!xlim || !ylim) && (gtype == GRID_SMITH || gtype == GRID_SMITHGRID)) { xlims[0] = -1.0; xlims[1] = 1.0; ylims[0] = -1.0; ylims[1] = 1.0; } if (xlim) tfree(xlim); if (ylim) tfree(ylim); /* Sanity check: scale and vector may differ, if user assembles a single graph from different plots */ if(!oneval) { int firstscalelength = vecs->v_scale->v_length; for (d = vecs; d; d = d->v_link2) if (firstscalelength != d->v_length) { fprintf(cp_err, "\nWarning: length of vector %s and its scale differ.\n", d->v_name); /* Do not plot when strict_errorhandling is set */ if (ft_stricterror) { fprintf(cp_err, " Cannot plot!\n"); goto quit; } else fprintf(cp_err, " Check the plot data!\n"); } } /* We don't want to try to deal with smith plots for asciiplot. */ if (devname && eq(devname, "lpr")) { /* check if we should (can) linearize */ if (ft_curckt && ft_curckt->ci_ckt && (strcmp(ft_curckt->ci_name, plot_cur->pl_title) == 0) && if_tranparams(ft_curckt, &tstart, &tstop, &tstep) && ((tstop - tstart) * tstep > 0.0) && ((tstop - tstart) >= tstep) && plot_cur && plot_cur->pl_dvecs && plot_cur->pl_scale && isreal(plot_cur->pl_scale) && ciprefix("tran", plot_cur->pl_typename)) { int newlen = (int)((tstop - tstart) / tstep + 1.5); double *newscale; struct dvec *v, *newv_scale = dvec_alloc(copy(vecs->v_scale->v_name), vecs->v_scale->v_type, vecs->v_scale->v_flags, newlen, NULL); newv_scale->v_gridtype = vecs->v_scale->v_gridtype; newscale = newv_scale->v_realdata; for (i = 0, ttime = tstart; i < newlen; i++, ttime += tstep) newscale[i] = ttime; for (v = vecs; v; v = v->v_link2) { double *newdata = TMALLOC(double, newlen); if (!ft_interpolate(v->v_realdata, newdata, v->v_scale->v_realdata, v->v_scale->v_length, newscale, newlen, 1)) { fprintf(cp_err, "Error: can't interpolate %s\n", v->v_name); goto quit; } dvec_realloc(v, newlen, newdata); /* Why go to all this trouble if agraf ignores it? */ nointerp = TRUE; } vecs->v_scale = newv_scale; } ft_agraf(xlims, ylims, vecs->v_scale, vecs->v_plot, vecs, xdelta ? *xdelta : 0.0, ydelta ? *ydelta : 0.0, ((gtype == GRID_XLOG) || (gtype == GRID_LOGLOG)), ((gtype == GRID_YLOG) || (gtype == GRID_LOGLOG)), nointerp); rtn = TRUE; goto quit; } /* See if there is one common v_type we can give for the y scale... */ for (d = vecs->v_link2; d; d = d->v_link2) if (d->v_type != vecs->v_type) break; y_type = d ? SV_NOTYPE : vecs->v_type; #ifndef X_DISPLAY_MISSING if (devname && eq(devname, "xgraph")) { /* Interface to XGraph-11 Plot Program */ ft_xgraph(xlims, ylims, hcopy, title ? title : vecs->v_plot->pl_title, xlabel ? xlabel : ft_typabbrev(vecs->v_scale->v_type), ylabel ? ylabel : ft_typabbrev(y_type), gtype, ptype, vecs); rtn = TRUE; goto quit; } #endif if (devname && eq(devname, "gnuplot")) { /* Interface to Gnuplot Plot Program */ ft_gnuplot(xlims, ylims, hcopy, title ? title : vecs->v_plot->pl_title, xlabel ? xlabel : ft_typabbrev(vecs->v_scale->v_type), ylabel ? ylabel : ft_typabbrev(y_type), gtype, ptype, vecs); rtn = TRUE; goto quit; } if (devname && eq(devname, "writesimple")) { /* Interface to simple write output */ ft_writesimple(xlims, ylims, hcopy, title ? title : vecs->v_plot->pl_title, xlabel ? xlabel : ft_typabbrev(vecs->v_scale->v_type), ylabel ? ylabel : ft_typabbrev(y_type), gtype, ptype, vecs); rtn = TRUE; goto quit; } #ifdef TCL_MODULE if (devname && eq(devname, "blt")) { /* Just send the pairs to Tcl/Tk */ for (d = vecs; d; d = d->v_link2) blt_plot(d, oneval ? NULL : d->v_scale, (d == vecs) ? 1 : 0); rtn = TRUE; goto quit; } #endif for (d = vecs, i = 0; d; d = d->v_link2) i++; /* Figure out the X name and the X type. This is sort of bad... */ xn = vecs->v_scale->v_name; xt = vecs->v_scale->v_type; pname = plot_cur->pl_typename; if (!gr_init(xlims, ylims, (oneval ? NULL : xn), title ? title : vecs->v_plot->pl_title, hcopy, i, xdelta ? *xdelta : 0.0, ydelta ? *ydelta : 0.0, gtype, ptype, xlabel, ylabel, xt, y_type, pname, cline)) goto quit; /* Now plot all the graphs. */ for (d = vecs; d; d = d->v_link2) ft_graf(d, oneval ? NULL : d->v_scale, FALSE); gr_clean(); rtn = TRUE; quit: tfree(cline); free_pnode(names); FREE(title); quit1: wl_free(wl); return rtn; } tmpk8ny_4pz/src/frontend/plotting/pvec.h0000644000175000017500000000015513546075722020535 0ustar carstencarsten#ifndef ngspice_PVEC_H #define ngspice_PVEC_H #include "ngspice/dvec.h" void pvec(struct dvec *d); #endif tmpk8ny_4pz/src/frontend/plotting/clip.c0000644000175000017500000001332013546075722020520 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1986 Wayne A. Christopyher, U. C. Berkeley CAD Group Author: 1982 Giles Billingsley **********/ /* * Some routines to do clipping of polygons, etc to boxes. Most of this code * was rescued from MFB: * sccsid "@(#)mfbclip.c 1.2 12/21/83" */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "clip.h" #define POLYGONBUFSIZE 512 /* XXX */ #define CODEMINX 1 #define CODEMINY 2 #define CODEMAXX 4 #define CODEMAXY 8 #define CODE(x, y, c) \ do { \ c = 0; \ if (x < l) \ c = CODEMINX; \ else if (x > r) \ c = CODEMAXX; \ if (y < b) \ c |= CODEMINY; \ else if (y > t) \ c |= CODEMAXY; \ } while(0) /* clip_line will clip a line to a rectangular area. The returned * value is 'TRUE' if the line is out of the AOI (therefore does not * need to be displayed) and 'FALSE' if the line is in the AOI. */ bool clip_line(int *pX1, int *pY1, int *pX2, int *pY2, int l, int b, int r, int t) { int x1 = *pX1; int y1 = *pY1; int x2 = *pX2; int y2 = *pY2; int x = 0, y = 0; int c, c1, c2; CODE(x1, y1, c1); CODE(x2, y2, c2); while (c1 || c2) { if (c1 & c2) return (TRUE); /* Line is invisible. */ if ((c = c1) == 0) c = c2; if (c & CODEMINX) { y = y1+(y2-y1)*(l-x1)/(x2-x1); x = l; } else if (c & CODEMAXX) { y = y1+(y2-y1)*(r-x1)/(x2-x1); x = r; } else if (c & CODEMINY) { x = x1+(x2-x1)*(b-y1)/(y2-y1); y = b; } else if (c & CODEMAXY) { x = x1+(x2-x1)*(t-y1)/(y2-y1); y = t; } if (c == c1) { x1 = x; y1 = y; CODE(x, y, c1); } else { x2 = x; y2 = y; CODE(x, y, c2); } } *pX1 = x1; *pY1 = y1; *pX2 = x2; *pY2 = y2; return (FALSE); /* Line is at least partially visible.*/ } /* This routine will clip a line to a circle, returning TRUE if the line * is entirely outside the circle. Note that we have to be careful not * to switch the points around, since in grid.c we need to know which is * the outer point for putting the label on. */ bool clip_to_circle(int *x1, int *y1, int *x2, int *y2, int cx, int cy, int rad) { double perplen, a, b, c; double tx, ty, dt; double dtheta; double theta1, theta2, tt, alpha, beta, gamma; bool flip = FALSE; /* Get the angles between the origin and the endpoints. */ if ((*x1-cx) || (*y1-cy)) theta1 = atan2((double) *y1 - cy, (double) *x1 - cx); else theta1 = M_PI; if ((*x2-cx) || (*y2-cy)) theta2 = atan2((double) *y2 - cy, (double) *x2 - cx); else theta2 = M_PI; if (theta1 < 0.0) theta1 = 2 * M_PI + theta1; if (theta2 < 0.0) theta2 = 2 * M_PI + theta2; dtheta = theta2 - theta1; if (dtheta > M_PI) dtheta = dtheta - 2 * M_PI; else if (dtheta < - M_PI) dtheta = 2 * M_PI - dtheta; /* Make sure that p1 is the first point */ if (dtheta < 0) { SWAP(double, theta1, theta2); SWAP(int, *x1, *x2); SWAP(int, *y1, *y2); flip = TRUE; dtheta = -dtheta; } /* Figure out the distances between the points */ a = hypot(*x1 - cx, *y1 - cy); b = hypot(*x2 - cx, *y2 - cy); c = hypot(*x1 - *x2, *y1 - *y2); /* We have three cases now -- either the midpoint of the line is * closest to the origon, or point 1 or point 2 is. Actually the * midpoint won't in general be the closest, but if a point besides * one of the endpoints is closest, the midpoint will be closer than * both endpoints. */ tx = (*x1 + *x2) / 2; ty = (*y1 + *y2) / 2; dt = hypot(tx - cx, ty - cy); if ((dt < a) && (dt < b)) { /* This is wierd -- round-off errors I guess. */ tt = (a * a + c * c - b * b) / (2 * a * c); if (tt > 1.0) tt = 1.0; else if (tt < -1.0) tt = -1.0; alpha = acos(tt); perplen = a * sin(alpha); } else if (a < b) { perplen = a; } else { perplen = b; } /* Now we should see if the line is outside of the circle */ if (perplen >= rad) return (TRUE); /* It's at least partially inside */ if (a > rad) { tt = (a * a + c * c - b * b) / (2 * a * c); if (tt > 1.0) tt = 1.0; else if (tt < -1.0) tt = -1.0; alpha = acos(tt); gamma = asin(sin(alpha) * a / rad); if (gamma < M_PI / 2) gamma = M_PI - gamma; beta = M_PI - alpha - gamma; *x1 = (int)(cx + rad * cos(theta1 + beta)); *y1 = (int)(cy + rad * sin(theta1 + beta)); } if (b > rad) { tt = (c * c + b * b - a * a) / (2 * b * c); if (tt > 1.0) tt = 1.0; else if (tt < -1.0) tt = -1.0; alpha = acos(tt); gamma = asin(sin(alpha) * b / rad); if (gamma < M_PI / 2) gamma = M_PI - gamma; beta = M_PI - alpha - gamma; *x2 = (int)(cx + rad * cos(theta2 - beta)); *y2 = (int)(cy + rad * sin(theta2 - beta)); } if (flip) { SWAP(int, *x1, *x2); SWAP(int, *y1, *y2); } return (FALSE); } tmpk8ny_4pz/src/frontend/plotting/plotcurv.c0000644000175000017500000002442713546075722021461 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Curve plotting routines and general (non-graphics) plotting things. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/graph.h" #include "graf.h" #include "ngspice/ftedbgra.h" #include "plotcurv.h" static void plotinterval(struct dvec *v, double lo, double hi, register double *coeffs, int degree, bool rotated); /* Plot the vector v, with scale xs. If we are doing curve-fitting, then * do some tricky stuff. */ void ft_graf(struct dvec *v, struct dvec *xs, bool nostart) { int degree, gridsize, length; register int i, j, l; double *scratch, *result, *gridbuf, *mm; register double *xdata, *ydata; bool rot, increasing = FALSE; double dx = 0.0, dy = 0.0, lx = 0.0, ly = 0.0; int dir; /* if already started, use saved degree */ if (nostart) { degree = currentgraph->degree; } else { if (!cp_getvar("polydegree", CP_NUM, °ree, 0)) degree = 1; currentgraph->degree = degree; } if (degree > v->v_length) degree = v->v_length; if (degree < 1) { fprintf(cp_err, "Error: polydegree is %d, can't plot...\n", degree); return; } if (!cp_getvar("gridsize", CP_NUM, &gridsize, 0)) gridsize = 0; if ((gridsize < 0) || (gridsize > 10000)) { fprintf(cp_err, "Error: bad grid size %d\n", gridsize); return; } if (gridsize && xs) { if (isreal(xs)) { increasing = (xs->v_realdata[0] < xs->v_realdata[1]); for (i = 0; i < xs->v_length - 1; i++) if (increasing != (xs->v_realdata[i] < xs->v_realdata[i + 1])) { fprintf(cp_err, "Warning: scale not monotonic, gridsize not relevant.\n"); gridsize = 0; break; } } else { increasing = (realpart(xs->v_compdata[0]) < realpart(xs->v_compdata[1])); for (i = 0; i < xs->v_length - 1; i++) if (increasing != (realpart(xs->v_compdata[i]) < realpart(xs->v_compdata[i + 1]))) { fprintf(cp_err, "Warning: scale not monotonic, gridsize not relevant.\n"); gridsize = 0; break; } } } if (!nostart) gr_start(v); /* Do the one value case */ if (!xs) { for (i = 0; i < v->v_length; i++) { /* We should do the one - point case too! * Important for pole-zero for example */ if (v->v_length == 1) { j = 0; } else { j = i-1; if (i == 0) continue; } if (isreal(v)) { /* This isn't good but we may as well do * something useful. */ gr_point(v, v->v_realdata[i], 0.0, /* v->v_realdata[i], */ v->v_realdata[j], 0.0, /* v->v_realdata[j], */ (j == i ? 1 : i)); } else { gr_point(v, realpart(v->v_compdata[i]), imagpart(v->v_compdata[i]), realpart(v->v_compdata[j]), imagpart(v->v_compdata[j]), (j == i ? 1 : i)); } } gr_end(v); return; } xs->v_flags |= VF_PERMANENT; /* First check the simple case, where we don't have to do any * interpolation. */ if ((degree == 1) && (gridsize == 0)) { bool mono = (currentgraph->plottype == PLOT_MONOLIN); dir = 0; for (i = 0, j = v->v_length; i < j; i++) { dx = isreal(xs) ? xs->v_realdata[i] : realpart(xs->v_compdata[i]); dy = isreal(v) ? v->v_realdata[i] : realpart(v->v_compdata[i]); if ((i == 0 || (dir > 0 ? lx > dx : dir < 0 ? lx < dx : 0)) && (mono || (xs->v_plot && xs->v_plot->pl_scale == xs))) { gr_point(v, dx, dy, lx, ly, 0); } else { gr_point(v, dx, dy, lx, ly, i); if (!dir) dir = lx > dx ? -1 : lx < dx ? 1 : 0; } lx = dx; ly = dy; } if (v->v_length == 1) gr_point(v, dx, dy, lx, ly, 1); gr_end(v); return; } if (gridsize < degree + 1) gridsize = 0; if (gridsize) { /* This is done quite differently from what we do below... */ gridbuf = TMALLOC(double, gridsize); result = TMALLOC(double, gridsize); if (isreal(v)) { ydata = v->v_realdata; } else { ydata = TMALLOC(double, v->v_length); for (i = 0; i < v->v_length; i++) ydata[i] = realpart(v->v_compdata[i]); } if (isreal(xs)) { xdata = xs->v_realdata; } else { xdata = TMALLOC(double, xs->v_length); for (i = 0; i < xs->v_length; i++) xdata[i] = realpart(xs->v_compdata[i]); } mm = ft_minmax(xs, TRUE); dx = (mm[1] - mm[0]) / gridsize; if (increasing) for (i = 0, dy = mm[0]; i < gridsize; i++, dy += dx) gridbuf[i] = dy; else for (i = 0, dy = mm[1]; i < gridsize; i++, dy -= dx) gridbuf[i] = dy; if (!ft_interpolate(ydata, result, xdata, v->v_length, gridbuf, gridsize, degree)) { fprintf(cp_err, "Error: can't put %s on gridsize %d\n", v->v_name, gridsize); return; } /* Now this is a problem. There's no way that we can * figure out where to put the tic marks to correspond with * the actual data... */ for (i = 0; i < gridsize; i++) gr_point(v, gridbuf[i], result[i], gridbuf[i ? (i - 1) : i], result[i ? (i - 1) : i], -1); gr_end(v); tfree(gridbuf); tfree(result); if (!isreal(v)) tfree(ydata); if (!isreal(xs)) tfree(xdata); return; } /* We need to do curve fitting now. First get some scratch * space */ scratch = TMALLOC(double, (degree + 1) * (degree + 2)); result = TMALLOC(double, degree + 1); xdata = TMALLOC(double, degree + 1); ydata = TMALLOC(double, degree + 1); /* Plot the first degree segments... */ if (isreal(v)) memcpy(ydata, v->v_realdata, (size_t)(degree + 1) * sizeof(double)); else for (i = 0; i <= degree; i++) ydata[i] = realpart(v->v_compdata[i]); if (isreal(xs)) memcpy(xdata, xs->v_realdata, (size_t)(degree + 1) * sizeof(double)); else for (i = 0; i <= degree; i++) xdata[i] = realpart(xs->v_compdata[i]); rot = FALSE; while (!ft_polyfit(xdata, ydata, result, degree, scratch)) { /* Rotate the coordinate system 90 degrees and try again. * If it doesn't work this time, bump the interpolation * degree down by one... */ if (ft_polyfit(ydata, xdata, result, degree, scratch)) { rot = TRUE; break; } if (--degree == 0) { fprintf(cp_err, "plotcurve: Internal Error: ack...\n"); return; } } /* Plot this part of the curve... */ for (i = 0; i < degree; i++) if (rot) plotinterval(v, ydata[i], ydata[i + 1], result, degree, TRUE); else plotinterval(v, xdata[i], xdata[i + 1], result, degree, FALSE); /* Now plot the rest, piece by piece... l is the * last element under consideration. */ length = v->v_length; for (l = degree + 1; l < length; l++) { /* Shift the old stuff by one and get another value. */ for (i = 0; i < degree; i++) { xdata[i] = xdata[i + 1]; ydata[i] = ydata[i + 1]; } if (isreal(v)) ydata[i] = v->v_realdata[l]; else ydata[i] = realpart(v->v_compdata[l]); if (isreal(xs)) xdata[i] = xs->v_realdata[l]; else xdata[i] = realpart(xs->v_compdata[l]); rot = FALSE; while (!ft_polyfit(xdata, ydata, result, degree, scratch)) { if (ft_polyfit(ydata, xdata, result, degree, scratch)) { rot = TRUE; break; } if (--degree == 0) { fprintf(cp_err, "plotcurve: Internal Error: ack...\n"); return; } } if (rot) plotinterval(v, ydata[degree - 1], ydata[degree], result, degree, TRUE); else plotinterval(v, xdata[degree - 1], xdata[degree], result, degree, FALSE); } tfree(scratch); tfree(xdata); tfree(ydata); tfree(result); gr_end(v); } #define GRANULARITY 10 static void plotinterval(struct dvec *v, double lo, double hi, register double *coeffs, int degree, bool rotated) { double incr, dx, dy, lx, ly; register int i; int steps; /* fprintf(cp_err, "plotinterval(%s, %G, %G, [ ", v->v_name, lo, hi); for (i = 0; i <= degree; i++) fprintf(cp_err, "%G ", coeffs[i]); fprintf(cp_err, "], %d, %s)\n\r", degree, rotated ? "TRUE" : "FALSE"); */ /* This is a problem -- how do we know what granularity to use? If * the guy cares about this he will use gridsize. */ if (!cp_getvar("polysteps", CP_NUM, &steps, 0)) steps = GRANULARITY; incr = (hi - lo) / (double) (steps + 1); dx = lo + incr; lx = lo; ly = ft_peval(lo, coeffs, degree); for (i = 0; i <= steps; i++, dx += incr) { dy = ft_peval(dx, coeffs, degree); if (rotated) gr_point(v, dy, dx, ly, lx, -1); else gr_point(v, dx, dy, lx, ly, -1); lx = dx; ly = dy; /* fprintf(cp_err, "plot (%G, %G)\n\r", dx, dy); */ } } tmpk8ny_4pz/src/frontend/plotting/plotting.c0000644000175000017500000000064513546075722021437 0ustar carstencarsten#include "ngspice/ngspice.h" #include "plotting.h" /* Where 'constants' go when defined on initialization. */ struct plot constantplot = { "Constant values", Spice_Build_Date, "constants", "const", NULL, NULL, NULL, NULL, NULL, NULL, NULL, TRUE, FALSE, 0 }; struct plot *plot_cur = &constantplot; struct plot *plot_list = &constantplot; int plotl_changed; /* TRUE after a load */ int plot_num = 1; tmpk8ny_4pz/src/frontend/plotting/x11.h0000644000175000017500000000127713546075722020217 0ustar carstencarsten/************* * Header file for x11.c * 1999 E. Rouat ************/ #ifndef ngspice_X11_H #define ngspice_X11_H #ifndef X_DISPLAY_MISSING disp_fn_Init_t X11_Init; disp_fn_NewViewport_t X11_NewViewport; disp_fn_Close_t X11_Close; disp_fn_DrawLine_t X11_DrawLine; disp_fn_Arc_t X11_Arc; disp_fn_Text_t X11_Text; disp_fn_DefineColor_t X11_DefineColor; disp_fn_DefineLinestyle_t X11_DefineLinestyle; disp_fn_SetLinestyle_t X11_SetLinestyle; disp_fn_SetColor_t X11_SetColor; disp_fn_Update_t X11_Update; disp_fn_Clear_t X11_Clear; int X11_Input(REQUEST *request, RESPONSE *response); #endif #endif tmpk8ny_4pz/src/frontend/plotting/graphdb.c0000644000175000017500000001422213546075722021202 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ /* Manage graph data structure. */ #include "ngspice/ngspice.h" #include "ngspice/graph.h" #include "ngspice/ftedebug.h" #include "ngspice/fteext.h" #include "ngspice/ftedbgra.h" #include "graphdb.h" #include "../breakp2.h" #include "../display.h" /* invariant: currentgraph contains the current graph */ GRAPH *currentgraph; /* * We use a linked list rather than a circular one because we * expect few links per list and we don't need to add at the * end of a list (we can add at the beginning). */ /* linked list of graphs */ typedef struct listgraph { /* we use GRAPH here instead of a pointer to save a tmalloc */ GRAPH graph; struct listgraph *next; } LISTGRAPH; #define NUMGBUCKETS 16 typedef struct gbucket { LISTGRAPH *list; } GBUCKET; static GBUCKET GBucket[NUMGBUCKETS]; /* note: Zero is not a valid id. This is used in plot() in graf.c. */ static int RunningId = 1; /* initialize graph structure */ #define SETGRAPH(pgraph, id) \ do { \ (pgraph)->graphid = (id); \ (pgraph)->degree = 1; \ (pgraph)->linestyle = -1; \ } while(0) /* returns NULL on error */ GRAPH * NewGraph(void) { GRAPH *pgraph; LISTGRAPH *list; int BucketId = RunningId % NUMGBUCKETS; if ((list = TMALLOC(LISTGRAPH, 1)) == NULL) { internalerror("can't allocate a listgraph"); return (NULL); } pgraph = &list->graph; SETGRAPH(pgraph, RunningId); if (!GBucket[BucketId].list) { GBucket[BucketId].list = list; } else { /* insert at front of current list */ list->next = GBucket[BucketId].list; GBucket[BucketId].list = list; } RunningId++; return (pgraph); } /* Given graph id, return graph */ GRAPH * FindGraph(int id) { LISTGRAPH *list; for (list = GBucket[id % NUMGBUCKETS].list; list && list->graph.graphid != id; list = list->next) ; if (list) return (&list->graph); else return (NULL); } GRAPH * CopyGraph(GRAPH *graph) { GRAPH *ret; struct _keyed *k; struct dveclist *link, *newlink; if (!graph) return NULL; ret = NewGraph(); memcpy(ret, graph, sizeof(GRAPH)); /* va: compatible pointer types */ ret->graphid = RunningId - 1; /* restore id */ /* copy keyed */ for (ret->keyed = NULL, k = graph->keyed; k; k = k->next) SaveText(ret, k->text, k->x, k->y); /* copy dvecs */ ret->plotdata = NULL; for (link = graph->plotdata; link; link = link->next) { newlink = TMALLOC(struct dveclist, 1); newlink->next = ret->plotdata; newlink->vector = vec_copy(link->vector); /* vec_copy doesn't set v_color or v_linestyle */ newlink->vector->v_color = link->vector->v_color; newlink->vector->v_linestyle = link->vector->v_linestyle; newlink->vector->v_flags |= VF_PERMANENT; ret->plotdata = newlink; } ret->commandline = copy(graph->commandline); ret->plotname = copy(graph->plotname); return (ret); } int DestroyGraph(int id) { LISTGRAPH *list, *lastlist; struct _keyed *k, *nextk; struct dveclist *d, *nextd; struct dbcomm *db; list = GBucket[id % NUMGBUCKETS].list; lastlist = NULL; while (list) { if (list->graph.graphid == id) { /* found it */ /* Fix the iplot/trace dbs list */ for (db = dbs; db && db->db_graphid != id; db = db->db_next) ; if (db && (db->db_type == DB_IPLOT || db->db_type == DB_IPLOTALL)) { db->db_type = DB_DEADIPLOT; /* Delete this later */ return (0); } /* adjust bucket pointers */ if (lastlist) lastlist->next = list->next; else GBucket[id % NUMGBUCKETS].list = list->next; /* run through and de-allocate dynamically allocated keyed list */ k = list->graph.keyed; while (k) { nextk = k->next; tfree(k->text); tfree(k); k = nextk; } /* de-allocate dveclist */ d = list->graph.plotdata; while (d) { nextd = d->next; dvec_free(d->vector); tfree(d); d = nextd; } tfree(list->graph.commandline); tfree(list->graph.plotname); /* If device dependent space allocated, free it. */ if (list->graph.devdep) tfree(list->graph.devdep); tfree(list); return (1); } lastlist = list; list = list->next; } internalerror("tried to destroy non-existent graph"); return (0); } /* free up all dynamically allocated data structures */ void FreeGraphs(void) { GBUCKET *gbucket; LISTGRAPH *list, *deadl; for (gbucket = GBucket; gbucket < &GBucket[NUMGBUCKETS]; gbucket++) { list = gbucket->list; while (list) { deadl = list; list = list->next; tfree(deadl); } } } void SetGraphContext(int graphid) { currentgraph = FindGraph(graphid); } typedef struct gcstack { GRAPH *pgraph; struct gcstack *next; } GCSTACK; GCSTACK *gcstacktop; /* note: This Push and Pop has tricky semantics. Push(graph) will push the currentgraph onto the stack and set currentgraph to graph. Pop() simply sets currentgraph to the top of the stack and pops stack. */ void PushGraphContext(GRAPH *graph) { GCSTACK *gcstack = TMALLOC(GCSTACK, 1); if (!gcstacktop) { gcstacktop = gcstack; } else { gcstack->next = gcstacktop; gcstacktop = gcstack; } gcstacktop->pgraph = currentgraph; currentgraph = graph; } void PopGraphContext(void) { GCSTACK *dead; currentgraph = gcstacktop->pgraph; dead = gcstacktop; gcstacktop = gcstacktop->next; tfree(dead); } tmpk8ny_4pz/src/frontend/plotting/plot5.h0000644000175000017500000000103213546075722020636 0ustar carstencarsten/************* * Header file for plot5.c * 1999 E. Rouat ************/ #ifndef ngspice_PLOT5_H #define ngspice_PLOT5_H disp_fn_Init_t Plt5_Init; disp_fn_NewViewport_t Plt5_NewViewport; disp_fn_Close_t Plt5_Close; disp_fn_Clear_t Plt5_Clear; disp_fn_DrawLine_t Plt5_DrawLine; disp_fn_Arc_t Plt5_Arc; disp_fn_Text_t Plt5_Text; disp_fn_SetLinestyle_t Plt5_SetLinestyle; disp_fn_SetColor_t Plt5_SetColor; disp_fn_Update_t Plt5_Update; #endif tmpk8ny_4pz/src/frontend/plotting/xgraph.c0000644000175000017500000001043513546075722021066 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 David A. Gates, U. C. Berkeley CAD Group **********/ /* * Xgraph-11 plots. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/fteparse.h" #include "xgraph.h" #define XG_MAXVECTORS 64 void ft_xgraph(double *xlims, double *ylims, char *filename, char *title, char *xlabel, char *ylabel, GRIDTYPE gridtype, PLOTTYPE plottype, struct dvec *vecs) { FILE *file; struct dvec *v, *scale; double xval, yval; int i, numVecs, linewidth; bool xlog, ylog, nogrid, markers; char buf[BSIZE_SP], pointstyle[BSIZE_SP], *text; /* Sanity checking. */ for (v = vecs, numVecs = 0; v; v = v->v_link2) numVecs++; if (numVecs == 0) { return; } else if (numVecs > XG_MAXVECTORS) { fprintf(cp_err, "Error: too many vectors for Xgraph.\n"); return; } if (!cp_getvar("xbrushwidth", CP_NUM, &linewidth, 0)) linewidth = 1; if (linewidth < 1) linewidth = 1; if (!cp_getvar("pointstyle", CP_STRING, pointstyle, sizeof(pointstyle))) { markers = FALSE; } else { if (cieq(pointstyle, "markers")) markers = TRUE; else markers = FALSE; } /* Make sure the gridtype is supported. */ switch (gridtype) { case GRID_LIN: nogrid = xlog = ylog = FALSE; break; case GRID_XLOG: xlog = TRUE; nogrid = ylog = FALSE; break; case GRID_YLOG: ylog = TRUE; nogrid = xlog = FALSE; break; case GRID_LOGLOG: xlog = ylog = TRUE; nogrid = FALSE; break; case GRID_NONE: nogrid = TRUE; xlog = ylog = FALSE; break; default: fprintf(cp_err, "Error: grid type unsupported by Xgraph.\n"); return; } /* Open the output file. */ if ((file = fopen(filename, "w")) == NULL) { perror(filename); return; } /* Set up the file header. */ if (title) { text = cp_unquote(title); fprintf(file, "TitleText: %s\n", text); tfree(text); } if (xlabel) { text = cp_unquote(xlabel); fprintf(file, "XUnitText: %s\n", text); tfree(text); } if (ylabel) { text = cp_unquote(ylabel); fprintf(file, "YUnitText: %s\n", text); tfree(text); } if (nogrid) { fprintf(file, "Ticks: True\n"); } if (xlog) { fprintf(file, "LogX: True\n"); if (xlims) { fprintf(file, "XLowLimit: % e\n", log10(xlims[0])); fprintf(file, "XHighLimit: % e\n", log10(xlims[1])); } } else { if (xlims) { fprintf(file, "XLowLimit: % e\n", xlims[0]); fprintf(file, "XHighLimit: % e\n", xlims[1]); } } if (ylog) { fprintf(file, "LogY: True\n"); if (ylims) { fprintf(file, "YLowLimit: % e\n", log10(ylims[0])); fprintf(file, "YHighLimit: % e\n", log10(ylims[1])); } } else { if (ylims) { fprintf(file, "YLowLimit: % e\n", ylims[0]); fprintf(file, "YHighLimit: % e\n", ylims[1]); } } fprintf(file, "LineWidth: %d\n", linewidth); fprintf(file, "BoundBox: True\n"); if (plottype == PLOT_COMB) { fprintf(file, "BarGraph: True\n"); fprintf(file, "NoLines: True\n"); } else if (plottype == PLOT_POINT) { if (markers) fprintf(file, "Markers: True\n"); else fprintf(file, "LargePixels: True\n"); fprintf(file, "NoLines: True\n"); } /* Write out the data. */ for (v = vecs; v; v = v->v_link2) { scale = v->v_scale; if (v->v_name) fprintf(file, "\"%s\"\n", v->v_name); for (i = 0; i < scale->v_length; i++) { xval = isreal(scale) ? scale->v_realdata[i] : realpart(scale->v_compdata[i]); yval = isreal(v) ? v->v_realdata[i] : realpart(v->v_compdata[i]); fprintf(file, "% e % e\n", xval, yval); } fprintf(file, "\n"); } (void) fclose(file); (void) sprintf(buf, "xgraph %s &", filename); (void) system(buf); } tmpk8ny_4pz/src/frontend/plotting/plotting.h0000644000175000017500000000017313546075722021440 0ustar carstencarsten#ifndef ngspice_PLOTTING_H #define ngspice_PLOTTING_H #include "ngspice/plot.h" extern struct plot constantplot; #endif tmpk8ny_4pz/src/frontend/plotting/ChangeLog0000644000175000017500000000053613546075722021204 0ustar carstencarsten2002-01-03 Paolo Nenzi * graf.c: Added code to support Windows (Holger Vogt patch). 2000-10-10 Arno W. Peters * graf.c: Removed need to press return after resizing the plot window. 2000-05-22 Paolo Nenzi * x11.c: Applied Widlok patch and reintroduced some #ifdef notdef code. tmpk8ny_4pz/src/frontend/plotting/xgraph.h0000644000175000017500000000050513546075722021070 0ustar carstencarsten/************* * Header file for xgraph.c * 1999 E. Rouat ************/ #ifndef ngspice_XGRAPH_H #define ngspice_XGRAPH_H void ft_xgraph(double *xlims, double *ylims, char *filename, char *title, char *xlabel, char *ylabel, GRIDTYPE gridtype, PLOTTYPE plottype, struct dvec *vecs); #endif tmpk8ny_4pz/src/frontend/plotting/gnuplot.h0000644000175000017500000000102613546075722021266 0ustar carstencarsten/************* * Header file for gnuplot.c * 2008 Stefano Pedretti ************/ #ifndef ngspice_GNUPLOT_H #define ngspice_GNUPLOT_H void ft_gnuplot(double *xlims, double *ylims, char *filename, char *title, char *xlabel, char *ylabel, GRIDTYPE gridtype, PLOTTYPE plottype, struct dvec *vecs); void ft_writesimple(double *xlims, double *ylims, char *filename, char *title, char *xlabel, char *ylabel, GRIDTYPE gridtype, PLOTTYPE plottype, struct dvec *vecs); #endif tmpk8ny_4pz/src/frontend/plotting/clip.h0000644000175000017500000000020213546075722020520 0ustar carstencarsten/************* * Header file for clip.c * 1999 E. Rouat ************/ #ifndef ngspice_CLIP_H #define ngspice_CLIP_H #endif tmpk8ny_4pz/src/frontend/plotting/graphdb.h0000644000175000017500000000043713546075722021212 0ustar carstencarsten/************* * Header file for graphdb.c * 1999 E. Rouat ************/ #ifndef ngspice_GRAPHDB_H #define ngspice_GRAPHDB_H int DestroyGraph(int id); void FreeGraphs(void); void SetGraphContext(int graphid); void PushGraphContext(GRAPH *graph); void PopGraphContext(void); #endif tmpk8ny_4pz/src/frontend/plotting/graf.c0000644000175000017500000010004513546075722020511 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jeffrey M. Hsu **********/ /* * Most of the gr_ module resides here, in particular, gr_init * and gr_point, expect for the gr_ grid routines. * */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" /* for CP_ */ #include "ngspice/cpextern.h" #include "ngspice/plot.h" #include "ngspice/ftedebug.h" /* for iplot */ #include "ngspice/dvec.h" /* for struct dvec */ #include "ngspice/ftedefs.h" /* for FTEextern.h and IPOINT{MIN,MAX} */ #include "ngspice/fteinput.h" #include "ngspice/graph.h" #include "ngspice/ftedbgra.h" #include "ngspice/ftedev.h" #include "ngspice/sim.h" #include #include "graf.h" #include "graphdb.h" #include "ngspice/grid.h" #include "../terminal.h" #include "../breakp2.h" #include "../display.h" #include "../runcoms.h" #include "ngspice/stringskip.h" static void gr_start_internal(struct dvec *dv, bool copyvec); static int iplot(struct plot *pl, int id); static void set(struct plot *plot, struct dbcomm *db, bool unset, short mode); static char *getitright(char *buf, double num); /* for legends, set in gr_start, reset in gr_iplot and gr_init */ static struct { int plotno; int color; /* for assigning unique colors */ int linestyle; /* for assigning line styles */ } cur; /* invariant: currentgraph contains the current graph */ /* These are what gets plotted as points when you specify point plots */ static char pointchars[128]; #define DEFPOINTCHARS "ox+#*abcdefhgijklmnpqrstuvwyz" /* Buffer for ticmarks if given a list */ static char ticbuf[1024]; static char *ticlist = ticbuf; #define MAXTICS 100 #define XFACTOR 1 /* How much to expand the X scale during iplot. */ #define YFACTOR 0.2 /* How much to expand the Y scale during iplot. */ /* * Start of a new graph. * Fill in the data that gets displayed. * Difference from old gr_init * we don't try to determine the look of the screen from here * leave to lower level routines * */ int gr_init(double *xlims, double *ylims, /* The size of the screen. */ char *xname, char *plotname, /* What to label things. */ char *hcopy, /* The raster file. */ int nplots, /* How many plots there will be. */ double xdelta, double ydelta, /* Line increments for the scale. */ GRIDTYPE gridtype, /* The grid type */ PLOTTYPE plottype, /* and the plot type. */ char *xlabel, char *ylabel, /* Labels for axes. */ int xtype, int ytype, /* The types of the data graphed. */ char *pname, char *commandline) /* For xi_zoomdata() */ { GRAPH *graph; wordlist *wl; char *comb_title; NG_IGNORE(nplots); if ((graph = NewGraph()) == NULL) return (FALSE); /* The global currentgraph will always be the current graph. */ SetGraphContext(graph->graphid); graph->onevalue = (xname ? FALSE : TRUE); /* communicate filename to plot 5 driver */ if (hcopy) graph->devdep = hcopy; cur.plotno = 0; /* note: should do only once, maybe in gr_init_once */ if (!cp_getvar("pointchars", CP_STRING, pointchars, sizeof(pointchars))) (void) strcpy(pointchars, DEFPOINTCHARS); if (!cp_getvar("ticmarks", CP_NUM, &graph->ticmarks, 0)) { if (cp_getvar("ticmarks", CP_BOOL, NULL, 0)) graph->ticmarks = 10; else graph->ticmarks = 0; } if (cp_getvar("ticlist", CP_LIST, ticlist, 0)) { wl = vareval("ticlist"); ticlist = wl_flatten(wl); graph->ticdata = readtics(ticlist); } else { graph->ticdata = NULL; } if (!xlims || !ylims) { internalerror("gr_init: no range specified"); return (FALSE); } /* save upper and lower limits */ graph->data.xmin = xlims[0]; graph->data.xmax = xlims[1]; graph->data.ymin = ylims[0]; graph->data.ymax = ylims[1]; /* get title into plot window */ if (!pname) pname = "(unknown)"; if (!plotname) plotname = "(unknown)"; comb_title = tprintf("%s: %s", pname, plotname); graph->plotname = comb_title; /* note: have enum here or some better convention */ if (NewViewport(graph) == 1) { /* note: where is the error message generated? */ /* note: undo tmallocs */ fprintf(cp_err, "Can't open viewport for graphics.\n"); return (FALSE); } /* layout decisions */ /* note: have to do before gr_fixgrid and after NewViewport */ graph->viewportxoff = graph->fontwidth * 8; /* 8 lines on left */ graph->viewportyoff = graph->fontheight * 4; /* 4 on bottom */ DevClear(); graph->grid.gridtype = gridtype; graph->plottype = plottype; graph->grid.xdatatype = xtype; graph->grid.ydatatype = ytype; graph->grid.xdelta = xdelta; graph->grid.ydelta = ydelta; graph->grid.ysized = 0; graph->grid.xsized = 0; if (!graph->onevalue) { if (xlabel) graph->grid.xlabel = xlabel; else graph->grid.xlabel = xname; if (ylabel) graph->grid.ylabel = ylabel; } else { if (xlabel) graph->grid.xlabel = xlabel; else graph->grid.xlabel = "real"; if (ylabel) graph->grid.ylabel = ylabel; else graph->grid.ylabel = "imag"; } gr_resize_internal(graph); gr_redrawgrid(graph); /* Set up colors and line styles. */ if (dispdev->numlinestyles == 1) cur.linestyle = 0; /* Use the same one all the time. */ else cur.linestyle = 1; /* XXX Special exception for SMITH */ if (dispdev->numcolors > 2 && (graph->grid.gridtype == GRID_SMITH || graph->grid.gridtype == GRID_SMITHGRID)) { cur.color = 3; } else { cur.color = 1; } graph->commandline = copy(commandline); return (TRUE); } /* * Add a point to the curve we're currently drawing. * Should be in between a gr_init() and a gr_end() * expect when iplotting, very bad hack * Differences from old gr_point: * We save points here, instead of in lower levels. * Assume we are in right context * Save points in data space (not screen space). * We pass two points in so we can multiplex plots. * */ void gr_point(struct dvec *dv, double newx, double newy, double oldx, double oldy, int np) { int oldtox, oldtoy; /* value before clipping */ char pointc[2]; int fromx, fromy, tox, toy; int ymin, dummy; DatatoScreen(currentgraph, oldx, oldy, &fromx, &fromy); DatatoScreen(currentgraph, newx, newy, &tox, &toy); /* note: we do not particularly want to clip here */ oldtox = tox; oldtoy = toy; if (!currentgraph->grid.circular) { if (clip_line(&fromx, &fromy, &tox, &toy, currentgraph->viewportxoff, currentgraph->viewportyoff, currentgraph->viewport.width + currentgraph->viewportxoff, currentgraph->viewport.height + currentgraph->viewportyoff)) return; } else { if (clip_to_circle(&fromx, &fromy, &tox, &toy, currentgraph->grid.xaxis.circular.center, currentgraph->grid.yaxis.circular.center, currentgraph->grid.xaxis.circular.radius)) return; } if (currentgraph->plottype != PLOT_POINT) { SetLinestyle(dv->v_linestyle); } else { /* if PLOT_POINT, don't want to plot an endpoint which have been clipped */ if (tox != oldtox || toy != oldtoy) return; } SetColor(dv->v_color); switch (currentgraph->plottype) { double *tics; case PLOT_LIN: case PLOT_MONOLIN: /* If it's a linear plot, ignore first point since we don't want to connect with oldx and oldy. */ if (np) DevDrawLine(fromx, fromy, tox, toy); if ((tics = currentgraph->ticdata) != NULL) { for (; *tics < HUGE; tics++) if (*tics == (double) np) { DevDrawText("x", (int) (tox - currentgraph->fontwidth / 2), (int) (toy - currentgraph->fontheight / 2), 0); /* gr_redraw will redraw this w/o our having to save it Guenther Roehrich 22-Jan-99 */ /* SaveText(currentgraph, "x", (int) (tox - currentgraph->fontwidth / 2), (int) (toy - currentgraph->fontheight / 2)); */ break; } } else if ((currentgraph->ticmarks >0) && (np > 0) && (np % currentgraph->ticmarks == 0)) { /* Draw an 'x' */ DevDrawText("x", (int) (tox - currentgraph->fontwidth / 2), (int) (toy - currentgraph->fontheight / 2), 0); /* gr_redraw will redraw this w/o our having to save it Guenther Roehrich 22-Jan-99 */ /* SaveText(currentgraph, "x", (int) (tox - currentgraph->fontwidth / 2), (int) (toy - currentgraph->fontheight / 2)); */ } break; case PLOT_COMB: DatatoScreen(currentgraph, 0.0, currentgraph->datawindow.ymin, &dummy, &ymin); DevDrawLine(tox, ymin, tox, toy); break; case PLOT_POINT: /* Here, gi_linestyle is the character used for the point. */ pointc[0] = (char) dv->v_linestyle; pointc[1] = '\0'; DevDrawText(pointc, (int) (tox - currentgraph->fontwidth / 2), (int) (toy - currentgraph->fontheight / 2), 0); default: break; } } static void gr_start_internal(struct dvec *dv, bool copyvec) { struct dveclist *link; /* Do something special with poles and zeros. Poles are 'x's, and * zeros are 'o's. */ if (dv->v_type == SV_POLE) { dv->v_linestyle = 'x'; return; } else if (dv->v_type == SV_ZERO) { dv->v_linestyle = 'o'; return; } /* Find a (hopefully) new line style and color. */ if (currentgraph->plottype == PLOT_POINT) { if (pointchars[cur.linestyle - 1]) cur.linestyle++; else cur.linestyle = 2; } else if ((cur.linestyle > 0) && (++cur.linestyle == dispdev->numlinestyles)) { cur.linestyle = 2; } if ((cur.color > 0) && (++cur.color == dispdev->numcolors)) cur.color = (((currentgraph->grid.gridtype == GRID_SMITH || currentgraph->grid.gridtype == GRID_SMITHGRID) && (dispdev->numcolors > 3)) ? 4 : 2); if (currentgraph->plottype == PLOT_POINT) dv->v_linestyle = pointchars[cur.linestyle - 2]; else dv->v_linestyle = cur.linestyle; dv->v_color = cur.color; /* save the data so we can refresh */ link = TMALLOC(struct dveclist, 1); link->next = currentgraph->plotdata; if (copyvec) { link->vector = vec_copy(dv); /* vec_copy doesn't set v_color or v_linestyle */ link->vector->v_color = dv->v_color; link->vector->v_linestyle = dv->v_linestyle; link->vector->v_flags |= VF_PERMANENT; } else { link->vector = dv; } currentgraph->plotdata = link; /* Put the legend entry on the screen. */ drawlegend(currentgraph, cur.plotno++, dv); } /* start one plot of a graph */ void gr_start(struct dvec *dv) { gr_start_internal(dv, TRUE); } /* make sure the linestyles in this graph don't exceed the number of linestyles available in the current display device */ void gr_relinestyle(GRAPH *graph) { struct dveclist *link; for (link = graph->plotdata; link; link = link->next) { if (graph->plottype == PLOT_POINT) continue; if (!(link->vector->v_linestyle < dispdev->numlinestyles)) link->vector->v_linestyle %= dispdev->numlinestyles; if (!(link->vector->v_color < dispdev->numcolors)) link->vector->v_color %= dispdev->numcolors; } } /* PN static */ void drawlegend(GRAPH *graph, int plotno, struct dvec *dv) { int x, y, i; char buf[16]; x = ((plotno % 2) ? graph->viewportxoff : ((graph->viewport.width) / 2)); y = graph->absolute.height - graph->fontheight - ((plotno + 2) / 2) * (graph->fontheight); i = y + graph->fontheight / 2 + 1; SetColor(dv->v_color); if (graph->plottype == PLOT_POINT) { (void) sprintf(buf, "%c : ", dv->v_linestyle); DevDrawText(buf, x + graph->viewport.width / 20 - 3 * graph->fontwidth, y, 0); } else { SetLinestyle(dv->v_linestyle); DevDrawLine(x, i, x + graph->viewport.width / 20, i); } SetColor(1); DevDrawText(dv->v_name, x + graph->viewport.width / 20 + graph->fontwidth, y, 0); } /* end one plot of a graph */ void gr_end(struct dvec *dv) { NG_IGNORE(dv); DevUpdate(); } /* Print text in the bottom line. */ void gr_pmsg(char *text) { char buf[BSIZE_SP]; buf[0] = '\0'; DevUpdate(); if (cp_getvar("device", CP_STRING, buf, sizeof(buf)) && !(strcmp("/dev/tty", buf) == 0)) fprintf(cp_err, "%s", text); else if (currentgraph->grid.xlabel) /* MW. grid.xlabel may be NULL */ DevDrawText(text, currentgraph->viewport.width - (int) (strlen(currentgraph->grid.xlabel) + 3) * currentgraph->fontwidth, currentgraph->absolute.height - currentgraph->fontheight, 0); else fprintf(cp_err, " %s \n", text); DevUpdate(); } void gr_clean(void) { DevUpdate(); } /* call this routine after viewport size changes */ void gr_resize(GRAPH *graph) { double oldxratio, oldyratio; double scalex, scaley; struct _keyed *k; oldxratio = graph->aspectratiox; oldyratio = graph->aspectratioy; graph->grid.xsized = 0; graph->grid.ysized = 0; gr_resize_internal(graph); /* scale keyed text */ scalex = oldxratio / graph->aspectratiox; scaley = oldyratio / graph->aspectratioy; for (k = graph->keyed; k; k = k->next) { k->x = (int)((k->x - graph->viewportxoff) * scalex + graph->viewportxoff); k->y = (int)((k->y - graph->viewportyoff) * scaley + graph->viewportyoff); } /* X also generates an expose after a resize. This is handled in X10 by not redrawing on resizes and waiting for the expose event to redraw. In X11, the expose routine tries to be clever and only redraws the region specified in an expose event, which does not cover the entire region of the plot if the resize was from a small window to a larger window. So in order to keep the clever X11 expose event handling, we have the X11 resize routine pull out expose events for that window, and we redraw on resize also. */ #ifdef X_DISPLAY_MISSING gr_redraw(graph); #endif } /* PN static */ void gr_resize_internal(GRAPH *graph) { if (!graph->grid.xsized) graph->viewport.width = (int)(graph->absolute.width - 1.4 * graph->viewportxoff); if (!graph->grid.ysized) graph->viewport.height = graph->absolute.height - 2 * graph->viewportyoff; gr_fixgrid(graph, graph->grid.xdelta, graph->grid.ydelta, graph->grid.xdatatype, graph->grid.ydatatype); /* cache width and height info to make DatatoScreen go fast */ /* note: XXX see if this is actually used anywhere */ graph->datawindow.width = graph->datawindow.xmax - graph->datawindow.xmin; graph->datawindow.height = graph->datawindow.ymax - graph->datawindow.ymin; /* cache (datawindow size) / (viewport size) */ graph->aspectratiox = graph->datawindow.width / graph->viewport.width; graph->aspectratioy = graph->datawindow.height / graph->viewport.height; } /* redraw everything in struct graph */ void gr_redraw(GRAPH *graph) { struct dveclist *link; /* establish current graph so default graphic calls will work right */ PushGraphContext(graph); DevClear(); /* redraw grid */ gr_redrawgrid(graph); cur.plotno = 0; for (link = graph->plotdata; link; link = link->next) { /* redraw legend */ drawlegend(graph, cur.plotno++, link->vector); /* replot data if onevalue, pass it a NULL scale otherwise, if vec has its own scale, pass that else pass vec's plot's scale */ ft_graf(link->vector, graph->onevalue ? NULL : (link->vector->v_scale ? link->vector->v_scale : link->vector->v_plot->pl_scale), TRUE); } gr_restoretext(graph); PopGraphContext(); } void gr_restoretext(GRAPH *graph) { struct _keyed *k; /* restore text */ for (k = graph->keyed; k; k = k->next) { SetColor(k->colorindex); DevDrawText(k->text, k->x, k->y, 0); } } /* Do some incremental plotting. There are 3 cases: * * First, if length < IPOINTMIN, don't do anything. * * Second, if length = IPOINTMIN, plot what we have so far. * * Third, if length > IPOINTMIN, plot the last points and resize if * needed. * * Note we don't check for pole / zero because they are of length 1. * * FIXME: there is a problem with multiple iplots that use the same * vector, namely, that vector has the same color throughout. This is * another reason why we need to pull color and linestyle out of dvec * XXX Or maybe even something more drastic ?? */ static int iplot(struct plot *pl, int id) { int len = pl->pl_scale->v_length; struct dvec *v, *xs = pl->pl_scale; double *lims, dy; double start, stop, step; register int j; bool changed = FALSE; int yt; char *yl = NULL; double xlims[2], ylims[2]; static REQUEST reqst = { checkup_option, NULL }; int inited = 0; char commandline[513]; for (j = 0, v = pl->pl_dvecs; v; v = v->v_next) if (v->v_flags & VF_PLOT) j++; if (!j) return (0); if (ft_grdb) fprintf(cp_err, "Entering iplot, len = %d\n", len); if (len < IPOINTMIN) { /* Nothing yet */ return (0); } else if (len == IPOINTMIN || !id) { resumption = FALSE; /* Draw the grid for the first time, and plot everything. */ lims = ft_minmax(xs, TRUE); xlims[0] = lims[0]; xlims[1] = lims[1]; ylims[0] = HUGE; ylims[1] = - ylims[0]; for (v = pl->pl_dvecs; v; v = v->v_next) if (v->v_flags & VF_PLOT) { lims = ft_minmax(v, TRUE); if (ylims[0] > lims[0]) ylims[0] = lims[0]; if (ylims[1] < lims[1]) ylims[1] = lims[1]; if (!yl) yl = v->v_name; } /* generate a small difference between ymin and ymax to catch the y=const case */ if (ylims[0] == ylims[1]) ylims[1] += 1e-9; if (ft_grdb) fprintf(cp_err, "iplot: after 5, xlims = %G, %G, ylims = %G, %G\n", xlims[0], xlims[1], ylims[0], ylims[1]); for (yt = pl->pl_dvecs->v_type, v = pl->pl_dvecs->v_next; v; v = v->v_next) if ((v->v_flags & VF_PLOT) && (v->v_type != yt)) { yt = SV_NOTYPE; break; } /* note: have command options for iplot to specify xdelta, etc. So don't need static variables hack. Assume default values for now. */ sprintf(commandline, "plot %s", yl); (void) gr_init(xlims, ylims, xs->v_name, pl->pl_title, NULL, j, 0.0, 0.0, GRID_LIN, PLOT_LIN, xs->v_name, yl, xs->v_type, yt, plot_cur->pl_typename, commandline); for (v = pl->pl_dvecs; v; v = v->v_next) if (v->v_flags & VF_PLOT) { gr_start_internal(v, FALSE); ft_graf(v, xs, TRUE); } inited = 1; } else { /* plot the last points and resize if needed */ Input(&reqst, NULL); /* First see if we have to make the screen bigger */ dy = (isreal(xs) ? xs->v_realdata[len - 1] : realpart(xs->v_compdata[len - 1])); if (ft_grdb) fprintf(cp_err, "x = %G\n", dy); if (!if_tranparams(ft_curckt, &start, &stop, &step) || !ciprefix("tran", pl->pl_typename)) { stop = HUGE; start = - stop; } /* checking for x lo */ while (dy < currentgraph->data.xmin) { changed = TRUE; if (ft_grdb) fprintf(cp_err, "resize: xlo %G -> %G\n", currentgraph->data.xmin, currentgraph->data.xmin - (currentgraph->data.xmax - currentgraph->data.xmin) * XFACTOR); /* set the new x lo value */ currentgraph->data.xmin -= (currentgraph->data.xmax - currentgraph->data.xmin) * XFACTOR; if (currentgraph->data.xmin < start) { currentgraph->data.xmin = start; break; } } if (currentgraph->data.xmax < currentgraph->data.xmin) currentgraph->data.xmax = currentgraph->data.xmin; /* checking for x hi */ while (dy > currentgraph->data.xmax) { changed = TRUE; if (ft_grdb) fprintf(cp_err, "resize: xhi %G -> %G\n", currentgraph->data.xmax, currentgraph->data.xmax + (currentgraph->data.xmax - currentgraph->data.xmin) * XFACTOR); /* set the new x hi value */ currentgraph->data.xmax += (currentgraph->data.xmax - currentgraph->data.xmin) * XFACTOR; if (currentgraph->data.xmax > stop) { currentgraph->data.xmax = stop; break; } } /* checking for all y values */ for (v = pl->pl_dvecs; v; v = v->v_next) { if (!(v->v_flags & VF_PLOT)) continue; dy = (isreal(v) ? v->v_realdata[len - 1] : realpart(v->v_compdata[len - 1])); if (ft_grdb) fprintf(cp_err, "y = %G\n", dy); /* checking for y lo */ while (dy < currentgraph->data.ymin) { changed = TRUE; if (ft_grdb) fprintf(cp_err, "resize: ylo %G -> %G\n", currentgraph->data.ymin, currentgraph->data.ymin - (currentgraph->data.ymax - currentgraph->data.ymin) * YFACTOR); /* set the new y lo value */ currentgraph->data.ymin -= (currentgraph->data.ymax - currentgraph->data.ymin) * YFACTOR; /* currentgraph->data.ymin += (dy - currentgraph->data.ymin) * YFACTOR;*/ /* currentgraph->data.ymin = dy; currentgraph->data.ymin *= (1 + YFACTOR); */ } if (currentgraph->data.ymax < currentgraph->data.ymin) currentgraph->data.ymax = currentgraph->data.ymin; /* checking for y hi */ while (dy > currentgraph->data.ymax) { changed = TRUE; if (ft_grdb) fprintf(cp_err, "resize: yhi %G -> %G\n", currentgraph->data.ymax, currentgraph->data.ymax + (currentgraph->data.ymax - currentgraph->data.ymin) * YFACTOR); /* set the new y hi value */ currentgraph->data.ymax += (currentgraph->data.ymax - currentgraph->data.ymin) * YFACTOR; /* currentgraph->data.ymax += (dy - currentgraph->data.ymax) * YFACTOR;*/ /* currentgraph->data.ymax = dy; currentgraph->data.ymax *= (1 + YFACTOR); */ } } if (changed) { /* Redraw everything. */ gr_pmsg("Resizing screen"); gr_resize(currentgraph); #ifndef X_DISPLAY_MISSING gr_redraw(currentgraph); #endif } else { /* Just connect the last two points. This won't be done * with curve interpolation, so it might look funny. */ for (v = pl->pl_dvecs; v; v = v->v_next) if (v->v_flags & VF_PLOT) { gr_point(v, (isreal(xs) ? xs->v_realdata[len - 1] : realpart(xs->v_compdata[len - 1])), (isreal(v) ? v->v_realdata[len - 1] : realpart(v->v_compdata[len - 1])), (isreal(xs) ? xs->v_realdata[len - 2] : realpart(xs->v_compdata[len - 2])), (isreal(v) ? v->v_realdata[len - 2] : realpart(v->v_compdata[len - 2])), len - 1); } } } DevUpdate(); return (inited); } static void set(struct plot *plot, struct dbcomm *db, bool unset, short mode) { struct dvec *v; struct dbcomm *dc; if (db->db_type == DB_IPLOTALL || db->db_type == DB_TRACEALL) { for (v = plot->pl_dvecs; v; v = v->v_next) if (unset) v->v_flags &= (short) ~mode; else v->v_flags |= mode; return; } for (dc = db; dc; dc = dc->db_also) { v = vec_fromplot(dc->db_nodename1, plot); if (!v || v->v_plot != plot) { if (!eq(dc->db_nodename1, "0") && !unset) { fprintf(cp_err, "Warning: node %s non-existent in %s.\n", dc->db_nodename1, plot->pl_name); /* note: XXX remove it from dbs, so won't get further errors */ } continue; } if (unset) v->v_flags &= (short) ~mode; else v->v_flags |= mode; } } static char * getitright(char *buf, double num) { char *p; int k; sprintf(buf, " % .5g", num); p = strchr(buf, '.'); if (p) { return p - 4; } else { k = (int) strlen(buf); if (k > 8) return buf + 4; else /* k >= 4 */ return buf + k - 4; } } static int hit, hit2; void reset_trace(void) { hit = -1; hit2 = -1; } void gr_iplot(struct plot *plot) { struct dbcomm *db; int dontpop; /* So we don't pop w/o push. */ char buf[30]; hit = 0; for (db = dbs; db; db = db->db_next) { if (db->db_type == DB_IPLOT || db->db_type == DB_IPLOTALL) { if (db->db_graphid) PushGraphContext(FindGraph(db->db_graphid)); set(plot, db, FALSE, VF_PLOT); dontpop = 0; if (iplot(plot, db->db_graphid)) { /* graph just assigned */ db->db_graphid = currentgraph->graphid; dontpop = 1; } set(plot, db, TRUE, VF_PLOT); if (!dontpop && db->db_graphid) PopGraphContext(); } else if (db->db_type == DB_TRACENODE || db->db_type == DB_TRACEALL) { struct dvec *v, *u; int len; set(plot, db, FALSE, VF_PRINT); len = plot->pl_scale->v_length; dontpop = 0; for (v = plot->pl_dvecs; v; v = v->v_next) { if (v->v_flags & VF_PRINT) { u = plot->pl_scale; if (len <= 1 || hit <= 0 || hit2 < 0) { if (len <= 1 || hit2 < 0) term_clear(); else term_home(); hit = 1; hit2 = 1; printf( "\tExecution trace (remove with the \"delete\" command)"); term_cleol(); printf("\n"); if (u) { printf("%12s:", u->v_name); if (isreal(u)) { printf("%s", getitright(buf, u->v_realdata[len - 1])); } else { /* MW. Complex data here, realdata is NULL (why someone use realdata here again) */ printf("%s", getitright(buf, u->v_compdata[len - 1].cx_real)); printf(", %s", getitright(buf, u->v_compdata[len - 1].cx_imag)); } term_cleol(); printf("\n"); } } if (v == u) continue; printf("%12s:", v->v_name); if (isreal(v)) { printf("%s", getitright(buf, v->v_realdata[len - 1])); } else { /* MW. Complex data again */ printf("%s", getitright(buf, v->v_compdata[len - 1].cx_real)); printf(", %s", getitright(buf, v->v_compdata[len - 1].cx_imag)); } term_cleol(); printf("\n"); } } set(plot, db, TRUE, VF_PRINT); } } } /* This gets called after iplotting is done. We clear out the * db_graphid fields. Copy the dvecs, which we referenced by * reference, so DestroyGraph gets to free its own copy. * * Note: This is a clear case for separating the linestyle and color * fields from dvec. */ void gr_end_iplot(void) { struct dbcomm *db, *prev, *next; GRAPH *graph; struct dveclist *link; struct dvec *dv; prev = NULL; for (db = dbs; db; prev = db, db = next) { next = db->db_next; if (db->db_type == DB_DEADIPLOT) { if (db->db_graphid) { DestroyGraph(db->db_graphid); if (prev) prev->db_next = next; else ft_curckt->ci_dbs = dbs = next; dbfree1(db); } } else if (db->db_type == DB_IPLOT || db->db_type == DB_IPLOTALL) { if (db->db_graphid) { /* get private copy of dvecs */ graph = FindGraph(db->db_graphid); link = graph->plotdata; while (link) { dv = link->vector; link->vector = vec_copy(dv); /* vec_copy doesn't set v_color or v_linestyle */ link->vector->v_color = dv->v_color; link->vector->v_linestyle = dv->v_linestyle; link->vector->v_flags |= VF_PERMANENT; link = link->next; } db->db_graphid = 0; } else { /* warn that this wasn't plotted */ fprintf(cp_err, "Warning: iplot %d was not executed.\n", db->db_number); } } } } double * readtics(char *string) { int k; char *words, *worde; double *tics, *ticsk; tics = TMALLOC(double, MAXTICS); ticsk = tics; words = string; for (k = 0; *words && k < MAXTICS; words = worde) { words = skip_ws(words); worde = words; while (isalpha_c(*worde) || isdigit_c(*worde)) worde++; if (*worde) *worde++ = '\0'; sscanf(words, "%lf", ticsk++); k++; } *ticsk = HUGE; return (tics); } tmpk8ny_4pz/src/frontend/plotting/plotcurv.h0000644000175000017500000000021613546075722021454 0ustar carstencarsten/************* * Header file for plotcurv.c * 1999 E. Rouat ************/ #ifndef ngspice_PLOTCURV_H #define ngspice_PLOTCURV_H #endif tmpk8ny_4pz/src/frontend/plotting/gnuplot.c0000644000175000017500000003615513546075722021274 0ustar carstencarsten/********** * From xgraph.c: * Copyright 1992 Regents of the University of California. All rights reserved. * Author: 1992 David A. Gates, U. C. Berkeley CAD Group * * Author: 2008 Stefano Pedretti **********/ /* * gnuplot plots. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/fteparse.h" #include "gnuplot.h" #if defined(__MINGW32__) || defined(_MSC_VER) #undef BOOLEAN #include #else #include #endif #define GP_MAXVECTORS 64 static void quote_gnuplot_string(FILE *stream, char *s) { fputc('"', stream); for (; *s; s++) switch (*s) { case '\n': fputs("\\n", stream); break; case '"': case '\\': fputc('\\', stream); default: fputc(*s, stream); } fputc('"', stream); } void ft_gnuplot(double *xlims, double *ylims, char *filename, char *title, char *xlabel, char *ylabel, GRIDTYPE gridtype, PLOTTYPE plottype, struct dvec *vecs) { FILE *file, *file_data; struct dvec *v, *scale = NULL; double xval, yval, prev_xval, extrange; int i, dir, numVecs, linewidth, err, terminal_type; bool xlog, ylog, nogrid, markers; char buf[BSIZE_SP], pointstyle[BSIZE_SP], *text, plotstyle[BSIZE_SP], terminal[BSIZE_SP]; char filename_data[128]; char filename_plt[128]; snprintf(filename_data, 128, "%s.data", filename); snprintf(filename_plt, 128, "%s.plt", filename); /* Sanity checking. */ for (v = vecs, numVecs = 0; v; v = v->v_link2) numVecs++; if (numVecs == 0) { return; } else if (numVecs > GP_MAXVECTORS) { fprintf(cp_err, "Error: too many vectors for gnuplot.\n"); return; } if (ylims && (fabs((ylims[1]-ylims[0])/ylims[0]) < 1.0e-6)) { fprintf(cp_err, "Error: range min ... max too small for using gnuplot.\n"); fprintf(cp_err, " Consider plotting with offset %g.\n", ylims[0]); return; } extrange = 0.05 * (ylims[1] - ylims[0]); if (!cp_getvar("gnuplot_terminal", CP_STRING, terminal, sizeof(terminal))) { terminal_type = 1; } else { terminal_type = 1; if (cieq(terminal,"png")) terminal_type = 2; if (cieq(terminal,"png/quit")) terminal_type = 3; if (cieq(terminal, "eps")) terminal_type = 4; if (cieq(terminal, "eps/quit")) terminal_type = 5; } if (!cp_getvar("xbrushwidth", CP_NUM, &linewidth, 0)) linewidth = 1; if (linewidth < 1) linewidth = 1; if (!cp_getvar("pointstyle", CP_STRING, pointstyle, sizeof(pointstyle))) { markers = FALSE; } else { if (cieq(pointstyle,"markers")) markers = TRUE; else markers = FALSE; } /* Make sure the gridtype is supported. */ switch (gridtype) { case GRID_LIN: nogrid = xlog = ylog = FALSE; break; case GRID_XLOG: xlog = TRUE; nogrid = ylog = FALSE; break; case GRID_YLOG: ylog = TRUE; nogrid = xlog = FALSE; break; case GRID_LOGLOG: xlog = ylog = TRUE; nogrid = FALSE; break; case GRID_NONE: nogrid = TRUE; xlog = ylog = FALSE; break; default: fprintf(cp_err, "Error: grid type unsupported by gnuplot.\n"); return; } /* Open the output gnuplot file. */ if ((file = fopen(filename_plt, "w")) == NULL) { perror(filename); return; } /* Set up the file header. */ #if !defined(__MINGW32__) && !defined(_MSC_VER) fprintf(file, "set terminal X11 noenhanced\n"); #else fprintf(file, "set termoption noenhanced\n"); #endif if (title) { text = cp_unquote(title); fprintf(file, "set title "); quote_gnuplot_string(file, text); fprintf(file, "\n"); tfree(text); } if (xlabel) { text = cp_unquote(xlabel); fprintf(file, "set xlabel "); quote_gnuplot_string(file, text); fprintf(file, "\n"); tfree(text); } if (ylabel) { text = cp_unquote(ylabel); fprintf(file, "set ylabel "); quote_gnuplot_string(file, text); fprintf(file, "\n"); tfree(text); } if (!nogrid) { if (linewidth > 1) fprintf(file, "set grid lw %d \n" , linewidth); else fprintf(file, "set grid\n"); } if (xlog) { fprintf(file, "set logscale x\n"); if (xlims) fprintf(file, "set xrange [%1.0e:%1.0e]\n", pow(10, floor(log10(xlims[0]))), pow(10, ceil(log10(xlims[1])))); fprintf(file, "set mxtics 10\n"); fprintf(file, "set grid mxtics\n"); } else { fprintf(file, "unset logscale x \n"); if (xlims) fprintf(file, "set xrange [%e:%e]\n", xlims[0], xlims[1]); } if (ylog) { fprintf(file, "set logscale y \n"); if (ylims) fprintf(file, "set yrange [%1.0e:%1.0e]\n", pow(10, floor(log10(ylims[0]))), pow(10, ceil(log10(ylims[1])))); fprintf(file, "set mytics 10\n"); fprintf(file, "set grid mytics\n"); } else { fprintf(file, "unset logscale y \n"); if (ylims) fprintf(file, "set yrange [%e:%e]\n", ylims[0] - extrange, ylims[1] + extrange); } fprintf(file, "#set xtics 1\n"); fprintf(file, "#set x2tics 1\n"); fprintf(file, "#set ytics 1\n"); fprintf(file, "#set y2tics 1\n"); if (linewidth > 1) fprintf(file, "set border lw %d\n", linewidth); if (plottype == PLOT_COMB) { strcpy(plotstyle, "boxes"); } else if (plottype == PLOT_POINT) { if (markers) { // fprintf(file, "Markers: True\n"); } else { // fprintf(file, "LargePixels: True\n"); } strcpy(plotstyle, "points"); } else { strcpy(plotstyle, "lines"); } /* Open the output gnuplot data file. */ if ((file_data = fopen(filename_data, "w")) == NULL) { perror(filename); return; } fprintf(file, "set format y \"%%g\"\n"); fprintf(file, "set format x \"%%g\"\n"); if ((terminal_type != 3) && (terminal_type != 5)) { fprintf(file, "plot "); i = 0; /* Write out the gnuplot command */ for (v = vecs; v; v = v->v_link2) { scale = v->v_scale; if (v->v_name) { i = i + 2; if (i > 2) fprintf(file, ",\\\n"); fprintf(file, "\'%s\' using %d:%d with %s lw %d title ", filename_data, i - 1, i, plotstyle, linewidth); quote_gnuplot_string(file, v->v_name); } } fprintf(file, "\n"); } /* terminal_type 1: do not print an eps or png file 2: print png file, keep command window open 3: print png file, quit command window 4: print eps file, keep command window open 5: print eps file, quit command window */ if ((terminal_type == 2) || (terminal_type == 4)) fprintf(file, "set terminal push\n"); if ((terminal_type == 4) || (terminal_type == 5)) { fprintf(file, "set terminal postscript eps color noenhanced\n"); fprintf(file, "set out \'%s.eps\'\n", filename); } if ((terminal_type == 2) || (terminal_type == 3)) { fprintf(file, "set terminal png noenhanced\n"); fprintf(file, "set out \'%s.png\'\n", filename); } if ((terminal_type == 2) || (terminal_type == 4)) { fprintf(file, "replot\n"); fprintf(file, "set term pop\n"); fprintf(file, "replot\n"); } if ((terminal_type == 3) || (terminal_type == 5)) { fprintf(file, "plot "); i = 0; /* Write out the gnuplot command */ for (v = vecs; v; v = v->v_link2) { scale = v->v_scale; if (v->v_name) { i = i + 2; if (i > 2) fprintf(file, ",\\\n"); fprintf(file, "\'%s\' using %d:%d with %s lw %d title ", filename_data, i - 1, i, plotstyle, linewidth); quote_gnuplot_string(file, v->v_name); } } fprintf(file, "\n"); fprintf(file, "exit\n"); } (void) fclose(file); /* Write out the data and setup arrays */ bool mono = (plottype == PLOT_MONOLIN); dir = 0; prev_xval = NAN; for (i = 0; i < scale->v_length; i++) { for (v = vecs; v; v = v->v_link2) { scale = v->v_scale; xval = isreal(scale) ? scale->v_realdata[i] : realpart(scale->v_compdata[i]); yval = isreal(v) ? v->v_realdata[i] : realpart(v->v_compdata[i]); if (i > 0 && (mono || (scale->v_plot && scale->v_plot->pl_scale == scale))) { if (dir * (xval - prev_xval) < 0) { /* direction reversal, start a new graph */ fprintf(file_data, "\n"); dir = 0; } else if (!dir && xval > prev_xval) { dir = 1; } else if (!dir && xval < prev_xval) { dir = -1; } } fprintf(file_data, "%e %e ", xval, yval); prev_xval = xval; } fprintf(file_data, "\n"); } (void) fclose(file_data); #if defined(__MINGW32__) || defined(_MSC_VER) /* for external fcn system() */ // (void) sprintf(buf, "start /B wgnuplot %s -" , filename_plt); (void) sprintf(buf, "start /B wgnuplot -persist %s " , filename_plt); _flushall(); #else /* for external fcn system() from LINUX environment */ if (terminal_type == 3) { fprintf(cp_out, "writing plot to file %s.png\n", filename); (void) sprintf(buf, "gnuplot %s", filename_plt); } else if (terminal_type == 5) { fprintf(cp_out, "writing plot to file %s.eps\n", filename); (void) sprintf(buf, "gnuplot %s", filename_plt); } else (void) sprintf(buf, "xterm -e gnuplot %s - &", filename_plt); #endif err = system(buf); /* delete the plt and data files */ if ((terminal_type == 3) || (terminal_type == 5)) { /* wait for gnuplot generating eps or png file */ #if defined(__MINGW32__) || defined(_MSC_VER) Sleep(200); #else usleep(200000); #endif if (remove(filename_data)) { fprintf(stderr, "Could not remove file %s\n", filename_data); perror(NULL); } if (remove(filename_plt)) { fprintf(stderr, "Could not remove file %s\n", filename_plt); perror(NULL); } } } /* simple printout of data into a file, similar to data table in ft_gnuplot command: wrdata file vecs, vectors of different length (from different plots) may be printed. Data are written in pairs: scale vector, value vector. If data are complex, a triple is printed (scale, real, imag). Setting 'singlescale' as variable, the scale vector will be printed once only, if scale vectors are of same length (there is little risk here!). Width of numbers printed is set by option 'numdgt'. */ void ft_writesimple(double *xlims, double *ylims, char *filename, char *title, char *xlabel, char *ylabel, GRIDTYPE gridtype, PLOTTYPE plottype, struct dvec *vecs) { FILE *file_data; struct dvec *v; int i, numVecs, maxlen, preci; bool appendwrite, singlescale, vecnames; NG_IGNORE(xlims); NG_IGNORE(ylims); NG_IGNORE(title); NG_IGNORE(xlabel); NG_IGNORE(ylabel); NG_IGNORE(gridtype); NG_IGNORE(plottype); appendwrite = cp_getvar("appendwrite", CP_BOOL, NULL, 0); singlescale = cp_getvar("wr_singlescale", CP_BOOL, NULL, 0); vecnames = cp_getvar("wr_vecnames", CP_BOOL, NULL, 0); /* Sanity checking. */ for (v = vecs, numVecs = 0; v; v = v->v_link2) numVecs++; if (numVecs == 0) return; /* print scale vector only once */ if (singlescale) { /* check if all vectors have equal scale length */ maxlen = vecs->v_length; /* first length of vector read */ for (v = vecs; v; v = v->v_link2) if (v->v_scale->v_length != maxlen) { fprintf(stderr, "Error: Option 'singlescale' not possible.\n" " Vectors %s and %s have different lengths!\n" " No data written to %s!\n\n", vecs->v_name, v->v_name, filename); return; } } else { /* find maximum scale length from all vectors */ maxlen = 0; for (v = vecs; v; v = v->v_link2) maxlen = MAX(v->v_scale->v_length, maxlen); } /* Open the output data file. */ if ((file_data = fopen(filename, appendwrite ? "a" : "w")) == NULL) { perror(filename); return; } /* If option numdgt is set, use it for printout precision. */ if (cp_numdgt > 0) preci = cp_numdgt; else preci = 8; /* Print names of vectors to first line */ if (vecnames) { bool prscale = TRUE; for (v = vecs; v; v = v->v_link2) { struct dvec *scale = v->v_scale; /* If wr_singlescale is set, print scale name only in first column */ if (prscale) fprintf(file_data, " %-*s", preci + 7, scale->v_name); if (isreal(v)) fprintf(file_data, " %-*s", preci + 7, v->v_name); else fprintf(file_data, " %-*s %-*s", preci + 7, v->v_name, preci + 7, v->v_name); if (singlescale) /* the following names are printed without scale vector names */ prscale = FALSE; } fprintf(file_data, "\n"); } /* Write out the data as simple arrays */ for (i = 0; i < maxlen; i++) { bool prscale = TRUE; /* print scale from the first vector, then only if wr_singlescale is not set */ for (v = vecs; v; v = v->v_link2) { struct dvec *scale = v->v_scale; /* if no more scale and value data, just print spaces */ if (i >= scale->v_length) { if (prscale) fprintf(file_data, "%*s", preci + 8, ""); if (isreal(v)) fprintf(file_data, "%*s", preci + 8, ""); else fprintf(file_data, "%*s", 2 * (preci + 8), ""); } else { if (prscale) { double xval = isreal(scale) ? scale->v_realdata[i] : realpart(scale->v_compdata[i]); fprintf(file_data, "% .*e ", preci, xval); } if (isreal(v)) fprintf(file_data, "% .*e ", preci, v->v_realdata[i]); else fprintf(file_data, "% .*e % .*e ", preci, realpart(v->v_compdata[i]), preci, imagpart(v->v_compdata[i])); } if (singlescale) /* the following vectors are printed without scale vector */ prscale = FALSE; } fprintf(file_data, "\n"); } (void) fclose(file_data); } tmpk8ny_4pz/src/frontend/plotting/grid.c0000644000175000017500000014217613546075722020532 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Modified: 2001 AlansFixes **********/ /* Routines to draw the various sorts of grids -- linear, log, polar. */ #include "ngspice/ngspice.h" #include "ngspice/graph.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/grid.h" #include "../display.h" #include #define RAD_TO_DEG (180.0 / M_PI) typedef enum { x_axis, y_axis } Axis; static double *lingrid(GRAPH *graph, double lo, double hi, double delta, int type, Axis axis); static double *loggrid(GRAPH *graph, double lo, double hi, int type, Axis axis); static void polargrid(GRAPH *graph); static void drawpolargrid(GRAPH *graph); static void adddeglabel(GRAPH *graph, int deg, int x, int y, int cx, int cy, int lx, int ly); static void addradlabel(GRAPH *graph, int lab, double theta, int x, int y); static void smithgrid(GRAPH *graph); static void drawsmithgrid(GRAPH *graph); static void arcset(GRAPH *graph, double rad, double prevrad, double irad, double iprevrad, double radoff, int maxrad, int centx, int centy, int xoffset, int yoffset, char *plab, char *nlab, int pdeg, int ndeg, int pxmin, int pxmax); static double cliparc(double cx, double cy, double rad, double start, double end, int iclipx, int iclipy, int icliprad, int flag); static void drawlingrid(GRAPH *graph, char *units, int spacing, int nsp, double dst, double lmt, double hmt, bool onedec, int mult, double mag, int digits, Axis axis); static void drawloggrid(GRAPH *graph, char *units, int hmt, int lmt, int decsp, int subs, int pp, Axis axis); /* note: scaleunits is static and never changed in this file ie, can get rid of it */ static bool scaleunits = TRUE; void gr_fixgrid(GRAPH *graph, double xdelta, double ydelta, int xtype, int ytype) { double *dd; if (graph->grid.gridtype == GRID_NONE) graph->grid.gridtype = GRID_LIN; SetColor(1); SetLinestyle(1); if ((graph->data.xmin > graph->data.xmax) || (graph->data.ymin > graph->data.ymax)) { fprintf(cp_err, "gr_fixgrid: Internal Error - bad limits: %g, %g, %g, %g\n", graph->data.xmin, graph->data.xmax, graph->data.ymin, graph->data.ymax); return; } if (graph->grid.gridtype == GRID_POLAR) { graph->grid.circular = TRUE; polargrid(graph); return; } else if (graph->grid.gridtype == GRID_SMITH || graph->grid.gridtype == GRID_SMITHGRID) { graph->grid.circular = TRUE; smithgrid(graph); return; } graph->grid.circular = FALSE; if ((graph->grid.gridtype == GRID_YLOG) || (graph->grid.gridtype == GRID_LOGLOG)) { dd = loggrid(graph, graph->data.ymin, graph->data.ymax, ytype, y_axis); } else { dd = lingrid(graph, graph->data.ymin, graph->data.ymax, ydelta, ytype, y_axis); } graph->datawindow.ymin = dd[0]; graph->datawindow.ymax = dd[1]; if ((graph->grid.gridtype == GRID_XLOG) || (graph->grid.gridtype == GRID_LOGLOG)) { dd = loggrid(graph, graph->data.xmin, graph->data.xmax, xtype, x_axis); } else { dd = lingrid(graph, graph->data.xmin, graph->data.xmax, xdelta, xtype, x_axis); } graph->datawindow.xmin = dd[0]; graph->datawindow.xmax = dd[1]; /* do we really need this? */ /* SetLinestyle(0); DevDrawLine(graph->viewportxoff, graph->viewportyoff, graph->viewport.width + graph->viewportxoff, graph->viewportyoff); DevDrawLine(graph->viewportxoff, graph->viewportyoff, graph->viewportxoff, graph->viewport.height + graph->viewportyoff); SetLinestyle(1); */ } void gr_redrawgrid(GRAPH *graph) { SetColor(1); SetLinestyle(1); /* draw labels */ if (graph->grid.xlabel) { DevDrawText(graph->grid.xlabel, (int) (graph->absolute.width * 0.35), graph->fontheight, 0); } if (graph->grid.ylabel) { if (graph->grid.gridtype == GRID_POLAR || graph->grid.gridtype == GRID_SMITH || graph->grid.gridtype == GRID_SMITHGRID) { DevDrawText(graph->grid.ylabel, graph->fontwidth, (graph->absolute.height * 3) / 4, 0); } else { if (eq(dispdev->name, "postscript") || eq(dispdev->name, "Windows")) DevDrawText(graph->grid.ylabel, graph->fontwidth, /*vertical text, midpoint in y is aligned midpoint of text string */ (graph->absolute.height - (int) strlen(graph->grid.ylabel) * graph->fontwidth) / 2, 90); else /* FIXME: for now excluding X11 and others */ DevDrawText(graph->grid.ylabel, graph->fontwidth, graph->absolute.height / 2, 90); } } /* draw postscript title */ if (graph->plotname && eq(dispdev->name, "postscript")) DevDrawText(graph->plotname, graph->fontwidth, graph->absolute.height - graph->fontheight, 0); switch (graph->grid.gridtype) { case GRID_POLAR: drawpolargrid(graph); break; case GRID_SMITH: drawsmithgrid(graph); break; case GRID_SMITHGRID: drawsmithgrid(graph); break; case GRID_XLOG: case GRID_LOGLOG: drawloggrid(graph, graph->grid.xaxis.log.units, graph->grid.xaxis.log.hmt, graph->grid.xaxis.log.lmt, graph->grid.xaxis.log.decsp, graph->grid.xaxis.log.subs, graph->grid.xaxis.log.pp, x_axis); break; default: drawlingrid(graph, graph->grid.xaxis.lin.units, graph->grid.xaxis.lin.spacing, graph->grid.xaxis.lin.numspace, graph->grid.xaxis.lin.distance, graph->grid.xaxis.lin.lowlimit, graph->grid.xaxis.lin.highlimit, graph->grid.xaxis.lin.onedec, graph->grid.xaxis.lin.mult, graph->grid.xaxis.lin.tenpowmag / graph->grid.xaxis.lin.tenpowmagx, graph->grid.xaxis.lin.digits, x_axis); break; } switch (graph->grid.gridtype) { case GRID_POLAR: case GRID_SMITH: case GRID_SMITHGRID: break; case GRID_YLOG: case GRID_LOGLOG: drawloggrid(graph, graph->grid.yaxis.log.units, graph->grid.yaxis.log.hmt, graph->grid.yaxis.log.lmt, graph->grid.yaxis.log.decsp, graph->grid.yaxis.log.subs, graph->grid.yaxis.log.pp, y_axis); break; default: drawlingrid(graph, graph->grid.yaxis.lin.units, graph->grid.yaxis.lin.spacing, graph->grid.yaxis.lin.numspace, graph->grid.yaxis.lin.distance, graph->grid.yaxis.lin.lowlimit, graph->grid.yaxis.lin.highlimit, graph->grid.yaxis.lin.onedec, graph->grid.yaxis.lin.mult, graph->grid.yaxis.lin.tenpowmag / graph->grid.yaxis.lin.tenpowmagx, graph->grid.yaxis.lin.digits, y_axis); break; } } /* Plot a linear grid. Returns the new hi and lo limits. */ static double * lingrid(GRAPH *graph, double lo, double hi, double delta, int type, Axis axis) { int mag, mag2, mag3; double hmt, lmt, dst; int nsp; double tenpowmag = 0.0, tenpowmag2, spacing; bool onedec = FALSE; int margin; int max; static double dd[2]; int mult = 1; char buf[GRAPH_UNITS_LENGTH], *s; int slim, digits; if (axis == y_axis && graph->grid.ysized) { lmt = graph->grid.yaxis.lin.lowlimit; hmt = graph->grid.yaxis.lin.highlimit; tenpowmag = graph->grid.yaxis.lin.tenpowmag; dd[0] = lmt * tenpowmag; dd[1] = hmt * tenpowmag; return dd; } if (axis == x_axis && graph->grid.xsized) { lmt = graph->grid.xaxis.lin.lowlimit; hmt = graph->grid.xaxis.lin.highlimit; tenpowmag = graph->grid.xaxis.lin.tenpowmag; dd[0] = lmt * tenpowmag; dd[1] = hmt * tenpowmag; return dd; } if (delta < 0.0) { fprintf(cp_err, "Warning: %cdelta is negative -- reversed\n", (axis == x_axis) ? 'x' : 'y'); delta = -delta; } mag2 = (int)floor(log10(fabs(hi - lo))); tenpowmag2 = pow(10.0, (double) mag2); /* Round lo down, and hi up */ /* First, round lo _up_ and hi _down_ out to the 3rd digit of accuracy */ lmt = (ceil(1000 * lo / tenpowmag2)) / 1000.0; hmt = (floor(1000 * hi / tenpowmag2 + 0.9)) / 1000.0; lmt = floor(10.0 * lmt) / 10.0; hmt = ceil(10.0 * hmt) / 10.0; lo = lmt * tenpowmag2; hi = hmt * tenpowmag2; if (fabs(hi) > fabs(lo)) mag = (int)floor(log10(fabs(hi))); else mag = (int)floor(log10(fabs(lo))); if (mag >= 0) mag3 = ((int) (mag / 3)) * 3; else mag3 = - ((int) ((2 - mag) / 3)) * 3; if (scaleunits) { digits = mag3 - mag2; } else { digits = mag - mag2; mag3 = mag; } if (digits < 1) digits = 0; if (digits > 15) { dd[0] = 1; dd[1] = 1; fprintf(cp_err, "Error: Plot resolution limit of 15 digits exceeded.\n"); fprintf(cp_err, " Consider plotting with offset.\n"); return dd; } if (axis == x_axis) { margin = graph->viewportxoff; /*max = graph->viewport.width + graph->viewportxoff;*/ max = graph->absolute.width - graph->viewportxoff; /* don't subtract font height from right border of grid */ if (graph->grid.ylabel) max += graph->fontheight; } else { graph->viewportxoff = (digits + 5 + mag - mag3) * graph->fontwidth; /* add height of the vertical text to offset*/ if (graph->grid.ylabel) graph->viewportxoff += graph->fontheight; margin = graph->viewportyoff; /*max = graph->viewport.height + graph->viewportyoff;*/ max = graph->absolute.height - graph->viewportyoff; } /* Express the difference between the high and low values as * diff = d * 10^mag. We know diff >= 0.0. If scaleunits is * set then make sure that mag is modulo 3. */ dst = hmt - lmt; /* We have to go from lmt to hmt, so think of some useful places * to put grid lines. We will have a total of nsp lines, one * every spacing pixels, which is every dst / nsp units. */ if (scaleunits) { static char scaleletters[ ] = "afpnum\0kMGT"; char *p; int i, j; tenpowmag = pow(10.0, (double) mag3); i = (mag3 + 18) / 3; if (i < 0) i = 6; /* No scale units */ else if (i >= (int) sizeof(scaleletters) - 1) { /* sizeof includes '\0' at end, which is useless */ /* i = sizeof(scaleletters) - 2; */ i = 6; /* No scale units */ } j = mag3 - i * 3 + 18; if (j == 1) (void) sprintf(buf, "x10 "); else if (j == 2) (void) sprintf(buf, "x100 "); else if (j) (void) snprintf(buf, sizeof(buf) - 1, "x10^%d ", j); else buf[0] = '\0'; if (scaleletters[i]) { for (p = buf; *p; p++) ; *p++ = scaleletters[i]; *p++ = '\0'; } } else if (mag > 1) { tenpowmag = pow(10.0, (double) mag); (void) snprintf(buf, sizeof(buf), "x10^%d ", mag); } else { buf[0] = '\0'; } s = ft_typabbrev(type); if (!s) s = "Units"; strncat(buf, s, sizeof(buf) - strlen(buf) - 1); if (delta == 0.0) { int i; double step; static struct { double div_lim, step; } div_list[] = { { 100.0, 10.0 }, { 50.0, 5.0 }, { 20.0, 2.0 }, { 6.0, 1.0 }, { 3.0, 0.5 }, { 1.0, 0.2 }, { 0.5, 0.1 }, { 0.0, 0.05 }, { 0.0, 0.01 } }; for (i = 0; (size_t) i < NUMELEMS(div_list); i++) if (dst > div_list[i].div_lim) break; if ((size_t) i == NUMELEMS(div_list)) i--; do { step = div_list[i].step; nsp = (int)((dst + step - 0.0001) / step); spacing = (max - margin) / nsp; i += 1; } while ((size_t) i < NUMELEMS(div_list) && spacing > 50); if (axis == x_axis) { slim = digits + 5 + mag - mag3; slim = graph->fontwidth * (slim + 1); } else { slim = graph->fontheight * 3; } while (i > 0 && spacing < slim + 3) { i -= 1; step = div_list[i].step; nsp = (int)((dst + step - 0.0001) / step); spacing = (max - margin) / nsp; } if (lmt < 0) lmt = - ceil(-lmt / step) * step; else lmt = floor(lmt / step) * step; if (hmt < 0) hmt = - floor(-hmt / step) * step; else hmt = ceil(hmt / step) * step; dst = hmt - lmt; lo = lmt * tenpowmag2; hi = hmt * tenpowmag2; nsp = (int)((dst + step - 0.0001) / step); } else { /* The user told us where to put the grid lines. They will * not be equally spaced in this case (i.e, the right edge * won't be a line). */ nsp = (int)((hi - lo) / delta); if (nsp > 100) nsp = 100; } spacing = (max - margin) / nsp; dd[0] = lo; dd[1] = hi; /* Reset the max coordinate to deal with round-off error. */ if (nsp && (delta == 0.0)) { if (axis == x_axis) graph->viewport.width = (int)(spacing * nsp); else graph->viewport.height = (int)(spacing * nsp); } else if (!nsp) { nsp = 1; } /* have to save non-intuitive variables left over from old algorithms for redraws */ if (axis == x_axis) { graph->grid.xsized = 1; graph->grid.xaxis.lin.onedec = onedec; graph->grid.xaxis.lin.mult = mult; graph->grid.xaxis.lin.tenpowmag = tenpowmag2; graph->grid.xaxis.lin.tenpowmagx = tenpowmag; graph->grid.xaxis.lin.digits = digits; (void) strcpy(graph->grid.xaxis.lin.units, buf); graph->grid.xaxis.lin.distance = dst; graph->grid.xaxis.lin.lowlimit = lmt; graph->grid.xaxis.lin.highlimit = hmt; graph->grid.xaxis.lin.spacing = (int)spacing; graph->grid.xaxis.lin.numspace = nsp; } else { graph->grid.ysized = 1; graph->grid.yaxis.lin.onedec = onedec; graph->grid.yaxis.lin.mult = mult; graph->grid.yaxis.lin.tenpowmag = tenpowmag2; graph->grid.yaxis.lin.tenpowmagx = tenpowmag; graph->grid.yaxis.lin.digits = digits; (void) strcpy(graph->grid.yaxis.lin.units, buf); graph->grid.yaxis.lin.distance = dst; graph->grid.yaxis.lin.lowlimit = lmt; graph->grid.yaxis.lin.highlimit = hmt; graph->grid.yaxis.lin.spacing = (int)spacing; graph->grid.yaxis.lin.numspace = nsp; } return (dd); } /* PN static */ void drawlingrid(GRAPH *graph, char *units, int spacing, int nsp, double dst, double lmt, double hmt, bool onedec, int mult, double mag, int digits, Axis axis) { int i, j; double m, step; char buf[GRAPH_UNITS_LENGTH]; NG_IGNORE(onedec); NG_IGNORE(mult); /* i counts how many pixels we have drawn, and j counts which unit * we are at. */ SetLinestyle(1); step = floor((double) dst / nsp * 100.0 + 0.000001); for (i = 0, m = lmt * 100.0; m - 0.001 <= hmt * 100.0; i += spacing, m += step) { j = (int)m; if (j == 0) SetLinestyle(0); if (graph->grid.gridtype != GRID_NONE) { if (axis == x_axis) DevDrawLine(graph->viewportxoff + i, graph->viewportyoff, graph->viewportxoff + i, graph->viewport.height + graph->viewportyoff); else DevDrawLine(graph->viewportxoff, graph->viewportyoff + i, graph->viewport.width + graph->viewportxoff, graph->viewportyoff + i); } if (j == 0) SetLinestyle(1); snprintf(buf, sizeof(buf), "%.*f", digits + 1, m * mag / 100.0); if (axis == x_axis) DevDrawText(buf, graph->viewportxoff + i - ((int) strlen(buf) * graph->fontwidth) / 2, (int) (graph->fontheight * 2.5), 0); else DevDrawText(buf, graph->viewportxoff - graph->fontwidth * (int) strlen(buf), graph->viewportyoff + i - graph->fontheight / 2, 0); /* This is to make sure things work when delta > hi - lo. */ if (nsp == 1) j += 1000; } if (axis == x_axis) DevDrawText(units, (int) (graph->absolute.width * 0.6), graph->fontheight, 0); else DevDrawText(units, graph->fontwidth, (int) (graph->absolute.height - 2 * graph->fontheight), 0); DevUpdate(); } /* Plot a log grid. Note that we pay no attention to x- and y-delta here. */ static double * loggrid(GRAPH *graph, double lo, double hi, int type, Axis axis) { static double dd[2]; int margin; int max; int subs, pp, decsp, lmt, hmt; int i, j; double k; double decs; char buf[GRAPH_UNITS_LENGTH], *s; if (axis == x_axis && graph->grid.xsized) { lmt = graph->grid.xaxis.log.lmt; hmt = graph->grid.xaxis.log.hmt; dd[0] = pow(10.0, (double) lmt); dd[1] = pow(10.0, (double) hmt); return dd; } else if (axis == y_axis && graph->grid.ysized) { lmt = graph->grid.yaxis.log.lmt; hmt = graph->grid.yaxis.log.hmt; dd[0] = pow(10.0, (double) lmt); dd[1] = pow(10.0, (double) hmt); return dd; } if (axis == x_axis) { margin = graph->viewportxoff; max = graph->absolute.width - graph->viewportxoff; } else { margin = graph->viewportyoff; max = graph->absolute.height - graph->viewportyoff; } /* How many orders of magnitude. We are already guaranteed that hi * and lo are positive. */ lmt = (int)floor(mylog10(lo)); hmt = (int)ceil(mylog10(hi)); decs = hmt - lmt; pp = 1; decsp = (int)((max - margin) / decs); if (decsp < 20) { pp = (int)ceil(20.0 / decsp); decsp *= pp; subs = 1; } else if (decsp > 50) { static int divs[ ] = { 20, 10, 5, 4, 2, 1 }; k = 5.0 / decsp; for (i = 0; (size_t) i < NUMELEMS(divs) - 1; i++) { j = divs[i]; if (-log10(((double) j - 1.0) / j) > k) break; } subs = divs[i]; } else { subs = 1; } /* Start at a line */ lmt = (int)(floor((double) lmt / pp) * pp); decs = hmt - lmt; decsp = (int)((max - margin) / decs); dd[0] = pow(10.0, (double) lmt); dd[1] = pow(10.0, (double) hmt); buf[0] = '\0'; s = ft_typabbrev(type); if (!s) s = "Units"; strncat(buf, s, sizeof(buf) - strlen(buf) - 1); if (axis == x_axis) { (void) strcpy(graph->grid.xaxis.log.units, buf); graph->viewport.width = (int)(decs * decsp); graph->grid.xaxis.log.hmt = hmt; graph->grid.xaxis.log.lmt = lmt; graph->grid.xaxis.log.decsp = decsp; graph->grid.xaxis.log.subs = subs; graph->grid.xaxis.log.pp = pp; graph->grid.xsized = 1; } else { (void) strcpy(graph->grid.yaxis.log.units, buf); graph->viewport.height = (int)(decs * decsp); graph->grid.yaxis.log.hmt = hmt; graph->grid.yaxis.log.lmt = lmt; graph->grid.yaxis.log.decsp = decsp; graph->grid.yaxis.log.subs = subs; graph->grid.yaxis.log.pp = pp; graph->grid.ysized = 1; } return (dd); } /* PN static */ void drawloggrid(GRAPH *graph, char *units, int hmt, int lmt, int decsp, int subs, int pp, Axis axis) { int i, j, k, m; double t; char buf[GRAPH_UNITS_LENGTH]; /* Now plot every pp'th decade line, with subs lines between them. */ if (subs > 1) SetLinestyle(0); for (i = 0, j = lmt; j <= hmt; i += decsp * pp, j += pp) { /* Draw the decade line */ if (graph->grid.gridtype != GRID_NONE) { if (axis == x_axis) DevDrawLine(graph->viewportxoff + i, graph->viewportyoff, graph->viewportxoff + i, graph->viewport.height +graph->viewportyoff); else DevDrawLine(graph->viewportxoff, graph->viewportyoff + i, graph->viewport.width + graph->viewportxoff, graph->viewportyoff + i); } if (j == -2) (void) sprintf(buf, "0.01"); else if (j == -1) (void) sprintf(buf, "0.1"); else if (j == 0) (void) sprintf(buf, "1"); else if (j == 1) (void) sprintf(buf, "10"); else if (j == 2) (void) sprintf(buf, "100"); else (void) sprintf(buf, "10^%d", j); if (axis == x_axis) DevDrawText(buf, graph->viewportxoff + i - ((int) strlen(buf) * graph->fontwidth) / 2, (int) (graph->fontheight * 2.5), 0); else DevDrawText(buf, graph->viewportxoff - graph->fontwidth * (int) (strlen(buf) + 1), graph->viewportyoff + i - graph->fontheight / 2, 0); if (j >= hmt) break; /* Now draw the subdivision lines */ if (subs > 1) { SetLinestyle(1); t = 10.0 / subs; for (k = (int)ceil(subs / 10.0) + 1; k < subs; k++) { m = (int)(i + decsp * log10((double) t * k)); if (graph->grid.gridtype != GRID_NONE) { if (axis == x_axis) DevDrawLine(graph->viewportxoff + m, graph->viewportyoff, graph->viewportxoff + m, graph->viewport.height + graph->viewportyoff); else DevDrawLine(graph->viewportxoff, graph->viewportyoff + m, graph->viewport.width + graph->viewportxoff, graph->viewportyoff + m); } } SetLinestyle(0); } } if (axis == x_axis) DevDrawText(units, (int) (graph->absolute.width * 0.6), graph->fontheight, 0); else DevDrawText(units, graph->fontwidth, (int) (graph->absolute.height - 2 * graph->fontheight), 0); DevUpdate(); } /* Polar grids */ static void polargrid(GRAPH *graph) { double d, mx, my, tenpowmag; int hmt, lmt, mag; double minrad, maxrad; /* Make sure that our area is square. */ if (graph->viewport.width > graph->viewport.height) graph->viewport.width = graph->viewport.height; else graph->viewport.height = graph->viewport.width; /* Make sure that the borders are even */ if (graph->viewport.width & 1) { graph->viewport.width += 1; graph->viewport.height += 1; } graph->grid.xaxis.circular.center = graph->viewport.width / 2 + graph->viewportxoff; graph->grid.yaxis.circular.center = graph->viewport.height / 2 + graph->viewportyoff; graph->grid.xaxis.circular.radius = graph->viewport.width / 2; /* Figure out the minimum and maximum radii we're dealing with. */ mx = (graph->data.xmin + graph->data.xmax) / 2; my = (graph->data.ymin + graph->data.ymax) / 2; d = hypot(mx, my); maxrad = d + (graph->data.xmax - graph->data.xmin) / 2; minrad = d - (graph->data.xmax - graph->data.xmin) / 2; if (maxrad == 0.0) { fprintf(cp_err, "Error: 0 radius in polargrid\n"); return; } if ((graph->data.xmin < 0) && (graph->data.ymin < 0) && (graph->data.xmax > 0) && (graph->data.ymax > 0)) minrad = 0; mag = (int)floor(mylog10(maxrad)); tenpowmag = pow(10.0, (double) mag); hmt = (int)(maxrad / tenpowmag); lmt = (int)(minrad / tenpowmag); if (hmt * tenpowmag < maxrad) hmt++; if (lmt * tenpowmag > minrad) lmt--; maxrad = hmt * tenpowmag; minrad = lmt * tenpowmag; /* Make sure that the range is square */ mx = graph->data.xmax - graph->data.xmin; my = graph->data.ymax - graph->data.ymin; graph->datawindow.xmin = graph->data.xmin; graph->datawindow.xmax = graph->data.xmax; graph->datawindow.ymin = graph->data.ymin; graph->datawindow.ymax = graph->data.ymax; if (mx > my) { graph->datawindow.ymin -= (mx - my) / 2; graph->datawindow.ymax += (mx - my) / 2; } else if (mx < my) { graph->datawindow.xmin -= (my - mx) / 2; graph->datawindow.xmax += (my - mx) / 2; } /* Range is square with upper bound maxrad */ graph->grid.xaxis.circular.hmt = hmt; graph->grid.xaxis.circular.lmt = lmt; graph->grid.xaxis.circular.mag = mag; } static void drawpolargrid(GRAPH *graph) { double tenpowmag, theta; int hmt, lmt, i, step, mag; int relcx, relcy, relrad, dist, degs; int x1, y1, x2, y2; double minrad, pixperunit; char buf[64]; hmt = graph->grid.xaxis.circular.hmt; lmt = graph->grid.xaxis.circular.lmt; mag = graph->grid.xaxis.circular.mag; tenpowmag = pow(10.0, (double) mag); minrad = lmt * tenpowmag; if ((minrad == 0) && ((hmt - lmt) > 5)) { if (!((hmt - lmt) % 2)) step = 2; else if (!((hmt - lmt) % 3)) step = 3; else step = 1; } else { step = 1; } pixperunit = graph->grid.xaxis.circular.radius * 2 / (graph->datawindow.xmax - graph->datawindow.xmin); relcx = - (int)((graph->datawindow.xmin + graph->datawindow.xmax) / 2 * pixperunit); relcy = - (int)((graph->datawindow.ymin + graph->datawindow.ymax) / 2 * pixperunit); /* The distance from the center of the plotting area to the center of * the logical area. */ dist = (int)hypot(relcx, relcy); SetLinestyle(0); DevDrawArc(graph->grid.xaxis.circular.center, graph->grid.yaxis.circular.center, graph->grid.xaxis.circular.radius, 0.0, 2*M_PI); SetLinestyle(1); /* Now draw the circles. */ for (i = lmt; (relrad = (int)(i * tenpowmag * pixperunit)) <= dist + graph->grid.xaxis.circular.radius; i += step) { cliparc((double) graph->grid.xaxis.circular.center + relcx, (double) graph->grid.yaxis.circular.center + relcy, (double) relrad, 0.0, 2*M_PI, graph->grid.xaxis.circular.center, graph->grid.yaxis.circular.center, graph->grid.xaxis.circular.radius, 0); /* Toss on the label */ if (relcx || relcy) theta = atan2((double) relcy, (double) relcx); else theta = M_PI; if (i && (relrad > dist - graph->grid.xaxis.circular.radius)) addradlabel(graph, i, theta, (int) (graph->grid.xaxis.circular.center - (relrad - dist) * cos(theta)), (int) (graph->grid.yaxis.circular.center - (relrad - dist) * sin(theta))); } /* Now draw the spokes. We have two possible cases -- first, the * origin may be inside the area -- in this case draw 12 spokes. * Otherwise, draw several spokes at convenient places. */ if ((graph->datawindow.xmin <= 0.0) && (graph->datawindow.xmax >= 0.0) && (graph->datawindow.ymin <= 0.0) && (graph->datawindow.ymax >= 0.0)) { for (i = 0; i < 12; i++) { x1 = graph->grid.xaxis.circular.center + relcx; y1 = graph->grid.yaxis.circular.center + relcy; x2 = (int)(x1 + graph->grid.xaxis.circular.radius * 2 * cos(i * M_PI / 6)); y2 = (int)(y1 + graph->grid.xaxis.circular.radius * 2 * sin(i * M_PI / 6)); if (!clip_to_circle(&x1, &y1, &x2, &y2, graph->grid.xaxis.circular.center, graph->grid.yaxis.circular.center, graph->grid.xaxis.circular.radius)) { DevDrawLine(x1, y1, x2, y2); /* Add a label here */ /*XXXX*/ adddeglabel(graph, i * 30, x2, y2, x1, y1, graph->grid.xaxis.circular.center, graph->grid.yaxis.circular.center); } } } else { /* Figure out the angle that we have to fill up */ theta = 2 * asin((double) graph->grid.xaxis.circular.radius / dist); theta = theta * 180 / M_PI; /* Convert to degrees. */ /* See if we should put lines at 30, 15, 5, or 1 degree * increments. */ if (theta / 30 > 3) degs = 30; else if (theta / 15 > 3) degs = 15; else if (theta / 5 > 3) degs = 5; else degs = 1; /* We'll be cheap */ for (i = 0; i < 360; i += degs) { x1 = graph->grid.xaxis.circular.center + relcx; y1 = graph->grid.yaxis.circular.center + relcy; x2 = (int)(x1 + dist * 2 * cos(i * M_PI / 180)); y2 = (int)(y1 + dist * 2 * sin(i * M_PI / 180)); if (!clip_to_circle(&x1, &y1, &x2, &y2, graph->grid.xaxis.circular.center, graph->grid.yaxis.circular.center, graph->grid.xaxis.circular.radius)) { DevDrawLine(x1, y1, x2, y2); /* Put on the label */ adddeglabel(graph, i, x2, y2, x1, y1, graph->grid.xaxis.circular.center, graph->grid.yaxis.circular.center); } } } (void) sprintf(buf, "e%d", mag); DevDrawText(buf, graph->grid.xaxis.circular.center + graph->grid.xaxis.circular.radius, graph->grid.yaxis.circular.center - graph->grid.xaxis.circular.radius, 0); DevUpdate(); } /* Put a degree label on the screen, with 'deg' as the label, near point (x, y) * such that the perpendicular to (cx, cy) and (x, y) doesn't overwrite the * label. If the distance between the center and the point is * too small, don't put the label on. */ #define LOFF 5 #define MINDIST 10 static void adddeglabel(GRAPH *graph, int deg, int x, int y, int cx, int cy, int lx, int ly) { char buf[8]; int d, w, h; double angle; if (hypot(x - cx, y - cy) < MINDIST) return; (void) sprintf(buf, "%d", deg); w = graph->fontwidth * (int) (strlen(buf) + 1); h = (int)(graph->fontheight * 1.5); angle = atan2((double) (y - ly), (double) (x - lx)); d = (int)(fabs(cos(angle)) * w / 2 + fabs(sin(angle)) * h / 2 + LOFF); x = (int)(x + d * cos(angle) - w / 2); y = (int)(y + d * sin(angle) - h / 2); DevDrawText(buf, x, y, 0); DevDrawText("o", x + (int) strlen(buf) * graph->fontwidth, y + graph->fontheight / 2, 0); } /* This is kind of wierd. If dist = 0, then this is the normal case, where * the labels should go along the positive X-axis. Otherwise, to make * sure that all circles drawn have labels, put the label near the circle * along the line from the logical center to the physical center. */ static void addradlabel(GRAPH *graph, int lab, double theta, int x, int y) { char buf[32]; (void) sprintf(buf, "%d", lab); if (theta == M_PI) { y -= graph->fontheight + 2; x -= graph->fontwidth * (int) strlen(buf) + 3; } else { x -= graph->fontwidth * (int) strlen(buf) + 3; } DevDrawText(buf, x, y, 0); } /* Smith charts. */ #define gr_xcenter graph->grid.xaxis.circular.center #define gr_ycenter graph->grid.yaxis.circular.center #define gr_radius graph->grid.xaxis.circular.radius #define gi_fntwidth graph->fontwidth #define gi_fntheight graph->fontheight #define gi_maxx graph->viewport.width+graph->viewportxoff #define gr_xmargin graph->viewportxoff #define gr_ymargin graph->viewportyoff static void smithgrid(GRAPH *graph) { double mx, my; SetLinestyle(0); /* Make sure that our area is square. */ if (graph->viewport.width > graph->viewport.height) graph->viewport.width = graph->viewport.height; else graph->viewport.height = graph->viewport.width; /* Make sure that the borders are even */ if (graph->viewport.width & 1) { graph->viewport.width += 1; graph->viewport.height += 1; } graph->grid.xaxis.circular.center = graph->viewport.width / 2 + graph->viewportxoff; graph->grid.yaxis.circular.center = graph->viewport.height / 2 + graph->viewportyoff; graph->grid.xaxis.circular.radius = graph->viewport.width / 2; /* We have to make sure that the range is square. */ graph->datawindow.xmin = graph->data.xmin; graph->datawindow.xmax = graph->data.xmax; graph->datawindow.ymin = graph->data.ymin; graph->datawindow.ymax = graph->data.ymax; if (graph->datawindow.ymin > 0) graph->datawindow.ymin *= -1; if (graph->datawindow.xmin > 0) graph->datawindow.xmin *= -1; if (graph->datawindow.ymax < 0) graph->datawindow.ymax *= -1; if (graph->datawindow.xmax < 0) graph->datawindow.xmax *= -1; if (fabs(graph->datawindow.ymin) > fabs(graph->datawindow.ymax)) graph->datawindow.ymax = - graph->datawindow.ymin; else graph->datawindow.ymin = - graph->datawindow.ymax; if (fabs(graph->datawindow.xmin) > fabs(graph->datawindow.xmax)) graph->datawindow.xmax = - graph->datawindow.xmin; else graph->datawindow.xmin = - graph->datawindow.xmax; mx = graph->datawindow.xmax - graph->datawindow.xmin; my = graph->datawindow.ymax - graph->datawindow.ymin; if (mx > my) { graph->datawindow.ymin -= (mx - my) / 2; graph->datawindow.ymax += (mx - my) / 2; } else if (mx < my) { graph->datawindow.xmin -= (my - mx) / 2; graph->datawindow.xmax += (my - mx) / 2; } /* Issue a warning if our data range is not normalized */ if (graph->datawindow.ymax > 1.1) { printf("\nwarning: exceeding range for smith chart"); printf("\nplease normalize your data to -1 < r < +1\n"); } } /* maximum number of circles */ #define CMAX 50 static void drawsmithgrid(GRAPH *graph) { double mx, my, d, dphi[CMAX], maxrad, rnorm[CMAX]; double pixperunit; int mag, i = 0, j = 0, k; double ir[CMAX], rr[CMAX], ki[CMAX], kr[CMAX], ks[CMAX]; int xoff, yoff, zheight; int basemag, plen; char buf[64], plab[32], nlab[32]; /* Figure out the minimum and maximum radii we're dealing with. */ mx = (graph->datawindow.xmin + graph->datawindow.xmax) / 2; my = (graph->datawindow.ymin + graph->datawindow.ymax) / 2; d = hypot(mx, my); maxrad = d + (graph->datawindow.xmax - graph->datawindow.xmin) / 2; mag = (int)floor(mylog10(maxrad)); pixperunit = graph->viewport.width / (graph->datawindow.xmax - graph->datawindow.xmin); xoff = - (int)(pixperunit * (graph->datawindow.xmin + graph->datawindow.xmax) / 2); yoff = - (int)(pixperunit * (graph->datawindow.ymin + graph->datawindow.ymax) / 2); /* Sweep the range from 10e-20 to 10e20. If any arcs fall into the * picture, plot the arc set. */ for (mag = -20; mag < 20; mag++) { i = (int)(gr_radius * pow(10.0, (double) mag) / maxrad); if (i > 10) { j = 1; break; } else if (i > 5) { j = 2; break; } else if (i > 2) { j = 5; break; } } k = 1; /* SetLinestyle(1); takes too long */ /* Problems with Suns on very large radii && linestyle */ SetLinestyle(0); /* Now plot all the arc sets. Go as high as 5 times the radius that * will fit on the screen. The base magnitude is one more than * the least magnitude that will fit... */ if (i > 20) basemag = mag; else basemag = mag + 1; /* Go back one order of magnitude and have a closer look */ mag -= 2; j *= 10; while (mag < 20) { i = (int)(j * pow(10.0, (double) mag) * pixperunit / 2); if (i / 5 > gr_radius + abs(xoff)) break; rnorm[k] = j * pow(10.0, (double) (mag - basemag)); dphi[k] = 2.0 * atan(rnorm[k]); ir[k] = pixperunit * (1 + cos(dphi[k])) / sin(dphi[k]); rr[k] = pixperunit * 0.5 * (((1 - rnorm[k]) / (1 + rnorm[k])) + 1); (void) sprintf(plab, "%g", rnorm[k]); plen = (int) strlen(plab); /* See if the label will fit on the upper xaxis */ /* wait for some k, so we don't get fooled */ if (k > 6) { if ((int) (gr_radius - xoff - pixperunit + 2 * rr[k]) < plen * gi_fntwidth + 2) break; } /* See if the label will fit on the lower xaxis */ /* First look at the leftmost circle possible*/ if ((int) (pixperunit - 2 * rr[k] + gr_radius + xoff + fabs((double) yoff)) < plen * gi_fntwidth + 4) { if (j == 95) { j = 10; mag++; } else { if (j < 20) j += 1; else j += 5; } continue; } /* Then look at the circles following in the viewport */ if (k>1 && (int) 2 * (rr[k-1] - rr[k]) < plen * gi_fntwidth + 4) { if (j == 95) { j = 10; mag++; } else { if (j < 20) j += 1; else j += 5; } continue; } if (j == 95) { j = 10; mag++; } else { if (j < 20) j += 1; else j += 5; } ki[k-1] = ir[k]; kr[k-1] = rr[k]; k++; if (k == CMAX) { printf("drawsmithgrid: grid too complex\n"); break; } } k--; /* Now adjust the clipping radii */ for (i = 0; i < k; i++) ks[i] = ki[i]; for (i = k-1, j = k-1; i >= 0; i -= 2, j--) { ki[i] = ks[j]; if (i > 0) ki[i-1] = ks[j]; } for (i = 0; i < k; i++) ks[i] = kr[i]; for (i = k-1, j = k-1; (i >= 0) && (dphi[i] > M_PI / 2); i -= 2, j--) { kr[i] = ks[j]; if (i > 0) kr[i-1] = ks[j]; } for (; i >= 0; i--, j--) kr[i] = ks[j]; if ((yoff > - gr_radius) && (yoff < gr_radius)) { zheight = (int)(gr_radius * cos(asin((double) yoff / gr_radius))); zheight = abs(zheight); } else { zheight = gr_radius; } for (ki[k] = kr[k] = 0.0; k > 0; k--) { (void) sprintf(plab, "%g", rnorm[k]); (void) sprintf(nlab, "-%g", rnorm[k]); arcset(graph, rr[k], kr[k], ir[k], ki[k], pixperunit, gr_radius, gr_xcenter, gr_ycenter, xoff, yoff, plab, nlab, (int) (0.5 + RAD_TO_DEG * (M_PI - dphi[k])), (int) (0.5 + RAD_TO_DEG * (M_PI + dphi[k])), gr_xcenter - zheight, gr_xcenter + zheight); } if (mag == 20) { fprintf(cp_err, "smithgrid: Internal Error: screwed up\n"); return; } SetLinestyle(0); DevDrawArc(gr_xcenter, gr_ycenter, gr_radius, 0.0, 2*M_PI); /* * if ((xoff > - gr_radius) && (xoff < gr_radius)) { * zheight = gr_radius * sin(acos((double) xoff / gr_radius)); * if (zheight < 0) * zheight = - zheight; * DevDrawLine(gr_xcenter + xoff, gr_ycenter - zheight, * gr_xcenter + xoff, gr_ycenter + zheight); * } */ if ((yoff > - gr_radius) && (yoff < gr_radius)) { zheight = (int)(gr_radius * cos(asin((double) yoff / gr_radius))); if (zheight < 0) zheight = - zheight; DevDrawLine(gr_xcenter - zheight, gr_ycenter + yoff, gr_xcenter + zheight, gr_ycenter + yoff); DevDrawText("0", gr_xcenter + zheight + gi_fntwidth, gr_ycenter + yoff - gi_fntheight / 2, 0); DevDrawText("o", gr_xcenter + zheight + gi_fntwidth * 2, gr_ycenter + yoff, 0); DevDrawText("180", gr_xcenter - zheight - gi_fntwidth * 5, gr_ycenter + yoff - gi_fntheight / 2, 0); DevDrawText("o", gr_xcenter - zheight - gi_fntwidth * 2, gr_ycenter + yoff, 0); } /* (void) sprintf(buf, "e%d", basemag); */ (void) sprintf(buf, "e%d", 0); DevDrawText(buf, gr_xcenter + gr_radius, gr_ycenter - gr_radius, 0); DevUpdate(); } /* Draw one arc set. The arcs should have radius rad. The outermost circle is * described by (centx, centy) and maxrad, and the distance from the right side * of the bounding circle to the logical center of the other circles in pixels * is xoffset (positive brings the negative plane into the picture). * plab and nlab are the labels to put on the positive and negative X-arcs, * respectively... If the X-axis isn't on the screen, then we have to be * clever... */ static void arcset(GRAPH *graph, double rad, double prevrad, double irad, double iprevrad, double radoff, int maxrad, int centx, int centy, int xoffset, int yoffset, char *plab, char *nlab, int pdeg, int ndeg, int pxmin, int pxmax) { double aclip; double angle = atan2((double) iprevrad, (double) rad); double iangle = atan2((double) prevrad, (double) irad); int x, xlab, ylab; NG_IGNORE(nlab); /* Let's be lazy and just draw everything -- we won't get called too * much and the circles get clipped anyway... */ SetColor(18); cliparc((double) (centx + xoffset + radoff - rad), (double) (centy + yoffset), rad, 2*angle, 2 * M_PI - 2 * angle, centx, centy, maxrad, 0); /* These circles are not part of the smith chart * Let's draw them anyway */ cliparc((double) (centx + xoffset + radoff + rad), (double) (centy + yoffset), rad, M_PI + 2 * angle, M_PI - 2 * angle, centx, centy, maxrad, 0); /* Draw the upper and lower circles. */ SetColor(19); aclip = cliparc((double) (centx + xoffset + radoff), (double) (centy + yoffset + irad), irad, (double) (M_PI * 1.5 + 2 * iangle), (double) (M_PI * 1.5 - 2 * iangle), centx, centy, maxrad, 1); if ((aclip > M_PI / 180) && (pdeg > 1)) { xlab = (int)(centx + xoffset + radoff + irad * cos(aclip)); ylab = (int)(centy + yoffset + irad * (1 + sin(aclip))); if ((ylab - gr_ycenter) > graph->fontheight) { SetColor(1); adddeglabel(graph, pdeg, xlab, ylab, gr_xcenter, gr_ycenter, gr_xcenter, gr_ycenter); /* ylab = centy + yoffset - irad * (1 + sin(aclip)); adddeglabel(graph, ndeg, xlab, ylab, gr_xcenter, gr_ycenter, gr_xcenter, gr_ycenter); */ SetColor(19); } } aclip = cliparc((double) (centx + xoffset + radoff), (double) (centy + yoffset - irad), irad, (double) (M_PI / 2 + 2 * iangle), (double) (M_PI / 2 - 2 * iangle), centx, centy, maxrad, (iangle == 0) ? 2 : 0); if ((aclip >= 0 && aclip < 2*M_PI - M_PI/180) && (pdeg < 359)) { xlab = (int)(centx + xoffset + radoff + irad * cos(aclip)); ylab = (int)(centy + yoffset + irad * (sin(aclip) - 1)); SetColor(1); adddeglabel(graph, ndeg, xlab, ylab, gr_xcenter, gr_ycenter, gr_xcenter, gr_ycenter); SetColor(19); } /* Now toss the labels on... */ SetColor(1); x = centx + xoffset + (int)radoff - 2 * (int)rad - gi_fntwidth * (int) strlen(plab) - 2; if ((x > pxmin) && (x < pxmax)) { if ((yoffset > - gr_radius) && (yoffset < gr_radius)) DevDrawText(plab, x, centy + yoffset - gi_fntheight - 1, 0); else DevDrawText(plab, x, gr_ymargin - 3 * gi_fntheight - 2, 0); } /* * x = centx + xoffset + (int) radoff + 2 * (int)rad - * gi_fntwidth * strlen(nlab) - 2; * if ((x > gr_xmargin) && (x < gi_maxx)) * DevDrawText(nlab, x, centy + yoffset - gi_fntheight - 1, 0); */ } /* This routine draws an arc and clips it to a circle. It's hard to figure * out how it works without looking at the piece of scratch paaper I have * in front of me, so let's hope it doesn't break... * Converted to all doubles for CRAYs */ static double cliparc(double cx, double cy, double rad, double start, double end, int iclipx, int iclipy, int icliprad, int flag) { double clipx, clipy, cliprad; double sclip = 0.0, eclip = 0.0; double x, y, tx, ty, dist; double alpha, theta, phi, a1, a2, d, l; bool in; clipx = (double) iclipx; clipy = (double) iclipy; cliprad = (double) icliprad; x = cx - clipx; y = cy - clipy; dist = hypot(x, y); if (!rad || !cliprad) return (-1); if (dist + rad < cliprad) { /* The arc is entirely in the boundary. */ DevDrawArc((int)cx, (int)cy, (int)rad, start, end-start); return (flag?start:end); } else if ((dist - rad >= cliprad) || (rad - dist >= cliprad)) { /* The arc is outside of the boundary. */ return (-1); } /* Now let's figure out the angles at which the arc crosses the * circle. We know dist != 0. */ if (x) phi = atan2((double) y, (double) x); else if (y > 0) phi = M_PI * 1.5; else phi = M_PI / 2; if (cx > clipx) theta = M_PI + phi; else theta = phi; alpha = (double) (dist * dist + rad * rad - cliprad * cliprad) / (2 * dist * rad); /* Sanity check */ if (alpha > 1.0) alpha = 0.0; else if (alpha < -1.0) alpha = M_PI; else alpha = acos(alpha); a1 = theta + alpha; a2 = theta - alpha; while (a1 < 0) a1 += M_PI * 2; while (a2 < 0) a2 += M_PI * 2; while (a1 >= M_PI * 2) a1 -= M_PI * 2; while (a2 >= M_PI * 2) a2 -= M_PI * 2; tx = cos(start) * rad + x; ty = sin(start) * rad + y; d = hypot(tx, ty); in = (d > cliprad) ? FALSE : TRUE; /* Now begin with start. If the point is in, draw to either end, a1, * or a2, whichever comes first. */ d = M_PI * 3; if ((end < d) && (end > start)) d = end; if ((a1 < d) && (a1 > start)) d = a1; if ((a2 < d) && (a2 > start)) d = a2; if (d == M_PI * 3) { d = end; if (a1 < d) d = a1; if (a2 < d) d = a2; } if (in) { if (start > d) { SWAP(double, start, d); } DevDrawArc((int)cx, (int)cy, (int)rad, start, d-start); sclip = start; eclip = d; } if (d == end) return (flag?sclip:eclip); if (a1 != a2) in = in ? FALSE : TRUE; /* Now go from here to the next point. */ l = d; d = M_PI * 3; if ((end < d) && (end > l)) d = end; if ((a1 < d) && (a1 > l)) d = a1; if ((a2 < d) && (a2 > l)) d = a2; if (d == M_PI * 3) { d = end; if (a1 < d) d = a1; if (a2 < d) d = a2; } if (in) { DevDrawArc((int)cx, (int)cy, (int)rad, l, d-l); sclip = l; eclip = d; } if (d == end) return (flag?sclip:eclip); in = in ? FALSE : TRUE; /* And from here to the end. */ if (in) { DevDrawArc((int)cx, (int)cy, (int)rad, d, end-d); /* special case */ if (flag != 2) { sclip = d; eclip = end; } } return (flag % 2 ? sclip : eclip); } tmpk8ny_4pz/src/frontend/plotting/plotit.h0000644000175000017500000000016213546075722021111 0ustar carstencarsten#ifndef ngspice_PLOTIT_H #define ngspice_PLOTIT_H bool plotit(wordlist *wl, char *hcopy, char *devname); #endif tmpk8ny_4pz/src/frontend/plotting/graf.h0000644000175000017500000000207513546075722020522 0ustar carstencarsten/************* * Header file for graf.c * 1999 E. Rouat ************/ #ifndef ngspice_GRAF_H #define ngspice_GRAF_H #include "ngspice/graph.h" int gr_init(double *xlims, double *ylims, char *xname, char *plotname, char *hcopy, int nplots, double xdelta, double ydelta, GRIDTYPE gridtype, PLOTTYPE plottype, char *xlabel, char *ylabel, int xtype, int ytype, char *pname, char *commandline); void gr_point(struct dvec *dv, double newx, double newy, double oldx, double oldy, int np); void gr_start(struct dvec *dv); void gr_relinestyle(GRAPH *graph); void drawlegend(GRAPH *graph, int plotno, struct dvec *dv); void gr_end(struct dvec *dv); void gr_pmsg(char *text); void gr_clean(void); void gr_resize(GRAPH *graph); void gr_resize_internal(GRAPH *graph); void gr_redraw(GRAPH *graph); void gr_restoretext(GRAPH *graph); void reset_trace(void); void gr_iplot(struct plot *plot); void gr_end_iplot(void); double *readtics(char *string); #endif tmpk8ny_4pz/src/frontend/com_unset.c0000644000175000017500000000105313546075722017725 0ustar carstencarsten/************* * com_unset.c ************/ #include "ngspice/ngspice.h" #include "ngspice/macros.h" #include "ngspice/bool.h" #include "com_unset.h" #include "variable.h" void com_unset(wordlist *wl) { char *name; struct variable *var, *nv; if (eq(wl->wl_word, "*")) { for (var = variables; var; var = nv) { nv = var->va_next; cp_remvar(var->va_name); } wl = wl->wl_next; } while (wl != NULL) { name = wl->wl_word; cp_remvar(name); wl = wl->wl_next; } } tmpk8ny_4pz/src/frontend/newcoms.h0000644000175000017500000000025313546075722017412 0ustar carstencarsten/************* * Header file for newcoms.c * 1999 E. Rouat ************/ #ifndef ngspice_NEWCOMS_H #define ngspice_NEWCOMS_H void com_reshape(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/inp.c0000644000175000017500000022067013546075722016527 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher **********/ /* * Stuff for dealing with spice input decks and command scripts, and * the listing routines. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/cpdefs.h" #include "ngspice/inpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/fteinp.h" #include "inp.h" #include "runcoms.h" #include "inpcom.h" #include "circuits.h" #include "completion.h" #include "variable.h" #include "breakp2.h" #include "dotcards.h" #include "../misc/util.h" /* ngdirname() */ #include "../misc/mktemp.h" #include "../misc/misc_time.h" #include "subckt.h" #include "spiceif.h" #include "com_let.h" #include "com_commands.h" #ifdef XSPICE #include "ngspice/ipctiein.h" #include "ngspice/enh.h" #endif #include "numparam/numpaif.h" #include "ngspice/stringskip.h" #include "ngspice/randnumb.h" #define line_free(line, flag) \ do { \ line_free_x(line, flag); \ line = NULL; \ } while(0) static char *upper(register char *string); static bool doedit(char *filename); static struct card *com_options = NULL; static struct card *mc_deck = NULL; static struct card *recent_deck = NULL; static void cktislinear(CKTcircuit *ckt, struct card *deck); static void dotifeval(struct card *deck); static void recifeval(struct card *pdeck); static wordlist *inp_savecurrents(struct card *deck, struct card *options, wordlist *wl, wordlist *controls); static void eval_agauss(struct card *deck, char *fcn); void line_free_x(struct card *deck, bool recurse); void create_circbyline(char *line); //void inp_source_recent(void); //void inp_mc_free(void); //void inp_remove_recent(void); static bool mc_reload = FALSE; void eval_seed_opt(struct card *deck); extern bool ft_batchmode; #ifdef SHARED_MODULE extern void exec_controls(wordlist *controls); #endif /* structure used to save expression parse trees for .model and * device instance lines */ struct pt_temper { char *expression; wordlist *wl; wordlist *wlend; INPparseTree *pt; struct pt_temper *next; }; static int inp_parse_temper(struct card *deck, struct pt_temper **motdlist_p, struct pt_temper **devtlist_p); static void inp_parse_temper_trees(struct circ *ckt); /* * create an unique artificial *unusable* FILE ptr * meant to be used with Xprintf() only to eventually * redirect output to the `out_vprintf()' family */ static FILE *cp_more; static FILE *cp_more = (FILE*) &cp_more; static void Xprintf(FILE *fdst, const char *fmt, ...) { va_list ap; va_start(ap, fmt); if (fdst == cp_more) out_vprintf(fmt, ap); else vfprintf(fdst, fmt, ap); va_end(ap); } /* Do a listing. Use is listing [expanded] [logical] [physical] [deck] */ void com_listing(wordlist *wl) { int type = LS_LOGICAL; bool expand = FALSE, do_param_listing = FALSE; char *s; if (ft_curckt) { /* if there is a current circuit . . . . */ while (wl) { s = wl->wl_word; if (strcmp(s, "param") == 0) { do_param_listing = TRUE; } else { switch (*s) { case 'l': case 'L': type = LS_LOGICAL; break; case 'p': case 'P': type = LS_PHYSICAL; break; case 'd': case 'D': type = LS_DECK; break; case 'e': case 'E': expand = TRUE; break; default: fprintf(cp_err, "Error: bad listing type %s\n", s); return; /* SJB - don't go on after an error */ } } wl = wl->wl_next; } if (do_param_listing) { nupa_list_params(cp_out); } else { if (type != LS_DECK) fprintf(cp_out, "\t%s\n\n", ft_curckt->ci_name); inp_list(cp_out, expand ? ft_curckt->ci_deck : ft_curckt->ci_origdeck, ft_curckt->ci_options, type); } } else { fprintf(cp_err, "Error: no circuit loaded.\n"); } } /* returns inp_casefix() or NULL */ static char * upper(char *string) { static char buf[BSIZE_SP]; if (string) { strncpy(buf, string, BSIZE_SP - 1); buf[BSIZE_SP - 1] = '\0'; inp_casefix(buf); } else { strcpy(buf, ""); } return buf; } /* Provide an input listing on the specified file of the given card * deck. The listing should be of either LS_PHYSICAL or LS_LOGICAL or * LS_DECK lines as specified by the type parameter. */ void inp_list(FILE *file, struct card *deck, struct card *extras, int type) { struct card *here; struct card *there; bool renumber; bool useout = (file == cp_out); int i = 1; /* gtri - wbk - 03/07/91 - Don't use 'more' type output if ipc enabled */ #ifdef XSPICE if (g_ipc.enabled) useout = FALSE; #endif /* gtri - end - 03/07/91 */ if (useout) { out_init(); file = cp_more; } renumber = cp_getvar("renumber", CP_BOOL, NULL, 0); if (type == LS_LOGICAL) { top1: for (here = deck; here; here = here->nextcard) { if (renumber) here->linenum = i; if (ciprefix(".end", here->line) && !isalpha_c(here->line[4])) continue; if (*here->line != '*') { Xprintf(file, "%6d : %s\n", here->linenum, upper(here->line)); if (here->error) Xprintf(file, "%s\n", here->error); } i++; } if (extras) { deck = extras; extras = NULL; goto top1; } Xprintf(file, "%6d : .end\n", i); } else if ((type == LS_PHYSICAL) || (type == LS_DECK)) { top2: for (here = deck; here; here = here->nextcard) { if ((here->actualLine == NULL) || (here == deck)) { if (renumber) here->linenum = i; if (ciprefix(".end", here->line) && !isalpha_c(here->line[4])) continue; if (type == LS_PHYSICAL) Xprintf(file, "%6d : %s\n", here->linenum, upper(here->line)); else Xprintf(file, "%s\n", upper(here->line)); if (here->error && (type == LS_PHYSICAL)) Xprintf(file, "%s\n", here->error); } else { for (there = here->actualLine; there; there = there->nextcard) { there->linenum = i++; if (ciprefix(".end", here->line) && isalpha_c(here->line[4])) continue; if (type == LS_PHYSICAL) Xprintf(file, "%6d : %s\n", there->linenum, upper(there->line)); else Xprintf(file, "%s\n", upper(there->line)); if (there->error && (type == LS_PHYSICAL)) Xprintf(file, "%s\n", there->error); } here->linenum = i; } i++; } if (extras) { deck = extras; extras = NULL; goto top2; } if (type == LS_PHYSICAL) Xprintf(file, "%6d : .end\n", i); else Xprintf(file, ".end\n"); } else { fprintf(cp_err, "inp_list: Internal Error: bad type %d\n", type); } } /* * Free memory used by a line. * If recurse is TRUE then recursively free all lines linked via the ->nextcard field. * If recurse is FALSE free only this line. * All lines linked via the ->actualLine field are always recursivly freed. * SJB - 22nd May 2001 */ void line_free_x(struct card *deck, bool recurse) { while (deck) { struct card *next_deck = deck->nextcard; line_free_x(deck->actualLine, TRUE); tfree(deck->line); tfree(deck->error); tfree(deck); if (!recurse) return; deck = next_deck; } } /* concatenate two lists, destructively altering the first one */ struct card * line_nconc(struct card *head, struct card *rest) { struct card *p = head; if (!rest) return head; if (!head) return rest; while (p->nextcard) p = p->nextcard; p->nextcard = rest; return head; } /* reverse the linked list struct card */ struct card * line_reverse(struct card *head) { struct card *prev = NULL; struct card *next; while (head) { next = head->nextcard; head->nextcard = prev; prev = head; head = next; } return prev; } /* store ft_curckt->ci_mcdeck into a 'previous' deck */ void inp_mc_free(void) { if (ft_curckt && ft_curckt->ci_mcdeck) { if (recent_deck && recent_deck != ft_curckt->ci_mcdeck) { struct circ *pp; /* NULL any ci_mcdeck entry from ft_circuits whose address equals recent_deck, then free this address */ for (pp = ft_circuits; pp; pp = pp->ci_next) if (pp->ci_mcdeck == recent_deck) { pp->ci_mcdeck = NULL; } line_free(recent_deck, TRUE); } recent_deck = ft_curckt->ci_mcdeck; ft_curckt->ci_mcdeck = NULL; } } /* called by com_rset: reload most recent circuit */ void inp_source_recent(void) { mc_deck = recent_deck; mc_reload = TRUE; inp_spsource(NULL, FALSE, NULL, FALSE); } /* remove the 'recent' deck */ void inp_remove_recent(void) { if (recent_deck) line_free(recent_deck, TRUE); } /* check for .option seed=[val|random] and set the random number generator */ void eval_seed_opt(struct card *deck) { struct card *card; bool has_seed = FALSE; for (card = deck; card; card = card->nextcard) { char *line = card->line; if (*line == '*') continue; if (ciprefix(".option", line) || ciprefix("option", line)) { /* option seedinfo */ if (strstr(line, "seedinfo")) setseedinfo(); char *begtok = strstr(line, "seed="); if (begtok) begtok = &begtok[5]; /*skip seed=*/ if (begtok) { if (has_seed) fprintf(cp_err, "Warning: Multiple 'option seed=val|random' found!\n"); char *token = gettok(&begtok); /* option seed=random [seed='random'] */ if (eq(token, "random") || eq(token, "{random}")) { time_t acttime = time(NULL); /* get random value from time in seconds since 1.1.1970 */ int rseed = (int)(acttime - 1470000000); cp_vset("rndseed", CP_NUM, &rseed); com_sseed(NULL); has_seed = TRUE; } /* option seed=val*/ else { int sr = atoi(token); if (sr <= 0) fprintf(cp_err, "Warning: Cannot convert 'option seed=%s' to seed value, skipped!\n", token); else { cp_vset("rndseed", CP_NUM, &sr); com_sseed(NULL); has_seed = TRUE; } } tfree(token); } } } } /* The routine to source a spice input deck. We read the deck in, take * out the front-end commands, and create a CKT structure. Also we * filter out the following cards: .save, .width, .four, .print, and * .plot, to perform after the run is over. * Then, we run dodeck, which parses up the deck. */ void inp_spsource(FILE *fp, bool comfile, char *filename, bool intfile) /* arguments: * *fp = pointer to the input file * comfile = whether it is a command file. Values are TRUE/FALSE * *filename = name of input file * intfile = whether input is from internal array. Values are TRUE/FALSE */ { struct card *deck = NULL, *dd, *ld, *prev_param = NULL, *prev_card = NULL; struct card *realdeck = NULL, *options = NULL, *curr_meas = NULL; char *tt = NULL, name[BSIZE_SP], *s, *t, *temperature = NULL; double testemp = 0.0; bool commands = FALSE; wordlist *wl = NULL, *end = NULL, *wl_first = NULL; wordlist *controls = NULL, *pre_controls = NULL; FILE *lastin, *lastout, *lasterr; double temperature_value; bool expr_w_temper = FALSE; double startTime, endTime; #ifdef HAS_PROGREP if (!comfile) SetAnalyse("Source Deck", 0); #endif /* read in the deck from a file */ char *dir_name = ngdirname(filename ? filename : "."); startTime = seconds(); /* inp_source() called with fp: load from file, */ /* called with *fp == NULL and intfile: we want to load circuit from circarray */ if (fp || intfile) { deck = inp_readall(fp, dir_name, comfile, intfile, &expr_w_temper); /* here we check for .option seed=[val|random] and set the random number generator */ eval_seed_opt(deck); /* files starting with *ng_script are user supplied command files */ if (deck && ciprefix("*ng_script", deck->line)) comfile = TRUE; /* save a copy of the deck for later reloading with 'mc_source' */ if (deck && !comfile) { /* stored to new circuit ci_mcdeck in fcn */ mc_deck = inp_deckcopy_oc(deck); } } /* called with *fp == NULL and not intfile: we want to reload circuit from mc_deck */ else { /* re-load deck due to command 'reset' via function inp_source_recent() */ if (mc_reload && mc_deck) { deck = inp_deckcopy(mc_deck); expr_w_temper = TRUE; mc_reload = FALSE; fprintf(stdout, "Reset re-loads circuit %s\n", mc_deck->line); } /* re-load input deck from the current circuit structure */ else if (ft_curckt && ft_curckt->ci_mcdeck) { deck = inp_deckcopy(ft_curckt->ci_mcdeck); expr_w_temper = TRUE; } /* re-load input deck from the recent circuit structure with mc_source */ else if (!ft_curckt && mc_deck) { deck = inp_deckcopy(mc_deck); expr_w_temper = TRUE; } /* no circuit available, should not happen */ else { fprintf(stderr, "Error: No circuit loaded, cannot copy internally using mc_source or reset\n"); controlled_exit(1); } /* print out the re-loaded deck into debug-out-mc.txt */ if (ft_ngdebug) { /*debug: print into file*/ FILE *fdo = fopen("debug-out-mc.txt", "w"); if (fdo) { struct card *tc = NULL; fprintf(fdo, "****************** complete mc deck ***************\n\n"); /* now completely */ for (tc = deck; tc; tc = tc->nextcard) fprintf(fdo, "%6d %6d %s\n", tc->linenum_orig, tc->linenum, tc->line); fclose(fdo); } else fprintf(stderr, "Warning: Cannot open file debug-out-mc.txt for saving debug info\n"); } } endTime = seconds(); /* store input directory to a variable*/ if (fp) { cp_vset("inputdir", CP_STRING, dir_name); } tfree(dir_name); /* if nothing came back from inp_readall, just close fp and return to caller */ if (!deck) { if (!intfile && fp) fclose(fp); return; } /* files starting with *ng_script are user supplied command files */ if (ciprefix("*ng_script", deck->line)) comfile = TRUE; if (!comfile) { /* Extract the .option lines from the deck into 'options', and remove them from the deck. */ options = inp_getopts(deck); /* copy a deck before subckt substitution. */ realdeck = inp_deckcopy(deck); /* Save the title before INPgetTitle gets it. */ tt = copy(deck->line); if (!deck->nextcard) fprintf(cp_err, "Warning: no lines in input\n"); } if (fp && !intfile) fclose(fp); /* Now save the IO context and start a new control set. After we are done with the source we'll put the old file descriptors back. I guess we could use a FILE stack, but since this routine is recursive anyway. */ lastin = cp_curin; lastout = cp_curout; lasterr = cp_curerr; cp_curin = cp_in; cp_curout = cp_out; cp_curerr = cp_err; cp_pushcontrol(); /* We should now go through the deck and execute front-end * commands and remove them. Front-end commands are enclosed by * the cards .control and .endc, unless comfile is TRUE, in which * case every line must be a front-end command. There are too * many problems with matching the first word on the line. */ ld = deck; if (comfile) { /* Process each command, except 'option' which is assembled in a list and ingnored here */ for (dd = deck; dd; dd = ld) { ld = dd->nextcard; if ((dd->line[0] == '*') && (dd->line[1] != '#')) continue; if (!ciprefix(".control", dd->line) && !ciprefix(".endc", dd->line)) { if (dd->line[0] == '*') cp_evloop(dd->line + 2); /* option line stored but not processed */ else if (ciprefix("option", dd->line)) com_options = inp_getoptsc(dd->line, com_options); else cp_evloop(dd->line); } } /* free the control deck */ line_free(deck, TRUE); /* set to NULL to allow generation of a new dbs */ /* do this here and in the 'else' branch of 'if (comfile)' */ dbs = NULL; ft_dotsaves(); } /* end if (comfile) */ else { /* must be regular deck . . . . */ /* loop through deck and handle control cards */ for (dd = deck->nextcard; dd; dd = ld->nextcard) { /* get temp from deck */ if (ciprefix(".temp", dd->line)) { s = skip_ws(dd->line + 5); if (temperature) txfree(temperature); temperature = copy(s); } /* Ignore comment lines, but not lines begining with '*#', but remove them, if they are in a .control ... .endc section */ s = skip_ws(dd->line); if ((*s == '*') && ((s != dd->line) || (s[1] != '#'))) { if (commands) { /* Remove comment lines in control sections, so they don't * get considered as circuits. */ ld->nextcard = dd->nextcard; line_free(dd, FALSE); continue; } ld = dd; continue; } /* Put the first token from line into s */ strncpy(name, dd->line, BSIZE_SP); s = skip_ws(name); t = skip_non_ws(s); *t = '\0'; if (ciprefix(".control", dd->line)) { ld->nextcard = dd->nextcard; line_free(dd, FALSE); /* SJB - free this line's memory */ if (commands) fprintf(cp_err, "Warning: redundant .control card\n"); else commands = TRUE; } else if (ciprefix(".endc", dd->line)) { ld->nextcard = dd->nextcard; line_free(dd, FALSE); /* SJB - free this line's memory */ if (commands) commands = FALSE; else fprintf(cp_err, "Warning: misplaced .endc card\n"); } else if (commands || prefix("*#", dd->line)) { /* assemble all commands starting with pre_ after stripping pre_, to be executed before circuit parsing */ if (ciprefix("pre_", dd->line)) { s = copy(dd->line + 4); pre_controls = wl_cons(s, pre_controls); } /* assemble all other commands to be executed after circuit parsing */ else { /* special control lines outside of .control section*/ if (prefix("*#", dd->line)) { s = copy(dd->line + 2); /* all commands from within .control section */ } else { s = dd->line; dd->line = NULL; /* SJB - prevent line_free() freeing the string (now pointed at by wl->wl_word) */ } controls = wl_cons(s, controls); } ld->nextcard = dd->nextcard; line_free(dd, FALSE); } else if (!*dd->line) { /* So blank lines in com files don't get considered as circuits. */ ld->nextcard = dd->nextcard; line_free(dd, FALSE); } else { /* lines .width, .four, .plot, .print, .save added to wl_first, removed from deck */ /* lines .op, .meas, .tf added to wl_first */ inp_casefix(s); /* s: first token from line */ /* Do not eliminate " around netnames, to allow '/' or '-' in netnames */ if (!eq(s, ".plot") && !eq(s, ".print")) inp_casefix(dd->line); if (eq(s, ".width") || ciprefix(".four", s) || eq(s, ".plot") || eq(s, ".print") || eq(s, ".save") || eq(s, ".op") || ciprefix(".meas", s) || eq(s, ".tf")) { wl_append_word(&wl_first, &end, copy(dd->line)); if (!eq(s, ".op") && !eq(s, ".tf") && !ciprefix(".meas", s)) { ld->nextcard = dd->nextcard; line_free(dd, FALSE); } else { ld = dd; } } else { ld = dd; } } } /* end for (dd = deck->nextcard . . . . */ /* Now that the deck is loaded, do the pre commands, if there are any, before the circuit structure is set up */ if (pre_controls) { pre_controls = wl_reverse(pre_controls); for (wl = pre_controls; wl; wl = wl->wl_next) cp_evloop(wl->wl_word); wl_free(pre_controls); } /* set temperature if defined to a preliminary variable which may be used in numparam evaluation */ if (temperature) { temperature_value = atof(temperature); cp_vset("pretemp", CP_REAL, &temperature_value); } if (ft_ngdebug) { cp_getvar("pretemp", CP_REAL, &testemp, 0); printf("test temperature %f\n", testemp); } /* We are done handling the control stuff. Now process remainder of deck. Go on if there is something left after the controls.*/ if (deck->nextcard) { fprintf(cp_out, "\nCircuit: %s\n\n", tt); #ifdef HAS_PROGREP SetAnalyse("Prepare Deck", 0); #endif /*FIXME This is for the globel param setting only */ /* replace agauss(x,y,z) in each b-line by suitable value */ static char *statfcn[] = { "agauss", "gauss", "aunif", "unif", "limit" }; int ii; for (ii = 0; ii < 5; ii++) eval_agauss(deck, statfcn[ii]); /* Now expand subcircuit macros and substitute numparams.*/ if (!cp_getvar("nosubckt", CP_BOOL, NULL, 0)) if ((deck->nextcard = inp_subcktexpand(deck->nextcard)) == NULL) { line_free(realdeck, TRUE); line_free(deck->actualLine, TRUE); tfree(tt); return; } /* Now handle translation of spice2c6 POLYs. */ #ifdef XSPICE /* Translate all SPICE 2G6 polynomial type sources */ deck->nextcard = ENHtranslate_poly(deck->nextcard); #endif line_free(deck->actualLine, FALSE); deck->actualLine = realdeck; /* print out the expanded deck into debug-out2.txt */ if (ft_ngdebug) { /*debug: print into file*/ FILE *fdo = fopen("debug-out2.txt", "w"); if (fdo) { struct card *tc = NULL; fprintf(fdo, "**************** uncommented deck **************\n\n"); /* always print first line */ fprintf(fdo, "%6d %6d %s\n", deck->linenum_orig, deck->linenum, deck->line); /* here without out-commented lines */ for (tc = deck->nextcard; tc; tc = tc->nextcard) { if (*(tc->line) == '*') continue; fprintf(fdo, "%6d %6d %s\n", tc->linenum_orig, tc->linenum, tc->line); } fprintf(fdo, "\n****************** complete deck ***************\n\n"); /* now completely */ for (tc = deck; tc; tc = tc->nextcard) fprintf(fdo, "%6d %6d %s\n", tc->linenum_orig, tc->linenum, tc->line); fclose(fdo); } else fprintf(stderr, "Warning: Cannot open file debug-out2.txt for saving debug info\n"); } for (dd = deck; dd; dd = dd->nextcard) { /* get csparams and create vectors, being available in .control section, in plot 'const' */ if (ciprefix(".csparam", dd->line)) { wordlist *wlist = NULL; char *cstoken[3]; int i; dd->line[0] = '*'; s = skip_ws(dd->line + 8); cstoken[0] = gettok_char(&s, '=', FALSE, FALSE); cstoken[1] = gettok_char(&s, '=', TRUE, FALSE); cstoken[2] = gettok(&s); for (i = 3; --i >= 0;) wlist = wl_cons(cstoken[i], wlist); com_let(wlist); wl_free(wlist); } } /* handle .if ... .elseif ... .else ... .endif statements. */ dotifeval(deck); /* merge the two option line structs com_options (comfile == TRUE, filled in from spinit, .spiceinit, and *ng_sript), and options (comfile == FALSE, filled in from circuit with .OPTIONS) into options, thus keeping com_options, options is loaded into circuit and freed when circuit is removed */ options = line_reverse(line_nconc(options, inp_deckcopy(com_options))); /* List of all expressions found in instance and .model lines */ struct pt_temper *devtlist = NULL; struct pt_temper *modtlist = NULL; /* prepare parse trees from 'temper' expressions */ if (expr_w_temper) inp_parse_temper(deck, &modtlist, &devtlist); /* replace agauss(x,y,z) in each b-line by suitable value */ /* FIXME: This is for the local param setting (not yet implemented in inp_fix_agauss_in_param() for model parameters according to HSPICE manual) static char *statfcn[] = { "agauss", "gauss", "aunif", "unif", "limit" }; int ii; for (ii = 0; ii < 5; ii++) eval_agauss(deck, statfcn[ii]); */ /* If user wants all currents saved (.options savecurrents), add .save to wl_first with all terminal currents available on selected devices */ wl_first = inp_savecurrents(deck, options, wl_first, controls); /* now load deck into ft_curckt -- the current circuit. */ inp_dodeck(deck, tt, wl_first, FALSE, options, filename); if (ft_curckt) { ft_curckt->devtlist = devtlist; ft_curckt->modtlist = modtlist; } /* inp_dodeck did take ownership */ tt = NULL; options = NULL; } /* if (deck->nextcard) */ /* look for and set temperature; also store param and .meas statements in circuit struct */ if (ft_curckt) { ft_curckt->ci_param = NULL; ft_curckt->ci_meas = NULL; /* PN add here stats*/ ft_curckt->FTEstats->FTESTATnetLoadTime = endTime - startTime; } for (dd = deck; dd; dd = dd->nextcard) { /* all parameter lines should be sequentially ordered and placed at beginning of deck */ if (ciprefix(".para", dd->line)) { ft_curckt->ci_param = dd; /* find end of .param statements */ while (ciprefix(".para", dd->line)) { prev_param = dd; dd = dd->nextcard; if (dd == NULL) break; // no line after .param line } prev_card->nextcard = dd; prev_param->nextcard = NULL; if (dd == NULL) { fprintf(cp_err, "Warning: Missing .end card!\n"); break; // no line after .param line } } /* remove the .measure cards from the deckand store them in ft_curckt->ci_meas */ if (ciprefix(".meas", dd->line)) { if (cp_getvar("autostop", CP_BOOL, NULL, 0)) { if (strstr(dd->line, " max ") || strstr(dd->line, " min ") || strstr(dd->line, " avg ") || strstr(dd->line, " rms ") || strstr(dd->line, " integ ")) { printf("Warning: .OPTION AUTOSTOP will not be effective because one of 'max|min|avg|rms|integ' is used in .meas\n"); printf(" AUTOSTOP being disabled...\n"); cp_remvar("autostop"); } } if (curr_meas == NULL) { curr_meas = ft_curckt->ci_meas = dd; } else { curr_meas->nextcard = dd; curr_meas = dd; } prev_card->nextcard = dd->nextcard; curr_meas->nextcard = NULL; dd = prev_card; } prev_card = dd; } //end of for-loop /* set temperature, if defined, to new value. cp_vset will set the variable "temp" and also set CKTtemp, so we can do it only here because the circuit has to be already there */ if (temperature) { temperature_value = atof(temperature); cp_vset("temp", CP_REAL, &temperature_value); txfree(temperature); } #ifdef TRACE /* SDB debug statement */ printf("In inp_spsource, done with dodeck.\n"); #endif /* print out the expanded deck into debug-out3.txt */ if (ft_ngdebug) { /*debug: print into file*/ FILE *fdo = fopen("debug-out3.txt", "w"); if (fdo) { struct card *tc = NULL; fprintf(fdo, "**************** uncommented deck **************\n\n"); /* always print first line */ fprintf(fdo, "%6d %6d %s\n", deck->linenum_orig, deck->linenum, deck->line); /* here without out-commented lines */ for (tc = deck->nextcard; tc; tc = tc->nextcard) { if (*(tc->line) == '*') continue; fprintf(fdo, "%6d %6d %s\n", tc->linenum_orig, tc->linenum, tc->line); } fprintf(fdo, "\n****************** complete deck ***************\n\n"); /* now completely */ for (tc = deck; tc; tc = tc->nextcard) fprintf(fdo, "%6d %6d %s\n", tc->linenum_orig, tc->linenum, tc->line); fclose(fdo); } else fprintf(stderr, "Warning: Cannot open file debug-out3.txt for saving debug info\n"); } /* Now the circuit is defined, so generate the parse trees */ inp_parse_temper_trees(ft_curckt); /* Get the actual data for model and device instance parameters */ inp_evaluate_temper(ft_curckt); /* linked list dbs is used to store the "save" or .save data (defined in breakp2.c), (When controls are executed later on, also stores TRACE, IPLOT, and STOP data) */ /* set to NULL to allow generation of a new dbs */ dbs = NULL; /* .save data stored in dbs. Do this here before controls are run: .save is thus recognized even if .control is used */ ft_dotsaves(); /* Now that the deck is loaded, do the commands, if there are any */ controls = wl_reverse(controls); /* in shared ngspice controls a execute in the primary thread, typically before the background thread has finished. This leads to premature execution of commands. Thus this is delegated to a function using a third thread, that only starts when the background thread has finished (sharedspice.c).*/ #ifdef SHARED_MODULE for (wl = controls; wl; wl = wl->wl_next) if (cp_getvar("controlswait", CP_BOOL, NULL, 0)) { exec_controls(wl_copy(wl)); break; } else cp_evloop(wl->wl_word); #else for (wl = controls; wl; wl = wl->wl_next) cp_evloop(wl->wl_word); #endif wl_free(controls); } /* Now reset everything. Pop the control stack, and fix up the IO * as it was before the source. */ cp_popcontrol(); cp_curin = lastin; cp_curout = lastout; cp_curerr = lasterr; tfree(tt); } /* This routine is cut in half here because com_rset has to do what * follows also. End is the list of commands we execute when the job * is finished: we only bother with this if we might be running in * batch mode, since it isn't much use otherwise. */ /*------------------------------------------------------------------ * It appears that inp_dodeck adds the circuit described by *deck * to the current circuit (ft_curckt). *-----------------------------------------------------------------*/ void inp_dodeck( struct card *deck, /*in: the spice deck */ char *tt, /*in: the title of the deck */ wordlist *end, /*in: all lines with .width, .plot, .print, .save, .op, .meas, .tf */ bool reuse, /*in: TRUE if called from runcoms2.c com_rset, FALSE if called from inp_spsource() */ struct card *options, /*in: all .option lines from deck */ char *filename /*in: input file of deck */ ) { struct circ *ct; struct card *dd; CKTcircuit *ckt; char *s; INPtables *tab = NULL; struct variable *eev = NULL; wordlist *wl; bool noparse, ii; int print_listing; bool have_err = FALSE; int warn; /* whether SOA check should be performed */ int maxwarns = 0; /* specifies the maximum number of SOA warnings */ double startTime; /* First throw away any old error messages there might be and fix the case of the lines. */ for (dd = deck; dd; dd = dd->nextcard) if (dd->error) { tfree(dd->error); dd->error = NULL; } if (reuse) { /* re-use existing circuit structure */ ct = ft_curckt; } else { if (ft_curckt) { ft_curckt->ci_devices = cp_kwswitch(CT_DEVNAMES, NULL); ft_curckt->ci_nodes = cp_kwswitch(CT_NODENAMES, NULL); } /* create new circuit structure */ ft_curckt = ct = TMALLOC(struct circ, 1); /*PN FTESTATS*/ ft_curckt->FTEstats = TMALLOC(FTESTATistics, 1); } noparse = cp_getvar("noparse", CP_BOOL, NULL, 0); /* We check preliminary for the scale option. This special processing is needed because we need the scale info BEFORE building the circuit and seems there is no other way to do this. */ if (!noparse) { struct card *opt_beg = options; for (; options; options = options->nextcard) { s = skip_non_ws(options->line); ii = cp_interactive; cp_interactive = FALSE; wl = cp_lexer(s); cp_interactive = ii; if (!wl || !wl->wl_word || !*wl->wl_word) continue; if (eev) eev->va_next = cp_setparse(wl); else ct->ci_vars = eev = cp_setparse(wl); wl_free(wl); while (eev && (eev->va_next)) eev = eev->va_next; } for (eev = ct->ci_vars; eev; eev = eev->va_next) { switch (eev->va_type) { case CP_BOOL: break; case CP_NUM: break; case CP_REAL: if (strcmp("scale", eev->va_name) == 0) { cp_vset("scale", CP_REAL, &eev->va_real); printf("Scale set\n"); } break; case CP_STRING: break; default: { fprintf(stderr, "ERROR: enumeration value `CP_LIST' not handled in inp_dodeck\nAborting...\n"); controlled_exit(EXIT_FAILURE); } } /* switch . . . */ } options = opt_beg; // back to the beginning } /* if (!noparse) . . . */ /*---------------------------------------------------- * Now assuming that we wanna parse this deck, we call * if_inpdeck which takes the deck and returns a * a pointer to the circuit ckt. *---------------------------------------------------*/ if (!noparse) { startTime = seconds(); ckt = if_inpdeck(deck, &tab); ft_curckt->FTEstats->FTESTATnetParseTime = seconds() - startTime; } else { ckt = NULL; } /* set ckt->CKTisLinear=1 if circuit only contains R, L, C */ if (ckt) cktislinear(ckt, deck); /* set some output terminal data */ out_init(); /* if_inpdeck() may return NULL upon error */ if (ckt) { if (cp_getvar("warn", CP_NUM, &warn, 0)) ckt->CKTsoaCheck = warn; else ckt->CKTsoaCheck = 0; if (cp_getvar("maxwarns", CP_NUM, &maxwarns, 0)) ckt->CKTsoaMaxWarns = maxwarns; else ckt->CKTsoaMaxWarns = 5; } ft_curckt->FTEstats->FTESTATdeckNumLines = 0; /*---------------------------------------------------- Now run through the deck and look to see if there are errors on any line (message contained in ->error). Error messages have been generated either by writing directly to ->error from a struct card or to ->error from a struct card , or by using one of the macros as defined in inpmacs.h. Functions INPerror(), INPerrCat(), and SPerror() are invoked. *---------------------------------------------------*/ for (dd = deck; dd; dd = dd->nextcard) { ft_curckt->FTEstats->FTESTATdeckNumLines += 1; #ifdef TRACE /* SDB debug statement */ printf("In inp_dodeck, looking for errors and examining line %s . . . \n", dd->line); #endif if (dd->error) { char *p, *q; #ifdef XSPICE /* add setting of ipc syntax error flag */ g_ipc.syntax_error = IPC_TRUE; #endif p = dd->error; do { q = strchr(p, '\n'); if (q) *q = '\0'; if (p == dd->error) { if (strstr(dd->line, ".model")) out_printf("Warning: Model issue on line %d :\n %.*s ...\n%s\n", dd->linenum_orig, 72, dd->line, dd->error); else { out_printf("Error on line %d :\n %s\n%s\n", dd->linenum_orig, dd->line, dd->error); have_err = TRUE; } if (ft_stricterror) controlled_exit(EXIT_BAD); } else { out_printf("%s\n", p); } if (q) *q++ = '\n'; p = q; } while (p && *p); } /* end if (dd->error) */ } /* for (dd = deck; dd; dd = dd->nextcard) */ /* Stop here and exit if error occurred in batch mode */ if (have_err && ft_batchmode) { fprintf(stderr, "\nngspice stopped due to error, no simulation run!\n"); controlled_exit(EXIT_BAD); } /* Only print out netlist if brief is FALSE */ if (!cp_getvar("brief", CP_BOOL, NULL, 0)) { /* output deck */ out_printf("\nProcessed Netlist\n"); out_printf("=================\n"); print_listing = 1; for (dd = deck; dd; dd = dd->nextcard) { if (ciprefix(".prot", dd->line)) print_listing = 0; if (print_listing == 1) out_printf("%s\n", dd->line); if (ciprefix(".unprot", dd->line)) print_listing = 1; } out_printf("\n"); } /* Add this circuit to the circuit list. If reuse is TRUE (command 'reset'), then use the existing ft_curckt structure. */ if (!reuse) { /* Be sure that ci_devices and ci_nodes are valid */ ft_curckt->ci_devices = cp_kwswitch(CT_DEVNAMES, NULL); cp_kwswitch(CT_DEVNAMES, ft_curckt->ci_devices); ft_curckt->ci_nodes = cp_kwswitch(CT_NODENAMES, NULL); cp_kwswitch(CT_NODENAMES, ft_curckt->ci_nodes); ft_newcirc(ct); /* Assign current circuit */ ft_curckt = ct; } ct->ci_name = tt; ct->ci_deck = deck; ct->ci_mcdeck = mc_deck; ct->ci_options = options; if (deck->actualLine) ct->ci_origdeck = deck->actualLine; else ct->ci_origdeck = ct->ci_deck; ct->ci_ckt = ckt; /* attach the input ckt to the list of circuits */ ct->ci_symtab = tab; ct->ci_inprogress = FALSE; ct->ci_runonce = FALSE; ct->ci_commands = end; ct->ci_dicos = nupa_add_dicoslist(); /* prevent false reads in multi-threaded ngshared */ #ifndef SHARED_MODULE if (reuse) tfree(ct->ci_filename); #endif ct->ci_filename = copy(filename); if (!noparse) { /* * for (; options; options = options->nextcard) { * s = skip_non_ws(options->line); * ii = cp_interactive; * cp_interactive = FALSE; * wl = cp_lexer(s); * cp_interactive = ii; * if (!wl || !wl->wl_word || !*wl->wl_word) * continue; * if (eev) * eev->va_next = cp_setparse(wl); * else * ct->ci_vars = eev = cp_setparse(wl); * while (eev->va_next) * eev = eev->va_next; * } */ for (eev = ct->ci_vars; eev; eev = eev->va_next) { bool one = TRUE; /* FIXME, actually eev->va_bool should be TRUE anyway */ switch (eev->va_type) { case CP_BOOL: if_option(ct->ci_ckt, eev->va_name, eev->va_type, &one); break; case CP_NUM: if_option(ct->ci_ckt, eev->va_name, eev->va_type, &eev->va_num); break; case CP_REAL: if_option(ct->ci_ckt, eev->va_name, eev->va_type, &eev->va_real); break; case CP_STRING: if_option(ct->ci_ckt, eev->va_name, eev->va_type, eev->va_string); break; default: { fprintf(stderr, "ERROR: enumeration value `CP_LIST' not handled in inp_dodeck\nAborting...\n"); controlled_exit(EXIT_FAILURE); } } // switch . . . } } // if (!noparse) . . . /* add title of deck to data base */ /* this won't work if the title is the empty string * cp_addkword() doesn't work for tt === "" * since CT_CKTNAMES doesn't seem to be used anywhere * I've disabled this piece. */ #if 0 cp_addkword(CT_CKTNAMES, tt); #endif } void com_mc_source(wordlist *wl) { NG_IGNORE(wl); inp_spsource(NULL, FALSE, NULL, FALSE); } /* Edit and re-load the current input deck. Note that if these * commands are used on a non-unix machine, they will leave spice.tmp * junk files lying around. */ void com_edit(wordlist *wl) { char *filename; FILE *fp; bool inter, permfile; char buf[BSIZE_SP]; if (!cp_getvar("interactive", CP_BOOL, NULL, 0)) { fprintf(cp_err, "Warning: `edit' is disabled because 'interactive' has not been set.\n" " perhaps you want to 'set interactive'\n"); return; } inter = cp_interactive; cp_interactive = FALSE; if (wl) { if (!doedit(wl->wl_word)) { cp_interactive = inter; return; } if ((fp = inp_pathopen(wl->wl_word, "r")) == NULL) { perror(wl->wl_word); cp_interactive = inter; return; } inp_spsource(fp, FALSE, wl->wl_word, FALSE); } else { /* If there is no circuit yet, then create one */ if (ft_curckt && ft_curckt->ci_filename) { filename = ft_curckt->ci_filename; permfile = TRUE; } else { filename = smktemp("sp"); permfile = FALSE; } if (ft_curckt && !ft_curckt->ci_filename) { if ((fp = fopen(filename, "w")) == NULL) { perror(filename); cp_interactive = inter; return; } inp_list(fp, ft_curckt->ci_deck, ft_curckt->ci_options, LS_DECK); fprintf(cp_err, "Warning: editing a temporary file -- " "circuit not saved\n"); fclose(fp); } else if (!ft_curckt) { if ((fp = fopen(filename, "w")) == NULL) { perror(filename); cp_interactive = inter; return; } fprintf(fp, "SPICE 3 test deck\n"); fclose(fp); } if (!doedit(filename)) { cp_interactive = inter; return; } if ((fp = fopen(filename, "r")) == NULL) { perror(filename); cp_interactive = inter; return; } inp_spsource(fp, FALSE, permfile ? filename : NULL, FALSE); /* fclose(fp); */ /* MW. inp_spsource already closed fp */ if (ft_curckt && !ft_curckt->ci_filename) unlink(filename); } cp_interactive = inter; /* note: default is to run circuit after successful edit */ fprintf(cp_out, "run circuit? "); fflush(cp_out); fgets(buf, BSIZE_SP, stdin); if (buf[0] != 'n') { fprintf(cp_out, "running circuit\n"); com_run(NULL); } } /* alter a parameter, either subckt param: alterparam subcktname pname=vpval global .param: alterparam pname=pval Changes params in mc_deck To become effective, 'mc_source' has to be called after 'alterparam' */ void com_alterparam(wordlist *wl) { struct card *dd; char *pname, *pval, *tmp, *subcktname = NULL, *linein, *linefree, *s; bool found = FALSE; if (!ft_curckt) { fprintf(stderr, "Warning: No circuit loaded!\n"); fprintf(stderr, " Command 'alterparam' ignored\n"); return; } if (!ft_curckt->ci_mcdeck) { fprintf(cp_err, "Error: No internal deck available\n"); fprintf(stderr, " Command 'alterparam' ignored\n"); return; } linefree = wl_flatten(wl); linein = skip_ws(linefree); s = tmp = gettok_char(&linein, '=', FALSE, FALSE); if (!s) { fprintf(cp_err, "\nError: Wrong format in line 'alterparam %s'\n command 'alterparam' skipped\n", linefree); tfree(linefree); return; } linein++; /* skip the '=' */ pval = gettok(&linein); subcktname = gettok(&tmp); if (!pval || !subcktname) { fprintf(cp_err, "\nError: Wrong format in line 'alterparam %s'\n command 'alterparam' skipped\n", linefree); tfree(pval); tfree(subcktname); tfree(linefree); return; } pname = gettok(&tmp); if (!pname) { pname = subcktname; subcktname = NULL; } tfree(linefree); tfree(s); for (dd = ft_curckt->ci_mcdeck->nextcard; dd; dd = dd->nextcard) { char *curr_line = dd->line; /* alterparam subcktname pname=vpval Parameters from within subcircuit are no longer .param lines, but have been added to the .subckt line as pname=paval and to the x line as pval. pval in the x line takes precedence when subciruit is called, so has to be replaced here. Find subcircuit with subcktname. After params: Count the number of parameters (notok) until parameter pname is found. When found, search for x-line with subcktname. Replace parameter value number notok by pval. */ if (subcktname) { /* find subcircuit */ if (ciprefix(".subckt", curr_line)) { curr_line = nexttok(curr_line); /* skip .subckt */ char *sname = gettok(&curr_line); if (eq(sname, subcktname)) { tfree(sname); curr_line = strstr(curr_line, "params:"); curr_line = skip_non_ws(curr_line); /* skip params: */ /* string to search for */ char *pname_eq = tprintf("%s=", pname); int notok = 0; while (*curr_line) { char *token = gettok(&curr_line); if (ciprefix(pname_eq, token)) { tfree(token); found = TRUE; break; } notok++; tfree(token); } tfree(pname_eq); if (found) { /* find x line with same subcircuit name */ struct card *xx; char *bsubb = tprintf(" %s ", subcktname); for (xx = ft_curckt->ci_mcdeck->nextcard; xx; xx = xx->nextcard) { char *xline = xx->line; if (*xline == 'x') { xline = strstr(xline, bsubb); if (xline) { xline = nexttok(xline); /* skip subcktname */ int ii; for (ii = 0; ii < notok; ii++) xline = nexttok(xline); /* skip parameter values */ char *beg = copy_substring(xx->line, xline); xline = nexttok(xline); /* skip parameter value to be replaced */ char *newline = tprintf("%s %s %s", beg, pval, xline); tfree(xx->line); xx->line = newline; tfree(beg); } else continue; } } tfree(bsubb); } } else { tfree(sname); continue; } } } /* subcktname */ /* alterparam pname=vpval */ else { if (ciprefix(".para", curr_line)) { curr_line = nexttok(curr_line); /* skip .param */ char *name = gettok_char(&curr_line, '=', FALSE, FALSE); if (eq(name, pname)) { curr_line = dd->line; char *start = gettok_char(&curr_line, '=', TRUE, FALSE); tfree(dd->line); dd->line = tprintf("%s%s", start, pval); found = TRUE; tfree(start); } tfree(name); } } } if (!found) fprintf(cp_err, "\nError: parameter '%s' not found,\n command 'alterparam' skipped\n", pname); tfree(pval); tfree(pname); tfree(subcktname); } static bool doedit(char *filename) { char buf[BSIZE_SP], buf2[BSIZE_SP], *editor; if (cp_getvar("editor", CP_STRING, buf2, sizeof(buf2))) { editor = buf2; } else { if ((editor = getenv("EDITOR")) == NULL) { if (Def_Editor && *Def_Editor) editor = Def_Editor; else editor = "/usr/bin/vi"; } } sprintf(buf, "%s %s", editor, filename); return (system(buf) ? FALSE : TRUE); } void com_source(wordlist *wl) { FILE *fp, *tp; char buf[BSIZE_SP]; bool inter; char *tempfile = NULL, *firstfile; wordlist *owl = wl; size_t n; inter = cp_interactive; cp_interactive = FALSE; firstfile = wl->wl_word; if (wl->wl_next) { /* There are several files -- put them into a temp file */ tempfile = smktemp("sp"); if ((fp = inp_pathopen(tempfile, "w+")) == NULL) { perror(tempfile); cp_interactive = TRUE; return; } while (wl) { if ((tp = inp_pathopen(wl->wl_word, "r")) == NULL) { perror(wl->wl_word); fclose(fp); cp_interactive = TRUE; unlink(tempfile); return; } while ((n = fread(buf, 1, BSIZE_SP, tp)) > 0) fwrite(buf, 1, n, fp); fclose(tp); wl = wl->wl_next; } fseek(fp, 0L, SEEK_SET); } else { fp = inp_pathopen(wl->wl_word, "r"); } if (fp == NULL) { perror(wl->wl_word); cp_interactive = TRUE; return; } /* Don't print the title if this is a spice initialisation file. */ if (ft_nutmeg || substring(INITSTR, owl->wl_word) || substring(ALT_INITSTR, owl->wl_word)) inp_spsource(fp, TRUE, tempfile ? NULL : wl->wl_word, FALSE); else { /* Save path name for use in XSPICE fopen_with_path() */ if (Infile_Path) tfree(Infile_Path); Infile_Path = ngdirname(firstfile); inp_spsource(fp, FALSE, tempfile ? NULL : wl->wl_word, FALSE); } cp_interactive = inter; if (tempfile) unlink(tempfile); } void inp_source(char *file) { static struct wordlist wl = { NULL, NULL, NULL }; wl.wl_word = file; com_source(&wl); } /* check the input deck (after inpcom and numparam extensions) for linear elements. If only linear elements are found, ckt->CKTisLinear is set to 1. Return immediately if a first non-linear element is found. */ static void cktislinear(CKTcircuit *ckt, struct card *deck) { struct card *dd; char firstchar; if (deck->nextcard) for (dd = deck->nextcard; dd; dd = dd->nextcard) { firstchar = *dd->line; switch (firstchar) { case 'r': case 'l': case 'c': case 'i': case 'v': case '*': case '.': case 'e': case 'g': case 'f': case 'h': continue; break; default: ckt->CKTisLinear = 0; return; } } ckt->CKTisLinear = 1; } /* global array for assembling circuit lines entered by fcn circbyline or receiving array from external caller. Array is created once per ngspice call. Last line of the array has to get the value NULL */ char **circarray; void create_circbyline(char *line) { static int linec = 0; static int memlen = 256; FILE *fp = NULL; if (!circarray) circarray = TMALLOC(char*, memlen); char *p = skip_ws(line); if (line < p) memmove(line, p, strlen(p) + 1); circarray[linec++] = line; if (linec < memlen) { if (ciprefix(".end", line) && (line[4] == '\0' || isspace_c(line[4]))) { circarray[linec] = NULL; inp_spsource(fp, FALSE, NULL, TRUE); linec = 0; } } else { memlen += memlen; circarray = TREALLOC(char*, circarray, memlen); } } /* fcn called by command 'circbyline' */ void com_circbyline(wordlist *wl) { /* undo the automatic wordline creation. wl_flatten allocates memory on the heap for each newline. This memory will be released line by line in inp_source(). */ char *newline = wl_flatten(wl); create_circbyline(newline); } /* handle .if('expr') ... .elseif('expr') ... .else ... .endif statements. numparam has evaluated .if('boolean expression') to .if ( 1.000000000e+000 ) or .elseif ( 0.000000000e+000 ). Evaluation is done recursively, starting with .IF, ending with .ENDIF*/ static void recifeval(struct card *pdeck) { struct card *nd; int iftrue = 0, elseiftrue = 0, elsetrue = 0, iffound = 0, elseiffound = 0, elsefound = 0; char *t; char *s = t = pdeck->line; /* get parameter to .if */ elsefound = 0; elseiffound = 0; iffound = 1; *t = '*'; s = pdeck->line + 3; iftrue = atoi(s); nd = pdeck->nextcard; while(nd) { s = nd->line; if (ciprefix(".if", nd->line)) recifeval(nd); else if (ciprefix(".elseif", nd->line) && elseiftrue == 0) { elsefound = 0; elseiffound = 1; iffound = 0; *s = '*'; if (!iftrue) { s = nd->line + 7; elseiftrue = atoi(s); } } else if (ciprefix(".else", nd->line)) { elsefound = 1; elseiffound = 0; iffound = 0; if (!iftrue && !elseiftrue) elsetrue = 1; *s = '*'; } else if (ciprefix(".endif", nd->line)) { elsefound = elseiffound = iffound = 0; elsetrue = elseiftrue = iftrue = 0; *s = '*'; return; } else { if (iffound && !iftrue) { *s = '*'; } else if (elseiffound && !elseiftrue) { *s = '*'; } else if (elsefound && !elsetrue) { *s = '*'; } } nd = nd->nextcard; } } /* Scan through all lines of the deck */ static void dotifeval(struct card *deck) { struct card *dd; char *dottoken; char *s, *t; /* skip the first line (title line) */ for (dd = deck->nextcard; dd; dd = dd->nextcard) { s = t = dd->line; if (*s == '*') continue; dottoken = gettok(&t); /* find '.if', the starter of any .if --- .endif clause, and call the recursive evaluation. recifeval() returns when .endif is found */ if (cieq(dottoken, ".if")) { recifeval(dd); } tfree(dottoken); } } /* Evaluate expressions containing 'temper' keyword, found in .model lines or device instance lines. Activity has four steps: 1) Prepare the expressions to survive numparam expansion (see function inp_temper_compat() in inpcom.c). A global variable expr_w_temper is set TRUE if any expression with 'temper' has been found. 2) After numparam insertion and subcircuit expansion, get the expressions, store them with a place holder for the pointer to the expression parse tree and a wordlist containing device/model name, parameter name and a placeholder for the evaluation result ready to be used by com_alter(mod) functions, in linked lists modtlist (model) or devtlist (device instance). (done function inp_parse_temper()). 3) After the circuit structure has been established, generate the parse trees. We can do it only then because pointers to ckt->CKTtemp and others are stored in the trees. (done in function inp_parse_temper_trees()). 4) Evaluation of the parse trees is requested by calling function inp_evaluate_temper(). The B Source parser is invoked here. ckt->CKTtemp is used to replace the 'temper' token by the actual circuit temperature. The evaluation results are added to the wordlist, com_alter(mod) is called to set the new parameters to the model parameters or device instance parameters. */ static int inp_parse_temper(struct card *card, struct pt_temper **modtlist_p, struct pt_temper **devtlist_p) { int error = 0; struct pt_temper *modtlist = NULL; struct pt_temper *devtlist = NULL; /* skip title line */ card = card->nextcard; for (; card; card = card->nextcard) { char *curr_line = card->line; /* exclude some elements */ if (strchr("*vbiegfh", curr_line[0])) continue; /* exclude all dot commands except .model */ if (curr_line[0] == '.' && !prefix(".model", curr_line)) continue; /* exclude lines not containing 'temper' */ if (!strstr(curr_line, "temper")) continue; bool is_model = prefix(".model", curr_line); /* skip ".model" */ if (is_model) curr_line = nexttok(curr_line); /* now start processing of the remaining lines containing 'temper' */ char *name = gettok(&curr_line); char *t = curr_line; while ((t = search_identifier(t, "temper", curr_line)) != NULL) { struct pt_temper *alter = TMALLOC(struct pt_temper, 1); char *eq_ptr = find_back_assignment(t, curr_line); if (!eq_ptr) { t = t + 1; continue; } /* go back over param name */ char *end_param = skip_back_ws(eq_ptr, curr_line); char *beg_param = eq_ptr; while (beg_param > curr_line && !isspace_c(beg_param[-1]) && beg_param[-1] != '(') beg_param--; /* find end of expression string */ char *beg_expr = skip_ws(eq_ptr + 1); char *end_expr = find_assignment(beg_expr); if (end_expr) { end_expr = skip_back_ws(end_expr, curr_line); end_expr = skip_back_non_ws(end_expr, curr_line); } else { end_expr = strchr(beg_expr, '\0'); } end_expr = skip_back_ws(end_expr, curr_line); /* overwrite this parameter assignment with ' ' * the backend will use a default * later, after evaluation, "alter" the parameter */ alter->expression = copy_substring(beg_expr, end_expr); /* to be filled in by evaluation function */ alter->wlend = wl_cons(NULL, NULL); /* create wordlist suitable for com_altermod */ alter->wl = wl_cons(copy(name), wl_cons(copy_substring(beg_param, end_param), wl_cons(copy("="), alter->wlend))); memset(beg_param, ' ', (size_t) (end_expr - beg_param)); /* fill in the linked parse tree list */ if (is_model) { alter->next = modtlist; modtlist = alter; } else { alter->next = devtlist; devtlist = alter; } t = end_expr; } tfree(name); } *modtlist_p = modtlist; *devtlist_p = devtlist; return error; } static void inp_parse_temper_trees(struct circ *circ) { struct pt_temper *d; for(d = circ->devtlist; d; d = d->next) { char *expression = d->expression; INPgetTree(&expression, &d->pt, circ->ci_ckt, NULL); } for(d = circ->modtlist; d; d = d->next) { char *expression = d->expression; INPgetTree(&expression, &d->pt, circ->ci_ckt, NULL); } } void rem_tlist(struct pt_temper *p) { while (p) { struct pt_temper *next_p = p->next; tfree(p->expression); wl_free(p->wl); INPfreeTree((IFparseTree *) p->pt); tfree(p); p = next_p; } } void inp_evaluate_temper(struct circ *circ) { struct pt_temper *d; double result; for(d = circ->devtlist; d; d = d->next) { IFeval((IFparseTree *) d->pt, 1e-12, &result, NULL, NULL); if (d->wlend->wl_word) tfree(d->wlend->wl_word); d->wlend->wl_word = tprintf("%g", result); com_alter(d->wl); } for(d = circ->modtlist; d; d = d->next) { char *name = d->wl->wl_word; INPretrieve(&name, circ->ci_symtab); /* only evaluate models which have been entered into the hash table ckt->MODnameHash */ if (ft_sim->findModel (circ->ci_ckt, name) == NULL) continue; IFeval((IFparseTree *) d->pt, 1e-12, &result, NULL, NULL); if (d->wlend->wl_word) tfree(d->wlend->wl_word); d->wlend->wl_word = tprintf("%g", result); com_altermod(d->wl); } } /* * Enable current measurements by the user * if 'option savecurrents' is set by the user. * We have to check for this option here prematurely * because options will be processed later. * Then append a * .save all * statement to 'wl' if no other 'save' has been given so far. * Then scan the deck for known devices and append * .save @q1[ib] * statements to 'wl' for all of their current vectors. */ static wordlist * inp_savecurrents(struct card *deck, struct card *options, wordlist *wl, wordlist *controls) { wordlist *p; /* check if option 'savecurrents' is set */ for (; options; options = options->nextcard) if (strstr(options->line, "savecurrents")) break; if (!options) return wl; /* search for 'save' command in the .control section */ for (p = controls; p; p = p->wl_next) if(prefix("save", p->wl_word)) break; /* search for '.save' in the 'wl' list */ if (!p) for (p = wl; p; p = p->wl_next) if(prefix(".save", p->wl_word)) break; /* if not found, then add '.save all' */ if (!p) p = wl_cons(copy(".save all"), NULL); else p = NULL; /* Scan the deck for devices with their terminals. * We currently serve bipolars, resistors, MOS1, capacitors, inductors, * controlled current sources. Others may follow. */ for (deck = deck->nextcard; deck; deck = deck->nextcard) { char *newline, *devname, *devline = deck->line; switch (devline[0]) { case 'm': devname = gettok(&devline); newline = tprintf(".save @%s[id] @%s[is] @%s[ig] @%s[ib]", devname, devname, devname, devname); break; case 'j': devname = gettok(&devline); newline = tprintf(".save @%s[id] @%s[is] @%s[ig] @%s[igd]", devname, devname, devname, devname); break; case 'q': devname = gettok(&devline); newline = tprintf(".save @%s[ic] @%s[ie] @%s[ib] @%s[is]", devname, devname, devname, devname); break; case 'd': devname = gettok(&devline); newline = tprintf(".save @%s[id]", devname); break; case 'r': case 'c': case 'l': case 'b': case 'f': case 'g': case 'w': case 's': devname = gettok(&devline); newline = tprintf(".save @%s[i]", devname); break; case 'i': devname = gettok(&devline); newline = tprintf(".save @%s[current]", devname); break; default: continue; } p = wl_cons(newline, p); tfree(devname); } return wl_append(wl, wl_reverse(p)); } static double agauss(double nominal_val, double abs_variation, double sigma) { double stdvar; stdvar = abs_variation / sigma; return (nominal_val + stdvar * gauss1()); } static double gauss(double nominal_val, double rel_variation, double sigma) { double stdvar; stdvar = nominal_val * rel_variation / sigma; return (nominal_val + stdvar * gauss1()); } static double unif(double nominal_val, double rel_variation) { return (nominal_val + nominal_val * rel_variation * drand()); } static double aunif(double nominal_val, double abs_variation) { return (nominal_val + abs_variation * drand()); } static double limit(double nominal_val, double abs_variation) { return (nominal_val + (drand() > 0 ? abs_variation : -1. * abs_variation)); } /* Second step to enable functions agauss, gauss, aunif, unif, limit * in professional parameter decks: * agauss has been preserved by replacement operation of .func * (function inp_fix_agauss_in_param() in inpcom.c). * After subcircuit expansion, agauss may be still existing in b-lines, * however agauss does not exist in the B source parser, and it would * not make sense in adding it there, because in each time step a different * return from agauss would result. * So we have to do the following in each B-line: * check for agauss(x,y,z), and replace it by a suitable return value * of agauss() * agauss in .param lines has been treated already */ static void eval_agauss(struct card *deck, char *fcn) { struct card *card; double x, y, z, val; int skip_control = 0; card = deck; for (; card; card = card->nextcard) { char *ap, *curr_line = card->line; /* exclude any command inside .control ... .endc */ if (ciprefix(".control", curr_line)) { skip_control++; continue; } else if (ciprefix(".endc", curr_line)) { skip_control--; continue; } else if (skip_control > 0) { continue; } if (*curr_line != 'b') continue; while ((ap = search_identifier(curr_line, fcn, curr_line)) != NULL) { char *lparen, *begstr, *contstr = NULL, *new_line, *midstr; char *tmp1str, *tmp2str, *delstr; int nerror; begstr = copy_substring(curr_line, ap); lparen = strchr(ap, '('); tmp1str = midstr = gettok_char(&lparen, ')', FALSE, TRUE); if (lparen + 1) contstr = copy(lparen + 1); tmp1str++; /* skip '(' */ /* find the parameters */ delstr = tmp2str = gettok(&tmp1str); x = INPevaluate(&tmp2str, &nerror, 1); tfree(delstr); delstr = tmp2str = gettok(&tmp1str); y = INPevaluate(&tmp2str, &nerror, 1); tfree(delstr); if (cieq(fcn, "agauss")) { delstr = tmp2str = gettok(&tmp1str); z = INPevaluate(&tmp2str, &nerror, 1); tfree(delstr); val = agauss(x, y, z); } else if (cieq(fcn, "gauss")) { delstr = tmp2str = gettok(&tmp1str); z = INPevaluate(&tmp2str, &nerror, 1); tfree(delstr); val = gauss(x, y, z); } else if (cieq(fcn, "aunif")) { val = aunif(x, y); } else if (cieq(fcn, "unif")) { val = unif(x, y); } else if (cieq(fcn, "limit")) { val = limit(x, y); } else { fprintf(cp_err, "ERROR: Unknown function %s, cannot evaluate\n", fcn); tfree(begstr); tfree(contstr); tfree(midstr); return; } new_line = tprintf("%s%g%s", begstr, val, contstr); tfree(card->line); curr_line = card->line = new_line; tfree(begstr); tfree(contstr); tfree(midstr); } } } tmpk8ny_4pz/src/frontend/com_shift.c0000644000175000017500000000202513546075722017704 0ustar carstencarsten/************* * com_shift.c ************/ #include "ngspice/ngspice.h" #include "ngspice/bool.h" #include "ngspice/wordlist.h" #include "com_shift.h" #include "variable.h" #include "ngspice/cpextern.h" /* Shift a list variable, by default argv, one to the left (or more if * a second argument is given. */ void com_shift(wordlist *wl) { struct variable *v, *vv; char *n = "argv"; int num = 1; if (wl) { n = wl->wl_word; wl = wl->wl_next; } if (wl) num = scannum(wl->wl_word); for (v = variables; v; v = v->va_next) if (eq(v->va_name, n)) break; if (!v) { fprintf(cp_err, "Error: %s: no such variable\n", n); return; } if (v->va_type != CP_LIST) { fprintf(cp_err, "Error: %s not of type list\n", n); return; } for (vv = v->va_vlist; vv && (num > 0); num--) vv = vv->va_next; if (num) { fprintf(cp_err, "Error: variable %s not long enough\n", n); return; } v->va_vlist = vv; } tmpk8ny_4pz/src/frontend/ChangeLog0000644000175000017500000003357113546075722017351 0ustar carstencarsten2003-07-08 Stefan Jones * quote.c: return the pointer to the start of malloced memory so it can be freeded 2003-05-02 Stuart Brorson * Major changes in subckt.c to handle POLY attributes in dependent sources. Added new case to switch in "translate" to handle E, F, G, H sources. Many other fixes. * Moved location of call to ENHtranslate_poly in inp.c. This was necessary to correctly process POLY attributes and the associated netlists and voltage sources. 2003-04-10 Stuart Brorson * modified inp_readall (inpcom.c) to ignore blank lines terminated by \r\n *and * \n. This fixes problems associated with importing files from Windozeland. * Added explanatory comments to many modules. 2002-01-03 Paolo Nenzi * wdisp: added an entire directory containing windows frontend code (Holger Vogt patch). Files in wdsip: ftegraf.h, makedefs, Makefile.am, windisp.c and winprint.c. * Makefile.am: Windows code compilation rules added to makefile. * display.c, outitf.c, rawfile.c, resource.c, runcoms.c: added defines for Windows (Holger Vogt patch). 2001-12-14 Paolo Nenzi * control.c, control.h, com_cdump.c, com_cdump.h, variable.c, variable.h: Patched the code with the one contributed by Charles Williams. The patches addresses some memory leaks. 2001-11-25 Emmanuel Rouat * circuits.h: transfered definition of structure 'circ' to ftedefs.h 2001-02-07 Paolo Nenzi * outitf.c: From a message Alan sento to the mailing list: ---------- Forwarded message ---------- Date: Tue, 6 Feb 2001 11:11:56 -0000 From: "Gillespie, Alan" Reply-To: ng-spice-devel@ieee.ing.uniroma1.it To: "Ng-Spice-Devel (E-mail)" Subject: [ng-spice-devel] Reference variable update in interactive mode I've tweaked outitf.c so that the reference variable value is updated to the screen in interactive mode. I forgot to save the old version first, though, so I couldn't do a diff, so I'm just attaching the whole new outitf.c file. Also, I've updated the documentation as follows :- Modifications to "outitf.c" --------------------------- A number of modifications have been applied to outitf.c in order to achieve the following "improvements" :- 1) Spice3, by default, saved all node voltages, including nodes internal to the devices. These extra nodes add dramatically to the amount of data saved, but don't add significantly to the useful information about the circuit. So, instead of saving these nodes, a "hack" has been introduced which checks a new spice option, and either discards the internal node, or saves some device currents instead. 2) During long simulations, spice would sit "staring back blankly", giving no clue as to how well the simulation was, or wasn't, proceeding. In order to give a little more feedback, another "hack", in the data writing routine, writes the value of the reference variable to the error stream, which is usually the screen. In order to minimize the CPU time "wasted" doing this, the routine will only reprint the value if more than a quarter of a second since the last screen update. The result is that this feedback adds no significant extra time to performance of the simulation. 3) The original file writing routines used to write each data value to the file individually. A buffering scheme was added, which collects each row of data in a buffer, and the writes the whole buffer in one call. This gave a significant performance improvement (up to 20%) on HPUX, with all currents saved in large circuits, although there was no significant difference on Windows 95. The improvement has not been measured on Linux. 4) A check was added to make sure the file write was successful. Spice3 could easily fill the hard disk, but would continue to churn away, producing no more useful data. Now it will exit gracefully. I can't remember why I thought this was important, but at least it means that a PC with power management will be able to power down after a long overnight simulation has ceased to produce any more useful data. Changes ------- The routine beginPlot is called at the beginning of the simulation to select which nodes and variables will be saved. The first modification is at the point where it checks the "save" list. This is the list of tokens attached to the .save lines read from the spice source file. The routine now checks for "allv" and "alli" as well as "all". "allv" is treated as a synonym for "all". If "all" or "allv" is found, then a saveall flag is set, and if "alli" is found then a new savealli flag is set. Next, the addDataDesc routine is called for every variable to be saved. This is done by stepping through an array called dataNames[]. I'm not quite sure where this array comes from, but it was quite easy to add an if statement to stop it calling addDataDesc if dataNames[i] points to a string containing any of the following - #internal #source #drain #collector #emitter #base That seems to catch all the internal device nodes. The next addition is a new pass through the dataNames[] array specifically looking for those strings. (This pass is only performed if the savealli flag has been set). When one of the strings is found, a bunch of if-then-else statements creates a corresponding string which is submitted to the add addSpecialDesc routine. This saves the relevant device current. Note that since mosfets have only two internal nodes, but four terminal currents, and bipolars have three internal nodes and four terminal currents, some internal nodes have to save more than one terminal current. This last change is a clumsy hack, and only works if the devices in question actually have internal nodes. Resistors and capacitors, for instance, never have internal nodes, and so their terminal currents will not cannot be saved with the .save alli card. Also, any bipolar, mosfet or diodes with zero valued parasitic resistances (rd, rs, rc, rb, re) will not be allocated internal nodes, and so their terminal currents will not be saved by this hack, either. Further down outitf.c, the OUTpData routine is called whenever a new row of data is ready to be written to file. Near the top of this, the reference variable is written to file separately from the rest of the variables. This is a convenient point for a couple of statements which check the elapsed time since the last update, and write the reference value to stderr if it's time. Slightly further down the routine is the section for writing data to a "plot", i.e. retaining it in memory. A similar statement or two writes the reference value to the screen for this case, i.e. interactive mode. At the end of the OUTpData routine, a new check has been added to see if there was an error writing to the rawfile. If so, the shouldstop flag is set to TRUE, and the simulation will abort. Scanning down outitf.c, the next modification is in the fileInit routine. The first statement initialises the lastclock variable. This is used later when deciding if it's time to write the reference value to the screen. Next, the fileInit_pass2 routine writes the name strings to the start of the rawfile. At the end of this routine there is now a statement which checks if this will be a binary rawfile, and if so, it allocates a row buffer of the correct length. The fileStartPoint routine seems to be called before each row of data is written, and so this is a convenient point to reset the buffer pointer to zero. The fileAddRealValue and fileAddComplexValue routines now simply write the relevant values to the buffer, and increment the buffer pointer. Previously they called the fwrite library routine to actually write the data. If the rawfile is not a binary one, however, they just write the text as before. The fileEndPoint routine was previously empty. Now it actually calls fwrite to write the whole buffer to the file (if it's a binary file). Finally the fileEnd routine prints the total number of data points to the screen, and de-allocates the row buffer (if it was a binary rawfile). Congratulations to whoever put these dummy routines in in the first place, since that allowed the buffering to be added very easily. 2001-01-23 Paolo Nenzi * subckt.c: added some code (very, very experimental) to support mos devices with variable number of nodes (5 to 7) in subcircuit expansion. This hack is necessary since SOI devices can have up to 7 nodes. 2000-11-07 Arno W. Peters * com_history, com_alias, parser/cshpar.c, parser/complete.c: Applied patch by Michael Widlok. It fixes command completion and history list. In the process, Michael also fixed a memory leak. 2000-09-09 Arno W. Peters * commands.c: Use fourier.h. * dotcards.c: Update to prevent segfault. * fourier.c, fourier.h: com_fourier is now calling fourier(), a function with more parameters. * dotcards.c: Added assertions to guard a double indirection, now ngspice will bomb out on an assertion instead of a segfault. 2000-07-18 Arno W. Peters * com_ahelp.c, com_help.c, com_plot.c, com_set.c, com_unset.c: Updated header file includes. * quote.c: Code formatting changes. 2000-07-16 Arno W. Peters * com_set.h: New header file. * com_state.c, com_state.h: Separated from debugcom.c. * com_dump.c, com_dump.h: Separated from debugcom.c. * debugcom.c, debugcom.h: Removed. * Makefile.am: Updates for added/removed files. 2000-03-22 Paolo Nenzi * rawfile.c: Applied Michael Widlok patch. * spiceif.c: Applied Michael Widlok patch. 2000-03-12 Paolo Nenzi * x11.c: Cleared the code. Rewmoved some empty return on void functions. 1999-12-20 Paolo Nenzi * outif.c: To fix various "save"-related segmentation faults, make this one-line patch to outitf.c: line 356, change unique = devname; to unique = copy(devname); 1999-12-20 Paolo Nenzi * subckt.c: Bug: Current controlled switch subcircuit does not expand the controlling source correctly: vsrc expands to name:vsrc, not to v:name:src. Fix: changed this file to indicate that w device has only 2 not 3 nodes and 1 not zero controlling sources. 1999-09-07 Emmanuel Rouat * *.c: put back static functions declarations back in the .c files (shouldn't be in .h files!) 1999-09-07 Arno * aspice.c: template to fprintf now conform to argument types. * cmath1.c: * cmath2.c: removed most warnings about possible use of uninitialized variables. Only two remain in cx_sqrt(). 1999-09-06 Arno Peters * dotcards.c: Put proper braces around an ambiguous if/else construct. * postcoms.c: * postsc.c: Removed unused variables. 1999-09-04 Emmanuel Rouat * Makefile.am (libfte_a_SOURCES): forgot display.h in list * typesdef.c: moved types.c to typesdef.c * signal_handler.c: moved signal.c to signal_handler.c * *.c: added header file for all .c files 1999-09-01 Emmanuel Rouat * *.c: removed lots of unnecessary HAS_XX tests and code * Makefile.am (libfte_a_SOURCES): removed mfb.c from sources * signal.c (ft_sigintr): removed HAS_MFB test 1999-08-30 Paolo Nenzi * Removed #include "suffix.h" and replaced GENERIC with void. 1999-08-28 Emmanuel Rouat * Makefile.am (libfte_a_SOURCES): removed x10.c from source files * clip.c: removed MAX/MIN #defines * Removed all #includes of misc.h and util.h (now in spice.h) 1999-08-19 Paolo Nenzi * Makefile.am: added spec.c. * spcmdtab.c: added code for spec command support. The original patch came from ftp.mpce.mq.edu.au. * spec.c: added this file containing the spec command code. 1999-08-08 Emmanuel Rouat * Makefile.am (DEFS): removed -DWANT_MFB (don't need it) * resource.c : removed HAS_RLIMIT_ tests * error.c: removed HAS_VAXFPERROR code * cmath3.c: removed HAS_SHORTMACRO code * display.c : removed HAS_X10 code * mfb.c (Mfb_Init): removed HAS_PCTERM code * resource.c: removed all code related to HAS_MEMAVL 1999-08-06 Emmanuel Rouat * resource.c: removed tests on HAS_UNIX_SEGMENT_HACK * xgraph.c (ft_xgraph), options.c (cp_usrset), misccoms.c: removed tests on HAS_SYSTEM * nutinp.c, inp.c (com_source, doedit): removed tests on HAS_SYSTEM (always true?) * doplot.c (com_hardcopy): removed tests on HAS_UNLINK (always true), removed tests on HAS_SYSTEM (always true?) * signal.c: * evaluate.c (doop): * error.c (fatal): * aspice.c: removed test on HAS_UNIX_SIGS (always true) * signal.c: * evaluate.c: removed test on HAS_LONGJUMP (always true) 1999-08-04 Emmanuel Rouat * aspice.c: changed HAS_WAIT into HAVE_SYS_WAIT_H * inpcom.c, breakp.c: changed HAS_CTYPE into HAVE_CTYPE_H 1999-08-03 Emmanuel Rouat * signal.c, resource.c, evaluate.c, aspice.c: changed SIGNAL_TYPE into RETSIGTYPE 1999-07-31 Emmanuel Rouat * Makefile.am: added @X_CFLAGS@ (X11 header files) to INCLUDES and removed unused LIBS list. 28-07-1999 emmanuel.rouat@wanadoo.fr (Manu Rouat) * graf.c, display.c, doplot.c, x11.c: changed HAS_X11 define to X_DISPLAY_MISSING, which is supplied by autoconf in config.h * Makefile.am: removed -DWANT_X11 tmpk8ny_4pz/src/frontend/spec.c0000644000175000017500000002101013546075722016656 0ustar carstencarsten/********** Copyright 1994 Macquarie University, Sydney Australia. All rights reserved. Author: 1994 Anthony E. Parker, Department of Electronics, Macquarie Uni. **********/ /* * Code to do fourier transforms on data. */ #include "ngspice/ngspice.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/sim.h" #include "spec.h" #include "parse.h" #include "variable.h" #include "ngspice/missing_math.h" #include "../misc/misc_time.h" void com_spec(wordlist *wl) { ngcomplex_t **fdvec = NULL; double **tdvec = NULL; double *freq, *win = NULL, *time, *dc = NULL; double startf, stopf, stepf, span; int fpts, i, j, k, tlen, ngood; bool trace; char *s; struct dvec *f, *vlist, *lv = NULL, *vec; struct pnode *pn, *names = NULL; if (!plot_cur || !plot_cur->pl_scale) { fprintf(cp_err, "Error: no vectors loaded.\n"); goto done; } if (!isreal(plot_cur->pl_scale) || ((plot_cur->pl_scale)->v_type != SV_TIME)) { fprintf(cp_err, "Error: spec needs real time scale\n"); goto done; } s = wl->wl_word; tlen = (plot_cur->pl_scale)->v_length; if ((freq = ft_numparse(&s, FALSE)) == NULL || (*freq < 0.0)) { fprintf(cp_err, "Error: bad start freq %s\n", wl->wl_word); goto done; } startf = *freq; wl = wl->wl_next; s = wl->wl_word; if ((freq = ft_numparse(&s, FALSE)) == NULL || (*freq <= startf)) { fprintf(cp_err, "Error: bad stop freq %s\n", wl->wl_word); goto done; } stopf = *freq; wl = wl->wl_next; s = wl->wl_word; if ((freq = ft_numparse(&s, FALSE)) == NULL || !(*freq <= (stopf-startf))) { fprintf(cp_err, "Error: bad step freq %s\n", wl->wl_word); goto done; } stepf = *freq; wl = wl->wl_next; time = (plot_cur->pl_scale)->v_realdata; span = time[tlen-1] - time[0]; if (stopf > 0.5*tlen/span) { fprintf(cp_err, "Error: nyquist limit exceeded, try stop freq less than %e Hz\n", tlen/2/span); goto done; } span = ((int)(span*stepf*1.000000000001))/stepf; if (span > 0) { startf = (int)(startf/stepf*1.000000000001) * stepf; fpts = (int)((stopf - startf)/stepf + 1.); if (stopf > startf + (fpts-1)*stepf) fpts++; } else { fprintf(cp_err, "Error: time span limits step freq to %1.1e Hz\n", 1/(time[tlen-1] - time[0])); goto done; } win = TMALLOC(double, tlen); { char window[BSIZE_SP]; double maxt = time[tlen-1]; if (!cp_getvar("specwindow", CP_STRING, window, sizeof(window))) strcpy(window, "hanning"); if (eq(window, "none")) for (i = 0; i < tlen; i++) win[i] = 1; else if (eq(window, "rectangular")) for (i = 0; i < tlen; i++) { if (maxt-time[i] > span) { win[i] = 0; } else { win[i] = 1; } } else if (eq(window, "hanning") || eq(window, "cosine")) for (i = 0; i < tlen; i++) { if (maxt-time[i] > span) { win[i] = 0; } else { win[i] = 1 - cos(2*M_PI*(time[i]-maxt)/span); } } else if (eq(window, "hamming")) for (i = 0; i < tlen; i++) { if (maxt-time[i] > span) { win[i] = 0; } else { win[i] = 1 - 0.92/1.08*cos(2*M_PI*(time[i]-maxt)/span); } } else if (eq(window, "triangle") || eq(window, "bartlet")) for (i = 0; i < tlen; i++) { if (maxt-time[i] > span) { win[i] = 0; } else { win[i] = 2 - fabs(2+4*(time[i]-maxt)/span); } } else if (eq(window, "blackman")) { int order; if (!cp_getvar("specwindoworder", CP_NUM, &order, 0)) order = 2; if (order < 2) /* only order 2 supported here */ order = 2; for (i = 0; i < tlen; i++) { if (maxt-time[i] > span) { win[i] = 0; } else { win[i] = 1; win[i] -= 0.50/0.42*cos(2*M_PI*(time[i]-maxt)/span); win[i] += 0.08/0.42*cos(4*M_PI*(time[i]-maxt)/span); } } } else if (eq(window, "gaussian")) { int order; double scale; if (!cp_getvar("specwindoworder", CP_NUM, &order, 0)) order = 2; if (order < 2) order = 2; scale = pow(2*M_PI/order, 0.5)*(0.5-erfc(pow(order, 0.5))); for (i = 0; i < tlen; i++) { if (maxt-time[i] > span) { win[i] = 0; } else { win[i] = exp(-0.5*order*(1-2*(maxt-time[i])/span) *(1-2*(maxt-time[i])/span))/scale; } } } else { fprintf(cp_err, "Warning: unknown window type %s\n", window); goto done; } } names = ft_getpnames(wl, TRUE); vlist = NULL; ngood = 0; for (pn = names; pn; pn = pn->pn_next) { vec = ft_evaluate(pn); for (; vec; vec = vec->v_link2) { if (vec->v_length != tlen) { fprintf(cp_err, "Error: lengths don't match: %d, %d\n", vec->v_length, tlen); continue; } if (!isreal(vec)) { fprintf(cp_err, "Error: %s isn't real!\n", vec->v_name); continue; } if (vec->v_type == SV_TIME) { continue; } if (!vlist) vlist = vec; else lv->v_link2 = vec; lv = vec; ngood++; } } if (!ngood) goto done; plot_cur = plot_alloc("spectrum"); plot_cur->pl_next = plot_list; plot_list = plot_cur; plot_cur->pl_title = copy((plot_cur->pl_next)->pl_title); plot_cur->pl_name = copy("Spectrum"); plot_cur->pl_date = copy(datestring()); f = dvec_alloc(copy("frequency"), SV_FREQUENCY, VF_REAL | VF_PERMANENT | VF_PRINT, fpts, NULL); vec_new(f); freq = f->v_realdata; tdvec = TMALLOC(double *, ngood); fdvec = TMALLOC(ngcomplex_t *, ngood); for (i = 0, vec = vlist; i < ngood; i++) { tdvec[i] = vec->v_realdata; f = dvec_alloc(vec_basename(vec), vec->v_type, VF_COMPLEX | VF_PERMANENT, fpts, NULL); vec_new(f); fdvec[i] = f->v_compdata; vec = vec->v_link2; } dc = TMALLOC(double, ngood); for (i = 0; i < ngood; i++) dc[i] = 0; for (k = 1; k < tlen; k++) { double amp = win[k]/(tlen-1); for (i = 0; i < ngood; i++) { dc[i] += tdvec[i][k]*amp; } } trace = cp_getvar("spectrace", CP_BOOL, NULL, 0); for (j = (startf == 0 ? 1 : 0); j < fpts; j++) { freq[j] = startf + j*stepf; if (trace) fprintf(cp_err, "spec: %e Hz: \r", freq[j]); for (i = 0; i < ngood; i++) { fdvec[i][j].cx_real = 0; fdvec[i][j].cx_imag = 0; } for (k = 1; k < tlen; k++) { double amp = 2*win[k]/(tlen-1), rad = 2*M_PI*time[k]*freq[j], cosa = amp*cos(rad), sina = amp*sin(rad); for (i = 0; i < ngood; i++) { double value = tdvec[i][k]-dc[i]; fdvec[i][j].cx_real += value*cosa; fdvec[i][j].cx_imag += value*sina; } } #ifdef HAS_PROGREP SetAnalyse("spec", (int)(j * 1000./ fpts)); #endif } if (startf == 0) { freq[0] = 0; for (i = 0; i < ngood; i++) { fdvec[i][0].cx_real = dc[i]; fdvec[i][0].cx_imag = 0; } } if (trace) fprintf(cp_err, " \r"); #ifdef KEEPWINDOW f = dvec_alloc(copy("win"), SV_NOTYPE, VF_REAL | VF_PERMANENT, tlen, win); win = NULL; vec_new(f); #endif done: tfree(dc); tfree(tdvec); tfree(fdvec); tfree(win); free_pnode(names); } tmpk8ny_4pz/src/frontend/com_compose.h0000644000175000017500000000020613546075722020240 0ustar carstencarsten #ifndef ngspice_COM_COMPOSE_H #define ngspice_COM_COMPOSE_H #include "ngspice/wordlist.h" void com_compose(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/typesdef.c0000644000175000017500000002776013546075722017571 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1986 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Stuff to deal with nutmeg "types" for vectors and plots. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/sim.h" #include "typesdef.h" #define NUMTYPES (128 + 4) /* If this is too little we can use a list. */ #define NUMPLOTTYPES 512 /* Since there may be more than 1 pat/type. */ struct type { char *t_name; char *t_abbrev; bool f_name_is_alloc; /* Flag that name was allocated */ bool f_abbrev_is_alloc; /* Flag that abbrev was allocated */ }; /* The stuff for plot names. */ struct plotab { char *p_name; char *p_pattern; bool f_name_is_alloc; /* Flag that name was allocated */ bool f_pattern_is_alloc; /* Flag that pattern was allocated */ }; /* note: This should correspond to SV_ defined in sim.h */ static struct type types[NUMTYPES] = { { "notype", NULL, FALSE, FALSE }, { "time", "s", FALSE, FALSE }, { "frequency", "Hz", FALSE, FALSE }, { "voltage", "V", FALSE, FALSE }, { "current", "A", FALSE, FALSE }, { "voltage-density", "V/sqrt(Hz)", FALSE, FALSE }, { "current-density", "A/sqrt(Hz)", FALSE, FALSE }, { "voltage^2-density", "(V^2)/Hz", FALSE, FALSE }, { "current^2-density", "(A^2)/Hz", FALSE, FALSE }, { "voltage^2", "(V^2)", FALSE, FALSE }, { "current^2", "(A^2)", FALSE, FALSE }, { "pole", NULL, FALSE, FALSE }, { "zero", NULL, FALSE, FALSE }, { "s-param", NULL, FALSE, FALSE }, { "temp-sweep", "Celsius", FALSE, FALSE }, /* Added by HT */ { "res-sweep", "Ohms", FALSE, FALSE }, /* Added by HT */ { "impedance", "Ohms", FALSE, FALSE }, /* Added by A.Roldan */ { "admittance", "Mhos", FALSE, FALSE }, /* Added by A.Roldan */ { "power", "W", FALSE, FALSE }, /* Added by A.Roldan */ { "phase", "Degree", FALSE, FALSE }, /* Added by A.Roldan */ { "decibel", "dB", FALSE, FALSE }, /* Added by A.Roldan */ { "capacitance", "F", FALSE, FALSE }, { "charge", "C", FALSE, FALSE }, { "temperature", "Celsius", FALSE, FALSE } }; /* The stuff for plot names. */ static struct plotab plotabs[NUMPLOTTYPES] = { { "tran", "transient", FALSE, FALSE }, { "op", "op", FALSE, FALSE }, { "tf", "function", FALSE, FALSE }, { "dc", "d.c.", FALSE, FALSE }, { "dc", "dc", FALSE, FALSE }, { "dc", "transfer", FALSE, FALSE }, { "ac", "a.c.", FALSE, FALSE }, { "ac", "ac", FALSE, FALSE }, { "pz", "pz", FALSE, FALSE }, { "pz", "p.z.", FALSE, FALSE }, { "pz", "pole-zero", FALSE}, { "disto", "disto", FALSE, FALSE }, { "dist", "dist", FALSE, FALSE }, { "noise", "noise", FALSE, FALSE }, { "sens", "sens", FALSE, FALSE }, { "sens", "sensitivity", FALSE, FALSE }, { "sens2", "sens2", FALSE, FALSE }, { "sp", "s.p.", FALSE, FALSE }, { "sp", "sp", FALSE, FALSE }, { "harm", "harm", FALSE, FALSE }, { "spect", "spect", FALSE, FALSE }, { "pss", "periodic", FALSE, FALSE } }; /* A command to define types for vectors and plots. This will generally * be used in the Command: field of the rawfile. * The syntax is "deftype v typename abbrev", where abbrev will be used to * parse things like abbrev(name) and to label axes with M, instead * of numbers. It may be ommitted. * Also, the command "deftype p plottype pattern ..." will assign plottype as * the name to any plot with one of the patterns as its p_name field. * * Parameter * wl: A linked list of strings of words providing arguments to the * deftype command. * * Remarks * The caller must ensure that there are 3 words in the linked * list with the v subcommand or the function will cause access violations * as it tries to access the required arguments. With the p subcommand, * only 2 arguments are strictly required, but the function will not * do anything useful unless at least 3 are provided. */ void com_dftype(wordlist *wl) { /* Identify the subcommand and partially validate it */ const char * const subcmd_word = wl->wl_word; const char subcmd_char = *subcmd_word; if (subcmd_char == '\0' || subcmd_word[1] != '\0') { (void) fprintf(cp_err, "Error: invalid subcommand \"%s\".\n", subcmd_word); return; } switch (subcmd_char) { case 'v': case 'V': { wl = wl->wl_next; const char * const name = wl->wl_word; /* type name */ wl = wl->wl_next; const char * const abb = wl->wl_word; /* abbreviation */ /* Test for invalid arguments */ if ((wl = wl->wl_next) != (wordlist *) NULL) { (void) fprintf(cp_err, "Error: extraneous argument%s supplied " "with the v subcommand: \"%s\"", wl->wl_next == (wordlist *) NULL ? "" : "s", wl->wl_word); wl = wl->wl_next; for ( ; wl != (wordlist *) NULL; wl = wl->wl_next) { (void) fprintf(cp_err, ", \"%s\"", wl->wl_word); } (void) fprintf(cp_err, "\n"); return; } int i; /* Sequentially scan :( the defined types until the desired type * name is found or all names have been checked. */ for (i = 0; i < NUMTYPES && types[i].t_name; i++) if (cieq(types[i].t_name, name)) break; /* match found at index i */ if (i == NUMTYPES) { /* array is full */ fprintf(cp_err, "Error: too many types (%d) defined\n", NUMTYPES); return; } { struct type * const type_cur = types + i; /* If reached the end of the list of defined types, * define a new type */ if (type_cur->t_name == (char *) NULL) { type_cur->t_name = copy(name); type_cur->f_name_is_alloc = TRUE; } else { /* already exists, so may be abbrev to free */ /* If the abbreviation has already been defined via an * allocated buffer, free the allocation */ if (type_cur->t_abbrev != (char *) NULL && type_cur->f_abbrev_is_alloc) { txfree((void *) type_cur->t_abbrev); } } /* Set the new abbreviation */ type_cur->t_abbrev = copy(abb); type_cur->f_abbrev_is_alloc = TRUE; } break; } case 'p': case 'P': { wl = wl->wl_next; char * const name = copy(wl->wl_word); /* plot type name */ bool f_name_used = FALSE; /* flag that name copy alloc is used */ /* For each pattern supplied in the command, locate it in the * list of known patterns or add it if it does not exist and * the list is not full. */ for (wl = wl->wl_next; wl; wl = wl->wl_next) { char *pattern = wl->wl_word; int i; for (i = 0; i < NUMPLOTTYPES && plotabs[i].p_pattern; i++) if (cieq(plotabs[i].p_pattern, pattern)) break; /* match found at index i */ if (i == NUMPLOTTYPES) { /* array is full */ if (!f_name_used) { /* Free the name copy that was never used */ txfree((void *) name); } fprintf(cp_err, "Error: too many plot abs (%d) defined.\n", NUMPLOTTYPES); return; } { struct plotab * const plotab_cur = plotabs + i; /* If reached the end of the list of defined patterns, * define a new one */ if (plotab_cur->p_pattern == (char *) NULL) { plotab_cur->p_pattern = copy(pattern); plotab_cur->f_pattern_is_alloc = TRUE; } /* Assign the name for the pattern. Freeing the old * name, if present, is complicated by the fact that * the same name allocation is used for all matching * patterns. */ else { char * const p_name_old = plotab_cur->p_name; if (p_name_old != (char *) NULL && plotab_cur->f_name_is_alloc) { /* Alloc exists. Must free if this is the only use. * Find usage count to make this decision. */ int j; int n_use = 0; for (j = 0; j < NUMPLOTTYPES; j++) { const char * const p_name_cur = plotabs[j].p_name; /* Test for end of list */ if (p_name_cur == (char *) NULL) { /* end */ break; } /* More entries, so check for the allocation of * the old name */ if (p_name_cur == p_name_old) { /* match */ n_use++; } } /* end of loop over plot types */ /* Now can free if the usage count is exactly one, * that use being the current one */ if (n_use == 1) { txfree((void *) p_name_old); } } /* end of case that there was an existing name here */ } /* end of case that there was an old pattern */ /* Assign the (new) name */ plotab_cur->p_name = name; plotab_cur->f_name_is_alloc = TRUE; } /* end of block for assigning pattern and abbrev */ f_name_used = TRUE; /* flag that the allocated name was used */ } /* end of loop over patterns */ break; } default: fprintf(cp_err, "Error: invalid subcommand '%c'. " "Expecting 'p' or 'v'.\n", subcmd_char); break; } /* end of switch over subcommands */ } /* end of function com_dftype */ /* Return the abbreviation associated with a number. */ char * ft_typabbrev(int typenum) { if ((typenum < NUMTYPES) && (typenum >= 0)) return (types[typenum].t_abbrev); else return (NULL); } /* Return the typename associated with a number. */ char * ft_typenames(int typenum) { if ((typenum < NUMTYPES) && (typenum >= 0)) return (types[typenum].t_name); else return (NULL); } static int ft_typenum_x(char *type) { int i; for (i = 0; i < NUMTYPES && types[i].t_name; i++) if (eq(type, types[i].t_name)) return i; return -1; } /* Return the type number associated with the name. */ int ft_typnum(char *name) { int i; if (eq(name, "none")) name = "notype"; for (i = 0; (i < NUMTYPES) && types[i].t_name; i++) if (cieq(name, types[i].t_name)) return (i); return (SV_NOTYPE); } /* For plots... */ char * ft_plotabbrev(char *string) { char buf[128]; int i; if (!string) return (NULL); strncpy(buf, string, sizeof(buf)); buf[sizeof(buf) - 1] = '\0'; strtolower(buf); for (i = 0; i < NUMPLOTTYPES && plotabs[i].p_name; i++) if (substring(plotabs[i].p_pattern, buf)) return (plotabs[i].p_name); return (NULL); } /* Change the type of a vector. */ void com_stype(wordlist *wl) { char *type = wl->wl_word; int typenum = ft_typenum_x(type); if (typenum < 0) { fprintf(cp_err, "Error: no such type as '%s'\n", type); return; } for (wl = wl->wl_next; wl; wl = wl->wl_next) { struct dvec *v = vec_get(wl->wl_word); if (!v) fprintf(cp_err, "Error: no such vector %s.\n", wl->wl_word); else for (; v; v = v->v_link2) if (v->v_flags & VF_PERMANENT) v->v_type = typenum; } } tmpk8ny_4pz/src/frontend/runcoms2.c0000644000175000017500000001717713546075722017517 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Circuit simulation commands. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/ftedev.h" #include "ngspice/ftedebug.h" #include "ngspice/dvec.h" #include "ngspice/trandefs.h" #include "circuits.h" #include "runcoms2.h" #include "runcoms.h" #include "variable.h" #include "breakp2.h" #include "plotting/graf.h" #include "spiceif.h" #include "outitf.h" #include "numparam/numpaif.h" #include "ngspice/inpdefs.h" extern void line_free_x(struct card *deck, bool recurse); extern INPmodel *modtab; #ifdef SHARED_MODULE extern void exec_controls(wordlist *newcontrols); #endif #define line_free(line, flag) \ do { \ line_free_x(line, flag); \ line = NULL; \ } while(0) /* Continue a simulation. If there is non in progress, this is the * equivalent of "run". */ /* This is a hack to tell iplot routine to redraw the grid and initialize the display device */ bool resumption = FALSE; void com_resume(wordlist *wl) { struct dbcomm *db; int err; /*rawfile output saj*/ bool dofile = FALSE; char buf[BSIZE_SP]; bool ascii = AsciiRawFile; /*end saj*/ NG_IGNORE(wl); /*saj fix segment*/ if (!ft_curckt) { fprintf(cp_err, "Error: there aren't any circuits loaded.\n"); return; } else if (ft_curckt->ci_ckt == NULL) { /* Set noparse? */ fprintf(cp_err, "Error: circuit not parsed.\n"); return; } /*saj*/ if (ft_curckt->ci_inprogress == FALSE) { fprintf(cp_err, "Note: run starting\n"); com_run(NULL); return; } ft_curckt->ci_inprogress = TRUE; ft_setflag = TRUE; reset_trace(); for (db = dbs, resumption = FALSE; db; db = db->db_next) if (db->db_type == DB_IPLOT || db->db_type == DB_IPLOTALL) resumption = TRUE; /*rawfile output saj*/ if (last_used_rawfile) dofile = TRUE; if (cp_getvar("filetype", CP_STRING, buf, sizeof(buf))) { if (eq(buf, "binary")) ascii = FALSE; else if (eq(buf, "ascii")) ascii = TRUE; else fprintf(cp_err, "Warning: strange file type \"%s\" (using \"ascii\")\n", buf); } if (dofile) { if (!last_used_rawfile) rawfileFp = stdout; #if defined(__MINGW32__) || defined(_MSC_VER) /* ask if binary or ASCII, open file with w or wb hvogt 15.3.2000 */ else if (ascii) { if ((rawfileFp = fopen(last_used_rawfile, "a")) == NULL) { perror(last_used_rawfile); ft_setflag = FALSE; return; } } else if (!ascii) { if ((rawfileFp = fopen(last_used_rawfile, "ab")) == NULL) { perror(last_used_rawfile); ft_setflag = FALSE; return; } } /*---------------------------------------------------------------------------*/ #else else if (!(rawfileFp = fopen(last_used_rawfile, "a"))) { perror(last_used_rawfile); ft_setflag = FALSE; return; } #endif rawfileBinary = !ascii; } else { rawfileFp = NULL; } /* if dofile */ /*end saj*/ err = if_run(ft_curckt->ci_ckt, "resume", NULL, ft_curckt->ci_symtab); /*close rawfile saj*/ if (rawfileFp) { if (ftell(rawfileFp) == 0) { (void) fclose(rawfileFp); (void) unlink(last_used_rawfile); } else { (void) fclose(rawfileFp); } } /*end saj*/ if (err == 1) { /* The circuit was interrupted somewhere. */ fprintf(cp_err, "simulation interrupted\n"); } else if (err == 2) { fprintf(cp_err, "simulation aborted\n"); ft_curckt->ci_inprogress = FALSE; } else { ft_curckt->ci_inprogress = FALSE; } } /* Throw out the circuit struct and recreate it from the deck. */ void com_rset(wordlist *wl) { NG_IGNORE(wl); #if (1) if (ft_curckt == NULL) { fprintf(cp_err, "Error: there is no circuit loaded.\n"); return; } com_remcirc(NULL); inp_source_recent(); #else struct variable *v, *next; if (ft_curckt == NULL) { fprintf(cp_err, "Error: there is no circuit loaded.\n"); return; } INPkillMods(); if_cktfree(ft_curckt->ci_ckt, ft_curckt->ci_symtab); for (v = ft_curckt->ci_vars; v; v = next) { next = v->va_next; tfree(v); } ft_curckt->ci_vars = NULL; inp_dodeck(ft_curckt->ci_deck, ft_curckt->ci_name, NULL, TRUE, ft_curckt->ci_options, ft_curckt->ci_filename); #endif } /* Clears ckt and removes current circuit from database */ void com_remcirc(wordlist *wl) { struct variable *v, *next; struct card *dd; /*in: the spice deck */ struct circ *p, *prev = NULL; #ifdef SHARED_MODULE TRANan *job; #endif NG_IGNORE(wl); if (ft_curckt == NULL) { fprintf(cp_err, "Error: there is no circuit loaded.\n"); return; } #ifdef SHARED_MODULE /* This may happen only with shared ngspice during transient analysis, if simulation is stopped with 'bg_halt' and then circuit shall be removed prematurely. */ job = (TRANan *) ft_curckt->ci_ckt->CKTcurJob; if (job && (job->JOBtype == 4) && (job->TRANplot)) SPfrontEnd->OUTendPlot (job->TRANplot); #endif /* delete numparam data structure dicoS */ nupa_del_dicoS(); /* delete entry in dicoslist */ nupa_rem_dicoslist(ft_curckt->ci_dicos); dbfree(ft_curckt->ci_dbs); ft_curckt->ci_dbs = NULL; dbs = NULL; /* The next lines stem from com_rset */ INPkillMods(); if_cktfree(ft_curckt->ci_ckt, ft_curckt->ci_symtab); for (v = ft_curckt->ci_vars; v; v = next) { next = v->va_next; tfree(v->va_name); if (v->va_type == CP_STRING) tfree(v->va_string); tfree(v); } ft_curckt->ci_vars = NULL; /* delete the deck, parameter list, and options list in ft_curckt */ dd = ft_curckt->ci_deck; line_free(dd, TRUE); dd = ft_curckt->ci_param; line_free(dd, TRUE); dd = ft_curckt->ci_options; line_free(dd, TRUE); dd = ft_curckt->ci_meas; line_free(dd, TRUE); wl_free(ft_curckt->ci_commands); tfree(ft_curckt->FTEstats); ft_sim->deleteTask (ft_curckt->ci_ckt, ft_curckt->ci_defTask); if (ft_curckt->ci_specTask) ft_sim->deleteTask (ft_curckt->ci_ckt, ft_curckt->ci_specTask); if (ft_curckt->ci_name) tfree(ft_curckt->ci_name); if (ft_curckt->ci_filename) tfree(ft_curckt->ci_filename); rem_tlist(ft_curckt->devtlist); rem_tlist(ft_curckt->modtlist); inp_mc_free(); /* delete the actual circuit entry from ft_circuits */ for (p = ft_circuits; p; p = p->ci_next) { if (ft_curckt == p) { if (prev == NULL) { ft_circuits = p->ci_next; tfree(p); p = NULL; break; } else { prev->ci_next = p->ci_next; tfree(p); p = NULL; break; } } prev = p; } /* make first entry in ft_circuits the actual circuit (or NULL) */ ft_curckt = ft_circuits; if (ft_curckt) { modtab = ft_curckt->ci_modtab; dbs = ft_curckt->ci_dbs; nupa_set_dicoslist(ft_curckt->ci_dicos); } } tmpk8ny_4pz/src/frontend/com_plot.h0000644000175000017500000000022413546075722017551 0ustar carstencarsten#ifndef ngspice_COM_PLOT_H #define ngspice_COM_PLOT_H void com_plot(wordlist *wl); #ifdef TCL_MODULE void com_bltplot(wordlist *wl); #endif #endif tmpk8ny_4pz/src/frontend/points.c0000644000175000017500000000474313546075722017256 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/graph.h" #include "ngspice/ftedbgra.h" #include "points.h" /* Returns the minimum and maximum values of a dvec. Returns a pointer * to static data. If real is TRUE look at the real parts, otherwise * the imag parts. */ double * ft_minmax(struct dvec *v, bool real) { static double res[2]; register int i; double d; res[0] = HUGE; res[1] = - res[0]; for (i = 0; i < v->v_length; i++) { if (isreal(v)) d = v->v_realdata[i]; else if (real) d = realpart(v->v_compdata[i]); else d = imagpart(v->v_compdata[i]); if (d < res[0]) res[0] = d; if (d > res[1]) res[1] = d; } return (res); } /* Figure out where a point should go, given the limits of the plotting * area and the type of scale (log or linear). */ int ft_findpoint(double pt, double *lims, int maxp, int minp, bool islog) { double tl, th; if (pt < lims[0]) pt = lims[0]; if (pt > lims[1]) pt = lims[1]; if (islog) { tl = mylog10(lims[0]); th = mylog10(lims[1]); return (int)(((mylog10(pt) - tl) / (th - tl)) * (maxp - minp) + minp); } else { return (int)(((pt - lims[0]) / (lims[1] - lims[0])) * (maxp - minp) + minp); } } /* Will report the minimum and maximum in "reflection coefficient" space */ double * ft_SMITHminmax(struct dvec *v, bool yval) { static double res[2]; register int i; double d, d2; res[0] = HUGE; res[1] = - res[0]; for (i = 0; i < v->v_length; i++) { if (isreal(v)) SMITH_tfm(v->v_realdata[i], 0.0, &d, &d2); else SMITH_tfm(realpart(v->v_compdata[i]), imagpart(v->v_compdata[i]), &d, &d2); /* Are we are looking for min/max X or Y ralue */ if (yval) d = d2; if (d < res[0]) res[0] = d; if (d > res[1]) res[1] = d; } return (res); } int SMITH_tfm(double re, double im, double *x, double *y) { double dnom; dnom = (re + 1) * (re + 1) + im * im; *x = (re * re + im * im - 1) / dnom; *y = 2 * im / dnom; return 0; } tmpk8ny_4pz/src/frontend/define.c0000644000175000017500000002656513546075722017202 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * User-defined functions. The user defines the function with * define func(arg1, arg2, arg3) * Then when he types "func(1, 2, 3)", the commas are interpreted as * binary operations of the lowest priority by the parser, and ft_substdef() * below is given a chance to fill things in and return what the parse tree * would have been had the entire thing been typed. * Note that we have to take some care to distinguish between functions * with the same name and different arities. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/fteparse.h" #include "define.h" #include "completion.h" static void savetree(struct pnode *pn); static void prdefs(char *name); static void prtree(struct udfunc *ud, FILE *fp); static void prtree1(struct pnode *pn, FILE *fp); static struct pnode *trcopy(struct pnode *tree, char *arg_names, struct pnode *args); static struct pnode *ntharg(int num, struct pnode *args); static int numargs(struct pnode *args); static struct udfunc *udfuncs = NULL; /* Set up a function definition. */ void com_define(wordlist *wlist) { int arity = 0, i; char buf[BSIZE_SP], tbuf[BSIZE_SP], *s, *t, *b; wordlist *wl; struct pnode *names; struct udfunc *udf; /* If there's nothing then print all the definitions. */ if (wlist == NULL) { prdefs(NULL); return; } /* Accumulate the function head in the buffer, w/out spaces. A * useful thing here would be to check to make sure that there * are no formal parameters here called "list". But you have * to try really hard to break this here. */ buf[0] = '\0'; for (wl = wlist; wl && (strchr(wl->wl_word, ')') == NULL); wl = wl->wl_next) (void) strcat(buf, wl->wl_word); if (wl) { t = strchr(buf, '\0'); for (s = wl->wl_word; *s && (*s != ')');) *t++ = *s++; *t++ = ')'; *t = '\0'; if (*++s) wl->wl_word = copy(s); else wl = wl->wl_next; } /* If that's all, then print the definition. */ if (wl == NULL) { s = strchr(buf, '('); if (s) *s = '\0'; prdefs(buf); return; } /* Now check to see if this is a valid name for a function (i.e, * there isn't a predefined function of the same name). */ (void) strcpy(tbuf, buf); for (b = tbuf; *b; b++) if (isspace_c(*b) || (*b == '(')) { *b = '\0'; break; } for (i = 0; ft_funcs[i].fu_name; i++) if (eq(ft_funcs[i].fu_name, tbuf)) { fprintf(cp_err, "Error: %s is a predefined function.\n", tbuf); return; } /* Parse the rest of it. We can't know if there are the right * number of undefined variables in the expression. */ if ((names = ft_getpnames(wl, FALSE)) == NULL) return; /* This is a pain -- when things are garbage-collected, any * vectors that may have been mentioned here will be thrown * away. So go down the tree and save any vectors that aren't * formal parameters. */ savetree(names); /* Format the name properly and add to the list. */ b = copy(buf); for (s = b; *s; s++) { if (*s == '(') { *s = '\0'; if (s[1] != ')') arity++; /* It will have been 0. */ } else if (*s == ')') { *s = '\0'; } else if (*s == ',') { *s = '\0'; arity++; } } for (udf = udfuncs; udf; udf = udf->ud_next) if (prefix(b, udf->ud_name) && (arity == udf->ud_arity)) break; if (udf == NULL) { udf = TMALLOC(struct udfunc, 1); udf->ud_next = udfuncs; udfuncs = udf; } udf->ud_text = names; udf->ud_name = b; udf->ud_arity = arity; cp_addkword(CT_UDFUNCS, b); } /* Kludge. */ static void savetree(struct pnode *pn) { struct dvec *d; if (pn->pn_value) { /* We specifically don't add this to the plot list * so it won't get gc'ed. */ d = pn->pn_value; if ((d->v_length != 0) || eq(d->v_name, "list")) { pn->pn_value = dvec_alloc(copy(d->v_name), d->v_type, d->v_flags, d->v_length, NULL); /* this dvec isn't member of any plot */ if (isreal(d)) { memcpy(pn->pn_value->v_realdata, d->v_realdata, sizeof(double) * (size_t) d->v_length); } else { memcpy(pn->pn_value->v_compdata, d->v_compdata, sizeof(ngcomplex_t) * (size_t) d->v_length); } } } else if (pn->pn_op) { savetree(pn->pn_left); if (pn->pn_op->op_arity == 2) savetree(pn->pn_right); } else if (pn->pn_func) { savetree(pn->pn_left); } } /* A bunch of junk to print out nodes. */ static void prdefs(char *name) { struct udfunc *udf; if (name && *name) { /* You never know what people will do */ for (udf = udfuncs; udf; udf = udf->ud_next) if (eq(name, udf->ud_name)) prtree(udf, cp_out); } else { for (udf = udfuncs; udf; udf = udf->ud_next) prtree(udf, cp_out); } } /* Print out one definition. */ static void prtree(struct udfunc *ud, FILE *fp) { const char *s = ud->ud_name; /* print the function name */ fprintf(fp, "%s (", s); s = strchr(s, '\0') + 1; /* print the formal args */ while (*s) { fputs(s, fp); s = strchr(s, '\0') + 1; if (*s) fputs(", ", fp); } fputs(") = ", fp); /* print the function body */ prtree1(ud->ud_text, fp); putc('\n', fp); } static void prtree1(struct pnode *pn, FILE *fp) { if (pn->pn_value) { fputs(pn->pn_value->v_name, fp); } else if (pn->pn_func) { fprintf(fp, "%s (", pn->pn_func->fu_name); prtree1(pn->pn_left, fp); fputs(")", fp); } else if (pn->pn_op && (pn->pn_op->op_arity == 2)) { fputs("(", fp); prtree1(pn->pn_left, fp); fprintf(fp, ")%s(", pn->pn_op->op_name); prtree1(pn->pn_right, fp); fputs(")", fp); } else if (pn->pn_op && (pn->pn_op->op_arity == 1)) { fprintf(fp, "%s(", pn->pn_op->op_name); prtree1(pn->pn_left, fp); fputs(")", fp); } else { fputs("", fp); } } struct pnode * ft_substdef(const char *name, struct pnode *args) { struct udfunc *udf, *wrong_udf = NULL; char *arg_names; int arity = numargs(args); for (udf = udfuncs; udf; udf = udf->ud_next) if (eq(name, udf->ud_name)) { if (arity == udf->ud_arity) break; wrong_udf = udf; } if (udf == NULL) { if (wrong_udf) fprintf(cp_err, "Warning: the user-defined function %s has %d args\n", name, wrong_udf->ud_arity); return NULL; } arg_names = strchr(udf->ud_name, '\0') + 1; /* Now we have to traverse the tree and copy it over, * substituting args. */ return trcopy(udf->ud_text, arg_names, args); } /* Copy the tree and replace formal args with the right stuff. The way * we know that something might be a formal arg is when it is a dvec * with length 0 and a name that isn't "list". I hope nobody calls their * formal parameters "list". */ static struct pnode * trcopy(struct pnode *tree, char *arg_names, struct pnode *args) { if (tree->pn_value) { struct dvec *d = tree->pn_value; if ((d->v_length == 0) && strcmp(d->v_name, "list")) { /* Yep, it's a formal parameter. Substitute for it. * IMPORTANT: we never free parse trees, so we * needn't worry that they aren't trees here. */ char *s = arg_names; int i; for (i = 1; *s; i++) { if (eq(s, d->v_name)) return ntharg(i, args); s = strchr(s, '\0') + 1; } return tree; } return tree; } if (tree->pn_func) { struct pnode *pn = alloc_pnode(); /* pn_func are pointers to a global constant struct */ pn->pn_func = tree->pn_func; pn->pn_left = trcopy(tree->pn_left, arg_names, args); pn->pn_left->pn_use++; return pn; } if (tree->pn_op) { struct pnode *pn = alloc_pnode(); /* pn_op are pointers to a global constant struct */ pn->pn_op = tree->pn_op; pn->pn_left = trcopy(tree->pn_left, arg_names, args); pn->pn_left->pn_use++; if (pn->pn_op->op_arity == 2) { pn->pn_right = trcopy(tree->pn_right, arg_names, args); pn->pn_right->pn_use++; } return pn; } fprintf(cp_err, "trcopy: Internal Error: bad parse node\n"); return NULL; } /* Find the n'th arg in the arglist, returning NULL if there isn't one. * Since comma has such a low priority and associates to the right, * we can just follow the right branch of the tree num times. * Note that we start at 1 when numbering the args. */ static struct pnode * ntharg(int num, struct pnode *args) { for (; args; args = args->pn_right, --num) { if (num <= 1) { if (args->pn_op && (args->pn_op->op_num == PT_OP_COMMA)) return args->pn_left; return args; } if (!(args->pn_op && (args->pn_op->op_num == PT_OP_COMMA))) return NULL; } return NULL; } static int numargs(struct pnode *args) { int arity; if (!args) return 0; for (arity = 1; args; args = args->pn_right, arity++) if (!(args->pn_op && (args->pn_op->op_num == PT_OP_COMMA))) return arity; // note: a trailing NULL pn_right will be counted too return arity; } void com_undefine(wordlist *wlist) { struct udfunc *udf; if (!wlist) return; if (*wlist->wl_word == '*') { for (udf = udfuncs; udf;) { struct udfunc *next = udf->ud_next; cp_remkword(CT_UDFUNCS, udf->ud_name); free_pnode(udf->ud_text); tfree(udf->ud_name); tfree(udf); udf = next; } udfuncs = NULL; return; } for (; wlist; wlist = wlist->wl_next) { struct udfunc *prev_udf = NULL; for (udf = udfuncs; udf;) { struct udfunc *next = udf->ud_next; if (eq(wlist->wl_word, udf->ud_name)) { if (prev_udf) prev_udf->ud_next = udf->ud_next; else udfuncs = udf->ud_next; cp_remkword(CT_UDFUNCS, wlist->wl_word); free_pnode(udf->ud_text); tfree(udf->ud_name); tfree(udf); } else { prev_udf = udf; } udf = next; } } } /* * This is only here so I can "call" it from gdb/dbx */ void ft_pnode(struct pnode *pn) { prtree1(pn, cp_err); } tmpk8ny_4pz/src/frontend/terminal.c0000644000175000017500000001543513546075722017555 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1986 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Routines to handle "more"d output. There are some serious system * dependencies in here, and it isn't clear that versions of this stuff * can be written for every possible machine... */ #include "ngspice/ngspice.h" #include #ifdef HAVE_SGTTY_H #include #endif #ifdef HAVE_SYS_IOCTL_H #include #endif #if 0 /* Bad interaction with bool type in bool.h because curses also defines this symbol. */ #ifdef HAVE_TERMCAP #include #include #endif #endif #ifdef HAVE_TERMCAP_H #include #elif HAVE_NCURSES_TERMCAP_H #include #endif #include "ngspice/cpdefs.h" #include "variable.h" #include "terminal.h" bool out_moremode = FALSE; bool out_isatty = TRUE; #ifndef TCL_MODULE #ifdef HAVE_TERMCAP static char *motion_chars; static char *clear_chars; static char *home_chars; static char *cleol_chars; #endif #define DEF_SCRHEIGHT 24 #define DEF_SCRWIDTH 80 static int xsize, ysize; static int xpos, ypos; static bool noprint, nopause; /* Start output... */ void out_init(void) { #ifdef TIOCGWINSZ struct winsize ws; #endif noprint = nopause = FALSE; if (cp_getvar("moremode", CP_BOOL, NULL, 0)) out_moremode = TRUE; else out_moremode = FALSE; if (!out_moremode || !cp_interactive) out_isatty = FALSE; if (!out_isatty) return; xsize = ysize = 0; /* Figure out the screen size. We try, in order, TIOCGSIZE, * tgetent(), and cp_getvar(height). Default is 24 x 80. */ #ifdef TIOCGWINSZ if (!xsize || !ysize) { (void) ioctl(fileno(stdout), TIOCGWINSZ, (char *) &ws); xsize = ws.ws_col; ysize = ws.ws_row; } #endif if (!xsize) (void) cp_getvar("width", CP_NUM, &xsize, 0); if (!ysize) (void) cp_getvar("height", CP_NUM, &ysize, 0); if (!xsize) xsize = DEF_SCRWIDTH; if (!ysize) ysize = DEF_SCRHEIGHT; ysize -= 2; /* Fudge room... */ xpos = ypos = 0; } /* Putc may not be buffered (sp?), so we do it ourselves. */ static char staticbuf[BUFSIZ]; struct { int count; char *ptr; } ourbuf = { BUFSIZ, staticbuf }; /* send buffer out */ void outbufputc(void) { if (ourbuf.count != BUFSIZ) { fputs(staticbuf, cp_out); memset(staticbuf, 0, (size_t) BUFSIZ - ourbuf.count); ourbuf.count = BUFSIZ; ourbuf.ptr = staticbuf; } } static void bufputc(char c) { if (--ourbuf.count >= 0) { *ourbuf.ptr++ = c; } else { /* Flush and reset the buffer */ outbufputc(); /* and store the character. */ ourbuf.count--; *ourbuf.ptr++ = c; } } /* prompt for a return */ void promptreturn(void) { char buf[16]; moe: fprintf(cp_out, "\n\t-- hit return for more, ? for help -- "); if (!fgets(buf, 16, cp_in)) { clearerr(cp_in); *buf = 'q'; } switch (*buf) { case '\n': break; case 'q': noprint = TRUE; break; case 'c': nopause = TRUE; break; case ' ': break; case '?': fprintf(cp_out, "\nPossible responses:\n\ \t : Print another screenful\n\ \tq : Discard the rest of the output\n\ \tc : Continuously print the rest of the output\n\ \t? : Print this help message\n"); goto moe; default: fprintf(cp_out, "Character %d is no good\n", *buf); goto moe; } } /* Print a string to the output. If this would cause the screen to scroll, * print "more". */ void out_send(char *string) { if (noprint) return; if (!out_isatty || nopause) { fputs(string, cp_out); return; } while (*string) { switch (*string) { case '\n': xpos = 0; ypos++; break; case '\f': ypos = ysize; xpos = 0; break; case '\t': xpos = xpos / 8 + 1; xpos *= 8; break; default: xpos++; break; } while (xpos >= xsize) { xpos -= xsize; ypos++; } if (ypos >= ysize) { outbufputc(); /* out goes buffer */ promptreturn(); (void) fflush(cp_out); ypos = xpos = 0; } bufputc(*string); /* we need to buffer these */ string++; } (void) outbufputc(); } /* Printf some stuff using more mode. */ void out_vprintf(const char *fmt, va_list ap) { char *tbuf = tvprintf(fmt, ap); out_send(tbuf); FREE(tbuf); } void out_printf(char *fmt, ...) { va_list ap; va_start(ap, fmt); out_vprintf(fmt, ap); va_end(ap); } #ifdef HAVE_TERMCAP static int outfn(int c) { putc(c, stdout); return c; } #endif void tcap_init(void) { char *s; #ifdef HAVE_TERMCAP char tbuf[1025]; static char buf2[100]; char *charbuf; charbuf = buf2; if ((s = getenv("TERM")) != NULL) if (tgetent(tbuf, s) != -1) { xsize = tgetnum("co"); ysize = tgetnum("li"); if ((xsize <= 0) || (ysize <= 0)) xsize = ysize = 0; clear_chars = tgetstr("cl", &charbuf); motion_chars = tgetstr("cm", &charbuf); home_chars = tgetstr("ho", &charbuf); cleol_chars = tgetstr("ce", &charbuf); } #endif if (!xsize) { if ((s = getenv("COLS")) != NULL) xsize = atoi(s); if (xsize <= 0) xsize = DEF_SCRWIDTH; } if (!ysize) { if ((s = getenv("LINES")) != NULL) ysize = atoi(s); if (ysize <= 0) ysize = DEF_SCRHEIGHT; } } void term_clear(void) { #ifdef HAVE_TERMCAP if (*clear_chars) tputs(clear_chars, 1, outfn); else fputs("\n", stdout); #endif } void term_home(void) { #ifdef HAVE_TERMCAP if (*home_chars) tputs(home_chars, 1, outfn); else if (*motion_chars) tputs(tgoto(motion_chars, 1, 1), 1, outfn); else fputs("\n", stdout); #endif } void term_cleol(void) { #ifdef HAVE_TERMCAP if (*cleol_chars) tputs(cleol_chars, 1, outfn); #endif } #else void out_init(void) {} void outbufputc(void) {} void promptreturn(void) {} void term_clear(void) {} void term_home(void) {} void term_cleol(void) {} void tcap_init(void) {} void out_send(char *string) { fprintf(cp_out, "%s", string); } void out_vprintf(const char *fmt, va_list ap) { vfprintf(cp_out, fmt, ap); } void out_printf(char *fmt, ...) { va_list ap; va_start(ap, fmt); out_vprintf(fmt, ap); va_end(ap); } #endif /* TCL_MODULE */ tmpk8ny_4pz/src/frontend/completion.h0000644000175000017500000000127613546075722020116 0ustar carstencarsten#ifndef ngspice_COMPLETION_H #define ngspice_COMPLETION_H /* The types for command completion keywords. Note that these * constants are built into cmdtab.c, so DON'T change them unless you * want to change all of the bitmasks in cp_coms. Note that this is * spice- and nutmeg- dependent. */ #define CT_FILENAME 0 #define CT_CKTNAMES 2 #define CT_COMMANDS 3 #define CT_DBNUMS 4 #define CT_DEVNAMES 5 #define CT_LISTINGARGS 6 #define CT_NODENAMES 7 #define CT_PLOT 8 #define CT_PLOTKEYWORDS 9 #define CT_RUSEARGS 10 #define CT_STOPARGS 11 #define CT_UDFUNCS 12 #define CT_VARIABLES 13 #define CT_VECTOR 14 #define CT_TYPENAMES 16 #endif tmpk8ny_4pz/src/frontend/vectors.c0000644000175000017500000010120613546075722017417 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Routines for dealing with the vector database. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/sim.h" #include "ngspice/stringskip.h" #include "circuits.h" #include "completion.h" #include "variable.h" #include "dimens.h" #include "../misc/misc_time.h" #include "vectors.h" #include "ngspice/dstring.h" #include "plotting/plotting.h" #ifdef XSPICE /* gtri - begin - add function prototype for EVTfindvec */ struct dvec *EVTfindvec(char *node); /* gtri - end - add function prototype for EVTfindvec */ #endif static void vec_rebuild_lookup_table(struct plot *pl) { int cnt; /* count entries */ struct dvec *d; /* dynamic vector */ NGHASHPTR lookup_p; /* lookup table for speed */ SPICE_DSTRING dbuf; /* dynamic buffer */ char *lower_name; /* lower case name */ if (pl->pl_lookup_table) { nghash_empty(pl->pl_lookup_table, NULL, NULL); } else { cnt = 0; for (d = pl->pl_dvecs; d; d = d->v_next) cnt++; pl->pl_lookup_table = nghash_init(cnt); /* allow multiple entries */ nghash_unique(pl->pl_lookup_table, FALSE); } lookup_p = pl->pl_lookup_table; spice_dstring_init(&dbuf); for (d = pl->pl_dvecs; d; d = d->v_next) { spice_dstring_reinit(&dbuf); lower_name = spice_dstring_append_lower(&dbuf, d->v_name, -1); nghash_insert(lookup_p, lower_name, d); } spice_dstring_free(&dbuf); pl->pl_lookup_valid = TRUE; } /* Find a named vector in a plot. We are careful to copy the vector if * v_link2 is set, because otherwise we will get screwed up. */ static struct dvec * findvec(char *word, struct plot *pl) { SPICE_DSTRING dbuf; /* dynamic buffer */ char *lower_name; /* lower case name */ char *node_name; struct dvec *d, *newv = NULL, *end = NULL, *v; if (pl == NULL) return (NULL); if (cieq(word, "all")) { for (d = pl->pl_dvecs; d; d = d->v_next) { if (d->v_flags & VF_PERMANENT) { if (d->v_link2) { v = vec_copy(d); vec_new(v); } else { v = d; } if (end) end->v_link2 = v; else newv = v; end = v; } } return (newv); } if (cieq(word, "allv")) { for (d = pl->pl_dvecs; d; d = d->v_next) { if ((d->v_flags & VF_PERMANENT) && (d->v_type == SV_VOLTAGE)) { if (d->v_link2) { v = vec_copy(d); vec_new(v); } else { v = d; } if (end) end->v_link2 = v; else newv = v; end = v; } } return (newv); } if (cieq(word, "alli")) { for (d = pl->pl_dvecs; d; d = d->v_next) { if ((d->v_flags & VF_PERMANENT) && (d->v_type == SV_CURRENT)) { if (d->v_link2) { v = vec_copy(d); vec_new(v); } else { v = d; } if (end) end->v_link2 = v; else newv = v; end = v; } } return (newv); } if (cieq(word, "ally")) { for (d = pl->pl_dvecs; d; d = d->v_next) { if ((d->v_flags & VF_PERMANENT) && (!cieq(d->v_name, pl->pl_scale->v_name))) { if (d->v_link2) { v = vec_copy(d); vec_new(v); } else { v = d; } if (end) end->v_link2 = v; else newv = v; end = v; } } return (newv); } if (!pl->pl_lookup_valid) vec_rebuild_lookup_table(pl); spice_dstring_init(&dbuf); lower_name = spice_dstring_append_lower(&dbuf, word, -1); for (d = nghash_find(pl->pl_lookup_table, lower_name); d; d = nghash_find_again(pl->pl_lookup_table, lower_name)) { if (d->v_flags & VF_PERMANENT) break; } if (!d) { spice_dstring_reinit(&dbuf); spice_dstring_append(&dbuf, "v(", -1); spice_dstring_append_lower(&dbuf, word, -1); node_name = spice_dstring_append_char(&dbuf, ')'); for (d = nghash_find(pl->pl_lookup_table, node_name); d; d = nghash_find_again(pl->pl_lookup_table, node_name)) { if (d->v_flags & VF_PERMANENT) break; } } spice_dstring_free(&dbuf); #ifdef XSPICE /* gtri - begin - Add processing for getting event-driven vector */ if (!d) d = EVTfindvec(word); /* gtri - end - Add processing for getting event-driven vector */ #endif if (d && d->v_link2) { d = vec_copy(d); vec_new(d); } return (d); } /* If there are imbedded numeric strings, compare them numerically, not * alphabetically. */ static int namecmp(const void *a, const void *b) { int i, j; const char *s = (const char *) a; const char *t = (const char *) b; for (;;) { while ((*s == *t) && !isdigit_c(*s) && *s) s++, t++; if (!*s) return (0); if ((*s != *t) && (!isdigit_c(*s) || !isdigit_c(*t))) return (*s - *t); /* The beginning of a number... Grab the two numbers and then * compare them... */ for (i = 0; isdigit_c(*s); s++) i = i * 10 + *s - '0'; for (j = 0; isdigit_c(*t); t++) j = j * 10 + *t - '0'; if (i != j) return (i - j); } } static int veccmp(const void *a, const void *b) { int i; struct dvec **d1 = (struct dvec **) a; struct dvec **d2 = (struct dvec **) b; if ((i = namecmp((*d1)->v_plot->pl_typename, (*d2)->v_plot->pl_typename)) != 0) return (i); return (namecmp((*d1)->v_name, (*d2)->v_name)); } /* Sort all the vectors in d, first by plot name and then by vector * name. Do the right thing with numbers. */ static struct dvec * sortvecs(struct dvec *d) { struct dvec **array, *t; int i, j; for (t = d, i = 0; t; t = t->v_link2) i++; if (i < 2) return (d); array = TMALLOC(struct dvec *, i); for (t = d, i = 0; t; t = t->v_link2) array[i++] = t; qsort(array, (size_t) i, sizeof(struct dvec *), veccmp); /* Now string everything back together... */ for (j = 0; j < i - 1; j++) array[j]->v_link2 = array[j + 1]; array[j]->v_link2 = NULL; d = array[0]; tfree(array); return (d); } /* Load in a rawfile. */ void ft_loadfile(char *file) { struct plot *pl, *np, *pp; fprintf(cp_out, "Loading raw data file (\"%s\") ...\n", file); pl = raw_read(file); if (pl) fprintf(cp_out, "done.\n"); else fprintf(cp_out, "no data read.\n"); /* This is a minor annoyance -- we should reverse the plot list so * they get numbered in the correct order. */ for (pp = pl, pl = NULL; pp; pp = np) { np = pp->pl_next; pp->pl_next = pl; pl = pp; } for (; pl; pl = np) { np = pl->pl_next; plot_add(pl); /* Don't want to get too many "plot not written" messages. */ pl->pl_written = TRUE; } plot_num++; plotl_changed = TRUE; } void plot_add(struct plot *pl) { struct dvec *v; struct plot *tp; char *s, buf[BSIZE_SP]; fprintf(cp_out, "Title: %s\nName: %s\nDate: %s\n\n", pl->pl_title, pl->pl_name, pl->pl_date); if (plot_cur) plot_cur->pl_ccom = cp_kwswitch(CT_VECTOR, pl->pl_ccom); for (v = pl->pl_dvecs; v; v = v->v_next) cp_addkword(CT_VECTOR, v->v_name); cp_addkword(CT_VECTOR, "all"); if ((s = ft_plotabbrev(pl->pl_name)) == NULL) s = "unknown"; do { (void) sprintf(buf, "%s%d", s, plot_num); for (tp = plot_list; tp; tp = tp->pl_next) if (cieq(tp->pl_typename, buf)) { plot_num++; break; } } while (tp); pl->pl_typename = copy(buf); plot_new(pl); cp_addkword(CT_PLOT, buf); pl->pl_ccom = cp_kwswitch(CT_VECTOR, NULL); plot_setcur(pl->pl_typename); } /* Remove a vector from the database, if it is there. */ void vec_remove(const char *name) { struct dvec *ov; for (ov = plot_cur->pl_dvecs; ov; ov = ov->v_next) if (cieq(name, ov->v_name) && (ov->v_flags & VF_PERMANENT)) break; if (!ov) return; ov->v_flags &= ~VF_PERMANENT; /* Remove from the keyword list. */ cp_remkword(CT_VECTOR, name); } /* Get a vector by name. This deals with v(1), etc. almost properly. Also, * it checks for pre-defined vectors. */ struct dvec * vec_fromplot(char *word, struct plot *plot) { struct dvec *d; char buf[BSIZE_SP], buf2[BSIZE_SP], cc, *s; d = findvec(word, plot); if (!d) { (void) strcpy(buf, word); strtolower(buf); d = findvec(buf, plot); } if (!d) { (void) strcpy(buf, word); strtoupper(buf); d = findvec(buf, plot); } /* scanf("%c(%s)" doesn't do what it should do. ) */ if (!d && (sscanf(word, "%c(%s", &cc, buf) == 2) && ((s = strrchr(buf, ')')) != NULL) && (s[1] == '\0')) { *s = '\0'; if (prefix("i(", word) || prefix("I(", word)) { /* Spice dependency... */ (void) sprintf(buf2, "%s#branch", buf); (void) strcpy(buf, buf2); } d = findvec(buf, plot); } return (d); } /* This is the main lookup routine for names. The possible types of names are: * name An ordinary vector. * plot.name A vector from a particular plot. * @device[parm] A device parameter. * @model[parm] A model parameter. * @param A circuit parameter. * For the @ cases, we construct a dvec with length 1 to hold the value. * In the other two cases, either the plot or the name can be "all", a * wildcard. * The vector name may have imbedded dots -- if the first component is a plot * name, it is considered the plot, otherwise the current plot is used. */ #define SPECCHAR '@' struct dvec * vec_get(const char *vec_name) { struct dvec *d, *end = NULL, *newv = NULL; struct plot *pl; char buf[BSIZE_SP], *s, *wd, *word, *whole, *name = NULL, *param; int i = 0; struct variable *vv; wd = word = copy(vec_name); /* Gets mangled below... */ if (strchr(word, '.')) { /* Snag the plot... */ for (i = 0, s = word; *s != '.'; i++, s++) buf[i] = *s; buf[i] = '\0'; if (cieq(buf, "all")) { word = ++s; pl = NULL; /* NULL pl signifies a wildcard. */ } else { for (pl = plot_list; pl && !plot_prefix(buf, pl->pl_typename); pl = pl->pl_next) ; if (pl) { word = ++s; } else { /* This used to be an error... */ pl = plot_cur; } } } else { pl = plot_cur; } if (pl) { d = vec_fromplot(word, pl); if (!d) d = vec_fromplot(word, &constantplot); } else { for (pl = plot_list; pl; pl = pl->pl_next) { if (cieq(pl->pl_typename, "const")) continue; d = vec_fromplot(word, pl); if (d) { if (end) end->v_link2 = d; else newv = d; for (end = d; end->v_link2; end = end->v_link2) ; } } d = newv; if (!d) { fprintf(cp_err, "Error: plot wildcard (name %s) matches nothing\n", word); tfree(wd); /* MW. I don't want core leaks here */ return (NULL); } } if (!d && (*word == SPECCHAR)) { /* This is a special quantity... */ if (ft_nutmeg) { fprintf(cp_err, "Error: circuit parameters only available with spice\n"); tfree(wd); /* MW. Memory leak fixed again */ return (NULL); /* va: use NULL */ } whole = copy(word); name = ++word; for (param = name; *param && (*param != '['); param++) ; if (*param) { *param++ = '\0'; for (s = param; *s && *s != ']'; s++) ; *s = '\0'; } else { param = NULL; } if (ft_curckt) { /* * This is what is done in case of "alter r1 resistance = 1234" * r1 resistance, 0 * if_setparam(ft_curckt->ci_ckt, &dev, param, dv, do_model); */ /* vv = if_getparam (ft_curckt->ci_ckt, &name, param, 0, 0); */ vv = if_getparam(ft_curckt->ci_ckt, &name, param, 0, 0); if (!vv) { tfree(whole); tfree(wd); return (NULL); } } else { fprintf(cp_err, "Error: No circuit loaded.\n"); tfree(whole); tfree(wd); return (NULL); } d = dvec_alloc(copy(whole), /* MW. The same as word before */ SV_NOTYPE, VF_REAL, /* No complex values yet... */ 1, NULL); /* In case the represented variable is a REAL vector this takes * the actual value of the first element of the linked list which * does not make sense. * This is an error. */ /* This will copy the contents of the structure vv in another structure * dvec (FTEDATA.H) that do not have INTEGER so that those parameters * defined as IF_INTEGER are not given their value when using * print @pot[pos_node] * To fix this, it is necessary to define: * OPU( "pos_node", POT_QUEST_POS_NODE, IF_REAL,"Positive node of potenciometer"), * int POTnegNode; // number of negative node of potenciometer (Nodo_3) * case POT_QUEST_POS_NODE: * value->rValue = (double)fast->POTposNode; * return (OK); * Works but with the format 1.00000E0 */ /* We must make a change in format between the data that carries a variable to * put in a dvec. */ /* * #define va_bool va_V.vV_bool * #define va_num va_V.vV_num * #define va_real va_V.vV_real * #define va_string va_V.vV_string * #define va_vlist va_V.vV_list * enum cp_types { * CP_BOOL, * CP_NUM, * CP_REAL, * CP_STRING, * CP_LIST ° }; */ /* The variable is a vector */ if (vv->va_type == CP_LIST) { /* Compute the length of the vector, * used with the parameters of isrc and vsrc */ struct variable *nv; i = 0; for (nv = vv->va_vlist; nv; nv = nv->va_next) i++; dvec_realloc(d, i, NULL); i = 0; for (nv = vv->va_vlist; nv; nv = nv->va_next) d->v_realdata[i++] = nv->va_real; /* To be able to identify the vector to represent * belongs to a special "conunto" and should be printed in a * special way. */ d->v_dims[1] = 1; } else if (vv->va_type == CP_NUM) { /* Variable is an integer */ *d->v_realdata = (double) vv->va_num; } else if (vv->va_type == CP_REAL) { /* Variable is a real */ if (!(vv->va_next)) { /* Only a real data * usually normal */ *d->v_realdata = vv->va_real; } else { /* Real data set * When you print a model @ [all] * Just print numerical values, not the string */ struct variable *nv; /* We go to print the list of values * nv->va_name = Parameter description * nv->va_string = Parameter * nv->va_real= Value */ nv = vv; for (i = 1; ; i++) { switch (nv->va_type) { case CP_REAL: fprintf(stdout, "%s=%g\n", nv->va_name, nv->va_real); break; case CP_STRING: fprintf(stdout, "%s=%s\n", nv->va_name, nv->va_string); break; case CP_NUM: fprintf(stdout, "%s=%d\n", nv->va_name, nv->va_num); break; default: { fprintf(stderr, "ERROR: enumeration value `CP_BOOL' or `CP_LIST' not handled in vec_get\nAborting...\n"); controlled_exit(EXIT_FAILURE); } } nv = nv->va_next; if (!nv) break; } /* To distinguish those does not take anything for print screen to * make a print or M1 @ @ M1 [all] leaving only the correct data * and not the last */ d->v_rlength = 1; } } free_struct_variable(vv); tfree(wd); vec_new(d); tfree(whole); return (d); } tfree(wd); return (sortvecs(d)); } /* Execute the commands for a plot. This is done whenever a plot becomes * the current plot. */ void plot_docoms(wordlist *wl) { bool inter; inter = cp_interactive; cp_interactive = FALSE; while (wl) { (void) cp_evloop(wl->wl_word); wl = wl->wl_next; } cp_resetcontrol(); cp_interactive = inter; } /* Create a copy of a vector. */ struct dvec * vec_copy(struct dvec *v) { struct dvec *nv; int i; if (!v) return (NULL); nv = dvec_alloc(copy(v->v_name), v->v_type, v->v_flags & ~VF_PERMANENT, v->v_length, NULL); if (isreal(v)) memcpy(nv->v_realdata, v->v_realdata, sizeof(double) * (size_t) v->v_length); else memcpy(nv->v_compdata, v->v_compdata, sizeof(ngcomplex_t) * (size_t) v->v_length); nv->v_minsignal = v->v_minsignal; nv->v_maxsignal = v->v_maxsignal; nv->v_gridtype = v->v_gridtype; nv->v_plottype = v->v_plottype; /* Modified to copy the rlength of origin to destination vecor * instead of always putting it to 0. * As when it comes to make a print does not leave M1 @ @ M1 = 0.0, * to do so in the event that rlength = 0 not print anything on screen * nv-> v_rlength = 0; * Default -> v_rlength = 0 and only if you come from a print or M1 @ * @ M1 [all] rlength = 1, after control is one of * if (v-> v_rlength == 0) com_print (wordlist * wl) */ nv->v_rlength = v->v_rlength; nv->v_outindex = 0; /*XXX???*/ nv->v_linestyle = 0; /*XXX???*/ nv->v_color = 0; /*XXX???*/ nv->v_defcolor = v->v_defcolor; nv->v_numdims = v->v_numdims; for (i = 0; i < v->v_numdims; i++) nv->v_dims[i] = v->v_dims[i]; nv->v_plot = v->v_plot; nv->v_next = NULL; nv->v_link2 = NULL; nv->v_scale = v->v_scale; return (nv); } /* Create a new plot structure. This just fills in the typename and sets up * the ccom struct. */ struct plot * plot_alloc(char *name) { struct plot *pl = TMALLOC(struct plot, 1), *tp; char *s; struct ccom *ccom; char buf[BSIZE_SP]; ZERO(pl, struct plot); if ((s = ft_plotabbrev(name)) == NULL) s = "unknown"; do { (void) sprintf(buf, "%s%d", s, plot_num); for (tp = plot_list; tp; tp = tp->pl_next) if (cieq(tp->pl_typename, buf)) { plot_num++; break; } } while (tp); pl->pl_typename = copy(buf); cp_addkword(CT_PLOT, buf); /* va: create a new, empty keyword tree for class CT_VECTOR, s=old tree */ ccom = cp_kwswitch(CT_VECTOR, NULL); cp_addkword(CT_VECTOR, "all"); pl->pl_ccom = cp_kwswitch(CT_VECTOR, ccom); /* va: keyword tree is old tree again, new tree is linked to pl->pl_ccom */ return (pl); } /* Stick a new vector in the proper place in the plot list. */ void vec_new(struct dvec *d) { #ifdef FTEDEBUG if (ft_vecdb) fprintf(cp_err, "new vector %s\n", d->v_name); #endif /* Note that this can't happen. */ if (plot_cur == NULL) { fprintf(cp_err, "vec_new: Internal Error: no cur plot\n"); } else { plot_cur->pl_lookup_valid = FALSE; if ((d->v_flags & VF_PERMANENT) && (plot_cur->pl_scale == NULL)) { plot_cur->pl_scale = d; } if (!d->v_plot) { d->v_plot = plot_cur; } } /* This code appears to be a patch for incorrectly specified vectors */ if (d->v_numdims < 1) { d->v_numdims = 1; d->v_dims[0] = d->v_length; } { /* Make this vector the first plot vector and link the old first plot * vector via its next pointer */ struct plot *v_plot = d->v_plot; d->v_next = v_plot->pl_dvecs; v_plot->pl_dvecs = d; } } /* Because of the way that all vectors, including temporary vectors, * are linked together under the current plot, they can often be * left lying around. This gets rid of all vectors that don't have * the permanent flag set. Also, for the remaining vectors, it * clears the v_link2 pointer. */ void vec_gc(void) { struct dvec *d, *nd; struct plot *pl; for (pl = plot_list; pl; pl = pl->pl_next) for (d = pl->pl_dvecs; d; d = nd) { nd = d->v_next; if (!(d->v_flags & VF_PERMANENT)) { if (ft_vecdb) fprintf(cp_err, "vec_gc: throwing away %s.%s\n", pl->pl_typename, d->v_name); vec_free(d); } } for (pl = plot_list; pl; pl = pl->pl_next) for (d = pl->pl_dvecs; d; d = d->v_next) d->v_link2 = NULL; } /* Free a dvector. This is sort of a pain because we also have to make sure * that it has been unlinked from its plot structure. If the name of the * vector is NULL, then we have already freed it so don't try again. (This * situation can happen with user-defined functions.) Note that this depends * on our having tfree set its argument to NULL. Note that if all the vectors * in a plot are gone it stays around... */ void vec_free_x(struct dvec *v) { struct plot *pl; if ((v == NULL) || (v->v_name == NULL)) return; pl = v->v_plot; /* Now we have to take this dvec out of the plot list. */ if (pl != NULL) { pl->pl_lookup_valid = FALSE; if (pl->pl_dvecs == v) { pl->pl_dvecs = v->v_next; } else { struct dvec *lv = pl->pl_dvecs; if (lv) for (; lv->v_next; lv = lv->v_next) if (lv->v_next == v) break; if (lv && lv->v_next) lv->v_next = v->v_next; else fprintf(cp_err, "vec_free: Internal Error: %s not in plot\n", v->v_name); } if (pl->pl_scale == v) { if (pl->pl_dvecs) pl->pl_scale = pl->pl_dvecs; /* Random one... */ else pl->pl_scale = NULL; } } dvec_free(v); } /* * return TRUE if every vector element is zero */ bool vec_iszero(struct dvec *v) { int i; for (; v; v = v->v_link2) if (isreal(v)) for (i = 0; i < v->v_length; i++) { if (v->v_realdata[i] != 0.0) return FALSE; } else for (i = 0; i < v->v_length; i++) { if (realpart(v->v_compdata[i]) != 0.0) return FALSE; if (imagpart(v->v_compdata[i]) != 0.0) return FALSE; } return TRUE; } /* This is something we do in a few places... Since vectors get copied a lot, * we can't just compare pointers to tell if two vectors are 'really' the same. */ bool vec_eq(struct dvec *v1, struct dvec *v2) { char *s1, *s2; bool rtn; if (v1->v_plot != v2->v_plot) return (FALSE); s1 = vec_basename(v1); s2 = vec_basename(v2); if (cieq(s1, s2)) rtn = TRUE; else rtn = FALSE; tfree(s1); tfree(s2); return rtn; } /* Return the name of the vector with the plot prefix stripped off. This * is no longer trivial since '.' doesn't always mean 'plot prefix'. */ char * vec_basename(struct dvec *v) { char buf[BSIZE_SP], *t, *s; if (strchr(v->v_name, '.')) { if (cieq(v->v_plot->pl_typename, v->v_name)) (void) strcpy(buf, v->v_name + strlen(v->v_name) + 1); else (void) strcpy(buf, v->v_name); } else { (void) strcpy(buf, v->v_name); } strtolower(buf); s = skip_ws(buf); for (t = s; *t; t++) ; while ((t > s) && isspace_c(t[-1])) *--t = '\0'; return (copy(s)); } /* get address of plot named 'name' */ struct plot * get_plot(char* name) { struct plot *pl; for (pl = plot_list; pl; pl = pl->pl_next) if (plot_prefix(name, pl->pl_typename)) return pl; fprintf(cp_err, "Error: no such plot named %s\n", name); return NULL; } /* Make a plot the current one. This gets called by cp_usrset() when one * does a 'set curplot = name'. * va: ATTENTION: has unlinked old keyword-class-tree from keywords[CT_VECTOR] * (potentially memory leak) */ void plot_setcur(char *name) { struct plot *pl; if (cieq(name, "new")) { pl = plot_alloc("unknown"); pl->pl_title = copy("Anonymous"); pl->pl_name = copy("unknown"); pl->pl_date = copy(datestring()); plot_new(pl); plot_cur = pl; return; } /* plots are listed in pl in reverse order */ else if (cieq(name, "previous")) { if (plot_cur->pl_next) plot_cur = plot_cur->pl_next; else fprintf(cp_err, "Warning: Switching to previous plot not possible, stay with current plot (%s)\n", plot_cur->pl_typename); return; } else if (cieq(name, "next")) { struct plot *prev_pl = NULL; for (pl = plot_list; pl; pl = pl->pl_next) { if (pl == plot_cur) break; prev_pl = pl; } if (!prev_pl) { fprintf(cp_err, "Warning: Switching to next plot not possible, stay with current plot (%s)\n", plot_cur->pl_typename); return; } plot_cur = prev_pl; return; } pl = get_plot(name); if (!pl) return; /* va: we skip cp_kwswitch, because it confuses the keyword-tree management for * repeated op-commands. When however cp_kwswitch is necessary for other * reasons, we should hold the original keyword table pointer in an * permanent variable, since it will lost here, and can never tfree'd. if (plot_cur) { plot_cur->pl_ccom = cp_kwswitch(CT_VECTOR, pl->pl_ccom); } */ plot_cur = pl; } /* Add a plot to the plot list. This is different from plot_add() in that * all this does is update the list and the variable $plots. */ void plot_new(struct plot *pl) { pl->pl_next = plot_list; plot_list = pl; } /* This routine takes a multi-dimensional vector, treats it as a * group of 2-dimensional matrices and transposes each matrix. * The data array is replaced with a new one that has the elements * in the proper order. Otherwise the transposition is done in place. */ void vec_transpose(struct dvec *v) { int dim0, dim1, nummatrices; int i, j, k, joffset, koffset, blocksize; double *newreal, *oldreal; ngcomplex_t *newcomp, *oldcomp; if (v->v_numdims < 2 || v->v_length <= 1) return; dim0 = v->v_dims[v->v_numdims-1]; dim1 = v->v_dims[v->v_numdims-2]; v->v_dims[v->v_numdims-1] = dim1; v->v_dims[v->v_numdims-2] = dim0; /* Assume length is a multiple of each dimension size. * This may not be safe, in which case a test should be * made that the length is the product of all the dimensions. */ blocksize = dim0*dim1; nummatrices = v->v_length / blocksize; /* Note: * olda[i,j] is at data[i*dim0+j] * newa[j,i] is at data[j*dim1+i] * where j is in [0, dim0-1] and i is in [0, dim1-1] * Since contiguous data in the old array is scattered in the new array * we can't use memcpy :(. There is probably a BLAS2 function for this * though. The formulation below gathers scattered old data into * consecutive new data. */ if (isreal(v)) { newreal = TMALLOC(double, v->v_length); oldreal = v->v_realdata; koffset = 0; for (k = 0; k < nummatrices; k++) { joffset = 0; for (j = 0; j < dim0; j++) { for (i = 0; i < dim1; i++) { newreal[ koffset + joffset + i ] = oldreal[ koffset + i*dim0 + j ]; } joffset += dim1; /* joffset = j*dim0 */ } koffset += blocksize; /* koffset = k*blocksize = k*dim0*dim1 */ } dvec_realloc(v, v->v_length, newreal); } else { newcomp = TMALLOC(ngcomplex_t, v->v_length); oldcomp = v->v_compdata; koffset = 0; for (k = 0; k < nummatrices; k++) { joffset = 0; for (j = 0; j < dim0; j++) { for (i = 0; i < dim1; i++) { newcomp[ koffset + joffset + i ] = oldcomp[ koffset + i*dim0 + j ]; } joffset += dim1; /* joffset = j*dim0 */ } koffset += blocksize; /* koffset = k*blocksize = k*dim0*dim1 */ } dvec_realloc(v, v->v_length, newcomp); } } /* This routine takes a multi-dimensional vector and turns it into a family * of 1-d vectors, linked together with v_link2. It is here so that plot * can do intelligent things. */ struct dvec * vec_mkfamily(struct dvec *v) { int size, numvecs, i, count[MAXDIMS]; struct dvec *vecs, *d, **t; char buf2[BSIZE_SP]; if (v->v_numdims < 2) return (v); size = v->v_dims[v->v_numdims - 1]; for (i = 0, numvecs = 1; i < v->v_numdims - 1; i++) numvecs *= v->v_dims[i]; for (i = 0; i < MAXDIMS; i++) count[i] = 0; for (t = &vecs, i = 0; i < numvecs; i++) { indexstring(count, v->v_numdims - 1, buf2); d = dvec_alloc(tprintf("%s%s", v->v_name, buf2), v->v_type, v->v_flags, size, NULL); d->v_minsignal = v->v_minsignal; d->v_maxsignal = v->v_maxsignal; d->v_gridtype = v->v_gridtype; d->v_plottype = v->v_plottype; d->v_scale = v->v_scale; /* Don't copy the default color, since there will be many * of these things... */ d->v_numdims = 1; d->v_dims[0] = size; if (isreal(v)) { memcpy(d->v_realdata, v->v_realdata + (size_t) size * i, (size_t) size * sizeof(double)); } else { memcpy(d->v_compdata, v->v_compdata + (size_t) size * i, (size_t) size * sizeof(ngcomplex_t)); } /* Add one to the counter. */ (void) incindex(count, v->v_numdims - 1, v->v_dims, v->v_numdims); *t = d; t = &(d->v_link2); } for (d = vecs; d; d = d->v_link2) vec_new(d); return (vecs); } /* This function will match "op" with "op1", but not "op1" with "op12". */ bool plot_prefix(char *pre, char *str) { if (!*pre) return (TRUE); while (*pre && *str) { if (*pre != *str) break; pre++; str++; } if (*pre || (*str && isdigit_c(pre[-1]))) return (FALSE); else return (TRUE); } tmpk8ny_4pz/src/frontend/diff.h0000644000175000017500000000027613546075722016654 0ustar carstencarsten/************* * Header file for diff.c * 1999 E. Rouat ************/ #ifndef ngspice_DIFF_H #define ngspice_DIFF_H #include "ngspice/wordlist.h" void com_diff(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/arg.c0000644000175000017500000000451413546075722016507 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Jeffrey M. Hsu **********/ /* This files contains the routines to evalute arguments to a command and prompt the user if necessary. */ #include "ngspice/ngspice.h" #include "ngspice/fteinput.h" #include "ngspice/cpdefs.h" #include "ngspice/fteext.h" #include "arg.h" #include "variable.h" static void common(char *string, struct wordlist *wl, struct comm *command); /* returns a private copy of the string */ char * prompt(FILE *fp) { char buf[100]; char *p; size_t n; if (!fgets(buf, sizeof(buf), fp)) return NULL; n = strlen(buf) - 1; buf[n] = '\0'; /* fgets leaves the \n */ p = TMALLOC(char, n + 1); strcpy(p, buf); return p; } int countargs(wordlist *wl) { int number = 0; wordlist *w; for (w = wl; w; w = w->wl_next) number++; return (number); } wordlist * process(wordlist *wlist) { wlist = cp_variablesubst(wlist); wlist = cp_bquote(wlist); wlist = cp_doglob(wlist); return (wlist); } void arg_print(wordlist *wl, struct comm *command) { common("which variable", wl, command); } void arg_plot(wordlist *wl, struct comm *command) { common("which variable", wl, command); } void arg_load(wordlist *wl, struct comm *command) { /* just call com_load */ command->co_func(wl); } void arg_let(wordlist *wl, struct comm *command) { common("which vector", wl, command); } void arg_set(wordlist *wl, struct comm *command) { common("which variable", wl, command); } void arg_display(wordlist *wl, struct comm *command) { NG_IGNORE(wl); NG_IGNORE(command); /* just return; display does the right thing */ } /* a common prompt routine */ static void common(char *string, struct wordlist *wl, struct comm *command) { struct wordlist *w; char *buf; if (!countargs(wl)) { outmenuprompt(string); if ((buf = prompt(cp_in)) == NULL) /* prompt aborted */ return; /* don't execute command */ /* do something with the wordlist */ w = wl_cons(buf, NULL); w = process(w); /* O.K. now call fn */ command->co_func(w); } } void outmenuprompt(char *string) { fprintf(cp_out, "%s: ", string); fflush(cp_out); return; } tmpk8ny_4pz/src/frontend/inventory.c0000644000175000017500000000213313546075722017766 0ustar carstencarsten/********** Copyright 2010 Paolo Nenzi. All rights reserved. Author: 2010 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/optdefs.h" #include "ngspice/dvec.h" #include "ftehelp.h" #include "ngspice/hlpdefs.h" #include "circuits.h" #include "where.h" /* The inventory command shows the number of instances for each device in the current circuit. */ void com_inventory(wordlist *wl) { CKTcircuit *circuit = NULL; STATistics *stat = NULL; STATdevList *devList = NULL; int k; NG_IGNORE(wl); if (!ft_curckt) { fprintf(cp_err, "There is no current circuit\n"); return; } circuit = ft_curckt->ci_ckt; stat = circuit->CKTstat; devList = stat->STATdevNum; out_init(); out_send("Circuit Inventory\n\n"); for (k = 0; k < ft_sim->numDevices; k++) if (ft_sim->devices[k]) out_printf("%s: %d\n", ft_sim->devices[k]->name, devList[k].instNum); out_send("\n"); } tmpk8ny_4pz/src/frontend/com_ghelp.h0000644000175000017500000000014113546075722017670 0ustar carstencarsten#ifndef ngspice_COM_GHELP_H #define ngspice_COM_GHELP_H void com_ghelp(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/inpcom.h0000644000175000017500000000020713546075722017223 0ustar carstencarsten/************* * Header file for inpcom.c * 1999 E. Rouat ************/ #ifndef ngspice_INPCOM_H #define ngspice_INPCOM_H #endif tmpk8ny_4pz/src/frontend/measure.c0000644000175000017500000003764213546075722017407 0ustar carstencarsten/* Routines to evaluate the .measure cards. Entry point is function do_measure(), called by fcn dosim() from runcoms.c:335, after simulation is finished. In addition it contains the fcn com_meas(), which provide the interactive 'meas' command. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "rawfile.h" #include "variable.h" #include "numparam/numpaif.h" #include "ngspice/missing_math.h" #include "com_measure2.h" #include "com_let.h" #include "com_commands.h" #include "com_display.h" static wordlist *measure_parse_line(char *line); extern bool ft_batchmode; extern bool rflag; /* measure in interactive mode: meas command inside .control ... .endc loop or manually entered. meas has to be followed by the standard tokens (see measure_extract_variables()). The result is put into a vector with name "result" */ void com_meas(wordlist *wl) { /* wl: in, input line of meas command */ char *line_in, *outvar; wordlist *wl_count, *wl_let; char *vec_found, *token, *equal_ptr; wordlist *wl_index; struct dvec *d; int err = 0; int fail; double result = 0; if (!wl) { com_display(NULL); return; } wl_count = wl; /* check each wl entry, if it contain '=' and if the following token is a single valued vector. If yes, replace this vector by its value. Vectors may stem from other meas commands, or be generated elsewhere within the .control .endc script. All other right hand side vectors are treated in com_measure2.c. */ wl_index = wl; while (wl_index) { token = wl_index->wl_word; /* find the vector vec_found, next token after each '=' sign. May be in the next wl_word */ if (token[strlen(token) - 1] == '=') { wl_index = wl_index->wl_next; vec_found = wl_index->wl_word; /* token may be already a value, maybe 'LAST', which we have to keep, or maybe a vector */ if (!cieq(vec_found, "LAST")) { INPevaluate(&vec_found, &err, 1); /* if not a valid number */ if (err) { /* check if vec_found is a valid vector */ d = vec_get(vec_found); /* Only if we have a single valued vector, replacing of the rigt hand side does make sense */ if (d && (d->v_length == 1) && (d->v_numdims == 1)) { /* get its value */ wl_index->wl_word = tprintf("%e", d->v_realdata[0]); tfree(vec_found); } } } } /* may be inside the same wl_word */ else if ((equal_ptr = strchr(token, '=')) != NULL) { vec_found = equal_ptr + 1; if (!cieq(vec_found, "LAST")) { INPevaluate(&vec_found, &err, 1); if (err) { d = vec_get(vec_found); /* Only if we have a single valued vector, replacing of the rigt hand side does make sense */ if (d && (d->v_length == 1) && (d->v_numdims == 1)) { int lhs_len = (int)(equal_ptr - token); wl_index->wl_word = tprintf("%.*s=%e", lhs_len, token, d->v_realdata[0]); tfree(token); } } } } else { ; // nothing } wl_index = wl_index->wl_next; } line_in = wl_flatten(wl); /* get output var name */ wl_count = wl_count->wl_next; if (!wl_count) { fprintf(stdout, " meas %s failed!\n" " unspecified output var name\n\n", line_in); tfree(line_in); return; } outvar = wl_count->wl_word; fail = get_measure2(wl, &result, NULL, FALSE); if (fail) { fprintf(stdout, " meas %s failed!\n\n", line_in); tfree(line_in); return; } wl_let = wl_cons(tprintf("%s = %e", outvar, result), NULL); com_let(wl_let); wl_free(wl_let); tfree(line_in); } static bool chkAnalysisType(char *an_type) { /* only support tran, dc, ac, sp analysis type for now */ if (strcmp(an_type, "tran") != 0 && strcmp(an_type, "ac") != 0 && strcmp(an_type, "dc") != 0 && strcmp(an_type, "sp") != 0) return FALSE; else return TRUE; } /* Gets pointer to double value after 'xxx=' and advances pointer of *line. On error returns FALSE. */ static bool get_double_value( char **line, /*in|out: pointer to line to be parsed */ char *name, /*in: xxx e.g. 'val' from 'val=0.5' */ double *value, /*out: return value (e.g. 0.5) from 'val=0.5'*/ bool just_chk_meas /* in: just check measurement if true */ ) { char *token = gettok(line); bool return_val = TRUE; char *equal_ptr, *junk; int err = 0; if (name && (strncmp(token, name, strlen(name)) != 0)) { if (just_chk_meas != TRUE) fprintf(cp_err, "Error: syntax error for measure statement; expecting next field to be '%s'.\n", name); return_val = FALSE; } else { /* see if '=' is last char of current token -- implies we need to read value in next token */ if (token[strlen(token) - 1] == '=') { txfree(token); junk = token = gettok(line); *value = INPevaluate(&junk, &err, 1); } else { if ((equal_ptr = strchr(token, '=')) != NULL) { equal_ptr += 1; *value = INPevaluate(&equal_ptr, &err, 1); } else { if (just_chk_meas != TRUE) fprintf(cp_err, "Error: syntax error for measure statement; missing '='!\n"); return_val = FALSE; } } if (err) { if (just_chk_meas != TRUE) fprintf(cp_err, "Error: Bad value.\n"); return_val = FALSE; } } txfree(token); return return_val; } /* Entry point for .meas evaluation. Called in fcn dosim() from runcoms.c:335, after simulation is finished with chk_only set to FALSE. Called from fcn check_autostop(), with chk_only set to TRUE (no printouts, no params set). This function returns TRUE if all measurements are ready and complete; FALSE otherwise. If called with chk_only, we can exit early if we fail a test in order to reduce execution time. */ bool do_measure( char *what, /*in: analysis type*/ bool chk_only /*in: TRUE if checking for "autostop", FALSE otherwise*/ ) { struct card *meas_card, *meas_results = NULL, *end = NULL, *newcard; char *line, *an_name, *an_type, *resname, *meastype, *str_ptr, out_line[1000]; int ok = 0; int fail; int num_failed = 0; double result = 0; bool first_time = TRUE; bool measures_passed; wordlist *measure_word_list; int precision = measure_get_precision(); #ifdef HAS_PROGREP if (!chk_only) SetAnalyse("meas", 0); #endif an_name = copy(what); /* analysis type, e.g. "tran" */ strtolower(an_name); measure_word_list = NULL; measures_passed = TRUE; /* don't allow .meas if batchmode is set by -b and -r rawfile given */ if (ft_batchmode && rflag) { fprintf(cp_err, "\nNo .measure possible in batch mode (-b) with -r rawfile set!\n"); fprintf(cp_err, "Remove rawfile and use .print or .plot or\n"); fprintf(cp_err, "select interactive mode (optionally with .control section) instead.\n\n"); return (measures_passed); } /* don't allow autostop if no .meas commands are given in the input file */ if ((cp_getvar("autostop", CP_BOOL, NULL, 0)) && (ft_curckt->ci_meas == NULL)) { fprintf(cp_err, "\nWarning: No .meas commands found!\n"); fprintf(cp_err, " Option autostop is not available, ignored!\n\n"); cp_remvar("autostop"); return (FALSE); } /* Evaluating the linked list of .meas cards, assembled from the input deck by fcn inp_spsource() in inp.c:575. A typical .meas card will contain: parameter value nameof card .meas(ure) analysis type tran only tran available currently result name myout defined by user measurement type trig|delay|param|expr|avg|mean|max|min|rms|integ(ral)|when The measurement type determines how to continue the .meas card. param|expr are skipped in first pass through .meas cards and are treated in second pass, all others are treated in fcn get_measure2() (com_measure2.c). */ /* first pass through .meas cards: evaluate everything except param|expr */ for (meas_card = ft_curckt->ci_meas; meas_card != NULL; meas_card = meas_card->nextcard) { line = meas_card->line; line = nexttok(line); /* discard .meas */ an_type = gettok(&line); resname = gettok(&line); meastype = gettok(&line); if (chkAnalysisType(an_type) != TRUE) { if (!chk_only) { fprintf(cp_err, "Error: unrecognized analysis type '%s' for the following .meas statement on line %d:\n", an_type, meas_card->linenum); fprintf(cp_err, " %s\n", meas_card->line); } txfree(an_type); txfree(resname); txfree(meastype); continue; } /* print header before evaluating first .meas line */ else if (first_time) { first_time = FALSE; if (!chk_only && strcmp(an_type, "tran") == 0) { fprintf(stdout, "\n Measurements for Transient Analysis\n\n"); } } /* skip param|expr measurement types for now -- will be done after other measurements */ if (strncmp(meastype, "param", 5) == 0 || strncmp(meastype, "expr", 4) == 0) { txfree(an_type); txfree(resname); txfree(meastype); continue; } /* skip .meas line, if analysis type from line and name of analysis performed differ */ if (strcmp(an_name, an_type) != 0) { txfree(an_type); txfree(resname); txfree(meastype); continue; } /* New way of processing measure statements using common code in fcn get_measure2() (com_measure2.c)*/ out_line[0] = '\0'; measure_word_list = measure_parse_line(meas_card->line); if (measure_word_list) { fail = get_measure2(measure_word_list, &result, out_line, chk_only); if (fail) { measures_passed = FALSE; if (!chk_only) fprintf(stderr, " %s failed!\n\n", meas_card->line); num_failed++; if (chk_only) { /* added for speed - cleanup last parse and break */ txfree(an_type); txfree(resname); txfree(meastype); wl_free(measure_word_list); break; } } else { if (!chk_only) nupa_add_param(resname, result); } wl_free(measure_word_list); } else { measures_passed = FALSE; num_failed++; } if (!chk_only) { newcard = TMALLOC(struct card, 1); newcard->line = copy(out_line); newcard->nextcard = NULL; if (meas_results == NULL) { meas_results = end = newcard; } else { end->nextcard = newcard; end = newcard; } } txfree(an_type); txfree(resname); txfree(meastype); } /* end of for loop (first pass through .meas lines) */ if (chk_only) { tfree(an_name); return (measures_passed); } /* second pass through .meas cards: now do param|expr .meas statements */ newcard = meas_results; for (meas_card = ft_curckt->ci_meas; meas_card != NULL; meas_card = meas_card->nextcard) { line = meas_card->line; line = nexttok(line); /* discard .meas */ an_type = gettok(&line); resname = gettok(&line); meastype = gettok(&line); if (chkAnalysisType(an_type) != TRUE) { if (!chk_only) { fprintf(cp_err, "Error: unrecognized analysis type '%s' for the following .meas statement on line %d:\n", an_type, meas_card->linenum); fprintf(cp_err, " %s\n", meas_card->line); } txfree(an_type); txfree(resname); txfree(meastype); continue; } if (strcmp(an_name, an_type) != 0) { txfree(an_type); txfree(resname); txfree(meastype); continue; } if (strncmp(meastype, "param", 5) != 0 && strncmp(meastype, "expr", 4) != 0) { if (!chk_only) fprintf(stdout, "%s", newcard->line); end = newcard; newcard = newcard->nextcard; txfree(end->line); txfree(end); txfree(an_type); txfree(resname); txfree(meastype); continue; } if (!chk_only) fprintf(stdout, "%-20s=", resname); if (!chk_only) { ok = nupa_eval(meas_card); if (ok) { str_ptr = strstr(meas_card->line, meastype); if (!get_double_value(&str_ptr, meastype, &result, chk_only)) { if (!chk_only) fprintf(stdout, " failed\n"); } else { if (!chk_only) fprintf(stdout, " %.*e\n", precision, result); nupa_add_param(resname, result); } } else { if (!chk_only) fprintf(stdout, " failed\n"); } } txfree(an_type); txfree(resname); txfree(meastype); } if (!chk_only) fprintf(stdout, "\n"); txfree(an_name); fflush(stdout); return(measures_passed); } /* called from dctran.c:470, if timepoint is accepted. Returns TRUE if measurement (just a check, no output) has been successful. If TRUE is returned, transient simulation is stopped. Returns TRUE if "autostop" has been set as an option and if do_measure passes all tests and thereby returns TRUE. 'what' is set to "tran". */ bool check_autostop(char* what) { bool flag = FALSE; if (cp_getvar("autostop", CP_BOOL, NULL, 0)) flag = do_measure(what, TRUE); return flag; } /* parses the .meas line into a wordlist (without leading .meas) */ static wordlist * measure_parse_line(char *line) { size_t len; /* length of string */ wordlist *wl; /* build a word list - head of list */ wordlist *new_item; /* single item of a list */ char *item; /* parsed item */ char *long_str; /* concatenated string */ char *extra_item; /* extra item */ wl = NULL; line = nexttok(line); do { item = gettok(&line); if (!(item)) break; len = strlen(item); if (item[len-1] == '=') { /* We can't end on an equal append the next piece */ extra_item = gettok(&line); if (!(extra_item)) break; len += strlen(extra_item) + 2; long_str = TMALLOC(char, len); sprintf(long_str, "%s%s", item, extra_item); txfree(item); txfree(extra_item); item = long_str; } new_item = wl_cons(item, NULL); wl = wl_append(wl, new_item); } while (line && *line); return (wl); } tmpk8ny_4pz/src/frontend/com_state.c0000644000175000017500000000144113546075722017710 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/bool.h" #include "ngspice/wordlist.h" #include "ngspice/ftedefs.h" #include "ngspice/inpdefs.h" #include "circuits.h" #include "com_state.h" #include "ngspice/cpextern.h" #include "plotting/plotting.h" void com_state(wordlist *wl) { NG_IGNORE(wl); if (!ft_curckt) { fprintf(cp_err, "Error: no circuit loaded.\n"); return; } fprintf(cp_out, "Current circuit: %s\n", ft_curckt->ci_name); if (!ft_curckt->ci_inprogress) { fprintf(cp_out, "No run in progress.\n"); return; } fprintf(cp_out, "Type of run: %s\n", plot_cur->pl_name); fprintf(cp_out, "Number of points so far: %d\n", plot_cur->pl_scale->v_length); fprintf(cp_out, "(That's all this command does so far)\n"); } tmpk8ny_4pz/src/frontend/variable.c0000644000175000017500000007167613546075722017540 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/bool.h" #include "ngspice/wordlist.h" #include "ngspice/defines.h" #include "ngspice/macros.h" #include "ngspice/cpdefs.h" #include "ngspice/memory.h" #include "ngspice/inpdefs.h" #include "ngspice/fteext.h" #include "circuits.h" #include "com_history.h" #include "quote.h" #include "ngspice/cpextern.h" #include "variable.h" bool cp_noglob = TRUE; bool cp_nonomatch = FALSE; bool cp_noclobber = FALSE; bool cp_ignoreeof = FALSE; bool cp_echo = FALSE; /* CDHW */ struct variable *variables = NULL; wordlist * cp_varwl(struct variable *var) { wordlist *wl = NULL, *w, *wx = NULL; char *buf; struct variable *vt; switch (var->va_type) { case CP_BOOL: /* Can't ever be FALSE. */ buf = copy(var->va_bool ? "TRUE" : "FALSE"); break; case CP_NUM: buf = tprintf("%d", var->va_num); break; case CP_REAL: /* This is a case where printnum isn't too good... */ buf = tprintf("%G", var->va_real); break; case CP_STRING: buf = cp_unquote(var->va_string); break; case CP_LIST: /* The tricky case. */ for (vt = var->va_vlist; vt; vt = vt->va_next) { w = cp_varwl(vt); if (wl == NULL) { wl = wx = w; } else { wx->wl_next = w; w->wl_prev = wx; wx = w; } } return (wl); default: fprintf(cp_err, "cp_varwl: Internal Error: bad variable type %d\n", var->va_type); return (NULL); } return wl_cons(buf, NULL); } /* Set a variable. */ void cp_vset(char *varname, enum cp_types type, void *value) { struct variable *v, *u, *w; int i; bool alreadythere = FALSE, v_free = FALSE; char *copyvarname; /* varname = cp_unquote(varname); DG: Memory leak old varname is lost*/ copyvarname = cp_unquote(varname); w = NULL; for (v = variables; v; v = v->va_next) { if (eq(copyvarname, v->va_name)) { alreadythere = TRUE; break; } w = v; } if (alreadythere) { if (v->va_type == CP_LIST) free_struct_variable(v->va_vlist); if (v->va_type == CP_STRING) tfree(v->va_string); } if (!v) { v = var_alloc(copy(copyvarname), NULL); v_free = TRUE; } switch (type) { case CP_BOOL: if (* ((bool *) value) == FALSE) { cp_remvar(copyvarname); if (v_free) { tfree(v->va_name); tfree(v); } tfree(copyvarname); return; } else { var_set_bool(v, TRUE); } break; case CP_NUM: var_set_num(v, * (int *) value); break; case CP_REAL: var_set_real(v, * (double *) value); break; case CP_STRING: var_set_string(v, copy((char*) value)); break; case CP_LIST: var_set_vlist(v, (struct variable *) value); break; default: fprintf(cp_err, "cp_vset: Internal Error: bad variable type %d.\n", type); tfree(copyvarname); return; } /* Now, see if there is anything interesting going on. We * recognise these special variables: noglob, nonomatch, history, * echo, noclobber, prompt, and verbose. cp_remvar looks for these * variables too. The host program will get any others. */ if (eq(copyvarname, "noglob")) cp_noglob = TRUE; else if (eq(copyvarname, "nonomatch")) cp_nonomatch = TRUE; else if (eq(copyvarname, "history") && (type == CP_NUM)) cp_maxhistlength = v->va_num; else if (eq(copyvarname, "history") && (type == CP_REAL)) cp_maxhistlength = (int)floor(v->va_real + 0.5); else if (eq(copyvarname, "noclobber")) cp_noclobber = TRUE; else if (eq(varname, "echo")) /*CDHW*/ cp_echo = TRUE; /*CDHW*/ else if (eq(copyvarname, "prompt") && (type == CP_STRING)) cp_promptstring = v->va_string; else if (eq(copyvarname, "ignoreeof")) cp_ignoreeof = TRUE; else if (eq(copyvarname, "cpdebug")) { cp_debug = TRUE; #ifndef CPDEBUG fprintf(cp_err, "Warning: program not compiled with cshpar debug messages\n"); #endif } switch (i = cp_usrset(v, TRUE)) { case US_OK: /* Normal case. */ if (!alreadythere) { v->va_next = variables; variables = v; } else if (v_free) free_struct_variable(v); break; case US_DONTRECORD: /* 'curplot' 'curplotname' 'curplottitle' 'curplotdate' */ /* Do nothing... */ if (alreadythere) { fprintf(cp_err, "cp_vset: Internal Error: " "%s already there, but 'dont record'\n", v->va_name); } if (v_free) free_struct_variable(v); break; case US_READONLY: /* 'plots' and any var in plot_cur->pl_env */ fprintf(cp_err, "Error: %s is a read-only variable.\n", v->va_name); if (alreadythere) fprintf(cp_err, "cp_vset: Internal Error: " "it was already there too!!\n"); break; case US_SIMVAR: /* variables processed by if_option(ft_curckt->ci_ckt, ...) */ if (alreadythere) { /* somehow it got into the front-end list of variables */ if (w) { w->va_next = v->va_next; } else { variables = v->va_next; } } alreadythere = FALSE; if (ft_curckt) { for (u = ft_curckt->ci_vars; u; u = u->va_next) if (eq(copyvarname, u->va_name)) { alreadythere = TRUE; break; } if (!alreadythere) { v->va_next = ft_curckt->ci_vars; ft_curckt->ci_vars = v; } else { if (u->va_type == CP_STRING) tfree(u->va_string); else if (u->va_type == CP_LIST) tfree(u->va_vlist); u->va_V = v->va_V; u->va_type = v->va_type; /* va_name is the same string */ tfree(u->va_name); u->va_name = v->va_name; /* va_next left unchanged */ tfree(v); } } break; case US_NOSIMVAR: /* variables processed by if_option(NULL, ...) */ /* What do you do? */ free_struct_variable(v); break; default: fprintf(cp_err, "cp_vset: Internal Error: bad US val %d\n", i); break; } tfree(copyvarname); } /* Read a wordlist, e.g. from the options or set commands e.g. set myvar=myval or set myvar="myval" or myvar=( "myval1" myval2 ) or set myvar1=myval1 myvar2=myval2 myvar3="myval3" Separate into name and value(s) Generate variables (real, string or list) Value in double quotes will always become string variable. Without quotes tokens like 2N5401_C will be evaluated as real number 2n, i.e. 2e-9 */ struct variable * cp_setparse(wordlist *wl) { char *name = NULL, *val, *copyval, *s, *ss; double *td; struct variable *listv = NULL, *vv, *lv = NULL; struct variable *vars = NULL; int balance; while (wl) { if (name) { txfree(name); } name = cp_unquote(wl->wl_word); wl = wl->wl_next; if ((!wl || (*wl->wl_word != '=')) && !strchr(name, '=')) { vars = var_alloc_bool(copy(name), TRUE, vars); tfree(name); /*DG: cp_unquote Memory leak*/ continue; } if (wl && eq(wl->wl_word, "=")) { wl = wl->wl_next; if (wl == NULL) { fprintf(cp_err, "Error: bad set form.\n"); tfree(name); /*DG: cp_unquote Memory leak*/ if (ft_stricterror) controlled_exit(EXIT_BAD); return (NULL); } val = wl->wl_word; wl = wl->wl_next; } else if (wl && (*wl->wl_word == '=')) { val = wl->wl_word + 1; wl = wl->wl_next; } else if ((s = strchr(name, '=')) != NULL) { val = s + 1; *s = '\0'; if (*val == '\0') { if (!wl) { fprintf(cp_err, "Error: %s equals what?.\n", name); tfree(name); /*DG: cp_unquote Memory leak: free name before exiting*/ if (ft_stricterror) controlled_exit(EXIT_BAD); return (NULL); } else { val = wl->wl_word; wl = wl->wl_next; } } } else { fprintf(cp_err, "Error: bad set form.\n"); tfree(name); /*DG: cp_unquote Memory leak: free name befor exiting */ if (ft_stricterror) controlled_exit(EXIT_BAD); return (NULL); } /* if val is in double quotes, treat as string */ copyval = cp_unquote(val); if (!eq(val, copyval)) { vars = var_alloc_string(copy(name), copy(copyval), vars); tfree(name); tfree(copyval); continue; } strcpy(val, copyval); tfree(copyval); if (eq(val, "(")) { /* The beginning of a list... We have to walk down the * list until we find a close paren... If there are nested * ()'s, treat them as tokens... */ balance = 1; while (wl && wl->wl_word) { if (eq(wl->wl_word, "(")) { balance++; } else if (eq(wl->wl_word, ")")) { if (!--balance) break; } copyval = ss = cp_unquote(wl->wl_word); /* if val is in double quotes, treat as string */ if (!eq(wl->wl_word, copyval)) { vv = var_alloc_string(NULL, copy(ss), NULL); } else { td = ft_numparse(&ss, FALSE); if (td) vv = var_alloc_real(NULL, *td, NULL); else vv = var_alloc_string(NULL, copy(ss), NULL); } tfree(copyval); if (listv) { lv->va_next = vv; lv = vv; } else { listv = lv = vv; } wl = wl->wl_next; } if (balance && !wl) { fprintf(cp_err, "Error: bad set form.\n"); tfree(name); /* va: cp_unquote memory leak: free name before exiting */ if (ft_stricterror) controlled_exit(EXIT_BAD); return (NULL); } vars = var_alloc_vlist(copy(name), listv, vars); wl = wl->wl_next; continue; } copyval = ss = cp_unquote(val); /* if val is in double quotes, treat as string */ if (!eq(val, copyval)) { vars = var_alloc_string(copy(name), copy(copyval), vars); } else { td = ft_numparse(&ss, FALSE); if (td) { /*** We should try to get CP_NUM's... */ vars = var_alloc_real(copy(name), *td, vars); } else { vars = var_alloc_string(copy(name), copy(val), vars); } } tfree(copyval); /*DG: must free ss any way to avoid cp_unquote memory leak */ tfree(name); /* va: cp_unquote memory leak: free name for every loop */ } if (name) tfree(name); return (vars); } /* free the struct variable. The type of the union is given by va_type */ void free_struct_variable(struct variable *v) { while (v) { struct variable *next_v = v->va_next; if (v->va_name) tfree(v->va_name); if (v->va_type == CP_LIST) free_struct_variable(v->va_vlist); if (v->va_type == CP_STRING) tfree(v->va_string); tfree(v); v = next_v; } } void cp_remvar(char *varname) { struct variable *v, **p; struct variable *uv1; int i; uv1 = cp_usrvars(); for (p = &variables; *p; p = &(*p)->va_next) if (eq((*p)->va_name, varname)) break; if (*p == NULL) for (p = &uv1; *p; p = &(*p)->va_next) if (eq((*p)->va_name, varname)) break; if (*p == NULL && plot_cur) for (p = &plot_cur->pl_env; *p; p = &(*p)->va_next) if (eq((*p)->va_name, varname)) break; if (*p == NULL && ft_curckt) for (p = &ft_curckt->ci_vars; *p; p = &(*p)->va_next) if (eq((*p)->va_name, varname)) break; v = *p; /* make up an auxiliary struct variable for cp_usrset() */ if (!v) v = var_alloc_num(copy(varname), 0, NULL); /* Note that 'unset history' doesn't do anything here... Causes * trouble... */ if (eq(varname, "noglob")) cp_noglob = FALSE; else if (eq(varname, "nonomatch")) cp_nonomatch = FALSE; else if (eq(varname, "noclobber")) cp_noclobber = FALSE; else if (eq(varname, "echo")) /*CDHW*/ cp_echo = FALSE; /*CDHW*/ else if (eq(varname, "prompt")) cp_promptstring = NULL; else if (eq(varname, "cpdebug")) cp_debug = FALSE; else if (eq(varname, "ignoreeof")) cp_ignoreeof = FALSE; else if (eq(varname, "program")) cp_program = ""; switch (i = cp_usrset(v, FALSE)) { case US_OK: /* Normal case. */ if (*p) { *p = v->va_next; } break; case US_DONTRECORD: /* 'curplot' 'curplotname' 'curplottitle' 'curplotdate' */ /* Do nothing... */ if (*p) fprintf(cp_err, "cp_remvar: Internal Error: var %d\n", *varname); break; case US_READONLY: /* 'plots' and any var in plot_cur->pl_env */ /* Badness... */ fprintf(cp_err, "Error: %s is read-only.\n", v->va_name); if (*p) fprintf(cp_err, "cp_remvar: Internal Error: var %d\n", *varname); break; case US_SIMVAR: /* variables processed by if_option(ft_curckt->ci_ckt, ...) */ fprintf(stderr, "it's a US_SIMVAR!\n"); if (ft_curckt) { for (p = &ft_curckt->ci_vars; *p; p = &(*p)->va_next) if (eq(varname, (*p)->va_name)) break; if (*p) { struct variable *u = *p; *p = u->va_next; tfree(u); } } break; case US_NOSIMVAR: default: /* variables processed by if_option(NULL, ...) */ fprintf(cp_err, "cp_remvar: Internal Error: US val %d\n", i); break; } v->va_next = NULL; free_struct_variable(v); free_struct_variable(uv1); } /* Determine the value of a variable. Fail if the variable is unset, * and if the type doesn't match, try and make it work... */ bool cp_getvar(char *name, enum cp_types type, void *retval, size_t rsize) { struct variable *v; struct variable *uv1; uv1 = cp_usrvars(); #ifdef TRACE /* SDB debug statement */ fprintf(stderr, "in cp_getvar, trying to get value of variable %s.\n", name); #endif for (v = variables; v; v = v->va_next) if (eq(name, v->va_name)) break; if (!v) for (v = uv1; v; v = v->va_next) if (eq(name, v->va_name)) break; if (!v && plot_cur) for (v = plot_cur->pl_env; v; v = v->va_next) if (eq(name, v->va_name)) break; if (!v && ft_curckt) for (v = ft_curckt->ci_vars; v; v = v->va_next) if (eq(name, v->va_name)) break; if (!v) { if (type == CP_BOOL && retval) *(bool *) retval = FALSE; free_struct_variable(uv1); return (FALSE); } if (v->va_type == type) { if (retval) switch (type) { case CP_BOOL: *(bool *) retval = TRUE; break; case CP_NUM: *(int *) retval = v->va_num; break; case CP_REAL: *(double *) retval = v->va_real; break; case CP_STRING: { /* Gotta be careful to have room. */ char *s = cp_unquote(v->va_string); cp_wstrip(s); if (strlen(s) >= rsize - 1) { fprintf(stderr, "Internal Error: string length for variable %s is limited to %zu chars\n", v->va_name, rsize); controlled_exit(EXIT_BAD); } else strcpy((char*) retval, s); tfree(s); break; } case CP_LIST: /* Funny case... */ *(struct variable **) retval = v->va_vlist; break; default: fprintf(cp_err, "cp_getvar: Internal Error: bad var type %d.\n", type); break; } free_struct_variable(uv1); return (TRUE); } /* Try to coerce it.. */ if ((type == CP_NUM) && (v->va_type == CP_REAL)) { *(int *) retval = (int) v->va_real; } else if ((type == CP_REAL) && (v->va_type == CP_NUM)) { *(double *) retval = (double) v->va_num; } else if ((type == CP_STRING) && (v->va_type == CP_NUM)) { sprintf((char*) retval, "%d", v->va_num); } else if ((type == CP_STRING) && (v->va_type == CP_REAL)) { sprintf((char*) retval, "%f", v->va_real); } else { free_struct_variable(uv1); return (FALSE); } free_struct_variable(uv1); return (TRUE); } /* A variable substitution is indicated by a $, and the variable name * is the following string of non-special characters. All variable * values are inserted as a single word, except for lists, which are a * list of words. A routine cp_usrset must be supplied by the host * program to deal with variables that aren't used by cshpar -- it * should be cp_usrset(var, isset), where var is a variable *, and * isset is TRUE if the variable is being set, FALSE if unset. Also * required is a routine cp_enqvar(name) which returns a struct * variable *, which allows the host program to provide values for * non-cshpar variables. */ char cp_dol = '$'; /* Non-alphanumeric characters that may appear in variable names. < is very * special... */ #define VALIDCHARS "$-_<#?@.()[]&" char * span_var_expr(char *t) { int parenthesis = 0; int brackets = 0; while (*t && (isalnum_c(*t) || strchr(VALIDCHARS, *t))) switch (*t++) { case '[': brackets++; break; case '(': parenthesis++; break; case ']': if (brackets <= 0) return t-1; if (--brackets <= 0) return t; break; case ')': if (parenthesis <= 0) return t-1; if (--parenthesis <= 0) return t; break; default: break; } return t; } /* Substitute variable name by its value and restore to wordlist */ wordlist * cp_variablesubst(wordlist *wlist) { wordlist *wl; for (wl = wlist; wl; wl = wl->wl_next) { char *s_dollar; int i = 0; while ((s_dollar = strchr(wl->wl_word + i, cp_dol)) != NULL) { int prefix_len = (int) (s_dollar - wl->wl_word); char *tail = span_var_expr(s_dollar + 1); char *var = copy_substring(s_dollar + 1, tail); wordlist *nwl = vareval(var); tfree(var); if (nwl) { char *x = nwl->wl_word; char *tail_ = copy(tail); nwl->wl_word = tprintf("%.*s%s", prefix_len, wl->wl_word, nwl->wl_word); tfree(x); if (wlist == wl) wlist = nwl; wl = wl_splice(wl, nwl); i = (int) strlen(wl->wl_word); x = wl->wl_word; wl->wl_word = tprintf("%s%s", wl->wl_word, tail_); tfree(x); tfree(tail_); } else if (prefix_len || *tail) { char *x = wl->wl_word; wl->wl_word = tprintf("%.*s%s", prefix_len, wl->wl_word, tail); i = prefix_len; tfree(x); } else { wordlist *next = wl->wl_next; if (wlist == wl) wlist = next; wl_delete_slice(wl, next); if (!next) return wlist; wl = next; i = 0; } } } return (wlist); } /* Evaluate a variable. */ wordlist * vareval(char *string) { struct variable *v, *vfree = NULL; wordlist *wl; char buf[BSIZE_SP], *s; char *oldstring = copy(string); char *range = NULL; int i, up, low, tbfreed; /* usage of vfree: variable v has to be freed only if created by cp_enqvar()! */ cp_wstrip(string); if ((s = strchr(string, '[')) != NULL) { *s = '\0'; range = s + 1; } switch (*string) { case '$': wl = wl_cons(tprintf("%d", getpid()), NULL); tfree(oldstring); return (wl); case '<': (void) fflush(cp_out); if (!fgets(buf, BSIZE_SP, cp_in)) { clearerr(cp_in); (void) strcpy(buf, "EOF"); } for (s = buf; *s && (*s != '\n'); s++) ; *s = '\0'; wl = cp_lexer(buf); /* This is a hack. */ if (!wl->wl_word) wl->wl_word = copy(""); tfree(oldstring); return (wl); case '?': string++; for (v = variables; v; v = v->va_next) if (eq(v->va_name, string)) break; if (!v) { v = cp_enqvar(string, &tbfreed); if (tbfreed) vfree = v; } wl = wl_cons(copy(v ? "1" : "0"), NULL); free_struct_variable(vfree); tfree(oldstring); return (wl); case '#': string++; for (v = variables; v; v = v->va_next) if (eq(v->va_name, string)) break; if (!v) { v = cp_enqvar(string, &tbfreed); if (tbfreed) vfree = v; } if (!v) { fprintf(cp_err, "Error: %s: no such variable.\n", string); tfree(oldstring); return (NULL); } if (v->va_type == CP_LIST) for (v = v->va_vlist, i = 0; v; v = v->va_next) i++; else i = (v->va_type != CP_BOOL); wl = wl_cons(tprintf("%d", i), NULL); tfree(oldstring); free_struct_variable(vfree); return (wl); case '\0': wl = wl_cons(copy("$"), NULL); tfree(oldstring); return (wl); } vfree = NULL; //just in case ... /* The notation var[stuff] has two meanings... If this is a real * variable, then the [] denotes range, but if this is a strange * (e.g, device parameter) variable, it could be anything... */ for (v = variables; v; v = v->va_next) if (eq(v->va_name, string)) break; if (!v && isdigit_c(*string)) { for (v = variables; v; v = v->va_next) if (eq(v->va_name, "argv")) break; range = string; } if (!v) { range = NULL; string = oldstring; v = cp_enqvar(string, &tbfreed); if (tbfreed) vfree = v; } if (!v && (s = getenv(string)) != NULL) { wl = wl_cons(copy(s), NULL); tfree(oldstring); return (wl); } if (!v) { fprintf(cp_err, "Error: %s: no such variable.\n", string); tfree(oldstring); return (NULL); } wl = cp_varwl(v); free_struct_variable(vfree); /* Now parse and deal with 'range' ... */ if (range) { /* rather crude fix when range itself is a $expression */ wordlist *r = NULL; if (*range == '$') { char *t = ++range; if (*t == '&') t++; while (isalnum_c(*t)) t++; *t = '\0'; r = vareval(range); if (!r || r->wl_next) { fprintf(cp_err, "Error: %s: illegal index.\n", string); tfree(oldstring); wl_free(r); return NULL; } range = r->wl_word; } for (low = 0; isdigit_c(*range); range++) low = low * 10 + *range - '0'; if ((*range == '-') && isdigit_c(range[1])) for (up = 0, range++; isdigit_c(*range); range++) up = up * 10 + *range - '0'; else if (*range == '-') up = wl_length(wl); else up = low; up--, low--; wl = wl_range(wl, low, up); wl_free(r); } tfree(oldstring); return (wl); } struct xxx { struct variable *x_v; char x_char; }; static int vcmp(const void *a, const void *b) { int i; struct xxx *v1 = (struct xxx *) a; struct xxx *v2 = (struct xxx *) b; if ((i = strcmp(v1->x_v->va_name, v2->x_v->va_name)) != 0) return (i); else return (v1->x_char - v2->x_char); } /* Print the values of currently defined variables. */ void cp_vprint(void) { struct variable *v; struct variable *uv1; wordlist *wl; int i, j; char *s; struct xxx *vars; uv1 = cp_usrvars(); for (v = variables, i = 0; v; v = v->va_next) i++; for (v = uv1; v; v = v->va_next) i++; if (plot_cur) for (v = plot_cur->pl_env; v; v = v->va_next) i++; if (ft_curckt) for (v = ft_curckt->ci_vars; v; v = v->va_next) i++; vars = TMALLOC(struct xxx, i); out_init(); for (v = variables, i = 0; v; v = v->va_next, i++) { vars[i].x_v = v; vars[i].x_char = ' '; } for (v = uv1; v; v = v->va_next, i++) { vars[i].x_v = v; vars[i].x_char = '*'; } if (plot_cur) for (v = plot_cur->pl_env; v; v = v->va_next, i++) { vars[i].x_v = v; vars[i].x_char = '*'; } if (ft_curckt) for (v = ft_curckt->ci_vars; v; v = v->va_next, i++) { vars[i].x_v = v; vars[i].x_char = '+'; } qsort(vars, (size_t) i, sizeof(*vars), vcmp); for (j = 0; j < i; j++) { if (j && eq(vars[j].x_v->va_name, vars[j-1].x_v->va_name)) continue; v = vars[j].x_v; if (v->va_type == CP_BOOL) { out_printf("%c %s\n", vars[j].x_char, v->va_name); } else { out_printf("%c %s\t", vars[j].x_char, v->va_name); wl = vareval(v->va_name); s = wl_flatten(wl); if (v->va_type == CP_LIST) out_printf("( %s )\n", s); else out_printf("%s\n", s); } } free_struct_variable(uv1); tfree(vars); } struct variable * var_alloc(char *name, struct variable *next) { struct variable *v = TMALLOC(struct variable, 1); ZERO(v, struct variable); v -> va_name = name; v -> va_next = next; return v; } struct variable * var_alloc_bool(char *name, bool value, struct variable *next) { struct variable *v = var_alloc(name, next); var_set_bool(v, value); return v; } struct variable * var_alloc_num(char *name, int value, struct variable *next) { struct variable *v = var_alloc(name, next); var_set_num(v, value); return v; } struct variable * var_alloc_real(char *name, double value, struct variable *next) { struct variable *v = var_alloc(name, next); var_set_real(v, value); return v; } struct variable * var_alloc_string(char *name, char * value, struct variable *next) { struct variable *v = var_alloc(name, next); var_set_string(v, value); return v; } struct variable * var_alloc_vlist(char *name, struct variable * value, struct variable *next) { struct variable *v = var_alloc(name, next); var_set_vlist(v, value); return v; } void var_set_bool(struct variable *v, bool value) { v->va_type = CP_BOOL; v->va_bool = value; } void var_set_num(struct variable *v, int value) { v->va_type = CP_NUM; v->va_num = value; } void var_set_real(struct variable *v, double value) { v->va_type = CP_REAL; v->va_real = value; } void var_set_string(struct variable *v, char *value) { v->va_type = CP_STRING; v->va_string = value; } void var_set_vlist(struct variable *v, struct variable *value) { v->va_type = CP_LIST; v->va_vlist = value; } tmpk8ny_4pz/src/frontend/com_gnuplot.h0000644000175000017500000000021113546075722020257 0ustar carstencarsten#ifndef ngspice_COM_GNUPLOT_H #define ngspice_COM_GNUPLOT_H void com_gnuplot(wordlist *wl); void com_write_simple(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/nutmegif.h0000644000175000017500000000021613546075722017554 0ustar carstencarsten/************* * Header file for nutmegif.c * 1999 E. Rouat ************/ #ifndef ngspice_NUTMEGIF_H #define ngspice_NUTMEGIF_H #endif tmpk8ny_4pz/src/frontend/com_state.h0000644000175000017500000000014013546075722017710 0ustar carstencarsten#ifndef ngspice_COM_STATE_H #define ngspice_COM_STATE_H void com_state(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/com_shift.h0000644000175000017500000000023313546075722017710 0ustar carstencarsten/************* * Header file for com_shift.c ************/ #ifndef ngspice_COM_SHIFT_H #define ngspice_COM_SHIFT_H void com_shift(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/spiceif.c0000644000175000017500000014652113546075722017365 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group Modified: 2000 AlansFixes **********/ /* * Interface routines. These are specific to spice. The only changes to FTE * that should be needed to make FTE work with a different simulator is * to rewrite this file. What each routine is expected to do can be * found in the programmer's manual. This file should be the only one * that includes ngspice.header files. */ /*CDHW Notes: I have never really understood the way Berkeley intended the six pointers to default values (ci_defOpt/Task ci_specOpt/Task ci_curOpt/Task) to work, as there only see to be two data blocks to point at, or I've missed something clever elsewhere. Anyway, in the original 3f4 the interactive command 'set temp = 10' set temp for its current task and clobbered the default values as a side effect. When an interactive is run it created specTask using the spice application default values, not the circuit defaults affected by 'set temp = 10'. The fix involves two changes 1. Make 'set temp = 10' change the values in the 'default' block, not whatever the 'current' pointer happens to be pointing at (which is usually the default block except when one interactive is run immediately after another). 2. Hack CKTnewTask() so that it looks to see whether it is creating a 'special' task, in which case it copies the values from ft_curckt->ci_defTask providing everything looks sane, otherwise it uses the hard-coded 'application defaults'. These are fairly minor changes, and as they don't change the data structures they should be fairly 'safe'. However, ... CDHW*/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/cpdefs.h" #include "ngspice/tskdefs.h" /* Is really needed ? */ #include "ngspice/ftedefs.h" #include "ngspice/fteinp.h" #include "ngspice/inpdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/ifsim.h" #include "circuits.h" #include "spiceif.h" #include "variable.h" #ifdef XSPICE #include "ngspice/evt.h" #include "ngspice/enh.h" /* gtri - add - wbk - 11/9/90 - include MIF function prototypes */ #include "ngspice/mifproto.h" /* gtri - end - wbk - 11/9/90 */ /* gtri - evt - wbk - 5/20/91 - Add stuff for user-defined nodes */ #include "ngspice/evtproto.h" #include "ngspice/evtudn.h" /* gtri - end - wbk - 5/20/91 - Add stuff for user-defined nodes */ #include "ngspice/mif.h" #endif extern INPmodel *modtab; static struct variable *parmtovar(IFvalue *pv, IFparm *opt); static IFparm *parmlookup(IFdevice *dev, GENinstance **inptr, char *param, int do_model, int inout); static IFvalue *doask(CKTcircuit *ckt, int typecode, GENinstance *dev, GENmodel *mod, IFparm *opt, int ind); static int doset(CKTcircuit *ckt, int typecode, GENinstance *dev, GENmodel *mod, IFparm *opt, struct dvec *val); static int finddev(CKTcircuit *ckt, char *name, GENinstance **devptr, GENmodel **modptr); /* espice fix integration */ static int finddev_special(CKTcircuit *ckt, char *name, GENinstance **devptr, GENmodel **modptr, int *device_or_model); /* Input a single deck, and return a pointer to the circuit. */ CKTcircuit * if_inpdeck(struct card *deck, INPtables **tab) { CKTcircuit *ckt; int err, i; struct card *ll; IFuid taskUid; IFuid optUid; int which = -1; for (i = 0, ll = deck; ll; ll = ll->nextcard) i++; *tab = INPtabInit(i); ft_curckt->ci_symtab = *tab; err = ft_sim->newCircuit (&ckt); if (err != OK) { ft_sperror(err, "CKTinit"); return (NULL); } /*CDHW Create a task DDD with a new UID. ci_defTask will point to it CDHW*/ err = IFnewUid(ckt, &taskUid, NULL, "default", UID_TASK, NULL); if (err) { ft_sperror(err, "newUid"); return (NULL); } #if (0) err = ft_sim->newTask (ckt, &(ft_curckt->ci_defTask), taskUid); #else /*CDHW*/ err = ft_sim->newTask (ckt, &(ft_curckt->ci_defTask), taskUid, NULL); #endif if (err) { ft_sperror(err, "newTask"); return (NULL); } /*CDHW which options available for this simulator? CDHW*/ which = ft_find_analysis("options"); if (which != -1) { err = IFnewUid(ckt, &optUid, NULL, "options", UID_ANALYSIS, NULL); if (err) { ft_sperror(err, "newUid"); return (NULL); } err = ft_sim->newAnalysis (ft_curckt->ci_ckt, which, optUid, &(ft_curckt->ci_defOpt), ft_curckt->ci_defTask); /*CDHW ci_defTask and ci_defOpt point to parameters DDD CDHW*/ if (err) { ft_sperror(err, "createOptions"); return (NULL); } ft_curckt->ci_curOpt = ft_curckt->ci_defOpt; /*CDHW ci_curOpt and ci_defOpt point to DDD CDHW*/ } ft_curckt->ci_curTask = ft_curckt->ci_defTask; /* reset the model table, will be filled in anew in INPpas1() */ modtab = NULL; INPpas1(ckt, deck->nextcard, *tab); /* store the new model table in the current circuit */ ft_curckt->ci_modtab = modtab; INPpas2(ckt, deck->nextcard, *tab, ft_curckt->ci_defTask); /* INPpas2 has been modified to ignore .NODESET and .IC * cards. These are left till INPpas3 so that we can check for * nodeset/ic of non-existant nodes. */ INPpas3(ckt, deck->nextcard, *tab, ft_curckt->ci_defTask, ft_sim->nodeParms, ft_sim->numNodeParms); #ifdef XSPICE /* gtri - begin - wbk - 6/6/91 - Finish initialization of event driven structures */ err = EVTinit(ckt); if (err) { ft_sperror(err, "EVTinit"); return (NULL); } /* gtri - end - wbk - 6/6/91 - Finish initialization of event driven structures */ #endif return (ckt); } /* Do a run of the circuit, of the given type. Type "resume" is * special -- it means to resume whatever simulation that was in * progress. The return value of this routine is 0 if the exit was ok, * and 1 if there was a reason to interrupt the circuit (interrupt * typed at the keyboard, error in the simulation, etc). args should * be the entire command line, e.g. "tran 1 10 20 uic" */ int if_run(CKTcircuit *ckt, char *what, wordlist *args, INPtables *tab) { int err; struct card deck; char buf[BSIZE_SP]; int which = -1; IFuid specUid, optUid; char *s; /* First parse the line... */ /*CDHW Look for an interactive task CDHW*/ if (eq(what, "tran") || eq(what, "ac") || eq(what, "dc") || eq(what, "op") || eq(what, "pz") || eq(what, "disto") || eq(what, "adjsen") || eq(what, "sens") || eq(what, "tf") || eq(what, "noise") #ifdef WITH_PSS /* SP: Steady State Analysis */ || eq(what, "pss") /* SP */ #endif ) { s = wl_flatten(args); /* va: tfree char's tmalloc'ed in wl_flatten */ (void) sprintf(buf, ".%s", s); tfree(s); deck.nextcard = deck.actualLine = NULL; deck.error = NULL; deck.linenum = 0; deck.line = buf; /*CDHW Delete any previous special task CDHW*/ if (ft_curckt->ci_specTask) { if (ft_curckt->ci_specTask == ft_curckt->ci_defTask) /*CDHW*/ printf("Oh dear...something bad has happened to the options.\n"); err = ft_sim->deleteTask (ft_curckt->ci_ckt, ft_curckt->ci_specTask); if (err) { ft_sperror(err, "deleteTask"); return (2); } ft_curckt->ci_specTask = NULL; ft_curckt->ci_specOpt = NULL; /*CDHW*/ } /*CDHW Create an interactive task AAA with a new UID. ci_specTask will point to it CDHW*/ err = IFnewUid(ft_curckt->ci_ckt, &specUid, NULL, "special", UID_TASK, NULL); if (err) { ft_sperror(err, "newUid"); return (2); } #if (0) err = ft_sim->newTask (ft_curckt->ci_ckt, &(ft_curckt->ci_specTask), specUid); #else /*CDHW*/ err = ft_sim->newTask (ft_curckt->ci_ckt, &(ft_curckt->ci_specTask), specUid, &(ft_curckt->ci_defTask)); #endif if (err) { ft_sperror(err, "newTask"); return (2); } /*CDHW which options available for this simulator? CDHW*/ which = ft_find_analysis("options"); if (which != -1) { /*CDHW options are available CDHW*/ err = IFnewUid(ft_curckt->ci_ckt, &optUid, NULL, "options", UID_ANALYSIS, NULL); if (err) { ft_sperror(err, "newUid"); return (2); } err = ft_sim->newAnalysis (ft_curckt->ci_ckt, which, optUid, &(ft_curckt->ci_specOpt), ft_curckt->ci_specTask); /*CDHW 'options' ci_specOpt points to AAA in this case CDHW*/ if (err) { ft_sperror(err, "createOptions"); return (2); } ft_curckt->ci_curOpt = ft_curckt->ci_specOpt; /*CDHW ci_specTask ci_specOpt and ci_curOpt all point to AAA CDHW*/ } ft_curckt->ci_curTask = ft_curckt->ci_specTask; /*CDHW ci_curTask and ci_specTask point to the interactive task AAA CDHW*/ INPpas2(ckt, &deck, tab, ft_curckt->ci_specTask); if (deck.error) { fprintf(cp_err, "Warning: %s\n", deck.error); return 2; } } /*CDHW ** if the task is to 'run' the deck, change ci_curTask and ** ci_curOpt to point to DDD ** created by if_inpdeck(), otherwise they point to AAA. CDHW*/ if (eq(what, "run")) { ft_curckt->ci_curTask = ft_curckt->ci_defTask; ft_curckt->ci_curOpt = ft_curckt->ci_defOpt; } /* -- Find out what we are supposed to do. */ if ((eq(what, "tran")) || (eq(what, "ac")) || (eq(what, "dc")) || (eq(what, "op")) || (eq(what, "pz")) || (eq(what, "disto")) || (eq(what, "noise")) || (eq(what, "adjsen")) || (eq(what, "sens")) || (eq(what, "tf")) || #ifdef WITH_PSS /* SP: Steady State Analysis */ (eq(what, "pss")) || /* SP */ #endif (eq(what, "run"))) { /*CDHW Run the analysis pointed to by ci_curTask CDHW*/ ft_curckt->ci_curOpt = ft_curckt->ci_defOpt; if ((err = ft_sim->doAnalyses (ckt, 1, ft_curckt->ci_curTask)) != OK) { ft_sperror(err, "doAnalyses"); /* wrd_end(); */ if (err == E_PAUSE) return (1); else return (2); } } else if (eq(what, "resume")) { if ((err = ft_sim->doAnalyses (ckt, 0, ft_curckt->ci_curTask)) != OK) { ft_sperror(err, "doAnalyses"); /* wrd_end(); */ if (err == E_PAUSE) return (1); else return (2); } } else { fprintf(cp_err, "if_run: Internal Error: bad run type %s\n", what); return (2); } return (0); } /* Set an option in the circuit. Arguments are option name, type, and * value (the last a char *), suitable for casting to whatever needed... */ static char *unsupported[] = { "itl3", "itl5", "lvltim", "maxord", "method", NULL }; static char *obsolete[] = { "limpts", "limtim", "lvlcod", NULL }; int if_option(CKTcircuit *ckt, char *name, enum cp_types type, void *value) { IFvalue pval; int err; char **vv, *sfree = NULL; int which = -1; IFparm *if_parm; if (eq(name, "acct")) { ft_acctprint = TRUE; return 0; } else if (eq(name, "noacct")) { ft_noacctprint = TRUE; return 0; } else if (eq(name, "noinit")) { ft_noinitprint = TRUE; return 0; } else if (eq(name, "norefvalue")) { ft_norefprint = TRUE; return 0; } else if (eq(name, "list")) { ft_listprint = TRUE; return 0; } else if (eq(name, "node")) { ft_nodesprint = TRUE; return 0; } else if (eq(name, "opts")) { ft_optsprint = TRUE; return 0; } else if (eq(name, "nopage")) { ft_nopage = TRUE; return 0; } else if (eq(name, "nomod")) { ft_nomod = TRUE; return 0; } which = ft_find_analysis("options"); if (which == -1) { fprintf(cp_err, "Warning: .options line unsupported\n"); return 0; } if_parm = ft_find_analysis_parm(which, name); if (!if_parm || !(if_parm->dataType & IF_SET)) { /* See if this is unsupported or obsolete. */ for (vv = unsupported; *vv; vv++) if (eq(name, *vv)) { fprintf(cp_err, "Warning: option %s is currently unsupported.\n", name); return 1; } for (vv = obsolete; *vv; vv++) if (eq(name, *vv)) { fprintf(cp_err, "Warning: option %s is obsolete.\n", name); return 1; } return 0; } switch (if_parm->dataType & IF_VARTYPES) { case IF_REAL: if (type == CP_REAL) pval.rValue = *((double *) value); else if (type == CP_NUM) pval.rValue = *((int *) value); else goto badtype; break; case IF_INTEGER: if (type == CP_NUM) pval.iValue = *((int *) value); else if (type == CP_REAL) pval.iValue = (int)floor((*(double *)value) + 0.5); else goto badtype; break; case IF_STRING: if (type == CP_STRING) sfree = pval.sValue = copy((char*) value); else goto badtype; break; case IF_FLAG: if (type == CP_BOOL) pval.iValue = *((bool *) value) ? 1 : 0; else if (type == CP_NUM) /* FIXME, shall we allow this ? */ pval.iValue = *((int *) value); else goto badtype; break; default: fprintf(cp_err, "if_option: Internal Error: bad option type %d.\n", if_parm->dataType); } if (!ckt) { /* XXX No circuit loaded */ fprintf(cp_err, "Simulation parameter \"%s\" can't be set until\n", name); fprintf(cp_err, "a circuit has been loaded.\n"); return 1; } #if (0) if ((err = ft_sim->setAnalysisParm (ckt, ft_curckt->ci_curOpt, if_parm->id, &pval, NULL)) != OK) ft_sperror(err, "setAnalysisParm(options) ci_curOpt"); #else /*CDHW*/ if ((err = ft_sim->setAnalysisParm (ckt, ft_curckt->ci_defOpt, if_parm->id, &pval, NULL)) != OK) ft_sperror(err, "setAnalysisParm(options) ci_curOpt"); tfree(sfree); return 1; #endif badtype: fprintf(cp_err, "Error: bad type given for option %s --\n", name); fprintf(cp_err, "\ttype given was "); switch (type) { case CP_BOOL: fputs("boolean", cp_err); break; case CP_NUM: fputs("integer", cp_err); break; case CP_REAL: fputs("real", cp_err); break; case CP_STRING: fputs("string", cp_err); break; case CP_LIST: fputs("list", cp_err); break; default: fputs("something strange", cp_err); break; } fprintf(cp_err, ", type expected was "); switch (if_parm->dataType & IF_VARTYPES) { case IF_REAL: fputs("real.\n", cp_err); break; case IF_INTEGER: fputs("integer.\n", cp_err); break; case IF_STRING: fputs("string.\n", cp_err); break; case IF_FLAG: fputs("flag.\n", cp_err); break; default: fputs("something strange.\n", cp_err); break; } if (type == CP_BOOL) fputs("\t(Note that you must use an = to separate option name and value.)\n", cp_err); return 0; } void if_dump(CKTcircuit *ckt, FILE *file) { NG_IGNORE(ckt); fprintf(file, "diagnostic output dump unavailable."); } void if_cktfree(CKTcircuit *ckt, INPtables *tab) { ft_sim->deleteCircuit (ckt); INPtabEnd(tab); } /* Return a string describing an error code. */ /* BLOW THIS AWAY.... */ char * if_errstring(int code) { return (INPerror(code)); } /* Get pointers to a device, its model, and its type number given the name. If * there is no such device, try to find a model with that name * device_or_model says if we are referencing a device or a model. * finddev_special(ck, name, devptr, modptr, device_or_model): * Introduced to look for correct reference in expression like print @BC107 [is] * and find out whether a model or a device parameter is referenced and properly * call the spif_getparam_special (ckt, name, param, ind, do_model) function in * vector.c - A. Roldan (espice). */ static int finddev_special( CKTcircuit *ckt, char *name, GENinstance **devptr, GENmodel **modptr, int *device_or_model) { *devptr = ft_sim->findInstance (ckt, name); if (*devptr) { *device_or_model = 0; return (*devptr)->GENmodPtr->GENmodType; } *modptr = ft_sim->findModel (ckt, name); if (*modptr) { *device_or_model = 1; return (*modptr)->GENmodType; } *device_or_model = 2; return (-1); } /* Get a parameter value from the circuit. If name is left unspecified, * we want a circuit parameter. Now works both for devices and models. * A.Roldan (espice) */ struct variable * spif_getparam_special(CKTcircuit *ckt, char **name, char *param, int ind, int do_model) { struct variable *vv = NULL, *tv; IFvalue *pv; IFparm *opt; int typecode, i, modelo_dispositivo; GENinstance *dev = NULL; GENmodel *mod = NULL; IFdevice *device; NG_IGNORE(do_model); /* fprintf(cp_err, "Calling if_getparam(%s, %s)\n", *name, param); */ if (!param || (param && eq(param, "all"))) { INPretrieve(name, ft_curckt->ci_symtab); typecode = finddev_special(ckt, *name, &dev, &mod, &modelo_dispositivo); if (typecode == -1) { fprintf(cp_err, "Error: no such device or model name %s\n", *name); return (NULL); } device = ft_sim->devices[typecode]; if (!modelo_dispositivo) { /* It is a device */ for (i = 0; i < *(device->numInstanceParms); i++) { opt = &device->instanceParms[i]; if (opt->dataType & IF_REDUNDANT || !opt->description) continue; if (!(opt->dataType & IF_ASK)) continue; pv = doask(ckt, typecode, dev, mod, opt, ind); if (pv) { tv = parmtovar(pv, opt); /* With the following we pack the name and the acronym of the parameter */ { char *x = tv->va_name; tv->va_name = tprintf("%s [%s]", tv->va_name, device->instanceParms[i].keyword); tfree(x); } if (vv) tv->va_next = vv; vv = tv; } else { fprintf(cp_err, "Internal Error: no parameter '%s' on device '%s'\n", device->instanceParms[i].keyword, device->name); } } return (vv); } else { /* Is it a model or a device ? */ /* It is a model */ for (i = 0; i < *(device->numModelParms); i++) { opt = &device->modelParms[i]; if (opt->dataType & IF_REDUNDANT || !opt->description) continue; /* We check that the parameter is interesting and therefore is * implemented in the corresponding function ModelAsk. Originally * the argument of "if" was: || (opt->dataType & IF_STRING)) continue; * so, a model parameter defined like OP("type", MOS_SGT_MOD_TYPE, * IF_STRING, N-channel or P-channel MOS") would not be printed. */ /* if (!(opt->dataType & IF_ASK) || (opt->dataType & IF_UNINTERESTING) || (opt->dataType & IF_STRING)) continue; */ if (!(opt->dataType & IF_ASK) || (opt->dataType & IF_UNINTERESTING)) continue; pv = doask(ckt, typecode, dev, mod, opt, ind); if (pv) { tv = parmtovar(pv, opt); /* Inside parmtovar: * 1. tv->va_name = copy(opt->description); * 2. Copy the type of variable of IFparm into a variable (thus parm-to-var) * vv->va_type = opt->dataType * The long description of the parameter: * IFparm MOS_SGTmPTable[] = { // model parameters // * OP("type", MOS_SGT_MOD_TYPE, IF_STRING, "N-channel or P-channel MOS") * goes into tv->va_name to put braces around the parameter of the model * tv->va_name += device->modelParms[i].keyword; */ { char *x = tv->va_name; tv->va_name = tprintf("%s [%s]", tv->va_name, device->modelParms[i].keyword); tfree(x); } /* tv->va_string = device->modelParms[i].keyword; Put the name of the variable */ if (vv) tv->va_next = vv; vv = tv; } else { fprintf(cp_err, "Internal Error: no parameter '%s' on device '%s'\n", device->modelParms[i].keyword, device->name); } } return (vv); } } else if (param) { INPretrieve(name, ft_curckt->ci_symtab); typecode = finddev_special(ckt, *name, &dev, &mod, &modelo_dispositivo); if (typecode == -1) { fprintf(cp_err, "Error: no such device or model name %s\n", *name); return (NULL); } device = ft_sim->devices[typecode]; opt = parmlookup(device, &dev, param, modelo_dispositivo, 0); if (!opt) { fprintf(cp_err, "Error: no such parameter %s.\n", param); return (NULL); } pv = doask(ckt, typecode, dev, mod, opt, ind); if (pv) vv = parmtovar(pv, opt); return (vv); } else { return (if_getstat(ckt, *name)); } } /* Get a parameter value from the circuit. If name is left unspecified, * we want a circuit parameter. */ struct variable * spif_getparam(CKTcircuit *ckt, char **name, char *param, int ind, int do_model) { struct variable *vv = NULL, *tv; IFvalue *pv; IFparm *opt; int typecode, i; GENinstance *dev = NULL; GENmodel *mod = NULL; IFdevice *device; /* fprintf(cp_err, "Calling if_getparam(%s, %s)\n", *name, param); */ if (param && eq(param, "all")) { /* MW. My "special routine here" */ INPretrieve(name, ft_curckt->ci_symtab); typecode = finddev(ckt, *name, &dev, &mod); if (typecode == -1) { fprintf(cp_err, "Error: no such device or model name %s\n", *name); return (NULL); } device = ft_sim->devices[typecode]; for (i = 0; i < *(device->numInstanceParms); i++) { opt = &device->instanceParms[i]; if (opt->dataType & IF_REDUNDANT || !opt->description) continue; if (!(opt->dataType & IF_ASK)) continue; pv = doask(ckt, typecode, dev, mod, opt, ind); if (pv) { tv = parmtovar(pv, opt); if (vv) tv->va_next = vv; vv = tv; } else { fprintf(cp_err, "Internal Error: no parameter '%s' on device '%s'\n", device->instanceParms[i].keyword, device->name); } } return (vv); } else if (param) { /* MW. */ INPretrieve(name, ft_curckt->ci_symtab); typecode = finddev(ckt, *name, &dev, &mod); if (typecode == -1) { fprintf(cp_err, "Error: no such device or model name %s\n", *name); return (NULL); } device = ft_sim->devices[typecode]; opt = parmlookup(device, &dev, param, do_model, 0); if (!opt) { fprintf(cp_err, "Error: no such parameter %s.\n", param); return (NULL); } pv = doask(ckt, typecode, dev, mod, opt, ind); if (pv) vv = parmtovar(pv, opt); return (vv); } else { return (if_getstat(ckt, *name)); } } /* 9/26/03 PJB : function to allow setting model of device */ void if_setparam_model(CKTcircuit *ckt, char **name, char *val) { GENinstance *dev = NULL; GENinstance *prevDev = NULL; GENmodel *curMod = NULL; GENmodel *newMod = NULL; INPmodel *inpmod = NULL; GENinstance *iter; GENmodel *mods, *prevMod; int typecode; char *modname; /* retrieve device name from symbol table */ INPretrieve(name, ft_curckt->ci_symtab); /* find the specified device */ typecode = finddev(ckt, *name, &dev, &curMod); if (typecode == -1) { fprintf(cp_err, "Error: no such device name %s\n", *name); return; } curMod = dev->GENmodPtr; modname = copy(dev->GENmodPtr->GENmodName); modname = strtok(modname, "."); /* want only have the parent model name */ /* retrieve the model from the global model table; also add the model to 'ckt' and indicate model is being used */ INPgetMod(ckt, modname, &inpmod, ft_curckt->ci_symtab); /* check if using model binning -- pass in line since need 'l' and 'w' */ if (inpmod == NULL) INPgetModBin(ckt, modname, &inpmod, ft_curckt->ci_symtab, val); tfree(modname); if (inpmod == NULL) { fprintf(cp_err, "Error: no model available for %s.\n", val); return; } newMod = inpmod->INPmodfast; /* see if new model name same as current model name */ if (newMod->GENmodName != curMod->GENmodName) printf("Notice: model has changed from %s to %s.\n", curMod->GENmodName, newMod->GENmodName); if (newMod->GENmodType != curMod->GENmodType) { fprintf(cp_err, "Error: new model %s must be same type as current model.\n", val); return; } /* fix current model linked list */ prevDev = NULL; for (iter = curMod->GENinstances; iter; iter = iter->GENnextInstance) { if (iter->GENname == dev->GENname) { /* see if at beginning of linked list */ if (prevDev == NULL) curMod->GENinstances = iter->GENnextInstance; else prevDev->GENnextInstance = iter->GENnextInstance; /* update model for device */ dev->GENmodPtr = newMod; dev->GENnextInstance = newMod->GENinstances; newMod->GENinstances = dev; break; } prevDev = iter; } /* see if any devices remaining that reference current model */ if (curMod->GENinstances == NULL) { prevMod = NULL; for (mods = ckt->CKThead[typecode]; mods; mods = mods->GENnextModel) { if (mods->GENmodName == curMod->GENmodName) { /* see if at beginning of linked list */ if (prevMod == NULL) ckt->CKThead[typecode] = mods->GENnextModel; else prevMod->GENnextModel = mods->GENnextModel; INPgetMod(ckt, mods->GENmodName, &inpmod, ft_curckt->ci_symtab); if (curMod != nghash_delete(ckt->MODnameHash, curMod->GENmodName)) fprintf(stderr, "ERROR, ouch nasal daemons ...\n"); GENmodelFree(mods); inpmod->INPmodfast = NULL; break; } prevMod = mods; } } } void if_setparam(CKTcircuit *ckt, char **name, char *param, struct dvec *val, int do_model) { IFparm *opt; IFdevice *device; GENmodel *mod = NULL; GENinstance *dev = NULL; int typecode; /* PN */ INPretrieve(name, ft_curckt->ci_symtab); typecode = finddev(ckt, *name, &dev, &mod); if (typecode == -1) { fprintf(cp_err, "Error: no such device or model name %s\n", *name); return; } device = ft_sim->devices[typecode]; opt = parmlookup(device, &dev, param, do_model, 1); if (!opt) { if (param) fprintf(cp_err, "Error: no such parameter %s.\n", param); else fprintf(cp_err, "Error: no default parameter.\n"); return; } if (do_model && !mod) { mod = dev->GENmodPtr; dev = NULL; } doset(ckt, typecode, dev, mod, opt, val); /* Call to CKTtemp(ckt) will be invoked here only by 'altermod' commands, to set internal model parameters pParam of each instance for immediate use, otherwise e.g. model->BSIM3vth0 will be set, but not pParam of any BSIM3 instance. Call only if CKTtime > 0 to avoid conflict with previous 'reset' command. May contain side effects because called from many places. h_vogt 110101 */ if (do_model && (ckt->CKTtime > 0)) { int error = 0; error = CKTtemp(ckt); if (error) fprintf(stderr, "Error during changing a device model parameter!\n"); if (error) controlled_exit(1); } } static struct variable * parmtovar(IFvalue *pv, IFparm *opt) { /* It is not clear whether we want to name the variable * by `keyword' or by `description' */ switch (opt->dataType & IF_VARTYPES) { case IF_INTEGER: return var_alloc_num(copy(opt->description), pv->iValue, NULL); case IF_REAL: case IF_COMPLEX: return var_alloc_real(copy(opt->description), pv->rValue, NULL); case IF_STRING: return var_alloc_string(copy(opt->description), pv->sValue, NULL); case IF_FLAG: return var_alloc_bool(copy(opt->description), pv->iValue ? TRUE : FALSE, NULL); case IF_REALVEC: { struct variable *list = NULL; int i; for (i = pv->v.numValue; --i >= 0;) list = var_alloc_real(NULL, pv->v.vec.rVec[i], list); return var_alloc_vlist(copy(opt->description), list, NULL); /* It is a linked list where the first node is a variable * pointing to the different values of the variables. * * To access the values of the real variable vector must be * vv->va_V.vV_real = valor node ppal that is of no use. * * In the case of Vin_sin 1 0 sin (0 2 2000) * and of print @vin_sin[sin] * * vv->va_V.vV_list->va_V.vV_real = 2000 * vv->va_V.vV_list->va_next->va_V.vV_real = 2 * vv->va_V.vV_list->va_next->va_next->va_V.vV_real = 0 * So the list is starting from behind, but no problem * This works fine */ } default: fprintf(cp_err, "parmtovar: Internal Error: bad PARM type %d.\n", opt->dataType); return (NULL); } } /* Extract the parameter (IFparm structure) from the device or device's model. * If do_mode is TRUE then look in the device's parameters * If do_mode is FALSE then look in the device model's parameters * If inout equals 1 then look only for parameters with the IF_SET type flag * if inout equals 0 then look only for parameters with the IF_ASK type flag */ static IFparm * parmlookup(IFdevice *dev, GENinstance **inptr, char *param, int do_model, int inout) { int i; NG_IGNORE(inptr); /* First try the device questions... */ if (!do_model && dev->numInstanceParms) { for (i = 0; i < *(dev->numInstanceParms); i++) { if (!param && (dev->instanceParms[i].dataType & IF_PRINCIPAL)) return (&dev->instanceParms[i]); else if (!param) continue; else if ((((dev->instanceParms[i].dataType & IF_SET) && inout == 1) || ((dev->instanceParms[i].dataType & IF_ASK) && inout == 0)) && cieq(dev->instanceParms[i].keyword, param)) { while ((dev->instanceParms[i].dataType & IF_REDUNDANT) && (i > 0)) i--; return (&dev->instanceParms[i]); } } return NULL; } if (dev->numModelParms) for (i = 0; i < *(dev->numModelParms); i++) if ((((dev->modelParms[i].dataType & IF_SET) && inout == 1) || ((dev->modelParms[i].dataType & IF_ASK) && inout == 0)) && eq(dev->modelParms[i].keyword, param)) { while ((dev->modelParms[i].dataType & IF_REDUNDANT) && (i > 0)) i--; return (&dev->modelParms[i]); } return (NULL); } /* Perform the CKTask call. We have both 'fast' and 'modfast', so the other * parameters aren't necessary. */ static IFvalue * doask(CKTcircuit *ckt, int typecode, GENinstance *dev, GENmodel *mod, IFparm *opt, int ind) { static IFvalue pv; int err; NG_IGNORE(typecode); pv.iValue = ind; /* Sometimes this will be junk and ignored... */ /* fprintf(cp_err, "Calling doask(%d, %x, %x, %x)\n", typecode, dev, mod, opt); */ if (dev) err = ft_sim->askInstanceQuest (ckt, dev, opt->id, &pv, NULL); else err = ft_sim->askModelQuest (ckt, mod, opt->id, &pv, NULL); if (err != OK) { ft_sperror(err, "if_getparam"); return (NULL); } return (&pv); } /* Perform the CKTset call. We have both 'fast' and 'modfast', so the other * parameters aren't necessary. */ static int doset(CKTcircuit *ckt, int typecode, GENinstance *dev, GENmodel *mod, IFparm *opt, struct dvec *val) { IFvalue nval; int err; int n; int *iptr; double *dptr; int i; NG_IGNORE(typecode); /* Count items */ if (opt->dataType & IF_VECTOR) { n = nval.v.numValue = val->v_length; dptr = val->v_realdata; /* XXXX compdata!!! */ switch (opt->dataType & (IF_VARTYPES & ~IF_VECTOR)) { case IF_FLAG: case IF_INTEGER: iptr = nval.v.vec.iVec = TMALLOC(int, n); for (i = 0; i < n; i++) *iptr++ = (int)floor(*dptr++ + 0.5); break; case IF_REAL: nval.v.vec.rVec = val->v_realdata; break; default: fprintf(cp_err, "Can't assign value to \"%s\" (unsupported vector type)\n", opt->keyword); return E_UNSUPP; } } else { switch (opt->dataType & IF_VARTYPES) { case IF_FLAG: case IF_INTEGER: nval.iValue = (int)floor(*val->v_realdata + 0.5); break; case IF_REAL: /*kensmith don't blow up with NULL dereference*/ if (!val->v_realdata) { fprintf(cp_err, "Unable to determine the value\n"); return E_UNSUPP; } nval.rValue = *val->v_realdata; break; default: fprintf(cp_err, "Can't assign value to \"%s\" (unsupported type)\n", opt->keyword); return E_UNSUPP; } } /* fprintf(cp_err, "Calling doask(%d, %x, %x, %x)\n", typecode, dev, mod, opt); */ if (dev) err = ft_sim->setInstanceParm (ckt, dev, opt->id, &nval, NULL); else err = ft_sim->setModelParm (ckt, mod, opt->id, &nval, NULL); return err; } /* Get pointers to a device, its model, and its type number given the name. If * there is no such device, try to find a model with that name. */ static int finddev(CKTcircuit *ckt, char *name, GENinstance **devptr, GENmodel **modptr) { *devptr = ft_sim->findInstance (ckt, name); if (*devptr) return (*devptr)->GENmodPtr->GENmodType; *modptr = ft_sim->findModel (ckt, name); if (*modptr) return (*modptr)->GENmodType; return (-1); } /* get an analysis parameter by name instead of id */ int if_analQbyName(CKTcircuit *ckt, int which, JOB *anal, char *name, IFvalue *parm) { IFparm *if_parm = ft_find_analysis_parm(which, name); if (!if_parm) return (E_BADPARM); return (ft_sim->askAnalysisQuest (ckt, anal, if_parm->id, parm, NULL)); } /* Get the parameters tstart, tstop, and tstep from the CKT struct. */ /* BLOW THIS AWAY TOO */ bool if_tranparams(struct circ *ci, double *start, double *stop, double *step) { IFvalue tmp; int err; int which = -1; JOB *anal; IFuid tranUid; if (!ci->ci_curTask) return (FALSE); which = ft_find_analysis("TRAN"); if (which == -1) return (FALSE); err = IFnewUid(ci->ci_ckt, &tranUid, NULL, "Transient Analysis", UID_ANALYSIS, NULL); if (err != OK) return (FALSE); err = ft_sim->findAnalysis (ci->ci_ckt, &which, &anal, tranUid, ci->ci_curTask, NULL); if (err != OK) return (FALSE); err = if_analQbyName(ci->ci_ckt, which, anal, "tstart", &tmp); if (err != OK) return (FALSE); *start = tmp.rValue; err = if_analQbyName(ci->ci_ckt, which, anal, "tstop", &tmp); if (err != OK) return (FALSE); *stop = tmp.rValue; err = if_analQbyName(ci->ci_ckt, which, anal, "tstep", &tmp); if (err != OK) return (FALSE); *step = tmp.rValue; return (TRUE); } /* Get the statistic called 'name'. If this is NULL get all statistics * available. */ struct variable * if_getstat(CKTcircuit *ckt, char *name) { int options_idx, i; IFanalysis *options; IFvalue parm; IFparm *if_parm; options_idx = ft_find_analysis("options"); if (options_idx == -1) { fprintf(cp_err, "Warning: statistics unsupported\n"); return (NULL); } options = ft_sim->analyses[options_idx]; if (name) { if_parm = ft_find_analysis_parm(options_idx, name); if (!if_parm) return (NULL); if (ft_sim->askAnalysisQuest (ckt, &(ft_curckt->ci_curTask->taskOptions), if_parm->id, &parm, NULL) == -1) { fprintf(cp_err, "if_getstat: Internal Error: can't get %s\n", name); return (NULL); } return (parmtovar(&parm, if_parm)); } else { struct variable *vars = NULL, **v = &vars; for (i = 0; i < options->numParms; i++) { if_parm = &(options->analysisParms[i]); if (!(if_parm->dataType & IF_ASK)) continue; if (ft_sim->askAnalysisQuest (ckt, &(ft_curckt->ci_curTask->taskOptions), if_parm->id, &parm, NULL) == -1) { fprintf(cp_err, "if_getstat: Internal Error: can't get a name\n"); return (NULL); } *v = parmtovar(&parm, if_parm); v = &((*v)->va_next); } return (vars); } } /* Some small updates to make it work, h_vogt, Feb. 2012 Still very experimental ! It is now possible to save a state during transient simulation, reload it later into a new ngspice run and resume simulation. XSPICE code models probably will not do. LTRA transmission line will not do. Many others are not tested. */ #include "ngspice/cktdefs.h" #include "ngspice/trandefs.h" /* arg0: circuit file, arg1: data file */ void com_snload(wordlist *wl) { int error = 0; FILE *file; int tmpI, i, size; CKTcircuit *my_ckt, *ckt; /* Pseudo code: source(file_name); This should setup all the device structs, voltage nodes, etc. call cktsetup; This is needed to setup vector mamory allocation for vectors and branch nodes load_binary_data(info); Overwrite the allocated numbers, rhs etc, with saved data */ if (ft_curckt && !strstr(ft_curckt->ci_name, "script")) { /* Circuit, not a script */ fprintf(cp_err, "Error: there is already a circuit loaded.\n"); return; } /* source the circuit */ inp_source(wl->wl_word); if (!ft_curckt) return; /* allocate all the vectors, with luck! */ if (!error) error = CKTsetup(ft_curckt->ci_ckt); if (!error) error = CKTtemp(ft_curckt->ci_ckt); if (error) { fprintf(cp_err, "Some error in the CKT setup fncts!\n"); return; } /* so it resumes ... */ ft_curckt->ci_inprogress = TRUE; /* now load the binary file */ ckt = ft_curckt->ci_ckt; file = fopen(wl->wl_next->wl_word, "rb"); if (!file) { fprintf(cp_err, "Error: Couldn't open \"%s\" for reading\n", wl->wl_next->wl_word); return; } fread(&tmpI, sizeof(int), 1, file); if (tmpI != sizeof(CKTcircuit)) { fprintf(cp_err, "loaded num: %d, expected num: %ld\n", tmpI, (long)sizeof(CKTcircuit)); fprintf(cp_err, "Error: snapshot saved with different version of spice\n"); fclose(file); return; } my_ckt = TMALLOC(CKTcircuit, 1); fread(my_ckt, sizeof(CKTcircuit), 1, file); #define _t(name) ckt->name = my_ckt->name #define _ta(name, size) \ do { int __i; for (__i = 0; __i < size; __i++) _t(name[__i]); } while(0) _t(CKTtime); _t(CKTdelta); _ta(CKTdeltaOld, 7); _t(CKTtemp); _t(CKTnomTemp); _t(CKTvt); _ta(CKTag, 7); _t(CKTorder); _t(CKTmaxOrder); _t(CKTintegrateMethod); _t(CKTxmu); _t(CKTindverbosity); _t(CKTepsmin); _t(CKTniState); _t(CKTmaxEqNum); _t(CKTcurrentAnalysis); _t(CKTnumStates); _t(CKTmode); _t(CKTbypass); _t(CKTdcMaxIter); _t(CKTdcTrcvMaxIter); _t(CKTtranMaxIter); _t(CKTbreakSize); _t(CKTbreak); _t(CKTsaveDelta); _t(CKTminBreak); _t(CKTabstol); _t(CKTpivotAbsTol); _t(CKTpivotRelTol); _t(CKTreltol); _t(CKTchgtol); _t(CKTvoltTol); _t(CKTgmin); _t(CKTgshunt); _t(CKTdelmin); _t(CKTtrtol); _t(CKTfinalTime); _t(CKTstep); _t(CKTmaxStep); _t(CKTinitTime); _t(CKTomega); _t(CKTsrcFact); _t(CKTdiagGmin); _t(CKTnumSrcSteps); _t(CKTnumGminSteps); _t(CKTgminFactor); _t(CKTnoncon); _t(CKTdefaultMosM); _t(CKTdefaultMosL); _t(CKTdefaultMosW); _t(CKTdefaultMosAD); _t(CKTdefaultMosAS); _t(CKThadNodeset); _t(CKTfixLimit); _t(CKTnoOpIter); _t(CKTisSetup); #ifdef XSPICE _t(CKTadevFlag); #endif _t(CKTtimeListSize); _t(CKTtimeIndex); _t(CKTsizeIncr); _t(CKTtryToCompact); _t(CKTbadMos3); _t(CKTkeepOpInfo); _t(CKTcopyNodesets); _t(CKTnodeDamping); _t(CKTabsDv); _t(CKTrelDv); _t(CKTtroubleNode); #undef _foo #define _foo(name, type, _size) \ do { \ int __i; \ fread(&__i, sizeof(int), 1, file); \ if (__i) { \ if (name) \ tfree(name); \ name = (type *)tmalloc((size_t) __i); \ fread(name, 1, (size_t) __i, file); \ } else { \ fprintf(cp_err, "size for vector " #name " is 0\n"); \ } \ if ((_size) != -1 && __i != (_size) * (int)sizeof(type)) { \ fprintf(cp_err, "expected %ld, but got %d for "#name"\n", (_size)*(long)sizeof(type), __i); \ } \ } while(0) for (i = 0; i <= ckt->CKTmaxOrder+1; i++) _foo(ckt->CKTstates[i], double, ckt->CKTnumStates); size = SMPmatSize(ckt->CKTmatrix) + 1; _foo(ckt->CKTrhs, double, size); _foo(ckt->CKTrhsOld, double, size); _foo(ckt->CKTrhsSpare, double, size); _foo(ckt->CKTirhs, double, size); _foo(ckt->CKTirhsOld, double, size); _foo(ckt->CKTirhsSpare, double, size); // _foo(ckt->CKTrhsOp, double, size); // _foo(ckt->CKTsenRhs, double, size); // _foo(ckt->CKTseniRhs, double, size); // _foo(ckt->CKTtimePoints, double, -1); // _foo(ckt->CKTdeltaList, double, -1); _foo(ckt->CKTbreaks, double, ckt->CKTbreakSize); { /* avoid invalid lvalue assignment errors in the macro _foo() */ TSKtask *lname = NULL; _foo(lname, TSKtask, 1); ft_curckt->ci_curTask = lname; } /* To stop the Free */ ft_curckt->ci_curTask->TSKname = NULL; ft_curckt->ci_curTask->jobs = NULL; _foo(ft_curckt->ci_curTask->TSKname, char, -1); { TRANan *lname = NULL; _foo(lname, TRANan, -1); ft_curckt->ci_curTask->jobs = (JOB *)lname; } ft_curckt->ci_curTask->jobs->JOBname = NULL; _foo(ft_curckt->ci_curTask->jobs->JOBname, char, -1); ft_curckt->ci_curTask->jobs->JOBnextJob = NULL; ckt->CKTcurJob = ft_curckt->ci_curTask->jobs; ((TRANan *)ft_curckt->ci_curTask->jobs)->TRANplot = NULL; _foo(ckt->CKTstat, STATistics, 1); ckt->CKTstat->STATdevNum = NULL; _foo(ckt->CKTstat->STATdevNum, STATdevList, -1); #ifdef XSPICE _foo(ckt->evt, Evt_Ckt_Data_t, 1); _foo(ckt->enh, Enh_Ckt_Data_t, 1); g_mif_info.breakpoint.current = ckt->enh->breakpoint.current; g_mif_info.breakpoint.last = ckt->enh->breakpoint.last; #endif tfree(my_ckt); fclose(file); /* Finally to resume the plot in some fashion */ /* a worked out version of this should be enough */ { IFuid *nameList; int numNames; IFuid timeUid; error = CKTnames(ckt, &numNames, &nameList); if (error) { fprintf(cp_err, "error in CKTnames\n"); return; } SPfrontEnd->IFnewUid (ckt, &timeUid, NULL, "time", UID_OTHER, NULL); error = SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob, ckt->CKTcurJob->JOBname, timeUid, IF_REAL, numNames, nameList, IF_REAL, &(((TRANan*)ckt->CKTcurJob)->TRANplot)); if (error) { fprintf(cp_err, "error in CKTnames\n"); return; } } } void com_snsave(wordlist *wl) { FILE *file; int i, size; CKTcircuit *ckt; TSKtask *task; if (!ft_curckt) { fprintf(cp_err, "Error: there is no circuit loaded.\n"); return; } else if (!ft_curckt->ci_ckt) { /* Set noparse? */ fprintf(cp_err, "Error: circuit not parsed.\n"); return; } /* save the data */ ckt = ft_curckt->ci_ckt; #ifdef XSPICE if (ckt->CKTadevFlag == 1) { fprintf(cp_err, "Warning: snsave not implemented for XSPICE A devices.\n"); fprintf(cp_err, " Command 'snsave' will be ingnored!\n"); return; } #endif task = ft_curckt->ci_curTask; if (task->jobs->JOBtype != 4) { fprintf(cp_err, "Only saving of tran analysis is implemented\n"); return; } file = fopen(wl->wl_word, "wb"); if (!file) { fprintf(cp_err, "Error: Couldn't open \"%s\" for writing\n", wl->wl_word); return; } #undef _foo #define _foo(name, type, num) \ do { \ int __i; \ if (name) { \ __i = (num) * (int)sizeof(type); fwrite(&__i, sizeof(int), 1, file); \ if ((num)) \ fwrite(name, sizeof(type), (size_t)(num), file); \ } else { \ __i = 0; \ fprintf(cp_err, #name " is NULL, zero written\n"); \ fwrite(&__i, sizeof(int), 1, file); \ } \ } while(0) _foo(ckt, CKTcircuit, 1); /* To save list double *(CKTstates[8]); double *CKTrhs; double *CKTrhsOld; double *CKTrhsSpare; double *CKTirhs; double *CKTirhsOld; double *CKTirhsSpare; double *CKTrhsOp; double *CKTsenRhs; double *CKTseniRhs; double *CKTtimePoints; list of all accepted timepoints in the current transient simulation double *CKTdeltaList; list of all timesteps in the current transient simulation */ for (i = 0; i <= ckt->CKTmaxOrder+1; i++) _foo(ckt->CKTstates[i], double, ckt->CKTnumStates); size = SMPmatSize(ckt->CKTmatrix) + 1; _foo(ckt->CKTrhs, double, size); _foo(ckt->CKTrhsOld, double, size); _foo(ckt->CKTrhsSpare, double, size); _foo(ckt->CKTirhs, double, size); _foo(ckt->CKTirhsOld, double, size); _foo(ckt->CKTirhsSpare, double, size); // _foo(ckt->CKTrhsOp, double, size); // _foo(ckt->CKTsenRhs, double, size); // _foo(ckt->CKTseniRhs, double, size); // _foo(ckt->CKTtimePoints, double, ckt->CKTtimeListSize); // _foo(ckt->CKTdeltaList, double, ckt->CKTtimeListSize); /* need to save the breakpoints, or something */ _foo(ckt->CKTbreaks, double, ckt->CKTbreakSize); /* now save the TSK struct, ft_curckt->ci_curTask*/ _foo(task, TSKtask, 1); _foo(task->TSKname, char, ((int)strlen(task->TSKname)+1)); /* now save the JOB struct task->jobs */ /* lol, only allow one job, tough! */ /* Note that JOB is a base class, need to save actual type!! */ _foo(task->jobs, TRANan, 1); _foo(task->jobs->JOBname, char, ((int)strlen(task->jobs->JOBname)+1)); /* Finally the stats */ _foo(ckt->CKTstat, STATistics, 1); _foo(ckt->CKTstat->STATdevNum, STATdevList, 1); #ifdef XSPICE /* FIXME struct ckt->evt->data and others are not stored thus snsave, snload not compatible with XSPICE code models*/ _foo(ckt->evt, Evt_Ckt_Data_t, 1); _foo(ckt->enh, Enh_Ckt_Data_t, 1); #endif fclose(file); fprintf(stdout, "Snapshot saved to %s.\n", wl->wl_word); } int ft_find_analysis(char *name) { int j; for (j = 0; j < ft_sim->numAnalyses; j++) if (strcmp(ft_sim->analyses[j]->name, name) == 0) return j; return -1; } IFparm * ft_find_analysis_parm(int which, char *name) { int i; for (i = 0; i < ft_sim->analyses[which]->numParms; i++) if (!strcmp(ft_sim->analyses[which]->analysisParms[i].keyword, name)) return &(ft_sim->analyses[which]->analysisParms[i]); return NULL; } tmpk8ny_4pz/src/frontend/control.h0000644000175000017500000000310413546075722017415 0ustar carstencarsten/********** * Header file for control.c **********/ #ifndef ngspice_CONTROL_H #define ngspice_CONTROL_H #include "ngspice/bool.h" /* Stuff to do control structures. We keep a history (seperate from * the cshpar history, for now at least) of commands and their event * numbers, with a block considered as a statement. In a goto, the * first word in co_text is where to go, likewise for label. For * conditional controls, we have to call ft_getpnames and ft_evaluate * each time, since the dvec pointers will change... Also we should do * variable and backquote substitution each time... */ struct control { int co_type; /* One of CO_* ... */ wordlist *co_cond; /* if, while, dowhile */ char *co_foreachvar; /* foreach */ int co_numtimes; /* repeat, break & continue levels */ int co_timestodo; /* the number of times left during a repeat loop */ wordlist *co_text; /* Ordinary text and foreach values. */ struct control *co_parent; /* If this is inside a block. */ struct control *co_children; /* The contents of this block. */ struct control *co_elseblock; /* For if-then-else. */ struct control *co_next; struct control *co_prev; }; enum co_command { CO_UNFILLED, CO_STATEMENT, CO_WHILE, CO_DOWHILE, CO_IF, CO_FOREACH, CO_BREAK, CO_CONTINUE, CO_LABEL, CO_GOTO, CO_REPEAT }; #define CONTROLSTACKSIZE 256 /* Better be enough. */ extern struct control *control[CONTROLSTACKSIZE]; extern struct control *cend[CONTROLSTACKSIZE]; extern int stackp; #endif tmpk8ny_4pz/src/frontend/com_strcmp.h0000644000175000017500000000014313546075722020103 0ustar carstencarsten#ifndef ngspice_COM_STRCMP_H #define ngspice_COM_STRCMP_H void com_strcmp(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/diff.c0000644000175000017500000002560313546075722016650 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group Modified: 2001 Paolo Nenzi (printnum) Patched: 2010/2012 by Bill Swartz (hash table for vectors) **********/ /* * Do a 'diff' of two plots. */ #include "ngspice/ngspice.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/sim.h" #include "diff.h" #include #include #include "variable.h" static bool nameeq(const char *n1,const char *n2); static char *canonical_name(const char *name, SPICE_DSTRINGPTR dbuf_p, bool make_i_name_lower); static char * canonical_name(const char *name, SPICE_DSTRINGPTR dbuf_p, bool make_i_name_lower) { spice_dstring_reinit(dbuf_p); /* Reset dynamic buffer */ /* "i(some_name)" -> "some_name#branch" */ /* "I(some_name)" -> "some_name#branch" */ if (ciprefix("i(", name)) { static const char sz_branch[] = "#branch"; const char *p_start = name + 2; size_t n = strlen(p_start) - 1; /* copy all but final ')' */ if (make_i_name_lower) { (void) spice_dstring_append_lower(dbuf_p, p_start, (int) n); } else { (void) spice_dstring_append(dbuf_p, p_start, (int) n); } return spice_dstring_append(dbuf_p, sz_branch, sizeof sz_branch / sizeof *sz_branch - 1); } /* Convert a name starting with a digit, such as a numbered node to * something like v(33) */ if (isdigit_c(*name)) { (void) spice_dstring_append(dbuf_p, "v(", 2); (void) spice_dstring_append(dbuf_p, name, -1); return spice_dstring_append_char(dbuf_p, ')'); } /* Finally if neither of the special cases above occur, there is * no need to do anything with the name. A slight improvement in * performance could be achieved by simply returning the name * argument. Making a copy ensures that it can be modified without * changing the original, but in the current use cases that is * not an issue. */ return spice_dstring_append(dbuf_p, name, -1); } /* end of function canonical_name */ /* Determine if two vectors have the 'same' name. Note that this compare can * be performed by using the "canonical" forms returned by * canonical_name(). */ static bool nameeq(const char *n1, const char *n2) { /* First compare them the way they came in, case insensitive. * If they match nothing more to do */ if (cieq(n1, n2)) { return TRUE; } SPICE_DSTRING ds1, ds2; /* Buffers to build canonical names */ /* Init the dynamic string buffers */ spice_dstring_init(&ds1); spice_dstring_init(&ds2); /* Compare canonical names */ const BOOL rc = (BOOL) cieq(canonical_name(n1, &ds1, FALSE), canonical_name(n2, &ds2, FALSE)); /* Free the dynamic string buffers */ spice_dstring_free(&ds1); spice_dstring_free(&ds2); return rc; } /* end of function nameeq */ void com_diff(wordlist *wl) { double vntol, abstol, reltol, tol, cmax, cm1, cm2; struct plot *p1, *p2 = NULL; struct dvec *v1, *v2; double d1, d2; ngcomplex_t c1, c2, c3; int i, j; char *v1_name; /* canonical v1 name */ char *v2_name; /* canonical v2 name */ NGHASHPTR crossref_p; /* cross reference hash table */ SPICE_DSTRING ibuf; /* used to build canonical name */ wordlist *tw; char numbuf[BSIZE_SP], numbuf2[BSIZE_SP], numbuf3[BSIZE_SP], numbuf4[BSIZE_SP]; /* For printnum */ if (!cp_getvar("diff_vntol", CP_REAL, &vntol, 0)) vntol = 1.0e-6; if (!cp_getvar("diff_abstol", CP_REAL, &abstol, 0)) abstol = 1.0e-12; if (!cp_getvar("diff_reltol", CP_REAL, &reltol, 0)) reltol = 0.001; /* Let's try to be clever about defaults. This code is ugly. */ if (!wl || !wl->wl_next) { if (plot_list && plot_list->pl_next && !plot_list->pl_next->pl_next) { p1 = plot_list; p2 = plot_list->pl_next; if (wl && !eq(wl->wl_word, p1->pl_typename) && !eq(wl->wl_word, p2->pl_typename)) { fprintf(cp_err, "Error: no such plot \"%s\"\n", wl->wl_word); return; } fprintf(cp_err, "Plots are \"%s\" and \"%s\"\n", plot_list->pl_typename, plot_list->pl_next->pl_typename); if (wl) wl = NULL; } else { fprintf(cp_err, "Error: plot names not given.\n"); return; } } else { for (p1 = plot_list; p1; p1 = p1->pl_next) if (eq(wl->wl_word, p1->pl_typename)) break; if (!p1) { fprintf(cp_err, "Error: no such plot %s\n", wl->wl_word); return; } wl = wl->wl_next; } if (!p2) { for (p2 = plot_list; p2; p2 = p2->pl_next) if (eq(wl->wl_word, p2->pl_typename)) break; if (!p2) { fprintf(cp_err, "Error: no such plot %s\n", wl->wl_word); return; } wl = wl->wl_next; } /* Now do some tests to make sure these plots are really the * same type, etc. */ if (!eq(p1->pl_name, p2->pl_name)) fprintf(cp_err, "Warning: plots %s and %s seem to be of different types\n", p1->pl_typename, p2->pl_typename); if (!eq(p1->pl_title, p2->pl_title)) fprintf(cp_err, "Warning: plots %s and %s seem to be from different circuits\n", p1->pl_typename, p2->pl_typename); /* This may not be the best way to do this. It wasn't :). The original * was O(n2) - not good. Now use a hash table to reduce it to O(n). */ for (v1 = p1->pl_dvecs; v1; v1 = v1->v_next) v1->v_link2 = NULL; spice_dstring_init(&ibuf); crossref_p = nghash_init(NGHASH_MIN_SIZE); nghash_unique(crossref_p, FALSE); for (v2 = p2->pl_dvecs; v2; v2 = v2->v_next) { v2->v_link2 = NULL; v2_name = canonical_name(v2->v_name, &ibuf, TRUE); nghash_insert(crossref_p, v2_name, v2); } for (v1 = p1->pl_dvecs; v1; v1 = v1->v_next) { v1_name = canonical_name(v1->v_name, &ibuf, TRUE); for (v2 = nghash_find(crossref_p, v1_name); v2; v2 = nghash_find_again(crossref_p, v1_name)) { if (!v2->v_link2 && ((v1->v_flags & (VF_REAL | VF_COMPLEX)) == (v2->v_flags & (VF_REAL | VF_COMPLEX))) && (v1->v_type == v2->v_type)) { v1->v_link2 = v2; v2->v_link2 = v1; break; } } } spice_dstring_free(&ibuf); nghash_free(crossref_p, NULL, NULL); for (v1 = p1->pl_dvecs; v1; v1 = v1->v_next) if (!v1->v_link2) fprintf(cp_err, ">>> %s vector %s in %s not in %s, or of wrong type\n", isreal(v1) ? "real" : "complex", v1->v_name, p1->pl_typename, p2->pl_typename); for (v2 = p2->pl_dvecs; v2; v2 = v2->v_next) if (!v2->v_link2) fprintf(cp_err, ">>> %s vector %s in %s not in %s, or of wrong type\n", isreal(v2) ? "real" : "complex", v2->v_name, p2->pl_typename, p1->pl_typename); /* Throw out the ones that aren't in the arg list */ if (wl && !eq(wl->wl_word, "all")) { /* Just in case */ for (v1 = p1->pl_dvecs; v1; v1 = v1->v_next) if (v1->v_link2) { for (tw = wl; tw; tw = tw->wl_next) if (nameeq(v1->v_name, tw->wl_word)) break; if (!tw) v1->v_link2 = NULL; } for (v2 = p2->pl_dvecs; v2; v2 = v2->v_next) if (v2->v_link2) { for (tw = wl; tw; tw = tw->wl_next) if (nameeq(v2->v_name, tw->wl_word)) break; if (!tw) v2->v_link2 = NULL; } } /* Now we have all the vectors linked to their twins. Travel * down each one and print values that differ enough. */ for (v1 = p1->pl_dvecs; v1; v1 = v1->v_next) { if (!v1->v_link2) continue; v2 = v1->v_link2; if (v1->v_type == SV_VOLTAGE) tol = vntol; else tol = abstol; j = MAX(v1->v_length, v2->v_length); for (i = 0; i < j; i++) { if (v1->v_length <= i) { fprintf(cp_out, ">>> %s is %d long in %s and %d long in %s\n", v1->v_name, v1->v_length, p1->pl_typename, v2->v_length, p2->pl_typename); break; } else if (v2->v_length <= i) { fprintf(cp_out, ">>> %s is %d long in %s and %d long in %s\n", v2->v_name, v2->v_length, p2->pl_typename, v1->v_length, p1->pl_typename); break; } else { if (isreal(v1)) { d1 = v1->v_realdata[i]; d2 = v2->v_realdata[i]; if (MAX(fabs(d1), fabs(d2)) * reltol + tol < fabs(d1 - d2)) { printnum(numbuf, d1); fprintf(cp_out, "%s.%s[%d] = %-15s ", p1->pl_typename, v1->v_name, i, numbuf); printnum(numbuf, d2); fprintf(cp_out, "%s.%s[%d] = %s\n", p2->pl_typename, v2->v_name, i, numbuf); } } else { c1 = v1->v_compdata[i]; c2 = v2->v_compdata[i]; realpart(c3) = realpart(c1) - realpart(c2); imagpart(c3) = imagpart(c1) - imagpart(c2); /* Stupid evil PC compilers */ cm1 = cmag(c1); cm2 = cmag(c2); cmax = MAX(cm1, cm2); if (cmax * reltol + tol < cmag(c3)) { printnum(numbuf, realpart(c1)); printnum(numbuf2, imagpart(c1)); printnum(numbuf3, realpart(c2)); printnum(numbuf4, imagpart(c2)); fprintf(cp_out, "%s.%s[%d] = %-10s, %-10s %s.%s[%d] = %-10s, %s\n", p1->pl_typename, v1->v_name, i, numbuf, numbuf2, p2->pl_typename, v2->v_name, i, numbuf3, numbuf4); } } } } } } tmpk8ny_4pz/src/frontend/parse.h0000644000175000017500000000066013546075722017053 0ustar carstencarsten/************* * Header file for parse.c * 1999 E. Rouat ************/ #ifndef ngspice_PARSE_H #define ngspice_PARSE_H #include "ngspice/pnode.h" #include "ngspice/wordlist.h" #ifndef free_pnode #define free_pnode(ptr) \ do { \ free_pnode_x(ptr); \ ptr = NULL; \ } while(0) #endif #endif tmpk8ny_4pz/src/frontend/dvec.c0000644000175000017500000000550113546075722016654 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/dvec.h" struct dvec * dvec_alloc(char *name, int type, short flags, int length, void *storage) { struct dvec *rv = TMALLOC(struct dvec, 1); /* If the allocation failed, return NULL as a failure flag. * As of 2019-03, TMALLOC will not return on failure, so this check is * redundant, but it may be useful if it is decided to allow the * allocation functions to return NULL on failure and handle recovery * by the calling functions */ if (!rv) { return NULL; } /* Set all fields to 0 */ ZERO(rv, struct dvec); /* Set information on the vector from parameters. Note that storage for * the name string belongs to the dvec when this function returns. */ rv->v_name = name; rv->v_type = type; rv->v_flags = flags; rv->v_length = length; rv->v_alloc_length = length; if (length == 0) { /* Redundant due to ZERO() call above */ rv->v_realdata = NULL; rv->v_compdata = NULL; } else if (flags & VF_REAL) { /* Vector consists of real data. Use the supplied storage if given * or allocate if not */ rv->v_realdata = storage ? (double *) storage : TMALLOC(double, length); rv->v_compdata = NULL; } else if (flags & VF_COMPLEX) { /* Vector holds complex data. Perform actions as for real data */ rv->v_realdata = NULL; rv->v_compdata = storage ? (ngcomplex_t *) storage : TMALLOC(ngcomplex_t, length); } /* Set remaining fields to none/unknown. Again not required due to * the ZERO() call */ rv->v_plot = NULL; rv->v_scale = NULL; rv->v_numdims = 0; /* Really "unknown" */ return rv; } void dvec_realloc(struct dvec *v, int length, void *storage) { if (isreal(v)) { if (storage) { tfree(v->v_realdata); v->v_realdata = (double *) storage; } else { v->v_realdata = TREALLOC(double, v->v_realdata, length); } } else { if (storage) { tfree(v->v_compdata); v->v_compdata = (ngcomplex_t *) storage; } else { v->v_compdata = TREALLOC(ngcomplex_t, v->v_compdata, length); } } v->v_length = length; v->v_alloc_length = length; } void dvec_extend(struct dvec *v, int length) { if (isreal(v)) v->v_realdata = TREALLOC(double, v->v_realdata, length); else v->v_compdata = TREALLOC(ngcomplex_t, v->v_compdata, length); v->v_alloc_length = length; } void dvec_trunc(struct dvec *v, int length) { v->v_length = length; } void dvec_free(struct dvec *v) { if (v->v_name) tfree(v->v_name); if (v->v_realdata) tfree(v->v_realdata); if (v->v_compdata) tfree(v->v_compdata); tfree(v); } tmpk8ny_4pz/src/frontend/hcomp.h0000644000175000017500000000014313546075722017043 0ustar carstencarsten#ifndef ngspice_HCOMP_H #define ngspice_HCOMP_H int hcomp(const void *a, const void *b); #endif tmpk8ny_4pz/src/frontend/gens.h0000644000175000017500000000055113546075722016674 0ustar carstencarsten/************* * Header file for gens.c * 1999 E. Rouat ************/ #ifndef ngspice_GENS_H #define ngspice_GENS_H #include "ngspice/dgen.h" void wl_forall(wordlist *wl, void (*fn)(wordlist*, dgen*), dgen *data); int dgen_for_n(dgen *dg, int n, int (*fn) (dgen*, IFparm*, int), IFparm *data, int subindex); void dgen_nth_next(dgen **dg, int n); #endif tmpk8ny_4pz/src/frontend/com_strcmp.c0000644000175000017500000000075313546075722020105 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/bool.h" #include "ngspice/wordlist.h" #include "com_strcmp.h" #include "quote.h" #include "variable.h" /* This is a truly evil thing */ void com_strcmp(wordlist *wl) { char *var, *s1, *s2; int i; var = wl->wl_word; s1 = cp_unquote(wl->wl_next->wl_word); s2 = cp_unquote(wl->wl_next->wl_next->wl_word); i = strcmp(s1, s2); tfree(s1);/*DG cp_unquote memory leak*/ tfree(s2); cp_vset(var, CP_NUM, &i); } tmpk8ny_4pz/src/frontend/README0000644000175000017500000000040313546075722016443 0ustar carstencarstenThis directory contains the code that is behind the commands of the interactive frontend. Note that every command has a source file associated with it. The source file is prefixed with `com_' to distinguish command source files from other supporting code. tmpk8ny_4pz/src/frontend/com_display.h0000644000175000017500000000020413546075722020236 0ustar carstencarsten#ifndef ngspice_COM_DISPLAY_H #define ngspice_COM_DISPLAY_H #include "ngspice/wordlist.h" void com_display(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/quote.h0000644000175000017500000000020613546075722017072 0ustar carstencarsten/************* * Header file for quote.c * 1999 E. Rouat ************/ #ifndef ngspice_QUOTE_H #define ngspice_QUOTE_H #endif tmpk8ny_4pz/src/frontend/error.c0000644000175000017500000000352413546075722017067 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Print out in more detail what a floating point error was. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include #ifdef HAS_WINGUI void winmessage(char *new_msg); #elif defined SHARED_MODULE extern ATTRIBUTE_NORETURN void shared_exit(int status); #endif /* global error message buffer */ char ErrorMessage[1024]; ATTRIBUTE_NORETURN void controlled_exit(int status) { #ifdef HAS_WINGUI if (status) winmessage("Fatal error in NGSPICE"); exit(status); #elif defined SHARED_MODULE /* do not exit, if shared ngspice, but call back */ shared_exit(status); #else if (status) fprintf(stderr, "\nERROR: fatal error in ngspice, exit(%d)\n", status); exit(status); #endif } void fperror(char *mess, int code) { NG_IGNORE(code); fprintf(cp_err, "%s: floating point exception.\n", mess); } /* Print a spice error message. */ void ft_sperror(int code, char *mess) { char *errstring = if_errstring(code); fprintf(cp_err, "%s: %s\n", mess, errstring); tfree(errstring); } void fatal(void) { cp_ccon(FALSE); #if defined(FTEDEBUG) && defined(SIGQUIT) (void) signal(SIGQUIT, SIG_DFL); (void) kill(getpid(), SIGQUIT); #endif #if defined SHARED_MODULE /* do not exit, if shared ngspice, but call back */ shared_exit(EXIT_BAD); #else exit(EXIT_BAD); #endif } /* These error messages are from internal consistency checks. */ void internalerror(char *message) { fprintf(stderr, "ERROR: (internal) %s\n", message); } /* These errors are from external routines like fopen. */ void externalerror(char *message) { fprintf(stderr, "ERROR: (external) %s\n", message); } tmpk8ny_4pz/src/frontend/subckt.h0000644000175000017500000000043013546075722017227 0ustar carstencarsten/************* * Header file for subckt.c * 1999 E. Rouat ************/ #ifndef ngspice_SUBCKT_H #define ngspice_SUBCKT_H struct card *inp_subcktexpand(struct card *deck); struct card *inp_deckcopy(struct card *deck); struct card *inp_deckcopy_oc(struct card *deck); #endif tmpk8ny_4pz/src/frontend/dimens.c0000644000175000017500000002555513546075722017225 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 David A. Gates, U. C. Berkeley CAD Group **********/ /* * Read and write dimension/index arrays via strings. */ #include "ngspice/ngspice.h" #include "ngspice/dvec.h" /* For MAXDIMS */ #include "dimens.h" #include "ngspice/stringskip.h" static int atodims_bracketed(const char *p, int *data, int *p_n_dim); static int atodims_unbracketed(const char *p, int *data, int *p_n_dim); static int get_bracketed_dim(const char *p, int *p_val); static int atodims_csv(const char *p, int *data, int *p_n_dim); static int get_dim(const char *p, int *p_val); /* * Create a string of the form "12,1,10". * * Parameters * dim_data: Array of sizes of dimensions, [12, 1, 10] for the example * n_dim: Number of elements in the array, 3 in the example * retstring: Address of buffer where the string is returned. * Remarks * It is assumed that the buffer in retstring is large enough, which for * MAXDIMS, would require MAXDIMS * 11 bytes in the worst case assuming * 32-bit ints. A looser but more general bound only assuming 8-bit bytes * would be MAXDIMS * (3 * sizeof(int) + 1). */ void dimstring(const int *dim_data, int n_dim, char *retstring) { /* Handle case of no dimensions */ if (dim_data == (int *) NULL || n_dim < 1) { *retstring = '\0'; return; } /* Append each dimension */ retstring += sprintf(retstring, "%d", dim_data[0]); /* first */ int i; for (i = 1; i < n_dim; i++) { /* rest are prefixed by a comma */ retstring += sprintf(retstring, ",%d", dim_data[i]); } } /* end of function dimstring */ /* * Create a string of the form "[12][1][10]" in retstring. * * Parameters * dim_data: Array of sizes of dimensions, [12, 1, 10] for the example * n_dim: Number of elements in the array, 3 in the example * retstring: Address of buffer where the string is returned. * Remarks * It is assumed that the buffer in retstring is large enough, which for * MAXDIMS, would require MAXDIMS * 12 + 1 bytes in the worst case assuming * 32-bit ints. A looser but more general bound only assuming 8-bit bytes * would be MAXDIMS * (3 * sizeof(int) + 2) + 1. */ void indexstring(const int *dim_data, int n_dim, char *retstring) { /* Handle case of no dimensions */ if (dim_data == (int *) NULL || n_dim < 1) { *retstring = '\0'; return; } /* Append each dimension */ int i; for (i = 0; i < n_dim; i++) { retstring += sprintf(retstring, "[%d]", dim_data[i]); } } /* end of function indexstring */ /* * Add one to anstrchr into an array with sizes in dims. * Return 1 when all counters overflow at once. */ int incindex(int *counts, int numcounts, const int *dims, int numdims) { int i, start; if (!counts || numcounts < 1 || !dims || numdims < 1) return 0; start = numcounts - 1; for (i = start; i >= 0; i--) if (++counts[i] < dims[i]) break; /* This counter is not maxed out. */ else counts[i] = 0; if (i == 0) return (1); else return (0); } /* * Read a string of one of the following forms into a dimensions array: * [12][1][10] * [12,1,10] * 12,1,10 * 12, 1, 10 * 12 , 1 , 10 * Basically, we require that all brackets be matched, that all numbers * be separated by commas or by "][", that all whitespace is ignored, and * the beginning [ and end ] are ignored if they exist. The only valid * characters in the string are brackets, commas, spaces, and digits. * If any dimension is blank, its entry in the array is set to 0. * * Return 0 on success, 1 on failure. */ int atodims(const char *p, int *data, int *p_n_dim) { /* Validate arguments partially */ if (!data || !p_n_dim) { return 1; } /* NULL string = no dimensions */ if (!p) { *p_n_dim = 0; return 0; } /* Move to first "real" character */ p = skip_ws(p); /* Allowed first char is [ to start bracked string or a number */ return *p == '[' ? atodims_bracketed(p, data, p_n_dim) : atodims_unbracketed(p, data, p_n_dim); } /* end of function atodims */ /* This function processes a dimension string of the form * [1,2,3,4] or [1][2][3][4]. Whitespace is allowed anywhere except * at the beginning of the string or between the digits of a dimension. * * Return codes * 0: OK * +1: Error */ static int atodims_bracketed(const char *p, int *data, int *p_n_dim) { /* Process the first element, which is special because it determines * if the string is of form [] or [1,2...] or [1][2]... */ p = skip_ws(++p); /* Step to number */ { int rc; /* Get the dimension value exiting with an error on failure */ if ((rc = get_dim(p, data)) <= 0) { /* no number or overflow */ if (rc < 0) { /* overflow */ return +1; } /* Handle special case of [] */ if (*p == ']') { *p_n_dim = 0; return 0; } return +1; /* else an error */ } p = skip_ws(p + rc); /* at comma or ] (or error) */ switch (*p) { case ',': /* form [1,2,... */ *p_n_dim = 1; rc = atodims_csv(++p, data, p_n_dim); if (rc <= 1) { /* error or invalid termination */ return +1; /* Return error */ } /* Else scan ended with ']', but did it end the string, * whitespace excluded? */ p = skip_ws(p + rc); return *p != '\0'; case ']': /* form [1][2]... */ ++p; /* step past ']' */ break; default: /* invalid char */ return +1; } } /* Continue parsing form [1][2]... */ unsigned int n_dim = 1; /* already 1 dim from above */ for ( ; ; ) { if (n_dim == MAXDIMS) { /* too many dimensions */ return +1; } int rc = get_bracketed_dim(p, data + n_dim); if (rc <= 0) { /* error or normal exit */ *p_n_dim = n_dim; return !!rc; } p += rc; /* step after the dimension that was processed */ ++n_dim; /* one more dimension */ } /* end of loop getting dimensions */ } /* end of function atodims_bracketed */ /* This function processes a dimension string of the form * 1,2,3,4. Whiltespace is allowed anywhere except * at the beginning of the string or between the digits of a dimension. * * Return codes * 0: OK * +1: Error */ static int atodims_unbracketed(const char *p, int *data, int *p_n_dim) { *p_n_dim = 0; /* either "" so 0 or init for atodims_csv */ if (*p == '\0') { /* special case of "" */ return 0; } /* Scan comma-separated dimensions. Must end with '\0' (rc=0) */ return !!atodims_csv(p, data, p_n_dim); } /* end of function atodims_unbracked */ /* This function processes dimension strings of the form * 1,2,3,4 and 1,2,3,4]. Whiltespace is allowed anywhere except * at the beginning of the string or between the digits of a dimension. * On entry, *p_n_dim is the number of dimensions already added to data * and p points to the first number to be processed. * * Return codes * -1: Error * 0: OK, scan ended by '\0' * >0: OK, scan ended by ']', returned value = # chars processed */ static int atodims_csv(const char *p, int *data, int *p_n_dim) { const char *p0 = p; unsigned int n_dim = (unsigned int) *p_n_dim; for ( ; ; ) { int val; p = skip_ws(p); int rc = get_dim(p, &val); if (rc <= 0) { /* No number or overflow */ return -1; } /* Dimension was read */ if (n_dim >= MAXDIMS) { /* too many dimensions */ return -1; } data[n_dim++] = val; /* Add data for this dimension */ p = skip_ws(p + rc); /* step after the dimension that was processed */ /* Should normally be at comma, but there are special cases for * end of regular list or bracketed list */ switch (*p) { case ',': /* inter-dimension comma */ ++p; break; case ']': /* ] ended scan */ *p_n_dim = n_dim; return (int) (p - p0) + 1; case '\0': /* end of string ended scan */ *p_n_dim = n_dim; return 0; default: /* invalid char */ return -1; } /* end of switch over character ending scan */ } /* end of loop getting dimensions */ } /* end of function atodims_csv */ /* This function gets the dimension value in a string of the form * [1] where spaces may appear anywhere except between the digits of the * number. * * Return codes * -1: Error * 0: String ended before '[' * >0: Number of characters processed */ static int get_bracketed_dim(const char *p, int *p_val) { const char *p0 = p; /* save start */ p = skip_ws(p); /* move to opening bracket */ const char char_cur = *p; if (char_cur == '\0') { /* end of string */ return 0; } if (char_cur != '[') { /* no bracket */ return -1; } p = skip_ws(++p); /* move to dimension */ int rc = get_dim(p, p_val); /* read the dimension */ if (rc <= 0) { /* error */ return -1; } p = skip_ws(p + rc); /* move to closing backet */ if (*p != ']') { /* no bracket */ return -1; } return (int) (p - p0) + 1; } /* end of function get_bracketed_dim */ /* This function reads the unsigned number at p as a dimension * * Return codes * -1: overflow * 0: *p is not a digit * >0: Number of characters processed */ static int get_dim(const char *p, int *p_val) { unsigned int val = 0; const char *p0 = p; for ( ; ; ++p) { const char c_cur = *p; unsigned int digit_cur = c_cur - '0'; unsigned int val_new; if (digit_cur > 9) { /* not a digit */ if ((*p_val = (int) val) < 0) { /* overflow */ return -1; } return (int) (p - p0); } /* end of case of not a digit */ if ((val_new = 10 * val + digit_cur) < val) { /* overflow */ return -1; } val = val_new; /* update number */ } /* end of loop over digits */ } /* end of function get_dim */ #ifdef COMPILE_UNUSED_FUNCTIONS /* #ifdef COMPILE_UNUSED_FUNCTIONS added 2019-03-31 */ /* * Count number of empty dimensions in an array. */ int emptydims(int *data, int length) { int i, numempty = 0; for (i = 0; i < length; i++) if (data[i] == 0) numempty++; return (numempty); } /* * Skip to the first character that cannot be part of a dimension string. */ char * skipdims(char *p) { if (!p) return NULL; while (*p && (*p == '[' || *p == ']' || *p == ',' || isspace_c(*p) || isdigit_c(*p))) p++; return (p); } #endif /* COMPILE_UNUSED_FUNCTIONS */ tmpk8ny_4pz/src/frontend/com_dump.h0000644000175000017500000000013413546075722017540 0ustar carstencarsten#ifndef ngspice_COM_DUMP_H #define ngspice_COM_DUMP_H void com_dump(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/com_let.h0000644000175000017500000000017013546075722017357 0ustar carstencarsten#ifndef ngspice_COM_LET_H #define ngspice_COM_LET_H #include "ngspice/wordlist.h" void com_let(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/signal_handler.h0000644000175000017500000000067313546075722020717 0ustar carstencarsten/************* * Header file for signal_handler.c * 1999 E. Rouat ************/ #ifndef ngspice_SIGNAL_HANDLER_H #define ngspice_SIGNAL_HANDLER_H RETSIGTYPE ft_sigintr(void); RETSIGTYPE sigfloat(int sig, int code); RETSIGTYPE sigstop(void); RETSIGTYPE sigcont(void); RETSIGTYPE sigill(void); RETSIGTYPE sigbus(void); RETSIGTYPE sigsegv(void); RETSIGTYPE sig_sys(void); extern JMP_BUF jbuf; extern void ft_sigintr_cleanup(void); #endif tmpk8ny_4pz/src/frontend/postcoms.c0000644000175000017500000007047613546075722017617 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Various post-processor commands having to do with vectors. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/sim.h" #include "ngspice/plot.h" #include "ngspice/graph.h" #include "ngspice/ftedbgra.h" #include "com_display.h" #include "completion.h" #include "postcoms.h" #include "quote.h" #include "variable.h" #include "parser/complete.h" /* va: throwaway */ #include "plotting/plotting.h" static void killplot(struct plot *pl); static void DelPlotWindows(struct plot *pl); /* check if the user want's to delete the scale vector of the current plot. This should not happen, because then redrawing the graph crashes ngspice */ static bool check_cp(char* vecname) { if (plot_cur && plot_cur->pl_scale && plot_cur->pl_scale->v_name && eq(plot_cur->pl_scale->v_name, vecname)) { fprintf(cp_err, "\nWarning: Scale vector '%s' of current plot cannot be deleted!\n", vecname); fprintf(cp_err, " Command 'unlet %s' is ignored.\n\n", vecname); return TRUE; } else return FALSE; } void com_unlet(wordlist *wl) { while (wl) { /* don't delete the scale vector of the current plot */ if (!check_cp(wl->wl_word)) vec_remove(wl->wl_word); wl = wl->wl_next; } } /* Load in a file. */ void com_load(wordlist *wl) { char *copypath; if (!wl) ft_loadfile(ft_rawfile); else while (wl) { /*ft_loadfile(cp_unquote(wl->wl_word)); DG: bad memory leak*/ copypath = cp_unquote(wl->wl_word);/*DG*/ ft_loadfile(copypath); tfree(copypath); wl = wl->wl_next; } /* note: default is to display the vectors in the last (current) plot */ com_display(NULL); } /* Print out the value of an expression. When we are figuring out what to * print, link the vectors we want with v_link2... This has to be done * because of the way temporary vectors are linked together with permanent * ones under the plot. */ void com_print(wordlist *wl) { struct dvec *v, *lv = NULL, *bv, *nv, *vecs = NULL; int i, j, ll, width = DEF_WIDTH, height = DEF_HEIGHT, npoints, lineno; struct pnode *pn, *names; struct plot *p; bool col = TRUE, nobreak = FALSE, noprintscale, plotnames = FALSE; bool optgiven = FALSE; char *s, *buf, *buf2; /*, buf[BSIZE_SP], buf2[BSIZE_SP];*/ char numbuf[BSIZE_SP], numbuf2[BSIZE_SP]; /* Printnum buffers */ int ngood; if (wl == NULL) return; buf = TMALLOC(char, BSIZE_SP); buf2 = TMALLOC(char, BSIZE_SP); if (eq(wl->wl_word, "col")) { col = TRUE; optgiven = TRUE; wl = wl->wl_next; } else if (eq(wl->wl_word, "line")) { col = FALSE; optgiven = TRUE; wl = wl->wl_next; } ngood = 0; names = ft_getpnames(wl, TRUE); for (pn = names; pn; pn = pn->pn_next) { if ((v = ft_evaluate(pn)) == NULL) continue; if (!vecs) vecs = lv = v; else lv->v_link2 = v; for (lv = v; lv->v_link2; lv = lv->v_link2) ; ngood += 1; } if (!ngood) goto done; /* See whether we really have to print plot names. */ for (v = vecs; v; v = v->v_link2) if (vecs->v_plot != v->v_plot) { plotnames = TRUE; break; } if (!optgiven) { /* Figure out whether col or line should be used... */ col = FALSE; for (v = vecs; v; v = v->v_link2) if (v->v_length > 1) { col = TRUE; /* Improvement made to print cases @[sin] = (0 12 13 100K) */ if ((v->v_plot->pl_scale && v->v_length != v->v_plot->pl_scale->v_length) && (*(v->v_name) == '@')) { col = FALSE; } break; } /* With this I have found that the vector has less elements than the SCALE vector * in the linked PLOT. But now I must make sure in case of a print @vin[sin] or * @vin[pulse] * for it appear that the v->v_name begins with '@' * And then be in this case. */ } out_init(); if (!col) { if (cp_getvar("width", CP_NUM, &i, 0)) width = i; if (width < 60) width = 60; if (width > BSIZE_SP - 2) buf = TREALLOC(char, buf, (size_t) width + 1); for (v = vecs; v; v = v->v_link2) { char *basename = vec_basename(v); if (plotnames) (void) sprintf(buf, "%s.%s", v->v_plot->pl_typename, basename); else (void) strcpy(buf, basename); tfree(basename); for (s = buf; *s; s++) ; s--; while (isspace_c(*s)) { *s = '\0'; s--; } ll = 10; /* v->v_rlength = 1 when it comes to make a print @ M1 and does not want to come out on screen * Multiplier factor [m]=1 * @M1 = 0,00e+00 * In any other case rlength not used for anything and only applies in the copy of the vectors. */ if (v->v_rlength == 0) { if (v->v_length == 1) { if (isreal(v)) { printnum(numbuf, *v->v_realdata); out_printf("%s = %s\n", buf, numbuf); } else { printnum(numbuf, realpart(v->v_compdata[0])); printnum(numbuf2, imagpart(v->v_compdata[0])); out_printf("%s = %s,%s\n", buf, numbuf, numbuf2); } } else { out_printf("%s = ( ", buf); for (i = 0; i < v->v_length; i++) if (isreal(v)) { printnum(numbuf, v->v_realdata[i]); (void) strcpy(buf, numbuf); out_send(buf); ll += (int) strlen(buf); ll = (ll + 7) / 8; ll = ll * 8 + 1; if (ll > width) { out_send("\n\t"); ll = 9; } else { out_send("\t"); } } else { /*DG*/ printnum(numbuf, realpart(v->v_compdata[i])); printnum(numbuf2, imagpart(v->v_compdata[i])); (void) sprintf(buf, "%s,%s", numbuf, numbuf2); out_send(buf); ll += (int) strlen(buf); ll = (ll + 7) / 8; ll = ll * 8 + 1; if (ll > width) { out_send("\n\t"); ll = 9; } else { out_send("\t"); } } out_send(")\n"); } //end if (v->v_length == 1) } //end if (v->v_rlength == 1) } // end for loop } else { /* Print in columns. */ if (cp_getvar("width", CP_NUM, &i, 0)) width = i; if (width < 40) width = 40; if (width > BSIZE_SP - 2) { buf = TREALLOC(char, buf, (size_t) width + 1); buf2 = TREALLOC(char, buf2, (size_t) width + 1); } if (cp_getvar("height", CP_NUM, &i, 0)) height = i; if (height < 20) height = 20; nobreak = cp_getvar("nobreak", CP_BOOL, NULL, 0); if (!nobreak && !ft_nopage) nobreak = FALSE; else nobreak = TRUE; noprintscale = cp_getvar("noprintscale", CP_BOOL, NULL, 0); bv = vecs; nextpage: /* Make the first vector of every page be the scale... */ /* XXX But what if there is no scale? e.g. op, pz */ if (!noprintscale && bv->v_plot->pl_ndims) if (bv->v_plot->pl_scale && !vec_eq(bv, bv->v_plot->pl_scale)) { nv = vec_copy(bv->v_plot->pl_scale); vec_new(nv); nv->v_link2 = bv; bv = nv; } ll = 8; for (lv = bv; lv; lv = lv->v_link2) { if (isreal(lv)) ll += 16; /* Two tabs for real, */ else ll += 32; /* 4 for complex. */ /* Make sure we have at least 2 vectors per page... */ if ((ll > width) && (lv != bv) && (lv != bv->v_link2)) break; } /* Print the header on the first page only. */ p = bv->v_plot; j = (width - (int) strlen(p->pl_title)) / 2; /* Yes, keep "(int)" */ if (j < 0) j = 0; for (i = 0; i < j; i++) buf2[i] = ' '; buf2[j] = '\0'; out_send(buf2); out_send(p->pl_title); out_send("\n"); out_send(buf2); (void) sprintf(buf, "%s %s", p->pl_name, p->pl_date); out_send(buf); out_send("\n"); for (i = 0; i < width; i++) buf2[i] = '-'; buf2[width] = '\n'; buf2[width+1] = '\0'; out_send(buf2); (void) sprintf(buf, "Index "); for (v = bv; v && (v != lv); v = v->v_link2) { if (isreal(v)) { (void) sprintf(buf2, "%-16.15s", v->v_name); } else { /* The frequency vector is complex but often with imaginary part = 0, * this prevents to print two columns. */ if (eq(v->v_name, "frequency")) { if (imagpart(v->v_compdata[0]) == 0.0) (void) sprintf(buf2, "%-16.15s", v->v_name); else (void) sprintf(buf2, "%-32.31s", v->v_name); } else { (void) sprintf(buf2, "%-32.31s", v->v_name); } } (void) strcat(buf, buf2); } lineno = 3; j = 0; npoints = 0; for (v = bv; (v && (v != lv)); v = v->v_link2) if (v->v_length > npoints) npoints = v->v_length; pbreak: /* New page. */ out_send(buf); out_send("\n"); for (i = 0; i < width; i++) buf2[i] = '-'; buf2[width] = '\n'; buf2[width+1] = '\0'; out_send(buf2); lineno += 2; loop: while ((j < npoints) && (lineno < height)) { out_printf("%d\t", j); for (v = bv; (v && (v != lv)); v = v->v_link2) { if (v->v_length <= j) { if (isreal(v)) out_send("\t\t"); else out_send("\t\t\t\t"); } else { if (isreal(v)) { printnum(numbuf, v->v_realdata[j]); out_printf("%s\t", numbuf); } else { /* In case of a single frequency and have a real part avoids print imaginary part equals 0. */ if (eq(v->v_name, "frequency") && imagpart(v->v_compdata[j]) == 0.0) { printnum(numbuf, realpart(v->v_compdata[j])); out_printf("%s\t", numbuf); } else { printnum(numbuf, realpart(v->v_compdata[j])); printnum(numbuf2, imagpart(v->v_compdata[j])); out_printf("%s,\t%s\t", numbuf, numbuf2); } } } } out_send("\n"); j++; lineno++; } if ((j == npoints) && (lv == NULL)) /* No more to print. */ goto done; if (j == npoints) { /* More vectors to print. */ bv = lv; out_send("\f\n"); /* Form feed. */ goto nextpage; } /* Otherwise go to a new page. */ lineno = 0; if (nobreak) goto loop; else out_send("\f\n"); /* Form feed. */ goto pbreak; } done: /* Get rid of the vectors. */ free_pnode(names); tfree(buf); tfree(buf2); } /* Write out some data. write filename expr ... Some cleverness here is * required. If the user mentions a few vectors from various plots, * probably he means for them to be written out seperate plots. In any * case, we have to be sure to write out the scales for everything we * write... */ void com_write(wordlist *wl) { char *file, buf[BSIZE_SP]; struct pnode *pn; struct dvec *d, *vecs = NULL, *lv = NULL, *end, *vv; static wordlist all = { "all", NULL, NULL }; struct pnode *names; bool ascii = AsciiRawFile; bool scalefound, appendwrite; struct plot *tpl, newplot; if (wl) { file = wl->wl_word; wl = wl->wl_next; } else { file = ft_rawfile; } if (cp_getvar("filetype", CP_STRING, buf, sizeof(buf))) { if (eq(buf, "binary")) ascii = FALSE; else if (eq(buf, "ascii")) ascii = TRUE; else fprintf(cp_err, "Warning: strange file type %s\n", buf); } appendwrite = cp_getvar("appendwrite", CP_BOOL, NULL, 0); if (wl) names = ft_getpnames(wl, TRUE); else names = ft_getpnames(&all, TRUE); if (names == NULL) return; for (pn = names; pn; pn = pn->pn_next) { d = ft_evaluate(pn); if (!d) goto done; if (vecs) lv->v_link2 = d; else vecs = d; for (lv = d; lv->v_link2; lv = lv->v_link2) ; } /* Now we have to write them out plot by plot. */ while (vecs) { tpl = vecs->v_plot; tpl->pl_written = TRUE; end = NULL; memcpy(&newplot, tpl, sizeof(struct plot)); scalefound = FALSE; /* Figure out how many vectors are in this plot. Also look * for the scale, or a copy of it, which may have a different * name. */ for (d = vecs; d; d = d->v_link2) { if (d->v_plot == tpl) { char *basename = vec_basename(d); vv = vec_copy(d); /* Note that since we are building a new plot * we don't want to vec_new this one... */ tfree(vv->v_name); vv->v_name = basename; if (end) end->v_next = vv; else end = newplot.pl_dvecs = vv; end = vv; if (vec_eq(d, tpl->pl_scale)) { newplot.pl_scale = vv; scalefound = TRUE; } } } end->v_next = NULL; /* Maybe we shouldn't make sure that the default scale is * present if nobody uses it. */ if (!scalefound) { newplot.pl_scale = vec_copy(tpl->pl_scale); newplot.pl_scale->v_next = newplot.pl_dvecs; newplot.pl_dvecs = newplot.pl_scale; } /* Now let's go through and make sure that everything that * has its own scale has it in the plot. */ for (;;) { scalefound = FALSE; for (d = newplot.pl_dvecs; d; d = d->v_next) { if (d->v_scale) { for (vv = newplot.pl_dvecs; vv; vv = vv->v_next) if (vec_eq(vv, d->v_scale)) break; if (!vv) { /* We have to grab it... */ vv = vec_copy(d->v_scale); vv->v_next = newplot.pl_dvecs; newplot.pl_dvecs = vv; scalefound = TRUE; } } } if (!scalefound) break; /* Otherwise loop through again... */ } if (ascii) raw_write(file, &newplot, appendwrite, FALSE); else raw_write(file, &newplot, appendwrite, TRUE); for (vv = newplot.pl_dvecs; vv;) { struct dvec *next_vv = vv->v_next; vv->v_plot = NULL; vec_free(vv); vv = next_vv; } /* Now throw out the vectors we have written already... */ for (d = vecs, lv = NULL; d; d = d->v_link2) if (d->v_plot == tpl) { if (lv) { lv->v_link2 = d->v_link2; d = lv; } else { vecs = d->v_link2; } } else { lv = d; } /* If there are more plots we want them appended... */ appendwrite = TRUE; } done: free_pnode(names); } /* Write scattering parameters into a file with Touchstone File Format Version 1 with command wrs2p file . Format info from http://www.eda.org/ibis/touchstone_ver2.0/touchstone_ver2_0.pdf See example 13 on page 15: Two port, ASCII, real-imaginary Check if S11, S21, S12, S22 and frequency vectors are available Check if vector Rbase is available Call spar_write() */ void com_write_sparam(wordlist *wl) { char *file; char *sbuf[6]; wordlist *wl_sparam; struct pnode *pn; struct dvec *d, *vecs = NULL, *lv = NULL, *end, *vv, *Rbasevec = NULL; struct pnode *names; bool scalefound; struct plot *tpl, newplot; double Rbaseval; if (wl) file = wl->wl_word; else file = "s_param.s2p"; /* generate wordlist with all vectors required*/ sbuf[0] = "frequency"; sbuf[1] = "S11"; sbuf[2] = "S21"; sbuf[3] = "S12"; sbuf[4] = "S22"; sbuf[5] = NULL; wl_sparam = wl_build(sbuf); names = ft_getpnames(wl_sparam, TRUE); if (names == NULL) goto done; for (pn = names; pn; pn = pn->pn_next) { d = ft_evaluate(pn); if (!d) goto done; if (vecs) lv->v_link2 = d; else vecs = d; for (lv = d; lv->v_link2; lv = lv->v_link2) ; } Rbasevec = vec_get("Rbase"); if (Rbasevec) { Rbaseval = Rbasevec->v_realdata[0]; } else { fprintf(stderr, "Error: No Rbase vector given\n"); goto done; } /* Now we have to write them out plot by plot. */ while (vecs) { tpl = vecs->v_plot; tpl->pl_written = TRUE; end = NULL; memcpy(&newplot, tpl, sizeof(struct plot)); scalefound = FALSE; /* Figure out how many vectors are in this plot. Also look * for the scale, or a copy of it, which may have a different * name. */ for (d = vecs; d; d = d->v_link2) { if (d->v_plot == tpl) { char *basename = vec_basename(d); vv = vec_copy(d); /* Note that since we are building a new plot * we don't want to vec_new this one... */ tfree(vv->v_name); vv->v_name = basename; if (end) end->v_next = vv; else end = newplot.pl_dvecs = vv; end = vv; if (vec_eq(d, tpl->pl_scale)) { newplot.pl_scale = vv; scalefound = TRUE; } } } end->v_next = NULL; /* Maybe we shouldn't make sure that the default scale is * present if nobody uses it. */ if (!scalefound) { newplot.pl_scale = vec_copy(tpl->pl_scale); newplot.pl_scale->v_next = newplot.pl_dvecs; newplot.pl_dvecs = newplot.pl_scale; } /* Now let's go through and make sure that everything that * has its own scale has it in the plot. */ for (;;) { scalefound = FALSE; for (d = newplot.pl_dvecs; d; d = d->v_next) { if (d->v_scale) { for (vv = newplot.pl_dvecs; vv; vv = vv->v_next) if (vec_eq(vv, d->v_scale)) break; if (!vv) { /* We have to grab it... */ vv = vec_copy(d->v_scale); vv->v_next = newplot.pl_dvecs; newplot.pl_dvecs = vv; scalefound = TRUE; } } } if (!scalefound) break; /* Otherwise loop through again... */ } spar_write(file, &newplot, Rbaseval); for (vv = newplot.pl_dvecs; vv;) { struct dvec *next_vv = vv->v_next; vv->v_plot = NULL; vec_free(vv); vv = next_vv; } /* Now throw out the vectors we have written already... */ for (d = vecs, lv = NULL; d; d = d->v_link2) if (d->v_plot == tpl) { if (lv) { lv->v_link2 = d->v_link2; d = lv; } else { vecs = d->v_link2; } } else { lv = d; } } done: free_pnode(names); wl_free(wl_sparam); } /* If the named vectors have more than 1 dimension, then consider * to be a collection of one or more matrices. This command transposes * each named matrix. */ void com_transpose(wordlist *wl) { struct dvec *d; char *s; while (wl) { s = cp_unquote(wl->wl_word); d = vec_get(s); tfree(s); /*DG: Avoid Memory Leak */ if (d == NULL) fprintf(cp_err, "Error: no such vector as %s.\n", wl->wl_word); else while (d) { vec_transpose(d); d = d->v_link2; } if (wl->wl_next == NULL) return; wl = wl->wl_next; } } /* Take a set of vectors and form a new vector of the nth elements of each. */ void com_cross(wordlist *wl) { char *newvec, *s; struct dvec *n, *v, *vecs = NULL, *lv = NULL; struct pnode *pn, *names; int i, ind; bool comp = FALSE; double *d; newvec = wl->wl_word; wl = wl->wl_next; s = wl->wl_word; if ((d = ft_numparse(&s, FALSE)) == NULL) { fprintf(cp_err, "Error: bad number %s\n", wl->wl_word); return; } if ((ind = (int)*d) < 0) { fprintf(cp_err, "Error: badstrchr %d\n", ind); return; } wl = wl->wl_next; names = ft_getpnames(wl, TRUE); for (pn = names; pn; pn = pn->pn_next) { if ((n = ft_evaluate(pn)) == NULL) goto done; if (!vecs) vecs = lv = n; else lv->v_link2 = n; for (lv = n; lv->v_link2; lv = lv->v_link2) ; } for (n = vecs, i = 0; n; n = n->v_link2) { if (iscomplex(n)) comp = TRUE; i++; } vec_remove(newvec); v = dvec_alloc(copy(newvec), vecs ? vecs->v_type : SV_NOTYPE, comp ? (VF_COMPLEX | VF_PERMANENT) : (VF_REAL | VF_PERMANENT), i, NULL); /* Now copy the ind'ths elements into this one. */ for (n = vecs, i = 0; n; n = n->v_link2, i++) if (n->v_length > ind) { if (comp) { v->v_compdata[i] = n->v_compdata[ind]; } else { v->v_realdata[i] = n->v_realdata[ind]; } } else { if (comp) { realpart(v->v_compdata[i]) = 0.0; imagpart(v->v_compdata[i]) = 0.0; } else { v->v_realdata[i] = 0.0; } } vec_new(v); cp_addkword(CT_VECTOR, v->v_name); done: free_pnode(names); } void com_destroy(wordlist *wl) { struct plot *pl, *npl = NULL; if (!wl) { DelPlotWindows(plot_cur); killplot(plot_cur); } else if (eq(wl->wl_word, "all")) { for (pl = plot_list; pl; pl = npl) { npl = pl->pl_next; if (!eq(pl->pl_typename, "const")) { DelPlotWindows(pl); killplot(pl); } else { plot_num = 1; } } } else { while (wl) { for (pl = plot_list; pl; pl = pl->pl_next) if (eq(pl->pl_typename, wl->wl_word)) break; if (pl) { DelPlotWindows(pl); killplot(pl); } else { fprintf(cp_err, "Error: no such plot %s\n", wl->wl_word); } wl = wl->wl_next; } } } static void killplot(struct plot *pl) { struct dvec *v, *nv = NULL; struct plot *op; if (eq(pl->pl_typename, "const")) { fprintf(cp_err, "Error: can't destroy the constant plot\n"); return; } /* pl_dvecs, pl_scale */ for (v = pl->pl_dvecs; v; v = nv) { nv = v->v_next; vec_free(v); } /* unlink from plot_list (linked via pl_next) */ if (pl == plot_list) { plot_list = pl->pl_next; if (pl == plot_cur) plot_cur = plot_list; } else { for (op = plot_list; op; op = op->pl_next) if (op->pl_next == pl) break; if (!op) fprintf(cp_err, "Internal Error: kill plot -- not in list\n"); op->pl_next = pl->pl_next; if (pl == plot_cur) plot_cur = op; } /* delete the hash table entry for this plot */ if (pl->pl_lookup_table) nghash_free(pl->pl_lookup_table, NULL, NULL); tfree(pl->pl_title); tfree(pl->pl_name); tfree(pl->pl_typename); wl_free(pl->pl_commands); tfree(pl->pl_date); /* va: also tfree (memory leak) */ if (pl->pl_ccom) /* va: also tfree (memory leak) */ throwaway(pl->pl_ccom); if (pl->pl_env) { /* The 'environment' for this plot. */ /* va: HOW to do? */ printf("va: killplot should tfree pl->pl_env=(%p)\n", pl->pl_env); fflush(stdout); } tfree(pl); /* va: also tfree pl itself (memory leak) */ } void destroy_const_plot(void) { struct dvec *v, *nv = NULL; struct plot *pl = &constantplot; /* pl_dvecs, pl_scale */ for (v = pl->pl_dvecs; v; v = nv) { nv = v->v_next; vec_free(v); } wl_free(pl->pl_commands); if (pl->pl_ccom) /* va: also tfree (memory leak) */ throwaway(pl->pl_ccom); if (pl->pl_env) { /* The 'environment' for this plot. */ /* va: HOW to do? */ printf("va: killplot should tfree pl->pl_env=(%p)\n", pl->pl_env); fflush(stdout); } } /* delete all windows with graphs dedrived from a given plot */ static void DelPlotWindows(struct plot *pl) { /* do this only if windows or X11 is defined */ #if defined(HAS_WINGUI) || !defined(X_DISPLAY_MISSING) GRAPH *dgraph; int n; /* find and remove all graph structures derived from a given plot */ for (n = 1; n < 100; n++) { /* should be no more than 100 */ dgraph = FindGraph(n); if (dgraph) { if (ciprefix(pl->pl_typename, dgraph->plotname)) RemoveWindow(dgraph); } /* We have to run through all potential graph ids. If some numbers are already missing, 'else break;' might miss the plotwindow to be removed. */ /* else break; */ } #else NG_IGNORE(pl); #endif } /* * command 'setplot' * print a list of plots available * command 'setplot ' * make the current plot * command 'setplot new' * create a new plot */ void com_splot(wordlist *wl) { struct plot *pl; if (wl) { plot_setcur(wl->wl_word); return; } fprintf(cp_out, "List of plots available:\n\n"); for (pl = plot_list; pl; pl = pl->pl_next) fprintf(cp_out, "%s%s\t%s (%s)\n", (pl == plot_cur) ? "Current " : "\t", pl->pl_typename, pl->pl_title, pl->pl_name); } tmpk8ny_4pz/src/frontend/parse-bison.y0000644000175000017500000001205113546075722020201 0ustar carstencarsten%{ /* * (compile (concat "bison -ydo parse-bison.c " (file-relative-name buffer-file-name))) */ #include "ngspice/ngspice.h" #include "ngspice/fteparse.h" #include #include # define YYLTYPE struct PPltype #include "parse.h" #include "parse-bison.h" #include "parse-bison-y.h" # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (N) { \ (Current).start = YYRHSLOC(Rhs, 1).start; \ (Current).stop = YYRHSLOC(Rhs, N).stop; \ } else { \ (Current).start = (Current).stop = YYRHSLOC(Rhs, 0).stop; \ } \ while (0) static void PPerror (YYLTYPE *locp, char **line, struct pnode **retval, char const *); %} %name-prefix "PP" %defines %locations %debug %pure-parser %parse-param {char **line} %lex-param {char **line} %parse-param {struct pnode **retval} %union { double num; const char *str; struct pnode *pnode; } /* * This gramar has two expected shift/reduce conflicts * exp1 '-' exp2 can * o yield an exp, interpreting '-' as a binary operator * o yield a list of two expressions * exp1 and * unary '-' exp2 * the first interpretation is favoured. (bison defaults to 'shift') * TOK_STR '(' exp1 ')' can * o yield an exp, per function application * o yield a list of two expressions * TOK_STR and * '(' exp1 ')' which will be reduced to exp1 * the first interpretation is favoured. (bison defaults to 'shift') * * to verify: * execute bison --report=state * * the %expect 2 * manifests my expectation, and will issue a `warning' when not met */ %expect 2 %token TOK_NUM %token TOK_STR %token TOK_LE TOK_GE TOK_NE %type exp exp_list one_exp /* Operator Precedence */ %right '?' ':' %left '|' %left '&' %left '=' TOK_NE TOK_LE '<' TOK_GE '>' %left '~' %right ',' %left '-' '+' %left '*' '/' '%' %left NEG /* negation--unary minus */ %right '^' /* exponentiation */ %left '[' ']' %initial-action /* initialize yylval */ { $$.num = 0.0; yylloc.start = yylloc.stop = NULL; }; %% /* */ expression: { *retval = NULL; } | exp_list { *retval = $1; } ; exp_list: one_exp | one_exp exp_list { $1->pn_next = $2; $2->pn_use ++; $$ = $1; } ; one_exp: exp { $1->pn_name = copy_substring(@1.start, @1.stop); $$ = $1; } ; exp: TOK_NUM { $$ = PP_mknnode($1); } | TOK_STR { $$ = PP_mksnode($1); txfree($1); } | exp ',' exp { $$ = PP_mkbnode(PT_OP_COMMA, $1, $3); } | exp '+' exp { $$ = PP_mkbnode(PT_OP_PLUS, $1, $3); } | exp '-' exp { $$ = PP_mkbnode(PT_OP_MINUS, $1, $3); } | exp '*' exp { $$ = PP_mkbnode(PT_OP_TIMES, $1, $3); } | exp '%' exp { $$ = PP_mkbnode(PT_OP_MOD, $1, $3); } | exp '/' exp { $$ = PP_mkbnode(PT_OP_DIVIDE, $1, $3); } | exp '^' exp { $$ = PP_mkbnode(PT_OP_POWER, $1, $3); } | '(' exp ')' { $$ = $2; } | '-' exp %prec NEG { $$ = PP_mkunode(PT_OP_UMINUS, $2); } | '~' exp { $$ = PP_mkunode(PT_OP_NOT, $2); } | TOK_STR '(' exp ')' { $$ = PP_mkfnode($1, $3); txfree($1); if(!$$) YYABORT; } | exp '=' exp { $$ = PP_mkbnode(PT_OP_EQ, $1, $3); } | exp TOK_NE exp { $$ = PP_mkbnode(PT_OP_NE, $1, $3); } | exp '>' exp { $$ = PP_mkbnode(PT_OP_GT, $1, $3); } | exp '<' exp { $$ = PP_mkbnode(PT_OP_LT, $1, $3); } | exp TOK_GE exp { $$ = PP_mkbnode(PT_OP_GE, $1, $3); } | exp TOK_LE exp { $$ = PP_mkbnode(PT_OP_LE, $1, $3); } | exp '&' exp { $$ = PP_mkbnode(PT_OP_AND, $1, $3); } | exp '|' exp { $$ = PP_mkbnode(PT_OP_OR, $1, $3); } | exp '[' exp ']' { $$ = PP_mkbnode(PT_OP_INDX, $1, $3); } | exp '[' '[' exp ']' ']' { $$ = PP_mkbnode(PT_OP_RANGE, $1, $4); } | exp '?' exp ':' exp { $$ = PP_mkbnode(PT_OP_TERNARY,$1, PP_mkbnode(PT_OP_COMMA,$3,$5)); } ; %% /* Called by yyparse on error. */ static void PPerror (YYLTYPE *locp, char **line, struct pnode **retval, char const *s) { NG_IGNORE(locp); NG_IGNORE(line); NG_IGNORE(retval); fprintf (stderr, "%s: %s\n", __func__, s); } tmpk8ny_4pz/src/frontend/com_asciiplot.h0000644000175000017500000000015413546075722020564 0ustar carstencarsten#ifndef ngspice_COM_ASCIIPLOT_H #define ngspice_COM_ASCIIPLOT_H void com_asciiplot(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/fourier.h0000644000175000017500000000033313546075722017411 0ustar carstencarsten/************* * Header file for fourier.c * 1999 E. Rouat ************/ #ifndef ngspice_FOURIER_H #define ngspice_FOURIER_H void com_fourier(wordlist *wl); int fourier(wordlist *wl, struct plot *current); #endif tmpk8ny_4pz/src/frontend/subckt.c0000644000175000017500000017462613546075722017245 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group Modified: 2000 AlansFixes **********/ /*------------------------------------------------------------------------------ * encapsulated string assembly in translate() and finishLine() * this string facility (bxx_buffer) mainly abstracts away buffer allocation. * this fixes a buffer overflow in finishLine, caused by lengthy descriptions * of the kind: * B1 1 2 I=v(1)+v(2)+v(3)+... * Larice, 22nd Aug 2009 *----------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------ * Added changes supplied by by H.Tanaka with some tidy up of comments, debug * statements, and variables. This fixes a problem with nested .subsck elements * that accessed .model lines. Code not ideal, but it seems to work okay. * Also took opportunity to tidy a few other items (unused variables etc.), plus * fix a few spelling errors in the comments, and a memory leak. * SJB 25th March 2005 *----------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------ * re-written by SDB during 4.2003 to enable SPICE2 POLY statements to be processed * properly. This is particularly important for dependent sources, whose argument * list changes when POLY is used. * Major changes include: * -- Added lots of comments which (hopefully) elucidate the steps taken * by the program during its processing. * -- Re-wrote translate, which does the processing of each card. * Please direct comments/questions/complaints to Stuart Brorson: * mailto:sdb@cloud9.net *-----------------------------------------------------------------------------*/ /* * Expand subcircuits. This is very spice-dependent. Bug fixes by Norbert * Jeske on 10/5/85. */ /*======================================================================* * Expand all subcircuits in the deck. This handles imbedded .subckt * definitions. The variables substart, subend, and subinvoke can be used * to redefine the controls used. The syntax is invariant though. * NOTE: the deck must be passed without the title line. * What we do is as follows: first make one pass through the circuit * and collect all of the subcircuits. Then, whenever a line that starts * with 'x' is found, copy the subcircuit associated with that name and * splice it in. A few of the problems: the nodes in the spliced-in * stuff must be unique, so when we copy it, append "subcktname:" to * each node. If we are in a nested subcircuit, use foo:bar:...:node. * Then we have to systematically change all references to the renamed * nodes. On top of that, we have to know how many args BJT's have, * so we have to keep track of model names. *======================================================================*/ /*#define TRACE*/ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/fteinp.h" #include "ngspice/stringskip.h" #include #ifdef XSPICE /* gtri - add - wbk - 11/9/90 - include MIF function prototypes */ #include "ngspice/mifproto.h" /* gtri - end - wbk - 11/9/90 */ #endif #include "subckt.h" #include "variable.h" #include "numparam/numpaif.h" extern void line_free_x(struct card *deck, bool recurse); #define line_free(line, flag) \ do { \ line_free_x(line, flag); \ line = NULL; \ } while(0) struct subs; static struct card *doit(struct card *deck, wordlist *modnames); static int translate(struct card *deck, char *formal, char *actual, char *scname, const char *subname, struct subs *subs, wordlist const *modnames); struct bxx_buffer; static void finishLine(struct bxx_buffer *dst, char *src, char *scname); static int settrans(char *formal, char *actual, const char *subname); static char *gettrans(const char *name, const char *name_end); static int numnodes(const char *line, struct subs *subs, wordlist const *modnames); static int numdevs(char *s); static wordlist *modtranslate(struct card *deck, char *subname, wordlist *new_modnames); static void devmodtranslate(struct card *deck, char *subname, wordlist * const orig_modnames); static int inp_numnodes(char c); #define N_GLOBAL_NODES 1005 /*--------------------------------------------------------------------- * table is used in settrans and gettrans -- it holds the netnames used * in the .subckt definition (t_old), and in the subcircuit invocation * (t_new) *--------------------------------------------------------------------*/ static struct tab { char *t_old; char *t_new; } table[N_GLOBAL_NODES]; /* That had better be enough. */ /*--------------------------------------------------------------------- * subs is the linked list which holds the .subckt definitions * found during processing. *--------------------------------------------------------------------*/ struct subs { char *su_name; /* The .subckt name. */ char *su_args; /* The .subckt arguments, space separated. */ int su_numargs; struct card *su_def; /* Pointer to the .subckt definition. */ struct subs *su_next; }; /* orig_modnames is the list of original model names, modnames is the * list of translated names (i.e. after subckt expansion) */ /* flag indicating use of the experimental numparams library */ static bool use_numparams = FALSE; static char start[32], sbend[32], invoke[32], model[32]; static char *global_nodes[N_GLOBAL_NODES]; static int num_global_nodes; static void collect_global_nodes(struct card *c) { num_global_nodes = 0; global_nodes[num_global_nodes++] = copy("0"); #ifdef XSPICE global_nodes[num_global_nodes++] = copy("null"); #endif for (; c; c = c->nextcard) if (ciprefix(".global", c->line)) { char *s = c->line; s = nexttok(s); while (*s) { if (num_global_nodes == N_GLOBAL_NODES) { fprintf(stderr, "ERROR, N_GLOBAL_NODES overflow\n"); controlled_exit(EXIT_FAILURE); } char *t = skip_non_ws(s); global_nodes[num_global_nodes++] = copy_substring(s, t); s = skip_ws(t); } c->line[0] = '*'; /* comment it out */ } #ifdef TRACE { int i; printf("***Global node option has been found.***\n"); for (i = 0; i < num_global_nodes; i++) printf("***Global node no.%d is %s.***\n", i, global_nodes[i]); printf("\n"); } #endif } static void free_global_nodes(void) { int i; for (i = 0; i < num_global_nodes; i++) tfree(global_nodes[i]); num_global_nodes = 0; } /*------------------------------------------------------------------- inp_subcktexpand is the top level function which translates .subckts into mainlined code. Note that there are several things we need to do: 1. Find all .subckt definitions & stick them into a list. 2. Find all subcircuit invocations (refdes X) and replace them with the .subckt definition stored earlier. 3. Do parameter substitution. The algorithm is as follows: 1. Define some aliases for .subckt, .ends, etc. 2. First numparam pass: substitute paramterized tokens by intermediate values 1000000001 etc. 3. Make a list global_nodes[] of global nodes 4. Clean up parens around netnames 5. Call doit, which does the actual translation. 6. Second numparam pass: Do final substitution 7. Check the results & return. inp_subcktexpand takes as argument a pointer to deck, and it returns a pointer to the same deck after the new subcircuits are spliced in. -------------------------------------------------------------------*/ struct card * inp_subcktexpand(struct card *deck) { struct card *c; wordlist *modnames = NULL; if (!cp_getvar("substart", CP_STRING, start, sizeof(start))) strcpy(start, ".subckt"); if (!cp_getvar("subend", CP_STRING, sbend, sizeof(sbend))) strcpy(sbend, ".ends"); if (!cp_getvar("subinvoke", CP_STRING, invoke, sizeof(invoke))) strcpy(invoke, "x"); if (!cp_getvar("modelcard", CP_STRING, model, sizeof(model))) strcpy(model, ".model"); if (!cp_getvar("modelline", CP_STRING, model, sizeof(model))) strcpy(model, ".model"); /* use_numparams = cp_getvar("numparams", CP_BOOL, NULL, 0); */ use_numparams = TRUE; /* deck has .control sections already removed, but not comments */ if (use_numparams) { #ifdef TRACE fprintf(stderr, "Numparams is processing this deck:\n"); for (c = deck; c; c = c->nextcard) fprintf(stderr, "%3d:%s\n", c->linenum, c->line); #endif nupa_signal(NUPADECKCOPY); /* get the subckt names from the deck */ for (c = deck; c; c = c->nextcard) /* first Numparam pass */ if (ciprefix(".subckt", c->line)) nupa_scan(c); /* now copy instances */ for (c = deck; c; c = c->nextcard) { /* first Numparam pass */ if (*(c->line) == '*') continue; c->line = nupa_copy(c); } #ifdef TRACE fprintf(stderr, "Numparams transformed deck:\n"); for (c = deck; c; c = c->nextcard) fprintf(stderr, "%3d:%s\n", c->linenum, c->line); #endif } /* Get all the model names so we can deal with BJTs, etc. * Stick all the model names into the doubly-linked wordlist modnames. */ { int nest = 0; for (c = deck; c; c = c->nextcard) { if (ciprefix(".subckt", c->line)) nest++; else if (ciprefix(".ends", c->line)) nest--; else if (nest > 0) continue; if (ciprefix(model, c->line)) { char *s = nexttok(c->line); modnames = wl_cons(gettok(&s), modnames); } } } #ifdef TRACE { wordlist *w; printf("Models found:\n"); for (w = modnames; w; w = w->wl_next) printf("%s\n", w->wl_word); } #endif /* Added by H.Tanaka to find global nodes */ collect_global_nodes(deck); /* Let's do a few cleanup things... Get rid of ( ) around node lists... */ for (c = deck; c; c = c->nextcard) { /* iterate on lines in deck */ char *s = c->line; if (*s == '*') /* skip comment */ continue; if (ciprefix(start, s)) { /* if we find .subckt . . . */ #ifdef TRACE /* SDB debug statement */ printf("In inp_subcktexpand, found a .subckt: %s\n", s); #endif while (*s && *s != '(') /* search opening paren */ s++; if (*s == '(') { int level = 0; do { /* strip outer parens '(' ')', just the first pair */ if (*s == '(' && level++ == 0) { *s = ' '; } if (*s == ')' && --level == 0) { *s = ' '; break; } } while(*s++); } } else if (*s == '.') { continue; /* skip .commands */ } else { /* any other line . . . */ s = skip_non_ws(s); s = skip_ws(s); if (*s == '(') { int level = 0; do { /* strip outer parens '(' ')', just the first pair, why ? */ if (*s == '(' && level++ == 0) { *s = ' '; } if (*s == ')' && --level == 0) { *s = ' '; break; } } while(*s++); } /* if (*s == '(' . . . */ } /* any other line */ } /* for (c = deck . . . */ #ifdef TRACE /* SDB debug statement */ printf("In inp_subcktexpand, about to call doit.\n"); #endif /* doit does the actual splicing in of the .subckt . . . */ deck = doit(deck, modnames); free_global_nodes(); wl_free(modnames); /* Count numbers of line in deck after expansion */ if (deck) { dynMaxckt = 0; /* number of lines in deck after expansion */ for (c = deck; c; c = c->nextcard) dynMaxckt++; } /* Now check to see if there are still subckt instances undefined... */ for (c = deck; c; c = c->nextcard) if (ciprefix(invoke, c->line)) { fprintf(cp_err, "Error: unknown subckt: %s\n", c->line); if (use_numparams) nupa_signal(NUPAEVALDONE); return NULL; } if (use_numparams) { /* the NUMPARAM final line translation pass */ nupa_signal(NUPASUBDONE); for (c = deck; c; c = c->nextcard) /* 'param' .meas statements can have dependencies on measurement values */ /* need to skip evaluating here and evaluate after other .meas statements */ if (ciprefix(".meas", c->line) && strstr(c->line, "param")) { ; } else { nupa_eval(c); } #ifdef TRACE fprintf(stderr, "Numparams converted deck:\n"); for (c = deck; c; c = c->nextcard) fprintf(stderr, "%3d:%s\n", c->linenum, c->line); #endif /*nupa_list_params(stdout);*/ nupa_copy_inst_dico(); nupa_signal(NUPAEVALDONE); } return (deck); /* return the spliced deck. */ } static struct card * find_ends(struct card *l) { int nest = 1; while (l->nextcard) { if (ciprefix(sbend, l->nextcard->line)) /* found a .ends */ nest--; else if (ciprefix(start, l->nextcard->line)) /* found a .subckt */ nest++; if (!nest) break; l = l->nextcard; } return l; } #define MAXNEST 21 /*-------------------------------------------------------------------*/ /* doit does the actual substitution of .subckts. */ /* It takes two passes: the first extracts .subckts */ /* and sticks pointer to them into the linked list sss. It does */ /* the extraction recursively. Then, it look for subcircuit */ /* invocations and substitutes the stored .subckt into */ /* the main circuit file. */ /* It takes as argument a pointer to the deck, and returns a */ /* pointer to the deck after the subcircuit has been spliced in. */ /*-------------------------------------------------------------------*/ static struct card * doit(struct card *deck, wordlist *modnames) { struct subs *sss = NULL; /* *sss temporarily hold decks to substitute */ int numpasses = MAXNEST; bool gotone; int error; /* Save all the old stuff... */ struct subs *subs = NULL; wordlist *xmodnames = modnames; #ifdef TRACE /* SDB debug statement */ { struct card *c; printf("In doit, about to start first pass through deck.\n"); for (c = deck; c; c = c->nextcard) printf(" %s\n", c->line); } #endif { /* First pass: xtract all the .subckts and stick pointers to them into sss. */ struct card *c = deck; struct card *prev_of_c = NULL; while (c) { if (ciprefix(sbend, c->line)) { /* if line == .ends */ fprintf(cp_err, "Error: misplaced %s line: %s\n", sbend, c->line); return (NULL); } if (ciprefix(start, c->line)) { /* if line == .subckt */ struct card *prev_of_ends = find_ends(c); struct card *ends = prev_of_ends->nextcard; if (!ends) { fprintf(cp_err, "Error: no %s line.\n", sbend); return (NULL); } /* c points to the opening .subckt card */ /* ends points to the terminating .ends card */ /* Now put the .subckt definition found into sss */ { char *s = c->line; sss = TMALLOC(struct subs, 1); s = nexttok(s); sss->su_name = gettok(&s); sss->su_args = copy(s); sss->su_def = c->nextcard; /* count the number of args in the .subckt line */ sss->su_numargs = 0; for (;;) { s = skip_ws(s); if (*s == '\0') break; s = skip_non_ws(s); sss->su_numargs ++; } } /* push `sss' onto the `subs' list */ sss->su_next = subs; subs = sss; /* cut the whole .subckt ... .ends sequence from the deck chain */ line_free_x(c, FALSE); /* drop the .subckt card */ c = ends->nextcard; if (prev_of_c) prev_of_c->nextcard = c; else deck = c; if (use_numparams == FALSE) { line_free_x(ends, FALSE); /* drop the .ends card */ prev_of_ends->nextcard = NULL; } else { ends->line[0] = '*'; /* comment the .ends card */ ends->nextcard = NULL; } } else { prev_of_c = c; c = c->nextcard; } } } /* At this point, sss holds the .subckt definition found, subs holds * all .subckt defs found, including this one */ if (!subs) /* we have found no subckts. Just return. */ return (deck); /* Otherwise, expand sub-subcircuits recursively. */ for (sss = subs; sss; sss = sss->su_next) /* iterate through the list of subcircuits */ if ((sss->su_def = doit(sss->su_def, modnames)) == NULL) return (NULL); #ifdef TRACE /* SDB debug statement */ { struct card *c; printf("In doit, about to start second pass through deck.\n"); for (c = deck; c; c = c->nextcard) printf(" %s\n", c->line); } #endif error = 0; /* Second pass: do the replacements. */ do { /* while (!error && numpasses-- && gotone) */ struct card *c = deck; struct card *prev_of_c = NULL; gotone = FALSE; for (; c; prev_of_c = c, c = c->nextcard) { if (ciprefix(invoke, c->line)) { /* found reference to .subckt (i.e. component with refdes X) */ char *tofree, *tofree2, *s, *t; char *scname; gotone = TRUE; t = tofree = s = copy(c->line); /* s & t hold copy of component line */ /* make scname point to first non-whitepace chars after refdes invocation * e.g. if invocation is Xreference, *scname = reference */ tofree2 = scname = gettok(&s); /*scname += strlen(invoke); */ while ((*scname == ' ') || (*scname == '\t') || (*scname == ':')) scname++; /* Now set s to point to last non-space chars in line (i.e. * the name of the model invoked */ while (*s) s++; s--; while ((*s == ' ') || (*s == '\t')) *s-- = '\0'; while ((*s != ' ') && (*s != '\t')) s--; s++; /* iterate through .subckt list and look for .subckt name invoked */ for (sss = subs; sss; sss = sss->su_next) if (eq(sss->su_name, s)) break; /* At this point, sss points to the .subckt invoked, * and scname points to the netnames * involved. */ /* If no .subckt is found, don't complain -- this might be an * instance of a subckt that is defined above at higher level. */ if (sss) { struct card *su_deck = inp_deckcopy(sss->su_def); struct card *rest_of_c = c->nextcard; /* Now we have to replace this line with the * macro definition. */ /* Change the names of .models found in .subckts . . . */ /* prepend the translated model names to the list `modnames' */ modnames = modtranslate(su_deck, scname, modnames); t = nexttok(t); /* Throw out the subcircuit refdes */ /* now invoke translate, which handles the remainder of the * translation. */ if (!translate(su_deck, sss->su_args, t, scname, sss->su_name, subs, modnames)) error = 1; /* Now splice the decks together. */ if (use_numparams == FALSE) { line_free_x(c, FALSE); /* drop the invocation */ if (prev_of_c) prev_of_c->nextcard = su_deck; else deck = su_deck; } else { c->line[0] = '*'; /* comment the invocation */ c->nextcard = su_deck; } c = su_deck; while (c->nextcard) c = c->nextcard; c->nextcard = rest_of_c; } tfree(tofree); tfree(tofree2); } } } while (!error && numpasses-- && gotone); if (!numpasses) { fprintf(cp_err, "Error: infinite subckt recursion\n"); error = 1; } #ifdef TRACE /* Added by H.Tanaka to display converted deck */ { struct card *c = deck; printf("Converted deck\n"); for (; c; c = c->nextcard) printf("%s\n", c->line); } { wordlist *w = modnames; printf("Models:\n"); for (; w; w = w->wl_next) printf("%s\n", w->wl_word); } #endif wl_delete_slice(modnames, xmodnames); if (error) return NULL; /* error message already reported; should free() */ while (subs) { struct subs *rest = subs->su_next; tfree(subs->su_name); tfree(subs->su_args); line_free(subs->su_def, TRUE); tfree(subs); subs = rest; } return (deck); } /*-------------------------------------------------------------------*/ /* Copy a deck, including the actual lines. */ /*-------------------------------------------------------------------*/ struct card * inp_deckcopy(struct card *deck) { struct card *d = NULL, *nd = NULL; while (deck) { if (nd) { d->nextcard = TMALLOC(struct card, 1); d = d->nextcard; } else { nd = d = TMALLOC(struct card, 1); } d->linenum = deck->linenum; d->line = copy(deck->line); if (deck->error) d->error = copy(deck->error); d->actualLine = inp_deckcopy(deck->actualLine); deck = deck->nextcard; } return (nd); } /* * Copy a deck, without the ->actualLine lines, without comment lines, and * without .control section(s). * First line is always copied (except being .control). */ struct card * inp_deckcopy_oc(struct card *deck) { struct card *d = NULL, *nd = NULL; int skip_control = 0, i = 0; while (deck) { /* exclude any command inside .control ... .endc */ if (ciprefix(".control", deck->line)) { skip_control++; deck = deck->nextcard; continue; } else if (ciprefix(".endc", deck->line)) { skip_control--; deck = deck->nextcard; continue; } else if (skip_control > 0) { deck = deck->nextcard; continue; } if (nd) { d->nextcard = TMALLOC(struct card, 1); d = d->nextcard; } else { nd = d = TMALLOC(struct card, 1); } d->linenum_orig = deck->linenum; d->linenum = i++; d->line = copy(deck->line); if (deck->error) d->error = copy(deck->error); d->actualLine = NULL; deck = deck->nextcard; while (deck && *(deck->line) == '*') deck = deck->nextcard; } return (nd); } /*------------------------------------------------------------------- * struct bxx_buffer, * a string assembly facility. * * usage: * * struct bxx_buffer thing; * bxx_init(&thing); * ... * while (...) { * bxx_rewind(&thing); * ... * bxx_putc(&thing, ...) * bxx_printf(&thing, ...) * bxx_put_cstring(&thing, ...) * bxx_put_substring(&thing, ...) * ... * strcpy(bxx_buffer(&thing) * } * .. * bxx_free(&thing) * * main aspect: * reallocates/extends its buffer itself. * * note: * during asssembly the internal buffer is * not necessarily '\0' terminated. * but will be when bxx_buffer() is invoked */ struct bxx_buffer { char *dst; char *limit; char *buffer; }; /* must be a power of 2 */ static const int bxx_chunksize = 1024; static void bxx_init(struct bxx_buffer *t) { /* assert(0 == (bxx_chunksize & (bxx_chunksize - 1))); */ t->buffer = TMALLOC(char, bxx_chunksize); t->dst = t->buffer; t->limit = t->buffer + bxx_chunksize; } static void bxx_free(struct bxx_buffer *t) { tfree(t->buffer); } static void bxx_rewind(struct bxx_buffer *t) { t->dst = t->buffer; } static void bxx_extend(struct bxx_buffer *t, int howmuch) { int pos = (int)(t->dst - t->buffer); int len = (int)(t->limit - t->buffer); /* round up */ howmuch += (bxx_chunksize - 1); howmuch &= ~(bxx_chunksize - 1); len += howmuch; t->buffer = TREALLOC(char, t->buffer, len); t->dst = t->buffer + pos; t->limit = t->buffer + len; } static void bxx_printf(struct bxx_buffer *t, const char *fmt, ...) { va_list ap; for (;;) { int ret; int size = (int)(t->limit - t->dst); va_start(ap, fmt); ret = vsnprintf(t->dst, (size_t) size, fmt, ap); va_end(ap); if (ret == -1) { bxx_extend(t, bxx_chunksize); } else if (ret >= size) { bxx_extend(t, ret - size + 1); } else { t->dst += ret; break; } } va_end(ap); } static inline char bxx_putc(struct bxx_buffer *t, char c) { if (t->dst >= t->limit) bxx_extend(t, 1); return *(t->dst)++ = c; } static void bxx_put_cstring(struct bxx_buffer *t, const char *cstring) { while (*cstring) bxx_putc(t, *cstring++); } static void bxx_put_substring(struct bxx_buffer *t, const char *str, const char *end) { while (str < end) bxx_putc(t, *str++); } static char * bxx_buffer(struct bxx_buffer *t) { if ((t->dst == t->buffer) || (t->dst[-1] != '\0')) bxx_putc(t, '\0'); return t->buffer; } /*------------------------------------------------------------------------------------------* * Translate all of the device names and node names in the .subckt deck. They are * pre-pended with subname:, unless they are in the formal list, in which case * they are replaced with the corresponding entry in the actual list. * The one special case is node 0 -- this is always ground and we don't * touch it. * * Variable name meanings: * *deck = pointer to subcircuit definition (lcc) (struct card) * formal = copy of the .subckt definition line (e.g. ".subckt subcircuitname 1 2 3") (string) * actual = copy of the .subcircuit invocation line (e.g. "Xexample 4 5 6 subcircuitname") (string) * scname = refdes (- first letter) used at invocation (e.g. "example") (string) * subname = copy of the subcircuit name *-------------------------------------------------------------------------------------------*/ static void translate_node_name(struct bxx_buffer *buffer, const char *scname, const char *name, const char *name_e) { const char *t; if (!name_e) name_e = strchr(name, '\0'); t = gettrans(name, name_e); if (t) { bxx_put_cstring(buffer, t); } else { bxx_put_cstring(buffer, scname); bxx_putc(buffer, '.'); bxx_put_substring(buffer, name, name_e); } } static void translate_inst_name(struct bxx_buffer *buffer, const char *scname, const char *name, const char *name_e) { if (!name_e) name_e = strchr(name, '\0'); if (tolower_c(*name) != 'x') { bxx_putc(buffer, *name); bxx_putc(buffer, '.'); } bxx_put_cstring(buffer, scname); bxx_putc(buffer, '.'); bxx_put_substring(buffer, name, name_e); } static int translate(struct card *deck, char *formal, char *actual, char *scname, const char *subname, struct subs *subs, wordlist const *modnames) { struct card *c; struct bxx_buffer buffer; char *next_name, *name, *t, *nametofree, *paren_ptr; int nnodes, i, dim; int rtn = 0; bxx_init(&buffer); /* settrans builds the table holding the translated netnames. */ i = settrans(formal, actual, subname); if (i < 0) { fprintf(stderr, "Too few parameters for subcircuit type \"%s\" (instance: x%s)\n", subname, scname); goto quit; } else if (i > 0) { fprintf(stderr, "Too many parameters for subcircuit type \"%s\" (instance: x%s)\n", subname, scname); goto quit; } for (c = deck; c; c = c->nextcard) { char *s = c->line; char dev_type = tolower_c(s[0]); bxx_rewind(&buffer); #ifdef TRACE printf("\nIn translate, examining line (dev_type: %c, subname: %s, instance: %s) %s \n", dev_type, subname, scname, s); #endif switch (dev_type) { case '.': if (ciprefix(".ic", s) || ciprefix(".nodeset", s)) { while ((paren_ptr = strchr(s, '(')) != NULL) { name = paren_ptr + 1; if ((paren_ptr = strchr(name, ')')) == NULL) { fprintf(cp_err, "Error: missing closing ')' for .ic|.nodeset statement %s\n", c->line); goto quit; } bxx_put_substring(&buffer, s, name); translate_node_name(&buffer, scname, name, paren_ptr); s = paren_ptr; } bxx_put_cstring(&buffer, s); /* rest of line */ break; } else { continue; } case '\0': case '*': case '$': continue; #ifdef XSPICE /*=================== case A ====================*/ /* gtri - add - wbk - 10/23/90 - process A devices specially */ /* since they have a more involved and variable length node syntax */ case 'a': /* translate the instance name according to normal rules */ name = MIFgettok(&s); translate_inst_name(&buffer, scname, name, NULL); bxx_putc(&buffer, ' '); /* Now translate the nodes, looking ahead one token to recognize */ /* when we reach the model name which should not be translated */ /* here. */ next_name = MIFgettok(&s); for (;;) { /* rotate the tokens and get the the next one */ if (name) tfree(name); name = next_name; next_name = MIFgettok(&s); /* if next token is NULL, name holds the model name, so exit */ if (next_name == NULL) break; /* Process the token in name. If it is special, then don't */ /* translate it. */ switch (*name) { case '[': case ']': case '~': bxx_put_cstring(&buffer, name); break; case '%': bxx_putc(&buffer, '%'); /* don't translate the port type identifier */ if (name) tfree(name); name = next_name; next_name = MIFgettok(&s); bxx_put_cstring(&buffer, name); break; default: /* must be a node name at this point, so translate it */ translate_node_name(&buffer, scname, name, NULL); break; } bxx_putc(&buffer, ' '); } /* copy in the last token, which is the model name */ if (name) { bxx_put_cstring(&buffer, name); tfree(name); } break; /* case 'a' */ /* gtri - end - wbk - 10/23/90 */ #endif /*================ case E, F, G, H ================*/ /* This section handles controlled sources and allows for SPICE2 POLY attributes. * This is a new section, added by SDB to handle POLYs in sources. Significant * changes were made in here. * 4.21.2003 -- SDB. mailto:sdb@cloud9.net */ case 'e': case 'f': case 'g': case 'h': name = gettok(&s); /* name points to the refdes */ if (!name) continue; if (!*name) { tfree(name); continue; } /* Here's where we translate the refdes to e.g. F:subcircuitname:57 * and stick the translated name into buffer. */ translate_inst_name(&buffer, scname, name, NULL); tfree(name); bxx_putc(&buffer, ' '); /* Next iterate over all nodes (netnames) found and translate them. */ nnodes = numnodes(c->line, subs, modnames); while (--nnodes >= 0) { name = gettok_node(&s); if (name == NULL) { fprintf(cp_err, "Error: too few nodes: %s\n", c->line); goto quit; } translate_node_name(&buffer, scname, name, NULL); tfree(name); bxx_putc(&buffer, ' '); } /* Next we handle the POLY (if any) */ /* get next token */ t = s; next_name = gettok_noparens(&t); if ((strcmp(next_name, "POLY") == 0) || (strcmp(next_name, "poly") == 0)) { #ifdef TRACE printf("In translate, looking at e, f, g, h found poly\n"); #endif /* move pointer ahead of '(' */ if (get_l_paren(&s) == 1) { fprintf(cp_err, "Error: no left paren after POLY %s\n", c->line); tfree(next_name); goto quit; } nametofree = gettok_noparens(&s); dim = atoi(nametofree); /* convert returned string to int */ tfree(nametofree); /* move pointer ahead of ')' */ if (get_r_paren(&s) == 1) { fprintf(cp_err, "Error: no right paren after POLY %s\n", c->line); tfree(next_name); goto quit; } /* Write POLY(dim) into buffer */ bxx_printf(&buffer, "POLY( %d ) ", dim); } else dim = 1; /* only one controlling source . . . */ tfree(next_name); /* Now translate the controlling source/nodes */ nnodes = dim * numdevs(c->line); while (--nnodes >= 0) { name = gettok_node(&s); /* name points to the returned token */ if (name == NULL) { fprintf(cp_err, "Error: too few devs: %s\n", c->line); goto quit; } if ((dev_type == 'f') || (dev_type == 'h')) translate_inst_name(&buffer, scname, name, NULL); else translate_node_name(&buffer, scname, name, NULL); tfree(name); bxx_putc(&buffer, ' '); } /* Now write out remainder of line (polynomial coeffs) */ finishLine(&buffer, s, scname); break; default: /* this section handles ordinary components */ name = gettok_node(&s); /* changed to gettok_node to handle netlists with ( , ) */ if (!name) continue; if (!*name) { tfree(name); continue; } translate_inst_name(&buffer, scname, name, NULL); tfree(name); bxx_putc(&buffer, ' '); nnodes = numnodes(c->line, subs, modnames); while (--nnodes >= 0) { name = gettok_node(&s); if (name == NULL) { fprintf(cp_err, "Error: too few nodes: %s\n", c->line); goto quit; } translate_node_name(&buffer, scname, name, NULL); tfree(name); bxx_putc(&buffer, ' '); } /* Now translate any devices (i.e. controlling sources). * This may be superfluous because we handle dependent * source devices above . . . . */ nnodes = numdevs(c->line); while (--nnodes >= 0) { name = gettok_node(&s); if (name == NULL) { fprintf(cp_err, "Error: too few devs: %s\n", c->line); goto quit; } translate_inst_name(&buffer, scname, name, NULL); tfree(name); bxx_putc(&buffer, ' '); } /* Now we finish off the line. For most components (R, C, etc), * this involves adding the component value to the buffer. * We also scan through the line for v(something) and * i(something)... */ finishLine(&buffer, s, scname); break; } tfree(c->line); c->line = copy(bxx_buffer(&buffer)); #ifdef TRACE printf("In translate, translated line = %s \n", c->line); #endif } rtn = 1; quit: for (i = 0; i < N_GLOBAL_NODES; i++) { if (!table[i].t_old && !table[i].t_new) break; FREE(table[i].t_old); FREE(table[i].t_new); } bxx_free(&buffer); return rtn; } /*-------------------------------------------------------------------* * finishLine now doesn't handle current or voltage sources. * Therefore, it just writes out the final netnames, if required. * Changes made by SDB on 4.29.2003. *-------------------------------------------------------------------*/ static void finishLine(struct bxx_buffer *t, char *src, char *scname) { char *buf, *buf_end, which; char *s; int lastwasalpha; lastwasalpha = 0; while (*src) { /* Find the next instance of "[vi](" in * this string. */ if (((*src != 'v') && (*src != 'V') && (*src != 'i') && (*src != 'I')) || lastwasalpha) { lastwasalpha = isalpha_c(*src); bxx_putc(t, *src++); continue; } which = *src; s = skip_ws(src + 1); if (*s != '(') { lastwasalpha = isalpha_c(*src); bxx_putc(t, *src++); continue; } src = skip_ws(s + 1); lastwasalpha = 0; bxx_putc(t, which); bxx_putc(t, '('); for (buf = src; *src && !isspace_c(*src) && *src != ',' && *src != ')'; ) src++; buf_end = src; if ((which == 'v') || (which == 'V')) { translate_node_name(t, scname, buf, buf_end); /* translate the reference node, as in the "2" in "v(4,2)" */ while (*src && (isspace_c(*src) || *src == ',')) src++; if (*src && *src != ')') { for (buf = src; *src && !isspace_c(*src) && (*src != ')'); ) src++; bxx_putc(t, ','); translate_node_name(t, scname, buf, buf_end = src); } } else { /* * i(instance_name) --> i(instance_name[0].subckt.instance_name) */ translate_inst_name(t, scname, buf, buf_end); } } } /*------------------------------------------------------------------------------* * settrans builds the table which holds the old and new netnames. * it also compares the number of nets present in the .subckt definition against * the number of nets present in the subcircuit invocation. It returns 0 if they * match, otherwise, it returns an error. * * Variable definitions: * formal = copy of the .subckt definition line (e.g. ".subckt subcircuitname 1 2 3") (string) * actual = copy of the .subcircuit invocation line (e.g. "Xexample 4 5 6 subcircuitname") (string) * subname = copy of the subcircuit name *------------------------------------------------------------------------------*/ static int settrans(char *formal, char *actual, const char *subname) { int i; memset(table, 0, N_GLOBAL_NODES * sizeof(*table)); for (i = 0; i < N_GLOBAL_NODES; i++) { table[i].t_old = gettok(&formal); table[i].t_new = gettok(&actual); if (table[i].t_new == NULL) { return -1; /* Too few actual / too many formal */ } else if (table[i].t_old == NULL) { if (eq(table[i].t_new, subname)) break; else return 1; /* Too many actual / too few formal */ } } if (i == N_GLOBAL_NODES) { fprintf(stderr, "ERROR, N_GLOBAL_NODES overflow\n"); controlled_exit(EXIT_FAILURE); } return 0; } /* compare a substring, with a '\0' terminated string * the substring itself is required to be free of a '\0' */ static int eq_substr(const char *str, const char *end, const char *cstring) { while (str < end) if (*str++ != *cstring++) return 0; return (*cstring == '\0'); } /*------------------------------------------------------------------------------* * gettrans returns the name of the top level net if it is in the list, * otherwise it returns NULL. *------------------------------------------------------------------------------*/ static char * gettrans(const char *name, const char *name_end) { int i; if (!name_end) name_end = strchr(name, '\0'); /* Added by H.Tanaka to translate global nodes */ for (i = 0; isu_next) if (eq_substr(xname, xname_e, subs->su_name)) return subs->su_numargs; /* * number of nodes not known so far. * lets count the nodes ourselves, * assuming `buf' looks like this: * xname n1 n2 ... nn subname */ { int nodes = -2; while (*line) { nodes++; line = skip_ws(skip_non_ws(line)); } return (nodes); } } n = inp_numnodes(c); /* Added this code for variable number of nodes on certain devices. */ /* The consequence of this code is that the value returned by the */ /* inp_numnodes(c) call must be regarded as "maximum number of nodes */ /* for a given device type. */ /* Paolo Nenzi Jan-2001 */ if ((c == 'm') || (c == 'p') || (c == 'q')) { /* IF this is a mos, cpl or bjt*/ char *s = nexttok(line); /* Skip the instance name */ int gotit = 0; int i = 0; while ((i <= n) && (*s) && !gotit) { char *t = gettok_node(&s); /* get nodenames . . . */ const wordlist *wl; for (wl = modnames; wl; wl = wl->wl_next) if (model_name_match(t, wl->wl_word)) { gotit = 1; break; } i++; tfree(t); } /* Note: node checks must be done on #_of_node-1 because the */ /* "while" cycle increments the counter even when a model is */ /* recognized. This code may be better! */ if ((i < 4) && ((c == 'm') || (c == 'q'))) { fprintf(cp_err, "Error: too few nodes for MOS or BJT: %s\n", line); return (0); } if ((i < 5) && (c == 'p')) { fprintf(cp_err, "Error: too few nodes for CPL: %s\n", line); return (0); } return (i-1); /* compensate the unnecessary increment in the while cycle */ } else { /* for all other elements */ return (n); } } /*-------------------------------------------------------------------* * This function returns the number of controlling voltage sources * (for F, H) or controlling nodes (for G, E) attached to a dependent * source. *-------------------------------------------------------------------*/ static int numdevs(char *s) { s = skip_ws(s); switch (*s) { case 'K': case 'k': return (2); /* two nodes per voltage controlled source */ case 'G': case 'g': case 'E': case 'e': return (2); /* one source per current controlled source */ case 'F': case 'f': case 'H': case 'h': /* 2 lines here added to fix w bug, NCF 1/31/95 */ case 'W': case 'w': return (1); default: return (0); } } /*----------------------------------------------------------------------* * modtranslate -- translates .model lines found in subckt definitions. * Calling arguments are: * *c = pointer to the .subckt definition (linked list) * *subname = pointer to the subcircuit name used at the subcircuit invocation (string) * modtranslate returns the list of model names which have been translated *----------------------------------------------------------------------*/ static wordlist * modtranslate(struct card *c, char *subname, wordlist *new_modnames) { wordlist *orig_modnames = NULL; struct card *lcc = c; for (; c; c = c->nextcard) if (ciprefix(".model", c->line)) { char *model_name, *new_model_name; char *t = c->line; #ifdef TRACE printf("modtranslate(), translating:\n" " \"%s\" -->\n", t); #endif /* swallow ".model" */ t = nexttok(t); model_name = gettok(&t); new_model_name = tprintf("%s:%s", subname, model_name); /* remember the translation */ orig_modnames = wl_cons(model_name, orig_modnames); new_modnames = wl_cons(new_model_name, new_modnames); /* perform the actual translation of this .model line */ t = tprintf(".model %s %s", new_model_name, t); tfree(c->line); c->line = t; #ifdef TRACE printf(" \"%s\"\n", t); printf(" mapped modelname \"%s\" --> \"%s\"\n", model_name, new_model_name); #endif } if (orig_modnames) { devmodtranslate(lcc, subname, orig_modnames); wl_free(orig_modnames); } return new_modnames; } /*-------------------------------------------------------------------* * Devmodtranslate scans through the deck, and translates the * name of the model in a line held in a .subckt. For example: * before: .subckt U1 . . . . * Q1 c b e 2N3904 * after: Q1 c b e U1:2N3904 *-------------------------------------------------------------------*/ static void translate_mod_name(struct bxx_buffer *buffer, char *modname, char *subname, struct wordlist *orig_modnames) { /* * Note that we compare against orig_modnames, * which is the list of untranslated names of models. */ wordlist *wlsub = wl_find(modname, orig_modnames); if (!wlsub) bxx_printf(buffer, "%s", modname); else bxx_printf(buffer, "%s:%s", subname, modname); } static void devmodtranslate(struct card *s, char *subname, wordlist * const orig_modnames) { int found; struct bxx_buffer buffer; bxx_init(&buffer); for (; s; s = s->nextcard) { char *t, c, *name, *next_name; wordlist *wlsub; bxx_rewind(&buffer); t = s->line; #ifdef TRACE /* SDB debug stuff */ printf("In devmodtranslate, examining line %s.\n", t); #endif t = skip_ws(t); c = *t; /* set c to first char in line. . . . */ if (isupper_c(c)) c = tolower_c(c); switch (c) { #ifdef XSPICE case 'a': /* Code for codemodels (dev prefix "A") added by SDB on 6.10.2004. * The algorithm is simple. We don't know how many nodes or sources are attached, * but the name of the model is always last. Therefore, just iterate through all * tokens until the last one is reached. Then translate it. */ #ifdef TRACE /* SDB debug statement */ printf("In devmodtranslate, found codemodel, line= %s\n", t); #endif /* first do refdes. */ name = gettok(&t); /* get refdes */ bxx_printf(&buffer, "%s ", name); tfree(name); /* now do remainder of line. */ next_name = gettok(&t); for (;;) { name = next_name; next_name = gettok(&t); if (next_name == NULL) { /* if next_name is NULL, we are at the line end. * name holds the model name. Therefore, break */ break; } else { /* next_name holds something. Write name into the buffer and continue. */ bxx_printf(&buffer, "%s ", name); tfree(name); } } /* while */ translate_mod_name(&buffer, name, subname, orig_modnames); tfree(name); bxx_putc(&buffer, ' '); #ifdef TRACE /* SDB debug statement */ printf("In devmodtranslate, translated codemodel line= %s\n", buffer); #endif bxx_put_cstring(&buffer, t); tfree(s->line); s->line = copy(bxx_buffer(&buffer)); break; #endif /* XSPICE */ case 'r': case 'c': case 'l': name = gettok(&t); /* get refdes */ bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok_node(&t); /* get first netname */ bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok_node(&t); /* get second netname */ bxx_printf(&buffer, "%s ", name); tfree(name); if (*t) { /* if there is a model, process it. . . . */ name = gettok(&t); translate_mod_name(&buffer, name, subname, orig_modnames); tfree(name); bxx_putc(&buffer, ' '); } if (*t) { name = gettok(&t); translate_mod_name(&buffer, name, subname, orig_modnames); tfree(name); bxx_putc(&buffer, ' '); } bxx_put_cstring(&buffer, t); tfree(s->line); s->line = copy(bxx_buffer(&buffer)); break; case 'd': name = gettok(&t); /* get refdes */ bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok_node(&t); /* get first attached netname */ bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok_node(&t); /* get second attached netname */ bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok(&t); translate_mod_name(&buffer, name, subname, orig_modnames); tfree(name); bxx_putc(&buffer, ' '); bxx_put_cstring(&buffer, t); tfree(s->line); s->line = copy(bxx_buffer(&buffer)); break; case 'u': /* urc transmissionline */ /* 3 terminal devices */ case 'w': /* current controlled switch */ case 'j': /* jfet */ case 'z': /* hfet, mesa */ name = gettok(&t); bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok(&t); bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok(&t); bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok(&t); bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok(&t); translate_mod_name(&buffer, name, subname, orig_modnames); tfree(name); bxx_putc(&buffer, ' '); bxx_put_cstring(&buffer, t); tfree(s->line); s->line = copy(bxx_buffer(&buffer)); break; /* 4 terminal devices */ case 'o': /* ltra */ case 's': /* vc switch */ case 'y': /* txl */ /* Changed gettok() to gettok_node() on 12.2.2003 by SDB to enable parsing lines like "S1 10 11 (80,51) SLATCH1" which occur in real Analog Devices SPICE models. */ name = gettok(&t); /* get refdes */ bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok_node(&t); /* get first attached netname */ bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok_node(&t); /* get second attached netname */ bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok_node(&t); /* get third attached netname */ bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok_node(&t); /* get fourth attached netname */ bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok(&t); translate_mod_name(&buffer, name, subname, orig_modnames); bxx_putc(&buffer, ' '); bxx_put_cstring(&buffer, t); tfree(s->line); s->line = copy(bxx_buffer(&buffer)); tfree(name); break; /* 4-7 terminal mos devices */ case 'm': name = gettok(&t); /* get refdes */ bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok_node(&t); /* get first attached netname */ bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok_node(&t); /* get second attached netname */ bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok_node(&t); /* get third attached netname */ bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok_node(&t); /* get fourth attached netname */ bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok(&t); found = 0; while (!found) { /* Now, is this a subcircuit model? */ for (wlsub = orig_modnames; wlsub; wlsub = wlsub->wl_next) if (model_name_match(name, wlsub->wl_word)) { found = 1; break; } if (!found) { /* name was not a model - was a netname */ bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok(&t); if (name == NULL) { name = copy(""); /* allow 'tfree' */ break; } } } /* while */ if (!found) bxx_printf(&buffer, "%s", name); else bxx_printf(&buffer, "%s:%s", subname, name); bxx_putc(&buffer, ' '); bxx_put_cstring(&buffer, t); tfree(s->line); s->line = copy(bxx_buffer(&buffer)); tfree(name); break; /* 3-5 terminal bjt devices */ case 'q': name = gettok(&t); /* get refdes */ bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok_node(&t); /* get first attached netname */ bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok_node(&t); /* get second attached netname */ bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok_node(&t); /* get third attached netname */ bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok_node(&t); /* this can be either a model name or a node name. */ if (name == NULL) { name = copy(""); /* allow 'tfree' */ } else { found = 0; while (!found) { wlsub = wl_find(name, orig_modnames); if (wlsub) { found = 1; break; } else { bxx_printf(&buffer, "%s ", name); tfree(name); name = gettok(&t); if (name == NULL) { /* No token anymore - leave */ name = copy(""); /* allow 'tfree' */ break; } } } /* while */ } translate_mod_name(&buffer, name, subname, orig_modnames); tfree(name); bxx_putc(&buffer, ' '); bxx_put_cstring(&buffer, t); tfree(s->line); s->line = copy(bxx_buffer(&buffer)); break; /* 4-18 terminal devices */ case 'p': /* cpl */ name = gettok(&t); /* get refdes */ bxx_printf(&buffer, "%s ", name); tfree(name); /* now do remainder of line. */ next_name = gettok(&t); for (;;) { name = next_name; next_name = gettok(&t); if (!next_name || strstr(next_name, "len")) { /* if next_name is NULL or len or length, we are at the line end. * name holds the model name. Therefore, break */ break; } else { /* next_name holds something. Write name into the buffer and continue. */ bxx_printf(&buffer, "%s ", name); tfree(name); } } /* while */ translate_mod_name(&buffer, name, subname, orig_modnames); tfree(name); bxx_putc(&buffer, ' '); bxx_put_cstring(&buffer, t); tfree(s->line); s->line = copy(bxx_buffer(&buffer)); break; default: break; } } bxx_free(&buffer); } /*----------------------------------------------------------------------* * inp_numnodes returns the maximum number of nodes (netnames) attached * to the component. * This is a spice-dependent thing. It should probably go somewhere * else, but... Note that we pretend that dependent sources and mutual * inductors have more nodes than they really do... *----------------------------------------------------------------------*/ static int inp_numnodes(char c) { if (isupper_c(c)) c = tolower_c(c); switch (c) { case ' ': case '\t': case '.': case 'x': case '*': case '$': return (0); case 'b': return (2); case 'c': return (2); case 'd': return (2); case 'e': return (2); /* changed from 4 to 2 by SDB on 4.22.2003 to enable POLY */ case 'f': return (2); case 'g': return (2); /* changed from 4 to 2 by SDB on 4.22.2003 to enable POLY */ case 'h': return (2); case 'i': return (2); case 'j': return (3); case 'k': return (0); case 'l': return (2); case 'm': return (7); /* This means that 7 is the maximun number of nodes */ case 'o': return (4); case 'p': return (18);/* 16 lines + 2 gnd is the maximum number of nodes for CPL */ case 'q': return (5); case 'r': return (2); case 's': return (4); case 't': return (4); case 'u': return (3); case 'v': return (2); case 'w': return (2); /* change 3 to 2 here to fix w bug, NCF 1/31/95 */ case 'y': return (4); case 'z': return (3); default: fprintf(cp_err, "Warning: unknown device type: %c\n", c); return (2); } } tmpk8ny_4pz/src/frontend/where.h0000644000175000017500000000024313546075722017050 0ustar carstencarsten/************* * Header file for where.c * 1999 E. Rouat ************/ #ifndef ngspice_WHERE_H #define ngspice_WHERE_H void com_where(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/resource.c0000644000175000017500000004532613546075722017573 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Resource-related routines. * * New operation systems information options added: * Windows 2000 and newer: Use GlobalMemoryStatusEx and GetProcessMemoryInfo * LINUX (and maybe some others): Use the /proc virtual file information system * Others: Use original code with sbrk(0) and some "ugly hacks" */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "circuits.h" #include "quote.h" #include "resource.h" #include "variable.h" #include "ngspice/cktdefs.h" #include #include "../misc/misc_time.h" /* timediff */ #ifdef XSPICE /* gtri - add - 12/12/90 - wbk - include ipc stuff */ #include "ngspice/ipctiein.h" /* gtri - end - 12/12/90 */ #endif /* We might compile for Windows, but only as a console application (e.g. tcl) */ #if defined(HAS_WINGUI) || defined(__MINGW32__) || defined(_MSC_VER) #define PSAPI_VERSION 1 #define HAVE_WIN32 #define WIN32_LEAN_AND_MEAN /* * The ngspice.h file included above defines BOOLEAN (via bool.h) and this * clashes with the definition obtained from windows.h (via winnt.h). * However, BOOLEAN is not used by this file so we can work round this problem * by undefining BOOLEAN before including windows.h * SJB - April 2005 */ #undef BOOLEAN #include #include #else #include #endif /* HAVE_WIN32 */ /* Uncheck the following definition if you want to get the old usage information #undef HAVE__PROC_MEMINFO */ static void printres(char *name); static void fprintmem(FILE *stream, unsigned long long memory); #if defined(HAVE_WIN32) || defined(HAVE__PROC_MEMINFO) static int get_procm(struct proc_mem *memall); static int get_sysmem(struct sys_mem *memall); struct sys_mem mem_t, mem_t_act; struct proc_mem mem_ng, mem_ng_act; #else static RETSIGTYPE fault(void); static void *baseaddr(void); #endif char *startdata; char *enddata; void init_rlimits(void) { # if defined(HAVE_WIN32) || defined(HAVE__PROC_MEMINFO) get_procm(&mem_ng); get_sysmem(&mem_t); # else startdata = (char *) baseaddr(); enddata = sbrk(0); # endif } void init_time(void) { #ifdef HAVE_GETRUSAGE #else # ifdef HAVE_TIMES # else # ifdef HAVE_FTIME ftime(&timebegin); # endif # endif #endif } void com_rusage(wordlist *wl) { char *copyword; /* Fill in the SPICE accounting structure... */ if (wl && (eq(wl->wl_word, "everything") || eq(wl->wl_word, "all"))) { printres(NULL); } else if (wl) { for (; wl; wl = wl->wl_next) { /* printres(cp_unquote(wl->wl_word)); DG: bad, memory leak*/ copyword = cp_unquote(wl->wl_word);/*DG*/ printres(copyword); tfree(copyword); if (wl->wl_next) (void) putc('\n', cp_out); } } else { printf("\n"); printres("time"); (void) putc('\n', cp_out); printres("totalcputime"); (void) putc('\n', cp_out); printres("space"); } } /* Find out if the user is approaching his maximum data size. If usage is withing 90% of total available then a warning message is sent to the error stream (cp_err) */ void ft_ckspace(void) { unsigned long long usage, limit; #ifdef SHARED_MODULE /* False warning on some OSs, especially on Linux when loaded during runtime. The caller then has to take care of memory available */ return; #endif #if defined(HAVE_WIN32) || defined(HAVE__PROC_MEMINFO) get_procm(&mem_ng_act); usage = mem_ng_act.size; limit = mem_t.free; #else static size_t old_usage = 0; char *hi; #ifdef HAVE_GETRLIMIT struct rlimit rld; getrlimit(RLIMIT_DATA, &rld); if (rld.rlim_cur == RLIM_INFINITY) return; limit = rld.rlim_cur - (enddata - startdata); /* rlim_max not used */ #else /* HAVE_GETRLIMIT */ /* SYSVRLIMIT */ limit = ulimit(3, 0L) - (enddata - startdata); #endif /* HAVE_GETRLIMIT */ hi = sbrk(0); usage = (size_t) (hi - enddata); if (usage <= old_usage) return; old_usage = usage; #endif /* not HAS_WINGUI */ if ((double)usage > (double)limit * 0.9) { fprintf(cp_err, "Warning - approaching max data size: "); fprintf(cp_err, "current size = "); fprintmem(cp_err, usage); fprintf(cp_err, ", limit = "); fprintmem(cp_err, limit); fprintf(cp_err, "\n"); } } /* Print out one piece of resource usage information. */ static void printres(char *name) { #ifdef CIDER char *paramname = NULL; #endif bool yy = FALSE; static bool called = FALSE; static long last_sec = 0, last_msec = 0; struct variable *v, *vfree = NULL; char *cpu_elapsed; if (!name || eq(name, "totalcputime") || eq(name, "cputime")) { int total_sec, total_msec; # ifdef HAVE_GETRUSAGE int ret; struct rusage ruse; memset(&ruse, 0, sizeof(ruse)); ret = getrusage(RUSAGE_SELF, &ruse); if (ret == -1) perror("getrusage(): "); total_sec = (int) (ruse.ru_utime.tv_sec + ruse.ru_stime.tv_sec); total_msec = (int) (ruse.ru_utime.tv_usec + ruse.ru_stime.tv_usec) / 1000; cpu_elapsed = "CPU"; # else # ifdef HAVE_TIMES struct tms ruse; times(&ruse); clock_t x = ruse.tms_utime + ruse.tms_stime; clock_t hz = (clock_t) sysconf(_SC_CLK_TCK); total_sec = x / hz; total_msec = ((x % hz) * 1000) / hz; cpu_elapsed = "CPU"; # else # ifdef HAVE_FTIME struct timeb timenow; ftime(&timenow); timediff(&timenow, &timebegin, &total_sec, &total_msec); cpu_elapsed = "elapsed"; # else # define NO_RUDATA # endif # endif # endif #ifndef NO_RUDATA if (total_msec >= 1000) { total_msec -= 1000; total_sec += 1; } if (!name || eq(name, "totalcputime")) { fprintf(cp_out, "Total %s time (seconds) = %u.%03u \n", cpu_elapsed, total_sec, total_msec); } if (!name || eq(name, "cputime")) { last_msec = 1000 + total_msec - last_msec; last_sec = total_sec - last_sec - 1; if (last_msec >= 1000) { last_msec -= 1000; last_sec += 1; } /* do not print it the first time, doubling totalcputime */ if (called) fprintf(cp_out, "%s time since last call seconds) = %lu.%03lu \n", cpu_elapsed, last_sec, last_msec); last_sec = total_sec; last_msec = total_msec; called = TRUE; } #ifdef XSPICE /* gtri - add - 12/12/90 - wbk - record cpu time used for ipc */ g_ipc.cpu_time = (double) last_msec; g_ipc.cpu_time /= 1000.0; g_ipc.cpu_time += (double) last_sec; /* gtri - end - 12/12/90 */ #endif yy = TRUE; #else if (!name || eq(name, "totalcputime")) fprintf(cp_out, "Total CPU time: ??.??? seconds.\n"); if (!name || eq(name, "cputime")) fprintf(cp_out, "CPU time since last call: ??.??? seconds.\n"); yy = TRUE; #endif } if (!name || eq(name, "space")) { # ifdef HAVE_GETRLIMIT size_t usage = 0, limit = 0; struct rlimit rld; char *hi; getrlimit(RLIMIT_DATA, &rld); limit = rld.rlim_cur - (size_t)(enddata - startdata); hi = (char*) sbrk(0); usage = (size_t) (hi - enddata); # else /* HAVE_GETRLIMIT */ # ifdef HAVE_ULIMIT size_t usage = 0, limit = 0; char *hi; limit = ulimit(3, 0L) - (size_t)(enddata - startdata); hi = sbrk(0); usage = (size_t) (hi - enddata); # endif /* HAVE_ULIMIT */ # endif /* HAVE_GETRLIMIT */ #if defined(HAVE_WIN32) || defined(HAVE__PROC_MEMINFO) get_procm(&mem_ng_act); get_sysmem(&mem_t_act); /* get_sysmem returns bytes */ fprintf(cp_out, "Total DRAM available = "); fprintmem(cp_out, mem_t_act.size); fprintf(cp_out, ".\n"); fprintf(cp_out, "DRAM currently available = "); fprintmem(cp_out, mem_t_act.free); fprintf(cp_out, ".\n"); /* get_procm returns Kilobytes */ fprintf(cp_out, "Total ngspice program size = "); fprintmem(cp_out, mem_ng_act.size); fprintf(cp_out, ".\n"); #if defined(HAVE__PROC_MEMINFO) fprintf(cp_out, "Resident set size = "); fprintmem(cp_out, mem_ng_act.resident); fprintf(cp_out, ".\n"); fprintf(cp_out, "Shared ngspice pages = "); fprintmem(cp_out, mem_ng_act.shared); fprintf(cp_out, ".\n"); fprintf(cp_out, "Text (code) pages = "); fprintmem(cp_out, mem_ng_act.trs); fprintf(cp_out, ".\n"); fprintf(cp_out, "Stack = "); fprintmem(cp_out, mem_ng_act.drs); fprintf(cp_out, ".\n"); fprintf(cp_out, "Library pages = "); fprintmem(cp_out, mem_ng_act.lrs); fprintf(cp_out, ".\n"); /* not used fprintf(cp_out, "Dirty pages = "); fprintmem(cp_out, all_memory.dt); fprintf(cp_out, ".\n"); */ #endif /* HAVE__PROC_MEMINFO */ #else /* HAS_WINGUI or HAVE__PROC_MEMINFO */ fprintf(cp_out, "Current dynamic memory usage = "); fprintmem(cp_out, usage); fprintf(cp_out, ",\n"); fprintf(cp_out, "Dynamic memory limit = "); fprintmem(cp_out, limit); fprintf(cp_out, ".\n"); #endif yy = TRUE; } if (!name || eq(name, "faults")) { #ifdef HAVE_GETRUSAGE int ret; struct rusage ruse; memset(&ruse, 0, sizeof(ruse)); ret = getrusage(RUSAGE_SELF, &ruse); if (ret == -1) perror("getrusage(): "); fprintf(cp_out, "%lu page faults, %lu vol + %lu invol = %lu context switches.\n", ruse.ru_majflt, ruse.ru_nvcsw, ruse.ru_nivcsw, ruse.ru_nvcsw + ruse.ru_nivcsw); yy = TRUE; #endif } /* PN Now get all the frontend resource stuff */ if (ft_curckt) { if (name && eq(name, "task")) vfree = v = ft_getstat(ft_curckt, NULL); else vfree = v = ft_getstat(ft_curckt, name); if (name && v) { fprintf(cp_out, "%s= ", v->va_name); wl_print(cp_varwl(v), cp_out); (void)putc('\n', cp_out); yy = TRUE; } else if (v) { (void) putc('\n', cp_out); while (v) { wordlist *wlpr = cp_varwl(v); fprintf(cp_out, "%s = ", v->va_name); wl_print(wlpr, cp_out); wl_free(wlpr); (void) putc('\n', cp_out); v = v->va_next; } yy = TRUE; } } if (vfree) free_struct_variable(vfree); /* Now get all the spice resource stuff. */ if (ft_curckt && ft_curckt->ci_ckt) { #ifdef CIDER /* begin cider integration */ if (!name || eq(name, "circuit") || eq(name, "task")) paramname = NULL; else paramname = name; vfree = v = if_getstat(ft_curckt->ci_ckt, paramname); if (paramname && v) { /* end cider integration */ #else /* ~CIDER */ if (name && eq(name, "task")) vfree = v = if_getstat(ft_curckt->ci_ckt, NULL); else vfree = v = if_getstat(ft_curckt->ci_ckt, name); if (name && v) { #endif fprintf(cp_out, "%s = ", v->va_name); wordlist *wltmp = cp_varwl(v); wl_print(wltmp, cp_out); wl_free(wltmp); (void) putc('\n', cp_out); yy = TRUE; } else if (v) { (void) putc('\n', cp_out); while (v) { wordlist *wlpr = cp_varwl(v); fprintf(cp_out, "%s = ", v->va_name); wl_print(wlpr, cp_out); wl_free(wlpr); (void) putc('\n', cp_out); v = v->va_next; } yy = TRUE; } #ifdef CIDER /* begin cider integration */ /* Now print out interesting stuff about numerical devices. */ if (!name || eq(name, "devices")) { (void) NDEVacct(ft_curckt->ci_ckt, cp_out); yy = TRUE; } /* end cider integration */ #endif } if (!yy) { fprintf(cp_err, "Note: no resource usage information for '%s',\n", name); fprintf(cp_err, "\tor no active circuit available\n"); } if (vfree) free_struct_variable(vfree); } /* Print to stream the given memory size in a human friendly format */ static void fprintmem(FILE *stream, unsigned long long memory) { if (memory > 1048576) fprintf(stream, "%8.3f MB", (double)memory / 1048576.); else if (memory > 1024) fprintf(stream, "%5.3f kB", (double)memory / 1024.); else fprintf(stream, "%llu bytes", memory); } #if defined(HAVE_WIN32) || defined(HAVE__PROC_MEMINFO) static int get_procm(struct proc_mem *memall) { #ifdef HAVE_WIN32 /* FIXME: shared module should be allowed, but currently does not link to psapi within MINGW/MSYS2 */ #if !defined(SHARED_MODULE) || !defined(__MINGW32__) /* Use Windows API function to obtain size of memory - more accurate */ PROCESS_MEMORY_COUNTERS pmc; /* psapi library required */ if (GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc))) { memall->size = pmc.WorkingSetSize; memall->resident = pmc.QuotaNonPagedPoolUsage; memall->trs = pmc.QuotaPagedPoolUsage; } else return 0; #else /* Use Windows GlobalMemoryStatus or /proc/memory to obtain size of memory - not accurate */ get_sysmem(&mem_t_act); /* size is the difference between free memory at start time and now */ if (mem_t.free > mem_t_act.free) /* it can happen that that ngspice is */ memall->size = (mem_t.free - mem_t_act.free); /* to small compared to os memory usage */ else memall->size = 0; /* sure, it is more */ memall->resident = 0; memall->trs = 0; #endif #else /* Use Linux/UNIX /proc//statm file information */ FILE *fp; char buffer[1024]; size_t bytes_read; long sz; /* page size */ if ((sz = sysconf(_SC_PAGESIZE)) == -1) { perror("sysconf() error"); return 0; } if ((fp = fopen("/proc/self/statm", "r")) == NULL) { perror("fopen(\"/proc/%d/statm\")"); return 0; } bytes_read = fread(buffer, 1, sizeof(buffer), fp); fclose(fp); if (bytes_read == 0 || bytes_read == sizeof(buffer)) return 0; buffer[bytes_read] = '\0'; sscanf(buffer, "%llu %llu %llu %llu %llu %llu %llu", &memall->size, &memall->resident, &memall->shared, &memall->trs, &memall->drs, &memall->lrs, &memall->dt); /* scale by page size */ memall->size *= (long long unsigned)sz; memall->resident *= (long long unsigned)sz; memall->shared *= (long long unsigned)sz; memall->trs *= (long long unsigned)sz; memall->drs *= (long long unsigned)sz; memall->lrs *= (long long unsigned)sz; memall->dt *= (long long unsigned)sz; #endif /* HAVE_WIN32 */ return 1; } static int get_sysmem(struct sys_mem *memall) { #ifdef HAVE_WIN32 #if (_WIN32_WINNT >= 0x0500) MEMORYSTATUSEX ms; ms.dwLength = sizeof(MEMORYSTATUSEX); GlobalMemoryStatusEx(&ms); memall->size = ms.ullTotalPhys; memall->free = ms.ullAvailPhys; memall->swap_t = ms.ullTotalPageFile; memall->swap_f = ms.ullAvailPageFile; #else MEMORYSTATUS ms; ms.dwLength = sizeof(MEMORYSTATUS); GlobalMemoryStatus(&ms); memall->size = ms.dwTotalPhys; memall->free = ms.dwAvailPhys; memall->swap_t = ms.dwTotalPageFile; memall->swap_f = ms.dwAvailPageFile; #endif /*_WIN32_WINNT 0x0500*/ #else FILE *fp; char buffer[2048]; size_t bytes_read; char *match; unsigned long long mem_got; if ((fp = fopen("/proc/meminfo", "r")) == NULL) { perror("fopen(\"/proc/meminfo\")"); return 0; } bytes_read = fread(buffer, 1, sizeof(buffer), fp); fclose(fp); if (bytes_read == 0 || bytes_read == sizeof(buffer)) return 0; buffer[bytes_read] = '\0'; /* Search for string "MemTotal" */ match = strstr(buffer, "MemTotal"); if (match == NULL) /* not found */ return 0; sscanf(match, "MemTotal: %llu", &mem_got); memall->size = mem_got*1024; /* 1MB = 1024KB */ /* Search for string "MemFree" */ match = strstr(buffer, "MemFree"); if (match == NULL) /* not found */ return 0; sscanf(match, "MemFree: %llu", &mem_got); memall->free = mem_got*1024; /* 1MB = 1024KB */ /* Search for string "SwapTotal" */ match = strstr(buffer, "SwapTotal"); if (match == NULL) /* not found */ return 0; sscanf(match, "SwapTotal: %llu", &mem_got); memall->swap_t = mem_got*1024; /* 1MB = 1024KB */ /* Search for string "SwapFree" */ match = strstr(buffer, "SwapFree"); if (match == NULL) /* not found */ return 0; sscanf(match, "SwapFree: %llu", &mem_got); memall->swap_f = mem_got*1024; /* 1MB = 1024KB */ #endif return 1; } #else #include #include /* * baseaddr() returns the base address of the data segment on most Unix * systems. It's an ugly hack for info that should be provided by the OS. */ /* Does anyone use a pagesize < 256 bytes?? I'll bet not; * too small doesn't hurt */ #define LOG2_PAGESIZE 8 static JMP_BUF env; static RETSIGTYPE fault(void) { signal(SIGSEGV, (SIGNAL_FUNCTION) fault); /* SysV style */ LONGJMP(env, 1); } static void * baseaddr(void) { #if defined(__CYGWIN__) || defined(__MINGW32__) || defined(HAVE_WIN32) || defined(__APPLE__) || defined(__SUNPRO_C) return 0; #else char *low, *high, *at; long x; RETSIGTYPE (*orig_signal)(); if (getenv("SPICE_NO_DATASEG_CHECK")) return 0; low = 0; high = (char *) ((unsigned long) sbrk(0) & ~((1 << LOG2_PAGESIZE) - 1)); orig_signal = signal(SIGSEGV, (SIGNAL_FUNCTION) fault); for (;;) { at = (char *) ((((long)low >> LOG2_PAGESIZE) + ((long)high >> LOG2_PAGESIZE)) << (LOG2_PAGESIZE - 1)); if (at == low || at == high) break; if (SETJMP(env, 1)) { low = at; continue; } else { x = *at; } if (SETJMP(env, 1)) { low = at; continue; } else { *at = x; } high = at; } (void) signal(SIGSEGV, (SIGNAL_FUNCTION) orig_signal); return (void *) high; #endif } #endif # ifdef notdef main() { printf("testing\n"); printf("baseaddr: %#8x topaddr: %#8x\n", baseaddr(), sbrk(0)); } # endif tmpk8ny_4pz/src/frontend/streams.h0000644000175000017500000000031313546075722017412 0ustar carstencarsten/************* * Header file for streams.c ************/ #ifndef ngspice_STREAMS_H #define ngspice_STREAMS_H #include "ngspice/bool.h" #include "ngspice/wordlist.h" void fixdescriptors(void); #endif tmpk8ny_4pz/src/frontend/spiceif.h0000644000175000017500000000111613546075722017360 0ustar carstencarsten/************* * Header file for spiceif.c * 1999 E. Rouat ************/ #ifndef ngspice_SPICEIF_H #define ngspice_SPICEIF_H CKTcircuit * if_inpdeck(struct card *deck, INPtables **tab); int if_run(CKTcircuit *t, char *what, wordlist *args, INPtables *tab); int if_option(CKTcircuit *ckt, char *name, enum cp_types type, void *value); void if_dump(CKTcircuit *ckt, FILE *file); void if_cktfree(CKTcircuit *ckt, INPtables *tab); int if_analQbyName(CKTcircuit *ckt, int which, JOB *anal, char *name, IFvalue *parm); void com_snload(wordlist *wl); void com_snsave(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/display.c0000644000175000017500000002620613546075722017405 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #include "ngspice/ngspice.h" #include "ngspice/graph.h" #include "ngspice/ftedev.h" #include "ngspice/fteinput.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #ifdef TCL_MODULE #include "ngspice/tclspice.h" #endif #include "display.h" #include "variable.h" static void gen_DatatoScreen(GRAPH *graph, double x, double y, int *screenx, int *screeny); static int gen_Input(REQUEST *request, RESPONSE *response); static int nop(void); static int nodev(void); #ifndef X_DISPLAY_MISSING #include "plotting/x11.h" #endif #ifdef HAS_WINGUI /* Graphic-IO under MS Windows */ #include "wdisp/windisp.h" //#include "wdisp/winprint.h" #endif #include "plotting/plot5.h" #include "postsc.h" #include "hpgl.h" DISPDEVICE device[] = { { "error", 0, 0, 0, 0, 0, 0, (disp_fn_Init_t *) nop, (disp_fn_NewViewport_t *) nop, (disp_fn_Close_t *) nop, (disp_fn_Clear_t *) nop, (disp_fn_DrawLine_t *) nop, (disp_fn_Arc_t *) nop, (disp_fn_Text_t *) nop, (disp_fn_DefineColor_t *) nop, (disp_fn_DefineLinestyle_t *) nop, (disp_fn_SetLinestyle_t *) nop, (disp_fn_SetColor_t *) nop, (disp_fn_Update_t *) nop, (disp_fn_Track_t *) nop, (disp_fn_MakeMenu_t *) nop, (disp_fn_MakeDialog_t *) nop, gen_Input, (disp_fn_DatatoScreen_t *) nop,}, #ifndef X_DISPLAY_MISSING { "X11", 0, 0, 1024, 864, 0, 0, X11_Init, X11_NewViewport, X11_Close, X11_Clear, X11_DrawLine, X11_Arc, X11_Text, X11_DefineColor, X11_DefineLinestyle, X11_SetLinestyle, X11_SetColor, X11_Update, (disp_fn_Track_t *) nodev, (disp_fn_MakeMenu_t *) nodev, (disp_fn_MakeDialog_t *) nodev, X11_Input, gen_DatatoScreen,}, #endif #ifdef HAS_WINGUI /* Graphic-IO under MS Windows */ { "Windows", 0, 0, 1000, 1000, 0, 0, WIN_Init, WIN_NewViewport, WIN_Close, WIN_Clear, WIN_DrawLine, WIN_Arc, WIN_Text, WIN_DefineColor, WIN_DefineLinestyle, WIN_SetLinestyle, WIN_SetColor, WIN_Update, (disp_fn_Track_t *) nodev, (disp_fn_MakeMenu_t *) nodev, (disp_fn_MakeDialog_t *) nodev, gen_Input, gen_DatatoScreen, }, /* WIN_DiagramReady */ /* Warning: name "WinPrint" do not change! */ { "WinPrint", 0, 0, 1000, 1000, 0, 0, WPRINT_Init, WPRINT_NewViewport, WPRINT_Close, WPRINT_Clear, WPRINT_DrawLine, WPRINT_Arc, WPRINT_Text, WPRINT_DefineColor, WPRINT_DefineLinestyle, WPRINT_SetLinestyle, WPRINT_SetColor, WPRINT_Update, (disp_fn_Track_t *) nodev, (disp_fn_MakeMenu_t *) nodev, (disp_fn_MakeDialog_t *) nodev, (disp_fn_Input_t *) nodev, gen_DatatoScreen, }, /* WPRINT_DiagramReady */ #endif #ifdef TCL_MODULE { "Tk", 0, 0, 1024, 864, 0, 0, sp_Tk_Init, sp_Tk_NewViewport, sp_Tk_Close, sp_Tk_Clear, sp_Tk_DrawLine, sp_Tk_Arc, sp_Tk_Text, sp_Tk_DefineColor, sp_Tk_DefineLinestyle, sp_Tk_SetLinestyle, sp_Tk_SetColor, sp_Tk_Update, (disp_fn_Track_t *) nodev, (disp_fn_MakeMenu_t *) nodev, (disp_fn_MakeDialog_t *) nodev, (disp_fn_Input_t *) nodev, gen_DatatoScreen, }, #endif { "plot5", 0, 0, 1000, 1000, 0, 0, Plt5_Init, Plt5_NewViewport, Plt5_Close, Plt5_Clear, Plt5_DrawLine, Plt5_Arc, Plt5_Text, (disp_fn_DefineColor_t *) nodev, (disp_fn_DefineLinestyle_t *) nodev, Plt5_SetLinestyle, Plt5_SetColor, Plt5_Update, (disp_fn_Track_t *) nodev, (disp_fn_MakeMenu_t *) nodev, (disp_fn_MakeDialog_t *) nodev, (disp_fn_Input_t *) nodev, gen_DatatoScreen, }, { "postscript", 0, 0, 1000, 1000, 0, 0, PS_Init, PS_NewViewport, PS_Close, PS_Clear, PS_DrawLine, PS_Arc, PS_Text, (disp_fn_DefineColor_t *) nodev, (disp_fn_DefineLinestyle_t *) nodev, PS_SetLinestyle, PS_SetColor, PS_Update, (disp_fn_Track_t *) nodev, (disp_fn_MakeMenu_t *) nodev, (disp_fn_MakeDialog_t *) nodev, (disp_fn_Input_t *) nodev, gen_DatatoScreen, }, { "hpgl", 0, 0, 1000, 1000, 0, 0, GL_Init, GL_NewViewport, GL_Close, GL_Clear, GL_DrawLine, GL_Arc, GL_Text, (disp_fn_DefineColor_t *) nodev, (disp_fn_DefineLinestyle_t *) nodev, GL_SetLinestyle, GL_SetColor, GL_Update, (disp_fn_Track_t *) nodev, (disp_fn_MakeMenu_t *) nodev, (disp_fn_MakeDialog_t *) nodev, (disp_fn_Input_t *) nodev, gen_DatatoScreen, }, { "printf", 0, 0, 24, 80, 0, 0, (disp_fn_Init_t *) nodev, (disp_fn_NewViewport_t *) nodev, (disp_fn_Close_t *) nop, (disp_fn_Clear_t *) nodev, (disp_fn_DrawLine_t *) nodev, (disp_fn_Arc_t *) nodev, (disp_fn_Text_t *) nodev, (disp_fn_DefineColor_t *) nodev, (disp_fn_DefineLinestyle_t *) nodev, (disp_fn_SetLinestyle_t *) nodev, (disp_fn_SetColor_t *) nodev, (disp_fn_Update_t *) nop, (disp_fn_Track_t *) nodev, (disp_fn_MakeMenu_t *) nodev, (disp_fn_MakeDialog_t *) nodev, gen_Input, (disp_fn_DatatoScreen_t *) nodev, }, }; DISPDEVICE *dispdev = device + NUMELEMS(device) - 1; DISPDEVICE * FindDev(char *name) { size_t i; for (i = 0; i < NUMELEMS(device); i++) if (strcmp(name, device[i].name) == 0) return (device + i); sprintf(ErrorMessage, "Can't find device %s.", name); internalerror(ErrorMessage); return (device + 0); } void DevInit(void) { #ifndef X_DISPLAY_MISSING char buf[128]; #endif /* note: do better determination */ /* dumb tradition that got passed on from gi_interface to do compile time determination */ dispdev = NULL; #ifndef X_DISPLAY_MISSING /* determine display type */ if (getenv("DISPLAY") || cp_getvar("display", CP_STRING, buf, sizeof(buf))) dispdev = FindDev("X11"); #endif #ifdef HAS_WINGUI if (!dispdev) dispdev = FindDev("Windows"); #endif #ifdef TCL_MODULE dispdev = FindDev("Tk"); #endif if (!dispdev) { #if !defined(HAS_WINGUI) && !defined(TCL_MODULE) && !defined(SHARED_MODULE) && (defined(_MSC_VER) || defined(__MINGW32__)) /* console application under MS Windows */ fprintf (cp_err, "Warning: no graphics interface!\n" " You may use command 'gnuplot'\n" " if GnuPlot is installed.\n"); #elif !defined(X_DISPLAY_MISSING) externalerror ("no graphics interface;\n" " please check if X-server is running,\n" " or ngspice is compiled properly (see INSTALL)"); #endif dispdev = FindDev("error"); } else if (dispdev->Init()) { fprintf(cp_err, "Warning: can't initialize display device for graphics.\n"); dispdev = FindDev("error"); } } /* NewViewport is responsible for filling in graph->viewport */ int NewViewport(GRAPH *pgraph) { return dispdev->NewViewport (pgraph); } void DevClose(void) { dispdev->Close(); } void DevClear(void) { dispdev->Clear(); } void DevDrawLine(int x1, int y1, int x2, int y2) { dispdev->DrawLine (x1, y1, x2, y2); } void DevDrawArc(int x0, int y0, int radius, double theta, double delta_theta) { dispdev->DrawArc (x0, y0, radius, theta, delta_theta); } void DevDrawText(char *text, int x, int y, int angle) { dispdev->DrawText (text, x, y, angle); } void DefineColor(int colorid, double red, double green, double blue) { dispdev->DefineColor (colorid, red, green, blue); } void DefineLinestyle(int linestyleid, int mask) { dispdev->DefineLinestyle (linestyleid, mask); } void SetLinestyle(int linestyleid) { dispdev->SetLinestyle (linestyleid); } void SetColor(int colorid) { dispdev->SetColor (colorid); } void DevUpdate(void) { if (dispdev) dispdev->Update(); } /* note: screen coordinates are relative to window so need to add viewport offsets */ static void gen_DatatoScreen(GRAPH *graph, double x, double y, int *screenx, int *screeny) { double low, high; /* note: may want to cache datawindowsize/viewportsize */ /* done */ /* note: think this out---Is 1 part of the viewport? Do we handle this correctly? */ /* have to handle several types of grids */ /* note: we can't compensate for X's demented y-coordinate system here since the grid routines use DevDrawLine w/o calling this routine */ if ((graph->grid.gridtype == GRID_LOGLOG) || (graph->grid.gridtype == GRID_YLOG)) { low = mylog10(graph->datawindow.ymin); high = mylog10(graph->datawindow.ymax); *screeny = (int)((mylog10(y) - low) / (high - low) * graph->viewport.height + 0.5 + graph->viewportyoff); } else { *screeny = (int)(((y - graph->datawindow.ymin) / graph->aspectratioy) + 0.5 + graph->viewportyoff); } if ((graph->grid.gridtype == GRID_LOGLOG) || (graph->grid.gridtype == GRID_XLOG)) { low = mylog10(graph->datawindow.xmin); high = mylog10(graph->datawindow.xmax); *screenx = (int)((mylog10(x) - low) / (high - low) * graph->viewport.width + 0.5 + graph ->viewportxoff); } else { *screenx = (int)((x - graph->datawindow.xmin) / graph->aspectratiox + 0.5 + graph ->viewportxoff); } } void DatatoScreen(GRAPH *graph, double x, double y, int *screenx, int *screeny) { dispdev->DatatoScreen (graph, x, y, screenx, screeny); } void Input(REQUEST *request, RESPONSE *response) { dispdev->Input (request, response); } static int gen_Input(REQUEST *request, RESPONSE *response) { switch (request->option) { case char_option: if (response) response->option = request->option; break; default: /* just ignore, since we don't want a million error messages */ if (response) response->option = error_option; break; } return (0); } /* no operation, do nothing */ static int nop(void) { return (1); /* so NewViewport will fail */ } static int nodev(void) { sprintf(ErrorMessage, "This operation is not defined for display type %s.", dispdev->name); internalerror(ErrorMessage); return (1); } void SaveText(GRAPH *graph, char *text, int x, int y) { struct _keyed *keyed = TMALLOC(struct _keyed, 1); if (!graph->keyed) { graph->keyed = keyed; } else { keyed->next = graph->keyed; graph->keyed = keyed; } keyed->text = TMALLOC(char, strlen(text) + 1); strcpy(keyed->text, text); keyed->x = x; keyed->y = y; keyed->colorindex = graph->currentcolor; } /* if given name of a hardcopy device, finds it and switches devices if given NULL, switches back */ int DevSwitch(char *devname) { static DISPDEVICE *lastdev = NULL; if (devname) { if (lastdev) { internalerror("DevSwitch w/o changing back"); return (1); } lastdev = dispdev; dispdev = FindDev(devname); if (!strcmp(dispdev->name, "error")) { internalerror("no hardcopy device"); /* undo */ dispdev = lastdev; lastdev = NULL; return (1); } dispdev->Init(); } else { if (dispdev) dispdev->Close(); dispdev = lastdev; lastdev = NULL; } return (0); } tmpk8ny_4pz/src/frontend/com_setscale.c0000644000175000017500000000170613546075722020377 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/bool.h" #include "ngspice/dvec.h" #include "com_setscale.h" #include "quote.h" #include "ngspice/cpextern.h" #include "vectors.h" #include "plotting/plotting.h" #include "plotting/pvec.h" #include "ngspice/fteext.h" /* Set the default scale to the named vector. If no vector named, * find and print the default scale. */ void com_setscale(wordlist *wl) { struct dvec *d; char *s; if (plot_cur) { if (wl) { s = cp_unquote(wl->wl_word); d = vec_get(s); if (s) tfree(s);/*DG to avoid the cp_unquote memory leak */ if (d == NULL) fprintf(cp_err, "Error: no such vector as %s.\n", wl->wl_word); else plot_cur->pl_scale = d; } else if (plot_cur->pl_scale) { pvec(plot_cur->pl_scale); } } else { fprintf(cp_err, "Error: no current plot.\n"); } } tmpk8ny_4pz/src/frontend/com_compose.c0000644000175000017500000005150013546075722020236 0ustar carstencarsten/* The 'compose' command. This is a more powerful and convenient form * of the 'let' command. */ #include "ngspice/ngspice.h" #include "ngspice/complex.h" #include "ngspice/dvec.h" #include "ngspice/bool.h" #include "ngspice/sim.h" #include "ngspice/pnode.h" #include "ngspice/fteext.h" #include "ngspice/cpextern.h" #include "ngspice/randnumb.h" #include "quote.h" #include "com_compose.h" #include "completion.h" #include /* log10 */ /* Copy the data from a vector into a buffer with larger dimensions. */ static void dimxpand(struct dvec *v, int *newdims, double *data) { ngcomplex_t *cdata = (ngcomplex_t *) data; bool realflag = isreal(v); int i, j, o, n, t, u; int ncount[MAXDIMS], ocount[MAXDIMS]; for (i = 0; i < MAXDIMS; i++) ncount[i] = ocount[i] = 0; for (;;) { for (o = n = i = 0; i < v->v_numdims; i++) { for (j = i, t = u = 1; j < v->v_numdims; j++) { t *= v->v_dims[j]; u *= newdims[j]; } o += ocount[i] * t; n += ncount[i] * u; } if (realflag) { data[n] = v->v_realdata[o]; } else { cdata[n] = v->v_compdata[o]; } /* Now find the nextstrchr element... */ for (i = v->v_numdims - 1; i >= 0; i--) if ((ocount[i] < v->v_dims[i] - 1) && (ncount[i] < newdims[i] - 1)) { ocount[i]++; ncount[i]++; break; } else { ocount[i] = ncount[i] = 0; } if (i < 0) break; } } /* The general syntax is 'compose name parm = val ...' * The possible parms are: * start The value at which the vector should start. * stop The value at which the vector should end. * step The difference between successive elements. * lin The number of points, linearly spaced. * log The number of points, logarithmically spaced. * dec The number of points per decade, logarithmically spaced. * oct The number of points per octave, logarithmically spaced. * center Where to center the range of points. * span The size of the range of points. * gauss The number of points in the gaussian distribution. * mean The mean value for the gaussian or uniform distributions. * sd The standard deviation for the gaussian distribution. * unif The number of points in the uniform distribution. * * The case 'compose name values val val ...' takes the values and creates a * new vector -- the vals may be arbitrary expressions. Negative vals have to * be put into brackets, like (-1.6). */ void com_compose(wordlist *wl) { double start = 0.0; double stop = 0.0; double step = 0.0; double lin = 0.0; double center = 0.0; double span = 0.0; double mean = 0.0; double sd = 0.0; bool startgiven = FALSE, stopgiven = FALSE, stepgiven = FALSE; bool lingiven = FALSE; bool loggiven = FALSE, decgiven = FALSE, octgiven = FALSE, gaussgiven = FALSE; bool unifgiven = FALSE; bool spangiven = FALSE; bool centergiven = FALSE; bool meangiven = FALSE; bool sdgiven = FALSE; int log = 0, dec = 0, oct = 0, gauss = 0, unif = 0; int i; char *s, *var, *val; double *td, tt; double *data = NULL; ngcomplex_t *cdata = NULL; int length = 0; int dim, type = SV_NOTYPE, blocksize; bool realflag = TRUE; int dims[MAXDIMS]; struct dvec *result, *vecs = NULL, *v, *lv = NULL; struct pnode *pn, *names = NULL; char *resname = cp_unquote(wl->wl_word); vec_remove(resname); wl = wl->wl_next; if (eq(wl->wl_word, "values")) { /* Build up the vector from the rest of the line... */ wl = wl->wl_next; names = ft_getpnames(wl, TRUE); if (!names) goto done; for (pn = names; pn; pn = pn->pn_next) { if ((v = ft_evaluate(pn)) == NULL) goto done; if (!vecs) vecs = lv = v; else lv->v_link2 = v; for (lv = v; lv->v_link2; lv = lv->v_link2) ; } /* Now make sure these are all of the same dimensionality. We * can coerce the sizes... */ dim = vecs->v_numdims; if (dim < 2) dim = (vecs->v_length > 1) ? 1 : 0; if (dim == MAXDIMS) { fprintf(cp_err, "Error: compose -> max dimensionality is %d\n", MAXDIMS); goto done; } for (v = vecs; v; v = v->v_link2) if (v->v_numdims < 2) v->v_dims[0] = v->v_length; /* Init real flag according to type of first element */ realflag = !iscomplex(vecs); for (v = vecs->v_link2, length = 1; v; v = v->v_link2) { i = v->v_numdims; if (i < 2) i = (v->v_length > 1) ? 1 : 0; if (i != dim) { fprintf(cp_err, "Error: compose -> all vectors must be of the same dimensionality\n"); goto done; } length++; if (iscomplex(v)) realflag = FALSE; } for (i = 0; i < dim; i++) { dims[i] = vecs->v_dims[i]; for (v = vecs->v_link2; v; v = v->v_link2) if (v->v_dims[i] > dims[i]) dims[i] = v->v_dims[i]; } dim++; dims[dim - 1] = length; for (i = 0, blocksize = 1; i < dim - 1; i++) blocksize *= dims[i]; if (realflag) data = TMALLOC(double, length * blocksize); else cdata = TMALLOC(ngcomplex_t, length * blocksize); /* Now copy all the data over... If the sizes are too small * then the extra elements are left as 0. */ for (v = vecs, i = 0; v; v = v->v_link2) { if (dim == 1) { /* 3 possibilities * 1) Composed vector is real (and current value is real) * 2) Composed vector is complex * a) and current value is real * b) and current value is complex * It is not possible for the composed vector to be real and * the current value to be complex because it would have * caused the composed vector to be complex. */ if (realflag) { /* composed vector is real */ data[i] = v->v_realdata[0]; } else { /* complex composed vector */ ngcomplex_t *cdata_cur = cdata + i; if (isreal(v)) { /* Current value is real, so build complex value from it * and no imaginary part */ realpart(*cdata_cur) = *v->v_realdata; imagpart(*cdata_cur) = 0.0; } else { *cdata_cur = *v->v_compdata; } } i++; continue; } dimxpand(v, dims, (realflag ? (data + i * blocksize) : (double *) (cdata + i * blocksize))); } length *= blocksize; } else { /* Parse the line... */ while (wl) { if ((s = strchr(wl->wl_word, '=')) != NULL && s[1]) { /* This is var=val. */ *s = '\0'; var = wl->wl_word; val = s + 1; wl = wl->wl_next; } else if (strchr(wl->wl_word, '=')) { /* This is var= val. */ *s = '\0'; var = wl->wl_word; wl = wl->wl_next; if (wl) { val = wl->wl_word; wl = wl->wl_next; } else { fprintf(cp_err, "Error: compose -> bad syntax\n"); goto done; } } else { /* This is var =val or var = val. */ var = wl->wl_word; wl = wl->wl_next; if (wl) { val = wl->wl_word; if (*val != '=') { fprintf(cp_err, "Error: compose -> bad syntax\n"); goto done; } val++; if (!*val) { wl = wl->wl_next; if (wl) { val = wl->wl_word; } else { fprintf(cp_err, "Error: compose -> bad syntax\n"); goto done; } } wl = wl->wl_next; } else { fprintf(cp_err, "Error: compose -> bad syntax\n"); goto done; } } if (cieq(var, "start")) { startgiven = TRUE; if ((td = ft_numparse(&val, FALSE)) == NULL) { fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } start = *td; } else if (cieq(var, "stop")) { stopgiven = TRUE; if ((td = ft_numparse(&val, FALSE)) == NULL) { fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } stop = *td; } else if (cieq(var, "step")) { stepgiven = TRUE; if ((td = ft_numparse(&val, FALSE)) == NULL) { fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } step = *td; } else if (cieq(var, "center")) { centergiven = TRUE; if ((td = ft_numparse(&val, FALSE)) == NULL) { fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } center = *td; } else if (cieq(var, "span")) { spangiven = TRUE; if ((td = ft_numparse(&val, FALSE)) == NULL) { fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } span = *td; } else if (cieq(var, "mean")) { meangiven = TRUE; if ((td = ft_numparse(&val, FALSE)) == NULL) { fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } mean = *td; } else if (cieq(var, "sd")) { sdgiven = TRUE; if ((td = ft_numparse(&val, FALSE)) == NULL) { fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } sd = *td; } else if (cieq(var, "lin")) { lingiven = TRUE; if ((td = ft_numparse(&val, FALSE)) == NULL) { fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } lin = *td; } else if (cieq(var, "log")) { loggiven = TRUE; if ((td = ft_numparse(&val, FALSE)) == NULL) { fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } log = (int)(*td); } else if (cieq(var, "dec")) { decgiven = TRUE; if ((td = ft_numparse(&val, FALSE)) == NULL) { fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } dec = (int)(*td); } else if (cieq(var, "oct")) { octgiven = TRUE; if ((td = ft_numparse(&val, FALSE)) == NULL) { fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } oct = (int)(*td); } else if (cieq(var, "gauss")) { gaussgiven = TRUE; if ((td = ft_numparse(&val, FALSE)) == NULL) { fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } gauss = (int)(*td); } else if (cieq(var, "unif")) { unifgiven = TRUE; if ((td = ft_numparse(&val, FALSE)) == NULL) { fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } unif = (int)(*td); } else { fprintf(cp_err, "Error: compose -> bad parm %s\n", var); goto done; } } /* Now see what we have... start and stop are pretty much * compatible with everything (except gauss)... */ if (centergiven && spangiven && !startgiven && !stopgiven) { start = center - span/2.0; stop = center + span/2.0; startgiven = TRUE; stopgiven = TRUE; } if (stepgiven && (step == 0.0)) { fprintf(cp_err, "Error: compose -> step cannot = 0.0\n"); goto done; } if (lingiven + loggiven + decgiven + octgiven + unifgiven + gaussgiven > 1) { fprintf(cp_err, "Error: compose -> can have at most one of (lin, log, dec, oct, unif, gauss)\n"); goto done; } else if (lingiven + loggiven + decgiven + octgiven + unifgiven + gaussgiven == 0) { /* Hmm, if we have a start, stop, and step we're ok. */ if (startgiven && stopgiven && stepgiven) { lingiven = TRUE; /* Ensure that step has the right sign */ if ((stop - start > 0) != (step > 0)) { step = -step; } lin = (stop - start) / step + 1.; stepgiven = FALSE; /* Problems below... */ } else { fprintf(cp_err, "Error: compose -> either one of (lin, log, dec, oct, unif, gauss) must be given, or all\n"); fprintf(cp_err, "\tof (start, stop, and step) must be given.\n"); goto done; } } if (lingiven) { /* Create a linear sweep... */ if (lin <= 0) { fprintf(cp_err, "Error: compose -> The number of linearly spaced points, lin, must be positive.\n"); goto done; } length = (int)lin; data = TMALLOC(double, length); if (stepgiven && startgiven && stopgiven) { if (step != (stop - start) / (lin - 1.0)) { fprintf(cp_err, "Warning: compose -> bad step -- should be %g. ", (stop - start) / (lin - 1.0)); fprintf(cp_err, "Specify only three out of start, stop, step, lin.\n"); stepgiven = FALSE; } } if (!startgiven) { if (stopgiven && stepgiven) start = stop - step * (lin - 1.0); else if (stopgiven) start = stop - lin + 1.0; else start = 0; startgiven = TRUE; } if (!stopgiven) { if (stepgiven) stop = start + step * (lin - 1.0); else stop = start + lin - 1.; stopgiven = TRUE; } if (!stepgiven) { step = (stop - start) / (lin - 1.0); } for (i = 0, tt = start; i < length; i++, tt += step) data[i] = tt; } else if (loggiven || decgiven || octgiven) { /* Create a log sweep... */ if (centergiven && spangiven) { if (center <= span/2.0) { fprintf(cp_err, "Error: compose -> center must be greater than span/2\n"); goto done; } if ((center <= 0) || (span <= 0)) { fprintf(cp_err, "Error: compose -> center and span must be greater than 0\n"); goto done; } } else if (startgiven && stopgiven) { if ((start <= 0) || (stop <= 0)) { fprintf(cp_err, "Error: compose -> start and stop must be greater than 0\n"); goto done; } } else { fprintf(cp_err, "Error: compose -> start and stop or center and span needed in case of log, dec or oct\n"); goto done; } if (decgiven) { log = (int)round(dec * log10(stop / start)) + 1; } else if (octgiven) { log = (int)round(oct * log10(stop / start) / log10(2)) + 1; } length = log; data = TMALLOC(double, length); data[0] = start; for (i = 0; i < length; i++) data[i] = start * pow(stop/start, (double)i/(log-1.0)); } else if (unifgiven) { /* Create a set of uniform distributed values... */ if (startgiven || stopgiven) { if (!startgiven || !stopgiven) { fprintf(cp_err, "Error: compose -> For uniform distribution (start, stop) can be only given as bundle.\n"); goto done; } if (meangiven || spangiven) { fprintf(cp_err, "Error: compose -> For uniform distribution (start, stop) can't be mixed with mean or span.\n"); goto done; } mean = (start + stop) / 2.0; span = fabs(stop - start); meangiven = TRUE; spangiven = TRUE; } if (unif <= 0) { fprintf(cp_err, "Error: compose -> The number of uniformly distributed points, unif, must be positive.\n"); goto done; } if (!meangiven) { /* Use mean default value 0.5 */ mean = 0.5; } if (!spangiven) { /* Use span default value 1.0 */ span = 1.0; } length = unif; data = TMALLOC(double, length); for (i = 0; i < length; i++) data[i] = mean + span * 0.5 * drand(); } else if (gaussgiven) { /* Create a gaussian distribution... */ if (gauss <= 0) { fprintf(cp_err, "Error: compose -> The number of Gaussian distributed points, gauss, must be positive.\n"); goto done; } if (!meangiven) { /* Use mean default value 0 */ mean = 0; } if (!sdgiven) { /* Use sd default value 1.0 */ sd = 1.0; } length = gauss; data = TMALLOC(double, length); for (i = 0; i < length; i++) data[i] = mean + sd * gauss1(); } } /* Create a vector with the data that was processed */ if (realflag) { result = dvec_alloc(resname, type, VF_REAL | VF_PERMANENT, length, data); } else { result = dvec_alloc(resname, type, VF_COMPLEX | VF_PERMANENT, length, cdata); } /* The allocation for resname has been assigned to the result vector, so * set to NULL so that it is not freed */ resname = NULL; /* Set dimension info */ result->v_numdims = 1; result->v_dims[0] = length; vec_new(result); cp_addkword(CT_VECTOR, result->v_name); done: free_pnode(names); tfree(resname); } tmpk8ny_4pz/src/frontend/shyu.c0000644000175000017500000003102013546075722016716 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ /* Do a run of the circuit, of the given type. Type "resume" is special -- * it means to resume whatever simulation that was in progress. The * return value of this routine is 0 if the exit was ok, and 1 if there was * a reason to interrupt the circuit (interrupt typed at the keyboard, * error in the simulation, etc). args should be the entire command line, * e.g. "tran 1 10 20 uic" */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/fteinp.h" #include "ngspice/sim.h" #include "ngspice/devdefs.h" #include "ngspice/inpdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/ifsim.h" #include "circuits.h" #include "shyu.h" int if_sens_run(CKTcircuit *ckt, wordlist *args, INPtables *tab) { JOB *senseJob; JOB *opJob; struct card *current; IFvalue ptemp; IFvalue *parm; char buf[BSIZE_SP]; int err; char *token; char *steptype; char *name; char *line; struct card deck; int error; int save; int flag = 0; int which = -1; (void) sprintf(buf, ".%s", wl_flatten(args)); deck.nextcard = NULL; deck.actualLine = NULL; deck.error = NULL; deck.linenum = 0; deck.linenum_orig = 0; deck.line = buf; current = &deck; line = current->line; INPgetTok(&line, &token, 1); if (ft_curckt->ci_specTask) { err = ft_sim->deleteTask (ft_curckt->ci_ckt, ft_curckt->ci_specTask); if (err) { ft_sperror(err, "deleteTask"); return (0); /* temporary */ } } err = ft_sim->newTask (ft_curckt->ci_ckt, &(ft_curckt->ci_specTask), "special", & (ft_curckt->ci_defTask)); if (err) { ft_sperror(err, "newTask"); return (0); /* temporary */ } which = ft_find_analysis("options"); if (which == -1) { /* in DEEP trouble */ ft_sperror(err, "in DEEP trouble"); return (0); /* temporary */ } err = ft_sim->newAnalysis (ft_curckt->ci_ckt, which, "options", & (ft_curckt->ci_specOpt), ft_curckt->ci_specTask); if (err) { ft_sperror(err, "createOptions"); return (0); /* temporary */ } ft_curckt->ci_curOpt = ft_curckt->ci_specOpt; ft_curckt->ci_curTask = ft_curckt->ci_specTask; which = ft_find_analysis("SEN"); if (which == -1) { current->error = INPerrCat( current->error, INPmkTemp("sensetivity analysis unsupported\n")); return (0); } err = ft_sim->newAnalysis (ft_curckt->ci_ckt, which, "sense", & senseJob, ft_curckt->ci_specTask); if (err) { ft_sperror(err, "createSense"); return (0); /* temporary */ } save = which; INPgetTok(&line, &token, 1); if (strcmp(token, "ac") == 0) { JOB *acJob; which = ft_find_analysis("AC"); if (which == -1) { current->error = INPerrCat (current->error, INPmkTemp("ac analysis unsupported\n")); return (0); /* temporary */ } err = ft_sim->newAnalysis (ft_curckt->ci_ckt, which, "acan", & acJob, ft_curckt->ci_specTask); if (err) { ft_sperror(err, "createAC"); /* or similar error message */ return (0); /* temporary */ } INPgetTok(&line, &steptype, 1); /* get DEC, OCT, or LIN */ ptemp.iValue = 1; error = INPapName(ckt, which, acJob, steptype, &ptemp); if (error) current->error = INPerrCat(current->error, INPerror(error)); parm = INPgetValue(ckt, &line, IF_INTEGER, tab);/* number of points*/ error = INPapName(ckt, which, acJob, "numsteps", parm); if (error) current->error = INPerrCat(current->error, INPerror(error)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* fstart */ error = INPapName(ckt, which, acJob, "start", parm); if (error) current->error = INPerrCat(current->error, INPerror(error)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* fstop */ error = INPapName(ckt, which, acJob, "stop", parm); if (error) current->error = INPerrCat(current->error, INPerror(error)); } if (strcmp(token, "op") == 0) { which = ft_find_analysis("DCOP"); if (which == -1) { current->error = INPerrCat (current->error, INPmkTemp("DC operating point analysis unsupported\n")); return (0); /* temporary */ } err = ft_sim->newAnalysis (ft_curckt->ci_ckt, which, "dcop", & opJob, ft_curckt->ci_specTask); if (err) { ft_sperror(err, "createOP"); /* or similar error message */ return (0); } } if (strcmp(token, "dc") == 0) { JOB *dcJob; /* .dc SRC1NAME Vstart1 Vstop1 Vinc1 [SRC2NAME Vstart2 */ /* Vstop2 Vinc2 */ which = ft_find_analysis("DCTransfer"); if (which == -1) { current->error = INPerrCat (current->error, INPmkTemp("DC transfer curve analysis unsupported\n")); return (0); /* temporary */ } err = ft_sim->newAnalysis (ft_curckt->ci_ckt, which, "DCtransfer", & dcJob, ft_curckt->ci_specTask); if (err) { ft_sperror(err, "createOP"); /* or similar error message */ return (0); } INPgetTok(&line, &name, 1); INPinsert(&name, tab); ptemp.uValue = name; error = INPapName(ckt, which, dcJob, "name1", &ptemp); if (error) current->error = INPerrCat(current->error, INPerror(error)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vstart1 */ error = INPapName(ckt, which, dcJob, "start1", parm); if (error) current->error = INPerrCat(current->error, INPerror(error)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vstop1 */ error = INPapName(ckt, which, dcJob, "stop1", parm); if (error) current->error = INPerrCat(current->error, INPerror(error)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vinc1 */ error = INPapName(ckt, which, dcJob, "step1", parm); if (error) current->error = INPerrCat(current->error, INPerror(error)); if (*line) { if (*line == 'd') goto next; INPgetTok(&line, &name, 1); INPinsert(&name, tab); ptemp.uValue = name; error = INPapName(ckt, which, dcJob, "name2", &ptemp); if (error) current->error = INPerrCat(current->error, INPerror(error)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vstart1 */ error = INPapName(ckt, which, dcJob, "start2", parm); if (error) current->error = INPerrCat(current->error, INPerror(error)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vstop1 */ error = INPapName(ckt, which, dcJob, "stop2", parm); if (error) current->error = INPerrCat(current->error, INPerror(error)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vinc1 */ error = INPapName(ckt, which, dcJob, "step2", parm); if (error) current->error = INPerrCat(current->error, INPerror(error)); } } if (strcmp(token, "tran") == 0) { JOB *tranJob; which = ft_find_analysis("TRAN"); if (which == -1) { current->error = INPerrCat (current->error, INPmkTemp("transient analysis unsupported\n")); return (0); /* temporary */ } err = ft_sim->newAnalysis (ft_curckt->ci_ckt, which, "tranan", & tranJob, ft_curckt->ci_specTask); if (err) { ft_sperror(err, "createTRAN"); return (0); } parm = INPgetValue(ckt, &line, IF_REAL, tab); /* Tstep */ error = INPapName(ckt, which, tranJob, "tstep", parm); if (error) current->error = INPerrCat(current->error, INPerror(error)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* Tstop*/ error = INPapName(ckt, which, tranJob, "tstop", parm); if (error) current->error = INPerrCat(current->error, INPerror(error)); if (*line) { if (*line == 'd') goto next; if (*line == 'u') goto uic; parm = INPgetValue(ckt, &line, IF_REAL, tab); /* Tstart */ error = INPapName(ckt, which, tranJob, "tstart", parm); if (error) current->error = INPerrCat(current->error, INPerror(error)); if (*line == 'u') goto uic; parm = INPgetValue(ckt, &line, IF_REAL, tab); /* Tmax */ error = INPapName(ckt, which, tranJob, "tmax", parm); if (error) current->error = INPerrCat(current->error, INPerror(error)); uic: if (*line == 'u') { INPgetTok(&line, &name, 1); if (strcmp(name, "uic") == 0) { ptemp.iValue = 1; error = INPapName(ckt, which, tranJob, "tstart", &ptemp); if (error) current->error = INPerrCat(current->error, INPerror(error)); } } } } #ifdef WITH_PSS /* *********************** */ /* PSS - Spertica - 100910 */ /* *********************** */ if (strcmp(token, "pss") == 0) { JOB *pssJob; which = ft_find_analysis("PSS"); if (which == -1) { current->error = INPerrCat (current->error, INPmkTemp("periodic steady state analysis unsupported\n")); return (0); /* temporary */ } err = ft_sim->newAnalysis (ft_curckt->ci_ckt, which, "pssan", & pssJob, ft_curckt->ci_specTask); if (err) { ft_sperror(err, "createPSS"); return (0); } parm = INPgetValue(ckt, &line, IF_REAL, tab); /* Guessed Frequency */ error = INPapName(ckt, which, pssJob, "fguess", parm); if (error) current->error = INPerrCat(current->error, INPerror(error)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* Stabilization time */ error = INPapName(ckt, which, pssJob, "stabtime", parm); if (error) current->error = INPerrCat(current->error, INPerror(error)); parm = INPgetValue(ckt, &line, IF_INTEGER, tab); /* PSS points */ error = INPapName(ckt, which, pssJob, "points", parm); if (error) current->error = INPerrCat(current->error, INPerror(error)); parm = INPgetValue(ckt, &line, IF_INTEGER, tab); /* PSS points */ error = INPapName(ckt, which, pssJob, "harmonics", parm); if (error) current->error = INPerrCat(current->error, INPerror(error)); } #endif next: while (*line) { /* read the entire line */ IFparm *if_parm; if (flag) INPgetTok(&line, &token, 1); else flag = 1; if_parm = ft_find_analysis_parm(save, token); if (!if_parm) { /* didn't find it! */ current->error = INPerrCat (current->error, INPmkTemp(" Error: unknown parameter on .sens - ignored \n")); continue; } /* found it, analysis which, parameter i */ if (if_parm->dataType & IF_FLAG) { /* one of the keywords! */ ptemp.iValue = 1; error = ft_sim->setAnalysisParm (ckt, senseJob, if_parm->id, &ptemp, NULL); if (error) current->error = INPerrCat(current->error, INPerror(error)); } else { parm = INPgetValue (ckt, &line, if_parm->dataType, tab); error = ft_sim->setAnalysisParm (ckt, senseJob, if_parm->id, parm, NULL); if (error) current->error = INPerrCat(current->error, INPerror(error)); } } if ((err = ft_sim->doAnalyses (ckt, 1, ft_curckt->ci_curTask)) != OK) { ft_sperror(err, "doAnalyses"); return (0); /* temporary */ } return (0); } tmpk8ny_4pz/src/frontend/interp.h0000644000175000017500000000033413546075722017240 0ustar carstencarsten/************* * Header file for interp.c * 1999 E. Rouat ************/ #ifndef ngspice_INTERP_H #define ngspice_INTERP_H void lincopy(struct dvec *ov, double *newscale, int newlen, struct dvec *oldscale); #endif tmpk8ny_4pz/src/frontend/com_history.c0000644000175000017500000003426113546075722020277 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* Do history substitutions. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "com_history.h" #ifdef HAVE_GNUREADLINE /* Added GNU Readline Support -- Andrew Veliath */ #include #include #endif #ifdef HAVE_BSDEDITLINE /* SJB added edit line support 2005-05-05 */ #include #endif static wordlist *dohsubst(char *string); static wordlist *dohmod(char **string, wordlist *wl); static wordlist *hpattern(char *buf); static wordlist *hprefix(char *buf); static wordlist *getevent(int num); #if !defined(HAVE_GNUREADLINE) && !defined(HAVE_BSDEDITLINE) static void cp_hprint(int eventhi, int eventlo, bool rev); static void freehist(int num); #endif static char *dohs(char *pat, char *str); struct histent *cp_lastone = NULL; int cp_maxhistlength = 10000; /* Chris Inbody */ char cp_hat = '^'; char cp_bang = '!'; bool cp_didhsubst; static struct histent *histlist = NULL; static int histlength = 0; /* First check for a ^ at the beginning of the line, and then search * each word for !. Following this can be any of string, number, * ?string, -number ; then there may be a word specifier, the same as * csh, and then the : modifiers. For the :s modifier, the syntax is * :sXoooXnnnX, where X is any character, and ooo and nnn are strings * not containing X. */ wordlist * cp_histsubst(wordlist *wlist) { wordlist *nwl, *w, *n; char *s, *b; /* Replace ^old^new with !:s^old^new. */ cp_didhsubst = FALSE; if (*wlist->wl_word == cp_hat) { char *x = wlist->wl_word; wlist->wl_word = tprintf("%c%c:s%s", cp_bang, cp_bang, wlist->wl_word); tfree(x); } for (w = wlist; w; w = w->wl_next) { b = w->wl_word; for (s = b; *s; s++) if (*s == cp_bang) { cp_didhsubst = TRUE; n = dohsubst(s + 1); if (!n) { wlist->wl_word = NULL; return (wlist); } if (s > b) { char *x = n->wl_word; n->wl_word = tprintf("%.*s%s", (int)(s-b), b, n->wl_word); tfree(x); } nwl = wl_splice(w, n); if (wlist == w) wlist = n; w = nwl; break; } } return (wlist); } /* Do a history substitution on one word. Figure out which event is * being referenced, then do word selections and modifications, and * then stick anything left over on the end of the last word. */ static wordlist * dohsubst(char *string) { wordlist *wl, *nwl; char buf[BSIZE_SP], *s, *r = NULL, *t; if (*string == cp_bang) { if (cp_lastone) { wl = cp_lastone->hi_wlist; string++; } else { fprintf(cp_err, "0: event not found.\n"); return (NULL); } } else { switch (*string) { case '-': wl = getevent(cp_event - scannum(++string)); if (!wl) return (NULL); while (isdigit_c(*string)) string++; break; case '?': (void) strcpy(buf, string + 1); if ((s = strchr(buf, '?')) != NULL) *s = '\0'; wl = hpattern(buf); if (!wl) return (NULL); if (s == NULL) /* No modifiers on this one. */ return (wl_copy(wl)); break; case '\0': /* Maybe this should be cp_event. */ wl = wl_cons(copy("!"), NULL); cp_didhsubst = FALSE; return (wl); default: if (isdigit_c(*string)) { wl = getevent(scannum(string)); if (!wl) return (NULL); while (isdigit_c(*string)) string++; } else { (void) strcpy(buf, string); for (s = ":^$*-%"; *s; s++) { t = strchr(buf, *s); if (t && ((t < r) || !r)) { r = t; string += r - buf; } } if (r) *r = '\0'; else while (*string) string++; if ((buf[0] == '\0') && cp_lastone) wl = cp_lastone->hi_wlist; else wl = hprefix(buf); if (!wl) return (NULL); } } } if (wl == NULL) { /* Shouldn't happen. */ fprintf(cp_err, "Event not found.\n"); return (NULL); } nwl = dohmod(&string, wl_copy(wl)); if (!nwl) return (NULL); if (*string) { char *x; for (wl = nwl; wl->wl_next; wl = wl->wl_next) ; x = wl->wl_word; wl->wl_word = tprintf("%s%s", wl->wl_word, string); tfree(x); } return (nwl); } static wordlist * dohmod(char **string, wordlist *wl) { wordlist *w; char *s; char *r = NULL, *t; int numwords, eventlo, eventhi, i; bool globalsubst; anothermod: numwords = wl_length(wl); globalsubst = FALSE; eventlo = 0; eventhi = numwords - 1; /* Now we know what wordlist we want. Take care of modifiers now. */ r = NULL; for (s = ":^$*-%"; *s; s++) { t = strchr(*string, *s); if (t && ((t < r) || (r == NULL))) r = t; } if (!r) /* No more modifiers. */ return (wl); *string = r; if (**string == ':') (*string)++; switch (**string) { case '$': /* Last word. */ eventhi = eventlo = numwords - 1; break; case '*': /* Words 1 through $ */ if (numwords == 1) return (NULL); eventlo = 1; eventhi = numwords - 1; break; case '-': /* Words 0 through ... */ eventlo = 0; if (*(*string + 1)) eventhi = scannum(*string + 1); else eventhi = numwords - 1; if (eventhi > numwords - 1) eventhi = numwords - 1; break; case 'p': /* Print the command and don't execute it. * This doesn't work quite like csh. */ wl_print(wl, cp_out); (void) putc('\n', cp_out); return (NULL); case 's': /* Do a substitution. */ for (w = wl; w; w = w->wl_next) { s = dohs(*string + 1, w->wl_word); if (s) { tfree(w->wl_word); w->wl_word = s; if (globalsubst == FALSE) { while (**string) (*string)++; break; } } } /* In case globalsubst is TRUE... */ while (**string) (*string)++; break; default: if (!isdigit_c(**string)) { fprintf(cp_err, "Error: %s: bad modifier.\n", *string); return (NULL); } i = scannum(*string); if (i > eventhi) { fprintf(cp_err, "Error: bad event number %d\n", i); return (NULL); } eventhi = eventlo = i; while (isdigit_c(**string)) (*string)++; if (**string == '*') eventhi = numwords - 1; if (**string == '-') { if (!isdigit_c(*(*string + 1))) { eventhi = numwords - 1; } else { eventhi = scannum(++*string); while (isdigit_c(**string)) (*string)++; } } } /* Now change the word list accordingly and make another pass * if there is more of the substitute left. */ wl = wl_range(wl, eventlo, eventhi); numwords = wl_length(wl); if (**string && *++*string) goto anothermod; return (wl); } /* Look for an event with a pattern in it... */ static wordlist * hpattern(char *buf) { struct histent *hi; wordlist *wl; if (*buf == '\0') { fprintf(cp_err, "Bad pattern specification.\n"); return (NULL); } for (hi = cp_lastone; hi; hi = hi->hi_prev) for (wl = hi->hi_wlist; wl; wl = wl->wl_next) if (substring(buf, wl->wl_word)) return (hi->hi_wlist); fprintf(cp_err, "%s: event not found.\n", buf); return (NULL); } static wordlist * hprefix(char *buf) { struct histent *hi; if (*buf == '\0') { fprintf(cp_err, "Bad pattern specification.\n"); return (NULL); } for (hi = cp_lastone; hi; hi = hi->hi_prev) if (hi->hi_wlist && prefix(buf, hi->hi_wlist->wl_word)) return (hi->hi_wlist); fprintf(cp_err, "%s: event not found.\n", buf); return (NULL); } /* Add a wordlist to the history list. (Done after the first parse.) Note * that if event numbers are given in a random order that's how they'll * show up in the history list. */ void cp_addhistent(int event, wordlist *wlist) { /* MW. This test is not needed if everything works right if (cp_lastone && !cp_lastone->hi_wlist) fprintf(cp_err, "Internal error: bad history list\n"); */ if (cp_lastone == NULL) { /* MW. the begging - initialize histlength */ histlength = 1; cp_lastone = histlist = TMALLOC(struct histent, 1); cp_lastone->hi_prev = NULL; } else { cp_lastone->hi_next = TMALLOC(struct histent, 1); cp_lastone->hi_next->hi_prev = cp_lastone; cp_lastone = cp_lastone->hi_next; } cp_lastone->hi_next = NULL; cp_lastone->hi_event = event; cp_lastone->hi_wlist = wl_copy(wlist); #if !defined(HAVE_GNUREADLINE) && !defined(HAVE_BSDEDITLINE) freehist(histlength - cp_maxhistlength); histlength++; #endif } /* Get a copy of the wordlist associated with an event. Error if out * of range. */ static wordlist * getevent(int num) { struct histent *hi; for (hi = histlist; hi; hi = hi->hi_next) if (hi->hi_event == num) break; if (hi == NULL) { fprintf(cp_err, "%d: event not found.\n", num); return (NULL); } return (wl_copy(hi->hi_wlist)); } #if !defined(HAVE_GNUREADLINE) && !defined(HAVE_BSDEDITLINE) /* Print out history between eventhi and eventlo. * This doesn't remember quoting, so 'hodedo' prints as hodedo. */ static void cp_hprint(int eventhi, int eventlo, bool rev) { struct histent *hi; if (rev) { for (hi = histlist; hi->hi_next; hi = hi->hi_next) ; for (; hi; hi = hi->hi_prev) if ((hi->hi_event <= eventhi) && (hi->hi_event >= eventlo) && hi->hi_wlist) { fprintf(cp_out, "%d\t", hi->hi_event); wl_print(hi->hi_wlist, cp_out); (void) putc('\n', cp_out); } } else { for (hi = histlist; hi; hi = hi->hi_next) if ((hi->hi_event <= eventhi) && (hi->hi_event >= eventlo) && hi->hi_wlist) { fprintf(cp_out, "%d\t", hi->hi_event); wl_print(hi->hi_wlist, cp_out); (void) putc('\n', cp_out); } } } /* This just gets rid of the first num entries on the history list, and * decrements histlength. */ static void freehist(int num) { struct histent *hi; if (num < 1) return; histlength -= num; hi = histlist; while (num-- && histlist->hi_next) histlist = histlist->hi_next; if (histlist->hi_prev) { histlist->hi_prev->hi_next = NULL; histlist->hi_prev = NULL; } else { fprintf(cp_err, "Internal error: history list mangled\n"); exit(0); /* Chris Inbody */ } while (hi->hi_next) { wl_free(hi->hi_wlist); hi = hi->hi_next; tfree(hi->hi_prev); } wl_free(hi->hi_wlist); tfree(hi); } #endif /* !defined(HAVE_GNUREADLINE) && !defined(HAVE_BSDEDITLINE) */ /* Do a :s substitution. */ static char * dohs(char *pat, char *str) { char schar, *s, *p, buf[BSIZE_SP]; int i = 0, plen; bool ok = FALSE; pat = copy(pat); /* Don't want to mangle anything. */ schar = *pat++; s = strchr(pat, schar); if (s == NULL) { fprintf(cp_err, "Bad substitute.\n"); return (NULL); } *s++ = '\0'; p = strchr(s, schar); if (p) *p = '\0'; plen = (int) strlen(pat) - 1; for (i = 0; *str; str++) { if ((*str == *pat) && prefix(pat, str) && (ok == FALSE)) { for (p = s; *p; p++) buf[i++] = *p; str += plen; ok = TRUE; } else { buf[i++] = *str; } } buf[i] = '\0'; if (ok) return (copy(buf)); else return (NULL); } /* The "history" command. history [-r] [number] */ void com_history(wordlist *wl) { bool rev = FALSE; if (wl && eq(wl->wl_word, "-r")) { wl = wl->wl_next; rev = TRUE; } #if defined(HAVE_GNUREADLINE) || defined(HAVE_BSDEDITLINE) /* Added GNU Readline Support -- Andrew Veliath */ { HIST_ENTRY *he; int i, N; N = (wl == NULL) ? history_length : atoi(wl->wl_word); if (N < 0) N = 0; if (N > history_length) N = history_length; if (rev) for (i = history_length; i > 0 && N; --i, --N) { he = history_get(i); if (!he) return; fprintf(cp_out, "%d\t%s\n", i, he->line); } else for (i = history_length - N + 1; i <= history_length; ++i) { he = history_get(i); if (!he) return; fprintf(cp_out, "%d\t%s\n", i, he->line); } } #else if (wl == NULL) cp_hprint(cp_event - 1, cp_event - histlength, rev); else cp_hprint(cp_event - 1, cp_event - 1 - atoi(wl->wl_word), rev); #endif } tmpk8ny_4pz/src/frontend/ftehelp.h0000644000175000017500000000064213546075722017370 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Jeffrey M. Hsu **********/ /* Defines for help. */ #define E_HASPLOTS 1 #define E_NOPLOTS 2 #define E_HASGRAPHS 4 #define E_MENUMODE 8 #define E_BEGINNING 4096 #define E_INTERMED 8192 #define E_ADVANCED 16384 #define E_ALWAYS 32768 /* default is intermediate level */ #define E_DEFHMASK 8192 tmpk8ny_4pz/src/frontend/com_alias.h0000644000175000017500000000031613546075722017666 0ustar carstencarsten/************* * Header file for com_alias.c * 1999 E. Rouat ************/ #ifndef ngspice_COM_ALIAS_H #define ngspice_COM_ALIAS_H void com_alias(wordlist *wl); void com_unalias(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/gens.c0000644000175000017500000001742513546075722016677 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "ngspice/cpstd.h" #include "ngspice/ftedefs.h" #include "ngspice/fteext.h" #include "ngspice/devdefs.h" #include "ngspice/dgen.h" #include "gens.h" static void dgen_next(dgen **dgx); void wl_forall(wordlist *wl, void (*fn)(wordlist*, dgen*), dgen *data) { while (wl) { fn (wl, data); wl = wl->wl_next; } } dgen * dgen_init(CKTcircuit *ckt, wordlist *wl, int nomix, int flag, int model) { dgen *dg, *dg_save; NG_IGNORE(nomix); dg = TMALLOC(dgen, 1); dg->ckt = ckt; dg->instance = NULL; dg->model = NULL; dg->dev_type_no = -1; dg->dev_list = wl; dg->flags = 0; dg_save = dg; /* va: save, to avoid memory leak */ if (model) dg->flags = (DGEN_ALL & ~ DGEN_INSTANCE) | DGEN_INIT; else dg->flags = DGEN_ALL | DGEN_INIT; if (wl) dg->flags |= flag; else dg->flags |= DGEN_DEFDEVS | flag; dgen_next(&dg); /* va: it might be too much tests, but safer is better... */ if (dg != dg_save && dg == NULL && dg_save != NULL) tfree(dg_save); return dg; } int dgen_for_n(dgen *dg, int n, int (*fn) (dgen*, IFparm*, int), IFparm *data, int subindex) { dgen dgx, *dgxp; int dnum, i, j, k; dgxp = &dgx; memcpy(dgxp, dg, sizeof(dgx)); /* va: compatible pointer types */ dnum = dgxp->dev_type_no; k = 0; for (i = 0; dgxp && dgxp->dev_type_no == dnum && i < n; i++) { /*printf("Loop at %d\n", i);*/ j = fn (dgxp, data, subindex); if (j > k) k = j; dgen_next(&dgxp); } return k - subindex; } void dgen_nth_next(dgen **p_dg, int n) { int i, dnum; dgen *dg_save = *p_dg; /* va: save, to avoid memory leak */ dnum = (*p_dg)->dev_type_no; for (i = 0; *p_dg && (*p_dg)->dev_type_no == dnum && i < n; i++) { dgen_next(p_dg); /* va: it might be too much tests, but safer is better... */ if (*p_dg != dg_save && *p_dg == NULL && dg_save != NULL) tfree(dg_save); } } static void dgen_next(dgen **dgx) { int done; dgen *dg; char *p; int need; wordlist *w; char type, *subckt, *device, *model; char *Top_Level = "\001"; int subckt_len; int head_match; char *word, *dev_name, *mod_name; dg = *dgx; if (!dg) return; /* Prime the "model only" or "device type only" iteration, * required because the filtering (below) may request additional * detail. */ if (!(dg->flags & DGEN_INSTANCE)) { if (!(dg->flags & DGEN_MODEL)) dg->model = NULL; dg->instance = NULL; } need = dg->flags; done = 0; while (!done) { if (dg->instance) { /* next instance */ dg->instance = dg->instance->GENnextInstance; } else if (dg->model) { dg->model = dg->model->GENnextModel; if (dg->model) dg->instance = dg->model->GENinstances; } else if (dg->dev_type_no < DEVmaxnum) { dg->dev_type_no += 1; if (dg->dev_type_no < DEVmaxnum) { dg->model = dg->ckt->CKThead[dg->dev_type_no]; if (dg->model) dg->instance = dg->model->GENinstances; } else { done = 2; break; } } else { done = 2; break; } if (need & DGEN_INSTANCE && !dg->instance) continue; if (need & DGEN_MODEL && !dg->model) continue; /* Filter */ if (!dg->dev_list) { if ((dg->flags & DGEN_ALLDEVS) || ((dg->flags & DGEN_DEFDEVS) && (ft_sim->devices[dg->dev_type_no]->flags & DEV_DEFAULT))) { done = 1; } else { done = 0; } continue; } done = 0; for (w = dg->dev_list; w && !done; w = w->wl_next) { /* assume a match (have to reset done every time * through */ done = 1; word = w->wl_word; if (!word || !*word) { break; } /* Break up word into type, subcircuit, model, device, * must be nodestructive to "word" */ /* type */ if (*word == ':' || *word == '#') type = '\0'; else type = *word++; /* subcircuit */ subckt = word; /* look for last ":" or "#" in word */ for (p = word + strlen(word) /* do '\0' first time */; p != word && *p != ':' && *p != '#'; p--) { ; } if (*p != ':' && *p != '#') { /* No subcircuit name specified */ subckt = NULL; subckt_len = 0; } else { if (p[-1] == ':') { head_match = 1; subckt_len = (int)(p - word) - 1; } else { head_match = 0; subckt_len = (int)(p - word); } if (subckt_len == 0) { /* Top level only */ if (head_match) subckt = NULL; else subckt = Top_Level; } word = p + 1; } /* model or device */ if (*p == '#') { model = word; device = NULL; } else { model = NULL; device = word; } /* Now compare */ if (dg->instance) dev_name = dg->instance->GENname; else dev_name = NULL; if (dg->model) mod_name = dg->model->GENmodName; else mod_name = NULL; if (type) { if (!dev_name) { done = 0; /*printf("No device.\n");*/ need |= DGEN_MODEL; continue; } else if (type != *dev_name) { done = 0; /*printf("Wrong type.\n");*/ /* Bleh ... plan breaks down here */ /* need = DGEN_TYPE; */ continue; } } if (subckt == Top_Level) { if (dev_name && dev_name[1] == ':') { need |= DGEN_INSTANCE; done = 0; /*printf("Wrong level.\n");*/ continue; } } else if (subckt && (!dev_name || !ciprefix(subckt, dev_name + 1))) { need |= DGEN_INSTANCE; done = 0; /*printf("Wrong subckt.\n"); */ continue; } if (device && *device) { need |= DGEN_INSTANCE | DGEN_MODEL; if (!dev_name) { done = 0; /*printf("Didn't get dev name.\n");*/ continue; } else if (strcmp(device, dev_name + 1 + subckt_len)) { done = 0; /*printf("Wrong name.\n");*/ continue; } } else if (model && *model) { if (strcmp(model, mod_name)) { done = 0; need |= DGEN_MODEL; /*printf("Wrong model name.\n");*/ continue; } } break; } } if (done == 2) *dgx = NULL; } tmpk8ny_4pz/src/frontend/com_unset.h0000644000175000017500000000027213546075722017734 0ustar carstencarsten/************* * Header file for com_unset.c ************/ #ifndef ngspice_COM_UNSET_H #define ngspice_COM_UNSET_H #include "ngspice/wordlist.h" void com_unset(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/dimens.h0000644000175000017500000000105013546075722017212 0ustar carstencarsten/************* * Header file for dimens.c * 1999 E. Rouat ************/ #ifndef ngspice_DIMENS_H #define ngspice_DIMENS_H void dimstring(const int *dim_data, int n_dim, char *retstring); void indexstring(const int *dim_data, int n_dim, char *retstring); int incindex(int *counts, int numcounts, const int *dims, int numdims); int atodims(const char *p, int *data, int *outlength); #ifdef COMPILE_UNUSED_FUNCTIONS /* #ifdef COMPILE_UNUSED_FUNCTIONS added 2019-03-31 */ int emptydims(int *data, int length); char *skipdims(char *p); #endif #endif tmpk8ny_4pz/src/frontend/help/0000755000175000017500000000000013546075722016516 5ustar carstencarstentmpk8ny_4pz/src/frontend/help/readhelp.c0000644000175000017500000002167613546075722020462 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1986 Wayne A. Christopher, U. C. Berkeley CAD Group Modified 1999 Emmanuel Rouat **********/ /* * SJB 20 May 2001 * Bug fix in help_read() * findsubject() now ignores case and does additional searches for partial matches * when a complete match is not found - additional code based on code in MacSpice. */ #include "ngspice/ngspice.h" #include "ngspice/cpstd.h" #include "ngspice/hlpdefs.h" #include "ngspice/suffix.h" static char *getsubject(fplace *place); static toplink *getsubtoplink(char **ss); static topic *alltopics = NULL; static fplace *copy_fplace(fplace *place); static int sortcmp(const void *a, const void *b) { toplink **tlp1 = (toplink **) a; toplink **tlp2 = (toplink **) b; return (strcmp((*tlp1)->description, (*tlp2)->description)); } static void sortlist(toplink **tlp) { toplink **vec, *tl; size_t num = 0, i; for (tl = *tlp; tl; tl = tl->next) num++; if (!num) return; vec = TMALLOC(toplink *, num); for (tl = *tlp, i = 0; tl; tl = tl->next, i++) vec[i] = tl; (void) qsort(vec, num, sizeof (toplink *), sortcmp); *tlp = vec[0]; for (i = 0; i < num - 1; i++) vec[i]->next = vec[i + 1]; vec[i]->next = NULL; tfree(vec); } topic * hlp_read(fplace *place) { char buf[BSIZE_SP]; topic *top = TMALLOC(topic, 1); toplink *topiclink; toplink *tl, *tend = NULL; wordlist *end = NULL; int i, fchanges; char *s; bool mof = FALSE; if (!place) return NULL; top->place = copy_fplace(place); /* get the title */ if (!place->fp) place->fp = hlp_fopen(place->filename); if (!place->fp) return (NULL); fseek(place->fp, place->fpos, SEEK_SET); (void) fgets(buf, BSIZE_SP, place->fp); /* skip subject */ (void) fgets(buf, BSIZE_SP, place->fp); for (s = buf; *s && (*s != '\n'); s++) ; *s = '\0'; top->title = copy(&buf[7]); /* don't copy "TITLE: " */ /* get the text */ /* skip to TEXT: */ while (fgets(buf, BSIZE_SP, place->fp)) { if (!strncmp("TEXT: ", buf, 6)) break; if ((*buf == '\0') || /* SJB - bug fix */ !strncmp("SEEALSO: ", buf, 9) || !strncmp("SUBTOPIC: ", buf, 10)) { /* no text */ top->text = NULL; goto endtext; } } mof = TRUE; while (mof && !strncmp("TEXT: ", buf, 6)) { for (s = &buf[6], fchanges = 0; *s && (*s != '\n'); s++) if (((s[0] == '\033') && s[1]) || ((s[0] == '_') && (s[1] == '\b'))) fchanges++; *s = '\0'; wl_append_word(&(top->text), &end, copy(&buf[6])); top->numlines++; i = (int) strlen(&buf[6]) - fchanges; if (top->maxcols < i) top->maxcols = i; mof = fgets(buf, BSIZE_SP, place->fp) == NULL ? FALSE : TRUE; } endtext: /* get subtopics */ while(mof && !strncmp("SUBTOPIC: ", buf, 10)) { s = &buf[10]; /* process tokens within line, updating pointer */ while (*s) { if ((topiclink = getsubtoplink(&s)) != NULL) { if (tend) tend->next = topiclink; else top->subtopics = topiclink; tend = topiclink; } } mof = fgets(buf, BSIZE_SP, place->fp) == NULL ? FALSE : TRUE; } /* get see alsos */ tend = NULL; while(mof && !strncmp("SEEALSO: ", buf, 9)) { s = &buf[9]; /* process tokens within line, updating pointer */ while (*s) { if ((topiclink = getsubtoplink(&s)) != NULL) { if (tend) tend->next = topiclink; else top->seealso = topiclink; tend = topiclink; } } mof = fgets(buf, BSIZE_SP, place->fp) == NULL ? FALSE : TRUE; } /* Now we have to fill in the subjects for the seealsos and subtopics. */ for (tl = top->seealso; tl; tl = tl->next) tl->description = getsubject(tl->place); for (tl = top->subtopics; tl; tl = tl->next) tl->description = getsubject(tl->place); sortlist(&top->seealso); /* sortlist(&top->subtopics); It looks nicer if they are in the original order */ top->readlink = alltopics; alltopics = top; return (top); } /* *ss is of the form filename:subject */ static toplink * getsubtoplink(char **ss) { toplink *tl; char *tmp, *s, *t; char subject[BSIZE_SP]; if (!**ss) return (NULL); s = *ss; tl = TMALLOC(toplink, 1); if ((tmp =strchr(s, ':')) != NULL) { tl->place = TMALLOC(fplace, 1); tl->place->filename = strncpy(TMALLOC(char, tmp - s + 1), s, (size_t) (tmp - s)); tl->place->filename[tmp - s] = '\0'; strtolower(tl->place->filename); /* see if filename is on approved list */ if (!hlp_approvedfile(tl->place->filename)) { tfree(tl->place); tfree(tl); /* skip up to next comma or newline */ while (*s && *s != ',' && *s != '\n') s++; while (*s && (*s == ',' || *s == ' ' || *s == '\n')) s++; *ss = s; return (NULL); } tl->place->fp = hlp_fopen(tl->place->filename); for (s = tmp + 1, t = subject; *s && *s != ',' && *s != '\n'; s++) *t++ = *s; *t = '\0'; tl->place->fpos = findsubject(tl->place->filename, subject); if (tl->place->fpos == -1) { tfree(tl->place); tfree(tl); while (*s && (*s == ',' || *s == ' ' || *s == '\n')) s++; *ss = s; return (NULL); } } else { fprintf(stderr, "bad filename:subject pair %s\n", s); /* skip up to next free space */ while (*s && *s != ',' && *s != '\n') s++; while (*s && (*s == ',' || *s == ' ' || *s == '\n')) s++; *ss = s; tfree(tl->place); tfree(tl); return (NULL); } while (*s && (*s == ',' || *s == ' ' || *s == '\n')) s++; *ss = s; return (tl); } /* returns a file position, -1 on error */ long findsubject(char *filename, char *subject) { FILE *fp; char buf[BSIZE_SP]; struct hlp_index indexitem; if (!filename) { return -1; } /* open up index for filename */ sprintf(buf, "%s%s%s.idx", hlp_directory, DIR_PATHSEP, filename); hlp_pathfix(buf); if ((fp = fopen(buf, "rb")) == NULL) { perror(buf); return (-1); } /* try it exactly (but ignore case) */ while(fread(&indexitem, sizeof (struct hlp_index), 1, fp)) { if (!strncasecmp(subject, indexitem.subject, 64)) { /* sjb - ignore case */ fclose(fp); return (indexitem.fpos); } } fclose(fp); if ((fp = fopen(buf, "rb")) == NULL) { perror(buf); return (-1); } /* try it abbreviated (ignore case) */ while(fread(&indexitem, sizeof (struct hlp_index), 1, fp)) { if (!strncasecmp(indexitem.subject,subject, strlen(subject))) { fclose(fp); return (indexitem.fpos); } } fclose(fp); if ((fp = fopen(buf, "rb")) == NULL) { perror(buf); return (-1); } /* try it within */ /* FIXME: need a case independent version of strstr() */ while(fread(&indexitem, sizeof (struct hlp_index), 1, fp)) { if (strstr(indexitem.subject,subject)) { fclose(fp); return (indexitem.fpos); } } fclose(fp); return (-1); } static char * getsubject(fplace *place) { char buf[BSIZE_SP], *s; if (!place->fp) place->fp = hlp_fopen(place->filename); if (!place->fp) return(NULL); fseek(place->fp, place->fpos, SEEK_SET); (void) fgets(buf, BSIZE_SP, place->fp); for (s = buf; *s && (*s != '\n'); s++) ; *s = '\0'; return (copy(&buf[9])); /* don't copy "SUBJECT: " */ } static void tlfree(toplink *tl) { toplink *nt = NULL; while (tl) { tfree(tl->description); tfree(tl->place->filename); tfree(tl->place); /* Don't free the button stuff... */ nt = tl->next; tfree(tl); tl = nt; } } void hlp_free(void) { topic *top, *nt = NULL; for (top = alltopics; top; top = nt) { nt = top->readlink; tfree(top->title); tfree(top->place); wl_free(top->text); tlfree(top->subtopics); tlfree(top->seealso); tfree(top); } alltopics = NULL; } static fplace * copy_fplace(fplace *place) { fplace *newplace; newplace = TMALLOC(fplace, 1); newplace->filename = copy(place->filename); newplace->fpos = place->fpos; newplace->fp = place->fp; return (newplace); } tmpk8ny_4pz/src/frontend/help/Makefile.am0000644000175000017500000000054313546075722020554 0ustar carstencarsten## Process this file with automake to produce Makefile.in if !NO_X noinst_LTLIBRARIES = libhlp.la libhlp_la_SOURCES = \ help.c \ provide.c \ readhelp.c \ textdisp.c \ xdisplay.c \ x11disp.c libhlp_la_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include @X_CFLAGS@ libhlp_la_CFLAGS = $(STATIC) endif MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/frontend/help/xdisplay.c0000644000175000017500000000171713546075722020525 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1986 Wayne A. Christopher, U. C. Berkeley CAD Group Modified 1999 Emmanuel Rouat **********/ #include "ngspice/ngspice.h" #include "ngspice/cpstd.h" #include "ngspice/hlpdefs.h" #include "ngspice/suffix.h" char *hlp_boldfontname = BOLD_FONT; char *hlp_regfontname = REG_FONT; char *hlp_italicfontname = ITALIC_FONT; char *hlp_titlefontname = TITLE_FONT; char *hlp_buttonfontname = BUTTON_FONT; char *hlp_displayname = NULL; int hlp_initxpos = START_XPOS; int hlp_initypos = START_YPOS; int hlp_buttonstyle = BS_LEFT; #ifdef X_DISPLAY_MISSING bool hlp_xdisplay(topic *top) { NG_IGNORE(top); return (FALSE); } void hlp_xkillwin(topic *top) { NG_IGNORE(top); } #endif void hlp_xwait(topic *top, bool on) { NG_IGNORE(on); NG_IGNORE(top); } void hlp_xclosedisplay(void) { } toplink * hlp_xhandle(topic **pp) { *pp = NULL; return (NULL); } tmpk8ny_4pz/src/frontend/help/textdisp.c0000644000175000017500000001120113546075722020521 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1986 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * faustus@cad.berkeley.edu, ucbvax!faustus * Permission is granted to modify and re-distribute this code in any manner * as long as this notice is preserved. All standard disclaimers apply. * */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/hlpdefs.h" #include "ngspice/suffix.h" #include "ngspice/stringskip.h" static topic *curtop; static bool quitflag; static void putline(char *s); static int putstuff(toplink *tl, int base); int hlp_width = 72; bool hlp_tdisplay(topic *top) { wordlist *wl; int i = 0; curtop = top; out_init(); out_printf("\n\t%s\n", top->title); for (wl = top->text; wl; wl = wl->wl_next) putline(wl->wl_word); if (top->subtopics) { out_printf("\tSub-Topics:\n\n"); i = putstuff(top->subtopics, 0); } if (top->seealso) { out_printf("\n\tSee Also:\n\n"); (void) putstuff(top->seealso, i); } out_printf("\n"); return (TRUE); } toplink * hlp_thandle(topic **parent) { char buf[BSIZE_SP], *s; toplink *tl; int num; quitflag = FALSE; if (!curtop) { *parent = NULL; return (NULL); } for (;;) { fprintf(cp_out, "Selection (`?' for help): "); (void) fflush(cp_out); if (!fgets(buf, BSIZE_SP, cp_in)) { clearerr(stdin); quitflag = TRUE; *parent = NULL; return (NULL); } s = skip_ws(buf); switch (*s) { case '?': fprintf(cp_out, "\n" "Type the number of a sub-topic or see also, or one of:\n" "\tr\tReprint the current topic\n" "\tp or CR\tReturn to the previous topic\n" "\tq\tQuit help\n" "\t?\tPrint this message\n" "\n"); continue; case 'r': (void) hlp_tdisplay(curtop); continue; case 'q': quitflag = TRUE; *parent = NULL; return (NULL); case 'p': case '\n': case '\r': case '\0': *parent = curtop; return (NULL); } if (!isdigit_c(*s)) { fprintf(cp_err, "Invalid command\n"); continue; } num = atoi(s); if (num <= 0) { fprintf(cp_err, "Bad choice.\n"); continue; } for (tl = curtop->subtopics; tl; tl = tl->next) if (--num == 0) break; if (num) { for (tl = curtop->seealso; tl; tl = tl->next) if (--num == 0) break; } if (num) { fprintf(cp_err, "Bad choice.\n"); continue; } *parent = curtop; return (tl); } } /* ARGSUSED */ void hlp_tkillwin(topic *top) { NG_IGNORE(top); if (curtop) curtop = curtop->parent; if (curtop && !quitflag) (void) hlp_tdisplay(curtop); } /* This has to rip out the font changes from the lines... */ static void putline(char *s) { char buf[BSIZE_SP]; int i = 0; while (*s) { if (((*s == '\033') && s[1]) || ((*s == '_') && (s[1] == '\b'))) s += 2; else buf[i++] = *s++; } buf[i] = '\0'; out_printf("%s\n", buf); } /* Figure out the number of columns we can use. Assume an entry like * nn) word -- add 5 characters to the width... */ static int putstuff(toplink *tl, int base) { int maxwidth = 0; int ncols, nrows, nbuts = 0, i, j, k; toplink *tt; for (tt = tl; tt; tt = tt->next) { if (maxwidth < (int) strlen(tt->description)) maxwidth = (int) strlen(tt->description); nbuts++; } ncols = hlp_width / (maxwidth + 5); if (ncols < 1) { fprintf(stderr, "Help, button too big!!\n"); return (0); } if (ncols > nbuts) ncols = nbuts; maxwidth = hlp_width / ncols; /* round up */ nrows = (nbuts + ncols - 1) / ncols; for (i = 0; i < nrows; i++) { for (tt = tl, j = 0; j < i; j++, tt = tt->next) ; for (j = 0; j < ncols; j++) { if (tt) out_printf("%2d) %-*s ", base + j * nrows + i + 1, maxwidth - 5, tt->description); for (k = 0; k < nrows; k++) if (tt) tt = tt->next; } out_printf("\n"); } return (nbuts); } tmpk8ny_4pz/src/frontend/help/ChangeLog0000644000175000017500000000156613546075722020300 0ustar carstencarsten1999-08-12 Emmanuel Rouat * x11disp.c: made a cast to (XtCallbackProc) when necessary * readhelp.c: sanitised the code slighly * *.c: changed functions from K&R into ANSI using protoize 1999-08-08 Emmanuel Rouat * xdisplay.c: removed all X10 related code * Makefile.am (DEFS): removed -DWANT_MFB (don't need it) 1999-08-03 Emmanuel Rouat * readhelp.c: HAVE_SYS_DIR_H and HAVE_DIRENT_H instead of HAS_BSDDIRS and HAS_SYSVDIRS. 1999-07-31 Emmanuel Rouat * Makefile.am: added @X_CFLAGS@ in INCLUDES list and removed unused LIBS 28-07-1999 emmanuel.rouat@wanadoo.fr (Manu Rouat) * help.c: * provide.c: * x11disp.c: changed HAS_X11 define to X_DISPLAY_MISSING, which is supplied by autoconf in config.h * removed -DWANT_X11 in Makefile.am tmpk8ny_4pz/src/frontend/help/x11disp.c0000644000175000017500000002422113546075722020154 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: Jeffrey M. Hsu Modified 1999 Emmanuel Rouat **********/ #include "ngspice/ngspice.h" #ifndef X_DISPLAY_MISSING #include "ngspice/cpstd.h" #include "ngspice/hlpdefs.h" #include #include #include #include #include #include #include #include static bool started = FALSE; static topic *topics = NULL; static void newtopic(Widget w, XtPointer client_data, XtPointer call_data); static void delete_w(Widget w, XtPointer client_data, XtPointer call_data); static void quit(Widget w, XtPointer client_data, XtPointer call_data); static void sputline(char *buf, char *s); /* atoms for catching window delet by WM x-button */ static Atom atom_wm_delete_window; static Atom atom_wm_protocols; static Display *display; /* callback function for catching window deletion by WM x-button */ static void handle_wm_messages(Widget w, XtPointer client_data, XEvent *event, Boolean *cont) { topic *top = (topic *) client_data; NG_IGNORE(cont); NG_IGNORE(w); if (event->type == ClientMessage && event->xclient.message_type == atom_wm_protocols && (Atom) event->xclient.data.l[0] == atom_wm_delete_window) { hlp_killfamily(top); hlp_fixchildren(top); } } /* Create a new window... */ bool hlp_xdisplay(topic *top) { toplink *tl; handle *hand; wordlist *wl; char *buf; static Arg titleargs[] = { { XtNtop, (XtArgVal) XtChainTop }, { XtNbottom, (XtArgVal) XtChainTop }, { XtNleft, (XtArgVal) XtChainLeft }, { XtNright, (XtArgVal) XtChainLeft }, { XtNwidth, (XtArgVal) 650 }, }; static Arg formargs[ ] = { { XtNtop, (XtArgVal) XtChainTop }, { XtNtop, (XtArgVal) XtChainTop }, { XtNtop, (XtArgVal) XtChainTop }, { XtNbottom, (XtArgVal) XtChainBottom }, }; Arg htextargs[7]; /* Arg vportargs[5]; */ static Arg bboxargs[ ] = { { XtNtop, (XtArgVal) XtChainBottom }, { XtNtop, (XtArgVal) XtChainBottom }, { XtNtop, (XtArgVal) XtChainBottom }, { XtNtop, (XtArgVal) XtChainBottom }, { XtNbottom, (XtArgVal) XtChainBottom }, { XtNleft, (XtArgVal) XtChainLeft }, { XtNright, (XtArgVal) XtChainLeft }, }; Arg buttonargs[1]; Arg labelargs[3]; Widget buttonwidget; if (!started) { /* have to init everything */ /* assume X toolkit already initialize */ started = TRUE; } top->shellwidget = XtCreateApplicationShell ("shell", topLevelShellWidgetClass, NULL, 0); if (!top->parent) { top->xposition = hlp_initxpos; top->yposition = hlp_initypos; } else { top->xposition = top->parent->xposition + X_INCR; top->yposition = top->parent->yposition + Y_INCR; } XtSetArg(formargs[0], XtNx, top->xposition); XtSetArg(formargs[1], XtNy, top->yposition); top->formwidget = XtCreateManagedWidget ("form", formWidgetClass, top->shellwidget, formargs, XtNumber(formargs)); /* we really want a title bar widget for this, sigh */ top->titlewidget = XtCreateManagedWidget ("title", boxWidgetClass, top->formwidget, titleargs, XtNumber(titleargs)); XtSetArg(labelargs[0], XtNlabel, top->title); XtCreateManagedWidget ("titlelabel", labelWidgetClass, top->titlewidget, labelargs, 1); XtSetArg(buttonargs[0], XtNlabel, "quit help"); buttonwidget = XtCreateManagedWidget ("quit", commandWidgetClass, top->titlewidget, buttonargs, 1); XtAddCallback(buttonwidget, XtNcallback, quit, top); XtSetArg(buttonargs[0], XtNlabel, "delete window"); buttonwidget = XtCreateManagedWidget ("delete", commandWidgetClass, top->titlewidget, buttonargs, XtNumber(buttonargs)); XtAddCallback(buttonwidget, XtNcallback, delete_w, top); buf = TMALLOC(char, 80 * top->numlines + 100); buf[0] = '\0'; for (wl = top->text; wl; wl = wl->wl_next) { sputline(buf, wl->wl_word); } top->chartext = buf; /* make sure gets deallocated later XXX */ XtSetArg(htextargs[0], XtNstring, top->chartext); XtSetArg(htextargs[1], XtNallowResize, True); XtSetArg(htextargs[2], XtNscrollHorizontal, XawtextScrollWhenNeeded); XtSetArg(htextargs[3], XtNscrollVertical, XawtextScrollAlways); XtSetArg(htextargs[4], XtNfromVert, top->titlewidget); XtSetArg(htextargs[5], XtNwidth, 660); XtSetArg(htextargs[6], XtNheight, 350); top->textwidget = XtCreateManagedWidget ("helptext", asciiTextWidgetClass, top->formwidget, htextargs, XtNumber(htextargs)); if (top->subtopics) { XtSetArg(labelargs[0], XtNfromVert, top->textwidget); XtSetArg(labelargs[1], XtNvertDistance, 8); XtSetArg(labelargs[2], XtNlabel, "Subtopics: "); top->sublabelwidget = XtCreateManagedWidget ("sublabel", labelWidgetClass, top->formwidget, labelargs, XtNumber(labelargs)); XtSetArg(bboxargs[0], XtNwidth, 400); XtSetArg(bboxargs[1], XtNallowResize, True); XtSetArg(bboxargs[2], XtNfromVert, top->sublabelwidget); top->subboxwidget = XtCreateManagedWidget ("buttonbox", boxWidgetClass, top->formwidget, bboxargs, XtNumber(bboxargs)); for (tl = top->subtopics; tl; tl = tl->next) { tl->button.text = tl->description; tl->button.tag = tl->place; if (!tl->button.text) tl->button.text = ""; XtSetArg(buttonargs[0], XtNlabel, tl->button.text); buttonwidget = XtCreateManagedWidget (tl->button.text, commandWidgetClass, top->subboxwidget, buttonargs, XtNumber(buttonargs)); /* core leak XXX */ hand = TMALLOC(handle, 1); hand->result = tl; hand->parent = top; XtAddCallback(buttonwidget, XtNcallback, newtopic, hand); } } if (top->seealso) { if (top->subtopics) XtSetArg(labelargs[0], XtNfromVert, top->subboxwidget); else XtSetArg(labelargs[0], XtNfromVert, top->textwidget); XtSetArg(labelargs[1], XtNvertDistance, 8); XtSetArg(labelargs[2], XtNlabel, "See also: "); top->seelabelwidget = XtCreateManagedWidget ("seelabel", labelWidgetClass, top->formwidget, labelargs, XtNumber(labelargs)); XtSetArg(bboxargs[0], XtNwidth, 400); XtSetArg(bboxargs[1], XtNallowResize, True); XtSetArg(bboxargs[2], XtNfromVert, top->seelabelwidget); top->seeboxwidget = XtCreateManagedWidget ("buttonbox", boxWidgetClass, top->formwidget, bboxargs, XtNumber(bboxargs)); for (tl = top->seealso; tl; tl = tl->next) { tl->button.text = tl->description; tl->button.tag = tl->place; if (!tl->button.text) tl->button.text = ""; XtSetArg(buttonargs[0], XtNlabel, tl->button.text); buttonwidget = XtCreateManagedWidget (tl->button.text, commandWidgetClass, top->seeboxwidget, buttonargs, 1); hand = TMALLOC(handle, 1); /* core leak XXX */ hand->result = tl; hand->parent = top; XtAddCallback(buttonwidget, XtNcallback, newtopic, hand); } } XtRealizeWidget(top->shellwidget); top->winlink = topics; topics = top; /* WM_DELETE_WINDOW protocol */ display = XtDisplay(top->shellwidget); atom_wm_protocols = XInternAtom(display, "WM_PROTOCOLS", False); atom_wm_delete_window = XInternAtom(display, "WM_DELETE_WINDOW", False); XtAddEventHandler(top->shellwidget, NoEventMask, True, handle_wm_messages, top); XSetWMProtocols(display, XtWindow(top->shellwidget), &atom_wm_delete_window, 1); return (TRUE); } static void newtopic(Widget w, XtPointer client_data, XtPointer call_data) { topic *parent = ((handle *) client_data)->parent; toplink *result = ((handle *) client_data)->result; topic *newtop; NG_IGNORE(call_data); NG_IGNORE(w); if (!(newtop = hlp_read(result->place))) { fprintf(stderr, "Internal error: bad link\n"); } newtop->next = parent->children; parent->children = newtop; newtop->parent = parent; newtop->xposition = parent->xposition + 50; newtop->yposition = parent->yposition + 50; if (!hlp_xdisplay(newtop)) { fprintf(stderr, "Couldn't open win\n"); return; } } static void delete_w(Widget w, XtPointer client_data, XtPointer call_data) { topic *top = (topic *) client_data; NG_IGNORE(call_data); NG_IGNORE(w); hlp_killfamily(top); hlp_fixchildren(top); } static void quit(Widget w, XtPointer client_data, XtPointer call_data) { topic *top = (topic *) client_data, *parent = top->parent; NG_IGNORE(call_data); NG_IGNORE(w); while (parent && parent->parent) parent = parent->parent; hlp_killfamily(parent ? parent : top); } void hlp_xkillwin(topic *top) { topic *last; if (top == topics) topics = top->winlink; else if (top->winlink) { /* we need this check for the pathological case where you have two helps running, normally hp_killfamily doesn't let this happen */ for (last = topics; last->winlink; last = last->winlink) if (last->winlink == top) { last->winlink = top->winlink; break; } if (!last->winlink) { fprintf(stderr, "window not in list!!\n"); return; } } XtDestroyWidget(top->shellwidget); } /* rip out font changes and write at end of buffer */ static void sputline(char *buf, char *s) { char tmp[BSIZE_SP], *tmpp; int i = 0; while (*s) { if (((*s == '\033') && s[1]) || ((*s == '_') && (s[1] == '\b'))) s += 2; else tmp[i++] = *s++; } tmp[i] = '\0'; /* strcat can't handle long strings */ tmpp = buf + strlen(buf); sprintf(tmpp, "%s\n", tmp); } #endif /* X_DISPLAY_MISSING */ tmpk8ny_4pz/src/frontend/help/provide.c0000644000175000017500000000714613546075722020342 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1986 Wayne A. Christopher, U. C. Berkeley CAD Group Modified 1999 Emmanuel Rouat **********/ /* * faustus@cad.berkeley.edu, ucbvax!faustus * Permission is granted to modify and re-distribute this code in any manner * as long as this notice is preserved. All standard disclaimers apply. * * Toss the help window up on the screen, and deal with the graph... */ #include "ngspice/ngspice.h" #include "ngspice/cpstd.h" #include "ngspice/hlpdefs.h" #include "ngspice/suffix.h" bool hlp_usex = FALSE; void hlp_provide(topic *top) { toplink *res; topic *parent, *newtop; if (!top) return; #ifndef X_DISPLAY_MISSING if (getenv("DISPLAY") || hlp_displayname) hlp_usex = TRUE; #endif top->xposition = top->yposition = 0; if (hlp_usex) { if (!hlp_xdisplay(top)) { fprintf(stderr, "Couldn't open X display.\n"); return; } } else { if (!hlp_tdisplay(top)) { fprintf(stderr, "Couldn't display text\n"); return; } } #ifndef X_DISPLAY_MISSING /* X11 does this asynchronously */ if (hlp_usex) return; #endif for (;;) { if (hlp_usex) res = hlp_xhandle(&parent); else res = hlp_thandle(&parent); if (!res && !parent) { /* No more windows. */ hlp_killfamily(top); if (hlp_usex) hlp_xclosedisplay(); /* need to change display pointer back J.H. */ return; } if (res) { /* Create a new window... */ if (hlp_usex) hlp_xwait(parent, TRUE); if ((newtop = hlp_read(res->place)) == NULL) { fprintf(stderr, "Internal error: bad link\n"); hlp_xwait(parent, FALSE); continue; } if (hlp_usex) hlp_xwait(parent, FALSE); newtop->next = parent->children; parent->children = newtop; newtop->parent = parent; newtop->xposition = parent->xposition + 50; newtop->yposition = parent->yposition + 50; if (hlp_usex) { if (!hlp_xdisplay(newtop)) { fprintf(stderr, "Couldn't open win\n"); return; } } else { if (!hlp_tdisplay(newtop)) { fprintf(stderr, "Couldn't display\n"); return; } } } else { /* Blow this one and its descendants away. */ hlp_killfamily(parent); hlp_fixchildren(parent); if (parent == top) return; } } } void hlp_fixchildren(topic *parent) { topic *pa; if (parent->parent) { if (parent->parent->children == parent) parent->parent->children = parent->next; else { for (pa = parent->parent->children; pa->next; pa = pa->next) if (pa->next == parent) break; if (!pa->next) fprintf(stderr, "bah...\n"); pa->next = pa->next->next; } } } /* Note that this doesn't actually free the data structures, just gets * rid of the window. */ void hlp_killfamily(topic *top) { topic *ch; for (ch = top->children; ch; ch = ch->next) hlp_killfamily(ch); if (hlp_usex) hlp_xkillwin(top); else hlp_tkillwin(top); top->children = NULL; } tmpk8ny_4pz/src/frontend/help/help.c0000644000175000017500000000732413546075722017620 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1986 Wayne A. Christopher, U. C. Berkeley CAD Group Modified 1999 Emmanuel Rouat **********/ /* * The main entry point for the help system. */ #include "ngspice/ngspice.h" #include "ngspice/cpstd.h" #include "ngspice/hlpdefs.h" #include "ngspice/suffix.h" extern char *cp_tildexpand(char *string); char *hlp_directory; extern char *hlp_filelist[]; int hlp_ftablesize = 0; void hlp_main(char *path, wordlist *wl) { topic *top; fplace *place; hlp_directory = path; if (wl) { while (wl) { if ((place = findglobalsubject(wl->wl_word)) == NULL) { fprintf(stderr, "Error: No such topic: %s\n", wl->wl_word); wl = wl->wl_next; continue; } if ((top = hlp_read(place)) == NULL) { fprintf(stderr, "Error: can't read topic\n"); wl = wl->wl_next; continue; } hlp_provide(top); wl = wl->wl_next; } } else { if ((place = findglobalsubject("main")) == NULL) { fprintf(stderr, "Error: no main topic\n"); return; } if ((top = hlp_read(place)) == NULL) { fprintf(stderr, "Error: can't read topic\n"); return; } hlp_provide(top); } #ifdef X_DISPLAY_MISSING hlp_free(); #endif } fplace * findglobalsubject(char *subject) { fplace *place; char **dict; long fpos; place = NULL; for (dict = hlp_filelist; *dict && **dict; dict++) { fpos = findsubject(*dict, subject); if (fpos != -1) { place = TMALLOC(fplace, 1); place->fpos = fpos; place->filename = copy(*dict); place->fp = hlp_fopen(*dict); break; } } return (place); } /* see if file is on filelist */ bool hlp_approvedfile(char *filename) { char **s; for (s = hlp_filelist; *s && **s; s++) if (cieq(*s, filename)) return (TRUE); return (FALSE); } /* keep file pointers on top level files so we don't always have to do fopen's */ FILE * hlp_fopen(char *filename) { static struct { char filename[BSIZE_SP]; FILE *fp; } hlp_ftable[32]; int i; char buf[BSIZE_SP]; for (i = 0; i < hlp_ftablesize; i++) if (cieq(filename, hlp_ftable[i].filename)) return (hlp_ftable[i].fp); /* not already in table */ strcpy(buf, hlp_directory); /* set up pathname */ strcat(buf, DIR_PATHSEP); strcat(buf, filename); strcat(buf, ".txt"); hlp_pathfix(buf); if ((hlp_ftable[hlp_ftablesize].fp = fopen(buf, "r")) == NULL) { perror(buf); return (NULL); } strcpy(hlp_ftable[hlp_ftablesize].filename, filename); hlp_ftablesize++; return (hlp_ftable[hlp_ftablesize - 1].fp); } /* ARGSUSED */ void hlp_pathfix(char *buf) { char *s, *t, *u, bufx[1025]; char *dir_pathsep; dir_pathsep = DIR_PATHSEP; if (!buf) return; s = cp_tildexpand(buf); if (sizeof(DIR_PATHSEP) == 2) { if (*dir_pathsep != '/') { for (t = s; *t; t++) { if (*t == '/') *t = *dir_pathsep; } } else strcpy(buf, s); } else { /* For vms; this probably doesn't work, but neither did the old code */ for (s = bufx, t = buf; *t; t++) { if (*t == '/') for (u = DIR_PATHSEP; *u; u++) *s++ = *u; else *s++ = *t; } *s = '\0'; strcpy(buf, s); } if (s) tfree(s); } tmpk8ny_4pz/src/frontend/display.h0000644000175000017500000000205113546075722017402 0ustar carstencarsten/************* * Header file for display.c * 1999 E. Rouat ************/ /* See if we have been already included */ #ifndef ngspice_DISPLAY_H #define ngspice_DISPLAY_H /* Include a bunch of other stuff to make display.h work */ #include "ngspice/ftedev.h" #include "ngspice/fteinput.h" #include "ngspice/graph.h" DISPDEVICE *FindDev(char *name); void DevInit(void); int NewViewport(GRAPH *pgraph); void DevClose(void); void DevClear(void); void DevDrawLine(int x1, int y1, int x2, int y2); void DevDrawArc(int x0, int y0, int radius, double theta, double delta_theta); void DevDrawText(char *text, int x, int y, int angle); void DefineColor(int colorid, double red, double green, double blue); void DefineLinestyle(int linestyleid, int mask); void SetLinestyle(int linestyleid); void SetColor(int colorid); void DevUpdate(void); void DatatoScreen(GRAPH *graph, double x, double y, int *screenx, int *screeny); void Input(REQUEST *request, RESPONSE *response); void SaveText(GRAPH *graph, char *text, int x, int y); int DevSwitch(char *devname); #endif tmpk8ny_4pz/src/frontend/com_hardcopy.c0000644000175000017500000001324713546075722020410 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/defines.h" #include "ngspice/bool.h" #include "ngspice/wordlist.h" #include "ngspice/cpdefs.h" #include "ngspice/fteinput.h" #include "ngspice/ftedev.h" #include "ngspice/ftedbgra.h" #include "plotting/plotit.h" #include "plotting/graphdb.h" #include "plotting/graf.h" #include "../misc/mktemp.h" #include "arg.h" #include "display.h" #include "com_hardcopy.h" #include "variable.h" /* hardcopy file plotargs, or 'hardcopy file' -- with no other args * this prompts the user for a window to dump to a plot file. XXX no * it doesn't. */ void com_hardcopy(wordlist *wl) { char *fname; char buf[BSIZE_SP], device[BSIZE_SP]; bool tempf = FALSE; char *devtype; #if defined(SYSTEM_PLOT5LPR) || defined(SYSTEM_PSLPR) char format[513]; #endif int printed; int hc_button; int foundit; if (!cp_getvar("hcopydev", CP_STRING, device, sizeof(device))) *device = '\0'; if (wl) { hc_button = 0; fname = wl->wl_word; wl = wl->wl_next; } else { hc_button = 1; fname = smktemp("hc"); tempf = TRUE; } if (!cp_getvar("hcopydevtype", CP_STRING, buf, sizeof(buf))) devtype = "postscript"; else devtype = buf; /* enable screen plot selection for these display types */ foundit = 0; // PushGraphContext(currentgraph); #ifdef HAS_WINGUI if (!wl && hc_button) { char *psfname; GRAPH *tempgraph; if (DevSwitch(devtype)) return; tempgraph = CopyGraph(currentgraph); /* change .tmp to .ps */ psfname = strchr(fname, '.'); if (psfname) { psfname[1] = 'p'; psfname[2] = 's'; psfname[3] = '\0'; } else { fname = trealloc(fname, strlen(fname)+4); strcat(fname, ".ps"); } tempgraph->devdep = fname; if (NewViewport(tempgraph)) { DevSwitch(NULL); return; } gr_resize(tempgraph); gr_redraw(tempgraph); DestroyGraph(tempgraph->graphid); DevSwitch(NULL); foundit = 1; } #endif #ifndef X_DISPLAY_MISSING if (!wl && hc_button) { REQUEST request; RESPONSE response; GRAPH *tempgraph; request.option = click_option; Input(&request, &response); if (response.option == error_option) return; if (response.reply.graph) { if (DevSwitch(devtype)) return; tempgraph = CopyGraph(response.reply.graph); tempgraph->devdep = fname; if (NewViewport(tempgraph)) { DevSwitch(NULL); return; } /* save current graphics context */ PushGraphContext(currentgraph); currentgraph = tempgraph; /* some operations in gr_resize, gr_redraw, and DevSwitch will be done on currentgraph, not only on tempgraph */ gr_resize(tempgraph); gr_redraw(tempgraph); DevSwitch(NULL); /* retrieve current graphics context */ PopGraphContext(); DestroyGraph(tempgraph->graphid); foundit = 1; } } #endif /* save current graphics context, because plotit() will create a new currentgraph */ PushGraphContext(currentgraph); if (!foundit) { if (!wl) { char *buf2; outmenuprompt("which variable ? "); buf2 = prompt(cp_in); if (!buf2) return; wl = wl_cons(buf2, NULL); wl = process(wl); } if (DevSwitch(devtype)) return; if (!wl || !plotit(wl, fname, NULL)) { printf("com_hardcopy: graph not defined\n"); DevSwitch(NULL); /* remember to switch back */ return; } DevSwitch(NULL); } printed = 0; if (*device) { #ifdef SYSTEM_PLOT5LPR if (!strcmp(devtype, "plot5") || !strcmp(devtype, "MFB")) { if (!cp_getvar("lprplot5", CP_STRING, format, sizeof(format))) strcpy(format, SYSTEM_PLOT5LPR); (void) sprintf(buf, format, device, fname); fprintf(cp_out, "Printing %s on the %s printer.\n", fname, device); (void) system(buf); printed = 1; } #endif #ifdef SYSTEM_PSLPR if (!printed && !strcmp(devtype, "postscript")) { /* note: check if that was a postscript printer XXX */ if (!cp_getvar("lprps", CP_STRING, format, sizeof(format))) strcpy(format, SYSTEM_PSLPR); (void) sprintf(buf, format, device, fname); fprintf(cp_out, "Printing %s on the %s printer.\n", fname, device); (void) system(buf); printed = 1; } #endif } if (!printed) { if (!strcmp(devtype, "plot5")) { fprintf(cp_out, "The file \"%s\" may be printed with the Unix \"plot\" command,\n", fname); fprintf(cp_out, "\tor by using the '-g' flag to the Unix lpr command.\n"); } else if (!strcmp(devtype, "postscript")) { fprintf(cp_out, "\nThe file \"%s\" may be printed on a postscript printer.\n", fname); } else if (!strcmp(devtype, "MFB")) { fprintf(cp_out, "The file \"%s\" may be printed on a MFB device.\n", fname); } } if (tempf && *device) (void) unlink(fname); /* restore previous graphics context by retrieving the previous currentgraph */ PopGraphContext(); } tmpk8ny_4pz/src/frontend/streams.c0000644000175000017500000001130113546075722017404 0ustar carstencarsten/************* * streams.c ************/ #include "ngspice/ngspice.h" #include "ngspice/wordlist.h" #include "ngspice/bool.h" #include "variable.h" #include "terminal.h" #include "quote.h" #include "ngspice/cpextern.h" #include "streams.h" bool cp_debug = FALSE; char cp_gt = '>'; char cp_lt = '<'; char cp_amp = '&'; FILE *cp_in = NULL; FILE *cp_out = NULL; FILE *cp_err = NULL; /* These are the fps that cp_ioreset resets the cp_* to. They are * changed by the source routines. */ FILE *cp_curin = NULL; FILE *cp_curout = NULL; FILE *cp_curerr = NULL; static bool fileexists(char *name) { #ifdef HAVE_ACCESS if (access(name, 0) == 0) return (TRUE); #endif return (FALSE); } /* This routine sets the cp_{in,out,err} pointers and takes the io * directions out of the command line. */ wordlist * cp_redirect(wordlist *wl) { int gotinput = 0, gotoutput = 0, goterror = 0, append = 0; wordlist *w; char *fname; FILE *fp; w = wl->wl_next; /* Don't consider empty commands. */ while (w) { if (*w->wl_word == cp_lt) { wordlist *beg = w; if (gotinput++) { fprintf(cp_err, "Error: ambiguous input redirect.\n"); goto error; } w = w->wl_next; if (w && *w->wl_word == cp_lt) { fprintf(cp_err, "Error: `<<' redirection is not implemented.\n"); goto error; } if (!w) { fprintf(cp_err, "Error: missing name for input.\n"); return (NULL); } fname = cp_unquote(w->wl_word); w = w->wl_next; #ifdef CPDEBUG if (cp_debug) fprintf(cp_err, "Input file is %s...\n", fname); #endif fp = fopen(fname, "r"); tfree(fname); if (!fp) { perror(fname); goto error; } cp_in = fp; wl_delete_slice(beg, w); } else if (*w->wl_word == cp_gt) { wordlist *beg = w; if (gotoutput++) { fprintf(cp_err, "Error: ambiguous output redirect.\n"); goto error; } w = w->wl_next; if (w && *w->wl_word == cp_gt) { append++; w = w->wl_next; } if (w && *w->wl_word == cp_amp) { if (goterror++) { fprintf(cp_err, "Error: ambiguous error redirect.\n"); return (NULL); } w = w->wl_next; } if (!w) { fprintf(cp_err, "Error: missing name for output.\n"); return (NULL); } fname = cp_unquote(w->wl_word); w = w->wl_next; #ifdef CPDEBUG if (cp_debug) fprintf(cp_err, "Output file is %s... %s\n", fname, append ? "(append)" : ""); #endif if (cp_noclobber && fileexists(fname)) { fprintf(stderr, "Error: %s: file exists\n", fname); goto error; } fp = fopen(fname, append ? "a" : "w+"); tfree(fname); if (!fp) { perror(fname); goto error; } cp_out = fp; if (goterror) cp_err = fp; out_isatty = FALSE; wl_delete_slice(beg, w); } else { w = w->wl_next; } } return (wl); error: wl_free(wl); /* FIXME, Ouch !! */ return (NULL); } /* Reset the cp_* FILE pointers to the standard ones. This is tricky, * since if we are sourcing a command file, and io has been redirected * from inside the file, we have to reset it back to what it was for * the source, not for the top level. That way if you type "foo > * bar" where foo is a script, and it has redirections of its own * inside of it, none of the output from foo will get sent to * stdout... */ void cp_ioreset(void) { if (cp_in != cp_curin) if (cp_in) fclose(cp_in); if (cp_out != cp_curout) if (cp_out) fclose(cp_out); if (cp_err != cp_curerr) if (cp_err && cp_err != cp_out) fclose(cp_err); cp_in = cp_curin; cp_out = cp_curout; cp_err = cp_curerr; /*** Minor bug here... */ out_isatty = TRUE; } /* Do this only right before an exec, since we lose the old std*'s. */ void fixdescriptors(void) { if (cp_in != stdin) dup2(fileno(cp_in), fileno(stdin)); if (cp_out != stdout) dup2(fileno(cp_out), fileno(stdout)); if (cp_err != stderr) dup2(fileno(cp_err), fileno(stderr)); } tmpk8ny_4pz/src/frontend/breakp.c0000644000175000017500000003726613546075722017214 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Code to deal with breakpoints and tracing. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/ftedebug.h" #include "breakp.h" #include "breakp2.h" #include "runcoms2.h" #include "completion.h" static bool satisfied(struct dbcomm *d, struct plot *plot); static void printcond(struct dbcomm *d, FILE *fp); static int howmanysteps = 0; static int steps = 0; /* Set a breakpoint. Possible commands are: * stop after n * stop when var cond val * * If more than one is given on a command line, then this is a conjunction. */ void com_stop(wordlist *wl) { /* Check for an active circuit */ if (ft_curckt == (struct circ *) NULL) { fprintf(cp_err, "No circuit loaded. Stopping is not possible.\n"); return; } struct dbcomm *thisone = NULL; struct dbcomm *d = NULL; char *s, buf[64]; int i; double *val; while (wl) { if (thisone == NULL) { thisone = d = TMALLOC(struct dbcomm, 1); } else { d->db_also = TMALLOC(struct dbcomm, 1); d = d->db_also; } /* Figure out what the first condition is. */ d->db_analysis = NULL; if (eq(wl->wl_word, "after") && wl->wl_next) { d->db_type = DB_STOPAFTER; d->db_number = debugnumber; if (!wl->wl_next->wl_word) { i = 0; } else { #ifdef HAVE_CTYPE_H for (s = wl->wl_next->wl_word, i = 0; *s; s++) if (!isdigit_c(*s)) goto bad; else i = i * 10 + (*s - '0'); #else i = atoi(wl->wl_next->wl_word); /* etoi ??? */ #endif } d->db_iteration = i; wl = wl->wl_next->wl_next; } else if (eq(wl->wl_word, "when") && wl->wl_next) { /* cp_lexer(string) will not discriminate '=', so we have to do it here */ if (strchr(wl->wl_next->wl_word, '=') && (!(wl->wl_next->wl_next) || strstr(wl->wl_next->wl_next->wl_word, "when") || strstr(wl->wl_next->wl_next->wl_word, "after"))) { /* we have vec=val in a single word */ wordlist *wln; char **charr = TMALLOC(char*, 4); char *tok = copy(wl->wl_next->wl_word); char *tokeq = strchr(tok, '='); char *tokafter = copy(tokeq + 1); *tokeq = '\0'; charr[0] = tok; charr[1] = copy("eq"); charr[2] = tokafter; charr[3] = NULL; wln = wl_build(charr); wl_splice(wl->wl_next, wln); } /* continue with parsing the enhanced wordlist */ if (wl->wl_next->wl_next && wl->wl_next->wl_next->wl_next) { wl = wl->wl_next; d->db_number = debugnumber; d->db_type = DB_STOPWHEN; s = wl->wl_word; val = ft_numparse(&s, FALSE); if (val) d->db_value1 = *val; else d->db_nodename1 = copy(wl->wl_word); wl = wl->wl_next; /* Now get the condition */ if (eq(wl->wl_word, "eq") || eq(wl->wl_word, "=")) d->db_op = DBC_EQU; else if (eq(wl->wl_word, "ne") || eq(wl->wl_word, "<>")) d->db_op = DBC_NEQ; else if (eq(wl->wl_word, "gt") || eq(wl->wl_word, ">")) d->db_op = DBC_GT; else if (eq(wl->wl_word, "lt") || eq(wl->wl_word, "<")) d->db_op = DBC_LT; else if (eq(wl->wl_word, "ge") || eq(wl->wl_word, ">=")) d->db_op = DBC_GTE; else if (eq(wl->wl_word, "le") || eq(wl->wl_word, "<=")) d->db_op = DBC_LTE; else goto bad; wl = wl->wl_next; /* Now see about the second one. */ s = wl->wl_word; val = ft_numparse(&s, FALSE); if (val) d->db_value2 = *val; else d->db_nodename2 = copy(wl->wl_word); wl = wl->wl_next; } else { goto bad; } } } if (thisone) { if (dbs) { for (d = dbs; d->db_next; d = d->db_next) ; d->db_next = thisone; } else { ft_curckt->ci_dbs = dbs = thisone; } (void) sprintf(buf, "%d", debugnumber); cp_addkword(CT_DBNUMS, buf); debugnumber++; } return; bad: fprintf(cp_err, "Syntax error parsing breakpoint specification.\n"); } /* Trace a node (have wrd_point print it). Usage is "trace node ..."*/ void com_trce(wordlist *wl) { settrace(wl, VF_PRINT, NULL); } /* Incrementally plot a value. This is just like trace. */ void com_iplot(wordlist *wl) { /* Check for an active circuit */ if (ft_curckt == (struct circ *) NULL) { fprintf(cp_err, "No circuit loaded. " "Incremental plotting is not possible.\n"); return; } /* settrace(wl, VF_PLOT); */ struct dbcomm *d, *td, *currentdb = NULL; char *s; /* We use a modified ad-hoc algorithm here where db_also denotes vectors on the same command line and db_next denotes separate iplot commands. */ while (wl) { s = cp_unquote(wl->wl_word); d = TMALLOC(struct dbcomm, 1); d->db_analysis = NULL; d->db_number = debugnumber++; if (eq(s, "all")) { d->db_type = DB_IPLOTALL; } else { d->db_type = DB_IPLOT; d->db_nodename1 = copy(s); } tfree(s);/*DG: avoid memory leak */ d->db_also = currentdb; currentdb = d; wl = wl->wl_next; } if (dbs) { for (td = dbs; td->db_next; td = td->db_next) ; td->db_next = currentdb; } else { ft_curckt->ci_dbs = dbs = currentdb; } } /* Step a number of iterations. */ void com_step(wordlist *wl) { if (wl) steps = howmanysteps = atoi(wl->wl_word); else steps = howmanysteps = 1; com_resume(NULL); } /* Print out the currently active breakpoints and traces. If we are printing * to a file, assume that the file will be used for a later source and leave * off the event numbers (with UNIX, that is). -- I don't like this. */ #undef isatty #define isatty(xxxx) 1 void com_sttus(wordlist *wl) { struct dbcomm *d, *dc; NG_IGNORE(wl); for (d = dbs; d; d = d->db_next) { if (d->db_type == DB_TRACENODE) { if (isatty(fileno(cp_out))) fprintf(cp_out, "%-4d trace %s", d->db_number, d->db_nodename1); else fprintf(cp_out, "trace %s", d->db_nodename1); } else if (d->db_type == DB_IPLOT) { if (isatty(fileno(cp_out))) fprintf(cp_out, "%-4d iplot %s", d->db_number, d->db_nodename1); else fprintf(cp_out, "iplot %s", d->db_nodename1); for (dc = d->db_also; dc; dc = dc->db_also) fprintf(cp_out, " %s", dc->db_nodename1); } else if (d->db_type == DB_SAVE) { if (isatty(fileno(cp_out))) fprintf(cp_out, "%-4d save %s", d->db_number, d->db_nodename1); else fprintf(cp_out, "save %s", d->db_nodename1); } else if (d->db_type == DB_TRACEALL) { if (isatty(fileno(cp_out))) fprintf(cp_out, "%-4d trace all", d->db_number); else fprintf(cp_out, "trace all"); } else if (d->db_type == DB_IPLOTALL) { if (isatty(fileno(cp_out))) fprintf(cp_out, "%-4d iplot all", d->db_number); else fprintf(cp_out, "iplot all"); } else if (d->db_type == DB_SAVEALL) { if (isatty(fileno(cp_out))) fprintf(cp_out, "%-4d save all", d->db_number); else fprintf(cp_out, "save all"); } else if ((d->db_type == DB_STOPAFTER) || (d->db_type == DB_STOPWHEN)) { if (isatty(fileno(cp_out))) fprintf(cp_out, "%-4d stop", d->db_number); else fprintf(cp_out, "stop"); printcond(d, cp_out); } else if ((d->db_type == DB_DEADIPLOT)) { if (isatty(fileno(cp_out))) { fprintf(cp_out, "%-4d exiting iplot %s", d->db_number, d->db_nodename1); } else { fprintf(cp_out, "exiting iplot %s", d->db_nodename1); } for (dc = d->db_also; dc; dc = dc->db_also) fprintf(cp_out, " %s", dc->db_nodename1); } else { fprintf(cp_err, "com_sttus: Internal Error: bad db %d\n", d->db_type); } (void) putc('\n', cp_out); } } /* free the dbcomm structure which has been defined in * function settrace() in breakp2.c */ void dbfree1(struct dbcomm *d) { tfree(d->db_nodename1); tfree(d->db_nodename2); if (d->db_also) dbfree(d->db_also); tfree(d); } void dbfree(struct dbcomm *d) { while (d) { struct dbcomm *next_d = d->db_next; dbfree1(d); d = next_d; } } /* Delete breakpoints and traces. Usage is delete [number ...] */ void com_delete(wordlist *wl) { int i; char *s, buf[64]; struct dbcomm *d, *dt; if (wl && eq(wl->wl_word, "all")) { dbfree(dbs); dbs = NULL; if (ft_curckt) ft_curckt->ci_dbs = NULL; return; } else if (!wl) { if (!dbs) { fprintf(cp_err, "Error: no debugs in effect\n"); return; } } while (wl) { if (wl->wl_word) { #ifdef HAVE_CTYPE_H for (s = wl->wl_word, i = 0; *s; s++) if (!isdigit_c(*s)) { fprintf(cp_err, "Error: %s isn't a number.\n", wl->wl_word); goto bad; } else { i = i * 10 + (*s - '0'); } #else i = atoi(wl->wl_next->wl_word); /* etoi ??? */ #endif } else { i = 0; } for (d = dbs, dt = NULL; d; d = d->db_next) { if (d->db_number == i) { if (dt) dt->db_next = d->db_next; else ft_curckt->ci_dbs = dbs = d->db_next; dbfree1(d); (void) sprintf(buf, "%d", i); cp_remkword(CT_DBNUMS, buf); break; } dt = d; } bad: wl = wl->wl_next; } } /* Writedata calls this routine to see if it should keep going. If it * returns TRUE, then the run should resume. */ bool ft_bpcheck(struct plot *runplot, int iteration) { struct dbcomm *d, *dt; if ((howmanysteps > 0) && (--howmanysteps == 0)) { if (steps > 1) fprintf(cp_err, "Stopped after %d steps.\n", steps); return (FALSE); } /* Check the debugs set. */ for (d = dbs; d; d = d->db_next) { for (dt = d; dt; dt = dt->db_also) { switch (dt->db_type) { case DB_TRACENODE: case DB_TRACEALL: case DB_IPLOT: case DB_DEADIPLOT: case DB_IPLOTALL: case DB_SAVE: case DB_SAVEALL: goto more; case DB_STOPAFTER: if (iteration == dt->db_iteration) break; else goto more; case DB_STOPWHEN: /* See if the condition is TRUE. */ if (satisfied(dt, runplot)) break; else goto more; default: fprintf(cp_err, "ft_bpcheck: Internal Error: bad db %d\n", dt->db_type); } } if (dt == NULL) { /* It made it */ fprintf(cp_err, "%-2d: condition met: stop ", d->db_number); printcond(d, cp_err); (void) putc('\n', cp_err); return (FALSE); } more: /* Just continue */ ; } return (TRUE); } /* This is called to determine whether a STOPWHEN is TRUE. */ static bool satisfied(struct dbcomm *d, struct plot *plot) { struct dvec *v1 = NULL, *v2 = NULL; double d1, d2; if (d->db_nodename1) { if ((v1 = vec_fromplot(d->db_nodename1, plot)) == NULL) { fprintf(cp_err, "Error: %s: no such node\n", d->db_nodename1); return (FALSE); } if (isreal(v1)) d1 = v1->v_realdata[v1->v_length - 1]; else d1 = realpart((v1->v_compdata[v1->v_length - 1])); } else { d1 = d->db_value1; } if (d->db_nodename2) { if ((v2 = vec_fromplot(d->db_nodename2, plot)) == NULL) { fprintf(cp_err, "Error: %s: no such node\n", d->db_nodename2); return (FALSE); } if (isreal(v2)) d2 = v2->v_realdata[v2->v_length - 1]; else d2 = realpart((v2->v_compdata[v2->v_length - 1])); } else { d2 = d->db_value2; } switch (d->db_op) { case DBC_EQU: return (AlmostEqualUlps(d1, d2, 3) ? TRUE : FALSE); // return ((d1 == d2) ? TRUE : FALSE); case DBC_NEQ: return ((d1 != d2) ? TRUE : FALSE); case DBC_GTE: return ((d1 >= d2) ? TRUE : FALSE); case DBC_LTE: return ((d1 <= d2) ? TRUE : FALSE); case DBC_GT: return ((d1 > d2) ? TRUE : FALSE); case DBC_LT: return ((d1 < d2) ? TRUE : FALSE); default: fprintf(cp_err, "satisfied: Internal Error: bad cond %d\n", d->db_op); return (FALSE); } } /* Writedata calls this before it starts a run, to set the proper flags * on the dvecs. If a change is made during a break, then the routine * wrd_chtrace is used from these routines. We have to be clever with save: * if there was no save given, then save everything. Unfortunately you * can't stop in the middle, do a save, and have the rest then discarded. */ void ft_trquery(void) { } static void printcond(struct dbcomm *d, FILE *fp) { struct dbcomm *dt; for (dt = d; dt; dt = dt->db_also) { if (dt->db_type == DB_STOPAFTER) { fprintf(fp, " after %d", dt->db_iteration); } else { if (dt->db_nodename1) fprintf(fp, " when %s", dt->db_nodename1); else fprintf(fp, " when %g", dt->db_value1); switch (dt->db_op) { case DBC_EQU: fputs(" =", fp); break; case DBC_NEQ: fputs(" <>", fp); break; case DBC_GT: fputs(" >", fp); break; case DBC_LT: fputs(" <", fp); break; case DBC_GTE: fputs(" >=", fp); break; case DBC_LTE: fputs(" <=", fp); break; default: fprintf(cp_err, "printcond: Internal Error: bad cond %d", dt->db_op); } if (dt->db_nodename2) fprintf(fp, " %s", dt->db_nodename2); else fprintf(fp, " %g", dt->db_value2); } } } tmpk8ny_4pz/src/frontend/com_help.h0000644000175000017500000000013613546075722017525 0ustar carstencarsten#ifndef ngspice_COM_HELP_H #define ngspice_COM_HELP_H void com_help(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/linear.c0000644000175000017500000001057613546075722017215 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "circuits.h" #include "linear.h" #include "interp.h" /* Interpolate all the vectors in a plot to a linear time scale, which * we determine by looking at the transient parameters in the CKT struct. * If no circuit is loaded, e.g. because the 'load' command has been used * to obtain data, try to get parameters from scale vector. * Interpolation may be restricted to only a region of the input vector, * thus creating a cutout of the original vector. */ void com_linearize(wordlist *wl) { double tstart, tstop, tstep, d; struct plot *new, *old; struct dvec *newtime, *v; struct dvec *oldtime; struct dvec *lin; int len, i; if (!plot_cur || !plot_cur->pl_dvecs || !plot_cur->pl_scale) { fprintf(cp_err, "Error: no vectors available\n"); return; } if (!isreal(plot_cur->pl_scale)) { fprintf(cp_err, "Error: non-real time scale for %s\n", plot_cur->pl_typename); return; } if (!ciprefix("tran", plot_cur->pl_typename)) { fprintf(cp_err, "Error: plot must be a transient analysis\n"); return; } /* check if circuit is loaded and TSTART, TSTOP, TSTEP are available if no circuit is loaded, but vectors are available, obtain start, stop, step data from scale vector */ if (!ft_curckt || !ft_curckt->ci_ckt || !if_tranparams(ft_curckt, &tstart, &tstop, &tstep)) { fprintf(cp_err, "Warning: Can't get transient parameters from circuit.\n" " Use transient analysis scale vector data instead.\n"); int length = plot_cur->pl_scale->v_length; if (length < 1) { fprintf(cp_err, "Error: no data in vector\n"); return; } tstart = plot_cur->pl_scale->v_realdata[0]; tstop = plot_cur->pl_scale->v_realdata[length - 1]; tstep = (tstop - tstart) / (double)length; } /* if this plot contains special vectors lin-tstart, lin-tstop or lin-tstep, use these instead */ lin = vec_fromplot("lin-tstart", plot_cur); if (lin) { fprintf(cp_out, "linearize tstart is set to: %8e\n", lin->v_realdata[0]); tstart = lin->v_realdata[0]; } lin = vec_fromplot("lin-tstop", plot_cur); if (lin) { fprintf(cp_out, "linearize tstop is set to: %8e\n", lin->v_realdata[0]); tstop = lin->v_realdata[0]; } lin = vec_fromplot("lin-tstep", plot_cur); if (lin) { fprintf(cp_out, "linearize tstep is set to: %8e\n", lin->v_realdata[0]); tstep = lin->v_realdata[0]; } /* finally check if tstart, tstop and tstep are reasonable */ if (((tstop - tstart) * tstep <= 0.0) || ((tstop - tstart) < tstep)) { fprintf(cp_err, "Error: bad parameters -- start = %G, stop = %G, step = %G\n", tstart, tstop, tstep); return; } old = plot_cur; oldtime = old->pl_scale; new = plot_alloc("transient"); new->pl_name = tprintf("%s (linearized)", old->pl_name); new->pl_title = copy(old->pl_title); new->pl_date = copy(old->pl_date); new->pl_next = plot_list; plot_new(new); plot_setcur(new->pl_typename); plot_list = new; len = (int)((tstop - tstart) / tstep + 1.5); newtime = dvec_alloc(copy(oldtime->v_name), oldtime->v_type, oldtime->v_flags | VF_PERMANENT, len, NULL); newtime->v_plot = new; for (i = 0, d = tstart; i < len; i++, d += tstep) newtime->v_realdata[i] = d; new->pl_scale = new->pl_dvecs = newtime; if (wl) { while (wl) { v = vec_fromplot(wl->wl_word, old); if (!v) { fprintf(cp_err, "Error: no such vector %s\n", wl->wl_word); wl = wl->wl_next; continue; } lincopy(v, newtime->v_realdata, len, oldtime); wl = wl->wl_next; } } else { for (v = old->pl_dvecs; v; v = v->v_next) { if (v == old->pl_scale) continue; lincopy(v, newtime->v_realdata, len, oldtime); } } } tmpk8ny_4pz/src/frontend/points.h0000644000175000017500000000037013546075722017253 0ustar carstencarsten/************* * Header file for points.c * 1999 E. Rouat ************/ #ifndef ngspice_POINTS_H #define ngspice_POINTS_H double * ft_SMITHminmax(struct dvec *v, bool yval); int SMITH_tfm(double re, double im, double *x, double *y); #endif tmpk8ny_4pz/src/frontend/com_rehash.c0000644000175000017500000000100113546075722020032 0ustar carstencarsten/************* * com_rehash.c ************/ #include "ngspice/ngspice.h" #include "ngspice/wordlist.h" #include "com_rehash.h" #include "ngspice/cpextern.h" #include "control.h" #include "parser/unixcom.h" void com_rehash(wordlist *wl) { char *s; NG_IGNORE(wl); if (!cp_dounixcom) { fprintf(cp_err, "Error: unixcom not set.\n"); return; } s = getenv("PATH"); if (s) cp_rehash(s, TRUE); else fprintf(cp_err, "Error: no PATH in environment.\n"); } tmpk8ny_4pz/src/frontend/com_rehash.h0000644000175000017500000000027513546075722020053 0ustar carstencarsten/************* * Header file for com_rehsh.c ************/ #ifndef ngspice_COM_REHASH_H #define ngspice_COM_REHASH_H #include "ngspice/wordlist.h" void com_rehash(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/fourier.c0000644000175000017500000002566013546075722017416 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Code to do fourier transforms on data. Note that we do interpolation * to get a uniform grid. Note that if polydegree is 0 then no interpolation * is done. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/fteparse.h" #include "ngspice/sperror.h" #include "ngspice/const.h" #include "ngspice/sim.h" #include "fourier.h" #include "variable.h" static char *pnum(double num); static int CKTfour(int ndata, int numFreq, double *thd, double *Time, double *Value, double FundFreq, double *Freq, double *Mag, double *Phase, double *nMag, double *nPhase); #define DEF_FOURGRIDSIZE 200 /* CKTfour(ndata, numFreq, thd, Time, Value, FundFreq, Freq, Mag, Phase, nMag, nPhase) * len 10 ? inp inp inp out out out out out */ int fourier(wordlist *wl, struct plot *current_plot) { struct dvec *time, *vec; struct pnode *pn, *names; double *ff, fundfreq, *data = NULL; int nfreqs, fourgridsize, polydegree; double *freq, *mag, *phase, *nmag, *nphase; /* Outputs from CKTfour */ double thd, *timescale = NULL; char *s; int i, err, fw; char xbuf[20]; int shift; int rv = 1; struct dvec *n; int newveccount = 1; static int callstof = 1; if (!current_plot) return 1; sprintf(xbuf, "%1.1e", 0.0); shift = (int) strlen(xbuf) - 7; if (!current_plot || !current_plot->pl_scale) { fprintf(cp_err, "Error: no vectors loaded.\n"); return 1; } if (!cp_getvar("nfreqs", CP_NUM, &nfreqs, 0) || nfreqs < 1) nfreqs = 10; if (!cp_getvar("polydegree", CP_NUM, &polydegree, 0) || polydegree < 0) polydegree = 1; if (!cp_getvar("fourgridsize", CP_NUM, &fourgridsize, 0) || fourgridsize < 1) fourgridsize = DEF_FOURGRIDSIZE; time = current_plot->pl_scale; if (!isreal(time)) { fprintf(cp_err, "Error: fourier needs real time scale\n"); return 1; } s = wl->wl_word; if ((ff = ft_numparse(&s, FALSE)) == NULL || (*ff <= 0.0)) { fprintf(cp_err, "Error: bad fund freq %s\n", wl->wl_word); return 1; } fundfreq = *ff; freq = TMALLOC(double, nfreqs); mag = TMALLOC(double, nfreqs); phase = TMALLOC(double, nfreqs); nmag = TMALLOC(double, nfreqs); nphase = TMALLOC(double, nfreqs); wl = wl->wl_next; names = ft_getpnames(wl, TRUE); for (pn = names; pn; pn = pn->pn_next) { vec = ft_evaluate(pn); for (; vec; vec = vec->v_link2) { if (vec->v_length != time->v_length) { fprintf(cp_err, "Error: lengths don't match: %d, %d\n", vec->v_length, time->v_length); continue; } if (!isreal(vec)) { fprintf(cp_err, "Error: %s isn't real!\n", vec->v_name); continue; } if (polydegree) { double *dp, d; /* Build the grid... */ timescale = TMALLOC(double, fourgridsize); data = TMALLOC(double, fourgridsize); dp = ft_minmax(time, TRUE); /* Now get the last fund freq... */ d = 1 / fundfreq; /* The wavelength... */ if (dp[1] - dp[0] < d) { fprintf(cp_err, "Error: wavelength longer than time span\n"); goto done; } else if (dp[1] - dp[0] > d) { dp[0] = dp[1] - d; } d = (dp[1] - dp[0]) / fourgridsize; for (i = 0; i < fourgridsize; i++) timescale[i] = dp[0] + i * d; /* Now interpolate the data... */ if (!ft_interpolate(vec->v_realdata, data, time->v_realdata, vec->v_length, timescale, fourgridsize, polydegree)) { fprintf(cp_err, "Error: can't interpolate\n"); goto done; } } else { fourgridsize = vec->v_length; data = vec->v_realdata; timescale = time->v_realdata; } err = CKTfour(fourgridsize, nfreqs, &thd, timescale, data, fundfreq, freq, mag, phase, nmag, nphase); if (err != OK) { ft_sperror(err, "fourier"); goto done; } fprintf(cp_out, "Fourier analysis for %s:\n", vec->v_name); fprintf(cp_out, " No. Harmonics: %d, THD: %g %%, Gridsize: %d, Interpolation Degree: %d\n\n", nfreqs, thd, fourgridsize, polydegree); /* Each field will have width cp_numdgt + 6 (or 7 * with HP-UX) + 1 if there is a - sign. */ fw = ((cp_numdgt > 0) ? cp_numdgt : 6) + 5 + shift; fprintf(cp_out, "Harmonic %-*s %-*s %-*s %-*s %-*s\n", fw, "Frequency", fw, "Magnitude", fw, "Phase", fw, "Norm. Mag", fw, "Norm. Phase"); fprintf(cp_out, "-------- %-*s %-*s %-*s %-*s %-*s\n", fw, "---------", fw, "---------", fw, "-----", fw, "---------", fw, "-----------"); for (i = 0; i < nfreqs; i++) { char *pnumfr, *pnumma, *pnumph, *pnumnm, *pnumnp; pnumfr = pnum(freq[i]); pnumma = pnum(mag[i]); pnumph = pnum(phase[i]); pnumnm = pnum(nmag[i]); pnumnp = pnum(nphase[i]); fprintf(cp_out, " %-4d %-*s %-*s %-*s %-*s %-*s\n", i, fw, pnumfr, fw, pnumma, fw, pnumph, fw, pnumnm, fw, pnumnp); tfree(pnumfr); tfree(pnumma); tfree(pnumph); tfree(pnumnm); tfree(pnumnp); } fputs("\n", cp_out); /* create and assign a new vector n */ /* with size 3 * nfreqs in current plot */ /* generate name for new vector, using vec->name */ n = dvec_alloc(tprintf("fourier%d%d", callstof, newveccount), SV_NOTYPE, VF_REAL | VF_PERMANENT, 3 * nfreqs, NULL); n->v_numdims = 2; n->v_dims[0] = 3; n->v_dims[1] = nfreqs; vec_new(n); /* store data in vector: freq, mag, phase */ for (i = 0; i < nfreqs; i++) { n->v_realdata[i] = freq[i]; n->v_realdata[i + nfreqs] = mag[i]; n->v_realdata[i + 2 * nfreqs] = phase[i]; } newveccount++; if (polydegree) { tfree(timescale); tfree(data); } timescale = NULL; data = NULL; } } callstof++; rv = 0; done: free_pnode(names); tfree(freq); tfree(mag); tfree(phase); tfree(nmag); tfree(nphase); if (polydegree) { tfree(timescale); tfree(data); } return rv; } void com_fourier(wordlist *wl) { fourier(wl, plot_cur); } static char * pnum(double num) { int i = cp_numdgt; if (i < 1) i = 6; if (num < 0.0) return tprintf("%.*g", i - 1, num); else return tprintf("%.*g", i, num); } /* CKTfour() - perform fourier analysis of an output vector. * * Due to the construction of the program which places all the output * data in the post-processor, the fourier analysis can not be done * directly. This function allows the post processor to hand back * vectors of time and data values to have the fourier analysis * performed on them. */ static int CKTfour(int ndata, /* number of entries in the Time and Value arrays */ int numFreq, /* number of harmonics to calculate */ double *thd, /* total harmonic distortion (percent) to be returned */ double *Time, /* times at which the voltage/current values were measured*/ double *Value, /* voltage or current vector whose transform is desired */ double FundFreq, /* the fundamental frequency of the analysis */ double *Freq, /* the frequency value of the various harmonics */ double *Mag, /* the Magnitude of the fourier transform */ double *Phase, /* the Phase of the fourier transform */ double *nMag, /* the normalized magnitude of the transform: nMag(fund)=1*/ double *nPhase) /* the normalized phase of the transform: Nphase(fund)=0 */ { /* Note: we can consider these as a set of arrays. The sizes are: * Time[ndata], Value[ndata], Freq[numFreq], Mag[numfreq], * Phase[numfreq], nMag[numfreq], nPhase[numfreq] * * The arrays must all be allocated by the caller. * The Time and Value array must be reasonably distributed over at * least one full period of the fundamental Frequency for the * fourier transform to be useful. The function will take the * last period of the frequency as data for the transform. * * We are assuming that the caller has provided exactly one period * of the fundamental frequency. */ int i; int j; double tmp; NG_IGNORE(Time); /* clear output/computation arrays */ for (i = 0; i < numFreq; i++) { Mag[i] = 0; Phase[i] = 0; } for (i = 0; i < ndata; i++) for (j = 0; j < numFreq; j++) { Mag[j] += Value[i] * sin(j*2.0*M_PI*i/((double)ndata)); Phase[j] += Value[i] * cos(j*2.0*M_PI*i/((double)ndata)); } Mag[0] = Phase[0]/ndata; Phase[0] = nMag[0] = nPhase[0] = Freq[0] = 0; *thd = 0; for (i = 1; i < numFreq; i++) { tmp = Mag[i] * 2.0 / ndata; Phase[i] *= 2.0 / ndata; Freq[i] = i * FundFreq; Mag[i] = hypot(tmp, Phase[i]); Phase[i] = atan2(Phase[i], tmp) * 180.0/M_PI; nMag[i] = Mag[i] / Mag[1]; nPhase[i] = Phase[i] - Phase[1]; if (i > 1) *thd += nMag[i] * nMag[i]; } *thd = 100*sqrt(*thd); return (OK); } tmpk8ny_4pz/src/frontend/com_plot.c0000644000175000017500000000055213546075722017550 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/bool.h" #include "ngspice/wordlist.h" #include "plotting/plotit.h" #include "com_plot.h" /* plot name ... [xl[imit]] xlo xhi] [yl[imit ylo yhi] [vs xname] */ void com_plot(wordlist *wl) { plotit(wl, NULL, NULL); } #ifdef TCL_MODULE void com_bltplot(wordlist *wl) { plotit(wl, NULL, "blt"); } #endif tmpk8ny_4pz/src/frontend/typesdef.h0000644000175000017500000000031313546075722017557 0ustar carstencarsten/************* * Header file for typesdef.c * 1999 E. Rouat ************/ #ifndef ngspice_TYPESDEF_H #define ngspice_TYPESDEF_H void com_dftype(wordlist *wl); void com_stype(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/shyu.h0000644000175000017500000000020213546075722016721 0ustar carstencarsten/************* * Header file for shyu.c * 1999 E. Rouat ************/ #ifndef ngspice_SHYU_H #define ngspice_SHYU_H #endif tmpk8ny_4pz/src/frontend/com_sysinfo.c0000644000175000017500000003157713546075722020277 0ustar carstencarsten /* Provide system information LINUX: /proc file system Windows: GlobalMemoryStatusEx, GetSystemInfo, GetVersionExA, RegQueryValueExA Authors: Holger Vogt, Hendrik Vogt */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/fteext.h" #include "com_commands.h" /* We might compile for Windows, but only as a console application (e.g. tcl) */ #if defined(HAS_WINGUI) || defined(__MINGW32__) || defined(_MSC_VER) #define HAVE_WIN32 #endif #ifdef HAVE_WIN32 #define WIN32_LEAN_AND_MEAN #undef BOOLEAN #include "windows.h" #include #endif #include "stdio.h" #include "stdlib.h" #include "string.h" #define tInt int #define TesError int #define TES_FAIL 1 #define TES_SUCCESS 0 #define TES_INVALID_PARAMS 1 /* system info */ typedef struct TSI { char *cpuModelName; unsigned numPhysicalProcessors; unsigned numLogicalProcessors; char *osName; } TesSystemInfo; /* memory info */ struct sys_memory { unsigned long long size_m; /* Total memory size */ unsigned long long free_m; /* Free memory */ unsigned long long swap_t; /* Swap total */ unsigned long long swap_f; /* Swap free */ }; static struct sys_memory mem_t_act; TesError tesCreateSystemInfo(TesSystemInfo *info); static int get_sysmem(struct sys_memory *memall); /* Print to stream the given memory size in a human friendly format */ static void fprintmem(FILE *stream, unsigned long long memory) { if (memory > 1048576) fprintf(stream, "%8.6f MB", (double)memory /1048576.); else if (memory > 1024) fprintf(stream, "%5.3f kB", (double)memory / 1024.); else fprintf(stream, "%u bytes", (unsigned)memory); } static void tesFreeSystemInfo(TesSystemInfo *info) { if (info != NULL) { tfree(info->cpuModelName); tfree(info->osName); } } /* print system info */ void com_sysinfo(wordlist *wl) { int errorcode; TesSystemInfo *info; NG_IGNORE(wl); info = TMALLOC(TesSystemInfo, 1); errorcode = tesCreateSystemInfo(info); if (errorcode) { fprintf(cp_err, "No system info available! \n"); } else { fprintf(cp_out, "\nOS: %s\n", info->osName); fprintf(cp_out, "CPU: %s\n", info->cpuModelName); if (info->numPhysicalProcessors > 0) fprintf(cp_out, "Physical processors: %u, ", info->numPhysicalProcessors); fprintf(cp_out, "Logical processors: %u\n", info->numLogicalProcessors); } #if defined(HAVE_WIN32) || defined(HAVE__PROC_MEMINFO) get_sysmem(&mem_t_act); /* get_sysmem returns bytes */ fprintf(cp_out, "Total DRAM available = "); fprintmem(cp_out, mem_t_act.size_m); fprintf(cp_out, ".\n"); fprintf(cp_out, "DRAM currently available = "); fprintmem(cp_out, mem_t_act.free_m); fprintf(cp_out, ".\n\n"); #endif tesFreeSystemInfo(info); tfree(info); } #ifdef HAVE__PROC_MEMINFO /* Get memory information */ static int get_sysmem(struct sys_memory *memall) { FILE *fp; char buffer[2048]; size_t bytes_read; char *match; unsigned long mem_got; if ((fp = fopen("/proc/meminfo", "r")) == NULL) { perror("fopen(\"/proc/meminfo\")"); return 0; } bytes_read = fread(buffer, 1, sizeof(buffer), fp); fclose(fp); if (bytes_read == 0 || bytes_read == sizeof(buffer)) return 0; buffer[bytes_read] = '\0'; /* Search for string "MemTotal" */ match = strstr(buffer, "MemTotal"); if (match == NULL) /* not found */ return 0; sscanf(match, "MemTotal: %ld", &mem_got); memall->size_m = mem_got*1024; /* 1MB = 1024KB */ /* Search for string "MemFree" */ match = strstr(buffer, "MemFree"); if (match == NULL) /* not found */ return 0; sscanf(match, "MemFree: %ld", &mem_got); memall->free_m = mem_got*1024; /* 1MB = 1024KB */ /* Search for string "SwapTotal" */ match = strstr(buffer, "SwapTotal"); if (match == NULL) /* not found */ return 0; sscanf(match, "SwapTotal: %ld", &mem_got); memall->swap_t = mem_got*1024; /* 1MB = 1024KB */ /* Search for string "SwapFree" */ match = strstr(buffer, "SwapFree"); if (match == NULL) /* not found */ return 0; sscanf(match, "SwapFree: %ld", &mem_got); memall->swap_f = mem_got*1024; /* 1MB = 1024KB */ return 1; } /* Return length of first line in a string */ static size_t getLineLength(const char *str) { const char *p = str; while (*p && (*p != '\n')) p++; return (size_t) (p - str); } /* Checks if number 'match' is found in a vector 'set' of size 'size' Returns 1 if yes, otherwise, 0 */ static tInt searchInSet(const tInt *set, unsigned size, tInt match) { unsigned index; for (index = 0; index < size; index++) if (match == set[index]) return 1; return 0; } /* Get system information */ TesError tesCreateSystemInfo(TesSystemInfo *info) { FILE *file; TesError error = TES_SUCCESS; if (info == NULL) return TES_INVALID_PARAMS; info->cpuModelName = NULL; info->osName = NULL; info->numLogicalProcessors = info->numPhysicalProcessors = 0; /* get kernel version string */ file = fopen("/proc/version", "rb"); if (file != NULL) { size_t size; /* read bytes and find end of file */ for (size = 0; ; size++) if (EOF == fgetc(file)) break; info->osName = TMALLOC(char, size); rewind(file); fread(info->osName, sizeof(char), size, file); fclose(file); info->osName[size-1] = '\0'; } else { error = TES_FAIL; } /* get cpu information */ file = fopen("/proc/cpuinfo", "rb"); if (file != NULL) { size_t size; char *inStr; /* read bytes and find end of file */ for (size = 0; ; size++) if (EOF == fgetc(file)) break; /* get complete string */ inStr = TMALLOC(char, size+1); rewind(file); fread(inStr, sizeof(char), size, file); inStr[size] = '\0'; { const char *matchStr = "model name"; /* pointer to first occurrence of model name*/ const char *modelStr = strstr(inStr, matchStr); if (modelStr != NULL) { /* search for ':' */ const char *modelPtr = strchr(modelStr, ':'); if (modelPtr != NULL) { /*length of string from ':' till end of line */ size_t numToEOL = getLineLength(modelPtr); if (numToEOL > 2) { /* skip ": "*/ numToEOL -= 2; info->cpuModelName = TMALLOC(char, numToEOL+1); memcpy(info->cpuModelName, modelPtr+2, numToEOL); info->cpuModelName[numToEOL] = '\0'; } } else { error = TES_FAIL; } } else { error = TES_FAIL; } } { const char *matchStrProc = "processor"; const char *matchStrPhys = "physical id"; char *strPtr = inStr; unsigned numProcs = 0; tInt *physIDs; /* get number of logical processors */ while ((strPtr = strstr(strPtr, matchStrProc)) != NULL) { // numProcs++; strPtr += strlen(matchStrProc); if (isblank_c(*strPtr)) numProcs++; } info->numLogicalProcessors = numProcs; physIDs = TMALLOC(tInt, numProcs); /* get number of physical CPUs */ numProcs = 0; strPtr = inStr; while ((strPtr = strstr(strPtr, matchStrProc)) != NULL) { /* search for first occurrence of physical id */ strPtr = strstr(strPtr, matchStrPhys); if (strPtr != NULL) { /* go to ';' */ strPtr = strchr(strPtr, ':'); if (strPtr != NULL) { tInt buffer = 0; /* skip ": " */ strPtr += 2; /* get number */ sscanf(strPtr, "%d", &buffer); /* If this physical id is unique, we have another physically available CPU */ if (searchInSet(physIDs, numProcs, buffer) == 0) { physIDs[numProcs] = buffer; numProcs++; } } else { // error = TES_FAIL; break; } } else { // error = TES_FAIL; break; } } info->numPhysicalProcessors = numProcs; tfree(physIDs); } /* another test to get number of logical processors * if (info->numLogicalProcessors == 0) { * char *token; * char *cpustr = copy(inStr); * while (cpustr && !*cpustr) * if (cieq(gettok(&cpustr), "processor")) { * gettok(&cpustr); * token = gettok(&cpustr); * } * * info->numLogicalProcessors = atoi(token) + 1; * tfree(cpustr); * } */ tfree(inStr); fclose(file); } else { error = TES_FAIL; } return error; } #elif defined(HAVE_WIN32) /* get memory information */ static int get_sysmem(struct sys_memory *memall) { #if (_WIN32_WINNT >= 0x0500) MEMORYSTATUSEX ms; ms.dwLength = sizeof(MEMORYSTATUSEX); GlobalMemoryStatusEx(&ms); memall->size_m = ms.ullTotalPhys; memall->free_m = ms.ullAvailPhys; memall->swap_t = ms.ullTotalPageFile; memall->swap_f = ms.ullAvailPageFile; #else MEMORYSTATUS ms; ms.dwLength = sizeof(MEMORYSTATUS); GlobalMemoryStatus(&ms); memall->size_m = ms.dwTotalPhys; memall->free_m = ms.dwAvailPhys; memall->swap_t = ms.dwTotalPageFile; memall->swap_f = ms.dwAvailPageFile; #endif return 1; } /* get system information */ TesError tesCreateSystemInfo(TesSystemInfo *info) { OSVERSIONINFOA version; char *versionStr = NULL, *procStr, *freeStr; DWORD major, minor; DWORD dwLen = 0; HKEY hkBaseCPU; LONG lResult; SYSTEM_INFO sysinfo; GetSystemInfo(&sysinfo); info->numPhysicalProcessors = 0; info->numLogicalProcessors = sysinfo.dwNumberOfProcessors; //atoi(getenv("NUMBER_OF_PROCESSORS")); info->osName = NULL; version.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA); if (GetVersionExA(&version) == 0) return TES_FAIL; major = version.dwMajorVersion; minor = version.dwMinorVersion; switch (major) { case 4: if (minor == 0) versionStr = "Windows 95/NT4.0"; else if (minor == 10) versionStr = "Windows 98"; else if (minor == 90) versionStr = "Windows ME"; break; case 5: if (minor == 0) versionStr = "Windows 2000"; else if (minor == 1) versionStr = "Windows XP"; else if (minor == 2) versionStr = "Windows Server 2003"; break; case 6: if (minor == 0) versionStr = "Windows Vista"; else if (minor == 1) versionStr = "Windows 7"; else if (minor == 2) versionStr = "Windows 8"; else if (minor == 3) versionStr = "Windows 8.1"; break; case 10: if (minor == 0) versionStr = "Windows 10"; break; default: break; } if (versionStr != NULL) { size_t lengthCSD = strlen(version.szCSDVersion); size_t lengthVer = strlen(versionStr); info->osName = TMALLOC(char, lengthVer + lengthCSD + 2); memcpy(info->osName, versionStr, lengthVer); memcpy(info->osName + lengthVer + 1, version.szCSDVersion, lengthCSD); info->osName[lengthVer] = ' '; info->osName[lengthVer + lengthCSD + 1] = '\0'; } lResult = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", 0, KEY_READ, &hkBaseCPU); if (lResult != ERROR_SUCCESS) { info->cpuModelName = NULL; return TES_FAIL; } RegQueryValueExA(hkBaseCPU, "ProcessorNameString", 0, 0, NULL, &dwLen); freeStr = procStr = TMALLOC(char, dwLen + 1); RegQueryValueExA(hkBaseCPU, "ProcessorNameString", 0, 0, (LPBYTE)procStr, &dwLen); procStr[dwLen] = '\0'; while (*procStr == ' ') procStr++; info->cpuModelName = copy(procStr); tfree(freeStr); RegCloseKey(hkBaseCPU); return TES_SUCCESS; } #else /* no Windows OS, no proc info file system */ TesError tesCreateSystemInfo(TesSystemInfo *info) { return 1; } #endif tmpk8ny_4pz/src/frontend/com_xgraph.c0000644000175000017500000000130313546075722020056 0ustar carstencarsten#include #include "ngspice/ngspice.h" #include "ngspice/bool.h" #include "ngspice/wordlist.h" #include "plotting/plotit.h" #include "../misc/mktemp.h" #include "com_xgraph.h" /* xgraph file plotargs */ void com_xgraph(wordlist *wl) { char *fname = NULL; bool tempf = FALSE; if (wl) { fname = wl->wl_word; wl = wl->wl_next; } if (!wl) return; if (cieq(fname, "temp") || cieq(fname, "tmp")) { fname = smktemp("xg"); tempf = TRUE; } (void) plotit(wl, fname, "xgraph"); #if 0 /* Leave temp file sitting around so xgraph can grab it from background. */ if (tempf) (void) unlink(fname); #endif } tmpk8ny_4pz/src/frontend/com_dl.h0000644000175000017500000000024413546075722017174 0ustar carstencarsten#ifndef ngspice_COM_DL_H #define ngspice_COM_DL_H #ifdef XSPICE void com_codemodel(wordlist *wl); #endif #ifdef DEVLIB void com_use(wordlist *wl); #endif #endif tmpk8ny_4pz/src/frontend/init.h0000644000175000017500000000007013546075722016677 0ustar carstencarsten#ifndef ngspice_INIT_H #define ngspice_INIT_H #endif tmpk8ny_4pz/src/frontend/outitf.c0000644000175000017500000014210313546075722017245 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Wayne A. Christopher, U. C. Berkeley CAD Group Modified: 2000 AlansFixes, 2013/2015 patch by Krzysztof Blaszkowski **********/ /* * This module replaces the old "writedata" routines in nutmeg. * Unlike the writedata routines, the OUT routines are only called by * the simulator routines, and only call routines in nutmeg. The rest * of nutmeg doesn't deal with OUT at all. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/plot.h" #include "ngspice/sim.h" #include "ngspice/inpdefs.h" /* for INPtables */ #include "ngspice/ifsim.h" #include "ngspice/jobdefs.h" #include "ngspice/iferrmsg.h" #include "circuits.h" #include "outitf.h" #include "variable.h" #include #include "ngspice/cktdefs.h" #include "ngspice/inpdefs.h" #include "breakp2.h" #include "runcoms.h" #include "plotting/graf.h" #include "../misc/misc_time.h" extern char *spice_analysis_get_name(int index); extern char *spice_analysis_get_description(int index); static int beginPlot(JOB *analysisPtr, CKTcircuit *circuitPtr, char *cktName, char *analName, char *refName, int refType, int numNames, char **dataNames, int dataType, bool windowed, runDesc **runp); static int addDataDesc(runDesc *run, char *name, int type, int ind, int meminit); static int addSpecialDesc(runDesc *run, char *name, char *devname, char *param, int depind, int meminit); static void fileInit(runDesc *run); static void fileInit_pass2(runDesc *run); static void fileStartPoint(FILE *fp, bool bin, int num); static void fileAddRealValue(FILE *fp, bool bin, double value); static void fileAddComplexValue(FILE *fp, bool bin, IFcomplex value); static void fileEndPoint(FILE *fp, bool bin); static void fileEnd(runDesc *run); static void plotInit(runDesc *run); static void plotAddRealValue(dataDesc *desc, double value); static void plotAddComplexValue(dataDesc *desc, IFcomplex value); static void plotEnd(runDesc *run); static bool parseSpecial(char *name, char *dev, char *param, char *ind); static bool name_eq(char *n1, char *n2); static bool getSpecial(dataDesc *desc, runDesc *run, IFvalue *val); static void freeRun(runDesc *run); static int InterpFileAdd(runDesc *plotPtr, IFvalue *refValue, IFvalue *valuePtr); static int InterpPlotAdd(runDesc *plotPtr, IFvalue *refValue, IFvalue *valuePtr); /*Output data to spice module*/ #ifdef TCL_MODULE #include "ngspice/tclspice.h" #elif defined SHARED_MODULE extern int sh_ExecutePerLoop(void); extern void sh_vecinit(runDesc *run); #endif /*Suppressing progress info in -o option */ #ifndef HAS_WINGUI extern bool orflag; #endif // fixme // ugly hack to work around missing api to specify the "type" of signals int fixme_onoise_type = SV_NOTYPE; int fixme_inoise_type = SV_NOTYPE; #define DOUBLE_PRECISION 15 static clock_t lastclock, currclock; static double *rowbuf; static size_t column, rowbuflen; static bool shouldstop = FALSE; /* Tell simulator to stop next time it asks. */ static bool interpolated = FALSE; static double *valueold, *valuenew; #ifdef SHARED_MODULE static bool savenone = FALSE; #endif /* The two "begin plot" routines share all their internals... */ int OUTpBeginPlot(CKTcircuit *circuitPtr, JOB *analysisPtr, IFuid analName, IFuid refName, int refType, int numNames, IFuid *dataNames, int dataType, runDesc **plotPtr) { char *name; if (ft_curckt->ci_ckt == circuitPtr) name = ft_curckt->ci_name; else name = "circuit name"; return (beginPlot(analysisPtr, circuitPtr, name, analName, refName, refType, numNames, dataNames, dataType, FALSE, plotPtr)); } int OUTwBeginPlot(CKTcircuit *circuitPtr, JOB *analysisPtr, IFuid analName, IFuid refName, int refType, int numNames, IFuid *dataNames, int dataType, runDesc **plotPtr) { return (beginPlot(analysisPtr, circuitPtr, "circuit name", analName, refName, refType, numNames, dataNames, dataType, TRUE, plotPtr)); } static int beginPlot(JOB *analysisPtr, CKTcircuit *circuitPtr, char *cktName, char *analName, char *refName, int refType, int numNames, char **dataNames, int dataType, bool windowed, runDesc **runp) { runDesc *run; struct save_info *saves; bool *savesused = NULL; int numsaves; int i, j, depind = 0; char namebuf[BSIZE_SP], parambuf[BSIZE_SP], depbuf[BSIZE_SP]; char *ch, tmpname[BSIZE_SP]; bool saveall = TRUE; bool savealli = FALSE; char *an_name; int initmem; /*to resume a run saj *All it does is reassign the file pointer and return (requires *runp to be NULL if this is not needed) */ if (dataType == 666 && numNames == 666) { run = *runp; run->writeOut = ft_getOutReq(&run->fp, &run->runPlot, &run->binary, run->type, run->name); } else { /*end saj*/ /* Check to see if we want to print informational data. */ if (cp_getvar("printinfo", CP_BOOL, NULL, 0)) fprintf(cp_err, "(debug printing enabled)\n"); /* Check to see if we want to save only interpolated data. */ if (cp_getvar("interp", CP_BOOL, NULL, 0)) { interpolated = TRUE; fprintf(cp_out, "Warning: Interpolated raw file data!\n\n"); } *runp = run = TMALLOC(struct runDesc, 1); /* First fill in some general information. */ run->analysis = analysisPtr; run->circuit = circuitPtr; run->name = copy(cktName); run->type = copy(analName); run->windowed = windowed; run->numData = 0; an_name = spice_analysis_get_name(analysisPtr->JOBtype); ft_curckt->ci_last_an = an_name; /* Now let's see which of these things we need. First toss in the * reference vector. Then toss in anything that getSaves() tells * us to save that we can find in the name list. Finally unpack * the remaining saves into parameters. */ numsaves = ft_getSaves(&saves); if (numsaves) { savesused = TMALLOC(bool, numsaves); saveall = FALSE; for (i = 0; i < numsaves; i++) { if (saves[i].analysis && !cieq(saves[i].analysis, an_name)) { /* ignore this one this time around */ savesused[i] = TRUE; continue; } /* Check for ".save all" and new synonym ".save allv" */ if (cieq(saves[i].name, "all") || cieq(saves[i].name, "allv")) { saveall = TRUE; savesused[i] = TRUE; saves[i].used = 1; continue; } /* And now for the new ".save alli" option */ if (cieq(saves[i].name, "alli")) { savealli = TRUE; savesused[i] = TRUE; saves[i].used = 1; continue; } #ifdef SHARED_MODULE /* this may happen if shared ngspice*/ if (cieq(saves[i].name, "none")) { savenone = TRUE; saveall = TRUE; savesused[i] = TRUE; saves[i].used = 1; continue; } #endif } } if (numsaves && !saveall) initmem = numsaves; else initmem = numNames; /* Pass 0. */ if (refName) { addDataDesc(run, refName, refType, -1, initmem); for (i = 0; i < numsaves; i++) if (!savesused[i] && name_eq(saves[i].name, refName)) { savesused[i] = TRUE; saves[i].used = 1; } } else { run->refIndex = -1; } /* Pass 1. */ if (numsaves && !saveall) { for (i = 0; i < numsaves; i++) if (!savesused[i]) for (j = 0; j < numNames; j++) if (name_eq(saves[i].name, dataNames[j])) { addDataDesc(run, dataNames[j], dataType, j, initmem); savesused[i] = TRUE; saves[i].used = 1; break; } } else { for (i = 0; i < numNames; i++) if (!refName || !name_eq(dataNames[i], refName)) /* Save the node as long as it's an internal device node */ if (!strstr(dataNames[i], "#internal") && !strstr(dataNames[i], "#source") && !strstr(dataNames[i], "#drain") && !strstr(dataNames[i], "#collector") && !strstr(dataNames[i], "#emitter") && !strstr(dataNames[i], "#base")) { addDataDesc(run, dataNames[i], dataType, i, initmem); } } /* Pass 1 and a bit. This is a new pass which searches for all the internal device nodes, and saves the terminal currents instead */ if (savealli) { depind = 0; for (i = 0; i < numNames; i++) { if (strstr(dataNames[i], "#internal") || strstr(dataNames[i], "#source") || strstr(dataNames[i], "#drain") || strstr(dataNames[i], "#collector") || strstr(dataNames[i], "#emitter") || strstr(dataNames[i], "#base")) { tmpname[0] = '@'; tmpname[1] = '\0'; strncat(tmpname, dataNames[i], BSIZE_SP-1); ch = strchr(tmpname, '#'); if (strstr(ch, "#collector")) { strcpy(ch, "[ic]"); } else if (strstr(ch, "#base")) { strcpy(ch, "[ib]"); } else if (strstr(ch, "#emitter")) { strcpy(ch, "[ie]"); if (parseSpecial(tmpname, namebuf, parambuf, depbuf)) addSpecialDesc(run, tmpname, namebuf, parambuf, depind, initmem); strcpy(ch, "[is]"); } else if (strstr(ch, "#drain")) { strcpy(ch, "[id]"); if (parseSpecial(tmpname, namebuf, parambuf, depbuf)) addSpecialDesc(run, tmpname, namebuf, parambuf, depind, initmem); strcpy(ch, "[ig]"); } else if (strstr(ch, "#source")) { strcpy(ch, "[is]"); if (parseSpecial(tmpname, namebuf, parambuf, depbuf)) addSpecialDesc(run, tmpname, namebuf, parambuf, depind, initmem); strcpy(ch, "[ib]"); } else if (strstr(ch, "#internal") && (tmpname[1] == 'd')) { strcpy(ch, "[id]"); } else { fprintf(cp_err, "Debug: could output current for %s\n", tmpname); continue; } if (parseSpecial(tmpname, namebuf, parambuf, depbuf)) { if (*depbuf) { fprintf(stderr, "Warning : unexpected dependent variable on %s\n", tmpname); } else { addSpecialDesc(run, tmpname, namebuf, parambuf, depind, initmem); } } } } } /* Pass 2. */ for (i = 0; i < numsaves; i++) { if (savesused[i]) continue; if (!parseSpecial(saves[i].name, namebuf, parambuf, depbuf)) { if (saves[i].analysis) fprintf(cp_err, "Warning: can't parse '%s': ignored\n", saves[i].name); continue; } /* Now, if there's a dep variable, do we already have it? */ if (*depbuf) { for (j = 0; j < run->numData; j++) if (name_eq(depbuf, run->data[j].name)) break; if (j == run->numData) { /* Better add it. */ for (j = 0; j < numNames; j++) if (name_eq(depbuf, dataNames[j])) break; if (j == numNames) { fprintf(cp_err, "Warning: can't find '%s': value '%s' ignored\n", depbuf, saves[i].name); continue; } addDataDesc(run, dataNames[j], dataType, j, initmem); savesused[i] = TRUE; saves[i].used = 1; depind = j; } else { depind = run->data[j].outIndex; } } addSpecialDesc(run, saves[i].name, namebuf, parambuf, depind, initmem); } if (numsaves) { for (i = 0; i < numsaves; i++) { tfree(saves[i].analysis); tfree(saves[i].name); } tfree(saves); tfree(savesused); } if (numNames && ((run->numData == 1 && run->refIndex != -1) || (run->numData == 0 && run->refIndex == -1))) { fprintf(cp_err, "Error: no data saved for %s; analysis not run\n", spice_analysis_get_description(analysisPtr->JOBtype)); return E_NOTFOUND; } /* Now that we have our own data structures built up, let's see what * nutmeg wants us to do. */ run->writeOut = ft_getOutReq(&run->fp, &run->runPlot, &run->binary, run->type, run->name); if (run->writeOut) { fileInit(run); } else { plotInit(run); if (refName) run->runPlot->pl_ndims = 1; } } /* define storage for old and new data, to allow interpolation */ if (interpolated && run->circuit->CKTcurJob->JOBtype == 4) { valueold = TMALLOC(double, run->numData); for (i = 0; i < run->numData; i++) valueold[i] = 0.0; valuenew = TMALLOC(double, run->numData); } /*Start BLT, initilises the blt vectors saj*/ #ifdef TCL_MODULE blt_init(run); #elif defined SHARED_MODULE sh_vecinit(run); #endif return (OK); } /* Initialze memory for the list of all vectors in the current plot. Add a standard vector to this plot */ static int addDataDesc(runDesc *run, char *name, int type, int ind, int meminit) { dataDesc *data; /* initialize memory (for all vectors or given by 'save') */ if (!run->numData) { /* even if input 0, do a malloc */ run->data = TMALLOC(dataDesc, ++meminit); run->maxData = meminit; } /* If there is need for more memory */ else if (run->numData == run->maxData) { run->maxData = (int)(run->maxData * 1.1) + 1; run->data = TREALLOC(dataDesc, run->data, run->maxData); } data = &run->data[run->numData]; /* so freeRun will get nice NULL pointers for the fields we don't set */ memset(data, 0, sizeof(dataDesc)); data->name = copy(name); data->type = type; data->gtype = GRID_LIN; data->regular = TRUE; data->outIndex = ind; /* It's the reference vector. */ if (ind == -1) run->refIndex = run->numData; run->numData++; return (OK); } /* Initialze memory for the list of all vectors in the current plot. Add a special vector (e.g. @q1[ib]) to this plot */ static int addSpecialDesc(runDesc *run, char *name, char *devname, char *param, int depind, int meminit) { dataDesc *data; char *unique, *freeunique; /* unique char * from back-end */ int ret; if (!run->numData) { /* even if input 0, do a malloc */ run->data = TMALLOC(dataDesc, ++meminit); run->maxData = meminit; } else if (run->numData == run->maxData) { run->maxData = (int)(run->maxData * 1.1) + 1; run->data = TREALLOC(dataDesc, run->data, run->maxData); } data = &run->data[run->numData]; /* so freeRun will get nice NULL pointers for the fields we don't set */ memset(data, 0, sizeof(dataDesc)); data->name = copy(name); freeunique = unique = copy(devname); /* unique will be overridden, if it already exists */ ret = INPinsertNofree(&unique, ft_curckt->ci_symtab); data->specName = unique; if (ret == E_EXISTS) tfree(freeunique); data->specParamName = copy(param); data->specIndex = depind; data->specType = -1; data->specFast = NULL; data->regular = FALSE; run->numData++; return (OK); } static void OUTpD_memory(runDesc *run, IFvalue *refValue, IFvalue *valuePtr) { int i, n = run->numData; for (i = 0; i < n; i++) { dataDesc *d; #ifdef TCL_MODULE /*Locks the blt vector to stop access*/ blt_lockvec(i); #endif d = &run->data[i]; if (d->outIndex == -1) { if (d->type == IF_REAL) plotAddRealValue(d, refValue->rValue); else if (d->type == IF_COMPLEX) plotAddComplexValue(d, refValue->cValue); } else if (d->regular) { if (d->type == IF_REAL) plotAddRealValue(d, valuePtr->v.vec.rVec[d->outIndex]); else if (d->type == IF_COMPLEX) plotAddComplexValue(d, valuePtr->v.vec.cVec[d->outIndex]); } else { IFvalue val; /* should pre-check instance */ if (!getSpecial(d, run, &val)) continue; if (d->type == IF_REAL) plotAddRealValue(d, val.rValue); else if (d->type == IF_COMPLEX) plotAddComplexValue(d, val.cValue); else fprintf(stderr, "OUTpData: unsupported data type\n"); } #ifdef TCL_MODULE /*relinks and unlocks vector*/ blt_relink(i, d->vec); #endif } } int OUTpData(runDesc *plotPtr, IFvalue *refValue, IFvalue *valuePtr) { runDesc *run = plotPtr; // FIXME int i; run->pointCount++; #ifdef TCL_MODULE steps_completed = run->pointCount; #endif /* interpolated batch mode output to file in transient analysis */ if (interpolated && run->circuit->CKTcurJob->JOBtype == 4 && run->writeOut) { InterpFileAdd(run, refValue, valuePtr); return (OK); } /* interpolated interactive or control mode output to plot in transient analysis */ else if (interpolated && run->circuit->CKTcurJob->JOBtype == 4 && !(run->writeOut)) { InterpPlotAdd(run, refValue, valuePtr); return (OK); } /* standard batch mode output to file */ else if (run->writeOut) { if (run->pointCount == 1) fileInit_pass2(run); fileStartPoint(run->fp, run->binary, run->pointCount); if (run->refIndex != -1) { if (run->isComplex) { fileAddComplexValue(run->fp, run->binary, refValue->cValue); /* While we're looking at the reference value, print it to the screen every quarter of a second, to give some feedback without using too much CPU time */ #ifndef HAS_WINGUI if (!orflag && !ft_norefprint) { currclock = clock(); if ((currclock-lastclock) > (0.25*CLOCKS_PER_SEC)) { fprintf(stderr, " Reference value : % 12.5e\r", refValue->cValue.real); lastclock = currclock; } } #endif } else { /* And the same for a non-complex value */ fileAddRealValue(run->fp, run->binary, refValue->rValue); #ifndef HAS_WINGUI if (!orflag && !ft_norefprint) { currclock = clock(); if ((currclock-lastclock) > (0.25*CLOCKS_PER_SEC)) { fprintf(stderr, " Reference value : % 12.5e\r", refValue->rValue); lastclock = currclock; } } #endif } } for (i = 0; i < run->numData; i++) { /* we've already printed reference vec first */ if (run->data[i].outIndex == -1) continue; #ifdef TCL_MODULE blt_add(i, refValue ? refValue->rValue : NAN); #endif if (run->data[i].regular) { if (run->data[i].type == IF_REAL) fileAddRealValue(run->fp, run->binary, valuePtr->v.vec.rVec [run->data[i].outIndex]); else if (run->data[i].type == IF_COMPLEX) fileAddComplexValue(run->fp, run->binary, valuePtr->v.vec.cVec [run->data[i].outIndex]); else fprintf(stderr, "OUTpData: unsupported data type\n"); } else { IFvalue val; /* should pre-check instance */ if (!getSpecial(&run->data[i], run, &val)) { /* If this is the first data point, print a warning for any unrecognized variables, since this has not already been checked */ if (run->pointCount == 1) fprintf(stderr, "Warning: unrecognized variable - %s\n", run->data[i].name); if (run->isComplex) { val.cValue.real = 0; val.cValue.imag = 0; fileAddComplexValue(run->fp, run->binary, val.cValue); } else { val.rValue = 0; fileAddRealValue(run->fp, run->binary, val.rValue); } continue; } if (run->data[i].type == IF_REAL) fileAddRealValue(run->fp, run->binary, val.rValue); else if (run->data[i].type == IF_COMPLEX) fileAddComplexValue(run->fp, run->binary, val.cValue); else fprintf(stderr, "OUTpData: unsupported data type\n"); } #ifdef TCL_MODULE blt_add(i, valuePtr->v.vec.rVec [run->data[i].outIndex]); #endif } fileEndPoint(run->fp, run->binary); /* Check that the write to disk completed successfully, otherwise abort */ if (ferror(run->fp)) { fprintf(stderr, "Warning: rawfile write error !!\n"); shouldstop = TRUE; } } else { OUTpD_memory(run, refValue, valuePtr); /* This is interactive mode. Update the screen with the reference variable just the same */ #ifndef HAS_WINGUI if (!orflag && !ft_norefprint) { currclock = clock(); if ((currclock-lastclock) > (0.25*CLOCKS_PER_SEC)) { if (run->isComplex) { fprintf(stderr, " Reference value : % 12.5e\r", refValue ? refValue->cValue.real : NAN); } else { fprintf(stderr, " Reference value : % 12.5e\r", refValue ? refValue->rValue : NAN); } lastclock = currclock; } } #endif gr_iplot(run->runPlot); } if (ft_bpcheck(run->runPlot, run->pointCount) == FALSE) shouldstop = TRUE; #ifdef TCL_MODULE Tcl_ExecutePerLoop(); #elif defined SHARED_MODULE sh_ExecutePerLoop(); #endif return (OK); } int OUTwReference(void *plotPtr, IFvalue *valuePtr, void **refPtr) { NG_IGNORE(refPtr); NG_IGNORE(valuePtr); NG_IGNORE(plotPtr); return (OK); } int OUTwData(runDesc *plotPtr, int dataIndex, IFvalue *valuePtr, void *refPtr) { NG_IGNORE(refPtr); NG_IGNORE(valuePtr); NG_IGNORE(dataIndex); NG_IGNORE(plotPtr); return (OK); } int OUTwEnd(runDesc *plotPtr) { NG_IGNORE(plotPtr); return (OK); } int OUTendPlot(runDesc *plotPtr) { if (plotPtr->writeOut) { fileEnd(plotPtr); } else { gr_end_iplot(); plotEnd(plotPtr); } tfree(valueold); tfree(valuenew); freeRun(plotPtr); return (OK); } int OUTbeginDomain(runDesc *plotPtr, IFuid refName, int refType, IFvalue *outerRefValue) { NG_IGNORE(outerRefValue); NG_IGNORE(refType); NG_IGNORE(refName); NG_IGNORE(plotPtr); return (OK); } int OUTendDomain(runDesc *plotPtr) { NG_IGNORE(plotPtr); return (OK); } int OUTattributes(runDesc *plotPtr, IFuid varName, int param, IFvalue *value) { runDesc *run = plotPtr; // FIXME GRIDTYPE type; struct dvec *d; NG_IGNORE(value); if (param == OUT_SCALE_LIN) type = GRID_LIN; else if (param == OUT_SCALE_LOG) type = GRID_XLOG; else return E_UNSUPP; if (run->writeOut) { if (varName) { int i; for (i = 0; i < run->numData; i++) if (!strcmp(varName, run->data[i].name)) run->data[i].gtype = type; } else { run->data[run->refIndex].gtype = type; } } else { if (varName) { for (d = run->runPlot->pl_dvecs; d; d = d->v_next) if (!strcmp(varName, d->v_name)) d->v_gridtype = type; } else if (param == PLOT_COMB) { for (d = run->runPlot->pl_dvecs; d; d = d->v_next) d->v_plottype = PLOT_COMB; } else { run->runPlot->pl_scale->v_gridtype = type; } } return (OK); } /* The file writing routines. */ static void fileInit(runDesc *run) { char buf[513]; int i; size_t n; lastclock = clock(); /* This is a hack. */ run->isComplex = FALSE; for (i = 0; i < run->numData; i++) if (run->data[i].type == IF_COMPLEX) run->isComplex = TRUE; n = 0; sprintf(buf, "Title: %s\n", run->name); n += strlen(buf); fputs(buf, run->fp); sprintf(buf, "Date: %s\n", datestring()); n += strlen(buf); fputs(buf, run->fp); sprintf(buf, "Plotname: %s\n", run->type); n += strlen(buf); fputs(buf, run->fp); sprintf(buf, "Flags: %s\n", run->isComplex ? "complex" : "real"); n += strlen(buf); fputs(buf, run->fp); sprintf(buf, "No. Variables: %d\n", run->numData); n += strlen(buf); fputs(buf, run->fp); sprintf(buf, "No. Points: "); n += strlen(buf); fputs(buf, run->fp); fflush(run->fp); /* Gotta do this for LATTICE. */ if (run->fp == stdout || (run->pointPos = ftell(run->fp)) <= 0) run->pointPos = (long) n; fprintf(run->fp, "0 \n"); /* Save 8 spaces here. */ /*fprintf(run->fp, "Command: version %s\n", ft_sim->version);*/ fprintf(run->fp, "Variables:\n"); printf("No. of Data Columns : %d \n", run->numData); } static int guess_type(const char *name) { int type; if (substring("#branch", name)) type = SV_CURRENT; else if (cieq(name, "time")) type = SV_TIME; else if (cieq(name, "frequency")) type = SV_FREQUENCY; else if (ciprefix("inoise", name)) type = fixme_inoise_type; else if (ciprefix("onoise", name)) type = fixme_onoise_type; else if (cieq(name, "temp-sweep")) type = SV_TEMP; else if (cieq(name, "res-sweep")) type = SV_RES; else if ((*name == '@') && substring("[g", name)) /* token starting with [g */ type = SV_ADMITTANCE; else if ((*name == '@') && substring("[c", name)) type = SV_CAPACITANCE; else if ((*name == '@') && substring("[i", name)) type = SV_CURRENT; else if ((*name == '@') && substring("[q", name)) type = SV_CHARGE; else if ((*name == '@') && substring("[p]", name)) /* token is exactly [p] */ type = SV_POWER; else type = SV_VOLTAGE; return type; } static void fileInit_pass2(runDesc *run) { int i, type; for (i = 0; i < run->numData; i++) { char *name = run->data[i].name; type = guess_type(name); if (type == SV_CURRENT) { char *branch = strstr(name, "#branch"); if (branch) *branch = '\0'; fprintf(run->fp, "\t%d\ti(%s)\t%s", i, name, ft_typenames(type)); if (branch) *branch = '#'; } else if (type == SV_VOLTAGE) { fprintf(run->fp, "\t%d\tv(%s)\t%s", i, name, ft_typenames(type)); } else { fprintf(run->fp, "\t%d\t%s\t%s", i, name, ft_typenames(type)); } if (run->data[i].gtype == GRID_XLOG) fprintf(run->fp, "\tgrid=3"); fprintf(run->fp, "\n"); } fprintf(run->fp, "%s:\n", run->binary ? "Binary" : "Values"); fflush(run->fp); /* Allocate Row buffer */ if (run->binary) { rowbuflen = (size_t) (run->numData); if (run->isComplex) rowbuflen *= 2; rowbuf = TMALLOC(double, rowbuflen); } else { rowbuflen = 0; rowbuf = NULL; } } static void fileStartPoint(FILE *fp, bool bin, int num) { if (!bin) fprintf(fp, "%d\t", num - 1); /* reset buffer pointer to zero */ column = 0; } static void fileAddRealValue(FILE *fp, bool bin, double value) { if (bin) rowbuf[column++] = value; else fprintf(fp, "\t%.*e\n", DOUBLE_PRECISION, value); } static void fileAddComplexValue(FILE *fp, bool bin, IFcomplex value) { if (bin) { rowbuf[column++] = value.real; rowbuf[column++] = value.imag; } else { fprintf(fp, "\t%.*e,%.*e\n", DOUBLE_PRECISION, value.real, DOUBLE_PRECISION, value.imag); } } static void fileEndPoint(FILE *fp, bool bin) { /* write row buffer to file */ /* otherwise the data has already been written */ if (bin) fwrite(rowbuf, sizeof(double), rowbuflen, fp); } /* Here's the hack... Run back and fill in the number of points. */ static void fileEnd(runDesc *run) { if (run->fp != stdout) { long place = ftell(run->fp); fseek(run->fp, run->pointPos, SEEK_SET); fprintf(run->fp, "%d", run->pointCount); fprintf(stdout, "\nNo. of Data Rows : %d\n", run->pointCount); fseek(run->fp, place, SEEK_SET); } else { /* Yet another hack-around */ fprintf(stderr, "@@@ %ld %d\n", run->pointPos, run->pointCount); } fflush(run->fp); tfree(rowbuf); } /* The plot maintenance routines. */ static void plotInit(runDesc *run) { struct plot *pl = plot_alloc(run->type); struct dvec *v; int i; pl->pl_title = copy(run->name); pl->pl_name = copy(run->type); pl->pl_date = copy(datestring()); pl->pl_ndims = 0; plot_new(pl); plot_setcur(pl->pl_typename); run->runPlot = pl; /* This is a hack. */ /* if any of them complex, make them all complex */ run->isComplex = FALSE; for (i = 0; i < run->numData; i++) if (run->data[i].type == IF_COMPLEX) run->isComplex = TRUE; for (i = 0; i < run->numData; i++) { dataDesc *dd = &run->data[i]; char *name; if (isdigit_c(dd->name[0])) name = tprintf("V(%s)", dd->name); else name = copy(dd->name); v = dvec_alloc(name, guess_type(name), run->isComplex ? (VF_COMPLEX | VF_PERMANENT) : (VF_REAL | VF_PERMANENT), 0, NULL); vec_new(v); dd->vec = v; } } /* prepare the vector length data for memory allocation If new, and tran or pss, length is TSTOP / TSTEP plus some margin. If allocated length is exceeded, check progress. When > 20% then extrapolate memory needed, if less than 20% then just double the size. If not tran or pss, return fixed value (1024) of memory to be added. */ static inline int vlength2delta(int len) { #ifdef SHARED_MODULE if (savenone) /* We need just a vector length of 1 */ return 1; #endif /* TSTOP / TSTEP */ int points = ft_curckt->ci_ckt->CKTtimeListSize; /* transient and pss analysis (points > 0) upon start */ if (len == 0 && points > 0) { /* number of timesteps plus some overhead */ return points + 100; } /* transient and pss if original estimate is exceeded */ else if (points > 0) { /* check where we are */ double timerel = ft_curckt->ci_ckt->CKTtime / ft_curckt->ci_ckt->CKTfinalTime; /* return an estimate of the appropriate number of time points, if more than 20% of the anticipated total time has passed */ if (timerel > 0.2) return (int)(len / timerel) - len + 1; /* If not, just double the available memory */ else return len; } /* other analysis types that do not set CKTtimeListSize */ else return 1024; } static void plotAddRealValue(dataDesc *desc, double value) { struct dvec *v = desc->vec; #ifdef SHARED_MODULE if (savenone) /* always save new data to same location */ v->v_length = 0; #endif if (v->v_length >= v->v_alloc_length) dvec_extend(v, v->v_length + vlength2delta(v->v_length)); if (isreal(v)) { v->v_realdata[v->v_length] = value; } else { /* a real parading as a VF_COMPLEX */ v->v_compdata[v->v_length].cx_real = value; v->v_compdata[v->v_length].cx_imag = 0.0; } v->v_length++; v->v_dims[0] = v->v_length; /* va, must be updated */ } static void plotAddComplexValue(dataDesc *desc, IFcomplex value) { struct dvec *v = desc->vec; #ifdef SHARED_MODULE if (savenone) v->v_length = 0; #endif if (v->v_length >= v->v_alloc_length) dvec_extend(v, v->v_length + vlength2delta(v->v_length)); v->v_compdata[v->v_length].cx_real = value.real; v->v_compdata[v->v_length].cx_imag = value.imag; v->v_length++; v->v_dims[0] = v->v_length; /* va, must be updated */ } static void plotEnd(runDesc *run) { fprintf(stdout, "\nNo. of Data Rows : %d\n", run->pointCount); } /* ParseSpecial takes something of the form "@name[param,index]" and rips * out name, param, andstrchr. */ static bool parseSpecial(char *name, char *dev, char *param, char *ind) { char *s; *dev = *param = *ind = '\0'; if (*name != '@') return FALSE; name++; s = dev; while (*name && (*name != '[')) *s++ = *name++; *s = '\0'; if (!*name) return TRUE; name++; s = param; while (*name && (*name != ',') && (*name != ']')) *s++ = *name++; *s = '\0'; if (*name == ']') return (!name[1] ? TRUE : FALSE); else if (!*name) return FALSE; name++; s = ind; while (*name && (*name != ']')) *s++ = *name++; *s = '\0'; if (*name && !name[1]) return TRUE; else return FALSE; } /* This routine must match two names with or without a V() around them. */ static bool name_eq(char *n1, char *n2) { char buf1[BSIZE_SP], buf2[BSIZE_SP], *s; if ((s = strchr(n1, '(')) != NULL) { strcpy(buf1, s); if ((s = strchr(buf1, ')')) == NULL) return FALSE; *s = '\0'; n1 = buf1; } if ((s = strchr(n2, '(')) != NULL) { strcpy(buf2, s); if ((s = strchr(buf2, ')')) == NULL) return FALSE; *s = '\0'; n2 = buf2; } return (strcmp(n1, n2) ? FALSE : TRUE); } static bool getSpecial(dataDesc *desc, runDesc *run, IFvalue *val) { IFvalue selector; struct variable *vv; selector.iValue = desc->specIndex; if (INPaName(desc->specParamName, val, run->circuit, &desc->specType, desc->specName, &desc->specFast, ft_sim, &desc->type, &selector) == OK) { desc->type &= (IF_REAL | IF_COMPLEX); /* mask out other bits */ return TRUE; } if ((vv = if_getstat(run->circuit, &desc->name[1])) != NULL) { /* skip @ sign */ desc->type = IF_REAL; if (vv->va_type == CP_REAL) val->rValue = vv->va_real; else if (vv->va_type == CP_NUM) val->rValue = vv->va_num; else if (vv->va_type == CP_BOOL) val->rValue = (vv->va_bool ? 1.0 : 0.0); else return FALSE; /* not a real */ tfree(vv); return TRUE; } return FALSE; } static void freeRun(runDesc *run) { int i; for (i = 0; i < run->numData; i++) { tfree(run->data[i].name); tfree(run->data[i].specParamName); } tfree(run->data); tfree(run->type); tfree(run->name); tfree(run); } int OUTstopnow(void) { if (ft_intrpt || shouldstop) { ft_intrpt = shouldstop = FALSE; return (1); } return (0); } /* Print out error messages. */ static struct mesg { char *string; long flag; } msgs[] = { { "Warning", ERR_WARNING } , { "Fatal error", ERR_FATAL } , { "Panic", ERR_PANIC } , { "Note", ERR_INFO } , { NULL, 0 } }; void OUTerror(int flags, char *format, IFuid *names) { struct mesg *m; char buf[BSIZE_SP], *s, *bptr; int nindex = 0; if ((flags == ERR_INFO) && cp_getvar("printinfo", CP_BOOL, NULL, 0)) return; for (m = msgs; m->flag; m++) if (flags & m->flag) fprintf(cp_err, "%s: ", m->string); for (s = format, bptr = buf; *s; s++) { if (*s == '%' && (s == format || s[-1] != '%') && s[1] == 's') { if (names[nindex]) strcpy(bptr, names[nindex]); else strcpy(bptr, "(null)"); bptr += strlen(bptr); s++; nindex++; } else { *bptr++ = *s; } } *bptr = '\0'; fprintf(cp_err, "%s\n", buf); fflush(cp_err); } void OUTerrorf(int flags, const char *format, ...) { struct mesg *m; va_list args; if ((flags == ERR_INFO) && cp_getvar("printinfo", CP_BOOL, NULL, 0)) return; for (m = msgs; m->flag; m++) if (flags & m->flag) fprintf(cp_err, "%s: ", m->string); va_start (args, format); vfprintf(cp_err, format, args); fputc('\n', cp_err); fflush(cp_err); va_end(args); } static int InterpFileAdd(runDesc *run, IFvalue *refValue, IFvalue *valuePtr) { int i; static double timeold = 0.0, timenew = 0.0, timestep = 0.0; bool nodata = FALSE; bool interpolatenow = FALSE; if (run->pointCount == 1) { fileInit_pass2(run); timestep = run->circuit->CKTinitTime + run->circuit->CKTstep; } if (run->refIndex != -1) { /* Save first time step */ if (refValue->rValue == run->circuit->CKTinitTime) { timeold = refValue->rValue; fileStartPoint(run->fp, run->binary, run->pointCount); fileAddRealValue(run->fp, run->binary, run->circuit->CKTinitTime); interpolatenow = nodata = FALSE; } /* Save last time step */ else if (refValue->rValue == run->circuit->CKTfinalTime) { timeold = refValue->rValue; fileStartPoint(run->fp, run->binary, run->pointCount); fileAddRealValue(run->fp, run->binary, run->circuit->CKTfinalTime); interpolatenow = nodata = FALSE; } /* Save exact point */ else if (refValue->rValue == timestep) { timeold = refValue->rValue; fileStartPoint(run->fp, run->binary, run->pointCount); fileAddRealValue(run->fp, run->binary, timestep); timestep += run->circuit->CKTstep; interpolatenow = nodata = FALSE; } else if (refValue->rValue > timestep) { /* add the next time step value to the vector */ fileStartPoint(run->fp, run->binary, run->pointCount); timenew = refValue->rValue; fileAddRealValue(run->fp, run->binary, timestep); timestep += run->circuit->CKTstep; nodata = FALSE; interpolatenow = TRUE; } else { /* Do not save this step */ run->pointCount--; timeold = refValue->rValue; nodata = TRUE; interpolatenow = FALSE; } #ifndef HAS_WINGUI if (!orflag && !ft_norefprint) { currclock = clock(); if ((currclock-lastclock) > (0.25*CLOCKS_PER_SEC)) { fprintf(stderr, " Reference value : % 12.5e\r", refValue->rValue); lastclock = currclock; } } #endif } for (i = 0; i < run->numData; i++) { /* we've already printed reference vec first */ if (run->data[i].outIndex == -1) continue; #ifdef TCL_MODULE blt_add(i, refValue ? refValue->rValue : NAN); #endif if (run->data[i].regular) { /* Store value or interpolate and store or do not store any value to file */ if (!interpolatenow && !nodata) { /* store the first or last value */ valueold[i] = valuePtr->v.vec.rVec [run->data[i].outIndex]; fileAddRealValue(run->fp, run->binary, valueold[i]); } else if (interpolatenow) { /* Interpolate time if actual time is greater than proposed next time step */ double newval; valuenew[i] = valuePtr->v.vec.rVec [run->data[i].outIndex]; newval = (timestep - run->circuit->CKTstep - timeold)/(timenew - timeold) * (valuenew[i] - valueold[i]) + valueold[i]; fileAddRealValue(run->fp, run->binary, newval); valueold[i] = valuenew[i]; } else if (nodata) /* Just keep the transient output value corresponding to timeold, but do not store to file */ valueold[i] = valuePtr->v.vec.rVec [run->data[i].outIndex]; } else { IFvalue val; /* should pre-check instance */ if (!getSpecial(&run->data[i], run, &val)) { /* If this is the first data point, print a warning for any unrecognized variables, since this has not already been checked */ if (run->pointCount == 1) fprintf(stderr, "Warning: unrecognized variable - %s\n", run->data[i].name); val.rValue = 0; fileAddRealValue(run->fp, run->binary, val.rValue); continue; } if (!interpolatenow && !nodata) { /* store the first or last value */ valueold[i] = val.rValue; fileAddRealValue(run->fp, run->binary, valueold[i]); } else if (interpolatenow) { /* Interpolate time if actual time is greater than proposed next time step */ double newval; valuenew[i] = val.rValue; newval = (timestep - run->circuit->CKTstep - timeold)/(timenew - timeold) * (valuenew[i] - valueold[i]) + valueold[i]; fileAddRealValue(run->fp, run->binary, newval); valueold[i] = valuenew[i]; } else if (nodata) /* Just keep the transient output value corresponding to timeold, but do not store to file */ valueold[i] = val.rValue; } #ifdef TCL_MODULE blt_add(i, valuePtr->v.vec.rVec [run->data[i].outIndex]); #endif } fileEndPoint(run->fp, run->binary); /* Check that the write to disk completed successfully, otherwise abort */ if (ferror(run->fp)) { fprintf(stderr, "Warning: rawfile write error !!\n"); shouldstop = TRUE; } if (ft_bpcheck(run->runPlot, run->pointCount) == FALSE) shouldstop = TRUE; #ifdef TCL_MODULE Tcl_ExecutePerLoop(); #elif defined SHARED_MODULE sh_ExecutePerLoop(); #endif return(OK); } static int InterpPlotAdd(runDesc *run, IFvalue *refValue, IFvalue *valuePtr) { int i, iscale = -1; static double timeold = 0.0, timenew = 0.0, timestep = 0.0; bool nodata = FALSE; bool interpolatenow = FALSE; if (run->pointCount == 1) timestep = run->circuit->CKTinitTime + run->circuit->CKTstep; /* find the scale vector */ for (i = 0; i < run->numData; i++) if (run->data[i].outIndex == -1) { iscale = i; break; } if (iscale == -1) fprintf(stderr, "Error: no scale vector found\n"); #ifdef TCL_MODULE /*Locks the blt vector to stop access*/ blt_lockvec(iscale); #endif /* Save first time step */ if (refValue->rValue == run->circuit->CKTinitTime) { timeold = refValue->rValue; plotAddRealValue(&run->data[iscale], refValue->rValue); interpolatenow = nodata = FALSE; } /* Save last time step */ else if (refValue->rValue == run->circuit->CKTfinalTime) { timeold = refValue->rValue; plotAddRealValue(&run->data[iscale], run->circuit->CKTfinalTime); interpolatenow = nodata = FALSE; } /* Save exact point */ else if (refValue->rValue == timestep) { timeold = refValue->rValue; plotAddRealValue(&run->data[iscale], timestep); timestep += run->circuit->CKTstep; interpolatenow = nodata = FALSE; } else if (refValue->rValue > timestep) { /* add the next time step value to the vector */ timenew = refValue->rValue; plotAddRealValue(&run->data[iscale], timestep); timestep += run->circuit->CKTstep; nodata = FALSE; interpolatenow = TRUE; } else { /* Do not save this step */ run->pointCount--; timeold = refValue->rValue; nodata = TRUE; interpolatenow = FALSE; } #ifdef TCL_MODULE /*relinks and unlocks vector*/ blt_relink(iscale, (run->data[iscale]).vec); #endif #ifndef HAS_WINGUI if (!orflag && !ft_norefprint) { currclock = clock(); if ((currclock-lastclock) > (0.25*CLOCKS_PER_SEC)) { fprintf(stderr, " Reference value : % 12.5e\r", refValue->rValue); lastclock = currclock; } } #endif for (i = 0; i < run->numData; i++) { if (i == iscale) continue; #ifdef TCL_MODULE /*Locks the blt vector to stop access*/ blt_lockvec(i); #endif if (run->data[i].regular) { /* Store value or interpolate and store or do not store any value to file */ if (!interpolatenow && !nodata) { /* store the first or last value */ valueold[i] = valuePtr->v.vec.rVec [run->data[i].outIndex]; plotAddRealValue(&run->data[i], valueold[i]); } else if (interpolatenow) { /* Interpolate time if actual time is greater than proposed next time step */ double newval; valuenew[i] = valuePtr->v.vec.rVec [run->data[i].outIndex]; newval = (timestep - run->circuit->CKTstep - timeold)/(timenew - timeold) * (valuenew[i] - valueold[i]) + valueold[i]; plotAddRealValue(&run->data[i], newval); valueold[i] = valuenew[i]; } else if (nodata) /* Just keep the transient output value corresponding to timeold, but do not store to file */ valueold[i] = valuePtr->v.vec.rVec [run->data[i].outIndex]; } else { IFvalue val; /* should pre-check instance */ if (!getSpecial(&run->data[i], run, &val)) continue; if (!interpolatenow && !nodata) { /* store the first or last value */ valueold[i] = val.rValue; plotAddRealValue(&run->data[i], valueold[i]); } else if (interpolatenow) { /* Interpolate time if actual time is greater than proposed next time step */ double newval; valuenew[i] = val.rValue; newval = (timestep - run->circuit->CKTstep - timeold)/(timenew - timeold) * (valuenew[i] - valueold[i]) + valueold[i]; plotAddRealValue(&run->data[i], newval); valueold[i] = valuenew[i]; } else if (nodata) /* Just keep the transient output value corresponding to timeold, but do not store to file */ valueold[i] = val.rValue; } #ifdef TCL_MODULE /*relinks and unlocks vector*/ blt_relink(i, (run->data[i]).vec); #endif } gr_iplot(run->runPlot); if (ft_bpcheck(run->runPlot, run->pointCount) == FALSE) shouldstop = TRUE; #ifdef TCL_MODULE Tcl_ExecutePerLoop(); #elif defined SHARED_MODULE sh_ExecutePerLoop(); #endif return(OK); } tmpk8ny_4pz/src/frontend/hpgl.c0000644000175000017500000001560013546075722016666 0ustar carstencarsten/********** Author: Jim Groves **********/ /* HPGL driver */ /* 1000 plotter units / inch - 1pu = 0.025mm 1pu = 1mil SP - select pen PU - pen up (PU x,y) PD - pen down (PD x,y) LT - line type 0 dots only at plotted points 1 . . . . . 2 ___ ___ ___ ___ 3 ---- ---- ---- ---- 4 ----- . ----- . ----- . -----. 5 ---- - ---- - ---- - 6 --- - - --- - - --- - - --- - - null - solid line IN - initialize DF - default values (PA, solid line, set 0) PA - plot absolute SI - absolute character size (SI width, height) in cm */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/graph.h" #include "ngspice/ftedbgra.h" #include "ngspice/ftedev.h" #include "ngspice/fteinput.h" #include "ngspice/fteext.h" #include "variable.h" #include "plotting/graphdb.h" #include "hpgl.h" #define RAD_TO_DEG (180.0 / M_PI) #define DEVDEP(g) (*((GLdevdep *) (g)->devdep)) #define MAX_GL_LINES 9999 #define SOLID 0 #define DOTTED 1 #define gtype graph->grid.gridtype #define xoff dispdev->minx #define yoff dispdev->miny #define XOFF 25 /* printer left margin */ #define YOFF 28 /* printer bottom margin */ #define XTADJ 0 /* printer text adjustment x */ #define YTADJ 0 /* printer text adjustment y */ #define DELXMAX 360 /* printer gridsize divisible by 10, [7-2] */ #define DELYMAX 360 /* printer gridsize divisible by [10-8], [6-2] */ #define FONTWIDTH 6 /* printer default fontwidth */ #define FONTHEIGHT 8 /* printer default fontheight */ typedef struct { int lastlinestyle; /* initial invalid value */ int lastx, lasty, linecount; } GLdevdep; static char *linestyle[] = { "", /* solid */ "1", /* was 1 - dotted */ "", /* longdashed */ "3", /* shortdashed */ "4", /* longdotdashed */ "5", /* shortdotdashed */ "1" }; static FILE *plotfile; extern char psscale[32]; static int fontwidth = FONTWIDTH; static int fontheight = FONTHEIGHT; static int jgmult = 10; static int screenflag = 0; static double tocm = 0.0025; static double scale; /* Used for fine tuning */ static int hcopygraphid; int GL_Init(void) { if (!cp_getvar("hcopyscale", CP_STRING, psscale, sizeof(psscale))) { scale = 1.0; } else { sscanf(psscale, "%lf", &scale); if ((scale <= 0) || (scale > 10)) scale = 1.0; } dispdev->numlinestyles = NUMELEMS(linestyle); dispdev->numcolors = 6; dispdev->width = (int)(DELXMAX * scale); dispdev->height = (int)(DELYMAX * scale); screenflag = 0; dispdev->minx = (int)(XOFF * 1.0); dispdev->miny = (int)(YOFF * 1.0); return (0); } /* devdep initially contains name of output file */ int GL_NewViewport(GRAPH *graph) { hcopygraphid = graph->graphid; if ((plotfile = fopen((char*) graph->devdep, "w")) == NULL) { perror((char*) graph->devdep); graph->devdep = NULL; return (1); } if (graph->absolute.width) { /* hardcopying from the screen */ screenflag = 1; /* scale to fit on 8 1/2 square */ } /* reasonable values, used in gr_ for placement */ graph->fontwidth = (int)(fontwidth * scale); /* was 12, p.w.h. */ graph->fontheight = (int)(fontheight * scale); /* was 24, p.w.h. */ graph->absolute.width = dispdev->width; graph->absolute.height = dispdev->height; /* Also done in gr_init, if called . . . */ graph->viewportxoff = 16 * fontwidth; graph->viewportyoff = 8 * fontheight; xoff = XOFF; yoff = YOFF; /* start file off with a % */ fprintf(plotfile, "IN;DF;PA;"); fprintf(plotfile, "SI %f,%f;", tocm*jgmult*fontwidth*scale, tocm*jgmult*fontheight*scale); #ifdef notdef if (!screenflag) #endif graph->devdep = TMALLOC(GLdevdep, 1); DEVDEP(graph).lastlinestyle = -1; DEVDEP(graph).lastx = -1; DEVDEP(graph).lasty = -1; DEVDEP(graph).linecount = 0; graph->linestyle = -1; return 0; } int GL_Close(void) { /* in case GL_Close is called as part of an abort, w/o having reached GL_NewViewport */ if (plotfile) { if (DEVDEP(currentgraph).lastlinestyle != -1) { DEVDEP(currentgraph).linecount = 0; } fclose(plotfile); plotfile = NULL; } /* In case of hardcopy command destroy the hardcopy graph * and reset currentgraph to graphid 1, if possible */ if (!screenflag) { DestroyGraph(hcopygraphid); currentgraph = FindGraph(1); } return 0; } int GL_Clear(void) { /* do nothing */ return 0; } int GL_DrawLine(int x1, int y1, int x2, int y2) { /* note: this is not extendible to more than one graph => will have to give NewViewport a writeable graph XXX */ if (DEVDEP(currentgraph).linecount == 0 || x1 != DEVDEP(currentgraph).lastx || y1 != DEVDEP(currentgraph).lasty) { fprintf(plotfile, "PU;PA %d , %d ;", jgmult*(x1 + xoff), jgmult*(y1 + yoff)); } if (x1 != x2 || y1 != y2) { fprintf(plotfile, "PD;PA %d , %d ;", jgmult*(x2 + xoff), jgmult*(y2 + yoff)); DEVDEP(currentgraph).linecount += 1; } DEVDEP(currentgraph).lastx = x2; DEVDEP(currentgraph).lasty = y2; DEVDEP(currentgraph).lastlinestyle = currentgraph->linestyle; return 0; } /* ARGSUSED */ int GL_Arc(int x0, int y0, int r, double theta, double delta_theta) { int x1, y1, angle; x1 = x0 + (int)(r * cos(theta)); y1 = y0 + (int)(r * sin(theta)); angle = (int)(RAD_TO_DEG * delta_theta); fprintf(plotfile, "PU;PA %d , %d;", jgmult*(x1+xoff+XTADJ), jgmult*(y1+yoff+YTADJ)); fprintf(plotfile, "PD;AA %d , %d, %d;", jgmult*(x0+xoff+XTADJ), jgmult*(y0+yoff+YTADJ), angle); DEVDEP(currentgraph).linecount = 0; return 0; } int GL_Text(char *text, int x, int y, int angle) { /* move to (x, y) */ NG_IGNORE(angle); fprintf(plotfile, "PU;PA %d , %d;", jgmult*(x+xoff+XTADJ), jgmult*(y+yoff+YTADJ)); fprintf(plotfile, "LB %s \x03", text); DEVDEP(currentgraph).lastx = -1; DEVDEP(currentgraph).lasty = -1; return 0; } int GL_SetLinestyle(int linestyleid) { /* special case get it when GL_Text restores a -1 linestyle */ if (linestyleid == -1) { currentgraph->linestyle = -1; return 0; } if (linestyleid < 0 || linestyleid > dispdev->numlinestyles) { internalerror("bad linestyleid"); return 0; } if (currentgraph->linestyle != linestyleid) { fprintf(plotfile, "LT %s ;", linestyle[linestyleid]); currentgraph->linestyle = linestyleid; } return 0; } /* ARGSUSED */ int GL_SetColor(int colorid) { fprintf(plotfile, "SP %d;", colorid); return 0; } int GL_Update(void) { fflush(plotfile); return 0; } tmpk8ny_4pz/src/frontend/evaluate.c0000644000175000017500000006413213546075722017546 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Convert a parse tree to a list of data vectors. */ #include "ngspice/ngspice.h" #include #include #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "evaluate.h" #include "ngspice/sim.h" /* To get SV_VOLTAGE definition */ static RETSIGTYPE sig_matherr(void); static struct dvec *apply_func(struct func *func, struct pnode *arg); static struct dvec *ft_ternary(struct pnode *node); static char *mkcname(char what, char *v1, char *v2); /* We are careful here to catch SIGILL and recognise them as math errors. * The only trouble is that the (void) signal handler we installed before will * be lost, but that's no great loss. */ static JMP_BUF matherrbuf; static RETSIGTYPE sig_matherr(void) { fprintf(cp_err, "Error: argument out of range for math function\n"); LONGJMP(matherrbuf, 1); } /* Note that ft_evaluate will return NULL on invalid expressions. */ /* va: NOTE: ft_evaluate returns a new vector for expressions (func, op, ...) and an existing vector (node->pn_value) when node->pn_value != NULL. For garbage collection caller must vec_free() expression-vector. */ struct dvec * ft_evaluate(struct pnode *node) { struct dvec *d = NULL; if (!node) d = NULL; else if (node->pn_value) d = node->pn_value; else if (node->pn_func) d = apply_func(node->pn_func, node->pn_left); else if (node->pn_op) { if (node->pn_op->op_arity == 1) d = node->pn_op->op_func.unary (node->pn_left); else if (node->pn_op->op_arity == 2) { if (node->pn_op->op_num == PT_OP_TERNARY) d = ft_ternary(node); else d = node->pn_op->op_func.binary (node->pn_left, node->pn_right); } } else { fprintf(cp_err, "ft_evaluate: Internal Error: bad node\n"); d = NULL; } if (d == NULL) return NULL; if (node->pn_name && !ft_evdb && d && !d->v_link2) { if (d->v_name) tfree(d->v_name); /* patch by Stefan Jones */ d->v_name = copy(node->pn_name); } if (!d->v_length) { fprintf(cp_err, "Error: no such vector %s\n", d->v_name); return (NULL); } else { return (d); } } static struct dvec * ft_ternary(struct pnode *node) { struct dvec *v, *d, *cond; struct pnode *arg; int c; if (!node->pn_right->pn_op || node->pn_right->pn_op->op_func.binary != op_comma) { fprintf(cp_err, "Error: ft_ternary(), daemons ...\n"); return NULL; } cond = ft_evaluate(node->pn_left); if (cond->v_link2) { fprintf(cp_err, "Error: ft_ternary(), whats that ?\n"); return NULL; } if (cond->v_numdims != 1) { fprintf(cp_err, "Error: ft_ternary(), condition must be scalar, but numdims=%d\n", cond->v_numdims); return NULL; } if (cond->v_length != 1) { fprintf(cp_err, "Error: ft_ternary(), condition must be scalar, but length=%d\n", cond->v_length); return NULL; } c = isreal(cond) ? (cond->v_realdata[0] != 0.0) : ((realpart(cond->v_compdata[0]) != 0.0) || (imagpart(cond->v_compdata[0]) != 0.0)); arg = c ? node->pn_right->pn_left : node->pn_right->pn_right; v = ft_evaluate(arg); d = vec_copy(v); vec_new(d); if (!arg->pn_value && v) vec_free(v); if (!node->pn_left->pn_value && cond) vec_free(cond); return d; } /* Operate on two vectors, and return a third with the data, length, and flags * fields filled in. Add it to the current plot and get rid of the two args. */ static void * doop_funcall( void * (*func) (void *data1, void *data2, short int datatype1, short int datatype2, int length), void *data1, void *data2, short int datatype1, short int datatype2, int length) { void *data; /* Some of the math routines generate SIGILL if the argument is * out of range. Catch this here. */ if (SETJMP(matherrbuf, 1)) { return (NULL); } (void) signal(SIGILL, (SIGNAL_FUNCTION) sig_matherr); data = func(data1, data2, datatype1, datatype2, length); /* Back to normal */ (void) signal(SIGILL, SIG_DFL); return data; } static struct dvec * doop(char what, void * (*func) (void *data1, void *data2, short int datatype1, short int datatype2, int length), struct pnode *arg1, struct pnode *arg2) { struct dvec *v1, *v2, *res; ngcomplex_t *c1 = NULL, *c2 = NULL, lc; double *d1 = NULL, *d2 = NULL, ld; int length = 0, i; void *data; bool free1 = FALSE, free2 = FALSE, relflag = FALSE; v1 = ft_evaluate(arg1); v2 = ft_evaluate(arg2); if (!v1 || !v2) return (NULL); /* Now the question is, what do we do when one or both of these * has more than one vector? This is definitely not a good * thing. For the time being don't do anything. */ if (v1->v_link2 || v2->v_link2) { fprintf(cp_err, "Warning: no operations on wildcards yet.\n"); if (v1->v_link2 && v2->v_link2) fprintf(cp_err, "\t(You couldn't do that one anyway)\n"); return (NULL); } /* How do we handle operations on multi-dimensional vectors? * For now, we only allow operations between one-D vectors, * equivalently shaped multi-D vectors, or a multi-D vector and * a one-D vector. It's not at all clear what to do in the other cases. * So only check shape requirement if it is an operation between two multi-D * arrays. */ if ((v1->v_numdims > 1) && (v2->v_numdims > 1)) { if (v1->v_numdims != v2->v_numdims) { fprintf(cp_err, "Warning: operands %s and %s have incompatible shapes.\n", v1->v_name, v2->v_name); return (NULL); } for (i = 1; i < v1->v_numdims; i++) if ((v1->v_dims[i] != v2->v_dims[i])) { fprintf(cp_err, "Warning: operands %s and %s have incompatible shapes.\n", v1->v_name, v2->v_name); return (NULL); } } /* This is a bad way to do this. */ switch (what) { case '=': case '>': case '<': case 'G': case 'L': case 'N': case '&': case '|': case '~': relflag = TRUE; } /* Type checking is done later */ /* Make sure we have data of the same length. */ length = ((v1->v_length > v2->v_length) ? v1->v_length : v2->v_length); if (v1->v_length < length) { free1 = TRUE; if (isreal(v1)) { ld = 0.0; d1 = TMALLOC(double, length); for (i = 0; i < v1->v_length; i++) d1[i] = v1->v_realdata[i]; if (i > 0) ld = v1->v_realdata[i - 1]; for (; i < length; i++) d1[i] = ld; } else { realpart(lc) = 0.0; imagpart(lc) = 0.0; c1 = TMALLOC(ngcomplex_t, length); for (i = 0; i < v1->v_length; i++) c1[i] = v1->v_compdata[i]; if (i > 0) lc = v1->v_compdata[i - 1]; for (; i < length; i++) c1[i] = lc; } } else { if (isreal(v1)) d1 = v1->v_realdata; else c1 = v1->v_compdata; } if (v2->v_length < length) { free2 = TRUE; if (isreal(v2)) { ld = 0.0; d2 = TMALLOC(double, length); for (i = 0; i < v2->v_length; i++) d2[i] = v2->v_realdata[i]; if (i > 0) ld = v2->v_realdata[i - 1]; for (; i < length; i++) d2[i] = ld; } else { realpart(lc) = 0.0; imagpart(lc) = 0.0; c2 = TMALLOC(ngcomplex_t, length); for (i = 0; i < v2->v_length; i++) c2[i] = v2->v_compdata[i]; if (i > 0) lc = v2->v_compdata[i - 1]; for (; i < length; i++) c2[i] = lc; } } else { if (isreal(v2)) d2 = v2->v_realdata; else c2 = v2->v_compdata; } /* Now pass the vectors to the appropriate function. */ data = doop_funcall (func, isreal(v1) ? (void *) d1 : (void *) c1, isreal(v2) ? (void *) d2 : (void *) c2, isreal(v1) ? VF_REAL : VF_COMPLEX, isreal(v2) ? VF_REAL : VF_COMPLEX, length); if (!data) return (NULL); /* Make up the new vector. */ if (relflag || (isreal(v1) && isreal(v2) && (func != cx_comma))) { res = dvec_alloc(mkcname(what, v1->v_name, v2->v_name), SV_NOTYPE, (v1->v_flags | v2->v_flags | VF_REAL) & ~VF_COMPLEX, length, data); } else { res = dvec_alloc(mkcname(what, v1->v_name, v2->v_name), SV_NOTYPE, (v1->v_flags | v2->v_flags | VF_COMPLEX) & ~VF_REAL, length, data); } /* This is a non-obvious thing */ if (v1->v_scale != v2->v_scale) { fprintf(cp_err, "Warning: scales of %s and %s are different.\n", v1->v_name, v2->v_name); res->v_scale = NULL; } else { res->v_scale = v1->v_scale; } /* Copy a few useful things */ res->v_defcolor = v1->v_defcolor; res->v_gridtype = v1->v_gridtype; res->v_plottype = v1->v_plottype; /* Copy dimensions. */ if (v1->v_numdims > v2->v_numdims) { res->v_numdims = v1->v_numdims; for (i = 0; i < v1->v_numdims; i++) res->v_dims[i] = v1->v_dims[i]; } else { res->v_numdims = v2->v_numdims; for (i = 0; i < v2->v_numdims; i++) res->v_dims[i] = v2->v_dims[i]; } /* ** Type checking for multiplication and division of vectors ** * Determines the units resulting from the operation. * A.Roldán */ switch (what) { case '*': /* Multiplication of two vectors */ switch (v1->v_type) { case SV_VOLTAGE: switch (v2->v_type) { case SV_VOLTAGE: res->v_type = SV_VOLTAGE; break; case SV_CURRENT: res->v_type = SV_POWER; break; default: break; } break; case SV_CURRENT: switch (v2->v_type) { case SV_VOLTAGE: res->v_type = SV_POWER; break; case SV_CURRENT: res->v_type = SV_CURRENT; break; default: break; } break; default: break; } break; case '/': /* division of two vectors */ switch (v1->v_type) { case SV_VOLTAGE: switch (v2->v_type) { case SV_VOLTAGE: res->v_type = SV_NOTYPE; break; case SV_CURRENT: res->v_type = SV_IMPEDANCE; break; default: break; } break; case SV_CURRENT: switch (v2->v_type) { case SV_VOLTAGE: res->v_type = SV_ADMITTANCE; break; case SV_CURRENT: res->v_type = SV_NOTYPE; break; default: break; } break; default: break; } default: break; } vec_new(res); /* Free the temporary data areas we used, if we allocated any. */ if (free1) { if (isreal(v1)) tfree(d1); else tfree(c1); } if (free2) { if (isreal(v2)) tfree(d2); else tfree(c2); } /* va: garbage collection */ if (arg1->pn_value == NULL && v1 != NULL) vec_free(v1); if (arg2->pn_value == NULL && v2 != NULL) vec_free(v2); return (res); } /* The binary operations. */ struct dvec * op_plus(struct pnode *arg1, struct pnode *arg2) { return (doop('+', cx_plus, arg1, arg2)); } struct dvec * op_minus(struct pnode *arg1, struct pnode *arg2) { return (doop('-', cx_minus, arg1, arg2)); } struct dvec * op_comma(struct pnode *arg1, struct pnode *arg2) { return (doop(',', cx_comma, arg1, arg2)); } struct dvec * op_times(struct pnode *arg1, struct pnode *arg2) { return (doop('*', cx_times, arg1, arg2)); } struct dvec * op_mod(struct pnode *arg1, struct pnode *arg2) { return (doop('%', cx_mod, arg1, arg2)); } struct dvec * op_divide(struct pnode *arg1, struct pnode *arg2) { return (doop('/', cx_divide, arg1, arg2)); } struct dvec * op_power(struct pnode *arg1, struct pnode *arg2) { return (doop('^', cx_power, arg1, arg2)); } struct dvec * op_eq(struct pnode *arg1, struct pnode *arg2) { return (doop('=', cx_eq, arg1, arg2)); } struct dvec * op_gt(struct pnode *arg1, struct pnode *arg2) { return (doop('>', cx_gt, arg1, arg2)); } struct dvec * op_lt(struct pnode *arg1, struct pnode *arg2) { return (doop('<', cx_lt, arg1, arg2)); } struct dvec * op_ge(struct pnode *arg1, struct pnode *arg2) { return (doop('G', cx_ge, arg1, arg2)); } struct dvec * op_le(struct pnode *arg1, struct pnode *arg2) { return (doop('L', cx_le, arg1, arg2)); } struct dvec * op_ne(struct pnode *arg1, struct pnode *arg2) { return (doop('N', cx_ne, arg1, arg2)); } struct dvec * op_and(struct pnode *arg1, struct pnode *arg2) { return (doop('&', cx_and, arg1, arg2)); } struct dvec * op_or(struct pnode *arg1, struct pnode *arg2) { return (doop('|', cx_or, arg1, arg2)); } /* This is an odd operation. The first argument is the name of a vector, and * the second is a range in the scale, so that v(1)[[10, 20]] gives all the * values of v(1) for which the TIME value is between 10 and 20. If there is * one argument it picks out the values which have that scale value. * NOTE that we totally ignore multi-dimensionality here -- the result is * a 1-dim vector. */ struct dvec * op_range(struct pnode *arg1, struct pnode *arg2) { struct dvec *v, *ind, *res, *scale; double up, low, td; int len, i, j; bool rev = FALSE; v = ft_evaluate(arg1); ind = ft_evaluate(arg2); if (!v || !ind) return (NULL); scale = v->v_scale; if (!scale) scale = v->v_plot->pl_scale; if (!scale) { fprintf(cp_err, "Error: no scale for vector %s\n", v->v_name); return (NULL); } if (ind->v_length != 1) { fprintf(cp_err, "Error: strange range specification\n"); return (NULL); } if (isreal(ind)) { up = low = *ind->v_realdata; } else { up = imagpart(ind->v_compdata[0]); low = realpart(ind->v_compdata[0]); } if (up < low) { SWAP(double, up, low); rev = TRUE; } for (i = len = 0; i < scale->v_length; i++) { td = isreal(scale) ? scale->v_realdata[i] : realpart(scale->v_compdata[i]); if ((td <= up) && (td >= low)) len++; } res = dvec_alloc(mkcname('R', v->v_name, ind->v_name), v->v_type, v->v_flags, len, NULL); res->v_gridtype = v->v_gridtype; res->v_plottype = v->v_plottype; res->v_defcolor = v->v_defcolor; res->v_scale = /* nscale; */ scale; /* Dave says get rid of this res->v_numdims = v->v_numdims; for (i = 0; i < v->v_numdims; i++) res->v_dims[i] = v->v_dims[i]; */ res->v_numdims = 1; res->v_dims[0] = len; /* Toss in the data */ j = 0; for (i = (rev ? v->v_length - 1 : 0); i != (rev ? -1 : v->v_length); rev ? i-- : i++) { td = isreal(scale) ? scale->v_realdata[i] : realpart(scale->v_compdata[i]); if ((td <= up) && (td >= low)) { if (isreal(res)) { res->v_realdata[j] = v->v_realdata[i]; } else { res->v_compdata[j] = v->v_compdata[i]; } j++; } } if (j != len) fprintf(cp_err, "Error: something funny..\n"); /* Note that we DON'T do a vec_new, since we want this vector to be * invisible to everybody except the result of this operation. * Doing this will cause a lot of core leaks, though. XXX */ vec_new(res); /* va: garbage collection */ if (arg1->pn_value == NULL && v != NULL) vec_free(v); if (arg2->pn_value == NULL && ind != NULL) vec_free(ind); return (res); } /* This is another operation we do specially -- if the argument is a vector of * dimension n, n > 0, the result will be either a vector of dimension n - 1, * or a vector of dimension n with only a certain range of vectors present. */ struct dvec * op_ind(struct pnode *arg1, struct pnode *arg2) { struct dvec *v, *ind, *res; int length, newdim, i, j, k, up, down; int majsize, blocksize; bool rev = FALSE; v = ft_evaluate(arg1); ind = ft_evaluate(arg2); if (!v || !ind) return (NULL); /* First let's check to make sure that the vector is consistent */ if (v->v_numdims > 1) { for (i = 0, j = 1; i < v->v_numdims; i++) j *= v->v_dims[i]; if (v->v_length != j) { fprintf(cp_err, "op_ind: Internal Error: len %d should be %d\n", v->v_length, j); return (NULL); } } else { /* Just in case we were sloppy */ v->v_numdims = 1; v->v_dims[0] = v->v_length; if (v->v_length <= 1) { fprintf(cp_err, "Error: nostrchring on a scalar (%s)\n", v->v_name); return (NULL); } } if (ind->v_length != 1) { fprintf(cp_err, "Error:strchr %s is not of length 1\n", ind->v_name); return (NULL); } majsize = v->v_dims[0]; blocksize = v->v_length / majsize; /* Now figure out if we should put the dim down by one. Because of the * way we parse the strchr, we figure that if the value is complex * (e.g, "[1,2]"), the guy meant a range. This is sort of bad though. */ if (isreal(ind)) { newdim = v->v_numdims - 1; down = up = (int)floor(ind->v_realdata[0] + 0.5); } else { newdim = v->v_numdims; down = (int)floor(realpart(ind->v_compdata[0]) + 0.5); up = (int)floor(imagpart(ind->v_compdata[0]) + 0.5); } if (up < down) { SWAP(int, up, down); rev = TRUE; } if (up < 0) { fprintf(cp_err, "Warning: upper limit %d should be 0\n", up); up = 0; } if (up >= majsize) { fprintf(cp_err, "Warning: upper limit %d should be %d\n", up, majsize - 1); up = majsize - 1; } if (down < 0) { fprintf(cp_err, "Warning: lower limit %d should be 0\n", down); down = 0; } if (down >= majsize) { fprintf(cp_err, "Warning: lower limit %d should be %d\n", down, majsize - 1); down = majsize - 1; } if (up == down) length = blocksize; else length = blocksize * (up - down + 1); /* Make up the new vector. */ res = dvec_alloc(mkcname('[', v->v_name, ind->v_name), v->v_type, v->v_flags, length, NULL); res->v_defcolor = v->v_defcolor; res->v_gridtype = v->v_gridtype; res->v_plottype = v->v_plottype; res->v_numdims = newdim; if (up != down) { for (i = 0; i < newdim; i++) res->v_dims[i] = v->v_dims[i]; res->v_dims[0] = up - down + 1; } else { for (i = 0; i < newdim; i++) res->v_dims[i] = v->v_dims[i + 1]; } /* And toss in the new data */ for (j = 0; j < up - down + 1; j++) { if (rev) k = (up - down) - j; else k = j; for (i = 0; i < blocksize; i++) if (isreal(res)) { res->v_realdata[k * blocksize + i] = v->v_realdata[(down + j) * blocksize + i]; } else { res->v_compdata[k * blocksize + i] = v->v_compdata[(down + j) * blocksize + i]; } } /* This is a problem -- the old scale will be no good. I guess we * should make an altered copy of the old scale also. */ /* Even though the old scale is no good and we should somehow decide * on a new scale, using the vector as its own scale is not the * solution. */ /* * res->v_scale = res; */ vec_new(res); /* va: garbage collection */ if (arg1->pn_value == NULL && v != NULL) vec_free(v); if (arg2->pn_value == NULL && ind != NULL) vec_free(ind); return (res); } /* Apply a function to an argument. Complex functions are called as follows: * cx_something(data, type, length, &newlength, &newtype), * and returns a void * that is cast to complex or double. */ static void * apply_func_funcall(struct func *func, struct dvec *v, int *newlength, short int *newtype) { void *data; /* Some of the math routines generate SIGILL if the argument is * out of range. Catch this here. */ if (SETJMP(matherrbuf, 1)) { (void) signal(SIGILL, SIG_DFL); return (NULL); } (void) signal(SIGILL, (SIGNAL_FUNCTION) sig_matherr); /* Modified for passing necessary parameters to the derive function - A.Roldan */ if (eq(func->fu_name, "interpolate") || eq(func->fu_name, "deriv") || eq(func->fu_name, "group_delay") || eq(func->fu_name, "fft") || eq(func->fu_name, "ifft")) /* Ack */ { void * (*f) (void *data, short int type, int length, int *newlength, short int *newtype, struct plot *, struct plot *, int) = (void * (*) (void *, short int, int, int *, short int *, struct plot *, struct plot *, int)) func->fu_func; data = f (isreal(v) ? (void *) v->v_realdata : (void *) v->v_compdata, (short) (isreal(v) ? VF_REAL : VF_COMPLEX), v->v_length, newlength, newtype, v->v_plot, plot_cur, v->v_dims[0]); } else { data = func->fu_func (isreal(v) ? (void *) v->v_realdata : (void *) v->v_compdata, (short) (isreal(v) ? VF_REAL : VF_COMPLEX), v->v_length, newlength, newtype); } /* Back to normal */ (void) signal(SIGILL, SIG_DFL); return data; } static struct dvec * apply_func(struct func *func, struct pnode *arg) { struct dvec *v, *t, *newv = NULL, *end = NULL; int len, i; short type; void *data; /* Special case. This is not good -- happens when vm(), etc are used * and it gets caught as a user-definable function. Usually v() * is caught in the parser. */ if (!func->fu_func) { if (!arg->pn_value /* || (arg->pn_value->v_length != 1) XXX */) { fprintf(cp_err, "Error: bad v() syntax\n"); return (NULL); } /* try not using the current plot, but the plot set in the arg... vector */ if(arg->pn_value->v_plot && arg->pn_value->v_plot->pl_typename) t = vec_fromplot(arg->pn_value->v_name, get_plot(arg->pn_value->v_plot->pl_typename)); else t = vec_fromplot(arg->pn_value->v_name, plot_cur); if (!t) { fprintf(cp_err, "Error: no such vector %s\n", arg->pn_value->v_name); return (NULL); } t = vec_copy(t); vec_new(t); return (t); } v = ft_evaluate(arg); if (v == NULL) return (NULL); for (; v; v = v->v_link2) { char *name; data = apply_func_funcall(func, v, &len, &type); if (!data) return (NULL); #ifdef FTEDEBUG if (ft_evdb) fprintf(cp_err, "apply_func: func %s to %s len %d, type %d\n", func->fu_name, v->v_name, len, type); #endif if (eq(func->fu_name, "minus")) name = mkcname('a', func->fu_name, v->v_name); else if (eq(func->fu_name, "not")) name = mkcname('c', func->fu_name, v->v_name); else name = mkcname('b', v->v_name, NULL); t = dvec_alloc(name, v->v_type, /* This is strange too. */ (v->v_flags & ~VF_COMPLEX & ~VF_REAL & ~VF_PERMANENT & ~VF_MINGIVEN & ~VF_MAXGIVEN) | type, len, data); t->v_scale = v->v_scale; /* Copy a few useful things */ t->v_defcolor = v->v_defcolor; t->v_gridtype = v->v_gridtype; t->v_plottype = v->v_plottype; t->v_numdims = v->v_numdims; for (i = 0; i < t->v_numdims; i++) t->v_dims[i] = v->v_dims[i]; vec_new(t); if (end) end->v_link2 = t; else newv = t; end = t; } /* va: garbage collection */ if (arg->pn_value == NULL && v != NULL) vec_free(v); return (newv); } /* The unary minus operation. */ struct dvec * op_uminus(struct pnode *arg) { return (apply_func(&func_uminus, arg)); } struct dvec * op_not(struct pnode *arg) { return (apply_func(&func_not, arg)); } /* Create a reasonable name for the result of a function application, etc. * The what values 'a' and 'b' mean "make a function name" and "make a * unary minus", respectively. */ static char * mkcname(char what, char *v1, char *v2) { switch (what) { case 'a': return tprintf("%s(%s)", v1, v2); case 'b': return tprintf("-(%s)", v1); case 'c': return tprintf("~(%s)", v1); case '[': return tprintf("%s[%s]", v1, v2); case 'R': return tprintf("%s[[%s]]", v1, v2); default: return tprintf("(%s)%c(%s)", v1, what, v2); } } tmpk8ny_4pz/src/frontend/parser/0000755000175000017500000000000013546075722017062 5ustar carstencarstentmpk8ny_4pz/src/frontend/parser/backq.h0000644000175000017500000000020413546075722020310 0ustar carstencarsten/************* * Header file for backq.c * 1999 E. Rouat ************/ #ifndef ngspice_BACKQ_H #define ngspice_BACKQ_H #endif tmpk8ny_4pz/src/frontend/parser/Makefile.am0000644000175000017500000000071513546075722021121 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libparser.la libparser_la_SOURCES = \ backq.c \ backq.h \ complete.c \ complete.h \ cshpar.c \ cshpar.h \ glob.c \ glob.h \ input.c \ input.h \ lexical.c \ lexical.h \ numparse.c \ numparse.h \ std.c \ unixcom.c \ unixcom.h AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/frontend/parser/lexical.c0000644000175000017500000002475513546075722020664 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Initial lexer. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_PWD_H #include #include #endif /* MW. Linux has TIOCSTI, so we include all headers here */ #if !defined(__MINGW32__) && !defined(_MSC_VER) #include #endif #ifdef HAVE_SGTTY_H #include #include #else #ifdef HAVE_TERMIO_H #include #include #else #ifdef HAVE_TERMIOS_H #include #include #endif #endif #endif #include "ngspice/fteinput.h" #include "lexical.h" static void prompt(void); extern bool cp_echo; /* For CDHW patches: defined in variable.c */ FILE *cp_inp_cur = NULL; int cp_event = 1; bool cp_interactive = TRUE; bool cp_bqflag = FALSE; char *cp_promptstring = NULL; char *cp_altprompt = NULL; static int numeofs = 0; #define ESCAPE '\033' /* Return a list of words, with backslash quoting and '' quoting done. * Strings enclosed in "" or `` are made single words and returned, * but with the "" or `` still present. For the \ and '' cases, the * 8th bit is turned on (as in csh) to prevent them from being recognized, * and stripped off once all processing is done. We also have to deal with * command, filename, and keyword completion here. * If string is non-NULL, then use it instead of the fp. Escape and EOF * have no business being in the string. */ struct cp_lexer_buf { int i, sz; char *s; }; static inline void push(struct cp_lexer_buf *buf, int c) { if (buf->sz <= buf->i) { buf->sz += MAX(64, buf->sz); buf->s = TREALLOC(char, buf->s, buf->sz); } buf->s[buf->i++] = (char) c; } #define append(word) \ wl_append_word(&wlist, &wlist_tail, word) #define newword \ do { \ append(copy_substring(buf.s, buf.s + buf.i)); \ buf.i = 0; \ } while(0) /* CDHW Debug function */ /* CDHW used to perform function of set echo */ static void pwlist_echo(wordlist *wlist, char *name) { wordlist *wl; if (!cp_echo || cp_debug) return; fprintf(cp_err, "%s ", name); for (wl = wlist; wl; wl = wl->wl_next) fprintf(cp_err, "%s ", wl->wl_word); fprintf(cp_err, "\n"); } static int cp_readchar(char **string, FILE *fptr) { if (*string == NULL) return input(fptr); if (**string) return *(*string)++; else return '\n'; } /* CDHW */ wordlist * cp_lexer(char *string) { int c, d; int i; wordlist *wlist, *wlist_tail; struct cp_lexer_buf buf, linebuf; int paren; if (!cp_inp_cur) cp_inp_cur = cp_in; /* prompt for string if none is passed */ if (!string && cp_interactive) { cp_ccon(TRUE); prompt(); } wlist = wlist_tail = NULL; buf.sz = 0; buf.s = NULL; linebuf.sz = 0; linebuf.s = NULL; nloop: if (wlist) wl_free(wlist); wlist = wlist_tail = NULL; buf.i = 0; linebuf.i = 0; paren = 0; for (;;) { /* if string, read from string, else read from stdin */ c = cp_readchar(&string, cp_inp_cur); gotchar: if (string && (c == ESCAPE)) continue; if ((c != EOF) && (c != ESCAPE)) push(&linebuf, c); if (c != EOF) numeofs = 0; if (c != EOF) /* Don't need to do this really. */ c = strip(c); /* if '\' or '^', add following character to linebuf */ if ((c == '\\' && DIR_TERM != '\\') || (c == '\026') /* ^V */ ) { c = quote(cp_readchar(&string, cp_inp_cur)); push(&linebuf, strip(c)); } /* if reading from fcn backeval() for backquote subst. */ if ((c == '\n') && cp_bqflag) c = ' '; if ((c == EOF) && cp_bqflag) c = '\n'; /* '#' or '*' as the first character in a line, starts a comment line, drop it */ if ((c == '#' || c == '*') && (linebuf.i == 1)) { if (string) { wl_free(wlist); tfree(buf.s); tfree(linebuf.s); return NULL; } while (((c = cp_readchar(&string, cp_inp_cur)) != '\n') && (c != EOF)) ; goto nloop; } /* check if we are inside of parens during reading: if we are and ',' or ';' occur: no new line */ if ((c == '(') || (c == '[')) paren++; else if ((c == ')') || (c == ']')) paren--; /* What else has to be decided, depending on c ? */ switch (c) { /* new word to wordlist, when space or tab follow */ case ' ': case '\t': if (buf.i > 0) newword; break; /* new word to wordlist, when \n follows */ case '\n': if (buf.i) newword; if (!wlist_tail) append(NULL); goto done; /* if ' read until next ' is hit, will form a new word, but without the ' */ case '\'': while ((c = cp_readchar(&string, cp_inp_cur)) != '\'') { if ((c == '\n') || (c == EOF) || (c == ESCAPE)) goto gotchar; push(&buf, quote(c)); push(&linebuf, c); } push(&linebuf, '\''); break; /* if " or `, read until next " or ` is hit, will form a new word, including the quotes. In case of \, the next character gets the eights bit set. */ case '"': case '`': d = c; push(&buf, d); while ((c = cp_readchar(&string, cp_inp_cur)) != d) { if ((c == '\n') || (c == EOF) || (c == ESCAPE)) goto gotchar; if (c == '\\') { push(&linebuf, c); c = cp_readchar(&string, cp_inp_cur); push(&buf, quote(c)); push(&linebuf, c); } else { push(&buf, c); push(&linebuf, c); } } push(&buf, d); push(&linebuf, d); break; case '\004': case EOF: /* upon command completion, not used actually */ if (cp_interactive && !cp_nocc && !string) { if (linebuf.i == 0) { if (cp_ignoreeof && (numeofs++ < 23)) { fputs("Use \"quit\" to quit.\n", stdout); } else { fputs("quit\n", stdout); cp_doquit(); } append(NULL); goto done; } push(&buf, '\0'); push(&linebuf, '\0'); // cp_ccom doesn't mess wlist, read only access to wlist->wl_word cp_ccom(wlist, buf.s, FALSE); (void) fputc('\r', cp_out); prompt(); for (i = 0; linebuf.s[i]; i++) #ifdef TIOCSTI (void) ioctl(fileno(cp_out), TIOCSTI, linebuf.s + i); #else fputc(linebuf.s[i], cp_out); /* But you can't edit */ #endif goto nloop; } /* EOF during a source */ if (cp_interactive) { fputs("quit\n", stdout); cp_doquit(); append(NULL); goto done; } wl_free(wlist); tfree(buf.s); tfree(linebuf.s); return NULL; case ESCAPE: /* upon command completion, not used actually */ if (cp_interactive && !cp_nocc) { push(&buf, '\0'); push(&linebuf, '\0'); fputs("\b\b \b\b\r", cp_out); prompt(); for (i = 0; linebuf.s[i]; i++) #ifdef TIOCSTI (void) ioctl(fileno(cp_out), TIOCSTI, linebuf.s + i); #else fputc(linebuf.s[i], cp_out); /* But you can't edit */ #endif // cp_ccom doesn't mess wlist, read only access to wlist->wl_word cp_ccom(wlist, buf.s, TRUE); goto nloop; } goto ldefault; case ',': if ((paren < 1) && (buf.i > 0)) { newword; break; } goto ldefault; case ';': /* CDHW semicolon inside parentheses is part of expression */ if (paren > 0) { push(&buf, c); break; } goto ldefault; case '&': /* va: $&name is one word */ if ((buf.i >= 1) && (buf.s[buf.i - 1] == '$')) { push(&buf, c); break; } goto ldefault; case '<': case '>': /* va: <=, >= are unbreakable words */ if (string) if ((buf.i == 0) && (*string == '=')) { push(&buf, c); break; } goto ldefault; default: /* We have to remember the special case $< * here */ ldefault: if ((cp_chars[c] & CPC_BRL) && (buf.i > 0)) if ((c != '<') || (buf.s[buf.i - 1] != '$')) newword; push(&buf, c); if (cp_chars[c] & CPC_BRR) if ((c != '<') || (buf.i < 2) || (buf.s[buf.i - 2] != '$')) newword; } } done: if (wlist->wl_word) pwlist_echo(wlist, "Command>"); tfree(buf.s); tfree(linebuf.s); return wlist; } static void prompt(void) { char *s; if (cp_interactive == FALSE) return; if (cp_altprompt) s = cp_altprompt; else if (cp_promptstring) s = cp_promptstring; else s = "-> "; while (*s) { switch (strip(*s)) { case '!': fprintf(cp_out, "%d", cp_event); break; case '\\': if (s[1]) (void) putc(strip(*++s), cp_out); default: (void) putc(strip(*s), cp_out); } s++; } (void) fflush(cp_out); } tmpk8ny_4pz/src/frontend/parser/numparse.h0000644000175000017500000000021513546075722021063 0ustar carstencarsten/************* * Header file for numparse.c * 1999 E. Rouat ************/ #ifndef ngspice_NUMPARSE_H #define ngspice_NUMPARSE_H #endif tmpk8ny_4pz/src/frontend/parser/input.h0000644000175000017500000000023313546075722020370 0ustar carstencarsten/************* * Header file for input.c * 1999 E. Rouat ************/ #ifndef ngspice_INPUT_H #define ngspice_INPUT_H int input(FILE *fp); #endif tmpk8ny_4pz/src/frontend/parser/complete.h0000644000175000017500000000175513546075722021053 0ustar carstencarsten/************* * Header file for complete.c * 1999 E. Rouat ************/ #ifndef ngspice_COMPLETE_H #define ngspice_COMPLETE_H /* The data structure for the commands is as follows: every node has a pointer * to its leftmost child, where the children of a node are those of which * the node is a prefix. This means that for a word like "ducks", there * must be nodes "d", "du", "duc", etc (which are all marked "invalid", * of course). This data structure is called a "trie". */ #define NARGS 4 struct ccom { char *cc_name; /* Command or keyword name. */ long cc_kwords[NARGS]; /* What this command takes. */ char cc_invalid; /* This node has been deleted. */ struct ccom *cc_child; /* Left-most child. */ struct ccom *cc_sibling; /* Right (alph. greater) sibling. */ struct ccom *cc_ysibling; /* Left (alph. less) sibling. */ struct ccom *cc_parent; /* Parent node. */ }; void throwaway(struct ccom *dbase); #endif tmpk8ny_4pz/src/frontend/parser/lexical.h0000644000175000017500000000024113546075722020651 0ustar carstencarsten/************* * Header file for lexical.c * 1999 E. Rouat ************/ #ifndef ngspice_LEXICAL_H #define ngspice_LEXICAL_H int input(FILE *fp); #endif tmpk8ny_4pz/src/frontend/parser/glob.h0000644000175000017500000000020113546075722020147 0ustar carstencarsten/************* * Header file for glob.c * 1999 E. Rouat ************/ #ifndef ngspice_GLOB_H #define ngspice_GLOB_H #endif tmpk8ny_4pz/src/frontend/parser/ChangeLog0000644000175000017500000000743113546075722020641 0ustar carstencarsten2002-01-03 Paolo Nenzi * complete.c: Double patch applied, code for Windows support (Holger Vogt) and rework of netBSD support (AMAKAWA Shuhei). * input.c, lexical.c: Windows support (Holger Vogt patch). 2001-12-14 Paolo Nenzi * lexical.c, complete.c, complete.h: Patched the code with the one contributed by Charles Williams. The patches addresses some memory leaks. 2000-07-18 Arno W. Peters * numparse.c: Updates of header file includes. Some formatting changes. * wlist.c: Moved this file to src/misc/wlist.c * Makefile.am: Removed wlist.c 2000-03-11 Paolo Nenzi * numparse.c: as wrote in Chris Inbody patch: In numparse.c line 17 changed the arg type of "num" to double. This (so far :) seems to have had no adverse effect. 2000-03-11 Paolo Nenzi * history.c: applied Chris Inbody patch. He wrote: I had some trouble running ng-spice in batch mode on a fairly repetitive job (probably 10 - 20 commands repeated 256 times in a single session :), it was giving me "mangled history" errors and then seg faulting. [...] In history.c line 425, added an exit(0) call to the else condition to prevent seg fault upon generation of the history list error. On line 25, changed cp_maxhistlength to 10000 vs 1000. The value of 10000 was enough to keep my task from crashing but there may be a better way to do this,.. I didn't try an arbitrarily high number because I'm not sure what effect it would have on memory usage or progam size or speed. Maybe that's the best answer, just bump the value to 1e6 or something that no one would ever approach. 1999-09-07 Arno * lexical.c: read() requires #include of unistd.h. * modify.c: removed warning about char subscript for array. * unixcom.h: removed prototypes for static tryexec(), hash(). * var2.c: added default case to remove warning. 1999-09-04 Emmanuel Rouat * *.c: added header files for .c files 1999-08-28 Emmanuel Rouat * Removed all #includes of misc.h and util.h (now in spice.h) 1999-08-27 Paolo Nenzi * Removed #include "suffix.h", replaced GENERIC with void and ansified the code with protoize. 1999-08-08 Emmanuel Rouat * Removed HAS_DOSDIRS and HAS_POW10 code in directory * Makefile.am (libcp_a_SOURCES): removed spawn.c (vms only) 1999-08-06 Emmanuel Rouat * unixcom.c (cp_unixcom): * cshpar.c: removed test on HAS_SYSTEM (always true on Unix?) * backq.c (backeval): changed HAS_POPEN in HAVE_POPEN * cshpar.c (fileexists): changed HAS_ACCESS in HAVE_ACCESS (com_chdir): removed test on HAS_CHDIR (always true on Unix) (com_shell): removed test on HAS_UNIX_SIGS (always true on Unix) * unixcom.c (cp_unixcom): changed HAS_INTSYSWAIT in HAVE_SYS_WAIT_H 1999-08-05 Emmanuel Rouat * cshpar.c (com_chdir): removed HAS_GETENV tests. * var2.c (vareval): removed test on HAS_GETPID * unixcom.c: changed HAS_GETCWD in HAVE_GETCWD and HAS_GETWD into HAVE_GETWD * lexical.c, gloc.c, cshpar.c: changed HAS_GETPW in HAVE_PWD_H (com_chdir): changed HAS_GETCWD in HAVE_GETCWD (and #included unistd.h) * std.c: changed HAS_QSORT in HAVE_QSORT 1999-08-04 Emmanuel Rouat * cshpar.c: changed HAS_WAIT2(??) into HAVE_SYS_WAIT_H 1999-08-03 Emmanuel Rouat * output.c: changed HAS_TERMCAP in HAVE_TERMCAP * unixcom.c: changed HAS_VFORK in HAVE_VORK_H * unixcom.c, complete.c, glob.c: HAVE_SYS_DIR_H and HAVE_DIRENT_H (instead of HAS_BSDDIRS and HAS_SYSVDIRS) * cshpar.c (com_shell): changed HAS_VFORK in HAVE_VORK_H tmpk8ny_4pz/src/frontend/parser/input.c0000644000175000017500000000221513546075722020365 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jeffrey M. Hsu **********/ /* * Stand-alone input routine. */ #include "ngspice/ngspice.h" #include #include "ngspice/fteinput.h" #include "input.h" #include "ngspice/cpextern.h" #include "../display.h" /* A special 'getc' so that we can deal with ^D properly. There is no way for * stdio to know if we have typed a ^D after some other characters, so * don't use buffering at all */ int inchar(FILE *fp) { #if !(defined(HAS_WINGUI) || defined(_MSC_VER) || defined(__MINGW32__)) if (cp_interactive && !cp_nocc) { char c; ssize_t i; do i = read(fileno(fp), &c, 1); while (i == -1 && errno == EINTR); if (i == 0 || c == '\004') return EOF; if (i == -1) { perror("read"); return EOF; } return (int) c; } #endif return getc(fp); } int input(FILE *fp) { REQUEST request; RESPONSE response; request.option = char_option; request.fp = fp; Input(&request, &response); return (inchar(fp)); } tmpk8ny_4pz/src/frontend/parser/glob.c0000644000175000017500000001175213546075722020157 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Expand global characters. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "glob.h" #ifdef HAVE_SYS_DIR_H #include #include #else #ifdef HAVE_DIRENT_H #include #include #ifndef direct #define direct dirent #endif #endif #endif #ifdef HAVE_PWD_H #include #endif char cp_comma = ','; char cp_ocurl = '{'; char cp_ccurl = '}'; char cp_til = '~'; static wordlist *bracexpand(char *string); static wordlist *brac1(char *string); static wordlist *brac2(char *string); /* For each word, go through two steps: expand the {}'s, and then do ?*[] * globbing in them. Sort after the second phase but not the first... */ /* MW. Now only tilde is supported, {}*? don't work */ wordlist * cp_doglob(wordlist *wlist) { wordlist *wl; char *s; /* Expand {a,b,c} */ for (wl = wlist; wl; wl = wl->wl_next) { wordlist *nwl, *w = bracexpand(wl->wl_word); if (!w) { wlist->wl_word = NULL; /* XXX */ return (wlist); } nwl = wl_splice(wl, w); if (wlist == wl) wlist = w; wl = nwl; } /* Do tilde expansion. */ for (wl = wlist; wl; wl = wl->wl_next) if (*wl->wl_word == cp_til) { s = cp_tildexpand(wl->wl_word); txfree(wl->wl_word); /* sjb - fix memory leak */ if (!s) wl->wl_word = copy(""); /* MW. We Con't touch tmalloc addres */ else wl->wl_word = s; } return (wlist); } static wordlist * bracexpand(char *string) { wordlist *wl, *w; char *s; if (!string) return (NULL); wl = brac1(string); if (!wl) return (NULL); for (w = wl; w; w = w->wl_next) { s = w->wl_word; w->wl_word = copy(s); tfree(s); } return (wl); } /* Given a string, returns a wordlist of all the {} expansions. This is * called recursively by cp_brac2(). All the words here will be of size * BSIZE_SP, so it is a good idea to copy() and free() the old words. */ static wordlist * brac1(char *string) { wordlist *words, *wl, *w, *nw, *nwl, *newwl; char *s; int nb; words = wl_cons(TMALLOC(char, BSIZE_SP), NULL); words->wl_word[0] = '\0'; for (s = string; *s; s++) { if (*s == cp_ocurl) { nwl = brac2(s); nb = 0; for (;;) { if (*s == cp_ocurl) nb++; if (*s == cp_ccurl) nb--; if (*s == '\0') { fprintf(cp_err, "Error: missing }.\n"); return (NULL); } if (nb == 0) break; s++; } /* Add nwl to the rest of the strings in words. */ newwl = NULL; for (wl = words; wl; wl = wl->wl_next) for (w = nwl; w; w = w->wl_next) { nw = wl_cons(TMALLOC(char, BSIZE_SP), NULL); (void) strcpy(nw->wl_word, wl->wl_word); (void) strcat(nw->wl_word, w->wl_word); newwl = wl_append(newwl, nw); } wl_free(words); wl_free(nwl); words = newwl; } else { for (wl = words; wl; wl = wl->wl_next) appendc(wl->wl_word, *s); } } return (words); } /* Given a string starting with a {, return a wordlist of the expansions * for the text until the matching }. */ static wordlist * brac2(char *string) { wordlist *wlist = NULL, *nwl; char buf[BSIZE_SP], *s; int nb; bool eflag = FALSE; string++; /* Get past the first open brace... */ for (;;) { (void) strcpy(buf, string); nb = 0; s = buf; for (;;) { if ((*s == cp_ccurl) && (nb == 0)) { eflag = TRUE; break; } if ((*s == cp_comma) && (nb == 0)) break; if (*s == cp_ocurl) nb++; if (*s == cp_ccurl) nb--; if (*s == '\0') { fprintf(cp_err, "Error: missing }.\n"); return (NULL); } s++; } *s = '\0'; nwl = brac1(buf); wlist = wl_append(wlist, nwl); string += s - buf + 1; if (eflag) return (wlist); } } /* Expand tildes. */ char * cp_tildexpand(char *string) { char *result; result = tildexpand(string); if (!result) { if (cp_nonomatch) return copy(string); else return NULL; } return result; } /* Say whether the pattern p can match the string s. */ /* MW. Now simply compare strings */ bool cp_globmatch(char *p, char *s) { return (!(strcmp(p, s))); } tmpk8ny_4pz/src/frontend/parser/unixcom.c0000644000175000017500000001340113546075722020707 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Routines to do execution of unix commands. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "unixcom.h" #include "../frontend/streams.h" #ifdef HAVE_VFORK_H /* The only reason this exists is efficiency */ # ifdef HAVE_SYS_DIR_H # include # include # else # ifdef HAVE_DIRENT_H # include # include # ifndef direct # define direct dirent # endif # endif # endif #ifdef HAVE_UNISTD_H #include #endif #include #include #include static bool tryexec(char *name, char *argv[]); static int hash(register char *str); struct hashent { char *h_name; char *h_path; struct hashent *h_next; }; #define HASHSIZE 256 static struct hashent *hashtab[HASHSIZE]; static char *dirbuffer; static int dirlength, dirpos; /* Create the hash table for the given search path. pathlist is a : seperated * list of directories. If docc is TRUE, then all the commands found are * added to the command completion lists. */ void cp_rehash(char *pathlist, bool docc) { register int i; struct hashent *hh, *ht; char buf[BSIZE_SP], pbuf[BSIZE_SP], *curpath; DIR *pdir; struct direct *entry; /* First clear out the old hash table. */ for (i = 0; i < HASHSIZE; i++) { for (hh = hashtab[i]; hh; hh = ht) { ht = hh->h_next; /* Don't free any of the other stuff -- it is too * strange. */ tfree(hh); } hashtab[i] = NULL; } while (pathlist && *pathlist) { /* Copy one path to buf. We have to make sure that the path * is a full path name. */ if (*pathlist == '/') { i = 0; } else { #ifdef HAVE_GETWD (void) getwd(buf); #else # ifdef HAVE_GETCWD (void) getcwd(buf, sizeof(buf)); # else *buf = '\0'; # endif #endif i = strlen(buf); } while (*pathlist && (*pathlist != ':')) buf[i++] = *pathlist++; while (*pathlist == ':') pathlist++; buf[i] = '\0'; curpath = copy(buf); if (!(pdir = opendir(curpath))) continue; while (entry = readdir(pdir)) { (void) strcpy(pbuf, curpath); (void) strcat(pbuf, "/"); (void) strcat(pbuf, entry->d_name); /* Now we could make sure that it is really an * executable, but that is too slow * (as if "we" really cared). */ hh = TMALLOC(struct hashent, 1); hh->h_name = copy(entry->d_name); hh->h_path = curpath; i = hash(entry->d_name); /* Make sure this goes at the end, with * possible duplications of names. */ if (hashtab[i]) { ht = hashtab[i]; while (ht->h_next) ht = ht->h_next; ht->h_next = hh; } else { hashtab[i] = hh; } if (docc) { /* Add to completion hash table. */ cp_addcomm(entry->d_name, (long) 0, (long) 0, (long) 0, (long) 0); } } closedir(pdir); } } /* The return value is FALSE if no command was found, and TRUE if it was. */ bool cp_unixcom(wordlist *wl) { int i; register struct hashent *hh; register char *name; char **argv; char buf[BSIZE_SP]; if (!wl) return (FALSE); name = wl->wl_word; argv = wl_mkvec(wl); if (cp_debug) { printf("name: %s, argv: ", name); wl_print(wl, stdout); printf(".\n"); } if (strchr(name, '/')) return (tryexec(name, argv)); i = hash(name); for (hh = hashtab[i]; hh; hh = hh->h_next) if (eq(name, hh->h_name)) { (void) sprintf(buf, "%s/%s", hh->h_path, hh->h_name); if (tryexec(buf, argv)) return (TRUE); } return (FALSE); } static bool tryexec(char *name, char *argv[]) { # ifdef HAVE_SYS_WAIT_H int status; # else union wait status; # endif int pid, j; RETSIGTYPE (*svint)(), (*svquit)(), (*svtstp)(); pid = vfork(); if (pid == 0) { fixdescriptors(); (void) execv(name, argv); (void) _exit(120); /* A random value. */ /* NOTREACHED */ } else { svint = signal(SIGINT, SIG_DFL); svquit = signal(SIGQUIT, SIG_DFL); svtstp = signal(SIGTSTP, SIG_DFL); do { j = wait(&status); } while (j != pid); (void) signal(SIGINT, (SIGNAL_FUNCTION) svint); (void) signal(SIGQUIT, (SIGNAL_FUNCTION) svquit); (void) signal(SIGTSTP, (SIGNAL_FUNCTION) svtstp); } if (WTERMSIG(status) == 0 && WEXITSTATUS(status) == 120) /*if ((status.w_termsig == 0) && (status.w_retcode == 120)) */ return (FALSE); else return (TRUE); } static int hash(register char *str) { register int i = 0; while (*str) i += *str++; return (i % HASHSIZE); } /* Debugging. */ void cp_hstat(void) { struct hashent *hh; int i; for (i = 0; i < HASHSIZE; i++) for (hh = hashtab[i]; hh; hh = hh->h_next) fprintf(cp_err, "i = %d, name = %s, path = %s\n", i, hh->h_name, hh->h_path); } #else void cp_rehash(char *pathlist, bool docc) { NG_IGNORE(docc); NG_IGNORE(pathlist); } bool cp_unixcom(wordlist *wl) { char *s = wl_flatten(wl); if (system(s)) return (FALSE); else return (TRUE); } #endif tmpk8ny_4pz/src/frontend/parser/numparse.c0000644000175000017500000001021213546075722021054 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* This routine parses a number. */ #include "ngspice/ngspice.h" #include "ngspice/bool.h" #include "ngspice/ftedefs.h" #include "numparse.h" static double power10(double num) /* Chris Inbody */ { double d = 1.0; while (num-- > 0) d *= 10.0; return (d); } bool ft_strictnumparse = FALSE; /* Parse a number. This will handle things like 10M, etc... If the number * must not end before the end of the string, then whole is TRUE. * If whole is FALSE and there is more left to the number, the argument * is advanced to the end of the word. Returns NULL * if no number can be found or if there are trailing characters when * whole is TRUE. * * If ft_strictnumparse is TRUE, and whole is FALSE, the first of the * trailing characters must be a '_'. */ double * ft_numparse(char **s, bool whole) { double mant = 0.0; int sign = 1, exsign = 1, p; double expo = 0.0; static double num; char *string = *s; /* See if the number begins with + or -. */ if (*string == '+') { string++; } else if (*string == '-') { string++; sign = -1; } /* We don't want to recognise "P" as 0P, or .P as 0.0P... */ if ((!isdigit_c(*string) && *string != '.') || ((*string == '.') && !isdigit_c(string[1]))) return (NULL); /* Now accumulate a number. Note ascii dependencies here... */ while (isdigit_c(*string)) mant = mant * 10.0 + (*string++ - '0'); /* Now maybe a decimal point. */ if (*string == '.') { string++; p = 1; while (isdigit_c(*string)) mant += (*string++ - '0') / power10(p++); } /* Now look for the scale factor or the exponent (can't have both). */ switch (*string) { case 'e': case 'E': /* Parse another number. */ string++; if (*string == '+') { exsign = 1; string++; } else if (*string == '-') { exsign = -1; string++; } while (isdigit_c(*string)) expo = expo * 10.0 + (*string++ - '0'); if (*string == '.') { string++; p = 1; while (isdigit_c(*string)) expo += (*string++ - '0') / power10(p++); } expo *= exsign; break; case 't': case 'T': expo = 12.0; string++; break; case 'g': case 'G': expo = 9.0; string++; break; case 'k': case 'K': expo = 3.0; string++; break; case 'u': case 'U': expo = -6.0; string++; break; case 'n': case 'N': expo = -9.0; string++; break; case 'p': case 'P': expo = -12.0; string++; break; case 'f': case 'F': expo = -15.0; string++; break; case 'm': case 'M': /* Can be either m, mil, or meg. */ if (string[1] && string[2] && ((string[1] == 'e') || (string[1] == 'E')) && ((string[2] == 'g') || (string[2] == 'G'))) { expo = 6.0; string += 3; } else if (string[1] && string[2] && ((string[1] == 'i') || (string[1] == 'I')) && ((string[2] == 'l') || (string[2] == 'L'))) { expo = -6.0; mant *= 25.4; string += 3; } else { expo = -3.0; string++; } break; } if (whole && *string != '\0') { return (NULL); } else if (ft_strictnumparse && *string && isdigit_c(string[-1])) { if (*string == '_') while (isalpha_c(*string) || (*string == '_')) string++; else return (NULL); } else { while (isalpha_c(*string) || (*string == '_')) string++; } *s = string; num = sign * mant * pow(10.0, expo); if (ft_parsedb) fprintf(cp_err, "numparse: got %e, left = %s\n", num, *s); return (&num); } tmpk8ny_4pz/src/frontend/parser/std.c0000644000175000017500000000063013546075722020017 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Standard utility routines. * Most moved to MISC/ */ #include "ngspice/ngspice.h" #include "ngspice/cpstd.h" /* This might not be around. If not then forget about sorting. */ #ifndef HAVE_QSORT #ifndef qsort qsort() {} #endif #endif tmpk8ny_4pz/src/frontend/parser/unixcom.h0000644000175000017500000000021213546075722020710 0ustar carstencarsten/************* * Header file for unixcom.c * 1999 E. Rouat ************/ #ifndef ngspice_UNIXCOM_H #define ngspice_UNIXCOM_H #endif tmpk8ny_4pz/src/frontend/parser/complete.c0000644000175000017500000004436013546075722021045 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group Modified: 1999 Paolo Nenzi **********/ /* * Command completion code. We keep a data structure with information on each * command, to make lookups fast. We also keep NCLASSES (which is sort of * hardwired as 32) sets of keywords. Each command has an array of NARGS * bitmasks (also hardwired as 4), stating whether the command takes that * particular class of keywords in that position. Class 0 always means * filename completion. */ #include "ngspice/ngspice.h" #include "ngspice/fteext.h" #include "ngspice/cpdefs.h" #include "complete.h" #ifdef HAVE_SYS_DIR_H #include #include #else # ifdef HAVE_DIRENT_H # include # include # ifndef direct # define direct dirent # endif # endif #endif #ifdef HAVE_PWD_H #include #endif #if !defined(__MINGW32__) && !defined(_MSC_VER) /* MW. We also need ioctl.h here I think */ #include #endif /* Be sure the ioctls get included in the following */ #ifdef HAVE_SGTTY_H #include #else #ifdef HAVE_TERMIO_H #include #else #ifdef HAVE_TERMIOS_H #include #endif #endif #endif #define CNTRL_D '\004' #define ESCAPE '\033' #define NCLASSES 32 bool cp_nocc; /* Don't do command completion. */ static struct ccom *commands = NULL; /* The available commands. */ static struct ccom *keywords[NCLASSES]; /* Keywords. */ #ifdef TIOCSTI /* va, functions used in this branch only */ static struct ccom *getccom(char *first); static wordlist *ccfilec(char *buf); static wordlist *ccmatch(char *word, struct ccom **dbase); static void printem(wordlist *wl); #endif static wordlist *cctowl(struct ccom *cc, bool sib); static struct ccom *clookup(register const char *word, struct ccom **dd, bool pref, bool create); /* MW. I need top node in cdelete */ static void cdelete(struct ccom *node, struct ccom **top); #ifdef TIOCSTI void cp_ccom(wordlist *wlist, char *buf, bool esc) { struct ccom *cc; wordlist *a, *pmatches = NULL; char wbuf[BSIZE_SP], *s; int i = 0; int j, arg; buf = cp_unquote(copy(buf)); cp_wstrip(buf); if (wlist) { /* Not the first word. */ cc = getccom(wlist->wl_word); if (cc && cc->cc_invalid) cc = NULL; arg = wl_length(wlist) - 1; if (arg > 3) arg = 3; /* First filenames. */ if (cc && (cc->cc_kwords[arg] & 1)) { pmatches = ccfilec(buf); s = strrchr(buf, '/'); i = (int) strlen(s ? s + 1 : buf); if ((*buf == '~') && !strchr(buf, '/')) i--; } /* The keywords. */ for (j = 1; j < NCLASSES; j++) if (cc && (cc->cc_kwords[arg] & (1 << j))) { /* Find all the matching keywords. */ a = ccmatch(buf, &keywords[j]); i = (int) strlen(buf); if (pmatches) pmatches = wl_append(pmatches, a); else pmatches = a; } wl_sort(pmatches); } else { pmatches = ccmatch(buf, &commands); i = (int) strlen(buf); } tfree(buf); /*CDHW*/ if (!esc) { printem(pmatches); wl_free(pmatches); return; } if (pmatches == NULL) { (void) putchar('\07'); (void) fflush(cp_out); return; } if (pmatches->wl_next == NULL) { (void) strcpy(wbuf, &pmatches->wl_word[i]); goto found; } /* Now we know which words might work. Extend the command as much * as possible, then TIOCSTI the characters out. */ for (j = 0;; j++, i++) { wbuf[j] = pmatches->wl_word[i]; for (a = pmatches->wl_next; a; a = a->wl_next) if (a->wl_word[i] != wbuf[j]) { (void) putchar('\07'); (void) fflush(cp_out); wbuf[j] = '\0'; goto found; } if (wbuf[j] == '\0') goto found; } found: for (i = 0; wbuf[i]; i++) (void) ioctl(fileno(cp_in), TIOCSTI, &wbuf[i]); wl_free(pmatches); } /* Figure out what the command is, given the name. Returns NULL if there * is no such command in the command list. This is tricky, because we have * to do a preliminary history and alias parse. (Or at least we should.) */ static struct ccom * getccom(char *first) { struct alias *al; int ntries = 21; /* First look for aliases. Just interested in the first word... * Don't bother doing history yet -- that might get complicated. */ while (ntries-- > 0) { for (al = cp_aliases; al; al = al->al_next) if (eq(first, al->al_name)) { first = al->al_text->wl_word; break; } if (al == NULL) break; } if (ntries == 0) { fprintf(cp_err, "\nError: alias loop.\n"); return (NULL); } return (clookup(first, &commands, FALSE, FALSE)); } /* Figure out what files match the prefix. */ static wordlist * ccfilec(char *buf) { DIR *wdir; char *lcomp, *dir; struct direct *de; wordlist *wl = NULL; struct passwd *pw; buf = copy(buf); /* Don't mangle anything... */ lcomp = strrchr(buf, '/'); if (lcomp == NULL) { dir = "."; lcomp = buf; if (*buf == cp_til) { /* User name completion... */ buf++; while ((pw = getpwent()) != NULL) if (prefix(buf, pw->pw_name)) wl = wl_cons(copy(pw->pw_name), wl); (void) endpwent(); return (wl); } } else { dir = buf; *lcomp = '\0'; lcomp++; if (*dir == cp_til) { dir = cp_tildexpand(dir); if (dir == NULL) return (NULL); } } if (!(wdir = opendir(dir))) return (NULL); while ((de = readdir(wdir)) != NULL) if ((prefix(lcomp, de->d_name)) && (*lcomp || (*de->d_name != '.'))) wl = wl_cons(copy(de->d_name), wl); (void) closedir(wdir); wl_sort(wl); return (wl); } /* See what keywords or commands match the prefix. Check extra also * for matches, if it is non-NULL. Return a wordlist which is in * alphabetical order. Note that we have to call this once for each * class. */ static wordlist * ccmatch(char *word, struct ccom **dbase) { wordlist *wl; register struct ccom *cc; cc = clookup(word, dbase, TRUE, FALSE); if (cc) { if (*word) /* This is a big drag. */ wl = cctowl(cc, FALSE); else wl = cctowl(cc, TRUE); } else { wl = NULL; } return (wl); } /* Print the words in the wordlist in columns. They are already * sorted... This is a hard thing to do with wordlists... */ static void printem(wordlist *wl) { wordlist *ww; int maxl = 0, num, i, j, k, width = 79, ncols, nlines; (void) putchar('\n'); if (wl == NULL) return; num = wl_length(wl); for (ww = wl; ww; ww = ww->wl_next) { j = (int) strlen(ww->wl_word); if (j > maxl) maxl = j; } if (++maxl % 8) maxl += 8 - (maxl % 8); ncols = width / maxl; if (ncols == 0) ncols = 1; nlines = num / ncols + (num % ncols ? 1 : 0); for (k = 0; k < nlines; k++) { for (i = 0; i < ncols; i++) { j = i * nlines + k; if (j < num) fprintf(cp_out, "%-*s", maxl, wl_nthelem(j, wl)->wl_word); else break; } (void) putchar('\n'); } } #else /* if not TIOCSTI */ void cp_ccom(wordlist *wlist, char *buf, bool esc) { NG_IGNORE(wlist); NG_IGNORE(buf); NG_IGNORE(esc); } #endif static wordlist * cctowl(struct ccom *cc, bool sib) { wordlist *wl; if (!cc) return (NULL); wl = cctowl(cc->cc_child, TRUE); if (!cc->cc_invalid) wl = wl_cons(copy(cc->cc_name), wl); if (sib) wl = wl_append(wl, cctowl(cc->cc_sibling, TRUE)); return (wl); } /* We use this in com_device... */ wordlist * cp_cctowl(struct ccom *stuff) { return (cctowl(stuff, TRUE)); } /* Turn on and off the escape break character and cooked mode. */ void cp_ccon(bool on) { #ifdef TIOCSTI #ifdef HAVE_SGTTY_H static bool ison = FALSE; struct tchars tbuf; struct sgttyb sbuf; if (cp_nocc || !cp_interactive || (ison == on)) return; ison = on; /* Set the terminal up -- make escape the break character, and * make sure we aren't in raw or cbreak mode. Hope the (void) * ioctl's won't fail. */ (void) ioctl(fileno(cp_in), TIOCGETC, &tbuf); if (on) tbuf.t_brkc = ESCAPE; else tbuf.t_brkc = '\0'; (void) ioctl(fileno(cp_in), TIOCSETC, &tbuf); (void) ioctl(fileno(cp_in), TIOCGETP, &sbuf); sbuf.sg_flags &= ~(RAW|CBREAK); (void) ioctl(fileno(cp_in), TIOCSETP, &sbuf); #else # ifdef HAVE_TERMIO_H # define TERM_GET TCGETA # define TERM_SET TCSETA static struct termio sbuf; static struct termio OS_Buf; # else # ifdef HAVE_TERMIOS_H # define TERM_GET TCGETS # define TERM_SET TCSETS static struct termios sbuf; static struct termios OS_Buf; # endif # endif #ifdef TERM_GET static bool ison = FALSE; if (cp_nocc || !cp_interactive || (ison == on)) return; ison = on; if (ison == TRUE) { #if HAVE_TCGETATTR tcgetattr(fileno(cp_in), &OS_Buf); #else (void) ioctl(fileno(cp_in), TERM_GET, &OS_Buf); #endif sbuf = OS_Buf; sbuf.c_cc[VEOF] = '\0'; sbuf.c_cc[VEOL] = ESCAPE; sbuf.c_cc[VEOL2] = CNTRL_D; #if HAVE_TCSETATTR tcsetattr(fileno(cp_in), TCSANOW, &sbuf); #else (void) ioctl(fileno(cp_in), TERM_SET, &sbuf); #endif } else { #ifdef HAVE_TCSETATTR tcsetattr(fileno(cp_in), TCSANOW, &OS_Buf); #else (void) ioctl(fileno(cp_in), TERM_SET, &OS_Buf); #endif } # endif #endif #else NG_IGNORE(on); #endif } /* The following routines deal with the command and keyword databases. * Say whether a given word exists in the command database. */ bool cp_comlook(char *word) { if (word && *word && clookup(word, &commands, FALSE, FALSE)) return (TRUE); else return (FALSE); } /* Add a command to the database, with the given keywords and filename * flag. */ void cp_addcomm(char *word, long int bits0, long int bits1, long int bits2, long int bits3) { struct ccom *cc; cc = clookup(word, &commands, FALSE, TRUE); cc->cc_invalid = 0; cc->cc_kwords[0] = bits0; cc->cc_kwords[1] = bits1; cc->cc_kwords[2] = bits2; cc->cc_kwords[3] = bits3; } /* Remove a command from the database. */ void cp_remcomm(char *word) { struct ccom *cc; cc = clookup(word, &commands, FALSE, FALSE); if (cc) cdelete(cc, &commands); } /* Add a keyword to the database. */ void cp_addkword(int kw_class, char *word) { struct ccom *cc; if ((kw_class < 1) || (kw_class >= NCLASSES)) { fprintf(cp_err, "cp_addkword: Internal Error: bad class %d\n", kw_class); return; } /* word = copy(word); va: not necessary, clookup copies itself (memory leak) */ cc = clookup(word, &keywords[kw_class], FALSE, TRUE); cc->cc_invalid = 0; } void cp_destroy_keywords(void) { int i; for (i = 0; i < NCLASSES; i++) throwaway(keywords[i]); throwaway(commands); } /* Remove a keyword from the database. */ void cp_remkword(int kw_class, const char *word) { struct ccom *cc; if ((kw_class < 1) || (kw_class >= NCLASSES)) { fprintf(cp_err, "cp_remkword: Internal Error: bad class %d\n", kw_class); return; } cc = clookup(word, &keywords[kw_class], FALSE, FALSE); if (cc) cdelete(cc, &keywords[kw_class]); } /* This routine is used when there are several keyword sets that are * to be switched between rapidly. The return value is the old tree at * that position, and the keyword class given is set to the argument. */ struct ccom * cp_kwswitch(int kw_class, struct ccom *tree) { struct ccom *old; if ((kw_class < 1) || (kw_class >= NCLASSES)) { fprintf(cp_err, "cp_addkword: Internal Error: bad class %d\n", kw_class); return (NULL); } old = keywords[kw_class]; keywords[kw_class] = tree; return (old); } /* Throw away all the stuff and prepare to rebuild it from scratch... */ void cp_ccrestart(bool kwords) { NG_IGNORE(kwords); /* Ack. */ } void throwaway(struct ccom *dbase) { if (!dbase) return; /* va: security first */ if (dbase->cc_child) throwaway(dbase->cc_child); if (dbase->cc_sibling) throwaway(dbase->cc_sibling); tfree(dbase->cc_name); /* va: also tfree dbase->cc_name (memory leak) */ tfree(dbase); } /* Look up a word in the database. Because of the way the tree is set * up, this also works for looking up all words with a given prefix * (if the pref arg is TRUE). If create is TRUE, then the node is * created if it doesn't already exist. */ static struct ccom * clookup(register const char *word, struct ccom **dd, bool pref, bool create) { register struct ccom *place = *dd, *tmpc; int ind = 0, i; char buf[BSIZE_SP]; if (!place) { /* This is the first time we were called. */ if (!create) { return (NULL); } else { *dd = place = TMALLOC(struct ccom, 1); ZERO(place, struct ccom); buf[0] = *word; buf[1] = '\0'; place->cc_name = copy(buf); if (word[0] == '\0') { fprintf(stderr, "ERROR, internal error, clookup() needs fixing to process the empty string\n"); controlled_exit(EXIT_FAILURE); } if (word[1]) place->cc_invalid = 1; } } while (word[ind]) { /* Walk down the sibling list until we find a node that * matches 'word' to 'ind' places. */ while ((place->cc_name[ind] < word[ind]) && place->cc_sibling) place = place->cc_sibling; if (place->cc_name[ind] < word[ind]) { /* This line doesn't go out that far... */ if (create) { place->cc_sibling = TMALLOC(struct ccom, 1); ZERO(place->cc_sibling, struct ccom); place->cc_sibling->cc_ysibling = place; place->cc_sibling->cc_parent = place->cc_parent; place = place->cc_sibling; place->cc_name = TMALLOC(char, ind + 2); for (i = 0; i < ind + 1; i++) place->cc_name[i] = word[i]; place->cc_name[ind + 1] = '\0'; place->cc_invalid = 1; } else { return (NULL); } } else if (place->cc_name[ind] > word[ind]) { if (create) { /* Put this one between place and its pred. */ tmpc = TMALLOC(struct ccom, 1); ZERO(tmpc, struct ccom); tmpc->cc_parent = place->cc_parent; tmpc->cc_sibling = place; tmpc->cc_ysibling = place->cc_ysibling; place->cc_ysibling = tmpc; place = tmpc; if (tmpc->cc_ysibling) tmpc->cc_ysibling->cc_sibling = tmpc; else if (tmpc->cc_parent) tmpc->cc_parent->cc_child = tmpc; else *dd = place; place->cc_name = TMALLOC(char, ind + 2); for (i = 0; i < ind + 1; i++) place->cc_name[i] = word[i]; place->cc_name[ind + 1] = '\0'; place->cc_invalid = 1; } else { return (NULL); } } /* place now points to that node that matches the word for * ind + 1 characters. */ if (word[ind + 1]) { /* More to go... */ if (!place->cc_child) { /* No children, maybe make one and go on. */ if (create) { tmpc = TMALLOC(struct ccom, 1); ZERO(tmpc, struct ccom); tmpc->cc_parent = place; place->cc_child = tmpc; place = tmpc; place->cc_name = TMALLOC(char, ind + 3); for (i = 0; i < ind + 2; i++) place->cc_name[i] = word[i]; place->cc_name[ind + 2] = '\0'; if (word[ind + 2]) place->cc_invalid = 1; } else { return (NULL); } } else { place = place->cc_child; } ind++; } else { break; } } if (!pref && !create && place->cc_invalid) { /* This is no good, we want a real word. */ return (NULL); } return (place); } /* Delete a node from the tree. Returns the new tree... */ /* MW. It is quite difficoult to free() everything right, but... * Anyway this could be more optimal, I think */ static void cdelete(struct ccom *node, struct ccom **top) { /* if cc_child exist only mark as deleted */ node->cc_invalid = 1; if (node->cc_child) return; /* fix cc_sibling */ if (node->cc_sibling) node->cc_sibling->cc_ysibling = node->cc_ysibling; if (node->cc_ysibling) node->cc_ysibling->cc_sibling = node->cc_sibling; /* if we have cc_parent, check if it should not be removed too */ if (node->cc_parent) { /* this node will be free() */ if (node->cc_parent->cc_child == node) { if (node->cc_ysibling) node->cc_parent->cc_child = node->cc_ysibling; else node->cc_parent->cc_child = node->cc_sibling; } /* free parent only if it is invalid */ if (node->cc_parent->cc_invalid == 1) cdelete(node->cc_parent, top); } /* now free() everything and check the top */ if (node == *top) *top = node->cc_sibling; tfree(node->cc_name); /* va: we should allways use tfree */ tfree(node); } tmpk8ny_4pz/src/frontend/parser/cshpar.c0000644000175000017500000000422613546075722020512 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * The main entry point for cshpar. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include #include "cshpar.h" #ifdef HAVE_SGTTY_H #include #else #ifdef HAVE_TERMIO_H #include #else #ifdef HAVE_TERMIOS_H #include #endif #endif #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_PWD_H #include #endif #ifdef HAVE_SYS_WAIT_H #include #endif /* Things go as follows: * (1) Read the line and do some initial quoting (by setting the 8th bit), * and command ignoring. Also deal with command completion. * (2) Do history substitutions. (!, ^) * (3) Do alias substitution. * * In front.c these things get done: * (4) Do variable substitution. ($varname) * (5) Do backquote substitution. (``) * (6) Do globbing. (*, ?, [], {}, ~) * (7) Do io redirection. */ static void pwlist(wordlist *wlist, char *name); wordlist * cp_parse(char *string) { wordlist *wlist; wlist = cp_lexer(string); if (!string) cp_event++; if (!wlist || !wlist->wl_word) return (wlist); pwlist(wlist, "Initial parse"); wlist = cp_histsubst(wlist); if (!wlist || !wlist->wl_word) return (wlist); pwlist(wlist, "After history substitution"); if (cp_didhsubst) { wl_print(wlist, stdout); putc('\n', stdout); } /* Add the word list to the history. */ /* MW. If string==NULL we do not have to do this, and then play * with cp_lastone is not needed, but watch out cp_doalias */ if ((*wlist->wl_word) && !(string)) cp_addhistent(cp_event - 1, wlist); wlist = cp_doalias(wlist); pwlist(wlist, "After alias substitution"); pwlist(wlist, "Returning "); return (wlist); } static void pwlist(wordlist *wlist, char *name) { wordlist *wl; if (!cp_debug) return; fprintf(cp_err, "%s : [ ", name); for (wl = wlist; wl; wl = wl->wl_next) fprintf(cp_err, "%s ", wl->wl_word); fprintf(cp_err, "]\n"); } tmpk8ny_4pz/src/frontend/parser/backq.c0000644000175000017500000000514113546075722020310 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Do backquote substitution on a word list. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "backq.h" static wordlist *backeval(char *string); char cp_back = '`'; wordlist * cp_bquote(wordlist *wlist) { wordlist *wl, *nwl; char *s, *t, buf[BSIZE_SP], wbuf[BSIZE_SP], tbuf[BSIZE_SP]; int i; for (wl = wlist; wl; wl = wl->wl_next) { t = wl->wl_word; if (!t) continue; i = 0; loop: s = strchr(t, cp_back); if (s == NULL) continue; while (t < s) wbuf[i++] = *t++; wbuf[i] = '\0'; t++; s = buf; /* Get s and t past the next backquote. */ while (*t && (*t != cp_back)) *s++ = *t++; /* What the heck, let "echo `foo" work... */ *s = '\0'; if (*t != '\0') t++; /* Get past the second ` */ if ((nwl = backeval(buf)) == NULL) { wlist->wl_word = NULL; return (wlist); } (void) strcpy(buf, wbuf); if (nwl->wl_word) { (void) strcat(buf, nwl->wl_word); tfree(nwl->wl_word); } nwl->wl_word = copy(buf); (void) strcpy(tbuf, t); wl = wl_splice(wl, nwl); for (wlist = wl; wlist->wl_prev; wlist = wlist->wl_prev) ; /* MW. We must move to the begging of new wordlist. */ (void) strcpy(buf, wl->wl_word); i = (int) strlen(buf); (void) strcat(buf, tbuf); tfree(wl->wl_word); wl->wl_word = copy(buf); t = &wl->wl_word[i]; s = wl->wl_word; for (i = 0; s < t; s++) wbuf[i++] = *s; goto loop; } return (wlist); } /* Do a popen with the string, and then reset the file pointers so that * we can use the first pass of the parser on the output. */ static wordlist * backeval(char *string) { #ifdef HAVE_POPEN FILE *proc, *old; wordlist *wl; bool intv; proc = popen(string, "r"); if (proc == NULL) { fprintf(cp_err, "Error: can't evaluate %s.\n", string); return (NULL); } old = cp_inp_cur; cp_inp_cur = proc; intv = cp_interactive; cp_interactive = FALSE; cp_bqflag = TRUE; wl = cp_lexer(NULL); cp_bqflag = FALSE; cp_inp_cur = old; cp_interactive = intv; (void) pclose(proc); return (wl); #else wordlist *wl = wl_cons(copy(string), NULL); return (wl); #endif } tmpk8ny_4pz/src/frontend/parser/cshpar.h0000644000175000017500000000020713546075722020512 0ustar carstencarsten/************* * Header file for cshpar.c * 1999 E. Rouat ************/ #ifndef ngspice_CSHPAR_H #define ngspice_CSHPAR_H #endif tmpk8ny_4pz/src/frontend/com_let.c0000644000175000017500000001405413546075722017360 0ustar carstencarsten#include #include "ngspice/dvec.h" #include "ngspice/ngspice.h" #include "ngspice/fteext.h" #include "ngspice/cpextern.h" #include "ngspice/stringskip.h" #include "com_let.h" #include "com_display.h" #include "completion.h" void com_let(wordlist *wl) { char *p, *q, *s; int indices[MAXDIMS]; int numdims; int need_open; int offset, length; struct pnode *names; struct dvec *n, *t; int i, cube; int j, depth; int newvec; char *rhs; if (!wl) { com_display(NULL); return; } p = wl_flatten(wl); /* extract indices */ numdims = 0; if ((rhs = strchr(p, '=')) != NULL) { *rhs++ = '\0'; } else { fprintf(cp_err, "Error: bad let syntax\n"); tfree(p); return; } if ((s = strchr(p, '[')) != NULL) { need_open = 0; *s++ = '\0'; while (!need_open || *s == '[') { depth = 0; if (need_open) s++; for (q = s; *q && (*q != ']' && (*q != ',' || depth > 0)); q++) { switch (*q) { case '[': depth += 1; break; case ']': depth -= 1; break; } } if (depth != 0 || !*q) { printf("syntax error specifying index\n"); tfree(p); return; } if (*q == ']') need_open = 1; else need_open = 0; if (*q) *q++ = '\0'; /* evaluate expression between s and q */ /* va, indexing */ names = ft_getpnames_from_string(s, TRUE); if (!names) { /* XXX error message */ tfree(p); return; } t = ft_evaluate(names); if (!t) { fprintf(cp_err, "Error: Can't evaluate %s\n", s); free_pnode(names); tfree(p); return; } if (!isreal(t) || t->v_link2 || t->v_length != 1 || !t->v_realdata) { fprintf(cp_err, "Error: index is not a scalar.\n"); goto quit; } j = (int)floor(t->v_realdata[0]+0.5); /* ignore sanity checks for now, va, which checks? */ if (j < 0) { printf("negative index (%d) is not allowed\n", j); goto quit; } indices[numdims++] = j; /* va: garbage collection for t, if pnode `names' is no simple value */ if (names && !names->pn_value && t) vec_free(t); free_pnode(names); /* frees also t, if pnode `names' is simple value */ s = skip_ws(q); } } /* vector name at p */ for (q = p + strlen(p) - 1; *q <= ' ' && p <= q; q--) ; *++q = '\0'; /* sanity check */ if (eq(p, "all") || strchr(p, '@') || isdigit_c(*p)) { fprintf(cp_err, "Error: bad variable name %s\n", p); tfree(p); return; } /* evaluate rhs */ names = ft_getpnames_from_string(rhs, TRUE); if (names == NULL) { fprintf(cp_err, "Error: RHS \"%s\" invalid\n", rhs); tfree(p); return; } t = ft_evaluate(names); if (!t) { fprintf(cp_err, "Error: Can't evaluate %s\n", rhs); free_pnode(names); tfree(p); return; } if (t->v_link2) fprintf(cp_err, "Warning: extra wildcard values ignored\n"); n = vec_get(p); if (n) { /* re-allocate? */ /* vec_free(n); */ newvec = 0; } else { if (numdims) { fprintf(cp_err, "Can't assign into a subindex of a new vector\n"); goto quit; } /* create and assign a new vector */ n = dvec_alloc(copy(p), t->v_type, t->v_flags | VF_PERMANENT, t->v_length, NULL); if ((t->v_numdims) <= 1) { // changed from "!t->v_numdims" by Friedrich Schmidt n->v_numdims = 1; n->v_dims[0] = n->v_length; } else { n->v_numdims = t->v_numdims; for (i = 0; i < t->v_numdims; i++) n->v_dims[i] = t->v_dims[i]; } newvec = 1; vec_new(n); } /* fix-up dimensions; va, also for v_dims */ if (n->v_numdims < 1 || n->v_dims[0] == 0 ) { n->v_numdims = 1; n->v_dims[0] = n->v_length; } /* Compare dimensions */ offset = 0; length = n->v_length; cube = 1; for (i = n->v_numdims - 1; i >= numdims; i--) cube *= n->v_dims[i]; for (i = numdims - 1; i >= 0; i--) { offset += cube * indices[i]; if (i < n->v_numdims) { cube *= n->v_dims[i]; length /= n->v_dims[i]; } } /* length is the size of the unit refered to */ /* cube ends up being the length */ if (length > t->v_length) { fprintf(cp_err, "left-hand expression is too small (need %d)\n", length * cube); if (newvec) n->v_flags &= ~VF_PERMANENT; goto quit; } if (isreal(t) != isreal(n)) { fprintf(cp_err, "Types of vectors are not the same (real vs. complex)\n"); if (newvec) n->v_flags &= ~VF_PERMANENT; goto quit; } else if (isreal(t)) { memcpy(n->v_realdata + offset, t->v_realdata, (size_t) length * sizeof(double)); } else { memcpy(n->v_compdata + offset, t->v_compdata, (size_t) length * sizeof(ngcomplex_t)); } n->v_minsignal = 0.0; /* How do these get reset ??? */ n->v_maxsignal = 0.0; n->v_scale = t->v_scale; if (newvec) cp_addkword(CT_VECTOR, n->v_name); quit: /* va: garbage collection for t, if pnode `names' is no simple value */ if (names && !names->pn_value && t) vec_free(t); free_pnode(names); /* frees also t, if pnode `names' is simple value */ tfree(p); } tmpk8ny_4pz/src/frontend/com_display.c0000644000175000017500000000420613546075722020237 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/bool.h" #include "ngspice/wordlist.h" #include "ngspice/fteext.h" #include "ngspice/cpextern.h" #include "com_display.h" #include "quote.h" #include "variable.h" #include "plotting/plotting.h" #include "plotting/pvec.h" /* For the sort in display. */ static int dcomp(const void *d1, const void *d2) { struct dvec **v1 = (struct dvec **) d1; struct dvec **v2 = (struct dvec **) d2; return (strcmp((*v1)->v_name, (*v2)->v_name)); } /* Display vector status, etc. Note that this only displays stuff * from the current plot, and you must do a setplot to see the rest of * it. */ void com_display(wordlist *wl) { struct dvec *d; struct dvec **dvs; int len = 0, i = 0; char *s; /* Maybe he wants to know about just a few vectors. */ out_init(); while (wl) { s = cp_unquote(wl->wl_word); d = vec_get(s); tfree(s); /*DG to avoid the cp_unquote memory leak */ if (d == NULL) fprintf(cp_err, "Error: no such vector as %s.\n", wl->wl_word); else if (d->v_plot == NULL) fprintf(cp_err, "Error: no analog vector as %s.\n", wl->wl_word); else while (d) { pvec(d); d = d->v_link2; } if (wl->wl_next == NULL) return; wl = wl->wl_next; } if (plot_cur) for (d = plot_cur->pl_dvecs; d; d = d->v_next) len++; if (len == 0) { fprintf(cp_out, "There are no vectors currently active.\n"); return; } out_printf("Here are the vectors currently active:\n\n"); dvs = TMALLOC(struct dvec *, len); for (d = plot_cur->pl_dvecs, i = 0; d; d = d->v_next, i++) dvs[i] = d; if (!cp_getvar("nosort", CP_BOOL, NULL, 0)) qsort(dvs, (size_t) len, sizeof(struct dvec *), dcomp); out_printf("Title: %s\n", plot_cur->pl_title); out_printf("Name: %s (%s)\nDate: %s\n\n", plot_cur->pl_typename, plot_cur->pl_name, plot_cur->pl_date); for (i = 0; i < len; i++) { d = dvs[i]; pvec(d); } tfree(dvs); } tmpk8ny_4pz/src/frontend/com_measure2.c0000644000175000017500000017524613546075722020332 0ustar carstencarsten/* New routines to evaluate the .measure cards. Entry point is function get_measure2(), called by fcn do_measure() from measure.c. Patches by Bill Swartz from 2009-05-18 and 2009-08-21 are included. */ #include "ngspice/ngspice.h" #include "ngspice/memory.h" #include "ngspice/fteext.h" #include "ngspice/wordlist.h" #include "vectors.h" #include #include "dotcards.h" #include "com_measure2.h" #include "breakp2.h" typedef enum { MEASUREMENT_OK = 0, MEASUREMENT_FAILURE = 1 } MEASURE_VAL_T; #define MEASURE_DEFAULT -1 #define MEASURE_LAST_TRANSITION -2 typedef struct measure { char *result; char *m_vec; // name of the output variable which determines the beginning of the measurement char *m_vec2; // second output variable to measure if applicable char *m_analysis; // analysis type (tran, dc or ac) char m_vectype; // type of vector m_vec (vm, vi, vr, vp, vdb) char m_vectype2; // type of vector m_vec2 (vm, vi, vr, vp, vdb) int m_rise; // count number of rise events int m_fall; // count number of fall events int m_cross; // count number of rise/fall aka cross events double m_val; // value of the m_ver at which the counter for crossing, rises or falls is incremented by one double m_td; // amount of delay before the measurement should start double m_from; // measure only in a time window - starting time of window double m_to; // measurement window - ending time double m_at; // measure at the specified time double m_measured; // what we measured double m_measured_at; // what we measured at the given time } MEASURE, *MEASUREPTR; typedef enum AnalysisType { AT_UNKNOWN, AT_DELAY, AT_TRIG, AT_FIND, AT_WHEN, AT_AVG, AT_MIN, AT_MAX, AT_RMS, AT_PP, AT_INTEG, AT_DERIV, AT_ERR, AT_ERR1, AT_ERR2, AT_ERR3, AT_MIN_AT, AT_MAX_AT } ANALYSIS_TYPE_T; /** return precision (either 5 or value of environment variable NGSPICE_MEAS_PRECISION) */ int measure_get_precision(void) { char *env_ptr; int precision = 5; if ((env_ptr = getenv("NGSPICE_MEAS_PRECISION")) != NULL) precision = atoi(env_ptr); return precision; } static void measure_errMessage(char *mName, char *mFunction, char *trigTarg, char *errMsg, int chk_only) { if (!chk_only) { printf("\nError: measure %s %s(%s) : ", mName, mFunction, trigTarg); printf("%s", errMsg); // printf("\tmeasure '%s' failed\n", mName); } } /* If you have a vector vm(out), extract 'm' to meas->m_vectype and v(out) to meas->m_vec (without 'm') */ static void correct_vec(MEASUREPTR meas) { char *vec = meas->m_vec; /* return if not of type VM() etc */ if ((*vec != 'v') || (!strchr(vec, '('))) return; if (vec[1] != '(') { meas->m_vectype = vec[1]; meas->m_vec = tprintf("%c%s", vec[0], strchr(vec, '(')); tfree(vec); } vec = meas->m_vec2; if (vec && (vec[1] != '(')) { meas->m_vectype2 = vec[1]; meas->m_vec2 = tprintf("%c%s", vec[0], strchr(vec, '(')); tfree(vec); } } /* Returns a value from a complex vector *values, depending on meas->m_vectype */ static double get_value( MEASUREPTR meas, /*in: pointer to mesurement structure */ struct dvec *values, /*in: vector of complex values */ int idx /*in: index of vector value to be read out */ ) { double ar, bi; ar = values->v_compdata[idx].cx_real; bi = values->v_compdata[idx].cx_imag; if ((meas->m_vectype == 'm') || (meas->m_vectype == 'M')) { return hypot(ar, bi); /* magnitude */ } else if ((meas->m_vectype == 'r') || (meas->m_vectype == 'R')) { return ar; /* real value */ } else if ((meas->m_vectype == 'i') || (meas->m_vectype == 'I')) { return bi; /* imaginary value */ } else if ((meas->m_vectype == 'p') || (meas->m_vectype == 'P')) { return radtodeg(atan2(bi, ar)); /* phase (in degrees) */ } else if ((meas->m_vectype == 'd') || (meas->m_vectype == 'D')) { return 20.0 * log10(hypot(ar, bi)); /* dB of magnitude */ } else { return ar; /* default: real value */ } } /* Returns interpolated value. If ac simulation, exploit vector type with complex data for y */ static double measure_interpolate( struct dvec *xScale, /* in: vector of independent variables, if ac: complex vector, but only real part used */ struct dvec *values, /* in: vector of dependent variables, if ac: complex vector */ int i, /* in: index of first interpolation value */ int j, /* in: index of second interpolation value */ double var_value, /* in: variable, whose counterpart is sought by interpolation */ char x_or_y , /* in: if 'x', then look for y, if 'y' then look for x */ MEASUREPTR meas /* pointer to measurement structure */ ) { double slope; double yint; double result; if (cieq (meas->m_analysis, "ac")) { /* get values from complex y vector according to meas->m_vectype, x vector uses only real part of complex data (frequency).*/ slope = (get_value(meas, values, j) - get_value(meas, values, i)) / (xScale->v_compdata[j].cx_real - xScale->v_compdata[i].cx_real); yint = get_value(meas, values, i) - slope*xScale->v_compdata[i].cx_real; } else { slope = (values->v_realdata[j] - values->v_realdata[i]) / (xScale->v_realdata[j] - xScale->v_realdata[i]); yint = values->v_realdata[i] - slope*xScale->v_realdata[i]; } if (x_or_y == 'x') result = (var_value - yint)/slope; else result = slope*var_value + yint; return result; } /* ----------------------------------------------------------------- * Function: Given an operation string returns back the measure type - * one of the enumerated type ANALSYS_TYPE_T. * ----------------------------------------------------------------- */ static ANALYSIS_TYPE_T measure_function_type(char *operation) { char *mFunction; /* operation */ ANALYSIS_TYPE_T mFunctionType; /* type of requested function */ mFunction = cp_unquote(operation); // Functions if (strcasecmp(mFunction, "DELAY") == 0) mFunctionType = AT_DELAY; else if (strcasecmp(mFunction, "TRIG") == 0) mFunctionType = AT_DELAY; else if (strcasecmp(mFunction, "TARG") == 0) mFunctionType = AT_DELAY; else if (strcasecmp(mFunction, "FIND") == 0) mFunctionType = AT_FIND; else if (strcasecmp(mFunction, "WHEN") == 0) mFunctionType = AT_WHEN; else if (strcasecmp(mFunction, "AVG") == 0) mFunctionType = AT_AVG; else if (strcasecmp(mFunction, "MIN") == 0) mFunctionType = AT_MIN; else if (strcasecmp(mFunction, "MAX") == 0) mFunctionType = AT_MAX; else if (strcasecmp(mFunction, "MIN_AT") == 0) mFunctionType = AT_MIN_AT; else if (strcasecmp(mFunction, "MAX_AT") == 0) mFunctionType = AT_MAX_AT; else if (strcasecmp(mFunction, "RMS") == 0) mFunctionType = AT_RMS; else if (strcasecmp(mFunction, "PP") == 0) mFunctionType = AT_PP; else if (strcasecmp(mFunction, "INTEG") == 0) mFunctionType = AT_INTEG; else if (strcasecmp(mFunction, "DERIV") == 0) mFunctionType = AT_DERIV; else if (strcasecmp(mFunction, "ERR") == 0) mFunctionType = AT_ERR; else if (strcasecmp(mFunction, "ERR1") == 0) mFunctionType = AT_ERR1; else if (strcasecmp(mFunction, "ERR2") == 0) mFunctionType = AT_ERR2; else if (strcasecmp(mFunction, "ERR3") == 0) mFunctionType = AT_ERR3; else mFunctionType = AT_UNKNOWN; tfree(mFunction); return (mFunctionType); } /* ----------------------------------------------------------------- * Function: Parse the measurement line and extract any variables in * the statement and call com_save2 to instantiate the variable as a * measurement vector in the transient analysis. * ----------------------------------------------------------------- */ int measure_extract_variables(char *line) { /* Various formats for measure statement: * .MEASURE {DC|AC|TRAN} result TRIG trig_variable VAL=val * + * + * + TARG targ_variable VAL=val * + * + * * .MEASURE {DC|AC|TRAN} result WHEN out_variable=val * + * + * * .MEASURE {DC|AC|TRAN} result WHEN out_variable=out_variable2 * + * + * * .MEASURE {DC|AC|TRAN} result FIND out_variable WHEN out_variable2=val * + * + * * .MEASURE {DC|AC|TRAN} result FIND out_variable WHEN out_variable2=out_variable3 * + * + * * .MEASURE {DC|AC|TRAN} result FIND out_variable AT=val * + * * .MEASURE {DC|AC|TRAN} result {AVG|MIN|MAX|MIN_AT|MAX_AT|PP|RMS} out_variable * + * * .MEASURE {DC|AC|TRAN} result INTEG out_variable * + * * .MEASURE {DC|AC|TRAN} result DERIV out_variable AT=val * * .MEASURE {DC|AC|TRAN} result DERIV out_variable WHEN out_variable2=val * + * + * * .MEASURE {DC|AC|TRAN} result DERIV out_variable WHEN out_variable2=out_variable3 * + * + * ----------------------------------------------------------------- */ int status; /* return status */ char *item; /* parsing item */ char *measure; /* measure keyword */ char *analysis; /* analysis option */ char *variable, *variable2; /* variable to trace */ wordlist *measure_var; /* wordlist of measurable */ ANALYSIS_TYPE_T op; /* measure function type */ status = TRUE; measure = gettok(&line); if (!measure) return (status); analysis = gettok(&line); if (!analysis) return (status); if ((strcasecmp(analysis, "DC") == 0) || (strcasecmp(analysis, "AC") == 0) || (strcasecmp(analysis, "TRAN") == 0)) { analysis = copy(analysis); } else { /* sometimes operation is optional - for now just pick trans */ analysis = copy("TRAN"); } do { item = gettok(&line); if (item) { op = measure_function_type(item); if (op != AT_UNKNOWN) { /* We have a variable/complex variable coming next */ variable = gettok_iv(&line); variable2 = NULL; if (*line == '=') variable2 = gettok_iv(&line); if (variable) { size_t len = strlen(item); if (item[len-1] == '=') { } else { /* We may have something like V(n1)=1 or v(n1)=2 , same with i() */ measure_var = gettoks(variable); com_save2(measure_var, analysis); status = FALSE; } } if (variable2) { /* We may have something like v(n1)=v(n2) v(n2) is handled here, same with i() */ measure_var = gettoks(variable2); com_save2(measure_var, analysis); status = FALSE; } } } } while (*line); return status; } /* ----------------------------------------------------------------- * Function: process a WHEN measurement statement which has been * parsed into a measurement structure. * ----------------------------------------------------------------- */ static void com_measure_when( MEASUREPTR meas /* in : parsed measurement structure */ ) { int i, first; int riseCnt = 0; int fallCnt = 0; int crossCnt = 0; int section = -1; int measurement_pending; int init_measured_value; bool ac_check = FALSE, sp_check = FALSE, dc_check = FALSE, tran_check = FALSE; bool has_d2 = FALSE; double value, prevValue, value2, prevValue2; double scaleValue, prevScaleValue; enum ValSide { S_ABOVE_VAL, S_BELOW_VAL }; enum ValEdge { E_RISING, E_FALLING }; struct dvec *d, *d2, *dScale; d = vec_get(meas->m_vec); if (meas->m_vec2) { d2 = vec_get(meas->m_vec2); has_d2 = TRUE; } else { d2 = NULL; } dScale = plot_cur->pl_scale; if (d == NULL) { fprintf(cp_err, "Error: no such vector as %s.\n", meas->m_vec); return; } if (has_d2 && (d2 == NULL)) { fprintf(cp_err, "Error: no such vector as %s.\n", meas->m_vec2); return; } if (dScale == NULL) { fprintf(cp_err, "Error: no scale vector.\n"); return; } prevValue = 0.; prevValue2 = 0.; prevScaleValue = 0.; first = 0; measurement_pending = 0; init_measured_value = 1; /* ----------------------------------------------------------------- * Take the string tests outside of the loop for speed. * ----------------------------------------------------------------- */ if (cieq (meas->m_analysis, "ac")) ac_check = TRUE; else if (cieq (meas->m_analysis, "sp")) sp_check = TRUE; else if (cieq (meas->m_analysis, "dc")) dc_check = TRUE; else tran_check = TRUE; for (i = 0; i < d->v_length; i++) { if (ac_check) { if (d->v_compdata) value = get_value(meas, d, i); //d->v_compdata[i].cx_real; else value = d->v_realdata[i]; scaleValue = dScale->v_compdata[i].cx_real; } else if (sp_check) { if (d->v_compdata) value = get_value(meas, d, i); //d->v_compdata[i].cx_real; else value = d->v_realdata[i]; scaleValue = dScale->v_realdata[i]; } else { value = d->v_realdata[i]; scaleValue = dScale->v_realdata[i]; } if (has_d2) { if (ac_check) { if (d2->v_compdata) value2 = get_value(meas, d2, i); //d->v_compdata[i].cx_real; else value2 = d2->v_realdata[i]; } else if (sp_check) { if (d2->v_compdata) value2 = get_value(meas, d2, i); //d->v_compdata[i].cx_real; else value2 = d2->v_realdata[i]; } else { value2 = d2->v_realdata[i]; } } else { value2 = NAN; } /* 'dc' is special: it may start at an arbitrary scale value. Use m_td to store this value, a delay TD does not make sense */ if (dc_check && (i == 0)) meas->m_td = scaleValue; /* if analysis tran, suppress values below TD */ if (tran_check && (scaleValue < meas->m_td)) continue; /* if analysis ac, sp, suppress values below 0 */ else if ((ac_check || sp_check) && (scaleValue < 0)) continue; /* if 'dc': reset first if scale jumps back to origin */ if ((first > 1) && (dc_check && (meas->m_td == scaleValue))) first = 1; if (first == 1) { if (has_d2) { // initialise crossCnt = 0; if (value < value2) { section = S_BELOW_VAL; if ((prevValue <= value2) && (value >= value2)) { fallCnt = 1; crossCnt = 1; } } else { section = S_ABOVE_VAL; if ((prevValue <= value2) && (value >= value2)) { riseCnt = 1; crossCnt = 1; } } fflush(stdout); } else { // initialise crossCnt = 0; if (value < meas->m_val) { section = S_BELOW_VAL; if ((prevValue <= meas->m_val) && (value >= meas->m_val)) { fallCnt = 1; crossCnt = 1; } } else { section = S_ABOVE_VAL; if ((prevValue <= meas->m_val) && (value >= meas->m_val)) { riseCnt = 1; crossCnt = 1; } } fflush(stdout); } } if (first > 1) { if (has_d2) { if ((section == S_BELOW_VAL) && (value >= value2)) { section = S_ABOVE_VAL; crossCnt++; riseCnt++; if (meas->m_fall != MEASURE_LAST_TRANSITION) { /* we can measure rise/cross transition if the user * has not requested a last fall transition */ measurement_pending = 1; } } else if ((section == S_ABOVE_VAL) && (value <= value2)) { section = S_BELOW_VAL; crossCnt++; fallCnt++; if (meas->m_rise != MEASURE_LAST_TRANSITION) { /* we can measure fall/cross transition if the user * has not requested a last rise transition */ measurement_pending = 1; } } if ((crossCnt == meas->m_cross) || (riseCnt == meas->m_rise) || (fallCnt == meas->m_fall)) { /* user requested an exact match of cross, rise, or fall * exit when we meet condition */ // meas->m_measured = prevScaleValue + (value2 - prevValue) * (scaleValue - prevScaleValue) / (value - prevValue); meas->m_measured = prevScaleValue + (prevValue2 - prevValue) * (scaleValue - prevScaleValue) / (value - prevValue - value2 + prevValue2); return; } if (measurement_pending) { if ((meas->m_cross == MEASURE_DEFAULT) && (meas->m_rise == MEASURE_DEFAULT) && (meas->m_fall == MEASURE_DEFAULT)) { /* user didn't request any option, return the first possible case */ meas->m_measured = prevScaleValue + (prevValue2 - prevValue) * (scaleValue - prevScaleValue) / (value - prevValue - value2 + prevValue2); return; } else if ((meas->m_cross == MEASURE_LAST_TRANSITION) || (meas->m_rise == MEASURE_LAST_TRANSITION) || (meas->m_fall == MEASURE_LAST_TRANSITION)) { meas->m_measured = prevScaleValue + (prevValue2 - prevValue) * (scaleValue - prevScaleValue) / (value - prevValue - value2 + prevValue2); /* no return - look for last */ init_measured_value = 0; } measurement_pending = 0; } } else { if ((section == S_BELOW_VAL) && (value >= meas->m_val)) { section = S_ABOVE_VAL; crossCnt++; riseCnt++; if (meas->m_fall != MEASURE_LAST_TRANSITION) { /* we can measure rise/cross transition if the user * has not requested a last fall transition */ measurement_pending = 1; } } else if ((section == S_ABOVE_VAL) && (value <= meas->m_val)) { section = S_BELOW_VAL; crossCnt++; fallCnt++; if (meas->m_rise != MEASURE_LAST_TRANSITION) { /* we can measure fall/cross transition if the user * has not requested a last rise transition */ measurement_pending = 1; } } if ((crossCnt == meas->m_cross) || (riseCnt == meas->m_rise) || (fallCnt == meas->m_fall)) { /* user requested an exact match of cross, rise, or fall * exit when we meet condition */ meas->m_measured = prevScaleValue + (meas->m_val - prevValue) * (scaleValue - prevScaleValue) / (value - prevValue); return; } if (measurement_pending) { if ((meas->m_cross == MEASURE_DEFAULT) && (meas->m_rise == MEASURE_DEFAULT) && (meas->m_fall == MEASURE_DEFAULT)) { /* user didn't request any option, return the first possible case */ meas->m_measured = prevScaleValue + (meas->m_val - prevValue) * (scaleValue - prevScaleValue) / (value - prevValue); return; } else if ((meas->m_cross == MEASURE_LAST_TRANSITION) || (meas->m_rise == MEASURE_LAST_TRANSITION) || (meas->m_fall == MEASURE_LAST_TRANSITION)) { meas->m_measured = prevScaleValue + (meas->m_val - prevValue) * (scaleValue - prevScaleValue) / (value - prevValue); /* no return - look for last */ init_measured_value = 0; } measurement_pending = 0; } } } first ++; prevValue = value; if (has_d2) prevValue2 = value2; prevScaleValue = scaleValue; } if (init_measured_value) meas->m_measured = NAN; } /* ----------------------------------------------------------------- * Function: process an AT measurement statement which has been * parsed into a measurement structure. We make sure to interpolate * the value when appropriate. * ----------------------------------------------------------------- */ static void measure_at( MEASUREPTR meas, /* in : parsed "at" data */ double at /* in: time to perform measurement */ ) { int i; double value, pvalue, svalue, psvalue; bool ac_check = FALSE, sp_check = FALSE, dc_check = FALSE, tran_check = FALSE; struct dvec *d, *dScale; psvalue = pvalue = 0; d = vec_get(meas->m_vec); dScale = plot_cur->pl_scale; if (d == NULL) { fprintf(cp_err, "Error: no such vector as %s.\n", meas->m_vec); return; } if (dScale == NULL) { fprintf(cp_err, "Error: no such vector time, frequency or dc.\n"); return; } /* ----------------------------------------------------------------- * Take the string tests outside of the loop for speed. * ----------------------------------------------------------------- */ if (cieq (meas->m_analysis, "ac")) ac_check = TRUE; else if (cieq (meas->m_analysis, "sp")) sp_check = TRUE; else if (cieq (meas->m_analysis, "dc")) dc_check = TRUE; else tran_check = TRUE; for (i = 0; i < d->v_length; i++) { if (ac_check) { if (d->v_compdata) { value = get_value(meas, d, i); //d->v_compdata[i].cx_real; } else { value = d->v_realdata[i]; // fprintf(cp_err, "Warning: 'meas ac' input vector is real!\n"); } svalue = dScale->v_compdata[i].cx_real; } else if (sp_check) { if (d->v_compdata) value = get_value(meas, d, i); //d->v_compdata[i].cx_real; else value = d->v_realdata[i]; svalue = dScale->v_realdata[i]; } else { value = d->v_realdata[i]; svalue = dScale->v_realdata[i]; } if ((i > 0) && (psvalue <= at) && (svalue >= at)) { meas->m_measured = pvalue + (at - psvalue) * (value - pvalue) / (svalue - psvalue); return; } else if (dc_check && (i > 0) && (psvalue >= at) && (svalue <= at)) { meas->m_measured = pvalue + (at - psvalue) * (value - pvalue) / (svalue - psvalue); return; } psvalue = svalue; pvalue = value; } meas->m_measured = NAN; } /* ----------------------------------------------------------------- * Function: process an MIN, MAX, or AVG statement which has been * parsed into a measurement structure. We should make sure to interpolate * the value here when we have m_from and m_to constraints * so this * function is slightly wrong. Need to fix in future rev. * ----------------------------------------------------------------- */ static void measure_minMaxAvg( MEASUREPTR meas, /* in : parsed measurement data request */ ANALYSIS_TYPE_T mFunctionType /* in: one of AT_AVG, AT_MIN, AT_MAX, AT_MIN_AT, AT_MAX_AT */ ) { int i; struct dvec *d, *dScale; double value, svalue, mValue, mValueAt; double pvalue = 0.0, sprev = 0.0, Tsum = 0.0; int first; bool ac_check = FALSE, sp_check = FALSE, dc_check = FALSE, tran_check = FALSE; mValue = 0; mValueAt = svalue = 0; meas->m_measured = NAN; meas->m_measured_at = NAN; first = 0; d = vec_get(meas->m_vec); if (d == NULL) { fprintf(cp_err, "Error: no such vector as %s.\n", meas->m_vec); return; } /* ----------------------------------------------------------------- * Take the string tests outside of the loop for speed. * ----------------------------------------------------------------- */ if (cieq (meas->m_analysis, "ac")) ac_check = TRUE; else if (cieq (meas->m_analysis, "sp")) sp_check = TRUE; else if (cieq (meas->m_analysis, "dc")) dc_check = TRUE; else tran_check = TRUE; if (ac_check || sp_check) { dScale = vec_get("frequency"); } else if (tran_check) { dScale = vec_get("time"); } else if (dc_check) { dScale = vec_get("v-sweep"); } else { /* error */ fprintf(cp_err, "Error: no such analysis type as %s.\n", meas->m_analysis); return; } if (dScale == NULL) { fprintf(cp_err, "Error: no such vector as time, frquency or v-sweep.\n"); return; } for (i = 0; i < d->v_length; i++) { if (ac_check) { if (d->v_compdata) { value = get_value(meas, d, i); //d->v_compdata[i].cx_real; } else { value = d->v_realdata[i]; // fprintf(cp_err, "Warning: 'meas ac' input vector is real!\n"); } svalue = dScale->v_compdata[i].cx_real; } else if (sp_check) { if (d->v_compdata) value = get_value(meas, d, i); //d->v_compdata[i].cx_real; else value = d->v_realdata[i]; if (dScale->v_realdata) svalue = dScale->v_realdata[i]; else /* may happen if you write an sp vector and load it again */ svalue = dScale->v_compdata[i].cx_real; } else { value = d->v_realdata[i]; svalue = dScale->v_realdata[i]; } if (dc_check) { /* dc: start from pos or neg scale value */ if ((svalue < meas->m_from) || (svalue > meas->m_to)) continue; } else { /* all others: start from neg scale value */ if (svalue < meas->m_from) continue; if ((meas->m_to != 0.0e0) && (svalue > meas->m_to)) break; } if (first == 0) { first = 1; switch (mFunctionType) { case AT_MIN: case AT_MIN_AT: case AT_MAX_AT: case AT_MAX: mValue = value; mValueAt = svalue; break; case AT_AVG: mValue = 0.0; mValueAt = svalue; Tsum = 0.0; pvalue = value; sprev = svalue; break; default: fprintf(cp_err, "Error: improper min/max/avg call.\n"); } } else { switch (mFunctionType) { case AT_MIN: case AT_MIN_AT: { if (value <= mValue) { mValue = value; mValueAt = svalue; } break; } case AT_MAX_AT: case AT_MAX: { if (value >= mValue) { mValue = value; mValueAt = svalue; } break; } case AT_AVG: { mValue += 0.5 * (value + pvalue) * (svalue - sprev); Tsum += (svalue - sprev); pvalue = value; sprev = svalue; break; } default : fprintf(cp_err, "Error: improper min/max/avg call.\n"); } } } switch (mFunctionType) { case AT_AVG: { meas->m_measured = mValue / (first ? Tsum : 1.0); meas->m_measured_at = svalue; break; } case AT_MIN: case AT_MAX: case AT_MIN_AT: case AT_MAX_AT: { meas->m_measured = mValue; meas->m_measured_at = mValueAt; break; } default : fprintf(cp_err, "Error: improper min/max/avg call.\n"); } } /* ----------------------------------------------------------------- * Function: process an RMS or INTEG statement which has been * parsed into a measurement structure. Here we do interpolate * the starting and stopping time window so the answer is correct. * ----------------------------------------------------------------- */ static void measure_rms_integral( MEASUREPTR meas, /* in : parsed measurement data request */ ANALYSIS_TYPE_T mFunctionType /* in: one of AT_RMS, or AT_INTEG */ ) { int i; /* counter */ int xy_size; /* # of temp array elements */ struct dvec *d, *xScale; /* value and indpendent (x-axis) vectors */ double value, xvalue; /* current value and independent value */ double *x; /* temp x array */ double *y; /* temp y array */ double toVal; /* to time value */ double *width; /* temp width array */ double sum1; /* first sum */ double sum2; /* second sum */ double sum3; /* third sum */ int first; bool ac_check = FALSE, sp_check = FALSE, dc_check = FALSE, tran_check = FALSE; xvalue = 0; meas->m_measured = NAN; meas->m_measured_at = NAN; first = 0; if (cieq (meas->m_analysis, "ac")) ac_check = TRUE; else if (cieq (meas->m_analysis, "sp")) sp_check = TRUE; else if (cieq (meas->m_analysis, "dc")) dc_check = TRUE; else tran_check = TRUE; d = vec_get(meas->m_vec); if (d == NULL) { fprintf(cp_err, "Error: no such vector as %s.\n", meas->m_vec); return; } if (ac_check || sp_check) { xScale = vec_get("frequency"); } else if (tran_check) { xScale = vec_get("time"); } else if (dc_check) { xScale = vec_get("v-sweep"); } else { /* error */ fprintf(cp_err, "Error: no such analysis type as %s.\n", meas->m_analysis); return; } if (xScale == NULL) { fprintf(cp_err, "Error: no such vector as time.\n"); return; } /* Allocate buffers for calculation. */ x = TMALLOC(double, xScale->v_length); y = TMALLOC(double, xScale->v_length); width = TMALLOC(double, xScale->v_length + 1); xy_size = 0; toVal = -1; /* create new set of values over interval [from, to] -- interpolate if necessary */ for (i = 0; i < d->v_length; i++) { if (ac_check) { if (d->v_compdata) { value = get_value(meas, d, i); //d->v_compdata[i].cx_real; } else { value = d->v_realdata[i]; // fprintf(cp_err, "Warning: 'meas ac' input vector is real!\n"); } xvalue = xScale->v_compdata[i].cx_real; } else { value = d->v_realdata[i]; xvalue = xScale->v_realdata[i]; } if (xvalue < meas->m_from) continue; if ((meas->m_to != 0.0e0) && (xvalue > meas->m_to)) { // interpolate ending value if necessary. if (!AlmostEqualUlps(xvalue, meas->m_to, 100)) { value = measure_interpolate(xScale, d, i-1, i, meas->m_to, 'y', meas); xvalue = meas->m_to; } x[xy_size] = xvalue; if (mFunctionType == AT_RMS) y[xy_size++] = value * value; else y[xy_size++] = value; toVal = xvalue; break; } if (first == 0) { if (meas->m_from != 0.0e0 && (i > 0)) { // interpolate starting value. if (!AlmostEqualUlps(xvalue, meas->m_from, 100)) { value = measure_interpolate(xScale, d, i-1, i, meas->m_from, 'y' , meas); xvalue = meas->m_from; } } meas->m_measured_at = xvalue; first = 1; } x[xy_size] = xvalue; if (mFunctionType == AT_RMS) y[xy_size++] = value * value; else y[xy_size++] = value; } // evaluate segment width for (i = 0; i < xy_size-1; i++) width[i] = x[i+1] - x[i]; width[i++] = 0; width[i++] = 0; // Compute Integral (area under curve) i = 0; sum1 = sum2 = sum3 = 0.0; while (i < xy_size-1) { // Simpson's 3/8 Rule if (AlmostEqualUlps(width[i], width[i+1], 100) && AlmostEqualUlps(width[i], width[i+2], 100)) { sum1 += 3*width[i] * (y[i] + 3*(y[i+1] + y[i+2]) + y[i+3]) / 8.0; i += 3; } // Simpson's 1/3 Rule else if (AlmostEqualUlps(width[i], width[i+1], 100)) { sum2 += width[i] * (y[i] + 4*y[i+1] + y[i+2]) / 3.0; i += 2; } // Trapezoidal Rule else if (!AlmostEqualUlps(width[i], width[i+1], 100)) { sum3 += width[i] * (y[i] + y[i+1]) / 2; i++; } } /* Now set the measurement values if not set */ if (toVal < 0.0) { if (ac_check) { if (d->v_compdata) { value = get_value(meas, d, i); //d->v_compdata[i].cx_real; } else { value = d->v_realdata[i]; // fprintf(cp_err, "Warning: 'meas ac' input vector is real!\n"); } xvalue = xScale->v_compdata[i].cx_real; toVal = xScale->v_compdata[d->v_length-1].cx_real; } else { toVal = xScale->v_realdata[d->v_length-1]; } } meas->m_from = meas->m_measured_at; meas->m_to = toVal; if (mFunctionType == AT_RMS) { meas->m_measured = (sum1 + sum2 + sum3)/ (toVal - meas->m_measured_at); meas->m_measured = sqrt(meas->m_measured); } else { meas->m_measured = (sum1 + sum2 + sum3); } txfree(x); txfree(y); txfree(width); } /* ----------------------------------------------------------------- * Function: Wrapper function to process a RMS measurement. * ----------------------------------------------------------------- */ #if 0 static void measure_rms( MEASUREPTR meas /* in : parsed measurement data request */ ) { // RMS (root mean squared): // Calculates the square root of the area under the 'out_var2' curve // divided be the period of interest measure_rms_integral(meas, AT_RMS); } #endif /* ----------------------------------------------------------------- * Function: Wrapper function to process a integration measurement. * ----------------------------------------------------------------- */ #if 0 static void measure_integ( MEASUREPTR meas /* in : parsed measurement data request */ ) { // INTEGRAL INTEG measure_rms_integral(meas, AT_INTEG); } #endif /* still some more work to do.... */ #if 0 static void measure_deriv(void) { // DERIVATIVE DERIV } #endif // ERR Equations #if 0 static void measure_ERR(void) { } static void measure_ERR1(void) { } static void measure_ERR2(void) { } static void measure_ERR3(void) { } #endif void com_dotmeasure(wordlist *wl) { NG_IGNORE(wl); /* simulation info */ // printf("*%s\n", plot_cur->pl_title); // printf("\t %s, %s\n", plot_cur->pl_name, plot_cur->pl_date); // missing temp } /* ----------------------------------------------------------------- * Function: Given a measurement variable name, see if the analysis * has generated a measure vector for it. Returns TRUE if it exists * or varname is NULL, Return FALSE otherwise * ----------------------------------------------------------------- */ static int measure_valid_vector( char *varname /* in: requested variable name */ ) { struct dvec *d; /* measurement vector */ if (varname == NULL) return TRUE; d = vec_get(varname); if (d == NULL) return FALSE; return TRUE; } /* ----------------------------------------------------------------- * Function: Given a wordlist and measurement structure, parse the * standard parameters such as RISE, FALL, VAL, TD, FROM, TO, etc. * in a measurement statement. We also check the appropriate * variables found in the measurement statement. * ----------------------------------------------------------------- */ static int measure_parse_stdParams( MEASUREPTR meas, /* in : measurement structure */ wordlist *wl, /* in : word list to parse */ wordlist *wlBreak, /* out: where we stopped parsing */ char *errbuf /* in/out: buffer where we write error messages */ ) { int pCnt; char *p, *pName, *pValue; double *engVal, engVal1; pCnt = 0; while (wl != wlBreak) { p = wl->wl_word; pName = strtok(p, "="); pValue = strtok(NULL, "="); if (pValue == NULL) { if (strcasecmp(pName, "LAST") == 0) { meas->m_cross = MEASURE_LAST_TRANSITION; meas->m_rise = -1; meas->m_fall = -1; pCnt ++; wl = wl->wl_next; continue; } else { sprintf(errbuf, "bad syntax of ??\n"); return 0; } } if (strcasecmp(pValue, "LAST") == 0) { engVal1 = MEASURE_LAST_TRANSITION; } else { if ((engVal = ft_numparse(&pValue, FALSE)) == NULL) { sprintf(errbuf, "bad syntax of ??\n"); return 0; } engVal1 = *engVal; // What is this ?? } if (strcasecmp(pName, "RISE") == 0) { meas->m_rise = (int)floor(engVal1 + 0.5); meas->m_fall = -1; meas->m_cross = -1; } else if (strcasecmp(pName, "FALL") == 0) { meas->m_fall = (int)floor(engVal1 + 0.5); meas->m_rise = -1; meas->m_cross = -1; } else if (strcasecmp(pName, "CROSS") == 0) { meas->m_cross = (int)floor(engVal1 + 0.5); meas->m_rise = -1; meas->m_fall = -1; } else if (strcasecmp(pName, "VAL") == 0) { meas->m_val = engVal1; } else if (strcasecmp(pName, "TD") == 0) { meas->m_td = engVal1; } else if (strcasecmp(pName, "FROM") == 0) { meas->m_from = engVal1; } else if (strcasecmp(pName, "TO") == 0) { meas->m_to = engVal1; } else if (strcasecmp(pName, "AT") == 0) { meas->m_at = engVal1; } else { sprintf(errbuf, "no such parameter as '%s'\n", pName); return 0; } pCnt ++; wl = wl->wl_next; } if (pCnt == 0) { sprintf(errbuf, "bad syntax of ??\n"); return 0; } // valid vector if (measure_valid_vector(meas->m_vec) == 0) { sprintf(errbuf, "no such vector as '%s'\n", meas->m_vec); return 0; } // valid vector2 if (meas->m_vec2 != NULL) if (measure_valid_vector(meas->m_vec2) == 0) { sprintf(errbuf, "no such vector as '%s'\n", meas->m_vec2); return 0; } /* dc: make m_from always less than m_to */ if (cieq("dc", meas->m_analysis)) if (meas->m_to < meas->m_from) { SWAP(double, meas->m_from, meas->m_to); } return 1; } /* ----------------------------------------------------------------- * Function: Given a wordlist and measurement structure, parse a * FIND measurement statement. Most of the work is done by calling * measure_parse_stdParams. * ----------------------------------------------------------------- */ static int measure_parse_find( MEASUREPTR meas, /* in : measurement structure */ wordlist *wl, /* in : word list to parse */ wordlist *wlBreak, /* out: where we stopped parsing */ char *errbuf /* in/out: buffer where we write error messages */ ) { int pCnt; char *p, *pName, *pVal; double *engVal, engVal1; meas->m_vec = NULL; meas->m_vec2 = NULL; meas->m_val = 1e99; meas->m_cross = -1; meas->m_fall = -1; meas->m_rise = -1; meas->m_td = 0; meas->m_from = 0.0e0; meas->m_to = 0.0e0; meas->m_at = 1e99; /* for DC, set new outer limits for 'from' and 'to' because 0.0e0 may be valid inside of range */ if (cieq("dc", meas->m_analysis)) { meas->m_to = 1.0e99; meas->m_from = -1.0e99; } pCnt = 0; while (wl != wlBreak) { p = wl->wl_word; if (pCnt == 0) { meas->m_vec = cp_unquote(wl->wl_word); /* correct for vectors like vm, vp etc. */ if (cieq("ac", meas->m_analysis) || cieq("sp", meas->m_analysis)) correct_vec(meas); } else if (pCnt == 1) { pName = strtok(p, "="); pVal = strtok(NULL, "="); if (pVal == NULL) { sprintf(errbuf, "bad syntax of WHEN\n"); return 0; } if (strcasecmp(pName, "AT") == 0) { if ((engVal = ft_numparse(&pVal, FALSE)) == NULL) { sprintf(errbuf, "bad syntax of WHEN\n"); return 0; } engVal1 = *engVal; meas->m_at = engVal1; } else { sprintf(errbuf, "bad syntax of WHEN\n"); return 0; } } else { if (measure_parse_stdParams(meas, wl, NULL, errbuf) == 0) return 0; } wl = wl->wl_next; pCnt ++; } return 1; } /* ----------------------------------------------------------------- * Function: Given a wordlist and measurement structure, parse a * WHEN measurement statement. Most of the work is done by calling * measure_parse_stdParams. * ----------------------------------------------------------------- */ static int measure_parse_when( MEASUREPTR meas, /* in : measurement structure */ wordlist *wl, /* in : word list to parse */ char *errBuf /* in/out: buffer where we write error messages */ ) { int pCnt, err = 0; char *p, *pVar1, *pVar2; meas->m_vec = NULL; meas->m_vec2 = NULL; meas->m_val = 1e99; meas->m_cross = -1; meas->m_fall = -1; meas->m_rise = -1; meas->m_td = 0; meas->m_from = 0.0e0; meas->m_to = 0.0e0; meas->m_at = 1e99; /* for DC, set new outer limits for 'from' and 'to' because 0.0e0 may be valid inside of range */ if (cieq("dc", meas->m_analysis)) { meas->m_to = 1.0e99; meas->m_from = -1.0e99; } pCnt = 0; while (wl) { p = wl->wl_word; if (pCnt == 0) { pVar1 = strtok(p, "="); pVar2 = strtok(NULL, "="); if (pVar2 == NULL) { sprintf(errBuf, "bad syntax\n"); return 0; } meas->m_vec = copy(pVar1); /* correct for vectors like vm, vp etc. */ if (cieq("ac", meas->m_analysis) || cieq("sp", meas->m_analysis)) correct_vec(meas); if (measure_valid_vector(pVar2) == 1) { meas->m_vec2 = copy(pVar2); /* correct for vectors like vm, vp etc. */ if (cieq("ac", meas->m_analysis) || cieq("sp", meas->m_analysis)) correct_vec(meas); } else { meas->m_val = INPevaluate(&pVar2, &err, 1); } } else { if (measure_parse_stdParams(meas, wl, NULL, errBuf) == 0) return 0; break; } wl = wl->wl_next; pCnt ++; } return 1; } /* ----------------------------------------------------------------- * Function: Given a wordlist and measurement structure, parse a * TRIGGER or TARGET clause of a measurement statement. Most of the * work is done by calling measure_parse_stdParams. * ----------------------------------------------------------------- */ static int measure_parse_trigtarg( MEASUREPTR meas, /* in : measurement structure */ wordlist *words, /* in : word list to parse */ wordlist *wlTarg, /* out : where we stopped parsing target clause */ char *trigTarg, /* in : type of clause */ char *errbuf /* in/out: buffer where we write error messages */ ) { int pcnt; char *p; meas->m_vec = NULL; meas->m_vec2 = NULL; meas->m_cross = -1; meas->m_fall = -1; meas->m_rise = -1; meas->m_td = 0; meas->m_from = 0.0e0; meas->m_to = 0.0e0; meas->m_at = 1e99; /* for DC, set new outer limits for 'from' and 'to' because 0.0e0 may be valid inside of range */ if (cieq("dc", meas->m_analysis)) { meas->m_to = 1.0e99; meas->m_from = -1.0e99; } pcnt = 0; while (words != wlTarg) { p = words->wl_word; if ((pcnt == 0) && !ciprefix("at", p)) { meas->m_vec = cp_unquote(words->wl_word); /* correct for vectors like vm, vp etc. */ if (cieq("ac", meas->m_analysis) || cieq("sp", meas->m_analysis)) correct_vec(meas); } else if (ciprefix("at", p)) { if (measure_parse_stdParams(meas, words, wlTarg, errbuf) == 0) return 0; } else { if (measure_parse_stdParams(meas, words, wlTarg, errbuf) == 0) return 0; break; } words = words->wl_next; pcnt ++; } if (pcnt == 0) { sprintf(errbuf, "bad syntax of '%s'\n", trigTarg); return 0; } // valid vector if (measure_valid_vector(meas->m_vec) == 0) { sprintf(errbuf, "no such vector as '%s'\n", meas->m_vec); return 0; } return 1; } /* ----------------------------------------------------------------- * Function: Given a wordlist, extract the measurement statement, * process it, and return a result. If out_line is furnished, we * format and copy the result it this string buffer. The autocheck * variable allows us to check for "autostop". This function is * called from measure.c. We use the functions in this file because * the parsing is much more complete and thorough. * ----------------------------------------------------------------- */ int get_measure2( wordlist *wl, /* in: a word list for us to process */ double *result, /* out : the result of the measurement */ char *out_line, /* out: formatted result - may be NULL */ bool autocheck /* in: TRUE if checking for "autostop"; FALSE otherwise */ ) { wordlist *words, *wlTarg, *wlWhen; char errbuf[100]; char *mAnalysis = NULL; // analysis type char *mName = NULL; // name given to the measured output char *mFunction = ""; int precision; // measurement precision ANALYSIS_TYPE_T mFunctionType = AT_UNKNOWN; int wl_cnt; char *p; int ret_val = MEASUREMENT_FAILURE; *result = 0.0e0; /* default result */ if (!wl) { printf("usage: measure .....\n"); return MEASUREMENT_FAILURE; } if (!plot_cur || !plot_cur->pl_dvecs || !plot_cur->pl_scale) { fprintf(cp_err, "Error: no vectors available\n"); return MEASUREMENT_FAILURE; } if (!ciprefix("tran", plot_cur->pl_typename) && !ciprefix("ac", plot_cur->pl_typename) && !ciprefix("dc", plot_cur->pl_typename) && !ciprefix("sp", plot_cur->pl_typename)) { fprintf(cp_err, "Error: measure limited to tran, dc, sp, or ac analysis\n"); return MEASUREMENT_FAILURE; } words = wl; wlTarg = NULL; wlWhen = NULL; if (!words) { fprintf(cp_err, "Error: no assignment found.\n"); return MEASUREMENT_FAILURE; } precision = measure_get_precision(); wl_cnt = 0; while (words) { switch (wl_cnt) { case 0: mAnalysis = cp_unquote(words->wl_word); break; case 1: mName = cp_unquote(words->wl_word); break; case 2: { mFunctionType = measure_function_type(words->wl_word); if (mFunctionType == AT_UNKNOWN) { if (!autocheck) { printf("\tmeasure '%s' failed\n", mName); printf("Error: measure %s :\n", mName); printf("\tno such function as '%s'\n", words->wl_word); } return MEASUREMENT_FAILURE; } break; } default: { p = words->wl_word; if (strcasecmp(p, "targ") == 0) wlTarg = words; if (strcasecmp(p, "when") == 0) wlWhen = words; break; } } wl_cnt ++; words = words->wl_next; } if (wl_cnt < 3) { printf("\tmeasure '%s' failed\n", mName); printf("Error: measure %s :\n", mName); printf("\tinvalid num params\n"); return MEASUREMENT_FAILURE; } //------------------------ words = wl; if (words) words = words->wl_next; // skip if (words) words = words->wl_next; // skip results name if (words) words = words->wl_next; // Function // switch here switch (mFunctionType) { case AT_DELAY: case AT_TRIG: { // trig parameters MEASUREPTR measTrig, measTarg; measTrig = TMALLOC(struct measure, 1); measTarg = TMALLOC(struct measure, 1); measTrig->m_analysis = measTarg->m_analysis = mAnalysis; if (measure_parse_trigtarg(measTrig, words , wlTarg, "trig", errbuf) == 0) { measure_errMessage(mName, mFunction, "TRIG", errbuf, autocheck); goto err_ret1; } if ((measTrig->m_rise == -1) && (measTrig->m_fall == -1) && (measTrig->m_cross == -1) && (measTrig->m_at == 1e99)) { sprintf(errbuf, "at, rise, fall or cross must be given\n"); measure_errMessage(mName, mFunction, "TRIG", errbuf, autocheck); goto err_ret1; } while (words != wlTarg) words = words->wl_next; // hack if (words) words = words->wl_next; // skip targ if (measure_parse_trigtarg(measTarg, words , NULL, "targ", errbuf) == 0) { measure_errMessage(mName, mFunction, "TARG", errbuf, autocheck); goto err_ret1; } if ((measTarg->m_rise == -1) && (measTarg->m_fall == -1) && (measTarg->m_cross == -1)&& (measTarg->m_at == 1e99)) { sprintf(errbuf, "at, rise, fall or cross must be given\n"); measure_errMessage(mName, mFunction, "TARG", errbuf, autocheck); goto err_ret1; } // measure trig if (measTrig->m_at == 1e99) com_measure_when(measTrig); else measTrig->m_measured = measTrig->m_at; if (isnan(measTrig->m_measured)) { sprintf(errbuf, "out of interval\n"); measure_errMessage(mName, mFunction, "TRIG", errbuf, autocheck); goto err_ret1; } // measure targ com_measure_when(measTarg); if (isnan(measTarg->m_measured)) { sprintf(errbuf, "out of interval\n"); measure_errMessage(mName, mFunction, "TARG", errbuf, autocheck); goto err_ret1; } // print results if (out_line) sprintf(out_line, "%-20s= %e targ= %e trig= %e\n", mName, (measTarg->m_measured - measTrig->m_measured), measTarg->m_measured, measTrig->m_measured); else printf("%-20s= %e targ= %e trig= %e\n", mName, (measTarg->m_measured - measTrig->m_measured), measTarg->m_measured, measTrig->m_measured); *result = (measTarg->m_measured - measTrig->m_measured); ret_val = MEASUREMENT_OK; err_ret1: tfree(mAnalysis); tfree(mName); tfree(measTarg->m_vec); tfree(measTarg); tfree(measTrig->m_vec); tfree(measTrig); return ret_val; } case AT_FIND: { MEASUREPTR meas, measFind; meas = TMALLOC(struct measure, 1); measFind = TMALLOC(struct measure, 1); meas->m_analysis = measFind->m_analysis = mAnalysis; if (measure_parse_find(meas, words, wlWhen, errbuf) == 0) { measure_errMessage(mName, mFunction, "FIND", errbuf, autocheck); goto err_ret2; } if (meas->m_at == 1e99) { // find .. when statment while (words != wlWhen) words = words->wl_next; // hack if (words) words = words->wl_next; // skip targ if (measure_parse_when(measFind, words, errbuf) == 0) { measure_errMessage(mName, mFunction, "WHEN", errbuf, autocheck); goto err_ret2; } com_measure_when(measFind); if (isnan(measFind->m_measured)) { sprintf(errbuf, "out of interval\n"); measure_errMessage(mName, mFunction, "AT", errbuf, autocheck); goto err_ret2; } measure_at(meas, measFind->m_measured); meas->m_at = measFind->m_measured; } else { measure_at(meas, meas->m_at); } if (isnan(meas->m_measured)) { sprintf(errbuf, "out of interval\n"); measure_errMessage(mName, mFunction, "AT", errbuf, autocheck); goto err_ret2; } // print results if (out_line) sprintf(out_line, "%-20s= %e\n", mName, meas->m_measured); else printf("%-20s= %e\n", mName, meas->m_measured); *result = meas->m_measured; ret_val = MEASUREMENT_OK; err_ret2: tfree(mAnalysis); tfree(mName); tfree(meas->m_vec); tfree(meas); tfree(measFind->m_vec); tfree(measFind); return ret_val; } case AT_WHEN: { MEASUREPTR meas; meas = TMALLOC(struct measure, 1); meas->m_analysis = mAnalysis; if (measure_parse_when(meas, words, errbuf) == 0) { measure_errMessage(mName, mFunction, "WHEN", errbuf, autocheck); goto err_ret3; } com_measure_when(meas); if (isnan(meas->m_measured)) { sprintf(errbuf, "out of interval\n"); measure_errMessage(mName, mFunction, "WHEN", errbuf, autocheck); goto err_ret3; } // print results if (out_line) sprintf(out_line, "%-20s= %.*e\n", mName, precision, meas->m_measured); else printf("%-20s= %e\n", mName, meas->m_measured); *result = meas->m_measured; ret_val = MEASUREMENT_OK; err_ret3: tfree(mAnalysis); tfree(mName); tfree(meas->m_vec); tfree(meas->m_vec2); tfree(meas); return ret_val; } case AT_RMS: case AT_INTEG: { // trig parameters MEASUREPTR meas; meas = TMALLOC(struct measure, 1); meas->m_analysis = mAnalysis; if (measure_parse_trigtarg(meas, words , NULL, "trig", errbuf) == 0) { measure_errMessage(mName, mFunction, "TRIG", errbuf, autocheck); goto err_ret4; } // measure measure_rms_integral(meas, mFunctionType); if (isnan(meas->m_measured)) { sprintf(errbuf, "out of interval\n"); measure_errMessage(mName, mFunction, "TRIG", errbuf, autocheck); // ?? goto err_ret4; } if (meas->m_at == 1e99) meas->m_at = 0.0e0; // print results if (out_line) sprintf(out_line, "%-20s= %.*e from= %.*e to= %.*e\n", mName, precision, meas->m_measured, precision, meas->m_from, precision, meas->m_to); else printf("%-20s= %.*e from= %.*e to= %.*e\n", mName, precision, meas->m_measured, precision, meas->m_from, precision, meas->m_to); *result = meas->m_measured; ret_val = MEASUREMENT_OK; err_ret4: tfree(mAnalysis); tfree(mName); tfree(meas->m_vec); tfree(meas); return ret_val; } case AT_AVG: { // trig parameters MEASUREPTR meas; meas = TMALLOC(struct measure, 1); meas->m_analysis = mAnalysis; if (measure_parse_trigtarg(meas, words , NULL, "trig", errbuf) == 0) { measure_errMessage(mName, mFunction, "TRIG", errbuf, autocheck); goto err_ret5; } // measure measure_minMaxAvg(meas, mFunctionType); if (isnan(meas->m_measured)) { sprintf(errbuf, "out of interval\n"); measure_errMessage(mName, mFunction, "TRIG", errbuf, autocheck); // ?? goto err_ret5; } if (meas->m_at == 1e99) meas->m_at = meas->m_from; // print results if (out_line) sprintf(out_line, "%-20s= %e from= %e to= %e\n", mName, meas->m_measured, meas->m_at, meas->m_measured_at); else printf("%-20s= %e from= %e to= %e\n", mName, meas->m_measured, meas->m_at, meas->m_measured_at); *result = meas->m_measured; ret_val = MEASUREMENT_OK; err_ret5: tfree(mAnalysis); tfree(mName); tfree(meas->m_vec); tfree(meas); return ret_val; } case AT_MIN: case AT_MAX: case AT_MIN_AT: case AT_MAX_AT: { // trig parameters MEASUREPTR measTrig; measTrig = TMALLOC(struct measure, 1); measTrig->m_analysis = mAnalysis; if (measure_parse_trigtarg(measTrig, words , NULL, "trig", errbuf) == 0) { measure_errMessage(mName, mFunction, "TRIG", errbuf, autocheck); goto err_ret6; } // measure if ((mFunctionType == AT_MIN) || (mFunctionType == AT_MIN_AT)) measure_minMaxAvg(measTrig, AT_MIN); else measure_minMaxAvg(measTrig, AT_MAX); if (isnan(measTrig->m_measured)) { sprintf(errbuf, "out of interval\n"); measure_errMessage(mName, mFunction, "TRIG", errbuf, autocheck); // ?? goto err_ret6; } if ((mFunctionType == AT_MIN) || (mFunctionType == AT_MAX)) { // print results if (out_line) sprintf(out_line, "%-20s= %e at= %e\n", mName, measTrig->m_measured, measTrig->m_measured_at); else printf("%-20s= %e at= %e\n", mName, measTrig->m_measured, measTrig->m_measured_at); *result = measTrig->m_measured; } else { // print results if (out_line) sprintf(out_line, "%-20s= %e with= %e\n", mName, measTrig->m_measured_at, measTrig->m_measured); else printf("%-20s= %e with= %e\n", mName, measTrig->m_measured_at, measTrig->m_measured); *result = measTrig->m_measured_at; } ret_val = MEASUREMENT_OK; err_ret6: tfree(mAnalysis); tfree(mName); tfree(measTrig->m_vec); tfree(measTrig); return ret_val; } case AT_PP: { double minValue, maxValue; MEASUREPTR measTrig; measTrig = TMALLOC(struct measure, 1); measTrig->m_analysis = mAnalysis; if (measure_parse_trigtarg(measTrig, words , NULL, "trig", errbuf) == 0) { measure_errMessage(mName, mFunction, "TRIG", errbuf, autocheck); goto err_ret7; } // measure min measure_minMaxAvg(measTrig, AT_MIN); if (isnan(measTrig->m_measured)) { sprintf(errbuf, "out of interval\n"); measure_errMessage(mName, mFunction, "TRIG", errbuf, autocheck); // ?? goto err_ret7; } minValue = measTrig->m_measured; // measure max measure_minMaxAvg(measTrig, AT_MAX); if (isnan(measTrig->m_measured)) { sprintf(errbuf, "out of interval\n"); measure_errMessage(mName, mFunction, "TRIG", errbuf, autocheck); // ?? goto err_ret7; } maxValue = measTrig->m_measured; // print results if (out_line) sprintf(out_line, "%-20s= %e from= %e to= %e\n", mName, (maxValue - minValue), measTrig->m_from, measTrig->m_to); else printf("%-20s= %e from= %e to= %e\n", mName, (maxValue - minValue), measTrig->m_from, measTrig->m_to); *result = (maxValue - minValue); ret_val = MEASUREMENT_OK; err_ret7: tfree(mAnalysis); tfree(mName); tfree(measTrig->m_vec); tfree(measTrig); return ret_val; } case AT_DERIV: case AT_ERR: case AT_ERR1: case AT_ERR2: case AT_ERR3: { printf("\tmeasure '%s' failed\n", mName); printf("Error: measure %s :\n", mName); printf("\tfunction '%s' currently not supported\n", mFunction); break; } default: { fprintf(stderr, "ERROR: enumeration value `AT_UNKNOWN' not handled in get_measure2\nAborting...\n"); controlled_exit(EXIT_FAILURE); } } return MEASUREMENT_FAILURE; } tmpk8ny_4pz/src/frontend/com_ghelp.c0000644000175000017500000000623513546075722017675 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/wordlist.h" #include "ngspice/bool.h" #include "variable.h" #include "ngspice/cpextern.h" #include "ngspice/cpextern.h" #include "ngspice/hlpdefs.h" #include "com_ghelp.h" #include "com_help.h" /* Displays SPICE3 help for commands if that is available or a link to the * latest manuals otherwise. * * For those interested, an HTML source for the SPICE3 manual can be found at * Internet Archive using the link below. * https://web.archive.org/web/20180221111839/http://newton.ex.ac.uk/teaching/CDHW/Electronics2/userguide/ */ void com_ghelp(wordlist *wl) { #if defined(HAS_WINGUI) || defined(_MSC_VER) || defined(__MINGW32__) || defined(X_DISPLAY_MISSING) || defined(NOINTHELP) NG_IGNORE(wl); (void) printf("Internal help is no longer available!\n" "For the latest official ngspice manual in PDF format, " "please see\n" " http://ngspice.sourceforge.net/docs/ngspice-manual.pdf\n" "Or for HTML see\n" " http://ngspice.sourceforge.net/docs/ngspice-html-manual/manual.html\n"); return; #else char *npath; char *path = Help_Path; char buf[BSIZE_SP]; #ifndef X_DISPLAY_MISSING int i; #endif /* X_DISPLAY_MISSING 1 */ if (cp_getvar("helppath", CP_STRING, buf, sizeof(buf))) path = copy(buf); if (!path) { fprintf(cp_err, "Note: defaulting to old help.\n\n"); com_help(wl); return; } if ((npath = cp_tildexpand(path)) == NULL) { fprintf(cp_err, "Note: can't find help dir %s\n", path); fprintf(cp_err, "Defaulting to old help.\n\n"); com_help(wl); return; } #ifndef X_DISPLAY_MISSING /* 1 */ path = npath; if (cp_getvar("helpregfont", CP_STRING, buf, sizeof(buf))) hlp_regfontname = copy(buf); if (cp_getvar("helpboldfont", CP_STRING, buf, sizeof(buf))) hlp_boldfontname = copy(buf); if (cp_getvar("helpitalicfont", CP_STRING, buf, sizeof(buf))) hlp_italicfontname = copy(buf); if (cp_getvar("helptitlefont", CP_STRING, buf, sizeof(buf))) hlp_titlefontname = copy(buf); if (cp_getvar("helpbuttonfont", CP_STRING, buf, sizeof(buf))) hlp_buttonfontname = copy(buf); if (cp_getvar("helpinitxpos", CP_NUM, &i, 0)) hlp_initxpos = i; if (cp_getvar("helpinitypos", CP_NUM, &i, 0)) hlp_initypos = i; if (cp_getvar("helpbuttonstyle", CP_STRING, buf, sizeof(buf))) { if (cieq(buf, "left")) hlp_buttonstyle = BS_LEFT; else if (cieq(buf, "center")) hlp_buttonstyle = BS_CENTER; else if (cieq(buf, "unif")) hlp_buttonstyle = BS_UNIF; else fprintf(cp_err, "Warning: no such button style %s\n", buf); } if (cp_getvar("width", CP_NUM, &i, 0)) hlp_width = i; if (cp_getvar("display", CP_STRING, buf, sizeof(buf))) hlp_displayname = copy(buf); else if (cp_getvar("device", CP_STRING, buf, sizeof(buf))) hlp_displayname = copy(buf); else hlp_displayname = NULL; hlp_main(path, wl); return; #else com_help(wl); #endif /* X_DISPLAY_MISSING 1 */ #endif } tmpk8ny_4pz/src/frontend/com_fft.h0000644000175000017500000000030113546075722017346 0ustar carstencarsten/************* * Header file for com_fft.c * 2008 H. Vogt ************/ #ifndef ngspice_COM_FFT_H #define ngspice_COM_FFT_H void com_fft(wordlist *wl); void com_psd(wordlist *wl); #endif tmpk8ny_4pz/src/frontend/com_fft.c0000644000175000017500000003272613546075722017361 0ustar carstencarsten/********** Copyright 2008 Holger Vogt. All rights reserved. Author: 2008 Holger Vogt **********/ /* * Code to do fast fourier transform on data. */ #include "ngspice/ngspice.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/sim.h" #include "com_fft.h" #include "variable.h" #include "parse.h" #include "../misc/misc_time.h" #include "ngspice/fftext.h" #ifdef HAVE_LIBFFTW3 #include "fftw3.h" #endif void com_fft(wordlist *wl) { ngcomplex_t **fdvec = NULL; double **tdvec = NULL; double *freq, *win = NULL, *time; double span; int fpts, i, j, length, ngood; struct dvec *f, *vlist, *lv = NULL, *vec; struct pnode *pn, *names = NULL; char window[BSIZE_SP]; double maxt; double *in = NULL; #ifdef HAVE_LIBFFTW3 fftw_complex *out = NULL; fftw_plan plan_forward = NULL; #else int N, M; #endif int order; double scale; if (!plot_cur || !plot_cur->pl_scale) { fprintf(cp_err, "Error: no vectors loaded.\n"); goto done; } if (!isreal(plot_cur->pl_scale) || ((plot_cur->pl_scale)->v_type != SV_TIME)) { fprintf(cp_err, "Error: fft needs real time scale\n"); goto done; } length = (plot_cur->pl_scale)->v_length; time = (plot_cur->pl_scale)->v_realdata; span = time[length-1] - time[0]; #ifdef HAVE_LIBFFTW3 fpts = length/2 + 1; #else /* size of fft input vector is power of two and larger or equal than spice vector */ N = 1; M = 0; while (N < length) { N <<= 1; M++; } fpts = N/2 + 1; #endif win = TMALLOC(double, length); maxt = time[length-1]; if (!cp_getvar("specwindow", CP_STRING, window, sizeof(window))) strcpy(window, "hanning"); if (!cp_getvar("specwindoworder", CP_NUM, &order, 0)) order = 2; if (order < 2) order = 2; if (fft_windows(window, win, time, length, maxt, span, order) == 0) goto done; names = ft_getpnames(wl, TRUE); vlist = NULL; ngood = 0; for (pn = names; pn; pn = pn->pn_next) { vec = ft_evaluate(pn); for (; vec; vec = vec->v_link2) { if (vec->v_length != length) { fprintf(cp_err, "Error: lengths of %s vectors don't match: %d, %d\n", vec->v_name, vec->v_length, length); continue; } if (!isreal(vec)) { fprintf(cp_err, "Error: %s isn't real!\n", vec->v_name); continue; } if (vec->v_type == SV_TIME) { continue; } if (!vlist) vlist = vec; else lv->v_link2 = vec; lv = vec; ngood++; } } if (!ngood) goto done; plot_cur = plot_alloc("spectrum"); plot_cur->pl_next = plot_list; plot_list = plot_cur; plot_cur->pl_title = copy((plot_cur->pl_next)->pl_title); plot_cur->pl_name = copy("Spectrum"); plot_cur->pl_date = copy(datestring()); f = dvec_alloc(copy("frequency"), SV_FREQUENCY, VF_REAL | VF_PERMANENT | VF_PRINT, fpts, NULL); vec_new(f); freq = f->v_realdata; for (i = 0; iv_realdata; /* real input data */ f = dvec_alloc(vec_basename(vec), SV_NOTYPE, VF_COMPLEX | VF_PERMANENT, fpts, NULL); vec_new(f); fdvec[i] = f->v_compdata; /* complex output data */ vec = vec->v_link2; } #ifdef HAVE_LIBFFTW3 printf("FFT: Time span: %g s, input length: %d\n", span, length); printf("FFT: Frequency resolution: %g Hz, output length: %d\n", 1.0/span, fpts); in = fftw_malloc(sizeof(double) * (unsigned int) length); out = fftw_malloc(sizeof(fftw_complex) * (unsigned int) fpts); for (j = 0; j < length; j++) in[j] = tdvec[0][j]*win[j]; /* data have same type and length - so we need only one plan */ plan_forward = fftw_plan_dft_r2c_1d(length, in, out, FFTW_ESTIMATE); for (i = 0; i 0) { for (j = 0; j < length; j++) in[j] = tdvec[i][j]*win[j]; } fftw_execute(plan_forward); scale = (double) fpts - 1.0; for (j = 0; j < fpts; j++) { fdvec[i][j].cx_real = out[j][0]/scale; fdvec[i][j].cx_imag = out[j][1]/scale; } } fftw_destroy_plan(plan_forward); fftw_free(in); fftw_free(out); #else /* Green's FFT */ printf("FFT: Time span: %g s, input length: %d, zero padding: %d\n", span, length, N-length); printf("FFT: Frequency resolution: %g Hz, output length: %d\n", 1.0/span, fpts); for (i = 0; ipl_scale) { fprintf(cp_err, "Error: no vectors loaded.\n"); goto done; } if (!isreal(plot_cur->pl_scale) || ((plot_cur->pl_scale)->v_type != SV_TIME)) { fprintf(cp_err, "Error: fft needs real time scale\n"); goto done; } length = (plot_cur->pl_scale)->v_length; time = (plot_cur->pl_scale)->v_realdata; span = time[length-1] - time[0]; // get filter length from parameter input s = wl->wl_word; ave = ft_numparse(&s, FALSE); if (!ave || (*ave < 1.0)) { fprintf(cp_out, "Number of averaged data points: %d\n", 1); smooth = 1; } else { smooth = (int)(*ave); } wl = wl->wl_next; #ifdef HAVE_LIBFFTW3 fpts = length/2 + 1; #else /* size of fft input vector is power of two and larger or equal than spice vector */ N = 1; M = 0; while (N < length) { N <<= 1; M++; } fpts = N/2 + 1; #endif win = TMALLOC(double, length); maxt = time[length-1]; if (!cp_getvar("specwindow", CP_STRING, window, sizeof(window))) strcpy(window, "hanning"); if (!cp_getvar("specwindoworder", CP_NUM, &order, 0)) order = 2; if (order < 2) order = 2; if (fft_windows(window, win, time, length, maxt, span, order) == 0) goto done; names = ft_getpnames(wl, TRUE); vlist = NULL; ngood = 0; for (pn = names; pn; pn = pn->pn_next) { vec = ft_evaluate(pn); for (; vec; vec = vec->v_link2) { if (vec->v_length != (int)length) { fprintf(cp_err, "Error: lengths of %s vectors don't match: %d, %d\n", vec->v_name, vec->v_length, length); continue; } if (!isreal(vec)) { fprintf(cp_err, "Error: %s isn't real!\n", vec->v_name); continue; } if (vec->v_type == SV_TIME) { continue; } if (!vlist) vlist = vec; else lv->v_link2 = vec; lv = vec; ngood++; } } if (!ngood) goto done; plot_cur = plot_alloc("spectrum"); plot_cur->pl_next = plot_list; plot_list = plot_cur; plot_cur->pl_title = copy((plot_cur->pl_next)->pl_title); plot_cur->pl_name = copy("PSD"); plot_cur->pl_date = copy(datestring()); f = dvec_alloc(copy("frequency"), SV_FREQUENCY, VF_REAL | VF_PERMANENT | VF_PRINT, fpts, NULL); vec_new(f); freq = f->v_realdata; for (i = 0; i < fpts; i++) #ifdef HAVE_LIBFFTW3 freq[i] = i*1./span; #else freq[i] = i*1./span*length/N; #endif tdvec = TMALLOC(double*, ngood); fdvec = TMALLOC(ngcomplex_t*, ngood); for (i = 0, vec = vlist; iv_realdata; /* real input data */ f = dvec_alloc(vec_basename(vec), SV_NOTYPE, //vec->v_type VF_COMPLEX | VF_PERMANENT, fpts, NULL); vec_new(f); fdvec[i] = f->v_compdata; /* complex output data */ vec = vec->v_link2; } #ifdef HAVE_LIBFFTW3 printf("PSD: Time span: %g s, input length: %d\n", span, length); printf("PSD: Frequency resolution: %g Hz, output length: %d\n", 1.0/span, fpts); reald = TMALLOC(double, fpts); in = fftw_malloc(sizeof(double) * (unsigned int) length); out = fftw_malloc(sizeof(fftw_complex) * (unsigned int) fpts); for (j = 0; j < length; j++) in[j] = tdvec[0][j]*win[j]; /* data have same type and length - so we need only one plan */ plan_forward = fftw_plan_dft_r2c_1d(length, in, out, FFTW_ESTIMATE); for (i = 0; i 0) { for (j = 0; j < length; j++) in[j] = tdvec[i][j]*win[j]; } fftw_execute(plan_forward); intres = (double)length * (double)length; fdvec[i][0].cx_real = out[0][0]*out[0][0]/intres; fdvec[i][0].cx_imag = 0; noipower = fdvec[i][0].cx_real; for (j = 1; j < fpts-1; j++) { fdvec[i][j].cx_real = 2.* (out[j][0]*out[j][0] + out[j][1]*out[j][1])/intres; fdvec[i][j].cx_imag = 0; noipower += fdvec[i][j].cx_real; if (!finite(noipower)) break; } fdvec[i][fpts-1].cx_real = out[fpts-1][0]*out[fpts-1][0]/intres; fdvec[i][fpts-1].cx_imag = 0; noipower += fdvec[i][fpts-1].cx_real; #else /* Green's FFT */ printf("PSD: Time span: %g s, input length: %d, zero padding: %d\n", span, length, N-length); printf("PSD: Frequency resolution: %g Hz, output length: %d\n", 1.0/span, fpts); reald = TMALLOC(double, N); for (i = 0; i>1; for (j = 0; j < hsmooth; j++) { sum = 0.; for (jj = 0; jj < hsmooth + j; jj++) sum += fdvec[i][jj].cx_real; sum /= (double) (hsmooth + j); reald[j] = sum; } for (j = hsmooth; j < fpts-hsmooth; j++) { sum = 0.; for (jj = 0; jj < smooth; jj++) sum += fdvec[i][j-hsmooth+jj].cx_real; sum /= (double) smooth; reald[j] = sum; } for (j = fpts-hsmooth; j < fpts; j++) { sum = 0.; for (jj = 0; jj < fpts+hsmooth-j-1; jj++) sum += fdvec[i][j-hsmooth+jj+1].cx_real; sum /= (double) (fpts+hsmooth-j-1); reald[j] = sum; } for (j = 0; j < fpts; j++) fdvec[i][j].cx_real = reald[j] * (double)fpts / freq[fpts - 1]; } #ifdef HAVE_LIBFFTW3 fftw_destroy_plan(plan_forward); fftw_free(in); fftw_free(out); #endif done: tfree(tdvec); tfree(fdvec); tfree(win); tfree(reald); free_pnode(names); } tmpk8ny_4pz/src/frontend/com_asciiplot.c0000644000175000017500000000032413546075722020556 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/bool.h" #include "ngspice/wordlist.h" #include "plotting/plotit.h" #include "com_asciiplot.h" void com_asciiplot(wordlist *wl) { plotit(wl, NULL, "lpr"); } tmpk8ny_4pz/src/frontend/device.h0000644000175000017500000000126213546075722017177 0ustar carstencarsten/************* * Header file for device.c * 1999 E. Rouat * Modified: 2000 AlansFixes ************/ #ifndef ngspice_DEVICE_H #define ngspice_DEVICE_H #define LEFT_WIDTH 11 #define DEV_WIDTH 21 int printstr_n(dgen *dg, IFparm *, int); int printstr_m(dgen *dg, IFparm *, int); void param_forall(dgen *dg, int flags); void param_forall_old(dgen *dg, int flags); void listparam(wordlist *p, dgen *dg); int bogus1(dgen *dg, IFparm *, int); int bogus2(dgen *dg, IFparm *, int); int printvals(dgen *dg, IFparm *p, int i); int printvals_old(dgen *dg, IFparm *p, int i); void old_show(wordlist *wl); /* DEVHELP*/ void devhelp(wordlist *wl); void printdesc(IFparm p, bool csv); #endif tmpk8ny_4pz/src/frontend/cpitf.c0000644000175000017500000003455413546075722017052 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group ***********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/fteparse.h" #include "ngspice/stringskip.h" #include "cpitf.h" #include "com_let.h" #include "com_set.h" #include "define.h" #include "misccoms.h" #include "terminal.h" #include "completion.h" #include "variable.h" /* Set some standard variables and aliases, etc, and init the ccom stuff. Called by fcn main() */ /* Macros to expand a macro to its value and then quote that value */ #undef stringit #undef stringit2 #define stringit2(x) #x #define stringit(x) stringit2(x) void ft_cpinit(void) { bool found = FALSE, t = TRUE; char buf[BSIZE_SP], **x, *s, *r, *copys; struct comm *c; int i; FILE *fp; static char *predefs[] = { "yes", "1", "TRUE", "1", "no", "0", "FALSE", "0", "pi", stringit(CONSTpi), "e", stringit(CONSTnap), "c", stringit(CONSTc), "i", "0,1", "kelvin", stringit(CONSTKtoC_for_str), "echarge", stringit(CHARGE), "boltz", stringit(CONSTboltz), "planck", stringit(CONSTplanck) }; static char *udfs[] = { "max(x,y)", "(x gt y) * x + (x le y) * y", "min(x,y)", "(x lt y) * x + (x ge y) * y", "vdb(x)", "db(v(x))", "vdb(x,y)", "db(v(x) - v(y))", "vi(x)", "im(v(x))", "vi(x,y)", "im(v(x) - v(y))", "vm(x)", "mag(v(x))", "vm(x,y)", "mag(v(x) - v(y))", "vg(x)", "group_delay(v(x))", //A.Rroldan 10/06/05 group delay new function "gd(x)", "group_delay(v(x))", //A.Rroldan 10/06/05 group delay new function "vp(x)", "ph(v(x))", "vp(x,y)", "ph(v(x) - v(y))", "vr(x)", "re(v(x))", "vr(x,y)", "re(v(x) - v(y))" }; #ifndef SHARED_MODULE /* if TIOCSTI is defined (not available in MS Windows: Make escape the break character. So the user can type ahead... fcn defined in complete.c. */ cp_ccon(TRUE); #endif /* Initialize io, cp_chars[], variable "history" in init.c. */ cp_init(); /* If command completion is available (global variable cp_nocc set in main.c by command line option -q) */ if (!cp_nocc) { /* Add commands... */ for (c = cp_coms; c->co_func; c++) { if (c->co_spiceonly && ft_nutmeg) continue; cp_addcomm(c->co_comname, c->co_cctypes[0], c->co_cctypes[1], c->co_cctypes[2], c->co_cctypes[3]); cp_addkword(CT_COMMANDS, c->co_comname); } /* And keywords... These are the ones that are constant... */ if (!ft_nutmeg) { cp_addkword(CT_LISTINGARGS, "deck"); cp_addkword(CT_LISTINGARGS, "logical"); cp_addkword(CT_LISTINGARGS, "physical"); cp_addkword(CT_LISTINGARGS, "expand"); cp_addkword(CT_STOPARGS, "when"); cp_addkword(CT_STOPARGS, "after"); } cp_addkword(CT_PLOT, "new"); cp_addkword(CT_PLOTKEYWORDS, "xlimit"); cp_addkword(CT_PLOTKEYWORDS, "ylimit"); cp_addkword(CT_PLOTKEYWORDS, "vs"); cp_addkword(CT_PLOTKEYWORDS, "xindices"); cp_addkword(CT_PLOTKEYWORDS, "xcompress"); cp_addkword(CT_PLOTKEYWORDS, "xdelta"); cp_addkword(CT_PLOTKEYWORDS, "ydelta"); cp_addkword(CT_PLOTKEYWORDS, "lingrid"); cp_addkword(CT_PLOTKEYWORDS, "loglog"); cp_addkword(CT_PLOTKEYWORDS, "linear"); cp_addkword(CT_PLOTKEYWORDS, "xlog"); cp_addkword(CT_PLOTKEYWORDS, "ylog"); cp_addkword(CT_PLOTKEYWORDS, "polar"); cp_addkword(CT_PLOTKEYWORDS, "smith"); cp_addkword(CT_PLOTKEYWORDS, "smithgrid"); cp_addkword(CT_PLOTKEYWORDS, "nointerp"); cp_addkword(CT_PLOTKEYWORDS, "title"); cp_addkword(CT_PLOTKEYWORDS, "xlabel"); cp_addkword(CT_PLOTKEYWORDS, "ylabel"); cp_addkword(CT_PLOTKEYWORDS, "linplot"); cp_addkword(CT_PLOTKEYWORDS, "combplot"); cp_addkword(CT_PLOTKEYWORDS, "pointplot"); cp_addkword(CT_RUSEARGS, "time"); cp_addkword(CT_RUSEARGS, "space"); cp_addkword(CT_RUSEARGS, "faults"); cp_addkword(CT_RUSEARGS, "elapsed"); cp_addkword(CT_RUSEARGS, "totiter"); cp_addkword(CT_RUSEARGS, "traniter"); cp_addkword(CT_RUSEARGS, "tranpoints"); cp_addkword(CT_RUSEARGS, "accept"); cp_addkword(CT_RUSEARGS, "rejected"); cp_addkword(CT_RUSEARGS, "time"); cp_addkword(CT_RUSEARGS, "trantime"); cp_addkword(CT_RUSEARGS, "lutime"); cp_addkword(CT_RUSEARGS, "solvetime"); cp_addkword(CT_RUSEARGS, "transolvetime"); cp_addkword(CT_RUSEARGS, "loadtime"); cp_addkword(CT_RUSEARGS, "all"); cp_addkword(CT_VECTOR, "all"); for (x = ft_setkwords; *x; x++) cp_addkword(CT_VARIABLES, *x); for (i = 0; ; i++) { if ((s = ft_typenames(i)) == NULL) break; cp_addkword(CT_TYPENAMES, s); } } cp_vset("program", CP_STRING, cp_program); /* Make the prompt use only the last component of the path... */ if (DIR_TERM) { for (s = cp_program; s && *s; s++) ; s--; while ((s > cp_program) && (*s != DIR_TERM)) s--; if (*s == DIR_TERM) s++; (void) strcpy(buf, s); for (s = buf; *s && (*s != '.'); s++) ; *s = '\0'; (void) strcat(buf, " ! -> "); } else { (void) sprintf(buf, "%s ! -> ", cp_program); } cp_vset("prompt", CP_STRING, buf); cp_vset("noglob", CP_BOOL, &t); cp_vset("brief", CP_BOOL, &t); /* Make vectors from values in predefs[] for the current plot. Define functions from entries in udfs[] (like user defined functions). */ { wordlist wl1, wl2, wl3; wl1.wl_next = &wl2; wl1.wl_prev = NULL; wl2.wl_next = NULL; wl2.wl_prev = &wl1; wl1.wl_word = "if"; wl2.wl_word = "1"; cp_setalias("begin", &wl1); wl1.wl_next = NULL; wl1.wl_word = "end"; cp_setalias("endif", &wl1); cp_setalias("endwhile", &wl1); cp_setalias("endforeach", &wl1); cp_setalias("endrepeat", &wl1); cp_setalias("enddowhile", &wl1); wl1.wl_word = "help"; cp_setalias("?", &wl1); wl1.wl_next = &wl2; wl2.wl_next = &wl3; wl2.wl_prev = &wl1; wl3.wl_prev = &wl2; wl3.wl_next = NULL; wl2.wl_word = "="; for (i = 0; (size_t) i < NUMELEMS(predefs); i += 2) { wl1.wl_word = predefs[i]; wl3.wl_word = predefs[i + 1]; com_let(&wl1); } wl2.wl_next = NULL; for (i = 0; (size_t) i < NUMELEMS(udfs); i += 2) { wl1.wl_word = udfs[i]; wl2.wl_word = udfs[i + 1]; com_define(&wl1); } } /* set variables to read program configuration into special spinit for VS */ #ifdef _MSC_VER #ifdef CONFIG64 #ifdef NGDEBUG cp_vset("pg_config", CP_STRING, "d64"); #else cp_vset("pg_config", CP_STRING, "r64"); #endif #else #ifdef NGDEBUG cp_vset("pg_config", CP_STRING, "d32"); #else cp_vset("pg_config", CP_STRING, "r32"); #endif #endif #endif /* set a variable to announce windows console (to be used in unselecting plotting) */ #if (defined(_MSC_VER) || defined(__MINGW32__)) && !defined(HAS_WINGUI) cp_vset("win_console", CP_BOOL, &t); #endif /* NGSPICEDATADIR has been set to path "$dprefix/share/ngspice" in configure.ac, Spice_Lib_Dir has been set to NGSPICEDATADIR in conf.c, may be overridden by environmental variable SPICE_LIB_DIR in ivars(). Lib_Path has been set to Spice_Lib_Dir adding /scripts in ivars() */ if (Lib_Path && *Lib_Path) { /* set variable 'sourcepath' */ if (Inp_Path && *Inp_Path) (void) sprintf(buf, "sourcepath = ( %s %s %s )", DIR_CWD, Lib_Path, Inp_Path); else (void) sprintf(buf, "sourcepath = ( %s %s )", DIR_CWD, Lib_Path); { wordlist *wl; wl = cp_doglob(cp_lexer(buf)); cp_striplist(wl); com_set(wl); wl_free(wl); } /* Now source the standard startup file spinit or tclspinit. */ /* jump over leading spaces */ for (copys = s = cp_tildexpand(Lib_Path); copys && *copys; ) { s = skip_ws(s); /* copy s into buf until space is seen, r is the actual position */ for (r = buf; *s && !isspace_c(*s); r++, s++) *r = *s; tfree(copys); /* add a path separator to buf at actual position */ (void) strcpy(r, DIR_PATHSEP); #ifdef TCL_MODULE /* add "tclspinit" to buf after actual position */ (void) strcat(r, "tclspinit"); #else /* add "spinit" to buf after actual position */ (void) strcat(r, "spinit"); #endif if ((fp = fopen(buf, "r")) != NULL) { cp_interactive = FALSE; inp_spsource(fp, TRUE, buf, FALSE); cp_interactive = TRUE; found = TRUE; break; #if defined(HAS_WINGUI) || defined(__MINGW32__) || defined(_MSC_VER) /* search in local directory where ngspice.exe resides */ #if defined TCL_MODULE } else if ((fp = fopen("./tclspinit", "r")) != NULL) { #else } else if ((fp = fopen("./spinit", "r")) != NULL) { #endif cp_interactive = FALSE; inp_spsource(fp, TRUE, buf, FALSE); cp_interactive = TRUE; found = TRUE; break; #endif } else if (ft_controldb) { fprintf(cp_err, "Note: can't open \"%s\".\n", buf); } } if (!found) fprintf(cp_err, "Note: can't find init file.\n"); } tcap_init(); } /* Decide whether a condition is TRUE or not. * In erroneous situations the condition shall evaluate to FALSE * additionally error messages might have been printed. */ bool cp_istrue(wordlist *wl) { struct dvec *v; struct pnode *names; bool rv; /* First do all the csh-type stuff here... */ wl = wl_copy(wl); wl = cp_variablesubst(wl); /* return FALSE if this did not expand to anything */ if (!wl) return FALSE; /* backquote '`' substitution */ wl = cp_bquote(wl); /* strip bit number eight */ cp_striplist(wl); /* parse the condition */ names = ft_getpnames(wl, TRUE); wl_free(wl); /* evaluate the parsed condition. * boolean expressions evaluate to real 1.0 or 0.0 */ v = ft_evaluate(names); /* non boolean expressions will be considered TRUE * if at least one real or complex vector element is non zero */ rv = !vec_iszero(v); /* va: garbage collection for v, if pnode names is no simple value */ if (names && !names->pn_value && v) vec_free(v); free_pnode(names); /* free also v, if pnode names is simple value */ return rv; } /* This gets called before every command is executed... from fcns do_command() or do_block() in control.c */ void cp_periodic(void) { ft_setflag = FALSE; ft_intrpt = FALSE; ft_ckspace(); /* check for max. data size (resource.c) */ ft_checkkids(); /* check for jobs (only if OK_ASPICE is defined, apsice.c) */ vec_gc(); /* remove vectors which do not have permanent flag set (vectors.c) */ } void cp_doquit(void) { com_quit(NULL); } /* This is how we deal with emulation of commands by scripts... If the script * is found, then set the variables argc and argv and call the script. Note * that this also allows us to type a filename to load a spice deck... */ bool cp_oddcomm(char *s, wordlist *wl) { FILE *fp; if ((fp = inp_pathopen(s, "r")) != NULL) { /* Buffer for building string, unless unusually long */ char buf[BSIZE_SP]; char *p_buf_active; /* buffer in use */ static const char header[] = "argc = %d argv = ( "; /* Bound on initial length: Header - 2 for %d - 1 for null + * + 2 for closing ')' and '\0' + bound on length of int * as string */ size_t n_byte_data = sizeof header / sizeof *header + 3 * sizeof(int) - 1; (void) fclose(fp); /* Step through word list finding length */ { wordlist *wl1; for (wl1 = wl; wl1 != (wordlist *) NULL; wl1 = wl1->wl_next) { n_byte_data += strlen(wl1->wl_word) + 1; } } /* Use fixed buffer unless it is too small */ if (n_byte_data <= sizeof buf / sizeof *buf) { p_buf_active = buf; } else { p_buf_active = TMALLOC(char, n_byte_data); } /* Step through word list again to build string */ { char *p_dst = p_buf_active; p_dst += sprintf(p_dst, header, wl_length(wl)); for ( ; wl != (wordlist *) NULL; wl = wl->wl_next) { const char *p_src = wl->wl_word; for ( ; ; p_src++) { /* copy source string */ const char ch_src = *p_src; if (ch_src == '\0') { *p_dst++ = ' '; break; } *p_dst++ = ch_src; } /* end of loop copying source string */ } /* end of loop over words in list */ /* Add ')' and terminate string */ *p_dst++ = ')'; *p_dst = '\0'; } /* end of block building string */ wordlist *setarg = cp_lexer(p_buf_active); /* Free buffer allocation if made */ if (p_buf_active != buf) { txfree(p_buf_active); } com_set(setarg); wl_free(setarg); inp_source(s); cp_remvar("argc"); cp_remvar("argv"); return TRUE; } if (wl && eq(wl->wl_word, "=")) { wordlist *ww = wl_cons(copy(s), wl); com_let(ww); wl_delete_slice(ww, ww->wl_next); return (TRUE); } return (FALSE); } /* end of function cp_oddcomm */ tmpk8ny_4pz/src/frontend/com_echo.c0000644000175000017500000000141013546075722017502 0ustar carstencarsten/************* * com_echo.c ************/ #include "ngspice/ngspice.h" #include "ngspice/wordlist.h" #include "ngspice/bool.h" #include "com_echo.h" #include "quote.h" #include "ngspice/cpextern.h" void com_echo(wordlist *wlist) { char*copyword; bool nl = TRUE; if (wlist && eq(wlist->wl_word, "-n")) { wlist = wlist->wl_next; nl = FALSE; } while (wlist) { /* fputs(cp_unquote(wlist->wl_word), cp_out); very bad the string allocated by cp_unquote could not be freed: memory leak*/ copyword = cp_unquote(wlist->wl_word); fputs(copyword, cp_out); tfree(copyword); if (wlist->wl_next) fputs(" ", cp_out); wlist = wlist->wl_next; } if (nl) fputs("\n", cp_out); } tmpk8ny_4pz/src/frontend/where.c0000644000175000017500000000176713546075722017057 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ftehelp.h" #include "ngspice/hlpdefs.h" #include "circuits.h" #include "where.h" void com_where(wordlist *wl) { char *msg; NG_IGNORE(wl); /*CDHW typing where with no current circuit caused crashes CDHW*/ if (!ft_curckt) { fprintf(cp_err, "There is no current circuit\n"); return; } else if (ft_curckt->ci_ckt != NULL) { fprintf(cp_err, "No unconverged node found.\n"); return; } msg = ft_sim->nonconvErr (ft_curckt->ci_ckt, NULL); printf("%s", msg); /* if (ft_curckt) { msg = ft_sim->nonconvErr (ft_curckt->ci_ckt, 0); fprintf(cp_out, "%s", msg); } else { fprintf(cp_err, "Error: no circuit loaded.\n"); } */ } tmpk8ny_4pz/src/frontend/dotcards.h0000644000175000017500000000025213546075722017541 0ustar carstencarsten/************* * Header file for dotcards.c * 1999 E. Rouat ************/ #ifndef ngspice_DOTCARDS_H #define ngspice_DOTCARDS_H wordlist *gettoks(char *s); #endif tmpk8ny_4pz/src/frontend/newcoms.c0000644000175000017500000001360413546075722017411 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. **********/ /* * Some new post-processor commands having to do with vectors. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/fteparse.h" #include "ngspice/dvec.h" #include "ngspice/stringskip.h" #include "newcoms.h" #include "quote.h" /* * reshape v(1) vxx#branch [10] * reshape v(1) vxx#branch [10,4] * reshape v(1) [,4] */ void com_reshape(wordlist *wl) { wordlist *w, *w2, *wlast, *wsave; char *p; struct dvec *dv, *d; int numdims; int *dims; int local_dims[MAXDIMS]; int state; int empty; int err; int missing, nprod, prod; char *vname; int i; do { if (!wl) return; /* find the first '[' */ p = NULL; for (w = wl; w; w = w->wl_next) { if ((p = strchr(w->wl_word, '[')) != NULL) break; } if (p && *p) { if (p != w->wl_word) w = w->wl_next; wlast = w; *p++ = '\0'; } else { wlast = NULL; } /* get the dimensions */ dims = local_dims; numdims = 0; state = 0; empty = -1; err = 0; wsave = NULL; do { if (!p || !*p) { if (!wlast) break; p = wlast->wl_word; if (state == 2) wsave = wlast; else wsave = NULL; wlast = wlast->wl_next; } p = skip_ws(p); switch (state) { case 0: /* p just at or before a number */ if (numdims >= MAXDIMS) { if (numdims == MAXDIMS) printf("Maximum of %d dimensions possible\n", MAXDIMS); numdims += 1; } else if (!isdigit_c(*p)) { if (empty > -1) { printf("dimensions underspecified at dimension %d\n", numdims++); err = 1; } else { empty = numdims; dims[numdims++] = 1; } } else { dims[numdims++] = atoi(p); while (isdigit_c(*p)) p++; } state = 1; break; case 1: /* p after a number, looking for ',' or ']' */ if (*p == ']') { p++; state = 2; } else if (*p == ',') { p++; state = 0; } else if (isdigit_c(*p)) { state = 0; break; } else if (!isspace_c(*p)) { /* error */ state = 4; } break; case 2: /* p after a ']', either at the end or looking for '[' */ if (*p == '[') { p++; state = 0; } else { state = 3; } } p = skip_ws(p); } while (state < 3); if (state == 2) { wlast = wsave; } else if ((state == 4 || state < 2) && ((state != 0 || p) && *p)) { printf("syntax error specifying dimensions\n"); return; } if (numdims > MAXDIMS) continue; if (err) continue; /* Copy dimensions from the first item if none are explicitly given */ if (!numdims) { /* Copy from the first */ vname = cp_unquote(wl->wl_word); dv = vec_get(vname); if (!dv) { printf("'%s' dimensions vector not found\n", vname); return; } numdims = dv->v_numdims; dims = dv->v_dims; wl = wl->wl_next; empty = -1; /* just in case */ } prod = 1; for (i = 0; i < numdims; i++) prod *= dims[i]; /* resize each vector */ for (w2 = wl; w2 && w2 != w; w2 = w2->wl_next) { vname = cp_unquote(w2->wl_word); dv = vec_get(vname); if (!dv) { printf("'%s' vector not found\n", vname); continue; } /* The name may expand to several vectors */ for (d = dv; d; d = d->v_link2) { nprod = 1; for (i = 0; i < d->v_numdims; i++) nprod *= d->v_dims[i]; if (nprod != d->v_length) { printf("dimensions of \"%s\" were inconsistent\n", d->v_name); nprod = d->v_length; } missing = nprod / prod; if (missing * prod != nprod) { printf("dimensions don't fit \"%s\" (total size = %d)\n", d->v_name, nprod); continue; } if (missing > 1 && empty < 0) { /* last dimension unspecified */ d->v_numdims = numdims + 1; d->v_dims[numdims] = missing; } else { d->v_numdims = numdims; } /* fill in dimensions */ for (i = 0; i < numdims; i++) { if (i == empty) d->v_dims[i] = missing; else d->v_dims[i] = dims[i]; } } if (vname) tfree(vname); } } while ((wl = wlast) != NULL); } tmpk8ny_4pz/src/frontend/postcoms.h0000644000175000017500000000071013546075722017604 0ustar carstencarsten/************* * Header file for postcoms.c * 1999 E. Rouat ************/ #ifndef ngspice_POSTCOMS_H #define ngspice_POSTCOMS_H void com_unlet(wordlist *wl); void com_load(wordlist *wl); void com_print(wordlist *wl); void com_write(wordlist *wl); void com_write_sparam(wordlist *wl); void com_transpose(wordlist *wl); void com_cross(wordlist *wl); void com_destroy(wordlist *wl); void com_splot(wordlist *wl); void destroy_const_plot(void); #endif tmpk8ny_4pz/src/devload0000644000175000017500000000054313546075722015312 0ustar carstencarsten* initialize a device plot .control begin unset devfile if $argc = 1 set devfile = $argv[1] load $devfile strcmp flag "$?&y" "1" if ($flag = 0) let yaxis = y[0] transpose all let xaxis = x[0] transpose all setscale yaxis end else echo "usage: devload " end unset devfile flag end tmpk8ny_4pz/src/tclspice.map0000644000175000017500000000007013546075722016251 0ustar carstencarstenTCLSPICE_0.2 { global: Spice_Init; local: *; }; tmpk8ny_4pz/src/ngsconvert.c0000644000175000017500000002765113546075722016316 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Main routine for sconvert. */ #include "ngspice/ngspice.h" #include #include "ngspice/fteinput.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/sim.h" #include "ngspice/suffix.h" #include "frontend/display.h" #include "../misc/mktemp.h" FILE *cp_in = NULL; FILE *cp_out = NULL; FILE *cp_err = NULL; FILE *cp_curin = NULL; FILE *cp_curout = NULL; FILE *cp_curerr = NULL; int cp_maxhistlength; bool cp_debug = FALSE; char cp_chars[128]; bool cp_nocc = TRUE; bool ft_stricterror = FALSE; bool ft_parsedb = FALSE; struct circ *ft_curckt = NULL; struct plot *plot_cur = NULL; char *cp_program = "sconvert"; #define tfread(ptr, siz, nit, fp) if (fread((ptr), (siz), \ (nit), (fp)) != (nit)) { \ fprintf(cp_err, "Error: unexpected EOF\n"); \ return (NULL); } #define tfwrite(ptr, siz, nit, fp) if (fwrite((ptr), (siz), \ (nit), (fp)) != (nit)) { \ fprintf(cp_err, "Write error\n"); \ return; } void Input(REQUEST *request, RESPONSE *response) { switch (request->option) { case char_option: response->reply.ch = inchar(request->fp); response->option = request->option; break; default: /* just ignore, since we don't want a million error messages */ response->option = error_option; break; } return; } static char * fixdate(char *date) { char buf[20]; int i; (void) strcpy(buf, date); for (i = 17; i > 8; i--) buf[i] = buf[i - 1]; buf[8] = ' '; buf[18] = '\0'; return (copy(buf)); } static struct plot * oldread(char *name) { struct plot *pl; char buf[BSIZE_SP]; struct dvec *v, *end = NULL; short nv; /* # vars */ long np; /* # points/var. */ long i, j; short a; /* The magic number. */ float f1, f2; FILE *fp; if (!(fp = fopen(name, "r"))) { perror(name); return (NULL); } pl = TMALLOC(struct plot, 1); tfread(buf, 1, 80, fp); buf[80] = '\0'; for (i = (int) strlen(buf) - 1; (i > 1) && (buf[i] == ' '); i--) ; buf[i + 1] = '\0'; pl->pl_title = copy(buf); tfread(buf, 1, 16, fp); buf[16] = '\0'; pl->pl_date = copy(fixdate(buf)); tfread(&nv, sizeof (short), 1, fp); tfread(&a, sizeof (short), 1, fp); if (a != 4) fprintf(cp_err, "Warning: magic number 4 is wrong...\n"); for (i = 0; i < nv; i++) { v = dvec_alloc(NULL, SV_NOTYPE, 0, 0, NULL); if (end) end->v_next = v; else pl->pl_scale = pl->pl_dvecs = v; end = v; tfread(buf, 1, 8, fp); buf[8] = '\0'; v->v_name = copy(buf); } for (v = pl->pl_dvecs; v; v = v->v_next) { tfread(&a, sizeof (short), 1, fp); v->v_type = a; } /* If the first output variable is type FREQ then there is complex * data, otherwise the data is real. */ i = pl->pl_dvecs->v_type; if ((i == SV_FREQUENCY) || (i == SV_POLE) || (i == SV_ZERO)) for (v = pl->pl_dvecs; v; v = v->v_next) v->v_flags |= VF_COMPLEX; else for (v = pl->pl_dvecs; v; v = v->v_next) v->v_flags |= VF_REAL; /* Check the node indices -- this shouldn't be a problem ever. */ for (i = 0; i < nv; i++) { tfread(&a, sizeof(short), 1, fp); if (a != i + 1) fprintf(cp_err, "Warning: output %d should be %ld\n", a, i); } tfread(buf, 1, 24, fp); buf[24] = '\0'; pl->pl_name = copy(buf); /* Now to figure out how many points of data there are left in * the file. */ i = ftell(fp); (void) fseek(fp, 0L, SEEK_END); j = ftell(fp); (void) fseek(fp, i, SEEK_SET); i = j - i; if (i % 8) { /* Data points are always 8 bytes... */ fprintf(cp_err, "Error: alignment error in data\n"); (void) fclose(fp); return (NULL); } i = i / 8; if (i % nv) { fprintf(cp_err, "Error: alignment error in data\n"); (void) fclose(fp); return (NULL); } np = i / nv; for (v = pl->pl_dvecs; v; v = v->v_next) { dvec_realloc(v, (int) np, NULL); } for (i = 0; i < np; i++) { /* Read in the output vector for point i. If the type is * complex it will be float and we want double. */ for (v = pl->pl_dvecs; v; v = v->v_next) { if (v->v_flags & VF_REAL) { tfread(&v->v_realdata[i], sizeof (double), 1, fp); } else { tfread(&f1, sizeof (float), 1, fp); tfread(&f2, sizeof (float), 1, fp); realpart(v->v_compdata[i]) = f1; imagpart(v->v_compdata[i]) = f2; } } } (void) fclose(fp); return (pl); } static void oldwrite(char *name, bool app, struct plot *pl) { short four = 4, k; struct dvec *v; float f1, f2, zero = 0.0; char buf[80]; int i, j, tp = VF_REAL, numpts = 0, numvecs = 0; FILE *fp; if (!(fp = fopen(name, app ? "a" : "w"))) { perror(name); return; } for (v = pl->pl_dvecs; v; v = v->v_next) { if (v->v_length > numpts) numpts = v->v_length; numvecs++; if (iscomplex(v)) tp = VF_COMPLEX; } /* This may not be a good idea... */ if (tp == VF_COMPLEX) pl->pl_scale->v_type = SV_FREQUENCY; for (i = 0; i < 80; i++) buf[i] = ' '; for (i = 0; i < 80; i++) if (pl->pl_title[i] == '\0') break; else buf[i] = pl->pl_title[i]; tfwrite(buf, 1, 80, fp); for (i = 0; i < 80; i++) buf[i] = ' '; for (i = 0; i < 16; i++) if (pl->pl_date[i] == '\0') break; else buf[i] = pl->pl_date[i]; tfwrite(buf, 1, 16, fp); tfwrite(&numvecs, sizeof (short), 1, fp); tfwrite(&four, sizeof (short), 1, fp); for (v = pl->pl_dvecs; v; v = v->v_next) { for (j = 0; j < 80; j++) buf[j] = ' '; for (j = 0; j < 8; j++) if (v->v_name[j] == '\0') break; else buf[j] = v->v_name[j]; tfwrite(buf, 1, 8, fp); } for (v = pl->pl_dvecs; v; v = v->v_next) { j = (short) v->v_type; tfwrite(&j, sizeof (short), 1, fp); } for (k = 1; k < numvecs + 1; k++) tfwrite(&k, sizeof (short), 1, fp); for (j = 0; j < 80; j++) buf[j] = ' '; for (j = 0; j < 24; j++) if (pl->pl_name[j] == '\0') break; else buf[j] = pl->pl_name[j]; tfwrite(buf, 1, 24, fp); for (i = 0; i < numpts; i++) { for (v = pl->pl_dvecs; v; v = v->v_next) { if ((tp == VF_REAL) && isreal(v)) { if (i < v->v_length) { tfwrite(&v->v_realdata[i], sizeof (double), 1, fp); } else { tfwrite(&v->v_realdata[v->v_length - 1], sizeof (double), 1, fp); } } else if ((tp == VF_REAL) && iscomplex(v)) { fprintf(cp_err, "internal error, everything real, yet complex ...\n"); exit(1); } else if ((tp == VF_COMPLEX) && isreal(v)) { if (i < v->v_length) f1 = (float) v->v_realdata[i]; else f1 = (float) v->v_realdata[v->v_length - 1]; tfwrite(&f1, sizeof (float), 1, fp); tfwrite(&zero, sizeof (float), 1, fp); } else if ((tp == VF_COMPLEX) && iscomplex(v)) { if (i < v->v_length) { f1 = (float) realpart(v->v_compdata[i]); f2 = (float) imagpart(v->v_compdata[i]); } else { f1 = (float) realpart(v->v_compdata[v-> v_length - 1]); f2 = (float) imagpart(v->v_compdata[v-> v_length - 1]); } tfwrite(&f1, sizeof (float), 1, fp); tfwrite(&f2, sizeof (float), 1, fp); } } } (void) fclose(fp); return; } int main(int ac, char **av) { char *sf, *af; char buf[BSIZE_SP]; char t, f; struct plot *pl; size_t n; char *infile = NULL; char *outfile = NULL; FILE *fp; cp_in = stdin; cp_out = stdout; cp_err = stderr; cp_curin = stdin; cp_curout = stdout; cp_curerr = stderr; switch (ac) { case 5: sf = av[2]; af = av[4]; f = *av[1]; t = *av[3]; break; case 3: f = *av[1]; t = *av[2]; /* This is a pain, but there is no choice */ sf = infile = smktemp("scin"); af = outfile = smktemp("scout"); if (!(fp = fopen(infile, "w"))) { perror(infile); exit(EXIT_BAD); } while ((n = fread(buf, 1, sizeof(buf), stdin)) != 0) (void) fwrite(buf, 1, n, fp); (void) fclose(fp); break; case 1: printf("Input file: "); (void) fflush(stdout); (void) fgets(buf, BSIZE_SP, stdin); sf = copy(buf); printf("Input type: "); (void) fflush(stdout); (void) fgets(buf, BSIZE_SP, stdin); f = buf[0]; printf("Output file: "); (void) fflush(stdout); (void) fgets(buf, BSIZE_SP, stdin); af = copy(buf); printf("Output type: "); (void) fflush(stdout); (void) fgets(buf, BSIZE_SP, stdin); t = buf[0]; break; default: fprintf(cp_err, "Usage: %s fromtype fromfile totype tofile,\n", cp_program); fprintf(cp_err, "\twhere types are o, b, or a\n"); fprintf(cp_err, "\tor, %s fromtype totype, used as a filter.\n", cp_program); exit(EXIT_BAD); } switch(f) { case 'o' : pl = oldread(sf); break; case 'b' : case 'a' : pl = raw_read(sf); break; default: fprintf(cp_err, "Types are o, a, or b\n"); exit(EXIT_BAD); } if (!pl) exit(EXIT_BAD); switch(t) { case 'o' : oldwrite(af, FALSE, pl); break; case 'b' : raw_write(af, pl, FALSE, TRUE); break; case 'a' : raw_write(af, pl, FALSE, FALSE); break; default: fprintf(cp_err, "Types are o, a, or b\n"); exit(EXIT_BAD); } if (ac == 3) { /* Gotta finish this stuff up */ if (!(fp = fopen(outfile, "r"))) { perror(outfile); exit(EXIT_BAD); } while ((n = fread(buf, 1, sizeof(buf), fp)) != 0) (void) fwrite(buf, 1, n, stdout); (void) fclose(fp); (void) unlink(infile); (void) unlink(outfile); } exit(EXIT_NORMAL); } void cp_pushcontrol(void) { } void cp_popcontrol(void) { } void out_init(void) { } void cp_doquit(void) { exit(0); } struct variable *cp_usrvars(void) { return NULL; } int cp_evloop(char *s) { NG_IGNORE(s); return (0); } void cp_ccon(bool o) { NG_IGNORE(o); } char*if_errstring(int c) { NG_IGNORE(c); return copy("error"); } void out_printf(char *fmt, ...) { NG_IGNORE(fmt); } void out_send(char *string) { NG_IGNORE(string); } struct variable * cp_enqvar(char *word, int *tbfreed) { NG_IGNORE(word); NG_IGNORE(*tbfreed); return (NULL); } struct dvec *vec_get(const char *word) { NG_IGNORE(word); return (NULL); } void cp_ccom(wordlist *w, char *b, bool e) { NG_IGNORE(e); NG_IGNORE(b); NG_IGNORE(w); return; } int cp_usrset(struct variable *v, bool i) { NG_IGNORE(i); NG_IGNORE(v); return(US_OK); } int disptype; tmpk8ny_4pz/src/hist_info.c0000644000175000017500000007722313546075722016110 0ustar carstencarsten/* Functions for managing history of strings, such as commands * * Implemented using circular buffers for both the storage of the * strings and their locating information. */ #include #include #include #include #include #include "hist_info.h" /* Structure locating string informaton */ struct Str_info { unsigned int n_byte_sz; /* length of string with NULL at end */ char *sz; /* Address of string */ }; struct History_info { struct History_info_opt hi_opt; bool f_first_resize_check_done; unsigned int n_str_cur; /* current number of strings */ unsigned int n_str_alloc; /* allocated size of array */ unsigned int n_insert_since_resize_check; /* For buffer size management. After this many more * string insertions, the buffer will be reduced * in size if it is excessively large for the data */ size_t n_byte_buf_cur; /* Current amount of history buffer in use */ size_t n_byte_buf_alloc; /* Allocated size of history buffer */ unsigned int index_str_start; /* Index of first history string item */ unsigned int index_str_cur; /* Index of next string */ unsigned int index_str_to_return; /* Index of string to return */ char *p_char_buf; /* Address of char buffer for history strings */ char *p_char_buf_start; /* Start of data in buffer */ char *p_char_buf_cur; /* Current free address in buffer */ char *p_char_buf_end; /* Byte past last address in buffer */ /* Array of n_max items locating commnads. This is a circular buffer * with the data elements being from index_start to index_end-1, * inclusive of the endpoints with wrapping considered */ struct Str_info p_str_info[1]; /* Buffer for string history strings follows p_str_info array */ }; /* end of struct History_info */ static int adjust_history_options(struct History_info_opt *p_hi_opt, bool f_is_init); static struct History_info *history_alloc( unsigned int n_str_max, size_t n_byte_char_buf); static int history_copy(struct History_info *p_hi_dst, const struct History_info *p_hi_src); static const char *history_get_prev1(struct History_info *p_hi, unsigned int *p_n_char_str, bool f_update_pos); static void history_make_empty(struct History_info *p_hi); static int history_resize(struct History_info **pp_hi, unsigned int n_str_alloc, size_t n_byte_char_buf_alloc); static inline const char *return_str_data(struct History_info *p_hi, unsigned int index_str_to_return, unsigned int *p_n_char_str); /* This function allocates and initializes history information * * Parameter * n_max: Maximum number of history items to store * * Return values * NULL on error; otherwise an initialized history structure. Options * are modified to actual values used. */ struct History_info *history_init(struct History_info_opt *p_hi_opt) { struct History_info *p_hi; /* Make history options valid */ if (adjust_history_options(p_hi_opt, true) < 0) { return (struct History_info *) NULL; } /* Do allocation */ if ((p_hi = history_alloc(p_hi_opt->n_str_init, p_hi_opt->n_byte_str_buf_init)) == (struct History_info *) NULL) { return (struct History_info *) NULL; } /* Save options */ p_hi->hi_opt = *p_hi_opt; p_hi->f_first_resize_check_done = false; return p_hi; } /* end of function history_init */ /* This function modifies history options to valid values * * Return codes * +1: Modified OK * 0: No changes required * -1: Unknown option structure size */ static int adjust_history_options(struct History_info_opt *p_hi_opt, bool f_is_init) { /* Validate and adjust arguments */ if (p_hi_opt->n_byte_struct != sizeof(struct History_info_opt)) { /* Unknown version */ return -1; } int xrc = 0; /* Must be at least 2 strings buffered */ if (p_hi_opt->n_str_init < 2) { if (f_is_init) { xrc = +1; } p_hi_opt->n_str_init = 2; } /* If initialization, max # strings buffered must be at least init * size */ if (f_is_init) { if (p_hi_opt->n_str_max < p_hi_opt->n_str_init) { xrc = +1; p_hi_opt->n_str_max = p_hi_opt->n_str_init; } } /* Initial string buffer must be at least 2 bytes */ if (p_hi_opt->n_byte_str_buf_init < 2) { if (f_is_init) { xrc = +1; } p_hi_opt->n_byte_str_buf_init = 2; } /* Oversize factor must be at least 4 */ if (p_hi_opt->oversize_factor < 4) { xrc = +1; p_hi_opt->oversize_factor = 4; } return xrc; } /* end of function adjust_history_options */ /* This function allocates history information * * Parameters * n_max: Maximum number of history items to store * n_byte_buf: Character buffer size in bytes * * Return values * NULL on allocation failure; * otherwise an initialized history structure */ static struct History_info *history_alloc( unsigned int n_str, size_t n_byte_char_buf) { struct History_info *p_hi; /* Memory offset to history buffer from start of structure * Note that no alignment is required for char */ const size_t offset_char_buf = sizeof(struct History_info) + sizeof(struct Str_info) * (n_str - 1); /* Total allocation size */ const size_t n_byte_alloc = offset_char_buf + n_byte_char_buf; /* Allocate history buffer */ if ((p_hi = (struct History_info *) malloc(n_byte_alloc)) == (struct History_info *) NULL) { return (struct History_info *) NULL; } p_hi->n_str_alloc = n_str; p_hi->n_insert_since_resize_check = 0; p_hi->n_byte_buf_alloc = n_byte_char_buf; { /* Locate start and end of string buffer */ char *p_cur = (char *) p_hi + offset_char_buf; p_hi->p_char_buf = p_cur; p_cur += n_byte_char_buf; p_hi->p_char_buf_end = p_cur; } /* Initialize the buffer and locator array to empty. */ history_make_empty(p_hi); return p_hi; } /* end of function history_alloc */ /* This function copies one history state into another. It is useful when * a history buffer needs to be resized or the number of items in the * commnad history is changed. The source history info must have at least * one string. * * Parameters * p_hi_dst: Address of destination history info * p_hi_src: Address of source history info * * Return codes * +1: Destination buffer is too small. Data was truncated. * 0: Data copied OK. * * Note: if there are more history strings in the source structure * than the n_str_max field in the destinnation, only the newest strings * are copied. */ static int history_copy(struct History_info *p_hi_dst, const struct History_info *p_hi_src) { int xrc = 0; const unsigned int n_str_src = p_hi_src->n_str_cur; /* # src strs avail */ /* Copy data directly taken from source */ p_hi_dst->hi_opt = p_hi_src->hi_opt; /* Copy options */ p_hi_dst->f_first_resize_check_done = p_hi_src->f_first_resize_check_done; p_hi_dst->n_insert_since_resize_check = p_hi_src->n_insert_since_resize_check; /* If the source is empty, set dest to empty */ if (n_str_src == 0) { history_make_empty(p_hi_dst); return 0; } const unsigned int n_str_src_alloc = p_hi_src->n_str_alloc; /* size */ unsigned int index_cur_src; /* current index to copy */ unsigned int index_str_start_src; /* index of oldest item in source * to be copied */ /* Find the first source index to copy using index_cur_src as a temp * variable */ if (n_str_src > p_hi_dst->n_str_alloc) { /* If there are more source strings than the number of available * entries in the destination, only copy the newest items. May have * to handle a wrap to the start of the buffer. */ if ((index_str_start_src = p_hi_src->index_str_start + (n_str_src - p_hi_dst->n_str_alloc)) >= n_str_src_alloc) { index_str_start_src -= n_str_src_alloc; } xrc = +1; /* indicate truncation */ } else { /* Enough elements in destination for all strings, so start at the * beginning */ index_str_start_src = p_hi_src->index_str_start; } /* Now make index_cur_src equal to the newest source history item */ if ((index_cur_src = p_hi_src->index_str_cur - 1) == (unsigned int) -1) { /* Underflow occurred, so overflow to correct */ index_cur_src += p_hi_src->n_str_alloc; /* Set to end */ } /* Start adding strings at bottom of Str_info buffer */ unsigned int index_cur_dst = p_hi_dst->n_str_alloc - 1; /* Start writing strings at botttom of char buffer. This location is * actually the address of the top of the buffer unrolled to the byte * past its end. */ char *p_dst_cur = p_hi_dst->p_char_buf_end; const char *p_char_buf_dst = p_hi_dst->p_char_buf; size_t n_byte_buf_cur_dst = 0; /* bytes copied to destination */ const struct Str_info * const p_str_info_src0 = p_hi_src->p_str_info; struct Str_info * const p_str_info_dst0 = p_hi_dst->p_str_info; /* Copy each element in the source string history starting with the * newest element so that if truncation occurs, it will be the oldest * strings that get truncated */ for ( ; ; ) { /* Locate data to copy */ const struct Str_info * const p_str_info_src = p_str_info_src0 + index_cur_src; const unsigned int n_byte_str_cur = p_str_info_src->n_byte_sz; struct Str_info * const p_str_info_dst = p_str_info_dst0 + index_cur_dst; /* Locate the destination in the char * buffer */ if ((p_dst_cur -= n_byte_str_cur) < p_char_buf_dst) { break; /* Data will not fit */ } /* Copy the data */ (void) memcpy(p_dst_cur, p_str_info_src->sz, n_byte_str_cur); n_byte_buf_cur_dst += n_byte_str_cur; /* Save locating information */ p_str_info_dst->sz = p_dst_cur; p_str_info_dst->n_byte_sz = n_byte_str_cur; /* Test for exit, which is completion of copy of string at * index_str_src. On exit, index_cur_dst is at last string * copied (which is the oldest string copied) */ if (index_cur_src == index_str_start_src) { break; } /* Move to next indices */ if (--index_cur_src == (unsigned int) -1) { index_cur_src += n_str_src_alloc; } --index_cur_dst; /* by construction will not wrap */ } /* end of loop copying strings */ /* Complete the information for the copied history info */ p_hi_dst->n_str_cur = p_hi_dst->n_str_alloc - index_cur_dst; p_hi_dst->n_byte_buf_cur = n_byte_buf_cur_dst; p_hi_dst->index_str_start = index_cur_dst; /* last copied is oldest */ p_hi_dst->index_str_cur = 0; /* next item wraps to begin at top of buf */ p_hi_dst->p_char_buf_start = p_dst_cur; /* oldest string (last copied) */ p_hi_dst->p_char_buf_cur = p_hi_dst->p_char_buf; /* top of char buf is next free byte */ /* Set the index to return for history_get_next and history_get_prev. * If the earlier command no longer exists, set to the closest value */ { /* Look in the source history information to see the location * relative to the current insert position */ const unsigned int index_str_to_return = p_hi_src->index_str_to_return; if (index_str_to_return == UINT_MAX) { p_hi_dst->index_str_to_return = UINT_MAX; } else { const unsigned index_str_start = p_hi_src->index_str_start; const unsigned int index_str_cur = p_hi_src->index_str_cur; /* "Unrolled" positions -- as if wrapped part extended past * end of buffer */ const unsigned index_str_cur_unrolled = index_str_cur > index_str_start ? index_str_cur : index_str_cur + p_hi_src->n_str_alloc; const unsigned int index_str_to_return_unrolled = index_str_to_return > index_str_start ? index_str_to_return : index_str_to_return + p_hi_src->n_str_alloc; /* From unrolled positions, offset is always a simple * subtraction. With the offset being from the position to * return, the offset is always nonnegative */ const unsigned int offset_from_cur = index_str_cur_unrolled - index_str_to_return_unrolled; /* The offset must be reduced if the command being indexed was * not copied due to truncation */ const unsigned int offset_from_cur_dst = offset_from_cur <= p_hi_dst->n_str_cur ? offset_from_cur : p_hi_dst->n_str_cur; /* Locate the index for the string to return */ if (p_hi_dst->index_str_cur >= offset_from_cur_dst) { /* No buffer wrap */ p_hi_dst->index_str_to_return = p_hi_dst->index_str_cur - offset_from_cur_dst; } else { /* Wrap */ p_hi_dst->index_str_to_return = p_hi_dst->index_str_cur + (p_hi_dst->n_str_alloc - offset_from_cur_dst); } } } /* end of block locating index for returned history item */ return xrc; } /* end of function history_copy */ /* Set values to make an empty history buffer */ static void history_make_empty(struct History_info *p_hi) { p_hi->n_str_cur = 0; p_hi->n_byte_buf_cur = 0; p_hi->index_str_start = 0; p_hi->index_str_cur = 0; p_hi->index_str_to_return = UINT_MAX; p_hi->p_char_buf_start = p_hi->p_char_buf_cur = p_hi->p_char_buf; } /* end of function history_copy_empty */ /* This function returns the previous history item * For the previous item, the value returned should be one step * behind. That is, the first "previous" string is the current * string. It is done because there is a new current string not yet * in the history buffer when the previous one is being requested. * * Cases * Empty buffer -- n_str_cur == 0 * Return empty string * Buffer not empty * Decrement index_str_to_return. If < index_str_start, * set to index_str_cur - 1 */ const char *history_get_prev(struct History_info *p_hi, unsigned int *p_n_char_str) { return history_get_prev1(p_hi, p_n_char_str, true); } /* end of function history_get_prev */ /* Worker function for history_get_prev and history_get_last that provides * the option to not change the current position */ static const char *history_get_prev1(struct History_info *p_hi, unsigned int *p_n_char_str, bool f_update_pos) { const unsigned int n_str = p_hi->n_str_cur; /* Handle caase of empty history info */ if (n_str == 0) { /* Set size if buffer given */ if (p_n_char_str != (unsigned *) NULL) { *p_n_char_str = 0; } return ""; } unsigned int index_str_to_return = f_update_pos && p_hi->index_str_to_return != UINT_MAX ? p_hi->index_str_to_return : p_hi->index_str_cur; if (n_str == p_hi->n_str_alloc) { /* Full buffer */ if (index_str_to_return == 0) { /* must wrap */ index_str_to_return = n_str - 1; } else { /* wrap not required */ --index_str_to_return; } } else { /* Partial buffer */ if (index_str_to_return == 0) { /* must wrap */ if (p_hi->index_str_start < p_hi->index_str_cur) { /* Data in [start, end-1] */ index_str_to_return = p_hi->index_str_cur - 1; } else { /* end less than start (if ==, buffer is full) */ /* Data in [start, n_str_max-1]. If end != 0, there * is a second piece of data in [0, end-1] */ index_str_to_return = p_hi->n_str_alloc - 1; } } /* end of case of wrap at 0 */ else { /* current index_str_to_return > 0 */ if (index_str_to_return == p_hi->index_str_start) { if (p_hi->index_str_cur == 0) { /* last str at bottom of buf */ index_str_to_return = p_hi->n_str_alloc - 1; } else { index_str_to_return = p_hi->index_str_cur - 1; } } else { /* no special cases, so just decrement */ --index_str_to_return; } } } /* Save updated position */ if (f_update_pos) { p_hi->index_str_to_return = index_str_to_return; } /* Return the string data */ return return_str_data(p_hi, index_str_to_return, p_n_char_str); } /* end of function history_get_prev */ /* This function returns the newest history item, that is the last one * added. It can be used to decide whether or not to add a string. For * example, duplicate consecutive strings can be suppressed. */ const char *history_get_newest(struct History_info *p_hi, unsigned int *p_n_char_str) { return history_get_prev1(p_hi, p_n_char_str, false); } /* end of function history_get_cur */ /* This function returns the next history item */ const char *history_get_next(struct History_info *p_hi, unsigned int *p_n_char_str) { const unsigned int n_str = p_hi->n_str_cur; /* Handle caase of empty history info */ if (n_str == 0) { /* Set size if buffer given */ if (p_n_char_str != (unsigned *) NULL) { *p_n_char_str = 0; } return ""; } unsigned int index_str_to_return = p_hi->index_str_to_return; if (index_str_to_return == UINT_MAX) { /* next item requested before any prevous ones were */ index_str_to_return = p_hi->index_str_start; } else { if (n_str == p_hi->n_str_alloc) { /* Full buffer */ if (index_str_to_return == n_str - 1) { /* must wrap */ index_str_to_return = 0; } else { /* wrap not required */ ++index_str_to_return; } } else { /* Partial buffer */ if (index_str_to_return == p_hi->n_str_alloc - 1) { /* Must wrap */ if (p_hi->index_str_start < p_hi->index_str_cur) { /* Data in [start, end-1] */ index_str_to_return = p_hi->index_str_start; } else { /* end less than start (if ==, buffer is full) */ /* Data in [start, n_str_max-1]. If end != 0, there * is a second piece of data in [0, end-1] */ if (p_hi->index_str_cur == 0) { index_str_to_return = p_hi->index_str_start; } else { index_str_to_return = 0; } } } /* end of case of wrap at 0 */ else { /* current index_str_to_return < max buf index */ if (index_str_to_return == p_hi->index_str_cur - 1) { /* not at end */ index_str_to_return = p_hi->index_str_start; } else { /* no special cases, so just increment */ ++index_str_to_return; } } } } /* Save updated position */ p_hi->index_str_to_return = index_str_to_return; /* Return the string data */ return return_str_data(p_hi, index_str_to_return, p_n_char_str); } /* end of function history_get_next */ /* This function returns the history information according to the given * index */ static inline const char *return_str_data(struct History_info *p_hi, unsigned int index_str_to_return, unsigned int *p_n_char_str) { struct Str_info *p_str_info_cur = p_hi->p_str_info + index_str_to_return; /* Return the string. Also return size if a buffer was given */ if (p_n_char_str != (unsigned *) NULL) { /* -1 because value stored includes NULL at end */ *p_n_char_str = p_str_info_cur->n_byte_sz - 1; } return p_str_info_cur->sz; } /* end of function return_str_data */ /* This function copies one history state into another. It is useful when * a history buffer needs to be resized or the number of items in the * commnad history is changed. The source history info must have at least * one string. * * Parameters * p_hi_dst: Address of destination history info * p_hi_src: Address of source history info * * Return codes * +1: Destination buffer is too small. Data was truncated. * 0: Buffer resized OK * -1: Allocation failure. Buffer same as when input * * Note: if there are more history strings in the source structure * than the n_str_max field in the destinnation, only the newest strings * are copied. */ static int history_resize(struct History_info **pp_hi, unsigned int n_str_alloc, size_t n_byte_char_buf_alloc) { struct History_info *p_hi_old = *pp_hi; struct History_info *p_hi_new; /* Allocate a new history info of the desired sizes */ if ((p_hi_new = history_alloc(n_str_alloc, n_byte_char_buf_alloc)) == (struct History_info *) NULL) { return -1; } /* Copy the old history into the new one */ const int xrc = history_copy(p_hi_new, p_hi_old); /* Free the old allocation */ history_free(p_hi_old); *pp_hi = p_hi_new; /* return new info */ return xrc; } /* end of function history_resize */ /* This function frees menory used by a History_info struct */ void history_free(struct History_info *p_hi) { if (p_hi != (struct History_info *) NULL) { free((void *) p_hi); } return; } /* end of function history_free */ /* This function adds the string str, of length n_char_str, excluding any * terminating null, which is optional. The history info always adds a * terminating null to the stored data. * * Return codes * 0: Added OK * -1: Unable to add. * * Remarks * The History_info structure may be allocated again to obtain more buffer * space. Failure of this allocation would result in a -1 return code. */ int history_add(struct History_info **pp_hi, unsigned int n_char_str, const char *str) { const unsigned int n_byte_data = n_char_str + 1; /* with NULL */ struct History_info *p_hi = *pp_hi; /* access history data */ char *p_dst = (char *) NULL; /* Location to write new data */ bool f_have_room; /* flag that there is room for the string */ /* If the buffer is full of strings, resize, doubling up to the maximum * allowed size, and if that is not large enough, remove the oldest * one to make room for this one */ if (p_hi->n_str_cur == p_hi->n_str_alloc) { unsigned int n_str_alloc_new = 2 * p_hi->n_str_alloc; if (n_str_alloc_new > p_hi->hi_opt.n_str_max) { n_str_alloc_new = p_hi->hi_opt.n_str_max; } /* If the buffer can be made larger, try to do so */ if (n_str_alloc_new > p_hi->n_str_alloc) { if (history_resize(&p_hi, n_str_alloc_new, p_hi->n_byte_buf_alloc) != 0) { return -1; } *pp_hi = p_hi; /* point to new structure */ f_have_room = true; } else { /* at max size already */ f_have_room = false; } } else { /* Allocated size not full yet */ f_have_room = true; } /* If there is not room for the string, remove refrerence to the * oldest one to make room */ if (!f_have_room) { p_hi->n_byte_buf_cur -= p_hi->p_str_info[p_hi->index_str_start].n_byte_sz; if (p_hi->index_str_start == p_hi->n_str_alloc - 1) { p_hi->index_str_start = 0; } else { ++p_hi->index_str_start; } /* Locate start of used buffer at the new starting string */ p_hi->p_char_buf_start = p_hi->p_str_info[p_hi->index_str_start].sz; --p_hi->n_str_cur; } /* Try fitting the string in the free area. If that fails, the character * buffer will be enlarged via a new history information structure. */ { /* Identify free area of buffer * (1) [cur, end) + [top, start) * (2) [cur, start) * (3) none */ ptrdiff_t case_id = p_hi->p_char_buf_cur - p_hi->p_char_buf_start; if (case_id > 0 || case_id == 0 && p_hi->n_str_cur == 0) { /* Case 1, including an empty buffer. * Try fitting the string from the free address to the end of the * the buffer. If that fails, try fitting from the start of the * buffer to the start of data, exclusive of start of data. */ if (p_hi->p_char_buf_cur + n_byte_data <= p_hi->p_char_buf_end) { p_dst = p_hi->p_char_buf_cur; } else { /* whould not fit at end so try at top */ if (p_hi->p_char_buf + n_byte_data <= p_hi->p_char_buf_start) { p_dst = p_hi->p_char_buf; } } } else if (case_id < 0) { /* Case 2 */ /* Try fitting the string from the free address to the start * of data, exclusive of start of data. */ if (p_hi->p_char_buf_cur + n_byte_data <= p_hi->p_char_buf_start) { p_dst = p_hi->p_char_buf_cur; } } /* Else case 3: buffer is full, so cannot fit */ } /* If the string would not fit, enlarge the char buffer and add */ if (p_dst == (char *) NULL) { if (history_resize(&p_hi, p_hi->n_str_alloc, 2 * p_hi->n_byte_buf_alloc + n_byte_data) != 0) { return -1; /* could not resize */ } *pp_hi = p_hi; /* Update returned structure */ /* Buffer was enlarged enough to guarantee fitting, so can add * without any checks */ p_dst = p_hi->p_char_buf_cur; } /* end of case of resize */ /* Add an entry into Str_info for this string */ { struct Str_info *p_str_info = p_hi->p_str_info + p_hi->index_str_cur; p_str_info->sz = p_dst; p_str_info->n_byte_sz = n_byte_data; } /* Set index to next free entry in Str_info */ if (++p_hi->index_str_cur == p_hi->n_str_alloc) { p_hi->index_str_cur = 0; } /* Flag the item to return as not set */ p_hi->index_str_to_return = UINT_MAX; /* Update data size */ p_hi->n_byte_buf_cur += n_byte_data; /* Save string data in char buffer at p_dst */ (void) memcpy(p_dst, str, n_char_str); p_dst += n_char_str; *p_dst++ = '\0'; /* null terminate and point to byte after null */ /* Update free location in char buffer, pointed to by p_dst after * writing the string */ p_hi->p_char_buf_cur = p_dst; ++p_hi->n_str_cur; /* Increment the string count */ /* Test if the buffer should be shrunk. Using >= instead of == * due to possibility that history_setopt changed the threshold * to a smaller value */ { bool f_do_check = false; unsigned int n_insert_since_check = ++p_hi->n_insert_since_resize_check; /* Test if need to check for oversize based on options */ if (p_hi->f_first_resize_check_done) { /* after 1st */ const unsigned int n = p_hi->hi_opt.n_insert_per_oversize_check; /* Test for nonzero (supressing resizes) and threshold met */ if (n != 0 && n_insert_since_check >= n) { f_do_check = true; } } else { /* first check */ const unsigned int n = p_hi->hi_opt.n_insert_first_oversize_check; /* Test for nonzero (supressing resizes) and threshold met */ if (n != 0 && n_insert_since_check >= n) { f_do_check = true; p_hi->f_first_resize_check_done = true; } } /* Do check if enough inserts have occurred */ if (f_do_check) { size_t n_byte_buf_alloc = p_hi->n_byte_buf_alloc; p_hi->n_insert_since_resize_check = 0; if (n_byte_buf_alloc > 4 && p_hi->n_byte_buf_cur * p_hi->hi_opt.oversize_factor < n_byte_buf_alloc) { /* Buffer too large for existing data, so shrink it. * Should that fail for some reason, simply continue with the * existing buffer */ (void) history_resize(&p_hi, p_hi->n_str_alloc, n_byte_buf_alloc / 2); *pp_hi = p_hi; /* point to new structure */ } } } /* end of block for oversized buffer actions */ return 0; } /* end of function history_add */ /* This function resets the returned buffer pointer so that the * last command is returned by history_get_prev() */ void history_reset_pos(struct History_info *p_hi) { p_hi->index_str_to_return = UINT_MAX; } /* end of function history_reset_pos */ /* This function sets history options after history has been initialized. * An initialized History_info_opt structure is passed. The values of * the structure will be modified to the closest allowable values if * the ones given cannot be used. * * The values for n_str_init and n_byte_str_buf_init are ignored. * The value for n_insert_first_oversize_check is also ignored if the * first check has already been performed. * * Return codes * +2: Unknown structure size. No action taken * +1: Option values were modified but changes were made OK * 0: Changes made OK * -1: Unable to make change(s) */ int history_setopt(struct History_info **pp_hi, struct History_info_opt *p_hi_opt) { int rc_adj; /* Adjust options */ if ((rc_adj = adjust_history_options(p_hi_opt, 0)) < 0) { /* Unknown version based on size of structure */ return +2; } struct History_info *p_hi = *pp_hi; /* access struct */ /* If the maximum number of items to log is being reduced below the * current allocated value, a copy of the buffer with the new array * size must be made. */ { unsigned int n_str_max_new = p_hi_opt->n_str_max; if (p_hi->n_str_alloc > n_str_max_new) { if (history_resize(&p_hi, n_str_max_new, p_hi->n_byte_buf_alloc) < 0) { return -1; } /* Override the maximum number of strings */ p_hi->hi_opt.n_str_max = n_str_max_new; *pp_hi = p_hi; /* Point to new structure */ } } /* Other option changes will work as the are processed */ { struct History_info_opt *p_hi_opt_dst = &p_hi->hi_opt; p_hi_opt_dst->n_str_max = p_hi_opt->n_str_max; p_hi_opt_dst->oversize_factor = p_hi_opt->oversize_factor; p_hi_opt_dst->n_insert_first_oversize_check = p_hi_opt->n_insert_first_oversize_check; p_hi_opt_dst->n_insert_per_oversize_check = p_hi_opt->n_insert_per_oversize_check; } return rc_adj; } /* end of function history_setopt */ /* This function gets current history options. * * Return codes * 0: Options returned OK * -1: Unknown structure size. Options not returned. */ int history_getopt(const struct History_info *p_hi, struct History_info_opt *p_hi_opt) { /* Test for valid structure size */ if (sizeof(struct History_info_opt) != p_hi_opt->n_byte_struct) { return -1; } *p_hi_opt = p_hi->hi_opt; return 0; } /* end of function hstory_getopt */ tmpk8ny_4pz/src/winmain.h0000644000175000017500000000532013546075722015562 0ustar carstencarsten/* Forwards and external function declarations for winmain.c */ /* Forward definition of main() */ int xmain(int argc, char *argv[]); /* forward of Update function */ #ifdef __CYGWIN__ static char* rlead(char*); #endif void winmessage(char*); void WaitForIdle(void); static void WaitForMessage(void); static void ClearInput(void); void SetSource(char *Name); void SetAnalyse(char *, int); static void AdjustScroller(void); static void _DeleteFirstLine(void); static void AppendChar(char c); static void AppendString(const char *Line); static void DisplayText(void); static int w_getch(void); static int w_putch(int c); static void Main_OnSize(HWND hwnd, UINT state, int cx, int cy); static void PostSpiceCommand(const char *const cmd); static LRESULT CALLBACK MainWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); static LRESULT CALLBACK StringWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); static LRESULT CALLBACK TextWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); static void Element_OnPaint(HWND hwnd); static LRESULT CALLBACK ElementWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); static int MakeArgcArgv(char *cmdline, int *argc, char ***argv); int win_x_fclose(FILE *stream); int win_x_fflush(FILE *stream); int win_x_fgetc(FILE *stream); int win_x_fgetpos(FILE *stream, fpos_t *pos); char *win_x_fgets(char *s, int n, FILE *stream); int win_x_fprintf(FILE *stream, const char *format, ...); int win_x_fputc(int c, FILE *stream); int win_x_fputs(const char *s, FILE *stream); size_t win_x_fread(void *ptr, size_t size, size_t n, FILE *stream); FILE *win_x_freopen(const char *path, const char *mode, FILE *stream); int win_x_fscanf(FILE *stream, const char *format, ...); int win_x_fseek(FILE *stream, long offset, int whence); int win_x_fsetpos(FILE *stream, const fpos_t*pos); long win_x_ftell(FILE *stream); size_t win_x_fwrite(const void *ptr, size_t size, size_t n, FILE *stream); char *win_x_gets(char *s); void win_x_perror(const char *s); int win_x_printf(const char *format, ...); int win_x_puts(const char *s); int win_x_scanf(const char *format, ...); int win_x_ungetc(int c, FILE *stream); int win_x_vfprintf(FILE *stream, const char *format, void *arglist); /* int win_x_vfscanf(FILE *stream, const char *format, void *arglist); */ int win_x_vprintf(const char *format, void *arglist); /* int win_x_vscanf(const char *format, void *arglist); */ int win_x_read(int fd, char *buf, int n); int win_x_getc(FILE *fp); int win_x_getchar(void); int win_x_putchar(const int c); int win_x_putc(const int c, FILE *fp); int win_x_feof(FILE *fp); int win_x_ferror(FILE *fp); int win_x_fputchar(int c); tmpk8ny_4pz/src/ChangeLog0000644000175000017500000001347113546075722015527 0ustar carstencarsten2002-01-03 Paolo Nenzi * main.c: Some code additions for Windows support (Holger Vogt patch). * maths/cmaths/Makefile.am: reintegrated test code removed from Holger Vogt patch (this may cause trouble under Windows). * maths/cmaths/cmath1.c, maths/cmaths/test_cx_ph.c: small changes to support Windows (Holger Vogt patch). * winmain.c: added file for Windows port (Holger Vogt). 2001-12-04 Emmanuel Rouat * maths/cmaths/Makefile.am (noinst_PROGRAMS): test programs shouldnt get installed 2000-10-13 Arno W. Peters * ngspice.txt: changes SPICE: to NGSPICE: to restore help functionality. Thanks go to Michael Widlok for the analysis. 2000-07-21 Arno W. Peters * src/analysis/*: Moved these files into src/devices/analysis. The files in this directory implement the analysis and simulation for electrical circuits. This is the final step to separating the Spice sources into a library part and a frontend part. Now, the devices subdirectory has to be renamed to spicelib and the devices that are now scattered in that directory should be moved into a new devices directory. * configure.in, src/Makefile.am, src/devices/Makefile.am: Files affected by the move. 2000-07-20 Arno W. Peters * src/hlp/*: moved these files into src/frontend/help. The files in this directory implement the help system for the frontend. * configure.in, src/Makefile.am, src/frontend/Makefile.am: Files affected by the move. * src/circuit/*: moved these files into src/devices/parser. The files in this directory take a model line from the input file and add the corresponding element to the representation of the circuit in memory. * configure.in, src/Makefile.am, src/devices/Makefile.am: Files affected by the move. 2000-07-18 Arno W. Peters * main.c: Added the call to the initialization function of the devices. 2000-07-07 Arno W. Peters * parser/cshpar.c: Separated out com_chdir(), com_echo(), com_rehash() and com_shell() and moved them into frontend directory. * frontend/com_chdir.c, frontend/com_echo.c, frontend/com_rehash.c, frontend/com_shell.c: Their new homes. * parser/quote.c, parser/quote.h: The quote/unquote functions are used exclusively in the frontend, moved them there. * frontend/quote.c, frontend/quote.h: Their new location. * parser/input.c, parser/input.h: Input, output and error streams handled in the frontend. Moved to the frontend directory. * frontend/streams.c: Its new home. * frontend/Makefile.am: Updates for new files. * frontend/breakp2.c, frontend/newcoms.c, frontend/postcoms.c, frontend/resource.c, frontend/terminal.h, frontend/variable.c, frontend/variable.h, frontend/com_compose.c, frontend/com_display.c, frontend/com_setscale.c, frontend/com_strcmp.c: Include files update. * parser/var2.c, parser/var2.h: Empty files, removed. * parser/Makefile.am: Updates for removed files. * parser/lexical.c: Small adjustments 2000-04-04 Paolo Nenzi * ngspice.c: Added support for BSIM4. * Makefile.am: Added support for bsim4 shared library. 2000-01-14 Paolo Nenzi * conf.c: inserted definitions for bsim3v2 and bsim3v1 devices. It is necessary to include old models for commercially available components libraries. 1999-12-01 Emmanuel Rouat * source code: created new directory 'frontend' mainly filled with files from 'fte' - remaing files go into maths/cmaths (complex maths routines) 1999-11-30 Emmanuel Rouat * tune.c: removed * conf.c/nconf.c : simplified 1999-09-07 Arno * conf.c: removed unused variables `devs' and `ans' * help.c: return value from main() changed to int 1999-09-04 Emmanuel Rouat * main.c: removed #include patchlec.h and suffix.h (and related code) * Makefile.am: updated to reflect filename changes in fte/ 1999-08-31 Emmanuel Rouat * help.c: renamed helpfile 'ngspice' * main.c: renamed helpfile 'ngspice' 1999-08-28 Emmanuel Rouat * Removed all #includes of misc.h and util.h (now in spice.h) 1999-08-24 Paolo Nenzi * conf.c: linked the jfet2 model to the devices table. 1999-08-08 Emmanuel Rouat * makeidx.c: removed HAS_MAC_ARCARGV related code * main.c: removed all code related to dos and macos features 1999-08-06 Emmanuel Rouat * proc2mod.c: removed test on HAS_VPERROR (always true on Unix) * main.c (main): changed HAS_ISATTY in HAVE_ISATTY (main): removed test on HAS_LONGJUMP (always have it) (main): removed test on HAS_UNIX_SIGS (always true on Unix) (main): removed test on HAS_UNLINK (always true on Unix) 1999-08-05 Emmanuel Rouat * main.c: changed HAS_GETPW in HAVE_PWD_H (main): removed test on HAS_GETPID 1999-08-02 Emmanuel Rouat * Makefile.am (LIBS): removed '-lm' since it is handled by autoconf 1999-08-01 Emmanuel Rouat * conf.c: changed SIMinfo entry to 'ngspice' * Makefile.am: changed binary name to ngspice 1999-07-31 Emmanuel Rouat * Makefile.am: added @X_CFLAGS@ to INCLUDES list 1999-07-30 Emmanuel Rouat * Makefile.am : fixed breaking of 'make distcheck' 29-07-1999 emmanuel.rouat@wanadoo.fr (Manu Rouat) * tune.c: includes which defines SPICEBINDIR etc 28-07-1999 emmanuel.rouat@wanadoo.fr (Manu Rouat) * help.c: Changed HAS_X11 define to X_DISPLAY_MISSING (supplied by autoconf in config.h) * removed HAS_X11 in defs flag in Makefile.am tmpk8ny_4pz/src/ngnutmeg.c0000644000175000017500000000432213546075722015740 0ustar carstencarsten/* Configuration file for nutmeg */ /********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #include "ngspice/ngspice.h" #define CONFIG #include #include "ngspice/ifsim.h" #include "ngspice/suffix.h" IFsimulator SIMinfo = { "ngnutmeg", /* my name */ "data analysis and manipulation program", /* more about me */ Spice_Version, /* my version */ NULL, /* newCircuit function */ NULL, /* deleteCircuit function */ NULL, /* newNode function */ /* NEEDED */ NULL, /* groundNode function */ NULL, /* bindNode function */ NULL, /* findNode function */ /* NEEDED */ NULL, /* instToNode function */ /* NEEDED */ NULL, /* setNodeParm function */ /* NEEDED */ NULL, /* askNodeQuest function */ /* NEEDED */ NULL, /* deleteNode function */ /* NEEDED */ NULL, /* newInstance function */ NULL, /* setInstanceParm function */ NULL, /* askInstanceQuest function */ NULL, /* findInstance funciton */ NULL, /* deleteInstance function */ /* to be added later */ NULL, /* newModel function */ NULL, /* setModelParm function */ NULL, /* askModelQuest function */ NULL, /* findModel function */ NULL, /* deleteModel function */ /* to be added later */ NULL, /* newTask function */ NULL, /* newAnalysis function */ NULL, /* setAnalysisParm function */ NULL, /* askAnalysisQeust function */ NULL, /* findAnalysis function */ NULL, /* findTask function */ NULL, /* deleteTask function */ NULL, /* doAnalyses function */ NULL, /* non-convergence message function */ 0, NULL, 0, NULL, 0, NULL, 0, NULL, }; /* An ugly hack */ #ifdef CIDER #include "ngspice/cktdefs.h" void NDEVacct(CKTcircuit *ckt, FILE *file) { NG_IGNORE(ckt); fprintf(file, "Ouch, you have called NDEV from ngnutmeg\n"); } #endif tmpk8ny_4pz/src/makeidx.c0000644000175000017500000000310013546075722015527 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ /* from FILENAME.txt, make FILENAME.idx */ #include #include #include #include "ngspice/cpdefs.h" #include "ngspice/hlpdefs.h" #include "ngspice/suffix.h" #define BSIZE_SP 512 static void makeidx(const char *dst, const char *src) { FILE *fp; FILE *wfp; char buf[BSIZE_SP]; long fpos; char subject[BSIZE_SP]; struct hlp_index indexitem; if (!(fp = fopen(src, "r"))) { perror(src); return; } if (!(wfp = fopen(dst, "wb"))) { perror(dst); return; } fpos = 0; while (fgets(buf, sizeof(buf), fp)) { if (!strncmp(buf, "SUBJECT: ", 9)) { strcpy(subject, &buf[9]); subject[strlen(subject) - 1] = '\0'; /* get rid of '\n' */ strncpy(indexitem.subject, subject, 64); /* zero out end */ indexitem.fpos = fpos; fwrite(&indexitem, sizeof(struct hlp_index), 1, wfp); } fpos = ftell(fp); } } int main(int argc, char **argv) { if(argc == 4 && !strcmp(argv[1], "-o")) { makeidx(argv[2], argv[3]); exit(0); } while (--argc) { char buf[BSIZE_SP]; char *pos; strcpy(buf, argv[argc]); if (!(pos = strrchr(buf, '.')) || strcmp(pos, ".txt")) { fprintf(stderr, "%s does not end in .txt\n", buf); continue; } *++pos = 'i'; *++pos = 'd'; *++pos = 'x'; makeidx(buf, argv[argc]); } exit(0); } tmpk8ny_4pz/src/misc/0000755000175000017500000000000013546075722014702 5ustar carstencarstentmpk8ny_4pz/src/misc/printnum.h0000644000175000017500000000026413546075722016731 0ustar carstencarsten/************* * Header file for printnum.c * 1999 E. Rouat ************/ #ifndef ngspice_PRINTNUM_H #define ngspice_PRINTNUM_H void printnum(char * buf, double num); #endif tmpk8ny_4pz/src/misc/tilde.h0000644000175000017500000000024613546075722016156 0ustar carstencarsten/************* * Header file for tilde.c * 1999 E. Rouat ************/ #ifndef ngspice_TILDE_H #define ngspice_TILDE_H char * tildexpand(char *string); #endif tmpk8ny_4pz/src/misc/string.c0000644000175000017500000004317313546075722016364 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ /* * String functions */ #include "ngspice/ngspice.h" #include "ngspice/stringutil.h" #include "ngspice/stringskip.h" #include "ngspice/dstring.h" #include int prefix(const char *p, const char *s) { while (*p && (*p == *s)) p++, s++; return *p == '\0'; } /* Create a copy of a string. */ char * copy(const char *str) { char *p; if (!str) return NULL; if ((p = TMALLOC(char, strlen(str) + 1)) != NULL) (void) strcpy(p, str); return p; } /* copy a substring, from 'str' to 'end' * including *str, excluding *end */ char * copy_substring(const char *str, const char *end) { size_t n = (size_t) (end - str); char *p; if ((p = TMALLOC(char, n + 1)) != NULL) { (void) strncpy(p, str, n); p[n] = '\0'; } return p; } char * tvprintf(const char *fmt, va_list args) { char buf[1024]; char *p = buf; int size = sizeof(buf); for (;;) { int nchars; va_list ap; va_copy(ap, args); nchars = vsnprintf(p, (size_t) size, fmt, ap); va_end(ap); if (nchars == -1) { // compatibility to old implementations size *= 2; } else if (nchars >= size) { /* Output was truncated. Returned value is the number of chars * that would have been written if the buffer were large enough * excluding the terminiating null. */ size = nchars + 1; /* min required allocation size */ } else { /* String formatted OK */ break; } /* Allocate a larger buffer */ if (p == buf) p = TMALLOC(char, size); else p = TREALLOC(char, p, size); } /* Return the formatted string, making a copy on the heap if the * stack's buffer (buf) contains the string */ return (p == buf) ? copy(p) : p; } /* end of function tvprintf */ /* This function returns an allocation containing the string formatted * according to fmt and the variadic argument list provided. It is a wrapper * around tvprintf() which processes the argumens as a va_list. */ char * tprintf(const char *fmt, ...) { char *rv; va_list ap; va_start(ap, fmt); rv = tvprintf(fmt, ap); va_end(ap); return rv; } /* end of function tprintf */ /* Determine whether sub is a substring of str. */ /* Like strstr( ) XXX */ int substring(const char *sub, const char *str) { for (; *str; str++) if (*str == *sub) { const char *s = sub, *t = str; for (; *s; s++, t++) if (!*t || (*s != *t)) break; if (*s == '\0') return TRUE; } return FALSE; } /* Append one character to a string. Don't check for overflow. */ /* Almost like strcat( ) XXX */ void appendc(char *s, char c) { while (*s) s++; *s++ = c; *s = '\0'; } /* Try to identify an integer that begins a string. Stop when a non- * numeric character is reached. */ /* Like atoi( ) XXX */ int scannum(char *str) { int i = 0; while (isdigit_c(*str)) i = i * 10 + *(str++) - '0'; return i; } /* Case insensitive str eq. */ /* Like strcasecmp( ) XXX */ int cieq(const char *p, const char *s) { for (; *p; p++, s++) if (tolower_c(*p) != tolower_c(*s)) return FALSE; return *s == '\0'; } /* Case insensitive prefix. */ int ciprefix(const char *p, const char *s) { for (; *p; p++, s++) if (tolower_c(*p) != tolower_c(*s)) return FALSE; return TRUE; } void strtolower(char *str) { if (!str) return; for (; *str; str++) *str = tolower_c(*str); } void strtoupper(char *str) { if (!str) return; for (; *str; str++) *str = toupper_c(*str); } #ifdef CIDER /* * Imported from cider file support/strmatch.c * Original copyright notice: * Author: 1991 David A. Gates, U. C. Berkeley CAD Group * */ /* * Case-insensitive test of whether p is a prefix of s and at least the * first n characters are the same */ int cinprefix(char *p, char *s, int n) { if (!p || !s) return 0; for (; *p; p++, s++, n--) if (tolower_c(*p) != tolower_c(*s)) return 0; return n <= 0; } /* * Case-insensitive match of prefix string p against string s * returns the number of matching characters * */ int cimatch(char *p, char *s) { int n = 0; if (!p || !s) return 0; for (; *p; p++, s++, n++) if (tolower_c(*p) != tolower_c(*s)) return n; return n; } #endif /* CIDER */ /*-------------------------------------------------------------------------* * gettok skips over whitespace and returns the next token found. This is * the original version. It does not "do the right thing" when you have * parens or commas anywhere in the nodelist. Note that I left this unmodified * since I didn't want to break any fcns which called it from elsewhere than * subckt.c. -- SDB 12.3.2003. *-------------------------------------------------------------------------*/ char * gettok(char **s) { char c; int paren; const char *token, *token_e; paren = 0; *s = skip_ws(*s); if (!**s) return NULL; token = *s; while ((c = **s) != '\0' && !isspace_c(c)) { if (c == '(') paren += 1; else if (c == ')') paren -= 1; else if (c == ',' && paren < 1) break; (*s)++; } token_e = *s; while (isspace_c(**s) || **s == ',') (*s)++; return copy_substring(token, token_e); } /*-------------------------------------------------------------------------* * nexttok skips over whitespaces and the next token in s * returns NULL if there is nothing left to skip. * It replaces constructs like txfree(gettok(&actstring)) by * actstring = nexttok(actstring). This is derived from the original gettok version. * It does not "do the right thing" when * you have parens or commas anywhere in the nodelist. *-------------------------------------------------------------------------*/ char * nexttok(const char *s) { if (!s) return NULL; int paren = 0; s = skip_ws(s); if (!*s) return NULL; for (; *s && !isspace_c(*s); s++) if (*s == '(') paren += 1; else if (*s == ')') paren -= 1; else if (*s == ',' && paren < 1) break; while (isspace_c(*s) || *s == ',') s++; return (char *) s; } /*-------------------------------------------------------------------------* * gettok skips over whitespaces or '=' and returns the next token found, * if the token is something like i(xxx), v(yyy), or v(xxx,yyy) * -- h_vogt 10.07.2010. *-------------------------------------------------------------------------*/ char * gettok_iv(char **s) { char *p_src = *s; /* location in source string */ char c; /* current char */ /* Step past whitespace and '=' */ while (isspace_c(c = *p_src) || (c == '=')) { p_src++; } /* Test for valid leading character */ if (((c =*p_src) == '\0') || ((c != 'v') && (c != 'i') && (c != 'V') && (c != 'I'))) { *s = p_src; /* update position in string */ return (char *) NULL; } /* Allocate buffer for token being returned */ char * const token = TMALLOC(char, strlen(p_src) + 1); char *p_dst = token; /* location in token */ // add v or i to buf *p_dst++ = *p_src++; { int n_paren = 0; /* Skip any space between v/V/i/I and '(' */ p_src = skip_ws(p_src); while ((c = *p_src) != '\0') { /* Keep track of nesting level */ if (c == '(') { n_paren++; } else if (c == ')') { n_paren--; } if (isspace_c(c)) { /* Do not copy whitespace to output */ p_src++; } else { *p_dst++ = *p_src++; if (n_paren == 0) { break; } } } } /* Step past whitespace and ',' */ while (isspace_c(c = *p_src) || (c == ',')) { p_src++; } *s = p_src; /* update position in string */ return token; } /* end of function gettok_iv */ /*-------------------------------------------------------------------------* * gettok_noparens was added by SDB on 4.21.2003. * It acts like gettok, except that it treats parens and commas like * whitespace while looking for the POLY token. That is, it stops * parsing and returns when it finds one of those chars. It is called from * 'translate' (subckt.c). *-------------------------------------------------------------------------*/ char * gettok_noparens(char **s) { char c; const char *token, *token_e; *s = skip_ws(*s); if (!**s) return NULL; /* return NULL if we come to end of line */ token = *s; while ((c = **s) != '\0' && !isspace_c(c) && (**s != '(') && (**s != ')') && (**s != ',') ) { (*s)++; } token_e = *s; *s = skip_ws(*s); return copy_substring(token, token_e); } /*-------------------------------------------------------------------------* * gettok_model acts like gettok_noparens, however when it encounters a '{', * it searches for the corresponding '}' and adds the string to the output * token. *-------------------------------------------------------------------------*/ char * gettok_model(char **s) { char c; const char *token, *token_e; *s = skip_ws(*s); if (!**s) return NULL; /* return NULL if we come to end of line */ token = *s; while ((c = **s) != '\0' && !isspace_c(c) && (**s != '(') && (**s != ')') && (**s != ',') ) { (*s)++; if (**s == '{') { char *tmpstr = gettok_char(s, '}', FALSE, TRUE); tfree(tmpstr); } } token_e = *s; *s = skip_ws(*s); return copy_substring(token, token_e); } char * gettok_instance(char **s) { char c; const char *token, *token_e; *s = skip_ws(*s); if (!**s) return NULL; /* return NULL if we come to end of line */ token = *s; while ((c = **s) != '\0' && !isspace_c(c) && (**s != '(') && (**s != ')') ) { (*s)++; } token_e = *s; /* Now iterate up to next non-whitespace char */ *s = skip_ws(*s); return copy_substring(token, token_e); } /* get the next token starting at next non white spice, stopping at p, if inc_p is true, then including p, else excluding p, return NULL if p is not found. If '}', ']' or ')' and nested is true, find corresponding p */ char * gettok_char(char **s, char p, bool inc_p, bool nested) { char c; const char *token, *token_e; *s = skip_ws(*s); if (!**s) return NULL; /* return NULL if we come to end of line */ token = *s; if (nested && ((p == '}') || (p == ')') || (p == ']'))) { char q; int count = 0; /* find opening bracket */ if (p == '}') q = '{'; else if (p == ']') q = '['; else q = '('; /* add string in front of q, excluding q */ while ((c = **s) != '\0' && (**s != q)) (*s)++; /* return if nested bracket found, excluding its character */ while ((c = **s) != '\0') { if (c == q) count++; else if (c == p) count--; if (count == 0) break; (*s)++; } } else /* just look for p and return string, excluding p */ while ((c = **s) != '\0' && (**s != p)) (*s)++; if (c == '\0') /* p not found */ return NULL; if (inc_p) /* add p */ (*s)++; token_e = *s; /* Now iterate up to next non-whitespace char */ *s = skip_ws(*s); return copy_substring(token, token_e); } /*-------------------------------------------------------------------------* * gettok_node was added by SDB on 12.3.2003 * It acts like gettok, except that it treats parens and commas like * whitespace (i.e. it ignores them). Use it when parsing through netnames * (node names) since they may be grouped using ( , ). *-------------------------------------------------------------------------*/ char * gettok_node(char **s) { char c; const char *token, *token_e; if (*s == NULL) return NULL; while (isspace_c(**s) || (**s == '(') || (**s == ')') || (**s == ',') ) (*s)++; /* iterate over whitespace and ( , ) */ if (!**s) return NULL; /* return NULL if we come to end of line */ token = *s; while ((c = **s) != '\0' && !isspace_c(c) && (**s != '(') && (**s != ')') && (**s != ',') ) /* collect chars until whitespace or ( , ) */ (*s)++; token_e = *s; /* Now iterate up to next non-whitespace char */ while (isspace_c(**s) || (**s == '(') || (**s == ')') || (**s == ',') ) (*s)++; /* iterate over whitespace and ( , ) */ return copy_substring(token, token_e); } /*-------------------------------------------------------------------------* * get_l_paren iterates the pointer forward in a string until it hits * the position after the next left paren "(". It returns 0 if it found a left * paren, and 1 if no left paren is found. It is called from 'translate' * (subckt.c). *-------------------------------------------------------------------------*/ int get_l_paren(char **s) { while (**s && (**s != '(')) (*s)++; if (!**s) return 1; (*s)++; return **s == '\0'; } /*-------------------------------------------------------------------------* * get_r_paren iterates the pointer forward in a string until it hits * the position after the next right paren ")". It returns 0 if it found a right * paren, and 1 if no right paren is found. It is called from 'translate' * (subckt.c). *-------------------------------------------------------------------------*/ int get_r_paren(char **s) { while (**s && (**s != ')')) (*s)++; if (!**s) return 1; (*s)++; return **s == '\0'; } /*-------------------------------------------------------------------------* * this function strips all white space inside parens * is needed in gettoks (dotcards.c) for correct processing of expressions * like " .plot v( 5 , 4 ) v( 6 )" -> .plot v(5,4) v(6)" *-------------------------------------------------------------------------*/ char * stripWhiteSpacesInsideParens(const char *str) { str = skip_ws(str); /* Skip leading whitespace */ const size_t n_char_str = strlen(str); /* Allocate buffer for string being built */ char * const str_out = TMALLOC(char, n_char_str + 1); char *p_dst = str_out; /* location in str_out */ char ch; /* current char */ /* Process input string until its end */ for ( ; ; ) { /* Add char. If at end of input string, return the string * that was built */ if ((*p_dst++ = (ch = *str++)) == '\0') { return str_out; } /* If the char is a ')' add all non-whitespace until ')' or, * if the string is malformed, until '\0' */ if (ch == '(') { for ( ; ; ) { /* If at end of input string, the closing ') was missing. * The caller will need to resolve this issue. */ if ((ch = *str++) == '\0') { *p_dst = '\0'; return str_out; } if (isspace((int) ch)) { /* skip whitespace */ continue; } /* Not whitespace, so add next character */ *p_dst++ = ch; /* If the char that was added was ')', done */ if (ch == ')') { break; } } /* end of loop processing () */ } /* end of case of '(' found */ } /* end of loop over chars in input string */ } /* end of function stripWhiteSpacesInsideParens */ bool isquote(char ch) { return ch == '\'' || ch == '"'; } bool is_arith_char(char c) { return c != '\0' && strchr("+-*/()<>?:|&^!%\\", c); } bool str_has_arith_char(char *s) { for (; *s; s++) if (is_arith_char(*s)) return TRUE; return FALSE; } int get_comma_separated_values(char *values[], char *str) { int count = 0; char *comma_ptr; while ((comma_ptr = strchr(str, ',')) != NULL) { char *ptr = skip_back_ws(comma_ptr, str); values[count++] = copy_substring(str, ptr); str = skip_ws(comma_ptr + 1); } values[count++] = copy(str); return count; } /* check if the given token matches a model name either exact then return 1 or modulo a trailing model binning extension '\.[0-9]+' then return 2 */ int model_name_match(const char *token, const char *model_name) { const char *p; size_t token_len = strlen(token); if (strncmp(token, model_name, token_len) != 0) return 0; p = model_name + token_len; // exact match if (*p == '\0') return 1; // check for . if (*p++ != '.') return 0; // minimum one trailing char if (*p == '\0') return 0; // all of them digits for (; *p; p++) if (!isdigit_c(*p)) return 0; return 2; } tmpk8ny_4pz/src/misc/Makefile.am0000644000175000017500000000134513546075722016741 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libmisc.la libmisc_la_SOURCES = \ getopt_long_bsd.c \ getopt_bsd.h \ alloc.c \ alloc.h \ dup2.c \ dstring.c \ dup2.h \ hash.c \ ivars.c \ ivars.h \ mktemp.c \ mktemp.h \ printnum.c \ printnum.h \ string.c \ tilde.c \ tilde.h \ misc_time.c \ misc_time.h \ wlist.c \ util.c \ util.h ## Note that the getopt files get compiled unconditionnaly but some ## magic #define away the body of their own code if the compilation environment ## provides an implementation of its own (like GNU libc) AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/misc/dup2.h0000644000175000017500000000026613546075722015731 0ustar carstencarsten/************* * Header file for dup2.c * 1999 E. Rouat ************/ #ifndef ngspice_DUP2_H #define ngspice_DUP2_H #ifndef HAVE_DUP2 dup2(int oldd, int newd); #endif #endif tmpk8ny_4pz/src/misc/printnum.c0000644000175000017500000000115013546075722016717 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group Modified: 2001 Paolo Nenzi **********/ /* Paolo Nenzi 2001: printnum does not returns static data anymore. * It is up to the caller to allocate space for strings. */ #include "ngspice/ngspice.h" #include "printnum.h" #include int cp_numdgt = -1; void printnum(char *buf, double num) { int n; if (cp_numdgt > 1) n = cp_numdgt; else n = 6; if (num < 0.0) n--; (void) sprintf(buf, "%.*e", n, num); } tmpk8ny_4pz/src/misc/misc_time.c0000644000175000017500000000454013546075722017022 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ /* * Date and time utility functions */ #include "ngspice/ngspice.h" #include #include "misc_time.h" #ifdef HAVE_LOCALTIME #include #endif #ifdef HAVE_GETRUSAGE # include # include # include #else # ifdef HAVE_TIMES # include # include # include # else # ifdef HAVE_FTIME /* default to ftime if we can't get real CPU times */ # include # include # endif # endif #endif #ifdef HAVE_FTIME # include #endif /* Return the date. Return value is static data. */ char * datestring(void) { #ifdef HAVE_LOCALTIME static char tbuf[45]; struct tm *tp; char *ap; size_t i; time_t tloc; time(&tloc); tp = localtime(&tloc); ap = asctime(tp); (void) sprintf(tbuf, "%.20s", ap); (void) strcat(tbuf, ap + 19); i = strlen(tbuf); tbuf[i - 1] = '\0'; return (tbuf); #else return ("today"); #endif } /* return time interval in seconds and milliseconds */ #ifdef HAVE_FTIME struct timeb timebegin; void timediff(struct timeb *now, struct timeb *begin, int *sec, int *msec) { *msec = (int) now->millitm - (int) begin->millitm; *sec = (int) now->time - (int) begin->time; if (*msec < 0) { *msec += 1000; (*sec)--; } return; } #endif /* * How many seconds have elapsed in running time. * This is the routine called in IFseconds */ double seconds(void) { #ifdef HAVE_GETRUSAGE int ret; struct rusage ruse; memset(&ruse, 0, sizeof(ruse)); ret = getrusage(RUSAGE_SELF, &ruse); if(ret == -1) { perror("getrusage(): "); return 1; } return ((double)ruse.ru_utime.tv_sec + (double) ruse.ru_utime.tv_usec / 1000000.0); #else #ifdef HAVE_TIMES struct tms tmsbuf; times(&tmsbuf); return((double) tmsbuf.tms_utime / HZ); #else #ifdef HAVE_FTIME struct timeb timenow; int sec, msec; ftime(&timenow); timediff(&timenow, &timebegin, &sec, &msec); return(sec + (double) msec / 1000.0); #else /* unknown */ /* don't know how to do this in general. */ return(-1.0); /* Obvious error condition */ #endif /* !FTIME */ #endif /* !SYSV */ #endif /* !BSD */ } tmpk8ny_4pz/src/misc/alloc.c0000644000175000017500000000554613546075722016152 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ /* for thread handling */ #if defined __MINGW32__ || defined _MSC_VER #include #endif /* * Memory alloction functions */ #include "ngspice/ngspice.h" #ifdef SHARED_MODULE #ifndef HAVE_LIBPTHREAD #ifdef SRW #define mutex_lock(a) AcquireSRWLockExclusive(a) #define mutex_unlock(a) ReleaseSRWLockExclusive(a) typedef SRWLOCK mutexType; #else #define mutex_lock(a) EnterCriticalSection(a) #define mutex_unlock(a) LeaveCriticalSection(a) typedef CRITICAL_SECTION mutexType; #endif extern mutexType allocMutex; #else #include #define mutex_lock(a) pthread_mutex_lock(a) #define mutex_unlock(a) pthread_mutex_unlock(a) typedef pthread_mutex_t mutexType; extern mutexType allocMutex; #endif #endif #ifndef HAVE_LIBGC /*saj For Tcl module locking*/ #ifdef TCL_MODULE #include #endif /* Malloc num bytes and initialize to zero. Fatal error if the space can't * be tmalloc'd. Return NULL for a request for 0 bytes. */ /* New implementation of tmalloc, it uses calloc and does not call memset() */ void * tmalloc(size_t num) { void *s; /*saj*/ #ifdef TCL_MODULE Tcl_Mutex *alloc; alloc = Tcl_GetAllocMutex(); #endif if (!num) return NULL; /*saj*/ #ifdef TCL_MODULE Tcl_MutexLock(alloc); #elif defined SHARED_MODULE mutex_lock(&allocMutex); #endif s = calloc(num,1); /*saj*/ #ifdef TCL_MODULE Tcl_MutexUnlock(alloc); #elif defined SHARED_MODULE mutex_unlock(&allocMutex); #endif if (!s){ fprintf(stderr,"malloc: Internal Error: can't allocate %ld bytes. \n",(long)num); #if defined HAS_WINGUI || defined SHARED_MODULE controlled_exit(EXIT_FAILURE); #else exit(EXIT_FAILURE); #endif } return(s); } void * trealloc(const void *ptr, size_t num) { void *s; /*saj*/ #ifdef TCL_MODULE Tcl_Mutex *alloc; alloc = Tcl_GetAllocMutex(); #endif if (!num) { if (ptr) free((void*) ptr); return NULL; } if (!ptr) s = tmalloc(num); else { /*saj*/ #ifdef TCL_MODULE Tcl_MutexLock(alloc); #elif defined SHARED_MODULE mutex_lock(&allocMutex); #endif s = realloc((void*) ptr, num); /*saj*/ #ifdef TCL_MODULE Tcl_MutexUnlock(alloc); #elif defined SHARED_MODULE mutex_unlock(&allocMutex); #endif } if (!s) { fprintf(stderr,"realloc: Internal Error: can't allocate %ld bytes.\n", (long)num); #if defined HAS_WINGUI || defined SHARED_MODULE controlled_exit(EXIT_FAILURE); #else exit(EXIT_FAILURE); #endif } return(s); } void txfree(const void *ptr) { /*saj*/ #ifdef TCL_MODULE Tcl_Mutex *alloc; alloc = Tcl_GetAllocMutex(); Tcl_MutexLock(alloc); #endif #ifdef SHARED_MODULE mutex_lock(&allocMutex); #endif if (ptr) free((void*) ptr); /*saj*/ #ifdef TCL_MODULE Tcl_MutexUnlock(alloc); #elif defined SHARED_MODULE mutex_unlock(&allocMutex); #endif } #endif tmpk8ny_4pz/src/misc/mktemp.c0000644000175000017500000000100013546075722016332 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ /* * A more portable version of the standard "mktemp( )" function * * FIXME: remove smktemp() and adjust all callers to use tmpfile(3). */ #include "ngspice/ngspice.h" #include "mktemp.h" #ifdef HAVE_UNISTD_H #include #endif #ifndef TEMPFORMAT #define TEMPFORMAT "temp%s%d" #endif char * smktemp(char *id) { if (!id) id = "sp"; return tprintf(TEMPFORMAT, id, getpid()); } tmpk8ny_4pz/src/misc/hash.c0000644000175000017500000010223013546075722015767 0ustar carstencarsten/* ----------------------------------------------------------------- FILE: hash.c DESCRIPTION:This file contains the routines for building and maintaining a hash table. Abstract : Contains routines for managing hash tables. Tables may be given their own hash and compare functions. If your keys are pointers, numbers or strings, it is recommended that you use the functions * HASH_DEF_HASH_PTR and HASH_DEF_CMP_PTR for pointers, * HASH_DEF_HASH_NUM and HASH_DEF_CMP_NUM for numbers, and * HASH_DEF_HASH_STR and HASH_DEF_CMP_STR for strings. The hash package will recognize these and run faster as a result. You may use your own hash and compare functions provided they look like * int hash(void * key) and * int compare(void * key1, void * key2). The hash function's return value should be in the interval [0, Uint_MAX]. The compare should return zero if the two keys are equal and a non-zero value otherwise. CONTENTS: DATE: Jul 7, 1988 - original coding. 1988 - 2009 many updates... REVISIONS: ----------------------------------------------------------------- */ #include "ngspice/ngspice.h" #include "ngspice/hash.h" /* definitions local to this file only */ /* ********************** TYPE DEFINITIONS ************************* */ #define PRIMECOUNT 200 #define MINPRIMESIZE 7 /* ********************** STATIC DEFINITIONS ************************* */ static NGTABLEPTR _nghash_find_item(NGHASHPTR hhtable,void *user_key,void *data) ; NGHASHPTR nghash_init_with_parms(nghash_compare_func_t *comp_func, nghash_func_t *hash_func, int num, int max, double growth, NGHASHFLAGS_T flags) { BOOL unique ; /* entries are to be unique */ BOOL power_of_two ; /* want hash table power of 2 */ NGHASHPTR hashtable ; unique = flags & NGHASH_UNIQUE ; power_of_two = flags & NGHASH_POWER_OF_TWO ; hashtable = NGMALLOC( 1, NGHASHBOX ) ; if( power_of_two ) { hashtable->size = nghash_table_size2( num ) ; } else { /* prime size */ hashtable->size = nghash_table_size( num ) ; } hashtable->compare_func = comp_func ; hashtable->hash_func = hash_func ; hashtable->hash_table = NGMALLOC( hashtable->size, NGTABLEPTR ) ; hashtable->max_density = max ; hashtable->need_resize = hashtable->size * hashtable->max_density ; hashtable->growth_factor = growth ; hashtable->unique = (unique ? 1 : 0); hashtable->power_of_two = (power_of_two ? 1 : 0); hashtable->thread = NULL ; /* initialize list */ hashtable->last_entry = NULL ; /* end of list */ hashtable->num_entries = 0 ; hashtable->call_from_free = FALSE ; hashtable->access = 0; hashtable->collision = 0; hashtable->enumeratePtr = NULL ; return(hashtable) ; } /* end nghash_init_with_parms() */ void nghash_resize(NGHASHPTR hashtable, int num) { NGTABLEPTR *oldtable, hptr, zapptr ; NGTABLEPTR new_hptr ; /* new hash table entry */ int i, oldsize ; oldsize = hashtable->size ; oldtable = hashtable->hash_table; if( hashtable->power_of_two ) { hashtable->size = nghash_table_size2( num - 1 ) ; } else { hashtable->size = nghash_table_size( num ) ; } hashtable->num_entries = 0 ; hashtable->thread = NULL ; hashtable->last_entry = NULL ; /* end of list */ hashtable->need_resize = hashtable->size * hashtable->max_density ; hashtable->hash_table = NGMALLOC( hashtable->size, NGTABLEPTR); for( i = 0 ; i < oldsize ; i++ ) { for( hptr = oldtable[i]; hptr; ) { zapptr = hptr ; nghash_insert( hashtable, hptr->key, hptr->data ) ; if( hashtable->searchPtr && hashtable->searchPtr == hptr ) { new_hptr = _nghash_find_item(hashtable, hptr->key, hptr->data ) ; hashtable->searchPtr = new_hptr ; } if( hashtable->enumeratePtr && hashtable->enumeratePtr == hptr ) { new_hptr = _nghash_find_item(hashtable, hptr->key, hptr->data ) ; hashtable->enumeratePtr = new_hptr ; } /* Now safe to free */ if( hashtable->hash_func == NGHASH_DEF_HASH(NGHASH_FUNC_STR) ) { NGFREE( hptr->key); } hptr = hptr->next ; NGFREE( zapptr ) ; } } NGFREE( oldtable ); } /* end nghash_resize() */ void nghash_reset_stat(NGHASHPTR hashtable) { hashtable->collision = 0 ; hashtable->access = 0 ; } NGHASHPTR nghash_init(int num_entries) { return( nghash_init_with_parms( NGHASH_DEF_CMP(NGHASH_FUNC_STR), NGHASH_DEF_HASH(NGHASH_FUNC_STR), num_entries, NGHASH_DEF_MAX_DENSITY, NGHASH_DEF_GROW_FACTOR, NGHASH_UNIQUE) ) ; } /* end nghash_init() */ NGHASHPTR nghash_init_pointer(int num_entries) { return( nghash_init_with_parms( NGHASH_DEF_CMP(NGHASH_FUNC_PTR), NGHASH_DEF_HASH(NGHASH_FUNC_PTR), num_entries, NGHASH_DEF_MAX_DENSITY, NGHASH_DEF_GROW_FACTOR, NGHASH_UNIQUE_TWO) ) ; } /* end nghash_init_pointer() */ NGHASHPTR nghash_init_integer(int num_entries) { return( nghash_init_with_parms( NGHASH_DEF_CMP(NGHASH_FUNC_NUM), NGHASH_DEF_HASH(NGHASH_FUNC_NUM), num_entries, NGHASH_DEF_MAX_DENSITY, NGHASH_DEF_GROW_FACTOR, NGHASH_UNIQUE_TWO) ) ; } /* end nghash_init_integer() */ int nghash_table_get(NGHASHPTR hashtable) { return(hashtable->size) ; } int nghash_max_density(NGHASHPTR hashtable,int max_density) { if( max_density > 0 ) { hashtable->max_density = max_density ; hashtable->need_resize = hashtable->size * hashtable->max_density ; } return(hashtable->max_density) ; } void nghash_empty(NGHASHPTR hashtable, void (*delete_data) (void *), void (*delete_key) (void *)) { NGTABLEPTR *table, hptr , zapptr ; nghash_reset_stat(hashtable); table = hashtable->hash_table ; if( table ) { for( hptr = hashtable->thread ; hptr ; ) { zapptr = hptr ; hptr = hptr->thread_next ; /* execute user define delete function if requested */ if( delete_data ) { delete_data (zapptr->data); } if( hashtable->hash_func == NGHASH_DEF_HASH(NGHASH_FUNC_STR) ) { /* we allocated this ourselves we can delete it */ NGFREE( zapptr->key ) ; } else if( delete_key ) { delete_key (zapptr->key); } NGFREE( zapptr ) ; } memset(table, 0, (size_t) hashtable->size*sizeof(NGTABLEPTR)) ; } /* free decks associated with tree if they exist */ hashtable->thread = NULL ; /* initialize list */ hashtable->last_entry = NULL ; /* initialize list */ hashtable->num_entries = 0 ; } /* end nghash_empty() */ void nghash_free(NGHASHPTR hashtable, void (*delete_data) (void *), void (*delete_key) (void *)) { hashtable->call_from_free = TRUE; nghash_empty(hashtable, delete_data, delete_key ) ; hashtable->call_from_free = FALSE ; NGFREE( hashtable->hash_table ) ; NGFREE( hashtable ) ; } /* end nghash_free() */ void nghash_free_string_func( char *str ) { NGFREE( str ) ; } /* end nghash_free_string_func() */ void nghash_free_string_hashtable(NGHASHPTR hashtable) { hashtable->call_from_free = TRUE; nghash_empty(hashtable, (ngdelete) nghash_free_string_func, NULL ) ; hashtable->call_from_free = FALSE ; NGFREE( hashtable->hash_table ) ; NGFREE( hashtable ) ; } /* end nghash_free_string_hashtable() */ /* ----------------------------------------------------------------- * Now nghash_search is broken into four routines: nghash_find, * nghash_find_again, nghash_delete, and nghash_insert. ----------------------------------------------------------------- */ void * _nghash_find(NGHASHPTR hashtable, void * user_key,BOOL *status) { int ret_code ; unsigned int hsum ; NGTABLEPTR curPtr ; NGTABLEPTR *table ; /* initialization */ table = hashtable->hash_table ; DS(hashtable->access++;) ; /* ----------------------------------------------------------------- * Process the hash function. ----------------------------------------------------------------- */ switch( (intptr_t) hashtable->hash_func ) { case NGHASH_FUNC_STR: NGHASH_STR_TO_HASH( user_key, hsum, hashtable->size); break ; case NGHASH_FUNC_PTR: NGHASH_PTR_TO_HASH( user_key, hsum, hashtable->size); break ; case NGHASH_FUNC_NUM: NGHASH_NUM_TO_HASH( user_key, hsum, hashtable->size); break ; default: hsum = hashtable->hash_func (hashtable, user_key); } curPtr = table[hsum] ; if( curPtr ) { /* list started at this hash */ for( ; curPtr ; curPtr=curPtr->next ) { if( hashtable->compare_func == NGHASH_DEF_CMP(NGHASH_FUNC_STR) ) { ret_code = strcmp((char *)curPtr->key, (char *) user_key ) ; } else if ( hashtable->compare_func == NGHASH_DEF_CMP(NGHASH_FUNC_PTR) || hashtable->compare_func == NGHASH_DEF_CMP(NGHASH_FUNC_NUM) ) { ret_code = NGHASH_PTR_COMPARE_FUNC( curPtr->key, user_key ); } else { ret_code = hashtable->compare_func (curPtr->key, user_key); } if( ret_code == STRINGEQ ) { /* ---------------------------------------------------- * Operation find or enter with unique items, we * return item. On a nonunique enter, add item below. ------------------------------------------------------- */ hashtable->searchPtr = curPtr ; if( status ) { *status = TRUE ; } return( curPtr->data ) ; } } } /* cant find anything on a find operation */ hashtable->searchPtr = NULL ; if( status ) { *status = FALSE ; } return( NULL ) ; } /* end nghash_find() */ /* ----------------------------------------------------------------- * This find does not understand 0 or NULL data items. Use _nghash_find * instead. * ----------------------------------------------------------------- */ void * nghash_find(NGHASHPTR hashtable, void * user_key) { return( _nghash_find( hashtable, user_key, NULL ) ) ; } /* end nghash_find() */ void * _nghash_find_again(NGHASHPTR hashtable, void * user_key,BOOL *status) { int ret_code ; /* comparison return code */ NGTABLEPTR curPtr ; /* current hashtable entry */ /* initialization */ DS(hashtable->access++;) ; if( hashtable->searchPtr ) { for(curPtr=hashtable->searchPtr->next; curPtr ; curPtr=curPtr->next ) { if( hashtable->compare_func == NGHASH_DEF_CMP(NGHASH_FUNC_STR) ) { ret_code = strcmp((char *)curPtr->key, (char *) user_key ) ; } else if ( hashtable->compare_func == NGHASH_DEF_CMP(NGHASH_FUNC_PTR) || hashtable->compare_func == NGHASH_DEF_CMP(NGHASH_FUNC_NUM) ) { ret_code = NGHASH_PTR_COMPARE_FUNC( curPtr->key, user_key ); } else { ret_code = hashtable->compare_func (curPtr->key, user_key); } if( ret_code == STRINGEQ ) { hashtable->searchPtr = curPtr ; if( status ) { *status = TRUE ; } return( curPtr->data ) ; } } } if( status ) { *status = FALSE ; } return(NULL) ; } /* end _nghash_find_again() */ void * nghash_find_again(NGHASHPTR hashtable, void * user_key) { return( _nghash_find_again( hashtable, user_key, NULL ) ) ; } /* end nghash_find_again() */ void * nghash_delete(NGHASHPTR hashtable, void * user_key) { int ret_code ; unsigned int hsum ; void * user_data_p ; NGTABLEPTR curPtr, *prevPtr ; NGTABLEPTR *table ; /* initialization */ table = hashtable->hash_table ; DS(hashtable->access++;) ; /* ----------------------------------------------------------------- * Process the hash function. ----------------------------------------------------------------- */ switch( (intptr_t) hashtable->hash_func ) { case NGHASH_FUNC_STR: NGHASH_STR_TO_HASH( user_key, hsum, hashtable->size); break ; case NGHASH_FUNC_PTR: NGHASH_PTR_TO_HASH( user_key, hsum, hashtable->size); break ; case NGHASH_FUNC_NUM: NGHASH_NUM_TO_HASH( user_key, hsum, hashtable->size); break ; default: hsum = hashtable->hash_func (hashtable, user_key); } /* insert into table only if distinct number */ curPtr = table[hsum] ; if( curPtr ) { /* list started at this hash */ prevPtr = table + hsum ; for( ; curPtr ; prevPtr = &(curPtr->next), curPtr=curPtr->next ) { if( hashtable->compare_func == NGHASH_DEF_CMP(NGHASH_FUNC_STR) ) { ret_code = strcmp((char *)curPtr->key, (char *) user_key ) ; } else if ( hashtable->compare_func == NGHASH_DEF_CMP(NGHASH_FUNC_PTR) || hashtable->compare_func == NGHASH_DEF_CMP(NGHASH_FUNC_NUM) ) { ret_code = NGHASH_PTR_COMPARE_FUNC( curPtr->key, user_key ); } else { ret_code = hashtable->compare_func (curPtr->key, user_key); } if( ret_code == STRINGEQ ) { if( curPtr->thread_prev ) { /* no sentinel */ curPtr->thread_prev->thread_next = curPtr->thread_next; } else { hashtable->thread = curPtr->thread_next ; } if( curPtr->thread_next ) { /* no sentinel */ curPtr->thread_next->thread_prev = curPtr->thread_prev ; } else { hashtable->last_entry = curPtr->thread_prev ; } *prevPtr = curPtr->next ; if( hashtable->hash_func == NGHASH_DEF_HASH(NGHASH_FUNC_STR) ) { /* we allocated this ourselves we can delete it */ NGFREE( curPtr->key ) ; } user_data_p = curPtr->data ; NGFREE(curPtr); hashtable->num_entries-- ; return( user_data_p ) ; } } } return( NULL ) ; /* didn't find anything to delete */ } /* end nghash_delete() */ void * nghash_insert(NGHASHPTR hashtable, void * user_key, void * data) { int ret_code ; unsigned int hsum ; NGTABLEPTR curPtr, temptr, curTable ; NGTABLEPTR *table ; /* initialization */ table = hashtable->hash_table ; DS(hashtable->access++;) /* ----------------------------------------------------------------- * Process the hash function. ----------------------------------------------------------------- */ switch( (intptr_t) hashtable->hash_func ) { case NGHASH_FUNC_STR: NGHASH_STR_TO_HASH( user_key, hsum, hashtable->size); break ; case NGHASH_FUNC_PTR: NGHASH_PTR_TO_HASH( user_key, hsum, hashtable->size); break ; case NGHASH_FUNC_NUM: NGHASH_NUM_TO_HASH( user_key, hsum, hashtable->size); break ; default: hsum = hashtable->hash_func (hashtable, user_key); } /* insert into table only if distinct number */ temptr = table[hsum] ; if( temptr ) { /* list started at this hash */ for( curPtr = temptr ; curPtr ; curPtr=curPtr->next ) { DS(hashtable->collision++;) ; if( hashtable->compare_func == NGHASH_DEF_CMP(NGHASH_FUNC_STR) ) { ret_code = strcmp((char *)curPtr->key, (char *) user_key ) ; } else if ( hashtable->compare_func == NGHASH_DEF_CMP(NGHASH_FUNC_PTR) || hashtable->compare_func == NGHASH_DEF_CMP(NGHASH_FUNC_NUM) ) { ret_code = NGHASH_PTR_COMPARE_FUNC( curPtr->key, user_key); } else { ret_code = hashtable->compare_func (curPtr->key, user_key); } if( ret_code == STRINGEQ ) { if( hashtable->unique ) { /* ---------------------------------------------------- * Operation enter with unique items, we * return item. On a nonunique enter, add item below. ------------------------------------------------------- */ hashtable->searchPtr = curPtr ; return( curPtr->data ) ; } else { break ; /* avoid some work for nonunique hash_enter */ } } } } /* now save data */ hashtable->num_entries++ ; table[hsum] = curTable = NGMALLOC(1,NGTABLEBOX); curTable->data = data ; if( hashtable->hash_func == NGHASH_DEF_HASH(NGHASH_FUNC_STR) ) { curTable->key = copy((char *) user_key); } else { curTable->key = user_key ; } curTable->next = temptr ; /* now fix thread which goes through hash table */ if( hashtable->last_entry ) { hashtable->last_entry->thread_next = curTable ; curTable->thread_prev = hashtable->last_entry ; hashtable->last_entry = curTable ; } else { hashtable->thread = hashtable->last_entry = curTable ; curTable->thread_prev = NULL ; } curTable->thread_next = NULL ; if( hashtable->num_entries >= hashtable->need_resize ) { int newsize ; /* new size of table */ newsize = (int)(hashtable->size * hashtable->growth_factor); nghash_resize(hashtable, newsize ) ; } return( NULL ) ; /* no conflict on a enter */ } /* end nghash_insert() */ /* returns the pointer with the item */ static NGTABLEPTR _nghash_find_item(NGHASHPTR htable,void * user_key,void * data) { int ret_code ; unsigned int hsum ; NGTABLEPTR curPtr, temptr ; NGTABLEPTR *table ; /* initialization */ table = htable->hash_table ; /* ----------------------------------------------------------------- * Process the hash function. ----------------------------------------------------------------- */ switch( (intptr_t) htable->hash_func ) { case NGHASH_FUNC_STR: NGHASH_STR_TO_HASH( user_key, hsum, htable->size); break ; case NGHASH_FUNC_PTR: NGHASH_PTR_TO_HASH( user_key, hsum, htable->size); break ; case NGHASH_FUNC_NUM: NGHASH_NUM_TO_HASH( user_key, hsum, htable->size); break ; default: hsum = htable->hash_func (htable, user_key); } /* insert into table only if distinct number */ if( (temptr = table[hsum]) != NULL ) { /* list started at this hash */ for(curPtr=temptr ; curPtr ; curPtr=curPtr->next ) { if( htable->compare_func == NGHASH_DEF_CMP(NGHASH_FUNC_STR) ) { ret_code = strcmp((char *)curPtr->key, (char *) user_key ) ; } else if ( htable->compare_func == NGHASH_DEF_CMP(NGHASH_FUNC_PTR) || htable->compare_func == NGHASH_DEF_CMP(NGHASH_FUNC_NUM) ) { ret_code = NGHASH_PTR_COMPARE_FUNC( curPtr->key, user_key); } else { ret_code = htable->compare_func (curPtr->key, user_key); } if( ret_code == STRINGEQ ) { if( data ) { if( curPtr->data == data ) { return( curPtr ) ; } } else { return( curPtr ) ; } } } } return( NULL ) ; /* no matching item */ } /* end _nghash_find_item() */ void * nghash_enumeratek(NGHASHPTR htable, void * *key_return, BOOL start_flag) { NGTABLEPTR current_spot ; /* current place in threaded list */ if( start_flag ) { if( (htable->enumeratePtr = htable->thread) != NULL ) { current_spot = htable->enumeratePtr ; *key_return = current_spot->key ; return( current_spot->data ) ; } } else { if( htable->enumeratePtr && (htable->enumeratePtr = htable->enumeratePtr->thread_next) != NULL ) { current_spot = htable->enumeratePtr ; *key_return = current_spot->key ; return( current_spot->data ) ; } } *key_return = NULL ; return( NULL ) ; } /* end nghash_enumeratek() */ void * nghash_enumerate(NGHASHPTR htable,BOOL start_flag) { NGTABLEPTR current_spot ; /* current place in threaded list */ if( start_flag ) { if( (htable->enumeratePtr = htable->thread) != NULL ) { current_spot = htable->enumeratePtr ; return( current_spot->data ) ; } } else { if( htable->enumeratePtr && (htable->enumeratePtr = htable->enumeratePtr->thread_next) != NULL ) { current_spot = htable->enumeratePtr ; return( current_spot->data ) ; } } return( NULL ) ; } /* end nghash_enumerate() */ /* ----------------------------------------------------------------- * This is the reentrant version which uses an iterator. * ----------------------------------------------------------------- */ void * nghash_enumeratekRE(NGHASHPTR htable, void * *key_return, NGHASHITERPTR iter_p) { NGTABLEPTR current_spot ; /* current place in threaded list */ FUNC_NAME("nghash_enumeratekRE") ; if(!(iter_p)) { fprintf( stderr, "ERROR[%s]:Null iterator pointer.\n", routine ) ; return(NULL) ; } if(!(iter_p->position)) { if( (iter_p->position = htable->thread) != NULL ) { current_spot = iter_p->position ; *key_return = current_spot->key ; return( current_spot->data ) ; } } else { if( iter_p->position && (iter_p->position = iter_p->position->thread_next) != NULL ) { current_spot = iter_p->position ; *key_return = current_spot->key ; return( current_spot->data ) ; } } *key_return = NULL ; return( NULL ) ; } /* end nghash_enumeratekRE() */ /* ----------------------------------------------------------------- * This is the reentrant version which uses an iterator. * ----------------------------------------------------------------- */ void * nghash_enumerateRE(NGHASHPTR htable, NGHASHITERPTR iter_p) { NGTABLEPTR current_spot ; /* current place in threaded list */ FUNC_NAME("nghash_enumerateRE") ; if(!(iter_p)) { fprintf( stderr, "ERROR[%s]:Null iterator pointer.\n", routine ) ; return(NULL) ; } if(!(iter_p->position)) { if( (iter_p->position = htable->thread) != NULL ) { current_spot = iter_p->position ; return( current_spot->data ) ; } } else { if( iter_p->position && (iter_p->position = iter_p->position->thread_next) != NULL ) { current_spot = iter_p->position ; return( current_spot->data ) ; } } return( NULL ) ; } /* end nghash_enumerateRE() */ /* ----------------------------------------------------------------- * Merge items in merge_htable into master_htable. Create master_htable * if master_htable is NULL. Returns the merged hash table. * ----------------------------------------------------------------- */ NGHASHPTR nghash_merge( NGHASHPTR master_htable, NGHASHPTR merge_htable ) { NGTABLEPTR ptr ; /* traverse hash table */ if(!(master_htable)) { master_htable = NGMALLOC( 1, NGHASHBOX ) ; *master_htable = *merge_htable ; master_htable->hash_table = NGMALLOC( master_htable->size, NGTABLEPTR ) ; master_htable->thread = NULL ; master_htable->last_entry = NULL ; master_htable->num_entries = 0 ; master_htable->enumeratePtr = NULL ; master_htable->searchPtr = NULL ; master_htable->access = 0 ; master_htable->collision = 0 ; } for( ptr = merge_htable->thread ; ptr ; ptr = ptr->thread_next ) { nghash_insert( master_htable, ptr->key, ptr->data ) ; } return( master_htable ) ; } /* end nghash_merge() */ int nghash_get_size(NGHASHPTR hashtable) { return( hashtable->num_entries ) ; } void nghash_dump(NGHASHPTR htable, void (*print_key) (void *)) { int i ; /* counter */ int count ; /* counter */ NGTABLEPTR *table ; /* hash table */ NGTABLEPTR hptr ; /* hash table element */ table = htable->hash_table ; fprintf( stderr, "Dump of hashtable containing %d entries...\n", htable->num_entries ) ; fprintf( stderr, "Table is %4.2f%% full\n", 100.0 * (double) htable->num_entries / (double) htable->size ) ; for( i = 0 ; i < htable->size ; i++ ) { if( (hptr = table[i]) != NULL ) { fprintf( stderr, " [%5d]:", i ) ; count = 0 ; for( ; hptr ; hptr=hptr->next ) { if( ++count == 3 ) { fprintf( stderr, "\n\t" ) ; count = 0 ; } if( htable->hash_func == NGHASH_DEF_HASH(NGHASH_FUNC_STR) ) { fprintf( stderr, " key:%s ", (char *) hptr->key ) ; } else { fprintf( stderr, " key:%p ", hptr->key ) ; } if( print_key) { print_key (hptr->data); } else { fprintf( stderr, " data:%p ", hptr->data ) ; } } fprintf( stderr, "\n" ) ; } } /* end for( i = 0... */ } /* end nghash_enumerate() */ /* ----------------------------------------------------------------- * nghash_deleteItem - deletes a specified item out of the hash table. * To be useful, unique flag should be off. Otherwise just use nghash_delete. * Returns true if item was deleted. ----------------------------------------------------------------- */ BOOL nghash_deleteItem(NGHASHPTR hashtable, void * user_key, void * data) { int ret_code ; unsigned long hsum ; NGTABLEPTR curPtr, temptr, *prevPtr ; NGTABLEPTR *table ; /* initialization */ table = hashtable->hash_table ; /* ----------------------------------------------------------------- * Process the hash function. ----------------------------------------------------------------- */ switch( (intptr_t) hashtable->hash_func ) { case NGHASH_FUNC_STR: NGHASH_STR_TO_HASH( user_key, hsum, hashtable->size); break ; case NGHASH_FUNC_PTR: NGHASH_PTR_TO_HASH( user_key, hsum, hashtable->size); break ; case NGHASH_FUNC_NUM: NGHASH_NUM_TO_HASH( user_key, hsum, hashtable->size); break ; default: hsum = hashtable->hash_func (hashtable, user_key); } /* insert into table only if distinct number */ temptr = table[hsum] ; if( temptr ) { /* list started at this hash */ prevPtr = table + hsum ; for(curPtr=temptr; curPtr; prevPtr = &(curPtr->next), curPtr=curPtr->next ) { /* ----------------------------------------------------------------- * Look for match. ----------------------------------------------------------------- */ if( hashtable->compare_func == NGHASH_DEF_CMP(NGHASH_FUNC_STR) ) { ret_code = strcmp((char *)curPtr->key, (char *) user_key ) ; } else if ( hashtable->compare_func == NGHASH_DEF_CMP(NGHASH_FUNC_PTR) || hashtable->compare_func == NGHASH_DEF_CMP(NGHASH_FUNC_NUM) ) { ret_code = NGHASH_PTR_COMPARE_FUNC( curPtr->key, user_key ); } else { ret_code = hashtable->compare_func (curPtr->key, user_key); } if( ret_code == STRINGEQ ) { if( curPtr->data == data ) { if( curPtr->thread_prev ) { /* no sentinel */ curPtr->thread_prev->thread_next = curPtr->thread_next; } else { hashtable->thread = curPtr->thread_next ; } if( curPtr->thread_next ) { /* no sentinel */ curPtr->thread_next->thread_prev = curPtr->thread_prev ; } else { hashtable->last_entry = curPtr->thread_prev ; } *prevPtr = curPtr->next; if( hashtable->hash_func == NGHASH_DEF_HASH(NGHASH_FUNC_STR) ) { /* we allocated this ourselves we can delete it */ NGFREE( curPtr->key ) ; } NGFREE(curPtr); hashtable->num_entries-- ; return( TRUE ) ; } } } /* end for(curPtr=temptr... */ } /* end if( temptr... */ return( FALSE ) ; /* could not find item */ } /* end nghash_deleteItem() */ /*---------------------------- hash_table_size -------------------------*/ int nghash_table_size(int minEntries) { int i; BOOL isPrime; int prime; int testPrime; static int primes[PRIMECOUNT] = { 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 991, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997,1009,1013,1019, 1021,1031,1033,1039,1049,1051,1061,1063,1069,1087, 1091,1093,1097,1103,1109,1117,1123,1129,1151,1153, 1163,1171,1181,1187,1193,1201,1213,1217,1223,1229 }; if (minEntries <= MINPRIMESIZE) { return(MINPRIMESIZE); } else { testPrime = minEntries; /* test to see if even */ if ((testPrime % 2) == 0) { testPrime = testPrime + 1; } do { testPrime = testPrime + 2; isPrime = TRUE; for (i=0; i < PRIMECOUNT; i++) { prime = primes[i]; if (testPrime < prime*prime) { break; } if ((testPrime % prime) == 0) { isPrime = FALSE; break; } } } while (!(isPrime)); return(testPrime); } } /* FUNCTION nghash_table_size */ int nghash_table_size2(int minEntries) { int power ; int table_size ; power = 0 ; while( minEntries > 0 ) { minEntries = minEntries >> 1 ; power++ ; } power = MIN( power, 32 ) ; table_size = 1 << power ; table_size = MAX( NGHASH_MIN_SIZE, table_size ) ; return( table_size ) ; } /* end nghash_table_size2() */ void nghash_distribution(NGHASHPTR hashtable) { int i ; /* counter */ long min ; /* min count */ long max ; /* max count */ long nzero_cnt ; /* non zero count */ long this_count ; /* count items at this list */ long tablesize ; /* table size */ double avg ; /* average */ double sum2 ; /* squared sum */ double diff ; /* difference */ double diff2 ; /* difference squared */ double nzavg ; /* non zero average */ double variance ; /* variance of table */ NGTABLEPTR *table ; /* hash table */ NGTABLEPTR hptr ; /* hash table pointer */ FUNC_NAME("nghash_distribution" ) ; tablesize = nghash_tablesize(hashtable) ; table = hashtable->hash_table ; avg = hashtable->num_entries / (double) tablesize ; sum2 = 0.0 ; min = max = 0 ; nzero_cnt = 0 ; for( i = 0 ; i < tablesize ; i++ ) { this_count = 0 ; for( hptr = table[i]; hptr; hptr = hptr->next ) { this_count++ ; } if( i == 0 ) { min = max = this_count ; } else { if( this_count < min ) { min = this_count ; } if( this_count > max ) { max = this_count ; } } if( this_count > 0 ) { nzero_cnt++ ; } diff = (double)this_count - avg ; diff2 = diff * diff ; sum2 += diff2 ; } variance = sum2 / hashtable->num_entries ; nzavg = hashtable->num_entries / (double) nzero_cnt ; fprintf( stderr, "[%s]:min:%ld max:%ld nonzero avg:%f\n", routine, min, max, nzavg ) ; fprintf( stderr, " variance:%f std dev:%f target:%f nonzero entries:%ld / %ld\n", variance, sqrt(variance), avg, nzero_cnt, tablesize ) ; } /* end nghash_distribution() */ tmpk8ny_4pz/src/misc/alloc.h0000644000175000017500000000040613546075722016145 0ustar carstencarsten/************* * Header file for alloc.c * 1999 E. Rouat ************/ #ifndef ngspice_ALLOC_H #define ngspice_ALLOC_H #ifndef HAVE_LIBGC void * tmalloc(size_t num); void * trealloc(const void *ptr, size_t num); void txfree(const void *ptr); #endif #endif tmpk8ny_4pz/src/misc/getopt_bsd.h0000644000175000017500000000556213546075722017215 0ustar carstencarsten/* * Copyright (c) 1987, 1993, 1994, 1996 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* from MINGW gcc 345, H. Vogt 04/10/09 */ #ifndef __GETOPT_BSD_H__ #define __GETOPT_BSD_H__ #ifdef __cplusplus extern "C" { #endif extern int opterr; /* if error message should be printed */ extern int optind; /* index into parent argv vector */ extern int optopt; /* character checked for validity */ extern int optreset; /* reset getopt */ extern char *optarg; /* argument associated with option */ int getopt (int, char * const *, const char *); #ifdef __cplusplus } #endif #endif /* __GETOPT_H__ */ #ifndef __UNISTD_GETOPT__ #ifndef __GETOPT_LONG_BSD_H__ #define __GETOPT_LONG_BSD_H__ #ifdef __cplusplus extern "C" { #endif struct option { const char *name; int has_arg; int *flag; int val; }; int getopt_long (int, char *const *, const char *, const struct option *, int *); #ifndef HAVE_DECL_GETOPT #define HAVE_DECL_GETOPT 1 #endif #define no_argument 0 #define required_argument 1 #define optional_argument 2 #ifdef __cplusplus } #endif #endif /* __GETOPT_LONG_H__ */ #endif /* __UNISTD_GETOPT__ */ tmpk8ny_4pz/src/misc/misc_time.h0000644000175000017500000000047013546075722017025 0ustar carstencarsten/************* * Header file for misc_time.c * 1999 E. Rouat ************/ #ifndef ngspice_MISC_TIME_H #define ngspice_MISC_TIME_H char * datestring(void); double seconds(void); #ifdef HAVE_FTIME extern struct timeb timebegin; void timediff(struct timeb *, struct timeb *, int *, int *); #endif #endif tmpk8ny_4pz/src/misc/dstring.c0000644000175000017500000003074513546075722016531 0ustar carstencarsten/* ----------------------------------------------------------------- FILE: dstring.c DESCRIPTION:This file contains the routines for manipulating dynamic strings. ----------------------------------------------------------------- */ #include "ngspice/ngspice.h" #include #include "ngspice/dstring.h" /* definitions local to this file only */ /* ********************** TYPE DEFINITIONS ************************* */ /* ********************** STATIC DEFINITIONS ************************* */ /* *---------------------------------------------------------------------- * * spice_dstring_init -- * * Initializes a dynamic string, discarding any previous contents * of the string (spice_dstring_free should have been called already * if the dynamic string was previously in use). * * Results: * None. * * Side effects: * The dynamic string is initialized to be empty. * *---------------------------------------------------------------------- */ void spice_dstring_init(SPICE_DSTRINGPTR dsPtr) { dsPtr->string = dsPtr->staticSpace ; dsPtr->length = 0 ; dsPtr->spaceAvl = SPICE_DSTRING_STATIC_SIZE ; dsPtr->staticSpace[0] = '\0'; } /* end spice_dstring_init() */ /* *---------------------------------------------------------------------- * * spice_dstring_append -- * * Append more characters to the current value of a dynamic string. * * Results: * The return value is a pointer to the dynamic string's new value. * * Side effects: * Length bytes from string (or all of string if length is less * than zero) are added to the current value of the string. Memory * gets reallocated if needed to accomodate the string's new size. * * Notes: char *string; String to append. If length is -1 then * this must be null-terminated. * INT length; Number of characters from string to append. * If < 0, then append all of string, up to null at end. * *---------------------------------------------------------------------- */ char *spice_dstring_append(SPICE_DSTRINGPTR dsPtr, const char *string, int length) { int newSize ; /* needed size */ char *newString ; /* newly allocated string buffer */ char *dst ; /* destination */ const char *end ; /* end of string */ if( length < 0){ length = (int) strlen(string) ; } newSize = length + dsPtr->length ; /* ----------------------------------------------------------------- * Allocate a larger buffer for the string if the current one isn't * large enough. Allocate extra space in the new buffer so that there * will be room to grow before we have to allocate again. ----------------------------------------------------------------- */ if (newSize >= dsPtr->spaceAvl) { dsPtr->spaceAvl = 2 * newSize ; newString = TMALLOC(char, dsPtr->spaceAvl) ; memcpy(newString, dsPtr->string, (size_t) dsPtr->length) ; if (dsPtr->string != dsPtr->staticSpace) { txfree(dsPtr->string) ; } dsPtr->string = newString; } /* ----------------------------------------------------------------- * Copy the new string into the buffer at the end of the old * one. ----------------------------------------------------------------- */ for( dst = dsPtr->string + dsPtr->length, end = string+length; string < end; string++, dst++) { *dst = *string ; } *dst = '\0' ; dsPtr->length += length ; return(dsPtr->string) ; } /* end spice_dstring_append() */ /* *---------------------------------------------------------------------- * * spice_dstring_append_lower -- * * Append more characters converted to lower case to the current * value of a dynamic string. * * Results: * The return value is a pointer to the dynamic string's new value. * * Side effects: * Length bytes from string (or all of string if length is less * than zero) are added to the current value of the string. Memory * gets reallocated if needed to accomodate the string's new size. * * Notes: char *string; String to append. If length is -1 then * this must be null-terminated. * INT length; Number of characters from string to append. * If < 0, then append all of string, up to null at end. * *---------------------------------------------------------------------- */ char *spice_dstring_append_lower(SPICE_DSTRINGPTR dsPtr, const char *string, int length) { int newSize ; /* needed size */ char *newString ; /* newly allocated string buffer */ char *dst ; /* destination */ const char *end ; /* end of string */ if( length < 0){ length = (int) strlen(string) ; } newSize = length + dsPtr->length ; /* ----------------------------------------------------------------- * Allocate a larger buffer for the string if the current one isn't * large enough. Allocate extra space in the new buffer so that there * will be room to grow before we have to allocate again. ----------------------------------------------------------------- */ if (newSize >= dsPtr->spaceAvl) { dsPtr->spaceAvl = 2 * newSize ; newString = TMALLOC(char, dsPtr->spaceAvl) ; memcpy(newString, dsPtr->string, (size_t) dsPtr->length) ; if (dsPtr->string != dsPtr->staticSpace) { txfree(dsPtr->string) ; } dsPtr->string = newString; } /* ----------------------------------------------------------------- * Copy the new string into the buffer at the end of the old * one. ----------------------------------------------------------------- */ for( dst = dsPtr->string + dsPtr->length, end = string+length; string < end; string++, dst++) { if( isupper_c(*string) ) { *dst = tolower_c(*string) ; } else { *dst = *string ; } } *dst = '\0' ; dsPtr->length += length ; return(dsPtr->string) ; } /* end spice_dstring_append_lower() */ /* ----------------------------------------------------------------- * Function: add character c to dynamic string dstr_p. * ----------------------------------------------------------------- */ char *spice_dstring_append_char( SPICE_DSTRINGPTR dstr_p, char c) { return spice_dstring_append( dstr_p, &c, 1 ) ; } /* end spice_dstring_append_char() */ static int spice_format_length( const char *fmt, va_list args ) { int i ; /* integer */ int len ; /* length of format */ int size_format ; /* width of field */ int found_special ; /* look for special characters */ char *s ; /* string */ double d ; /* ----------------------------------------------------------------- * First find length of buffer. ----------------------------------------------------------------- */ len = 0 ; while(fmt && *fmt){ if( *fmt == '%' ){ fmt++ ; if( *fmt == '%' ){ len++ ; } else { /* ----------------------------------------------------------------- * We have a real formatting character, loop until we get a special * character. ----------------------------------------------------------------- */ if( *fmt == '.' || *fmt == '-' ){ fmt++ ; /* skip over these characters */ } size_format = atoi(fmt) ; if( size_format > 0 ){ len += size_format ; } found_special = FALSE ; for( ; fmt && *fmt ; fmt++ ){ switch( *fmt ){ case 's': s = va_arg(args, char *) ; if( s ){ len += (int) strlen(s) ; } found_special = TRUE ; break ; case 'i': case 'd': case 'o': case 'x': case 'X': case 'u': i = va_arg(args, int) ; len += 10 ; found_special = TRUE ; break ; case 'c': i = va_arg(args, int) ; len++ ; found_special = TRUE ; break ; case 'f': case 'e': case 'F': case 'g': case 'G': d = va_arg(args, double) ; len += 35 ; found_special = TRUE ; break ; default: ; } /* end switch() */ if( found_special ){ break ; } } } } else { len++ ; } fmt++ ; } /* end while() */ return(len) ; } /* end Ymessage_format_length() */ char *spice_dstring_print( SPICE_DSTRINGPTR dsPtr, const char *format, ... ) { va_list args ; int format_len ; /* length of format */ int length ; /* new length */ int orig_length ; /* original length of buffer */ char *buffer ; /* proper length of buffer */ /* ----------------------------------------------------------------- * First get the length of the buffer needed. ----------------------------------------------------------------- */ va_start( args, format ) ; format_len = spice_format_length(format, args) ; va_end(args) ; /* ----------------------------------------------------------------- * Next allocate the proper buffer size. ----------------------------------------------------------------- */ orig_length = dsPtr->length ; length = orig_length + format_len + 1 ; buffer = spice_dstring_setlength( dsPtr, length) ; /* ----------------------------------------------------------------- * Convert the format. ----------------------------------------------------------------- */ va_start( args, format ) ; if( format ){ vsprintf( buffer + orig_length, format, args ) ; dsPtr->length = (int) strlen(buffer) ; } else { buffer = NULL ; } va_end(args) ; return( buffer ) ; } /* end spice_dstring_print() */ /* *---------------------------------------------------------------------- * * _spice_dstring_setlength -- * * Change the length of a dynamic string. This can cause the * string to either grow or shrink, depending on the value of * length. * * Results: * Returns the current string buffer. * * Side effects: * The length of dsPtr is changed to length but a null byte is not * stored at that position in the string. Use spice_dstring_setlength * for that function. If length is larger * than the space allocated for dsPtr, then a panic occurs. * *---------------------------------------------------------------------- */ char *_spice_dstring_setlength(SPICE_DSTRINGPTR dsPtr,int length) { char *newString ; if (length < 0) { length = 0 ; } if (length >= dsPtr->spaceAvl) { dsPtr->spaceAvl = length+1; newString = TMALLOC(char, dsPtr->spaceAvl) ; /* ----------------------------------------------------------------- * SPECIAL NOTE: must use memcpy, not strcpy, to copy the string * to a larger buffer, since there may be embedded NULLs in the * string in some cases. ----------------------------------------------------------------- */ memcpy(newString, dsPtr->string, (size_t) dsPtr->length) ; if( dsPtr->string != dsPtr->staticSpace ) { txfree(dsPtr->string) ; } dsPtr->string = newString ; } dsPtr->length = length ; return(dsPtr->string) ; } /* end _spice_dstring_setlength() */ /* *---------------------------------------------------------------------- * * spice_dstring_setlength -- * * Change the length of a dynamic string. This can cause the * string to either grow or shrink, depending on the value of * length. * * Results: * Returns the current string buffer. * * Side effects: * The length of dsPtr is changed to length and a null byte is * stored at that position in the string. If length is larger * than the space allocated for dsPtr, then a panic occurs. * *---------------------------------------------------------------------- */ char *spice_dstring_setlength(SPICE_DSTRINGPTR dsPtr,int length) { char *str_p ; /* newly create string */ str_p = _spice_dstring_setlength( dsPtr,length) ; str_p[length] = '\0' ; return( str_p ) ; } /* end spice_dstring_setlength() */ /* *---------------------------------------------------------------------- * * spice_dstring_free -- * * Frees up any memory allocated for the dynamic string and * reinitializes the string to an empty state. * * Results: * None. * * Side effects: * The previous contents of the dynamic string are lost, and * the new value is an empty string. * *---------------------------------------------------------------------- */ void spice_dstring_free(SPICE_DSTRINGPTR dsPtr) { if (dsPtr->string != dsPtr->staticSpace) { txfree(dsPtr->string) ; } dsPtr->string = dsPtr->staticSpace ; dsPtr->length = 0 ; dsPtr->spaceAvl = SPICE_DSTRING_STATIC_SIZE; dsPtr->staticSpace[0] = '\0' ; } /* end spice_dstring_free() */ tmpk8ny_4pz/src/misc/getopt_long_bsd.c0000644000175000017500000004077113546075722020230 0ustar carstencarsten/* $OpenBSD: getopt_long.c,v 1.11 2002/12/10 17:51:42 millert Exp $ */ /* $NetBSD: getopt_long.c,v 1.15 2002/01/31 22:43:40 tv Exp $ */ /* * Copyright (c) 2002 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Sponsored in part by the Defense Advanced Research Projects * Agency (DARPA) and Air Force Research Laboratory, Air Force * Materiel Command, USAF, under agreement number F39502-99-1-0512. */ /*- * Copyright (c) 2000 The NetBSD Foundation, Inc. * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation * by Dieter Baron and Thomas Klausner. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ /* downloaded from http://www.koders.com/c/fid5FCCD794DA3E7129AC307C40B5D31C268ED04FF5.aspx at 04/10/09 by H. Vogt */ /* license modified to be compatible to 3-clause BSD according to https://github.com/freebsd/freebsd/blob/master/lib/libc/stdlib/getopt_long.c on 11/24/2018 by H. Vogt */ #include "ngspice/ngspice.h" #include /* If configure finds getopt.h and fcn getopt_long(), then the rest of this file will not be used. Otherwise (as in MS Visual Studio) this file provides the fcn getopt_long(), used in main() of ngspice */ #if !defined(HAVE_GETOPT_LONG) || !defined(HAVE_GETOPT_H) #include "getopt_bsd.h" #include #include #include #include //#ifdef REPLACE_GETOPT int opterr = 1; /* if error message should be printed */ int optind = 1; /* index into parent argv vector */ int optopt = '?'; /* character checked for validity */ char *optarg = NULL; /* argument associated with option */ //#endif int optreset = 0; /* reset getopt */ #define PRINT_ERROR ((opterr) && (*options != ':')) #define FLAG_PERMUTE 0x01 /* permute non-options to the end of argv */ #define FLAG_ALLARGS 0x02 /* treat non-options as args to option "-1" */ #define FLAG_LONGONLY 0x04 /* operate as getopt_long_only */ /* return values */ #define BADCH (int)'?' #define BADARG ((*options == ':') ? (int)':' : (int)'?') #define INORDER (int)1 #define EMSG "" static int getopt_internal(int, char * const *, const char *, const struct option *, int *, int); static int parse_long_options(char * const *, const char *, const struct option *, int *, int); static int gcd(int, int); static void permute_args(int, int, int, char * const *); static char *place = EMSG; /* option letter processing */ /* XXX: set optreset to 1 rather than these two */ static int nonopt_start = -1; /* first non option argument (for permute) */ static int nonopt_end = -1; /* first option after non options (for permute) */ /* Error messages */ static const char recargchar[] = "option requires an argument -- %c"; static const char recargstring[] = "option requires an argument -- %s"; static const char ambig[] = "ambiguous option -- %.*s"; static const char noarg[] = "option doesn't take an argument -- %.*s"; static const char illoptchar[] = "unknown option -- %c"; static const char illoptstring[] = "unknown option -- %s"; static void warnxx(const char *fmt, ...) { va_list args; va_start(args, fmt); vfprintf(stderr, fmt, args); fprintf(stderr,"\n"); va_end(args); } /* * Compute the greatest common divisor of a and b. */ static int gcd(int a, int b) { int c; c = a % b; while (c != 0) { a = b; b = c; c = a % b; } return (b); } /* * Exchange the block from nonopt_start to nonopt_end with the block * from nonopt_end to opt_end (keeping the same order of arguments * in each block). */ static void permute_args(int panonopt_start, int panonopt_end, int opt_end, char * const *nargv) { int cstart, cyclelen, i, j, ncycle, nnonopts, nopts, pos; char *swap; /* * compute lengths of blocks and number and size of cycles */ nnonopts = panonopt_end - panonopt_start; nopts = opt_end - panonopt_end; ncycle = gcd(nnonopts, nopts); cyclelen = (opt_end - panonopt_start) / ncycle; for (i = 0; i < ncycle; i++) { cstart = panonopt_end+i; pos = cstart; for (j = 0; j < cyclelen; j++) { if (pos >= panonopt_end) pos -= nnonopts; else pos += nopts; swap = nargv[pos]; /* LINTED const cast */ ((char **) nargv)[pos] = nargv[cstart]; /* LINTED const cast */ ((char **)nargv)[cstart] = swap; } } } /* * parse_long_options -- * Parse long options in argc/argv argument vector. * Returns -1 if short_too is set and the option does not match long_options. */ static int parse_long_options(char * const *nargv, const char *options, const struct option *long_options, int *idx, int short_too) { char *current_argv, *has_equal; size_t current_argv_len; int i, match; current_argv = place; match = -1; optind++; if ((has_equal = strchr(current_argv, '=')) != NULL) { /* argument found (--option=arg) */ current_argv_len = has_equal - current_argv; has_equal++; } else current_argv_len = strlen(current_argv); for (i = 0; long_options[i].name; i++) { /* find matching long option */ if (strncmp(current_argv, long_options[i].name, current_argv_len)) continue; if (strlen(long_options[i].name) == current_argv_len) { /* exact match */ match = i; break; } /* * If this is a known short option, don't allow * a partial match of a single character. */ if (short_too && current_argv_len == 1) continue; if (match == -1) /* partial match */ match = i; else { /* ambiguous abbreviation */ if (PRINT_ERROR) warnxx(ambig, (int)current_argv_len, current_argv); optopt = 0; return (BADCH); } } if (match != -1) { /* option found */ if (long_options[match].has_arg == no_argument && has_equal) { if (PRINT_ERROR) warnxx(noarg, (int)current_argv_len, current_argv); /* * XXX: GNU sets optopt to val regardless of flag */ if (long_options[match].flag == NULL) optopt = long_options[match].val; else optopt = 0; return (BADARG); } if (long_options[match].has_arg == required_argument || long_options[match].has_arg == optional_argument) { if (has_equal) optarg = has_equal; else if (long_options[match].has_arg == required_argument) { /* * optional argument doesn't use next nargv */ optarg = nargv[optind++]; } } if ((long_options[match].has_arg == required_argument) && (optarg == NULL)) { /* * Missing argument; leading ':' indicates no error * should be generated. */ if (PRINT_ERROR) warnxx(recargstring, current_argv); /* * XXX: GNU sets optopt to val regardless of flag */ if (long_options[match].flag == NULL) optopt = long_options[match].val; else optopt = 0; --optind; return (BADARG); } } else { /* unknown option */ if (short_too) { --optind; return (-1); } if (PRINT_ERROR) warnxx(illoptstring, current_argv); optopt = 0; return (BADCH); } if (idx) *idx = match; if (long_options[match].flag) { *long_options[match].flag = long_options[match].val; return (0); } else return (long_options[match].val); } /* * getopt_internal -- * Parse argc/argv argument vector. Called by user level routines. */ static int getopt_internal(int nargc, char * const *nargv, const char *options, const struct option *long_options, int *idx, int flags) { char *oli; /* option letter list index */ int optchar, short_too; static int posixly_correct = -1; if (options == NULL) return (-1); /* * Disable GNU extensions if POSIXLY_CORRECT is set or options * string begins with a '+'. */ if (posixly_correct == -1) posixly_correct = (getenv("POSIXLY_CORRECT") != NULL); if (posixly_correct || *options == '+') flags &= ~FLAG_PERMUTE; else if (*options == '-') flags |= FLAG_ALLARGS; if (*options == '+' || *options == '-') options++; /* * XXX Some GNU programs (like cvs) set optind to 0 instead of * XXX using optreset. Work around this braindamage. */ if (optind == 0) optind = optreset = 1; optarg = NULL; if (optreset) nonopt_start = nonopt_end = -1; start: if (optreset || !*place) { /* update scanning pointer */ optreset = 0; if (optind >= nargc) { /* end of argument vector */ place = EMSG; if (nonopt_end != -1) { /* do permutation, if we have to */ permute_args(nonopt_start, nonopt_end, optind, nargv); optind -= nonopt_end - nonopt_start; } else if (nonopt_start != -1) { /* * If we skipped non-options, set optind * to the first of them. */ optind = nonopt_start; } nonopt_start = nonopt_end = -1; return (-1); } if (*(place = nargv[optind]) != '-' || (place[1] == '\0' && strchr(options, '-') == NULL)) { place = EMSG; /* found non-option */ if (flags & FLAG_ALLARGS) { /* * GNU extension: * return non-option as argument to option 1 */ optarg = nargv[optind++]; return (INORDER); } if (!(flags & FLAG_PERMUTE)) { /* * If no permutation wanted, stop parsing * at first non-option. */ return (-1); } /* do permutation */ if (nonopt_start == -1) nonopt_start = optind; else if (nonopt_end != -1) { permute_args(nonopt_start, nonopt_end, optind, nargv); nonopt_start = optind - (nonopt_end - nonopt_start); nonopt_end = -1; } optind++; /* process next argument */ goto start; } if (nonopt_start != -1 && nonopt_end == -1) nonopt_end = optind; /* * Check for "--" or "--foo" with no long options * but if place is simply "-" leave it unmolested. */ if (place[1] != '\0' && *++place == '-' && (place[1] == '\0' || long_options == NULL)) { optind++; place = EMSG; /* * We found an option (--), so if we skipped * non-options, we have to permute. */ if (nonopt_end != -1) { permute_args(nonopt_start, nonopt_end, optind, nargv); optind -= nonopt_end - nonopt_start; } nonopt_start = nonopt_end = -1; return (-1); } } /* * Check long options if: * 1) we were passed some * 2) the arg is not just "-" * 3) either the arg starts with -- we are getopt_long_only() */ if (long_options != NULL && place != nargv[optind] && (*place == '-' || (flags & FLAG_LONGONLY))) { short_too = 0; if (*place == '-') place++; /* --foo long option */ else if (*place != ':' && strchr(options, *place) != NULL) short_too = 1; /* could be short option too */ optchar = parse_long_options(nargv, options, long_options, idx, short_too); if (optchar != -1) { place = EMSG; return (optchar); } } if ((optchar = (int)*place++) == (int)':' || (oli = strchr(options, optchar)) == NULL) { /* * If the user didn't specify '-' as an option, * assume it means -1 as POSIX specifies. */ if (optchar == (int)'-') return (-1); /* option letter unknown or ':' */ if (!*place) ++optind; if (PRINT_ERROR) warnxx(illoptchar, optchar); optopt = optchar; return (BADCH); } if (long_options != NULL && optchar == 'W' && oli[1] == ';') { /* -W long-option */ if (*place) /* no space */ /* NOTHING */; else if (++optind >= nargc) { /* no arg */ place = EMSG; if (PRINT_ERROR) warnxx(recargchar, optchar); optopt = optchar; return (BADARG); } else /* white space */ place = nargv[optind]; optchar = parse_long_options(nargv, options, long_options, idx, 0); place = EMSG; return (optchar); } if (*++oli != ':') { /* doesn't take argument */ if (!*place) ++optind; } else { /* takes (optional) argument */ optarg = NULL; if (*place) /* no white space */ optarg = place; /* XXX: disable test for :: if PC? (GNU doesn't) */ else if (oli[1] != ':') { /* arg not optional */ if (++optind >= nargc) { /* no arg */ place = EMSG; if (PRINT_ERROR) warnxx(recargchar, optchar); optopt = optchar; return (BADARG); } else optarg = nargv[optind]; } place = EMSG; ++optind; } /* dump back option letter */ return (optchar); } #ifdef REPLACE_GETOPT /* * getopt -- * Parse argc/argv argument vector. * * [eventually this will replace the BSD getopt] */ int getopt(int nargc, char * const *nargv, const char *options) { /* * We dont' pass FLAG_PERMUTE to getopt_internal() since * the BSD getopt(3) (unlike GNU) has never done this. * * Furthermore, since many privileged programs call getopt() * before dropping privileges it makes sense to keep things * as simple (and bug-free) as possible. */ return (getopt_internal(nargc, nargv, options, NULL, NULL, 0)); } #endif /* REPLACE_GETOPT */ /* * getopt_long -- * Parse argc/argv argument vector. */ int getopt_long(int nargc, char * const *nargv, const char *options, const struct option *long_options, int *idx) { return (getopt_internal(nargc, nargv, options, long_options, idx, FLAG_PERMUTE)); } /* * getopt_long_only -- * Parse argc/argv argument vector. */ int getopt_long_only(int nargc, char * const *nargv, const char *options, const struct option *long_options, int *idx) { return (getopt_internal(nargc, nargv, options, long_options, idx, FLAG_PERMUTE|FLAG_LONGONLY)); } #endif /* HAVE_GETOPT_LONG */ tmpk8ny_4pz/src/misc/ChangeLog0000644000175000017500000000350613546075722016460 0ustar carstencarsten2000-07-18 Arno W. Peters * Makefile.am: Added wlist.c. * wlist.c: moved here from src/parser/wlist.c 2000-03-11 Paolo Nenzi * missing_math.c: as Chris wrote: In missing_math.c line 50: changed the preprocessor directive "#elif" to "#else" because the elif must have a condition (ie. else if ...). Again seemingly no adverse side effects. 1999-09-07 Arno * string.c: put extra braces around assignment in if condition. 1999-09-03 Emmanuel Rouat * misc_time.c: renamed time.c into misc_time.c * missing_math.c: renamed math.c into missing_math.c * *.c: added header file for all .c files 1999-08-30 Paolo Nenzi * Removed suffix.h and replaced GENERIC with void * alloc.c: Modified the code of tmalloc, tralloc and txfree functions. Now tmalloc uses calloc() instead of malloc+bzero and all of them works on void *. 1999-08-29 Emmanuel Rouat * Made function decls ANSI using protoize 1999-08-28 Emmanuel Rouat * Removed all #includes of misc.h and util.h (now in spice.h) 1999-08-08 Emmanuel Rouat * Makefile.am (libmisc_a_SOURCES): removed dos_dirs.c (unused) * string.c: changed HAS_INDEX in HAVE_INDEX * dup2.c (dup2): changed HAS_FCNTL in HAVE_FCNTL_H 1999-08-06 Emmanuel Rouat * time.c: changed HAS_LOCALTIME in HAVE_LOCALTIME * dup2.c: changed HAS_DUP2 into HAVE_DUP2 1999-08-05 Emmanuel Rouat * ivars.c (env_overr): removed HAS_ENVIRON tests * mktemp.c (smktemp): removed test on HAS_GETPID 1999-08-03 Emmanuel Rouat * string.c (bcopy): changed HAS_BCOPY into HAVE_BCOPY tmpk8ny_4pz/src/misc/util.h0000644000175000017500000000043113546075722016026 0ustar carstencarsten/************* * Header file for util.c * 2002 R. Oktas, ************/ #ifndef ngspice_UTIL_H #define ngspice_UTIL_H char *canonicalize_pathname(char *path); char *absolute_pathname(char *string, char *dot_path); char *ngdirname(const char *name); #endif tmpk8ny_4pz/src/misc/dup2.c0000644000175000017500000000044213546075722015720 0ustar carstencarsten/* Modified: 2000 AlansFixes */ #include "ngspice/ngspice.h" #include "dup2.h" #ifndef HAVE_DUP2 #include dup2(int oldd, int newd) { #ifdef HAVE_FCNTL_H close(newd); #ifdef F_DUPFD (void) fcntl(oldd, F_DUPFD, newd); #endif #endif return 0; } #else int Dummy_Symbol_6; #endif tmpk8ny_4pz/src/misc/ivars.h0000644000175000017500000000026213546075722016177 0ustar carstencarsten/************* * Header file for ivars.c * 1999 E. Rouat ************/ #ifndef ngspice_IVARS_H #define ngspice_IVARS_H void ivars(char*); void destroy_ivars(void); #endif tmpk8ny_4pz/src/misc/util.c0000644000175000017500000001313013546075722016021 0ustar carstencarsten/************* * Various utility functions. * 2002 R. Oktas, ************/ #include "ngspice/ngspice.h" #include "util.h" /* **************************************************************** */ /* */ /* Stuff for Filename Handling */ /* */ /* **************************************************************** */ /* Canonicalize PATH, and return a new path. The new path differs from PATH in that: Multple `/'s are collapsed to a single `/'. Leading `./'s and trailing `/.'s are removed. Trailing `/'s are removed. Non-leading `../'s and trailing `..'s are handled by removing portions of the path. Stolen from Bash source (slightly modified). Credit goes to Chet Ramey, et al. -- ro */ char * canonicalize_pathname(char *path) { int i, start; char stub_char; char *result; /* The result cannot be larger than the input PATH. */ result = copy(path); stub_char = '.'; if(*path == '/') stub_char = '/'; /* Walk along RESULT looking for things to compact. */ i = 0; for (;;) { if (!result[i]) break; while (result[i] && result[i] != '/') i++; start = i++; /* If we didn't find any slashes, then there is nothing left to do. */ if (!result[start]) break; /* Handle multiple `/'s in a row. */ while (result[i] == '/') i++; #if !defined (apollo) if ((start + 1) != i) #else if ((start + 1) != i && (start != 0 || i != 2)) #endif /* apollo */ { strcpy (result + start + 1, result + i); i = start + 1; } #if 0 /* Handle backslash-quoted `/'. */ if (start > 0 && result[start - 1] == '\\') continue; #endif /* Check for trailing `/'. */ if (start && !result[i]) { zero_last: result[--i] = '\0'; break; } /* Check for `../', `./' or trailing `.' by itself. */ if (result[i] == '.') { /* Handle trailing `.' by itself. */ if (!result[i + 1]) goto zero_last; /* Handle `./'. */ if (result[i + 1] == '/') { strcpy(result + i, result + i + 1); i = (start < 0) ? 0 : start; continue; } /* Handle `../' or trailing `..' by itself. */ if (result[i + 1] == '.' && (result[i + 2] == '/' || !result[i + 2])) { while (--start > -1 && result[start] != '/') ; strcpy(result + start + 1, result + i + 2); i = (start < 0) ? 0 : start; continue; } } } if (!*result) { *result = stub_char; result[1] = '\0'; } return (result); } /* Turn STRING (a pathname) into an absolute pathname, assuming that DOT_PATH contains the symbolic location of `.'. This always returns a new string, even if STRING was an absolute pathname to begin with. Stolen from Bash source (slightly modified). Credit goes to Chet Ramey, et al. -- ro */ char * absolute_pathname(char *string, char *dot_path) { char *result; size_t result_len; if (!dot_path || *string == '/') result = copy(string); else { if (dot_path && dot_path[0]) { result = TMALLOC(char, 2 + strlen(dot_path) + strlen(string)); strcpy(result, dot_path); result_len = strlen(result); if (result[result_len - 1] != '/') { result[result_len++] = '/'; result[result_len] = '\0'; } } else { result = TMALLOC(char, 3 + strlen (string)); result[0] = '.'; result[1] = '/'; result[2] = '\0'; result_len = 2; } strcpy(result + result_len, string); } return (result); } /* char * basename(const char *name) { char *base; char *p; static char *tmp = NULL; int len; if (tmp) { tfree(tmp); tmp = NULL; } if (!name || !strcmp(name, "")) return ""; if (!strcmp(name, "/")) return "/"; len = strlen(name); if (name[len - 1] == '/') { // ditch the trailing '/' p = tmp = TMALLOC(char, len); strncpy(p, name, len - 1); } else { p = (char *) name; } for (base = p; *p; p++) if (*p == '/') base = p + 1; return base; } */ #if defined(HAS_WINGUI) || defined(_MSC_VER) || defined(__MINGW32__) char * ngdirname(const char *name) { char *ret; const char *end = NULL; int start = 0; if(name && ((name[0] >= 'a' && name[0] <= 'z') || (name[0] >= 'A' && name[0] <= 'Z')) && name[1] == ':') start = 2; if(name) { const char *p = name + start; for(; *p; p++) if(*p == '/' || *p == '\\') end = p; } if(end && end == name + start) end++; if(end) ret = copy_substring(name, end); else { char *p = TMALLOC(char, 4); ret = p; if(start) { *p++ = name[0]; *p++ = name[1]; } *p++ = '.'; *p++ = '\0'; } return ret; } #else char * ngdirname(const char *name) { char *ret; const char *end; end = name ? strrchr(name, '/') : NULL; if(end && end == name) end++; if(end) ret = copy_substring(name, end); else ret = copy("."); return ret; } #endif tmpk8ny_4pz/src/misc/wlist.c0000644000175000017500000002252313546075722016214 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* Wordlist manipulation stuff. */ #include #include #include #include "ngspice/bool.h" #include "ngspice/memory.h" #include "ngspice/ngspice.h" #include "ngspice/wordlist.h" /* Determine the length of a word list. */ int wl_length(const wordlist *wl) { int i = 0; for (; wl; wl = wl->wl_next) i++; return (i); } /* Free the storage used by a word list. */ void wl_free(wordlist *wl) { while (wl) { wordlist *next = wl->wl_next; tfree(wl->wl_word); tfree(wl); wl = next; } } /* Copy a wordlist and the words. */ wordlist * wl_copy(const wordlist *wl) { wordlist *first = NULL, *last = NULL; for (; wl; wl = wl->wl_next) wl_append_word(&first, &last, copy(wl->wl_word)); return (first); } /* Substitute a wordlist for one element of a wordlist, and return a * pointer to the last element of the inserted list. */ wordlist * wl_splice(wordlist *elt, wordlist *list) { if (list) list->wl_prev = elt->wl_prev; if (elt->wl_prev) elt->wl_prev->wl_next = list; if (list) { while (list->wl_next) list = list->wl_next; list->wl_next = elt->wl_next; } if (elt->wl_next) elt->wl_next->wl_prev = list; tfree(elt->wl_word); tfree(elt); return (list); } static void printword(const char *string, FILE *fp) { if (string) { while (*string) { putc(strip(*string++), fp); } } } /* Print a word list. (No \n at the end...) */ void wl_print(const wordlist *wl, FILE *fp) { for (; wl; wl = wl->wl_next) { printword(wl->wl_word, fp); if (wl->wl_next) putc(' ', fp); } } /* Turn an array of char *'s into a wordlist. */ wordlist * wl_build(const char * const *v) { wordlist *first = NULL; wordlist *last = NULL; while (*v) wl_append_word(&first, &last, copy(*v++)); return first; } /* Convert a single string into a wordlist. */ wordlist * wl_from_string(const char *sz) { const char * list_of_1_word[2]; list_of_1_word[0] = sz; list_of_1_word[1] = (char *) NULL; return wl_build(list_of_1_word); } /* end of function wl_from_string */ char ** wl_mkvec(const wordlist *wl) { int len = wl_length(wl); char **vec = TMALLOC(char *, (size_t) len + 1); int i; for (i = 0; i < len; i++) { vec[i] = copy(wl->wl_word); wl = wl->wl_next; } vec[i] = NULL; return (vec); } /* Nconc two wordlists together. */ wordlist * wl_append(wordlist *wlist, wordlist *nwl) { wordlist *wl; if (wlist == NULL) return (nwl); if (nwl == NULL) return (wlist); for (wl = wlist; wl->wl_next; wl = wl->wl_next) ; wl->wl_next = nwl; nwl->wl_prev = wl; return (wlist); } /* Reverse a word list. */ wordlist * wl_reverse(wordlist *wl) { if (!wl) return (wl); for (;;) { SWAP(wordlist *, wl->wl_next, wl->wl_prev); if (!wl->wl_prev) return (wl); wl = wl->wl_prev; } } /* This function converts a wordlist into a string, adding a blank space * between each word and a null termination. The wordlist may be NULL, in * which case "" is returned. * * The returned string is allocated and must be freed by the caller. */ char * wl_flatten(const wordlist *wlist) { char *buf; const wordlist *wl; /* Handle case of an empty list */ if (wlist == (wordlist *) NULL) { buf = TMALLOC(char, 1); *buf = '\0'; return buf; } /* List has at least one word */ /* Find size needed for buffer * +1 for interword blanks and null at end */ size_t len = 0; for (wl = wlist; wl; wl = wl->wl_next) len += strlen(wl->wl_word) + 1; /* Allocate to min required size */ buf = TMALLOC(char, len); /* Step through the list again, building the output string */ char *p_dst = buf; for (wl = wlist; ; ) { /* for each word */ /* Add all source chars until end of word */ const char *p_src = wl->wl_word; for ( ; ; p_src++) { /* for each char */ const char ch_src = *p_src; if (ch_src == '\0') { /* exit when null found */ break; } *p_dst++ = ch_src; } /* end of loop over chars in source string */ /* Move to next word, exiting if none left */ if ((wl = wl->wl_next) == (wordlist *) NULL) { *p_dst = '\0'; /* null-terminate string */ return buf; /* normal function exit */ } *p_dst++ = ' '; /* add space between words */ } /* end of loop over words in word list */ } /* end of function wl_flatten */ /* Return the nth element of a wordlist, or the last one if n is too * big. Numbering starts at 0... */ wordlist * wl_nthelem(int i, wordlist *wl) { while ((i-- > 0) && wl->wl_next) wl = wl->wl_next; return (wl); } /* Compare function for the array of word pointers */ static int wlcomp(const char * const *s, const char * const *t) { return strcmp(*s, *t); } /* Sort a word list in order of strcmp ascending */ void wl_sort(wordlist *wl) { size_t i = 0; wordlist *ww = wl; char **stuff; /* Find number of words in the list */ for (i = 0; ww; i++) { ww = ww->wl_next; } /* If empty list or only one word, no sort is required */ if (i <= 1) { return; } stuff = TMALLOC(char *, i); /* allocate buffer for words */ /* Add pointers to the words to the buffer */ for (i = 0, ww = wl; ww; i++, ww = ww->wl_next) { stuff[i] = ww->wl_word; } /* Sort the words */ qsort(stuff, i, sizeof (char *), (int (*)(const void *, const void *)) &wlcomp); /* Put the words back into the word list in sorted order */ for (i = 0, ww = wl; ww; i++, ww = ww->wl_next) { ww->wl_word = stuff[i]; } tfree(stuff); /* free buffer of word pointers */ } /* end of function wl_sort */ /* Return a range of wordlist elements... */ wordlist * wl_range(wordlist *wl, int low, int up) { wordlist *tt; bool rev = FALSE; if (low > up) { SWAP(int, up, low); rev = TRUE; } up -= low; while (wl && (low > 0)) { tt = wl->wl_next; tfree(wl->wl_word); tfree(wl); wl = tt; if (wl) wl->wl_prev = NULL; low--; } tt = wl; while (tt && (up > 0)) { tt = tt->wl_next; up--; } if (tt && tt->wl_next) { wl_free(tt->wl_next); tt->wl_next = NULL; } if (rev) wl = wl_reverse(wl); return (wl); } /* * prepend a new `word' * to the front of the given `wlist' wordlist * and return this new list */ wordlist * wl_cons(char *word, wordlist *wlist) { wordlist *w = TMALLOC(wordlist, 1); w->wl_next = wlist; w->wl_prev = NULL; w->wl_word = word; if (wlist) wlist->wl_prev = w; return (w); } /* * given a wordlist * described by a `first' and `last' wordlist element * append a new `word' * and update the given `first' and `last' pointers accordingly * * Remarks * Onwership of the buffer containing the word is given to the * word list. That is, the word is not copied. */ void wl_append_word(wordlist **first, wordlist **last, char *word) { wordlist *w = TMALLOC(wordlist, 1); w->wl_next = NULL; w->wl_prev = (*last); w->wl_word = word; if (*last) (*last)->wl_next = w; else (*first) = w; (*last) = w; } /* * given a pointer `wl' into a wordlist, cut off this list from its * preceding elements and return itself. Thus, the function creates two * valid word lists: the one before this word and the one starting with * this word and continuing to the end of the original word list. */ wordlist * wl_chop(wordlist *wl) { if (wl && wl->wl_prev) { wl->wl_prev->wl_next = NULL; wl->wl_prev = NULL; } return (wl); } /* * given a pointer `wl' into a wordlist * cut off the rest of the list * and return this rest */ wordlist * wl_chop_rest(wordlist *wl) { wordlist *rest = wl->wl_next; wl->wl_next = NULL; if(rest) rest->wl_prev = NULL; return (rest); } /* * search for a string in a wordlist */ wordlist * wl_find(const char *string, const wordlist *wl) { if (!string) return NULL; for (; wl; wl = wl->wl_next) if (eq(string, wl->wl_word)) break; return ((wordlist *) wl); } /* end of function wl_find */ /* * delete elements from a wordlist * starting at `from' * up to but exclusive of `to'. * `to' may be NULL to delete from `from' to the end of the list * * Allocations for the deleted slice are freed. * * Note that the function does not check if `from' and `to' are in * the same word list initially or that the former precedes the latter. */ void wl_delete_slice(wordlist *from, wordlist *to) { if (from == to) { /* nothing to delete */ return; } wordlist *prev = from->wl_prev; if (prev) { prev->wl_next = to; } if (to) { to->wl_prev->wl_next = NULL; to->wl_prev = prev; } wl_free(from); } /* end of function wl_delete_slice */ tmpk8ny_4pz/src/misc/ivars.c0000644000175000017500000000753513546075722016204 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. **********/ #include "ngspice/ngspice.h" #include "ivars.h" #include "../misc/util.h" /* ngdirname() */ char *Spice_Path; char *News_File; char *Help_Path; char *Lib_Path; char *Inp_Path; static void env_overr(char **v, char *e) { char *p; if (v && e && (p = getenv(e)) != NULL) *v = p; } static void mkvar(char **p, char *path_prefix, char *var_dir, char *env_var) { /* Override by environment variables */ char *buffer = getenv(env_var); if (buffer) *p = tprintf("%s",buffer); else *p = tprintf("%s%s%s", path_prefix, DIR_PATHSEP, var_dir); } /* $dprefix has been set to /usr/local or C:/Spice (Windows) in configure.ac, or to given by prefix="" as parameter to ./configure command. NGSPICEBINDIR has been set to $dprefix/bin in config.h. NGSPICEDATADIR has been set to $dprefix/share/ngspice in config.h. If --enable-relpath is selected as paramter to the ./configure command, then NGSPICEBINDIR is set to ../bin in config.h. NGSPICEDATADIR is set to ../share/ngspice in config.h. Spice_Exec_Dir has been set to NGSPICEBINDIR in conf.c, may be overridden here by environmental variable SPICE_EXEC_DIR. Spice_Lib_Dir has been set to NGSPICEDATADIR in conf.c, may be overridden here by environmental variable SPICE_LIB_DIR. The search path for codemodels in spinit contains $dprefix, or, if --enable-relpath is given, to ../lib, set by src/makefile.am. With Visual C, it is set manually by an entry to ngspice\visualc\src\include\ngspice\config.h. For Windows GUI and Console the path is set relative to the executable.*/ void ivars(char *argv0) { char *temp=NULL; #if defined (HAS_WINGUI) || defined (__MINGW32__) || defined (_MSC_VER) char *ngpath; #endif #ifdef HAS_RELPATH Spice_Lib_Dir = temp = copy("../share/ngspice"); #elif !defined SHARED_MODULE && (defined (HAS_WINGUI) || defined (__MINGW32__) || defined (_MSC_VER)) ngpath = ngdirname(argv0); mkvar(&Spice_Lib_Dir, ngpath, "../share/ngspice", "SPICE_LIB_DIR"); tfree(ngpath); #else env_overr(&Spice_Lib_Dir, "SPICE_LIB_DIR"); #endif /* for printing a news file */ mkvar(&News_File, Spice_Lib_Dir, "news", "SPICE_NEWS"); /* help directory, not used in Windows mode */ mkvar(&Help_Path, Spice_Lib_Dir, "helpdir", "SPICE_HELP_DIR"); /* where spinit is found */ mkvar(&Lib_Path, Spice_Lib_Dir, "scripts", "SPICE_SCRIPTS"); /* used to call ngspice with aspice command, not used in Windows mode */ mkvar(&Spice_Path, Spice_Exec_Dir, "ngspice", "SPICE_PATH"); tfree(temp); /* may be used to store input files (*.lib, *.include, ...) */ /* get directory where ngspice resides */ #if defined (HAS_WINGUI) || defined (__MINGW32__) || defined (_MSC_VER) { ngpath = ngdirname(argv0); /* set path either to /input or, if set, to environment variable NGSPICE_INPUT_DIR */ mkvar(&Inp_Path, ngpath, "input", "NGSPICE_INPUT_DIR"); tfree(ngpath); } #else NG_IGNORE(argv0); /* set path either to environment variable NGSPICE_INPUT_DIR (if given) or to NULL */ env_overr(&Inp_Path, "NGSPICE_INPUT_DIR"); Inp_Path = copy(Inp_Path); /* allow tfree */ #endif env_overr(&Spice_Host, "SPICE_HOST"); /* aspice */ env_overr(&Bug_Addr, "SPICE_BUGADDR"); env_overr(&Def_Editor, "SPICE_EDITOR"); /* Set raw file mode, 0 by default (binary) set in conf.c, may be overridden by environmental variable, not sure if acknowledged everywhere in ngspice */ env_overr(&temp, "SPICE_ASCIIRAWFILE"); if(temp) AsciiRawFile = atoi(temp); } void destroy_ivars(void) { tfree(News_File); tfree(Help_Path); tfree(Lib_Path); tfree(Spice_Path); tfree(Inp_Path); } tmpk8ny_4pz/src/misc/mktemp.h0000644000175000017500000000024113546075722016345 0ustar carstencarsten/************* * Header file for mktemp.c * 1999 E. Rouat ************/ #ifndef ngspice_MKTEMP_H #define ngspice_MKTEMP_H char * smktemp(char *id); #endif tmpk8ny_4pz/src/misc/tilde.c0000644000175000017500000000516013546075722016151 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Modified: 2002 R. Oktas, **********/ #include "ngspice/ngspice.h" #include "tilde.h" #include "ngspice/stringskip.h" #ifdef HAVE_PWD_H #include #endif #if defined(__MINGW32__) || defined(_MSC_VER) #undef BOOLEAN #include /* win32 functions */ #include "shlobj.h" /* SHGetFolderPath */ #endif /* XXX To prevent a name collision with `readline's `tilde_expand', the original name: `tilde_expand' has changed to `tildexpand'. This situation naturally brings to mind that `tilde_expand' could be used directly from `readline' (since it will already be included if we wish to activate the `readline' support). Following implementation of 'tilde expanding' has some problems which constitutes another good reason why it should be replaced: eg. it returns NULL which should not behave this way, IMHO. Anyway... Don't care for the moment, may be in the future. -- ro */ char * tildexpand(char *string) { #ifdef HAVE_PWD_H char buf[BSIZE_SP]; char *k, c; #endif #if defined(__MINGW32__) || defined(_MSC_VER) char buf2[BSIZE_SP]; #endif char *result = NULL; if (!string) return NULL; string = skip_ws(string); if (*string != '~') return copy(string); string += 1; if (!*string || *string == '/') { /* First try the environment setting. May also make life easier for non-unix platforms, eg. MS-DOS. -- ro */ result = getenv("HOME"); #ifdef HAVE_PWD_H /* Can't find a result from the environment, let's try the other stuff. -- ro */ if (!result) { struct passwd *pw; pw = getpwuid(getuid()); if (pw) result = pw->pw_dir; *buf = '\0'; } } else { struct passwd *pw; k = buf; while ((c = *string) && c != '/') *k++ = c, string++; *k = '\0'; pw = getpwnam(buf); if (pw) result = pw->pw_dir; #endif } if (result) { #ifdef HAVE_PWD_H strcpy(buf, result); if (*string) strcat(buf, string); return copy(buf); } else return NULL; #else /* Emulate the old behavior to prevent side effects. -- ro */ return copy(string); } #if defined(__MINGW32__) || defined(_MSC_VER) else if(SUCCEEDED(SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, 0, buf2))) { if (*string) strcat(buf2, string); return copy(buf2); } #endif return NULL; #endif } tmpk8ny_4pz/src/tclspinit.in0000644000175000017500000000102613546075722016307 0ustar carstencarsten* Standard spice and nutmeg init file alias exit quit alias acct rusage all set x11lineararcs *unset brief strcmp __flag $program "ngspice" if $__flag = 0 *set numparams * For SPICE2 POLYs, edit the below line to point to the location * of your codemode. @XSPICEINIT@ codemodel @pkglibdir@/spice2poly.cm * The other codemodels @XSPICEINIT@ codemodel @pkglibdir@/analog.cm @XSPICEINIT@ codemodel @pkglibdir@/digital.cm @XSPICEINIT@ codemodel @pkglibdir@/xtradev.cm @XSPICEINIT@ codemodel @pkglibdir@/xtraevt.cm end unset __flag tmpk8ny_4pz/src/ngmultidec.c0000644000175000017500000002444713546075722016261 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1990 Jaijeet Roychowdury **********/ #include "ngspice/ngspice.h" #include #include #include "ngspice/spmatrix.h" #define THRSH 0.01 #define ABS_THRSH 0 #define DIAG_PIVOTING 1 #undef DEBUG_LEVEL1 /* `-u' option showing the usage help is changed to `-h'. -- ro */ extern void usage(char **argv); extern void comments(double r,double l,double g,double c,double ctot,double cm,double lm,double k,char *name,int num, double len); extern double phi(int i, double arg); extern void spErrorMessage(MatrixPtr, FILE*, char*); int main (int argc, char **argv) { int ch; int errflg=0,i,j; double l,c,ctot,r=0.0,g=0.0,k=0.0,lm=0.0,cm=0.0,len; unsigned gotl=0,gotc=0,gotr=0,gotg=0,gotk=0,gotcm=0,gotlen=0; unsigned gotname=0, gotnum=0; char *name = ""; double **matrix, **inverse; double *tpeigenvalues, *gammaj; char *options; int num, node; char **pname, *s; int use_opt; char *optarg; pname = argv; argv++; argc--; ch = 0; while (argc > 0) { s = *argv++; argc--; while ((ch = *s++) != '\0') { if (*s) optarg = s; else if (argc) optarg = *argv; else optarg = NULL; use_opt = 0; switch (ch) { case 'o': name = TMALLOC(char, strlen(optarg)); (void) strcpy(name,optarg); gotname=1; use_opt = 1; break; case 'l': sscanf(optarg,"%lf",&l); gotl=1; use_opt = 1; break; case 'c': sscanf(optarg,"%lf",&c); gotc=1; use_opt = 1; break; case 'r': sscanf(optarg,"%lf",&r); use_opt = 1; gotr=1; break; case 'g': sscanf(optarg,"%lf",&g); use_opt = 1; gotg=1; break; case 'k': sscanf(optarg,"%lf",&k); use_opt = 1; gotk=1; break; case 'x': sscanf(optarg,"%lf",&cm); use_opt = 1; gotcm=1; break; case 'L': sscanf(optarg,"%lf",&len); use_opt = 1; gotlen=1; break; case 'n': sscanf(optarg,"%d",&num); use_opt = 1; gotnum=1; break; case 'h': usage(pname); exit(1); break; case '-': break; default: usage(pname); exit(2); break; } if (use_opt) { if (optarg == s) s += strlen(s); else if (optarg) { argc--; argv++; } } } } if (errflg) { usage(argv); exit (2); } if (gotl + gotc + gotname + gotnum + gotlen < 5) { fprintf(stderr,"l, c, model_name, number_of_conductors and length must be specified.\n"); fprintf(stderr,"%s -u for details.\n",pname[0]); fflush(stdout); exit(1); } if (fabs(k) >= 1.0) { fprintf(stderr,"Error: |k| must be less than 1.0\n"); fflush(stderr); exit(1); } if (num == 1) { fprintf(stdout,"* single conductor line\n"); fflush(stdout); exit(1); } lm = l*k; switch(num) { case 1: ctot = c; break; case 2: ctot = c + cm; break; default: ctot = c + 2*cm; break; } comments(r,l,g,c,ctot,cm,lm,k,name,num,len); matrix = TMALLOC(double *, num + 1); inverse = TMALLOC(double *, num + 1); tpeigenvalues = TMALLOC(double, num + 1); for (i=1;i<=num;i++) { matrix[i] = TMALLOC(double, num + 1); inverse[i] = TMALLOC(double, num + 1); } for (i=1;i<=num;i++) { tpeigenvalues[i] = -2.0 * cos(M_PI*i/(num+1)); } for (i=1;i<=num;i++) { for (j=1;j<=num;j++) { matrix[i][j] = phi(i-1,tpeigenvalues[j]); } } gammaj = TMALLOC(double, num + 1); for (j=1;j<=num;j++) { gammaj[j] = 0.0; for (i=1;i<=num;i++) { gammaj[j] += matrix[i][j] * matrix[i][j]; } gammaj[j] = sqrt(gammaj[j]); } for (j=1;j<=num;j++) { for (i=1;i<=num; i++) { matrix[i][j] /= gammaj[j]; } } tfree(gammaj); /* matrix = M set up */ { MatrixPtr othermatrix; double *rhs, *solution; double *irhs, *isolution; int errflg, err, singular_row, singular_col; double *elptr; rhs = TMALLOC(double, num + 1); irhs = TMALLOC(double, num + 1); solution = TMALLOC(double, num + 1); isolution = TMALLOC(double, num + 1); othermatrix = spCreate(num,0,&errflg); for (i=1;i<=num;i++) { for (j=1; j<=num; j++) { elptr = spGetElement(othermatrix,i,j); *elptr = matrix[i][j]; } } #ifdef DEBUG_LEVEL1 (void) spPrint(othermatrix,0,1,0); #endif for (i=1;i<=num;i++) rhs[i] = 0.0; rhs[1]=1.0; err = spOrderAndFactor(othermatrix,rhs,THRSH,ABS_THRSH,DIAG_PIVOTING); spErrorMessage(othermatrix,stderr,NULL); switch(err) { case spNO_MEMORY: fprintf(stderr,"No memory in spOrderAndFactor\n"); fflush(stderr); exit(1); case spSINGULAR: (void) spWhereSingular(othermatrix,&singular_row,&singular_col); fprintf(stderr,"Singular matrix: problem in row %d and col %d\n", singular_row, singular_col); fflush(stderr); exit(1); default: break; } for (i=1;i<=num;i++) { for (j=1;j<=num;j++) { rhs[j] = (j==i?1.0:0.0); irhs[j] = 0.0; } (void) spSolveTransposed(othermatrix,rhs,solution, irhs, isolution); for (j=1;j<=num;j++) { inverse[i][j] = solution[j]; } } tfree(rhs); tfree(solution); } /* inverse = M^{-1} set up */ fprintf(stdout,"\n"); fprintf(stdout,"* Lossy line models\n"); options = "rel=1.2 nocontrol"; for (i=1;i<=num;i++) { fprintf(stdout,".model mod%d_%s ltra %s r=%0.12g l=%0.12g g=%0.12g c=%0.12g len=%0.12g\n", i,name,options,r,l+tpeigenvalues[i]*lm,g,ctot-tpeigenvalues[i]*cm,len); /*i,name,options,r,l+tpeigenvalues[i]*lm,g,ctot+tpeigenvalues[i]*cm,len);*/ } fprintf(stdout,"\n"); fprintf(stdout,"* subcircuit m_%s - modal transformation network for %s\n",name,name); fprintf(stdout,".subckt m_%s", name); for (i=1;i<= 2*num; i++) { fprintf(stdout," %d",i); } fprintf(stdout,"\n"); for (j=1;j<=num;j++) fprintf(stdout,"v%d %d 0 0v\n",j,j+2*num); for (j=1;j<=num;j++) { for (i=1; i<=num; i++) { fprintf(stdout,"f%d 0 %d v%d %0.12g\n", (j-1)*num+i,num+j,i,inverse[j][i]); } } node = 3*num+1; for (j=1;j<=num;j++) { fprintf(stdout,"e%d %d %d %d 0 %0.12g\n", (j-1)*num+1, node, 2*num+j, num+1, matrix[j][1]); node++; for (i=2; i -c\n",argv[0]); fprintf(stderr," -r -g \n"); fprintf(stderr," -k \n"); fprintf(stderr," -x -o \n"); fprintf(stderr," -n -L -h\n"); fprintf(stderr,"Example: %s -n4 -l9e-9 -c20e-12 -r5.3 -x5e-12 -k0.7 -otest -L5.4\n\n",argv[0]); fprintf(stderr,"See \"Efficient Transient Simulation of Lossy Interconnect\",\n"); fprintf(stderr,"J.S. Roychowdhury and D.O. Pederson, Proc. DAC 91 for details\n"); fprintf(stderr,"\n"); fflush(stderr); } void comments(double r,double l,double g,double c,double ctot,double cm,double lm,double k,char *name,int num, double len) { fprintf(stdout,"* Subcircuit %s\n",name); fprintf(stdout,"* %s is a subcircuit that models a %d-conductor transmission line with\n",name,num); fprintf(stdout,"* the following parameters: l=%g, c=%g, r=%g, g=%g,\n",l,c,r,g); fprintf(stdout,"* inductive_coeff_of_coupling k=%g, inter-line capacitance cm=%g,\n",k,cm); fprintf(stdout,"* length=%g. Derived parameters are: lm=%g, ctot=%g.\n",len,lm,ctot); fprintf(stdout,"* \n"); fprintf(stdout,"* It is important to note that the model is a simplified one - the\n"); fprintf(stdout,"* following assumptions are made: 1. The self-inductance l, the\n"); fprintf(stdout,"* self-capacitance ctot (note: not c), the series resistance r and the\n"); fprintf(stdout,"* parallel capacitance g are the same for all lines, and 2. Each line\n"); fprintf(stdout,"* is coupled only to the two lines adjacent to it, with the same\n"); fprintf(stdout,"* coupling parameters cm and lm. The first assumption implies that edge\n"); fprintf(stdout,"* effects have to be neglected. The utility of these assumptions is\n"); fprintf(stdout,"* that they make the sL+R and sC+G matrices symmetric, tridiagonal and\n"); fprintf(stdout,"* Toeplitz, with useful consequences (see \"Efficient Transient\n"); fprintf(stdout,"* Simulation of Lossy Interconnect\", by J.S. Roychowdhury and\n"); fprintf(stdout,"* D.O Pederson, Proc. DAC 91).\n\n"); fprintf(stdout,"* It may be noted that a symmetric two-conductor line is\n"); fprintf(stdout,"* represented accurately by this model.\n\n"); fprintf(stdout,"* Subckt node convention:\n"); fprintf(stdout,"* \n"); fprintf(stdout,"* |--------------------------|\n"); fprintf(stdout,"* 1-----| |-----n+1\n"); fprintf(stdout,"* 2-----| |-----n+2\n"); fprintf(stdout,"* : | n-wire multiconductor | :\n"); fprintf(stdout,"* : | line | :\n"); fprintf(stdout,"* n-1-----|(node 0=common gnd plane) |-----2n-1\n"); fprintf(stdout,"* n-----| |-----2n\n"); fprintf(stdout,"* |--------------------------|\n\n"); fflush(stdout); } double phi(int i, double arg) { double rval; switch (i) { case 0: rval = 1.0; break; case 1: rval = arg; break; default: rval = arg*phi(i-1,arg) - phi(i-2,arg); } return rval; } tmpk8ny_4pz/src/setplot0000644000175000017500000000176713546075722015377 0ustar carstencarsten* set the current working plot .control begin unset resp if $argc set resp = $argv[1] else if $?plots = 0 echo Error: there aren\'t any plots currently loaded. goto bottom else if $#plots = 0 echo Error: there aren\'t any plots currently loaded. goto bottom end end if $?resp = 0 set oldplot = $curplot echo ' Type the name of the desired plot:' echo '' echo ' new New plot' foreach pl $plots set curplot = $pl strcmp i $pl $oldplot if $i = 0 echo "Current $pl $curplottitle ({$curplotname})" else echo " $pl $curplottitle ({$curplotname})" end end set curplot = $oldplot echo -n '? ' set resp = $< end end strcmp i $resp "" if $i = 0 goto bottom end strcmp i $resp new if $i = 0 set curplot = new goto bottom end foreach pl $plots strcmp i $resp $pl if $i = 0 set curplot = $pl goto bottom end end echo Error: no such plot name $resp label bottom unset resp i pl newflag oldplot end tmpk8ny_4pz/src/spicelib/0000755000175000017500000000000013546075722015541 5ustar carstencarstentmpk8ny_4pz/src/spicelib/Makefile.am0000644000175000017500000000027013546075722017574 0ustar carstencarsten# Process this file with automake EXTRA_DIST = README SUBDIRS = analysis parser devices dist-hook: rm -rf `find $(distdir)/devices -name .deps` MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/analysis/0000755000175000017500000000000013546075722017364 5ustar carstencarstentmpk8ny_4pz/src/spicelib/analysis/cktsetap.c0000644000175000017500000000123013546075722021342 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/tskdefs.h" #include "ngspice/jobdefs.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/cktdefs.h" #include "analysis.h" extern SPICEanalysis *analInfo[]; /* ARGSUSED */ int CKTsetAnalPm(CKTcircuit *ckt, JOB *analPtr, int parm, IFvalue *value, IFvalue *selector) { int type = analPtr->JOBtype; NG_IGNORE(selector); if((analInfo[type]->setParm)==NULL) return(E_BADPARM); return( analInfo[type]->setParm (ckt, analPtr, parm, value) ); } tmpk8ny_4pz/src/spicelib/analysis/acsetp.c0000644000175000017500000000462013546075722021011 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/acdefs.h" #include "ngspice/cktdefs.h" #include "analysis.h" /* ARGSUSED */ int ACsetParm(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value) { ACAN *job = (ACAN *) anal; NG_IGNORE(ckt); switch(which) { case AC_START: if (value->rValue < 0.0) { errMsg = copy("Frequency of < 0 is invalid for AC start"); job->ACstartFreq = 1.0; return(E_PARMVAL); } job->ACstartFreq = value->rValue; break; case AC_STOP: if (value->rValue < 0.0) { errMsg = copy("Frequency of < 0 is invalid for AC stop"); job->ACstartFreq = 1.0; return(E_PARMVAL); } job->ACstopFreq = value->rValue; break; case AC_STEPS: job->ACnumberSteps = value->iValue; break; case AC_DEC: if(value->iValue) { job->ACstepType = DECADE; } else { if (job->ACstepType == DECADE) { job->ACstepType = 0; } } break; case AC_OCT: if(value->iValue) { job->ACstepType = OCTAVE; } else { if (job->ACstepType == OCTAVE) { job->ACstepType = 0; } } break; case AC_LIN: if(value->iValue) { job->ACstepType = LINEAR; } else { if (job->ACstepType == LINEAR) { job->ACstepType = 0; } } break; default: return(E_BADPARM); } return(OK); } static IFparm ACparms[] = { { "start", AC_START, IF_SET|IF_ASK|IF_REAL, "starting frequency" }, { "stop", AC_STOP, IF_SET|IF_ASK|IF_REAL, "ending frequency" }, { "numsteps", AC_STEPS,IF_SET|IF_ASK|IF_INTEGER, "number of frequencies"}, { "dec", AC_DEC, IF_SET|IF_FLAG, "step by decades" }, { "oct", AC_OCT, IF_SET|IF_FLAG, "step by octaves" }, { "lin", AC_LIN, IF_SET|IF_FLAG, "step linearly" } }; SPICEanalysis ACinfo = { { "AC", "A.C. Small signal analysis", NUMELEMS(ACparms), ACparms }, sizeof(ACAN), FREQUENCYDOMAIN, 1, ACsetParm, ACaskQuest, NULL, ACan }; tmpk8ny_4pz/src/spicelib/analysis/dcop.c0000644000175000017500000001260013546075722020454 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" #include "ngspice/ifsim.h" #ifdef XSPICE /* gtri - add - wbk - 12/19/90 - Add headers */ #include "ngspice/mif.h" #include "ngspice/evt.h" #include "ngspice/evtproto.h" #include "ngspice/ipctiein.h" /* gtri - end - wbk */ #endif int DCop(CKTcircuit *ckt, int notused) { #ifdef WANT_SENSE2 int i, senmode, size; long save; #endif int converged; int error; IFuid *nameList; /* va: tmalloc'ed list */ int numNames; runDesc *plot = NULL; NG_IGNORE(notused); #ifdef XSPICE /* gtri - add - wbk - 12/19/90 - Add IPC stuff and initialize anal_init and anal_type */ /* Tell the beginPlot routine what mode we're in */ g_ipc.anal_type = IPC_ANAL_DCOP; /* Tell the code models what mode we're in */ g_mif_info.circuit.anal_type = MIF_DC; g_mif_info.circuit.anal_init = MIF_TRUE; /* gtri - end - wbk */ #endif error = CKTnames(ckt,&numNames,&nameList); if(error) return(error); error = SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob, ckt->CKTcurJob->JOBname, NULL, IF_REAL, numNames, nameList, IF_REAL, &plot); tfree(nameList); /* va: nameList not used any longer, it was a memory leak */ if(error) return(error); /* initialize CKTsoaCheck `warn' counters */ if (ckt->CKTsoaCheck) error = CKTsoaInit(); #ifdef XSPICE /* gtri - begin - wbk - 6/10/91 - Call EVTop if event-driven instances exist */ if(ckt->evt->counts.num_insts != 0) { /* use new DCOP algorithm */ converged = EVTop(ckt, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITJCT, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITFLOAT, ckt->CKTdcMaxIter, MIF_TRUE); EVTdump(ckt, IPC_ANAL_DCOP, 0.0); EVTop_save(ckt, MIF_TRUE, 0.0); /* gtri - end - wbk - 6/10/91 - Call EVTop if event-driven instances exist */ } else /* If no event-driven instances, do what SPICE normally does */ #endif converged = CKTop(ckt, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITJCT, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITFLOAT, ckt->CKTdcMaxIter); if(converged != 0) { fprintf(stdout,"\nDC solution failed -\n"); CKTncDump(ckt); /* CKTnode *node; double new, old, tol; int i=1; fprintf(stdout,"\nDC solution failed -\n\n"); fprintf(stdout,"Last Node Voltages\n"); fprintf(stdout,"------------------\n\n"); fprintf(stdout,"%-30s %20s %20s\n", "Node", "Last Voltage", "Previous Iter"); fprintf(stdout,"%-30s %20s %20s\n", "----", "------------", "-------------"); for(node=ckt->CKTnodes->next;node;node=node->next) { if (strstr(node->name, "#branch") || !strchr(node->name, '#')) { new = ckt->CKTrhsOld [i] ; old = ckt->CKTrhs [i] ; fprintf(stdout,"%-30s %20g %20g", node->name, new, old); if(node->type == SP_VOLTAGE) { tol = ckt->CKTreltol * (MAX(fabs(old),fabs(new))) + ckt->CKTvoltTol; } else { tol = ckt->CKTreltol * (MAX(fabs(old),fabs(new))) + ckt->CKTabstol; } if (fabs(new-old) >tol ) { fprintf(stdout," *"); } fprintf(stdout,"\n"); } i++; } fprintf(stdout,"\n"); SPfrontEnd->OUTendPlot (plot); */ return(converged); } ckt->CKTmode = (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITSMSIG; #ifdef WANT_SENSE2 if(ckt->CKTsenInfo && ((ckt->CKTsenInfo->SENmode&DCSEN) || (ckt->CKTsenInfo->SENmode&ACSEN)) ){ #ifdef SENSDEBUG printf("\nDC Operating Point Sensitivity Results\n\n"); CKTsenPrint(ckt); #endif /* SENSDEBUG */ senmode = ckt->CKTsenInfo->SENmode; save = ckt->CKTmode; ckt->CKTsenInfo->SENmode = DCSEN; size = SMPmatSize(ckt->CKTmatrix); for(i = 1; i<=size ; i++){ ckt->CKTrhsOp[i] = ckt->CKTrhsOld[i]; } error = CKTsenDCtran(ckt); if (error) return(error); ckt->CKTmode = save; ckt->CKTsenInfo->SENmode = senmode; } #endif converged = CKTload(ckt); #ifdef XSPICE /* gtri - modify - wbk - 12/19/90 - Send IPC data delimiters */ if(g_ipc.enabled) ipc_send_dcop_prefix(); CKTdump(ckt, 0.0, plot); if (ckt->CKTsoaCheck) error = CKTsoaCheck(ckt); if(g_ipc.enabled) ipc_send_dcop_suffix(); /* gtri - end - wbk */ #else if(converged == 0) { CKTdump(ckt, 0.0, plot); if (ckt->CKTsoaCheck) error = CKTsoaCheck(ckt); } else { fprintf(stderr,"error: circuit reload failed.\n"); } #endif SPfrontEnd->OUTendPlot (plot); return(converged); } tmpk8ny_4pz/src/spicelib/analysis/tfaskq.c0000644000175000017500000000077313546075722021030 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/trcvdefs.h" #include "ngspice/cktdefs.h" /* ARGSUSED */ int TFaskQuest(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value) { NG_IGNORE(value); NG_IGNORE(anal); NG_IGNORE(ckt); switch(which) { default: break; } return(E_BADPARM); } tmpk8ny_4pz/src/spicelib/analysis/cktlnkeq.c0000644000175000017500000000174013546075722021346 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* *CKTlinkEq * Link an already allocated node into the necessary structure */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" int CKTlinkEq(CKTcircuit *ckt, CKTnode *node) { if(!(ckt->CKTnodes)) { /* starting the list - allocate both ground and 1 */ ckt->CKTnodes = TMALLOC(CKTnode, 1); if(ckt->CKTnodes == NULL) return(E_NOMEM); ckt->CKTnodes->name = NULL; ckt->CKTnodes->type = SP_VOLTAGE; ckt->CKTnodes->number = 0; ckt->CKTlastNode = ckt->CKTnodes; } if(node == NULL) return(E_BADPARM); ckt->CKTlastNode->next = node; ckt->CKTlastNode = ckt->CKTlastNode->next; ckt->CKTlastNode->number = ckt->CKTmaxEqNum++; ckt->CKTlastNode->next = NULL; return(OK); } tmpk8ny_4pz/src/spicelib/analysis/cktnodn.c0000644000175000017500000000114413546075722021170 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* *CKTnodName(ckt) * output information on all circuit nodes/equations * */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" IFuid CKTnodName(CKTcircuit *ckt, int nodenum) { CKTnode *here; for(here = ckt->CKTnodes;here; here = here->next) { if(here->number == nodenum) { /* found it */ return(here->name); } } /* doesn't exist - do something */ return("UNKNOWN NODE"); } tmpk8ny_4pz/src/spicelib/analysis/cktsens.c0000644000175000017500000004357513546075722021220 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Modified: 2000 AlanFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/fteext.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/spmatrix.h" #include "ngspice/gendefs.h" #include "ngspice/devdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "ngspice/sensdefs.h" #include "ngspice/sensgen.h" /* #define ASDEBUG */ #ifdef ASDEBUG #define DEBUG(X) if ((X) < Sens_Debug) int Sens_Debug = 0; char SF1[] = "res"; char SF2[] = "dc"; char SF3[] = "bf"; #endif char *Sfilter = NULL; double Sens_Delta = 0.000001; double Sens_Abs_Delta = 0.000001; static int sens_setp(sgen *sg, CKTcircuit *ckt, IFvalue *val); static int sens_load(sgen *sg, CKTcircuit *ckt, int is_dc); static int sens_temp(sgen *sg, CKTcircuit *ckt); static int count_steps(int type, double low, double high, int steps, double *stepsize); static double inc_freq(double freq, int type, double step_size); #define save_context(thing, place) { \ place = thing; \ } #define release_context(thing, place) \ if(place) { \ thing = place; \ place = NULL; \ } /* * Procedure: * * Determine operating point (call CKTop) * * For each frequency point: * (for AC) call NIacIter to get base node voltages * For each element/parameter in the test list: * construct the perturbation matrix * Solve for the sensitivities: * delta_E = Y^-1 (delta_Y E - delta_I) * save results */ static int error; int sens_sens(CKTcircuit *ckt, int restart) { SENS_AN *job = (SENS_AN *) ckt->CKTcurJob; static int size; static double *delta_I, *delta_iI, *delta_I_delta_Y, *delta_iI_delta_Y; sgen *sg; static double freq; static int nfreqs; static int i; static SMPmatrix *delta_Y = NULL, *Y; static double step_size; double *E, *iE; IFvalue value, nvalue; double *output_values; IFcomplex *output_cvalues; double delta_var; int (*fn) (SMPmatrix *, GENmodel *, CKTcircuit *, int *); static int is_dc; int k, j, n; int num_vars, branch_eq=0; runDesc *sen_data = NULL; char namebuf[513]; IFuid *output_names, freq_name; int bypass; int type; double *saved_rhs = NULL, *saved_irhs = NULL; SMPmatrix *saved_matrix = NULL; #ifndef notdef #ifdef notdef for (sg = sgen_init(ckt, 0); sg; sgen_next(&sg)) { if (sg->is_instparam) printf("%s:%s:%s -> param %s\n", DEVices[sg->dev]->DEVpublic.name, sg->model->GENmodName, sg->instance->GENname, sg->ptable[sg->param].keyword); else printf("%s:%s:%s -> mparam %s\n", DEVices[sg->dev]->DEVpublic.name, sg->model->GENmodName, sg->instance->GENname, sg->ptable[sg->param].keyword); } #endif #ifdef ASDEBUG DEBUG(1) printf(">>> restart : %d\n", restart); #endif /* get to work */ restart = 1; if (restart) { freq = 0.0; is_dc = (job->step_type == SENS_DC); nfreqs = count_steps(job->step_type, job->start_freq, job->stop_freq, job->n_freq_steps, &step_size); if (!is_dc) freq = job->start_freq; error = CKTop(ckt, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITJCT, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITFLOAT, ckt->CKTdcMaxIter); #ifdef notdef ckt->CKTmode = (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITSMSIG; #endif if (error) return error; size = SMPmatSize(ckt->CKTmatrix); /* Create the perturbation matrix */ error = SMPnewMatrix(&delta_Y, size); if (error) return error; size += 1; /* Create an extra rhs */ delta_I = TMALLOC(double, size); delta_iI = TMALLOC(double, size); delta_I_delta_Y = TMALLOC(double, size); delta_iI_delta_Y = TMALLOC(double, size); num_vars = 0; for (sg = sgen_init(ckt, is_dc); sg; sgen_next(&sg)) { num_vars += 1; } if (!num_vars) return OK; /* XXXX Should be E_ something */ k = 0; output_names = TMALLOC(IFuid, num_vars); for (sg = sgen_init(ckt, is_dc); sg; sgen_next(&sg)) { if (!sg->is_instparam) { sprintf(namebuf, "%s:%s", sg->instance->GENname, sg->ptable[sg->param].keyword); } else if ((sg->ptable[sg->param].dataType & IF_PRINCIPAL) && sg->is_principle == 1) { sprintf(namebuf, "%s", sg->instance->GENname); } else { sprintf(namebuf, "%s_%s", sg->instance->GENname, sg->ptable[sg->param].keyword); } SPfrontEnd->IFnewUid (ckt, output_names + k, NULL, namebuf, UID_OTHER, NULL); k += 1; } if (is_dc) { type = IF_REAL; freq_name = NULL; } else { type = IF_COMPLEX; SPfrontEnd->IFnewUid (ckt, &freq_name, NULL, "frequency", UID_OTHER, NULL); } error = SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob, ckt->CKTcurJob->JOBname, freq_name, IF_REAL, num_vars, output_names, type, &sen_data); if (error) return error; FREE(output_names); if (is_dc) { output_values = TMALLOC(double, num_vars); output_cvalues = NULL; } else { output_values = NULL; output_cvalues = TMALLOC(IFcomplex, num_vars); if (job->step_type != SENS_LINEAR) SPfrontEnd->OUTattributes (sen_data, NULL, OUT_SCALE_LOG, NULL); } } else { /*XXX Restore saved state */ output_values = NULL; output_cvalues = NULL; fprintf(stderr, "ERROR: restore is not implemented for cktsens\n"); controlled_exit(1); } #ifdef ASDEBUG DEBUG(1) printf("start: %f, num: %d, dc: %d\n", freq, nfreqs, is_dc); #endif if (!job->output_volt) branch_eq = CKTfndBranch(ckt, job->output_src); bypass = ckt->CKTbypass; ckt->CKTbypass = 0; /* CKTop solves into CKTrhs and CKTmatrix, * CKTirhs is hopefully zero (fresh allocated ?) */ E = ckt->CKTrhs; iE = ckt->CKTirhs; Y = ckt->CKTmatrix; #ifdef ASDEBUG DEBUG(1) { printf("Operating point:\n"); for (i = 0; i < size; i++) printf(" E [%d] = %20.15g\n", i, E[i]); } #endif #ifdef notdef for (j = 0; j <= ckt->CKTmaxOrder + 1; j++) { save_states[j] = ckt->CKTstates[j]; ckt->CKTstates[j] = NULL; } #endif for (i = 0; i < nfreqs; i++) { /* XXX handle restart */ n = 0; if (SPfrontEnd->IFpauseTest()) { /* XXX Save State */ return E_PAUSE; } for (j = 0; j < size; j++) { delta_I[j] = 0.0; delta_iI[j] = 0.0; } if (freq != 0.0) { /* This generates Y in LU form */ ckt->CKTomega = 2.0 * M_PI * freq; /* Yes, all this has to be re-done */ /* XXX Free old states */ error = CKTunsetup(ckt); if (error) return error; /* XXX ckt->CKTmatrix = Y; */ error = CKTsetup(ckt); if (error) return error; #ifdef notdef for (j = 0; j <= ckt->CKTmaxOrder + 1; j++) { /* XXX Free new states */ ckt->CKTstates[j] = save_states[j]; } #endif error = CKTtemp(ckt); if (error) return error; error = CKTload(ckt); /* INITSMSIGS */ if (error) return error; error = NIacIter(ckt); if (error) return error; #ifdef notdef /* XXX Why? */ for (j = 0; j <= ckt->CKTmaxOrder + 1; j++) { ckt->CKTstates[j] = NULL; } #endif /* NIacIter solves into CKTrhsOld, CKTirhsOld and CKTmatrix */ E = ckt->CKTrhsOld; iE = ckt->CKTirhsOld; Y = ckt->CKTmatrix; } /* Use a different vector & matrix */ save_context(ckt->CKTrhs, saved_rhs); save_context(ckt->CKTirhs, saved_irhs); save_context(ckt->CKTmatrix, saved_matrix); ckt->CKTrhs = delta_I; ckt->CKTirhs = delta_iI; ckt->CKTmatrix = delta_Y; /* calc. effect of each param */ for (sg = sgen_init(ckt, is_dc /* job->plist */); sg; sgen_next(&sg)) { #ifdef ASDEBUG DEBUG(2) { printf("E/iE: %x/%x; delta_I/iI: %x/%x\n", E, iE, delta_I, delta_iI); printf("cktrhs/irhs: %x/%x\n", ckt->CKTrhs, ckt->CKTirhs); if (sg->is_instparam) printf("%s:%s:%s -> param %s\n", DEVices[sg->dev]->DEVpublic.name, sg->model->GENmodName, sg->instance->GENname, sg->ptable[sg->param].keyword); else printf("%s:%s:%s -> mparam %s\n", DEVices[sg->dev]->DEVpublic.name, sg->model->GENmodName, sg->instance->GENname, sg->ptable[sg->param].keyword); } #endif SMPcClear(delta_Y); for (j = 0; j < size; j++) { delta_I[j] = 0.0; delta_iI[j] = 0.0; } /* ? should this just call CKTsetup * ? but then CKThead would have to get fiddled with */ ckt->CKTnumStates = sg->istate; fn = DEVices[sg->dev]->DEVsetup; if (fn) { CKTnode *node = ckt->CKTlastNode; /* XXXX insert old state base here ?? */ fn (delta_Y, sg->model, ckt, &ckt->CKTnumStates); if (node != ckt->CKTlastNode) { fprintf(stderr, "Internal Error: node allocation in DEVsetup() during sensitivity analysis, this will cause serious troubles !, please report this issue !\n"); controlled_exit(EXIT_FAILURE); } } /* ? CKTsetup would call NIreinit instead */ ckt->CKTniState = NISHOULDREORDER | NIACSHOULDREORDER; /* XXX instead of calling temp here, just swap * back to the original states */ (void) sens_temp(sg, ckt); /* XXX Leave original E until here!! so that temp reads * the right node voltages */ if (sens_load(sg, ckt, is_dc)) { if (error && error != E_BADPARM) return error; /* XXX */ continue; } /* Alter the parameter */ #ifdef ASDEBUG DEBUG(1) printf("Original value: %g\n", sg->value); #endif #ifdef ASDEBUG DEBUG(2) { printf("Effect of device:\n"); SMPprint(delta_Y, NULL); printf("LHS:\n"); for (j = 0; j < size; j++) printf("%d: %g, %g\n", j, delta_I[j], delta_iI[j]); } #endif if (sg->value != 0.0) delta_var = sg->value * Sens_Delta; else delta_var = Sens_Abs_Delta; nvalue.rValue = sg->value + delta_var; #ifdef ASDEBUG DEBUG(1) printf("New value: %g\n", nvalue.rValue); #endif sens_setp(sg, ckt, &nvalue); if (error && error != E_BADPARM) return error; SMPconstMult(delta_Y, -1.0); for (j = 0; j < size; j++) { delta_I[j] *= -1.0; delta_iI[j] *= -1.0; } #ifdef ASDEBUG DEBUG(2) { printf("Effect of negating matrix:\n"); SMPprint(delta_Y, NULL); for (j = 0; j < size; j++) printf("%d: %g, %g\n", j, delta_I[j], delta_iI[j]); } #endif /* XXX swap back to temp states ?? Naw ... */ (void) sens_temp(sg, ckt); #ifdef ASDEBUG DEBUG(1) { if (sens_getp(sg, ckt, &value)) { continue; } printf("New value in device: %g\n", value.rValue); } #endif sens_load(sg, ckt, is_dc); #ifdef ASDEBUG DEBUG(2) { printf("Effect of changing the parameter:\n"); SMPprint(delta_Y, NULL); for (j = 0; j < size; j++) printf("%d: %g, %g\n", j, delta_I[j], delta_iI[j]); } #endif /* Set the perturbed variable back to it's * original value */ value.rValue = sg->value; sens_setp(sg, ckt, &value); (void) sens_temp(sg, ckt); /* XXX is this necessary? */ /* Back to business . . . */ #ifdef ASDEBUG DEBUG(2) for (j = 0; j < size; j++) printf(" E [%d] = %20.15g\n", j, E[j]); #endif /* delta_Y E */ SMPmultiply(delta_Y, delta_I_delta_Y, E, delta_iI_delta_Y, iE); #ifdef ASDEBUG DEBUG(2) for (j = 0; j < size; j++) printf("delta_Y * E [%d] = %20.15g\n", j, delta_I_delta_Y[j]); #endif /* delta_I - delta_Y E */ for (j = 0; j < size; j++) { delta_I[j] -= delta_I_delta_Y[j]; delta_iI[j] -= delta_iI_delta_Y[j]; } #ifdef ASDEBUG DEBUG(2) { printf(">>> Y:\n"); SMPprint(Y, NULL); for (j = 0; j < size; j++) printf("%d: %g, %g\n", j, delta_I[j], delta_iI[j]); } #endif /* Solve; Y already factored */ SMPcSolve(Y, delta_I, delta_iI, NULL, NULL); /* the special `0' node * the matrix indizes are [1..n] * yet the vector indizes are [0..n] * with [0] being implicit === 0 */ delta_I[0] = 0.0; delta_iI[0] = 0.0; #ifdef ASDEBUG DEBUG(2) { for (j = 1; j < size; j++) { if (sg->is_instparam) printf("%d/%s.%s = %g, %g\n", j, sg->instance->GENname, sg->ptable[sg->param].keyword, delta_I[j], delta_iI[j]); else printf("%d/%s:%s = %g, %g\n", j, sg->instance->GENname, sg->ptable[sg->param].keyword, delta_I[j], delta_iI[j]); } } #endif /* delta_I is now equal to delta_E */ if (is_dc) { if (job->output_volt) output_values[n] = delta_I [job->output_pos->number] - delta_I [job->output_neg->number]; else { output_values[n] = delta_I[branch_eq]; } output_values[n] /= delta_var; } else { if (job->output_volt) { output_cvalues[n].real = delta_I [job->output_pos->number] - delta_I [job->output_neg->number]; output_cvalues[n].imag = delta_iI [job->output_pos->number] - delta_iI [job->output_neg->number]; } else { output_cvalues[n].real = delta_I[branch_eq]; output_cvalues[n].imag = delta_iI[branch_eq]; } output_cvalues[n].real /= delta_var; output_cvalues[n].imag /= delta_var; } n += 1; } release_context(ckt->CKTrhs, saved_rhs); release_context(ckt->CKTirhs, saved_irhs); release_context(ckt->CKTmatrix, saved_matrix); if (is_dc) nvalue.v.vec.rVec = output_values; else nvalue.v.vec.cVec = output_cvalues; value.rValue = freq; SPfrontEnd->OUTpData (sen_data, &value, &nvalue); freq = inc_freq(freq, job->step_type, step_size); } SPfrontEnd->OUTendPlot (sen_data); if (is_dc) { FREE(output_values); /* XXX free various vectors */ } else { FREE(output_cvalues); /* XXX free various vectors */ } release_context(ckt->CKTrhs, saved_rhs); release_context(ckt->CKTirhs, saved_irhs); release_context(ckt->CKTmatrix, saved_matrix); SMPdestroy(delta_Y); FREE(delta_I); FREE(delta_iI); FREE(delta_I_delta_Y); FREE(delta_iI_delta_Y); ckt->CKTbypass = bypass; #ifdef notdef for (j = 0; j <= ckt->CKTmaxOrder + 1; j++) { if (ckt->CKTstates[j]) FREE(ckt->CKTstates[j]); ckt->CKTstates[j] = save_states[j]; } #endif #endif return OK; } double inc_freq(double freq, int type, double step_size) { if (type != SENS_LINEAR) freq *= step_size; else freq += step_size; return freq; } /* static double next_freq(int type, double freq, double stepsize) { double s=0; switch (type) { case SENS_DC: s = 0; break; case SENS_LINEAR: s = freq + stepsize; break; case SENS_DECADE: case SENS_OCTAVE: s = freq * stepsize; break; } return s; } */ int count_steps(int type, double low, double high, int steps, double *stepsize) { double s; int n; if (steps < 1) steps = 1; switch (type) { default: case SENS_DC: n = 0; s = 0; break; case SENS_LINEAR: n = steps; s = (high - low) / steps; break; case SENS_DECADE: if (low <= 0.0) low = 1e-3; if (high <= low) high = 10.0 * low; n = (int)(steps * log10(high/low) + 1.01); s = pow(10.0, 1.0 / steps); break; case SENS_OCTAVE: if (low <= 0.0) low = 1e-3; if (high <= low) high = 2.0 * low; n = (int)(steps * log(high/low) / M_LOG2E + 1.01); s = pow(2.0, 1.0 / steps); break; } if (n <= 0) n = 1; *stepsize = s; return n; } static int sens_load(sgen *sg, CKTcircuit *ckt, int is_dc) { int (*fn) (GENmodel *, CKTcircuit *); error = 0; if (!is_dc) fn = DEVices[sg->dev]->DEVacLoad; else fn = DEVices[sg->dev]->DEVload; if (fn) error = fn (sg->model, ckt); else return 1; return error; } static int sens_temp(sgen *sg, CKTcircuit *ckt) { int (*fn) (GENmodel *, CKTcircuit *); error = 0; fn = DEVices[sg->dev]->DEVtemperature; if (fn) error = fn (sg->model, ckt); else return 1; return error; } /* Get parameter value */ int sens_getp(sgen *sg, CKTcircuit *ckt, IFvalue *val) { int pid; NG_IGNORE(ckt); error = 0; if (sg->is_instparam) { int (*fn) (CKTcircuit*, GENinstance*, int, IFvalue*, IFvalue*); fn = DEVices[sg->dev]->DEVask; pid = DEVices[sg->dev]->DEVpublic.instanceParms[sg->param].id; if (fn) error = fn (ckt, sg->instance, pid, val, NULL); else return 1; } else { int (*fn) (CKTcircuit*, GENmodel*, int, IFvalue*); fn = DEVices[sg->dev]->DEVmodAsk; pid = DEVices[sg->dev]->DEVpublic.modelParms[sg->param].id; if (fn) error = fn (ckt, sg->model, pid, val); else return 1; } if (error) { if (sg->is_instparam) printf("GET ERROR: %s:%s:%s -> param %s (%d)\n", DEVices[sg->dev]->DEVpublic.name, sg->model->GENmodName, sg->instance->GENname, sg->ptable[sg->param].keyword, pid); else printf("GET ERROR: %s:%s:%s -> mparam %s (%d)\n", DEVices[sg->dev]->DEVpublic.name, sg->model->GENmodName, sg->instance->GENname, sg->ptable[sg->param].keyword, pid); } return error; } /* Get parameter value */ int sens_setp(sgen *sg, CKTcircuit *ckt, IFvalue *val) { int pid; NG_IGNORE(ckt); error = 0; if (sg->is_instparam) { int (*fn) (int, IFvalue *, GENinstance *, IFvalue *); fn = DEVices[sg->dev]->DEVparam; pid = DEVices[sg->dev]->DEVpublic.instanceParms[sg->param].id; if (fn) error = fn (pid, val, sg->instance, NULL); else return 1; } else { int (*fn) (int, IFvalue *, GENmodel *); fn = DEVices[sg->dev]->DEVmodParam; pid = DEVices[sg->dev]->DEVpublic.modelParms[sg->param].id; if (fn) error = fn (pid, val, sg->model); else return 1; } if (error) { if (sg->is_instparam) printf("SET ERROR: %s:%s:%s -> param %s (%d)\n", DEVices[sg->dev]->DEVpublic.name, sg->model->GENmodName, sg->instance->GENname, sg->ptable[sg->param].keyword, pid); else printf("SET ERROR: %s:%s:%s -> mparam %s (%d)\n", DEVices[sg->dev]->DEVpublic.name, sg->model->GENmodName, sg->instance->GENname, sg->ptable[sg->param].keyword, pid); } return error; } tmpk8ny_4pz/src/spicelib/analysis/cktgrnd.c0000644000175000017500000000211613546075722021164 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* CKTground(ckt,node) * specify the node to be the ground node of the given circuit */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" int CKTground(CKTcircuit *ckt, CKTnode **node, IFuid name) { if(ckt->CKTnodes) { if(ckt->CKTnodes->name) { /*already exists - keep old name, but return it */ if(node) *node = ckt->CKTnodes; return(E_EXISTS); } ckt->CKTnodes->name = name; ckt->CKTnodes->type = SP_VOLTAGE; ckt->CKTnodes->number = 0; } else { ckt->CKTnodes = TMALLOC(CKTnode, 1); if(ckt->CKTnodes == NULL) return(E_NOMEM); ckt->CKTnodes->name = name; ckt->CKTnodes->type = SP_VOLTAGE; ckt->CKTnodes->number = 0; ckt->CKTnodes->next = NULL; ckt->CKTlastNode = ckt->CKTnodes; } if(node) *node = ckt->CKTnodes; return(OK); } tmpk8ny_4pz/src/spicelib/analysis/dctaskq.c0000644000175000017500000000106613546075722021165 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/trcvdefs.h" #include "ngspice/cktdefs.h" /* ARGSUSED */ int DCTaskQuest(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value) { NG_IGNORE(ckt); NG_IGNORE(anal); NG_IGNORE(value); switch(which) { default: break; } /* NOTREACHED */ /* TEMPORARY until cases get added */ return(E_BADPARM); } tmpk8ny_4pz/src/spicelib/analysis/cktdest.c0000644000175000017500000000520313546075722021171 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* CKTdestroy(ckt) * this is a driver program to iterate through all the various * destroy functions provided for the circuit elements in the * given circuit */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #ifdef XSPICE #include "ngspice/evtproto.h" #include "ngspice/mif.h" #include "ngspice/enh.h" #endif int CKTdestroy(CKTcircuit *ckt) { int i; CKTnode *node; CKTnode *nnode; #ifdef WANT_SENSE2 if(ckt->CKTsenInfo){ if(ckt->CKTrhsOp) FREE(ckt->CKTrhsOp); if(ckt->CKTsenRhs) FREE(ckt->CKTsenRhs); if(ckt->CKTseniRhs) FREE(ckt->CKTseniRhs); SENdestroy(ckt->CKTsenInfo); } #endif for (i = 0; i < DEVmaxnum; i++) if (DEVices[i]) { GENmodel *model = ckt->CKThead[i]; while (model) { GENmodel *next_model = model->GENnextModel; GENinstance *inst = model->GENinstances; while (inst) { GENinstance *next_inst = inst->GENnextInstance; if (DEVices[i]->DEVdelete) DEVices[i]->DEVdelete(inst); GENinstanceFree(inst); inst = next_inst; } if (DEVices[i]->DEVmodDelete) DEVices[i]->DEVmodDelete(model); GENmodelFree(model); model = next_model; } if (DEVices[i]->DEVdestroy) DEVices[i]->DEVdestroy(); } for(i=0;i<=ckt->CKTmaxOrder+1;i++){ FREE(ckt->CKTstates[i]); } if(ckt->CKTmatrix) { SMPdestroy(ckt->CKTmatrix); ckt->CKTmatrix = NULL; } FREE(ckt->CKTbreaks); for(node = ckt->CKTnodes; node; ) { nnode = node->next; FREE(node); node = nnode; } ckt->CKTnodes = NULL; ckt->CKTlastNode = NULL; FREE(ckt->CKTrhs); FREE(ckt->CKTrhsOld); FREE(ckt->CKTrhsSpare); FREE(ckt->CKTirhs); FREE(ckt->CKTirhsOld); FREE(ckt->CKTirhsSpare); FREE(ckt->CKTstat->STATdevNum); FREE(ckt->CKTstat); FREE(ckt->CKThead); #ifdef XSPICE EVTdest(ckt->evt); if (ckt->enh->rshunt_data.enabled) FREE(ckt->enh->rshunt_data.diag); FREE(ckt->enh); FREE(ckt->evt); #endif nghash_free(ckt->DEVnameHash, NULL, NULL); nghash_free(ckt->MODnameHash, NULL, NULL); FREE(ckt); #ifdef XSPICE g_mif_info.ckt = NULL; #endif return(OK); } tmpk8ny_4pz/src/spicelib/analysis/tfsetp.c0000644000175000017500000000330113546075722021032 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/tfdefs.h" #include "ngspice/cktdefs.h" #include "analysis.h" /* ARGSUSED */ int TFsetParm(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value) { TFan *job = (TFan *) anal; NG_IGNORE(ckt); switch(which) { case TF_OUTPOS: job->TFoutPos = value->nValue; job->TFoutIsV = TRUE; job->TFoutIsI = FALSE; break; case TF_OUTNEG: job->TFoutNeg = value->nValue; job->TFoutIsV = TRUE; job->TFoutIsI = FALSE; break; case TF_OUTNAME: job->TFoutName = value->sValue; break; case TF_OUTSRC: job->TFoutSrc = value->uValue; job->TFoutIsV = FALSE; job->TFoutIsI = TRUE; break; case TF_INSRC: job->TFinSrc = value->uValue; break; default: return(E_BADPARM); } return(OK); } static IFparm TFparms[] = { { "outpos", TF_OUTPOS, IF_SET|IF_NODE, "Positive output node" }, { "outneg", TF_OUTNEG, IF_SET|IF_NODE, "Negative output node" }, { "outname", TF_OUTNAME, IF_SET|IF_STRING,"Name of output variable"}, { "outsrc", TF_OUTSRC, IF_SET|IF_INSTANCE, "Output source" }, { "insrc", TF_INSRC, IF_SET|IF_INSTANCE, "Input source" } }; SPICEanalysis TFinfo = { { "TF", "transfer function analysis", NUMELEMS(TFparms), TFparms }, sizeof(TFan), NODOMAIN, 0, TFsetParm, TFaskQuest, NULL, TFanal }; tmpk8ny_4pz/src/spicelib/analysis/dctran.c0000644000175000017500000010307113546075722021005 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* subroutine to do DC TRANSIENT analysis --- ONLY, unlike spice2 routine with the same name! */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "cktaccept.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/fteext.h" #include "ngspice/missing_math.h" /* for setting breakpoints required by dbs data base */ extern struct dbcomm *dbs; #include "ngspice/ftedebug.h" #ifdef XSPICE /* gtri - add - wbk - Add headers */ #include "ngspice/miftypes.h" #include "ngspice/evt.h" #include "ngspice/enh.h" #include "ngspice/mif.h" #include "ngspice/evtproto.h" #include "ngspice/ipctiein.h" /* gtri - end - wbk - Add headers */ #endif #ifdef CLUSTER #include "ngspice/cluster.h" #endif #ifdef SHARED_MODULE extern int add_bkpt(void); extern int sharedsync(double*, double*, double, double, double, int, int*, int); extern int ng_ident; /* for debugging */ #endif #define INIT_STATS() \ do { \ startTime = SPfrontEnd->IFseconds(); \ startIters = ckt->CKTstat->STATnumIter; \ startdTime = ckt->CKTstat->STATdecompTime; \ startsTime = ckt->CKTstat->STATsolveTime; \ startlTime = ckt->CKTstat->STATloadTime; \ startkTime = ckt->CKTstat->STATsyncTime; \ } while(0) #define UPDATE_STATS(analysis) \ do { \ ckt->CKTcurrentAnalysis = analysis; \ ckt->CKTstat->STATtranTime += SPfrontEnd->IFseconds() - startTime; \ ckt->CKTstat->STATtranIter += ckt->CKTstat->STATnumIter - startIters; \ ckt->CKTstat->STATtranDecompTime += ckt->CKTstat->STATdecompTime - startdTime; \ ckt->CKTstat->STATtranSolveTime += ckt->CKTstat->STATsolveTime - startsTime; \ ckt->CKTstat->STATtranLoadTime += ckt->CKTstat->STATloadTime - startlTime; \ ckt->CKTstat->STATtranSyncTime += ckt->CKTstat->STATsyncTime - startkTime; \ } while(0) int DCtran(CKTcircuit *ckt, int restart) /* forced restart flag */ { TRANan *job = (TRANan *) ckt->CKTcurJob; int i; double olddelta; double delta; double newdelta; double *temp; double startdTime; double startsTime; double startlTime; double startkTime; double startTime; int startIters; int converged; int firsttime; int error; #ifdef WANT_SENSE2 int save, save2, size; long save1; #endif int save_order; long save_mode; IFuid timeUid; IFuid *nameList; int numNames; double maxstepsize = 0.0; int ltra_num; CKTnode *node; #ifdef XSPICE /* gtri - add - wbk - 12/19/90 - Add IPC stuff */ Ipc_Boolean_t ipc_firsttime = IPC_TRUE; Ipc_Boolean_t ipc_secondtime = IPC_FALSE; Ipc_Boolean_t ipc_delta_cut = IPC_FALSE; double ipc_last_time = 0.0; double ipc_last_delta = 0.0; /* gtri - end - wbk - 12/19/90 - Add IPC stuff */ #endif #if defined CLUSTER || defined SHARED_MODULE int redostep; #endif if(restart || ckt->CKTtime == 0) { delta=MIN(ckt->CKTfinalTime/100,ckt->CKTstep)/10; #ifdef STEPDEBUG printf("delta = %g finalTime/100: %g CKTstep: %g\n",delta,ckt->CKTfinalTime/100,ckt->CKTstep); #endif /* begin LTRA code addition */ if (ckt->CKTtimePoints != NULL) FREE(ckt->CKTtimePoints); if (ckt->CKTstep >= ckt->CKTmaxStep) maxstepsize = ckt->CKTstep; else maxstepsize = ckt->CKTmaxStep; ckt->CKTsizeIncr = 10; ckt->CKTtimeIndex = -1; /* before the DC soln has been stored */ ckt->CKTtimeListSize = (int) ceil( ckt->CKTfinalTime / maxstepsize ); ltra_num = CKTtypelook("LTRA"); if (ltra_num >= 0 && ckt->CKThead[ltra_num] != NULL) ckt->CKTtimePoints = TMALLOC(double, ckt->CKTtimeListSize); /* end LTRA code addition */ if(ckt->CKTbreaks) FREE(ckt->CKTbreaks); ckt->CKTbreaks = TMALLOC(double, 2); if(ckt->CKTbreaks == NULL) return(E_NOMEM); ckt->CKTbreaks[0] = 0; ckt->CKTbreaks[1] = ckt->CKTfinalTime; ckt->CKTbreakSize = 2; #ifdef SHARED_MODULE add_bkpt(); #endif #ifdef XSPICE /* gtri - begin - wbk - 12/19/90 - Modify setting of CKTminBreak */ /* Set to 10 times delmin for ATESSE 1 compatibity */ if(ckt->CKTminBreak==0) ckt->CKTminBreak = 10.0 * ckt->CKTdelmin; /* gtri - end - wbk - 12/19/90 - Modify setting of CKTminBreak */ #else if(ckt->CKTminBreak==0) ckt->CKTminBreak=ckt->CKTmaxStep*5e-5; #endif #ifdef XSPICE /* gtri - add - wbk - 12/19/90 - Add IPC stuff and set anal_init and anal_type */ /* Tell the beginPlot routine what mode we're in */ g_ipc.anal_type = IPC_ANAL_TRAN; /* Tell the code models what mode we're in */ g_mif_info.circuit.anal_type = MIF_DC; g_mif_info.circuit.anal_init = MIF_TRUE; /* gtri - end - wbk */ #endif error = CKTnames(ckt,&numNames,&nameList); if(error) return(error); SPfrontEnd->IFnewUid (ckt, &timeUid, NULL, "time", UID_OTHER, NULL); error = SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob, ckt->CKTcurJob->JOBname, timeUid, IF_REAL, numNames, nameList, IF_REAL, &(job->TRANplot)); tfree(nameList); if(error) return(error); /* initialize CKTsoaCheck `warn' counters */ if (ckt->CKTsoaCheck) error = CKTsoaInit(); ckt->CKTtime = 0; ckt->CKTdelta = 0; ckt->CKTbreak = 1; firsttime = 1; save_mode = (ckt->CKTmode&MODEUIC) | MODETRANOP | MODEINITJCT; save_order = ckt->CKTorder; /* Add breakpoints here which have been requested by the user setting the stop command as 'stop when time = xx'. Get data from the global dbs data base. */ if (dbs) { struct dbcomm *d; for (d = dbs; d; d = d->db_next) if ((d->db_type == DB_STOPWHEN) && cieq(d->db_nodename1,"time") && (d->db_value2 > 0)) { CKTsetBreak(ckt, d->db_value2); if (ft_ngdebug) printf("breakpoint set to time = %g\n", d->db_value2); } } #ifdef XSPICE /* gtri - begin - wbk - set a breakpoint at end of supply ramping time */ /* must do this after CKTtime set to 0 above */ if(ckt->enh->ramp.ramptime > 0.0) CKTsetBreak(ckt, ckt->enh->ramp.ramptime); /* gtri - end - wbk - set a breakpoint at end of supply ramping time */ /* gtri - begin - wbk - Call EVTop if event-driven instances exist */ if(ckt->evt->counts.num_insts != 0) { /* use new DCOP algorithm */ converged = EVTop(ckt, (ckt->CKTmode & MODEUIC) | MODETRANOP | MODEINITJCT, (ckt->CKTmode & MODEUIC) | MODETRANOP | MODEINITFLOAT, ckt->CKTdcMaxIter, MIF_TRUE); EVTdump(ckt, IPC_ANAL_DCOP, 0.0); EVTop_save(ckt, MIF_FALSE, 0.0); /* gtri - end - wbk - Call EVTop if event-driven instances exist */ } else #endif converged = CKTop(ckt, (ckt->CKTmode & MODEUIC) | MODETRANOP | MODEINITJCT, (ckt->CKTmode & MODEUIC) | MODETRANOP | MODEINITFLOAT, ckt->CKTdcMaxIter); if(converged != 0) { fprintf(stdout,"\nTransient solution failed -\n"); CKTncDump(ckt); /* CKTnode *node; double new, old, tol; int i=1; fprintf(stdout,"\nTransient solution failed -\n\n"); fprintf(stdout,"Last Node Voltages\n"); fprintf(stdout,"------------------\n\n"); fprintf(stdout,"%-30s %20s %20s\n", "Node", "Last Voltage", "Previous Iter"); fprintf(stdout,"%-30s %20s %20s\n", "----", "------------", "-------------"); for(node=ckt->CKTnodes->next;node;node=node->next) { if (strstr(node->name, "#branch") || !strchr(node->name, '#')) { new = ckt->CKTrhsOld [i] ; old = ckt->CKTrhs [i] ; fprintf(stdout,"%-30s %20g %20g", node->name, new, old); if(node->type == SP_VOLTAGE) { tol = ckt->CKTreltol * (MAX(fabs(old),fabs(new))) + ckt->CKTvoltTol; } else { tol = ckt->CKTreltol * (MAX(fabs(old),fabs(new))) + ckt->CKTabstol; } if (fabs(new-old) >tol ) { fprintf(stdout," *"); } fprintf(stdout,"\n"); } i++; } */ fprintf(stdout,"\n"); fflush(stdout); } else if (!ft_noacctprint && !ft_noinitprint) { fprintf(stdout,"\nInitial Transient Solution\n"); fprintf(stdout,"--------------------------\n\n"); fprintf(stdout,"%-30s %15s\n", "Node", "Voltage"); fprintf(stdout,"%-30s %15s\n", "----", "-------"); for(node=ckt->CKTnodes->next;node;node=node->next) { if (strstr(node->name, "#branch") || !strchr(node->name, '#')) fprintf(stdout,"%-30s %15g\n", node->name, ckt->CKTrhsOld[node->number]); } fprintf(stdout,"\n"); fflush(stdout); } if(converged != 0) return(converged); #ifdef XSPICE /* gtri - add - wbk - 12/19/90 - Add IPC stuff */ /* Send the operating point results for Mspice compatibility */ if(g_ipc.enabled) { ipc_send_dcop_prefix(); CKTdump(ckt, 0.0, job->TRANplot); ipc_send_dcop_suffix(); } /* gtri - end - wbk */ /* gtri - add - wbk - 12/19/90 - set anal_init and anal_type */ g_mif_info.circuit.anal_init = MIF_TRUE; /* Tell the code models what mode we're in */ g_mif_info.circuit.anal_type = MIF_TRAN; /* gtri - end - wbk */ /* gtri - begin - wbk - Add Breakpoint stuff */ /* Initialize the temporary breakpoint variables to infinity */ g_mif_info.breakpoint.current = 1.0e30; g_mif_info.breakpoint.last = 1.0e30; /* gtri - end - wbk - Add Breakpoint stuff */ #endif ckt->CKTstat->STATtimePts ++; ckt->CKTorder = 1; for(i=0;i<7;i++) { ckt->CKTdeltaOld[i]=ckt->CKTmaxStep; } ckt->CKTdelta = delta; #ifdef STEPDEBUG (void)printf("delta initialized to %g\n",ckt->CKTdelta); #endif ckt->CKTsaveDelta = ckt->CKTfinalTime/50; #ifdef WANT_SENSE2 if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN)){ #ifdef SENSDEBUG printf("\nTransient Sensitivity Results\n\n"); CKTsenPrint(ckt); #endif /* SENSDEBUG */ save = ckt->CKTsenInfo->SENmode; ckt->CKTsenInfo->SENmode = TRANSEN; save1 = ckt->CKTmode; save2 = ckt->CKTorder; ckt->CKTmode = save_mode; ckt->CKTorder = save_order; error = CKTsenDCtran(ckt); if (error) return(error); ckt->CKTmode = save1; ckt->CKTorder = save2; } #endif ckt->CKTmode = (ckt->CKTmode&MODEUIC) | MODETRAN | MODEINITTRAN; /* modeinittran set here */ ckt->CKTag[0]=ckt->CKTag[1]=0; memcpy(ckt->CKTstate1, ckt->CKTstate0, (size_t) ckt->CKTnumStates * sizeof(double)); #ifdef WANT_SENSE2 if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN)){ size = SMPmatSize(ckt->CKTmatrix); for(i = 1; i<=size ; i++) ckt->CKTrhsOp[i] = ckt->CKTrhsOld[i]; } #endif INIT_STATS(); #ifdef CLUSTER CLUsetup(ckt); #endif } else { /* saj As traninit resets CKTmode */ ckt->CKTmode = (ckt->CKTmode&MODEUIC) | MODETRAN | MODEINITPRED; /* saj */ INIT_STATS(); if(ckt->CKTminBreak==0) ckt->CKTminBreak=ckt->CKTmaxStep*5e-5; firsttime=0; /* To get rawfile working saj*/ error = SPfrontEnd->OUTpBeginPlot (NULL, NULL, NULL, NULL, 0, 666, NULL, 666, &(job->TRANplot)); if(error) { fprintf(stderr, "Couldn't relink rawfile\n"); return error; } /* end saj*/ goto resume; } /* 650 */ nextTime: /* begin LTRA code addition */ if (ckt->CKTtimePoints) { ckt->CKTtimeIndex++; if (ckt->CKTtimeIndex >= ckt->CKTtimeListSize) { /* need more space */ int need; need = (int) ceil( (ckt->CKTfinalTime - ckt->CKTtime) / maxstepsize ); if (need < ckt->CKTsizeIncr) need = ckt->CKTsizeIncr; ckt->CKTtimeListSize += need; ckt->CKTtimePoints = TREALLOC(double, ckt->CKTtimePoints, ckt->CKTtimeListSize); ckt->CKTsizeIncr = (int) ceil(1.4 * ckt->CKTsizeIncr); } ckt->CKTtimePoints[ckt->CKTtimeIndex] = ckt->CKTtime; } /* end LTRA code addition */ error = CKTaccept(ckt); /* check if current breakpoint is outdated; if so, clear */ if (ckt->CKTtime > ckt->CKTbreaks[0]) CKTclrBreak(ckt); if (ckt->CKTsoaCheck) error = CKTsoaCheck(ckt); /* * Breakpoint handling scheme: * When a timepoint t is accepted (by CKTaccept), clear all previous * breakpoints, because they will never be needed again. * * t may itself be a breakpoint, or indistinguishably close. DON'T * clear t itself; recognise it as a breakpoint and act accordingly * * if t is not a breakpoint, limit the timestep so that the next * breakpoint is not crossed */ #ifdef STEPDEBUG printf("Delta %g accepted at time %g (finaltime: %g)\n",ckt->CKTdelta,ckt->CKTtime,ckt->CKTfinalTime); fflush(stdout); #endif /* STEPDEBUG */ ckt->CKTstat->STATaccepted ++; ckt->CKTbreak = 0; /* XXX Error will cause single process to bail. */ if(error) { UPDATE_STATS(DOING_TRAN); return(error); } #ifdef XSPICE /* gtri - modify - wbk - 12/19/90 - Send IPC stuff */ if ((g_ipc.enabled) || wantevtdata) { /* Send event-driven results */ EVTdump(ckt, IPC_ANAL_TRAN, 0.0); /* Then follow with analog results... */ /* Test to see if delta was cut by a breakpoint, */ /* a non-convergence, or a too large truncation error */ if(ipc_firsttime) ipc_delta_cut = IPC_FALSE; else if(ckt->CKTtime < (ipc_last_time + (0.999 * ipc_last_delta))) ipc_delta_cut = IPC_TRUE; else ipc_delta_cut = IPC_FALSE; /* Record the data required to check for delta cuts */ ipc_last_time = ckt->CKTtime; ipc_last_delta = MIN(ckt->CKTdelta, ckt->CKTmaxStep); /* Send results data if time since last dump is greater */ /* than 'mintime', or if first or second timepoints, */ /* or if delta was cut */ if( (ckt->CKTtime >= (g_ipc.mintime + g_ipc.last_time)) || ipc_firsttime || ipc_secondtime || ipc_delta_cut ) { if (wantevtdata) CKTdump(ckt, ckt->CKTtime, job->TRANplot); else { ipc_send_data_prefix(ckt->CKTtime); CKTdump(ckt, ckt->CKTtime, job->TRANplot); ipc_send_data_suffix(); } if(ipc_firsttime) { ipc_firsttime = IPC_FALSE; ipc_secondtime = IPC_TRUE; } else if(ipc_secondtime) { ipc_secondtime = IPC_FALSE; } g_ipc.last_time = ckt->CKTtime; } } else /* gtri - modify - wbk - 12/19/90 - Send IPC stuff */ #endif #ifdef CLUSTER CLUoutput(ckt); #endif if(ckt->CKTtime >= ckt->CKTinitTime) CKTdump(ckt, ckt->CKTtime, job->TRANplot); #ifdef XSPICE /* gtri - begin - wbk - Update event queues/data for accepted timepoint */ /* Note: this must be done AFTER sending results to SI so it can't */ /* go next to CKTaccept() above */ if(ckt->evt->counts.num_insts > 0) EVTaccept(ckt, ckt->CKTtime); /* gtri - end - wbk - Update event queues/data for accepted timepoint */ #endif ckt->CKTstat->STAToldIter = ckt->CKTstat->STATnumIter; if(check_autostop("tran") || fabs(ckt->CKTtime - ckt->CKTfinalTime) < ckt->CKTminBreak || AlmostEqualUlps( ckt->CKTtime, ckt->CKTfinalTime, 100 ) ) { #ifdef STEPDEBUG printf(" done: time is %g, final time is %g, and tol is %g\n", ckt->CKTtime, ckt->CKTfinalTime, ckt->CKTminBreak); #endif SPfrontEnd->OUTendPlot (job->TRANplot); job->TRANplot = NULL; UPDATE_STATS(0); #ifdef WANT_SENSE2 if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN)){ ckt->CKTsenInfo->SENmode = save; } #endif return(OK); } if(SPfrontEnd->IFpauseTest()) { /* user requested pause... */ UPDATE_STATS(DOING_TRAN); return(E_PAUSE); } resume: #ifdef STEPDEBUG if( (ckt->CKTdelta <= ckt->CKTfinalTime/50) && (ckt->CKTdelta <= ckt->CKTmaxStep)) { ; } else { if(ckt->CKTfinalTime/50CKTmaxStep) { (void)printf("limited by Tstop/50\n"); } else { (void)printf("limited by Tmax == %g\n",ckt->CKTmaxStep); } } #endif #ifdef HAS_PROGREP if (ckt->CKTtime == 0.) SetAnalyse( "tran init", 0); else SetAnalyse( "tran", (int)((ckt->CKTtime * 1000.) / ckt->CKTfinalTime + 0.5)); #endif ckt->CKTdelta = MIN(ckt->CKTdelta,ckt->CKTmaxStep); #ifdef XSPICE /* gtri - begin - wbk - Cut integration order if first timepoint after breakpoint */ /* if(ckt->CKTtime == g_mif_info.breakpoint.last) */ if ( AlmostEqualUlps( ckt->CKTtime, g_mif_info.breakpoint.last, 100 ) ) ckt->CKTorder = 1; /* gtri - end - wbk - Cut integration order if first timepoint after breakpoint */ #endif /* are we at a breakpoint, or indistinguishably close? */ /* if ((ckt->CKTtime == ckt->CKTbreaks[0]) || (ckt->CKTbreaks[0] - */ if ( AlmostEqualUlps( ckt->CKTtime, ckt->CKTbreaks[0], 100 ) || ckt->CKTbreaks[0] - ckt->CKTtime <= ckt->CKTdelmin) { /* first timepoint after a breakpoint - cut integration order */ /* and limit timestep to .1 times minimum of time to next breakpoint, * and previous timestep */ ckt->CKTorder = 1; #ifdef STEPDEBUG if( (ckt->CKTdelta > .1*ckt->CKTsaveDelta) || (ckt->CKTdelta > .1*(ckt->CKTbreaks[1] - ckt->CKTbreaks[0])) ) { if(ckt->CKTsaveDelta < (ckt->CKTbreaks[1] - ckt->CKTbreaks[0])) { (void)printf("limited by pre-breakpoint delta (saveDelta: %g, nxt_breakpt: %g, curr_breakpt: %g\n", ckt->CKTsaveDelta, ckt->CKTbreaks[1], ckt->CKTbreaks[0]); } else { (void)printf("limited by next breakpoint\n"); } } #endif ckt->CKTdelta = MIN(ckt->CKTdelta, .1 * MIN(ckt->CKTsaveDelta, ckt->CKTbreaks[1] - ckt->CKTbreaks[0])); if(firsttime) { /* set a breakpoint to reduce ringing of current in devices */ if (ckt->CKTmode & MODEUIC) CKTsetBreak(ckt, ckt->CKTstep); ckt->CKTdelta /= 10; #ifdef STEPDEBUG (void)printf("delta cut for initial timepoint\n"); #endif } #ifndef XSPICE /* don't want to get below delmin for no reason */ ckt->CKTdelta = MAX(ckt->CKTdelta, ckt->CKTdelmin*2.0); #endif } #ifndef XSPICE else if(ckt->CKTtime + ckt->CKTdelta >= ckt->CKTbreaks[0]) { ckt->CKTsaveDelta = ckt->CKTdelta; ckt->CKTdelta = ckt->CKTbreaks[0] - ckt->CKTtime; #ifdef STEPDEBUG (void)printf("delta cut to %g to hit breakpoint\n",ckt->CKTdelta); fflush(stdout); #endif ckt->CKTbreak = 1; /* why? the current pt. is not a bkpt. */ } #endif /* !XSPICE */ #ifdef XSPICE /* gtri - begin - wbk - Add Breakpoint stuff */ if(ckt->CKTtime + ckt->CKTdelta >= g_mif_info.breakpoint.current) { /* If next time > temporary breakpoint, force it to the breakpoint */ /* And mark that timestep was set by temporary breakpoint */ ckt->CKTsaveDelta = ckt->CKTdelta; ckt->CKTdelta = g_mif_info.breakpoint.current - ckt->CKTtime; g_mif_info.breakpoint.last = ckt->CKTtime + ckt->CKTdelta; } else { /* Else, mark that timestep was not set by temporary breakpoint */ g_mif_info.breakpoint.last = 1.0e30; } /* gtri - end - wbk - Add Breakpoint stuff */ /* gtri - begin - wbk - Modify Breakpoint stuff */ /* Throw out any permanent breakpoint times <= current time */ for (;;) { #ifdef STEPDEBUG printf(" brk_pt: %g ckt_time: %g ckt_min_break: %g\n",ckt->CKTbreaks[0], ckt->CKTtime, ckt->CKTminBreak); #endif if(AlmostEqualUlps(ckt->CKTbreaks[0], ckt->CKTtime, 100) || ckt->CKTbreaks[0] <= ckt->CKTtime + ckt->CKTminBreak) { #ifdef STEPDEBUG printf("throwing out permanent breakpoint times <= current time (brk pt: %g)\n",ckt->CKTbreaks[0]); printf(" ckt_time: %g ckt_min_break: %g\n",ckt->CKTtime, ckt->CKTminBreak); #endif CKTclrBreak(ckt); } else { break; } } /* Force the breakpoint if appropriate */ if(ckt->CKTtime + ckt->CKTdelta > ckt->CKTbreaks[0]) { ckt->CKTbreak = 1; ckt->CKTsaveDelta = ckt->CKTdelta; ckt->CKTdelta = ckt->CKTbreaks[0] - ckt->CKTtime; } /* gtri - end - wbk - Modify Breakpoint stuff */ #ifdef SHARED_MODULE /* Either directly go to next time step, or modify ckt->CKTdelta depending on synchronization requirements. sharedsync() returns 0. */ sharedsync(&ckt->CKTtime, &ckt->CKTdelta, 0, ckt->CKTfinalTime, ckt->CKTdelmin, 0, &ckt->CKTstat->STATrejected, 0); #endif /* gtri - begin - wbk - Do event solution */ if(ckt->evt->counts.num_insts > 0) { /* if time = 0 and op_alternate was specified as false during */ /* dcop analysis, call any changed instances to let them */ /* post their outputs with their associated delays */ if((ckt->CKTtime == 0.0) && (! ckt->evt->options.op_alternate)) EVTiter(ckt); /* while there are events on the queue with event time <= next */ /* projected analog time, process them */ while((g_mif_info.circuit.evt_step = EVTnext_time(ckt)) <= (ckt->CKTtime + ckt->CKTdelta)) { /* Initialize temp analog bkpt to infinity */ g_mif_info.breakpoint.current = 1e30; /* Pull items off queue and process them */ EVTdequeue(ckt, g_mif_info.circuit.evt_step); EVTiter(ckt); /* If any instances have forced an earlier */ /* next analog time, cut the delta */ if(ckt->CKTbreaks[0] < g_mif_info.breakpoint.current) if(ckt->CKTbreaks[0] > ckt->CKTtime + ckt->CKTminBreak) g_mif_info.breakpoint.current = ckt->CKTbreaks[0]; if(g_mif_info.breakpoint.current < ckt->CKTtime + ckt->CKTdelta) { /* Breakpoint must be > last accepted timepoint */ /* and >= current event time */ if(g_mif_info.breakpoint.current > ckt->CKTtime + ckt->CKTminBreak && g_mif_info.breakpoint.current >= g_mif_info.circuit.evt_step) { ckt->CKTsaveDelta = ckt->CKTdelta; ckt->CKTdelta = g_mif_info.breakpoint.current - ckt->CKTtime; g_mif_info.breakpoint.last = ckt->CKTtime + ckt->CKTdelta; } } } /* end while next event time <= next analog time */ } /* end if there are event instances */ /* gtri - end - wbk - Do event solution */ #else #ifdef CLUSTER if(!CLUsync(ckt->CKTtime,&ckt->CKTdelta,0)) { printf("Sync error!\n"); exit(0); } #endif /* CLUSTER */ #ifdef SHARED_MODULE /* Either directly go to next time step, or modify ckt->CKTdelta depending on synchronization requirements. sharedsync() returns 0. */ sharedsync(&ckt->CKTtime, &ckt->CKTdelta, 0, ckt->CKTfinalTime, ckt->CKTdelmin, 0, &ckt->CKTstat->STATrejected, 0); #endif #endif for(i=5; i>=0; i--) ckt->CKTdeltaOld[i+1] = ckt->CKTdeltaOld[i]; ckt->CKTdeltaOld[0] = ckt->CKTdelta; temp = ckt->CKTstates[ckt->CKTmaxOrder+1]; for(i=ckt->CKTmaxOrder;i>=0;i--) { ckt->CKTstates[i+1] = ckt->CKTstates[i]; } ckt->CKTstates[0] = temp; /* 600 */ for (;;) { #if defined CLUSTER || defined SHARED_MODULE redostep = 1; #endif #ifdef XSPICE /* gtri - add - wbk - 4/17/91 - Fix Berkeley bug */ /* This is needed here to allow CAPask to output currents */ /* during Transient analysis. A grep for CKTcurrentAnalysis */ /* indicates that it should not hurt anything else ... */ ckt->CKTcurrentAnalysis = DOING_TRAN; /* gtri - end - wbk - 4/17/91 - Fix Berkeley bug */ #endif olddelta=ckt->CKTdelta; /* time abort? */ ckt->CKTtime += ckt->CKTdelta; #ifdef CLUSTER CLUinput(ckt); #endif ckt->CKTdeltaOld[0]=ckt->CKTdelta; NIcomCof(ckt); #ifdef PREDICTOR error = NIpred(ckt); #endif /* PREDICTOR */ save_mode = ckt->CKTmode; save_order = ckt->CKTorder; #ifdef XSPICE /* gtri - begin - wbk - Add Breakpoint stuff */ /* Initialize temporary breakpoint to infinity */ g_mif_info.breakpoint.current = 1.0e30; /* gtri - end - wbk - Add Breakpoint stuff */ /* gtri - begin - wbk - add convergence problem reporting flags */ /* delta is forced to equal delmin on last attempt near line 650 */ if(ckt->CKTdelta <= ckt->CKTdelmin) ckt->enh->conv_debug.last_NIiter_call = MIF_TRUE; else ckt->enh->conv_debug.last_NIiter_call = MIF_FALSE; /* gtri - begin - wbk - add convergence problem reporting flags */ /* gtri - begin - wbk - Call all hybrids */ /* gtri - begin - wbk - Set evt_step */ if(ckt->evt->counts.num_insts > 0) { g_mif_info.circuit.evt_step = ckt->CKTtime; } /* gtri - end - wbk - Set evt_step */ #endif converged = NIiter(ckt,ckt->CKTtranMaxIter); #ifdef XSPICE if(ckt->evt->counts.num_insts > 0) { g_mif_info.circuit.evt_step = ckt->CKTtime; EVTcall_hybrids(ckt); } /* gtri - end - wbk - Call all hybrids */ #endif ckt->CKTstat->STATtimePts ++; ckt->CKTmode = (ckt->CKTmode&MODEUIC)|MODETRAN | MODEINITPRED; if(firsttime) { memcpy(ckt->CKTstate2, ckt->CKTstate1, (size_t) ckt->CKTnumStates * sizeof(double)); memcpy(ckt->CKTstate3, ckt->CKTstate1, (size_t) ckt->CKTnumStates * sizeof(double)); } /* txl, cpl addition */ if (converged == 1111) { return(converged); } if(converged != 0) { #ifndef CLUSTER #ifndef SHARED_MODULE ckt->CKTtime = ckt->CKTtime -ckt->CKTdelta; ckt->CKTstat->STATrejected ++; #else redostep = 1; #endif #endif ckt->CKTdelta = ckt->CKTdelta/8; #ifdef STEPDEBUG (void)printf("delta cut to %g for non-convergance\n",ckt->CKTdelta); fflush(stdout); #endif if(firsttime) { ckt->CKTmode = (ckt->CKTmode&MODEUIC) | MODETRAN | MODEINITTRAN; } ckt->CKTorder = 1; #ifdef XSPICE /* gtri - begin - wbk - Add Breakpoint stuff */ /* Force backup if temporary breakpoint is < current time */ } else if(g_mif_info.breakpoint.current < ckt->CKTtime) { ckt->CKTsaveDelta = ckt->CKTdelta; ckt->CKTtime -= ckt->CKTdelta; ckt->CKTdelta = g_mif_info.breakpoint.current - ckt->CKTtime; g_mif_info.breakpoint.last = ckt->CKTtime + ckt->CKTdelta; if(firsttime) { ckt->CKTmode = (ckt->CKTmode&MODEUIC)|MODETRAN | MODEINITTRAN; } ckt->CKTorder = 1; /* gtri - end - wbk - Add Breakpoint stuff */ #endif } else { if (firsttime) { #ifdef WANT_SENSE2 if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN)){ save1 = ckt->CKTmode; save2 = ckt->CKTorder; ckt->CKTmode = save_mode; ckt->CKTorder = save_order; error = CKTsenDCtran (ckt); if (error) return(error); ckt->CKTmode = save1; ckt->CKTorder = save2; } #endif firsttime = 0; #if !defined CLUSTER && !defined SHARED_MODULE goto nextTime; /* no check on * first time point */ #else redostep = 0; goto chkStep; #endif } newdelta = ckt->CKTdelta; error = CKTtrunc(ckt,&newdelta); if(error) { UPDATE_STATS(DOING_TRAN); return(error); } if (newdelta > .9 * ckt->CKTdelta) { if ((ckt->CKTorder == 1) && (ckt->CKTmaxOrder > 1)) { /* don't rise the order for backward Euler */ newdelta = ckt->CKTdelta; ckt->CKTorder = 2; error = CKTtrunc(ckt, &newdelta); if (error) { UPDATE_STATS(DOING_TRAN); return(error); } if (newdelta <= 1.05 * ckt->CKTdelta) { ckt->CKTorder = 1; } } /* time point OK - 630 */ ckt->CKTdelta = newdelta; #ifdef NDEV if (!ft_norefprint) { /* show a time process indicator, by Gong Ding, gdiso@ustc.edu */ if (ckt->CKTtime / ckt->CKTfinalTime * 100 < 10.0) printf("%%%3.2lf\b\b\b\b\b", ckt->CKTtime / ckt->CKTfinalTime * 100); else if (ckt->CKTtime / ckt->CKTfinalTime * 100 < 100.0) printf("%%%4.2lf\b\b\b\b\b\b", ckt->CKTtime / ckt->CKTfinalTime * 100); else printf("%%%5.2lf\b\b\b\b\b\b\b", ckt->CKTtime / ckt->CKTfinalTime * 100); fflush(stdout); } #endif #ifdef STEPDEBUG (void)printf( "delta set to truncation error result: %g. Point accepted at CKTtime: %g\n", ckt->CKTdelta,ckt->CKTtime); fflush(stdout); #endif #ifdef WANT_SENSE2 if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN)){ save1 = ckt->CKTmode; save2 = ckt->CKTorder; ckt->CKTmode = save_mode; ckt->CKTorder = save_order; error = CKTsenDCtran(ckt); if (error) return (error); ckt->CKTmode = save1; ckt->CKTorder = save2; } #endif #if !defined CLUSTER && !defined SHARED_MODULE /* go to 650 - trapezoidal */ goto nextTime; #else redostep = 0; goto chkStep; #endif } else { #ifndef CLUSTER #ifndef SHARED_MODULE ckt->CKTtime = ckt->CKTtime -ckt->CKTdelta; ckt->CKTstat->STATrejected ++; #else redostep = 1; #endif #endif ckt->CKTdelta = newdelta; #ifdef STEPDEBUG (void)printf( "delta set to truncation error result:point rejected\n"); #endif } } if (ckt->CKTdelta <= ckt->CKTdelmin) { if (olddelta > ckt->CKTdelmin) { ckt->CKTdelta = ckt->CKTdelmin; #ifdef STEPDEBUG (void)printf("delta at delmin\n"); #endif } else { UPDATE_STATS(DOING_TRAN); errMsg = CKTtrouble(ckt, "Timestep too small"); return(E_TIMESTEP); } } #ifdef XSPICE /* gtri - begin - wbk - Do event backup */ if(ckt->evt->counts.num_insts > 0) EVTbackup(ckt, ckt->CKTtime + ckt->CKTdelta); /* gtri - end - wbk - Do event backup */ #endif #ifdef CLUSTER chkStep: if(CLUsync(ckt->CKTtime,&ckt->CKTdelta,redostep)){ goto nextTime; } else { ckt->CKTtime -= olddelta; ckt->CKTstat->STATrejected ++; } #endif #ifdef SHARED_MODULE /* redostep == 0: Either directly go to next time step, or modify ckt->CKTdelta depending on synchronization requirements. sharedsync() returns 0. redostep == 1: No convergence, or too large truncation error. Redo the last time step by subtracting olddelta, and modify ckt->CKTdelta depending on synchronization requirements. sharedsync() returns 1. User-supplied redo request: sharedsync() may return 1 if the user has decided to do so in the callback function. */ chkStep: if(sharedsync(&ckt->CKTtime, &ckt->CKTdelta, olddelta, ckt->CKTfinalTime, ckt->CKTdelmin, redostep, &ckt->CKTstat->STATrejected, 1) == 0) goto nextTime; #endif } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/analysis/cktaskaq.c0000644000175000017500000000123213546075722021330 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/tskdefs.h" #include "ngspice/jobdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "analysis.h" extern SPICEanalysis *analInfo[]; /* ARGSUSED */ int CKTaskAnalQ(CKTcircuit *ckt, JOB *analPtr, int parm, IFvalue *value, IFvalue *selector) { int type = analPtr->JOBtype; NG_IGNORE(selector); if((analInfo[type]->askQuest) == NULL) return(E_BADPARM); return( analInfo[type]->askQuest (ckt, analPtr, parm, value)); } tmpk8ny_4pz/src/spicelib/analysis/pssinit.c0000644000175000017500000000175213546075722021226 0ustar carstencarsten/********** Author: 2010-05 Stefano Perticaroli ``spertica'' **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/trandefs.h" #include "ngspice/pssdefs.h" #include "ngspice/iferrmsg.h" int PSSinit(CKTcircuit *ckt, JOB *anal) { PSSan *job = (PSSan *) anal; /* Step is chosen empirically to be 1% of PSSguessedFreq */ ckt->CKTstep = 0.01 * (1/job->PSSguessedFreq); /* Init time should be always zero */ ckt->CKTinitTime = 0; /* MaxStep should not exceed Nyquist criterion */ ckt->CKTmaxStep = 0.5*(1/job->PSSguessedFreq); ckt->CKTdelmin = 1e-9*ckt->CKTmaxStep; ckt->CKTmode = job->PSSmode; /* modified CKTdefs.h for the following - 100609 */ ckt->CKTstabTime = job->PSSstabTime; ckt->CKTguessedFreq = job->PSSguessedFreq; ckt->CKTharms = job->PSSharms; ckt->CKTpsspoints = job->PSSpoints; ckt->CKTsc_iter = job->sc_iter; ckt->CKTsteady_coeff = job->steady_coeff; return OK; } tmpk8ny_4pz/src/spicelib/analysis/Makefile.am0000644000175000017500000000323513546075722021423 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libckt.la libckt_la_SOURCES = \ acan.c \ acaskq.c \ acsetp.c \ analysis.c \ analysis.h \ cktacct.c \ cktacdum.c \ cktaskaq.c \ cktasknq.c \ cktbkdum.c \ cktclrbk.c \ cktdelt.c \ cktdest.c \ cktdisto.c \ cktdlti.c \ cktdltm.c \ cktdltn.c \ cktdojob.c \ cktdump.c \ cktncdump.c \ cktfbran.c \ cktfnda.c \ cktfndm.c \ cktfnode.c \ cktftask.c \ cktgrnd.c \ ckti2nod.c \ cktic.c \ cktlnkeq.c \ cktload.c \ cktmapn.c \ cktmask.c \ cktmcrt.c \ cktmkcur.c \ cktmknod.c \ cktmkvol.c \ cktmpar.c \ cktnames.c \ cktnewan.c \ cktneweq.c \ cktnewn.c \ cktnodn.c \ cktnoise.c \ cktntask.c \ cktnum2n.c \ cktop.c \ cktparam.c \ cktpmnam.c \ cktpname.c \ cktpzld.c \ cktpzset.c \ cktpzstr.c \ cktsens.c \ cktsetap.c \ cktsetbk.c \ cktsetnp.c \ cktsetup.c \ cktsgen.c \ cktsopt.c \ ckttemp.c \ cktterr.c \ ckttroub.c \ ckttrunc.c \ ckttyplk.c \ daskq.c \ dcoaskq.c \ dcop.c \ dcosetp.c \ dctaskq.c \ dctran.c \ dctrcurv.c \ dctsetp.c \ distoan.c \ dkerproc.c \ dloadfns.c \ dsetparm.c \ naskq.c \ nevalsrc.c \ ninteg.c \ noisean.c \ nsetparm.c \ pzan.c \ pzaskq.c \ pzsetp.c \ sensaskq.c \ senssetp.c \ tfanal.c \ tfaskq.c \ tfsetp.c \ tranaskq.c \ traninit.c \ transetp.c \ cluster.c if PSS_WANTED libckt_la_SOURCES += \ dcpss.c \ pssaskq.c \ pssinit.c \ psssetp.c endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include -I$(top_srcdir)/src/spicelib/devices AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/analysis/cktmapn.c0000644000175000017500000000227413546075722021172 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* CKTmapNode(ckt,node) * map the given node to the compact node numbering set of the * specified circuit */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/cktdefs.h" /* ARGSUSED *//* fixme abandoned */ int CKTmapNode(CKTcircuit *ckt, CKTnode **node, IFuid name) { CKTnode *here; int error; IFuid uid; CKTnode *mynode; for (here = ckt->CKTnodes; here; here = here->next) { if(here->name == name) { if(node) *node = here; return(E_EXISTS); } } /* not found, so must be a new one */ error = CKTmkNode(ckt,&mynode); /*allocate the node*/ if(error) return(error); /* get a uid for it */ error = SPfrontEnd->IFnewUid (ckt, &uid, NULL, name, UID_SIGNAL, &mynode); if(error) return(error); mynode->name = uid; /* set the info we have */ mynode->type = SP_VOLTAGE; error = CKTlinkEq(ckt,mynode); /* and link it in */ if(node) *node = mynode; /* and finally, return it */ return(OK); } tmpk8ny_4pz/src/spicelib/analysis/cktpzset.c0000644000175000017500000000411213546075722021375 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ /* CKTpzSetup(ckt) * iterate through all the various * pzSetup functions provided for the circuit elements in the * given circuit, setup ... */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" int CKTpzSetup(CKTcircuit *ckt, int type) { PZAN *job = (PZAN *) ckt->CKTcurJob; SMPmatrix *matrix; int error; int i, solution_col, balance_col; int input_pos, input_neg, output_pos, output_neg; NIdestroy(ckt); error = NIinit(ckt); if (error) return(error); matrix = ckt->CKTmatrix; /* Really awful . . . */ ckt->CKTnumStates = 0; for (i = 0; i < DEVmaxnum; i++) { if (DEVices[i] && DEVices[i]->DEVpzSetup != NULL && ckt->CKThead[i] != NULL) { error = DEVices[i]->DEVpzSetup (matrix, ckt->CKThead[i], ckt, &ckt->CKTnumStates); if (error != OK) return(error); } } solution_col = 0; balance_col = 0; input_pos = job->PZin_pos; input_neg = job->PZin_neg; if (type == PZ_DO_ZEROS) { /* Vo/Ii in Y */ output_pos = job->PZout_pos; output_neg = job->PZout_neg; } else if (job->PZinput_type == PZ_IN_VOL) { /* Vi/Ii in Y */ output_pos = job->PZin_pos; output_neg = job->PZin_neg; } else { /* Denominator */ output_pos = 0; output_neg = 0; input_pos = 0; input_neg = 0; } if (output_pos) { solution_col = output_pos; if (output_neg) balance_col = output_neg; } else { solution_col = output_neg; SWAP(int, input_pos, input_neg); } if (input_pos) job->PZdrive_pptr = SMPmakeElt(matrix, input_pos, solution_col); else job->PZdrive_pptr = NULL; if (input_neg) job->PZdrive_nptr = SMPmakeElt(matrix, input_neg, solution_col); else job->PZdrive_nptr = NULL; job->PZsolution_col = solution_col; job->PZbalance_col = balance_col; job->PZnumswaps = 1; error = NIreinit(ckt); if (error) return(error); return OK; } tmpk8ny_4pz/src/spicelib/analysis/cktsetbk.c0000644000175000017500000000550713546075722021351 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* CKTsetBreak(ckt,time) * add the given time to the breakpoint table for the given circuit */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" /* define to enable breakpoint trace code */ /* #define TRACE_BREAKPOINT */ int CKTsetBreak(CKTcircuit *ckt, double time) { double *tmp; int i,j; #ifdef TRACE_BREAKPOINT printf("[t:%e] \t want breakpoint for t = %e\n", ckt->CKTtime, time); #endif if(ckt->CKTtime > time) { SPfrontEnd->IFerrorf (ERR_PANIC, "breakpoint in the past - HELP!"); return(E_INTERN); } for(i=0;iCKTbreakSize;i++) { if(ckt->CKTbreaks[i]>time) { /* passed */ if((ckt->CKTbreaks[i]-time) <= ckt->CKTminBreak) { /* very close together - take earlier point */ #ifdef TRACE_BREAKPOINT printf("[t:%e] \t %e replaces %e\n", ckt->CKTtime, time, ckt->CKTbreaks[i]); CKTbreakDump(ckt); #endif ckt->CKTbreaks[i] = time; return(OK); } if(i>0 && time-ckt->CKTbreaks[i-1] <= ckt->CKTminBreak) { /* very close together, but after, so skip */ #ifdef TRACE_BREAKPOINT printf("[t:%e] \t %e skipped\n", ckt->CKTtime, time); CKTbreakDump(ckt); #endif return(OK); } /* fits in middle - new array & insert */ tmp = TMALLOC(double, ckt->CKTbreakSize + 1); if(tmp == NULL) return(E_NOMEM); for(j=0;jCKTbreaks[j]; } tmp[i]=time; #ifdef TRACE_BREAKPOINT printf("[t:%e] \t %e added\n", ckt->CKTtime, time); CKTbreakDump(ckt); #endif for(j=i;jCKTbreakSize;j++) { tmp[j+1] = ckt->CKTbreaks[j]; } FREE(ckt->CKTbreaks); ckt->CKTbreakSize++; ckt->CKTbreaks=tmp; return(OK); } } /* never found it - beyond end of time - extend out idea of time */ if(time-ckt->CKTbreaks[ckt->CKTbreakSize-1]<=ckt->CKTminBreak) { /* very close tegether - keep earlier, throw out new point */ #ifdef TRACE_BREAKPOINT printf("[t:%e] \t %e skipped (at the end)\n", ckt->CKTtime, time); CKTbreakDump(ckt); #endif return(OK); } /* fits at end - grow array & add on */ ckt->CKTbreaks = TREALLOC(double, ckt->CKTbreaks, ckt->CKTbreakSize + 1); ckt->CKTbreakSize++; ckt->CKTbreaks[ckt->CKTbreakSize-1]=time; #ifdef TRACE_BREAKPOINT printf("[t:%e] \t %e added at end\n", ckt->CKTtime, time); CKTbreakDump(ckt); #endif return(OK); } tmpk8ny_4pz/src/spicelib/analysis/cktbkdum.c0000644000175000017500000000074213546075722021337 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* CKTbreakDump(ckt) - dump the breakpoint table associated with * the given circuit */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" void CKTbreakDump(CKTcircuit *ckt) { int i; for(i=0;iCKTbreakSize;i++) { (void)printf("breakpoint table entry %d is %g\n",i,ckt->CKTbreaks[i]); } } tmpk8ny_4pz/src/spicelib/analysis/cktmcrt.c0000644000175000017500000000221013546075722021172 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* CKTmodCrt(type,name,ckt,fast) * Create a device model of the specified type, with the given name * in the named circuit. */ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" #include "ngspice/wordlist.h" int CKTmodCrt(CKTcircuit *ckt, int type, GENmodel **modfast, IFuid name) { GENmodel *model = CKTfndMod(ckt, name); if (model) { *modfast = model; return E_EXISTS; } model = (GENmodel *) tmalloc((size_t) *(DEVices[type]->DEVmodSize)); if (!model) return E_NOMEM; model->defaults = NULL; model->GENmodType = type; model->GENmodName = name; model->GENnextModel = ckt->CKThead[type]; ckt->CKThead[type] = model; nghash_insert(ckt->MODnameHash, name, model); *modfast = model; return OK; } void GENinstanceFree(GENinstance *inst) { txfree(inst); } void GENmodelFree(GENmodel *model) { wl_free(model->defaults); txfree(model); } tmpk8ny_4pz/src/spicelib/analysis/pzan.c0000644000175000017500000001240613546075722020503 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #include "ngspice/ngspice.h" #include "ngspice/complex.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "ngspice/pzdefs.h" #include "ngspice/trandefs.h" /* only to get the 'mode' definitions */ #include "ngspice/sperror.h" #define DEBUG if (0) /* ARGSUSED */ int PZan(CKTcircuit *ckt, int reset) { PZAN *job = (PZAN *) ckt->CKTcurJob; int error; int numNames; IFuid *nameList; runDesc *plot = NULL; NG_IGNORE(reset); error = PZinit(ckt); if (error != OK) return error; /* Calculate small signal parameters at the operating point */ error = CKTop(ckt, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITJCT, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITFLOAT, ckt->CKTdcMaxIter); if (error) return(error); ckt->CKTmode = (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITSMSIG; error = CKTload(ckt); /* Make sure that all small signal params are * set */ if (error) return(error); if (ckt->CKTkeepOpInfo) { /* Dump operating point. */ error = CKTnames(ckt,&numNames,&nameList); if(error) return(error); error = SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob, "Distortion Operating Point", NULL, IF_REAL, numNames, nameList, IF_REAL, &plot); if(error) return(error); CKTdump(ckt, 0.0, plot); SPfrontEnd->OUTendPlot (plot); } if (job->PZwhich & PZ_DO_POLES) { error = CKTpzSetup(ckt, PZ_DO_POLES); if (error != OK) return error; error = CKTpzFindZeros(ckt, &job->PZpoleList, &job->PZnPoles); if (error != OK) return(error); } if (job->PZwhich & PZ_DO_ZEROS) { error = CKTpzSetup(ckt, PZ_DO_ZEROS); if (error != OK) return error; error = CKTpzFindZeros(ckt, &job->PZzeroList, &job->PZnZeros); if (error != OK) return(error); } return PZpost(ckt); } /* * Perform error checking */ int PZinit(CKTcircuit *ckt) { PZAN *job = (PZAN *) ckt->CKTcurJob; int i; i = CKTtypelook("transmission line"); if (i == -1) { i = CKTtypelook("Tranline"); if (i == -1) i = CKTtypelook("LTRA"); } if (i != -1 && ckt->CKThead[i] != NULL) MERROR(E_XMISSIONLINE, "Transmission lines not supported"); job->PZpoleList = NULL; job->PZzeroList = NULL; job->PZnPoles = 0; job->PZnZeros = 0; if (job->PZin_pos == job->PZin_neg) MERROR(E_SHORT, "Input is shorted"); if (job->PZout_pos == job->PZout_neg) MERROR(E_SHORT, "Output is shorted"); if (job->PZin_pos == job->PZout_pos && job->PZin_neg == job->PZout_neg && job->PZinput_type == PZ_IN_VOL) MERROR(E_INISOUT, "Transfer function is unity"); else if (job->PZin_pos == job->PZout_neg && job->PZin_neg == job->PZout_pos && job->PZinput_type == PZ_IN_VOL) MERROR(E_INISOUT, "Transfer function is -1"); return(OK); } /* * PZpost Post-processing of the pole-zero analysis results */ int PZpost(CKTcircuit *ckt) { PZAN *job = (PZAN *) ckt->CKTcurJob; runDesc *pzPlotPtr = NULL; /* the plot pointer for front end */ IFcomplex *out_list; IFvalue outData; /* output variable (points to out_list) */ IFuid *namelist; PZtrial *root; char name[50]; int i, j; namelist = TMALLOC(IFuid, job->PZnPoles + job->PZnZeros); out_list = TMALLOC(IFcomplex, job->PZnPoles + job->PZnZeros); j = 0; for (i = 0; i < job->PZnPoles; i++) { sprintf(name, "pole(%-u)", i+1); SPfrontEnd->IFnewUid (ckt, &(namelist[j++]), NULL, name, UID_OTHER, NULL); } for (i = 0; i < job->PZnZeros; i++) { sprintf(name, "zero(%-u)", i+1); SPfrontEnd->IFnewUid (ckt, &(namelist[j++]), NULL, name, UID_OTHER, NULL); } SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob, ckt->CKTcurJob->JOBname, NULL, 0, job->PZnPoles + job->PZnZeros, namelist, IF_COMPLEX, &pzPlotPtr); j = 0; if (job->PZnPoles > 0) { for (root = job->PZpoleList; root != NULL; root = root->next) { for (i = 0; i < root->multiplicity; i++) { out_list[j].real = root->s.real; out_list[j].imag = root->s.imag; j += 1; if (root->s.imag != 0.0) { out_list[j].real = root->s.real; out_list[j].imag = -root->s.imag; j += 1; } } DEBUG printf("LIST pole: (%g,%g) x %d\n", root->s.real, root->s.imag, root->multiplicity); } } if (job->PZnZeros > 0) { for (root = job->PZzeroList; root != NULL; root = root->next) { for (i = 0; i < root->multiplicity; i++) { out_list[j].real = root->s.real; out_list[j].imag = root->s.imag; j += 1; if (root->s.imag != 0.0) { out_list[j].real = root->s.real; out_list[j].imag = -root->s.imag; j += 1; } } DEBUG printf("LIST zero: (%g,%g) x %d\n", root->s.real, root->s.imag, root->multiplicity); } } outData.v.numValue = job->PZnPoles + job->PZnZeros; outData.v.vec.cVec = out_list; SPfrontEnd->OUTpData (pzPlotPtr, NULL, &outData); SPfrontEnd->OUTendPlot (pzPlotPtr); return(OK); } tmpk8ny_4pz/src/spicelib/analysis/pzsetp.c0000644000175000017500000000423213546075722021056 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/pzdefs.h" #include "ngspice/cktdefs.h" #include "analysis.h" /* ARGSUSED */ int PZsetParm(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value) { PZAN *job = (PZAN *) anal; NG_IGNORE(ckt); switch(which) { case PZ_NODEI: job->PZin_pos = value->nValue->number; break; case PZ_NODEG: job->PZin_neg = value->nValue->number; break; case PZ_NODEJ: job->PZout_pos = value->nValue->number; break; case PZ_NODEK: job->PZout_neg = value->nValue->number; break; case PZ_V: if(value->iValue) { job->PZinput_type = PZ_IN_VOL; } break; case PZ_I: if(value->iValue) { job->PZinput_type = PZ_IN_CUR; } break; case PZ_POL: if(value->iValue) { job->PZwhich = PZ_DO_POLES; } break; case PZ_ZER: if(value->iValue) { job->PZwhich = PZ_DO_ZEROS; } break; case PZ_PZ: if(value->iValue) { job->PZwhich = PZ_DO_POLES | PZ_DO_ZEROS; } break; default: return(E_BADPARM); } return(OK); } static IFparm PZparms[] = { { "nodei", PZ_NODEI, IF_SET|IF_ASK|IF_NODE, "" }, { "nodeg", PZ_NODEG, IF_SET|IF_ASK|IF_NODE, "" }, { "nodej", PZ_NODEJ, IF_SET|IF_ASK|IF_NODE, "" }, { "nodek", PZ_NODEK, IF_SET|IF_ASK|IF_NODE, "" }, { "vol", PZ_V, IF_SET|IF_ASK|IF_FLAG, "" }, { "cur", PZ_I, IF_SET|IF_ASK|IF_FLAG, "" }, { "pol", PZ_POL, IF_SET|IF_ASK|IF_FLAG, "" }, { "zer", PZ_ZER, IF_SET|IF_ASK|IF_FLAG, "" }, { "pz", PZ_PZ, IF_SET|IF_ASK|IF_FLAG, "" } }; SPICEanalysis PZinfo = { { "PZ", "pole-zero analysis", NUMELEMS(PZparms), PZparms }, sizeof(PZAN), NODOMAIN, 1, PZsetParm, PZaskQuest, NULL, PZan }; tmpk8ny_4pz/src/spicelib/analysis/cktncdump.c0000644000175000017500000000226113546075722021521 0ustar carstencarsten/********** Copyright 1999 AG inc. All rights reserved. Author: 1999 Alan Gillespie **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/suffix.h" void CKTncDump( CKTcircuit *ckt) { CKTnode *node; double new, old, tol; int i=1; fprintf(stdout,"\n"); fprintf(stdout,"Last Node Voltages\n"); fprintf(stdout,"------------------\n\n"); fprintf(stdout,"%-30s %20s %20s\n", "Node", "Last Voltage", "Previous Iter"); fprintf(stdout,"%-30s %20s %20s\n", "----", "------------", "-------------"); for(node=ckt->CKTnodes->next;node;node=node->next) { if (strstr(node->name, "#branch") || !strchr(node->name, '#')) { new = ckt->CKTrhsOld [i] ; old = ckt->CKTrhs [i] ; fprintf(stdout,"%-30s %20g %20g", node->name, new, old); if(node->type == SP_VOLTAGE) { tol = ckt->CKTreltol * (MAX(fabs(old),fabs(new))) + ckt->CKTvoltTol; } else { tol = ckt->CKTreltol * (MAX(fabs(old),fabs(new))) + ckt->CKTabstol; } if (fabs(new-old) >tol ) { fprintf(stdout," *"); } fprintf(stdout,"\n"); } i++; } fprintf(stdout,"\n"); } tmpk8ny_4pz/src/spicelib/analysis/cktfndm.c0000644000175000017500000000061313546075722021156 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" GENmodel * CKTfndMod(CKTcircuit *ckt, IFuid modname) { return nghash_find(ckt->MODnameHash, modname); } tmpk8ny_4pz/src/spicelib/analysis/ckttroub.c0000644000175000017500000000421713546075722021371 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #include "ngspice/ngspice.h" #include "ngspice/trandefs.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "vsrc/vsrcdefs.h" #include "isrc/isrcdefs.h" #include "ngspice/jobdefs.h" #include "analysis.h" extern SPICEanalysis *analInfo[]; char * CKTtrouble(CKTcircuit *ckt, char *optmsg) { char msg_buf[513]; char *emsg; TRCV *cv; int vcode, icode; char *msg_p; SPICEanalysis *an; int i; if (!ckt || !ckt->CKTcurJob) return NULL; an = analInfo[ckt->CKTcurJob->JOBtype]; if (optmsg && *optmsg) { sprintf(msg_buf, "%s: %s; ", an->if_analysis.name, optmsg); } else { sprintf(msg_buf, "%s: ", an->if_analysis.name); } msg_p = msg_buf + strlen(msg_buf); switch (an->domain) { case TIMEDOMAIN: if (ckt->CKTtime == 0.0) sprintf(msg_p, "initial timepoint: "); else sprintf(msg_p, "time = %g, timestep = %g: ", ckt->CKTtime, ckt->CKTdelta); break; case FREQUENCYDOMAIN: sprintf(msg_p, "frequency = %g: ", ckt->CKTomega / (2.0 * M_PI)); break; case SWEEPDOMAIN: cv = (TRCV*) ckt->CKTcurJob; vcode = CKTtypelook("Vsource"); icode = CKTtypelook("Isource"); for (i = 0; i <= cv->TRCVnestLevel; i++) { msg_p += strlen(msg_p); if(cv->TRCVvType[i]==vcode) { /* voltage source */ sprintf(msg_p, " %s = %g: ", cv->TRCVvName[i], ((VSRCinstance*)(cv->TRCVvElt[i]))->VSRCdcValue); } else { sprintf(msg_p, " %s = %g: ", cv->TRCVvName[i], ((ISRCinstance*)(cv->TRCVvElt[i]))->ISRCdcValue); } } break; case NODOMAIN: default: break; } msg_p += strlen(msg_p); if (ckt->CKTtroubleNode) { sprintf(msg_p, "trouble with node \"%s\"\n", CKTnodName(ckt, ckt->CKTtroubleNode)); } else if (ckt->CKTtroubleElt) { /* "-" for dop */ sprintf(msg_p, "trouble with %s-instance %s\n", ckt->CKTtroubleElt->GENmodPtr->GENmodName, ckt->CKTtroubleElt->GENname); } else { sprintf(msg_p, "cause unrecorded.\n"); } emsg = TMALLOC(char, strlen(msg_buf) + 1); strcpy(emsg,msg_buf); return emsg; } tmpk8ny_4pz/src/spicelib/analysis/analysis.h0000644000175000017500000000107713546075722021365 0ustar carstencarsten#ifndef ngspice_ANALYSIS_H #define ngspice_ANALYSIS_H struct SPICEanalysis { IFanalysis if_analysis; int size; int domain; int do_ic; int (*setParm)(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value); int (*askQuest)(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value); int (*an_init)(CKTcircuit *ckt, JOB *job); int (*an_func)(CKTcircuit *ckt, int restart); }; char *spice_analysis_get_name(int index); char *spice_analysis_get_description(int index); int spice_num_analysis(void); SPICEanalysis **spice_analysis_ptr(void); #endif tmpk8ny_4pz/src/spicelib/analysis/dctsetp.c0000644000175000017500000000633313546075722021203 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/trcvdefs.h" #include "ngspice/cktdefs.h" #include "analysis.h" /* ARGSUSED */ int DCTsetParm(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value) { TRCV *job = (TRCV *) anal; NG_IGNORE(ckt); switch(which) { case DCT_START1: job->TRCVvStart[0] = value->rValue; job->TRCVnestLevel = MAX(0, job->TRCVnestLevel); job->TRCVset[0] = TRUE; break; case DCT_STOP1: job->TRCVvStop[0] = value->rValue; job->TRCVnestLevel = MAX(0, job->TRCVnestLevel); job->TRCVset[0] = TRUE; break; case DCT_STEP1: job->TRCVvStep[0] = value->rValue; job->TRCVnestLevel = MAX(0, job->TRCVnestLevel); job->TRCVset[0] = TRUE; break; case DCT_START2: job->TRCVvStart[1] = value->rValue; job->TRCVnestLevel = MAX(1, job->TRCVnestLevel); job->TRCVset[1] = TRUE; break; case DCT_STOP2: job->TRCVvStop[1] = value->rValue; job->TRCVnestLevel = MAX(1, job->TRCVnestLevel); job->TRCVset[1] = TRUE; break; case DCT_STEP2: job->TRCVvStep[1] = value->rValue; job->TRCVnestLevel = MAX(1, job->TRCVnestLevel); job->TRCVset[1] = TRUE; break; case DCT_NAME1: job->TRCVvName[0] = value->uValue; job->TRCVnestLevel = MAX(0, job->TRCVnestLevel); job->TRCVset[0] = TRUE; break; case DCT_NAME2: job->TRCVvName[1] = value->uValue; job->TRCVnestLevel = MAX(1, job->TRCVnestLevel); job->TRCVset[1] = TRUE; break; case DCT_TYPE1: job->TRCVvType[0] = value->iValue; job->TRCVnestLevel = MAX(0, job->TRCVnestLevel); job->TRCVset[0] = TRUE; break; case DCT_TYPE2: job->TRCVvType[1] = value->iValue; job->TRCVnestLevel = MAX(1, job->TRCVnestLevel); job->TRCVset[1] = TRUE; break; default: return(E_BADPARM); } return(OK); } static IFparm DCTparms[] = { { "start1", DCT_START1, IF_SET|IF_REAL, "starting voltage/current"}, { "stop1", DCT_STOP1, IF_SET|IF_REAL, "ending voltage/current" }, { "step1", DCT_STEP1, IF_SET|IF_REAL, "voltage/current step" }, { "start2", DCT_START2, IF_SET|IF_REAL, "starting voltage/current"}, { "stop2", DCT_STOP2, IF_SET|IF_REAL, "ending voltage/current" }, { "step2", DCT_STEP2, IF_SET|IF_REAL, "voltage/current step" }, { "name1", DCT_NAME1, IF_SET|IF_INSTANCE, "name of source to step" }, { "name2", DCT_NAME2, IF_SET|IF_INSTANCE, "name of source to step" }, { "type1", DCT_TYPE1, IF_SET|IF_INTEGER, "type of source to step" }, { "type2", DCT_TYPE2, IF_SET|IF_INTEGER, "type of source to step" } }; SPICEanalysis DCTinfo = { { "DC", "D.C. Transfer curve analysis", NUMELEMS(DCTparms), DCTparms }, sizeof(TRCV), SWEEPDOMAIN, 1, DCTsetParm, DCTaskQuest, NULL, DCtrCurv }; tmpk8ny_4pz/src/spicelib/analysis/acan.c0000644000175000017500000003254013546075722020436 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified 2001: AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/acdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #ifdef XSPICE #include "ngspice/evt.h" #include "ngspice/enh.h" /* gtri - add - wbk - 12/19/90 - Add headers */ #include "ngspice/mif.h" #include "ngspice/evtproto.h" #include "ngspice/ipctiein.h" /* gtri - end - wbk */ #endif #define INIT_STATS() \ do { \ startTime = SPfrontEnd->IFseconds(); \ startdTime = ckt->CKTstat->STATdecompTime; \ startsTime = ckt->CKTstat->STATsolveTime; \ startlTime = ckt->CKTstat->STATloadTime; \ startkTime = ckt->CKTstat->STATsyncTime; \ } while(0) #define UPDATE_STATS(analysis) \ do { \ ckt->CKTcurrentAnalysis = analysis; \ ckt->CKTstat->STATacTime += SPfrontEnd->IFseconds() - startTime; \ ckt->CKTstat->STATacDecompTime += ckt->CKTstat->STATdecompTime - startdTime; \ ckt->CKTstat->STATacSolveTime += ckt->CKTstat->STATsolveTime - startsTime; \ ckt->CKTstat->STATacLoadTime += ckt->CKTstat->STATloadTime - startlTime; \ ckt->CKTstat->STATacSyncTime += ckt->CKTstat->STATsyncTime - startkTime; \ } while(0) int ACan(CKTcircuit *ckt, int restart) { ACAN *job = (ACAN *) ckt->CKTcurJob; double freq; double freqTol; /* tolerence parameter for finding final frequency */ double startdTime; double startsTime; double startlTime; double startkTime; double startTime; int error; int numNames; IFuid *nameList; /* va: tmalloc'ed list of names */ IFuid freqUid; static runDesc *acPlot = NULL; runDesc *plot = NULL; #ifdef XSPICE /* gtri - add - wbk - 12/19/90 - Add IPC stuff and anal_init and anal_type */ /* Tell the beginPlot routine what mode we're in */ g_ipc.anal_type = IPC_ANAL_AC; /* Tell the code models what mode we're in */ g_mif_info.circuit.anal_type = MIF_DC; g_mif_info.circuit.anal_init = MIF_TRUE; /* gtri - end - wbk */ #endif /* start at beginning */ if (job->ACsaveFreq == 0 || restart) { if (job->ACnumberSteps < 1) job->ACnumberSteps = 1; switch (job->ACstepType) { case DECADE: if (job->ACstartFreq <= 0) { fprintf(stderr, "ERROR: AC startfreq <= 0\n"); return E_PARMVAL; } job->ACfreqDelta = exp(log(10.0)/job->ACnumberSteps); break; case OCTAVE: if (job->ACstartFreq <= 0) { fprintf(stderr, "ERROR: AC startfreq <= 0\n"); return E_PARMVAL; } job->ACfreqDelta = exp(log(2.0)/job->ACnumberSteps); break; case LINEAR: if (job->ACnumberSteps-1 > 1) job->ACfreqDelta = (job->ACstopFreq - job->ACstartFreq) / (job->ACnumberSteps - 1); else /* Patch from: Richard McRoberts * This patch is for a rather pathological case: * a linear step with only one point */ job->ACfreqDelta = 0; break; default: return(E_BADPARM); } #ifdef XSPICE /* gtri - begin - wbk - Call EVTop if event-driven instances exist */ if(ckt->evt->counts.num_insts != 0) { error = EVTop(ckt, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITJCT, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITFLOAT, ckt->CKTdcMaxIter, MIF_TRUE); EVTdump(ckt, IPC_ANAL_DCOP, 0.0); EVTop_save(ckt, MIF_TRUE, 0.0); } else #endif /* If no event-driven instances, do what SPICE normally does */ if (!ckt->CKTnoopac) { /* skip OP if option NOOPAC is set and circuit is linear */ error = CKTop(ckt, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITJCT, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITFLOAT, ckt->CKTdcMaxIter); if(error){ fprintf(stdout,"\nAC operating point failed -\n"); CKTncDump(ckt); return(error); } } else fprintf(stdout,"\n Linear circuit, option noopac given: no OP analysis\n"); #ifdef XSPICE /* gtri - add - wbk - 12/19/90 - Add IPC stuff */ /* Send the operating point results for Mspice compatibility */ if(g_ipc.enabled) { /* Call CKTnames to get names of nodes/branches used by BeginPlot */ /* Probably should free nameList after this block since called again... */ error = CKTnames(ckt,&numNames,&nameList); if(error) return(error); /* We have to do a beginPlot here since the data to return is * different for the DCOP than it is for the AC analysis. * Moreover the begin plot has not even been done yet at this * point... */ SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob, ckt->CKTcurJob->JOBname, NULL, IF_REAL, numNames, nameList, IF_REAL, &acPlot); tfree(nameList); ipc_send_dcop_prefix(); CKTdump(ckt, 0.0, acPlot); ipc_send_dcop_suffix(); SPfrontEnd->OUTendPlot (acPlot); } /* gtri - end - wbk */ #endif ckt->CKTmode = (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITSMSIG; error = CKTload(ckt); if(error) return(error); error = CKTnames(ckt,&numNames,&nameList); if(error) return(error); if (ckt->CKTkeepOpInfo) { /* Dump operating point. */ error = SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob, "AC Operating Point", NULL, IF_REAL, numNames, nameList, IF_REAL, &plot); if(error) return(error); CKTdump(ckt, 0.0, plot); SPfrontEnd->OUTendPlot (plot); plot = NULL; } SPfrontEnd->IFnewUid (ckt, &freqUid, NULL, "frequency", UID_OTHER, NULL); error = SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob, ckt->CKTcurJob->JOBname, freqUid, IF_REAL, numNames, nameList, IF_COMPLEX, &acPlot); tfree(nameList); if(error) return(error); if (job->ACstepType != LINEAR) { SPfrontEnd->OUTattributes (acPlot, NULL, OUT_SCALE_LOG, NULL); } freq = job->ACstartFreq; } else { /* continue previous analysis */ freq = job->ACsaveFreq; job->ACsaveFreq = 0; /* clear the 'old' frequency */ /* fix resume? saj, indeed !*/ error = SPfrontEnd->OUTpBeginPlot (NULL, NULL, NULL, NULL, 0, 666, NULL, 666, &acPlot); /* saj*/ } switch (job->ACstepType) { case DECADE: case OCTAVE: freqTol = job->ACfreqDelta * job->ACstopFreq * ckt->CKTreltol; break; case LINEAR: freqTol = job->ACfreqDelta * ckt->CKTreltol; break; default: return(E_BADPARM); } #ifdef XSPICE /* gtri - add - wbk - 12/19/90 - Set anal_init and anal_type */ g_mif_info.circuit.anal_init = MIF_TRUE; /* Tell the code models what mode we're in */ g_mif_info.circuit.anal_type = MIF_AC; /* gtri - end - wbk */ #endif INIT_STATS(); ckt->CKTcurrentAnalysis = DOING_AC; /* main loop through all scheduled frequencies */ while (freq <= job->ACstopFreq + freqTol) { if(SPfrontEnd->IFpauseTest()) { /* user asked us to pause via an interrupt */ job->ACsaveFreq = freq; return(E_PAUSE); } ckt->CKTomega = 2.0 * M_PI *freq; /* Update opertating point, if variable 'hertz' is given */ if (ckt->CKTvarHertz) { #ifdef XSPICE /* Call EVTop if event-driven instances exist */ if(ckt->evt->counts.num_insts != 0) { error = EVTop(ckt, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITJCT, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITFLOAT, ckt->CKTdcMaxIter, MIF_TRUE); EVTdump(ckt, IPC_ANAL_DCOP, 0.0); EVTop_save(ckt, MIF_TRUE, 0.0); } else #endif // If no event-driven instances, do what SPICE normally does error = CKTop(ckt, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITJCT, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITFLOAT, ckt->CKTdcMaxIter); if(error){ fprintf(stdout,"\nAC operating point failed -\n"); CKTncDump(ckt); return(error); } ckt->CKTmode = (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITSMSIG; error = CKTload(ckt); if(error) return(error); } ckt->CKTmode = (ckt->CKTmode&MODEUIC) | MODEAC; error = NIacIter(ckt); if (error) { UPDATE_STATS(DOING_AC); return(error); } #ifdef WANT_SENSE2 if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode&ACSEN) ){ long save; int save1; save = ckt->CKTmode; ckt->CKTmode=(ckt->CKTmode&MODEUIC)|MODEDCOP|MODEINITSMSIG; save1 = ckt->CKTsenInfo->SENmode; ckt->CKTsenInfo->SENmode = ACSEN; if (freq == job->ACstartFreq) { ckt->CKTsenInfo->SENacpertflag = 1; } else{ ckt->CKTsenInfo->SENacpertflag = 0; } error = CKTsenAC(ckt); if (error) return (error); ckt->CKTmode = save; ckt->CKTsenInfo->SENmode = save1; } #endif #ifdef XSPICE /* gtri - modify - wbk - 12/19/90 - Send IPC stuff */ if(g_ipc.enabled) ipc_send_data_prefix(freq); error = CKTacDump(ckt,freq,acPlot); if(g_ipc.enabled) ipc_send_data_suffix(); /* gtri - modify - wbk - 12/19/90 - Send IPC stuff */ #else error = CKTacDump(ckt,freq,acPlot); #endif if (error) { UPDATE_STATS(DOING_AC); return(error); } /* increment frequency */ switch (job->ACstepType) { case DECADE: case OCTAVE: /* inserted again 14.12.2001 */ #ifdef HAS_PROGREP { double endfreq = job->ACstopFreq; double startfreq = job->ACstartFreq; endfreq = log(endfreq); if (startfreq == 0.0) startfreq = 1e-12; startfreq = log(startfreq); if (freq > 0.0) SetAnalyse( "ac", (int)((log(freq)-startfreq) * 1000.0 / (endfreq-startfreq))); } #endif freq *= job->ACfreqDelta; if (job->ACfreqDelta == 1) goto endsweep; break; case LINEAR: #ifdef HAS_PROGREP { double endfreq = job->ACstopFreq; double startfreq = job->ACstartFreq; SetAnalyse( "ac", (int)((freq - startfreq)* 1000.0 / (endfreq-startfreq))); } #endif freq += job->ACfreqDelta; if (job->ACfreqDelta == 0) goto endsweep; break; default: return(E_INTERN); } } endsweep: SPfrontEnd->OUTendPlot (acPlot); acPlot = NULL; UPDATE_STATS(0); return(0); } /* CKTacLoad(ckt) * this is a driver program to iterate through all the various * ac load functions provided for the circuit elements in the * given circuit */ int CKTacLoad(CKTcircuit *ckt) { int i; int size; int error; double startTime; startTime = SPfrontEnd->IFseconds(); size = SMPmatSize(ckt->CKTmatrix); for (i=0;i<=size;i++) { ckt->CKTrhs[i]=0; ckt->CKTirhs[i]=0; } SMPcClear(ckt->CKTmatrix); for (i=0;iDEVacLoad && ckt->CKThead[i] ) { error = DEVices[i]->DEVacLoad (ckt->CKThead[i], ckt); if(error) return(error); } } #ifdef XSPICE /* gtri - begin - Put resistors to ground at all nodes. */ /* Value of resistor is set by new "rshunt" option. */ if(ckt->enh->rshunt_data.enabled) { for(i = 0; i < ckt->enh->rshunt_data.num_nodes; i++) { *(ckt->enh->rshunt_data.diag[i]) += ckt->enh->rshunt_data.gshunt; } } /* gtri - end - Put resistors to ground at all nodes */ /* gtri - add - wbk - 11/26/90 - reset the MIF init flags */ /* init is set by CKTinit and should be true only for first load call */ g_mif_info.circuit.init = MIF_FALSE; /* anal_init is set by CKTdoJob and is true for first call */ /* of a particular analysis type */ g_mif_info.circuit.anal_init = MIF_FALSE; /* gtri - end - wbk - 11/26/90 */ #endif ckt->CKTstat->STATloadTime += SPfrontEnd->IFseconds() - startTime; return(OK); } tmpk8ny_4pz/src/spicelib/analysis/cktftask.c0000644000175000017500000000101513546075722021337 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* CKTfndTask * find the specified task - not yet supported in spice */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" /* ARGSUSED */ int CKTfndTask(CKTcircuit *ckt, TSKtask **taskPtr, IFuid taskName) { NG_IGNORE(ckt); NG_IGNORE(taskPtr); NG_IGNORE(taskName); return(E_UNSUPP); } tmpk8ny_4pz/src/spicelib/analysis/ninteg.c0000644000175000017500000000255413546075722021022 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Gary W. Ng **********/ /* * Nintegrate.c (noizDens, lnNdens, lnNlstDens, data) * * This subroutine evaluates the integral of the function * * EXPONENT * NOISE = a * (FREQUENCY) * * given two points from the curve. If EXPONENT is relatively close * to 0, the noise is simply multiplied by the change in frequency. * If it isn't, a more complicated expression must be used. Note that * EXPONENT = -1 gives a different equation than EXPONENT <> -1. * Hence, the reason for the constant 'N_INTUSELOG'. */ #include "ngspice/ngspice.h" #include "ngspice/noisedef.h" #define limexp(x) (x > 700 ? exp(700.0)*(1.0+x-700.0) : exp(x)) double Nintegrate (double noizDens, double lnNdens, double lnNlstDens, Ndata *data) { double exponent; double a; exponent = (lnNdens - lnNlstDens) / data->delLnFreq; if ( fabs(exponent) < N_INTFTHRESH ) { return (noizDens * data->delFreq); } else { a = limexp(lnNdens - exponent*data->lnFreq); exponent += 1.0; if (fabs(exponent) < N_INTUSELOG) { return (a * (data->lnFreq - data->lnLastFreq)); } else { return (a * ((exp(exponent * data->lnFreq) - exp(exponent * data->lnLastFreq)) / exponent)); } } } tmpk8ny_4pz/src/spicelib/analysis/cktpname.c0000644000175000017500000000145513546075722021337 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* * CKTpName() * * Take a parameter by Name and set it on the specified device */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/devdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/sperror.h" int CKTpName(char *parm, IFvalue *val, CKTcircuit *ckt, int dev, char *name, GENinstance **fast) { IFdevice *device = &(DEVices[dev]->DEVpublic); IFparm *p = device->instanceParms; IFparm *p_end = p + *(device->numInstanceParms); NG_IGNORE(name); for (; p < p_end; p++) if (!strcmp(parm, p->keyword)) return CKTparam(ckt, *fast, p->id, val, NULL); return E_BADPARM; } tmpk8ny_4pz/src/spicelib/analysis/ckti2nod.c0000644000175000017500000000213113546075722021242 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/devdefs.h" /* CKTinst2Node * get the name and node pointer for a node given a device it is * bound to and the terminal of the device. */ int CKTinst2Node(CKTcircuit *ckt, void *instPtr, int terminal, CKTnode **node, IFuid *nodeName) { GENinstance *inst = (GENinstance *) instPtr; int type = inst->GENmodPtr->GENmodType; CKTnode *here; if (*(DEVices[type]->DEVpublic.terms) >= terminal && terminal > 0) { /* argh, terminals are counted from 1 */ int nodenum = GENnode(inst)[terminal - 1]; for (here = ckt->CKTnodes; here; here = here->next) if (here->number == nodenum) { *node = here; *nodeName = here->name; return OK; } return E_NOTFOUND; } else { return E_NOTERM; } } tmpk8ny_4pz/src/spicelib/analysis/cktacdum.c0000644000175000017500000000177613546075722021336 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* CKTacDump(ckt,freq,file) * this is a simple program to dump the complex rhs vector * into the rawfile. */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/ifsim.h" int CKTacDump(CKTcircuit *ckt, double freq, runDesc *plot) { double *rhsold; double *irhsold; int i; IFcomplex *data; IFvalue freqData; IFvalue valueData; rhsold = ckt->CKTrhsOld; irhsold = ckt->CKTirhsOld; freqData.rValue = freq; valueData.v.numValue = ckt->CKTmaxEqNum-1; data = TMALLOC(IFcomplex, ckt->CKTmaxEqNum - 1); valueData.v.vec.cVec = data; for (i=0;iCKTmaxEqNum-1;i++) { data[i].real = rhsold[i+1]; data[i].imag = irhsold[i+1]; } SPfrontEnd->OUTpData (plot, &freqData, &valueData); FREE(data); return(OK); } tmpk8ny_4pz/src/spicelib/analysis/nsetparm.c0000644000175000017500000000474413546075722021372 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Gary W. Ng **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "analysis.h" int NsetParm(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value) { NOISEAN *job = (NOISEAN *) anal; NG_IGNORE(ckt); switch(which) { case N_OUTPUT: job->output = value->nValue; break; case N_OUTREF: job->outputRef = value->nValue; break; case N_INPUT: job->input = value->uValue; break; case N_DEC: job->NstpType = DECADE; break; case N_OCT: job->NstpType = OCTAVE; break; case N_LIN: job->NstpType = LINEAR; break; case N_STEPS: job->NnumSteps = value->iValue; break; case N_START: if (value->rValue <= 0.0) { errMsg = copy("Frequency of 0 is invalid"); job->NstartFreq = 1.0; return(E_PARMVAL); } job->NstartFreq = value->rValue; break; case N_STOP: if (value->rValue <= 0.0) { errMsg = copy("Frequency of 0 is invalid"); job->NstartFreq = 1.0; return(E_PARMVAL); } job->NstopFreq = value->rValue; break; case N_PTSPERSUM: job->NStpsSm = value->iValue; break; default: return(E_BADPARM); } return(OK); } static IFparm Nparms[] = { { "output", N_OUTPUT, IF_SET|IF_STRING, "output noise summation node" }, { "outputref", N_OUTREF, IF_SET|IF_STRING, "output noise reference node" }, { "input", N_INPUT, IF_SET|IF_STRING, "input noise source" }, { "dec", N_DEC, IF_SET|IF_FLAG, "step by decades" }, { "oct", N_OCT, IF_SET|IF_FLAG, "step by octaves" }, { "lin", N_LIN, IF_SET|IF_FLAG, "step linearly" }, { "numsteps", N_STEPS, IF_SET|IF_INTEGER, "number of frequencies" }, { "start", N_START, IF_SET|IF_REAL, "starting frequency" }, { "stop", N_STOP, IF_SET|IF_REAL, "ending frequency" }, { "ptspersum", N_PTSPERSUM, IF_SET|IF_INTEGER, "frequency points per summary report" } }; SPICEanalysis NOISEinfo = { { "NOISE", "Noise analysis", NUMELEMS(Nparms), Nparms }, sizeof(NOISEAN), FREQUENCYDOMAIN, 1, NsetParm, NaskQuest, NULL, NOISEan }; tmpk8ny_4pz/src/spicelib/analysis/psssetp.c0000644000175000017500000000413013546075722021227 0ustar carstencarsten/********** Author: 2010-05 Stefano Perticaroli ``spertica'' **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/cktdefs.h" #include "ngspice/pssdefs.h" #include "analysis.h" /* ARGSUSED */ int PSSsetParm(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value) { PSSan *job = (PSSan *) anal; NG_IGNORE(ckt); switch(which) { case GUESSED_FREQ: job->PSSguessedFreq = value->rValue; break; case OSC_NODE: job->PSSoscNode = value->nValue; break; case STAB_TIME: job->PSSstabTime = value->rValue; break; case PSS_POINTS: job->PSSpoints = value->iValue; break; case PSS_HARMS: job->PSSharms = value->iValue; break; case PSS_UIC: if(value->iValue) { job->PSSmode |= MODEUIC; } break; case SC_ITER: job->sc_iter = value->iValue; break; case STEADY_COEFF: job->steady_coeff = value->rValue; break; default: return(E_BADPARM); } return(OK); } static IFparm PSSparms[] = { { "fguess", GUESSED_FREQ, IF_SET|IF_REAL, "guessed frequency" }, { "oscnode", OSC_NODE, IF_SET|IF_STRING, "oscillation node" }, { "stabtime", STAB_TIME, IF_SET|IF_REAL, "stabilization time" }, { "points", PSS_POINTS, IF_SET|IF_INTEGER, "pick equispaced number of time points in PSS" }, { "harmonics", PSS_HARMS, IF_SET|IF_INTEGER, "consider only given number of harmonics in PSS from DC" }, { "uic", PSS_UIC, IF_SET|IF_INTEGER, "use initial conditions (1 true - 0 false)" }, { "sc_iter", SC_ITER, IF_SET|IF_INTEGER, "maxmimum number of shooting cycle iterations" }, { "steady_coeff", STEADY_COEFF, IF_SET|IF_INTEGER, "set steady coefficient for convergence test" } }; SPICEanalysis PSSinfo = { { "PSS", "Periodic Steady State analysis", sizeof(PSSparms)/sizeof(IFparm), PSSparms }, sizeof(PSSan), TIMEDOMAIN, 1, PSSsetParm, PSSaskQuest, PSSinit, DCpss }; tmpk8ny_4pz/src/spicelib/analysis/cktpzstr.c0000644000175000017500000006466213546075722021432 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ /* * A variant on the "zeroin" method. This is a bit convoluted. */ #include "ngspice/ngspice.h" #include "ngspice/pzdefs.h" #include "ngspice/complex.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #ifdef PZDEBUG # ifndef notdef # define DEBUG(N) if (Debug >= (unsigned) (N)) static unsigned int Debug = 3; # else # define DEBUG(N) if (0) # endif #endif /* static function definitions */ static int CKTpzStrat(PZtrial **set); static int CKTpzStep(int strat, PZtrial **set); static int CKTpzRunTrial(CKTcircuit *ckt, PZtrial **new_trialp, PZtrial **set); static int CKTpzVerify(PZtrial **set, PZtrial *new_trial); static void clear_trials(int mode); static void check_flat(PZtrial *a, PZtrial *b); void CKTpzUpdateSet(PZtrial **set, PZtrial *new); void zaddeq(double *a, int *amag, double x, int xmag, double y, int ymag); void CKTpzReset(PZtrial **set); #ifdef PZDEBUG static void show_trial(PZtrial *new_trial, char x); #endif #define NITER_LIM 200 #define SHIFT_LEFT 2 #define SHIFT_RIGHT 3 #define SKIP_LEFT 4 #define SKIP_RIGHT 5 #define INIT 6 #define GUESS 7 #define SPLIT_LEFT 8 #define SPLIT_RIGHT 9 #define MULLER 10 #define SYM 11 #define SYM2 12 #define COMPLEX_INIT 13 #define COMPLEX_GUESS 14 #define QUIT 15 #define NEAR_LEFT 4 #define MID_LEFT 5 #define FAR_LEFT 6 #define NEAR_RIGHT 7 #define FAR_RIGHT 8 #define MID_RIGHT 9 #ifdef PZDEBUG static char *snames[ ] = { "none", "none", "shift left", "shift right", "skip left", "skip right", "init", "guess", "split left", "split right", "Muller", "sym 1", "sym 2", "complex_init", "complex_guess", "quit", "none" }; #endif #define sgn(X) ((X) < 0 ? -1 : (X) == 0 ? 0 : 1) #define ISAROOT 2 #define ISAREPEAT 4 #define ISANABERRATION 8 #define ISAMINIMA 16 extern double NIpzK; extern int NIpzK_mag; int CKTpzTrapped; static int NZeros, NFlat, Max_Zeros; static PZtrial *ZeroTrial, *Trials; static int Seq_Num; static double Guess_Param; static double High_Guess, Low_Guess; static int Last_Move, Consec_Moves; static int NIter, NTrials; static int Aberr_Num; int PZeval(int strat, PZtrial **set, PZtrial **new_trial_p); static PZtrial *pzseek(PZtrial *t, int dir); static int alter(PZtrial *new, PZtrial *nearto, double abstol, double reltol); int CKTpzFindZeros(CKTcircuit *ckt, PZtrial **rootinfo, int *rootcount) { PZtrial *new_trial; PZtrial *neighborhood[3]; int strat; int error; NIpzK = 0.0; NIpzK_mag = 0; High_Guess = -1.0; Low_Guess = 1.0; ZeroTrial = NULL; Trials = NULL; NZeros = 0; NFlat = 0; Max_Zeros = SMPmatSize(ckt->CKTmatrix); NIter = 0; error = OK; CKTpzTrapped = 0; Aberr_Num = 0; NTrials = 0; ckt->CKTniState |= NIPZSHOULDREORDER; /* Initial for LU fill-ins */ Seq_Num = 1; CKTpzReset(neighborhood); do { while ((strat = CKTpzStrat(neighborhood)) < GUESS && !CKTpzTrapped) if (!CKTpzStep(strat, neighborhood)) { strat = GUESS; #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "\t\tGuess\n"); #endif break; } NIter += 1; /* Evaluate current strategy */ error = PZeval(strat, neighborhood, &new_trial); if (error != OK) return error; error = CKTpzRunTrial(ckt, &new_trial, neighborhood); if (error != OK) return error; if (new_trial->flags & ISAROOT) { if (CKTpzVerify(neighborhood, new_trial)) { NIter = 0; CKTpzReset(neighborhood); } else /* XXX Verify fails ?!? */ CKTpzUpdateSet(neighborhood, new_trial); } else if (new_trial->flags & ISANABERRATION) { CKTpzReset(neighborhood); Aberr_Num += 1; tfree(new_trial); } else if (new_trial->flags & ISAMINIMA) { neighborhood[0] = NULL; neighborhood[1] = new_trial; neighborhood[2] = NULL; } else { CKTpzUpdateSet(neighborhood, new_trial); /* Replace a value */ } if (SPfrontEnd->IFpauseTest()) { SPfrontEnd->IFerrorf (ERR_WARNING, "Pole-Zero analysis interrupted; %d trials, %d roots\n", Seq_Num, NZeros); error = E_PAUSE; break; } } while (High_Guess - Low_Guess < 1e40 && NZeros < Max_Zeros && NIter < NITER_LIM && Aberr_Num < 3 && High_Guess - Low_Guess < 1e35 /* XXX Should use mach const */ && (!neighborhood[0] || !neighborhood[2] || CKTpzTrapped || neighborhood[2]->s.real - neighborhood[0]->s.real < 1e22)); /* XXX ZZZ */ #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "Finished: NFlat %d, NZeros: %d, NTrials %d, Guess %g to %g, aber %d\n", NFlat, NZeros, NTrials, Low_Guess, High_Guess, Aberr_Num); #endif if (NZeros >= Seq_Num - 1) { /* Short */ clear_trials(ISAROOT); *rootinfo = NULL; *rootcount = 0; MERROR(E_SHORT, "The input signal is shorted on the way to the output"); } else clear_trials(0); *rootinfo = Trials; *rootcount = NZeros; if (Aberr_Num > 2) { SPfrontEnd->IFerrorf (ERR_WARNING, "Pole-zero converging to numerical aberrations; giving up after %d trials", Seq_Num); } if (NIter >= NITER_LIM) { SPfrontEnd->IFerrorf (ERR_WARNING, "Pole-zero iteration limit reached; giving up after %d trials", Seq_Num); } return error; } /* PZeval: evaluate an estimation function (given by 'strat') for the next guess (returned in a PZtrial) */ /* XXX ZZZ */ int PZeval(int strat, PZtrial **set, PZtrial **new_trial_p) { int error; PZtrial *new_trial; new_trial = TMALLOC(PZtrial, 1); new_trial->multiplicity = 0; new_trial->count = 0; new_trial->seq_num = Seq_Num++; switch (strat) { case GUESS: if (High_Guess < Low_Guess) Guess_Param = 0.0; else if (Guess_Param > 0.0) { if (High_Guess > 0.0) Guess_Param = High_Guess * 10.0; else Guess_Param = 1.0; } else { if (Low_Guess < 0.0) Guess_Param = Low_Guess * 10.0; else Guess_Param = -1.0; } if (High_Guess < Guess_Param) High_Guess = Guess_Param; if (Low_Guess > Guess_Param) Low_Guess = Guess_Param; new_trial->s.real = Guess_Param; if (set[1]) new_trial->s.imag = set[1]->s.imag; else new_trial->s.imag = 0.0; error = OK; break; case SYM: case SYM2: error = NIpzSym(set, new_trial); if (CKTpzTrapped == 1) { if (new_trial->s.real < set[0]->s.real || new_trial->s.real > set[1]->s.real) { #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "FIXED UP BAD Strat: %s (%d) was (%.15g,%.15g)\n", snames[strat], CKTpzTrapped, new_trial->s.real, new_trial->s.imag); #endif new_trial->s.real = (set[0]->s.real + set[1]->s.real) / 2.0; } } else if (CKTpzTrapped == 2) { if (new_trial->s.real < set[1]->s.real || new_trial->s.real > set[2]->s.real) { #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "FIXED UP BAD Strat: %s (%d) was (%.15g,%.15g)\n", snames[strat], CKTpzTrapped, new_trial->s.real, new_trial->s.imag); #endif new_trial->s.real = (set[1]->s.real + set[2]->s.real) / 2.0; } } else if (CKTpzTrapped == 3) { if (new_trial->s.real <= set[0]->s.real || (new_trial->s.real == set[1]->s.real && new_trial->s.imag == set[1]->s.imag) || new_trial->s.real >= set[2]->s.real) { #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "FIXED UP BAD Strat: %s (%d), was (%.15g %.15g)\n", snames[strat], CKTpzTrapped, new_trial->s.real, new_trial->s.imag); #endif new_trial->s.real = (set[0]->s.real + set[2]->s.real) / 2.0; if (new_trial->s.real == set[1]->s.real) { #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "Still off!"); #endif if (Last_Move == MID_LEFT || Last_Move == NEAR_RIGHT) new_trial->s.real = (set[0]->s.real + set[1]->s.real) / 2.0; else new_trial->s.real = (set[1]->s.real + set[2]->s.real) / 2.0; } } } break; case COMPLEX_INIT: /* Not automatic */ #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "\tPZ minima at: %-30g %d\n", NIpzK, NIpzK_mag); #endif new_trial->s.real = set[1]->s.real; /* NIpzK is a good idea, but the value gets trashed * due to the numerics when zooming in on a minima. * The key is to know when to stop taking new values for NIpzK * (which I don't). For now I take the first value indicated * by the NIpzSym2 routine. A "hack". */ if (NIpzK != 0.0 && NIpzK_mag > -10) { while (NIpzK_mag > 0) { NIpzK *= 2.0; NIpzK_mag -= 1; } while (NIpzK_mag < 0) { NIpzK /= 2.0; NIpzK_mag += 1; } new_trial->s.imag = NIpzK; } else new_trial->s.imag = 10000.0; /* * Reset NIpzK so the same value doesn't get used again. */ NIpzK = 0.0; NIpzK_mag = 0; error = OK; break; case COMPLEX_GUESS: if (!set[2]) { new_trial->s.real = set[0]->s.real; new_trial->s.imag = 1.0e8; } else { new_trial->s.real = set[0]->s.real; new_trial->s.imag = 1.0e12; } error = OK; break; case MULLER: error = NIpzMuller(set, new_trial); break; case SPLIT_LEFT: new_trial->s.real = (set[0]->s.real + 2 * set[1]->s.real) / 3.0; error = OK; break; case SPLIT_RIGHT: new_trial->s.real = (set[2]->s.real + 2 * set[1]->s.real) / 3.0; error = OK; break; default: MERROR(E_PANIC, "Step type unknown"); break; } *new_trial_p = new_trial; return error; } /* CKTpzStrat: given three points, determine a good direction or method for guessing the next zero */ /* XXX ZZZ what is a strategy for complex hunting? */ int CKTpzStrat(PZtrial **set) { int suggestion; double a, b; int a_mag, b_mag; double k1, k2; int new_trap; new_trap = 0; if (set[1] && (set[1]->flags & ISAMINIMA)) { suggestion = COMPLEX_INIT; } else if (set[0] && set[0]->s.imag != 0.0) { if (!set[1] || !set[2]) suggestion = COMPLEX_GUESS; else suggestion = MULLER; } else if (!set[0] || !set[1] || !set[2]) { suggestion = INIT; } else { if (sgn(set[0]->f_def.real) != sgn(set[1]->f_def.real)) { /* Zero crossing between s[0] and s[1] */ new_trap = 1; suggestion = SYM2; } else if (sgn(set[1]->f_def.real) != sgn(set[2]->f_def.real)) { /* Zero crossing between s[1] and s[2] */ new_trap = 2; suggestion = SYM2; } else { zaddeq(&a, &a_mag, set[1]->f_def.real, set[1]->mag_def, -set[0]->f_def.real, set[0]->mag_def); zaddeq(&b, &b_mag, set[2]->f_def.real, set[2]->mag_def, -set[1]->f_def.real, set[1]->mag_def); if (!CKTpzTrapped) { k1 = set[1]->s.real - set[0]->s.real; k2 = set[2]->s.real - set[1]->s.real; if (a_mag + 10 < set[0]->mag_def && a_mag + 10 < set[1]->mag_def && b_mag + 10 < set[1]->mag_def && b_mag + 10 < set[2]->mag_def) { if (k1 > k2) suggestion = SKIP_RIGHT; else suggestion = SKIP_LEFT; } else if (sgn(a) != -sgn(b)) { if (a == 0.0) suggestion = SKIP_LEFT; else if (b == 0.0) suggestion = SKIP_RIGHT; else if (sgn(a) == sgn(set[1]->f_def.real)) suggestion = SHIFT_LEFT; else suggestion = SHIFT_RIGHT; } else if (sgn(a) == -sgn(set[1]->f_def.real)) { new_trap = 3; /* minima in magnitude above the x axis */ /* Search for exact mag. minima, look for complex pair */ suggestion = SYM; } else if (k1 > k2) suggestion = SKIP_RIGHT; else suggestion = SKIP_LEFT; } else { new_trap = 3; /* still */ /* XXX ? Are these tests needed or is SYM safe all the time? */ if (sgn(a) != sgn(b)) { /* minima in magnitude */ /* Search for exact mag. minima, look for complex pair */ suggestion = SYM; } else if (a_mag > b_mag || (a_mag == b_mag && fabs(a) > fabs(b))) suggestion = SPLIT_LEFT; else suggestion = SPLIT_RIGHT; } } if (Consec_Moves >= 3 && CKTpzTrapped == new_trap) { new_trap = CKTpzTrapped; if (Last_Move == MID_LEFT || Last_Move == NEAR_RIGHT) suggestion = SPLIT_LEFT; else if (Last_Move == MID_RIGHT || Last_Move == NEAR_LEFT) suggestion = SPLIT_RIGHT; else abort( ); /* XXX */ Consec_Moves = 0; } } CKTpzTrapped = new_trap; #ifdef PZDEBUG DEBUG(1) { if (set[0] && set[1] && set[2]) fprintf(stderr, "given %.15g %.15g / %.15g %.15g / %.15g %.15g\n", set[0]->s.real, set[0]->s.imag, set[1]->s.real, set[1]->s.imag, set[2]->s.real, set[2]->s.imag); fprintf(stderr, "suggestion(%d/%d/%d | %d): %s\n", NFlat, NZeros, Max_Zeros, CKTpzTrapped, snames[suggestion]); } #endif return suggestion; } /* CKTpzRunTrial: eval the function at a given 's', fold in deflation */ int CKTpzRunTrial(CKTcircuit *ckt, PZtrial **new_trialp, PZtrial **set) { PZAN *job = (PZAN *) ckt->CKTcurJob; PZtrial *match, *new_trial; PZtrial *p, *prev; SPcomplex def_frac, diff_frac; double reltol, abstol; int def_mag, diff_mag, error = 0; int i; int pretest, shifted, was_shifted; int repeat; new_trial = *new_trialp; if (new_trial->s.imag < 0.0) new_trial->s.imag *= -1.0; /* Insert the trial into the list of Trials, while calculating the deflation factor from previous zeros */ pretest = 0; shifted = 0; repeat = 0; do { def_mag = 0; def_frac.real = 1.0; def_frac.imag = 0.0; was_shifted = shifted; shifted = 0; prev = NULL; match = NULL; for (p = Trials; p != NULL; p = p->next) { C_SUBEQ(diff_frac,p->s,new_trial->s); if (diff_frac.real < 0.0 || (diff_frac.real == 0.0 && diff_frac.imag < 0.0)) { prev = p; } if (p->flags & ISAROOT) { abstol = 1e-5; reltol = 1e-6; } else { abstol = 1e-20; reltol = 1e-12; } if (diff_frac.imag == 0.0 && fabs(diff_frac.real) / (fabs(p->s.real) + abstol/reltol) < reltol) { #ifdef PZDEBUG DEBUG(1) { fprintf(stderr, "diff_frac.real = %10g, p->s = %10g, nt = %10g\n", diff_frac.real, p->s.real, new_trial->s.real); fprintf(stderr, "ab=%g,rel=%g\n", abstol, reltol); } #endif if (was_shifted || p->count >= 3 || !alter(new_trial, set[1], abstol, reltol)) { /* assume either a root or minima */ p->count = 0; pretest = 1; break; } else p->count += 1; /* try to shift */ shifted = 1; /* Re-calculate deflation */ break; } else { if (!CKTpzTrapped) p->count = 0; if (p->flags & ISAROOT) { diff_mag = 0; C_NORM(diff_frac,diff_mag); if (diff_frac.imag != 0.0) { C_MAG2(diff_frac); diff_mag *= 2; } C_NORM(diff_frac,diff_mag); for (i = p->multiplicity; i > 0; i--) { C_MUL(def_frac,diff_frac); def_mag += diff_mag; C_NORM(def_frac,def_mag); } } else if (!match) match = p; } } } while (shifted); if (pretest) { #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "Pre-test taken\n"); /* XXX Should catch the double-zero right off * if K is 0.0 * instead of forcing a re-converge */ DEBUG(1) { fprintf(stderr, "NIpzK == %g, mag = %d\n", NIpzK, NIpzK_mag); fprintf(stderr, "over at %.30g %.30g (new %.30g %.30g, %x)\n", p->s.real, p->s.imag, new_trial->s.real, new_trial->s.imag, p->flags); } #endif if (!(p->flags & ISAROOT) && CKTpzTrapped == 3 && NIpzK != 0.0 && NIpzK_mag > -10) { #ifdef notdef // if (p->flags & ISAROOT) { // /* Ugh! muller doesn't work right */ // new_trial->flags = ISAMINIMA; // new_trial->s.imag = scalb(NIpzK, (int) (NIpzK_mag / 2)); // pretest = 0; // } else { #endif p->flags |= ISAMINIMA; tfree(new_trial); *new_trialp = p; repeat = 1; } else if (p->flags & ISAROOT) { #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "Repeat at %.30g %.30g\n", p->s.real, p->s.imag); #endif *new_trialp = p; p->flags |= ISAREPEAT; p->multiplicity += 1; repeat = 1; } else { /* Regular zero, as precise as we can get it */ error = E_SINGULAR; } } if (!repeat) { if (!pretest) { /* Run the trial */ ckt->CKTniState |= NIPZSHOULDREORDER; /* XXX */ if (!(ckt->CKTniState & NIPZSHOULDREORDER)) { CKTpzLoad(ckt, &new_trial->s); #ifdef PZDEBUG DEBUG(3) { printf("Original:\n"); SMPprint(ckt->CKTmatrix, stdout); } #endif error = SMPcLUfac(ckt->CKTmatrix, ckt->CKTpivotAbsTol); if (error == E_SINGULAR) { #ifdef PZDEBUG DEBUG(1) printf("Needs reordering\n"); #endif ckt->CKTniState |= NIPZSHOULDREORDER; } else if (error != OK) return error; } if (ckt->CKTniState & NIPZSHOULDREORDER) { CKTpzLoad(ckt, &new_trial->s); error = SMPcReorder(ckt->CKTmatrix, 1.0e-30, 0.0 /* 0.1 Piv. Rel. */, &(job->PZnumswaps)); } if (error != E_SINGULAR) { ckt->CKTniState &= ~NIPZSHOULDREORDER; #ifdef PZDEBUG DEBUG(3) { printf("Factored:\n"); SMPprint(ckt->CKTmatrix, NULL); } #endif error = SMPcDProd(ckt->CKTmatrix, &new_trial->f_raw, &new_trial->mag_raw); } } if (error == E_SINGULAR || (new_trial->f_raw.real == 0.0 && new_trial->f_raw.imag == 0.0)) { new_trial->f_raw.real = 0.0; new_trial->f_raw.imag = 0.0; new_trial->mag_raw = 0; new_trial->f_def.real = 0.0; new_trial->f_def.imag = 0.0; new_trial->mag_def = 0; new_trial->flags = ISAROOT; /*printf("SMP Det: Singular\n");*/ } else if (error != OK) return error; else { /* PZnumswaps is either 0 or 1 */ new_trial->f_raw.real *= job->PZnumswaps; new_trial->f_raw.imag *= job->PZnumswaps; #ifdef PZDEBUG printf("SMP Det: (%g,%g)^%d\n", new_trial->f_raw.real, new_trial->f_raw.imag, new_trial->mag_raw); #endif new_trial->f_def.real = new_trial->f_raw.real; new_trial->f_def.imag = new_trial->f_raw.imag; new_trial->mag_def = new_trial->mag_raw; C_DIV(new_trial->f_def,def_frac); new_trial->mag_def -= def_mag; C_NORM(new_trial->f_def,new_trial->mag_def); } /* Link into the rest of the list */ if (prev) { new_trial->next = prev->next; if (prev->next) prev->next->prev = new_trial; prev->next = new_trial; } else { if (Trials) Trials->prev = new_trial; else ZeroTrial = new_trial; new_trial->next = Trials; Trials = new_trial; } new_trial->prev = prev; NTrials += 1; if (!(new_trial->flags & ISAROOT)) { if (match) check_flat(match, new_trial); else NFlat = 1; } } #ifdef PZDEBUG show_trial(new_trial, '*'); #endif return OK; } /* Process a zero; inc. zero count, deflate other trials */ int CKTpzVerify(PZtrial **set, PZtrial *new_trial) { PZtrial *next; int diff_mag; SPcomplex diff_frac; double tdiff; PZtrial *t, *prev; NG_IGNORE(set); NZeros += 1; if (new_trial->s.imag != 0.0) NZeros += 1; NFlat = 0; if (new_trial->multiplicity == 0) { new_trial->flags |= ISAROOT; new_trial->multiplicity = 1; } prev = NULL; for (t = Trials; t; t = next) { next = t->next; if (t->flags & ISAROOT) { prev = t; /* Don't need to bother */ continue; } C_SUBEQ(diff_frac,new_trial->s,t->s); if (new_trial->s.imag != 0.0) C_MAG2(diff_frac); tdiff = diff_frac.real; /* Note that Verify is called for each time the root is found, so * multiplicity is not significant */ if (diff_frac.real != 0.0) { diff_mag = 0; C_NORM(diff_frac,diff_mag); diff_mag *= -1; C_DIV(t->f_def,diff_frac); C_NORM(t->f_def,diff_mag); t->mag_def += diff_mag; } if (t->s.imag != 0.0 || fabs(tdiff) / (fabs(new_trial->s.real) + 200) < 0.005) { if (prev) prev->next = t->next; if (t->next) t->next->prev = prev; NTrials -= 1; #ifdef PZDEBUG show_trial(t, '-'); #endif if (t == ZeroTrial) { if (t->next) ZeroTrial = t->next; else if (t->prev) ZeroTrial = t->prev; else ZeroTrial = NULL; } if (t == Trials) { Trials = t->next; } tfree(t); } else { if (prev) check_flat(prev, t); else NFlat = 1; if (t->flags & ISAMINIMA) t->flags &= ~ISAMINIMA; prev = t; #ifdef PZDEBUG show_trial(t, '+'); #endif } } return 1; /* always ok */ } /* pzseek: search the trial list (given a starting point) for the first * non-zero entry; direction: -1 for prev, 1 for next, 0 for next * -or- first. Also, sets "Guess_Param" at the next reasonable * value to guess at if the search falls of the end of the list */ static PZtrial * pzseek(PZtrial *t, int dir) { Guess_Param = dir; if (t == NULL) return NULL; if (dir == 0 && !(t->flags & ISAROOT) && !(t->flags & ISAMINIMA)) return t; do { if (dir >= 0) t = t->next; else t = t->prev; } while (t && ((t->flags & ISAROOT) || (t->flags & ISAMINIMA))); return t; } static void clear_trials(int mode) { PZtrial *t, *next, *prev; prev = NULL; for (t = Trials; t; t = next) { next = t->next; if (mode || !(t->flags & ISAROOT)) { tfree(t); } else { if (prev) prev->next = t; else Trials = t; t->prev = prev; prev = t; } } if (prev) prev->next = NULL; else Trials = NULL; } void CKTpzUpdateSet(PZtrial **set, PZtrial *new) { int this_move; this_move = 0; if (new->s.imag != 0.0) { set[2] = set[1]; set[1] = set[0]; set[0] = new; } else if (!set[1]) set[1] = new; else if (!set[2] && new->s.real > set[1]->s.real) { set[2] = new; } else if (!set[0]) { set[0] = new; } else if (new->flags & ISAMINIMA) { set[1] = new; } else if (new->s.real < set[0]->s.real) { set[2] = set[1]; set[1] = set[0]; set[0] = new; this_move = FAR_LEFT; } else if (new->s.real < set[1]->s.real) { if (!CKTpzTrapped || new->mag_def < set[1]->mag_def || (new->mag_def == set[1]->mag_def && fabs(new->f_def.real) < fabs(set[1]->f_def.real))) { /* Really should check signs, not just compare fabs( ) */ set[2] = set[1]; /* XXX = set[2]->prev :: possible opt */ set[1] = new; this_move = MID_LEFT; } else { set[0] = new; this_move = NEAR_LEFT; } } else if (new->s.real < set[2]->s.real) { if (!CKTpzTrapped || new->mag_def < set[1]->mag_def || (new->mag_def == set[1]->mag_def && fabs(new->f_def.real) < fabs(set[1]->f_def.real))) { /* Really should check signs, not just compare fabs( ) */ set[0] = set[1]; set[1] = new; this_move = MID_RIGHT; } else { set[2] = new; this_move = NEAR_RIGHT; } } else { set[0] = set[1]; set[1] = set[2]; set[2] = new; this_move = FAR_RIGHT; } if (CKTpzTrapped && this_move == Last_Move) Consec_Moves += 1; else Consec_Moves = 0; Last_Move = this_move; } void zaddeq(double *a, int *amag, double x, int xmag, double y, int ymag) { /* Balance magnitudes . . . */ if (xmag > ymag) { *amag = xmag; if (xmag > 50 + ymag) y = 0.0; else for (xmag -= ymag; xmag > 0; xmag--) y /= 2.0; } else { *amag = ymag; if (ymag > 50 + xmag) x = 0.0; else for (ymag -= xmag; ymag > 0; ymag--) x /= 2.0; } *a = x + y; if (*a == 0.0) *amag = 0; else { while (fabs(*a) > 1.0) { *a /= 2.0; *amag += 1; } while (fabs(*a) < 0.5) { *a *= 2.0; *amag -= 1; } } } #ifdef PZDEBUG static void show_trial(PZtrial *new_trial, char x) { DEBUG(1) { if(new_trial) { fprintf(stderr, "%c (%3d/%3d) %.15g %.15g :: %.30g %.30g %d\n", x, NIter, new_trial->seq_num, new_trial->s.real, new_trial->s.imag, new_trial->f_def.real, new_trial->f_def.imag, new_trial->mag_def); if (new_trial->flags & ISANABERRATION) fprintf(stderr, "*** numerical aberration ***\n"); } else { fprintf(stderr, "%c (%3d/---) new_trial = nil\n", x, NIter); } } } #endif static void check_flat(PZtrial *a, PZtrial *b) { int diff_mag; SPcomplex diff_frac; double mult; diff_mag = a->mag_def - b->mag_def; if (abs(diff_mag) <= 1) { if (diff_mag == 1) mult = 2.0; else if (diff_mag == -1) mult = 0.5; else mult = 1.0; C_SUBEQ(diff_frac, mult * a->f_def, b->f_def); C_MAG2(diff_frac); if (diff_frac.real < 1.0e-20) NFlat += 1; } /* XXX else NFlat = ?????? */ } /* XXX ZZZ */ int CKTpzStep(int strat, PZtrial **set) { switch (strat) { case INIT: if (!set[1]) { set[1] = pzseek(ZeroTrial, 0); } else if (!set[2]) set[2] = pzseek(set[1], 1); else if (!set[0]) set[0] = pzseek(set[1], -1); break; case SKIP_LEFT: set[0] = pzseek(set[0], -1); break; case SKIP_RIGHT: set[2] = pzseek(set[2], 1); break; case SHIFT_LEFT: set[2] = set[1]; set[1] = set[0]; set[0] = pzseek(set[0], -1); break; case SHIFT_RIGHT: set[0] = set[1]; set[1] = set[2]; set[2] = pzseek(set[2], 1); break; } if (!set[0] || !set[1] || !set[2]) return 0; else return 1; } void CKTpzReset(PZtrial **set) { CKTpzTrapped = 0; Consec_Moves = 0; set[1] = pzseek(ZeroTrial, 0); if (set[1] != NULL) { set[0] = pzseek(set[1], -1); set[2] = pzseek(set[1], 1); } else { set[0] = NULL; set[2] = NULL; } } static int alter(PZtrial *new, PZtrial *nearto, double abstol, double reltol) { double p1, p2; #ifdef PZDEBUG DEBUG(1) { fprintf(stderr, "ALTER from: %.30g %.30g\n", new->s.real, new->s.imag); if (nearto->prev) fprintf(stderr, "nt->prev %g\n", nearto->prev->s.real); if (nearto->next) fprintf(stderr, "nt->next %g\n", nearto->next->s.real); } #endif if (CKTpzTrapped != 2) { #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "not 2\n"); #endif p1 = nearto->s.real; if (nearto->flags & ISAROOT) p1 -= 1e-6 * nearto->s.real + 1e-5; if (nearto->prev) { p1 += nearto->prev->s.real; #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "p1 %g\n", p1); #endif } else p1 -= 10.0 * (fabs(p1) + 1.0); p1 /= 2.0; } else p1 = nearto->s.real; if (CKTpzTrapped != 1) { #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "not 1\n"); #endif p2 = nearto->s.real; if (nearto->flags & ISAROOT) p2 += 1e-6 * nearto->s.real + 1e-5; /* XXX Would rather use pow(2)*/ if (nearto->next) { p2 += nearto->next->s.real; #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "p2 %g\n", p2); #endif } else p2 += 10.0 * (fabs(p2)+ 1.0); p2 /= 2.0; } else p2 = nearto->s.real; if ((nearto->prev && fabs(p1 - nearto->prev->s.real) / fabs(nearto->prev->s.real) + abstol/reltol < reltol) || (nearto->next && fabs(p2 - nearto->next->s.real) / fabs(nearto->next->s.real) + abstol/reltol < reltol)) { #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "Bailed out\n"); #endif return 0; } if (CKTpzTrapped != 2 && nearto->s.real - p1 > p2 - nearto->s.real) { #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "take p1\n"); #endif new->s.real = p1; } else { #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "take p2\n"); #endif new->s.real = p2; } #ifdef PZDEBUG DEBUG(1) fprintf(stderr, "ALTER to : %.30g %.30g\n", new->s.real, new->s.imag); #endif return 1; } tmpk8ny_4pz/src/spicelib/analysis/cktdelt.c0000644000175000017500000000111313546075722021156 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/tskdefs.h" #include "ngspice/jobdefs.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/cktdefs.h" /* ARGSUSED */ int CKTdelTask(CKTcircuit *ckt, TSKtask *task) { JOB *job; JOB *old=NULL; NG_IGNORE(ckt); for(job = task->jobs; job; job=job->JOBnextJob){ if(old) FREE(old); old=job; } if(old)FREE(old); FREE(task); return(OK); } tmpk8ny_4pz/src/spicelib/analysis/sensaskq.c0000644000175000017500000000170613546075722021364 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/cktdefs.h" #include "ngspice/sensdefs.h" /* ARGSUSED */ int SENSask(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value) { SENS_AN *job = (SENS_AN *) anal; NG_IGNORE(ckt); switch (which) { case SENS_START: value->rValue = job->start_freq; break; case SENS_STOP: value->rValue = job->stop_freq; break; case SENS_STEPS: value->iValue = job->n_freq_steps; break; case SENS_DECADE: case SENS_OCTAVE: case SENS_LINEAR: case SENS_DC: value->iValue = job->step_type == which; break; case SENS_DEFTOL: value->rValue = job->deftol; break; case SENS_DEFPERTURB: value->rValue = job->defperturb; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/analysis/cktdltn.c0000644000175000017500000000230013546075722021166 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. **********/ /* CKTdltNod */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" /* ARGSUSED */ int CKTdltNod(CKTcircuit *ckt, CKTnode *node) { return CKTdltNNum(ckt, node->number); } int CKTdltNNum(CKTcircuit *ckt, int num) { CKTnode *n, *prev, *node, *sprev; int error; if (!ckt->prev_CKTlastNode->number || num <= ckt->prev_CKTlastNode->number) { fprintf(stderr, "Internal Error: CKTdltNNum() removing a non device-local node, this will cause serious problems, please report this issue !\n"); controlled_exit(EXIT_FAILURE); } prev = NULL; node = NULL; sprev = NULL; for (n = ckt->CKTnodes; n; n = n->next) { if (n->number == num) { node = n; sprev = prev; } prev = n; } if (!node) return OK; ckt->CKTmaxEqNum -= 1; if (!sprev) { ckt->CKTnodes = node->next; } else { sprev->next = node->next; } if (node == ckt->CKTlastNode) ckt->CKTlastNode = sprev; error = SPfrontEnd->IFdelUid (ckt, node->name, UID_SIGNAL); tfree(node); return error; } tmpk8ny_4pz/src/spicelib/analysis/cktsetup.c0000644000175000017500000001147313546075722021400 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* CKTsetup(ckt) * this is a driver program to iterate through all the various * setup functions provided for the circuit elements in the * given circuit */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #ifdef XSPICE #include "ngspice/enh.h" #endif #ifdef USE_OMP #include #include "ngspice/cpextern.h" int nthreads; #endif #define CKALLOC(var,size,type) \ if(size && ((var = TMALLOC(type, size)) == NULL)){\ return(E_NOMEM);\ } int CKTsetup(CKTcircuit *ckt) { int i; int error; #ifdef XSPICE /* gtri - begin - Setup for adding rshunt option resistors */ CKTnode *node; int num_nodes; /* gtri - end - Setup for adding rshunt option resistors */ #endif SMPmatrix *matrix; ckt->CKTnumStates=0; #ifdef WANT_SENSE2 if(ckt->CKTsenInfo){ error = CKTsenSetup(ckt); if (error) return(error); } #endif if (ckt->CKTisSetup) return E_NOCHANGE; error = NIinit(ckt); if (error) return(error); ckt->CKTisSetup = 1; matrix = ckt->CKTmatrix; #ifdef USE_OMP if (!cp_getvar("num_threads", CP_NUM, &nthreads, 0)) nthreads = 2; omp_set_num_threads(nthreads); /* if (nthreads == 1) printf("OpenMP: %d thread is requested in ngspice\n", nthreads); else printf("OpenMP: %d threads are requested in ngspice\n", nthreads);*/ #endif #ifdef HAS_PROGREP SetAnalyse("Device Setup", 0); #endif /* preserve CKTlastNode before invoking DEVsetup() * so we can check for incomplete CKTdltNNum() invocations * during DEVunsetup() causing an erronous circuit matrix * when reinvoking CKTsetup() */ ckt->prev_CKTlastNode = ckt->CKTlastNode; for (i=0;iDEVsetup && ckt->CKThead[i] ) { error = DEVices[i]->DEVsetup (matrix, ckt->CKThead[i], ckt, &ckt->CKTnumStates); if(error) return(error); } } for(i=0;i<=MAX(2,ckt->CKTmaxOrder)+1;i++) { /* dctran needs 3 states as minimum */ CKALLOC(ckt->CKTstates[i],ckt->CKTnumStates,double); } #ifdef WANT_SENSE2 if(ckt->CKTsenInfo){ /* to allocate memory to sensitivity structures if * it is not done before */ error = NIsenReinit(ckt); if(error) return(error); } #endif if(ckt->CKTniState & NIUNINITIALIZED) { error = NIreinit(ckt); if(error) return(error); } #ifdef XSPICE /* gtri - begin - Setup for adding rshunt option resistors */ if(ckt->enh->rshunt_data.enabled) { /* Count number of voltage nodes in circuit */ for(num_nodes = 0, node = ckt->CKTnodes; node; node = node->next) if((node->type == SP_VOLTAGE) && (node->number != 0)) num_nodes++; /* Allocate space for the matrix diagonal data */ if(num_nodes > 0) { ckt->enh->rshunt_data.diag = TMALLOC(double *, num_nodes); } /* Set the number of nodes in the rshunt data */ ckt->enh->rshunt_data.num_nodes = num_nodes; /* Get/create matrix diagonal entry following what RESsetup does */ for(i = 0, node = ckt->CKTnodes; node; node = node->next) { if((node->type == SP_VOLTAGE) && (node->number != 0)) { ckt->enh->rshunt_data.diag[i] = SMPmakeElt(matrix,node->number,node->number); i++; } } } /* gtri - end - Setup for adding rshunt option resistors */ #endif return(OK); } int CKTunsetup(CKTcircuit *ckt) { int i, error, e2; CKTnode *node; error = OK; if (!ckt->CKTisSetup) return OK; for(i=0;i<=ckt->CKTmaxOrder+1;i++) { tfree(ckt->CKTstates[i]); } /* added by HT 050802*/ for(node=ckt->CKTnodes;node;node=node->next){ if(node->icGiven || node->nsGiven) { node->ptr=NULL; } } for (i=0;iDEVunsetup && ckt->CKThead[i] ) { e2 = DEVices[i]->DEVunsetup (ckt->CKThead[i], ckt); if (!error && e2) error = e2; } } if (ckt->prev_CKTlastNode != ckt->CKTlastNode) { fprintf(stderr, "Internal Error: incomplete CKTunsetup(), this will cause serious problems, please report this issue !\n"); controlled_exit(EXIT_FAILURE); } ckt->prev_CKTlastNode = NULL; ckt->CKTisSetup = 0; if(error) return(error); NIdestroy(ckt); /* if (ckt->CKTmatrix) SMPdestroy(ckt->CKTmatrix); ckt->CKTmatrix = NULL; */ return OK; } tmpk8ny_4pz/src/spicelib/analysis/dctrcurv.c0000644000175000017500000004436413546075722021377 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 1999 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "vsrc/vsrcdefs.h" #include "isrc/isrcdefs.h" #include "res/resdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/fteext.h" #ifdef XSPICE #include "ngspice/evt.h" #include "ngspice/mif.h" #include "ngspice/evtproto.h" #include "ngspice/ipctiein.h" #endif #include "ngspice/devdefs.h" #ifdef HAS_PROGREP static double actval, actdiff; #endif int DCtrCurv(CKTcircuit *ckt, int restart) { TRCV *job = (TRCV *) ckt->CKTcurJob; int i; double *temp; int converged; int rcode; int vcode; int icode; int j; int error; IFuid varUid; IFuid *nameList; int numNames; int firstTime = 1; static runDesc *plot = NULL; #ifdef WANT_SENSE2 long save; #ifdef SENSDEBUG if (ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & DCSEN)) { printf("\nDC Sensitivity Results\n\n"); CKTsenPrint(ckt); } #endif #endif rcode = CKTtypelook("Resistor"); vcode = CKTtypelook("Vsource"); icode = CKTtypelook("Isource"); if (!restart && job->TRCVnestState >= 0) { /* continuing */ i = job->TRCVnestState; /* resume to work? saj*/ error = SPfrontEnd->OUTpBeginPlot (NULL, NULL, NULL, NULL, 0, 666, NULL, 666, &plot); goto resume; } ckt->CKTtime = 0; ckt->CKTdelta = job->TRCVvStep[0]; ckt->CKTmode = (ckt->CKTmode & MODEUIC) | MODEDCTRANCURVE | MODEINITJCT; ckt->CKTorder = 1; /* Save the state of the circuit */ for (j = 0; j < 7; j++) ckt->CKTdeltaOld[j] = ckt->CKTdelta; for (i = 0; i <= job->TRCVnestLevel; i++) { if (rcode >= 0) { /* resistances are in this version, so use them */ RESinstance *here; RESmodel *model; for (model = (RESmodel *)ckt->CKThead[rcode]; model; model = RESnextModel(model)) for (here = RESinstances(model); here; here = RESnextInstance(here)) if (here->RESname == job->TRCVvName[i]) { job->TRCVvElt[i] = (GENinstance *)here; job->TRCVvSave[i] = here->RESresist; job->TRCVgSave[i] = here->RESresGiven; job->TRCVvType[i] = rcode; here->RESresist = job->TRCVvStart[i]; here->RESresGiven = 1; CKTtemp(ckt); goto found; } } if (vcode >= 0) { /* voltage sources are in this version, so use them */ VSRCinstance *here; VSRCmodel *model; for (model = (VSRCmodel *)ckt->CKThead[vcode]; model; model = VSRCnextModel(model)) for (here = VSRCinstances(model); here; here = VSRCnextInstance(here)) if (here->VSRCname == job->TRCVvName[i]) { job->TRCVvElt[i] = (GENinstance *)here; job->TRCVvSave[i] = here->VSRCdcValue; job->TRCVgSave[i] = here->VSRCdcGiven; job->TRCVvType[i] = vcode; here->VSRCdcValue = job->TRCVvStart[i]; here->VSRCdcGiven = 1; goto found; } } if (icode >= 0) { /* current sources are in this version, so use them */ ISRCinstance *here; ISRCmodel *model; for (model = (ISRCmodel *)ckt->CKThead[icode]; model; model = ISRCnextModel(model)) for (here = ISRCinstances(model); here; here = ISRCnextInstance(here)) if (here->ISRCname == job->TRCVvName[i]) { job->TRCVvElt[i] = (GENinstance *)here; job->TRCVvSave[i] = here->ISRCdcValue; job->TRCVgSave[i] = here->ISRCdcGiven; job->TRCVvType[i] = icode; here->ISRCdcValue = job->TRCVvStart[i]; here->ISRCdcGiven = 1; goto found; } } if (!strcmp(job->TRCVvName[i], "temp")) { job->TRCVvSave[i] = ckt->CKTtemp; /* Saves the old circuit temperature */ job->TRCVvType[i] = TEMP_CODE; /* Set the sweep type code */ ckt->CKTtemp = job->TRCVvStart[i] + CONSTCtoK; /* Set the new circuit temp */ inp_evaluate_temper(ft_curckt); CKTtemp(ckt); goto found; } SPfrontEnd->IFerrorf (ERR_FATAL, "DCtrCurv: source / resistor %s not in circuit", job->TRCVvName[i]); return(E_NODEV); found:; } #ifdef HAS_PROGREP actval = job->TRCVvStart[job->TRCVnestLevel]; actdiff = job->TRCVvStart[job->TRCVnestLevel] - job->TRCVvStop[job->TRCVnestLevel]; #endif #ifdef XSPICE /* gtri - add - wbk - 12/19/90 - Add IPC stuff and anal_init and anal_type */ /* Tell the beginPlot routine what mode we're in */ g_ipc.anal_type = IPC_ANAL_DCTRCURVE; /* Tell the code models what mode we're in */ g_mif_info.circuit.anal_type = MIF_DC; g_mif_info.circuit.anal_init = MIF_TRUE; /* gtri - end - wbk */ #endif error = CKTnames(ckt, &numNames, &nameList); if (error) return(error); if (job->TRCVvType[0] == vcode) SPfrontEnd->IFnewUid (ckt, &varUid, NULL, "v-sweep", UID_OTHER, NULL); else if (job->TRCVvType[0] == icode) SPfrontEnd->IFnewUid (ckt, &varUid, NULL, "i-sweep", UID_OTHER, NULL); else if (job->TRCVvType[0] == TEMP_CODE) SPfrontEnd->IFnewUid (ckt, &varUid, NULL, "temp-sweep", UID_OTHER, NULL); else if (job->TRCVvType[0] == rcode) SPfrontEnd->IFnewUid (ckt, &varUid, NULL, "res-sweep", UID_OTHER, NULL); else SPfrontEnd->IFnewUid (ckt, &varUid, NULL, "?-sweep", UID_OTHER, NULL); error = SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob, ckt->CKTcurJob->JOBname, varUid, IF_REAL, numNames, nameList, IF_REAL, &plot); tfree(nameList); if (error) return(error); /* initialize CKTsoaCheck `warn' counters */ if (ckt->CKTsoaCheck) error = CKTsoaInit(); /* now have finished the initialization - can start doing hard part */ i = 0; resume: for (;;) { if (job->TRCVvType[i] == vcode) { /* voltage source */ if (SGN(job->TRCVvStep[i]) * (((VSRCinstance*)(job->TRCVvElt[i]))->VSRCdcValue - job->TRCVvStop[i]) > DBL_EPSILON * 1e+03) { i++; firstTime = 1; ckt->CKTmode = (ckt->CKTmode & MODEUIC) | MODEDCTRANCURVE | MODEINITJCT; if (i > job->TRCVnestLevel) break; goto nextstep; } } else if (job->TRCVvType[i] == icode) { /* current source */ if (SGN(job->TRCVvStep[i]) * (((ISRCinstance*)(job->TRCVvElt[i]))->ISRCdcValue - job->TRCVvStop[i]) > DBL_EPSILON * 1e+03) { i++; firstTime = 1; ckt->CKTmode = (ckt->CKTmode & MODEUIC) | MODEDCTRANCURVE | MODEINITJCT; if (i > job->TRCVnestLevel) break; goto nextstep; } } else if (job->TRCVvType[i] == rcode) { /* resistance */ if (SGN(job->TRCVvStep[i]) * (((RESinstance*)(job->TRCVvElt[i]))->RESresist - job->TRCVvStop[i]) > DBL_EPSILON * 1e+03) { i++; firstTime = 1; ckt->CKTmode = (ckt->CKTmode & MODEUIC) | MODEDCTRANCURVE | MODEINITJCT; if (i > job->TRCVnestLevel) break; goto nextstep; } } else if (job->TRCVvType[i] == TEMP_CODE) { /* temp sweep */ if (SGN(job->TRCVvStep[i]) * ((ckt->CKTtemp - CONSTCtoK) - job->TRCVvStop[i]) > DBL_EPSILON * 1e+03) { i++; firstTime = 1; ckt->CKTmode = (ckt->CKTmode & MODEUIC) | MODEDCTRANCURVE | MODEINITJCT; if (i > job->TRCVnestLevel) break; goto nextstep; } } while (--i >= 0) if (job->TRCVvType[i] == vcode) { /* voltage source */ ((VSRCinstance *)(job->TRCVvElt[i]))->VSRCdcValue = job->TRCVvStart[i]; } else if (job->TRCVvType[i] == icode) { /* current source */ ((ISRCinstance *)(job->TRCVvElt[i]))->ISRCdcValue = job->TRCVvStart[i]; } else if (job->TRCVvType[i] == TEMP_CODE) { ckt->CKTtemp = job->TRCVvStart[i] + CONSTCtoK; inp_evaluate_temper(ft_curckt); CKTtemp(ckt); } else if (job->TRCVvType[i] == rcode) { ((RESinstance *)(job->TRCVvElt[i]))->RESresist = job->TRCVvStart[i]; RESupdate_conduct((RESinstance *)(job->TRCVvElt[i]), FALSE); DEVices[rcode]->DEVload(job->TRCVvElt[i]->GENmodPtr, ckt); } /* Rotate state vectors. */ temp = ckt->CKTstates[ckt->CKTmaxOrder + 1]; for (j = ckt->CKTmaxOrder; j >= 0; j--) ckt->CKTstates[j + 1] = ckt->CKTstates[j]; ckt->CKTstate0 = temp; /* do operation */ #ifdef XSPICE /* gtri - begin - wbk - Do EVTop if event instances exist */ if (ckt->evt->counts.num_insts == 0) { /* If no event-driven instances, do what SPICE normally does */ #endif converged = NIiter(ckt, ckt->CKTdcTrcvMaxIter); if (converged != 0) { converged = CKTop(ckt, (ckt->CKTmode & MODEUIC) | MODEDCTRANCURVE | MODEINITJCT, (ckt->CKTmode & MODEUIC) | MODEDCTRANCURVE | MODEINITFLOAT, ckt->CKTdcMaxIter); if (converged != 0) return(converged); } #ifdef XSPICE } else { /* else do new algorithm */ /* first get the current step in the analysis */ if (job->TRCVvType[0] == vcode) { g_mif_info.circuit.evt_step = ((VSRCinstance *)(job->TRCVvElt[0]))->VSRCdcValue; } else if (job->TRCVvType[0] == icode) { g_mif_info.circuit.evt_step = ((ISRCinstance *)(job->TRCVvElt[0]))->ISRCdcValue; } else if (job->TRCVvType[0] == rcode) { g_mif_info.circuit.evt_step = ((RESinstance*)(job->TRCVvElt[0]->GENmodPtr))->RESresist; } else if (job->TRCVvType[0] == TEMP_CODE) { g_mif_info.circuit.evt_step = ckt->CKTtemp - CONSTCtoK; } /* if first time through, call EVTop immediately and save event results */ if (firstTime) { converged = EVTop(ckt, (ckt->CKTmode & MODEUIC) | MODEDCTRANCURVE | MODEINITJCT, (ckt->CKTmode & MODEUIC) | MODEDCTRANCURVE | MODEINITFLOAT, ckt->CKTdcMaxIter, MIF_TRUE); EVTdump(ckt, IPC_ANAL_DCOP, g_mif_info.circuit.evt_step); EVTop_save(ckt, MIF_FALSE, g_mif_info.circuit.evt_step); if (converged != 0) return(converged); } /* else, call NIiter first with mode = MODEINITPRED */ /* to attempt quick analog solution. Then call all hybrids and call */ /* EVTop only if event outputs have changed, or if non-converged */ else { converged = NIiter(ckt, ckt->CKTdcTrcvMaxIter); EVTcall_hybrids(ckt); if ((converged != 0) || (ckt->evt->queue.output.num_changed != 0)) { converged = EVTop(ckt, (ckt->CKTmode & MODEUIC) | MODEDCTRANCURVE | MODEINITJCT, (ckt->CKTmode & MODEUIC) | MODEDCTRANCURVE | MODEINITFLOAT, ckt->CKTdcMaxIter, MIF_FALSE); EVTdump(ckt, IPC_ANAL_DCTRCURVE, g_mif_info.circuit.evt_step); EVTop_save(ckt, MIF_FALSE, g_mif_info.circuit.evt_step); if (converged != 0) return(converged); } } } /* gtri - end - wbk - Do EVTop if event instances exist */ #endif ckt->CKTmode = (ckt->CKTmode & MODEUIC) | MODEDCTRANCURVE | MODEINITPRED; if (job->TRCVvType[0] == vcode) ckt->CKTtime = ((VSRCinstance *)(job->TRCVvElt[0]))->VSRCdcValue; else if (job->TRCVvType[0] == icode) ckt->CKTtime = ((ISRCinstance *)(job->TRCVvElt[0]))->ISRCdcValue; else if (job->TRCVvType[0] == rcode) ckt->CKTtime = ((RESinstance *)(job->TRCVvElt[0]))->RESresist; else if (job->TRCVvType[0] == TEMP_CODE) ckt->CKTtime = ckt->CKTtemp - CONSTCtoK; #ifdef XSPICE /* gtri - add - wbk - 12/19/90 - Add IPC stuff */ /* If first time through, call CKTdump to output Operating Point info */ /* for Mspice compatibility */ if (((g_ipc.enabled) || wantevtdata) && firstTime) { ipc_send_dcop_prefix(); CKTdump(ckt, 0.0, plot); ipc_send_dcop_suffix(); } /* gtri - end - wbk */ #endif #ifdef WANT_SENSE2 /* if (!ckt->CKTsenInfo) printf("sensitivity structure does not exist\n"); */ if (ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & DCSEN)) { int senmode; #ifdef SENSDEBUG if (job->TRCVvType[0] == vcode) { /* voltage source */ printf("Voltage Source Value : %.5e V\n", ((VSRCinstance*) (job->TRCVvElt[0]))->VSRCdcValue); } if (job->TRCVvType[0] == icode) { /* current source */ printf("Current Source Value : %.5e A\n", ((ISRCinstance*)(job->TRCVvElt[0]))->ISRCdcValue); } if (job->TRCVvType[0] == rcode) { /* resistance */ printf("Current Resistance Value : %.5e Ohm\n", ((RESinstance*)(job->TRCVvElt[0]->GENmodPtr))->RESresist); } if (job->TRCVvType[0] == TEMP_CODE) { /* Temperature */ printf("Current Circuit Temperature : %.5e C\n", ckt->CKTtemp - CONSTCtoK); } #endif senmode = ckt->CKTsenInfo->SENmode; save = ckt->CKTmode; ckt->CKTsenInfo->SENmode = DCSEN; error = CKTsenDCtran(ckt); if (error) return(error); ckt->CKTmode = save; ckt->CKTsenInfo->SENmode = senmode; } #endif #ifdef XSPICE /* gtri - modify - wbk - 12/19/90 - Send IPC delimiters */ if (g_ipc.enabled) ipc_send_data_prefix(ckt->CKTtime); #endif CKTdump(ckt,ckt->CKTtime,plot); if (ckt->CKTsoaCheck) error = CKTsoaCheck(ckt); #ifdef XSPICE if (g_ipc.enabled) ipc_send_data_suffix(); /* gtri - end - wbk */ #endif if (firstTime) { firstTime = 0; memcpy(ckt->CKTstate1, ckt->CKTstate0, (size_t) ckt->CKTnumStates * sizeof(double)); } i = 0; nextstep:; if (job->TRCVvType[i] == vcode) { /* voltage source */ ((VSRCinstance*)(job->TRCVvElt[i]))->VSRCdcValue += job->TRCVvStep[i]; } else if (job->TRCVvType[i] == icode) { /* current source */ ((ISRCinstance*)(job->TRCVvElt[i]))->ISRCdcValue += job->TRCVvStep[i]; } else if (job->TRCVvType[i] == rcode) { /* resistance */ ((RESinstance*)(job->TRCVvElt[i]))->RESresist += job->TRCVvStep[i]; RESupdate_conduct((RESinstance *)(job->TRCVvElt[i]), FALSE); DEVices[rcode]->DEVload(job->TRCVvElt[i]->GENmodPtr, ckt); } else if (job->TRCVvType[i] == TEMP_CODE) { /* temperature */ ckt->CKTtemp += job->TRCVvStep[i]; inp_evaluate_temper(ft_curckt); CKTtemp(ckt); } if (SPfrontEnd->IFpauseTest()) { /* user asked us to pause, so save state */ job->TRCVnestState = i; return(E_PAUSE); } #ifdef HAS_PROGREP if (i == job->TRCVnestLevel) { actval += job->TRCVvStep[job->TRCVnestLevel]; SetAnalyse("dc", abs((int)(actval * 1000. / actdiff))); } #endif } /* all done, lets put everything back */ for (i = 0; i <= job->TRCVnestLevel; i++) if (job->TRCVvType[i] == vcode) { /* voltage source */ ((VSRCinstance*)(job->TRCVvElt[i]))->VSRCdcValue = job->TRCVvSave[i]; ((VSRCinstance*)(job->TRCVvElt[i]))->VSRCdcGiven = (job->TRCVgSave[i] != 0); } else if (job->TRCVvType[i] == icode) { /*current source */ ((ISRCinstance*)(job->TRCVvElt[i]))->ISRCdcValue = job->TRCVvSave[i]; ((ISRCinstance*)(job->TRCVvElt[i]))->ISRCdcGiven = (job->TRCVgSave[i] != 0); } else if (job->TRCVvType[i] == rcode) { /* Resistance */ ((RESinstance*)(job->TRCVvElt[i]))->RESresist = job->TRCVvSave[i]; ((RESinstance*)(job->TRCVvElt[i]))->RESresGiven = (job->TRCVgSave[i] != 0); RESupdate_conduct((RESinstance *)(job->TRCVvElt[i]), TRUE); DEVices[rcode]->DEVload(job->TRCVvElt[i]->GENmodPtr, ckt); } else if (job->TRCVvType[i] == TEMP_CODE) { ckt->CKTtemp = job->TRCVvSave[i]; inp_evaluate_temper(ft_curckt); CKTtemp(ckt); } SPfrontEnd->OUTendPlot (plot); return(OK); } tmpk8ny_4pz/src/spicelib/analysis/cktacct.c0000644000175000017500000000653413546075722021154 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* * CKTacct * get the specified accounting item into 'value' in the * given circuit 'ckt'. */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/optdefs.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/spmatrix.h" /* ARGSUSED */ int CKTacct(CKTcircuit *ckt, JOB *anal, int which, IFvalue *val) { NG_IGNORE(anal); switch(which) { case OPT_EQNS: val->iValue = ckt->CKTmaxEqNum; break; case OPT_ORIGNZ: if ( ckt->CKTmatrix != NULL ) { val->iValue = spOriginalCount(ckt->CKTmatrix); } else { val->iValue = 0; } break; case OPT_FILLNZ: if ( ckt->CKTmatrix != NULL ) { val->iValue = spFillinCount(ckt->CKTmatrix); } else { val->iValue = 0; } break; case OPT_TOTALNZ: if ( ckt->CKTmatrix != NULL ) { val->iValue = spElementCount(ckt->CKTmatrix); } else { val->iValue = 0; } break; case OPT_ITERS: val->iValue = ckt->CKTstat->STATnumIter; break; case OPT_TRANIT: val->iValue = ckt->CKTstat->STATtranIter; break; case OPT_TRANCURITER: val->iValue = ckt->CKTstat->STATnumIter - ckt->CKTstat->STAToldIter; break; case OPT_TRANPTS: val->iValue = ckt->CKTstat->STATtimePts; break; case OPT_TRANACCPT: val->iValue = ckt->CKTstat->STATaccepted; break; case OPT_TRANRJCT: val->iValue = ckt->CKTstat->STATrejected; break; case OPT_TOTANALTIME: val->rValue = ckt->CKTstat->STATtotAnalTime; break; case OPT_TRANTIME: val->rValue = ckt->CKTstat->STATtranTime; break; case OPT_ACTIME: val->rValue = ckt->CKTstat->STATacTime; break; case OPT_LOADTIME: val->rValue = ckt->CKTstat->STATloadTime; break; case OPT_SYNCTIME: val->rValue = ckt->CKTstat->STATsyncTime; break; case OPT_REORDTIME: val->rValue = ckt->CKTstat->STATreorderTime; break; case OPT_DECOMP: val->rValue = ckt->CKTstat->STATdecompTime; break; case OPT_SOLVE: val->rValue = ckt->CKTstat->STATsolveTime; break; case OPT_TRANLOAD: val->rValue = ckt->CKTstat->STATtranLoadTime; break; case OPT_TRANSYNC: val->rValue = ckt->CKTstat->STATtranSyncTime; break; case OPT_TRANDECOMP: val->rValue = ckt->CKTstat->STATtranDecompTime; break; case OPT_TRANSOLVE: val->rValue = ckt->CKTstat->STATtranSolveTime; break; case OPT_TRANTRUNC: val->rValue = ckt->CKTstat->STATtranTruncTime; break; case OPT_ACLOAD: val->rValue = ckt->CKTstat->STATacLoadTime; break; case OPT_ACSYNC: val->rValue = ckt->CKTstat->STATacSyncTime; break; case OPT_ACDECOMP: val->rValue = ckt->CKTstat->STATacDecompTime; break; case OPT_ACSOLVE: val->rValue = ckt->CKTstat->STATacSolveTime; break; case OPT_TEMP: val->rValue = ckt->CKTtemp - CONSTCtoK; break; case OPT_TNOM: val->rValue = ckt->CKTnomTemp - CONSTCtoK; break; default: return(-1); } return(0); } tmpk8ny_4pz/src/spicelib/analysis/cktterr.c0000644000175000017500000000364413546075722021215 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #define ccap (qcap+1) void CKTterr(int qcap, CKTcircuit *ckt, double *timeStep) { double volttol; double chargetol; double tol; double del; double diff[8]; double deltmp[8]; double factor=0; int i; int j; static double gearCoeff[] = { .5, .2222222222, .1363636364, .096, .07299270073, .05830903790 }; static double trapCoeff[] = { .5, .08333333333 }; volttol = ckt->CKTabstol + ckt->CKTreltol * MAX( fabs(ckt->CKTstate0[ccap]), fabs(ckt->CKTstate1[ccap])); chargetol = MAX(fabs(ckt->CKTstate0[qcap]),fabs(ckt->CKTstate1[qcap])); chargetol = ckt->CKTreltol * MAX(chargetol,ckt->CKTchgtol)/ckt->CKTdelta; tol = MAX(volttol,chargetol); /* now divided differences */ for(i=ckt->CKTorder+1;i>=0;i--) { diff[i] = ckt->CKTstates[i][qcap]; } for(i=0 ; i <= ckt->CKTorder ; i++) { deltmp[i] = ckt->CKTdeltaOld[i]; } j = ckt->CKTorder; for (;;) { for(i=0;i <= j;i++) { diff[i] = (diff[i] - diff[i+1])/deltmp[i]; } if (--j < 0) break; for(i=0;i <= j;i++) { deltmp[i] = deltmp[i+1] + ckt->CKTdeltaOld[i]; } } switch(ckt->CKTintegrateMethod) { case GEAR: factor = gearCoeff[ckt->CKTorder-1]; break; case TRAPEZOIDAL: factor = trapCoeff[ckt->CKTorder - 1] ; break; } del = ckt->CKTtrtol * tol/MAX(ckt->CKTabstol,factor * fabs(diff[0])); if(ckt->CKTorder == 2) { del = sqrt(del); } else if (ckt->CKTorder > 2) { del = exp(log(del)/ckt->CKTorder); } *timeStep = MIN(*timeStep,del); return; } tmpk8ny_4pz/src/spicelib/analysis/cktasknq.c0000644000175000017500000000151613546075722021352 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* *CKTaskNodQst * * ask about a parameter on a node. */ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/cktdefs.h" /* ARGSUSED */ int CKTaskNodQst(CKTcircuit *ckt, CKTnode *node, int parm, IFvalue *value, IFvalue *selector) { NG_IGNORE(ckt); NG_IGNORE(selector); if(!node) return(E_BADPARM); switch(parm) { case PARM_NS: value->rValue = node->nodeset; break; case PARM_IC: value->rValue = node->ic; break; case PARM_NODETYPE: value->iValue = node->type; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/analysis/tranaskq.c0000644000175000017500000000173413546075722021361 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/trandefs.h" #include "ngspice/cktdefs.h" /* ARGSUSED */ int TRANaskQuest(CKTcircuit *ckt, JOB *anal, int which,IFvalue *value) { TRANan *job = (TRANan *) anal; NG_IGNORE(ckt); switch(which) { case TRAN_TSTOP: value->rValue = job->TRANfinalTime; break; case TRAN_TSTEP: value->rValue = job->TRANstep; break; case TRAN_TSTART: value->rValue = job->TRANinitTime; break; case TRAN_TMAX: value->rValue = job->TRANmaxStep; break; case TRAN_UIC: if (job->TRANmode & MODEUIC) { value->iValue = 1; } else { value->iValue = 0; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/analysis/cktmknod.c0000644000175000017500000000122713546075722021344 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* *CKTmkNode(ckt,node) * Tentatively allocate a new circuit equation structure */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" /* ARGSUSED */ int CKTmkNode(CKTcircuit *ckt, CKTnode **node) { CKTnode *mynode; NG_IGNORE(ckt); mynode = TMALLOC(CKTnode, 1); if(mynode == NULL) return(E_NOMEM); mynode->next = NULL; mynode->name = NULL; if(node) *node = mynode; return(OK); } tmpk8ny_4pz/src/spicelib/analysis/ckttrunc.c0000644000175000017500000001263013546075722021367 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* CKTtrunc(ckt) * this is a driver program to iterate through all the various * truncation error functions provided for the circuit elements in the * given circuit */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" int CKTtrunc(CKTcircuit *ckt, double *timeStep) { #ifndef NEWTRUNC int i; double timetemp; #ifdef STEPDEBUG double debugtemp; #endif /* STEPDEBUG */ double startTime; int error = OK; startTime = SPfrontEnd->IFseconds(); timetemp = HUGE; for (i=0;iDEVtrunc && ckt->CKThead[i]) { #ifdef STEPDEBUG debugtemp = timetemp; #endif /* STEPDEBUG */ error = DEVices[i]->DEVtrunc (ckt->CKThead[i], ckt, &timetemp); if(error) { ckt->CKTstat->STATtranTruncTime += SPfrontEnd->IFseconds() - startTime; return(error); } #ifdef STEPDEBUG if(debugtemp != timetemp) { printf("timestep cut by device type %s from %g to %g\n", DEVices[i]->DEVpublic.name, debugtemp, timetemp); } #endif /* STEPDEBUG */ } } *timeStep = MIN(2 * *timeStep,timetemp); ckt->CKTstat->STATtranTruncTime += SPfrontEnd->IFseconds() - startTime; return(OK); #else /* NEWTRUNC */ int i; CKTnode *node; double timetemp; double tmp; double diff; double tol; double startTime; int size; startTime = SPfrontEnd->IFseconds(); timetemp = HUGE; size = SMPmatSize(ckt->CKTmatrix); #ifdef STEPDEBUG printf("at time %g, delta %g\n",ckt->CKTtime,ckt->CKTdeltaOld[0]); #endif node = ckt->CKTnodes; switch(ckt->CKTintegrateMethod) { case TRAPEZOIDAL: switch(ckt->CKTorder) { case 1: for(i=1;iCKTrhs[i]),fabs(ckt->CKTpred[i]))* ckt->CKTlteReltol+ckt->CKTlteAbstol; node = node->next; if(node->type!= SP_VOLTAGE) continue; diff = ckt->CKTrhs[i]-ckt->CKTpred[i]; #ifdef STEPDEBUG printf("%s: cor=%g, pred=%g ",node->name, ckt->CKTrhs[i],ckt->CKTpred[i]); #endif if(diff != 0) { tmp = ckt->CKTtrtol * tol * 2 /diff; tmp = ckt->CKTdeltaOld[0]*sqrt(fabs(tmp)); timetemp = MIN(timetemp,tmp); #ifdef STEPDEBUG printf("tol = %g, diff = %g, h->%g\n",tol,diff,tmp); #endif } else { #ifdef STEPDEBUG printf("diff is 0\n"); #endif } } break; case 2: for(i=1;iCKTrhs[i]),fabs(ckt->CKTpred[i]))* ckt->CKTlteReltol+ckt->CKTlteAbstol; node = node->next; if(node->type!= SP_VOLTAGE) continue; diff = ckt->CKTrhs[i]-ckt->CKTpred[i]; #ifdef STEPDEBUG printf("%s: cor=%g, pred=%g ",node->name,ckt->CKTrhs[i], ckt->CKTpred[i]); #endif if(diff != 0) { tmp = ckt->CKTdeltaOld[0]*ckt->CKTtrtol * tol * 3 * (ckt->CKTdeltaOld[0]+ckt->CKTdeltaOld[1])/diff; tmp = fabs(tmp); timetemp = MIN(timetemp,tmp); #ifdef STEPDEBUG printf("tol = %g, diff = %g, h->%g\n",tol,diff,tmp); #endif } else { #ifdef STEPDEBUG printf("diff is 0\n"); #endif } } break; default: return(E_ORDER); break; } break; case GEAR: { double delsum=0; for(i=0;i<=ckt->CKTorder;i++) { delsum += ckt->CKTdeltaOld[i]; } for(i=1;inext; if(node->type!= SP_VOLTAGE) continue; tol = MAX( fabs(ckt->CKTrhs[i]),fabs(ckt->CKTpred[i]))* ckt->CKTlteReltol+ckt->CKTlteAbstol; diff = (ckt->CKTrhs[i]-ckt->CKTpred[i]); #ifdef STEPDEBUG printf("%s: cor=%g, pred=%g ",node->name,ckt->CKTrhs[i], ckt->CKTpred[i]); #endif if(diff != 0) { tmp = tol*ckt->CKTtrtol*delsum/(diff*ckt->CKTdelta); tmp = fabs(tmp); switch(ckt->CKTorder) { case 0: break; case 1: tmp = sqrt(tmp); break; default: tmp = exp(log(tmp)/(ckt->CKTorder+1)); break; } tmp *= ckt->CKTdelta; timetemp = MIN(timetemp,tmp); #ifdef STEPDEBUG printf("tol = %g, diff = %g, h->%g\n",tol,diff,tmp); #endif } else { #ifdef STEPDEBUG printf("diff is 0\n"); #endif } } } break; default: return(E_METHOD); } *timeStep = MIN(2 * *timeStep,timetemp); ckt->CKTstat->STATtranTruncTime += SPfrontEnd->IFseconds() - startTime; return(OK); #endif /* NEWTRUNC */ } tmpk8ny_4pz/src/spicelib/analysis/dsetparm.c0000644000175000017500000000407013546075722021350 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/cktdefs.h" #include "ngspice/distodef.h" #include "analysis.h" /* ARGSUSED */ int DsetParm(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value) { DISTOAN *job = (DISTOAN *) anal; NG_IGNORE(ckt); switch(which) { case D_START: if (value->rValue <= 0.0) { errMsg = copy("Frequency of 0 is invalid"); job->DstartF1 = 1.0; return(E_PARMVAL); } job->DstartF1 = value->rValue; break; case D_STOP: if (value->rValue <= 0.0) { errMsg = copy("Frequency of 0 is invalid"); job->DstartF1 = 1.0; return(E_PARMVAL); } job->DstopF1 = value->rValue; break; case D_STEPS: job->DnumSteps = value->iValue; break; case D_DEC: job->DstepType = DECADE; break; case D_OCT: job->DstepType = OCTAVE; break; case D_LIN: job->DstepType = LINEAR; break; case D_F2OVRF1: job->Df2ovrF1 = value->rValue; job->Df2wanted = 1; break; default: return(E_BADPARM); } return(OK); } static IFparm Dparms[] = { { "start", D_START, IF_SET|IF_REAL, "starting frequency" }, { "stop", D_STOP, IF_SET|IF_REAL, "ending frequency" }, { "numsteps", D_STEPS, IF_SET|IF_INTEGER, "number of frequencies" }, { "dec", D_DEC, IF_SET|IF_FLAG, "step by decades" }, { "oct", D_OCT, IF_SET|IF_FLAG, "step by octaves" }, { "lin", D_LIN, IF_SET|IF_FLAG, "step linearly" }, { "f2overf1", D_F2OVRF1, IF_SET|IF_REAL, "ratio of F2 to F1" }, }; SPICEanalysis DISTOinfo = { { "DISTO", "Small signal distortion analysis", NUMELEMS(Dparms), Dparms }, sizeof(DISTOAN), FREQUENCYDOMAIN, 1, DsetParm, DaskQuest, NULL, DISTOan }; tmpk8ny_4pz/src/spicelib/analysis/ChangeLog0000644000175000017500000000611313546075722021137 0ustar carstencarsten2002-01-03 Paolo Nenzi * Added some code that adds new functionalities if ngspice is compiled for Windows (Holger Vogt patch) I think that the new code interactively displays the percent done of the analysis. 2001-01-23 Paolo Nenzi * noisean.c: patched the code with the new one in the bsim4.1.0 distribution. The new noisean.c put some code between #ifdef INT_NOISE. 2000-01-21 Paolo Nenzi * cktsgen.c: corrected a bug that caused segfault on sensitivity analysis. 2000-07-28 Arno W. Peters * cktpzstr.c: Reversed a patch that went in between ng-spice-0.2 and ng-spice-0.3 that eliminated the following warnings: 'suggest parentheses around && within ||'. The parenthesis were not placed correctly, leading to incorrect behaviour of the pole-zero analysis. 2000-05-22 Paolo Nenzi * cktpzstr.c, cktsens.c: Applied Widlok patches. 2000-04-04 Paolo Nenzi * noisean.c: Merged the previous code with the new one included in bsim4 distribution. This code originated from Weidong Lu (bsim group). 1999-12-20 Paolo Nenzi * noisean.c: Bug: The ac noise analysis in Spice3f4 has a serious bug. In interactive mode it fails to reproduce frequency dependence known to exist. In batch (Spice2) mode, it works only if a corresponding ac analysis has been run first. Fix: This bug is fixed by providing a call to CKTload() in noisean.c as shown by the source code patch which is attached below. 1999-09-08 Emmanuel Rouat * ckt.h: created (and included in Makefile.am) 1999-09-07 Arno * cktpzstr.c: reformatted and corrected(?) complex if condition. 1999-08-28 Emmanuel Rouat * Removed all #includes of misc.h and util.h (now in spice.h) 1999-08-27 Paolo Nenzi * Removed GENERIC and #include "suffix.h" from all the files. GENERIC has been replaced by void. ANSIfied all functions with protoize. 1999-08-26 Paolo Nenzi * cktacct.c: added #include "spmatrix.h" to avoid implicit declaration warning at compile time. * dctran.c: ansified and substituted void with void. * tranasq.c: same as before. * traninit.c: same as before. * transetp.c: same as before. 1999-08-08 Emmanuel Rouat * Removed all HAS_SHORTMACRO and HAS_FLATINCLUDES code in directory * cktdest.c (and other files): changed HAS_SENSE2 in WANT_SENSE2 1999-08-04 Paolo Nenzi * changed dctrcurv.c: added code for temperature sweeps and resistance sweeps. Now you can execute .dc temp to do a temp sweep, temp is the keyword for temp sweeps (The code comes from a patch supplied by Serban-Mihai Popescu . To do a resitance sweep just insert resistor name to the .cd line:.dc vin -5 5 1 rin 100 1000 10. Resistance and temperature sweeps can be nested. tmpk8ny_4pz/src/spicelib/analysis/analysis.c0000644000175000017500000000213113546075722021350 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/jobdefs.h" #include "ngspice/cktdefs.h" #include "analysis.h" extern SPICEanalysis OPTinfo; extern SPICEanalysis ACinfo; extern SPICEanalysis DCTinfo; extern SPICEanalysis DCOinfo; extern SPICEanalysis TRANinfo; extern SPICEanalysis PZinfo; extern SPICEanalysis TFinfo; extern SPICEanalysis DISTOinfo; extern SPICEanalysis NOISEinfo; extern SPICEanalysis SENSinfo; #ifdef WITH_PSS extern SPICEanalysis PSSinfo; #endif #ifdef WANT_SENSE2 extern SPICEanalysis SEN2info; #endif SPICEanalysis *analInfo[] = { &OPTinfo, &ACinfo, &DCTinfo, &DCOinfo, &TRANinfo, &PZinfo, &TFinfo, &DISTOinfo, &NOISEinfo, &SENSinfo, #ifdef WITH_PSS &PSSinfo, #endif #ifdef WANT_SENSE2 &SEN2info, #endif }; char *spice_analysis_get_name(int index) { return analInfo[index]->if_analysis.name; } char *spice_analysis_get_description(int index) { return analInfo[index]->if_analysis.description; } int spice_num_analysis(void) { return NUMELEMS(analInfo); } SPICEanalysis **spice_analysis_ptr(void) { return analInfo; } tmpk8ny_4pz/src/spicelib/analysis/noisean.c0000644000175000017500000002721613546075722021174 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Gary W. Ng Modified: 2001 AlansFixes **********/ /* Patch to noisean.c by Richard D. McRoberts. * Patched with modifications from Weidong Liu (2000) * Patched with modifications ftom Weidong Liu * in bsim4.1.0 code */ #include "ngspice/ngspice.h" #include "ngspice/acdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/cpextern.h" #include "ngspice/noisedef.h" #include "ngspice/sperror.h" #include "ngspice/sim.h" #include "vsrc/vsrcdefs.h" #include "isrc/isrcdefs.h" // fixme // ugly hack to work around missing api to specify the "type" of signals extern int fixme_onoise_type; extern int fixme_inoise_type; int NOISEan (CKTcircuit *ckt, int restart) { /* variable must be static, for continuation of interrupted (Ctrl-C), longer lasting noise anlysis */ static Ndata *data; double realVal; double imagVal; int error; int posOutNode; int negOutNode; int step; IFuid freqUid; double freqTol; /* tolerence parameter for finding final frequency; hack */ int i, src_type; NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; GENinstance *inst = CKTfndDev(ckt, job->input); bool frequequal = AlmostEqualUlps(job->NstartFreq, job->NstopFreq, 3); posOutNode = (job->output) -> number; negOutNode = (job->outputRef) -> number; if (job->NnumSteps < 1) { SPfrontEnd->IFerrorf(ERR_WARNING, "Number of steps for noise measurement has to be larger than 0,\n but currently is %d\n", job->NnumSteps); return(E_PARMVAL); } else if ((job->NnumSteps == 1) && (job->NstpType == LINEAR)) { if (!frequequal) { job->NstopFreq = job->NstartFreq; SPfrontEnd->IFerrorf(ERR_WARNING, "Noise measurement at a single frequency %g only!\n", job->NstartFreq); } } else { if (frequequal) { job->NstopFreq = job->NstartFreq; job->NnumSteps = 1; SPfrontEnd->IFerrorf(ERR_WARNING, "Noise measurement at a single frequency %g only!\n", job->NstartFreq); } } /* see if the source specified is AC */ { bool ac_given = FALSE; if (!inst || inst->GENmodPtr->GENmodType < 0) { SPfrontEnd->IFerrorf (ERR_WARNING, "Noise input source %s not in circuit", job->input); return E_NOTFOUND; } if (inst->GENmodPtr->GENmodType == CKTtypelook("Vsource")) { ac_given = ((VSRCinstance *)inst) -> VSRCacGiven; src_type = SV_VOLTAGE; } else if(inst->GENmodPtr->GENmodType == CKTtypelook("Isource")) { ac_given = ((ISRCinstance *)inst) -> ISRCacGiven; src_type = SV_CURRENT; } else { SPfrontEnd->IFerrorf (ERR_WARNING, "Noise input source %s is not of proper type", job->input); return E_NOTFOUND; } if (!ac_given) { SPfrontEnd->IFerrorf (ERR_WARNING, "Noise input source %s has no AC value", job->input); return E_NOACINPUT; } } if ( (job->NsavFstp == 0.0) || restart) { /* va, NsavFstp is double */ switch (job->NstpType) { case DECADE: job->NfreqDelta = exp(log(10.0)/ job->NnumSteps); break; case OCTAVE: job->NfreqDelta = exp(log(2.0)/ job->NnumSteps); break; case LINEAR: if (job->NnumSteps == 1) job->NfreqDelta = 0; else job->NfreqDelta = (job->NstopFreq - job->NstartFreq) / (job->NnumSteps - 1); break; default: return(E_BADPARM); } /* error = DCop(ckt); */ error = CKTop(ckt, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITJCT, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITFLOAT, ckt->CKTdcMaxIter); if (error) return(error); /* Patch to noisean.c by Richard D. McRoberts. */ ckt->CKTmode = (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITSMSIG; error = CKTload(ckt); if(error) return(error); data = TMALLOC(Ndata, 1); step = 0; data->freq = job->NstartFreq; data->outNoiz = 0.0; data->inNoise = 0.0; data->squared = cp_getvar("sqrnoise", CP_BOOL, NULL, 0) ? 1 : 0; /* the current front-end needs the namelist to be fully declared before an OUTpBeginplot */ SPfrontEnd->IFnewUid (ckt, &freqUid, NULL, "frequency", UID_OTHER, NULL); data->numPlots = 0; /* we don't have any plots yet */ error = CKTnoise(ckt,N_DENS,N_OPEN,data); if (error) return(error); /* * all names in the namelist have been declared. now start the * plot */ if (src_type == SV_VOLTAGE) fixme_inoise_type = data->squared ? SV_SQR_VOLTAGE_DENSITY : SV_VOLTAGE_DENSITY; else fixme_inoise_type = data->squared ? SV_SQR_CURRENT_DENSITY : SV_CURRENT_DENSITY; fixme_onoise_type = data->squared ? SV_SQR_VOLTAGE_DENSITY : SV_VOLTAGE_DENSITY; if (!data->squared) for (i = 0; i < data->numPlots; i++) data->squared_value[i] = ciprefix("inoise", data->namelist[i]) || ciprefix("onoise", data->namelist[i]); error = SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob, data->squared ? "Noise Spectral Density Curves - (V^2 or A^2)/Hz" : "Noise Spectral Density Curves", freqUid, IF_REAL, data->numPlots, data->namelist, IF_REAL, &(data->NplotPtr)); if (error) return(error); if (job->NstpType != LINEAR) { SPfrontEnd->OUTattributes (data->NplotPtr, NULL, OUT_SCALE_LOG, NULL); } } else { /* we must have paused before. pick up where we left off */ step = (int)(job->NsavFstp); switch (job->NstpType) { case DECADE: case OCTAVE: data->freq = job->NstartFreq * exp (step * log (job->NfreqDelta)); break; case LINEAR: data->freq = job->NstartFreq + step * job->NfreqDelta; break; default: return(E_BADPARM); } job->NsavFstp = 0; data->outNoiz = job->NsavOnoise; data->inNoise = job->NsavInoise; /* saj resume rawfile fix*/ error = SPfrontEnd->OUTpBeginPlot (NULL, NULL, NULL, NULL, 0, 666, NULL, 666, &(data->NplotPtr)); /*saj*/ } switch (job->NstpType) { case DECADE: case OCTAVE: freqTol = job->NfreqDelta * job->NstopFreq * ckt->CKTreltol; break; case LINEAR: freqTol = job->NfreqDelta * ckt->CKTreltol; break; default: return(E_BADPARM); } data->lstFreq = data->freq; /* do the noise analysis over all frequencies */ while (data->freq <= job->NstopFreq + freqTol) { if(SPfrontEnd->IFpauseTest()) { job->NsavFstp = step; /* save our results */ job->NsavOnoise = data->outNoiz; /* up until now */ job->NsavInoise = data->inNoise; return (E_PAUSE); } ckt->CKTomega = 2.0 * M_PI * data->freq; ckt->CKTmode = (ckt->CKTmode & MODEUIC) | MODEAC | MODEACNOISE; ckt->noise_input = inst; /* * solve the original AC system to get the transfer * function between the input and output */ NIacIter(ckt); realVal = ckt->CKTrhsOld [posOutNode] - ckt->CKTrhsOld [negOutNode]; imagVal = ckt->CKTirhsOld [posOutNode] - ckt->CKTirhsOld [negOutNode]; data->GainSqInv = 1.0 / MAX(((realVal*realVal) + (imagVal*imagVal)),N_MINGAIN); data->lnGainInv = log(data->GainSqInv); /* set up a block of "common" data so we don't have to * recalculate it for every device */ data->delFreq = data->freq - data->lstFreq; data->lnFreq = log(MAX(data->freq,N_MINLOG)); data->lnLastFreq = log(MAX(data->lstFreq,N_MINLOG)); data->delLnFreq = data->lnFreq - data->lnLastFreq; if ((job->NStpsSm != 0) && ((step % (job->NStpsSm)) == 0)) { data->prtSummary = TRUE; } else { data->prtSummary = FALSE; } /* data->outNumber = 1; */ data->outNumber = 0; /* the frequency will NOT be stored in array[0] as before; instead, * it will be given in refVal.rValue (see later) */ NInzIter(ckt,posOutNode,negOutNode); /* solve the adjoint system */ /* now we use the adjoint system to calculate the noise * contributions of each generator in the circuit */ error = CKTnoise(ckt,N_DENS,N_CALC,data); if (error) return(error); data->lstFreq = data->freq; /* update the frequency */ switch (job->NstpType) { case DECADE: case OCTAVE: data->freq *= job->NfreqDelta; break; case LINEAR: data->freq += job->NfreqDelta; break; default: return(E_INTERN); } step++; if ((job->NnumSteps == 1) && (job->NstpType == LINEAR)) break; } error = CKTnoise(ckt,N_DENS,N_CLOSE,data); if (error) return(error); data->numPlots = 0; data->outNumber = 0; if (job->NstartFreq != job->NstopFreq) { error = CKTnoise(ckt,INT_NOIZ,N_OPEN,data); if (error) return(error); if (src_type == SV_VOLTAGE) fixme_inoise_type = data->squared ? SV_SQR_VOLTAGE : SV_VOLTAGE; else fixme_inoise_type = data->squared ? SV_SQR_CURRENT : SV_CURRENT; fixme_onoise_type = data->squared ? SV_SQR_VOLTAGE : SV_VOLTAGE; if (!data->squared) for (i = 0; i < data->numPlots; i++) data->squared_value[i] = ciprefix("inoise", data->namelist[i]) || ciprefix("onoise", data->namelist[i]); SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob, data->squared ? "Integrated Noise - V^2 or A^2" : "Integrated Noise", NULL, 0, data->numPlots, data->namelist, IF_REAL, &(data->NplotPtr)); error = CKTnoise(ckt,INT_NOIZ,N_CALC,data); if (error) return(error); error = CKTnoise(ckt,INT_NOIZ,N_CLOSE,data); if (error) return(error); } FREE(data); return(OK); } tmpk8ny_4pz/src/spicelib/analysis/traninit.c0000644000175000017500000000235413546075722021364 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/trandefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/cpextern.h" /* * this used to be in setup, but we need it here now * (must be done after mode is set as below) */ int TRANinit(CKTcircuit *ckt, JOB *anal) { TRANan *job = (TRANan *) anal; ckt->CKTfinalTime = job->TRANfinalTime; ckt->CKTstep = job->TRANstep; ckt->CKTinitTime = job->TRANinitTime; ckt->CKTmaxStep = job->TRANmaxStep; /* Maximum step size is limited to tstep given by .tran tstep tstop >. May be overridden to a value (tstop - tstart)/50 by 'set nostepsizelimit'. Both may be overriden by setting tmax. */ if(ckt->CKTmaxStep == 0) { if ((ckt->CKTstep < ( ckt->CKTfinalTime - ckt->CKTinitTime )/50.0) && !cp_getvar("nostepsizelimit", CP_BOOL, NULL, 0)) ckt->CKTmaxStep = ckt->CKTstep; else ckt->CKTmaxStep = ( ckt->CKTfinalTime - ckt->CKTinitTime )/50.0; } ckt->CKTdelmin = 1e-11*ckt->CKTmaxStep; /* XXX */ ckt->CKTmode = job->TRANmode; return OK; } tmpk8ny_4pz/src/spicelib/analysis/transetp.c0000644000175000017500000000416013546075722021371 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/trandefs.h" #include "ngspice/cktdefs.h" #include "analysis.h" /* ARGSUSED */ int TRANsetParm(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value) { TRANan *job = (TRANan *) anal; NG_IGNORE(ckt); switch(which) { case TRAN_TSTOP: if (value->rValue <= 0.0) { errMsg = copy("TSTOP is invalid, must be greater than zero."); job->TRANfinalTime = 1.0; return(E_PARMVAL); } job->TRANfinalTime = value->rValue; break; case TRAN_TSTEP: if (value->rValue <= 0.0) { errMsg = copy( "TSTEP is invalid, must be greater than zero." ); job->TRANstep = 1.0; return(E_PARMVAL); } job->TRANstep = value->rValue; break; case TRAN_TSTART: if (value->rValue >= job->TRANfinalTime) { errMsg = copy("TSTART is invalid, must be less than TSTOP."); job->TRANinitTime = 0.0; return(E_PARMVAL); } job->TRANinitTime = value->rValue; break; case TRAN_TMAX: job->TRANmaxStep = value->rValue; break; case TRAN_UIC: if(value->iValue) { job->TRANmode |= MODEUIC; } break; default: return(E_BADPARM); } return(OK); } static IFparm TRANparms[] = { { "tstart", TRAN_TSTART, IF_SET|IF_REAL, "starting time" }, { "tstop", TRAN_TSTOP, IF_SET|IF_REAL, "ending time" }, { "tstep", TRAN_TSTEP, IF_SET|IF_REAL, "time step" }, { "tmax", TRAN_TMAX, IF_SET|IF_REAL, "maximum time step" }, { "uic", TRAN_UIC, IF_SET|IF_FLAG, "use initial conditions" }, }; SPICEanalysis TRANinfo = { { "TRAN", "Transient analysis", NUMELEMS(TRANparms), TRANparms }, sizeof(TRANan), TIMEDOMAIN, 1, TRANsetParm, TRANaskQuest, TRANinit, DCtran }; tmpk8ny_4pz/src/spicelib/analysis/cktpmnam.c0000644000175000017500000000271313546075722021345 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* * CKTpModName() * * Take a parameter by Name and set it on the specified model */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/devdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/sperror.h" /* ARGSUSED */ int CKTpModName(char *parm, IFvalue *val, CKTcircuit *ckt, int type, IFuid name, GENmodel **modfast) /* the name of the parameter to set */ /* the parameter union containing the value to set */ /* the circuit this model is a member of */ /* the device type code to the model being parsed */ /* the name of the model being parsed */ /* direct pointer to model being parsed */ { int error; /* int to store evaluate error return codes in */ int i; NG_IGNORE(name); for(i = 0 ; i < *(DEVices[type]->DEVpublic.numModelParms) ; i++) { if(!strcmp(parm, DEVices[type]->DEVpublic.modelParms[i].keyword)) { error = CKTmodParam(ckt, *modfast, DEVices[type]->DEVpublic.modelParms[i].id, val, NULL); if(error) return(error); break; } } if(i == *(DEVices[type]->DEVpublic.numModelParms)) { return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/analysis/tfanal.c0000644000175000017500000001202113546075722020771 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles **********/ /* subroutine to do DC Transfer Function analysis */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/smpdefs.h" #include "ngspice/tfdefs.h" /* ARGSUSED */ int TFanal(CKTcircuit *ckt, int restart) /* forced restart flag */ { TFan *job = (TFan *) ckt->CKTcurJob; int size; int insrc = 0, outsrc = 0; double outputs[3]; IFvalue outdata; /* structure for output data vector, will point to * outputs vector above */ IFvalue refval; /* structure for 'reference' value (not used here) */ int error; int converged; int i; runDesc *plotptr = NULL; /* pointer to out plot */ GENinstance *ptr = NULL; IFuid uids[3]; char *name; #define tfuid (uids[0]) /* unique id for the transfer function output */ #define inuid (uids[1]) /* unique id for the transfer function input imp. */ #define outuid (uids[2]) /* unique id for the transfer function out. imp. */ NG_IGNORE(restart); /* first, find the operating point */ converged = CKTop(ckt, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITJCT, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITFLOAT, ckt->CKTdcMaxIter); ptr = CKTfndDev(ckt, job->TFinSrc); if (!ptr || ptr->GENmodPtr->GENmodType < 0) { SPfrontEnd->IFerrorf (ERR_WARNING, "Transfer function source %s not in circuit", job->TFinSrc); job->TFinIsV = 0; job->TFinIsI = 0; return E_NOTFOUND; } if (ptr->GENmodPtr->GENmodType == CKTtypelook("Vsource")) { job->TFinIsV = 1; job->TFinIsI = 0; } else if (ptr->GENmodPtr->GENmodType == CKTtypelook("Isource")) { job->TFinIsV = 0; job->TFinIsI = 1; } else { SPfrontEnd->IFerrorf (ERR_WARNING, "Transfer function source %s not of proper type", job->TFinSrc); return E_NOTFOUND; } size = SMPmatSize(ckt->CKTmatrix); for(i=0;i<=size;i++) { ckt->CKTrhs[i] = 0; } if (job->TFinIsI) { ckt->CKTrhs[GENnode(ptr)[0]] -= 1; ckt->CKTrhs[GENnode(ptr)[1]] += 1; } else { insrc = CKTfndBranch(ckt, job->TFinSrc); ckt->CKTrhs[insrc] += 1; } SMPsolve(ckt->CKTmatrix,ckt->CKTrhs,ckt->CKTrhsSpare); ckt->CKTrhs[0]=0; /* make a UID for the transfer function output */ SPfrontEnd->IFnewUid (ckt, &tfuid, NULL, "Transfer_function", UID_OTHER, NULL); /* make a UID for the input impedance */ SPfrontEnd->IFnewUid (ckt, &inuid, job->TFinSrc, "Input_impedance", UID_OTHER, NULL); /* make a UID for the output impedance */ if (job->TFoutIsI) { SPfrontEnd->IFnewUid (ckt, &outuid, job->TFoutSrc ,"Output_impedance", UID_OTHER, NULL); } else { name = tprintf("output_impedance_at_%s", job->TFoutName); SPfrontEnd->IFnewUid (ckt, &outuid, NULL, name, UID_OTHER, NULL); } error = SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob, job->JOBname, NULL, 0, 3, uids, IF_REAL, &plotptr); if(error) return(error); /*find transfer function */ if (job->TFoutIsV) { outputs[0] = ckt->CKTrhs[job->TFoutPos->number] - ckt->CKTrhs[job->TFoutNeg->number]; } else { outsrc = CKTfndBranch(ckt, job->TFoutSrc); outputs[0] = ckt->CKTrhs[outsrc]; } /* now for input resistance */ if (job->TFinIsI) { outputs[1] = ckt->CKTrhs[GENnode(ptr)[1]] - ckt->CKTrhs[GENnode(ptr)[0]]; } else { if(fabs(ckt->CKTrhs[insrc])<1e-20) { outputs[1]=1e20; } else { outputs[1] = -1/ckt->CKTrhs[insrc]; } } if (job->TFoutIsI && (job->TFoutSrc == job->TFinSrc)) { outputs[2]=outputs[1]; goto done; /* no need to compute output resistance when it is the same as the input */ } /* now for output resistance */ for(i=0;i<=size;i++) { ckt->CKTrhs[i] = 0; } if (job->TFoutIsV) { ckt->CKTrhs[job->TFoutPos->number] -= 1; ckt->CKTrhs[job->TFoutNeg->number] += 1; } else { ckt->CKTrhs[outsrc] += 1; } SMPsolve(ckt->CKTmatrix,ckt->CKTrhs,ckt->CKTrhsSpare); ckt->CKTrhs[0]=0; if (job->TFoutIsV) { outputs[2] = ckt->CKTrhs[job->TFoutNeg->number] - ckt->CKTrhs[job->TFoutPos->number]; } else { outputs[2] = 1/MAX(1e-20,ckt->CKTrhs[outsrc]); } done: outdata.v.numValue=3; outdata.v.vec.rVec=outputs; refval.rValue = 0; SPfrontEnd->OUTpData (plotptr, &refval, &outdata); SPfrontEnd->OUTendPlot (plotptr); return(OK); } tmpk8ny_4pz/src/spicelib/analysis/cktsgen.c0000644000175000017500000001230613546075722021170 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. **********/ #include "ngspice/ngspice.h" #include "ngspice/gendefs.h" #include "ngspice/devdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "ngspice/sensgen.h" /* XXX */ extern char *Sfilter; int set_model(sgen *); int set_param(sgen *); int set_inst(sgen *); int set_dev(sgen *); sgen * sgen_init(CKTcircuit *ckt, int is_dc) { sgen *sg; sg = TMALLOC(sgen, 1); sg->param = 99999; sg->is_instparam = 0; sg->dev = -1; sg->istate = 0; sg->ckt = ckt; sg->devlist = ckt->CKThead; sg->instance = sg->first_instance = sg->next_instance = NULL; sg->model = sg->next_model = NULL; sg->ptable = NULL; sg->is_dc = is_dc; sg->is_principle = 0; sg->is_q = 0; sg->is_zerook = 0; sg->value = 0.0; sgen_next(&sg); /* get the ball rolling XXX check return val? */ return sg; } int sgen_next(sgen **xsg) { sgen *sg = *xsg; int good, done; int i; done = 0; i = sg->dev; do { if (sg->instance) { if (sg->ptable) { do { sg->param += 1; } while (sg->param < sg->max_param && !set_param(sg)); } else { sg->max_param = -1; } if (sg->param < sg->max_param) { done = 1; } else if (!sg->is_instparam) { /* Try instance parameters now */ sg->is_instparam = 1; sg->param = -1; sg->max_param = *DEVices[i]->DEVpublic.numInstanceParms; sg->ptable = DEVices[i]->DEVpublic.instanceParms; } else { sg->is_principle = 0; sg->instance->GENnextInstance = sg->next_instance; sg->instance->GENstate = sg->istate; sg->instance = NULL; } } else if (sg->model) { /* Find the first/next good instance for this model */ for (good = 0; !good && sg->next_instance; good = set_inst(sg)) { sg->instance = sg->next_instance; sg->next_instance = sg->instance->GENnextInstance; } if (good) { sg->is_principle = 0; sg->istate = sg->instance->GENstate; sg->instance->GENnextInstance = NULL; sg->model->GENinstances = sg->instance; if (DEVices[i]->DEVpublic.modelParms) { sg->max_param = *DEVices[i]->DEVpublic. numModelParms; sg->ptable = DEVices[i]->DEVpublic. modelParms; } else { sg->ptable = NULL; } sg->param = -1; sg->is_instparam = 0; } else { /* No good instances of this model */ sg->model->GENinstances = sg->first_instance; sg->model->GENnextModel = sg->next_model; sg->model = NULL; } } else if (i >= 0) { /* Find the first/next good model for this device */ for (good = 0; !good && sg->next_model; good = set_model(sg)) { sg->model = sg->next_model; sg->next_model = sg->model->GENnextModel; } if (good) { sg->model->GENnextModel = NULL; sg->devlist[i] = sg->model; if (DEVices[i]->DEVpublic.modelParms) { sg->max_param = *DEVices[i]->DEVpublic. numModelParms; sg->ptable = DEVices[i]->DEVpublic. modelParms; } else { sg->ptable = NULL; } sg->next_instance = sg->first_instance = sg->model->GENinstances; } else { /* No more good models for this device */ sg->devlist[i] = sg->first_model; i = -1; /* Try the next good device */ } } else if (i < DEVmaxnum && sg->dev < DEVmaxnum) { /* Find the next good device in this circuit */ do sg->dev++; while (sg->dev < DEVmaxnum && sg->devlist[sg->dev] && !set_dev(sg)); i = sg->dev; if (i >= DEVmaxnum) /* PN: Segafult if not = */ done = 1; sg->first_model = sg->next_model = (idevlist[i] : NULL; } else { done = 1; } } while (!done); if (sg->dev >= DEVmaxnum) { FREE(sg); *xsg = NULL; } return 1; } int set_inst(sgen *sg) { NG_IGNORE(sg); return 1; } int set_model(sgen *sg) { NG_IGNORE(sg); return 1; } int set_dev(sgen *sg) { NG_IGNORE(sg); return 1; } int set_param(sgen *sg) { IFvalue ifval; if (!sg->ptable[sg->param].keyword) return 0; if (Sfilter && strncmp(sg->ptable[sg->param].keyword, Sfilter, strlen(Sfilter))) return 0; if ((sg->ptable[sg->param].dataType & (IF_SET|IF_ASK|IF_REAL|IF_VECTOR|IF_REDUNDANT|IF_NONSENSE)) != (IF_SET|IF_ASK|IF_REAL)) return 0; if (sg->is_dc && (sg->ptable[sg->param].dataType & (IF_AC | IF_AC_ONLY))) return 0; if ((sg->ptable[sg->param].dataType & IF_CHKQUERY) && !sg->is_q) return 0; if (sens_getp(sg, sg->ckt, &ifval)) return 0; if (fabs(ifval.rValue) < 1e-30) { if (sg->ptable[sg->param].dataType & IF_SETQUERY) sg->is_q = 0; if (!sg->is_zerook && !(sg->ptable[sg->param].dataType & IF_PRINCIPAL)) return 0; } else if (sg->ptable[sg->param].dataType & (IF_SETQUERY|IF_ORQUERY)) sg->is_q = 1; if (sg->ptable[sg->param].dataType & IF_PRINCIPAL) sg->is_principle += 1; sg->value = ifval.rValue; return 1; } #ifdef notdef void sgen_suspend(sgen *sg) { sg->devlist[sg->dev] = sg->first_model; sg->model->GENnextModel = sg->next_model; sg->instance->GENnextInstance = sg->next_instance; sg->model->GENinstances = sg->first_instance; } void sgen_restore(sgen *sg) { sg->devlist[sg->dev] = sg->model; sg->model->GENnextModel = NULL; sg->instance->GENnextInstance = NULL; sg->model->GENinstances = sg->instance; } #endif tmpk8ny_4pz/src/spicelib/analysis/cktmkcur.c0000644000175000017500000000167613546075722021365 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* CKTmkCur * make the given name a 'node' of type current in the * specified circuit */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/cktdefs.h" /* ARGSUSED */ int CKTmkCur(CKTcircuit *ckt, CKTnode **node, IFuid basename, char *suffix) { IFuid uid; int error; CKTnode *mynode; CKTnode *checknode; error = CKTmkNode(ckt,&mynode); if(error) return(error); checknode = mynode; error = SPfrontEnd->IFnewUid (ckt, &uid, basename, suffix, UID_SIGNAL, &checknode); if(error) { FREE(mynode); if(node) *node = checknode; return(error); } mynode->name = uid; mynode->type = SP_CURRENT; if(node) *node = mynode; error = CKTlinkEq(ckt,mynode); return(error); } tmpk8ny_4pz/src/spicelib/analysis/cktic.c0000644000175000017500000000256613546075722020636 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" int CKTic(CKTcircuit *ckt) { int error; int size; int i; CKTnode *node; size = SMPmatSize(ckt->CKTmatrix); for (i=0;i<=size;i++) { ckt->CKTrhs[i]=0; } for(node = ckt->CKTnodes;node != NULL; node = node->next) { if(node->nsGiven) { node->ptr = SMPmakeElt(ckt->CKTmatrix,node->number,node->number); if(node->ptr == NULL) return(E_NOMEM); ckt->CKThadNodeset = 1; ckt->CKTrhs[node->number] = node->nodeset; } if(node->icGiven) { if(! ( node->ptr)) { node->ptr = SMPmakeElt(ckt->CKTmatrix,node->number, node->number); if(node->ptr == NULL) return(E_NOMEM); } ckt->CKTrhs[node->number] = node->ic; } } if(ckt->CKTmode & MODEUIC) { for (i=0;iDEVsetic && ckt->CKThead[i] ) { error = DEVices[i]->DEVsetic (ckt->CKThead[i], ckt); if(error) return(error); } } } return(OK); } tmpk8ny_4pz/src/spicelib/analysis/cktnewan.c0000644000175000017500000000201613546075722021341 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/tskdefs.h" #include "ngspice/jobdefs.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/cktdefs.h" #include "analysis.h" extern SPICEanalysis *analInfo[]; /* ARGSUSED */ int CKTnewAnal(CKTcircuit *ckt, int type, IFuid name, JOB **analPtr, TSKtask *taskPtr) { NG_IGNORE(ckt); if(type==0) { /* special case for analysis type 0 == option card */ *analPtr = &(taskPtr->taskOptions); /* pointer to the task itself */ (*analPtr)->JOBname = name; (*analPtr)->JOBtype = type; return(OK); /* doesn't need to be created */ } *analPtr = (JOB *) tmalloc((size_t) analInfo[type]->size); if(*analPtr==NULL) return(E_NOMEM); (*analPtr)->JOBname = name; (*analPtr)->JOBtype = type; (*analPtr)->JOBnextJob = taskPtr->jobs; taskPtr->jobs = *analPtr; return(OK); } tmpk8ny_4pz/src/spicelib/analysis/cktmkvol.c0000644000175000017500000000165113546075722021365 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* CKTmkVolt * make the given name a 'node' of type voltage in the * specified circuit */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/cktdefs.h" /* ARGSUSED */ int CKTmkVolt(CKTcircuit *ckt, CKTnode **node, IFuid basename, char *suffix) { IFuid uid; int error; CKTnode *mynode; CKTnode *checknode; error = CKTmkNode(ckt,&mynode); if(error) return(error); checknode = mynode; error = SPfrontEnd->IFnewUid (ckt, &uid, basename, suffix, UID_SIGNAL, &checknode); if(error) { FREE(mynode); if(node) *node = checknode; return(error); } mynode->name = uid; mynode->type = SP_VOLTAGE; if(node) *node = mynode; error = CKTlinkEq(ckt,mynode); return(error); } tmpk8ny_4pz/src/spicelib/analysis/cktpzld.c0000644000175000017500000000231313546075722021202 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #include "ngspice/ngspice.h" #include "ngspice/pzdefs.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" int CKTpzLoad(CKTcircuit *ckt, SPcomplex *s) { PZAN *job = (PZAN *) ckt->CKTcurJob; int error; int i; for (i = 0; i <= SMPmatSize(ckt->CKTmatrix); i++) { ckt->CKTrhs[i] = 0.0; ckt->CKTirhs[i] = 0.0; } SMPcClear(ckt->CKTmatrix); for (i = 0; i < DEVmaxnum; i++) { if (DEVices[i] && DEVices[i]->DEVpzLoad != NULL && ckt->CKThead[i] != NULL) { error = DEVices[i]->DEVpzLoad (ckt->CKThead[i], ckt, s); if(error) return(error); } } if (job->PZbalance_col && job->PZsolution_col) { SMPcAddCol(ckt->CKTmatrix, job->PZbalance_col, job->PZsolution_col); /* AC sources ?? XXX */ } if (job->PZsolution_col) { SMPcZeroCol(ckt->CKTmatrix, job->PZsolution_col); } /* Driving function (current source) */ if (job->PZdrive_pptr) *job->PZdrive_pptr = 1.0; if (job->PZdrive_nptr) *job->PZdrive_nptr = -1.0; return(OK); } tmpk8ny_4pz/src/spicelib/analysis/cktfnode.c0000644000175000017500000000120613546075722021324 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* CKTfndNode * find the given node given its name and return the node pointer */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/cktdefs.h" /* ARGSUSED */ int CKTfndNode(CKTcircuit *ckt, CKTnode **node, IFuid name) { CKTnode *here; for (here = ckt->CKTnodes; here; here = here->next) { if(here->name == name) { if(node) *node = here; return(OK); } } return(E_NOTFOUND); } tmpk8ny_4pz/src/spicelib/analysis/cktload.c0000644000175000017500000001340613546075722021155 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* */ /* CKTload(ckt) * this is a driver program to iterate through all the various * load functions provided for the circuit elements in the * given circuit */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #ifdef XSPICE #include "ngspice/enh.h" /* gtri - add - wbk - 11/26/90 - add include for MIF global data */ #include "ngspice/mif.h" /* gtri - end - wbk - 11/26/90 */ #endif static int ZeroNoncurRow(SMPmatrix *matrix, CKTnode *nodes, int rownum); int CKTload(CKTcircuit *ckt) { int i; int size; double startTime; CKTnode *node; int error; #ifdef STEPDEBUG int noncon; #endif /* STEPDEBUG */ #ifdef XSPICE /* gtri - begin - Put resistors to ground at all nodes */ /* SMPmatrix *matrix; maschmann : deleted , because unused */ double gshunt; int num_nodes; /* gtri - begin - Put resistors to ground at all nodes */ #endif startTime = SPfrontEnd->IFseconds(); size = SMPmatSize(ckt->CKTmatrix); for (i = 0; i <= size; i++) { ckt->CKTrhs[i] = 0; } SMPclear(ckt->CKTmatrix); #ifdef STEPDEBUG noncon = ckt->CKTnoncon; #endif /* STEPDEBUG */ for (i = 0; i < DEVmaxnum; i++) { if (DEVices[i] && DEVices[i]->DEVload && ckt->CKThead[i]) { error = DEVices[i]->DEVload (ckt->CKThead[i], ckt); if (ckt->CKTnoncon) ckt->CKTtroubleNode = 0; #ifdef STEPDEBUG if (noncon != ckt->CKTnoncon) { printf("device type %s nonconvergence\n", DEVices[i]->DEVpublic.name); noncon = ckt->CKTnoncon; } #endif /* STEPDEBUG */ if (error) return(error); } } #ifdef XSPICE /* gtri - add - wbk - 11/26/90 - reset the MIF init flags */ /* init is set by CKTinit and should be true only for first load call */ g_mif_info.circuit.init = MIF_FALSE; /* anal_init is set by CKTdoJob and is true for first call */ /* of a particular analysis type */ g_mif_info.circuit.anal_init = MIF_FALSE; /* gtri - end - wbk - 11/26/90 */ /* gtri - begin - Put resistors to ground at all nodes. */ /* Value of resistor is set by new "rshunt" option. */ if (ckt->enh->rshunt_data.enabled) { gshunt = ckt->enh->rshunt_data.gshunt; num_nodes = ckt->enh->rshunt_data.num_nodes; for (i = 0; i < num_nodes; i++) { *(ckt->enh->rshunt_data.diag[i]) += gshunt; } } /* gtri - end - Put resistors to ground at all nodes */ #endif if (ckt->CKTmode & MODEDC) { /* consider doing nodeset & ic assignments */ if (ckt->CKTmode & (MODEINITJCT | MODEINITFIX)) { /* do nodesets */ for (node = ckt->CKTnodes; node; node = node->next) { if (node->nsGiven) { if (ZeroNoncurRow(ckt->CKTmatrix, ckt->CKTnodes, node->number)) { ckt->CKTrhs[node->number] = 1.0e10 * node->nodeset * ckt->CKTsrcFact; *(node->ptr) = 1e10; } else { ckt->CKTrhs[node->number] = node->nodeset * ckt->CKTsrcFact; *(node->ptr) = 1; } /* DAG: Original CIDER fix. If above fix doesn't work, * revert to this. */ /* * ckt->CKTrhs[node->number] += 1.0e10 * node->nodeset; * *(node->ptr) += 1.0e10; */ } } } if ((ckt->CKTmode & MODETRANOP) && (!(ckt->CKTmode & MODEUIC))) { for (node = ckt->CKTnodes; node; node = node->next) { if (node->icGiven) { if (ZeroNoncurRow(ckt->CKTmatrix, ckt->CKTnodes, node->number)) { /* Original code: ckt->CKTrhs[node->number] += 1.0e10 * node->ic; */ ckt->CKTrhs[node->number] = 1.0e10 * node->ic * ckt->CKTsrcFact; *(node->ptr) += 1.0e10; } else { /* Original code: ckt->CKTrhs[node->number] = node->ic; */ ckt->CKTrhs[node->number] = node->ic*ckt->CKTsrcFact; /* AlansFixes */ *(node->ptr) = 1; } /* DAG: Original CIDER fix. If above fix doesn't work, * revert to this. */ /* * ckt->CKTrhs[node->number] += 1.0e10 * node->ic; * *(node->ptr) += 1.0e10; */ } } } } /* SMPprint(ckt->CKTmatrix, stdout); if you want to debug, this is a good place to start ... */ ckt->CKTstat->STATloadTime += SPfrontEnd->IFseconds()-startTime; return(OK); } static int ZeroNoncurRow(SMPmatrix *matrix, CKTnode *nodes, int rownum) { CKTnode *n; double *x; int currents; currents = 0; for (n = nodes; n; n = n->next) { x = (double *) SMPfindElt(matrix, rownum, n->number, 0); if (x) { if (n->type == SP_CURRENT) currents = 1; else *x = 0.0; } } return currents; } tmpk8ny_4pz/src/spicelib/analysis/cktnum2n.c0000644000175000017500000000112513546075722021270 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* CKTnum2nod * find the given node given its name and return the node pointer */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/cktdefs.h" /* ARGSUSED */ CKTnode * CKTnum2nod(CKTcircuit *ckt, int node) { CKTnode *here; for (here = ckt->CKTnodes; here; here = here->next) { if(here->number == node) { return(here); } } return(NULL); } tmpk8ny_4pz/src/spicelib/analysis/cktfbran.c0000644000175000017500000000135213546075722021323 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* CKTfndBranch(ckt,name) * this is a driver program to iterate through all the various * findBranch functions provided for the circuit elements in the * given circuit */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" int CKTfndBranch(CKTcircuit *ckt, IFuid name) { int i; int j; for (i=0;iDEVfindBranch && ckt->CKThead[i] ) { j = DEVices[i]->DEVfindBranch (ckt, ckt->CKThead[i], name); if(j != 0) return(j); } } return(0); } tmpk8ny_4pz/src/spicelib/analysis/cktnames.c0000644000175000017500000000163313546075722021340 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles **********/ /* * CKTnames(ckt) * output information on all circuit nodes/equations * */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" int CKTnames(CKTcircuit *ckt, int *numNames, IFuid **nameList) { CKTnode *here; int i; *numNames = ckt->CKTmaxEqNum-1; *nameList = TMALLOC(IFuid, *numNames); if (*numNames && (*nameList) == NULL) return(E_NOMEM); i=0; for (here = ckt->CKTnodes->next; here; here = here->next) { (*nameList) [i++] = here->name; } return(OK); } int CKTdnames(CKTcircuit *ckt) { CKTnode *here; for (here = ckt->CKTnodes->next; here; here = here->next) { printf("%03d: %s\n", here->number, here->name); } return(OK); } tmpk8ny_4pz/src/spicelib/analysis/dcpss.c0000644000175000017500000017017713546075722020661 0ustar carstencarsten/********** Author: 2010-05 Stefano Perticaroli ``spertica'' First Review: 2012-02 Francesco Lannutti and Stefano Perticaroli ``spertica'' Second Review: 2012-10 Stefano Perticaroli ``spertica'' and Francesco Lannutti **********/ /* Include files for the PSS analysis */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "cktaccept.h" #include "ngspice/pssdefs.h" #include "ngspice/sperror.h" #include "ngspice/fteext.h" #ifdef XSPICE /* gtri - add - wbk - Add headers */ #include "ngspice/miftypes.h" #include "ngspice/evt.h" #include "ngspice/enh.h" #include "ngspice/mif.h" #include "ngspice/evtproto.h" #include "ngspice/ipctiein.h" /* gtri - end - wbk - Add headers */ #endif #ifdef CLUSTER #include "ngspice/cluster.h" #endif #define INIT_STATS() \ do { \ startTime = SPfrontEnd->IFseconds(); \ startIters = ckt->CKTstat->STATnumIter; \ startdTime = ckt->CKTstat->STATdecompTime; \ startsTime = ckt->CKTstat->STATsolveTime; \ startlTime = ckt->CKTstat->STATloadTime; \ startkTime = ckt->CKTstat->STATsyncTime; \ } while(0) #define UPDATE_STATS(analysis) \ do { \ ckt->CKTcurrentAnalysis = analysis; \ ckt->CKTstat->STATtranTime += SPfrontEnd->IFseconds() - startTime; \ ckt->CKTstat->STATtranIter += ckt->CKTstat->STATnumIter - startIters; \ ckt->CKTstat->STATtranDecompTime += ckt->CKTstat->STATdecompTime - startdTime; \ ckt->CKTstat->STATtranSolveTime += ckt->CKTstat->STATsolveTime - startsTime; \ ckt->CKTstat->STATtranLoadTime += ckt->CKTstat->STATloadTime - startlTime; \ ckt->CKTstat->STATtranSyncTime += ckt->CKTstat->STATsyncTime - startkTime; \ } while(0) /* Define some useful macro */ #define HISTORY 1024 #define GF_LAST 313 static int DFT(long int, int, double *, double *, double *, double, double *, double *, double *, double *, double *); int DCpss(CKTcircuit *ckt, int restart) /* forced restart flag */ { PSSan *job = (PSSan *) ckt->CKTcurJob; int i; double olddelta; double delta; double newdelta; double *temp; double startdTime; double startsTime; double startlTime; double startkTime; double startTime; int startIters; int converged; int firsttime; int error; int save_order; long save_mode; IFuid timeUid; IFuid *nameList; int numNames; double maxstepsize = 0.0; int ltra_num; CKTnode *node; #ifdef XSPICE /* gtri - add - wbk - 12/19/90 - Add IPC stuff */ Ipc_Boolean_t ipc_firsttime = IPC_TRUE; Ipc_Boolean_t ipc_secondtime = IPC_FALSE; Ipc_Boolean_t ipc_delta_cut = IPC_FALSE; double ipc_last_time = 0.0; double ipc_last_delta = 0.0; /* gtri - end - wbk - 12/19/90 - Add IPC stuff */ #endif #ifdef CLUSTER int redostep; #endif /* New variables */ int j, oscnNode; IFuid freqUid; enum {STABILIZATION, SHOOTING, PSS} pss_state = STABILIZATION; double err = 0, predsum = 0 ; double time_temp = 0, gf_history [HISTORY], rr_history [HISTORY], predsum_history [HISTORY], nextstep ; int msize, shooting_cycle_counter = 0; double *RHS_copy_se, *RHS_copy_der, *RHS_derivative, *pred, err_0 = HUGE_VAL ; double time_err_min_1 = 0, time_err_min_0 = 0, err_min_0 = HUGE_VAL, err_min_1 = 0 ; double err_1 = 0, err_max = HUGE_VAL ; int pss_points_cycle = 0, dynamic_test = 0 ; double gf_last_0 = HUGE_VAL, gf_last_1 = GF_LAST ; double thd = 0 ; double *psstimes, *pssvalues; double *RHS_max, *RHS_min, *err_conv ; /* Francesco Lannutti's MOD */ /* Stuff needed by frequency estimation reiteration, based on the DFT result */ int position; double max_freq; /* Print some useful information */ fprintf (stderr, "Periodic Steady State Analysis Started\n\n") ; fprintf (stderr, "PSS Guessed Frequency %g\n", ckt->CKTguessedFreq) ; fprintf (stderr, "PSS Points %ld\n", ckt->CKTpsspoints) ; fprintf (stderr, "PSS Harmonics number %d\n", ckt->CKTharms) ; fprintf (stderr, "PSS Steady Coefficient %g\n", ckt->CKTsteady_coeff) ; fprintf (stderr, "PSS sc_iter %d\n", ckt->CKTsc_iter) ; fprintf (stderr, "PSS Stabilization Time %g\n", ckt->CKTstabTime) ; oscnNode = job->PSSoscNode->number ; /* Variables and memory initialization */ for (i = 0 ; i < HISTORY ; i++) { rr_history [i] = 0.0 ; gf_history [i] = 0.0 ; } msize = SMPmatSize (ckt->CKTmatrix) ; RHS_copy_se = TMALLOC (double, msize) ; /* Set the current RHS reference for next Shooting Evaluation */ RHS_copy_der = TMALLOC (double, msize) ; /* Used to compute current Derivative */ RHS_derivative = TMALLOC (double, msize) ; pred = TMALLOC (double, msize) ; RHS_max = TMALLOC (double, msize) ; RHS_min = TMALLOC (double, msize) ; err_conv = TMALLOC (double, msize) ; for (i = 0 ; i < msize ; i++) { RHS_copy_se [i] = 0.0 ; RHS_copy_der [i] = 0.0 ; RHS_derivative [i] = 0.0 ; pred [i] = 0.0 ; } psstimes = TMALLOC (double, ckt->CKTpsspoints + 1) ; pssvalues = TMALLOC (double, msize * (ckt->CKTpsspoints + 1)) ; for (i = 0 ; i < ckt->CKTpsspoints + 1 ; i++) psstimes [i] = 0.0 ; for (i = 0 ; i < msize * (ckt->CKTpsspoints + 1) ; i++) pssvalues [i] = 0.0 ; /* Delta timestep and circuit time setup */ delta = ckt->CKTstep ; ckt->CKTtime = ckt->CKTinitTime ; ckt->CKTfinalTime = ckt->CKTstabTime ; /* Starting PSS Algorithm, based on Transient Analysis */ if(restart || ckt->CKTtime == 0) { delta = MIN (1 / ckt->CKTguessedFreq / 100, ckt->CKTstep) ; #ifdef STEPDEBUG fprintf (stderr, "delta = %g finalTime/200: %g CKTstep: %g\n", delta, ckt->CKTfinalTime / 200, ckt->CKTstep) ; #endif /* begin LTRA code addition */ if (ckt->CKTtimePoints != NULL) FREE(ckt->CKTtimePoints); if (ckt->CKTstep >= ckt->CKTmaxStep) maxstepsize = ckt->CKTstep; else maxstepsize = ckt->CKTmaxStep; ckt->CKTsizeIncr = 10; ckt->CKTtimeIndex = -1; /* before the DC soln has been stored */ ckt->CKTtimeListSize = (int)(1 / ckt->CKTguessedFreq / maxstepsize + 0.5); ltra_num = CKTtypelook("LTRA"); if (ltra_num >= 0 && ckt->CKThead[ltra_num] != NULL) ckt->CKTtimePoints = TMALLOC(double, ckt->CKTtimeListSize); /* end LTRA code addition */ /* Breakpoints initialization */ if(ckt->CKTbreaks) FREE(ckt->CKTbreaks); ckt->CKTbreaks = TMALLOC(double, 2); if(ckt->CKTbreaks == NULL) return(E_NOMEM); ckt->CKTbreaks[0] = 0; ckt->CKTbreaks[1] = ckt->CKTfinalTime; ckt->CKTbreakSize = 2; #ifdef XSPICE /* gtri - begin - wbk - 12/19/90 - Modify setting of CKTminBreak */ /* if (ckt->CKTminBreak == 0) ckt->CKTminBreak = ckt->CKTmaxStep * 5e-5 ; */ /* Set to 10 times delmin for ATESSE 1 compatibity */ if(ckt->CKTminBreak==0) ckt->CKTminBreak = 10.0 * ckt->CKTdelmin; /* gtri - end - wbk - 12/19/90 - Modify setting of CKTminBreak */ #else /* Minimum Breakpoint Setup */ if(ckt->CKTminBreak==0) ckt->CKTminBreak=ckt->CKTmaxStep*5e-5; #endif #ifdef XSPICE /* gtri - add - wbk - 12/19/90 - Add IPC stuff and set anal_init and anal_type */ /* Tell the beginPlot routine what mode we're in */ g_ipc.anal_type = IPC_ANAL_TRAN; /* Tell the code models what mode we're in */ g_mif_info.circuit.anal_type = MIF_DC; g_mif_info.circuit.anal_init = MIF_TRUE; /* gtri - end - wbk */ #endif /* Time Domain plot start and prepared to be filled in later */ error = CKTnames(ckt,&numNames,&nameList); if(error) return(error); SPfrontEnd->IFnewUid (ckt, &timeUid, NULL, "time", UID_OTHER, NULL); error = SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob, "Time Domain Periodic Steady State Analysis", timeUid, IF_REAL, numNames, nameList, IF_REAL, &(job->PSSplot_td)); tfree(nameList); if(error) return(error); /* Time initialization for Transient Analysis */ ckt->CKTtime = 0; ckt->CKTdelta = 0; ckt->CKTbreak = 1; firsttime = 1; save_mode = (ckt->CKTmode&MODEUIC) | MODETRANOP | MODEINITJCT; save_order = ckt->CKTorder; #ifdef XSPICE /* gtri - begin - wbk - set a breakpoint at end of supply ramping time */ /* must do this after CKTtime set to 0 above */ if(ckt->enh->ramp.ramptime > 0.0) CKTsetBreak(ckt, ckt->enh->ramp.ramptime); /* gtri - end - wbk - set a breakpoint at end of supply ramping time */ /* gtri - begin - wbk - Call EVTop if event-driven instances exist */ if(ckt->evt->counts.num_insts != 0) { /* use new DCOP algorithm */ converged = EVTop(ckt, (ckt->CKTmode & MODEUIC) | MODETRANOP | MODEINITJCT, (ckt->CKTmode & MODEUIC) | MODETRANOP | MODEINITFLOAT, ckt->CKTdcMaxIter, MIF_TRUE); EVTdump(ckt, IPC_ANAL_DCOP, 0.0); EVTop_save(ckt, MIF_FALSE, 0.0); /* gtri - end - wbk - Call EVTop if event-driven instances exist */ } else #endif /* Looking for a working Operating Point */ converged = CKTop(ckt, (ckt->CKTmode & MODEUIC) | MODETRANOP | MODEINITJCT, (ckt->CKTmode & MODEUIC) | MODETRANOP | MODEINITFLOAT, ckt->CKTdcMaxIter); #ifdef STEPDEBUG if(converged != 0) { fprintf(stdout,"\nTransient solution failed -\n"); CKTncDump(ckt); /* CKTnode *node; double new, old, tol; int i=1; fprintf(stdout,"\nTransient solution failed -\n\n"); fprintf(stdout,"Last Node Voltages\n"); fprintf(stdout,"------------------\n\n"); fprintf(stdout,"%-30s %20s %20s\n", "Node", "Last Voltage", "Previous Iter"); fprintf(stdout,"%-30s %20s %20s\n", "----", "------------", "-------------"); for(node=ckt->CKTnodes->next;node;node=node->next) { if (strstr(node->name, "#branch") || !strchr(node->name, '#')) { new = ckt->CKTrhsOld [i] ; old = ckt->CKTrhs [i] ; fprintf(stdout,"%-30s %20g %20g", node->name, new, old); if(node->type == SP_VOLTAGE) { tol = ckt->CKTreltol * (MAX(fabs(old),fabs(new))) + ckt->CKTvoltTol; } else { tol = ckt->CKTreltol * (MAX(fabs(old),fabs(new))) + ckt->CKTabstol; } if (fabs(new-old) >tol ) { fprintf(stdout," *"); } fprintf(stdout,"\n"); } i++; } */ fprintf(stdout,"\n"); fflush(stdout); } else if (!ft_noacctprint && !ft_noinitprint) { fprintf(stdout,"\nInitial Transient Solution\n"); fprintf(stdout,"--------------------------\n\n"); fprintf(stdout,"%-30s %15s\n", "Node", "Voltage"); fprintf(stdout,"%-30s %15s\n", "----", "-------"); for(node=ckt->CKTnodes->next;node;node=node->next) { if (strstr(node->name, "#branch") || !strchr(node->name, '#')) fprintf(stdout,"%-30s %15g\n", node->name, ckt->CKTrhsOld[node->number]); } fprintf(stdout,"\n"); fflush(stdout); } #endif /* If no convergence reached - NO valid Operating Point */ if(converged != 0) return(converged); #ifdef XSPICE /* gtri - add - wbk - 12/19/90 - Add IPC stuff */ /* Send the operating point results for Mspice compatibility */ if(g_ipc.enabled) { ipc_send_dcop_prefix(); CKTdump(ckt, 0.0, job->PSSplot_td); ipc_send_dcop_suffix(); } /* gtri - end - wbk */ /* gtri - add - wbk - 12/19/90 - set anal_init and anal_type */ g_mif_info.circuit.anal_init = MIF_TRUE; /* Tell the code models what mode we're in */ g_mif_info.circuit.anal_type = MIF_TRAN; /* gtri - end - wbk */ /* gtri - begin - wbk - Add Breakpoint stuff */ /* Initialize the temporary breakpoint variables to infinity */ g_mif_info.breakpoint.current = HUGE_VAL; g_mif_info.breakpoint.last = HUGE_VAL; /* gtri - end - wbk - Add Breakpoint stuff */ #endif ckt->CKTstat->STATtimePts ++; /* Setting Integration Order to Backward Euler */ ckt->CKTorder = 1; /* Copying the maxStep to every deltaOld */ for(i=0;i<7;i++) { ckt->CKTdeltaOld[i]=ckt->CKTmaxStep; } /* Setting DELTA */ ckt->CKTdelta = delta; #ifdef STEPDEBUG fprintf (stderr, "delta initialized to %g\n", ckt->CKTdelta); #endif ckt->CKTsaveDelta = ckt->CKTfinalTime/50; ckt->CKTmode = (ckt->CKTmode&MODEUIC) | MODETRAN | MODEINITTRAN; /* Changing Circuit MODE */ /* modeinittran set here */ ckt->CKTag[0]=ckt->CKTag[1]=0; /* State0 copied into State1 - DEPRECATED LEGACY function - to be replaced with memmove() */ memcpy(ckt->CKTstate1, ckt->CKTstate0, (size_t) ckt->CKTnumStates * sizeof(double)); /* Statistics Initialization using a macro at the beginning of this code */ INIT_STATS(); #ifdef CLUSTER CLUsetup(ckt); #endif } else { /* saj As traninit resets CKTmode */ ckt->CKTmode = (ckt->CKTmode&MODEUIC) | MODETRAN | MODEINITPRED; /* saj */ INIT_STATS(); if(ckt->CKTminBreak==0) ckt->CKTminBreak=ckt->CKTmaxStep*5e-5; firsttime=0; /* To get rawfile working saj*/ error = SPfrontEnd->OUTpBeginPlot (NULL, NULL, NULL, NULL, 0, 666, NULL, 666, &(job->PSSplot_td)); if(error) { fprintf(stderr, "Couldn't relink rawfile\n"); return error; } /* end saj*/ /* Skip nextTime if it isn't the firsttime! :) */ goto resume; } /* 650 */ nextTime: /* begin LTRA code addition */ if (ckt->CKTtimePoints) { ckt->CKTtimeIndex++; if (ckt->CKTtimeIndex >= ckt->CKTtimeListSize) { /* need more space */ int need; if (pss_state == STABILIZATION) need = (int) ceil((ckt->CKTstabTime - ckt->CKTtime) / maxstepsize ) ; else need = (int) ceil((time_temp + 1 / ckt->CKTguessedFreq - ckt->CKTtime) / maxstepsize) ; if (need < ckt->CKTsizeIncr) need = ckt->CKTsizeIncr; ckt->CKTtimeListSize += need; ckt->CKTtimePoints = TREALLOC(double, ckt->CKTtimePoints, ckt->CKTtimeListSize); ckt->CKTsizeIncr = (int) ceil(1.4 * ckt->CKTsizeIncr); } ckt->CKTtimePoints[ckt->CKTtimeIndex] = ckt->CKTtime; } /* end LTRA code addition */ /* Check for the timepoint acceptance */ error = CKTaccept(ckt); /* check if current breakpoint is outdated; if so, clear */ if (ckt->CKTtime > ckt->CKTbreaks[0]) CKTclrBreak(ckt); /* * Breakpoint handling scheme: * When a timepoint t is accepted (by CKTaccept), clear all previous * breakpoints, because they will never be needed again. * * t may itself be a breakpoint, or indistinguishably close. DON'T * clear t itself; recognise it as a breakpoint and act accordingly * * if t is not a breakpoint, limit the timestep so that the next * breakpoint is not crossed */ #ifdef STEPDEBUG fprintf (stderr, "Delta %g accepted at time %g (finaltime: %g)\n", ckt->CKTdelta, ckt->CKTtime, ckt->CKTfinalTime) ; fflush(stdout); #endif /* STEPDEBUG */ ckt->CKTstat->STATaccepted ++; ckt->CKTbreak = 0; /* XXX Error will cause single process to bail. */ if(error) { UPDATE_STATS(DOING_TRAN); return(error); } #ifdef XSPICE /* gtri - modify - wbk - 12/19/90 - Send IPC stuff */ if ((g_ipc.enabled) || wantevtdata) { if (pss_state == PSS) { /* Send event-driven results */ EVTdump(ckt, IPC_ANAL_TRAN, 0.0); /* Then follow with analog results... */ /* Test to see if delta was cut by a breakpoint, */ /* a non-convergence, or a too large truncation error */ if(ipc_firsttime) ipc_delta_cut = IPC_FALSE; else if(ckt->CKTtime < (ipc_last_time + (0.999 * ipc_last_delta))) ipc_delta_cut = IPC_TRUE; else ipc_delta_cut = IPC_FALSE; /* Record the data required to check for delta cuts */ ipc_last_time = ckt->CKTtime; ipc_last_delta = MIN(ckt->CKTdelta, ckt->CKTmaxStep); /* Send results data if time since last dump is greater */ /* than 'mintime', or if first or second timepoints, */ /* or if delta was cut */ if( (ckt->CKTtime >= (g_ipc.mintime + g_ipc.last_time)) || ipc_firsttime || ipc_secondtime || ipc_delta_cut ) { ipc_send_data_prefix(ckt->CKTtime); CKTdump(ckt, ckt->CKTtime, job->PSSplot_td); ipc_send_data_suffix(); if(ipc_firsttime) { ipc_firsttime = IPC_FALSE; ipc_secondtime = IPC_TRUE; } else if(ipc_secondtime) { ipc_secondtime = IPC_FALSE; } g_ipc.last_time = ckt->CKTtime; } } } else /* gtri - modify - wbk - 12/19/90 - Send IPC stuff */ #endif #ifdef CLUSTER if (pss_state == PSS) CLUoutput(ckt); #endif if (pss_state == PSS) { nextstep = time_temp + 1 / ckt->CKTguessedFreq * ((double)(pss_points_cycle) / (double)ckt->CKTpsspoints) ; /* If in_pss, store data for Time Domain Plot and gather ordered data for FFT computing */ if ((AlmostEqualUlps (ckt->CKTtime, nextstep, 10)) || (ckt->CKTtime > time_temp + 1 / ckt->CKTguessedFreq)) { #ifdef STEPDEBUG fprintf (stderr, "IN_PSS: time point accepted in evolution for FFT calculations.\n") ; fprintf (stderr, "Circuit time %1.15g, final time %1.15g, point index %d and total requested points %ld\n", ckt->CKTtime, nextstep, pss_points_cycle, ckt->CKTpsspoints) ; #endif CKTdump (ckt, ckt->CKTtime, job->PSSplot_td) ; /* Store the Time Base for the DFT */ psstimes [pss_points_cycle] = ckt->CKTtime ; /* Store values for the FFT calculation */ for (i = 1 ; i <= msize ; i++) pssvalues [i - 1 + pss_points_cycle * msize] = ckt->CKTrhsOld [i] ; /* Update PSS counter cycle, used to stop the entire algorithm */ pss_points_cycle++ ; /* Set the next BreakPoint for PSS */ CKTsetBreak (ckt, time_temp + (1 / ckt->CKTguessedFreq) * ((double)pss_points_cycle / (double)ckt->CKTpsspoints)) ; #ifdef STEPDEBUG fprintf (stderr, "Next breakpoint set in: %1.15g\n", time_temp + 1 / ckt->CKTguessedFreq * ((double)pss_points_cycle / (double)ckt->CKTpsspoints)) ; #endif } else { /* Algo can enter here but should do nothing */ #ifdef STEPDEBUG fprintf (stderr, "IN_PSS: time point accepted in evolution but dropped for FFT calculations\n") ; #endif } } #ifdef XSPICE /* gtri - begin - wbk - Update event queues/data for accepted timepoint */ /* Note: this must be done AFTER sending results to SI so it can't */ /* go next to CKTaccept() above */ if(ckt->evt->counts.num_insts > 0) EVTaccept(ckt, ckt->CKTtime); /* gtri - end - wbk - Update event queues/data for accepted timepoint */ #endif ckt->CKTstat->STAToldIter = ckt->CKTstat->STATnumIter; /* ***********************************/ /* ******* SHOOTING CODE BLOCK *******/ /* ***********************************/ switch(pss_state) { case STABILIZATION: { /* Test if stabTime has been reached */ if (AlmostEqualUlps (ckt->CKTtime, ckt->CKTstabTime, 100)) { time_temp = ckt->CKTtime ; /* Set the new Final Time - This is important because the last breakpoint is always CKTfinalTime */ ckt->CKTfinalTime = time_temp + 2 / ckt->CKTguessedFreq ; fprintf (stderr, "Exiting from stabilization\n") ; fprintf (stderr, "Time of first shooting evaluation will be %1.10g\n", time_temp + 1 / ckt->CKTguessedFreq) ; /* Next time is no more in stabilization - Unset the flag */ pss_state = SHOOTING; /* Save the RHS_copy_der as the NEW CKTrhsOld */ for (i = 1 ; i <= msize ; i++) RHS_copy_der [i - 1] = ckt->CKTrhsOld [i] ; /* Print RHS on exiting from stabilization */ fprintf (stderr, "RHS on exiting from stabilization: ") ; for (i = 1 ; i <= msize ; i++) { RHS_copy_se [i - 1] = ckt->CKTrhsOld [i] ; fprintf (stderr, "%-15g ", RHS_copy_se [i - 1]) ; } fprintf (stderr, "\n") ; /* RHS_max and RHS_min initialization - HUGE_VAL is the maximum machine error */ for (i = 0 ; i < msize ; i++) { RHS_max [i] = -HUGE_VAL ; RHS_min [i] = HUGE_VAL ; } } } break; case SHOOTING: { double offset, interval, nextBreak ; /* Calculation of error norms of RHS solution of every accepted nextTime */ err = 0 ; for (i = 0 ; i < msize ; i++) { /* Save max per node or branch of every estimated period */ if (RHS_max [i] < ckt->CKTrhsOld [i + 1]) RHS_max [i] = ckt->CKTrhsOld [i + 1] ; /* Save min per node or branch of every estimated period */ if (RHS_min [i] > ckt->CKTrhsOld [i + 1]) RHS_min [i] = ckt->CKTrhsOld [i + 1] ; /* CKTrhsOld is the last CORRECT value of RHS */ err_conv [i] = ckt->CKTrhsOld [i + 1] - RHS_copy_se [i] ; err += err_conv [i] * err_conv [i] ; /* Compute and store derivative */ RHS_derivative [i] = (ckt->CKTrhsOld [i + 1] - RHS_copy_der [i]) / ckt->CKTdelta ; /* Save the RHS_copy_der as the NEW CKTrhsOld */ RHS_copy_der [i] = ckt->CKTrhsOld [i + 1] ; #ifdef STEPDEBUG fprintf (stderr, "Pred is so high or so low! Diff is: %g\n", err_conv [i]) ; #endif } err = sqrt (err) ; /* Start frequency estimation */ if ((err < err_0) && (ckt->CKTtime >= time_temp + 0.5 / ckt->CKTguessedFreq)) /* far enough from time temp... */ { if (err < err_min_0) { err_min_1 = err_min_0 ; /* store previous minimum of RHS vector error */ err_min_0 = err ; /* store minimum of RHS vector error */ time_err_min_1 = time_err_min_0 ; /* store previous minimum of RHS vector error time */ time_err_min_0 = ckt->CKTtime ; /* store minimum of RHS vector error time */ } } err_0 = err ; if ((err > err_1) && (ckt->CKTtime >= time_temp + 0.1 / ckt->CKTguessedFreq)) /* far enough from time temp... */ { if (err > err_max) err_max = err ; /* store maximum of RHS vector error */ } err_1 = err ; /* *************************************** */ /* ********** Breakpoint update ********** */ /* *************************************** */ /* Force the tran analysis to evaluate requested breakpoints. Breakpoints are even more closer as the next occurence of guessed period is approaching. La lunga notte dei robot viventi... */ /* double offset, interval, nextBreak ; int i ; */ if ((ckt->CKTtime > time_temp + (1 / ckt->CKTguessedFreq) * 0.995) && (ckt->CKTtime <= time_temp + (1 / ckt->CKTguessedFreq))) { offset = time_temp + (1 / ckt->CKTguessedFreq) * 0.995 ; interval = (1 / ckt->CKTguessedFreq) * (1 - 0.995) * (ckt->CKTsteady_coeff / 10) ; i = (int)((ckt->CKTtime - offset) / interval) ; nextBreak = offset + (i + 1) * interval ; CKTsetBreak (ckt, nextBreak) ; } else if ((ckt->CKTtime > time_temp + (1 / ckt->CKTguessedFreq) * 0.8) && (ckt->CKTtime <= time_temp + (1 / ckt->CKTguessedFreq) * 0.995)) { offset = time_temp + (1 / ckt->CKTguessedFreq) * 0.8 ; interval = (1 / ckt->CKTguessedFreq) * (0.995 - 0.8) * (ckt->CKTsteady_coeff / 5) ; i = (int)((ckt->CKTtime - offset) / interval) ; nextBreak = offset + (i + 1) * interval ; CKTsetBreak (ckt, nextBreak) ; } else if ((ckt->CKTtime > time_temp + (1 / ckt->CKTguessedFreq) * 0.5) && (ckt->CKTtime <= time_temp + (1 / ckt->CKTguessedFreq) * 0.8)) { offset = time_temp + (1 / ckt->CKTguessedFreq) * 0.5 ; interval = (1 / ckt->CKTguessedFreq) * (0.8 - 0.5) * (ckt->CKTsteady_coeff / 3) ; i = (int)((ckt->CKTtime - offset) / interval) ; nextBreak = offset + (i + 1) * interval ; CKTsetBreak (ckt, nextBreak) ; } else if ((ckt->CKTtime > time_temp + (1 / ckt->CKTguessedFreq) * 0.1) && (ckt->CKTtime <= time_temp + (1 / ckt->CKTguessedFreq) * 0.5)) { offset = time_temp + (1 / ckt->CKTguessedFreq) * 0.1 ; interval = (1 / ckt->CKTguessedFreq) * (0.5 - 0.1) * (ckt->CKTsteady_coeff / 2) ; i = (int)((ckt->CKTtime - offset) / interval) ; nextBreak = offset + (i + 1) * interval ; CKTsetBreak (ckt, nextBreak) ; } else if ((ckt->CKTtime > time_temp) && (ckt->CKTtime <= time_temp + (1 / ckt->CKTguessedFreq) * 0.1)) { offset = time_temp ; interval = (1 / ckt->CKTguessedFreq) * (0.1) * (ckt->CKTsteady_coeff) ; i = (int)((ckt->CKTtime - offset) / interval) ; nextBreak = offset + (i + 1) * interval ; CKTsetBreak (ckt, nextBreak) ; } else { fprintf (stderr, "Strange behavior\n\n") ; fprintf (stderr, "CKTtime: %g\ntime_temp: %g\n\n", ckt->CKTtime, time_temp) ; } /* *************************************** */ /* ******* END Breakpoint update ********* */ /* *************************************** */ /* If evolution is near shooting... */ if ((AlmostEqualUlps (ckt->CKTtime, time_temp + 1 / ckt->CKTguessedFreq, 10)) || (ckt->CKTtime > time_temp + 1 / ckt->CKTguessedFreq)) { int excessive_err_nodes = 0 ; /* Calculation of error norms of RHS solution of every accepted nextTime */ predsum = 0 ; for (i = 0 ; i < msize ; i++) { /* Pitagora ha sempre ragione!!! :))) */ /* pred is treated as FREQUENCY to avoid numerical overflow when derivative is close to ZERO */ pred [i] = RHS_derivative [i] / err_conv [i] ; #ifdef STEPDEBUG fprintf (stderr, "Pred is so high or so low! Diff is: %g\n", err_conv [i]) ; #endif if ((fabs (pred [i]) > 1.0e6 * ckt->CKTguessedFreq) || (err_conv [i] == 0)) { if (pred [i] > 0) pred [i] = 1.0e6 * ckt->CKTguessedFreq ; else pred [i] = -1.0e6 * ckt->CKTguessedFreq ; } predsum += pred [i] ; #ifdef STEPDEBUG fprintf (stderr, "Predsum in time before to be divided by dynamic_test has value %g\n", 1 / predsum) ; fprintf (stderr, "Current Diff: %g, Derivative: %g, Frequency Projection: %g\n", err_conv [i], RHS_derivative [i], pred [i]) ; #endif } // int excessive_err_nodes = 0 ; if (shooting_cycle_counter == 0) { /* If first time in shooting we warn about that ! */ fprintf (stderr, "In shooting...\n") ; } //#ifdef STEPDEBUG /* For debugging purpose */ fprintf (stderr, "\n----------------\n") ; fprintf (stderr, "Shooting cycle iteration number: %3d ||", shooting_cycle_counter) ; if (shooting_cycle_counter > 0) fprintf (stderr, " rr: %g || predsum: %g\n", rr_history [shooting_cycle_counter - 1], 1 / predsum) ; else fprintf (stderr, " rr: %g || predsum: %g\n", 0.0, 1 / predsum) ; // fprintf (stderr, "Print of dynamically consistent nodes voltages or branches currents:\n") ; /* --------------------- */ //#endif for (i = 0, node = ckt->CKTnodes->next ; node ; i++, node = node->next) { /* Voltage Node */ if (!strchr (node->name, '#')) { if (fabs (err_conv [i]) > (fabs (RHS_max [i] - RHS_min [i]) * ckt->CKTreltol + ckt->CKTvoltTol) * ckt->CKTtrtol * ckt->CKTsteady_coeff) { excessive_err_nodes++ ; } /* If the dynamic is below 10uV, it's dropped */ if (fabs (RHS_max [i] - RHS_min [i]) > 10 * 1e-6) { dynamic_test++ ; /* test on voltage dynamic consistence */ } /* Current Node */ } else { if (fabs (err_conv [i]) > (fabs (RHS_max [i] - RHS_min [i]) * ckt->CKTreltol + ckt->CKTabstol) * ckt->CKTtrtol * ckt->CKTsteady_coeff) { excessive_err_nodes++ ; } /* If the dynamic is below 10nA, it's dropped */ if (fabs (RHS_max [i] - RHS_min [i]) > 10 * 1e-9) { dynamic_test++ ; /* test on current dynamic consistence */ } } } if (dynamic_test == 0) { /* Test for dynamic existence */ fprintf (stderr, "No detectable dynamic on voltages nodes or currents branches. PSS analysis aborted\n") ; /* Terminates plot in Time Domain and frees the allocated memory */ SPfrontEnd->OUTendPlot (job->PSSplot_td) ; FREE (RHS_copy_se) ; FREE (RHS_copy_der) ; FREE (RHS_max) ; FREE (RHS_min) ; FREE (err_conv) ; FREE (psstimes) ; FREE (pssvalues) ; return (E_PANIC) ; /* to be corrected with definition of new error macro in iferrmsg.h */ } else if ((time_err_min_0 - time_temp) < 0) { /* Something has gone wrong... */ fprintf (stderr, "Cannot find a minimum for error vector in estimated period. Try to adjust tstab! PSS analysis aborted\n") ; /* Terminates plot in Time Domain and frees the allocated memory */ SPfrontEnd->OUTendPlot (job->PSSplot_td) ; FREE (RHS_copy_se) ; FREE (RHS_copy_der) ; FREE (RHS_max) ; FREE (RHS_min) ; FREE (err_conv) ; FREE (psstimes) ; FREE (pssvalues) ; return (E_PANIC) ; /* to be corrected with definition of new error macro in iferrmsg.h */ } //#ifdef STEPDEBUG // fprintf (stderr, "Global Convergence Error reference: %g, Time Projection: %g.\n", // err_conv_ref / dynamic_test, predsum) ; //#endif /* Take the mean value of time prediction trough the dynamic test variable - predsum becomes TIME */ predsum = 1 / (predsum * dynamic_test) ; /* Store the predsum history as absolute value */ predsum_history [shooting_cycle_counter] = fabs (predsum) ; /***********************************/ /*** FREQUENCY ESTIMATION UPDATE ***/ /***********************************/ if ((err_min_0 == err) || (err_min_0 == HUGE_VAL)) { /* Enters here if guessed frequency is higher than the 'real' value */ ckt->CKTguessedFreq = 1 / (1 / ckt->CKTguessedFreq + fabs (predsum)) ; #ifdef STEPDEBUG fprintf (stderr, "Frequency DOWN: est per %g, err min %g, err min 1 %g, err max %g, err %g\n", time_err_min_0 - time_temp, err_min_0, err_min_1, err_max, err) ; #endif } else { /* Enters here if guessed frequency is lower than the 'real' value */ ckt->CKTguessedFreq = 1 / (time_err_min_0 - time_temp) ; #ifdef STEPDEBUG fprintf (stderr, "Frequency UP: est per %g, err min %g, err min 1 %g, err max %g, err %g\n", time_err_min_0 - time_temp, err_min_0, err_min_1, err_max, err) ; #endif } /* Temporary variables to store previous occurrence of guessed frequency */ gf_last_1 = gf_last_0 ; gf_last_0 = ckt->CKTguessedFreq ; /* Next evaluation of shooting will be updated time (time_temp) summed to updated guessed period */ time_temp = ckt->CKTtime ; /* Store error history */ rr_history [shooting_cycle_counter] = err ; gf_history [shooting_cycle_counter] = ckt->CKTguessedFreq ; shooting_cycle_counter++ ; fprintf (stderr, "Updated guessed frequency: %1.10lg .\n", ckt->CKTguessedFreq) ; fprintf (stderr, "Next shooting evaluation time is %1.10g and current time is %1.10g.\n", time_temp + 1 / ckt->CKTguessedFreq, ckt->CKTtime) ; /* Restore maximum and minimum error for next search */ err_min_0 = HUGE_VAL ; err_max = -HUGE_VAL ; err_0 = HUGE_VAL ; err_1 = -HUGE_VAL ; dynamic_test = 0 ; /* Reset actual RHS reference for next shooting evaluation */ for (i = 1 ; i <= msize ; i++) RHS_copy_se [i - 1] = ckt->CKTrhsOld [i] ; #ifdef STEPDEBUG fprintf (stderr, "RHS on new shooting cycle: ") ; for (i = 0 ; i < msize ; i++) fprintf (stderr, "%-15g ", RHS_copy_se [i]) ; fprintf (stderr, "\n") ; #endif for (i = 0 ; i < msize ; i++) { /* Reset max and min per node or branch on every shooting cycle */ RHS_max [i] = -HUGE_VAL ; RHS_min [i] = HUGE_VAL ; } fprintf (stderr, "----------------\n\n") ; /* Shooting Exit Condition */ if ((shooting_cycle_counter > ckt->CKTsc_iter) || (excessive_err_nodes == 0)) { int k ; double minimum ; pss_state = PSS ; #ifdef STEPDEBUG fprintf (stderr, "\nFrequency estimation (FE) and RHS period residual (PR) evolution\n") ; #endif // minimum = rr_history [0] ; minimum = predsum_history [0] ; k = 0 ; for (i = 0 ; i < shooting_cycle_counter ; i++) { /* Print some statistics */ fprintf (stderr, "%-3d -> FE: %-15.10g || RR: %15.10g", i, gf_history [i], rr_history [i]) ; /* Take the minimum residual iteration */ // if (minimum > rr_history [i]) if (minimum > predsum_history [i]) { // minimum = rr_history [i] ; minimum = predsum_history [i] ; k = i ; } fprintf (stderr, " || predsum/dynamic_test: %15.10g || minimum: %15.10g\n", predsum_history [i], minimum) ; } if (excessive_err_nodes == 0) /* SHOOTING has converged */ ckt->CKTguessedFreq = gf_history [shooting_cycle_counter - 1] ; else ckt->CKTguessedFreq = gf_history [k] ; /* Save the current Time */ time_temp = ckt->CKTtime ; /* Set the new Final Time - This is important because the last breakpoint is always CKTfinalTime */ ckt->CKTfinalTime = time_temp + 1 / ckt->CKTguessedFreq ; /* Dump the first PSS point for the FFT */ CKTdump (ckt, ckt->CKTtime, job->PSSplot_td) ; psstimes [pss_points_cycle] = ckt->CKTtime ; for (i = 1 ; i <= msize ; i++) pssvalues [i - 1 + pss_points_cycle * msize] = ckt->CKTrhsOld [i] ; /* Update the PSS points counter and set the next Breakpoint */ pss_points_cycle++ ; CKTsetBreak (ckt, time_temp + (1 / ckt->CKTguessedFreq) * ((double)pss_points_cycle / (double)ckt->CKTpsspoints)) ; if (excessive_err_nodes == 0) fprintf (stderr, "\nConvergence reached. Final circuit time is %1.10g seconds (iteration n° %d) and predicted fundamental frequency is %15.10g Hz\n", ckt->CKTtime, shooting_cycle_counter - 1, ckt->CKTguessedFreq) ; else fprintf (stderr, "\nConvergence not reached. However the most near convergence iteration has predicted (iteration %d) a fundamental frequency of %15.10g Hz\n", k, ckt->CKTguessedFreq) ; #ifdef STEPDEBUG fprintf (stderr, "time_temp %g\n", time_temp) ; fprintf (stderr, "IN_PSS: FIRST time point accepted in evolution for FFT calculations\n") ; fprintf (stderr, "Circuit time %1.15g, final time %1.15g, point index %d and total requested points %ld\n", ckt->CKTtime, time_temp + 1 / ckt->CKTguessedFreq * ((double)pss_points_cycle / (double)ckt->CKTpsspoints), pss_points_cycle, ckt->CKTpsspoints) ; fprintf (stderr, "Next breakpoint set in: %1.15g\n", time_temp + 1 / ckt->CKTguessedFreq * ((double)pss_points_cycle / (double)ckt->CKTpsspoints)) ; #endif } else { /* Set the new Final Time - This is important because the last breakpoint is always CKTfinalTime */ ckt->CKTfinalTime = time_temp + 1 / ckt->CKTguessedFreq ; /* Set next the breakpoint */ CKTsetBreak (ckt, time_temp + 1 / ckt->CKTguessedFreq) ; } } } break; case PSS: { /* The algorithm enters here when in_pss is set */ #ifdef STEPDEBUG fprintf (stderr, "ttemp %1.15g, final_time %1.15g, current_time %1.15g\n", time_temp, time_temp + 1 / ckt->CKTguessedFreq, ckt->CKTtime) ; #endif if ((pss_points_cycle == ckt->CKTpsspoints + 1) || (ckt->CKTtime > ckt->CKTfinalTime)) { double *pssfreqs = TMALLOC (double, ckt->CKTharms); double *pssmags = TMALLOC (double, ckt->CKTharms); double *pssphases = TMALLOC (double, ckt->CKTharms); double *pssnmags = TMALLOC (double, ckt->CKTharms); double *pssnphases = TMALLOC (double, ckt->CKTharms); double *pssValues = TMALLOC (double, ckt->CKTpsspoints + 1); double *pssResults = TMALLOC (double, msize * ckt->CKTharms); /* End plot in Time Domain */ SPfrontEnd->OUTendPlot (job->PSSplot_td) ; /* Frequency Plot Creation */ error = CKTnames (ckt, &numNames, &nameList) ; if (error) return (error) ; SPfrontEnd->IFnewUid (ckt, &freqUid, NULL, "frequency", UID_OTHER, NULL) ; error = SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob, "Frequency Domain Periodic Steady State Analysis", freqUid, IF_REAL, numNames, nameList, IF_REAL, &(job->PSSplot_fd)) ; tfree (nameList) ; SPfrontEnd->OUTattributes (job->PSSplot_fd, NULL, PLOT_COMB, NULL) ; /* ******************** */ /* Starting DFT on data */ /* ******************** */ for (i = 0 ; i < msize ; i++) { for (j = 0 ; j < ckt->CKTpsspoints ; j++) pssValues [j] = pssvalues [j * msize + i] ; DFT (ckt->CKTpsspoints, ckt->CKTharms, &thd, psstimes, pssValues, ckt->CKTguessedFreq, pssfreqs, pssmags, pssphases, pssnmags, pssnphases) ; for (j = 0 ; j < ckt->CKTharms ; j++) pssResults [j * msize + i] = pssmags [j] ; } for (j = 0 ; j < ckt->CKTharms ; j++) { for (i = 0 ; i < msize ; i++) ckt->CKTrhsOld [i + 1] = pssResults [j * msize + i] ; CKTdump (ckt, pssfreqs [j], job->PSSplot_fd) ; } /* ****************** */ /* Ending DFT on data */ /* ****************** */ /* Terminates plot in Frequency Domain and frees the allocated memory */ SPfrontEnd->OUTendPlot (job->PSSplot_fd) ; /* Francesco Lannutti's MOD */ /* Verify the frequency found */ max_freq = pssResults [msize] ; /* max_freq = pssResults [1 * msize + 0] ; */ position = 1 ; for (j = 1 ; j < ckt->CKTharms ; j++) { for (i = 0 ; i < msize ; i++) { if (max_freq < pssResults [j * msize + i]) { max_freq = pssResults [j * msize + i] ; position = j ; } } } if (pssfreqs [position] != ckt->CKTguessedFreq) { ckt->CKTguessedFreq = pssfreqs [position] ; fprintf (stderr, "The predicted fundamental frequency is incorrect.\nRelaunching the analysis...\n\n") ; fprintf (stderr, "The new guessed fundamental frequency is: %.6g\n\n", ckt->CKTguessedFreq) ; DCpss (ckt, 1) ; } /****************************/ FREE (pssResults) ; FREE (pssValues) ; FREE (pssnphases) ; FREE (pssnmags) ; FREE (pssphases) ; FREE (pssmags) ; FREE (pssfreqs) ; FREE (RHS_copy_se) ; FREE (RHS_copy_der) ; FREE (RHS_max) ; FREE (RHS_min) ; FREE (err_conv) ; FREE (psstimes) ; FREE (pssvalues) ; return (OK) ; } } break; } /* switch(pss_state) */ /* ********************************** */ /* **** END SHOOTING CODE BLOCK ***** */ /* ********************************** */ if(SPfrontEnd->IFpauseTest()) { /* user requested pause... */ UPDATE_STATS(DOING_TRAN); return(E_PAUSE); } /* RESUME */ resume: #ifdef STEPDEBUG if( (ckt->CKTdelta <= ckt->CKTfinalTime/50) && (ckt->CKTdelta <= ckt->CKTmaxStep)) { ; } else { if(ckt->CKTfinalTime/50CKTmaxStep) { fprintf (stderr, "limited by Tstop/50\n"); } else { fprintf (stderr, "limited by Tmax == %g\n", ckt->CKTmaxStep); } } #endif #ifdef HAS_PROGREP if (ckt->CKTtime == 0.) SetAnalyse( "tran init", 0); else if ((pss_state != PSS) && (shooting_cycle_counter > 0)) SetAnalyse("shooting", shooting_cycle_counter) ; else SetAnalyse( "tran", (int)((ckt->CKTtime * 1000.) / ckt->CKTfinalTime)); #endif ckt->CKTdelta = MIN(ckt->CKTdelta,ckt->CKTmaxStep); #ifdef XSPICE /* gtri - begin - wbk - Cut integration order if first timepoint after breakpoint */ /* if(ckt->CKTtime == g_mif_info.breakpoint.last) */ if ( AlmostEqualUlps( ckt->CKTtime, g_mif_info.breakpoint.last, 100 ) ) ckt->CKTorder = 1; /* gtri - end - wbk - Cut integration order if first timepoint after breakpoint */ #endif /* are we at a breakpoint, or indistinguishably close? */ /* if ((ckt->CKTtime == ckt->CKTbreaks[0]) || (ckt->CKTbreaks[0] - */ if (ckt->CKTbreaks [0] - ckt->CKTtime <= ckt->CKTdelmin) { /*if ( AlmostEqualUlps( ckt->CKTtime, ckt->CKTbreaks[0], 100 ) || (ckt->CKTbreaks[0] - * (ckt->CKTtime) <= ckt->CKTdelmin)) {*/ /* first timepoint after a breakpoint - cut integration order */ /* and limit timestep to .1 times minimum of time to next breakpoint, * and previous timestep */ ckt->CKTorder = 1; #ifdef STEPDEBUG if( (ckt->CKTdelta > .1*ckt->CKTsaveDelta) || (ckt->CKTdelta > .1*(ckt->CKTbreaks[1] - ckt->CKTbreaks[0])) ) { if(ckt->CKTsaveDelta < (ckt->CKTbreaks[1] - ckt->CKTbreaks[0])) { fprintf (stderr, "limited by pre-breakpoint delta (saveDelta: %1.10g, nxt_breakpt: %1.10g, curr_breakpt: %1.10g and CKTtime: %1.10g\n", ckt->CKTsaveDelta, ckt->CKTbreaks [1], ckt->CKTbreaks [0], ckt->CKTtime) ; } else { fprintf (stderr, "limited by next breakpoint\n") ; fprintf (stderr, "(saveDelta: %1.10g, Delta: %1.10g, CKTtime: %1.10g and delmin: %1.10g\n", ckt->CKTsaveDelta, ckt->CKTdelta, ckt->CKTtime, ckt->CKTdelmin) ; } } #endif if (ckt->CKTbreaks [1] - ckt->CKTbreaks [0] == 0) ckt->CKTdelta = ckt->CKTdelmin ; else ckt->CKTdelta = MIN (ckt->CKTdelta, .1 * MIN (ckt->CKTsaveDelta, ckt->CKTbreaks[1] - ckt->CKTbreaks[0])); if(firsttime) { ckt->CKTdelta /= 10; #ifdef STEPDEBUG fprintf(stderr, "delta cut for initial timepoint\n"); #endif } #ifndef XSPICE /* don't want to get below delmin for no reason */ ckt->CKTdelta = MAX(ckt->CKTdelta, ckt->CKTdelmin*2.0); #endif } #ifndef XSPICE else if(ckt->CKTtime + ckt->CKTdelta >= ckt->CKTbreaks[0]) { ckt->CKTsaveDelta = ckt->CKTdelta; ckt->CKTdelta = ckt->CKTbreaks[0] - ckt->CKTtime; /* fprintf (stderr, "delta cut to %g to hit breakpoint\n" ,ckt->CKTdelta) ; */ fflush(stdout); ckt->CKTbreak = 1; /* why? the current pt. is not a bkpt. */ } #endif /* !XSPICE */ #ifdef XSPICE /* gtri - begin - wbk - Add Breakpoint stuff */ if(ckt->CKTtime + ckt->CKTdelta >= g_mif_info.breakpoint.current) { /* If next time > temporary breakpoint, force it to the breakpoint */ /* And mark that timestep was set by temporary breakpoint */ ckt->CKTsaveDelta = ckt->CKTdelta; ckt->CKTdelta = g_mif_info.breakpoint.current - ckt->CKTtime; g_mif_info.breakpoint.last = ckt->CKTtime + ckt->CKTdelta; } else { /* Else, mark that timestep was not set by temporary breakpoint */ g_mif_info.breakpoint.last = HUGE_VAL; } /* gtri - end - wbk - Add Breakpoint stuff */ /* gtri - begin - wbk - Modify Breakpoint stuff */ /* Throw out any permanent breakpoint times <= current time */ for (;;) { #ifdef STEPDEBUG fprintf (stderr, " brk_pt: %g ckt_time: %g ckt_min_break: %g\n", ckt->CKTbreaks [0], ckt->CKTtime, ckt->CKTminBreak) ; #endif if(AlmostEqualUlps(ckt->CKTbreaks[0], ckt->CKTtime, 100) || ckt->CKTbreaks[0] <= ckt->CKTtime + ckt->CKTminBreak) { #ifdef STEPDEBUG fprintf (stderr, "throwing out permanent breakpoint times <= current time (brk pt: %g)\n", ckt->CKTbreaks [0]) ; fprintf (stderr, "ckt_time: %g ckt_min_break: %g\n", ckt->CKTtime, ckt->CKTminBreak) ; #endif CKTclrBreak(ckt); } else { break; } } /* Force the breakpoint if appropriate */ if(ckt->CKTtime + ckt->CKTdelta > ckt->CKTbreaks[0]) { ckt->CKTbreak = 1; ckt->CKTsaveDelta = ckt->CKTdelta; ckt->CKTdelta = ckt->CKTbreaks[0] - ckt->CKTtime; } /* gtri - end - wbk - Modify Breakpoint stuff */ /* gtri - begin - wbk - Do event solution */ if(ckt->evt->counts.num_insts > 0) { /* if time = 0 and op_alternate was specified as false during */ /* dcop analysis, call any changed instances to let them */ /* post their outputs with their associated delays */ if((ckt->CKTtime == 0.0) && (! ckt->evt->options.op_alternate)) EVTiter(ckt); /* while there are events on the queue with event time <= next */ /* projected analog time, process them */ while((g_mif_info.circuit.evt_step = EVTnext_time(ckt)) <= (ckt->CKTtime + ckt->CKTdelta)) { /* Initialize temp analog bkpt to infinity */ g_mif_info.breakpoint.current = HUGE_VAL; /* Pull items off queue and process them */ EVTdequeue(ckt, g_mif_info.circuit.evt_step); EVTiter(ckt); /* If any instances have forced an earlier */ /* next analog time, cut the delta */ if(ckt->CKTbreaks[0] < g_mif_info.breakpoint.current) if(ckt->CKTbreaks[0] > ckt->CKTtime + ckt->CKTminBreak) g_mif_info.breakpoint.current = ckt->CKTbreaks[0]; if(g_mif_info.breakpoint.current < ckt->CKTtime + ckt->CKTdelta) { /* Breakpoint must be > last accepted timepoint */ /* and >= current event time */ if(g_mif_info.breakpoint.current > ckt->CKTtime + ckt->CKTminBreak && g_mif_info.breakpoint.current >= g_mif_info.circuit.evt_step) { ckt->CKTsaveDelta = ckt->CKTdelta; ckt->CKTdelta = g_mif_info.breakpoint.current - ckt->CKTtime; g_mif_info.breakpoint.last = ckt->CKTtime + ckt->CKTdelta; } } } /* end while next event time <= next analog time */ } /* end if there are event instances */ /* gtri - end - wbk - Do event solution */ #else #ifdef CLUSTER if(!CLUsync(ckt->CKTtime,&ckt->CKTdelta,0)) { fprintf (stderr, "Sync error!\n"); exit(0); } #endif /* CLUSTER */ #endif /* What is that??? */ for(i=5; i>=0; i--) ckt->CKTdeltaOld[i+1] = ckt->CKTdeltaOld[i]; ckt->CKTdeltaOld[0] = ckt->CKTdelta; temp = ckt->CKTstates[ckt->CKTmaxOrder+1]; for(i=ckt->CKTmaxOrder;i>=0;i--) { ckt->CKTstates[i+1] = ckt->CKTstates[i]; } ckt->CKTstates[0] = temp; /* 600 */ for (;;) { #ifdef CLUSTER redostep = 1; #endif #ifdef XSPICE /* gtri - add - wbk - 4/17/91 - Fix Berkeley bug */ /* This is needed here to allow CAPask to output currents */ /* during Transient analysis. A grep for CKTcurrentAnalysis */ /* indicates that it should not hurt anything else ... */ ckt->CKTcurrentAnalysis = DOING_TRAN; /* gtri - end - wbk - 4/17/91 - Fix Berkeley bug */ #endif olddelta=ckt->CKTdelta; /* time abort? */ ckt->CKTtime += ckt->CKTdelta; #ifdef CLUSTER CLUinput(ckt); #endif ckt->CKTdeltaOld[0]=ckt->CKTdelta; NIcomCof(ckt); #ifdef PREDICTOR error = NIpred(ckt); #endif /* PREDICTOR */ save_mode = ckt->CKTmode; save_order = ckt->CKTorder; #ifdef XSPICE /* gtri - begin - wbk - Add Breakpoint stuff */ /* Initialize temporary breakpoint to infinity */ g_mif_info.breakpoint.current = HUGE_VAL; /* gtri - end - wbk - Add Breakpoint stuff */ /* gtri - begin - wbk - add convergence problem reporting flags */ /* delta is forced to equal delmin on last attempt near line 650 */ if(ckt->CKTdelta <= ckt->CKTdelmin) ckt->enh->conv_debug.last_NIiter_call = MIF_TRUE; else ckt->enh->conv_debug.last_NIiter_call = MIF_FALSE; /* gtri - begin - wbk - add convergence problem reporting flags */ /* gtri - begin - wbk - Call all hybrids */ /* gtri - begin - wbk - Set evt_step */ if(ckt->evt->counts.num_insts > 0) { g_mif_info.circuit.evt_step = ckt->CKTtime; } /* gtri - end - wbk - Set evt_step */ #endif converged = NIiter(ckt,ckt->CKTtranMaxIter); #ifdef XSPICE if(ckt->evt->counts.num_insts > 0) { g_mif_info.circuit.evt_step = ckt->CKTtime; EVTcall_hybrids(ckt); } /* gtri - end - wbk - Call all hybrids */ #endif ckt->CKTstat->STATtimePts ++; ckt->CKTmode = (ckt->CKTmode&MODEUIC)|MODETRAN | MODEINITPRED; if(firsttime) { memcpy(ckt->CKTstate2, ckt->CKTstate1, (size_t) ckt->CKTnumStates * sizeof(double)); memcpy(ckt->CKTstate3, ckt->CKTstate1, (size_t) ckt->CKTnumStates * sizeof(double)); } /* txl, cpl addition */ if (converged == 1111) { return(converged); } #ifdef STEPDEBUG if (pss_state == PSS) fprintf (stderr, "pss_state: %d, converged: %d\n", pss_state, converged) ; #endif if(converged != 0) { #ifndef CLUSTER ckt->CKTtime = ckt->CKTtime -ckt->CKTdelta; ckt->CKTstat->STATrejected ++; #endif ckt->CKTdelta = ckt->CKTdelta/8; #ifdef STEPDEBUG fprintf (stderr, "delta cut to %g for non-convergance\n", ckt->CKTdelta) ; fflush(stdout); #endif if(firsttime) { ckt->CKTmode = (ckt->CKTmode&MODEUIC) | MODETRAN | MODEINITTRAN; } ckt->CKTorder = 1; #ifdef XSPICE /* gtri - begin - wbk - Add Breakpoint stuff */ /* Force backup if temporary breakpoint is < current time */ } else if(g_mif_info.breakpoint.current < ckt->CKTtime) { ckt->CKTsaveDelta = ckt->CKTdelta; ckt->CKTtime -= ckt->CKTdelta; ckt->CKTdelta = g_mif_info.breakpoint.current - ckt->CKTtime; g_mif_info.breakpoint.last = ckt->CKTtime + ckt->CKTdelta; if(firsttime) { ckt->CKTmode = (ckt->CKTmode&MODEUIC)|MODETRAN | MODEINITTRAN; } ckt->CKTorder = 1; /* gtri - end - wbk - Add Breakpoint stuff */ #endif } else { if (firsttime) { firsttime = 0; #ifndef CLUSTER goto nextTime; /* no check on * first time point */ #else redostep = 0; goto chkStep; #endif } newdelta = ckt->CKTdelta; error = CKTtrunc(ckt,&newdelta); if(error) { UPDATE_STATS(DOING_TRAN); return(error); } if (newdelta > .9 * ckt->CKTdelta) { if ((ckt->CKTorder == 1) && (ckt->CKTmaxOrder > 1)) { /* don't rise the order for backward Euler */ newdelta = ckt->CKTdelta; ckt->CKTorder = 2; error = CKTtrunc(ckt, &newdelta); if (error) { UPDATE_STATS(DOING_TRAN); return(error); } if (newdelta <= 1.05 * ckt->CKTdelta) { ckt->CKTorder = 1; } } /* time point OK - 630 */ ckt->CKTdelta = newdelta; #ifdef NDEV if (!ft_norefprint) { /* show a time process indicator, by Gong Ding, gdiso@ustc.edu */ if (ckt->CKTtime / ckt->CKTfinalTime * 100 < 10.0) fprintf(stderr, "%%%3.2lf\b\b\b\b\b", ckt->CKTtime / ckt->CKTfinalTime * 100); else if (ckt->CKTtime / ckt->CKTfinalTime * 100 < 100.0) fprintf(stderr, "%%%4.2lf\b\b\b\b\b\b", ckt->CKTtime / ckt->CKTfinalTime * 100); else fprintf(stderr, "%%%5.2lf\b\b\b\b\b\b\b", ckt->CKTtime / ckt->CKTfinalTime * 100); fflush(stdout); } #endif #ifdef STEPDEBUG fprintf (stderr, "delta set to truncation error result: %g. Point accepted at CKTtime: %g\n", ckt->CKTdelta, ckt->CKTtime) ; fflush(stdout); #endif #ifndef CLUSTER /* go to 650 - trapezoidal */ goto nextTime; #else redostep = 0; goto chkStep; #endif } else { /* newdelta <= .9 * ckt->CKTdelta */ #ifndef CLUSTER ckt->CKTtime = ckt->CKTtime -ckt->CKTdelta; ckt->CKTstat->STATrejected ++; #endif ckt->CKTdelta = newdelta; #ifdef STEPDEBUG fprintf (stderr, "delta set to truncation error result:point rejected\n") ; #endif } } if (ckt->CKTdelta <= ckt->CKTdelmin) { if (olddelta > ckt->CKTdelmin) { ckt->CKTdelta = ckt->CKTdelmin; #ifdef STEPDEBUG fprintf (stderr, "delta at delmin\n"); #endif } else { UPDATE_STATS(DOING_TRAN); errMsg = CKTtrouble(ckt, "Timestep too small"); return(E_TIMESTEP); } } #ifdef XSPICE /* gtri - begin - wbk - Do event backup */ if(ckt->evt->counts.num_insts > 0) EVTbackup(ckt, ckt->CKTtime + ckt->CKTdelta); /* gtri - end - wbk - Do event backup */ #endif #ifdef CLUSTER chkStep: if(CLUsync(ckt->CKTtime,&ckt->CKTdelta,redostep)){ goto nextTime; } else { ckt->CKTtime -= olddelta; ckt->CKTstat->STATrejected ++; } #endif } /* NOTREACHED */ } static int DFT ( long int ndata, /* number of entries in the Time and Value arrays */ int numFreq, /* number of harmonics to calculate */ double *thd, /* total harmonic distortion (percent) to be returned */ double *Time, /* times at which the voltage/current values were measured */ double *Value, /* voltage or current vector whose transform is desired */ double FundFreq, /* the fundamental frequency of the analysis */ double *Freq, /* the frequency value of the various harmonics */ double *Mag, /* the Magnitude of the fourier transform */ double *Phase, /* the Phase of the fourier transform */ double *nMag, /* the normalized magnitude of the transform: nMag (fund) = 1 */ double *nPhase /* the normalized phase of the transform: Nphase (fund) = 0 */ ) { /* Note: we can consider these as a set of arrays. The sizes are: * Time [ndata], Value [ndata], Freq [numFreq], Mag [numfreq], * Phase [numfreq], nMag [numfreq], nPhase [numfreq] * * The arrays must all be allocated by the caller. * The Time and Value array must be reasonably distributed over at * least one full period of the fundamental Frequency for the * fourier transform to be useful. The function will take the * last period of the frequency as data for the transform. * * We are assuming that the caller has provided exactly one period * of the fundamental frequency. */ int i, j; double tmp; NG_IGNORE (Time); /* clear output/computation arrays */ for (i = 0; i < numFreq; i++) { Mag [i] = 0; Phase [i] = 0; } for (i = 0; i < ndata; i++) { for (j = 0; j < numFreq; j++) { Mag [j] += (Value [i] * sin (j * 2.0 * M_PI * i / ((double)ndata))); Phase [j] += (Value [i] * cos (j * 2.0 * M_PI * i / ((double)ndata))); } } Mag [0] = Phase [0] / (double)ndata; Phase [0] = 0; nMag [0] = 0; nPhase [0] = 0; Freq [0] = 0; *thd = 0; for (i = 1; i < numFreq; i++) { tmp = Mag [i] * 2.0 / (double)ndata; Phase [i] *= 2.0 / (double)ndata; Freq [i] = i * FundFreq; Mag [i] = hypot (tmp, Phase [i]); Phase [i] = atan2 (Phase [i], tmp) * 180.0 / M_PI; nMag [i] = Mag [i] / Mag [1]; nPhase [i] = Phase [i] - Phase [1]; if (i > 1) *thd += nMag [i] * nMag [i]; } *thd = 100 * sqrt (*thd); return (OK); } tmpk8ny_4pz/src/spicelib/analysis/naskq.c0000644000175000017500000000267313546075722020655 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Gary W. Ng **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" int NaskQuest(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value) { NOISEAN *job = (NOISEAN *) anal; NG_IGNORE(ckt); switch(which) { case N_OUTPUT: value->nValue = job->output; break; case N_OUTREF: value->nValue = job->outputRef; break; case N_INPUT: value->uValue = job->input; break; case N_DEC: if (job->NstpType == DECADE) { value->iValue=1; } else { value->iValue=0; } break; case N_OCT: if (job->NstpType == OCTAVE) { value->iValue=1; } else { value->iValue=0; } break; case N_LIN: if (job->NstpType == LINEAR) { value->iValue=1; } else { value->iValue=0; } break; case N_STEPS: value->iValue = job->NnumSteps; break; case N_START: value->rValue = job->NstartFreq; break; case N_STOP: value->rValue = job->NstopFreq; break; case N_PTSPERSUM: value->iValue = job->NStpsSm; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/analysis/cktsetnp.c0000644000175000017500000000155113546075722021365 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* *CKTsetNodPm * * set a parameter on a node. */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/cktdefs.h" /* ARGSUSED */ int CKTsetNodPm(CKTcircuit *ckt, CKTnode *node, int parm, IFvalue *value, IFvalue *selector) { NG_IGNORE(ckt); NG_IGNORE(selector); if(!node) return(E_BADPARM); switch(parm) { case PARM_NS: node->nodeset = value->rValue; node->nsGiven = 1; break; case PARM_IC: node->ic = value->rValue; node->icGiven = 1; break; case PARM_NODETYPE: node->type = value->iValue; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/analysis/cktneweq.c0000644000175000017500000000142613546075722021354 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* *CKTnewEq(ckt,node,name) * Allocate a new circuit equation number (returned) in the specified * circuit to contain a new equation or node * returns -1 for failure to allocate a node number * */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" int CKTnewEq(CKTcircuit *ckt, CKTnode **node, IFuid name) { CKTnode *mynode; int error; error = CKTmkNode(ckt,&mynode); if(error) return(error); if(node) *node = mynode; mynode->name = name; error = CKTlinkEq(ckt,mynode); return(error); } tmpk8ny_4pz/src/spicelib/analysis/cktop.c0000644000175000017500000003576513546075722020670 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes Modified: 2005 Paolo Nenzi - Restructured **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #ifdef XSPICE #include "ngspice/enh.h" #endif static int dynamic_gmin(CKTcircuit *, long int, long int, int); static int spice3_gmin(CKTcircuit *, long int, long int, int); static int gillespie_src(CKTcircuit *, long int, long int, int); static int spice3_src(CKTcircuit *, long int, long int, int); int CKTop (CKTcircuit *ckt, long int firstmode, long int continuemode, int iterlim) { int converged; #ifdef HAS_PROGREP SetAnalyse("op", 0); #endif ckt->CKTmode = firstmode; if (!ckt->CKTnoOpIter) { #ifdef XSPICE /* gtri - wbk - add convergence problem reporting flags */ ckt->enh->conv_debug.last_NIiter_call = (ckt->CKTnumGminSteps <= 0) && (ckt->CKTnumSrcSteps <= 0); #endif converged = NIiter (ckt, iterlim); if (converged == 0) return converged; /* successfull */ } else { converged = 1; /* the 'go directly to gmin stepping' option */ } /* no convergence on the first try, so we do something else */ /* first, check if we should try gmin stepping */ if (ckt->CKTnumGminSteps >= 1) { if (ckt->CKTnumGminSteps == 1) converged = dynamic_gmin(ckt, firstmode, continuemode, iterlim); else converged = spice3_gmin(ckt, firstmode, continuemode, iterlim); if (converged == 0) /* If gmin-stepping worked... move out */ return converged; } /* ... otherwise try stepping sources ... * now, we'll try source stepping - we scale the sources * to 0, converge, then start stepping them up until they * are at their normal values */ if (ckt->CKTnumSrcSteps >= 1) { if (ckt->CKTnumSrcSteps == 1) converged = gillespie_src(ckt, firstmode, continuemode, iterlim); else converged = spice3_src(ckt, firstmode, continuemode, iterlim); } #ifdef XSPICE /* gtri - wbk - add convergence problem reporting flags */ ckt->enh->conv_debug.last_NIiter_call = MIF_FALSE; #endif return converged; } /* CKTconvTest(ckt) * this is a driver program to iterate through all the various * convTest functions provided for the circuit elements in the * given circuit */ int CKTconvTest (CKTcircuit *ckt) { int i; for (i = 0; i < DEVmaxnum; i++) { if (DEVices[i] && DEVices[i]->DEVconvTest && ckt->CKThead[i]) { int error = DEVices[i]->DEVconvTest (ckt->CKThead[i], ckt); if (error) return error; } if (ckt->CKTnoncon) { /* printf("convTest: device %s failed\n", * DEVices[i]->DEVpublic.name); */ return OK; } } return OK; } /* Dynamic gmin stepping * Algorithm by Alan Gillespie * Modified 2005 - Paolo Nenzi (extracted from CKTop.c code) * * return value: * 0 -> method converged * 1 -> method failed * * Note that no path out of this code allows ckt->CKTdiagGmin to be * anything but CKTgshunt. */ static int dynamic_gmin (CKTcircuit *ckt, long int firstmode, long int continuemode, int iterlim) { double OldGmin, gtarget, factor; int converged; int NumNodes, iters, i; double *OldRhsOld, *OldCKTstate0; CKTnode *n; ckt->CKTmode = firstmode; SPfrontEnd->IFerrorf (ERR_INFO, "Starting dynamic gmin stepping"); NumNodes = 0; for (n = ckt->CKTnodes; n; n = n->next) NumNodes++; OldRhsOld = TMALLOC(double, NumNodes + 1); OldCKTstate0 = TMALLOC(double, ckt->CKTnumStates + 1); for (n = ckt->CKTnodes; n; n = n->next) ckt->CKTrhsOld [n->number] = 0; for (i = 0; i < ckt->CKTnumStates; i++) ckt->CKTstate0 [i] = 0; factor = ckt->CKTgminFactor; OldGmin = 1e-2; ckt->CKTdiagGmin = OldGmin / factor; gtarget = MAX (ckt->CKTgmin, ckt->CKTgshunt); for (;;) { fprintf (stderr, "Trying gmin = %12.4E ", ckt->CKTdiagGmin); ckt->CKTnoncon = 1; iters = ckt->CKTstat->STATnumIter; converged = NIiter (ckt, ckt->CKTdcTrcvMaxIter); iters = ckt->CKTstat->STATnumIter - iters; if (converged == 0) { ckt->CKTmode = continuemode; SPfrontEnd->IFerrorf (ERR_INFO, "One successful gmin step"); if (ckt->CKTdiagGmin <= gtarget) break; /* successfull */ for (i = 0, n = ckt->CKTnodes; n; n = n->next) OldRhsOld[i++] = ckt->CKTrhsOld[n->number]; memcpy(OldCKTstate0, ckt->CKTstate0, (size_t) ckt->CKTnumStates * sizeof(double)); if (iters <= (ckt->CKTdcTrcvMaxIter / 4)) { factor *= sqrt (factor); if (factor > ckt->CKTgminFactor) factor = ckt->CKTgminFactor; } if (iters > (3 * ckt->CKTdcTrcvMaxIter / 4)) factor = MAX(sqrt (factor), 1.00005); OldGmin = ckt->CKTdiagGmin; if (ckt->CKTdiagGmin < factor * gtarget) { factor = ckt->CKTdiagGmin / gtarget; ckt->CKTdiagGmin = gtarget; } else { ckt->CKTdiagGmin /= factor; } } else { if (factor < 1.00005) { SPfrontEnd->IFerrorf (ERR_WARNING, "Last gmin step failed"); break; /* failed */ } SPfrontEnd->IFerrorf (ERR_WARNING, "Further gmin increment"); factor = sqrt (sqrt (factor)); ckt->CKTdiagGmin = OldGmin / factor; for (i = 0, n = ckt->CKTnodes; n; n = n->next) ckt->CKTrhsOld[n->number] = OldRhsOld[i++]; memcpy(ckt->CKTstate0, OldCKTstate0, (size_t) ckt->CKTnumStates * sizeof(double)); } } ckt->CKTdiagGmin = ckt->CKTgshunt; FREE (OldRhsOld); FREE (OldCKTstate0); #ifdef XSPICE /* gtri - wbk - add convergence problem reporting flags */ ckt->enh->conv_debug.last_NIiter_call = (ckt->CKTnumSrcSteps <= 0); #endif converged = NIiter (ckt, iterlim); if (converged != 0) { SPfrontEnd->IFerrorf (ERR_WARNING, "Dynamic gmin stepping failed"); } else { SPfrontEnd->IFerrorf (ERR_INFO, "Dynamic gmin stepping completed"); #ifdef XSPICE /* gtri - wbk - add convergence problem reporting flags */ ckt->enh->conv_debug.last_NIiter_call = MIF_FALSE; #endif } return converged; } /* Spice3 gmin stepping * Modified 2000 - Alan Gillespie (added gshunt) * Modified 2005 - Paolo Nenzi (extracted from CKTop.c code) * * return value: * 0 -> method converged * 1 -> method failed * * Note that no path out of this code allows ckt->CKTdiagGmin to be * anything but CKTgshunt. */ static int spice3_gmin (CKTcircuit *ckt, long int firstmode, long int continuemode, int iterlim) { int converged, i; ckt->CKTmode = firstmode; SPfrontEnd->IFerrorf (ERR_INFO, "Starting gmin stepping"); ckt->CKTdiagGmin = (ckt->CKTgshunt == 0) ? ckt->CKTgmin : ckt->CKTgshunt; for (i = 0; i < ckt->CKTnumGminSteps; i++) ckt->CKTdiagGmin *= ckt->CKTgminFactor; for (i = 0; i <= ckt->CKTnumGminSteps; i++) { fprintf (stderr, "Trying gmin = %12.4E ", ckt->CKTdiagGmin); ckt->CKTnoncon = 1; converged = NIiter (ckt, ckt->CKTdcTrcvMaxIter); if (converged != 0) { ckt->CKTdiagGmin = ckt->CKTgshunt; SPfrontEnd->IFerrorf (ERR_WARNING, "gmin step failed"); break; } ckt->CKTdiagGmin /= ckt->CKTgminFactor; ckt->CKTmode = continuemode; SPfrontEnd->IFerrorf (ERR_INFO, "One successful gmin step"); } ckt->CKTdiagGmin = ckt->CKTgshunt; #ifdef XSPICE /* gtri - wbk - add convergence problem reporting flags */ ckt->enh->conv_debug.last_NIiter_call = (ckt->CKTnumSrcSteps <= 0); #endif converged = NIiter (ckt, iterlim); if (converged == 0) { SPfrontEnd->IFerrorf (ERR_INFO, "gmin stepping completed"); #ifdef XSPICE /* gtri - wbk - add convergence problem reporting flags */ ckt->enh->conv_debug.last_NIiter_call = MIF_FALSE; #endif } else { SPfrontEnd->IFerrorf (ERR_WARNING, "gmin stepping failed"); } return converged; } /* Gillespie's Source stepping * Modified 2005 - Paolo Nenzi (extracted from CKTop.c code) * * return value: * 0 -> method converged * 1 -> method failed * * Note that no path out of this code allows ckt->CKTsrcFact to be * anything but 1.00000. */ static int gillespie_src (CKTcircuit *ckt, long int firstmode, long int continuemode, int iterlim) { int converged, i, iters; double ConvFact; CKTnode *n; NG_IGNORE(iterlim); ckt->CKTmode = firstmode; SPfrontEnd->IFerrorf (ERR_INFO, "Starting source stepping"); ckt->CKTsrcFact = 0; ConvFact = 0; for (n = ckt->CKTnodes; n; n = n->next) ckt->CKTrhsOld[n->number] = 0; for (i = 0; i < ckt->CKTnumStates; i++) ckt->CKTstate0[i] = 0; /* First, try a straight solution with all sources at zero */ fprintf (stderr, "Supplies reduced to %8.4f%% ", ckt->CKTsrcFact * 100); converged = NIiter (ckt, ckt->CKTdcTrcvMaxIter); /* If this doesn't work, try gmin stepping as well for the first solution */ if (converged != 0) { fprintf (stderr, "\n"); ckt->CKTdiagGmin = (ckt->CKTgshunt <= 0) ? ckt->CKTgmin : ckt->CKTgshunt; for (i = 0; i < 10; i++) ckt->CKTdiagGmin *= 10; for (i = 0; i <= 10; i++) { fprintf (stderr, "Trying gmin = %12.4E ", ckt->CKTdiagGmin); #ifdef XSPICE /* gtri - wbk - add convergence problem reporting flags */ ckt->enh->conv_debug.last_NIiter_call = MIF_TRUE; #endif ckt->CKTnoncon = 1; converged = NIiter (ckt, ckt->CKTdcTrcvMaxIter); if (converged != 0) { ckt->CKTdiagGmin = ckt->CKTgshunt; SPfrontEnd->IFerrorf (ERR_WARNING, "gmin step failed"); #ifdef XSPICE /* gtri - wbk - add convergence problem reporting flags */ ckt->enh->conv_debug.last_NIiter_call = MIF_FALSE; #endif break; } ckt->CKTdiagGmin /= 10; ckt->CKTmode = continuemode; SPfrontEnd->IFerrorf (ERR_INFO, "One successful gmin step"); } ckt->CKTdiagGmin = ckt->CKTgshunt; } /* If we've got convergence, then try stepping up the sources */ if (converged == 0) { double *OldRhsOld, *OldCKTstate0, raise = 0.001; int NumNodes = 0; for (n = ckt->CKTnodes; n; n = n->next) NumNodes++; OldRhsOld = TMALLOC(double, NumNodes + 1); OldCKTstate0 = TMALLOC(double, ckt->CKTnumStates + 1); for (i = 0, n = ckt->CKTnodes; n; n = n->next) OldRhsOld[i++] = ckt->CKTrhsOld[n->number]; memcpy(OldCKTstate0, ckt->CKTstate0, (size_t) ckt->CKTnumStates * sizeof(double)); SPfrontEnd->IFerrorf (ERR_INFO, "One successful source step"); ckt->CKTsrcFact = ConvFact + raise; do { fprintf (stderr, "Supplies reduced to %8.4f%% ", ckt->CKTsrcFact * 100); #ifdef XSPICE /* gtri - wbk - add convergence problem reporting flags */ ckt->enh->conv_debug.last_NIiter_call = MIF_TRUE; #endif iters = ckt->CKTstat->STATnumIter; converged = NIiter (ckt, ckt->CKTdcTrcvMaxIter); iters = ckt->CKTstat->STATnumIter - iters; ckt->CKTmode = continuemode; if (converged == 0) { ConvFact = ckt->CKTsrcFact; for (i = 0, n = ckt->CKTnodes; n; n = n->next) OldRhsOld[i++] = ckt->CKTrhsOld[n->number]; memcpy(OldCKTstate0, ckt->CKTstate0, (size_t) ckt->CKTnumStates * sizeof(double)); SPfrontEnd->IFerrorf (ERR_INFO, "One successful source step"); ckt->CKTsrcFact = ConvFact + raise; if (iters <= (ckt->CKTdcTrcvMaxIter / 4)) raise *= 1.5; if (iters > (3 * ckt->CKTdcTrcvMaxIter / 4)) raise *= 0.5; /* if (raise > 0.01) * raise = 0.01; */ } else { if (ckt->CKTsrcFact - ConvFact < 1e-8) break; raise /= 10; if (raise > 0.01) raise = 0.01; ckt->CKTsrcFact = ConvFact; for (i = 0, n = ckt->CKTnodes; n; n = n->next) ckt->CKTrhsOld[n->number] = OldRhsOld[i++]; memcpy(ckt->CKTstate0, OldCKTstate0, (size_t) ckt->CKTnumStates * sizeof(double)); } if (ckt->CKTsrcFact > 1) ckt->CKTsrcFact = 1; } while ((raise >= 1e-7) && (ConvFact < 1)); FREE (OldRhsOld); FREE (OldCKTstate0); } ckt->CKTsrcFact = 1; if (ConvFact != 1) { ckt->CKTcurrentAnalysis = DOING_TRAN; SPfrontEnd->IFerrorf (ERR_WARNING, "source stepping failed"); return E_ITERLIM; } else { SPfrontEnd->IFerrorf (ERR_INFO, "Source stepping completed"); return 0; } } /* Spice3 Source stepping * Modified 2005 - Paolo Nenzi (extracted from CKTop.c code) * * return value: * 0 -> method converged * 1 -> method failed * * Note that no path out of this code allows ckt->CKTsrcFact to be * anything but 1.00000. */ static int spice3_src (CKTcircuit *ckt, long int firstmode, long int continuemode, int iterlim) { int converged, i; NG_IGNORE(iterlim); ckt->CKTmode = firstmode; SPfrontEnd->IFerrorf (ERR_INFO, "Starting source stepping"); for (i = 0; i <= ckt->CKTnumSrcSteps; i++) { ckt->CKTsrcFact = ((double) i) / ((double) ckt->CKTnumSrcSteps); #ifdef XSPICE /* gtri - wbk - add convergence problem reporting flags */ ckt->enh->conv_debug.last_NIiter_call = MIF_TRUE; #endif converged = NIiter (ckt, ckt->CKTdcTrcvMaxIter); ckt->CKTmode = continuemode; if (converged != 0) { ckt->CKTsrcFact = 1; ckt->CKTcurrentAnalysis = DOING_TRAN; SPfrontEnd->IFerrorf (ERR_WARNING, "source stepping failed"); #ifdef XSPICE /* gtri - wbk - add convergence problem reporting flags */ ckt->enh->conv_debug.last_NIiter_call = MIF_FALSE; #endif return converged; } SPfrontEnd->IFerrorf (ERR_INFO, "One successful source step"); } SPfrontEnd->IFerrorf (ERR_INFO, "Source stepping completed"); ckt->CKTsrcFact = 1; #ifdef XSPICE /* gtri - wbk - add convergence problem reporting flags */ ckt->enh->conv_debug.last_NIiter_call = MIF_FALSE; #endif return 0; } tmpk8ny_4pz/src/spicelib/analysis/dcoaskq.c0000644000175000017500000000073713546075722021164 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/opdefs.h" #include "ngspice/cktdefs.h" /* ARGSUSED */ int DCOaskQuest(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value) { NG_IGNORE(ckt); NG_IGNORE(anal); NG_IGNORE(which); NG_IGNORE(value); return(E_BADPARM); } tmpk8ny_4pz/src/spicelib/analysis/cktdump.c0000644000175000017500000000456613546075722021212 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles, 1991 David A. Gates **********/ /* TODO: Ngspice and cider integration note: This file must be changed to be consistent with the ngspice interface. The SPICEdev structure must be changed by adding a pointer to DEVdump and DEVacct routines (as suggested below). Paolo Nenzi Dec 2001 No more sure about this notice (2003) */ /* CKTdump(ckt) * this is a simple program to dump the rhs vector to stdout */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #ifdef CIDER /* Begin cider integration */ #include "ngspice/gendefs.h" #include "ngspice/devdefs.h" /* End cider integration */ #endif void CKTdump(CKTcircuit *ckt, double ref, runDesc *plot) { IFvalue refData; IFvalue valData; #ifdef CIDER int i; #endif refData.rValue = ref; valData.v.numValue = ckt->CKTmaxEqNum-1; valData.v.vec.rVec = ckt->CKTrhsOld+1; SPfrontEnd->OUTpData (plot, &refData, &valData); #ifdef CIDER /* * Begin cider integration: * This code has been hacked changing the SPICEdev structure. * SPICEdev now has DEVdump and DEVacct as members. The * following code works for any devices but as of this * comment is written, only numerical devices have DEVdump * and DEVacct routine (NUMD, NBJT, NUMD2, NBJT2, NUMOS). */ for (i=0; iDEVdump && ckt->CKThead[i] ) { DEVices[i]->DEVdump (ckt->CKThead[i], ckt); } } /* End cider integration */ #endif /* CIDER */ } #ifdef CIDER /* * Routine to dump statistics about numerical devices * * The following lines are historical: * This is inefficient, because we have to look up the indices * of the devices in the device table. Would be simpler if * DEVices had an entry for an accounting function, so that indirection * could be used. * ------------------ * The SPICEdev structure has been hacked and now has a DEVacct entry. */ void NDEVacct(CKTcircuit *ckt, FILE *file) { int i; if ( !ckt->CKTisSetup ) { return; } for (i=0; iDEVacct && ckt->CKThead[i] ) { DEVices[i]->DEVacct (ckt->CKThead[i], ckt, file); } } return; } /* End cider integration */ #endif /* CIDER */ tmpk8ny_4pz/src/spicelib/analysis/cktsopt.c0000644000175000017500000003201113546075722021214 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* * CKTsetOpt(ckt,opt,value) * set the specified 'opt' to have value 'value' in the * given circuit 'ckt'. */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/optdefs.h" #include "ngspice/tskdefs.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" #include "analysis.h" #ifdef XSPICE #include "ngspice/evt.h" #include "ngspice/enh.h" /* gtri - begin - wbk - add includes */ #include "ngspice/mif.h" /* gtri - end - wbk - add includes */ #endif /* ARGSUSED */ int CKTsetOpt(CKTcircuit *ckt, JOB *anal, int opt, IFvalue *val) { TSKtask *task = (TSKtask *)anal; NG_IGNORE(ckt); switch(opt) { case OPT_NOOPITER: task->TSKnoOpIter = (val->iValue != 0); break; case OPT_GMIN: task->TSKgmin = val->rValue; break; case OPT_GSHUNT: task->TSKgshunt = val->rValue; break; case OPT_RELTOL: task->TSKreltol = val->rValue; break; case OPT_ABSTOL: task->TSKabstol = val->rValue; break; case OPT_VNTOL: task->TSKvoltTol = val->rValue; break; case OPT_TRTOL: task->TSKtrtol = val->rValue; break; case OPT_CHGTOL: task->TSKchgtol = val->rValue; break; case OPT_PIVTOL: task->TSKpivotAbsTol = val->rValue; break; case OPT_PIVREL: task->TSKpivotRelTol = val->rValue; break; case OPT_TNOM: task->TSKnomTemp = val->rValue + CONSTCtoK; /* Centegrade to Kelvin */ break; case OPT_TEMP: task->TSKtemp = val->rValue + CONSTCtoK; /* Centegrade to Kelvin */ break; case OPT_ITL1: task->TSKdcMaxIter = val->iValue; break; case OPT_ITL2: task->TSKdcTrcvMaxIter = val->iValue; break; case OPT_ITL3: break; case OPT_ITL4: task->TSKtranMaxIter = val->iValue; break; case OPT_ITL5: break; case OPT_SRCSTEPS: task->TSKnumSrcSteps = val->iValue; break; case OPT_GMINSTEPS: task->TSKnumGminSteps = val->iValue; break; case OPT_GMINFACT: task->TSKgminFactor = val->rValue; break; case OPT_DEFM: task->TSKdefaultMosM = val->rValue; break; case OPT_DEFL: task->TSKdefaultMosL = val->rValue; break; case OPT_DEFW: task->TSKdefaultMosW = val->rValue; break; case OPT_DEFAD: task->TSKdefaultMosAD = val->rValue; break; case OPT_DEFAS: task->TSKdefaultMosAD = val->rValue; break; case OPT_BYPASS: task->TSKbypass = val->iValue; break; case OPT_INDVERBOSITY: task->TSKindverbosity = val->iValue; break; case OPT_XMU: task->TSKxmu = val->rValue; break; case OPT_MAXORD: task->TSKmaxOrder = val->iValue; /* Check options method and maxorder for consistency */ if (task->TSKmaxOrder < 1) { task->TSKmaxOrder = 1; fprintf(stderr,"\nWarning -- Option maxord < 1 not allowed in ngspice\nSet to 1\n\n"); } else if (task->TSKmaxOrder > 6) { task->TSKmaxOrder = 6; fprintf(stderr,"\nWarning -- Option maxord > 6 not allowed in ngspice\nSet to 6\n\n"); } break; case OPT_OLDLIMIT: task->TSKfixLimit = (val->iValue != 0); break; case OPT_MINBREAK: task->TSKminBreak = val->rValue; break; case OPT_METHOD: if(strncmp(val->sValue,"trap", 4)==0) task->TSKintegrateMethod=TRAPEZOIDAL; else if (strcmp(val->sValue,"gear")==0) task->TSKintegrateMethod=GEAR; else return(E_METHOD); break; case OPT_TRYTOCOMPACT: task->TSKtryToCompact = (val->iValue != 0); break; case OPT_BADMOS3: task->TSKbadMos3 = (val->iValue != 0); break; case OPT_KEEPOPINFO: task->TSKkeepOpInfo = (val->iValue != 0); break; case OPT_COPYNODESETS: task->TSKcopyNodesets = (val->iValue != 0); break; case OPT_NODEDAMPING: task->TSKnodeDamping = (val->iValue != 0); break; case OPT_ABSDV: task->TSKabsDv = val->rValue; break; case OPT_RELDV: task->TSKrelDv = val->rValue; break; case OPT_NOOPAC: task->TSKnoopac = (val->iValue != 0); break; case OPT_EPSMIN: task->TSKepsmin = val->rValue; break; /* gtri - begin - wbk - add new options */ #ifdef XSPICE case OPT_EVT_MAX_OP_ALTER: ckt->evt->limits.max_op_alternations = val->iValue; break; case OPT_EVT_MAX_EVT_PASSES: ckt->evt->limits.max_event_passes = val->iValue; break; case OPT_ENH_NOOPALTER: ckt->evt->options.op_alternate = MIF_FALSE; break; case OPT_ENH_RAMPTIME: ckt->enh->ramp.ramptime = val->rValue; break; case OPT_ENH_CONV_LIMIT: ckt->enh->conv_limit.enabled = MIF_TRUE; break; case OPT_ENH_CONV_STEP: ckt->enh->conv_limit.step = val->rValue; ckt->enh->conv_limit.enabled = MIF_TRUE; break; case OPT_ENH_CONV_ABS_STEP: ckt->enh->conv_limit.abs_step = val->rValue; ckt->enh->conv_limit.enabled = MIF_TRUE; break; case OPT_MIF_AUTO_PARTIAL: g_mif_info.auto_partial.global = MIF_TRUE; break; case OPT_ENH_RSHUNT: if(val->rValue > 1.0e-30) { ckt->enh->rshunt_data.enabled = MIF_TRUE; ckt->enh->rshunt_data.gshunt = 1.0 / val->rValue; } else { printf("WARNING - Rshunt option too small. Ignored.\n"); } break; #endif /* gtri - end - wbk - add new options */ default: return(-1); } return(0); } static IFparm OPTtbl[] = { #ifdef XSPICE /* gtri - begin - wbk - add new options */ { "maxopalter", OPT_EVT_MAX_OP_ALTER, IF_SET|IF_INTEGER, "Maximum analog/event alternations in DCOP" }, { "maxevtiter", OPT_EVT_MAX_EVT_PASSES, IF_SET|IF_INTEGER, "Maximum event iterations at analysis point" }, { "noopalter", OPT_ENH_NOOPALTER, IF_SET|IF_FLAG, "Do not do analog/event alternation in DCOP" }, { "ramptime", OPT_ENH_RAMPTIME, IF_SET|IF_REAL, "Transient analysis supply ramping time" }, { "convlimit", OPT_ENH_CONV_LIMIT, IF_SET|IF_FLAG, "Enable convergence assistance on code models" }, { "convstep", OPT_ENH_CONV_STEP, IF_SET|IF_REAL, "Fractional step allowed by code model inputs between iterations" }, { "convabsstep", OPT_ENH_CONV_ABS_STEP, IF_SET|IF_REAL, "Absolute step allowed by code model inputs between iterations" }, { "autopartial", OPT_MIF_AUTO_PARTIAL, IF_SET|IF_FLAG, "Use auto-partial computation for all models" }, { "rshunt", OPT_ENH_RSHUNT, IF_SET|IF_REAL, "Shunt resistance from analog nodes to ground" }, /* gtri - end - wbk - add new options */ #endif { "noopiter", OPT_NOOPITER,IF_SET|IF_FLAG,"Go directly to gmin stepping" }, { "gmin", OPT_GMIN,IF_SET|IF_REAL,"Minimum conductance" }, { "gshunt", OPT_GSHUNT,IF_SET|IF_REAL,"Shunt conductance" }, { "reltol", OPT_RELTOL,IF_SET|IF_REAL ,"Relative error tolerence"}, { "abstol", OPT_ABSTOL,IF_SET|IF_REAL,"Absolute error tolerence" }, { "vntol", OPT_VNTOL,IF_SET|IF_REAL,"Voltage error tolerence" }, { "trtol", OPT_TRTOL,IF_SET|IF_REAL,"Truncation error overestimation factor" }, { "chgtol", OPT_CHGTOL,IF_SET|IF_REAL, "Charge error tolerence" }, { "pivtol", OPT_PIVTOL,IF_SET|IF_REAL, "Minimum acceptable pivot" }, { "pivrel", OPT_PIVREL,IF_SET|IF_REAL, "Minimum acceptable ratio of pivot" }, { "tnom", OPT_TNOM,IF_SET|IF_ASK|IF_REAL, "Nominal temperature" }, { "temp", OPT_TEMP,IF_SET|IF_ASK|IF_REAL, "Operating temperature" }, { "itl1", OPT_ITL1,IF_SET|IF_INTEGER,"DC iteration limit" }, { "itl2", OPT_ITL2,IF_SET|IF_INTEGER,"DC transfer curve iteration limit" }, { "itl3", OPT_ITL3, IF_INTEGER,"Lower transient iteration limit"}, { "itl4", OPT_ITL4,IF_SET|IF_INTEGER,"Upper transient iteration limit" }, { "itl5", OPT_ITL5, IF_INTEGER,"Total transient iteration limit"}, { "itl6", OPT_SRCSTEPS, IF_SET|IF_INTEGER,"number of source steps"}, { "srcsteps", OPT_SRCSTEPS, IF_SET|IF_INTEGER,"number of source steps"}, { "gminsteps", OPT_GMINSTEPS, IF_SET|IF_INTEGER,"number of Gmin steps"}, { "gminfactor", OPT_GMINFACT, IF_SET|IF_REAL,"factor per Gmin step"}, { "acct", 0, IF_FLAG ,"Print accounting"}, { "list", 0, IF_FLAG, "Print a listing" }, { "nomod", 0, IF_FLAG, "Don't print a model summary" }, { "nopage", 0, IF_FLAG, "Don't insert page breaks" }, { "node", 0, IF_FLAG,"Print a node connection summary" }, { "opts", 0, IF_FLAG, "Print a list of the options" }, { "oldlimit", OPT_OLDLIMIT, IF_SET|IF_FLAG, "use SPICE2 MOSfet limiting" }, { "numdgt", 0, IF_INTEGER, "Set number of digits printed"}, { "cptime", 0, IF_REAL, "Total cpu time in seconds" }, { "limtim", 0, IF_INTEGER, "Time to reserve for output" }, { "limpts", 0,IF_INTEGER,"Maximum points per analysis"}, { "lvlcod", 0, IF_INTEGER,"Generate machine code" }, { "lvltim", 0, IF_INTEGER,"Type of timestep control" }, { "method", OPT_METHOD, IF_SET|IF_STRING,"Integration method" }, { "maxord", OPT_MAXORD, IF_SET|IF_INTEGER,"Maximum integration order" }, { "indverbosity", OPT_INDVERBOSITY, IF_SET|IF_INTEGER,"Control Inductive Systems Check (coupling)" }, { "xmu", OPT_XMU, IF_SET|IF_REAL,"Coefficient for trapezoidal method" }, { "defm", OPT_DEFM,IF_SET|IF_REAL,"Default MOSfet Multiplier" }, { "defl", OPT_DEFL,IF_SET|IF_REAL,"Default MOSfet length" }, { "defw", OPT_DEFW,IF_SET|IF_REAL,"Default MOSfet width" }, { "minbreak", OPT_MINBREAK,IF_SET|IF_REAL,"Minimum time between breakpoints" }, { "defad", OPT_DEFAD,IF_SET|IF_REAL,"Default MOSfet area of drain" }, { "defas", OPT_DEFAS,IF_SET|IF_REAL,"Default MOSfet area of source" }, { "bypass",OPT_BYPASS,IF_SET|IF_INTEGER,"Allow bypass of unchanging elements"}, { "totiter", OPT_ITERS, IF_ASK|IF_INTEGER,"Total iterations" }, { "traniter", OPT_TRANIT, IF_ASK|IF_INTEGER ,"Transient iterations"}, { "equations", OPT_EQNS, IF_ASK|IF_INTEGER,"Circuit Equations" }, { "originalnz", OPT_ORIGNZ, IF_ASK|IF_INTEGER,"Circuit original non-zeroes" }, { "fillinnz", OPT_FILLNZ, IF_ASK|IF_INTEGER,"Circuit fill-in non-zeroes" }, { "totalnz", OPT_TOTALNZ, IF_ASK|IF_INTEGER,"Circuit total non-zeroes" }, { "tranpoints", OPT_TRANPTS, IF_ASK|IF_INTEGER,"Transient timepoints" }, { "accept", OPT_TRANACCPT, IF_ASK|IF_INTEGER,"Accepted timepoints" }, { "rejected", OPT_TRANRJCT, IF_ASK|IF_INTEGER,"Rejected timepoints" }, { "time", OPT_TOTANALTIME, IF_ASK|IF_REAL,"Total analysis time (seconds)" }, { "loadtime", OPT_LOADTIME, IF_ASK|IF_REAL,"Matrix load time" }, { "synctime", OPT_SYNCTIME, IF_ASK|IF_REAL,"Matrix synchronize time" }, { "reordertime", OPT_REORDTIME, IF_ASK|IF_REAL,"Matrix reorder time" }, { "factortime", OPT_DECOMP, IF_ASK|IF_REAL,"Matrix factor time" }, { "solvetime", OPT_SOLVE, IF_ASK|IF_REAL,"Matrix solve time" }, { "trantime", OPT_TRANTIME, IF_ASK|IF_REAL,"Transient analysis time" }, { "tranloadtime", OPT_TRANLOAD, IF_ASK|IF_REAL,"Transient load time" }, { "transynctime", OPT_TRANSYNC, IF_ASK|IF_REAL,"Transient sync time" }, { "tranfactortime", OPT_TRANDECOMP,IF_ASK|IF_REAL,"Transient factor time" }, { "transolvetime", OPT_TRANSOLVE, IF_ASK|IF_REAL,"Transient solve time" }, { "trantrunctime", OPT_TRANTRUNC, IF_ASK|IF_REAL,"Transient trunc time" }, { "trancuriters", OPT_TRANCURITER, IF_ASK|IF_INTEGER, "Transient iterations for the last time point" }, { "actime", OPT_ACTIME, IF_ASK|IF_REAL,"AC analysis time" }, { "acloadtime", OPT_ACLOAD, IF_ASK|IF_REAL,"AC load time" }, { "acsynctime", OPT_ACSYNC, IF_ASK|IF_REAL,"AC sync time" }, { "acfactortime", OPT_ACDECOMP,IF_ASK|IF_REAL,"AC factor time" }, { "acsolvetime", OPT_ACSOLVE, IF_ASK|IF_REAL,"AC solve time" }, { "trytocompact", OPT_TRYTOCOMPACT, IF_SET|IF_FLAG, "Try compaction for LTRA lines" }, { "badmos3", OPT_BADMOS3, IF_SET|IF_FLAG, "use old mos3 model (discontinuous with respect to kappa)" }, { "keepopinfo", OPT_KEEPOPINFO, IF_SET|IF_FLAG, "Record operating point for each small-signal analysis" }, { "copynodesets", OPT_COPYNODESETS, IF_SET|IF_FLAG, "Copy nodesets from device terminals to internal nodes" }, { "nodedamping", OPT_NODEDAMPING, IF_SET|IF_FLAG, "Limit iteration to iteration node voltage change" }, { "absdv", OPT_ABSDV, IF_SET|IF_REAL, "Maximum absolute iter-iter node voltage change" }, { "reldv", OPT_RELDV, IF_SET|IF_REAL, "Maximum relative iter-iter node voltage change" }, { "noopac", OPT_NOOPAC, IF_SET|IF_FLAG, "No op calculation in ac if circuit is linear" }, { "epsmin", OPT_EPSMIN, IF_SET|IF_REAL, "Minimum value for log" } }; int OPTcount = NUMELEMS(OPTtbl); SPICEanalysis OPTinfo = { { "options", "Task option selection", NUMELEMS(OPTtbl), OPTtbl }, 0, /* no size associated with options */ NODOMAIN, 0, CKTsetOpt, CKTacct, NULL, NULL }; tmpk8ny_4pz/src/spicelib/analysis/dkerproc.c0000644000175000017500000000216613546075722021346 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" #include "ngspice/distodef.h" int DkerProc(int type, double *rPtr, double *iPtr, int size, DISTOAN *job) { int i; NG_IGNORE(job); switch(type) { case D_F1: for (i=1;i<=size;i++) { iPtr[i] *= 2.0; /* convert to sinusoid amplitude */ rPtr[i] *= 2.0; } break; case D_F2: for (i=1;i<=size;i++) { rPtr[i] *= 2.0; iPtr[i] *= 2.0; } break; case D_TWOF1: for (i=1;i<=size;i++) { iPtr[i] *= 2.0; rPtr[i] *= 2.0; } break; case D_THRF1: for (i=1;i<=size;i++) { iPtr[i] *= 2.0; rPtr[i] *= 2.0; } break; case D_F1PF2: for (i=1;i<=size;i++) { iPtr[i] *= 4.0; rPtr[i] *= 4.0; } break; case D_F1MF2: for (i=1;i<=size;i++) { iPtr[i] *= 4.0; rPtr[i] *= 4.0; } break; case D_2F1MF2: for (i=1;i<=size;i++) { iPtr[i] *= 6.0; rPtr[i] *= 6.0; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/analysis/cktnoise.c0000644000175000017500000001014713546075722021352 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Gary W. Ng **********/ /* * CKTnoise (ckt, mode, operation, data) * * This routine is responsible for naming and evaluating all of the * noise sources in the circuit. It uses a series of subroutines to * name and evaluate the sources associated with each model, and then * it evaluates the noise for the entire circuit. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/sperror.h" int CKTnoise (CKTcircuit *ckt, int mode, int operation, Ndata *data) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; double outNdens; int i; IFvalue outData; /* output variable (points to list of outputs)*/ IFvalue refVal; /* reference variable (always 0)*/ int error; outNdens = 0.0; /* let each device decide how many and what type of noise sources it has */ for (i=0; i < DEVmaxnum; i++) { if ( DEVices[i] && DEVices[i]->DEVnoise && ckt->CKThead[i] ) { error = DEVices[i]->DEVnoise (mode, operation, ckt->CKThead[i], ckt,data, &outNdens); if (error) return (error); } } switch (operation) { case N_OPEN: /* take care of the noise for the circuit as a whole */ switch (mode) { case N_DENS: data->namelist = TREALLOC(IFuid, data->namelist, data->numPlots + 1); SPfrontEnd->IFnewUid (ckt, &(data->namelist[data->numPlots++]), NULL, "onoise_spectrum", UID_OTHER, NULL); data->namelist = TREALLOC(IFuid, data->namelist, data->numPlots + 1); SPfrontEnd->IFnewUid (ckt, &(data->namelist[data->numPlots++]), NULL, "inoise_spectrum", UID_OTHER, NULL); /* we've added two more plots */ data->outpVector = TMALLOC(double, data->numPlots); data->squared_value = data->squared ? NULL : TMALLOC(char, data->numPlots); break; case INT_NOIZ: data->namelist = TREALLOC(IFuid, data->namelist, data->numPlots + 1); SPfrontEnd->IFnewUid (ckt, &(data->namelist[data->numPlots++]), NULL, "onoise_total", UID_OTHER, NULL); data->namelist = TREALLOC(IFuid, data->namelist, data->numPlots + 1); SPfrontEnd->IFnewUid (ckt, &(data->namelist[data->numPlots++]), NULL, "inoise_total", UID_OTHER, NULL); /* we've added two more plots */ data->outpVector = TMALLOC(double, data->numPlots); data->squared_value = data->squared ? NULL : TMALLOC(char, data->numPlots); break; default: return (E_INTERN); } break; case N_CALC: switch (mode) { case N_DENS: if ((job->NStpsSm == 0) || data->prtSummary) { data->outpVector[data->outNumber++] = outNdens; data->outpVector[data->outNumber++] = (outNdens * data->GainSqInv); refVal.rValue = data->freq; /* the reference is the freq */ if (!data->squared) for (i = 0; i < data->outNumber; i++) if (data->squared_value[i]) data->outpVector[i] = sqrt(data->outpVector[i]); outData.v.numValue = data->outNumber; /* vector number */ outData.v.vec.rVec = data->outpVector; /* vector of outputs */ SPfrontEnd->OUTpData (data->NplotPtr, &refVal, &outData); } break; case INT_NOIZ: data->outpVector[data->outNumber++] = data->outNoiz; data->outpVector[data->outNumber++] = data->inNoise; if (!data->squared) for (i = 0; i < data->outNumber; i++) if (data->squared_value[i]) data->outpVector[i] = sqrt(data->outpVector[i]); outData.v.vec.rVec = data->outpVector; /* vector of outputs */ outData.v.numValue = data->outNumber; /* vector number */ SPfrontEnd->OUTpData (data->NplotPtr, &refVal, &outData); break; default: return (E_INTERN); } break; case N_CLOSE: SPfrontEnd->OUTendPlot (data->NplotPtr); FREE(data->namelist); FREE(data->outpVector); FREE(data->squared_value); break; default: return (E_INTERN); } return (OK); } tmpk8ny_4pz/src/spicelib/analysis/nevalsrc.c0000644000175000017500000001143713546075722021353 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Gary W. Ng **********/ /* * NevalSrc (noise, lnNoise, ckt, type, node1, node2, param) * This routine evaluates the noise due to different physical * phenomena. This includes the "shot" noise associated with dc * currents in semiconductors and the "thermal" noise associated with * resistance. Although semiconductors also display "flicker" (1/f) * noise, the lack of a unified model requires us to handle it on a * "case by case" basis. What we CAN provide, though, is the noise * gain associated with the 1/f source. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/const.h" #include "ngspice/noisedef.h" void NevalSrc (double *noise, double *lnNoise, CKTcircuit *ckt, int type, int node1, int node2, double param) { double realVal; double imagVal; double gain; realVal = ckt->CKTrhs [node1] - ckt->CKTrhs [node2]; imagVal = ckt->CKTirhs [node1] - ckt->CKTirhs [node2]; gain = (realVal*realVal) + (imagVal*imagVal); switch (type) { case SHOTNOISE: *noise = gain * 2 * CHARGE * fabs(param); /* param is the dc current in a semiconductor */ *lnNoise = log( MAX(*noise,N_MINLOG) ); break; case THERMNOISE: *noise = gain * 4 * CONSTboltz * ckt->CKTtemp * param; /* param is the conductance of a resistor */ *lnNoise = log( MAX(*noise,N_MINLOG) ); break; case N_GAIN: *noise = gain; break; } } /* * NevalSrc2 (noise, lnNoise, ckt, type, node1, node2, param, node3, node4, param2) * This routine is a modified version of NevalSrc() that computes * the output noise due to two fully-correlated noise sources. It is * useful for implementing correlated gate and drain noises in MOSFETs. * * Like NevalSrc(), it evaluates the noise due to different physical * phenomena. This includes the "shot" noise associated with dc * currents in semiconductors and the "thermal" noise associated with * resistance. Although semiconductors also display "flicker" (1/f) * noise, the lack of a unified model requires us to handle it on a * "case by case" basis. What we CAN provide, though, is the noise * gain associated with the 1/f source. */ /* Modified by Darsen Lu for BSIM4 tnoiMod=2 10/10/2010 */ void NevalSrc2 ( double *noise, double *lnNoise, CKTcircuit *ckt, int type, int node1, int node2, double param1, int node3, int node4, double param2, double phi21) /* Phase of signal 2 relative to signal 1 */ { double realVal1, imagVal1; double realVal2, imagVal2; double realOut, imagOut, param_gain; double T0, T1, T2, T3; realVal1 = ckt->CKTrhs [node1] - ckt->CKTrhs [node2]; imagVal1 = ckt->CKTirhs [node1] - ckt->CKTirhs [node2]; realVal2 = ckt->CKTrhs [node3] - ckt->CKTrhs [node4]; imagVal2 = ckt->CKTirhs [node3] - ckt->CKTirhs [node4]; T0 = sqrt(param1); T1 = sqrt(param2); T2 = T1 * cos(phi21); T3 = T1 * sin(phi21); realOut = T0 * realVal1 + T2 * realVal2 - T3 * imagVal2; imagOut = T0 * imagVal1 + T2 * imagVal2 + T3 * realVal2; param_gain = (realOut*realOut) + (imagOut*imagOut); switch (type) { case SHOTNOISE: *noise = 2.0 * CHARGE * fabs(param_gain); /* param is the dc current in a semiconductor */ *lnNoise = log( MAX(*noise,N_MINLOG) ); break; case THERMNOISE: *noise = 4.0 * CONSTboltz * ckt->CKTtemp * param_gain; /* param is the conductance of a resistor */ *lnNoise = log( MAX(*noise,N_MINLOG) ); break; case N_GAIN: *noise = 0.0; break; } } /* PN 2003: The following function includes instance dtemp in thermal noise calculation. It will replace NevalSrc as soon as all devices will implement dtemp feature. */ void NevalSrcInstanceTemp (double *noise, double *lnNoise, CKTcircuit *ckt, int type, int node1, int node2, double param, double param2) { double realVal; double imagVal; double gain; realVal = ckt->CKTrhs [node1] - ckt->CKTrhs [node2]; imagVal = ckt->CKTirhs [node1] - ckt->CKTirhs [node2]; gain = (realVal*realVal) + (imagVal*imagVal); switch (type) { case SHOTNOISE: *noise = gain * 2 * CHARGE * fabs(param); /* param is the dc current in a semiconductor */ *lnNoise = log( MAX(*noise,N_MINLOG) ); break; case THERMNOISE: *noise = gain * 4 * CONSTboltz * (ckt->CKTtemp + param2) /* param2 is the instance temperature difference */ * param; /* param is the conductance of a resistor */ *lnNoise = log( MAX(*noise,N_MINLOG) ); break; case N_GAIN: *noise = gain; break; } } tmpk8ny_4pz/src/spicelib/analysis/acaskq.c0000644000175000017500000000230613546075722020774 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/acdefs.h" #include "ngspice/cktdefs.h" /* ARGSUSED */ int ACaskQuest(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value) { ACAN *job = (ACAN *) anal; NG_IGNORE(ckt); switch(which) { case AC_START: value->rValue = job->ACstartFreq; break; case AC_STOP: value->rValue = job->ACstopFreq ; break; case AC_STEPS: value->iValue = job->ACnumberSteps; break; case AC_DEC: if (job->ACstepType == DECADE) { value->iValue=1; } else { value->iValue=0; } break; case AC_OCT: if (job->ACstepType == OCTAVE) { value->iValue=1; } else { value->iValue=0; } break; case AC_LIN: if (job->ACstepType == LINEAR) { value->iValue=1; } else { value->iValue=0; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/analysis/distoan.c0000644000175000017500000004370413546075722021201 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/distodef.h" #include "ngspice/sperror.h" static void DISswap(double **a, double **b) { SWAP(double *, *a, *b); } static void DmemAlloc(double **a, int size) { *a = TMALLOC(double, size + 1); } static void DstorAlloc(double ***header, int size) { *header = TMALLOC(double *, size); } int DISTOan(CKTcircuit *ckt, int restart) { double freq; static double freqTol; /* tolerence parameter for finding final frequency */ static int NoOfPoints; static int size; static int displacement; int error; int i; int numNames; IFuid *nameList; IFuid freqUid; runDesc *acPlot = NULL; DISTOAN *job = (DISTOAN *) ckt->CKTcurJob; static char *nof2src = "No source with f2 distortion input"; #ifdef DISTODEBUG double time,time1; #endif NG_IGNORE(restart); /* start at beginning */ #ifdef D_DBG_BLOCKTIMES time1 = SPfrontEnd->IFseconds(); #endif switch(job->DstepType) { case DECADE: job->DfreqDelta = exp(log(10.0)/job->DnumSteps); freqTol = job->DfreqDelta * job->DstopF1 * ckt->CKTreltol; NoOfPoints = 1 + (int)floor ((job->DnumSteps) / log(10.0) * log((job->DstopF1+freqTol)/(job->DstartF1))); break; case OCTAVE: job->DfreqDelta = exp(log(2.0)/job->DnumSteps); freqTol = job->DfreqDelta * job->DstopF1 * ckt->CKTreltol; NoOfPoints = 1 + (int)floor ((job->DnumSteps) / log(2.0) * log((job->DstopF1+freqTol)/(job->DstartF1))); break; case LINEAR: job->DfreqDelta = (job->DstopF1 - job->DstartF1)/ (job->DnumSteps+1); freqTol = job->DfreqDelta * ckt->CKTreltol; NoOfPoints = job->DnumSteps+1+ (int)floor(freqTol/(job->DfreqDelta)); break; default: return(E_BADPARM); } error = CKTop(ckt, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITJCT, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITFLOAT, ckt->CKTdcMaxIter); if(error) return(error); ckt->CKTmode = (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITSMSIG; error = CKTload(ckt); if(error) return(error); error = CKTnames(ckt,&numNames,&nameList); if(error) return(error); if (ckt->CKTkeepOpInfo) { /* Dump operating point. */ error = SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob, "Distortion Operating Point", NULL, IF_REAL, numNames, nameList, IF_REAL, &acPlot); if(error) return(error); CKTdump(ckt, 0.0, acPlot); SPfrontEnd->OUTendPlot (acPlot); acPlot = NULL; } #ifdef D_DBG_BLOCKTIMES time1 = SPfrontEnd->IFseconds() - time1; printf("Time for initial work (including op. pt.): %g seconds \n", time1); #endif #ifdef D_DBG_BLOCKTIMES time1 = SPfrontEnd->IFseconds(); #endif error = CKTdisto(ckt,D_SETUP); #ifdef D_DBG_BLOCKTIMES time1 = SPfrontEnd->IFseconds() - time1; printf("Time outside D_SETUP: %g seconds \n", time1); #endif if (error) return(error); displacement = 0; #ifdef D_DBG_BLOCKTIMES time1 = SPfrontEnd->IFseconds(); #endif freq = job->DstartF1; if (job->Df2wanted) { /* omegadelta = 2.0 * M_PI * freq *(1. - job->Df2ovrF1); */ /* keeping f2 const to be compatible with spectre */ job->Domega2 = 2.0 * M_PI * freq * job->Df2ovrF1; } DstorAlloc( &(job->r1H1stor),NoOfPoints+2); DstorAlloc( &(job->r2H11stor),NoOfPoints+2); DstorAlloc( &(job->i1H1stor),NoOfPoints+2); DstorAlloc( &(job->i2H11stor),NoOfPoints+2); size = SMPmatSize(ckt->CKTmatrix); if (! job->r1H1ptr) { DmemAlloc( &(job->r1H1ptr) , size+2); if (! job->r1H1ptr) return (E_NOMEM); } if (! job->r2H11ptr) { DmemAlloc( &(job->r2H11ptr) , size+2); if (! job->r2H11ptr) return (E_NOMEM); } if (! job->i1H1ptr) { DmemAlloc( &(job->i1H1ptr) , size+2); if (! job->i1H1ptr) return (E_NOMEM); } if (! job->i2H11ptr) { DmemAlloc( &(job->i2H11ptr) , size+2); if (! job->i2H11ptr) return (E_NOMEM); } if (! (job->Df2wanted)) { DstorAlloc( &(job->r3H11stor),NoOfPoints+2); DstorAlloc( &(job->i3H11stor),NoOfPoints+2); if (! job->r3H11ptr) { DmemAlloc( &(job->r3H11ptr) , size+2); if (! job->r3H11ptr) return (E_NOMEM); } if (! job->i3H11ptr) { DmemAlloc( &(job->i3H11ptr) , size+2); if (! job->i3H11ptr) return (E_NOMEM); } } else { DstorAlloc ( &(job->r1H2stor),NoOfPoints+2); DstorAlloc ( &(job->i1H2stor),NoOfPoints+2); DstorAlloc ( &(job->r2H12stor),NoOfPoints+2); DstorAlloc ( &(job->i2H12stor),NoOfPoints+2); DstorAlloc ( &(job->r2H1m2stor),NoOfPoints+2); DstorAlloc ( &(job->i2H1m2stor),NoOfPoints+2); DstorAlloc ( &(job->r3H1m2stor),NoOfPoints+2); DstorAlloc ( &(job->i3H1m2stor),NoOfPoints+2); if (! job->r1H2ptr) { DmemAlloc( &(job->r1H2ptr) , size+2); if (! job->r1H2ptr) return (E_NOMEM); } if (! job->r2H12ptr) { DmemAlloc( &(job->r2H12ptr) , size+2); if (! job->r2H12ptr) return (E_NOMEM); } if (! job->r2H1m2ptr) { DmemAlloc( &(job->r2H1m2ptr) , size+2); if (! job->r2H1m2ptr) return (E_NOMEM); } if (! job->r3H1m2ptr) { DmemAlloc( &(job->r3H1m2ptr) , size+2); if (! job->r3H1m2ptr) return (E_NOMEM); } if (! job->i1H2ptr) { DmemAlloc( &(job->i1H2ptr) , size+2); if (! job->i1H2ptr) return (E_NOMEM); } if (! job->i2H12ptr) { DmemAlloc( &(job->i2H12ptr) , size+2); if (! job->i2H12ptr) return (E_NOMEM); } if (! job->i2H1m2ptr) { DmemAlloc( &(job->i2H1m2ptr) , size+2); if (! job->i2H1m2ptr) return (E_NOMEM); } if (! job->i3H1m2ptr) { DmemAlloc( &(job->i3H1m2ptr) , size+2); if (! job->i3H1m2ptr) return (E_NOMEM); } } #ifdef D_DBG_BLOCKTIMES time1 = SPfrontEnd->IFseconds() - time1; printf("Time for other setup (storage allocation etc.): %g seconds \n", time1); #endif #ifdef D_DBG_BLOCKTIMES time1 = SPfrontEnd->IFseconds(); #endif while(freq <= job->DstopF1+freqTol) { /* if(SPfrontEnd->IFpauseTest()) { job->DsaveF1 = freq; return(E_PAUSE); } */ ckt->CKTomega = 2.0 * M_PI *freq; job->Domega1 = ckt->CKTomega; ckt->CKTmode = (ckt->CKTmode&MODEUIC) | MODEAC; #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds(); #endif error = CKTacLoad(ckt); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds() - time; printf("Time for CKTacLoad: %g seconds \n", time); #endif if (error) return(error); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds(); #endif error = CKTdisto(ckt,D_RHSF1); /* sets up the RHS vector for all inputs corresponding to F1 */ #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds() - time; printf("Time outside DISTO_RHSFIX: %g seconds \n", time); #endif if (error) return(error); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds(); #endif error = NIdIter(ckt); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds() - time; printf("Time for NIdIter: %g seconds \n", time); #endif if (error) return(error); DISswap(&(ckt->CKTrhsOld),&(job->r1H1ptr)); DISswap(&(ckt->CKTirhsOld),&(job->i1H1ptr)); ckt->CKTomega *= 2; error = CKTacLoad(ckt); if (error) return(error); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds(); #endif error = CKTdisto(ckt,D_TWOF1); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds() - time; printf("Time outside D_TWOF1: %g seconds \n", time); #endif if (error) return(error); error = NIdIter(ckt); if (error) return(error); DISswap(&(ckt->CKTrhsOld),&(job->r2H11ptr)); DISswap(&(ckt->CKTirhsOld),&(job->i2H11ptr)); if (! (job->Df2wanted )) { ckt->CKTomega = 3 * job->Domega1; error = CKTacLoad(ckt); if (error) return(error); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds(); #endif error = CKTdisto(ckt,D_THRF1); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds() - time; printf("Time outside D_THRF1: %g seconds \n", time); #endif if (error) return(error); error = NIdIter(ckt); if (error) return(error); DISswap(&(ckt->CKTrhsOld),&(job->r3H11ptr)); DISswap(&(ckt->CKTirhsOld),&(job->i3H11ptr)); } else if (job->Df2given) { /* ckt->CKTomega = job->Domega1 - omegadelta; job->Domega2 = ckt->CKTomega; */ ckt->CKTomega = job->Domega2; error = CKTacLoad(ckt); if (error) return(error); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds(); #endif error = CKTdisto(ckt,D_RHSF2); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds() - time; printf("Time outside DISTO_RHSFIX: %g seconds \n", time); #endif if (error) return(error); error = NIdIter(ckt); if (error) return(error); DISswap(&(ckt->CKTrhsOld),&(job->r1H2ptr)); DISswap(&(ckt->CKTirhsOld),&(job->i1H2ptr)); ckt->CKTomega = job->Domega1 + job->Domega2; error = CKTacLoad(ckt); if (error) return(error); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds(); #endif error = CKTdisto(ckt,D_F1PF2); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds() - time; printf("Time outside D_F1PF2: %g seconds \n", time); #endif if (error) return(error); error = NIdIter(ckt); if (error) return(error); DISswap(&(ckt->CKTrhsOld),&(job->r2H12ptr)); DISswap(&(ckt->CKTirhsOld),&(job->i2H12ptr)); ckt->CKTomega = job->Domega1 - job->Domega2; error = CKTacLoad(ckt); if (error) return(error); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds(); #endif error = CKTdisto(ckt,D_F1MF2); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds() - time; printf("Time outside D_F1MF2: %g seconds \n", time); #endif if (error) return(error); error = NIdIter(ckt); if (error) return(error); DISswap(&(ckt->CKTrhsOld),&(job->r2H1m2ptr)); DISswap(&(ckt->CKTirhsOld),&(job->i2H1m2ptr)); ckt->CKTomega = 2*job->Domega1 - job->Domega2; error = CKTacLoad(ckt); if (error) return(error); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds(); #endif error = CKTdisto(ckt,D_2F1MF2); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds() - time; printf("Time outside D_2F1MF2: %g seconds \n", time); #endif if (error) return(error); error = NIdIter(ckt); if (error) return(error); DISswap(&(ckt->CKTrhsOld),&(job->r3H1m2ptr)); DISswap(&(ckt->CKTirhsOld),&(job->i3H1m2ptr)); } else { errMsg = TMALLOC(char, strlen(nof2src) + 1); strcpy(errMsg,nof2src); return(E_NOF2SRC); } DmemAlloc( &(job->r1H1stor[displacement]),size); DISswap(&(job->r1H1stor[displacement]),&(job->r1H1ptr)); job->r1H1stor[displacement][0]=freq; DmemAlloc( &(job->r2H11stor[displacement]),size); DISswap(&(job->r2H11stor[displacement]),&((job->r2H11ptr))); job->r2H11stor[displacement][0]=freq; DmemAlloc( &(job->i1H1stor[displacement]),size); DISswap(&(job->i1H1stor[displacement]),&((job->i1H1ptr))); job->i1H1stor[displacement][0]=0.0; DmemAlloc( &(job->i2H11stor[displacement]),size); DISswap(&(job->i2H11stor[displacement]),&((job->i2H11ptr))); job->i2H11stor[displacement][0]=0.0; if (! (job->Df2wanted)) { DmemAlloc( &(job->r3H11stor[displacement]),size); DISswap(&(job->r3H11stor[displacement]),&((job->r3H11ptr))); job->r3H11stor[displacement][0]=freq; DmemAlloc( &(job->i3H11stor[displacement]),size); DISswap(&(job->i3H11stor[displacement]),&((job->i3H11ptr))); job->i3H11stor[displacement][0]=0.0; } else { DmemAlloc( &(job->r1H2stor[displacement]),size); DISswap(&(job->r1H2stor[displacement]),&((job->r1H2ptr))); job->r1H2stor[displacement][0]=freq; DmemAlloc( &(job->r2H12stor[displacement]),size); DISswap(&(job->r2H12stor[displacement]),&((job->r2H12ptr))); job->r2H12stor[displacement][0]=freq; DmemAlloc( &(job->r2H1m2stor[displacement]),size); DISswap(&(job->r2H1m2stor[displacement]),&((job->r2H1m2ptr))); job->r2H1m2stor[displacement][0]=freq; DmemAlloc( &(job->r3H1m2stor[displacement]),size); DISswap(&(job->r3H1m2stor[displacement]),&((job->r3H1m2ptr))); job->r3H1m2stor[displacement][0]=freq; DmemAlloc( &(job->i1H2stor[displacement]),size); DISswap(&(job->i1H2stor[displacement]),&((job->i1H2ptr))); job->i1H2stor[displacement][0]=0.0; DmemAlloc( &(job->i2H12stor[displacement]),size); DISswap(&(job->i2H12stor[displacement]),&((job->i2H12ptr))); job->i2H12stor[displacement][0]=0.0; DmemAlloc( &(job->i2H1m2stor[displacement]),size); DISswap(&(job->i2H1m2stor[displacement]),&((job->i2H1m2ptr))); job->i2H1m2stor[displacement][0]=0.0; DmemAlloc( &(job->i3H1m2stor[displacement]),size); DISswap(&(job->i3H1m2stor[displacement]),&((job->i3H1m2ptr))); job->i3H1m2stor[displacement][0]=0.0; } displacement++; switch(job->DstepType) { case DECADE: case OCTAVE: freq *= job->DfreqDelta; if(job->DfreqDelta==1) goto endsweep; break; case LINEAR: freq += job->DfreqDelta; if(job->DfreqDelta==0) goto endsweep; break; default: return(E_INTERN); } } #ifdef D_DBG_BLOCKTIMES time1 = SPfrontEnd->IFseconds() - time1; printf("Time inside frequency loop: %g seconds \n", time1); #endif endsweep: /* output routines to process the H's and output actual ckt variable values */ #ifdef D_DBG_BLOCKTIMES time1 = SPfrontEnd->IFseconds(); #endif if (! job->Df2wanted) { error = CKTnames(ckt,&numNames,&nameList); if(error) return(error); SPfrontEnd->IFnewUid (ckt, &freqUid, NULL, "frequency", UID_OTHER, NULL); SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob, "DISTORTION - 2nd harmonic", freqUid, IF_REAL, numNames, nameList, IF_COMPLEX, &acPlot); if (job->DstepType != LINEAR) { SPfrontEnd->OUTattributes (acPlot, NULL, OUT_SCALE_LOG, NULL); } for (i=0; i< displacement ; i++) { DkerProc(D_TWOF1,job->r2H11stor[i], job->i2H11stor[i], size, job); ckt->CKTrhsOld = job->r2H11stor[i]; ckt->CKTirhsOld = job->i2H11stor[i]; error = CKTacDump(ckt,ckt->CKTrhsOld[0],acPlot); if(error) return(error); } SPfrontEnd->OUTendPlot (acPlot); acPlot = NULL; error = CKTnames(ckt,&numNames,&nameList); if(error) return(error); SPfrontEnd->IFnewUid (ckt, &freqUid, NULL, "frequency", UID_OTHER, NULL); SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob, "DISTORTION - 3rd harmonic", freqUid, IF_REAL, numNames, nameList, IF_COMPLEX, &acPlot); for (i=0; i< displacement ; i++) { DkerProc(D_THRF1,job->r3H11stor[i], job->i3H11stor[i], size, job); ckt->CKTrhsOld = job->r3H11stor[i]; ckt->CKTirhsOld = job->i3H11stor[i]; error = CKTacDump(ckt,ckt->CKTrhsOld[0],acPlot); } SPfrontEnd->OUTendPlot (acPlot); acPlot = NULL; } else { error = CKTnames(ckt,&numNames,&nameList); if(error) return(error); SPfrontEnd->IFnewUid (ckt, &freqUid, NULL, "frequency", UID_OTHER, NULL); SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob, "DISTORTION - IM: f1+f2", freqUid, IF_REAL, numNames, nameList, IF_COMPLEX, &acPlot); for (i=0; i< displacement ; i++) { DkerProc(D_F1PF2,job->r2H12stor[i], job->i2H12stor[i], size, job); ckt->CKTrhsOld = job->r2H12stor[i]; ckt->CKTirhsOld = job->i2H12stor[i]; error = CKTacDump(ckt,ckt->CKTrhsOld[0],acPlot); if(error) return(error); } SPfrontEnd->OUTendPlot (acPlot); acPlot = NULL; error = CKTnames(ckt,&numNames,&nameList); if(error) return(error); SPfrontEnd->IFnewUid (ckt, &freqUid, NULL, "frequency", UID_OTHER, NULL); SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob, "DISTORTION - IM: f1-f2", freqUid, IF_REAL, numNames, nameList, IF_COMPLEX, &acPlot); for (i=0; i< displacement ; i++) { DkerProc(D_F1MF2, job->r2H1m2stor[i], job->i2H1m2stor[i], size, job); ckt->CKTrhsOld = job->r2H1m2stor[i]; ckt->CKTirhsOld = job->i2H1m2stor[i]; error = CKTacDump(ckt,ckt->CKTrhsOld[0],acPlot); if(error) return(error); } SPfrontEnd->OUTendPlot (acPlot); acPlot = NULL; error = CKTnames(ckt,&numNames,&nameList); if(error) return(error); SPfrontEnd->IFnewUid (ckt, &freqUid, NULL, "frequency", UID_OTHER, NULL); SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob, "DISTORTION - IM: 2f1-f2", freqUid, IF_REAL, numNames, nameList, IF_COMPLEX, &acPlot); for (i=0; i< displacement ; i++) { DkerProc(D_2F1MF2, job->r3H1m2stor[i], job->i3H1m2stor[i], size, job); ckt->CKTrhsOld = job->r3H1m2stor[i]; ckt->CKTirhsOld = job->i3H1m2stor[i]; error = CKTacDump(ckt,ckt->CKTrhsOld[0],acPlot); if(error) return(error); } SPfrontEnd->OUTendPlot (acPlot); acPlot = NULL; } FREE(job->r1H1ptr); FREE(job->i1H1ptr); FREE(job->r2H11ptr); FREE(job->i2H11ptr); FREE(job->r1H1stor); FREE(job->i1H1stor); FREE(job->r2H11stor); FREE(job->i2H11stor); if (! (job->Df2wanted)) { FREE(job->r3H11ptr); FREE(job->i3H11ptr); FREE(job->i3H11stor); FREE(job->r3H11stor); } else { FREE(job->r2H1m2ptr); FREE(job->r3H1m2ptr); FREE(job->r1H2ptr); FREE(job->i1H2ptr); FREE(job->r2H12ptr); FREE(job->i2H12ptr); FREE(job->i2H1m2ptr); FREE(job->i3H1m2ptr); FREE(job->r1H2stor); FREE(job->r2H12stor); FREE(job->r2H1m2stor); FREE(job->r3H1m2stor); FREE(job->i1H2stor); FREE(job->i2H12stor); FREE(job->i2H1m2stor); FREE(job->i3H1m2stor); } #ifdef D_DBG_BLOCKTIMES time1 = SPfrontEnd->IFseconds() - time1; printf("Time for output and deallocation: %g seconds \n", time1); #endif return(OK); } tmpk8ny_4pz/src/spicelib/analysis/cktntask.c0000644000175000017500000001151313546075722021353 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/tskdefs.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" /* CDHW See notes in spiceif.c for an explanation of these fixes CDHW */ int CKTnewTask(CKTcircuit *ckt, TSKtask **taskPtr, IFuid taskName, TSKtask **defPtr) { TSKtask *tsk, *def = NULL; NG_IGNORE(ckt); FREE(*taskPtr); /* clear old task upon repeated calls to tran etc.*/ *taskPtr = TMALLOC(TSKtask, 1); if (*taskPtr == NULL) return(E_NOMEM); tsk = *taskPtr; tsk->TSKname = taskName; #if (1) /*CDHW*/ if(defPtr) def = *defPtr; if ((strcmp(taskName,"special") == 0) && def) { /* create options by copying the circuit's defaults */ tsk->TSKtemp = def->TSKtemp; tsk->TSKnomTemp = def->TSKnomTemp; tsk->TSKmaxOrder = def->TSKmaxOrder; tsk->TSKintegrateMethod = def->TSKintegrateMethod; tsk->TSKindverbosity = def->TSKindverbosity; tsk->TSKxmu = def->TSKxmu; tsk->TSKbypass = def->TSKbypass; tsk->TSKdcMaxIter = def->TSKdcMaxIter; tsk->TSKdcTrcvMaxIter = def->TSKdcTrcvMaxIter; tsk->TSKtranMaxIter = def->TSKtranMaxIter; tsk->TSKnumSrcSteps = def->TSKnumSrcSteps; tsk->TSKnumGminSteps = def->TSKnumGminSteps; tsk->TSKgminFactor = def->TSKgminFactor; /* minBreak */ tsk->TSKabstol = def->TSKabstol; tsk->TSKpivotAbsTol = def->TSKpivotAbsTol; tsk->TSKpivotRelTol = def->TSKpivotRelTol; tsk->TSKreltol = def->TSKreltol; tsk->TSKchgtol = def->TSKchgtol; tsk->TSKvoltTol = def->TSKvoltTol; tsk->TSKgmin = def->TSKgmin; tsk->TSKgshunt = def->TSKgshunt; /* delmin */ tsk->TSKtrtol = def->TSKtrtol; tsk->TSKdefaultMosM = def->TSKdefaultMosM; tsk->TSKdefaultMosL = def->TSKdefaultMosL; tsk->TSKdefaultMosW = def->TSKdefaultMosW; tsk->TSKdefaultMosAD = def->TSKdefaultMosAD; tsk->TSKdefaultMosAS = def->TSKdefaultMosAS; /* fixLimit */ tsk->TSKnoOpIter = def->TSKnoOpIter; tsk->TSKtryToCompact = def->TSKtryToCompact; tsk->TSKbadMos3 = def->TSKbadMos3; tsk->TSKkeepOpInfo = def->TSKkeepOpInfo; tsk->TSKcopyNodesets = def->TSKcopyNodesets; tsk->TSKnodeDamping = def->TSKnodeDamping; tsk->TSKabsDv = def->TSKabsDv; tsk->TSKrelDv = def->TSKrelDv; tsk->TSKnoopac = def->TSKnoopac; tsk->TSKepsmin = def->TSKepsmin; #ifdef NEWTRUNC tsk->TSKlteReltol = def->TSKlteReltol; tsk->TSKlteAbstol = def->TSKlteAbstol; #endif } else { #endif /*CDHW*/ /* use the application defaults */ tsk->TSKgmin = 1e-12; tsk->TSKgshunt = 0; tsk->TSKabstol = 1e-12; tsk->TSKreltol = 1e-3; tsk->TSKchgtol = 1e-14; tsk->TSKvoltTol = 1e-6; #ifdef NEWTRUNC tsk->TSKlteReltol = 1e-3; tsk->TSKlteAbstol = 1e-6; #endif tsk->TSKtrtol = 7; tsk->TSKbypass = 0; tsk->TSKtranMaxIter = 10; tsk->TSKdcMaxIter = 100; tsk->TSKdcTrcvMaxIter = 50; tsk->TSKintegrateMethod = TRAPEZOIDAL; tsk->TSKmaxOrder = 2; /* full check, and full verbosity */ tsk->TSKindverbosity = 2; /* * when using trapezoidal method * xmu=0: Backward Euler * xmu=0.5: trapezoidal (standard) * xmu=0.49: good damping of current ringing, e.g. in R.O.s. */ tsk->TSKxmu = 0.5; tsk->TSKnumSrcSteps = 1; tsk->TSKnumGminSteps = 1; tsk->TSKgminFactor = 10; tsk->TSKpivotAbsTol = 1e-13; tsk->TSKpivotRelTol = 1e-3; tsk->TSKtemp = 300.15; tsk->TSKnomTemp = 300.15; tsk->TSKdefaultMosM = 1; tsk->TSKdefaultMosL = 1e-4; tsk->TSKdefaultMosW = 1e-4; tsk->TSKdefaultMosAD = 0; tsk->TSKdefaultMosAS = 0; tsk->TSKnoOpIter = 0; tsk->TSKtryToCompact = 0; tsk->TSKbadMos3 = 0; tsk->TSKkeepOpInfo = 0; tsk->TSKcopyNodesets = 0; tsk->TSKnodeDamping = 0; tsk->TSKabsDv = 0.5; tsk->TSKrelDv = 2.0; tsk->TSKepsmin = 1e-28; #if (1) /*CDHW*/ } #endif return(OK); } tmpk8ny_4pz/src/spicelib/analysis/cktmpar.c0000644000175000017500000000133613546075722021174 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* CKTmodParam * attach the given parameter to the specified model in the given circuit */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" /* ARGSUSED */ int CKTmodParam(CKTcircuit *ckt, GENmodel *modfast, int param, IFvalue *val, IFvalue *selector) { int type = modfast->GENmodType; NG_IGNORE(ckt); NG_IGNORE(selector); if (DEVices[type]->DEVmodParam) { return(DEVices[type]->DEVmodParam (param, val, modfast)); } else { return(E_BADPARM); } } tmpk8ny_4pz/src/spicelib/analysis/cktdisto.c0000644000175000017500000000762613546075722021367 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury **********/ /* * CKTdisto (ckt, mode) */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "vsrc/vsrcdefs.h" #include "isrc/isrcdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/distodef.h" #include "ngspice/sperror.h" int CKTdisto (CKTcircuit *ckt, int mode) { DISTOAN *job = (DISTOAN *) ckt->CKTcurJob; int i; int error=0; int size; switch(mode) { case D_SETUP: for (i=0;iDEVdisto && ckt->CKThead[i] ) { error = DEVices[i]->DEVdisto (mode, ckt->CKThead[i], ckt); if(error) return(error); } } break; case D_TWOF1: case D_THRF1: case D_F1PF2: case D_F1MF2: case D_2F1MF2: size = SMPmatSize(ckt->CKTmatrix); for (i=1; i<=size; i++) { ckt->CKTrhs[i] = 0.0; ckt->CKTirhs[i] = 0.0; } for (i=0;iDEVdisto && ckt->CKThead[i] ) { error = DEVices[i]->DEVdisto (mode, ckt->CKThead[i], ckt); if(error) return(error); } } break; case D_RHSF1: job->Df2given = 0; /* will change if any F2 source is found */ case D_RHSF2: { int vcode; int icode; double mag=0.0; double phase=0.0; size = SMPmatSize(ckt->CKTmatrix); for (i=0;i<=size;i++) { ckt->CKTrhs[i]=0; ckt->CKTirhs[i]=0; } vcode = CKTtypelook("Vsource"); icode = CKTtypelook("Isource"); if(vcode >= 0) { /* voltage sources are in this version, so use them */ VSRCinstance *here; VSRCmodel *model; for(model = (VSRCmodel *)ckt->CKThead[vcode];model != NULL; model=VSRCnextModel(model)){ for(here=VSRCinstances(model);here!=NULL; here=VSRCnextInstance(here)) { /* check if the source has a distortion input*/ if (here->VSRCdGiven) { if (here->VSRCdF2given) job->Df2given = 1; if ((here->VSRCdF1given) && (mode == D_RHSF1)) { mag = here->VSRCdF1mag; phase = here->VSRCdF1phase; } else if ((here->VSRCdF2given) && (mode == D_RHSF2)) { mag = here->VSRCdF2mag; phase = here->VSRCdF2phase; } if (((here->VSRCdF1given) && (mode == D_RHSF1)) || ((here->VSRCdF2given) && (mode == D_RHSF2))) { ckt->CKTrhs[here->VSRCbranch] = 0.5*mag* cos(M_PI*phase/180.0); ckt->CKTirhs[here->VSRCbranch] = 0.5*mag*sin(M_PI*phase/180.0); } } } } } if(icode >= 0 ) { /* current sources are in this version, so use them */ ISRCinstance *here; ISRCmodel *model; for(model= (ISRCmodel *)ckt->CKThead[icode];model != NULL; model=ISRCnextModel(model)){ for(here=ISRCinstances(model);here!=NULL; here=ISRCnextInstance(here)) { /* check if the source has a distortion input*/ if (here->ISRCdGiven) { if (here->ISRCdF2given) job->Df2given = 1; if ((here->ISRCdF1given) && (mode == D_RHSF1)) { mag = here->ISRCdF1mag; phase = here->ISRCdF1phase; } else if ((here->ISRCdF2given) && (mode == D_RHSF2)) { mag = here->ISRCdF2mag; phase = here->ISRCdF2phase; } if (((here->ISRCdF1given) && (mode == D_RHSF1)) || ((here->ISRCdF2given) && (mode == D_RHSF2))) { ckt->CKTrhs[here->ISRCposNode] = - 0.5 * mag * cos(M_PI*phase/180.0); ckt->CKTrhs[here->ISRCnegNode] = 0.5 * mag * cos( M_PI*phase/180.0); ckt->CKTirhs[here->ISRCposNode] = - 0.5 * mag * sin( M_PI*phase/180.0); ckt->CKTirhs[here->ISRCnegNode] = 0.5 * mag * sin( M_PI*phase/180.0); } } } } } } error = 0; break; default: error = E_BADPARM; break; } return(error); } tmpk8ny_4pz/src/spicelib/analysis/cktclrbk.c0000644000175000017500000000151613546075722021332 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* CKTclrBreak(ckt) * delete the first time from the breakpoint table for the given circuit */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" int CKTclrBreak(CKTcircuit *ckt) { double *tmp; int j; if(ckt->CKTbreakSize >2) { tmp = TMALLOC(double, ckt->CKTbreakSize - 1); if(tmp == NULL) return(E_NOMEM); for(j=1;jCKTbreakSize;j++) { tmp[j-1] = ckt->CKTbreaks[j]; } FREE(ckt->CKTbreaks); ckt->CKTbreakSize--; ckt->CKTbreaks=tmp; } else { ckt->CKTbreaks[0] = ckt->CKTbreaks[1]; ckt->CKTbreaks[1] = ckt->CKTfinalTime; } return(OK); } tmpk8ny_4pz/src/spicelib/analysis/cktparam.c0000644000175000017500000000132213546075722021330 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* CKTparam * attach the given parameter to the specified device in the given circuit */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" /* ARGSUSED */ int CKTparam(CKTcircuit *ckt, GENinstance *fast, int param, IFvalue *val, IFvalue *selector) { int type; NG_IGNORE(ckt); type = fast->GENmodPtr->GENmodType; if(DEVices[type]->DEVparam) { return(DEVices[type]->DEVparam (param, val, fast, selector)); } else { return(E_BADPARM); } } tmpk8ny_4pz/src/spicelib/analysis/cktfnda.c0000644000175000017500000000150413546075722021142 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* CKTfndAnal * find the given Analysis given its name and return the Analysis pointer */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/jobdefs.h" #include "ngspice/tskdefs.h" #include "ngspice/sperror.h" #include "ngspice/cktdefs.h" /* ARGSUSED */ int CKTfndAnal(CKTcircuit *ckt, int *analIndex, JOB **anal, IFuid name, TSKtask *task, IFuid taskName) { JOB *here; NG_IGNORE(ckt); NG_IGNORE(analIndex); NG_IGNORE(taskName); for (here = task->jobs; here; here = here->JOBnextJob) { if(strcmp(here->JOBname,name)==0) { if(anal) *anal = here; return(OK); } } return(E_NOTFOUND); } tmpk8ny_4pz/src/spicelib/analysis/cktnewn.c0000644000175000017500000000250713546075722021205 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* *CKTnewNode(ckt,node,name) * Allocate a new circuit equation number (returned) in the specified * circuit to contain a new equation or node * returns -1 for failure to allocate a node number * */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" /* should just call CKTnewEQ and set node type afterwards */ int CKTnewNode(CKTcircuit *ckt, CKTnode **node, IFuid name) { if(!(ckt->CKTnodes)) { /* starting the list - allocate both ground and 1 */ ckt->CKTnodes = TMALLOC(CKTnode, 1); if(ckt->CKTnodes == NULL) return(E_NOMEM); ckt->CKTnodes->name = NULL; ckt->CKTnodes->type = SP_VOLTAGE; ckt->CKTnodes->number = 0; ckt->CKTlastNode = ckt->CKTnodes; } ckt->CKTlastNode->next = TMALLOC(CKTnode, 1); if(ckt->CKTlastNode->next == NULL) return(E_NOMEM); ckt->CKTlastNode = ckt->CKTlastNode->next; ckt->CKTlastNode->name = name; ckt->CKTlastNode->number = ckt->CKTmaxEqNum++; ckt->CKTlastNode->type = SP_VOLTAGE; ckt->CKTlastNode->next = NULL; if(node) *node = ckt->CKTlastNode; return(OK); } tmpk8ny_4pz/src/spicelib/analysis/ckttyplk.c0000644000175000017500000000114413546075722021375 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* look up the 'type' in the device description struct and return the * appropriate strchr for the device found, or -1 for not found */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" int CKTtypelook(char *type) { int i; for(i=0;iDEVpublic.name)) { /*found the device - return it */ return(i); } } return(-1); } tmpk8ny_4pz/src/spicelib/analysis/pzaskq.c0000644000175000017500000000321113546075722021036 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/pzdefs.h" #include "ngspice/cktdefs.h" /* ARGSUSED */ int PZaskQuest(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value) { PZAN *job = (PZAN *) anal; switch(which) { case PZ_NODEI: value->nValue = CKTnum2nod(ckt, job->PZin_pos); break; case PZ_NODEG: value->nValue = CKTnum2nod(ckt, job->PZin_neg); break; case PZ_NODEJ: value->nValue = CKTnum2nod(ckt, job->PZout_pos); break; case PZ_NODEK: value->nValue = CKTnum2nod(ckt, job->PZout_neg); break; case PZ_V: if (job->PZinput_type == PZ_IN_VOL) { value->iValue=1; } else { value->iValue=0; } break; case PZ_I: if (job->PZinput_type == PZ_IN_CUR) { value->iValue=1; } else { value->iValue=0; } break; case PZ_POL: if (job->PZwhich == PZ_DO_POLES) { value->iValue=1; } else { value->iValue=0; } break; case PZ_ZER: if (job->PZwhich == PZ_DO_ZEROS) { value->iValue=1; } else { value->iValue=0; } break; case PZ_PZ: if (job->PZwhich == (PZ_DO_POLES | PZ_DO_ZEROS)) { value->iValue=1; } else { value->iValue=0; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/analysis/ckttemp.c0000644000175000017500000000153713546075722021205 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* CKTtemp(ckt) * this is a driver program to iterate through all the various * temperature dependency functions provided for the circuit * elements in the given circuit */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/const.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" int CKTtemp(CKTcircuit *ckt) { int error; int i; ckt->CKTvt = CONSTKoverQ * ckt->CKTtemp; for (i=0;iDEVtemperature && ckt->CKThead[i] ) { error = DEVices[i]->DEVtemperature (ckt->CKThead[i], ckt); if(error) return(error); } } return(OK); } tmpk8ny_4pz/src/spicelib/analysis/cktdltm.c0000644000175000017500000000226213546075722021174 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* CKTdltMod * delete the specified model - not yet supported in spice */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" /* ARGSUSED */ int CKTdltMod(CKTcircuit *ckt, GENmodel *m) { GENmodel *mod, **prevp; GENinstance *h, *next_i; int error; prevp = &ckt->CKThead[m->GENmodType]; for (mod = *prevp; m && mod != m; mod = mod->GENnextModel) prevp = &mod->GENnextModel; if (!mod) return OK; *prevp = m->GENnextModel; for (h = m->GENinstances; h; h = next_i) { next_i = h->GENnextInstance; if (h != nghash_delete(ckt->DEVnameHash, h->GENname)) fprintf(stderr, "ERROR, ouch nasal daemons ...\n"); error = SPfrontEnd->IFdelUid (ckt, h->GENname, UID_INSTANCE); GENinstanceFree(h); } if (m != nghash_delete(ckt->MODnameHash, m->GENmodName)) fprintf(stderr, "ERROR, ouch nasal daemons ...\n"); error = SPfrontEnd->IFdelUid (ckt, m->GENmodName, UID_MODEL); GENmodelFree(m); return(OK); } tmpk8ny_4pz/src/spicelib/analysis/cktdojob.c0000644000175000017500000001563213546075722021336 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" #include "ngspice/trandefs.h" #include "ngspice/cpextern.h" #include "ngspice/fteext.h" #include "analysis.h" #ifdef XSPICE /* gtri - add - wbk - 11/26/90 - add include for MIF and EVT global data */ #include "ngspice/mif.h" #include "ngspice/evtproto.h" /* gtri - end - wbk - 11/26/90 */ /* gtri - add - 12/12/90 - wbk - include ipc stuff */ #include "ngspice/ipctiein.h" /* gtri - end - 12/12/90 */ #endif extern SPICEanalysis *analInfo[]; int CKTdoJob(CKTcircuit *ckt, int reset, TSKtask *task) { JOB *job; double startTime; int error, i, error2; int ANALmaxnum = spice_num_analysis(); #ifdef WANT_SENSE2 int senflag; static int sens_num = -1; /* Sensitivity is special */ if (sens_num < 0) { for (i = 0; i < ANALmaxnum; i++) if (!strcmp("SENS2", analInfo[i]->if_analysis.name)) break; sens_num = i; } #endif startTime = SPfrontEnd->IFseconds(); ckt->CKTtemp = task->TSKtemp; ckt->CKTnomTemp = task->TSKnomTemp; ckt->CKTmaxOrder = task->TSKmaxOrder; ckt->CKTintegrateMethod = task->TSKintegrateMethod; ckt->CKTindverbosity = task->TSKindverbosity; ckt->CKTxmu = task->TSKxmu; ckt->CKTbypass = task->TSKbypass; ckt->CKTdcMaxIter = task->TSKdcMaxIter; ckt->CKTdcTrcvMaxIter = task->TSKdcTrcvMaxIter; ckt->CKTtranMaxIter = task->TSKtranMaxIter; ckt->CKTnumSrcSteps = task->TSKnumSrcSteps; ckt->CKTnumGminSteps = task->TSKnumGminSteps; ckt->CKTgminFactor = task->TSKgminFactor; ckt->CKTminBreak = task->TSKminBreak; ckt->CKTabstol = task->TSKabstol; ckt->CKTpivotAbsTol = task->TSKpivotAbsTol; ckt->CKTpivotRelTol = task->TSKpivotRelTol; ckt->CKTreltol = task->TSKreltol; ckt->CKTchgtol = task->TSKchgtol; ckt->CKTvoltTol = task->TSKvoltTol; ckt->CKTgmin = task->TSKgmin; ckt->CKTgshunt = task->TSKgshunt; ckt->CKTdelmin = task->TSKdelmin; ckt->CKTtrtol = task->TSKtrtol; #ifdef XSPICE /* Lower value of trtol to give smaller stepsize and more accuracy, but only if there are 'A' devices in the circuit, may be overridden by 'set xtrtol=newval' */ if (ckt->CKTadevFlag && (ckt->CKTtrtol > 1)) { int newtol; if (cp_getvar("xtrtol", CP_NUM, &newtol, 0)) { printf("Override trtol to %d for xspice 'A' devices\n", newtol); ckt->CKTtrtol = newtol; } else { printf("Reducing trtol to 1 for xspice 'A' devices\n"); ckt->CKTtrtol = 1; } } #endif ckt->CKTdefaultMosM = task->TSKdefaultMosM; ckt->CKTdefaultMosL = task->TSKdefaultMosL; ckt->CKTdefaultMosW = task->TSKdefaultMosW; ckt->CKTdefaultMosAD = task->TSKdefaultMosAD; ckt->CKTdefaultMosAS = task->TSKdefaultMosAS; ckt->CKTfixLimit = task->TSKfixLimit; ckt->CKTnoOpIter = task->TSKnoOpIter; ckt->CKTtryToCompact = task->TSKtryToCompact; ckt->CKTbadMos3 = task->TSKbadMos3; ckt->CKTkeepOpInfo = task->TSKkeepOpInfo; ckt->CKTcopyNodesets = task->TSKcopyNodesets; ckt->CKTnodeDamping = task->TSKnodeDamping; ckt->CKTabsDv = task->TSKabsDv; ckt->CKTrelDv = task->TSKrelDv; ckt->CKTtroubleNode = 0; ckt->CKTtroubleElt = NULL; ckt->CKTnoopac = task->TSKnoopac && ckt->CKTisLinear; ckt->CKTepsmin = task->TSKepsmin; #ifdef NEWTRUNC ckt->CKTlteReltol = task->TSKlteReltol; ckt->CKTlteAbstol = task->TSKlteAbstol; #endif /* NEWTRUNC */ fprintf(stdout, "Doing analysis at TEMP = %f and TNOM = %f\n\n", ckt->CKTtemp - CONSTCtoK, ckt->CKTnomTemp - CONSTCtoK); /* call altermod and alter on device and model parameters assembled in devtlist and modtlist (if using temper) because we have a new temperature */ inp_evaluate_temper(ft_curckt); error = 0; if (reset) { ckt->CKTdelta = 0.0; ckt->CKTtime = 0.0; ckt->CKTcurrentAnalysis = 0; #ifdef WANT_SENSE2 senflag = 0; if (sens_num < ANALmaxnum) for (job = task->jobs; !error && job; job = job->JOBnextJob) { if (job->JOBtype == sens_num) { senflag = 1; ckt->CKTcurJob = job; ckt->CKTsenInfo = (SENstruct *) job; error = analInfo[sens_num]->an_func (ckt, reset); } } if (ckt->CKTsenInfo && (!senflag || error)) FREE(ckt->CKTsenInfo); #endif /* make sure this is either up do date or NULL */ ckt->CKTcurJob = NULL; /* normal reset */ if (!error) error = CKTunsetup(ckt); #ifdef XSPICE /* gtri - add - 12/12/90 - wbk - set ipc syntax error flag */ if(error) g_ipc.syntax_error = IPC_TRUE; /* gtri - end - 12/12/90 */ #endif if (!error) error = CKTsetup(ckt); #ifdef XSPICE /* gtri - add - 12/12/90 - wbk - set ipc syntax error flag */ if(error) g_ipc.syntax_error = IPC_TRUE; /* gtri - end - 12/12/90 */ #endif if (!error) error = CKTtemp(ckt); #ifdef XSPICE /* gtri - add - 12/12/90 - wbk - set ipc syntax error flag */ if(error) g_ipc.syntax_error = IPC_TRUE; /* gtri - end - 12/12/90 */ #endif if (error) { #ifdef XSPICE /* gtri - add - 12/12/90 - wbk - return if syntax errors from parsing */ if(g_ipc.enabled) { if(g_ipc.syntax_error) ; else { /* else, send (GO) errchk status if we got this far */ /* Caller is responsible for sending NOGO status if we returned earlier */ ipc_send_errchk(); } } /* gtri - end - 12/12/90 */ #endif return error; }/* if error */ } error2 = OK; /* Analysis order is important */ for (i = 0; i < ANALmaxnum; i++) { #ifdef WANT_SENSE2 if (i == sens_num) continue; #endif for (job = task->jobs; job; job = job->JOBnextJob) { if (job->JOBtype == i) { ckt->CKTcurJob=job; error = OK; if (analInfo[i]->an_init) error = analInfo[i]->an_init (ckt, job); if (!error && analInfo[i]->do_ic) error = CKTic(ckt); if (!error){ #ifdef XSPICE if(reset) { /* gtri - begin - 6/10/91 - wbk - Setup event-driven data */ error = EVTsetup(ckt); if(error) { ckt->CKTstat->STATtotAnalTime += SPfrontEnd->IFseconds() - startTime; return(error); } /* gtri - end - 6/10/91 - wbk - Setup event-driven data */ } #endif error = analInfo[i]->an_func (ckt, reset); /* txl, cpl addition */ if (error == 1111) break; } if (error) error2 = error; } } } ckt->CKTstat->STATtotAnalTime += SPfrontEnd->IFseconds() - startTime; #ifdef WANT_SENSE2 if (ckt->CKTsenInfo) SENdestroy(ckt->CKTsenInfo); #endif return(error2); } tmpk8ny_4pz/src/spicelib/analysis/daskq.c0000644000175000017500000000236313546075722020637 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/cktdefs.h" #include "ngspice/distodef.h" /* ARGSUSED */ int DaskQuest(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value) { DISTOAN *job = (DISTOAN *) anal; NG_IGNORE(ckt); switch(which) { case D_START: value->rValue = job->DstartF1; break; case D_STOP: value->rValue = job->DstopF1 ; break; case D_STEPS: value->iValue = job->DnumSteps; break; case D_DEC: if (job->DstepType == DECADE) { value->iValue=1; } else { value->iValue=0; } break; case D_OCT: if (job->DstepType == OCTAVE) { value->iValue=1; } else { value->iValue=0; } break; case D_LIN: if (job->DstepType == LINEAR) { value->iValue=1; } else { value->iValue=0; } break; case D_F2OVRF1: value->rValue = job->Df2ovrF1; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/analysis/cktdlti.c0000644000175000017500000000075013546075722021170 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* CKTdltInst * delete the specified instance - not yet supported in spice */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" /* ARGSUSED */ int CKTdltInst(CKTcircuit *ckt, void *instance) { NG_IGNORE(ckt); NG_IGNORE(instance); return(E_UNSUPP); } tmpk8ny_4pz/src/spicelib/analysis/dloadfns.c0000644000175000017500000005037113546075722021330 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/distodef.h" /* * all subFns are local to this file so they need not be renamed to * the awful 7 letter standard; however, for reasons of uniformity, * they are being renamed, losing all readability in the process. * the renaming convention is as follows: * example: 3v3F1m2 * 3v => 3 variable term xyz * 2F1m2 => Two F1 minus F2 * therefore the old name would be : S3v3F1minusF2 * for the imaginary sub functions, the v is replaced by an i * */ static double S2v2F1(double cxy, double r1h1x, double i1h1x, double r1h1y, double i1h1y) /* 5 arguments */ { return(cxy*(r1h1x*r1h1y - i1h1x*i1h1y)); } static double S2i2F1(double cxy, double r1h1x, double i1h1x, double r1h1y, double i1h1y) /* 5 arguments */ { return(cxy*(r1h1x*i1h1y + i1h1x*r1h1y)); } static double S2v3F1(double cxy, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r2h11x, double i2h11x, double r2h11y, double i2h11y) /* 9 arguments */ { return(cxy*(r1h1x*r2h11y - i1h1x*i2h11y + r1h1y*r2h11x - i1h1y* i2h11x)); } static double S2i3F1(double cxy, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r2h11x, double i2h11x, double r2h11y, double i2h11y) /* 9 arguments */ { return(cxy*(r1h1x*i2h11y + i1h1x*r2h11y + r1h1y*i2h11x + i1h1y* r2h11x)); } static double S2vF12(double cxy, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h2x, double i1h2x, double r1h2y, double i1h2y) /* 9 arguments */ { return(cxy*(r1h1x*r1h2y - i1h1x*i1h2y + r1h1y*r1h2x - i1h1y*i1h2x)); } static double S2iF12(double cxy, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h2x, double i1h2x, double r1h2y, double i1h2y) /* 9 arguments */ { return(cxy*(r1h1x*i1h2y + i1h1x*r1h2y + r1h1y*i1h2x + i1h1y*r1h2x)); } static double S2v2F12(double cxy, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h2x, double i1h2x, double r1h2y, double i1h2y, double r2h11x, double i2h11x, double r2h11y, double i2h11y, double h2f1f2x, double ih2f1f2x, double h2f1f2y, double ih2f1f2y) /* 17 arguments */ { return ( cxy * ( 2*(r1h1x*h2f1f2y - i1h1x*ih2f1f2y +r1h1y*h2f1f2x - i1h1y*ih2f1f2x) + r1h2x*r2h11y - i1h2x*i2h11y + r1h2y*r2h11x - i1h2y*i2h11x )); } static double S2i2F12(double cxy, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h2x, double i1h2x, double r1h2y, double i1h2y, double r2h11x, double i2h11x, double r2h11y, double i2h11y, double h2f1f2x, double ih2f1f2x, double h2f1f2y, double ih2f1f2y) /* 17 arguments */ { return ( cxy * ( 2*(r1h1x*ih2f1f2y + i1h1x*h2f1f2y +r1h1y*ih2f1f2x + i1h1y*h2f1f2x) + r1h2x*i2h11y + i1h2x*r2h11y + r1h2y*i2h11x + i1h2y*r2h11x )); } static double S3v3F1(double cxyz, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h1z, double i1h1z) /* 7 arguments */ { return( cxyz * ( (r1h1x*r1h1y - i1h1x*i1h1y)*r1h1z - (i1h1x*r1h1y + r1h1x*i1h1y)*i1h1z )); } static double S3i3F1(double cxyz, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h1z, double i1h1z) /* 7 arguments */ { return( cxyz * ( (r1h1x*r1h1y - i1h1x*i1h1y)*i1h1z + (i1h1x*r1h1y + r1h1x*i1h1y)*r1h1z )); } static double S3v2F12(double cxyz, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h1z, double i1h1z, double r1h2x, double i1h2x, double r1h2y, double i1h2y, double r1h2z, double i1h2z) /* 13 arguments */ { return ( cxyz * ( (r1h1x*r1h1y - i1h1x*i1h1y)*r1h2z - (i1h1x*r1h1y + r1h1x*i1h1y)*i1h2z + (r1h1x*r1h1z - i1h1x*i1h1z)*r1h2y - (i1h1x*r1h1z + r1h1x*i1h1z)*i1h2y + (r1h1z*r1h1y - i1h1z*i1h1y)*r1h2x - (i1h1z*r1h1y + r1h1z*i1h1y)*i1h2x )); } static double S3i2F12(double cxyz, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h1z, double i1h1z, double r1h2x, double i1h2x, double r1h2y, double i1h2y, double r1h2z, double i1h2z) /* 13 arguments */ { return ( cxyz * ( (r1h1x*r1h1y - i1h1x*i1h1y)*i1h2z + (i1h1x*r1h1y + r1h1x*i1h1y)*r1h2z + (r1h1x*r1h1z - i1h1x*i1h1z)*i1h2y + (i1h1x*r1h1z + r1h1x*i1h1z)*r1h2y + (r1h1z*r1h1y - i1h1z*i1h1y)*i1h2x + (i1h1z*r1h1y + r1h1z*i1h1y)*r1h2x )); } /* the load functions */ /* also renamed... */ double DFn2F1(double cxx, double cyy, double czz, double cxy, double cyz, double cxz, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h1z, double i1h1z) /* 12 variables */ { double temp; temp = S2v2F1(cxx,r1h1x,i1h1x,r1h1x,i1h1x) + S2v2F1(cyy,r1h1y,i1h1y,r1h1y,i1h1y) + S2v2F1(czz,r1h1z,i1h1z,r1h1z,i1h1z) + S2v2F1(cxy,r1h1x,i1h1x,r1h1y,i1h1y) + S2v2F1(cyz,r1h1y,i1h1y,r1h1z,i1h1z) + S2v2F1(cxz,r1h1x,i1h1x,r1h1z,i1h1z); return(temp); } double DFi2F1(double cxx, double cyy, double czz, double cxy, double cyz, double cxz, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h1z, double i1h1z) /* 12 variables */ { double temp; temp = S2i2F1(cxx,r1h1x,i1h1x,r1h1x,i1h1x) + S2i2F1(cyy,r1h1y,i1h1y,r1h1y,i1h1y) + S2i2F1(czz,r1h1z,i1h1z,r1h1z,i1h1z) + S2i2F1(cxy,r1h1x,i1h1x,r1h1y,i1h1y) + S2i2F1(cyz,r1h1y,i1h1y,r1h1z,i1h1z) + S2i2F1(cxz,r1h1x,i1h1x,r1h1z,i1h1z); return(temp); } double DFn3F1(double cxx, double cyy, double czz, double cxy, double cyz, double cxz, double cxxx, double cyyy, double czzz, double cxxy, double cxxz, double cxyy, double cyyz, double cxzz, double cyzz, double cxyz, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h1z, double i1h1z, double r2h11x, double i2h11x, double r2h11y, double i2h11y, double r2h11z, double i2h11z) /* 28 args - 16 + 6 + 6 */ { double temp; temp = S2v3F1(cxx,r1h1x,i1h1x,r1h1x,i1h1x,r2h11x,i2h11x,r2h11x,i2h11x) +S2v3F1(cyy,r1h1y,i1h1y,r1h1y,i1h1y,r2h11y,i2h11y,r2h11y,i2h11y) +S2v3F1(czz,r1h1z,i1h1z,r1h1z,i1h1z,r2h11z,i2h11z,r2h11z,i2h11z); temp += S2v3F1(cxy,r1h1x,i1h1x,r1h1y,i1h1y,r2h11x,i2h11x,r2h11y,i2h11y) +S2v3F1(cyz,r1h1y,i1h1y,r1h1z,i1h1z,r2h11y,i2h11y,r2h11z,i2h11z) +S2v3F1(cxz,r1h1x,i1h1x,r1h1z,i1h1z,r2h11x,i2h11x,r2h11z,i2h11z) +S3v3F1(cxxx,r1h1x,i1h1x,r1h1x,i1h1x,r1h1x,i1h1x); temp += S3v3F1(cyyy,r1h1y,i1h1y,r1h1y,i1h1y,r1h1y,i1h1y) +S3v3F1(czzz,r1h1z,i1h1z,r1h1z,i1h1z,r1h1z,i1h1z) +S3v3F1(cxxy,r1h1x,i1h1x,r1h1x,i1h1x,r1h1y,i1h1y) +S3v3F1(cxxz,r1h1x,i1h1x,r1h1x,i1h1x,r1h1z,i1h1z) +S3v3F1(cxyy,r1h1x,i1h1x,r1h1y,i1h1y,r1h1y,i1h1y); temp += S3v3F1(cyyz,r1h1y,i1h1y,r1h1y,i1h1y,r1h1z,i1h1z) +S3v3F1(cxzz,r1h1x,i1h1x,r1h1z,i1h1z,r1h1z,i1h1z) +S3v3F1(cyzz,r1h1y,i1h1y,r1h1z,i1h1z,r1h1z,i1h1z) +S3v3F1(cxyz,r1h1x,i1h1x,r1h1y,i1h1y,r1h1z,i1h1z); return(temp); } double DFi3F1(double cxx, double cyy, double czz, double cxy, double cyz, double cxz, double cxxx, double cyyy, double czzz, double cxxy, double cxxz, double cxyy, double cyyz, double cxzz, double cyzz, double cxyz, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h1z, double i1h1z, double r2h11x, double i2h11x, double r2h11y, double i2h11y, double r2h11z, double i2h11z) /* 28 args - 10 + 6 + 6 */ { double temp; temp = S2i3F1(cxx,r1h1x,i1h1x,r1h1x,i1h1x,r2h11x,i2h11x,r2h11x,i2h11x) +S2i3F1(cyy,r1h1y,i1h1y,r1h1y,i1h1y,r2h11y,i2h11y,r2h11y,i2h11y) +S2i3F1(czz,r1h1z,i1h1z,r1h1z,i1h1z,r2h11z,i2h11z,r2h11z,i2h11z) +S2i3F1(cxy,r1h1x,i1h1x,r1h1y,i1h1y,r2h11x,i2h11x,r2h11y,i2h11y); temp += S2i3F1(cyz,r1h1y,i1h1y,r1h1z,i1h1z,r2h11y,i2h11y,r2h11z,i2h11z) +S2i3F1(cxz,r1h1x,i1h1x,r1h1z,i1h1z,r2h11x,i2h11x,r2h11z,i2h11z) +S3i3F1(cxxx,r1h1x,i1h1x,r1h1x,i1h1x,r1h1x,i1h1x) +S3i3F1(cyyy,r1h1y,i1h1y,r1h1y,i1h1y,r1h1y,i1h1y); temp += S3i3F1(czzz,r1h1z,i1h1z,r1h1z,i1h1z,r1h1z,i1h1z) +S3i3F1(cxxy,r1h1x,i1h1x,r1h1x,i1h1x,r1h1y,i1h1y) +S3i3F1(cxxz,r1h1x,i1h1x,r1h1x,i1h1x,r1h1z,i1h1z) +S3i3F1(cxyy,r1h1x,i1h1x,r1h1y,i1h1y,r1h1y,i1h1y); temp += S3i3F1(cyyz,r1h1y,i1h1y,r1h1y,i1h1y,r1h1z,i1h1z) +S3i3F1(cxzz,r1h1x,i1h1x,r1h1z,i1h1z,r1h1z,i1h1z) +S3i3F1(cyzz,r1h1y,i1h1y,r1h1z,i1h1z,r1h1z,i1h1z) +S3i3F1(cxyz,r1h1x,i1h1x,r1h1y,i1h1y,r1h1z,i1h1z); return(temp); } double DFnF12(double cxx, double cyy, double czz, double cxy, double cyz, double cxz, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h1z, double i1h1z, double r1h2x, double i1h2x, double r1h2y, double i1h2y, double r1h2z, double i1h2z) /* 18 args - 6 + 6 + 6 */ { double temp; temp = S2vF12(cxx,r1h1x,i1h1x,r1h1x,i1h1x,r1h2x,i1h2x,r1h2x,i1h2x) +S2vF12(cyy,r1h1y,i1h1y,r1h1y,i1h1y,r1h2y,i1h2y,r1h2y,i1h2y) +S2vF12(czz,r1h1z,i1h1z,r1h1z,i1h1z,r1h2z,i1h2z,r1h2z,i1h2z); temp += S2vF12(cxy,r1h1x,i1h1x,r1h1y,i1h1y,r1h2x,i1h2x,r1h2y,i1h2y) +S2vF12(cyz,r1h1y,i1h1y,r1h1z,i1h1z,r1h2y,i1h2y,r1h2z,i1h2z) +S2vF12(cxz,r1h1x,i1h1x,r1h1z,i1h1z,r1h2x,i1h2x,r1h2z,i1h2z); return(0.5*temp); } double DFiF12(double cxx, double cyy, double czz, double cxy, double cyz, double cxz, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h1z, double i1h1z, double r1h2x, double i1h2x, double r1h2y, double i1h2y, double r1h2z, double i1h2z) /* 18 args - 6 + 6 + 6 */ { double temp; temp = S2iF12(cxx,r1h1x,i1h1x,r1h1x,i1h1x,r1h2x,i1h2x,r1h2x,i1h2x) +S2iF12(cyy,r1h1y,i1h1y,r1h1y,i1h1y,r1h2y,i1h2y,r1h2y,i1h2y) +S2iF12(czz,r1h1z,i1h1z,r1h1z,i1h1z,r1h2z,i1h2z,r1h2z,i1h2z); temp += S2iF12(cxy,r1h1x,i1h1x,r1h1y,i1h1y,r1h2x,i1h2x,r1h2y,i1h2y) +S2iF12(cyz,r1h1y,i1h1y,r1h1z,i1h1z,r1h2y,i1h2y,r1h2z,i1h2z) +S2iF12(cxz,r1h1x,i1h1x,r1h1z,i1h1z,r1h2x,i1h2x,r1h2z,i1h2z); return(temp*0.5); /* divided by two to scale down */ } double DFn2F12(DpassStr *p) /* 40 vars - 16 + 6 + 6 + 6 + 6 */ /* * a structure because a standard C compiler can handle only * 32 variables. * */ { double temp; temp = S2v2F12(p->cxx,p->r1h1x,p->i1h1x, p->r1h1x,p->i1h1x, p->r1h2x,p->i1h2x, p->r1h2x,p->i1h2x, p->r2h11x,p->i2h11x, p->r2h11x,p->i2h11x, p->h2f1f2x,p->ih2f1f2x, p->h2f1f2x,p->ih2f1f2x); temp += S2v2F12(p->cyy,p->r1h1y,p->i1h1y, p->r1h1y,p->i1h1y, p->r1h2y,p->i1h2y, p->r1h2y,p->i1h2y, p->r2h11y,p->i2h11y, p->r2h11y,p->i2h11y, p->h2f1f2y,p->ih2f1f2y, p->h2f1f2y,p->ih2f1f2y); temp += S2v2F12(p->czz,p->r1h1z,p->i1h1z, p->r1h1z,p->i1h1z, p->r1h2z,p->i1h2z, p->r1h2z,p->i1h2z, p->r2h11z,p->i2h11z, p->r2h11z,p->i2h11z, p->h2f1f2z,p->ih2f1f2z, p->h2f1f2z,p->ih2f1f2z); temp += S2v2F12(p->cxy,p->r1h1x,p->i1h1x, p->r1h1y,p->i1h1y, p->r1h2x,p->i1h2x, p->r1h2y,p->i1h2y, p->r2h11x,p->i2h11x, p->r2h11y,p->i2h11y, p->h2f1f2x,p->ih2f1f2x, p->h2f1f2y,p->ih2f1f2y); temp += S2v2F12(p->cyz,p->r1h1y,p->i1h1y, p->r1h1z,p->i1h1z, p->r1h2y,p->i1h2y, p->r1h2z,p->i1h2z, p->r2h11y,p->i2h11y, p->r2h11z,p->i2h11z, p->h2f1f2y,p->ih2f1f2y, p->h2f1f2z,p->ih2f1f2z); temp += S2v2F12(p->cxz,p->r1h1x,p->i1h1x, p->r1h1z,p->i1h1z, p->r1h2x,p->i1h2x, p->r1h2z,p->i1h2z, p->r2h11x,p->i2h11x, p->r2h11z,p->i2h11z, p->h2f1f2x,p->ih2f1f2x, p->h2f1f2z,p->ih2f1f2z); temp += S3v2F12(p->cxxx,p->r1h1x, p->i1h1x,p->r1h1x,p->i1h1x,p->r1h1x,p->i1h1x, p->r1h2x,p->i1h2x, p->r1h2x,p->i1h2x,p->r1h2x,p->i1h2x) +S3v2F12(p->cyyy,p->r1h1y, p->i1h1y,p->r1h1y,p->i1h1y,p->r1h1y,p->i1h1y, p->r1h2y,p->i1h2y, p->r1h2y,p->i1h2y,p->r1h2y,p->i1h2y); temp += S3v2F12(p->czzz,p->r1h1z, p->i1h1z,p->r1h1z,p->i1h1z,p->r1h1z,p->i1h1z, p->r1h2z,p->i1h2z, p->r1h2z,p->i1h2z,p->r1h2z,p->i1h2z) +S3v2F12(p->cxxy,p->r1h1x, p->i1h1x,p->r1h1x,p->i1h1x,p->r1h1y,p->i1h1y, p->r1h2x,p->i1h2x, p->r1h2x,p->i1h2x,p->r1h2y,p->i1h2y); temp += S3v2F12(p->cxxz,p->r1h1x, p->i1h1x,p->r1h1x,p->i1h1x,p->r1h1z,p->i1h1z, p->r1h2x,p->i1h2x, p->r1h2x,p->i1h2x,p->r1h2z,p->i1h2z) +S3v2F12(p->cxyy,p->r1h1x, p->i1h1x,p->r1h1y,p->i1h1y,p->r1h1y,p->i1h1y, p->r1h2x,p->i1h2x, p->r1h2y,p->i1h2y,p->r1h2y,p->i1h2y); temp += S3v2F12(p->cyyz,p->r1h1y, p->i1h1y,p->r1h1y,p->i1h1y,p->r1h1z,p->i1h1z, p->r1h2y,p->i1h2y, p->r1h2y,p->i1h2y,p->r1h2z,p->i1h2z) +S3v2F12(p->cxzz,p->r1h1x, p->i1h1x,p->r1h1z,p->i1h1z,p->r1h1z,p->i1h1z, p->r1h2x,p->i1h2x, p->r1h2z,p->i1h2z,p->r1h2z,p->i1h2z); temp += S3v2F12(p->cyzz,p->r1h1y, p->i1h1y,p->r1h1z,p->i1h1z,p->r1h1z,p->i1h1z, p->r1h2y,p->i1h2y, p->r1h2z,p->i1h2z,p->r1h2z,p->i1h2z) +S3v2F12(p->cxyz,p->r1h1x, p->i1h1x,p->r1h1y,p->i1h1y,p->r1h1z,p->i1h1z, p->r1h2x,p->i1h2x, p->r1h2y,p->i1h2y,p->r1h2z,p->i1h2z); return(temp/3.); /* divided by 3 to get kernel (otherwise we get 3*kernel) */ } double DFi2F12(DpassStr *p) /* 40 vars - 16 + 6 + 6 + 6 + 6 */ { double temp; temp = S2i2F12(p->cxx,p->r1h1x,p->i1h1x, p->r1h1x,p->i1h1x, p->r1h2x,p->i1h2x, p->r1h2x,p->i1h2x, p->r2h11x,p->i2h11x, p->r2h11x,p->i2h11x, p->h2f1f2x,p->ih2f1f2x, p->h2f1f2x,p->ih2f1f2x); temp += S2i2F12(p->cyy,p->r1h1y,p->i1h1y, p->r1h1y,p->i1h1y, p->r1h2y,p->i1h2y, p->r1h2y,p->i1h2y, p->r2h11y,p->i2h11y, p->r2h11y,p->i2h11y, p->h2f1f2y,p->ih2f1f2y, p->h2f1f2y,p->ih2f1f2y); temp += S2i2F12(p->czz,p->r1h1z,p->i1h1z, p->r1h1z,p->i1h1z, p->r1h2z,p->i1h2z, p->r1h2z,p->i1h2z, p->r2h11z,p->i2h11z, p->r2h11z,p->i2h11z, p->h2f1f2z,p->ih2f1f2z, p->h2f1f2z,p->ih2f1f2z); temp += S2i2F12(p->cxy,p->r1h1x,p->i1h1x, p->r1h1y,p->i1h1y, p->r1h2x,p->i1h2x, p->r1h2y,p->i1h2y, p->r2h11x,p->i2h11x, p->r2h11y,p->i2h11y, p->h2f1f2x,p->ih2f1f2x, p->h2f1f2y,p->ih2f1f2y); temp += S2i2F12(p->cyz,p->r1h1y,p->i1h1y, p->r1h1z,p->i1h1z, p->r1h2y,p->i1h2y, p->r1h2z,p->i1h2z, p->r2h11y,p->i2h11y, p->r2h11z,p->i2h11z, p->h2f1f2y,p->ih2f1f2y, p->h2f1f2z,p->ih2f1f2z); temp += S2i2F12(p->cxz,p->r1h1x,p->i1h1x, p->r1h1z,p->i1h1z, p->r1h2x,p->i1h2x, p->r1h2z,p->i1h2z, p->r2h11x,p->i2h11x, p->r2h11z,p->i2h11z, p->h2f1f2x,p->ih2f1f2x, p->h2f1f2z,p->ih2f1f2z); temp += S3i2F12(p->cxxx,p->r1h1x, p->i1h1x,p->r1h1x,p->i1h1x,p->r1h1x,p->i1h1x, p->r1h2x,p->i1h2x, p->r1h2x,p->i1h2x,p->r1h2x,p->i1h2x); temp += S3i2F12(p->cyyy,p->r1h1y, p->i1h1y,p->r1h1y,p->i1h1y,p->r1h1y,p->i1h1y, p->r1h2y,p->i1h2y, p->r1h2y,p->i1h2y,p->r1h2y,p->i1h2y) +S3i2F12(p->czzz,p->r1h1z, p->i1h1z,p->r1h1z,p->i1h1z,p->r1h1z,p->i1h1z, p->r1h2z,p->i1h2z, p->r1h2z,p->i1h2z,p->r1h2z,p->i1h2z); temp += S3i2F12(p->cxxy,p->r1h1x, p->i1h1x,p->r1h1x,p->i1h1x,p->r1h1y,p->i1h1y, p->r1h2x,p->i1h2x, p->r1h2x,p->i1h2x,p->r1h2y,p->i1h2y) +S3i2F12(p->cxxz,p->r1h1x, p->i1h1x,p->r1h1x,p->i1h1x,p->r1h1z,p->i1h1z, p->r1h2x,p->i1h2x, p->r1h2x,p->i1h2x,p->r1h2z,p->i1h2z); temp += S3i2F12(p->cxyy,p->r1h1x, p->i1h1x,p->r1h1y,p->i1h1y,p->r1h1y,p->i1h1y, p->r1h2x,p->i1h2x, p->r1h2y,p->i1h2y,p->r1h2y,p->i1h2y) +S3i2F12(p->cyyz,p->r1h1y, p->i1h1y,p->r1h1y,p->i1h1y,p->r1h1z,p->i1h1z, p->r1h2y,p->i1h2y, p->r1h2y,p->i1h2y,p->r1h2z,p->i1h2z); temp += S3i2F12(p->cxzz,p->r1h1x, p->i1h1x,p->r1h1z,p->i1h1z,p->r1h1z,p->i1h1z, p->r1h2x,p->i1h2x, p->r1h2z,p->i1h2z,p->r1h2z,p->i1h2z); temp += S3i2F12(p->cyzz,p->r1h1y, p->i1h1y,p->r1h1z,p->i1h1z,p->r1h1z,p->i1h1z, p->r1h2y,p->i1h2y, p->r1h2z,p->i1h2z,p->r1h2z,p->i1h2z) +S3i2F12(p->cxyz,p->r1h1x, p->i1h1x,p->r1h1y,p->i1h1y,p->r1h1z,p->i1h1z, p->r1h2x,p->i1h2x, p->r1h2y,p->i1h2y,p->r1h2z,p->i1h2z); return(temp/3.); /* divided by 3 to get kernel (otherwise we get 3*kernel) */ } double D1n2F1(double cxx, double r1h1x, double i1h1x) /* 12 variables */ { double temp; temp = S2v2F1(cxx,r1h1x,i1h1x,r1h1x,i1h1x); return(temp); } double D1n3F1(double cxx, double cxxx, double r1h1x, double i1h1x, double r2h11x, double i2h11x) { double temp; temp = S2v3F1(cxx,r1h1x,i1h1x,r1h1x,i1h1x,r2h11x,i2h11x,r2h11x,i2h11x) +S3v3F1(cxxx,r1h1x,i1h1x,r1h1x,i1h1x,r1h1x,i1h1x); return(temp); } double D1nF12(double cxx, double r1h1x, double i1h1x, double r1h2x, double i1h2x) /* 18 args - 6 + 6 + 6 */ { double temp; temp = S2vF12(cxx,r1h1x,i1h1x,r1h1x,i1h1x,r1h2x,i1h2x,r1h2x,i1h2x); return(0.5*temp); } double D1n2F12(double cxx, double cxxx, double r1h1x, double i1h1x, double r1h2x, double i1h2x, double r2h11x, double i2h11x, double h2f1f2x, double ih2f1f2x) /* 40 vars - 16 + 6 + 6 + 6 + 6 */ { double temp; temp = S2v2F12(cxx,r1h1x,i1h1x,r1h1x,i1h1x, r1h2x,i1h2x,r1h2x,i1h2x, r2h11x,i2h11x,r2h11x,i2h11x, h2f1f2x,ih2f1f2x,h2f1f2x,ih2f1f2x) +S3v2F12(cxxx,r1h1x,i1h1x,r1h1x,i1h1x,r1h1x,i1h1x, r1h2x,i1h2x,r1h2x,i1h2x,r1h2x,i1h2x); return(temp/3.); /* divided by 3 to get kernel (otherwise we get 3*kernel) */ } double D1i2F1(double cxx, double r1h1x, double i1h1x) /* 12 variables */ { double temp; temp = S2i2F1(cxx,r1h1x,i1h1x,r1h1x,i1h1x); return(temp); } double D1i3F1(double cxx, double cxxx, double r1h1x, double i1h1x, double r2h11x, double i2h11x) { double temp; temp = S2i3F1(cxx,r1h1x,i1h1x,r1h1x,i1h1x,r2h11x,i2h11x,r2h11x,i2h11x) +S3i3F1(cxxx,r1h1x,i1h1x,r1h1x,i1h1x,r1h1x,i1h1x); return(temp); } double D1iF12(double cxx, double r1h1x, double i1h1x, double r1h2x, double i1h2x) /* 18 args - 6 + 6 + 6 */ { double temp; temp = S2iF12(cxx,r1h1x,i1h1x,r1h1x,i1h1x,r1h2x,i1h2x,r1h2x,i1h2x); return(0.5*temp); } double D1i2F12(double cxx, double cxxx, double r1h1x, double i1h1x, double r1h2x, double i1h2x, double r2h11x, double i2h11x, double h2f1f2x, double ih2f1f2x) /* 40 vars - 16 + 6 + 6 + 6 + 6 */ { double temp; temp = S2i2F12(cxx,r1h1x,i1h1x,r1h1x,i1h1x, r1h2x,i1h2x,r1h2x,i1h2x, r2h11x,i2h11x,r2h11x,i2h11x, h2f1f2x,ih2f1f2x,h2f1f2x,ih2f1f2x) +S3i2F12(cxxx,r1h1x,i1h1x,r1h1x,i1h1x,r1h1x,i1h1x, r1h2x,i1h2x,r1h2x,i1h2x,r1h2x,i1h2x); return(temp/3.); /* divided by 3 to get kernel (otherwise we get 3*kernel) */ } tmpk8ny_4pz/src/spicelib/analysis/cktmask.c0000644000175000017500000000125413546075722021167 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* CKTmodAsk * Ask questions about a specified device. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" /* ARGSUSED */ int CKTmodAsk(CKTcircuit *ckt, GENmodel *modfast, int which, IFvalue *value, IFvalue *selector) { int type = modfast->GENmodType; NG_IGNORE(selector); if(DEVices[type]->DEVmodAsk) { return( DEVices[type]->DEVmodAsk (ckt, modfast, which, value) ); } return(E_BADPARM); } tmpk8ny_4pz/src/spicelib/analysis/cluster.c0000644000175000017500000002377013546075722021222 0ustar carstencarsten/* Spice hooks */ #include "ngspice/ngspice.h" #ifdef CLUSTER #include "ngspice/inpdefs.h" #include "ngspice/cluster.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" /* Misc stuff */ #include #include /*Network stuff*/ #include #include #include #include #include struct input_pipe { /*the names of the local and remote nodes*/ char remote[32]; char local[32]; int fd; FILE *stream; /* the data recieved */ double time; double data; /*resistance of this link*/ double res; /* The value controled */ double *currentPtr; /*The output it is linked to*/ struct output_pipe *link; struct input_pipe *next; }; struct output_pipe { int fd; FILE *stream; /*the names of the local and remote nodes*/ char local[32]; char remote[32]; /* The index of the local node value in the ckt->CKTrhsOld array */ int outIndex; /*Last values sent*/ double time,data; struct input_pipe *link; struct output_pipe *next; }; static double lastTimeSent=0; static int time_sock=0; static FILE *time_outfile=NULL; static FILE *time_infile=NULL; static struct input_pipe* input_pipes=NULL; static struct output_pipe* output_pipes=NULL; /* sets up deamon which waits for connections *and sets up input pipes as it recieves them */ static void *start_listener(void *); /* Setup the output pipes*/ static int setup_output(CKTcircuit *ckt); static int setup_input(CKTcircuit *ckt); static int setup_time(); int CLUsetup(CKTcircuit *ckt){ pthread_t tid; struct input_pipe *curr; int i, connections=0; GENmodel *mod; GENinstance *inst; /* count the number of connections expected */ i = INPtypelook("Isource"); for(mod = ckt->CKThead[i]; mod != NULL; mod = mod->GENnextModel) for (inst = mod->GENinstances; inst != NULL; inst = inst->GENnextInstance) if(strncmp("ipcx",inst->GENname,4) == 0) connections++; /* allocate the input connections */ for(i=0;inext = input_pipes; else curr->next = NULL; input_pipes = curr; } pthread_create(&tid,NULL,start_listener,(void *)&connections); setup_output(ckt); pthread_join(tid,NULL); setup_input(ckt); setup_time(); return 0; } #include "../devices/isrc/isrcdefs.h" /*Connect to remote machine and find the data*/ static int setup_output(CKTcircuit *ckt){ int type; GENmodel *mod; GENinstance *inst; char hostname[64]; lastTimeSent = 0; type = INPtypelook("Isource"); for(mod = ckt->CKThead[type]; mod != NULL; mod = mod->GENnextModel) for (inst = mod->GENinstances; inst != NULL; inst = inst->GENnextInstance) if(strncmp("ipcx",inst->GENname,4) == 0){ ISRCinstance *isrc = (ISRCinstance *)inst; CKTnode *node; struct output_pipe *curr; struct sockaddr_in address; struct hostent *host=NULL; int sock,nodeNum,i; /*Create the struct*/ curr = TMALLOC(struct output_pipe, 1); if(output_pipes) curr->next = output_pipes; else curr->next = NULL; output_pipes = curr; /* The node names */ strcpy(curr->local,CKTnodName(ckt,isrc->ISRCnegNode));/*weird*/ strcpy(curr->remote,isrc->ISRCname); /* extract remote node number */ nodeNum = /*Xcoord*/(curr->remote[4] - '0') * CLUSTER_WIDTH + /*Ycoord*/(curr->remote[9] - '0'); sprintf(hostname,"n%d."DOMAIN_NAME,nodeNum); /* network stuff */ host = gethostbyname(hostname); if(!host){ printf("Host not found in setup_output\n"); exit(0); } if((sock = socket(PF_INET,SOCK_STREAM,0)) < 0){ printf("Socket open in setup_output\n"); exit(0); } address.sin_family = AF_INET; address.sin_port = htons(PORT); memcpy(&address.sin_addr,host->h_addr_list[0], sizeof(address.sin_addr)); printf("connecting to %s ...... ",hostname); fflush(stdout); while(connect(sock,(struct sockaddr *)&address,sizeof(address))){ usleep(500);/*wait for the sever to start*/ } printf("connected\n"); curr->fd = sock; /* send stuff */ /* buffer */ i = (strlen(curr->remote) + strlen(curr->local) + 2)*sizeof(char); setsockopt(sock,SOL_SOCKET,SO_SNDBUF,&i,sizeof(i)); curr->stream = fdopen(curr->fd,"w"); fwrite(curr->remote,sizeof(char),strlen(curr->remote),curr->stream); fputc('\0',curr->stream); fwrite(curr->local,sizeof(char),strlen(curr->local),curr->stream); fputc('\0',curr->stream); fflush(curr->stream); /* buffer, what is done per time point */ i = sizeof(double)*2; setsockopt(sock,SOL_SOCKET,SO_SNDBUF,&i,sizeof(i)); /* find the index in ckt->rhsOld which contains the local node */ i = 0; for(node = ckt->CKTnodes->next;node;node = node->next){ i++; if(strcmp(node->name,curr->local)==0){ curr->outIndex = i; goto next; } } printf("Local node %s not found\n",curr->local); exit(0); next: } return 0; } /*Processes the connections recieved by start_listener*/ static int setup_input(CKTcircuit *ckt){ int type; GENmodel *mod; GENinstance *inst; struct input_pipe *input; type = INPtypelook("Isource"); for(input = input_pipes;input;input = input->next){ int i; input->stream = fdopen(input->fd,"r"); /*Get the local and remote node names*/ i=0; do { while(fread(&input->local[i],sizeof(char),1,input->stream) != 1); }while(input->local[i++] != '\0'); i=0; do { while(fread(&input->remote[i],sizeof(char),1,input->stream) != 1); }while(input->remote[i++] != '\0'); /* initilise */ input->time = -1; /*Find the Isource to control*/ for(mod = ckt->CKThead[type]; mod != NULL; mod = mod->GENnextModel) for (inst = mod->GENinstances; inst != NULL; inst = inst->GENnextInstance) if(strcmp(input->remote,&inst->GENname[11]) == 0){ ISRCinstance *isrc = (ISRCinstance *)inst; input->res = isrc->ISRCdcValue; isrc->ISRCdcValue = 0; input->currentPtr = &isrc->ISRCdcValue; goto next; } /* We get here if no Isource matches */ printf("Current source %s not found\n",input->remote); exit(0); next: /* Now find the corresponding output */ { struct output_pipe *output; for(output = output_pipes;output;output = output->next) if(strcmp(&input->local[11],output->local)==0){ input->link = output; output->link = input; goto next2; } printf("Parent to %s not found\n",&input->local[11]); exit(0); next2: } } return 0; } /* This starts a server and waits for connections, number given by argument*/ static void *start_listener(void *v){ int *connections = (int *)v; int count=0; struct sockaddr_in address; int sock, conn,i; size_t addrLength = sizeof(struct sockaddr_in); struct input_pipe *curr; if((sock = socket(PF_INET,SOCK_STREAM,0)) < 0){ printf("socket in start_listener\n"); exit(0); } /* Allow reuse of the socket */ i = 1; setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&i,sizeof(i)); /* port, inferface ..*/ address.sin_family = AF_INET; address.sin_port = htons(PORT); memset(&address.sin_addr,0,sizeof(address.sin_addr)); if(bind(sock, (struct sockaddr *)&address,sizeof(address))){ printf("bind in start_listener\n"); exit(0); } if(listen(sock,5)){ printf("listen in start_listener\n"); exit(0); } /* Loop till recieved all connections */ curr = input_pipes; while (count < *connections){ if((conn = accept(sock, (struct sockaddr *)&address,&addrLength)) < 0){ printf("accept in start_listener\n"); exit(0); } curr->fd = conn; /* will fill rest of structure later in setup_input*/ count ++; curr = curr->next; } close(sock); return NULL; } /*Writes data to remote computer*/ int CLUoutput(CKTcircuit *ckt){ struct output_pipe *output; lastTimeSent = ckt->CKTtime; for(output = output_pipes; output; output = output->next){ output->time = ckt->CKTtime; output->data = ckt->CKTrhsOld[output->outIndex]; fwrite(&output->time,sizeof(double),1,output->stream); fwrite(&output->data, sizeof(double),1,output->stream); fflush(output->stream); } return 0; } /*Maniputates the local circuit based on the links*/ int CLUinput(CKTcircuit *ckt){ struct input_pipe *input; double tmp; for(input= input_pipes;input;input = input->next){ /*recieve data till we get a good time point*/ while (input->time < lastTimeSent){ while(fread(&input->time, sizeof(double), 1, input->stream) != 1){} while(fread(&input->data, sizeof(double), 1, input->stream) != 1){} } tmp = (input->link->data - input->data) / input->res; /*dampen out large currents*/ if(tmp > 0) *input->currentPtr = 0.2 * (1 - exp(-tmp/0.2)); else *input->currentPtr = -0.2 * (1 - exp(tmp/0.2)); /*GND is the posNode, local node is the negNode*/ } return 0; } static int setup_time(){ struct sockaddr_in address; struct hostent *host=NULL; char *hostname = TIME_HOST; int sock,i; /* network stuff */ host = gethostbyname(hostname); if(!host){ printf("Host not found in setup_time\n"); exit(0); } if((sock = socket(PF_INET,SOCK_STREAM,0)) < 0){ printf("Socket open in setup_time\n"); exit(0); } i = sizeof(double)*2; setsockopt(sock,SOL_SOCKET,SO_SNDBUF ,&i,sizeof(i)); address.sin_family = AF_INET; address.sin_port = htons(TIME_PORT); memcpy(&address.sin_addr,host->h_addr_list[0], sizeof(address.sin_addr)); while(connect(sock,(struct sockaddr *)&address,sizeof(address))){ usleep(500);/*wait for the sever to start*/ } time_sock=sock; time_outfile=fdopen(sock,"w"); time_infile=fdopen(sock,"r"); return 0; } int CLUsync(double time,double *delta, int error){ double tmp; if(error) tmp = *delta * (-1); else tmp = *delta; fwrite(&time,sizeof(double),1,time_outfile); fwrite(&tmp,sizeof(double),1,time_outfile); fflush(time_outfile); while(fread(&tmp,sizeof(double),1,time_infile) != 1); if(tmp < 0){ *delta = -tmp; return 0; } else { *delta = tmp; return 1; } } #endif tmpk8ny_4pz/src/spicelib/analysis/pssaskq.c0000644000175000017500000000217613546075722021223 0ustar carstencarsten/********** Author: 2010-05 Stefano Perticaroli ``spertica'' **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/cktdefs.h" #include "ngspice/pssdefs.h" /* ARGSUSED */ int PSSaskQuest(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value) { PSSan *job = (PSSan *) anal; NG_IGNORE(ckt); switch(which) { case GUESSED_FREQ: value->rValue = job->PSSguessedFreq; break; case OSC_NODE: value->nValue = job->PSSoscNode; break; case STAB_TIME: value->rValue = job->PSSstabTime; break; case PSS_UIC: if (job->PSSmode & MODEUIC) { value->iValue = 1; } else { value->iValue = 0; } break; case PSS_POINTS: value->iValue = (int)job->PSSpoints; break; case PSS_HARMS: value->iValue = job->PSSharms; break; case SC_ITER: value->iValue = job->sc_iter; break; case STEADY_COEFF: value->rValue = job->steady_coeff; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/analysis/dcosetp.c0000644000175000017500000000134713546075722021176 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/cktdefs.h" #include "ngspice/opdefs.h" #include "analysis.h" /* ARGSUSED */ int DCOsetParm(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value) { NG_IGNORE(ckt); NG_IGNORE(anal); NG_IGNORE(value); switch(which) { default: break; } return(E_BADPARM); } SPICEanalysis DCOinfo = { { "OP", "D.C. Operating point analysis", 0, NULL, }, sizeof(OP), NODOMAIN, 1, DCOsetParm, DCOaskQuest, NULL, DCop }; tmpk8ny_4pz/src/spicelib/analysis/senssetp.c0000644000175000017500000000532613546075722021402 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/cktdefs.h" #include "ngspice/sensdefs.h" #include "analysis.h" /* ARGSUSED */ int SENSsetParam(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value) { SENS_AN *job = (SENS_AN *) anal; NG_IGNORE(ckt); switch(which) { case SENS_POS: job->output_pos = value->nValue; job->output_neg = NULL; job->output_volt = 1; job->step_type = SENS_DC; break; case SENS_NEG: job->output_neg = value->nValue; break; case SENS_SRC: job->output_src = value->uValue; job->output_volt = 0; job->step_type = SENS_DC; break; case SENS_NAME: job->output_name = value->sValue; break; case SENS_START: job->start_freq = value->rValue; break; case SENS_STOP: job->stop_freq = value->rValue; break; case SENS_STEPS: job->n_freq_steps = value->iValue; break; case SENS_DECADE: job->step_type = SENS_DECADE; break; case SENS_OCTAVE: job->step_type = SENS_OCTAVE; break; case SENS_LINEAR: job->step_type = SENS_LINEAR; break; case SENS_DC: job->step_type = SENS_DC; break; case SENS_DEFTOL: job->deftol = value->rValue; break; case SENS_DEFPERTURB: job->defperturb = value->rValue; break; default: return(E_BADPARM); } return(OK); } static IFparm SENSparms[] = { /* TF like parameters */ { "outpos", SENS_POS, IF_SET|IF_ASK|IF_NODE, "output positive node" }, { "outneg", SENS_NEG, IF_SET|IF_ASK|IF_NODE, "output negative node" }, { "outsrc", SENS_SRC, IF_SET|IF_ASK|IF_INSTANCE, "output current" }, { "outname", SENS_NAME, IF_SET|IF_ASK|IF_STRING, "Name of output variable" }, /* AC parameters */ { "start", SENS_START, IF_SET|IF_ASK|IF_REAL, "starting frequency" }, { "stop", SENS_STOP, IF_SET|IF_ASK|IF_REAL, "ending frequency" }, { "numsteps", SENS_STEPS,IF_SET|IF_ASK|IF_INTEGER, "number of frequencies"}, { "dec", SENS_DECADE, IF_SET|IF_FLAG, "step by decades" }, { "oct", SENS_OCTAVE, IF_SET|IF_FLAG, "step by octaves" }, { "lin", SENS_LINEAR, IF_SET|IF_FLAG, "step linearly" }, { "dc", SENS_DC, IF_SET|IF_FLAG, "analysis at DC" }, }; SPICEanalysis SENSinfo = { { "SENS", "Sensitivity analysis", NUMELEMS(SENSparms), SENSparms }, sizeof(SENS_AN), FREQUENCYDOMAIN, 1, SENSsetParam, SENSask, NULL, sens_sens }; tmpk8ny_4pz/src/spicelib/ChangeLog0000644000175000017500000000124113546075722017311 0ustar carstencarsten2000-07-25 Arno W. Peters * src/spicelib/devices/README: Moved to src/spicelib/README. * src/spicelib/Makefile.am, src/spicelib/devices/Makefile.am: Files affected by the move. * src/spicelib/devices/parser/*: Moved all files to src/spicelib/parser. * configure.in, src/Makefile.am, src/spicelib/Makefile.am, src/spicelib/devices/Makefile.am: Files affected by the move. 2000-07-24 Arno W. Peters * src/spicelib/devices/analysis/*: Moved all files to src/spicelib/analysis. * configure.in, src/spicelib/Makefile.am, src/spicelib/Makefile.am, src/spicelib/devices/Makefile.am: Files affected by the move. tmpk8ny_4pz/src/spicelib/README0000644000175000017500000000012313546075722016415 0ustar carstencarstenThe Spice Library. It takes a circuit description and builds a simulator from it. tmpk8ny_4pz/src/spicelib/devices/0000755000175000017500000000000013546075722017163 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/nbjt/0000755000175000017500000000000013546075722020120 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/nbjt/nbjtinit.c0000644000175000017500000000316613546075722022113 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "nbjtitf.h" #include "nbjtext.h" #include "nbjtinit.h" SPICEdev NBJTinfo = { .DEVpublic = { .name = "NBJT", .description = "1D Numerical Bipolar Junction Transistor model", .terms = &NBJTnSize, .numNames = &NBJTnSize, .termNames = NBJTnames, .numInstanceParms = &NBJTpTSize, .instanceParms = NBJTpTable, .numModelParms = &NBJTmPTSize, .modelParms = NBJTmPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = NBJTparam, .DEVmodParam = NBJTmParam, .DEVload = NBJTload, .DEVsetup = NBJTsetup, .DEVunsetup = NULL, .DEVpzSetup = NBJTsetup, .DEVtemperature = NBJTtemp, .DEVtrunc = NBJTtrunc, .DEVfindBranch = NULL, .DEVacLoad = NBJTacLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NBJTdelete, .DEVsetic = NULL, .DEVask = NBJTask, .DEVmodAsk = NULL, .DEVpzLoad = NBJTpzLoad, .DEVconvTest = NULL, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &NBJTiSize, .DEVmodSize = &NBJTmSize, #ifdef CIDER .DEVdump = NBJTdump, .DEVacct = NBJTacct, #endif }; SPICEdev * get_nbjt_info(void) { return &NBJTinfo; } tmpk8ny_4pz/src/spicelib/devices/nbjt/nbjtdel.c0000644000175000017500000000106413546075722021707 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * This routine deletes a NBJT instance from the circuit and frees the * storage it was using. */ #include "ngspice/ngspice.h" #include "nbjtdefs.h" #include "../../../ciderlib/oned/onedext.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int NBJTdelete(GENinstance *gen_inst) { NBJTinstance *inst = (NBJTinstance *) gen_inst; ONEdestroy(inst->NBJTpDevice); return OK; } tmpk8ny_4pz/src/spicelib/devices/nbjt/nbjttrun.c0000644000175000017500000000255213546075722022136 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * This routine performs truncation error calculations for NBJTs in the * circuit. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "nbjtdefs.h" #include "ngspice/sperror.h" #include "../../../ciderlib/oned/onedext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" int NBJTtrunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { register NBJTmodel *model = (NBJTmodel *) inModel; register NBJTinstance *inst; double deltaNew; double deltaNorm[7]; double startTime; int i; for (i = 0; i <= ckt->CKTmaxOrder; i++) { deltaNorm[i] = ckt->CKTdeltaOld[i] / TNorm; } for (; model != NULL; model = NBJTnextModel(model)) { model->NBJTpInfo->order = ckt->CKTorder; model->NBJTpInfo->delta = deltaNorm; model->NBJTpInfo->lteCoeff = computeLTECoeff(model->NBJTpInfo); for (inst = NBJTinstances(model); inst != NULL; inst = NBJTnextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); deltaNew = ONEtrunc(inst->NBJTpDevice, model->NBJTpInfo, ckt->CKTdelta); *timeStep = MIN(*timeStep, deltaNew); inst->NBJTpDevice->pStats->totalTime[STAT_TRAN] += SPfrontEnd->IFseconds() - startTime; } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/nbjt/Makefile.am0000644000175000017500000000071413546075722022156 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libnbjt.la libnbjt_la_SOURCES = \ nbjt.c \ nbjtacld.c \ nbjtask.c \ nbjtdefs.h \ nbjtdel.c \ nbjtdump.c \ nbjtext.h \ nbjtinit.c \ nbjtinit.h \ nbjtitf.h \ nbjtload.c \ nbjtmpar.c \ nbjtparm.c \ nbjtpzld.c \ nbjtset.c \ nbjttemp.c \ nbjttrun.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/nbjt/nbjtitf.h0000644000175000017500000000027213546075722021732 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_NBJT #define DEV_NBJT extern SPICEdev *get_nbjt_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/nbjt/nbjtdump.c0000644000175000017500000001152513546075722022113 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ /* * This is a simple routine to dump the internal device states. It produces * states for .OP, .DC, & .TRAN simulations. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "nbjtdefs.h" #include "../../../ciderlib/oned/onedext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" /* Forward Declarations */ static void NBJTputHeader(FILE *, CKTcircuit *, NBJTinstance *); /* State Counter */ static int state_numOP = 0; static int state_numDC = 0; static int state_numTR = 0; void NBJTdump(GENmodel *inModel, CKTcircuit *ckt) { register NBJTmodel *model = (NBJTmodel *) inModel; register NBJTinstance *inst; OUTPcard *output; FILE *fpState; char fileName[BSIZE_SP]; char description[BSIZE_SP]; char *prefix; int *state_num; int anyOutput = 0; if (ckt->CKTmode & MODEDCOP) { prefix = "OP"; state_num = &state_numOP; sprintf(description, "..."); } else if (ckt->CKTmode & MODEDCTRANCURVE) { prefix = "DC"; state_num = &state_numDC; sprintf(description, "sweep = % e", ckt->CKTtime); } else if (ckt->CKTmode & MODETRAN) { prefix = "TR"; state_num = &state_numTR; sprintf(description, "time = % e", ckt->CKTtime); } else { /* Not a recognized CKT mode. */ return; } for (; model != NULL; model = NBJTnextModel(model)) { output = model->NBJToutputs; for (inst = NBJTinstances(model); inst != NULL; inst = NBJTnextInstance(inst)) { if (inst->NBJTprintGiven) { if ((ckt->CKTmode & MODETRAN) && ((ckt->CKTstat->STATaccepted - 1) % inst->NBJTprint != 0)) { continue; } anyOutput = 1; sprintf(fileName, "%s%s.%d.%s", output->OUTProotFile, prefix, *state_num, inst->NBJTname); if ((fpState = fopen(fileName, "wb")) == NULL) { perror(fileName); } else { NBJTputHeader(fpState, ckt, inst); ONEprnSolution(fpState, inst->NBJTpDevice, model->NBJToutputs); fclose(fpState); LOGmakeEntry(fileName, description); } } } } if (anyOutput) { (*state_num)++; } } #define NBJTnumOutputs 9 static void NBJTputHeader(FILE *file, CKTcircuit *ckt, NBJTinstance *inst) { char *reference; double refVal = 0.0; int numVars = NBJTnumOutputs; if (ckt->CKTmode & MODEDCOP) { reference = NULL; } else if (ckt->CKTmode & MODEDCTRANCURVE) { reference = "sweep"; refVal = ckt->CKTtime; numVars++; } else if (ckt->CKTmode & MODETRAN) { reference = "time"; refVal = ckt->CKTtime; numVars++; } else { reference = NULL; } fprintf(file, "Title: Device %s external state\n", inst->NBJTname); fprintf(file, "Plotname: Device Operating Point\n"); fprintf(file, "Command: deftype v conductance S\n"); fprintf(file, "Flags: real\n"); fprintf(file, "No. Variables: %d\n", numVars); fprintf(file, "No. Points: 1\n"); numVars = 0; fprintf(file, "Variables:\n"); if (reference) { fprintf(file, "\t%d %s unknown\n", numVars++, reference); } fprintf(file, "\t%d v13 voltage\n", numVars++); fprintf(file, "\t%d v23 voltage\n", numVars++); fprintf(file, "\t%d i1 current\n", numVars++); fprintf(file, "\t%d i2 current\n", numVars++); fprintf(file, "\t%d i3 current\n", numVars++); fprintf(file, "\t%d g22 conductance\n", numVars++); fprintf(file, "\t%d g21 conductance\n", numVars++); fprintf(file, "\t%d g12 conductance\n", numVars++); fprintf(file, "\t%d g11 conductance\n", numVars++); fprintf(file, "Values:\n0"); if (reference) { fprintf(file, "\t% e\n", refVal); } fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NBJTvce)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NBJTvbe)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NBJTic)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NBJTie) - *(ckt->CKTstate0 + inst->NBJTic)); fprintf(file, "\t% e\n", -*(ckt->CKTstate0 + inst->NBJTie)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NBJTdIeDVbe) - *(ckt->CKTstate0 + inst->NBJTdIcDVbe)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NBJTdIeDVce) - *(ckt->CKTstate0 + inst->NBJTdIcDVce)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NBJTdIcDVbe)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NBJTdIcDVce)); } void NBJTacct(GENmodel *inModel, CKTcircuit *ckt, FILE *file) { register NBJTmodel *model = (NBJTmodel *) inModel; register NBJTinstance *inst; OUTPcard *output; NG_IGNORE(ckt); for (; model != NULL; model = NBJTnextModel(model)) { output = model->NBJToutputs; for (inst = NBJTinstances(model); inst != NULL; inst = NBJTnextInstance(inst)) { if (output->OUTPstats) { ONEmemStats(file, inst->NBJTpDevice); ONEcpuStats(file, inst->NBJTpDevice); } } } } tmpk8ny_4pz/src/spicelib/devices/nbjt/nbjtinit.h0000644000175000017500000000037013546075722022112 0ustar carstencarsten#ifndef _NBJTINIT_H #define _NBJTINIT_H extern IFparm NBJTpTable[ ]; extern IFparm NBJTmPTable[ ]; extern char *NBJTnames[ ]; extern int NBJTpTSize; extern int NBJTmPTSize; extern int NBJTnSize; extern int NBJTiSize; extern int NBJTmSize; #endif tmpk8ny_4pz/src/spicelib/devices/nbjt/nbjtext.h0000644000175000017500000000160413546075722021750 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Karti Mayaram **********/ #ifndef __NBJT_H #define __NBJT_H extern int NBJTacLoad(GENmodel *, CKTcircuit *); extern int NBJTask(CKTcircuit *, GENinstance *, int, IFvalue *, IFvalue *); extern int NBJTdelete(GENinstance *); extern int NBJTgetic(GENmodel *, CKTcircuit *); extern int NBJTload(GENmodel *, CKTcircuit *); extern int NBJTmParam(int, IFvalue *, GENmodel *); extern int NBJTparam(int, IFvalue *, GENinstance *, IFvalue *); extern int NBJTpzLoad(GENmodel *, CKTcircuit *, SPcomplex *); extern int NBJTsetup(SMPmatrix *, GENmodel *, CKTcircuit *, int *); extern int NBJTtemp(GENmodel *, CKTcircuit *); extern int NBJTtrunc(GENmodel *, CKTcircuit *, double *); extern void NBJTdump(GENmodel *, CKTcircuit *); extern void NBJTacct(GENmodel *, CKTcircuit *, FILE *); #endif /* NBJT_H */ tmpk8ny_4pz/src/spicelib/devices/nbjt/nbjtload.c0000644000175000017500000004034713546075722022071 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * This is the function called each iteration to evaluate the numerical BJTs * in the circuit and load them into the matrix as appropriate */ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/cktdefs.h" #include "nbjtdefs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "../../../ciderlib/oned/onedext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" /* Forward declarations */ int NBJTinitSmSig(NBJTinstance *); /* External Declarations */ extern int ONEdcDebug; extern int ONEtranDebug; extern int ONEacDebug; int NBJTload(GENmodel *inModel, CKTcircuit *ckt) { register NBJTmodel *model = (NBJTmodel *) inModel; register NBJTinstance *inst; register ONEdevice *pDevice; double startTime, startTime2, totalTime, totalTime2; double tol; double ic, ie; double iceq, ieeq; double ichat = 0.0, iehat = 0.0; double delVce, delVbe; double vce, vbe /*, vbc*/; double dIeDVce, dIeDVbe; double dIcDVce, dIcDVbe; double xfact; int icheck; int icheck1; int i; double deltaNorm[7]; int devConverged = 0; int numDevNonCon; int deviceType; int doInitSolve; int doVoltPred; char *initStateName; /* loop through all the models */ for (; model != NULL; model = NBJTnextModel(model)) { FieldDepMobility = model->NBJTmodels->MODLfieldDepMobility; Srh = model->NBJTmodels->MODLsrh; Auger = model->NBJTmodels->MODLauger; AvalancheGen = model->NBJTmodels->MODLavalancheGen; MobDeriv = model->NBJTmethods->METHmobDeriv; MaxIterations = model->NBJTmethods->METHitLim; ONEdcDebug = model->NBJToutputs->OUTPdcDebug; ONEtranDebug = model->NBJToutputs->OUTPtranDebug; ONEacDebug = model->NBJToutputs->OUTPacDebug; deviceType = model->NBJToptions->OPTNdeviceType; doVoltPred = model->NBJTmethods->METHvoltPred; if (ckt->CKTmode & MODEINITPRED) { /* compute normalized deltas and predictor coeff */ if (!(ckt->CKTmode & MODEDCTRANCURVE)) { model->NBJTpInfo->order = ckt->CKTorder; model->NBJTpInfo->method = ckt->CKTintegrateMethod; for (i = 0; i <= ckt->CKTmaxOrder; i++) { deltaNorm[i] = ckt->CKTdeltaOld[i] / TNorm; } computeIntegCoeff(ckt->CKTintegrateMethod, ckt->CKTorder, model->NBJTpInfo->intCoeff, deltaNorm); computePredCoeff(ckt->CKTintegrateMethod, ckt->CKTorder, model->NBJTpInfo->predCoeff, deltaNorm); } } else if (ckt->CKTmode & MODEINITTRAN) { model->NBJTpInfo->order = ckt->CKTorder; model->NBJTpInfo->method = ckt->CKTintegrateMethod; for (i = 0; i <= ckt->CKTmaxOrder; i++) { deltaNorm[i] = ckt->CKTdeltaOld[i] / TNorm; } computeIntegCoeff(ckt->CKTintegrateMethod, ckt->CKTorder, model->NBJTpInfo->intCoeff, deltaNorm); } /* loop through all the instances of the model */ for (inst = NBJTinstances(model); inst != NULL; inst = NBJTnextInstance(inst)) { pDevice = inst->NBJTpDevice; totalTime = 0.0; startTime = SPfrontEnd->IFseconds(); /* Get Temp.-Dep. Global Parameters */ GLOBgetGlobals(&(inst->NBJTglobals)); /* * initialization */ pDevice->devStates = ckt->CKTstates; icheck = 1; doInitSolve = FALSE; initStateName = NULL; if (ckt->CKTmode & MODEINITSMSIG) { vbe = *(ckt->CKTstate0 + inst->NBJTvbe); vce = *(ckt->CKTstate0 + inst->NBJTvce); delVbe = 0.0; delVce = 0.0; NBJTsetBCs(pDevice, vce, vbe); } else if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate0 + inst->NBJTvbe) = *(ckt->CKTstate1 + inst->NBJTvbe); *(ckt->CKTstate0 + inst->NBJTvce) = *(ckt->CKTstate1 + inst->NBJTvce); vbe = *(ckt->CKTstate1 + inst->NBJTvbe); vce = *(ckt->CKTstate1 + inst->NBJTvce); ONEsaveState(pDevice); delVbe = 0.0; delVce = 0.0; } else if ((ckt->CKTmode & MODEINITJCT) && (ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) { doInitSolve = TRUE; initStateName = inst->NBJTicFile; vbe = 0.0; vce = 0.0; delVbe = vbe; delVce = vce; } else if ((ckt->CKTmode & MODEINITJCT) && (inst->NBJToff == 0)) { doInitSolve = TRUE; initStateName = inst->NBJTicFile; vbe = inst->NBJTtype * 0.6; vce = inst->NBJTtype * 1.0; delVbe = vbe; delVce = vce; } else if (ckt->CKTmode & MODEINITJCT) { doInitSolve = TRUE; vbe = 0.0; vce = 0.0; delVbe = vbe; delVce = vce; } else if ((ckt->CKTmode & MODEINITFIX) && inst->NBJToff) { vbe = 0.0; vce = 0.0; delVbe = vbe; delVce = vce; } else { if (ckt->CKTmode & MODEINITPRED) { *(ckt->CKTstate0 + inst->NBJTvbe) = *(ckt->CKTstate1 + inst->NBJTvbe); *(ckt->CKTstate0 + inst->NBJTvce) = *(ckt->CKTstate1 + inst->NBJTvce); *(ckt->CKTstate0 + inst->NBJTic) = *(ckt->CKTstate1 + inst->NBJTic); *(ckt->CKTstate0 + inst->NBJTie) = *(ckt->CKTstate1 + inst->NBJTie); *(ckt->CKTstate0 + inst->NBJTdIeDVce) = *(ckt->CKTstate1 + inst->NBJTdIeDVce); *(ckt->CKTstate0 + inst->NBJTdIeDVbe) = *(ckt->CKTstate1 + inst->NBJTdIeDVbe); *(ckt->CKTstate0 + inst->NBJTdIcDVce) = *(ckt->CKTstate1 + inst->NBJTdIcDVce); *(ckt->CKTstate0 + inst->NBJTdIcDVbe) = *(ckt->CKTstate1 + inst->NBJTdIcDVbe); if (!(ckt->CKTmode & MODEDCTRANCURVE)) { /* no linear prediction on device voltages */ vbe = *(ckt->CKTstate1 + inst->NBJTvbe); vce = *(ckt->CKTstate1 + inst->NBJTvce); ONEpredict(pDevice, model->NBJTpInfo); } else { if (doVoltPred) { /* linear prediction */ xfact=ckt->CKTdelta/ckt->CKTdeltaOld[1]; vbe = (1+xfact) * (*(ckt->CKTstate1 + inst->NBJTvbe)) - (xfact) * (*(ckt->CKTstate2 + inst->NBJTvbe)); vce = (1+xfact) * (*(ckt->CKTstate1 + inst->NBJTvce)) - (xfact) * (*(ckt->CKTstate2 + inst->NBJTvce)); } else { vbe = *(ckt->CKTstate1 + inst->NBJTvbe); vce = *(ckt->CKTstate1 + inst->NBJTvce); } } } else { /* * compute new nonlinear branch voltages */ vbe = *(ckt->CKTrhsOld + inst->NBJTbaseNode) - *(ckt->CKTrhsOld + inst->NBJTemitNode); vce = *(ckt->CKTrhsOld + inst->NBJTcolNode) - *(ckt->CKTrhsOld + inst->NBJTemitNode); } delVbe = vbe - *(ckt->CKTstate0 + inst->NBJTvbe); delVce = vce - *(ckt->CKTstate0 + inst->NBJTvce); ichat = *(ckt->CKTstate0 + inst->NBJTic) - *(ckt->CKTstate0 + inst->NBJTdIcDVbe) * delVbe - *(ckt->CKTstate0 + inst->NBJTdIcDVce) * delVce; iehat = *(ckt->CKTstate0 + inst->NBJTie) - *(ckt->CKTstate0 + inst->NBJTdIeDVbe) * delVbe - *(ckt->CKTstate0 + inst->NBJTdIeDVce) * delVce; #ifndef NOBYPASS /* * bypass if solution has not changed */ /* * the following collections of if's would be just one if the average * compiler could handle it, but many find the expression too * complicated, thus the split. */ if ((ckt->CKTbypass) && pDevice->converged && (!(ckt->CKTmode & MODEINITPRED)) && (fabs(delVbe) < (ckt->CKTreltol * MAX(fabs(vbe), fabs(*(ckt->CKTstate0 + inst->NBJTvbe))) + ckt->CKTvoltTol))) if ((fabs(delVce) < ckt->CKTreltol * MAX(fabs(vce), fabs(*(ckt->CKTstate0 + inst->NBJTvce))) + ckt->CKTvoltTol)) if ((fabs(ichat - *(ckt->CKTstate0 + inst->NBJTic)) < ckt->CKTreltol * MAX(fabs(ichat), fabs(*(ckt->CKTstate0 + inst->NBJTic))) + ckt->CKTabstol)) if ((fabs(iehat - *(ckt->CKTstate0 + inst->NBJTie)) < ckt->CKTreltol * MAX(fabs(iehat), fabs(*(ckt->CKTstate0 + inst->NBJTie))) + ckt->CKTabstol)) { /* * bypassing.... */ vbe = *(ckt->CKTstate0 + inst->NBJTvbe); vce = *(ckt->CKTstate0 + inst->NBJTvce); ic = *(ckt->CKTstate0 + inst->NBJTic); ie = *(ckt->CKTstate0 + inst->NBJTie); dIeDVce = *(ckt->CKTstate0 + inst->NBJTdIeDVce); dIeDVbe = *(ckt->CKTstate0 + inst->NBJTdIeDVbe); dIcDVce = *(ckt->CKTstate0 + inst->NBJTdIcDVce); dIcDVbe = *(ckt->CKTstate0 + inst->NBJTdIcDVbe); goto load; } #endif /* NOBYPASS */ /* * limit nonlinear branch voltages */ icheck1 = 1; vbe = inst->NBJTtype * limitVbe(inst->NBJTtype * vbe, inst->NBJTtype * *(ckt->CKTstate0 + inst->NBJTvbe), &icheck); /* vbc = vbe - vce; vbc = inst->NBJTtype * limitVbe(inst->NBJTtype * vbc, inst->NBJTtype * (*(ckt->CKTstate0 + inst->NBJTvbe) - *(ckt->CKTstate0 + inst->NBJTvce)), &icheck1); vce = vbe - vbc; */ vce = inst->NBJTtype * limitVce(inst->NBJTtype * vce, inst->NBJTtype * *(ckt->CKTstate0 + inst->NBJTvce), &icheck1); if (icheck1 == 1) icheck = 1; delVbe = vbe - *(ckt->CKTstate0 + inst->NBJTvbe); delVce = vce - *(ckt->CKTstate0 + inst->NBJTvce); } if (doInitSolve) { if (ONEdcDebug) { printVoltages(stdout, model->NBJTmodName, inst->NBJTname, deviceType, 2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); } startTime2 = SPfrontEnd->IFseconds(); ONEequilSolve(pDevice); totalTime2 = SPfrontEnd->IFseconds() - startTime2; pDevice->pStats->totalTime[STAT_SETUP] += totalTime2; pDevice->pStats->totalTime[STAT_DC] -= totalTime2; ONEbiasSolve(pDevice, MaxIterations, FALSE, NULL); *(ckt->CKTstate0 + inst->NBJTvbe) = 0.0; *(ckt->CKTstate0 + inst->NBJTvce) = 0.0; if (initStateName != NULL) { if (ONEreadState(pDevice, initStateName, 2, &vce, &vbe ) < 0) { fprintf(stderr, "NBJTload: trouble reading state-file %s\n", initStateName); } else { NBJTsetBCs(pDevice, vce, vbe); delVce = delVbe = 0.0; } } } /* * determine dc current and derivatives using the numerical routines */ if (ckt->CKTmode & (MODEDCOP | MODETRANOP | MODEDCTRANCURVE | MODEINITSMSIG)) { numDevNonCon = 0; inst->NBJTc11 = inst->NBJTy11r = inst->NBJTy11i = 0.0; inst->NBJTc12 = inst->NBJTy12r = inst->NBJTy12i = 0.0; inst->NBJTc21 = inst->NBJTy21r = inst->NBJTy21i = 0.0; inst->NBJTc22 = inst->NBJTy22r = inst->NBJTy22i = 0.0; inst->NBJTsmSigAvail = FALSE; devNonCon: NBJTproject(pDevice, delVce, delVbe, vbe); if (ONEdcDebug) { printVoltages(stdout, model->NBJTmodName, inst->NBJTname, deviceType, 2, vce, delVce, vbe, delVbe, 0.0, 0.0); } ONEbiasSolve(pDevice, MaxIterations, FALSE, model->NBJTpInfo); devConverged = pDevice->converged; if (devConverged && finite(pDevice->rhsNorm)) { /* compute the currents */ NBJTcurrent(pDevice, FALSE, NULL, &ie, &ic); NBJTconductance(pDevice, FALSE, NULL, &dIeDVce, &dIcDVce, &dIeDVbe, &dIcDVbe); /* * Add Gmin terms to everything in case we are operating at * abnormally low current levels */ ie += ckt->CKTgmin * (vce + vbe); dIeDVce += ckt->CKTgmin; dIeDVbe += ckt->CKTgmin; ic += ckt->CKTgmin * (2.0 * vce - vbe); dIcDVce += 2.0 * ckt->CKTgmin; dIcDVbe -= ckt->CKTgmin; } else { /* reduce the voltage step until converged */ /* restore the boundary potential to previous value */ NBJTsetBCs(pDevice, vce - delVce, vbe - delVbe); ONEstoreInitialGuess(pDevice); ONEresetJacobian(pDevice); delVbe *= 0.5; delVce *= 0.5; vbe = delVbe + *(ckt->CKTstate0 + inst->NBJTvbe); vce = delVce + *(ckt->CKTstate0 + inst->NBJTvce); numDevNonCon++; icheck = 1; if (numDevNonCon > 10) { printVoltages(stderr, model->NBJTmodName, inst->NBJTname, deviceType, 2, vce, delVce, vbe, delVbe, 0.0, 0.0); fprintf(stderr, "*** Non-convergence during load ***\n"); totalTime += SPfrontEnd->IFseconds() - startTime; pDevice->pStats->totalTime[STAT_DC] += totalTime; ckt->CKTtroubleElt = (GENinstance *) inst; return (E_BADMATRIX); } else { goto devNonCon; } } } if ((ckt->CKTmode & (MODETRAN | MODEAC)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) || (ckt->CKTmode & MODEINITSMSIG)) { /* * store small-signal parameters */ if ((!(ckt->CKTmode & MODETRANOP)) || (!(ckt->CKTmode & MODEUIC))) { if (ckt->CKTmode & MODEINITSMSIG) { totalTime += SPfrontEnd->IFseconds() - startTime; pDevice->pStats->totalTime[STAT_DC] += totalTime; startTime2 = SPfrontEnd->IFseconds(); NBJTinitSmSig(inst); pDevice->pStats->totalTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime2; continue; } else { inst->NBJTsmSigAvail = FALSE; } /* * transient analysis */ if (ckt->CKTmode & MODEINITPRED) { NBJTsetBCs(pDevice, vce, vbe); ONEstoreInitialGuess(pDevice); } else { NBJTupdate(pDevice, delVce, delVbe, vbe, TRUE); } if (ONEtranDebug) { printVoltages(stdout, model->NBJTmodName, inst->NBJTname, deviceType, 2, vce, delVce, vbe, delVbe, 0.0, 0.0); } ONEbiasSolve(pDevice, 0, TRUE, model->NBJTpInfo); if (!finite(pDevice->rhsNorm)) { /* Timestep took us to never-never land. */ totalTime += SPfrontEnd->IFseconds() - startTime; pDevice->pStats->totalTime[STAT_TRAN] += totalTime; ckt->CKTtroubleElt = (GENinstance *) inst; return (E_BADMATRIX); } devConverged = ONEdeviceConverged(pDevice); pDevice->converged = devConverged; /* compute the currents */ NBJTcurrent(pDevice, TRUE, model->NBJTpInfo->intCoeff, &ie, &ic); NBJTconductance(pDevice, TRUE, model->NBJTpInfo->intCoeff, &dIeDVce, &dIcDVce, &dIeDVbe, &dIcDVbe); /* * Add Gmin terms to everything in case we are operating at * abnormally low current levels */ ie += ckt->CKTgmin * (vce + vbe); dIeDVce += ckt->CKTgmin; dIeDVbe += ckt->CKTgmin; ic += ckt->CKTgmin * (2.0 * vce - vbe); dIcDVce += 2.0 * ckt->CKTgmin; dIcDVbe -= ckt->CKTgmin; } } /* * check convergence */ if ((!(ckt->CKTmode & MODEINITFIX)) || (!(inst->NBJToff))) { if (icheck == 1 || !devConverged) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) inst; } else { tol = ckt->CKTreltol * MAX(fabs(ichat), fabs(ic)) + ckt->CKTabstol; if (fabs(ichat - ic) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) inst; } else { tol = ckt->CKTreltol * MAX(fabs(iehat), fabs(ie)) + ckt->CKTabstol; if (fabs(iehat - ie) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) inst; } } } } *(ckt->CKTstate0 + inst->NBJTvbe) = vbe; *(ckt->CKTstate0 + inst->NBJTvce) = vce; *(ckt->CKTstate0 + inst->NBJTic) = ic; *(ckt->CKTstate0 + inst->NBJTie) = ie; *(ckt->CKTstate0 + inst->NBJTdIeDVce) = dIeDVce; *(ckt->CKTstate0 + inst->NBJTdIeDVbe) = dIeDVbe; *(ckt->CKTstate0 + inst->NBJTdIcDVce) = dIcDVce; *(ckt->CKTstate0 + inst->NBJTdIcDVbe) = dIcDVbe; load: /* * load current excitation vector */ iceq = ic - dIcDVce * vce - dIcDVbe * vbe; ieeq = ie - dIeDVce * vce - dIeDVbe * vbe; *(ckt->CKTrhs + inst->NBJTcolNode) -= iceq; *(ckt->CKTrhs + inst->NBJTbaseNode) -= ieeq - iceq; *(ckt->CKTrhs + inst->NBJTemitNode) += ieeq; /* * load y matrix */ *(inst->NBJTcolColPtr) += dIcDVce; *(inst->NBJTcolBasePtr) += dIcDVbe; *(inst->NBJTcolEmitPtr) -= dIcDVbe + dIcDVce; *(inst->NBJTbaseColPtr) -= dIcDVce - dIeDVce; *(inst->NBJTbaseBasePtr) -= dIcDVbe - dIeDVbe; *(inst->NBJTbaseEmitPtr) += dIcDVbe + dIcDVce - dIeDVbe - dIeDVce; *(inst->NBJTemitColPtr) -= dIeDVce; *(inst->NBJTemitBasePtr) -= dIeDVbe; *(inst->NBJTemitEmitPtr) += dIeDVbe + dIeDVce; totalTime += SPfrontEnd->IFseconds() - startTime; if (ckt->CKTmode & MODETRAN) { pDevice->pStats->totalTime[STAT_TRAN] += totalTime; } else { pDevice->pStats->totalTime[STAT_DC] += totalTime; } } } return (OK); } int NBJTinitSmSig(NBJTinstance *inst) { SPcomplex yIeVce, yIeVbe; SPcomplex yIcVce, yIcVbe; double omega = NBJTmodPtr(inst)->NBJTmethods->METHomega; AcAnalysisMethod = SOR_ONLY; (void) NBJTadmittance(inst->NBJTpDevice, omega, &yIeVce, &yIcVce, &yIeVbe, &yIcVbe); inst->NBJTc11 = yIcVce.imag / omega; inst->NBJTc12 = yIcVbe.imag / omega; inst->NBJTc21 = (yIeVce.imag - yIcVce.imag) / omega; inst->NBJTc22 = (yIeVbe.imag - yIcVbe.imag) / omega; inst->NBJTy11r = yIcVce.real; inst->NBJTy11i = yIcVce.imag; inst->NBJTy12r = yIcVbe.real; inst->NBJTy12i = yIcVbe.imag; inst->NBJTy21r = yIeVce.real - yIcVce.real; inst->NBJTy21i = yIeVce.imag - yIcVce.imag; inst->NBJTy22r = yIeVbe.real - yIcVbe.real; inst->NBJTy22i = yIeVbe.imag - yIcVbe.imag; inst->NBJTsmSigAvail = TRUE; return (OK); } tmpk8ny_4pz/src/spicelib/devices/nbjt/nbjtdefs.h0000644000175000017500000001257013546075722022075 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors: 1987 Karti Mayaram, 1991 David Gates **********/ #ifndef NBJT_H #define NBJT_H /* data structures used to describe 1D Numerical BJTs */ /* circuit level includes */ #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" /* device level includes */ #include "ngspice/onemesh.h" #include "ngspice/onedev.h" #include "ngspice/profile.h" #include "ngspice/numglobs.h" #include "ngspice/carddefs.h" /* information needed per instance */ typedef struct sNBJTinstance { struct GENinstance gen; #define NBJTmodPtr(inst) ((struct sNBJTmodel *)((inst)->gen.GENmodPtr)) #define NBJTnextInstance(inst) ((struct sNBJTinstance *)((inst)->gen.GENnextInstance)) #define NBJTname gen.GENname #define NBJTstate gen.GENstate #define NBJTvbe NBJTstate #define NBJTvce NBJTstate+1 #define NBJTic NBJTstate+2 #define NBJTie NBJTstate+3 #define NBJTdIeDVce NBJTstate+4 #define NBJTdIeDVbe NBJTstate+5 #define NBJTdIcDVce NBJTstate+6 #define NBJTdIcDVbe NBJTstate+7 #define NBJTnumStates 8 const int NBJTcolNode; /* number of collector node of bjt */ const int NBJTbaseNode; /* number of base node of bjt */ const int NBJTemitNode; /* number of emitter node of bjt */ ONEdevice *NBJTpDevice; GLOBvalues NBJTglobals; /* Temp.-Dep. Global Parameters */ int NBJTtype; double NBJTarea; /* area factor of the BJT */ double NBJTtemp; /* Instance Temperature */ double NBJTc11; /* small-signal capacitance */ double NBJTy11r; /* small-signal admittance, real part */ double NBJTy11i; /* small-signal admittance, imag part */ double NBJTc12; /* small-signal capacitance */ double NBJTy12r; /* small-signal admittance, real part */ double NBJTy12i; /* small-signal admittance, imag part */ double NBJTc21; /* small-signal capacitance */ double NBJTy21r; /* small-signal admittance, real part */ double NBJTy21i; /* small-signal admittance, imag part */ double NBJTc22; /* small-signal capacitance */ double NBJTy22r; /* small-signal admittance, real part */ double NBJTy22i; /* small-signal admittance, imag part */ int NBJTprint; char *NBJTicFile; /* Name of initial condition file */ double *NBJTcolColPtr; /* pointer to sparse matrix at * (collector,collector) */ double *NBJTbaseBasePtr; /* pointer to sparse matrix at (base,base) */ double *NBJTemitEmitPtr; /* pointer to sparse matrix at * (emitter,emitter) */ double *NBJTcolBasePtr; /* pointer to sparse matrix at * (collector,base) */ double *NBJTcolEmitPtr; /* pointer to sparse matrix at * (collector,emitter) */ double *NBJTbaseColPtr; /* pointer to sparse matrix at * (base,collector) */ double *NBJTbaseEmitPtr; /* pointer to sparse matrix at (base,emitter) */ double *NBJTemitColPtr; /* pointer to sparse matrix at * (emitter,collector) */ double *NBJTemitBasePtr; /* pointer to sparse matrix at (emitter,base) */ int NBJToff; /* 'off' flag for bjt */ unsigned NBJTsmSigAvail:1; /* flag to indicate small-signal done */ unsigned NBJTareaGiven:1; /* flag to indicate area was specified */ unsigned NBJTicFileGiven:1; /* flag to indicate init. cond. file given */ unsigned NBJTprintGiven:1; /* flag to indicate if print was given */ unsigned NBJTtempGiven:1; /* flag to indicate if temp was given */ } NBJTinstance; /* per model data */ typedef struct sNBJTmodel { /* model structure for a bjt */ struct GENmodel gen; #define NBJTmodType gen.GENmodType #define NBJTnextModel(inst) ((struct sNBJTmodel *)((inst)->gen.GENnextModel)) #define NBJTinstances(inst) ((NBJTinstance *)((inst)->gen.GENinstances)) #define NBJTmodName gen.GENmodName MESHcard *NBJTxMeshes; /* list of xmesh cards */ MESHcard *NBJTyMeshes; /* list of ymesh cards */ DOMNcard *NBJTdomains; /* list of domain cards */ BDRYcard *NBJTboundaries; /* list of boundary cards */ DOPcard *NBJTdopings; /* list of doping cards */ ELCTcard *NBJTelectrodes; /* list of electrode cards */ CONTcard *NBJTcontacts; /* list of contact cards */ MODLcard *NBJTmodels; /* list of model cards */ MATLcard *NBJTmaterials; /* list of material cards */ MOBcard *NBJTmobility; /* list of mobility cards */ METHcard *NBJTmethods; /* list of method cards */ OPTNcard *NBJToptions; /* list of option cards */ OUTPcard *NBJToutputs; /* list of output cards */ ONEtranInfo *NBJTpInfo; /* transient analysis information */ DOPprofile *NBJTprofiles; /* expanded list of doping profiles */ DOPtable *NBJTdopTables; /* list of tables used by profiles */ ONEmaterial *NBJTmatlInfo; /* list of material info structures */ } NBJTmodel; /* type of BJT */ #define NPN 1 #define PNP -1 /* device parameters */ enum { NBJT_AREA = 1, NBJT_OFF, NBJT_IC_FILE, NBJT_PRINT, NBJT_TEMP, }; enum { NBJT_G11 = 8, NBJT_C11, NBJT_Y11, NBJT_G12, NBJT_C12, NBJT_Y12, NBJT_G13, NBJT_C13, NBJT_Y13, NBJT_G21, NBJT_C21, NBJT_Y21, NBJT_G22, NBJT_C22, NBJT_Y22, NBJT_G23, NBJT_C23, NBJT_Y23, NBJT_G31, NBJT_C31, NBJT_Y31, NBJT_G32, NBJT_C32, NBJT_Y32, NBJT_G33, NBJT_C33, NBJT_Y33, }; /* model parameters */ /* NOTE: all true model parameters have been moved to IFcardInfo structures */ #define NBJT_MOD_NBJT 101 /* device questions */ /* model questions */ #include "nbjtext.h" #endif /* NBJT_H */ tmpk8ny_4pz/src/spicelib/devices/nbjt/nbjttemp.c0000644000175000017500000001141513546075722022111 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1992 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "nbjtdefs.h" #include "ngspice/numenum.h" #include "ngspice/carddefs.h" #include "ngspice/sperror.h" #include "../../../ciderlib/oned/onedext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" extern int ONEdcDebug; int NBJTtemp(GENmodel *inModel, CKTcircuit *ckt) /* * perform the temperature update to the bjt */ { register NBJTmodel *model = (NBJTmodel *) inModel; register NBJTinstance *inst; METHcard *methods; MODLcard *models; OPTNcard *options; OUTPcard *outputs; ONEmaterial *pM, *pMaterial, *pNextMaterial; ONEdevice *pDevice; double startTime; int baseIndex, indexBE, indexBC; /* loop through all the bjt models */ for (; model != NULL; model = NBJTnextModel(model)) { methods = model->NBJTmethods; models = model->NBJTmodels; options = model->NBJToptions; outputs = model->NBJToutputs; if (!options->OPTNtnomGiven) { options->OPTNtnom = ckt->CKTnomTemp; } for (pM = model->NBJTmatlInfo; pM != NULL; pM = pM->next) { pM->tnom = options->OPTNtnom; } BandGapNarrowing = models->MODLbandGapNarrowing; ConcDepLifetime = models->MODLconcDepLifetime; TempDepMobility = models->MODLtempDepMobility; ConcDepMobility = models->MODLconcDepMobility; for (inst = NBJTinstances(model); inst != NULL; inst = NBJTnextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); if (!inst->NBJTtempGiven) { inst->NBJTtemp = ckt->CKTtemp; } if (!inst->NBJTareaGiven || inst->NBJTarea <= 0.0) { inst->NBJTarea = 1.0; } inst->NBJTpDevice->area = inst->NBJTarea * options->OPTNdefa; /* Compute and save globals for this instance. */ GLOBcomputeGlobals(&(inst->NBJTglobals), inst->NBJTtemp); /* Calculate new sets of material parameters. */ pM = model->NBJTmatlInfo; pMaterial = inst->NBJTpDevice->pMaterials; for (; pM != NULL; pM = pM->next, pMaterial = pMaterial->next) { /* Copy the original values, then fix the incorrect pointer. */ pNextMaterial = pMaterial->next; memcpy(pMaterial, pM, sizeof(ONEmaterial)); pMaterial->next = pNextMaterial; /* Now do the temperature dependence. */ MATLtempDep(pMaterial, pMaterial->tnom); if (outputs->OUTPmaterial) { printMaterialInfo(pMaterial); } } /* Assign doping to the mesh. */ ONEsetDoping(inst->NBJTpDevice, model->NBJTprofiles, model->NBJTdopTables); /* Assign other physical parameters to the mesh. */ ONEsetup(inst->NBJTpDevice); /* Assign boundary condition parameters. */ ONEsetBCparams(inst->NBJTpDevice, model->NBJTboundaries, model->NBJTcontacts); /* Normalize everything. */ ONEnormalize(inst->NBJTpDevice); /* Find the device's type. */ if (inst->NBJTpDevice->elemArray[1]->pNodes[0]->netConc < 0.0) { inst->NBJTtype = PNP; } else { inst->NBJTtype = NPN; } /* Find the location of the base index. */ pDevice = inst->NBJTpDevice; baseIndex = pDevice->baseIndex; if (baseIndex <= 0) { if (options->OPTNbaseDepthGiven) { printf("Warning: base contact not on node -- adjusting contact\n"); } NBJTjunctions(pDevice, &indexBE, &indexBC); pDevice->baseIndex = (indexBE + indexBC) / 2; } if (inst->NBJTtype == PNP) { pDevice->elemArray[pDevice->baseIndex]->pNodes[0]->baseType = N_TYPE; } else if (inst->NBJTtype == NPN) { pDevice->elemArray[pDevice->baseIndex]->pNodes[0]->baseType = P_TYPE; } else { printf("NBJTtemp: unknown BJT type \n"); } if (baseIndex <= 0 && !options->OPTNbaseDepthGiven) { ONEdcDebug = FALSE; ONEequilSolve(pDevice); adjustBaseContact(pDevice, indexBE, indexBC); } printf("BJT: base contact depth is %g um at node %d\n", pDevice->elemArray[pDevice->baseIndex]->pNodes[0]->x * 1e4, pDevice->baseIndex); /* Find, normalize and convert to reciprocal-form the base length. */ pDevice->baseLength = options->OPTNbaseLength; if (pDevice->baseLength > 0.0) { pDevice->baseLength /= LNorm; pDevice->baseLength = 1.0 / pDevice->baseLength; } else if (pDevice->elemArray[pDevice->baseIndex]->evalNodes[0]) { pDevice->baseLength = pDevice->elemArray[pDevice->baseIndex]->rDx; } else { pDevice->baseLength = pDevice->elemArray[pDevice->baseIndex - 1]->rDx; } /* Adjust reciprocal base length to account for base area factor */ pDevice->baseLength *= options->OPTNbaseArea; inst->NBJTpDevice->pStats->totalTime[STAT_SETUP] += SPfrontEnd->IFseconds() - startTime; } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/nbjt/nbjt.c0000644000175000017500000000504313546075722021223 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "nbjtdefs.h" #include "ngspice/suffix.h" /* * This file defines the Numerical BJT data structures that are available to * the next level(s) up the calling hierarchy */ IFparm NBJTpTable[] = { /* parameters */ IP("off", NBJT_OFF, IF_FLAG, "Device initially off"), IP("ic.file", NBJT_IC_FILE, IF_STRING, "Initial condition file"), IOP("area", NBJT_AREA, IF_REAL, "Area factor"), IP("save", NBJT_PRINT, IF_INTEGER, "Save Solutions"), IPR("print", NBJT_PRINT, IF_INTEGER, "Print Solutions"), OP("g11", NBJT_G11, IF_REAL, "Conductance"), OP("c11", NBJT_C11, IF_REAL, "Capacitance"), OP("y11", NBJT_Y11, IF_COMPLEX, "Admittance"), OP("g12", NBJT_G12, IF_REAL, "Conductance"), OP("c12", NBJT_C12, IF_REAL, "Capacitance"), OP("y12", NBJT_Y12, IF_COMPLEX, "Admittance"), OPU("g13", NBJT_G13, IF_REAL, "Conductance"), OPU("c13", NBJT_C13, IF_REAL, "Capacitance"), OPU("y13", NBJT_Y13, IF_COMPLEX, "Admittance"), OP("g21", NBJT_G21, IF_REAL, "Conductance"), OP("c21", NBJT_C21, IF_REAL, "Capacitance"), OP("y21", NBJT_Y21, IF_COMPLEX, "Admittance"), OP("g22", NBJT_G22, IF_REAL, "Conductance"), OP("c22", NBJT_C22, IF_REAL, "Capacitance"), OP("y22", NBJT_Y22, IF_COMPLEX, "Admittance"), OPU("g23", NBJT_G23, IF_REAL, "Conductance"), OPU("c23", NBJT_C23, IF_REAL, "Capacitance"), OPU("y23", NBJT_Y23, IF_COMPLEX, "Admittance"), OPU("g31", NBJT_G31, IF_REAL, "Conductance"), OPU("c31", NBJT_C31, IF_REAL, "Capacitance"), OPU("y31", NBJT_Y31, IF_COMPLEX, "Admittance"), OPU("g32", NBJT_G32, IF_REAL, "Conductance"), OPU("c32", NBJT_C32, IF_REAL, "Capacitance"), OPU("y32", NBJT_Y32, IF_COMPLEX, "Admittance"), OPU("g33", NBJT_G33, IF_REAL, "Conductance"), OPU("c33", NBJT_C33, IF_REAL, "Capacitance"), OPU("y33", NBJT_Y33, IF_COMPLEX, "Admittance"), IOP("temp", NBJT_TEMP, IF_REAL, "Instance Temperature") }; IFparm NBJTmPTable[] = { /* model parameters */ /* numerical-device models no longer have parameters */ /* one is left behind to keep the table from being empty */ IP("nbjt", NBJT_MOD_NBJT, IF_FLAG, "Numerical BJT Model") }; char *NBJTnames[] = { "Collector", "Base", "Emitter", "Substrate" }; int NBJTnSize = NUMELEMS(NBJTnames); int NBJTpTSize = NUMELEMS(NBJTpTable); int NBJTmPTSize = NUMELEMS(NBJTmPTable); int NBJTiSize = sizeof(NBJTinstance); int NBJTmSize = sizeof(NBJTmodel); tmpk8ny_4pz/src/spicelib/devices/nbjt/nbjtask.c0000644000175000017500000001352013546075722021721 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "nbjtdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* Check out this one */ extern int NBJTinitSmSig(NBJTinstance *); /* ARGSUSED */ int NBJTask(CKTcircuit *ckt, GENinstance *inInst, int which, IFvalue *value, IFvalue *select) { NBJTinstance *inst = (NBJTinstance *) inInst; NG_IGNORE(select); switch (which) { case NBJT_AREA: value->rValue = inst->NBJTarea; return (OK); case NBJT_TEMP: value->rValue = inst->NBJTtemp - CONSTCtoK; return (OK); case NBJT_G11: value->rValue = *(ckt->CKTstate0 + inst->NBJTdIcDVce); return (OK); case NBJT_G12: value->rValue = *(ckt->CKTstate0 + inst->NBJTdIcDVbe); return (OK); case NBJT_G13: value->rValue = -*(ckt->CKTstate0 + inst->NBJTdIcDVce) - *(ckt->CKTstate0 + inst->NBJTdIcDVbe); return (OK); case NBJT_G21: value->rValue = *(ckt->CKTstate0 + inst->NBJTdIeDVce) - *(ckt->CKTstate0 + inst->NBJTdIcDVce); return (OK); case NBJT_G22: value->rValue = *(ckt->CKTstate0 + inst->NBJTdIeDVbe) - *(ckt->CKTstate0 + inst->NBJTdIcDVbe); return (OK); case NBJT_G23: value->rValue = -*(ckt->CKTstate0 + inst->NBJTdIeDVce) + *(ckt->CKTstate0 + inst->NBJTdIcDVce) /* XXX there was a ;*/ -*(ckt->CKTstate0 + inst->NBJTdIeDVbe) + *(ckt->CKTstate0 + inst->NBJTdIcDVbe); return (OK); case NBJT_G31: value->rValue = -*(ckt->CKTstate0 + inst->NBJTdIeDVce); return (OK); case NBJT_G32: value->rValue = -*(ckt->CKTstate0 + inst->NBJTdIeDVbe); return (OK); case NBJT_G33: value->rValue = *(ckt->CKTstate0 + inst->NBJTdIeDVce) + *(ckt->CKTstate0 + inst->NBJTdIeDVbe); return (OK); case NBJT_C11: if (!inst->NBJTsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJTinitSmSig(inst); } value->rValue = inst->NBJTc11; return (OK); case NBJT_C12: if (!inst->NBJTsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJTinitSmSig(inst); } value->rValue = inst->NBJTc12; return (OK); case NBJT_C13: if (!inst->NBJTsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJTinitSmSig(inst); } value->rValue = -inst->NBJTc11 - inst->NBJTc12; return (OK); case NBJT_C21: if (!inst->NBJTsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJTinitSmSig(inst); } value->rValue = inst->NBJTc21; return (OK); case NBJT_C22: if (!inst->NBJTsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJTinitSmSig(inst); } value->rValue = inst->NBJTc22; return (OK); case NBJT_C23: if (!inst->NBJTsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJTinitSmSig(inst); } value->rValue = -inst->NBJTc21 - inst->NBJTc22; return (OK); case NBJT_C31: if (!inst->NBJTsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJTinitSmSig(inst); } value->rValue = -inst->NBJTc11 - inst->NBJTc21; return (OK); case NBJT_C32: if (!inst->NBJTsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJTinitSmSig(inst); } value->rValue = -inst->NBJTc12 - inst->NBJTc22; return (OK); case NBJT_C33: if (!inst->NBJTsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJTinitSmSig(inst); } value->rValue = inst->NBJTc11 + inst->NBJTc21 + inst->NBJTc12 + inst->NBJTc22; return (OK); case NBJT_Y11: if (!inst->NBJTsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJTinitSmSig(inst); } value->cValue.real = inst->NBJTy11r; value->cValue.imag = inst->NBJTy11i; return (OK); case NBJT_Y12: if (!inst->NBJTsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJTinitSmSig(inst); } value->cValue.real = inst->NBJTy12r; value->cValue.imag = inst->NBJTy12i; return (OK); case NBJT_Y13: if (!inst->NBJTsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJTinitSmSig(inst); } value->cValue.real = -inst->NBJTy11r - inst->NBJTy12r; value->cValue.imag = -inst->NBJTy11i - inst->NBJTy12i; return (OK); case NBJT_Y21: if (!inst->NBJTsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJTinitSmSig(inst); } value->cValue.real = inst->NBJTy21r; value->cValue.imag = inst->NBJTy21i; return (OK); case NBJT_Y22: if (!inst->NBJTsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJTinitSmSig(inst); } value->cValue.real = inst->NBJTy22r; value->cValue.imag = inst->NBJTy22i; return (OK); case NBJT_Y23: if (!inst->NBJTsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJTinitSmSig(inst); } value->cValue.real = -inst->NBJTy21r - inst->NBJTy22r; value->cValue.imag = -inst->NBJTy21i - inst->NBJTy22i; return (OK); case NBJT_Y31: if (!inst->NBJTsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJTinitSmSig(inst); } value->cValue.real = -inst->NBJTy11r - inst->NBJTy21r; value->cValue.imag = -inst->NBJTy11i - inst->NBJTy21i; return (OK); case NBJT_Y32: if (!inst->NBJTsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJTinitSmSig(inst); } value->cValue.real = -inst->NBJTy12r - inst->NBJTy22r; value->cValue.imag = -inst->NBJTy12i - inst->NBJTy22i; return (OK); case NBJT_Y33: if (!inst->NBJTsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJTinitSmSig(inst); } value->cValue.real = inst->NBJTy11r + inst->NBJTy21r + inst->NBJTy12r + inst->NBJTy22r; value->cValue.imag = inst->NBJTy11i + inst->NBJTy21i + inst->NBJTy12i + inst->NBJTy22i; return (OK); default: return (E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/nbjt/nbjtacld.c0000644000175000017500000000716213546075722022053 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * Function to load the COMPLEX circuit matrix using the small signal * parameters saved during a previous DC operating point analysis. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "nbjtdefs.h" #include "ngspice/sperror.h" #include "ngspice/complex.h" #include "../../../ciderlib/oned/onedext.h" #include "ngspice/cidersupt.h" #include "ngspice/numglobs.h" #include "ngspice/suffix.h" /* External Declarations */ extern int ONEacDebug; int NBJTacLoad(GENmodel *inModel, CKTcircuit *ckt) { register NBJTmodel *model = (NBJTmodel *) inModel; register NBJTinstance *inst; SPcomplex yIeVce, yIeVbe; SPcomplex yIcVce, yIcVbe; double startTime; for (; model != NULL; model = NBJTnextModel(model)) { FieldDepMobility = model->NBJTmodels->MODLfieldDepMobility; Srh = model->NBJTmodels->MODLsrh; Auger = model->NBJTmodels->MODLauger; AvalancheGen = model->NBJTmodels->MODLavalancheGen; AcAnalysisMethod = model->NBJTmethods->METHacAnalysisMethod; MobDeriv = model->NBJTmethods->METHmobDeriv; ONEacDebug = model->NBJToutputs->OUTPacDebug; for (inst = NBJTinstances(model); inst != NULL; inst = NBJTnextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); /* Get Temp.-Dep. Global Parameters */ GLOBgetGlobals(&(inst->NBJTglobals)); model->NBJTmethods->METHacAnalysisMethod = NBJTadmittance(inst->NBJTpDevice, ckt->CKTomega, &yIeVce, &yIcVce, &yIeVbe, &yIcVbe); *(inst->NBJTcolColPtr) += yIcVce.real; *(inst->NBJTcolColPtr + 1) += yIcVce.imag; *(inst->NBJTcolBasePtr) += yIcVbe.real; *(inst->NBJTcolBasePtr + 1) += yIcVbe.imag; *(inst->NBJTcolEmitPtr) -= yIcVbe.real + yIcVce.real; *(inst->NBJTcolEmitPtr + 1) -= yIcVbe.imag + yIcVce.imag; *(inst->NBJTbaseColPtr) -= yIcVce.real - yIeVce.real; *(inst->NBJTbaseColPtr + 1) -= yIcVce.imag - yIeVce.imag; *(inst->NBJTbaseBasePtr) -= yIcVbe.real - yIeVbe.real; *(inst->NBJTbaseBasePtr + 1) -= yIcVbe.imag - yIeVbe.imag; *(inst->NBJTbaseEmitPtr) += yIcVbe.real + yIcVce.real - yIeVbe.real - yIeVce.real; *(inst->NBJTbaseEmitPtr + 1) += yIcVbe.imag + yIcVce.imag - yIeVbe.imag - yIeVce.imag; *(inst->NBJTemitColPtr) -= yIeVce.real; *(inst->NBJTemitColPtr + 1) -= yIeVce.imag; *(inst->NBJTemitBasePtr) -= yIeVbe.real; *(inst->NBJTemitBasePtr + 1) -= yIeVbe.imag; *(inst->NBJTemitEmitPtr) += yIeVbe.real + yIeVce.real; *(inst->NBJTemitEmitPtr + 1) += yIeVbe.imag + yIeVce.imag; if (ckt->CKTomega != 0.0) { inst->NBJTc11 = yIcVce.imag / ckt->CKTomega; inst->NBJTc12 = yIcVbe.imag / ckt->CKTomega; inst->NBJTc21 = (yIeVce.imag - yIcVce.imag) / ckt->CKTomega; inst->NBJTc22 = (yIeVbe.imag - yIcVbe.imag) / ckt->CKTomega; } else { inst->NBJTc11 = 0.0; /* XXX What else can be done?! */ inst->NBJTc12 = 0.0; /* XXX What else can be done?! */ inst->NBJTc21 = 0.0; /* XXX What else can be done?! */ inst->NBJTc22 = 0.0; /* XXX What else can be done?! */ } inst->NBJTy11r = yIcVce.real; inst->NBJTy11i = yIcVce.imag; inst->NBJTy12r = yIcVbe.real; inst->NBJTy12i = yIcVbe.imag; inst->NBJTy21r = yIeVce.real - yIcVce.real; inst->NBJTy21i = yIeVce.imag - yIcVce.imag; inst->NBJTy22r = yIeVbe.real - yIcVbe.real; inst->NBJTy22i = yIeVbe.imag - yIcVbe.imag; inst->NBJTsmSigAvail = TRUE; inst->NBJTpDevice->pStats->totalTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/nbjt/nbjtmpar.c0000644000175000017500000000133113546075722022077 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * This routine sets model parameters for NBJTs in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "nbjtdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int NBJTmParam(int param, IFvalue *value, GENmodel *inModel) { NG_IGNORE(value); NG_IGNORE(inModel); switch (param) { case NBJT_MOD_NBJT: /* no action - already know it is a numerical bjt, but this */ /* makes life easier for spice-2 like parsers */ break; default: return (E_BADPARM); } return (OK); } tmpk8ny_4pz/src/spicelib/devices/nbjt/nbjtset.c0000644000175000017500000001720713546075722021744 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "nbjtdefs.h" #include "ngspice/numconst.h" #include "ngspice/numenum.h" #include "ngspice/sperror.h" #include "../../../ciderlib/oned/onedext.h" #include "ngspice/cidersupt.h" #include "ngspice/ciderinp.h" #include "ngspice/suffix.h" #include "ngspice/meshext.h" #define TSCALLOC(var, size, type)\ if (size && (var =(type *)calloc(1, (unsigned)(size)*sizeof(type))) == NULL) {\ return(E_NOMEM);\ } int NBJTsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* * load the diode structure with those pointers needed later for fast matrix * loading */ { register NBJTmodel *model = (NBJTmodel *) inModel; register NBJTinstance *inst; METHcard *methods; MODLcard *models; OPTNcard *options; OUTPcard *outputs; int error; int xMeshSize; ONEdevice *pDevice; ONEcoord *xCoordList = NULL; ONEdomain *domainList = NULL; DOPprofile *profileList = NULL; DOPtable *dopTableList = NULL; ONEmaterial *pM, *pMaterial = NULL, *materialList = NULL; double startTime; /* loop through all the diode models */ for (; model != NULL; model = NBJTnextModel(model)) { if (!model->NBJTpInfo) { TSCALLOC(model->NBJTpInfo, 1, ONEtranInfo); } methods = model->NBJTmethods; if (!methods) { TSCALLOC(methods, 1, METHcard); model->NBJTmethods = methods; } models = model->NBJTmodels; if (!models) { TSCALLOC(models, 1, MODLcard); model->NBJTmodels = models; } options = model->NBJToptions; if (!options) { TSCALLOC(options, 1, OPTNcard); model->NBJToptions = options; } outputs = model->NBJToutputs; if (!outputs) { TSCALLOC(outputs, 1, OUTPcard); model->NBJToutputs = outputs; } if (!methods->METHvoltPredGiven) { methods->METHvoltPred = FALSE; } if (!methods->METHmobDerivGiven) { methods->METHmobDeriv = TRUE; } if (!methods->METHoneCarrierGiven) { methods->METHoneCarrier = FALSE; } if (!methods->METHacAnalysisMethodGiven) { methods->METHacAnalysisMethod = SOR; } if (!methods->METHdabstolGiven) { methods->METHdabstol = DABSTOL1D; } if (!methods->METHdreltolGiven) { methods->METHdreltol = ckt->CKTreltol; } if (!methods->METHitLimGiven) { methods->METHitLim = 20; } if (!methods->METHomegaGiven || methods->METHomega <= 0.0) { methods->METHomega = 2.0 * M_PI /* radians/sec */ ; } if (!options->OPTNdefaGiven || options->OPTNdefa <= 0.0) { options->OPTNdefa = 1.0e4 /* cm^2 */ ; } if (!options->OPTNbaseLengthGiven) { options->OPTNbaseLength = 0.0; } if (!options->OPTNbaseAreaGiven) { options->OPTNbaseArea = 1.0; } if (!options->OPTNdeviceTypeGiven) { options->OPTNdeviceType = OPTN_BIPOLAR; } if (!options->OPTNicFileGiven) { options->OPTNicFile = NULL; options->OPTNunique = FALSE; /* Can't form a unique name. */ } if (!options->OPTNuniqueGiven) { options->OPTNunique = FALSE; } /* Set up the rest of the card lists */ if ((error = MODLsetup(model->NBJTmodels)) != 0) return (error); BandGapNarrowing = models->MODLbandGapNarrowing; ConcDepLifetime = models->MODLconcDepLifetime; TempDepMobility = models->MODLtempDepMobility; ConcDepMobility = models->MODLconcDepMobility; if ((error = OUTPsetup(model->NBJToutputs)) != 0) return (error); if ((error = MATLsetup(model->NBJTmaterials, &materialList)) != 0) return (error); if ((error = MOBsetup(model->NBJTmobility, materialList)) != 0) return (error); if ((error = MESHsetup('x', model->NBJTxMeshes, &xCoordList, &xMeshSize)) != 0) return (error); if ((error = DOMNsetup(model->NBJTdomains, &domainList, xCoordList, NULL, materialList)) != 0) return (error); if ((error = BDRYsetup(model->NBJTboundaries, xCoordList, NULL, domainList)) != 0) return (error); if ((error = CONTsetup(model->NBJTcontacts, NULL)) != 0) return (error); if ((error = DOPsetup(model->NBJTdopings, &profileList, &dopTableList, xCoordList, NULL)) != 0) return (error); model->NBJTmatlInfo = materialList; model->NBJTprofiles = profileList; model->NBJTdopTables = dopTableList; /* loop through all the instances of the model */ for (inst = NBJTinstances(model); inst != NULL; inst = NBJTnextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); if (!inst->NBJTprintGiven) { inst->NBJTprint = 0; } else if (inst->NBJTprint <= 0) { inst->NBJTprint = 1; } if (!inst->NBJTicFileGiven) { if (options->OPTNunique) { inst->NBJTicFile = tprintf("%s.%s", options->OPTNicFile, inst->NBJTname); } else if (options->OPTNicFile != NULL) { inst->NBJTicFile = tprintf("%s", options->OPTNicFile); } else { inst->NBJTicFile = NULL; } } inst->NBJTstate = *states; *states += NBJTnumStates; if (!inst->NBJTpDevice) { /* Assign the mesh info to each instance. */ TSCALLOC(pDevice, 1, ONEdevice); TSCALLOC(pDevice->pStats, 1, ONEstats); pDevice->name = inst->NBJTname; pDevice->solverType = SLV_NONE; pDevice->numNodes = xMeshSize; pDevice->abstol = methods->METHdabstol; pDevice->reltol = methods->METHdreltol; pDevice->rhsImag = NULL; TSCALLOC(pDevice->elemArray, pDevice->numNodes, ONEelem *); /* Create a copy of material data that can change with temperature. */ pDevice->pMaterials = NULL; for (pM = materialList; pM != NULL; pM = pM->next) { if (pDevice->pMaterials == NULL) { TSCALLOC(pMaterial, 1, ONEmaterial); pDevice->pMaterials = pMaterial; } else { TSCALLOC(pMaterial->next, 1, ONEmaterial); pMaterial = pMaterial->next; } /* Copy everything, then fix the incorrect pointer. */ memcpy(pMaterial, pM, sizeof(ONEmaterial)); pMaterial->next = NULL; } /* generate the mesh structure for the device */ ONEbuildMesh(pDevice, xCoordList, domainList, pDevice->pMaterials); if (options->OPTNbaseDepthGiven) { /* The base contact depth has been specified in the input. */ pDevice->baseIndex = MESHlocate(xCoordList, options->OPTNbaseDepth); } else { pDevice->baseIndex = -1; /* Invalid index acts as a flag */ } /* store the device info in the instance */ inst->NBJTpDevice = pDevice; } /* Now update the state pointers. */ ONEgetStatePointers(inst->NBJTpDevice, states); /* Wipe out statistics from previous runs (if any). */ memset(inst->NBJTpDevice->pStats, 0, sizeof(ONEstats)); inst->NBJTpDevice->pStats->totalTime[STAT_SETUP] += SPfrontEnd->IFseconds() - startTime; /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if ((inst->ptr = SMPmakeElt(matrix, inst->first, inst->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(NBJTcolColPtr, NBJTcolNode, NBJTcolNode); TSTALLOC(NBJTbaseBasePtr, NBJTbaseNode, NBJTbaseNode); TSTALLOC(NBJTemitEmitPtr, NBJTemitNode, NBJTemitNode); TSTALLOC(NBJTcolBasePtr, NBJTcolNode, NBJTbaseNode); TSTALLOC(NBJTcolEmitPtr, NBJTcolNode, NBJTemitNode); TSTALLOC(NBJTbaseColPtr, NBJTbaseNode, NBJTcolNode); TSTALLOC(NBJTbaseEmitPtr, NBJTbaseNode, NBJTemitNode); TSTALLOC(NBJTemitColPtr, NBJTemitNode, NBJTcolNode); TSTALLOC(NBJTemitBasePtr, NBJTemitNode, NBJTbaseNode); } /* Clean up lists */ killCoordInfo(xCoordList); killDomainInfo(domainList); } return (OK); } tmpk8ny_4pz/src/spicelib/devices/nbjt/nbjtparm.c0000644000175000017500000000211213546075722022075 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * This routine sets instance parameters for NBJTs in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "nbjtdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int NBJTparam(int param, IFvalue *value, GENinstance *inInst, IFvalue *select) { register NBJTinstance *inst = (NBJTinstance *) inInst; NG_IGNORE(select); switch (param) { case NBJT_AREA: inst->NBJTarea = value->rValue; inst->NBJTareaGiven = TRUE; break; case NBJT_OFF: inst->NBJToff = TRUE; break; case NBJT_IC_FILE: inst->NBJTicFile = value->sValue; inst->NBJTicFileGiven = TRUE; break; case NBJT_PRINT: inst->NBJTprint = value->iValue; inst->NBJTprintGiven = TRUE; break; case NBJT_TEMP: inst->NBJTtemp = value->rValue + CONSTCtoK; inst->NBJTtempGiven = TRUE; break; default: return (E_BADPARM); } return (OK); } tmpk8ny_4pz/src/spicelib/devices/nbjt/nbjtpzld.c0000644000175000017500000000627113546075722022121 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * Function to load the COMPLEX circuit matrix using the small signal * parameters saved during a previous DC operating point analysis. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "nbjtdefs.h" #include "../../../ciderlib/oned/onedext.h" #include "ngspice/cidersupt.h" #include "ngspice/sperror.h" #include "ngspice/complex.h" #include "ngspice/suffix.h" /* External Declarations */ extern int ONEacDebug; int NBJTpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { register NBJTmodel *model = (NBJTmodel *) inModel; register NBJTinstance *inst; SPcomplex yIeVce, yIeVbe; SPcomplex yIcVce, yIcVbe; double startTime; NG_IGNORE(ckt); for (; model != NULL; model = NBJTnextModel(model)) { FieldDepMobility = model->NBJTmodels->MODLfieldDepMobility; Srh = model->NBJTmodels->MODLsrh; Auger = model->NBJTmodels->MODLauger; AvalancheGen = model->NBJTmodels->MODLavalancheGen; AcAnalysisMethod = model->NBJTmethods->METHacAnalysisMethod; MobDeriv = model->NBJTmethods->METHmobDeriv; ONEacDebug = model->NBJToutputs->OUTPacDebug; for (inst = NBJTinstances(model); inst != NULL; inst = NBJTnextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); /* Get Temp.-Dep. Global Parameters */ GLOBgetGlobals(&(inst->NBJTglobals)); NBJTys(inst->NBJTpDevice, s, &yIeVce, &yIcVce, &yIeVbe, &yIcVbe); if (ONEacDebug) { fprintf(stdout, "BJT admittances: %s:%s at s = % .5g, % .5g\n", model->NBJTmodName, inst->NBJTname, s->real, s->imag); fprintf(stdout, "Ycc: % .5g,% .5g\n", yIcVce.real, yIcVce.imag); fprintf(stdout, "Ycb: % .5g,% .5g\n", yIcVbe.real, yIcVbe.imag); fprintf(stdout, "Ybc: % .5g,% .5g\n", yIeVce.real - yIcVce.real, yIeVce.imag - yIcVce.imag); fprintf(stdout, "Ybb: % .5g,% .5g\n", yIeVbe.real - yIcVbe.real, yIeVbe.imag - yIcVbe.imag); } *(inst->NBJTcolColPtr) += yIcVce.real; *(inst->NBJTcolColPtr + 1) += yIcVce.imag; *(inst->NBJTcolBasePtr) += yIcVbe.real; *(inst->NBJTcolBasePtr + 1) += yIcVbe.imag; *(inst->NBJTcolEmitPtr) -= yIcVbe.real + yIcVce.real; *(inst->NBJTcolEmitPtr + 1) -= yIcVbe.imag + yIcVce.imag; *(inst->NBJTbaseColPtr) -= yIcVce.real - yIeVce.real; *(inst->NBJTbaseColPtr + 1) -= yIcVce.imag - yIeVce.imag; *(inst->NBJTbaseBasePtr) -= yIcVbe.real - yIeVbe.real; *(inst->NBJTbaseBasePtr + 1) -= yIcVbe.imag - yIeVbe.imag; *(inst->NBJTbaseEmitPtr) += yIcVbe.real + yIcVce.real - yIeVbe.real - yIeVce.real; *(inst->NBJTbaseEmitPtr + 1) += yIcVbe.imag + yIcVce.imag - yIeVbe.imag - yIeVce.imag; *(inst->NBJTemitColPtr) -= yIeVce.real; *(inst->NBJTemitColPtr + 1) -= yIeVce.imag; *(inst->NBJTemitBasePtr) -= yIeVbe.real; *(inst->NBJTemitBasePtr + 1) -= yIeVbe.imag; *(inst->NBJTemitEmitPtr) += yIeVbe.real + yIeVce.real; *(inst->NBJTemitEmitPtr + 1) += yIeVbe.imag + yIeVce.imag; inst->NBJTpDevice->pStats->totalTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/mos9/0000755000175000017500000000000013546075722020052 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/mos9/mos9ext.h0000644000175000017500000000236313546075722021637 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Alan Gillespie **********/ extern int MOS9acLoad(GENmodel*,CKTcircuit*); extern int MOS9ask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int MOS9convTest(GENmodel *,CKTcircuit *); extern int MOS9delete(GENinstance*); extern int MOS9getic(GENmodel*,CKTcircuit*); extern int MOS9load(GENmodel*,CKTcircuit*); extern int MOS9mAsk(CKTcircuit*,GENmodel*,int,IFvalue*); extern int MOS9mParam(int,IFvalue*,GENmodel*); extern int MOS9param(int,IFvalue*,GENinstance*,IFvalue*); extern int MOS9pzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int MOS9sAcLoad(GENmodel*,CKTcircuit*); extern int MOS9sLoad(GENmodel*,CKTcircuit*); extern void MOS9sPrint(GENmodel*,CKTcircuit*); extern int MOS9sSetup(SENstruct*,GENmodel*); extern int MOS9sUpdate(GENmodel*,CKTcircuit*); extern int MOS9setup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int MOS9unsetup(GENmodel*,CKTcircuit*); extern int MOS9temp(GENmodel*,CKTcircuit*); extern int MOS9trunc(GENmodel*,CKTcircuit*,double*); extern int MOS9disto(int,GENmodel*,CKTcircuit*); extern int MOS9noise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int MOS9dSetup(GENmodel*,CKTcircuit*); tmpk8ny_4pz/src/spicelib/devices/mos9/mos9sprt.c0000644000175000017500000000401613546075722022017 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Alan Gillespie This function is obsolete (was used by an old sensitivity analysis) **********/ /* Pretty print the sensitivity info for all the MOS9 * devices in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mos9defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" void MOS9sPrint(GENmodel *inModel, CKTcircuit *ckt) { MOS9model *model = (MOS9model *)inModel; MOS9instance *here; printf("LEVEL 9 MOSFETS (AG) -----------------\n"); /* loop through all the MOS9 models */ for( ; model != NULL; model = MOS9nextModel(model)) { printf("Model name:%s\n",model->MOS9modName); /* loop through all the instances of the model */ for (here = MOS9instances(model); here != NULL ; here=MOS9nextInstance(here)) { printf(" Instance name:%s\n",here->MOS9name); printf(" Drain, Gate , Source nodes: %s, %s ,%s\n", CKTnodName(ckt,here->MOS9dNode),CKTnodName(ckt,here->MOS9gNode), CKTnodName(ckt,here->MOS9sNode)); printf(" Multiplier: %g ",here->MOS9m); printf(here->MOS9mGiven ? "(specified)\n" : "(default)\n"); printf(" Length: %g ",here->MOS9l); printf(here->MOS9lGiven ? "(specified)\n" : "(default)\n"); printf(" Width: %g ",here->MOS9w); printf(here->MOS9wGiven ? "(specified)\n" : "(default)\n"); if(here->MOS9sens_l == 1){ printf(" MOS9senParmNo:l = %d ",here->MOS9senParmNo); } else{ printf(" MOS9senParmNo:l = 0 "); } if(here->MOS9sens_w == 1){ printf(" w = %d \n",here->MOS9senParmNo + here->MOS9sens_l); } else{ printf(" w = 0 \n"); } } } } tmpk8ny_4pz/src/spicelib/devices/mos9/mos9sacl.c0000644000175000017500000007436313546075722021765 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Alan Gillespie This function is obsolete (was used by an old sensitivity analysis) **********/ /* actually load the current ac sensitivity * information into the array previously provided */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/const.h" #include "mos9defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS9sAcLoad(GENmodel *inModel, CKTcircuit *ckt) { MOS9model *model = (MOS9model *)inModel; MOS9instance *here; int xnrm; int xrev; double A0; double Apert = 0.0; double DELA; double DELAinv; double gdpr0; double gspr0; double gds0; double gbs0; double gbd0; double gm0; double gmbs0; double gdpr; double gspr; double gds; double gbs; double gbd; double gm; double gmbs; double xcgs0; double xcgd0; double xcgb0; double xbd0; double xbs0; double xcgs; double xcgd; double xcgb; double xbd; double xbs; double vbsOp; double vbdOp; double vspr; double vdpr; double vgs; double vgd; double vgb; double vbs; double vbd; double vds; double ivspr; double ivdpr; double ivgs; double ivgd; double ivgb; double ivbs; double ivbd; double ivds; double cspr; double cdpr; double cgs; double cgd; double cgb; double cbs; double cbd; double cds; double cs0; double csprm0; double cd0; double cdprm0; double cg0; double cb0; double cs; double csprm; double cd; double cdprm; double cg; double cb; double icspr; double icdpr; double icgs; double icgd; double icgb; double icbs; double icbd; double icds; double ics0; double icsprm0; double icd0; double icdprm0; double icg0; double icb0; double ics; double icsprm; double icd; double icdprm; double icg; double icb; double DvDp = 0.0; int i; int flag; int error; int iparmno; double arg; double sarg; double sargsw; double SaveState[44]; int save_mode; SENstruct *info; #ifdef SENSDEBUG printf("MOS9senacload\n"); printf("CKTomega = %.5e\n",ckt->CKTomega); #endif /* SENSDEBUG */ info = ckt->CKTsenInfo; info->SENstatus = PERTURBATION; for( ; model != NULL; model = MOS9nextModel(model)) { for(here = MOS9instances(model); here!= NULL; here = MOS9nextInstance(here)) { /* save the unperturbed values in the state vector */ for(i=0; i <= 16; i++) *(SaveState + i) = *(ckt->CKTstate0 + here->MOS9states + i); *(SaveState + 17) = here->MOS9sourceConductance; *(SaveState + 18) = here->MOS9drainConductance; *(SaveState + 19) = here->MOS9cd; *(SaveState + 20) = here->MOS9cbs; *(SaveState + 21) = here->MOS9cbd; *(SaveState + 22) = here->MOS9gmbs; *(SaveState + 23) = here->MOS9gm; *(SaveState + 24) = here->MOS9gds; *(SaveState + 25) = here->MOS9gbd; *(SaveState + 26) = here->MOS9gbs; *(SaveState + 27) = here->MOS9capbd; *(SaveState + 28) = here->MOS9capbs; *(SaveState + 29) = here->MOS9Cbd; *(SaveState + 30) = here->MOS9Cbdsw; *(SaveState + 31) = here->MOS9Cbs; *(SaveState + 32) = here->MOS9Cbssw; *(SaveState + 33) = here->MOS9f2d; *(SaveState + 34) = here->MOS9f3d; *(SaveState + 35) = here->MOS9f4d; *(SaveState + 36) = here->MOS9f2s; *(SaveState + 37) = here->MOS9f3s; *(SaveState + 38) = here->MOS9f4s; *(SaveState + 39) = here->MOS9cgs; *(SaveState + 40) = here->MOS9cgd; *(SaveState + 41) = here->MOS9cgb; *(SaveState + 42) = here->MOS9vdsat; *(SaveState + 43) = here->MOS9von; save_mode = here->MOS9mode; xnrm=1; xrev=0; if (here->MOS9mode < 0) { xnrm=0; xrev=1; } vbsOp = model->MOS9type * ( *(ckt->CKTrhsOp+here->MOS9bNode) - *(ckt->CKTrhsOp+here->MOS9sNodePrime)); vbdOp = model->MOS9type * ( *(ckt->CKTrhsOp+here->MOS9bNode) - *(ckt->CKTrhsOp+here->MOS9dNodePrime)); vspr = *(ckt->CKTrhsOld + here->MOS9sNode) - *(ckt->CKTrhsOld + here->MOS9sNodePrime) ; ivspr = *(ckt->CKTirhsOld + here->MOS9sNode) - *(ckt->CKTirhsOld + here->MOS9sNodePrime) ; vdpr = *(ckt->CKTrhsOld + here->MOS9dNode) - *(ckt->CKTrhsOld + here->MOS9dNodePrime) ; ivdpr = *(ckt->CKTirhsOld + here->MOS9dNode) - *(ckt->CKTirhsOld + here->MOS9dNodePrime) ; vgb = *(ckt->CKTrhsOld + here->MOS9gNode) - *(ckt->CKTrhsOld + here->MOS9bNode) ; ivgb = *(ckt->CKTirhsOld + here->MOS9gNode) - *(ckt->CKTirhsOld + here->MOS9bNode) ; vbs = *(ckt->CKTrhsOld + here->MOS9bNode) - *(ckt->CKTrhsOld + here->MOS9sNodePrime) ; ivbs = *(ckt->CKTirhsOld + here->MOS9bNode) - *(ckt->CKTirhsOld + here->MOS9sNodePrime) ; vbd = *(ckt->CKTrhsOld + here->MOS9bNode) - *(ckt->CKTrhsOld + here->MOS9dNodePrime) ; ivbd = *(ckt->CKTirhsOld + here->MOS9bNode) - *(ckt->CKTirhsOld + here->MOS9dNodePrime) ; vds = vbs - vbd ; ivds = ivbs - ivbd ; vgs = vgb + vbs ; ivgs = ivgb + ivbs ; vgd = vgb + vbd ; ivgd = ivgb + ivbd ; #ifdef SENSDEBUG printf("senacload instance name %s\n",here->MOS9name); printf("gate = %d ,drain = %d, drainprm = %d\n", here->MOS9gNode,here->MOS9dNode,here->MOS9dNodePrime); printf("source = %d , sourceprm = %d ,body = %d, senparmno = %d\n", here->MOS9sNode ,here->MOS9sNodePrime, here->MOS9bNode,here->MOS9senParmNo); printf("\n without perturbation \n"); #endif /* SENSDEBUG */ /* without perturbation */ *(ckt->CKTstate0 + here->MOS9vbs) = vbsOp; *(ckt->CKTstate0 + here->MOS9vbd) = vbdOp; here->MOS9senPertFlag = ON ; if(info->SENacpertflag == 1){ /* store the unperturbed values of small signal parameters */ if((error = MOS9load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS9senCgs) = here->MOS9cgs; *(here->MOS9senCgd) = here->MOS9cgd; *(here->MOS9senCgb) = here->MOS9cgb; *(here->MOS9senCbd) = here->MOS9capbd; *(here->MOS9senCbs) = here->MOS9capbs; *(here->MOS9senGds) = here->MOS9gds; *(here->MOS9senGbs) = here->MOS9gbs; *(here->MOS9senGbd) = here->MOS9gbd; *(here->MOS9senGm) = here->MOS9gm; *(here->MOS9senGmbs) = here->MOS9gmbs; } xcgs0= *(here->MOS9senCgs) * ckt->CKTomega; xcgd0= *(here->MOS9senCgd) * ckt->CKTomega; xcgb0= *(here->MOS9senCgb) * ckt->CKTomega; xbd0= *(here->MOS9senCbd) * ckt->CKTomega; xbs0= *(here->MOS9senCbs) * ckt->CKTomega; gds0= *(here->MOS9senGds); gbs0= *(here->MOS9senGbs); gbd0= *(here->MOS9senGbd); gm0= *(here->MOS9senGm); gmbs0= *(here->MOS9senGmbs); gdpr0 = here->MOS9drainConductance; gspr0 = here->MOS9sourceConductance; cspr = gspr0 * vspr ; icspr = gspr0 * ivspr ; cdpr = gdpr0 * vdpr ; icdpr = gdpr0 * ivdpr ; cgs = ( - xcgs0 * ivgs ); icgs = xcgs0 * vgs ; cgd = ( - xcgd0 * ivgd ); icgd = xcgd0 * vgd ; cgb = ( - xcgb0 * ivgb ); icgb = xcgb0 * vgb ; cbs = ( gbs0 * vbs - xbs0 * ivbs ); icbs = ( xbs0 * vbs + gbs0 * ivbs ); cbd = ( gbd0 * vbd - xbd0 * ivbd ); icbd = ( xbd0 * vbd + gbd0 * ivbd ); cds = ( gds0 * vds + xnrm * (gm0 * vgs + gmbs0 * vbs) - xrev * (gm0 * vgd + gmbs0 * vbd) ); icds = ( gds0 * ivds + xnrm * (gm0 * ivgs + gmbs0 * ivbs) - xrev * (gm0 * ivgd + gmbs0 * ivbd) ); cs0 = cspr; ics0 = icspr; csprm0 = ( -cspr - cgs - cbs - cds ) ; icsprm0 = ( -icspr - icgs - icbs - icds ) ; cd0 = cdpr; icd0 = icdpr; cdprm0 = ( -cdpr - cgd - cbd + cds ) ; icdprm0 = ( -icdpr - icgd - icbd + icds ) ; cg0 = cgs + cgd + cgb ; icg0 = icgs + icgd + icgb ; cb0 = cbs + cbd - cgb ; icb0 = icbs + icbd - icgb ; #ifdef SENSDEBUG printf("gspr0 = %.7e , gdpr0 = %.7e , gds0 = %.7e, gbs0 = %.7e\n", gspr0,gdpr0,gds0,gbs0); printf("gbd0 = %.7e , gm0 = %.7e , gmbs0 = %.7e\n",gbd0,gm0,gmbs0); printf("xcgs0 = %.7e , xcgd0 = %.7e ,", xcgs0,xcgd0); printf("xcgb0 = %.7e, xbd0 = %.7e,xbs0 = %.7e\n" ,xcgb0,xbd0,xbs0); printf("vbs = %.7e , vbd = %.7e , vgb = %.7e\n",vbs,vbd,vgb); printf("ivbs = %.7e , ivbd = %.7e , ivgb = %.7e\n",ivbs,ivbd,ivgb); printf("cbs0 = %.7e , cbd0 = %.7e , cgb0 = %.7e\n",cbs,cbd,cgb); printf("cb0 = %.7e , cg0 = %.7e , cs0 = %.7e\n",cb0,cg0,cs0); printf("csprm0 = %.7e, cd0 = %.7e, cdprm0 = %.7e\n", csprm0,cd0,cdprm0); printf("icb0 = %.7e , icg0 = %.7e , ics0 = %.7e\n",icb0,icg0,ics0); printf("icsprm0 = %.7e, icd0 = %.7e, icdprm0 = %.7e\n", icsprm0,icd0,icdprm0); printf("\nPerturbation of vbs\n"); #endif /* SENSDEBUG */ /* Perturbation of vbs */ flag = 1; A0 = vbsOp; DELA = info->SENpertfac * CONSTvt0 ; DELAinv = 1.0/DELA; if(info->SENacpertflag == 1){ /* store the values of small signal parameters * corresponding to perturbed vbs */ Apert = A0 + DELA; *(ckt->CKTstate0 + here->MOS9vbs) = Apert; *(ckt->CKTstate0 + here->MOS9vbd) = vbdOp; if((error = MOS9load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS9senCgs + 1) = here->MOS9cgs; *(here->MOS9senCgd + 1) = here->MOS9cgd; *(here->MOS9senCgb + 1) = here->MOS9cgb; *(here->MOS9senCbd + 1) = here->MOS9capbd; *(here->MOS9senCbs + 1) = here->MOS9capbs; *(here->MOS9senGds + 1) = here->MOS9gds; *(here->MOS9senGbs + 1) = here->MOS9gbs; *(here->MOS9senGbd + 1) = here->MOS9gbd; *(here->MOS9senGm + 1) = here->MOS9gm; *(here->MOS9senGmbs + 1) = here->MOS9gmbs; *(ckt->CKTstate0 + here->MOS9vbs) = A0; } goto load; pertvbd: /* Perturbation of vbd */ #ifdef SENSDEBUG printf("\nPerturbation of vbd\n"); #endif /* SENSDEBUG */ flag = 2; A0 = vbdOp; DELA = info->SENpertfac * CONSTvt0 + 1e-8; DELAinv = 1.0/DELA; if(info->SENacpertflag == 1){ /* store the values of small signal parameters * corresponding to perturbed vbd */ Apert = A0 + DELA; *(ckt->CKTstate0 + here->MOS9vbs) = vbsOp; *(ckt->CKTstate0 + here->MOS9vbd) = Apert; if((error = MOS9load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS9senCgs + 2) = here->MOS9cgs; *(here->MOS9senCgd + 2) = here->MOS9cgd; *(here->MOS9senCgb + 2) = here->MOS9cgb; *(here->MOS9senCbd + 2) = here->MOS9capbd; *(here->MOS9senCbs + 2) = here->MOS9capbs; *(here->MOS9senGds + 2) = here->MOS9gds; *(here->MOS9senGbs + 2) = here->MOS9gbs; *(here->MOS9senGbd + 2) = here->MOS9gbd; *(here->MOS9senGm + 2) = here->MOS9gm; *(here->MOS9senGmbs + 2) = here->MOS9gmbs; *(ckt->CKTstate0 + here->MOS9vbd) = A0; } goto load; pertvgb: /* Perturbation of vgb */ #ifdef SENSDEBUG printf("\nPerturbation of vgb\n"); #endif /* SENSDEBUG */ flag = 3; A0 = model->MOS9type * (*(ckt->CKTrhsOp + here->MOS9gNode) - *(ckt->CKTrhsOp + here->MOS9bNode)); DELA = info->SENpertfac * A0 + 1e-8; DELAinv = model->MOS9type * 1.0/DELA; if(info->SENacpertflag == 1){ /* store the values of small signal parameters * corresponding to perturbed vgb */ *(ckt->CKTstate0 + here->MOS9vbs) = vbsOp; *(ckt->CKTstate0 + here->MOS9vbd) = vbdOp; *(ckt->CKTrhsOp + here->MOS9bNode) -= DELA; if((error = MOS9load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS9senCgs + 3) = here->MOS9cgs; *(here->MOS9senCgd + 3) = here->MOS9cgd; *(here->MOS9senCgb + 3) = here->MOS9cgb; *(here->MOS9senCbd + 3) = here->MOS9capbd; *(here->MOS9senCbs + 3) = here->MOS9capbs; *(here->MOS9senGds + 3) = here->MOS9gds; *(here->MOS9senGbs + 3) = here->MOS9gbs; *(here->MOS9senGbd + 3) = here->MOS9gbd; *(here->MOS9senGm + 3) = here->MOS9gm; *(here->MOS9senGmbs + 3) = here->MOS9gmbs; *(ckt->CKTrhsOp + here->MOS9bNode) += DELA; } goto load; pertl: /* Perturbation of length */ if(here->MOS9sens_l == 0){ goto pertw; } #ifdef SENSDEBUG printf("\nPerturbation of length\n"); #endif /* SENSDEBUG */ flag = 4; A0 = here->MOS9l; DELA = info->SENpertfac * A0; DELAinv = 1.0/DELA; if(info->SENacpertflag == 1){ /* store the values of small signal parameters * corresponding to perturbed length */ Apert = A0 + DELA; here->MOS9l = Apert; *(ckt->CKTstate0 + here->MOS9vbs) = vbsOp; *(ckt->CKTstate0 + here->MOS9vbd) = vbdOp; if((error = MOS9load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS9senCgs + 4) = here->MOS9cgs; *(here->MOS9senCgd + 4) = here->MOS9cgd; *(here->MOS9senCgb + 4) = here->MOS9cgb; *(here->MOS9senCbd + 4) = here->MOS9capbd; *(here->MOS9senCbs + 4) = here->MOS9capbs; *(here->MOS9senGds + 4) = here->MOS9gds; *(here->MOS9senGbs + 4) = here->MOS9gbs; *(here->MOS9senGbd + 4) = here->MOS9gbd; *(here->MOS9senGm + 4) = here->MOS9gm; *(here->MOS9senGmbs + 4) = here->MOS9gmbs; here->MOS9l = A0; } goto load; pertw: /* Perturbation of width */ if(here->MOS9sens_w == 0) goto next; #ifdef SENSDEBUG printf("\nPerturbation of width\n"); #endif /* SENSDEBUG */ flag = 5; A0 = here->MOS9w; DELA = info->SENpertfac * A0; DELAinv = 1.0/DELA; Apert = A0 + DELA; if(info->SENacpertflag == 1){ /* store the values of small signal parameters * corresponding to perturbed width */ here->MOS9w = Apert; here->MOS9drainArea *= (1 + info->SENpertfac); here->MOS9sourceArea *= (1 + info->SENpertfac); here->MOS9Cbd *= (1 + info->SENpertfac); here->MOS9Cbs *= (1 + info->SENpertfac); if(here->MOS9drainPerimiter){ here->MOS9Cbdsw += here->MOS9Cbdsw * DELA/here->MOS9drainPerimiter; } if(here->MOS9sourcePerimiter){ here->MOS9Cbssw += here->MOS9Cbssw * DELA/here->MOS9sourcePerimiter; } if(vbdOp >= here->MOS9tDepCap){ arg = 1-model->MOS9fwdCapDepCoeff; sarg = exp( (-model->MOS9bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS9bulkJctSideGradingCoeff) * log(arg) ); here->MOS9f2d = here->MOS9Cbd*(1-model->MOS9fwdCapDepCoeff* (1+model->MOS9bulkJctBotGradingCoeff))* sarg/arg + here->MOS9Cbdsw*(1-model->MOS9fwdCapDepCoeff* (1+model->MOS9bulkJctSideGradingCoeff))* sargsw/arg; here->MOS9f3d = here->MOS9Cbd * model->MOS9bulkJctBotGradingCoeff * sarg/arg/ model->MOS9bulkJctPotential + here->MOS9Cbdsw * model->MOS9bulkJctSideGradingCoeff * sargsw/arg / model->MOS9bulkJctPotential; here->MOS9f4d = here->MOS9Cbd*model->MOS9bulkJctPotential* (1-arg*sarg)/ (1-model->MOS9bulkJctBotGradingCoeff) + here->MOS9Cbdsw*model->MOS9bulkJctPotential* (1-arg*sargsw)/ (1-model->MOS9bulkJctSideGradingCoeff) -here->MOS9f3d/2* (here->MOS9tDepCap*here->MOS9tDepCap) -here->MOS9tDepCap * here->MOS9f2d; } if(vbsOp >= here->MOS9tDepCap){ arg = 1-model->MOS9fwdCapDepCoeff; sarg = exp( (-model->MOS9bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS9bulkJctSideGradingCoeff) * log(arg) ); here->MOS9f2s = here->MOS9Cbs*(1-model->MOS9fwdCapDepCoeff* (1+model->MOS9bulkJctBotGradingCoeff))* sarg/arg + here->MOS9Cbssw*(1-model->MOS9fwdCapDepCoeff* (1+model->MOS9bulkJctSideGradingCoeff))* sargsw/arg; here->MOS9f3s = here->MOS9Cbs * model->MOS9bulkJctBotGradingCoeff * sarg/arg/ model->MOS9bulkJctPotential + here->MOS9Cbssw * model->MOS9bulkJctSideGradingCoeff * sargsw/arg / model->MOS9bulkJctPotential; here->MOS9f4s = here->MOS9Cbs*model->MOS9bulkJctPotential* (1-arg*sarg)/ (1-model->MOS9bulkJctBotGradingCoeff) + here->MOS9Cbssw*model->MOS9bulkJctPotential* (1-arg*sargsw)/ (1-model->MOS9bulkJctSideGradingCoeff) -here->MOS9f3s/2* (here->MOS9tBulkPot*here->MOS9tBulkPot) -here->MOS9tBulkPot * here->MOS9f2s; } *(ckt->CKTstate0 + here->MOS9vbs) = vbsOp; *(ckt->CKTstate0 + here->MOS9vbd) = vbdOp; if((error = MOS9load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS9senCgs + 5) = here->MOS9cgs; *(here->MOS9senCgd + 5) = here->MOS9cgd; *(here->MOS9senCgb + 5) = here->MOS9cgb; *(here->MOS9senCbd + 5) = here->MOS9capbd; *(here->MOS9senCbs + 5) = here->MOS9capbs; *(here->MOS9senGds + 5) = here->MOS9gds; *(here->MOS9senGbs + 5) = here->MOS9gbs; *(here->MOS9senGbd + 5) = here->MOS9gbd; *(here->MOS9senGm + 5) = here->MOS9gm; *(here->MOS9senGmbs + 5) = here->MOS9gmbs; here->MOS9w = A0; here->MOS9drainArea /= (1 + info->SENpertfac); here->MOS9sourceArea /= (1 + info->SENpertfac); } load: gds= *(here->MOS9senGds + flag); gbs= *(here->MOS9senGbs + flag); gbd= *(here->MOS9senGbd + flag); gm= *(here->MOS9senGm + flag); gmbs= *(here->MOS9senGmbs + flag); if(flag == 5){ gdpr = here->MOS9drainConductance * Apert/A0; gspr = here->MOS9sourceConductance * Apert/A0; } else{ gdpr = here->MOS9drainConductance; gspr = here->MOS9sourceConductance; } xcgs= *(here->MOS9senCgs + flag) * ckt->CKTomega; xcgd= *(here->MOS9senCgd + flag) * ckt->CKTomega; xcgb= *(here->MOS9senCgb + flag) * ckt->CKTomega; xbd= *(here->MOS9senCbd + flag) * ckt->CKTomega; xbs= *(here->MOS9senCbs + flag) * ckt->CKTomega; #ifdef SENSDEBUG printf("flag = %d \n",flag); printf("gspr = %.7e , gdpr = %.7e , gds = %.7e, gbs = %.7e\n", gspr,gdpr,gds,gbs); printf("gbd = %.7e , gm = %.7e , gmbs = %.7e\n",gbd,gm,gmbs); printf("xcgs = %.7e , xcgd = %.7e , xcgb = %.7e,", xcgs,xcgd,xcgb); printf("xbd = %.7e,xbs = %.7e\n" ,xbd,xbs); #endif /* SENSDEBUG */ cspr = gspr * vspr ; icspr = gspr * ivspr ; cdpr = gdpr * vdpr ; icdpr = gdpr * ivdpr ; cgs = ( - xcgs * ivgs ); icgs = xcgs * vgs ; cgd = ( - xcgd * ivgd ); icgd = xcgd * vgd ; cgb = ( - xcgb * ivgb ); icgb = xcgb * vgb ; cbs = ( gbs * vbs - xbs * ivbs ); icbs = ( xbs * vbs + gbs * ivbs ); cbd = ( gbd * vbd - xbd * ivbd ); icbd = ( xbd * vbd + gbd * ivbd ); cds = ( gds * vds + xnrm * (gm * vgs + gmbs * vbs) - xrev * (gm * vgd + gmbs * vbd) ); icds = ( gds * ivds + xnrm * (gm * ivgs + gmbs * ivbs) - xrev * (gm * ivgd + gmbs * ivbd) ); cs = cspr; ics = icspr; csprm = ( -cspr - cgs - cbs - cds ) ; icsprm = ( -icspr - icgs - icbs - icds ) ; cd = cdpr; icd = icdpr; cdprm = ( -cdpr - cgd - cbd + cds ) ; icdprm = ( -icdpr - icgd - icbd + icds ) ; cg = cgs + cgd + cgb ; icg = icgs + icgd + icgb ; cb = cbs + cbd - cgb ; icb = icbs + icbd - icgb ; #ifdef SENSDEBUG printf("vbs = %.7e , vbd = %.7e , vgb = %.7e\n",vbs,vbd,vgb); printf("ivbs = %.7e , ivbd = %.7e , ivgb = %.7e\n",ivbs,ivbd,ivgb); printf("cbs = %.7e , cbd = %.7e , cgb = %.7e\n",cbs,cbd,cgb); printf("cb = %.7e , cg = %.7e , cs = %.7e\n",cb,cg,cs); printf("csprm = %.7e, cd = %.7e, cdprm = %.7e\n",csprm,cd,cdprm); printf("icb = %.7e , icg = %.7e , ics = %.7e\n",icb,icg,ics); printf("icsprm = %.7e, icd = %.7e, icdprm = %.7e\n", icsprm,icd,icdprm); #endif /* SENSDEBUG */ for(iparmno = 1;iparmno<=info->SENparms;iparmno++){ if( (flag == 4) && (iparmno != here->MOS9senParmNo) ) continue; if( (flag == 5) && (iparmno != (here->MOS9senParmNo + (int) here->MOS9sens_l)) ) continue; switch(flag){ case 1: DvDp = model->MOS9type * (info->SEN_Sap[here->MOS9bNode][iparmno] - info->SEN_Sap[here->MOS9sNodePrime][iparmno]); break; case 2: DvDp = model->MOS9type * ( info->SEN_Sap[here->MOS9bNode][iparmno] - info->SEN_Sap[here->MOS9dNodePrime][iparmno]); break; case 3: DvDp = model->MOS9type * ( info->SEN_Sap[here->MOS9gNode][iparmno] - info->SEN_Sap[here->MOS9bNode][iparmno]); break; case 4: DvDp = 1; break; case 5: DvDp = 1; break; } *(info->SEN_RHS[here->MOS9bNode] + iparmno) -= ( cb - cb0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS9bNode] + iparmno) -= ( icb - icb0) * DELAinv * DvDp; *(info->SEN_RHS[here->MOS9gNode] + iparmno) -= ( cg - cg0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS9gNode] + iparmno) -= ( icg - icg0) * DELAinv * DvDp; if(here->MOS9sNode != here->MOS9sNodePrime){ *(info->SEN_RHS[here->MOS9sNode] + iparmno) -= ( cs - cs0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS9sNode] + iparmno) -= ( ics - ics0) * DELAinv * DvDp; } *(info->SEN_RHS[here->MOS9sNodePrime] + iparmno) -= ( csprm - csprm0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS9sNodePrime] + iparmno) -= ( icsprm - icsprm0) * DELAinv * DvDp; if(here->MOS9dNode != here->MOS9dNodePrime){ *(info->SEN_RHS[here->MOS9dNode] + iparmno) -= ( cd - cd0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS9dNode] + iparmno) -= ( icd - icd0) * DELAinv * DvDp; } *(info->SEN_RHS[here->MOS9dNodePrime] + iparmno) -= ( cdprm - cdprm0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS9dNodePrime] + iparmno) -= ( icdprm - icdprm0) * DELAinv * DvDp; #ifdef SENSDEBUG printf("after loading\n"); printf("DvDp = %.5e , DELAinv = %.5e ,flag = %d ,", DvDp,DELAinv,flag); printf("iparmno = %d,senparmno = %d\n", iparmno,here->MOS9senParmNo); printf("A0 = %.5e , Apert = %.5e ,CONSTvt0 = %.5e \n", A0,Apert,CONSTvt0); printf("senb = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS9bNode] + iparmno), *(info->SEN_iRHS[here->MOS9bNode] + iparmno)); printf("seng = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS9gNode] + iparmno), *(info->SEN_iRHS[here->MOS9gNode] + iparmno)); printf("sens = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS9sNode] + iparmno), *(info->SEN_iRHS[here->MOS9sNode] + iparmno)); printf("sensprm = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS9sNodePrime] + iparmno), *(info->SEN_iRHS[here->MOS9sNodePrime] + iparmno)); printf("send = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS9dNode] + iparmno), *(info->SEN_iRHS[here->MOS9dNode] + iparmno)); printf("sendprm = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS9dNodePrime] + iparmno), *(info->SEN_iRHS[here->MOS9dNodePrime] + iparmno)); #endif /* SENSDEBUG */ } switch(flag){ case 1: goto pertvbd ; case 2: goto pertvgb ; case 3: goto pertl ; case 4: goto pertw ; case 5: break; } next: ; /* put the unperturbed values back into the state vector */ for(i=0; i <= 16; i++) *(ckt->CKTstate0 + here->MOS9states + i) = *(SaveState + i); here->MOS9sourceConductance = *(SaveState + 17) ; here->MOS9drainConductance = *(SaveState + 18) ; here->MOS9cd = *(SaveState + 19) ; here->MOS9cbs = *(SaveState + 20) ; here->MOS9cbd = *(SaveState + 21) ; here->MOS9gmbs = *(SaveState + 22) ; here->MOS9gm = *(SaveState + 23) ; here->MOS9gds = *(SaveState + 24) ; here->MOS9gbd = *(SaveState + 25) ; here->MOS9gbs = *(SaveState + 26) ; here->MOS9capbd = *(SaveState + 27) ; here->MOS9capbs = *(SaveState + 28) ; here->MOS9Cbd = *(SaveState + 29) ; here->MOS9Cbdsw = *(SaveState + 30) ; here->MOS9Cbs = *(SaveState + 31) ; here->MOS9Cbssw = *(SaveState + 32) ; here->MOS9f2d = *(SaveState + 33) ; here->MOS9f3d = *(SaveState + 34) ; here->MOS9f4d = *(SaveState + 35) ; here->MOS9f2s = *(SaveState + 36) ; here->MOS9f3s = *(SaveState + 37) ; here->MOS9f4s = *(SaveState + 38) ; here->MOS9cgs = *(SaveState + 39) ; here->MOS9cgd = *(SaveState + 40) ; here->MOS9cgb = *(SaveState + 41) ; here->MOS9vdsat = *(SaveState + 42) ; here->MOS9von = *(SaveState + 43) ; here->MOS9mode = save_mode ; here->MOS9senPertFlag = OFF; } } info->SENstatus = NORMAL; #ifdef SENSDEBUG printf("MOS9senacload end\n"); #endif /* SENSDEBUG */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos9/mos9sld.c0000644000175000017500000006445113546075722021622 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Alan Gillespie This function is obsolete (was used by an old sensitivity analysis) **********/ /* actually load the current sensitivity * information into the array previously provided */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mos9defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS9sLoad(GENmodel *inModel, CKTcircuit *ckt) { MOS9model *model = (MOS9model *)inModel; MOS9instance *here; double SaveState[44]; int save_mode; int i; int iparmno; int error; int flag; double A0; double DELA; double Apert; double DELAinv; double gspr0; double gspr; double gdpr0; double gdpr; double cdpr0; double cspr0; double cd0; double cbd0; double cbs0; double cd; double cbd; double cbs; double DcdprDp; double DcsprDp; double DcbDp; double DcdDp; double DcbsDp; double DcbdDp; double DcdprmDp; double DcsprmDp; double qgs0; double qgd0; double qgb0; double qbd0; double qbd; double qbs0; double qbs; double DqgsDp; double DqgdDp; double DqgbDp; double DqbdDp; double DqbsDp; double Osxpgs; double Osxpgd; double Osxpgb; double Osxpbd; double Osxpbs; double tag0; double tag1; double arg; double sarg; double sargsw; int offset; double EffectiveLength; double EffectiveWidth; SENstruct *info; #ifdef SENSDEBUG printf("MOS9senload \n"); printf("CKTtime = %.5e\n",ckt->CKTtime); printf("CKTorder = %d\n",ckt->CKTorder); #endif /* SENSDEBUG */ info = ckt->CKTsenInfo; info->SENstatus = PERTURBATION; tag0 = ckt->CKTag[0]; tag1 = ckt->CKTag[1]; if(ckt->CKTorder == 1){ tag1 = 0; } /* loop through all the models */ for( ; model != NULL; model = MOS9nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS9instances(model); here != NULL ; here=MOS9nextInstance(here)) { #ifdef SENSDEBUG printf("senload instance name %s\n",here->MOS9name); printf("gate = %d ,drain = %d, drainprm = %d\n", here->MOS9gNode,here->MOS9dNode,here->MOS9dNodePrime); printf("source = %d , sourceprm = %d ,body = %d, senparmno = %d\n", here->MOS9sNode ,here->MOS9sNodePrime, here->MOS9bNode,here->MOS9senParmNo); #endif /* SENSDEBUG */ /* save the unperturbed values in the state vector */ for(i=0; i <= 16; i++){ *(SaveState + i) = *(ckt->CKTstate0 + here->MOS9states + i); } *(SaveState + 17) = here->MOS9sourceConductance; *(SaveState + 18) = here->MOS9drainConductance; *(SaveState + 19) = here->MOS9cd; *(SaveState + 20) = here->MOS9cbs; *(SaveState + 21) = here->MOS9cbd; *(SaveState + 22) = here->MOS9gmbs; *(SaveState + 23) = here->MOS9gm; *(SaveState + 24) = here->MOS9gds; *(SaveState + 25) = here->MOS9gbd; *(SaveState + 26) = here->MOS9gbs; *(SaveState + 27) = here->MOS9capbd; *(SaveState + 28) = here->MOS9capbs; *(SaveState + 29) = here->MOS9Cbd; *(SaveState + 30) = here->MOS9Cbdsw; *(SaveState + 31) = here->MOS9Cbs; *(SaveState + 32) = here->MOS9Cbssw; *(SaveState + 33) = here->MOS9f2d; *(SaveState + 34) = here->MOS9f3d; *(SaveState + 35) = here->MOS9f4d; *(SaveState + 36) = here->MOS9f2s; *(SaveState + 37) = here->MOS9f3s; *(SaveState + 38) = here->MOS9f4s; *(SaveState + 39) = here->MOS9cgs; *(SaveState + 40) = here->MOS9cgd; *(SaveState + 41) = here->MOS9cgb; *(SaveState + 42) = here->MOS9vdsat; *(SaveState + 43) = here->MOS9von; save_mode = here->MOS9mode; if(here->MOS9senParmNo == 0) goto next1; #ifdef SENSDEBUG printf("without perturbation \n"); #endif /* SENSDEBUG */ cdpr0= here->MOS9cd; cspr0= -(here->MOS9cd + here->MOS9cbd + here->MOS9cbs); if((info->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)){ qgs0 = *(ckt->CKTstate1 + here->MOS9qgs); qgd0 = *(ckt->CKTstate1 + here->MOS9qgd); qgb0 = *(ckt->CKTstate1 + here->MOS9qgb); } else{ qgs0 = *(ckt->CKTstate0 + here->MOS9qgs); qgd0 = *(ckt->CKTstate0 + here->MOS9qgd); qgb0 = *(ckt->CKTstate0 + here->MOS9qgb); } here->MOS9senPertFlag = ON; error = MOS9load((GENmodel*)model,ckt); if(error) return(error); cd0 = here->MOS9cd ; cbd0 = here->MOS9cbd ; cbs0 = here->MOS9cbs ; gspr0= here->MOS9sourceConductance ; gdpr0= here->MOS9drainConductance ; qbs0 = *(ckt->CKTstate0 + here->MOS9qbs); qbd0 = *(ckt->CKTstate0 + here->MOS9qbd); for( flag = 0 ; flag <= 1 ; flag++){ if(here->MOS9sens_l == 0) if(flag == 0) goto next2; if(here->MOS9sens_w == 0) if(flag == 1) goto next2; if(flag == 0){ A0 = here->MOS9l; DELA = info->SENpertfac * A0; DELAinv = 1.0/DELA; Apert = A0 + DELA; here->MOS9l = Apert; } else{ A0 = here->MOS9w; DELA = info->SENpertfac * A0; DELAinv = 1.0/DELA; Apert = A0 + DELA; here->MOS9w = Apert; here->MOS9drainArea *= (1 + info->SENpertfac); here->MOS9sourceArea *= (1 + info->SENpertfac); here->MOS9Cbd *= (1 + info->SENpertfac); here->MOS9Cbs *= (1 + info->SENpertfac); if(here->MOS9drainPerimiter){ here->MOS9Cbdsw += here->MOS9Cbdsw * DELA/here->MOS9drainPerimiter; } if(here->MOS9sourcePerimiter){ here->MOS9Cbssw += here->MOS9Cbssw * DELA/here->MOS9sourcePerimiter; } if(*(ckt->CKTstate0 + here->MOS9vbd) >= here->MOS9tDepCap){ arg = 1-model->MOS9fwdCapDepCoeff; sarg = exp( (-model->MOS9bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS9bulkJctSideGradingCoeff) * log(arg) ); here->MOS9f2d = here->MOS9Cbd* (1-model->MOS9fwdCapDepCoeff* (1+model->MOS9bulkJctBotGradingCoeff))* sarg/arg + here->MOS9Cbdsw*(1-model->MOS9fwdCapDepCoeff* (1+model->MOS9bulkJctSideGradingCoeff))* sargsw/arg; here->MOS9f3d = here->MOS9Cbd * model->MOS9bulkJctBotGradingCoeff * sarg/arg/ model->MOS9bulkJctPotential + here->MOS9Cbdsw * model->MOS9bulkJctSideGradingCoeff *sargsw/arg / model->MOS9bulkJctPotential; here->MOS9f4d = here->MOS9Cbd* model->MOS9bulkJctPotential*(1-arg*sarg)/ (1-model->MOS9bulkJctBotGradingCoeff) + here->MOS9Cbdsw*model->MOS9bulkJctPotential* (1-arg*sargsw)/ (1-model->MOS9bulkJctSideGradingCoeff) -here->MOS9f3d/2* (here->MOS9tDepCap*here->MOS9tDepCap) -here->MOS9tDepCap * here->MOS9f2d; } if(*(ckt->CKTstate0 + here->MOS9vbs) >= here->MOS9tDepCap){ arg = 1-model->MOS9fwdCapDepCoeff; sarg = exp( (-model->MOS9bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS9bulkJctSideGradingCoeff) * log(arg) ); here->MOS9f2s = here->MOS9Cbs* (1-model->MOS9fwdCapDepCoeff* (1+model->MOS9bulkJctBotGradingCoeff))* sarg/arg + here->MOS9Cbssw*(1-model->MOS9fwdCapDepCoeff* (1+model->MOS9bulkJctSideGradingCoeff))* sargsw/arg; here->MOS9f3s = here->MOS9Cbs * model->MOS9bulkJctBotGradingCoeff * sarg/arg/ model->MOS9bulkJctPotential + here->MOS9Cbssw * model->MOS9bulkJctSideGradingCoeff * sargsw/arg/ model->MOS9bulkJctPotential; here->MOS9f4s = here->MOS9Cbs* model->MOS9bulkJctPotential*(1-arg*sarg)/ (1-model->MOS9bulkJctBotGradingCoeff) + here->MOS9Cbssw*model->MOS9bulkJctPotential* (1-arg*sargsw)/ (1-model->MOS9bulkJctSideGradingCoeff) -here->MOS9f3s/2* (here->MOS9tBulkPot*here->MOS9tBulkPot) -here->MOS9tBulkPot * here->MOS9f2s; } here->MOS9drainConductance *= Apert/A0; here->MOS9sourceConductance *= Apert/A0; } #ifdef SENSDEBUG if(flag == 0) printf("perturbation of l\n"); if(flag == 1) printf("perturbation of w\n"); #endif /* SENSDEBUG */ error = MOS9load((GENmodel*)model,ckt); if(error) return(error); if(flag == 0){ here->MOS9l = A0; } else{ here->MOS9w = A0; here->MOS9drainArea /= (1 + info->SENpertfac); here->MOS9sourceArea /= (1 + info->SENpertfac); here->MOS9drainConductance *= A0/Apert; here->MOS9sourceConductance *= A0/Apert; } cd = here->MOS9cd ; cbd = here->MOS9cbd ; cbs = here->MOS9cbs ; gspr= here->MOS9sourceConductance ; gdpr= here->MOS9drainConductance ; DcdDp = (cd - cd0) * DELAinv; DcbsDp = (cbs - cbs0) * DELAinv; DcbdDp = (cbd - cbd0) * DELAinv; DcbDp = ( DcbsDp + DcbdDp ); DcdprDp = 0; DcsprDp = 0; if(here->MOS9dNode != here->MOS9dNodePrime) if(gdpr0) DcdprDp = cdpr0 * (gdpr - gdpr0)/gdpr0 * DELAinv; if(here->MOS9sNode != here->MOS9sNodePrime) if(gspr0) DcsprDp = cspr0 * (gspr - gspr0)/gspr0 * DELAinv; DcdprmDp = ( - DcdprDp + DcdDp); DcsprmDp = ( - DcbsDp - DcdDp - DcbdDp - DcsprDp); if(flag == 0){ EffectiveLength = here->MOS9l - 2*model->MOS9latDiff + model->MOS9lengthAdjust; if(EffectiveLength == 0){ DqgsDp = 0; DqgdDp = 0; DqgbDp = 0; } else{ DqgsDp = model->MOS9type * qgs0 / EffectiveLength; DqgdDp = model->MOS9type * qgd0 / EffectiveLength; DqgbDp = model->MOS9type * qgb0 / EffectiveLength; } } else{ EffectiveWidth = here->MOS9w - 2*model->MOS9widthNarrow + model->MOS9widthAdjust; DqgsDp = model->MOS9type * qgs0 / EffectiveWidth; DqgdDp = model->MOS9type * qgd0 / EffectiveWidth; DqgbDp = model->MOS9type * qgb0 / EffectiveWidth; } qbd = *(ckt->CKTstate0 + here->MOS9qbd); qbs = *(ckt->CKTstate0 + here->MOS9qbs); DqbsDp = model->MOS9type * (qbs - qbs0)*DELAinv; DqbdDp = model->MOS9type * (qbd - qbd0)*DELAinv; if(flag == 0){ *(here->MOS9dphigs_dl) = DqgsDp; *(here->MOS9dphigd_dl) = DqgdDp; *(here->MOS9dphibs_dl) = DqbsDp; *(here->MOS9dphibd_dl) = DqbdDp; *(here->MOS9dphigb_dl) = DqgbDp; } else{ *(here->MOS9dphigs_dw) = DqgsDp; *(here->MOS9dphigd_dw) = DqgdDp; *(here->MOS9dphibs_dw) = DqbsDp; *(here->MOS9dphibd_dw) = DqbdDp; *(here->MOS9dphigb_dw) = DqgbDp; } #ifdef SENSDEBUG printf("CKTag[0]=%.7e,CKTag[1]=%.7e,flag= %d\n", ckt->CKTag[0],ckt->CKTag[1],flag); printf("cd0 = %.7e ,cd = %.7e,\n",cd0,cd); printf("cbs0 = %.7e ,cbs = %.7e,\n",cbs0,cbs); printf("cbd0 = %.7e ,cbd = %.7e,\n",cbd0,cbd); printf("DcdprmDp = %.7e,\n",DcdprmDp); printf("DcsprmDp = %.7e,\n",DcsprmDp); printf("DcdprDp = %.7e,\n",DcdprDp); printf("DcsprDp = %.7e,\n",DcsprDp); printf("qgs0 = %.7e \n",qgs0); printf("qgd0 = %.7e \n",qgd0); printf("qgb0 = %.7e \n",qgb0); printf("qbs0 = %.7e ,qbs = %.7e,\n",qbs0,qbs); printf("qbd0 = %.7e ,qbd = %.7e,\n",qbd0,qbd); printf("DqgsDp = %.7e \n",DqgsDp); printf("DqgdDp = %.7e \n",DqgdDp); printf("DqgbDp = %.7e \n",DqgbDp); printf("DqbsDp = %.7e \n",DqbsDp); printf("DqbdDp = %.7e \n",DqbdDp); printf("EffectiveLength = %.7e \n",EffectiveLength); printf("tdepCap = %.7e \n",here->MOS9tDepCap); printf("\n"); #endif /* SENSDEBUG*/ if((info->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)) goto next2; /* * load RHS matrix */ if(flag == 0){ *(info->SEN_RHS[here->MOS9bNode] + here->MOS9senParmNo) -= model->MOS9type * DcbDp; *(info->SEN_RHS[here->MOS9dNode] + here->MOS9senParmNo) -= model->MOS9type * DcdprDp; *(info->SEN_RHS[here->MOS9dNodePrime] + here->MOS9senParmNo) -= model->MOS9type * DcdprmDp; *(info->SEN_RHS[here->MOS9sNode] + here->MOS9senParmNo) -= model->MOS9type * DcsprDp; *(info->SEN_RHS[here->MOS9sNodePrime] + here->MOS9senParmNo) -= model->MOS9type * DcsprmDp; } else{ offset = here->MOS9sens_l; *(info->SEN_RHS[here->MOS9bNode] + here->MOS9senParmNo + offset) -= model->MOS9type * DcbDp; *(info->SEN_RHS[here->MOS9dNode] + here->MOS9senParmNo + offset) -= model->MOS9type * DcdprDp; *(info->SEN_RHS[here->MOS9dNodePrime] + here->MOS9senParmNo + offset) -= model->MOS9type * DcdprmDp; *(info->SEN_RHS[here->MOS9sNode] + here->MOS9senParmNo + offset) -= model->MOS9type * DcsprDp; *(info->SEN_RHS[here->MOS9sNodePrime] + here->MOS9senParmNo + offset) -= model->MOS9type * DcsprmDp; } #ifdef SENSDEBUG printf("after loading\n"); if(flag == 0){ printf("DcbDp=%.7e\n", *(info->SEN_RHS[here->MOS9bNode] + here->MOS9senParmNo)); printf("DcdprDp=%.7e\n", *(info->SEN_RHS[here->MOS9dNode] + here->MOS9senParmNo)); printf("DcsprDp=%.7e\n", *(info->SEN_RHS[here->MOS9sNode] + here->MOS9senParmNo)); printf("DcdprmDp=%.7e\n", *(info->SEN_RHS[here->MOS9dNodePrime] + here->MOS9senParmNo)); printf("DcsprmDp=%.7e\n", *(info->SEN_RHS[here->MOS9sNodePrime] + here->MOS9senParmNo)); printf("\n"); } else{ printf("DcbDp=%.7e\n", *(info->SEN_RHS[here->MOS9bNode] + here->MOS9senParmNo + here->MOS9sens_l)); printf("DcdprDp=%.7e\n", *(info->SEN_RHS[here->MOS9dNode] + here->MOS9senParmNo + here->MOS9sens_l)); printf("DcsprDp=%.7e\n", *(info->SEN_RHS[here->MOS9sNode] + here->MOS9senParmNo + here->MOS9sens_l)); printf("DcdprmDp=%.7e\n", *(info->SEN_RHS[here->MOS9dNodePrime] + here->MOS9senParmNo + here->MOS9sens_l)); printf("DcsprmDp=%.7e\n", *(info->SEN_RHS[here->MOS9sNodePrime] + here->MOS9senParmNo + here->MOS9sens_l)); } #endif /* SENSDEBUG*/ next2: ; } next1: if((info->SENmode == DCSEN) || (ckt->CKTmode&MODETRANOP) ) goto restore; if((info->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)) goto restore; for(iparmno = 1;iparmno<=info->SENparms;iparmno++){ #ifdef SENSDEBUG printf("after conductive currents\n"); printf("iparmno = %d\n",iparmno); printf("DcbDp=%.7e\n", *(info->SEN_RHS[here->MOS9bNode] + iparmno)); printf("DcdprDp=%.7e\n", *(info->SEN_RHS[here->MOS9dNode] + iparmno)); printf("DcdprmDp=%.7e\n", *(info->SEN_RHS[here->MOS9dNodePrime] + iparmno)); printf("DcsprDp=%.7e\n", *(info->SEN_RHS[here->MOS9sNode] + iparmno)); printf("DcsprmDp=%.7e\n", *(info->SEN_RHS[here->MOS9sNodePrime] + iparmno)); printf("\n"); #endif /* SENSDEBUG */ Osxpgs = tag0 * *(ckt->CKTstate1 + here->MOS9sensxpgs + 10*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->MOS9sensxpgs + 10*(iparmno - 1) + 1); Osxpgd = tag0 * *(ckt->CKTstate1 + here->MOS9sensxpgd + 10*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->MOS9sensxpgd + 10*(iparmno - 1) + 1); Osxpbs = tag0 * *(ckt->CKTstate1 + here->MOS9sensxpbs + 10*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->MOS9sensxpbs + 10*(iparmno - 1) + 1); Osxpbd =tag0 * *(ckt->CKTstate1 + here->MOS9sensxpbd + 10*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->MOS9sensxpbd + 10*(iparmno - 1) + 1); Osxpgb = tag0 * *(ckt->CKTstate1 + here->MOS9sensxpgb + 10*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->MOS9sensxpgb + 10*(iparmno - 1) + 1); #ifdef SENSDEBUG printf("iparmno=%d\n",iparmno); printf("sxpgs=%.7e,sdgs=%.7e\n", *(ckt->CKTstate1 + here->MOS9sensxpgs + 10*(iparmno - 1)), *(ckt->CKTstate1 + here->MOS9sensxpgs + 10*(iparmno - 1) + 1)); printf("sxpgd=%.7e,sdgd=%.7e\n", *(ckt->CKTstate1 + here->MOS9sensxpgd + 10*(iparmno - 1)), *(ckt->CKTstate1 + here->MOS9sensxpgd + 10*(iparmno - 1) + 1)); printf("sxpbs=%.7e,sdbs=%.7e\n", *(ckt->CKTstate1 + here->MOS9sensxpbs + 10*(iparmno - 1)), *(ckt->CKTstate1 + here->MOS9sensxpbs + 10*(iparmno - 1) + 1)); printf("sxpbd=%.7e,sdbd=%.7e\n", *(ckt->CKTstate1 + here->MOS9sensxpbd + 10*(iparmno - 1)), *(ckt->CKTstate1 + here->MOS9sensxpbd + 10*(iparmno - 1) + 1)); printf("sxpgb=%.7e,sdgb=%.7e\n", *(ckt->CKTstate1 + here->MOS9sensxpgb + 10*(iparmno - 1)), *(ckt->CKTstate1 + here->MOS9sensxpgb + 10*(iparmno - 1) + 1)); printf("before loading DqDp\n"); printf("Osxpgs=%.7e,Osxpgd=%.7e\n",Osxpgs,Osxpgd); printf("Osxpbs=%.7e,Osxpbd=%.7e,Osxpgb=%.7e\n", Osxpbs,Osxpbd,Osxpgb); printf("\n"); #endif /* SENSDEBUG */ if(here->MOS9sens_l && (iparmno == here->MOS9senParmNo)){ Osxpgs -= tag0 * *(here->MOS9dphigs_dl); Osxpgd -= tag0 * *(here->MOS9dphigd_dl); Osxpbs -= tag0 * *(here->MOS9dphibs_dl); Osxpbd -= tag0 * *(here->MOS9dphibd_dl); Osxpgb -= tag0 * *(here->MOS9dphigb_dl); } if(here->MOS9sens_w && (iparmno == (here->MOS9senParmNo + (int) here->MOS9sens_l))){ Osxpgs -= tag0 * *(here->MOS9dphigs_dw); Osxpgd -= tag0 * *(here->MOS9dphigd_dw); Osxpbs -= tag0 * *(here->MOS9dphibs_dw); Osxpbd -= tag0 * *(here->MOS9dphibd_dw); Osxpgb -= tag0 * *(here->MOS9dphigb_dw); } #ifdef SENSDEBUG printf("after loading DqDp\n"); printf("DqgsDp=%.7e",DqgsDp); printf("Osxpgs=%.7e,Osxpgd=%.7e\n",Osxpgs,Osxpgd); printf("Osxpbs=%.7e,Osxpbd=%.7e,Osxpgb=%.7e\n", Osxpbs,Osxpbd,Osxpgb); #endif /* SENSDEBUG */ *(info->SEN_RHS[here->MOS9bNode] + iparmno) += Osxpbs + Osxpbd -Osxpgb; *(info->SEN_RHS[here->MOS9gNode] + iparmno) += Osxpgs + Osxpgd + Osxpgb; *(info->SEN_RHS[here->MOS9dNodePrime] + iparmno) -= Osxpgd + Osxpbd ; *(info->SEN_RHS[here->MOS9sNodePrime] + iparmno) -= Osxpgs + Osxpbs; #ifdef SENSDEBUG printf("after capacitive currents\n"); printf("DcbDp=%.7e\n", *(info->SEN_RHS[here->MOS9bNode] + iparmno)); printf("DcdprDp=%.7e\n", *(info->SEN_RHS[here->MOS9dNode] + iparmno)); printf("DcdprmDp=%.7e\n", *(info->SEN_RHS[here->MOS9dNodePrime] + iparmno)); printf("DcsprDp=%.7e\n", *(info->SEN_RHS[here->MOS9sNode] + iparmno)); printf("DcsprmDp=%.7e\n", *(info->SEN_RHS[here->MOS9sNodePrime] + iparmno)); #endif /* SENSDEBUG */ } restore: /* put the unperturbed values back into the state vector */ for(i=0; i <= 16; i++) *(ckt->CKTstate0 + here->MOS9states + i) = *(SaveState + i); here->MOS9sourceConductance = *(SaveState + 17) ; here->MOS9drainConductance = *(SaveState + 18) ; here->MOS9cd = *(SaveState + 19) ; here->MOS9cbs = *(SaveState + 20) ; here->MOS9cbd = *(SaveState + 21) ; here->MOS9gmbs = *(SaveState + 22) ; here->MOS9gm = *(SaveState + 23) ; here->MOS9gds = *(SaveState + 24) ; here->MOS9gbd = *(SaveState + 25) ; here->MOS9gbs = *(SaveState + 26) ; here->MOS9capbd = *(SaveState + 27) ; here->MOS9capbs = *(SaveState + 28) ; here->MOS9Cbd = *(SaveState + 29) ; here->MOS9Cbdsw = *(SaveState + 30) ; here->MOS9Cbs = *(SaveState + 31) ; here->MOS9Cbssw = *(SaveState + 32) ; here->MOS9f2d = *(SaveState + 33) ; here->MOS9f3d = *(SaveState + 34) ; here->MOS9f4d = *(SaveState + 35) ; here->MOS9f2s = *(SaveState + 36) ; here->MOS9f3s = *(SaveState + 37) ; here->MOS9f4s = *(SaveState + 38) ; here->MOS9cgs = *(SaveState + 39) ; here->MOS9cgd = *(SaveState + 40) ; here->MOS9cgb = *(SaveState + 41) ; here->MOS9vdsat = *(SaveState + 42) ; here->MOS9von = *(SaveState + 43) ; here->MOS9mode = save_mode ; here->MOS9senPertFlag = OFF; } } info->SENstatus = NORMAL; #ifdef SENSDEBUG printf("MOS9senload end\n"); #endif /* SENSDEBUG */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos9/Makefile.am0000644000175000017500000000112213546075722022102 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libmos9.la libmos9_la_SOURCES = \ mos9.c \ mos9acld.c \ mos9ask.c \ mos9conv.c \ mos9defs.h \ mos9del.c \ mos9dist.c \ mos9dset.c \ mos9ext.h \ mos9ic.c \ mos9init.c \ mos9init.h \ mos9itf.h \ mos9load.c \ mos9mask.c \ mos9mpar.c \ mos9noi.c \ mos9par.c \ mos9pzld.c \ mos9sacl.c \ mos9set.c \ mos9sld.c \ mos9sprt.c \ mos9sset.c \ mos9supd.c \ mos9temp.c \ mos9trun.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/mos9/mos9defs.h0000644000175000017500000004563313546075722021767 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Alan Gillespie **********/ #ifndef MOS9 #define MOS9 #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" /* declarations for level 9 MOSFETs */ /* indices to the array of MOSFET(9) noise sources */ enum { MOS9RDNOIZ = 0, MOS9RSNOIZ, MOS9IDNOIZ, MOS9FLNOIZ, MOS9TOTNOIZ, /* finally, the number of noise sources */ MOS9NSRCS }; /* information needed for each instance */ typedef struct sMOS9instance { struct GENinstance gen; #define MOS9modPtr(inst) ((struct sMOS9model *)((inst)->gen.GENmodPtr)) #define MOS9nextInstance(inst) ((struct sMOS9instance *)((inst)->gen.GENnextInstance)) #define MOS9name gen.GENname #define MOS9states gen.GENstate const int MOS9dNode; /* number of the gate node of the mosfet */ const int MOS9gNode; /* number of the gate node of the mosfet */ const int MOS9sNode; /* number of the source node of the mosfet */ const int MOS9bNode; /* number of the bulk node of the mosfet */ int MOS9dNodePrime; /* number of the internal drain node of the mosfet */ int MOS9sNodePrime; /* number of the internal source node of the mosfet */ double MOS9m; /* parallel device multiplier */ double MOS9l; /* the length of the channel region */ double MOS9w; /* the width of the channel region */ double MOS9drainArea; /* the area of the drain diffusion */ double MOS9sourceArea; /* the area of the source diffusion */ double MOS9drainSquares; /* the length of the drain in squares */ double MOS9sourceSquares; /* the length of the source in squares */ double MOS9drainPerimiter; double MOS9sourcePerimiter; double MOS9sourceConductance; /*conductance of source(or 0):set in setup*/ double MOS9drainConductance; /*conductance of drain(or 0):set in setup*/ double MOS9temp; /* operating temperature of this instance */ double MOS9dtemp; /* instance temperature difference */ double MOS9tTransconductance; /* temperature corrected transconductance*/ double MOS9tSurfMob; /* temperature corrected surface mobility */ double MOS9tPhi; /* temperature corrected Phi */ double MOS9tVto; /* temperature corrected Vto */ double MOS9tSatCur; /* temperature corrected saturation Cur. */ double MOS9tSatCurDens; /* temperature corrected saturation Cur. density*/ double MOS9tCbd; /* temperature corrected B-D Capacitance */ double MOS9tCbs; /* temperature corrected B-S Capacitance */ double MOS9tCj; /* temperature corrected Bulk bottom Capacitance */ double MOS9tCjsw; /* temperature corrected Bulk side Capacitance */ double MOS9tBulkPot; /* temperature corrected Bulk potential */ double MOS9tDepCap; /* temperature adjusted transition point in */ /* the cureve matching Fc * Vj */ double MOS9tVbi; /* temperature adjusted Vbi */ double MOS9icVBS; /* initial condition B-S voltage */ double MOS9icVDS; /* initial condition D-S voltage */ double MOS9icVGS; /* initial condition G-S voltage */ double MOS9von; double MOS9vdsat; double MOS9sourceVcrit; /* vcrit for pos. vds */ double MOS9drainVcrit; /* vcrit for neg. vds */ double MOS9cd; double MOS9cbs; double MOS9cbd; double MOS9gmbs; double MOS9gm; double MOS9gds; double MOS9gbd; double MOS9gbs; double MOS9capbd; double MOS9capbs; double MOS9Cbd; double MOS9Cbdsw; double MOS9Cbs; double MOS9Cbssw; double MOS9f2d; double MOS9f3d; double MOS9f4d; double MOS9f2s; double MOS9f3s; double MOS9f4s; int MOS9mode; /* device mode : 1 = normal, -1 = inverse */ unsigned MOS9off :1;/* non-zero to indicate device is off for dc analysis*/ unsigned MOS9tempGiven :1; /* instance temperature specified */ unsigned MOS9dtempGiven :1; /* instance temperature difference specified*/ unsigned MOS9mGiven :1; unsigned MOS9lGiven :1; unsigned MOS9wGiven :1; unsigned MOS9drainAreaGiven :1; unsigned MOS9sourceAreaGiven :1; unsigned MOS9drainSquaresGiven :1; unsigned MOS9sourceSquaresGiven :1; unsigned MOS9drainPerimiterGiven :1; unsigned MOS9sourcePerimiterGiven :1; unsigned MOS9dNodePrimeSet :1; unsigned MOS9sNodePrimeSet :1; unsigned MOS9icVBSGiven :1; unsigned MOS9icVDSGiven :1; unsigned MOS9icVGSGiven :1; unsigned MOS9vonGiven :1; unsigned MOS9vdsatGiven :1; unsigned MOS9modeGiven :1; double *MOS9DdPtr; /* pointer to sparse matrix element at * (Drain node,drain node) */ double *MOS9GgPtr; /* pointer to sparse matrix element at * (gate node,gate node) */ double *MOS9SsPtr; /* pointer to sparse matrix element at * (source node,source node) */ double *MOS9BbPtr; /* pointer to sparse matrix element at * (bulk node,bulk node) */ double *MOS9DPdpPtr; /* pointer to sparse matrix element at * (drain prime node,drain prime node) */ double *MOS9SPspPtr; /* pointer to sparse matrix element at * (source prime node,source prime node) */ double *MOS9DdpPtr; /* pointer to sparse matrix element at * (drain node,drain prime node) */ double *MOS9GbPtr; /* pointer to sparse matrix element at * (gate node,bulk node) */ double *MOS9GdpPtr; /* pointer to sparse matrix element at * (gate node,drain prime node) */ double *MOS9GspPtr; /* pointer to sparse matrix element at * (gate node,source prime node) */ double *MOS9SspPtr; /* pointer to sparse matrix element at * (source node,source prime node) */ double *MOS9BdpPtr; /* pointer to sparse matrix element at * (bulk node,drain prime node) */ double *MOS9BspPtr; /* pointer to sparse matrix element at * (bulk node,source prime node) */ double *MOS9DPspPtr; /* pointer to sparse matrix element at * (drain prime node,source prime node) */ double *MOS9DPdPtr; /* pointer to sparse matrix element at * (drain prime node,drain node) */ double *MOS9BgPtr; /* pointer to sparse matrix element at * (bulk node,gate node) */ double *MOS9DPgPtr; /* pointer to sparse matrix element at * (drain prime node,gate node) */ double *MOS9SPgPtr; /* pointer to sparse matrix element at * (source prime node,gate node) */ double *MOS9SPsPtr; /* pointer to sparse matrix element at * (source prime node,source node) */ double *MOS9DPbPtr; /* pointer to sparse matrix element at * (drain prime node,bulk node) */ double *MOS9SPbPtr; /* pointer to sparse matrix element at * (source prime node,bulk node) */ double *MOS9SPdpPtr; /* pointer to sparse matrix element at * (source prime node,drain prime node) */ int MOS9senParmNo; /* parameter # for sensitivity use; set equal to 0 if neither length nor width of the mosfet is a design parameter */ unsigned MOS9sens_l :1; /* field which indicates whether length of the mosfet is a design parameter or not */ unsigned MOS9sens_w :1; /* field which indicates whether width of the mosfet is a design parameter or not */ unsigned MOS9senPertFlag :1; /* indictes whether the the parameter of the particular instance is to be perturbed */ double MOS9cgs; double MOS9cgd; double MOS9cgb; double *MOS9sens; #define MOS9senGdpr MOS9sens #define MOS9senGspr MOS9sens + 1 #define MOS9senCgs MOS9sens + 2 /* contains pertured values of cgs */ #define MOS9senCgd MOS9sens + 8 /* contains perturbed values of cgd*/ #define MOS9senCgb MOS9sens + 14 /* contains perturbed values of cgb*/ #define MOS9senCbd MOS9sens + 20 /* contains perturbed values of cbd*/ #define MOS9senCbs MOS9sens + 26 /* contains perturbed values of cbs*/ #define MOS9senGds MOS9sens + 32 /* contains perturbed values of gds*/ #define MOS9senGbs MOS9sens + 38 /* contains perturbed values of gbs*/ #define MOS9senGbd MOS9sens + 44 /* contains perturbed values of gbd*/ #define MOS9senGm MOS9sens + 50 /* contains perturbed values of gm*/ #define MOS9senGmbs MOS9sens + 56 /* contains perturbed values of gmbs*/ #define MOS9dphigs_dl MOS9sens + 62 #define MOS9dphigd_dl MOS9sens + 63 #define MOS9dphigb_dl MOS9sens + 64 #define MOS9dphibs_dl MOS9sens + 65 #define MOS9dphibd_dl MOS9sens + 66 #define MOS9dphigs_dw MOS9sens + 67 #define MOS9dphigd_dw MOS9sens + 68 #define MOS9dphigb_dw MOS9sens + 69 #define MOS9dphibs_dw MOS9sens + 70 #define MOS9dphibd_dw MOS9sens + 71 /* distortion stuff */ /* * naming convention: * x = vgs * y = vbs * z = vds * cdr = cdrain */ #define MOS9NDCOEFFS 30 #ifndef NODISTO double MOS9dCoeffs[MOS9NDCOEFFS]; #else /* NODISTO */ double *MOS9dCoeffs; #endif /* NODISTO */ #ifndef CONFIG #define capbs2 MOS9dCoeffs[0] #define capbs3 MOS9dCoeffs[1] #define capbd2 MOS9dCoeffs[2] #define capbd3 MOS9dCoeffs[3] #define gbs2 MOS9dCoeffs[4] #define gbs3 MOS9dCoeffs[5] #define gbd2 MOS9dCoeffs[6] #define gbd3 MOS9dCoeffs[7] #define capgb2 MOS9dCoeffs[8] #define capgb3 MOS9dCoeffs[9] #define cdr_x2 MOS9dCoeffs[10] #define cdr_y2 MOS9dCoeffs[11] #define cdr_z2 MOS9dCoeffs[12] #define cdr_xy MOS9dCoeffs[13] #define cdr_yz MOS9dCoeffs[14] #define cdr_xz MOS9dCoeffs[15] #define cdr_x3 MOS9dCoeffs[16] #define cdr_y3 MOS9dCoeffs[17] #define cdr_z3 MOS9dCoeffs[18] #define cdr_x2z MOS9dCoeffs[19] #define cdr_x2y MOS9dCoeffs[20] #define cdr_y2z MOS9dCoeffs[21] #define cdr_xy2 MOS9dCoeffs[22] #define cdr_xz2 MOS9dCoeffs[23] #define cdr_yz2 MOS9dCoeffs[24] #define cdr_xyz MOS9dCoeffs[25] #define capgs2 MOS9dCoeffs[26] #define capgs3 MOS9dCoeffs[27] #define capgd2 MOS9dCoeffs[28] #define capgd3 MOS9dCoeffs[29] #endif /* end distortion coeffs. */ #ifndef NONOISE double MOS9nVar[NSTATVARS][MOS9NSRCS]; #else /* NONOISE */ double **MOS9nVar; #endif /* NONOISE */ } MOS9instance ; #define MOS9vbd MOS9states+ 0 #define MOS9vbs MOS9states+ 1 #define MOS9vgs MOS9states+ 2 #define MOS9vds MOS9states+ 3 /* meyer capacitances */ #define MOS9capgs MOS9states+ 4 /* gate-source capacitor value */ #define MOS9qgs MOS9states+ 5 /* gate-source capacitor charge */ #define MOS9cqgs MOS9states+ 6 /* gate-source capacitor current */ #define MOS9capgd MOS9states+ 7 /* gate-drain capacitor value */ #define MOS9qgd MOS9states+ 8 /* gate-drain capacitor charge */ #define MOS9cqgd MOS9states+ 9 /* gate-drain capacitor current */ #define MOS9capgb MOS9states+ 10/* gate-bulk capacitor value */ #define MOS9qgb MOS9states+ 11 /* gate-bulk capacitor charge */ #define MOS9cqgb MOS9states+ 12 /* gate-bulk capacitor current */ /* diode capacitances */ #define MOS9qbd MOS9states+ 13 /* bulk-drain capacitor charge */ #define MOS9cqbd MOS9states+ 14 /* bulk-drain capacitor current */ #define MOS9qbs MOS9states+ 15 /* bulk-source capacitor charge */ #define MOS9cqbs MOS9states+ 16 /* bulk-source capacitor current */ #define MOS9NUMSTATES 17 #define MOS9sensxpgs MOS9states+17 /* charge sensitivities and their derivatives +18 for the derivatives - pointer to the beginning of the array */ #define MOS9sensxpgd MOS9states+19 #define MOS9sensxpgb MOS9states+21 #define MOS9sensxpbs MOS9states+23 #define MOS9sensxpbd MOS9states+25 #define MOS9numSenStates 10 /* per model data */ /* NOTE: parameters marked 'input - use xxxx' are paramters for * which a temperature correction is applied in MOS9temp, thus * the MOS9xxxx value in the per-instance structure should be used * instead in all calculations */ typedef struct sMOS9model { /* model structure for a resistor */ struct GENmodel gen; #define MOS9modType gen.GENmodType #define MOS9nextModel(inst) ((struct sMOS9model *)((inst)->gen.GENnextModel)) #define MOS9instances(inst) ((MOS9instance *)((inst)->gen.GENinstances)) #define MOS9modName gen.GENmodName int MOS9type; /* device type : 1 = nmos, -1 = pmos */ double MOS9tnom; /* temperature at which parameters measured */ double MOS9latDiff; double MOS9lengthAdjust; /* New parm: mask adjustment to length */ double MOS9widthNarrow; /* New parm to reduce effective width */ double MOS9widthAdjust; /* New parm: mask adjustment to width */ double MOS9delvt0; /* New parm: adjustment to calculated vtO */ double MOS9jctSatCurDensity; /* input - use tSatCurDens*/ double MOS9jctSatCur; /* input - use tSatCur instead */ double MOS9drainResistance; double MOS9sourceResistance; double MOS9sheetResistance; double MOS9transconductance; /* input - use tTransconductance */ double MOS9gateSourceOverlapCapFactor; double MOS9gateDrainOverlapCapFactor; double MOS9gateBulkOverlapCapFactor; double MOS9oxideCapFactor; double MOS9vt0; /* input - use tVto */ double MOS9capBD; /* input - use tCbs */ double MOS9capBS; /* input - use tCbd */ double MOS9bulkCapFactor; /* input - use tCj */ double MOS9sideWallCapFactor; /* input - use tCjsw */ double MOS9bulkJctPotential; /* input - use tBulkPot */ double MOS9bulkJctBotGradingCoeff; double MOS9bulkJctSideGradingCoeff; double MOS9fwdCapDepCoeff; double MOS9phi; /* input - use tPhi */ double MOS9gamma; double MOS9substrateDoping; int MOS9gateType; double MOS9surfaceStateDensity; double MOS9oxideThickness; double MOS9surfaceMobility; /* input - use tSurfMob */ double MOS9eta; double MOS9junctionDepth; double MOS9coeffDepLayWidth; /* xd */ double MOS9narrowFactor; /* delta */ double MOS9delta; /* input delta */ double MOS9fastSurfaceStateDensity; /* nfs */ double MOS9theta; /* theta */ double MOS9maxDriftVel; /* vmax */ double MOS9alpha; /* alpha */ double MOS9kappa; /* kappa */ double MOS9fNcoef; double MOS9fNexp; unsigned MOS9typeGiven :1; unsigned MOS9latDiffGiven :1; unsigned MOS9lengthAdjustGiven :1; unsigned MOS9widthNarrowGiven :1; unsigned MOS9widthAdjustGiven :1; unsigned MOS9delvt0Given :1; unsigned MOS9jctSatCurDensityGiven :1; unsigned MOS9jctSatCurGiven :1; unsigned MOS9drainResistanceGiven :1; unsigned MOS9sourceResistanceGiven :1; unsigned MOS9sheetResistanceGiven :1; unsigned MOS9transconductanceGiven :1; unsigned MOS9gateSourceOverlapCapFactorGiven :1; unsigned MOS9gateDrainOverlapCapFactorGiven :1; unsigned MOS9gateBulkOverlapCapFactorGiven :1; unsigned MOS9vt0Given :1; unsigned MOS9capBDGiven :1; unsigned MOS9capBSGiven :1; unsigned MOS9bulkCapFactorGiven :1; unsigned MOS9sideWallCapFactorGiven :1; unsigned MOS9bulkJctPotentialGiven :1; unsigned MOS9bulkJctBotGradingCoeffGiven :1; unsigned MOS9bulkJctSideGradingCoeffGiven :1; unsigned MOS9fwdCapDepCoeffGiven :1; unsigned MOS9phiGiven :1; unsigned MOS9gammaGiven :1; unsigned MOS9substrateDopingGiven :1; unsigned MOS9gateTypeGiven :1; unsigned MOS9surfaceStateDensityGiven :1; unsigned MOS9oxideThicknessGiven :1; unsigned MOS9surfaceMobilityGiven :1; unsigned MOS9etaGiven :1; unsigned MOS9junctionDepthGiven :1; unsigned MOS9deltaGiven :1; /* delta */ unsigned MOS9fastSurfaceStateDensityGiven :1; /* nfs */ unsigned MOS9thetaGiven :1; /* theta */ unsigned MOS9maxDriftVelGiven :1; /* vmax */ unsigned MOS9kappaGiven :1; /* kappa */ unsigned MOS9tnomGiven :1; /* Tnom was given? */ unsigned MOS9fNcoefGiven :1; unsigned MOS9fNexpGiven :1; } MOS9model; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ /* device parameters */ enum { MOS9_W = 1, MOS9_L, MOS9_AS, MOS9_AD, MOS9_PS, MOS9_PD, MOS9_NRS, MOS9_NRD, MOS9_OFF, MOS9_IC, MOS9_IC_VBS, MOS9_IC_VDS, MOS9_IC_VGS, MOS9_W_SENS, MOS9_L_SENS, MOS9_CB, MOS9_CG, MOS9_CS, MOS9_POWER, MOS9_CGS, MOS9_CGD, MOS9_DNODE, MOS9_GNODE, MOS9_SNODE, MOS9_BNODE, MOS9_DNODEPRIME, MOS9_SNODEPRIME, MOS9_SOURCECONDUCT, MOS9_DRAINCONDUCT, MOS9_VON, MOS9_VDSAT, MOS9_SOURCEVCRIT, MOS9_DRAINVCRIT, MOS9_CD, MOS9_CBS, MOS9_CBD, MOS9_GMBS, MOS9_GM, MOS9_GDS, MOS9_GBD, MOS9_GBS, MOS9_CAPBD, MOS9_CAPBS, MOS9_CAPZEROBIASBD, MOS9_CAPZEROBIASBDSW, MOS9_CAPZEROBIASBS, MOS9_CAPZEROBIASBSSW, MOS9_VBD, MOS9_VBS, MOS9_VGS, MOS9_VDS, MOS9_CAPGS, MOS9_QGS, MOS9_CQGS, MOS9_CAPGD, MOS9_QGD, MOS9_CQGD, MOS9_CAPGB, MOS9_QGB, MOS9_CQGB, MOS9_QBD, MOS9_CQBD, MOS9_QBS, MOS9_CQBS, MOS9_W_SENS_REAL, MOS9_W_SENS_IMAG, MOS9_W_SENS_MAG, MOS9_W_SENS_PH, MOS9_W_SENS_CPLX, MOS9_L_SENS_REAL, MOS9_L_SENS_IMAG, MOS9_L_SENS_MAG, MOS9_L_SENS_PH, MOS9_L_SENS_CPLX, MOS9_W_SENS_DC, MOS9_L_SENS_DC, MOS9_TEMP, MOS9_SOURCERESIST, MOS9_DRAINRESIST, MOS9_M, MOS9_DTEMP, }; /* model parameters */ enum { MOS9_MOD_VTO = 101, MOS9_MOD_KP, MOS9_MOD_GAMMA, MOS9_MOD_PHI, MOS9_MOD_RD, MOS9_MOD_RS, MOS9_MOD_CBD, MOS9_MOD_CBS, MOS9_MOD_IS, MOS9_MOD_PB, MOS9_MOD_CGSO, MOS9_MOD_CGDO, MOS9_MOD_CGBO, MOS9_MOD_RSH, MOS9_MOD_CJ, MOS9_MOD_MJ, MOS9_MOD_CJSW, MOS9_MOD_MJSW, MOS9_MOD_JS, MOS9_MOD_TOX, MOS9_MOD_LD, MOS9_MOD_U0, MOS9_MOD_FC, MOS9_MOD_NSUB, MOS9_MOD_TPG, MOS9_MOD_NSS, MOS9_MOD_ETA, MOS9_MOD_DELTA, MOS9_MOD_NFS, MOS9_MOD_THETA, MOS9_MOD_VMAX, MOS9_MOD_KAPPA, MOS9_MOD_NMOS, MOS9_MOD_PMOS, MOS9_MOD_XJ, MOS9_MOD_UEXP, MOS9_MOD_NEFF, MOS9_MOD_XD, MOS9_MOD_ALPHA, MOS9_DELTA, MOS9_MOD_TNOM, MOS9_MOD_KF, MOS9_MOD_AF, MOS9_MOD_TYPE, MOS9_MOD_XL, MOS9_MOD_WD, MOS9_MOD_XW, MOS9_MOD_DELVTO, }; /* device questions */ /* model questions */ #include "mos9ext.h" #endif /*MOS9*/ tmpk8ny_4pz/src/spicelib/devices/mos9/mos9trun.c0000644000175000017500000000140313546075722022014 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Alan Gillespie **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos9defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS9trunc( GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { MOS9model *model = (MOS9model *)inModel; MOS9instance *here; for( ; model != NULL; model = MOS9nextModel(model)) { for(here=MOS9instances(model);here!=NULL;here = MOS9nextInstance(here)){ CKTterr(here->MOS9qgs,ckt,timeStep); CKTterr(here->MOS9qgd,ckt,timeStep); CKTterr(here->MOS9qgb,ckt,timeStep); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos9/mos9noi.c0000644000175000017500000001323413546075722021616 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Gary W. Ng Modified: Alan Gillespie **********/ #include "ngspice/ngspice.h" #include "mos9defs.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" /* * MOS9noise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with MOSFET's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the MOSFET's is summed with the variable "OnDens". */ int MOS9noise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; MOS9model *firstModel = (MOS9model *) genmodel; MOS9model *model; MOS9instance *inst; double tempOnoise; double tempInoise; double noizDens[MOS9NSRCS]; double lnNdens[MOS9NSRCS]; int i; /* define the names of the noise sources */ static char *MOS9nNames[MOS9NSRCS] = { /* Note that we have to keep the order */ "_rd", /* noise due to rd */ /* consistent with the index definitions */ "_rs", /* noise due to rs */ /* in MOS9defs.h */ "_id", /* noise due to id */ "_1overf", /* flicker (1/f) noise */ "" /* total transistor noise */ }; for (model=firstModel; model != NULL; model=MOS9nextModel(model)) { for (inst=MOS9instances(model); inst != NULL; inst=MOS9nextInstance(inst)) { switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i=0; i < MOS9NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_%s%s", inst->MOS9name, MOS9nNames[i]); } break; case INT_NOIZ: for (i=0; i < MOS9NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total_%s%s", inst->MOS9name, MOS9nNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total_%s%s", inst->MOS9name, MOS9nNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: NevalSrc(&noizDens[MOS9RDNOIZ],&lnNdens[MOS9RDNOIZ], ckt,THERMNOISE,inst->MOS9dNodePrime,inst->MOS9dNode, inst->MOS9drainConductance); NevalSrc(&noizDens[MOS9RSNOIZ],&lnNdens[MOS9RSNOIZ], ckt,THERMNOISE,inst->MOS9sNodePrime,inst->MOS9sNode, inst->MOS9sourceConductance); NevalSrc(&noizDens[MOS9IDNOIZ],&lnNdens[MOS9IDNOIZ], ckt,THERMNOISE,inst->MOS9dNodePrime,inst->MOS9sNodePrime, (2.0/3.0 * fabs(inst->MOS9gm))); NevalSrc(&noizDens[MOS9FLNOIZ], NULL, ckt, N_GAIN,inst->MOS9dNodePrime, inst->MOS9sNodePrime, (double)0.0); noizDens[MOS9FLNOIZ] *= model->MOS9fNcoef * exp(model->MOS9fNexp * log(MAX(fabs(inst->MOS9cd),N_MINLOG))) / (data->freq * (inst->MOS9w - 2*model->MOS9widthNarrow) * inst->MOS9m * (inst->MOS9l - 2*model->MOS9latDiff) * model->MOS9oxideCapFactor * model->MOS9oxideCapFactor); lnNdens[MOS9FLNOIZ] = log(MAX(noizDens[MOS9FLNOIZ],N_MINLOG)); noizDens[MOS9TOTNOIZ] = noizDens[MOS9RDNOIZ] + noizDens[MOS9RSNOIZ] + noizDens[MOS9IDNOIZ] + noizDens[MOS9FLNOIZ]; lnNdens[MOS9TOTNOIZ] = log(MAX(noizDens[MOS9TOTNOIZ], N_MINLOG)); *OnDens += noizDens[MOS9TOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to */ /* initialize our "history" variables */ for (i=0; i < MOS9NSRCS; i++) { inst->MOS9nVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i=0; i < MOS9NSRCS; i++) { inst->MOS9nVar[OUTNOIZ][i] = 0.0; inst->MOS9nVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0 (we have to integrate) */ for (i=0; i < MOS9NSRCS; i++) { if (i != MOS9TOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], inst->MOS9nVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv , lnNdens[i] + data->lnGainInv, inst->MOS9nVar[LNLSTDENS][i] + data->lnGainInv, data); inst->MOS9nVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { inst->MOS9nVar[OUTNOIZ][i] += tempOnoise; inst->MOS9nVar[OUTNOIZ][MOS9TOTNOIZ] += tempOnoise; inst->MOS9nVar[INNOIZ][i] += tempInoise; inst->MOS9nVar[INNOIZ][MOS9TOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i=0; i < MOS9NSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i=0; i < MOS9NSRCS; i++) { data->outpVector[data->outNumber++] = inst->MOS9nVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = inst->MOS9nVar[INNOIZ][i]; } } /* if */ break; } /* switch (mode) */ break; case N_CLOSE: return (OK); /* do nothing, the main calling routine will close */ break; /* the plots */ } /* switch (operation) */ } /* for inst */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos9/mos9conv.c0000644000175000017500000000640313546075722021776 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Alan Gillespie **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos9defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS9convTest(GENmodel *inModel, CKTcircuit *ckt) { MOS9model *model = (MOS9model *)inModel; MOS9instance *here; double delvbs; double delvbd; double delvgs; double delvds; double delvgd; double cbhat; double cdhat; double vbs; double vbd; double vgs; double vds; double vgd; double vgdo; double tol; for( ; model != NULL; model = MOS9nextModel(model)) { for(here = MOS9instances(model); here!= NULL; here = MOS9nextInstance(here)) { vbs = model->MOS9type * ( *(ckt->CKTrhs+here->MOS9bNode) - *(ckt->CKTrhs+here->MOS9sNodePrime)); vgs = model->MOS9type * ( *(ckt->CKTrhs+here->MOS9gNode) - *(ckt->CKTrhs+here->MOS9sNodePrime)); vds = model->MOS9type * ( *(ckt->CKTrhs+here->MOS9dNodePrime) - *(ckt->CKTrhs+here->MOS9sNodePrime)); vbd=vbs-vds; vgd=vgs-vds; vgdo = *(ckt->CKTstate0 + here->MOS9vgs) - *(ckt->CKTstate0 + here->MOS9vds); delvbs = vbs - *(ckt->CKTstate0 + here->MOS9vbs); delvbd = vbd - *(ckt->CKTstate0 + here->MOS9vbd); delvgs = vgs - *(ckt->CKTstate0 + here->MOS9vgs); delvds = vds - *(ckt->CKTstate0 + here->MOS9vds); delvgd = vgd-vgdo; /* these are needed for convergence testing */ if (here->MOS9mode >= 0) { cdhat= here->MOS9cd- here->MOS9gbd * delvbd + here->MOS9gmbs * delvbs + here->MOS9gm * delvgs + here->MOS9gds * delvds ; } else { cdhat= here->MOS9cd - ( here->MOS9gbd - here->MOS9gmbs) * delvbd - here->MOS9gm * delvgd + here->MOS9gds * delvds ; } cbhat= here->MOS9cbs + here->MOS9cbd + here->MOS9gbd * delvbd + here->MOS9gbs * delvbs ; /* * check convergence */ tol=ckt->CKTreltol*MAX(fabs(cdhat),fabs(here->MOS9cd))+ ckt->CKTabstol; if (fabs(cdhat-here->MOS9cd) >= tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue, we haven't converged */ } else { tol=ckt->CKTreltol* MAX(fabs(cbhat),fabs(here->MOS9cbs+here->MOS9cbd)) + ckt->CKTabstol; if (fabs(cbhat-(here->MOS9cbs+here->MOS9cbd)) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue, we haven't converged*/ } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos9/mos9load.c0000644000175000017500000014575213546075722021763 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Alan Gillespie **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "mos9defs.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS9load(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current value into the * sparse matrix previously provided */ { MOS9model *model = (MOS9model *)inModel; MOS9instance *here; double Beta; double DrainSatCur; double EffectiveLength; double EffectiveWidth; double GateBulkOverlapCap; double GateDrainOverlapCap; double GateSourceOverlapCap; double OxideCap; double SourceSatCur; double arg; double cbhat; double cdhat; double cdrain; double cdreq; double ceq; double ceqbd; double ceqbs; double ceqgb; double ceqgd; double ceqgs; double delvbd; double delvbs; double delvds; double delvgd; double delvgs; double evbd; double evbs; double gcgb; double gcgd; double gcgs; double geq; double sarg; double sargsw; double vbd; double vbs; double vds; double vdsat; double vgb1; double vgb; double vgd1; double vgd; double vgdo; double vgs1; double vgs; double von; #ifndef PREDICTOR double xfact = 0.0; #endif int xnrm; int xrev; double capgs = 0.0; /* total gate-source capacitance */ double capgd = 0.0; /* total gate-drain capacitance */ double capgb = 0.0; /* total gate-bulk capacitance */ int Check; #ifndef NOBYPASS double tempv; #endif /*NOBYPASS*/ int error; #ifdef CAPBYPASS int senflag; #endif /* CAPBYPASS */ int SenCond; double vt; /* vt at instance temperature */ #ifdef CAPBYPASS senflag = 0; #endif /* CAPBYPASS */ if(ckt->CKTsenInfo){ if(ckt->CKTsenInfo->SENstatus == PERTURBATION) { if((ckt->CKTsenInfo->SENmode == ACSEN)|| (ckt->CKTsenInfo->SENmode == TRANSEN)){ #ifdef CAPBYPASS senflag = 1; #endif /* CAPBYPASS */ } goto next; } } /* loop through all the MOS9 device models */ next: for( ; model != NULL; model = MOS9nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS9instances(model); here != NULL ; here=MOS9nextInstance(here)) { vt = CONSTKoverQ * here->MOS9temp; Check=1; if(ckt->CKTsenInfo){ #ifdef SENSDEBUG printf("MOS9load \n"); #endif /* SENSDEBUG */ if(ckt->CKTsenInfo->SENstatus == PERTURBATION) if(here->MOS9senPertFlag == OFF)continue; } SenCond = ckt->CKTsenInfo && here->MOS9senPertFlag; /* first, we compute a few useful values - these could be * pre-computed, but for historical reasons are still done * here. They may be moved at the expense of instance size */ EffectiveWidth=here->MOS9w-2*model->MOS9widthNarrow+ model->MOS9widthAdjust; EffectiveLength=here->MOS9l - 2*model->MOS9latDiff+ model->MOS9lengthAdjust; if( (here->MOS9tSatCurDens == 0) || (here->MOS9drainArea == 0) || (here->MOS9sourceArea == 0)) { DrainSatCur = here->MOS9m * here->MOS9tSatCur; SourceSatCur = here->MOS9m * here->MOS9tSatCur; } else { DrainSatCur = here->MOS9m * here->MOS9tSatCurDens * here->MOS9drainArea; SourceSatCur = here->MOS9m * here->MOS9tSatCurDens * here->MOS9sourceArea; } GateSourceOverlapCap = model->MOS9gateSourceOverlapCapFactor * here->MOS9m * EffectiveWidth; GateDrainOverlapCap = model->MOS9gateDrainOverlapCapFactor * here->MOS9m * EffectiveWidth; GateBulkOverlapCap = model->MOS9gateBulkOverlapCapFactor * here->MOS9m * EffectiveLength; Beta = here->MOS9tTransconductance * here->MOS9m * EffectiveWidth/EffectiveLength; OxideCap = model->MOS9oxideCapFactor * EffectiveLength * here->MOS9m * EffectiveWidth; if(SenCond){ #ifdef SENSDEBUG printf("MOS9senPertFlag = ON \n"); #endif /* SENSDEBUG */ if((ckt->CKTsenInfo->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)) { vgs = *(ckt->CKTstate1 + here->MOS9vgs); vds = *(ckt->CKTstate1 + here->MOS9vds); vbs = *(ckt->CKTstate1 + here->MOS9vbs); vbd = *(ckt->CKTstate1 + here->MOS9vbd); vgb = vgs - vbs; vgd = vgs - vds; } else if (ckt->CKTsenInfo->SENmode == ACSEN){ vgb = model->MOS9type * ( *(ckt->CKTrhsOp+here->MOS9gNode) - *(ckt->CKTrhsOp+here->MOS9bNode)); vbs = *(ckt->CKTstate0 + here->MOS9vbs); vbd = *(ckt->CKTstate0 + here->MOS9vbd); vgd = vgb + vbd ; vgs = vgb + vbs ; vds = vbs - vbd ; } else{ vgs = *(ckt->CKTstate0 + here->MOS9vgs); vds = *(ckt->CKTstate0 + here->MOS9vds); vbs = *(ckt->CKTstate0 + here->MOS9vbs); vbd = *(ckt->CKTstate0 + here->MOS9vbd); vgb = vgs - vbs; vgd = vgs - vds; } #ifdef SENSDEBUG printf(" vbs = %.7e ,vbd = %.7e,vgb = %.7e\n",vbs,vbd,vgb); printf(" vgs = %.7e ,vds = %.7e,vgd = %.7e\n",vgs,vds,vgd); #endif /* SENSDEBUG */ goto next1; } /* * ok - now to do the start-up operations * * we must get values for vbs, vds, and vgs from somewhere * so we either predict them or recover them from last iteration * These are the two most common cases - either a prediction * step or the general iteration step and they * share some code, so we put them first - others later on */ if((ckt->CKTmode & (MODEINITFLOAT | MODEINITPRED | MODEINITSMSIG | MODEINITTRAN)) || ( (ckt->CKTmode & MODEINITFIX) && (!here->MOS9off) ) ) { #ifndef PREDICTOR if(ckt->CKTmode & (MODEINITPRED | MODEINITTRAN) ) { /* predictor step */ xfact=ckt->CKTdelta/ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->MOS9vbs) = *(ckt->CKTstate1 + here->MOS9vbs); vbs = (1+xfact)* (*(ckt->CKTstate1 + here->MOS9vbs)) -(xfact * (*(ckt->CKTstate2 + here->MOS9vbs))); *(ckt->CKTstate0 + here->MOS9vgs) = *(ckt->CKTstate1 + here->MOS9vgs); vgs = (1+xfact)* (*(ckt->CKTstate1 + here->MOS9vgs)) -(xfact * (*(ckt->CKTstate2 + here->MOS9vgs))); *(ckt->CKTstate0 + here->MOS9vds) = *(ckt->CKTstate1 + here->MOS9vds); vds = (1+xfact)* (*(ckt->CKTstate1 + here->MOS9vds)) -(xfact * (*(ckt->CKTstate2 + here->MOS9vds))); *(ckt->CKTstate0 + here->MOS9vbd) = *(ckt->CKTstate0 + here->MOS9vbs)- *(ckt->CKTstate0 + here->MOS9vds); } else { #endif /*PREDICTOR*/ /* general iteration */ vbs = model->MOS9type * ( *(ckt->CKTrhsOld+here->MOS9bNode) - *(ckt->CKTrhsOld+here->MOS9sNodePrime)); vgs = model->MOS9type * ( *(ckt->CKTrhsOld+here->MOS9gNode) - *(ckt->CKTrhsOld+here->MOS9sNodePrime)); vds = model->MOS9type * ( *(ckt->CKTrhsOld+here->MOS9dNodePrime) - *(ckt->CKTrhsOld+here->MOS9sNodePrime)); #ifndef PREDICTOR } #endif /*PREDICTOR*/ /* now some common crunching for some more useful quantities */ vbd=vbs-vds; vgd=vgs-vds; vgdo = *(ckt->CKTstate0 + here->MOS9vgs) - *(ckt->CKTstate0 + here->MOS9vds); delvbs = vbs - *(ckt->CKTstate0 + here->MOS9vbs); delvbd = vbd - *(ckt->CKTstate0 + here->MOS9vbd); delvgs = vgs - *(ckt->CKTstate0 + here->MOS9vgs); delvds = vds - *(ckt->CKTstate0 + here->MOS9vds); delvgd = vgd-vgdo; /* these are needed for convergence testing */ if (here->MOS9mode >= 0) { cdhat= here->MOS9cd- here->MOS9gbd * delvbd + here->MOS9gmbs * delvbs + here->MOS9gm * delvgs + here->MOS9gds * delvds ; } else { cdhat= here->MOS9cd - ( here->MOS9gbd - here->MOS9gmbs) * delvbd - here->MOS9gm * delvgd + here->MOS9gds * delvds ; } cbhat= here->MOS9cbs + here->MOS9cbd + here->MOS9gbd * delvbd + here->MOS9gbs * delvbs ; #ifndef NOBYPASS /* now lets see if we can bypass (ugh) */ /* the following mess should be one if statement, but * many compilers can't handle it all at once, so it * is split into several successive if statements */ tempv = MAX(fabs(cbhat),fabs(here->MOS9cbs + here->MOS9cbd))+ckt->CKTabstol; if((!(ckt->CKTmode & (MODEINITPRED|MODEINITTRAN|MODEINITSMSIG) )) && (ckt->CKTbypass) ) if ( (fabs(cbhat-(here->MOS9cbs + here->MOS9cbd)) < ckt->CKTreltol * tempv)) if( (fabs(delvbs) < (ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->MOS9vbs)))+ ckt->CKTvoltTol))) if ( (fabs(delvbd) < (ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0+here->MOS9vbd)))+ ckt->CKTvoltTol)) ) if( (fabs(delvgs) < (ckt->CKTreltol * MAX(fabs(vgs), fabs(*(ckt->CKTstate0+here->MOS9vgs)))+ ckt->CKTvoltTol))) if ( (fabs(delvds) < (ckt->CKTreltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0+here->MOS9vds)))+ ckt->CKTvoltTol)) ) if( (fabs(cdhat- here->MOS9cd) < ckt->CKTreltol * MAX(fabs(cdhat),fabs( here->MOS9cd)) + ckt->CKTabstol) ) { /* bypass code * * nothing interesting has changed since last * iteration on this device, so we just * copy all the values computed last iteration out * and keep going */ vbs = *(ckt->CKTstate0 + here->MOS9vbs); vbd = *(ckt->CKTstate0 + here->MOS9vbd); vgs = *(ckt->CKTstate0 + here->MOS9vgs); vds = *(ckt->CKTstate0 + here->MOS9vds); vgd = vgs - vds; vgb = vgs - vbs; cdrain = here->MOS9mode * (here->MOS9cd + here->MOS9cbd); if(ckt->CKTmode & (MODETRAN | MODETRANOP)) { capgs = ( *(ckt->CKTstate0+here->MOS9capgs)+ *(ckt->CKTstate1+here->MOS9capgs) + GateSourceOverlapCap ); capgd = ( *(ckt->CKTstate0+here->MOS9capgd)+ *(ckt->CKTstate1+here->MOS9capgd) + GateDrainOverlapCap ); capgb = ( *(ckt->CKTstate0+here->MOS9capgb)+ *(ckt->CKTstate1+here->MOS9capgb) + GateBulkOverlapCap ); } goto bypass; } #endif /*NOBYPASS*/ /* ok - bypass is out, do it the hard way */ von = model->MOS9type * here->MOS9von; #ifndef NODELIMITING /* * limiting * we want to keep device voltages from changing * so fast that the exponentials churn out overflows * and similar rudeness */ if(*(ckt->CKTstate0 + here->MOS9vds) >=0) { vgs = DEVfetlim(vgs,*(ckt->CKTstate0 + here->MOS9vgs) ,von); vds = vgs - vgd; vds = DEVlimvds(vds,*(ckt->CKTstate0 + here->MOS9vds)); vgd = vgs - vds; } else { vgd = DEVfetlim(vgd,vgdo,von); vds = vgs - vgd; if(!(ckt->CKTfixLimit)) { vds = -DEVlimvds(-vds,-(*(ckt->CKTstate0 + here->MOS9vds))); } vgs = vgd + vds; } if(vds >= 0) { vbs = DEVpnjlim(vbs,*(ckt->CKTstate0 + here->MOS9vbs), vt,here->MOS9sourceVcrit,&Check); vbd = vbs-vds; } else { vbd = DEVpnjlim(vbd,*(ckt->CKTstate0 + here->MOS9vbd), vt,here->MOS9drainVcrit,&Check); vbs = vbd + vds; } #endif /*NODELIMITING*/ } else { /* ok - not one of the simple cases, so we have to * look at all of the possibilities for why we were * called. We still just initialize the three voltages */ if((ckt->CKTmode & MODEINITJCT) && !here->MOS9off) { vds= model->MOS9type * here->MOS9icVDS; vgs= model->MOS9type * here->MOS9icVGS; vbs= model->MOS9type * here->MOS9icVBS; if((vds==0) && (vgs==0) && (vbs==0) && ((ckt->CKTmode & (MODETRAN|MODEDCOP|MODEDCTRANCURVE)) || (!(ckt->CKTmode & MODEUIC)))) { vbs = -1; vgs = model->MOS9type * here->MOS9tVto; vds = 0; } } else { vbs=vgs=vds=0; } } /* * now all the preliminaries are over - we can start doing the * real work */ vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; /* * bulk-source and bulk-drain diodes * here we just evaluate the ideal diode current and the * corresponding derivative (conductance). */ next1: if(vbs <= -3*vt) { arg=3*vt/(vbs*CONSTe); arg = arg * arg * arg; here->MOS9cbs = -SourceSatCur*(1+arg)+ckt->CKTgmin*vbs; here->MOS9gbs = SourceSatCur*3*arg/vbs+ckt->CKTgmin; } else { evbs = exp(MIN(MAX_EXP_ARG,vbs/vt)); here->MOS9gbs = SourceSatCur*evbs/vt + ckt->CKTgmin; here->MOS9cbs = SourceSatCur*(evbs-1) + ckt->CKTgmin*vbs; } if(vbd <= -3*vt) { arg=3*vt/(vbd*CONSTe); arg = arg * arg * arg; here->MOS9cbd = -DrainSatCur*(1+arg)+ckt->CKTgmin*vbd; here->MOS9gbd = DrainSatCur*3*arg/vbd+ckt->CKTgmin; } else { evbd = exp(MIN(MAX_EXP_ARG,vbd/vt)); here->MOS9gbd = DrainSatCur*evbd/vt + ckt->CKTgmin; here->MOS9cbd = DrainSatCur*(evbd-1) + ckt->CKTgmin*vbd; } /* now to determine whether the user was able to correctly * identify the source and drain of his device */ if(vds >= 0) { /* normal mode */ here->MOS9mode = 1; } else { /* inverse mode */ here->MOS9mode = -1; } { /* * subroutine moseq3(vds,vbs,vgs,gm,gds,gmbs, * qg,qc,qb,cggb,cgdb,cgsb,cbgb,cbdb,cbsb) */ /* * this routine evaluates the drain current, its derivatives and * the charges associated with the gate, channel and bulk * for mosfets based on semi-empirical equations */ /* common /mosarg/ vto,beta,gamma,phi,phib,cox,xnsub,xnfs,xd,xj,xld, 1 xlamda,uo,uexp,vbp,utra,vmax,xneff,xl,xw,vbi,von,vdsat,qspof, 2 beta0,beta1,cdrain,xqco,xqc,fnarrw,fshort,lev common /status/ omega,time,delta,delold(7),ag(7),vt,xni,egfet, 1 xmu,sfactr,mode,modedc,icalc,initf,method,iord,maxord,noncon, 2 iterno,itemno,nosolv,modac,ipiv,ivmflg,ipostp,iscrch,iofile common /knstnt/ twopi,xlog2,xlog10,root2,rad,boltz,charge,ctok, 1 gmin,reltol,abstol,vntol,trtol,chgtol,eps0,epssil,epsox, 2 pivtol,pivrel */ /* equivalence (xlamda,alpha),(vbp,theta),(uexp,eta),(utra,xkappa)*/ double coeff0 = 0.0631353e0; double coeff1 = 0.8013292e0; double coeff2 = -0.01110777e0; double oneoverxl; /* 1/effective length */ double eta; /* eta from model after length factor */ double phibs; /* phi - vbs */ double sqphbs; /* square root of phibs */ double dsqdvb; /* */ double sqphis; /* square root of phi */ double sqphs3; /* square root of phi cubed */ double wps; double oneoverxj; /* 1/junction depth */ double xjonxl; /* junction depth/effective length */ double djonxj; double wponxj; double arga; double argb; double argc; double dwpdvb; double dadvb; double dbdvb; double gammas; double fbodys; double fbody; double onfbdy; double qbonco; double vbix; double wconxj; double dfsdvb; double dfbdvb; double dqbdvb; double vth; double dvtdvb; double csonco; double cdonco; double dxndvb = 0.0; double dvodvb = 0.0; double dvodvd = 0.0; double vgsx; double dvtdvd; double onfg; double fgate; double us; double dfgdvg; double dfgdvd; double dfgdvb; double dvsdvg; double dvsdvb; double dvsdvd; double xn = 0.0; double vdsc; double onvdsc = 0.0; double dvsdga; double vdsx; double dcodvb; double cdnorm; double cdo; double cd1; double fdrain = 0.0; double fd2; double dfddvg = 0.0; double dfddvb = 0.0; double dfddvd = 0.0; double gdsat; double cdsat; double gdoncd; double gdonfd; double gdonfg; double dgdvg; double dgdvd; double dgdvb; double emax; double emongd; double demdvg; double demdvd; double demdvb; double delxl; double dldvd; double dldem; double ddldvg; double ddldvd; double ddldvb; double dlonxl; double xlfact; double diddl; double gds0 = 0.0; double emoncd; double ondvt; double onxn; double wfact; double gms; double gmw; double fshort; /* * bypasses the computation of charges */ /* * reference cdrain equations to source and * charge equations to bulk */ vdsat = 0.0; oneoverxl = 1.0/EffectiveLength; eta = model->MOS9eta * 8.15e-22/(model->MOS9oxideCapFactor* EffectiveLength*EffectiveLength*EffectiveLength); /* *.....square root term */ if ( (here->MOS9mode==1?vbs:vbd) <= 0.0 ) { phibs = here->MOS9tPhi-(here->MOS9mode==1?vbs:vbd); sqphbs = sqrt(phibs); dsqdvb = -0.5/sqphbs; } else { sqphis = sqrt(here->MOS9tPhi); sqphs3 = here->MOS9tPhi*sqphis; sqphbs = sqphis/(1.0+(here->MOS9mode==1?vbs:vbd)/ (here->MOS9tPhi+here->MOS9tPhi)); phibs = sqphbs*sqphbs; dsqdvb = -phibs/(sqphs3+sqphs3); } /* *.....short channel effect factor */ if ( (model->MOS9junctionDepth != 0.0) && (model->MOS9coeffDepLayWidth != 0.0) ) { wps = model->MOS9coeffDepLayWidth*sqphbs; oneoverxj = 1.0/model->MOS9junctionDepth; xjonxl = model->MOS9junctionDepth*oneoverxl; djonxj = model->MOS9latDiff*oneoverxj; wponxj = wps*oneoverxj; wconxj = coeff0+coeff1*wponxj+coeff2*wponxj*wponxj; arga = wconxj+djonxj; argc = wponxj/(1.0+wponxj); argb = sqrt(1.0-argc*argc); fshort = 1.0-xjonxl*(arga*argb-djonxj); dwpdvb = model->MOS9coeffDepLayWidth*dsqdvb; dadvb = (coeff1+coeff2*(wponxj+wponxj))*dwpdvb*oneoverxj; dbdvb = -argc*argc*(1.0-argc)*dwpdvb/(argb*wps); dfsdvb = -xjonxl*(dadvb*argb+arga*dbdvb); } else { fshort = 1.0; dfsdvb = 0.0; } /* *.....body effect */ gammas = model->MOS9gamma*fshort; fbodys = 0.5*gammas/(sqphbs+sqphbs); fbody = fbodys+model->MOS9narrowFactor/EffectiveWidth; onfbdy = 1.0/(1.0+fbody); dfbdvb = -fbodys*dsqdvb/sqphbs+fbodys*dfsdvb/fshort; qbonco =gammas*sqphbs+model->MOS9narrowFactor*phibs/EffectiveWidth; dqbdvb = gammas*dsqdvb+model->MOS9gamma*dfsdvb*sqphbs- model->MOS9narrowFactor/EffectiveWidth; /* *.....static feedback effect */ vbix = here->MOS9tVbi*model->MOS9type-eta*(here->MOS9mode*vds); /* *.....threshold voltage */ vth = vbix+qbonco; dvtdvd = -eta; dvtdvb = dqbdvb; /* *.....joint weak inversion and strong inversion */ von = vth; if ( model->MOS9fastSurfaceStateDensity != 0.0 ) { csonco = CHARGE*model->MOS9fastSurfaceStateDensity * 1e4 /*(cm**2/m**2)*/ *EffectiveLength*EffectiveWidth * here->MOS9m/OxideCap; cdonco = qbonco/(phibs+phibs); xn = 1.0+csonco+cdonco; von = vth+vt*xn; dxndvb = dqbdvb/(phibs+phibs)-qbonco*dsqdvb/(phibs*sqphbs); dvodvd = dvtdvd; dvodvb = dvtdvb+vt*dxndvb; } else { /* *.....cutoff region */ if ( (here->MOS9mode==1?vgs:vgd) <= von ) { cdrain = 0.0; here->MOS9gm = 0.0; here->MOS9gds = 0.0; here->MOS9gmbs = 0.0; goto innerline1000; } } /* *.....device is on */ vgsx = MAX((here->MOS9mode==1?vgs:vgd),von); /* *.....mobility modulation by gate voltage */ onfg = 1.0+model->MOS9theta*(vgsx-vth); fgate = 1.0/onfg; us = here->MOS9tSurfMob * 1e-4 /*(m**2/cm**2)*/ *fgate; dfgdvg = -model->MOS9theta*fgate*fgate; dfgdvd = -dfgdvg*dvtdvd; dfgdvb = -dfgdvg*dvtdvb; /* *.....saturation voltage */ vdsat = (vgsx-vth)*onfbdy; if ( model->MOS9maxDriftVel <= 0.0 ) { dvsdvg = onfbdy; dvsdvd = -dvsdvg*dvtdvd; dvsdvb = -dvsdvg*dvtdvb-vdsat*dfbdvb*onfbdy; } else { vdsc = EffectiveLength*model->MOS9maxDriftVel/us; onvdsc = 1.0/vdsc; arga = (vgsx-vth)*onfbdy; argb = sqrt(arga*arga+vdsc*vdsc); vdsat = arga+vdsc-argb; dvsdga = (1.0-arga/argb)*onfbdy; dvsdvg = dvsdga-(1.0-vdsc/argb)*vdsc*dfgdvg*onfg; dvsdvd = -dvsdvg*dvtdvd; dvsdvb = -dvsdvg*dvtdvb-arga*dvsdga*dfbdvb; } /* *.....current factors in linear region */ vdsx = MIN((here->MOS9mode*vds),vdsat); if ( vdsx == 0.0 ) goto line900; cdo = vgsx-vth-0.5*(1.0+fbody)*vdsx; dcodvb = -dvtdvb-0.5*dfbdvb*vdsx; /* *.....normalized drain current */ cdnorm = cdo*vdsx; here->MOS9gm = vdsx; if ((here->MOS9mode*vds) > vdsat) here->MOS9gds = -dvtdvd*vdsx; else here->MOS9gds = vgsx-vth-(1.0+fbody+dvtdvd)*vdsx; here->MOS9gmbs = dcodvb*vdsx; /* *.....drain current without velocity saturation effect */ cd1 = Beta*cdnorm; Beta = Beta*fgate; cdrain = Beta*cdnorm; here->MOS9gm = Beta*here->MOS9gm+dfgdvg*cd1; here->MOS9gds = Beta*here->MOS9gds+dfgdvd*cd1; here->MOS9gmbs = Beta*here->MOS9gmbs+dfgdvb*cd1; /* *.....velocity saturation factor */ if ( model->MOS9maxDriftVel > 0.0 ) { fdrain = 1.0/(1.0+vdsx*onvdsc); fd2 = fdrain*fdrain; arga = fd2*vdsx*onvdsc*onfg; dfddvg = -dfgdvg*arga; if ((here->MOS9mode*vds) > vdsat) dfddvd = -dfgdvd*arga; else dfddvd = -dfgdvd*arga-fd2*onvdsc; dfddvb = -dfgdvb*arga; /* *.....drain current */ here->MOS9gm = fdrain*here->MOS9gm+dfddvg*cdrain; here->MOS9gds = fdrain*here->MOS9gds+dfddvd*cdrain; here->MOS9gmbs = fdrain*here->MOS9gmbs+dfddvb*cdrain; cdrain = fdrain*cdrain; Beta = Beta*fdrain; } /* *.....channel length modulation */ if ((here->MOS9mode*vds) <= vdsat) { if ( (model->MOS9maxDriftVel > 0.0) || (model->MOS9alpha == 0.0) || (ckt->CKTbadMos3) ) goto line700; else { arga = (here->MOS9mode*vds)/vdsat; delxl = sqrt(model->MOS9kappa*model->MOS9alpha*vdsat/8); dldvd = 4*delxl*arga*arga*arga/vdsat; arga *= arga; arga *= arga; delxl *= arga; ddldvg = 0.0; ddldvd = -dldvd; ddldvb = 0.0; goto line520; } } if ( model->MOS9maxDriftVel <= 0.0 ) goto line510; if (model->MOS9alpha == 0.0) goto line700; cdsat = cdrain; gdsat = cdsat*(1.0-fdrain)*onvdsc; gdsat = MAX(1.0e-12,gdsat); gdoncd = gdsat/cdsat; gdonfd = gdsat/(1.0-fdrain); gdonfg = gdsat*onfg; dgdvg = gdoncd*here->MOS9gm-gdonfd*dfddvg+gdonfg*dfgdvg; dgdvd = gdoncd*here->MOS9gds-gdonfd*dfddvd+gdonfg*dfgdvd; dgdvb = gdoncd*here->MOS9gmbs-gdonfd*dfddvb+gdonfg*dfgdvb; if (ckt->CKTbadMos3) emax = cdsat*oneoverxl/gdsat; else emax = model->MOS9kappa * cdsat*oneoverxl/gdsat; emoncd = emax/cdsat; emongd = emax/gdsat; demdvg = emoncd*here->MOS9gm-emongd*dgdvg; demdvd = emoncd*here->MOS9gds-emongd*dgdvd; demdvb = emoncd*here->MOS9gmbs-emongd*dgdvb; arga = 0.5*emax*model->MOS9alpha; argc = model->MOS9kappa*model->MOS9alpha; argb = sqrt(arga*arga+argc*((here->MOS9mode*vds)-vdsat)); delxl = argb-arga; dldvd = argc/(argb+argb); dldem = 0.5*(arga/argb-1.0)*model->MOS9alpha; ddldvg = dldem*demdvg; ddldvd = dldem*demdvd-dldvd; ddldvb = dldem*demdvb; goto line520; line510: if (ckt->CKTbadMos3) { delxl = sqrt(model->MOS9kappa*((here->MOS9mode*vds)-vdsat)* model->MOS9alpha); dldvd = 0.5*delxl/((here->MOS9mode*vds)-vdsat); } else { delxl = sqrt(model->MOS9kappa*model->MOS9alpha* ((here->MOS9mode*vds)-vdsat+(vdsat/8))); dldvd = 0.5*delxl/((here->MOS9mode*vds)-vdsat+(vdsat/8)); } ddldvg = 0.0; ddldvd = -dldvd; ddldvb = 0.0; /* *.....punch through approximation */ line520: if ( delxl > (0.5*EffectiveLength) ) { delxl = EffectiveLength-(EffectiveLength*EffectiveLength/ (4.0*delxl)); arga = 4.0*(EffectiveLength-delxl)*(EffectiveLength-delxl)/ (EffectiveLength*EffectiveLength); ddldvg = ddldvg*arga; ddldvd = ddldvd*arga; ddldvb = ddldvb*arga; dldvd = dldvd*arga; } /* *.....saturation region */ dlonxl = delxl*oneoverxl; xlfact = 1.0/(1.0-dlonxl); cd1 = cdrain; cdrain = cdrain*xlfact; diddl = cdrain/(EffectiveLength-delxl); here->MOS9gm = here->MOS9gm*xlfact+diddl*ddldvg; here->MOS9gmbs = here->MOS9gmbs*xlfact+diddl*ddldvb; gds0 = diddl*ddldvd; here->MOS9gm = here->MOS9gm+gds0*dvsdvg; here->MOS9gmbs = here->MOS9gmbs+gds0*dvsdvb; here->MOS9gds = here->MOS9gds*xlfact+diddl*dldvd+gds0*dvsdvd; /* here->MOS9gds = (here->MOS9gds*xlfact)+gds0*dvsdvd- (cd1*ddldvd/(EffectiveLength*(1-2*dlonxl+dlonxl*dlonxl)));*/ /* *.....finish strong inversion case */ line700: if ( (here->MOS9mode==1?vgs:vgd) < von ) { /* *.....weak inversion */ onxn = 1.0/xn; ondvt = onxn/vt; wfact = exp( ((here->MOS9mode==1?vgs:vgd)-von)*ondvt ); cdrain = cdrain*wfact; gms = here->MOS9gm*wfact; gmw = cdrain*ondvt; here->MOS9gm = gmw; if ((here->MOS9mode*vds) > vdsat) { here->MOS9gm = here->MOS9gm+gds0*dvsdvg*wfact; } here->MOS9gds = here->MOS9gds*wfact+(gms-gmw)*dvodvd; here->MOS9gmbs = here->MOS9gmbs*wfact+(gms-gmw)*dvodvb-gmw* ((here->MOS9mode==1?vgs:vgd)-von)*onxn*dxndvb; } /* *.....charge computation */ goto innerline1000; /* *.....special case of vds = 0.0d0 */ line900: Beta = Beta*fgate; cdrain = 0.0; here->MOS9gm = 0.0; here->MOS9gds = Beta*(vgsx-vth); here->MOS9gmbs = 0.0; if ( (model->MOS9fastSurfaceStateDensity != 0.0) && ((here->MOS9mode==1?vgs:vgd) < von) ) { here->MOS9gds *=exp(((here->MOS9mode==1?vgs:vgd)-von)/(vt*xn)); } innerline1000:; /* *.....done */ } /* now deal with n vs p polarity */ here->MOS9von = model->MOS9type * von; here->MOS9vdsat = model->MOS9type * vdsat; /* line 490 */ /* * COMPUTE EQUIVALENT DRAIN CURRENT SOURCE */ here->MOS9cd=here->MOS9mode * cdrain - here->MOS9cbd; if (ckt->CKTmode & (MODETRAN | MODETRANOP | MODEINITSMSIG)) { /* * now we do the hard part of the bulk-drain and bulk-source * diode - we evaluate the non-linear capacitance and * charge * * the basic equations are not hard, but the implementation * is somewhat long in an attempt to avoid log/exponential * evaluations */ /* * charge storage elements * *.. bulk-drain and bulk-source depletion capacitances */ #ifdef CAPBYPASS if(((ckt->CKTmode & (MODEINITPRED | MODEINITTRAN) ) || fabs(delvbs) >= ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->MOS9vbs)))+ ckt->CKTvoltTol)|| senflag ) #endif /*CAPBYPASS*/ { /* can't bypass the diode capacitance calculations */ if(here->MOS9Cbs != 0 || here->MOS9Cbssw != 0 ) { if (vbs < here->MOS9tDepCap){ arg=1-vbs/here->MOS9tBulkPot; /* * the following block looks somewhat long and messy, * but since most users use the default grading * coefficients of .5, and sqrt is MUCH faster than an * exp(log()) we use this special case code to buy time. * (as much as 10% of total job time!) */ if(model->MOS9bulkJctBotGradingCoeff == model->MOS9bulkJctSideGradingCoeff) { if(model->MOS9bulkJctBotGradingCoeff == .5) { sarg = sargsw = 1/sqrt(arg); } else { sarg = sargsw = exp(-model->MOS9bulkJctBotGradingCoeff* log(arg)); } } else { if(model->MOS9bulkJctBotGradingCoeff == .5) { sarg = 1/sqrt(arg); } else { sarg = exp(-model->MOS9bulkJctBotGradingCoeff* log(arg)); } if(model->MOS9bulkJctSideGradingCoeff == .5) { sargsw = 1/sqrt(arg); } else { sargsw =exp(-model->MOS9bulkJctSideGradingCoeff* log(arg)); } } *(ckt->CKTstate0 + here->MOS9qbs) = here->MOS9tBulkPot*(here->MOS9Cbs* (1-arg*sarg)/(1-model->MOS9bulkJctBotGradingCoeff) +here->MOS9Cbssw* (1-arg*sargsw)/ (1-model->MOS9bulkJctSideGradingCoeff)); here->MOS9capbs=here->MOS9Cbs*sarg+ here->MOS9Cbssw*sargsw; } else { *(ckt->CKTstate0 + here->MOS9qbs) = here->MOS9f4s + vbs*(here->MOS9f2s+vbs*(here->MOS9f3s/2)); here->MOS9capbs=here->MOS9f2s+here->MOS9f3s*vbs; } } else { *(ckt->CKTstate0 + here->MOS9qbs) = 0; here->MOS9capbs=0; } } #ifdef CAPBYPASS if(((ckt->CKTmode & (MODEINITPRED | MODEINITTRAN) ) || fabs(delvbd) >= ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0+here->MOS9vbd)))+ ckt->CKTvoltTol)|| senflag ) #endif /*CAPBYPASS*/ /* can't bypass the diode capacitance calculations */ { if(here->MOS9Cbd != 0 || here->MOS9Cbdsw != 0 ) { if (vbd < here->MOS9tDepCap) { arg=1-vbd/here->MOS9tBulkPot; /* * the following block looks somewhat long and messy, * but since most users use the default grading * coefficients of .5, and sqrt is MUCH faster than an * exp(log()) we use this special case code to buy time. * (as much as 10% of total job time!) */ if(model->MOS9bulkJctBotGradingCoeff == .5 && model->MOS9bulkJctSideGradingCoeff == .5) { sarg = sargsw = 1/sqrt(arg); } else { if(model->MOS9bulkJctBotGradingCoeff == .5) { sarg = 1/sqrt(arg); } else { sarg = exp(-model->MOS9bulkJctBotGradingCoeff* log(arg)); } if(model->MOS9bulkJctSideGradingCoeff == .5) { sargsw = 1/sqrt(arg); } else { sargsw =exp(-model->MOS9bulkJctSideGradingCoeff* log(arg)); } } *(ckt->CKTstate0 + here->MOS9qbd) = here->MOS9tBulkPot*(here->MOS9Cbd* (1-arg*sarg) /(1-model->MOS9bulkJctBotGradingCoeff) +here->MOS9Cbdsw* (1-arg*sargsw) /(1-model->MOS9bulkJctSideGradingCoeff)); here->MOS9capbd=here->MOS9Cbd*sarg+ here->MOS9Cbdsw*sargsw; } else { *(ckt->CKTstate0 + here->MOS9qbd) = here->MOS9f4d + vbd * (here->MOS9f2d + vbd * here->MOS9f3d/2); here->MOS9capbd=here->MOS9f2d + vbd * here->MOS9f3d; } } else { *(ckt->CKTstate0 + here->MOS9qbd) = 0; here->MOS9capbd = 0; } } if(SenCond && (ckt->CKTsenInfo->SENmode==TRANSEN)) goto next2; if ( ckt->CKTmode & MODETRAN ) { /* (above only excludes tranop, since we're only at this * point if tran or tranop ) */ /* * calculate equivalent conductances and currents for * depletion capacitors */ /* integrate the capacitors and save results */ error = NIintegrate(ckt,&geq,&ceq,here->MOS9capbd, here->MOS9qbd); if(error) return(error); here->MOS9gbd += geq; here->MOS9cbd += *(ckt->CKTstate0 + here->MOS9cqbd); here->MOS9cd -= *(ckt->CKTstate0 + here->MOS9cqbd); error = NIintegrate(ckt,&geq,&ceq,here->MOS9capbs, here->MOS9qbs); if(error) return(error); here->MOS9gbs += geq; here->MOS9cbs += *(ckt->CKTstate0 + here->MOS9cqbs); } } if(SenCond) goto next2; /* * check convergence */ if ( (here->MOS9off == 0) || (!(ckt->CKTmode & (MODEINITFIX|MODEINITSMSIG))) ){ if (Check == 1) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; } } /* save things away for next time */ next2: *(ckt->CKTstate0 + here->MOS9vbs) = vbs; *(ckt->CKTstate0 + here->MOS9vbd) = vbd; *(ckt->CKTstate0 + here->MOS9vgs) = vgs; *(ckt->CKTstate0 + here->MOS9vds) = vds; /* * meyer's capacitor model */ if ( ckt->CKTmode & (MODETRAN | MODETRANOP | MODEINITSMSIG) ) { /* * calculate meyer's capacitors */ /* * new cmeyer - this just evaluates at the current time, * expects you to remember values from previous time * returns 1/2 of non-constant portion of capacitance * you must add in the other half from previous time * and the constant part */ if (here->MOS9mode > 0){ DEVqmeyer (vgs,vgd,vgb,von,vdsat, (ckt->CKTstate0 + here->MOS9capgs), (ckt->CKTstate0 + here->MOS9capgd), (ckt->CKTstate0 + here->MOS9capgb), here->MOS9tPhi,OxideCap); } else { DEVqmeyer (vgd,vgs,vgb,von,vdsat, (ckt->CKTstate0 + here->MOS9capgd), (ckt->CKTstate0 + here->MOS9capgs), (ckt->CKTstate0 + here->MOS9capgb), here->MOS9tPhi,OxideCap); } vgs1 = *(ckt->CKTstate1 + here->MOS9vgs); vgd1 = vgs1 - *(ckt->CKTstate1 + here->MOS9vds); vgb1 = vgs1 - *(ckt->CKTstate1 + here->MOS9vbs); if(ckt->CKTmode & MODETRANOP) { capgs = 2 * *(ckt->CKTstate0+here->MOS9capgs)+ GateSourceOverlapCap ; capgd = 2 * *(ckt->CKTstate0+here->MOS9capgd)+ GateDrainOverlapCap ; capgb = 2 * *(ckt->CKTstate0+here->MOS9capgb)+ GateBulkOverlapCap ; } else { capgs = ( *(ckt->CKTstate0+here->MOS9capgs)+ *(ckt->CKTstate1+here->MOS9capgs) + GateSourceOverlapCap ); capgd = ( *(ckt->CKTstate0+here->MOS9capgd)+ *(ckt->CKTstate1+here->MOS9capgd) + GateDrainOverlapCap ); capgb = ( *(ckt->CKTstate0+here->MOS9capgb)+ *(ckt->CKTstate1+here->MOS9capgb) + GateBulkOverlapCap ); } if(ckt->CKTsenInfo){ here->MOS9cgs = capgs; here->MOS9cgd = capgd; here->MOS9cgb = capgb; } /* * store small-signal parameters (for meyer's model) * all parameters already stored, so done... */ if(SenCond){ if(ckt->CKTsenInfo->SENmode & (DCSEN|ACSEN)) { continue; } } #ifndef PREDICTOR if (ckt->CKTmode & (MODEINITPRED | MODEINITTRAN) ) { *(ckt->CKTstate0 + here->MOS9qgs) = (1+xfact) * *(ckt->CKTstate1 + here->MOS9qgs) - xfact * *(ckt->CKTstate2 + here->MOS9qgs); *(ckt->CKTstate0 + here->MOS9qgd) = (1+xfact) * *(ckt->CKTstate1 + here->MOS9qgd) - xfact * *(ckt->CKTstate2 + here->MOS9qgd); *(ckt->CKTstate0 + here->MOS9qgb) = (1+xfact) * *(ckt->CKTstate1 + here->MOS9qgb) - xfact * *(ckt->CKTstate2 + here->MOS9qgb); } else { #endif /*PREDICTOR*/ if(ckt->CKTmode & MODETRAN) { *(ckt->CKTstate0 + here->MOS9qgs) = (vgs-vgs1)*capgs + *(ckt->CKTstate1 + here->MOS9qgs) ; *(ckt->CKTstate0 + here->MOS9qgd) = (vgd-vgd1)*capgd + *(ckt->CKTstate1 + here->MOS9qgd) ; *(ckt->CKTstate0 + here->MOS9qgb) = (vgb-vgb1)*capgb + *(ckt->CKTstate1 + here->MOS9qgb) ; } else { /* TRANOP only */ *(ckt->CKTstate0 + here->MOS9qgs) = vgs*capgs; *(ckt->CKTstate0 + here->MOS9qgd) = vgd*capgd; *(ckt->CKTstate0 + here->MOS9qgb) = vgb*capgb; } #ifndef PREDICTOR } #endif /*PREDICTOR*/ } #ifndef NOBYPASS bypass: #endif if(SenCond) continue; if ( (ckt->CKTmode & (MODEINITTRAN)) || (! (ckt->CKTmode & (MODETRAN)) ) ) { /* * initialize to zero charge conductances * and current */ gcgs=0; ceqgs=0; gcgd=0; ceqgd=0; gcgb=0; ceqgb=0; } else { if(capgs == 0) *(ckt->CKTstate0 + here->MOS9cqgs) =0; if(capgd == 0) *(ckt->CKTstate0 + here->MOS9cqgd) =0; if(capgb == 0) *(ckt->CKTstate0 + here->MOS9cqgb) =0; /* * calculate equivalent conductances and currents for * meyer"s capacitors */ error = NIintegrate(ckt,&gcgs,&ceqgs,capgs,here->MOS9qgs); if(error) return(error); error = NIintegrate(ckt,&gcgd,&ceqgd,capgd,here->MOS9qgd); if(error) return(error); error = NIintegrate(ckt,&gcgb,&ceqgb,capgb,here->MOS9qgb); if(error) return(error); ceqgs=ceqgs-gcgs*vgs+ckt->CKTag[0]* *(ckt->CKTstate0 + here->MOS9qgs); ceqgd=ceqgd-gcgd*vgd+ckt->CKTag[0]* *(ckt->CKTstate0 + here->MOS9qgd); ceqgb=ceqgb-gcgb*vgb+ckt->CKTag[0]* *(ckt->CKTstate0 + here->MOS9qgb); } /* * store charge storage info for meyer's cap in lx table */ /* * load current vector */ ceqbs = model->MOS9type * (here->MOS9cbs-(here->MOS9gbs)*vbs); ceqbd = model->MOS9type * (here->MOS9cbd-(here->MOS9gbd)*vbd); if (here->MOS9mode >= 0) { xnrm=1; xrev=0; cdreq=model->MOS9type*(cdrain-here->MOS9gds*vds- here->MOS9gm*vgs-here->MOS9gmbs*vbs); } else { xnrm=0; xrev=1; cdreq = -(model->MOS9type)*(cdrain-here->MOS9gds*(-vds)- here->MOS9gm*vgd-here->MOS9gmbs*vbd); } *(ckt->CKTrhs + here->MOS9gNode) -= (model->MOS9type * (ceqgs + ceqgb + ceqgd)); *(ckt->CKTrhs + here->MOS9bNode) -= (ceqbs + ceqbd - model->MOS9type * ceqgb); *(ckt->CKTrhs + here->MOS9dNodePrime) += (ceqbd - cdreq + model->MOS9type * ceqgd); *(ckt->CKTrhs + here->MOS9sNodePrime) += cdreq + ceqbs + model->MOS9type * ceqgs; /* * load y matrix */ /*printf(" loading %s at time %g\n",here->MOS9name,ckt->CKTtime);*/ /*printf("%g %g %g %g %g\n", here->MOS9drainConductance,gcgd+gcgs+gcgb, here->MOS9sourceConductance,here->MOS9gbd,here->MOS9gbs);*/ /*printf("%g %g %g %g %g\n",-gcgb,0.0,0.0,here->MOS9gds,here->MOS9gm);*/ /*printf("%g %g %g %g %g\n", here->MOS9gds,here->MOS9gmbs,gcgd,-gcgs,-gcgd);*/ /*printf("%g %g %g %g %g\n", -gcgs,-gcgd,0.0,-gcgs,0.0);*/ *(here->MOS9DdPtr) += (here->MOS9drainConductance); *(here->MOS9GgPtr) += ((gcgd+gcgs+gcgb)); *(here->MOS9SsPtr) += (here->MOS9sourceConductance); *(here->MOS9BbPtr) += (here->MOS9gbd+here->MOS9gbs+gcgb); *(here->MOS9DPdpPtr) += (here->MOS9drainConductance+here->MOS9gds+ here->MOS9gbd+xrev*(here->MOS9gm+here->MOS9gmbs)+gcgd); *(here->MOS9SPspPtr) += (here->MOS9sourceConductance+here->MOS9gds+ here->MOS9gbs+xnrm*(here->MOS9gm+here->MOS9gmbs)+gcgs); *(here->MOS9DdpPtr) += (-here->MOS9drainConductance); *(here->MOS9GbPtr) -= gcgb; *(here->MOS9GdpPtr) -= gcgd; *(here->MOS9GspPtr) -= gcgs; *(here->MOS9SspPtr) += (-here->MOS9sourceConductance); *(here->MOS9BgPtr) -= gcgb; *(here->MOS9BdpPtr) -= here->MOS9gbd; *(here->MOS9BspPtr) -= here->MOS9gbs; *(here->MOS9DPdPtr) += (-here->MOS9drainConductance); *(here->MOS9DPgPtr) += ((xnrm-xrev)*here->MOS9gm-gcgd); *(here->MOS9DPbPtr) += (-here->MOS9gbd+(xnrm-xrev)*here->MOS9gmbs); *(here->MOS9DPspPtr) += (-here->MOS9gds- xnrm*(here->MOS9gm+here->MOS9gmbs)); *(here->MOS9SPgPtr) += (-(xnrm-xrev)*here->MOS9gm-gcgs); *(here->MOS9SPsPtr) += (-here->MOS9sourceConductance); *(here->MOS9SPbPtr) += (-here->MOS9gbs-(xnrm-xrev)*here->MOS9gmbs); *(here->MOS9SPdpPtr) += (-here->MOS9gds- xrev*(here->MOS9gm+here->MOS9gmbs)); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos9/mos9del.c0000644000175000017500000000062413546075722021574 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Alan Gillespie **********/ #include "ngspice/ngspice.h" #include "mos9defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS9delete(GENinstance *gen_inst) { MOS9instance *inst = (MOS9instance *) gen_inst; FREE(inst->MOS9sens); return OK; } tmpk8ny_4pz/src/spicelib/devices/mos9/mos9acld.c0000644000175000017500000001112013546075722021724 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Alan Gillespie **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos9defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS9acLoad(GENmodel *inModel, CKTcircuit *ckt) { MOS9model *model = (MOS9model *)inModel; MOS9instance *here; int xnrm; int xrev; double EffectiveLength; double EffectiveWidth; double xgs; double xgd; double xgb; double xbd; double xbs; double capgs; double capgd; double capgb; double GateBulkOverlapCap; double GateDrainOverlapCap; double GateSourceOverlapCap; for( ; model != NULL; model = MOS9nextModel(model)) { for(here = MOS9instances(model); here!= NULL; here = MOS9nextInstance(here)) { if (here->MOS9mode < 0) { xnrm=0; xrev=1; } else { xnrm=1; xrev=0; } /* * charge oriented model parameters */ EffectiveWidth=here->MOS9w-2*model->MOS9widthNarrow+ model->MOS9widthAdjust; EffectiveLength=here->MOS9l - 2*model->MOS9latDiff+ model->MOS9lengthAdjust; GateSourceOverlapCap = model->MOS9gateSourceOverlapCapFactor * here->MOS9m * EffectiveWidth; GateDrainOverlapCap = model->MOS9gateDrainOverlapCapFactor * here->MOS9m * EffectiveWidth; GateBulkOverlapCap = model->MOS9gateBulkOverlapCapFactor * here->MOS9m * EffectiveLength; /* * meyer"s model parameters */ capgs = ( *(ckt->CKTstate0+here->MOS9capgs)+ *(ckt->CKTstate0+here->MOS9capgs) + GateSourceOverlapCap ); capgd = ( *(ckt->CKTstate0+here->MOS9capgd)+ *(ckt->CKTstate0+here->MOS9capgd) + GateDrainOverlapCap ); capgb = ( *(ckt->CKTstate0+here->MOS9capgb)+ *(ckt->CKTstate0+here->MOS9capgb) + GateBulkOverlapCap ); xgs = capgs * ckt->CKTomega; xgd = capgd * ckt->CKTomega; xgb = capgb * ckt->CKTomega; xbd = here->MOS9capbd * ckt->CKTomega; xbs = here->MOS9capbs * ckt->CKTomega; /* * load matrix */ *(here->MOS9GgPtr +1) += xgd+xgs+xgb; *(here->MOS9BbPtr +1) += xgb+xbd+xbs; *(here->MOS9DPdpPtr +1) += xgd+xbd; *(here->MOS9SPspPtr +1) += xgs+xbs; *(here->MOS9GbPtr +1) -= xgb; *(here->MOS9GdpPtr +1) -= xgd; *(here->MOS9GspPtr +1) -= xgs; *(here->MOS9BgPtr +1) -= xgb; *(here->MOS9BdpPtr +1) -= xbd; *(here->MOS9BspPtr +1) -= xbs; *(here->MOS9DPgPtr +1) -= xgd; *(here->MOS9DPbPtr +1) -= xbd; *(here->MOS9SPgPtr +1) -= xgs; *(here->MOS9SPbPtr +1) -= xbs; *(here->MOS9DdPtr) += here->MOS9drainConductance; *(here->MOS9SsPtr) += here->MOS9sourceConductance; *(here->MOS9BbPtr) += here->MOS9gbd+here->MOS9gbs; *(here->MOS9DPdpPtr) += here->MOS9drainConductance+ here->MOS9gds+here->MOS9gbd+ xrev*(here->MOS9gm+here->MOS9gmbs); *(here->MOS9SPspPtr) += here->MOS9sourceConductance+ here->MOS9gds+here->MOS9gbs+ xnrm*(here->MOS9gm+here->MOS9gmbs); *(here->MOS9DdpPtr) -= here->MOS9drainConductance; *(here->MOS9SspPtr) -= here->MOS9sourceConductance; *(here->MOS9BdpPtr) -= here->MOS9gbd; *(here->MOS9BspPtr) -= here->MOS9gbs; *(here->MOS9DPdPtr) -= here->MOS9drainConductance; *(here->MOS9DPgPtr) += (xnrm-xrev)*here->MOS9gm; *(here->MOS9DPbPtr) += -here->MOS9gbd+(xnrm-xrev)*here->MOS9gmbs; *(here->MOS9DPspPtr) -= here->MOS9gds+ xnrm*(here->MOS9gm+here->MOS9gmbs); *(here->MOS9SPgPtr) -= (xnrm-xrev)*here->MOS9gm; *(here->MOS9SPsPtr) -= here->MOS9sourceConductance; *(here->MOS9SPbPtr) -= here->MOS9gbs+(xnrm-xrev)*here->MOS9gmbs; *(here->MOS9SPdpPtr) -= here->MOS9gds+ xrev*(here->MOS9gm+here->MOS9gmbs); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos9/mos9.c0000644000175000017500000002343213546075722021111 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles Modified: Alan Gillespie **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "mos9defs.h" #include "ngspice/suffix.h" IFparm MOS9pTable[] = { /* parameters */ IOPU("m", MOS9_M, IF_REAL , "Multiplier"), IOPU("l", MOS9_L, IF_REAL , "Length"), IOPU("w", MOS9_W, IF_REAL , "Width"), IOPU("ad", MOS9_AD, IF_REAL , "Drain area"), IOPU("as", MOS9_AS, IF_REAL , "Source area"), IOPU("pd", MOS9_PD, IF_REAL , "Drain perimeter"), IOPU("ps", MOS9_PS, IF_REAL , "Source perimeter"), OP("id", MOS9_CD, IF_REAL, "Drain current"), OPR("cd", MOS9_CD, IF_REAL, "Drain current"), OPU("ibd", MOS9_CBD, IF_REAL, "B-D junction current"), OPU("ibs", MOS9_CBS, IF_REAL, "B-S junction current"), OPU("is", MOS9_CS, IF_REAL, "Source current"), OPU("ig", MOS9_CG, IF_REAL, "Gate current"), OPU("ib", MOS9_CB, IF_REAL, "Bulk current"), OP("vgs", MOS9_VGS, IF_REAL, "Gate-Source voltage"), OP("vds", MOS9_VDS, IF_REAL, "Drain-Source voltage"), OP("vbs", MOS9_VBS, IF_REAL, "Bulk-Source voltage"), OPU("vbd", MOS9_VBD, IF_REAL, "Bulk-Drain voltage"), IOPU("nrd", MOS9_NRD, IF_REAL , "Drain squares"), IOPU("nrs", MOS9_NRS, IF_REAL , "Source squares"), IP("off", MOS9_OFF, IF_FLAG , "Device initially off"), IOPAU("icvds", MOS9_IC_VDS, IF_REAL , "Initial D-S voltage"), IOPAU("icvgs", MOS9_IC_VGS, IF_REAL , "Initial G-S voltage"), IOPAU("icvbs", MOS9_IC_VBS, IF_REAL , "Initial B-S voltage"), IOPU("ic", MOS9_IC, IF_REALVEC, "Vector of D-S, G-S, B-S voltages"), IOPU("temp", MOS9_TEMP, IF_REAL , "Instance operating temperature"), IOPU("dtemp", MOS9_DTEMP, IF_REAL , "Instance operating temperature difference"), IP("sens_l", MOS9_L_SENS, IF_FLAG, "flag to request sensitivity WRT length"), IP("sens_w", MOS9_W_SENS, IF_FLAG, "flag to request sensitivity WRT width"), OPU("dnode", MOS9_DNODE, IF_INTEGER, "Number of drain node"), OPU("gnode", MOS9_GNODE, IF_INTEGER, "Number of gate node"), OPU("snode", MOS9_SNODE, IF_INTEGER, "Number of source node"), OPU("bnode", MOS9_BNODE, IF_INTEGER, "Number of bulk node"), OPU("dnodeprime", MOS9_DNODEPRIME,IF_INTEGER,"Number of internal drain node"), OPU("snodeprime", MOS9_SNODEPRIME,IF_INTEGER,"Number of internal source node"), OP("von", MOS9_VON, IF_REAL, "Turn-on voltage"), OP("vdsat", MOS9_VDSAT, IF_REAL, "Saturation drain voltage"), OPU("sourcevcrit", MOS9_SOURCEVCRIT, IF_REAL, "Critical source voltage"), OPU("drainvcrit", MOS9_DRAINVCRIT, IF_REAL, "Critical drain voltage"), OP("rs", MOS9_SOURCERESIST, IF_REAL, "Source resistance"), OPU("sourceconductance", MOS9_SOURCECONDUCT, IF_REAL, "Source conductance"), OP("rd", MOS9_DRAINRESIST, IF_REAL, "Drain resistance"), OPU("drainconductance", MOS9_DRAINCONDUCT, IF_REAL, "Drain conductance"), OP("gm", MOS9_GM, IF_REAL, "Transconductance"), OP("gds", MOS9_GDS, IF_REAL, "Drain-Source conductance"), OP("gmb", MOS9_GMBS, IF_REAL, "Bulk-Source transconductance"), OPR("gmbs", MOS9_GMBS, IF_REAL, "Bulk-Source transconductance"), OPU("gbd", MOS9_GBD, IF_REAL, "Bulk-Drain conductance"), OPU("gbs", MOS9_GBS, IF_REAL, "Bulk-Source conductance"), OP("cbd", MOS9_CAPBD, IF_REAL, "Bulk-Drain capacitance"), OP("cbs", MOS9_CAPBS, IF_REAL, "Bulk-Source capacitance"), OP("cgs", MOS9_CAPGS, IF_REAL, "Gate-Source capacitance"), /* OPR("cgs", MOS9_CGS, IF_REAL , "Gate-Source capacitance"),*/ OP("cgd", MOS9_CAPGD, IF_REAL, "Gate-Drain capacitance"), /* OPR("cgd", MOS9_CGD, IF_REAL , "Gate-Drain capacitance"),*/ OP("cgb", MOS9_CAPGB, IF_REAL, "Gate-Bulk capacitance"), OPU("cqgs",MOS9_CQGS,IF_REAL,"Capacitance due to gate-source charge storage"), OPU("cqgd",MOS9_CQGD, IF_REAL,"Capacitance due to gate-drain charge storage"), OPU("cqgb",MOS9_CQGB, IF_REAL,"Capacitance due to gate-bulk charge storage"), OPU("cqbd",MOS9_CQBD,IF_REAL,"Capacitance due to bulk-drain charge storage"), OPU("cqbs",MOS9_CQBS,IF_REAL,"Capacitance due to bulk-source charge storage"), OPU("cbd0",MOS9_CAPZEROBIASBD,IF_REAL,"Zero-Bias B-D junction capacitance"), OPU("cbdsw0",MOS9_CAPZEROBIASBDSW,IF_REAL, "Zero-Bias B-D sidewall capacitance"), OPU("cbs0",MOS9_CAPZEROBIASBS,IF_REAL,"Zero-Bias B-S junction capacitance"), OPU("cbssw0",MOS9_CAPZEROBIASBSSW,IF_REAL, "Zero-Bias B-S sidewall capacitance"), OPU("qbs", MOS9_QBS, IF_REAL, "Bulk-Source charge storage"), OPU("qgs", MOS9_QGS, IF_REAL, "Gate-Source charge storage"), OPU("qgd", MOS9_QGD, IF_REAL, "Gate-Drain charge storage"), OPU("qgb", MOS9_QGB, IF_REAL, "Gate-Bulk charge storage"), OPU("qbd", MOS9_QBD, IF_REAL, "Bulk-Drain charge storage"), OPU("p", MOS9_POWER, IF_REAL, "Instantaneous power"), OPU("sens_l_dc", MOS9_L_SENS_DC, IF_REAL, "dc sensitivity wrt length"), OPU("sens_l_real",MOS9_L_SENS_REAL, IF_REAL, "real part of ac sensitivity wrt length"), OPU("sens_l_imag",MOS9_L_SENS_IMAG, IF_REAL, "imag part of ac sensitivity wrt length"), OPU("sens_l_cplx",MOS9_L_SENS_CPLX, IF_COMPLEX, "ac sensitivity wrt length"), OPU("sens_l_mag", MOS9_L_SENS_MAG, IF_REAL, "sensitivity wrt l of ac magnitude"), OPU("sens_l_ph", MOS9_L_SENS_PH, IF_REAL, "sensitivity wrt l of ac phase"), OPU("sens_w_dc", MOS9_W_SENS_DC, IF_REAL, "dc sensitivity wrt width"), OPU("sens_w_real",MOS9_W_SENS_REAL, IF_REAL, "real part of ac sensitivity wrt width"), OPU("sens_w_imag",MOS9_W_SENS_IMAG, IF_REAL, "imag part of ac sensitivity wrt width"), OPU("sens_w_mag", MOS9_W_SENS_MAG, IF_REAL, "sensitivity wrt w of ac magnitude"), OPU("sens_w_ph", MOS9_W_SENS_PH, IF_REAL, "sensitivity wrt w of ac phase"), OPU("sens_w_cplx",MOS9_W_SENS_CPLX, IF_COMPLEX, "ac sensitivity wrt width") }; IFparm MOS9mPTable[] = { /* model parameters */ OP("type", MOS9_MOD_TYPE, IF_STRING ,"N-channel or P-channel MOS"), IP("nmos", MOS9_MOD_NMOS, IF_FLAG ,"N type MOSfet model"), IP("pmos", MOS9_MOD_PMOS, IF_FLAG ,"P type MOSfet model"), IOP("vto", MOS9_MOD_VTO, IF_REAL ,"Threshold voltage"), IOPR("vt0", MOS9_MOD_VTO, IF_REAL ,"Threshold voltage"), IOP("kp", MOS9_MOD_KP, IF_REAL ,"Transconductance parameter"), IOP("gamma", MOS9_MOD_GAMMA, IF_REAL ,"Bulk threshold parameter"), IOP("phi", MOS9_MOD_PHI, IF_REAL ,"Surface potential"), IOP("rd", MOS9_MOD_RD, IF_REAL ,"Drain ohmic resistance"), IOP("rs", MOS9_MOD_RS, IF_REAL ,"Source ohmic resistance"), IOPA("cbd", MOS9_MOD_CBD, IF_REAL ,"B-D junction capacitance"), IOPA("cbs", MOS9_MOD_CBS, IF_REAL ,"B-S junction capacitance"), IOP("is", MOS9_MOD_IS, IF_REAL ,"Bulk junction sat. current"), IOP("pb", MOS9_MOD_PB, IF_REAL ,"Bulk junction potential"), IOPA("cgso", MOS9_MOD_CGSO, IF_REAL ,"Gate-source overlap cap."), IOPA("cgdo", MOS9_MOD_CGDO, IF_REAL ,"Gate-drain overlap cap."), IOPA("cgbo", MOS9_MOD_CGBO, IF_REAL ,"Gate-bulk overlap cap."), IOP("rsh", MOS9_MOD_RSH, IF_REAL ,"Sheet resistance"), IOPA("cj", MOS9_MOD_CJ, IF_REAL ,"Bottom junction cap per area"), IOP("mj", MOS9_MOD_MJ, IF_REAL ,"Bottom grading coefficient"), IOPA("cjsw", MOS9_MOD_CJSW, IF_REAL ,"Side junction cap per area"), IOP("mjsw", MOS9_MOD_MJSW, IF_REAL ,"Side grading coefficient"), IOPU("js", MOS9_MOD_JS, IF_REAL ,"Bulk jct. sat. current density"), IOP("tox", MOS9_MOD_TOX, IF_REAL ,"Oxide thickness"), IOP("ld", MOS9_MOD_LD, IF_REAL ,"Lateral diffusion"), IOP("xl", MOS9_MOD_XL, IF_REAL ,"Length mask adjustment"), IOP("wd", MOS9_MOD_WD, IF_REAL ,"Width Narrowing (Diffusion)"), IOP("xw", MOS9_MOD_XW, IF_REAL ,"Width mask adjustment"), IOPU("delvto", MOS9_MOD_DELVTO, IF_REAL ,"Threshold voltage Adjust"), IOPUR("delvt0", MOS9_MOD_DELVTO, IF_REAL ,"Threshold voltage Adjust"), IOP("u0", MOS9_MOD_U0, IF_REAL ,"Surface mobility"), IOPR("uo", MOS9_MOD_U0, IF_REAL ,"Surface mobility"), IOP("fc", MOS9_MOD_FC, IF_REAL ,"Forward bias jct. fit parm."), IOP("nsub", MOS9_MOD_NSUB, IF_REAL ,"Substrate doping"), IOP("tpg", MOS9_MOD_TPG, IF_INTEGER,"Gate type"), IOP("nss", MOS9_MOD_NSS, IF_REAL ,"Surface state density"), IOP("vmax", MOS9_MOD_VMAX, IF_REAL ,"Maximum carrier drift velocity"), IOP("xj", MOS9_MOD_XJ, IF_REAL ,"Junction depth"), IOP("nfs", MOS9_MOD_NFS, IF_REAL ,"Fast surface state density"), IOP("xd", MOS9_MOD_XD, IF_REAL ,"Depletion layer width"), IOP("alpha", MOS9_MOD_ALPHA, IF_REAL ,"Alpha"), IOP("eta", MOS9_MOD_ETA, IF_REAL ,"Vds dependence of threshold voltage"), IOP("delta", MOS9_MOD_DELTA, IF_REAL ,"Width effect on threshold"), IOP("input_delta", MOS9_DELTA, IF_REAL ,""), IOP("theta", MOS9_MOD_THETA, IF_REAL ,"Vgs dependence on mobility"), IOP("kappa", MOS9_MOD_KAPPA, IF_REAL ,"Kappa"), IOPU("tnom", MOS9_MOD_TNOM, IF_REAL ,"Parameter measurement temperature"), IOP("kf", MOS9_MOD_KF, IF_REAL ,"Flicker noise coefficient"), IOP("af", MOS9_MOD_AF, IF_REAL ,"Flicker noise exponent") }; char *MOS9names[] = { "Drain", "Gate", "Source", "Bulk" }; int MOS9nSize = NUMELEMS(MOS9names); int MOS9pTSize = NUMELEMS(MOS9pTable); int MOS9mPTSize = NUMELEMS(MOS9mPTable); int MOS9iSize = sizeof(MOS9instance); int MOS9mSize = sizeof(MOS9model); tmpk8ny_4pz/src/spicelib/devices/mos9/mos9set.c0000644000175000017500000002270713546075722021631 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Alan Gillespie **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mos9defs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* assuming silicon - make definition for epsilon of silicon */ #define EPSSIL (11.7 * 8.854214871e-12) int MOS9setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* load the MOS9 device structure with those pointers needed later * for fast matrix loading */ { register MOS9model *model = (MOS9model *)inModel; register MOS9instance *here; int error; CKTnode *tmp; /* loop through all the MOS9 device models */ for( ; model != NULL; model = MOS9nextModel(model)) { /* perform model defaulting */ if(!model->MOS9typeGiven) { model->MOS9type = NMOS; } if(!model->MOS9latDiffGiven) { model->MOS9latDiff = 0; } if(!model->MOS9lengthAdjustGiven) { model->MOS9lengthAdjust = 0; } if(!model->MOS9widthNarrowGiven) { model->MOS9widthNarrow = 0; } if(!model->MOS9widthAdjustGiven) { model->MOS9widthAdjust = 0; } if(!model->MOS9delvt0Given) { model->MOS9delvt0 = 0; } if(!model->MOS9jctSatCurDensityGiven) { model->MOS9jctSatCurDensity = 0; } if(!model->MOS9jctSatCurGiven) { model->MOS9jctSatCur = 1e-14; } if(!model->MOS9drainResistanceGiven) { model->MOS9drainResistance = 0; } if(!model->MOS9sourceResistanceGiven) { model->MOS9sourceResistance = 0; } if(!model->MOS9sheetResistanceGiven) { model->MOS9sheetResistance = 0; } if(!model->MOS9transconductanceGiven) { model->MOS9transconductance = 2e-5; } if(!model->MOS9gateSourceOverlapCapFactorGiven) { model->MOS9gateSourceOverlapCapFactor = 0; } if(!model->MOS9gateDrainOverlapCapFactorGiven) { model->MOS9gateDrainOverlapCapFactor = 0; } if(!model->MOS9gateBulkOverlapCapFactorGiven) { model->MOS9gateBulkOverlapCapFactor = 0; } if(!model->MOS9vt0Given) { model->MOS9vt0 = 0; } if(!model->MOS9capBDGiven) { model->MOS9capBD = 0; } if(!model->MOS9capBSGiven) { model->MOS9capBS = 0; } if(!model->MOS9bulkCapFactorGiven) { model->MOS9bulkCapFactor = 0; } if(!model->MOS9sideWallCapFactorGiven) { model->MOS9sideWallCapFactor = 0; } if(!model->MOS9bulkJctPotentialGiven) { model->MOS9bulkJctPotential = .8; } if(!model->MOS9bulkJctBotGradingCoeffGiven) { model->MOS9bulkJctBotGradingCoeff = .5; } if(!model->MOS9bulkJctSideGradingCoeffGiven) { model->MOS9bulkJctSideGradingCoeff = .33; } if(!model->MOS9fwdCapDepCoeffGiven) { model->MOS9fwdCapDepCoeff = .5; } if(!model->MOS9phiGiven) { model->MOS9phi = .6; } if(!model->MOS9gammaGiven) { model->MOS9gamma = 0; } if(!model->MOS9deltaGiven) { model->MOS9delta = 0; } if(!model->MOS9maxDriftVelGiven) { model->MOS9maxDriftVel = 0; } if(!model->MOS9junctionDepthGiven) { model->MOS9junctionDepth = 0; } if(!model->MOS9fastSurfaceStateDensityGiven) { model->MOS9fastSurfaceStateDensity = 0; } if(!model->MOS9etaGiven) { model->MOS9eta = 0; } if(!model->MOS9thetaGiven) { model->MOS9theta = 0; } if(!model->MOS9kappaGiven) { model->MOS9kappa = .2; } if(!model->MOS9oxideThicknessGiven) { model->MOS9oxideThickness = 1e-7; } if(!model->MOS9fNcoefGiven) { model->MOS9fNcoef = 0; } if(!model->MOS9fNexpGiven) { model->MOS9fNexp = 1; } /* loop through all the instances of the model */ for (here = MOS9instances(model); here != NULL ; here=MOS9nextInstance(here)) { CKTnode *tmpNode; IFuid tmpName; /* allocate a chunk of the state vector */ here->MOS9states = *states; *states += MOS9NUMSTATES; if(!here->MOS9drainAreaGiven) { here->MOS9drainArea = ckt->CKTdefaultMosAD; } if(!here->MOS9drainPerimiterGiven) { here->MOS9drainPerimiter = 0; } if(!here->MOS9drainSquaresGiven) { here->MOS9drainSquares = 1; } if(!here->MOS9icVBSGiven) { here->MOS9icVBS = 0; } if(!here->MOS9icVDSGiven) { here->MOS9icVDS = 0; } if(!here->MOS9icVGSGiven) { here->MOS9icVGS = 0; } if(!here->MOS9sourcePerimiterGiven) { here->MOS9sourcePerimiter = 0; } if(!here->MOS9sourceSquaresGiven) { here->MOS9sourceSquares = 1; } if(!here->MOS9vdsatGiven) { here->MOS9vdsat = 0; } if(!here->MOS9vonGiven) { here->MOS9von = 0; } if(!here->MOS9modeGiven) { here->MOS9mode = 1; } if((model->MOS9drainResistance != 0 || (model->MOS9sheetResistance != 0 && here->MOS9drainSquares != 0 ) )) { if (here->MOS9dNodePrime==0) { error = CKTmkVolt(ckt,&tmp,here->MOS9name,"internal#drain"); if(error) return(error); here->MOS9dNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->MOS9dNodePrime = here->MOS9dNode; } if((model->MOS9sourceResistance != 0 || (model->MOS9sheetResistance != 0 && here->MOS9sourceSquares != 0 ) )) { if (here->MOS9sNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->MOS9name,"internal#source"); if(error) return(error); here->MOS9sNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->MOS9sNodePrime = here->MOS9sNode; } /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(MOS9DdPtr, MOS9dNode, MOS9dNode); TSTALLOC(MOS9GgPtr, MOS9gNode, MOS9gNode); TSTALLOC(MOS9SsPtr, MOS9sNode, MOS9sNode); TSTALLOC(MOS9BbPtr, MOS9bNode, MOS9bNode); TSTALLOC(MOS9DPdpPtr, MOS9dNodePrime, MOS9dNodePrime); TSTALLOC(MOS9SPspPtr, MOS9sNodePrime, MOS9sNodePrime); TSTALLOC(MOS9DdpPtr, MOS9dNode, MOS9dNodePrime); TSTALLOC(MOS9GbPtr, MOS9gNode, MOS9bNode); TSTALLOC(MOS9GdpPtr, MOS9gNode, MOS9dNodePrime); TSTALLOC(MOS9GspPtr, MOS9gNode, MOS9sNodePrime); TSTALLOC(MOS9SspPtr, MOS9sNode, MOS9sNodePrime); TSTALLOC(MOS9BdpPtr, MOS9bNode, MOS9dNodePrime); TSTALLOC(MOS9BspPtr, MOS9bNode, MOS9sNodePrime); TSTALLOC(MOS9DPspPtr, MOS9dNodePrime, MOS9sNodePrime); TSTALLOC(MOS9DPdPtr, MOS9dNodePrime, MOS9dNode); TSTALLOC(MOS9BgPtr, MOS9bNode, MOS9gNode); TSTALLOC(MOS9DPgPtr, MOS9dNodePrime, MOS9gNode); TSTALLOC(MOS9SPgPtr, MOS9sNodePrime, MOS9gNode); TSTALLOC(MOS9SPsPtr, MOS9sNodePrime, MOS9sNode); TSTALLOC(MOS9DPbPtr, MOS9dNodePrime, MOS9bNode); TSTALLOC(MOS9SPbPtr, MOS9sNodePrime, MOS9bNode); TSTALLOC(MOS9SPdpPtr, MOS9sNodePrime, MOS9dNodePrime); } } return(OK); } int MOS9unsetup(GENmodel *inModel, CKTcircuit *ckt) { MOS9model *model; MOS9instance *here; for (model = (MOS9model *)inModel; model != NULL; model = MOS9nextModel(model)) { for (here = MOS9instances(model); here != NULL; here=MOS9nextInstance(here)) { if (here->MOS9sNodePrime > 0 && here->MOS9sNodePrime != here->MOS9sNode) CKTdltNNum(ckt, here->MOS9sNodePrime); here->MOS9sNodePrime= 0; if (here->MOS9dNodePrime > 0 && here->MOS9dNodePrime != here->MOS9dNode) CKTdltNNum(ckt, here->MOS9dNodePrime); here->MOS9dNodePrime= 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/mos9/mos9mask.c0000644000175000017500000001215713546075722021767 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles Modified: Alan Gillespie **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "mos9defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int MOS9mAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { MOS9model *here = (MOS9model *)inst; NG_IGNORE(ckt); switch(which) { case MOS9_MOD_TNOM: value->rValue = here->MOS9tnom-CONSTCtoK; return(OK); case MOS9_MOD_VTO: value->rValue = here->MOS9vt0; return(OK); case MOS9_MOD_KP: value->rValue = here->MOS9transconductance; return(OK); case MOS9_MOD_GAMMA: value->rValue = here->MOS9gamma; return(OK); case MOS9_MOD_PHI: value->rValue = here->MOS9phi; return(OK); case MOS9_MOD_RD: value->rValue = here->MOS9drainResistance; return(OK); case MOS9_MOD_RS: value->rValue = here->MOS9sourceResistance; return(OK); case MOS9_MOD_CBD: value->rValue = here->MOS9capBD; return(OK); case MOS9_MOD_CBS: value->rValue = here->MOS9capBS; return(OK); case MOS9_MOD_IS: value->rValue = here->MOS9jctSatCur; return(OK); case MOS9_MOD_PB: value->rValue = here->MOS9bulkJctPotential; return(OK); case MOS9_MOD_CGSO: value->rValue = here->MOS9gateSourceOverlapCapFactor; return(OK); case MOS9_MOD_CGDO: value->rValue = here->MOS9gateDrainOverlapCapFactor; return(OK); case MOS9_MOD_CGBO: value->rValue = here->MOS9gateBulkOverlapCapFactor; return(OK); case MOS9_MOD_CJ: value->rValue = here->MOS9bulkCapFactor; return(OK); case MOS9_MOD_MJ: value->rValue = here->MOS9bulkJctBotGradingCoeff; return(OK); case MOS9_MOD_CJSW: value->rValue = here->MOS9sideWallCapFactor; return(OK); case MOS9_MOD_MJSW: value->rValue = here->MOS9bulkJctSideGradingCoeff; return(OK); case MOS9_MOD_JS: value->rValue = here->MOS9jctSatCurDensity; return(OK); case MOS9_MOD_TOX: value->rValue = here->MOS9oxideThickness; return(OK); case MOS9_MOD_LD: value->rValue = here->MOS9latDiff; return(OK); case MOS9_MOD_XL: value->rValue = here->MOS9lengthAdjust; return(OK); case MOS9_MOD_WD: value->rValue = here->MOS9widthNarrow; return(OK); case MOS9_MOD_XW: value->rValue = here->MOS9widthAdjust; return(OK); case MOS9_MOD_DELVTO: value->rValue = here->MOS9delvt0; return(OK); case MOS9_MOD_RSH: value->rValue = here->MOS9sheetResistance; return(OK); case MOS9_MOD_U0: value->rValue = here->MOS9surfaceMobility; return(OK); case MOS9_MOD_FC: value->rValue = here->MOS9fwdCapDepCoeff; return(OK); case MOS9_MOD_NSUB: value->rValue = here->MOS9substrateDoping; return(OK); case MOS9_MOD_TPG: value->iValue = here->MOS9gateType; return(OK); case MOS9_MOD_NSS: value->rValue = here->MOS9surfaceStateDensity; return(OK); case MOS9_MOD_NFS: value->rValue = here->MOS9fastSurfaceStateDensity; return(OK); case MOS9_MOD_DELTA: value->rValue = here->MOS9narrowFactor; return(OK); case MOS9_MOD_VMAX: value->rValue = here->MOS9maxDriftVel; return(OK); case MOS9_MOD_XJ: value->rValue = here->MOS9junctionDepth; return(OK); case MOS9_MOD_ETA: value->rValue = here->MOS9eta; return(OK); case MOS9_MOD_XD: value->rValue = here->MOS9coeffDepLayWidth; return(OK); case MOS9_DELTA: value->rValue = here->MOS9delta; return(OK); case MOS9_MOD_THETA: value->rValue = here->MOS9theta; return(OK); case MOS9_MOD_ALPHA: value->rValue = here->MOS9alpha; return(OK); case MOS9_MOD_KAPPA: value->rValue = here->MOS9kappa; return(OK); case MOS9_MOD_KF: value->rValue = here->MOS9fNcoef; return(OK); case MOS9_MOD_AF: value->rValue = here->MOS9fNexp; return(OK); case MOS9_MOD_TYPE: if (here->MOS9type > 0) value->sValue = "nmos"; else value->sValue = "pmos"; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/mos9/mos9par.c0000644000175000017500000000663313546075722021620 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Alan Gillespie **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "mos9defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int MOS9param(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { MOS9instance *here = (MOS9instance *)inst; NG_IGNORE(select); switch(param) { case MOS9_M: here->MOS9m = value->rValue; here->MOS9mGiven = TRUE; break; case MOS9_W: here->MOS9w = value->rValue; here->MOS9wGiven = TRUE; break; case MOS9_L: here->MOS9l = value->rValue; here->MOS9lGiven = TRUE; break; case MOS9_AS: here->MOS9sourceArea = value->rValue; here->MOS9sourceAreaGiven = TRUE; break; case MOS9_AD: here->MOS9drainArea = value->rValue; here->MOS9drainAreaGiven = TRUE; break; case MOS9_PS: here->MOS9sourcePerimiter = value->rValue; here->MOS9sourcePerimiterGiven = TRUE; break; case MOS9_PD: here->MOS9drainPerimiter = value->rValue; here->MOS9drainPerimiterGiven = TRUE; break; case MOS9_NRS: here->MOS9sourceSquares = value->rValue; here->MOS9sourceSquaresGiven = TRUE; break; case MOS9_NRD: here->MOS9drainSquares = value->rValue; here->MOS9drainSquaresGiven = TRUE; break; case MOS9_OFF: here->MOS9off = (value->iValue != 0); break; case MOS9_IC_VBS: here->MOS9icVBS = value->rValue; here->MOS9icVBSGiven = TRUE; break; case MOS9_IC_VDS: here->MOS9icVDS = value->rValue; here->MOS9icVDSGiven = TRUE; break; case MOS9_IC_VGS: here->MOS9icVGS = value->rValue; here->MOS9icVGSGiven = TRUE; break; case MOS9_TEMP: here->MOS9temp = value->rValue+CONSTCtoK; here->MOS9tempGiven = TRUE; break; case MOS9_DTEMP: here->MOS9dtemp = value->rValue; here->MOS9dtempGiven = TRUE; break; case MOS9_IC: switch(value->v.numValue){ case 3: here->MOS9icVBS = *(value->v.vec.rVec+2); here->MOS9icVBSGiven = TRUE; case 2: here->MOS9icVGS = *(value->v.vec.rVec+1); here->MOS9icVGSGiven = TRUE; case 1: here->MOS9icVDS = *(value->v.vec.rVec); here->MOS9icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; case MOS9_L_SENS: if(value->iValue) { here->MOS9senParmNo = 1; here->MOS9sens_l = 1; } break; case MOS9_W_SENS: if(value->iValue) { here->MOS9senParmNo = 1; here->MOS9sens_w = 1; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos9/mos9temp.c0000644000175000017500000003560313546075722022002 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Alan Gillespie **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos9defs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* assuming silicon - make definition for epsilon of silicon */ #define EPSSIL (11.7 * 8.854214871e-12) int MOS9temp(GENmodel *inModel, CKTcircuit *ckt) { MOS9model *model = (MOS9model *)inModel; MOS9instance *here; double wkfngs; double wkfng; double fermig; double fermis; double vfb; double fact1,fact2; double vt,vtnom; double kt,kt1; double ratio,ratio4; double egfet,egfet1; double pbfact,pbfact1,pbo; double phio; double arg1; double capfact; double gmanew,gmaold; double ni_temp, nifact; /* loop through all the mosfet models */ for( ; model != NULL; model = MOS9nextModel(model)) { if(!model->MOS9tnomGiven) { model->MOS9tnom = ckt->CKTnomTemp; } fact1 = model->MOS9tnom/REFTEMP; vtnom = model->MOS9tnom*CONSTKoverQ; kt1 = CONSTboltz * model->MOS9tnom; egfet1 = 1.16-(7.02e-4*model->MOS9tnom*model->MOS9tnom)/ (model->MOS9tnom+1108); arg1 = -egfet1/(kt1+kt1)+1.1150877/(CONSTboltz*(REFTEMP+REFTEMP)); pbfact1 = -2*vtnom *(1.5*log(fact1)+CHARGE*arg1); nifact=(model->MOS9tnom/300)*sqrt(model->MOS9tnom/300); nifact*=exp(0.5*egfet1*((1/(double)300)-(1/model->MOS9tnom))/ CONSTKoverQ); ni_temp=1.45e16*nifact; if (model->MOS9phi <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "%s: Phi is not positive.", model->MOS9modName); return(E_BADPARM); } model->MOS9oxideCapFactor = 3.9 * 8.854214871e-12/ model->MOS9oxideThickness; if(!model->MOS9surfaceMobilityGiven) model->MOS9surfaceMobility=600; if(!model->MOS9transconductanceGiven) { model->MOS9transconductance = model->MOS9surfaceMobility * model->MOS9oxideCapFactor * 1e-4; } if(model->MOS9substrateDopingGiven) { if(model->MOS9substrateDoping*1e6 /*(cm**3/m**3)*/ >ni_temp) { if(!model->MOS9phiGiven) { model->MOS9phi = 2*vtnom* log(model->MOS9substrateDoping* 1e6/*(cm**3/m**3)*//ni_temp); model->MOS9phi = MAX(.1,model->MOS9phi); } fermis = model->MOS9type * .5 * model->MOS9phi; wkfng = 3.2; if(!model->MOS9gateTypeGiven) model->MOS9gateType=1; if(model->MOS9gateType != 0) { fermig = model->MOS9type * model->MOS9gateType*.5*egfet1; wkfng = 3.25 + .5 * egfet1 - fermig; } wkfngs = wkfng - (3.25 + .5 * egfet1 +fermis); if(!model->MOS9gammaGiven) { model->MOS9gamma = sqrt(2 * EPSSIL * CHARGE * model->MOS9substrateDoping* 1e6 /*(cm**3/m**3)*/ )/ model->MOS9oxideCapFactor; } if(!model->MOS9vt0Given) { if(!model->MOS9surfaceStateDensityGiven) model->MOS9surfaceStateDensity=0; vfb = wkfngs - model->MOS9surfaceStateDensity * 1e4 * CHARGE/model->MOS9oxideCapFactor; model->MOS9vt0 = vfb + model->MOS9type * (model->MOS9gamma * sqrt(model->MOS9phi)+ model->MOS9phi); } else { vfb = model->MOS9vt0 - model->MOS9type * (model->MOS9gamma* sqrt(model->MOS9phi)+model->MOS9phi); } model->MOS9alpha = (EPSSIL+EPSSIL)/ (CHARGE*model->MOS9substrateDoping*1e6 /*(cm**3/m**3)*/ ); model->MOS9coeffDepLayWidth = sqrt(model->MOS9alpha); } else { model->MOS9substrateDoping = 0; SPfrontEnd->IFerrorf (ERR_FATAL, "%s: Nsub < Ni ", model->MOS9modName); return(E_BADPARM); } } /* now model parameter preprocessing */ model->MOS9narrowFactor = model->MOS9delta * 0.5 * M_PI * EPSSIL / model->MOS9oxideCapFactor ; /* loop through all instances of the model */ for(here = MOS9instances(model); here!= NULL; here = MOS9nextInstance(here)) { double czbd; /* zero voltage bulk-drain capacitance */ double czbdsw; /* zero voltage bulk-drain sidewall capacitance */ double czbs; /* zero voltage bulk-source capacitance */ double czbssw; /* zero voltage bulk-source sidewall capacitance */ double arg; /* 1 - fc */ double sarg; /* (1-fc) ^^ (-mj) */ double sargsw; /* (1-fc) ^^ (-mjsw) */ /* perform the parameter defaulting */ if(!here->MOS9dtempGiven) { here->MOS9dtemp = 0.0; } if(!here->MOS9tempGiven) { here->MOS9temp = ckt->CKTtemp + here->MOS9dtemp; } vt = here->MOS9temp * CONSTKoverQ; ratio = here->MOS9temp/model->MOS9tnom; fact2 = here->MOS9temp/REFTEMP; kt = here->MOS9temp * CONSTboltz; egfet = 1.16-(7.02e-4*here->MOS9temp*here->MOS9temp)/ (here->MOS9temp+1108); arg = -egfet/(kt+kt)+1.1150877/(CONSTboltz*(REFTEMP+REFTEMP)); pbfact = -2*vt *(1.5*log(fact2)+CHARGE*arg); if(!here->MOS9mGiven) { here->MOS9m = ckt->CKTdefaultMosM; } if(!here->MOS9lGiven) { here->MOS9l = ckt->CKTdefaultMosL; } if(!here->MOS9sourceAreaGiven) { here->MOS9sourceArea = ckt->CKTdefaultMosAS; } if(!here->MOS9wGiven) { here->MOS9w = ckt->CKTdefaultMosW; } if(model->MOS9drainResistanceGiven) { if(model->MOS9drainResistance != 0) { here->MOS9drainConductance = here->MOS9m / model->MOS9drainResistance; } else { here->MOS9drainConductance = 0; } } else if (model->MOS9sheetResistanceGiven) { if ((model->MOS9sheetResistance != 0) && (here->MOS9drainSquares != 0)) { here->MOS9drainConductance = here->MOS9m / (model->MOS9sheetResistance*here->MOS9drainSquares); } else { here->MOS9drainConductance = 0; } } else { here->MOS9drainConductance = 0; } if(model->MOS9sourceResistanceGiven) { if(model->MOS9sourceResistance != 0) { here->MOS9sourceConductance = here->MOS9m / model->MOS9sourceResistance; } else { here->MOS9sourceConductance = 0; } } else if (model->MOS9sheetResistanceGiven) { if ((model->MOS9sheetResistance != 0) && (here->MOS9sourceSquares != 0)) { here->MOS9sourceConductance = here->MOS9m / (model->MOS9sheetResistance*here->MOS9sourceSquares); } else { here->MOS9sourceConductance = 0; } } else { here->MOS9sourceConductance = 0; } if(here->MOS9l - 2 * model->MOS9latDiff + model->MOS9lengthAdjust <1e-6) { SPfrontEnd->IFerrorf (ERR_FATAL, "%s: effective channel length less than zero", here->MOS9name); return(E_PARMVAL); } if(here->MOS9w - 2 * model->MOS9widthNarrow + model->MOS9widthAdjust <1e-6) { SPfrontEnd->IFerrorf (ERR_FATAL, "%s: effective channel width less than zero", here->MOS9name); return(E_PARMVAL); } ratio4 = ratio * sqrt(ratio); here->MOS9tTransconductance = model->MOS9transconductance / ratio4; here->MOS9tSurfMob = model->MOS9surfaceMobility/ratio4; phio= (model->MOS9phi-pbfact1)/fact1; here->MOS9tPhi = fact2 * phio + pbfact; here->MOS9tVbi = model->MOS9delvt0 + model->MOS9vt0 - model->MOS9type * (model->MOS9gamma* sqrt(model->MOS9phi)) +.5*(egfet1-egfet) + model->MOS9type*.5* (here->MOS9tPhi-model->MOS9phi); here->MOS9tVto = here->MOS9tVbi + model->MOS9type * model->MOS9gamma * sqrt(here->MOS9tPhi); here->MOS9tSatCur = model->MOS9jctSatCur* exp(-egfet/vt+egfet1/vtnom); here->MOS9tSatCurDens = model->MOS9jctSatCurDensity * exp(-egfet/vt+egfet1/vtnom); pbo = (model->MOS9bulkJctPotential - pbfact1)/fact1; gmaold = (model->MOS9bulkJctPotential-pbo)/pbo; capfact = 1/(1+model->MOS9bulkJctBotGradingCoeff* (4e-4*(model->MOS9tnom-REFTEMP)-gmaold)); here->MOS9tCbd = model->MOS9capBD * capfact; here->MOS9tCbs = model->MOS9capBS * capfact; here->MOS9tCj = model->MOS9bulkCapFactor * capfact; capfact = 1/(1+model->MOS9bulkJctSideGradingCoeff* (4e-4*(model->MOS9tnom-REFTEMP)-gmaold)); here->MOS9tCjsw = model->MOS9sideWallCapFactor * capfact; here->MOS9tBulkPot = fact2 * pbo+pbfact; gmanew = (here->MOS9tBulkPot-pbo)/pbo; capfact = (1+model->MOS9bulkJctBotGradingCoeff* (4e-4*(here->MOS9temp-REFTEMP)-gmanew)); here->MOS9tCbd *= capfact; here->MOS9tCbs *= capfact; here->MOS9tCj *= capfact; capfact = (1+model->MOS9bulkJctSideGradingCoeff* (4e-4*(here->MOS9temp-REFTEMP)-gmanew)); here->MOS9tCjsw *= capfact; here->MOS9tDepCap = model->MOS9fwdCapDepCoeff * here->MOS9tBulkPot; if( (model->MOS9jctSatCurDensity == 0) || (here->MOS9drainArea == 0) || (here->MOS9sourceArea == 0) ) { here->MOS9sourceVcrit = here->MOS9drainVcrit = vt*log(vt/(CONSTroot2*here->MOS9m*here->MOS9tSatCur)); } else { here->MOS9drainVcrit = vt * log( vt / (CONSTroot2 * here->MOS9m * here->MOS9tSatCurDens * here->MOS9drainArea)); here->MOS9sourceVcrit = vt * log( vt / (CONSTroot2 * here->MOS9m * here->MOS9tSatCurDens * here->MOS9sourceArea)); } if(model->MOS9capBDGiven) { czbd = here->MOS9tCbd * here->MOS9m; } else { if(model->MOS9bulkCapFactorGiven) { czbd=here->MOS9tCj*here->MOS9drainArea * here->MOS9m; } else { czbd=0; } } if(model->MOS9sideWallCapFactorGiven) { czbdsw= here->MOS9tCjsw * here->MOS9drainPerimiter * here->MOS9m; } else { czbdsw=0; } arg = 1-model->MOS9fwdCapDepCoeff; sarg = exp( (-model->MOS9bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS9bulkJctSideGradingCoeff) * log(arg) ); here->MOS9Cbd = czbd; here->MOS9Cbdsw = czbdsw; here->MOS9f2d = czbd*(1-model->MOS9fwdCapDepCoeff* (1+model->MOS9bulkJctBotGradingCoeff))* sarg/arg + czbdsw*(1-model->MOS9fwdCapDepCoeff* (1+model->MOS9bulkJctSideGradingCoeff))* sargsw/arg; here->MOS9f3d = czbd * model->MOS9bulkJctBotGradingCoeff * sarg/arg/ here->MOS9tBulkPot + czbdsw * model->MOS9bulkJctSideGradingCoeff * sargsw/arg / here->MOS9tBulkPot; here->MOS9f4d = czbd*here->MOS9tBulkPot*(1-arg*sarg)/ (1-model->MOS9bulkJctBotGradingCoeff) + czbdsw*here->MOS9tBulkPot*(1-arg*sargsw)/ (1-model->MOS9bulkJctSideGradingCoeff) -here->MOS9f3d/2* (here->MOS9tDepCap*here->MOS9tDepCap) -here->MOS9tDepCap * here->MOS9f2d; if(model->MOS9capBSGiven) { czbs = here->MOS9tCbs * here->MOS9m; } else { if(model->MOS9bulkCapFactorGiven) { czbs=here->MOS9tCj*here->MOS9sourceArea * here->MOS9m; } else { czbs=0; } } if(model->MOS9sideWallCapFactorGiven) { czbssw = here->MOS9tCjsw * here->MOS9sourcePerimiter * here->MOS9m; } else { czbssw=0; } arg = 1-model->MOS9fwdCapDepCoeff; sarg = exp( (-model->MOS9bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS9bulkJctSideGradingCoeff) * log(arg) ); here->MOS9Cbs = czbs; here->MOS9Cbssw = czbssw; here->MOS9f2s = czbs*(1-model->MOS9fwdCapDepCoeff* (1+model->MOS9bulkJctBotGradingCoeff))* sarg/arg + czbssw*(1-model->MOS9fwdCapDepCoeff* (1+model->MOS9bulkJctSideGradingCoeff))* sargsw/arg; here->MOS9f3s = czbs * model->MOS9bulkJctBotGradingCoeff * sarg/arg/ here->MOS9tBulkPot + czbssw * model->MOS9bulkJctSideGradingCoeff * sargsw/arg / here->MOS9tBulkPot; here->MOS9f4s = czbs*here->MOS9tBulkPot*(1-arg*sarg)/ (1-model->MOS9bulkJctBotGradingCoeff) + czbssw*here->MOS9tBulkPot*(1-arg*sargsw)/ (1-model->MOS9bulkJctSideGradingCoeff) -here->MOS9f3s/2* (here->MOS9tDepCap*here->MOS9tDepCap) -here->MOS9tDepCap * here->MOS9f2s; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos9/mos9supd.c0000644000175000017500000001562013546075722022005 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Alan Gillespie This function is obsolete (was used by an old sensitivity analysis) **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mos9defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS9sUpdate(GENmodel *inModel, CKTcircuit *ckt) { MOS9model *model = (MOS9model *)inModel; MOS9instance *here; int iparmno; double sb; double sg; double sdprm; double ssprm; double sxpgs; double sxpgd; double sxpbs; double sxpbd; double sxpgb; double dummy1; double dummy2; SENstruct *info; if(ckt->CKTtime == 0) return(OK); info = ckt->CKTsenInfo; #ifdef SENSDEBUG printf("MOS9senupdate\n"); printf("CKTtime = %.5e\n",ckt->CKTtime); #endif /* SENSDEBUG */ sxpgs = 0; sxpgd = 0; sxpbs = 0; sxpbd = 0; sxpgb = 0; dummy1 = 0; dummy2 = 0; /* loop through all the MOS9 models */ for( ; model != NULL; model = MOS9nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS9instances(model); here != NULL ; here=MOS9nextInstance(here)) { #ifdef SENSDEBUG printf("senupdate instance name %s\n",here->MOS9name); printf("before loading\n"); printf("CKTag[0] = %.2e,CKTag[1] = %.2e\n", ckt->CKTag[0],ckt->CKTag[1]); printf("capgs = %.7e\n",here->MOS9cgs); printf("capgd = %.7e\n",here->MOS9cgd); printf("capgb = %.7e\n",here->MOS9cgb); printf("capbs = %.7e\n",here->MOS9capbs); printf("capbd = %.7e\n",here->MOS9capbd); #endif /* SENSDEBUG */ for(iparmno = 1;iparmno<=info->SENparms;iparmno++){ sb = *(info->SEN_Sap[here->MOS9bNode] + iparmno); sg = *(info->SEN_Sap[here->MOS9gNode] + iparmno); ssprm = *(info->SEN_Sap[here->MOS9sNodePrime] + iparmno); sdprm = *(info->SEN_Sap[here->MOS9dNodePrime] + iparmno); #ifdef SENSDEBUG printf("iparmno = %d\n",iparmno); printf("sb = %.7e,sg = %.7e\n",sb,sg); printf("ssprm = %.7e,sdprm = %.7e\n",ssprm,sdprm); #endif /* SENSDEBUG */ sxpgs = (sg - ssprm) * here->MOS9cgs ; sxpgd = (sg - sdprm) * here->MOS9cgd ; sxpgb = (sg - sb) * here->MOS9cgb ; sxpbs = (sb - ssprm) * here->MOS9capbs ; sxpbd = (sb - sdprm) * here->MOS9capbd ; if(here->MOS9sens_l && (iparmno == here->MOS9senParmNo)){ sxpgs += *(here->MOS9dphigs_dl); sxpgd += *(here->MOS9dphigd_dl); sxpbs += *(here->MOS9dphibs_dl); sxpbd += *(here->MOS9dphibd_dl); sxpgb += *(here->MOS9dphigb_dl); } if(here->MOS9sens_w && (iparmno == (here->MOS9senParmNo + (int) here->MOS9sens_l))){ sxpgs += *(here->MOS9dphigs_dw); sxpgd += *(here->MOS9dphigd_dw); sxpbs += *(here->MOS9dphibs_dw); sxpbd += *(here->MOS9dphibd_dw); sxpgb += *(here->MOS9dphigb_dw); } if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->MOS9sensxpgs + 10 * (iparmno - 1)) = sxpgs; *(ckt->CKTstate1 + here->MOS9sensxpgd + 10 * (iparmno - 1)) = sxpgd; *(ckt->CKTstate1 + here->MOS9sensxpbs + 10 * (iparmno - 1)) = sxpbs; *(ckt->CKTstate1 + here->MOS9sensxpbd + 10 * (iparmno - 1)) = sxpbd; *(ckt->CKTstate1 + here->MOS9sensxpgb + 10 * (iparmno - 1)) = sxpgb; *(ckt->CKTstate1 + here->MOS9sensxpgs + 10 * (iparmno - 1) + 1) = 0; *(ckt->CKTstate1 + here->MOS9sensxpgd + 10 * (iparmno - 1) + 1) = 0; *(ckt->CKTstate1 + here->MOS9sensxpbs + 10 * (iparmno - 1) + 1) = 0; *(ckt->CKTstate1 + here->MOS9sensxpbd + 10 * (iparmno - 1) + 1) = 0; *(ckt->CKTstate1 + here->MOS9sensxpgb + 10 * (iparmno - 1) + 1) = 0; goto next; } *(ckt->CKTstate0 + here->MOS9sensxpgs + 10 * (iparmno - 1)) = sxpgs; *(ckt->CKTstate0 + here->MOS9sensxpgd + 10 * (iparmno - 1)) = sxpgd; *(ckt->CKTstate0 + here->MOS9sensxpbs + 10 * (iparmno - 1)) = sxpbs; *(ckt->CKTstate0 + here->MOS9sensxpbd + 10 * (iparmno - 1)) = sxpbd; *(ckt->CKTstate0 + here->MOS9sensxpgb + 10 * (iparmno - 1)) = sxpgb; NIintegrate(ckt,&dummy1,&dummy2,here->MOS9cgs, here->MOS9sensxpgs + 10*(iparmno -1)); NIintegrate(ckt,&dummy1,&dummy2,here->MOS9cgd, here->MOS9sensxpgd + 10*(iparmno -1)); NIintegrate(ckt,&dummy1,&dummy2,here->MOS9cgb, here->MOS9sensxpgb + 10*(iparmno -1)); NIintegrate(ckt,&dummy1,&dummy2,here->MOS9capbs, here->MOS9sensxpbs + 10*(iparmno -1)); NIintegrate(ckt,&dummy1,&dummy2,here->MOS9capbd, here->MOS9sensxpbd + 10*(iparmno -1)); next: ; #ifdef SENSDEBUG printf("after loading\n"); printf("sxpgs = %.7e,sdotxpgs = %.7e\n", sxpgs,*(ckt->CKTstate0 + here->MOS9sensxpgs + 10 * (iparmno - 1) + 1)); printf("sxpgd = %.7e,sdotxpgd = %.7e\n", sxpgd,*(ckt->CKTstate0 + here->MOS9sensxpgd + 10 * (iparmno - 1) + 1)); printf("sxpgb = %.7e,sdotxpgb = %.7e\n", sxpgb,*(ckt->CKTstate0 + here->MOS9sensxpgb + 10 * (iparmno - 1) + 1)); printf("sxpbs = %.7e,sdotxpbs = %.7e\n", sxpbs,*(ckt->CKTstate0 + here->MOS9sensxpbs + 10 * (iparmno - 1) + 1)); printf("sxpbd = %.7e,sdotxpbd = %.7e\n", sxpbd,*(ckt->CKTstate0 + here->MOS9sensxpbd + 10 * (iparmno - 1) + 1)); #endif /* SENSDEBUG */ } } } #ifdef SENSDEBUG printf("MOS9senupdate end\n"); #endif /* SENSDEBUG */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos9/mos9mpar.c0000644000175000017500000001517213546075722021773 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Alan Gillespie **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "mos9defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS9mParam(int param, IFvalue *value, GENmodel *inModel) { register MOS9model *model = (MOS9model *)inModel; switch(param) { case MOS9_MOD_VTO: model->MOS9vt0 = value->rValue; model->MOS9vt0Given = TRUE; break; case MOS9_MOD_KP: model->MOS9transconductance = value->rValue; model->MOS9transconductanceGiven = TRUE; break; case MOS9_MOD_GAMMA: model->MOS9gamma = value->rValue; model->MOS9gammaGiven = TRUE; break; case MOS9_MOD_PHI: model->MOS9phi = value->rValue; model->MOS9phiGiven = TRUE; break; case MOS9_MOD_RD: model->MOS9drainResistance = value->rValue; model->MOS9drainResistanceGiven = TRUE; break; case MOS9_MOD_RS: model->MOS9sourceResistance = value->rValue; model->MOS9sourceResistanceGiven = TRUE; break; case MOS9_MOD_CBD: model->MOS9capBD = value->rValue; model->MOS9capBDGiven = TRUE; break; case MOS9_MOD_CBS: model->MOS9capBS = value->rValue; model->MOS9capBSGiven = TRUE; break; case MOS9_MOD_IS: model->MOS9jctSatCur = value->rValue; model->MOS9jctSatCurGiven = TRUE; break; case MOS9_MOD_PB: model->MOS9bulkJctPotential = value->rValue; model->MOS9bulkJctPotentialGiven = TRUE; break; case MOS9_MOD_CGSO: model->MOS9gateSourceOverlapCapFactor = value->rValue; model->MOS9gateSourceOverlapCapFactorGiven = TRUE; break; case MOS9_MOD_CGDO: model->MOS9gateDrainOverlapCapFactor = value->rValue; model->MOS9gateDrainOverlapCapFactorGiven = TRUE; break; case MOS9_MOD_CGBO: model->MOS9gateBulkOverlapCapFactor = value->rValue; model->MOS9gateBulkOverlapCapFactorGiven = TRUE; break; case MOS9_MOD_RSH: model->MOS9sheetResistance = value->rValue; model->MOS9sheetResistanceGiven = TRUE; break; case MOS9_MOD_CJ: model->MOS9bulkCapFactor = value->rValue; model->MOS9bulkCapFactorGiven = TRUE; break; case MOS9_MOD_MJ: model->MOS9bulkJctBotGradingCoeff = value->rValue; model->MOS9bulkJctBotGradingCoeffGiven = TRUE; break; case MOS9_MOD_CJSW: model->MOS9sideWallCapFactor = value->rValue; model->MOS9sideWallCapFactorGiven = TRUE; break; case MOS9_MOD_MJSW: model->MOS9bulkJctSideGradingCoeff = value->rValue; model->MOS9bulkJctSideGradingCoeffGiven = TRUE; break; case MOS9_MOD_JS: model->MOS9jctSatCurDensity = value->rValue; model->MOS9jctSatCurDensityGiven = TRUE; break; case MOS9_MOD_TOX: model->MOS9oxideThickness = value->rValue; model->MOS9oxideThicknessGiven = TRUE; break; case MOS9_MOD_LD: model->MOS9latDiff = value->rValue; model->MOS9latDiffGiven = TRUE; break; case MOS9_MOD_XL: model->MOS9lengthAdjust = value->rValue; model->MOS9lengthAdjustGiven = TRUE; break; case MOS9_MOD_WD: model->MOS9widthNarrow = value->rValue; model->MOS9widthNarrowGiven = TRUE; break; case MOS9_MOD_XW: model->MOS9widthAdjust = value->rValue; model->MOS9widthAdjustGiven = TRUE; break; case MOS9_MOD_DELVTO: model->MOS9delvt0 = value->rValue; model->MOS9delvt0Given = TRUE; break; case MOS9_MOD_U0: model->MOS9surfaceMobility = value->rValue; model->MOS9surfaceMobilityGiven = TRUE; break; case MOS9_MOD_FC: model->MOS9fwdCapDepCoeff = value->rValue; model->MOS9fwdCapDepCoeffGiven = TRUE; break; case MOS9_MOD_NSUB: model->MOS9substrateDoping = value->rValue; model->MOS9substrateDopingGiven = TRUE; break; case MOS9_MOD_TPG: model->MOS9gateType = value->iValue; model->MOS9gateTypeGiven = TRUE; break; case MOS9_MOD_NSS: model->MOS9surfaceStateDensity = value->rValue; model->MOS9surfaceStateDensityGiven = TRUE; break; case MOS9_MOD_ETA: model->MOS9eta = value->rValue; model->MOS9etaGiven = TRUE; break; case MOS9_MOD_DELTA: model->MOS9delta = value->rValue; model->MOS9deltaGiven = TRUE; break; case MOS9_MOD_NFS: model->MOS9fastSurfaceStateDensity = value->rValue; model->MOS9fastSurfaceStateDensityGiven = TRUE; break; case MOS9_MOD_THETA: model->MOS9theta = value->rValue; model->MOS9thetaGiven = TRUE; break; case MOS9_MOD_VMAX: model->MOS9maxDriftVel = value->rValue; model->MOS9maxDriftVelGiven = TRUE; break; case MOS9_MOD_KAPPA: model->MOS9kappa = value->rValue; model->MOS9kappaGiven = TRUE; break; case MOS9_MOD_NMOS: if(value->iValue) { model->MOS9type = 1; model->MOS9typeGiven = TRUE; } break; case MOS9_MOD_PMOS: if(value->iValue) { model->MOS9type = -1; model->MOS9typeGiven = TRUE; } break; case MOS9_MOD_XJ: model->MOS9junctionDepth = value->rValue; model->MOS9junctionDepthGiven = TRUE; break; case MOS9_MOD_TNOM: model->MOS9tnom = value->rValue+CONSTCtoK; model->MOS9tnomGiven = TRUE; break; case MOS9_MOD_KF: model->MOS9fNcoef = value->rValue; model->MOS9fNcoefGiven = TRUE; break; case MOS9_MOD_AF: model->MOS9fNexp = value->rValue; model->MOS9fNexpGiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos9/mos9dist.c0000644000175000017500000007724213546075722022005 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury Modified: Alan Gillespie **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos9defs.h" #include "ngspice/sperror.h" #include "ngspice/distodef.h" #include "ngspice/suffix.h" int MOS9disto( int mode, GENmodel *genmodel, CKTcircuit *ckt) /* assuming here that ckt->CKTomega has been initialised to * the correct value */ { MOS9model *model = (MOS9model *) genmodel; DISTOAN* job = (DISTOAN*) ckt->CKTcurJob; DpassStr pass; double r1h1x,i1h1x; double r1h1y,i1h1y; double r1h1z, i1h1z; double r1h2x, i1h2x; double r1h2y, i1h2y; double r1h2z, i1h2z; double r1hm2x,i1hm2x; double r1hm2y,i1hm2y; double r1hm2z, i1hm2z; double r2h11x,i2h11x; double r2h11y,i2h11y; double r2h11z, i2h11z; double r2h1m2x,i2h1m2x; double r2h1m2y,i2h1m2y; double r2h1m2z, i2h1m2z; double temp, itemp; register MOS9instance *here; if (mode == D_SETUP) return(MOS9dSetup(genmodel,ckt)); if ((mode == D_TWOF1) || (mode == D_THRF1) || (mode == D_F1PF2) || (mode == D_F1MF2) || (mode == D_2F1MF2)) { /* loop through all the MOS9 models */ for( ; model != NULL; model = MOS9nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS9instances(model); here != NULL ; here=MOS9nextInstance(here)) { /* loading starts here */ switch (mode) { case D_TWOF1: /* x = vgs, y = vbs z = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MOS9gNode)) - *(job->r1H1ptr + (here->MOS9sNodePrime)); i1h1x = *(job->i1H1ptr + (here->MOS9gNode)) - *(job->i1H1ptr + (here->MOS9sNodePrime)); r1h1y = *(job->r1H1ptr + (here->MOS9bNode)) - *(job->r1H1ptr + (here->MOS9sNodePrime)); i1h1y = *(job->i1H1ptr + (here->MOS9bNode)) - *(job->i1H1ptr + (here->MOS9sNodePrime)); r1h1z = *(job->r1H1ptr + (here->MOS9dNodePrime)) - *(job->r1H1ptr + (here->MOS9sNodePrime)); i1h1z = *(job->i1H1ptr + (here->MOS9dNodePrime)) - *(job->i1H1ptr + (here->MOS9sNodePrime)); /* loading starts here */ /* loading cdrain term */ temp = DFn2F1(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z); itemp = DFi2F1(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z); *(ckt->CKTrhs + (here->MOS9dNodePrime)) -= temp; *(ckt->CKTirhs + (here->MOS9dNodePrime)) -= itemp; *(ckt->CKTrhs + (here->MOS9sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9sNodePrime)) += itemp; /* cdrain term over */ /* loading gbs term */ temp = D1n2F1(here->gbs2, r1h1y, i1h1y); itemp = D1i2F1(here->gbs2, r1h1y, i1h1y); *(ckt->CKTrhs + (here->MOS9bNode)) -= temp; *(ckt->CKTirhs + (here->MOS9bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9sNodePrime)) += itemp; /* gbs over */ /* loading gbd term */ temp = D1n2F1(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z); itemp = D1i2F1(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z); *(ckt->CKTrhs + (here->MOS9bNode)) -= temp; *(ckt->CKTirhs + (here->MOS9bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9dNodePrime)) += itemp; /* gbd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1i2F1(here->capgs2, r1h1x, i1h1x); itemp = ckt->CKTomega * D1n2F1(here->capgs2, r1h1x, i1h1x); *(ckt->CKTrhs + (here->MOS9gNode)) -= temp; *(ckt->CKTirhs + (here->MOS9gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9sNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1i2F1(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z); itemp = ckt->CKTomega * D1n2F1(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z); *(ckt->CKTrhs + (here->MOS9gNode)) -= temp; *(ckt->CKTirhs + (here->MOS9gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9dNodePrime)) += itemp; /* capgd over */ /* loading capgb term */ temp = -ckt->CKTomega * D1i2F1(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y); itemp = ckt->CKTomega * D1n2F1(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y); *(ckt->CKTrhs + (here->MOS9gNode)) -= temp; *(ckt->CKTirhs + (here->MOS9gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9bNode)) += temp; *(ckt->CKTirhs + (here->MOS9bNode)) += itemp; /* capgb over */ /* loading capbs term */ temp = -ckt->CKTomega * D1i2F1(here->capbs2, r1h1y, i1h1y); itemp = ckt->CKTomega * D1n2F1(here->capbs2, r1h1y, i1h1y); *(ckt->CKTrhs + (here->MOS9bNode)) -= temp; *(ckt->CKTirhs + (here->MOS9bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9sNodePrime)) += itemp; /* capbs over */ /* loading capbd term */ temp = -ckt->CKTomega * D1i2F1(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z); itemp = ckt->CKTomega * D1n2F1(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z); *(ckt->CKTrhs + (here->MOS9bNode)) -= temp; *(ckt->CKTirhs + (here->MOS9bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9dNodePrime)) += itemp; /* capbd over */ /* all done */ break; case D_THRF1: /* x = vgs, y = vbs z = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MOS9gNode)) - *(job->r1H1ptr + (here->MOS9sNodePrime)); i1h1x = *(job->i1H1ptr + (here->MOS9gNode)) - *(job->i1H1ptr + (here->MOS9sNodePrime)); r1h1y = *(job->r1H1ptr + (here->MOS9bNode)) - *(job->r1H1ptr + (here->MOS9sNodePrime)); i1h1y = *(job->i1H1ptr + (here->MOS9bNode)) - *(job->i1H1ptr + (here->MOS9sNodePrime)); r1h1z = *(job->r1H1ptr + (here->MOS9dNodePrime)) - *(job->r1H1ptr + (here->MOS9sNodePrime)); i1h1z = *(job->i1H1ptr + (here->MOS9dNodePrime)) - *(job->i1H1ptr + (here->MOS9sNodePrime)); r2h11x = *(job->r2H11ptr + (here->MOS9gNode)) - *(job->r2H11ptr + (here->MOS9sNodePrime)); i2h11x = *(job->i2H11ptr + (here->MOS9gNode)) - *(job->i2H11ptr + (here->MOS9sNodePrime)); r2h11y = *(job->r2H11ptr + (here->MOS9bNode)) - *(job->r2H11ptr + (here->MOS9sNodePrime)); i2h11y = *(job->i2H11ptr + (here->MOS9bNode)) - *(job->i2H11ptr + (here->MOS9sNodePrime)); r2h11z = *(job->r2H11ptr + (here->MOS9dNodePrime)) - *(job->r2H11ptr + (here->MOS9sNodePrime)); i2h11z = *(job->i2H11ptr + (here->MOS9dNodePrime)) - *(job->i2H11ptr + (here->MOS9sNodePrime)); /* loading starts here */ /* loading cdrain term */ temp = DFn3F1(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, here->cdr_x3, here->cdr_y3, here->cdr_z3, here->cdr_x2y, here->cdr_x2z, here->cdr_xy2, here->cdr_y2z, here->cdr_xz2, here->cdr_yz2, here->cdr_xyz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r2h11x, i2h11x, r2h11y, i2h11y, r2h11z, i2h11z); itemp = DFi3F1(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, here->cdr_x3, here->cdr_y3, here->cdr_z3, here->cdr_x2y, here->cdr_x2z, here->cdr_xy2, here->cdr_y2z, here->cdr_xz2, here->cdr_yz2, here->cdr_xyz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r2h11x, i2h11x, r2h11y, i2h11y, r2h11z, i2h11z); *(ckt->CKTrhs + (here->MOS9dNodePrime)) -= temp; *(ckt->CKTirhs + (here->MOS9dNodePrime)) -= itemp; *(ckt->CKTrhs + (here->MOS9sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9sNodePrime)) += itemp; /* cdrain term over */ /* loading gbs term */ temp = D1n3F1(here->gbs2, here->gbs3, r1h1y, i1h1y, r2h11y, i2h11y); itemp = D1i3F1(here->gbs2, here->gbs3, r1h1y, i1h1y, r2h11y, i2h11y); *(ckt->CKTrhs + (here->MOS9bNode)) -= temp; *(ckt->CKTirhs + (here->MOS9bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9sNodePrime)) += itemp; /* gbs over */ /* loading gbd term */ temp = D1n3F1(here->gbd2, here->gbd3, r1h1y - r1h1z, i1h1y - i1h1z, r2h11y - r2h11z, i2h11y - i2h11z); itemp = D1i3F1(here->gbd2, here->gbd3, r1h1y - r1h1z, i1h1y - i1h1z, r2h11y - r2h11z, i2h11y - i2h11z); *(ckt->CKTrhs + (here->MOS9bNode)) -= temp; *(ckt->CKTirhs + (here->MOS9bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9dNodePrime)) += itemp; /* gbd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1i3F1(here->capgs2, here->capgs3, r1h1x, i1h1x, r2h11x, i2h11x); itemp = ckt->CKTomega * D1n3F1(here->capgs2, here->capgs3, r1h1x, i1h1x, r2h11x, i2h11x); *(ckt->CKTrhs + (here->MOS9gNode)) -= temp; *(ckt->CKTirhs + (here->MOS9gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9sNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1i3F1(here->capgd2, here->capgd3, r1h1x - r1h1z, i1h1x - i1h1z, r2h11x - r2h11z, i2h11x - i2h11z); itemp = ckt->CKTomega * D1n3F1(here->capgd2, here->capgd3, r1h1x - r1h1z, i1h1x - i1h1z, r2h11x - r2h11z, i2h11x - i2h11z); *(ckt->CKTrhs + (here->MOS9gNode)) -= temp; *(ckt->CKTirhs + (here->MOS9gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9dNodePrime)) += itemp; /* capgd over */ /* loading capgb term */ temp = -ckt->CKTomega * D1i3F1(here->capgb2, here->capgb3, r1h1x - r1h1y, i1h1x - i1h1y, r2h11x - r2h11y, i2h11x - i2h11y); itemp = ckt->CKTomega * D1n3F1(here->capgb2, here->capgb3, r1h1x - r1h1y, i1h1x - i1h1y, r2h11x - r2h11y, i2h11x - i2h11y); *(ckt->CKTrhs + (here->MOS9gNode)) -= temp; *(ckt->CKTirhs + (here->MOS9gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9bNode)) += temp; *(ckt->CKTirhs + (here->MOS9bNode)) += itemp; /* capgb over */ /* loading capbs term */ temp = -ckt->CKTomega * D1i3F1(here->capbs2, here->capbs3, r1h1y, i1h1y, r2h11y, i2h11y); itemp = ckt->CKTomega * D1n3F1(here->capbs2, here->capbs3, r1h1y, i1h1y, r2h11y, i2h11y); *(ckt->CKTrhs + (here->MOS9bNode)) -= temp; *(ckt->CKTirhs + (here->MOS9bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9sNodePrime)) += itemp; /* capbs over */ /* loading capbd term */ temp = -ckt->CKTomega * D1i3F1(here->capbd2, here->capbd3, r1h1y - r1h1z, i1h1y - i1h1z, r2h11y - r2h11z, i2h11y - i2h11z); itemp = ckt->CKTomega * D1n3F1(here->capbd2, here->capbd3, r1h1y - r1h1z, i1h1y - i1h1z, r2h11y - r2h11z, i2h11y - i2h11z); *(ckt->CKTrhs + (here->MOS9bNode)) -= temp; *(ckt->CKTirhs + (here->MOS9bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9dNodePrime)) += itemp; /* capbd over */ /* all done */ break; case D_F1PF2: /* x = vgs, y = vbs z = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MOS9gNode)) - *(job->r1H1ptr + (here->MOS9sNodePrime)); i1h1x = *(job->i1H1ptr + (here->MOS9gNode)) - *(job->i1H1ptr + (here->MOS9sNodePrime)); r1h1y = *(job->r1H1ptr + (here->MOS9bNode)) - *(job->r1H1ptr + (here->MOS9sNodePrime)); i1h1y = *(job->i1H1ptr + (here->MOS9bNode)) - *(job->i1H1ptr + (here->MOS9sNodePrime)); r1h1z = *(job->r1H1ptr + (here->MOS9dNodePrime)) - *(job->r1H1ptr + (here->MOS9sNodePrime)); i1h1z = *(job->i1H1ptr + (here->MOS9dNodePrime)) - *(job->i1H1ptr + (here->MOS9sNodePrime)); r1h2x = *(job->r1H2ptr + (here->MOS9gNode)) - *(job->r1H2ptr + (here->MOS9sNodePrime)); i1h2x = *(job->i1H2ptr + (here->MOS9gNode)) - *(job->i1H2ptr + (here->MOS9sNodePrime)); r1h2y = *(job->r1H2ptr + (here->MOS9bNode)) - *(job->r1H2ptr + (here->MOS9sNodePrime)); i1h2y = *(job->i1H2ptr + (here->MOS9bNode)) - *(job->i1H2ptr + (here->MOS9sNodePrime)); r1h2z = *(job->r1H2ptr + (here->MOS9dNodePrime)) - *(job->r1H2ptr + (here->MOS9sNodePrime)); i1h2z = *(job->i1H2ptr + (here->MOS9dNodePrime)) - *(job->i1H2ptr + (here->MOS9sNodePrime)); /* loading starts here */ /* loading cdrain term */ temp = DFnF12(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1h2x, i1h2x, r1h2y, i1h2y, r1h2z, i1h2z); itemp = DFiF12(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1h2x, i1h2x, r1h2y, i1h2y, r1h2z, i1h2z); *(ckt->CKTrhs + (here->MOS9dNodePrime)) -= temp; *(ckt->CKTirhs + (here->MOS9dNodePrime)) -= itemp; *(ckt->CKTrhs + (here->MOS9sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9sNodePrime)) += itemp; /* cdrain term over */ /* loading gbs term */ temp = D1nF12(here->gbs2, r1h1y, i1h1y, r1h2y, i1h2y); itemp = D1iF12(here->gbs2, r1h1y, i1h1y, r1h2y, i1h2y); *(ckt->CKTrhs + (here->MOS9bNode)) -= temp; *(ckt->CKTirhs + (here->MOS9bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9sNodePrime)) += itemp; /* gbs over */ /* loading gbd term */ temp = D1nF12(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1h2y - r1h2z, i1h2y - i1h2z); itemp = D1iF12(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1h2y - r1h2z, i1h2y - i1h2z); *(ckt->CKTrhs + (here->MOS9bNode)) -= temp; *(ckt->CKTirhs + (here->MOS9bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9dNodePrime)) += itemp; /* gbd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1iF12(here->capgs2, r1h1x, i1h1x, r1h2x, i1h2x); itemp = ckt->CKTomega * D1nF12(here->capgs2, r1h1x, i1h1x, r1h2x, i1h2x); *(ckt->CKTrhs + (here->MOS9gNode)) -= temp; *(ckt->CKTirhs + (here->MOS9gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9sNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1iF12(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z, r1h2x - r1h2z, i1h2x - i1h2z); itemp = ckt->CKTomega * D1nF12(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z, r1h2x - r1h2z, i1h2x - i1h2z); *(ckt->CKTrhs + (here->MOS9gNode)) -= temp; *(ckt->CKTirhs + (here->MOS9gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9dNodePrime)) += itemp; /* capgd over */ /* loading capgb term */ temp = -ckt->CKTomega * D1iF12(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y, r1h2x - r1h2y, i1h2x - i1h2y); itemp = ckt->CKTomega * D1nF12(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y, r1h2x - r1h2y, i1h2x - i1h2y); *(ckt->CKTrhs + (here->MOS9gNode)) -= temp; *(ckt->CKTirhs + (here->MOS9gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9bNode)) += temp; *(ckt->CKTirhs + (here->MOS9bNode)) += itemp; /* capgb over */ /* loading capbs term */ temp = -ckt->CKTomega * D1iF12(here->capbs2, r1h1y, i1h1y, r1h2y, i1h2y); itemp = ckt->CKTomega * D1nF12(here->capbs2, r1h1y, i1h1y, r1h2y, i1h2y); *(ckt->CKTrhs + (here->MOS9bNode)) -= temp; *(ckt->CKTirhs + (here->MOS9bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9sNodePrime)) += itemp; /* capbs over */ /* loading capbd term */ temp = -ckt->CKTomega * D1iF12(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1h2y - r1h2z, i1h2y - i1h2z); itemp = ckt->CKTomega * D1nF12(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1h2y - r1h2z, i1h2y - i1h2z); *(ckt->CKTrhs + (here->MOS9bNode)) -= temp; *(ckt->CKTirhs + (here->MOS9bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9dNodePrime)) += itemp; /* capbd over */ /* all done */ break; case D_F1MF2: /* x = vgs, y = vbs z = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MOS9gNode)) - *(job->r1H1ptr + (here->MOS9sNodePrime)); i1h1x = *(job->i1H1ptr + (here->MOS9gNode)) - *(job->i1H1ptr + (here->MOS9sNodePrime)); r1h1y = *(job->r1H1ptr + (here->MOS9bNode)) - *(job->r1H1ptr + (here->MOS9sNodePrime)); i1h1y = *(job->i1H1ptr + (here->MOS9bNode)) - *(job->i1H1ptr + (here->MOS9sNodePrime)); r1h1z = *(job->r1H1ptr + (here->MOS9dNodePrime)) - *(job->r1H1ptr + (here->MOS9sNodePrime)); i1h1z = *(job->i1H1ptr + (here->MOS9dNodePrime)) - *(job->i1H1ptr + (here->MOS9sNodePrime)); r1hm2x = *(job->r1H2ptr + (here->MOS9gNode)) - *(job->r1H2ptr + (here->MOS9sNodePrime)); i1hm2x = -(*(job->i1H2ptr + (here->MOS9gNode)) - *(job->i1H2ptr + (here->MOS9sNodePrime))); r1hm2y = *(job->r1H2ptr + (here->MOS9bNode)) - *(job->r1H2ptr + (here->MOS9sNodePrime)); i1hm2y = -(*(job->i1H2ptr + (here->MOS9bNode)) - *(job->i1H2ptr + (here->MOS9sNodePrime))); r1hm2z = *(job->r1H2ptr + (here->MOS9dNodePrime)) - *(job->r1H2ptr + (here->MOS9sNodePrime)); i1hm2z = -(*(job->i1H2ptr + (here->MOS9dNodePrime)) - *(job->i1H2ptr + (here->MOS9sNodePrime))); /* loading starts here */ /* loading cdrain term */ temp = DFnF12(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1hm2x, i1hm2x, r1hm2y, i1hm2y, r1hm2z, i1hm2z); itemp = DFiF12(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1hm2x, i1hm2x, r1hm2y, i1hm2y, r1hm2z, i1hm2z); *(ckt->CKTrhs + (here->MOS9dNodePrime)) -= temp; *(ckt->CKTirhs + (here->MOS9dNodePrime)) -= itemp; *(ckt->CKTrhs + (here->MOS9sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9sNodePrime)) += itemp; /* cdrain term over */ /* loading gbs term */ temp = D1nF12(here->gbs2, r1h1y, i1h1y, r1hm2y, i1hm2y); itemp = D1iF12(here->gbs2, r1h1y, i1h1y, r1hm2y, i1hm2y); *(ckt->CKTrhs + (here->MOS9bNode)) -= temp; *(ckt->CKTirhs + (here->MOS9bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9sNodePrime)) += itemp; /* gbs over */ /* loading gbd term */ temp = D1nF12(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z); itemp = D1iF12(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z); *(ckt->CKTrhs + (here->MOS9bNode)) -= temp; *(ckt->CKTirhs + (here->MOS9bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9dNodePrime)) += itemp; /* gbd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1iF12(here->capgs2, r1h1x, i1h1x, r1hm2x, i1hm2x); itemp = ckt->CKTomega * D1nF12(here->capgs2, r1h1x, i1h1x, r1hm2x, i1hm2x); *(ckt->CKTrhs + (here->MOS9gNode)) -= temp; *(ckt->CKTirhs + (here->MOS9gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9sNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1iF12(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z, r1hm2x - r1hm2z, i1hm2x - i1hm2z); itemp = ckt->CKTomega * D1nF12(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z, r1hm2x - r1hm2z, i1hm2x - i1hm2z); *(ckt->CKTrhs + (here->MOS9gNode)) -= temp; *(ckt->CKTirhs + (here->MOS9gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9dNodePrime)) += itemp; /* capgd over */ /* loading capgb term */ temp = -ckt->CKTomega * D1iF12(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y); itemp = ckt->CKTomega * D1nF12(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y); *(ckt->CKTrhs + (here->MOS9gNode)) -= temp; *(ckt->CKTirhs + (here->MOS9gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9bNode)) += temp; *(ckt->CKTirhs + (here->MOS9bNode)) += itemp; /* capgb over */ /* loading capbs term */ temp = -ckt->CKTomega * D1iF12(here->capbs2, r1h1y, i1h1y, r1hm2y, i1hm2y); itemp = ckt->CKTomega * D1nF12(here->capbs2, r1h1y, i1h1y, r1hm2y, i1hm2y); *(ckt->CKTrhs + (here->MOS9bNode)) -= temp; *(ckt->CKTirhs + (here->MOS9bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9sNodePrime)) += itemp; /* capbs over */ /* loading capbd term */ temp = -ckt->CKTomega * D1iF12(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z); itemp = ckt->CKTomega * D1nF12(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z); *(ckt->CKTrhs + (here->MOS9bNode)) -= temp; *(ckt->CKTirhs + (here->MOS9bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9dNodePrime)) += itemp; /* capbd over */ /* all done */ break; case D_2F1MF2: /* x = vgs, y = vbs z = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MOS9gNode)) - *(job->r1H1ptr + (here->MOS9sNodePrime)); i1h1x = *(job->i1H1ptr + (here->MOS9gNode)) - *(job->i1H1ptr + (here->MOS9sNodePrime)); r1h1y = *(job->r1H1ptr + (here->MOS9bNode)) - *(job->r1H1ptr + (here->MOS9sNodePrime)); i1h1y = *(job->i1H1ptr + (here->MOS9bNode)) - *(job->i1H1ptr + (here->MOS9sNodePrime)); r1h1z = *(job->r1H1ptr + (here->MOS9dNodePrime)) - *(job->r1H1ptr + (here->MOS9sNodePrime)); i1h1z = *(job->i1H1ptr + (here->MOS9dNodePrime)) - *(job->i1H1ptr + (here->MOS9sNodePrime)); r1hm2x = *(job->r1H2ptr + (here->MOS9gNode)) - *(job->r1H2ptr + (here->MOS9sNodePrime)); i1hm2x = -(*(job->i1H2ptr + (here->MOS9gNode)) - *(job->i1H2ptr + (here->MOS9sNodePrime))); r1hm2y = *(job->r1H2ptr + (here->MOS9bNode)) - *(job->r1H2ptr + (here->MOS9sNodePrime)); i1hm2y = -(*(job->i1H2ptr + (here->MOS9bNode)) - *(job->i1H2ptr + (here->MOS9sNodePrime))); r1hm2z = *(job->r1H2ptr + (here->MOS9dNodePrime)) - *(job->r1H2ptr + (here->MOS9sNodePrime)); i1hm2z = -(*(job->i1H2ptr + (here->MOS9dNodePrime)) - *(job->i1H2ptr + (here->MOS9sNodePrime))); r2h11x = *(job->r1H1ptr + (here->MOS9gNode)) - *(job->r1H1ptr + (here->MOS9sNodePrime)); i2h11x = *(job->i1H1ptr + (here->MOS9gNode)) - *(job->i1H1ptr + (here->MOS9sNodePrime)); r2h11y = *(job->r1H1ptr + (here->MOS9bNode)) - *(job->r1H1ptr + (here->MOS9sNodePrime)); i2h11y = *(job->i1H1ptr + (here->MOS9bNode)) - *(job->i1H1ptr + (here->MOS9sNodePrime)); r2h11z = *(job->r1H1ptr + (here->MOS9dNodePrime)) - *(job->r1H1ptr + (here->MOS9sNodePrime)); i2h11z = *(job->i1H1ptr + (here->MOS9dNodePrime)) - *(job->i1H1ptr + (here->MOS9sNodePrime)); r2h1m2x = *(job->r2H1m2ptr + (here->MOS9gNode)) - *(job->r2H1m2ptr + (here->MOS9sNodePrime)); i2h1m2x = *(job->i2H1m2ptr + (here->MOS9gNode)) - *(job->i2H1m2ptr + (here->MOS9sNodePrime)); r2h1m2y = *(job->r2H1m2ptr + (here->MOS9bNode)) - *(job->r2H1m2ptr + (here->MOS9sNodePrime)); i2h1m2y = *(job->i2H1m2ptr + (here->MOS9bNode)) - *(job->i2H1m2ptr + (here->MOS9sNodePrime)); r2h1m2z = *(job->r2H1m2ptr + (here->MOS9dNodePrime)) - *(job->r2H1m2ptr + (here->MOS9sNodePrime)); i2h1m2z = *(job->i2H1m2ptr + (here->MOS9dNodePrime)) - *(job->i2H1m2ptr + (here->MOS9sNodePrime)); /* loading starts here */ /* loading cdrain term */ pass.cxx = here->cdr_x2; pass.cyy = here->cdr_y2; pass.czz = here->cdr_z2; pass.cxy = here->cdr_xy; pass.cyz = here->cdr_yz; pass.cxz = here->cdr_xz; pass.cxxx = here->cdr_x3; pass.cyyy = here->cdr_y3; pass.czzz = here->cdr_z3; pass.cxxy = here->cdr_x2y; pass.cxxz = here->cdr_x2z; pass.cxyy = here->cdr_xy2; pass.cyyz = here->cdr_y2z; pass.cxzz = here->cdr_xz2; pass.cyzz = here->cdr_yz2; pass.cxyz = here->cdr_xyz; pass.r1h1x = r1h1x; pass.i1h1x = i1h1x; pass.r1h1y = r1h1y; pass.i1h1y = i1h1y; pass.r1h1z = r1h1z; pass.i1h1z = i1h1z; pass.r1h2x = r1hm2x; pass.i1h2x = i1hm2x; pass.r1h2y = r1hm2y; pass.i1h2y = i1hm2y; pass.r1h2z = r1hm2z; pass.i1h2z = i1hm2z; pass.r2h11x = r2h11x; pass.i2h11x = i2h11x; pass.r2h11y = r2h11y; pass.i2h11y = i2h11y; pass.r2h11z = r2h11z; pass.i2h11z = i2h11z; pass.h2f1f2x = r2h1m2x; pass.ih2f1f2x = i2h1m2x; pass.h2f1f2y = r2h1m2y; pass.ih2f1f2y = i2h1m2y; pass.h2f1f2z = r2h1m2z; pass.ih2f1f2z = i2h1m2z; temp = DFn2F12(&pass); itemp = DFi2F12(&pass); *(ckt->CKTrhs + (here->MOS9dNodePrime)) -= temp; *(ckt->CKTirhs + (here->MOS9dNodePrime)) -= itemp; *(ckt->CKTrhs + (here->MOS9sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9sNodePrime)) += itemp; /* cdrain term over */ /* loading gbs term */ temp = D1n2F12(here->gbs2, here->gbs3, r1h1y, i1h1y, r1hm2y, i1hm2y, r2h11y, i2h11y, r2h1m2y, i2h1m2y); itemp = D1i2F12(here->gbs2, here->gbs3, r1h1y, i1h1y, r1hm2y, i1hm2y, r2h11y, i2h11y, r2h1m2y, i2h1m2y); *(ckt->CKTrhs + (here->MOS9bNode)) -= temp; *(ckt->CKTirhs + (here->MOS9bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9sNodePrime)) += itemp; /* gbs over */ /* loading gbd term */ temp = D1n2F12(here->gbd2, here->gbd3, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z, r2h11y - r2h11z, i2h11y - i2h11z, r2h1m2y - r2h1m2z, i2h1m2y - i2h1m2z); itemp = D1i2F12(here->gbd2, here->gbd3, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z, r2h11y - r2h11z, i2h11y - i2h11z, r2h1m2y - r2h1m2z, i2h1m2y - i2h1m2z); *(ckt->CKTrhs + (here->MOS9bNode)) -= temp; *(ckt->CKTirhs + (here->MOS9bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9dNodePrime)) += itemp; /* gbd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1i2F12(here->capgs2, here->capgs3, r1h1x, i1h1x, r1hm2x, i1hm2x, r2h11x, i2h11x, r2h1m2x, i2h1m2x); itemp = ckt->CKTomega * D1n2F12(here->capgs2, here->capgs3, r1h1x, i1h1x, r1hm2x, i1hm2x, r2h11x, i2h11x, r2h1m2x, i2h1m2x); *(ckt->CKTrhs + (here->MOS9gNode)) -= temp; *(ckt->CKTirhs + (here->MOS9gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9sNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1i2F12(here->capgd2, here->capgd3, r1h1x - r1h1z, i1h1x - i1h1z, r1hm2x - r1hm2z, i1hm2x - i1hm2z, r2h11x - r2h11z, i2h11x - i2h11z, r2h1m2x - r2h1m2z, i2h1m2x - i2h1m2z); itemp = ckt->CKTomega * D1n2F12(here->capgd2, here->capgd3, r1h1x - r1h1z, i1h1x - i1h1z, r1hm2x - r1hm2z, i1hm2x - i1hm2z, r2h11x - r2h11z, i2h11x - i2h11z, r2h1m2x - r2h1m2z, i2h1m2x - i2h1m2z); *(ckt->CKTrhs + (here->MOS9gNode)) -= temp; *(ckt->CKTirhs + (here->MOS9gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9dNodePrime)) += itemp; /* capgd over */ /* loading capgb term */ temp = -ckt->CKTomega * D1i2F12(here->capgb2, here->capgb3, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y, r2h11x - r2h11y, i2h11x - i2h11y, r2h1m2x - r2h1m2y, i2h1m2x - i2h1m2y); itemp = ckt->CKTomega * D1n2F12(here->capgb2, here->capgb3, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y, r2h11x - r2h11y, i2h11x - i2h11y, r2h1m2x - r2h1m2y, i2h1m2x - i2h1m2y); *(ckt->CKTrhs + (here->MOS9gNode)) -= temp; *(ckt->CKTirhs + (here->MOS9gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9bNode)) += temp; *(ckt->CKTirhs + (here->MOS9bNode)) += itemp; /* capgb over */ /* loading capbs term */ temp = -ckt->CKTomega * D1i2F12(here->capbs2, here->capbs3, r1h1y, i1h1y, r1hm2y, i1hm2y, r2h11y, i2h11y, r2h1m2y, i2h1m2y); itemp = ckt->CKTomega * D1n2F12(here->capbs2, here->capbs3, r1h1y, i1h1y, r1hm2y, i1hm2y, r2h11y, i2h11y, r2h1m2y, i2h1m2y); *(ckt->CKTrhs + (here->MOS9bNode)) -= temp; *(ckt->CKTirhs + (here->MOS9bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9sNodePrime)) += itemp; /* capbs over */ /* loading capbd term */ temp = -ckt->CKTomega * D1i2F12(here->capbd2, here->capbd3, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z, r2h11y - r2h11z, i2h11y - i2h11z, r2h1m2y - r2h1m2z, i2h1m2y - i2h1m2z); itemp = ckt->CKTomega * D1n2F12(here->capbd2, here->capbd3, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z, r2h11y - r2h11z, i2h11y - i2h11z, r2h1m2y - r2h1m2z, i2h1m2y - i2h1m2z); *(ckt->CKTrhs + (here->MOS9bNode)) -= temp; *(ckt->CKTirhs + (here->MOS9bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS9dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS9dNodePrime)) += itemp; /* capbd over */ /* all done */ break; default: ; } } } return(OK); } else return(E_BADPARM); } tmpk8ny_4pz/src/spicelib/devices/mos9/mos9dset.c0000644000175000017500000010062013546075722021764 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury Modified: Alan Gillespie **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "mos9defs.h" #include "ngspice/trandefs.h" #include "ngspice/distodef.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS9dSetup(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current value into the * sparse matrix previously provided */ { MOS9model *model = (MOS9model *)inModel; MOS9instance *here; double Beta; double DrainSatCur; double EffectiveLength; double EffectiveWidth; double GateBulkOverlapCap; double GateDrainOverlapCap; double GateSourceOverlapCap; double OxideCap; double SourceSatCur; double arg; double cdrain; double evbs; double sarg; double sargsw; double lvgs; double vbd; double vbs; double vds; double vdsat; double vgb; double vgd; double vgs; double von; double lcapgs2,lcapgs3; /* total gate-source capacitance */ double lcapgd2,lcapgd3; /* total gate-drain capacitance */ double lcapgb2,lcapgb3; /* total gate-bulk capacitance */ double lgbs, lgbs2, lgbs3; double lgbd, lgbd2, lgbd3; double gm2, gb2, gds2, gmb, gmds, gbds; double gm3, gb3, gds3, gm2ds, gm2b, gb2ds, gbds2, gmb2, gmds2, gmbds; double lcapbd, lcapbd2, lcapbd3; double lcapbs, lcapbs2, lcapbs3; double ebd; double vt; /* vt at instance temperature */ Dderivs d_cdrain; /* loop through all the MOS9 device models */ for( ; model != NULL; model = MOS9nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS9instances(model); here != NULL ; here=MOS9nextInstance(here)) { vt = CONSTKoverQ * here->MOS9temp; /* first, we compute a few useful values - these could be * pre-computed, but for historical reasons are still done * here. They may be moved at the expense of instance size */ EffectiveWidth=here->MOS9w-2*model->MOS9widthNarrow+ model->MOS9widthAdjust; EffectiveLength=here->MOS9l - 2*model->MOS9latDiff+ model->MOS9lengthAdjust; if( (here->MOS9tSatCurDens == 0) || (here->MOS9drainArea == 0) || (here->MOS9sourceArea == 0)) { DrainSatCur = here->MOS9m * here->MOS9tSatCur; SourceSatCur = here->MOS9m * here->MOS9tSatCur; } else { DrainSatCur = here->MOS9tSatCurDens * here->MOS9m * here->MOS9drainArea; SourceSatCur = here->MOS9tSatCurDens * here->MOS9m * here->MOS9sourceArea; } GateSourceOverlapCap = model->MOS9gateSourceOverlapCapFactor * here->MOS9m * EffectiveWidth; GateDrainOverlapCap = model->MOS9gateDrainOverlapCapFactor * here->MOS9m * EffectiveWidth; GateBulkOverlapCap = model->MOS9gateBulkOverlapCapFactor * here->MOS9m * EffectiveLength; Beta = here->MOS9tTransconductance * here->MOS9m * EffectiveWidth/EffectiveLength; OxideCap = model->MOS9oxideCapFactor * EffectiveLength * here->MOS9m * EffectiveWidth; /* * ok - now to do the start-up operations * * we must get values for vbs, vds, and vgs from somewhere * so we either predict them or recover them from last iteration * These are the two most common cases - either a prediction * step or the general iteration step and they * share some code, so we put them first - others later on */ /* general iteration */ vbs = model->MOS9type * ( *(ckt->CKTrhsOld+here->MOS9bNode) - *(ckt->CKTrhsOld+here->MOS9sNodePrime)); vgs = model->MOS9type * ( *(ckt->CKTrhsOld+here->MOS9gNode) - *(ckt->CKTrhsOld+here->MOS9sNodePrime)); vds = model->MOS9type * ( *(ckt->CKTrhsOld+here->MOS9dNodePrime) - *(ckt->CKTrhsOld+here->MOS9sNodePrime)); /* now some common crunching for some more useful quantities */ /* * now all the preliminaries are over - we can start doing the * real work */ vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; /* bulk-source and bulk-drain doides * here we just evaluate the ideal diode current and the * correspoinding derivative (conductance). */ /*next1:*/ if(vbs <= 0) { lgbs = SourceSatCur/vt; lgbs += ckt->CKTgmin; lgbs2 = lgbs3 = 0; } else { evbs = exp(MIN(MAX_EXP_ARG,vbs/vt)); lgbs = SourceSatCur*evbs/vt + ckt->CKTgmin; lgbs2 = model->MOS9type *0.5 * (lgbs - ckt->CKTgmin)/vt; lgbs3 = model->MOS9type *lgbs2/(vt*3); } if(vbd <= 0) { lgbd = DrainSatCur/vt; lgbd += ckt->CKTgmin; lgbd2 = lgbd3 = 0; } else { ebd = exp(MIN(MAX_EXP_ARG,vbd/vt)); lgbd = DrainSatCur*ebd/vt +ckt->CKTgmin; lgbd2 = model->MOS9type *0.5 * (lgbd - ckt->CKTgmin)/vt; lgbd3 = model->MOS9type *lgbd2/(vt*3); } /* now to determine whether the user was able to correctly * identify the source and drain of his device */ if(vds >= 0) { /* normal mode */ here->MOS9mode = 1; } else { /* inverse mode */ here->MOS9mode = -1; } { /* * subroutine moseq3(vds,vbs,vgs,gm,gds,gmbs, * qg,qc,qb,cggb,cgdb,cgsb,cbgb,cbdb,cbsb) */ /* * this routine evaluates the drain current, its derivatives and * the charges associated with the gate, channel and bulk * for mosfets based on semi-empirical equations */ /* common /mosarg/ vto,beta,gamma,phi,phib,cox,xnsub,xnfs,xd,xj,xld, 1 xlamda,uo,uexp,vbp,utra,vmax,xneff,xl,xw,vbi,von,vdsat,qspof, 2 beta0,beta1,cdrain,xqco,xqc,fnarrw,fshort,lev common /status/ omega,time,delta,delold(7),ag(7),vt,xni,egfet, 1 xmu,sfactr,mode,modedc,icalc,initf,method,iord,maxord,noncon, 2 iterno,itemno,nosolv,modac,ipiv,ivmflg,ipostp,iscrch,iofile common /knstnt/ twopi,xlog2,xlog10,root2,rad,boltz,charge,ctok, 1 gmin,reltol,abstol,vntol,trtol,chgtol,eps0,epssil,epsox, 2 pivtol,pivrel */ /* equivalence (xlamda,alpha),(vbp,theta),(uexp,eta),(utra,xkappa)*/ double coeff0 = 0.0631353e0; double coeff1 = 0.8013292e0; double coeff2 = -0.01110777e0; double oneoverxl; /* 1/effective length */ double eta; /* eta from model after length factor */ double phibs; /* phi - vbs */ double sqphbs; /* square root of phibs */ double sqphis; /* square root of phi */ double wps; double oneoverxj; /* 1/junction depth */ double xjonxl; /* junction depth/effective length */ double djonxj; double wponxj; double arga; double argb; double argc; double gammas; double fbodys; double fbody; double onfbdy; double qbonco; double vbix; double wconxj; double vth; double csonco; double cdonco; double vgsx; double onfg; double fgate; double us; double xn = 0.0; double vdsc; double onvdsc = 0.0; double vdsx; double cdnorm; double cdo; double fdrain = 0.0; double gdsat; double cdsat; double emax; double delxl; double dlonxl; double xlfact; double ondvt; double onxn; double wfact; double fshort; double lvds, lvbs, lvbd; Dderivs d_onxn, d_ondvt, d_wfact, d_MOS9gds; Dderivs d_emax, d_delxl, d_dlonxl, d_xlfact; Dderivs d_cdonco, d_fdrain, d_cdsat, d_gdsat; Dderivs d_vdsx, d_cdo, d_cdnorm, d_Beta, d_dummy; Dderivs d_vdsc, d_onvdsc, d_arga, d_argb; Dderivs d_onfg, d_fgate, d_us, d_vgsx; Dderivs d_von, d_xn, d_vth, d_onfbdy, d_qbonco, d_vbix; Dderivs d_argc, d_fshort, d_gammas, d_fbodys, d_fbody; Dderivs d_wps, d_wconxj, d_wponxj; Dderivs d_phibs, d_sqphbs; Dderivs d_p, d_q, d_r, d_zero, d_vdsat; /* * bypasses the computation of charges */ if (here->MOS9mode == 1) { lvgs = vgs; lvds = vds; lvbs = vbs; lvbd = vbd; } else { lvgs = vgd; lvds = -vds; lvbs = vbd; lvbd = vbs; } /* * reference cdrain equations to source and * charge equations to bulk */ d_p.value = 0.0; d_p.d1_p = 1.0; d_p.d1_q = 0.0; d_p.d1_r = 0.0; d_p.d2_p2 = 0.0; d_p.d2_q2 = 0.0; d_p.d2_r2 = 0.0; d_p.d2_pq = 0.0; d_p.d2_qr = 0.0; d_p.d2_pr = 0.0; d_p.d3_p3 = 0.0; d_p.d3_q3 = 0.0; d_p.d3_r3 = 0.0; d_p.d3_p2r = 0.0; d_p.d3_p2q = 0.0; d_p.d3_q2r = 0.0; d_p.d3_pq2 = 0.0; d_p.d3_pr2 = 0.0; d_p.d3_qr2 = 0.0; d_p.d3_pqr = 0.0; EqualDeriv(&d_q,&d_p); EqualDeriv(&d_r,&d_p); EqualDeriv(&d_zero,&d_p); d_q.d1_p = d_r.d1_p = d_zero.d1_p = 0.0; d_q.d1_q = d_r.d1_r = 1.0; vdsat = 0.0; EqualDeriv(&d_vdsat,&d_zero); oneoverxl = 1.0/EffectiveLength;/*const*/ eta = model->MOS9eta * 8.15e-22/(model->MOS9oxideCapFactor* EffectiveLength*EffectiveLength*EffectiveLength);/*const*/ /* *.....square root term */ if ( lvbs <= 0.0 ) { phibs = here->MOS9tPhi-lvbs; EqualDeriv(&d_phibs,&d_q); d_phibs.value = lvbs; TimesDeriv(&d_phibs,&d_phibs,-1.0); d_phibs.value += here->MOS9tPhi; sqphbs = sqrt(phibs); SqrtDeriv(&d_sqphbs,&d_phibs); } else { sqphis = sqrt(here->MOS9tPhi);/*const*/ /*sqphs3 = here->MOS9tPhi*sqphis;const*/ sqphbs = sqphis/(1.0+lvbs/ (here->MOS9tPhi+here->MOS9tPhi)); EqualDeriv(&d_sqphbs,&d_q); d_sqphbs.value = lvbs; TimesDeriv(&d_sqphbs,&d_sqphbs,1/(here->MOS9tPhi+here->MOS9tPhi)); d_sqphbs.value += 1.0; InvDeriv(&d_sqphbs,&d_sqphbs); TimesDeriv(&d_sqphbs,&d_sqphbs,sqphis); phibs = sqphbs*sqphbs; MultDeriv(&d_phibs,&d_sqphbs,&d_sqphbs); } /* *.....short channel effect factor */ if ( (model->MOS9junctionDepth != 0.0) && (model->MOS9coeffDepLayWidth != 0.0) ) { wps = model->MOS9coeffDepLayWidth*sqphbs; TimesDeriv(&d_wps,&d_sqphbs,model->MOS9coeffDepLayWidth); oneoverxj = 1.0/model->MOS9junctionDepth;/*const*/ xjonxl = model->MOS9junctionDepth*oneoverxl;/*const*/ djonxj = model->MOS9latDiff*oneoverxj;/*const*/ wponxj = wps*oneoverxj; TimesDeriv(&d_wponxj,&d_wps,oneoverxj); wconxj = coeff0+coeff1*wponxj+coeff2*wponxj*wponxj; TimesDeriv(&d_wconxj,&d_wponxj,coeff2); d_wconxj.value += coeff1; MultDeriv(&d_wconxj,&d_wconxj,&d_wponxj); d_wconxj.value += coeff0; arga = wconxj + djonxj; EqualDeriv(&d_arga,&d_wconxj); d_arga.value += djonxj; argc = wponxj/(1.0+wponxj); EqualDeriv(&d_argc,&d_wponxj); d_argc.value += 1.0; InvDeriv(&d_argc,&d_argc); MultDeriv(&d_argc,&d_argc,&d_wponxj); argb = sqrt(1.0-argc*argc); MultDeriv(&d_argb,&d_argc,&d_argc); TimesDeriv(&d_argb,&d_argb,-1.0); d_argb.value += 1.0; SqrtDeriv(&d_argb,&d_argb); fshort = 1.0-xjonxl*(arga*argb-djonxj); MultDeriv(&d_fshort,&d_arga,&d_argb); d_fshort.value -= djonxj; TimesDeriv(&d_fshort,&d_fshort,-xjonxl); d_fshort.value += 1.0; } else { fshort = 1.0; EqualDeriv(&d_fshort,&d_zero); d_fshort.value = 1.0; } /* *.....body effect */ gammas = model->MOS9gamma*fshort; TimesDeriv(&d_gammas,&d_fshort,model->MOS9gamma); fbodys = 0.5*gammas/(sqphbs+sqphbs); DivDeriv(&d_fbodys,&d_gammas,&d_sqphbs); TimesDeriv(&d_fbodys,&d_fbodys,0.25); fbody = fbodys+model->MOS9narrowFactor/EffectiveWidth; EqualDeriv(&d_fbody,&d_fbodys); d_fbody.value += fbody - fbodys; onfbdy = 1.0/(1.0+fbody); EqualDeriv(&d_onfbdy,&d_fbody); d_onfbdy.value += 1.0; InvDeriv(&d_onfbdy,&d_onfbdy); qbonco =gammas*sqphbs+model->MOS9narrowFactor*phibs/EffectiveWidth; EqualDeriv(&d_dummy,&d_phibs); TimesDeriv(&d_dummy,&d_dummy,model->MOS9narrowFactor*EffectiveWidth); MultDeriv(&d_qbonco,&d_gammas,&d_sqphbs); PlusDeriv(&d_qbonco,&d_qbonco,&d_dummy); /* *.....static feedback effect */ vbix = here->MOS9tVbi*model->MOS9type-eta*(lvds); EqualDeriv(&d_vbix,&d_r); d_vbix.value = vbix; d_vbix.d1_r = -eta; /* *.....threshold voltage */ vth = vbix+qbonco; PlusDeriv(&d_vth,&d_vbix,&d_qbonco); /* *.....joint weak inversion and strong inversion */ von = vth; EqualDeriv(&d_von,&d_vth); if ( model->MOS9fastSurfaceStateDensity != 0.0 ) { csonco = CHARGE*model->MOS9fastSurfaceStateDensity * 1e4 /*(cm**2/m**2)*/ *EffectiveLength*EffectiveWidth * here->MOS9m/OxideCap; /*const*/ cdonco = 0.5*qbonco/phibs; DivDeriv(&d_cdonco,&d_qbonco,&d_phibs); TimesDeriv(&d_cdonco,&d_cdonco,0.5); xn = 1.0+csonco+cdonco; EqualDeriv(&d_xn,&d_cdonco); d_xn.value += 1.0 + csonco; von = vth+vt*xn; TimesDeriv(&d_von,&d_xn,vt); PlusDeriv(&d_von,&d_von,&d_vth); } else { /* *.....cutoff region */ if ( lvgs <= von ) { cdrain = 0.0; EqualDeriv(&d_cdrain,&d_zero); goto innerline1000; } } /* *.....device is on */ vgsx = MAX(lvgs,von); if (lvgs >= von) { EqualDeriv(&d_vgsx,&d_p); d_vgsx.value = lvgs; } else { EqualDeriv(&d_vgsx,&d_von); } /* *.....mobility modulation by gate voltage */ onfg = 1.0+model->MOS9theta*(vgsx-vth); TimesDeriv(&d_onfg,&d_vth,-1.0); PlusDeriv(&d_onfg,&d_onfg,&d_vgsx); TimesDeriv(&d_onfg,&d_onfg,model->MOS9theta); d_onfg.value += 1.0; fgate = 1.0/onfg; InvDeriv(&d_fgate,&d_onfg); us = here->MOS9tSurfMob * 1e-4 /*(m**2/cm**2)*/ *fgate; TimesDeriv(&d_us,&d_fgate,here->MOS9tSurfMob * 1e-4); /* *.....saturation voltage */ vdsat = (vgsx-vth)*onfbdy; TimesDeriv(&d_vdsat,&d_vth, -1.0); PlusDeriv(&d_vdsat,&d_vdsat,&d_vgsx); MultDeriv(&d_vdsat,&d_vdsat,&d_onfbdy); if ( model->MOS9maxDriftVel <= 0.0 ) { } else { vdsc = EffectiveLength*model->MOS9maxDriftVel/us; InvDeriv(&d_vdsc,&d_us); TimesDeriv(&d_vdsc,&d_vdsc,EffectiveLength*model->MOS9maxDriftVel); onvdsc = 1.0/vdsc; InvDeriv(&d_onvdsc,&d_vdsc); arga = (vgsx-vth)*onfbdy; /* note arga = vdsat at this point */ EqualDeriv(&d_arga,&d_vdsat); argb = sqrt(arga*arga+vdsc*vdsc); MultDeriv(&d_dummy,&d_arga,&d_arga); MultDeriv(&d_argb,&d_vdsc,&d_vdsc); PlusDeriv(&d_argb,&d_argb,&d_dummy); SqrtDeriv(&d_argb,&d_argb); vdsat = arga+vdsc-argb; TimesDeriv(&d_vdsat,&d_argb,-1.0); PlusDeriv(&d_vdsat,&d_vdsat,&d_vdsc); PlusDeriv(&d_vdsat,&d_vdsat,&d_arga); } /* *.....current factors in linear region */ vdsx = MIN((lvds),vdsat); if (lvds < vdsat) { EqualDeriv(&d_vdsx,&d_r); d_vdsx.value = lvds; } else { EqualDeriv(&d_vdsx,&d_vdsat); } if ( vdsx == 0.0 ) goto line900; cdo = vgsx-vth-0.5*(1.0+fbody)*vdsx; EqualDeriv(&d_cdo,&d_fbody); d_cdo.value += 1.0; MultDeriv(&d_cdo,&d_cdo,&d_vdsx); TimesDeriv(&d_cdo,&d_cdo,0.5); PlusDeriv(&d_cdo,&d_cdo,&d_vth); TimesDeriv(&d_cdo,&d_cdo,-1.0); PlusDeriv(&d_cdo,&d_cdo,&d_vgsx); /* *.....normalized drain current */ cdnorm = cdo*vdsx; MultDeriv(&d_cdnorm,&d_cdo,&d_vdsx); /* *.....drain current without velocity saturation effect */ /* Beta is a constant till now */ Beta = Beta*fgate; TimesDeriv(&d_Beta,&d_fgate,Beta); cdrain = Beta*cdnorm; MultDeriv(&d_cdrain,&d_Beta,&d_cdnorm); /* *.....velocity saturation factor */ if ( model->MOS9maxDriftVel != 0.0 ) { fdrain = 1.0/(1.0+vdsx*onvdsc); MultDeriv(&d_fdrain,&d_vdsx,&d_onvdsc); d_fdrain.value += 1.0; InvDeriv(&d_fdrain,&d_fdrain); /* *.....drain current */ cdrain = fdrain*cdrain; MultDeriv(&d_cdrain,&d_cdrain,&d_fdrain); Beta = Beta*fdrain; MultDeriv(&d_Beta,&d_Beta,&d_fdrain); } /* *.....channel length modulation */ if ( (lvds) <= vdsat ) goto line700; if ( model->MOS9maxDriftVel == 0.0 ) goto line510; if (model->MOS9alpha == 0.0) goto line700; cdsat = cdrain; EqualDeriv(&d_cdsat,&d_cdrain); gdsat = cdsat*(1.0-fdrain)*onvdsc; TimesDeriv(&d_dummy,&d_fdrain,-1.0); d_dummy.value += 1.0; MultDeriv(&d_gdsat,&d_cdsat,&d_dummy); MultDeriv(&d_gdsat,&d_gdsat,&d_onvdsc); gdsat = MAX(1.0e-12,gdsat); if (gdsat == 1.0e-12) { EqualDeriv(&d_gdsat,&d_zero); d_gdsat.value = gdsat; } emax = cdsat*oneoverxl/gdsat; DivDeriv(&d_emax,&d_cdsat,&d_gdsat); TimesDeriv(&d_emax,&d_emax,oneoverxl); arga = 0.5*emax*model->MOS9alpha; TimesDeriv(&d_arga,&d_emax,0.5*model->MOS9alpha); argc = model->MOS9kappa*model->MOS9alpha;/*const*/ argb = sqrt(arga*arga+argc*((lvds)-vdsat)); TimesDeriv(&d_dummy,&d_vdsat,-1.0); d_dummy.value += lvds; d_dummy.d1_r += 1.0; TimesDeriv(&d_argb,&d_dummy,argc); MultDeriv(&d_dummy,&d_arga,&d_arga); PlusDeriv(&d_argb,&d_argb,&d_dummy); SqrtDeriv(&d_argb,&d_argb); delxl = argb-arga; TimesDeriv(&d_delxl,&d_arga,-1.0); PlusDeriv(&d_delxl,&d_argb,&d_delxl); goto line520; line510: delxl = sqrt(model->MOS9kappa*((lvds)-vdsat)*model->MOS9alpha); TimesDeriv(&d_delxl,&d_vdsat,-1.0); d_delxl.value += lvds; d_delxl.d1_r += 1.0; TimesDeriv(&d_delxl,&d_delxl,model->MOS9kappa*model->MOS9alpha); SqrtDeriv(&d_delxl,&d_delxl); /* *.....punch through approximation */ line520: if ( delxl > (0.5*EffectiveLength) ) { delxl = EffectiveLength - (EffectiveLength*EffectiveLength/ delxl*0.25); InvDeriv(&d_delxl,&d_delxl); TimesDeriv(&d_delxl,&d_delxl,-EffectiveLength*EffectiveLength*0.25); d_delxl.value += EffectiveLength; } /* *.....saturation region */ dlonxl = delxl*oneoverxl; TimesDeriv(&d_dlonxl,&d_delxl,oneoverxl); xlfact = 1.0/(1.0-dlonxl); TimesDeriv(&d_xlfact,&d_dlonxl,-1.0); d_xlfact.value += 1.0; InvDeriv(&d_xlfact,&d_xlfact); cdrain = cdrain*xlfact; MultDeriv(&d_cdrain,&d_cdrain,&d_xlfact); /* *.....finish strong inversion case */ line700: if ( lvgs < von ) { /* *.....weak inversion */ onxn = 1.0/xn; InvDeriv(&d_onxn,&d_xn); ondvt = onxn/vt; TimesDeriv(&d_ondvt,&d_onxn,1/vt); wfact = exp( (lvgs-von)*ondvt ); TimesDeriv(&d_wfact,&d_von,-1.0); d_wfact.value += lvgs; d_wfact.d1_p += 1.0; MultDeriv(&d_wfact,&d_wfact,&d_ondvt); ExpDeriv(&d_wfact,&d_wfact); cdrain = cdrain*wfact; MultDeriv(&d_cdrain,&d_cdrain,&d_wfact); } /* *.....charge computation */ goto innerline1000; /* *.....special case of vds = 0.0d0 */ line900: Beta = Beta*fgate; /* Beta is still a constant */ TimesDeriv(&d_Beta,&d_fgate,Beta); cdrain = 0.0; EqualDeriv(&d_cdrain,&d_zero); here->MOS9gds = Beta*(vgsx-vth); TimesDeriv(&d_MOS9gds,&d_vth,-1.0); PlusDeriv(&d_MOS9gds,&d_MOS9gds,&d_vgsx); MultDeriv(&d_MOS9gds,&d_MOS9gds,&d_Beta); if ( (model->MOS9fastSurfaceStateDensity != 0.0) && (lvgs < von) ) { here->MOS9gds *=exp((lvgs-von)/(vt*xn)); TimesDeriv(&d_dummy,&d_von,-1.0); d_dummy.value += lvgs; d_dummy.d1_p += 1.0; DivDeriv(&d_dummy,&d_dummy,&d_xn); TimesDeriv(&d_dummy,&d_dummy,1/vt); ExpDeriv(&d_dummy,&d_dummy); MultDeriv(&d_MOS9gds,&d_MOS9gds,&d_dummy); } d_cdrain.d1_r = d_MOS9gds.value; d_cdrain.d2_r2 = d_MOS9gds.d1_r; d_cdrain.d3_r3 = d_MOS9gds.d2_r2; innerline1000:; /* *.....done */ } /* * COMPUTE EQUIVALENT DRAIN CURRENT SOURCE */ /* * now we do the hard part of the bulk-drain and bulk-source * diode - we evaluate the non-linear capacitance and * charge * * the basic equations are not hard, but the implementation * is somewhat long in an attempt to avoid log/exponential * evaluations */ /* * charge storage elements * *.. bulk-drain and bulk-source depletion capacitances */ if (vbs < here->MOS9tDepCap){ arg=1-vbs/here->MOS9tBulkPot; /* * the following block looks somewhat long and messy, * but since most users use the default grading * coefficients of .5, and sqrt is MUCH faster than an * exp(log()) we use this special case code to buy time. * (as much as 10% of total job time!) */ if(model->MOS9bulkJctBotGradingCoeff == model->MOS9bulkJctSideGradingCoeff) { if(model->MOS9bulkJctBotGradingCoeff == .5) { sarg = sargsw = 1/sqrt(arg); } else { sarg = sargsw = exp(-model->MOS9bulkJctBotGradingCoeff* log(arg)); } } else { if(model->MOS9bulkJctBotGradingCoeff == .5) { sarg = 1/sqrt(arg); } else { sarg = exp(-model->MOS9bulkJctBotGradingCoeff* log(arg)); } if(model->MOS9bulkJctSideGradingCoeff == .5) { sargsw = 1/sqrt(arg); } else { sargsw =exp(-model->MOS9bulkJctSideGradingCoeff* log(arg)); } } lcapbs=here->MOS9Cbs*sarg+ here->MOS9Cbssw*sargsw; lcapbs2 = model->MOS9type*0.5/here->MOS9tBulkPot*( here->MOS9Cbs*model->MOS9bulkJctBotGradingCoeff* sarg/arg + here->MOS9Cbssw* model->MOS9bulkJctSideGradingCoeff*sargsw/arg); lcapbs3 = here->MOS9Cbs*sarg* model->MOS9bulkJctBotGradingCoeff* (model->MOS9bulkJctBotGradingCoeff+1); lcapbs3 += here->MOS9Cbssw*sargsw* model->MOS9bulkJctSideGradingCoeff* (model->MOS9bulkJctSideGradingCoeff+1); lcapbs3 = lcapbs3/(6*here->MOS9tBulkPot* here->MOS9tBulkPot*arg*arg); } else { /* *(ckt->CKTstate0 + here->MOS9qbs)= here->MOS9f4s + vbs*(here->MOS9f2s+vbs*(here->MOS9f3s/2));*/ lcapbs=here->MOS9f2s+here->MOS9f3s*vbs; lcapbs2 = 0.5*here->MOS9f3s; lcapbs3 = 0; } if (vbd < here->MOS9tDepCap) { arg=1-vbd/here->MOS9tBulkPot; /* * the following block looks somewhat long and messy, * but since most users use the default grading * coefficients of .5, and sqrt is MUCH faster than an * exp(log()) we use this special case code to buy time. * (as much as 10% of total job time!) */ if(model->MOS9bulkJctBotGradingCoeff == .5 && model->MOS9bulkJctSideGradingCoeff == .5) { sarg = sargsw = 1/sqrt(arg); } else { if(model->MOS9bulkJctBotGradingCoeff == .5) { sarg = 1/sqrt(arg); } else { sarg = exp(-model->MOS9bulkJctBotGradingCoeff* log(arg)); } if(model->MOS9bulkJctSideGradingCoeff == .5) { sargsw = 1/sqrt(arg); } else { sargsw =exp(-model->MOS9bulkJctSideGradingCoeff* log(arg)); } } lcapbd=here->MOS9Cbd*sarg+ here->MOS9Cbdsw*sargsw; lcapbd2 = model->MOS9type*0.5/here->MOS9tBulkPot*( here->MOS9Cbd*model->MOS9bulkJctBotGradingCoeff* sarg/arg + here->MOS9Cbdsw* model->MOS9bulkJctSideGradingCoeff*sargsw/arg); lcapbd3 = here->MOS9Cbd*sarg* model->MOS9bulkJctBotGradingCoeff* (model->MOS9bulkJctBotGradingCoeff+1); lcapbd3 += here->MOS9Cbdsw*sargsw* model->MOS9bulkJctSideGradingCoeff* (model->MOS9bulkJctSideGradingCoeff+1); lcapbd3 = lcapbd3/(6*here->MOS9tBulkPot* here->MOS9tBulkPot*arg*arg); } else { lcapbd=here->MOS9f2d + vbd * here->MOS9f3d; lcapbd2=0.5*here->MOS9f3d; lcapbd3=0; } /* * meyer's capacitor model */ /* * the meyer capacitance equations are in DEVqmeyer * these expressions are derived from those equations. * these expressions are incorrect; they assume just one * controlling variable for each charge storage element * while actually there are several; the MOS9 small * signal ac linear model is also wrong because it * ignores controlled capacitive elements. these can be * corrected (as can the linear ss ac model) if the * expressions for the charge are available */ { double phi; double cox; double vddif; double vddif1; double vddif2; double vgst; /* von, lvgs and vdsat have already been adjusted for possible source-drain interchange */ vgst = lvgs -von; phi = here->MOS9tPhi; cox = OxideCap; if (vgst <= -phi) { lcapgb2=lcapgb3=lcapgs2=lcapgs3=lcapgd2=lcapgd3=0; } else if (vgst <= -phi/2) { lcapgb2= -cox/(4*phi); lcapgb3=lcapgs2=lcapgs3=lcapgd2=lcapgd3=0; } else if (vgst <= 0) { lcapgb2= -cox/(4*phi); lcapgb3=lcapgs3=lcapgd2=lcapgd3=0; lcapgs2 = cox/(3*phi); } else { /* the MOS9modes are around because vds has not been adjusted */ if (vdsat <= here->MOS9mode*vds) { lcapgb2=lcapgb3=lcapgs2=lcapgs3=lcapgd2=lcapgd3=0; } else { vddif = 2.0*vdsat-here->MOS9mode*vds; vddif1 = vdsat-here->MOS9mode*vds/*-1.0e-12*/; vddif2 = vddif*vddif; lcapgd2 = -vdsat*here->MOS9mode*vds*cox/(3*vddif*vddif2); lcapgd3 = - here->MOS9mode*vds*cox*(vddif - 6*vdsat)/(9*vddif2*vddif2); lcapgs2 = -vddif1*here->MOS9mode*vds*cox/(3*vddif*vddif2); lcapgs3 = - here->MOS9mode*vds*cox*(vddif - 6*vddif1)/(9*vddif2*vddif2); lcapgb2=lcapgb3=0; } } } /* the b-s and b-d diodes need no processing ... */ here->capbs2 = lcapbs2; here->capbs3 = lcapbs3; here->capbd2 = lcapbd2; here->capbd3 = lcapbd3; here->gbs2 = lgbs2; here->gbs3 = lgbs3; here->gbd2 = lgbd2; here->gbd3 = lgbd3; here->capgb2 = model->MOS9type*lcapgb2; here->capgb3 = lcapgb3; /* * process to get Taylor coefficients, taking into * account type and mode. */ gm2 = d_cdrain.d2_p2; gb2 = d_cdrain.d2_q2; gds2 = d_cdrain.d2_r2; gmb = d_cdrain.d2_pq; gbds = d_cdrain.d2_qr; gmds = d_cdrain.d2_pr; gm3 = d_cdrain.d3_p3; gb3 = d_cdrain.d3_q3; gds3 = d_cdrain.d3_r3; gm2ds = d_cdrain.d3_p2r; gm2b = d_cdrain.d3_p2q; gb2ds = d_cdrain.d3_q2r; gmb2 = d_cdrain.d3_pq2; gmds2 = d_cdrain.d3_pr2; gbds2 = d_cdrain.d3_qr2; gmbds = d_cdrain.d3_pqr; if (here->MOS9mode == 1) { /* normal mode - no source-drain interchange */ here->cdr_x2 = gm2; here->cdr_y2 = gb2;; here->cdr_z2 = gds2;; here->cdr_xy = gmb; here->cdr_yz = gbds; here->cdr_xz = gmds; here->cdr_x3 = gm3; here->cdr_y3 = gb3; here->cdr_z3 = gds3; here->cdr_x2z = gm2ds; here->cdr_x2y = gm2b; here->cdr_y2z = gb2ds; here->cdr_xy2 = gmb2; here->cdr_xz2 = gmds2; here->cdr_yz2 = gbds2; here->cdr_xyz = gmbds; /* the gate caps have been divided and made into Taylor coeffs., but not adjusted for type */ here->capgs2 = model->MOS9type*lcapgs2; here->capgs3 = lcapgs3; here->capgd2 = model->MOS9type*lcapgd2; here->capgd3 = lcapgd3; } else { /* * inverse mode - source and drain interchanged */ here->cdr_x2 = -gm2; here->cdr_y2 = -gb2; here->cdr_z2 = -(gm2 + gb2 + gds2 + 2*(gmb + gmds + gbds)); here->cdr_xy = -gmb; here->cdr_yz = gmb + gb2 + gbds; here->cdr_xz = gm2 + gmb + gmds; here->cdr_x3 = -gm3; here->cdr_y3 = -gb3; here->cdr_z3 = gm3 + gb3 + gds3 + 3*(gm2b + gm2ds + gmb2 + gb2ds + gmds2 + gbds2) + 6*gmbds ; here->cdr_x2z = gm3 + gm2b + gm2ds; here->cdr_x2y = -gm2b; here->cdr_y2z = gmb2 + gb3 + gb2ds; here->cdr_xy2 = -gmb2; here->cdr_xz2 = -(gm3 + 2*(gm2b + gm2ds + gmbds) + gmb2 + gmds2); here->cdr_yz2 = -(gb3 + 2*(gmb2 + gb2ds + gmbds) + gm2b + gbds2); here->cdr_xyz = gm2b + gmb2 + gmbds; here->capgs2 = model->MOS9type*lcapgd2; here->capgs3 = lcapgd3; here->capgd2 = model->MOS9type*lcapgs2; here->capgd3 = lcapgs3; } /* now to adjust for type and multiply by factors to convert to Taylor coeffs. */ here->cdr_x2 = 0.5*model->MOS9type*here->cdr_x2; here->cdr_y2 = 0.5*model->MOS9type*here->cdr_y2; here->cdr_z2 = 0.5*model->MOS9type*here->cdr_z2; here->cdr_xy = model->MOS9type*here->cdr_xy; here->cdr_yz = model->MOS9type*here->cdr_yz; here->cdr_xz = model->MOS9type*here->cdr_xz; here->cdr_x3 = here->cdr_x3/6.; here->cdr_y3 = here->cdr_y3/6.; here->cdr_z3 = here->cdr_z3/6.; here->cdr_x2z = 0.5*here->cdr_x2z; here->cdr_x2y = 0.5*here->cdr_x2y; here->cdr_y2z = 0.5*here->cdr_y2z; here->cdr_xy2 = 0.5*here->cdr_xy2; here->cdr_xz2 = 0.5*here->cdr_xz2; here->cdr_yz2 = 0.5*here->cdr_yz2; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos9/mos9sset.c0000644000175000017500000000263613546075722022013 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Alan Gillespie This function is obsolete (was used by an old sensitivity analysis) **********/ /* loop through all the devices and * allocate parameter #s to design parameters */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mos9defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS9sSetup(SENstruct *info, GENmodel *inModel) { MOS9model *model = (MOS9model *)inModel; MOS9instance *here; /* loop through all the models */ for( ; model != NULL; model = MOS9nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS9instances(model); here != NULL ; here=MOS9nextInstance(here)) { if(here->MOS9senParmNo){ if((here->MOS9sens_l)&&(here->MOS9sens_w)){ here->MOS9senParmNo = ++(info->SENparms); ++(info->SENparms);/* MOS has two design parameters */ } else{ here->MOS9senParmNo = ++(info->SENparms); } } here->MOS9senPertFlag = OFF; if((here->MOS9sens = TMALLOC(double, 72)) == NULL) { return(E_NOMEM); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos9/mos9ask.c0000644000175000017500000004064613546075722021616 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Mathew Lew and Thomas L. Quarles Modified: Alan Gillespie **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "mos9defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int MOS9ask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { MOS9instance *here = (MOS9instance *)inst; double vr; double vi; double sr; double si; double vm; static char *msg = "Current and power not available for ac analysis"; switch(which) { case MOS9_TEMP: value->rValue = here->MOS9temp-CONSTCtoK; return(OK); case MOS9_CGS: value->rValue = 2* *(ckt->CKTstate0 + here->MOS9capgs); return(OK); case MOS9_CGD: value->rValue = 2* *(ckt->CKTstate0 + here->MOS9capgd); return(OK); case MOS9_M: value->rValue = here->MOS9m; return(OK); case MOS9_L: value->rValue = here->MOS9l; return(OK); case MOS9_W: value->rValue = here->MOS9w; return(OK); case MOS9_AS: value->rValue = here->MOS9sourceArea; return(OK); case MOS9_AD: value->rValue = here->MOS9drainArea; return(OK); case MOS9_PS: value->rValue = here->MOS9sourcePerimiter; return(OK); case MOS9_PD: value->rValue = here->MOS9drainPerimiter; return(OK); case MOS9_NRS: value->rValue = here->MOS9sourceSquares; return(OK); case MOS9_NRD: value->rValue = here->MOS9drainSquares; return(OK); case MOS9_OFF: value->rValue = here->MOS9off; return(OK); case MOS9_IC_VBS: value->rValue = here->MOS9icVBS; return(OK); case MOS9_IC_VDS: value->rValue = here->MOS9icVDS; return(OK); case MOS9_IC_VGS: value->rValue = here->MOS9icVGS; return(OK); case MOS9_DNODE: value->iValue = here->MOS9dNode; return(OK); case MOS9_GNODE: value->iValue = here->MOS9gNode; return(OK); case MOS9_SNODE: value->iValue = here->MOS9sNode; return(OK); case MOS9_BNODE: value->iValue = here->MOS9bNode; return(OK); case MOS9_DNODEPRIME: value->iValue = here->MOS9dNodePrime; return(OK); case MOS9_SNODEPRIME: value->iValue = here->MOS9sNodePrime; return(OK); case MOS9_SOURCECONDUCT: value->rValue = here->MOS9sourceConductance; return(OK); case MOS9_DRAINCONDUCT: value->rValue = here->MOS9drainConductance; return(OK); case MOS9_SOURCERESIST: if (here->MOS9sNodePrime != here->MOS9sNode) value->rValue = 1.0 / here->MOS9sourceConductance; else value->rValue = 0.0; return(OK); case MOS9_DRAINRESIST: if (here->MOS9dNodePrime != here->MOS9dNode) value->rValue = 1.0 / here->MOS9drainConductance; else value->rValue = 0.0; return(OK); case MOS9_VON: value->rValue = here->MOS9von; return(OK); case MOS9_VDSAT: value->rValue = here->MOS9vdsat; return(OK); case MOS9_SOURCEVCRIT: value->rValue = here->MOS9sourceVcrit; return(OK); case MOS9_DRAINVCRIT: value->rValue = here->MOS9drainVcrit; return(OK); case MOS9_CD: value->rValue = here->MOS9cd; return(OK); case MOS9_CBS: value->rValue = here->MOS9cbs; return(OK); case MOS9_CBD: value->rValue = here->MOS9cbd; return(OK); case MOS9_GMBS: value->rValue = here->MOS9gmbs; return(OK); case MOS9_GM: value->rValue = here->MOS9gm; return(OK); case MOS9_GDS: value->rValue = here->MOS9gds; return(OK); case MOS9_GBD: value->rValue = here->MOS9gbd; return(OK); case MOS9_GBS: value->rValue = here->MOS9gbs; return(OK); case MOS9_CAPBD: value->rValue = here->MOS9capbd; return(OK); case MOS9_CAPBS: value->rValue = here->MOS9capbs; return(OK); case MOS9_CAPZEROBIASBD: value->rValue = here->MOS9Cbd; return(OK); case MOS9_CAPZEROBIASBDSW: value->rValue = here->MOS9Cbdsw; return(OK); case MOS9_CAPZEROBIASBS: value->rValue = here->MOS9Cbs; return(OK); case MOS9_CAPZEROBIASBSSW: value->rValue = here->MOS9Cbssw; return(OK); case MOS9_VBD: value->rValue = *(ckt->CKTstate0 + here->MOS9vbd); return(OK); case MOS9_VBS: value->rValue = *(ckt->CKTstate0 + here->MOS9vbs); return(OK); case MOS9_VGS: value->rValue = *(ckt->CKTstate0 + here->MOS9vgs); return(OK); case MOS9_VDS: value->rValue = *(ckt->CKTstate0 + here->MOS9vds); return(OK); case MOS9_CAPGS: value->rValue = 2* *(ckt->CKTstate0 + here->MOS9capgs); /* add overlap capacitance */ value->rValue += (MOS9modPtr(here)->MOS9gateSourceOverlapCapFactor) * here->MOS9m * (here->MOS9w +MOS9modPtr(here)->MOS9widthAdjust -2*(MOS9modPtr(here)->MOS9widthNarrow)); return(OK); case MOS9_QGS: value->rValue = *(ckt->CKTstate0 + here->MOS9qgs); return(OK); case MOS9_CQGS: value->rValue = *(ckt->CKTstate0 + here->MOS9cqgs); return(OK); case MOS9_CAPGD: value->rValue = 2* *(ckt->CKTstate0 + here->MOS9capgd); /* add overlap capacitance */ value->rValue += (MOS9modPtr(here)->MOS9gateDrainOverlapCapFactor) * here->MOS9m * (here->MOS9w +MOS9modPtr(here)->MOS9widthAdjust -2*(MOS9modPtr(here)->MOS9widthNarrow)); return(OK); case MOS9_QGD: value->rValue = *(ckt->CKTstate0 + here->MOS9qgd); return(OK); case MOS9_CQGD: value->rValue = *(ckt->CKTstate0 + here->MOS9cqgd); return(OK); case MOS9_CAPGB: value->rValue = 2* *(ckt->CKTstate0 + here->MOS9capgb); /* add overlap capacitance */ value->rValue += (MOS9modPtr(here)->MOS9gateBulkOverlapCapFactor) * here->MOS9m * (here->MOS9l +MOS9modPtr(here)->MOS9lengthAdjust -2*(MOS9modPtr(here)->MOS9latDiff)); return(OK); case MOS9_QGB: value->rValue = *(ckt->CKTstate0 + here->MOS9qgb); return(OK); case MOS9_CQGB: value->rValue = *(ckt->CKTstate0 + here->MOS9cqgb); return(OK); case MOS9_QBD: value->rValue = *(ckt->CKTstate0 + here->MOS9qbd); return(OK); case MOS9_CQBD: value->rValue = *(ckt->CKTstate0 + here->MOS9cqbd); return(OK); case MOS9_QBS: value->rValue = *(ckt->CKTstate0 + here->MOS9qbs); return(OK); case MOS9_CQBS: value->rValue = *(ckt->CKTstate0 + here->MOS9cqbs); return(OK); case MOS9_L_SENS_DC: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_Sap[select->iValue + 1]+ here->MOS9senParmNo); } return(OK); case MOS9_L_SENS_REAL: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS9senParmNo); } return(OK); case MOS9_L_SENS_IMAG: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS9senParmNo); } return(OK); case MOS9_L_SENS_MAG: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = sqrt(vr*vr + vi*vi); if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS9senParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS9senParmNo); value->rValue = (vr * sr + vi * si)/vm; } return(OK); case MOS9_L_SENS_PH: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = vr*vr + vi*vi; if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS9senParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS9senParmNo); value->rValue = (vr * si - vi * sr)/vm; } return(OK); case MOS9_L_SENS_CPLX: if(ckt->CKTsenInfo){ value->cValue.real= *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS9senParmNo); value->cValue.imag= *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS9senParmNo); } return(OK); case MOS9_W_SENS_DC: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_Sap[select->iValue + 1]+ here->MOS9senParmNo + here->MOS9sens_l); } return(OK); case MOS9_W_SENS_REAL: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS9senParmNo + here->MOS9sens_l); } return(OK); case MOS9_W_SENS_IMAG: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS9senParmNo + here->MOS9sens_l); } return(OK); case MOS9_W_SENS_MAG: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = sqrt(vr*vr + vi*vi); if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS9senParmNo + here->MOS9sens_l); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS9senParmNo + here->MOS9sens_l); value->rValue = (vr * sr + vi * si)/vm; } return(OK); case MOS9_W_SENS_PH: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = vr*vr + vi*vi; if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS9senParmNo + here->MOS9sens_l); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS9senParmNo + here->MOS9sens_l); value->rValue = (vr * si - vi * sr)/vm; } return(OK); case MOS9_W_SENS_CPLX: if(ckt->CKTsenInfo){ value->cValue.real= *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS9senParmNo + here->MOS9sens_l); value->cValue.imag= *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS9senParmNo + here->MOS9sens_l); } return(OK); case MOS9_CB : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MOS9ask.c"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = here->MOS9cbd + here->MOS9cbs - *(ckt->CKTstate0 + here->MOS9cqgb); } return(OK); case MOS9_CG : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MOS9ask.c"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else if (ckt->CKTcurrentAnalysis & (DOING_DCOP | DOING_TRCV)) { value->rValue = 0; } else if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && (ckt->CKTmode & MODETRANOP)) { value->rValue = 0; } else { value->rValue = *(ckt->CKTstate0 + here->MOS9cqgb) + *(ckt->CKTstate0 + here->MOS9cqgd) + *(ckt->CKTstate0 + here->MOS9cqgs); } return(OK); case MOS9_CS : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MOS9ask.c"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = -here->MOS9cd; value->rValue -= here->MOS9cbd + here->MOS9cbs - *(ckt->CKTstate0 + here->MOS9cqgb); if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { value->rValue -= *(ckt->CKTstate0 + here->MOS9cqgb) + *(ckt->CKTstate0 + here->MOS9cqgd) + *(ckt->CKTstate0 + here->MOS9cqgs); } } return(OK); case MOS9_POWER : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MOS9ask.c"; strcpy(errMsg,msg); return(E_ASKPOWER); } else { double temp; value->rValue = here->MOS9cd * *(ckt->CKTrhsOld + here->MOS9dNode); value->rValue += (here->MOS9cbd + here->MOS9cbs - *(ckt->CKTstate0 + here->MOS9cqgb)) * *(ckt->CKTrhsOld + here->MOS9bNode); if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { value->rValue += (*(ckt->CKTstate0 + here->MOS9cqgb) + *(ckt->CKTstate0 + here->MOS9cqgd) + *(ckt->CKTstate0 + here->MOS9cqgs)) * *(ckt->CKTrhsOld + here->MOS9gNode); } temp = -here->MOS9cd; temp -= here->MOS9cbd + here->MOS9cbs ; if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { temp -= *(ckt->CKTstate0 + here->MOS9cqgb) + *(ckt->CKTstate0 + here->MOS9cqgd) + *(ckt->CKTstate0 + here->MOS9cqgs); } value->rValue += temp * *(ckt->CKTrhsOld + here->MOS9sNode); } return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/mos9/mos9init.c0000644000175000017500000000323613546075722021775 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "mos9itf.h" #include "mos9ext.h" #include "mos9init.h" SPICEdev MOS9info = { .DEVpublic = { .name = "Mos9", .description = "Modified Level 3 MOSfet model", .terms = &MOS9nSize, .numNames = &MOS9nSize, .termNames = MOS9names, .numInstanceParms = &MOS9pTSize, .instanceParms = MOS9pTable, .numModelParms = &MOS9mPTSize, .modelParms = MOS9mPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = MOS9param, .DEVmodParam = MOS9mParam, .DEVload = MOS9load, .DEVsetup = MOS9setup, .DEVunsetup = MOS9unsetup, .DEVpzSetup = MOS9setup, .DEVtemperature = MOS9temp, .DEVtrunc = MOS9trunc, .DEVfindBranch = NULL, .DEVacLoad = MOS9acLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = MOS9delete, .DEVsetic = MOS9getic, .DEVask = MOS9ask, .DEVmodAsk = MOS9mAsk, .DEVpzLoad = MOS9pzLoad, .DEVconvTest = MOS9convTest, .DEVsenSetup = MOS9sSetup, .DEVsenLoad = MOS9sLoad, .DEVsenUpdate = MOS9sUpdate, .DEVsenAcLoad = MOS9sAcLoad, .DEVsenPrint = MOS9sPrint, .DEVsenTrunc = NULL, .DEVdisto = MOS9disto, .DEVnoise = MOS9noise, .DEVsoaCheck = NULL, .DEVinstSize = &MOS9iSize, .DEVmodSize = &MOS9mSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_mos9_info(void) { return &MOS9info; } tmpk8ny_4pz/src/spicelib/devices/mos9/mos9init.h0000644000175000017500000000037013546075722021776 0ustar carstencarsten#ifndef _MOS9INIT_H #define _MOS9INIT_H extern IFparm MOS9pTable[ ]; extern IFparm MOS9mPTable[ ]; extern char *MOS9names[ ]; extern int MOS9pTSize; extern int MOS9mPTSize; extern int MOS9nSize; extern int MOS9iSize; extern int MOS9mSize; #endif tmpk8ny_4pz/src/spicelib/devices/mos9/mos9ic.c0000644000175000017500000000247413546075722021430 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Alan Gillespie **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos9defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS9getic(GENmodel *inModel, CKTcircuit *ckt) { MOS9model *model = (MOS9model *)inModel; MOS9instance *here; /* * grab initial conditions out of rhs array. User specified, so use * external nodes to get values */ for( ; model ; model = MOS9nextModel(model)) { for(here = MOS9instances(model); here ; here = MOS9nextInstance(here)) { if(!here->MOS9icVBSGiven) { here->MOS9icVBS = *(ckt->CKTrhs + here->MOS9bNode) - *(ckt->CKTrhs + here->MOS9sNode); } if(!here->MOS9icVDSGiven) { here->MOS9icVDS = *(ckt->CKTrhs + here->MOS9dNode) - *(ckt->CKTrhs + here->MOS9sNode); } if(!here->MOS9icVGSGiven) { here->MOS9icVGS = *(ckt->CKTrhs + here->MOS9gNode) - *(ckt->CKTrhs + here->MOS9sNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos9/mos9pzld.c0000644000175000017500000001242113546075722021777 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Alan Gillespie **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "mos9defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS9pzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { MOS9model *model = (MOS9model *)inModel; MOS9instance *here; int xnrm; int xrev; double xgs; double xgd; double xgb; double xbd; double xbs; double capgs; double capgd; double capgb; double GateBulkOverlapCap; double GateDrainOverlapCap; double GateSourceOverlapCap; double EffectiveLength; double EffectiveWidth; for( ; model != NULL; model = MOS9nextModel(model)) { for(here = MOS9instances(model); here!= NULL; here = MOS9nextInstance(here)) { if (here->MOS9mode < 0) { xnrm=0; xrev=1; } else { xnrm=1; xrev=0; } /* * meyer's model parameters */ EffectiveWidth=here->MOS9w-2*model->MOS9widthNarrow+ model->MOS9widthAdjust; EffectiveLength=here->MOS9l - 2*model->MOS9latDiff+ model->MOS9lengthAdjust; GateSourceOverlapCap = model->MOS9gateSourceOverlapCapFactor * here->MOS9m * EffectiveWidth; GateDrainOverlapCap = model->MOS9gateDrainOverlapCapFactor * here->MOS9m * EffectiveWidth; GateBulkOverlapCap = model->MOS9gateBulkOverlapCapFactor * here->MOS9m * EffectiveLength; capgs = ( 2* *(ckt->CKTstate0+here->MOS9capgs)+ GateSourceOverlapCap ); capgd = ( 2* *(ckt->CKTstate0+here->MOS9capgd)+ GateDrainOverlapCap ); capgb = ( 2* *(ckt->CKTstate0+here->MOS9capgb)+ GateBulkOverlapCap ); xgs = capgs; xgd = capgd; xgb = capgb; xbd = here->MOS9capbd; xbs = here->MOS9capbs; /*printf("mos2: xgs=%g, xgd=%g, xgb=%g, xbd=%g, xbs=%g\n", xgs,xgd,xgb,xbd,xbs);*/ /* * load matrix */ *(here->MOS9GgPtr ) += (xgd+xgs+xgb)*s->real; *(here->MOS9GgPtr +1) += (xgd+xgs+xgb)*s->imag; *(here->MOS9BbPtr ) += (xgb+xbd+xbs)*s->real; *(here->MOS9BbPtr +1) += (xgb+xbd+xbs)*s->imag; *(here->MOS9DPdpPtr ) += (xgd+xbd)*s->real; *(here->MOS9DPdpPtr +1) += (xgd+xbd)*s->imag; *(here->MOS9SPspPtr ) += (xgs+xbs)*s->real; *(here->MOS9SPspPtr +1) += (xgs+xbs)*s->imag; *(here->MOS9GbPtr ) -= xgb*s->real; *(here->MOS9GbPtr +1) -= xgb*s->imag; *(here->MOS9GdpPtr ) -= xgd*s->real; *(here->MOS9GdpPtr +1) -= xgd*s->imag; *(here->MOS9GspPtr ) -= xgs*s->real; *(here->MOS9GspPtr +1) -= xgs*s->imag; *(here->MOS9BgPtr ) -= xgb*s->real; *(here->MOS9BgPtr +1) -= xgb*s->imag; *(here->MOS9BdpPtr ) -= xbd*s->real; *(here->MOS9BdpPtr +1) -= xbd*s->imag; *(here->MOS9BspPtr ) -= xbs*s->real; *(here->MOS9BspPtr +1) -= xbs*s->imag; *(here->MOS9DPgPtr ) -= xgd*s->real; *(here->MOS9DPgPtr +1) -= xgd*s->imag; *(here->MOS9DPbPtr ) -= xbd*s->real; *(here->MOS9DPbPtr +1) -= xbd*s->imag; *(here->MOS9SPgPtr ) -= xgs*s->real; *(here->MOS9SPgPtr +1) -= xgs*s->imag; *(here->MOS9SPbPtr ) -= xbs*s->real; *(here->MOS9SPbPtr +1) -= xbs*s->imag; *(here->MOS9DdPtr) += here->MOS9drainConductance; *(here->MOS9SsPtr) += here->MOS9sourceConductance; *(here->MOS9BbPtr) += here->MOS9gbd+here->MOS9gbs; *(here->MOS9DPdpPtr) += here->MOS9drainConductance+ here->MOS9gds+here->MOS9gbd+ xrev*(here->MOS9gm+here->MOS9gmbs); *(here->MOS9SPspPtr) += here->MOS9sourceConductance+ here->MOS9gds+here->MOS9gbs+ xnrm*(here->MOS9gm+here->MOS9gmbs); *(here->MOS9DdpPtr) -= here->MOS9drainConductance; *(here->MOS9SspPtr) -= here->MOS9sourceConductance; *(here->MOS9BdpPtr) -= here->MOS9gbd; *(here->MOS9BspPtr) -= here->MOS9gbs; *(here->MOS9DPdPtr) -= here->MOS9drainConductance; *(here->MOS9DPgPtr) += (xnrm-xrev)*here->MOS9gm; *(here->MOS9DPbPtr) += -here->MOS9gbd+(xnrm-xrev)*here->MOS9gmbs; *(here->MOS9DPspPtr) -= here->MOS9gds+ xnrm*(here->MOS9gm+here->MOS9gmbs); *(here->MOS9SPgPtr) -= (xnrm-xrev)*here->MOS9gm; *(here->MOS9SPsPtr) -= here->MOS9sourceConductance; *(here->MOS9SPbPtr) -= here->MOS9gbs+(xnrm-xrev)*here->MOS9gmbs; *(here->MOS9SPdpPtr) -= here->MOS9gds+ xrev*(here->MOS9gm+here->MOS9gmbs); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos9/mos9itf.h0000644000175000017500000000026113546075722021614 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_MOS9 #define DEV_MOS9 SPICEdev *get_mos9_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/hfet1/0000755000175000017500000000000013546075722020172 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/hfet1/hfetparam.c0000644000175000017500000000365513546075722022316 0ustar carstencarsten/********** Imported from MacSpice3f4 - Antony Wilson Modified: Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "hfetdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int HFETAparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { HFETAinstance *here = (HFETAinstance*)inst; NG_IGNORE(select); switch(param) { case HFETA_LENGTH: here->HFETAlength = value->rValue; here->HFETAlengthGiven = TRUE; break; case HFETA_WIDTH: here->HFETAwidth = value->rValue; here->HFETAwidthGiven = TRUE; break; case HFETA_M: here->HFETAm = value->rValue; here->HFETAmGiven = TRUE; break; case HFETA_IC_VDS: here->HFETAicVDS = value->rValue; here->HFETAicVDSGiven = TRUE; break; case HFETA_IC_VGS: here->HFETAicVGS = value->rValue; here->HFETAicVGSGiven = TRUE; break; case HFETA_OFF: here->HFETAoff = value->iValue; break; case HFETA_IC: switch(value->v.numValue) { case 2: here->HFETAicVGS = *(value->v.vec.rVec+1); here->HFETAicVGSGiven = TRUE; case 1: here->HFETAicVDS = *(value->v.vec.rVec); here->HFETAicVDSGiven = TRUE; break; default: return(E_BADPARM); } break; case HFETA_TEMP: here->HFETAtemp = value->rValue + CONSTCtoK; here->HFETAtempGiven = TRUE; break; case HFETA_DTEMP: here->HFETAdtemp = value->rValue; here->HFETAdtempGiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hfet1/hfetinit.c0000644000175000017500000000315713546075722022156 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "hfetitf.h" #include "hfetext.h" #include "hfetinit.h" SPICEdev HFETAinfo = { .DEVpublic = { .name = "HFET1", .description = "HFET1 Model", .terms = &HFETAnSize, .numNames = &HFETAnSize, .termNames = HFETAnames, .numInstanceParms = &HFETApTSize, .instanceParms = HFETApTable, .numModelParms = &HFETAmPTSize, .modelParms = HFETAmPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = HFETAparam, .DEVmodParam = HFETAmParam, .DEVload = HFETAload, .DEVsetup = HFETAsetup, .DEVunsetup = HFETAunsetup, .DEVpzSetup = HFETAsetup, .DEVtemperature = HFETAtemp, .DEVtrunc = HFETAtrunc, .DEVfindBranch = NULL, .DEVacLoad = HFETAacLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = HFETAgetic, .DEVask = HFETAask, .DEVmodAsk = HFETAmAsk, .DEVpzLoad = HFETApzLoad, .DEVconvTest = NULL, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &HFETAiSize, .DEVmodSize = &HFETAmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_hfeta_info(void) { return &HFETAinfo; } tmpk8ny_4pz/src/spicelib/devices/hfet1/Makefile.am0000644000175000017500000000071713546075722022233 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libhfet.la libhfet_la_SOURCES = \ hfet.c \ hfetacl.c \ hfetask.c \ hfetdefs.h \ hfetext.h \ hfetgetic.c \ hfetinit.c \ hfetinit.h \ hfetitf.h \ hfetload.c \ hfetmask.c \ hfetmpar.c \ hfetparam.c \ hfetpzl.c \ hfetsetup.c \ hfettemp.c \ hfettrunc.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/hfet1/hfetmask.c0000644000175000017500000001667013546075722022152 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ /* Imported into HFETA model: Paolo Nenzi 2001 */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "hfetdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int HFETAmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { HFETAmodel *here = (HFETAmodel*)inst; NG_IGNORE(ckt); switch(which) { case HFETA_MOD_VTO: value->rValue = here->HFETAthreshold; return (OK); case HFETA_MOD_LAMBDA: value->rValue = here->HFETAlambda; return (OK); case HFETA_MOD_RD: value->rValue = here->HFETArd; return (OK); case HFETA_MOD_RS: value->rValue = here->HFETArs; return (OK); case HFETA_MOD_RG: value->rValue = here->HFETArg; return (OK); case HFETA_MOD_RDI: value->rValue = here->HFETArdi; return (OK); case HFETA_MOD_RSI: value->rValue = here->HFETArsi; return (OK); case HFETA_MOD_RGS: value->rValue = here->HFETArgs; return (OK); case HFETA_MOD_RGD: value->rValue = here->HFETArgd; return (OK); case HFETA_MOD_RI: value->rValue = here->HFETAri; return (OK); case HFETA_MOD_RF: value->rValue = here->HFETArf; return (OK); case HFETA_MOD_ETA: value->rValue = here->HFETAeta; return (OK); case HFETA_MOD_M: value->rValue = here->HFETAm; return (OK); case HFETA_MOD_MC: value->rValue = here->HFETAmc; return (OK); case HFETA_MOD_GAMMA: value->rValue = here->HFETAgamma; return (OK); case HFETA_MOD_SIGMA0: value->rValue = here->HFETAsigma0; return (OK); case HFETA_MOD_VSIGMAT: value->rValue = here->HFETAvsigmat; return (OK); case HFETA_MOD_VSIGMA: value->rValue = here->HFETAvsigma; return (OK); case HFETA_MOD_MU: value->rValue = here->HFETAmu; return (OK); case HFETA_MOD_DI: value->rValue = here->HFETAdi; return (OK); case HFETA_MOD_DELTA: value->rValue = here->HFETAdelta; return (OK); case HFETA_MOD_VS: value->rValue = here->HFETAvs; return (OK); case HFETA_MOD_NMAX: value->rValue = here->HFETAnmax; return (OK); case HFETA_MOD_DELTAD: value->rValue = here->HFETAdeltad; return (OK); case HFETA_MOD_JS1D: value->rValue = here->HFETAjs1d; return (OK); case HFETA_MOD_JS2D: value->rValue = here->HFETAjs2d; return (OK); case HFETA_MOD_JS1S: value->rValue = here->HFETAjs1s; return (OK); case HFETA_MOD_JS2S: value->rValue = here->HFETAjs2s; return (OK); case HFETA_MOD_M1D: value->rValue = here->HFETAm1d; return (OK); case HFETA_MOD_M2D: value->rValue = here->HFETAm2d; return (OK); case HFETA_MOD_M1S: value->rValue = here->HFETAm1s; return (OK); case HFETA_MOD_M2S: value->rValue = here->HFETAm2s; return (OK); case HFETA_MOD_EPSI: value->rValue = here->HFETAepsi; return (OK); case HFETA_MOD_P: value->rValue = here->HFETAp; return (OK); case HFETA_MOD_CM3: value->rValue = here->HFETAcm3; return (OK); case HFETA_MOD_A1: value->rValue = here->HFETAa1; return (OK); case HFETA_MOD_A2: value->rValue = here->HFETAa2; return (OK); case HFETA_MOD_MV1: value->rValue = here->HFETAmv1; return (OK); case HFETA_MOD_KAPPA: value->rValue = here->HFETAkappa; return (OK); case HFETA_MOD_DELF: value->rValue = here->HFETAdelf; return (OK); case HFETA_MOD_FGDS: value->rValue = here->HFETAfgds; return (OK); case HFETA_MOD_TF: value->rValue = here->HFETAtf; return (OK); case HFETA_MOD_CDS: value->rValue = here->HFETAcds; return (OK); case HFETA_MOD_PHIB: value->rValue = here->HFETAphib; return (OK); case HFETA_MOD_TALPHA: value->rValue = here->HFETAtalpha; return (OK); case HFETA_MOD_MT1: value->rValue = here->HFETAmt1; return (OK); case HFETA_MOD_MT2: value->rValue = here->HFETAmt2; return (OK); case HFETA_MOD_CK1: value->rValue = here->HFETAck1; return (OK); case HFETA_MOD_CK2: value->rValue = here->HFETAck2; return (OK); case HFETA_MOD_CM1: value->rValue = here->HFETAcm1; return (OK); case HFETA_MOD_CM2: value->rValue = here->HFETAcm2; return (OK); case HFETA_MOD_ASTAR: value->rValue = here->HFETAastar; return (OK); case HFETA_MOD_ETA1: value->rValue = here->HFETAeta1; return (OK); case HFETA_MOD_D1: value->rValue = here->HFETAd1; return (OK); case HFETA_MOD_VT1: value->rValue = here->HFETAvt1; return (OK); case HFETA_MOD_ETA2: value->rValue = here->HFETAeta2; return (OK); case HFETA_MOD_D2: value->rValue = here->HFETAd2; return (OK); case HFETA_MOD_VT2: value->rValue = here->HFETAvt2; return (OK); case HFETA_MOD_GGR: value->rValue = here->HFETAggr; return (OK); case HFETA_MOD_DEL: value->rValue = here->HFETAdel; return (OK); case HFETA_MOD_GATEMOD: value->iValue = here->HFETAgatemod; return (OK); case HFETA_MOD_KLAMBDA: value->rValue = here->HFETAklambda; return (OK); case HFETA_MOD_KMU: value->rValue = here->HFETAkmu; return (OK); case HFETA_MOD_KVTO: value->rValue = here->HFETAkvto; return (OK); case HFETA_MOD_DRAINCONDUCT: value->rValue = here->HFETAdrainConduct; return (OK); case HFETA_MOD_SOURCECONDUCT: value->rValue = here->HFETAsourceConduct; return (OK); /* case HFETA_MOD_DEPLETIONCAP: value->rValue = here->HFETA???; return(OK); */ /* case HFETA_MOD_VCRIT: value->rValue = here->HFETAvcrit; return (OK); */ case HFETA_MOD_TYPE: if (here->HFETAtype == NHFET) value->sValue = "nhfet"; else value->sValue = "phfet"; return (OK); default: return (E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/hfet1/hfetpzl.c0000644000175000017500000001276513546075722022025 0ustar carstencarsten/********** Author: 2003 Paolo Nenzi **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "hfetdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HFETApzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { HFETAmodel *model = (HFETAmodel*)inModel; HFETAinstance *here; double gm; double gds; double xds; double ggs; double xgs; double ggd; double xgd; double ggspp; double ggdpp; double f; double m; for( ; model != NULL; model = HFETAnextModel(model)) { for( here = HFETAinstances(model); here != NULL; here = HFETAnextInstance(here)) { gm = *(ckt->CKTstate0 + here->HFETAgm); gds = *(ckt->CKTstate0 + here->HFETAgds); xds = CDS*ckt->CKTomega; ggs = *(ckt->CKTstate0 + here->HFETAggs); xgs = *(ckt->CKTstate0 + here->HFETAqgs); ggd = *(ckt->CKTstate0 + here->HFETAggd); xgd = *(ckt->CKTstate0 + here->HFETAqgd); ggspp = *(ckt->CKTstate0 + here->HFETAggspp); ggdpp = *(ckt->CKTstate0 + here->HFETAggdpp); if(model->HFETAkappaGiven && here->HFETAdelf != 0.0) { f = ckt->CKTomega/2/M_PI; gds = gds*(1+0.5*model->HFETAkappa*(1+tanh((f-here->HFETAfgds)/here->HFETAdelf))); } m = here->HFETAm; *(here->HFETAdrainDrainPtr) += m * (model->HFETAdrainConduct); *(here->HFETAsourceSourcePtr) += m * (model->HFETAsourceConduct); *(here->HFETAgatePrimeGatePrimePtr) += m * (ggd+ggs+ggspp+ggdpp+model->HFETAgateConduct); *(here->HFETAdrainPrimeDrainPrimePtr) += m * (gds+ggd+model->HFETAdrainConduct+model->HFETAgf); *(here->HFETAsourcePrimeSourcePrimePtr) += m * (gds+gm+ggs+model->HFETAsourceConduct+model->HFETAgi); *(here->HFETAsourcePrmPrmSourcePrmPrmPtr) += m * (model->HFETAgi+ggspp); *(here->HFETAdrainPrmPrmDrainPrmPrmPtr) += m * (model->HFETAgf+ggdpp); *(here->HFETAdrainDrainPrimePtr) -= m * (model->HFETAdrainConduct); *(here->HFETAdrainPrimeDrainPtr) -= m * (model->HFETAdrainConduct); *(here->HFETAsourceSourcePrimePtr) -= m * (model->HFETAsourceConduct); *(here->HFETAsourcePrimeSourcePtr) -= m * (model->HFETAsourceConduct); *(here->HFETAgatePrimeDrainPrimePtr) -= m * (ggd); *(here->HFETAdrainPrimeGatePrimePtr) += m * (gm-ggd); *(here->HFETAgatePrimeSourcePrimePtr) -= m * (ggs); *(here->HFETAsourcePrimeGatePrimePtr) += m * (-ggs-gm); *(here->HFETAdrainPrimeSourcePrimePtr) += m * (-gds-gm); *(here->HFETAsourcePrimeDrainPrimePtr) -= m * (gds); *(here->HFETAsourcePrimeSourcePrmPrmPtr) -= m * (model->HFETAgi); *(here->HFETAsourcePrmPrmSourcePrimePtr) -= m * (model->HFETAgi); *(here->HFETAgatePrimeSourcePrmPrmPtr) -= m * (ggspp); *(here->HFETAsourcePrmPrmGatePrimePtr) -= m * (ggspp); *(here->HFETAdrainPrimeDrainPrmPrmPtr) -= m * (model->HFETAgf); *(here->HFETAdrainPrmPrmDrainPrimePtr) -= m * (model->HFETAgf); *(here->HFETAgatePrimeDrainPrmPrmPtr) -= m * (ggdpp); *(here->HFETAdrainPrmPrmGatePrimePtr) -= m * (ggdpp); *(here->HFETAgateGatePtr) += m * (model->HFETAgateConduct); *(here->HFETAgateGatePrimePtr) -= m * (model->HFETAgateConduct); *(here->HFETAgatePrimeGatePtr) -= m * (model->HFETAgateConduct); *(here->HFETAgatePrimeGatePrimePtr) += m * ((xgd+xgs) * s->real); *(here->HFETAgatePrimeGatePrimePtr+1) += m * ((xgd+xgs) * s->imag); *(here->HFETAdrainPrmPrmDrainPrmPrmPtr) += m * (xgd * s->real); *(here->HFETAdrainPrmPrmDrainPrmPrmPtr+1) += m * (xgd * s->imag); *(here->HFETAsourcePrmPrmSourcePrmPrmPtr) += m * (xgs * s->real); *(here->HFETAsourcePrmPrmSourcePrmPrmPtr+1) += m * (xgs * s->imag); *(here->HFETAgatePrimeDrainPrmPrmPtr) -= m * (xgd * s->real); *(here->HFETAgatePrimeDrainPrmPrmPtr+1) -= m * (xgd * s->imag); *(here->HFETAgatePrimeSourcePrmPrmPtr) -= m * (xgs * s->real); *(here->HFETAgatePrimeSourcePrmPrmPtr+1) -= m * (xgs * s->imag); *(here->HFETAdrainPrmPrmGatePrimePtr) -= m * (xgd * s->real); *(here->HFETAdrainPrmPrmGatePrimePtr+1) -= m * (xgd * s->imag); *(here->HFETAsourcePrmPrmGatePrimePtr) -= m * (xgs * s->real); *(here->HFETAsourcePrmPrmGatePrimePtr+1) -= m * (xgs * s->imag); *(here->HFETAdrainPrimeDrainPrimePtr) += m * (xds * s->real); *(here->HFETAdrainPrimeDrainPrimePtr+1) += m * (xds * s->imag); *(here->HFETAsourcePrimeSourcePrimePtr) += m * (xds * s->real); *(here->HFETAsourcePrimeSourcePrimePtr+1) += m * (xds * s->imag); *(here->HFETAdrainPrimeSourcePrimePtr) -= m * (xds * s->real); *(here->HFETAdrainPrimeSourcePrimePtr+1) -= m * (xds * s->imag); *(here->HFETAsourcePrimeDrainPrimePtr) -= m * (xds * s->real); *(here->HFETAsourcePrimeDrainPrimePtr+1) -= m * (xds * s->imag); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hfet1/hfetdefs.h0000644000175000017500000003030413546075722022133 0ustar carstencarsten/********** Imported from MacSpice3f4 - Antony Wilson Modified: Paolo Nenzi **********/ #ifndef HFETA #define HFETA #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" typedef struct sHFETAinstance { struct GENinstance gen; #define HFETAmodPtr(inst) ((struct sHFETAmodel *)((inst)->gen.GENmodPtr)) #define HFETAnextInstance(inst) ((struct sHFETAinstance *)((inst)->gen.GENnextInstance)) #define HFETAname gen.GENname #define HFETAstate gen.GENstate const int HFETAdrainNode; const int HFETAgateNode; const int HFETAsourceNode; int HFETAdrainPrimeNode; int HFETAgatePrimeNode; int HFETAsourcePrimeNode; int HFETAdrainPrmPrmNode; int HFETAsourcePrmPrmNode; double HFETAlength; double HFETAwidth; double HFETAm; double HFETAicVDS; double HFETAicVGS; double HFETAtemp; double HFETAdtemp; double HFETAtVto; double HFETAtMu; double HFETAtLambda; double HFETAtLambdahf; double *HFETAdrainDrainPrimePtr; double *HFETAgatePrimeDrainPrimePtr; double *HFETAgatePrimeSourcePrimePtr; double *HFETAsourceSourcePrimePtr; double *HFETAdrainPrimeDrainPtr; double *HFETAdrainPrimeGatePrimePtr; double *HFETAdrainPrimeSourcePrimePtr; double *HFETAsourcePrimeGatePrimePtr; double *HFETAsourcePrimeSourcePtr; double *HFETAsourcePrimeDrainPrimePtr; double *HFETAdrainDrainPtr; double *HFETAgatePrimeGatePrimePtr; double *HFETAsourceSourcePtr; double *HFETAdrainPrimeDrainPrimePtr; double *HFETAsourcePrimeSourcePrimePtr; double *HFETAdrainPrmPrmDrainPrmPrmPtr; double *HFETAdrainPrmPrmDrainPrimePtr; double *HFETAdrainPrimeDrainPrmPrmPtr; double *HFETAdrainPrmPrmGatePrimePtr; double *HFETAgatePrimeDrainPrmPrmPtr; double *HFETAsourcePrmPrmSourcePrmPrmPtr; double *HFETAsourcePrmPrmSourcePrimePtr; double *HFETAsourcePrimeSourcePrmPrmPtr; double *HFETAsourcePrmPrmGatePrimePtr; double *HFETAgatePrimeSourcePrmPrmPtr; double *HFETAgateGatePtr; double *HFETAgateGatePrimePtr; double *HFETAgatePrimeGatePtr; #define HFETAvgs HFETAstate #define HFETAvgd HFETAstate+1 #define HFETAcg HFETAstate+2 #define HFETAcd HFETAstate+3 #define HFETAcgd HFETAstate+4 #define HFETAcgs HFETAstate+5 #define HFETAgm HFETAstate+6 #define HFETAgds HFETAstate+7 #define HFETAggs HFETAstate+8 #define HFETAggd HFETAstate+9 #define HFETAqgs HFETAstate+10 #define HFETAcqgs HFETAstate+11 #define HFETAqgd HFETAstate+12 #define HFETAcqgd HFETAstate+13 #define HFETAvgspp HFETAstate+14 #define HFETAggspp HFETAstate+15 #define HFETAcgspp HFETAstate+16 #define HFETAvgdpp HFETAstate+17 #define HFETAggdpp HFETAstate+18 #define HFETAcgdpp HFETAstate+19 #define HFETAqds HFETAstate+20 #define HFETAcqds HFETAstate+21 #define HFETAgmg HFETAstate+22 #define HFETAgmd HFETAstate+23 #define HFETAnumStates 24 int HFETAoff; unsigned HFETAlengthGiven : 1; unsigned HFETAwidthGiven : 1; unsigned HFETAmGiven : 1; unsigned HFETAicVDSGiven : 1; unsigned HFETAicVGSGiven : 1; unsigned HFETAtempGiven : 1; unsigned HFETAdtempGiven : 1; int HFETAmode; double HFETAn0; double HFETAn01; double HFETAn02; double HFETAgchi0; double HFETAcf; double HFETAis1d; double HFETAis2d; double HFETAis1s; double HFETAis2s; double HFETAiso; double HFETAimax; double HFETAvcrit; double HFETAdelf; double HFETAfgds; double HFETAggrwl; } HFETAinstance ; /* per model data */ typedef struct sHFETAmodel { struct GENmodel gen; #define HFETAmodType gen.GENmodType #define HFETAnextModel(inst) ((struct sHFETAmodel *)((inst)->gen.GENnextModel)) #define HFETAinstances(inst) ((HFETAinstance *)((inst)->gen.GENinstances)) #define HFETAmodName gen.GENmodName int HFETAtype; int HFETAgatemod; double HFETAthreshold; double HFETAlambda; double HFETAeta; double HFETAm; double HFETAmc; double HFETAgamma; double HFETAsigma0; double HFETAvsigmat; double HFETAvsigma; double HFETAmu; double HFETAdi; double HFETAdelta; double HFETAvs; double HFETAnmax; double HFETAdeltad; double HFETAjs1d; double HFETAjs2d; double HFETAjs1s; double HFETAjs2s; double HFETAm1d; double HFETAm2d; double HFETAm1s; double HFETAm2s; double HFETArd; double HFETArs; double HFETArg; double HFETArdi; double HFETArsi; double HFETArgs; double HFETArgd; double HFETAri; double HFETArf; double HFETAepsi; double HFETAa1; double HFETAa2; double HFETAmv1; double HFETAp; double HFETAkappa; double HFETAdelf; double HFETAfgds; double HFETAtf; double HFETAcds; double HFETAphib; double HFETAtalpha; double HFETAmt1; double HFETAmt2; double HFETAck1; double HFETAck2; double HFETAcm1; double HFETAcm2; double HFETAcm3; double HFETAastar; double HFETAeta1; double HFETAd1; double HFETAvt1; double HFETAeta2; double HFETAd2; double HFETAvt2; double HFETAggr; double HFETAdel; double HFETAklambda; double HFETAkmu; double HFETAkvto; double HFETAdrainConduct; double HFETAsourceConduct; double HFETAgateConduct; double HFETAgi; double HFETAgf; double HFETAdeltaSqr; unsigned HFETAgatemodGiven:1; unsigned HFETAthresholdGiven:1; unsigned HFETAlambdaGiven:1; unsigned HFETAetaGiven:1; unsigned HFETAmGiven:1; unsigned HFETAmcGiven:1; unsigned HFETAgammaGiven:1; unsigned HFETAsigma0Given:1; unsigned HFETAvsigmatGiven:1; unsigned HFETAvsigmaGiven:1; unsigned HFETAmuGiven:1; unsigned HFETAdiGiven:1; unsigned HFETAdeltaGiven:1; unsigned HFETAvsGiven:1; unsigned HFETAnmaxGiven:1; unsigned HFETAdeltadGiven:1; unsigned HFETAjs1dGiven:1; unsigned HFETAjs2dGiven:1; unsigned HFETAjs1sGiven:1; unsigned HFETAjs2sGiven:1; unsigned HFETAm1dGiven:1; unsigned HFETAm2dGiven:1; unsigned HFETAm1sGiven:1; unsigned HFETAm2sGiven:1; unsigned HFETArdGiven:1; unsigned HFETArsGiven:1; unsigned HFETArgGiven:1; unsigned HFETArdiGiven:1; unsigned HFETArsiGiven:1; unsigned HFETArgsGiven:1; unsigned HFETArgdGiven:1; unsigned HFETAriGiven:1; unsigned HFETArfGiven:1; unsigned HFETAepsiGiven:1; unsigned HFETAa1Given:1; unsigned HFETAa2Given:1; unsigned HFETAmv1Given:1; unsigned HFETApGiven:1; unsigned HFETAkappaGiven:1; unsigned HFETAdelfGiven:1; unsigned HFETAfgdsGiven:1; unsigned HFETAtfGiven:1; unsigned HFETAcdsGiven:1; unsigned HFETAphibGiven:1; unsigned HFETAtalphaGiven:1; unsigned HFETAmt1Given:1; unsigned HFETAmt2Given:1; unsigned HFETAck1Given:1; unsigned HFETAck2Given:1; unsigned HFETAcm1Given:1; unsigned HFETAcm2Given:1; unsigned HFETAcm3Given:1; unsigned HFETAastarGiven:1; unsigned HFETAeta1Given:1; unsigned HFETAd1Given:1; unsigned HFETAvt1Given:1; unsigned HFETAeta2Given:1; unsigned HFETAd2Given:1; unsigned HFETAvt2Given:1; unsigned HFETAggrGiven:1; unsigned HFETAdelGiven:1; unsigned HFETAklambdaGiven:1; unsigned HFETAkmuGiven:1; unsigned HFETAkvtoGiven:1; } HFETAmodel; #ifndef NHFET #define NHFET 1 #define PHFET -1 #endif /* device parameters */ enum { HFETA_LENGTH = 1, HFETA_WIDTH, HFETA_IC_VDS, HFETA_IC_VGS, HFETA_TEMP, HFETA_IC, HFETA_OFF, HFETA_CS, HFETA_POWER, HFETA_DTEMP, HFETA_M, }; /* model parameters */ enum { HFETA_MOD_VTO = 101, HFETA_MOD_LAMBDA, HFETA_MOD_RD, HFETA_MOD_RS, HFETA_MOD_RG, HFETA_MOD_RGS, HFETA_MOD_RGD, HFETA_MOD_RI, HFETA_MOD_RF, HFETA_MOD_ETA, HFETA_MOD_M, HFETA_MOD_MC, HFETA_MOD_GAMMA, HFETA_MOD_SIGMA0, HFETA_MOD_VSIGMAT, HFETA_MOD_VSIGMA, HFETA_MOD_MU, HFETA_MOD_DI, HFETA_MOD_DELTA, HFETA_MOD_VS, HFETA_MOD_NMAX, HFETA_MOD_DELTAD, HFETA_MOD_JS1D, HFETA_MOD_JS2D, HFETA_MOD_JS1S, HFETA_MOD_JS2S, HFETA_MOD_M1D, HFETA_MOD_M2D, HFETA_MOD_M1S, HFETA_MOD_M2S, }; enum { HFETA_MOD_EPSI = 132, HFETA_MOD_RDI, HFETA_MOD_RSI, HFETA_MOD_A1, HFETA_MOD_A2, HFETA_MOD_MV1, HFETA_MOD_P, HFETA_MOD_KAPPA, HFETA_MOD_DELF, HFETA_MOD_FGDS, HFETA_MOD_TF, HFETA_MOD_CDS, HFETA_MOD_PHIB, HFETA_MOD_TALPHA, HFETA_MOD_MT1, HFETA_MOD_MT2, HFETA_MOD_CK1, HFETA_MOD_CK2, HFETA_MOD_CM1, HFETA_MOD_CM2, HFETA_MOD_CM3, HFETA_MOD_ASTAR, HFETA_MOD_ETA1, HFETA_MOD_D1, HFETA_MOD_VT1, HFETA_MOD_ETA2, HFETA_MOD_D2, HFETA_MOD_VT2, HFETA_MOD_GGR, HFETA_MOD_DEL, HFETA_MOD_GATEMOD, HFETA_MOD_KLAMBDA, HFETA_MOD_KMU, HFETA_MOD_KVTO, HFETA_MOD_NHFET, HFETA_MOD_PHFET, HFETA_MOD_TYPE, }; /* device questions */ enum { HFETA_DRAINNODE = 201, HFETA_GATENODE, HFETA_SOURCENODE, HFETA_DRAINPRIMENODE, HFETA_SOURCEPRIMENODE, HFETA_VGS, HFETA_VGD, HFETA_CG, HFETA_CD, HFETA_CGD, HFETA_GM, HFETA_GDS, HFETA_GGS, HFETA_GGD, HFETA_QGS, HFETA_CQGS, HFETA_QGD, HFETA_CQGD, }; /* model questions */ enum { HFETA_MOD_DRAINCONDUCT = 301, HFETA_MOD_SOURCECONDUCT, HFETA_MOD_DEPLETIONCAP, HFETA_MOD_VCRIT, }; #define L (here->HFETAlength) #define W (here->HFETAwidth) #define VTO (model->HFETAthreshold) #define LAMBDA (model->HFETAlambda) #define RDI (model->HFETArdi) #define RSI (model->HFETArsi) #define RD (model->HFETArd) #define RS (model->HFETArs) #define RG (model->HFETArg) #define RF (model->HFETArf) #define RI (model->HFETAri) #define RGS (model->HFETArgs) #define RGD (model->HFETArgd) #define ETA (model->HFETAeta) #define M (model->HFETAm) #define MC (model->HFETAmc) #define GAMMA (model->HFETAgamma) #define SIGMA0 (model->HFETAsigma0) #define VSIGMAT (model->HFETAvsigmat) #define VSIGMA (model->HFETAvsigma) #define MU (model->HFETAmu) #define DI (model->HFETAdi) #define DELTAD (model->HFETAdeltad) #define DELTASQR (model->HFETAdeltaSqr) #define VS (model->HFETAvs) #define NMAX (model->HFETAnmax) #define EPSI (model->HFETAepsi) #define JS1D (model->HFETAjs1d) #define JS2D (model->HFETAjs2d) #define JS1S (model->HFETAjs1s) #define JS2S (model->HFETAjs2s) #define M1D (model->HFETAm1d) #define M2D (model->HFETAm2d) #define M1S (model->HFETAm1s) #define M2S (model->HFETAm2s) #define ASTAR (model->HFETAastar) #define PHIB (model->HFETAphib) #define TALPHA (model->HFETAtalpha) #define MT1 (model->HFETAmt1) #define MT2 (model->HFETAmt2) #define CK1 (model->HFETAck1) #define CK2 (model->HFETAck2) #define CM1 (model->HFETAcm1) #define CM2 (model->HFETAcm2) #define CM3 (model->HFETAcm3) #define A1 (model->HFETAa1) #define A2 (model->HFETAa2) #define MV1 (model->HFETAmv1) #define PM (model->HFETAp) #define CDS (model->HFETAcds) #define ETA1 (model->HFETAeta1) #define D1 (model->HFETAd1) #define IN_VT1 (model->HFETAvt1) /* VT1 was defined in termios.h */ #define ETA2 (model->HFETAeta2) #define D2 (model->HFETAd2) #define VT2 (model->HFETAvt2) #define GGR (model->HFETAggr) #define DEL (model->HFETAdel) #define KLAMBDA (model->HFETAklambda) #define KMU (model->HFETAkmu) #define KVTO (model->HFETAkvto) #define GCHI0 (here->HFETAgchi0) #define N0 (here->HFETAn0) #define N01 (here->HFETAn01) #define N02 (here->HFETAn02) #define CF (here->HFETAcf) #define IMAX (here->HFETAimax) #define ISO (here->HFETAiso) #define TEMP (here->HFETAtemp) #define IS1D (here->HFETAis1d) #define IS2D (here->HFETAis2d) #define IS1S (here->HFETAis1s) #define IS2S (here->HFETAis2s) #define FGDS (here->HFETAfgds) #define DELF (here->HFETAdelf) #define GGRWL (here->HFETAggrwl) #define TLAMBDA (here->HFETAtLambda) #define TMU (here->HFETAtMu) #define TVTO (here->HFETAtVto) #include "hfetext.h" #endif /*HFETA*/ tmpk8ny_4pz/src/spicelib/devices/hfet1/hfet.c0000644000175000017500000001446313546075722021274 0ustar carstencarsten/********** Imported from MacSpice3f4 - Antony Wilson Modified: Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/devdefs.h" #include "hfetdefs.h" #include "ngspice/suffix.h" IFparm HFETApTable[] = { /* parameters */ OP("off", HFETA_OFF, IF_FLAG ,"Device initially off"), IOP("l", HFETA_LENGTH, IF_REAL ,"Length of device"), IOP("w", HFETA_WIDTH, IF_REAL ,"Width of device"), IOP("m", HFETA_M, IF_REAL ,"Parallel Multiplier"), IOP("icvds", HFETA_IC_VDS, IF_REAL ,"Initial D-S voltage"), IOP("icvgs", HFETA_IC_VGS, IF_REAL ,"Initial G-S voltage"), IOP("temp", HFETA_TEMP, IF_REAL ,"Instance temperature"), IOP("dtemp", HFETA_DTEMP, IF_REAL ,"Instance temperature difference"), OP("dnode", HFETA_DRAINNODE, IF_INTEGER,"Number of drain node"), OP("gnode", HFETA_GATENODE, IF_INTEGER,"Number of gate node"), OP("snode", HFETA_SOURCENODE, IF_INTEGER,"Number of source node"), OP("dprimenode",HFETA_DRAINPRIMENODE, IF_INTEGER,"Number of internal drain node"), OP("sprimenode",HFETA_SOURCEPRIMENODE,IF_INTEGER,"Number of internal source node"), OP("vgs", HFETA_VGS, IF_REAL,"Gate-Source voltage"), OP("vgd", HFETA_VGD, IF_REAL,"Gate-Drain voltage"), OP("cg", HFETA_CG, IF_REAL,"Gate capacitance"), OP("cd", HFETA_CD, IF_REAL,"Drain capacitance"), OP("cgd", HFETA_CGD, IF_REAL,"Gate_Drain capacitance"), OP("gm", HFETA_GM, IF_REAL,"Transconductance"), OP("gds", HFETA_GDS, IF_REAL,"Drain-Source conductance"), OP("ggs", HFETA_GGS, IF_REAL,"Gate-Source conductance"), OP("ggd", HFETA_GGD, IF_REAL,"Gate-Drain conductance"), OP("qgs", HFETA_QGS, IF_REAL,"Gate-Source charge storage"), OP("cqgs", HFETA_CQGS, IF_REAL,"Capacitance due to gate-source charge storage"), OP("qgd", HFETA_QGD, IF_REAL,"Gate-Drain charge storage"), OP("cqgd", HFETA_CQGD, IF_REAL,"Capacitance due to gate-drain charge storage"), OP("cs", HFETA_CS, IF_REAL ,"Source current"), OP("p", HFETA_POWER, IF_REAL ,"Power dissipated by the mesfet") }; IFparm HFETAmPTable[] = { /* model parameters */ IOP( "vt0", HFETA_MOD_VTO, IF_REAL,"Pinch-off voltage"), IOPR("vto", HFETA_MOD_VTO, IF_REAL,"Pinch-off voltage"), IOP( "lambda", HFETA_MOD_LAMBDA, IF_REAL,"Output conductance parameter"), IOP( "rd", HFETA_MOD_RD, IF_REAL,"Drain ohmic resistance"), IOP( "rs", HFETA_MOD_RS, IF_REAL,"Source ohmic resistance"), IOP( "rg", HFETA_MOD_RG, IF_REAL,"Gate ohmic resistance"), IOP( "rdi", HFETA_MOD_RDI, IF_REAL,"Drain ohmic resistance"), IOP( "rsi", HFETA_MOD_RSI, IF_REAL,"Source ohmic resistance"), IOP( "rgs", HFETA_MOD_RGS, IF_REAL,"Gate-source ohmic resistance"), IOP( "rgd", HFETA_MOD_RGD, IF_REAL,"Gate-drain ohmic resistance"), IOP( "ri", HFETA_MOD_RI, IF_REAL,""), IOP( "rf", HFETA_MOD_RF, IF_REAL,""), IOP( "eta", HFETA_MOD_ETA, IF_REAL,"Subthreshold ideality factor"), IOP( "m", HFETA_MOD_M, IF_REAL,"Knee shape parameter"), IOP( "mc", HFETA_MOD_MC, IF_REAL,"Knee shape parameter"), IOP( "gamma", HFETA_MOD_GAMMA, IF_REAL,"Knee shape parameter"), IOP( "sigma0", HFETA_MOD_SIGMA0, IF_REAL,"Threshold voltage coefficient"), IOP( "vsigmat", HFETA_MOD_VSIGMAT,IF_REAL,""), IOP( "vsigma", HFETA_MOD_VSIGMA, IF_REAL,""), IOP( "mu", HFETA_MOD_MU, IF_REAL,"Moblity"), IOP( "di", HFETA_MOD_DI, IF_REAL,"Depth of device"), IOP( "delta", HFETA_MOD_DELTA, IF_REAL,""), IOP( "vs", HFETA_MOD_VS, IF_REAL,"Saturation velocity"), IOP( "nmax", HFETA_MOD_NMAX, IF_REAL,""), IOP( "deltad", HFETA_MOD_DELTAD, IF_REAL,"Thickness correction"), IOP( "js1d", HFETA_MOD_JS1D, IF_REAL,""), IOP( "js2d", HFETA_MOD_JS2D, IF_REAL,""), IOP( "js1s", HFETA_MOD_JS1S, IF_REAL,""), IOP( "js2s", HFETA_MOD_JS2S, IF_REAL,""), IOP( "m1d", HFETA_MOD_M1D, IF_REAL,""), IOP( "m2d", HFETA_MOD_M2D, IF_REAL,""), IOP( "m1s", HFETA_MOD_M1S, IF_REAL,""), IOP( "m2s", HFETA_MOD_M2S, IF_REAL,""), IOP( "epsi", HFETA_MOD_EPSI, IF_REAL,""), IOP( "p", HFETA_MOD_P, IF_REAL,""), IOP( "cm3", HFETA_MOD_CM3, IF_REAL,""), IOP( "a1", HFETA_MOD_A1, IF_REAL,""), IOP( "a2", HFETA_MOD_A2, IF_REAL,""), IOP( "mv1", HFETA_MOD_MV1, IF_REAL,""), IOP( "kappa", HFETA_MOD_KAPPA, IF_REAL,""), IOP( "delf", HFETA_MOD_DELF, IF_REAL,""), IOP( "fgds", HFETA_MOD_FGDS, IF_REAL,""), IOP( "tf", HFETA_MOD_TF, IF_REAL,""), IOP( "cds", HFETA_MOD_CDS, IF_REAL,""), IOP( "phib", HFETA_MOD_PHIB, IF_REAL,""), IOP( "talpha", HFETA_MOD_TALPHA, IF_REAL,""), IOP( "mt1", HFETA_MOD_MT1, IF_REAL,""), IOP( "mt2", HFETA_MOD_MT2, IF_REAL,""), IOP( "ck1", HFETA_MOD_CK1, IF_REAL,""), IOP( "ck2", HFETA_MOD_CK2, IF_REAL,""), IOP( "cm1", HFETA_MOD_CM1, IF_REAL,""), IOP( "cm2", HFETA_MOD_CM2, IF_REAL,""), IOP( "astar", HFETA_MOD_ASTAR, IF_REAL,""), IOP( "eta1", HFETA_MOD_ETA1, IF_REAL,""), IOP( "d1", HFETA_MOD_D1, IF_REAL,""), IOP( "vt1", HFETA_MOD_VT1, IF_REAL,""), IOP( "eta2", HFETA_MOD_ETA2, IF_REAL,""), IOP( "d2", HFETA_MOD_D2, IF_REAL,""), IOP( "vt2", HFETA_MOD_VT2, IF_REAL,""), IOP( "ggr", HFETA_MOD_GGR, IF_REAL,""), IOP( "del", HFETA_MOD_DEL, IF_REAL,""), IOP( "gatemod", HFETA_MOD_GATEMOD,IF_INTEGER,""), IOP( "klambda", HFETA_MOD_KLAMBDA, IF_REAL,""), IOP( "kmu", HFETA_MOD_KMU, IF_REAL,""), IOP( "kvto", HFETA_MOD_KVTO, IF_REAL,""), OP( "type", HFETA_MOD_TYPE, IF_STRING, "NHFET or PHFET"), IOP( "nhfet", HFETA_MOD_NHFET, IF_FLAG,"N HFET device"), IOP( "phfet", HFETA_MOD_PHFET, IF_FLAG,"P HFET device"), }; char *HFETAnames[] = { "Drain", "Gate", "Source" }; int HFETAnSize = NUMELEMS(HFETAnames); int HFETApTSize = NUMELEMS(HFETApTable); int HFETAmPTSize = NUMELEMS(HFETAmPTable); int HFETAiSize = sizeof(HFETAinstance); int HFETAmSize = sizeof(HFETAmodel); tmpk8ny_4pz/src/spicelib/devices/hfet1/hfetitf.h0000644000175000017500000000011613546075722021772 0ustar carstencarsten#ifndef DEV_HFETA #define DEV_HFETA SPICEdev *get_hfeta_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/hfet1/hfetload.c0000644000175000017500000007334213546075722022135 0ustar carstencarsten/********** Imported from MacSpice3f4 - Antony Wilson Modified: Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/cktdefs.h" #include "hfetdefs.h" #include "ngspice/const.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* #define true 1 #define false 0 */ /* #define PHIB 0.5 */ double diode(double); static void leak(double gmin, double vt, double v, double rs, double is1, double is2, double m1, double m2, double *il, double *gl); static void hfeta(HFETAmodel *model, HFETAinstance *here, CKTcircuit *ckt, double vgs, double vds, double *cdrain, double *gm, double *gds, double *capgs, double *capgd, double *cgd, double *gmg, double *gmd, double *cgs, double *ggs); void Pause(void); int HFETAload(GENmodel *inModel, CKTcircuit *ckt) { HFETAmodel *model = (HFETAmodel*)inModel; HFETAinstance *here; double capgd; double capgs; double cd; double cdhat = 0.0; double cdrain; double cdreq; double ceq; double ceqgd; double ceqgs; double cg; double cgd=0; double cgs=0; double cghat = 0.0; double delvds; double delvgd; double delvgs; double delvgdpp=0; double delvgspp=0; double gds; double geq; double ggd=0; double ggs=0; double gm; double vcrit; double vds; double vgd; double vgs; double vgs1; double vgd1; double vds1; #ifndef PREDICTOR double xfact; #endif double temp; double vt; double vgspp=0; double vgdpp=0; double cgspp=0; double cgdpp=0; double ggspp=0; double ggdpp=0; double gmg=0; double gmd=0; int inverse=FALSE; int icheck; int error; double m; for( ; model != NULL; model = HFETAnextModel(model)) { for (here = HFETAinstances(model); here != NULL ; here=HFETAnextInstance(here)) { vcrit = here->HFETAvcrit; vt = CONSTKoverQ * here->HFETAtemp; icheck = 0; if( ckt->CKTmode & MODEINITSMSIG) { vgs = *(ckt->CKTstate0 + here->HFETAvgs); vgd = *(ckt->CKTstate0 + here->HFETAvgd); vgspp = *(ckt->CKTstate0 + here->HFETAvgspp); vgdpp = *(ckt->CKTstate0 + here->HFETAvgdpp); } else if (ckt->CKTmode & MODEINITTRAN) { vgs = *(ckt->CKTstate1 + here->HFETAvgs); vgd = *(ckt->CKTstate1 + here->HFETAvgd); vgspp = *(ckt->CKTstate1 + here->HFETAvgspp); vgdpp = *(ckt->CKTstate1 + here->HFETAvgdpp); } else if ( (ckt->CKTmode & MODEINITJCT) && (ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC) ) { vds = model->HFETAtype*here->HFETAicVDS; vgs = model->HFETAtype*here->HFETAicVGS; vgd = vgs-vds; vgspp = vgs; vgdpp = vgd; } else if ( (ckt->CKTmode & MODEINITJCT) && (here->HFETAoff == 0) ) { vgs = -1; vgd = -1; vgspp = 0; vgdpp = 0; } else if( (ckt->CKTmode & MODEINITJCT) || ((ckt->CKTmode & MODEINITFIX) && (here->HFETAoff))) { vgs = 0; vgd = 0; vgspp = 0; vgdpp = 0; } else { #ifndef PREDICTOR if(ckt->CKTmode & MODEINITPRED) { xfact = ckt->CKTdelta/ckt->CKTdeltaOld[2]; *(ckt->CKTstate0 + here->HFETAvgs) = *(ckt->CKTstate1 + here->HFETAvgs); vgs = (1+xfact) * *(ckt->CKTstate1 + here->HFETAvgs) - xfact * *(ckt->CKTstate2 + here->HFETAvgs); *(ckt->CKTstate0 + here->HFETAvgspp) = *(ckt->CKTstate1 + here->HFETAvgspp); vgspp = (1+xfact) * *(ckt->CKTstate1 + here->HFETAvgspp) - xfact * *(ckt->CKTstate2 + here->HFETAvgspp); *(ckt->CKTstate0 + here->HFETAvgd) = *(ckt->CKTstate1 + here->HFETAvgd); vgd = (1+xfact)* *(ckt->CKTstate1 + here->HFETAvgd) - xfact * *(ckt->CKTstate2 + here->HFETAvgd); *(ckt->CKTstate0 + here->HFETAvgdpp) = *(ckt->CKTstate1 + here->HFETAvgdpp); vgdpp = (1+xfact) * *(ckt->CKTstate1 + here->HFETAvgdpp) - xfact * *(ckt->CKTstate2 + here->HFETAvgdpp); *(ckt->CKTstate0 + here->HFETAcg) = *(ckt->CKTstate1 + here->HFETAcg); *(ckt->CKTstate0 + here->HFETAcd) = *(ckt->CKTstate1 + here->HFETAcd); *(ckt->CKTstate0 + here->HFETAcgd) = *(ckt->CKTstate1 + here->HFETAcgd); *(ckt->CKTstate0 + here->HFETAcgs) = *(ckt->CKTstate1 + here->HFETAcgs); *(ckt->CKTstate0 + here->HFETAcgspp) = *(ckt->CKTstate1 + here->HFETAcgspp); *(ckt->CKTstate0 + here->HFETAcgdpp) = *(ckt->CKTstate1 + here->HFETAcgdpp); *(ckt->CKTstate0 + here->HFETAgm) = *(ckt->CKTstate1 + here->HFETAgm); *(ckt->CKTstate0 + here->HFETAgds) = *(ckt->CKTstate1 + here->HFETAgds); *(ckt->CKTstate0 + here->HFETAggs) = *(ckt->CKTstate1 + here->HFETAggs); *(ckt->CKTstate0 + here->HFETAggspp) = *(ckt->CKTstate1 + here->HFETAggspp); *(ckt->CKTstate0 + here->HFETAggd) = *(ckt->CKTstate1 + here->HFETAggd); *(ckt->CKTstate0 + here->HFETAggdpp) = *(ckt->CKTstate1 + here->HFETAggdpp); *(ckt->CKTstate0 + here->HFETAgmg) = *(ckt->CKTstate1 + here->HFETAgmg); *(ckt->CKTstate0 + here->HFETAgmd) = *(ckt->CKTstate1 + here->HFETAgmd); } else { #endif /* PREDICTOR */ /* * compute new nonlinear branch voltages */ vgs = model->HFETAtype* (*(ckt->CKTrhsOld+ here->HFETAgatePrimeNode)- *(ckt->CKTrhsOld+ here->HFETAsourcePrimeNode)); vgd = model->HFETAtype* (*(ckt->CKTrhsOld+here->HFETAgatePrimeNode)- *(ckt->CKTrhsOld+ here->HFETAdrainPrimeNode)); vgspp = model->HFETAtype* (*(ckt->CKTrhsOld+ here->HFETAgatePrimeNode)- *(ckt->CKTrhsOld+ here->HFETAsourcePrmPrmNode)); vgdpp = model->HFETAtype* (*(ckt->CKTrhsOld+ here->HFETAgatePrimeNode)- *(ckt->CKTrhsOld+ here->HFETAdrainPrmPrmNode)); #ifndef PREDICTOR } #endif /* PREDICTOR */ delvgs=vgs - *(ckt->CKTstate0 + here->HFETAvgs); delvgd=vgd - *(ckt->CKTstate0 + here->HFETAvgd); delvds=delvgs - delvgd; delvgspp=vgspp - *(ckt->CKTstate0 + here->HFETAvgspp); delvgdpp=vgdpp - *(ckt->CKTstate0 + here->HFETAvgdpp); cghat= *(ckt->CKTstate0 + here->HFETAcg) + *(ckt->CKTstate0 + here->HFETAgmg)*delvgs - *(ckt->CKTstate0 + here->HFETAgmd)*delvds + *(ckt->CKTstate0 + here->HFETAggd)*delvgd + *(ckt->CKTstate0 + here->HFETAggs)*delvgs + *(ckt->CKTstate0 + here->HFETAggdpp)*delvgdpp + *(ckt->CKTstate0 + here->HFETAggspp)*delvgspp; cdhat= *(ckt->CKTstate0 + here->HFETAcd) + *(ckt->CKTstate0 + here->HFETAgm)*delvgs + *(ckt->CKTstate0 + here->HFETAgds)*delvds - *(ckt->CKTstate0 + here->HFETAggd)*delvgd - (*(ckt->CKTstate0 + here->HFETAgmg)*delvgs - *(ckt->CKTstate0 + here->HFETAgmd)*delvds); /* * bypass if solution has not changed */ if((ckt->CKTbypass) && (!(ckt->CKTmode & MODEINITPRED)) && (fabs(delvgs) < ckt->CKTreltol*MAX(fabs(vgs), fabs(*(ckt->CKTstate0 + here->HFETAvgs)))+ ckt->CKTvoltTol) ) if ( (fabs(delvgd) < ckt->CKTreltol*MAX(fabs(vgd), fabs(*(ckt->CKTstate0 + here->HFETAvgd)))+ ckt->CKTvoltTol)) if ( (fabs(delvgspp) < ckt->CKTreltol*MAX(fabs(vgspp), fabs(*(ckt->CKTstate0 + here->HFETAvgspp)))+ ckt->CKTvoltTol)) if ( (fabs(delvgdpp) < ckt->CKTreltol*MAX(fabs(vgdpp), fabs(*(ckt->CKTstate0 + here->HFETAvgdpp)))+ ckt->CKTvoltTol)) if ( (fabs(cghat-*(ckt->CKTstate0 + here->HFETAcg)) < ckt->CKTreltol*MAX(fabs(cghat), fabs(*(ckt->CKTstate0 + here->HFETAcg)))+ ckt->CKTabstol) ) if ( /* hack - expression too big */ (fabs(cdhat-*(ckt->CKTstate0 + here->HFETAcd)) < ckt->CKTreltol*MAX(fabs(cdhat), fabs(*(ckt->CKTstate0 + here->HFETAcd)))+ ckt->CKTabstol) ) { /* we can do a bypass */ vgs = *(ckt->CKTstate0 + here->HFETAvgs); vgd = *(ckt->CKTstate0 + here->HFETAvgd); vds = vgs-vgd; vgspp = *(ckt->CKTstate0 + here->HFETAvgspp); vgdpp = *(ckt->CKTstate0 + here->HFETAvgdpp); cg = *(ckt->CKTstate0 + here->HFETAcg); cd = *(ckt->CKTstate0 + here->HFETAcd); cgd = *(ckt->CKTstate0 + here->HFETAcgd); cgs = *(ckt->CKTstate0 + here->HFETAcgs); cgdpp = *(ckt->CKTstate0 + here->HFETAcgdpp); cgspp = *(ckt->CKTstate0 + here->HFETAcgspp); gm = *(ckt->CKTstate0 + here->HFETAgm); gds = *(ckt->CKTstate0 + here->HFETAgds); ggs = *(ckt->CKTstate0 + here->HFETAggs); ggd = *(ckt->CKTstate0 + here->HFETAggd); ggdpp = *(ckt->CKTstate0 + here->HFETAggdpp); ggspp = *(ckt->CKTstate0 + here->HFETAggspp); gmg = *(ckt->CKTstate0 + here->HFETAgmg); gmd = *(ckt->CKTstate0 + here->HFETAgmd); goto load; } /* * limit nonlinear branch voltages */ vgs = DEVfetlim(vgs,*(ckt->CKTstate0 + here->HFETAvgs),TVTO); vgd = DEVfetlim(vgd,*(ckt->CKTstate0 + here->HFETAvgd),TVTO); } /* * determine dc current and derivatives */ vds = vgs-vgd; if(model->HFETAgatemod == 0) { double arg; double earg; if(IS1S == 0 || IS2S == 0) { cgs = 0; ggs = 0; } else leak(ckt->CKTgmin,vt,vgs,RGS,IS1S,IS2S,M1S,M2S,&cgs,&ggs); arg = -vgs*DEL/vt; earg = exp(arg); cgs += GGRWL*vgs*earg; ggs += GGRWL*earg*(1-arg); if(IS1D == 0 || IS2D == 0) { cgd = 0; ggd = 0; } else leak(ckt->CKTgmin,vt,vgd,RGD,IS1D,IS2D,M1D,M2D,&cgd,&ggd); arg = -vgd*DEL/vt; earg = exp(arg); cgd += GGRWL*vgd*earg; ggd += GGRWL*earg*(1-arg); } else ggd = 0; if(vds < 0) { vds = -vds; inverse = TRUE; } hfeta(model,here,ckt,vds>0?vgs:vgd,vds,&cdrain,&gm,&gds,&capgs,&capgd, &cgd,&gmg,&gmd,&cgs,&ggs); cg = cgs+cgd; if(inverse) { cdrain = -cdrain; vds = -vds; temp = capgs; capgs = capgd; capgd = temp; } /* * compute equivalent drain current source */ cd = cdrain - cgd; if ( (ckt->CKTmode & (MODETRAN|MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) ){ /* * charge storage elements */ vgs1 = *(ckt->CKTstate1 + here->HFETAvgspp); vgd1 = *(ckt->CKTstate1 + here->HFETAvgdpp); vds1 = *(ckt->CKTstate1 + here->HFETAvgs)- *(ckt->CKTstate1 + here->HFETAvgd); if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->HFETAqgs) = capgs*vgspp; *(ckt->CKTstate1 + here->HFETAqgd) = capgd*vgdpp; *(ckt->CKTstate1 + here->HFETAqds) = CDS*vds; } *(ckt->CKTstate0+here->HFETAqgs) = *(ckt->CKTstate1 + here->HFETAqgs) + capgs*(vgspp-vgs1); *(ckt->CKTstate0+here->HFETAqgd) = *(ckt->CKTstate1 + here->HFETAqgd) + capgd*(vgdpp-vgd1); *(ckt->CKTstate0+here->HFETAqds) = *(ckt->CKTstate1 + here->HFETAqds) + CDS*(vds-vds1); /* * store small-signal parameters */ if( (!(ckt->CKTmode & MODETRANOP)) || (!(ckt->CKTmode & MODEUIC)) ) { if(ckt->CKTmode & MODEINITSMSIG) { *(ckt->CKTstate0 + here->HFETAqgs) = capgs; *(ckt->CKTstate0 + here->HFETAqgd) = capgd; *(ckt->CKTstate0 + here->HFETAqds) = CDS; continue; /*go to 1000*/ } /* * transient analysis */ if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->HFETAqgs) = *(ckt->CKTstate0 + here->HFETAqgs); *(ckt->CKTstate1 + here->HFETAqgd) = *(ckt->CKTstate0 + here->HFETAqgd); *(ckt->CKTstate1 + here->HFETAqds) = *(ckt->CKTstate0 + here->HFETAqds); } error = NIintegrate(ckt,&geq,&ceq,capgs,here->HFETAqgs); if(error) return(error); ggspp = geq; cgspp = *(ckt->CKTstate0 + here->HFETAcqgs); cg = cg + cgspp; error = NIintegrate(ckt,&geq,&ceq,capgd,here->HFETAqgd); if(error) return(error); ggdpp = geq; cgdpp = *(ckt->CKTstate0 + here->HFETAcqgd); cg = cg + cgdpp; cd = cd - cgdpp; error = NIintegrate(ckt,&geq,&ceq,CDS,here->HFETAqds); if(error) return(error); gds += geq; cd += *(ckt->CKTstate0 + here->HFETAcqds); if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->HFETAcqgs) = *(ckt->CKTstate0 + here->HFETAcqgs); *(ckt->CKTstate1 + here->HFETAcqgd) = *(ckt->CKTstate0 + here->HFETAcqgd); *(ckt->CKTstate1 + here->HFETAcqds) = *(ckt->CKTstate0 + here->HFETAcqds); } } } /* * check convergence */ if( (!(ckt->CKTmode & MODEINITFIX)) | (!(ckt->CKTmode & MODEUIC))) { if( (icheck == 1) || (fabs(cghat-cg) >= ckt->CKTreltol* MAX(fabs(cghat),fabs(cg))+ckt->CKTabstol) || (fabs(cdhat-cd) > ckt->CKTreltol* MAX(fabs(cdhat),fabs(cd))+ckt->CKTabstol) ) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; } } *(ckt->CKTstate0 + here->HFETAvgs) = vgs; *(ckt->CKTstate0 + here->HFETAvgd) = vgd; *(ckt->CKTstate0 + here->HFETAvgspp) = vgspp; *(ckt->CKTstate0 + here->HFETAvgdpp) = vgdpp; *(ckt->CKTstate0 + here->HFETAcg) = cg; *(ckt->CKTstate0 + here->HFETAcd) = cd; *(ckt->CKTstate0 + here->HFETAcgd) = cgd; *(ckt->CKTstate0 + here->HFETAcgs) = cgs; *(ckt->CKTstate0 + here->HFETAcgspp) = cgspp; *(ckt->CKTstate0 + here->HFETAcgdpp) = cgdpp; *(ckt->CKTstate0 + here->HFETAgm) = gm; *(ckt->CKTstate0 + here->HFETAgds) = gds; *(ckt->CKTstate0 + here->HFETAggs) = ggs; *(ckt->CKTstate0 + here->HFETAggd) = ggd; *(ckt->CKTstate0 + here->HFETAggspp) = ggspp; *(ckt->CKTstate0 + here->HFETAggdpp) = ggdpp; *(ckt->CKTstate0 + here->HFETAgmg) = gmg; *(ckt->CKTstate0 + here->HFETAgmd) = gmd; /* * load current vector */ load: m = here->HFETAm; ceqgd = model->HFETAtype*(cgd+cgdpp-ggd*vgd-gmg*vgs-gmd*vds-ggdpp*vgdpp); ceqgs = model->HFETAtype*(cgs + cgspp - ggs*vgs - ggspp*vgspp); cdreq = model->HFETAtype*(cd + cgd + cgdpp - gds*vds - gm*vgs); *(ckt->CKTrhs + here->HFETAgatePrimeNode) += m * (-ceqgs-ceqgd); ceqgd = model->HFETAtype*(cgd-ggd*vgd-gmg*vgs-gmd*vds); *(ckt->CKTrhs + here->HFETAdrainPrimeNode) += m * (-cdreq+ceqgd); ceqgd = model->HFETAtype*(cgdpp-ggdpp*vgdpp); *(ckt->CKTrhs + here->HFETAdrainPrmPrmNode) += m * ceqgd; ceqgs = model->HFETAtype*(cgs-ggs*vgs); *(ckt->CKTrhs + here->HFETAsourcePrimeNode) += m * (cdreq+ceqgs); ceqgs = model->HFETAtype*(cgspp-ggspp*vgspp); *(ckt->CKTrhs + here->HFETAsourcePrmPrmNode) += m * ceqgs; /* * load y matrix */ *(here->HFETAdrainDrainPtr) += m * (model->HFETAdrainConduct); *(here->HFETAsourceSourcePtr) += m * (model->HFETAsourceConduct); *(here->HFETAgatePrimeGatePrimePtr) += m * (ggd+ggs+ggspp+ggdpp+gmg+model->HFETAgateConduct); *(here->HFETAdrainPrimeDrainPrimePtr) += m * (gds+ggd-gmd+model->HFETAdrainConduct+model->HFETAgf); *(here->HFETAsourcePrimeSourcePrimePtr) += m * (gds+gm+ggs+model->HFETAsourceConduct+model->HFETAgi); *(here->HFETAsourcePrmPrmSourcePrmPrmPtr) += m * (model->HFETAgi+ggspp); *(here->HFETAdrainPrmPrmDrainPrmPrmPtr) += m * (model->HFETAgf+ggdpp); *(here->HFETAdrainDrainPrimePtr) -= m * (model->HFETAdrainConduct); *(here->HFETAdrainPrimeDrainPtr) -= m * (model->HFETAdrainConduct); *(here->HFETAsourceSourcePrimePtr) -= m * (model->HFETAsourceConduct); *(here->HFETAsourcePrimeSourcePtr) -= m * (model->HFETAsourceConduct); *(here->HFETAgatePrimeDrainPrimePtr) += m * (-ggd+gmd); *(here->HFETAdrainPrimeGatePrimePtr) += m * (gm-ggd-gmg); *(here->HFETAgatePrimeSourcePrimePtr) -= m * (ggs+gmg+gmd); *(here->HFETAsourcePrimeGatePrimePtr) += m * (-ggs-gm); *(here->HFETAdrainPrimeSourcePrimePtr) += m * (-gds-gm+gmg+gmd); *(here->HFETAsourcePrimeDrainPrimePtr) -= m * (gds); *(here->HFETAsourcePrimeSourcePrmPrmPtr) -= m * (model->HFETAgi); *(here->HFETAsourcePrmPrmSourcePrimePtr) -= m * (model->HFETAgi); *(here->HFETAgatePrimeSourcePrmPrmPtr) -= m * (ggspp); *(here->HFETAsourcePrmPrmGatePrimePtr) -= m * (ggspp); *(here->HFETAdrainPrimeDrainPrmPrmPtr) -= m * (model->HFETAgf); *(here->HFETAdrainPrmPrmDrainPrimePtr) -= m * (model->HFETAgf); *(here->HFETAgatePrimeDrainPrmPrmPtr) -= m * (ggdpp); *(here->HFETAdrainPrmPrmGatePrimePtr) -= m * (ggdpp); *(here->HFETAgateGatePtr) += m * (model->HFETAgateConduct); *(here->HFETAgateGatePrimePtr) -= m * (model->HFETAgateConduct); *(here->HFETAgatePrimeGatePtr) -= m * (model->HFETAgateConduct); } } return(OK); } static void leak(double gmin, double vt, double v, double rs, double is1, double is2, double m1, double m2, double *il, double *gl) { double vt1 = vt*m1; double vt2 = vt*m2; if(v > -10*vt1) { double dvdi0; double iaprox; double iaprox1; double iaprox2; double v0; double vteff = vt1 + vt2; double iseff = is2*pow((is1/is2),(m1/(m1+m2))); if(rs > 0) { double unorm = (v + rs*is1)/vt1 + log(rs*is1/vt1); iaprox1 = vt1*diode(unorm)/rs - is1; unorm = (v + rs*iseff)/vteff + log(rs*iseff/vteff); iaprox2 = vteff*diode(unorm)/rs - iseff; } else { iaprox1 = is1*(exp(v/vt1) - 1); iaprox2 = iseff*(exp(v/vteff) - 1); } if((iaprox1*iaprox2) != 0.0) iaprox = 1./(1./iaprox1 + 1./iaprox2); else iaprox = 0.5*(iaprox1 + iaprox2); dvdi0 = rs + vt1/(iaprox+is1) + vt2/(iaprox+is2); v0 = rs*iaprox; v0 += vt1*log(iaprox/is1 + 1) + vt2*log(iaprox/is2 + 1); /* *il = __max(-is1,iaprox + (v - v0)/dvdi0)*0.99999; */ *il = MAX(-is1,iaprox + (v - v0)/dvdi0)*0.99999; *gl = 1./(rs + vt1/(*il+is1) + vt2/(*il+is2)); } else { *gl = gmin; *il = (*gl)*v-is1; } } static void hfeta(HFETAmodel *model, HFETAinstance *here, CKTcircuit *ckt, double vgs, double vds, double *cdrain, double *gm, double *gds, double *capgs, double *capgd, double *cgd, double *gmg, double *gmd, double *cgs, double *ggs) { double vt; double vgt; double vgt0; double sigma; double vgte; double isat; double isatm; double ns; double nsm; double a; double b; double c; double d; double e; double f; double g; double h; double p; double q; double s; double t; double u; double nsc = 0.0; double nsn = 0.0; double temp; double etavth; double gch; double gchi; double gchim; double vsate = 0.0; double vdse; double cg1; double cgc; double rt; double vl; double delidgch; double delgchgchi; double delgchins; double delnsnsm; double delnsmvgt; double delvgtevgt = 0.0; double delidvsate; double delvsateisat; double delisatisatm; double delisatmvgte; double delisatmgchim; double delvsategch; double delidvds; double delvgtvgs = 0.0; double delvsatevgt = 0.0; vt = CONSTKoverQ*TEMP; etavth = ETA*vt; vl = VS/TMU*L; rt = RSI+RDI; vgt0 = vgs - TVTO; s = exp((vgt0-VSIGMAT)/VSIGMA); sigma = SIGMA0/(1+s); vgt = vgt0+sigma*vds; u = 0.5*vgt/vt-1; t = sqrt(model->HFETAdeltaSqr+u*u); vgte = vt*(2+u+t); b = exp(vgt/etavth); if(model->HFETAeta2Given && model->HFETAd2Given) { nsc = N02*exp((vgt+TVTO-VT2)/(ETA2*vt)); nsn = 2*N0*log(1+0.5*b); nsm = nsn*nsc/(nsn+nsc); } else { nsm = 2*N0*log(1+0.5*b); } if(nsm < 1.0e-38) { *cdrain = 0; *gm = 0.0; *gds = 0.0; *capgs = CF; *capgd = CF; goto cgd_calc; } c = pow(nsm/NMAX,GAMMA); q = pow(1+c,1.0/GAMMA); ns = nsm/q; gchi = GCHI0*ns; gch = gchi/(1+gchi*rt); gchim = GCHI0*nsm; h = sqrt(1+2*gchim*RSI + vgte*vgte/(vl*vl)); p = 1+gchim*RSI+h; isatm = gchim*vgte/p; g = pow(isatm/IMAX,GAMMA); isat = isatm/pow(1+g,1/GAMMA); vsate = isat/gch; d = pow(vds/vsate,M); e = pow(1+d,1.0/M); delidgch = vds*(1+TLAMBDA*vds)/e; *cdrain = gch*delidgch; delidvsate = (*cdrain)*d/vsate/(1+d); delidvds = gch*(1+2*TLAMBDA*vds)/e-(*cdrain)* pow(vds/vsate,M-1)/(vsate*(1+d)); a = 1+gchi*rt; delgchgchi = 1.0/(a*a); delgchins = GCHI0; delnsnsm = ns/nsm*(1-c/(1+c)); delvgtevgt = 0.5*(1+u/t); delnsmvgt = N0/etavth/(1.0/b + 0.5); if(model->HFETAeta2Given && model->HFETAd2Given) delnsmvgt = nsc*(nsc*delnsmvgt+nsn*nsn/(ETA2*vt))/((nsc+nsn)*(nsc+nsn)); delvsateisat = 1.0/gch; delisatisatm = isat/isatm*(1-g/(1+g)); delisatmvgte = gchim*(p - vgte*vgte/(vl*vl*h))/(p*p); delvsategch = -vsate/gch; delisatmgchim = vgte*(p - gchim*RSI*(1+1.0/h))/(p*p); delvgtvgs = 1-vds*SIGMA0/VSIGMA*s/((1+s)*(1+s)); p = delgchgchi*delgchins*delnsnsm*delnsmvgt; delvsatevgt = (delvsateisat*delisatisatm*(delisatmvgte*delvgtevgt + delisatmgchim*GCHI0*delnsmvgt)+delvsategch*p); g = delidgch*p + delidvsate*delvsatevgt; *gm = g*delvgtvgs; *gds = delidvds + g*sigma; /* Capacitance calculations */ temp = ETA1*vt; cg1 = 1/(D1/EPSI+temp*exp(-(vgs-IN_VT1)/temp)); cgc = W*L*(CHARGE*delnsnsm*delnsmvgt*delvgtvgs+cg1); vdse = vds*pow(1+pow(vds/vsate,MC),-1.0/MC); a = (vsate-vdse)/(2*vsate-vdse); a = a*a; temp = 2.0/3.0; p = PM + (1-PM)*exp(-vds/vsate); *capgs = CF+2*temp*cgc*(1-a)/(1+p); a = vsate/(2*vsate-vdse); a = a*a; *capgd = CF+2*p*temp*cgc*(1-a)/(1+p); /* { char buf[128]; FILE *fp; fp = fopen("d:\\temp\\debug.txt","at"); sprintf(buf,"%f\t%f\t%e\t%e\n",vgs,vds,W*L*CHARGE*delnsnsm*delnsmvgt*delvgtvgs,cgc); fputs(buf,fp); fclose(fp); } */ cgd_calc: if(model->HFETAgatemod != 0) { /* Gate-drain current calculation */ double vkneet; double vmax; double td; double delcgdvgs; double delcgdtd; double deltdvdse; double deltdvkneet; double delvdsevmax; double delvdsevds; double dvdsevgs; double dvdsevds; double dtdvgs; double dtdvds; vkneet = CK1*vsate+CK2; vmax = CM1*vsate+CM2; a = pow(vds/vmax,MT2); b = pow(1+a,1/MT2); vdse = vds/b; c = pow(vdse/vkneet,MT1); d = pow(1+c,1/MT1); td = TEMP+TALPHA*vdse*vdse/d; e = CONSTKoverQ*td*M2D; p = PHIB/(CONSTboltz*td); f = exp(-p); q = (vgs-vdse)/e; g = exp(q); h = ISO*td*td*f*g; *cgd = h - ISO*TEMP*TEMP*exp(-PHIB/(CONSTboltz*TEMP)); delcgdvgs = h/e; delcgdtd = h*(p-q+2)/td; deltdvdse = TALPHA*vdse*(2-c/(1+c))/d; deltdvkneet = (td-TEMP)*c/((1+c)*vkneet); delvdsevmax = vdse*a/((1+a)*vmax); delvdsevds = (1-a/(1+a))/b; temp = delvsatevgt*delvgtvgs; dvdsevgs = delvdsevmax*CM1*temp; dtdvgs = deltdvdse*dvdsevgs+deltdvkneet*CK1*temp; *gmg = delcgdvgs+delcgdtd*dtdvgs; temp = delvsatevgt*sigma; dvdsevds = delvdsevds+delvdsevmax*CM1*temp; dtdvds = deltdvdse*dvdsevds+deltdvkneet*CK1*temp; *gmd = -delcgdvgs*dvdsevds+delcgdtd*dtdvds; } else { gmg = NULL; gmd = NULL; } if(model->HFETAgatemod != 0) { /* Gate-source current calculation */ double evgs; double vtn = vt*M2S; double csat = ISO*TEMP*TEMP*exp(-PHIB/(CONSTboltz*TEMP)); if (vgs <= -5*vt) { *ggs = -csat/vgs+ckt->CKTgmin; *cgs = (*ggs)*vgs; } else { evgs = exp(vgs/vtn); *ggs = csat*evgs/vtn+ckt->CKTgmin; *cgs = csat*(evgs-1)+ckt->CKTgmin*vgs; } } if(model->HFETAgatemod != 0 && (A1 != 0.0 || A2 != 0.0)) { /* Correction current calculations */ double vmax; double delvdsevmax; double delvdsevds; double dvdsevgs; double dvdsevds; vmax = CM3*vsate; a = pow(vds/vmax,MV1); b = pow(1+a,1/MV1); vdse = vds/b; delvdsevmax = vdse*a/((1+a)*vmax); delvdsevds = (1-a/(1+a))/b; dvdsevgs = delvdsevmax*CM3*delvsatevgt*delvgtvgs; dvdsevds = delvdsevds+delvdsevmax*CM3*delvsatevgt*sigma; c = vgte*vdse; d = 1+A2*c; e = vdse*delvgtevgt; f = A2*(*cgd); *cdrain += A1*(d*(*cgd) - (*cgs)); *gds += A1*(d*(*gmd)+f*(vgte*dvdsevds+e*sigma)); *gm += A1*(d*(*gmg)+f*(vgte*dvdsevgs+e*delvgtvgs) - (*ggs)); } } double diode(double u) { #define U0 (-2.303) #define A (2.221) #define B (6.804) #define C (1.685) double it; double ut; double b; double c; double i; double expu=exp(u); if(u <= U0) { it = expu*(1-expu); }else { b = 0.5*(u-U0); it = u + A*exp((U0-u)/B) - log(b+sqrt(b*b + 0.25*C*C)); } ut = it + log(it); b = u-ut; c = 1+it; i = it*(1 + b/c + 0.5*b*b/c/c/c); return(i); } tmpk8ny_4pz/src/spicelib/devices/hfet1/hfettemp.c0000644000175000017500000000630213546075722022153 0ustar carstencarsten/********** Imported from MacSpice3f4 - Antony Wilson Modified: Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "hfetdefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int HFETAtemp(GENmodel *inModel, CKTcircuit *ckt) { HFETAmodel *model = (HFETAmodel*)inModel; HFETAinstance *here; double vt; double temp; /* loop through all the diode models */ for( ; model != NULL; model = HFETAnextModel(model)) { if(model->HFETArd != 0) { model->HFETAdrainConduct = 1/model->HFETArd; } else { model->HFETAdrainConduct = 0; } if(model->HFETArs != 0) { model->HFETAsourceConduct = 1/model->HFETArs; } else { model->HFETAsourceConduct = 0; } if(model->HFETArg != 0) { model->HFETAgateConduct = 1/model->HFETArg; } else { model->HFETAgateConduct = 0; } if(model->HFETAri != 0) { model->HFETAgi = 1/model->HFETAri; } else { model->HFETAgi = 0; } if(model->HFETArf != 0) { model->HFETAgf = 1/model->HFETArf; } else { model->HFETAgf = 0; } model->HFETAdeltaSqr = model->HFETAdelta*model->HFETAdelta; model->HFETAthreshold *= model->HFETAtype; if(!model->HFETAvt2Given) VT2 = VTO; if(!model->HFETAvt1Given) IN_VT1 = VTO+CHARGE*NMAX*DI/EPSI; for (here = HFETAinstances(model); here != NULL ; here=HFETAnextInstance(here)) { if(!here->HFETAdtempGiven) { here->HFETAdtemp = 0.0; } if(!here->HFETAtempGiven) { here->HFETAtemp = ckt->CKTtemp + here->HFETAdtemp; } vt = CONSTKoverQ*TEMP; TLAMBDA = LAMBDA + KLAMBDA*(TEMP-ckt->CKTnomTemp); TMU = MU - KMU*(TEMP-ckt->CKTnomTemp); TVTO = VTO - KVTO*(TEMP-ckt->CKTnomTemp); N0 = EPSI*ETA*vt/2/CHARGE/(DI+DELTAD); N01 = EPSI*ETA1*vt/2/CHARGE/D1; if(model->HFETAeta2Given) N02 = EPSI*ETA2*vt/2/CHARGE/D2; else N02 = 0.0; GCHI0 = CHARGE*W*TMU/L; CF = 0.5*EPSI*W; IMAX = CHARGE*NMAX*VS*W; IS1D = JS1D*W*L/2; IS2D = JS2D*W*L/2; IS1S = JS1S*W*L/2; IS2S = JS2S*W*L/2; ISO = ASTAR*W*L/2; GGRWL = GGR*L*W/2; temp = exp(TEMP/model->HFETAtf); FGDS = model->HFETAfgds*temp; DELF = model->HFETAdelf*temp; if(model->HFETAgatemod == 0) { if(IS1S != 0) here->HFETAvcrit = vt*log(vt/(CONSTroot2*IS1S)); else here->HFETAvcrit = DBL_MAX; } else { if(ISO != 0.0) here->HFETAvcrit = vt*log(vt/(CONSTroot2*ISO)); else here->HFETAvcrit = DBL_MAX; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hfet1/hfetext.h0000644000175000017500000000133213546075722022011 0ustar carstencarsten/********** Imported from MacSpice3f4 - Antony Wilson Modified: Paolo Nenzi **********/ extern int HFETAacLoad(GENmodel*,CKTcircuit*); extern int HFETAask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int HFETAgetic(GENmodel*,CKTcircuit*); extern int HFETAload(GENmodel*,CKTcircuit*); extern int HFETAmAsk(CKTcircuit*,GENmodel*,int,IFvalue*); extern int HFETAmParam(int,IFvalue*,GENmodel*); extern int HFETAparam(int,IFvalue*,GENinstance*,IFvalue*); extern int HFETApzLoad(GENmodel*, CKTcircuit*, SPcomplex*); extern int HFETAsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int HFETAtemp(GENmodel*,CKTcircuit*); extern int HFETAtrunc(GENmodel*,CKTcircuit*,double*); extern int HFETAunsetup(GENmodel*,CKTcircuit*); tmpk8ny_4pz/src/spicelib/devices/hfet1/hfetacl.c0000644000175000017500000001113713546075722021747 0ustar carstencarsten/********** Imported from MacSpice3f4 - Antony Wilson Modified: Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "hfetdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HFETAacLoad(GENmodel *inModel, CKTcircuit *ckt) { HFETAmodel *model = (HFETAmodel*)inModel; HFETAinstance *here; double gm; double gds; double xds; double ggs; double xgs; double ggd; double xgd; double ggspp; double ggdpp; double f; double m; for( ; model != NULL; model = HFETAnextModel(model)) { for( here = HFETAinstances(model); here != NULL; here = HFETAnextInstance(here)) { gm = *(ckt->CKTstate0 + here->HFETAgm); gds = *(ckt->CKTstate0 + here->HFETAgds); xds = CDS*ckt->CKTomega; ggs = *(ckt->CKTstate0 + here->HFETAggs); xgs = *(ckt->CKTstate0 + here->HFETAqgs) * ckt->CKTomega; ggd = *(ckt->CKTstate0 + here->HFETAggd); xgd = *(ckt->CKTstate0 + here->HFETAqgd) * ckt->CKTomega; ggspp = *(ckt->CKTstate0 + here->HFETAggspp); ggdpp = *(ckt->CKTstate0 + here->HFETAggdpp); if(model->HFETAkappaGiven && here->HFETAdelf != 0.0) { f = ckt->CKTomega/2/M_PI; gds = gds*(1+0.5*model->HFETAkappa*(1+tanh((f-here->HFETAfgds)/here->HFETAdelf))); } m = here->HFETAm; *(here->HFETAdrainDrainPtr) += m * (model->HFETAdrainConduct); *(here->HFETAsourceSourcePtr) += m * (model->HFETAsourceConduct); *(here->HFETAgatePrimeGatePrimePtr) += m * (ggd+ggs+ggspp+ggdpp+model->HFETAgateConduct); *(here->HFETAdrainPrimeDrainPrimePtr) += m * (gds+ggd+model->HFETAdrainConduct+model->HFETAgf); *(here->HFETAsourcePrimeSourcePrimePtr) += m * (gds+gm+ggs+model->HFETAsourceConduct+model->HFETAgi); *(here->HFETAsourcePrmPrmSourcePrmPrmPtr) += m * (model->HFETAgi+ggspp); *(here->HFETAdrainPrmPrmDrainPrmPrmPtr) += m * (model->HFETAgf+ggdpp); *(here->HFETAdrainDrainPrimePtr) -= m * (model->HFETAdrainConduct); *(here->HFETAdrainPrimeDrainPtr) -= m * (model->HFETAdrainConduct); *(here->HFETAsourceSourcePrimePtr) -= m * (model->HFETAsourceConduct); *(here->HFETAsourcePrimeSourcePtr) -= m * (model->HFETAsourceConduct); *(here->HFETAgatePrimeDrainPrimePtr) -= m * (ggd); *(here->HFETAdrainPrimeGatePrimePtr) += m * (gm-ggd); *(here->HFETAgatePrimeSourcePrimePtr) -= m * (ggs); *(here->HFETAsourcePrimeGatePrimePtr) += m * (-ggs-gm); *(here->HFETAdrainPrimeSourcePrimePtr) += m * (-gds-gm); *(here->HFETAsourcePrimeDrainPrimePtr) -= m * (gds); *(here->HFETAsourcePrimeSourcePrmPrmPtr) -= m * (model->HFETAgi); *(here->HFETAsourcePrmPrmSourcePrimePtr) -= m * (model->HFETAgi); *(here->HFETAgatePrimeSourcePrmPrmPtr) -= m * (ggspp); *(here->HFETAsourcePrmPrmGatePrimePtr) -= m * (ggspp); *(here->HFETAdrainPrimeDrainPrmPrmPtr) -= m * (model->HFETAgf); *(here->HFETAdrainPrmPrmDrainPrimePtr) -= m * (model->HFETAgf); *(here->HFETAgatePrimeDrainPrmPrmPtr) -= m * (ggdpp); *(here->HFETAdrainPrmPrmGatePrimePtr) -= m * (ggdpp); *(here->HFETAgateGatePtr) += m * (model->HFETAgateConduct); *(here->HFETAgateGatePrimePtr) -= m * (model->HFETAgateConduct); *(here->HFETAgatePrimeGatePtr) -= m * (model->HFETAgateConduct); *(here->HFETAgatePrimeGatePrimePtr+1) += m * (xgd+xgs); *(here->HFETAdrainPrmPrmDrainPrmPrmPtr+1) += m * (xgd); *(here->HFETAsourcePrmPrmSourcePrmPrmPtr+1) += m * (xgs); *(here->HFETAgatePrimeDrainPrmPrmPtr+1) -= m * (xgd); *(here->HFETAgatePrimeSourcePrmPrmPtr+1) -= m * (xgs); *(here->HFETAdrainPrmPrmGatePrimePtr+1) -= m * (xgd); *(here->HFETAsourcePrmPrmGatePrimePtr+1) -= m * (xgs); *(here->HFETAdrainPrimeDrainPrimePtr+1) += m * (xds); *(here->HFETAsourcePrimeSourcePrimePtr+1) += m * (xds); *(here->HFETAdrainPrimeSourcePrimePtr+1) -= m * (xds); *(here->HFETAsourcePrimeDrainPrimePtr+1) -= m * (xds); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hfet1/hfetsetup.c0000644000175000017500000003454613546075722022361 0ustar carstencarsten/********** Imported from MacSpice3f4 - Antony Wilson Modified: Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "hfetdefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* #define HFETAphibGiven #define CHARGE 1.60219e-19 */ int HFETAsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* load the diode structure with those pointers needed later * for fast matrix loading */ { HFETAmodel *model = (HFETAmodel*)inModel; HFETAinstance *here; int error; CKTnode *tmp; /* loop through all the diode models */ for( ; model != NULL; model = HFETAnextModel(model)) { if( (model->HFETAtype != NHFET) && (model->HFETAtype != PHFET) ) { model->HFETAtype = NHFET; } if(!model->HFETAthresholdGiven) { if(model->HFETAtype == NHFET) model->HFETAthreshold = 0.15; else model->HFETAthreshold = -0.15; } if(!model->HFETAdiGiven) { model->HFETAdi = 0.04e-6; } if(!model->HFETAlambdaGiven) { model->HFETAlambda = 0.15; } if(!model->HFETAetaGiven) { if(model->HFETAtype == NHFET) model->HFETAeta = 1.28; else model->HFETAeta = 1.4; } if(!model->HFETAmGiven) { model->HFETAm = 3.0; } if(!model->HFETAmcGiven) { model->HFETAmc = 3.0; } if(!model->HFETAgammaGiven) { model->HFETAgamma = 3.0; } if(!model->HFETAsigma0Given) { model->HFETAsigma0 = 0.057; } if(!model->HFETAvsigmatGiven) { model->HFETAvsigmat = 0.3; } if(!model->HFETAvsigmaGiven) { model->HFETAvsigma = 0.1; } if(!model->HFETAmuGiven) { if(model->HFETAtype == NHFET) model->HFETAmu = 0.4; else model->HFETAmu = 0.03; } if(!model->HFETAdeltaGiven) { model->HFETAdelta = 3.0; } if(!model->HFETAvsGiven) { if(model->HFETAtype == NHFET) model->HFETAvs = 1.5e5; else model->HFETAvs = 0.8e5; } if(!model->HFETAnmaxGiven) { model->HFETAnmax = 2e16; } if(!model->HFETAdeltadGiven) { model->HFETAdeltad = 4.5e-9; } if(!model->HFETAjs1dGiven) { model->HFETAjs1d = 1.0; } if(!model->HFETAjs2dGiven) { model->HFETAjs2d = 1.15e6; } if(!model->HFETAjs1sGiven) { model->HFETAjs1s = 1.0; } if(!model->HFETAjs2sGiven) { model->HFETAjs2s = 1.15e6; } if(!model->HFETAm1dGiven) { model->HFETAm1d = 1.32; } if(!model->HFETAm2dGiven) { model->HFETAm2d = 6.9; } if(!model->HFETAm1sGiven) { model->HFETAm1s = 1.32; } if(!model->HFETAm2sGiven) { model->HFETAm2s = 6.9; } if(!model->HFETArdGiven) { model->HFETArd = 0; } if(!model->HFETArsGiven) { model->HFETArs = 0; } if(!model->HFETArdiGiven) { model->HFETArdi = 0; } if(!model->HFETArsiGiven) { model->HFETArsi = 0; } if(!model->HFETArgsGiven) { model->HFETArgs = 90; } if(!model->HFETArgdGiven) { model->HFETArgd = 90; } if(!model->HFETAriGiven) { model->HFETAri = 0; } if(!model->HFETArfGiven) { model->HFETArf = 0; } if(!model->HFETAepsiGiven) { model->HFETAepsi = 12.244*8.85418e-12; } if(!model->HFETAa1Given) { model->HFETAa1 = 0; } if(!model->HFETAa2Given) { model->HFETAa2 = 0; } if(!model->HFETAmv1Given) { model->HFETAmv1 = 3; } if(!model->HFETApGiven) { model->HFETAp = 1; } if(!model->HFETAkappaGiven) { model->HFETAkappa = 0; } if(!model->HFETAdelfGiven) { model->HFETAdelf = 0; } if(!model->HFETAfgdsGiven) { model->HFETAfgds = 0; } if(!model->HFETAtfGiven) { model->HFETAtf = ckt->CKTtemp; } if(!model->HFETAcdsGiven) { model->HFETAcds = 0; } if(!model->HFETAphibGiven) { model->HFETAphib = 0.5*CHARGE; } if(!model->HFETAtalphaGiven) { model->HFETAtalpha = 1200; } if(!model->HFETAmt1Given) { model->HFETAmt1 = 3.5; } if(!model->HFETAmt2Given) { model->HFETAmt2 = 9.9; } if(!model->HFETAck1Given) { model->HFETAck1 = 1; } if(!model->HFETAck2Given) { model->HFETAck2 = 0; } if(!model->HFETAcm1Given) { model->HFETAcm1 = 3; } if(!model->HFETAcm2Given) { model->HFETAcm2 = 0; } if(!model->HFETAcm3Given) { model->HFETAcm3 = 0.17; } if(!model->HFETAastarGiven) { model->HFETAastar = 4.0e4; } if(!model->HFETAeta1Given) { model->HFETAeta1 = 2; } if(!model->HFETAd1Given) { model->HFETAd1 = 0.03e-6; } if(!model->HFETAeta2Given) { model->HFETAeta2 = 2; } if(!model->HFETAd2Given) { model->HFETAd2 = 0.2e-6; } if(!model->HFETAvt2Given) { /* initialized in HFETAtemp */ model->HFETAvt2 = 0; } if(!model->HFETAggrGiven) { model->HFETAggr = 40; } if(!model->HFETAdelGiven) { model->HFETAdel = 0.04; } if(!model->HFETAklambdaGiven) KLAMBDA = 0; if(!model->HFETAkmuGiven) KMU = 0; if(!model->HFETAkvtoGiven) KVTO = 0; /* loop through all the instances of the model */ for (here = HFETAinstances(model); here != NULL ; here=HFETAnextInstance(here)) { if(!here->HFETAlengthGiven) { here->HFETAlength = 1e-6; } if(!here->HFETAwidthGiven) { here->HFETAwidth = 20e-6; } if(!here->HFETAmGiven) { here->HFETAm = 1.0; } here->HFETAstate = *states; *states += HFETAnumStates; if(model->HFETArs != 0) { if(here->HFETAsourcePrimeNode == 0) { error = CKTmkVolt(ckt,&tmp,here->HFETAname,"source"); if(error) return(error); here->HFETAsourcePrimeNode = tmp->number; /* XXX: Applied AlansFixes */ if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->HFETAsourcePrimeNode = here->HFETAsourceNode; } if(model->HFETArd != 0) { if(here->HFETAdrainPrimeNode == 0) { error = CKTmkVolt(ckt,&tmp,here->HFETAname,"drain"); if(error) return(error); here->HFETAdrainPrimeNode = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->HFETAdrainPrimeNode = here->HFETAdrainNode; } if(model->HFETArg != 0) { if(here->HFETAgatePrimeNode == 0) { error = CKTmkVolt(ckt,&tmp,here->HFETAname,"gate"); if(error) return(error); here->HFETAgatePrimeNode = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,2,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->HFETAgatePrimeNode = here->HFETAgateNode; } if(model->HFETArf != 0) { if(here->HFETAdrainPrmPrmNode == 0) { error = CKTmkVolt(ckt,&tmp,here->HFETAname,"gd"); if(error) return(error); here->HFETAdrainPrmPrmNode = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->HFETAdrainPrmPrmNode = here->HFETAdrainPrimeNode; } if(model->HFETAri != 0) { if(here->HFETAsourcePrmPrmNode == 0) { error = CKTmkVolt(ckt,&tmp,here->HFETAname,"gs"); if(error) return(error); here->HFETAsourcePrmPrmNode = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->HFETAsourcePrmPrmNode = here->HFETAsourcePrimeNode; } /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(HFETAdrainDrainPrimePtr,HFETAdrainNode,HFETAdrainPrimeNode); TSTALLOC(HFETAgatePrimeDrainPrimePtr,HFETAgatePrimeNode,HFETAdrainPrimeNode); TSTALLOC(HFETAgatePrimeSourcePrimePtr,HFETAgatePrimeNode,HFETAsourcePrimeNode); TSTALLOC(HFETAsourceSourcePrimePtr,HFETAsourceNode,HFETAsourcePrimeNode); TSTALLOC(HFETAdrainPrimeDrainPtr,HFETAdrainPrimeNode,HFETAdrainNode); TSTALLOC(HFETAdrainPrimeGatePrimePtr,HFETAdrainPrimeNode,HFETAgatePrimeNode); TSTALLOC(HFETAdrainPrimeSourcePrimePtr,HFETAdrainPrimeNode,HFETAsourcePrimeNode); TSTALLOC(HFETAsourcePrimeGatePrimePtr,HFETAsourcePrimeNode,HFETAgatePrimeNode); TSTALLOC(HFETAsourcePrimeSourcePtr,HFETAsourcePrimeNode,HFETAsourceNode); TSTALLOC(HFETAsourcePrimeDrainPrimePtr,HFETAsourcePrimeNode,HFETAdrainPrimeNode); TSTALLOC(HFETAdrainDrainPtr,HFETAdrainNode,HFETAdrainNode); TSTALLOC(HFETAgatePrimeGatePrimePtr,HFETAgatePrimeNode,HFETAgatePrimeNode); TSTALLOC(HFETAsourceSourcePtr,HFETAsourceNode,HFETAsourceNode); TSTALLOC(HFETAdrainPrimeDrainPrimePtr,HFETAdrainPrimeNode,HFETAdrainPrimeNode); TSTALLOC(HFETAsourcePrimeSourcePrimePtr,HFETAsourcePrimeNode,HFETAsourcePrimeNode); TSTALLOC(HFETAdrainPrimeDrainPrmPrmPtr,HFETAdrainPrimeNode,HFETAdrainPrmPrmNode); TSTALLOC(HFETAdrainPrmPrmDrainPrimePtr,HFETAdrainPrmPrmNode,HFETAdrainPrimeNode); TSTALLOC(HFETAdrainPrmPrmGatePrimePtr,HFETAdrainPrmPrmNode,HFETAgatePrimeNode); TSTALLOC(HFETAgatePrimeDrainPrmPrmPtr,HFETAgatePrimeNode,HFETAdrainPrmPrmNode); TSTALLOC(HFETAdrainPrmPrmDrainPrmPrmPtr,HFETAdrainPrmPrmNode,HFETAdrainPrmPrmNode); TSTALLOC(HFETAsourcePrimeSourcePrmPrmPtr,HFETAsourcePrimeNode,HFETAsourcePrmPrmNode); TSTALLOC(HFETAsourcePrmPrmSourcePrimePtr,HFETAsourcePrmPrmNode,HFETAsourcePrimeNode); TSTALLOC(HFETAsourcePrmPrmGatePrimePtr,HFETAsourcePrmPrmNode,HFETAgatePrimeNode); TSTALLOC(HFETAgatePrimeSourcePrmPrmPtr,HFETAgatePrimeNode,HFETAsourcePrmPrmNode); TSTALLOC(HFETAsourcePrmPrmSourcePrmPrmPtr,HFETAsourcePrmPrmNode,HFETAsourcePrmPrmNode); TSTALLOC(HFETAgateGatePtr,HFETAgateNode,HFETAgateNode); TSTALLOC(HFETAgateGatePrimePtr,HFETAgateNode,HFETAgatePrimeNode); TSTALLOC(HFETAgatePrimeGatePtr,HFETAgatePrimeNode,HFETAgateNode); } } return(OK); } int HFETAunsetup(GENmodel *inModel, CKTcircuit *ckt) { HFETAmodel *model; HFETAinstance *here; for (model = (HFETAmodel *)inModel; model != NULL; model = HFETAnextModel(model)) { for (here = HFETAinstances(model); here != NULL; here=HFETAnextInstance(here)) { if (here->HFETAsourcePrmPrmNode > 0 && here->HFETAsourcePrmPrmNode != here->HFETAsourcePrimeNode) CKTdltNNum(ckt, here->HFETAsourcePrmPrmNode); here->HFETAsourcePrmPrmNode = 0; if (here->HFETAdrainPrmPrmNode > 0 && here->HFETAdrainPrmPrmNode != here->HFETAdrainPrimeNode) CKTdltNNum(ckt, here->HFETAdrainPrmPrmNode); here->HFETAdrainPrmPrmNode = 0; if (here->HFETAgatePrimeNode > 0 && here->HFETAgatePrimeNode != here->HFETAgateNode) CKTdltNNum(ckt, here->HFETAgatePrimeNode); here->HFETAgatePrimeNode = 0; if (here->HFETAdrainPrimeNode > 0 && here->HFETAdrainPrimeNode != here->HFETAdrainNode) CKTdltNNum(ckt, here->HFETAdrainPrimeNode); here->HFETAdrainPrimeNode = 0; if (here->HFETAsourcePrimeNode > 0 && here->HFETAsourcePrimeNode != here->HFETAsourceNode) CKTdltNNum(ckt, here->HFETAsourcePrimeNode); here->HFETAsourcePrimeNode = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/hfet1/hfetgetic.c0000644000175000017500000000207713546075722022306 0ustar carstencarsten/********** Imported from MacSpice3f4 - Antony Wilson Modified: Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "hfetdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HFETAgetic(GENmodel *inModel, CKTcircuit *ckt) { HFETAmodel *model = (HFETAmodel*)inModel; HFETAinstance *here; /* * grab initial conditions out of rhs array. User specified, so use * external nodes to get values */ for( ; model ; model = HFETAnextModel(model)) { for(here = HFETAinstances(model); here ; here = HFETAnextInstance(here)) { if(!here->HFETAicVDSGiven) { here->HFETAicVDS = *(ckt->CKTrhs + here->HFETAdrainNode) - *(ckt->CKTrhs + here->HFETAsourceNode); } if(!here->HFETAicVGSGiven) { here->HFETAicVGS = *(ckt->CKTrhs + here->HFETAgateNode) - *(ckt->CKTrhs + here->HFETAsourceNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hfet1/hfetinit.h0000644000175000017500000000040213546075722022151 0ustar carstencarsten#ifndef _HFETAINIT_H #define _HFETAINIT_H extern IFparm HFETApTable[ ]; extern IFparm HFETAmPTable[ ]; extern char *HFETAnames[ ]; extern int HFETApTSize; extern int HFETAmPTSize; extern int HFETAnSize; extern int HFETAiSize; extern int HFETAmSize; #endif tmpk8ny_4pz/src/spicelib/devices/hfet1/hfetmpar.c0000644000175000017500000002214513546075722022150 0ustar carstencarsten/********** Imported from MacSpice3f4 - Antony Wilson Modified: Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "hfetdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HFETAmParam(int param, IFvalue *value, GENmodel *inModel) { HFETAmodel *model = (HFETAmodel*)inModel; switch(param) { case HFETA_MOD_VTO: model->HFETAthresholdGiven = TRUE; model->HFETAthreshold = value->rValue; break; case HFETA_MOD_LAMBDA: model->HFETAlambdaGiven = TRUE; model->HFETAlambda = value->rValue; break; case HFETA_MOD_RD: model->HFETArdGiven = TRUE; model->HFETArd = value->rValue; break; case HFETA_MOD_RS: model->HFETArsGiven = TRUE; model->HFETArs = value->rValue; break; case HFETA_MOD_RG: model->HFETArgGiven = TRUE; model->HFETArg = value->rValue; break; case HFETA_MOD_RDI: model->HFETArdiGiven = TRUE; model->HFETArdi = value->rValue; break; case HFETA_MOD_RSI: model->HFETArsiGiven = TRUE; model->HFETArsi = value->rValue; break; case HFETA_MOD_RGS: model->HFETArgsGiven = TRUE; model->HFETArgs = value->rValue; break; case HFETA_MOD_RGD: model->HFETArgdGiven = TRUE; model->HFETArgd = value->rValue; break; case HFETA_MOD_RI: model->HFETAriGiven = TRUE; model->HFETAri = value->rValue; break; case HFETA_MOD_RF: model->HFETArfGiven = TRUE; model->HFETArf = value->rValue; break; case HFETA_MOD_ETA: model->HFETAetaGiven = TRUE; model->HFETAeta = value->rValue; break; case HFETA_MOD_M: model->HFETAmGiven = TRUE; model->HFETAm = value->rValue; break; case HFETA_MOD_MC: model->HFETAmcGiven = TRUE; model->HFETAmc = value->rValue; break; case HFETA_MOD_GAMMA: model->HFETAgammaGiven = TRUE; model->HFETAgamma = value->rValue; break; case HFETA_MOD_SIGMA0: model->HFETAsigma0Given = TRUE; model->HFETAsigma0 = value->rValue; break; case HFETA_MOD_VSIGMAT: model->HFETAvsigmatGiven = TRUE; model->HFETAvsigmat = value->rValue; break; case HFETA_MOD_VSIGMA: model->HFETAvsigmaGiven = TRUE; model->HFETAvsigma = value->rValue; break; case HFETA_MOD_MU: model->HFETAmuGiven = TRUE; model->HFETAmu = value->rValue; break; case HFETA_MOD_DI: model->HFETAdiGiven = TRUE; model->HFETAdi = value->rValue; break; case HFETA_MOD_DELTA: model->HFETAdeltaGiven = TRUE; model->HFETAdelta = value->rValue; break; case HFETA_MOD_VS: model->HFETAvsGiven = TRUE; model->HFETAvs = value->rValue; break; case HFETA_MOD_NMAX: model->HFETAnmaxGiven = TRUE; model->HFETAnmax = value->rValue; break; case HFETA_MOD_DELTAD: model->HFETAdeltadGiven = TRUE; model->HFETAdeltad = value->rValue; break; case HFETA_MOD_JS1D: model->HFETAjs1dGiven = TRUE; model->HFETAjs1d = value->rValue; break; case HFETA_MOD_JS2D: model->HFETAjs2dGiven = TRUE; model->HFETAjs2d = value->rValue; break; case HFETA_MOD_JS1S: model->HFETAjs1sGiven = TRUE; model->HFETAjs1s = value->rValue; break; case HFETA_MOD_JS2S: model->HFETAjs2sGiven = TRUE; model->HFETAjs2s = value->rValue; break; case HFETA_MOD_M1D: model->HFETAm1dGiven = TRUE; model->HFETAm1d = value->rValue; break; case HFETA_MOD_M2D: model->HFETAm2dGiven = TRUE; model->HFETAm2d = value->rValue; break; case HFETA_MOD_M1S: model->HFETAm1sGiven = TRUE; model->HFETAm1s = value->rValue; break; case HFETA_MOD_M2S: model->HFETAm2sGiven = TRUE; model->HFETAm2s = value->rValue; break; case HFETA_MOD_EPSI: model->HFETAepsiGiven = TRUE; model->HFETAepsi = value->rValue; break; case HFETA_MOD_A1: model->HFETAa1Given = TRUE; model->HFETAa1 = value->rValue; break; case HFETA_MOD_A2: model->HFETAa2Given = TRUE; model->HFETAa2 = value->rValue; break; case HFETA_MOD_MV1: model->HFETAmv1Given = TRUE; model->HFETAmv1 = value->rValue; break; case HFETA_MOD_P: model->HFETApGiven = TRUE; model->HFETAp = value->rValue; break; case HFETA_MOD_KAPPA: model->HFETAkappaGiven = TRUE; model->HFETAkappa = value->rValue; break; case HFETA_MOD_DELF: model->HFETAdelfGiven = TRUE; model->HFETAdelf = value->rValue; break; case HFETA_MOD_FGDS: model->HFETAfgdsGiven = TRUE; model->HFETAfgds = value->rValue; break; case HFETA_MOD_TF: model->HFETAtfGiven = TRUE; model->HFETAtf = value->rValue+CONSTCtoK; break; case HFETA_MOD_CDS: model->HFETAcdsGiven = TRUE; model->HFETAcds = value->rValue; break; case HFETA_MOD_PHIB: model->HFETAphibGiven = TRUE; model->HFETAphib = value->rValue*CHARGE; break; case HFETA_MOD_TALPHA: model->HFETAtalphaGiven = TRUE; model->HFETAtalpha = value->rValue; break; case HFETA_MOD_MT1: model->HFETAmt1Given = TRUE; model->HFETAmt1 = value->rValue; break; case HFETA_MOD_MT2: model->HFETAmt2Given = TRUE; model->HFETAmt2 = value->rValue; break; case HFETA_MOD_CK1: model->HFETAck1Given = TRUE; model->HFETAck1 = value->rValue; break; case HFETA_MOD_CK2: model->HFETAck2Given = TRUE; model->HFETAck2 = value->rValue; break; case HFETA_MOD_CM1: model->HFETAcm1Given = TRUE; model->HFETAcm1 = value->rValue; break; case HFETA_MOD_CM2: model->HFETAcm2Given = TRUE; model->HFETAcm2 = value->rValue; break; case HFETA_MOD_CM3: model->HFETAcm3Given = TRUE; model->HFETAcm3 = value->rValue; break; case HFETA_MOD_ASTAR: model->HFETAastarGiven = TRUE; model->HFETAastar = value->rValue; break; case HFETA_MOD_ETA1: model->HFETAeta1Given = TRUE; model->HFETAeta1 = value->rValue; break; case HFETA_MOD_D1: model->HFETAd1Given = TRUE; model->HFETAd1 = value->rValue; break; case HFETA_MOD_VT1: model->HFETAvt1Given = TRUE; model->HFETAvt1 = value->rValue; break; case HFETA_MOD_ETA2: model->HFETAeta2Given = TRUE; model->HFETAeta2 = value->rValue; break; case HFETA_MOD_D2: model->HFETAd2Given = TRUE; model->HFETAd2 = value->rValue; break; case HFETA_MOD_VT2: model->HFETAvt2Given = TRUE; model->HFETAvt2 = value->rValue; break; case HFETA_MOD_GGR: model->HFETAggrGiven = TRUE; model->HFETAggr = value->rValue; break; case HFETA_MOD_DEL: model->HFETAdelGiven = TRUE; model->HFETAdel = value->rValue; break; case HFETA_MOD_GATEMOD: model->HFETAgatemodGiven = TRUE; model->HFETAgatemod = value->iValue; break; case HFETA_MOD_KLAMBDA: model->HFETAklambdaGiven = TRUE; KLAMBDA = value->rValue; break; case HFETA_MOD_KMU: model->HFETAkmuGiven = TRUE; KMU = value->rValue; break; case HFETA_MOD_KVTO: model->HFETAkvtoGiven = TRUE; KVTO = value->rValue; break; case HFETA_MOD_NHFET: if(value->iValue) { model->HFETAtype = NHFET; } break; case HFETA_MOD_PHFET: if(value->iValue) { model->HFETAtype = PHFET; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hfet1/hfetask.c0000644000175000017500000001237713546075722021775 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ /* Imported into HFETA source: Paolo Nenzi 2001 */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "hfetdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int HFETAask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { HFETAinstance *here = (HFETAinstance*)inst; static char *msg = "Current and power not available in ac analysis"; NG_IGNORE(select); switch(which) { case HFETA_LENGTH: value->rValue = here->HFETAlength; return (OK); case HFETA_WIDTH: value->rValue = here->HFETAwidth; value->rValue *= here->HFETAm; return (OK); case HFETA_M: value->rValue = here->HFETAm; return (OK); case HFETA_IC_VDS: value->rValue = here->HFETAicVDS; return (OK); case HFETA_IC_VGS: value->rValue = here->HFETAicVGS; return (OK); case HFETA_OFF: value->iValue = here->HFETAoff; return (OK); case HFETA_DRAINNODE: value->iValue = here->HFETAdrainNode; return (OK); case HFETA_GATENODE: value->iValue = here->HFETAgateNode; return (OK); case HFETA_SOURCENODE: value->iValue = here->HFETAsourceNode; return (OK); case HFETA_DRAINPRIMENODE: value->iValue = here->HFETAdrainPrimeNode; return (OK); case HFETA_SOURCEPRIMENODE: value->iValue = here->HFETAsourcePrimeNode; return (OK); case HFETA_TEMP: value->rValue = here->HFETAtemp - CONSTCtoK; return(OK); case HFETA_DTEMP: value->rValue = here->HFETAdtemp; return(OK); case HFETA_VGS: value->rValue = *(ckt->CKTstate0 + here->HFETAvgs); return (OK); case HFETA_VGD: value->rValue = *(ckt->CKTstate0 + here->HFETAvgd); return (OK); case HFETA_CG: value->rValue = *(ckt->CKTstate0 + here->HFETAcg); value->rValue *= here->HFETAm; return (OK); case HFETA_CD: value->rValue = *(ckt->CKTstate0 + here->HFETAcd); value->rValue *= here->HFETAm; return (OK); case HFETA_CGD: value->rValue = *(ckt->CKTstate0 + here->HFETAcgd); value->rValue *= here->HFETAm; return (OK); case HFETA_GM: value->rValue = *(ckt->CKTstate0 + here->HFETAgm); value->rValue *= here->HFETAm; return (OK); case HFETA_GDS: value->rValue = *(ckt->CKTstate0 + here->HFETAgds); value->rValue *= here->HFETAm; return (OK); case HFETA_GGS: value->rValue = *(ckt->CKTstate0 + here->HFETAggs); value->rValue *= here->HFETAm; return (OK); case HFETA_GGD: value->rValue = *(ckt->CKTstate0 + here->HFETAggd); value->rValue *= here->HFETAm; return (OK); case HFETA_QGS: value->rValue = *(ckt->CKTstate0 + here->HFETAqgs); value->rValue *= here->HFETAm; return (OK); case HFETA_CQGS: value->rValue = *(ckt->CKTstate0 + here->HFETAcqgs); value->rValue *= here->HFETAm; return (OK); case HFETA_QGD: value->rValue = *(ckt->CKTstate0 + here->HFETAqgd); value->rValue *= here->HFETAm; return (OK); case HFETA_CQGD: value->rValue = *(ckt->CKTstate0 + here->HFETAcqgd); value->rValue *= here->HFETAm; return (OK); case HFETA_CS : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "HFETAask"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = -*(ckt->CKTstate0 + here->HFETAcd); value->rValue -= *(ckt->CKTstate0 + here->HFETAcg); value->rValue *= here->HFETAm; } return(OK); case HFETA_POWER : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "HFETAask"; strcpy(errMsg,msg); return(E_ASKPOWER); } else { value->rValue = *(ckt->CKTstate0 + here->HFETAcd) * *(ckt->CKTrhsOld + here->HFETAdrainNode); value->rValue += *(ckt->CKTstate0 + here->HFETAcg) * *(ckt->CKTrhsOld + here->HFETAgateNode); value->rValue -= (*(ckt->CKTstate0+here->HFETAcd) + *(ckt->CKTstate0 + here->HFETAcg)) * *(ckt->CKTrhsOld + here->HFETAsourceNode); value->rValue *= here->HFETAm; } return(OK); default: return (E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/hfet1/hfettrunc.c0000644000175000017500000000121013546075722022332 0ustar carstencarsten/********** Imported from MacSpice3f4 - Antony Wilson Modified: Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "hfetdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HFETAtrunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { HFETAmodel *model = (HFETAmodel*)inModel; HFETAinstance *here; for( ; model != NULL; model = HFETAnextModel(model)) { for(here=HFETAinstances(model);here!=NULL;here = HFETAnextInstance(here)){ CKTterr(here->HFETAqgs,ckt,timeStep); CKTterr(here->HFETAqgd,ckt,timeStep); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vccs/0000755000175000017500000000000013546075722020121 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/vccs/Makefile.am0000644000175000017500000000065613546075722022164 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libvccs.la libvccs_la_SOURCES = \ vccs.c \ vccsask.c \ vccsdefs.h \ vccsext.h \ vccsinit.c \ vccsinit.h \ vccsitf.h \ vccsload.c \ vccspar.c \ vccspzld.c \ vccssacl.c \ vccsset.c \ vccssld.c \ vccssprt.c \ vccssset.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/vccs/vccsinit.c0000644000175000017500000000312313546075722022106 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "vccsitf.h" #include "vccsext.h" #include "vccsinit.h" SPICEdev VCCSinfo = { .DEVpublic = { .name = "VCCS", .description = "Voltage controlled current source", .terms = &VCCSnSize, .numNames = &VCCSnSize, .termNames = VCCSnames, .numInstanceParms = &VCCSpTSize, .instanceParms = VCCSpTable, .numModelParms = NULL, .modelParms = NULL, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = VCCSparam, .DEVmodParam = NULL, .DEVload = VCCSload, .DEVsetup = VCCSsetup, .DEVunsetup = NULL, .DEVpzSetup = VCCSsetup, .DEVtemperature = NULL, .DEVtrunc = NULL, .DEVfindBranch = NULL, .DEVacLoad = VCCSload, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = NULL, .DEVask = VCCSask, .DEVmodAsk = NULL, .DEVpzLoad = VCCSpzLoad, .DEVconvTest = NULL, .DEVsenSetup = VCCSsSetup, .DEVsenLoad = VCCSsLoad, .DEVsenUpdate = NULL, .DEVsenAcLoad = VCCSsAcLoad, .DEVsenPrint = VCCSsPrint, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &VCCSiSize, .DEVmodSize = &VCCSmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_vccs_info(void) { return &VCCSinfo; } tmpk8ny_4pz/src/spicelib/devices/vccs/vccsask.c0000644000175000017500000001223013546075722021720 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ /* * This routine gives access to the internal device parameters * of Voltage Controlled Current Source */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "vccsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int VCCSask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { VCCSinstance *here = (VCCSinstance*)inst; double vr; double vi; double sr; double si; double vm; static char *msg = "Current and power not available for ac analysis"; switch(which) { case VCCS_TRANS: value->rValue = here->VCCScoeff; return (OK); case VCCS_M: value->rValue = here->VCCSmValue; return (OK); case VCCS_POS_NODE: value->iValue = here->VCCSposNode; return (OK); case VCCS_NEG_NODE: value->iValue = here->VCCSnegNode; return (OK); case VCCS_CONT_P_NODE: value->iValue = here->VCCScontPosNode; return (OK); case VCCS_CONT_N_NODE: value->iValue = here->VCCScontNegNode; return (OK); case VCCS_CONT_V_OLD: value->rValue = *(ckt->CKTstate0 + here->VCCScontVOld); return (OK); case VCCS_QUEST_SENS_DC: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_Sap[select->iValue + 1]+ here->VCCSsenParmNo); } return(OK); case VCCS_QUEST_SENS_REAL: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->VCCSsenParmNo); } return(OK); case VCCS_QUEST_SENS_IMAG: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->VCCSsenParmNo); } return(OK); case VCCS_QUEST_SENS_MAG: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = sqrt(vr*vr + vi*vi); if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->VCCSsenParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->VCCSsenParmNo); value->rValue = (vr * sr + vi * si)/vm; } return(OK); case VCCS_QUEST_SENS_PH: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = vr*vr + vi*vi; if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->VCCSsenParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->VCCSsenParmNo); value->rValue = (vr * si - vi * sr)/vm; } return(OK); case VCCS_QUEST_SENS_CPLX: if(ckt->CKTsenInfo){ value->cValue.real= *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->VCCSsenParmNo); value->cValue.imag= *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->VCCSsenParmNo); } return(OK); case VCCS_CURRENT: if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "VCCSask"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = (*(ckt->CKTrhsOld+here->VCCScontPosNode) - *(ckt->CKTrhsOld + here->VCCScontNegNode)) * (here->VCCScoeff); } return (OK); case VCCS_VOLTS: value->rValue = (*(ckt->CKTrhsOld+here->VCCSposNode) - *(ckt->CKTrhsOld + here->VCCSnegNode)); return (OK); case VCCS_POWER: if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "VCCSask"; strcpy(errMsg,msg); return(E_ASKPOWER); } else { value->rValue = (*(ckt->CKTrhsOld+here->VCCScontPosNode) - *(ckt->CKTrhsOld + here->VCCScontNegNode)) * (here->VCCScoeff) * (*(ckt->CKTrhsOld+here->VCCSposNode) - *(ckt->CKTrhsOld + here->VCCSnegNode)); } return (OK); default: return (E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/vccs/vccs.c0000644000175000017500000000350413546075722021225 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "vccsdefs.h" #include "ngspice/suffix.h" IFparm VCCSpTable[] = { /* parameters */ IOPU("gain", VCCS_TRANS, IF_REAL, "Transconductance of source (gain)"), IOP ( "m", VCCS_M, IF_REAL , "Parallel multiplier"), IP("sens_trans", VCCS_TRANS_SENS,IF_FLAG, "flag to request sensitivity WRT transconductance"), OPU("pos_node", VCCS_POS_NODE, IF_INTEGER, "Positive node of source"), OPU("neg_node", VCCS_NEG_NODE, IF_INTEGER, "Negative node of source"), OPU("cont_p_node",VCCS_CONT_P_NODE,IF_INTEGER, "Positive node of contr. source"), OPU("cont_n_node",VCCS_CONT_N_NODE,IF_INTEGER, "Negative node of contr. source"), IP("ic", VCCS_IC, IF_REAL, "Initial condition of controlling source"), OP("i", VCCS_CURRENT,IF_REAL, "Output current"), OP("v", VCCS_VOLTS,IF_REAL, "Voltage across output"), OP("p", VCCS_POWER, IF_REAL, "Power"), OPU("sens_dc", VCCS_QUEST_SENS_DC, IF_REAL, "dc sensitivity "), OPU("sens_real", VCCS_QUEST_SENS_REAL, IF_REAL, "real part of ac sensitivity"), OPU("sens_imag", VCCS_QUEST_SENS_IMAG, IF_REAL, "imag part of ac sensitivity"), OPU("sens_mag", VCCS_QUEST_SENS_MAG, IF_REAL, "sensitivity of ac magnitude"), OPU("sens_ph", VCCS_QUEST_SENS_PH, IF_REAL, "sensitivity of ac phase"), OPU("sens_cplx", VCCS_QUEST_SENS_CPLX, IF_COMPLEX, "ac sensitivity") }; char *VCCSnames[] = { "V+", "V-", "VC+", "VC-" }; int VCCSnSize = NUMELEMS(VCCSnames); int VCCSpTSize = NUMELEMS(VCCSpTable); int VCCSmPTSize = 0; int VCCSiSize = sizeof(VCCSinstance); int VCCSmSize = sizeof(VCCSmodel); tmpk8ny_4pz/src/spicelib/devices/vccs/vccsinit.h0000644000175000017500000000030213546075722022107 0ustar carstencarsten#ifndef _VCCSINIT_H #define _VCCSINIT_H extern IFparm VCCSpTable[ ]; extern char *VCCSnames[ ]; extern int VCCSpTSize; extern int VCCSnSize; extern int VCCSiSize; extern int VCCSmSize; #endif tmpk8ny_4pz/src/spicelib/devices/vccs/vccspar.c0000644000175000017500000000171613546075722021733 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "vccsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int VCCSparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { VCCSinstance *here = (VCCSinstance *)inst; NG_IGNORE(select); switch(param) { case VCCS_TRANS: here->VCCScoeff = value->rValue; here->VCCScoeffGiven = TRUE; if (here->VCCSmGiven) here->VCCScoeff *= here->VCCSmValue; break; case VCCS_M: here->VCCSmValue = value->rValue; here->VCCSmGiven = TRUE; break; case VCCS_TRANS_SENS: here->VCCSsenParmNo = value->iValue; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vccs/vccssld.c0000644000175000017500000000236213546075722021731 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* actually load the current sensitivity information into the * array previously provided */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "vccsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VCCSsLoad(GENmodel *inModel, CKTcircuit *ckt) { VCCSmodel *model = (VCCSmodel *)inModel; VCCSinstance *here; double vc; /* loop through all the source models */ for( ; model != NULL; model = VCCSnextModel(model)) { /* loop through all the instances of the model */ for (here = VCCSinstances(model); here != NULL ; here=VCCSnextInstance(here)) { if(here->VCCSsenParmNo){ vc = *(ckt->CKTrhsOld + here->VCCScontPosNode) - *(ckt->CKTrhsOld + here->VCCScontNegNode); *(ckt->CKTsenInfo->SEN_RHS[here->VCCSposNode] + here->VCCSsenParmNo) -= vc; *(ckt->CKTsenInfo->SEN_RHS[here->VCCSnegNode] + here->VCCSsenParmNo) += vc; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vccs/vccsitf.h0000644000175000017500000000026713546075722021740 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_VCCS #define DEV_VCCS extern SPICEdev *get_vccs_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/vccs/vccssprt.c0000644000175000017500000000267013546075722022141 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* Pretty print the sensitivity info for * all the VCCS in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "vccsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" void VCCSsPrint(GENmodel *inModel, CKTcircuit *ckt) { VCCSmodel *model = (VCCSmodel *)inModel; VCCSinstance *here; printf("VOLTAGE CONTROLLED CURRENT SOURCES-----------------\n"); /* loop through all the source models */ for( ; model != NULL; model = VCCSnextModel(model)) { printf("Model name:%s\n",model->VCCSmodName); /* loop through all the instances of the model */ for (here = VCCSinstances(model); here != NULL ; here=VCCSnextInstance(here)) { printf(" Instance name:%s\n",here->VCCSname); printf(" Positive, negative nodes: %s, %s\n", CKTnodName(ckt,here->VCCSposNode), CKTnodName(ckt,here->VCCSnegNode)); printf(" Controlling Positive, negative nodes: %s, %s\n", CKTnodName(ckt,here->VCCScontPosNode), CKTnodName(ckt,here->VCCScontNegNode)); printf(" Coefficient: %f\n",here->VCCScoeff); printf(" VCCSsenParmNo:%d\n",here->VCCSsenParmNo); } } } tmpk8ny_4pz/src/spicelib/devices/vccs/vccsset.c0000644000175000017500000000266413546075722021747 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* load the current source structure with those pointers needed later * for fast matrix loading */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "vccsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int VCCSsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { VCCSmodel *model = (VCCSmodel *)inModel; VCCSinstance *here; NG_IGNORE(states); NG_IGNORE(ckt); /* loop through all the current source models */ for( ; model != NULL; model = VCCSnextModel(model)) { /* loop through all the instances of the model */ for (here = VCCSinstances(model); here != NULL ; here=VCCSnextInstance(here)) { /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(VCCSposContPosPtr, VCCSposNode, VCCScontPosNode); TSTALLOC(VCCSposContNegPtr, VCCSposNode, VCCScontNegNode); TSTALLOC(VCCSnegContPosPtr, VCCSnegNode, VCCScontPosNode); TSTALLOC(VCCSnegContNegPtr, VCCSnegNode, VCCScontNegNode); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vccs/vccsdefs.h0000644000175000017500000000571613546075722022103 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #ifndef VCCS #define VCCS #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" /* * structures to describe Voltage Controlled Current Sources */ /* information to describe a single instance */ typedef struct sVCCSinstance { struct GENinstance gen; #define VCCSmodPtr(inst) ((struct sVCCSmodel *)((inst)->gen.GENmodPtr)) #define VCCSnextInstance(inst) ((struct sVCCSinstance *)((inst)->gen.GENnextInstance)) #define VCCSname gen.GENname #define VCCSstates gen.GENstate const int VCCSposNode; /* number of positive node of source */ const int VCCSnegNode; /* number of negative node of source */ const int VCCScontPosNode; /* number of positive node of controlling source */ const int VCCScontNegNode; /* number of negative node of controlling source */ double VCCSinitCond; /* initial condition (of controlling source) */ double VCCScoeff; /* coefficient */ double VCCSmValue; /* Parallel multiplier */ double *VCCSposContPosPtr; /* pointer to sparse matrix element at * (positive node, control positive node) */ double *VCCSposContNegPtr; /* pointer to sparse matrix element at * (negative node, control negative node) */ double *VCCSnegContPosPtr; /* pointer to sparse matrix element at * (positive node, control positive node) */ double *VCCSnegContNegPtr; /* pointer to sparse matrix element at * (negative node, control negative node) */ unsigned VCCScoeffGiven :1 ;/* flag to indicate function coeffs given */ unsigned VCCSmGiven :1 ;/* flag to indicate multiplier given */ int VCCSsenParmNo; /* parameter # for sensitivity use; set equal to 0 if not a design parameter*/ } VCCSinstance ; #define VCCSvOld VCCSstates #define VCCScontVOld VCCSstates + 1 /* per model data */ typedef struct sVCCSmodel { /* model structure for a source */ struct GENmodel gen; #define VCCSmodType gen.GENmodType #define VCCSnextModel(inst) ((struct sVCCSmodel *)((inst)->gen.GENnextModel)) #define VCCSinstances(inst) ((VCCSinstance *)((inst)->gen.GENinstances)) #define VCCSmodName gen.GENmodName } VCCSmodel; /* device parameters */ enum { VCCS_TRANS = 1, VCCS_IC, VCCS_POS_NODE, VCCS_NEG_NODE, VCCS_CONT_P_NODE, VCCS_CONT_N_NODE, VCCS_CONT_V_OLD, VCCS_TRANS_SENS, VCCS_CURRENT, VCCS_POWER, VCCS_VOLTS, VCCS_M, }; /* model parameters */ /* device questions */ enum { VCCS_QUEST_SENS_REAL = 201, VCCS_QUEST_SENS_IMAG, VCCS_QUEST_SENS_MAG, VCCS_QUEST_SENS_PH, VCCS_QUEST_SENS_CPLX, VCCS_QUEST_SENS_DC, }; /* model questions */ #include "vccsext.h" #endif /*VCCS*/ tmpk8ny_4pz/src/spicelib/devices/vccs/vccspzld.c0000644000175000017500000000221413546075722022114 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "vccsdefs.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int VCCSpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) /* actually load the current values into the * sparse matrix previously provided */ { VCCSmodel *model = (VCCSmodel *)inModel; VCCSinstance *here; NG_IGNORE(s); NG_IGNORE(ckt); /* loop through all the source models */ for( ; model != NULL; model = VCCSnextModel(model)) { /* loop through all the instances of the model */ for (here = VCCSinstances(model); here != NULL ; here=VCCSnextInstance(here)) { *(here->VCCSposContPosPtr) += here->VCCScoeff ; *(here->VCCSposContNegPtr) -= here->VCCScoeff ; *(here->VCCSnegContPosPtr) -= here->VCCScoeff ; *(here->VCCSnegContNegPtr) += here->VCCScoeff ; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vccs/vccssacl.c0000644000175000017500000000317113546075722022070 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* actually load the current ac sensitivity information into the * array previously provided */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "vccsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VCCSsAcLoad(GENmodel *inModel, CKTcircuit *ckt) { VCCSmodel *model = (VCCSmodel *)inModel; VCCSinstance *here; double vc; double ivc; /* loop through all the source models */ for( ; model != NULL; model = VCCSnextModel(model)) { /* loop through all the instances of the model */ for (here = VCCSinstances(model); here != NULL ; here=VCCSnextInstance(here)) { if (here->VCCSsenParmNo){ vc = *(ckt->CKTrhsOld + here->VCCScontPosNode) - *(ckt->CKTrhsOld + here->VCCScontNegNode); ivc = *(ckt->CKTirhsOld + here->VCCScontPosNode) - *(ckt->CKTirhsOld + here->VCCScontNegNode); *(ckt->CKTsenInfo->SEN_RHS[here->VCCSposNode] + here->VCCSsenParmNo) -= vc; *(ckt->CKTsenInfo->SEN_iRHS[here->VCCSposNode] + here->VCCSsenParmNo) -= ivc; *(ckt->CKTsenInfo->SEN_RHS[here->VCCSnegNode] + here->VCCSsenParmNo) += vc; *(ckt->CKTsenInfo->SEN_iRHS[here->VCCSnegNode] + here->VCCSsenParmNo) += ivc; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vccs/vccsext.h0000644000175000017500000000113613546075722021752 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ extern int VCCSask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int VCCSload(GENmodel*,CKTcircuit*); extern int VCCSparam(int,IFvalue*,GENinstance*,IFvalue*); extern int VCCSpzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int VCCSsAcLoad(GENmodel*,CKTcircuit*); extern int VCCSsLoad(GENmodel*,CKTcircuit*); extern int VCCSsSetup(SENstruct*,GENmodel*); extern void VCCSsPrint(GENmodel*,CKTcircuit*); extern int VCCSsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); tmpk8ny_4pz/src/spicelib/devices/vccs/vccssset.c0000644000175000017500000000165513546075722022131 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* loop through all the devices and * allocate parameter #s to design parameters */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "vccsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VCCSsSetup(SENstruct *info, GENmodel *inModel) { VCCSmodel *model = (VCCSmodel *)inModel; VCCSinstance *here; /* loop through all the current source models */ for( ; model != NULL; model = VCCSnextModel(model)) { /* loop through all the instances of the model */ for (here = VCCSinstances(model); here != NULL ; here=VCCSnextInstance(here)) { if(here->VCCSsenParmNo){ here->VCCSsenParmNo = ++(info->SENparms); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vccs/vccsload.c0000644000175000017500000000211513546075722022062 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vccsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int VCCSload(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current values into the * sparse matrix previously provided */ { VCCSmodel *model = (VCCSmodel *)inModel; VCCSinstance *here; NG_IGNORE(ckt); /* loop through all the source models */ for( ; model != NULL; model = VCCSnextModel(model)) { /* loop through all the instances of the model */ for (here = VCCSinstances(model); here != NULL ; here=VCCSnextInstance(here)) { *(here->VCCSposContPosPtr) += here->VCCScoeff ; *(here->VCCSposContNegPtr) -= here->VCCScoeff ; *(here->VCCSnegContPosPtr) -= here->VCCScoeff ; *(here->VCCSnegContNegPtr) += here->VCCScoeff ; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/cktcrte.c0000644000175000017500000000325613546075722020774 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* CKTcrtElement(ckt,type,inModPtr,inInstPtr,name,subname) * * Create a device of the specified type, with the given name, using * the specified model in the named circuit. */ #include "ngspice/config.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "dev.h" #include "ngspice/memory.h" int CKTcrtElt(CKTcircuit *ckt, GENmodel *modPtr, GENinstance **inInstPtr, IFuid name) { GENinstance *instPtr = NULL; /* instPtr points to the data struct for per-instance data */ int type; DEVices = devices(); if(!modPtr) return E_NOMOD; instPtr = CKTfndDev(ckt, name); if (instPtr) { if (inInstPtr) *inInstPtr = instPtr; return E_EXISTS; } type = modPtr->GENmodType; #ifdef TRACE /*------ SDB debug statement -------*/ printf("In CKTcrtElt, about to tmalloc new model, type = %d. . . \n", type); #endif instPtr = (GENinstance *) tmalloc((size_t) *DEVices[type]->DEVinstSize); if (instPtr == NULL) return E_NOMEM; /* PN: adding instance number for statistical purpose */ ckt->CKTstat->STATdevNum[type].instNum ++; ckt->CKTstat->STATtotalDev ++; #if 0 printf("device: %s number %d\n", DEVices[type]->DEVpublic.name, ckt->CKTstat->STATdevNum[type].instNum); #endif instPtr->GENname = name; instPtr->GENmodPtr = modPtr; instPtr->GENnextInstance = modPtr->GENinstances; modPtr->GENinstances = instPtr; nghash_insert(ckt->DEVnameHash, name, instPtr); if(inInstPtr != NULL) *inInstPtr = instPtr; return OK; } tmpk8ny_4pz/src/spicelib/devices/hisimhv2/0000755000175000017500000000000013546075722020714 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2set.c0000644000175000017500000030520713546075722023012 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhvset.c DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "hsmhv2def.h" #include "hsmhv2evalenv.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define C_m2cm (1.0e2) #define C_cm2m_p3 (1.0e-6) #define C_m2cm_p1o2 (1.0e1) #define BINNING(param) pParam->HSMHV2_##param = model->HSMHV2_##param \ + model->HSMHV2_l##param / Lbin + model->HSMHV2_w##param / Wbin \ + model->HSMHV2_p##param / LWbin ; #define RANGECHECK(param, min, max, pname) \ if ( model->HSMHV2_coerrrep && ((param) < (min) || (param) > (max)) ) { \ printf("warning(HiSIM_HV(%s)): (%s = %g) range [%g , %g].\n", model->HSMHV2modName,\ (pname), (param), (min*1.0), (max*1.0) ); \ } #define RANGERESET(param, min, max, pname) \ if ( model->HSMHV2_coerrrep && ((param) > (max)) ) { \ printf("reset(HiSIM_HV(%s)): (%s = %g to %g) range [%g , %g].\n", model->HSMHV2modName,\ (pname), (param), (max*1.0), (min*1.0), (max*1.0) ); \ } \ if ( model->HSMHV2_coerrrep && ((param) < (min)) ) { \ printf("reset(HiSIM_HV(%s)): (%s = %g to %g) range [%g , %g].\n",model->HSMHV2modName, \ (pname), (param), (min*1.0), (min*1.0), (max*1.0) ); \ } \ if ( (param) < (min) ) { param = (min); } \ if ( (param) > (max) ) { param = (max); } #define MINCHECK(param, min, pname) \ if ( model->HSMHV2_coerrrep && ((param) < (min)) ) { \ printf("warning(HiSIM_HV(%s)): (%s = %g) range [%g , %g].\n",model->HSMHV2modName, \ (pname), (param), (min*1.0), (min*1.0) ); \ } #define MINRESET(param, min, pname) \ if ( model->HSMHV2_coerrrep && ((param) < (min)) ) { \ printf("reset(HiSIM_HV(%s)): (%s = %g to %g) range [%g , %g].\n",model->HSMHV2modName, \ (pname), (param), (min*1.0), (min*1.0), (min*1.0) ); \ } \ if ( (param) < (min) ) { param = (min); } int HSMHV2setup( SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* load the HSMHV2 device structure with those pointers needed later * for fast matrix loading */ { HSMHV2model *model = (HSMHV2model*)inModel; HSMHV2instance *here; int error=0 ; CKTnode *tmp; double T2, Rd, Rs ; HSMHV2binningParam *pParam ; HSMHV2modelMKSParam *modelMKS ; HSMHV2hereMKSParam *hereMKS ; double LG=0.0, WG =0.0, Lgate =0.0, Wgate =0.0 ; double Lbin=0.0, Wbin=0.0, LWbin =0.0; /* binning */ /* loop through all the HSMHV2 device models */ for ( ;model != NULL ;model = HSMHV2nextModel(model)) { /* Default value Processing for HVMOS Models */ if ( !model->HSMHV2_type_Given ) model->HSMHV2_type = NMOS ; if ( !model->HSMHV2_info_Given ) model->HSMHV2_info = 0 ; model->HSMHV2_noise = 1; if ( !model->HSMHV2_version_Given) { model->HSMHV2_version = "2.20" ; printf("HiSIM_HV(%s): 2.20 is selected for VERSION. (default) \n",model->HSMHV2modName); model->HSMHV2_subversion = 2 ; } else { if (strncmp(model->HSMHV2_version,"2.20", 4) == 0 ) { printf("HiSIM_HV(%s): 2.20 is selected for VERSION. (default) \n",model->HSMHV2modName); model->HSMHV2_subversion = 2 ; } else if (strncmp(model->HSMHV2_version,"2.2", 3) == 0 ) { printf("HiSIM_HV(%s): 2.20 is selected for VERSION. (default) \n",model->HSMHV2modName); model->HSMHV2_subversion = 2 ; } else { printf("warning(HiSIM_HV(%s)): invalid version %s is specified, reset to 2.20 \n", model->HSMHV2modName,model->HSMHV2_version); model->HSMHV2_subversion = 2 ; } } if ( !model->HSMHV2_corsrd_Given ) model->HSMHV2_corsrd = 3 ; if ( !model->HSMHV2_corg_Given ) model->HSMHV2_corg = 0 ; if ( !model->HSMHV2_coiprv_Given ) model->HSMHV2_coiprv = 1 ; if ( !model->HSMHV2_copprv_Given ) model->HSMHV2_copprv = 1 ; if ( !model->HSMHV2_coadov_Given ) model->HSMHV2_coadov = 1 ; if ( !model->HSMHV2_coisub_Given ) model->HSMHV2_coisub = 0 ; if ( !model->HSMHV2_coiigs_Given ) model->HSMHV2_coiigs = 0 ; if ( !model->HSMHV2_cogidl_Given ) model->HSMHV2_cogidl = 0 ; if ( !model->HSMHV2_coovlp_Given ) model->HSMHV2_coovlp = 1 ; if ( !model->HSMHV2_coovlps_Given ) model->HSMHV2_coovlps = 0 ; if ( !model->HSMHV2_coflick_Given ) model->HSMHV2_coflick = 0 ; if ( !model->HSMHV2_coisti_Given ) model->HSMHV2_coisti = 0 ; if ( !model->HSMHV2_conqs_Given ) model->HSMHV2_conqs = 0 ; /* QS (default) */ if ( !model->HSMHV2_cothrml_Given ) model->HSMHV2_cothrml = 0 ; if ( !model->HSMHV2_coign_Given ) model->HSMHV2_coign = 0 ; /* induced gate noise */ if ( !model->HSMHV2_codfm_Given ) model->HSMHV2_codfm = 0 ; /* DFM */ if ( !model->HSMHV2_coqovsm_Given ) model->HSMHV2_coqovsm = 1 ; if ( !model->HSMHV2_corbnet_Given ) model->HSMHV2_corbnet = 0 ; else if ( model->HSMHV2_corbnet != 0 && model->HSMHV2_corbnet != 1 ) { model->HSMHV2_corbnet = 0; printf("warning(HiSIM_HV(%s)): CORBNET has been set to its default value: %d.\n", model->HSMHV2modName,model->HSMHV2_corbnet); } if ( !model->HSMHV2_coselfheat_Given ) model->HSMHV2_coselfheat = 0 ; /* Self-heating model */ if ( !model->HSMHV2_cosubnode_Given ) model->HSMHV2_cosubnode = 0 ; if ( !model->HSMHV2_cosym_Given ) model->HSMHV2_cosym = 0 ; /* Symmetry model for HV */ if ( !model->HSMHV2_cotemp_Given ) model->HSMHV2_cotemp = 0 ; if ( !model->HSMHV2_cordrift_Given ) model->HSMHV2_cordrift = 1 ; model->HSMHV2_coldrift = 1 ; if ( model->HSMHV2_coldrift_Given ) { fprintf(stderr,"warning(HiSIM_HV(%s)): COLDRIFT has been inactivated ( Ldrift = LDRIFT1 + LDRIFT2 ).\n",model->HSMHV2modName); } if ( !model->HSMHV2_coerrrep_Given ) model->HSMHV2_coerrrep = 1 ; if ( !model->HSMHV2_codep_Given ) model->HSMHV2_codep = 0 ; if ( model->HSMHV2_codep_Given ) { if( model->HSMHV2_codep != 0 && model->HSMHV2_codep != 1 ) { printf("warning(HiSIM_HV(%s)): Invalid model parameter CODEP (= %d) was specified, reset to 0.\n",model->HSMHV2modName,model->HSMHV2_codep); model->HSMHV2_codep = 0 ; } } if ( !model->HSMHV2_coddlt_Given ) model->HSMHV2_coddlt = 1 ; if ( model->HSMHV2_coddlt_Given ) { if( model->HSMHV2_coddlt != 0 && model->HSMHV2_coddlt != 1 ) { printf("warning(HiSIM_HV(%s)): Invalid model parameter CODDLT (= %d) was specified, reset to 1.\n",model->HSMHV2modName,model->HSMHV2_coddlt); model->HSMHV2_coddlt = 1 ; } } if ( !model->HSMHV2_vmax_Given ) model->HSMHV2_vmax = 1.0e7 ; if ( !model->HSMHV2_vmaxt1_Given ) model->HSMHV2_vmaxt1 = 0.0 ; if ( !model->HSMHV2_vmaxt2_Given ) model->HSMHV2_vmaxt2 = 0.0 ; if ( !model->HSMHV2_bgtmp1_Given ) model->HSMHV2_bgtmp1 = 90.25e-6 ; if ( !model->HSMHV2_bgtmp2_Given ) model->HSMHV2_bgtmp2 = 1.0e-7 ; if ( !model->HSMHV2_eg0_Given ) model->HSMHV2_eg0 = 1.1785e0 ; if ( !model->HSMHV2_tox_Given ) model->HSMHV2_tox = 7e-9 ; if ( !model->HSMHV2_xld_Given ) model->HSMHV2_xld = 0 ; if ( !model->HSMHV2_lover_Given ) model->HSMHV2_lover = 30e-9 ; // if ( !model->HSMHV2_lovers_Given ) model->HSMHV2_lovers = 30e-9 ; // if ( model->HSMHV2_lover_Given ) model->HSMHV2_lovers = model->HSMHV2_lover ; if ( !model->HSMHV2_rdov11_Given ) model->HSMHV2_rdov11 = 0.0 ; if ( !model->HSMHV2_rdov12_Given ) model->HSMHV2_rdov12 = 1.0 ; if ( !model->HSMHV2_rdov13_Given ) model->HSMHV2_rdov13 = 1.0 ; if ( !model->HSMHV2_rdslp1_Given ) model->HSMHV2_rdslp1 = 0.0 ; if ( !model->HSMHV2_rdict1_Given ) model->HSMHV2_rdict1 = 1.0 ; if ( !model->HSMHV2_rdslp2_Given ) model->HSMHV2_rdslp2 = 1.0 ; if ( !model->HSMHV2_rdict2_Given ) model->HSMHV2_rdict2 = 0.0 ; if ( !model->HSMHV2_loverld_Given ) model->HSMHV2_loverld = 1.0e-6 ; if ( !model->HSMHV2_ldrift1_Given ) model->HSMHV2_ldrift1 = 1.0e-6 ; if ( !model->HSMHV2_ldrift2_Given ) model->HSMHV2_ldrift2 = 1.0e-6 ; if ( !model->HSMHV2_ldrift1s_Given ) model->HSMHV2_ldrift1s = 0.0 ; if ( !model->HSMHV2_ldrift2s_Given ) model->HSMHV2_ldrift2s = 1.0e-6 ; if ( !model->HSMHV2_subld1_Given ) model->HSMHV2_subld1 = 0.0 ; if ( !model->HSMHV2_subld1l_Given ) model->HSMHV2_subld1l = 0.0 ; if ( !model->HSMHV2_subld1lp_Given ) model->HSMHV2_subld1lp = 1.0 ; if ( !model->HSMHV2_subld2_Given ) model->HSMHV2_subld2 = 0.0 ; if ( !model->HSMHV2_xpdv_Given ) model->HSMHV2_xpdv = 0.0 ; if ( !model->HSMHV2_xpvdth_Given ) model->HSMHV2_xpvdth = 0.0 ; if ( !model->HSMHV2_xpvdthg_Given ) model->HSMHV2_xpvdthg = 0.0 ; if ( !model->HSMHV2_ddltmax_Given ) model->HSMHV2_ddltmax = 10 ; /* Vdseff */ if ( !model->HSMHV2_ddltslp_Given ) model->HSMHV2_ddltslp = 0.0 ; /* Vdseff */ if ( !model->HSMHV2_ddltict_Given ) model->HSMHV2_ddltict = 10.0 ; /* Vdseff */ if ( !model->HSMHV2_vfbover_Given ) model->HSMHV2_vfbover = -0.5 ; if ( !model->HSMHV2_nover_Given ) model->HSMHV2_nover = 3e16 ; if ( !model->HSMHV2_novers_Given ) model->HSMHV2_novers = 1e17 ; if ( !model->HSMHV2_xwd_Given ) model->HSMHV2_xwd = 0.0 ; if ( !model->HSMHV2_xwdc_Given ) model->HSMHV2_xwdc = model->HSMHV2_xwd ; if ( !model->HSMHV2_xl_Given ) model->HSMHV2_xl = 0.0 ; if ( !model->HSMHV2_xw_Given ) model->HSMHV2_xw = 0.0 ; if ( !model->HSMHV2_saref_Given ) model->HSMHV2_saref = 1e-6 ; if ( !model->HSMHV2_sbref_Given ) model->HSMHV2_sbref = 1e-6 ; if ( !model->HSMHV2_ll_Given ) model->HSMHV2_ll = 0.0 ; if ( !model->HSMHV2_lld_Given ) model->HSMHV2_lld = 0.0 ; if ( !model->HSMHV2_lln_Given ) model->HSMHV2_lln = 0.0 ; if ( !model->HSMHV2_wl_Given ) model->HSMHV2_wl = 0.0 ; if ( !model->HSMHV2_wl1_Given ) model->HSMHV2_wl1 = 0.0 ; if ( !model->HSMHV2_wl1p_Given ) model->HSMHV2_wl1p = 1.0 ; if ( !model->HSMHV2_wl2_Given ) model->HSMHV2_wl2 = 0.0 ; if ( !model->HSMHV2_wl2p_Given ) model->HSMHV2_wl2p = 1.0 ; if ( !model->HSMHV2_wld_Given ) model->HSMHV2_wld = 0.0 ; if ( !model->HSMHV2_wln_Given ) model->HSMHV2_wln = 0.0 ; if ( !model->HSMHV2_rsh_Given ) model->HSMHV2_rsh = 0.0 ; if ( !model->HSMHV2_rshg_Given ) model->HSMHV2_rshg = 0.0 ; if ( !model->HSMHV2_xqy_Given ) model->HSMHV2_xqy = 0.0 ; if ( !model->HSMHV2_xqy1_Given ) model->HSMHV2_xqy1 = 0.0 ; if ( !model->HSMHV2_xqy2_Given ) model->HSMHV2_xqy2 = 2.0 ; if ( !model->HSMHV2_rs_Given ) model->HSMHV2_rs = 0.0 ; if ( !model->HSMHV2_rd_Given ) model->HSMHV2_rd = 0.0 ; if ( !model->HSMHV2_vfbc_Given ) model->HSMHV2_vfbc = -1.0 ; if ( !model->HSMHV2_vbi_Given ) model->HSMHV2_vbi = 1.1 ; if ( !model->HSMHV2_nsubc_Given ) model->HSMHV2_nsubc = 3.0e17 ; if ( !model->HSMHV2_parl2_Given ) model->HSMHV2_parl2 = 10.0e-9 ; if ( !model->HSMHV2_lp_Given ) model->HSMHV2_lp = 15e-9 ; if ( !model->HSMHV2_nsubp_Given ) model->HSMHV2_nsubp = 1.0e18 ; if ( !model->HSMHV2_nsubp0_Given ) model->HSMHV2_nsubp0 = 0.0 ; if ( !model->HSMHV2_nsubwp_Given ) model->HSMHV2_nsubwp = 1.0 ; if ( !model->HSMHV2_scp1_Given ) model->HSMHV2_scp1 = 0.0 ; if ( !model->HSMHV2_scp2_Given ) model->HSMHV2_scp2 = 0.0 ; if ( !model->HSMHV2_scp3_Given ) model->HSMHV2_scp3 = 0.0 ; if ( !model->HSMHV2_sc1_Given ) model->HSMHV2_sc1 = 0.0 ; if ( !model->HSMHV2_sc2_Given ) model->HSMHV2_sc2 = 0.0 ; if ( !model->HSMHV2_sc3_Given ) model->HSMHV2_sc3 = 0.0 ; if ( !model->HSMHV2_sc4_Given ) model->HSMHV2_sc4 = 0.0 ; if ( !model->HSMHV2_pgd1_Given ) model->HSMHV2_pgd1 = 0.0 ; if ( !model->HSMHV2_pgd2_Given ) model->HSMHV2_pgd2 = 1.0 ; if ( !model->HSMHV2_pgd4_Given ) model->HSMHV2_pgd4 = 0.0 ; if ( !model->HSMHV2_ndep_Given ) model->HSMHV2_ndep = 1.0 ; if ( !model->HSMHV2_ndepl_Given ) model->HSMHV2_ndepl = 0.0 ; if ( !model->HSMHV2_ndeplp_Given ) model->HSMHV2_ndeplp = 1.0 ; if ( !model->HSMHV2_ninv_Given ) model->HSMHV2_ninv = 0.5 ; if ( !model->HSMHV2_muecb0_Given ) model->HSMHV2_muecb0 = 1.0e3 ; if ( !model->HSMHV2_muecb1_Given ) model->HSMHV2_muecb1 = 100.0 ; if ( !model->HSMHV2_mueph0_Given ) model->HSMHV2_mueph0 = 300.0e-3 ; if ( !model->HSMHV2_mueph1_Given ) { if (model->HSMHV2_type == NMOS) model->HSMHV2_mueph1 = 20.0e3 ; else model->HSMHV2_mueph1 = 9.0e3 ; } if ( !model->HSMHV2_muephw_Given ) model->HSMHV2_muephw = 0.0 ; if ( !model->HSMHV2_muepwp_Given ) model->HSMHV2_muepwp = 1.0 ; if ( !model->HSMHV2_muephl_Given ) model->HSMHV2_muephl = 0.0 ; if ( !model->HSMHV2_mueplp_Given ) model->HSMHV2_mueplp = 1.0 ; if ( !model->HSMHV2_muephs_Given ) model->HSMHV2_muephs = 0.0 ; if ( !model->HSMHV2_muepsp_Given ) model->HSMHV2_muepsp = 1.0 ; if ( !model->HSMHV2_vtmp_Given ) model->HSMHV2_vtmp = 0.0 ; if ( !model->HSMHV2_wvth0_Given ) model->HSMHV2_wvth0 = 0.0 ; if ( !model->HSMHV2_muesr0_Given ) model->HSMHV2_muesr0 = 2.0 ; if ( !model->HSMHV2_muesr1_Given ) model->HSMHV2_muesr1 = 6.0e14 ; if ( !model->HSMHV2_muesrl_Given ) model->HSMHV2_muesrl = 0.0 ; if ( !model->HSMHV2_muesrw_Given ) model->HSMHV2_muesrw = 0.0 ; if ( !model->HSMHV2_mueswp_Given ) model->HSMHV2_mueswp = 1.0 ; if ( !model->HSMHV2_mueslp_Given ) model->HSMHV2_mueslp = 1.0 ; if ( !model->HSMHV2_muetmp_Given ) model->HSMHV2_muetmp = 1.5 ; if ( !model->HSMHV2_bb_Given ) { if (model->HSMHV2_type == NMOS) model->HSMHV2_bb = 2.0 ; else model->HSMHV2_bb = 1.0 ; } if ( !model->HSMHV2_sub1_Given ) model->HSMHV2_sub1 = 10 ; if ( !model->HSMHV2_sub2_Given ) model->HSMHV2_sub2 = 25 ; if ( !model->HSMHV2_svgs_Given ) model->HSMHV2_svgs = 0.8e0 ; if ( !model->HSMHV2_svbs_Given ) model->HSMHV2_svbs = 0.5e0 ; if ( !model->HSMHV2_svbsl_Given ) model->HSMHV2_svbsl = 0e0 ; if ( !model->HSMHV2_svds_Given ) model->HSMHV2_svds = 0.8e0 ; if ( !model->HSMHV2_slg_Given ) model->HSMHV2_slg = 30e-9 ; if ( !model->HSMHV2_sub1l_Given ) model->HSMHV2_sub1l = 2.5e-3 ; if ( !model->HSMHV2_sub2l_Given ) model->HSMHV2_sub2l = 2e-6 ; if ( !model->HSMHV2_fn1_Given ) model->HSMHV2_fn1 = 50e0 ; if ( !model->HSMHV2_fn2_Given ) model->HSMHV2_fn2 = 170e-6 ; if ( !model->HSMHV2_fn3_Given ) model->HSMHV2_fn3 = 0e0 ; if ( !model->HSMHV2_fvbs_Given ) model->HSMHV2_fvbs = 12e-3 ; if ( !model->HSMHV2_svgsl_Given ) model->HSMHV2_svgsl = 0.0 ; if ( !model->HSMHV2_svgslp_Given ) model->HSMHV2_svgslp = 1.0 ; if ( !model->HSMHV2_svgswp_Given ) model->HSMHV2_svgswp = 1.0 ; if ( !model->HSMHV2_svgsw_Given ) model->HSMHV2_svgsw = 0.0 ; if ( !model->HSMHV2_svbslp_Given ) model->HSMHV2_svbslp = 1.0 ; if ( !model->HSMHV2_slgl_Given ) model->HSMHV2_slgl = 0.0 ; if ( !model->HSMHV2_slglp_Given ) model->HSMHV2_slglp = 1.0 ; if ( !model->HSMHV2_sub1lp_Given ) model->HSMHV2_sub1lp = 1.0 ; if ( !model->HSMHV2_nsti_Given ) model->HSMHV2_nsti = 5.0e17 ; if ( !model->HSMHV2_wsti_Given ) model->HSMHV2_wsti = 0.0 ; if ( !model->HSMHV2_wstil_Given ) model->HSMHV2_wstil = 0.0 ; if ( !model->HSMHV2_wstilp_Given ) model->HSMHV2_wstilp = 1.0 ; if ( !model->HSMHV2_wstiw_Given ) model->HSMHV2_wstiw = 0.0 ; if ( !model->HSMHV2_wstiwp_Given ) model->HSMHV2_wstiwp = 1.0 ; if ( !model->HSMHV2_scsti1_Given ) model->HSMHV2_scsti1 = 0.0 ; if ( !model->HSMHV2_scsti2_Given ) model->HSMHV2_scsti2 = 0.0 ; if ( !model->HSMHV2_vthsti_Given ) model->HSMHV2_vthsti = 0.0 ; if ( !model->HSMHV2_vdsti_Given ) model->HSMHV2_vdsti = 0.0 ; if ( !model->HSMHV2_muesti1_Given ) model->HSMHV2_muesti1 = 0.0 ; if ( !model->HSMHV2_muesti2_Given ) model->HSMHV2_muesti2 = 0.0 ; if ( !model->HSMHV2_muesti3_Given ) model->HSMHV2_muesti3 = 1.0 ; if ( !model->HSMHV2_nsubpsti1_Given ) model->HSMHV2_nsubpsti1 = 0.0 ; if ( !model->HSMHV2_nsubpsti2_Given ) model->HSMHV2_nsubpsti2 = 0.0 ; if ( !model->HSMHV2_nsubpsti3_Given ) model->HSMHV2_nsubpsti3 = 1.0 ; if ( !model->HSMHV2_lpext_Given ) model->HSMHV2_lpext = 1.0e-50 ; if ( !model->HSMHV2_npext_Given ) model->HSMHV2_npext = 5.0e17 ; if ( !model->HSMHV2_scp21_Given ) model->HSMHV2_scp21 = 0.0 ; if ( !model->HSMHV2_scp22_Given ) model->HSMHV2_scp22 = 0.0 ; if ( !model->HSMHV2_bs1_Given ) model->HSMHV2_bs1 = 0.0 ; if ( !model->HSMHV2_bs2_Given ) model->HSMHV2_bs2 = 0.9 ; if ( !model->HSMHV2_tpoly_Given ) model->HSMHV2_tpoly = 200e-9 ; if ( !model->HSMHV2_cgbo_Given ) model->HSMHV2_cgbo = 0.0 ; if ( !model->HSMHV2_js0_Given ) model->HSMHV2_js0 = 0.5e-6 ; if ( !model->HSMHV2_js0sw_Given ) model->HSMHV2_js0sw = 0.0 ; if ( !model->HSMHV2_nj_Given ) model->HSMHV2_nj = 1.0 ; if ( !model->HSMHV2_njsw_Given ) model->HSMHV2_njsw = 1.0 ; if ( !model->HSMHV2_xti_Given ) model->HSMHV2_xti = 2.0 ; if ( !model->HSMHV2_cj_Given ) model->HSMHV2_cj = 5.0e-04 ; if ( !model->HSMHV2_cjsw_Given ) model->HSMHV2_cjsw = 5.0e-10 ; if ( !model->HSMHV2_cjswg_Given ) model->HSMHV2_cjswg = 5.0e-10 ; if ( !model->HSMHV2_mj_Given ) model->HSMHV2_mj = 0.5e0 ; if ( !model->HSMHV2_mjsw_Given ) model->HSMHV2_mjsw = 0.33e0 ; if ( !model->HSMHV2_mjswg_Given ) model->HSMHV2_mjswg = 0.33e0 ; if ( !model->HSMHV2_pb_Given ) model->HSMHV2_pb = 1.0e0 ; if ( !model->HSMHV2_pbsw_Given ) model->HSMHV2_pbsw = 1.0e0 ; if ( !model->HSMHV2_pbswg_Given ) model->HSMHV2_pbswg = 1.0e0 ; if ( !model->HSMHV2_xti2_Given ) model->HSMHV2_xti2 = 0.0e0 ; if ( !model->HSMHV2_cisb_Given ) model->HSMHV2_cisb = 0.0e0 ; if ( !model->HSMHV2_cvb_Given ) model->HSMHV2_cvb = 0.0e0 ; if ( !model->HSMHV2_ctemp_Given ) model->HSMHV2_ctemp = 0.0e0 ; if ( !model->HSMHV2_cisbk_Given ) model->HSMHV2_cisbk = 0.0e0 ; if ( !model->HSMHV2_divx_Given ) model->HSMHV2_divx = 0.0e0 ; if ( !model->HSMHV2_clm1_Given ) model->HSMHV2_clm1 = 50e-3 ; if ( !model->HSMHV2_clm2_Given ) model->HSMHV2_clm2 = 2.0 ; if ( !model->HSMHV2_clm3_Given ) model->HSMHV2_clm3 = 1.0 ; if ( !model->HSMHV2_clm5_Given ) model->HSMHV2_clm5 = 1.0 ; if ( !model->HSMHV2_clm6_Given ) model->HSMHV2_clm6 = 0.0 ; if ( !model->HSMHV2_vover_Given ) model->HSMHV2_vover = 0.3 ; if ( !model->HSMHV2_voverp_Given ) model->HSMHV2_voverp = 0.3 ; if ( !model->HSMHV2_wfc_Given ) model->HSMHV2_wfc = 0.0 ; if ( !model->HSMHV2_nsubcw_Given ) model->HSMHV2_nsubcw = 0.0 ; if ( !model->HSMHV2_nsubcwp_Given ) model->HSMHV2_nsubcwp = 1.0 ; if ( !model->HSMHV2_qme1_Given ) model->HSMHV2_qme1 = 0.0 ; if ( !model->HSMHV2_qme2_Given ) model->HSMHV2_qme2 = 2.0 ; if ( !model->HSMHV2_qme3_Given ) model->HSMHV2_qme3 = 0.0 ; if ( !model->HSMHV2_vovers_Given ) model->HSMHV2_vovers = 0.0 ; if ( !model->HSMHV2_voversp_Given ) model->HSMHV2_voversp = 0.0 ; if ( !model->HSMHV2_gidl1_Given ) model->HSMHV2_gidl1 = 2e0 ; if ( !model->HSMHV2_gidl2_Given ) model->HSMHV2_gidl2 = 3e7 ; if ( !model->HSMHV2_gidl3_Given ) model->HSMHV2_gidl3 = 0.9e0 ; if ( !model->HSMHV2_gidl4_Given ) model->HSMHV2_gidl4 = 0.0 ; if ( !model->HSMHV2_gidl5_Given ) model->HSMHV2_gidl5 = 0.2e0 ; if ( !model->HSMHV2_gleak1_Given ) model->HSMHV2_gleak1 = 50e0 ; if ( !model->HSMHV2_gleak2_Given ) model->HSMHV2_gleak2 = 10e6 ; if ( !model->HSMHV2_gleak3_Given ) model->HSMHV2_gleak3 = 60e-3 ; if ( !model->HSMHV2_gleak4_Given ) model->HSMHV2_gleak4 = 4e0 ; if ( !model->HSMHV2_gleak5_Given ) model->HSMHV2_gleak5 = 7.5e3 ; if ( !model->HSMHV2_gleak6_Given ) model->HSMHV2_gleak6 = 250e-3 ; if ( !model->HSMHV2_gleak7_Given ) model->HSMHV2_gleak7 = 1e-6 ; if ( !model->HSMHV2_glpart1_Given ) model->HSMHV2_glpart1 = 0.5 ; if ( !model->HSMHV2_glksd1_Given ) model->HSMHV2_glksd1 = 1.0e-15 ; if ( !model->HSMHV2_glksd2_Given ) model->HSMHV2_glksd2 = 1e3 ; if ( !model->HSMHV2_glksd3_Given ) model->HSMHV2_glksd3 = -1e3 ; if ( !model->HSMHV2_glkb1_Given ) model->HSMHV2_glkb1 = 5e-16 ; if ( !model->HSMHV2_glkb2_Given ) model->HSMHV2_glkb2 = 1e0 ; if ( !model->HSMHV2_glkb3_Given ) model->HSMHV2_glkb3 = 0e0 ; if ( !model->HSMHV2_egig_Given ) model->HSMHV2_egig = 0e0 ; if ( !model->HSMHV2_igtemp2_Given ) model->HSMHV2_igtemp2 = 0e0 ; if ( !model->HSMHV2_igtemp3_Given ) model->HSMHV2_igtemp3 = 0e0 ; if ( !model->HSMHV2_vzadd0_Given ) model->HSMHV2_vzadd0 = 10.0e-3 ; if ( !model->HSMHV2_pzadd0_Given ) model->HSMHV2_pzadd0 = 5.0e-3 ; if ( !model->HSMHV2_nftrp_Given ) model->HSMHV2_nftrp = 10e9 ; if ( !model->HSMHV2_nfalp_Given ) model->HSMHV2_nfalp = 1.0e-19 ; if ( !model->HSMHV2_cit_Given ) model->HSMHV2_cit = 0e0 ; if ( !model->HSMHV2_falph_Given ) model->HSMHV2_falph = 1.0 ; if ( !model->HSMHV2_kappa_Given ) model->HSMHV2_kappa = 3.90e0 ; if ( !model->HSMHV2_cgso_Given ) model->HSMHV2_cgso = 0.0 ; if ( !model->HSMHV2_cgdo_Given ) model->HSMHV2_cgdo = 0.0 ; if ( !model->HSMHV2_vdiffj_Given ) model->HSMHV2_vdiffj = 0.6e-3 ; if ( !model->HSMHV2_dly1_Given ) model->HSMHV2_dly1 = 100.0e-12 ; if ( !model->HSMHV2_dly2_Given ) model->HSMHV2_dly2 = 0.7e0 ; if ( !model->HSMHV2_dly3_Given ) model->HSMHV2_dly3 = 0.8e-6 ; if ( !model->HSMHV2_tnom_Given ) model->HSMHV2_tnom = 27.0 ; /* [C] */ if ( !model->HSMHV2_ovslp_Given ) model->HSMHV2_ovslp = 2.1e-7 ; if ( !model->HSMHV2_ovmag_Given ) model->HSMHV2_ovmag = 0.6 ; if ( !model->HSMHV2_gbmin_Given ) model->HSMHV2_gbmin = 1.0e-12; /* in mho */ if ( !model->HSMHV2_rbpb_Given ) model->HSMHV2_rbpb = 50.0e0 ; if ( !model->HSMHV2_rbpd_Given ) model->HSMHV2_rbpd = 50.0e0 ; if ( !model->HSMHV2_rbps_Given ) model->HSMHV2_rbps = 50.0e0 ; if ( !model->HSMHV2_rbdb_Given ) model->HSMHV2_rbdb = 50.0e0 ; /* not used in this version */ if ( !model->HSMHV2_rbsb_Given ) model->HSMHV2_rbsb = 50.0e0 ; /* not used in this version */ if ( !model->HSMHV2_ibpc1_Given ) model->HSMHV2_ibpc1 = 0.0 ; if ( !model->HSMHV2_ibpc1l_Given ) model->HSMHV2_ibpc1l = 0.0 ; if ( !model->HSMHV2_ibpc1lp_Given ) model->HSMHV2_ibpc1lp = -1.0 ; if ( !model->HSMHV2_ibpc2_Given ) model->HSMHV2_ibpc2 = 0.0 ; if ( !model->HSMHV2_mphdfm_Given ) model->HSMHV2_mphdfm = -0.3 ; if ( !model->HSMHV2_ptl_Given ) model->HSMHV2_ptl = 0.0 ; if ( !model->HSMHV2_ptp_Given ) model->HSMHV2_ptp = 3.5 ; if ( !model->HSMHV2_pt2_Given ) model->HSMHV2_pt2 = 0.0 ; if ( !model->HSMHV2_ptlp_Given ) model->HSMHV2_ptlp = 1.0 ; if ( !model->HSMHV2_gdl_Given ) model->HSMHV2_gdl = 0.0 ; if ( !model->HSMHV2_gdlp_Given ) model->HSMHV2_gdlp = 0.0 ; if ( !model->HSMHV2_gdld_Given ) model->HSMHV2_gdld = 0.0 ; if ( !model->HSMHV2_pt4_Given ) model->HSMHV2_pt4 = 0.0 ; if ( !model->HSMHV2_pt4p_Given ) model->HSMHV2_pt4p = 1.0 ; if ( !model->HSMHV2_rdvg11_Given ) model->HSMHV2_rdvg11 = 0.0 ; if ( !model->HSMHV2_rdvg12_Given ) model->HSMHV2_rdvg12 = 100.0 ; if ( !model->HSMHV2_rth0_Given ) model->HSMHV2_rth0 = 0.1 ; /* Self-heating model */ if ( !model->HSMHV2_cth0_Given ) model->HSMHV2_cth0 = 1.0e-7 ; /* Self-heating model */ if ( !model->HSMHV2_powrat_Given ) model->HSMHV2_powrat = 1.0 ; /* Self-heating model */ if ( !model->HSMHV2_tcjbd_Given ) model->HSMHV2_tcjbd = 0.0 ; /* Self-heating model */ if ( !model->HSMHV2_tcjbs_Given ) model->HSMHV2_tcjbs = 0.0 ; /* Self-heating model */ if ( !model->HSMHV2_tcjbdsw_Given ) model->HSMHV2_tcjbdsw = 0.0 ; /* Self-heating model */ if ( !model->HSMHV2_tcjbssw_Given ) model->HSMHV2_tcjbssw = 0.0 ; /* Self-heating model */ if ( !model->HSMHV2_tcjbdswg_Given ) model->HSMHV2_tcjbdswg = 0.0 ; /* Self-heating model */ if ( !model->HSMHV2_tcjbsswg_Given ) model->HSMHV2_tcjbsswg = 0.0 ; /* Self-heating model */ /* value reset to switch off NQS for QbdLD: */ model->HSMHV2_dlyov = 0.0 ; /* 1.0e3 ; */ if ( !model->HSMHV2_qdftvd_Given ) model->HSMHV2_qdftvd = 1.0 ; if ( !model->HSMHV2_xldld_Given ) model->HSMHV2_xldld = 1.0e-6 ; if ( !model->HSMHV2_xwdld_Given ) model->HSMHV2_xwdld = model->HSMHV2_xwd ; if ( !model->HSMHV2_rdvd_Given ) model->HSMHV2_rdvd = 7.0e-2 ; if ( !model->HSMHV2_rd20_Given ) model->HSMHV2_rd20 = 0.0 ; if ( !model->HSMHV2_rd21_Given ) model->HSMHV2_rd21 = 1.0 ; if ( !model->HSMHV2_rd22_Given ) model->HSMHV2_rd22 = 0.0 ; if ( !model->HSMHV2_rd22d_Given ) model->HSMHV2_rd22d = 0.0 ; if ( !model->HSMHV2_rd23_Given ) model->HSMHV2_rd23 = 5e-3 ; if ( !model->HSMHV2_rd24_Given ) model->HSMHV2_rd24 = 0.0 ; if ( !model->HSMHV2_rd25_Given ) model->HSMHV2_rd25 = 0.0 ; if ( !model->HSMHV2_rdvdl_Given ) model->HSMHV2_rdvdl = 0.0 ; if ( !model->HSMHV2_rdvdlp_Given ) model->HSMHV2_rdvdlp = 1.0 ; if ( !model->HSMHV2_rdvds_Given ) model->HSMHV2_rdvds = 0.0 ; if ( !model->HSMHV2_rdvdsp_Given ) model->HSMHV2_rdvdsp = 1.0 ; if ( !model->HSMHV2_rd23l_Given ) model->HSMHV2_rd23l = 0.0 ; if ( !model->HSMHV2_rd23lp_Given ) model->HSMHV2_rd23lp = 1.0 ; if ( !model->HSMHV2_rd23s_Given ) model->HSMHV2_rd23s = 0.0 ; if ( !model->HSMHV2_rd23sp_Given ) model->HSMHV2_rd23sp = 1.0 ; if ( !model->HSMHV2_rds_Given ) model->HSMHV2_rds = 0.0 ; if ( !model->HSMHV2_rdsp_Given ) model->HSMHV2_rdsp = 1.0 ; if ( !model->HSMHV2_rdtemp1_Given ) model->HSMHV2_rdtemp1 = 0.0 ; if ( !model->HSMHV2_rdtemp2_Given ) model->HSMHV2_rdtemp2 = 0.0 ; model->HSMHV2_rth0r = 0.0 ; /* not used in this version */ if ( !model->HSMHV2_rdvdtemp1_Given) model->HSMHV2_rdvdtemp1 = 0.0 ; if ( !model->HSMHV2_rdvdtemp2_Given) model->HSMHV2_rdvdtemp2 = 0.0 ; if ( !model->HSMHV2_rth0w_Given ) model->HSMHV2_rth0w = 0.0 ; if ( !model->HSMHV2_rth0wp_Given ) model->HSMHV2_rth0wp = 1.0 ; if ( !model->HSMHV2_cvdsover_Given ) model->HSMHV2_cvdsover = 0.0 ; if ( !model->HSMHV2_ninvd_Given ) model->HSMHV2_ninvd = 0.0 ; if ( !model->HSMHV2_ninvdw_Given ) model->HSMHV2_ninvdw = 0.0 ; if ( !model->HSMHV2_ninvdwp_Given ) model->HSMHV2_ninvdwp = 1.0 ; if ( !model->HSMHV2_ninvdt1_Given ) model->HSMHV2_ninvdt1 = 0.0 ; if ( !model->HSMHV2_ninvdt2_Given ) model->HSMHV2_ninvdt2 = 0.0 ; if ( !model->HSMHV2_vbsmin_Given ) model->HSMHV2_vbsmin = -10.5 ; if ( !model->HSMHV2_rdvb_Given ) model->HSMHV2_rdvb = 0.0 ; if ( !model->HSMHV2_rth0nf_Given ) model->HSMHV2_rth0nf = 0.0 ; if ( !model->HSMHV2_rthtemp1_Given ) model->HSMHV2_rthtemp1 = 0.0 ; if ( !model->HSMHV2_rthtemp2_Given ) model->HSMHV2_rthtemp2 = 0.0 ; if ( !model->HSMHV2_prattemp1_Given ) model->HSMHV2_prattemp1 = 0.0 ; if ( !model->HSMHV2_prattemp2_Given ) model->HSMHV2_prattemp2 = 0.0 ; if ( !model->HSMHV2_rdvsub_Given ) model->HSMHV2_rdvsub = 1.0 ; /* [-] substrate effect */ if ( !model->HSMHV2_rdvdsub_Given ) model->HSMHV2_rdvdsub = 0.3 ; /* [-] substrate effect */ if ( !model->HSMHV2_ddrift_Given ) model->HSMHV2_ddrift = 1.0e-6 ; /* [m] substrate effect */ if ( !model->HSMHV2_vbisub_Given ) model->HSMHV2_vbisub = 0.7 ; /* [V] substrate effect */ if ( !model->HSMHV2_nsubsub_Given ) model->HSMHV2_nsubsub = 1.0e15 ; /* [cm^-3] substrate effect */ if ( !model->HSMHV2_rdrmue_Given ) model->HSMHV2_rdrmue = 1.0e3 ; if ( !model->HSMHV2_rdrvmax_Given ) model->HSMHV2_rdrvmax = 3.0e7 ; if ( !model->HSMHV2_rdrmuetmp_Given ) model->HSMHV2_rdrmuetmp = 0.0 ; if ( !model->HSMHV2_ndepm_Given ) model->HSMHV2_ndepm = 1e17 ; if ( !model->HSMHV2_tndep_Given ) model->HSMHV2_tndep = 0.2e-6 ; if ( !model->HSMHV2_depmue0_Given ) model->HSMHV2_depmue0 = 1.0e3 ; if ( !model->HSMHV2_depmue1_Given ) model->HSMHV2_depmue1 = 0.0 ; if ( !model->HSMHV2_depmueback0_Given ) model->HSMHV2_depmueback0 = 1.0e2 ; if ( !model->HSMHV2_depmueback1_Given ) model->HSMHV2_depmueback1 = 0.0 ; if ( !model->HSMHV2_depleak_Given ) model->HSMHV2_depleak = 0.5 ; if ( !model->HSMHV2_depeta_Given ) model->HSMHV2_depeta = 0.0 ; if ( !model->HSMHV2_depvmax_Given ) model->HSMHV2_depvmax = 3.0e7 ; if ( !model->HSMHV2_depvdsef1_Given ) model->HSMHV2_depvdsef1 = 2.0 ; if ( !model->HSMHV2_depvdsef2_Given ) model->HSMHV2_depvdsef2 = 0.5 ; if ( !model->HSMHV2_depmueph0_Given ) model->HSMHV2_depmueph0 = 0.3 ; if ( !model->HSMHV2_depmueph1_Given ) model->HSMHV2_depmueph1 = 5.0e3 ; if ( !model->HSMHV2_depbb_Given ) model->HSMHV2_depbb = 1.0 ; if ( !model->HSMHV2_depvtmp_Given ) model->HSMHV2_depvtmp = 0.0 ; if ( !model->HSMHV2_depmuetmp_Given ) model->HSMHV2_depmuetmp = 1.5 ; if ( model->HSMHV2_codep ) { if ( !model->HSMHV2_copprv_Given ) model->HSMHV2_copprv = 0 ; if ( !model->HSMHV2_vfbc_Given ) model->HSMHV2_vfbc = -0.2 ; if ( !model->HSMHV2_nsubc_Given ) model->HSMHV2_nsubc = 5.0e16 ; if ( !model->HSMHV2_lp_Given ) model->HSMHV2_lp = 0.0 ; if ( !model->HSMHV2_nsubp_Given ) model->HSMHV2_nsubp = 1.0e17 ; if ( !model->HSMHV2_muesr1_Given ) model->HSMHV2_muesr1 = 5.0e15 ; } if ( !model->HSMHV2_isbreak_Given ) model->HSMHV2_isbreak = 1.0e-12 ; if ( !model->HSMHV2_rwell_Given ) model->HSMHV2_rwell = 1.0e3 ; if ( !model->HSMHV2_rdrvtmp_Given ) model->HSMHV2_rdrvtmp = 0.0 ; if ( !model->HSMHV2_rdrdjunc_Given ) model->HSMHV2_rdrdjunc = 1.0e-6 ; if ( !model->HSMHV2_rdrcx_Given ) model->HSMHV2_rdrcx = 0.0 ; if ( !model->HSMHV2_rdrcar_Given ) model->HSMHV2_rdrcar = 1.0e-8 ; if ( !model->HSMHV2_rdrdl1_Given ) model->HSMHV2_rdrdl1 = 0.0 ; if ( !model->HSMHV2_rdrdl2_Given ) model->HSMHV2_rdrdl2 = 0.0 ; if ( !model->HSMHV2_rdrvmaxw_Given ) model->HSMHV2_rdrvmaxw = 0.0 ; if ( !model->HSMHV2_rdrvmaxwp_Given ) model->HSMHV2_rdrvmaxwp = 1.0 ; if ( !model->HSMHV2_rdrvmaxl_Given ) model->HSMHV2_rdrvmaxl = 0.0 ; if ( !model->HSMHV2_rdrvmaxlp_Given ) model->HSMHV2_rdrvmaxlp = 1.0 ; if ( !model->HSMHV2_rdrmuel_Given ) model->HSMHV2_rdrmuel = 0.0 ; if ( !model->HSMHV2_rdrmuelp_Given ) model->HSMHV2_rdrmuelp = 1.0 ; if ( !model->HSMHV2_rdrqover_Given ) model->HSMHV2_rdrqover = 1E5 ; if ( !model->HSMHV2_qovadd_Given ) model->HSMHV2_qovadd = 0.0 ; if ( !model->HSMHV2_js0d_Given ) model->HSMHV2_js0d = model->HSMHV2_js0 ; if ( !model->HSMHV2_js0swd_Given ) model->HSMHV2_js0swd = model->HSMHV2_js0sw ; if ( !model->HSMHV2_njd_Given ) model->HSMHV2_njd = model->HSMHV2_nj ; if ( !model->HSMHV2_njswd_Given ) model->HSMHV2_njswd = model->HSMHV2_njsw ; if ( !model->HSMHV2_xtid_Given ) model->HSMHV2_xtid = model->HSMHV2_xti ; if ( !model->HSMHV2_cjd_Given ) model->HSMHV2_cjd = model->HSMHV2_cj ; if ( !model->HSMHV2_cjswd_Given ) model->HSMHV2_cjswd = model->HSMHV2_cjsw ; if ( !model->HSMHV2_cjswgd_Given ) model->HSMHV2_cjswgd = model->HSMHV2_cjswg ; if ( !model->HSMHV2_mjd_Given ) model->HSMHV2_mjd = model->HSMHV2_mj ; if ( !model->HSMHV2_mjswd_Given ) model->HSMHV2_mjswd = model->HSMHV2_mjsw ; if ( !model->HSMHV2_mjswgd_Given ) model->HSMHV2_mjswgd = model->HSMHV2_mjswg ; if ( !model->HSMHV2_pbd_Given ) model->HSMHV2_pbd = model->HSMHV2_pb ; if ( !model->HSMHV2_pbswd_Given ) model->HSMHV2_pbswd = model->HSMHV2_pbsw ; if ( !model->HSMHV2_pbswgd_Given ) model->HSMHV2_pbswgd = model->HSMHV2_pbswg ; if ( !model->HSMHV2_xti2d_Given ) model->HSMHV2_xti2d = model->HSMHV2_xti2 ; if ( !model->HSMHV2_cisbd_Given ) model->HSMHV2_cisbd = model->HSMHV2_cisb ; if ( !model->HSMHV2_cvbd_Given ) model->HSMHV2_cvbd = model->HSMHV2_cvb ; if ( !model->HSMHV2_ctempd_Given ) model->HSMHV2_ctempd = model->HSMHV2_ctemp ; if ( !model->HSMHV2_cisbkd_Given ) model->HSMHV2_cisbkd = model->HSMHV2_cisbk ; if ( !model->HSMHV2_divxd_Given ) model->HSMHV2_divxd = model->HSMHV2_divx ; if ( !model->HSMHV2_vdiffjd_Given ) model->HSMHV2_vdiffjd = model->HSMHV2_vdiffj ; if ( !model->HSMHV2_js0s_Given ) model->HSMHV2_js0s = model->HSMHV2_js0d ; if ( !model->HSMHV2_js0sws_Given ) model->HSMHV2_js0sws = model->HSMHV2_js0swd ; if ( !model->HSMHV2_njs_Given ) model->HSMHV2_njs = model->HSMHV2_njd ; if ( !model->HSMHV2_njsws_Given ) model->HSMHV2_njsws = model->HSMHV2_njswd ; if ( !model->HSMHV2_xtis_Given ) model->HSMHV2_xtis = model->HSMHV2_xtid ; if ( !model->HSMHV2_cjs_Given ) model->HSMHV2_cjs = model->HSMHV2_cjd ; if ( !model->HSMHV2_cjsws_Given ) model->HSMHV2_cjsws = model->HSMHV2_cjswd ; if ( !model->HSMHV2_cjswgs_Given ) model->HSMHV2_cjswgs = model->HSMHV2_cjswgd ; if ( !model->HSMHV2_mjs_Given ) model->HSMHV2_mjs = model->HSMHV2_mjd ; if ( !model->HSMHV2_mjsws_Given ) model->HSMHV2_mjsws = model->HSMHV2_mjswd ; if ( !model->HSMHV2_mjswgs_Given ) model->HSMHV2_mjswgs = model->HSMHV2_mjswgd ; if ( !model->HSMHV2_pbs_Given ) model->HSMHV2_pbs = model->HSMHV2_pbd ; if ( !model->HSMHV2_pbsws_Given ) model->HSMHV2_pbsws = model->HSMHV2_pbswd ; if ( !model->HSMHV2_pbswgs_Given ) model->HSMHV2_pbswgs = model->HSMHV2_pbswgd ; if ( !model->HSMHV2_xti2s_Given ) model->HSMHV2_xti2s = model->HSMHV2_xti2d ; if ( !model->HSMHV2_cisbs_Given ) model->HSMHV2_cisbs = model->HSMHV2_cisbd ; if ( !model->HSMHV2_cvbs_Given ) model->HSMHV2_cvbs = model->HSMHV2_cvbd ; if ( !model->HSMHV2_ctemps_Given ) model->HSMHV2_ctemps = model->HSMHV2_ctempd ; if ( !model->HSMHV2_cisbks_Given ) model->HSMHV2_cisbks = model->HSMHV2_cisbkd ; if ( !model->HSMHV2_divxs_Given ) model->HSMHV2_divxs = model->HSMHV2_divxd ; if ( !model->HSMHV2_vdiffjs_Given ) model->HSMHV2_vdiffjs = model->HSMHV2_vdiffjd ; if ( !model->HSMHV2_shemax_Given ) model->HSMHV2_shemax = 500 ; if ( !model->HSMHV2_vgsmin_Given ) model->HSMHV2_vgsmin = -100 * model->HSMHV2_type ; if ( !model->HSMHV2_gdsleak_Given ) model->HSMHV2_gdsleak = 0.0 ; if ( !model->HSMHV2_rdrbb_Given ) model->HSMHV2_rdrbb = 1 ; if ( !model->HSMHV2_rdrbbtmp_Given ) model->HSMHV2_rdrbbtmp = 0 ; /* binning parameters */ if ( !model->HSMHV2_lmin_Given ) model->HSMHV2_lmin = 0.0 ; if ( !model->HSMHV2_lmax_Given ) model->HSMHV2_lmax = 1.0 ; if ( !model->HSMHV2_wmin_Given ) model->HSMHV2_wmin = 0.0 ; if ( !model->HSMHV2_wmax_Given ) model->HSMHV2_wmax = 1.0 ; if ( !model->HSMHV2_lbinn_Given ) model->HSMHV2_lbinn = 1.0 ; if ( !model->HSMHV2_wbinn_Given ) model->HSMHV2_wbinn = 1.0 ; /* Length dependence */ if ( !model->HSMHV2_lvmax_Given ) model->HSMHV2_lvmax = 0.0 ; if ( !model->HSMHV2_lbgtmp1_Given ) model->HSMHV2_lbgtmp1 = 0.0 ; if ( !model->HSMHV2_lbgtmp2_Given ) model->HSMHV2_lbgtmp2 = 0.0 ; if ( !model->HSMHV2_leg0_Given ) model->HSMHV2_leg0 = 0.0 ; if ( !model->HSMHV2_lvfbover_Given ) model->HSMHV2_lvfbover = 0.0 ; if ( !model->HSMHV2_lnover_Given ) model->HSMHV2_lnover = 0.0 ; if ( !model->HSMHV2_lnovers_Given ) model->HSMHV2_lnovers = 0.0 ; if ( !model->HSMHV2_lwl2_Given ) model->HSMHV2_lwl2 = 0.0 ; if ( !model->HSMHV2_lvfbc_Given ) model->HSMHV2_lvfbc = 0.0 ; if ( !model->HSMHV2_lnsubc_Given ) model->HSMHV2_lnsubc = 0.0 ; if ( !model->HSMHV2_lnsubp_Given ) model->HSMHV2_lnsubp = 0.0 ; if ( !model->HSMHV2_lscp1_Given ) model->HSMHV2_lscp1 = 0.0 ; if ( !model->HSMHV2_lscp2_Given ) model->HSMHV2_lscp2 = 0.0 ; if ( !model->HSMHV2_lscp3_Given ) model->HSMHV2_lscp3 = 0.0 ; if ( !model->HSMHV2_lsc1_Given ) model->HSMHV2_lsc1 = 0.0 ; if ( !model->HSMHV2_lsc2_Given ) model->HSMHV2_lsc2 = 0.0 ; if ( !model->HSMHV2_lsc3_Given ) model->HSMHV2_lsc3 = 0.0 ; if ( !model->HSMHV2_lpgd1_Given ) model->HSMHV2_lpgd1 = 0.0 ; if ( !model->HSMHV2_lndep_Given ) model->HSMHV2_lndep = 0.0 ; if ( !model->HSMHV2_lninv_Given ) model->HSMHV2_lninv = 0.0 ; if ( !model->HSMHV2_lmuecb0_Given ) model->HSMHV2_lmuecb0 = 0.0 ; if ( !model->HSMHV2_lmuecb1_Given ) model->HSMHV2_lmuecb1 = 0.0 ; if ( !model->HSMHV2_lmueph1_Given ) model->HSMHV2_lmueph1 = 0.0 ; if ( !model->HSMHV2_lvtmp_Given ) model->HSMHV2_lvtmp = 0.0 ; if ( !model->HSMHV2_lwvth0_Given ) model->HSMHV2_lwvth0 = 0.0 ; if ( !model->HSMHV2_lmuesr1_Given ) model->HSMHV2_lmuesr1 = 0.0 ; if ( !model->HSMHV2_lmuetmp_Given ) model->HSMHV2_lmuetmp = 0.0 ; if ( !model->HSMHV2_lsub1_Given ) model->HSMHV2_lsub1 = 0.0 ; if ( !model->HSMHV2_lsub2_Given ) model->HSMHV2_lsub2 = 0.0 ; if ( !model->HSMHV2_lsvds_Given ) model->HSMHV2_lsvds = 0.0 ; if ( !model->HSMHV2_lsvbs_Given ) model->HSMHV2_lsvbs = 0.0 ; if ( !model->HSMHV2_lsvgs_Given ) model->HSMHV2_lsvgs = 0.0 ; if ( !model->HSMHV2_lfn1_Given ) model->HSMHV2_lfn1 = 0.0 ; if ( !model->HSMHV2_lfn2_Given ) model->HSMHV2_lfn2 = 0.0 ; if ( !model->HSMHV2_lfn3_Given ) model->HSMHV2_lfn3 = 0.0 ; if ( !model->HSMHV2_lfvbs_Given ) model->HSMHV2_lfvbs = 0.0 ; if ( !model->HSMHV2_lnsti_Given ) model->HSMHV2_lnsti = 0.0 ; if ( !model->HSMHV2_lwsti_Given ) model->HSMHV2_lwsti = 0.0 ; if ( !model->HSMHV2_lscsti1_Given ) model->HSMHV2_lscsti1 = 0.0 ; if ( !model->HSMHV2_lscsti2_Given ) model->HSMHV2_lscsti2 = 0.0 ; if ( !model->HSMHV2_lvthsti_Given ) model->HSMHV2_lvthsti = 0.0 ; if ( !model->HSMHV2_lmuesti1_Given ) model->HSMHV2_lmuesti1 = 0.0 ; if ( !model->HSMHV2_lmuesti2_Given ) model->HSMHV2_lmuesti2 = 0.0 ; if ( !model->HSMHV2_lmuesti3_Given ) model->HSMHV2_lmuesti3 = 0.0 ; if ( !model->HSMHV2_lnsubpsti1_Given ) model->HSMHV2_lnsubpsti1 = 0.0 ; if ( !model->HSMHV2_lnsubpsti2_Given ) model->HSMHV2_lnsubpsti2 = 0.0 ; if ( !model->HSMHV2_lnsubpsti3_Given ) model->HSMHV2_lnsubpsti3 = 0.0 ; if ( !model->HSMHV2_lcgso_Given ) model->HSMHV2_lcgso = 0.0 ; if ( !model->HSMHV2_lcgdo_Given ) model->HSMHV2_lcgdo = 0.0 ; if ( !model->HSMHV2_ljs0_Given ) model->HSMHV2_ljs0 = 0.0 ; if ( !model->HSMHV2_ljs0sw_Given ) model->HSMHV2_ljs0sw = 0.0 ; if ( !model->HSMHV2_lnj_Given ) model->HSMHV2_lnj = 0.0 ; if ( !model->HSMHV2_lcisbk_Given ) model->HSMHV2_lcisbk = 0.0 ; if ( !model->HSMHV2_lclm1_Given ) model->HSMHV2_lclm1 = 0.0 ; if ( !model->HSMHV2_lclm2_Given ) model->HSMHV2_lclm2 = 0.0 ; if ( !model->HSMHV2_lclm3_Given ) model->HSMHV2_lclm3 = 0.0 ; if ( !model->HSMHV2_lwfc_Given ) model->HSMHV2_lwfc = 0.0 ; if ( !model->HSMHV2_lgidl1_Given ) model->HSMHV2_lgidl1 = 0.0 ; if ( !model->HSMHV2_lgidl2_Given ) model->HSMHV2_lgidl2 = 0.0 ; if ( !model->HSMHV2_lgleak1_Given ) model->HSMHV2_lgleak1 = 0.0 ; if ( !model->HSMHV2_lgleak2_Given ) model->HSMHV2_lgleak2 = 0.0 ; if ( !model->HSMHV2_lgleak3_Given ) model->HSMHV2_lgleak3 = 0.0 ; if ( !model->HSMHV2_lgleak6_Given ) model->HSMHV2_lgleak6 = 0.0 ; if ( !model->HSMHV2_lglksd1_Given ) model->HSMHV2_lglksd1 = 0.0 ; if ( !model->HSMHV2_lglksd2_Given ) model->HSMHV2_lglksd2 = 0.0 ; if ( !model->HSMHV2_lglkb1_Given ) model->HSMHV2_lglkb1 = 0.0 ; if ( !model->HSMHV2_lglkb2_Given ) model->HSMHV2_lglkb2 = 0.0 ; if ( !model->HSMHV2_lnftrp_Given ) model->HSMHV2_lnftrp = 0.0 ; if ( !model->HSMHV2_lnfalp_Given ) model->HSMHV2_lnfalp = 0.0 ; if ( !model->HSMHV2_lvdiffj_Given ) model->HSMHV2_lvdiffj = 0.0 ; if ( !model->HSMHV2_libpc1_Given ) model->HSMHV2_libpc1 = 0.0 ; if ( !model->HSMHV2_libpc2_Given ) model->HSMHV2_libpc2 = 0.0 ; if ( !model->HSMHV2_lcgbo_Given ) model->HSMHV2_lcgbo = 0.0 ; if ( !model->HSMHV2_lcvdsover_Given ) model->HSMHV2_lcvdsover = 0.0 ; if ( !model->HSMHV2_lfalph_Given ) model->HSMHV2_lfalph = 0.0 ; if ( !model->HSMHV2_lnpext_Given ) model->HSMHV2_lnpext = 0.0 ; if ( !model->HSMHV2_lpowrat_Given ) model->HSMHV2_lpowrat = 0.0 ; if ( !model->HSMHV2_lrd_Given ) model->HSMHV2_lrd = 0.0 ; if ( !model->HSMHV2_lrd22_Given ) model->HSMHV2_lrd22 = 0.0 ; if ( !model->HSMHV2_lrd23_Given ) model->HSMHV2_lrd23 = 0.0 ; if ( !model->HSMHV2_lrd24_Given ) model->HSMHV2_lrd24 = 0.0 ; if ( !model->HSMHV2_lrdict1_Given ) model->HSMHV2_lrdict1 = 0.0 ; if ( !model->HSMHV2_lrdov13_Given ) model->HSMHV2_lrdov13 = 0.0 ; if ( !model->HSMHV2_lrdslp1_Given ) model->HSMHV2_lrdslp1 = 0.0 ; if ( !model->HSMHV2_lrdvb_Given ) model->HSMHV2_lrdvb = 0.0 ; if ( !model->HSMHV2_lrdvd_Given ) model->HSMHV2_lrdvd = 0.0 ; if ( !model->HSMHV2_lrdvg11_Given ) model->HSMHV2_lrdvg11 = 0.0 ; if ( !model->HSMHV2_lrs_Given ) model->HSMHV2_lrs = 0.0 ; if ( !model->HSMHV2_lrth0_Given ) model->HSMHV2_lrth0 = 0.0 ; if ( !model->HSMHV2_lvover_Given ) model->HSMHV2_lvover = 0.0 ; if ( !model->HSMHV2_ljs0d_Given ) model->HSMHV2_ljs0d = model->HSMHV2_ljs0 ; if ( !model->HSMHV2_ljs0swd_Given ) model->HSMHV2_ljs0swd = model->HSMHV2_ljs0sw ; if ( !model->HSMHV2_lnjd_Given ) model->HSMHV2_lnjd = model->HSMHV2_lnj ; if ( !model->HSMHV2_lcisbkd_Given ) model->HSMHV2_lcisbkd = model->HSMHV2_lcisbk ; if ( !model->HSMHV2_lvdiffjd_Given ) model->HSMHV2_lvdiffjd = model->HSMHV2_lvdiffj ; if ( !model->HSMHV2_ljs0s_Given ) model->HSMHV2_ljs0s = model->HSMHV2_ljs0d ; if ( !model->HSMHV2_ljs0sws_Given ) model->HSMHV2_ljs0sws = model->HSMHV2_ljs0swd ; if ( !model->HSMHV2_lnjs_Given ) model->HSMHV2_lnjs = model->HSMHV2_lnjd ; if ( !model->HSMHV2_lcisbks_Given ) model->HSMHV2_lcisbks = model->HSMHV2_lcisbkd ; if ( !model->HSMHV2_lvdiffjs_Given ) model->HSMHV2_lvdiffjs = model->HSMHV2_lvdiffjd ; /* Width dependence */ if ( !model->HSMHV2_wvmax_Given ) model->HSMHV2_wvmax = 0.0 ; if ( !model->HSMHV2_wbgtmp1_Given ) model->HSMHV2_wbgtmp1 = 0.0 ; if ( !model->HSMHV2_wbgtmp2_Given ) model->HSMHV2_wbgtmp2 = 0.0 ; if ( !model->HSMHV2_weg0_Given ) model->HSMHV2_weg0 = 0.0 ; if ( !model->HSMHV2_wvfbover_Given ) model->HSMHV2_wvfbover = 0.0 ; if ( !model->HSMHV2_wnover_Given ) model->HSMHV2_wnover = 0.0 ; if ( !model->HSMHV2_wnovers_Given ) model->HSMHV2_wnovers = 0.0 ; if ( !model->HSMHV2_wwl2_Given ) model->HSMHV2_wwl2 = 0.0 ; if ( !model->HSMHV2_wvfbc_Given ) model->HSMHV2_wvfbc = 0.0 ; if ( !model->HSMHV2_wnsubc_Given ) model->HSMHV2_wnsubc = 0.0 ; if ( !model->HSMHV2_wnsubp_Given ) model->HSMHV2_wnsubp = 0.0 ; if ( !model->HSMHV2_wscp1_Given ) model->HSMHV2_wscp1 = 0.0 ; if ( !model->HSMHV2_wscp2_Given ) model->HSMHV2_wscp2 = 0.0 ; if ( !model->HSMHV2_wscp3_Given ) model->HSMHV2_wscp3 = 0.0 ; if ( !model->HSMHV2_wsc1_Given ) model->HSMHV2_wsc1 = 0.0 ; if ( !model->HSMHV2_wsc2_Given ) model->HSMHV2_wsc2 = 0.0 ; if ( !model->HSMHV2_wsc3_Given ) model->HSMHV2_wsc3 = 0.0 ; if ( !model->HSMHV2_wpgd1_Given ) model->HSMHV2_wpgd1 = 0.0 ; if ( !model->HSMHV2_wndep_Given ) model->HSMHV2_wndep = 0.0 ; if ( !model->HSMHV2_wninv_Given ) model->HSMHV2_wninv = 0.0 ; if ( !model->HSMHV2_wmuecb0_Given ) model->HSMHV2_wmuecb0 = 0.0 ; if ( !model->HSMHV2_wmuecb1_Given ) model->HSMHV2_wmuecb1 = 0.0 ; if ( !model->HSMHV2_wmueph1_Given ) model->HSMHV2_wmueph1 = 0.0 ; if ( !model->HSMHV2_wvtmp_Given ) model->HSMHV2_wvtmp = 0.0 ; if ( !model->HSMHV2_wwvth0_Given ) model->HSMHV2_wwvth0 = 0.0 ; if ( !model->HSMHV2_wmuesr1_Given ) model->HSMHV2_wmuesr1 = 0.0 ; if ( !model->HSMHV2_wmuetmp_Given ) model->HSMHV2_wmuetmp = 0.0 ; if ( !model->HSMHV2_wsub1_Given ) model->HSMHV2_wsub1 = 0.0 ; if ( !model->HSMHV2_wsub2_Given ) model->HSMHV2_wsub2 = 0.0 ; if ( !model->HSMHV2_wsvds_Given ) model->HSMHV2_wsvds = 0.0 ; if ( !model->HSMHV2_wsvbs_Given ) model->HSMHV2_wsvbs = 0.0 ; if ( !model->HSMHV2_wsvgs_Given ) model->HSMHV2_wsvgs = 0.0 ; if ( !model->HSMHV2_wfn1_Given ) model->HSMHV2_wfn1 = 0.0 ; if ( !model->HSMHV2_wfn2_Given ) model->HSMHV2_wfn2 = 0.0 ; if ( !model->HSMHV2_wfn3_Given ) model->HSMHV2_wfn3 = 0.0 ; if ( !model->HSMHV2_wfvbs_Given ) model->HSMHV2_wfvbs = 0.0 ; if ( !model->HSMHV2_wnsti_Given ) model->HSMHV2_wnsti = 0.0 ; if ( !model->HSMHV2_wwsti_Given ) model->HSMHV2_wwsti = 0.0 ; if ( !model->HSMHV2_wscsti1_Given ) model->HSMHV2_wscsti1 = 0.0 ; if ( !model->HSMHV2_wscsti2_Given ) model->HSMHV2_wscsti2 = 0.0 ; if ( !model->HSMHV2_wvthsti_Given ) model->HSMHV2_wvthsti = 0.0 ; if ( !model->HSMHV2_wmuesti1_Given ) model->HSMHV2_wmuesti1 = 0.0 ; if ( !model->HSMHV2_wmuesti2_Given ) model->HSMHV2_wmuesti2 = 0.0 ; if ( !model->HSMHV2_wmuesti3_Given ) model->HSMHV2_wmuesti3 = 0.0 ; if ( !model->HSMHV2_wnsubpsti1_Given ) model->HSMHV2_wnsubpsti1 = 0.0 ; if ( !model->HSMHV2_wnsubpsti2_Given ) model->HSMHV2_wnsubpsti2 = 0.0 ; if ( !model->HSMHV2_wnsubpsti3_Given ) model->HSMHV2_wnsubpsti3 = 0.0 ; if ( !model->HSMHV2_wcgso_Given ) model->HSMHV2_wcgso = 0.0 ; if ( !model->HSMHV2_wcgdo_Given ) model->HSMHV2_wcgdo = 0.0 ; if ( !model->HSMHV2_wjs0_Given ) model->HSMHV2_wjs0 = 0.0 ; if ( !model->HSMHV2_wjs0sw_Given ) model->HSMHV2_wjs0sw = 0.0 ; if ( !model->HSMHV2_wnj_Given ) model->HSMHV2_wnj = 0.0 ; if ( !model->HSMHV2_wcisbk_Given ) model->HSMHV2_wcisbk = 0.0 ; if ( !model->HSMHV2_wclm1_Given ) model->HSMHV2_wclm1 = 0.0 ; if ( !model->HSMHV2_wclm2_Given ) model->HSMHV2_wclm2 = 0.0 ; if ( !model->HSMHV2_wclm3_Given ) model->HSMHV2_wclm3 = 0.0 ; if ( !model->HSMHV2_wwfc_Given ) model->HSMHV2_wwfc = 0.0 ; if ( !model->HSMHV2_wgidl1_Given ) model->HSMHV2_wgidl1 = 0.0 ; if ( !model->HSMHV2_wgidl2_Given ) model->HSMHV2_wgidl2 = 0.0 ; if ( !model->HSMHV2_wgleak1_Given ) model->HSMHV2_wgleak1 = 0.0 ; if ( !model->HSMHV2_wgleak2_Given ) model->HSMHV2_wgleak2 = 0.0 ; if ( !model->HSMHV2_wgleak3_Given ) model->HSMHV2_wgleak3 = 0.0 ; if ( !model->HSMHV2_wgleak6_Given ) model->HSMHV2_wgleak6 = 0.0 ; if ( !model->HSMHV2_wglksd1_Given ) model->HSMHV2_wglksd1 = 0.0 ; if ( !model->HSMHV2_wglksd2_Given ) model->HSMHV2_wglksd2 = 0.0 ; if ( !model->HSMHV2_wglkb1_Given ) model->HSMHV2_wglkb1 = 0.0 ; if ( !model->HSMHV2_wglkb2_Given ) model->HSMHV2_wglkb2 = 0.0 ; if ( !model->HSMHV2_wnftrp_Given ) model->HSMHV2_wnftrp = 0.0 ; if ( !model->HSMHV2_wnfalp_Given ) model->HSMHV2_wnfalp = 0.0 ; if ( !model->HSMHV2_wvdiffj_Given ) model->HSMHV2_wvdiffj = 0.0 ; if ( !model->HSMHV2_wibpc1_Given ) model->HSMHV2_wibpc1 = 0.0 ; if ( !model->HSMHV2_wibpc2_Given ) model->HSMHV2_wibpc2 = 0.0 ; if ( !model->HSMHV2_wcgbo_Given ) model->HSMHV2_wcgbo = 0.0 ; if ( !model->HSMHV2_wcvdsover_Given ) model->HSMHV2_wcvdsover = 0.0 ; if ( !model->HSMHV2_wfalph_Given ) model->HSMHV2_wfalph = 0.0 ; if ( !model->HSMHV2_wnpext_Given ) model->HSMHV2_wnpext = 0.0 ; if ( !model->HSMHV2_wpowrat_Given ) model->HSMHV2_wpowrat = 0.0 ; if ( !model->HSMHV2_wrd_Given ) model->HSMHV2_wrd = 0.0 ; if ( !model->HSMHV2_wrd22_Given ) model->HSMHV2_wrd22 = 0.0 ; if ( !model->HSMHV2_wrd23_Given ) model->HSMHV2_wrd23 = 0.0 ; if ( !model->HSMHV2_wrd24_Given ) model->HSMHV2_wrd24 = 0.0 ; if ( !model->HSMHV2_wrdict1_Given ) model->HSMHV2_wrdict1 = 0.0 ; if ( !model->HSMHV2_wrdov13_Given ) model->HSMHV2_wrdov13 = 0.0 ; if ( !model->HSMHV2_wrdslp1_Given ) model->HSMHV2_wrdslp1 = 0.0 ; if ( !model->HSMHV2_wrdvb_Given ) model->HSMHV2_wrdvb = 0.0 ; if ( !model->HSMHV2_wrdvd_Given ) model->HSMHV2_wrdvd = 0.0 ; if ( !model->HSMHV2_wrdvg11_Given ) model->HSMHV2_wrdvg11 = 0.0 ; if ( !model->HSMHV2_wrs_Given ) model->HSMHV2_wrs = 0.0 ; if ( !model->HSMHV2_wrth0_Given ) model->HSMHV2_wrth0 = 0.0 ; if ( !model->HSMHV2_wvover_Given ) model->HSMHV2_wvover = 0.0 ; if ( !model->HSMHV2_wjs0d_Given ) model->HSMHV2_wjs0d = model->HSMHV2_wjs0 ; if ( !model->HSMHV2_wjs0swd_Given ) model->HSMHV2_wjs0swd = model->HSMHV2_wjs0sw ; if ( !model->HSMHV2_wnjd_Given ) model->HSMHV2_wnjd = model->HSMHV2_wnj ; if ( !model->HSMHV2_wcisbkd_Given ) model->HSMHV2_wcisbkd = model->HSMHV2_wcisbk ; if ( !model->HSMHV2_wvdiffjd_Given ) model->HSMHV2_wvdiffjd = model->HSMHV2_wvdiffj ; if ( !model->HSMHV2_wjs0s_Given ) model->HSMHV2_wjs0s = model->HSMHV2_wjs0d ; if ( !model->HSMHV2_wjs0sws_Given ) model->HSMHV2_wjs0sws = model->HSMHV2_wjs0swd ; if ( !model->HSMHV2_wnjs_Given ) model->HSMHV2_wnjs = model->HSMHV2_wnjd ; if ( !model->HSMHV2_wcisbks_Given ) model->HSMHV2_wcisbks = model->HSMHV2_wcisbkd ; if ( !model->HSMHV2_wvdiffjs_Given ) model->HSMHV2_wvdiffjs = model->HSMHV2_wvdiffjd ; /* Cross-term dependence */ if ( !model->HSMHV2_pvmax_Given ) model->HSMHV2_pvmax = 0.0 ; if ( !model->HSMHV2_pbgtmp1_Given ) model->HSMHV2_pbgtmp1 = 0.0 ; if ( !model->HSMHV2_pbgtmp2_Given ) model->HSMHV2_pbgtmp2 = 0.0 ; if ( !model->HSMHV2_peg0_Given ) model->HSMHV2_peg0 = 0.0 ; if ( !model->HSMHV2_pvfbover_Given ) model->HSMHV2_pvfbover = 0.0 ; if ( !model->HSMHV2_pnover_Given ) model->HSMHV2_pnover = 0.0 ; if ( !model->HSMHV2_pnovers_Given ) model->HSMHV2_pnovers = 0.0 ; if ( !model->HSMHV2_pwl2_Given ) model->HSMHV2_pwl2 = 0.0 ; if ( !model->HSMHV2_pvfbc_Given ) model->HSMHV2_pvfbc = 0.0 ; if ( !model->HSMHV2_pnsubc_Given ) model->HSMHV2_pnsubc = 0.0 ; if ( !model->HSMHV2_pnsubp_Given ) model->HSMHV2_pnsubp = 0.0 ; if ( !model->HSMHV2_pscp1_Given ) model->HSMHV2_pscp1 = 0.0 ; if ( !model->HSMHV2_pscp2_Given ) model->HSMHV2_pscp2 = 0.0 ; if ( !model->HSMHV2_pscp3_Given ) model->HSMHV2_pscp3 = 0.0 ; if ( !model->HSMHV2_psc1_Given ) model->HSMHV2_psc1 = 0.0 ; if ( !model->HSMHV2_psc2_Given ) model->HSMHV2_psc2 = 0.0 ; if ( !model->HSMHV2_psc3_Given ) model->HSMHV2_psc3 = 0.0 ; if ( !model->HSMHV2_ppgd1_Given ) model->HSMHV2_ppgd1 = 0.0 ; if ( !model->HSMHV2_pndep_Given ) model->HSMHV2_pndep = 0.0 ; if ( !model->HSMHV2_pninv_Given ) model->HSMHV2_pninv = 0.0 ; if ( !model->HSMHV2_pmuecb0_Given ) model->HSMHV2_pmuecb0 = 0.0 ; if ( !model->HSMHV2_pmuecb1_Given ) model->HSMHV2_pmuecb1 = 0.0 ; if ( !model->HSMHV2_pmueph1_Given ) model->HSMHV2_pmueph1 = 0.0 ; if ( !model->HSMHV2_pvtmp_Given ) model->HSMHV2_pvtmp = 0.0 ; if ( !model->HSMHV2_pwvth0_Given ) model->HSMHV2_pwvth0 = 0.0 ; if ( !model->HSMHV2_pmuesr1_Given ) model->HSMHV2_pmuesr1 = 0.0 ; if ( !model->HSMHV2_pmuetmp_Given ) model->HSMHV2_pmuetmp = 0.0 ; if ( !model->HSMHV2_psub1_Given ) model->HSMHV2_psub1 = 0.0 ; if ( !model->HSMHV2_psub2_Given ) model->HSMHV2_psub2 = 0.0 ; if ( !model->HSMHV2_psvds_Given ) model->HSMHV2_psvds = 0.0 ; if ( !model->HSMHV2_psvbs_Given ) model->HSMHV2_psvbs = 0.0 ; if ( !model->HSMHV2_psvgs_Given ) model->HSMHV2_psvgs = 0.0 ; if ( !model->HSMHV2_pfn1_Given ) model->HSMHV2_pfn1 = 0.0 ; if ( !model->HSMHV2_pfn2_Given ) model->HSMHV2_pfn2 = 0.0 ; if ( !model->HSMHV2_pfn3_Given ) model->HSMHV2_pfn3 = 0.0 ; if ( !model->HSMHV2_pfvbs_Given ) model->HSMHV2_pfvbs = 0.0 ; if ( !model->HSMHV2_pnsti_Given ) model->HSMHV2_pnsti = 0.0 ; if ( !model->HSMHV2_pwsti_Given ) model->HSMHV2_pwsti = 0.0 ; if ( !model->HSMHV2_pscsti1_Given ) model->HSMHV2_pscsti1 = 0.0 ; if ( !model->HSMHV2_pscsti2_Given ) model->HSMHV2_pscsti2 = 0.0 ; if ( !model->HSMHV2_pvthsti_Given ) model->HSMHV2_pvthsti = 0.0 ; if ( !model->HSMHV2_pmuesti1_Given ) model->HSMHV2_pmuesti1 = 0.0 ; if ( !model->HSMHV2_pmuesti2_Given ) model->HSMHV2_pmuesti2 = 0.0 ; if ( !model->HSMHV2_pmuesti3_Given ) model->HSMHV2_pmuesti3 = 0.0 ; if ( !model->HSMHV2_pnsubpsti1_Given ) model->HSMHV2_pnsubpsti1 = 0.0 ; if ( !model->HSMHV2_pnsubpsti2_Given ) model->HSMHV2_pnsubpsti2 = 0.0 ; if ( !model->HSMHV2_pnsubpsti3_Given ) model->HSMHV2_pnsubpsti3 = 0.0 ; if ( !model->HSMHV2_pcgso_Given ) model->HSMHV2_pcgso = 0.0 ; if ( !model->HSMHV2_pcgdo_Given ) model->HSMHV2_pcgdo = 0.0 ; if ( !model->HSMHV2_pjs0_Given ) model->HSMHV2_pjs0 = 0.0 ; if ( !model->HSMHV2_pjs0sw_Given ) model->HSMHV2_pjs0sw = 0.0 ; if ( !model->HSMHV2_pnj_Given ) model->HSMHV2_pnj = 0.0 ; if ( !model->HSMHV2_pcisbk_Given ) model->HSMHV2_pcisbk = 0.0 ; if ( !model->HSMHV2_pclm1_Given ) model->HSMHV2_pclm1 = 0.0 ; if ( !model->HSMHV2_pclm2_Given ) model->HSMHV2_pclm2 = 0.0 ; if ( !model->HSMHV2_pclm3_Given ) model->HSMHV2_pclm3 = 0.0 ; if ( !model->HSMHV2_pwfc_Given ) model->HSMHV2_pwfc = 0.0 ; if ( !model->HSMHV2_pgidl1_Given ) model->HSMHV2_pgidl1 = 0.0 ; if ( !model->HSMHV2_pgidl2_Given ) model->HSMHV2_pgidl2 = 0.0 ; if ( !model->HSMHV2_pgleak1_Given ) model->HSMHV2_pgleak1 = 0.0 ; if ( !model->HSMHV2_pgleak2_Given ) model->HSMHV2_pgleak2 = 0.0 ; if ( !model->HSMHV2_pgleak3_Given ) model->HSMHV2_pgleak3 = 0.0 ; if ( !model->HSMHV2_pgleak6_Given ) model->HSMHV2_pgleak6 = 0.0 ; if ( !model->HSMHV2_pglksd1_Given ) model->HSMHV2_pglksd1 = 0.0 ; if ( !model->HSMHV2_pglksd2_Given ) model->HSMHV2_pglksd2 = 0.0 ; if ( !model->HSMHV2_pglkb1_Given ) model->HSMHV2_pglkb1 = 0.0 ; if ( !model->HSMHV2_pglkb2_Given ) model->HSMHV2_pglkb2 = 0.0 ; if ( !model->HSMHV2_pnftrp_Given ) model->HSMHV2_pnftrp = 0.0 ; if ( !model->HSMHV2_pnfalp_Given ) model->HSMHV2_pnfalp = 0.0 ; if ( !model->HSMHV2_pvdiffj_Given ) model->HSMHV2_pvdiffj = 0.0 ; if ( !model->HSMHV2_pibpc1_Given ) model->HSMHV2_pibpc1 = 0.0 ; if ( !model->HSMHV2_pibpc2_Given ) model->HSMHV2_pibpc2 = 0.0 ; if ( !model->HSMHV2_pcgbo_Given ) model->HSMHV2_pcgbo = 0.0 ; if ( !model->HSMHV2_pcvdsover_Given ) model->HSMHV2_pcvdsover = 0.0 ; if ( !model->HSMHV2_pfalph_Given ) model->HSMHV2_pfalph = 0.0 ; if ( !model->HSMHV2_pnpext_Given ) model->HSMHV2_pnpext = 0.0 ; if ( !model->HSMHV2_ppowrat_Given ) model->HSMHV2_ppowrat = 0.0 ; if ( !model->HSMHV2_prd_Given ) model->HSMHV2_prd = 0.0 ; if ( !model->HSMHV2_prd22_Given ) model->HSMHV2_prd22 = 0.0 ; if ( !model->HSMHV2_prd23_Given ) model->HSMHV2_prd23 = 0.0 ; if ( !model->HSMHV2_prd24_Given ) model->HSMHV2_prd24 = 0.0 ; if ( !model->HSMHV2_prdict1_Given ) model->HSMHV2_prdict1 = 0.0 ; if ( !model->HSMHV2_prdov13_Given ) model->HSMHV2_prdov13 = 0.0 ; if ( !model->HSMHV2_prdslp1_Given ) model->HSMHV2_prdslp1 = 0.0 ; if ( !model->HSMHV2_prdvb_Given ) model->HSMHV2_prdvb = 0.0 ; if ( !model->HSMHV2_prdvd_Given ) model->HSMHV2_prdvd = 0.0 ; if ( !model->HSMHV2_prdvg11_Given ) model->HSMHV2_prdvg11 = 0.0 ; if ( !model->HSMHV2_prs_Given ) model->HSMHV2_prs = 0.0 ; if ( !model->HSMHV2_prth0_Given ) model->HSMHV2_prth0 = 0.0 ; if ( !model->HSMHV2_pvover_Given ) model->HSMHV2_pvover = 0.0 ; if ( !model->HSMHV2_pjs0d_Given ) model->HSMHV2_pjs0d = model->HSMHV2_pjs0 ; if ( !model->HSMHV2_pjs0swd_Given ) model->HSMHV2_pjs0swd = model->HSMHV2_pjs0sw ; if ( !model->HSMHV2_pnjd_Given ) model->HSMHV2_pnjd = model->HSMHV2_pnj ; if ( !model->HSMHV2_pcisbkd_Given ) model->HSMHV2_pcisbkd = model->HSMHV2_pcisbk ; if ( !model->HSMHV2_pvdiffjd_Given ) model->HSMHV2_pvdiffjd = model->HSMHV2_pvdiffj ; if ( !model->HSMHV2_pjs0s_Given ) model->HSMHV2_pjs0s = model->HSMHV2_pjs0d ; if ( !model->HSMHV2_pjs0sws_Given ) model->HSMHV2_pjs0sws = model->HSMHV2_pjs0swd ; if ( !model->HSMHV2_pnjs_Given ) model->HSMHV2_pnjs = model->HSMHV2_pnjd ; if ( !model->HSMHV2_pcisbks_Given ) model->HSMHV2_pcisbks = model->HSMHV2_pcisbkd ; if ( !model->HSMHV2_pvdiffjs_Given ) model->HSMHV2_pvdiffjs = model->HSMHV2_pvdiffjd ; if ( model->HSMHV2_ldrift_Given ) model->HSMHV2_ldrift2 = model->HSMHV2_ldrift ; if (!model->HSMHV2vgsMaxGiven) model->HSMHV2vgsMax = 1e99; if (!model->HSMHV2vgdMaxGiven) model->HSMHV2vgdMax = 1e99; if (!model->HSMHV2vgbMaxGiven) model->HSMHV2vgbMax = 1e99; if (!model->HSMHV2vdsMaxGiven) model->HSMHV2vdsMax = 1e99; if (!model->HSMHV2vbsMaxGiven) model->HSMHV2vbsMax = 1e99; if (!model->HSMHV2vbdMaxGiven) model->HSMHV2vbdMax = 1e99; if (!model->HSMHV2vgsrMaxGiven) model->HSMHV2vgsrMax = 1e99; if (!model->HSMHV2vgdrMaxGiven) model->HSMHV2vgdrMax = 1e99; if (!model->HSMHV2vgbrMaxGiven) model->HSMHV2vgbrMax = 1e99; if (!model->HSMHV2vbsrMaxGiven) model->HSMHV2vbsrMax = 1e99; if (!model->HSMHV2vbdrMaxGiven) model->HSMHV2vbdrMax = 1e99; /* For Symmetrical Device */ if ( model->HSMHV2_cosym ) { if(!model->HSMHV2_rs_Given ) { model->HSMHV2_rs = model->HSMHV2_rd ; } if(!model->HSMHV2_coovlps_Given ) { model->HSMHV2_coovlps = model->HSMHV2_coovlp ; } if(!model->HSMHV2_novers_Given ) { model->HSMHV2_novers = model->HSMHV2_nover ; } /* if(!model->HSMHV2_xld_Given ) */ /* { model->HSMHV2_xld = model->HSMHV2_xldld ; } */ if(!model->HSMHV2_lover_Given ) { model->HSMHV2_lover = model->HSMHV2_loverld ; } // if(!model->HSMHV2_lovers_Given ) // { model->HSMHV2_lovers = model->HSMHV2_loverld ; } if(!model->HSMHV2_ldrift1s_Given ) { model->HSMHV2_ldrift1s = model->HSMHV2_ldrift1 ; } if(!model->HSMHV2_ldrift2s_Given ) { model->HSMHV2_ldrift2s = model->HSMHV2_ldrift2 ; } if(!model->HSMHV2_cgso_Given ) { model->HSMHV2_cgso = model->HSMHV2_cgdo ; model->HSMHV2_cgso_Given = model->HSMHV2_cgdo_Given ; } } if ( !model->HSMHV2_lovers_Given ) model->HSMHV2_lovers = model->HSMHV2_lover ; if ( model->HSMHV2_cvbk_Given ) { fprintf(stderr,"warning(HiSIM_HV(%s)): CVBK has been inactivated by CVB.\n",model->HSMHV2modName); } if ( model->HSMHV2_cordrift ) { model->HSMHV2_corsrd = 0 ; } modelMKS = &model->modelMKS ; /* loop through all the instances of the model */ for ( here = HSMHV2instances(model);here != NULL ; here = HSMHV2nextInstance(here)) { /* allocate a chunk of the state vector */ here->HSMHV2states = *states; if (model->HSMHV2_conqs) *states += HSMHV2numStatesNqs; else *states += HSMHV2numStates; hereMKS = &here->hereMKS ; /* perform the device parameter defaulting */ if ( !here->HSMHV2_coselfheat_Given ) here->HSMHV2_coselfheat = model->HSMHV2_coselfheat ; if ( !here->HSMHV2_cosubnode_Given ) here->HSMHV2_cosubnode = model->HSMHV2_cosubnode ; if ( !here->HSMHV2_l_Given ) here->HSMHV2_l = 2.0e-6 ; if ( !here->HSMHV2_w_Given ) here->HSMHV2_w = 5.0e-6 ; if ( !here->HSMHV2_ad_Given ) here->HSMHV2_ad = 0.0 ; if ( !here->HSMHV2_as_Given ) here->HSMHV2_as = 0.0 ; if ( !here->HSMHV2_pd_Given ) here->HSMHV2_pd = 0.0 ; if ( !here->HSMHV2_ps_Given ) here->HSMHV2_ps = 0.0 ; if ( !here->HSMHV2_nrd_Given ) here->HSMHV2_nrd = 1.0 ; if ( !here->HSMHV2_nrs_Given ) here->HSMHV2_nrs = 1.0 ; if ( !here->HSMHV2_ngcon_Given ) here->HSMHV2_ngcon = 1.0 ; if ( !here->HSMHV2_xgw_Given ) here->HSMHV2_xgw = 0e0 ; if ( !here->HSMHV2_xgl_Given ) here->HSMHV2_xgl = 0e0 ; if ( !here->HSMHV2_nf_Given ) here->HSMHV2_nf = 1.0 ; if ( !here->HSMHV2_sa_Given ) here->HSMHV2_sa = 0 ; if ( !here->HSMHV2_sb_Given ) here->HSMHV2_sb = 0 ; if ( !here->HSMHV2_sd_Given ) here->HSMHV2_sd = 0 ; if ( !here->HSMHV2_dtemp_Given ) here->HSMHV2_dtemp = 0.0 ; if ( !here->HSMHV2_icVBS_Given ) here->HSMHV2_icVBS = 0.0; if ( !here->HSMHV2_icVDS_Given ) here->HSMHV2_icVDS = 0.0; if ( !here->HSMHV2_icVGS_Given ) here->HSMHV2_icVGS = 0.0; if ( !here->HSMHV2_corbnet_Given ) here->HSMHV2_corbnet = model->HSMHV2_corbnet ; else if ( here->HSMHV2_corbnet != 0 && here->HSMHV2_corbnet != 1 ) { here->HSMHV2_corbnet = model->HSMHV2_corbnet ; printf("warning(HiSIM_HV(%s)): CORBNET has been set to its default value: %d.\n", model->HSMHV2modName,here->HSMHV2_corbnet); } if ( !here->HSMHV2_rbdb_Given) here->HSMHV2_rbdb = model->HSMHV2_rbdb; /* not used in this version */ if ( !here->HSMHV2_rbsb_Given) here->HSMHV2_rbsb = model->HSMHV2_rbsb; /* not used in this version */ if ( !here->HSMHV2_rbpb_Given) here->HSMHV2_rbpb = model->HSMHV2_rbpb; if ( !here->HSMHV2_rbps_Given) here->HSMHV2_rbps = model->HSMHV2_rbps; if ( !here->HSMHV2_rbpd_Given) here->HSMHV2_rbpd = model->HSMHV2_rbpd; if ( !here->HSMHV2_corg_Given ) here->HSMHV2_corg = model->HSMHV2_corg ; else if ( here->HSMHV2_corg != 0 && here->HSMHV2_corg != 1 ) { here->HSMHV2_corg = model->HSMHV2_corg ; printf("warning(HiSIM_HV(%s)): CORG has been set to its default value: %d.\n", model->HSMHV2modName,here->HSMHV2_corg); } if ( !here->HSMHV2_m_Given ) here->HSMHV2_m = 1.0 ; if ( here->HSMHV2_subld1_Given ) { printf("warning(HiSIM_HV(%s)): SUBLD1 has been inactived in instance param.\n",model->HSMHV2modName); } if ( here->HSMHV2_subld2_Given ) { printf("warning(HiSIM_HV(%s)): SUBLD2 has been inactived in instance param.\n",model->HSMHV2modName); } if ( !here->HSMHV2_lovers_Given ) here->HSMHV2_lovers = model->HSMHV2_lovers ; if ( !here->HSMHV2_lover_Given ) here->HSMHV2_lover = model->HSMHV2_lover ; if ( !here->HSMHV2_loverld_Given ) here->HSMHV2_loverld = model->HSMHV2_loverld ; if ( !here->HSMHV2_ldrift1_Given ) here->HSMHV2_ldrift1 = model->HSMHV2_ldrift1 ; if ( !here->HSMHV2_ldrift2_Given ) here->HSMHV2_ldrift2 = model->HSMHV2_ldrift2 ; if ( !here->HSMHV2_ldrift1s_Given ) here->HSMHV2_ldrift1s = model->HSMHV2_ldrift1s ; if ( !here->HSMHV2_ldrift2s_Given ) here->HSMHV2_ldrift2s = model->HSMHV2_ldrift2s ; if ( model->HSMHV2_cosym ) { // here->HSMHV2_lover = here->HSMHV2_lovers ; if ( !here->HSMHV2_lover_Given && !model->HSMHV2_lover_Given ) here->HSMHV2_lover = here->HSMHV2_loverld ; if ( !here->HSMHV2_lovers_Given && !model->HSMHV2_lovers_Given ) here->HSMHV2_lovers = here->HSMHV2_lover ; if ( !here->HSMHV2_ldrift1s_Given && !model->HSMHV2_ldrift1s_Given ) here->HSMHV2_ldrift1s = here->HSMHV2_ldrift1 ; if ( !here->HSMHV2_ldrift2s_Given && !model->HSMHV2_ldrift2s_Given ) here->HSMHV2_ldrift2s = here->HSMHV2_ldrift2 ; } /* process drain series resistance */ /* rough check if Rd != 0 * **** don't forget to change if Rd processing is changed *******/ T2 = ( here->HSMHV2_ldrift1 * model->HSMHV2_rdslp1 * C_m2um + model->HSMHV2_rdict1 ) * ( here->HSMHV2_ldrift2 * model->HSMHV2_rdslp2 * C_m2um + model->HSMHV2_rdict2 ) ; Rd = model->HSMHV2_rsh * here->HSMHV2_nrd * here->HSMHV2_nf + (model->HSMHV2_rd + model->HSMHV2_rdvd) * T2 ; if ( ( ( ( model->HSMHV2_corsrd == 1 || model->HSMHV2_corsrd == 3 ) && Rd > 0.0 ) || model->HSMHV2_cordrift == 1 ) ) { if( here->HSMHV2dNodePrime <= 0) { error = CKTmkVolt(ckt, &tmp, here->HSMHV2name, "drain"); if (error) return(error); here->HSMHV2dNodePrime = tmp->number; } } else { here->HSMHV2dNodePrime = here->HSMHV2dNode; } here->HSMHV2drainConductance = 0.0 ; /* initialized for hsmhvnoi.c */ /* process source series resistance */ /* rough check if Rs != 0 * ***** don't forget to change if Rs processing is changed *******/ if(model->HSMHV2_corsrd == 1 || model->HSMHV2_corsrd == 3) { T2 = ( here->HSMHV2_ldrift1s * model->HSMHV2_rdslp1 * C_m2um + model->HSMHV2_rdict1 ) * ( here->HSMHV2_ldrift2s * model->HSMHV2_rdslp2 * C_m2um + model->HSMHV2_rdict2 ) ; }else{ T2 = 0.0; } Rs = model->HSMHV2_rsh * here->HSMHV2_nrs * here->HSMHV2_nf + model->HSMHV2_rs * T2 ; if ( (model->HSMHV2_corsrd == 1 || model->HSMHV2_corsrd == 3 || model->HSMHV2_cordrift == 1) && Rs > 0.0 ) { if( here->HSMHV2sNodePrime == 0) { error = CKTmkVolt(ckt, &tmp, here->HSMHV2name, "source"); if (error) return(error); here->HSMHV2sNodePrime = tmp->number; } } else { here->HSMHV2sNodePrime = here->HSMHV2sNode; } here->HSMHV2sourceConductance = 0.0 ; /* initialized for hsmhvnoi.c */ /* process gate resistance */ if ( (here->HSMHV2_corg == 1 && model->HSMHV2_rshg > 0.0) ) { if (here->HSMHV2gNodePrime == 0) { error = CKTmkVolt(ckt, &tmp, here->HSMHV2name, "gate"); if (error) return(error); here->HSMHV2gNodePrime = tmp->number; } } else { here->HSMHV2gNodePrime = here->HSMHV2gNode; } /* internal body nodes for body resistance model */ if ( here->HSMHV2_corbnet == 1 ) { if (here->HSMHV2dbNode == 0) { error = CKTmkVolt(ckt, &tmp, here->HSMHV2name, "dbody"); if (error) return(error); here->HSMHV2dbNode = tmp->number; } if (here->HSMHV2bNodePrime == 0) { error = CKTmkVolt(ckt, &tmp,here->HSMHV2name, "body"); if (error) return(error); here->HSMHV2bNodePrime = tmp->number; } if (here->HSMHV2sbNode == 0) { error = CKTmkVolt(ckt, &tmp, here->HSMHV2name,"sbody"); if (error) return(error); here->HSMHV2sbNode = tmp->number; } } else { here->HSMHV2dbNode = here->HSMHV2bNodePrime = here->HSMHV2sbNode = here->HSMHV2bNode; } here->HSMHV2tempNode = here->HSMHV2tempNodeExt; here->HSMHV2subNode = here->HSMHV2subNodeExt; if ( here->HSMHV2_cosubnode == 0 && here->HSMHV2subNode >= 0 ) { if ( here->HSMHV2tempNode >= 0 ) { /* FATAL Error when 6th node is defined and COSUBNODE=0 */ IFuid namarr[2]; namarr[0] = here->HSMHV2name; namarr[1] = model->HSMHV2modName; (*(SPfrontEnd->IFerror)) ( ERR_FATAL, "HiSIM_HV: MOSFET(%s) MODEL(%s): 6th node is defined and COSUBNODE=0", namarr ); return (E_BADPARM); } else { /* 5th node is switched to tempNode, if COSUBNODE=0 and 5 external nodes are assigned. */ here->HSMHV2tempNode = here->HSMHV2subNode ; here->HSMHV2subNode = -1 ; } } /* self heating*/ if ( here->HSMHV2_coselfheat > 0 && here->HSMHV2tempNode <= 0 ){ error = CKTmkVolt(ckt, &tmp, here->HSMHV2name,"temp"); if(error) return(error); here->HSMHV2tempNode = tmp->number; } if ( here->HSMHV2_coselfheat <= 0 ) here->HSMHV2tempNode = -1; /* flat handling of NQS */ if ( model->HSMHV2_conqs ){ error = CKTmkVolt(ckt, &tmp, here->HSMHV2name,"qi_nqs"); if(error) return(error); here->HSMHV2qiNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->HSMHV2name,"qb_nqs"); if(error) return(error); here->HSMHV2qbNode = tmp->number; } /* set Sparse Matrix Pointers */ /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(HSMHV2DPbpPtr, HSMHV2dNodePrime, HSMHV2bNodePrime); TSTALLOC(HSMHV2SPbpPtr, HSMHV2sNodePrime, HSMHV2bNodePrime); TSTALLOC(HSMHV2GPbpPtr, HSMHV2gNodePrime, HSMHV2bNodePrime); TSTALLOC(HSMHV2BPdPtr, HSMHV2bNodePrime, HSMHV2dNode); TSTALLOC(HSMHV2BPsPtr, HSMHV2bNodePrime, HSMHV2sNode); TSTALLOC(HSMHV2BPdpPtr, HSMHV2bNodePrime, HSMHV2dNodePrime); TSTALLOC(HSMHV2BPspPtr, HSMHV2bNodePrime, HSMHV2sNodePrime); TSTALLOC(HSMHV2BPgpPtr, HSMHV2bNodePrime, HSMHV2gNodePrime); TSTALLOC(HSMHV2BPbpPtr, HSMHV2bNodePrime, HSMHV2bNodePrime); TSTALLOC(HSMHV2DdPtr, HSMHV2dNode, HSMHV2dNode); TSTALLOC(HSMHV2GPgpPtr, HSMHV2gNodePrime, HSMHV2gNodePrime); TSTALLOC(HSMHV2SsPtr, HSMHV2sNode, HSMHV2sNode); TSTALLOC(HSMHV2DPdpPtr, HSMHV2dNodePrime, HSMHV2dNodePrime); TSTALLOC(HSMHV2SPspPtr, HSMHV2sNodePrime, HSMHV2sNodePrime); TSTALLOC(HSMHV2DdpPtr, HSMHV2dNode, HSMHV2dNodePrime); TSTALLOC(HSMHV2GPdpPtr, HSMHV2gNodePrime, HSMHV2dNodePrime); TSTALLOC(HSMHV2GPspPtr, HSMHV2gNodePrime, HSMHV2sNodePrime); TSTALLOC(HSMHV2SspPtr, HSMHV2sNode, HSMHV2sNodePrime); TSTALLOC(HSMHV2DPspPtr, HSMHV2dNodePrime, HSMHV2sNodePrime); TSTALLOC(HSMHV2DPdPtr, HSMHV2dNodePrime, HSMHV2dNode); TSTALLOC(HSMHV2DPgpPtr, HSMHV2dNodePrime, HSMHV2gNodePrime); TSTALLOC(HSMHV2SPgpPtr, HSMHV2sNodePrime, HSMHV2gNodePrime); TSTALLOC(HSMHV2SPsPtr, HSMHV2sNodePrime, HSMHV2sNode); TSTALLOC(HSMHV2SPdpPtr, HSMHV2sNodePrime, HSMHV2dNodePrime); TSTALLOC(HSMHV2GgPtr, HSMHV2gNode, HSMHV2gNode); TSTALLOC(HSMHV2GgpPtr, HSMHV2gNode, HSMHV2gNodePrime); TSTALLOC(HSMHV2GPgPtr, HSMHV2gNodePrime, HSMHV2gNode); /* TSTALLOC(HSMHV2GdpPtr, HSMHV2gNode, HSMHV2dNodePrime); not used */ /* TSTALLOC(HSMHV2GspPtr, HSMHV2gNode, HSMHV2sNodePrime); not used */ /* TSTALLOC(HSMHV2GbpPtr, HSMHV2gNode, HSMHV2bNodePrime); not used */ TSTALLOC(HSMHV2DdbPtr, HSMHV2dNode, HSMHV2dbNode); TSTALLOC(HSMHV2SsbPtr, HSMHV2sNode, HSMHV2sbNode); TSTALLOC(HSMHV2DBdPtr, HSMHV2dbNode, HSMHV2dNode); TSTALLOC(HSMHV2DBdbPtr, HSMHV2dbNode, HSMHV2dbNode); TSTALLOC(HSMHV2DBbpPtr, HSMHV2dbNode, HSMHV2bNodePrime); /* TSTALLOC(HSMHV2DBbPtr, HSMHV2dbNode, HSMHV2bNode); not used */ TSTALLOC(HSMHV2BPdbPtr, HSMHV2bNodePrime, HSMHV2dbNode); TSTALLOC(HSMHV2BPbPtr, HSMHV2bNodePrime, HSMHV2bNode); TSTALLOC(HSMHV2BPsbPtr, HSMHV2bNodePrime, HSMHV2sbNode); TSTALLOC(HSMHV2SBsPtr, HSMHV2sbNode, HSMHV2sNode); TSTALLOC(HSMHV2SBbpPtr, HSMHV2sbNode, HSMHV2bNodePrime); /* TSTALLOC(HSMHV2SBbPtr, HSMHV2sbNode, HSMHV2bNode); not used */ TSTALLOC(HSMHV2SBsbPtr, HSMHV2sbNode, HSMHV2sbNode); /* TSTALLOC(HSMHV2BdbPtr, HSMHV2bNode, HSMHV2dbNode); not used */ TSTALLOC(HSMHV2BbpPtr, HSMHV2bNode, HSMHV2bNodePrime); /* TSTALLOC(HSMHV2BsbPtr, HSMHV2bNode, HSMHV2sbNode); not used */ TSTALLOC(HSMHV2BbPtr, HSMHV2bNode, HSMHV2bNode); TSTALLOC(HSMHV2DgpPtr, HSMHV2dNode, HSMHV2gNodePrime); TSTALLOC(HSMHV2DsPtr, HSMHV2dNode, HSMHV2sNode); TSTALLOC(HSMHV2DbpPtr, HSMHV2dNode, HSMHV2bNodePrime); TSTALLOC(HSMHV2DspPtr, HSMHV2dNode, HSMHV2sNodePrime); TSTALLOC(HSMHV2DPsPtr, HSMHV2dNodePrime, HSMHV2sNode); TSTALLOC(HSMHV2SgpPtr, HSMHV2sNode, HSMHV2gNodePrime); TSTALLOC(HSMHV2SdPtr, HSMHV2sNode, HSMHV2dNode); TSTALLOC(HSMHV2SbpPtr, HSMHV2sNode, HSMHV2bNodePrime); TSTALLOC(HSMHV2SdpPtr, HSMHV2sNode, HSMHV2dNodePrime); TSTALLOC(HSMHV2SPdPtr, HSMHV2sNodePrime, HSMHV2dNode); TSTALLOC(HSMHV2GPdPtr, HSMHV2gNodePrime, HSMHV2dNode); TSTALLOC(HSMHV2GPsPtr, HSMHV2gNodePrime, HSMHV2sNode); if ( here->HSMHV2subNode > 0 ) { /* 5th substrate node */ TSTALLOC(HSMHV2DsubPtr, HSMHV2dNode, HSMHV2subNode); TSTALLOC(HSMHV2DPsubPtr, HSMHV2dNodePrime, HSMHV2subNode); TSTALLOC(HSMHV2SsubPtr, HSMHV2sNode, HSMHV2subNode); TSTALLOC(HSMHV2SPsubPtr, HSMHV2sNodePrime, HSMHV2subNode); } if ( here->HSMHV2tempNode > 0 ) { /* self heating */ TSTALLOC(HSMHV2TemptempPtr, HSMHV2tempNode, HSMHV2tempNode); TSTALLOC(HSMHV2TempdPtr, HSMHV2tempNode, HSMHV2dNode); TSTALLOC(HSMHV2TempdpPtr, HSMHV2tempNode, HSMHV2dNodePrime); TSTALLOC(HSMHV2TempsPtr, HSMHV2tempNode, HSMHV2sNode); TSTALLOC(HSMHV2TempspPtr, HSMHV2tempNode, HSMHV2sNodePrime); TSTALLOC(HSMHV2DPtempPtr, HSMHV2dNodePrime, HSMHV2tempNode); TSTALLOC(HSMHV2SPtempPtr, HSMHV2sNodePrime, HSMHV2tempNode); TSTALLOC(HSMHV2TempgpPtr, HSMHV2tempNode, HSMHV2gNodePrime); TSTALLOC(HSMHV2TempbpPtr, HSMHV2tempNode, HSMHV2bNodePrime); TSTALLOC(HSMHV2GPtempPtr, HSMHV2gNodePrime, HSMHV2tempNode); TSTALLOC(HSMHV2BPtempPtr, HSMHV2bNodePrime, HSMHV2tempNode); TSTALLOC(HSMHV2DBtempPtr, HSMHV2dbNode, HSMHV2tempNode); TSTALLOC(HSMHV2SBtempPtr, HSMHV2sbNode, HSMHV2tempNode); TSTALLOC(HSMHV2DtempPtr, HSMHV2dNode, HSMHV2tempNode); TSTALLOC(HSMHV2StempPtr, HSMHV2sNode, HSMHV2tempNode); } if ( model->HSMHV2_conqs ) { /* flat handling of NQS */ TSTALLOC(HSMHV2DPqiPtr, HSMHV2dNodePrime, HSMHV2qiNode); TSTALLOC(HSMHV2GPqiPtr, HSMHV2gNodePrime, HSMHV2qiNode); TSTALLOC(HSMHV2GPqbPtr, HSMHV2gNodePrime, HSMHV2qbNode); TSTALLOC(HSMHV2SPqiPtr, HSMHV2sNodePrime, HSMHV2qiNode); TSTALLOC(HSMHV2BPqbPtr, HSMHV2bNodePrime, HSMHV2qbNode); TSTALLOC(HSMHV2QIdpPtr, HSMHV2qiNode, HSMHV2dNodePrime); TSTALLOC(HSMHV2QIgpPtr, HSMHV2qiNode, HSMHV2gNodePrime); TSTALLOC(HSMHV2QIspPtr, HSMHV2qiNode, HSMHV2sNodePrime); TSTALLOC(HSMHV2QIbpPtr, HSMHV2qiNode, HSMHV2bNodePrime); TSTALLOC(HSMHV2QIqiPtr, HSMHV2qiNode, HSMHV2qiNode); TSTALLOC(HSMHV2QBdpPtr, HSMHV2qbNode, HSMHV2dNodePrime); TSTALLOC(HSMHV2QBgpPtr, HSMHV2qbNode, HSMHV2gNodePrime); TSTALLOC(HSMHV2QBspPtr, HSMHV2qbNode, HSMHV2sNodePrime); TSTALLOC(HSMHV2QBbpPtr, HSMHV2qbNode, HSMHV2bNodePrime); TSTALLOC(HSMHV2QBqbPtr, HSMHV2qbNode, HSMHV2qbNode); if ( here->HSMHV2tempNode > 0 ) { /* self heating */ TSTALLOC(HSMHV2QItempPtr, HSMHV2qiNode, HSMHV2tempNode); TSTALLOC(HSMHV2QBtempPtr, HSMHV2qbNode, HSMHV2tempNode); } } /*-----------------------------------------------------------* * Range check of instance parameters *-----------------*/ RANGECHECK(here->HSMHV2_l, model->HSMHV2_lmin, model->HSMHV2_lmax, "L") ; RANGECHECK(here->HSMHV2_w/here->HSMHV2_nf, model->HSMHV2_wmin, model->HSMHV2_wmax, "W/NF") ; /* binning calculation */ pParam = &here->pParam ; Lgate = here->HSMHV2_l + model->HSMHV2_xl ; Wgate = here->HSMHV2_w / here->HSMHV2_nf + model->HSMHV2_xw ; LG = Lgate * C_m2um ; WG = Wgate * C_m2um ; Lbin = pow(LG, model->HSMHV2_lbinn) ; Wbin = pow(WG, model->HSMHV2_wbinn) ; LWbin = Lbin * Wbin ; BINNING(vmax); BINNING(js0d); BINNING(js0swd); BINNING(njd); BINNING(cisbkd); BINNING(vdiffjd); BINNING(js0s); BINNING(js0sws); BINNING(njs); BINNING(cisbks); BINNING(vdiffjs); BINNING(bgtmp1); BINNING(bgtmp2); BINNING(eg0); BINNING(vfbover); BINNING(nover); BINNING(novers); BINNING(wl2); BINNING(vfbc); BINNING(nsubc); BINNING(nsubp); BINNING(scp1); BINNING(scp2); BINNING(scp3); BINNING(sc1); BINNING(sc2); BINNING(sc3); BINNING(pgd1); BINNING(ndep); BINNING(ninv); BINNING(muecb0); BINNING(muecb1); BINNING(mueph1); BINNING(vtmp); BINNING(wvth0); BINNING(muesr1); BINNING(muetmp); BINNING(sub1); BINNING(sub2); BINNING(svds); BINNING(svbs); BINNING(svgs); BINNING(fn1); BINNING(fn2); BINNING(fn3); BINNING(fvbs); BINNING(nsti); BINNING(wsti); BINNING(scsti1); BINNING(scsti2); BINNING(vthsti); BINNING(muesti1); BINNING(muesti2); BINNING(muesti3); BINNING(nsubpsti1); BINNING(nsubpsti2); BINNING(nsubpsti3); BINNING(cgso); BINNING(cgdo); BINNING(clm1); BINNING(clm2); BINNING(clm3); BINNING(wfc); BINNING(gidl1); BINNING(gidl2); BINNING(gleak1); BINNING(gleak2); BINNING(gleak3); BINNING(gleak6); BINNING(glksd1); BINNING(glksd2); BINNING(glkb1); BINNING(glkb2); BINNING(nftrp); BINNING(nfalp); BINNING(ibpc1); BINNING(ibpc2); BINNING(cgbo); BINNING(cvdsover); BINNING(falph); BINNING(npext); BINNING(powrat); BINNING(rd); BINNING(rd22); BINNING(rd23); BINNING(rd24); BINNING(rdict1); BINNING(rdov13); BINNING(rdslp1); BINNING(rdvb); BINNING(rdvd); BINNING(rdvg11); BINNING(rs); BINNING(rth0); BINNING(vover); /*-----------------------------------------------------------* * Range check of model parameters *-----------------*/ RANGECHECK(pParam->HSMHV2_vmax, 1.0e6, 20.0e6, "VMAX") ; RANGECHECK(pParam->HSMHV2_bgtmp1, 50.0e-6, 1.0e-3, "BGTMP1") ; RANGECHECK(pParam->HSMHV2_bgtmp2, -1.0e-6, 1.0e-6, "BGTMP2") ; RANGECHECK(pParam->HSMHV2_eg0, 1.0, 1.3, "EG0") ; RANGECHECK(pParam->HSMHV2_vfbover, -1.2, 1.0, "VFBOVER") ; if( model->HSMHV2_codep == 0 ) { RANGECHECK(pParam->HSMHV2_vfbc, -1.2, 0.0, "VFBC") ; } else { RANGECHECK(pParam->HSMHV2_vfbc, -1.2, 0.8, "VFBC") ; } RANGECHECK(pParam->HSMHV2_nsubc, 1.0e16, 1.0e19, "NSUBC") ; RANGECHECK(pParam->HSMHV2_nsubp, 1.0e16, 1.0e19, "NSUBP") ; RANGECHECK(pParam->HSMHV2_scp1, 0.0, 10.0, "SCP1") ; RANGECHECK(pParam->HSMHV2_scp2, 0.0, 1.0, "SCP2") ; RANGECHECK(pParam->HSMHV2_scp3, 0.0, 200e-9, "SCP3") ; RANGECHECK(pParam->HSMHV2_sc1, 0.0, 10.0, "SC1") ; RANGECHECK(pParam->HSMHV2_sc2, 0.0, 1.0, "SC2") ; RANGECHECK(pParam->HSMHV2_sc3, 0.0, 20e-6, "SC3") ; RANGECHECK(pParam->HSMHV2_pgd1, 0.0, 30.0e-3, "PGD1") ; RANGECHECK(pParam->HSMHV2_ndep, 0.0, 1.0, "NDEP") ; RANGECHECK(pParam->HSMHV2_ninv, 0.0, 1.0, "NINV") ; RANGECHECK(pParam->HSMHV2_muecb0, 100.0, 100.0e3, "MUECB0") ; RANGECHECK(pParam->HSMHV2_muecb1, 5.0, 10.0e3, "MUECB1") ; RANGECHECK(pParam->HSMHV2_mueph1, 2.0e3, 30.0e3, "MUEPH1") ; RANGECHECK(pParam->HSMHV2_vtmp, -2.0, 1.0, "VTMP") ; RANGECHECK(pParam->HSMHV2_muesr1, 1.0e14, 1.0e16, "MUESR1") ; RANGECHECK(pParam->HSMHV2_muetmp, 0.5, 2.5, "MUETMP") ; RANGECHECK(pParam->HSMHV2_clm1, 0.01, 1.0, "CLM1") ; RANGECHECK(pParam->HSMHV2_clm2, 1.0, 4.0, "CLM2") ; RANGECHECK(pParam->HSMHV2_clm3, 0.5, 5.0, "CLM3") ; RANGECHECK(pParam->HSMHV2_wfc, -5.0e-15, 1.0e-6, "WFC") ; RANGECHECK(pParam->HSMHV2_cgso, 0.0, 100e-9 * C_VAC*model->HSMHV2_kappa/model->HSMHV2_tox, "CGSO") ; RANGECHECK(pParam->HSMHV2_cgdo, 0.0, 100e-9 * C_VAC*model->HSMHV2_kappa/model->HSMHV2_tox, "CGDO") ; RANGECHECK(pParam->HSMHV2_ibpc1, 0.0, 1.0e12, "IBPC1") ; RANGECHECK(pParam->HSMHV2_ibpc2, 0.0, 1.0e12, "IBPC2") ; RANGECHECK(pParam->HSMHV2_cvdsover, 0.0, 1.0, "CVDSOVER") ; RANGECHECK(pParam->HSMHV2_nsti, 1.0e16, 1.0e19, "NSTI") ; MINCHECK( pParam->HSMHV2_cgbo, 0.0, "CGBO") ; RANGECHECK(pParam->HSMHV2_npext, 1.0e16, 1.0e18, "NPEXT") ; RANGECHECK(pParam->HSMHV2_rd, 0.0, 100.0e-3, "RD") ; RANGECHECK(pParam->HSMHV2_rd22, -5.0, 0.0, "RD22") ; RANGECHECK(pParam->HSMHV2_rd23, 0.0, 2.0, "RD23") ; RANGECHECK(pParam->HSMHV2_rd24, 0.0, 0.1, "RD24") ; RANGECHECK(pParam->HSMHV2_rdict1, -10.0, 10.0, "RDICT1") ; RANGECHECK(pParam->HSMHV2_rdov13, 0.0, 1.0, "RDOV13") ; RANGECHECK(pParam->HSMHV2_rdslp1, -10.0, 10.0, "RDSLP1") ; RANGECHECK(pParam->HSMHV2_rdvb, 0.0, 2.0, "RDVB") ; RANGECHECK(pParam->HSMHV2_rdvd, 0.0, 2.0, "RDVD") ; MINCHECK( pParam->HSMHV2_rdvg11, 0.0, "RDVG11") ; RANGECHECK(pParam->HSMHV2_rs, 0.0, 10.0e-3, "RS") ; RANGECHECK(pParam->HSMHV2_rth0, 0.0, 10.0, "RTH0") ; RANGECHECK(pParam->HSMHV2_vover, 0.0, 4.0, "VOVER") ; if ( model->HSMHV2_xpdv * model->HSMHV2_xldld > 1 ) { here->HSMHV2_xpdv = 1/model->HSMHV2_xldld ; }else { here->HSMHV2_xpdv = model->HSMHV2_xpdv; } here->HSMHV2_cordrift = model->HSMHV2_cordrift ; if ( model->HSMHV2_cordrift && pParam->HSMHV2_nover == 0.0 ) { fprintf(stderr,"warning(HiSIM_HV(%s)): CORDRIFT has been inactivated when NOVER = 0.0.\n",model->HSMHV2modName); here->HSMHV2_cordrift = 0 ; } /*-----------------------------------------------------------* * Change unit into MKS for instance parameters. *-----------------*/ hereMKS->HSMHV2_nsubcdfm = here->HSMHV2_nsubcdfm / C_cm2m_p3 ; hereMKS->HSMHV2_subld2 = here->HSMHV2_subld2 * C_m2cm ; pParam->HSMHV2_nsubc = pParam->HSMHV2_nsubc / C_cm2m_p3 ; pParam->HSMHV2_nsubp = pParam->HSMHV2_nsubp / C_cm2m_p3 ; pParam->HSMHV2_nsti = pParam->HSMHV2_nsti / C_cm2m_p3 ; pParam->HSMHV2_nover = pParam->HSMHV2_nover / C_cm2m_p3 ; pParam->HSMHV2_novers = pParam->HSMHV2_novers / C_cm2m_p3 ; pParam->HSMHV2_nsubpsti1 = pParam->HSMHV2_nsubpsti1 / C_m2cm ; pParam->HSMHV2_muesti1 = pParam->HSMHV2_muesti1 / C_m2cm ; pParam->HSMHV2_ndep = pParam->HSMHV2_ndep / C_m2cm ; pParam->HSMHV2_ninv = pParam->HSMHV2_ninv / C_m2cm ; pParam->HSMHV2_vmax = pParam->HSMHV2_vmax / C_m2cm ; pParam->HSMHV2_wfc = pParam->HSMHV2_wfc * C_m2cm_p2 ; pParam->HSMHV2_glksd1 = pParam->HSMHV2_glksd1 / C_m2cm ; pParam->HSMHV2_glksd2 = pParam->HSMHV2_glksd2 * C_m2cm ; pParam->HSMHV2_gleak2 = pParam->HSMHV2_gleak2 * C_m2cm ; pParam->HSMHV2_glkb2 = pParam->HSMHV2_glkb2 * C_m2cm ; pParam->HSMHV2_fn2 = pParam->HSMHV2_fn2 * C_m2cm ; pParam->HSMHV2_gidl1 = pParam->HSMHV2_gidl1 / C_m2cm_p1o2 ; pParam->HSMHV2_gidl2 = pParam->HSMHV2_gidl2 * C_m2cm ; pParam->HSMHV2_nfalp = pParam->HSMHV2_nfalp / C_m2cm ; pParam->HSMHV2_nftrp = pParam->HSMHV2_nftrp * C_m2cm_p2 ; pParam->HSMHV2_npext = pParam->HSMHV2_npext / C_cm2m_p3 ; pParam->HSMHV2_rd22 = pParam->HSMHV2_rd22 / C_m2cm ; pParam->HSMHV2_rd23 = pParam->HSMHV2_rd23 / C_m2cm ; pParam->HSMHV2_rd24 = pParam->HSMHV2_rd24 / C_m2cm ; pParam->HSMHV2_rdvd = pParam->HSMHV2_rdvd / C_m2cm ; pParam->HSMHV2_rth0 = pParam->HSMHV2_rth0 / C_m2cm ; pParam->HSMHV2_vfbover = -pParam->HSMHV2_vfbover ; /* for Backword Compitibility */ } /* instance */ /*-----------------------------------------------------------* * Range check of model parameters *-----------------*/ RANGECHECK(model->HSMHV2_shemax , 300, 600, "SHEMAX"); RANGECHECK(model->HSMHV2_cvbd , -0.1, 0.2, "CVBD"); RANGECHECK(model->HSMHV2_cvbs , -0.1, 0.2, "CVBS"); if ( model->HSMHV2_tox <= 0 && model->HSMHV2_coerrrep ) { printf("warning(HiSIM_HV(%s)): TOX = %e\n ", model->HSMHV2modName,model->HSMHV2_tox); printf("warning(HiSIM_HV(%s)): The model parameter TOX must be positive.\n",model->HSMHV2modName); } RANGECHECK(model->HSMHV2_xld, 0.0, 50.0e-9, "XLD") ; RANGECHECK(model->HSMHV2_xwd, -100.0e-9, 300.0e-9, "XWD") ; RANGECHECK(model->HSMHV2_xwdc, -10.0e-9, 100.0e-9, "XWDC") ; RANGECHECK(model->HSMHV2_rsh, 0.0, 500.0, "RSH") ; RANGECHECK(model->HSMHV2_rshg, 0.0, 100.0, "RSHG") ; if(model->HSMHV2_xqy != 0.0) RANGECHECK(model->HSMHV2_xqy, 10.0e-9, 50.0e-9, "XQY") ; MINCHECK (model->HSMHV2_xqy1, 0.0, "XQY1") ; MINCHECK (model->HSMHV2_xqy2, 0.0, "XQY2") ; RANGECHECK(model->HSMHV2_vbi, 1.0, 1.2, "VBI") ; RANGECHECK(model->HSMHV2_parl2, 0.0, 50.0e-9, "PARL2") ; RANGECHECK(model->HSMHV2_lp, 0.0, 300.0e-9, "LP") ; RANGECHECK(model->HSMHV2_pgd2, 0.0, 1.5, "PGD2") ; RANGECHECK(model->HSMHV2_pgd4, 0.0, 3.0, "PGD4") ; RANGECHECK(model->HSMHV2_mueph0, 0.25, 0.35, "MUEPH0") ; RANGECHECK(model->HSMHV2_muesr0, 1.8, 2.2, "MUESR0") ; RANGECHECK(model->HSMHV2_lpext, 1.0e-50, 10.0e-6, "LPEXT") ; MINCHECK (model->HSMHV2_sc4, 0.0, "SC4") ; RANGECHECK(model->HSMHV2_scp21, 0.0, 5.0, "SCP21") ; RANGERESET(model->HSMHV2_scp22, 0.0, 0.0, "SCP22") ; RANGECHECK(model->HSMHV2_bs1, 0.0, 50.0e-3, "BS1") ; RANGECHECK(model->HSMHV2_bs2, 0.5, 1.0, "BS2") ; MINCHECK (model->HSMHV2_ptl, 0.0, "PTL") ; RANGECHECK(model->HSMHV2_ptp, 3.0, 4.0, "PTP") ; MINCHECK (model->HSMHV2_pt2, 0.0, "PT2") ; MINCHECK (model->HSMHV2_pt4, 0.0, "PT4") ; MINCHECK (model->HSMHV2_pt4p, 0.0, "PT4P") ; RANGECHECK(model->HSMHV2_gdl, 0.0, 220e-9, "GDL") ; MINCHECK (model->HSMHV2_ninvd, 0.0, "NINVD") ; MINCHECK (model->HSMHV2_ninvdw, 0.0, "NINVDW") ; MINCHECK (model->HSMHV2_ninvdwp, 0.0, "NINVDWP") ; MINCHECK (model->HSMHV2_ninvdt1, 0.0, "NINVDT1") ; MINCHECK (model->HSMHV2_ninvdt2, 0.0, "NINVDT2") ; RANGECHECK(model->HSMHV2_clm5, 0.0, 2.0, "CLM5") ; RANGECHECK(model->HSMHV2_clm6, 0.0, 20.0, "CLM6") ; RANGECHECK(model->HSMHV2_sub2l, 0.0, 1.0, "SUB2L") ; RANGECHECK(model->HSMHV2_voverp, 0.0, 2.0, "VOVERP") ; RANGECHECK(model->HSMHV2_qme1, 0.0, 1e-9, "QME1") ; RANGECHECK(model->HSMHV2_qme2, 1.0, 3.0, "QME2") ; RANGECHECK(model->HSMHV2_qme3, 0.0, 500e-12, "QME3") ; RANGECHECK(model->HSMHV2_glpart1, 0.0, 1.0, "GLPART1") ; RANGECHECK(model->HSMHV2_tnom, 22.0, 32.0, "TNOM") ; RANGECHECK(model->HSMHV2_ddltmax, 1.0, 10.0, "DDLTMAX") ; RANGECHECK(model->HSMHV2_ddltict, -3.0, 20.0, "DDLTICT") ; RANGECHECK(model->HSMHV2_ddltslp, 0.0, 20.0, "DDLTSLP") ; RANGECHECK(model->HSMHV2_mphdfm, -3.0, 3.0, "MPHDFM") ; RANGECHECK(model->HSMHV2_cvb, -0.1, 0.2, "CVB") ; RANGECHECK(model->HSMHV2_rd20, 0.0, 30.0, "RD20") ; RANGECHECK(model->HSMHV2_rd21, 0.0, 1.0, "RD21") ; RANGECHECK(model->HSMHV2_rd22d, 0.0, 2.0, "RD22D") ; MINCHECK( model->HSMHV2_rd25, 0.0, "RD25") ; RANGECHECK(model->HSMHV2_rdtemp1, -1e-3, 2e-2, "RDTEMP1") ; RANGECHECK(model->HSMHV2_rdtemp2, -1e-5, 1e-5, "RDTEMP2") ; RANGECHECK(model->HSMHV2_rdvdtemp1,-1e-3, 1e-2, "RDVDTEMP1") ; RANGECHECK(model->HSMHV2_rdvdtemp2,-1e-5, 1e-5, "RDVDTEMP2") ; MINCHECK( model->HSMHV2_rdvg12, 0.0, "RDVG12") ; RANGECHECK(model->HSMHV2_rthtemp1, -1.0, 1.0, "RTHTEMP1") ; RANGECHECK(model->HSMHV2_rthtemp2, -1.0, 1.0, "RTHTEMP2") ; RANGECHECK(model->HSMHV2_rth0w, -100, 100, "RTH0W") ; RANGECHECK(model->HSMHV2_rth0wp, -10, 10, "RTH0WP") ; RANGECHECK(model->HSMHV2_rth0nf, -5.0, 5.0, "RTH0NF") ; RANGECHECK(model->HSMHV2_powrat, 0.0, 1.0, "POWRAT") ; RANGECHECK(model->HSMHV2_prattemp1, -1.0, 1.0, "PRATTEMP1") ; RANGECHECK(model->HSMHV2_prattemp2, -1.0, 1.0, "PRATTEMP2") ; MINRESET ( model->HSMHV2_xldld, 0.0, "XLDLD") ; MINCHECK( model->HSMHV2_loverld, 0.0, "LOVERLD") ; MINCHECK( model->HSMHV2_lovers, 0.0, "LOVERS") ; MINCHECK( model->HSMHV2_lover, 0.0, "LOVER") ; MINCHECK( model->HSMHV2_ldrift1, 0.0, "LDRIFT1") ; MINCHECK( model->HSMHV2_ldrift1s, 0.0, "LDRIFT1S") ; MINCHECK( model->HSMHV2_ldrift2, 0.0, "LDRIFT2") ; MINCHECK( model->HSMHV2_ldrift2s, 0.0, "LDRIFT2S") ; // MINCHECK( model->HSMHV2_ldrift, 0.0, "LDRIFT") ; RANGECHECK(model->HSMHV2_rds, -100, 100, "RDS") ; RANGECHECK(model->HSMHV2_rdsp, -10, 10, "RDSP") ; RANGECHECK(model->HSMHV2_rdvdl, -100, 100, "RDVDL") ; RANGECHECK(model->HSMHV2_rdvdlp, -10, 10, "RDVDLP") ; RANGECHECK(model->HSMHV2_rdvds, -100, 100, "RDVDS") ; RANGECHECK(model->HSMHV2_rdvdsp, -10, 10, "RDVDSP") ; RANGECHECK(model->HSMHV2_rd23l, -100, 100, "RD23L") ; RANGECHECK(model->HSMHV2_rd23lp, -10, 10, "RD23LP") ; RANGECHECK(model->HSMHV2_rd23s, -100, 100, "RD23S") ; RANGECHECK(model->HSMHV2_rd23sp, -10, 10, "RD23SP") ; RANGECHECK(model->HSMHV2_rdov11, 0.0, 10, "RDOV11") ; RANGECHECK(model->HSMHV2_rdov12, 0.0, 2.0, "RDOV12") ; RANGECHECK(model->HSMHV2_rdslp2, -10.0, 10.0, "RDSLP2") ; RANGECHECK(model->HSMHV2_rdict2, -10.0, 10.0, "RDICT2") ; RANGECHECK(model->HSMHV2_rdrvmax, 1e6, 100e6, "RDRVMAX" ) ; RANGECHECK(model->HSMHV2_rdrmue, 1e2, 3e3, "RDRMUE" ) ; RANGECHECK(model->HSMHV2_rdrqover, 0.0, 1e7, "RDRDQOVER" ) ; RANGERESET(model->HSMHV2_rdrcx, 0.0, 1.0, "RDRCX" ) ; RANGECHECK(model->HSMHV2_rdrcar, 0.0, 50e-9, "RDRCAR" ) ; RANGECHECK(model->HSMHV2_rdrmuetmp, 0.0, 2.0, "RDRMUETMP" ) ; RANGECHECK(model->HSMHV2_rdrvtmp, -2.0, 1.0, "RDRVTMP" ) ; MINCHECK( model->HSMHV2_xpdv, 0.0, "XPDV" ) ; MINCHECK( model->HSMHV2_xpvdth, 0.0, "XPVDTH" ) ; RANGECHECK(model->HSMHV2_xpvdthg, -1.0, 1.0, "XPVDTHG" ) ; MINCHECK( model->HSMHV2_ibpc1l, 0.0, "IBPC1L" ) ; RANGERESET(model->HSMHV2_ndepm, 5e15, 2e17, "NDEPM" ) ; RANGERESET(model->HSMHV2_tndep, 1e-7, 1e-6, "TNDEP" ) ; RANGERESET(model->HSMHV2_depmue0, 1, 1e5, "DEPMUE0" ) ; RANGECHECK(model->HSMHV2_depmueback0, 1, 1e5, "DEPMUEBACK0" ) ; RANGECHECK(model->HSMHV2_depvdsef2, 0.1, 4.0, "DEPVDSEF2" ) ; RANGECHECK(model->HSMHV2_depmueph1, 1, 1e5, "DEPMUEPH1" ) ; RANGECHECK(model->HSMHV2_depleak, 0.0, 5.0, "DEPLEAK" ) ; if( model->HSMHV2_codep == 1 && model->HSMHV2_coerrrep ) { if( model->HSMHV2_copprv == 1 ) { printf("warning(HiSIM_HV(%s)): COPPRV is not supported yet in Depletion mode mode, reset to 0.\n",model->HSMHV2modName); } if( model->HSMHV2_coisti == 1 ) { printf("warning(HiSIM_HV(%s)): STI leak model is not supported yet in Depletion mode model, skipped\n",model->HSMHV2modName); } if( model->HSMHV2_cothrml == 1 ) { printf("warning(HiSIM_HV(%s)): Thermal noise model is not supported yet in Depletion mode model, skipped\n",model->HSMHV2modName); } if( model->HSMHV2_coign == 1 ) { printf("warning(HiSIM_HV(%s)): Induced gate noise model is not supported yet in Depletion mode model, skipped\n",model->HSMHV2modName); } } if( model->HSMHV2_codep && model->HSMHV2_copprv == 1 ) { model->HSMHV2_copprv = 0 ; } if ( model->HSMHV2_xpdv * model->HSMHV2_xldld > 1 && model->HSMHV2_coerrrep ) { printf("warning(HiSIM_HV(%s)): The model parameter XPDV (= %e) must be smaller than 1/XLDLD (= %e).\n", model->HSMHV2modName,model->HSMHV2_xpdv, 1/model->HSMHV2_xldld ); printf("warning(HiSIM_HV(%s)): The model parameter XPDV (= %e) has been changed to %e.\n", model->HSMHV2modName,model->HSMHV2_xpdv, 1/model->HSMHV2_xldld ); } /*-----------------------------------------------------------* * Change units into MKS. *-----------------*/ modelMKS->HSMHV2_vmax = model->HSMHV2_vmax / C_m2cm ; modelMKS->HSMHV2_ll = model->HSMHV2_ll / pow( C_m2cm , model->HSMHV2_lln ) ; modelMKS->HSMHV2_wl = model->HSMHV2_wl / pow( C_m2cm , model->HSMHV2_wln ) ; modelMKS->HSMHV2_svgsl = model->HSMHV2_svgsl / pow( C_m2cm , model->HSMHV2_svgslp ) ; modelMKS->HSMHV2_svgsw = model->HSMHV2_svgsw / pow( C_m2cm , model->HSMHV2_svgswp ) ; modelMKS->HSMHV2_svbsl = model->HSMHV2_svbsl / pow( C_m2cm , model->HSMHV2_svbslp ) ; modelMKS->HSMHV2_slgl = model->HSMHV2_slgl / pow( C_m2cm , model->HSMHV2_slglp ) ; modelMKS->HSMHV2_sub1l = model->HSMHV2_sub1l / pow( C_m2cm , model->HSMHV2_sub1lp ) ; modelMKS->HSMHV2_slg = model->HSMHV2_slg / C_m2cm ; modelMKS->HSMHV2_sub2l = model->HSMHV2_sub2l / C_m2cm ; modelMKS->HSMHV2_subld2 = model->HSMHV2_subld2 * C_m2cm ; modelMKS->HSMHV2_rdtemp1 = model->HSMHV2_rdtemp1 / C_m2cm ; modelMKS->HSMHV2_rdtemp2 = model->HSMHV2_rdtemp2 / C_m2cm ; modelMKS->HSMHV2_rdvdtemp1 = model->HSMHV2_rdvdtemp1 / C_m2cm ; modelMKS->HSMHV2_rdvdtemp2 = model->HSMHV2_rdvdtemp2 / C_m2cm ; modelMKS->HSMHV2_nsubsub = model->HSMHV2_nsubsub / C_cm2m_p3 ; modelMKS->HSMHV2_nsubpsti1 = model->HSMHV2_nsubpsti1 / C_m2cm ; modelMKS->HSMHV2_muesti1 = model->HSMHV2_muesti1 / C_m2cm ; modelMKS->HSMHV2_wfc = model->HSMHV2_wfc * C_m2cm_p2 ; modelMKS->HSMHV2_glksd1 = model->HSMHV2_glksd1 / C_m2cm ; modelMKS->HSMHV2_glksd2 = model->HSMHV2_glksd2 * C_m2cm ; modelMKS->HSMHV2_glksd3 = model->HSMHV2_glksd3 * C_m2cm ; modelMKS->HSMHV2_gleak2 = model->HSMHV2_gleak2 * C_m2cm ; modelMKS->HSMHV2_gleak4 = model->HSMHV2_gleak4 * C_m2cm ; modelMKS->HSMHV2_gleak5 = model->HSMHV2_gleak5 * C_m2cm ; modelMKS->HSMHV2_gleak7 = model->HSMHV2_gleak7 / C_m2cm_p2 ; modelMKS->HSMHV2_glkb2 = model->HSMHV2_glkb2 * C_m2cm ; modelMKS->HSMHV2_fn2 = model->HSMHV2_fn2 * C_m2cm ; modelMKS->HSMHV2_gidl1 = model->HSMHV2_gidl1 / C_m2cm_p1o2 ; modelMKS->HSMHV2_gidl2 = model->HSMHV2_gidl2 * C_m2cm ; modelMKS->HSMHV2_nfalp = model->HSMHV2_nfalp / C_m2cm ; modelMKS->HSMHV2_nftrp = model->HSMHV2_nftrp * C_m2cm_p2 ; modelMKS->HSMHV2_cit = model->HSMHV2_cit * C_m2cm_p2 ; modelMKS->HSMHV2_ovslp = model->HSMHV2_ovslp / C_m2cm ; modelMKS->HSMHV2_dly3 = model->HSMHV2_dly3 / C_m2cm_p2 ; modelMKS->HSMHV2_cth0 = model->HSMHV2_cth0 * C_m2cm ; modelMKS->HSMHV2_rdrmue = model->HSMHV2_rdrmue / C_m2cm_p2 ; modelMKS->HSMHV2_rdrvmax = model->HSMHV2_rdrvmax / C_m2cm ; modelMKS->HSMHV2_ndepm = model->HSMHV2_ndepm / C_cm2m_p3 ; modelMKS->HSMHV2_depvmax = model->HSMHV2_depvmax / C_m2cm ; /*-----------------------------------------------------------* * Change unit into Kelvin. *-----------------*/ model->HSMHV2_ktnom = model->HSMHV2_tnom + 273.15 ; /* [C] -> [K] */ } /* model */ return(OK); } int HSMHV2unsetup( GENmodel *inModel, CKTcircuit *ckt) { #ifndef HAS_BATCHSIM HSMHV2model *model; HSMHV2instance *here; for (model = (HSMHV2model *)inModel; model != NULL; model = HSMHV2nextModel(model)) { for (here = HSMHV2instances(model); here != NULL; here=HSMHV2nextInstance(here)) { if (here->HSMHV2tempNode > 0 && here->HSMHV2tempNode != here->HSMHV2tempNodeExt && here->HSMHV2tempNode != here->HSMHV2subNodeExt) CKTdltNNum(ckt, here->HSMHV2tempNode); here->HSMHV2tempNode = 0; here->HSMHV2subNode = 0; if (here->HSMHV2qbNode > 0) CKTdltNNum(ckt, here->HSMHV2qbNode); here->HSMHV2qbNode = 0; if (here->HSMHV2qiNode > 0) CKTdltNNum(ckt, here->HSMHV2qiNode); here->HSMHV2qiNode = 0; if (here->HSMHV2sbNode > 0 && here->HSMHV2sbNode != here->HSMHV2bNode) CKTdltNNum(ckt, here->HSMHV2sbNode); here->HSMHV2sbNode = 0; if (here->HSMHV2bNodePrime > 0 && here->HSMHV2bNodePrime != here->HSMHV2bNode) CKTdltNNum(ckt, here->HSMHV2bNodePrime); here->HSMHV2bNodePrime = 0; if (here->HSMHV2dbNode > 0 && here->HSMHV2dbNode != here->HSMHV2bNode) CKTdltNNum(ckt, here->HSMHV2dbNode); here->HSMHV2dbNode = 0; if (here->HSMHV2gNodePrime > 0 && here->HSMHV2gNodePrime != here->HSMHV2gNode) CKTdltNNum(ckt, here->HSMHV2gNodePrime); here->HSMHV2gNodePrime = 0; if (here->HSMHV2sNodePrime > 0 && here->HSMHV2sNodePrime != here->HSMHV2sNode) CKTdltNNum(ckt, here->HSMHV2sNodePrime); here->HSMHV2sNodePrime = 0; if (here->HSMHV2dNodePrime > 0 && here->HSMHV2dNodePrime != here->HSMHV2dNode) CKTdltNNum(ckt, here->HSMHV2dNodePrime); here->HSMHV2dNodePrime = 0; } } #endif return OK; } tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2mask.c0000644000175000017500000017706013546075722023156 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhvmask.c DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "hsmhv2def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HSMHV2mAsk( CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { HSMHV2model *model = (HSMHV2model *)inst; NG_IGNORE(ckt); switch (which) { case HSMHV2_MOD_NMOS: value->iValue = model->HSMHV2_type; return(OK); case HSMHV2_MOD_PMOS: value->iValue = model->HSMHV2_type; return(OK); case HSMHV2_MOD_LEVEL: value->iValue = model->HSMHV2_level; return(OK); case HSMHV2_MOD_INFO: value->iValue = model->HSMHV2_info; return(OK); case HSMHV2_MOD_NOISE: value->iValue = model->HSMHV2_noise; return(OK); case HSMHV2_MOD_VERSION: value->sValue = model->HSMHV2_version; return(OK); case HSMHV2_MOD_SHOW: value->iValue = model->HSMHV2_show; return(OK); case HSMHV2_MOD_CORSRD: value->iValue = model->HSMHV2_corsrd; return(OK); case HSMHV2_MOD_CORG: value->iValue = model->HSMHV2_corg; return(OK); case HSMHV2_MOD_COIPRV: value->iValue = model->HSMHV2_coiprv; return(OK); case HSMHV2_MOD_COPPRV: value->iValue = model->HSMHV2_copprv; return(OK); case HSMHV2_MOD_COADOV: value->iValue = model->HSMHV2_coadov; return(OK); case HSMHV2_MOD_COISUB: value->iValue = model->HSMHV2_coisub; return(OK); case HSMHV2_MOD_COIIGS: value->iValue = model->HSMHV2_coiigs; return(OK); case HSMHV2_MOD_COGIDL: value->iValue = model->HSMHV2_cogidl; return(OK); case HSMHV2_MOD_COOVLP: value->iValue = model->HSMHV2_coovlp; return(OK); case HSMHV2_MOD_COOVLPS: value->iValue = model->HSMHV2_coovlps; return(OK); case HSMHV2_MOD_COFLICK: value->iValue = model->HSMHV2_coflick; return(OK); case HSMHV2_MOD_COISTI: value->iValue = model->HSMHV2_coisti; return(OK); case HSMHV2_MOD_CONQS: value->iValue = model->HSMHV2_conqs; return(OK); case HSMHV2_MOD_CORBNET: value->iValue = model->HSMHV2_corbnet; return(OK); case HSMHV2_MOD_COTHRML: value->iValue = model->HSMHV2_cothrml; return(OK); case HSMHV2_MOD_COIGN: value->iValue = model->HSMHV2_coign; return(OK); case HSMHV2_MOD_CODFM: value->iValue = model->HSMHV2_codfm; return(OK); case HSMHV2_MOD_COQOVSM: value->iValue = model->HSMHV2_coqovsm; return(OK); case HSMHV2_MOD_COSELFHEAT: /* Self-heating model */ value->iValue = model->HSMHV2_coselfheat; return(OK); case HSMHV2_MOD_COSUBNODE: value->iValue = model->HSMHV2_cosubnode; return(OK); case HSMHV2_MOD_COSYM: /* Symmetry model for HV */ value->iValue = model->HSMHV2_cosym; return(OK); case HSMHV2_MOD_COTEMP: value->iValue = model->HSMHV2_cotemp; return(OK); case HSMHV2_MOD_COLDRIFT: value->iValue = model->HSMHV2_coldrift; return(OK); case HSMHV2_MOD_CORDRIFT: value->iValue = model->HSMHV2_cordrift; return(OK); case HSMHV2_MOD_COERRREP: value->iValue = model->HSMHV2_coerrrep; return(OK); case HSMHV2_MOD_CODEP: value->iValue = model->HSMHV2_codep; return(OK); case HSMHV2_MOD_CODDLT: value->iValue = model->HSMHV2_coddlt; return(OK); case HSMHV2_MOD_VMAX: value->rValue = model->HSMHV2_vmax; return(OK); case HSMHV2_MOD_VMAXT1: value->rValue = model->HSMHV2_vmaxt1; return(OK); case HSMHV2_MOD_VMAXT2: value->rValue = model->HSMHV2_vmaxt2; return(OK); case HSMHV2_MOD_BGTMP1: value->rValue = model->HSMHV2_bgtmp1; return(OK); case HSMHV2_MOD_BGTMP2: value->rValue = model->HSMHV2_bgtmp2; return(OK); case HSMHV2_MOD_EG0: value->rValue = model->HSMHV2_eg0; return(OK); case HSMHV2_MOD_TOX: value->rValue = model->HSMHV2_tox; return(OK); case HSMHV2_MOD_XLD: value->rValue = model->HSMHV2_xld; return(OK); case HSMHV2_MOD_LOVER: value->rValue = model->HSMHV2_lover; return(OK); case HSMHV2_MOD_LOVERS: value->rValue = model->HSMHV2_lovers; return(OK); case HSMHV2_MOD_RDOV11: value->rValue = model->HSMHV2_rdov11; return(OK); case HSMHV2_MOD_RDOV12: value->rValue = model->HSMHV2_rdov12; return(OK); case HSMHV2_MOD_RDOV13: value->rValue = model->HSMHV2_rdov13; return(OK); case HSMHV2_MOD_RDSLP1: value->rValue = model->HSMHV2_rdslp1; return(OK); case HSMHV2_MOD_RDICT1: value->rValue = model->HSMHV2_rdict1; return(OK); case HSMHV2_MOD_RDSLP2: value->rValue = model->HSMHV2_rdslp2; return(OK); case HSMHV2_MOD_RDICT2: value->rValue = model->HSMHV2_rdict2; return(OK); case HSMHV2_MOD_LOVERLD: value->rValue = model->HSMHV2_loverld; return(OK); case HSMHV2_MOD_LDRIFT1: value->rValue = model->HSMHV2_ldrift1; return(OK); case HSMHV2_MOD_LDRIFT2: value->rValue = model->HSMHV2_ldrift2; return(OK); case HSMHV2_MOD_LDRIFT1S: value->rValue = model->HSMHV2_ldrift1s; return(OK); case HSMHV2_MOD_LDRIFT2S: value->rValue = model->HSMHV2_ldrift2s; return(OK); case HSMHV2_MOD_SUBLD1: value->rValue = model->HSMHV2_subld1; return(OK); case HSMHV2_MOD_SUBLD1L: value->rValue = model->HSMHV2_subld1l; return(OK); case HSMHV2_MOD_SUBLD1LP: value->rValue = model->HSMHV2_subld1lp; return(OK); case HSMHV2_MOD_SUBLD2: value->rValue = model->HSMHV2_subld2; return(OK); case HSMHV2_MOD_XPDV: value->rValue = model->HSMHV2_xpdv; return(OK); case HSMHV2_MOD_XPVDTH: value->rValue = model->HSMHV2_xpvdth; return(OK); case HSMHV2_MOD_XPVDTHG: value->rValue = model->HSMHV2_xpvdthg; return(OK); case HSMHV2_MOD_DDLTMAX: /* Vdseff */ value->rValue = model->HSMHV2_ddltmax; return(OK); case HSMHV2_MOD_DDLTSLP: /* Vdseff */ value->rValue = model->HSMHV2_ddltslp; return(OK); case HSMHV2_MOD_DDLTICT: /* Vdseff */ value->rValue = model->HSMHV2_ddltict; return(OK); case HSMHV2_MOD_VFBOVER: value->rValue = model->HSMHV2_vfbover; return(OK); case HSMHV2_MOD_NOVER: value->rValue = model->HSMHV2_nover; return(OK); case HSMHV2_MOD_NOVERS: value->rValue = model->HSMHV2_novers; return(OK); case HSMHV2_MOD_XWD: value->rValue = model->HSMHV2_xwd; return(OK); case HSMHV2_MOD_XWDC: value->rValue = model->HSMHV2_xwdc; return(OK); case HSMHV2_MOD_XL: value->rValue = model->HSMHV2_xl; return(OK); case HSMHV2_MOD_XW: value->rValue = model->HSMHV2_xw; return(OK); case HSMHV2_MOD_SAREF: value->rValue = model->HSMHV2_saref; return(OK); case HSMHV2_MOD_SBREF: value->rValue = model->HSMHV2_sbref; return(OK); case HSMHV2_MOD_LL: value->rValue = model->HSMHV2_ll; return(OK); case HSMHV2_MOD_LLD: value->rValue = model->HSMHV2_lld; return(OK); case HSMHV2_MOD_LLN: value->rValue = model->HSMHV2_lln; return(OK); case HSMHV2_MOD_WL: value->rValue = model->HSMHV2_wl; return(OK); case HSMHV2_MOD_WL1: value->rValue = model->HSMHV2_wl1; return(OK); case HSMHV2_MOD_WL1P: value->rValue = model->HSMHV2_wl1p; return(OK); case HSMHV2_MOD_WL2: value->rValue = model->HSMHV2_wl2; return(OK); case HSMHV2_MOD_WL2P: value->rValue = model->HSMHV2_wl2p; return(OK); case HSMHV2_MOD_WLD: value->rValue = model->HSMHV2_wld; return(OK); case HSMHV2_MOD_WLN: value->rValue = model->HSMHV2_wln; return(OK); case HSMHV2_MOD_XQY: value->rValue = model->HSMHV2_xqy; return(OK); case HSMHV2_MOD_XQY1: value->rValue = model->HSMHV2_xqy1; return(OK); case HSMHV2_MOD_XQY2: value->rValue = model->HSMHV2_xqy2; return(OK); case HSMHV2_MOD_RS: value->rValue = model->HSMHV2_rs; return(OK); case HSMHV2_MOD_RD: value->rValue = model->HSMHV2_rd; return(OK); case HSMHV2_MOD_RSH: value->rValue = model->HSMHV2_rsh; return(OK); case HSMHV2_MOD_RSHG: value->rValue = model->HSMHV2_rshg; return(OK); case HSMHV2_MOD_VFBC: value->rValue = model->HSMHV2_vfbc; return(OK); case HSMHV2_MOD_VBI: value->rValue = model->HSMHV2_vbi; return(OK); case HSMHV2_MOD_NSUBC: value->rValue = model->HSMHV2_nsubc; return(OK); case HSMHV2_MOD_PARL2: value->rValue = model->HSMHV2_parl2; return(OK); case HSMHV2_MOD_LP: value->rValue = model->HSMHV2_lp; return(OK); case HSMHV2_MOD_NSUBP: value->rValue = model->HSMHV2_nsubp; return(OK); case HSMHV2_MOD_NSUBP0: value->rValue = model->HSMHV2_nsubp0; return(OK); case HSMHV2_MOD_NSUBWP: value->rValue = model->HSMHV2_nsubwp; return(OK); case HSMHV2_MOD_SCP1: value->rValue = model->HSMHV2_scp1; return(OK); case HSMHV2_MOD_SCP2: value->rValue = model->HSMHV2_scp2; return(OK); case HSMHV2_MOD_SCP3: value->rValue = model->HSMHV2_scp3; return(OK); case HSMHV2_MOD_SC1: value->rValue = model->HSMHV2_sc1; return(OK); case HSMHV2_MOD_SC2: value->rValue = model->HSMHV2_sc2; return(OK); case HSMHV2_MOD_SC3: value->rValue = model->HSMHV2_sc3; return(OK); case HSMHV2_MOD_SC4: value->rValue = model->HSMHV2_sc4; return(OK); case HSMHV2_MOD_PGD1: value->rValue = model->HSMHV2_pgd1; return(OK); case HSMHV2_MOD_PGD2: value->rValue = model->HSMHV2_pgd2; return(OK); case HSMHV2_MOD_PGD4: value->rValue = model->HSMHV2_pgd4; return(OK); case HSMHV2_MOD_NDEP: value->rValue = model->HSMHV2_ndep; return(OK); case HSMHV2_MOD_NDEPL: value->rValue = model->HSMHV2_ndepl; return(OK); case HSMHV2_MOD_NDEPLP: value->rValue = model->HSMHV2_ndeplp; return(OK); case HSMHV2_MOD_NINV: value->rValue = model->HSMHV2_ninv; return(OK); case HSMHV2_MOD_MUECB0: value->rValue = model->HSMHV2_muecb0; return(OK); case HSMHV2_MOD_MUECB1: value->rValue = model->HSMHV2_muecb1; return(OK); case HSMHV2_MOD_MUEPH1: value->rValue = model->HSMHV2_mueph1; return(OK); case HSMHV2_MOD_MUEPH0: value->rValue = model->HSMHV2_mueph0; return(OK); case HSMHV2_MOD_MUEPHW: value->rValue = model->HSMHV2_muephw; return(OK); case HSMHV2_MOD_MUEPWP: value->rValue = model->HSMHV2_muepwp; return(OK); case HSMHV2_MOD_MUEPHL: value->rValue = model->HSMHV2_muephl; return(OK); case HSMHV2_MOD_MUEPLP: value->rValue = model->HSMHV2_mueplp; return(OK); case HSMHV2_MOD_MUEPHS: value->rValue = model->HSMHV2_muephs; return(OK); case HSMHV2_MOD_MUEPSP: value->rValue = model->HSMHV2_muepsp; return(OK); case HSMHV2_MOD_VTMP: value->rValue = model->HSMHV2_vtmp; return(OK); case HSMHV2_MOD_WVTH0: value->rValue = model->HSMHV2_wvth0; return(OK); case HSMHV2_MOD_MUESR1: value->rValue = model->HSMHV2_muesr1; return(OK); case HSMHV2_MOD_MUESR0: value->rValue = model->HSMHV2_muesr0; return(OK); case HSMHV2_MOD_MUESRL: value->rValue = model->HSMHV2_muesrl; return(OK); case HSMHV2_MOD_MUESLP: value->rValue = model->HSMHV2_mueslp; return(OK); case HSMHV2_MOD_MUESRW: value->rValue = model->HSMHV2_muesrw; return(OK); case HSMHV2_MOD_MUESWP: value->rValue = model->HSMHV2_mueswp; return(OK); case HSMHV2_MOD_BB: value->rValue = model->HSMHV2_bb; return(OK); case HSMHV2_MOD_SUB1: value->rValue = model->HSMHV2_sub1; return(OK); case HSMHV2_MOD_SUB2: value->rValue = model->HSMHV2_sub2; return(OK); case HSMHV2_MOD_SVGS: value->rValue = model->HSMHV2_svgs; return(OK); case HSMHV2_MOD_SVGSL: value->rValue = model->HSMHV2_svgsl; return(OK); case HSMHV2_MOD_SVGSLP: value->rValue = model->HSMHV2_svgslp; return(OK); case HSMHV2_MOD_SVGSW: value->rValue = model->HSMHV2_svgsw; return(OK); case HSMHV2_MOD_SVGSWP: value->rValue = model->HSMHV2_svgswp; return(OK); case HSMHV2_MOD_SVBS: value->rValue = model->HSMHV2_svbs; return(OK); case HSMHV2_MOD_SVBSL: value->rValue = model->HSMHV2_svbsl; return(OK); case HSMHV2_MOD_SVBSLP: value->rValue = model->HSMHV2_svbslp; return(OK); case HSMHV2_MOD_SVDS: value->rValue = model->HSMHV2_svds; return(OK); case HSMHV2_MOD_SLG: value->rValue = model->HSMHV2_slg; return(OK); case HSMHV2_MOD_SLGL: value->rValue = model->HSMHV2_slgl; return(OK); case HSMHV2_MOD_SLGLP: value->rValue = model->HSMHV2_slglp; return(OK); case HSMHV2_MOD_SUB1L: value->rValue = model->HSMHV2_sub1l; return(OK); case HSMHV2_MOD_SUB1LP: value->rValue = model->HSMHV2_sub1lp; return(OK); case HSMHV2_MOD_SUB2L: value->rValue = model->HSMHV2_sub2l; return(OK); case HSMHV2_MOD_FN1: value->rValue = model->HSMHV2_fn1; return(OK); case HSMHV2_MOD_FN2: value->rValue = model->HSMHV2_fn2; return(OK); case HSMHV2_MOD_FN3: value->rValue = model->HSMHV2_fn3; return(OK); case HSMHV2_MOD_FVBS: value->rValue = model->HSMHV2_fvbs; return(OK); case HSMHV2_MOD_NSTI: value->rValue = model->HSMHV2_nsti; return(OK); case HSMHV2_MOD_WSTI: value->rValue = model->HSMHV2_wsti; return(OK); case HSMHV2_MOD_WSTIL: value->rValue = model->HSMHV2_wstil; return(OK); case HSMHV2_MOD_WSTILP: value->rValue = model->HSMHV2_wstilp; return(OK); case HSMHV2_MOD_WSTIW: value->rValue = model->HSMHV2_wstiw; return(OK); case HSMHV2_MOD_WSTIWP: value->rValue = model->HSMHV2_wstiwp; return(OK); case HSMHV2_MOD_SCSTI1: value->rValue = model->HSMHV2_scsti1; return(OK); case HSMHV2_MOD_SCSTI2: value->rValue = model->HSMHV2_scsti2; return(OK); case HSMHV2_MOD_VTHSTI: value->rValue = model->HSMHV2_vthsti; return(OK); case HSMHV2_MOD_VDSTI: value->rValue = model->HSMHV2_vdsti; return(OK); case HSMHV2_MOD_MUESTI1: value->rValue = model->HSMHV2_muesti1; return(OK); case HSMHV2_MOD_MUESTI2: value->rValue = model->HSMHV2_muesti2; return(OK); case HSMHV2_MOD_MUESTI3: value->rValue = model->HSMHV2_muesti3; return(OK); case HSMHV2_MOD_NSUBPSTI1: value->rValue = model->HSMHV2_nsubpsti1; return(OK); case HSMHV2_MOD_NSUBPSTI2: value->rValue = model->HSMHV2_nsubpsti2; return(OK); case HSMHV2_MOD_NSUBPSTI3: value->rValue = model->HSMHV2_nsubpsti3; return(OK); case HSMHV2_MOD_LPEXT: value->rValue = model->HSMHV2_lpext; return(OK); case HSMHV2_MOD_NPEXT: value->rValue = model->HSMHV2_npext; return(OK); case HSMHV2_MOD_SCP22: value->rValue = model->HSMHV2_scp22; return(OK); case HSMHV2_MOD_SCP21: value->rValue = model->HSMHV2_scp21; return(OK); case HSMHV2_MOD_BS1: value->rValue = model->HSMHV2_bs1; return(OK); case HSMHV2_MOD_BS2: value->rValue = model->HSMHV2_bs2; return(OK); case HSMHV2_MOD_CGSO: value->rValue = model->HSMHV2_cgso; return(OK); case HSMHV2_MOD_CGDO: value->rValue = model->HSMHV2_cgdo; return(OK); case HSMHV2_MOD_CGBO: value->rValue = model->HSMHV2_cgbo; return(OK); case HSMHV2_MOD_TPOLY: value->rValue = model->HSMHV2_tpoly; return(OK); case HSMHV2_MOD_JS0: value->rValue = model->HSMHV2_js0; return(OK); case HSMHV2_MOD_JS0SW: value->rValue = model->HSMHV2_js0sw; return(OK); case HSMHV2_MOD_NJ: value->rValue = model->HSMHV2_nj; return(OK); case HSMHV2_MOD_NJSW: value->rValue = model->HSMHV2_njsw; return(OK); case HSMHV2_MOD_XTI: value->rValue = model->HSMHV2_xti; return(OK); case HSMHV2_MOD_CJ: value->rValue = model->HSMHV2_cj; return(OK); case HSMHV2_MOD_CJSW: value->rValue = model->HSMHV2_cjsw; return(OK); case HSMHV2_MOD_CJSWG: value->rValue = model->HSMHV2_cjswg; return(OK); case HSMHV2_MOD_MJ: value->rValue = model->HSMHV2_mj; return(OK); case HSMHV2_MOD_MJSW: value->rValue = model->HSMHV2_mjsw; return(OK); case HSMHV2_MOD_MJSWG: value->rValue = model->HSMHV2_mjswg; return(OK); case HSMHV2_MOD_PB: value->rValue = model->HSMHV2_pb; return(OK); case HSMHV2_MOD_PBSW: value->rValue = model->HSMHV2_pbsw; return(OK); case HSMHV2_MOD_PBSWG: value->rValue = model->HSMHV2_pbswg; return(OK); case HSMHV2_MOD_XTI2: value->rValue = model->HSMHV2_xti2; return(OK); case HSMHV2_MOD_CISB: value->rValue = model->HSMHV2_cisb; return(OK); case HSMHV2_MOD_CVB: value->rValue = model->HSMHV2_cvb; return(OK); case HSMHV2_MOD_CTEMP: value->rValue = model->HSMHV2_ctemp; return(OK); case HSMHV2_MOD_CISBK: value->rValue = model->HSMHV2_cisbk; return(OK); case HSMHV2_MOD_CVBK: value->rValue = model->HSMHV2_cvbk; return(OK); case HSMHV2_MOD_DIVX: value->rValue = model->HSMHV2_divx; return(OK); case HSMHV2_MOD_CLM1: value->rValue = model->HSMHV2_clm1; return(OK); case HSMHV2_MOD_CLM2: value->rValue = model->HSMHV2_clm2; return(OK); case HSMHV2_MOD_CLM3: value->rValue = model->HSMHV2_clm3; return(OK); case HSMHV2_MOD_CLM5: value->rValue = model->HSMHV2_clm5; return(OK); case HSMHV2_MOD_CLM6: value->rValue = model->HSMHV2_clm6; return(OK); case HSMHV2_MOD_MUETMP: value->rValue = model->HSMHV2_muetmp; return(OK); case HSMHV2_MOD_VOVER: value->rValue = model->HSMHV2_vover; return(OK); case HSMHV2_MOD_VOVERP: value->rValue = model->HSMHV2_voverp; return(OK); case HSMHV2_MOD_VOVERS: value->rValue = model->HSMHV2_vovers; return(OK); case HSMHV2_MOD_VOVERSP: value->rValue = model->HSMHV2_voversp; return(OK); case HSMHV2_MOD_WFC: value->rValue = model->HSMHV2_wfc; return(OK); case HSMHV2_MOD_NSUBCW: value->rValue = model->HSMHV2_nsubcw; return(OK); case HSMHV2_MOD_NSUBCWP: value->rValue = model->HSMHV2_nsubcwp; return(OK); case HSMHV2_MOD_QME1: value->rValue = model->HSMHV2_qme1; return(OK); case HSMHV2_MOD_QME2: value->rValue = model->HSMHV2_qme2; return(OK); case HSMHV2_MOD_QME3: value->rValue = model->HSMHV2_qme3; return(OK); case HSMHV2_MOD_GIDL1: value->rValue = model->HSMHV2_gidl1; return(OK); case HSMHV2_MOD_GIDL2: value->rValue = model->HSMHV2_gidl2; return(OK); case HSMHV2_MOD_GIDL3: value->rValue = model->HSMHV2_gidl3; return(OK); case HSMHV2_MOD_GIDL4: value->rValue = model->HSMHV2_gidl4; return(OK); case HSMHV2_MOD_GIDL5: value->rValue = model->HSMHV2_gidl5; return(OK); case HSMHV2_MOD_GLEAK1: value->rValue = model->HSMHV2_gleak1; return(OK); case HSMHV2_MOD_GLEAK2: value->rValue = model->HSMHV2_gleak2; return(OK); case HSMHV2_MOD_GLEAK3: value->rValue = model->HSMHV2_gleak3; return(OK); case HSMHV2_MOD_GLEAK4: value->rValue = model->HSMHV2_gleak4; return(OK); case HSMHV2_MOD_GLEAK5: value->rValue = model->HSMHV2_gleak5; return(OK); case HSMHV2_MOD_GLEAK6: value->rValue = model->HSMHV2_gleak6; return(OK); case HSMHV2_MOD_GLEAK7: value->rValue = model->HSMHV2_gleak7; return(OK); case HSMHV2_MOD_GLPART1: value->rValue = model->HSMHV2_glpart1; return(OK); case HSMHV2_MOD_GLKSD1: value->rValue = model->HSMHV2_glksd1; return(OK); case HSMHV2_MOD_GLKSD2: value->rValue = model->HSMHV2_glksd2; return(OK); case HSMHV2_MOD_GLKSD3: value->rValue = model->HSMHV2_glksd3; return(OK); case HSMHV2_MOD_GLKB1: value->rValue = model->HSMHV2_glkb1; return(OK); case HSMHV2_MOD_GLKB2: value->rValue = model->HSMHV2_glkb2; return(OK); case HSMHV2_MOD_GLKB3: value->rValue = model->HSMHV2_glkb3; return(OK); case HSMHV2_MOD_EGIG: value->rValue = model->HSMHV2_egig; return(OK); case HSMHV2_MOD_IGTEMP2: value->rValue = model->HSMHV2_igtemp2; return(OK); case HSMHV2_MOD_IGTEMP3: value->rValue = model->HSMHV2_igtemp3; return(OK); case HSMHV2_MOD_VZADD0: value->rValue = model->HSMHV2_vzadd0; return(OK); case HSMHV2_MOD_PZADD0: value->rValue = model->HSMHV2_pzadd0; return(OK); case HSMHV2_MOD_NFTRP: value->rValue = model->HSMHV2_nftrp; return(OK); case HSMHV2_MOD_NFALP: value->rValue = model->HSMHV2_nfalp; return(OK); case HSMHV2_MOD_CIT: value->rValue = model->HSMHV2_cit; return(OK); case HSMHV2_MOD_FALPH: value->rValue = model->HSMHV2_falph; return(OK); case HSMHV2_MOD_KAPPA: value->rValue = model->HSMHV2_kappa; return(OK); case HSMHV2_MOD_VDIFFJ: value->rValue = model->HSMHV2_vdiffj; return(OK); case HSMHV2_MOD_DLY1: value->rValue = model->HSMHV2_dly1; return(OK); case HSMHV2_MOD_DLY2: value->rValue = model->HSMHV2_dly2; return(OK); case HSMHV2_MOD_DLY3: value->rValue = model->HSMHV2_dly3; return(OK); case HSMHV2_MOD_DLYOV: value->rValue = model->HSMHV2_dlyov; return(OK); case HSMHV2_MOD_TNOM: value->rValue = model->HSMHV2_tnom; return(OK); case HSMHV2_MOD_OVSLP: value->rValue = model->HSMHV2_ovslp; return(OK); case HSMHV2_MOD_OVMAG: value->rValue = model->HSMHV2_ovmag; return(OK); case HSMHV2_MOD_GBMIN: value->rValue = model->HSMHV2_gbmin; return(OK); case HSMHV2_MOD_RBPB: value->rValue = model->HSMHV2_rbpb; return(OK); case HSMHV2_MOD_RBPD: value->rValue = model->HSMHV2_rbpd; return(OK); case HSMHV2_MOD_RBPS: value->rValue = model->HSMHV2_rbps; return(OK); case HSMHV2_MOD_RBDB: value->rValue = model->HSMHV2_rbdb; return(OK); case HSMHV2_MOD_RBSB: value->rValue = model->HSMHV2_rbsb; return(OK); case HSMHV2_MOD_IBPC1: value->rValue = model->HSMHV2_ibpc1; return(OK); case HSMHV2_MOD_IBPC1L: value->rValue = model->HSMHV2_ibpc1l; return(OK); case HSMHV2_MOD_IBPC1LP: value->rValue = model->HSMHV2_ibpc1lp; return(OK); case HSMHV2_MOD_IBPC2: value->rValue = model->HSMHV2_ibpc2; return(OK); case HSMHV2_MOD_MPHDFM: value->rValue = model->HSMHV2_mphdfm; return(OK); case HSMHV2_MOD_PTL: value->rValue = model->HSMHV2_ptl; return(OK); case HSMHV2_MOD_PTP: value->rValue = model->HSMHV2_ptp; return(OK); case HSMHV2_MOD_PT2: value->rValue = model->HSMHV2_pt2; return(OK); case HSMHV2_MOD_PTLP: value->rValue = model->HSMHV2_ptlp; return(OK); case HSMHV2_MOD_GDL: value->rValue = model->HSMHV2_gdl; return(OK); case HSMHV2_MOD_GDLP: value->rValue = model->HSMHV2_gdlp; return(OK); case HSMHV2_MOD_GDLD: value->rValue = model->HSMHV2_gdld; return(OK); case HSMHV2_MOD_PT4: value->rValue = model->HSMHV2_pt4; return(OK); case HSMHV2_MOD_PT4P: value->rValue = model->HSMHV2_pt4p; return(OK); case HSMHV2_MOD_RDVG11: value->rValue = model->HSMHV2_rdvg11; return(OK); case HSMHV2_MOD_RDVG12: value->rValue = model->HSMHV2_rdvg12; return(OK); case HSMHV2_MOD_RTH0: /* Self-heating model */ value->rValue = model->HSMHV2_rth0; return(OK); case HSMHV2_MOD_CTH0: /* Self-heating model */ value->rValue = model->HSMHV2_cth0; return(OK); case HSMHV2_MOD_POWRAT: /* Self-heating model */ value->rValue = model->HSMHV2_powrat; return(OK); case HSMHV2_MOD_RTHTEMP1: /* Self-heating model */ value->rValue = model->HSMHV2_rthtemp1; return(OK); case HSMHV2_MOD_RTHTEMP2: /* Self-heating model */ value->rValue = model->HSMHV2_rthtemp2; return(OK); case HSMHV2_MOD_PRATTEMP1: /* Self-heating model */ value->rValue = model->HSMHV2_prattemp1; return(OK); case HSMHV2_MOD_PRATTEMP2: /* Self-heating model */ value->rValue = model->HSMHV2_prattemp2; return(OK); case HSMHV2_MOD_TCJBD: /* Self-heating model */ value->rValue = model->HSMHV2_tcjbd; return(OK); case HSMHV2_MOD_TCJBS: /* Self-heating model */ value->rValue = model->HSMHV2_tcjbs; return(OK); case HSMHV2_MOD_TCJBDSW: /* Self-heating model */ value->rValue = model->HSMHV2_tcjbdsw; return(OK); case HSMHV2_MOD_TCJBSSW: /* Self-heating model */ value->rValue = model->HSMHV2_tcjbssw; return(OK); case HSMHV2_MOD_TCJBDSWG: /* Self-heating model */ value->rValue = model->HSMHV2_tcjbdswg; return(OK); case HSMHV2_MOD_TCJBSSWG: /* Self-heating model */ value->rValue = model->HSMHV2_tcjbsswg; return(OK); /* case HSMHV2_MOD_WTH0: */ /* value->rValue = model->HSMHV2_wth0; */ /* return(OK); */ case HSMHV2_MOD_QDFTVD: value->rValue = model->HSMHV2_qdftvd; return(OK); case HSMHV2_MOD_XLDLD: value->rValue = model->HSMHV2_xldld; return(OK); case HSMHV2_MOD_XWDLD: value->rValue = model->HSMHV2_xwdld; return(OK); case HSMHV2_MOD_RDVD: value->rValue = model->HSMHV2_rdvd; return(OK); case HSMHV2_MOD_RD20: value->rValue = model->HSMHV2_rd20; return(OK); case HSMHV2_MOD_RD21: value->rValue = model->HSMHV2_rd21; return(OK); case HSMHV2_MOD_RD22: value->rValue = model->HSMHV2_rd22; return(OK); case HSMHV2_MOD_RD22D: value->rValue = model->HSMHV2_rd22d; return(OK); case HSMHV2_MOD_RD23: value->rValue = model->HSMHV2_rd23; return(OK); case HSMHV2_MOD_RD24: value->rValue = model->HSMHV2_rd24; return(OK); case HSMHV2_MOD_RD25: value->rValue = model->HSMHV2_rd25; return(OK); case HSMHV2_MOD_RDVDL: value->rValue = model->HSMHV2_rdvdl; return(OK); case HSMHV2_MOD_RDVDLP: value->rValue = model->HSMHV2_rdvdlp; return(OK); case HSMHV2_MOD_RDVDS: value->rValue = model->HSMHV2_rdvds; return(OK); case HSMHV2_MOD_RDVDSP: value->rValue = model->HSMHV2_rdvdsp; return(OK); case HSMHV2_MOD_RD23L: value->rValue = model->HSMHV2_rd23l; return(OK); case HSMHV2_MOD_RD23LP: value->rValue = model->HSMHV2_rd23lp; return(OK); case HSMHV2_MOD_RD23S: value->rValue = model->HSMHV2_rd23s; return(OK); case HSMHV2_MOD_RD23SP: value->rValue = model->HSMHV2_rd23sp; return(OK); case HSMHV2_MOD_RDS: value->rValue = model->HSMHV2_rds; return(OK); case HSMHV2_MOD_RDSP: value->rValue = model->HSMHV2_rdsp; return(OK); case HSMHV2_MOD_RDTEMP1: value->rValue = model->HSMHV2_rdtemp1; return(OK); case HSMHV2_MOD_RDTEMP2: value->rValue = model->HSMHV2_rdtemp2; return(OK); case HSMHV2_MOD_RTH0R: value->rValue = model->HSMHV2_rth0r; return(OK); case HSMHV2_MOD_RDVDTEMP1: value->rValue = model->HSMHV2_rdvdtemp1; return(OK); case HSMHV2_MOD_RDVDTEMP2: value->rValue = model->HSMHV2_rdvdtemp2; return(OK); case HSMHV2_MOD_RTH0W: value->rValue = model->HSMHV2_rth0w; return(OK); case HSMHV2_MOD_RTH0WP: value->rValue = model->HSMHV2_rth0wp; return(OK); case HSMHV2_MOD_CVDSOVER: value->rValue = model->HSMHV2_cvdsover; return(OK); case HSMHV2_MOD_NINVD: value->rValue = model->HSMHV2_ninvd; return(OK); case HSMHV2_MOD_NINVDW: value->rValue = model->HSMHV2_ninvdw; return(OK); case HSMHV2_MOD_NINVDWP: value->rValue = model->HSMHV2_ninvdwp; return(OK); case HSMHV2_MOD_NINVDT1: value->rValue = model->HSMHV2_ninvdt1; return(OK); case HSMHV2_MOD_NINVDT2: value->rValue = model->HSMHV2_ninvdt2; return(OK); case HSMHV2_MOD_VBSMIN: value->rValue = model->HSMHV2_vbsmin; return(OK); case HSMHV2_MOD_RDVB: value->rValue = model->HSMHV2_rdvb; return(OK); case HSMHV2_MOD_RTH0NF: value->rValue = model->HSMHV2_rth0nf; return(OK); case HSMHV2_MOD_RDVSUB: value->rValue = model->HSMHV2_rdvsub; return(OK); case HSMHV2_MOD_RDVDSUB: value->rValue = model->HSMHV2_rdvdsub; return(OK); case HSMHV2_MOD_DDRIFT: value->rValue = model->HSMHV2_ddrift; return(OK); case HSMHV2_MOD_VBISUB: value->rValue = model->HSMHV2_vbisub; return(OK); case HSMHV2_MOD_NSUBSUB: value->rValue = model->HSMHV2_nsubsub; return(OK); case HSMHV2_MOD_RDRMUE: value->rValue = model->HSMHV2_rdrmue; return(OK); case HSMHV2_MOD_RDRVMAX: value->rValue = model->HSMHV2_rdrvmax; return(OK); case HSMHV2_MOD_RDRMUETMP: value->rValue = model->HSMHV2_rdrmuetmp; return(OK); case HSMHV2_MOD_RDRVTMP: value->rValue = model->HSMHV2_rdrvtmp; return(OK); case HSMHV2_MOD_NDEPM: value->rValue = model->HSMHV2_ndepm; return(OK); case HSMHV2_MOD_TNDEP: value->rValue = model->HSMHV2_tndep; return(OK); case HSMHV2_MOD_DEPMUE0: value->rValue = model->HSMHV2_depmue0; return(OK); case HSMHV2_MOD_DEPMUE1: value->rValue = model->HSMHV2_depmue1; return(OK); case HSMHV2_MOD_DEPMUEBACK0: value->rValue = model->HSMHV2_depmueback0; return(OK); case HSMHV2_MOD_DEPMUEBACK1: value->rValue = model->HSMHV2_depmueback1; return(OK); case HSMHV2_MOD_DEPLEAK: value->rValue = model->HSMHV2_depleak; return(OK); case HSMHV2_MOD_DEPETA: value->rValue = model->HSMHV2_depeta; return(OK); case HSMHV2_MOD_DEPVMAX: value->rValue = model->HSMHV2_depvmax; return(OK); case HSMHV2_MOD_DEPVDSEF1: value->rValue = model->HSMHV2_depvdsef1; return(OK); case HSMHV2_MOD_DEPVDSEF2: value->rValue = model->HSMHV2_depvdsef2; return(OK); case HSMHV2_MOD_DEPMUEPH0: value->rValue = model->HSMHV2_depmueph0; return(OK); case HSMHV2_MOD_DEPMUEPH1: value->rValue = model->HSMHV2_depmueph1; return(OK); case HSMHV2_MOD_DEPBB: value->rValue = model->HSMHV2_depbb; return(OK); case HSMHV2_MOD_DEPVTMP: value->rValue = model->HSMHV2_depvtmp; return(OK); case HSMHV2_MOD_DEPMUETMP: value->rValue = model->HSMHV2_depmuetmp; return(OK); case HSMHV2_MOD_ISBREAK: value->rValue = model->HSMHV2_isbreak; return(OK); case HSMHV2_MOD_RWELL: value->rValue = model->HSMHV2_rwell; return(OK); /* case HSMHV2_MOD_RDRVMAXT1: */ /* value->rValue = model->HSMHV2_rdrvmaxt1; */ /* return(OK); */ /* case HSMHV2_MOD_RDRVMAXT2: */ /* value->rValue = model->HSMHV2_rdrvmaxt2; */ /* return(OK); */ case HSMHV2_MOD_RDRDJUNC: value->rValue = model->HSMHV2_rdrdjunc; return(OK); case HSMHV2_MOD_RDRCX: value->rValue = model->HSMHV2_rdrcx; return(OK); case HSMHV2_MOD_RDRCAR: value->rValue = model->HSMHV2_rdrcar; return(OK); case HSMHV2_MOD_RDRDL1: value->rValue = model->HSMHV2_rdrdl1; return(OK); case HSMHV2_MOD_RDRDL2: value->rValue = model->HSMHV2_rdrdl2; return(OK); case HSMHV2_MOD_RDRVMAXW: value->rValue = model->HSMHV2_rdrvmaxw; return(OK); case HSMHV2_MOD_RDRVMAXWP: value->rValue = model->HSMHV2_rdrvmaxwp; return(OK); case HSMHV2_MOD_RDRVMAXL: value->rValue = model->HSMHV2_rdrvmaxl; return(OK); case HSMHV2_MOD_RDRVMAXLP: value->rValue = model->HSMHV2_rdrvmaxlp; return(OK); case HSMHV2_MOD_RDRMUEL: value->rValue = model->HSMHV2_rdrmuel; return(OK); case HSMHV2_MOD_RDRMUELP: value->rValue = model->HSMHV2_rdrmuelp; return(OK); case HSMHV2_MOD_RDRQOVER: value->rValue = model->HSMHV2_rdrqover; return(OK); case HSMHV2_MOD_QOVADD: value->rValue = model->HSMHV2_qovadd; return(OK); case HSMHV2_MOD_JS0D: value->rValue = model->HSMHV2_js0d; return(OK); case HSMHV2_MOD_JS0SWD: value->rValue = model->HSMHV2_js0swd; return(OK); case HSMHV2_MOD_NJD: value->rValue = model->HSMHV2_njd; return(OK); case HSMHV2_MOD_NJSWD: value->rValue = model->HSMHV2_njswd; return(OK); case HSMHV2_MOD_XTID: value->rValue = model->HSMHV2_xtid; return(OK); case HSMHV2_MOD_CJD: value->rValue = model->HSMHV2_cjd; return(OK); case HSMHV2_MOD_CJSWD: value->rValue = model->HSMHV2_cjswd; return(OK); case HSMHV2_MOD_CJSWGD: value->rValue = model->HSMHV2_cjswgd; return(OK); case HSMHV2_MOD_MJD: value->rValue = model->HSMHV2_mjd; return(OK); case HSMHV2_MOD_MJSWD: value->rValue = model->HSMHV2_mjswd; return(OK); case HSMHV2_MOD_MJSWGD: value->rValue = model->HSMHV2_mjswgd; return(OK); case HSMHV2_MOD_PBD: value->rValue = model->HSMHV2_pbd; return(OK); case HSMHV2_MOD_PBSWD: value->rValue = model->HSMHV2_pbswd; return(OK); case HSMHV2_MOD_PBSWDG: value->rValue = model->HSMHV2_pbswgd; return(OK); case HSMHV2_MOD_XTI2D: value->rValue = model->HSMHV2_xti2d; return(OK); case HSMHV2_MOD_CISBD: value->rValue = model->HSMHV2_cisbd; return(OK); case HSMHV2_MOD_CVBD: value->rValue = model->HSMHV2_cvbd; return(OK); case HSMHV2_MOD_CTEMPD: value->rValue = model->HSMHV2_ctempd; return(OK); case HSMHV2_MOD_CISBKD: value->rValue = model->HSMHV2_cisbkd; return(OK); case HSMHV2_MOD_DIVXD: value->rValue = model->HSMHV2_divxd; return(OK); case HSMHV2_MOD_VDIFFJD: value->rValue = model->HSMHV2_vdiffjd; return(OK); case HSMHV2_MOD_JS0S: value->rValue = model->HSMHV2_js0s; return(OK); case HSMHV2_MOD_JS0SWS: value->rValue = model->HSMHV2_js0sws; return(OK); case HSMHV2_MOD_NJS: value->rValue = model->HSMHV2_njs; return(OK); case HSMHV2_MOD_NJSWS: value->rValue = model->HSMHV2_njsws; return(OK); case HSMHV2_MOD_XTIS: value->rValue = model->HSMHV2_xtis; return(OK); case HSMHV2_MOD_CJS: value->rValue = model->HSMHV2_cjs; return(OK); case HSMHV2_MOD_CJSSW: value->rValue = model->HSMHV2_cjsws; return(OK); case HSMHV2_MOD_CJSWGS: value->rValue = model->HSMHV2_cjswgs; return(OK); case HSMHV2_MOD_MJS: value->rValue = model->HSMHV2_mjs; return(OK); case HSMHV2_MOD_MJSWS: value->rValue = model->HSMHV2_mjsws; return(OK); case HSMHV2_MOD_MJSWGS: value->rValue = model->HSMHV2_mjswgs; return(OK); case HSMHV2_MOD_PBS: value->rValue = model->HSMHV2_pbs; return(OK); case HSMHV2_MOD_PBSWS: value->rValue = model->HSMHV2_pbsws; return(OK); case HSMHV2_MOD_PBSWSG: value->rValue = model->HSMHV2_pbswgs; return(OK); case HSMHV2_MOD_XTI2S: value->rValue = model->HSMHV2_xti2s; return(OK); case HSMHV2_MOD_CISBS: value->rValue = model->HSMHV2_cisbs; return(OK); case HSMHV2_MOD_CVBS: value->rValue = model->HSMHV2_cvbs; return(OK); case HSMHV2_MOD_CTEMPS: value->rValue = model->HSMHV2_ctemps; return(OK); case HSMHV2_MOD_CISBKS: value->rValue = model->HSMHV2_cisbks; return(OK); case HSMHV2_MOD_DIVXS: value->rValue = model->HSMHV2_divxs; return(OK); case HSMHV2_MOD_VDIFFJS: value->rValue = model->HSMHV2_vdiffjs; return(OK); case HSMHV2_MOD_SHEMAX: value->rValue = model->HSMHV2_shemax; return(OK); case HSMHV2_MOD_VGSMIN: value->rValue = model->HSMHV2_vgsmin; return(OK); case HSMHV2_MOD_GDSLEAK: value->rValue = model->HSMHV2_gdsleak; return(OK); case HSMHV2_MOD_RDRBB: value->rValue = model->HSMHV2_rdrbb; return(OK); case HSMHV2_MOD_RDRBBTMP: value->rValue = model->HSMHV2_rdrbbtmp; return(OK); /* binning parameters */ case HSMHV2_MOD_LMIN: value->rValue = model->HSMHV2_lmin; return(OK); case HSMHV2_MOD_LMAX: value->rValue = model->HSMHV2_lmax; return(OK); case HSMHV2_MOD_WMIN: value->rValue = model->HSMHV2_wmin; return(OK); case HSMHV2_MOD_WMAX: value->rValue = model->HSMHV2_wmax; return(OK); case HSMHV2_MOD_LBINN: value->rValue = model->HSMHV2_lbinn; return(OK); case HSMHV2_MOD_WBINN: value->rValue = model->HSMHV2_wbinn; return(OK); /* Length dependence */ case HSMHV2_MOD_LVMAX: value->rValue = model->HSMHV2_lvmax; return(OK); case HSMHV2_MOD_LBGTMP1: value->rValue = model->HSMHV2_lbgtmp1; return(OK); case HSMHV2_MOD_LBGTMP2: value->rValue = model->HSMHV2_lbgtmp2; return(OK); case HSMHV2_MOD_LEG0: value->rValue = model->HSMHV2_leg0; return(OK); case HSMHV2_MOD_LVFBOVER: value->rValue = model->HSMHV2_lvfbover; return(OK); case HSMHV2_MOD_LNOVER: value->rValue = model->HSMHV2_lnover; return(OK); case HSMHV2_MOD_LNOVERS: value->rValue = model->HSMHV2_lnovers; return(OK); case HSMHV2_MOD_LWL2: value->rValue = model->HSMHV2_lwl2; return(OK); case HSMHV2_MOD_LVFBC: value->rValue = model->HSMHV2_lvfbc; return(OK); case HSMHV2_MOD_LNSUBC: value->rValue = model->HSMHV2_lnsubc; return(OK); case HSMHV2_MOD_LNSUBP: value->rValue = model->HSMHV2_lnsubp; return(OK); case HSMHV2_MOD_LSCP1: value->rValue = model->HSMHV2_lscp1; return(OK); case HSMHV2_MOD_LSCP2: value->rValue = model->HSMHV2_lscp2; return(OK); case HSMHV2_MOD_LSCP3: value->rValue = model->HSMHV2_lscp3; return(OK); case HSMHV2_MOD_LSC1: value->rValue = model->HSMHV2_lsc1; return(OK); case HSMHV2_MOD_LSC2: value->rValue = model->HSMHV2_lsc2; return(OK); case HSMHV2_MOD_LSC3: value->rValue = model->HSMHV2_lsc3; return(OK); case HSMHV2_MOD_LPGD1: value->rValue = model->HSMHV2_lpgd1; return(OK); case HSMHV2_MOD_LNDEP: value->rValue = model->HSMHV2_lndep; return(OK); case HSMHV2_MOD_LNINV: value->rValue = model->HSMHV2_lninv; return(OK); case HSMHV2_MOD_LMUECB0: value->rValue = model->HSMHV2_lmuecb0; return(OK); case HSMHV2_MOD_LMUECB1: value->rValue = model->HSMHV2_lmuecb1; return(OK); case HSMHV2_MOD_LMUEPH1: value->rValue = model->HSMHV2_lmueph1; return(OK); case HSMHV2_MOD_LVTMP: value->rValue = model->HSMHV2_lvtmp; return(OK); case HSMHV2_MOD_LWVTH0: value->rValue = model->HSMHV2_lwvth0; return(OK); case HSMHV2_MOD_LMUESR1: value->rValue = model->HSMHV2_lmuesr1; return(OK); case HSMHV2_MOD_LMUETMP: value->rValue = model->HSMHV2_lmuetmp; return(OK); case HSMHV2_MOD_LSUB1: value->rValue = model->HSMHV2_lsub1; return(OK); case HSMHV2_MOD_LSUB2: value->rValue = model->HSMHV2_lsub2; return(OK); case HSMHV2_MOD_LSVDS: value->rValue = model->HSMHV2_lsvds; return(OK); case HSMHV2_MOD_LSVBS: value->rValue = model->HSMHV2_lsvbs; return(OK); case HSMHV2_MOD_LSVGS: value->rValue = model->HSMHV2_lsvgs; return(OK); case HSMHV2_MOD_LFN1: value->rValue = model->HSMHV2_lfn1; return(OK); case HSMHV2_MOD_LFN2: value->rValue = model->HSMHV2_lfn2; return(OK); case HSMHV2_MOD_LFN3: value->rValue = model->HSMHV2_lfn3; return(OK); case HSMHV2_MOD_LFVBS: value->rValue = model->HSMHV2_lfvbs; return(OK); case HSMHV2_MOD_LNSTI: value->rValue = model->HSMHV2_lnsti; return(OK); case HSMHV2_MOD_LWSTI: value->rValue = model->HSMHV2_lwsti; return(OK); case HSMHV2_MOD_LSCSTI1: value->rValue = model->HSMHV2_lscsti1; return(OK); case HSMHV2_MOD_LSCSTI2: value->rValue = model->HSMHV2_lscsti2; return(OK); case HSMHV2_MOD_LVTHSTI: value->rValue = model->HSMHV2_lvthsti; return(OK); case HSMHV2_MOD_LMUESTI1: value->rValue = model->HSMHV2_lmuesti1; return(OK); case HSMHV2_MOD_LMUESTI2: value->rValue = model->HSMHV2_lmuesti2; return(OK); case HSMHV2_MOD_LMUESTI3: value->rValue = model->HSMHV2_lmuesti3; return(OK); case HSMHV2_MOD_LNSUBPSTI1: value->rValue = model->HSMHV2_lnsubpsti1; return(OK); case HSMHV2_MOD_LNSUBPSTI2: value->rValue = model->HSMHV2_lnsubpsti2; return(OK); case HSMHV2_MOD_LNSUBPSTI3: value->rValue = model->HSMHV2_lnsubpsti3; return(OK); case HSMHV2_MOD_LCGSO: value->rValue = model->HSMHV2_lcgso; return(OK); case HSMHV2_MOD_LCGDO: value->rValue = model->HSMHV2_lcgdo; return(OK); case HSMHV2_MOD_LJS0: value->rValue = model->HSMHV2_ljs0; return(OK); case HSMHV2_MOD_LJS0SW: value->rValue = model->HSMHV2_ljs0sw; return(OK); case HSMHV2_MOD_LNJ: value->rValue = model->HSMHV2_lnj; return(OK); case HSMHV2_MOD_LCISBK: value->rValue = model->HSMHV2_lcisbk; return(OK); case HSMHV2_MOD_LCLM1: value->rValue = model->HSMHV2_lclm1; return(OK); case HSMHV2_MOD_LCLM2: value->rValue = model->HSMHV2_lclm2; return(OK); case HSMHV2_MOD_LCLM3: value->rValue = model->HSMHV2_lclm3; return(OK); case HSMHV2_MOD_LWFC: value->rValue = model->HSMHV2_lwfc; return(OK); case HSMHV2_MOD_LGIDL1: value->rValue = model->HSMHV2_lgidl1; return(OK); case HSMHV2_MOD_LGIDL2: value->rValue = model->HSMHV2_lgidl2; return(OK); case HSMHV2_MOD_LGLEAK1: value->rValue = model->HSMHV2_lgleak1; return(OK); case HSMHV2_MOD_LGLEAK2: value->rValue = model->HSMHV2_lgleak2; return(OK); case HSMHV2_MOD_LGLEAK3: value->rValue = model->HSMHV2_lgleak3; return(OK); case HSMHV2_MOD_LGLEAK6: value->rValue = model->HSMHV2_lgleak6; return(OK); case HSMHV2_MOD_LGLKSD1: value->rValue = model->HSMHV2_lglksd1; return(OK); case HSMHV2_MOD_LGLKSD2: value->rValue = model->HSMHV2_lglksd2; return(OK); case HSMHV2_MOD_LGLKB1: value->rValue = model->HSMHV2_lglkb1; return(OK); case HSMHV2_MOD_LGLKB2: value->rValue = model->HSMHV2_lglkb2; return(OK); case HSMHV2_MOD_LNFTRP: value->rValue = model->HSMHV2_lnftrp; return(OK); case HSMHV2_MOD_LNFALP: value->rValue = model->HSMHV2_lnfalp; return(OK); case HSMHV2_MOD_LVDIFFJ: value->rValue = model->HSMHV2_lvdiffj; return(OK); case HSMHV2_MOD_LIBPC1: value->rValue = model->HSMHV2_libpc1; return(OK); case HSMHV2_MOD_LIBPC2: value->rValue = model->HSMHV2_libpc2; return(OK); case HSMHV2_MOD_LCGBO: value->rValue = model->HSMHV2_lcgbo; return(OK); case HSMHV2_MOD_LCVDSOVER: value->rValue = model->HSMHV2_lcvdsover; return(OK); case HSMHV2_MOD_LFALPH: value->rValue = model->HSMHV2_lfalph; return(OK); case HSMHV2_MOD_LNPEXT: value->rValue = model->HSMHV2_lnpext; return(OK); case HSMHV2_MOD_LPOWRAT: value->rValue = model->HSMHV2_lpowrat; return(OK); case HSMHV2_MOD_LRD: value->rValue = model->HSMHV2_lrd; return(OK); case HSMHV2_MOD_LRD22: value->rValue = model->HSMHV2_lrd22; return(OK); case HSMHV2_MOD_LRD23: value->rValue = model->HSMHV2_lrd23; return(OK); case HSMHV2_MOD_LRD24: value->rValue = model->HSMHV2_lrd24; return(OK); case HSMHV2_MOD_LRDICT1: value->rValue = model->HSMHV2_lrdict1; return(OK); case HSMHV2_MOD_LRDOV13: value->rValue = model->HSMHV2_lrdov13; return(OK); case HSMHV2_MOD_LRDSLP1: value->rValue = model->HSMHV2_lrdslp1; return(OK); case HSMHV2_MOD_LRDVB: value->rValue = model->HSMHV2_lrdvb; return(OK); case HSMHV2_MOD_LRDVD: value->rValue = model->HSMHV2_lrdvd; return(OK); case HSMHV2_MOD_LRDVG11: value->rValue = model->HSMHV2_lrdvg11; return(OK); case HSMHV2_MOD_LRS: value->rValue = model->HSMHV2_lrs; return(OK); case HSMHV2_MOD_LRTH0: value->rValue = model->HSMHV2_lrth0; return(OK); case HSMHV2_MOD_LVOVER: value->rValue = model->HSMHV2_lvover; return(OK); case HSMHV2_MOD_LJS0D: value->rValue = model->HSMHV2_ljs0d; return(OK); case HSMHV2_MOD_LJS0SWD: value->rValue = model->HSMHV2_ljs0swd; return(OK); case HSMHV2_MOD_LNJD: value->rValue = model->HSMHV2_lnjd; return(OK); case HSMHV2_MOD_LCISBKD: value->rValue = model->HSMHV2_lcisbkd; return(OK); case HSMHV2_MOD_LVDIFFJD: value->rValue = model->HSMHV2_lvdiffjd; return(OK); case HSMHV2_MOD_LJS0S: value->rValue = model->HSMHV2_ljs0s; return(OK); case HSMHV2_MOD_LJS0SWS: value->rValue = model->HSMHV2_ljs0sws; return(OK); case HSMHV2_MOD_LNJS: value->rValue = model->HSMHV2_lnjs; return(OK); case HSMHV2_MOD_LCISBKS: value->rValue = model->HSMHV2_lcisbks; return(OK); case HSMHV2_MOD_LVDIFFJS: value->rValue = model->HSMHV2_lvdiffjs; return(OK); /* Width dependence */ case HSMHV2_MOD_WVMAX: value->rValue = model->HSMHV2_wvmax; return(OK); case HSMHV2_MOD_WBGTMP1: value->rValue = model->HSMHV2_wbgtmp1; return(OK); case HSMHV2_MOD_WBGTMP2: value->rValue = model->HSMHV2_wbgtmp2; return(OK); case HSMHV2_MOD_WEG0: value->rValue = model->HSMHV2_weg0; return(OK); case HSMHV2_MOD_WVFBOVER: value->rValue = model->HSMHV2_wvfbover; return(OK); case HSMHV2_MOD_WNOVER: value->rValue = model->HSMHV2_wnover; return(OK); case HSMHV2_MOD_WNOVERS: value->rValue = model->HSMHV2_wnovers; return(OK); case HSMHV2_MOD_WWL2: value->rValue = model->HSMHV2_wwl2; return(OK); case HSMHV2_MOD_WVFBC: value->rValue = model->HSMHV2_wvfbc; return(OK); case HSMHV2_MOD_WNSUBC: value->rValue = model->HSMHV2_wnsubc; return(OK); case HSMHV2_MOD_WNSUBP: value->rValue = model->HSMHV2_wnsubp; return(OK); case HSMHV2_MOD_WSCP1: value->rValue = model->HSMHV2_wscp1; return(OK); case HSMHV2_MOD_WSCP2: value->rValue = model->HSMHV2_wscp2; return(OK); case HSMHV2_MOD_WSCP3: value->rValue = model->HSMHV2_wscp3; return(OK); case HSMHV2_MOD_WSC1: value->rValue = model->HSMHV2_wsc1; return(OK); case HSMHV2_MOD_WSC2: value->rValue = model->HSMHV2_wsc2; return(OK); case HSMHV2_MOD_WSC3: value->rValue = model->HSMHV2_wsc3; return(OK); case HSMHV2_MOD_WPGD1: value->rValue = model->HSMHV2_wpgd1; return(OK); case HSMHV2_MOD_WNDEP: value->rValue = model->HSMHV2_wndep; return(OK); case HSMHV2_MOD_WNINV: value->rValue = model->HSMHV2_wninv; return(OK); case HSMHV2_MOD_WMUECB0: value->rValue = model->HSMHV2_wmuecb0; return(OK); case HSMHV2_MOD_WMUECB1: value->rValue = model->HSMHV2_wmuecb1; return(OK); case HSMHV2_MOD_WMUEPH1: value->rValue = model->HSMHV2_wmueph1; return(OK); case HSMHV2_MOD_WVTMP: value->rValue = model->HSMHV2_wvtmp; return(OK); case HSMHV2_MOD_WWVTH0: value->rValue = model->HSMHV2_wwvth0; return(OK); case HSMHV2_MOD_WMUESR1: value->rValue = model->HSMHV2_wmuesr1; return(OK); case HSMHV2_MOD_WMUETMP: value->rValue = model->HSMHV2_wmuetmp; return(OK); case HSMHV2_MOD_WSUB1: value->rValue = model->HSMHV2_wsub1; return(OK); case HSMHV2_MOD_WSUB2: value->rValue = model->HSMHV2_wsub2; return(OK); case HSMHV2_MOD_WSVDS: value->rValue = model->HSMHV2_wsvds; return(OK); case HSMHV2_MOD_WSVBS: value->rValue = model->HSMHV2_wsvbs; return(OK); case HSMHV2_MOD_WSVGS: value->rValue = model->HSMHV2_wsvgs; return(OK); case HSMHV2_MOD_WFN1: value->rValue = model->HSMHV2_wfn1; return(OK); case HSMHV2_MOD_WFN2: value->rValue = model->HSMHV2_wfn2; return(OK); case HSMHV2_MOD_WFN3: value->rValue = model->HSMHV2_wfn3; return(OK); case HSMHV2_MOD_WFVBS: value->rValue = model->HSMHV2_wfvbs; return(OK); case HSMHV2_MOD_WNSTI: value->rValue = model->HSMHV2_wnsti; return(OK); case HSMHV2_MOD_WWSTI: value->rValue = model->HSMHV2_wwsti; return(OK); case HSMHV2_MOD_WSCSTI1: value->rValue = model->HSMHV2_wscsti1; return(OK); case HSMHV2_MOD_WSCSTI2: value->rValue = model->HSMHV2_wscsti2; return(OK); case HSMHV2_MOD_WVTHSTI: value->rValue = model->HSMHV2_wvthsti; return(OK); case HSMHV2_MOD_WMUESTI1: value->rValue = model->HSMHV2_wmuesti1; return(OK); case HSMHV2_MOD_WMUESTI2: value->rValue = model->HSMHV2_wmuesti2; return(OK); case HSMHV2_MOD_WMUESTI3: value->rValue = model->HSMHV2_wmuesti3; return(OK); case HSMHV2_MOD_WNSUBPSTI1: value->rValue = model->HSMHV2_wnsubpsti1; return(OK); case HSMHV2_MOD_WNSUBPSTI2: value->rValue = model->HSMHV2_wnsubpsti2; return(OK); case HSMHV2_MOD_WNSUBPSTI3: value->rValue = model->HSMHV2_wnsubpsti3; return(OK); case HSMHV2_MOD_WCGSO: value->rValue = model->HSMHV2_wcgso; return(OK); case HSMHV2_MOD_WCGDO: value->rValue = model->HSMHV2_wcgdo; return(OK); case HSMHV2_MOD_WJS0: value->rValue = model->HSMHV2_wjs0; return(OK); case HSMHV2_MOD_WJS0SW: value->rValue = model->HSMHV2_wjs0sw; return(OK); case HSMHV2_MOD_WNJ: value->rValue = model->HSMHV2_wnj; return(OK); case HSMHV2_MOD_WCISBK: value->rValue = model->HSMHV2_wcisbk; return(OK); case HSMHV2_MOD_WCLM1: value->rValue = model->HSMHV2_wclm1; return(OK); case HSMHV2_MOD_WCLM2: value->rValue = model->HSMHV2_wclm2; return(OK); case HSMHV2_MOD_WCLM3: value->rValue = model->HSMHV2_wclm3; return(OK); case HSMHV2_MOD_WWFC: value->rValue = model->HSMHV2_wwfc; return(OK); case HSMHV2_MOD_WGIDL1: value->rValue = model->HSMHV2_wgidl1; return(OK); case HSMHV2_MOD_WGIDL2: value->rValue = model->HSMHV2_wgidl2; return(OK); case HSMHV2_MOD_WGLEAK1: value->rValue = model->HSMHV2_wgleak1; return(OK); case HSMHV2_MOD_WGLEAK2: value->rValue = model->HSMHV2_wgleak2; return(OK); case HSMHV2_MOD_WGLEAK3: value->rValue = model->HSMHV2_wgleak3; return(OK); case HSMHV2_MOD_WGLEAK6: value->rValue = model->HSMHV2_wgleak6; return(OK); case HSMHV2_MOD_WGLKSD1: value->rValue = model->HSMHV2_wglksd1; return(OK); case HSMHV2_MOD_WGLKSD2: value->rValue = model->HSMHV2_wglksd2; return(OK); case HSMHV2_MOD_WGLKB1: value->rValue = model->HSMHV2_wglkb1; return(OK); case HSMHV2_MOD_WGLKB2: value->rValue = model->HSMHV2_wglkb2; return(OK); case HSMHV2_MOD_WNFTRP: value->rValue = model->HSMHV2_wnftrp; return(OK); case HSMHV2_MOD_WNFALP: value->rValue = model->HSMHV2_wnfalp; return(OK); case HSMHV2_MOD_WVDIFFJ: value->rValue = model->HSMHV2_wvdiffj; return(OK); case HSMHV2_MOD_WIBPC1: value->rValue = model->HSMHV2_wibpc1; return(OK); case HSMHV2_MOD_WIBPC2: value->rValue = model->HSMHV2_wibpc2; return(OK); case HSMHV2_MOD_WCGBO: value->rValue = model->HSMHV2_wcgbo; return(OK); case HSMHV2_MOD_WCVDSOVER: value->rValue = model->HSMHV2_wcvdsover; return(OK); case HSMHV2_MOD_WFALPH: value->rValue = model->HSMHV2_wfalph; return(OK); case HSMHV2_MOD_WNPEXT: value->rValue = model->HSMHV2_wnpext; return(OK); case HSMHV2_MOD_WPOWRAT: value->rValue = model->HSMHV2_wpowrat; return(OK); case HSMHV2_MOD_WRD: value->rValue = model->HSMHV2_wrd; return(OK); case HSMHV2_MOD_WRD22: value->rValue = model->HSMHV2_wrd22; return(OK); case HSMHV2_MOD_WRD23: value->rValue = model->HSMHV2_wrd23; return(OK); case HSMHV2_MOD_WRD24: value->rValue = model->HSMHV2_wrd24; return(OK); case HSMHV2_MOD_WRDICT1: value->rValue = model->HSMHV2_wrdict1; return(OK); case HSMHV2_MOD_WRDOV13: value->rValue = model->HSMHV2_wrdov13; return(OK); case HSMHV2_MOD_WRDSLP1: value->rValue = model->HSMHV2_wrdslp1; return(OK); case HSMHV2_MOD_WRDVB: value->rValue = model->HSMHV2_wrdvb; return(OK); case HSMHV2_MOD_WRDVD: value->rValue = model->HSMHV2_wrdvd; return(OK); case HSMHV2_MOD_WRDVG11: value->rValue = model->HSMHV2_wrdvg11; return(OK); case HSMHV2_MOD_WRS: value->rValue = model->HSMHV2_wrs; return(OK); case HSMHV2_MOD_WRTH0: value->rValue = model->HSMHV2_wrth0; return(OK); case HSMHV2_MOD_WVOVER: value->rValue = model->HSMHV2_wvover; return(OK); case HSMHV2_MOD_WJS0D: value->rValue = model->HSMHV2_wjs0d; return(OK); case HSMHV2_MOD_WJS0SWD: value->rValue = model->HSMHV2_wjs0swd; return(OK); case HSMHV2_MOD_WNJD: value->rValue = model->HSMHV2_wnjd; return(OK); case HSMHV2_MOD_WCISBKD: value->rValue = model->HSMHV2_wcisbkd; return(OK); case HSMHV2_MOD_WVDIFFJD: value->rValue = model->HSMHV2_wvdiffjd; return(OK); case HSMHV2_MOD_WJS0S: value->rValue = model->HSMHV2_wjs0s; return(OK); case HSMHV2_MOD_WJS0SWS: value->rValue = model->HSMHV2_wjs0sws; return(OK); case HSMHV2_MOD_WNJS: value->rValue = model->HSMHV2_wnjs; return(OK); case HSMHV2_MOD_WCISBKS: value->rValue = model->HSMHV2_wcisbks; return(OK); case HSMHV2_MOD_WVDIFFJS: value->rValue = model->HSMHV2_wvdiffjs; return(OK); /* Cross-term dependence */ case HSMHV2_MOD_PVMAX: value->rValue = model->HSMHV2_pvmax; return(OK); case HSMHV2_MOD_PBGTMP1: value->rValue = model->HSMHV2_pbgtmp1; return(OK); case HSMHV2_MOD_PBGTMP2: value->rValue = model->HSMHV2_pbgtmp2; return(OK); case HSMHV2_MOD_PEG0: value->rValue = model->HSMHV2_peg0; return(OK); case HSMHV2_MOD_PVFBOVER: value->rValue = model->HSMHV2_pvfbover; return(OK); case HSMHV2_MOD_PNOVER: value->rValue = model->HSMHV2_pnover; return(OK); case HSMHV2_MOD_PNOVERS: value->rValue = model->HSMHV2_pnovers; return(OK); case HSMHV2_MOD_PWL2: value->rValue = model->HSMHV2_pwl2; return(OK); case HSMHV2_MOD_PVFBC: value->rValue = model->HSMHV2_pvfbc; return(OK); case HSMHV2_MOD_PNSUBC: value->rValue = model->HSMHV2_pnsubc; return(OK); case HSMHV2_MOD_PNSUBP: value->rValue = model->HSMHV2_pnsubp; return(OK); case HSMHV2_MOD_PSCP1: value->rValue = model->HSMHV2_pscp1; return(OK); case HSMHV2_MOD_PSCP2: value->rValue = model->HSMHV2_pscp2; return(OK); case HSMHV2_MOD_PSCP3: value->rValue = model->HSMHV2_pscp3; return(OK); case HSMHV2_MOD_PSC1: value->rValue = model->HSMHV2_psc1; return(OK); case HSMHV2_MOD_PSC2: value->rValue = model->HSMHV2_psc2; return(OK); case HSMHV2_MOD_PSC3: value->rValue = model->HSMHV2_psc3; return(OK); case HSMHV2_MOD_PPGD1: value->rValue = model->HSMHV2_ppgd1; return(OK); case HSMHV2_MOD_PNDEP: value->rValue = model->HSMHV2_pndep; return(OK); case HSMHV2_MOD_PNINV: value->rValue = model->HSMHV2_pninv; return(OK); case HSMHV2_MOD_PMUECB0: value->rValue = model->HSMHV2_pmuecb0; return(OK); case HSMHV2_MOD_PMUECB1: value->rValue = model->HSMHV2_pmuecb1; return(OK); case HSMHV2_MOD_PMUEPH1: value->rValue = model->HSMHV2_pmueph1; return(OK); case HSMHV2_MOD_PVTMP: value->rValue = model->HSMHV2_pvtmp; return(OK); case HSMHV2_MOD_PWVTH0: value->rValue = model->HSMHV2_pwvth0; return(OK); case HSMHV2_MOD_PMUESR1: value->rValue = model->HSMHV2_pmuesr1; return(OK); case HSMHV2_MOD_PMUETMP: value->rValue = model->HSMHV2_pmuetmp; return(OK); case HSMHV2_MOD_PSUB1: value->rValue = model->HSMHV2_psub1; return(OK); case HSMHV2_MOD_PSUB2: value->rValue = model->HSMHV2_psub2; return(OK); case HSMHV2_MOD_PSVDS: value->rValue = model->HSMHV2_psvds; return(OK); case HSMHV2_MOD_PSVBS: value->rValue = model->HSMHV2_psvbs; return(OK); case HSMHV2_MOD_PSVGS: value->rValue = model->HSMHV2_psvgs; return(OK); case HSMHV2_MOD_PFN1: value->rValue = model->HSMHV2_pfn1; return(OK); case HSMHV2_MOD_PFN2: value->rValue = model->HSMHV2_pfn2; return(OK); case HSMHV2_MOD_PFN3: value->rValue = model->HSMHV2_pfn3; return(OK); case HSMHV2_MOD_PFVBS: value->rValue = model->HSMHV2_pfvbs; return(OK); case HSMHV2_MOD_PNSTI: value->rValue = model->HSMHV2_pnsti; return(OK); case HSMHV2_MOD_PWSTI: value->rValue = model->HSMHV2_pwsti; return(OK); case HSMHV2_MOD_PSCSTI1: value->rValue = model->HSMHV2_pscsti1; return(OK); case HSMHV2_MOD_PSCSTI2: value->rValue = model->HSMHV2_pscsti2; return(OK); case HSMHV2_MOD_PVTHSTI: value->rValue = model->HSMHV2_pvthsti; return(OK); case HSMHV2_MOD_PMUESTI1: value->rValue = model->HSMHV2_pmuesti1; return(OK); case HSMHV2_MOD_PMUESTI2: value->rValue = model->HSMHV2_pmuesti2; return(OK); case HSMHV2_MOD_PMUESTI3: value->rValue = model->HSMHV2_pmuesti3; return(OK); case HSMHV2_MOD_PNSUBPSTI1: value->rValue = model->HSMHV2_pnsubpsti1; return(OK); case HSMHV2_MOD_PNSUBPSTI2: value->rValue = model->HSMHV2_pnsubpsti2; return(OK); case HSMHV2_MOD_PNSUBPSTI3: value->rValue = model->HSMHV2_pnsubpsti3; return(OK); case HSMHV2_MOD_PCGSO: value->rValue = model->HSMHV2_pcgso; return(OK); case HSMHV2_MOD_PCGDO: value->rValue = model->HSMHV2_pcgdo; return(OK); case HSMHV2_MOD_PJS0: value->rValue = model->HSMHV2_pjs0; return(OK); case HSMHV2_MOD_PJS0SW: value->rValue = model->HSMHV2_pjs0sw; return(OK); case HSMHV2_MOD_PNJ: value->rValue = model->HSMHV2_pnj; return(OK); case HSMHV2_MOD_PCISBK: value->rValue = model->HSMHV2_pcisbk; return(OK); case HSMHV2_MOD_PCLM1: value->rValue = model->HSMHV2_pclm1; return(OK); case HSMHV2_MOD_PCLM2: value->rValue = model->HSMHV2_pclm2; return(OK); case HSMHV2_MOD_PCLM3: value->rValue = model->HSMHV2_pclm3; return(OK); case HSMHV2_MOD_PWFC: value->rValue = model->HSMHV2_pwfc; return(OK); case HSMHV2_MOD_PGIDL1: value->rValue = model->HSMHV2_pgidl1; return(OK); case HSMHV2_MOD_PGIDL2: value->rValue = model->HSMHV2_pgidl2; return(OK); case HSMHV2_MOD_PGLEAK1: value->rValue = model->HSMHV2_pgleak1; return(OK); case HSMHV2_MOD_PGLEAK2: value->rValue = model->HSMHV2_pgleak2; return(OK); case HSMHV2_MOD_PGLEAK3: value->rValue = model->HSMHV2_pgleak3; return(OK); case HSMHV2_MOD_PGLEAK6: value->rValue = model->HSMHV2_pgleak6; return(OK); case HSMHV2_MOD_PGLKSD1: value->rValue = model->HSMHV2_pglksd1; return(OK); case HSMHV2_MOD_PGLKSD2: value->rValue = model->HSMHV2_pglksd2; return(OK); case HSMHV2_MOD_PGLKB1: value->rValue = model->HSMHV2_pglkb1; return(OK); case HSMHV2_MOD_PGLKB2: value->rValue = model->HSMHV2_pglkb2; return(OK); case HSMHV2_MOD_PNFTRP: value->rValue = model->HSMHV2_pnftrp; return(OK); case HSMHV2_MOD_PNFALP: value->rValue = model->HSMHV2_pnfalp; return(OK); case HSMHV2_MOD_PVDIFFJ: value->rValue = model->HSMHV2_pvdiffj; return(OK); case HSMHV2_MOD_PIBPC1: value->rValue = model->HSMHV2_pibpc1; return(OK); case HSMHV2_MOD_PIBPC2: value->rValue = model->HSMHV2_pibpc2; return(OK); case HSMHV2_MOD_PCGBO: value->rValue = model->HSMHV2_pcgbo; return(OK); case HSMHV2_MOD_PCVDSOVER: value->rValue = model->HSMHV2_pcvdsover; return(OK); case HSMHV2_MOD_PFALPH: value->rValue = model->HSMHV2_pfalph; return(OK); case HSMHV2_MOD_PNPEXT: value->rValue = model->HSMHV2_pnpext; return(OK); case HSMHV2_MOD_PPOWRAT: value->rValue = model->HSMHV2_ppowrat; return(OK); case HSMHV2_MOD_PRD: value->rValue = model->HSMHV2_prd; return(OK); case HSMHV2_MOD_PRD22: value->rValue = model->HSMHV2_prd22; return(OK); case HSMHV2_MOD_PRD23: value->rValue = model->HSMHV2_prd23; return(OK); case HSMHV2_MOD_PRD24: value->rValue = model->HSMHV2_prd24; return(OK); case HSMHV2_MOD_PRDICT1: value->rValue = model->HSMHV2_prdict1; return(OK); case HSMHV2_MOD_PRDOV13: value->rValue = model->HSMHV2_prdov13; return(OK); case HSMHV2_MOD_PRDSLP1: value->rValue = model->HSMHV2_prdslp1; return(OK); case HSMHV2_MOD_PRDVB: value->rValue = model->HSMHV2_prdvb; return(OK); case HSMHV2_MOD_PRDVD: value->rValue = model->HSMHV2_prdvd; return(OK); case HSMHV2_MOD_PRDVG11: value->rValue = model->HSMHV2_prdvg11; return(OK); case HSMHV2_MOD_PRS: value->rValue = model->HSMHV2_prs; return(OK); case HSMHV2_MOD_PRTH0: value->rValue = model->HSMHV2_prth0; return(OK); case HSMHV2_MOD_PVOVER: value->rValue = model->HSMHV2_pvover; return(OK); case HSMHV2_MOD_PJS0D: value->rValue = model->HSMHV2_pjs0d; return(OK); case HSMHV2_MOD_PJS0SWD: value->rValue = model->HSMHV2_pjs0swd; return(OK); case HSMHV2_MOD_PNJD: value->rValue = model->HSMHV2_pnjd; return(OK); case HSMHV2_MOD_PCISBKD: value->rValue = model->HSMHV2_pcisbkd; return(OK); case HSMHV2_MOD_PVDIFFJD: value->rValue = model->HSMHV2_pvdiffjd; return(OK); case HSMHV2_MOD_PJS0S: value->rValue = model->HSMHV2_pjs0s; return(OK); case HSMHV2_MOD_PJS0SWS: value->rValue = model->HSMHV2_pjs0sws; return(OK); case HSMHV2_MOD_PNJS: value->rValue = model->HSMHV2_pnjs; return(OK); case HSMHV2_MOD_PCISBKS: value->rValue = model->HSMHV2_pcisbks; return(OK); case HSMHV2_MOD_PVDIFFJS: value->rValue = model->HSMHV2_pvdiffjs; return(OK); case HSMHV2_MOD_VGS_MAX: value->rValue = model->HSMHV2vgsMax; return(OK); case HSMHV2_MOD_VGD_MAX: value->rValue = model->HSMHV2vgdMax; return(OK); case HSMHV2_MOD_VGB_MAX: value->rValue = model->HSMHV2vgbMax; return(OK); case HSMHV2_MOD_VDS_MAX: value->rValue = model->HSMHV2vdsMax; return(OK); case HSMHV2_MOD_VBS_MAX: value->rValue = model->HSMHV2vbsMax; return(OK); case HSMHV2_MOD_VBD_MAX: value->rValue = model->HSMHV2vbdMax; return(OK); case HSMHV2_MOD_VGSR_MAX: value->rValue = model->HSMHV2vgsrMax; return(OK); case HSMHV2_MOD_VGDR_MAX: value->rValue = model->HSMHV2vgdrMax; return(OK); case HSMHV2_MOD_VGBR_MAX: value->rValue = model->HSMHV2vgbrMax; return(OK); case HSMHV2_MOD_VBSR_MAX: value->rValue = model->HSMHV2vbsrMax; return(OK); case HSMHV2_MOD_VBDR_MAX: value->rValue = model->HSMHV2vbdrMax; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2init.c0000644000175000017500000000332613546075722023157 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "hsmhv2def.h" #include "hsmhv2itf.h" #include "hsmhv2init.h" SPICEdev HSMHV2info = { .DEVpublic = { .name = "HiSIMHV2", .description = "Hiroshima University STARC IGFET Model - HiSIM_HV v.2", .terms = &HSMHV2nSize, .numNames = &HSMHV2nSize, .termNames = HSMHV2names, .numInstanceParms = &HSMHV2pTSize, .instanceParms = HSMHV2pTable, .numModelParms = &HSMHV2mPTSize, .modelParms = HSMHV2mPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = HSMHV2param, .DEVmodParam = HSMHV2mParam, .DEVload = HSMHV2load, .DEVsetup = HSMHV2setup, .DEVunsetup = HSMHV2unsetup, .DEVpzSetup = HSMHV2setup, .DEVtemperature = HSMHV2temp, .DEVtrunc = HSMHV2trunc, .DEVfindBranch = NULL, .DEVacLoad = HSMHV2acLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = HSMHV2getic, .DEVask = HSMHV2ask, .DEVmodAsk = HSMHV2mAsk, .DEVpzLoad = HSMHV2pzLoad, .DEVconvTest = HSMHV2convTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = HSMHV2noise, .DEVsoaCheck = HSMHV2soaCheck, .DEVinstSize = &HSMHV2iSize, .DEVmodSize = &HSMHV2mSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_hsmhv2_info(void) { return &HSMHV2info; } tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hisimhv2.h0000644000175000017500000000730113546075722022617 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hisimhv.h DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ #include "hsmhv2def.h" #include "ngspice/cktdefs.h" #ifndef _HiSIMHV2_H #define _HiSIMHV2_H /* return value */ #ifndef OK #define HiSIM_OK 0 #define HiSIM_ERROR 1 #else #define HiSIM_OK OK #define HiSIM_ERROR E_PANIC #endif /* MOS type */ #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /* device working mode */ #ifndef CMI_NORMAL_MODE #define HiSIM_NORMAL_MODE 1 #define HiSIM_REVERSE_MODE -1 #else #define HiSIM_NORMAL_MODE CMI_NORMAL_MODE #define HiSIM_REVERSE_MODE CMI_REVERSE_MODE #endif /* others */ #ifndef NULL #define NULL 0 #endif #define HiSIM_FALSE 0 #define HiSIM_TRUE 1 #ifndef return_if_error #define return_if_error(s) { int error = s; if(error) return(error); } #endif extern int HSMHV2evaluate ( double ivds, double ivgs, double ivbs, double ivdsi, double ivgsi, double ivbsi, double vbs_jct, double vbd_jct, double vsubs, double vddp, double deltemp, HSMHV2instance *here, HSMHV2model *model, CKTcircuit *ckt ) ; extern int HSMHV2rdrift ( double vddp, double ivds, double ivbs, double vsubs, double deltemp, HSMHV2instance *here, HSMHV2model *model, CKTcircuit *ckt ) ; extern int HSMHV2dio ( double vbs_jct, double vbd_jct, double deltemp, HSMHV2instance *here, HSMHV2model *model, CKTcircuit *ckt ) ; #endif /* _HiSIMHV2_H */ tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2ld_info_eval.h0000644000175000017500000002141413546075722024640 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.10 FILE : hsmhvld_info_eval.h DATE : 2014.6.11 recent changes: - 2009.01.09 some bugfixes released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ /* print all outputs ------------VV */ if ( model->HSMHV2_info >= 4 ) { here->HSMHV2_csdo = - (here->HSMHV2_cddo + here->HSMHV2_cgdo + here->HSMHV2_cbdo) ; here->HSMHV2_csgo = - (here->HSMHV2_cdgo + here->HSMHV2_cggo + here->HSMHV2_cbgo) ; here->HSMHV2_csbo = - (here->HSMHV2_cdbo + here->HSMHV2_cgbo + here->HSMHV2_cbbo) ; here->HSMHV2_cdso = - (here->HSMHV2_cddo + here->HSMHV2_cdgo + here->HSMHV2_cdbo) ; here->HSMHV2_cgso = - (here->HSMHV2_cgdo + here->HSMHV2_cggo + here->HSMHV2_cgbo) ; here->HSMHV2_csso = - (here->HSMHV2_csdo + here->HSMHV2_csgo + here->HSMHV2_csbo) ; cgdb = dQg_dVds - ((here->HSMHV2_mode > 0) ? here->HSMHV2_cgdo : here->HSMHV2_cgso) ; cggb = dQg_dVgs - here->HSMHV2_cggo ; cgsb = - (dQg_dVds + dQg_dVgs + dQg_dVbs) - ((here->HSMHV2_mode > 0) ? here->HSMHV2_cgso : here->HSMHV2_cgdo) ; cbdb = dQb_dVds - ((here->HSMHV2_mode > 0) ? here->HSMHV2_cbdo : -(here->HSMHV2_cbdo+here->HSMHV2_cbgo+here->HSMHV2_cbbo)) ; cbgb = dQb_dVgs - here->HSMHV2_cbgo ; cbsb = - (dQb_dVds + dQb_dVgs + dQb_dVbs) - ((here->HSMHV2_mode > 0) ? -(here->HSMHV2_cbdo+here->HSMHV2_cbgo+here->HSMHV2_cbbo) : here->HSMHV2_cbdo) ; cddb = dQd_dVds - ((here->HSMHV2_mode > 0) ? here->HSMHV2_cddo : here->HSMHV2_csso) ; cdgb = dQd_dVgs - ((here->HSMHV2_mode > 0) ? here->HSMHV2_cdgo : here->HSMHV2_csgo) ; cdsb = - (dQd_dVds + dQd_dVgs + dQd_dVbs) - ((here->HSMHV2_mode > 0) ? here->HSMHV2_cdso : here->HSMHV2_csdo) ; if (flg_nqs) { /* by implicit differentiation of the nqs equations: */ dQi_nqs_dVds = (dQi_dVds + Iqi_nqs * dtau_dVds )/(1.0 + ag0 * tau ) ; dQi_nqs_dVgs = (dQi_dVgs + Iqi_nqs * dtau_dVgs )/(1.0 + ag0 * tau ) ; dQi_nqs_dVbs = (dQi_dVbs + Iqi_nqs * dtau_dVbs )/(1.0 + ag0 * tau ) ; dQb_nqs_dVds = (dQbulk_dVds + Iqb_nqs * dtaub_dVds)/(1.0 + ag0 * taub) ; dQb_nqs_dVgs = (dQbulk_dVgs + Iqb_nqs * dtaub_dVgs)/(1.0 + ag0 * taub) ; dQb_nqs_dVbs = (dQbulk_dVbs + Iqb_nqs * dtaub_dVbs)/(1.0 + ag0 * taub) ; cgdb_nqs = dQg_nqs_dQi_nqs * dQi_nqs_dVds + dQg_nqs_dQb_nqs * dQb_nqs_dVds ; cggb_nqs = dQg_nqs_dQi_nqs * dQi_nqs_dVgs + dQg_nqs_dQb_nqs * dQb_nqs_dVgs ; cgsb_nqs = - dQg_nqs_dQi_nqs * (dQi_nqs_dVds + dQi_nqs_dVgs + dQi_nqs_dVbs) - dQg_nqs_dQb_nqs * (dQb_nqs_dVds + dQb_nqs_dVgs + dQb_nqs_dVbs) ; cbdb_nqs = dQb_nqs_dVds ; cbgb_nqs = dQb_nqs_dVgs ; cbsb_nqs = -(dQb_nqs_dVds + dQb_nqs_dVgs + dQb_nqs_dVbs) ; cddb_nqs = dQd_nqs_dVds + dQd_nqs_dQi_nqs * dQi_nqs_dVds ; cdgb_nqs= dQd_nqs_dVgs + dQd_nqs_dQi_nqs * dQi_nqs_dVgs ; cdsb_nqs= -(dQd_nqs_dVds + dQd_nqs_dVgs + dQd_nqs_dVbs) - dQd_nqs_dQi_nqs * (dQi_nqs_dVds + dQi_nqs_dVgs + dQi_nqs_dVbs) ; } else { cgdb_nqs = cggb_nqs = cgsb_nqs = cbdb_nqs = cbgb_nqs = cbsb_nqs = cddb_nqs = cdgb_nqs = cdsb_nqs = 0.0 ; } printf( "--- variables returned from HSMHV2evaluate() ----\n" ) ; printf( "von = %12.5e\n" , here->HSMHV2_von ) ; printf( "vdsat = %12.5e\n" , here->HSMHV2_vdsat ) ; printf( "ids = %12.5e\n" , here->HSMHV2_ids ) ; printf( "gds = %12.5e\n" , here->HSMHV2_dIds_dVdsi ) ; printf( "gm = %12.5e\n" , here->HSMHV2_dIds_dVgsi ) ; printf( "gmbs = %12.5e\n" , here->HSMHV2_dIds_dVbsi ) ; printf( "cggo = %12.5e\n" , here->HSMHV2_cggo ) ; printf( "cgdo = %12.5e\n" , (here->HSMHV2_mode > 0) ? here->HSMHV2_cgdo : here->HSMHV2_cgso ) ; printf( "cgso = %12.5e\n" , (here->HSMHV2_mode > 0) ? here->HSMHV2_cgso : here->HSMHV2_cgdo ) ; printf( "cdgo = %12.5e\n" , (here->HSMHV2_mode > 0) ? here->HSMHV2_cdgo : here->HSMHV2_csgo ) ; printf( "cddo = %12.5e\n" , (here->HSMHV2_mode > 0) ? here->HSMHV2_cddo : here->HSMHV2_csso ) ; printf( "cdso = %12.5e\n" , (here->HSMHV2_mode > 0) ? here->HSMHV2_cdso : here->HSMHV2_csdo ) ; printf( "csgo = %12.5e\n" , (here->HSMHV2_mode > 0) ? here->HSMHV2_csgo : here->HSMHV2_cdgo ) ; printf( "csdo = %12.5e\n" , (here->HSMHV2_mode > 0) ? here->HSMHV2_csdo : here->HSMHV2_cdso ) ; printf( "csso = %12.5e\n" , (here->HSMHV2_mode > 0) ? here->HSMHV2_csso : here->HSMHV2_cddo ) ; printf( "qg = %12.5e\n" , Qg + Qg_nqs) ; printf( "qd = %12.5e\n" , Qd + Qd_nqs) ; printf( "qs = %12.5e\n" , Qs + Qs_nqs) ; printf( "cggb = %12.5e\n" , cggb + cggb_nqs ) ; printf( "cgsb = %12.5e\n" , cgsb + cgsb_nqs ) ; printf( "cgdb = %12.5e\n" , cgdb + cgdb_nqs ) ; printf( "cbgb = %12.5e\n" , cbgb + cbgb_nqs ) ; printf( "cbsb = %12.5e\n" , cbsb + cbsb_nqs ) ; printf( "cbdb = %12.5e\n" , cbdb + cbdb_nqs ) ; printf( "cdgb = %12.5e\n" , cdgb + cdgb_nqs ) ; printf( "cdsb = %12.5e\n" , cdsb + cdsb_nqs ) ; printf( "cddb = %12.5e\n" , cddb + cddb_nqs ) ; printf( "ibd = %12.5e\n" , Ibd ) ; printf( "ibs = %12.5e\n" , Ibs ) ; printf( "gbd = %12.5e\n" , Gbd ) ; printf( "gbs = %12.5e\n" , Gbs ) ; printf( "capbd = %12.5e\n" , Cbd ) ; printf( "capbs = %12.5e\n" , Cbs ) ; printf( "qbd = %12.5e\n" , Qbd ) ; printf( "qbs = %12.5e\n" , Qbs ) ; printf( "isub = %12.5e\n" , here->HSMHV2_isub ) ; printf( "gbgs = %12.5e\n" , dIsub_dVgs + dIsubs_dVgs ) ; printf( "gbds = %12.5e\n" , dIsub_dVds + dIsubs_dVds ) ; printf( "gbbs = %12.5e\n" , dIsub_dVbs + dIsubs_dVbs ) ; printf( "S_flicker_noise * ( freq / gain ) = %.16e\n" , here->HSMHV2_noiflick ) ; printf( "S_thermal_noise / ( gain * 4kT ) = %.16e\n" , here->HSMHV2_noithrml ) ; printf( "S_induced_gate_noise / ( gain * freq^2 ) = %.16e\n" , here->HSMHV2_noiigate ) ; printf( "cross-correlation coefficient (= Sigid/sqrt(Sig*Sid) ) = %.16e\n" , here->HSMHV2_noicross ) ; /* print Surface Potentials */ /* printf( "ivds %e ivgs %e ivbs %e Ps0 %.16e Pds %.16e\n" , */ /* ivds, ivgs, ivbs, here->HSMHV2_ps0_prv, here->HSMHV2_pds_prv ) ; */ } /* print all outputs ------------AA */ /* End of HSMHV2ld_info_eval.h */ tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2temp.c0000644000175000017500000005001213546075722023153 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhvtemp.c DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "hsmhv2def.h" #include "hsmhv2evalenv.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define RANGECHECK(param, min, max, pname) \ if ( (param) < (min) || (param) > (max) ) { \ printf("warning(HiSIM_HV(%s)): The model/instance parameter %s (= %e) must be in the range [%e , %e].\n", model->HSMHV2modName,\ (pname), (param), (min), (max) ); \ } #define Fn_SU( y , x , xmax , delta , dx ) { \ TMF1 = ( xmax ) - ( x ) - ( delta ) ; \ TMF2 = 4.0 * ( xmax ) * ( delta ) ; \ TMF2 = TMF2 > 0.0 ? TMF2 : -( TMF2) ; \ TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \ dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \ y = ( xmax ) - 0.5 * ( TMF1 + TMF2 ) ; \ } #define Fn_SL( y , x , xmin , delta , dx ) { \ TMF1 = ( x ) - ( xmin ) - ( delta ) ; \ TMF2 = 4.0 * ( xmin ) * ( delta ) ; \ TMF2 = TMF2 > 0.0 ? TMF2 : -( TMF2 ); \ TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \ dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \ y = ( xmin ) + 0.5 * ( TMF1 + TMF2 ) ; \ } #define C_m2cm (1.0e2) int HSMHV2temp( GENmodel *inModel, CKTcircuit *ckt) { HSMHV2model *model = (HSMHV2model *)inModel ; HSMHV2instance *here ; HSMHV2binningParam *pParam ; HSMHV2modelMKSParam *modelMKS ; HSMHV2hereMKSParam *hereMKS ; double mueph =0.0 ; double Leff=0.0, dL =0.0, dLLD=0.0, LG=0.0, Weff=0.0, dW =0.0, dWLD=0.0, dWCV=0.0, WG =0.0, WL =0.0, Lgate =0.0, Wgate =0.0 ; double Nsubpp=0.0, Nsubps=0.0, Nsub=0.0, q_Nsub=0.0, Nsubb=0.0, Npext =0.0 ; double Lod_half=0.0, Lod_half_ref =0.0 ; double T0, T1, T2, T3, T4, T5, T6, T7 ; /* temperature-dependent variables */ double Eg =0.0, TTEMP0=0.0, TTEMP=0.0, beta=0.0, Nin=0.0 ; double Tdiff0 = 0.0, Tdiff0_2 = 0.0, Tdiff = 0.0, Tdiff_2 = 0.0; double js=0.0, jssw=0.0, js2=0.0, jssw2 =0.0 ; int i=0 ; double TMF1 , TMF2 ; double GDLD =0.0 ; double log_Tratio =0.0 ; const double small = 1.0e-50 ; const double dlt_rd23 = 1.0e-6 / C_m2cm ; const double large_arg = 80 ; for ( ;model ;model = HSMHV2nextModel(model)) { modelMKS = &model->modelMKS ; model->HSMHV2_vcrit = CONSTvt0 * log( CONSTvt0 / (CONSTroot2 * 1.0e-14) ) ; /* Quantum Mechanical Effect */ if ( ( model->HSMHV2_qme1 == 0.0 && model->HSMHV2_qme3 == 0.0 ) || model->HSMHV2_qme2 == 0.0 ) { model->HSMHV2_flg_qme = 0 ; } else { model->HSMHV2_flg_qme = 1 ; model->HSMHV2_qme12 = model->HSMHV2_qme1 / ( model->HSMHV2_qme2 * model->HSMHV2_qme2 ) ; } for ( here = HSMHV2instances(model); here; here = HSMHV2nextInstance(here)) { pParam = &here->pParam ; hereMKS = &here->hereMKS ; here->HSMHV2_lgate = Lgate = here->HSMHV2_l + model->HSMHV2_xl ; Wgate = here->HSMHV2_w / here->HSMHV2_nf + model->HSMHV2_xw ; LG = Lgate * C_m2um ; here->HSMHV2_wg = WG = Wgate * C_m2um ; WL = WG * LG ; GDLD = model->HSMHV2_gdld * C_m2um ; /* Band gap */ here->HSMHV2_egtnom = pParam->HSMHV2_eg0 - model->HSMHV2_ktnom * ( 90.25e-6 + model->HSMHV2_ktnom * 1.0e-7 ) ; /* C_EOX */ here->HSMHV2_cecox = C_VAC * model->HSMHV2_kappa ; /* Vth reduction for small Vds */ here->HSMHV2_msc = model->HSMHV2_scp22 ; /* Poly-Si Gate Depletion */ if ( pParam->HSMHV2_pgd1 == 0.0 ) { here->HSMHV2_flg_pgd = 0 ; } else { here->HSMHV2_flg_pgd = 1 ; } /* CLM5 & CLM6 */ here->HSMHV2_clmmod = 1e0 + pow( LG , model->HSMHV2_clm5 ) * model->HSMHV2_clm6 ; /* Half length of diffusion */ T1 = 1.0 / (model->HSMHV2_saref + 0.5 * here->HSMHV2_l) + 1.0 / (model->HSMHV2_sbref + 0.5 * here->HSMHV2_l); Lod_half_ref = 2.0 / T1 ; if (here->HSMHV2_sa > 0.0 && here->HSMHV2_sb > 0.0 && (here->HSMHV2_nf == 1.0 || (here->HSMHV2_nf > 1.0 && here->HSMHV2_sd > 0.0))) { T1 = 0.0; for (i = 0; i < here->HSMHV2_nf; i++) { T1 += 1.0 / (here->HSMHV2_sa + 0.5 * here->HSMHV2_l + i * (here->HSMHV2_sd + here->HSMHV2_l)) + 1.0 / (here->HSMHV2_sb + 0.5 * here->HSMHV2_l + i * (here->HSMHV2_sd + here->HSMHV2_l)); } Lod_half = 2.0 * here->HSMHV2_nf / T1; } else { Lod_half = 0.0; } Npext = pParam->HSMHV2_npext ; here->HSMHV2_mueph1 = pParam->HSMHV2_mueph1 ; here->HSMHV2_nsubp = pParam->HSMHV2_nsubp ; here->HSMHV2_nsubc = pParam->HSMHV2_nsubc ; /* DFM */ if ( model->HSMHV2_codfm == 1 && here->HSMHV2_nsubcdfm_Given ) { RANGECHECK(here->HSMHV2_nsubcdfm, 1.0e16, 1.0e19, "NSUBCDFM") ; here->HSMHV2_mueph1 *= model->HSMHV2_mphdfm * ( log(hereMKS->HSMHV2_nsubcdfm) - log(here->HSMHV2_nsubc) ) + 1.0 ; here->HSMHV2_nsubp += hereMKS->HSMHV2_nsubcdfm - here->HSMHV2_nsubc ; Npext += hereMKS->HSMHV2_nsubcdfm - here->HSMHV2_nsubc ; here->HSMHV2_nsubc = hereMKS->HSMHV2_nsubcdfm ; } /* Phonon Scattering (temperature-independent part) */ mueph = here->HSMHV2_mueph1 * (1.0e0 + (model->HSMHV2_muephw / pow( WG, model->HSMHV2_muepwp))) * (1.0e0 + (model->HSMHV2_muephl / pow( LG, model->HSMHV2_mueplp))) * (1.0e0 + (model->HSMHV2_muephs / pow( WL, model->HSMHV2_muepsp))); if (Lod_half > 0.0) { T1 = 1.0e0 / (1.0e0 + pParam->HSMHV2_muesti2) ; T2 = pow (pParam->HSMHV2_muesti1 / Lod_half, pParam->HSMHV2_muesti3) ; T3 = pow (pParam->HSMHV2_muesti1 / Lod_half_ref, pParam->HSMHV2_muesti3) ; here->HSMHV2_mueph = mueph * (1.0e0 + T1 * T2) / (1.0e0 + T1 * T3); } else { here->HSMHV2_mueph = mueph; } /* Surface Roughness Scattering */ here->HSMHV2_muesr = model->HSMHV2_muesr0 * (1.0e0 + (model->HSMHV2_muesrl / pow (LG, model->HSMHV2_mueslp))) * (1.0e0 + (model->HSMHV2_muesrw / pow (WG, model->HSMHV2_mueswp))) ; /* Coefficients of Qbm for Eeff */ T1 = pow( LG, model->HSMHV2_ndeplp ) ; here->HSMHV2_ndep_o_esi = ( pParam->HSMHV2_ndep * T1 ) / ( T1 + model->HSMHV2_ndepl ) / C_ESI ; here->HSMHV2_ninv_o_esi = pParam->HSMHV2_ninv / C_ESI ; here->HSMHV2_ninvd0 = model->HSMHV2_ninvd * ( 1.0 + (model->HSMHV2_ninvdw / pow( WG, model->HSMHV2_ninvdwp))); /* Metallurgical channel geometry */ dL = model->HSMHV2_xld + (modelMKS->HSMHV2_ll / pow (Lgate + model->HSMHV2_lld, model->HSMHV2_lln)) ; dLLD = model->HSMHV2_xldld + (modelMKS->HSMHV2_ll / pow (Lgate + model->HSMHV2_lld, model->HSMHV2_lln)) ; dW = model->HSMHV2_xwd + (modelMKS->HSMHV2_wl / pow (Wgate + model->HSMHV2_wld, model->HSMHV2_wln)) ; dWLD = model->HSMHV2_xwdld + (modelMKS->HSMHV2_wl / pow (Wgate + model->HSMHV2_wld, model->HSMHV2_wln)) ; dWCV = model->HSMHV2_xwdc + (modelMKS->HSMHV2_wl / pow (Wgate + model->HSMHV2_wld, model->HSMHV2_wln)) ; Leff = Lgate - ( dL + dLLD ) ; if ( Leff <= 0.0 ) { IFuid namarr[2]; namarr[0] = here->HSMHV2name; namarr[1] = model->HSMHV2modName; (*(SPfrontEnd->IFerror)) ( ERR_FATAL, "HiSIM_HV: MOSFET(%s) MODEL(%s): effective channel length is negative or 0", namarr ); return (E_BADPARM); } here->HSMHV2_leff = Leff ; /* Wg dependence for short channel devices */ here->HSMHV2_lgatesm = Lgate + model->HSMHV2_wl1 / pow( WL , model->HSMHV2_wl1p ) ; here->HSMHV2_dVthsm = pParam->HSMHV2_wl2 / pow( WL , model->HSMHV2_wl2p ) ; /* Lg dependence of wsti */ T1 = 1.0e0 + model->HSMHV2_wstil / pow( here->HSMHV2_lgatesm * C_m2um , model->HSMHV2_wstilp ) ; T2 = 1.0e0 + model->HSMHV2_wstiw / pow( WG , model->HSMHV2_wstiwp ) ; here->HSMHV2_wsti = pParam->HSMHV2_wsti * T1 * T2 ; here->HSMHV2_weff = Weff = Wgate - 2.0e0 * dW ; here->HSMHV2_weff_ld = Wgate - 2.0e0 * dWLD ; here->HSMHV2_weff_cv = Wgate - 2.0e0 * dWCV ; if ( Weff <= 0.0 ) { IFuid namarr[2]; namarr[0] = here->HSMHV2name; namarr[1] = model->HSMHV2modName; (*(SPfrontEnd->IFerror)) ( ERR_FATAL, "HiSIM_HV: MOSFET(%s) MODEL(%s): effective channel width is negative or 0", namarr ); return (E_BADPARM); } here->HSMHV2_weff_nf = Weff * here->HSMHV2_nf ; here->HSMHV2_weffcv_nf = here->HSMHV2_weff_cv * here->HSMHV2_nf ; /* Surface impurity profile */ /* Note: Sign Changed --> */ Nsubpp = here->HSMHV2_nsubp * (1.0e0 + (model->HSMHV2_nsubp0 / pow (WG, model->HSMHV2_nsubwp))) ; /* <-- Note: Sign Changed */ if (Lod_half > 0.0) { T1 = 1.0e0 / (1.0e0 + pParam->HSMHV2_nsubpsti2) ; T2 = pow (pParam->HSMHV2_nsubpsti1 / Lod_half, pParam->HSMHV2_nsubpsti3) ; T3 = pow (pParam->HSMHV2_nsubpsti1 / Lod_half_ref, pParam->HSMHV2_nsubpsti3) ; Nsubps = Nsubpp * (1.0e0 + T1 * T2) / (1.0e0 + T1 * T3) ; } else { Nsubps = Nsubpp ; } here->HSMHV2_nsubc *= 1.0e0 + ( model->HSMHV2_nsubcw / pow ( WG, model->HSMHV2_nsubcwp )) ; if( Lgate > model->HSMHV2_lp ){ Nsub = (here->HSMHV2_nsubc * (Lgate - model->HSMHV2_lp) + Nsubps * model->HSMHV2_lp) / Lgate ; } else { Nsub = Nsubps + (Nsubps - here->HSMHV2_nsubc) * (model->HSMHV2_lp - Lgate) / model->HSMHV2_lp ; } T3 = 0.5e0 * Lgate - model->HSMHV2_lp ; T1 = 1.0e0 / ( 1.0e0 / T3 + 1.0e0 / model->HSMHV2_lpext ) ; T2 = Fn_Max (0.0e0, T1) ; here->HSMHV2_nsub = Nsub = Nsub + T2 * (Npext - here->HSMHV2_nsubc) / Lgate ; here->HSMHV2_qnsub = q_Nsub = C_QE * Nsub ; here->HSMHV2_qnsub_esi = q_Nsub * C_ESI ; here->HSMHV2_2qnsub_esi = 2.0 * here->HSMHV2_qnsub_esi ; /* Pocket Overlap (temperature-independent part) */ if ( Lgate <= 2.0e0 * model->HSMHV2_lp ) { Nsubb = 2.0e0 * Nsubps - (Nsubps - here->HSMHV2_nsubc) * Lgate / model->HSMHV2_lp - here->HSMHV2_nsubc ; here->HSMHV2_ptovr0 = log (Nsubb / here->HSMHV2_nsubc) ; /* here->HSMHV2_ptovr0 will be divided by beta later. */ } else { here->HSMHV2_ptovr0 = 0.0e0 ; } /* depletion MOS (temperature-independent part) */ here->HSMHV2_ndepm = modelMKS->HSMHV2_ndepm ; /* costi0 and costi1 for STI transistor model (temperature-independent part) */ here->HSMHV2_costi00 = sqrt (2.0 * C_QE * pParam->HSMHV2_nsti * C_ESI ) ; here->HSMHV2_nsti_p2 = 1.0 / ( pParam->HSMHV2_nsti * pParam->HSMHV2_nsti ) ; /* Velocity Temperature Dependence (Temperature-dependent part will be multiplied later.) */ here->HSMHV2_vmax0 = (1.0e0 + (pParam->HSMHV2_vover / pow (LG, model->HSMHV2_voverp))) * (1.0e0 + (model->HSMHV2_vovers / pow (WL, model->HSMHV2_voversp))) ; /* 2 phi_B (temperature-independent) */ /* @300K, with pocket */ here->HSMHV2_pb20 = 2.0e0 / C_b300 * log (Nsub / C_Nin0) ; /* @300K, w/o pocket */ here->HSMHV2_pb2c = 2.0e0 / C_b300 * log (here->HSMHV2_nsubc / C_Nin0) ; /* constant for Poly depletion */ here->HSMHV2_cnstpgd = pow ( 1e0 + 1e0 / LG , model->HSMHV2_pgd4 ) * pParam->HSMHV2_pgd1 ; /* Gate resistance */ if ( here->HSMHV2_corg == 1 ) { T1 = here->HSMHV2_xgw + Weff / (3.0e0 * here->HSMHV2_ngcon); T2 = Lgate - here->HSMHV2_xgl; here->HSMHV2_grg = model->HSMHV2_rshg * T1 / (here->HSMHV2_ngcon * T2 * here->HSMHV2_nf); if (here->HSMHV2_grg > 1.0e-3) here->HSMHV2_grg = here->HSMHV2_m / here->HSMHV2_grg; else { here->HSMHV2_grg = here->HSMHV2_m * 1.0e3; printf("warning(HiSIM_HV(%s)): The gate conductance reset to 1.0e3 mho.\n",model->HSMHV2modName); } } /* Process source/drain series resistamce */ if ( model->HSMHV2_rsh > 0.0 ) { here->HSMHV2_rd0 = model->HSMHV2_rsh * here->HSMHV2_nrd ; } else { here->HSMHV2_rd0 = 0.0 ; } if ( pParam->HSMHV2_rd > 0.0 || pParam->HSMHV2_rs > 0.0 ) { here->HSMHV2_rdtemp0 = 1.0 + model->HSMHV2_rds / pow( WL , model->HSMHV2_rdsp ) ; if( pParam->HSMHV2_rdvd != 0.0 ){ T7 = ( 1.0 + model->HSMHV2_rdvds / pow( WL , model->HSMHV2_rdvdsp ) ); T6 = ( - model->HSMHV2_rdvdl * pow( LG , model->HSMHV2_rdvdlp ) ) ; if(T6 > large_arg) T6 = large_arg ; T6 = exp( T6 ) ; here->HSMHV2_rdvdtemp0 = T6 * T7 ; } } if( pParam->HSMHV2_rd23 != 0.0 ){ T2 = ( 1.0 + model->HSMHV2_rd23s / pow( WL , model->HSMHV2_rd23sp ) ); T1 = ( - model->HSMHV2_rd23l * pow( LG , model->HSMHV2_rd23lp ) ) ; if(T1 > large_arg) T1 = large_arg ; T1 = exp( T1 ) ; T3 = pParam->HSMHV2_rd23 * T2 * T1 ; here->HSMHV2_rd23 = 0.5 * ( T3 + sqrt ( T3 * T3 + 4.0 * dlt_rd23 * dlt_rd23 ) ) ; } else { here->HSMHV2_rd23 = 0.0 ; } if ( model->HSMHV2_rsh > 0.0 ) { here->HSMHV2_rs0 = model->HSMHV2_rsh * here->HSMHV2_nrs ; } else { here->HSMHV2_rs0 = 0.0 ; } here->HSMHV2_Xmax = sqrt ( model->HSMHV2_rdrdjunc * model->HSMHV2_rdrdjunc + model->HSMHV2_xldld * model->HSMHV2_xldld ) ; if(pParam->HSMHV2_nover != 0.0) { here->HSMHV2_kdep = 2.0 * C_ESI / ( C_QE * pParam->HSMHV2_nover ) ; here->HSMHV2_kjunc = 2.0 * C_ESI / C_QE * here->HSMHV2_nsubc / ( pParam->HSMHV2_nover + here->HSMHV2_nsubc ) / pParam->HSMHV2_nover ; } here->HSMHV2_rdrcxw = 1.0e0 ; here->HSMHV2_rdrvmaxw = 1.0e0 + (model->HSMHV2_rdrvmaxw / pow( WG, model->HSMHV2_rdrvmaxwp)) ; here->HSMHV2_rdrvmaxl = 1.0e0 + (model->HSMHV2_rdrvmaxl / pow( LG, model->HSMHV2_rdrvmaxlp)) ; here->HSMHV2_rdrmuel = 1.0e0 + (model->HSMHV2_rdrmuel / pow( LG, model->HSMHV2_rdrmuelp )) ; /* Body resistance */ if ( here->HSMHV2_corbnet == 1 ) { if (here->HSMHV2_rbpb < 1.0e-3) here->HSMHV2_grbpb = here->HSMHV2_m * 1.0e3 ; else here->HSMHV2_grbpb = here->HSMHV2_m * ( model->HSMHV2_gbmin + 1.0 / here->HSMHV2_rbpb ) ; if (here->HSMHV2_rbps < 1.0e-3) here->HSMHV2_grbps = here->HSMHV2_m * 1.0e3 ; else here->HSMHV2_grbps = here->HSMHV2_m * ( model->HSMHV2_gbmin + 1.0 / here->HSMHV2_rbps ) ; if (here->HSMHV2_rbpd < 1.0e-3) here->HSMHV2_grbpd = here->HSMHV2_m * 1.0e3 ; else here->HSMHV2_grbpd = here->HSMHV2_m * ( model->HSMHV2_gbmin + 1.0 / here->HSMHV2_rbpd ) ; } /* Vdseff */ if( model->HSMHV2_coddlt == 0) { T1 = model->HSMHV2_ddltslp * LG + model->HSMHV2_ddltict ; if ( T1 < 0.0 ) { T1 = 0.0 ; } here->HSMHV2_ddlt = T1 * model->HSMHV2_ddltmax / ( T1 + model->HSMHV2_ddltmax ) + 1.0 ; } else { T1 = model->HSMHV2_ddltslp * LG ; if ( T1 < 0.0 ) { T1 = 0.0 ; } here->HSMHV2_ddlt = T1 * model->HSMHV2_ddltmax / ( T1 + model->HSMHV2_ddltmax ) + model->HSMHV2_ddltict + small ; } /* Isub */ T2 = pow( Weff , model->HSMHV2_svgswp ) ; here->HSMHV2_vg2const = pParam->HSMHV2_svgs * ( 1.0e0 + modelMKS->HSMHV2_svgsl / pow( here->HSMHV2_lgate , model->HSMHV2_svgslp ) ) * ( T2 / ( T2 + modelMKS->HSMHV2_svgsw ) ) ; here->HSMHV2_xvbs = pParam->HSMHV2_svbs * ( 1.0e0 + modelMKS->HSMHV2_svbsl / pow( here->HSMHV2_lgate , model->HSMHV2_svbslp ) ) ; here->HSMHV2_xgate = modelMKS->HSMHV2_slg * ( 1.0 + modelMKS->HSMHV2_slgl / pow( here->HSMHV2_lgate , model->HSMHV2_slglp ) ) ; here->HSMHV2_xsub1 = pParam->HSMHV2_sub1 * ( 1.0 + modelMKS->HSMHV2_sub1l / pow( here->HSMHV2_lgate , model->HSMHV2_sub1lp ) ) ; here->HSMHV2_xsub2 = pParam->HSMHV2_sub2 * ( 1.0 + modelMKS->HSMHV2_sub2l / here->HSMHV2_lgate ) ; here->HSMHV2_subld1 = model->HSMHV2_subld1 * ( 1.0 + model->HSMHV2_subld1l / pow( LG , model->HSMHV2_subld1lp ) ) ; /* IBPC */ here->HSMHV2_ibpc1 = pParam->HSMHV2_ibpc1 * ( 1.0 + model->HSMHV2_ibpc1l / pow( LG , model->HSMHV2_ibpc1lp ) ) ; /* Fringing capacitance */ here->HSMHV2_cfrng = C_EOX / ( C_Pi / 2.0e0 ) * here->HSMHV2_weff_nf * log( 1.0e0 + model->HSMHV2_tpoly / model->HSMHV2_tox ) ; /* Additional term of lateral-field-induced capacitance */ here->HSMHV2_cqyb0 = C_m2um * here->HSMHV2_weff_nf * model->HSMHV2_xqy1 / pow( LG , model->HSMHV2_xqy2 ) ; /* Parasitic component of the channel current */ here->HSMHV2_ptl0 = model->HSMHV2_ptl * pow( LG , - model->HSMHV2_ptlp ) ; here->HSMHV2_pt40 = model->HSMHV2_pt4 * pow( LG , - model->HSMHV2_pt4p ) ; here->HSMHV2_gdl0 = model->HSMHV2_gdl * pow( LG + GDLD , - model->HSMHV2_gdlp ) ; /* Self heating */ pParam->HSMHV2_rth = pParam->HSMHV2_rth0 / ( here->HSMHV2_m * here->HSMHV2_weff_nf ) * ( 1.0 + model->HSMHV2_rth0w / pow( WG , model->HSMHV2_rth0wp ) ); pParam->HSMHV2_cth = modelMKS->HSMHV2_cth0 * ( here->HSMHV2_m * here->HSMHV2_weff_nf ) ; pParam->HSMHV2_rth *= ( 1.0 / pow( here->HSMHV2_nf , model->HSMHV2_rth0nf ) ) ; here->HSMHV2_rthtemp0 = 1.0 / pow( here->HSMHV2_nf , model->HSMHV2_rth0nf ) / ( here->HSMHV2_m * here->HSMHV2_weff_nf ) * ( 1.0 + model->HSMHV2_rth0w / pow( WG , model->HSMHV2_rth0wp ) ); /*-----------------------------------------------------------* * Temperature dependent constants. *-----------------*/ if ( here->HSMHV2tempNode < 0 || pParam->HSMHV2_rth0 == 0.0 ) { #include "hsmhv2temp_eval.h" #include "hsmhv2temp_eval_rdri.h" #include "hsmhv2temp_eval_dio.h" } /* end of if ( here->HSMHV2tempNode < 0 || pParam->HSMHV2_rth0 == 0.0 ) */ } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisimhv2/Makefile.am0000644000175000017500000000152213546075722022750 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libhisimhv2.la libhisimhv2_la_SOURCES = hisimhv2.h \ hsmhv2.c \ hsmhv2acld.c \ hsmhv2ask.c \ hsmhv2cvtest.c \ hsmhv2def.h \ hsmhv2eval.c \ hsmhv2eval_dep.h \ hsmhv2eval_dio.c \ hsmhv2eval_qover.h \ hsmhv2eval_rdrift.c \ hsmhv2evalenv.h \ hsmhv2ext.h \ hsmhv2getic.c \ hsmhv2init.c \ hsmhv2init.h \ hsmhv2itf.h \ hsmhv2ld.c \ hsmhv2ld_info_eval.h \ hsmhv2mask.c \ hsmhv2mpar.c \ hsmhv2noi.c \ hsmhv2par.c \ hsmhv2pzld.c \ hsmhv2set.c \ hsmhv2soachk.c \ hsmhv2temp.c \ hsmhv2temp_eval.h \ hsmhv2temp_eval_dio.h \ hsmhv2temp_eval_rdri.h \ hsmhv2trunc.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2pzld.c0000644000175000017500000004737213546075722023176 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhvpzld.c DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "hsmhv2def.h" #include "ngspice/suffix.h" int HSMHV2pzLoad( GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { HSMHV2model *model = (HSMHV2model*)inModel; HSMHV2instance *here; int flg_nqs =0 ; NG_IGNORE(ckt); #define dNode 0 #define dNodePrime 1 #define gNode 2 #define gNodePrime 3 #define sNode 4 #define sNodePrime 5 #define bNodePrime 6 #define bNode 7 #define dbNode 8 #define sbNode 9 #define tempNode 10 #define qiNode 11 #define qbNode 12 for ( ;model != NULL ;model = HSMHV2nextModel(model)) { for ( here = HSMHV2instances(model);here!= NULL ; here = HSMHV2nextInstance(here)) { flg_nqs = model->HSMHV2_conqs ; /* stamp matrix */ /*drain*/ *(here->HSMHV2DdPtr) += here->HSMHV2_ydc_d[dNode] + here->HSMHV2_ydyn_d[dNode] * s->real; *(here->HSMHV2DdPtr +1) += here->HSMHV2_ydyn_d[dNode] * s->imag; *(here->HSMHV2DdpPtr) += here->HSMHV2_ydc_d[dNodePrime] + here->HSMHV2_ydyn_d[dNodePrime] * s->real; *(here->HSMHV2DdpPtr +1) += here->HSMHV2_ydyn_d[dNodePrime] * s->imag; *(here->HSMHV2DgpPtr) += here->HSMHV2_ydc_d[gNodePrime] + here->HSMHV2_ydyn_d[gNodePrime] * s->real; *(here->HSMHV2DgpPtr +1) += here->HSMHV2_ydyn_d[gNodePrime] * s->imag; *(here->HSMHV2DsPtr) += here->HSMHV2_ydc_d[sNode] + here->HSMHV2_ydyn_d[sNode] * s->real; *(here->HSMHV2DsPtr +1) += here->HSMHV2_ydyn_d[sNode] * s->imag; *(here->HSMHV2DbpPtr) += here->HSMHV2_ydc_d[bNodePrime] + here->HSMHV2_ydyn_d[bNodePrime] * s->real; *(here->HSMHV2DbpPtr +1) += here->HSMHV2_ydyn_d[bNodePrime] * s->imag; *(here->HSMHV2DdbPtr) += here->HSMHV2_ydc_d[dbNode] + here->HSMHV2_ydyn_d[dbNode] * s->real; *(here->HSMHV2DdbPtr +1) += here->HSMHV2_ydyn_d[dbNode] * s->imag; if( here->HSMHV2tempNode > 0) { *(here->HSMHV2DtempPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_d[tempNode] + here->HSMHV2_ydyn_d[tempNode] * s->real); *(here->HSMHV2DtempPtr +1) += model->HSMHV2_type * here->HSMHV2_ydyn_d[tempNode] * s->imag; } /*drain prime*/ *(here->HSMHV2DPdPtr) += here->HSMHV2_ydc_dP[dNode] + here->HSMHV2_ydyn_dP[dNode] * s->real; *(here->HSMHV2DPdPtr +1) += here->HSMHV2_ydyn_dP[dNode] * s->imag; *(here->HSMHV2DPdpPtr) += here->HSMHV2_ydc_dP[dNodePrime] + here->HSMHV2_ydyn_dP[dNodePrime] * s->real; *(here->HSMHV2DPdpPtr +1) += here->HSMHV2_ydyn_dP[dNodePrime] * s->imag; *(here->HSMHV2DPgpPtr) += here->HSMHV2_ydc_dP[gNodePrime] + here->HSMHV2_ydyn_dP[gNodePrime] * s->real; *(here->HSMHV2DPgpPtr +1) += here->HSMHV2_ydyn_dP[gNodePrime] * s->imag; *(here->HSMHV2DPsPtr) += here->HSMHV2_ydc_dP[sNode] + here->HSMHV2_ydyn_dP[sNode] * s->real; *(here->HSMHV2DPsPtr +1) += here->HSMHV2_ydyn_dP[sNode] * s->imag; *(here->HSMHV2DPspPtr) += here->HSMHV2_ydc_dP[sNodePrime] + here->HSMHV2_ydyn_dP[sNodePrime] * s->real; *(here->HSMHV2DPspPtr +1) += here->HSMHV2_ydyn_dP[sNodePrime] * s->imag; *(here->HSMHV2DPbpPtr) += here->HSMHV2_ydc_dP[bNodePrime] + here->HSMHV2_ydyn_dP[bNodePrime] * s->real; *(here->HSMHV2DPbpPtr +1) += here->HSMHV2_ydyn_dP[bNodePrime] * s->imag; if( here->HSMHV2tempNode > 0) { *(here->HSMHV2DPtempPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_dP[tempNode] + here->HSMHV2_ydyn_dP[tempNode] * s->real); *(here->HSMHV2DPtempPtr +1) += model->HSMHV2_type * here->HSMHV2_ydyn_dP[tempNode] * s->imag; } if (flg_nqs) { *(here->HSMHV2DPqiPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_dP[qiNode] + here->HSMHV2_ydyn_dP[qiNode] * s->real); *(here->HSMHV2DPqiPtr+1) += model->HSMHV2_type * here->HSMHV2_ydyn_dP[qiNode] * s->imag; } /*gate*/ *(here->HSMHV2GgPtr) += here->HSMHV2_ydc_g[gNode] + here->HSMHV2_ydyn_g[gNode] * s->real; *(here->HSMHV2GgPtr +1) += here->HSMHV2_ydyn_g[gNode] * s->imag; *(here->HSMHV2GgpPtr) += here->HSMHV2_ydc_g[gNodePrime] + here->HSMHV2_ydyn_g[gNodePrime] * s->real; *(here->HSMHV2GgpPtr +1) += here->HSMHV2_ydyn_g[gNodePrime] * s->imag; /*gate prime*/ *(here->HSMHV2GPdPtr) += here->HSMHV2_ydc_gP[dNode] + here->HSMHV2_ydyn_gP[dNode] * s->real; *(here->HSMHV2GPdPtr +1) += here->HSMHV2_ydyn_gP[dNode] * s->imag; *(here->HSMHV2GPdpPtr) += here->HSMHV2_ydc_gP[dNodePrime] + here->HSMHV2_ydyn_gP[dNodePrime] * s->real; *(here->HSMHV2GPdpPtr +1) += here->HSMHV2_ydyn_gP[dNodePrime] * s->imag; *(here->HSMHV2GPgPtr) += here->HSMHV2_ydc_gP[gNode] + here->HSMHV2_ydyn_gP[gNode] * s->real; *(here->HSMHV2GPgPtr +1) += here->HSMHV2_ydyn_gP[gNode] * s->imag; *(here->HSMHV2GPgpPtr) += here->HSMHV2_ydc_gP[gNodePrime] + here->HSMHV2_ydyn_gP[gNodePrime] * s->real; *(here->HSMHV2GPgpPtr +1) += here->HSMHV2_ydyn_gP[gNodePrime] * s->imag; *(here->HSMHV2GPsPtr) += here->HSMHV2_ydc_gP[sNode] + here->HSMHV2_ydyn_gP[sNode] * s->real; *(here->HSMHV2GPsPtr +1) += here->HSMHV2_ydyn_gP[sNode] * s->imag; *(here->HSMHV2GPspPtr) += here->HSMHV2_ydc_gP[sNodePrime] + here->HSMHV2_ydyn_gP[sNodePrime] * s->real; *(here->HSMHV2GPspPtr +1) += here->HSMHV2_ydyn_gP[sNodePrime] * s->imag; *(here->HSMHV2GPbpPtr) += here->HSMHV2_ydc_gP[bNodePrime] + here->HSMHV2_ydyn_gP[bNodePrime] * s->real; *(here->HSMHV2GPbpPtr +1) += here->HSMHV2_ydyn_gP[bNodePrime] * s->imag; if( here->HSMHV2tempNode > 0) { *(here->HSMHV2GPtempPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_gP[tempNode] + here->HSMHV2_ydyn_gP[tempNode] * s->real); *(here->HSMHV2GPtempPtr +1) += model->HSMHV2_type * here->HSMHV2_ydyn_gP[tempNode] * s->imag; } if (flg_nqs) { *(here->HSMHV2GPqiPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_gP[qiNode] + here->HSMHV2_ydyn_gP[qiNode] * s->real); *(here->HSMHV2GPqiPtr+1) += model->HSMHV2_type * here->HSMHV2_ydyn_gP[qiNode] * s->imag; *(here->HSMHV2GPqbPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_gP[qbNode] + here->HSMHV2_ydyn_gP[qbNode] * s->real); *(here->HSMHV2GPqbPtr+1) += model->HSMHV2_type * here->HSMHV2_ydyn_gP[qbNode] * s->imag; } /*source*/ *(here->HSMHV2SdPtr) += here->HSMHV2_ydc_s[dNode] + here->HSMHV2_ydyn_s[dNode] * s->real; *(here->HSMHV2SdPtr +1) += here->HSMHV2_ydyn_s[dNode] * s->imag; *(here->HSMHV2SgpPtr) += here->HSMHV2_ydc_s[gNodePrime] + here->HSMHV2_ydyn_s[gNodePrime] * s->real; *(here->HSMHV2SgpPtr +1) += here->HSMHV2_ydyn_s[gNodePrime] * s->imag; *(here->HSMHV2SsPtr) += here->HSMHV2_ydc_s[sNode] + here->HSMHV2_ydyn_s[sNode] * s->real; *(here->HSMHV2SsPtr +1) += here->HSMHV2_ydyn_s[sNode] * s->imag; *(here->HSMHV2SspPtr) += here->HSMHV2_ydc_s[sNodePrime] + here->HSMHV2_ydyn_s[sNodePrime] * s->real; *(here->HSMHV2SspPtr +1) += here->HSMHV2_ydyn_s[sNodePrime] * s->imag; *(here->HSMHV2SbpPtr) += here->HSMHV2_ydc_s[bNodePrime] + here->HSMHV2_ydyn_s[bNodePrime] * s->real; *(here->HSMHV2SbpPtr +1) += here->HSMHV2_ydyn_s[bNodePrime] * s->imag; *(here->HSMHV2SsbPtr) += here->HSMHV2_ydc_s[sbNode] + here->HSMHV2_ydyn_s[sbNode] * s->real; *(here->HSMHV2SsbPtr +1) += here->HSMHV2_ydyn_s[sbNode] * s->imag; if( here->HSMHV2tempNode > 0) { *(here->HSMHV2StempPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_s[tempNode] + here->HSMHV2_ydyn_s[tempNode] * s->real); *(here->HSMHV2StempPtr +1) += model->HSMHV2_type * here->HSMHV2_ydyn_s[tempNode] * s->imag; } /*source prime*/ *(here->HSMHV2SPdPtr) += here->HSMHV2_ydc_sP[dNode] + here->HSMHV2_ydyn_sP[dNode] * s->real; *(here->HSMHV2SPdPtr +1) += here->HSMHV2_ydyn_sP[dNode] * s->imag; *(here->HSMHV2SPdpPtr) += here->HSMHV2_ydc_sP[dNodePrime] + here->HSMHV2_ydyn_sP[dNodePrime] * s->real; *(here->HSMHV2SPdpPtr +1) += here->HSMHV2_ydyn_sP[dNodePrime] * s->imag; *(here->HSMHV2SPgpPtr) += here->HSMHV2_ydc_sP[gNodePrime] + here->HSMHV2_ydyn_sP[gNodePrime] * s->real; *(here->HSMHV2SPgpPtr +1) += here->HSMHV2_ydyn_sP[gNodePrime] * s->imag; *(here->HSMHV2SPsPtr) += here->HSMHV2_ydc_sP[sNode] + here->HSMHV2_ydyn_sP[sNode] * s->real; *(here->HSMHV2SPsPtr +1) += here->HSMHV2_ydyn_sP[sNode] * s->imag; *(here->HSMHV2SPspPtr) += here->HSMHV2_ydc_sP[sNodePrime] + here->HSMHV2_ydyn_sP[sNodePrime] * s->real; *(here->HSMHV2SPspPtr +1) += here->HSMHV2_ydyn_sP[sNodePrime] * s->imag; *(here->HSMHV2SPbpPtr) += here->HSMHV2_ydc_sP[bNodePrime] + here->HSMHV2_ydyn_sP[bNodePrime] * s->real; *(here->HSMHV2SPbpPtr +1) += here->HSMHV2_ydyn_sP[bNodePrime] * s->imag; if( here->HSMHV2tempNode > 0) { *(here->HSMHV2SPtempPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_sP[tempNode] + here->HSMHV2_ydyn_sP[tempNode] * s->real); *(here->HSMHV2SPtempPtr +1) += model->HSMHV2_type * here->HSMHV2_ydyn_sP[tempNode] * s->imag; } if (flg_nqs) { *(here->HSMHV2SPqiPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_sP[qiNode] + here->HSMHV2_ydyn_sP[qiNode] * s->real); *(here->HSMHV2SPqiPtr+1) += model->HSMHV2_type * here->HSMHV2_ydyn_sP[qiNode] * s->imag; } /*bulk prime*/ *(here->HSMHV2BPdpPtr) += here->HSMHV2_ydc_bP[dNodePrime] + here->HSMHV2_ydyn_bP[dNodePrime] * s->real; *(here->HSMHV2BPdpPtr +1) += here->HSMHV2_ydyn_bP[dNodePrime] * s->imag; *(here->HSMHV2BPgpPtr) += here->HSMHV2_ydc_bP[gNodePrime] + here->HSMHV2_ydyn_bP[gNodePrime] * s->real; *(here->HSMHV2BPgpPtr +1) += here->HSMHV2_ydyn_bP[gNodePrime] * s->imag; *(here->HSMHV2BPspPtr) += here->HSMHV2_ydc_bP[sNodePrime] + here->HSMHV2_ydyn_bP[sNodePrime] * s->real; *(here->HSMHV2BPspPtr +1) += here->HSMHV2_ydyn_bP[sNodePrime] * s->imag; *(here->HSMHV2BPbpPtr) += here->HSMHV2_ydc_bP[bNodePrime] + here->HSMHV2_ydyn_bP[bNodePrime] * s->real; *(here->HSMHV2BPbpPtr +1) += here->HSMHV2_ydyn_bP[bNodePrime] * s->imag; *(here->HSMHV2BPbPtr) += here->HSMHV2_ydc_bP[bNode] + here->HSMHV2_ydyn_bP[bNode] * s->real; *(here->HSMHV2BPbPtr +1) += here->HSMHV2_ydyn_bP[bNode] * s->imag; *(here->HSMHV2BPdbPtr) += here->HSMHV2_ydc_bP[dbNode] + here->HSMHV2_ydyn_bP[dbNode] * s->real; *(here->HSMHV2BPdbPtr +1) += here->HSMHV2_ydyn_bP[dbNode] * s->imag; *(here->HSMHV2BPsbPtr) += here->HSMHV2_ydc_bP[sbNode] + here->HSMHV2_ydyn_bP[sbNode] * s->real; *(here->HSMHV2BPsbPtr +1) += here->HSMHV2_ydyn_bP[sbNode] * s->imag; if( here->HSMHV2tempNode > 0) { *(here->HSMHV2BPtempPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_bP[tempNode] + here->HSMHV2_ydyn_bP[tempNode] * s->real); *(here->HSMHV2BPtempPtr +1) += model->HSMHV2_type * here->HSMHV2_ydyn_bP[tempNode] * s->imag; } if (flg_nqs) { *(here->HSMHV2BPqbPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_bP[qbNode] + here->HSMHV2_ydyn_bP[qbNode] * s->real); *(here->HSMHV2BPqbPtr+1) += model->HSMHV2_type * here->HSMHV2_ydyn_bP[qbNode] * s->imag; } /*bulk*/ *(here->HSMHV2BbpPtr) += here->HSMHV2_ydc_b[bNodePrime] + here->HSMHV2_ydyn_b[bNodePrime] * s->real; *(here->HSMHV2BbpPtr +1) += here->HSMHV2_ydyn_b[bNodePrime] * s->imag; *(here->HSMHV2BbPtr) += here->HSMHV2_ydc_b[bNode] + here->HSMHV2_ydyn_b[bNode] * s->real; *(here->HSMHV2BbPtr +1) += here->HSMHV2_ydyn_b[bNode] * s->imag; /*drain bulk*/ *(here->HSMHV2DBdPtr) += here->HSMHV2_ydc_db[dNode] + here->HSMHV2_ydyn_db[dNode] * s->real; *(here->HSMHV2DBdPtr +1) += here->HSMHV2_ydyn_db[dNode] * s->imag; *(here->HSMHV2DBbpPtr) += here->HSMHV2_ydc_db[bNodePrime] + here->HSMHV2_ydyn_db[bNodePrime] * s->real; *(here->HSMHV2DBbpPtr +1) += here->HSMHV2_ydyn_db[bNodePrime] * s->imag; *(here->HSMHV2DBdbPtr) += here->HSMHV2_ydc_db[dbNode] + here->HSMHV2_ydyn_db[dbNode] * s->real; *(here->HSMHV2DBdbPtr +1) += here->HSMHV2_ydyn_db[dbNode] * s->imag; if( here->HSMHV2tempNode > 0) { *(here->HSMHV2DBtempPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_db[tempNode] + here->HSMHV2_ydyn_db[tempNode] * s->real); *(here->HSMHV2DBtempPtr +1) += model->HSMHV2_type * here->HSMHV2_ydyn_db[tempNode] * s->imag; } /*source bulk*/ *(here->HSMHV2SBsPtr) += here->HSMHV2_ydc_sb[sNode] + here->HSMHV2_ydyn_sb[sNode] * s->real; *(here->HSMHV2SBsPtr +1) += here->HSMHV2_ydyn_sb[sNode] * s->imag; *(here->HSMHV2SBbpPtr) += here->HSMHV2_ydc_sb[bNodePrime] + here->HSMHV2_ydyn_sb[bNodePrime] * s->real; *(here->HSMHV2SBbpPtr +1) += here->HSMHV2_ydyn_sb[bNodePrime] * s->imag; *(here->HSMHV2SBsbPtr) += here->HSMHV2_ydc_sb[sbNode] + here->HSMHV2_ydyn_sb[sbNode] * s->real; *(here->HSMHV2SBsbPtr +1) += here->HSMHV2_ydyn_sb[sbNode] * s->imag; if( here->HSMHV2tempNode > 0) { *(here->HSMHV2SBtempPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_sb[tempNode] + here->HSMHV2_ydyn_sb[tempNode] * s->real); *(here->HSMHV2SBtempPtr +1) += model->HSMHV2_type * here->HSMHV2_ydyn_sb[tempNode] * s->imag; } /*temp*/ if( here->HSMHV2tempNode > 0) { *(here->HSMHV2TempdPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_t[dNode] + here->HSMHV2_ydyn_t[dNode] * s->real); *(here->HSMHV2TempdPtr +1) += model->HSMHV2_type * here->HSMHV2_ydyn_t[dNode] * s->imag; *(here->HSMHV2TempdpPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_t[dNodePrime] + here->HSMHV2_ydyn_t[dNodePrime] * s->real); *(here->HSMHV2TempdpPtr +1) += model->HSMHV2_type * here->HSMHV2_ydyn_t[dNodePrime] * s->imag; *(here->HSMHV2TempgpPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_t[gNodePrime] + here->HSMHV2_ydyn_t[gNodePrime] * s->real); *(here->HSMHV2TempgpPtr +1) += model->HSMHV2_type * here->HSMHV2_ydyn_t[gNodePrime] * s->imag; *(here->HSMHV2TempsPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_t[sNode] + here->HSMHV2_ydyn_t[sNode] * s->real); *(here->HSMHV2TempsPtr +1) += model->HSMHV2_type * here->HSMHV2_ydyn_t[sNode] * s->imag; *(here->HSMHV2TempspPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_t[sNodePrime] + here->HSMHV2_ydyn_t[sNodePrime] * s->real); *(here->HSMHV2TempspPtr +1) += model->HSMHV2_type * here->HSMHV2_ydyn_t[sNodePrime] * s->imag; *(here->HSMHV2TempbpPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_t[bNodePrime] + here->HSMHV2_ydyn_t[bNodePrime] * s->real); *(here->HSMHV2TempbpPtr +1) += model->HSMHV2_type * here->HSMHV2_ydyn_t[bNodePrime] * s->imag; *(here->HSMHV2TemptempPtr) += here->HSMHV2_ydc_t[tempNode] + here->HSMHV2_ydyn_t[tempNode] * s->real; *(here->HSMHV2TemptempPtr +1) += here->HSMHV2_ydyn_t[tempNode] * s->imag; } /* additional entries for flat nqs handling */ if ( flg_nqs ) { /*qi*/ *(here->HSMHV2QIdpPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_qi[dNodePrime] + here->HSMHV2_ydyn_qi[dNodePrime] * s->real); *(here->HSMHV2QIdpPtr+1) += model->HSMHV2_type * here->HSMHV2_ydyn_qi[dNodePrime] * s->imag; *(here->HSMHV2QIgpPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_qi[gNodePrime] + here->HSMHV2_ydyn_qi[gNodePrime] * s->real); *(here->HSMHV2QIgpPtr+1) += model->HSMHV2_type * here->HSMHV2_ydyn_qi[gNodePrime] * s->imag; *(here->HSMHV2QIspPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_qi[sNodePrime] + here->HSMHV2_ydyn_qi[sNodePrime] * s->real); *(here->HSMHV2QIspPtr+1) += model->HSMHV2_type * here->HSMHV2_ydyn_qi[sNodePrime] * s->imag; *(here->HSMHV2QIbpPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_qi[bNodePrime] + here->HSMHV2_ydyn_qi[bNodePrime] * s->real); *(here->HSMHV2QIbpPtr+1) += model->HSMHV2_type * here->HSMHV2_ydyn_qi[bNodePrime] * s->imag; *(here->HSMHV2QIqiPtr) += here->HSMHV2_ydc_qi[qiNode] + here->HSMHV2_ydyn_qi[qiNode] * s->real; *(here->HSMHV2QIqiPtr+1) += here->HSMHV2_ydyn_qi[qiNode] * s->imag; if ( here->HSMHV2tempNode > 0 ) { *(here->HSMHV2QItempPtr) += here->HSMHV2_ydc_qi[tempNode] + here->HSMHV2_ydyn_qi[tempNode] * s->real; *(here->HSMHV2QItempPtr+1) += here->HSMHV2_ydyn_qi[tempNode] * s->imag; } /*qb*/ *(here->HSMHV2QBdpPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_qb[dNodePrime] + here->HSMHV2_ydyn_qb[dNodePrime] * s->real); *(here->HSMHV2QBdpPtr+1) += model->HSMHV2_type * here->HSMHV2_ydyn_qb[dNodePrime] * s->imag; *(here->HSMHV2QBgpPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_qb[gNodePrime] + here->HSMHV2_ydyn_qb[gNodePrime] * s->real); *(here->HSMHV2QBgpPtr+1) += model->HSMHV2_type * here->HSMHV2_ydyn_qb[gNodePrime] * s->imag; *(here->HSMHV2QBspPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_qb[sNodePrime] + here->HSMHV2_ydyn_qb[sNodePrime] * s->real); *(here->HSMHV2QBspPtr+1) += model->HSMHV2_type * here->HSMHV2_ydyn_qb[sNodePrime] * s->imag; *(here->HSMHV2QBbpPtr) += model->HSMHV2_type * (here->HSMHV2_ydc_qb[bNodePrime] + here->HSMHV2_ydyn_qb[bNodePrime] * s->real); *(here->HSMHV2QBbpPtr+1) += model->HSMHV2_type * here->HSMHV2_ydyn_qb[bNodePrime] * s->imag; *(here->HSMHV2QBqbPtr) += here->HSMHV2_ydc_qb[qbNode] + here->HSMHV2_ydyn_qb[qbNode] * s->real; *(here->HSMHV2QBqbPtr+1) += here->HSMHV2_ydyn_qb[qbNode] * s->imag; if ( here->HSMHV2tempNode > 0 ) { *(here->HSMHV2QBtempPtr) += here->HSMHV2_ydc_qb[tempNode] + here->HSMHV2_ydyn_qb[tempNode] * s->real; *(here->HSMHV2QBtempPtr+1) += here->HSMHV2_ydyn_qb[tempNode] * s->imag; } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2eval_dep.h0000644000175000017500000030413413546075722024001 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhveval_dep.h DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ { // Begin : hsmhveval_dep /* define local variavles */ int depmode ; double afact, afact2, afact3, bfact, cfact ; double W_bsub0, W_bsubL, W_s0, W_sL, W_sub0, W_subL, W_b0, W_bL, vthn ; double phi_s0_DEP = 0.0, phi_sL_DEP = 0.0 , Vbi_DEP ; double phi_s0_DEP_dVgs, phi_s0_DEP_dVbs, phi_s0_DEP_dVds, phi_s0_DEP_dT ; double phi_sL_DEP_dVgs, phi_sL_DEP_dVbs, phi_sL_DEP_dVds, phi_sL_DEP_dT ; double phi_j0_DEP, phi_jL_DEP, Psbmax, phi_b0_DEP_lim, phi_bL_DEP_lim ; double phi_jL_DEP_dVgs, phi_jL_DEP_dVds, phi_jL_DEP_dVbs, phi_jL_DEP_dT ; double Vgp0, Vgp1, Vgp0old, phi_j0_DEP_old, phi_jL_DEP_old, phi_b0_DEP_old, phi_bL_DEP_old, phi_s0_DEP_old, phi_sL_DEP_old ; double phi_j0_DEP_acc, phi_jL_DEP_acc ; double Q_s0, Q_sL = 0.0 ; double Q_s0_dVgs, Q_sL_dVgs = 0.0, Q_s0_dVds, Q_sL_dVds = 0.0, Q_s0_dVbs, Q_sL_dVbs = 0.0, Q_s0_dT, Q_sL_dT = 0.0 ; double Q_sub0, Q_subL, Q_sub0_dVgs, Q_subL_dVgs, Q_sub0_dVds, Q_subL_dVds, Q_sub0_dVbs, Q_subL_dVbs, Q_sub0_dT, Q_subL_dT ; double Qn_res0, Qn_res0_dVgs, Qn_res0_dVds, Qn_res0_dVbs, Qn_res0_dT ; double y1, y2, dety ; double y11, y12 ; double y21, y22 ; double y1_dVgs, y1_dVds, y1_dVbs, y1_dT ; double y2_dVgs, y2_dVds, y2_dVbs, y2_dT ; double rev11 = 0.0, rev12 = 0.0 ; double rev21 = 0.0, rev22 = 0.0 ; double phi_b0_DEP_ini ; double y0, dydPsm ; double W_b0_dVgs, W_b0_dVds, W_b0_dVbs, W_b0_dT ; double W_res0 ; double W_s0_dVgs, W_s0_dVds, W_s0_dVbs, W_s0_dT ; double phi_b0_DEP, Q_b0_dep, Q_sub0_dep ; double phi_b0_DEP_dVgs, phi_b0_DEP_dVds, phi_b0_DEP_dVbs, phi_b0_DEP_dT ; double phi_j0_DEP_dVgs, phi_j0_DEP_dVds, phi_j0_DEP_dVbs, phi_j0_DEP_dT ; double Q_b0_dep_dVgs, Q_b0_dep_dVds, Q_b0_dep_dVbs, Q_b0_dep_dT ; double Q_sub0_dep_dVgs, Q_sub0_dep_dVds, Q_sub0_dep_dVbs, Q_sub0_dep_dT ; double phi_bL_DEP, Q_bL_dep, Q_subL_dep ; double phi_bL_DEP_dVgs, phi_bL_DEP_dVds, phi_bL_DEP_dVbs, phi_bL_DEP_dT ; double Q_bL_dep_dVgs, Q_bL_dep_dVds, Q_bL_dep_dVbs, Q_bL_dep_dT ; double Q_subL_dep_dVgs, Q_subL_dep_dVds, Q_subL_dep_dVbs, Q_subL_dep_dT ; double q_Ndepm_esi, Idd_drift,Idd_diffu ; double Qn_bac0 ; double Qn_bac0_dVgs, Qn_bac0_dVds, Qn_bac0_dVbs, Qn_bac0_dT ; double Mu_res, Mu_bac ; double Mu_res_dVgs, Mu_res_dVds, Mu_res_dVbs, Mu_res_dT ; double Mu_bac_dVgs, Mu_bac_dVds, Mu_bac_dVbs, Mu_bac_dT ; double Q_n0_cur, Q_nL_cur ; double Q_n0_cur_dVgs, Q_n0_cur_dVds, Q_n0_cur_dVbs, Q_n0_cur_dT ; double Q_nL_cur_dVgs, Q_nL_cur_dVds, Q_nL_cur_dVbs, Q_nL_cur_dT ; double Q_s0_dep, Q_sL_dep ; double Q_s0_dep_dVgs, Q_s0_dep_dVds, Q_s0_dep_dVbs, Q_s0_dep_dT ; double Q_sL_dep_dVgs, Q_sL_dep_dVds, Q_sL_dep_dVbs, Q_sL_dep_dT ; double sm_delta ; double phib_ref, phib_ref_dPs, phib_ref_dPd ; double Q_s0_dPs, Q_sL_dPs, Q_s0_dPb, Q_sL_dPb ; double Q_b0_dep_dPb, Q_bL_dep_dPb, Q_b0_dep_dPd, Q_bL_dep_dPd, Q_sub0_dep_dPd, Q_subL_dep_dPd ; double phi_j0_DEP_dPb, phi_jL_DEP_dPb ; double NdepmpNsub_inv1, NdepmpNsub ; double Q_n0, Q_n0_dVgs, Q_n0_dVds, Q_n0_dVbs, Q_n0_dT ; double Q_nL, Q_nL_dVgs, Q_nL_dVds, Q_nL_dVbs, Q_nL_dT ; double phi_s0_DEP_ini, phi_sL_DEP_ini ; double C_QE2, C_ESI2, Tn2 ; double Ndepm2, q_Ndepm ; double C_2ESIpq_Ndepm, C_2ESIpq_Ndepm_inv , C_2ESI_q_Ndepm ; double C_2ESIpq_Nsub , C_2ESIpq_Nsub_inv ; double ps_conv3 , ps_conv23 ; double Ids_res, Ids_bac, Edri ; double Ids_res_dVgs, Ids_res_dVds, Ids_res_dVbs ; double Ids_res_dT ; double Ids_bac_dVgs, Ids_bac_dVds, Ids_bac_dVbs, Ids_bac_dT ; double Edri_dVgs, Edri_dVds, Edri_dVbs, Edri_dT ; double T1_dVgs, T1_dVds, T1_dVbs ; double T2_dVgs, T2_dVds, T2_dVbs ; double T3_dVgs, T3_dVds, T3_dVbs ; double T4_dVgs, T4_dVds, T4_dVbs ; double T5_dVgs, T5_dVds, T5_dVbs ; double Vgpp ; double Vgpp_dVgs, Vgpp_dVds, Vgpp_dVbs,Vgpp_dT ; double Vdseff0, Vdseff0_dVgs, Vdseff0_dVds, Vdseff0_dVbs,Vdseff0_dT ; double phib_ref_dVgs, phib_ref_dVds, phib_ref_dVbs,phib_ref_dT ; double Qn_delta, Qn_delta_dT ; double Qn_drift, Qn_drift_dVgs, Qn_drift_dVds, Qn_drift_dVbs, Qn_drift_dT ; double Ey_suf, Ey_suf_dVgs, Ey_suf_dVds, Ey_suf_dVbs, Ey_suf_dT ; double DEPQFN3 = 0.3 ; double DEPQFN_dlt = 2.0 ; double Ps_delta = 0.06 ; double Ps_delta0 = 0.10 ; // Constants Vbi_DEP = here->HSMHV2_Vbipn ; q_Ndepm = C_QE * here->HSMHV2_ndepm ; Ndepm2 = here->HSMHV2_ndepm * here->HSMHV2_ndepm ; q_Ndepm_esi = C_QE * here->HSMHV2_ndepm * C_ESI ; q_Nsub = C_QE * here->HSMHV2_nsub ; C_QE2 = C_QE * C_QE ; C_ESI2 = C_ESI * C_ESI ; Tn2 = model->HSMHV2_tndep * model->HSMHV2_tndep ; C_2ESIpq_Ndepm = 2.0 * C_ESI/q_Ndepm ; C_2ESIpq_Ndepm_inv = q_Ndepm / (2.0 * C_ESI) ; C_2ESI_q_Ndepm = 2.0 * C_ESI * q_Ndepm ; C_2ESIpq_Nsub = 2.0 * C_ESI / q_Nsub ; C_2ESIpq_Nsub_inv = q_Nsub / (2.0 * C_ESI) ; NdepmpNsub = here->HSMHV2_ndepm / here->HSMHV2_nsub ; NdepmpNsub_inv1 = 1.0 / (1.0 + NdepmpNsub ) ; ps_conv3 = ps_conv * 1000.0 ; ps_conv23 = ps_conv2 * 1000.0 ; //---------------------------------------------------* // depletion MOS mode //------------------// /*---------------------------------------------------* * initial potential phi_s0_DEP,phi_b0_DEP,phi_j0_DEP calculated. *------------------*/ Vgp = Vgp + epsm10 * 1.0e7 ; afact = Cox * Cox / here->HSMHV2_cnst0 / here->HSMHV2_cnst0 ; afact2 = afact / here->HSMHV2_nin / here->HSMHV2_nin * Ndepm2 ; W_bsub0 = sqrt(2.0e0 * C_ESI / C_QE * here->HSMHV2_nsub / (here->HSMHV2_nsub + here->HSMHV2_ndepm) / here->HSMHV2_ndepm * ( - Vbscl + Vbi_DEP)) ; if( W_bsub0 > model->HSMHV2_tndep ) { Vgp0 = 0.0; W_b0 = model->HSMHV2_tndep ; phi_b0_DEP = 0.0 ; phi_j0_DEP = phi_b0_DEP - C_2ESIpq_Ndepm_inv * W_b0 * W_b0 ; phi_b0_DEP_lim = 0.0 ; Vgp0old = Vgp0 ; phi_j0_DEP_old = phi_j0_DEP ; for ( lp_s0 = 1 ; lp_s0 <= lp_se_max + 1 ; lp_s0 ++ ) { W_b0 = sqrt(C_2ESIpq_Ndepm * (phi_b0_DEP - phi_j0_DEP) ) ; Fn_SU_CP( W_b0 , W_b0 , model->HSMHV2_tndep , 1e-8, 2 , T0 ) W_sub0 = sqrt(C_2ESIpq_Nsub * (phi_j0_DEP - Vbscl + Vbi_DEP) ) ; Q_b0_dep = W_b0 * q_Ndepm ; Q_b0_dep_dPd = - C_ESI / W_b0 * T0 ; Q_sub0_dep = - W_sub0 * q_Nsub ; Q_sub0_dep_dPd = - C_ESI / W_sub0 ; y1 = Cox * (Vgp0 - phi_b0_DEP) + Q_b0_dep + Q_sub0_dep ; y11 = Cox ; y12 = Q_b0_dep_dPd + Q_sub0_dep_dPd ; y2 = phi_j0_DEP - NdepmpNsub_inv1 * (NdepmpNsub * phi_b0_DEP + Vbscl - Vbi_DEP) ; y21 = 0.0 ; y22 = 1.0 ; dety = y11 * y22 - y21 * y12; rev11 = (y22) / dety ; rev12 = ( - y12) / dety ; rev21 = ( - y21) / dety ; rev22 = (y11) / dety ; if( fabs( rev11 * y1 + rev12 * y2 ) > 0.5 ) { Vgp0 = Vgp0 - 0.5 * Fn_Sgn( rev11 * y1 + rev12 * y2 ) ; phi_j0_DEP = phi_j0_DEP - 0.5 * Fn_Sgn( rev21 * y1 + rev22 * y2 ) ; } else { Vgp0 = Vgp0 - ( rev11 * y1 + rev12 * y2 ) ; phi_j0_DEP = phi_j0_DEP - ( rev21 * y1 + rev22 * y2 ) ; } if( fabs(Vgp0 - Vgp0old) <= ps_conv && fabs(phi_j0_DEP - phi_j0_DEP_old) <= ps_conv ) lp_s0=lp_se_max + 1 ; Vgp0old = Vgp0 ; phi_j0_DEP_old = phi_j0_DEP ; } phi_j0_DEP_acc = phi_j0_DEP ; W_sub0 = model->HSMHV2_tndep * NdepmpNsub ; phi_j0_DEP = C_2ESIpq_Nsub_inv * W_sub0 * W_sub0 + Vbscl - Vbi_DEP ; phi_b0_DEP = phi_j0_DEP + C_2ESIpq_Ndepm_inv * Tn2 ; phi_s0_DEP = phi_b0_DEP ; Psbmax = phi_b0_DEP ; Vgp1 = phi_b0_DEP ; if( Vgp > Vgp0 ) { depmode = 1 ; } else if(Vgp > Vgp1 ) { depmode = 3 ; } else { depmode = 2 ; } } else { Vgp0 = 0.0 ; Vgp1 = Vgp0 ; Psbmax = 0.0 ; phi_b0_DEP_lim = Vgp0 ; W_b0 = W_bsub0 ; W_sub0 = W_b0 * NdepmpNsub ; phi_j0_DEP = C_2ESIpq_Nsub_inv * W_sub0 * W_sub0 + Vbscl - Vbi_DEP ; phi_b0_DEP = C_2ESIpq_Ndepm_inv * W_b0 * W_b0 + phi_j0_DEP ; phi_j0_DEP_acc = phi_j0_DEP ; if( Vgp > Vgp0 ) { depmode = 1 ; } else { depmode = 2 ; } } T1 = C_2ESI_q_Ndepm * ( Psbmax - ( - here->HSMHV2_Pb2n + Vbscl)) ; if ( T1 > 0.0 ) { vthn = - here->HSMHV2_Pb2n + Vbscl - sqrt(T1) / Cox ; } else { vthn = - here->HSMHV2_Pb2n + Vbscl ; } /* primary value */ if( Vgp > Vgp0 ) { /* accumulation region */ phi_j0_DEP = phi_j0_DEP_acc ; phi_b0_DEP = 0.0 ; phi_s0_DEP_ini = log(afact * Vgp * Vgp) / (beta + 2.0 / Vgp) + phi_b0_DEP ; if( phi_s0_DEP_ini < phi_b0_DEP_lim + ps_conv23 ) phi_s0_DEP_ini = phi_b0_DEP_lim + ps_conv23 ; } else if( Vgp > Vgp1 ) { /* depletion region */ phi_s0_DEP_ini = phi_s0_DEP ; } else { /* depletion and inversion region */ if( Vgp > vthn ) { /* depletion */ bfact = - 2.0 * afact * Vgp + beta ; cfact = afact * Vgp * Vgp - beta * phi_b0_DEP ; phi_b0_DEP_old = phi_b0_DEP ; phi_s0_DEP_ini = ( - bfact + sqrt(bfact * bfact - 4.0 * afact * cfact)) / 2.0 / afact ; if( phi_s0_DEP_ini > Psbmax - ps_conv3 ) phi_s0_DEP_ini = Psbmax - ps_conv3 ; W_s0 = sqrt(C_2ESIpq_Ndepm * (phi_b0_DEP - phi_s0_DEP_ini) ) ; W_b0 = sqrt(C_2ESIpq_Ndepm * (phi_b0_DEP - phi_j0_DEP) ) ; if( W_s0 + W_b0 > model->HSMHV2_tndep ) { for ( lp_s0 = 1 ; lp_s0 <= lp_se_max + 1 ; lp_s0 ++ ) { y0 = W_s0 + W_b0 - model->HSMHV2_tndep ; dydPsm = C_ESI / q_Ndepm / W_s0 + C_ESI / q_Ndepm * ( 1.0 - (here->HSMHV2_ndepm / here->HSMHV2_nsub) / ( 1.0 + (NdepmpNsub))) / W_b0 ; if( fabs(y0 / dydPsm) > 0.5 ) { phi_b0_DEP = phi_b0_DEP - 0.5 * Fn_Sgn(y0 / dydPsm) ; } else { phi_b0_DEP = phi_b0_DEP - y0 / dydPsm ; } if( (phi_b0_DEP - Vbscl + Vbi_DEP) < epsm10 ) phi_b0_DEP=Vbscl - Vbi_DEP + epsm10 ; cfact = afact * Vgp * Vgp - beta * phi_b0_DEP ; T1 = bfact * bfact - 4.0 * afact * cfact ; if( T1 > 0.0 ) { phi_s0_DEP_ini = ( - bfact + sqrt(T1)) / 2.0 / afact ; } else { phi_s0_DEP_ini = ( - bfact) / 2.0 / afact ; } if( phi_s0_DEP_ini > Psbmax ) phi_s0_DEP_ini = Psbmax ; if( phi_s0_DEP_ini > phi_b0_DEP ) { phi_s0_DEP_ini = phi_b0_DEP - ps_conv23 ; lp_s0=lp_se_max + 1 ; } W_s0 = sqrt(C_2ESIpq_Ndepm * (phi_b0_DEP - phi_s0_DEP_ini) ) ; phi_j0_DEP = ( NdepmpNsub * phi_b0_DEP + Vbscl - Vbi_DEP) / (1.0 + NdepmpNsub) ; W_b0 = sqrt(C_2ESIpq_Ndepm * (phi_b0_DEP - phi_j0_DEP) ) ; if( fabs(phi_b0_DEP - phi_b0_DEP_old) <= 1.0e-8 ) lp_s0=lp_se_max + 1 ; phi_b0_DEP_old = phi_b0_DEP ; } } } else { afact3 = afact2 / exp(beta * Vbscl) ; phi_b0_DEP_old = phi_b0_DEP ; phi_s0_DEP_ini = log(afact3 * Vgp * Vgp) / ( - beta + 2.0 / Vgp) ; W_s0 = sqrt(C_2ESIpq_Ndepm * (phi_b0_DEP - phi_s0_DEP_ini) ) ; W_b0 = sqrt(C_2ESIpq_Ndepm * (phi_b0_DEP - phi_j0_DEP) ) ; if( W_s0 + W_b0 > model->HSMHV2_tndep ) { for ( lp_s0 = 1 ; lp_s0 <= lp_s0_max + 1 ; lp_s0 ++ ) { y0 = W_s0 + W_b0 - model->HSMHV2_tndep ; dydPsm = C_ESI / q_Ndepm / W_s0 + C_ESI / q_Ndepm * ( 1.0 - (here->HSMHV2_ndepm / here->HSMHV2_nsub) / ( 1.0 + (NdepmpNsub))) / W_b0 ; if( fabs(y0 / dydPsm) > 0.5 ) { phi_b0_DEP = phi_b0_DEP - 0.5 * Fn_Sgn(y0 / dydPsm) ; } else { phi_b0_DEP = phi_b0_DEP - y0 / dydPsm ; } if( (phi_b0_DEP - Vbscl + Vbi_DEP) < epsm10 ) phi_b0_DEP=Vbscl - Vbi_DEP + epsm10 ; W_s0 = sqrt(C_2ESIpq_Ndepm * (phi_b0_DEP - phi_s0_DEP_ini) ) ; phi_j0_DEP = ( NdepmpNsub * phi_b0_DEP + Vbscl - Vbi_DEP) / (1.0 + NdepmpNsub) ; W_b0 = sqrt(C_2ESIpq_Ndepm * (phi_b0_DEP - phi_j0_DEP) ) ; if( fabs(phi_b0_DEP - phi_b0_DEP_old) <= 1.0e-5 ) lp_s0=lp_s0_max + 1 ; phi_b0_DEP_old = phi_b0_DEP ; } } } // end of phi_b0_DEP loop // } phi_b0_DEP_ini = phi_b0_DEP ; /* */ /* solve poisson at source side */ /* */ sm_delta = 0.12 ; flg_conv = 0 ; phi_s0_DEP = phi_s0_DEP_ini ; phi_b0_DEP = phi_b0_DEP_ini ; phi_s0_DEP_old = phi_s0_DEP ; phi_b0_DEP_old = phi_b0_DEP ; for ( lp_s0 = 1 ; lp_s0 <= lp_se_max + 1 ; lp_s0 ++ ) { phi_j0_DEP = NdepmpNsub_inv1 * (NdepmpNsub * phi_b0_DEP + Vbscl - Vbi_DEP) ; phi_j0_DEP_dPb = NdepmpNsub_inv1 * NdepmpNsub ; T1 = phi_b0_DEP - phi_j0_DEP ; Fn_SL_CP( T2 , T1 , 0.0 , 0.1, 2 , T7 ) W_b0 = sqrt(C_2ESIpq_Ndepm * (T2) ) ; Fn_SU_CP( W_b0 , W_b0 , model->HSMHV2_tndep, 1e-8, 2 , T8 ) W_sub0 = sqrt(C_2ESIpq_Nsub * (phi_j0_DEP - Vbscl + Vbi_DEP) ) ; Q_b0_dep = W_b0 * q_Ndepm ; Q_b0_dep_dPb = C_ESI / W_b0 * T7 * T8 ; Q_b0_dep_dPd = - C_ESI / W_b0 * T7 * T8 ; Q_sub0_dep = - W_sub0 * q_Nsub ; Q_sub0_dep_dPd = - C_ESI / W_sub0 ; T10 = 8.0 * q_Ndepm_esi * Tn2 ; phib_ref = (4.0 * phi_j0_DEP * phi_j0_DEP * C_ESI2 - 8.0 * phi_j0_DEP * C_ESI2 * phi_s0_DEP + 4.0 * C_ESI2 * phi_s0_DEP * phi_s0_DEP + 4.0 * phi_j0_DEP * q_Ndepm_esi * Tn2 + 4.0 * phi_s0_DEP * q_Ndepm_esi * Tn2 + Ndepm2 * C_QE2 * model->HSMHV2_tndep * Tn2 * model->HSMHV2_tndep) / T10 ; phib_ref_dPs = ( - 8.0 * phi_j0_DEP * C_ESI2 + 4.0 * C_ESI2 * phi_s0_DEP * 2.0 + 4.0 * q_Ndepm_esi * Tn2) / T10 ; phib_ref_dPd = (4.0 * phi_j0_DEP * C_ESI2 * 2.0 - 8.0 * C_ESI2 * phi_s0_DEP + 4.0 * q_Ndepm_esi * Tn2) / T10 ; T1 = beta * (phi_s0_DEP - phi_b0_DEP) ; T2 = exp(T1) ; if( phi_s0_DEP >= phi_b0_DEP ) { Q_s0 = - here->HSMHV2_cnst0 * sqrt(T2 - 1.0 - T1 + 1e-15) ; Q_s0_dPs = 0.5 * here->HSMHV2_cnst0 * here->HSMHV2_cnst0 / Q_s0 * (beta * T2 - beta ) ; Q_s0_dPb = - Q_s0_dPs ; } else { T3 = exp( - beta * (phi_s0_DEP - Vbscl)) ; T4 = exp( - beta * (phi_b0_DEP - Vbscl)) ; Q_s0 = here->HSMHV2_cnst0 * sqrt(T2 - 1.0 - T1 + 1e-15 + here->HSMHV2_cnst1 * (T3 - T4) ) ; T5 = 0.5 * here->HSMHV2_cnst0 * here->HSMHV2_cnst0 / Q_s0 ; Q_s0_dPs = T5 * (beta * T2 - beta + here->HSMHV2_cnst1 * ( - beta * T3) ) ; Q_s0_dPb = T5 * ( - beta * T2 + beta + here->HSMHV2_cnst1 * beta * T4 ) ; } Fn_SU_CP( T1 , phib_ref , phi_b0_DEP_lim , sm_delta, 4 , T9 ) y1 = phi_b0_DEP - T1 ; y11 = - phib_ref_dPs * T9 ; y12 = 1.0 - phib_ref_dPd * phi_j0_DEP_dPb * T9 ; y2 = Cox * (Vgp - phi_s0_DEP) + Q_s0 + Q_b0_dep + Q_sub0_dep ; y21 = - Cox + Q_s0_dPs ; y22 = Q_s0_dPb + Q_b0_dep_dPb + Q_b0_dep_dPd * phi_j0_DEP_dPb + Q_sub0_dep_dPd * phi_j0_DEP_dPb ; dety = y11 * y22 - y21 * y12; rev11 = (y22) / dety ; rev12 = ( - y12) / dety ; rev21 = ( - y21) / dety ; rev22 = (y11) / dety ; if( fabs( rev21 * y1 + rev22 * y2 ) > 0.5 ) { phi_s0_DEP = phi_s0_DEP - 0.5 * Fn_Sgn( rev11 * y1 + rev12 * y2 ) ; phi_b0_DEP = phi_b0_DEP - 0.5 * Fn_Sgn( rev21 * y1 + rev22 * y2 ) ; } else { phi_s0_DEP = phi_s0_DEP - ( rev11 * y1 + rev12 * y2 ) ; phi_b0_DEP = phi_b0_DEP - ( rev21 * y1 + rev22 * y2 ) ; } if( fabs(phi_s0_DEP - phi_s0_DEP_old) <= ps_conv && fabs(phi_b0_DEP - phi_b0_DEP_old) <= ps_conv ) { lp_s0=lp_se_max + 1 ; flg_conv = 1 ; } phi_s0_DEP_old = phi_s0_DEP ; phi_b0_DEP_old = phi_b0_DEP ; } if( flg_conv == 0 ) { printf( "*** warning(HiSIM_HV(%s)): Went Over Iteration Maximum(Ps0)\n",model->HSMHV2modName ) ; printf( " Vbse = %7.3f Vdse = %7.3f Vgse = %7.3f\n" ,Vbse , Vdse , Vgse ) ; } /* caluculate derivative */ y1_dVgs = 0.0 ; y1_dVds = 0.0 ; y1_dVbs = - (8.0 * phi_j0_DEP * C_ESI2 - 8.0 * C_ESI2 * phi_s0_DEP + 4.0 * q_Ndepm_esi * Tn2) / T10 * T9 * NdepmpNsub_inv1 * Vbscl_dVbs ; y1_dT = - (8.0 * phi_j0_DEP * C_ESI2 - 8.0 * C_ESI2 * phi_s0_DEP + 4.0 * q_Ndepm_esi * Tn2) / T10 * T9 * NdepmpNsub_inv1 * (Vbscl_dT - Vbipn_dT) ; Q_b0_dep_dVbs = - C_ESI / W_b0 * T7 * T8 * NdepmpNsub_inv1 * Vbscl_dVbs ; Q_b0_dep_dT = - C_ESI / W_b0 * T7 * T8 * NdepmpNsub_inv1 * (Vbscl_dT - Vbipn_dT) ; Q_sub0_dep_dVbs = - C_ESI / W_sub0 * (NdepmpNsub_inv1 * Vbscl_dVbs - Vbscl_dVbs) ; Q_sub0_dep_dT = - C_ESI / W_sub0 * (NdepmpNsub_inv1 * (Vbscl_dT - Vbipn_dT) - Vbscl_dT + Vbipn_dT) ; T1 = beta * (phi_s0_DEP - phi_b0_DEP) ; T2 = exp(T1) ; if( phi_s0_DEP >= phi_b0_DEP ) { Q_s0_dVbs = 0.0 ; Q_s0_dT = - cnst0_dT * sqrt(T2 - 1.0 - T1 + 1e-15) - here->HSMHV2_cnst0 / 2.0 / sqrt(T2 - 1.0 - T1 + 1e-15) * ((phi_s0_DEP - phi_b0_DEP) * T2 * beta_dT - (phi_s0_DEP - phi_b0_DEP) * beta_dT) ; } else { T3 = exp( - beta * (phi_s0_DEP - Vbscl)) ; T4 = exp( - beta * (phi_b0_DEP - Vbscl)) ; T5 = sqrt(T2 - 1.0 - T1 + 1e-15 + here->HSMHV2_cnst1 * (T3 - T4)) ; Q_s0_dVbs = here->HSMHV2_cnst0 / 2.0 / T5 * (here->HSMHV2_cnst1 * (beta * T3 * Vbscl_dVbs - beta * T4 * Vbscl_dVbs) ) ; Q_s0_dT = cnst0_dT * T5 + here->HSMHV2_cnst0 / 2.0 / T5 * ((phi_s0_DEP - phi_b0_DEP) * T2 * beta_dT - (phi_s0_DEP - phi_b0_DEP) * beta_dT + cnst1_dT * (T3 - T4) + here->HSMHV2_cnst1 * ( - (phi_s0_DEP - Vbscl) * T3 * beta_dT + beta * T3 * Vbscl_dT + (phi_b0_DEP - Vbscl) * T4 * beta_dT - beta * T4 * Vbscl_dT) ) ; } y2_dVgs = Cox_dVg * (Vgp - phi_s0_DEP) + Cox * Vgp_dVgs ; y2_dVds = Cox_dVd * (Vgp - phi_s0_DEP) + Cox * Vgp_dVds ; y2_dVbs = Cox_dVb * (Vgp - phi_s0_DEP) + Cox * Vgp_dVbs + Q_s0_dVbs + Q_b0_dep_dVbs + Q_sub0_dep_dVbs ; y2_dT = Cox_dT * (Vgp - phi_s0_DEP) + Cox * Vgp_dT + Q_s0_dT + Q_b0_dep_dT + Q_sub0_dep_dT ; phi_s0_DEP_dVgs = - ( rev11 * y1_dVgs + rev12 * y2_dVgs ) ; phi_s0_DEP_dVds = - ( rev11 * y1_dVds + rev12 * y2_dVds ) ; phi_s0_DEP_dVbs = - ( rev11 * y1_dVbs + rev12 * y2_dVbs ) ; phi_s0_DEP_dT = - ( rev11 * y1_dT + rev12 * y2_dT ) ; phi_b0_DEP_dVgs = - ( rev21 * y1_dVgs + rev22 * y2_dVgs ) ; phi_b0_DEP_dVds = - ( rev21 * y1_dVds + rev22 * y2_dVds ) ; phi_b0_DEP_dVbs = - ( rev21 * y1_dVbs + rev22 * y2_dVbs ) ; phi_b0_DEP_dT = - ( rev21 * y1_dT + rev22 * y2_dT ) ; if( W_bsub0 > model->HSMHV2_tndep && depmode !=2 ) { Fn_SU_CP2(phi_b0_DEP , phi_b0_DEP , phi_s0_DEP , 0.02, 2 , T1, T2 ) phi_b0_DEP_dVgs = phi_b0_DEP_dVgs * T1 + phi_s0_DEP_dVgs * T2 ; phi_b0_DEP_dVds = phi_b0_DEP_dVds * T1 + phi_s0_DEP_dVds * T2 ; phi_b0_DEP_dVbs = phi_b0_DEP_dVbs * T1 + phi_s0_DEP_dVbs * T2 ; phi_b0_DEP_dT = phi_b0_DEP_dT * T1 + phi_s0_DEP_dT * T2 ; } phi_j0_DEP = NdepmpNsub_inv1 * (NdepmpNsub * phi_b0_DEP + Vbscl - Vbi_DEP) ; phi_j0_DEP_dVgs = NdepmpNsub_inv1 * NdepmpNsub * phi_b0_DEP_dVgs ; phi_j0_DEP_dVds = NdepmpNsub_inv1 * NdepmpNsub * phi_b0_DEP_dVds ; phi_j0_DEP_dVbs = NdepmpNsub_inv1 * NdepmpNsub * phi_b0_DEP_dVbs + NdepmpNsub_inv1 * Vbscl_dVbs ; phi_j0_DEP_dT = NdepmpNsub_inv1 * NdepmpNsub * phi_b0_DEP_dT + NdepmpNsub_inv1 * (Vbscl_dT - Vbipn_dT) ; phib_ref = (4.0 * phi_j0_DEP * phi_j0_DEP * C_ESI2 - 8.0 * phi_j0_DEP * C_ESI2 * phi_s0_DEP + 4.0 * C_ESI2 * phi_s0_DEP * phi_s0_DEP + 4.0 * phi_j0_DEP * q_Ndepm_esi * Tn2 + 4.0 * phi_s0_DEP * q_Ndepm_esi * Tn2 + Ndepm2 * C_QE2 * model->HSMHV2_tndep * Tn2 * model->HSMHV2_tndep) / T10 ; phib_ref_dVgs = ( 8.0 * phi_j0_DEP * phi_j0_DEP_dVgs * C_ESI2 - 8.0 * phi_j0_DEP_dVgs * C_ESI2 * phi_s0_DEP - 8.0 * phi_j0_DEP * C_ESI2 * phi_s0_DEP_dVgs + 8.0 * C_ESI2 * phi_s0_DEP * phi_s0_DEP_dVgs + 4.0 * phi_j0_DEP_dVgs * q_Ndepm_esi * Tn2 + 4.0 * phi_s0_DEP_dVgs * q_Ndepm_esi * Tn2 ) / T10 ; phib_ref_dVds = ( 8.0 * phi_j0_DEP * phi_j0_DEP_dVds * C_ESI2 - 8.0 * phi_j0_DEP_dVds * C_ESI2 * phi_s0_DEP - 8.0 * phi_j0_DEP * C_ESI2 * phi_s0_DEP_dVds + 8.0 * C_ESI2 * phi_s0_DEP * phi_s0_DEP_dVds + 4.0 * phi_j0_DEP_dVds * q_Ndepm_esi * Tn2 + 4.0 * phi_s0_DEP_dVds * q_Ndepm_esi * Tn2 ) / T10 ; phib_ref_dVbs = ( 8.0 * phi_j0_DEP * phi_j0_DEP_dVbs * C_ESI2 - 8.0 * phi_j0_DEP_dVbs * C_ESI2 * phi_s0_DEP - 8.0 * phi_j0_DEP * C_ESI2 * phi_s0_DEP_dVbs + 8.0 * C_ESI2 * phi_s0_DEP * phi_s0_DEP_dVbs + 4.0 * phi_j0_DEP_dVbs * q_Ndepm_esi * Tn2 + 4.0 * phi_s0_DEP_dVbs * q_Ndepm_esi * Tn2 ) / T10 ; phib_ref_dT = ( 8.0 * phi_j0_DEP * phi_j0_DEP_dT * C_ESI2 - 8.0 * phi_j0_DEP_dT * C_ESI2 * phi_s0_DEP - 8.0 * phi_j0_DEP * C_ESI2 * phi_s0_DEP_dT + 8.0 * C_ESI2 * phi_s0_DEP * phi_s0_DEP_dT + 4.0 * phi_j0_DEP_dT * q_Ndepm_esi * Tn2 + 4.0 * phi_s0_DEP_dT * q_Ndepm_esi * Tn2 ) / T10 ; T1 = beta * (phi_s0_DEP - phi_b0_DEP) ; T1_dVgs = beta * (phi_s0_DEP_dVgs - phi_b0_DEP_dVgs) ; T1_dVds = beta * (phi_s0_DEP_dVds - phi_b0_DEP_dVds) ; T1_dVbs = beta * (phi_s0_DEP_dVbs - phi_b0_DEP_dVbs) ; T1_dT = beta * (phi_s0_DEP_dT - phi_b0_DEP_dT) + beta_dT * (phi_s0_DEP - phi_b0_DEP) ; T2 = exp(T1) ; T2_dVgs = T1_dVgs * T2 ; T2_dVds = T1_dVds * T2 ; T2_dVbs = T1_dVbs * T2 ; T2_dT = T1_dT * T2 ; if( phi_s0_DEP >= phi_b0_DEP ) { T3 = sqrt(T2 - 1.0e0 - T1 + 1e-15 ) ; T3_dVgs = (T2_dVgs - T1_dVgs) / 2.0 / T3 ; T3_dVds = (T2_dVds - T1_dVds) / 2.0 / T3 ; T3_dVbs = (T2_dVbs - T1_dVbs) / 2.0 / T3 ; T3_dT = (T2_dT - T1_dT) / 2.0 / T3 ; Q_s0 = - here->HSMHV2_cnst0 * T3 ; Q_s0_dep = 0.0 ; Q_sub0 = 0.0 ; /// Qg = Cox * (Vgp - phi_s0_DEP) ; W_b0 = sqrt(C_2ESIpq_Ndepm * (phi_b0_DEP - phi_j0_DEP) ) ; Fn_SU_CP( T9 , W_b0 , model->HSMHV2_tndep, 1e-8, 2 , T4 ) W_sub0 = sqrt(C_2ESIpq_Nsub * (phi_j0_DEP - Vbscl + Vbi_DEP) ) ; Q_b0_dep = T9 * q_Ndepm ; Q_sub0_dep = - W_sub0 * q_Nsub ; /* derivative */ Q_s0_dVgs = - here->HSMHV2_cnst0 * T3_dVgs ; Q_s0_dVds = - here->HSMHV2_cnst0 * T3_dVds ; Q_s0_dVbs = - here->HSMHV2_cnst0 * T3_dVbs ; Q_s0_dT = - cnst0_dT * T3 - here->HSMHV2_cnst0 * T3_dT ; Q_n0 = Q_s0 ; Q_n0_dVgs = Q_s0_dVgs ; Q_n0_dVds = Q_s0_dVds ; Q_n0_dVbs = Q_s0_dVbs ; Q_n0_dT = Q_s0_dT ; Q_b0_dep_dVgs = C_ESI / W_b0 * (phi_b0_DEP_dVgs - phi_j0_DEP_dVgs) * T4 ; Q_b0_dep_dVds = C_ESI / W_b0 * (phi_b0_DEP_dVds - phi_j0_DEP_dVds) * T4 ; Q_b0_dep_dVbs = C_ESI / W_b0 * (phi_b0_DEP_dVbs - phi_j0_DEP_dVbs) * T4 ; Q_b0_dep_dT = C_ESI / W_b0 * (phi_b0_DEP_dT - phi_j0_DEP_dT) * T4 ; Q_sub0_dep_dVgs = - C_ESI / W_sub0 * phi_j0_DEP_dVgs ; Q_sub0_dep_dVds = - C_ESI / W_sub0 * phi_j0_DEP_dVds ; Q_sub0_dep_dVbs = - C_ESI / W_sub0 * (phi_j0_DEP_dVbs - Vbscl_dVbs) ; Q_sub0_dep_dT = - C_ESI / W_sub0 * (phi_j0_DEP_dT - Vbscl_dT + Vbipn_dT) ; Q_sub0_dVgs = 0.0 ; Q_sub0_dVds = 0.0 ; Q_sub0_dVbs = 0.0 ; Q_sub0_dT = 0.0 ; Q_s0_dep_dVgs = 0.0 ; Q_s0_dep_dVds = 0.0 ; Q_s0_dep_dVbs = 0.0 ; Q_s0_dep_dT = 0.0 ; } else { T3 = exp( - beta * (phi_s0_DEP - Vbscl)) ; T4 = exp( - beta * (phi_b0_DEP - Vbscl)) ; T5 = sqrt(T2 - 1.0 - T1 + here->HSMHV2_cnst1 * (T3 - T4) + 1e-15) ; Q_s0 = here->HSMHV2_cnst0 * T5 ; T3_dVgs = - beta * T3 * phi_s0_DEP_dVgs ; T3_dVds = - beta * T3 * phi_s0_DEP_dVds ; T3_dVbs = - beta * T3 * (phi_s0_DEP_dVbs - Vbscl_dVbs) ; T3_dT = - beta * T3 * (phi_s0_DEP_dT - Vbscl_dT) - (phi_s0_DEP - Vbscl) * T3 * beta_dT ; T4_dVgs = - beta * T4 * phi_b0_DEP_dVgs ; T4_dVds = - beta * T4 * phi_b0_DEP_dVds ; T4_dVbs = - beta * T4 * (phi_b0_DEP_dVbs - Vbscl_dVbs) ; T4_dT = - beta * T4 * (phi_b0_DEP_dT - Vbscl_dT) - (phi_b0_DEP - Vbscl) * T4 * beta_dT ; T5_dVgs = (T2_dVgs - T1_dVgs + here->HSMHV2_cnst1 * (T3_dVgs - T4_dVgs)) / 2.0 / T5 ; T5_dVds = (T2_dVds - T1_dVds + here->HSMHV2_cnst1 * (T3_dVds - T4_dVds)) / 2.0 / T5 ; T5_dVbs = (T2_dVbs - T1_dVbs + here->HSMHV2_cnst1 * (T3_dVbs - T4_dVbs)) / 2.0 / T5 ; T5_dT = (T2_dT - T1_dT + here->HSMHV2_cnst1 * (T3_dT - T4_dT) + cnst1_dT * (T3 - T4)) / 2.0 / T5 ; Q_s0_dVgs = here->HSMHV2_cnst0 * T5_dVgs ; Q_s0_dVds = here->HSMHV2_cnst0 * T5_dVds ; Q_s0_dVbs = here->HSMHV2_cnst0 * T5_dVbs ; Q_s0_dT = here->HSMHV2_cnst0 * T5_dT + cnst0_dT * T5 ; if( W_bsub0 > model->HSMHV2_tndep && depmode !=2 ) { Q_sub0 = 0.0 ; Q_s0_dep = 0.0 ; Q_sub0_dVgs = 0.0 ; Q_sub0_dVds = 0.0 ; Q_sub0_dVbs = 0.0 ; Q_sub0_dT = 0.0 ; Q_s0_dep_dVgs = 0.0 ; Q_s0_dep_dVds = 0.0 ; Q_s0_dep_dVbs = 0.0 ; Q_s0_dep_dT = 0.0 ; } else { T3 = exp( - beta * (phi_s0_DEP - Vbscl)) ; T4 = exp( - beta * (phi_b0_DEP - Vbscl)) ; T5 = sqrt( - T1 + here->HSMHV2_cnst1 * (T3 - T4)) ; Q_sub0 = here->HSMHV2_cnst0 * T5 - here->HSMHV2_cnst0 * sqrt( - T1) ; T6 = sqrt(T2 - 1.0e0 - T1 + 1e-15) ; Q_s0_dep = here->HSMHV2_cnst0 * T6 ; Q_sub0_dVgs = here->HSMHV2_cnst0 / 2.0 / T5 * ( - beta * (phi_s0_DEP_dVgs - phi_b0_DEP_dVgs) + here->HSMHV2_cnst1 * ( - beta * T3 * phi_s0_DEP_dVgs + beta * T4 * phi_b0_DEP_dVgs)) - here->HSMHV2_cnst0 / 2.0 / sqrt( - T1) * ( - beta * (phi_s0_DEP_dVgs - phi_b0_DEP_dVgs)) ; Q_sub0_dVds = here->HSMHV2_cnst0 / 2.0 / T5 * ( - beta * (phi_s0_DEP_dVds - phi_b0_DEP_dVds) + here->HSMHV2_cnst1 * ( - beta * T3 * phi_s0_DEP_dVds + beta * T4 * phi_b0_DEP_dVds)) - here->HSMHV2_cnst0 / 2.0 / sqrt( - T1) * ( - beta * (phi_s0_DEP_dVds - phi_b0_DEP_dVds)) ; Q_sub0_dVbs = here->HSMHV2_cnst0 / 2.0 / T5 * ( - beta * (phi_s0_DEP_dVbs - phi_b0_DEP_dVbs) + here->HSMHV2_cnst1 * ( - beta * T3 * (phi_s0_DEP_dVbs - Vbscl_dVbs) + beta * T4 * (phi_b0_DEP_dVbs - Vbscl_dVbs))) - here->HSMHV2_cnst0 / 2.0 / sqrt( - T1) * ( - beta * (phi_s0_DEP_dVbs - phi_b0_DEP_dVbs)) ; Q_sub0_dT = cnst0_dT * T5 - cnst0_dT * sqrt( - T1) + here->HSMHV2_cnst0 / 2.0 / T5 * ( - beta * (phi_s0_DEP_dT - phi_b0_DEP_dT) - beta_dT * (phi_s0_DEP - phi_b0_DEP) + cnst1_dT * (T3 - T4) + here->HSMHV2_cnst1 * ( - beta * T3 * (phi_s0_DEP_dT - Vbscl_dT) - beta_dT * (phi_s0_DEP - Vbscl) * T3 + beta * T4 * (phi_b0_DEP_dT - Vbscl_dT) + beta_dT * (phi_b0_DEP - Vbscl) * T4)) - here->HSMHV2_cnst0 / 2.0 / sqrt( - T1) * ( - beta * (phi_s0_DEP_dT - phi_b0_DEP_dT) - beta_dT * (phi_s0_DEP - phi_b0_DEP)) ; Q_s0_dep_dVgs = here->HSMHV2_cnst0 / 2.0 / T6 * beta * (phi_s0_DEP_dVgs - phi_b0_DEP_dVgs) * (T2 - 1) ; Q_s0_dep_dVds = here->HSMHV2_cnst0 / 2.0 / T6 * beta * (phi_s0_DEP_dVds - phi_b0_DEP_dVds) * (T2 - 1) ; Q_s0_dep_dVbs = here->HSMHV2_cnst0 / 2.0 / T6 * beta * (phi_s0_DEP_dVbs - phi_b0_DEP_dVbs) * (T2 - 1) ; Q_s0_dep_dT = cnst0_dT * T6 + here->HSMHV2_cnst0 / 2.0 / T6 * (beta * (phi_s0_DEP_dT - phi_b0_DEP_dT) * (T2 - 1) + beta_dT * (phi_s0_DEP - phi_b0_DEP) * (T2 - 1)) ; } Q_n0 = 0.0 ; Q_n0_dVgs = 0.0 ; Q_n0_dVds = 0.0 ; Q_n0_dVbs = 0.0 ; Q_n0_dT = 0.0 ; /// Qg = Cox * (Vgp - phi_s0_DEP) ; T1 = phi_b0_DEP - phi_j0_DEP ; Fn_SL_CP( T2 , T1 , 0.0 , 0.1, 2 , T0 ) W_b0 = sqrt(C_2ESIpq_Ndepm * (T2) ) ; Fn_SU_CP( T9 , W_b0 , model->HSMHV2_tndep, 1e-8, 2 , T3 ) W_sub0 = sqrt(C_2ESIpq_Nsub * (phi_j0_DEP - Vbscl + Vbi_DEP) ) ; Q_b0_dep = T9 * q_Ndepm ; Q_sub0_dep = - W_sub0 * q_Nsub ; Q_b0_dep_dVgs = C_ESI / W_b0 * (phi_b0_DEP_dVgs - phi_j0_DEP_dVgs) * T0 * T3 ; Q_b0_dep_dVds = C_ESI / W_b0 * (phi_b0_DEP_dVds - phi_j0_DEP_dVds) * T0 * T3 ; Q_b0_dep_dVbs = C_ESI / W_b0 * (phi_b0_DEP_dVbs - phi_j0_DEP_dVbs) * T0 * T3 ; Q_b0_dep_dT = C_ESI / W_b0 * (phi_b0_DEP_dT - phi_j0_DEP_dT) * T0 * T3 ; Q_sub0_dep_dVgs = - C_ESI / W_sub0 * phi_j0_DEP_dVgs ; Q_sub0_dep_dVds = - C_ESI / W_sub0 * phi_j0_DEP_dVds ; Q_sub0_dep_dVbs = - C_ESI / W_sub0 * (phi_j0_DEP_dVbs - Vbscl_dVbs) ; Q_sub0_dep_dT = - C_ESI / W_sub0 * (phi_j0_DEP_dT - Vbscl_dT + Vbipn_dT) ; } T1 = phi_b0_DEP - phi_j0_DEP ; Fn_SL_CP( T2 , T1 , 0.0 , 0.1, 2 , T0 ) W_b0 = sqrt(C_2ESIpq_Ndepm * (T2) ) ; Fn_SU_CP( T9, W_b0, model->HSMHV2_tndep, 1e-8, 2 , T3 ) W_b0_dVgs = C_ESI / q_Ndepm / W_b0 * (phi_b0_DEP_dVgs - phi_j0_DEP_dVgs) * T0 * T3 ; W_b0_dVds = C_ESI / q_Ndepm / W_b0 * (phi_b0_DEP_dVds - phi_j0_DEP_dVds) * T0 * T3 ; W_b0_dVbs = C_ESI / q_Ndepm / W_b0 * (phi_b0_DEP_dVbs - phi_j0_DEP_dVbs) * T0 * T3 ; W_b0_dT = C_ESI / q_Ndepm / W_b0 * (phi_b0_DEP_dT - phi_j0_DEP_dT) * T0 * T3 ; T1 = phi_b0_DEP - phi_s0_DEP ; Fn_SL_CP( T2 , T1 , 0.0 , 0.05, 2 , T0 ) W_s0 = sqrt(C_2ESIpq_Ndepm * (T2) ) ; W_s0_dVgs = C_ESI / q_Ndepm / W_s0 * (phi_b0_DEP_dVgs - phi_s0_DEP_dVgs) * T0 ; W_s0_dVds = C_ESI / q_Ndepm / W_s0 * (phi_b0_DEP_dVds - phi_s0_DEP_dVds) * T0 ; W_s0_dVbs = C_ESI / q_Ndepm / W_s0 * (phi_b0_DEP_dVbs - phi_s0_DEP_dVbs) * T0 ; W_s0_dT = C_ESI / q_Ndepm / W_s0 * (phi_b0_DEP_dT - phi_s0_DEP_dT) * T0 ; T1 = model->HSMHV2_tndep - T9 - W_s0 ; Fn_SL_CP( W_res0 , T1 , 1.0e-25 , 1.0e-18, 2 , T0 ) Qn_res0 = - W_res0 * q_Ndepm ; Qn_res0_dVgs = (W_s0_dVgs + W_b0_dVgs) * q_Ndepm * T0 ; Qn_res0_dVds = (W_s0_dVds + W_b0_dVds) * q_Ndepm * T0 ; Qn_res0_dVbs = (W_s0_dVbs + W_b0_dVbs) * q_Ndepm * T0 ; Qn_res0_dT = (W_s0_dT + W_b0_dT) * q_Ndepm * T0 ; if( W_bsub0 > model->HSMHV2_tndep && depmode !=2 ) { Fn_SU_CP(T3 , phi_s0_DEP , phi_b0_DEP_lim , 0.8, 2 , T1 ) T3_dVgs = phi_s0_DEP_dVgs * T1 ; T3_dVds = phi_s0_DEP_dVds * T1 ; T3_dVbs = phi_s0_DEP_dVbs * T1 ; T3_dT = phi_s0_DEP_dT * T1 ; } else { Fn_SU_CP(T3 , phib_ref , phi_b0_DEP_lim , 0.8, 2 , T0 ) T3_dVgs = phib_ref_dVgs * T0 ; T3_dVds = phib_ref_dVds * T0 ; T3_dVbs = phib_ref_dVbs * T0 ; T3_dT = phib_ref_dT * T0 ; } T4 = exp(beta * (T3 - phi_b0_DEP_lim)) ; T5 = - C_QE * here->HSMHV2_ndepm ; Qn_bac0 = T5 * T4 * T9 ; Qn_bac0_dVgs = T5 * (beta * T4 * T3_dVgs * T9 + T4 * W_b0_dVgs) ; Qn_bac0_dVds = T5 * (beta * T4 * T3_dVds * T9 + T4 * W_b0_dVds) ; Qn_bac0_dVbs = T5 * (beta * T4 * T3_dVbs * T9 + T4 * W_b0_dVbs) ; Qn_bac0_dT = T5 * ((beta * T4 * T3_dT + beta_dT * (T3 - phi_b0_DEP_lim) * T4) * T9 + T4 * W_b0_dT) ; T1 = phi_s0_DEP - phi_b0_DEP_lim ; Fn_SL_CP( T2 , T1 , 0.0, Ps_delta, 2 , T0 ) T2_dVgs = phi_s0_DEP_dVgs * T0 ; T2_dVds = phi_s0_DEP_dVds * T0 ; T2_dVbs = phi_s0_DEP_dVbs * T0 ; T2_dT = phi_s0_DEP_dT * T0 ; T3 = exp(beta * (T2)) ; T3_dVgs = beta * T3 * T2_dVgs ; T3_dVds = beta * T3 * T2_dVds ; T3_dVbs = beta * T3 * T2_dVbs ; T3_dT = beta * T3 * T2_dT + T2 * T3 * beta_dT ; T4 = T3 - 1.0 - beta * T2 ; T4_dVgs = T3_dVgs - beta * T2_dVgs ; T4_dVds = T3_dVds - beta * T2_dVds ; T4_dVbs = T3_dVbs - beta * T2_dVbs ; T4_dT = T3_dT - beta * T2_dT - beta_dT * T2 ; T5 = sqrt(T4) ; Q_n0_cur = - here->HSMHV2_cnst0 * T5 ; Q_n0_cur_dVgs = - here->HSMHV2_cnst0 / 2.0 / T5 * T4_dVgs ; Q_n0_cur_dVds = - here->HSMHV2_cnst0 / 2.0 / T5 * T4_dVds ; Q_n0_cur_dVbs = - here->HSMHV2_cnst0 / 2.0 / T5 * T4_dVbs ; Q_n0_cur_dT = - here->HSMHV2_cnst0 / 2.0 / T5 * T4_dT - cnst0_dT * T5 ; T4 = exp(beta * Ps_delta0) - 1.0 - beta * Ps_delta0 ; T4_dT = Ps_delta0 * exp(beta * Ps_delta0) * beta_dT - beta_dT * Ps_delta0 ; T5 = sqrt(T4) ; T5_dT = 0.5 / T5 * T4_dT ; Qn_delta = here->HSMHV2_cnst0 * T5 ; Qn_delta_dT = cnst0_dT * T5 + here->HSMHV2_cnst0 * T5_dT ; /*-----------------------------------------------------------* * Start point of phi_sL_DEP(= phi_s0_DEP + Pds) calculation.(label) *-----------------*/ /* Vdseff (begin) */ Vdsorg = Vds ; if( Vds > 1e-3 ) { here->HSMHV2_qnsub_esi = q_Ndepm_esi ; T2 = here->HSMHV2_qnsub_esi / ( Cox * Cox ) ; T4 = - 2.0e0 * T2 / Cox ; T2_dVb = T4 * Cox_dVb ; T2_dVd = T4 * Cox_dVd ; T2_dVg = T4 * Cox_dVg ; T2_dT = T4 * Cox_dT ; T0 = Vgp + 2.0 - beta_inv - Vbsz ; T0_dVg = Vgp_dVgs ; T0_dVd = Vgp_dVds - Vbsz_dVds ; T0_dVb = Vgp_dVbs - Vbsz_dVbs ; T0_dT = Vgp_dT - beta_inv_dT - Vbsz_dT ; T4 = 1.0e0 + 2.0e0 / T2 * T0 ; T4_dVg = 2.0 / T2 * T0_dVg - 2.0 / T2 / T2 * T0 * T2_dVg ; T4_dVd = 2.0 / T2 * T0_dVd - 2.0 / T2 / T2 * T0 * T2_dVd ; T4_dVb = 2.0 / T2 * T0_dVb - 2.0 / T2 / T2 * T0 * T2_dVb ; T4_dT = 2.0 / T2 * T0_dT - 2.0 / T2 / T2 * T0 * T2_dT ; Fn_SL_CP( T9 , T4 , 0 , DEPQFN_dlt, 2 , T0 ) T9_dVg = T4_dVg * T0 ; T9_dVd = T4_dVd * T0 ; T9_dVb = T4_dVb * T0 ; T9_dT = T4_dT * T0 ; T9 +=small ; T3 = sqrt( T9 ) ; T3_dVg = 0.5 / T3 * T9_dVg ; T3_dVd = 0.5 / T3 * T9_dVd ; T3_dVb = 0.5 / T3 * T9_dVb ; T3_dT = 0.5 / T3 * T9_dT ; T10 = Vgp + 2.0 + T2 * ( 1.0e0 - T3 ) ; T10_dVb = Vgp_dVbs + T2_dVb * ( 1.0e0 - T3 ) - T2 * T3_dVb ; T10_dVd = Vgp_dVds + T2_dVd * ( 1.0e0 - T3 ) - T2 * T3_dVd ; T10_dVg = Vgp_dVgs + T2_dVg * ( 1.0e0 - T3 ) - T2 * T3_dVg ; T10_dT = Vgp_dT + T2_dT * ( 1.0e0 - T3 ) - T2 * T3_dT ; Fn_SL_CP( T10 , T10 , DEPQFN3, 0.2, 4 , T0 ) T10 = T10 + epsm10 ; T10_dVb *=T0 ; T10_dVd *=T0 ; T10_dVg *=T0 ; T10_dT *= T0 ; T1 = Vds / T10 ; T2 = Fn_Pow( T1 , here->HSMHV2_ddlt - 1.0e0 ) ; T7 = T2 * T1 ; T0 = here->HSMHV2_ddlt * T2 / ( T10 * T10 ) ; T7_dVb = T0 * ( - Vds * T10_dVb ) ; T7_dVd = T0 * ( T10 - Vds * T10_dVd ) ; T7_dVg = T0 * ( - Vds * T10_dVg ) ; T7_dT = T0 * ( - Vds * T10_dT ) ; T3 = 1.0 + T7 ; T4 = Fn_Pow( T3 , 1.0 / here->HSMHV2_ddlt - 1.0 ) ; T6 = T4 * T3 ; T0 = T4 / here->HSMHV2_ddlt ; T6_dVb = T0 * T7_dVb ; T6_dVd = T0 * T7_dVd ; T6_dVg = T0 * T7_dVg ; T6_dT = T0 * T7_dT ; Vdseff = Vds / T6 ; T0 = 1.0 / ( T6 * T6 ) ; Vdseff0_dVbs = - Vds * T6_dVb * T0 ; Vdseff0_dVds = ( T6 - Vds * T6_dVd ) * T0 ; Vdseff0_dVgs = - Vds * T6_dVg * T0 ; Vdseff0_dT = - Vds * T6_dT * T0 ; Fn_SL_CP( Vgpp , Vgp , 0.0 , 0.5, 2 , T0 ) Vgpp_dVgs = T0 * Vgp_dVgs ; Vgpp_dVds = T0 * Vgp_dVds ; Vgpp_dVbs = T0 * Vgp_dVbs ; Vgpp_dT = T0 * Vgp_dT ; T1 = Vgpp * 0.8 ; T1_dVg = Vgpp_dVgs * 0.8 ; T1_dVd = Vgpp_dVds * 0.8 ; T1_dVb = Vgpp_dVbs * 0.8 ; T1_dT = Vgpp_dT * 0.8 ; Fn_SU_CP3( Vds , Vdseff , Vgpp , T1, 2 , T3, T4, T5 ) Vdseff_dVgs = Vdseff0_dVgs * T3 + Vgpp_dVgs * T4 + T1_dVg * T5 ; Vdseff_dVds = Vdseff0_dVds * T3 + Vgpp_dVds * T4 + T1_dVd * T5 ; Vdseff_dVbs = Vdseff0_dVbs * T3 + Vgpp_dVbs * T4 + T1_dVb * T5 ; Vdseff_dT = Vdseff0_dT * T3 + Vgpp_dT * T4 + T1_dT * T5 ; } else { Vdseff = Vds ; Vdseff0_dVgs = 0.0 ; Vdseff0_dVds = 1.0 ; Vdseff0_dVbs = 0.0 ; Vdseff0_dT = 0.0 ; Vdseff_dVgs = 0.0 ; Vdseff_dVds = 1.0 ; Vdseff_dVbs = 0.0 ; Vdseff_dT = 0.0 ; } /* Vdseff (end) */ /*---------------------------------------------------* * start of phi_sL_DEP calculation. (label) *--------------------------------*/ if( Vds <= 0.0e0 ) { phi_sL_DEP = phi_s0_DEP ; phi_sL_DEP_dVgs = phi_s0_DEP_dVgs ; phi_sL_DEP_dVds = phi_s0_DEP_dVds ; phi_sL_DEP_dVbs = phi_s0_DEP_dVbs ; phi_sL_DEP_dT = phi_s0_DEP_dT ; phi_bL_DEP = phi_b0_DEP ; phi_bL_DEP_dVgs = phi_b0_DEP_dVgs ; phi_bL_DEP_dVds = phi_b0_DEP_dVds ; phi_bL_DEP_dVbs = phi_b0_DEP_dVbs ; phi_bL_DEP_dT = phi_b0_DEP_dT ; phi_jL_DEP = phi_j0_DEP ; phi_jL_DEP_dVgs = phi_j0_DEP_dVgs ; phi_jL_DEP_dVds = phi_j0_DEP_dVds ; phi_jL_DEP_dVbs = phi_j0_DEP_dVbs ; phi_jL_DEP_dT = phi_j0_DEP_dT ; Q_subL = Q_sub0 ; Q_subL_dVgs = Q_sub0_dVgs ; Q_subL_dVds = Q_sub0_dVds ; Q_subL_dVbs = Q_sub0_dVbs ; Q_subL_dT = Q_sub0_dT ; Q_nL = Q_n0 ; Q_nL_dVgs = Q_n0_dVgs ; Q_nL_dVds = Q_n0_dVds ; Q_nL_dVbs = Q_n0_dVbs ; Q_nL_dT = Q_n0_dT ; Q_bL_dep = Q_b0_dep ; Q_bL_dep_dVgs = Q_b0_dep_dVgs ; Q_bL_dep_dVds = Q_b0_dep_dVds ; Q_bL_dep_dVbs = Q_b0_dep_dVbs ; Q_bL_dep_dT = Q_b0_dep_dT ; Q_subL_dep = Q_sub0_dep ; Q_subL_dep_dVgs = Q_sub0_dep_dVgs ; Q_subL_dep_dVds = Q_sub0_dep_dVds ; Q_subL_dep_dVbs = Q_sub0_dep_dVbs ; Q_subL_dep_dT = Q_sub0_dep_dT ; Q_sL_dep = Q_s0_dep ; Q_sL_dep_dVgs = Q_s0_dep_dVgs ; Q_sL_dep_dVds = Q_s0_dep_dVds ; Q_sL_dep_dVbs = Q_s0_dep_dVbs ; Q_sL_dep_dT = Q_s0_dep_dT ; Q_nL_cur = Q_n0_cur ; Q_nL_cur_dVgs = Q_n0_cur_dVgs ; Q_nL_cur_dVds = Q_n0_cur_dVds ; Q_nL_cur_dVbs = Q_n0_cur_dVbs ; Q_nL_cur_dT = Q_n0_cur_dT ; } else { W_bsubL = sqrt(C_2ESIpq_Ndepm * here->HSMHV2_nsub / (here->HSMHV2_nsub + here->HSMHV2_ndepm) * (Vds - Vbscl + Vbi_DEP)) ; /*---------------------------------------------------* * region judgement *------------------*/ /* fully depleted case */ if( W_bsubL > model->HSMHV2_tndep ) { Vgp0 = Vds ; W_bL = model->HSMHV2_tndep ; phi_bL_DEP = Vds ; phi_bL_DEP_lim = Vds ; phi_jL_DEP = phi_bL_DEP - C_2ESIpq_Ndepm_inv * W_bL * W_bL ; Vgp0old = Vgp0 ; phi_jL_DEP_old = phi_jL_DEP ; Q_bL_dep = W_bL * q_Ndepm ; for ( lp_s0 = 1 ; lp_s0 <= lp_se_max + 1 ; lp_s0 ++ ) { W_bL = sqrt(C_2ESIpq_Ndepm * (phi_bL_DEP - phi_jL_DEP) ) ; Fn_SU_CP( W_bL , W_bL , model->HSMHV2_tndep , 1e-8, 2 , T0 ) W_subL = sqrt(C_2ESIpq_Nsub * (phi_jL_DEP - Vbscl + Vbi_DEP) ) ; Q_bL_dep = W_bL * q_Ndepm ; Q_bL_dep_dPd = - C_ESI / W_bL * T0 ; Q_subL_dep = - W_subL * q_Nsub ; Q_subL_dep_dPd = - C_ESI / W_subL ; y1 = Cox * (Vgp0 - phi_bL_DEP) + Q_bL_dep + Q_subL_dep ; y11 = Cox ; y12 = Q_bL_dep_dPd + Q_subL_dep_dPd ; y2 = phi_jL_DEP - NdepmpNsub_inv1 * (NdepmpNsub * phi_bL_DEP + Vbscl - Vbi_DEP) ; y21 = 0.0 ; y22 = 1.0 ; dety = y11 * y22 - y21 * y12; rev11 = (y22) / dety ; rev12 = ( - y12) / dety ; rev21 = ( - y21) / dety ; rev22 = (y11) / dety ; if( fabs( rev11 * y1 + rev12 * y2 ) > 0.5 ) { Vgp0 = Vgp0 - 0.5 * Fn_Sgn( rev11 * y1 + rev12 * y2 ) ; phi_jL_DEP = phi_jL_DEP - 0.5 * Fn_Sgn( rev21 * y1 + rev22 * y2 ) ; } else { Vgp0 = Vgp0 - ( rev11 * y1 + rev12 * y2 ) ; phi_jL_DEP = phi_jL_DEP - ( rev21 * y1 + rev22 * y2 ) ; } if( fabs(Vgp0 - Vgp0old) <= ps_conv && fabs(phi_jL_DEP - phi_jL_DEP_old) <= ps_conv ) lp_s0=lp_se_max + 1 ; Vgp0old = Vgp0 ; phi_jL_DEP_old = phi_jL_DEP ; } phi_jL_DEP_acc = phi_jL_DEP ; W_subL = model->HSMHV2_tndep * NdepmpNsub ; phi_jL_DEP = C_2ESIpq_Nsub_inv * W_subL * W_subL + Vbscl - Vbi_DEP ; phi_bL_DEP = phi_jL_DEP + C_2ESIpq_Ndepm_inv * Tn2 ; phi_sL_DEP = phi_bL_DEP ; Psbmax = phi_bL_DEP ; Vgp1 = phi_bL_DEP ; if( Vgp > Vgp0 ) { depmode = 1 ; } else if(Vgp > Vgp1 ) { depmode = 3 ; } else { depmode = 2 ; } /* else */ } else { Vgp0 = Vds ; Vgp1 = Vgp0 ; Psbmax = Vgp0 ; phi_bL_DEP_lim = Vgp0 ; W_bL = W_bsubL ; W_subL = W_bL * NdepmpNsub ; phi_jL_DEP = C_2ESIpq_Nsub_inv * W_subL * W_subL + Vbscl - Vbi_DEP ; phi_bL_DEP = C_2ESIpq_Ndepm_inv * W_bL * W_bL + phi_jL_DEP ; phi_jL_DEP_acc = phi_jL_DEP ; if( Vgp > Vgp0 ) { depmode = 1 ; } else { depmode = 2 ; } } T1 = C_2ESI_q_Ndepm * ( Psbmax - ( - here->HSMHV2_Pb2n + Vbscl)) ; if ( T1 > 0.0 ) { vthn = - here->HSMHV2_Pb2n + Vbscl - sqrt(T1) / Cox ; } else { vthn = - here->HSMHV2_Pb2n + Vbscl ; } /*---------------------------------------------------* * initial potential phi_s0_DEP,phi_bL_DEP,phi_jL_DEP calculated. *------------------*/ /* accumulation region */ if( Vgp > Vgp0 ) { phi_jL_DEP = phi_jL_DEP_acc ; phi_bL_DEP = Vds ; phi_sL_DEP_ini = log(afact * Vgp * Vgp) / (beta + 2.0 / Vgp) + Vds ; if( phi_sL_DEP_ini < phi_bL_DEP_lim + ps_conv23 ) phi_sL_DEP_ini = phi_bL_DEP_lim + ps_conv23 ; /* fully depleted region */ } else if( Vgp > Vgp1 ) { phi_sL_DEP_ini = phi_sL_DEP ; /* depletion & inversion */ } else { /* depletion */ if( Vgp > vthn ) { bfact = - 2.0 * afact * Vgp + beta ; cfact = afact * Vgp * Vgp - beta * phi_bL_DEP ; phi_bL_DEP_old = phi_bL_DEP ; phi_sL_DEP_ini = ( - bfact + sqrt(bfact * bfact - 4.0 * afact * cfact)) / 2.0 / afact ; if( phi_sL_DEP_ini > Psbmax - ps_conv23 ) phi_sL_DEP_ini = Psbmax - ps_conv23 ; W_sL = sqrt(C_2ESIpq_Ndepm * (phi_bL_DEP - phi_sL_DEP_ini) ) ; W_bL = sqrt(C_2ESIpq_Ndepm * (phi_bL_DEP - phi_jL_DEP) ) ; if( W_sL + W_bL > model->HSMHV2_tndep ) { for ( lp_s0 = 1 ; lp_s0 <= lp_se_max + 1 ; lp_s0 ++ ) { y0 = W_sL + W_bL - model->HSMHV2_tndep ; dydPsm = C_ESI / q_Ndepm / W_sL + C_ESI / q_Ndepm * ( 1.0 - (here->HSMHV2_ndepm / here->HSMHV2_nsub) / ( 1.0 + (NdepmpNsub))) / W_bL ; if( fabs(y0 / dydPsm) > 0.5 ) { phi_bL_DEP = phi_bL_DEP - 0.5 * Fn_Sgn(y0 / dydPsm) ; } else { phi_bL_DEP = phi_bL_DEP - y0 / dydPsm ; } if( (phi_bL_DEP - Vbscl + Vbi_DEP) < epsm10 ) phi_bL_DEP=Vbscl - Vbi_DEP + epsm10 ; cfact = afact * Vgp * Vgp - beta * phi_bL_DEP ; T1 = bfact * bfact - 4.0 * afact * cfact ; if( T1 > 0.0 ) { phi_sL_DEP_ini = ( - bfact + sqrt(T1)) / 2.0 / afact ; } else { phi_sL_DEP_ini = ( - bfact) / 2.0 / afact ; } if( phi_sL_DEP_ini > Psbmax ) phi_sL_DEP_ini = Psbmax ; if( phi_sL_DEP_ini > phi_bL_DEP ) { phi_sL_DEP_ini = phi_bL_DEP - ps_conv23 ; lp_s0=lp_se_max + 1 ; } W_sL = sqrt(C_2ESIpq_Ndepm * (phi_bL_DEP - phi_sL_DEP_ini) ) ; phi_jL_DEP = ( NdepmpNsub * phi_bL_DEP + Vbscl - Vbi_DEP) / (1.0 + NdepmpNsub) ; W_bL = sqrt(C_2ESIpq_Ndepm * (phi_bL_DEP - phi_jL_DEP) ) ; if( fabs(phi_bL_DEP - phi_bL_DEP_old) <= 1.0e-8 ) lp_s0=lp_se_max + 1 ; phi_bL_DEP_old = phi_bL_DEP ; } } /* inversion */ } else { phi_bL_DEP = phi_b0_DEP ; phi_jL_DEP = phi_j0_DEP ; phi_sL_DEP_ini = phi_s0_DEP ; } } phi_b0_DEP_ini = phi_bL_DEP ; /* */ /* solve poisson at drain side */ /* */ flg_conv = 0 ; /* accumulation */ phi_sL_DEP = phi_sL_DEP_ini ; phi_bL_DEP = phi_b0_DEP_ini ; phi_sL_DEP_old = phi_sL_DEP ; phi_bL_DEP_old = phi_bL_DEP ; for ( lp_s0 = 1 ; lp_s0 <= lp_se_max + 1 ; lp_s0 ++ ) { phi_jL_DEP = NdepmpNsub_inv1 * (NdepmpNsub * phi_bL_DEP + Vbscl - Vbi_DEP) ; phi_jL_DEP_dPb = NdepmpNsub_inv1 * NdepmpNsub ; T1 = phi_bL_DEP - phi_jL_DEP ; Fn_SL_CP( T2 , T1 , 0.0 , 0.1, 2 , T7 ) W_bL = sqrt(C_2ESIpq_Ndepm * (T2) ) ; Fn_SU_CP( W_bL , W_bL , model->HSMHV2_tndep , 1e-8, 2 , T8 ) W_subL = sqrt(C_2ESIpq_Nsub * (phi_jL_DEP - Vbscl + Vbi_DEP) ) ; Q_bL_dep = W_bL * q_Ndepm ; Q_bL_dep_dPb = C_ESI / W_bL * T7 * T8 ; Q_bL_dep_dPd = - C_ESI / W_bL * T7 * T8 ; Q_subL_dep = - W_subL * q_Nsub ; Q_subL_dep_dPd = - C_ESI / W_subL ; T10 = 8.0 * q_Ndepm_esi * Tn2 ; phib_ref = (4.0 * phi_jL_DEP * phi_jL_DEP * C_ESI2 - 8.0 * phi_jL_DEP * C_ESI2 * phi_sL_DEP + 4.0 * C_ESI2 * phi_sL_DEP * phi_sL_DEP + 4.0 * phi_jL_DEP * q_Ndepm_esi * Tn2 + 4.0 * phi_sL_DEP * q_Ndepm_esi * Tn2 + Ndepm2 * C_QE2 * model->HSMHV2_tndep * Tn2 * model->HSMHV2_tndep) / T10 ; phib_ref_dPs = ( - 8.0 * phi_jL_DEP * C_ESI2 + 4.0 * C_ESI2 * phi_sL_DEP * 2.0 + 4.0 * q_Ndepm_esi * Tn2) / T10 ; phib_ref_dPd = (4.0 * phi_jL_DEP * C_ESI2 * 2.0 - 8.0 * C_ESI2 * phi_sL_DEP + 4.0 * q_Ndepm_esi * Tn2) / T10 ; T1 = beta * (phi_sL_DEP - phi_bL_DEP) ; T2 = exp(T1) ; if( phi_sL_DEP >= phi_bL_DEP ) { Q_sL = - here->HSMHV2_cnst0 * sqrt(T2 - 1.0 - T1 + 1e-15) ; Q_sL_dPs = 0.5 * here->HSMHV2_cnst0 * here->HSMHV2_cnst0 / Q_sL * (beta * T2 - beta) ; Q_sL_dPb = - Q_sL_dPs ; } else { T3 = exp( - beta * (phi_sL_DEP - Vbscl)) ; T4 = exp( - beta * (phi_bL_DEP - Vbscl)) ; Q_sL = here->HSMHV2_cnst0 * sqrt(T2 - 1.0 - T1 + here->HSMHV2_cnst1 * (T3 - T4) + 1e-15) ; T5 = 0.5 * here->HSMHV2_cnst0 * here->HSMHV2_cnst0 / Q_sL ; Q_sL_dPs = T5 * (beta * T2 - beta + here->HSMHV2_cnst1 * ( - beta * T3) ) ; Q_sL_dPb = T5 * ( - beta * T2 + beta + here->HSMHV2_cnst1 * beta * T4 ) ; } Fn_SU_CP2( T1 , phib_ref , phi_bL_DEP_lim , sm_delta, 4 , T9, T11 ) y1 = phi_bL_DEP - T1 ; y11 = - phib_ref_dPs * T9 ; y12 = 1.0 - phib_ref_dPd * phi_jL_DEP_dPb * T9 ; y2 = Cox * (Vgp - phi_sL_DEP) + Q_sL + Q_bL_dep + Q_subL_dep ; y21 = - Cox + Q_sL_dPs ; y22 = Q_sL_dPb + Q_bL_dep_dPb + Q_bL_dep_dPd * phi_jL_DEP_dPb + Q_subL_dep_dPd * phi_jL_DEP_dPb ; dety = y11 * y22 - y21 * y12; rev11 = (y22) / dety ; rev12 = ( - y12) / dety ; rev21 = ( - y21) / dety ; rev22 = (y11) / dety ; if( fabs( rev21 * y1 + rev22 * y2 ) > 0.5 ) { phi_sL_DEP = phi_sL_DEP - 0.5 * Fn_Sgn( rev11 * y1 + rev12 * y2 ) ; phi_bL_DEP = phi_bL_DEP - 0.5 * Fn_Sgn( rev21 * y1 + rev22 * y2 ) ; } else { phi_sL_DEP = phi_sL_DEP - ( rev11 * y1 + rev12 * y2 ) ; phi_bL_DEP = phi_bL_DEP - ( rev21 * y1 + rev22 * y2 ) ; } if( fabs(phi_sL_DEP - phi_sL_DEP_old) <= ps_conv && fabs(phi_bL_DEP - phi_bL_DEP_old) <= ps_conv ) { lp_s0=lp_se_max + 1 ; flg_conv = 1 ; } phi_sL_DEP_old = phi_sL_DEP ; phi_bL_DEP_old = phi_bL_DEP ; } if( flg_conv == 0 ) { printf( "*** warning(HiSIM_HV(%s)): Went Over Iteration Maximum(Psl)\n",model->HSMHV2modName ) ; printf( " Vbse = %7.3f Vdse = %7.3f Vgse = %7.3f\n" ,Vbse , Vdse , Vgse ) ; } /* caluculate derivative */ y1_dVgs = - Vdseff_dVgs * T11 ; y1_dVds = - Vdseff_dVds * T11 ; y1_dVbs = - (8.0 * phi_jL_DEP * C_ESI2 - 8.0 * C_ESI2 * phi_sL_DEP + 4.0 * q_Ndepm_esi * Tn2) / T10 * T9 * NdepmpNsub_inv1 * Vbscl_dVbs - Vdseff_dVbs * T11 ; y1_dT = - (8.0 * phi_jL_DEP * C_ESI2 - 8.0 * C_ESI2 * phi_sL_DEP + 4.0 * q_Ndepm_esi * Tn2) / T10 * T9 * NdepmpNsub_inv1 * (Vbscl_dT - Vbipn_dT) - Vdseff_dT * T11 ; Q_bL_dep_dVbs = - C_ESI / W_bL * T7 * T8 * NdepmpNsub_inv1 * Vbscl_dVbs ; Q_bL_dep_dT = - C_ESI / W_bL * T7 * T8 * NdepmpNsub_inv1 * (Vbscl_dT - Vbipn_dT) ; Q_subL_dep_dVbs = - C_ESI / W_subL * (NdepmpNsub_inv1 * Vbscl_dVbs - Vbscl_dVbs) ; Q_subL_dep_dT = - C_ESI / W_subL * (NdepmpNsub_inv1 * (Vbscl_dT - Vbipn_dT) - Vbscl_dT + Vbipn_dT) ; T1 = beta * (phi_sL_DEP - phi_bL_DEP) ; T2 = exp(T1) ; if( phi_sL_DEP >= phi_bL_DEP ) { Q_sL_dVbs = 0.0 ; Q_sL_dT = - cnst0_dT * sqrt(T2 - 1.0 - T1 + 1e-15) - here->HSMHV2_cnst0 / 2.0 / sqrt(T2 - 1.0 - T1 + 1e-15) * ((phi_sL_DEP - phi_bL_DEP) * T2 * beta_dT - (phi_sL_DEP - phi_bL_DEP) * beta_dT) ; } else { T3 = exp( - beta * (phi_sL_DEP - Vbscl)) ; T4 = exp( - beta * (phi_bL_DEP - Vbscl)) ; T5 = sqrt(T2 - 1.0 - T1 + 1e-15 + here->HSMHV2_cnst1 * (T3 - T4)) ; Q_sL_dVbs = here->HSMHV2_cnst0 / 2.0 / T5 * (here->HSMHV2_cnst1 * (beta * T3 * Vbscl_dVbs - beta * T4 * Vbscl_dVbs) ) ; Q_sL_dT = cnst0_dT * T5 + here->HSMHV2_cnst0 / 2.0 / T5 * ((phi_sL_DEP - phi_bL_DEP) * T2 * beta_dT - (phi_sL_DEP - phi_bL_DEP) * beta_dT + cnst1_dT * (T3 - T4) + here->HSMHV2_cnst1 * ( - (phi_sL_DEP - Vbscl) * T3 * beta_dT + beta * T3 * Vbscl_dT + (phi_bL_DEP - Vbscl) * T4 * beta_dT - beta * T4 * Vbscl_dT) ) ; } y2_dVgs = Cox_dVg * (Vgp - phi_sL_DEP) + Cox * Vgp_dVgs ; y2_dVds = Cox_dVd * (Vgp - phi_sL_DEP) + Cox * Vgp_dVds ; y2_dVbs = Cox_dVb * (Vgp - phi_sL_DEP) + Cox * Vgp_dVbs + Q_sL_dVbs + Q_bL_dep_dVbs + Q_subL_dep_dVbs ; y2_dT = Cox_dT * (Vgp - phi_sL_DEP) + Cox * Vgp_dT + Q_sL_dT + Q_bL_dep_dT + Q_subL_dep_dT ; phi_sL_DEP_dVgs = - ( rev11 * y1_dVgs + rev12 * y2_dVgs ) ; phi_sL_DEP_dVds = - ( rev11 * y1_dVds + rev12 * y2_dVds ) ; phi_sL_DEP_dVbs = - ( rev11 * y1_dVbs + rev12 * y2_dVbs ) ; phi_sL_DEP_dT = - ( rev11 * y1_dT + rev12 * y2_dT ) ; phi_bL_DEP_dVgs = - ( rev21 * y1_dVgs + rev22 * y2_dVgs ) ; phi_bL_DEP_dVds = - ( rev21 * y1_dVds + rev22 * y2_dVds ) ; phi_bL_DEP_dVbs = - ( rev21 * y1_dVbs + rev22 * y2_dVbs ) ; phi_bL_DEP_dT = - ( rev21 * y1_dT + rev22 * y2_dT ) ; if( W_bsubL > model->HSMHV2_tndep && depmode !=2 ) { Fn_SU_CP2(phi_bL_DEP , phi_bL_DEP , phi_sL_DEP , 0.02, 2 , T1, T2 ) phi_bL_DEP_dVgs = phi_bL_DEP_dVgs * T1 + phi_sL_DEP_dVgs * T2 ; phi_bL_DEP_dVds = phi_bL_DEP_dVds * T1 + phi_sL_DEP_dVds * T2 ; phi_bL_DEP_dVbs = phi_bL_DEP_dVbs * T1 + phi_sL_DEP_dVbs * T2 ; phi_bL_DEP_dT = phi_bL_DEP_dT * T1 + phi_sL_DEP_dT * T2 ; } phi_jL_DEP = NdepmpNsub_inv1 * (NdepmpNsub * phi_bL_DEP + Vbscl - Vbi_DEP) ; phi_jL_DEP_dVgs = NdepmpNsub_inv1 * NdepmpNsub * phi_bL_DEP_dVgs ; phi_jL_DEP_dVds = NdepmpNsub_inv1 * NdepmpNsub * phi_bL_DEP_dVds ; phi_jL_DEP_dVbs = NdepmpNsub_inv1 * NdepmpNsub * phi_bL_DEP_dVbs + NdepmpNsub_inv1 * Vbscl_dVbs ; phi_jL_DEP_dT = NdepmpNsub_inv1 * NdepmpNsub * phi_bL_DEP_dT + NdepmpNsub_inv1 * (Vbscl_dT - Vbipn_dT) ; phib_ref = (4.0 * phi_jL_DEP * phi_jL_DEP * C_ESI2 - 8.0 * phi_jL_DEP * C_ESI2 * phi_sL_DEP + 4.0 * C_ESI2 * phi_sL_DEP * phi_sL_DEP + 4.0 * phi_jL_DEP * q_Ndepm_esi * Tn2 + 4.0 * phi_sL_DEP * q_Ndepm_esi * Tn2 + Ndepm2 * C_QE2 * model->HSMHV2_tndep * Tn2 * model->HSMHV2_tndep) / T10 ; phib_ref_dVgs = ( 8.0 * phi_jL_DEP * phi_jL_DEP_dVgs * C_ESI2 - 8.0 * phi_jL_DEP_dVgs * C_ESI2 * phi_sL_DEP - 8.0 * phi_jL_DEP * C_ESI2 * phi_sL_DEP_dVgs + 8.0 * C_ESI2 * phi_sL_DEP * phi_sL_DEP_dVgs + 4.0 * phi_jL_DEP_dVgs * q_Ndepm_esi * Tn2 + 4.0 * phi_sL_DEP_dVgs * q_Ndepm_esi * Tn2 ) / T10 ; phib_ref_dVds = ( 8.0 * phi_jL_DEP * phi_jL_DEP_dVds * C_ESI2 - 8.0 * phi_jL_DEP_dVds * C_ESI2 * phi_sL_DEP - 8.0 * phi_jL_DEP * C_ESI2 * phi_sL_DEP_dVds + 8.0 * C_ESI2 * phi_sL_DEP * phi_sL_DEP_dVds + 4.0 * phi_jL_DEP_dVds * q_Ndepm_esi * Tn2 + 4.0 * phi_sL_DEP_dVds * q_Ndepm_esi * Tn2 ) / T10 ; phib_ref_dVbs = ( 8.0 * phi_jL_DEP * phi_jL_DEP_dVbs * C_ESI2 - 8.0 * phi_jL_DEP_dVbs * C_ESI2 * phi_sL_DEP - 8.0 * phi_jL_DEP * C_ESI2 * phi_sL_DEP_dVbs + 8.0 * C_ESI2 * phi_sL_DEP * phi_sL_DEP_dVbs + 4.0 * phi_jL_DEP_dVbs * q_Ndepm_esi * Tn2 + 4.0 * phi_sL_DEP_dVbs * q_Ndepm_esi * Tn2 ) / T10 ; phib_ref_dT = ( 8.0 * phi_jL_DEP * phi_jL_DEP_dT * C_ESI2 - 8.0 * phi_jL_DEP_dT * C_ESI2 * phi_sL_DEP - 8.0 * phi_jL_DEP * C_ESI2 * phi_sL_DEP_dT + 8.0 * C_ESI2 * phi_sL_DEP * phi_sL_DEP_dT + 4.0 * phi_jL_DEP_dT * q_Ndepm_esi * Tn2 + 4.0 * phi_sL_DEP_dT * q_Ndepm_esi * Tn2 ) / T10 ; T1 = beta * (phi_sL_DEP - phi_bL_DEP) ; T1_dVgs = beta * (phi_sL_DEP_dVgs - phi_bL_DEP_dVgs) ; T1_dVds = beta * (phi_sL_DEP_dVds - phi_bL_DEP_dVds) ; T1_dVbs = beta * (phi_sL_DEP_dVbs - phi_bL_DEP_dVbs) ; T1_dT = beta * (phi_sL_DEP_dT - phi_bL_DEP_dT) + beta_dT * (phi_sL_DEP - phi_bL_DEP) ; T2 = exp(T1) ; T2_dVgs = T1_dVgs * T2 ; T2_dVds = T1_dVds * T2 ; T2_dVbs = T1_dVbs * T2 ; T2_dT = T1_dT * T2 ; if( phi_sL_DEP >= phi_bL_DEP ) { T3 = sqrt(T2 - 1.0e0 - T1 + 1e-15 ) ; T3_dVgs = (T2_dVgs - T1_dVgs) / 2.0 / T3 ; T3_dVds = (T2_dVds - T1_dVds) / 2.0 / T3 ; T3_dVbs = (T2_dVbs - T1_dVbs) / 2.0 / T3 ; T3_dT = (T2_dT - T1_dT) / 2.0 / T3 ; Q_sL = - here->HSMHV2_cnst0 * T3 ; Q_sL_dep = 0.0 ; Q_subL = 0.0 ; /// Qg = Cox * (Vgp - phi_sL_DEP) ; W_bL = sqrt(C_2ESIpq_Ndepm * (phi_bL_DEP - phi_jL_DEP) ) ; Fn_SU_CP( T9 , W_bL , model->HSMHV2_tndep, 1e-8, 2 , T4 ) W_subL = sqrt(C_2ESIpq_Nsub * (phi_jL_DEP - Vbscl + Vbi_DEP) ) ; Q_bL_dep = T9 * q_Ndepm ; Q_subL_dep = - W_subL * q_Nsub ; /* derivative */ Q_sL_dVgs = - here->HSMHV2_cnst0 * T3_dVgs ; Q_sL_dVds = - here->HSMHV2_cnst0 * T3_dVds ; Q_sL_dVbs = - here->HSMHV2_cnst0 * T3_dVbs ; Q_sL_dT = - cnst0_dT * T3 - here->HSMHV2_cnst0 * T3_dT ; Q_nL = Q_sL ; Q_nL_dVgs = Q_sL_dVgs ; Q_nL_dVds = Q_sL_dVds ; Q_nL_dVbs = Q_sL_dVbs ; Q_nL_dT = Q_sL_dT ; Q_bL_dep_dVgs = C_ESI / W_bL * (phi_bL_DEP_dVgs - phi_jL_DEP_dVgs) * T4 ; Q_bL_dep_dVds = C_ESI / W_bL * (phi_bL_DEP_dVds - phi_jL_DEP_dVds) * T4 ; Q_bL_dep_dVbs = C_ESI / W_bL * (phi_bL_DEP_dVbs - phi_jL_DEP_dVbs) * T4 ; Q_bL_dep_dT = C_ESI / W_bL * (phi_bL_DEP_dT - phi_jL_DEP_dT) * T4 ; Q_subL_dep_dVgs = - C_ESI / W_subL * phi_jL_DEP_dVgs ; Q_subL_dep_dVds = - C_ESI / W_subL * phi_jL_DEP_dVds ; Q_subL_dep_dVbs = - C_ESI / W_subL * (phi_jL_DEP_dVbs - Vbscl_dVbs) ; Q_subL_dep_dT = - C_ESI / W_subL * (phi_jL_DEP_dT - Vbscl_dT + Vbipn_dT) ; Q_subL_dVgs = 0.0 ; Q_subL_dVds = 0.0 ; Q_subL_dVbs = 0.0 ; Q_subL_dT = 0.0 ; Q_sL_dep_dVgs = 0.0 ; Q_sL_dep_dVds = 0.0 ; Q_sL_dep_dVbs = 0.0 ; Q_sL_dep_dT = 0.0 ; } else { T3 = exp( - beta * (phi_sL_DEP - Vbscl)) ; T4 = exp( - beta * (phi_bL_DEP - Vbscl)) ; T5 = sqrt(T2 - 1.0 - T1 + here->HSMHV2_cnst1 * (T3 - T4) + 1e-15) ; Q_sL = here->HSMHV2_cnst0 * T5 ; T3_dVgs = - beta * T3 * phi_sL_DEP_dVgs ; T3_dVds = - beta * T3 * phi_sL_DEP_dVds ; T3_dVbs = - beta * T3 * (phi_sL_DEP_dVbs - Vbscl_dVbs) ; T3_dT = - beta * T3 * (phi_sL_DEP_dT - Vbscl_dT) - (phi_sL_DEP - Vbscl) * T3 * beta_dT ; T4_dVgs = - beta * T4 * phi_bL_DEP_dVgs ; T4_dVds = - beta * T4 * phi_bL_DEP_dVds ; T4_dVbs = - beta * T4 * (phi_bL_DEP_dVbs - Vbscl_dVbs) ; T4_dT = - beta * T4 * (phi_bL_DEP_dT - Vbscl_dT) - (phi_bL_DEP - Vbscl) * T4 * beta_dT ; T5_dVgs = (T2_dVgs - T1_dVgs + here->HSMHV2_cnst1 * (T3_dVgs - T4_dVgs)) / 2.0 / T5 ; T5_dVds = (T2_dVds - T1_dVds + here->HSMHV2_cnst1 * (T3_dVds - T4_dVds)) / 2.0 / T5 ; T5_dVbs = (T2_dVbs - T1_dVbs + here->HSMHV2_cnst1 * (T3_dVbs - T4_dVbs)) / 2.0 / T5 ; T5_dT = (T2_dT - T1_dT + here->HSMHV2_cnst1 * (T3_dT - T4_dT) + cnst1_dT * (T3 - T4)) / 2.0 / T5 ; Q_sL_dVgs = here->HSMHV2_cnst0 * T5_dVgs ; Q_sL_dVds = here->HSMHV2_cnst0 * T5_dVds ; Q_sL_dVbs = here->HSMHV2_cnst0 * T5_dVbs ; Q_sL_dT = here->HSMHV2_cnst0 * T5_dT + cnst0_dT * T5 ; if( W_bsubL > model->HSMHV2_tndep && depmode !=2 ) { Q_subL = 0.0 ; Q_sL_dep = 0.0 ; Q_subL_dVgs = 0.0 ; Q_subL_dVds = 0.0 ; Q_subL_dVbs = 0.0 ; Q_subL_dT = 0.0 ; Q_sL_dep_dVgs = 0.0 ; Q_sL_dep_dVds = 0.0 ; Q_sL_dep_dVbs = 0.0 ; Q_sL_dep_dT = 0.0 ; } else { T3 = exp( - beta * (phi_sL_DEP - Vbscl)) ; T4 = exp( - beta * (phi_bL_DEP - Vbscl)) ; T5 = sqrt( - T1 + here->HSMHV2_cnst1 * (T3 - T4)) ; Q_subL = here->HSMHV2_cnst0 * T5 - here->HSMHV2_cnst0 * sqrt( - T1) ; T6 = sqrt(T2 - 1.0e0 - T1 + 1e-15) ; Q_sL_dep = here->HSMHV2_cnst0 * T6 ; Q_subL_dVgs = here->HSMHV2_cnst0 / 2.0 / T5 * ( - beta * (phi_sL_DEP_dVgs - phi_bL_DEP_dVgs) + here->HSMHV2_cnst1 * ( - beta * T3 * phi_sL_DEP_dVgs + beta * T4 * phi_bL_DEP_dVgs)) - here->HSMHV2_cnst0 / 2.0 / sqrt( - T1) * ( - beta * (phi_sL_DEP_dVgs - phi_bL_DEP_dVgs)) ; Q_subL_dVds = here->HSMHV2_cnst0 / 2.0 / T5 * ( - beta * (phi_sL_DEP_dVds - phi_bL_DEP_dVds) + here->HSMHV2_cnst1 * ( - beta * T3 * phi_sL_DEP_dVds + beta * T4 * phi_bL_DEP_dVds)) - here->HSMHV2_cnst0 / 2.0 / sqrt( - T1) * ( - beta * (phi_sL_DEP_dVds - phi_bL_DEP_dVds)) ; Q_subL_dVbs = here->HSMHV2_cnst0 / 2.0 / T5 * ( - beta * (phi_sL_DEP_dVbs - phi_bL_DEP_dVbs) + here->HSMHV2_cnst1 * ( - beta * T3 * (phi_sL_DEP_dVbs - Vbscl_dVbs) + beta * T4 * (phi_bL_DEP_dVbs - Vbscl_dVbs))) - here->HSMHV2_cnst0 / 2.0 / sqrt( - T1) * ( - beta * (phi_sL_DEP_dVbs - phi_bL_DEP_dVbs)) ; Q_subL_dT = cnst0_dT * T5 - cnst0_dT * sqrt( - T1) + here->HSMHV2_cnst0 / 2.0 / T5 * ( - beta * (phi_sL_DEP_dT - phi_bL_DEP_dT) - beta_dT * (phi_sL_DEP - phi_bL_DEP) + cnst1_dT * (T3 - T4) + here->HSMHV2_cnst1 * ( - beta * T3 * (phi_sL_DEP_dT - Vbscl_dT) - beta_dT * (phi_sL_DEP - Vbscl) * T3 + beta * T4 * (phi_bL_DEP_dT - Vbscl_dT) + beta_dT * (phi_bL_DEP - Vbscl) * T4)) - here->HSMHV2_cnst0 / 2.0 / sqrt( - T1) * ( - beta * (phi_sL_DEP_dT - phi_bL_DEP_dT) - beta_dT * (phi_sL_DEP - phi_bL_DEP)) ; Q_sL_dep_dVgs = here->HSMHV2_cnst0 / 2.0 / T6 * beta * (phi_sL_DEP_dVgs - phi_bL_DEP_dVgs) * (T2 - 1) ; Q_sL_dep_dVds = here->HSMHV2_cnst0 / 2.0 / T6 * beta * (phi_sL_DEP_dVds - phi_bL_DEP_dVds) * (T2 - 1) ; Q_sL_dep_dVbs = here->HSMHV2_cnst0 / 2.0 / T6 * beta * (phi_sL_DEP_dVbs - phi_bL_DEP_dVbs) * (T2 - 1) ; Q_sL_dep_dT = cnst0_dT * T6 + here->HSMHV2_cnst0 / 2.0 / T6 * (beta * (phi_sL_DEP_dT - phi_bL_DEP_dT) * (T2 - 1) + beta_dT * (phi_sL_DEP - phi_bL_DEP) * (T2 - 1)) ; } Q_nL = 0.0 ; Q_nL_dVgs = 0.0 ; Q_nL_dVds = 0.0 ; Q_nL_dVbs = 0.0 ; Q_nL_dT = 0.0 ; /// Qg = Cox * (Vgp - phi_sL_DEP) ; T1 = phi_bL_DEP - phi_jL_DEP ; Fn_SL_CP( T2 , T1 , 0.0 , 0.1, 2 , T0 ) W_bL = sqrt(C_2ESIpq_Ndepm * (T2) ) ; Fn_SU_CP( T9 , W_bL , model->HSMHV2_tndep, 1e-8, 2 , T3 ) W_subL = sqrt(C_2ESIpq_Nsub * (phi_jL_DEP - Vbscl + Vbi_DEP) ) ; Q_bL_dep = T9 * q_Ndepm ; Q_subL_dep = - W_subL * q_Nsub ; Q_bL_dep_dVgs = C_ESI / W_bL * (phi_bL_DEP_dVgs - phi_jL_DEP_dVgs) * T0 * T3 ; Q_bL_dep_dVds = C_ESI / W_bL * (phi_bL_DEP_dVds - phi_jL_DEP_dVds) * T0 * T3 ; Q_bL_dep_dVbs = C_ESI / W_bL * (phi_bL_DEP_dVbs - phi_jL_DEP_dVbs) * T0 * T3 ; Q_bL_dep_dT = C_ESI / W_bL * (phi_bL_DEP_dT - phi_jL_DEP_dT) * T0 * T3 ; Q_subL_dep_dVgs = - C_ESI / W_subL * phi_jL_DEP_dVgs ; Q_subL_dep_dVds = - C_ESI / W_subL * phi_jL_DEP_dVds ; Q_subL_dep_dVbs = - C_ESI / W_subL * (phi_jL_DEP_dVbs - Vbscl_dVbs) ; Q_subL_dep_dT = - C_ESI / W_subL * (phi_jL_DEP_dT - Vbscl_dT + Vbipn_dT) ; } T1 = phi_sL_DEP - phi_bL_DEP_lim ; Fn_SL_CP( T2 , T1 , 0.0, Ps_delta, 2 , T0 ) T2_dVgs = (phi_sL_DEP_dVgs - Vdseff_dVgs) * T0 ; T2_dVds = (phi_sL_DEP_dVds - Vdseff_dVds) * T0 ; T2_dVbs = (phi_sL_DEP_dVbs - Vdseff_dVbs) * T0 ; T2_dT = (phi_sL_DEP_dT - Vdseff_dT) * T0 ; T3 = exp(beta * (T2)) ; T3_dVgs = beta * T3 * T2_dVgs ; T3_dVds = beta * T3 * T2_dVds ; T3_dVbs = beta * T3 * T2_dVbs ; T3_dT = beta * T3 * T2_dT + T2 * T3 * beta_dT ; T4 = T3 - 1.0 - beta * T2 ; T4_dVgs = T3_dVgs - beta * T2_dVgs ; T4_dVds = T3_dVds - beta * T2_dVds ; T4_dVbs = T3_dVbs - beta * T2_dVbs ; T4_dT = T3_dT - beta * T2_dT - beta_dT * T2 ; T5 = sqrt(T4) ; Q_nL_cur = - here->HSMHV2_cnst0 * T5 ; Q_nL_cur_dVgs = - here->HSMHV2_cnst0 / 2.0 / T5 * T4_dVgs ; Q_nL_cur_dVds = - here->HSMHV2_cnst0 / 2.0 / T5 * T4_dVds ; Q_nL_cur_dVbs = - here->HSMHV2_cnst0 / 2.0 / T5 * T4_dVbs ; Q_nL_cur_dT = - here->HSMHV2_cnst0 / 2.0 / T5 * T4_dT - cnst0_dT * T5 ; } /*---------------------------------------------------* * Assign Pds. *-----------------*/ Ps0 = phi_s0_DEP ; Psl = phi_sL_DEP ; Pds = phi_sL_DEP - phi_s0_DEP + epsm10 ; Pds_dVgs = phi_sL_DEP_dVgs - phi_s0_DEP_dVgs ; Pds_dVds = phi_sL_DEP_dVds - phi_s0_DEP_dVds ; Pds_dVbs = phi_sL_DEP_dVbs - phi_s0_DEP_dVbs ; Pds_dT = phi_sL_DEP_dT - phi_s0_DEP_dT ; if( Pds < 0.0 ) { // take care of numerical noise // Pds = 0.0 ; Pds_dVgs = 0.0 ; Pds_dVds = 0.0 ; Pds_dVbs = 0.0 ; Pds_dT = 0.0 ; phi_sL_DEP = phi_s0_DEP ; phi_sL_DEP_dVgs = phi_s0_DEP_dVgs ; phi_sL_DEP_dVds = phi_s0_DEP_dVds ; phi_sL_DEP_dVbs = phi_s0_DEP_dVbs ; phi_sL_DEP_dT = phi_s0_DEP_dT ; Idd = 0.0 ; Idd_dVgs = 0.0 ; Idd_dVds = 0.0 ; Idd_dVbs = 0.0 ; Idd_dT = 0.0 ; } else { T1 = - (Q_s0 + Q_sL) ; T1_dVgs = - (Q_s0_dVgs + Q_sL_dVgs) ; T1_dVds = - (Q_s0_dVds + Q_sL_dVds) ; T1_dVbs = - (Q_s0_dVbs + Q_sL_dVbs) ; T1_dT = - (Q_s0_dT + Q_sL_dT) ; Fn_SL_CP3( Qn_drift , T1 , 0.0, Qn_delta , 2 , T3, T4, T5 ) Qn_drift_dVgs = T1_dVgs * T3 ; Qn_drift_dVds = T1_dVds * T3 ; Qn_drift_dVbs = T1_dVbs * T3 ; Qn_drift_dT = T1_dT * T3 + Qn_delta_dT * T5 ; Idd_drift = beta * Qn_drift / 2.0 * Pds ; Idd_diffu = - ( - Q_nL_cur + Q_n0_cur); Idd = Idd_drift + Idd_diffu ; Idd_dVgs = beta * Qn_drift_dVgs / 2.0 * Pds + beta * Qn_drift / 2.0 * Pds_dVgs - ( - Q_nL_cur_dVgs + Q_n0_cur_dVgs ) ; Idd_dVds = beta * Qn_drift_dVds / 2.0 * Pds + beta * Qn_drift / 2.0 * Pds_dVds - ( - Q_nL_cur_dVds + Q_n0_cur_dVds ) ; Idd_dVbs = beta * Qn_drift_dVbs / 2.0 * Pds + beta * Qn_drift / 2.0 * Pds_dVbs - ( - Q_nL_cur_dVbs + Q_n0_cur_dVbs ) ; Idd_dT = (beta_dT * Qn_drift + beta * Qn_drift_dT) / 2.0 * Pds + beta * Qn_drift / 2.0 * Pds_dT - ( - Q_nL_cur_dT + Q_n0_cur_dT ) ; } Qiu = - Q_n0_cur ; Qiu_dVgs = - Q_n0_cur_dVgs ; Qiu_dVds = - Q_n0_cur_dVds ; Qiu_dVbs = - Q_n0_cur_dVbs ; Qiu_dT = - Q_n0_cur_dT ; Lch = Leff ; /*-----------------------------------------------------------* * Muun : universal mobility. (CGS unit) *-----------------*/ T2 = here->HSMHV2_ninv_o_esi ; T0 = here->HSMHV2_ninvd ; T4 = 1.0 + ( phi_sL_DEP - phi_s0_DEP ) * T0 ; T4_dVb = ( phi_sL_DEP_dVbs - phi_s0_DEP_dVbs ) * T0 ; T4_dVd = ( phi_sL_DEP_dVds - phi_s0_DEP_dVds ) * T0 ; T4_dVg = ( phi_sL_DEP_dVgs - phi_s0_DEP_dVgs ) * T0 ; T4_dT = ( phi_sL_DEP_dT - phi_s0_DEP_dT ) * T0 + ( phi_sL_DEP - phi_s0_DEP ) * ninvd_dT ; T5 = T2 * Qiu ; T5_dVb = T2 * Qiu_dVbs ; T5_dVd = T2 * Qiu_dVds ; T5_dVg = T2 * Qiu_dVgs ; T5_dT = T2 * Qiu_dT ; T3 = T5 / T4 ; T3_dVb = ( - T4_dVb * T5 + T4 * T5_dVb ) / T4 / T4 ; T3_dVd = ( - T4_dVd * T5 + T4 * T5_dVd ) / T4 / T4 ; T3_dVg = ( - T4_dVg * T5 + T4 * T5_dVg ) / T4 / T4 ; T3_dT = ( - T4_dT * T5 + T4 * T5_dT ) / T4 / T4 ; Eeff = T3 ; Eeff_dVbs = T3_dVb ; Eeff_dVds = T3_dVd ; Eeff_dVgs = T3_dVg ; Eeff_dT = T3_dT ; T5 = Fn_Pow( Eeff , model->HSMHV2_mueph0 - 1.0e0 ) ; T8 = T5 * Eeff ; T7 = Fn_Pow( Eeff , here->HSMHV2_muesr - 1.0e0 ) ; T6 = T7 * Eeff ; T8_dT = model->HSMHV2_mueph0 * T5 * Eeff_dT ; T6_dT = here->HSMHV2_muesr * T7 * Eeff_dT ; T9 = C_QE * C_m2cm_p2 ; Rns = Qiu / T9 ; Rns_dT = Qiu_dT / T9 ; T1 = 1.0e0 / ( pParam->HSMHV2_muecb0 + pParam->HSMHV2_muecb1 * Rns / 1.0e11 ) + here->HSMHV2_mphn0 * T8 + T6 / pParam->HSMHV2_muesr1 ; T1_dT = - 1.0e0 / ( pParam->HSMHV2_muecb0 + pParam->HSMHV2_muecb1 * Rns / 1.0e11 ) / ( pParam->HSMHV2_muecb0 + pParam->HSMHV2_muecb1 * Rns / 1.0e11 ) * pParam->HSMHV2_muecb1 * Rns_dT / 1.0e11 + here->HSMHV2_mphn0 * T8_dT + mphn0_dT * T8 + T6_dT / pParam->HSMHV2_muesr1 ; Muun = 1.0e0 / T1 ; Muun_dT = - Muun / T1 * T1_dT ; T1 = 1.0e0 / ( T1 * T1 ) ; T2 = pParam->HSMHV2_muecb0 + pParam->HSMHV2_muecb1 * Rns / 1.0e11 ; T2 = 1.0e0 / ( T2 * T2 ) ; T3 = here->HSMHV2_mphn1 * T5 ; T4 = here->HSMHV2_muesr * T7 / pParam->HSMHV2_muesr1 ; T5 = - 1.0e-11 * pParam->HSMHV2_muecb1 / C_QE * T2 / C_m2cm_p2 ; Muun_dVbs = - ( T5 * Qiu_dVbs + Eeff_dVbs * T3 + Eeff_dVbs * T4 ) * T1 ; Muun_dVds = - ( T5 * Qiu_dVds + Eeff_dVds * T3 + Eeff_dVds * T4 ) * T1 ; Muun_dVgs = - ( T5 * Qiu_dVgs + Eeff_dVgs * T3 + Eeff_dVgs * T4 ) * T1 ; /* Change to MKS unit */ Muun /=C_m2cm_p2 ; Muun_dT /=C_m2cm_p2 ; Muun_dVbs /=C_m2cm_p2 ; Muun_dVds /=C_m2cm_p2 ; Muun_dVgs /=C_m2cm_p2 ; /*-----------------------------------------------------------* * Mu : mobility *-----------------*/ T2 = beta * (Qiu + small) * Lch ; T1 = 1.0e0 / T2 ; T3 = T1 * T1 ; T4 = - beta * T3 ; T5 = T4 * Lch ; T6 = T4 * (Qiu + small) ; T1_dVb = ( T5 * Qiu_dVbs ) ; T1_dVd = ( T5 * Qiu_dVds ) ; T1_dVg = ( T5 * Qiu_dVgs ) ; T2_dT = beta_dT * (Qiu + small) * Lch + beta * Qiu_dT * Lch ; T1_dT = - T1 / T2 * T2_dT ; TY = Idd * T1 ; TY_dVbs = Idd_dVbs * T1 + Idd * T1_dVb ; TY_dVds = Idd_dVds * T1 + Idd * T1_dVd ; TY_dVgs = Idd_dVgs * T1 + Idd * T1_dVg ; TY_dT = Idd_dT * T1 + Idd * T1_dT ; T2 = 0.2 * Vmax / Muun ; T3 = - T2 / Muun ; T2_dVb = T3 * Muun_dVbs ; T2_dVd = T3 * Muun_dVds ; T2_dVg = T3 * Muun_dVgs ; T2_dT = 0.2 * ( Vmax_dT * Muun - Muun_dT * Vmax ) / ( Muun * Muun ) ; Ey = sqrt( TY * TY + T2 * T2 ) ; T4 = 1.0 / Ey ; Ey_dVbs = T4 * ( TY * TY_dVbs + T2 * T2_dVb ) ; Ey_dVds = T4 * ( TY * TY_dVds + T2 * T2_dVd ) ; Ey_dVgs = T4 * ( TY * TY_dVgs + T2 * T2_dVg ) ; Ey_dT = T4 * ( TY * TY_dT + T2 * T2_dT ) ; Em = Muun * Ey ; Em_dVbs = Muun_dVbs * Ey + Muun * Ey_dVbs ; Em_dVds = Muun_dVds * Ey + Muun * Ey_dVds ; Em_dVgs = Muun_dVgs * Ey + Muun * Ey_dVgs ; Em_dT = Ey * Muun_dT + Ey_dT * Muun ; T1 = Em / Vmax ; T1_dT = ( Em_dT * Vmax - Vmax_dT * Em ) / ( Vmax * Vmax ); Ey_suf = Ey ; Ey_suf_dVgs = Ey_dVgs ; Ey_suf_dVds = Ey_dVds ; Ey_suf_dVbs = Ey_dVbs ; Ey_suf_dT = Ey_dT ; /* note: model->HSMHV2_bb = 2 (electron) ;1 (hole) */ if ( 1.0e0 - epsm10 <= model->HSMHV2_bb && model->HSMHV2_bb <= 1.0e0 + epsm10 ) { T3 = 1.0e0 ; T3_dT = 0.0e0 ; } else if ( 2.0e0 - epsm10 <= model->HSMHV2_bb && model->HSMHV2_bb <= 2.0e0 + epsm10 ) { T3 = T1 ; T3_dT = T1_dT ; } else { T3 = Fn_Pow( T1 , model->HSMHV2_bb - 1.0e0 ) ; T3_dT = ( model->HSMHV2_bb - 1.0e0 ) * Fn_Pow( T1 , model->HSMHV2_bb - 2.0e0 ) * T1_dT ; } T2 = T1 * T3 ; T4 = 1.0e0 + T2 ; T2_dT = T1 * T3_dT + T3 * T1_dT ; T4_dT = T2_dT ; if ( 1.0e0 - epsm10 <= model->HSMHV2_bb && model->HSMHV2_bb <= 1.0e0 + epsm10 ) { T5 = 1.0 / T4 ; T6 = T5 / T4 ; T5_dT = - T5 * T5 * T4_dT ; T6_dT = T5 * T5 * ( T5_dT * T4 - T5 * T4_dT ) ; } else if ( 2.0e0 - epsm10 <= model->HSMHV2_bb && model->HSMHV2_bb <= 2.0e0 + epsm10 ) { T5 = 1.0 / sqrt( T4 ) ; T6 = T5 / T4 ; T5_dT = - 0.5e0 / ( T4 * sqrt(T4)) * T4_dT ; T6_dT = ( T5_dT * T4 - T5 * T4_dT ) / T4 / T4 ; } else { T6 = Fn_Pow( T4 , ( - 1.0e0 / model->HSMHV2_bb - 1.0e0 ) ) ; T5 = T4 * T6 ; T6_dT =( - 1.0e0 / model->HSMHV2_bb - 1.0e0 ) * Fn_Pow( T4 , ( - 1.0e0 / model->HSMHV2_bb - 2.0e0 ) ) * T4_dT ; T5_dT = T4_dT * T6 + T4 * T6_dT ; } T7 = Muun / Vmax * T6 * T3 ; Mu = Muun * T5 ; Mu_dVbs = Muun_dVbs * T5 - T7 * Em_dVbs ; Mu_dVds = Muun_dVds * T5 - T7 * Em_dVds ; Mu_dVgs = Muun_dVgs * T5 - T7 * Em_dVgs ; Mu_dT = Muun_dT * T5 + Muun * T5_dT ; //-----------------------------------------------------------* //* resistor region current. (CGS unit) //*-----------------// if( Vdsorg > 1e-3 ) { T2 = here->HSMHV2_qnsub_esi / ( Cox * Cox ) ; T4 = - 2.0e0 * T2 / Cox ; T2_dVb = T4 * Cox_dVb ; T2_dVd = T4 * Cox_dVd ; T2_dVg = T4 * Cox_dVg ; T2_dT = T4 * Cox_dT ; T0 = Vgp + model->HSMHV2_depvdsef1 - beta_inv - Vbsz ; T0_dVg = Vgp_dVgs ; T0_dVd = Vgp_dVds - Vbsz_dVds ; T0_dVb = Vgp_dVbs - Vbsz_dVbs ; T0_dT = Vgp_dT - beta_inv_dT - Vbsz_dT ; T4 = 1.0e0 + 2.0e0 / T2 * T0 ; T4_dVg = 2.0 / T2 * T0_dVg - 2.0 / T2 / T2 * T0 * T2_dVg ; T4_dVd = 2.0 / T2 * T0_dVd - 2.0 / T2 / T2 * T0 * T2_dVd ; T4_dVb = 2.0 / T2 * T0_dVb - 2.0 / T2 / T2 * T0 * T2_dVb ; T4_dT = 2.0 / T2 * T0_dT - 2.0 / T2 / T2 * T0 * T2_dT ; Fn_SL_CP( T9 , T4 , 0 , DEPQFN_dlt, 2 , T0 ) T9_dVg = T4_dVg * T0 ; T9_dVd = T4_dVd * T0 ; T9_dVb = T4_dVb * T0 ; T9_dT = T4_dT * T0 ; T9 +=small ; T3 = sqrt( T9 ) ; T3_dVg = 0.5 / T3 * T9_dVg ; T3_dVd = 0.5 / T3 * T9_dVd ; T3_dVb = 0.5 / T3 * T9_dVb ; T3_dT = 0.5 / T3 * T9_dT ; T10 = Vgp + model->HSMHV2_depvdsef1 + T2 * ( 1.0e0 - T3 ) ; T10 = T10 * model->HSMHV2_depvdsef2 ; T10_dVb = (Vgp_dVbs + T2_dVb * ( 1.0e0 - T3 ) - T2 * T3_dVb) * model->HSMHV2_depvdsef2 ; T10_dVd = (Vgp_dVds + T2_dVd * ( 1.0e0 - T3 ) - T2 * T3_dVd) * model->HSMHV2_depvdsef2 ; T10_dVg = (Vgp_dVgs + T2_dVg * ( 1.0e0 - T3 ) - T2 * T3_dVg) * model->HSMHV2_depvdsef2 ; T10_dT = (Vgp_dT + T2_dT * ( 1.0e0 - T3 ) - T2 * T3_dT) * model->HSMHV2_depvdsef2 ; Fn_SL_CP( T10 , T10 , model->HSMHV2_depleak, 4.0, 4 , T0 ) T10 = T10 + epsm10 ; T10_dVb *=T0 ; T10_dVd *=T0 ; T10_dVg *=T0 ; T10_dT *= T0 ; T1 = Vdsorg / T10 ; T2 = Fn_Pow( T1 , here->HSMHV2_ddlt - 1.0e0 ) ; T7 = T2 * T1 ; T0 = here->HSMHV2_ddlt * T2 / ( T10 * T10 ) ; T7_dVb = T0 * ( - Vdsorg * T10_dVb ) ; T7_dVd = T0 * ( T10 - Vdsorg * T10_dVd ) ; T7_dVg = T0 * ( - Vdsorg * T10_dVg ) ; T7_dT = T0 * ( - Vdsorg * T10_dT ) ; T3 = 1.0 + T7 ; T4 = Fn_Pow( T3 , 1.0 / here->HSMHV2_ddlt - 1.0 ) ; T6 = T4 * T3 ; T0 = T4 / here->HSMHV2_ddlt ; T6_dVb = T0 * T7_dVb ; T6_dVd = T0 * T7_dVd ; T6_dVg = T0 * T7_dVg ; T6_dT = T0 * T7_dT ; Vdseff0 = Vdsorg / T6 ; T0 = 1.0 / ( T6 * T6 ) ; Vdseff0_dVbs = - Vdsorg * T6_dVb * T0 ; Vdseff0_dVds = ( T6 - Vdsorg * T6_dVd ) * T0 ; Vdseff0_dVgs = - Vdsorg * T6_dVg * T0 ; Vdseff0_dT = - Vdsorg * T6_dT * T0 ; } else { Vdseff0 = Vdsorg ; Vdseff0_dVgs = 0.0 ; Vdseff0_dVds = 1.0 ; Vdseff0_dVbs = 0.0 ; Vdseff0_dT = 0.0 ; } T0 = here->HSMHV2_ninvd ; T4 = 1.0 + ( phi_sL_DEP - phi_s0_DEP ) * T0 ; T4_dVb = ( phi_sL_DEP_dVbs - phi_s0_DEP_dVbs ) * T0 ; T4_dVd = ( phi_sL_DEP_dVds - phi_s0_DEP_dVds ) * T0 ; T4_dVg = ( phi_sL_DEP_dVgs - phi_s0_DEP_dVgs ) * T0 ; T4_dT = ( phi_sL_DEP_dT - phi_s0_DEP_dT ) * T0 + ( phi_sL_DEP - phi_s0_DEP ) * ninvd_dT ; Qiu = - Qn_res0 ; Qiu_dVgs = - Qn_res0_dVgs ; Qiu_dVds = - Qn_res0_dVds ; Qiu_dVbs = - Qn_res0_dVbs ; Qiu_dT = - Qn_res0_dT ; T5 = Qiu ; T5_dVb = Qiu_dVbs ; T5_dVd = Qiu_dVds ; T5_dVg = Qiu_dVgs ; T5_dT = Qiu_dT ; T3 = T5 / T4 ; T3_dVb = ( - T4_dVb * T5 + T4 * T5_dVb ) / T4 / T4 ; T3_dVd = ( - T4_dVd * T5 + T4 * T5_dVd ) / T4 / T4 ; T3_dVg = ( - T4_dVg * T5 + T4 * T5_dVg ) / T4 / T4 ; T3_dT = ( - T4_dT * T5 + T4 * T5_dT ) / T4 / T4 ; Eeff = T3 ; Eeff_dVbs = T3_dVb ; Eeff_dVds = T3_dVd ; Eeff_dVgs = T3_dVg ; Eeff_dT = T3_dT ; T5 = Fn_Pow( Eeff , model->HSMHV2_depmueph0 - 1.0e0 ) ; T8 = T5 * Eeff ; T8_dT = model->HSMHV2_mueph0 * T5 * Eeff_dT ; T9 = C_QE * C_m2cm_p2 ; Rns = Qiu / T9 ; Rns_dT = Qiu_dT / T9 ; T1 = 1.0e0 / ( model->HSMHV2_depmue0 + model->HSMHV2_depmue1 * Rns / 1.0e11 ) + here->HSMHV2_depmphn0 * T8 ; T1_dT = - 1.0e0 / ( model->HSMHV2_depmue0 + model->HSMHV2_depmue1 * Rns / 1.0e11 ) / ( model->HSMHV2_depmue0 + model->HSMHV2_depmue1 * Rns / 1.0e11 ) * model->HSMHV2_depmue1 * Rns_dT / 1.0e11 + here->HSMHV2_depmphn0 * T8_dT + depmphn0_dT * T8 ; Muun = 1.0e0 / T1 ; Muun_dT = - Muun / T1 * T1_dT ; T1 = 1.0e0 / ( T1 * T1 ) ; T2 = model->HSMHV2_depmue0 + model->HSMHV2_depmue1 * Rns / 1.0e11 ; T2 = 1.0e0 / ( T2 * T2 ) ; T3 = here->HSMHV2_depmphn1 * T5 ; T5 = - 1.0e-11 * model->HSMHV2_depmue1 / C_QE * T2 / C_m2cm_p2 ; Muun_dVbs = - ( T5 * Qiu_dVbs + Eeff_dVbs * T3 ) * T1 ; Muun_dVds = - ( T5 * Qiu_dVds + Eeff_dVds * T3 ) * T1 ; Muun_dVgs = - ( T5 * Qiu_dVgs + Eeff_dVgs * T3 ) * T1 ; /* Change to MKS unit */ Muun /=C_m2cm_p2 ; Muun_dT /=C_m2cm_p2 ; Muun_dVbs /=C_m2cm_p2 ; Muun_dVds /=C_m2cm_p2 ; Muun_dVgs /=C_m2cm_p2 ; Edri = Vdseff0 / Lch ; Edri_dVgs = Vdseff0_dVgs / Lch ; Edri_dVds = Vdseff0_dVds / Lch ; Edri_dVbs = Vdseff0_dVbs / Lch ; Edri_dT = Vdseff0_dT / Lch ; T1 = Muun * Edri / here->HSMHV2_depvmax ; T1_dVgs = (Muun_dVgs * Edri + Muun * Edri_dVgs) / here->HSMHV2_depvmax ; T1_dVds = (Muun_dVds * Edri + Muun * Edri_dVds) / here->HSMHV2_depvmax ; T1_dVbs = (Muun_dVbs * Edri + Muun * Edri_dVbs) / here->HSMHV2_depvmax ; T1_dT = (Muun_dT * Edri + Muun * Edri_dT) / here->HSMHV2_depvmax - Muun * Edri / here->HSMHV2_depvmax / here->HSMHV2_depvmax * depVmax_dT ; T1 = T1 + small ; T2 = Fn_Pow(T1,model->HSMHV2_depbb) ; T2_dVgs = model->HSMHV2_depbb * T1_dVgs / T1 * T2 ; T2_dVds = model->HSMHV2_depbb * T1_dVds / T1 * T2 ; T2_dVbs = model->HSMHV2_depbb * T1_dVbs / T1 * T2 ; T2_dT = model->HSMHV2_depbb * T1_dT / T1 * T2 ; T3 = 1.0 + T2 ; T4 = Fn_Pow(T3,1.0 / model->HSMHV2_depbb) ; T4_dVgs = 1.0 / model->HSMHV2_depbb * T2_dVgs / T3 * T4 ; T4_dVds = 1.0 / model->HSMHV2_depbb * T2_dVds / T3 * T4 ; T4_dVbs = 1.0 / model->HSMHV2_depbb * T2_dVbs / T3 * T4 ; T4_dT = 1.0 / model->HSMHV2_depbb * T2_dT / T3 * T4 ; Mu_res = Muun / T4 ; Mu_res_dVgs = Muun_dVgs / T4 - Muun / T4 / T4 * T4_dVgs ; Mu_res_dVds = Muun_dVds / T4 - Muun / T4 / T4 * T4_dVds ; Mu_res_dVbs = Muun_dVbs / T4 - Muun / T4 / T4 * T4_dVbs ; Mu_res_dT = Muun_dT / T4 - Muun / T4 / T4 * T4_dT ; Ids_res = here->HSMHV2_weff_nf * ( - Qn_res0) * Mu_res * Edri ; Ids_res_dVgs = here->HSMHV2_weff_nf * ( - Qn_res0_dVgs * Mu_res * Edri - Qn_res0 * Mu_res_dVgs * Edri - Qn_res0 * Mu_res * Edri_dVgs) ; Ids_res_dVds = here->HSMHV2_weff_nf * ( - Qn_res0_dVds * Mu_res * Edri - Qn_res0 * Mu_res_dVds * Edri - Qn_res0 * Mu_res * Edri_dVds) ; Ids_res_dVbs = here->HSMHV2_weff_nf * ( - Qn_res0_dVbs * Mu_res * Edri - Qn_res0 * Mu_res_dVbs * Edri - Qn_res0 * Mu_res * Edri_dVbs) ; Ids_res_dT = here->HSMHV2_weff_nf * ( - Qn_res0_dT * Mu_res * Edri - Qn_res0 * Mu_res_dT * Edri - Qn_res0 * Mu_res * Edri_dT ) ; //-----------------------------------------------------------* //* back region universal mobility. (CGS unit) //*-----------------// T0 = here->HSMHV2_ninvd ; T4 = 1.0 + ( phi_sL_DEP - phi_s0_DEP ) * T0 ; T4_dVb = ( phi_sL_DEP_dVbs - phi_s0_DEP_dVbs ) * T0 ; T4_dVd = ( phi_sL_DEP_dVds - phi_s0_DEP_dVds ) * T0 ; T4_dVg = ( phi_sL_DEP_dVgs - phi_s0_DEP_dVgs ) * T0 ; T4_dT = ( phi_sL_DEP_dT - phi_s0_DEP_dT ) * T0 + ( phi_sL_DEP - phi_s0_DEP ) * ninvd_dT ; Qiu = - Qn_bac0 ; Qiu_dVgs = - Qn_bac0_dVgs ; Qiu_dVds = - Qn_bac0_dVds ; Qiu_dVbs = - Qn_bac0_dVbs ; Qiu_dT = - Qn_bac0_dT ; T5 = Qiu ; T5_dVb = Qiu_dVbs ; T5_dVd = Qiu_dVds ; T5_dVg = Qiu_dVgs ; T5_dT = Qiu_dT ; T3 = T5 / T4 ; T3_dVb = ( - T4_dVb * T5 + T4 * T5_dVb ) / T4 / T4 ; T3_dVd = ( - T4_dVd * T5 + T4 * T5_dVd ) / T4 / T4 ; T3_dVg = ( - T4_dVg * T5 + T4 * T5_dVg ) / T4 / T4 ; T3_dT = ( - T4_dT * T5 + T4 * T5_dT ) / T4 / T4 ; Eeff = T3 ; Eeff_dVbs = T3_dVb ; Eeff_dVds = T3_dVd ; Eeff_dVgs = T3_dVg ; Eeff_dT = T3_dT ; T5 = Fn_Pow( Eeff , model->HSMHV2_depmueph0 - 1.0e0 ) ; T8 = T5 * Eeff ; T8_dT = model->HSMHV2_mueph0 * T5 * Eeff_dT ; T9 = C_QE * C_m2cm_p2 ; Rns = Qiu / T9 ; Rns_dT = Qiu_dT / T9 ; T1 = 1.0e0 / ( model->HSMHV2_depmueback0 + model->HSMHV2_depmueback1 * Rns / 1.0e11 ) + here->HSMHV2_depmphn0 * T8 ; T1_dT = - 1.0e0 / ( model->HSMHV2_depmueback0 + model->HSMHV2_depmueback1 * Rns / 1.0e11 ) / ( model->HSMHV2_depmueback0 + model->HSMHV2_depmueback1 * Rns / 1.0e11 ) * model->HSMHV2_depmueback1 * Rns_dT / 1.0e11 + here->HSMHV2_depmphn0 * T8_dT + depmphn0_dT * T8 ; Muun = 1.0e0 / T1 ; Muun_dT = - Muun / T1 * T1_dT ; T1 = 1.0e0 / ( T1 * T1 ) ; T2 = model->HSMHV2_depmueback0 + model->HSMHV2_depmueback1 * Rns / 1.0e11 ; T2 = 1.0e0 / ( T2 * T2 ) ; T3 = here->HSMHV2_depmphn1 * T5 ; T5 = - 1.0e-11 * model->HSMHV2_depmueback1 / C_QE * T2 / C_m2cm_p2 ; Muun_dVbs = - ( T5 * Qiu_dVbs + Eeff_dVbs * T3 ) * T1 ; Muun_dVds = - ( T5 * Qiu_dVds + Eeff_dVds * T3 ) * T1 ; Muun_dVgs = - ( T5 * Qiu_dVgs + Eeff_dVgs * T3 ) * T1 ; /* Change to MKS unit */ Muun /=C_m2cm_p2 ; Muun_dT /=C_m2cm_p2 ; Muun_dVbs /=C_m2cm_p2 ; Muun_dVds /=C_m2cm_p2 ; Muun_dVgs /=C_m2cm_p2 ; Edri = Vdseff0 / Lch ; Edri_dVgs = Vdseff0_dVgs / Lch ; Edri_dVds = Vdseff0_dVds / Lch ; Edri_dVbs = Vdseff0_dVbs / Lch ; Edri_dT = Vdseff0_dT / Lch ; T1 = Muun * Edri / here->HSMHV2_depvmax ; T1_dVgs = (Muun_dVgs * Edri + Muun * Edri_dVgs) / here->HSMHV2_depvmax ; T1_dVds = (Muun_dVds * Edri + Muun * Edri_dVds) / here->HSMHV2_depvmax ; T1_dVbs = (Muun_dVbs * Edri + Muun * Edri_dVbs) / here->HSMHV2_depvmax ; T1_dT = (Muun_dT * Edri + Muun * Edri_dT) / here->HSMHV2_depvmax - Muun * Edri / here->HSMHV2_depvmax / here->HSMHV2_depvmax * depVmax_dT ; T1 = T1 + small ; T2 = Fn_Pow(T1,model->HSMHV2_depbb) ; T2_dVgs = model->HSMHV2_depbb * T1_dVgs / T1 * T2 ; T2_dVds = model->HSMHV2_depbb * T1_dVds / T1 * T2 ; T2_dVbs = model->HSMHV2_depbb * T1_dVbs / T1 * T2 ; T2_dT = model->HSMHV2_depbb * T1_dT / T1 * T2 ; T3 = 1.0 + T2 ; T4 = Fn_Pow(T3,1.0 / model->HSMHV2_depbb) ; T4_dVgs = 1.0 / model->HSMHV2_depbb * T2_dVgs / T3 * T4 ; T4_dVds = 1.0 / model->HSMHV2_depbb * T2_dVds / T3 * T4 ; T4_dVbs = 1.0 / model->HSMHV2_depbb * T2_dVbs / T3 * T4 ; T4_dT = 1.0 / model->HSMHV2_depbb * T2_dT / T3 * T4 ; Mu_bac = Muun / T4 ; Mu_bac_dVgs = Muun_dVgs / T4 - Muun / T4 / T4 * T4_dVgs ; Mu_bac_dVds = Muun_dVds / T4 - Muun / T4 / T4 * T4_dVds ; Mu_bac_dVbs = Muun_dVbs / T4 - Muun / T4 / T4 * T4_dVbs ; Mu_bac_dT = Muun_dT / T4 - Muun / T4 / T4 * T4_dT ; Ids_bac = here->HSMHV2_weff_nf * ( - Qn_bac0) * Mu_bac * Edri ; Ids_bac_dVgs = here->HSMHV2_weff_nf * ( - Qn_bac0_dVgs * Mu_bac * Edri - Qn_bac0 * Mu_bac_dVgs * Edri - Qn_bac0 * Mu_bac * Edri_dVgs) ; Ids_bac_dVds = here->HSMHV2_weff_nf * ( - Qn_bac0_dVds * Mu_bac * Edri - Qn_bac0 * Mu_bac_dVds * Edri - Qn_bac0 * Mu_bac * Edri_dVds) ; Ids_bac_dVbs = here->HSMHV2_weff_nf * ( - Qn_bac0_dVbs * Mu_bac * Edri - Qn_bac0 * Mu_bac_dVbs * Edri - Qn_bac0 * Mu_bac * Edri_dVbs) ; Ids_bac_dT = here->HSMHV2_weff_nf * ( - Qn_bac0_dT * Mu_bac * Edri - Qn_bac0 * Mu_bac_dT * Edri - Qn_bac0 * Mu_bac * Edri_dT ) ; /*-----------------------------------------------------------* * Ids: channel current. *-----------------*/ betaWL = here->HSMHV2_weff_nf * beta_inv / Lch ; T1 = - betaWL / Lch ; betaWL_dT = here->HSMHV2_weff_nf * beta_inv_dT / Lch ; Ids0 = betaWL * Idd * Mu + Ids_res + Ids_bac ; Ids0_dVgs = betaWL * ( Idd_dVgs * Mu + Idd * Mu_dVgs ) + Ids_res_dVgs + Ids_bac_dVgs ; Ids0_dVds = betaWL * ( Idd_dVds * Mu + Idd * Mu_dVds ) + Ids_res_dVds + Ids_bac_dVds ; Ids0_dVbs = betaWL * ( Idd_dVbs * Mu + Idd * Mu_dVbs ) + Ids_res_dVbs + Ids_bac_dVbs ; Ids0_dT = betaWL_dT * Idd * Mu + betaWL * ( Idd_dT * Mu + Idd * Mu_dT ) + Ids_res_dT + Ids_bac_dT ; // Vdseff // Vds = Vdsorg; /*-----------------------------------------------------------* * Adding parasitic components to the channel current. *-----------------*/ if( model->HSMHV2_ptl != 0 ){ T1 = 0.5 * ( Vds - Pds ) ; Fn_SymAdd( T6 , T1 , 0.01 , T2 ) ; T2 *=0.5 ; T6_dVb = T2 * ( - Pds_dVbs ) ; T6_dVd = T2 * ( 1.0 - Pds_dVds ) ; T6_dVg = T2 * ( - Pds_dVgs ) ; T6_dT = T2 * ( - Pds_dT ) ; T1 = 1.1 - ( phi_s0_DEP + T6 ); T1_dVb = - ( phi_s0_DEP_dVbs + T6_dVb ); T1_dVd = - ( phi_s0_DEP_dVds + T6_dVd ); T1_dVg = - ( phi_s0_DEP_dVgs + T6_dVg ); T1_dT = - ( phi_s0_DEP_dT + T6_dT ); Fn_SZ( T2 , T1 , 0.05 , T0 ) ; T2 +=small ; T2_dVb = T1_dVb * T0 ; T2_dVd = T1_dVd * T0 ; T2_dVg = T1_dVg * T0 ; T2_dT = T1_dT * T0 ; T0 = beta * here->HSMHV2_ptl0 ; T0_dT = beta_dT * here->HSMHV2_ptl0 ; T3 = Cox * T0 ; T3_dVb = Cox_dVb * T0 ; T3_dVd = Cox_dVd * T0 ; T3_dVg = Cox_dVg * T0 ; T3_dT = Cox_dT * T0 + Cox * T0_dT ; T0 = pow( T2 , model->HSMHV2_ptp ) ; T9 = T3 * T0 ; T9_dVb = T3 * model->HSMHV2_ptp * T0 / T2 * T2_dVb + T3_dVb * T0 ; T9_dVd = T3 * model->HSMHV2_ptp * T0 / T2 * T2_dVd + T3_dVd * T0 ; T9_dVg = T3 * model->HSMHV2_ptp * T0 / T2 * T2_dVg + T3_dVg * T0 ; T9_dT = T3 * model->HSMHV2_ptp * T0 / T2 * T2_dT + T3_dT * T0 ; T4 = 1.0 + Vdsz * model->HSMHV2_pt2 ; T4_dVb = Vdsz_dVbs * model->HSMHV2_pt2 ; T4_dVd = Vdsz_dVds * model->HSMHV2_pt2 ; T4_dVg = 0.0 ; T4_dT = Vdsz_dT * model->HSMHV2_pt2 ; T0 = here->HSMHV2_pt40 ; T5 = phi_s0_DEP + T6 - Vbsz ; T5_dVb = phi_s0_DEP_dVbs + T6_dVb - Vbsz_dVbs ; T5_dVd = phi_s0_DEP_dVds + T6_dVd - Vbsz_dVds ; T5_dVg = phi_s0_DEP_dVgs + T6_dVg ; T5_dT = phi_s0_DEP_dT + T6_dT - Vbsz_dT ; T4 +=Vdsz * T0 * T5 ; T4_dVb +=Vdsz * T0 * T5_dVb + Vdsz_dVbs * T0 * T5 ; T4_dVd +=Vdsz * T0 * T5_dVd + Vdsz_dVds * T0 * T5 ; T4_dVg +=Vdsz * T0 * T5_dVg ; T4_dT +=Vdsz * T0 * T5_dT + Vdsz_dT * T0 * T5 ; T6 = T9 * T4 ; T9_dVb = T9_dVb * T4 + T9 * T4_dVb ; T9_dVd = T9_dVd * T4 + T9 * T4_dVd ; T9_dVg = T9_dVg * T4 + T9 * T4_dVg ; T9_dT = T9_dT * T4 + T9 * T4_dT ; T9 = T6 ; } else { T9 = 0.0 ; T9_dVb = 0.0 ; T9_dVd = 0.0 ; T9_dVg = 0.0 ; T9_dT = 0.0 ; } if( model->HSMHV2_gdl != 0 ){ T1 = beta * here->HSMHV2_gdl0 ; T1_dT = beta_dT * here->HSMHV2_gdl0 ; T2 = Cox * T1 ; T2_dVb = Cox_dVb * T1 ; T2_dVd = Cox_dVd * T1 ; T2_dVg = Cox_dVg * T1 ; T2_dT = Cox_dT * T1 + Cox * T1_dT ; T8 = T2 * Vdsz ; T8_dVb = T2_dVb * Vdsz + T2 * Vdsz_dVbs ; T8_dVd = T2_dVd * Vdsz + T2 * Vdsz_dVds ; T8_dVg = T2_dVg * Vdsz ; T8_dT = T2_dT * Vdsz + T2 * Vdsz_dT ; } else { T8 = 0.0 ; T8_dVb = 0.0 ; T8_dVd = 0.0 ; T8_dVg = 0.0 ; T8_dT = 0.0 ; } if ( ( T9 + T8 ) > 0.0 ) { Idd1 = Pds * ( T9 + T8 ) ; Idd1_dVbs = Pds_dVbs * ( T9 + T8 ) + Pds * ( T9_dVb + T8_dVb ) ; Idd1_dVds = Pds_dVds * ( T9 + T8 ) + Pds * ( T9_dVd + T8_dVd ) ; Idd1_dVgs = Pds_dVgs * ( T9 + T8 ) + Pds * ( T9_dVg + T8_dVg ) ; Idd1_dT = Pds_dT * ( T9 + T8 ) + Pds * ( T9_dT + T8_dT ) ; Ids0 +=betaWL * Idd1 * Mu ; T1 = betaWL * Idd1 ; T2 = Idd1 * Mu ; T3 = Mu * betaWL ; Ids0_dVbs +=T3 * Idd1_dVbs + T1 * Mu_dVbs + T2 * betaWL_dVbs ; Ids0_dVds +=T3 * Idd1_dVds + T1 * Mu_dVds + T2 * betaWL_dVds ; Ids0_dVgs +=T3 * Idd1_dVgs + T1 * Mu_dVgs + T2 * betaWL_dVgs ; Ids0_dT +=T3 * Idd1_dT + T1 * Mu_dT + T2 * betaWL_dT ; } /* note: rpock procedure was removed. */ if( flg_rsrd == 2 || flg_rsrd == 3 ){ if( model->HSMHV2_rd20 > 0.0 ){ T4 = here->HSMHV2_rd23 ; T1 = pParam->HSMHV2_rd24 * ( Vgse-model->HSMHV2_rd25 ) ; T1_dVg = pParam->HSMHV2_rd24 ; Fn_SL( T2 , T1 , T4 , delta_rd , T0 ) ; T2_dVg = T1_dVg * T0 ; T3 = T4 * ( model->HSMHV2_rd20 + 1.0 ) ; Fn_SU( T7 , T2 , T3 , delta_rd , T0 ) ; T7_dVg = T2_dVg * T0 ; } else { T7 = here->HSMHV2_rd23; T7_dVg = 0.0e0 ; } /* after testing we can remove Vdse_eff_dVbs, Vdse_eff_dVds, Vdse_eff_dVgs and Vdse_eff_dVbse, Vdse_eff_dVgse */ if (Vdse >= 0.0) { Vdse_eff = Vdse ; /* Vdse_eff_dVbs = 0.0 ; */ /* Vdse_eff_dVds = 0.0 ; */ /* Vdse_eff_dVgs = 0.0 ; */ /* Vdse_eff_dVbse = 0.0 ; */ Vdse_eff_dVdse = 1.0 ; /* Vdse_eff_dVgse = 0.0 ; */ } else { Vdse_eff = 0.0 ; /* Vdse_eff_dVbs = 0.0 ; */ /* Vdse_eff_dVds = 0.0 ; */ /* Vdse_eff_dVgs = 0.0 ; */ /* Vdse_eff_dVbse = 0.0 ; */ Vdse_eff_dVdse = 0.0 ; /* Vdse_eff_dVgse = 0.0 ; */ } /* smoothing of Ra for Vdse_eff close to zero */ /* ... smoothing parameter is Ra_N */ if (Vdse_eff < Ra_N * small2) { Ra_alpha = pow( Ra_N + 1.0 , model->HSMHV2_rd21 - 1.0 ) * (Ra_N + 1.0 - 0.5 * model->HSMHV2_rd21 * Ra_N) * pow( small2,model->HSMHV2_rd21 ); Ra_beta = 0.5 * model->HSMHV2_rd21 * pow( Ra_N + 1.0 , model->HSMHV2_rd21 - 1.0 ) / Ra_N * pow( small2, model->HSMHV2_rd21 - 2.0 ); T1 = Ra_alpha + Ra_beta * Vdse_eff * Vdse_eff; T1_dVdse_eff = 2.0 * Ra_beta * Vdse_eff; } else { T1 = pow( Vdse_eff + small2 , model->HSMHV2_rd21 ) ; T1_dVdse_eff = model->HSMHV2_rd21 * pow( Vdse_eff + small2 , model->HSMHV2_rd21 - 1.0 ) ; } T9 = pow( Vdse_eff + small2 , model->HSMHV2_rd22d ) ; T9_dVdse_eff = model->HSMHV2_rd22d * pow( Vdse_eff + small2 , model->HSMHV2_rd22d - 1.0 ) ; Ra = ( T7 * T1 + Vbse * pParam->HSMHV2_rd22 * T9 ) / here->HSMHV2_weff_nf ; Ra_dVdse_eff = ( T7 * T1_dVdse_eff + Vbse * pParam->HSMHV2_rd22 * T9_dVdse_eff ) / here->HSMHV2_weff_nf ; Ra_dVbs = Ra_dVdse_eff * Vdse_eff_dVbs ; Ra_dVds = Ra_dVdse_eff * Vdse_eff_dVds ; Ra_dVgs = Ra_dVdse_eff * Vdse_eff_dVgs + T7_dVg * T1 / here->HSMHV2_weff_nf ; Ra_dVbse = Ra_dVdse_eff * Vdse_eff_dVbse+pParam->HSMHV2_rd22 * T9 / here->HSMHV2_weff_nf ; Ra_dVdse = Ra_dVdse_eff * Vdse_eff_dVdse ; Ra_dVgse = Ra_dVdse_eff * Vdse_eff_dVgse ; T0 = Ra * Ids0 ; T0_dVb = Ra_dVbs * Ids0 + Ra * Ids0_dVbs ; T0_dVd = Ra_dVds * Ids0 + Ra * Ids0_dVds ; T0_dVg = Ra_dVgs * Ids0 + Ra * Ids0_dVgs ; T0_dT = Ra * Ids0_dT ; T1 = Vds + small2 ; T2 = 1.0 / T1 ; T3 = 1.0 + T0 * T2 ; T3_dVb = T0_dVb * T2 ; T3_dVd = ( T0_dVd * T1 - T0 ) * T2 * T2 ; T3_dVg = T0_dVg * T2 ; T3_dT = T0_dT * T2 ; T4 = 1.0 / T3 ; Ids = Ids0 * T4 ; T5 = T4 * T4 ; Ids_dVbs = ( Ids0_dVbs * T3 - Ids0 * T3_dVb ) * T5 ; Ids_dVds = ( Ids0_dVds * T3 - Ids0 * T3_dVd ) * T5 ; Ids_dVgs = ( Ids0_dVgs * T3 - Ids0 * T3_dVg ) * T5 ; Ids_dT = ( Ids0_dT * T3 - Ids0 * T3_dT ) * T5 ; Ids_dRa = - Ids * Ids / ( Vds + small ) ; } else { Ids = Ids0 ; Ids_dVbs = Ids0_dVbs ; Ids_dVds = Ids0_dVds ; Ids_dVgs = Ids0_dVgs ; Ids_dT = Ids0_dT ; Ra = 0.0 ; Ra_dVbs = Ra_dVds = Ra_dVgs = 0.0 ; Ra_dVbse = Ra_dVdse = Ra_dVgse = 0.0 ; Ids_dRa = 0.0 ; } /*---------------------------------------------------* * Qbu : - Qb in unit area. *-----------------*/ Qbu = - 0.5 * (Q_sub0 + Q_subL + Q_sub0_dep + Q_subL_dep ) ; Qbu_dVgs = - 0.5 * ( Q_sub0_dVgs + Q_subL_dVgs + Q_sub0_dep_dVgs + Q_subL_dep_dVgs ) ; Qbu_dVds = - 0.5 * ( Q_sub0_dVds + Q_subL_dVds + Q_sub0_dep_dVds + Q_subL_dep_dVds ) ; Qbu_dVbs = - 0.5 * ( Q_sub0_dVbs + Q_subL_dVbs + Q_sub0_dep_dVbs + Q_subL_dep_dVbs ) ; Qbu_dT = - 0.5 * ( Q_sub0_dT + Q_subL_dT + Q_sub0_dep_dT + Q_subL_dep_dT ) ; Qiu = - 0.5 * (Q_n0 + Q_nL + Q_s0_dep + Q_sL_dep + Q_b0_dep + Q_bL_dep) ; Qiu_dVgs = - 0.5 * ( Q_n0_dVgs + Q_nL_dVgs + Q_s0_dep_dVgs + Q_sL_dep_dVgs + Q_b0_dep_dVgs + Q_bL_dep_dVgs ) ; Qiu_dVds = - 0.5 * ( Q_n0_dVds + Q_nL_dVds + Q_s0_dep_dVds + Q_sL_dep_dVds + Q_b0_dep_dVds + Q_bL_dep_dVds ) ; Qiu_dVbs = - 0.5 * ( Q_n0_dVbs + Q_nL_dVbs + Q_s0_dep_dVbs + Q_sL_dep_dVbs + Q_b0_dep_dVbs + Q_bL_dep_dVbs ) ; Qiu_dT = - 0.5 * ( Q_n0_dT + Q_nL_dT + Q_s0_dep_dT + Q_sL_dep_dT + Q_b0_dep_dT + Q_bL_dep_dT ) ; Qdrat = 0.5; Qdrat_dVgs = 0.0 ; Qdrat_dVds = 0.0 ; Qdrat_dVbs = 0.0 ; Qdrat_dT = 0.0 ; /*-------------------------------------------------* * set flg_noqi *-----------------*/ Qiu_noi = - 0.5 * (Q_n0 + Q_nL ) ; Qn0 = - Q_n0 ; Qn0_dVgs = - Q_n0_dVgs ; Qn0_dVds = - Q_n0_dVds ; Qn0_dVbs = - Q_n0_dVbs ; Qn0_dT = - Q_n0_dT ; Ey = Ey_suf ; Ey_dVgs = Ey_suf_dVgs ; Ey_dVds = Ey_suf_dVds ; Ey_dVbs = Ey_suf_dVbs ; Ey_dT = Ey_suf_dT ; if( Qn0 < small ){ flg_noqi = 1 ; } } /* End of hsmhveval_dep */ tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2eval_dio.c0000644000175000017500000005176413546075722024007 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhveval_dio.c DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * Substrate-source/drain junction diode *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /*===========================================================* * Preamble *=================*/ /*---------------------------------------------------* * Header files *-----------------*/ #include "ngspice/ngspice.h" /*-----------------------------------* * HiSIM macros *-----------------*/ #include "hisimhv2.h" #include "hsmhv2evalenv.h" /*===========================================================* * Function HSMHV2dio *=================*/ int HSMHV2dio ( double vbs_jct, double vbd_jct, double deltemp, HSMHV2instance *here, HSMHV2model *model, CKTcircuit *ckt ) { HSMHV2binningParam *pParam = &here->pParam ; /* junction currents */ double Ibs =0.0, Gbs =0.0, Ibs_dT =0.0 ; double Ibd =0.0, Gbd =0.0, Ibd_dT =0.0 ; /* junction capacitances */ double Qbs =0.0, Capbs =0.0, Qbs_dT =0.0 ; double Qbd =0.0, Capbd =0.0, Qbd_dT =0.0 ; double czbd =0.0, czbd_dT=0.0 ; double czbdsw =0.0, czbdsw_dT=0.0 ; double czbdswg =0.0, czbdswg_dT=0.0 ; double czbs =0.0, czbs_dT=0.0 ; double czbssw =0.0, czbssw_dT=0.0 ; double czbsswg =0.0, czbsswg_dT=0.0 ; double arg =0.0, sarg =0.0 ; /* temperature-dependent variables for SHE model */ double log_Tratio =0.0 ; double TTEMP =0.0, TTEMP0 =0.0 ; double beta =0.0, beta_dT =0.0 ; double beta_inv =0.0, beta_inv_dT =0.0 ; double Eg =0.0, Eg_dT =0.0 ; double js =0.0, js_dT =0.0 ; double jssw =0.0, jssw_dT =0.0 ; double js2 =0.0, js2_dT =0.0 ; double jssw2 =0.0, jssw2_dT =0.0 ; double isbd_dT =0.0, isbs_dT =0.0 ; double isbd2_dT =0.0, isbs2_dT =0.0 ; double vbdt_dT =0.0, vbst_dT = 0.0 ; double jd_expcd_dT =0.0 , jd_expcs_dT =0.0 ; double jd_nvtm_invd_dT =0.0 , jd_nvtm_invs_dT =0.0 ; double exptempd_dT = 0.0 , exptemps_dT = 0.0 ; double tcjbd =0.0, tcjbs =0.0, tcjbdsw =0.0, tcjbssw =0.0, tcjbdswg =0.0, tcjbsswg =0.0 ; /* options */ double Mfactor = here->HSMHV2_m; /* Internal flags --------------------*/ int flg_err = 0; /* error level */ int flg_info = model->HSMHV2_info; /* temporary vars. & derivatives */ double TX =0.0 ; double T0 =0.0, T0_dT =0.0 ; double T1 =0.0, T1_dVb =0.0, T1_dT =0.0 ; double T2 =0.0, T2_dVb =0.0, T2_dT =0.0 ; double T3 =0.0, T3_dVb =0.0, T3_dT =0.0 ; double T4 =0.0, T4_dT =0.0 ; double T9 =0.0, T9_dT =0.0 ; double T10 =0.0, T10_dT =0.0 ; double T12 =0.0, T12_dT =0.0 ; /*================ Start of executable code.=================*/ /*-----------------------------------------------------------* * Temperature dependent constants. *-----------------*/ if ( here->HSMHV2tempNode > 0 && pParam->HSMHV2_rth0 != 0.0 ) { #define HSMHV2EVAL #include "hsmhv2temp_eval_dio.h" } else { TTEMP = ckt->CKTtemp; if ( here->HSMHV2_dtemp_Given ) { TTEMP = TTEMP + here->HSMHV2_dtemp ; } } /*-----------------------------------------------------------* * Cbsj, Cbdj: node-base S/D biases. *-----------------*/ /* ibd */ T10 = model->HSMHV2_cvbd * here->HSMHV2_jd_nvtm_invd ; T10_dT = model->HSMHV2_cvbd * beta_dT / pParam->HSMHV2_njd ; T9 = model->HSMHV2_cisbd * here->HSMHV2_exptempd ; T9_dT = model->HSMHV2_cisbd * exptempd_dT ; T0 = here->HSMHV2_isbd2 * T9 ; T0_dT = here->HSMHV2_isbd2 * T9_dT + isbd2_dT * T9 ; TX = - vbd_jct * T10 ; T2 = exp ( TX ); T2_dVb = - T2 * T10 ; T2_dT = T2 * TX * beta_dT * beta_inv ; T3 = T2 ; T3_dVb = T2_dVb ; T3_dT = T2_dT ; if ( vbd_jct < here->HSMHV2_vbdt ) { TX = vbd_jct * here->HSMHV2_jd_nvtm_invd ; if ( TX < - 3*EXP_THR ) { T1 = 0.0 ; T1_dVb = 0.0 ; T1_dT = 0.0 ; } else { T1 = exp ( TX ) ; T1_dVb = T1 * here->HSMHV2_jd_nvtm_invd ; T1_dT = T1 * TX * beta_dT * beta_inv ; } Ibd = here->HSMHV2_isbd * (T1 - 1.0) + T0 * (T2 - 1.0) + pParam->HSMHV2_cisbkd * (T3 - 1.0); Gbd = here->HSMHV2_isbd * T1_dVb + T0 * T2_dVb + pParam->HSMHV2_cisbkd * T3_dVb ; Ibd_dT = here->HSMHV2_isbd * T1_dT + isbd_dT * ( T1 - 1.0 ) + T0 * T2_dT + T0_dT * ( T2 - 1.0 ) + pParam->HSMHV2_cisbkd * T3_dT ; } else { T1 = here->HSMHV2_jd_expcd ; T4 = here->HSMHV2_isbd * here->HSMHV2_jd_nvtm_invd * T1 ; Ibd = here->HSMHV2_isbd * (T1 - 1.0) + T4 * (vbd_jct - here->HSMHV2_vbdt) + T0 * (T2 - 1.0) + pParam->HSMHV2_cisbkd * (T3 - 1.0) ; Gbd = T4 + T0 * T2_dVb + pParam->HSMHV2_cisbkd * T3_dVb ; T1_dT = jd_expcd_dT ; T4_dT = isbd_dT * here->HSMHV2_jd_nvtm_invd * T1 + here->HSMHV2_isbd * jd_nvtm_invd_dT * T1 + here->HSMHV2_isbd * here->HSMHV2_jd_nvtm_invd * T1_dT ; Ibd_dT = isbd_dT * ( T1 - 1.0 ) + here->HSMHV2_isbd * T1_dT + T4_dT * ( vbd_jct - here->HSMHV2_vbdt ) - T4 * vbdt_dT + T0_dT * ( T2 - 1.0 ) + T0 * T2_dT + pParam->HSMHV2_cisbkd * T3_dT ; } T12 = model->HSMHV2_divxd * here->HSMHV2_isbd2 ; Ibd += T12 * vbd_jct ; Gbd += T12 ; T12_dT = model->HSMHV2_divxd * isbd2_dT ; Ibd_dT += T12_dT * vbd_jct ; /* ibs */ T10 = model->HSMHV2_cvbs * here->HSMHV2_jd_nvtm_invs ; T10_dT = model->HSMHV2_cvbs * beta_dT / pParam->HSMHV2_njs ; T9 = model->HSMHV2_cisbs * here->HSMHV2_exptemps ; T9_dT = model->HSMHV2_cisbs * exptemps_dT ; T0 = here->HSMHV2_isbs2 * T9 ; T0_dT = here->HSMHV2_isbs2 * T9_dT + isbs2_dT * T9 ; TX = - vbs_jct * T10 ; T2 = exp ( TX ); T2_dVb = - T2 * T10 ; T2_dT = T2 * TX * beta_dT * beta_inv ; T3 = T2 ; T3_dVb = T2_dVb ; T3_dT = T2_dT ; if ( vbs_jct < here->HSMHV2_vbst ) { TX = vbs_jct * here->HSMHV2_jd_nvtm_invs ; if ( TX < - 3*EXP_THR ) { T1 = 0.0 ; T1_dVb = 0.0 ; T1_dT = 0.0 ; } else { T1 = exp ( TX ) ; T1_dVb = T1 * here->HSMHV2_jd_nvtm_invs ; T1_dT = T1 * TX * beta_dT * beta_inv ; } Ibs = here->HSMHV2_isbs * (T1 - 1.0) + T0 * (T2 - 1.0) + pParam->HSMHV2_cisbks * (T3 - 1.0); Gbs = here->HSMHV2_isbs * T1_dVb + T0 * T2_dVb + pParam->HSMHV2_cisbks * T3_dVb ; Ibs_dT = here->HSMHV2_isbs * T1_dT + isbs_dT * ( T1 - 1.0 ) + T0 * T2_dT + T0_dT * ( T2 - 1.0 ) + pParam->HSMHV2_cisbks * T3_dT ; } else { T1 = here->HSMHV2_jd_expcs ; T4 = here->HSMHV2_isbs * here->HSMHV2_jd_nvtm_invs * T1 ; Ibs = here->HSMHV2_isbs * (T1 - 1.0) + T4 * (vbs_jct - here->HSMHV2_vbst) + T0 * (T2 - 1.0) + pParam->HSMHV2_cisbks * (T3 - 1.0) ; Gbs = T4 + T0 * T2_dVb + pParam->HSMHV2_cisbks * T3_dVb ; T1_dT = jd_expcs_dT ; T4_dT = isbs_dT * here->HSMHV2_jd_nvtm_invs * T1 + here->HSMHV2_isbs * jd_nvtm_invs_dT * T1 + here->HSMHV2_isbs * here->HSMHV2_jd_nvtm_invs * T1_dT ; Ibs_dT = isbs_dT * ( T1 - 1.0 ) + here->HSMHV2_isbs * T1_dT + T4_dT * ( vbs_jct - here->HSMHV2_vbst) - T4 * vbst_dT + T0_dT * ( T2 - 1.0 ) + T0 * T2_dT + pParam->HSMHV2_cisbks * T3_dT ; } T12 = model->HSMHV2_divxs * here->HSMHV2_isbs2 ; Ibs += T12 * vbs_jct ; Gbs += T12 ; T12_dT = model->HSMHV2_divxs * isbs2_dT ; Ibs_dT += T12_dT * vbs_jct ; /*-----------------------------------------------------------* * Charges and Capacitances. *-----------------*/ /* charge storage elements * bulk-drain and bulk-source depletion capacitances * czbd : zero bias drain junction capacitance * czbs : zero bias source junction capacitance * czbdsw:zero bias drain junction sidewall capacitance * czbssw:zero bias source junction sidewall capacitance */ /* Source Bulk Junction */ tcjbs = model->HSMHV2_tcjbs ; tcjbssw = model->HSMHV2_tcjbssw ; tcjbsswg = model->HSMHV2_tcjbsswg ; czbs = model->HSMHV2_cjs * here->HSMHV2_as ; czbs = czbs * ( 1.0 + tcjbs * ( TTEMP - model->HSMHV2_ktnom )) ; czbs_dT = ( model->HSMHV2_cjs * here->HSMHV2_as ) * tcjbs ; if (here->HSMHV2_ps > here->HSMHV2_weff_nf) { czbssw = model->HSMHV2_cjsws * ( here->HSMHV2_ps - here->HSMHV2_weff_nf ) ; czbssw = czbssw * ( 1.0 + tcjbssw * ( TTEMP - model->HSMHV2_ktnom )) ; czbssw_dT = ( model->HSMHV2_cjsws * ( here->HSMHV2_ps - here->HSMHV2_weff_nf )) * tcjbssw ; czbsswg = model->HSMHV2_cjswgs * here->HSMHV2_weff_nf ; czbsswg = czbsswg * ( 1.0 + tcjbsswg * ( TTEMP - model->HSMHV2_ktnom )) ; czbsswg_dT = ( model->HSMHV2_cjswgs * here->HSMHV2_weff_nf ) * tcjbsswg ; // if (vbs_jct == 0.0) { if (0) { Qbs = 0.0 ; Qbs_dT = 0.0 ; Capbs = czbs + czbssw + czbsswg ; } else if (vbs_jct < 0.0) { if (czbs > 0.0) { arg = 1.0 - vbs_jct / model->HSMHV2_pbs ; if (model->HSMHV2_mjs == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSMHV2_mjs ) ; Qbs = model->HSMHV2_pbs * czbs * (1.0 - arg * sarg) / (1.0 - model->HSMHV2_mjs) ; Qbs_dT = model->HSMHV2_pbs * czbs_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV2_mjs) ; Capbs = czbs * sarg ; } else { Qbs = 0.0 ; Qbs_dT = 0.0 ; Capbs = 0.0 ; } if (czbssw > 0.0) { arg = 1.0 - vbs_jct / model->HSMHV2_pbsws ; if (model->HSMHV2_mjsws == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSMHV2_mjsws ) ; Qbs += model->HSMHV2_pbsws * czbssw * (1.0 - arg * sarg) / (1.0 - model->HSMHV2_mjsws) ; Qbs_dT += model->HSMHV2_pbsws * czbssw_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV2_mjsws) ; Capbs += czbssw * sarg ; } if (czbsswg > 0.0) { arg = 1.0 - vbs_jct / model->HSMHV2_pbswgs ; if (model->HSMHV2_mjswgs == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSMHV2_mjswgs ) ; Qbs += model->HSMHV2_pbswgs * czbsswg * (1.0 - arg * sarg) / (1.0 - model->HSMHV2_mjswgs) ; Qbs_dT += model->HSMHV2_pbswgs * czbsswg_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV2_mjswgs) ; Capbs += czbsswg * sarg ; } } else { T1 = czbs + czbssw + czbsswg ; T1_dT = czbs_dT + czbssw_dT + czbsswg_dT ; T2 = czbs * model->HSMHV2_mjs / model->HSMHV2_pbs + czbssw * model->HSMHV2_mjsws / model->HSMHV2_pbsws + czbsswg * model->HSMHV2_mjswgs / model->HSMHV2_pbswgs ; T2_dT = czbs_dT * model->HSMHV2_mjs / model->HSMHV2_pbs + czbssw_dT * model->HSMHV2_mjsws / model->HSMHV2_pbsws + czbsswg_dT * model->HSMHV2_mjswgs / model->HSMHV2_pbswgs ; Qbs = vbs_jct * (T1 + vbs_jct * 0.5 * T2) ; Qbs_dT = vbs_jct * (T1_dT + vbs_jct * 0.5 * T2_dT) ; Capbs = T1 + vbs_jct * T2 ; } } else { czbsswg = model->HSMHV2_cjswgs * here->HSMHV2_ps ; czbsswg = czbsswg * ( 1.0 + tcjbsswg * ( TTEMP - model->HSMHV2_ktnom )) ; czbsswg_dT = ( model->HSMHV2_cjswgs * here->HSMHV2_ps ) * tcjbsswg ; // if (vbs_jct == 0.0) { if (0) { Qbs = 0.0 ; Qbs_dT = 0.0 ; Capbs = czbs + czbsswg ; } else if (vbs_jct < 0.0) { if (czbs > 0.0) { arg = 1.0 - vbs_jct / model->HSMHV2_pbs ; if (model->HSMHV2_mjs == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSMHV2_mjs ) ; Qbs = model->HSMHV2_pbs * czbs * (1.0 - arg * sarg) / (1.0 - model->HSMHV2_mjs) ; Qbs_dT = model->HSMHV2_pbs * czbs_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV2_mjs) ; Capbs = czbs * sarg ; } else { Qbs = 0.0 ; Qbs_dT = 0.0 ; Capbs = 0.0 ; } if (czbsswg > 0.0) { arg = 1.0 - vbs_jct / model->HSMHV2_pbswgs ; if (model->HSMHV2_mjswgs == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSMHV2_mjswgs ) ; Qbs += model->HSMHV2_pbswgs * czbsswg * (1.0 - arg * sarg) / (1.0 - model->HSMHV2_mjswgs) ; Qbs_dT += model->HSMHV2_pbswgs * czbsswg_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV2_mjswgs) ; Capbs += czbsswg * sarg ; } } else { T1 = czbs + czbsswg ; T1_dT = czbs_dT + czbsswg_dT ; T2 = czbs * model->HSMHV2_mjs / model->HSMHV2_pbs + czbsswg * model->HSMHV2_mjswgs / model->HSMHV2_pbswgs ; T2_dT = czbs_dT * model->HSMHV2_mjs / model->HSMHV2_pbs + czbsswg_dT * model->HSMHV2_mjswgs / model->HSMHV2_pbswgs ; Qbs = vbs_jct * (T1 + vbs_jct * 0.5 * T2) ; Qbs_dT = vbs_jct * (T1_dT + vbs_jct * 0.5 * T2_dT) ; Capbs = T1 + vbs_jct * T2 ; } } /* Drain Bulk Junction */ tcjbd = model->HSMHV2_tcjbd ; tcjbdsw = model->HSMHV2_tcjbdsw ; tcjbdswg = model->HSMHV2_tcjbdswg ; czbd = model->HSMHV2_cjd * here->HSMHV2_ad ; czbd = czbd * ( 1.0 + tcjbd * ( TTEMP - model->HSMHV2_ktnom )) ; czbd_dT = ( model->HSMHV2_cjd * here->HSMHV2_ad ) * tcjbd ; if (here->HSMHV2_pd > here->HSMHV2_weff_nf) { czbdsw = model->HSMHV2_cjswd * ( here->HSMHV2_pd - here->HSMHV2_weff_nf ) ; czbdsw = czbdsw * ( 1.0 + tcjbdsw * ( TTEMP - model->HSMHV2_ktnom )) ; czbdsw_dT = ( model->HSMHV2_cjswd * ( here->HSMHV2_pd - here->HSMHV2_weff_nf )) * tcjbdsw ; czbdswg = model->HSMHV2_cjswgd * here->HSMHV2_weff_nf ; czbdswg = czbdswg * ( 1.0 + tcjbdswg * ( TTEMP - model->HSMHV2_ktnom )) ; czbdswg_dT = ( model->HSMHV2_cjswgd * here->HSMHV2_weff_nf ) * tcjbdswg ; // if (vbd_jct == 0.0) { if (0) { Qbd = 0.0 ; Qbd_dT = 0.0 ; Capbd = czbd + czbdsw + czbdswg ; } else if (vbd_jct < 0.0) { if (czbd > 0.0) { arg = 1.0 - vbd_jct / model->HSMHV2_pbd ; if (model->HSMHV2_mjd == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSMHV2_mjd ) ; Qbd = model->HSMHV2_pbd * czbd * (1.0 - arg * sarg) / (1.0 - model->HSMHV2_mjd) ; Qbd_dT = model->HSMHV2_pbd * czbd_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV2_mjd) ; Capbd = czbd * sarg ; } else { Qbd = 0.0 ; Qbd_dT = 0.0 ; Capbd = 0.0 ; } if (czbdsw > 0.0) { arg = 1.0 - vbd_jct / model->HSMHV2_pbswd ; if (model->HSMHV2_mjswd == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSMHV2_mjswd ) ; Qbd += model->HSMHV2_pbswd * czbdsw * (1.0 - arg * sarg) / (1.0 - model->HSMHV2_mjswd) ; Qbd_dT += model->HSMHV2_pbswd * czbdsw_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV2_mjswd) ; Capbd += czbdsw * sarg ; } if (czbdswg > 0.0) { arg = 1.0 - vbd_jct / model->HSMHV2_pbswgd ; if (model->HSMHV2_mjswgd == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSMHV2_mjswgd ) ; Qbd += model->HSMHV2_pbswgd * czbdswg * (1.0 - arg * sarg) / (1.0 - model->HSMHV2_mjswgd) ; Qbd_dT += model->HSMHV2_pbswgd * czbdswg_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV2_mjswgd) ; Capbd += czbdswg * sarg ; } } else { T1 = czbd + czbdsw + czbdswg ; T1_dT = czbd_dT + czbdsw_dT + czbdswg_dT ; T2 = czbd * model->HSMHV2_mjd / model->HSMHV2_pbd + czbdsw * model->HSMHV2_mjswd / model->HSMHV2_pbswd + czbdswg * model->HSMHV2_mjswgd / model->HSMHV2_pbswgd ; T2_dT = czbd_dT * model->HSMHV2_mjd / model->HSMHV2_pbd + czbdsw_dT * model->HSMHV2_mjswd / model->HSMHV2_pbswd + czbdswg_dT * model->HSMHV2_mjswgd / model->HSMHV2_pbswgd ; Qbd = vbd_jct * (T1 + vbd_jct * 0.5 * T2) ; Qbd_dT = vbd_jct * (T1_dT + vbd_jct * 0.5 * T2_dT) ; Capbd = T1 + vbd_jct * T2 ; } } else { czbdswg = model->HSMHV2_cjswgd * here->HSMHV2_pd ; czbdswg = czbdswg * ( 1.0 + tcjbdswg * ( TTEMP - model->HSMHV2_ktnom )) ; czbdswg_dT = ( model->HSMHV2_cjswgd * here->HSMHV2_pd ) * tcjbdswg ; // if (vbd_jct == 0.0) { if (0) { Qbd = 0.0 ; Qbd_dT = 0.0 ; Capbd = czbd + czbdswg ; } else if (vbd_jct < 0.0) { if (czbd > 0.0) { arg = 1.0 - vbd_jct / model->HSMHV2_pbd ; if (model->HSMHV2_mjd == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSMHV2_mjd ) ; Qbd = model->HSMHV2_pbd * czbd * (1.0 - arg * sarg) / (1.0 - model->HSMHV2_mjd) ; Qbd_dT = model->HSMHV2_pbd * czbd_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV2_mjd) ; Capbd = czbd * sarg ; } else { Qbd = 0.0 ; Qbd_dT = 0.0 ; Capbd = 0.0 ; } if (czbdswg > 0.0) { arg = 1.0 - vbd_jct / model->HSMHV2_pbswgd ; if (model->HSMHV2_mjswgd == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSMHV2_mjswgd ) ; Qbd += model->HSMHV2_pbswgd * czbdswg * (1.0 - arg * sarg) / (1.0 - model->HSMHV2_mjswgd) ; Qbd_dT += model->HSMHV2_pbswgd * czbdswg_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV2_mjswgd) ; Capbd += czbdswg * sarg ; } } else { T1 = czbd + czbdswg ; T1_dT = czbd_dT + czbdswg_dT ; T2 = czbd * model->HSMHV2_mjd / model->HSMHV2_pbd + czbdswg * model->HSMHV2_mjswgd / model->HSMHV2_pbswgd ; T2_dT = czbd_dT * model->HSMHV2_mjd / model->HSMHV2_pbd + czbdswg_dT * model->HSMHV2_mjswgd / model->HSMHV2_pbswgd ; Qbd = vbd_jct * (T1 + vbd_jct * 0.5 * T2) ; Qbd_dT = vbd_jct * (T1_dT + vbd_jct * 0.5 * T2_dT) ; Capbd = T1 + vbd_jct * T2 ; } } /*---------------------------------------------------* * Junction diode. *-----------------*/ here->HSMHV2_ibs = Mfactor * Ibs ; here->HSMHV2_ibd = Mfactor * Ibd ; here->HSMHV2_gbs = Mfactor * Gbs ; here->HSMHV2_gbd = Mfactor * Gbd ; *(ckt->CKTstate0 + here->HSMHV2qbs) = Mfactor * Qbs ; *(ckt->CKTstate0 + here->HSMHV2qbd) = Mfactor * Qbd ; here->HSMHV2_capbs = Mfactor * Capbs ; here->HSMHV2_capbd = Mfactor * Capbd ; here->HSMHV2_gbdT = Mfactor * Ibd_dT ; here->HSMHV2_gbsT = Mfactor * Ibs_dT ; here->HSMHV2_gcbdT = Mfactor * Qbd_dT ; here->HSMHV2_gcbsT = Mfactor * Qbs_dT ; /*-----------------------------------------------------------* * Warn floating-point exceptions. * - Function finite() in libm is called. *-----------------*/ T1 = here->HSMHV2_ibs + here->HSMHV2_ibd + here->HSMHV2_gbs + here->HSMHV2_gbd; T1 = T1 + *(ckt->CKTstate0 + here->HSMHV2qbs) + *(ckt->CKTstate0 + here->HSMHV2qbd) + here->HSMHV2_capbs + here->HSMHV2_capbd; if ( ! finite (T1) ) { flg_err = 1 ; fprintf(stderr , "*** warning(HiSIM_HV(%s)): FP-exception (junction diode)\n",model->HSMHV2modName) ; if ( flg_info >= 1 ) { printf ("*** warning(HiSIM_HV(%s)): FP-exception\n",model->HSMHV2modName) ; } } /*-----------------------------------------------------------* * End of HSMHV2eval_dio *-----------------*/ return ( HiSIM_OK ) ; } tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2noi.c0000644000175000017500000002263413546075722023004 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhvnoi.c DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ #include "ngspice/ngspice.h" #include "hsmhv2def.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" #include "ngspice/const.h" /* jwan */ #include "hsmhv2evalenv.h" /* #include "hsmhv2macro.h" */ /* * HSMHV2noise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with MOSFET's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the MOSFET's is summed with the variable "OnDens". */ int HSMHV2noise ( int mode, int operation, GENmodel *inModel, CKTcircuit *ckt, Ndata *data, double *OnDens) { HSMHV2model *model = (HSMHV2model *)inModel; HSMHV2instance *here; double tempOnoise=0.0 ; double tempInoise=0.0 ; double noizDens[HSMHV2NSRCS] ; double lnNdens[HSMHV2NSRCS] ; int i; double G =0.0 ; double TTEMP = 0.0 ; /* define the names of the noise sources */ static char * HSMHV2nNames[HSMHV2NSRCS] = { /* Note that we have to keep the order consistent with the index definitions in hsmhvdefs.h */ ".rd", /* noise due to rd */ ".rs", /* noise due to rs */ ".id", /* noise due to id */ ".1ovf", /* flicker (1/f) noise */ ".ign", /* induced gate noise component at the drain node */ "" /* total transistor noise */ }; for ( ;model != NULL; model = HSMHV2nextModel(model)) { for ( here = HSMHV2instances(model); here != NULL; here = HSMHV2nextInstance(here)) { switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (((NOISEAN*)ckt->CKTcurJob)->NStpsSm != 0) { switch (mode) { case N_DENS: for ( i = 0; i < HSMHV2NSRCS; i++ ) { NOISE_ADD_OUTVAR(ckt, data, "onoise.%s%s", here->HSMHV2name, HSMHV2nNames[i]); } break; case INT_NOIZ: for ( i = 0; i < HSMHV2NSRCS; i++ ) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total.%s%s", here->HSMHV2name, HSMHV2nNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total.%s%s", here->HSMHV2name, HSMHV2nNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: /* temperature */ TTEMP = ckt->CKTtemp; if ( here->HSMHV2_dtemp_Given ) { TTEMP = TTEMP + here->HSMHV2_dtemp ; } TTEMP = TTEMP + *(ckt->CKTstate0 + here->HSMHV2deltemp) ; /* rs/rd thermal noise */ if ( model->HSMHV2_corsrd == 1 || model->HSMHV2_corsrd == 3 || model->HSMHV2_cordrift == 1 ) { NevalSrc(&noizDens[HSMHV2RDNOIZ], NULL, ckt, N_GAIN, here->HSMHV2dNodePrime, here->HSMHV2dNode, 0.0); noizDens[HSMHV2RDNOIZ] *= 4 * C_KB * TTEMP * here->HSMHV2drainConductance ; lnNdens[HSMHV2RDNOIZ] = log( MAX(noizDens[HSMHV2RDNOIZ],N_MINLOG) ); NevalSrc(&noizDens[HSMHV2RSNOIZ], NULL, ckt, N_GAIN, here->HSMHV2sNodePrime, here->HSMHV2sNode, 0.0); noizDens[HSMHV2RSNOIZ] *= 4 * C_KB * TTEMP * here->HSMHV2sourceConductance ; lnNdens[HSMHV2RSNOIZ] = log( MAX(noizDens[HSMHV2RSNOIZ],N_MINLOG) ); } else { noizDens[HSMHV2RDNOIZ] = 0e0 ; lnNdens[HSMHV2RDNOIZ] = N_MINLOG ; noizDens[HSMHV2RSNOIZ] = 0e0 ; lnNdens[HSMHV2RSNOIZ] = N_MINLOG ; } /* channel thermal noise */ NevalSrc(&noizDens[HSMHV2IDNOIZ], NULL, ckt, N_GAIN, here->HSMHV2dNodePrime, here->HSMHV2sNodePrime, 0.0); switch( model->HSMHV2_noise ) { case 1: /* HiSIMHV model */ G = here->HSMHV2_noithrml ; noizDens[HSMHV2IDNOIZ] *= 4 * C_KB * TTEMP * G ; lnNdens[HSMHV2IDNOIZ] = log( MAX(noizDens[HSMHV2IDNOIZ],N_MINLOG) ); break; } /* flicker noise */ NevalSrc(&noizDens[HSMHV2FLNOIZ], NULL, ckt, N_GAIN, here->HSMHV2dNodePrime, here->HSMHV2sNodePrime, 0.0); switch ( model->HSMHV2_noise ) { case 1: /* HiSIM model */ noizDens[HSMHV2FLNOIZ] *= here->HSMHV2_noiflick / pow(data->freq, model->HSMHV2_falph) ; lnNdens[HSMHV2FLNOIZ] = log(MAX(noizDens[HSMHV2FLNOIZ], N_MINLOG)); break; } /* induced gate noise */ NevalSrc(&noizDens[HSMHV2IGNOIZ], NULL, ckt, N_GAIN, here->HSMHV2dNodePrime, here->HSMHV2sNodePrime, 0.0); switch ( model->HSMHV2_noise ) { case 1: /* HiSIM model */ noizDens[HSMHV2IGNOIZ] *= here->HSMHV2_noiigate * here->HSMHV2_noicross * here->HSMHV2_noicross * data->freq * data->freq; lnNdens[HSMHV2IGNOIZ] = log(MAX(noizDens[HSMHV2IGNOIZ], N_MINLOG)); break; } /* total */ noizDens[HSMHV2TOTNOIZ] = noizDens[HSMHV2RDNOIZ] + noizDens[HSMHV2RSNOIZ] + noizDens[HSMHV2IDNOIZ] + noizDens[HSMHV2FLNOIZ] + noizDens[HSMHV2IGNOIZ]; lnNdens[HSMHV2TOTNOIZ] = log(MAX(noizDens[HSMHV2TOTNOIZ], N_MINLOG)); *OnDens += noizDens[HSMHV2TOTNOIZ]; if ( data->delFreq == 0.0 ) { /* if we haven't done any previous integration, we need to initialize our "history" variables. */ for ( i = 0; i < HSMHV2NSRCS; i++ ) here->HSMHV2nVar[LNLSTDENS][i] = lnNdens[i]; /* clear out our integration variables if it's the first pass */ if (data->freq == ((NOISEAN*) ckt->CKTcurJob)->NstartFreq) { for (i = 0; i < HSMHV2NSRCS; i++) { here->HSMHV2nVar[OUTNOIZ][i] = 0.0; here->HSMHV2nVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0, we have to integrate. */ for ( i = 0; i < HSMHV2NSRCS; i++ ) { if ( i != HSMHV2TOTNOIZ ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], here->HSMHV2nVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv, lnNdens[i] + data->lnGainInv, here->HSMHV2nVar[LNLSTDENS][i] + data->lnGainInv, data); here->HSMHV2nVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if ( ((NOISEAN*)ckt->CKTcurJob)->NStpsSm != 0 ) { here->HSMHV2nVar[OUTNOIZ][i] += tempOnoise; here->HSMHV2nVar[OUTNOIZ][HSMHV2TOTNOIZ] += tempOnoise; here->HSMHV2nVar[INNOIZ][i] += tempInoise; here->HSMHV2nVar[INNOIZ][HSMHV2TOTNOIZ] += tempInoise; } } } } if ( data->prtSummary ) { for (i = 0; i < HSMHV2NSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if ( ((NOISEAN*)ckt->CKTcurJob)->NStpsSm != 0 ) { for ( i = 0; i < HSMHV2NSRCS; i++ ) { data->outpVector[data->outNumber++] = here->HSMHV2nVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = here->HSMHV2nVar[INNOIZ][i]; } } break; } break; case N_CLOSE: /* do nothing, the main calling routine will close */ return (OK); break; /* the plots */ } /* switch (operation) */ } /* for here */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2acld.c0000644000175000017500000004136013546075722023117 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhvacld.c DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "hsmhv2def.h" int HSMHV2acLoad( GENmodel *inModel, CKTcircuit *ckt) { HSMHV2model *model = (HSMHV2model*)inModel; HSMHV2instance *here; double omega=0.0 ; int flg_nqs =0 ; int flg_subNode = 0 ; #define dNode 0 #define dNodePrime 1 #define gNode 2 #define gNodePrime 3 #define sNode 4 #define sNodePrime 5 #define bNodePrime 6 #define bNode 7 #define dbNode 8 #define sbNode 9 #define subNode 10 #define tempNode 11 #define qiNode 12 #define qbNode 13 omega = ckt->CKTomega; for ( ; model != NULL; model = HSMHV2nextModel(model)) { for ( here = HSMHV2instances(model); here!= NULL; here = HSMHV2nextInstance(here)) { flg_nqs = model->HSMHV2_conqs ; flg_subNode = here->HSMHV2subNode ; /* if flg_subNode > 0, external(/internal) substrate node exists */ /* stamp matrix */ /*drain*/ *(here->HSMHV2DdPtr) += here->HSMHV2_ydc_d[dNode] ; *(here->HSMHV2DdPtr +1) += omega*here->HSMHV2_ydyn_d[dNode] ; *(here->HSMHV2DdpPtr) += here->HSMHV2_ydc_d[dNodePrime] ; *(here->HSMHV2DdpPtr +1) += omega*here->HSMHV2_ydyn_d[dNodePrime]; *(here->HSMHV2DgpPtr) += here->HSMHV2_ydc_d[gNodePrime]; *(here->HSMHV2DgpPtr +1) += omega*here->HSMHV2_ydyn_d[gNodePrime]; *(here->HSMHV2DsPtr) += here->HSMHV2_ydc_d[sNode]; *(here->HSMHV2DsPtr +1) += omega*here->HSMHV2_ydyn_d[sNode]; *(here->HSMHV2DbpPtr) += here->HSMHV2_ydc_d[bNodePrime]; *(here->HSMHV2DbpPtr +1) += omega*here->HSMHV2_ydyn_d[bNodePrime]; *(here->HSMHV2DdbPtr) += here->HSMHV2_ydc_d[dbNode]; *(here->HSMHV2DdbPtr +1) += omega*here->HSMHV2_ydyn_d[dbNode]; if (flg_subNode > 0) { *(here->HSMHV2DsubPtr) += here->HSMHV2_ydc_d[subNode]; } if( here->HSMHV2tempNode > 0) { *(here->HSMHV2DtempPtr) += model->HSMHV2_type*here->HSMHV2_ydc_d[tempNode]; *(here->HSMHV2DtempPtr +1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_d[tempNode]; } /*drain prime*/ *(here->HSMHV2DPdPtr) += here->HSMHV2_ydc_dP[dNode] ; *(here->HSMHV2DPdPtr +1) += omega*here->HSMHV2_ydyn_dP[dNode]; *(here->HSMHV2DPdpPtr) += here->HSMHV2_ydc_dP[dNodePrime]; *(here->HSMHV2DPdpPtr +1) += omega*here->HSMHV2_ydyn_dP[dNodePrime]; *(here->HSMHV2DPgpPtr) += here->HSMHV2_ydc_dP[gNodePrime]; *(here->HSMHV2DPgpPtr +1) += omega*here->HSMHV2_ydyn_dP[gNodePrime]; *(here->HSMHV2DPsPtr) += here->HSMHV2_ydc_dP[sNode] ; *(here->HSMHV2DPsPtr +1) += omega*here->HSMHV2_ydyn_dP[sNode]; *(here->HSMHV2DPspPtr) += here->HSMHV2_ydc_dP[sNodePrime] ; *(here->HSMHV2DPspPtr +1) += omega*here->HSMHV2_ydyn_dP[sNodePrime]; *(here->HSMHV2DPbpPtr) += here->HSMHV2_ydc_dP[bNodePrime] ; *(here->HSMHV2DPbpPtr +1) += omega*here->HSMHV2_ydyn_dP[bNodePrime]; if (flg_subNode > 0) { *(here->HSMHV2DPsubPtr) += here->HSMHV2_ydc_dP[subNode]; } if( here->HSMHV2tempNode > 0) { *(here->HSMHV2DPtempPtr) += model->HSMHV2_type*here->HSMHV2_ydc_dP[tempNode]; *(here->HSMHV2DPtempPtr +1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_dP[tempNode]; } if (flg_nqs) { *(here->HSMHV2DPqiPtr) += model->HSMHV2_type*here->HSMHV2_ydc_dP[qiNode]; *(here->HSMHV2DPqiPtr+1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_dP[qiNode]; } /*gate*/ *(here->HSMHV2GgPtr) += here->HSMHV2_ydc_g[gNode] ; *(here->HSMHV2GgPtr +1) += omega*here->HSMHV2_ydyn_g[gNode]; *(here->HSMHV2GgpPtr) += here->HSMHV2_ydc_g[gNodePrime] ; *(here->HSMHV2GgpPtr +1) += omega*here->HSMHV2_ydyn_g[gNodePrime]; /*gate prime*/ *(here->HSMHV2GPdPtr) += here->HSMHV2_ydc_gP[dNode] ; *(here->HSMHV2GPdPtr +1) += omega*here->HSMHV2_ydyn_gP[dNode]; *(here->HSMHV2GPdpPtr) += here->HSMHV2_ydc_gP[dNodePrime] ; *(here->HSMHV2GPdpPtr +1) += omega*here->HSMHV2_ydyn_gP[dNodePrime]; *(here->HSMHV2GPgPtr) += here->HSMHV2_ydc_gP[gNode]; *(here->HSMHV2GPgPtr +1) += omega*here->HSMHV2_ydyn_gP[gNode]; *(here->HSMHV2GPgpPtr) += here->HSMHV2_ydc_gP[gNodePrime] ; *(here->HSMHV2GPgpPtr +1) += omega*here->HSMHV2_ydyn_gP[gNodePrime]; *(here->HSMHV2GPsPtr) += here->HSMHV2_ydc_gP[sNode]; *(here->HSMHV2GPsPtr +1) += omega*here->HSMHV2_ydyn_gP[sNode]; *(here->HSMHV2GPspPtr) += here->HSMHV2_ydc_gP[sNodePrime] ; *(here->HSMHV2GPspPtr +1) += omega*here->HSMHV2_ydyn_gP[sNodePrime]; *(here->HSMHV2GPbpPtr) += here->HSMHV2_ydc_gP[bNodePrime] ; *(here->HSMHV2GPbpPtr +1) += omega*here->HSMHV2_ydyn_gP[bNodePrime]; if( here->HSMHV2tempNode > 0) { *(here->HSMHV2GPtempPtr) += model->HSMHV2_type*here->HSMHV2_ydc_gP[tempNode] ; *(here->HSMHV2GPtempPtr +1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_gP[tempNode]; } if (flg_nqs) { *(here->HSMHV2GPqiPtr) += model->HSMHV2_type*here->HSMHV2_ydc_gP[qiNode]; *(here->HSMHV2GPqiPtr+1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_gP[qiNode]; *(here->HSMHV2GPqbPtr) += model->HSMHV2_type*here->HSMHV2_ydc_gP[qbNode]; *(here->HSMHV2GPqbPtr+1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_gP[qbNode]; } /*source*/ *(here->HSMHV2SdPtr) += here->HSMHV2_ydc_s[dNode]; *(here->HSMHV2SdPtr +1) += omega*here->HSMHV2_ydyn_s[dNode]; *(here->HSMHV2SgpPtr) += here->HSMHV2_ydc_s[gNodePrime]; *(here->HSMHV2SgpPtr +1) += omega*here->HSMHV2_ydyn_s[gNodePrime]; *(here->HSMHV2SsPtr) += here->HSMHV2_ydc_s[sNode] ; *(here->HSMHV2SsPtr +1) += omega*here->HSMHV2_ydyn_s[sNode]; *(here->HSMHV2SspPtr) += here->HSMHV2_ydc_s[sNodePrime] ; *(here->HSMHV2SspPtr +1) += omega*here->HSMHV2_ydyn_s[sNodePrime]; *(here->HSMHV2SbpPtr) += here->HSMHV2_ydc_s[bNodePrime]; *(here->HSMHV2SbpPtr +1) += omega*here->HSMHV2_ydyn_s[bNodePrime]; *(here->HSMHV2SsbPtr) += here->HSMHV2_ydc_s[sbNode] ; *(here->HSMHV2SsbPtr +1) += omega*here->HSMHV2_ydyn_s[sbNode]; if (flg_subNode > 0) { *(here->HSMHV2SsubPtr) += here->HSMHV2_ydc_s[subNode]; } if( here->HSMHV2tempNode > 0) { *(here->HSMHV2StempPtr) += model->HSMHV2_type*here->HSMHV2_ydc_s[tempNode]; *(here->HSMHV2StempPtr +1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_s[tempNode]; } /*source prime*/ *(here->HSMHV2SPdPtr) += here->HSMHV2_ydc_sP[dNode] ; *(here->HSMHV2SPdPtr +1) += omega*here->HSMHV2_ydyn_sP[dNode]; *(here->HSMHV2SPdpPtr) += here->HSMHV2_ydc_sP[dNodePrime] ; *(here->HSMHV2SPdpPtr +1) += omega*here->HSMHV2_ydyn_sP[dNodePrime]; *(here->HSMHV2SPgpPtr) += here->HSMHV2_ydc_sP[gNodePrime] ; *(here->HSMHV2SPgpPtr +1) += omega*here->HSMHV2_ydyn_sP[gNodePrime]; *(here->HSMHV2SPsPtr) += here->HSMHV2_ydc_sP[sNode] ; *(here->HSMHV2SPsPtr +1) += omega*here->HSMHV2_ydyn_sP[sNode]; *(here->HSMHV2SPspPtr) += here->HSMHV2_ydc_sP[sNodePrime] ; *(here->HSMHV2SPspPtr +1) += omega*here->HSMHV2_ydyn_sP[sNodePrime]; *(here->HSMHV2SPbpPtr) += here->HSMHV2_ydc_sP[bNodePrime]; *(here->HSMHV2SPbpPtr +1) += omega*here->HSMHV2_ydyn_sP[bNodePrime]; if (flg_subNode > 0) { *(here->HSMHV2SPsubPtr) += here->HSMHV2_ydc_sP[subNode]; } if( here->HSMHV2tempNode > 0) { *(here->HSMHV2SPtempPtr) += model->HSMHV2_type*here->HSMHV2_ydc_sP[tempNode] ; *(here->HSMHV2SPtempPtr +1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_sP[tempNode]; } if (flg_nqs) { *(here->HSMHV2SPqiPtr) += model->HSMHV2_type*here->HSMHV2_ydc_sP[qiNode]; *(here->HSMHV2SPqiPtr+1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_sP[qiNode]; } /*bulk prime*/ *(here->HSMHV2BPdPtr) += here->HSMHV2_ydc_bP[dNode]; *(here->HSMHV2BPdPtr +1) += omega*here->HSMHV2_ydyn_bP[dNode]; *(here->HSMHV2BPsPtr) += here->HSMHV2_ydc_bP[sNode]; *(here->HSMHV2BPsPtr +1) += omega*here->HSMHV2_ydyn_bP[sNode]; *(here->HSMHV2BPdpPtr) += here->HSMHV2_ydc_bP[dNodePrime]; *(here->HSMHV2BPdpPtr +1) += omega*here->HSMHV2_ydyn_bP[dNodePrime]; *(here->HSMHV2BPgpPtr) += here->HSMHV2_ydc_bP[gNodePrime] ; *(here->HSMHV2BPgpPtr +1) += omega*here->HSMHV2_ydyn_bP[gNodePrime]; *(here->HSMHV2BPspPtr) += here->HSMHV2_ydc_bP[sNodePrime]; *(here->HSMHV2BPspPtr +1) += omega*here->HSMHV2_ydyn_bP[sNodePrime]; *(here->HSMHV2BPbpPtr) += here->HSMHV2_ydc_bP[bNodePrime]; *(here->HSMHV2BPbpPtr +1) += omega*here->HSMHV2_ydyn_bP[bNodePrime]; *(here->HSMHV2BPbPtr) += here->HSMHV2_ydc_bP[bNode]; *(here->HSMHV2BPbPtr +1) += omega*here->HSMHV2_ydyn_bP[bNode]; *(here->HSMHV2BPdbPtr) += here->HSMHV2_ydc_bP[dbNode] ; *(here->HSMHV2BPdbPtr +1) += omega*here->HSMHV2_ydyn_bP[dbNode]; *(here->HSMHV2BPsbPtr) += here->HSMHV2_ydc_bP[sbNode] ; *(here->HSMHV2BPsbPtr +1) += omega*here->HSMHV2_ydyn_bP[sbNode]; if( here->HSMHV2tempNode > 0) { *(here->HSMHV2BPtempPtr) += model->HSMHV2_type*here->HSMHV2_ydc_bP[tempNode] ; *(here->HSMHV2BPtempPtr +1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_bP[tempNode]; } if (flg_nqs) { *(here->HSMHV2BPqbPtr) += model->HSMHV2_type*here->HSMHV2_ydc_bP[qbNode]; *(here->HSMHV2BPqbPtr+1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_bP[qbNode]; } /*bulk*/ *(here->HSMHV2BbpPtr) += here->HSMHV2_ydc_b[bNodePrime] ; *(here->HSMHV2BbpPtr +1) += omega*here->HSMHV2_ydyn_b[bNodePrime]; *(here->HSMHV2BbPtr) += here->HSMHV2_ydc_b[bNode] ; *(here->HSMHV2BbPtr +1) += omega*here->HSMHV2_ydyn_b[bNode]; /*drain bulk*/ *(here->HSMHV2DBdPtr) += here->HSMHV2_ydc_db[dNode] ; *(here->HSMHV2DBdPtr +1) += omega*here->HSMHV2_ydyn_db[dNode]; *(here->HSMHV2DBbpPtr) += here->HSMHV2_ydc_db[bNodePrime] ; *(here->HSMHV2DBbpPtr +1) += omega*here->HSMHV2_ydyn_db[bNodePrime]; *(here->HSMHV2DBdbPtr) += here->HSMHV2_ydc_db[dbNode] ; *(here->HSMHV2DBdbPtr +1) += omega*here->HSMHV2_ydyn_db[dbNode]; if( here->HSMHV2tempNode > 0) { *(here->HSMHV2DBtempPtr) += model->HSMHV2_type*here->HSMHV2_ydc_db[tempNode] ; *(here->HSMHV2DBtempPtr +1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_db[tempNode]; } /*source bulk*/ *(here->HSMHV2SBsPtr) += here->HSMHV2_ydc_sb[sNode] ; *(here->HSMHV2SBsPtr +1) += omega*here->HSMHV2_ydyn_sb[sNode]; *(here->HSMHV2SBbpPtr) += here->HSMHV2_ydc_sb[bNodePrime]; *(here->HSMHV2SBbpPtr +1) += omega*here->HSMHV2_ydyn_sb[bNodePrime]; *(here->HSMHV2SBsbPtr) += here->HSMHV2_ydc_sb[sbNode] ; *(here->HSMHV2SBsbPtr +1) += omega*here->HSMHV2_ydyn_sb[sbNode]; if( here->HSMHV2tempNode > 0) { *(here->HSMHV2SBtempPtr) += model->HSMHV2_type*here->HSMHV2_ydc_sb[tempNode]; *(here->HSMHV2SBtempPtr +1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_sb[tempNode]; } /*temp*/ if( here->HSMHV2tempNode > 0) { *(here->HSMHV2TempdPtr) += model->HSMHV2_type*here->HSMHV2_ydc_t[dNode] ; *(here->HSMHV2TempdPtr +1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_t[dNode]; *(here->HSMHV2TempdpPtr) += model->HSMHV2_type*here->HSMHV2_ydc_t[dNodePrime] ; *(here->HSMHV2TempdpPtr +1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_t[dNodePrime]; *(here->HSMHV2TempgpPtr) += model->HSMHV2_type*here->HSMHV2_ydc_t[gNodePrime]; *(here->HSMHV2TempgpPtr +1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_t[gNodePrime]; *(here->HSMHV2TempsPtr) += model->HSMHV2_type*here->HSMHV2_ydc_t[sNode] ; *(here->HSMHV2TempsPtr +1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_t[sNode]; *(here->HSMHV2TempspPtr) += model->HSMHV2_type*here->HSMHV2_ydc_t[sNodePrime] ; *(here->HSMHV2TempspPtr +1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_t[sNodePrime]; *(here->HSMHV2TempbpPtr) += model->HSMHV2_type*here->HSMHV2_ydc_t[bNodePrime] ; *(here->HSMHV2TempbpPtr +1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_t[bNodePrime]; *(here->HSMHV2TemptempPtr) += here->HSMHV2_ydc_t[tempNode] ; *(here->HSMHV2TemptempPtr +1) += omega*here->HSMHV2_ydyn_t[tempNode]; } /* additional entries for flat nqs handling */ if ( flg_nqs ) { /*qi*/ *(here->HSMHV2QIdpPtr) += model->HSMHV2_type*here->HSMHV2_ydc_qi[dNodePrime]; *(here->HSMHV2QIdpPtr+1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_qi[dNodePrime]; *(here->HSMHV2QIgpPtr) += model->HSMHV2_type*here->HSMHV2_ydc_qi[gNodePrime]; *(here->HSMHV2QIgpPtr+1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_qi[gNodePrime]; *(here->HSMHV2QIspPtr) += model->HSMHV2_type*here->HSMHV2_ydc_qi[sNodePrime]; *(here->HSMHV2QIspPtr+1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_qi[sNodePrime]; *(here->HSMHV2QIbpPtr) += model->HSMHV2_type*here->HSMHV2_ydc_qi[bNodePrime]; *(here->HSMHV2QIbpPtr+1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_qi[bNodePrime]; *(here->HSMHV2QIqiPtr) += here->HSMHV2_ydc_qi[qiNode]; *(here->HSMHV2QIqiPtr+1) += omega*here->HSMHV2_ydyn_qi[qiNode]; if ( here->HSMHV2tempNode > 0 ) { *(here->HSMHV2QItempPtr) += here->HSMHV2_ydc_qi[tempNode]; *(here->HSMHV2QItempPtr+1) += omega*here->HSMHV2_ydyn_qi[tempNode]; } /*qb*/ *(here->HSMHV2QBdpPtr) += model->HSMHV2_type*here->HSMHV2_ydc_qb[dNodePrime]; *(here->HSMHV2QBdpPtr+1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_qb[dNodePrime]; *(here->HSMHV2QBgpPtr) += model->HSMHV2_type*here->HSMHV2_ydc_qb[gNodePrime]; *(here->HSMHV2QBgpPtr+1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_qb[gNodePrime]; *(here->HSMHV2QBspPtr) += model->HSMHV2_type*here->HSMHV2_ydc_qb[sNodePrime]; *(here->HSMHV2QBspPtr+1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_qb[sNodePrime]; *(here->HSMHV2QBbpPtr) += model->HSMHV2_type*here->HSMHV2_ydc_qb[bNodePrime]; *(here->HSMHV2QBbpPtr+1) += model->HSMHV2_type*omega*here->HSMHV2_ydyn_qb[bNodePrime]; *(here->HSMHV2QBqbPtr) += here->HSMHV2_ydc_qb[qbNode]; *(here->HSMHV2QBqbPtr+1) += omega*here->HSMHV2_ydyn_qb[qbNode]; if ( here->HSMHV2tempNode > 0 ) { *(here->HSMHV2QBtempPtr) += here->HSMHV2_ydc_qb[tempNode]; *(here->HSMHV2QBtempPtr+1) += omega*here->HSMHV2_ydyn_qb[tempNode]; } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2ld.c0000644000175000017500000037333513546075722022625 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhvld.c DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ #include "ngspice/ngspice.h" #include "hisimhv2.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" #define SHOW_EPS_QUANT 1.0e-15 static void ShowPhysVals ( HSMHV2instance *here, HSMHV2model *model, int isFirst, double vds, double vgs, double vbs, double vgd, double vbd, double vgb ) { NG_IGNORE(vgd); NG_IGNORE(vbd); /* */ /* */ /* Note: This function is not yet adapted to the flat version */ /* */ /* */ /* regard the epsilon-quantity as 0.0 */ vds = (fabs(vds) < SHOW_EPS_QUANT) ? 0.0 : vds; vgs = (fabs(vgs) < SHOW_EPS_QUANT) ? 0.0 : vgs; vbs = (fabs(vbs) < SHOW_EPS_QUANT) ? 0.0 : vbs; vgb = (fabs(vgb) < SHOW_EPS_QUANT) ? 0.0 : vgb; switch (model->HSMHV2_show) { case 1: if (isFirst) printf("Vds Ids\n"); printf("%e %e\n", model->HSMHV2_type*vds, here->HSMHV2_mode*here->HSMHV2_ids); break; case 2: if (isFirst) printf("Vgs Ids\n"); printf("%e %e\n", model->HSMHV2_type*vgs, here->HSMHV2_mode*here->HSMHV2_ids); break; case 3: if (isFirst) printf("Vgs log10(|Ids|)\n"); printf("%e %e\n", model->HSMHV2_type*vgs, log10(here->HSMHV2_ids)); break; case 4: if (isFirst) printf("log10(|Ids|) gm/|Ids|\n"); if (here->HSMHV2_ids == 0.0) printf("I can't show gm/Ids - log10(Ids), because Ids = 0.\n"); else printf("%e %e\n", log10(here->HSMHV2_ids), here->HSMHV2_gm/here->HSMHV2_ids); break; case 5: if (isFirst) printf("Vds gds\n"); printf("%e %e\n", model->HSMHV2_type*vds, here->HSMHV2_gds); break; case 6: if (isFirst) printf("Vgs gm\n"); printf("%e %e\n", model->HSMHV2_type*vgs, here->HSMHV2_gm); break; case 7: if (isFirst) printf("Vbs gbs\n"); printf("%e %e\n", model->HSMHV2_type*vbs, here->HSMHV2_gmbs); break; case 8: if (isFirst) printf("Vgs Cgg\n"); printf("%e %e\n", model->HSMHV2_type*vgs, here->HSMHV2_cggb); break; case 9: if (isFirst) printf("Vgs Cgs\n"); printf("%e %e\n", model->HSMHV2_type*vgs, here->HSMHV2_cgsb); break; case 10: if (isFirst) printf("Vgs Cgd\n"); printf("%e %e\n", model->HSMHV2_type*vgs, here->HSMHV2_cgdb); break; case 11: if (isFirst) printf("Vgs Cgb\n"); printf("%e %e\n", model->HSMHV2_type*vgs, -(here->HSMHV2_cggb+here->HSMHV2_cgsb+here->HSMHV2_cgdb)); break; case 12: if (isFirst) printf("Vds Csg\n"); printf("%e %e\n", model->HSMHV2_type*vds, -(here->HSMHV2_cggb+here->HSMHV2_cbgb+here->HSMHV2_cdgb)); break; case 13: if (isFirst) printf("Vds Cdg\n"); printf("%e %e\n", model->HSMHV2_type*vds, here->HSMHV2_cdgb); break; case 14: if (isFirst) printf("Vds Cbg\n"); printf("%e %e\n", model->HSMHV2_type*vds, here->HSMHV2_cbgb); break; case 15: if (isFirst) printf("Vds Cgg\n"); printf("%e %e\n", model->HSMHV2_type*vds, here->HSMHV2_cggb); break; case 16: if (isFirst) printf("Vds Cgs\n"); printf("%e %e\n", model->HSMHV2_type*vds, here->HSMHV2_cgsb); break; case 17: if (isFirst) printf("Vds Cgd\n"); printf("%e %e\n", model->HSMHV2_type*vds, here->HSMHV2_cgdb); break; case 18: if (isFirst) printf("Vds Cgb\n"); printf("%e %e\n", model->HSMHV2_type*vds, -(here->HSMHV2_cggb+here->HSMHV2_cgsb+here->HSMHV2_cgdb)); break; case 19: if (isFirst) printf("Vgs Csg\n"); printf("%e %e\n", model->HSMHV2_type*vgs, -(here->HSMHV2_cggb+here->HSMHV2_cbgb+here->HSMHV2_cdgb)); break; case 20: if (isFirst) printf("Vgs Cdg\n"); printf("%e %e\n", model->HSMHV2_type*vgs, here->HSMHV2_cdgb); break; case 21: if (isFirst) printf("Vgs Cbg\n"); printf("%e %e\n", model->HSMHV2_type*vgs, here->HSMHV2_cbgb); break; case 22: if (isFirst) printf("Vgb Cgb\n"); printf("%e %e\n", model->HSMHV2_type*vgb, -(here->HSMHV2_cggb+here->HSMHV2_cgsb+here->HSMHV2_cgdb)); break; case 50: if (isFirst) printf("Vgs Vds Vbs Vgb Ids log10(|Ids|) gm/|Ids| gm gds gbs Cgg Cgs Cgb Cgd Csg Cbg Cdg\n"); printf("%e %e %e %e %e %e %e %e %e %e %e %e %e %e %e %e %e\n", model->HSMHV2_type*vgs, model->HSMHV2_type*vds, model->HSMHV2_type*vbs, model->HSMHV2_type*vgb, here->HSMHV2_mode*here->HSMHV2_ids, log10(here->HSMHV2_ids), here->HSMHV2_gm/here->HSMHV2_ids, here->HSMHV2_gm, here->HSMHV2_gds, here->HSMHV2_gmbs, here->HSMHV2_cggb, here->HSMHV2_cgsb, -(here->HSMHV2_cggb+here->HSMHV2_cgsb+here->HSMHV2_cgdb), here->HSMHV2_cgdb, -(here->HSMHV2_cggb+here->HSMHV2_cbgb+here->HSMHV2_cdgb), here->HSMHV2_cbgb, here->HSMHV2_cdgb); break; default: /* printf("There is no physical value corrsponding to %d\n", flag); */ break; } } int HSMHV2load( GENmodel *inModel, CKTcircuit *ckt) /* actually load the current value into the * sparse matrix previously provided */ { HSMHV2model *model = (HSMHV2model*)inModel; HSMHV2instance *here; HSMHV2binningParam *pParam; HSMHV2modelMKSParam *modelMKS ; HSMHV2hereMKSParam *hereMKS ; /* node voltages */ #define XDIM 14 double x[XDIM] ; /* branch voltages */ double vbd=0.0, vbs=0.0, vds=0.0, vgb=0.0, vgd=0.0, vgdo=0.0, vgs=0.0 ; double vdbs=0.0, vsbs=0.0, vdbd=0.0 ; double vges=0.0, vged=0.0, vgedo=0.0 ; double vbs_jct=0.0, vbd_jct=0.0; double deltemp = 0.0 , deltemp_old = 0.0 ; double vggp=0, vddp=0, vssp=0, vbpb=0, vbpsb=0, vbpdb=0 ; double vdse=0.0, vgse=0.0, vbse=0.0 ; double vsubs=0.0 ; /* substrate bias */ double ivds=0.0, ivgs=0.0, ivbs=0.0 ; double ivgse=0.0, ivdse=0.0, ivbse=0.0 ; /* delta of branch voltages */ double delvbs=0.0, delvds=0.0, delvgs=0.0, delvsbs=0.0, delvdbd=0.0, deldeltemp = 0.0 ; double delvdse=0.0, delvgse=0.0, delvbse=0.0, delvddp=0.0, delvssp=0.0, delvggp=0.0, delvbpb=0.0, delvbpdb=0.0, delvbpsb =0.0 ; double delvsubs=0.0; /* substrate bias change */ /* branch currents */ double Ids=0.0, gds=0.0, gm=0.0, gmbs=0.0, gmT=0.0, gds_ext=0.0, gm_ext=0.0, gmbs_ext=0.0 ; double Igd=0.0, dIgd_dVd=0.0, dIgd_dVg=0.0, dIgd_dVb=0.0, dIgd_dVs=0.0, dIgd_dT=0.0 ; double Igs=0.0, dIgs_dVd=0.0, dIgs_dVg=0.0, dIgs_dVb=0.0, dIgs_dVs=0.0, dIgs_dT=0.0 ; double Igb=0.0, dIgb_dVd=0.0, dIgb_dVg=0.0, dIgb_dVb=0.0, dIgb_dVs=0.0, dIgb_dT=0.0 ; double Isub=0.0, dIsub_dVds=0.0, dIsub_dVgs=0.0, dIsub_dVbs=0.0, dIsub_dT=0.0 ; double Isubs=0.0, dIsubs_dVds=0.0, dIsubs_dVgs=0.0, dIsubs_dVbs=0.0, dIsubs_dT=0.0 ; double IsubLD=0.0, dIsubLD_dVds=0.0, dIsubLD_dVgs=0.0, dIsubLD_dVbs=0.0, dIsubLD_dT=0.0 ; double IsubLDs=0.0, dIsubLDs_dVds=0.0, dIsubLDs_dVgs=0.0, dIsubLDs_dVbs=0.0, dIsubLDs_dT=0.0 ; double dIsubLD_dVddp=0.0, dIsubLDs_dVddp=0.0 ; double IdsIBPC=0.0, dIdsIBPC_dVds=0.0, dIdsIBPC_dVgs=0.0, dIdsIBPC_dVbs=0.0, dIdsIBPC_dT=0.0 ; double IdsIBPCs=0.0, dIdsIBPCs_dVds=0.0, dIdsIBPCs_dVgs=0.0, dIdsIBPCs_dVbs=0.0, dIdsIBPCs_dT=0.0 ; double dIdsIBPC_dVddp=0.0, dIdsIBPCs_dVddp=0.0 ; double Igidl=0.0, dIgidl_dVds=0.0, dIgidl_dVgs=0.0, dIgidl_dVbs=0.0, dIgidl_dT=0.0 ; double Igisl=0.0, dIgisl_dVds=0.0, dIgisl_dVgs=0.0, dIgisl_dVbs=0.0, dIgisl_dT=0.0 ; double Ibd=0.0, Gbd=0.0, Gbdt=0.0 ; double Ibs=0.0, Gbs=0.0, Gbst=0.0 ; double Iddp=0.0, dIddp_dVddp=0.0, dIddp_dVdse=0.0, dIddp_dVgse=0.0, dIddp_dVbse=0.0, dIddp_dVsubs=0.0, dIddp_dT =0.0 , dIddp_dVds =0.0, dIddp_dVgs =0.0, dIddp_dVbs =0.0 ; double Issp=0.0, dIssp_dVssp=0.0, dIssp_dVdse=0.0, dIssp_dVgse=0.0, dIssp_dVbse=0.0, dIssp_dVsubs=0.0, dIssp_dT =0.0 ; double Iggp=0.0, dIggp_dVggp =0.0 ; double Ibpb=0.0, dIbpb_dVbpb =0.0 ; double Ibpdb=0.0, dIbpdb_dVbpdb =0.0 ; double Ibpsb=0.0, dIbpsb_dVbpsb =0.0 ; double Ith=0.0, dIth_dT =0.0 ; /* displacement currents */ double cq_d=0.0, cq_dP=0.0, cq_g=0.0, cq_gP=0.0, cq_s=0.0, cq_sP=0.0, cq_bP=0.0, cq_b=0.0, cq_db=0.0, cq_sb=0.0, cq_t=0.0 ; double cq_dE=0.0, cq_gE=0.0, cq_sE=0.0, cq_bE=0.0 ; /* node currents */ double cur_d=0.0, cur_dP=0.0, cur_g=0.0, cur_gP=0.0, cur_s=0.0, cur_sP=0.0, cur_bP=0.0, cur_b=0.0, cur_db=0.0, cur_sb=0.0, cur_t=0.0 ; double i_d=0.0, i_dP=0.0, i_g=0.0, i_gP=0.0, i_s=0.0, i_sP=0.0, i_bP=0.0, i_b=0.0, i_db=0.0, i_sb=0.0, i_t=0.0 ; /* resistances and conductances */ double Rd=0.0, dRd_dVdse=0.0, dRd_dVgse=0.0, dRd_dVbse=0.0, dRd_dVsubs=0.0, dRd_dT=0.0, dRd_dVddp=0.0, dRd_dVds=0.0, dRd_dVgs=0.0, dRd_dVbs=0.0 ; double Rs=0.0, dRs_dVdse=0.0, dRs_dVgse=0.0, dRs_dVbse=0.0, dRs_dVsubs=0.0, dRs_dT=0.0 ; double GD=0.0, GD_dVds=0.0, GD_dVgs=0.0, GD_dVbs=0.0, GD_dVsubs=0.0, GD_dT=0.0, GD_dVddp=0.0, GD_dVdse=0.0, GD_dVgse=0.0, GD_dVbse=0.0 ; double GS=0.0, GS_dVds=0.0, GS_dVgs=0.0, GS_dVbs=0.0, GS_dVsubs=0.0, GS_dT=0.0 ; double Gth=0.0 ; double GG=0.0, GRBPD=0.0, GRBPS=0.0, GRBPB=0.0; /* charges */ double Qd=0.0, dQd_dVds=0.0, dQd_dVgs=0.0, dQd_dVbs=0.0, dQd_dT=0.0 ; double Qg=0.0, dQg_dVds=0.0, dQg_dVgs=0.0, dQg_dVbs=0.0, dQg_dT=0.0 ; double Qs=0.0, dQs_dVds=0.0, dQs_dVgs=0.0, dQs_dVbs=0.0, dQs_dT=0.0 ; double Qb=0.0, dQb_dVds=0.0, dQb_dVgs=0.0, dQb_dVbs=0.0, dQb_dT=0.0 ; double Qbd=0.0, Cbd=0.0, Cbdt=0.0, Qbs=0.0, Cbs=0.0, Cbst=0.0 ; double Qth=0.0, Cth =0.0 ; double Qfd=0.0, dQfd_dVdse=0.0, dQfd_dVgse=0.0, dQfd_dVbse=0.0, dQfd_dT=0.0 ; double Qfs=0.0, dQfs_dVdse=0.0, dQfs_dVgse=0.0, dQfs_dVbse=0.0, dQfs_dT=0.0 ; double Qdext=0.0, dQdext_dVdse=0.0, dQdext_dVgse=0.0, dQdext_dVbse=0.0, dQdext_dT=0.0 ; double Qgext=0.0, dQgext_dVdse=0.0, dQgext_dVgse=0.0, dQgext_dVbse=0.0, dQgext_dT=0.0 ; double Qsext=0.0, dQsext_dVdse=0.0, dQsext_dVgse=0.0, dQsext_dVbse=0.0, dQsext_dT=0.0 ; double Qbext=0.0, dQbext_dVdse=0.0, dQbext_dVgse=0.0, dQbext_dVbse=0.0, dQbext_dT=0.0 ; /* 5th substrate node */ int flg_subNode = 0 ; /* self heating */ double Veffpower=0.0, dVeffpower_dVds=0.0, dVeffpower_dVdse =0.0 ; double P=0.0, dP_dVds=0.0, dP_dVgs=0.0, dP_dVbs=0.0, dP_dT =0.0, dP_dVdse=0.0, dP_dVgse=0.0, dP_dVbse =0.0 ; double T0 , T1 , T2 ; #define SHE_MAX_dlt 0.1 #define C_RTH_MIN 1.0e-4 double TMF1 , TMF2 ; /*---------------------------------------------------* * smoothUpper: ceiling. * y = xmax - 0.5 ( arg + sqrt( arg^2 + 4 xmax delta ) ) * arg = xmax - x - delta *-----------------*/ #define Fn_SU( y , x , xmax , delta , dx ) { \ TMF1 = ( xmax ) - ( x ) - ( delta ) ; \ TMF2 = 4.0 * ( xmax ) * ( delta) ; \ TMF2 = TMF2 > 0.0 ? TMF2 : -( TMF2 ) ; \ TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \ dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \ y = ( xmax ) - 0.5 * ( TMF1 + TMF2 ) ; \ } /* NQS related variables */ int flg_nqs =0 ; double Qi_nqs=0.0, Qb_nqs=0.0, delQi_nqs=0.0, delQb_nqs=0.0, i_qi=0.0, i_qb=0.0, cq_qi=0.0, cq_qb=0.0, cur_qi=0.0, cur_qb =0.0 ; double Iqi_nqs=0.0, dIqi_nqs_dVds=0.0, dIqi_nqs_dVgs=0.0, dIqi_nqs_dVbs=0.0, dIqi_nqs_dT=0.0, dIqi_nqs_dQi_nqs =0.0 ; double Iqb_nqs=0.0, dIqb_nqs_dVds=0.0, dIqb_nqs_dVgs=0.0, dIqb_nqs_dVbs=0.0, dIqb_nqs_dT=0.0, dIqb_nqs_dQb_nqs =0.0 ; double Qd_nqs=0.0, dQd_nqs_dVds=0.0, dQd_nqs_dVgs=0.0, dQd_nqs_dVbs=0.0, dQd_nqs_dT=0.0, dQd_nqs_dQi_nqs =0.0 ; double Qs_nqs=0.0, dQs_nqs_dVds=0.0, dQs_nqs_dVgs=0.0, dQs_nqs_dVbs=0.0, dQs_nqs_dT=0.0, dQs_nqs_dQi_nqs =0.0 ; double Qg_nqs=0.0, dQg_nqs_dQi_nqs=0.0, dQg_nqs_dQb_nqs =0.0 ; double tau=0.0, dtau_dVds=0.0, dtau_dVgs=0.0, dtau_dVbs=0.0, dtau_dT =0.0 ; double taub=0.0, dtaub_dVds=0.0, dtaub_dVgs=0.0, dtaub_dVbs=0.0, dtaub_dT =0.0 ; double Qdrat=0.0, dQdrat_dVds=0.0, dQdrat_dVgs=0.0, dQdrat_dVbs=0.0, dQdrat_dT =0.0 ; double Qi=0.0, dQi_dVds=0.0, dQi_dVgs=0.0, dQi_dVbs=0.0, dQi_dT =0.0 ; double Qbulk=0.0, dQbulk_dVds=0.0, dQbulk_dVgs=0.0, dQbulk_dVbs=0.0, dQbulk_dT =0.0 ; /* output related variables */ double dQi_nqs_dVds=0.0, dQi_nqs_dVgs=0.0, dQi_nqs_dVbs=0.0, dQb_nqs_dVds=0.0, dQb_nqs_dVgs=0.0, dQb_nqs_dVbs=0.0 ; double cgdb_nqs=0.0, cggb_nqs=0.0, cgsb_nqs=0.0, cbdb_nqs=0.0, cbgb_nqs=0.0, cbsb_nqs=0.0, cddb_nqs=0.0, cdgb_nqs=0.0, cdsb_nqs=0.0 ; double cgdb=0.0, cggb=0.0, cgsb=0.0, cbdb=0.0, cbgb=0.0, cbsb=0.0, cddb=0.0, cdgb=0.0, cdsb=0.0 ; /* rows of conductance and capacitance matrix stamp */ double ydc_d[XDIM], ydc_dP[XDIM], ydc_g[XDIM], ydc_gP[XDIM], ydc_s[XDIM], ydc_sP[XDIM] ; double ydc_bP[XDIM], ydc_b[XDIM], ydc_db[XDIM], ydc_sb[XDIM], ydc_t[XDIM], ydc_qi[XDIM], ydc_qb[XDIM] ; double ydyn_d[XDIM], ydyn_dP[XDIM], ydyn_g[XDIM], ydyn_gP[XDIM], ydyn_s[XDIM], ydyn_sP[XDIM] ; double ydyn_bP[XDIM], ydyn_b[XDIM], ydyn_db[XDIM], ydyn_sb[XDIM], ydyn_t[XDIM], ydyn_qi[XDIM], ydyn_qb[XDIM] ; /* limiter, bypass, and convergence */ int ByPass=0, Check=0, Check1=0, Check2=0, Check3=0 ; double von=0.0, limval =0.0 ; double i_dP_hat=0.0, i_gP_hat=0.0, i_sP_hat=0.0, i_db_hat=0.0, i_sb_hat =0.0 ; #define LIM_TOL 1.0e0 #define LIM_TOL2 1.0e0 /* predictor and numerical integration stuff */ double ag0=0.0, xfact=0.0 ; double ceq=0.0, geq=0.0 ; int ChargeComputationNeeded = ((ckt->CKTmode & (MODEAC | MODETRAN | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) ? 1 : 0; int showPhysVal=0 ; int isConv=0 ; double vds_pre=0.0 ; int i=0, noncon_old=0 ; #define dNode 0 #define dNodePrime 1 #define gNode 2 #define gNodePrime 3 #define sNode 4 #define sNodePrime 5 #define bNodePrime 6 #define bNode 7 #define dbNode 8 #define sbNode 9 #define subNode 10 #define tempNode 11 #define qiNode 12 #define qbNode 13 #define lastNode 13 /* must be the last node! */ #define SPICE_rhs 1 /* set to 0 if rhs to be loaded for standard Newton */ /* set to 1 if rhs_eq to be loaded, e.g. for SPICE */ if (SPICE_rhs) { for (i=0; imodelMKS ; for (here = HSMHV2instances(model); here != NULL ; here = HSMHV2nextInstance(here)) { hereMKS = &here->hereMKS ; pParam = &here->pParam ; showPhysVal = 0; Check=1; ByPass = 0; vsubs = 0.0 ; /* substrate bias */ deltemp = 0.0 ; noncon_old = ckt->CKTnoncon; flg_nqs = model->HSMHV2_conqs ; flg_subNode = here->HSMHV2subNode ; /* if flg_subNode > 0, external(/internal) substrate node exists */ #ifdef DEBUG_HISIMHVLD_VX printf("mode = %x\n", ckt->CKTmode); printf("Vd Vg Vs Vb %e %e %e %e\n", *(ckt->CKTrhsOld+here->HSMHV2dNodePrime), *(ckt->CKTrhsOld+here->HSMHV2gNodePrime), *(ckt->CKTrhsOld+here->HSMHV2sNodePrime), *(ckt->CKTrhsOld+here->HSMHV2bNodePrime)); #endif if ( ckt->CKTmode & MODEINITSMSIG ) { vbs = *(ckt->CKTstate0 + here->HSMHV2vbs); vgs = *(ckt->CKTstate0 + here->HSMHV2vgs); vds = *(ckt->CKTstate0 + here->HSMHV2vds); vges = *(ckt->CKTstate0 + here->HSMHV2vges); vdbd = *(ckt->CKTstate0 + here->HSMHV2vdbd); vsbs = *(ckt->CKTstate0 + here->HSMHV2vsbs); if (flg_subNode > 0) vsubs = *(ckt->CKTstate0 + here->HSMHV2vsubs); if( here->HSMHV2_coselfheat > 0 ){ deltemp = *(ckt->CKTstate0 + here->HSMHV2deltemp); } vdse = *(ckt->CKTstate0 + here->HSMHV2vdse) ; vgse = *(ckt->CKTstate0 + here->HSMHV2vgse) ; vbse = *(ckt->CKTstate0 + here->HSMHV2vbse) ; if ( flg_nqs ) { Qi_nqs = *(ckt->CKTstate0 + here->HSMHV2qi_nqs) ; Qb_nqs = *(ckt->CKTstate0 + here->HSMHV2qb_nqs) ; } else { Qi_nqs = 0.0 ; Qb_nqs = 0.0 ; } /* printf("HSMHV2_load: (from state0) vds.. = %e %e %e %e %e %e\n", vds,vgs,vbs,vdse,vgse,vbse); */ } else if ( ckt->CKTmode & MODEINITTRAN ) { /* #include "printf_ld_converged.inc" */ vbs = *(ckt->CKTstate1 + here->HSMHV2vbs); vgs = *(ckt->CKTstate1 + here->HSMHV2vgs); vds = *(ckt->CKTstate1 + here->HSMHV2vds); vges = *(ckt->CKTstate1 + here->HSMHV2vges); vdbd = *(ckt->CKTstate1 + here->HSMHV2vdbd); vsbs = *(ckt->CKTstate1 + here->HSMHV2vsbs); if (flg_subNode > 0) vsubs = *(ckt->CKTstate1 + here->HSMHV2vsubs); if( here->HSMHV2_coselfheat > 0 ){ deltemp = *(ckt->CKTstate1 + here->HSMHV2deltemp); } vdse = *(ckt->CKTstate1 + here->HSMHV2vdse) ; vgse = *(ckt->CKTstate1 + here->HSMHV2vgse) ; vbse = *(ckt->CKTstate1 + here->HSMHV2vbse) ; if ( flg_nqs ) { Qi_nqs = *(ckt->CKTstate1 + here->HSMHV2qi_nqs) ; Qb_nqs = *(ckt->CKTstate1 + here->HSMHV2qb_nqs) ; } else { Qi_nqs = 0.0 ; Qb_nqs = 0.0 ; } } else if ( (ckt->CKTmode & MODEINITJCT) && !here->HSMHV2_off ) { vds = model->HSMHV2_type * here->HSMHV2_icVDS; vgs = vges = model->HSMHV2_type * here->HSMHV2_icVGS; vbs = vsbs = model->HSMHV2_type * here->HSMHV2_icVBS; vdbd = 0.0 ; if ( (vds == 0.0) && (vgs == 0.0) && (vbs == 0.0) && ( (ckt->CKTmode & (MODETRAN|MODEAC|MODEDCOP|MODEDCTRANCURVE)) || !(ckt->CKTmode & MODEUIC) ) ) { /* set biases for starting analysis */ vbs = vdbd = vsbs = 0.0; vgs = vges = 0.1; vds = 0.1; } if (flg_subNode > 0) vsubs = 0.0; if( here->HSMHV2_coselfheat > 0 ) deltemp=0.0; vdse = vds ; vgse = vgs ; Qi_nqs = Qb_nqs = 0.0 ; } else if ( ( ckt->CKTmode & (MODEINITJCT | MODEINITFIX) ) && here->HSMHV2_off ) { vbs = vgs = vds = 0.0; vges = 0.0; vdbd = vsbs = 0.0; if (flg_subNode > 0) vsubs = 0.0; if( here->HSMHV2_coselfheat > 0 ) deltemp=0.0; vdse = vds ; vgse = vgs ; Qi_nqs = Qb_nqs = 0.0 ; } else { #ifndef PREDICTOR /* BSIM3 style */ if (ckt->CKTmode & MODEINITPRED) { /* #include "printf_ld_converged.inc" */ /* if (here->HSMHV2_mode > 0) { gds_ext = here->HSMHV2_dIds_dVdse ; } else { gds_ext = + (here->HSMHV2_dIds_dVdse + here->HSMHV2_dIds_dVgse + here->HSMHV2_dIds_dVbse) ; } printf("zzz %e %e\n",ckt->CKTtime,gds_ext) ; */ xfact = ckt->CKTdelta / ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->HSMHV2vbs) = *(ckt->CKTstate1 + here->HSMHV2vbs); vbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHV2vbs)) -(xfact * (*(ckt->CKTstate2 + here->HSMHV2vbs))); *(ckt->CKTstate0 + here->HSMHV2vgs) = *(ckt->CKTstate1 + here->HSMHV2vgs); vgs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHV2vgs)) -(xfact * (*(ckt->CKTstate2 + here->HSMHV2vgs))); *(ckt->CKTstate0 + here->HSMHV2vds) = *(ckt->CKTstate1 + here->HSMHV2vds); vds = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHV2vds)) -(xfact * (*(ckt->CKTstate2 + here->HSMHV2vds))); *(ckt->CKTstate0 + here->HSMHV2vbd) = *(ckt->CKTstate0 + here->HSMHV2vbs)- *(ckt->CKTstate0 + here->HSMHV2vds); *(ckt->CKTstate0 + here->HSMHV2vges) = *(ckt->CKTstate1 + here->HSMHV2vges); vges = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHV2vges)) -(xfact * (*(ckt->CKTstate2 + here->HSMHV2vges))); *(ckt->CKTstate0 + here->HSMHV2vdbd) = *(ckt->CKTstate1 + here->HSMHV2vdbd); vdbd = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHV2vdbd)) - (xfact * (*(ckt->CKTstate2 + here->HSMHV2vdbd))); *(ckt->CKTstate0 + here->HSMHV2vdbs) = *(ckt->CKTstate0 + here->HSMHV2vdbd) + *(ckt->CKTstate0 + here->HSMHV2vds); *(ckt->CKTstate0 + here->HSMHV2vsbs) = *(ckt->CKTstate1 + here->HSMHV2vsbs); vsbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHV2vsbs)) - (xfact * (*(ckt->CKTstate2 + here->HSMHV2vsbs))); if (flg_subNode > 0){ vsubs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHV2vsubs)) - ( xfact * (*(ckt->CKTstate2 + here->HSMHV2vsubs))); } if( here->HSMHV2_coselfheat > 0 ){ deltemp = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHV2deltemp)) - ( xfact * (*(ckt->CKTstate2 + here->HSMHV2deltemp))); *(ckt->CKTstate0 + here->HSMHV2deltemp) = *(ckt->CKTstate1 + here->HSMHV2deltemp); } *(ckt->CKTstate0 + here->HSMHV2vdse) = *(ckt->CKTstate1 + here->HSMHV2vdse); vdse = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHV2vdse)) -(xfact * (*(ckt->CKTstate2 + here->HSMHV2vdse))); *(ckt->CKTstate0 + here->HSMHV2vgse) = *(ckt->CKTstate1 + here->HSMHV2vgse); vgse = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHV2vgse)) -(xfact * (*(ckt->CKTstate2 + here->HSMHV2vgse))); *(ckt->CKTstate0 + here->HSMHV2vbse) = *(ckt->CKTstate1 + here->HSMHV2vbse); vbse = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHV2vbse)) -(xfact * (*(ckt->CKTstate2 + here->HSMHV2vbse))); if (flg_nqs) { *(ckt->CKTstate0 + here->HSMHV2qi_nqs) = *(ckt->CKTstate1 + here->HSMHV2qi_nqs); Qi_nqs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHV2qi_nqs)) -(xfact * (*(ckt->CKTstate2 + here->HSMHV2qi_nqs))); *(ckt->CKTstate0 + here->HSMHV2qb_nqs) = *(ckt->CKTstate1 + here->HSMHV2qb_nqs); Qb_nqs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHV2qb_nqs)) -(xfact * (*(ckt->CKTstate2 + here->HSMHV2qb_nqs))); } else { Qi_nqs = Qb_nqs = 0.0 ; } } else { #endif /* PREDICTOR */ /* here->HSMHV2_time = ckt->CKTtime; /\* for debug print *\/ */ /* get biases from CKT */ vbs = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2bNodePrime) - *(ckt->CKTrhsOld+here->HSMHV2sNodePrime)); vgs = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2gNodePrime) - *(ckt->CKTrhsOld+here->HSMHV2sNodePrime)); vds = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2dNodePrime) - *(ckt->CKTrhsOld+here->HSMHV2sNodePrime)); vges = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2gNode) - *(ckt->CKTrhsOld+here->HSMHV2sNodePrime)); vdbd = model->HSMHV2_type * (*(ckt->CKTrhsOld + here->HSMHV2dbNode) - *(ckt->CKTrhsOld + here->HSMHV2dNode)); vsbs = model->HSMHV2_type * (*(ckt->CKTrhsOld + here->HSMHV2sbNode) - *(ckt->CKTrhsOld + here->HSMHV2sNode)); if (flg_subNode > 0){ vsubs = model->HSMHV2_type * (*(ckt->CKTrhsOld + here->HSMHV2subNode) - *(ckt->CKTrhsOld + here->HSMHV2sNode)); } if( here->HSMHV2_coselfheat > 0 ){ deltemp = *(ckt->CKTrhsOld + here->HSMHV2tempNode); } vbse = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2bNodePrime) - *(ckt->CKTrhsOld+here->HSMHV2sNode)); vgse = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2gNodePrime) - *(ckt->CKTrhsOld+here->HSMHV2sNode)); vdse = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2dNode) - *(ckt->CKTrhsOld+here->HSMHV2sNode)); if ( flg_nqs ) { Qi_nqs = *(ckt->CKTrhsOld + here->HSMHV2qiNode); Qb_nqs = *(ckt->CKTrhsOld + here->HSMHV2qbNode); } else { Qi_nqs = Qb_nqs = 0.0 ; } #ifndef PREDICTOR } #endif /* PREDICTOR */ /* printf("HSMHV2_load: (from rhs ) vds.. = %e %e %e %e %e %e\n", vds,vgs,vbs,vdse,vgse,vbse); */ vbd = vbs - vds; vgd = vgs - vds; vged = vges - vds; vdbs = vdbd + vdse; vgdo = *(ckt->CKTstate0 + here->HSMHV2vgs) - *(ckt->CKTstate0 + here->HSMHV2vds); vgedo = *(ckt->CKTstate0 + here->HSMHV2vges) - *(ckt->CKTstate0 + here->HSMHV2vds); vds_pre = vds; #ifndef NOBYPASS /* start of bypass section ... no bypass in case of selfheating */ if ( !(ckt->CKTmode & MODEINITPRED) && ckt->CKTbypass && !here->HSMHV2_coselfheat) { delvds = vds - *(ckt->CKTstate0 + here->HSMHV2vds) ; delvgs = vgs - *(ckt->CKTstate0 + here->HSMHV2vgs) ; delvbs = vbs - *(ckt->CKTstate0 + here->HSMHV2vbs) ; delvdse = vdse - *(ckt->CKTstate0 + here->HSMHV2vdse) ; delvgse = vgse - *(ckt->CKTstate0 + here->HSMHV2vgse) ; delvbse = vbse - *(ckt->CKTstate0 + here->HSMHV2vbse) ; delvdbd = vdbd - *(ckt->CKTstate0 + here->HSMHV2vdbd) ; delvsbs = vsbs - *(ckt->CKTstate0 + here->HSMHV2vsbs) ; if (flg_subNode > 0) delvsubs = vsubs - *(ckt->CKTstate0 + here->HSMHV2vsubs) ; /* substrate bias change */ deldeltemp = deltemp - *(ckt->CKTstate0 + here->HSMHV2deltemp) ; if (flg_nqs) { delQi_nqs = Qi_nqs - *(ckt->CKTstate0 + here->HSMHV2qi_nqs) ; delQb_nqs = Qb_nqs - *(ckt->CKTstate0 + here->HSMHV2qb_nqs) ; } else { delQi_nqs = delQb_nqs = 0.0 ; } /* now let's see if we can bypass */ /* ... first perform the easy cheap bypass checks ... */ /* 1 2 3 3 3 4 4 4 5 543 2 1 */ if ( ( fabs(delvds ) < ckt->CKTreltol * MAX(fabs(vds ),fabs(*(ckt->CKTstate0 + here->HSMHV2vds ))) + ckt->CKTvoltTol ) && ( fabs(delvgs ) < ckt->CKTreltol * MAX(fabs(vgs ),fabs(*(ckt->CKTstate0 + here->HSMHV2vgs ))) + ckt->CKTvoltTol ) && ( fabs(delvbs ) < ckt->CKTreltol * MAX(fabs(vbs ),fabs(*(ckt->CKTstate0 + here->HSMHV2vbs ))) + ckt->CKTvoltTol ) && ( fabs(delvdse) < ckt->CKTreltol * MAX(fabs(vdse),fabs(*(ckt->CKTstate0 + here->HSMHV2vdse))) + ckt->CKTvoltTol ) && ( fabs(delvgse) < ckt->CKTreltol * MAX(fabs(vgse),fabs(*(ckt->CKTstate0 + here->HSMHV2vgse))) + ckt->CKTvoltTol ) && ( fabs(delvbse) < ckt->CKTreltol * MAX(fabs(vbse),fabs(*(ckt->CKTstate0 + here->HSMHV2vbse))) + ckt->CKTvoltTol ) && ( fabs(delvdbd) < ckt->CKTreltol * MAX(fabs(vdbd),fabs(*(ckt->CKTstate0 + here->HSMHV2vdbd))) + ckt->CKTvoltTol ) && ( fabs(delvsbs) < ckt->CKTreltol * MAX(fabs(vsbs),fabs(*(ckt->CKTstate0 + here->HSMHV2vsbs))) + ckt->CKTvoltTol ) && ( fabs(delvsubs) < ckt->CKTreltol * MAX(fabs(vsubs),fabs(*(ckt->CKTstate0 + here->HSMHV2vsubs))) + ckt->CKTvoltTol ) && ( fabs(delQi_nqs) < ckt->CKTreltol * fabs(Qi_nqs) + ckt->CKTchgtol*ckt->CKTabstol + 1.0e-20 ) && ( fabs(delQb_nqs) < ckt->CKTreltol * fabs(Qb_nqs) + ckt->CKTchgtol*ckt->CKTabstol + 1.0e-20 ) ) /* 1.0e-20: heuristic value, must be small enough */ /* to ensure that bypass does not destroy convergence */ { /* ... the first bypass checks are passed -> now do the more expensive checks ...*/ if ( here->HSMHV2_mode > 0 ) { /* forward mode */ Ids = here->HSMHV2_ids ; gds = here->HSMHV2_dIds_dVdsi ; gm = here->HSMHV2_dIds_dVgsi ; gmbs = here->HSMHV2_dIds_dVbsi ; gmT = 0.0 ; gmbs_ext = here->HSMHV2_dIds_dVbse; gds_ext = here->HSMHV2_dIds_dVdse ; gm_ext = here->HSMHV2_dIds_dVgse; Isub = here->HSMHV2_isub ; dIsub_dVds = here->HSMHV2_dIsub_dVdsi ; dIsub_dVgs = here->HSMHV2_dIsub_dVgsi ; dIsub_dVbs = here->HSMHV2_dIsub_dVbsi ; dIsub_dT = 0.0 ; Isubs = 0.0 ; dIsubs_dVds = 0.0 ; dIsubs_dVgs = 0.0 ; dIsubs_dVbs = 0.0 ; dIsubs_dT = 0.0 ; IsubLD = here->HSMHV2_isubld ; dIsubLD_dVds = here->HSMHV2_dIsubLD_dVdsi ; dIsubLD_dVgs = here->HSMHV2_dIsubLD_dVgsi ; dIsubLD_dVbs = here->HSMHV2_dIsubLD_dVbsi ; dIsubLD_dT = 0.0 ; dIsubLD_dVddp = here->HSMHV2_dIsubLD_dVddp ; IsubLDs = 0.0 ; dIsubLDs_dVds = 0.0 ; dIsubLDs_dVgs = 0.0 ; dIsubLDs_dVbs = 0.0 ; dIsubLDs_dT = 0.0 ; dIsubLDs_dVddp = 0.0 ; IdsIBPC = here->HSMHV2_idsibpc ; dIdsIBPC_dVds = here->HSMHV2_dIdsIBPC_dVdsi ; dIdsIBPC_dVgs = here->HSMHV2_dIdsIBPC_dVgsi ; dIdsIBPC_dVbs = here->HSMHV2_dIdsIBPC_dVbsi ; dIdsIBPC_dT = 0.0 ; dIdsIBPC_dVddp = here->HSMHV2_dIdsIBPC_dVddp ; IdsIBPCs = 0.0 ; dIdsIBPCs_dVds = 0.0 ; dIdsIBPCs_dVgs = 0.0 ; dIdsIBPCs_dVbs = 0.0 ; dIdsIBPCs_dT = 0.0 ; dIdsIBPCs_dVddp = 0.0 ; Igidl = here->HSMHV2_igidl ; dIgidl_dVds = here->HSMHV2_dIgidl_dVdsi ; dIgidl_dVgs = here->HSMHV2_dIgidl_dVgsi ; dIgidl_dVbs = here->HSMHV2_dIgidl_dVbsi ; dIgidl_dT = 0.0 ; Igisl = here->HSMHV2_igisl ; dIgisl_dVds = here->HSMHV2_dIgisl_dVdsi ; dIgisl_dVgs = here->HSMHV2_dIgisl_dVgsi ; dIgisl_dVbs = here->HSMHV2_dIgisl_dVbsi ; dIgisl_dT = 0.0 ; Igd = here->HSMHV2_igd ; dIgd_dVd = here->HSMHV2_dIgd_dVdsi ; dIgd_dVg = here->HSMHV2_dIgd_dVgsi ; dIgd_dVb = here->HSMHV2_dIgd_dVbsi ; dIgd_dT = 0.0 ; Igs = here->HSMHV2_igs ; dIgs_dVd = here->HSMHV2_dIgs_dVdsi ; dIgs_dVg = here->HSMHV2_dIgs_dVgsi ; dIgs_dVb = here->HSMHV2_dIgs_dVbsi ; dIgs_dT = 0.0 ; Igb = here->HSMHV2_igb ; dIgb_dVd = here->HSMHV2_dIgb_dVdsi ; dIgb_dVg = here->HSMHV2_dIgb_dVgsi ; dIgb_dVb = here->HSMHV2_dIgb_dVbsi ; dIgb_dT = 0.0 ; Ibd = here->HSMHV2_ibd ; Gbd = here->HSMHV2_gbd ; Gbdt = 0.0 ; Ibs = here->HSMHV2_ibs ; Gbs = here->HSMHV2_gbs ; Gbst = 0.0 ; } else { /* reverse mode */ Ids = - here->HSMHV2_ids ; gds = + (here->HSMHV2_dIds_dVdsi + here->HSMHV2_dIds_dVgsi + here->HSMHV2_dIds_dVbsi) ; gm = - here->HSMHV2_dIds_dVgsi ; gmbs = - here->HSMHV2_dIds_dVbsi ; gmT = 0.0 ; gds_ext = + (here->HSMHV2_dIds_dVdse + here->HSMHV2_dIds_dVgse + here->HSMHV2_dIds_dVbse) ; gm_ext = - here->HSMHV2_dIds_dVgse; gmbs_ext = - here->HSMHV2_dIds_dVbse; Isub = 0.0 ; dIsub_dVds = 0.0 ; dIsub_dVgs = 0.0 ; dIsub_dVbs = 0.0 ; dIsub_dT = 0.0 ; Isubs = here->HSMHV2_isub ; dIsubs_dVds = - (here->HSMHV2_dIsub_dVdsi + here->HSMHV2_dIsub_dVgsi + here->HSMHV2_dIsub_dVbsi) ; dIsubs_dVgs = here->HSMHV2_dIsub_dVgsi ; dIsubs_dVbs = here->HSMHV2_dIsub_dVbsi ; dIsubs_dT = 0.0 ; IsubLD = 0.0 ; dIsubLD_dVds = 0.0 ; dIsubLD_dVgs = 0.0 ; dIsubLD_dVbs = 0.0 ; dIsubLD_dT = 0.0 ; dIsubLD_dVddp = 0.0 ; IsubLDs = here->HSMHV2_isubld ; dIsubLDs_dVds = - (here->HSMHV2_dIsubLD_dVdsi + here->HSMHV2_dIsubLD_dVgsi + here->HSMHV2_dIsubLD_dVbsi) ; dIsubLDs_dVgs = here->HSMHV2_dIsubLD_dVgsi ; dIsubLDs_dVbs = here->HSMHV2_dIsubLD_dVbsi ; dIsubLDs_dT = 0.0 ; dIsubLDs_dVddp = - here->HSMHV2_dIsubLD_dVddp ; IdsIBPC = 0.0 ; dIdsIBPC_dVds = 0.0 ; dIdsIBPC_dVgs = 0.0 ; dIdsIBPC_dVbs = 0.0 ; dIdsIBPC_dT = 0.0 ; dIdsIBPC_dVddp = 0.0 ; IdsIBPCs = here->HSMHV2_idsibpc ; dIdsIBPCs_dVds = - (here->HSMHV2_dIdsIBPC_dVdsi + here->HSMHV2_dIdsIBPC_dVgsi + here->HSMHV2_dIdsIBPC_dVbsi) ; dIdsIBPCs_dVgs = here->HSMHV2_dIdsIBPC_dVgsi ; dIdsIBPCs_dVbs = here->HSMHV2_dIdsIBPC_dVbsi ; dIdsIBPCs_dT = 0.0 ; dIdsIBPCs_dVddp = - here->HSMHV2_dIdsIBPC_dVddp ; Igidl = here->HSMHV2_igisl ; dIgidl_dVds = - (here->HSMHV2_dIgisl_dVdsi + here->HSMHV2_dIgisl_dVgsi + here->HSMHV2_dIgisl_dVbsi) ; dIgidl_dVgs = here->HSMHV2_dIgisl_dVgsi ; dIgidl_dVbs = here->HSMHV2_dIgisl_dVbsi ; dIgidl_dT = 0.0 ; Igisl = here->HSMHV2_igidl ; dIgisl_dVds = - (here->HSMHV2_dIgidl_dVdsi + here->HSMHV2_dIgidl_dVgsi + here->HSMHV2_dIgidl_dVbsi) ; dIgisl_dVgs = here->HSMHV2_dIgidl_dVgsi ; dIgisl_dVbs = here->HSMHV2_dIgidl_dVbsi ; dIgisl_dT = 0.0 ; Igd = here->HSMHV2_igd ; dIgd_dVd = - (here->HSMHV2_dIgs_dVdsi + here->HSMHV2_dIgs_dVgsi + here->HSMHV2_dIgs_dVbsi) ; dIgd_dVg = here->HSMHV2_dIgs_dVgsi ; dIgd_dVb = here->HSMHV2_dIgs_dVbsi ; dIgd_dT = 0.0 ; Igs = here->HSMHV2_igs ; dIgs_dVd = - (here->HSMHV2_dIgd_dVdsi + here->HSMHV2_dIgd_dVgsi + here->HSMHV2_dIgd_dVbsi) ; dIgs_dVg = here->HSMHV2_dIgd_dVgsi ; dIgs_dVb = here->HSMHV2_dIgd_dVbsi ; dIgs_dT = 0.0 ; Igb = here->HSMHV2_igb ; dIgb_dVd = - (here->HSMHV2_dIgb_dVdsi + here->HSMHV2_dIgb_dVgsi + here->HSMHV2_dIgb_dVbsi) ; dIgb_dVg = here->HSMHV2_dIgb_dVgsi ; dIgb_dVb = here->HSMHV2_dIgb_dVbsi ; dIgb_dT = 0.0 ; Ibd = here->HSMHV2_ibd ; Gbd = here->HSMHV2_gbd ; Gbdt = 0.0 ; Ibs = here->HSMHV2_ibs ; Gbs = here->HSMHV2_gbs ; Gbst = 0.0 ; } /* end of reverse mode */ /* for bypass control, only nonlinear static currents are considered: */ i_dP = Ids + Isub + Igidl - Igd ; i_dP_hat = i_dP + gm *delvgs + gds *delvds + gmbs *delvbs + gmT *deldeltemp + dIsub_dVgs *delvgs + dIsub_dVds *delvds + dIsub_dVbs *delvbs + dIsub_dT *deldeltemp + dIgidl_dVgs*delvgs + dIgidl_dVds*delvds + dIgidl_dVbs*delvbs + dIgidl_dT*deldeltemp -(dIgd_dVg *delvgs + dIgd_dVd *delvds + dIgd_dVb *delvbs + dIgd_dT *deldeltemp) + gm_ext *delvgse + gds_ext *delvdse + gmbs_ext *delvbse ; i_gP = Igd + Igs + Igb ; i_gP_hat = i_gP + dIgd_dVg *delvgs + dIgd_dVd *delvds + dIgd_dVb *delvbs + dIgd_dT *deldeltemp + dIgs_dVg *delvgs + dIgs_dVd *delvds + dIgs_dVb *delvbs + dIgs_dT *deldeltemp + dIgb_dVg *delvgs + dIgb_dVd *delvds + dIgb_dVb *delvbs + dIgb_dT *deldeltemp ; i_sP =-Ids + Isubs + Igisl - Igs ; i_sP_hat = i_sP -(gm *delvgs + gds *delvds + gmbs *delvbs + gmT *deldeltemp) + dIsubs_dVgs*delvgs + dIsubs_dVds*delvds + dIsubs_dVbs*delvbs + dIsubs_dT*deldeltemp + dIgisl_dVgs*delvgs + dIgisl_dVds*delvds + dIgisl_dVbs*delvbs + dIgisl_dT*deldeltemp -(dIgs_dVg *delvgs + dIgs_dVd *delvds + dIgs_dVb *delvbs + dIgs_dT *deldeltemp) -(gm_ext *delvgse + gds_ext *delvdse + gmbs_ext *delvbse) ; i_db = Ibd ; i_db_hat = i_db + Gbd*delvdbd + Gbdt*deldeltemp ; i_sb = Ibs ; i_sb_hat = i_sb + Gbs*delvsbs + Gbst*deldeltemp ; /* ... second part of bypass checks: */ /* 1 2 3 3 3 4 4 4 43 2 1 */ if ( ( fabs(i_dP_hat - i_dP) < ckt->CKTreltol * MAX(fabs(i_dP_hat),fabs(i_dP)) + ckt->CKTabstol ) && ( fabs(i_gP_hat - i_gP) < ckt->CKTreltol * MAX(fabs(i_gP_hat),fabs(i_gP)) + ckt->CKTabstol ) && ( fabs(i_sP_hat - i_sP) < ckt->CKTreltol * MAX(fabs(i_sP_hat),fabs(i_sP)) + ckt->CKTabstol ) && ( fabs(i_db_hat - i_db) < ckt->CKTreltol * MAX(fabs(i_db_hat),fabs(i_db)) + ckt->CKTabstol ) && ( fabs(i_sb_hat - i_sb) < ckt->CKTreltol * MAX(fabs(i_sb_hat),fabs(i_sb)) + ckt->CKTabstol ) ) { /* bypass code */ vds = *(ckt->CKTstate0 + here->HSMHV2vds ); vgs = *(ckt->CKTstate0 + here->HSMHV2vgs ); vbs = *(ckt->CKTstate0 + here->HSMHV2vbs ); vdse = *(ckt->CKTstate0 + here->HSMHV2vdse); vgse = *(ckt->CKTstate0 + here->HSMHV2vgse); vbse = *(ckt->CKTstate0 + here->HSMHV2vbse); vdbd = *(ckt->CKTstate0 + here->HSMHV2vdbd); vsbs = *(ckt->CKTstate0 + here->HSMHV2vsbs); vsubs = *(ckt->CKTstate0 + here->HSMHV2vsubs); deltemp = *(ckt->CKTstate0 + here->HSMHV2deltemp); if ( flg_nqs ) { Qi_nqs = *(ckt->CKTstate0 + here->HSMHV2qi_nqs); Qb_nqs = *(ckt->CKTstate0 + here->HSMHV2qb_nqs); } vges = *(ckt->CKTstate0 + here->HSMHV2vges); vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; vged = vges - vds; vbs_jct = vsbs; vbd_jct = vdbd; /* linear branch currents */ vddp = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2dNode) - *(ckt->CKTrhsOld+here->HSMHV2dNodePrime)); vggp = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2gNode) - *(ckt->CKTrhsOld+here->HSMHV2gNodePrime)); vssp = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2sNode) - *(ckt->CKTrhsOld+here->HSMHV2sNodePrime)); vbpb = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2bNodePrime) - *(ckt->CKTrhsOld+here->HSMHV2bNode)); vbpdb = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2bNodePrime) - *(ckt->CKTrhsOld+here->HSMHV2dbNode)); vbpsb = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2bNodePrime) - *(ckt->CKTrhsOld+here->HSMHV2sbNode)); ByPass = 1; goto line755; } } } /* end of Bypass section */ #endif /*NOBYPASS*/ #ifdef DEBUG_HISIMHVLD_VX printf( "vbd_p = %12.5e\n" , vbd ); printf( "vbs_p = %12.5e\n" , vbs ); printf( "vgs_p = %12.5e\n" , vgs ); printf( "vds_p = %12.5e\n" , vds ); #endif /* start limiting of nonlinear branch voltages */ von = here->HSMHV2_von; Check3 = 0 ; if(*(ckt->CKTstate0 + here->HSMHV2vds) >= 0.0) { /* case vds>=0 for limiting */ limval = DEVfetlim(vgs, *(ckt->CKTstate0 + here->HSMHV2vgs), von); if (vgs != limval) { vgs = limval ; Check3 = 1 ; } if (Check3) vds = vgs - vgd; limval = DEVlimvds(vds, *(ckt->CKTstate0 + here->HSMHV2vds)); if (vds != limval) { vds = limval ; Check3 = 2 ; } vgd = vgs - vds; if (here->HSMHV2_corg == 1) { limval = DEVfetlim(vges, *(ckt->CKTstate0 + here->HSMHV2vges), von); if (vges != limval) { vges = limval ; Check3 = 3 ; } vged = vges - vds; } } else { /* case vds < 0 for limiting */ limval = DEVfetlim(vgd, vgdo, von); if (vgd != limval) { vgd = limval ; Check3 = 4 ; } if (Check3) vds = vgs - vgd; limval = -DEVlimvds(-vds, -(*(ckt->CKTstate0 + here->HSMHV2vds))); if (vds != limval) { vds = limval ; Check3 = 5 ; } vgs = vgd + vds; if (here->HSMHV2_corg == 1) { limval = DEVfetlim(vged, vgedo, von); if (vged != limval) { vged = limval ; Check3 = 6 ; } vges = vged + vds; } } /* end of case vds< 0 for limiting */ if (vds >= 0.0) { /* case vds >=0 for limiting of junctions */ vbs = DEVpnjlim(vbs, *(ckt->CKTstate0 + here->HSMHV2vbs), CONSTvt0, model->HSMHV2_vcrit, &Check1); if (Check1) Check3 = 7 ; vbd = vbs - vds; if (here->HSMHV2_corbnet) { vsbs = DEVpnjlim(vsbs, *(ckt->CKTstate0 + here->HSMHV2vsbs), CONSTvt0, model->HSMHV2_vcrit, &Check2); if (Check2) Check3 = 8 ; } } else { /* case vds < 0 for limiting of junctions */ vbd = DEVpnjlim(vbd, *(ckt->CKTstate0 + here->HSMHV2vbd), CONSTvt0, model->HSMHV2_vcrit, &Check1); if (Check1) Check3 = 9 ; vbs = vbd + vds; if (here->HSMHV2_corbnet) { vdbd = DEVpnjlim(vdbd, *(ckt->CKTstate0 + here->HSMHV2vdbd), CONSTvt0, model->HSMHV2_vcrit, &Check2); if (Check2) { Check3 = 10 ; vdbs = vdbd + vdse; } } } if( here->HSMHV2_coselfheat > 0 ){ /* Logarithmic damping of deltemp beyond LIM_TOL */ deltemp_old = *(ckt->CKTstate0 + here->HSMHV2deltemp); if (deltemp > deltemp_old + LIM_TOL) {deltemp = deltemp_old + LIM_TOL + log10((deltemp-deltemp_old)/LIM_TOL); Check3 = 11;} else if (deltemp < deltemp_old - LIM_TOL) {deltemp = deltemp_old - LIM_TOL - log10((deltemp_old-deltemp)/LIM_TOL); Check3 = 12;} } /* if (Check3) printf("HSMHV2_load: Check3=%d\n",Check3) ; */ /* limiting completed */ if (Check3 == 0 ) Check = 0 ; } /* loading and limiting of nonlinear branch voltages is completed */ vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; vged = vges - vds; vbs_jct = vsbs; vbd_jct = vdbd; /* linear branch voltages */ if ( (ckt->CKTmode & MODEINITJCT) && !here->HSMHV2_off ) { vddp = vggp = vssp = vbpdb = vbpb = vbpsb = 0.0; } else { vddp = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2dNode) - *(ckt->CKTrhsOld+here->HSMHV2dNodePrime)); vggp = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2gNode) - *(ckt->CKTrhsOld+here->HSMHV2gNodePrime)); vssp = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2sNode) - *(ckt->CKTrhsOld+here->HSMHV2sNodePrime)); vbpdb = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2bNodePrime) - *(ckt->CKTrhsOld+here->HSMHV2dbNode)); vbpb = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2bNodePrime) - *(ckt->CKTrhsOld+here->HSMHV2bNode)); vbpsb = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2bNodePrime) - *(ckt->CKTrhsOld+here->HSMHV2sbNode)); } #ifdef DEBUG_HISIMHVLD_VX printf( "vbd = %12.5e\n" , vbd ); printf( "vbs = %12.5e\n" , vbs ); printf( "vgs = %12.5e\n" , vgs ); printf( "vds = %12.5e\n" , vds ); #endif /* After loading (and limiting of branch voltages: Start model evaluation */ /* printf("HSMHV2_load: vds=%e vgs=%e vbs=%e vsd=%e vgd=%e vbd=%e\n", vds,vgs,vbs,-vds,vgs-vds,vbs-vds); */ if (vds >= 0) { /* normal mode */ here->HSMHV2_mode = 1; ivds = vds; ivgs = vgs; ivbs = vbs; ivdse = vdse; ivgse = vgse; ivbse = vbse; } else { /* reverse mode */ here->HSMHV2_mode = -1; ivds = -vds; ivgs = vgd; ivbs = vbd; ivdse = -vdse; ivgse = vgse - vdse; ivbse = vbse - vdse; } if ( model->HSMHV2_info >= 5 ) { /* mode, bias conditions ... */ printf( "--- variables given to HSMHV2evaluate() ----\n" ); printf( "type = %s\n" , (model->HSMHV2_type>0) ? "NMOS" : "PMOS" ); printf( "mode = %s\n" , (here->HSMHV2_mode>0) ? "NORMAL" : "REVERSE" ); printf( "vbse vbs = %12.5e %12.5e\n" , vbse, ivbs ); printf( "vdse vds = %12.5e %12.5e\n" , vdse, ivds ); printf( "vgse vgs = %12.5e %12.5e\n" , vgse, ivgs ); } if ( model->HSMHV2_info >= 6 ) { /* input flags */ printf( "corsrd = %s\n" , (model->HSMHV2_corsrd) ? "true" : "false" ) ; printf( "coadov = %s\n" , (model->HSMHV2_coadov) ? "true" : "false" ) ; printf( "coisub = %s\n" , (model->HSMHV2_coisub) ? "true" : "false" ) ; printf( "coiigs = %s\n" , (model->HSMHV2_coiigs) ? "true" : "false" ) ; printf( "cogidl = %s\n" , (model->HSMHV2_cogidl) ? "true" : "false" ) ; printf( "coovlp = %s\n" , (model->HSMHV2_coovlp) ? "true" : "false" ) ; printf( "coovlps = %s\n" , (model->HSMHV2_coovlps) ? "true" : "false" ) ; printf( "coflick = %s\n", (model->HSMHV2_coflick) ? "true" : "false" ) ; printf( "coisti = %s\n" , (model->HSMHV2_coisti) ? "true" : "false" ) ; printf( "conqs = %s\n" , (model->HSMHV2_conqs) ? "true" : "false" ) ; printf( "cothrml = %s\n", (model->HSMHV2_cothrml) ? "true" : "false" ) ; printf( "coign = %s\n" , (model->HSMHV2_coign) ? "true" : "false" ) ; printf( "cosym = %s\n" , (model->HSMHV2_cosym) ? "true" : "false" ) ; printf( "coselfheat = %s\n" , (here->HSMHV2_coselfheat) ? "true" : "false" ) ; } /* print inputs ------------AA */ #ifdef DEBUG_HISIMHVCGG /* Print convergence flag */ printf("isConv %d ", isConv ); printf("CKTtime %e ", ckt->CKTtime ); printf("Vb %1.3e ", (model->HSMHV2_type>0) ? vbs:-vbs ); printf("Vd %1.3e ", (model->HSMHV2_type>0) ? vds:-vds ); printf("Vg %1.3e ", (model->HSMHV2_type>0) ? vgs:-vgs ); #endif /* call model evaluation */ if ( HSMHV2evaluate(ivdse,ivgse,ivbse,ivds, ivgs, ivbs, vbs_jct, vbd_jct, vsubs, vddp, deltemp, here, model, ckt) == HiSIM_ERROR ) return (HiSIM_ERROR); if ( here->HSMHV2_cordrift == 1 ) { if ( HSMHV2rdrift(vddp, vds, vbs, vsubs, deltemp, here, model, ckt) == HiSIM_ERROR ) return (HiSIM_ERROR); } if ( HSMHV2dio(vbs_jct, vbd_jct, deltemp, here, model, ckt) == HiSIM_ERROR ) return (HiSIM_ERROR); #ifdef DEBUG_HISIMHVCGG printf("HSMHV2_ids %e ", here->HSMHV2_ids ) ; printf("HSMHV2_cggb %e ", here->HSMHV2_cggb ) ; printf("\n") ; #endif here->HSMHV2_called += 1; line755: /* standard entry if HSMHV2evaluate is bypassed */ /* (could be shifted a bit forward ...) */ if ( here->HSMHV2_mode > 0 ) { /* forward mode */ Rd = here->HSMHV2_Rd ; dRd_dVddp = here->HSMHV2_dRd_dVddp ; dRd_dVdse = here->HSMHV2_dRd_dVdse ; dRd_dVgse = here->HSMHV2_dRd_dVgse ; dRd_dVbse = here->HSMHV2_dRd_dVbse ; dRd_dVsubs = (flg_subNode > 0) ? here->HSMHV2_dRd_dVsubs : 0.0 ; /* derivative w.r.t. Vsubs */ dRd_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dRd_dTi : 0.0 ; dRd_dVds = here->HSMHV2_dRd_dVds ; dRd_dVgs = here->HSMHV2_dRd_dVgs ; dRd_dVbs = here->HSMHV2_dRd_dVbs ; Rs = here->HSMHV2_Rs ; dRs_dVdse = here->HSMHV2_dRs_dVdse ; dRs_dVgse = here->HSMHV2_dRs_dVgse ; dRs_dVbse = here->HSMHV2_dRs_dVbse ; dRs_dVsubs = (flg_subNode > 0) ? here->HSMHV2_dRs_dVsubs : 0.0 ; /* derivative w.r.t. Vsubs */ dRs_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dRs_dTi : 0.0 ; Ids = here->HSMHV2_ids ; gds = here->HSMHV2_dIds_dVdsi ; gm = here->HSMHV2_dIds_dVgsi ; gmbs = here->HSMHV2_dIds_dVbsi ; gmT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dIds_dTi : 0.0 ; gmbs_ext = here->HSMHV2_dIds_dVbse ; gds_ext = here->HSMHV2_dIds_dVdse ; gm_ext = here->HSMHV2_dIds_dVgse ; Qd = here->HSMHV2_qd ; dQd_dVds = here->HSMHV2_dQdi_dVdsi ; dQd_dVgs = here->HSMHV2_dQdi_dVgsi ; dQd_dVbs = here->HSMHV2_dQdi_dVbsi ; dQd_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dQdi_dTi : 0.0 ; Qg = here->HSMHV2_qg ; dQg_dVds = here->HSMHV2_dQg_dVdsi ; dQg_dVgs = here->HSMHV2_dQg_dVgsi ; dQg_dVbs = here->HSMHV2_dQg_dVbsi ; dQg_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dQg_dTi : 0.0 ; Qs = here->HSMHV2_qs ; dQs_dVds = here->HSMHV2_dQsi_dVdsi ; dQs_dVgs = here->HSMHV2_dQsi_dVgsi ; dQs_dVbs = here->HSMHV2_dQsi_dVbsi ; dQs_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dQsi_dTi : 0.0 ; Qb = - (here->HSMHV2_qg + here->HSMHV2_qd + here->HSMHV2_qs) ; dQb_dVds = here->HSMHV2_dQb_dVdsi ; dQb_dVgs = here->HSMHV2_dQb_dVgsi ; dQb_dVbs = here->HSMHV2_dQb_dVbsi ; dQb_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dQb_dTi : 0.0 ; Qfd = here->HSMHV2_qdp ; dQfd_dVdse = here->HSMHV2_dqdp_dVdse ; dQfd_dVgse = here->HSMHV2_dqdp_dVgse ; dQfd_dVbse = here->HSMHV2_dqdp_dVbse ; dQfd_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dqdp_dTi : 0.0 ; Qfs = here->HSMHV2_qsp ; dQfs_dVdse = here->HSMHV2_dqsp_dVdse ; dQfs_dVgse = here->HSMHV2_dqsp_dVgse ; dQfs_dVbse = here->HSMHV2_dqsp_dVbse ; dQfs_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dqsp_dTi : 0.0 ; Qdext = here->HSMHV2_qdext ; dQdext_dVdse = here->HSMHV2_dQdext_dVdse ; dQdext_dVgse = here->HSMHV2_dQdext_dVgse ; dQdext_dVbse = here->HSMHV2_dQdext_dVbse ; dQdext_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dQdext_dTi : 0.0 ; Qgext = here->HSMHV2_qgext ; dQgext_dVdse = here->HSMHV2_dQgext_dVdse ; dQgext_dVgse = here->HSMHV2_dQgext_dVgse ; dQgext_dVbse = here->HSMHV2_dQgext_dVbse ; dQgext_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dQgext_dTi : 0.0 ; Qsext = here->HSMHV2_qsext ; dQsext_dVdse = here->HSMHV2_dQsext_dVdse ; dQsext_dVgse = here->HSMHV2_dQsext_dVgse ; dQsext_dVbse = here->HSMHV2_dQsext_dVbse ; dQsext_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dQsext_dTi : 0.0 ; Qbext = - (here->HSMHV2_qgext + here->HSMHV2_qdext + here->HSMHV2_qsext) ; dQbext_dVdse = here->HSMHV2_dQbext_dVdse ; dQbext_dVgse = here->HSMHV2_dQbext_dVgse ; dQbext_dVbse = here->HSMHV2_dQbext_dVbse ; dQbext_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dQbext_dTi : 0.0 ; Isub = here->HSMHV2_isub ; dIsub_dVds = here->HSMHV2_dIsub_dVdsi ; dIsub_dVgs = here->HSMHV2_dIsub_dVgsi ; dIsub_dVbs = here->HSMHV2_dIsub_dVbsi ; dIsub_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dIsub_dTi : 0.0 ; Isubs = 0.0 ; dIsubs_dVds = 0.0 ; dIsubs_dVgs = 0.0 ; dIsubs_dVbs = 0.0 ; dIsubs_dT = 0.0 ; IsubLD = here->HSMHV2_isubld ; dIsubLD_dVds = here->HSMHV2_dIsubLD_dVdsi ; dIsubLD_dVgs = here->HSMHV2_dIsubLD_dVgsi ; dIsubLD_dVbs = here->HSMHV2_dIsubLD_dVbsi ; dIsubLD_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dIsubLD_dTi : 0.0 ; dIsubLD_dVddp = here->HSMHV2_dIsubLD_dVddp ; IsubLDs = 0.0 ; dIsubLDs_dVds = 0.0 ; dIsubLDs_dVgs = 0.0 ; dIsubLDs_dVbs = 0.0 ; dIsubLDs_dT = 0.0 ; dIsubLDs_dVddp = 0.0 ; IdsIBPC = here->HSMHV2_idsibpc ; dIdsIBPC_dVds = here->HSMHV2_dIdsIBPC_dVdsi ; dIdsIBPC_dVgs = here->HSMHV2_dIdsIBPC_dVgsi ; dIdsIBPC_dVbs = here->HSMHV2_dIdsIBPC_dVbsi ; dIdsIBPC_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dIdsIBPC_dTi : 0.0 ; dIdsIBPC_dVddp = here->HSMHV2_dIdsIBPC_dVddp ; IdsIBPCs = 0.0 ; dIdsIBPCs_dVds = 0.0 ; dIdsIBPCs_dVgs = 0.0 ; dIdsIBPCs_dVbs = 0.0 ; dIdsIBPCs_dT = 0.0 ; dIdsIBPCs_dVddp = 0.0 ; Igidl = here->HSMHV2_igidl ; dIgidl_dVds = here->HSMHV2_dIgidl_dVdsi ; dIgidl_dVgs = here->HSMHV2_dIgidl_dVgsi ; dIgidl_dVbs = here->HSMHV2_dIgidl_dVbsi ; dIgidl_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dIgidl_dTi : 0.0 ; Igisl = here->HSMHV2_igisl ; dIgisl_dVds = here->HSMHV2_dIgisl_dVdsi ; dIgisl_dVgs = here->HSMHV2_dIgisl_dVgsi ; dIgisl_dVbs = here->HSMHV2_dIgisl_dVbsi ; dIgisl_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dIgisl_dTi : 0.0 ; Igd = here->HSMHV2_igd ; dIgd_dVd = here->HSMHV2_dIgd_dVdsi ; dIgd_dVg = here->HSMHV2_dIgd_dVgsi ; dIgd_dVb = here->HSMHV2_dIgd_dVbsi ; dIgd_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dIgd_dTi : 0.0 ; Igs = here->HSMHV2_igs ; dIgs_dVd = here->HSMHV2_dIgs_dVdsi ; dIgs_dVg = here->HSMHV2_dIgs_dVgsi ; dIgs_dVb = here->HSMHV2_dIgs_dVbsi ; dIgs_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dIgs_dTi : 0.0 ; Igb = here->HSMHV2_igb ; dIgb_dVd = here->HSMHV2_dIgb_dVdsi ; dIgb_dVg = here->HSMHV2_dIgb_dVgsi ; dIgb_dVb = here->HSMHV2_dIgb_dVbsi ; dIgb_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dIgb_dTi : 0.0 ; /*---------------------------------------------------* * Junction diode. *-----------------*/ Ibd = here->HSMHV2_ibd ; Gbd = here->HSMHV2_gbd ; Gbdt = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_gbdT : 0.0 ; /* Qbd = here->HSMHV2_qbd ; */ Qbd = *(ckt->CKTstate0 + here->HSMHV2qbd) ; Cbd = here->HSMHV2_capbd ; Cbdt = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_gcbdT : 0.0 ; Ibs = here->HSMHV2_ibs ; Gbs = here->HSMHV2_gbs ; Gbst = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_gbsT : 0.0 ; /* Qbs = here->HSMHV2_qbs ; */ Qbs = *(ckt->CKTstate0 + here->HSMHV2qbs) ; Cbs = here->HSMHV2_capbs ; Cbst = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_gcbsT : 0.0 ; if (flg_nqs) { tau = here->HSMHV2_tau ; dtau_dVds = here->HSMHV2_tau_dVdsi ; dtau_dVgs = here->HSMHV2_tau_dVgsi ; dtau_dVbs = here->HSMHV2_tau_dVbsi ; dtau_dT = here->HSMHV2_tau_dTi ; taub = here->HSMHV2_taub ; dtaub_dVds = here->HSMHV2_taub_dVdsi ; dtaub_dVgs = here->HSMHV2_taub_dVgsi ; dtaub_dVbs = here->HSMHV2_taub_dVbsi ; dtaub_dT = here->HSMHV2_taub_dTi ; Qdrat = here->HSMHV2_Xd ; dQdrat_dVds = here->HSMHV2_Xd_dVdsi ; dQdrat_dVgs = here->HSMHV2_Xd_dVgsi ; dQdrat_dVbs = here->HSMHV2_Xd_dVbsi ; dQdrat_dT = here->HSMHV2_Xd_dTi ; Qi = here->HSMHV2_Qi ; dQi_dVds = here->HSMHV2_Qi_dVdsi ; dQi_dVgs = here->HSMHV2_Qi_dVgsi ; dQi_dVbs = here->HSMHV2_Qi_dVbsi ; dQi_dT = here->HSMHV2_Qi_dTi ; Qbulk = here->HSMHV2_Qbulk ; dQbulk_dVds = here->HSMHV2_Qbulk_dVdsi ; dQbulk_dVgs = here->HSMHV2_Qbulk_dVgsi ; dQbulk_dVbs = here->HSMHV2_Qbulk_dVbsi ; dQbulk_dT = here->HSMHV2_Qbulk_dTi ; } } else { /* reverse mode */ /* note: here->HSMHV2_Rd and here->HSMHV2_Rs are already subjected to mode handling, while the following derivatives here->HSMHV2_Rd_dVdse, ... are not! */ Rd = here->HSMHV2_Rd ; dRd_dVddp = here->HSMHV2_dRd_dVddp ; dRd_dVdse = here->HSMHV2_dRd_dVdse ; dRd_dVgse = here->HSMHV2_dRd_dVgse ; dRd_dVbse = here->HSMHV2_dRd_dVbse ; dRd_dVsubs= (flg_subNode > 0) ? here->HSMHV2_dRd_dVsubs : 0.0 ; /* derivative w.r.t. Vsubs */ dRd_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dRd_dTi : 0.0 ; dRd_dVds = here->HSMHV2_dRd_dVds ; dRd_dVgs = here->HSMHV2_dRd_dVgs ; dRd_dVbs = here->HSMHV2_dRd_dVbs ; Rs = here->HSMHV2_Rs ; dRs_dVdse = here->HSMHV2_dRs_dVdse ; dRs_dVgse = here->HSMHV2_dRs_dVgse ; dRs_dVbse = here->HSMHV2_dRs_dVbse ; dRs_dVsubs= (flg_subNode > 0) ? here->HSMHV2_dRs_dVsubs : 0.0 ; /* derivative w.r.t. Vsubs */ dRs_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dRs_dTi : 0.0 ; Ids = - here->HSMHV2_ids ; gds = + (here->HSMHV2_dIds_dVdsi + here->HSMHV2_dIds_dVgsi + here->HSMHV2_dIds_dVbsi) ; gm = - here->HSMHV2_dIds_dVgsi ; gmbs = - here->HSMHV2_dIds_dVbsi ; gmT = (here->HSMHV2_coselfheat > 0) ? - here->HSMHV2_dIds_dTi : 0.0 ; gds_ext = + (here->HSMHV2_dIds_dVdse + here->HSMHV2_dIds_dVgse + here->HSMHV2_dIds_dVbse) ; gm_ext = - here->HSMHV2_dIds_dVgse; gmbs_ext = - here->HSMHV2_dIds_dVbse; Qd = here->HSMHV2_qs ; dQd_dVds = - (here->HSMHV2_dQsi_dVdsi + here->HSMHV2_dQsi_dVgsi + here->HSMHV2_dQsi_dVbsi) ; dQd_dVgs = here->HSMHV2_dQsi_dVgsi ; dQd_dVbs = here->HSMHV2_dQsi_dVbsi ; dQd_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dQsi_dTi : 0.0 ; Qg = here->HSMHV2_qg ; dQg_dVds = - (here->HSMHV2_dQg_dVdsi + here->HSMHV2_dQg_dVgsi + here->HSMHV2_dQg_dVbsi) ; dQg_dVgs = here->HSMHV2_dQg_dVgsi ; dQg_dVbs = here->HSMHV2_dQg_dVbsi ; dQg_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dQg_dTi : 0.0 ; Qs = here->HSMHV2_qd ; dQs_dVds = - (here->HSMHV2_dQdi_dVdsi + here->HSMHV2_dQdi_dVgsi + here->HSMHV2_dQdi_dVbsi) ; dQs_dVgs = here->HSMHV2_dQdi_dVgsi ; dQs_dVbs = here->HSMHV2_dQdi_dVbsi ; dQs_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dQdi_dTi : 0.0 ; Qb = - (here->HSMHV2_qg + here->HSMHV2_qd + here->HSMHV2_qs) ; dQb_dVds = - (here->HSMHV2_dQb_dVdsi + here->HSMHV2_dQb_dVgsi + here->HSMHV2_dQb_dVbsi) ; dQb_dVgs = here->HSMHV2_dQb_dVgsi ; dQb_dVbs = here->HSMHV2_dQb_dVbsi ; dQb_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dQb_dTi : 0.0 ; Qfd = here->HSMHV2_qsp ; dQfd_dVdse = - (here->HSMHV2_dqsp_dVdse + here->HSMHV2_dqsp_dVgse + here->HSMHV2_dqsp_dVbse) ; dQfd_dVgse = here->HSMHV2_dqsp_dVgse ; dQfd_dVbse = here->HSMHV2_dqsp_dVbse ; dQfd_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dqsp_dTi : 0.0 ; Qfs = here->HSMHV2_qdp ; dQfs_dVdse = - (here->HSMHV2_dqdp_dVdse + here->HSMHV2_dqdp_dVgse + here->HSMHV2_dqdp_dVbse) ; dQfs_dVgse = here->HSMHV2_dqdp_dVgse ; dQfs_dVbse = here->HSMHV2_dqdp_dVbse ; dQfs_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dqdp_dTi : 0.0 ; Qdext = here->HSMHV2_qsext ; dQdext_dVdse = - (here->HSMHV2_dQsext_dVdse + here->HSMHV2_dQsext_dVgse + here->HSMHV2_dQsext_dVbse); dQdext_dVgse = here->HSMHV2_dQsext_dVgse ; dQdext_dVbse = here->HSMHV2_dQsext_dVbse ; dQdext_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dQsext_dTi : 0.0 ; Qgext = here->HSMHV2_qgext ; dQgext_dVdse = - (here->HSMHV2_dQgext_dVdse + here->HSMHV2_dQgext_dVgse + here->HSMHV2_dQgext_dVbse); dQgext_dVgse = here->HSMHV2_dQgext_dVgse ; dQgext_dVbse = here->HSMHV2_dQgext_dVbse ; dQgext_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dQgext_dTi : 0.0 ; Qsext = here->HSMHV2_qdext ; dQsext_dVdse = - (here->HSMHV2_dQdext_dVdse + here->HSMHV2_dQdext_dVgse + here->HSMHV2_dQdext_dVbse); dQsext_dVgse = here->HSMHV2_dQdext_dVgse ; dQsext_dVbse = here->HSMHV2_dQdext_dVbse ; dQsext_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dQdext_dTi : 0.0 ; Qbext = - (here->HSMHV2_qgext + here->HSMHV2_qdext + here->HSMHV2_qsext) ; dQbext_dVdse = - (here->HSMHV2_dQbext_dVdse + here->HSMHV2_dQbext_dVgse + here->HSMHV2_dQbext_dVbse); dQbext_dVgse = here->HSMHV2_dQbext_dVgse ; dQbext_dVbse = here->HSMHV2_dQbext_dVbse ; dQbext_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dQbext_dTi : 0.0 ; Isub = 0.0 ; dIsub_dVds = 0.0 ; dIsub_dVgs = 0.0 ; dIsub_dVbs = 0.0 ; dIsub_dT = 0.0 ; Isubs = here->HSMHV2_isub ; dIsubs_dVds = - (here->HSMHV2_dIsub_dVdsi + here->HSMHV2_dIsub_dVgsi + here->HSMHV2_dIsub_dVbsi) ; dIsubs_dVgs = here->HSMHV2_dIsub_dVgsi ; dIsubs_dVbs = here->HSMHV2_dIsub_dVbsi ; dIsubs_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dIsub_dTi : 0.0 ; IsubLD = 0.0 ; dIsubLD_dVds = 0.0 ; dIsubLD_dVgs = 0.0 ; dIsubLD_dVbs = 0.0 ; dIsubLD_dT = 0.0 ; dIsubLD_dVddp = 0.0 ; IsubLDs = here->HSMHV2_isubld ; dIsubLDs_dVds = - (here->HSMHV2_dIsubLD_dVdsi + here->HSMHV2_dIsubLD_dVgsi + here->HSMHV2_dIsubLD_dVbsi) ; dIsubLDs_dVgs = here->HSMHV2_dIsubLD_dVgsi ; dIsubLDs_dVbs = here->HSMHV2_dIsubLD_dVbsi ; dIsubLDs_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dIsubLD_dTi : 0.0 ; dIsubLDs_dVddp = - here->HSMHV2_dIsubLD_dVddp ; IdsIBPC = 0.0 ; dIdsIBPC_dVds = 0.0 ; dIdsIBPC_dVgs = 0.0 ; dIdsIBPC_dVbs = 0.0 ; dIdsIBPC_dT = 0.0 ; dIdsIBPC_dVddp = 0.0 ; IdsIBPCs = here->HSMHV2_idsibpc ; dIdsIBPCs_dVds = - (here->HSMHV2_dIdsIBPC_dVdsi + here->HSMHV2_dIdsIBPC_dVgsi + here->HSMHV2_dIdsIBPC_dVbsi) ; dIdsIBPCs_dVgs = here->HSMHV2_dIdsIBPC_dVgsi ; dIdsIBPCs_dVbs = here->HSMHV2_dIdsIBPC_dVbsi ; dIdsIBPCs_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dIdsIBPC_dTi : 0.0 ; dIdsIBPCs_dVddp = - here->HSMHV2_dIdsIBPC_dVddp ; Igidl = here->HSMHV2_igisl ; dIgidl_dVds = - (here->HSMHV2_dIgisl_dVdsi + here->HSMHV2_dIgisl_dVgsi + here->HSMHV2_dIgisl_dVbsi) ; dIgidl_dVgs = here->HSMHV2_dIgisl_dVgsi ; dIgidl_dVbs = here->HSMHV2_dIgisl_dVbsi ; dIgidl_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dIgisl_dTi : 0.0 ; Igisl = here->HSMHV2_igidl ; dIgisl_dVds = - (here->HSMHV2_dIgidl_dVdsi + here->HSMHV2_dIgidl_dVgsi + here->HSMHV2_dIgidl_dVbsi) ; dIgisl_dVgs = here->HSMHV2_dIgidl_dVgsi ; dIgisl_dVbs = here->HSMHV2_dIgidl_dVbsi ; dIgisl_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dIgidl_dTi : 0.0 ; /* note: here->HSMHV2_igd and here->HSMHV2_igs are already subjected to mode handling, while the following derivatives here->HSMHV2_dIgd_dVdsi, ... are not! */ Igd = here->HSMHV2_igd ; dIgd_dVd = - (here->HSMHV2_dIgs_dVdsi + here->HSMHV2_dIgs_dVgsi + here->HSMHV2_dIgs_dVbsi) ; dIgd_dVg = here->HSMHV2_dIgs_dVgsi ; dIgd_dVb = here->HSMHV2_dIgs_dVbsi ; dIgd_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dIgs_dTi : 0.0 ; Igs = here->HSMHV2_igs ; dIgs_dVd = - (here->HSMHV2_dIgd_dVdsi + here->HSMHV2_dIgd_dVgsi + here->HSMHV2_dIgd_dVbsi) ; dIgs_dVg = here->HSMHV2_dIgd_dVgsi ; dIgs_dVb = here->HSMHV2_dIgd_dVbsi ; dIgs_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dIgd_dTi : 0.0 ; Igb = here->HSMHV2_igb ; dIgb_dVd = - (here->HSMHV2_dIgb_dVdsi + here->HSMHV2_dIgb_dVgsi + here->HSMHV2_dIgb_dVbsi) ; dIgb_dVg = here->HSMHV2_dIgb_dVgsi ; dIgb_dVb = here->HSMHV2_dIgb_dVbsi ; dIgb_dT = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_dIgb_dTi : 0.0 ; /*---------------------------------------------------* * Junction diode. *-----------------*/ Ibd = here->HSMHV2_ibd ; Gbd = here->HSMHV2_gbd ; Gbdt = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_gbdT : 0.0 ; /* Qbd = here->HSMHV2_qbd ; */ Qbd = *(ckt->CKTstate0 + here->HSMHV2qbd) ; Cbd = here->HSMHV2_capbd ; Cbdt = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_gcbdT : 0.0 ; Ibs = here->HSMHV2_ibs ; Gbs = here->HSMHV2_gbs ; Gbst = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_gbsT : 0.0 ; /* Qbs = here->HSMHV2_qbs ; */ Qbs = *(ckt->CKTstate0 + here->HSMHV2qbs) ; Cbs = here->HSMHV2_capbs ; Cbst = (here->HSMHV2_coselfheat > 0) ? here->HSMHV2_gcbsT : 0.0 ; if (flg_nqs) { tau = here->HSMHV2_tau ; dtau_dVds = -(here->HSMHV2_tau_dVdsi + here->HSMHV2_tau_dVgsi + here->HSMHV2_tau_dVbsi) ; dtau_dVgs = here->HSMHV2_tau_dVgsi ; dtau_dVbs = here->HSMHV2_tau_dVbsi ; dtau_dT = here->HSMHV2_tau_dTi ; taub = here->HSMHV2_taub ; dtaub_dVds = -(here->HSMHV2_taub_dVdsi + here->HSMHV2_taub_dVgsi + here->HSMHV2_taub_dVbsi); dtaub_dVgs = here->HSMHV2_taub_dVgsi ; dtaub_dVbs = here->HSMHV2_taub_dVbsi ; dtaub_dT = here->HSMHV2_taub_dTi ; Qdrat = 1.0 - here->HSMHV2_Xd ; dQdrat_dVds = +(here->HSMHV2_Xd_dVdsi + here->HSMHV2_Xd_dVgsi + here->HSMHV2_Xd_dVbsi) ; dQdrat_dVgs = - here->HSMHV2_Xd_dVgsi ; dQdrat_dVbs = - here->HSMHV2_Xd_dVbsi ; dQdrat_dT = - here->HSMHV2_Xd_dTi ; Qi = here->HSMHV2_Qi ; dQi_dVds = -(here->HSMHV2_Qi_dVdsi + here->HSMHV2_Qi_dVgsi + here->HSMHV2_Qi_dVbsi) ; dQi_dVgs = here->HSMHV2_Qi_dVgsi ; dQi_dVbs = here->HSMHV2_Qi_dVbsi ; dQi_dT = here->HSMHV2_Qi_dTi ; Qbulk = here->HSMHV2_Qbulk ; dQbulk_dVds = -(here->HSMHV2_Qbulk_dVdsi + here->HSMHV2_Qbulk_dVgsi + here->HSMHV2_Qbulk_dVbsi) ; dQbulk_dVgs = here->HSMHV2_Qbulk_dVgsi ; dQbulk_dVbs = here->HSMHV2_Qbulk_dVbsi ; dQbulk_dT = here->HSMHV2_Qbulk_dTi ; } } /* end of reverse mode */ if (here->HSMHV2_coselfheat > 0) { if (pParam->HSMHV2_rth > C_RTH_MIN) { Gth = 1.0/pParam->HSMHV2_rth ; } else { Gth = 1.0/C_RTH_MIN ; } Ith = Gth * deltemp ; dIth_dT = Gth ; Cth = pParam->HSMHV2_cth ; Qth = Cth * deltemp ; /* P = Ids * (Vdsi + param * ( Vdse - Vdsi)) */ /* = Ids * Veffpower */ if ( vds * (vdse - vds) >= 0.0) { if ( pParam->HSMHV2_powrat == 1.0 ) { Veffpower = vdse ; dVeffpower_dVds = 0.0 ; dVeffpower_dVdse = 1.0 ; } else { Veffpower = vds + here->HSMHV2_powratio * (vdse - vds) ; dVeffpower_dVds = (1.0 - here->HSMHV2_powratio) ; dVeffpower_dVdse = here->HSMHV2_powratio ; } } else { Veffpower = vds ; dVeffpower_dVds = 1.0 ; dVeffpower_dVdse = 0.0 ; } P = Ids * Veffpower ; dP_dVds = gds * Veffpower + Ids * dVeffpower_dVds; dP_dVgs = gm * Veffpower ; dP_dVbs = gmbs * Veffpower ; dP_dT = gmT * Veffpower ; dP_dVdse = gds_ext * Veffpower + Ids * dVeffpower_dVdse ; dP_dVgse = gm_ext * Veffpower ; dP_dVbse = gmbs_ext * Veffpower ; /* Clamping the maximum rise tempaerarure (SHEMAX) */ T1 = model->HSMHV2_shemax * Gth ; Fn_SU( T2 , P , T1 , SHE_MAX_dlt * Gth , T0 ) ; P = T2 ; dP_dVds = T0 * dP_dVds ; dP_dVgs = T0 * dP_dVgs ; dP_dVbs = T0 * dP_dVbs ; dP_dT = T0 * dP_dT ; dP_dVdse = T0 * dP_dVdse ; dP_dVgse = T0 * dP_dVgse ; dP_dVbse = T0 * dP_dVbse ; } else { Gth = 0.0 ; Ith = 0.0 ; dIth_dT = 0.0 ; Cth = 0.0 ; Qth = 0.0 ; P = 0.0 ; dP_dVds = 0.0 ; dP_dVgs = 0.0 ; dP_dVbs = 0.0 ; dP_dT = 0.0 ; dP_dVdse = 0.0 ; dP_dVgse = 0.0 ; dP_dVbse = 0.0 ; } /* in case of nqs: construct static contributions to the nqs equations (Iqi_nqs, Iqb_nqs) */ /* and nqs charge contributions to inner drain, gate and source node (Qd_nqs, Qg_nqs, Qs_nqs) */ if (flg_nqs) { /* .. tau, taub must be > 0 */ if (tau < 1.0e-18) { tau = 1.e-18 ; dtau_dVds = dtau_dVgs = dtau_dVbs = dtau_dT = 0.0 ; } if (taub < 1.0e-18) { taub = 1.0e-18 ; dtaub_dVds = dtaub_dVgs = dtaub_dVbs = dtaub_dT = 0.0 ; } Iqi_nqs = (Qi_nqs - Qi) / tau ; dIqi_nqs_dVds = - (dQi_dVds + Iqi_nqs * dtau_dVds) / tau ; dIqi_nqs_dVgs = - (dQi_dVgs + Iqi_nqs * dtau_dVgs) / tau ; dIqi_nqs_dVbs = - (dQi_dVbs + Iqi_nqs * dtau_dVbs) / tau ; dIqi_nqs_dT = - (dQi_dT + Iqi_nqs * dtau_dT ) / tau ; dIqi_nqs_dQi_nqs = 1.0 / tau ; Iqb_nqs = (Qb_nqs - Qbulk) / taub ; dIqb_nqs_dVds = - (dQbulk_dVds + Iqb_nqs * dtaub_dVds) / taub ; dIqb_nqs_dVgs = - (dQbulk_dVgs + Iqb_nqs * dtaub_dVgs) / taub ; dIqb_nqs_dVbs = - (dQbulk_dVbs + Iqb_nqs * dtaub_dVbs) / taub ; dIqb_nqs_dT = - (dQbulk_dT + Iqb_nqs * dtaub_dT ) / taub ; dIqb_nqs_dQb_nqs = 1.0 / taub ; Qd_nqs = Qi_nqs * Qdrat ; dQd_nqs_dVds = Qi_nqs * dQdrat_dVds ; dQd_nqs_dVgs = Qi_nqs * dQdrat_dVgs ; dQd_nqs_dVbs = Qi_nqs * dQdrat_dVbs ; dQd_nqs_dT = Qi_nqs * dQdrat_dT ; dQd_nqs_dQi_nqs = Qdrat ; Qg_nqs = - Qi_nqs - Qb_nqs ; dQg_nqs_dQi_nqs = - 1.0 ; dQg_nqs_dQb_nqs = - 1.0 ; Qs_nqs = Qi_nqs * (1.0 - Qdrat) ; dQs_nqs_dVds = - Qi_nqs * dQdrat_dVds ; dQs_nqs_dVgs = - Qi_nqs * dQdrat_dVgs ; dQs_nqs_dVbs = - Qi_nqs * dQdrat_dVbs ; dQs_nqs_dT = - Qi_nqs * dQdrat_dT ; dQs_nqs_dQi_nqs = 1.0 - Qdrat ; } else { Iqi_nqs = Iqb_nqs = Qd_nqs = Qg_nqs = Qs_nqs = 0.0 ; } dIgd_dVs = - (dIgd_dVd + dIgd_dVg + dIgd_dVb) ; dIgs_dVs = - (dIgs_dVd + dIgs_dVg + dIgs_dVb) ; dIgb_dVs = - (dIgb_dVd + dIgb_dVg + dIgb_dVb) ; /*---------------------------------------------------* * External Resistances *-----------------*/ if(model->HSMHV2_corsrd == 1 || model->HSMHV2_corsrd == 3 || model->HSMHV2_cordrift == 1 ) { if(Rd > 0){ GD = 1.0/Rd; GD_dVgs = - dRd_dVgs /Rd/Rd; GD_dVds = - dRd_dVds /Rd/Rd; GD_dVddp = - dRd_dVddp /Rd/Rd; GD_dVbs = - dRd_dVbs /Rd/Rd; GD_dVsubs = - dRd_dVsubs /Rd/Rd; GD_dT = - dRd_dT /Rd/Rd; GD_dVgse = - dRd_dVgse /Rd/Rd; GD_dVdse = - dRd_dVdse /Rd/Rd; GD_dVbse = - dRd_dVbse /Rd/Rd; }else{ GD=0.0; GD_dVgs=0.0; GD_dVds=0.0; GD_dVddp = 0.0; GD_dVbs=0.0; GD_dVsubs=0.0; GD_dT =0.0; GD_dVgse =0.0; GD_dVdse =0.0; GD_dVbse =0.0; } if(Rs > 0){ GS = 1.0/Rs; GS_dVgs = - dRs_dVgse /Rs/Rs; GS_dVds = - dRs_dVdse /Rs/Rs; GS_dVbs = - dRs_dVbse /Rs/Rs; GS_dVsubs = - dRs_dVsubs /Rs/Rs; GS_dT = - dRs_dT /Rs/Rs; }else{ GS=0.0; GS_dVgs=0.0; GS_dVds=0.0; GS_dVbs=0.0; GS_dVsubs=0.0; GS_dT =0.0; } } Iddp = GD * vddp; dIddp_dVddp = GD_dVddp * vddp + GD ; dIddp_dVdse = GD_dVdse * vddp; dIddp_dVgse = GD_dVgse * vddp; dIddp_dVbse = GD_dVbse * vddp; dIddp_dVsubs= GD_dVsubs * vddp; dIddp_dT = GD_dT * vddp; dIddp_dVds = GD_dVds * vddp; dIddp_dVgs = GD_dVgs * vddp; dIddp_dVbs = GD_dVbs * vddp; Issp = GS * vssp; dIssp_dVssp = GS; dIssp_dVdse = GS_dVds * vssp ; dIssp_dVgse = GS_dVgs * vssp; dIssp_dVbse = GS_dVbs * vssp; dIssp_dVsubs= GS_dVsubs * vssp; dIssp_dT = GS_dT * vssp; if( model->HSMHV2_corg > 0.0 ){ GG = here->HSMHV2_grg ; }else{ GG = 0.0 ; } Iggp = GG * vggp; dIggp_dVggp = GG; if(model->HSMHV2_corbnet == 1 && here->HSMHV2_rbpb > 0.0 ){ GRBPB = here->HSMHV2_grbpb ; }else{ GRBPB = 0.0 ; } Ibpb = GRBPB * vbpb; dIbpb_dVbpb = GRBPB; if(model->HSMHV2_corbnet == 1 && here->HSMHV2_rbpd > 0.0 ){ GRBPD = here->HSMHV2_grbpd ; }else{ GRBPD = 0.0 ; } Ibpdb = GRBPD * vbpdb; dIbpdb_dVbpdb = GRBPD; if(model->HSMHV2_corbnet == 1 && here->HSMHV2_rbps > 0.0 ){ GRBPS = here->HSMHV2_grbps ; }else{ GRBPS = 0.0 ; } Ibpsb = GRBPS * vbpsb; dIbpsb_dVbpsb = GRBPS; /* printf("HSMHV2_load: ByPass=%d\n",ByPass) ; */ if (!ByPass) { /* no convergence check in case of Bypass */ /* * check convergence */ isConv = 1; if ( (here->HSMHV2_off == 0) || !(ckt->CKTmode & MODEINITFIX) ) { if (Check == 1) { ckt->CKTnoncon++; isConv = 0; #ifndef NEWCONV } else { /* convergence check for branch currents is done in function HSMHV2convTest */ #endif /* NEWCONV */ } } *(ckt->CKTstate0 + here->HSMHV2vbs) = vbs; *(ckt->CKTstate0 + here->HSMHV2vbd) = vbd; *(ckt->CKTstate0 + here->HSMHV2vgs) = vgs; *(ckt->CKTstate0 + here->HSMHV2vds) = vds; *(ckt->CKTstate0 + here->HSMHV2vsbs) = vsbs; *(ckt->CKTstate0 + here->HSMHV2vdbs) = vdbs; *(ckt->CKTstate0 + here->HSMHV2vdbd) = vdbd; *(ckt->CKTstate0 + here->HSMHV2vges) = vges; *(ckt->CKTstate0 + here->HSMHV2vsubs) = vsubs; *(ckt->CKTstate0 + here->HSMHV2deltemp) = deltemp; *(ckt->CKTstate0 + here->HSMHV2vdse) = vdse; *(ckt->CKTstate0 + here->HSMHV2vgse) = vgse; *(ckt->CKTstate0 + here->HSMHV2vbse) = vbse; if ( flg_nqs ) { *(ckt->CKTstate0 + here->HSMHV2qi_nqs) = Qi_nqs; *(ckt->CKTstate0 + here->HSMHV2qb_nqs) = Qb_nqs; } /* printf("HSMHV2_load: (into state0) vds.. = %e %e %e %e %e %e\n", vds,vgs,vbs,vdse,vgse,vbse); */ if ((ckt->CKTmode & MODEDC) && !(ckt->CKTmode & MODEINITFIX) && !(ckt->CKTmode & MODEINITJCT)) showPhysVal = 1; if (model->HSMHV2_show_Given && showPhysVal && isConv) { static int isFirst = 1; if (vds != vds_pre) ShowPhysVals(here, model, isFirst, vds_pre, vgs, vbs, vgd, vbd, vgb); else ShowPhysVals(here, model, isFirst, vds, vgs, vbs, vgd, vbd, vgb); if (isFirst) isFirst = 0; } } #include "hsmhv2ld_info_eval.h" /* For standard Newton method (SPICE_rhs == 0): */ /* if currents (and charges) are limited -> extrapolate onto x-values */ /* in SPICE mode (SPICE_rhs == 1): */ /* extrapolate onto x = 0 (-> rhs_eq) */ /* */ /* note that */ /* the charge extrapolation is replaced by extrapolation of displacement */ /* currents, see below */ /* ...... just for easier handling: collect node voltages in vector x: */ if (!SPICE_rhs) { x[dNode] = model->HSMHV2_type *( *(ckt->CKTrhsOld+here->HSMHV2dNode)); x[dNodePrime] = model->HSMHV2_type *( *(ckt->CKTrhsOld+here->HSMHV2dNodePrime)); x[gNode] = model->HSMHV2_type *( *(ckt->CKTrhsOld+here->HSMHV2gNode)); x[gNodePrime] = model->HSMHV2_type *( *(ckt->CKTrhsOld+here->HSMHV2gNodePrime)); x[sNode] = model->HSMHV2_type *( *(ckt->CKTrhsOld+here->HSMHV2sNode)); x[sNodePrime] = model->HSMHV2_type *( *(ckt->CKTrhsOld+here->HSMHV2sNodePrime)); x[bNodePrime] = model->HSMHV2_type *( *(ckt->CKTrhsOld+here->HSMHV2bNodePrime)); x[bNode] = model->HSMHV2_type *( *(ckt->CKTrhsOld+here->HSMHV2bNode)); x[dbNode] = model->HSMHV2_type *( *(ckt->CKTrhsOld+here->HSMHV2dbNode)); x[sbNode] = model->HSMHV2_type *( *(ckt->CKTrhsOld+here->HSMHV2sbNode)); if (flg_subNode > 0) x[subNode] = model->HSMHV2_type *( *(ckt->CKTrhsOld+here->HSMHV2subNode)); /* previous vsub */ else x[subNode] = 0.0; if (here->HSMHV2_coselfheat > 0) x[tempNode] = *(ckt->CKTrhsOld+here->HSMHV2tempNode); else x[tempNode] = 0.0; if ( flg_nqs ) { x[qiNode] = *(ckt->CKTrhsOld+here->HSMHV2qiNode); x[qbNode] = *(ckt->CKTrhsOld+here->HSMHV2qbNode); } else { x[qiNode] = 0.0; x[qbNode] = 0.0; } } delvgs = (x[gNodePrime] - x[sNodePrime]) - vgs; delvds = (x[dNodePrime] - x[sNodePrime]) - vds; delvbs = (x[bNodePrime] - x[sNodePrime]) - vbs; deldeltemp = x[tempNode] - deltemp; if (delvgs || delvds || delvbs ||deldeltemp) { Ids += gm *delvgs + gds *delvds + gmbs *delvbs + gmT *deldeltemp ; Isub += dIsub_dVgs *delvgs + dIsub_dVds *delvds + dIsub_dVbs *delvbs + dIsub_dT *deldeltemp ; Isubs+= dIsubs_dVgs*delvgs + dIsubs_dVds*delvds + dIsubs_dVbs*delvbs + dIsubs_dT*deldeltemp ; IsubLD += dIsubLD_dVgs *delvgs + dIsubLD_dVds *delvds + dIsubLD_dVbs *delvbs + dIsubLD_dT *deldeltemp ; IsubLDs+= dIsubLDs_dVgs*delvgs + dIsubLDs_dVds*delvds + dIsubLDs_dVbs*delvbs + dIsubLDs_dT*deldeltemp ; IdsIBPC += dIdsIBPC_dVgs *delvgs + dIdsIBPC_dVds *delvds + dIdsIBPC_dVbs *delvbs + dIdsIBPC_dT *deldeltemp ; IdsIBPCs+= dIdsIBPCs_dVgs*delvgs + dIdsIBPCs_dVds*delvds + dIdsIBPCs_dVbs*delvbs + dIdsIBPCs_dT*deldeltemp ; Igd += dIgd_dVg *delvgs + dIgd_dVd *delvds + dIgd_dVb *delvbs + dIgd_dT *deldeltemp ; Igs += dIgs_dVg *delvgs + dIgs_dVd *delvds + dIgs_dVb *delvbs + dIgs_dT *deldeltemp ; Igb += dIgb_dVg *delvgs + dIgb_dVd *delvds + dIgb_dVb *delvbs + dIgb_dT *deldeltemp ; Igidl+= dIgidl_dVgs*delvgs + dIgidl_dVds*delvds + dIgidl_dVbs*delvbs + dIgidl_dT*deldeltemp ; Igisl+= dIgisl_dVgs*delvgs + dIgisl_dVds*delvds + dIgisl_dVbs*delvbs + dIgisl_dT*deldeltemp ; P += dP_dVgs *delvgs + dP_dVds *delvds + dP_dVbs *delvbs + dP_dT *deldeltemp ; if (flg_nqs) { Iqi_nqs += dIqi_nqs_dVgs*delvgs + dIqi_nqs_dVds*delvds + dIqi_nqs_dVbs*delvbs + dIqi_nqs_dT*deldeltemp ; Iqb_nqs += dIqb_nqs_dVgs*delvgs + dIqb_nqs_dVds*delvds + dIqb_nqs_dVbs*delvbs + dIqb_nqs_dT*deldeltemp ; } } delvgse = (x[gNodePrime] - x[sNode]) - vgse; delvdse = (x[dNode] - x[sNode]) - vdse; delvbse = (x[bNodePrime] - x[sNode]) - vbse; if (flg_subNode > 0) delvsubs = (x[subNode] - x[sNode]) - vsubs; /* substrate bias change */ if (delvgse || delvdse || delvbse ) { Ids += gm_ext *delvgse + gds_ext *delvdse + gmbs_ext *delvbse ; P += dP_dVgse *delvgse + dP_dVdse *delvdse + dP_dVbse *delvbse ; Iddp += dIddp_dVgse*delvgse + dIddp_dVdse*delvdse + dIddp_dVbse*delvbse ; Issp += dIssp_dVgse*delvgse + dIssp_dVdse*delvdse + dIssp_dVbse*delvbse ; } if (delvsubs) { Iddp += dIddp_dVsubs*delvsubs ; Issp += dIssp_dVsubs*delvsubs ; } if (deldeltemp) { Iddp += dIddp_dT*deldeltemp ; Issp += dIssp_dT*deldeltemp ; Ith += dIth_dT *deldeltemp ; } delvdbd = (x[dbNode] - x[dNode]) - vbd_jct ; if (delvdbd || deldeltemp) { Ibd += Gbd*delvdbd + Gbdt*deldeltemp ; } delvsbs = (x[sbNode] - x[sNode]) - vbs_jct ; if (delvsbs || deldeltemp) { Ibs += Gbs*delvsbs + Gbst*deldeltemp ; } delvddp = (x[dNode] - x[dNodePrime]) - vddp ; if (delvddp) { Iddp += dIddp_dVddp * delvddp ; IsubLD += dIsubLD_dVddp * delvddp ; IsubLDs += dIsubLDs_dVddp * delvddp ; IdsIBPC += dIdsIBPC_dVddp * delvddp ; IdsIBPCs+= dIdsIBPCs_dVddp * delvddp ; } delvds = (x[dNodePrime] - x[sNodePrime]) - vds ; if (delvds) { Iddp += dIddp_dVds * delvds ; } delvgs = (x[gNodePrime] - x[sNodePrime]) - vgs ; if (delvgs) { Iddp += dIddp_dVgs * delvgs ; } delvbs = (x[bNodePrime] - x[sNodePrime]) - vbs ; if (delvbs) { Iddp += dIddp_dVbs * delvbs ; } delvssp = (x[sNode] - x[sNodePrime]) - vssp ; if (delvssp) { Issp += dIssp_dVssp * delvssp ; } delvggp = (x[gNode] - x[gNodePrime]) - vggp ; if (delvggp) { Iggp += dIggp_dVggp * delvggp ; } delvbpb = (x[bNodePrime] - x[bNode]) - vbpb ; if (delvbpb) { Ibpb += dIbpb_dVbpb * delvbpb ; } delvbpdb = (x[bNodePrime] - x[dbNode]) - vbpdb ; if (delvbpdb) { Ibpdb += dIbpdb_dVbpdb * delvbpdb ; } delvbpsb = (x[bNodePrime] - x[sbNode]) - vbpsb ; if (delvbpsb) { Ibpsb += dIbpsb_dVbpsb * delvbpsb ; } if (flg_nqs) { delQi_nqs = x[qiNode] - Qi_nqs ; if (delQi_nqs) { Iqi_nqs += dIqi_nqs_dQi_nqs * delQi_nqs ; } delQb_nqs = x[qbNode] - Qb_nqs ; if (delQb_nqs) { Iqb_nqs += dIqb_nqs_dQb_nqs * delQb_nqs ; } } /* Assemble currents into nodes */ /* ... static part */ /* drain node */ i_d = Iddp - Ibd + IsubLD + IdsIBPC - IdsIBPCs ; /* intrinsic drain node */ i_dP = -Iddp + Ids + Isub + Igidl - Igd ; /* gate node */ i_g = Iggp ; /* intrinsic gate node */ i_gP = - Iggp + Igd + Igs + Igb ; /* source node */ i_s = Issp - Ibs + IsubLDs - IdsIBPC + IdsIBPCs ; /* intrinsic source node */ i_sP = - Issp - Ids + Isubs + Igisl - Igs ; /* intrinsic bulk node */ i_bP = - Isub - Isubs - IsubLD - IsubLDs- Igidl -Igb - Igisl + Ibpdb + Ibpb + Ibpsb ; /* base node */ i_b = - Ibpb ; /* drain bulk node */ i_db = Ibd - Ibpdb ; /* source bulk node */ i_sb = Ibs - Ibpsb ; /* temp node */ if (here->HSMHV2_coselfheat > 0){ i_t = Ith - P ; } else { i_t = 0.0; } /* nqs equations */ i_qi = Iqi_nqs ; i_qb = Iqb_nqs ; for (i = 0; i < XDIM; i++) { ydc_d[i] = ydc_dP[i] = ydc_g[i] = ydc_gP[i] = ydc_s[i] = ydc_sP[i] = ydc_bP[i] = ydc_b[i] = ydc_db[i] = ydc_sb[i] = ydc_t[i] = 0.0; } if (flg_nqs) { for (i = 0; i < XDIM; i++) { ydc_qi[i] = ydc_qb[i] = 0.0; } } /* drain node */ ydc_d[dNode] = dIddp_dVddp + dIddp_dVdse + Gbd + dIsubLD_dVddp + dIdsIBPC_dVddp - dIdsIBPCs_dVddp ; ydc_d[dNodePrime] = -dIddp_dVddp + dIddp_dVds + dIsubLD_dVds + dIdsIBPC_dVds - dIdsIBPCs_dVds - dIsubLD_dVddp - dIdsIBPC_dVddp + dIdsIBPCs_dVddp ; /* ydc_d[gNode] = 0.0 ; */ ydc_d[gNodePrime] = dIddp_dVgse + dIddp_dVgs + dIsubLD_dVgs + dIdsIBPC_dVgs - dIdsIBPCs_dVgs ; ydc_d[sNode] = - ( dIddp_dVdse + dIddp_dVgse + dIddp_dVbse ) - dIddp_dVsubs ; ydc_d[sNodePrime] = - dIsubLD_dVds - dIsubLD_dVgs - dIsubLD_dVbs - dIdsIBPC_dVds - dIdsIBPC_dVgs - dIdsIBPC_dVbs - (- dIdsIBPCs_dVds - dIdsIBPCs_dVgs - dIdsIBPCs_dVbs ) - ( dIddp_dVds + dIddp_dVgs + dIddp_dVbs ) ; ydc_d[bNodePrime] = dIddp_dVbse + dIddp_dVbs + dIsubLD_dVbs + dIdsIBPC_dVbs - dIdsIBPCs_dVbs ; /* ydc_d[bNode] = 0.0 ; */ ydc_d[dbNode] = - Gbd ; /* ydc_d[sbNode] = 0.0 ; */ ydc_d[subNode] = dIddp_dVsubs ; ydc_d[tempNode] = dIddp_dT - Gbdt + dIsubLD_dT + dIdsIBPC_dT - dIdsIBPCs_dT ; /* intrinsic drain node */ ydc_dP[dNode] = - (dIddp_dVddp + dIddp_dVdse) + gds_ext ; ydc_dP[dNodePrime] = dIddp_dVddp - dIddp_dVds + gds + dIsub_dVds + dIgidl_dVds - dIgd_dVd ; /* ydc_dP[gNode] = 0.0; */ ydc_dP[gNodePrime] = -dIddp_dVgse - dIddp_dVgs + gm_ext + gm + dIsub_dVgs + dIgidl_dVgs - dIgd_dVg ; ydc_dP[sNode] = dIddp_dVdse + dIddp_dVgse + dIddp_dVbse + dIddp_dVsubs + (-gds_ext -gm_ext -gmbs_ext); ydc_dP[sNodePrime] = -( gds + dIsub_dVds + dIgidl_dVds ) - ( gm + dIsub_dVgs + dIgidl_dVgs ) - ( gmbs + dIsub_dVbs + dIgidl_dVbs ) - dIgd_dVs + ( dIddp_dVds + dIddp_dVgs + dIddp_dVbs ) ; ydc_dP[bNodePrime] = - dIddp_dVbse - dIddp_dVbs + gmbs_ext + gmbs + dIsub_dVbs + dIgidl_dVbs - dIgd_dVb; /* ydc_dP[bNode] = 0.0; */ /* ydc_dP[dbNode] = 0.0 ; */ /* ydc_dP[sbNode] = 0.0 ; */ ydc_dP[subNode] = - dIddp_dVsubs ; ydc_dP[tempNode] = - dIddp_dT + gmT + dIsub_dT + dIgidl_dT - dIgd_dT ; /* gate node */ /* ydc_g[dNode] = 0.0 ; */ /* ydc_g[dNodePrime] = 0.0 ; */ ydc_g[gNode] = dIggp_dVggp ; ydc_g[gNodePrime] = - dIggp_dVggp ; /* ydc_g[sNode] = 0.0 ; */ /* ydc_g[sNodePrime] = 0.0 ; */ /* ydc_g[bNodePrime] = 0.0 ; */ /* ydc_g[bNode] = 0.0 ; */ /* ydc_g[dbNode] = 0.0 ; */ /* ydc_g[sbNode] = 0.0 ; */ /* ydc_g[tempNode] = 0.0 ; */ /* intrinsic gate node */ /* ydc_gP[dNode] = 0.0 ; */ ydc_gP[dNodePrime] = dIgd_dVd + dIgs_dVd + dIgb_dVd ; ydc_gP[gNode] = - dIggp_dVggp ; ydc_gP[gNodePrime] = dIggp_dVggp + dIgd_dVg + dIgs_dVg + dIgb_dVg ; /* ydc_gP[sNode] = 0.0 ; */ ydc_gP[sNodePrime] = dIgd_dVs + dIgs_dVs + dIgb_dVs ; ydc_gP[bNodePrime] = dIgd_dVb + dIgs_dVb + dIgb_dVb ; /* ydc_gP[bNode] = 0.0 ; */ /* ydc_gP[dbNode] = 0.0 ; */ /* ydc_gP[sbNode] = 0.0 ; */ ydc_gP[tempNode] = dIgd_dT + dIgs_dT + dIgb_dT ; /* source node */ ydc_s[dNode] = dIssp_dVdse + dIsubLDs_dVddp - dIdsIBPC_dVddp + dIdsIBPCs_dVddp ; ydc_s[dNodePrime] = dIsubLDs_dVds - dIdsIBPC_dVds + dIdsIBPCs_dVds - dIsubLDs_dVddp + dIdsIBPC_dVddp - dIdsIBPCs_dVddp ; /* ydc_s[gNode] = 0.0 */ ydc_s[gNodePrime] = dIssp_dVgse + dIsubLDs_dVgs - dIdsIBPC_dVgs + dIdsIBPCs_dVgs ; ydc_s[sNode] = dIssp_dVssp - ( dIssp_dVgse + dIssp_dVdse + dIssp_dVbse ) - dIssp_dVsubs + Gbs ; ydc_s[sNodePrime] = - dIssp_dVssp - dIsubLDs_dVds - dIsubLDs_dVgs - dIsubLDs_dVbs - (- dIdsIBPC_dVds - dIdsIBPC_dVgs - dIdsIBPC_dVbs ) - dIdsIBPCs_dVds - dIdsIBPCs_dVgs - dIdsIBPCs_dVbs ; ydc_s[bNodePrime] = dIssp_dVbse + dIsubLDs_dVbs - dIdsIBPC_dVbs + dIdsIBPCs_dVbs ; /* ydc_s[bNode] = 0.0 */ /* ydc_s[dbNode] = 0.0 */ ydc_s[sbNode] = - Gbs ; ydc_s[subNode] = dIssp_dVsubs; ydc_s[tempNode] = dIssp_dT - Gbst + dIsubLDs_dT - dIdsIBPC_dT + dIdsIBPCs_dT ; /* intrinsic source node */ ydc_sP[dNode] = - dIssp_dVdse -gds_ext ; ydc_sP[dNodePrime] = - gds + dIsubs_dVds + dIgisl_dVds - dIgs_dVd ; /* ydc_sP[gNode] = 0.0 ; */ ydc_sP[gNodePrime] = -dIssp_dVgse -gm_ext - gm + dIsubs_dVgs + dIgisl_dVgs - dIgs_dVg ; ydc_sP[sNode] = - dIssp_dVssp - ( - dIssp_dVdse - dIssp_dVgse - dIssp_dVbse ) + dIssp_dVsubs +(gds_ext + gm_ext + gmbs_ext); ydc_sP[sNodePrime] = dIssp_dVssp - ( - gds + dIsubs_dVds + dIgisl_dVds ) - ( - gm + dIsubs_dVgs + dIgisl_dVgs ) - ( - gmbs + dIsubs_dVbs + dIgisl_dVbs ) - dIgs_dVs ; ydc_sP[bNodePrime] = -dIssp_dVbse -gmbs_ext - gmbs + dIsubs_dVbs + dIgisl_dVbs - dIgs_dVb ; /* ydc_sP[bNode] = 0.0 ; */ /* ydc_sP[dbNode] = 0.0 ; */ /* ydc_sP[sbNode] = 0.0 ; */ ydc_sP[subNode] = - dIssp_dVsubs; ydc_sP[tempNode] = -dIssp_dT - gmT + dIsubs_dT + dIgisl_dT - dIgs_dT; /* intrinsic bulk node */ ydc_bP[dNode] = - dIsubLD_dVddp - dIsubLDs_dVddp ; ydc_bP[dNodePrime] = - dIsub_dVds - dIsubs_dVds - dIsubLD_dVds - dIsubLDs_dVds - dIgidl_dVds - dIgb_dVd - dIgisl_dVds - ( - dIsubLD_dVddp - dIsubLDs_dVddp ) ; /* ydc_bP[gNode] = 0.0 ; */ ydc_bP[gNodePrime] = - dIsub_dVgs - dIsubs_dVgs - dIsubLD_dVgs - dIsubLDs_dVgs - dIgidl_dVgs - dIgb_dVg - dIgisl_dVgs ; /* ydc_bP[sNode] = 0.0 ;*/ ydc_bP[sNodePrime] = - ( - dIsub_dVds - dIsubs_dVds - dIsubLD_dVds - dIsubLDs_dVds - dIgidl_dVds - dIgisl_dVds ) - ( - dIsub_dVgs - dIsubs_dVgs - dIsubLD_dVgs - dIsubLDs_dVgs - dIgidl_dVgs - dIgisl_dVgs ) - ( - dIsub_dVbs - dIsubs_dVbs - dIsubLD_dVbs - dIsubLDs_dVbs - dIgidl_dVbs - dIgisl_dVbs ) - dIgb_dVs ; ydc_bP[bNodePrime] = - dIsub_dVbs - dIsubs_dVbs - dIsubLD_dVbs - dIsubLDs_dVbs - dIgidl_dVbs - dIgb_dVb - dIgisl_dVbs + dIbpdb_dVbpdb + dIbpb_dVbpb + dIbpsb_dVbpsb ; ydc_bP[bNode] = - dIbpb_dVbpb ; ydc_bP[dbNode] = - dIbpdb_dVbpdb ; ydc_bP[sbNode] = - dIbpsb_dVbpsb ; ydc_bP[tempNode] = - dIsub_dT - dIsubs_dT - dIsubLD_dT - dIsubLDs_dT - dIgidl_dT - dIgb_dT - dIgisl_dT ; /* bulk node */ /* ydc_b[dNode] = 0.0 ; */ /* ydc_b[dNodePrime] = 0.0 ; */ /* ydc_b[gNode] = 0.0 ; */ /* ydc_b[gNodePrime] = 0.0 ; */ /* ydc_b[sNode] = 0.0 ; */ /* ydc_b[sNodePrime] = 0.0 ; */ ydc_b[bNodePrime] = - dIbpb_dVbpb ; ydc_b[bNode] = dIbpb_dVbpb ; /* ydc_b[dbNode] = 0.0 ; */ /* ydc_b[sbNode] = 0.0 ; */ /* ydc_b[tempNode] = 0.0 ; */ /* drain bulk node */ ydc_db[dNode] = - Gbd ; /* ydc_db[dNodePrime] = 0.0 ; */ /* ydc_db[gNode] = 0.0 ; */ /* ydc_db[gNodePrime] = 0.0 ; */ /* ydc_db[sNode] = 0.0 ; */ /* ydc_db[sNodePrime] = 0.0 ; */ ydc_db[bNodePrime] = - dIbpdb_dVbpdb ; /* ydc_db[bNode] = 0.0 ; */ ydc_db[dbNode] = Gbd + dIbpdb_dVbpdb ; /* ydc_db[sbNode] = 0.0 ; */ ydc_db[tempNode] = Gbdt ; /* source bulk node */ /* ydc_sb[dNode] = 0.0 ; */ /* ydc_sb[dNodePrime] = 0.0 ; */ /* ydc_sb[gNode] = 0.0 ; */ /* ydc_sb[gNodePrime] = 0.0 ; */ ydc_sb[sNode] = - Gbs ; /* ydc_sb[sNodePrime] = 0.0 ; */ ydc_sb[bNodePrime] = - dIbpsb_dVbpsb ; /* ydc_sb[bNode] = 0.0 ; */ /* ydc_sb[dbNode] = 0.0 ; */ ydc_sb[sbNode] = Gbs + dIbpsb_dVbpsb ; ydc_sb[tempNode] = Gbst ; /* temp node */ ydc_t[dNode] = - dP_dVdse ; ydc_t[dNodePrime] = - dP_dVds ; /* ydc_t[gNode] = 0.0 ; */ ydc_t[gNodePrime] = - dP_dVgs - dP_dVgse ; ydc_t[sNode] = - ( - dP_dVdse - dP_dVgse - dP_dVbse ) ; ydc_t[sNodePrime] = - ( - dP_dVds - dP_dVgs - dP_dVbs ) ; ydc_t[bNodePrime] = - dP_dVbs - dP_dVbse ; /* ydc_t[bNode] = 0.0 ; */ /* ydc_t[dbNode] = 0.0 ; */ /* ydc_t[sbNode] = 0.0 ; */ ydc_t[tempNode] = dIth_dT - dP_dT ; /* additional entries for flat nqs handling */ if ( flg_nqs ) { ydc_qi[dNodePrime] = dIqi_nqs_dVds ; ydc_qi[gNodePrime] = dIqi_nqs_dVgs ; ydc_qi[sNodePrime] = -(dIqi_nqs_dVds + dIqi_nqs_dVgs + dIqi_nqs_dVbs) ; ydc_qi[bNodePrime] = dIqi_nqs_dVbs ; ydc_qi[tempNode] = dIqi_nqs_dT ; ydc_qi[qiNode] = dIqi_nqs_dQi_nqs ; /* ydc_qi[qbNode]= 0.0 ; */ ydc_qb[dNodePrime] = dIqb_nqs_dVds ; ydc_qb[gNodePrime] = dIqb_nqs_dVgs ; ydc_qb[sNodePrime] = -(dIqb_nqs_dVds + dIqb_nqs_dVgs + dIqb_nqs_dVbs) ; ydc_qb[bNodePrime] = dIqb_nqs_dVbs ; ydc_qb[tempNode] = dIqb_nqs_dT ; /* ydc_qb[qiNode]= 0.0 ; */ ydc_qb[qbNode] = dIqb_nqs_dQb_nqs ; } /* Preset vectors and matrix for dynamic part */ cq_d = cq_dP = cq_g = cq_gP = cq_s = cq_sP = cq_bP = cq_b = cq_db = cq_sb = cq_t = cq_qi = cq_qb = 0.0 ; for (i = 0; i < XDIM ; i++) { ydyn_d[i] = ydyn_dP[i] = ydyn_g[i] = ydyn_gP[i] = ydyn_s[i] = ydyn_sP[i] = ydyn_bP[i] = ydyn_b[i] = ydyn_db[i] = ydyn_sb[i] = ydyn_t[i] = 0.0; } if (flg_nqs) { for (i = 0; i < XDIM ; i++) { ydyn_qi[i] = ydyn_qb[i] = 0.0; } } ag0 = ckt->CKTag[0]; if (ChargeComputationNeeded) { /* start handling of dynamic part */ if (!ByPass) { /* loading of state vector not necessary in case of Bypass */ /* intrinsic gate node (without fringing charges) */ *(ckt->CKTstate0 + here->HSMHV2qg) = Qg + Qg_nqs + Qgext; /* intrinsic drain node */ *(ckt->CKTstate0 + here->HSMHV2qd) = Qd + Qd_nqs ; /* intrinsic bulk node */ *(ckt->CKTstate0 + here->HSMHV2qb) = Qb + Qb_nqs + Qbext; /* drain bulk node */ *(ckt->CKTstate0 + here->HSMHV2qbd) = Qbd ; /* source bulk node */ *(ckt->CKTstate0 + here->HSMHV2qbs) = Qbs ; /* temp node */ *(ckt->CKTstate0 + here->HSMHV2qth) = Qth ; /* fringing charges */ *(ckt->CKTstate0 + here->HSMHV2qfd) = Qfd ; *(ckt->CKTstate0 + here->HSMHV2qfs) = Qfs ; /* external drain node */ *(ckt->CKTstate0 + here->HSMHV2qdE) = Qdext; /* nqs charges Qi_nqs, Qb_nqs: already loaded above */ /* if ( flg_nqs ) { */ /* *(ckt->CKTstate0 + here->HSMHV2qi_nqs) = Qi_nqs; */ /* *(ckt->CKTstate0 + here->HSMHV2qb_nqs) = Qb_nqs; */ /* } */ } /* ... assemble capacitance matrix */ /* ...... drain node */ ydyn_d[dNode] = dQfd_dVdse + Cbd + dQdext_dVdse ; /* ydyn_d[dNodePrime] = 0.0 ; */ /* ydyn_d[gNode] = 0.0 ; */ ydyn_d[gNodePrime] = dQfd_dVgse + dQdext_dVgse ; ydyn_d[sNode] = - (dQfd_dVdse + dQfd_dVgse+ dQfd_dVbse) - ( dQdext_dVdse + dQdext_dVgse + dQdext_dVbse ) ; /* ydyn_d[sNodePrime ] = 0.0 ; */ ydyn_d[bNodePrime] = dQfd_dVbse + dQdext_dVbse; /* ydyn_d[bNode ] = 0.0 ; */ ydyn_d[dbNode] = - Cbd ; /* ydyn_d[sbNode ] = 0.0 ; */ ydyn_d[tempNode] = dQfd_dT - Cbdt + dQdext_dT ; /* ...... intrinsic drain node */ /* ydyn_dP[dNode] = 0.0 ; */ ydyn_dP[dNodePrime] = dQd_dVds ; /* ydyn_dP[gNode] = 0.0 ; */ ydyn_dP[gNodePrime] = dQd_dVgs ; /* ydyn_dP[sNode] = 0.0 ; */ ydyn_dP[sNodePrime] = - ( dQd_dVds + dQd_dVgs + dQd_dVbs ) ; ydyn_dP[bNodePrime] = dQd_dVbs ; /* ydyn_dP[bNode] = 0.0 ; */ /* ydyn_dP[dbNode] = 0.0 ; */ /* ydyn_dP[sbNode] = 0.0 ; */ ydyn_dP[tempNode] = dQd_dT ; /* ...... gate node */ /* (no entry) */ /* ...... intrinsic gate node */ ydyn_gP[dNode] = -dQfd_dVdse - dQfs_dVdse + dQgext_dVdse ; ydyn_gP[dNodePrime] = dQg_dVds ; /* ydyn_gP[gNode] = 0.0 ; */ ydyn_gP[gNodePrime] = dQg_dVgs -dQfd_dVgse - dQfs_dVgse + dQgext_dVgse ; ydyn_gP[sNode] = dQfd_dVdse + dQfs_dVdse + dQfd_dVgse + dQfs_dVgse + dQfd_dVbse + dQfs_dVbse - ( dQgext_dVdse + dQgext_dVgse + dQgext_dVbse ) ; ydyn_gP[sNodePrime] = -( dQg_dVds + dQg_dVgs + dQg_dVbs ) ; ydyn_gP[bNodePrime] = dQg_dVbs -dQfd_dVbse - dQfs_dVbse + dQgext_dVbse ; /* ydyn_gP[bNode] = 0.0 ; */ /* ydyn_gP[dbNode] = 0.0 ; */ /* ydyn_gP[sbNode] = 0.0 ; */ ydyn_gP[tempNode] = dQg_dT - dQfd_dT - dQfs_dT + dQgext_dT ; /* ...... source node */ ydyn_s[dNode] = dQfs_dVdse + dQsext_dVdse ; /* ydyn_d[dNodePrime ] = 0.0 ; */ /* ydyn_d[gNode ] = 0.0 ; */ ydyn_s[gNodePrime] = dQfs_dVgse + dQsext_dVgse ; ydyn_s[sNode] = Cbs - (dQfs_dVdse + dQfs_dVgse+ dQfs_dVbse) - ( dQsext_dVdse + dQsext_dVgse + dQsext_dVbse ) ; /* ydyn_d[sNodePrime ] = 0.0 ; */ ydyn_s[bNodePrime] = dQfs_dVbse + dQsext_dVbse ; /* ydyn_d[bNode ] = 0.0 ; */ /* ydyn_d[dbNode ] = 0.0 ; */ ydyn_s[sbNode] = - Cbs ; ydyn_s[tempNode] = dQfs_dT - Cbst + dQsext_dT ; /* ...... intrinsic source node */ /* ydyn_sP[dNode] = 0.0 ; */ ydyn_sP[dNodePrime] = dQs_dVds ; /* ydyn_sP[gNode] = 0.0 ; */ ydyn_sP[gNodePrime] = dQs_dVgs ; /* ydyn_sP[sNode] = 0.0 ; */ ydyn_sP[sNodePrime] = - ( dQs_dVds + dQs_dVgs + dQs_dVbs ); ydyn_sP[bNodePrime] = dQs_dVbs ; /* ydyn_sP[bNode] = 0.0 ; */ /* ydyn_sP[dbNode] = 0.0 ; */ /* ydyn_sP[sbNode] = 0.0 ; */ ydyn_sP[tempNode] = dQs_dT ; /* ...... intrinsic bulk node */ ydyn_bP[dNode] = dQbext_dVdse ; ydyn_bP[dNodePrime] = dQb_dVds ; /* ydyn_bP[gNode] = 0.0 ; */ ydyn_bP[gNodePrime] = dQb_dVgs + dQbext_dVgse ; ydyn_bP[sNode] = - ( dQbext_dVdse + dQbext_dVgse + dQbext_dVbse ) ; ydyn_bP[sNodePrime] = - ( dQb_dVds + dQb_dVgs + dQb_dVbs ); ydyn_bP[bNodePrime] = dQb_dVbs + dQbext_dVbse ; /* ydyn_bP[bNode] = 0.0 ; */ /* ydyn_bP[dbNode] = 0.0 ; */ /* ydyn_bP[sbNode] = 0.0 ; */ ydyn_bP[tempNode] = dQb_dT + dQbext_dT ; /* ...... bulk node */ /* (no entry) */ /* ...... drain bulk node */ ydyn_db[dNode] = - Cbd ; /* ydyn_db[dNodePrime] = 0.0 ; */ /* ydyn_db[gNode] = 0.0 ; */ /* ydyn_db[gNodePrime] = 0.0 ; */ /* ydyn_db[sNode] = 0.0 ; */ /* ydyn_db[sNodePrime] = 0.0 ; */ /* ydyn_db[bNodePrime] = 0.0 ; */ /* ydyn_db[bNode] = 0.0 ; */ ydyn_db[dbNode] = Cbd ; /* ydyn_db[sbNode] = 0.0 ; */ ydyn_db[tempNode] = Cbdt ; /* ...... source bulk node */ /* ydyn_sb[dNode] = 0.0 ; */ /* ydyn_sb[dNodePrime] = 0.0 ; */ /* ydyn_sb[gNode] = 0.0 ; */ /* ydyn_sb[gNodePrime] = 0.0 ; */ ydyn_sb[sNode] = - Cbs ; /* ydyn_sb[sNodePrime] = 0.0 ; */ /* ydyn_sb[bNodePrime] = 0.0 ; */ /* ydyn_sb[bNode] = 0.0 ; */ /* ydyn_sb[dbNode] = 0.0 ; */ ydyn_sb[sbNode] = Cbs ; ydyn_sb[tempNode] = Cbst ; /* ...... temp node */ /* ydyn_t[dNode] = 0.0 ; */ /* ydyn_t[dNodePrime] = 0.0 ; */ /* ydyn_t[gNode] = 0.0 ; */ /* ydyn_t[gNodePrime] = 0.0 ; */ /* ydyn_t[sNode] = 0.0 ; */ /* ydyn_t[sNodePrime] = 0.0 ; */ /* ydyn_t[bNodePrime] = 0.0 ; */ /* ydyn_t[bNode] = 0.0 ; */ /* ydyn_t[dbNode] = 0.0 ; */ /* ydyn_t[sbNode] = 0.0 ; */ ydyn_t[tempNode] = Cth ; /* additional entries for flat nqs handling */ if (flg_nqs) { /* ...... intrinsic drain node */ /* ydyn_dP[dNode] += 0.0 ; */ ydyn_dP[dNodePrime] += dQd_nqs_dVds ; /* ydyn_dP[gNode] += 0.0 ; */ ydyn_dP[gNodePrime] += dQd_nqs_dVgs ; /* ydyn_dP[sNode] += 0.0 ; */ ydyn_dP[sNodePrime] += - ( dQd_nqs_dVds + dQd_nqs_dVgs + dQd_nqs_dVbs ) ; ydyn_dP[bNodePrime] += dQd_nqs_dVbs ; /* ydyn_dP[bNode] += 0.0 ; */ /* ydyn_dP[dbNode] += 0.0 ; */ /* ydyn_dP[sbNode] += 0.0 ; */ ydyn_dP[tempNode] += dQd_nqs_dT ; ydyn_dP[qiNode] = dQd_nqs_dQi_nqs ; /* ...... intrinsic gate node */ /* ydyn_gP[dNode] += 0.0 ; */ /* ydyn_gP[dNodePrime] += 0.0 ; */ /* ydyn_gP[gNode] += 0.0 ; */ /* ydyn_gP[gNodePrime] += 0.0 ; */ /* ydyn_gP[sNode] += 0.0 ; */ /* ydyn_gP[sNodePrime] += 0.0 ; */ /* ydyn_gP[bNodePrime] += 0.0 ; */ /* ydyn_gP[bNode] += 0.0 ; */ /* ydyn_gP[dbNode] += 0.0 ; */ /* ydyn_gP[sbNode] += 0.0 ; */ /* ydyn_gP[tempNode] += 0.0 ; */ ydyn_gP[qiNode] = dQg_nqs_dQi_nqs ; ydyn_gP[qbNode] = dQg_nqs_dQb_nqs ; /* ...... intrinsic source node */ /* ydyn_sP[dNode] += 0.0 ; */ ydyn_sP[dNodePrime] += dQs_nqs_dVds ; /* ydyn_sP[gNode] += 0.0 ; */ ydyn_sP[gNodePrime] += dQs_nqs_dVgs ; /* ydyn_sP[sNode] += 0.0 ; */ ydyn_sP[sNodePrime] += - ( dQs_nqs_dVds + dQs_nqs_dVgs + dQs_nqs_dVbs ); ydyn_sP[bNodePrime] += dQs_nqs_dVbs ; /* ydyn_sP[bNode] += 0.0 ; */ /* ydyn_sP[dbNode] += 0.0 ; */ /* ydyn_sP[sbNode] += 0.0 ; */ ydyn_sP[tempNode] += dQs_nqs_dT ; ydyn_sP[qiNode] = dQs_nqs_dQi_nqs ; /* ...... intrinsic bulk node */ /* ydyn_bP[dNode] += 0.0 ; */ /* ydyn_bP[dNodePrime] += 0.0 ; */ /* ydyn_bP[gNode] += 0.0 ; */ /* ydyn_bP[gNodePrime] += 0.0 ; */ /* ydyn_bP[sNode] += 0.0 ; */ /* ydyn_bP[sNodePrime] += 0.0 ; */ /* ydyn_bP[bNodePrime] += 0.0 ; */ /* ydyn_bP[bNode] += 0.0 ; */ /* ydyn_bP[dbNode] += 0.0 ; */ /* ydyn_bP[sbNode] += 0.0 ; */ /* ydyn_bP[tempNode] += 0.0 ; */ ydyn_bP[qbNode] = 1.0 ; /* ...... qi node */ /* ydyn_qi[dNodePrime] = 0.0 ; */ /* ydyn_qi[gNodePrime] = 0.0 ; */ /* ydyn_qi[sNodePrime] = 0.0 ; */ /* ydyn_qi[bNodePrime] = 0.0 ; */ /* ydyn_qi[tempNode] = 0.0 ; */ ydyn_qi[qiNode] = 1.0 ; /* ydyn_qi[qbNode] = 0.0 ; */ /* ...... qb node */ /* ydyn_qb[dNodePrime] = 0.0 ; */ /* ydyn_qb[gNodePrime] = 0.0 ; */ /* ydyn_qb[sNodePrime] = 0.0 ; */ /* ydyn_qb[bNodePrime] = 0.0 ; */ /* ydyn_qb[tempNode] = 0.0 ; */ /* ydyn_qb[qiNode] = 0.0 ; */ ydyn_qb[qbNode] = 1.0 ; } if (!ByPass) { /* integrate etc. only necessary if not in Bypass mode! */ /* store small signal parameters */ if (ckt->CKTmode & MODEINITSMSIG) { /* printf("HSMHV2_load: (small signal) ByPass=%d\n",ByPass); */ /* printf("HSMHV2_load: ydc_dP=%e %e %e %e %e %e %e %e\n", ydc_dP[0],ydc_dP[1],ydc_dP[2],ydc_dP[3],ydc_dP[4],ydc_dP[5],ydc_dP[6],ydc_dP[7]); printf("HSMHV2_load: ych_dP=%e %e %e %e %e %e %e %e\n", ydyn_dP[0],ydyn_dP[1],ydyn_dP[2],ydyn_dP[3],ydyn_dP[4],ydyn_dP[5],ydyn_dP[6],ydyn_dP[7]); */ /* dc matrix into structure 0724*/ for (i = 0; i < XDIM; i++) { here->HSMHV2_ydc_d[i] = ydc_d[i]; here->HSMHV2_ydc_dP[i] = ydc_dP[i]; here->HSMHV2_ydc_g[i] = ydc_g[i]; here->HSMHV2_ydc_gP[i] = ydc_gP[i]; here->HSMHV2_ydc_s[i] = ydc_s[i]; here->HSMHV2_ydc_sP[i] = ydc_sP[i]; here->HSMHV2_ydc_bP[i] = ydc_bP[i]; here->HSMHV2_ydc_b[i] = ydc_b[i]; here->HSMHV2_ydc_db[i] = ydc_db[i]; here->HSMHV2_ydc_sb[i] = ydc_sb[i]; here->HSMHV2_ydc_t[i] = ydc_t[i]; } /* capacitance matrix into structure 0724*/ for (i = 0; i < XDIM; i++) { here->HSMHV2_ydyn_d[i] = ydyn_d[i]; here->HSMHV2_ydyn_dP[i] = ydyn_dP[i]; here->HSMHV2_ydyn_g[i] = ydyn_g[i]; here->HSMHV2_ydyn_gP[i] = ydyn_gP[i]; here->HSMHV2_ydyn_s[i] = ydyn_s[i]; here->HSMHV2_ydyn_sP[i] = ydyn_sP[i]; here->HSMHV2_ydyn_bP[i] = ydyn_bP[i]; here->HSMHV2_ydyn_b[i] = ydyn_b[i]; here->HSMHV2_ydyn_db[i] = ydyn_db[i]; here->HSMHV2_ydyn_sb[i] = ydyn_sb[i]; here->HSMHV2_ydyn_t[i] = ydyn_t[i]; } if (flg_nqs) { for (i = 0; i < XDIM; i++) { here->HSMHV2_ydc_qi[i] = ydc_qi[i]; here->HSMHV2_ydc_qb[i] = ydc_qb[i]; here->HSMHV2_ydyn_qi[i] = ydyn_qi[i]; here->HSMHV2_ydyn_qb[i] = ydyn_qb[i]; } } goto line1000; /* that's all for small signal analyses */ } /* Continue handling of dynamic part: */ /* ... calculate time derivatives of node charges */ if (ckt->CKTmode & MODEINITTRAN) { /* at the very first iteration of the first timepoint: copy charges into previous state -> the integrator may use them ... */ *(ckt->CKTstate1 + here->HSMHV2qb) = *(ckt->CKTstate0 + here->HSMHV2qb); *(ckt->CKTstate1 + here->HSMHV2qg) = *(ckt->CKTstate0 + here->HSMHV2qg); *(ckt->CKTstate1 + here->HSMHV2qd) = *(ckt->CKTstate0 + here->HSMHV2qd); *(ckt->CKTstate1 + here->HSMHV2qth) = *(ckt->CKTstate0 + here->HSMHV2qth); *(ckt->CKTstate1 + here->HSMHV2qbs) = *(ckt->CKTstate0 + here->HSMHV2qbs); *(ckt->CKTstate1 + here->HSMHV2qbd) = *(ckt->CKTstate0 + here->HSMHV2qbd); *(ckt->CKTstate1 + here->HSMHV2qfd) = *(ckt->CKTstate0 + here->HSMHV2qfd); *(ckt->CKTstate1 + here->HSMHV2qfs) = *(ckt->CKTstate0 + here->HSMHV2qfs); *(ckt->CKTstate1 + here->HSMHV2qdE) = *(ckt->CKTstate0 + here->HSMHV2qdE); if (flg_nqs) { *(ckt->CKTstate1 + here->HSMHV2qi_nqs) = *(ckt->CKTstate0 + here->HSMHV2qi_nqs); *(ckt->CKTstate1 + here->HSMHV2qb_nqs) = *(ckt->CKTstate0 + here->HSMHV2qb_nqs); } } return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSMHV2qb)); return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSMHV2qg)); return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSMHV2qd)); return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSMHV2qbs)); return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSMHV2qbd)); return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSMHV2qth)); return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSMHV2qfd)); return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSMHV2qfs)); return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSMHV2qdE)); if (flg_nqs) { return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSMHV2qi_nqs)); return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSMHV2qb_nqs)); } if (ckt->CKTmode & MODEINITTRAN) { /* at the very first iteration of the first timepoint: copy currents into previous state -> the integrator may use them ... */ *(ckt->CKTstate1 + here->HSMHV2cqb) = *(ckt->CKTstate0 + here->HSMHV2cqb); *(ckt->CKTstate1 + here->HSMHV2cqg) = *(ckt->CKTstate0 + here->HSMHV2cqg); *(ckt->CKTstate1 + here->HSMHV2cqd) = *(ckt->CKTstate0 + here->HSMHV2cqd); *(ckt->CKTstate1 + here->HSMHV2cqth) = *(ckt->CKTstate0 + here->HSMHV2cqth); *(ckt->CKTstate1 + here->HSMHV2cqbs) = *(ckt->CKTstate0 + here->HSMHV2cqbs); *(ckt->CKTstate1 + here->HSMHV2cqbd) = *(ckt->CKTstate0 + here->HSMHV2cqbd); *(ckt->CKTstate1 + here->HSMHV2cqfd) = *(ckt->CKTstate0 + here->HSMHV2cqfd); *(ckt->CKTstate1 + here->HSMHV2cqfs) = *(ckt->CKTstate0 + here->HSMHV2cqfs); *(ckt->CKTstate1 + here->HSMHV2cqdE) = *(ckt->CKTstate0 + here->HSMHV2cqdE); if (flg_nqs) { *(ckt->CKTstate1 + here->HSMHV2dotqi_nqs) = *(ckt->CKTstate0 + here->HSMHV2dotqi_nqs); *(ckt->CKTstate1 + here->HSMHV2dotqb_nqs) = *(ckt->CKTstate0 + here->HSMHV2dotqb_nqs); } } } /* ... finally gather displacement currents from data structures */ cq_dP = *(ckt->CKTstate0 + here->HSMHV2cqd); cq_gP = *(ckt->CKTstate0 + here->HSMHV2cqg); cq_bP = *(ckt->CKTstate0 + here->HSMHV2cqb); cq_sP = - *(ckt->CKTstate0 + here->HSMHV2cqg) - *(ckt->CKTstate0 + here->HSMHV2cqb) - *(ckt->CKTstate0 + here->HSMHV2cqd); cq_dE = *(ckt->CKTstate0 + here->HSMHV2cqdE); cq_db = *(ckt->CKTstate0 + here->HSMHV2cqbd); cq_sb = *(ckt->CKTstate0 + here->HSMHV2cqbs); cq_g = 0.0 ; cq_b = 0.0 ; /* displacement currents at outer drain/source node (fringing part only!) */ cq_d = *(ckt->CKTstate0 + here->HSMHV2cqfd); cq_s = *(ckt->CKTstate0 + here->HSMHV2cqfs); cq_t = *(ckt->CKTstate0 + here->HSMHV2cqth); /* displacement currents due to nqs */ if (flg_nqs) { cq_qi = *(ckt->CKTstate0 + here->HSMHV2dotqi_nqs); cq_qb = *(ckt->CKTstate0 + here->HSMHV2dotqb_nqs); } else { cq_qi = cq_qb = 0.0 ; } /* ... and, if necessary: Extrapolate displacement currents onto x-values */ if (delvdbd || deldeltemp) { cq_db += ag0*(Cbd*delvdbd + Cbdt*deldeltemp) ; } if (delvsbs || deldeltemp) { cq_sb += ag0*(Cbs*delvsbs + Cbst*deldeltemp) ; } if (delvgs || delvds || delvbs || deldeltemp) { cq_gP += ag0*(dQg_dVgs*delvgs + dQg_dVds*delvds + dQg_dVbs*delvbs + dQg_dT*deldeltemp) ; cq_dP += ag0*(dQd_dVgs*delvgs + dQd_dVds*delvds + dQd_dVbs*delvbs + dQd_dT*deldeltemp) ; cq_sP += ag0*(dQs_dVgs*delvgs + dQs_dVds*delvds + dQs_dVbs*delvbs + dQs_dT*deldeltemp) ; cq_bP = - ( cq_gP + cq_dP + cq_sP ); } if (deldeltemp) { cq_t += ag0*Cth *deldeltemp ; cq_d += ag0*dQfd_dT*deldeltemp ; cq_s += ag0*dQfs_dT*deldeltemp ; cq_gE += ag0*dQgext_dT*deldeltemp ; cq_dE += ag0*dQdext_dT*deldeltemp ; cq_bE += ag0*dQbext_dT*deldeltemp ; cq_sE = - ( cq_gE + cq_dE + cq_bE ); } if (delvgse || delvdse || delvbse) { cq_d += ag0*(dQfd_dVgse*delvgse + dQfd_dVdse*delvdse + dQfd_dVbse*delvbse) ; cq_s += ag0*(dQfs_dVgse*delvgse + dQfs_dVdse*delvdse + dQfs_dVbse*delvbse) ; cq_gE += ag0*(dQgext_dVgse*delvgse + dQgext_dVdse*delvdse + dQgext_dVbse*delvbse) ; cq_dE += ag0*(dQdext_dVgse*delvgse + dQdext_dVdse*delvdse + dQdext_dVbse*delvbse) ; cq_bE += ag0*(dQbext_dVgse*delvgse + dQbext_dVdse*delvdse + dQbext_dVbse*delvbse) ; cq_sE = - ( cq_gE + cq_dE + cq_bE ); } if (flg_nqs) { if (delvgs || delvds || delvbs || deldeltemp) { cq_dP += ag0*(dQd_nqs_dVgs*delvgs + dQd_nqs_dVds*delvds + dQd_nqs_dVbs*delvbs + dQd_nqs_dT*deldeltemp) ; cq_sP += ag0*(dQs_nqs_dVgs*delvgs + dQs_nqs_dVds*delvds + dQs_nqs_dVbs*delvbs + dQs_nqs_dT*deldeltemp) ; cq_bP = - ( cq_gP + cq_dP + cq_sP ); /* should be superfluous ? */ } if (delQi_nqs) { cq_dP += ag0*dQd_nqs_dQi_nqs*delQi_nqs ; cq_gP += ag0*dQg_nqs_dQi_nqs*delQi_nqs ; cq_sP += ag0*dQs_nqs_dQi_nqs*delQi_nqs ; cq_qi += ag0* 1.0 *delQi_nqs ; } if (delQb_nqs) { cq_gP += ag0*dQg_nqs_dQb_nqs*delQb_nqs ; cq_bP += ag0* 1.0 *delQb_nqs ; cq_qb += ag0* 1.0 *delQb_nqs ; } } } /* End of handling dynamic part */ /* Assemble total node currents (type-handling shifted to stamping) */ cur_d = i_d + cq_d - cq_db + cq_dE ; cur_dP = i_dP + cq_dP ; cur_g = i_g + cq_g ; cur_gP = i_gP + cq_gP - cq_d - cq_s + cq_gE ; cur_s = i_s + cq_s - cq_sb + cq_sE ; cur_sP = i_sP + cq_sP; cur_bP = i_bP + cq_bP + cq_bE ; cur_b = i_b + cq_b; cur_db = i_db + cq_db; cur_sb = i_sb + cq_sb; cur_t = i_t + cq_t; cur_qi = i_qi + cq_qi; cur_qb = i_qb + cq_qb; /* Now we can start stamping ... */ /* ... right hand side: subtract total node currents */ *(ckt->CKTrhs + here->HSMHV2dNode) -= model->HSMHV2_type * cur_d; *(ckt->CKTrhs + here->HSMHV2dNodePrime) -= model->HSMHV2_type * cur_dP; *(ckt->CKTrhs + here->HSMHV2gNode) -= model->HSMHV2_type * cur_g; *(ckt->CKTrhs + here->HSMHV2gNodePrime) -= model->HSMHV2_type * cur_gP; *(ckt->CKTrhs + here->HSMHV2sNode) -= model->HSMHV2_type * cur_s; *(ckt->CKTrhs + here->HSMHV2sNodePrime) -= model->HSMHV2_type * cur_sP; *(ckt->CKTrhs + here->HSMHV2bNodePrime) -= model->HSMHV2_type * cur_bP; *(ckt->CKTrhs + here->HSMHV2bNode) -= model->HSMHV2_type * cur_b; *(ckt->CKTrhs + here->HSMHV2dbNode) -= model->HSMHV2_type * cur_db; *(ckt->CKTrhs + here->HSMHV2sbNode) -= model->HSMHV2_type * cur_sb; if( here->HSMHV2_coselfheat > 0) { *(ckt->CKTrhs + here->HSMHV2tempNode) -= cur_t; /* temp node independent of model type! */ } if (flg_nqs) { *(ckt->CKTrhs + here->HSMHV2qiNode) -= cur_qi; *(ckt->CKTrhs + here->HSMHV2qbNode) -= cur_qb; } /* ... finally stamp matrix */ /*drain*/ *(here->HSMHV2DdPtr) += ydc_d[dNode] + ag0*ydyn_d[dNode]; *(here->HSMHV2DdpPtr) += ydc_d[dNodePrime] + ag0*ydyn_d[dNodePrime]; *(here->HSMHV2DgpPtr) += ydc_d[gNodePrime] + ag0*ydyn_d[gNodePrime]; *(here->HSMHV2DsPtr) += ydc_d[sNode] + ag0*ydyn_d[sNode]; *(here->HSMHV2DspPtr) += ydc_d[sNodePrime] + ag0*ydyn_d[sNodePrime]; *(here->HSMHV2DbpPtr) += ydc_d[bNodePrime] + ag0*ydyn_d[bNodePrime]; *(here->HSMHV2DdbPtr) += ydc_d[dbNode] + ag0*ydyn_d[dbNode]; if (flg_subNode > 0) { *(here->HSMHV2DsubPtr) += ydc_d[subNode]; } if( here->HSMHV2_coselfheat > 0) { /* temp entries in matrix dependent on model type */ *(here->HSMHV2DtempPtr) += model->HSMHV2_type * (ydc_d[tempNode] + ag0*ydyn_d[tempNode]); } /*drain prime*/ *(here->HSMHV2DPdPtr) += ydc_dP[dNode] + ag0*ydyn_dP[dNode]; *(here->HSMHV2DPdpPtr) += ydc_dP[dNodePrime] + ag0*ydyn_dP[dNodePrime]; *(here->HSMHV2DPgpPtr) += ydc_dP[gNodePrime] + ag0*ydyn_dP[gNodePrime]; *(here->HSMHV2DPsPtr) += ydc_dP[sNode] + ag0*ydyn_dP[sNode]; *(here->HSMHV2DPspPtr) += ydc_dP[sNodePrime] + ag0*ydyn_dP[sNodePrime]; *(here->HSMHV2DPbpPtr) += ydc_dP[bNodePrime] + ag0*ydyn_dP[bNodePrime]; if (flg_subNode > 0) { *(here->HSMHV2DPsubPtr) += ydc_dP[subNode]; } if( here->HSMHV2_coselfheat > 0) { /* temp entries in matrix dependent on model type */ *(here->HSMHV2DPtempPtr) += model->HSMHV2_type * (ydc_dP[tempNode] + ag0*ydyn_dP[tempNode]); } if (flg_nqs) { *(here->HSMHV2DPqiPtr) += model->HSMHV2_type * (ydc_dP[qiNode] + ag0*ydyn_dP[qiNode]); } /*gate*/ *(here->HSMHV2GgPtr) += ydc_g[gNode] + ag0*ydyn_g[gNode]; *(here->HSMHV2GgpPtr) += ydc_g[gNodePrime] + ag0*ydyn_g[gNodePrime]; /*gate prime*/ *(here->HSMHV2GPdPtr) += ydc_gP[dNode] + ag0*ydyn_gP[dNode]; *(here->HSMHV2GPdpPtr) += ydc_gP[dNodePrime] + ag0*ydyn_gP[dNodePrime]; *(here->HSMHV2GPgPtr) += ydc_gP[gNode] + ag0*ydyn_gP[gNode]; *(here->HSMHV2GPgpPtr) += ydc_gP[gNodePrime] + ag0*ydyn_gP[gNodePrime]; *(here->HSMHV2GPsPtr) += ydc_gP[sNode] + ag0*ydyn_gP[sNode]; *(here->HSMHV2GPspPtr) += ydc_gP[sNodePrime] + ag0*ydyn_gP[sNodePrime]; *(here->HSMHV2GPbpPtr) += ydc_gP[bNodePrime] + ag0*ydyn_gP[bNodePrime]; if( here->HSMHV2_coselfheat > 0) { /* temp entries in matrix dependent on model type */ *(here->HSMHV2GPtempPtr) += model->HSMHV2_type * (ydc_gP[tempNode] + ag0*ydyn_gP[tempNode]); } if (flg_nqs) { *(here->HSMHV2GPqiPtr) += model->HSMHV2_type * (ydc_gP[qiNode] + ag0*ydyn_gP[qiNode]); *(here->HSMHV2GPqbPtr) += model->HSMHV2_type * (ydc_gP[qbNode] + ag0*ydyn_gP[qbNode]); } /*source*/ *(here->HSMHV2SdPtr) += ydc_s[dNode] + ag0*ydyn_s[dNode]; *(here->HSMHV2SsPtr) += ydc_s[sNode] + ag0*ydyn_s[sNode]; *(here->HSMHV2SdpPtr) += ydc_s[dNodePrime] + ag0*ydyn_s[dNodePrime]; *(here->HSMHV2SgpPtr) += ydc_s[gNodePrime] + ag0*ydyn_s[gNodePrime]; *(here->HSMHV2SspPtr) += ydc_s[sNodePrime] + ag0*ydyn_s[sNodePrime]; *(here->HSMHV2SbpPtr) += ydc_s[bNodePrime] + ag0*ydyn_s[bNodePrime]; *(here->HSMHV2SsbPtr) += ydc_s[sbNode] + ag0*ydyn_s[sbNode]; if (flg_subNode > 0) { *(here->HSMHV2SsubPtr) += ydc_s[subNode]; } if( here->HSMHV2_coselfheat > 0) { /* temp entries in matrix dependent on model type */ *(here->HSMHV2StempPtr) += model->HSMHV2_type * (ydc_s[tempNode]+ ag0*ydyn_s[tempNode]); } /*source prime*/ *(here->HSMHV2SPdPtr) += ydc_sP[dNode] + ag0*ydyn_sP[dNode]; *(here->HSMHV2SPdpPtr) += ydc_sP[dNodePrime] + ag0*ydyn_sP[dNodePrime]; *(here->HSMHV2SPgpPtr) += ydc_sP[gNodePrime] + ag0*ydyn_sP[gNodePrime]; *(here->HSMHV2SPsPtr) += ydc_sP[sNode] + ag0*ydyn_sP[sNode]; *(here->HSMHV2SPspPtr) += ydc_sP[sNodePrime] + ag0*ydyn_sP[sNodePrime]; *(here->HSMHV2SPbpPtr) += ydc_sP[bNodePrime] + ag0*ydyn_sP[bNodePrime]; if (flg_subNode > 0) { *(here->HSMHV2SPsubPtr) += ydc_sP[subNode]; } if( here->HSMHV2_coselfheat > 0) { /* temp entries in matrix dependent on model type */ *(here->HSMHV2SPtempPtr) += model->HSMHV2_type * (ydc_sP[tempNode] + ag0*ydyn_sP[tempNode]); } if (flg_nqs) { *(here->HSMHV2SPqiPtr) += model->HSMHV2_type * (ydc_sP[qiNode] + ag0*ydyn_sP[qiNode]); } /*bulk prime*/ *(here->HSMHV2BPdPtr) += ydc_bP[dNode] + ag0*ydyn_bP[dNode]; *(here->HSMHV2BPdpPtr) += ydc_bP[dNodePrime] + ag0*ydyn_bP[dNodePrime]; *(here->HSMHV2BPgpPtr) += ydc_bP[gNodePrime] + ag0*ydyn_bP[gNodePrime]; *(here->HSMHV2BPspPtr) += ydc_bP[sNodePrime] + ag0*ydyn_bP[sNodePrime]; *(here->HSMHV2BPsPtr) += ydc_bP[sNode] + ag0*ydyn_bP[sNode]; *(here->HSMHV2BPbpPtr) += ydc_bP[bNodePrime] + ag0*ydyn_bP[bNodePrime]; *(here->HSMHV2BPbPtr) += ydc_bP[bNode] + ag0*ydyn_bP[bNode]; *(here->HSMHV2BPdbPtr) += ydc_bP[dbNode] + ag0*ydyn_bP[dbNode]; *(here->HSMHV2BPsbPtr) += ydc_bP[sbNode] + ag0*ydyn_bP[sbNode]; if( here->HSMHV2_coselfheat > 0) { /* temp entries in matrix dependent on model type */ *(here->HSMHV2BPtempPtr) += model->HSMHV2_type * (ydc_bP[tempNode] + ag0*ydyn_bP[tempNode]); } if (flg_nqs) { *(here->HSMHV2BPqbPtr) += model->HSMHV2_type * (ydc_bP[qbNode] + ag0*ydyn_bP[qbNode]); } /*bulk*/ *(here->HSMHV2BbpPtr) += ydc_b[bNodePrime] + ag0*ydyn_b[bNodePrime]; *(here->HSMHV2BbPtr) += ydc_b[bNode] + ag0*ydyn_b[bNode]; /*drain bulk*/ *(here->HSMHV2DBdPtr) += ydc_db[dNode] + ag0*ydyn_db[dNode]; *(here->HSMHV2DBbpPtr) += ydc_db[bNodePrime] + ag0*ydyn_db[bNodePrime]; *(here->HSMHV2DBdbPtr) += ydc_db[dbNode] + ag0*ydyn_db[dbNode]; if( here->HSMHV2_coselfheat > 0) { /* temp entries in matrix dependent on model type */ *(here->HSMHV2DBtempPtr) += model->HSMHV2_type * (ydc_db[tempNode] + ag0*ydyn_db[tempNode]); } /*source bulk*/ *(here->HSMHV2SBsPtr) += ydc_sb[sNode] + ag0*ydyn_sb[sNode]; *(here->HSMHV2SBbpPtr) += ydc_sb[bNodePrime] + ag0*ydyn_sb[bNodePrime]; *(here->HSMHV2SBsbPtr) += ydc_sb[sbNode] + ag0*ydyn_sb[sbNode]; if( here->HSMHV2_coselfheat > 0) { /* temp entries in matrix dependent on model type */ *(here->HSMHV2SBtempPtr) += model->HSMHV2_type * (ydc_sb[tempNode] + ag0*ydyn_sb[tempNode]); } /*temp*/ if( here->HSMHV2_coselfheat > 0) { /* temp entries in matrix dependent on model type */ *(here->HSMHV2TempdPtr) += model->HSMHV2_type * (ydc_t[dNode] + ag0*ydyn_t[dNode] ); *(here->HSMHV2TempdpPtr) += model->HSMHV2_type * (ydc_t[dNodePrime] + ag0*ydyn_t[dNodePrime]); *(here->HSMHV2TempgpPtr) += model->HSMHV2_type * (ydc_t[gNodePrime] + ag0*ydyn_t[gNodePrime]); *(here->HSMHV2TempsPtr) += model->HSMHV2_type * (ydc_t[sNode] + ag0*ydyn_t[sNode] ); *(here->HSMHV2TempspPtr) += model->HSMHV2_type * (ydc_t[sNodePrime] + ag0*ydyn_t[sNodePrime]); *(here->HSMHV2TempbpPtr) += model->HSMHV2_type * (ydc_t[bNodePrime] + ag0*ydyn_t[bNodePrime]); /* no type factor at main diagonal temp entry! */ *(here->HSMHV2TemptempPtr) += ydc_t[tempNode] + ag0*ydyn_t[tempNode]; } /* additional entries for flat nqs handling */ if ( flg_nqs ) { /*qi*/ *(here->HSMHV2QIdpPtr) += model->HSMHV2_type * (ydc_qi[dNodePrime] + ag0*ydyn_qi[dNodePrime]); *(here->HSMHV2QIgpPtr) += model->HSMHV2_type * (ydc_qi[gNodePrime] + ag0*ydyn_qi[gNodePrime]); *(here->HSMHV2QIspPtr) += model->HSMHV2_type * (ydc_qi[sNodePrime] + ag0*ydyn_qi[sNodePrime]); *(here->HSMHV2QIbpPtr) += model->HSMHV2_type * (ydc_qi[bNodePrime] + ag0*ydyn_qi[bNodePrime]); *(here->HSMHV2QIqiPtr) += (ydc_qi[qiNode] + ag0*ydyn_qi[qiNode]); if ( here->HSMHV2_coselfheat > 0 ) { /* self heating */ *(here->HSMHV2QItempPtr) += (ydc_qi[tempNode] + ag0*ydyn_qi[tempNode]); } /*qb*/ *(here->HSMHV2QBdpPtr) += model->HSMHV2_type * (ydc_qb[dNodePrime] + ag0*ydyn_qb[dNodePrime]); *(here->HSMHV2QBgpPtr) += model->HSMHV2_type * (ydc_qb[gNodePrime] + ag0*ydyn_qb[gNodePrime]); *(here->HSMHV2QBspPtr) += model->HSMHV2_type * (ydc_qb[sNodePrime] + ag0*ydyn_qb[sNodePrime]); *(here->HSMHV2QBbpPtr) += model->HSMHV2_type * (ydc_qb[bNodePrime] + ag0*ydyn_qb[bNodePrime]); *(here->HSMHV2QBqbPtr) += (ydc_qb[qbNode] + ag0*ydyn_qb[qbNode]); if ( here->HSMHV2_coselfheat > 0 ) { /* self heating */ *(here->HSMHV2QBtempPtr) += (ydc_qb[tempNode] + ag0*ydyn_qb[tempNode]); } } line1000: if (ckt->CKTnoncon != noncon_old) { ckt->CKTtroubleElt = (GENinstance *) here; } } /* End of MOSFET Instance */ } /* End of Model Instance */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2eval.c0000644000175000017500000070547013546075722023154 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhveval.c DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ /********************************************************************* * Memorandum on programming * * (1) Bias (x: b|d|g) * . vxs : Input arguments: Outer branch voltages. * . vxsi: Input arguments: Inner branch voltages. * . deltemp: Input argument: delta temperature. * . Vxse: Internal name for outer branch voltages. * . Vxs: Internal name for inner branch voltages. * . Vbscl:Inner bulk source voltage is clamped within a specified region. * . Y_dVxs denotes the partial derivative of Y w.r.t. Vxs. * . Y_dVxse denotes the partial derivative of Y w.r.t. Vxse. * . Y_dT denotes derivatives with respect to deltemp. * * (2) Device Mode * . Normal mode (Vds>=0 for nMOS) is assumed. * . The sign of Vdse is assumed to be changed simultaneously, if the sign of Vds is changed; * hence Vdse may become negative even thogh Vds >=0. * . In case of reverse mode, parent routines have to properly * transform or interchange inputs and outputs except ones * related to junction diodes, which are regarded as being * fixed to the nodal S/D. * * (3) Modification for symmetry at Vds=0 * . Vxsz: Modified bias. (x: b|d|g) * . Ps0z: Modified Ps0. * . The following variables are calculated as a function of * modified biases or potential. * Tox, Cox, (-- with quantum effect) * Vth*, dVth*, dPpg, Igate, Igidl, Igisl. * . The following variables are calculated using a transform * function. * Lred * * (4) Zones and Cases (terminology) * * Chi:=beta*(Ps0-Vbs)= 0 3 5 * * Zone: A | D1 | D2 | D3 * | * (accumulation)|(depletion) * | * Vgs = Vgs_fb Vth * / / * Case: Nonconductive / Conductive * / * VgVt:=Qn0/Cox= VgVt_small * * . Ids is regarded as zero in zone-A. * . Procedure to calculate Psl and dependent variables is * omitted in the nonconductive case. Ids and Qi are regarded * as zero in this case. * *********************************************************************/ /*===========================================================* * Preamble. *=================*/ /*---------------------------------------------------* * Header files. *-----------------*/ #include "ngspice/ngspice.h" #ifdef __STDC__ /* #include */ #endif /*-----------------------------------* * HiSIM macros *-----------------*/ #include "hisimhv2.h" #include "hsmhv2evalenv.h" #define C_IDD_MIN 1.0e-15 #define C_sub_delta 0.1 /* CHECK! */ #define C_sub_delta2 1.0e-9 /* CHECK! */ #define C_gidl_delta 0.5 /* local variables used in macro functions */ static double TMF0 , TMF1 , TMF2 , TMF3 , TMF4 ; /*===========================================================* * Exp() for PGD. * - ExpLim(-3)=0 *=================*/ #define Fn_ExpLim( y , x , dx ) { \ if ( (x) < -3.0 ) { \ dx = 0.0 ; \ y = 0.0 ; \ } else if ( (x) < 0.0 ) { \ dx = 1.0 + (x) * ( 2 * (1.0/3.0) + (x) * 3 * (1.0/27.0) ) ; \ y = 1.0 + (x) * ( 1.0 + (x) * ( (1.0/3.0) + (x) * (1.0/27.0) ) ) ; \ } else { \ dx = 1.0 + (x) * ( 2 * (1.0/3.0) + (x) * ( 3 * 0.0402052934513951 \ + (x) * 4 * 0.148148111111111 ) ) ; \ y = 1.0 + (x) * ( 1.0 + (x) * ( (1.0/3.0) + (x) * ( 0.0402052934513951 \ + (x) * 0.148148111111111 ) ) ) ; \ } \ } /*===========================================================* * Macro Functions for ceiling/flooring/symmetrization. *=================*/ /*---------------------------------------------------* * smoothUpper: ceiling. * y = xmax - 0.5 ( arg + sqrt( arg^2 + 4 xmax delta ) ) * arg = xmax - x - delta *-----------------*/ #define Fn_SU( y , x , xmax , delta , dx ) { \ TMF1 = ( xmax ) - ( x ) - ( delta ) ; \ TMF2 = 4.0 * ( xmax ) * ( delta) ; \ TMF2 = TMF2 > 0.0 ? TMF2 : - ( TMF2 ) ; \ TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \ dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \ y = ( xmax ) - 0.5 * ( TMF1 + TMF2 ) ; \ } #define Fn_SU2( y , x , xmax , delta , dy_dx , dy_dxmax ) { \ TMF1 = ( xmax ) - ( x ) - ( delta ) ; \ TMF2 = 4.0 * ( xmax ) * ( delta) ; \ TMF2 = TMF2 > 0.0 ? TMF2 : - ( TMF2 ) ; \ TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \ dy_dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \ dy_dxmax = 0.5 * ( 1.0 - ( TMF1 + 2.0 * delta ) / TMF2 ) ; \ y = ( xmax ) - 0.5 * ( TMF1 + TMF2 ) ; \ } /*---------------------------------------------------* * smoothLower: flooring. * y = xmin + 0.5 ( arg + sqrt( arg^2 + 4 xmin delta ) ) * arg = x - xmin - delta *-----------------*/ #define Fn_SL( y , x , xmin , delta , dx ) { \ TMF1 = ( x ) - ( xmin ) - ( delta ) ; \ TMF2 = 4.0 * ( xmin ) * ( delta ) ; \ TMF2 = TMF2 > 0.0 ? TMF2 : - ( TMF2 ) ; \ TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \ dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \ y = ( xmin ) + 0.5 * ( TMF1 + TMF2 ) ; \ } #define Fn_SL2( y , x , xmin , delta , dy_dx, dy_dxmin ) { \ TMF1 = ( x ) - ( xmin ) - ( delta ) ; \ TMF2 = 4.0 * ( xmin ) * ( delta ) ; \ TMF2 = TMF2 > 0.0 ? TMF2 : - ( TMF2 ) ; \ TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \ dy_dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \ dy_dxmin = 0.5 * ( 1.0 - ( TMF1 - 2.0 * delta ) / TMF2 ) ; \ y = ( xmin ) + 0.5 * ( TMF1 + TMF2 ) ; \ } /*---------------------------------------------------* * smoothZero: flooring to zero. * y = 0.5 ( x + sqrt( x^2 + 4 delta^2 ) ) *-----------------*/ #define Fn_SZ( y , x , delta , dx ) { \ TMF2 = sqrt ( ( x ) * ( x ) + 4.0 * ( delta ) * ( delta) ) ; \ dx = 0.5 * ( 1.0 + ( x ) / TMF2 ) ; \ y = 0.5 * ( ( x ) + TMF2 ) ; \ if( y < 0.0 ) { y=0.0; dx=0.0; } \ } /*---------------------------------------------------* * CeilingPow: ceiling for positive x, flooring for negative x. * y = x * xmax / ( x^{2m} + xmax^{2m} )^{1/(2m)} * note: * - xmax has to be positive. * - -xmax < y < xmax. * - dy/dx|_{x=0} = 1. *-----------------*/ #define Fn_CP( y , x , xmax , pw , dx ) { \ double x2 = (x) * (x) ; \ double xmax2 = (xmax) * (xmax) ; \ double xp = 1.0 , xmp = 1.0 ; \ int m =0, mm =0; \ double arg =0.0, dnm =0.0; \ for ( m = 0 ; m < pw ; m ++ ) { xp *= x2 ; xmp *= xmax2 ; } \ arg = xp + xmp ; \ dnm = arg ; \ if ( pw == 1 || pw == 2 || pw == 4 || pw == 8 ) { \ if ( pw == 1 ) { mm = 1 ; \ } else if ( pw == 2 ) { mm = 2 ; \ } else if ( pw == 4 ) { mm = 3 ; \ } else if ( pw == 8 ) { mm = 4 ; } \ for ( m = 0 ; m < mm ; m ++ ) { dnm = sqrt( dnm ) ; } \ } else { dnm = Fn_Pow( dnm , 1.0 / ( 2.0 * pw ) ) ; } \ dnm = 1.0 / dnm ; \ y = (x) * (xmax) * dnm ; \ dx = (xmax) * xmp * dnm / arg ; \ } #define Fn_SU_CP2( y , x , xmax , delta , pw , dx , dxmax ) { \ if(x > xmax - delta && delta >= 0.0) { \ TMF1 = x - xmax + delta ; \ Fn_CP( TMF0 , TMF1 , delta , pw , dx ) \ y = xmax - delta + TMF0 ; \ dx = dx ; \ dxmax = 1.0-dx ; \ } else { \ y = x ; \ dx = 1.0 ; \ dxmax = 0.0 ; \ } \ } #define Fn_CP2( y , x , xmax , pw , dx , dxmax ) { \ double x2 = (x) * (x) ; \ double xmax2 = (xmax) * (xmax) ; \ double xp = 1.0 , xmp = 1.0 ; \ int m =0, mm =0; \ double arg =0.0, dnm =0.0; \ for ( m = 0 ; m < pw ; m ++ ) { xp *= x2 ; xmp *= xmax2 ; } \ arg = xp + xmp ; \ dnm = arg ; \ if ( pw == 1 || pw == 2 || pw == 4 || pw == 8 ) { \ if ( pw == 1 ) { mm = 1 ; \ } else if ( pw == 2 ) { mm = 2 ; \ } else if ( pw == 4 ) { mm = 3 ; \ } else if ( pw == 8 ) { mm = 4 ; } \ for ( m = 0 ; m < mm ; m ++ ) { dnm = sqrt( dnm ) ; } \ } else { dnm = Fn_Pow( dnm , 1.0 / ( 2.0 * pw ) ) ; } \ dnm = 1.0 / dnm ; \ y = (x) * (xmax) * dnm ; \ dx = (xmax) * xmp * dnm / arg ; \ dxmax = (x) * xp * dnm / arg ; \ } #define Fn_SU_CP3( y , x , xmax , delta , pw , dx , dxmax , ddelta ) { \ if(x > xmax - delta && delta >= 0.0) { \ TMF1 = x - xmax + delta ; \ Fn_CP2( TMF0 , TMF1 , delta , pw , dx , ddelta ) \ y = xmax - delta + TMF0 ; \ dx = dx ; \ dxmax = 1.0-dx ; \ ddelta = -1.0+dx+ddelta; \ } else { \ y = x ; \ dx = 1.0 ; \ dxmax = 0.0 ; \ ddelta = 0.0 ; \ } \ } #define Fn_SL_CP3( y , x , xmin , delta , pw , dx , dxmin, ddelta) { \ if(x < xmin + delta && delta >= 0.0) { \ TMF1 = xmin + delta - x ; \ Fn_CP2( TMF0 , TMF1 , delta , pw , dx , ddelta ) \ y = xmin + delta - TMF0 ; \ dx = dx ; \ dxmin = 1.0-dx ; \ ddelta = 1.0-dx-ddelta; \ } else { \ y = x ; \ dx = 1.0 ; \ dxmin = 0.0 ; \ ddelta = 0.0 ; \ } \ } #define Fn_SU_CP( y , x , xmax , delta , pw , dx ) { \ if(x > xmax - delta && delta >= 0.0) { \ TMF1 = x - xmax + delta ; \ Fn_CP( TMF0 , TMF1 , delta , pw , dx ) \ y = xmax - delta + TMF0 ; \ dx = dx ; \ } else { \ y = x ; \ dx = 1.0 ; \ } \ } #define Fn_SL_CP2( y , x , xmin , delta , pw , dx , dxmin) { \ if(x < xmin + delta && delta >= 0.0) { \ TMF1 = xmin + delta - x ; \ Fn_CP( TMF0 , TMF1 , delta , pw , dx ) \ y = xmin + delta - TMF0 ; \ dx = dx ; \ dxmin = 1.0-dx ; \ } else { \ y = x ; \ dx = 1.0 ; \ dxmin = 0.0 ; \ } \ } #define Fn_SL_CP( y , x , xmin , delta , pw , dx ) { \ if(x < xmin + delta && delta >= 0.0) { \ TMF1 = xmin + delta - x ; \ Fn_CP( TMF0 , TMF1 , delta , pw , dx ) \ y = xmin + delta - TMF0 ; \ dx = dx ; \ } else { \ y = x ; \ dx = 1.0 ; \ } \ } /*---------------------------------------------------* * Declining function using a polynomial. *-----------------*/ #define Fn_DclPoly4( y , x , dx ) { \ TMF2 = (x) * (x) ; \ TMF3 = TMF2 * (x) ; \ TMF4 = TMF2 * TMF2 ; \ y = 1.0 / ( 1.0 + (x) + TMF2 + TMF3 + TMF4 ) ; \ dx = - ( 1.0 + 2.0 * (x) + 3.0 * TMF2 + 4.0 * TMF3 ) * y * y ; \ } #define Fn_DclPoly6( y , x , dx ) { \ TMF2 = (x) * (x) ; \ TMF3 = TMF2 * (x) ; \ TMF4 = TMF2 * TMF2 ; \ TMF5 = TMF2 * TMF3 ; \ TMF6 = TMF3 * TMF3 ; \ y = 1.0 / ( 1.0 + (x) + TMF2 + TMF3 + TMF4 + TMF5 + TMF6 ) ; \ dx = - ( 1.0 + 2.0 * (x) + 3.0 * TMF2 + 4.0 * TMF3 \ + 5.0 * TMF4 + 6.0 * TMF5 ) * y * y ; \ } /*---------------------------------------------------* * "smoothUpper" using a polynomial *-----------------*/ #define Fn_SUPoly4( y , x , xmax , dx ) { \ TMF1 = (x) / xmax ; \ Fn_DclPoly4( y , TMF1 , dx ) ; \ y = xmax * ( 1.0 - y ) ; \ dx = - dx ; \ } #define Fn_SUPoly4m( y , x , xmax , dx , dxmax ) { \ TMF1 = (x) / xmax ; \ Fn_DclPoly4( TMF0 , TMF1 , dx ) ; \ y = xmax * ( 1.0 - TMF0 ) ; \ dxmax = 1.0 - TMF0 + TMF1 * dx ; \ dx = - dx ; \ } #define Fn_SUPoly6m( y , x , xmax , dx , dxmax ) { \ TMF1 = (x) / xmax ; \ Fn_DclPoly6( TMF0 , TMF1 , dx ) ; \ y = xmax * ( 1.0 - TMF0 ) ; \ dxmax = 1.0 - TMF0 + TMF1 * dx ; \ dx = - dx ; \ } /*---------------------------------------------------* * SymAdd: evaluate additional term for symmetry. *-----------------*/ #define Fn_SymAdd( y , x , add0 , dx ) \ { \ TMF1 = 2.0 * ( x ) / ( add0 ) ; \ TMF2 = 1.0 + TMF1 * ( (1.0/2) + TMF1 * ( (1.0/6) \ + TMF1 * ( (1.0/24) + TMF1 * ( (1.0/120) \ + TMF1 * ( (1.0/720) + TMF1 * (1.0/5040) ) ) ) ) ) ; \ TMF3 = (1.0/2) + TMF1 * ( (1.0/3) \ + TMF1 * ( (1.0/8) + TMF1 * ( (1.0/30) \ + TMF1 * ( (1.0/144) + TMF1 * (1.0/840) ) ) ) ) ; \ y = add0 / TMF2 ; \ dx = - 2.0 * TMF3 / ( TMF2 * TMF2 ) ; \ } /*===========================================================* * Function hsmhvevaluate. *=================*/ int HSMHV2evaluate ( double Vdse, /* external branch voltage ( Vds >= 0 are assumed -> Vdse might be negative.) */ double Vgse, /* external branch voltage */ double Vbse, /* external branch voltage */ double Vds, /* inner branch voltage */ double Vgs, /* inner branch voltage */ double Vbs, /* inner branch voltage */ double vbs_jct, double vbd_jct, double Vsubs, /* substrate-source voltage */ double Vddp, /* drain-drainPrime voltage */ double deltemp, HSMHV2instance *here, HSMHV2model *model, CKTcircuit *ckt ) { HSMHV2binningParam *pParam = &here->pParam ; HSMHV2modelMKSParam *modelMKS = &model->modelMKS ; /* HSMHV2hereMKSParam *hereMKS = &here->hereMKS ;*/ /*-----------------------------------* * Constants for Smoothing functions *---------------*/ const double vth_dlt = 1.0e-3 ; /* const double cclmmdf = 1.0e-2 ;*/ const double cclmmdf = 1.0e-1 ; const double C_cm2m = 1.0e-2 ; const double qme_dlt = 1.0e-9 * C_cm2m ; const double rdsl2_dlt = 10.0e-3 * C_cm2m ; const double rdsu2_dlt = 50.0e-6 * C_cm2m ; const double rdsz_dlt = 0.1e-3 * C_cm2m ; /* const double qme2_dlt = 5.0e-2 ;*/ const double eef_dlt = 1.0e-2 / C_cm2m ; const double sti2_dlt = 2.0e-3 ; const double pol_dlt = 5.0e-2 ; /* const double psia2_dlt = 5.0e-3 ;*/ const double psisti_dlt = 5.0e-3 ; /*---------------------------------------------------* * Local variables. *-----------------*/ /* Constants ----------------------- */ const int lp_s0_max = 20 ; const int lp_sl_max = 40 ; const int lp_se_max = 150 ; const double dP_max = 0.1e0 ; const double ps_conv = 1.0e-12 ; const double ps_conv2 = 1.0e-10 ; /* double ps_conv = 1.0e-13 ;*/ const double gs_conv = 1.0e-8 ; /** depletion **/ const double znbd3 = 3.0e0 ; const double znbd5 = 5.0e0 ; const double cn_nc3 = C_SQRT_2 / 108e0 ; /* 5-degree, contact:Chi=5 */ const double cn_nc51 = 0.707106781186548 ; /* sqrt(2)/2 */ const double cn_nc52 = -0.117851130197758 ; /* -sqrt(2)/12 */ const double cn_nc53 = 0.0178800506338833 ; /* (187 - 112*sqrt(2))/1600 */ const double cn_nc54 = -0.00163730162779191 ; /* (-131 + 88*sqrt(2))/4000 */ const double cn_nc55 = 6.36964918866352e-5 ; /* (1509-1040*sqrt(2))/600000 */ /** inversion **/ /* 3-degree polynomial approx for ( exp[Chi]-1 )^{1/2} */ const double cn_im53 = 2.9693154855770998e-1 ; const double cn_im54 = -7.0536542840097616e-2 ; const double cn_im55 = 6.1152888951331797e-3 ; /** initial guess **/ const double c_ps0ini_2 = 8.0e-4 ; const double c_pslini_1 = 0.3e0 ; const double c_pslini_2 = 3.0e-2 ; const double VgVt_small = 1.0e-12 ; /* const double Vbs_min = model->HSMHV2_vbsmin ; */ /* const double Vds_max = 10.5e0 ; */ /* const double Vgs_max = 10.5e0 ; */ const double epsm10 = 10.0e0 * C_EPS_M ; const double small = 1.0e-25 ; const double small2= 1e-12 ; /* for Ra(Vdse) dependence */ const double c_exp_2 = 7.38905609893065 ; const double large_arg = 80 ; // log(1.0e100) ; double Vbs_max = 0.8e0, Vbs_max_dT =0.0 ; double Vbs_bnd = 0.4e0, Vbs_bnd_dT =0.0 ; /* start point of positive Vbs bending */ double Gdsmin = 0.0 ; /* Internal flags --------------------*/ int flg_err = 0 ; /* error level */ int flg_rsrd = 0 ; /* Flag for handling Rs and Rd */ /* int flg_iprv = 0 ; */ /* Flag for initial guess of Ids -> not necessary any more */ int flg_pprv = 0 ; /* Flag for initial guesses of Ps0 and Pds */ int flg_noqi =0; /* Flag for the cases regarding Qi=Qd=0 */ /* int flg_vbsc = 0 ; */ /* Flag for Vbs confining -> not necessary any more */ int flg_info = 0 ; int flg_conv = 0 ; /* Flag for Poisson loop convergence */ int flg_qme = 0 ; /* Flag for QME */ int flg_nqs=0 ; /* Flag for NQS calculation */ /* Important Variables in HiSIM -------*/ /* confined bias */ double Vbscl=0.0, Vbscl_dVbs=0.0, Vbscl_dT=0.0, Vbscl_dVbs_dVbs = 0.0, Vbscl_dVbs_dT = 0.0 ; double Vgp =0.0, Vgp_dVbs =0.0, Vgp_dVds =0.0, Vgp_dVgs =0.0, Vgp_dT =0.0 ; double Vgs_fb =0.0 ; /* Ps0 : surface potential at the source side */ double Ps0 =0.0, Ps0_dVbs =0.0, Ps0_dVds =0.0, Ps0_dVgs =0.0, Ps0_dT =0.0 ; double Ps0_ini =0.0 ; double Ps0_iniA =0.0, Ps0_iniA_dVxb =0.0, Ps0_iniA_dVgb =0.0, Ps0_iniA_dT =0.0 ; double Ps0_iniB =0.0, Ps0_iniB_dVxb =0.0, Ps0_iniB_dVgb =0.0, Ps0_iniB_dT =0.0 ; /* Psl : surface potential at the drain side */ double Psl =0.0, Psl_dVbs =0.0, Psl_dVds =0.0, Psl_dVgs =0.0, Psl_dT =0.0 ; double Psl_lim =0.0, dPlim =0.0 ; /* Pds := Psl - Ps0 */ double Pds = 0.0, Pds_dVbs = 0.0, Pds_dVds = 0.0, Pds_dVgs =0.0, Pds_dT =0.0 ; double Pds_ini =0.0 ; double Pds_max =0.0 ; /* iteration numbers of Ps0 and Psl equations. */ int lp_s0 = 0 , lp_sl = 0 ; /* Xi0 := beta * ( Ps0 - Vbs ) - 1. */ double Xi0 =0.0, Xi0_dVbs =0.0, Xi0_dVds =0.0, Xi0_dVgs =0.0, Xi0_dT =0.0 ; double Xi0p12 =0.0, Xi0p12_dVbs =0.0, Xi0p12_dVds =0.0, Xi0p12_dVgs =0.0, Xi0p12_dT =0.0 ; double Xi0p32 =0.0, Xi0p32_dVbs =0.0, Xi0p32_dVds =0.0, Xi0p32_dVgs =0.0, Xi0p32_dT =0.0 ; /* Xil := beta * ( Psl - Vbs ) - 1. */ double Xil =0.0, Xil_dVbs =0.0, Xil_dVds =0.0, Xil_dVgs =0.0, Xil_dT =0.0 ; double Xilp12 =0.0, Xilp12_dVbs =0.0, Xilp12_dVds =0.0, Xilp12_dVgs =0.0, Xilp12_dT =0.0 ; double Xilp32 =0.0, Xilp32_dVbs =0.0, Xilp32_dVds =0.0, Xilp32_dVgs =0.0, Xilp32_dT =0.0 ; /* modified bias and potential for sym.*/ double Vbsz =0.0, Vbsz_dVbs =0.0, Vbsz_dVds =0.0, Vbsz_dT =0.0 ; double Vdsz =0.0, Vdsz_dVbs =0.0, Vdsz_dVds =0.0, Vdsz_dT =0.0 ; double Vgsz =0.0, Vgsz_dVbs =0.0, Vgsz_dVds =0.0, Vgsz_dVgs =0.0, Vgsz_dT =0.0 ; double Vzadd =0.0, Vzadd_dVbs =0.0, Vzadd_dVds = 0.0, Vzadd_dT = 0.0 ; double Ps0z =0.0, Ps0z_dVbs =0.0, Ps0z_dVds =0.0, Ps0z_dVgs =0.0, Ps0z_dT =0.0 ; double Pzadd =0.0, Pzadd_dVbs =0.0, Pzadd_dVds =0.0, Pzadd_dVgs =0.0, Pzadd_dT =0.0 ; /* IBPC */ double dVbsIBPC =0.0, dVbsIBPC_dVbs =0.0, dVbsIBPC_dVds =0.0, dVbsIBPC_dVgs =0.0, dVbsIBPC_dT =0.0 , dVbsIBPC_dVddp =0.0 ; double dG3 =0.0, dG3_dVbs =0.0, dG3_dVds =0.0, dG3_dVgs =0.0, dG3_dT =0.0 , dG3_dVddp =0.0 ; double dG4 =0.0, dG4_dVbs =0.0, dG4_dVds =0.0, dG4_dVgs =0.0, dG4_dT =0.0 , dG4_dVddp =0.0 ; double dIdd =0.0, dIdd_dVbs =0.0, dIdd_dVds =0.0, dIdd_dVgs =0.0, dIdd_dT =0.0 , dIdd_dVddp =0.0 ; double betaWL =0.0, betaWL_dVbs =0.0, betaWL_dVds =0.0, betaWL_dVgs =0.0, betaWL_dT =0.0 ; /* Chi := beta * ( Ps{0/l} - Vbs ) */ double Chi =0.0, Chi_dVbs =0.0, Chi_dVds =0.0, Chi_dVgs =0.0, Chi_dT =0.0 ; /* Rho := beta * ( Psl - Vds ) */ double Rho =0.0, Rho_dT =0.0 ; /* threshold voltage */ double Vth =0.0 ; double Vth0 =0.0, Vth0_dVb =0.0, Vth0_dVd =0.0, Vth0_dVg =0.0, Vth0_dT =0.0 ; /* variation of threshold voltage */ double dVth =0.0, dVth_dVb =0.0, dVth_dVd =0.0, dVth_dVg =0.0, dVth_dT = 0.0 ; double dVth0 =0.0 ; double dVth0_dVb =0.0, dVth0_dVd =0.0, dVth0_dVg =0.0, dVth0_dT =0.0 ; double dVthSC =0.0 ; double dVthSC_dVb =0.0, dVthSC_dVd =0.0, dVthSC_dVg =0.0, dVthSC_dT =0.0 ; double Pb20b =0.0, Pb20b_dVg =0.0, Pb20b_dVb =0.0, Pb20b_dVd =0.0, Pb20b_dT =0.0 ; double dVthW =0.0, dVthW_dVb =0.0, dVthW_dVd =0.0, dVthW_dVg =0.0, dVthW_dT =0.0 ; /* Alpha and related parameters */ double Alpha =0.0, Alpha_dVbs =0.0, Alpha_dVds =0.0, Alpha_dVgs =0.0, Alpha_dT =0.0 ; double Achi =0.0, Achi_dVbs =0.0, Achi_dVds =0.0, Achi_dVgs =0.0, Achi_dT =0.0 ; double VgVt =0.0, VgVt_dVbs =0.0, VgVt_dVds =0.0, VgVt_dVgs =0.0, VgVt_dT =0.0 ; double Pslsat =0.0 ; double Vdsat =0.0 ; double VdsatS =0.0, VdsatS_dVbs =0.0, VdsatS_dVds =0.0, VdsatS_dVgs =0.0, VdsatS_dT =0.0 ; double Delta =0.0 ; /* Q_B and capacitances */ double Qb =0.0, Qb_dVbs =0.0, Qb_dVds =0.0, Qb_dVgs =0.0, Qb_dT=0.0 ; double Qbu =0.0, Qbu_dVbs =0.0, Qbu_dVds =0.0, Qbu_dVgs =0.0, Qbu_dT =0.0 ; /* Q_I and capacitances */ double Qi =0.0, Qi_dVbs =0.0, Qi_dVds =0.0, Qi_dVgs =0.0, Qi_dT=0.0 ; double Qiu =0.0, Qiu_dVbs =0.0, Qiu_dVds =0.0, Qiu_dVgs =0.0, Qiu_dT =0.0 ; /* Q_D and capacitances */ double Qd =0.0, Qd_dVbs =0.0, Qd_dVds =0.0, Qd_dVgs =0.0, Qd_dT =0.0 ; /* channel current */ double Ids =0.0, Ids_dVbs =0.0, Ids_dVds =0.0, Ids_dVgs =0.0, Ids_dT =0.0, Ids_dRa =0.0 ; double Ids0 =0.0, Ids0_dVbs =0.0, Ids0_dVds =0.0, Ids0_dVgs =0.0, Ids0_dT =0.0 ; /* STI */ double dVthSCSTI =0.0, dVthSCSTI_dVg =0.0, dVthSCSTI_dVd =0.0, dVthSCSTI_dVb =0.0, dVthSCSTI_dT =0.0 ; double Vgssti =0.0, Vgssti_dVbs =0.0, Vgssti_dVds =0.0, Vgssti_dVgs =0.0, Vgssti_dT =0.0 ; double costi0 =0.0 ; double costi1 =0.0, costi1_dT =0.0 ; double costi3 =0.0, costi3_dVb =0.0, costi3_dVd =0.0, costi3_dVg =0.0, costi3_dT =0.0 ; double costi3_dVb_c3 =0.0, costi3_dVd_c3 =0.0, costi3_dVg_c3 =0.0, costi3_dT_c3 =0.0 ; double costi4 =0.0, costi4_dT =0.0 ; double costi5 =0.0, costi5_dT =0.0 ; double costi6 =0.0, costi6_dT =0.0 ; double costi7 =0.0, costi7_dT =0.0 ; double Psasti =0.0, Psasti_dVbs =0.0, Psasti_dVds =0.0, Psasti_dVgs =0.0, Psasti_dT =0.0 ; double Psbsti =0.0, Psbsti_dVbs =0.0, Psbsti_dVds =0.0, Psbsti_dVgs =0.0, Psbsti_dT =0.0 ; double Psab =0.0, Psab_dVbs =0.0, Psab_dVds =0.0, Psab_dVgs =0.0, Psab_dT =0.0 ; double Psti =0.0, Psti_dVbs =0.0, Psti_dVds =0.0, Psti_dVgs =0.0, Psti_dT =0.0 ; double sq1sti =0.0, sq1sti_dVbs =0.0, sq1sti_dVds =0.0, sq1sti_dVgs =0.0, sq1sti_dT =0.0 ; double sq2sti =0.0, sq2sti_dVbs =0.0, sq2sti_dVds =0.0, sq2sti_dVgs =0.0, sq2sti_dT =0.0 ; double Qn0sti =0.0, Qn0sti_dVbs =0.0, Qn0sti_dVds =0.0, Qn0sti_dVgs =0.0, Qn0sti_dT =0.0 ; double Idssti =0.0, Idssti_dVbs =0.0, Idssti_dVds =0.0, Idssti_dVgs =0.0, Idssti_dT=0.0 ; /* constants */ double beta =0.0, beta_dT =0.0 ; double beta_inv =0.0, beta_inv_dT =0.0 ; double beta2 =0.0 ; double Pb2 =0.0, Pb2_dT =0.0 ; double Pb20 =0.0 ; double Pb2c =0.0 ; double Vfb =0.0 ; double c_eox =0.0 ; double Leff =0.0, Weff =0.0, WeffLD_nf =0.0 ; double Ldrift0 =0.0 ; double q_Nsub =0.0 ; /* PART-1 */ /* Accumulation zone */ double Psa =0.0 ; double Psa_dVbs =0.0, Psa_dVds =0.0, Psa_dVgs =0.0, Psa_dT =0.0 ; /* CLM*/ double Psdl =0.0, Psdl_dVbs =0.0, Psdl_dVds =0.0, Psdl_dVgs =0.0, Psdl_dT =0.0 ; double Lred =0.0, Lred_dVbs =0.0, Lred_dVds =0.0, Lred_dVgs =0.0, Lred_dT =0.0 ; double Lch =0.0, Lch_dVbs =0.0, Lch_dVds =0.0, Lch_dVgs =0.0, Lch_dT =0.0 ; double Wd =0.0, Wd_dVbs =0.0, Wd_dVds =0.0, Wd_dVgs =0.0, Wd_dT =0.0 ; double Aclm =0.0 ; /* Pocket Implant */ double Vthp=0.0, Vthp_dVb=0.0, Vthp_dVd=0.0, Vthp_dVg =0.0, Vthp_dT =0.0 ; double dVthLP=0.0, dVthLP_dVb=0.0, dVthLP_dVd=0.0, dVthLP_dVg =0.0, dVthLP_dT =0.0 ; double bs12=0.0, bs12_dVb=0.0, bs12_dVd =0.0, bs12_dVg =0.0, bs12_dT =0.0 ; double Qbmm=0.0, Qbmm_dVb=0.0, Qbmm_dVd =0.0, Qbmm_dVg =0.0, Qbmm_dT =0.0 ; double dqb=0.0, dqb_dVb=0.0, dqb_dVg=0.0, dqb_dVd =0.0, dqb_dT =0.0 ; double Vdx=0.0, Vdx_dVbs=0.0, Vdx_dT=0.0 ; double Vdx2=0.0, Vdx2_dVbs=0.0, Vdx2_dT=0.0 ; double Pbsum=0.0, Pbsum_dVb=0.0, Pbsum_dVd=0.0, Pbsum_dVg =0.0, Pbsum_dT =0.0 ; double sqrt_Pbsum =0.0 ; /* Poly-Depletion Effect */ const double pol_b = 1.0 ; double dPpg =0.0, dPpg_dVb =0.0, dPpg_dVd =0.0, dPpg_dVg =0.0, dPpg_dT = 0.0 ; /* Quantum Effect */ double Tox =0.0, Tox_dVb =0.0, Tox_dVd =0.0, Tox_dVg =0.0, Tox_dT =0.0 ; double dTox =0.0, dTox_dVb =0.0, dTox_dVd =0.0, dTox_dVg =0.0, dTox_dT =0.0 ; double Cox =0.0, Cox_dVb =0.0, Cox_dVd =0.0, Cox_dVg =0.0, Cox_dT =0.0 ; double Cox_inv =0.0, Cox_inv_dVb =0.0, Cox_inv_dVd =0.0, Cox_inv_dVg =0.0, Cox_inv_dT =0.0 ; double Tox0 =0.0, Cox0 =0.0, Cox0_inv =0.0 ; double Vthq=0.0, Vthq_dVb =0.0, Vthq_dVd =0.0 ; /* Igate , Igidl , Igisl */ const double igate_dlt = 1.0e-2 / C_cm2m ; const double gidlvds_dlt = 1.0e-5 ; const double gidla = 100.0 ; double Psdlz =0.0, Psdlz_dVbs =0.0, Psdlz_dVds =0.0, Psdlz_dVgs =0.0, Psdlz_dT =0.0 ; double Egp12 =0.0, Egp12_dT =0.0 ; double Egp32 =0.0, Egp32_dT =0.0 ; double E1 =0.0, E1_dVb =0.0, E1_dVd =0.0, E1_dVg =0.0, E1_dT =0.0 ; double Etun =0.0, Etun_dVbs =0.0, Etun_dVds =0.0, Etun_dVgs =0.0, Etun_dT =0.0 ; double Vdsp=0.0, Vdsp_dVd =0.0 ; double Egidl =0.0, Egidl_dVb =0.0, Egidl_dVd =0.0, Egidl_dVg =0.0, Egidl_dT =0.0 ; double Egisl =0.0, Egisl_dVb =0.0, Egisl_dVd =0.0, Egisl_dVg =0.0, Egisl_dT =0.0 ; double Igate =0.0, Igate_dVbs =0.0, Igate_dVds =0.0, Igate_dVgs =0.0, Igate_dT =0.0 ; double Igs =0.0, Igs_dVbs =0.0, Igs_dVds =0.0, Igs_dVgs =0.0, Igs_dT =0.0 ; double Igd =0.0, Igd_dVbs =0.0, Igd_dVds =0.0, Igd_dVgs =0.0, Igd_dT =0.0 ; double Igb =0.0, Igb_dVbs =0.0, Igb_dVds =0.0, Igb_dVgs =0.0, Igb_dT =0.0 ; double Igidl =0.0, Igidl_dVbs =0.0, Igidl_dVds =0.0, Igidl_dVgs =0.0, Igidl_dT =0.0 ; double Igisl =0.0, Igisl_dVbs =0.0, Igisl_dVds =0.0, Igisl_dVgs =0.0, Igisl_dT =0.0 ; double Vdb =0.0, Vsb =0.0 ; /* connecting function */ double FD2 =0.0, FD2_dVbs =0.0, FD2_dVds =0.0, FD2_dVgs =0.0, FD2_dT =0.0 ; double FMDVDS =0.0, FMDVDS_dVbs =0.0, FMDVDS_dVds =0.0, FMDVDS_dVgs =0.0, FMDVDS_dT =0.0 ; double cnst0 =0.0, cnst0_dT =0.0; double cnst1 =0.0, cnst1_dT =0.0; double cnstCoxi =0.0, cnstCoxi_dVb =0.0, cnstCoxi_dVd =0.0, cnstCoxi_dVg =0.0, cnstCoxi_dT =0.0 ; double fac1 =0.0, fac1_dVbs =0.0, fac1_dVds =0.0, fac1_dVgs =0.0, fac1_dT =0.0 ; double fac1p2 =0.0, fac1p2_dT =0.0 ; double fs01 =0.0, fs01_dVbs =0.0, fs01_dVds =0.0, fs01_dVgs =0.0, fs01_dT =0.0, fs01_dPs0 =0.0 ; double fs02 =0.0, fs02_dVbs =0.0, fs02_dVds =0.0, fs02_dVgs =0.0, fs02_dT =0.0, fs02_dPs0 =0.0 ; double fsl1 =0.0, fsl1_dVbs =0.0, fsl1_dVds =0.0, fsl1_dVgs =0.0, fsl1_dT =0.0, fsl1_dPsl =0.0 ; double fsl2 =0.0, fsl2_dVbs =0.0, fsl2_dVds =0.0, fsl2_dVgs =0.0, fsl2_dT =0.0, fsl2_dPsl =0.0 ; double cfs1 =0.0, cfs1_dT =0.0 ; double fb =0.0, fb_dChi =0.0 ; double fi =0.0, fi_dChi =0.0 ; double exp_Chi =0.0, exp_Chi_dT =0.0 ; double exp_Rho =0.0, exp_Rho_dT =0.0 ; double exp_bVbs =0.0, exp_bVbs_dT =0.0 ; double exp_bVbsVds =0.0, exp_bVbsVds_dT =0.0 ; double exp_bPs0 =0.0, exp_bPs0_dT =0.0 ; double Fs0 =0.0, Fs0_dPs0 =0.0 ; double Fsl =0.0, Fsl_dPsl =0.0 ; double dPs0 =0.0, dPsl =0.0 ; double Qn0 =0.0, Qn0_dVbs =0.0, Qn0_dVds =0.0, Qn0_dVgs =0.0, Qn0_dT =0.0 ; double Qb0 =0.0, Qb0_dVb =0.0, Qb0_dVd =0.0, Qb0_dVg =0.0, Qb0_dT =0.0 ; double Qbnm =0.0, Qbnm_dVbs =0.0, Qbnm_dVds =0.0, Qbnm_dVgs =0.0, Qbnm_dT =0.0 ; double DtPds =0.0, DtPds_dVbs =0.0, DtPds_dVds =0.0, DtPds_dVgs =0.0, DtPds_dT =0.0 ; double Qinm =0.0, Qinm_dVbs =0.0, Qinm_dVds =0.0, Qinm_dVgs =0.0, Qinm_dT =0.0 ; double Qidn =0.0, Qidn_dVbs =0.0, Qidn_dVds =0.0, Qidn_dVgs =0.0, Qidn_dT =0.0 ; double Qdnm =0.0, Qdnm_dVbs =0.0, Qdnm_dVds =0.0, Qdnm_dVgs =0.0, Qdnm_dT =0.0 ; double Qddn =0.0, Qddn_dVbs =0.0, Qddn_dVds =0.0, Qddn_dVgs =0.0, Qddn_dT =0.0 ; double Quot =0.0 ; double Qdrat =0.5, Qdrat_dVbs =0.0, Qdrat_dVds =0.0, Qdrat_dVgs =0.0, Qdrat_dT =0.0 ; double Idd =0.0, Idd_dVbs =0.0, Idd_dVds =0.0, Idd_dVgs =0.0, Idd_dT =0.0 ; double Idd1 =0.0, Idd1_dVbs =0.0, Idd1_dVds =0.0, Idd1_dVgs =0.0, Idd1_dT =0.0 ; double Fdd =0.0, Fdd_dVbs =0.0, Fdd_dVds =0.0, Fdd_dVgs =0.0, Fdd_dT =0.0 ; double Eeff =0.0, Eeff_dVbs =0.0, Eeff_dVds =0.0, Eeff_dVgs =0.0, Eeff_dT =0.0 ; double Rns =0.0, Rns_dT =0.0 ; double Mu = 0.0, Mu_dVbs =0.0, Mu_dVds =0.0, Mu_dVgs =0.0, Mu_dT =0.0 ; double Muun =0.0, Muun_dVbs =0.0, Muun_dVds =0.0, Muun_dVgs =0.0, Muun_dT =0.0 ; double Ey =0.0, Ey_dVbs =0.0, Ey_dVds =0.0, Ey_dVgs =0.0, Ey_dT =0.0 ; double Em =0.0, Em_dVbs =0.0, Em_dVds =0.0, Em_dVgs =0.0, Em_dT =0.0 ; double Vmax =0.0, Vmax_dT =0.0 ; double Eta =0.0, Eta_dVbs =0.0, Eta_dVds =0.0, Eta_dVgs =0.0, Eta_dT =0.0 ; double Eta1 =0.0, Eta1_dT =0.0 ; double Eta1p12 =0.0, Eta1p12_dT =0.0 ; double Eta1p32 =0.0, Eta1p32_dT =0.0 ; double Eta1p52 =0.0, Eta1p52_dT =0.0 ; double Zeta12 =0.0, Zeta12_dT =0.0 ; double Zeta32 =0.0, Zeta32_dT =0.0 ; double Zeta52 =0.0, Zeta52_dT =0.0 ; double F00 =0.0, F00_dVbs =0.0, F00_dVds =0.0, F00_dVgs =0.0, F00_dT =0.0 ; double F10 =0.0, F10_dVbs =0.0, F10_dVds =0.0, F10_dVgs =0.0, F10_dT =0.0 ; double F30 =0.0, F30_dVbs =0.0, F30_dVds =0.0, F30_dVgs =0.0, F30_dT =0.0 ; double F11 =0.0, F11_dVbs =0.0, F11_dVds =0.0, F11_dVgs =0.0, F11_dT =0.0 ; double Vgs_min =0.0 ; double Ps0_min =0.0, Ps0_min_dVbs =0.0, Ps0_min_dVds =0.0, Ps0_min_dVgs =0.0, Ps0_min_dT =0.0 ; double Acn =0.0, Acn_dVbs =0.0, Acn_dVds =0.0, Acn_dVgs =0.0, Acn_dT =0.0 ; double Acd =0.0, Acd_dVbs =0.0, Acd_dVds =0.0, Acd_dVgs =0.0, Acd_dT =0.0 ; double Ac1 =0.0, Ac1_dVbs =0.0, Ac1_dVds =0.0, Ac1_dVgs =0.0, Ac1_dT =0.0 ; double Ac2 =0.0, Ac2_dVbs =0.0, Ac2_dVds =0.0, Ac2_dVgs =0.0, Ac2_dT =0.0 ; double Ac3 =0.0, Ac3_dVbs =0.0, Ac3_dVds =0.0, Ac3_dVgs =0.0, Ac3_dT =0.0 ; double Ac4 =0.0, Ac4_dVbs =0.0, Ac4_dVds =0.0, Ac4_dVgs =0.0, Ac4_dT =0.0 ; double Ac31 =0.0, Ac31_dVbs =0.0, Ac31_dVds =0.0, Ac31_dVgs =0.0, Ac31_dT =0.0 ; double Ac41 =0.0, Ac41_dT =0.0 ; double ninvd_dT =0.0 ; /* PART-2 (Isub) */ double Isub =0.0, Isub_dVbs =0.0, Isub_dVds =0.0, Isub_dVgs =0.0, Isub_dT=0.0 ; double IsubLD =0.0, IsubLD_dVbs =0.0, IsubLD_dVds =0.0, IsubLD_dVgs =0.0, IsubLD_dT=0.0 ; double IsubLD_dVddp = 0.0 ; double Psislsat =0.0, Psislsat_dVb =0.0, Psislsat_dVd =0.0, Psislsat_dVg =0.0, Psislsat_dT =0.0 ; double Psisubsat =0.0, Psisubsat_dVb =0.0, Psisubsat_dVd =0.0, Psisubsat_dVg =0.0, Psisubsat_dT =0.0 ; double Ifn =0.0, Ifn_dVb =0.0, Ifn_dVd=0.0, Ifn_dVg=0.0, Ifn_dT = 0.0 ; double Eg12=0.0, Eg32 =0.0 ; /* PART-3 (overlap) */ /* const double cov_dlt = 1.0e-1 ; */ /* const double covvgmax = 5.0 ; */ double cov_slp =0.0, cov_mag =0.0 ; double Qgos =0.0, Qgos_dVbs =0.0, Qgos_dVds =0.0, Qgos_dVgs =0.0, Qgos_dT =0.0 ; double Qgod =0.0, Qgod_dVbs =0.0, Qgod_dVds =0.0, Qgod_dVgs =0.0, Qgod_dT =0.0 ; double Qgbo =0.0, Qgbo_dVbs =0.0, Qgbo_dVds =0.0, Qgbo_dVgs =0.0, Qgbo_dT = 0.0 ; double Cgdo =0.0, Cgso =0.0, Cgbo_loc =0.0 ; double Qgso =0.0, Qgso_dVbse =0.0, Qgso_dVdse =0.0, Qgso_dVgse =0.0 ; double Qgdo =0.0, Qgdo_dVbse =0.0, Qgdo_dVdse =0.0, Qgdo_dVgse =0.0 ; /* fringe capacitance */ double Qfd =0.0, Cfd =0.0 ; double Qfs =0.0, Cfs =0.0 ; /* Cqy */ double Ec =0.0, Ec_dVbs =0.0, Ec_dVds =0.0, Ec_dVgs =0.0, Ec_dT =0.0 ; double Pslk =0.0, Pslk_dVbs =0.0, Pslk_dVds =0.0, Pslk_dVgs =0.0, Pslk_dT =0.0 ; double Qy =0.0, Qy_dVbs =0.0, Qy_dVds =0.0, Qy_dVgs =0.0, Qy_dT =0.0 ; /* PART-5 (NQS) */ double tau =0.0, tau_dVbs=0.0, tau_dVds=0.0, tau_dVgs =0.0, tau_dT=0.0 ; double taub =0.0, taub_dVbs=0.0, taub_dVds=0.0, taub_dVgs =0.0, taub_dT =0.0 ; /* PART-6 (noise) */ /* 1/f */ double NFalp =0.0, NFtrp =0.0, Cit =0.0, Nflic =0.0 ; /* thermal */ double Eyd =0.0, Mu_Ave= 0.0, Nthrml =0.0, Mud_hoso =0.0 ; /* induced gate noise ( Part 0/3 ) */ double kusai00 =0.0, kusaidd =0.0, kusaiL =0.0, kusai00L =0.0 ; int flg_ign = 0 ; double sqrtkusaiL =0.0, kusai_ig =0.0, gds0_ign =0.0, gds0_h2 =0.0, GAMMA =0.0, crl_f =0.0 ; const double c_sqrt_15 =3.872983346207417e0 ; /* sqrt(15) */ const double Cox_small =1.0e-6 ; const double c_16o135 =1.185185185185185e-1 ; /* 16/135 */ double Nign0 =0.0, MuModA =0.0, MuModB =0.0, correct_w1 =0.0 ; /* usage of previously calculated values */ double vtol_pprv =1.01e-1 ; double Vbsc_dif =0.0, Vdsc_dif =0.0, Vgsc_dif =0.0, sum_vdif =0.0 ; double Vbsc_dif2 =0.0, Vdsc_dif2 =0.0, Vgsc_dif2 =0.0, sum_vdif2 =0.0 ; double dVbs =0.0, dVds =0.0, dVgs =0.0 ; /* temporary vars. & derivatives*/ double TX =0.0, TX_dVbs =0.0, TX_dVds =0.0, TX_dVgs =0.0, TX_dT =0.0 ; double TY =0.0, TY_dVbs =0.0, TY_dVds =0.0, TY_dVgs =0.0, TY_dT =0.0 ; double T0 =0.0, T0_dVb =0.0, T0_dVd =0.0, T0_dVg =0.0, T0_dT =0.0 ; double T1 =0.0, T1_dVb =0.0, T1_dVd =0.0, T1_dVg =0.0, T1_dT =0.0, T1_dVdse_eff =0.0 ; double T2 =0.0, T2_dVb =0.0, T2_dVd =0.0, T2_dVg =0.0, T2_dT =0.0 ; double T3 =0.0, T3_dVb =0.0, T3_dVd =0.0, T3_dVg =0.0, T3_dT =0.0 ; double T4 =0.0, T4_dVb =0.0, T4_dVd =0.0, T4_dVg =0.0, T4_dT =0.0 ; double T5 =0.0, T5_dVb =0.0, T5_dVd =0.0, T5_dVg =0.0, T5_dT =0.0 ; double T6 =0.0, T6_dVb =0.0, T6_dVd =0.0, T6_dVg =0.0, T6_dT =0.0 ; double T7 =0.0, T7_dVb =0.0, T7_dVd =0.0, T7_dVg =0.0, T7_dT =0.0 ; double T8 =0.0, T8_dVb =0.0, T8_dVd =0.0, T8_dVg =0.0, T8_dT =0.0 ; double T9 =0.0, T9_dVb =0.0, T9_dVd =0.0, T9_dVg =0.0, T9_dT =0.0, T9_dVdse_eff =0.0 ; double T10 =0.0, T10_dVb =0.0, T10_dVd =0.0, T10_dVg =0.0, T10_dT =0.0 ; double T11 =0.0, T11_dT =0.0 ; double T12 =0.0; double T15 =0.0, T16 =0.0, T17 =0.0 ; double T4_dVb_dT, T5_dVb_dT, T6_dVb_dT, T7_dVb_dT ; double T1_dVddp = 0.0 , T2_dVddp = 0.0 ; double T0_dVddp = 0.0 , T3_dVddp = 0.0, T4_dVddp = 0.0 ; int flg_zone =0 ; /* Vdseff */ double Vdseff =0.0, Vdseff_dVbs =0.0, Vdseff_dVds =0.0, Vdseff_dVgs =0.0, Vdseff_dT =0.0 ; double Vdsorg =0.0 ; /* D/S Overlap Charges: Qovd/Qovs */ double CVDSOVER =0.0 ; double Qovdext =0.0, Qovdext_dVbse =0.0, Qovdext_dVdse =0.0, Qovdext_dVgse =0.0, Qovdext_dT =0.0 ; double Qovsext =0.0, Qovsext_dVbse =0.0, Qovsext_dVdse =0.0, Qovsext_dVgse =0.0, Qovsext_dT =0.0 ; double Qovd =0.0, Qovd_dVbs =0.0, Qovd_dVds =0.0, Qovd_dVgs =0.0, Qovd_dT =0.0 ; double Qovs =0.0, Qovs_dVbs =0.0, Qovs_dVds =0.0, Qovs_dVgs =0.0, Qovs_dT =0.0 ; double QbuLD =0.0, QbuLD_dVbs =0.0, QbuLD_dVds =0.0, QbuLD_dVgs =0.0, QbuLD_dT =0.0 ; double QbdLD =0.0, QbdLD_dVbs =0.0, QbdLD_dVds =0.0, QbdLD_dVgs =0.0, QbdLD_dT =0.0 ; double QbsLD =0.0, QbsLD_dVbs =0.0, QbsLD_dVds =0.0, QbsLD_dVgs =0.0, QbsLD_dT =0.0 ; double QodAD =0.0, QodAD_dVbs =0.0, QodAD_dVds =0.0, QodAD_dVgs =0.0, QodAD_dT =0.0 ; double QosAD =0.0, QosAD_dVbs =0.0, QosAD_dVds =0.0, QosAD_dVgs =0.0, QosAD_dT =0.0 ; double QbdLDext =0.0, QbdLDext_dVbse =0.0, QbdLDext_dVdse =0.0, QbdLDext_dVgse =0.0, QbdLDext_dT =0.0 ; double QbsLDext =0.0, QbsLDext_dVbse =0.0, QbsLDext_dVdse =0.0, QbsLDext_dVgse =0.0, QbsLDext_dT =0.0 ; /* Vgsz for SCE and PGD */ double Vbsz2 =0.0, Vbsz2_dVbs =0.0, Vbsz2_dVds =0.0, Vbsz2_dVgs =0.0 , Vbsz2_dT =0.0; /* Multiplication factor * number of gate fingers */ double Mfactor = here->HSMHV2_m ; /*-----------------------------------------------------------* * HiSIM-HV *-----------------*/ /* bias-dependent Rd, Rs */ double Rdrift =0.0, Rdrift_dVbse =0.0, Rdrift_dVdse =0.0, Rdrift_dVgse =0.0, Rdrift_dT =0.0 ; double Rsdrift =0.0, Rsdrift_dVbse =0.0, Rsdrift_dVdse =0.0, Rsdrift_dVgse =0.0, Rsdrift_dT =0.0 ; double Rd =0.0, Rd_dVbse =0.0, Rd_dVdse =0.0, Rd_dVgse =0.0, Rd_dT =0.0 ; double Rs =0.0, Rs_dVbse =0.0, Rs_dVdse =0.0, Rs_dVgse =0.0, Rs_dT =0.0 ; double Ra =0.0, Ra_dVbse =0.0, Ra_dVdse =0.0, Ra_dVgse =0.0 ; double Ra_dVbs =0.0, Ra_dVds =0.0, Ra_dVgs =0.0 ; double Ra_dVdse_eff =0.0 ; const double delta_rd = 10e-3 * C_cm2m ; const double Ra_N = 20.0; /* smoothing parameter for Ra */ const double Res_min = 1.0e-4 ; double Rd0_dT =0.0, Rs0_dT =0.0, Rdvd_dT =0.0, Rsvd_dT =0.0 ; double Vdse_eff =0.0, Vdse_eff_dVbse =0.0, Vdse_eff_dVdse =0.0, Vdse_eff_dVgse =0.0, Vdse_eff_dVbs =0.0, Vdse_eff_dVds =0.0, Vdse_eff_dVgs =0.0 ; double VdseModeNML =0.0, VdseModeRVS =0.0 ; double Vbsegmt =0.0, Vdsegmt =0.0, Vgsegmt =0.0 ; double Vbserev =0.0, Vdserev =0.0, Vgserev =0.0 ; double Ra_alpha, Ra_beta ; /* modified external biases for symmetry */ double Vzadd_ext_dVd = 0.0 ; double Vdserevz = 0.0, Vdserevz_dVd = 0.0 ; double Vgserevz = 0.0, Vgserevz_dVd = 0.0 ; double Vbserevz = 0.0, Vbserevz_dVd = 0.0 ; /* Substrate Effect */ const double RDVSUB = model->HSMHV2_rdvsub ; const double RDVDSUB = model->HSMHV2_rdvdsub ; const double DDRIFT = model->HSMHV2_ddrift ; const double VBISUB = model->HSMHV2_vbisub ; const double NSUBSUB = modelMKS->HSMHV2_nsubsub ; double Vsubsrev = 0.0 ; double Wdep = 0.0, Wdep_dVdserev = 0.0, Wdep_dVsubsrev = 0.0 ; double T1_dVdserev = 0.0, T1_dVsubsrev = 0.0, T6_dVdserev = 0.0, T6_dVsubsrev = 0.0 ; double Rs_dVsubs = 0.0, Rd_dVsubs = 0.0, Rdrift_dVsubs = 0.0, Rsdrift_dVsubs = 0.0 ; /* temperature-dependent variables for SHE model */ double TTEMP =0.0, TTEMP0 =0.0 ; double Tdiff0 = 0.0, Tdiff0_2 = 0.0, Tdiff = 0.0, Tdiff_2 = 0.0 ; double Eg =0.0, Eg_dT =0.0 ; double Nin =0.0, Nin_dT =0.0 ; /* Qover 5/1 ckt-bias use */ double Vgbgmt =0.0, Vgbgmt_dVbs =0.0, Vgbgmt_dVds =0.0, Vgbgmt_dVgs =0.0 ; double Vxbgmt =0.0, Vxbgmt_dVbs =0.0, Vxbgmt_dVds =0.0, Vxbgmt_dVgs =0.0 ; double Vxbgmtcl =0.0, Vxbgmtcl_dVxbgmt =0.0, Vxbgmtcl_dT =0.0 ; double ModeNML =0.0, ModeRVS =0.0 ; double QsuLD =0.0, QsuLD_dVbs =0.0, QsuLD_dVds =0.0, QsuLD_dVgs =0.0, QsuLD_dT =0.0 ; double QiuLD =0.0, QiuLD_dVbs =0.0, QiuLD_dVds =0.0, QiuLD_dVgs =0.0, QiuLD_dT =0.0 ; double QidLD =0.0, QidLD_dVbs =0.0, QidLD_dVds =0.0, QidLD_dVgs =0.0, QidLD_dT =0.0 ; double QisLD =0.0, QisLD_dVbs =0.0, QisLD_dVds =0.0, QisLD_dVgs =0.0, QisLD_dT =0.0 ; double QidLDext =0.0, QidLDext_dVbse =0.0, QidLDext_dVdse =0.0, QidLDext_dVgse =0.0, QidLDext_dT =0.0 ; double QisLDext =0.0, QisLDext_dVbse =0.0, QisLDext_dVdse =0.0, QisLDext_dVgse =0.0, QisLDext_dT =0.0 ; /* Self heating */ double mphn0_dT =0.0 ; double cnst0over_dT =0.0 ; double cnst0overs_dT =0.0 ; double Temp_dif =0.0 ; /* for SCE */ double ptovr_dT =0.0 ; /* IBPC */ double IdsIBPC =0.0, IdsIBPC_dVbs =0.0, IdsIBPC_dVds =0.0, IdsIBPC_dVgs =0.0, IdsIBPC_dT =0.0, IdsIBPC_dVddp =0.0 ; /* Qover */ int flg_ovzone = 0 ; double VgpLD =0.0, VgpLD_dVgb =0.0 ; double Vgb_fb_LD =0.0 ; double Ac31_dVgb =0.0, Ac31_dVxb =0.0 ; double Ac1_dVgb =0.0, Ac1_dVxb =0.0 ; double Ac2_dVgb =0.0, Ac2_dVxb =0.0 ; double Ac3_dVgb =0.0, Ac3_dVxb =0.0 ; double Acn_dVgb =0.0, Acn_dVxb =0.0 ; double Acd_dVgb =0.0, Acd_dVxb =0.0 ; double Chi_dVgb =0.0, Chi_dVxb =0.0 ; double Psa_dVgb =0.0, Psa_dVxb =0.0 ; double QsuLD_dVgb =0.0, QsuLD_dVxb =0.0 ; double QbuLD_dVgb =0.0, QbuLD_dVxb =0.0 ; double fs02_dVgb =0.0, fs02_dVxb =0.0 ; double TX_dVgb =0.0, TX_dVxb =0.0 ; double TY_dVgb =0.0, TY_dVxb =0.0 ; double Ps0LD =0.0, Ps0LD_dVgb =0.0, Ps0LD_dVxb =0.0, Ps0LD_dT =0.0 ; double Ps0LD_dVds =0.0, Ps0LD_dVgs =0.0, Ps0LD_dVbs =0.0 ; double Pb2over =0.0, Pb2over_dT =0.0 ; double cnst1over =0.0, cnst1over_dT =0.0 ; int flg_overgiven =0 ; int Coovlps =0, Coovlpd =0 ; double Lovers =0.0, Loverd =0.0 ; double Novers =0.0, Noverd =0.0 ; double Nover_func =0.0 ; double cnst0over_func =0.0, cnst0over_func_dT =0.0 ; /* Qover Analytical Model */ int lp_ld; double Ta = 9.3868e-3, Tb = -0.1047839 ; double Tc, Tc_dT ; double Td, Td_dVxb, Td_dVgb, Td_dT ; double Tv, Tv_dVxb, Tv_dVgb, Tv_dT ; double Tu, Tu_dVxb, Tu_dVgb, Tu_dT ; double Tp, Tp_dT ; double Tq, Tq_dVxb, Tq_dVgb, Tq_dT ; double T1_dVxb, T1_dVgb ; double T5_dVxb, T5_dVgb ; double VgpLD_shift, VgpLD_shift_dT ; double VgpLD_shift_dVgb, VgpLD_shift_dVxb, exp_bVbs_dVxb ; double gamma, gamma_dVxb, gamma_dT ; double psi , psi_dVgb , psi_dVxb , psi_dT ; double Chi_A, Chi_A_dVgb, Chi_A_dVxb, Chi_A_dT ; double Chi_B, Chi_B_dVgb, Chi_B_dVxb, Chi_B_dT ; double psi_B =0.0, arg_B =0.0 ; double Chi_1 =0.0, Chi_1_dVgb =0.0, Chi_1_dVxb =0.0, Chi_1_dT =0.0 ; /* global variables for depletion mode MOSFET */ double Pb2n_dT, Vbipn_dT = 0.0, depmphn0_dT = 0.0, depVmax_dT = 0.0 ; double Qiu_noi, Qi_noi ; /*================ Start of executable code.=================*/ if (here->HSMHV2_mode == HiSIM_NORMAL_MODE) { ModeNML = 1.0 ; ModeRVS = 0.0 ; } else { ModeNML = 0.0 ; ModeRVS = 1.0 ; } T1 = Vdse + Vgse + Vbse + Vds + Vgs + Vbs + vbd_jct + vbs_jct ; if ( ! finite (T1) ) { fprintf (stderr , "*** warning(HiSIM_HV(%s)): Unacceptable Bias(es).\n",model->HSMHV2modName ) ; fprintf (stderr , "----- bias information (HiSIM_HV)\n" ) ; fprintf (stderr , "name: %s\n" , here->HSMHV2name ) ; fprintf (stderr , "states: %d\n" , here->HSMHV2states ) ; fprintf (stderr , "Vdse= %.3e Vgse=%.3e Vbse=%.3e\n" , Vdse , Vgse , Vbse ) ; fprintf (stderr , "Vdsi= %.3e Vgsi=%.3e Vbsi=%.3e\n" , Vds , Vgs , Vbs ) ; fprintf (stderr , "vbs_jct= %12.5e vbd_jct= %12.5e\n" , vbs_jct , vbd_jct ) ; fprintf (stderr , "vd= %.3e vs= %.3e vdp= %.3e vgp= %.3e vbp= %.3e vsp= %.3e\n" , *( ckt->CKTrhsOld + here->HSMHV2dNode ) , *( ckt->CKTrhsOld + here->HSMHV2sNode ) , *( ckt->CKTrhsOld + here->HSMHV2dNodePrime ) , *( ckt->CKTrhsOld + here->HSMHV2gNodePrime ) , *( ckt->CKTrhsOld + here->HSMHV2bNodePrime ) , *( ckt->CKTrhsOld + here->HSMHV2sNodePrime ) ) ; fprintf (stderr , "----- bias information (end)\n" ) ; return ( HiSIM_ERROR ) ; } flg_info = model->HSMHV2_info ; flg_nqs = model->HSMHV2_conqs ; /*-----------------------------------------------------------* * Start of the routine. (label) *-----------------*/ /* start_of_routine: */ /*-----------------------------------------------------------* * Temperature dependent constants. *-----------------*/ if ( here->HSMHV2tempNode > 0 && pParam->HSMHV2_rth0 != 0.0 ) { #define HSMHV2EVAL #include "hsmhv2temp_eval.h" } else { beta = here->HSMHV2_beta ; TTEMP = ckt->CKTtemp ; if ( here->HSMHV2_dtemp_Given ) { TTEMP = TTEMP + here->HSMHV2_dtemp ; } Eg_dT = 0.0 ; beta_dT = 0.0 ; beta_inv_dT = 0.0 ; mphn0_dT = 0.0 ; ptovr_dT = 0.0 ; Vmax_dT = 0.0 ; Pb2_dT = 0.0 ; cnst0_dT = 0.0 ; cnst1_dT = 0.0 ; Nin_dT = 0.0 ; /* depletion MOS */ Pb2n_dT = 0.0 ; Vbipn_dT = 0.0 ; depmphn0_dT = 0.0 ; depVmax_dT = 0.0 ; } /* Inverse of the thermal voltage */ beta_inv = here->HSMHV2_beta_inv ; beta2 = here->HSMHV2_beta2 ; /* Bandgap */ Egp12 = here->HSMHV2_egp12 ; Egp32 = here->HSMHV2_egp32 ; /* Metallurgical channel geometry */ Leff = here->HSMHV2_leff ; Weff = here->HSMHV2_weff ; WeffLD_nf = here->HSMHV2_weff_ld * here->HSMHV2_nf ; Ldrift0 = here->HSMHV2_ldrift1 + here->HSMHV2_ldrift2 ; /* Flat band voltage */ Vfb = pParam->HSMHV2_vfbc ; /* Surface impurity profile */ q_Nsub = here->HSMHV2_qnsub ; /* satulation Velocity */ Vmax = here->HSMHV2_vmax ; /* 2 phi_B */ Pb2 = here->HSMHV2_pb2 ; Pb20 = here->HSMHV2_pb20 ; Pb2c = here->HSMHV2_pb2c ; /* Coefficient of the F function for bulk charge */ cnst0 = here->HSMHV2_cnst0 ; /* cnst1: n_{p0} / p_{p0} */ cnst1 = here->HSMHV2_cnst1 ; /* c_eox: Permitivity in ox */ c_eox = here->HSMHV2_cecox ; /* Tox and Cox without QME */ Tox0 = model->HSMHV2_tox ; Cox0 = c_eox / Tox0 ; Cox0_inv = 1.0 / Cox0 ; /* for calculation of Ps0_min */ Vgs_min = model->HSMHV2_type * model->HSMHV2_vgsmin ; /*---------------------------------------------------* * Determine clamping limits for too large Vbs (internal). *-----------------*/ Fn_SU( T1 , Pb2 - model->HSMHV2_vzadd0 , Vbs_max , 0.1 , T0 ) ; Vbs_max = T1 ; Vbs_max_dT = Pb2_dT * T0 ; if ( Pb20 - model->HSMHV2_vzadd0 < Vbs_max ) { Vbs_max = Pb20 - model->HSMHV2_vzadd0 ; Vbs_max_dT = 0.0 ; } if ( Pb2c - model->HSMHV2_vzadd0 < Vbs_max ) { Vbs_max = Pb2c - model->HSMHV2_vzadd0 ; Vbs_max_dT = 0.0 ; } if ( Vbs_bnd > Vbs_max * 0.5 ) { Vbs_bnd = 0.5 * Vbs_max ; Vbs_bnd_dT = 0.5 * Vbs_max_dT ; } if (here->HSMHV2_rs > 0.0 || here->HSMHV2_rd > 0.0) { if ( model->HSMHV2_corsrd == 1 ) flg_rsrd = 1 ; if ( model->HSMHV2_corsrd == 2 ) flg_rsrd = 2 ; if ( model->HSMHV2_corsrd == 3 ) flg_rsrd = 3 ; } /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * PART-1: Basic device characteristics. *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++* * Prepare for potential initial guesses using previous values *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ flg_pprv = 0 ; if ( here->HSMHV2_called >= 1 ) { Vbsc_dif = Vbs - here->HSMHV2_vbsc_prv ; Vdsc_dif = Vds - here->HSMHV2_vdsc_prv ; Vgsc_dif = Vgs- here->HSMHV2_vgsc_prv ; sum_vdif = fabs( Vbsc_dif ) + fabs( Vdsc_dif ) + fabs( Vgsc_dif ) ; if ( model->HSMHV2_copprv >= 1 && sum_vdif <= vtol_pprv && here->HSMHV2_mode * here->HSMHV2_mode_prv > 0 ) { flg_pprv = 1 ;} if ( here->HSMHV2_called >= 2 && flg_pprv == 1 ) { Vbsc_dif2 = here->HSMHV2_vbsc_prv - here->HSMHV2_vbsc_prv2 ; Vdsc_dif2 = here->HSMHV2_vdsc_prv - here->HSMHV2_vdsc_prv2 ; Vgsc_dif2 = here->HSMHV2_vgsc_prv - here->HSMHV2_vgsc_prv2 ; sum_vdif2 = fabs( Vbsc_dif2 ) + fabs( Vdsc_dif2 ) + fabs( Vgsc_dif2 ) ; if ( epsm10 < sum_vdif2 && sum_vdif2 <= vtol_pprv && here->HSMHV2_mode_prv * here->HSMHV2_mode_prv2 > 0 ) { flg_pprv = 2 ; } } Temp_dif = TTEMP - here->HSMHV2_temp_prv ; } else { Vbsc_dif = 0.0 ; Vdsc_dif = 0.0 ; Vgsc_dif = 0.0 ; sum_vdif = 0.0 ; Vbsc_dif2 = 0.0 ; Vdsc_dif2 = 0.0 ; Vgsc_dif2 = 0.0 ; sum_vdif2 = 0.0 ; flg_pprv = 0 ; Temp_dif = 0.0 ; } dVbs = Vbsc_dif ; dVds = Vdsc_dif ; dVgs = Vgsc_dif ; if ( flg_pprv >= 1 ) { Ps0 = here->HSMHV2_ps0_prv ; Ps0_dVbs = here->HSMHV2_ps0_dvbs_prv ; Ps0_dVds = here->HSMHV2_ps0_dvds_prv ; Ps0_dVgs = here->HSMHV2_ps0_dvgs_prv ; Pds = here->HSMHV2_pds_prv ; Pds_dVbs = here->HSMHV2_pds_dvbs_prv ; Pds_dVds = here->HSMHV2_pds_dvds_prv ; Pds_dVgs = here->HSMHV2_pds_dvgs_prv ; } if( here->HSMHV2_cordrift == 1 && here->HSMHV2subNode >= 0 ) { /*----------------------------------------------------------* * Considering these special cases: * ( here->HSMHV2_mode == HiSIM_NORMAL_MODE && Vdse < 0.0 ) * ( here->HSMHV2_mode == HiSIM_REVERSE_MODE && Vdse < 0.0 ) *----------------------------------------------------------*/ Vdsegmt = here->HSMHV2_mode * Vdse ; /* geometrical outer bias */ if ( Vdsegmt >= 0.0 ) { /* vdse normal mode */ Vdserev = Vdsegmt ; Vsubsrev = Vsubs ; } else { /* vdse reverse mode */ Vdserev = - Vdsegmt ; Vsubsrev = Vsubs - Vdsegmt ; } here->HSMHV2_Vsubsrev = Vsubsrev ; /*-----------------------------------------------------------* * Vxserevz: Modified bias introduced to realize symmetry at Vds=0. *-----------------*/ Fn_SymAdd( Vzadd , Vdserev / 2 , model->HSMHV2_vzadd0 , T2 ) ; Vzadd_ext_dVd = T2 / 2 ; if ( Vzadd < ps_conv ) { Vzadd = ps_conv ; Vzadd_ext_dVd = 0.0 ; } Vdserevz = Vdserev + 2.0 * Vzadd ; Vdserevz_dVd = 1.0 + 2.0 * Vzadd_ext_dVd ; here->HSMHV2_Vdserevz = Vdserevz ; here->HSMHV2_Vdserevz_dVd = Vdserevz_dVd ; } if ( flg_rsrd == 1 || flg_rsrd == 3 ) { /*----------------------------------------------------------* * Considering these special cases: * ( here->HSMHV2_mode == HiSIM_NORMAL_MODE && Vdse < 0.0 ) * ( here->HSMHV2_mode == HiSIM_REVERSE_MODE && Vdse < 0.0 ) *----------------------------------------------------------*/ Vdsegmt = here->HSMHV2_mode * Vdse ; /* geometrical outer bias */ Vgsegmt = Vgse - ModeRVS * Vdse ; /* geometrical outer bias */ Vbsegmt = Vbse - ModeRVS * Vdse ; /* geometrical outer bias */ if ( Vdsegmt >= 0.0 ) { /* vdse normal mode */ VdseModeNML = 1 ; VdseModeRVS = 0 ; Vdserev = Vdsegmt ; Vgserev = Vgsegmt ; Vbserev = Vbsegmt ; Vsubsrev = Vsubs ; } else { /* vdse reverse mode */ VdseModeNML = 0 ; VdseModeRVS = 1 ; Vdserev = - Vdsegmt ; Vgserev = Vgsegmt - Vdsegmt ; Vbserev = Vbsegmt - Vdsegmt ; Vsubsrev = Vsubs - Vdsegmt ; } if ( here->HSMHV2_rdvd > 0.0 || here->HSMHV2_rsvd > 0.0 || pParam->HSMHV2_rdvg11 > 0.0 || pParam->HSMHV2_rdvb > 0.0 || here->HSMHV2subNode >= 0 ) { /*-----------------------------------------------------------* * Vxserevz: Modified bias introduced to realize symmetry at Vds=0. *-----------------*/ Fn_SymAdd( Vzadd , Vdserev / 2 , model->HSMHV2_vzadd0 , T2 ) ; Vzadd_ext_dVd = T2 / 2 ; if ( Vzadd < ps_conv ) { Vzadd = ps_conv ; Vzadd_ext_dVd = 0.0 ; } Vdserevz = Vdserev + 2.0 * Vzadd ; Vdserevz_dVd = 1.0 + 2.0 * Vzadd_ext_dVd ; Vgserevz = Vgserev + Vzadd ; Vgserevz_dVd = Vzadd_ext_dVd ; Vbserevz = Vbserev + Vzadd ; Vbserevz_dVd = Vzadd_ext_dVd ; /* bias-dependent Rdrift for HVMOS/LDMOS */ if ( model->HSMHV2_cosym == 1 || VdseModeNML == 1 ) { /* HVMOS or normal mode LDMOS: */ /* ... Vdse dependence */ T1 = VdseModeNML * here->HSMHV2_rd + VdseModeRVS * here->HSMHV2_rs ; T1_dT = VdseModeNML * Rd0_dT + VdseModeRVS * Rs0_dT ; T0 = VdseModeNML * here->HSMHV2_rdvd + VdseModeRVS * here->HSMHV2_rsvd ; T0_dT = VdseModeNML * Rdvd_dT + VdseModeRVS * Rsvd_dT ; T4 = T1 + T0 * Vdserevz ; T4_dVd = T0 * Vdserevz_dVd ; T4_dT = T1_dT + T0_dT * Vdserevz ; /* ... Vgse dependence */ T10 = model->HSMHV2_rdvg12 + small ; T1 = T4 * ( 1.0 + pParam->HSMHV2_rdvg11 * ( 1.0 - Vgserevz / T10 ) ) ; T1_dVd = T4_dVd * ( 1.0 + pParam->HSMHV2_rdvg11 * ( 1.0 - Vgserevz / T10 ) ) + T4 * pParam->HSMHV2_rdvg11 * ( - Vgserevz_dVd / T10 ) ; T1_dVg = T4 * pParam->HSMHV2_rdvg11 * ( - 1.0 ) / T10 ; T1_dT = T4_dT * ( 1.0 + pParam->HSMHV2_rdvg11 * ( 1.0 - Vgserevz / T10 ) ) ; Fn_SL2( T2 , T1 , T4 , rdsl2_dlt , T0 , T5 ) ; T2_dVd = T0 * T1_dVd + T5 * T4_dVd ; T2_dVg = T0 * T1_dVg ; T2_dT = T0 * T1_dT + T5 * T4_dT ; T3 = T4 * ( 1.0 + pParam->HSMHV2_rdvg11 ) ; T3_dVd = T4_dVd * ( 1.0 + pParam->HSMHV2_rdvg11 ) ; T3_dT = T4_dT * ( 1.0 + pParam->HSMHV2_rdvg11 ) ; Fn_SU2( Rdrift , T2 , T3 , rdsu2_dlt , T0, T5 ) ; Rdrift_dVdse = T0 * T2_dVd + T5 * T3_dVd ; Rdrift_dVgse = T0 * T2_dVg ; Rdrift_dT = T0 * T2_dT + T5 * T3_dT ; /* ... Vbse dependence */ T1 = 1.0 - pParam->HSMHV2_rdvb * Vbserevz ; T1_dVb = - pParam->HSMHV2_rdvb ; T1_dVd = - pParam->HSMHV2_rdvb * Vbserevz_dVd ; Fn_SZ( T3 , T1 , rdsz_dlt , T4 ) ; T3 += small ; T3_dVb = T4 * T1_dVb ; T3_dVd = T4 * T1_dVd ; T0 = Rdrift ; Rdrift = Rdrift * T3 ; Rdrift_dVdse = Rdrift_dVdse * T3 + T0 * T3_dVd ; Rdrift_dVgse = Rdrift_dVgse * T3 ; Rdrift_dVbse = + T0 * T3_dVb ; Rdrift_dT = Rdrift_dT * T3 ; } else { /* reverse mode LDMOS: */ Rdrift = here->HSMHV2_rs ; Rdrift_dVdse = 0.0 ; Rdrift_dVgse = 0.0 ; Rdrift_dVbse = 0.0 ; Rdrift_dT = Rs0_dT ; } /* Rsdrift */ T4 = ( VdseModeNML * here->HSMHV2_rs + VdseModeRVS * here->HSMHV2_rd ) ; T4_dT = VdseModeNML * Rs0_dT + VdseModeRVS * Rd0_dT ; T4_dVd = 0.0 ; if ( model->HSMHV2_cosym == 1 || VdseModeRVS == 1 ) { /* HVMOS or reverse mode LDMOS: */ /* ... Vdse dependence */ T0 = VdseModeNML * here->HSMHV2_rsvd + VdseModeRVS * here->HSMHV2_rdvd ; T0_dT = VdseModeNML * Rsvd_dT + VdseModeRVS * Rdvd_dT ; T4 = T4 + T0 * ( 2.0 * model->HSMHV2_vzadd0 ) ; T4_dT = T4_dT + T0_dT * ( 2.0 * model->HSMHV2_vzadd0 ) ; /* ... Vgse dependence */ T10 = model->HSMHV2_rdvg12 + small ; T1 = T4 * ( 1.0 + pParam->HSMHV2_rdvg11 * ( 1.0 - Vgserevz / T10 ) ) ; T1_dVd = T4_dVd * ( 1.0 + pParam->HSMHV2_rdvg11 * ( 1.0 - Vgserevz / T10 ) ) + T4 * pParam->HSMHV2_rdvg11 * ( - Vgserevz_dVd / T10 ) ; T1_dVg = T4 * pParam->HSMHV2_rdvg11 * ( - 1.0 ) / T10 ; T1_dT = T4_dT * ( 1.0 + pParam->HSMHV2_rdvg11 * ( 1.0 - Vgserevz / T10 ) ) ; Fn_SL2( T2 , T1 , T4 , rdsl2_dlt , T0 , T5 ) ; T2_dVd = T0 * T1_dVd + T5 * T4_dVd ; T2_dVg = T0 * T1_dVg ; T2_dT = T0 * T1_dT + T5 * T4_dT ; T3 = T4 * ( 1.0 + pParam->HSMHV2_rdvg11 ) ; T3_dVd = T4_dVd * ( 1.0 + pParam->HSMHV2_rdvg11 ) ; T3_dT = T4_dT * ( 1.0 + pParam->HSMHV2_rdvg11 ) ; Fn_SU2( Rsdrift , T2 , T3 , rdsu2_dlt , T0, T5 ) ; Rsdrift_dVdse = T0 * T2_dVd + T5 * T3_dVd ; Rsdrift_dVgse = T0 * T2_dVg ; Rsdrift_dT = T0 * T2_dT + T5 * T3_dT ; /* ... Vbse dependence */ T1 = 1.0 - pParam->HSMHV2_rdvb * Vbserevz ; T1_dVb = - pParam->HSMHV2_rdvb ; T1_dVd = - pParam->HSMHV2_rdvb * Vbserevz_dVd ; Fn_SZ( T3 , T1 , rdsz_dlt , T4 ) ; T3 += small ; T3_dVb = T4 * T1_dVb ; T3_dVd = T4 * T1_dVd ; T0 = Rsdrift ; Rsdrift = Rsdrift * T3 ; Rsdrift_dVdse = Rsdrift_dVdse * T3 + T0 * T3_dVd ; Rsdrift_dVgse = Rsdrift_dVgse * T3 ; Rsdrift_dVbse = + T0 * T3_dVb ; Rsdrift_dT = Rsdrift_dT * T3 ; } else { /* LDMOS normal mode: */ Rsdrift = here->HSMHV2_rs ; Rsdrift_dVdse = 0.0 ; Rsdrift_dVgse = 0.0 ; Rsdrift_dVbse = 0.0 ; Rsdrift_dT = Rs0_dT ; } if ( here->HSMHV2subNode >= 0 && model->HSMHV2_cosym == 0 && ( pParam->HSMHV2_nover * ( NSUBSUB + pParam->HSMHV2_nover ) ) > 0 ) { /* external substrate node exists && LDMOS case: */ /* Substrate Effect */ T0 = VBISUB - RDVDSUB * Vdserevz - RDVSUB * Vsubsrev ; Fn_SZ( T1, T0, 10.0, T2 ) ; T1 += epsm10 ; T1_dVdserev = - RDVDSUB * Vdserevz_dVd * T2 ; T1_dVsubsrev = - RDVSUB * T2 ; T0 = NSUBSUB / ( pParam->HSMHV2_nover * ( NSUBSUB + pParam->HSMHV2_nover ) ) ; T4 = 2 * C_ESI / C_QE * T0 ; Wdep = sqrt ( T4 * T1 ) + small ; Wdep_dVdserev = 0.5 * T4 * T1_dVdserev / Wdep ; Wdep_dVsubsrev = 0.5 * T4 * T1_dVsubsrev / Wdep ; Fn_SU( Wdep, Wdep, DDRIFT, C_sub_delta * DDRIFT, T0 ) ; Wdep_dVdserev *= T0 ; Wdep_dVsubsrev *= T0 ; T0 = DDRIFT - Wdep ; Fn_SZ( T0, T0, C_sub_delta2, T2 ) ; T0 += epsm10; T6 = Ldrift0 / T0 ; T6_dVdserev = T2 * Wdep_dVdserev * T6 / T0 ; T6_dVsubsrev = T2 * Wdep_dVsubsrev * T6 / T0 ; if ( VdseModeNML == 1 ) { /* Vdse normal mode: */ T0 = Rdrift ; Rdrift = T0 * T6 ; Rdrift_dVdse = Rdrift_dVdse * T6 + T0 * T6_dVdserev ; Rdrift_dVgse = Rdrift_dVgse * T6 ; Rdrift_dVbse = Rdrift_dVbse * T6 ; Rdrift_dVsubs= T0 * T6_dVsubsrev ; Rdrift_dT = Rdrift_dT * T6 ; } else { /* Vdse reverse mode: */ T0 = Rsdrift ; Rsdrift = T0 * T6 ; Rsdrift_dVdse = Rsdrift_dVdse * T6 + T0 * T6_dVdserev ; Rsdrift_dVgse = Rsdrift_dVgse * T6 ; Rsdrift_dVbse = Rsdrift_dVbse * T6 ; Rsdrift_dVsubs = T0 * T6_dVsubsrev ; Rsdrift_dT = Rsdrift_dT * T6 ; } } Rd = Rdrift ; Rd_dVgse = Rdrift_dVgse ; Rd_dVdse = Rdrift_dVdse ; Rd_dVbse = Rdrift_dVbse ; Rd_dVsubs = Rdrift_dVsubs ; Rd_dT = Rdrift_dT ; Rs = Rsdrift ; Rs_dVgse = Rsdrift_dVgse ; Rs_dVdse = Rsdrift_dVdse ; Rs_dVbse = Rsdrift_dVbse ; Rs_dVsubs = Rsdrift_dVsubs ; Rs_dT = Rsdrift_dT ; } else { /* bias-independent Rs/Rd */ Rd = VdseModeNML * here->HSMHV2_rd + VdseModeRVS * here->HSMHV2_rs ; Rd_dT = VdseModeNML * Rd0_dT + VdseModeRVS * Rs0_dT ; Rs = VdseModeNML * here->HSMHV2_rs + VdseModeRVS * here->HSMHV2_rd ; Rs_dT = VdseModeNML * Rs0_dT + VdseModeRVS * Rd0_dT ; } /* Weff dependence of the resistances */ Rd = Rd / WeffLD_nf ; Rd_dVgse /= WeffLD_nf ; Rd_dVdse /= WeffLD_nf ; Rd_dVbse /= WeffLD_nf ; Rd_dVsubs /= WeffLD_nf ; Rd_dT /= WeffLD_nf ; Rs = Rs / WeffLD_nf ; Rs_dVgse /= WeffLD_nf ; Rs_dVdse /= WeffLD_nf ; Rs_dVbse /= WeffLD_nf ; Rs_dVsubs /= WeffLD_nf ; Rs_dT /= WeffLD_nf ; /* Sheet resistances are added. */ Rd += VdseModeNML * here->HSMHV2_rd0 + VdseModeRVS * here->HSMHV2_rs0 ; Rs += VdseModeNML * here->HSMHV2_rs0 + VdseModeRVS * here->HSMHV2_rd0 ; /* Re-stamps for hsmhvnoi.c */ /* Please see hsmhvnoi.c */ T0 = VdseModeNML * Rd + VdseModeRVS * Rs ; /* mode-dependent --> geometrical */ if ( T0 > Res_min && model->HSMHV2_cothrml != 0 ) here->HSMHV2drainConductance = Mfactor / T0 ; else here->HSMHV2drainConductance = 0.0 ; T0 = VdseModeNML * Rs + VdseModeRVS * Rd ; /* mode-dependent --> geometrical */ if ( T0 > Res_min && model->HSMHV2_cothrml != 0 ) here->HSMHV2sourceConductance = Mfactor / T0 ; else here->HSMHV2sourceConductance = 0.0 ; } /* end of case flg_rsrd=1 or flg_rsrd=3 */ /* Clamping for Vbs > Vbs_bnd */ if ( Vbs > Vbs_bnd ) { T1 = Vbs - Vbs_bnd ; T2 = Vbs_max - Vbs_bnd ; T1_dT = - Vbs_bnd_dT ; T2_dT = Vbs_max_dT - Vbs_bnd_dT ; Fn_SUPoly4m( TY , T1 , T2 , Vbscl_dVbs , T0 ) ; TY_dT = T1_dT * Vbscl_dVbs + T2_dT * T0 ; Vbscl = Vbs_bnd + TY ; Vbscl_dT = Vbs_bnd_dT + TY_dT ; T3 = 1 / T2 ; /* x/xmax */ T4 = T1 * T3 ; T4_dVb = T3 ; T4_dT = T1_dT * T3 - T1*T3*T3*T2_dT; T4_dVb_dT = -T3*T3*T2_dT ; T5 = T4 * T4; T5_dVb = 2 * T4_dVb * T4 ; T5_dT = 2.0*T4*T4_dT; T5_dVb_dT = 2 * T4_dVb_dT * T4 + 2 * T4_dVb * T4_dT ; T15 = 2 * T4_dVb * T4_dVb ; /* T15 = T5_dVb_dVb */ T6 = T4 * T5 ; T6_dVb = T4_dVb * T5 + T4 * T5_dVb ; T6_dT = T4_dT * T5 + T4 * T5_dT ; T6_dVb_dT = T4_dVb_dT * T5 + T4_dVb * T5_dT + T4_dT * T5_dVb + T4*T5_dVb_dT ; T16 = T4_dVb * T5_dVb + T4_dVb * T5_dVb + T4 * T15 ; /* T16 = T6_dVb_dVb */ /* T7 = Z T7_dVb = dZ_dVb T17 = dZ_dVb_dVb */ T7 = 1 + T4 + T5 + T6 + T5 * T5 ; T7_dVb = T4_dVb + T5_dVb + T6_dVb + 2 * T5_dVb * T5 ; T7_dT = T4_dT + T5_dT + T6_dT + 2 * T5_dT * T5 ; T7_dVb_dT = T4_dVb_dT + T5_dVb_dT + T6_dVb_dT + 2 * T5_dVb_dT * T5 + 2 * T5_dVb * T5_dT ; T17 = T15 + T16 + 2 * T15 * T5 + 2 * T5_dVb * T5_dVb ; T8 = T7 * T7 ; T8_dVb = 2 * T7_dVb * T7 ; T8_dT = 2 * T7_dT * T7 ; T9 = 1 / T8 ; T9_dVb = - T8_dVb * T9 * T9 ; T9_dT = - T8_dT * T9 * T9 ; Vbscl_dVbs = T2 * T7_dVb * T9 ; Vbscl_dVbs_dT = T2_dT * T7_dVb * T9 + T2*(T7_dVb_dT * T9+ T7_dVb * T9_dT); Vbscl_dVbs_dVbs = T2 * ( T17 * T9 + T7_dVb * T9_dVb ) ; } else { Vbscl = Vbs ; Vbscl_dVbs = 1.0 ; Vbscl_dT = 0.0 ; Vbscl_dVbs_dVbs = 0.0 ; } /*-----------------------------------------------------------* * Vxsz: Modified bias introduced to realize symmetry at Vds=0. *-----------------*/ T1 = Vbscl_dVbs * Vds / 2 ; Fn_SymAdd( Vzadd , T1 , model->HSMHV2_vzadd0 , T2 ) ; Vzadd_dVbs = T2 * Vbscl_dVbs_dVbs * Vds / 2 ; Vzadd_dT = T2 * Vbscl_dVbs_dT * Vds / 2 ; T2 *= Vbscl_dVbs / 2 ; Vzadd_dVds = T2 ; if ( Vzadd < ps_conv ) { Vzadd = ps_conv ; Vzadd_dVds = 0.0 ; Vzadd_dVbs = 0.0 ; Vzadd_dT = 0.0 ; } Vbsz = Vbscl + Vzadd ; Vbsz_dVbs = Vbscl_dVbs + Vzadd_dVbs ; Vbsz_dVds = Vzadd_dVds ; Vbsz_dT = Vbscl_dT + Vzadd_dT; Vdsz = Vds + 2.0 * Vzadd ; Vdsz_dVbs = 2.0 * Vzadd_dVbs ; Vdsz_dVds = 1.0 + 2.0 * Vzadd_dVds ; Vdsz_dT = 2.0 * Vzadd_dT ; Vgsz = Vgs + Vzadd ; Vgsz_dVbs = Vzadd_dVbs ; Vgsz_dVgs = 1.0 ; Vgsz_dVds = Vzadd_dVds ; Vgsz_dT = Vzadd_dT ; /*---------------------------------------------------* * Factor of modification for symmetry. *-----------------*/ T1 = here->HSMHV2_qnsub_esi * Cox0_inv * Cox0_inv ; T2 = Vgs - Vfb ; T3 = 1 + 2.0 / T1 * ( T2 - 1.0 / here->HSMHV2_betatnom - Vbscl ) ; Fn_SZ( T4 , T3 , 1e-3 , T5 ) ; T4 += small ; TX = sqrt( T4 ) ; Pslsat = T2 + T1 * ( 1.0 - TX ) ; VdsatS = Pslsat - Pb2c ; Fn_SL( VdsatS , VdsatS , 0.1 , 5e-2 , T6 ) ; VdsatS_dVbs = ( TX ? (T6 * T5 / TX * Vbscl_dVbs) : 0.0 ) ; VdsatS_dVds = 0.0 ; VdsatS_dVgs = ( TX ? (T6 * ( 1.0 - T5 / TX )) : 0.0 ) ; VdsatS_dT = (TX ? (T6* T5/TX * Vbscl_dT) : 0) ; T1 = Vds / VdsatS ; Fn_SUPoly4( TX , T1 , 1.0 , T0 ) ; FMDVDS = TX * TX ; T2 = 2 * TX * T0 ; T3 = T2 / ( VdsatS * VdsatS ) ; FMDVDS_dVbs = T3 * ( - Vds * VdsatS_dVbs ) ; FMDVDS_dVds = T3 * ( 1.0 * VdsatS - Vds * VdsatS_dVds ) ; FMDVDS_dVgs = T3 * ( - Vds * VdsatS_dVgs ) ; FMDVDS_dT = T3 * ( - Vds * VdsatS_dT ) ; /*-----------------------------------------------------------* * Quantum effect *-----------------*/ if ( model->HSMHV2_flg_qme == 0 ) { flg_qme = 0 ; } else { flg_qme = 1 ; } T1 = here->HSMHV2_2qnsub_esi ; T2 = sqrt( T1 * Pb20 ) ; Vthq = Pb20 + Vfb + T2 * Cox0_inv ; Vthq_dVb = 0.0 ; Vthq_dVd = 0.0 ; if ( flg_qme == 0 ) { Tox = Tox0 ; Tox_dVb = 0.0 ; Tox_dVd = 0.0 ; Tox_dVg = 0.0 ; Tox_dT = 0.0 ; Cox = Cox0 ; Cox_dVb = 0.0 ; Cox_dVd = 0.0 ; Cox_dVg = 0.0 ; Cox_dT = 0.0 ; Cox_inv = Cox0_inv ; Cox_inv_dVb = 0.0 ; Cox_inv_dVd = 0.0 ; Cox_inv_dVg = 0.0 ; Cox_inv_dT = 0.0 ; T0 = cnst0 * cnst0 * Cox_inv ; cnstCoxi = T0 * Cox_inv ; cnstCoxi_dVb = 0.0 ; cnstCoxi_dVd = 0.0 ; cnstCoxi_dVg = 0.0 ; cnstCoxi_dT = 2.0 * cnst0 * cnst0_dT * Cox_inv * Cox_inv ; } else { T5 = Vgs - Vbs - Vthq + model->HSMHV2_qme2 ; T5_dVb = -1.0 - Vthq_dVb ; T5_dVd = - Vthq_dVd ; T5_dVg = 1.0 ; T5_dT = 0.0 ; Fn_SZ( T2 , T5 , qme_dlt, T3) ; T2 = T2 + small ; T2_dVb = T3 * T5_dVb ; T2_dVd = T3 * T5_dVd ; T2_dVg = T3 * T5_dVg ; T2_dT = T3 * T5_dT ; T3 = 1.0 / T2 ; T7 = -1.0 / ( T2 * T2 ) ; T3_dVb = T7 * T2_dVb ; T3_dVd = T7 * T2_dVd ; T3_dVg = T7 * T2_dVg ; T3_dT = T7 * T2_dT ; T4 = 2.0 * fabs(Vthq) ; T6 = T5 - Vgs + Vfb ; if(T6 > T4) { T4 = T6; } Fn_SU( T2 , T3 , 1.0 / T4 , qme_dlt, T6 ) ; T2_dVb = T6 * T3_dVb ; T2_dVd = T6 * T3_dVd ; T2_dVg = T6 * T3_dVg ; T2_dT = T6 * T3_dT ; dTox = model->HSMHV2_qme1 * T2 + model->HSMHV2_qme3 ; T7 = model->HSMHV2_qme1 ; dTox_dVb = T7 * T2_dVb ; dTox_dVd = T7 * T2_dVd ; dTox_dVg = T7 * T2_dVg ; dTox_dT = T7 * T2_dT ; if ( dTox * 1.0e12 < Tox0 ) { dTox = 0.0 ; dTox_dVb = 0.0 ; dTox_dVd = 0.0 ; dTox_dVg = 0.0 ; dTox_dT = 0.0 ; flg_qme = 0 ; } Tox = Tox0 + dTox ; Tox_dVb = dTox_dVb ; Tox_dVd = dTox_dVd ; Tox_dVg = dTox_dVg ; Tox_dT = dTox_dT ; Cox = c_eox / Tox ; T1 = - c_eox / ( Tox * Tox ) ; Cox_dVb = T1 * Tox_dVb ; Cox_dVd = T1 * Tox_dVd ; Cox_dVg = T1 * Tox_dVg ; Cox_dT = T1 * Tox_dT ; Cox_inv = Tox / c_eox ; T1 = 1.0 / c_eox ; Cox_inv_dVb = T1 * Tox_dVb ; Cox_inv_dVd = T1 * Tox_dVd ; Cox_inv_dVg = T1 * Tox_dVg ; Cox_inv_dT = T1 * Tox_dT ; T0 = cnst0 * cnst0 * Cox_inv ; cnstCoxi = T0 * Cox_inv ; T1 = 2.0 * T0 ; cnstCoxi_dVb = T1 * Cox_inv_dVb ; cnstCoxi_dVd = T1 * Cox_inv_dVd ; cnstCoxi_dVg = T1 * Cox_inv_dVg ; cnstCoxi_dT = 2.0 * cnst0 * cnst0_dT * Cox_inv * Cox_inv + T1 * Cox_inv_dT; } /*---------------------------------------------------* * Vbsz2 : Vbs for dVth *-----------------*/ Vbsz2 = Vbsz ; Vbsz2_dVbs = Vbsz_dVbs ; Vbsz2_dVds = Vbsz_dVds ; Vbsz2_dVgs = 0.0 ; Vbsz2_dT = Vbsz_dT ; /*---------------------------------------------------* * Vthp : Vth with pocket. *-----------------*/ T1 = here->HSMHV2_2qnsub_esi ; Qb0 = sqrt (T1 * (Pb20 - Vbsz2)) ; T2 = 0.5 * T1 / Qb0 ; Qb0_dVb = T2 * (- Vbsz2_dVbs) ; Qb0_dVd = T2 * (- Vbsz2_dVds) ; Qb0_dVg = T2 * (- Vbsz2_dVgs) ; Qb0_dT = T2 * (- Vbsz2_dT) ; Vthp = Pb20 + Vfb + Qb0 * Cox_inv + here->HSMHV2_ptovr; Vthp_dVb = Qb0_dVb * Cox_inv + Qb0 * Cox_inv_dVb ; Vthp_dVd = Qb0_dVd * Cox_inv + Qb0 * Cox_inv_dVd ; Vthp_dVg = Qb0_dVg * Cox_inv + Qb0 * Cox_inv_dVg ; Vthp_dT = Qb0_dT * Cox_inv + Qb0 * Cox_inv_dT + ptovr_dT ; Pb20b = Pb20 ; Pb20b_dVb = 0.0 ; Pb20b_dVd = 0.0 ; Pb20b_dVg = 0.0 ; Pb20b_dT = 0.0 ; T0 = 0.95 ; T1 = T0 * Pb20b - Vbsz2 - 1.0e-3 ; T1_dVb = T0 * Pb20b_dVb - Vbsz2_dVbs ; T1_dVd = T0 * Pb20b_dVd - Vbsz2_dVds ; T1_dVg = T0 * Pb20b_dVg - Vbsz2_dVgs ; T1_dT = T0 * Pb20b_dT - Vbsz2_dT ; T2 = sqrt (T1 * T1 + 4.0 * T0 * Pb20b * 1.0e-3) ; T3 = T0 * Pb20b - 0.5 * (T1 + T2) ; T4 = 2.0 * T0 * 1.0e-3 ; T5 = T1 / T2 ; T6 = T4 / T2 ; T3_dVb = T0 * Pb20b_dVb - 0.5 * (T1_dVb + (T1_dVb * T5 + T6 * Pb20b_dVb ) ) ; T3_dVd = T0 * Pb20b_dVd - 0.5 * (T1_dVd + (T1_dVd * T5 + T6 * Pb20b_dVd ) ) ; T3_dVg = T0 * Pb20b_dVg - 0.5 * (T1_dVg + (T1_dVg * T5 + T6 * Pb20b_dVg ) ) ; T3_dT = T0 * Pb20b_dT - 0.5 * (T1_dT + (T1_dT * T5 + T6 * Pb20b_dT ) ) ; Pbsum = Pb20b - T3 ; Pbsum_dVb = Pb20b_dVb - T3_dVb ; Pbsum_dVd = Pb20b_dVd - T3_dVd ; Pbsum_dVg = Pb20b_dVg - T3_dVg ; Pbsum_dT = Pb20b_dT - T3_dT ; if( model->HSMHV2_codep ) { Pbsum = Pbsum + model->HSMHV2_depeta * Vdsz ; Pbsum_dVb = Pbsum_dVb + model->HSMHV2_depeta * Vdsz_dVbs ; Pbsum_dVd = Pbsum_dVd + model->HSMHV2_depeta * Vdsz_dVds ; } sqrt_Pbsum = sqrt( Pbsum ) ; /*-------------------------------------------* * dVthLP : Short-channel effect induced by pocket. * - Vth0 : Vth without pocket. *-----------------*/ if ( model->HSMHV2_lp != 0.0 ) { T1 = here->HSMHV2_2qnsub_esi ; T2 = model->HSMHV2_bs2 - Vbsz2 ; T3 = T2 + small ; T4 = sqrt (T3 * T3 + 4.0 * vth_dlt) ; T5 = 0.5 * (T3 + T4) ; T6 = 0.5 * (1.0 + T3 / T4) ; T5_dVb = - Vbsz2_dVbs * T6 ; T5_dVd = - Vbsz2_dVds * T6 ; T5_dVg = - Vbsz2_dVgs * T6 ; T5_dT = - Vbsz2_dT * T6 ; T7 = 1.0 / T5 ; bs12 = model->HSMHV2_bs1 * T7 ; T8 = - bs12 * T7 ; bs12_dVb = T8 * T5_dVb ; bs12_dVd = T8 * T5_dVd ; bs12_dVg = T8 * T5_dVg ; bs12_dT = T8 * T5_dT ; Fn_SU( T10 , Vbsz2 + bs12, 0.93 * Pb20, vth_dlt, T0) ; Qbmm = sqrt (T1 * (Pb20 - T10 )) ; T9 = T0 / Qbmm ; Qbmm_dVb = 0.5 * T1 * - (Vbsz2_dVbs + bs12_dVb) * T9 ; Qbmm_dVd = 0.5 * T1 * - (Vbsz2_dVds + bs12_dVd) * T9 ; Qbmm_dVg = 0.5 * T1 * - (Vbsz2_dVgs + bs12_dVg) * T9 ; Qbmm_dT = 0.5 * T1 * - (Vbsz2_dT + bs12_dT) * T9 ; dqb = (Qb0 - Qbmm) * Cox_inv ; dqb_dVb = Vthp_dVb - Qbmm_dVb * Cox_inv - Qbmm * Cox_inv_dVb ; dqb_dVd = Vthp_dVd - Qbmm_dVd * Cox_inv - Qbmm * Cox_inv_dVd ; dqb_dVg = Vthp_dVg - Qbmm_dVg * Cox_inv - Qbmm * Cox_inv_dVg ; dqb_dT = Qb0_dT * Cox_inv + Qb0 * Cox_inv_dT - Qbmm_dT * Cox_inv - Qbmm * Cox_inv_dT ; T1 = 2.0 * C_QE * here->HSMHV2_nsubc * C_ESI ; T2 = sqrt( T1 * ( Pb2c - Vbsz2 ) ) ; Vth0 = Pb2c + Vfb + T2 * Cox_inv ; T3 = 0.5 * T1 / T2 * Cox_inv ; Vth0_dVb = T3 * ( - Vbsz2_dVbs ) + T2 * Cox_inv_dVb ; Vth0_dVd = T3 * ( - Vbsz2_dVds ) + T2 * Cox_inv_dVd ; Vth0_dVg = T3 * ( - Vbsz2_dVgs ) + T2 * Cox_inv_dVg ; Vth0_dT = T3 * ( - Vbsz2_dT ) + T2 * Cox_inv_dT ; T1 = C_ESI * Cox_inv ; T2 = here->HSMHV2_wdplp ; T4 = 1.0e0 / ( model->HSMHV2_lp * model->HSMHV2_lp ) ; T5 = 2.0e0 * ( model->HSMHV2_vbi - Pb20b ) * T1 * T2 * T4 ; dVth0 = T5 * sqrt_Pbsum ; T6 = 0.5 * T5 / sqrt_Pbsum ; T7 = 2.0e0 * ( model->HSMHV2_vbi - Pb20b ) * C_ESI * T2 * T4 * sqrt_Pbsum ; T8 = - 2.0e0 * T1 * T2 * T4 * sqrt_Pbsum ; dVth0_dVb = T6 * Pbsum_dVb + T7 * Cox_inv_dVb + T8 * Pb20b_dVb ; dVth0_dVd = T6 * Pbsum_dVd + T7 * Cox_inv_dVd + T8 * Pb20b_dVd ; dVth0_dVg = T6 * Pbsum_dVg + T7 * Cox_inv_dVg + T8 * Pb20b_dVg ; dVth0_dT = T6 * Pbsum_dT + T7 * Cox_inv_dT + T8 * Pb20b_dT ; T1 = Vthp - Vth0 ; T1_dVb = Vthp_dVb - Vth0_dVb ; T2 = pParam->HSMHV2_scp1 + pParam->HSMHV2_scp3 * Pbsum / model->HSMHV2_lp ; T2_dVb = pParam->HSMHV2_scp3 * Pbsum_dVb / model->HSMHV2_lp ; T3 = T2 + pParam->HSMHV2_scp2 * Vdsz ; T3_dVb = T2_dVb + pParam->HSMHV2_scp2 * Vdsz_dVbs ; Vdx = model->HSMHV2_scp21 + Vdsz ; Vdx_dVbs = Vdsz_dVbs ; Vdx_dT = Vdsz_dT ; Vdx2 = Vdx * Vdx ; Vdx2_dVbs = 2 * Vdx_dVbs * Vdx ; Vdx2_dT = 2 * Vdx_dT * Vdx ; dVthLP = T1 * dVth0 * T3 + dqb - here->HSMHV2_msc / Vdx2 ; dVthLP_dVb = T1_dVb * dVth0 * T3 + T1 * dVth0_dVb * T3 + T1 * dVth0 * T3_dVb + dqb_dVb + here->HSMHV2_msc / Vdx2 /Vdx2 *Vdx2_dVbs; T4 = T1 * dVth0 * pParam->HSMHV2_scp3 / model->HSMHV2_lp ; dVthLP_dVd = (Vthp_dVd - Vth0_dVd) * dVth0 * T3 + T1 * dVth0_dVd * T3 + T4 * Pbsum_dVd + T1 * dVth0 * pParam->HSMHV2_scp2 * Vdsz_dVds + dqb_dVd + 2.0e0 * here->HSMHV2_msc * Vdx * Vdsz_dVds / ( Vdx2 * Vdx2 ) ; dVthLP_dVg = (Vthp_dVg - Vth0_dVg) * dVth0 * T3 + T1 * dVth0_dVg * T3 + T4 * Pbsum_dVg + dqb_dVg ; dVthLP_dT = (Vthp_dT - Vth0_dT) * dVth0 * T3 + T1 * dVth0_dT * T3 + T4 * Pbsum_dT + T1 * dVth0 * pParam->HSMHV2_scp2 * Vdsz_dT + dqb_dT + 2.0e0 * here->HSMHV2_msc * Vdx * Vdsz_dT / ( Vdx2 * Vdx2 ); } else { dVthLP = 0.0e0 ; dVthLP_dVb = 0.0e0 ; dVthLP_dVd = 0.0e0 ; dVthLP_dVg = 0.0e0 ; dVthLP_dT = 0.0e0 ; } /*---------------------------------------------------* * dVthSC : Short-channel effect induced by Vds. *-----------------*/ T1 = C_ESI * Cox_inv ; T2 = here->HSMHV2_wdpl ; T3 = here->HSMHV2_lgate - model->HSMHV2_parl2 ; T4 = 1.0e0 / ( T3 * T3 ) ; T5 = 2.0e0 * ( model->HSMHV2_vbi - Pb20b ) * T1 * T2 * T4 ; dVth0 = T5 * sqrt_Pbsum ; T6 = T5 / 2.0 / sqrt_Pbsum ; T7 = 2.0e0 * ( model->HSMHV2_vbi - Pb20b ) * C_ESI * T2 * T4 * sqrt_Pbsum ; T8 = - 2.0e0 * T1 * T2 * T4 * sqrt_Pbsum ; dVth0_dVb = T6 * Pbsum_dVb + T7 * Cox_inv_dVb + T8 * Pb20b_dVb ; dVth0_dVd = T6 * Pbsum_dVd + T7 * Cox_inv_dVd + T8 * Pb20b_dVd ; dVth0_dVg = T6 * Pbsum_dVg + T7 * Cox_inv_dVg + T8 * Pb20b_dVg ; dVth0_dT = T6 * Pbsum_dT + T7 * Cox_inv_dT + T8 * Pb20b_dT ; T1 = pParam->HSMHV2_sc3 / here->HSMHV2_lgate ; T4 = pParam->HSMHV2_sc1 + T1 * Pbsum ; T4_dVb = T1 * Pbsum_dVb ; T4_dVd = T1 * Pbsum_dVd ; T4_dVg = T1 * Pbsum_dVg ; T4_dT = T1 * Pbsum_dT ; T5 = T4 + pParam->HSMHV2_sc2 * Vdsz * ( 1.0 + model->HSMHV2_sc4 * Pbsum ); T5_dVb = T4_dVb + pParam->HSMHV2_sc2 * Vdsz * model->HSMHV2_sc4 * Pbsum_dVb + pParam->HSMHV2_sc2 * Vdsz_dVbs * model->HSMHV2_sc4 * Pbsum; T5_dVd = T4_dVd + pParam->HSMHV2_sc2 * Vdsz_dVds * ( 1.0 + model->HSMHV2_sc4 * Pbsum ) + pParam->HSMHV2_sc2 * Vdsz * model->HSMHV2_sc4 * Pbsum_dVd; T5_dVg = T4_dVg + pParam->HSMHV2_sc2 * Vdsz * model->HSMHV2_sc4 * Pbsum_dVg; T5_dT = T4_dT + pParam->HSMHV2_sc2 * Vdsz * model->HSMHV2_sc4 * Pbsum_dT + pParam->HSMHV2_sc2 * Vdsz_dT * model->HSMHV2_sc4 * Pbsum; dVthSC = dVth0 * T5 ; dVthSC_dVb = dVth0_dVb * T5 + dVth0 * T5_dVb ; dVthSC_dVd = dVth0_dVd * T5 + dVth0 * T5_dVd ; dVthSC_dVg = dVth0_dVg * T5 + dVth0 * T5_dVg ; dVthSC_dT = dVth0_dT * T5 + dVth0 * T5_dT ; /*---------------------------------------------------* * dVthW : narrow-channel effect. *-----------------*/ T1 = 1.0 / Cox ; T2 = T1 * T1 ; T3 = 1.0 / ( Cox + pParam->HSMHV2_wfc / Weff ) ; T4 = T3 * T3 ; T5 = T1 - T3 ; T6 = Qb0 * ( T2 - T4 ) ; dVthW = Qb0 * T5 + pParam->HSMHV2_wvth0 / here->HSMHV2_wg ; dVthW_dVb = Qb0_dVb * T5 - Cox_dVb * T6 ; dVthW_dVd = Qb0_dVd * T5 - Cox_dVd * T6 ; dVthW_dVg = - Cox_dVg * T6 ; dVthW_dT = Qb0_dT * T5 - Cox_dT * T6 ; /*---------------------------------------------------* * dVth : Total variation. * - Positive dVth means the decrease in Vth. *-----------------*/ dVth = dVthSC + dVthLP + dVthW + here->HSMHV2_dVthsm ; dVth_dVb = dVthSC_dVb + dVthLP_dVb + dVthW_dVb ; dVth_dVd = dVthSC_dVd + dVthLP_dVd + dVthW_dVd ; dVth_dVg = dVthSC_dVg + dVthLP_dVg + dVthW_dVg ; dVth_dT = dVthSC_dT + dVthLP_dT + dVthW_dT ; /*---------------------------------------------------* * Vth : Threshold voltagei for OP. *-----------------*/ T2 = sqrt( here->HSMHV2_2qnsub_esi * (Pb2-Vbsz) ) ; Vth = Pb2 + Vfb + T2 * Cox0_inv - dVth ; /*-----------------------------------------------------------* * Constants in the equation of Ps0 . *-----------------*/ fac1 = cnst0 * Cox_inv ; fac1_dVbs = cnst0 * Cox_inv_dVb ; fac1_dVds = cnst0 * Cox_inv_dVd ; fac1_dVgs = cnst0 * Cox_inv_dVg ; fac1_dT = Cox_inv * cnst0_dT ; fac1p2 = fac1 * fac1 ; fac1p2_dT = 2.0 * fac1 * fac1_dT ; /*---------------------------------------------------* * Poly-Depletion Effect *-----------------*/ dPpg = 0.0 ; dPpg_dVb = 0.0 ; dPpg_dVd = 0.0 ; dPpg_dVg = 0.0 ; dPpg_dT = 0.0 ; if ( here->HSMHV2_flg_pgd == 1 ) { T7 = Vgsz ; T7_dVb = Vgsz_dVbs ; T7_dVd = Vgsz_dVds ; T7_dVg = Vgsz_dVgs ; T7_dT = Vgsz_dT ; T0 = here->HSMHV2_cnstpgd ; T3 = T7 - model->HSMHV2_pgd2 ; T3_dVb = T7_dVb ; T3_dVd = T7_dVd ; T3_dVg = T7_dVg ; T3_dT = T7_dT ; Fn_ExpLim( dPpg , T3 , T6 ) ; dPpg_dVb = T6 * T3_dVb ; dPpg_dVd = T6 * T3_dVd ; dPpg_dVg = T6 * T3_dVg ; dPpg_dT = T6 * T3_dT ; Fn_SZ( dPpg , dPpg - 1.0 , pol_dlt , T6 ) ; dPpg_dVb *= T6 ; dPpg_dVd *= T6 ; dPpg_dVg *= T6 ; dPpg_dT *= T6 ; dPpg *= T0 ; dPpg_dVb *= T0 ; dPpg_dVd *= T0 ; dPpg_dVg *= T0 ; dPpg_dT *= T0 ; Fn_SU( dPpg , dPpg , pol_b , pol_dlt , T9 ) ; dPpg_dVb *= T9 ; dPpg_dVd *= T9 ; dPpg_dVg *= T9 ; dPpg_dT *= T9 ; } /*---------------------------------------------------* * Vgp : Effective gate bias with SCE & RSCE & flatband. *-----------------*/ Vgp = Vgs - Vfb + dVth - dPpg ; Vgp_dVbs = dVth_dVb - dPpg_dVb ; Vgp_dVds = dVth_dVd - dPpg_dVd ; Vgp_dVgs = 1.0e0 + dVth_dVg - dPpg_dVg ; Vgp_dT = dVth_dT - dPpg_dT ; /*---------------------------------------------------* * Vgs_fb : Actual flatband voltage taking account Vbscl. * - note: if Vgs == Vgs_fb then Vgp == Ps0 == Vbscl . *------------------*/ Vgs_fb = Vfb - dVth + dPpg + Vbscl ; if( model->HSMHV2_codep == 1 ) { /*---------------------------------------------------* * depletion mode MOSFET *------------------*/ #include "hsmhv2eval_dep.h" } else { /*---------------------------------------------------* * normal mode MOSFET *------------------*/ /*-----------------------------------------------------------* * Accumulation zone. (zone-A) * - evaluate basic characteristics and exit from this part. *-----------------*/ if ( Vgs < Vgs_fb ) { flg_zone = -1 ; /*---------------------------------------------------* * Evaluation of Ps0. * - Psa : Analytical solution of * Cox( Vgp - Psa ) = cnst0 * Qacc * where Qacc is the 3-degree series of (fdep)^{1/2}. * The unkown is transformed to Chi=beta(Ps0-Vbs). * - Ps0_min : |Ps0_min| when Vbs=0. *-----------------*/ /* Ps0_min: approx. solution of Poisson equation at Vgs_min */ /* ( easy to improve, if necessary ) */ // Ps0_min = here->HSMHV2_eg - Pb2 ; // Ps0_min_dT = Eg_dT - Pb2_dT ; Ps0_min = 2.0 * beta_inv * log(-Vgs_min/fac1) ; Ps0_min_dVds = -2.0 * beta_inv * fac1_dVds / fac1 ; Ps0_min_dVgs = -2.0 * beta_inv * fac1_dVgs / fac1 ; Ps0_min_dVbs = -2.0 * beta_inv * fac1_dVbs / fac1 ; Ps0_min_dT = -2.0 * beta_inv * fac1_dT / fac1 + beta * Ps0_min * beta_inv_dT; TX = beta * ( Vgp - Vbscl ) ; TX_dVbs = beta * ( Vgp_dVbs - Vbscl_dVbs ) ; TX_dVds = beta * Vgp_dVds ; TX_dVgs = beta * Vgp_dVgs ; TX_dT = beta_dT * ( Vgp - Vbscl ) + beta * ( Vgp_dT - Vbscl_dT ); T1 = 1.0 / ( beta * cnst0 ) ; TY = T1 * Cox ; TY_dVbs = T1 * Cox_dVb ; TY_dVds = T1 * Cox_dVd ; TY_dVgs = T1 * Cox_dVg ; T1_dT = - T1 / ( beta * cnst0 ) * ( beta_dT * cnst0 + beta * cnst0_dT ) ; TY_dT = T1_dT * Cox ; Ac41 = 2.0 + 3.0 * C_SQRT_2 * TY ; Ac4 = 8.0 * Ac41 * Ac41 * Ac41 ; T1 = 72.0 * Ac41 * Ac41 * C_SQRT_2 ; Ac4_dVbs = T1 * TY_dVbs ; Ac4_dVds = T1 * TY_dVds ; Ac4_dVgs = T1 * TY_dVgs ; Ac4_dT = T1 * TY_dT ; T4 = ( TX - 2.0 ) ; T5 = 9.0 * TY * T4 ; T5_dVb = 9.0 * ( TY_dVbs * T4 + TY * TX_dVbs ) ; T5_dVd = 9.0 * ( TY_dVds * T4 + TY * TX_dVds ) ; T5_dVg = 9.0 * ( TY_dVgs * T4 + TY * TX_dVgs ) ; T5_dT = 9.0 * ( TY_dT * T4 + TY * TX_dT ) ; Ac31 = 7.0 * C_SQRT_2 - T5 ; Ac31_dVbs = -T5_dVb ; Ac31_dVds = -T5_dVd ; Ac31_dVgs = -T5_dVg ; Ac31_dT = -T5_dT ; Ac3 = Ac31 * Ac31 ; T1 = 2.0 * Ac31 ; Ac3_dVbs = T1 * Ac31_dVbs ; Ac3_dVds = T1 * Ac31_dVds ; Ac3_dVgs = T1 * Ac31_dVgs ; Ac3_dT = T1 * Ac31_dT ; Ac2 = sqrt( Ac4 + Ac3 ) ; T1 = 0.5 / Ac2 ; Ac2_dVbs = T1 * ( Ac4_dVbs + Ac3_dVbs ) ; Ac2_dVds = T1 * ( Ac4_dVds + Ac3_dVds ) ; Ac2_dVgs = T1 * ( Ac4_dVgs + Ac3_dVgs ) ; Ac2_dT = T1 * ( Ac4_dT + Ac3_dT ) ; Ac1 = -7.0 * C_SQRT_2 + Ac2 + T5 ; Ac1_dVbs = Ac2_dVbs + T5_dVb ; Ac1_dVds = Ac2_dVds + T5_dVd ; Ac1_dVgs = Ac2_dVgs + T5_dVg ; Ac1_dT = Ac2_dT + T5_dT ; Acd = Fn_Pow( Ac1 , C_1o3 ) ; T1 = C_1o3 / ( Acd * Acd ) ; Acd_dVbs = Ac1_dVbs * T1 ; Acd_dVds = Ac1_dVds * T1 ; Acd_dVgs = Ac1_dVgs * T1 ; Acd_dT = Ac1_dT * T1 ; Acn = -4.0 * C_SQRT_2 - 12.0 * TY + 2.0 * Acd + C_SQRT_2 * Acd * Acd ; T1 = 2.0 + 2.0 * C_SQRT_2 * Acd ; Acn_dVbs = - 12.0 * TY_dVbs + T1 * Acd_dVbs ; Acn_dVds = - 12.0 * TY_dVds + T1 * Acd_dVds ; Acn_dVgs = - 12.0 * TY_dVgs + T1 * Acd_dVgs ; Acn_dT = - 12.0 * TY_dT + T1 * Acd_dT ; T1 = 1.0 / Acd ; Chi = Acn * T1 ; Chi_dVbs = ( Acn_dVbs - Chi * Acd_dVbs ) * T1 ; Chi_dVds = ( Acn_dVds - Chi * Acd_dVds ) * T1 ; Chi_dVgs = ( Acn_dVgs - Chi * Acd_dVgs ) * T1 ; Chi_dT = ( Acn_dT - Chi * Acd_dT ) * T1 ; Psa = Chi * beta_inv + Vbscl ; Psa_dVbs = Chi_dVbs * beta_inv + Vbscl_dVbs ; Psa_dVds = Chi_dVds * beta_inv ; Psa_dVgs = Chi_dVgs * beta_inv ; Psa_dT = Chi_dT * beta_inv + Chi * beta_inv_dT + Vbscl_dT; T1 = Psa - Vbscl ; T1_dVb = Psa_dVbs - Vbscl_dVbs ; T1_dVd = Psa_dVds ; T1_dVg = Psa_dVgs ; T1_dT = Psa_dT - Vbscl_dT ; T2 = T1 / Ps0_min ; T2_dVb = ( T1_dVb * Ps0_min - T1 * Ps0_min_dVbs ) / ( Ps0_min * Ps0_min ) ; T2_dVd = ( T1_dVd * Ps0_min - T1 * Ps0_min_dVds ) / ( Ps0_min * Ps0_min ) ; T2_dVg = ( T1_dVg * Ps0_min - T1 * Ps0_min_dVgs ) / ( Ps0_min * Ps0_min ) ; T2_dT = ( T1_dT * Ps0_min - T1 * Ps0_min_dT ) / ( Ps0_min * Ps0_min ) ; T3 = sqrt( 1.0 + ( T2 * T2 ) ) ; T3_dVb = 1.0 / T3 * T2 * T2_dVb ; T3_dVd = 1.0 / T3 * T2 * T2_dVd ; T3_dVg = 1.0 / T3 * T2 * T2_dVg ; T3_dT = 1.0 / T3 * T2 * T2_dT ; Ps0 = T1 / T3 + Vbscl ; T9 = 1.0 / ( T3 * T3 ) ; Ps0_dVbs = T9 * ( ( Psa_dVbs - Vbscl_dVbs ) * T3 - T1 * T3_dVb ) + Vbscl_dVbs ; Ps0_dVds = T9 * ( Psa_dVds * T3 - T1 * T3_dVd ) ; Ps0_dVgs = T9 * ( Psa_dVgs * T3 - T1 * T3_dVg ) ; Ps0_dT = T9 * ( ( Psa_dT - Vbscl_dT )* T3 - T1 * T3_dT ) + Vbscl_dT; /*---------------------------------------------------* * Characteristics. *-----------------*/ Psl = Ps0 ; Psl_dVbs = Ps0_dVbs ; Psl_dVds = Ps0_dVds ; Psl_dVgs = Ps0_dVgs ; Psl_dT = Ps0_dT ; /** (reminder) Psdl = Psl ; Psdl_dVbs = Psl_dVbs ; Psdl_dVds = Psl_dVds ; Psdl_dVgs = Psl_dVgs ; **/ Pds = 0.0 ; Pds_dVbs = 0.0 ; Pds_dVds = 0.0 ; Pds_dVgs = 0.0 ; Pds_dT = 0.0 ; T2 = ( Vgp - Ps0 ) ; T2_dT = Vgp_dT - Ps0_dT ; Qbu = Cox * T2 ; Qbu_dVbs = Cox * ( Vgp_dVbs - Ps0_dVbs ) + Cox_dVb * T2 ; Qbu_dVds = Cox * ( Vgp_dVds - Ps0_dVds ) + Cox_dVd * T2 ; Qbu_dVgs = Cox * ( Vgp_dVgs - Ps0_dVgs ) + Cox_dVg * T2 ; Qbu_dT = Cox * T2_dT ; Qiu = 0.0e0 ; Qiu_dVbs = 0.0e0 ; Qiu_dVds = 0.0e0 ; Qiu_dVgs = 0.0e0 ; Qiu_dT = 0.0e0 ; Qdrat = 0.0e0 ; Qdrat_dVbs = 0.0e0 ; Qdrat_dVds = 0.0e0 ; Qdrat_dVgs = 0.0e0 ; Qdrat_dT = 0.0 ; Lred = 0.0e0 ; Lred_dVbs = 0.0e0 ; Lred_dVds = 0.0e0 ; Lred_dVgs = 0.0e0 ; Lred_dT = 0.0e0 ; Ids = 0.0e0 ; Ids_dVbs = 0.0e0 ; Ids_dVds = 0.0e0 ; Ids_dVgs = 0.0e0 ; Ids_dT = 0.0e0 ; VgVt = 0.0 ; flg_noqi = 1 ; goto end_of_part_1 ; } /*-----------------------------------------------------------* * Initial guess for Ps0. *-----------------*/ /*---------------------------------------------------* * Ps0_iniA: solution of subthreshold equation assuming zone-D1/D2. *-----------------*/ TX = 1.0e0 + 4.0e0 * ( beta * ( Vgp - Vbscl ) - 1.0e0 ) / ( fac1p2 * beta2 ) ; TX = Fn_Max( TX , epsm10 ) ; Ps0_iniA = Vgp + fac1p2 * beta * 0.5 * ( 1.0e0 - sqrt( TX ) ) ; /* use analytical value in subthreshold region. */ if ( Vgs < ( Vfb + Vth ) * 0.5 ) { flg_pprv = 0 ; } if ( flg_pprv >= 1 ) { /*---------------------------------------------------* * Use previous value. *-----------------*/ T1 = Ps0_dVbs * dVbs + Ps0_dVds * dVds + Ps0_dVgs * dVgs ; Ps0_ini = Ps0 + T1 ; T2 = here->HSMHV2_ps0_dtemp_prv * Temp_dif ; if ( fabs( T1 + T2 ) < dP_max ) { Ps0_ini += T2 ; } if ( flg_pprv == 2 ) { /* TX_dVxs = d^2 Ps0 / d Vxs^2 here */ if ( Vbsc_dif2 > epsm10 ) { TX_dVbs = ( here->HSMHV2_ps0_dvbs_prv - here->HSMHV2_ps0_dvbs_prv2 ) / Vbsc_dif2 ; } else { TX_dVbs = 0.0 ; } if ( Vdsc_dif2 > epsm10 ) { TX_dVds = ( here->HSMHV2_ps0_dvds_prv - here->HSMHV2_ps0_dvds_prv2 ) / Vdsc_dif2 ; } else { TX_dVds = 0.0 ; } if ( Vgsc_dif2 > epsm10 ) { TX_dVgs = ( here->HSMHV2_ps0_dvgs_prv - here->HSMHV2_ps0_dvgs_prv2 ) / Vgsc_dif2 ; } else { TX_dVgs = 0.0 ; } T2 = ( dVbs * dVbs ) / 2 * TX_dVbs + ( dVds * dVds ) / 2 * TX_dVds + ( dVgs * dVgs ) / 2 * TX_dVgs ; if ( fabs( T2 ) < fabs( 0.5 * T1 ) ) { Ps0_ini += T2 ; } else { flg_pprv = 1 ; } } T1 = Ps0_ini - Ps0 ; if ( T1 < - dP_max || T1 > dP_max ) { flg_pprv = 0 ; /* flag changes to analytical */ } else { Ps0_iniA = Fn_Max( Ps0_ini , Ps0_iniA ) ; } } /* end of (flg_pprv >=1) if-block */ if ( flg_pprv == 0 ) { /*---------------------------------------------------* * Analytical initial guess. *-----------------*/ /*-------------------------------------------* * Common part. *-----------------*/ Chi = beta * ( Ps0_iniA - Vbscl ) ; if ( Chi < znbd3 ) { /*-----------------------------------* * zone-D1/D2 * - Ps0_ini is the analytical solution of Qs=Qb0 with * Qb0 being approximated to 3-degree polynomial. *-----------------*/ TY = beta * ( Vgp - Vbscl ) ; T1 = 1.0e0 / ( cn_nc3 * beta * fac1 ) ; T2 = 81.0 + 3.0 * T1 ; T3 = -2916.0 - 81.0 * T1 + 27.0 * T1 * TY ; T4 = 1458.0 - 81.0 * ( 54.0 + T1 ) + 27.0 * T1 * TY ; T4 = T4 * T4 ; T5 = Fn_Pow( T3 + sqrt( 4 * T2 * T2 * T2 + T4 ) , C_1o3 ) ; TX = 3.0 - ( C_2p_1o3 * T2 ) / ( 3.0 * T5 ) + 1 / ( 3.0 * C_2p_1o3 ) * T5 ; Ps0_iniA = TX * beta_inv + Vbscl ; Ps0_ini = Ps0_iniA ; } else if ( Vgs <= Vth ) { /*-----------------------------------* * Weak inversion zone. *-----------------*/ Ps0_ini = Ps0_iniA ; } else { /*-----------------------------------* * Strong inversion zone. * - Ps0_iniB : upper bound. *-----------------*/ T1 = 1.0 / cnst1 / cnstCoxi ; T2 = T1 * Vgp * Vgp ; T3 = beta + 2.0 / Vgp ; Ps0_iniB = log( T2 ) / T3 ; Fn_SU( Ps0_ini , Ps0_iniA, Ps0_iniB, c_ps0ini_2, T1) ; } } TX = Vbscl + ps_conv / 2 ; if ( Ps0_ini < TX ) Ps0_ini = TX ; /*---------------------------------------------------* * Assign initial guess. *-----------------*/ Ps0 = Ps0_ini ; Psl_lim = Ps0_iniA ; /*---------------------------------------------------* * Calculation of Ps0. (beginning of Newton loop) * - Fs0 : Fs0 = 0 is the equation to be solved. * - dPs0 : correction value. *-----------------*/ exp_bVbs = exp( beta * Vbscl ) ; cfs1 = cnst1 * exp_bVbs ; flg_conv = 0 ; for ( lp_s0 = 1 ; lp_s0 <= lp_s0_max + 1 ; lp_s0 ++ ) { Chi = beta * ( Ps0 - Vbscl ) ; if ( Chi < znbd5 ) { /*-------------------------------------------* * zone-D1/D2. (Ps0) * - Qb0 is approximated to 5-degree polynomial. *-----------------*/ fi = Chi * Chi * Chi * ( cn_im53 + Chi * ( cn_im54 + Chi * cn_im55 ) ) ; fi_dChi = Chi * Chi * ( 3 * cn_im53 + Chi * ( 4 * cn_im54 + Chi * 5 * cn_im55 ) ) ; fs01 = cfs1 * fi * fi ; fs01_dPs0 = cfs1 * beta * 2 * fi * fi_dChi ; fb = Chi * ( cn_nc51 + Chi * ( cn_nc52 + Chi * ( cn_nc53 + Chi * ( cn_nc54 + Chi * cn_nc55 ) ) ) ) ; fb_dChi = cn_nc51 + Chi * ( 2 * cn_nc52 + Chi * ( 3 * cn_nc53 + Chi * ( 4 * cn_nc54 + Chi * 5 * cn_nc55 ) ) ) ; fs02 = sqrt( fb * fb + fs01 ) ; fs02_dPs0 = ( beta * fb_dChi * 2 * fb + fs01_dPs0 ) / ( fs02 + fs02 ) ; } else { /*-------------------------------------------* * zone-D3. (Ps0) *-----------------*/ if ( Chi < large_arg ) { /* avoid exp_Chi to become extremely large */ exp_Chi = exp( Chi ) ; fs01 = cfs1 * ( exp_Chi - 1.0e0 ) ; fs01_dPs0 = cfs1 * beta * ( exp_Chi ) ; } else { exp_bPs0 = exp( beta*Ps0 ) ; fs01 = cnst1 * ( exp_bPs0 - exp_bVbs ) ; fs01_dPs0 = cnst1 * beta * exp_bPs0 ; } fs02 = sqrt( Chi - 1.0 + fs01 ) ; fs02_dPs0 = ( beta + fs01_dPs0 ) / ( fs02 + fs02 ) ; } /* end of if ( Chi ... ) else block */ Fs0 = Vgp - Ps0 - fac1 * fs02 ; Fs0_dPs0 = - 1.0e0 - fac1 * fs02_dPs0 ; if ( flg_conv == 1 ) break ; dPs0 = - Fs0 / Fs0_dPs0 ; /*-------------------------------------------* * Update Ps0 . * - clamped to Vbscl if Ps0 < Vbscl . *-----------------*/ dPlim = 0.5*dP_max*(1.0 + Fn_Max(1.e0,fabs(Ps0))) ; if ( fabs( dPs0 ) > dPlim ) dPs0 = dPlim * Fn_Sgn( dPs0 ) ; Ps0 = Ps0 + dPs0 ; // TX = Vbscl + ps_conv / 2 ; // if ( Ps0 < TX ) Ps0 = TX ; /*-------------------------------------------* * Check convergence. * NOTE: This condition may be too rigid. *-----------------*/ if ( fabs( dPs0 ) <= ps_conv && fabs( Fs0 ) <= gs_conv ) { flg_conv = 1 ; } } /* end of Ps0 Newton loop */ /* Reduce loop count to exclude the sweep for derivative calculation */ lp_s0 -- ; /*-------------------------------------------* * Procedure for diverged case. *-----------------*/ if ( flg_conv == 0 ) { fprintf( stderr , "*** warning(HiSIM_HV(%s)): Went Over Iteration Maximum (Ps0)\n", model->HSMHV2modName ) ; fprintf( stderr , " Vbse = %7.3f Vdse = %7.3f Vgse = %7.3f\n" , Vbse , Vdse , Vgse ) ; if ( flg_info >= 2 ) { printf( "*** warning(HiSIM_HV(%s)): Went Over Iteration Maximum (Ps0)\n", model->HSMHV2modName ) ; } } /*---------------------------------------------------* * Evaluate derivatives of Ps0. * - note: Here, fs01_dVbs and fs02_dVbs are derivatives * w.r.t. explicit Vbs. So, Ps0 in the fs01 and fs02 * expressions is regarded as a constant. *-----------------*/ /* self heating */ Chi_dT = beta_dT *( Ps0 - Vbscl ) - beta * Vbscl_dT ; exp_bVbs_dT = ( beta_dT * Vbscl + beta * Vbscl_dT ) * exp_bVbs ; cfs1_dT = exp_bVbs * cnst1_dT + exp_bVbs_dT * cnst1 ; /* derivatives of fs0* w.r.t. explicit Vbs */ if ( Chi < znbd5 ) { fs01_dVbs = cfs1 * beta * fi * ( fi - 2 * fi_dChi ) * Vbscl_dVbs ; fs01_dT = cfs1 * 2 * fi * fi_dChi * Chi_dT + fi * fi * cfs1_dT ; T2 = 1.0e0 / ( fs02 + fs02 ) ; fs02_dVbs = ( - beta * Vbscl_dVbs * fb_dChi * 2 * fb + fs01_dVbs ) * T2 ; fs02_dT = ( 2 * fb * fb_dChi * Chi_dT + fs01_dT ) * T2 ; } else { if ( Chi < large_arg ) { fs01_dVbs = - cfs1 * beta * Vbscl_dVbs ; exp_Chi_dT = exp_Chi * Chi_dT ; fs01_dT = ( exp_Chi - 1.0e0 ) * cfs1_dT + cfs1 * exp_Chi_dT ; } else { fs01_dVbs = - cfs1 * beta * Vbscl_dVbs ; exp_bPs0_dT = exp_bPs0 * Ps0 * beta_dT ; fs01_dT = cnst1_dT*(exp_bPs0-exp_bVbs) + cnst1*(exp_bPs0_dT-exp_bVbs_dT) ; } T2 = 0.5e0 / fs02 ; fs02_dVbs = ( - beta * Vbscl_dVbs + fs01_dVbs ) * T2 ; fs02_dT = T2 * ( Chi_dT + fs01_dT ) ; } T1 = 1.0 / Fs0_dPs0 ; Ps0_dVbs = - ( Vgp_dVbs - ( fac1 * fs02_dVbs + fac1_dVbs * fs02 ) ) * T1 ; Ps0_dVds = - ( Vgp_dVds - fac1_dVds * fs02 ) * T1 ; Ps0_dVgs = - ( Vgp_dVgs - fac1_dVgs * fs02 ) * T1 ; Ps0_dT = - ( Vgp_dT - ( fac1 * fs02_dT + fac1_dT * fs02 ) ) * T1 ; Chi_dT = beta_dT *( Ps0 - Vbscl ) + beta * ( Ps0_dT - Vbscl_dT ) ; if ( Chi < znbd5 ) { /*-------------------------------------------* * zone-D1/D2. (Ps0) * Xi0 := fdep0^2 = fb * fb [D1,D2] *-----------------*/ Xi0 = fb * fb + epsm10 ; T1 = 2 * fb * fb_dChi * beta ; Xi0_dVbs = T1 * ( Ps0_dVbs - Vbscl_dVbs ) ; Xi0_dVds = T1 * Ps0_dVds ; Xi0_dVgs = T1 * Ps0_dVgs ; Xi0_dT = 2 * fb * fb_dChi * Chi_dT ; Xi0p12 = fb + epsm10 ; T1 = fb_dChi * beta ; Xi0p12_dVbs = T1 * ( Ps0_dVbs - Vbscl_dVbs ) ; Xi0p12_dVds = T1 * Ps0_dVds ; Xi0p12_dVgs = T1 * Ps0_dVgs ; Xi0p12_dT = fb_dChi * Chi_dT ; Xi0p32 = fb * fb * fb + epsm10 ; T1 = 3 * fb * fb * fb_dChi * beta ; Xi0p32_dVbs = T1 * ( Ps0_dVbs - Vbscl_dVbs ) ; Xi0p32_dVds = T1 * Ps0_dVds ; Xi0p32_dVgs = T1 * Ps0_dVgs ; Xi0p32_dT = 3 * fb * fb * fb_dChi * Chi_dT ; fs01_dT = cfs1 * 2 * fi * fi_dChi * Chi_dT + fi * fi * cfs1_dT ; fs02_dT = ( 2 * fb * fb_dChi * Chi_dT + fs01_dT ) * T2 ; } else { /*-------------------------------------------* * zone-D3. (Ps0) *-----------------*/ flg_zone = 3 ; flg_noqi = 0 ; /*-----------------------------------* * Xi0 := fdep0^2 = Chi - 1 = beta * ( Ps0 - Vbscl ) - 1 [D3] *-----------------*/ Xi0 = Chi - 1.0e0 ; Xi0_dVbs = beta * ( Ps0_dVbs - Vbscl_dVbs ) ; Xi0_dVds = beta * Ps0_dVds ; Xi0_dVgs = beta * Ps0_dVgs ; Xi0_dT = Chi_dT ; Xi0p12 = sqrt( Xi0 ) ; T1 = 0.5e0 / Xi0p12 ; Xi0p12_dVbs = T1 * Xi0_dVbs ; Xi0p12_dVds = T1 * Xi0_dVds ; Xi0p12_dVgs = T1 * Xi0_dVgs ; Xi0p12_dT = T1 * Xi0_dT ; Xi0p32 = Xi0 * Xi0p12 ; T1 = 1.5e0 * Xi0p12 ; Xi0p32_dVbs = T1 * Xi0_dVbs ; Xi0p32_dVds = T1 * Xi0_dVds ; Xi0p32_dVgs = T1 * Xi0_dVgs ; Xi0p32_dT = T1 * Xi0_dT ; if ( Chi < large_arg ) { exp_Chi_dT = exp_Chi * Chi_dT ; fs01_dT = ( exp_Chi - 1.0e0 ) * cfs1_dT + cfs1 * exp_Chi_dT ; } else { exp_bPs0_dT = exp_bPs0 * (beta_dT * Ps0 + beta * Ps0_dT) ; fs01_dT = cnst1_dT*(exp_bPs0-exp_bVbs) + cnst1*(exp_bPs0_dT-exp_bVbs_dT) ; } fs02_dT = T2 * ( Chi_dT + fs01_dT ) ; } /* end of if ( Chi ... ) block */ /*-----------------------------------------------------------* * - Recalculate the derivatives of fs01 and fs02. * note: fs01 = cnst1 * exp( Vbs ) * ( exp( Chi ) - Chi - 1.0e0 ) ; * fs02 = sqrt( Xi0 + fs01 ) ; *-----------------*/ fs01_dVbs = Ps0_dVbs * fs01_dPs0 + fs01_dVbs ; fs01_dVds = Ps0_dVds * fs01_dPs0 ; fs01_dVgs = Ps0_dVgs * fs01_dPs0 ; fs02_dVbs = Ps0_dVbs * fs02_dPs0 + fs02_dVbs ; fs02_dVds = Ps0_dVds * fs02_dPs0 ; fs02_dVgs = Ps0_dVgs * fs02_dPs0 ; /*-----------------------------------------------------------* * Qb0 : Qb at source side. * Qn0 : Qi at source side. *-----------------*/ Qb0 = cnst0 * Xi0p12 ; Qb0_dVb = cnst0 * Xi0p12_dVbs ; Qb0_dVd = cnst0 * Xi0p12_dVds ; Qb0_dVg = cnst0 * Xi0p12_dVgs ; Qb0_dT = cnst0 * Xi0p12_dT + cnst0_dT * Xi0p12 ; T1 = 1.0 / ( fs02 + Xi0p12 ) ; Qn0 = cnst0 * fs01 * T1 ; T1_dT = - T1 * T1 * ( fs02_dT + Xi0p12_dT ) ; Qn0_dT = cnst0 * ( fs01 * T1_dT + T1 * fs01_dT ) + fs01 * T1 * cnst0_dT ; T2 = 1.0 / ( fs01 + small ) ; Qn0_dVbs = Qn0 * ( fs01_dVbs * T2 - ( fs02_dVbs + Xi0p12_dVbs ) * T1 ) ; Qn0_dVds = Qn0 * ( fs01_dVds * T2 - ( fs02_dVds + Xi0p12_dVds ) * T1 ) ; Qn0_dVgs = Qn0 * ( fs01_dVgs * T2 - ( fs02_dVgs + Xi0p12_dVgs ) * T1 ) ; /*-----------------------------------------------------------* * zone-D1 and D2 *-----------------*/ if ( Chi < znbd5 ) { if ( Chi < znbd3 ) { /*-------------------------------------------* * zone-D1. (Ps0) *-----------------*/ flg_zone = 1 ; flg_noqi = 1 ; /** !! to be revisited !! **/ Qiu = Qn0 ; Qiu_dVbs = Qn0_dVbs ; Qiu_dVds = Qn0_dVds ; Qiu_dVgs = Qn0_dVgs ; Qiu_dT = Qn0_dT; Qbu = Qb0 ; Qbu_dVbs = Qb0_dVb ; Qbu_dVds = Qb0_dVd ; Qbu_dVgs = Qb0_dVg ; Qbu_dT = Qb0_dT ; Qdrat = 0.5 ; Qdrat_dVbs = 0.0 ; Qdrat_dVds = 0.0 ; Qdrat_dVgs = 0.0 ; Qdrat_dT = 0.0; Lred = 0.0e0 ; Lred_dVbs = 0.0e0 ; Lred_dVds = 0.0e0 ; Lred_dVgs = 0.0e0 ; Lred_dT = 0.0e0 ; /** (reminder) *Psdl = Psl ; *Psdl_dVbs = Psl_dVbs ; *Psdl_dVds = Psl_dVds ; *Psdl_dVgs = Psl_dVgs ; **/ } else { /*-------------------------------------------* * zone-D2 (Ps0) *-----------------*/ flg_zone = 2 ; flg_noqi = 0 ; /*-----------------------------------------------------------* * FD2 : connecting function for zone-D2. * - Qiu, Qbu, Qdrat and Lred should be interpolated later. *-----------------*/ T1 = 1.0 / ( znbd5 - znbd3 ) ; TX = T1 * ( Chi - znbd3 ) ; TX_dVbs = beta * T1 * ( Ps0_dVbs - Vbscl_dVbs ) ; TX_dVds = beta * T1 * Ps0_dVds ; TX_dVgs = beta * T1 * Ps0_dVgs ; TX_dT = T1 * Chi_dT ; FD2 = TX * TX * TX * ( 10.0 + TX * ( -15.0 + TX * 6.0 ) ) ; T4 = TX * TX * ( 30.0 + TX * ( -60.0 + TX * 30.0 ) ) ; FD2_dVbs = T4 * TX_dVbs ; FD2_dVds = T4 * TX_dVds ; FD2_dVgs = T4 * TX_dVgs ; FD2_dT = T4 * TX_dT ; } /* end of zone-D2 */ } /*---------------------------------------------------* * VgVt : Vgp - Vth_qi. ( Vth_qi is Vth for Qi evaluation. ) *-----------------*/ VgVt = Qn0 * Cox_inv ; VgVt_dVbs = Qn0_dVbs * Cox_inv + Qn0 * Cox_inv_dVb ; VgVt_dVds = Qn0_dVds * Cox_inv + Qn0 * Cox_inv_dVd ; VgVt_dVgs = Qn0_dVgs * Cox_inv + Qn0 * Cox_inv_dVg ; VgVt_dT = Qn0_dT * Cox_inv ; /*-----------------------------------------------------------* * make Qi=Qd=Ids=0 if VgVt <= VgVt_small *-----------------*/ if ( VgVt <= VgVt_small ) { flg_zone = 4 ; flg_noqi = 1 ; Psl = Ps0 ; Psl_dVbs = Ps0_dVbs ; Psl_dVds = Ps0_dVds ; Psl_dVgs = Ps0_dVgs ; Psl_dT = Ps0_dT ; /** (reminder) *Psdl = Psl ; *Psdl_dVbs = Psl_dVbs ; *Psdl_dVds = Psl_dVds ; *Psdl_dVgs = Psl_dVgs ; **/ Pds = 0.0 ; Pds_dVbs = 0.0 ; Pds_dVds = 0.0 ; Pds_dVgs = 0.0 ; Pds_dT = 0.0 ; Qbu = Qb0 ; Qbu_dVbs = Qb0_dVb ; Qbu_dVds = Qb0_dVd ; Qbu_dVgs = Qb0_dVg ; Qbu_dT = Qb0_dT ; Qiu = 0.0 ; Qiu_dVbs = 0.0 ; Qiu_dVds = 0.0 ; Qiu_dVgs = 0.0 ; Qiu_dT = 0.0 ; Qdrat = 0.5 ; Qdrat_dVbs = 0.0 ; Qdrat_dVds = 0.0 ; Qdrat_dVgs = 0.0 ; Qdrat_dT = 0.0 ; Lred = 0.0 ; Lred_dVbs = 0.0 ; Lred_dVds = 0.0 ; Lred_dVgs = 0.0 ; Lred_dT = 0.0 ; Ids = 0.0e0 ; Ids_dVbs = 0.0e0 ; Ids_dVds = 0.0e0 ; Ids_dVgs = 0.0e0 ; Ids_dT = 0.0e0 ; goto end_of_part_1 ; } /*-----------------------------------------------------------* * Start point of Psl (= Ps0 + Pds) calculation. (label) *-----------------*/ /* start_of_Psl: */ /* Vdseff (begin) */ Vdsorg = Vds ; T2 = here->HSMHV2_qnsub_esi / ( Cox * Cox ) ; T4 = - 2.0e0 * T2 / Cox ; T2_dVb = T4 * Cox_dVb ; T2_dVd = T4 * Cox_dVd ; T2_dVg = T4 * Cox_dVg ; T2_dT = T4 * Cox_dT ; T0 = Vgp - beta_inv - Vbsz ; T0_dT = Vgp_dT - beta_inv_dT - Vbsz_dT ; Fn_SZ( T9, 1.0e0 + 2.0e0 / T2 * T0, 1e-3, TX ) ; T9 += small ; T3 = sqrt( T9 ) ; T4 = 0.5e0 / T3 ; T5 = 1.0e0 / ( T2 * T2 ) ; T6 = T4 * 2.0e0 * T5 * TX ; T7 = T6 * T0 ; T8 = T6 * T2 ; T3_dVb = - T2_dVb * T7 + T8 * ( Vgp_dVbs - Vbsz_dVbs ) ; T3_dVd = - T2_dVd * T7 + T8 * ( Vgp_dVds - Vbsz_dVds ) ; T3_dVg = - T2_dVg * T7 + T8 * Vgp_dVgs ; T3_dT = - T2_dT * T7 + T8 * T0_dT ; T10 = Vgp + T2 * ( 1.0e0 - T3 ) ; T10_dVb = Vgp_dVbs + T2_dVb * ( 1.0e0 - T3 ) - T2 * T3_dVb ; T10_dVd = Vgp_dVds + T2_dVd * ( 1.0e0 - T3 ) - T2 * T3_dVd ; T10_dVg = Vgp_dVgs + T2_dVg * ( 1.0e0 - T3 ) - T2 * T3_dVg ; T10_dT = Vgp_dT + T2_dT * ( 1.0e0 - T3 ) - T2 * T3_dT ; Fn_SZ( T10 , T10 , 0.01 , T0 ) ; T10 += epsm10 ; T10_dVb *= T0 ; T10_dVd *= T0 ; T10_dVg *= T0 ; T10_dT *= T0 ; T1 = Vds / T10 ; T2 = Fn_Pow( T1 , here->HSMHV2_ddlt - 1.0e0 ) ; T7 = T2 * T1 ; T0 = here->HSMHV2_ddlt * T2 / ( T10 * T10 ) ; T7_dVb = T0 * ( - Vds * T10_dVb ) ; T7_dVd = T0 * ( T10 - Vds * T10_dVd ) ; T7_dVg = T0 * ( - Vds * T10_dVg ) ; T7_dT = T0 * ( - Vds * T10_dT ) ; T3 = 1.0 + T7 ; T4 = Fn_Pow( T3 , 1.0 / here->HSMHV2_ddlt - 1.0 ) ; T6 = T4 * T3 ; T0 = T4 / here->HSMHV2_ddlt ; T6_dVb = T0 * T7_dVb ; T6_dVd = T0 * T7_dVd ; T6_dVg = T0 * T7_dVg ; T6_dT = T0 * T7_dT ; Vdseff = Vds / T6 ; T0 = 1.0 / ( T6 * T6 ) ; Vdseff_dVbs = - Vds * T6_dVb * T0 ; Vdseff_dVds = ( T6 - Vds * T6_dVd ) * T0 ; Vdseff_dVgs = - Vds * T6_dVg * T0 ; Vdseff_dT = - Vds * T6_dT * T0 ; Vds = Vdseff ; /* Vdseff (end) */ exp_bVbsVds = exp( beta * ( Vbscl - Vds ) ) ; exp_bVbsVds_dT = ( beta_dT * ( Vbscl - Vds ) + beta * (Vbscl_dT - Vdseff_dT) ) * exp_bVbsVds ; /*---------------------------------------------------* * Skip Psl calculation when Vds is very small. *-----------------*/ if ( Vds < 0.0 ) { Pds = 0.0 ; Psl = Ps0 ; // flg_conv = 1 ; goto start_of_loopl ; } /*-----------------------------------------------------------* * Initial guess for Pds ( = Psl - Ps0 ). *-----------------*/ if ( flg_pprv >= 1 ) { /*---------------------------------------------------* * Use previous value. *-----------------*/ T1 = Pds_dVbs * dVbs + Pds_dVds * dVds + Pds_dVgs * dVgs ; Pds_ini = Pds + T1 ; /* self heating */ T2 = here->HSMHV2_pds_dtemp_prv * Temp_dif ; if ( fabs( T1 + T2 ) < dP_max ) { Pds_ini += T2 ; } if ( flg_pprv == 2 ) { /* TX_dVxs = d^2 Pds / d Vxs^2 here */ if ( Vbsc_dif2 > epsm10 ) { TX_dVbs = ( here->HSMHV2_pds_dvbs_prv - here->HSMHV2_pds_dvbs_prv2 ) / Vbsc_dif2 ; } else { TX_dVbs = 0.0 ; } if ( Vdsc_dif2 > epsm10 ) { TX_dVds = ( here->HSMHV2_pds_dvds_prv - here->HSMHV2_pds_dvds_prv2 ) / Vdsc_dif2 ; } else { TX_dVds = 0.0 ; } if ( Vgsc_dif2 > epsm10 ) { TX_dVgs = ( here->HSMHV2_pds_dvgs_prv - here->HSMHV2_pds_dvgs_prv2 ) / Vgsc_dif2 ; } else { TX_dVgs = 0.0 ; } T2 = ( dVbs * dVbs ) / 2 * TX_dVbs + ( dVds * dVds ) / 2 * TX_dVds + ( dVgs * dVgs ) / 2 * TX_dVgs ; if ( fabs( T2 ) < fabs( 0.5 * T1 ) ) { Pds_ini += T2 ; } else { flg_pprv = 1 ; } } T1 = Pds_ini - Pds ; if ( T1 < - dP_max || T1 > dP_max ) flg_pprv = 0 ; /* flag changes */ } /* end of (flg_pprv>=1) if-block */ if ( flg_pprv == 0 ) { /*---------------------------------------------------* * Analytical initial guess. *-----------------*/ Pds_max = Fn_Max( Psl_lim - Ps0 , 0.0e0 ) ; Fn_SU( Pds_ini , Vds, (1.0e0 + c_pslini_1) * Pds_max, c_pslini_2, T1 ) ; Pds_ini = Fn_Min( Pds_ini , Pds_max ) ; } if ( Pds_ini < 0.0 ) Pds_ini = 0.0 ; else if ( Pds_ini > Vds ) Pds_ini = Vds ; /*---------------------------------------------------* * Assign initial guess. *-----------------*/ Pds = Pds_ini ; Psl = Ps0 + Pds ; /*---------------------------------------------------* * Calculation of Psl by solving Poisson eqn. * (beginning of Newton loop) * - Fsl : Fsl = 0 is the equation to be solved. * - dPsl : correction value. *-----------------*/ flg_conv = 0 ; /*---------------------------------------------------* * start of Psl calculation. (label) *-----------------*/ start_of_loopl: for ( lp_sl = 1 ; lp_sl <= lp_sl_max + 1 ; lp_sl ++ ) { Chi = beta * ( Psl - Vbscl ) ; if ( Chi < znbd5 ) { /*-------------------------------------------* * zone-D2. (Psl) * - Qb0 is approximated to 5-degree polynomial. *-----------------*/ fi = Chi * Chi * Chi * ( cn_im53 + Chi * ( cn_im54 + Chi * cn_im55 ) ) ; fi_dChi = Chi * Chi * ( 3 * cn_im53 + Chi * ( 4 * cn_im54 + Chi * 5 * cn_im55 ) ) ; cfs1 = cnst1 * exp_bVbsVds ; fsl1 = cfs1 * fi * fi ; fsl1_dPsl = cfs1 * beta * 2 * fi * fi_dChi ; fb = Chi * ( cn_nc51 + Chi * ( cn_nc52 + Chi * ( cn_nc53 + Chi * ( cn_nc54 + Chi * cn_nc55 ) ) ) ) ; fb_dChi = cn_nc51 + Chi * ( 2 * cn_nc52 + Chi * ( 3 * cn_nc53 + Chi * ( 4 * cn_nc54 + Chi * 5 * cn_nc55 ) ) ) ; fsl2 = sqrt( fb * fb + fsl1 ) ; fsl2_dPsl = ( beta * fb_dChi * 2 * fb + fsl1_dPsl ) / ( fsl2 + fsl2 ) ; } else { /*-------------------------------------------* * zone-D3. (Psl) *-----------------*/ Rho = beta * ( Psl - Vds ) ; exp_Rho = exp( Rho ) ; fsl1 = cnst1 * ( exp_Rho - exp_bVbsVds ) ; fsl1_dPsl = cnst1 * beta * ( exp_Rho ) ; Xil = Chi - 1.0e0 ; fsl2 = sqrt( Xil + fsl1 ) ; fsl2_dPsl = ( beta + fsl1_dPsl ) / ( fsl2 + fsl2 ) ; } Fsl = Vgp - Psl - fac1 * fsl2 ; Fsl_dPsl = - 1.0e0 - fac1 * fsl2_dPsl ; if ( flg_conv == 1 ) break ; dPsl = - Fsl / Fsl_dPsl ; /*-------------------------------------------* * Update Psl . * - clamped to Vbscl if Psl < Vbscl . *-----------------*/ dPlim = 0.5*dP_max*(1.0 + Fn_Max(1.e0,fabs(Psl))) ; if ( fabs( dPsl ) > dPlim ) dPsl = dPlim * Fn_Sgn( dPsl ) ; Psl = Psl + dPsl ; /*-------------------------------------------* * Check convergence. * NOTE: This condition may be too rigid. *-----------------*/ if ( fabs( dPsl ) <= ps_conv && fabs( Fsl ) <= gs_conv ) { flg_conv = 1 ; } } /* end of Psl Newton loop */ /* Reduce loop count to exclude derivative calculation sweep */ lp_sl -- ; /*-------------------------------------------* * Procedure for diverged case. *-----------------*/ if ( flg_conv == 0 ) { fprintf( stderr , "*** warning(HiSIM_HV(%s)): Went Over Iteration Maximum (Psl)\n", model->HSMHV2modName ) ; fprintf( stderr , " Vbse = %7.3f Vdse = %7.3f Vgse = %7.3f\n" , Vbse , Vdse , Vgse ) ; if ( flg_info >= 2 ) { printf("*** warning(HiSIM_HV(%s)): Went Over Iteration Maximum (Psl)\n", model->HSMHV2modName ) ; } } /*---------------------------------------------------* * Evaluate derivatives of Psl. * - note: Here, fsl1_dVbs and fsl2_dVbs are derivatives * w.r.t. explicit Vbscl. So, Psl in the fsl1 and fsl2 * expressions is regarded as a constant. *-----------------*/ Chi_dT = ( Psl - Vbscl ) * beta_dT - Vbscl_dT * beta ; if ( Chi < znbd5 ) { T1 = cfs1 * beta * fi ; fsl1_dVbs = T1 * ( ( Vbscl_dVbs - Vdseff_dVbs ) * fi - 2.0 * fi_dChi * Vbscl_dVbs ) ; fsl1_dVds = - T1 * fi * Vdseff_dVds ; fsl1_dVgs = - T1 * fi * Vdseff_dVgs ; cfs1_dT = exp_bVbsVds * cnst1_dT + cnst1 * exp_bVbsVds_dT ; fsl1_dT = fi * fi * cfs1_dT + 2 * cfs1 * fi * fi_dChi * Chi_dT ; T2 = 0.5 / fsl2 ; fsl2_dVbs = ( - beta * fb_dChi * 2 * fb * Vbscl_dVbs + fsl1_dVbs ) * T2 ; fsl2_dVds = fsl1_dVds * T2 ; fsl2_dVgs = fsl1_dVgs * T2 ; fsl2_dT = ( 2 * fb * fb_dChi * Chi_dT + fsl1_dT ) * T2 ; } else { Rho_dT = beta_dT * ( Psl - Vds ) - beta * Vdseff_dT ; exp_Rho_dT = Rho_dT * exp_Rho ; T1 = cnst1 * beta ; fsl1_dVbs = - T1 * ( exp_Rho * Vdseff_dVbs + ( Vbscl_dVbs - Vdseff_dVbs ) * exp_bVbsVds ); fsl1_dVds = - T1 * Vdseff_dVds * ( exp_Rho - exp_bVbsVds ); fsl1_dVgs = T1 * Vdseff_dVgs * ( - exp_Rho + exp_bVbsVds ); fsl1_dT = cnst1 * ( exp_Rho_dT - exp_bVbsVds_dT ) + cnst1_dT * ( exp_Rho - exp_bVbsVds ) ; T2 = 0.5e0 / fsl2 ; fsl2_dVbs = ( - beta * Vbscl_dVbs + fsl1_dVbs ) * T2 ; fsl2_dVds = ( fsl1_dVds ) * T2 ; fsl2_dVgs = ( fsl1_dVgs ) * T2 ; fsl2_dT = ( Chi_dT + fsl1_dT ) * T2 ; } T1 = 1.0 / Fsl_dPsl ; Psl_dVbs = - ( Vgp_dVbs - ( fac1 * fsl2_dVbs + fac1_dVbs * fsl2 ) ) * T1 ; Psl_dVds = - ( Vgp_dVds - ( fac1 * fsl2_dVds + fac1_dVds * fsl2 ) ) * T1 ; Psl_dVgs = - ( Vgp_dVgs - ( fac1 * fsl2_dVgs + fac1_dVgs * fsl2 ) ) * T1 ; Psl_dT = - ( Vgp_dT - ( fac1 * fsl2_dT + fac1_dT * fsl2 ) ) * T1 ; Chi_dT = ( Psl - Vbscl ) * beta_dT + beta * ( Psl_dT - Vbscl_dT ); exp_Chi_dT = exp_Chi * Chi_dT ; if ( Chi < znbd5 ) { /*-------------------------------------------* * zone-D1/D2. (Psl) *-----------------*/ Xil = fb * fb + epsm10 ; T1 = 2 * fb * fb_dChi * beta ; Xil_dVbs = T1 * ( Psl_dVbs - Vbscl_dVbs ) ; Xil_dVds = T1 * Psl_dVds ; Xil_dVgs = T1 * Psl_dVgs ; Xil_dT = 2 * fb * fb_dChi * Chi_dT ; Xilp12 = fb + epsm10 ; T1 = fb_dChi * beta ; Xilp12_dVbs = T1 * ( Psl_dVbs - Vbscl_dVbs ) ; Xilp12_dVds = T1 * Psl_dVds ; Xilp12_dVgs = T1 * Psl_dVgs ; Xilp12_dT = fb_dChi * Chi_dT ; Xilp32 = fb * fb * fb + epsm10 ; T1 = 3 * fb * fb * fb_dChi * beta ; Xilp32_dVbs = T1 * ( Psl_dVbs - Vbscl_dVbs ) ; Xilp32_dVds = T1 * Psl_dVds ; Xilp32_dVgs = T1 * Psl_dVgs ; Xilp32_dT = 3 * fb * fb * fb_dChi * Chi_dT ; } else { /*-------------------------------------------* * zone-D3. (Psl) *-----------------*/ Xil = Chi - 1.0e0 ; Xil_dVbs = beta * ( Psl_dVbs - Vbscl_dVbs ) ; Xil_dVds = beta * Psl_dVds ; Xil_dVgs = beta * Psl_dVgs ; Xil_dT = Chi_dT ; Xilp12 = sqrt( Xil ) ; T1 = 0.5e0 / Xilp12 ; Xilp12_dVbs = T1 * Xil_dVbs ; Xilp12_dVds = T1 * Xil_dVds ; Xilp12_dVgs = T1 * Xil_dVgs ; Xilp12_dT = T1 * Xil_dT ; Xilp32 = Xil * Xilp12 ; T1 = 1.5e0 * Xilp12 ; Xilp32_dVbs = T1 * Xil_dVbs ; Xilp32_dVds = T1 * Xil_dVds ; Xilp32_dVgs = T1 * Xil_dVgs ; Xilp32_dT = T1 * Xil_dT ; } /*---------------------------------------------------* * Assign Pds. *-----------------*/ Pds = Psl - Ps0 ; /* if ( Pds < ps_conv ) { */ if ( Pds < 0.0 ) { /* take care of numerical noise */ Pds = 0.0 ; Psl = Ps0 ; } Pds_dVbs = Psl_dVbs - Ps0_dVbs ; Pds_dVds = Psl_dVds - Ps0_dVds ; Pds_dVgs = Psl_dVgs - Ps0_dVgs ; Pds_dT = Psl_dT - Ps0_dT ; /* if ( Pds < ps_conv ) { */ if ( Pds < 0.0 ) { Pds_dVbs = 0.0 ; Pds_dVgs = 0.0 ; Psl_dVbs = Ps0_dVbs ; Psl_dVgs = Ps0_dVgs ; Pds_dT = 0.0 ; Psl_dT = Ps0_dT ; } /* Vdseff */ Vds = Vdsorg; /*-----------------------------------------------------------* * Evaluate Idd. * - Eta : substantial variable of QB'/Pds and Idd/Pds. * - note: Eta = 4 * GAMMA_{hisim_0} *-----------------*/ T1 = beta / Xi0 ; Eta = T1 * Pds ; T2 = Eta * beta_inv ; Eta_dVbs = T1 * ( Pds_dVbs - Xi0_dVbs * T2 ) ; Eta_dVds = T1 * ( Pds_dVds - Xi0_dVds * T2 ) ; Eta_dVgs = T1 * ( Pds_dVgs - Xi0_dVgs * T2 ) ; T1_dT = ( beta_dT * Xi0 - beta * Xi0_dT ) / Xi0 / Xi0 ; Eta_dT = T1_dT * Pds + T1 * Pds_dT ; /* ( Eta + 1 )^n */ Eta1 = Eta + 1.0e0 ; Eta1p12 = sqrt( Eta1 ) ; Eta1p32 = Eta1p12 * Eta1 ; Eta1p52 = Eta1p32 * Eta1 ; Eta1_dT = Eta_dT ; Eta1p12_dT = 0.5e0 / Eta1p12 * Eta1_dT ; Eta1p32_dT = Eta1p12_dT * Eta1 + Eta1p12 * Eta1_dT ; Eta1p52_dT = Eta1p32_dT * Eta1 + Eta1p32 * Eta1_dT ; /* 1 / ( ( Eta + 1 )^n + 1 ) */ Zeta12 = 1.0e0 / ( Eta1p12 + 1.0e0 ) ; Zeta32 = 1.0e0 / ( Eta1p32 + 1.0e0 ) ; Zeta52 = 1.0e0 / ( Eta1p52 + 1.0e0 ) ; Zeta12_dT = - 1.0e0 / ( Eta1p12 + 1.0e0 ) / ( Eta1p12 + 1.0e0 ) * Eta1p12_dT ; Zeta32_dT = - 1.0e0 / ( Eta1p32 + 1.0e0 ) / ( Eta1p32 + 1.0e0 ) * Eta1p32_dT ; Zeta52_dT = - 1.0e0 / ( Eta1p52 + 1.0e0 ) / ( Eta1p52 + 1.0e0 ) * Eta1p52_dT ; /*---------------------------------------------------* * F00 := PS00/Pds (n=1/2) *-----------------*/ F00 = Zeta12 / Xi0p12 ; T3 = - 1 / Xi0 ; T4 = - 0.5e0 / Eta1p12 * F00 ; T5 = Zeta12 * T3 ; T6 = Zeta12 * T4 ; F00_dVbs = ( Xi0p12_dVbs * T5 + Eta_dVbs * T6 ) ; F00_dVds = ( Xi0p12_dVds * T5 + Eta_dVds * T6 ) ; F00_dVgs = ( Xi0p12_dVgs * T5 + Eta_dVgs * T6 ) ; F00_dT = ( Zeta12_dT * Xi0p12 - Zeta12 * Xi0p12_dT ) / Xi0p12 / Xi0p12 ; /*---------------------------------------------------* * F10 := PS10/Pds (n=3/2) *-----------------*/ T1 = 3.0e0 + Eta * ( 3.0e0 + Eta ) ; F10 = C_2o3 * Xi0p12 * Zeta32 * T1 ; T2 = 3.0e0 + Eta * 2.0e0 ; T3 = C_2o3 * T1 ; T4 = - 1.5e0 * Eta1p12 * F10 + C_2o3 * Xi0p12 * T2 ; T5 = Zeta32 * T3 ; T6 = Zeta32 * T4 ; F10_dVbs = ( Xi0p12_dVbs * T5 + Eta_dVbs * T6 ) ; F10_dVds = ( Xi0p12_dVds * T5 + Eta_dVds * T6 ) ; F10_dVgs = ( Xi0p12_dVgs * T5 + Eta_dVgs * T6 ) ; T1_dT = Eta_dT * ( 3.0e0 + Eta ) + Eta * Eta_dT ; F10_dT = C_2o3 * Xi0p12 * Zeta32 * T1_dT + C_2o3 * T1 * ( Xi0p12 * Zeta32_dT + Zeta32 * Xi0p12_dT ) ; /*---------------------------------------------------* * F30 := PS30/Pds (n=5/2) *-----------------*/ T1 = 5e0 + Eta * ( 10e0 + Eta * ( 10e0 + Eta * ( 5e0 + Eta ) ) ) ; F30 = 4e0 / ( 15e0 * beta ) * Xi0p32 * Zeta52 * T1 ; T2 = 10e0 + Eta * ( 20e0 + Eta * ( 15e0 + Eta * 4e0 ) ) ; T3 = 4e0 / ( 15e0 * beta ) * T1 ; T4 = - ( 5e0 / 2e0 ) * Eta1p32 * F30 + 4e0 / ( 15e0 * beta ) * Xi0p32 * T2 ; T5 = Zeta52 * T3 ; T6 = Zeta52 * T4 ; F30_dVbs = ( Xi0p32_dVbs * T5 + Eta_dVbs * T6 ) ; F30_dVds = ( Xi0p32_dVds * T5 + Eta_dVds * T6 ) ; F30_dVgs = ( Xi0p32_dVgs * T5 + Eta_dVgs * T6 ) ; T1_dT = ( 10e0 + 20e0 * Eta + 15e0 * Eta * Eta + 4e0 * Eta * Eta * Eta ) * Eta_dT ; F30_dT = 4e0 / 15e0 * beta_inv_dT * ( Xi0p32 * Zeta52 * T1 ) + 4e0 / 15e0 * beta_inv * ( Xi0p32_dT * Zeta52 * T1 + Xi0p32 * Zeta52_dT * T1 + Xi0p32 * Zeta52 * T1_dT ) ; /*---------------------------------------------------* * F11 := PS11/Pds. *-----------------*/ F11 = Ps0 * F10 + C_2o3 * beta_inv * Xilp32 - F30 ; T1 = C_2o3 * beta_inv ; F11_dVbs = Ps0_dVbs * F10 + Ps0 * F10_dVbs + T1 * Xilp32_dVbs - F30_dVbs ; F11_dVds = Ps0_dVds * F10 + Ps0 * F10_dVds + T1 * Xilp32_dVds - F30_dVds ; F11_dVgs = Ps0_dVgs * F10 + Ps0 * F10_dVgs + T1 * Xilp32_dVgs - F30_dVgs ; F11_dT = Ps0_dT * F10 + Ps0 * F10_dT + C_2o3 *( beta_inv_dT * Xilp32 + beta_inv * Xilp32_dT ) - F30_dT ; /*---------------------------------------------------* * Fdd := Idd/Pds. *-----------------*/ T1 = Vgp + beta_inv - 0.5e0 * ( 2.0e0 * Ps0 + Pds ) ; T2 = - F10 + F00 ; T3 = beta * Cox ; T4 = beta * cnst0 ; Fdd = T3 * T1 + T4 * T2 ; Fdd_dVbs = T3 * ( Vgp_dVbs - Ps0_dVbs - 0.5e0 * Pds_dVbs ) + beta * Cox_dVb * T1 + T4 * ( - F10_dVbs + F00_dVbs ) ; Fdd_dVds = T3 * ( Vgp_dVds - Ps0_dVds - 0.5e0 * Pds_dVds ) + beta * Cox_dVd * T1 + T4 * ( - F10_dVds + F00_dVds ) ; Fdd_dVgs = T3 * ( Vgp_dVgs - Ps0_dVgs - 0.5e0 * Pds_dVgs ) + beta * Cox_dVg * T1 + T4 * ( - F10_dVgs + F00_dVgs ) ; T1_dT = Vgp_dT + beta_inv_dT - 0.5e0 * ( 2.0e0 * Ps0_dT + Pds_dT ) ; T2_dT = -F10_dT + F00_dT ; T3_dT = Cox * beta_dT ; T4_dT = beta * cnst0_dT + cnst0 * beta_dT ; Fdd_dT = T1 * T3_dT + T3 * T1_dT + T2 * T4_dT + T4 * T2_dT ; /*---------------------------------------------------* * Idd: *-----------------*/ Idd = Pds * Fdd ; Idd_dVbs = Pds_dVbs * Fdd + Pds * Fdd_dVbs ; Idd_dVds = Pds_dVds * Fdd + Pds * Fdd_dVds ; Idd_dVgs = Pds_dVgs * Fdd + Pds * Fdd_dVgs ; Idd_dT = Fdd * Pds_dT + Pds * Fdd_dT ; /*-----------------------------------------------------------* * Skip CLM and integrated charges if zone==D1 *-----------------*/ if( flg_zone == 1 ) { goto start_of_mobility ; } /*-----------------------------------------------------------* * Channel Length Modulation. Lred: \Delta L *-----------------*/ if( pParam->HSMHV2_clm2 < epsm10 && pParam->HSMHV2_clm3 < epsm10 ) { Lred = 0.0e0 ; Lred_dVbs = 0.0e0 ; Lred_dVds = 0.0e0 ; Lred_dVgs = 0.0e0 ; Lred_dT = 0.0e0 ; Psdl = Psl ; Psdl_dVbs = Psl_dVbs ; Psdl_dVds = Psl_dVds ; Psdl_dVgs = Psl_dVgs ; Psdl_dT = Psl_dT ; if ( Psdl > Ps0 + Vds - epsm10 ) { Psdl = Ps0 + Vds - epsm10 ; Psdl_dVbs = Ps0_dVbs ; Psdl_dVds = Ps0_dVds + 1.0 ; Psdl_dVgs = Ps0_dVgs ; Psdl_dT = Ps0_dT ; } } else { T1 = here->HSMHV2_wdpl ; T8 = sqrt (Psl - Vbscl) ; Wd = T1 * T8 ; T9 = 0.5 * T1 / T8 ; Wd_dVbs = T9 * (Psl_dVbs - Vbscl_dVbs) ; Wd_dVds = T9 * Psl_dVds ; Wd_dVgs = T9 * Psl_dVgs ; Wd_dT = T9 * (Psl_dT - Vbscl_dT) ; T0 = 1.0 / Wd ; T1 = Qn0 * T0 ; T2 = pParam->HSMHV2_clm3 * T1 ; T3 = pParam->HSMHV2_clm3 * T0 ; T2_dVb = T3 * (Qn0_dVbs - T1 * Wd_dVbs) ; T2_dVd = T3 * (Qn0_dVds - T1 * Wd_dVds) ; T2_dVg = T3 * (Qn0_dVgs - T1 * Wd_dVgs) ; T2_dT = T3 * (Qn0_dT - T1 * Wd_dT) ; T5 = pParam->HSMHV2_clm2 * q_Nsub + T2 ; T1 = 1.0 / T5 ; T4 = C_ESI * T1 ; T4_dVb = - T4 * T2_dVb * T1 ; T4_dVd = - T4 * T2_dVd * T1 ; T4_dVg = - T4 * T2_dVg * T1 ; T4_dT = -T4 * T2_dT * T1 ; T1 = (1.0e0 - pParam->HSMHV2_clm1) ; Psdl = pParam->HSMHV2_clm1 * (Vds + Ps0) + T1 * Psl ; Psdl_dVbs = pParam->HSMHV2_clm1 * Ps0_dVbs + T1 * Psl_dVbs ; Psdl_dVds = pParam->HSMHV2_clm1 * (1.0 + Ps0_dVds) + T1 * Psl_dVds ; Psdl_dVgs = pParam->HSMHV2_clm1 * Ps0_dVgs + T1 * Psl_dVgs ; Psdl_dT = pParam->HSMHV2_clm1 * Ps0_dT + T1 * Psl_dT ; if ( Psdl > Ps0 + Vds - epsm10 ) { Psdl = Ps0 + Vds - epsm10 ; Psdl_dVbs = Ps0_dVbs ; Psdl_dVds = Ps0_dVds + 1.0 ; Psdl_dVgs = Ps0_dVgs ; Psdl_dT = Ps0_dT ; } T6 = Psdl - Psl ; T6_dVb = Psdl_dVbs - Psl_dVbs ; T6_dVd = Psdl_dVds - Psl_dVds ; T6_dVg = Psdl_dVgs - Psl_dVgs ; T6_dT = Psdl_dT - Psl_dT ; T3 = beta * Qn0 ; T1 = 1.0 / T3 ; T5 = Idd * T1 ; T3_dT = beta * Qn0_dT + beta_dT * Qn0 ; T1_dT = - T1 * T1 * T3_dT ; T5_dT = Idd_dT * T1 + Idd * T1_dT ; T2 = T5 * beta ; T5_dVb = (Idd_dVbs - T2 * Qn0_dVbs) * T1 ; T5_dVd = (Idd_dVds - T2 * Qn0_dVds) * T1 ; T5_dVg = (Idd_dVgs - T2 * Qn0_dVgs) * T1 ; T10 = q_Nsub / C_ESI ; T1 = 1.0e5 ; T2 = 1.0 / Leff ; T11 = (2.0 * T5 + 2.0 * T10 * T6 * T4 + T1 * T4) * T2 ; T3 = T2 * T4 ; T7 = T11 * T4 ; T7_dVb = (2.0 * T5_dVb + 2.0 * T10 * (T6_dVb * T4 + T6 * T4_dVb) + T1 * T4_dVb) * T3 + T11 * T4_dVb ; T7_dVd = (2.0 * T5_dVd + 2.0 * T10 * (T6_dVd * T4 + T6 * T4_dVd) + T1 * T4_dVd) * T3 + T11 * T4_dVd ; T7_dVg = (2.0 * T5_dVg + 2.0 * T10 * (T6_dVg * T4 + T6 * T4_dVg) + T1 * T4_dVg) * T3 + T11 * T4_dVg ; T7_dT = (2.0 * T5_dT + 2.0 * T10 * ( T6_dT * T4 + T6 * T4_dT ) + T1 * T4_dT ) * T3 + T11 * T4_dT ; T11 = 4.0 * (2.0 * T10 * T6 + T1) ; T1 = 8.0 * T10 * T4 * T4 ; T2 = 2.0 * T11 * T4 ; T8 = T11 * T4 * T4 ; T8_dVb = ( T1 * T6_dVb + T2 * T4_dVb) ; T8_dVd = ( T1 * T6_dVd + T2 * T4_dVd) ; T8_dVg = ( T1 * T6_dVg + T2 * T4_dVg) ; T8_dT = ( T1 * T6_dT + T2 * T4_dT) ; T9 = sqrt (T7 * T7 + T8); T1 = 1.0 / T9 ; T2 = T7 * T1 ; T3 = 0.5 * T1 ; T9_dVb = (T2 * T7_dVb + T3 * T8_dVb) ; T9_dVd = (T2 * T7_dVd + T3 * T8_dVd) ; T9_dVg = (T2 * T7_dVg + T3 * T8_dVg) ; T9_dT = (T2 * T7_dT + T3 * T8_dT) ; Lred = 0.5 * (- T7 + T9) ; Lred_dVbs = 0.5 * (- T7_dVb + T9_dVb) ; Lred_dVds = 0.5 * (- T7_dVd + T9_dVd) ; Lred_dVgs = 0.5 * (- T7_dVg + T9_dVg) ; Lred_dT = 0.5 * (- T7_dT + T9_dT ) ; /*---------------------------------------------------* * Modify Lred for symmetry. *-----------------*/ T1 = Lred ; Lred = FMDVDS * T1 ; Lred_dVbs = FMDVDS_dVbs * T1 + FMDVDS * Lred_dVbs ; Lred_dVds = FMDVDS_dVds * T1 + FMDVDS * Lred_dVds ; Lred_dVgs = FMDVDS_dVgs * T1 + FMDVDS * Lred_dVgs ; Lred_dT = FMDVDS_dT * T1 + FMDVDS * Lred_dT ; } /* CLM5 & CLM6 */ Lred *= here->HSMHV2_clmmod ; Lred_dVbs *= here->HSMHV2_clmmod ; Lred_dVds *= here->HSMHV2_clmmod ; Lred_dVgs *= here->HSMHV2_clmmod ; Lred_dT *= here->HSMHV2_clmmod ; /*---------------------------------------------------* * Qbu : -Qb in unit area. *-----------------*/ T1 = Vgp + beta_inv ; T2 = T1 * F10 - F11 ; T1_dT = Vgp_dT + beta_inv_dT ; T2_dT = T1_dT * F10 + T1 * F10_dT - F11_dT ; Qbnm = cnst0 * ( cnst0 * ( 1.5e0 - ( Xi0 + 1.0e0 ) - 0.5e0 * beta * Pds ) + Cox * T2 ) ; Qbnm_dVbs = cnst0 * ( cnst0 * ( - Xi0_dVbs - 0.5e0 * beta * Pds_dVbs ) + Cox * ( Vgp_dVbs * F10 + T1 * F10_dVbs - F11_dVbs ) + Cox_dVb * T2 ) ; Qbnm_dVds = cnst0 * ( cnst0 * ( - Xi0_dVds - 0.5e0 * beta * Pds_dVds ) + Cox * ( Vgp_dVds * F10 + T1 * F10_dVds - F11_dVds ) + Cox_dVd * T2 ) ; Qbnm_dVgs = cnst0 * ( cnst0 * ( - Xi0_dVgs - 0.5e0 * beta * Pds_dVgs ) + Cox * ( Vgp_dVgs * F10 + T1 * F10_dVgs - F11_dVgs ) + Cox_dVg * T2 ) ; Qbnm_dT = cnst0_dT * ( cnst0 * ( 1.5e0 - ( Xi0 + 1.0e0 ) - 0.5e0 * beta * Pds ) + Cox * T2 ) + cnst0 * ( cnst0_dT * ( 1.5e0 - ( Xi0 + 1.0e0 ) - 0.5e0 * beta * Pds ) + cnst0 * ( - Xi0_dT - 0.5 * beta_dT * Pds - 0.5 * beta * Pds_dT ) + Cox * T2_dT ); T1 = beta ; Qbu = T1 * Qbnm / Fdd ; T2 = T1 / ( Fdd * Fdd ) ; Qbu_dVbs = T2 * ( Fdd * Qbnm_dVbs - Qbnm * Fdd_dVbs ) ; Qbu_dVds = T2 * ( Fdd * Qbnm_dVds - Qbnm * Fdd_dVds ) ; Qbu_dVgs = T2 * ( Fdd * Qbnm_dVgs - Qbnm * Fdd_dVgs ) ; T1_dT = beta_dT ; Qbu_dT = ( Fdd * ( T1_dT * Qbnm + T1 * Qbnm_dT ) - T1 * Qbnm * Fdd_dT ) / ( Fdd * Fdd ) ; /*---------------------------------------------------* * preparation for Qi and Qd. * - DtPds: Delta * Pds ; * - Achi: (1+Delta) * Pds ; *-----------------*/ T1 = 2.0e0 * fac1 ; DtPds = T1 * ( F10 - Xi0p12 ) ; T2 = 2.0 * ( F10 - Xi0p12 ) ; DtPds_dVbs = T1 * ( F10_dVbs - Xi0p12_dVbs ) + T2 * fac1_dVbs ; DtPds_dVds = T1 * ( F10_dVds - Xi0p12_dVds ) + T2 * fac1_dVds ; DtPds_dVgs = T1 * ( F10_dVgs - Xi0p12_dVgs ) + T2 * fac1_dVgs ; T1_dT = 2.0e0 * fac1_dT ; DtPds_dT = T1_dT * ( F10 - Xi0p12 ) + T1 * ( F10_dT -Xi0p12_dT ) ; Achi = Pds + DtPds ; Achi_dVbs = Pds_dVbs + DtPds_dVbs ; Achi_dVds = Pds_dVds + DtPds_dVds ; Achi_dVgs = Pds_dVgs + DtPds_dVgs ; Achi_dT = Pds_dT + DtPds_dT ; /*-----------------------------------------------------------* * Alpha : parameter to evaluate charges. * - Achi: (1+Delta) * Pds ; * - clamped to 0 if Alpha < 0. *-----------------*/ T1 = 1.0 / VgVt ; T2 = Achi * T1 ; T3 = 1.0e0 - T2 ; TX = 1.0 - T3 ; Fn_CP( TY , TX , 1.0 , 4 , T4 ) ; Alpha = 1.0 - TY ; T5 = T1 * T4 ; Alpha_dVbs = - ( Achi_dVbs - T2 * VgVt_dVbs ) * T5 ; Alpha_dVds = - ( Achi_dVds - T2 * VgVt_dVds ) * T5 ; Alpha_dVgs = - ( Achi_dVgs - T2 * VgVt_dVgs ) * T5 ; Alpha_dT = - ( Achi_dT - T2 * VgVt_dT ) * T5 ; /*-----------------------------------------------------------* * Qiu : -Qi in unit area. *-----------------*/ Qinm = 1.0e0 + Alpha * ( 1.0e0 + Alpha ) ; T1 = 1.0e0 + Alpha + Alpha ; Qinm_dVbs = Alpha_dVbs * T1 ; Qinm_dVds = Alpha_dVds * T1 ; Qinm_dVgs = Alpha_dVgs * T1 ; Qinm_dT = Alpha_dT * T1 ; Qidn = Fn_Max( 1.0e0 + Alpha , epsm10 ) ; Qidn_dVbs = Alpha_dVbs ; Qidn_dVds = Alpha_dVds ; Qidn_dVgs = Alpha_dVgs ; Qidn_dT = Alpha_dT ; T1 = C_2o3 * VgVt * Qinm / Qidn ; Qiu = T1 * Cox ; T2 = 1.0 / VgVt ; T3 = 1.0 / Qinm ; T4 = 1.0 / Qidn ; Qiu_dVbs = Qiu * ( VgVt_dVbs * T2 + Qinm_dVbs * T3 - Qidn_dVbs * T4 ) + T1 * Cox_dVb ; Qiu_dVds = Qiu * ( VgVt_dVds * T2 + Qinm_dVds * T3 - Qidn_dVds * T4) + T1 * Cox_dVd ; Qiu_dVgs = Qiu * ( VgVt_dVgs * T2 + Qinm_dVgs * T3 - Qidn_dVgs * T4) + T1 * Cox_dVg ; T1_dT = C_2o3 * ( Qidn * ( VgVt_dT * Qinm + VgVt * Qinm_dT ) - Qidn_dT * VgVt * Qinm ) / ( Qidn * Qidn ) ; Qiu_dT = Cox * T1_dT ; /*-----------------------------------------------------------* * Qdrat : Qd/Qi *-----------------*/ Qdnm = 0.5e0 + Alpha ; Qdnm_dVbs = Alpha_dVbs ; Qdnm_dVds = Alpha_dVds ; Qdnm_dVgs = Alpha_dVgs ; Qdnm_dT = Alpha_dT ; Qddn = Qidn * Qinm ; Qddn_dVbs = Qidn_dVbs * Qinm + Qidn * Qinm_dVbs ; Qddn_dVds = Qidn_dVds * Qinm + Qidn * Qinm_dVds ; Qddn_dVgs = Qidn_dVgs * Qinm + Qidn * Qinm_dVgs ; Qddn_dT = Qidn_dT * Qinm + Qidn * Qinm_dT ; Quot = 0.4e0 * Qdnm / Qddn ; Qdrat = 0.6e0 - Quot ; if ( Qdrat <= 0.5e0 ) { T1 = 1.0 / Qddn ; T2 = 1.0 / Qdnm ; Qdrat_dVbs = Quot * ( Qddn_dVbs * T1 - Qdnm_dVbs * T2 ) ; Qdrat_dVds = Quot * ( Qddn_dVds * T1 - Qdnm_dVds * T2 ) ; Qdrat_dVgs = Quot * ( Qddn_dVgs * T1 - Qdnm_dVgs * T2 ) ; Qdrat_dT = Quot * ( Qddn_dT * T1 - Qdnm_dT * T2 ) ; } else { Qdrat = 0.5e0 ; Qdrat_dVbs = 0.0e0 ; Qdrat_dVds = 0.0e0 ; Qdrat_dVgs = 0.0e0 ; Qdrat_dT = 0.0e0 ; } /*-----------------------------------------------------------* * Interpolate charges and CLM for zone-D2. *-----------------*/ if ( flg_zone == 2 ) { T1 = Qbu ; Qbu = FD2 * Qbu + ( 1.0 - FD2 ) * Qb0 ; Qbu_dVbs = FD2 * Qbu_dVbs + FD2_dVbs * T1 + ( 1.0 - FD2 ) * Qb0_dVb - FD2_dVbs * Qb0 ; Qbu_dVds = FD2 * Qbu_dVds + FD2_dVds * T1 + ( 1.0 - FD2 ) * Qb0_dVd - FD2_dVds * Qb0 ; Qbu_dVgs = FD2 * Qbu_dVgs + FD2_dVgs * T1 + ( 1.0 - FD2 ) * Qb0_dVg - FD2_dVgs * Qb0 ; Qbu_dT = FD2 * Qbu_dT + FD2_dT * T1 + ( 1.0 - FD2 ) * Qb0_dT - FD2_dT * Qb0 ; if ( Qbu < 0.0 ) { Qbu = 0.0 ; Qbu_dVbs = 0.0 ; Qbu_dVds = 0.0 ; Qbu_dVgs = 0.0 ; Qbu_dT = 0.0 ; } T1 = Qiu ; Qiu = FD2 * Qiu + ( 1.0 - FD2 ) * Qn0 ; Qiu_dVbs = FD2 * Qiu_dVbs + FD2_dVbs * T1 + ( 1.0 - FD2 ) * Qn0_dVbs - FD2_dVbs * Qn0 ; Qiu_dVds = FD2 * Qiu_dVds + FD2_dVds * T1 + ( 1.0 - FD2 ) * Qn0_dVds - FD2_dVds * Qn0 ; Qiu_dVgs = FD2 * Qiu_dVgs + FD2_dVgs * T1 + ( 1.0 - FD2 ) * Qn0_dVgs - FD2_dVgs * Qn0 ; Qiu_dT = FD2 * Qiu_dT + FD2_dT * T1 + ( 1.0 - FD2 ) * Qn0_dT - FD2_dT * Qn0 ; if ( Qiu < 0.0 ) { Qiu = 0.0 ; Qiu_dVbs = 0.0 ; Qiu_dVds = 0.0 ; Qiu_dVgs = 0.0 ; Qiu_dT = 0.0 ; } T1 = Qdrat ; Qdrat = FD2 * Qdrat + ( 1.0 - FD2 ) * 0.5e0 ; Qdrat_dVbs = FD2 * Qdrat_dVbs + FD2_dVbs * T1 - FD2_dVbs * 0.5e0 ; Qdrat_dVds = FD2 * Qdrat_dVds + FD2_dVds * T1 - FD2_dVds * 0.5e0 ; Qdrat_dVgs = FD2 * Qdrat_dVgs + FD2_dVgs * T1 - FD2_dVgs * 0.5e0 ; Qdrat_dT = FD2 * Qdrat_dT + FD2_dT * T1 - FD2_dT * 0.5e0 ; /* note: Lred=0 in zone-D1 */ T1 = Lred ; Lred = FD2 * Lred ; Lred_dVbs = FD2 * Lred_dVbs + FD2_dVbs * T1 ; Lred_dVds = FD2 * Lred_dVds + FD2_dVds * T1 ; Lred_dVgs = FD2 * Lred_dVgs + FD2_dVgs * T1 ; Lred_dT = FD2 * Lred_dT + FD2_dT * T1 ; } /* end of flg_zone==2 if-block */ start_of_mobility: Lch = Leff - Lred ; if ( Lch < 1.0e-9 ) { fprintf ( stderr , "*** warning(HiSIM_HV(%s)): actual channel length is too small. (Lch=%e[m])\n" , model->HSMHV2modName, Lch ) ; fprintf ( stderr , " CLM5 and/or CLM6 might be too large.\n" ) ; Lch = 1.0e-9 ; Lch_dVbs = Lch_dVds = Lch_dVgs = 0.0 ; Lch_dT = 0.0 ; } else { Lch_dVbs = - Lred_dVbs ; Lch_dVds = - Lred_dVds ; Lch_dVgs = - Lred_dVgs ; Lch_dT = - Lred_dT ; } /*-----------------------------------------------------------* * Muun : universal mobility. (CGS unit) *-----------------*/ T1 = here->HSMHV2_ndep_o_esi ; T2 = here->HSMHV2_ninv_o_esi ; T0 = here->HSMHV2_ninvd ; T4 = 1.0 + ( Psl - Ps0 ) * T0 ; T4_dVb = ( Psl_dVbs - Ps0_dVbs ) * T0 ; T4_dVd = ( Psl_dVds - Ps0_dVds ) * T0 ; T4_dVg = ( Psl_dVgs - Ps0_dVgs ) * T0 ; T4_dT = ( Psl_dT - Ps0_dT ) * T0 + ( Psl - Ps0 ) * ninvd_dT ; T5 = T1 * Qbu + T2 * Qiu ; T5_dVb = T1 * Qbu_dVbs + T2 * Qiu_dVbs ; T5_dVd = T1 * Qbu_dVds + T2 * Qiu_dVds ; T5_dVg = T1 * Qbu_dVgs + T2 * Qiu_dVgs ; T5_dT = T1 * Qbu_dT + T2 * Qiu_dT ; T3 = T5 / T4 ; T3_dVb = ( - T4_dVb * T5 + T4 * T5_dVb ) / T4 / T4 ; T3_dVd = ( - T4_dVd * T5 + T4 * T5_dVd ) / T4 / T4 ; T3_dVg = ( - T4_dVg * T5 + T4 * T5_dVg ) / T4 / T4 ; T3_dT = ( - T4_dT * T5 + T4 * T5_dT ) / T4 / T4 ; Eeff = T3 ; Eeff_dVbs = T3_dVb ; Eeff_dVds = T3_dVd ; Eeff_dVgs = T3_dVg ; Eeff_dT = T3_dT ; T5 = Fn_Pow( Eeff , model->HSMHV2_mueph0 - 1.0e0 ) ; T8 = T5 * Eeff ; T7 = Fn_Pow( Eeff , here->HSMHV2_muesr - 1.0e0 ) ; T6 = T7 * Eeff ; T8_dT = model->HSMHV2_mueph0 * T5 * Eeff_dT ; T6_dT = here->HSMHV2_muesr * T7 * Eeff_dT ; T9 = C_QE * C_m2cm_p2 ; Rns = Qiu / T9 ; Rns_dT = Qiu_dT / T9 ; T1 = 1.0e0 / ( pParam->HSMHV2_muecb0 + pParam->HSMHV2_muecb1 * Rns / 1.0e11 ) + here->HSMHV2_mphn0 * T8 + T6 / pParam->HSMHV2_muesr1 ; T1_dT = - 1.0e0 / ( pParam->HSMHV2_muecb0 + pParam->HSMHV2_muecb1 * Rns / 1.0e11 ) / ( pParam->HSMHV2_muecb0 + pParam->HSMHV2_muecb1 * Rns / 1.0e11 ) * pParam->HSMHV2_muecb1 * Rns_dT / 1.0e11 + here->HSMHV2_mphn0 * T8_dT + mphn0_dT * T8 + T6_dT / pParam->HSMHV2_muesr1 ; Muun = 1.0e0 / T1 ; Muun_dT = - Muun / T1 * T1_dT ; T1 = 1.0e0 / ( T1 * T1 ) ; T2 = pParam->HSMHV2_muecb0 + pParam->HSMHV2_muecb1 * Rns / 1.0e11 ; T2 = 1.0e0 / ( T2 * T2 ) ; T3 = here->HSMHV2_mphn1 * T5 ; T4 = here->HSMHV2_muesr * T7 / pParam->HSMHV2_muesr1 ; T5 = - 1.0e-11 * pParam->HSMHV2_muecb1 / C_QE * T2 / C_m2cm_p2 ; Muun_dVbs = - ( T5 * Qiu_dVbs + Eeff_dVbs * T3 + Eeff_dVbs * T4 ) * T1 ; Muun_dVds = - ( T5 * Qiu_dVds + Eeff_dVds * T3 + Eeff_dVds * T4 ) * T1 ; Muun_dVgs = - ( T5 * Qiu_dVgs + Eeff_dVgs * T3 + Eeff_dVgs * T4 ) * T1 ; /* Change to MKS unit */ Muun /= C_m2cm_p2 ; Muun_dT /= C_m2cm_p2 ; Muun_dVbs /= C_m2cm_p2 ; Muun_dVds /= C_m2cm_p2 ; Muun_dVgs /= C_m2cm_p2 ; /*-----------------------------------------------------------* * Mu : mobility *-----------------*/ T2 = beta * (Qn0 + small) * Lch ; T1 = 1.0e0 / T2 ; T3 = T1 * T1 ; T4 = - beta * T3 ; T5 = T4 * Lch ; T6 = T4 * (Qn0 + small) ; T1_dVb = ( T5 * Qn0_dVbs + T6 * Lch_dVbs) ; T1_dVd = ( T5 * Qn0_dVds + T6 * Lch_dVds) ; T1_dVg = ( T5 * Qn0_dVgs + T6 * Lch_dVgs) ; T2_dT = beta_dT * (Qn0 + small) * Lch + beta * Qn0_dT * Lch + beta * (Qn0 + small) * Lch_dT ; T1_dT = - T1 / T2 * T2_dT ; TY = Idd * T1 ; TY_dVbs = Idd_dVbs * T1 + Idd * T1_dVb ; TY_dVds = Idd_dVds * T1 + Idd * T1_dVd ; TY_dVgs = Idd_dVgs * T1 + Idd * T1_dVg ; TY_dT = Idd_dT * T1 + Idd * T1_dT ; T2 = 0.2 * Vmax / Muun ; T3 = - T2 / Muun ; T2_dVb = T3 * Muun_dVbs ; T2_dVd = T3 * Muun_dVds ; T2_dVg = T3 * Muun_dVgs ; T2_dT = 0.2 * ( Vmax_dT * Muun - Muun_dT * Vmax )/ ( Muun * Muun ) ; Ey = sqrt( TY * TY + T2 * T2 ) ; T4 = 1.0 / Ey ; Ey_dVbs = T4 * ( TY * TY_dVbs + T2 * T2_dVb ) ; Ey_dVds = T4 * ( TY * TY_dVds + T2 * T2_dVd ) ; Ey_dVgs = T4 * ( TY * TY_dVgs + T2 * T2_dVg ) ; Ey_dT = T4 * ( TY * TY_dT + T2 * T2_dT ) ; Em = Muun * Ey ; Em_dVbs = Muun_dVbs * Ey + Muun * Ey_dVbs ; Em_dVds = Muun_dVds * Ey + Muun * Ey_dVds ; Em_dVgs = Muun_dVgs * Ey + Muun * Ey_dVgs ; Em_dT = Ey * Muun_dT + Ey_dT * Muun ; T1 = Em / Vmax ; T1_dT = ( Em_dT * Vmax - Vmax_dT * Em ) / ( Vmax * Vmax ); /* note: model->HSMHV2_bb = 2 (electron) ;1 (hole) */ if ( 1.0e0 - epsm10 <= model->HSMHV2_bb && model->HSMHV2_bb <= 1.0e0 + epsm10 ) { T3 = 1.0e0 ; T3_dT = 0.0e0 ; } else if ( 2.0e0 - epsm10 <= model->HSMHV2_bb && model->HSMHV2_bb <= 2.0e0 + epsm10 ) { T3 = T1 ; T3_dT = T1_dT ; } else { T3 = Fn_Pow( T1 , model->HSMHV2_bb - 1.0e0 ) ; T3_dT = ( model->HSMHV2_bb - 1.0e0 )* Fn_Pow( T1 , model->HSMHV2_bb - 2.0e0 ) * T1_dT ; } T2 = T1 * T3 ; T4 = 1.0e0 + T2 ; T2_dT = T1 * T3_dT + T3 * T1_dT ; T4_dT = T2_dT ; if ( 1.0e0 - epsm10 <= model->HSMHV2_bb && model->HSMHV2_bb <= 1.0e0 + epsm10 ) { T5 = 1.0 / T4 ; T6 = T5 / T4 ; T5_dT = - T5 * T5 * T4_dT ; T6_dT = T5 * T5 * ( T5_dT * T4 - T5 * T4_dT ) ; } else if ( 2.0e0 - epsm10 <= model->HSMHV2_bb && model->HSMHV2_bb <= 2.0e0 + epsm10 ) { T5 = 1.0 / sqrt( T4 ) ; T6 = T5 / T4 ; T5_dT = - 0.5e0 / ( T4 * sqrt(T4)) * T4_dT ; T6_dT = ( T5_dT * T4 - T5 * T4_dT ) / T4 / T4 ; } else { T6 = Fn_Pow( T4 , ( - 1.0e0 / model->HSMHV2_bb - 1.0e0 ) ) ; T5 = T4 * T6 ; T6_dT =( - 1.0e0 / model->HSMHV2_bb - 1.0e0 ) * Fn_Pow( T4 , ( - 1.0e0 / model->HSMHV2_bb - 2.0e0 ) ) * T4_dT ; T5_dT = T4_dT * T6 + T4 * T6_dT ; } T7 = Muun / Vmax * T6 * T3 ; Mu = Muun * T5 ; Mu_dVbs = Muun_dVbs * T5 - T7 * Em_dVbs ; Mu_dVds = Muun_dVds * T5 - T7 * Em_dVds ; Mu_dVgs = Muun_dVgs * T5 - T7 * Em_dVgs ; Mu_dT = Muun_dT * T5 + Muun * T5_dT ; /* end_of_mobility : */ /*-----------------------------------------------------------* * Ids: channel current. *-----------------*/ betaWL = here->HSMHV2_weff_nf * beta_inv / Lch ; T1 = - betaWL / Lch ; betaWL_dVbs = T1 * Lch_dVbs ; betaWL_dVds = T1 * Lch_dVds ; betaWL_dVgs = T1 * Lch_dVgs ; betaWL_dT = here->HSMHV2_weff_nf * ( beta_inv_dT * Lch - beta_inv * Lch_dT ) / ( Lch * Lch ) ; Ids0 = betaWL * Idd * Mu ; T1 = betaWL * Idd ; T2 = Idd * Mu ; T3 = Mu * betaWL ; Ids0_dVbs = T3 * Idd_dVbs + T1 * Mu_dVbs + T2 * betaWL_dVbs ; Ids0_dVds = T3 * Idd_dVds + T1 * Mu_dVds + T2 * betaWL_dVds ; Ids0_dVgs = T3 * Idd_dVgs + T1 * Mu_dVgs + T2 * betaWL_dVgs ; Ids0_dT = T3 * Idd_dT + T1 * Mu_dT + T2 * betaWL_dT ; /*-----------------------------------------------------------* * Adding parasitic components to the channel current. *-----------------*/ if( model->HSMHV2_ptl != 0 ){ T1 = 0.5 * ( Vds - Pds ) ; Fn_SymAdd( T6 , T1 , 0.01 , T2 ) ; T2 *= 0.5 ; T6_dVb = T2 * ( - Pds_dVbs ) ; T6_dVd = T2 * ( 1.0 - Pds_dVds ) ; T6_dVg = T2 * ( - Pds_dVgs ) ; T6_dT = T2 * ( - Pds_dT ) ; T1 = 1.1 - ( Ps0 + T6 ); T1_dVb = - ( Ps0_dVbs + T6_dVb ); T1_dVd = - ( Ps0_dVds + T6_dVd ); T1_dVg = - ( Ps0_dVgs + T6_dVg ); T1_dT = - ( Ps0_dT + T6_dT ); Fn_SZ( T2 , T1 , 0.05 , T0 ) ; T2 += small ; T2_dVb = T1_dVb * T0 ; T2_dVd = T1_dVd * T0 ; T2_dVg = T1_dVg * T0 ; T2_dT = T1_dT * T0 ; T0 = beta * here->HSMHV2_ptl0 ; T0_dT = beta_dT * here->HSMHV2_ptl0 ; T3 = Cox * T0 ; T3_dVb = Cox_dVb * T0 ; T3_dVd = Cox_dVd * T0 ; T3_dVg = Cox_dVg * T0 ; T3_dT = Cox_dT * T0 + Cox * T0_dT ; T0 = pow( T2 , model->HSMHV2_ptp ) ; T9 = T3 * T0 ; T9_dVb = T3 * model->HSMHV2_ptp * T0 / T2 * T2_dVb + T3_dVb * T0 ; T9_dVd = T3 * model->HSMHV2_ptp * T0 / T2 * T2_dVd + T3_dVd * T0 ; T9_dVg = T3 * model->HSMHV2_ptp * T0 / T2 * T2_dVg + T3_dVg * T0 ; T9_dT = T3 * model->HSMHV2_ptp * T0 / T2 * T2_dT + T3_dT * T0 ; T4 = 1.0 + Vdsz * model->HSMHV2_pt2 ; T4_dVb = Vdsz_dVbs * model->HSMHV2_pt2 ; T4_dVd = Vdsz_dVds * model->HSMHV2_pt2 ; T4_dVg = 0.0 ; T4_dT = Vdsz_dT * model->HSMHV2_pt2 ; T0 = here->HSMHV2_pt40 ; T5 = Ps0 + T6 - Vbsz ; T5_dVb = Ps0_dVbs + T6_dVb - Vbsz_dVbs ; T5_dVd = Ps0_dVds + T6_dVd - Vbsz_dVds ; T5_dVg = Ps0_dVgs + T6_dVg ; T5_dT = Ps0_dT + T6_dT - Vbsz_dT ; T4 += Vdsz * T0 * T5 ; T4_dVb += Vdsz * T0 * T5_dVb + Vdsz_dVbs * T0 * T5 ; T4_dVd += Vdsz * T0 * T5_dVd + Vdsz_dVds * T0 * T5 ; T4_dVg += Vdsz * T0 * T5_dVg ; T4_dT += Vdsz * T0 * T5_dT + Vdsz_dT * T0 * T5 ; T6 = T9 * T4 ; T9_dVb = T9_dVb * T4 + T9 * T4_dVb ; T9_dVd = T9_dVd * T4 + T9 * T4_dVd ; T9_dVg = T9_dVg * T4 + T9 * T4_dVg ; T9_dT = T9_dT * T4 + T9 * T4_dT ; T9 = T6 ; }else{ T9 = 0.0 ; T9_dVb = 0.0 ; T9_dVd = 0.0 ; T9_dVg = 0.0 ; T9_dT = 0.0 ; } if( model->HSMHV2_gdl != 0 ){ T1 = beta * here->HSMHV2_gdl0 ; T1_dT = beta_dT * here->HSMHV2_gdl0 ; T2 = Cox * T1 ; T2_dVb = Cox_dVb * T1 ; T2_dVd = Cox_dVd * T1 ; T2_dVg = Cox_dVg * T1 ; T2_dT = Cox_dT * T1 + Cox * T1_dT ; T8 = T2 * Vdsz ; T8_dVb = T2_dVb * Vdsz + T2 * Vdsz_dVbs ; T8_dVd = T2_dVd * Vdsz + T2 * Vdsz_dVds ; T8_dVg = T2_dVg * Vdsz ; T8_dT = T2_dT * Vdsz + T2 * Vdsz_dT ; }else{ T8 = 0.0 ; T8_dVb = 0.0 ; T8_dVd = 0.0 ; T8_dVg = 0.0 ; T8_dT = 0.0 ; } if ( ( T9 + T8 ) > 0.0 ) { Idd1 = Pds * ( T9 + T8 ) ; Idd1_dVbs = Pds_dVbs * ( T9 + T8 ) + Pds * ( T9_dVb + T8_dVb ) ; Idd1_dVds = Pds_dVds * ( T9 + T8 ) + Pds * ( T9_dVd + T8_dVd ) ; Idd1_dVgs = Pds_dVgs * ( T9 + T8 ) + Pds * ( T9_dVg + T8_dVg ) ; Idd1_dT = Pds_dT * ( T9 + T8 ) + Pds * ( T9_dT + T8_dT ) ; Ids0 += betaWL * Idd1 * Mu ; T1 = betaWL * Idd1 ; T2 = Idd1 * Mu ; T3 = Mu * betaWL ; Ids0_dVbs += T3 * Idd1_dVbs + T1 * Mu_dVbs + T2 * betaWL_dVbs ; Ids0_dVds += T3 * Idd1_dVds + T1 * Mu_dVds + T2 * betaWL_dVds ; Ids0_dVgs += T3 * Idd1_dVgs + T1 * Mu_dVgs + T2 * betaWL_dVgs ; Ids0_dT += T3 * Idd1_dT + T1 * Mu_dT + T2 * betaWL_dT ; } /* note: rpock procedure was removed. */ if( flg_rsrd == 2 || flg_rsrd == 3 ){ if( model->HSMHV2_rd20 > 0.0 ){ T4 = here->HSMHV2_rd23 ; T1 = pParam->HSMHV2_rd24 * ( Vgse - model->HSMHV2_rd25 ) ; T1_dVg = pParam->HSMHV2_rd24 ; Fn_SL( T2 , T1 , T4 , delta_rd , T0 ) ; T2_dVg = T1_dVg * T0 ; T3 = T4 * ( model->HSMHV2_rd20 + 1.0 ) ; Fn_SU( T7 , T2 , T3 , delta_rd , T0 ) ; T7_dVg = T2_dVg * T0 ; }else{ T7 = here->HSMHV2_rd23; T7_dVg = 0.0e0 ; } /* after testing we can remove Vdse_eff_dVbs, Vdse_eff_dVds, Vdse_eff_dVgs and Vdse_eff_dVbse, Vdse_eff_dVgse */ if (Vdse >= 0.0) { Vdse_eff = Vdse ; /* Vdse_eff_dVbs = 0.0 ; */ /* Vdse_eff_dVds = 0.0 ; */ /* Vdse_eff_dVgs = 0.0 ; */ /* Vdse_eff_dVbse = 0.0 ; */ Vdse_eff_dVdse = 1.0 ; /* Vdse_eff_dVgse = 0.0 ; */ } else { Vdse_eff = 0.0 ; /* Vdse_eff_dVbs = 0.0 ; */ /* Vdse_eff_dVds = 0.0 ; */ /* Vdse_eff_dVgs = 0.0 ; */ /* Vdse_eff_dVbse = 0.0 ; */ Vdse_eff_dVdse = 0.0 ; /* Vdse_eff_dVgse = 0.0 ; */ } /* smoothing of Ra for Vdse_eff close to zero */ /* ... smoothing parameter is Ra_N */ if (Vdse_eff < Ra_N * small2) { Ra_alpha = pow( Ra_N+1.0 , model->HSMHV2_rd21-1.0 ) * (Ra_N+1.0-0.5*model->HSMHV2_rd21*Ra_N) * pow( small2,model->HSMHV2_rd21 ); Ra_beta = 0.5*model->HSMHV2_rd21 * pow( Ra_N+1.0 , model->HSMHV2_rd21-1.0 ) / Ra_N * pow( small2, model->HSMHV2_rd21-2.0 ); T1 = Ra_alpha + Ra_beta*Vdse_eff*Vdse_eff; T1_dVdse_eff = 2.0 * Ra_beta * Vdse_eff; } else { T1 = pow( Vdse_eff + small2 , model->HSMHV2_rd21 ) ; T1_dVdse_eff = model->HSMHV2_rd21 * pow( Vdse_eff + small2 , model->HSMHV2_rd21 - 1.0 ) ; } T9 = pow( Vdse_eff + small2 , model->HSMHV2_rd22d ) ; T9_dVdse_eff = model->HSMHV2_rd22d * pow( Vdse_eff + small2 , model->HSMHV2_rd22d - 1.0 ) ; Ra = ( T7 * T1 + Vbse * pParam->HSMHV2_rd22 * T9 ) / here->HSMHV2_weff_nf ; Ra_dVdse_eff = ( T7 * T1_dVdse_eff + Vbse * pParam->HSMHV2_rd22 * T9_dVdse_eff ) / here->HSMHV2_weff_nf ; Ra_dVbs = Ra_dVdse_eff * Vdse_eff_dVbs ; Ra_dVds = Ra_dVdse_eff * Vdse_eff_dVds ; Ra_dVgs = Ra_dVdse_eff * Vdse_eff_dVgs + T7_dVg * T1 / here->HSMHV2_weff_nf ; Ra_dVbse = Ra_dVdse_eff * Vdse_eff_dVbse + pParam->HSMHV2_rd22 * T9 / here->HSMHV2_weff_nf ; Ra_dVdse = Ra_dVdse_eff * Vdse_eff_dVdse ; Ra_dVgse = Ra_dVdse_eff * Vdse_eff_dVgse ; T0 = Ra * Ids0 ; T0_dVb = Ra_dVbs * Ids0 + Ra * Ids0_dVbs ; T0_dVd = Ra_dVds * Ids0 + Ra * Ids0_dVds ; T0_dVg = Ra_dVgs * Ids0 + Ra * Ids0_dVgs ; T0_dT = Ra * Ids0_dT ; T1 = Vds + small2 ; T2 = 1.0 / T1 ; T3 = 1.0 + T0 * T2 ; T3_dVb = T0_dVb * T2 ; T3_dVd = ( T0_dVd * T1 - T0 ) * T2 * T2 ; T3_dVg = T0_dVg * T2 ; T3_dT = T0_dT * T2 ; T4 = 1.0 / T3 ; Ids = Ids0 * T4 ; T5 = T4 * T4 ; Ids_dVbs = ( Ids0_dVbs * T3 - Ids0 * T3_dVb ) * T5 ; Ids_dVds = ( Ids0_dVds * T3 - Ids0 * T3_dVd ) * T5 ; Ids_dVgs = ( Ids0_dVgs * T3 - Ids0 * T3_dVg ) * T5 ; Ids_dT = ( Ids0_dT * T3 - Ids0 * T3_dT ) * T5 ; Ids_dRa = - Ids * Ids / ( Vds + small ) ; } else { Ids = Ids0 ; Ids_dVbs = Ids0_dVbs ; Ids_dVds = Ids0_dVds ; Ids_dVgs = Ids0_dVgs ; Ids_dT = Ids0_dT ; Ra = 0.0 ; Ra_dVbs = Ra_dVds = Ra_dVgs = 0.0 ; Ra_dVbse = Ra_dVdse = Ra_dVgse = 0.0 ; Ids_dRa = 0.0 ; } /* just for testing -- can be removed */ /* if (!(ckt->CKTmode & MODEINITPRED)) printf("rrb %e %e %e %e %e %e\n",ckt->CKTtime,here->HSMHV2_mode*Vdse,Ra,Ra_dVdse, Vdse_eff,Vdse_eff_dVdse) ; */ /* if ( Pds < ps_conv ) { */ if ( Pds < 0.0 ) { Ids_dVbs = 0.0 ; Ids_dVgs = 0.0 ; Ids_dT = 0.0 ; } Ids += Gdsmin * Vds ; Ids_dVds += Gdsmin ; /*-----------------------------------------------------------* * STI *-----------------*/ if ( model->HSMHV2_coisti != 0 ) { /*---------------------------------------------------* * dVthSCSTI : Short-channel effect induced by Vds (STI). *-----------------*/ T1 = C_ESI * Cox_inv ; T2 = here->HSMHV2_wdpl ; T3 = here->HSMHV2_lgatesm - model->HSMHV2_parl2 ; T4 = 1.0 / (T3 * T3) ; T5 = 2.0 * (model->HSMHV2_vbi - Pb20b) * T1 * T2 * T4 ; dVth0 = T5 * sqrt_Pbsum ; T6 = T5 * 0.5 / sqrt_Pbsum ; T7 = 2.0 * (model->HSMHV2_vbi - Pb20b) * C_ESI * T2 * T4 * sqrt_Pbsum ; T8 = - 2.0 * T1 * T2 * T4 * sqrt_Pbsum ; dVth0_dVb = T6 * Pbsum_dVb + T7 * Cox_inv_dVb + T8 * Pb20b_dVb ; dVth0_dVd = T6 * Pbsum_dVd + T7 * Cox_inv_dVd + T8 * Pb20b_dVd ; dVth0_dVg = T6 * Pbsum_dVg + T7 * Cox_inv_dVg + T8 * Pb20b_dVg ; dVth0_dT = T6 * Pbsum_dT + T8 * Pb20b_dT ; T4 = pParam->HSMHV2_scsti1 ; T6 = pParam->HSMHV2_scsti2 ; T1 = T4 + T6 * Vdsz ; dVthSCSTI = dVth0 * T1 ; dVthSCSTI_dVb = dVth0_dVb * T1 + dVth0 * T6 * Vdsz_dVbs ; dVthSCSTI_dVd = dVth0_dVd * T1 + dVth0 * T6 * Vdsz_dVds ; dVthSCSTI_dVg = dVth0_dVg * T1 ; dVthSCSTI_dT = dVth0_dT * T1 + dVth0 * T6 * Vdsz_dT ; T1 = pParam->HSMHV2_vthsti - model->HSMHV2_vdsti * Vds ; T1_dVd = - model->HSMHV2_vdsti ; Vgssti = Vgsz - Vfb + T1 + dVthSCSTI ; Vgssti_dVbs = Vgsz_dVbs + dVthSCSTI_dVb ; Vgssti_dVds = Vgsz_dVds + T1_dVd + dVthSCSTI_dVd ; Vgssti_dVgs = Vgsz_dVgs + dVthSCSTI_dVg ; Vgssti_dT = Vgsz_dT + dVthSCSTI_dT ; costi0 = here->HSMHV2_costi0 ; costi1 = here->HSMHV2_costi1 ; costi3 = here->HSMHV2_costi0_p2 * Cox_inv * Cox_inv ; T1 = 2.0 * here->HSMHV2_costi0_p2 * Cox_inv ; costi3_dVb = T1 * Cox_inv_dVb ; costi3_dVd = T1 * Cox_inv_dVd ; costi3_dVg = T1 * Cox_inv_dVg ; costi3_dT = 2 * here->HSMHV2_costi0 * here->HSMHV2_costi00 * 0.5 / sqrt(here->HSMHV2_beta_inv) * beta_inv_dT * Cox_inv * Cox_inv ; T2 = 1.0 / costi3 ; costi3_dVb_c3 = costi3_dVb * T2 ; costi3_dVd_c3 = costi3_dVd * T2 ; costi3_dVg_c3 = costi3_dVg * T2 ; costi3_dT_c3 = costi3_dT * T2 ; costi4 = costi3 * beta * 0.5 ; costi4_dT = ( costi3_dT * beta + costi3 * beta_dT ) * 0.5 ; costi5 = costi4 * beta * 2.0 ; costi5_dT = ( costi4_dT * beta + costi4 * beta_dT ) * 2.0 ; T11 = beta * 0.25 ; T11_dT = beta_dT * 0.25 ; T10 = beta_inv - costi3 * T11 + Vfb - pParam->HSMHV2_vthsti - dVthSCSTI + small ; T10_dVb = - T11 * costi3_dVb - dVthSCSTI_dVb ; T10_dVd = - T11 * costi3_dVd - dVthSCSTI_dVd ; T10_dVg = - T11 * costi3_dVg - dVthSCSTI_dVg ; T10_dT = beta_inv_dT - ( costi3_dT * T11 + costi3 * T11_dT ) - dVthSCSTI_dT ; T1 = Vgsz - T10 - psisti_dlt ; T1_dVb = Vgsz_dVbs - T10_dVb ; T1_dVd = Vgsz_dVds - T10_dVd ; T1_dVg = Vgsz_dVgs - T10_dVg ; T1_dT = Vgsz_dT - T10_dT ; T0 = Fn_Sgn(T10) ; T2 = sqrt (T1 * T1 + T0 * 4.0 * T10 * psisti_dlt) ; T3 = T10 + 0.5 * (T1 + T2) - Vfb + pParam->HSMHV2_vthsti + dVthSCSTI - Vbsz ; T3_dVb = T10_dVb + 0.5 * (T1_dVb + (T1 * T1_dVb + T0 * 2.0 * T10_dVb * psisti_dlt) / T2) + dVthSCSTI_dVb - Vbsz_dVbs ; T3_dVd = T10_dVd + 0.5 * (T1_dVd + (T1 * T1_dVd + T0 * 2.0 * T10_dVd * psisti_dlt) / T2) + dVthSCSTI_dVd - Vbsz_dVds ; T3_dVg = T10_dVg + 0.5 * (T1_dVg + (T1 * T1_dVg + T0 * 2.0 * T10_dVg * psisti_dlt) / T2) + dVthSCSTI_dVg ; T3_dT = T10_dT + 0.5 * (T1_dT + (T1 * T1_dT + T0 * 2.0 * T10_dT * psisti_dlt) / T2) + dVthSCSTI_dT - Vbsz_dT ; T4 = beta * T3 - 1.0 ; T4_dT = beta_dT * T3 + beta * T3_dT ; T5 = 4.0 / costi5 ; T5_dT = - 4.0 / ( costi5 * costi5 ) * costi5_dT ; T1 = 1.0 + T4 * T5 ; T6 = beta * T5 ; T7 = T4 * T5 ; T1_dVb = (T6 * T3_dVb - T7 * costi3_dVb_c3) ; T1_dVd = (T6 * T3_dVd - T7 * costi3_dVd_c3) ; T1_dVg = (T6 * T3_dVg - T7 * costi3_dVg_c3) ; T1_dT = T4_dT * T5 + T4 * T5_dT ; Fn_SZ( T1 , T1, 1.0e-2, T2) ; T1 += small ; T1_dVb *= T2 ; T1_dVd *= T2 ; T1_dVg *= T2 ; T1_dT *= T2 ; costi6 = sqrt(T1) ; costi6_dT = 0.5 / sqrt(T1) * T1_dT ; T0 = costi4 * (1.0 - costi6) ; T0_dT = costi4_dT * (1.0 - costi6) + costi4 * ( - costi6_dT ) ; Psasti = Vgssti + T0 ; T2 = 0.5 * costi4 / costi6 ; Psasti_dVbs = Vgssti_dVbs + costi3_dVb_c3 * T0 - T2 * T1_dVb ; Psasti_dVds = Vgssti_dVds + costi3_dVd_c3 * T0 - T2 * T1_dVd ; Psasti_dVgs = Vgssti_dVgs + costi3_dVg_c3 * T0 - T2 * T1_dVg ; Psasti_dT = Vgssti_dT + T0_dT ; T0 = 1.0 / (beta + 2.0 / (Vgssti + small)) ; T0_dT = - 1.0 / ((beta + 2.0 / (Vgssti + small)) * (beta + 2.0 / (Vgssti + small))) * ( beta_dT - 2 / ((Vgssti + small) * (Vgssti + small)) * Vgssti_dT ); Psbsti = log (1.0 / costi1 / costi3 * (Vgssti * Vgssti)) * T0 ; T1 = 1 / costi1 / costi3 * (Vgssti * Vgssti) ; costi1_dT = 2 * here->HSMHV2_nin * Nin_dT * here->HSMHV2_nsti_p2 ; T1_dT = ( - 1 / costi1 / costi1 * costi1_dT / costi3 - 1 / costi3 / costi3 * costi3_dT / costi1 ) * Vgssti * Vgssti + 1 / costi1 / costi3 * 2 * Vgssti * Vgssti_dT ; T2 = 2.0 * T0 / (Vgssti + small) ; T3 = Psbsti / (Vgssti + small) ; Psbsti_dVbs = T2 * (Vgssti_dVbs - 0.5 * costi3_dVb_c3 * Vgssti + T3 * Vgssti_dVbs ) ; Psbsti_dVds = T2 * (Vgssti_dVds - 0.5 * costi3_dVd_c3 * Vgssti + T3 * Vgssti_dVds ) ; Psbsti_dVgs = T2 * (Vgssti_dVgs - 0.5 * costi3_dVg_c3 * Vgssti + T3 * Vgssti_dVgs ) ; Psbsti_dT = 1 / T1 * T1_dT * T0 + log( T1 ) * T0_dT ; Psab = Psbsti - Psasti - sti2_dlt ; Psab_dVbs = Psbsti_dVbs - Psasti_dVbs ; Psab_dVds = Psbsti_dVds - Psasti_dVds ; Psab_dVgs = Psbsti_dVgs - Psasti_dVgs ; Psab_dT = Psbsti_dT - Psasti_dT ; T0 = sqrt (Psab * Psab + 4.0 * sti2_dlt * Psbsti) ; Psti = Psbsti - 0.5 * (Psab + T0) ; T1 = 1.0 / T0 ; Psti_dVbs = Psbsti_dVbs - 0.5 * ( Psab_dVbs + ( Psab * Psab_dVbs + 2.0 * sti2_dlt * Psbsti_dVbs ) * T1 ) ; Psti_dVds = Psbsti_dVds - 0.5 * ( Psab_dVds + ( Psab * Psab_dVds + 2.0 * sti2_dlt * Psbsti_dVds ) * T1 ) ; Psti_dVgs = Psbsti_dVgs - 0.5 * ( Psab_dVgs + ( Psab * Psab_dVgs + 2.0 * sti2_dlt * Psbsti_dVgs ) * T1 ) ; Psti_dT = Psbsti_dT - 0.5 * ( Psab_dT + ( Psab * Psab_dT + 2.0 * sti2_dlt * Psbsti_dT ) * T1 ) ; T0 = costi1 * exp (beta * Psti) ; T0_dT = costi1_dT * exp(beta * Psti) + costi1 * exp(beta * Psti) * ( beta_dT * Psti + beta * Psti_dT ) ; T1 = beta * (Psti - Vbsz) - 1.0 + T0 ; T1_dVb = beta * ((Psti_dVbs - Vbsz_dVbs) + T0 * Psti_dVbs) ; T1_dVd = beta * ((Psti_dVds - Vbsz_dVds) + T0 * Psti_dVds) ; T1_dVg = beta * (Psti_dVgs + T0 * Psti_dVgs) ; T1_dT = beta_dT * (Psti - Vbsz) + beta * (Psti_dT - Vbsz_dT) + T0_dT ; Fn_SZ ( T1 , T1, 1.0e-2, T0) ; T1 += small ; T1_dVb *= T0 ; T1_dVd *= T0 ; T1_dVg *= T0 ; T1_dT *= T0 ; sq1sti = sqrt (T1); T2 = 0.5 / sq1sti ; sq1sti_dVbs = T2 * T1_dVb ; sq1sti_dVds = T2 * T1_dVd ; sq1sti_dVgs = T2 * T1_dVg ; sq1sti_dT = T2 * T1_dT ; T1 = beta * (Psti - Vbsz) - 1.0; T1_dVb = beta * (Psti_dVbs - Vbsz_dVbs) ; T1_dVd = beta * (Psti_dVds - Vbsz_dVds) ; T1_dVg = beta * Psti_dVgs ; T1_dT = beta_dT * ( Psti - Vbsz ) + beta * (Psti_dT - Vbsz_dT) ; Fn_SZ( T1 , T1, 1.0e-2, T0) ; T1 += small ; T1_dVb *= T0 ; T1_dVd *= T0 ; T1_dVg *= T0 ; T1_dT *= T0 ; sq2sti = sqrt (T1); T2 = 0.5 / sq2sti ; sq2sti_dVbs = T2 * T1_dVb ; sq2sti_dVds = T2 * T1_dVd ; sq2sti_dVgs = T2 * T1_dVg ; sq2sti_dT = T2 * T1_dT ; Qn0sti = costi0 * (sq1sti - sq2sti) ; Qn0sti_dVbs = costi0 * (sq1sti_dVbs - sq2sti_dVbs) ; Qn0sti_dVds = costi0 * (sq1sti_dVds - sq2sti_dVds) ; Qn0sti_dVgs = costi0 * (sq1sti_dVgs - sq2sti_dVgs) ; Qn0sti_dT = costi0 * (sq1sti_dT - sq2sti_dT) + here->HSMHV2_costi00 * 0.5 / sqrt( here->HSMHV2_beta_inv ) * beta_inv_dT * (sq1sti - sq2sti) ; /* T1: Vdsatsti */ T1 = Psasti - Psti ; T1_dVb = Psasti_dVbs - Psti_dVbs ; T1_dVd = Psasti_dVds - Psti_dVds ; T1_dVg = Psasti_dVgs - Psti_dVgs ; T1_dT = Psasti_dT - Psti_dT ; Fn_SZ( T1 , T1 , 1.0e-1 , T2 ) ; T1 += small ; T1_dVb *= T2 ; T1_dVd *= T2 ; T1_dVg *= T2 ; T1_dT *= T2 ; TX = Vds / T1 ; T2 = 1.0 / ( T1 * T1 ) ; TX_dVbs = T2 * ( - Vds * T1_dVb ) ; TX_dVds = T2 * ( T1 - Vds * T1_dVd ) ; TX_dVgs = T2 * ( - Vds * T1_dVg ) ; TX_dT = T2 * ( - Vds * T1_dT ) ; Fn_CP( TY , TX , 1.0 , 4 , T2 ) ; TY_dVbs = T2 * TX_dVbs ; TY_dVds = T2 * TX_dVds ; TY_dVgs = T2 * TX_dVgs ; TY_dT = T2 * TX_dT ; costi7 = 2.0 * here->HSMHV2_wsti * here->HSMHV2_nf * beta_inv ; costi7_dT = 2.0 * here->HSMHV2_wsti * here->HSMHV2_nf * beta_inv_dT ; T1 = Lch ; Idssti = costi7 * Mu * Qn0sti * TY / T1 ; T3 = 1.0 / T1 ; T4 = Mu * Qn0sti * TY / T1 / T1 ; T5 = Mu * Qn0sti ; Idssti_dVbs = costi7 * (((Mu_dVbs * Qn0sti + Mu * Qn0sti_dVbs) * TY + T5 * TY_dVbs ) * T3 - Lch_dVbs * T4 ) ; Idssti_dVds = costi7 * (((Mu_dVds * Qn0sti + Mu * Qn0sti_dVds) * TY + T5 * TY_dVds ) * T3 - Lch_dVds * T4 ) ; Idssti_dVgs = costi7 * (((Mu_dVgs * Qn0sti + Mu * Qn0sti_dVgs) * TY + T5 * TY_dVgs ) * T3 - Lch_dVgs * T4 ) ; Idssti_dT = costi7 * (((Mu_dT * Qn0sti + Mu * Qn0sti_dT) * TY + T5 * TY_dT ) * T3 - Lch_dT * T4 ) + costi7_dT * Mu * Qn0sti * TY / T1 ; Ids = Ids + Idssti ; Ids_dVbs = Ids_dVbs + Idssti_dVbs ; Ids_dVds = Ids_dVds + Idssti_dVds ; Ids_dVgs = Ids_dVgs + Idssti_dVgs ; Ids_dT = Ids_dT + Idssti_dT ; } /*----------------------------------------------------------* * induced gate noise. ( Part 1/3 ) *----------------------*/ if ( model->HSMHV2_coign != 0 && model->HSMHV2_cothrml != 0 && model->HSMHV2_codep==0 ) { kusai00 = VgVt * VgVt ; kusaidd = 2.0e0 * beta_inv * Cox_inv * Idd ; kusaiL = kusai00 - kusaidd ; Fn_SZ( kusai00 , kusai00 , 1.0e-3 , T0 ) ; kusai00 += small ; Fn_SZ( kusaiL , kusaiL , 1.0e-3 , T0 ) ; kusaiL += small ; kusai00L = kusai00 - kusaiL ; if ( Qn0 < epsm10 || kusai00L < epsm10 ) flg_ign = 0 ; else flg_ign = 1 ; } /*-----------------------------------------------------------* * End of PART-1. (label) *-----------------*/ end_of_part_1: /*-----------------------------------------------------------* * Implicit quantities related to Alpha. *-----------------*/ if ( flg_noqi == 0 && VgVt > VgVt_small ) { Delta = fac1 * beta / ( 2 * Xi0p12 ) ; Pslsat = VgVt / ( 1.0 + Delta ) + Ps0 ; } else { Pslsat = 0.0 ; } Vdsat = Pslsat - Pb2 ; if ( Vdsat < 0.0 ) { Vdsat = 0.0 ; } // Qiu for noise calc. Qiu_noi = Qiu ; } // end of normal mode MOSFET /*----------------------------------------------------------* * Evaluate integrated charges in unit [C]. *----------------------*/ T1 = - here->HSMHV2_weffcv_nf * Leff ; Qb = T1 * Qbu ; Qb_dVbs = T1 * Qbu_dVbs ; Qb_dVds = T1 * Qbu_dVds ; Qb_dVgs = T1 * Qbu_dVgs ; Qb_dT = T1 * Qbu_dT ; Qi = T1 * Qiu ; Qi_dVbs = T1 * Qiu_dVbs ; Qi_dVds = T1 * Qiu_dVds ; Qi_dVgs = T1 * Qiu_dVgs ; Qi_dT = T1 * Qiu_dT ; Qd = Qi * Qdrat ; Qd_dVbs = Qi_dVbs * Qdrat + Qi * Qdrat_dVbs ; Qd_dVds = Qi_dVds * Qdrat + Qi * Qdrat_dVds ; Qd_dVgs = Qi_dVgs * Qdrat + Qi * Qdrat_dVgs ; Qd_dT = Qi_dT * Qdrat + Qi * Qdrat_dT ; // Qiu for noise calc. Qi_noi = T1*Qiu_noi ; /*-----------------------------------------------------------* * Modified potential for symmetry. *-----------------*/ T1 = ( Vds - Pds ) / 2 ; Fn_SymAdd( Pzadd , T1 , model->HSMHV2_pzadd0 , T2 ) ; T2 /= 2 ; Pzadd_dVbs = T2 * ( - Pds_dVbs ) ; Pzadd_dVds = T2 * ( 1.0 - Pds_dVds ) ; Pzadd_dVgs = T2 * ( - Pds_dVgs ) ; Pzadd_dT = T2 * ( -Pds_dT ); if ( Pzadd < epsm10 ) { Pzadd = epsm10 ; Pzadd_dVbs = 0.0 ; Pzadd_dVds = 0.0 ; Pzadd_dVgs = 0.0 ; Pzadd_dT = 0.0 ; } Ps0z = Ps0 + Pzadd ; Ps0z_dVbs = Ps0_dVbs + Pzadd_dVbs ; Ps0z_dVds = Ps0_dVds + Pzadd_dVds ; Ps0z_dVgs = Ps0_dVgs + Pzadd_dVgs ; Ps0z_dT = Ps0_dT + Pzadd_dT ; /*-----------------------------------------------------------* * Channel leakage current. *-----------------*/ Ids += Weff/Leff * model->HSMHV2_gdsleak * Vds ; Ids_dVds += Weff/Leff * model->HSMHV2_gdsleak ; /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * PART-2: Substrate / gate / leak currents *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /*-----------------------------------------------------------* * Isub : substrate current induced by impact ionization. *-----------------*/ if ( model->HSMHV2_coisub == 0 ) { /* Accumulation zone or nonconductive case, in which Ids==0. */ Isub = 0.0e0 ; Isub_dVbs = Isub_dVds = Isub_dVgs = 0.0e0 ; Isub_dT = 0.0; } else { /*-------------------------------------------* * Conductive case. *-----------------*/ if ( pParam->HSMHV2_sub1 > 0.0e0 && pParam->HSMHV2_vmax > 0.0e0 ) { T0 = here->HSMHV2_vg2const ; T1 = T0 * Vgp ; T1_dVd = T0 * Vgp_dVds ; T1_dVg = T0 * Vgp_dVgs ; T1_dVb = T0 * Vgp_dVbs ; T1_dT = T0 * Vgp_dT ; T7 = Cox0 * Cox0 ; T8 = here->HSMHV2_qnsub_esi ; T3 = T8 / T7 ; T9 = 2.0 / T8 ; T4 = T9 * T7 ; T2 = here->HSMHV2_xvbs ; T5 = T1 - beta_inv - T2 * Vbsz ; T5_dVd = T1_dVd - T2 * Vbsz_dVds; T5_dVg = T1_dVg ; T5_dVb = T1_dVb - T2 * Vbsz_dVbs; T5_dT = - beta_inv_dT + T1_dT - T2 * Vbsz_dT ; T6 = 1.0 + T4 * T5 ; T6_dVd = T4 * T5_dVd ; T6_dVg = T4 * T5_dVg ; T6_dVb = T4 * T5_dVb ; T6_dT = T4 * T5_dT ; Fn_SZ( T6 , T6, 1.0e-3, T9) ; T6 += small ; T6_dVd *= T9 ; T6_dVg *= T9 ; T6_dVb *= T9 ; T6_dT *= T9 ; T6 = sqrt( T6 ) ; T9 = 0.5 / T6 ; T6_dVd = T9 * T6_dVd ; T6_dVg = T9 * T6_dVg ; T6_dVb = T9 * T6_dVb ; T6_dT = T9 * T6_dT ; Psislsat = T1 + T3 * ( 1.0 - T6 ) ; Psislsat_dVd = T1_dVd - T3 * T6_dVd ; Psislsat_dVg = T1_dVg - T3 * T6_dVg ; Psislsat_dVb = T1_dVb - T3 * T6_dVb ; Psislsat_dT = T1_dT - T3 * T6_dT ; T2 = here->HSMHV2_lgate / (here->HSMHV2_xgate + here->HSMHV2_lgate) ; Psisubsat = pParam->HSMHV2_svds * Vdsz + Ps0z - T2 * Psislsat ; Psisubsat_dVd = pParam->HSMHV2_svds * Vdsz_dVds + Ps0z_dVds - T2 * Psislsat_dVd ; Psisubsat_dVg = Ps0z_dVgs - T2 * Psislsat_dVg ; Psisubsat_dVb = pParam->HSMHV2_svds * Vdsz_dVbs + Ps0z_dVbs - T2 * Psislsat_dVb ; Psisubsat_dT = pParam->HSMHV2_svds * Vdsz_dT + Ps0z_dT - T2 * Psislsat_dT ; Fn_SZ( Psisubsat , Psisubsat, 1.0e-3, T9 ) ; Psisubsat += small ; Psisubsat_dVd *= T9 ; Psisubsat_dVg *= T9 ; Psisubsat_dVb *= T9 ; Psisubsat_dT *= T9 ; T5 = here->HSMHV2_xsub1 ; T6 = here->HSMHV2_xsub2 ; T2 = exp( - T6 / Psisubsat ) ; T3 = T2 * T6 / ( Psisubsat * Psisubsat ) ; T2_dVd = T3 * Psisubsat_dVd ; T2_dVg = T3 * Psisubsat_dVg ; T2_dVb = T3 * Psisubsat_dVb ; T2_dT = T3 * Psisubsat_dT ; Isub = T5 * Psisubsat * Ids * T2 ; Isub_dVds = T5 * ( Psisubsat_dVd * Ids * T2 + Psisubsat * Ids_dVds * T2 + Psisubsat * Ids * T2_dVd ) ; Isub_dVgs = T5 * ( Psisubsat_dVg * Ids * T2 + Psisubsat * Ids_dVgs * T2 + Psisubsat * Ids * T2_dVg ) ; Isub_dVbs = T5 * ( Psisubsat_dVb * Ids * T2 + Psisubsat * Ids_dVbs * T2 + Psisubsat * Ids * T2_dVb ) ; Isub_dT = T5 * ( Psisubsat_dT * Ids * T2 + Psisubsat * Ids_dT * T2 + Psisubsat * Ids * T2_dT ) ; } else { Isub = 0.0e0 ; Isub_dVbs = Isub_dVds = Isub_dVgs = 0.0e0 ; Isub_dT = 0.0e0 ; } /* end of if ( pParam->HSMHV2_sub1 ... ) else block. */ /*---------------------------------------------------* * Impact-Ionization Current in the Drift Region *-----------------*/ T8 = here->HSMHV2_subld1 ; if ( T8 != 0.0 ) { T0 = Vddp ; T0_dVb = 0.0e0 ; T0_dVd = 0.0e0 ; T0_dVg = 0.0e0 ; T0_dT = 0.0e0 ; T0_dVddp = 1.0e0 ; Fn_SZ( T0, T0, 1e-6, T1 ) ; T0_dVb *= T1 ; T0_dVd *= T1 ; T0_dVg *= T1 ; T0_dT *= T1 ; T0_dVddp *= T1 ; T1 = sqrt( VgVt + small ) ; T3 = 1.0 / ( 2.0 * T1 ) ; T1_dVb = VgVt_dVbs * T3 ; T1_dVd = VgVt_dVds * T3 ; T1_dVg = VgVt_dVgs * T3 ; T1_dT = VgVt_dT * T3 ; T4 = T0 - model->HSMHV2_xpvdth * ( 1.0 + model->HSMHV2_xpvdthg * Vgs ) ; T4_dVb = T0_dVb ; T4_dVd = T0_dVd ; T4_dVg = T0_dVg - model->HSMHV2_xpvdth * model->HSMHV2_xpvdthg ; T4_dT = T0_dT ; T4_dVddp = T0_dVddp ; Fn_SZ( T4, T4, 1.0e-2, T9 ) ; T4 += small ; T4_dVb *= T9 ; T4_dVd *= T9 ; T4_dVg *= T9 ; T4_dT *= T9 ; T4_dVddp *= T9 ; T10 = here->HSMHV2_xpdv * model->HSMHV2_xldld * exp( - 1.0e0 / T4 ) ; T11 = T10 * ( 1.0 + 1.0 / T4 ) ; T3 = T4 * T10 ; T3_dVb = T4_dVb * T11 ; T3_dVd = T4_dVd * T11 ; T3_dVg = T4_dVg * T11 ; T3_dT = T4_dT * T11 ; T3_dVddp = T4_dVddp * T11 ; T0 = T0 - T3 ; T0_dVb = T0_dVb - T3_dVb ; T0_dVd = T0_dVd - T3_dVd ; T0_dVg = T0_dVg - T3_dVg ; T0_dT = T0_dT - T3_dT ; T0_dVddp = T0_dVddp - T3_dVddp ; Fn_SZ( T0, T0, 1.0e-2 , T9 ) ; T0 += small; T0_dVb *= T9 ; T0_dVd *= T9 ; T0_dVg *= T9 ; T0_dT *= T9 ; T0_dVddp *= T9 ; T4 = 1.0 / ( T0 * T1 ) ; T7 = Ldrift0 * modelMKS->HSMHV2_subld2 ; T2= exp( - T7 * T4 ); T6 = T7 * T2 * T4 * T4 ; T2_dVb = ( T0_dVb * T1 + T0 * T1_dVb ) * T6 ; T2_dVd = ( T0_dVd * T1 + T0 * T1_dVd ) * T6 ; T2_dVg = ( T0_dVg * T1 + T0 * T1_dVg ) * T6 ; T2_dT = ( T0_dT * T1 + T0 * T1_dT ) * T6 ; T2_dVddp = T0_dVddp * T1 * T6 ; IsubLD = T8 * Ids * T0 * T2 ; IsubLD_dVbs = T8 * ( Ids_dVbs * T0 * T2 + Ids * T0_dVb * T2 + Ids * T0 * T2_dVb ) ; IsubLD_dVds = T8 * ( Ids_dVds * T0 * T2 + Ids * T0_dVd * T2 + Ids * T0 * T2_dVd ) ; IsubLD_dVgs = T8 * ( Ids_dVgs * T0 * T2 + Ids * T0_dVg * T2 + Ids * T0 * T2_dVg ) ; IsubLD_dT = T8 * ( Ids_dT * T0 * T2 + Ids * T0_dT * T2 + Ids * T0 * T2_dT ) ; IsubLD_dVddp = T8 * Ids * (T0_dVddp * T2 + T0 * T2_dVddp ) ; } } /*---------------------------------------------------* * Impact-Ionization Induced Bulk Potential Change (IBPC) *-----------------*/ if ( (Isub + IsubLD) > 0e0 && here->HSMHV2_ibpc1 != 0e0 && model->HSMHV2_codep==0 ) { /* delta Vbs */ T0 = 1e0 + pParam->HSMHV2_ibpc2 * dVth ; T1 = Isub + IsubLD ; dVbsIBPC = here->HSMHV2_ibpc1 * T0 * T1 ; dVbsIBPC_dVbs = here->HSMHV2_ibpc1 * ( pParam->HSMHV2_ibpc2 * dVth_dVb * T1 + T0 * ( Isub_dVbs + IsubLD_dVbs ) ) ; dVbsIBPC_dVds = here->HSMHV2_ibpc1 * ( pParam->HSMHV2_ibpc2 * dVth_dVd * T1 + T0 * ( Isub_dVds + IsubLD_dVds ) ) ; dVbsIBPC_dVgs = here->HSMHV2_ibpc1 * ( pParam->HSMHV2_ibpc2 * dVth_dVg * T1 + T0 * ( Isub_dVgs + IsubLD_dVgs ) ) ; dVbsIBPC_dT = here->HSMHV2_ibpc1 * ( pParam->HSMHV2_ibpc2 * dVth_dT * T1 + T0 * ( Isub_dT + IsubLD_dT ) ) ; dVbsIBPC_dVddp = here->HSMHV2_ibpc1 * T0 * IsubLD_dVddp ; /* dG3 & dG4 */ T10 = 1e0 / Xi0 ; T10_dT = - T10 / Xi0 * Xi0_dT ; T1 = beta * dVbsIBPC * T10 ; T11 = T10 * T10; T1_dVb = beta * ( dVbsIBPC_dVbs * Xi0 - dVbsIBPC * Xi0_dVbs ) * T11 ; T1_dVd = beta * ( dVbsIBPC_dVds * Xi0 - dVbsIBPC * Xi0_dVds ) * T11 ; T1_dVg = beta * ( dVbsIBPC_dVgs * Xi0 - dVbsIBPC * Xi0_dVgs ) * T11 ; T1_dT = beta_dT * dVbsIBPC * T10 + beta * dVbsIBPC_dT * T10 + beta * dVbsIBPC * T10_dT ; T1_dVddp = beta * dVbsIBPC_dVddp * T10 ; T10 = 1e0 / Xil ; T10_dT = - T10 / Xil * Xil_dT ; T2 = beta * dVbsIBPC * T10 ; T11 = T10 * T10; T2_dVb = beta * ( dVbsIBPC_dVbs * Xil - dVbsIBPC * Xil_dVbs ) * T11 ; T2_dVd = beta * ( dVbsIBPC_dVds * Xil - dVbsIBPC * Xil_dVds ) * T11 ; T2_dVg = beta * ( dVbsIBPC_dVgs * Xil - dVbsIBPC * Xil_dVgs ) * T11 ; T2_dT = beta_dT * dVbsIBPC * T10 + beta * dVbsIBPC_dT * T10 + beta * dVbsIBPC * T10_dT ; T2_dVddp = beta * dVbsIBPC_dVddp * T10 ; dG3 = cnst0 * ( Xilp32 * T2 - Xi0p32 * T1 ) ; dG3_dVbs = cnst0 * ( Xilp32_dVbs * T2 + Xilp32 * T2_dVb - Xi0p32_dVbs * T1 - Xi0p32 * T1_dVb ) ; dG3_dVds = cnst0 * ( Xilp32_dVds * T2 + Xilp32 * T2_dVd - Xi0p32_dVds * T1 - Xi0p32 * T1_dVd ) ; dG3_dVgs = cnst0 * ( Xilp32_dVgs * T2 + Xilp32 * T2_dVg - Xi0p32_dVgs * T1 - Xi0p32 * T1_dVg ) ; dG3_dT = cnst0 * ( Xilp32_dT * T2 + Xilp32 * T2_dT - Xi0p32_dT * T1 - Xi0p32 * T1_dT ) + cnst0_dT * ( Xilp32 * T2 - Xi0p32 * T1 ) ; dG3_dVddp = cnst0 * ( Xilp32 * T2_dVddp - Xi0p32 * T1_dVddp ) ; dG4 = cnst0 * 0.5 * ( - Xilp12 * T2 + Xi0p12 * T1 ) ; dG4_dVbs = cnst0 * 0.5 * ( - Xilp12_dVbs * T2 - Xilp12 * T2_dVb + Xi0p12_dVbs * T1 + Xi0p12 * T1_dVb ) ; dG4_dVds = cnst0 * 0.5 * ( - Xilp12_dVds * T2 - Xilp12 * T2_dVd + Xi0p12_dVds * T1 + Xi0p12 * T1_dVd ) ; dG4_dVgs = cnst0 * 0.5 * ( - Xilp12_dVgs * T2 - Xilp12 * T2_dVg + Xi0p12_dVgs * T1 + Xi0p12 * T1_dVg ) ; dG4_dT = cnst0 * 0.5 * ( - Xilp12_dT * T2 - Xilp12 * T2_dT + Xi0p12_dT * T1 + Xi0p12 * T1_dT ) + cnst0_dT *0.5 * ( - Xilp12 * T2 + Xi0p12 * T1 ) ; dG4_dVddp = cnst0 * 0.5 * ( - Xilp12 * T2_dVddp + Xi0p12 * T1_dVddp ) ; /* Add IBPC current into Ids */ dIdd = dG3 + dG4 ; dIdd_dVbs = dG3_dVbs + dG4_dVbs ; dIdd_dVds = dG3_dVds + dG4_dVds ; dIdd_dVgs = dG3_dVgs + dG4_dVgs ; dIdd_dT = dG3_dT + dG4_dT ; dIdd_dVddp = dG3_dVddp + dG4_dVddp ; IdsIBPC = betaWL * dIdd * Mu ; IdsIBPC_dVbs = betaWL * ( Mu * dIdd_dVbs + dIdd * Mu_dVbs ) + betaWL_dVbs * Mu * dIdd ; IdsIBPC_dVds = betaWL * ( Mu * dIdd_dVds + dIdd * Mu_dVds ) + betaWL_dVds * Mu * dIdd ; IdsIBPC_dVgs = betaWL * ( Mu * dIdd_dVgs + dIdd * Mu_dVgs ) + betaWL_dVgs * Mu * dIdd ; IdsIBPC_dT = betaWL * ( Mu * dIdd_dT + dIdd * Mu_dT ) + betaWL_dT * Mu * dIdd ; IdsIBPC_dVddp = betaWL * dIdd_dVddp * Mu ; } /* End if (IBPC) */ T3 = 1 / TTEMP ; T0 =- model->HSMHV2_igtemp2 * T3 * T3 - 2 * model->HSMHV2_igtemp3 * T3 * T3 * T3 ; Egp12_dT = 0.5 * T0 / Egp12; Egp32_dT = 1.5 * T0 * Egp12; /*-----------------------------------------------------------* * Igate : Gate current induced by tunneling. *-----------------*/ if ( model->HSMHV2_coiigs != 0 ) { /* Igate */ if ( flg_noqi == 0 ) { Psdlz = Ps0z + Vdsz - epsm10 ; Psdlz_dVbs = Ps0z_dVbs + Vdsz_dVbs ; Psdlz_dVds = Ps0z_dVds + Vdsz_dVds ; Psdlz_dVgs = Ps0z_dVgs ; Psdlz_dT = Ps0z_dT ; T1 = Vgsz - Vfb + modelMKS->HSMHV2_gleak4 * (dVth - dPpg) * Leff - Psdlz * pParam->HSMHV2_gleak3 ; T3 = modelMKS->HSMHV2_gleak4 * Leff ; T1_dVg = Vgsz_dVgs + T3 * (dVth_dVg - dPpg_dVg) - Psdlz_dVgs * pParam->HSMHV2_gleak3 ; T1_dVd = Vgsz_dVds + T3 * (dVth_dVd - dPpg_dVd) - Psdlz_dVds * pParam->HSMHV2_gleak3 ; T1_dVb = Vgsz_dVbs + T3 * ( dVth_dVb - dPpg_dVb ) - Psdlz_dVbs * pParam->HSMHV2_gleak3 ; T1_dT = Vgsz_dT + T3 * ( dVth_dT - dPpg_dT ) - Psdlz_dT * pParam->HSMHV2_gleak3 ; T3 = 2.0 * T1 ; T1_dVg = T3 * T1_dVg ; T1_dVd = T3 * T1_dVd ; T1_dVb = T3 * T1_dVb ; T1_dT = T3 * T1_dT ; T1 *= T1 ; T3 = 1.0 / Tox0 ; T2 = T1 * T3 ; T2_dVg = (T1_dVg ) * T3 ; T2_dVd = (T1_dVd ) * T3 ; T2_dVb = (T1_dVb ) * T3 ; T2_dT = T1_dT * T3 ; T3 = 1.0 / modelMKS->HSMHV2_gleak5 ; T7 = 1.0 + Ey * T3 ; T7_dVg = Ey_dVgs * T3 ; T7_dVd = Ey_dVds * T3 ; T7_dVb = Ey_dVbs * T3 ; T7_dT = Ey_dT * T3 ; Etun = T2 * T7 ; Etun_dVgs = T2_dVg * T7 + T7_dVg * T2 ; Etun_dVds = T2_dVd * T7 + T7_dVd * T2 ; Etun_dVbs = T2_dVb * T7 + T7_dVb * T2 ; Etun_dT = T2_dT * T7 + T7_dT * T2 ; Fn_SZ( Etun , Etun , igate_dlt , T5 ) ; Etun_dVgs *= T5 ; Etun_dVds *= T5 ; Etun_dVbs *= T5 ; Etun_dT *= T5 ; Fn_SZ( T3 , Vgsz , 1.0e-3 , T4 ) ; T3 -= model->HSMHV2_vzadd0 ; T3_dVb = 0.5 * (Vgsz_dVbs + Vgsz * Vgsz_dVbs/TMF2); TX = T3 / cclmmdf ; TX_dVbs = T3_dVb / cclmmdf ; T2 = 1.0 + TX * TX ; T2_dVb = 2 * TX_dVbs * TX ; T1 = 1.0 - 1.0 / T2 ; T1_dVb = T2_dVb / T2 / T2 ; T1_dVg = 2.0 * TX * T4 / ( T2 * T2 * cclmmdf ) ; T1_dVd = T1_dVg * Vgsz_dVds ; Etun_dVgs = T1 * Etun_dVgs + Etun * T1_dVg ; Etun_dVds = T1 * Etun_dVds + Etun * T1_dVd ; Etun_dVbs = Etun_dVbs * T1 + Etun * T1_dVb ; Etun_dT *= T1 ; Etun *= T1 ; T0 = Leff * here->HSMHV2_weff_nf ; T7 = modelMKS->HSMHV2_gleak7 / (modelMKS->HSMHV2_gleak7 + T0) ; T6 = pParam->HSMHV2_gleak6 ; T9 = T6 / (T6 + Vdsz) ; T9_dVb = - T9 / (T6 + Vdsz) * Vdsz_dVbs ; T9_dVd = - T9 / (T6 + Vdsz) * Vdsz_dVds ; T4 = 1 / (Etun + small ) ; T1 = - pParam->HSMHV2_gleak2 * Egp32 * T4 ; T3 = pParam->HSMHV2_gleak2 * T4 * T4; T1_dT = T3 * (Egp32 * Etun_dT - Egp32_dT * (Etun + small )) ; if ( T1 < - EXP_THR ) { Igate = 0.0 ; Igate_dVbs = Igate_dVds = Igate_dVgs = Igate_dT = 0.0 ; } else { T2 = exp ( T1 ) ; T2_dT = T1_dT * T2 ; T3 = pParam->HSMHV2_gleak1 / Egp12 * C_QE * T0 ; T3_dT = - Egp12_dT * pParam->HSMHV2_gleak1 / Egp12 / Egp12 * C_QE * T0 ; T5 = 1 / cnst0 ; T6 = sqrt ((Qiu + Cox0 * VgVt_small )* T5 ) ; T6_dT = ( ( ( cnst0 * Qiu_dT - cnst0_dT * ( Qiu + Cox0 * VgVt_small ) ) * T5 * T5 ) ) / T6 * 0.5 ; T4 = T2 * T3 * T6 ; T4_dT = T2_dT * T3 * T6 + T2 * T3_dT * T6 + T2 * T3 * T6_dT; T5 = T4 * Etun ; T6 = 0.5 * Etun / (Qiu + Cox0 * VgVt_small ) ; T10 = T5 * Etun ; T10_dVb = T5 * (2.0 * Etun_dVbs - T1 * Etun_dVbs + T6 * Qiu_dVbs) ; T10_dVd = T5 * (2.0 * Etun_dVds - T1 * Etun_dVds + T6 * Qiu_dVds) ; T10_dVg = T5 * (2.0 * Etun_dVgs - T1 * Etun_dVgs + T6 * Qiu_dVgs) ; T10_dT = 2 * T5 * Etun_dT + T4_dT * Etun * Etun ; Igate = T7 * T9 * T10 ; Igate_dVbs = T7 * (T9 * T10_dVb + T9_dVb * T10) ; Igate_dVds = T7 * (T9_dVd * T10 + T9 * T10_dVd) ; Igate_dVgs = T7 * T9 * T10_dVg ; Igate_dT = T7 * T9 * T10_dT ; } } /* Igs */ T0 = - pParam->HSMHV2_glksd2 * Vgs + modelMKS->HSMHV2_glksd3 ; T2 = exp (Tox0 * T0); T2_dVg = (- Tox0 * pParam->HSMHV2_glksd2) * T2; T0 = Vgs / Tox0 / Tox0 ; T3 = Vgs * T0 ; T3_dVg = 2.0 * T0 * (1.0 ) ; T4 = pParam->HSMHV2_glksd1 / 1.0e6 * here->HSMHV2_weff_nf ; Igs = T4 * T2 * T3 ; Igs_dVgs = T4 * (T2_dVg * T3 + T2 * T3_dVg) ; Igs_dVds = 0.0 ; Igs_dVbs = 0.0 ; Igs_dT = 0.0 ; if ( Vgs >= 0.0e0 ){ Igs *= -1.0 ; Igs_dVgs *= -1.0 ; Igs_dVds *= -1.0 ; Igs_dVbs *= -1.0 ; } /* Igd */ T1 = Vgs - Vds ; T0 = - pParam->HSMHV2_glksd2 * T1 + modelMKS->HSMHV2_glksd3 ; T2 = exp (Tox0 * T0); T2_dVg = (- Tox0 * pParam->HSMHV2_glksd2) * T2; T2_dVd = (+ Tox0 * pParam->HSMHV2_glksd2) * T2; T2_dVb = 0.0 ; T0 = T1 / Tox0 / Tox0 ; T3 = T1 * T0 ; T3_dVg = 2.0 * T0 ; T3_dVd = - 2.0 * T0 ; T3_dVb = 0.0 ; T4 = pParam->HSMHV2_glksd1 / 1.0e6 * here->HSMHV2_weff_nf ; Igd = T4 * T2 * T3 ; Igd_dVgs = T4 * (T2_dVg * T3 + T2 * T3_dVg) ; Igd_dVds = T4 * (T2_dVd * T3 + T2 * T3_dVd) ; Igd_dVbs = 0.0 ; Igd_dT = 0.0 ; if( T1 >= 0.0e0 ){ Igd *= -1.0 ; Igd_dVgs *= -1.0 ; Igd_dVds *= -1.0 ; Igd_dVbs *= -1.0 ; } /* Igb */ Etun = ( - ( Vgs - Vbs ) + Vfb + model->HSMHV2_glkb3 ) / Tox0 ; Etun_dVgs = - 1.0 / Tox0 ; Etun_dVds = 0.0 ; Etun_dVbs = 1.0 / Tox0 ; Fn_SZ( Etun , Etun, igate_dlt, T5) ; Etun += small ; Etun_dVgs *= T5 ; Etun_dVbs *= T5 ; T1 = - pParam->HSMHV2_glkb2 / Etun ; if ( T1 < - EXP_THR ) { Igb = 0.0 ; Igb_dVgs = Igb_dVds = Igb_dVbs = Igb_dT = 0.0 ; } else { T2 = exp ( T1 ); T3 = pParam->HSMHV2_glkb2 / ( Etun * Etun ) * T2 ; T2_dVg = T3 * Etun_dVgs ; T2_dVb = T3 * Etun_dVbs ; T3 = pParam->HSMHV2_glkb1 * here->HSMHV2_weff_nf * Leff ; Igb = T3 * Etun * Etun * T2 ; Igb_dVgs = T3 * (2.0 * Etun * Etun_dVgs * T2 + Etun * Etun * T2_dVg); Igb_dVds = 0.0 ; Igb_dVbs = T3 * (2.0 * Etun * Etun_dVbs * T2 + Etun * Etun * T2_dVb); Igb_dT = 0.0; } /* Ifn: Fowler-Nordheim tunneling current */ Eg12 = here->HSMHV2_sqrt_eg ; Eg32 = here->HSMHV2_eg * Eg12 ; T2 = - ( pParam->HSMHV2_fvbs * Vbsz - Vgsz + dVthSC + dVthLP - pParam->HSMHV2_fn3 ) / Tox0 ; T2_dVd = - ( pParam->HSMHV2_fvbs * Vbsz_dVds - Vgsz_dVds + dVthSC_dVd + dVthLP_dVd ) / Tox0 ; T2_dVg = - ( - Vgsz_dVgs + dVthSC_dVg + dVthLP_dVg ) / Tox0 ; T2_dVb = - ( pParam->HSMHV2_fvbs * Vbsz_dVbs -Vgsz_dVbs + dVthSC_dVb + dVthLP_dVb ) / Tox0 ; T2_dT = - ( pParam->HSMHV2_fvbs * Vbsz_dT -Vgsz_dT + dVthSC_dT + dVthLP_dT ) / Tox0 ; T0 = T2 * T2 ; T1 = pParam->HSMHV2_fn2 * Eg32 ; T1_dT = 1.5 * Eg_dT * pParam->HSMHV2_fn2 * Eg12 ; T3 = - T1 / T2 ; if ( T3 < - EXP_THR ) { T5 = 0.0 ; T5_dVd = T5_dVg = T5_dVb = T5_dT = 0.0 ; } else { T5 = exp( T3 ) ; T5_dVd = T5 * T1 * T2_dVd / T0 ; T5_dVg = T5 * T1 * T2_dVg / T0 ; T5_dVb = T5 * T1 * T2_dVb / T0 ; T5_dT = T5 * T1 * T2_dT / T0 ; } T4 = C_QE * pParam->HSMHV2_fn1 * here->HSMHV2_weff_nf * here->HSMHV2_lgate / Eg12 ; T4_dT = (- 0.5) * Eg_dT * T4 / here->HSMHV2_eg ; if ( 2e0 * T2 + T1 < 0e0 ){ Ifn = 0.25e0 * T4 * T1 * T1 * c_exp_2 ; /* minimum value */ Ifn_dVd = 0e0 ; Ifn_dVg = 0e0 ; Ifn_dVb = 0e0 ; Ifn_dT = 0.25e0 * T4_dT * T1 * T1 * c_exp_2 ; } else { Ifn = T4 * T0 * T5 ; Ifn_dVd = T4 * ( 2.0 * T2 * T2_dVd * T5 + T0 * T5_dVd ) ; Ifn_dVg = T4 * ( 2.0 * T2 * T2_dVg * T5 + T0 * T5_dVg ) ; Ifn_dVb = T4 * ( 2.0 * T2 * T2_dVb * T5 + T0 * T5_dVb ) ; Ifn_dT = T4 * ( 2.0 * T2 * T2_dT * T5 + T0 * T5_dT ) +T4_dT * T0 * T5; } Igb -= Ifn ; Igb_dVbs -= Ifn_dVb ; Igb_dVds -= Ifn_dVd ; Igb_dVgs -= Ifn_dVg ; Igb_dT -= Ifn_dT ; } /* if ( model->HSMHV2_coiigs == 0 ) */ /*-----------------------------------------------------------* * Vdsp : Vds modification for GIDL/GISL *-----------------*/ if ( model->HSMHV2_cogidl != 0 ) { T1 = Vds * (1.0 - gidla * Vds) - gidlvds_dlt ; T2 = sqrt (T1 * T1 + 4.0 * gidlvds_dlt * Vds) ; Vdsp = Vds - 0.5 * (T1 + T2) ; T3 = 1.0 - 2.0 * gidla * Vds ; Vdsp_dVd = 1.0 - 0.5 * (T3 + (T1 * T3 + 2.0 * gidlvds_dlt) / T2) ; } /*-----------------------------------------------------------* * Igidl : GIDL *-----------------*/ if( model->HSMHV2_cogidl == 0 ){ Igidl = 0.0e0 ; Igidl_dVbs = 0.0e0 ; Igidl_dVds = 0.0e0 ; Igidl_dVgs = 0.0e0 ; Igidl_dT = 0.0e0 ; } else { T1 = model->HSMHV2_gidl3 * (Vdsp + model->HSMHV2_gidl4) - Vgs + (dVthSC + dVthLP) * model->HSMHV2_gidl5 ; T1_dT = (dVthSC_dT + dVthLP_dT) * model->HSMHV2_gidl5 ; T2 = 1.0 / Tox0 ; E1 = T1 * T2 ; E1_dVb = ((model->HSMHV2_gidl5 * (dVthSC_dVb + dVthLP_dVb)) ) * T2 ; E1_dVd = ((model->HSMHV2_gidl3 * Vdsp_dVd) + model->HSMHV2_gidl5 * (dVthSC_dVd + dVthLP_dVd)) * T2 ; E1_dVg = (-1.0 + model->HSMHV2_gidl5 * (dVthSC_dVg + dVthLP_dVg) ) * T2 ; E1_dT = T1_dT * T2 ; Fn_SZ( Egidl , E1, eef_dlt, T5) ; Egidl_dVb = T5 * E1_dVb ; Egidl_dVd = T5 * E1_dVd ; Egidl_dVg = T5 * E1_dVg ; Egidl_dT = T5 * E1_dT ; T3 = 1 / (Egidl + small) ; T0 = - pParam->HSMHV2_gidl2 * Egp32 * T3 ; T0_dT = - pParam->HSMHV2_gidl2 * T3 *( Egp32_dT - Egidl_dT * T3 * Egp32 ) ; if ( T0 < - EXP_THR ) { Igidl = 0.0 ; Igidl_dVbs = Igidl_dVds = Igidl_dVgs = Igidl_dT = 0.0 ; } else { T1 = exp ( T0 ) ; T1_dT = T0_dT * T1 ; T2 = pParam->HSMHV2_gidl1 / Egp12 * C_QE * here->HSMHV2_weff_nf ; T2_dT = - Egp12_dT * pParam->HSMHV2_gidl1 / Egp12 / Egp12 * C_QE * here->HSMHV2_weff_nf ; Igidl = T2 * Egidl * Egidl * T1 ; T3 = T2 * T1 * Egidl * (2.0 + pParam->HSMHV2_gidl2 * Egp32 * Egidl / (Egidl + small) / (Egidl + small)) ; Igidl_dVbs = T3 * Egidl_dVb ; Igidl_dVds = T3 * Egidl_dVd ; Igidl_dVgs = T3 * Egidl_dVg ; Igidl_dT = T2 * T1 * Egidl * 2.0 * Egidl_dT + T2 * Egidl * Egidl * T1_dT + T2_dT * Egidl * Egidl * T1; } /* bug-fix */ Vdb = Vds - Vbs ; if ( Vdb > 0.0 ) { T2 = Vdb * Vdb ; T4 = T2 * Vdb ; T0 = T4 + C_gidl_delta ; T5 = T4 / T0 ; T7 = ( 3.0 * T2 * T0 - T4 * 3.0 * T2 ) / ( T0 * T0 ) ; /* == T5_dVdb */ Igidl_dVbs = Igidl_dVbs * T5 + Igidl * T7 * ( - 1.0 ) ; /* Vdb_dVbs = -1 */ Igidl_dVds = Igidl_dVds * T5 + Igidl * T7 * ( + 1.0 ) ; /* Vdb_dVds = +1 */ Igidl_dVgs = Igidl_dVgs * T5 ; /* Vdb_dVgs = 0 */ Igidl_dT = Igidl_dT * T5 ; /* Vdb_dT = 0 */ Igidl *= T5 ; } else { Igidl = 0.0 ; Igidl_dVbs = Igidl_dVds = Igidl_dVgs = Igidl_dT = 0.0 ; } } /*-----------------------------------------------------------* * Igisl : GISL *-----------------*/ if( model->HSMHV2_cogidl == 0){ Igisl = 0.0e0 ; Igisl_dVbs = 0.0e0 ; Igisl_dVds = 0.0e0 ; Igisl_dVgs = 0.0e0 ; Igisl_dT = 0.0e0 ; } else { T1 = model->HSMHV2_gidl3 * ( - Vdsp + model->HSMHV2_gidl4 ) - ( Vgs - Vdsp ) + ( dVthSC + dVthLP ) * model->HSMHV2_gidl5 ; T1_dT = ( dVthSC_dT + dVthLP_dT ) * model->HSMHV2_gidl5 ; T2 = 1.0 / Tox0 ; E1 = T1 * T2 ; E1_dVb = ((model->HSMHV2_gidl5 * (dVthSC_dVb + dVthLP_dVb)) ) * T2 ; E1_dVd = (((1.0-model->HSMHV2_gidl3 ) * Vdsp_dVd) + model->HSMHV2_gidl5 * (dVthSC_dVd + dVthLP_dVd)) * T2 ; E1_dVg = (-1.0 + model->HSMHV2_gidl5 * (dVthSC_dVg + dVthLP_dVg) ) * T2 ; E1_dT = T1_dT * T2 ; Fn_SZ( Egisl , E1, eef_dlt, T5) ; Egisl_dVb = T5 * E1_dVb ; Egisl_dVd = T5 * E1_dVd ; Egisl_dVg = T5 * E1_dVg ; Egisl_dT = T5 * E1_dT ; T3 = 1 / (Egisl + small) ; T0 = - pParam->HSMHV2_gidl2 * Egp32 * T3 ; T0_dT = - pParam->HSMHV2_gidl2 * T3 * ( Egp32_dT - Egisl_dT * T3 * Egp32 ) ; if ( T0 < - EXP_THR ) { Igisl = 0.0 ; Igisl_dVbs = Igisl_dVds = Igisl_dVgs = Igisl_dT = 0.0 ; } else { T1 = exp ( T0 ) ; T1_dT = T0_dT * T1 ; T3 = 1 / Egp12 ; T2 = pParam->HSMHV2_gidl1 * T3 * C_QE * here->HSMHV2_weff_nf ; T2_dT = - pParam->HSMHV2_gidl1 * Egp12_dT * T3 * T3 * C_QE * here->HSMHV2_weff_nf ; Igisl = T2 * Egisl * Egisl * T1 ; T3 = T2 * T1 * Egisl * (2.0 + pParam->HSMHV2_gidl2 * Egp32 * Egisl / (Egisl + small) / (Egisl + small)) ; Igisl_dVbs = T3 * Egisl_dVb ; Igisl_dVds = T3 * Egisl_dVd ; Igisl_dVgs = T3 * Egisl_dVg ; Igisl_dT = T2 * T1 * Egisl * 2.0 * Egisl_dT + T2_dT * Egisl * Egisl * T1 + T2 * Egisl * Egisl * T1_dT ; } /* bug-fix */ Vsb = - Vbs ; if ( Vsb > 0.0 ) { T2 = Vsb * Vsb ; T4 = T2 * Vsb ; T0 = T4 + C_gidl_delta ; T5 = T4 / T0 ; T7 = ( 3.0 * T2 * T0 - T4 * 3.0 * T2 ) / ( T0 * T0 ) ; /* == T5_dVsb */ Igisl_dVbs = Igisl_dVbs * T5 + Igisl * T7 * ( - 1.0 ) ; /* Vsb_dVbs = -1 */ Igisl_dVds = Igisl_dVds * T5 ; /* Vsb_dVds = 0 */ Igisl_dVgs = Igisl_dVgs * T5 ; /* Vsb_dVgs = 0 */ Igisl_dT = Igisl_dT * T5 ; /* Vsb_dT = 0 */ Igisl *= T5 ; } else { Igisl = 0.0 ; Igisl_dVbs = Igisl_dVds = Igisl_dVgs = Igisl_dT = 0.0 ; } } /*-----------------------------------------------------------* * End of PART-2. (label) *-----------------*/ /* end_of_part_2: */ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * PART-3: Overlap charge *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ Aclm = pParam->HSMHV2_clm1 ; if ( flg_noqi != 0 ) { /*-------------------------------------------* * Calculation of Psdl for cases of flg_noqi==1. *-----------------*/ Psdl = Aclm * (Vds + Ps0) + (1.0e0 - Aclm) * Psl ; Psdl_dVbs = Aclm * Ps0_dVbs + (1.0e0 - Aclm) * Psl_dVbs ; Psdl_dVds = Aclm * (1.0e0 + Ps0_dVds) + (1.0e0 - Aclm) * Psl_dVds ; Psdl_dVgs = Aclm * Ps0_dVgs + (1.0e0 - Aclm) * Psl_dVgs ; if ( Psdl > Ps0 + Vds - epsm10 ) { Psdl = Ps0 + Vds - epsm10 ; Psdl_dVbs = Ps0_dVbs ; Psdl_dVds = Ps0_dVds + 1.0 ; Psdl_dVgs = Ps0_dVgs ; } if (model->HSMHV2_xqy !=0) { Ec = 0.0e0 ; Ec_dVbs =0.0e0 ; Ec_dVds =0.0e0 ; Ec_dVgs =0.0e0 ; Ec_dT =0.0e0 ; } } else { /* Ec is removed from Lred calc. part */ if (model->HSMHV2_xqy !=0) { if ( Idd < C_IDD_MIN ) { Ec = 0.0e0 ; Ec_dVbs =0.0e0 ; Ec_dVds =0.0e0 ; Ec_dVgs =0.0e0 ; } else { T1 = beta_inv / Leff ; T1_dT = beta_inv_dT / Leff ; T2 = 1.0 / Qn0 ; T3 = T2 * T2 ; Ec = Idd * T1 * T2 ; Ec_dVbs = T1 * (Idd_dVbs * T2 - Idd * Qn0_dVbs * T3 ) ; Ec_dVds = T1 * (Idd_dVds * T2 - Idd * Qn0_dVds * T3 ) ; Ec_dVgs = T1 * (Idd_dVgs * T2 - Idd * Qn0_dVgs * T3 ) ; Ec_dT = T1 * (Idd_dT * T2 - Idd * Qn0_dT * T3 ) + T1_dT * Idd * T2 ; } } } /*-----------------------------------------------------------* * Overlap charges *-----------------*/ Coovlps = (int)ModeNML * model->HSMHV2_coovlps + (int)ModeRVS * model->HSMHV2_coovlp ; Coovlpd = (int)ModeRVS * model->HSMHV2_coovlps + (int)ModeNML * model->HSMHV2_coovlp ; Lovers = ModeNML * here->HSMHV2_lovers + ModeRVS * here->HSMHV2_loverld ; Loverd = ModeRVS * here->HSMHV2_lovers + ModeNML * here->HSMHV2_loverld ; Novers = ModeNML * pParam->HSMHV2_novers + ModeRVS * pParam->HSMHV2_nover ; Noverd = ModeRVS * pParam->HSMHV2_novers + ModeNML * pParam->HSMHV2_nover ; CVDSOVER = pParam->HSMHV2_cvdsover ; /*---------------------------------------------------* * Source side (mode-dependent) *-----------------*/ /*-----------------------------------* * Constant capacitance model *-----------------*/ if ( Coovlps == 0 ) { flg_overgiven = ( (int)ModeNML * model->HSMHV2_cgso_Given + (int)ModeRVS * model->HSMHV2_cgdo_Given ) ; if ( flg_overgiven ) { Cgso = ModeNML * pParam->HSMHV2_cgso + ModeRVS * pParam->HSMHV2_cgdo ; Cgso *= - here->HSMHV2_weffcv_nf ; } else { Cgso = - Cox0 * Lovers * here->HSMHV2_weffcv_nf ; } Qgso = - Cgso * Vgse ; Qgso_dVbse = 0.0 ; Qgso_dVdse = 0.0 ; Qgso_dVgse = - Cgso ; /*-----------------------------------* * Simplified model *-----------------*/ } else { /* Coovlps != 0 begin */ if ( Lovers > 0.0 && Novers == 0.0 ){ cov_slp = modelMKS->HSMHV2_ovslp ; cov_mag = model->HSMHV2_ovmag ; T1 = Cox0 * here->HSMHV2_weffcv_nf ; T4 = cov_slp * T1 * ( cov_mag + Vgs ) ; T4_dVg = cov_slp * T1 ; T4_dVd = 0.0 ; T5 = Lovers * T1 ; T9 = 1.2e0 - Ps0 ; Qgos = Vgs * T5 - T4 * T9 ; Qgos_dVbs = T4 * Ps0_dVbs ; Qgos_dVds = T4 * Ps0_dVds - T9 * T4_dVd ; Qgos_dVgs = T5 + T4 * Ps0_dVgs - T9 * T4_dVg ; Qgos_dT = T4 * Ps0_dT; /*-----------------------------------* * Surface potential model *------------------------*/ } else if ( Lovers > 0.0 && Novers >= 0.0 ) { Vgbgmt = Vgs - Vbs ; Vgbgmt_dVbs = -1.0 ; Vgbgmt_dVds = 0.0 ; Vgbgmt_dVgs = 1.0 ; Vxbgmt = - Vbs + epsm10 ; Vxbgmt_dVbs = -1.0 ; Vxbgmt_dVds = 0.0 ; Vxbgmt_dVgs = 0.0 ; Nover_func = Novers ; cnst0over_func = ModeNML * here->HSMHV2_cnst0overs + ModeRVS * here->HSMHV2_cnst0over ; cnst0over_func_dT = ModeNML * cnst0overs_dT + ModeRVS * cnst0over_dT ; #include "hsmhv2eval_qover.h" if (here->HSMHV2_mode != HiSIM_NORMAL_MODE) { here->HSMHV2_Ps0LD = Ps0LD ; here->HSMHV2_Ps0LD_dVds = - Ps0LD_dVds - Ps0LD_dVgs - Ps0LD_dVbs; here->HSMHV2_Ps0LD_dVgs = Ps0LD_dVgs ; here->HSMHV2_Ps0LD_dVbs = Ps0LD_dVbs ; here->HSMHV2_Ps0LD_dTi = Ps0LD_dT ; here->HSMHV2_QbuLD = QbuLD ; here->HSMHV2_QbuLD_dVds = - QbuLD_dVds - QbuLD_dVgs - QbuLD_dVbs; here->HSMHV2_QbuLD_dVgs = QbuLD_dVgs ; here->HSMHV2_QbuLD_dVbs = QbuLD_dVbs ; here->HSMHV2_QbuLD_dTi = QbuLD_dT ; QosAD = - model->HSMHV2_qovadd * ( Vds - Pds ) ; T3 = model->HSMHV2_qovadd ; QosAD_dVgs = T3 * Pds_dVgs ; QosAD_dVds = T3 * (Pds_dVds - 1.0) ; QosAD_dVbs = T3 * Pds_dVbs ; QosAD_dT = T3 * Pds_dT ; }else{ QosAD = QosAD_dVgs = QosAD_dVds = QosAD_dVbs = QosAD_dT = 0.0 ; } T4 = here->HSMHV2_weffcv_nf * Lovers * ( 1 - CVDSOVER ) ; Qovs = T4 * ( QsuLD + QosAD ) ; Qovs_dVbs = T4 * ( QsuLD_dVbs + QosAD_dVbs ) ; Qovs_dVds = T4 * ( QsuLD_dVds + QosAD_dVds ) ; Qovs_dVgs = T4 * ( QsuLD_dVgs + QosAD_dVgs ) ; Qovs_dT = T4 * ( QsuLD_dT + QosAD_dT ) ; QisLD = T4 * QiuLD ; QisLD_dVbs = T4 * QiuLD_dVbs ; QisLD_dVds = T4 * QiuLD_dVds ; QisLD_dVgs = T4 * QiuLD_dVgs ; QisLD_dT = T4 * QiuLD_dT ; QbsLD = T4 * ( QbuLD + QosAD ) ; QbsLD_dVbs = T4 * ( QbuLD_dVbs + QosAD_dVbs ) ; QbsLD_dVds = T4 * ( QbuLD_dVds + QosAD_dVds ) ; QbsLD_dVgs = T4 * ( QbuLD_dVgs + QosAD_dVgs ) ; QbsLD_dT = T4 * ( QbuLD_dT + QosAD_dT ) ; if ( CVDSOVER != 0.0 ) { /* Qovsext begin */ Vgbgmt = Vgse - Vbse ; Vgbgmt_dVbs = -1.0 ; Vgbgmt_dVds = 0.0 ; Vgbgmt_dVgs = 1.0 ; Vxbgmt = - Vbse + epsm10 ; Vxbgmt_dVbs = -1.0 ; Vxbgmt_dVds = 0.0 ; Vxbgmt_dVgs = 0.0 ; #include "hsmhv2eval_qover.h" T4 = here->HSMHV2_weffcv_nf * Lovers * CVDSOVER ; Qovsext = T4 * QsuLD ; Qovsext_dVdse = T4 * QsuLD_dVds ; Qovsext_dVgse = T4 * QsuLD_dVgs ; Qovsext_dVbse = T4 * QsuLD_dVbs ; Qovsext_dT = T4 * QsuLD_dT ; QisLDext = T4 * QiuLD ; QisLDext_dVbse = T4 * QiuLD_dVbs ; QisLDext_dVdse = T4 * QiuLD_dVds ; QisLDext_dVgse = T4 * QiuLD_dVgs ; QisLDext_dT = T4 * QiuLD_dT ; QbsLDext = T4 * QbuLD ; QbsLDext_dVbse = T4 * QbuLD_dVbs ; QbsLDext_dVdse = T4 * QbuLD_dVds ; QbsLDext_dVgse = T4 * QbuLD_dVgs ; QbsLDext_dT = T4 * QbuLD_dT ; } /* Qovsext end */ } /*-----------------------------------* * Additional constant capacitance model *-----------------*/ flg_overgiven = ( (int)ModeNML * model->HSMHV2_cgso_Given + (int)ModeRVS * model->HSMHV2_cgdo_Given ) ; if ( flg_overgiven ) { Cgso = ModeNML * pParam->HSMHV2_cgso + ModeRVS * pParam->HSMHV2_cgdo ; Cgso *= - here->HSMHV2_weffcv_nf ; } Qgso = - Cgso * Vgse ; Qgso_dVbse = 0.0 ; Qgso_dVdse = 0.0 ; Qgso_dVgse = - Cgso ; } /* Coovlps != 0 end */ /*---------------------------------------------------* * Drain side (mode-dependent) *-----------------*/ /*-----------------------------------* * Constant capacitance model *-----------------*/ if ( Coovlpd == 0 ) { flg_overgiven = ( (int)ModeRVS * model->HSMHV2_cgso_Given + (int)ModeNML * model->HSMHV2_cgdo_Given ) ; if ( flg_overgiven ) { Cgdo = ModeRVS * pParam->HSMHV2_cgso + ModeNML * pParam->HSMHV2_cgdo ; Cgdo *= - here->HSMHV2_weffcv_nf ; } else { Cgdo = - Cox0 * Loverd * here->HSMHV2_weffcv_nf ; } Qgdo = - Cgdo * (Vgse - Vdse) ; Qgdo_dVbse = 0.0 ; Qgdo_dVdse = Cgdo ; Qgdo_dVgse = - Cgdo ; /*-----------------------------------* * Simplified model *-----------------*/ } else { /* Coovlpd != 0 begin */ if ( Loverd > 0.0 && Noverd == 0.0 ){ cov_slp = modelMKS->HSMHV2_ovslp ; cov_mag = model->HSMHV2_ovmag ; T1 = Cox0 * here->HSMHV2_weffcv_nf ; T4 = cov_slp * T1 * ( cov_mag + Vgs - Vds ) ; T4_dVg = cov_slp * T1 ; T4_dVd = - cov_slp * T1 ; T5 = Loverd * T1 ; T9 = 1.2e0 + Vds - Psl ; Qgod = ( Vgs - Vds ) * T5 - T4 * T9 ; Qgod_dVbs = + T4 * Psl_dVbs ; Qgod_dVds = - T5 + T4 * ( -1.0 + Psl_dVds ) - T9 * T4_dVd ; Qgod_dVgs = + T5 + T4 * Psl_dVgs - T9 * T4_dVg ; Qgod_dT = T4 * Psl_dT; /*-----------------------------------* * Surface potential model *------------------------*/ } else if ( Loverd > 0.0 && Noverd >= 0.0 ) { Vgbgmt = Vgs - Vbs ; Vgbgmt_dVbs = -1.0 ; Vgbgmt_dVds = 0.0 ; Vgbgmt_dVgs = 1.0 ; Vxbgmt = Vds - Vbs + epsm10 ; Vxbgmt_dVbs = -1.0 ; Vxbgmt_dVds = 1.0 ; Vxbgmt_dVgs = 0.0 ; Nover_func = Noverd ; cnst0over_func = ModeNML * here->HSMHV2_cnst0over + ModeRVS * here->HSMHV2_cnst0overs ; cnst0over_func_dT = ModeNML * cnst0over_dT + ModeRVS * cnst0overs_dT ; #include "hsmhv2eval_qover.h" if (here->HSMHV2_mode == HiSIM_NORMAL_MODE) { here->HSMHV2_Ps0LD = Ps0LD ; here->HSMHV2_Ps0LD_dVds = Ps0LD_dVds ; here->HSMHV2_Ps0LD_dVgs = Ps0LD_dVgs ; here->HSMHV2_Ps0LD_dVbs = Ps0LD_dVbs ; here->HSMHV2_Ps0LD_dTi = Ps0LD_dT ; here->HSMHV2_QbuLD = QbuLD ; here->HSMHV2_QbuLD_dVds = QbuLD_dVds ; here->HSMHV2_QbuLD_dVgs = QbuLD_dVgs ; here->HSMHV2_QbuLD_dVbs = QbuLD_dVbs ; here->HSMHV2_QbuLD_dTi = QbuLD_dT ; QodAD = model->HSMHV2_qovadd * ( Vds - Pds ) ; T3 = - model->HSMHV2_qovadd ; QodAD_dVgs = T3 * Pds_dVgs ; QodAD_dVds = T3 * (Pds_dVds - 1.0) ; QodAD_dVbs = T3 * Pds_dVbs ; QodAD_dT = T3 * Pds_dT ; }else{ QodAD = QodAD_dVgs = QodAD_dVds = QodAD_dVbs = QodAD_dT = 0.0 ; } T4 = here->HSMHV2_weffcv_nf * Loverd * ( 1 - CVDSOVER ) ; Qovd = T4 * ( QsuLD + QodAD ) ; Qovd_dVbs = T4 * ( QsuLD_dVbs + QodAD_dVbs ) ; Qovd_dVds = T4 * ( QsuLD_dVds + QodAD_dVds ) ; Qovd_dVgs = T4 * ( QsuLD_dVgs + QodAD_dVgs ) ; Qovd_dT = T4 * ( QsuLD_dT + QodAD_dT ) ; QidLD = T4 * QiuLD ; QidLD_dVbs = T4 * QiuLD_dVbs ; QidLD_dVds = T4 * QiuLD_dVds ; QidLD_dVgs = T4 * QiuLD_dVgs ; QidLD_dT = T4 * QiuLD_dT ; QbdLD = T4 * ( QbuLD + QodAD ) ; QbdLD_dVbs = T4 * ( QbuLD_dVbs + QodAD_dVbs ) ; QbdLD_dVds = T4 * ( QbuLD_dVds + QodAD_dVds ) ; QbdLD_dVgs = T4 * ( QbuLD_dVgs + QodAD_dVgs ) ; QbdLD_dT = T4 * ( QbuLD_dT + QodAD_dT ) ; if ( CVDSOVER != 0.0 ) { /* Qovdext begin */ Vgbgmt = Vgse - Vbse ; Vgbgmt_dVbs = -1.0 ; Vgbgmt_dVds = 0.0 ; Vgbgmt_dVgs = 1.0 ; Vxbgmt = Vdse - Vbse + epsm10 ; Vxbgmt_dVbs = -1.0 ; Vxbgmt_dVds = 1.0 ; Vxbgmt_dVgs = 0.0 ; #include "hsmhv2eval_qover.h" T4 = here->HSMHV2_weffcv_nf * Loverd * CVDSOVER ; Qovdext = T4 * QsuLD ; Qovdext_dVdse = T4 * QsuLD_dVds ; Qovdext_dVgse = T4 * QsuLD_dVgs ; Qovdext_dVbse = T4 * QsuLD_dVbs ; Qovdext_dT = T4 * QsuLD_dT ; QidLDext = T4 * QiuLD ; QidLDext_dVbse = T4 * QiuLD_dVbs ; QidLDext_dVdse = T4 * QiuLD_dVds ; QidLDext_dVgse = T4 * QiuLD_dVgs ; QidLDext_dT = T4 * QiuLD_dT ; QbdLDext = T4 * QbuLD ; QbdLDext_dVbse = T4 * QbuLD_dVbs ; QbdLDext_dVdse= T4 * QbuLD_dVds ; QbdLDext_dVgse= T4 * QbuLD_dVgs ; QbdLDext_dT = T4 * QbuLD_dT ; } /* Qovdext end */ } /*-----------------------------------* * Additional constant capacitance model *-----------------*/ flg_overgiven = ( (int)ModeRVS * model->HSMHV2_cgso_Given + (int)ModeNML * model->HSMHV2_cgdo_Given ) ; if ( flg_overgiven ) { Cgdo = ModeRVS * pParam->HSMHV2_cgso + ModeNML * pParam->HSMHV2_cgdo ; Cgdo *= - here->HSMHV2_weffcv_nf ; } Qgdo = - Cgdo * (Vgse - Vdse) ; Qgdo_dVbse = 0.0 ; Qgdo_dVdse = Cgdo ; Qgdo_dVgse = - Cgdo ; } /* Coovlpd != 0 end */ /*-------------------------------------------* * Gate/Bulk overlap charge: Qgbo *-----------------*/ Cgbo_loc = - pParam->HSMHV2_cgbo * here->HSMHV2_lgate ; Qgbo = - Cgbo_loc * (Vgs -Vbs) ; Qgbo_dVgs = - Cgbo_loc ; Qgbo_dVbs = Cgbo_loc ; Qgbo_dVds = 0.0 ; /*---------------------------------------------------* * Lateral-field-induced capacitance. *-----------------*/ if ( model->HSMHV2_xqy == 0 ){ Qy = 0.0e0 ; Qy_dVds = 0.0e0 ; Qy_dVgs = 0.0e0 ; Qy_dVbs = 0.0e0 ; Qy_dT = 0.0e0 ; } else { Pslk = Ec * Leff + Ps0 ; Pslk_dVbs = Ec_dVbs * Leff + Ps0_dVbs; Pslk_dVds = Ec_dVds * Leff + Ps0_dVds; Pslk_dVgs = Ec_dVgs * Leff + Ps0_dVgs; Pslk_dT = Ec_dT * Leff + Ps0_dT; T1 = Aclm * ( Vds + Ps0 ) + ( 1.0e0 - Aclm ) * Pslk ; T1_dVb = Aclm * ( Ps0_dVbs ) + ( 1.0e0 - Aclm ) * Pslk_dVbs ; T1_dVd = Aclm * ( 1.0 + Ps0_dVds ) + ( 1.0e0 - Aclm ) * Pslk_dVds ; T1_dVg = Aclm * ( Ps0_dVgs ) + ( 1.0e0 - Aclm ) * Pslk_dVgs ; T1_dT = Aclm * ( Ps0_dT ) + ( 1.0e0 - Aclm ) * Pslk_dT ; T10 = here->HSMHV2_wdpl ; T3 = T10 * 1.3 ; T2 = C_ESI * here->HSMHV2_weffcv_nf * T3 ; Qy = - ( ( Ps0 + Vds - T1 ) / model->HSMHV2_xqy ) * T2 ; Qy_dVds = - ( ( Ps0_dVds + 1.0e0 - T1_dVd ) / model->HSMHV2_xqy ) * T2 ; Qy_dVgs = - ( ( Ps0_dVgs - T1_dVg ) / model->HSMHV2_xqy ) * T2 ; Qy_dVbs = - ( ( Ps0_dVbs - T1_dVb ) / model->HSMHV2_xqy ) * T2 ; Qy_dT = - ( ( Ps0_dT - T1_dT ) / model->HSMHV2_xqy ) * T2 ; } if ( model->HSMHV2_xqy1 != 0.0 ){ Qy += here->HSMHV2_cqyb0 * Vbs ; Qy_dVbs += here->HSMHV2_cqyb0 ; } /*---------------------------------------------------* * Fringing capacitance. *-----------------*/ Cfd = here->HSMHV2_cfrng ; Cfs = here->HSMHV2_cfrng ; Qfd = Cfd * ( Vgse - Vdse ) ; Qfs = Cfs * Vgse ; /*-----------------------------------------------------------* * End of PART-3. (label) *-----------------*/ /* end_of_part_3: */ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * PART-4: Substrate-source/drain junction diode. *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* move to hsmhveval_dio.c */ /*-----------------------------------------------------------* * End of PART-4. (label) *-----------------*/ /* end_of_part_4: */ /*-----------------------------------------------------------* * PART-5: NQS. (label) *-----------------*/ if (flg_nqs) { if(ckt->CKTmode & MODETRAN){ if( ckt->CKTmode & MODEINITTRAN ){ tau = tau_dVds = tau_dVgs = tau_dVbs = tau_dT = 0.0 ; taub = taub_dVds = taub_dVgs = taub_dVbs = taub_dT = 0.0 ; } else { /* tau for inversion charge */ if (flg_noqi == 0) { T12 = model->HSMHV2_dly1; T10 = model->HSMHV2_dly2; T3 = Lch ; T1 = T10 * T12 * T3 * T3 ; T2 = Mu * VgVt * T12 + T10 * T3 * T3 + small ; tau = T1 / T2 ; T1_dVg = T10 * T12 * 2.0 * T3 * Lch_dVgs ; T1_dVd = T10 * T12 * 2.0 * T3 * Lch_dVds ; T1_dVb = T10 * T12 * 2.0 * T3 * Lch_dVbs ; T1_dT = T10 * T12 * 2.0 * T3 * Lch_dT ; T2_dVg = T12 * Mu_dVgs * VgVt + T12 * Mu * VgVt_dVgs + T10 * 2.0 * T3 * Lch_dVgs ; T2_dVd = T12 * Mu_dVds * VgVt + T12 * Mu * VgVt_dVds + T10 * 2.0 * T3 * Lch_dVds ; T2_dVb = T12 * Mu_dVbs * VgVt + T12 * Mu * VgVt_dVbs + T10 * 2.0 * T3 * Lch_dVbs ; T2_dT = T12 * Mu_dT * VgVt + T12 * Mu * VgVt_dT + T10 * 2.0 * T3 * Lch_dT ; T4 = 1.0 / T2 ; tau_dVgs = ( T1_dVg - tau * T2_dVg ) * T4 ; tau_dVds = ( T1_dVd - tau * T2_dVd ) * T4 ; tau_dVbs = ( T1_dVb - tau * T2_dVb ) * T4 ; tau_dT = ( T1_dT - tau * T2_dT ) * T4 ; } else { tau = model->HSMHV2_dly1 ; tau_dVgs = tau_dVds = tau_dVbs = tau_dT = 0.0 ; } T1 = ckt->CKTdelta ; /* tau for bulk charge */ T2 = modelMKS->HSMHV2_dly3 ; taub = T2 * Cox ; taub_dVgs = T2 * Cox_dVg ; taub_dVds = T2 * Cox_dVd ; taub_dVbs = T2 * Cox_dVb ; taub_dT = 0.0 ; } } else { /* !(CKT_mode & MODETRAN) */ tau = tau_dVds = tau_dVgs = tau_dVbs = tau_dT = 0.0 ; taub = taub_dVds = taub_dVgs = taub_dVbs = taub_dT = 0.0 ; } } if ( flg_nqs && (ckt->CKTmode & (MODEDCOP | MODEINITSMSIG)) ) { /* ACNQS */ if (flg_noqi == 0) { T12 = model->HSMHV2_dly1 ; T10 = model->HSMHV2_dly2 ; T3 = Lch ; T1 = T12 * T10 * T3 * T3 ; T2 = Mu * VgVt * T12 + T10 * T3 * T3 + small ; tau = T1 / T2 ; T1_dVg = T10 * T12 * 2.0 * T3 * Lch_dVgs ; T1_dVd = T10 * T12 * 2.0 * T3 * Lch_dVds ; T1_dVb = T10 * T12 * 2.0 * T3 * Lch_dVbs ; T1_dT = T10 * T12 * 2.0 * T3 * Lch_dT ; T2_dVg = T12 * Mu_dVgs * VgVt + T12 * Mu * VgVt_dVgs + T10 * 2.0 * T3 * Lch_dVgs ; T2_dVd = T12 * Mu_dVds * VgVt + T12 * Mu * VgVt_dVds + T10 * 2.0 * T3 * Lch_dVds ; T2_dVb = T12 * Mu_dVbs * VgVt + T12 * Mu * VgVt_dVbs + T10 * 2.0 * T3 * Lch_dVbs ; T2_dT = T12 * Mu_dT * VgVt + T12 * Mu * VgVt_dT + T10 * 2.0 * T3 * Lch_dT ; T4 = 1.0 / T2 ; tau_dVgs = (T1_dVg - tau * T2_dVg) * T4 ; tau_dVds = (T1_dVd - tau * T2_dVd) * T4 ; tau_dVbs = (T1_dVb - tau * T2_dVb) * T4 ; tau_dT = (T1_dT - tau * T2_dT) * T4 ; } else { tau = model->HSMHV2_dly1 ; tau_dVgs = tau_dVds = tau_dVbs = tau_dT = 0.0 ; } T2 = modelMKS->HSMHV2_dly3 ; taub = T2 * Cox; taub_dVgs = T2 * Cox_dVg ; taub_dVds = T2 * Cox_dVd ; taub_dVbs = T2 * Cox_dVb ; taub_dT = 0.0 ; } /*-----------------------------------------------------------* * End of PART-5. (label) *-----------------*/ /* end_of_part_5: */ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * PART-6: Noise Calculation. *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /*-----------------------------------------------------------* * 1/f noise. *-----------------*/ if ( model->HSMHV2_coflick != 0 && !flg_noqi ) { NFalp = pParam->HSMHV2_nfalp ; NFtrp = pParam->HSMHV2_nftrp ; Cit = modelMKS->HSMHV2_cit ; T1 = Qn0 / C_QE ; T2 = ( Cox + Qn0 / ( Ps0 - Vbscl ) + Cit ) * beta_inv / C_QE ; T3 = -2.0E0 * Qi_noi / C_QE / Lch / here->HSMHV2_weff_nf - T1 ; if ( T3 != T1 ) { T4 = 1.0E0 / ( T1 + T2 ) / ( T3 + T2 ) + 2.0E0 * NFalp * Ey * Mu / ( T3 - T1 ) * log( ( T3 + T2 ) / ( T1 + T2 ) ) + NFalp * Ey * Mu * NFalp * Ey * Mu ; } else { T4 = 1.0 / ( T1 + T2 ) / ( T3 + T2 ) + 2.0 * NFalp * Ey * Mu / ( T1 + T2 ) + NFalp * Ey * Mu * NFalp * Ey * Mu; } Nflic = Ids * Ids * NFtrp / ( Lch * beta * here->HSMHV2_weff_nf ) * T4 ; } else { Nflic = 0.0 ; } /*-----------------------------------------------------------* * thermal noise. *-----------------*/ if ( model->HSMHV2_cothrml != 0 && !flg_noqi && model->HSMHV2_codep==0 ) { Eyd = ( Psdl - Ps0 ) / Lch + small ; T12 = Muun * Eyd / 1.0e7 ; /* note: model->HSMHV2_bb = 2 (electron) ;1 (hole) */ if ( 1.0e0 - epsm10 <= model->HSMHV2_bb && model->HSMHV2_bb <= 1.0e0 + epsm10 ) { T7 = 1.0e0 ; } else if ( 2.0e0 - epsm10 <= model->HSMHV2_bb && model->HSMHV2_bb <= 2.0e0 + epsm10 ) { T7 = T12 ; } else { T7 = Fn_Pow( Eyd, model->HSMHV2_bb - 1.0e0 ) ; } T8 = T12 * T7 ; T9 = 1.0e0 + T8 ; T10 = Fn_Pow( T9, ( - 1.0e0 / model->HSMHV2_bb - 1.0e0 ) ) ; T11 = T9 * T10 ; Mud_hoso = Muun * T11 ; Mu_Ave = ( Mu + Mud_hoso ) / 2.0 ; /* Sid_h = GAMMA * 4.0 * C_KB * model->HSMHV2_temp * gds0_h2; */ T0 = Alpha * Alpha ; Nthrml = here->HSMHV2_weff_nf * Cox * VgVt * Mu * ( ( 1e0 + 3e0 * Alpha + 6e0 * T0 ) * Mud_hoso * Mud_hoso + ( 3e0 + 4e0 * Alpha + 3e0 * T0 ) * Mud_hoso * Mu + ( 6e0 + 3e0 * Alpha + T0 ) * Mu * Mu ) / ( 15e0 * Lch * ( 1e0 + Alpha ) * Mu_Ave * Mu_Ave ) ; } else { Nthrml = 0e0 ; } /*----------------------------------------------------------* * induced gate noise. ( Part 2/3 ) *----------------------*/ if ( model->HSMHV2_coign != 0 && model->HSMHV2_cothrml != 0 && flg_ign == 1 && !flg_noqi && model->HSMHV2_codep==0) { sqrtkusaiL = sqrt( kusaiL ) ; T2 = VgVt + sqrtkusaiL ; T3 = kusai00 * kusai00 ; T4 = kusaiL * kusaiL ; T5 = 42.0e0 * kusai00 * kusaiL ; T5 += 4.0e0 * ( T3 + T4 ) ; T5 += 20.0e0 * sqrtkusaiL * VgVt * ( kusai00 + kusaiL ) ; T10 = T2 * T2 ; T10 *= T10 ; kusai_ig = T5 / ( T10 * T2 ) ; /* Induced Gate Noise parameter */ gds0_ign = here->HSMHV2_weff_nf / Lch * Mu * Cox ; gds0_h2 = gds0_ign * VgVt ; GAMMA = Nthrml / gds0_h2 ; T7 = kusai00 + 4.0e0 * VgVt * sqrtkusaiL + kusaiL ; /* cross-correlation coefficient (= Sigid/sqrt(Sig*Sid) ) */ crl_f = c_sqrt_15 * kusai00L * T7 / ( 6.0e0 * T2 * sqrt( GAMMA * T2 * VgVt * T5 ) ) ; } /*-----------------------------------------------------------* * End of PART-6. (label) *-----------------*/ /* end_of_part_6: */ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * PART-7: Evaluation of outputs. *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /*---------------------------------------------------* * Extrapolate quantities if external biases are out of bounds. * -> not necessary here *-----------------*/ /*-----------------------------------------------------------* * Warn negative conductance. * - T1 ( = d Ids / d Vds ) is the derivative w.r.t. circuit bias. *-----------------*/ T1 = ModeNML * Ids_dVds + ModeRVS * ( Ids_dVbs + Ids_dVds + Ids_dVgs ) ; if ( flg_info >= 1 && (Ids_dVbs < 0.0 || T1 < 0.0 || Ids_dVgs < 0.0) ) { printf( "*** warning(HiSIM_HV(%s)): Negative Conductance\n", model->HSMHV2modName ) ; printf( " type = %d mode = %d\n" , model->HSMHV2_type , here->HSMHV2_mode ) ; printf( " Vbs = %12.5e Vds = %12.5e Vgse= %12.5e\n" , Vbs , Vds , Vgs ) ; printf( " Ids_dVbs = %12.5e\n" , Ids_dVbs ) ; printf( " Ids_dVds = %12.5e\n" , T1 ) ; printf( " Ids_dVgs = %12.5e\n" , Ids_dVgs ) ; } /*-----------------------------------------------------------* * Assign outputs. *-----------------*/ /*---------------------------------------------------* * Channel current and conductances. *-----------------*/ here->HSMHV2_ids = Mfactor * Ids ; here->HSMHV2_dIds_dVdsi = Mfactor * Ids_dVds ; here->HSMHV2_dIds_dVgsi = Mfactor * Ids_dVgs ; here->HSMHV2_dIds_dVbsi = Mfactor * Ids_dVbs ; here->HSMHV2_dIds_dTi = Mfactor * Ids_dT ; here->HSMHV2_idsibpc = Mfactor * IdsIBPC ; here->HSMHV2_dIdsIBPC_dVdsi = Mfactor * IdsIBPC_dVds ; here->HSMHV2_dIdsIBPC_dVgsi = Mfactor * IdsIBPC_dVgs ; here->HSMHV2_dIdsIBPC_dVbsi = Mfactor * IdsIBPC_dVbs ; here->HSMHV2_dIdsIBPC_dTi = Mfactor * IdsIBPC_dT ; here->HSMHV2_dIdsIBPC_dVddp = Mfactor * IdsIBPC_dVddp ; /* -------------------------------------* * Intrinsic charges / capacitances. *-----------------*/ if (flg_nqs) { /* for flat handling of NQS: the NQS charges are added in hsmhvld */ here->HSMHV2_qg = 0.0 ; here->HSMHV2_qd = 0.0 ; here->HSMHV2_qs = 0.0 ; here->HSMHV2_qdp = 0.0 ; here->HSMHV2_qsp = 0.0 ; here->HSMHV2_dqdp_dVdse = 0.0 ; here->HSMHV2_dqdp_dVgse = 0.0 ; here->HSMHV2_dqdp_dVbse = 0.0 ; here->HSMHV2_dqdp_dTi = 0.0 ; here->HSMHV2_dqsp_dVdse = 0.0 ; here->HSMHV2_dqsp_dVgse = 0.0 ; here->HSMHV2_dqsp_dVbse = 0.0 ; here->HSMHV2_dqsp_dTi = 0.0 ; here->HSMHV2_dQdi_dVdsi = 0.0 ; here->HSMHV2_dQdi_dVgsi = 0.0 ; here->HSMHV2_dQdi_dVbsi = 0.0 ; here->HSMHV2_dQdi_dTi = 0.0 ; here->HSMHV2_dQg_dVdsi = 0.0 ; here->HSMHV2_dQg_dVgsi = 0.0 ; here->HSMHV2_dQg_dVbsi = 0.0 ; here->HSMHV2_dQg_dTi = 0.0 ; here->HSMHV2_dQb_dVdsi = 0.0 ; here->HSMHV2_dQb_dVgsi = 0.0 ; here->HSMHV2_dQb_dVbsi = 0.0 ; here->HSMHV2_dQb_dTi = 0.0 ; here->HSMHV2_qgext = 0.0 ; here->HSMHV2_qdext = 0.0 ; here->HSMHV2_qsext = 0.0 ; here->HSMHV2_dQdext_dVdse = 0.0 ; here->HSMHV2_dQdext_dVgse = 0.0 ; here->HSMHV2_dQdext_dVbse = 0.0 ; here->HSMHV2_dQdext_dTi = 0.0 ; here->HSMHV2_dQgext_dVdse = 0.0 ; here->HSMHV2_dQgext_dVgse = 0.0 ; here->HSMHV2_dQgext_dVbse = 0.0 ; here->HSMHV2_dQgext_dTi = 0.0 ; here->HSMHV2_dQbext_dVdse = 0.0 ; here->HSMHV2_dQbext_dVgse = 0.0 ; here->HSMHV2_dQbext_dVbse = 0.0 ; here->HSMHV2_dQbext_dTi = 0.0 ; here->HSMHV2_tau = tau ; here->HSMHV2_tau_dVgsi = tau_dVgs ; here->HSMHV2_tau_dVdsi = tau_dVds ; here->HSMHV2_tau_dVbsi = tau_dVbs ; here->HSMHV2_tau_dTi = tau_dT ; here->HSMHV2_taub = taub ; here->HSMHV2_taub_dVgsi = taub_dVgs ; here->HSMHV2_taub_dVdsi = taub_dVds ; here->HSMHV2_taub_dVbsi = taub_dVbs ; here->HSMHV2_taub_dTi = taub_dT ; here->HSMHV2_Xd = Qdrat; here->HSMHV2_Xd_dVgsi = Qdrat_dVgs ; here->HSMHV2_Xd_dVdsi = Qdrat_dVds ; here->HSMHV2_Xd_dVbsi = Qdrat_dVbs ; here->HSMHV2_Xd_dTi = Qdrat_dT ; here->HSMHV2_Qbulk = Mfactor * Qb ; here->HSMHV2_Qbulk_dVgsi = Mfactor * Qb_dVgs ; here->HSMHV2_Qbulk_dVdsi = Mfactor * Qb_dVds ; here->HSMHV2_Qbulk_dVbsi = Mfactor * Qb_dVbs ; here->HSMHV2_Qbulk_dTi = Mfactor * Qb_dT ; here->HSMHV2_Qi = Mfactor * Qi ; here->HSMHV2_Qi_dVgsi = Mfactor * Qi_dVgs ; here->HSMHV2_Qi_dVdsi = Mfactor * Qi_dVds ; here->HSMHV2_Qi_dVbsi = Mfactor * Qi_dVbs ; here->HSMHV2_Qi_dTi = Mfactor * Qi_dT ; } else { /* QS */ here->HSMHV2_qg = Mfactor * - (Qb + Qi) ; here->HSMHV2_qd = Mfactor * Qd ; here->HSMHV2_qs = Mfactor * ( Qi - Qd ) ; here->HSMHV2_qdp = 0.0 ; here->HSMHV2_qsp = 0.0 ; here->HSMHV2_dqdp_dVdse = 0.0 ; here->HSMHV2_dqdp_dVgse = 0.0 ; here->HSMHV2_dqdp_dVbse = 0.0 ; here->HSMHV2_dqdp_dTi = 0.0 ; here->HSMHV2_dqsp_dVdse = 0.0 ; here->HSMHV2_dqsp_dVgse = 0.0 ; here->HSMHV2_dqsp_dVbse = 0.0 ; here->HSMHV2_dqsp_dTi = 0.0 ; here->HSMHV2_qgext = 0.0 ; here->HSMHV2_qdext = 0.0 ; here->HSMHV2_qsext = 0.0 ; here->HSMHV2_dQdext_dVdse = 0.0 ; here->HSMHV2_dQdext_dVgse = 0.0 ; here->HSMHV2_dQdext_dVbse = 0.0 ; here->HSMHV2_dQdext_dTi = 0.0 ; here->HSMHV2_dQgext_dVdse = 0.0 ; here->HSMHV2_dQgext_dVgse = 0.0 ; here->HSMHV2_dQgext_dVbse = 0.0 ; here->HSMHV2_dQgext_dTi = 0.0 ; here->HSMHV2_dQbext_dVdse = 0.0 ; here->HSMHV2_dQbext_dVgse = 0.0 ; here->HSMHV2_dQbext_dVbse = 0.0 ; here->HSMHV2_dQbext_dTi = 0.0 ; here->HSMHV2_dQdi_dVdsi = Mfactor * Qd_dVds ; here->HSMHV2_dQdi_dVgsi = Mfactor * Qd_dVgs ; here->HSMHV2_dQdi_dVbsi = Mfactor * Qd_dVbs ; here->HSMHV2_dQdi_dTi = Mfactor * Qd_dT ; here->HSMHV2_dQg_dVdsi = Mfactor * ( - Qb_dVds - Qi_dVds ) ; here->HSMHV2_dQg_dVgsi = Mfactor * ( - Qb_dVgs - Qi_dVgs ) ; here->HSMHV2_dQg_dVbsi = Mfactor * ( - Qb_dVbs - Qi_dVbs ) ; here->HSMHV2_dQg_dTi = Mfactor * ( - Qb_dT - Qi_dT ) ; here->HSMHV2_dQb_dVdsi = Mfactor * Qb_dVds ; here->HSMHV2_dQb_dVgsi = Mfactor * Qb_dVgs ; here->HSMHV2_dQb_dVbsi = Mfactor * Qb_dVbs ; here->HSMHV2_dQb_dTi = Mfactor * Qb_dT ; } /*---------------------------------------------------* * Add S/D overlap charges/capacitances to intrinsic ones. * - NOTE: This function depends on coadov, a control option. *-----------------*/ if ( model->HSMHV2_coadov == 1 ) { here->HSMHV2_qg += Mfactor * ( Qgod + Qgos + Qgbo + Qy - Qovd - Qovs ) ; here->HSMHV2_qd += Mfactor * ( - Qgod - Qy + QbdLD ) ; here->HSMHV2_qs += Mfactor * ( - Qgos + QbsLD ) ; here->HSMHV2_qdp += Mfactor * ( - Qfd - Qgdo ) ; here->HSMHV2_qsp += Mfactor * ( - Qfs - Qgso ) ; here->HSMHV2_cddo = Mfactor * ( - Qgod_dVds - Qy_dVds + QbdLD_dVds ) ; here->HSMHV2_dQdi_dVdsi += here->HSMHV2_cddo ; here->HSMHV2_cdgo = Mfactor * ( - Qgod_dVgs - Qy_dVgs + QbdLD_dVgs ) ; here->HSMHV2_dQdi_dVgsi += here->HSMHV2_cdgo ; here->HSMHV2_cdbo = Mfactor * ( - Qgod_dVbs - Qy_dVbs + QbdLD_dVbs ) ; here->HSMHV2_dQdi_dVbsi += here->HSMHV2_cdbo ; here->HSMHV2_dQdi_dTi += Mfactor * ( - Qgod_dT - Qy_dT + QbdLD_dT ) ; here->HSMHV2_cgdo = Mfactor * ( Qgod_dVds + Qgos_dVds + Qgbo_dVds + Qy_dVds - Qovd_dVds - Qovs_dVds ) ; here->HSMHV2_dQg_dVdsi += here->HSMHV2_cgdo ; here->HSMHV2_cggo = Mfactor * ( Qgod_dVgs + Qgos_dVgs + Qgbo_dVgs + Qy_dVgs - Qovd_dVgs - Qovs_dVgs ) ; here->HSMHV2_dQg_dVgsi += here->HSMHV2_cggo ; here->HSMHV2_cgbo = Mfactor * ( Qgod_dVbs + Qgos_dVbs + Qgbo_dVbs + Qy_dVbs - Qovd_dVbs - Qovs_dVbs ) ; here->HSMHV2_dQg_dVbsi += here->HSMHV2_cgbo ; here->HSMHV2_dQg_dTi += Mfactor * ( Qgod_dT + Qgos_dT + Qgbo_dT + Qy_dT - Qovd_dT - Qovs_dT ) ; here->HSMHV2_cbdo = Mfactor * ( - Qgbo_dVds + QidLD_dVds + QisLD_dVds ) ; here->HSMHV2_dQb_dVdsi += here->HSMHV2_cbdo ; here->HSMHV2_cbgo = Mfactor * ( - Qgbo_dVgs + QidLD_dVgs + QisLD_dVgs ) ; here->HSMHV2_dQb_dVgsi += here->HSMHV2_cbgo ; here->HSMHV2_cbbo = Mfactor * ( - Qgbo_dVbs + QidLD_dVbs + QisLD_dVbs ) ; here->HSMHV2_dQb_dVbsi += here->HSMHV2_cbbo ; here->HSMHV2_dQb_dTi += Mfactor * ( - Qgbo_dT + QidLD_dT + QisLD_dT ) ; /* for fringing capacitances */ here->HSMHV2_dqdp_dVdse += Mfactor * ( Cfd - Qgdo_dVdse ) ; here->HSMHV2_dqdp_dVgse += Mfactor * ( - Cfd - Qgdo_dVgse ) ; here->HSMHV2_dqdp_dVbse += Mfactor * ( - Qgdo_dVbse ) ; here->HSMHV2_dqdp_dTi += 0.0 ; here->HSMHV2_dqsp_dVdse += Mfactor * ( - Qgso_dVdse ) ; here->HSMHV2_dqsp_dVgse += Mfactor * ( - Cfs - Qgso_dVgse ) ; here->HSMHV2_dqsp_dVbse += Mfactor * ( - Qgso_dVbse ) ; here->HSMHV2_dqsp_dTi += 0.0 ; here->HSMHV2_qgext += Mfactor * ( - Qovdext - Qovsext ) ; here->HSMHV2_qdext += Mfactor * QbdLDext ; here->HSMHV2_qsext += Mfactor * QbsLDext ; here->HSMHV2_dQdext_dVdse += Mfactor * ( QbdLDext_dVdse ) ; here->HSMHV2_dQdext_dVgse += Mfactor * ( QbdLDext_dVgse ) ; here->HSMHV2_dQdext_dVbse += Mfactor * ( QbdLDext_dVbse ) ; here->HSMHV2_dQdext_dTi += Mfactor * ( QbdLDext_dT ) ; here->HSMHV2_dQgext_dVdse += Mfactor * ( - Qovdext_dVdse - Qovsext_dVdse ) ; here->HSMHV2_dQgext_dVgse += Mfactor * ( - Qovdext_dVgse - Qovsext_dVgse ) ; here->HSMHV2_dQgext_dVbse += Mfactor * ( - Qovdext_dVbse - Qovsext_dVbse ) ; here->HSMHV2_dQgext_dTi += Mfactor * ( - Qovdext_dT - Qovsext_dT ) ; here->HSMHV2_dQbext_dVdse += Mfactor * ( QidLDext_dVdse + QisLDext_dVdse ) ; here->HSMHV2_dQbext_dVgse += Mfactor * ( QidLDext_dVgse + QisLDext_dVgse ) ; here->HSMHV2_dQbext_dVbse += Mfactor * ( QidLDext_dVbse + QisLDext_dVbse ) ; here->HSMHV2_dQbext_dTi += Mfactor * ( QidLDext_dT + QisLDext_dT ) ; } here->HSMHV2_dQsi_dVdsi = - (here->HSMHV2_dQdi_dVdsi + here->HSMHV2_dQg_dVdsi + here->HSMHV2_dQb_dVdsi) ; here->HSMHV2_dQsi_dVgsi = - (here->HSMHV2_dQdi_dVgsi + here->HSMHV2_dQg_dVgsi + here->HSMHV2_dQb_dVgsi) ; here->HSMHV2_dQsi_dVbsi = - (here->HSMHV2_dQdi_dVbsi + here->HSMHV2_dQg_dVbsi + here->HSMHV2_dQb_dVbsi) ; here->HSMHV2_dQsi_dTi = - (here->HSMHV2_dQdi_dTi + here->HSMHV2_dQg_dTi + here->HSMHV2_dQb_dTi ) ; here->HSMHV2_dQsext_dVdse = - (here->HSMHV2_dQdext_dVdse + here->HSMHV2_dQgext_dVdse + here->HSMHV2_dQbext_dVdse) ; here->HSMHV2_dQsext_dVgse = - (here->HSMHV2_dQdext_dVgse + here->HSMHV2_dQgext_dVgse + here->HSMHV2_dQbext_dVgse) ; here->HSMHV2_dQsext_dVbse = - (here->HSMHV2_dQdext_dVbse + here->HSMHV2_dQgext_dVbse + here->HSMHV2_dQbext_dVbse) ; here->HSMHV2_dQsext_dTi = - (here->HSMHV2_dQdext_dTi + here->HSMHV2_dQgext_dTi + here->HSMHV2_dQbext_dTi ) ; /*---------------------------------------------------* * Substrate/gate/leak currents. *-----------------*/ here->HSMHV2_isub = Mfactor * Isub ; here->HSMHV2_dIsub_dVdsi = Mfactor * Isub_dVds ; here->HSMHV2_dIsub_dVgsi = Mfactor * Isub_dVgs ; here->HSMHV2_dIsub_dVbsi = Mfactor * Isub_dVbs ; here->HSMHV2_dIsub_dTi = Mfactor * Isub_dT ; here->HSMHV2_isubld = Mfactor * IsubLD ; here->HSMHV2_dIsubLD_dVdsi = Mfactor * IsubLD_dVds ; here->HSMHV2_dIsubLD_dVgsi = Mfactor * IsubLD_dVgs ; here->HSMHV2_dIsubLD_dVbsi = Mfactor * IsubLD_dVbs ; here->HSMHV2_dIsubLD_dTi = Mfactor * IsubLD_dT ; here->HSMHV2_dIsubLD_dVddp = Mfactor * IsubLD_dVddp ; here->HSMHV2_igb = Mfactor * -Igb ; here->HSMHV2_dIgb_dVdsi = - Mfactor * Igb_dVds ; here->HSMHV2_dIgb_dVgsi = - Mfactor * Igb_dVgs ; here->HSMHV2_dIgb_dVbsi = - Mfactor * Igb_dVbs ; here->HSMHV2_dIgb_dTi = - Mfactor * Igb_dT ; if (here->HSMHV2_mode == HiSIM_NORMAL_MODE) { here->HSMHV2_igd = Mfactor * ( model->HSMHV2_glpart1 * Igate - Igd ) ; } else { here->HSMHV2_igd = Mfactor * ( (1.0e0 - model->HSMHV2_glpart1 ) * Igate - Igs ) ; } if (here->HSMHV2_mode == HiSIM_NORMAL_MODE) { here->HSMHV2_igs = Mfactor * ( (1.0e0 - model->HSMHV2_glpart1) * Igate - Igs ) ; } else { here->HSMHV2_igs = Mfactor * ( model->HSMHV2_glpart1 * Igate - Igd ) ; } /* note: here->HSMHV2_igd and here->HSMHV2_igs are already subjected to mode handling, while the following derivatives here->HSMHV2_dIgd_dVdsi, ... are not! */ here->HSMHV2_dIgd_dVdsi = Mfactor * ( model->HSMHV2_glpart1 * Igate_dVds - Igd_dVds ) ; here->HSMHV2_dIgd_dVgsi = Mfactor * ( model->HSMHV2_glpart1 * Igate_dVgs - Igd_dVgs ) ; here->HSMHV2_dIgd_dVbsi = Mfactor * ( model->HSMHV2_glpart1 * Igate_dVbs - Igd_dVbs ) ; here->HSMHV2_dIgd_dTi = Mfactor * ( model->HSMHV2_glpart1 * Igate_dT - Igd_dT ) ; here->HSMHV2_dIgs_dVdsi = Mfactor * ( (1.0 - model->HSMHV2_glpart1) * Igate_dVds - Igs_dVds ) ; here->HSMHV2_dIgs_dVgsi = Mfactor * ( (1.0 - model->HSMHV2_glpart1) * Igate_dVgs - Igs_dVgs ) ; here->HSMHV2_dIgs_dVbsi = Mfactor * ( (1.0 - model->HSMHV2_glpart1) * Igate_dVbs - Igs_dVbs ) ; here->HSMHV2_dIgs_dTi = Mfactor * ( (1.0 - model->HSMHV2_glpart1) * Igate_dT - Igs_dT ) ; here->HSMHV2_igidl = Mfactor * Igidl ; here->HSMHV2_dIgidl_dVdsi = Mfactor * Igidl_dVds ; here->HSMHV2_dIgidl_dVgsi = Mfactor * Igidl_dVgs ; here->HSMHV2_dIgidl_dVbsi = Mfactor * Igidl_dVbs ; here->HSMHV2_dIgidl_dTi = Mfactor * Igidl_dT ; here->HSMHV2_igisl = Mfactor * Igisl ; here->HSMHV2_dIgisl_dVdsi = Mfactor * Igisl_dVds ; here->HSMHV2_dIgisl_dVgsi = Mfactor * Igisl_dVgs ; here->HSMHV2_dIgisl_dVbsi = Mfactor * Igisl_dVbs ; here->HSMHV2_dIgisl_dTi = Mfactor * Igisl_dT ; /*---------------------------------------------------* * Von, Vdsat. *-----------------*/ here->HSMHV2_von = Vth ; here->HSMHV2_vdsat = Vdsat ; /*-----------------------------------------------------------* * Warn floating-point exceptions. * - Function finite() in libm is called. * - Go to start with info==5. *-----------------*/ T1 = here->HSMHV2_ids + here->HSMHV2_dIds_dVdsi + here->HSMHV2_dIds_dVgsi + here->HSMHV2_dIds_dVbsi ; T1 = T1 + here->HSMHV2_qd - (here->HSMHV2_dQdi_dVdsi + here->HSMHV2_dQdi_dVgsi + here->HSMHV2_dQdi_dVbsi) ; if ( ! finite (T1) ) { flg_err = 1 ; fprintf (stderr , "*** warning(HiSIM_HV(%s)): FP-exception (PART-1)\n", model->HSMHV2modName ) ; if ( flg_info >= 1 ) { printf ( "*** warning(HiSIM_HV(%s)): FP-exception\n", model->HSMHV2modName) ; printf ( "Ids = %e\n" , here->HSMHV2_ids ) ; printf ( "Gmbs = %e\n" , here->HSMHV2_dIds_dVbsi ) ; printf ( "Gds = %e\n" , here->HSMHV2_dIds_dVdsi ) ; printf ( "Gm = %e\n" , here->HSMHV2_dIds_dVgsi ) ; printf ( "Qd = %e\n" , here->HSMHV2_qd ) ; printf ( "Cds = %e\n" , -(here->HSMHV2_dQdi_dVdsi + here->HSMHV2_dQdi_dVgsi + here->HSMHV2_dQdi_dVbsi) ) ; } } T1 = here->HSMHV2_isub + here->HSMHV2_dIsub_dVbsi + here->HSMHV2_dIsub_dVdsi + here->HSMHV2_dIsub_dVgsi ; if ( ! finite (T1) ) { flg_err = 1 ; fprintf (stderr , "*** warning(HiSIM_HV(%s)): FP-exception (PART-2)\n", model->HSMHV2modName) ; if ( flg_info >= 1 ) { printf ("*** warning(HiSIM_HV(%s)): FP-exception\n", model->HSMHV2modName) ; } } T1 = here->HSMHV2_dQg_dVdsi + here->HSMHV2_dQg_dVgsi + here->HSMHV2_dQg_dVbsi ; if ( ! finite (T1) ) { flg_err = 1 ; fprintf(stderr , "*** warning(HiSIM_HV(%s)): FP-exception (PART-3)\n", model->HSMHV2modName) ; if ( flg_info >= 1 ) { printf ("*** warning(HiSIM_HV(%s)): FP-exception\n", model->HSMHV2modName) ; } } /*-----------------------------------------------------------* * Exit for error case. *-----------------*/ if ( flg_err != 0 ) { fprintf (stderr , "----- bias information (HiSIM_HV)\n") ; fprintf (stderr , "name: %s\n" , here->HSMHV2name ) ; fprintf (stderr , "states: %d\n" , here->HSMHV2states ) ; fprintf (stderr , "Vdse= %.3e Vgse=%.3e Vbse=%.3e\n" , Vdse , Vgse , Vbse ) ; fprintf (stderr , "Vdsi= %.3e Vgsi=%.3e Vbsi=%.3e\n" , Vds , Vgs , Vbs ) ; fprintf (stderr , "vbs_jct= %12.5e vbd_jct= %12.5e\n" , vbs_jct , vbd_jct ) ; fprintf (stderr , "vd= %.3e vs= %.3e vdp= %.3e vgp= %.3e vbp= %.3e vsp= %.3e\n" , *( ckt->CKTrhsOld + here->HSMHV2dNode ) , *( ckt->CKTrhsOld + here->HSMHV2sNode ) , *( ckt->CKTrhsOld + here->HSMHV2dNodePrime ) , *( ckt->CKTrhsOld + here->HSMHV2gNodePrime ) , *( ckt->CKTrhsOld + here->HSMHV2bNodePrime ) , *( ckt->CKTrhsOld + here->HSMHV2sNodePrime ) ) ; fprintf (stderr , "----- bias information (end)\n" ) ; return ( HiSIM_ERROR ) ; } /*-----------------------------------------------------------* * Noise. *-----------------*/ here->HSMHV2_noiflick = Mfactor * Nflic ; here->HSMHV2_noithrml = Mfactor * Nthrml ; /*----------------------------------------------------------* * induced gate noise. ( Part 3/3 ) *----------------------*/ if ( model->HSMHV2_coign != 0 && model->HSMHV2_cothrml != 0 && flg_ign == 1 && !flg_noqi && model->HSMHV2_codep==0 ) { T0 = Cox_small * Cox * here->HSMHV2_weff_nf * Leff ; T1 = -( here->HSMHV2_dQg_dVdsi + here->HSMHV2_dQg_dVgsi + here->HSMHV2_dQg_dVbsi ) / Mfactor ; /* NQS case is not supported. */ if( - T1 > T0 ){ Nign0 = c_16o135 * C_QE * beta_inv * T1 * T1 / gds0_ign ; if ( kusai00L > epsm10 && Vds > epsm10 ) { MuModA = Muun / Mu ; MuModB = ( Muun / Mud_hoso - MuModA ) / Vds ; correct_w1 = MuModA + C_2o3 * MuModB * ( kusai00 + VgVt * sqrtkusaiL + kusaiL ) / ( VgVt + sqrtkusaiL ) ; } else { correct_w1 = Muun / Mud_hoso ; } here->HSMHV2_noiigate = Mfactor * Nign0 * kusai_ig * correct_w1 ; here->HSMHV2_noicross = crl_f ; if ( here->HSMHV2_noiigate < 0.0 ) here->HSMHV2_noiigate = 0.0e0 ; }else{ here->HSMHV2_noiigate = 0.0e0 ; here->HSMHV2_noicross = 0.0e0 ; } }else{ here->HSMHV2_noiigate = 0.0e0 ; here->HSMHV2_noicross = 0.0e0 ; } /*-----------------------------------------------------------* * Store values for next calculation. *-----------------*/ /* Internal biases */ if ( here->HSMHV2_called >= 1 ) { here->HSMHV2_vbsc_prv2 = here->HSMHV2_vbsc_prv ; here->HSMHV2_vdsc_prv2 = here->HSMHV2_vdsc_prv ; here->HSMHV2_vgsc_prv2 = here->HSMHV2_vgsc_prv ; here->HSMHV2_mode_prv2 = here->HSMHV2_mode_prv ; } here->HSMHV2_vbsc_prv = Vbs ; here->HSMHV2_vdsc_prv = Vds ; here->HSMHV2_vgsc_prv = Vgs ; here->HSMHV2_mode_prv = here->HSMHV2_mode ; here->HSMHV2_temp_prv = TTEMP ; /* Surface potentials and derivatives w.r.t. internal biases */ if ( here->HSMHV2_called >= 1 ) { here->HSMHV2_ps0_prv2 = here->HSMHV2_ps0_prv ; here->HSMHV2_ps0_dvbs_prv2 = here->HSMHV2_ps0_dvbs_prv ; here->HSMHV2_ps0_dvds_prv2 = here->HSMHV2_ps0_dvds_prv ; here->HSMHV2_ps0_dvgs_prv2 = here->HSMHV2_ps0_dvgs_prv ; here->HSMHV2_pds_prv2 = here->HSMHV2_pds_prv ; here->HSMHV2_pds_dvbs_prv2 = here->HSMHV2_pds_dvbs_prv ; here->HSMHV2_pds_dvds_prv2 = here->HSMHV2_pds_dvds_prv ; here->HSMHV2_pds_dvgs_prv2 = here->HSMHV2_pds_dvgs_prv ; } here->HSMHV2_ps0_prv = Ps0 ; here->HSMHV2_ps0_dvbs_prv = Ps0_dVbs ; here->HSMHV2_ps0_dvds_prv = Ps0_dVds ; here->HSMHV2_ps0_dvgs_prv = Ps0_dVgs ; here->HSMHV2_ps0_dtemp_prv = Ps0_dT ; here->HSMHV2_pds_prv = Pds ; here->HSMHV2_pds_dvbs_prv = Pds_dVbs ; here->HSMHV2_pds_dvds_prv = Pds_dVds ; here->HSMHV2_pds_dvgs_prv = Pds_dVgs ; here->HSMHV2_pds_dtemp_prv = Pds_dT ; /* derivatives of channel current w.r.t. external bias (only due to Ra-dependencies!) */ here->HSMHV2_dIds_dVdse = Ids_dRa * Ra_dVdse * Mfactor ; here->HSMHV2_dIds_dVgse = Ids_dRa * Ra_dVgse * Mfactor ; here->HSMHV2_dIds_dVbse = Ids_dRa * Ra_dVbse * Mfactor ; if ( VdseModeNML > 0.0 ) { here->HSMHV2_Rd = Rd / Mfactor ; here->HSMHV2_dRd_dVdse = Rd_dVdse / Mfactor ; here->HSMHV2_dRd_dVgse = Rd_dVgse / Mfactor ; here->HSMHV2_dRd_dVbse = Rd_dVbse / Mfactor ; here->HSMHV2_dRd_dVsubs = Rd_dVsubs / Mfactor ; here->HSMHV2_dRd_dTi = Rd_dT / Mfactor ; here->HSMHV2_Rs = Rs / Mfactor ; here->HSMHV2_dRs_dVdse = Rs_dVdse / Mfactor ; here->HSMHV2_dRs_dVgse = Rs_dVgse / Mfactor ; here->HSMHV2_dRs_dVbse = Rs_dVbse / Mfactor ; here->HSMHV2_dRs_dVsubs = Rs_dVsubs / Mfactor ; here->HSMHV2_dRs_dTi = Rs_dT / Mfactor ; } else { here->HSMHV2_Rd = Rs / Mfactor ; here->HSMHV2_dRd_dVdse = - ( Rs_dVdse + Rs_dVgse + Rs_dVbse + Rs_dVsubs ) / Mfactor ; here->HSMHV2_dRd_dVgse = Rs_dVgse / Mfactor ; here->HSMHV2_dRd_dVbse = Rs_dVbse / Mfactor ; here->HSMHV2_dRd_dVsubs = Rs_dVsubs / Mfactor ; here->HSMHV2_dRd_dTi = Rs_dT / Mfactor ; here->HSMHV2_Rs = Rd / Mfactor ; here->HSMHV2_dRs_dVdse = - ( Rd_dVdse + Rd_dVgse + Rd_dVbse + Rd_dVsubs ) / Mfactor ; here->HSMHV2_dRs_dVgse = Rd_dVgse / Mfactor ; here->HSMHV2_dRs_dVbse = Rd_dVbse / Mfactor ; here->HSMHV2_dRs_dVsubs = Rd_dVsubs / Mfactor ; here->HSMHV2_dRs_dTi = Rd_dT / Mfactor ; } /* Clamping to Res_min */ if(here->HSMHV2_Rd < Res_min) { here->HSMHV2_Rd = Res_min ; here->HSMHV2_dRd_dVdse = 0.0 ; here->HSMHV2_dRd_dVgse = 0.0 ; here->HSMHV2_dRd_dVbse = 0.0 ; here->HSMHV2_dRd_dVsubs = 0.0 ; here->HSMHV2_dRd_dTi = 0.0 ; } if(here->HSMHV2_Rs < Res_min) { here->HSMHV2_Rs = Res_min ; here->HSMHV2_dRs_dVdse = 0.0 ; here->HSMHV2_dRs_dVgse = 0.0 ; here->HSMHV2_dRs_dVbse = 0.0 ; here->HSMHV2_dRs_dVsubs = 0.0 ; here->HSMHV2_dRs_dTi = 0.0 ; } /*-----------------------------------------------------------* * End of PART-7. (label) *-----------------*/ /* end_of_part_7: */ /*-----------------------------------------------------------* * Bottom of hsmhveval. *-----------------*/ return ( HiSIM_OK ) ; } /* end of hsmhveval */ tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2evalenv.h0000644000175000017500000001064713546075722023665 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhvevalenv.h DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ #ifndef HSMHV2_EVAL_ENV_H #define HSMHV2_EVAL_ENV_H /* macros and constants used in hsmhveval2yz.c */ /*---------------------------------------------------* * Numerical constants. (macro) *-----------------*/ /* machine epsilon */ #if defined(_FLOAT_H) && defined(DBL_EPSILON) #define C_EPS_M (DBL_EPSILON) #else #define C_EPS_M (2.2204460492503131e-16) #endif #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THR 34.0 /* sqrt(2) */ #define C_SQRT_2 (1.414213562373095e+00) /* 1/3 */ #define C_1o3 (3.333333333333333e-01) /* 2/3 */ #define C_2o3 (6.666666666666667e-01) /* 2^(1/3) */ #define C_2p_1o3 (1.259921049894873e+00) /* Pi */ #define C_Pi (3.141592653589793) #define C_Pio2 (1.570796326794897) /* Unit change */ #define C_m2cm_p2 (1.0e4) #define C_m2um (1.0e6) /*---------------------------------------------------* * Physical constants/properties. (macro) *-----------------*/ /* Elemental charge */ #define C_QE (1.6021918e-19) /* Boltzmann constant */ #define C_KB (1.3806226e-23) /* Permitivity of Si, SiO2 and vacuum */ #define C_ESI (1.034943e-10) #define C_EOX (3.453133e-11) #define C_VAC (8.8541878e-12) /* Room temperature constants */ #define C_T300 (300e+00) #define C_b300 (3.868283e+01) /* #define C_Eg0 (1.1785e0) */ /*changed to parameter sIN.eg0*/ /* Build-in potential */ /*#define C_Vbi (1.0e0)*/ /* changed to parameter sIN.vbi */ /* Intrinsic carrier density at 300K */ #define C_Nin0 (1.04e+16) /*---------------------------------------------------* * Functions. (macro) Take care of the arguments. *-----------------*/ #define Fn_Sqr(x) ( (x)*(x) ) /* x^2 */ #define Fn_Max(x,y) ( (x) >= (y) ? (x) : (y) ) /* max[x,y] */ #define Fn_Min(x,y) ( (x) <= (y) ? (x) : (y) ) /* min[x,y] */ #define Fn_Sgn(x) ( (x) >= 0 ? (1) : (-1) ) /* sign[x] */ /*===========================================================* * pow *=================*/ #ifdef POW_TO_EXP_AND_LOG #define Fn_Pow( x , y ) exp( (y) * log( x ) ) #else #define Fn_Pow( x , y ) pow( x , y ) #endif #endif /* HSMHV2_EVAL_ENV_H */ tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2soachk.c0000644000175000017500000003627513546075722023475 0ustar carstencarsten/********** Copyright 2013 Dietmar Warning. All rights reserved. Author: 2013 Dietmar Warning **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "hsmhv2def.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/cpdefs.h" int HSMHV2soaCheck(CKTcircuit *ckt, GENmodel *inModel) { HSMHV2model *model = (HSMHV2model *) inModel; HSMHV2instance *here; double vgs, vgd, vgb, vds, vbs, vbd; /* actual mos voltages */ int maxwarns; static int warns_vgs = 0, warns_vgd = 0, warns_vgb = 0, warns_vds = 0, warns_vbs = 0, warns_vbd = 0; if (!ckt) { warns_vgs = 0; warns_vgd = 0; warns_vgb = 0; warns_vds = 0; warns_vbs = 0; warns_vbd = 0; return OK; } maxwarns = ckt->CKTsoaMaxWarns; for (; model; model = HSMHV2nextModel(model)) { for (here = HSMHV2instances(model); here; here = HSMHV2nextInstance(here)) { vgs = ckt->CKTrhsOld [here->HSMHV2gNode] - ckt->CKTrhsOld [here->HSMHV2sNodePrime]; vgd = ckt->CKTrhsOld [here->HSMHV2gNode] - ckt->CKTrhsOld [here->HSMHV2dNodePrime]; vgb = ckt->CKTrhsOld [here->HSMHV2gNode] - ckt->CKTrhsOld [here->HSMHV2bNodePrime]; vds = ckt->CKTrhsOld [here->HSMHV2dNode] - ckt->CKTrhsOld [here->HSMHV2sNodePrime]; vbs = ckt->CKTrhsOld [here->HSMHV2bNode] - ckt->CKTrhsOld [here->HSMHV2sNodePrime]; vbd = ckt->CKTrhsOld [here->HSMHV2bNode] - ckt->CKTrhsOld [here->HSMHV2dNodePrime]; if (!model->HSMHV2vgsrMaxGiven) { if (fabs(vgs) > model->HSMHV2vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->HSMHV2vgsMax); warns_vgs++; } if (!model->HSMHV2vgbMaxGiven) { if (fabs(vgb) > model->HSMHV2vgsMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgs_max=%g\n", vgb, model->HSMHV2vgsMax); warns_vgb++; } } else { if (fabs(vgb) > model->HSMHV2vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->HSMHV2vgbMax); warns_vgb++; } } } else { if (model->HSMHV2_type > 0) { if (vgs > model->HSMHV2vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->HSMHV2vgsMax); warns_vgs++; } if (-1*vgs > model->HSMHV2vgsrMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgsr_max=%g\n", vgs, model->HSMHV2vgsrMax); warns_vgs++; } } else { if (vgs > model->HSMHV2vgsrMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgsr_max=%g\n", vgs, model->HSMHV2vgsrMax); warns_vgs++; } if (-1*vgs > model->HSMHV2vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->HSMHV2vgsMax); warns_vgs++; } } } if (!model->HSMHV2vgdrMaxGiven) { if (fabs(vgd) > model->HSMHV2vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->HSMHV2vgdMax); warns_vgd++; } } else { if (model->HSMHV2_type > 0) { if (vgd > model->HSMHV2vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->HSMHV2vgdMax); warns_vgd++; } if (-1*vgd > model->HSMHV2vgdrMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgdr_max=%g\n", vgd, model->HSMHV2vgdrMax); warns_vgd++; } } else { if (vgd > model->HSMHV2vgdrMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgdr_max=%g\n", vgd, model->HSMHV2vgdrMax); warns_vgd++; } if (-1*vgd > model->HSMHV2vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->HSMHV2vgdMax); warns_vgd++; } } } if (fabs(vds) > model->HSMHV2vdsMax) if (warns_vds < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vds=%g has exceeded Vds_max=%g\n", vds, model->HSMHV2vdsMax); warns_vds++; } if (!model->HSMHV2vgbrMaxGiven) { if (fabs(vgb) > model->HSMHV2vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->HSMHV2vgbMax); warns_vgb++; } } else { if (model->HSMHV2_type > 0) { if (vgb > model->HSMHV2vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->HSMHV2vgbMax); warns_vgb++; } if (-1*vgb > model->HSMHV2vgbrMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgbr_max=%g\n", vgb, model->HSMHV2vgbrMax); warns_vgb++; } } else { if (vgb > model->HSMHV2vgbrMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgbr_max=%g\n", vgb, model->HSMHV2vgbrMax); warns_vgb++; } if (-1*vgb > model->HSMHV2vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->HSMHV2vgbMax); warns_vgb++; } } } if (!model->HSMHV2vbsrMaxGiven) { if (!model->HSMHV2vbsMaxGiven) { if (fabs(vbs) > model->HSMHV2vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->HSMHV2vbdMax); warns_vbs++; } } else { if (fabs(vbs) > model->HSMHV2vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->HSMHV2vbsMax); warns_vbs++; } } } else { if (!model->HSMHV2vbsMaxGiven) { if (model->HSMHV2_type > 0) { if (vbs > model->HSMHV2vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->HSMHV2vbdMax); warns_vbs++; } if (-1*vbs > model->HSMHV2vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->HSMHV2vbsrMax); warns_vbs++; } } else { if (vbs > model->HSMHV2vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->HSMHV2vbsrMax); warns_vbs++; } if (-1*vbs > model->HSMHV2vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->HSMHV2vbdMax); warns_vbs++; } } } else { if (model->HSMHV2_type > 0) { if (vbs > model->HSMHV2vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->HSMHV2vbsMax); warns_vbs++; } if (-1*vbs > model->HSMHV2vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->HSMHV2vbsrMax); warns_vbs++; } } else { if (vbs > model->HSMHV2vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->HSMHV2vbsrMax); warns_vbs++; } if (-1*vbs > model->HSMHV2vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->HSMHV2vbsMax); warns_vbs++; } } } } if (!model->HSMHV2vbdrMaxGiven) { if (fabs(vbd) > model->HSMHV2vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->HSMHV2vbdMax); warns_vbd++; } } else { if (model->HSMHV2_type > 0) { if (vbd > model->HSMHV2vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->HSMHV2vbdMax); warns_vbd++; } if (-1*vbd > model->HSMHV2vbdrMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbdr_max=%g\n", vbd, model->HSMHV2vbdrMax); warns_vbd++; } } else { if (vbd > model->HSMHV2vbdrMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbdr_max=%g\n", vbd, model->HSMHV2vbdrMax); warns_vbd++; } if (-1*vbd > model->HSMHV2vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->HSMHV2vbdMax); warns_vbd++; } } } } } return OK; } tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2getic.c0000644000175000017500000000651013546075722023305 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhvgetic.c DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "hsmhv2def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HSMHV2getic( GENmodel *inModel, CKTcircuit *ckt) { HSMHV2model *model = (HSMHV2model*)inModel; HSMHV2instance *here; /* * grab initial conditions out of rhs array. User specified, so use * external nodes to get values */ for ( ;model ;model = HSMHV2nextModel(model)) { for ( here = HSMHV2instances(model); here ;here = HSMHV2nextInstance(here)) { if (!here->HSMHV2_icVBS_Given) { here->HSMHV2_icVBS = *(ckt->CKTrhs + here->HSMHV2bNode) - *(ckt->CKTrhs + here->HSMHV2sNode); } if (!here->HSMHV2_icVDS_Given) { here->HSMHV2_icVDS = *(ckt->CKTrhs + here->HSMHV2dNode) - *(ckt->CKTrhs + here->HSMHV2sNode); } if (!here->HSMHV2_icVGS_Given) { here->HSMHV2_icVGS = *(ckt->CKTrhs + here->HSMHV2gNode) - *(ckt->CKTrhs + here->HSMHV2sNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2mpar.c0000644000175000017500000025025213546075722023155 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhvmpar.c DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ #include "ngspice/ngspice.h" #include "hsmhv2def.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HSMHV2mParam( int param, IFvalue *value, GENmodel *inMod) { HSMHV2model *mod = (HSMHV2model*)inMod; switch (param) { case HSMHV2_MOD_NMOS : if (value->iValue) { mod->HSMHV2_type = 1; mod->HSMHV2_type_Given = TRUE; } break; case HSMHV2_MOD_PMOS : if (value->iValue) { mod->HSMHV2_type = - 1; mod->HSMHV2_type_Given = TRUE; } break; case HSMHV2_MOD_LEVEL: mod->HSMHV2_level = value->iValue; mod->HSMHV2_level_Given = TRUE; break; case HSMHV2_MOD_INFO: mod->HSMHV2_info = value->iValue; mod->HSMHV2_info_Given = TRUE; break; case HSMHV2_MOD_NOISE: mod->HSMHV2_noise = value->iValue; mod->HSMHV2_noise_Given = TRUE; break; case HSMHV2_MOD_VERSION: mod->HSMHV2_version = value->sValue; mod->HSMHV2_version_Given = TRUE; break; case HSMHV2_MOD_SHOW: mod->HSMHV2_show = value->iValue; mod->HSMHV2_show_Given = TRUE; break; case HSMHV2_MOD_CORSRD: mod->HSMHV2_corsrd = value->iValue; mod->HSMHV2_corsrd_Given = TRUE; break; case HSMHV2_MOD_CORG: mod->HSMHV2_corg = value->iValue; mod->HSMHV2_corg_Given = TRUE; break; case HSMHV2_MOD_COIPRV: mod->HSMHV2_coiprv = value->iValue; mod->HSMHV2_coiprv_Given = TRUE; break; case HSMHV2_MOD_COPPRV: mod->HSMHV2_copprv = value->iValue; mod->HSMHV2_copprv_Given = TRUE; break; case HSMHV2_MOD_COADOV: mod->HSMHV2_coadov = value->iValue; mod->HSMHV2_coadov_Given = TRUE; break; case HSMHV2_MOD_COISUB: mod->HSMHV2_coisub = value->iValue; mod->HSMHV2_coisub_Given = TRUE; break; case HSMHV2_MOD_COIIGS: mod->HSMHV2_coiigs = value->iValue; mod->HSMHV2_coiigs_Given = TRUE; break; case HSMHV2_MOD_COGIDL: mod->HSMHV2_cogidl = value->iValue; mod->HSMHV2_cogidl_Given = TRUE; break; case HSMHV2_MOD_COOVLP: mod->HSMHV2_coovlp = value->iValue; mod->HSMHV2_coovlp_Given = TRUE; break; case HSMHV2_MOD_COOVLPS: mod->HSMHV2_coovlps = value->iValue; mod->HSMHV2_coovlps_Given = TRUE; break; case HSMHV2_MOD_COFLICK: mod->HSMHV2_coflick = value->iValue; mod->HSMHV2_coflick_Given = TRUE; break; case HSMHV2_MOD_COISTI: mod->HSMHV2_coisti = value->iValue; mod->HSMHV2_coisti_Given = TRUE; break; case HSMHV2_MOD_CONQS: /* HiSIMHV */ mod->HSMHV2_conqs = value->iValue; mod->HSMHV2_conqs_Given = TRUE; break; case HSMHV2_MOD_CORBNET: mod->HSMHV2_corbnet = value->iValue; mod->HSMHV2_corbnet_Given = TRUE; break; case HSMHV2_MOD_COTHRML: mod->HSMHV2_cothrml = value->iValue; mod->HSMHV2_cothrml_Given = TRUE; break; case HSMHV2_MOD_COIGN: mod->HSMHV2_coign = value->iValue; mod->HSMHV2_coign_Given = TRUE; break; case HSMHV2_MOD_CODFM: mod->HSMHV2_codfm = value->iValue; mod->HSMHV2_codfm_Given = TRUE; break; case HSMHV2_MOD_COQOVSM: mod->HSMHV2_coqovsm = value->iValue; mod->HSMHV2_coqovsm_Given = TRUE; break; case HSMHV2_MOD_COSELFHEAT: /* Self-heating model */ mod->HSMHV2_coselfheat = value->iValue; mod->HSMHV2_coselfheat_Given = TRUE; break; case HSMHV2_MOD_COSUBNODE: mod->HSMHV2_cosubnode = value->iValue; mod->HSMHV2_cosubnode_Given = TRUE; break; case HSMHV2_MOD_COSYM: /* Symmetry model for HV */ mod->HSMHV2_cosym = value->iValue; mod->HSMHV2_cosym_Given = TRUE; break; case HSMHV2_MOD_COTEMP: mod->HSMHV2_cotemp = value->iValue; mod->HSMHV2_cotemp_Given = TRUE; break; case HSMHV2_MOD_COLDRIFT: mod->HSMHV2_coldrift = value->iValue; mod->HSMHV2_coldrift_Given = TRUE; break; case HSMHV2_MOD_CORDRIFT: mod->HSMHV2_cordrift = value->iValue; mod->HSMHV2_cordrift_Given = TRUE; break; case HSMHV2_MOD_COERRREP: mod->HSMHV2_coerrrep = value->iValue; mod->HSMHV2_coerrrep_Given = TRUE; break; case HSMHV2_MOD_CODEP: mod->HSMHV2_codep = value->iValue; mod->HSMHV2_codep_Given = TRUE; break; case HSMHV2_MOD_CODDLT: mod->HSMHV2_coddlt = value->iValue; mod->HSMHV2_coddlt_Given = TRUE; break; case HSMHV2_MOD_VMAX: mod->HSMHV2_vmax = value->rValue; mod->HSMHV2_vmax_Given = TRUE; break; case HSMHV2_MOD_VMAXT1: mod->HSMHV2_vmaxt1 = value->rValue; mod->HSMHV2_vmaxt1_Given = TRUE; break; case HSMHV2_MOD_VMAXT2: mod->HSMHV2_vmaxt2 = value->rValue; mod->HSMHV2_vmaxt2_Given = TRUE; break; case HSMHV2_MOD_BGTMP1: mod->HSMHV2_bgtmp1 = value->rValue; mod->HSMHV2_bgtmp1_Given = TRUE; break; case HSMHV2_MOD_BGTMP2: mod->HSMHV2_bgtmp2 = value->rValue; mod->HSMHV2_bgtmp2_Given = TRUE; break; case HSMHV2_MOD_EG0: mod->HSMHV2_eg0 = value->rValue; mod->HSMHV2_eg0_Given = TRUE; break; case HSMHV2_MOD_TOX: mod->HSMHV2_tox = value->rValue; mod->HSMHV2_tox_Given = TRUE; break; case HSMHV2_MOD_XLD: mod->HSMHV2_xld = value->rValue; mod->HSMHV2_xld_Given = TRUE; break; case HSMHV2_MOD_LOVER: mod->HSMHV2_lover = value->rValue; mod->HSMHV2_lover_Given = TRUE; break; case HSMHV2_MOD_LOVERS: mod->HSMHV2_lovers = value->rValue; mod->HSMHV2_lovers_Given = TRUE; break; case HSMHV2_MOD_RDOV11: mod->HSMHV2_rdov11 = value->rValue; mod->HSMHV2_rdov11_Given = TRUE; break; case HSMHV2_MOD_RDOV12: mod->HSMHV2_rdov12 = value->rValue; mod->HSMHV2_rdov12_Given = TRUE; break; case HSMHV2_MOD_RDOV13: mod->HSMHV2_rdov13 = value->rValue; mod->HSMHV2_rdov13_Given = TRUE; break; case HSMHV2_MOD_RDSLP1: mod->HSMHV2_rdslp1 = value->rValue; mod->HSMHV2_rdslp1_Given = TRUE; break; case HSMHV2_MOD_RDICT1: mod->HSMHV2_rdict1= value->rValue; mod->HSMHV2_rdict1_Given = TRUE; break; case HSMHV2_MOD_RDSLP2: mod->HSMHV2_rdslp2 = value->rValue; mod->HSMHV2_rdslp2_Given = TRUE; break; case HSMHV2_MOD_RDICT2: mod->HSMHV2_rdict2 = value->rValue; mod->HSMHV2_rdict2_Given = TRUE; break; case HSMHV2_MOD_LOVERLD: mod->HSMHV2_loverld = value->rValue; mod->HSMHV2_loverld_Given = TRUE; break; case HSMHV2_MOD_LDRIFT1: mod->HSMHV2_ldrift1 = value->rValue; mod->HSMHV2_ldrift1_Given = TRUE; break; case HSMHV2_MOD_LDRIFT2: mod->HSMHV2_ldrift2 = value->rValue; mod->HSMHV2_ldrift2_Given = TRUE; break; case HSMHV2_MOD_LDRIFT1S: mod->HSMHV2_ldrift1s = value->rValue; mod->HSMHV2_ldrift1s_Given = TRUE; break; case HSMHV2_MOD_LDRIFT2S: mod->HSMHV2_ldrift2s = value->rValue; mod->HSMHV2_ldrift2s_Given = TRUE; break; case HSMHV2_MOD_SUBLD1: mod->HSMHV2_subld1 = value->rValue; mod->HSMHV2_subld1_Given = TRUE; break; case HSMHV2_MOD_SUBLD1L: mod->HSMHV2_subld1l = value->rValue; mod->HSMHV2_subld1l_Given = TRUE; break; case HSMHV2_MOD_SUBLD1LP: mod->HSMHV2_subld1lp = value->rValue; mod->HSMHV2_subld1lp_Given = TRUE; break; case HSMHV2_MOD_SUBLD2: mod->HSMHV2_subld2 = value->rValue; mod->HSMHV2_subld2_Given = TRUE; break; case HSMHV2_MOD_XPDV: mod->HSMHV2_xpdv = value->rValue; mod->HSMHV2_xpdv_Given = TRUE; break; case HSMHV2_MOD_XPVDTH: mod->HSMHV2_xpvdth = value->rValue; mod->HSMHV2_xpvdth_Given = TRUE; break; case HSMHV2_MOD_XPVDTHG: mod->HSMHV2_xpvdthg = value->rValue; mod->HSMHV2_xpvdthg_Given = TRUE; break; case HSMHV2_MOD_DDLTMAX: /* Vdseff */ mod->HSMHV2_ddltmax = value->rValue; mod->HSMHV2_ddltmax_Given = TRUE; break; case HSMHV2_MOD_DDLTSLP: /* Vdseff */ mod->HSMHV2_ddltslp = value->rValue; mod->HSMHV2_ddltslp_Given = TRUE; break; case HSMHV2_MOD_DDLTICT: /* Vdseff */ mod->HSMHV2_ddltict = value->rValue; mod->HSMHV2_ddltict_Given = TRUE; break; case HSMHV2_MOD_VFBOVER: mod->HSMHV2_vfbover = value->rValue; mod->HSMHV2_vfbover_Given = TRUE; break; case HSMHV2_MOD_NOVER: mod->HSMHV2_nover = value->rValue; mod->HSMHV2_nover_Given = TRUE; break; case HSMHV2_MOD_NOVERS: mod->HSMHV2_novers = value->rValue; mod->HSMHV2_novers_Given = TRUE; break; case HSMHV2_MOD_XWD: mod->HSMHV2_xwd = value->rValue; mod->HSMHV2_xwd_Given = TRUE; break; case HSMHV2_MOD_XWDC: mod->HSMHV2_xwdc = value->rValue; mod->HSMHV2_xwdc_Given = TRUE; break; case HSMHV2_MOD_XL: mod->HSMHV2_xl = value->rValue; mod->HSMHV2_xl_Given = TRUE; break; case HSMHV2_MOD_XW: mod->HSMHV2_xw = value->rValue; mod->HSMHV2_xw_Given = TRUE; break; case HSMHV2_MOD_SAREF: mod->HSMHV2_saref = value->rValue; mod->HSMHV2_saref_Given = TRUE; break; case HSMHV2_MOD_SBREF: mod->HSMHV2_sbref = value->rValue; mod->HSMHV2_sbref_Given = TRUE; break; case HSMHV2_MOD_LL: mod->HSMHV2_ll = value->rValue; mod->HSMHV2_ll_Given = TRUE; break; case HSMHV2_MOD_LLD: mod->HSMHV2_lld = value->rValue; mod->HSMHV2_lld_Given = TRUE; break; case HSMHV2_MOD_LLN: mod->HSMHV2_lln = value->rValue; mod->HSMHV2_lln_Given = TRUE; break; case HSMHV2_MOD_WL: mod->HSMHV2_wl = value->rValue; mod->HSMHV2_wl_Given = TRUE; break; case HSMHV2_MOD_WL1: mod->HSMHV2_wl1 = value->rValue; mod->HSMHV2_wl1_Given = TRUE; break; case HSMHV2_MOD_WL1P: mod->HSMHV2_wl1p = value->rValue; mod->HSMHV2_wl1p_Given = TRUE; break; case HSMHV2_MOD_WL2: mod->HSMHV2_wl2 = value->rValue; mod->HSMHV2_wl2_Given = TRUE; break; case HSMHV2_MOD_WL2P: mod->HSMHV2_wl2p = value->rValue; mod->HSMHV2_wl2p_Given = TRUE; break; case HSMHV2_MOD_WLD: mod->HSMHV2_wld = value->rValue; mod->HSMHV2_wld_Given = TRUE; break; case HSMHV2_MOD_WLN: mod->HSMHV2_wln = value->rValue; mod->HSMHV2_wln_Given = TRUE; break; case HSMHV2_MOD_XQY: mod->HSMHV2_xqy = value->rValue; mod->HSMHV2_xqy_Given = TRUE; break; case HSMHV2_MOD_XQY1: mod->HSMHV2_xqy1 = value->rValue; mod->HSMHV2_xqy1_Given = TRUE; break; case HSMHV2_MOD_XQY2: mod->HSMHV2_xqy2 = value->rValue; mod->HSMHV2_xqy2_Given = TRUE; break; case HSMHV2_MOD_RS: mod->HSMHV2_rs = value->rValue; mod->HSMHV2_rs_Given = TRUE; break; case HSMHV2_MOD_RD: mod->HSMHV2_rd = value->rValue; mod->HSMHV2_rd_Given = TRUE; break; case HSMHV2_MOD_RSH: mod->HSMHV2_rsh = value->rValue; mod->HSMHV2_rsh_Given = TRUE; break; case HSMHV2_MOD_RSHG: mod->HSMHV2_rshg = value->rValue; mod->HSMHV2_rshg_Given = TRUE; break; case HSMHV2_MOD_VFBC: mod->HSMHV2_vfbc = value->rValue; mod->HSMHV2_vfbc_Given = TRUE; break; case HSMHV2_MOD_VBI: mod->HSMHV2_vbi = value->rValue; mod->HSMHV2_vbi_Given = TRUE; break; case HSMHV2_MOD_NSUBC: mod->HSMHV2_nsubc = value->rValue; mod->HSMHV2_nsubc_Given = TRUE; break; case HSMHV2_MOD_PARL2: mod->HSMHV2_parl2 = value->rValue; mod->HSMHV2_parl2_Given = TRUE; break; case HSMHV2_MOD_LP: mod->HSMHV2_lp = value->rValue; mod->HSMHV2_lp_Given = TRUE; break; case HSMHV2_MOD_NSUBP: mod->HSMHV2_nsubp = value->rValue; mod->HSMHV2_nsubp_Given = TRUE; break; case HSMHV2_MOD_NSUBP0: mod->HSMHV2_nsubp0 = value->rValue; mod->HSMHV2_nsubp0_Given = TRUE; break; case HSMHV2_MOD_NSUBWP: mod->HSMHV2_nsubwp = value->rValue; mod->HSMHV2_nsubwp_Given = TRUE; break; case HSMHV2_MOD_SCP1: mod->HSMHV2_scp1 = value->rValue; mod->HSMHV2_scp1_Given = TRUE; break; case HSMHV2_MOD_SCP2: mod->HSMHV2_scp2 = value->rValue; mod->HSMHV2_scp2_Given = TRUE; break; case HSMHV2_MOD_SCP3: mod->HSMHV2_scp3 = value->rValue; mod->HSMHV2_scp3_Given = TRUE; break; case HSMHV2_MOD_SC1: mod->HSMHV2_sc1 = value->rValue; mod->HSMHV2_sc1_Given = TRUE; break; case HSMHV2_MOD_SC2: mod->HSMHV2_sc2 = value->rValue; mod->HSMHV2_sc2_Given = TRUE; break; case HSMHV2_MOD_SC3: mod->HSMHV2_sc3 = value->rValue; mod->HSMHV2_sc3_Given = TRUE; break; case HSMHV2_MOD_SC4: mod->HSMHV2_sc4 = value->rValue; mod->HSMHV2_sc4_Given = TRUE; break; case HSMHV2_MOD_PGD1: mod->HSMHV2_pgd1 = value->rValue; mod->HSMHV2_pgd1_Given = TRUE; break; case HSMHV2_MOD_PGD2: mod->HSMHV2_pgd2 = value->rValue; mod->HSMHV2_pgd2_Given = TRUE; break; case HSMHV2_MOD_PGD4: mod->HSMHV2_pgd4 = value->rValue; mod->HSMHV2_pgd4_Given = TRUE; break; case HSMHV2_MOD_NDEP: mod->HSMHV2_ndep = value->rValue; mod->HSMHV2_ndep_Given = TRUE; break; case HSMHV2_MOD_NDEPL: mod->HSMHV2_ndepl = value->rValue; mod->HSMHV2_ndepl_Given = TRUE; break; case HSMHV2_MOD_NDEPLP: mod->HSMHV2_ndeplp = value->rValue; mod->HSMHV2_ndeplp_Given = TRUE; break; case HSMHV2_MOD_NINV: mod->HSMHV2_ninv = value->rValue; mod->HSMHV2_ninv_Given = TRUE; break; case HSMHV2_MOD_MUECB0: mod->HSMHV2_muecb0 = value->rValue; mod->HSMHV2_muecb0_Given = TRUE; break; case HSMHV2_MOD_MUECB1: mod->HSMHV2_muecb1 = value->rValue; mod->HSMHV2_muecb1_Given = TRUE; break; case HSMHV2_MOD_MUEPH1: mod->HSMHV2_mueph1 = value->rValue; mod->HSMHV2_mueph1_Given = TRUE; break; case HSMHV2_MOD_MUEPH0: mod->HSMHV2_mueph0 = value->rValue; mod->HSMHV2_mueph0_Given = TRUE; break; case HSMHV2_MOD_MUEPHW: mod->HSMHV2_muephw = value->rValue; mod->HSMHV2_muephw_Given = TRUE; break; case HSMHV2_MOD_MUEPWP: mod->HSMHV2_muepwp = value->rValue; mod->HSMHV2_muepwp_Given = TRUE; break; case HSMHV2_MOD_MUEPHL: mod->HSMHV2_muephl = value->rValue; mod->HSMHV2_muephl_Given = TRUE; break; case HSMHV2_MOD_MUEPLP: mod->HSMHV2_mueplp = value->rValue; mod->HSMHV2_mueplp_Given = TRUE; break; case HSMHV2_MOD_MUEPHS: mod->HSMHV2_muephs = value->rValue; mod->HSMHV2_muephs_Given = TRUE; break; case HSMHV2_MOD_MUEPSP: mod->HSMHV2_muepsp = value->rValue; mod->HSMHV2_muepsp_Given = TRUE; break; case HSMHV2_MOD_VTMP: mod->HSMHV2_vtmp = value->rValue; mod->HSMHV2_vtmp_Given = TRUE; break; case HSMHV2_MOD_WVTH0: mod->HSMHV2_wvth0 = value->rValue; mod->HSMHV2_wvth0_Given = TRUE; break; case HSMHV2_MOD_MUESR1: mod->HSMHV2_muesr1 = value->rValue; mod->HSMHV2_muesr1_Given = TRUE; break; case HSMHV2_MOD_MUESR0: mod->HSMHV2_muesr0 = value->rValue; mod->HSMHV2_muesr0_Given = TRUE; break; case HSMHV2_MOD_MUESRL: mod->HSMHV2_muesrl = value->rValue; mod->HSMHV2_muesrl_Given = TRUE; break; case HSMHV2_MOD_MUESLP: mod->HSMHV2_mueslp = value->rValue; mod->HSMHV2_mueslp_Given = TRUE; break; case HSMHV2_MOD_MUESRW: mod->HSMHV2_muesrw = value->rValue; mod->HSMHV2_muesrw_Given = TRUE; break; case HSMHV2_MOD_MUESWP: mod->HSMHV2_mueswp = value->rValue; mod->HSMHV2_mueswp_Given = TRUE; break; case HSMHV2_MOD_BB: mod->HSMHV2_bb = value->rValue; mod->HSMHV2_bb_Given = TRUE; break; case HSMHV2_MOD_SUB1: mod->HSMHV2_sub1 = value->rValue; mod->HSMHV2_sub1_Given = TRUE; break; case HSMHV2_MOD_SUB2: mod->HSMHV2_sub2 = value->rValue; mod->HSMHV2_sub2_Given = TRUE; break; case HSMHV2_MOD_SVGS: mod->HSMHV2_svgs = value->rValue; mod->HSMHV2_svgs_Given = TRUE; break; case HSMHV2_MOD_SVBS: mod->HSMHV2_svbs = value->rValue; mod->HSMHV2_svbs_Given = TRUE; break; case HSMHV2_MOD_SVBSL: mod->HSMHV2_svbsl = value->rValue; mod->HSMHV2_svbsl_Given = TRUE; break; case HSMHV2_MOD_SVDS: mod->HSMHV2_svds = value->rValue; mod->HSMHV2_svds_Given = TRUE; break; case HSMHV2_MOD_SLG: mod->HSMHV2_slg = value->rValue; mod->HSMHV2_slg_Given = TRUE; break; case HSMHV2_MOD_SUB1L: mod->HSMHV2_sub1l = value->rValue; mod->HSMHV2_sub1l_Given = TRUE; break; case HSMHV2_MOD_SUB2L: mod->HSMHV2_sub2l = value->rValue; mod->HSMHV2_sub2l_Given = TRUE; break; case HSMHV2_MOD_FN1: mod->HSMHV2_fn1 = value->rValue; mod->HSMHV2_fn1_Given = TRUE; break; case HSMHV2_MOD_FN2: mod->HSMHV2_fn2 = value->rValue; mod->HSMHV2_fn2_Given = TRUE; break; case HSMHV2_MOD_FN3: mod->HSMHV2_fn3 = value->rValue; mod->HSMHV2_fn3_Given = TRUE; break; case HSMHV2_MOD_FVBS: mod->HSMHV2_fvbs = value->rValue; mod->HSMHV2_fvbs_Given = TRUE; break; case HSMHV2_MOD_SVGSL: mod->HSMHV2_svgsl = value->rValue; mod->HSMHV2_svgsl_Given = TRUE; break; case HSMHV2_MOD_SVGSLP: mod->HSMHV2_svgslp = value->rValue; mod->HSMHV2_svgslp_Given = TRUE; break; case HSMHV2_MOD_SVGSWP: mod->HSMHV2_svgswp = value->rValue; mod->HSMHV2_svgswp_Given = TRUE; break; case HSMHV2_MOD_SVGSW: mod->HSMHV2_svgsw = value->rValue; mod->HSMHV2_svgsw_Given = TRUE; break; case HSMHV2_MOD_SVBSLP: mod->HSMHV2_svbslp = value->rValue; mod->HSMHV2_svbslp_Given = TRUE; break; case HSMHV2_MOD_SLGL: mod->HSMHV2_slgl = value->rValue; mod->HSMHV2_slgl_Given = TRUE; break; case HSMHV2_MOD_SLGLP: mod->HSMHV2_slglp = value->rValue; mod->HSMHV2_slglp_Given = TRUE; break; case HSMHV2_MOD_SUB1LP: mod->HSMHV2_sub1lp = value->rValue; mod->HSMHV2_sub1lp_Given = TRUE; break; case HSMHV2_MOD_NSTI: mod->HSMHV2_nsti = value->rValue; mod->HSMHV2_nsti_Given = TRUE; break; case HSMHV2_MOD_WSTI: mod->HSMHV2_wsti = value->rValue; mod->HSMHV2_wsti_Given = TRUE; break; case HSMHV2_MOD_WSTIL: mod->HSMHV2_wstil = value->rValue; mod->HSMHV2_wstil_Given = TRUE; break; case HSMHV2_MOD_WSTILP: mod->HSMHV2_wstilp = value->rValue; mod->HSMHV2_wstilp_Given = TRUE; break; case HSMHV2_MOD_WSTIW: mod->HSMHV2_wstiw = value->rValue; mod->HSMHV2_wstiw_Given = TRUE; break; case HSMHV2_MOD_WSTIWP: mod->HSMHV2_wstiwp = value->rValue; mod->HSMHV2_wstiwp_Given = TRUE; break; case HSMHV2_MOD_SCSTI1: mod->HSMHV2_scsti1 = value->rValue; mod->HSMHV2_scsti1_Given = TRUE; break; case HSMHV2_MOD_SCSTI2: mod->HSMHV2_scsti2 = value->rValue; mod->HSMHV2_scsti2_Given = TRUE; break; case HSMHV2_MOD_VTHSTI: mod->HSMHV2_vthsti = value->rValue; mod->HSMHV2_vthsti_Given = TRUE; break; case HSMHV2_MOD_VDSTI: mod->HSMHV2_vdsti = value->rValue; mod->HSMHV2_vdsti_Given = TRUE; break; case HSMHV2_MOD_MUESTI1: mod->HSMHV2_muesti1 = value->rValue; mod->HSMHV2_muesti1_Given = TRUE; break; case HSMHV2_MOD_MUESTI2: mod->HSMHV2_muesti2 = value->rValue; mod->HSMHV2_muesti2_Given = TRUE; break; case HSMHV2_MOD_MUESTI3: mod->HSMHV2_muesti3 = value->rValue; mod->HSMHV2_muesti3_Given = TRUE; break; case HSMHV2_MOD_NSUBPSTI1: mod->HSMHV2_nsubpsti1 = value->rValue; mod->HSMHV2_nsubpsti1_Given = TRUE; break; case HSMHV2_MOD_NSUBPSTI2: mod->HSMHV2_nsubpsti2 = value->rValue; mod->HSMHV2_nsubpsti2_Given = TRUE; break; case HSMHV2_MOD_NSUBPSTI3: mod->HSMHV2_nsubpsti3 = value->rValue; mod->HSMHV2_nsubpsti3_Given = TRUE; break; case HSMHV2_MOD_LPEXT: mod->HSMHV2_lpext = value->rValue; mod->HSMHV2_lpext_Given = TRUE; break; case HSMHV2_MOD_NPEXT: mod->HSMHV2_npext = value->rValue; mod->HSMHV2_npext_Given = TRUE; break; case HSMHV2_MOD_SCP22: mod->HSMHV2_scp22 = value->rValue; mod->HSMHV2_scp22_Given = TRUE; break; case HSMHV2_MOD_SCP21: mod->HSMHV2_scp21 = value->rValue; mod->HSMHV2_scp21_Given = TRUE; break; case HSMHV2_MOD_BS1: mod->HSMHV2_bs1 = value->rValue; mod->HSMHV2_bs1_Given = TRUE; break; case HSMHV2_MOD_BS2: mod->HSMHV2_bs2 = value->rValue; mod->HSMHV2_bs2_Given = TRUE; break; case HSMHV2_MOD_CGSO: mod->HSMHV2_cgso = value->rValue; mod->HSMHV2_cgso_Given = TRUE; break; case HSMHV2_MOD_CGDO: mod->HSMHV2_cgdo = value->rValue; mod->HSMHV2_cgdo_Given = TRUE; break; case HSMHV2_MOD_CGBO: mod->HSMHV2_cgbo = value->rValue; mod->HSMHV2_cgbo_Given = TRUE; break; case HSMHV2_MOD_TPOLY: mod->HSMHV2_tpoly = value->rValue; mod->HSMHV2_tpoly_Given = TRUE; break; case HSMHV2_MOD_JS0: mod->HSMHV2_js0 = value->rValue; mod->HSMHV2_js0_Given = TRUE; break; case HSMHV2_MOD_JS0SW: mod->HSMHV2_js0sw = value->rValue; mod->HSMHV2_js0sw_Given = TRUE; break; case HSMHV2_MOD_NJ: mod->HSMHV2_nj = value->rValue; mod->HSMHV2_nj_Given = TRUE; break; case HSMHV2_MOD_NJSW: mod->HSMHV2_njsw = value->rValue; mod->HSMHV2_njsw_Given = TRUE; break; case HSMHV2_MOD_XTI: mod->HSMHV2_xti = value->rValue; mod->HSMHV2_xti_Given = TRUE; break; case HSMHV2_MOD_CJ: mod->HSMHV2_cj = value->rValue; mod->HSMHV2_cj_Given = TRUE; break; case HSMHV2_MOD_CJSW: mod->HSMHV2_cjsw = value->rValue; mod->HSMHV2_cjsw_Given = TRUE; break; case HSMHV2_MOD_CJSWG: mod->HSMHV2_cjswg = value->rValue; mod->HSMHV2_cjswg_Given = TRUE; break; case HSMHV2_MOD_MJ: mod->HSMHV2_mj = value->rValue; mod->HSMHV2_mj_Given = TRUE; break; case HSMHV2_MOD_MJSW: mod->HSMHV2_mjsw = value->rValue; mod->HSMHV2_mjsw_Given = TRUE; break; case HSMHV2_MOD_MJSWG: mod->HSMHV2_mjswg = value->rValue; mod->HSMHV2_mjswg_Given = TRUE; break; case HSMHV2_MOD_PB: mod->HSMHV2_pb = value->rValue; mod->HSMHV2_pb_Given = TRUE; break; case HSMHV2_MOD_PBSW: mod->HSMHV2_pbsw = value->rValue; mod->HSMHV2_pbsw_Given = TRUE; break; case HSMHV2_MOD_PBSWG: mod->HSMHV2_pbswg = value->rValue; mod->HSMHV2_pbswg_Given = TRUE; break; case HSMHV2_MOD_XTI2: mod->HSMHV2_xti2 = value->rValue; mod->HSMHV2_xti2_Given = TRUE; break; case HSMHV2_MOD_CISB: mod->HSMHV2_cisb = value->rValue; mod->HSMHV2_cisb_Given = TRUE; break; case HSMHV2_MOD_CVB: mod->HSMHV2_cvb = value->rValue; mod->HSMHV2_cvb_Given = TRUE; break; case HSMHV2_MOD_CTEMP: mod->HSMHV2_ctemp = value->rValue; mod->HSMHV2_ctemp_Given = TRUE; break; case HSMHV2_MOD_CISBK: mod->HSMHV2_cisbk = value->rValue; mod->HSMHV2_cisbk_Given = TRUE; break; case HSMHV2_MOD_CVBK: mod->HSMHV2_cvbk = value->rValue; mod->HSMHV2_cvbk_Given = TRUE; break; case HSMHV2_MOD_DIVX: mod->HSMHV2_divx = value->rValue; mod->HSMHV2_divx_Given = TRUE; break; case HSMHV2_MOD_CLM1: mod->HSMHV2_clm1 = value->rValue; mod->HSMHV2_clm1_Given = TRUE; break; case HSMHV2_MOD_CLM2: mod->HSMHV2_clm2 = value->rValue; mod->HSMHV2_clm2_Given = TRUE; break; case HSMHV2_MOD_CLM3: mod->HSMHV2_clm3 = value->rValue; mod->HSMHV2_clm3_Given = TRUE; break; case HSMHV2_MOD_CLM5: mod->HSMHV2_clm5 = value->rValue; mod->HSMHV2_clm5_Given = TRUE; break; case HSMHV2_MOD_CLM6: mod->HSMHV2_clm6 = value->rValue; mod->HSMHV2_clm6_Given = TRUE; break; case HSMHV2_MOD_MUETMP: mod->HSMHV2_muetmp = value->rValue; mod->HSMHV2_muetmp_Given = TRUE; break; case HSMHV2_MOD_VOVER: mod->HSMHV2_vover = value->rValue; mod->HSMHV2_vover_Given = TRUE; break; case HSMHV2_MOD_VOVERP: mod->HSMHV2_voverp = value->rValue; mod->HSMHV2_voverp_Given = TRUE; break; case HSMHV2_MOD_VOVERS: mod->HSMHV2_vovers = value->rValue; mod->HSMHV2_vovers_Given = TRUE; break; case HSMHV2_MOD_VOVERSP: mod->HSMHV2_voversp = value->rValue; mod->HSMHV2_voversp_Given = TRUE; break; case HSMHV2_MOD_WFC: mod->HSMHV2_wfc = value->rValue; mod->HSMHV2_wfc_Given = TRUE; break; case HSMHV2_MOD_NSUBCW: mod->HSMHV2_nsubcw = value->rValue; mod->HSMHV2_nsubcw_Given = TRUE; break; case HSMHV2_MOD_NSUBCWP: mod->HSMHV2_nsubcwp = value->rValue; mod->HSMHV2_nsubcwp_Given = TRUE; break; case HSMHV2_MOD_QME1: mod->HSMHV2_qme1 = value->rValue; mod->HSMHV2_qme1_Given = TRUE; break; case HSMHV2_MOD_QME2: mod->HSMHV2_qme2 = value->rValue; mod->HSMHV2_qme2_Given = TRUE; break; case HSMHV2_MOD_QME3: mod->HSMHV2_qme3 = value->rValue; mod->HSMHV2_qme3_Given = TRUE; break; case HSMHV2_MOD_GIDL1: mod->HSMHV2_gidl1 = value->rValue; mod->HSMHV2_gidl1_Given = TRUE; break; case HSMHV2_MOD_GIDL2: mod->HSMHV2_gidl2 = value->rValue; mod->HSMHV2_gidl2_Given = TRUE; break; case HSMHV2_MOD_GIDL3: mod->HSMHV2_gidl3 = value->rValue; mod->HSMHV2_gidl3_Given = TRUE; break; case HSMHV2_MOD_GIDL4: mod->HSMHV2_gidl4 = value->rValue; mod->HSMHV2_gidl4_Given = TRUE; break; case HSMHV2_MOD_GIDL5: mod->HSMHV2_gidl5 = value->rValue; mod->HSMHV2_gidl5_Given = TRUE; break; case HSMHV2_MOD_GLEAK1: mod->HSMHV2_gleak1 = value->rValue; mod->HSMHV2_gleak1_Given = TRUE; break; case HSMHV2_MOD_GLEAK2: mod->HSMHV2_gleak2 = value->rValue; mod->HSMHV2_gleak2_Given = TRUE; break; case HSMHV2_MOD_GLEAK3: mod->HSMHV2_gleak3 = value->rValue; mod->HSMHV2_gleak3_Given = TRUE; break; case HSMHV2_MOD_GLEAK4: mod->HSMHV2_gleak4 = value->rValue; mod->HSMHV2_gleak4_Given = TRUE; break; case HSMHV2_MOD_GLEAK5: mod->HSMHV2_gleak5 = value->rValue; mod->HSMHV2_gleak5_Given = TRUE; break; case HSMHV2_MOD_GLEAK6: mod->HSMHV2_gleak6 = value->rValue; mod->HSMHV2_gleak6_Given = TRUE; break; case HSMHV2_MOD_GLEAK7: mod->HSMHV2_gleak7 = value->rValue; mod->HSMHV2_gleak7_Given = TRUE; break; case HSMHV2_MOD_GLPART1: mod->HSMHV2_glpart1 = value->rValue; mod->HSMHV2_glpart1_Given = TRUE; break; case HSMHV2_MOD_GLKSD1: mod->HSMHV2_glksd1 = value->rValue; mod->HSMHV2_glksd1_Given = TRUE; break; case HSMHV2_MOD_GLKSD2: mod->HSMHV2_glksd2 = value->rValue; mod->HSMHV2_glksd2_Given = TRUE; break; case HSMHV2_MOD_GLKSD3: mod->HSMHV2_glksd3 = value->rValue; mod->HSMHV2_glksd3_Given = TRUE; break; case HSMHV2_MOD_GLKB1: mod->HSMHV2_glkb1 = value->rValue; mod->HSMHV2_glkb1_Given = TRUE; break; case HSMHV2_MOD_GLKB2: mod->HSMHV2_glkb2 = value->rValue; mod->HSMHV2_glkb2_Given = TRUE; break; case HSMHV2_MOD_GLKB3: mod->HSMHV2_glkb3 = value->rValue; mod->HSMHV2_glkb3_Given = TRUE; break; case HSMHV2_MOD_EGIG: mod->HSMHV2_egig = value->rValue; mod->HSMHV2_egig_Given = TRUE; break; case HSMHV2_MOD_IGTEMP2: mod->HSMHV2_igtemp2 = value->rValue; mod->HSMHV2_igtemp2_Given = TRUE; break; case HSMHV2_MOD_IGTEMP3: mod->HSMHV2_igtemp3 = value->rValue; mod->HSMHV2_igtemp3_Given = TRUE; break; case HSMHV2_MOD_VZADD0: mod->HSMHV2_vzadd0 = value->rValue; mod->HSMHV2_vzadd0_Given = TRUE; break; case HSMHV2_MOD_PZADD0: mod->HSMHV2_pzadd0 = value->rValue; mod->HSMHV2_pzadd0_Given = TRUE; break; case HSMHV2_MOD_NFTRP: mod->HSMHV2_nftrp = value->rValue; mod->HSMHV2_nftrp_Given = TRUE; break; case HSMHV2_MOD_NFALP: mod->HSMHV2_nfalp = value->rValue; mod->HSMHV2_nfalp_Given = TRUE; break; case HSMHV2_MOD_CIT: mod->HSMHV2_cit = value->rValue; mod->HSMHV2_cit_Given = TRUE; break; case HSMHV2_MOD_FALPH: mod->HSMHV2_falph = value->rValue; mod->HSMHV2_falph_Given = TRUE; break; case HSMHV2_MOD_KAPPA: mod->HSMHV2_kappa = value->rValue; mod->HSMHV2_kappa_Given = TRUE; break; case HSMHV2_MOD_VDIFFJ: mod->HSMHV2_vdiffj = value->rValue; mod->HSMHV2_vdiffj_Given = TRUE; break; case HSMHV2_MOD_DLY1: mod->HSMHV2_dly1 = value->rValue; mod->HSMHV2_dly1_Given = TRUE; break; case HSMHV2_MOD_DLY2: mod->HSMHV2_dly2 = value->rValue; mod->HSMHV2_dly2_Given = TRUE; break; case HSMHV2_MOD_DLY3: mod->HSMHV2_dly3 = value->rValue; mod->HSMHV2_dly3_Given = TRUE; break; case HSMHV2_MOD_TNOM: mod->HSMHV2_tnom = value->rValue; mod->HSMHV2_tnom_Given = TRUE; break; case HSMHV2_MOD_OVSLP: mod->HSMHV2_ovslp = value->rValue; mod->HSMHV2_ovslp_Given = TRUE; break; case HSMHV2_MOD_OVMAG: mod->HSMHV2_ovmag = value->rValue; mod->HSMHV2_ovmag_Given = TRUE; break; case HSMHV2_MOD_GBMIN: mod->HSMHV2_gbmin = value->rValue; mod->HSMHV2_gbmin_Given = TRUE; break; case HSMHV2_MOD_RBPB: mod->HSMHV2_rbpb = value->rValue; mod->HSMHV2_rbpb_Given = TRUE; break; case HSMHV2_MOD_RBPD: mod->HSMHV2_rbpd = value->rValue; mod->HSMHV2_rbpd_Given = TRUE; break; case HSMHV2_MOD_RBPS: mod->HSMHV2_rbps = value->rValue; mod->HSMHV2_rbps_Given = TRUE; break; case HSMHV2_MOD_RBDB: mod->HSMHV2_rbdb = value->rValue; mod->HSMHV2_rbdb_Given = TRUE; break; case HSMHV2_MOD_RBSB: mod->HSMHV2_rbsb = value->rValue; mod->HSMHV2_rbsb_Given = TRUE; break; case HSMHV2_MOD_IBPC1: mod->HSMHV2_ibpc1 = value->rValue; mod->HSMHV2_ibpc1_Given = TRUE; break; case HSMHV2_MOD_IBPC1L: mod->HSMHV2_ibpc1l = value->rValue; mod->HSMHV2_ibpc1l_Given = TRUE; break; case HSMHV2_MOD_IBPC1LP: mod->HSMHV2_ibpc1lp = value->rValue; mod->HSMHV2_ibpc1lp_Given = TRUE; break; case HSMHV2_MOD_IBPC2: mod->HSMHV2_ibpc2 = value->rValue; mod->HSMHV2_ibpc2_Given = TRUE; break; case HSMHV2_MOD_MPHDFM: mod->HSMHV2_mphdfm = value->rValue; mod->HSMHV2_mphdfm_Given = TRUE; break; case HSMHV2_MOD_PTL: mod->HSMHV2_ptl = value->rValue; mod->HSMHV2_ptl_Given = TRUE; break; case HSMHV2_MOD_PTP: mod->HSMHV2_ptp = value->rValue; mod->HSMHV2_ptp_Given = TRUE; break; case HSMHV2_MOD_PT2: mod->HSMHV2_pt2 = value->rValue; mod->HSMHV2_pt2_Given = TRUE; break; case HSMHV2_MOD_PTLP: mod->HSMHV2_ptlp = value->rValue; mod->HSMHV2_ptlp_Given = TRUE; break; case HSMHV2_MOD_GDL: mod->HSMHV2_gdl = value->rValue; mod->HSMHV2_gdl_Given = TRUE; break; case HSMHV2_MOD_GDLP: mod->HSMHV2_gdlp = value->rValue; mod->HSMHV2_gdlp_Given = TRUE; break; case HSMHV2_MOD_GDLD: mod->HSMHV2_gdld = value->rValue; mod->HSMHV2_gdld_Given = TRUE; break; case HSMHV2_MOD_PT4: mod->HSMHV2_pt4 = value->rValue; mod->HSMHV2_pt4_Given = TRUE; break; case HSMHV2_MOD_PT4P: mod->HSMHV2_pt4p = value->rValue; mod->HSMHV2_pt4p_Given = TRUE; break; case HSMHV2_MOD_RDVG11: mod->HSMHV2_rdvg11 = value->rValue; mod->HSMHV2_rdvg11_Given = TRUE; break; case HSMHV2_MOD_RDVG12: mod->HSMHV2_rdvg12 = value->rValue; mod->HSMHV2_rdvg12_Given = TRUE; break; case HSMHV2_MOD_RD20: mod->HSMHV2_rd20 = value->rValue; mod->HSMHV2_rd20_Given = TRUE; break; case HSMHV2_MOD_RD21: mod->HSMHV2_rd21 = value->rValue; mod->HSMHV2_rd21_Given = TRUE; break; case HSMHV2_MOD_RD22: mod->HSMHV2_rd22 = value->rValue; mod->HSMHV2_rd22_Given = TRUE; break; case HSMHV2_MOD_RD22D: mod->HSMHV2_rd22d = value->rValue; mod->HSMHV2_rd22d_Given = TRUE; break; case HSMHV2_MOD_RD23: mod->HSMHV2_rd23 = value->rValue; mod->HSMHV2_rd23_Given = TRUE; break; case HSMHV2_MOD_RD24: mod->HSMHV2_rd24 = value->rValue; mod->HSMHV2_rd24_Given = TRUE; break; case HSMHV2_MOD_RD25: mod->HSMHV2_rd25 = value->rValue; mod->HSMHV2_rd25_Given = TRUE; break; case HSMHV2_MOD_RDVDL: mod->HSMHV2_rdvdl = value->rValue; mod->HSMHV2_rdvdl_Given = TRUE; break; case HSMHV2_MOD_RDVDLP: mod->HSMHV2_rdvdlp = value->rValue; mod->HSMHV2_rdvdlp_Given = TRUE; break; case HSMHV2_MOD_RDVDS: mod->HSMHV2_rdvds = value->rValue; mod->HSMHV2_rdvds_Given = TRUE; break; case HSMHV2_MOD_RDVDSP: mod->HSMHV2_rdvdsp = value->rValue; mod->HSMHV2_rdvdsp_Given = TRUE; break; case HSMHV2_MOD_RD23L: mod->HSMHV2_rd23l = value->rValue; mod->HSMHV2_rd23l_Given = TRUE; break; case HSMHV2_MOD_RD23LP: mod->HSMHV2_rd23lp = value->rValue; mod->HSMHV2_rd23lp_Given = TRUE; break; case HSMHV2_MOD_RD23S: mod->HSMHV2_rd23s = value->rValue; mod->HSMHV2_rd23s_Given = TRUE; break; case HSMHV2_MOD_RD23SP: mod->HSMHV2_rd23sp = value->rValue; mod->HSMHV2_rd23sp_Given = TRUE; break; case HSMHV2_MOD_RDS: mod->HSMHV2_rds = value->rValue; mod->HSMHV2_rds_Given = TRUE; break; case HSMHV2_MOD_RDSP: mod->HSMHV2_rdsp = value->rValue; mod->HSMHV2_rdsp_Given = TRUE; break; case HSMHV2_MOD_RTH0: /* Self-heating model */ mod->HSMHV2_rth0 = value->rValue; mod->HSMHV2_rth0_Given = TRUE; break; case HSMHV2_MOD_CTH0: /* Self-heating model */ mod->HSMHV2_cth0 = value->rValue; mod->HSMHV2_cth0_Given = TRUE; break; case HSMHV2_MOD_POWRAT: /* Self-heating model */ mod->HSMHV2_powrat = value->rValue; mod->HSMHV2_powrat_Given = TRUE; break; case HSMHV2_MOD_TCJBD: /* Self-heating model */ mod->HSMHV2_tcjbd = value->rValue; mod->HSMHV2_tcjbd_Given = TRUE; break; case HSMHV2_MOD_TCJBS: /* Self-heating model */ mod->HSMHV2_tcjbs = value->rValue; mod->HSMHV2_tcjbs_Given = TRUE; break; case HSMHV2_MOD_TCJBDSW: /* Self-heating model */ mod->HSMHV2_tcjbdsw = value->rValue; mod->HSMHV2_tcjbdsw_Given = TRUE; break; case HSMHV2_MOD_TCJBSSW: /* Self-heating model */ mod->HSMHV2_tcjbssw = value->rValue; mod->HSMHV2_tcjbssw_Given = TRUE; break; case HSMHV2_MOD_TCJBDSWG: /* Self-heating model */ mod->HSMHV2_tcjbdswg = value->rValue; mod->HSMHV2_tcjbdswg_Given = TRUE; break; case HSMHV2_MOD_TCJBSSWG: /* Self-heating model */ mod->HSMHV2_tcjbsswg = value->rValue; mod->HSMHV2_tcjbsswg_Given = TRUE; break; case HSMHV2_MOD_DLYOV: mod->HSMHV2_dlyov = value->rValue; mod->HSMHV2_dlyov_Given = TRUE; break; case HSMHV2_MOD_QDFTVD: mod->HSMHV2_qdftvd = value->rValue; mod->HSMHV2_qdftvd_Given = TRUE; break; case HSMHV2_MOD_XLDLD: mod->HSMHV2_xldld = value->rValue; mod->HSMHV2_xldld_Given = TRUE; break; case HSMHV2_MOD_XWDLD: mod->HSMHV2_xwdld = value->rValue; mod->HSMHV2_xwdld_Given = TRUE; break; case HSMHV2_MOD_RDVD: mod->HSMHV2_rdvd = value->rValue; mod->HSMHV2_rdvd_Given = TRUE; break; case HSMHV2_MOD_RDTEMP1: mod->HSMHV2_rdtemp1 = value->rValue; mod->HSMHV2_rdtemp1_Given = TRUE; break; case HSMHV2_MOD_RDTEMP2: mod->HSMHV2_rdtemp2 = value->rValue; mod->HSMHV2_rdtemp2_Given = TRUE; break; case HSMHV2_MOD_RTH0R: mod->HSMHV2_rth0r = value->rValue; mod->HSMHV2_rth0r_Given = TRUE; break; case HSMHV2_MOD_RDVDTEMP1: mod->HSMHV2_rdvdtemp1 = value->rValue; mod->HSMHV2_rdvdtemp1_Given = TRUE; break; case HSMHV2_MOD_RDVDTEMP2: mod->HSMHV2_rdvdtemp2 = value->rValue; mod->HSMHV2_rdvdtemp2_Given = TRUE; break; case HSMHV2_MOD_RTH0W: mod->HSMHV2_rth0w = value->rValue; mod->HSMHV2_rth0w_Given = TRUE; break; case HSMHV2_MOD_RTH0WP: mod->HSMHV2_rth0wp = value->rValue; mod->HSMHV2_rth0wp_Given = TRUE; break; case HSMHV2_MOD_CVDSOVER: mod->HSMHV2_cvdsover = value->rValue; mod->HSMHV2_cvdsover_Given = TRUE; break; case HSMHV2_MOD_NINVD: mod->HSMHV2_ninvd = value->rValue; mod->HSMHV2_ninvd_Given = TRUE; break; case HSMHV2_MOD_NINVDW: mod->HSMHV2_ninvdw = value->rValue; mod->HSMHV2_ninvdw_Given = TRUE; break; case HSMHV2_MOD_NINVDWP: mod->HSMHV2_ninvdwp = value->rValue; mod->HSMHV2_ninvdwp_Given = TRUE; break; case HSMHV2_MOD_NINVDT1: mod->HSMHV2_ninvdt1 = value->rValue; mod->HSMHV2_ninvdt1_Given = TRUE; break; case HSMHV2_MOD_NINVDT2: mod->HSMHV2_ninvdt2 = value->rValue; mod->HSMHV2_ninvdt2_Given = TRUE; break; case HSMHV2_MOD_VBSMIN: mod->HSMHV2_vbsmin = value->rValue; mod->HSMHV2_vbsmin_Given = TRUE; break; case HSMHV2_MOD_RDVB: mod->HSMHV2_rdvb = value->rValue; mod->HSMHV2_rdvb_Given = TRUE; break; case HSMHV2_MOD_RTH0NF: mod->HSMHV2_rth0nf = value->rValue; mod->HSMHV2_rth0nf_Given = TRUE; break; case HSMHV2_MOD_RTHTEMP1: mod->HSMHV2_rthtemp1 = value->rValue; mod->HSMHV2_rthtemp1_Given = TRUE; break; case HSMHV2_MOD_RTHTEMP2: mod->HSMHV2_rthtemp2 = value->rValue; mod->HSMHV2_rthtemp2_Given = TRUE; break; case HSMHV2_MOD_PRATTEMP1: mod->HSMHV2_prattemp1 = value->rValue; mod->HSMHV2_prattemp1_Given = TRUE; break; case HSMHV2_MOD_PRATTEMP2: mod->HSMHV2_prattemp2 = value->rValue; mod->HSMHV2_prattemp2_Given = TRUE; break; case HSMHV2_MOD_RDVSUB: /* substrate effect */ mod->HSMHV2_rdvsub = value->rValue; mod->HSMHV2_rdvsub_Given = TRUE; break; case HSMHV2_MOD_RDVDSUB: mod->HSMHV2_rdvdsub = value->rValue; mod->HSMHV2_rdvdsub_Given = TRUE; break; case HSMHV2_MOD_DDRIFT: mod->HSMHV2_ddrift = value->rValue; mod->HSMHV2_ddrift_Given = TRUE; break; case HSMHV2_MOD_VBISUB: mod->HSMHV2_vbisub = value->rValue; mod->HSMHV2_vbisub_Given = TRUE; break; case HSMHV2_MOD_NSUBSUB: mod->HSMHV2_nsubsub = value->rValue; mod->HSMHV2_nsubsub_Given = TRUE; break; case HSMHV2_MOD_RDRMUE: mod->HSMHV2_rdrmue = value->rValue; mod->HSMHV2_rdrmue_Given = TRUE; break; case HSMHV2_MOD_RDRVMAX: mod->HSMHV2_rdrvmax = value->rValue; mod->HSMHV2_rdrvmax_Given = TRUE; break; case HSMHV2_MOD_RDRMUETMP: mod->HSMHV2_rdrmuetmp = value->rValue; mod->HSMHV2_rdrmuetmp_Given = TRUE; break; case HSMHV2_MOD_RDRVTMP: mod->HSMHV2_rdrvtmp = value->rValue; mod->HSMHV2_rdrvtmp_Given = TRUE; break; case HSMHV2_MOD_RDRDJUNC: mod->HSMHV2_rdrdjunc = value->rValue; mod->HSMHV2_rdrdjunc_Given = TRUE; break; case HSMHV2_MOD_RDRCX: mod->HSMHV2_rdrcx = value->rValue; mod->HSMHV2_rdrcx_Given = TRUE; break; case HSMHV2_MOD_RDRCAR: mod->HSMHV2_rdrcar = value->rValue; mod->HSMHV2_rdrcar_Given = TRUE; break; case HSMHV2_MOD_RDRDL1: mod->HSMHV2_rdrdl1 = value->rValue; mod->HSMHV2_rdrdl1_Given = TRUE; break; case HSMHV2_MOD_RDRDL2: mod->HSMHV2_rdrdl2 = value->rValue; mod->HSMHV2_rdrdl2_Given = TRUE; break; case HSMHV2_MOD_RDRVMAXW: mod->HSMHV2_rdrvmaxw = value->rValue; mod->HSMHV2_rdrvmaxw_Given = TRUE; break; case HSMHV2_MOD_RDRVMAXWP: mod->HSMHV2_rdrvmaxwp = value->rValue; mod->HSMHV2_rdrvmaxwp_Given = TRUE; break; case HSMHV2_MOD_RDRVMAXL: mod->HSMHV2_rdrvmaxl = value->rValue; mod->HSMHV2_rdrvmaxl_Given = TRUE; break; case HSMHV2_MOD_RDRVMAXLP: mod->HSMHV2_rdrvmaxlp = value->rValue; mod->HSMHV2_rdrvmaxlp_Given = TRUE; break; case HSMHV2_MOD_RDRMUEL: mod->HSMHV2_rdrmuel = value->rValue; mod->HSMHV2_rdrmuel_Given = TRUE; break; case HSMHV2_MOD_RDRMUELP: mod->HSMHV2_rdrmuelp = value->rValue; mod->HSMHV2_rdrmuelp_Given = TRUE; break; case HSMHV2_MOD_RDRQOVER: mod->HSMHV2_rdrqover = value->rValue; mod->HSMHV2_rdrqover_Given = TRUE; break; case HSMHV2_MOD_QOVADD: mod->HSMHV2_qovadd = value->rValue; mod->HSMHV2_qovadd_Given = TRUE; break; case HSMHV2_MOD_JS0D: mod->HSMHV2_js0d = value->rValue; mod->HSMHV2_js0d_Given = TRUE; break; case HSMHV2_MOD_JS0SWD: mod->HSMHV2_js0swd = value->rValue; mod->HSMHV2_js0swd_Given = TRUE; break; case HSMHV2_MOD_NJD: mod->HSMHV2_njd = value->rValue; mod->HSMHV2_njd_Given = TRUE; break; case HSMHV2_MOD_NJSWD: mod->HSMHV2_njswd = value->rValue; mod->HSMHV2_njswd_Given = TRUE; break; case HSMHV2_MOD_XTID: mod->HSMHV2_xtid = value->rValue; mod->HSMHV2_xtid_Given = TRUE; break; case HSMHV2_MOD_CJD: mod->HSMHV2_cjd = value->rValue; mod->HSMHV2_cjd_Given = TRUE; break; case HSMHV2_MOD_CJSWD: mod->HSMHV2_cjswd = value->rValue; mod->HSMHV2_cjswd_Given = TRUE; break; case HSMHV2_MOD_CJSWGD: mod->HSMHV2_cjswgd = value->rValue; mod->HSMHV2_cjswgd_Given = TRUE; break; case HSMHV2_MOD_MJD: mod->HSMHV2_mjd = value->rValue; mod->HSMHV2_mjd_Given = TRUE; break; case HSMHV2_MOD_MJSWD: mod->HSMHV2_mjswd = value->rValue; mod->HSMHV2_mjswd_Given = TRUE; break; case HSMHV2_MOD_MJSWGD: mod->HSMHV2_mjswgd = value->rValue; mod->HSMHV2_mjswgd_Given = TRUE; break; case HSMHV2_MOD_PBD: mod->HSMHV2_pbd = value->rValue; mod->HSMHV2_pbd_Given = TRUE; break; case HSMHV2_MOD_PBSWD: mod->HSMHV2_pbswd = value->rValue; mod->HSMHV2_pbswd_Given = TRUE; break; case HSMHV2_MOD_PBSWDG: mod->HSMHV2_pbswgd = value->rValue; mod->HSMHV2_pbswgd_Given = TRUE; break; case HSMHV2_MOD_XTI2D: mod->HSMHV2_xti2d = value->rValue; mod->HSMHV2_xti2d_Given = TRUE; break; case HSMHV2_MOD_CISBD: mod->HSMHV2_cisbd = value->rValue; mod->HSMHV2_cisbd_Given = TRUE; break; case HSMHV2_MOD_CVBD: mod->HSMHV2_cvbd = value->rValue; mod->HSMHV2_cvbd_Given = TRUE; break; case HSMHV2_MOD_CTEMPD: mod->HSMHV2_ctempd = value->rValue; mod->HSMHV2_ctempd_Given = TRUE; break; case HSMHV2_MOD_CISBKD: mod->HSMHV2_cisbkd = value->rValue; mod->HSMHV2_cisbkd_Given = TRUE; break; case HSMHV2_MOD_DIVXD: mod->HSMHV2_divxd = value->rValue; mod->HSMHV2_divxd_Given = TRUE; break; case HSMHV2_MOD_VDIFFJD: mod->HSMHV2_vdiffjd = value->rValue; mod->HSMHV2_vdiffjd_Given = TRUE; break; case HSMHV2_MOD_JS0S: mod->HSMHV2_js0s = value->rValue; mod->HSMHV2_js0s_Given = TRUE; break; case HSMHV2_MOD_JS0SWS: mod->HSMHV2_js0sws = value->rValue; mod->HSMHV2_js0sws_Given = TRUE; break; case HSMHV2_MOD_NJS: mod->HSMHV2_njs = value->rValue; mod->HSMHV2_njs_Given = TRUE; break; case HSMHV2_MOD_NJSWS: mod->HSMHV2_njsws = value->rValue; mod->HSMHV2_njsws_Given = TRUE; break; case HSMHV2_MOD_XTIS: mod->HSMHV2_xtis = value->rValue; mod->HSMHV2_xtis_Given = TRUE; break; case HSMHV2_MOD_CJS: mod->HSMHV2_cjs = value->rValue; mod->HSMHV2_cjs_Given = TRUE; break; case HSMHV2_MOD_CJSSW: mod->HSMHV2_cjsws = value->rValue; mod->HSMHV2_cjsws_Given = TRUE; break; case HSMHV2_MOD_CJSWGS: mod->HSMHV2_cjswgs = value->rValue; mod->HSMHV2_cjswgs_Given = TRUE; break; case HSMHV2_MOD_MJS: mod->HSMHV2_mjs = value->rValue; mod->HSMHV2_mjs_Given = TRUE; break; case HSMHV2_MOD_MJSWS: mod->HSMHV2_mjsws = value->rValue; mod->HSMHV2_mjsws_Given = TRUE; break; case HSMHV2_MOD_MJSWGS: mod->HSMHV2_mjswgs = value->rValue; mod->HSMHV2_mjswgs_Given = TRUE; break; case HSMHV2_MOD_PBS: mod->HSMHV2_pbs = value->rValue; mod->HSMHV2_pbs_Given = TRUE; break; case HSMHV2_MOD_PBSWS: mod->HSMHV2_pbsws = value->rValue; mod->HSMHV2_pbsws_Given = TRUE; break; case HSMHV2_MOD_PBSWSG: mod->HSMHV2_pbswgs = value->rValue; mod->HSMHV2_pbswgs_Given = TRUE; break; case HSMHV2_MOD_XTI2S: mod->HSMHV2_xti2s = value->rValue; mod->HSMHV2_xti2s_Given = TRUE; break; case HSMHV2_MOD_CISBS: mod->HSMHV2_cisbs = value->rValue; mod->HSMHV2_cisbs_Given = TRUE; break; case HSMHV2_MOD_CVBS: mod->HSMHV2_cvbs = value->rValue; mod->HSMHV2_cvbs_Given = TRUE; break; case HSMHV2_MOD_CTEMPS: mod->HSMHV2_ctemps = value->rValue; mod->HSMHV2_ctemps_Given = TRUE; break; case HSMHV2_MOD_CISBKS: mod->HSMHV2_cisbks = value->rValue; mod->HSMHV2_cisbks_Given = TRUE; break; case HSMHV2_MOD_DIVXS: mod->HSMHV2_divxs = value->rValue; mod->HSMHV2_divxs_Given = TRUE; break; case HSMHV2_MOD_VDIFFJS: mod->HSMHV2_vdiffjs = value->rValue; mod->HSMHV2_vdiffjs_Given = TRUE; break; case HSMHV2_MOD_SHEMAX: mod->HSMHV2_shemax = value->rValue; mod->HSMHV2_shemax_Given = TRUE; break; case HSMHV2_MOD_VGSMIN: mod->HSMHV2_vgsmin = value->rValue; mod->HSMHV2_vgsmin_Given = TRUE; break; case HSMHV2_MOD_GDSLEAK: mod->HSMHV2_gdsleak = value->rValue; mod->HSMHV2_gdsleak_Given = TRUE; break; case HSMHV2_MOD_RDRBB: mod->HSMHV2_rdrbb = value->rValue; mod->HSMHV2_rdrbb_Given = TRUE; break; case HSMHV2_MOD_RDRBBTMP: mod->HSMHV2_rdrbbtmp = value->rValue; mod->HSMHV2_rdrbbtmp_Given = TRUE; break; /* binning parameters */ case HSMHV2_MOD_LMIN: mod->HSMHV2_lmin = value->rValue; mod->HSMHV2_lmin_Given = TRUE; break; case HSMHV2_MOD_LMAX: mod->HSMHV2_lmax = value->rValue; mod->HSMHV2_lmax_Given = TRUE; break; case HSMHV2_MOD_WMIN: mod->HSMHV2_wmin = value->rValue; mod->HSMHV2_wmin_Given = TRUE; break; case HSMHV2_MOD_WMAX: mod->HSMHV2_wmax = value->rValue; mod->HSMHV2_wmax_Given = TRUE; break; case HSMHV2_MOD_LBINN: mod->HSMHV2_lbinn = value->rValue; mod->HSMHV2_lbinn_Given = TRUE; break; case HSMHV2_MOD_WBINN: mod->HSMHV2_wbinn = value->rValue; mod->HSMHV2_wbinn_Given = TRUE; break; /* Length dependence */ case HSMHV2_MOD_LVMAX: mod->HSMHV2_lvmax = value->rValue; mod->HSMHV2_lvmax_Given = TRUE; break; case HSMHV2_MOD_LBGTMP1: mod->HSMHV2_lbgtmp1 = value->rValue; mod->HSMHV2_lbgtmp1_Given = TRUE; break; case HSMHV2_MOD_LBGTMP2: mod->HSMHV2_lbgtmp2 = value->rValue; mod->HSMHV2_lbgtmp2_Given = TRUE; break; case HSMHV2_MOD_LEG0: mod->HSMHV2_leg0 = value->rValue; mod->HSMHV2_leg0_Given = TRUE; break; case HSMHV2_MOD_LVFBOVER: mod->HSMHV2_lvfbover = value->rValue; mod->HSMHV2_lvfbover_Given = TRUE; break; case HSMHV2_MOD_LNOVER: mod->HSMHV2_lnover = value->rValue; mod->HSMHV2_lnover_Given = TRUE; break; case HSMHV2_MOD_LNOVERS: mod->HSMHV2_lnovers = value->rValue; mod->HSMHV2_lnovers_Given = TRUE; break; case HSMHV2_MOD_LWL2: mod->HSMHV2_lwl2 = value->rValue; mod->HSMHV2_lwl2_Given = TRUE; break; case HSMHV2_MOD_LVFBC: mod->HSMHV2_lvfbc = value->rValue; mod->HSMHV2_lvfbc_Given = TRUE; break; case HSMHV2_MOD_LNSUBC: mod->HSMHV2_lnsubc = value->rValue; mod->HSMHV2_lnsubc_Given = TRUE; break; case HSMHV2_MOD_LNSUBP: mod->HSMHV2_lnsubp = value->rValue; mod->HSMHV2_lnsubp_Given = TRUE; break; case HSMHV2_MOD_LSCP1: mod->HSMHV2_lscp1 = value->rValue; mod->HSMHV2_lscp1_Given = TRUE; break; case HSMHV2_MOD_LSCP2: mod->HSMHV2_lscp2 = value->rValue; mod->HSMHV2_lscp2_Given = TRUE; break; case HSMHV2_MOD_LSCP3: mod->HSMHV2_lscp3 = value->rValue; mod->HSMHV2_lscp3_Given = TRUE; break; case HSMHV2_MOD_LSC1: mod->HSMHV2_lsc1 = value->rValue; mod->HSMHV2_lsc1_Given = TRUE; break; case HSMHV2_MOD_LSC2: mod->HSMHV2_lsc2 = value->rValue; mod->HSMHV2_lsc2_Given = TRUE; break; case HSMHV2_MOD_LSC3: mod->HSMHV2_lsc3 = value->rValue; mod->HSMHV2_lsc3_Given = TRUE; break; case HSMHV2_MOD_LPGD1: mod->HSMHV2_lpgd1 = value->rValue; mod->HSMHV2_lpgd1_Given = TRUE; break; case HSMHV2_MOD_LNDEP: mod->HSMHV2_lndep = value->rValue; mod->HSMHV2_lndep_Given = TRUE; break; case HSMHV2_MOD_LNINV: mod->HSMHV2_lninv = value->rValue; mod->HSMHV2_lninv_Given = TRUE; break; case HSMHV2_MOD_LMUECB0: mod->HSMHV2_lmuecb0 = value->rValue; mod->HSMHV2_lmuecb0_Given = TRUE; break; case HSMHV2_MOD_LMUECB1: mod->HSMHV2_lmuecb1 = value->rValue; mod->HSMHV2_lmuecb1_Given = TRUE; break; case HSMHV2_MOD_LMUEPH1: mod->HSMHV2_lmueph1 = value->rValue; mod->HSMHV2_lmueph1_Given = TRUE; break; case HSMHV2_MOD_LVTMP: mod->HSMHV2_lvtmp = value->rValue; mod->HSMHV2_lvtmp_Given = TRUE; break; case HSMHV2_MOD_LWVTH0: mod->HSMHV2_lwvth0 = value->rValue; mod->HSMHV2_lwvth0_Given = TRUE; break; case HSMHV2_MOD_LMUESR1: mod->HSMHV2_lmuesr1 = value->rValue; mod->HSMHV2_lmuesr1_Given = TRUE; break; case HSMHV2_MOD_LMUETMP: mod->HSMHV2_lmuetmp = value->rValue; mod->HSMHV2_lmuetmp_Given = TRUE; break; case HSMHV2_MOD_LSUB1: mod->HSMHV2_lsub1 = value->rValue; mod->HSMHV2_lsub1_Given = TRUE; break; case HSMHV2_MOD_LSUB2: mod->HSMHV2_lsub2 = value->rValue; mod->HSMHV2_lsub2_Given = TRUE; break; case HSMHV2_MOD_LSVDS: mod->HSMHV2_lsvds = value->rValue; mod->HSMHV2_lsvds_Given = TRUE; break; case HSMHV2_MOD_LSVBS: mod->HSMHV2_lsvbs = value->rValue; mod->HSMHV2_lsvbs_Given = TRUE; break; case HSMHV2_MOD_LSVGS: mod->HSMHV2_lsvgs = value->rValue; mod->HSMHV2_lsvgs_Given = TRUE; break; case HSMHV2_MOD_LFN1: mod->HSMHV2_lfn1 = value->rValue; mod->HSMHV2_lfn1_Given = TRUE; break; case HSMHV2_MOD_LFN2: mod->HSMHV2_lfn2 = value->rValue; mod->HSMHV2_lfn2_Given = TRUE; break; case HSMHV2_MOD_LFN3: mod->HSMHV2_lfn3 = value->rValue; mod->HSMHV2_lfn3_Given = TRUE; break; case HSMHV2_MOD_LFVBS: mod->HSMHV2_lfvbs = value->rValue; mod->HSMHV2_lfvbs_Given = TRUE; break; case HSMHV2_MOD_LNSTI: mod->HSMHV2_lnsti = value->rValue; mod->HSMHV2_lnsti_Given = TRUE; break; case HSMHV2_MOD_LWSTI: mod->HSMHV2_lwsti = value->rValue; mod->HSMHV2_lwsti_Given = TRUE; break; case HSMHV2_MOD_LSCSTI1: mod->HSMHV2_lscsti1 = value->rValue; mod->HSMHV2_lscsti1_Given = TRUE; break; case HSMHV2_MOD_LSCSTI2: mod->HSMHV2_lscsti2 = value->rValue; mod->HSMHV2_lscsti2_Given = TRUE; break; case HSMHV2_MOD_LVTHSTI: mod->HSMHV2_lvthsti = value->rValue; mod->HSMHV2_lvthsti_Given = TRUE; break; case HSMHV2_MOD_LMUESTI1: mod->HSMHV2_lmuesti1 = value->rValue; mod->HSMHV2_lmuesti1_Given = TRUE; break; case HSMHV2_MOD_LMUESTI2: mod->HSMHV2_lmuesti2 = value->rValue; mod->HSMHV2_lmuesti2_Given = TRUE; break; case HSMHV2_MOD_LMUESTI3: mod->HSMHV2_lmuesti3 = value->rValue; mod->HSMHV2_lmuesti3_Given = TRUE; break; case HSMHV2_MOD_LNSUBPSTI1: mod->HSMHV2_lnsubpsti1 = value->rValue; mod->HSMHV2_lnsubpsti1_Given = TRUE; break; case HSMHV2_MOD_LNSUBPSTI2: mod->HSMHV2_lnsubpsti2 = value->rValue; mod->HSMHV2_lnsubpsti2_Given = TRUE; break; case HSMHV2_MOD_LNSUBPSTI3: mod->HSMHV2_lnsubpsti3 = value->rValue; mod->HSMHV2_lnsubpsti3_Given = TRUE; break; case HSMHV2_MOD_LCGSO: mod->HSMHV2_lcgso = value->rValue; mod->HSMHV2_lcgso_Given = TRUE; break; case HSMHV2_MOD_LCGDO: mod->HSMHV2_lcgdo = value->rValue; mod->HSMHV2_lcgdo_Given = TRUE; break; case HSMHV2_MOD_LJS0: mod->HSMHV2_ljs0 = value->rValue; mod->HSMHV2_ljs0_Given = TRUE; break; case HSMHV2_MOD_LJS0SW: mod->HSMHV2_ljs0sw = value->rValue; mod->HSMHV2_ljs0sw_Given = TRUE; break; case HSMHV2_MOD_LNJ: mod->HSMHV2_lnj = value->rValue; mod->HSMHV2_lnj_Given = TRUE; break; case HSMHV2_MOD_LCISBK: mod->HSMHV2_lcisbk = value->rValue; mod->HSMHV2_lcisbk_Given = TRUE; break; case HSMHV2_MOD_LCLM1: mod->HSMHV2_lclm1 = value->rValue; mod->HSMHV2_lclm1_Given = TRUE; break; case HSMHV2_MOD_LCLM2: mod->HSMHV2_lclm2 = value->rValue; mod->HSMHV2_lclm2_Given = TRUE; break; case HSMHV2_MOD_LCLM3: mod->HSMHV2_lclm3 = value->rValue; mod->HSMHV2_lclm3_Given = TRUE; break; case HSMHV2_MOD_LWFC: mod->HSMHV2_lwfc = value->rValue; mod->HSMHV2_lwfc_Given = TRUE; break; case HSMHV2_MOD_LGIDL1: mod->HSMHV2_lgidl1 = value->rValue; mod->HSMHV2_lgidl1_Given = TRUE; break; case HSMHV2_MOD_LGIDL2: mod->HSMHV2_lgidl2 = value->rValue; mod->HSMHV2_lgidl2_Given = TRUE; break; case HSMHV2_MOD_LGLEAK1: mod->HSMHV2_lgleak1 = value->rValue; mod->HSMHV2_lgleak1_Given = TRUE; break; case HSMHV2_MOD_LGLEAK2: mod->HSMHV2_lgleak2 = value->rValue; mod->HSMHV2_lgleak2_Given = TRUE; break; case HSMHV2_MOD_LGLEAK3: mod->HSMHV2_lgleak3 = value->rValue; mod->HSMHV2_lgleak3_Given = TRUE; break; case HSMHV2_MOD_LGLEAK6: mod->HSMHV2_lgleak6 = value->rValue; mod->HSMHV2_lgleak6_Given = TRUE; break; case HSMHV2_MOD_LGLKSD1: mod->HSMHV2_lglksd1 = value->rValue; mod->HSMHV2_lglksd1_Given = TRUE; break; case HSMHV2_MOD_LGLKSD2: mod->HSMHV2_lglksd2 = value->rValue; mod->HSMHV2_lglksd2_Given = TRUE; break; case HSMHV2_MOD_LGLKB1: mod->HSMHV2_lglkb1 = value->rValue; mod->HSMHV2_lglkb1_Given = TRUE; break; case HSMHV2_MOD_LGLKB2: mod->HSMHV2_lglkb2 = value->rValue; mod->HSMHV2_lglkb2_Given = TRUE; break; case HSMHV2_MOD_LNFTRP: mod->HSMHV2_lnftrp = value->rValue; mod->HSMHV2_lnftrp_Given = TRUE; break; case HSMHV2_MOD_LNFALP: mod->HSMHV2_lnfalp = value->rValue; mod->HSMHV2_lnfalp_Given = TRUE; break; case HSMHV2_MOD_LVDIFFJ: mod->HSMHV2_lvdiffj = value->rValue; mod->HSMHV2_lvdiffj_Given = TRUE; break; case HSMHV2_MOD_LIBPC1: mod->HSMHV2_libpc1 = value->rValue; mod->HSMHV2_libpc1_Given = TRUE; break; case HSMHV2_MOD_LIBPC2: mod->HSMHV2_libpc2 = value->rValue; mod->HSMHV2_libpc2_Given = TRUE; break; break; case HSMHV2_MOD_LCGBO: mod->HSMHV2_lcgbo = value->rValue; mod->HSMHV2_lcgbo_Given = TRUE; break; case HSMHV2_MOD_LCVDSOVER: mod->HSMHV2_lcvdsover = value->rValue; mod->HSMHV2_lcvdsover_Given = TRUE; break; case HSMHV2_MOD_LFALPH: mod->HSMHV2_lfalph = value->rValue; mod->HSMHV2_lfalph_Given = TRUE; break; case HSMHV2_MOD_LNPEXT: mod->HSMHV2_lnpext = value->rValue; mod->HSMHV2_lnpext_Given = TRUE; break; case HSMHV2_MOD_LPOWRAT: mod->HSMHV2_lpowrat = value->rValue; mod->HSMHV2_lpowrat_Given = TRUE; break; case HSMHV2_MOD_LRD: mod->HSMHV2_lrd = value->rValue; mod->HSMHV2_lrd_Given = TRUE; break; case HSMHV2_MOD_LRD22: mod->HSMHV2_lrd22 = value->rValue; mod->HSMHV2_lrd22_Given = TRUE; break; case HSMHV2_MOD_LRD23: mod->HSMHV2_lrd23 = value->rValue; mod->HSMHV2_lrd23_Given = TRUE; break; case HSMHV2_MOD_LRD24: mod->HSMHV2_lrd24 = value->rValue; mod->HSMHV2_lrd24_Given = TRUE; break; case HSMHV2_MOD_LRDICT1: mod->HSMHV2_lrdict1 = value->rValue; mod->HSMHV2_lrdict1_Given = TRUE; break; case HSMHV2_MOD_LRDOV13: mod->HSMHV2_lrdov13 = value->rValue; mod->HSMHV2_lrdov13_Given = TRUE; break; case HSMHV2_MOD_LRDSLP1: mod->HSMHV2_lrdslp1 = value->rValue; mod->HSMHV2_lrdslp1_Given = TRUE; break; case HSMHV2_MOD_LRDVB: mod->HSMHV2_lrdvb = value->rValue; mod->HSMHV2_lrdvb_Given = TRUE; break; case HSMHV2_MOD_LRDVD: mod->HSMHV2_lrdvd = value->rValue; mod->HSMHV2_lrdvd_Given = TRUE; break; case HSMHV2_MOD_LRDVG11: mod->HSMHV2_lrdvg11 = value->rValue; mod->HSMHV2_lrdvg11_Given = TRUE; break; case HSMHV2_MOD_LRS: mod->HSMHV2_lrs = value->rValue; mod->HSMHV2_lrs_Given = TRUE; break; case HSMHV2_MOD_LRTH0: mod->HSMHV2_lrth0 = value->rValue; mod->HSMHV2_lrth0_Given = TRUE; break; case HSMHV2_MOD_LVOVER: mod->HSMHV2_lvover = value->rValue; mod->HSMHV2_lvover_Given = TRUE; break; case HSMHV2_MOD_LJS0D: mod->HSMHV2_ljs0d = value->rValue; mod->HSMHV2_ljs0d_Given = TRUE; break; case HSMHV2_MOD_LJS0SWD: mod->HSMHV2_ljs0swd = value->rValue; mod->HSMHV2_ljs0swd_Given = TRUE; break; case HSMHV2_MOD_LNJD: mod->HSMHV2_lnjd = value->rValue; mod->HSMHV2_lnjd_Given = TRUE; break; case HSMHV2_MOD_LCISBKD: mod->HSMHV2_lcisbkd = value->rValue; mod->HSMHV2_lcisbkd_Given = TRUE; break; case HSMHV2_MOD_LVDIFFJD: mod->HSMHV2_lvdiffjd = value->rValue; mod->HSMHV2_lvdiffjd_Given = TRUE; break; case HSMHV2_MOD_LJS0S: mod->HSMHV2_ljs0s = value->rValue; mod->HSMHV2_ljs0s_Given = TRUE; break; case HSMHV2_MOD_LJS0SWS: mod->HSMHV2_ljs0sws = value->rValue; mod->HSMHV2_ljs0sws_Given = TRUE; break; case HSMHV2_MOD_LNJS: mod->HSMHV2_lnjs = value->rValue; mod->HSMHV2_lnjs_Given = TRUE; break; case HSMHV2_MOD_LCISBKS: mod->HSMHV2_lcisbks = value->rValue; mod->HSMHV2_lcisbks_Given = TRUE; break; case HSMHV2_MOD_LVDIFFJS: mod->HSMHV2_lvdiffjs = value->rValue; mod->HSMHV2_lvdiffjs_Given = TRUE; break; /* Width dependence */ case HSMHV2_MOD_WVMAX: mod->HSMHV2_wvmax = value->rValue; mod->HSMHV2_wvmax_Given = TRUE; break; case HSMHV2_MOD_WBGTMP1: mod->HSMHV2_wbgtmp1 = value->rValue; mod->HSMHV2_wbgtmp1_Given = TRUE; break; case HSMHV2_MOD_WBGTMP2: mod->HSMHV2_wbgtmp2 = value->rValue; mod->HSMHV2_wbgtmp2_Given = TRUE; break; case HSMHV2_MOD_WEG0: mod->HSMHV2_weg0 = value->rValue; mod->HSMHV2_weg0_Given = TRUE; break; case HSMHV2_MOD_WVFBOVER: mod->HSMHV2_wvfbover = value->rValue; mod->HSMHV2_wvfbover_Given = TRUE; break; case HSMHV2_MOD_WNOVER: mod->HSMHV2_wnover = value->rValue; mod->HSMHV2_wnover_Given = TRUE; break; case HSMHV2_MOD_WNOVERS: mod->HSMHV2_wnovers = value->rValue; mod->HSMHV2_wnovers_Given = TRUE; break; case HSMHV2_MOD_WWL2: mod->HSMHV2_wwl2 = value->rValue; mod->HSMHV2_wwl2_Given = TRUE; break; case HSMHV2_MOD_WVFBC: mod->HSMHV2_wvfbc = value->rValue; mod->HSMHV2_wvfbc_Given = TRUE; break; case HSMHV2_MOD_WNSUBC: mod->HSMHV2_wnsubc = value->rValue; mod->HSMHV2_wnsubc_Given = TRUE; break; case HSMHV2_MOD_WNSUBP: mod->HSMHV2_wnsubp = value->rValue; mod->HSMHV2_wnsubp_Given = TRUE; break; case HSMHV2_MOD_WSCP1: mod->HSMHV2_wscp1 = value->rValue; mod->HSMHV2_wscp1_Given = TRUE; break; case HSMHV2_MOD_WSCP2: mod->HSMHV2_wscp2 = value->rValue; mod->HSMHV2_wscp2_Given = TRUE; break; case HSMHV2_MOD_WSCP3: mod->HSMHV2_wscp3 = value->rValue; mod->HSMHV2_wscp3_Given = TRUE; break; case HSMHV2_MOD_WSC1: mod->HSMHV2_wsc1 = value->rValue; mod->HSMHV2_wsc1_Given = TRUE; break; case HSMHV2_MOD_WSC2: mod->HSMHV2_wsc2 = value->rValue; mod->HSMHV2_wsc2_Given = TRUE; break; case HSMHV2_MOD_WSC3: mod->HSMHV2_wsc3 = value->rValue; mod->HSMHV2_wsc3_Given = TRUE; break; case HSMHV2_MOD_WPGD1: mod->HSMHV2_wpgd1 = value->rValue; mod->HSMHV2_wpgd1_Given = TRUE; break; case HSMHV2_MOD_WNDEP: mod->HSMHV2_wndep = value->rValue; mod->HSMHV2_wndep_Given = TRUE; break; case HSMHV2_MOD_WNINV: mod->HSMHV2_wninv = value->rValue; mod->HSMHV2_wninv_Given = TRUE; break; case HSMHV2_MOD_WMUECB0: mod->HSMHV2_wmuecb0 = value->rValue; mod->HSMHV2_wmuecb0_Given = TRUE; break; case HSMHV2_MOD_WMUECB1: mod->HSMHV2_wmuecb1 = value->rValue; mod->HSMHV2_wmuecb1_Given = TRUE; break; case HSMHV2_MOD_WMUEPH1: mod->HSMHV2_wmueph1 = value->rValue; mod->HSMHV2_wmueph1_Given = TRUE; break; case HSMHV2_MOD_WVTMP: mod->HSMHV2_wvtmp = value->rValue; mod->HSMHV2_wvtmp_Given = TRUE; break; case HSMHV2_MOD_WWVTH0: mod->HSMHV2_wwvth0 = value->rValue; mod->HSMHV2_wwvth0_Given = TRUE; break; case HSMHV2_MOD_WMUESR1: mod->HSMHV2_wmuesr1 = value->rValue; mod->HSMHV2_wmuesr1_Given = TRUE; break; case HSMHV2_MOD_WMUETMP: mod->HSMHV2_wmuetmp = value->rValue; mod->HSMHV2_wmuetmp_Given = TRUE; break; case HSMHV2_MOD_WSUB1: mod->HSMHV2_wsub1 = value->rValue; mod->HSMHV2_wsub1_Given = TRUE; break; case HSMHV2_MOD_WSUB2: mod->HSMHV2_wsub2 = value->rValue; mod->HSMHV2_wsub2_Given = TRUE; break; case HSMHV2_MOD_WSVDS: mod->HSMHV2_wsvds = value->rValue; mod->HSMHV2_wsvds_Given = TRUE; break; case HSMHV2_MOD_WSVBS: mod->HSMHV2_wsvbs = value->rValue; mod->HSMHV2_wsvbs_Given = TRUE; break; case HSMHV2_MOD_WSVGS: mod->HSMHV2_wsvgs = value->rValue; mod->HSMHV2_wsvgs_Given = TRUE; break; case HSMHV2_MOD_WFN1: mod->HSMHV2_wfn1 = value->rValue; mod->HSMHV2_wfn1_Given = TRUE; break; case HSMHV2_MOD_WFN2: mod->HSMHV2_wfn2 = value->rValue; mod->HSMHV2_wfn2_Given = TRUE; break; case HSMHV2_MOD_WFN3: mod->HSMHV2_wfn3 = value->rValue; mod->HSMHV2_wfn3_Given = TRUE; break; case HSMHV2_MOD_WFVBS: mod->HSMHV2_wfvbs = value->rValue; mod->HSMHV2_wfvbs_Given = TRUE; break; case HSMHV2_MOD_WNSTI: mod->HSMHV2_wnsti = value->rValue; mod->HSMHV2_wnsti_Given = TRUE; break; case HSMHV2_MOD_WWSTI: mod->HSMHV2_wwsti = value->rValue; mod->HSMHV2_wwsti_Given = TRUE; break; case HSMHV2_MOD_WSCSTI1: mod->HSMHV2_wscsti1 = value->rValue; mod->HSMHV2_wscsti1_Given = TRUE; break; case HSMHV2_MOD_WSCSTI2: mod->HSMHV2_wscsti2 = value->rValue; mod->HSMHV2_wscsti2_Given = TRUE; break; case HSMHV2_MOD_WVTHSTI: mod->HSMHV2_wvthsti = value->rValue; mod->HSMHV2_wvthsti_Given = TRUE; break; case HSMHV2_MOD_WMUESTI1: mod->HSMHV2_wmuesti1 = value->rValue; mod->HSMHV2_wmuesti1_Given = TRUE; break; case HSMHV2_MOD_WMUESTI2: mod->HSMHV2_wmuesti2 = value->rValue; mod->HSMHV2_wmuesti2_Given = TRUE; break; case HSMHV2_MOD_WMUESTI3: mod->HSMHV2_wmuesti3 = value->rValue; mod->HSMHV2_wmuesti3_Given = TRUE; break; case HSMHV2_MOD_WNSUBPSTI1: mod->HSMHV2_wnsubpsti1 = value->rValue; mod->HSMHV2_wnsubpsti1_Given = TRUE; break; case HSMHV2_MOD_WNSUBPSTI2: mod->HSMHV2_wnsubpsti2 = value->rValue; mod->HSMHV2_wnsubpsti2_Given = TRUE; break; case HSMHV2_MOD_WNSUBPSTI3: mod->HSMHV2_wnsubpsti3 = value->rValue; mod->HSMHV2_wnsubpsti3_Given = TRUE; break; case HSMHV2_MOD_WCGSO: mod->HSMHV2_wcgso = value->rValue; mod->HSMHV2_wcgso_Given = TRUE; break; case HSMHV2_MOD_WCGDO: mod->HSMHV2_wcgdo = value->rValue; mod->HSMHV2_wcgdo_Given = TRUE; break; case HSMHV2_MOD_WJS0: mod->HSMHV2_wjs0 = value->rValue; mod->HSMHV2_wjs0_Given = TRUE; break; case HSMHV2_MOD_WJS0SW: mod->HSMHV2_wjs0sw = value->rValue; mod->HSMHV2_wjs0sw_Given = TRUE; break; case HSMHV2_MOD_WNJ: mod->HSMHV2_wnj = value->rValue; mod->HSMHV2_wnj_Given = TRUE; break; case HSMHV2_MOD_WCISBK: mod->HSMHV2_wcisbk = value->rValue; mod->HSMHV2_wcisbk_Given = TRUE; break; case HSMHV2_MOD_WCLM1: mod->HSMHV2_wclm1 = value->rValue; mod->HSMHV2_wclm1_Given = TRUE; break; case HSMHV2_MOD_WCLM2: mod->HSMHV2_wclm2 = value->rValue; mod->HSMHV2_wclm2_Given = TRUE; break; case HSMHV2_MOD_WCLM3: mod->HSMHV2_wclm3 = value->rValue; mod->HSMHV2_wclm3_Given = TRUE; break; case HSMHV2_MOD_WWFC: mod->HSMHV2_wwfc = value->rValue; mod->HSMHV2_wwfc_Given = TRUE; break; case HSMHV2_MOD_WGIDL1: mod->HSMHV2_wgidl1 = value->rValue; mod->HSMHV2_wgidl1_Given = TRUE; break; case HSMHV2_MOD_WGIDL2: mod->HSMHV2_wgidl2 = value->rValue; mod->HSMHV2_wgidl2_Given = TRUE; break; case HSMHV2_MOD_WGLEAK1: mod->HSMHV2_wgleak1 = value->rValue; mod->HSMHV2_wgleak1_Given = TRUE; break; case HSMHV2_MOD_WGLEAK2: mod->HSMHV2_wgleak2 = value->rValue; mod->HSMHV2_wgleak2_Given = TRUE; break; case HSMHV2_MOD_WGLEAK3: mod->HSMHV2_wgleak3 = value->rValue; mod->HSMHV2_wgleak3_Given = TRUE; break; case HSMHV2_MOD_WGLEAK6: mod->HSMHV2_wgleak6 = value->rValue; mod->HSMHV2_wgleak6_Given = TRUE; break; case HSMHV2_MOD_WGLKSD1: mod->HSMHV2_wglksd1 = value->rValue; mod->HSMHV2_wglksd1_Given = TRUE; break; case HSMHV2_MOD_WGLKSD2: mod->HSMHV2_wglksd2 = value->rValue; mod->HSMHV2_wglksd2_Given = TRUE; break; case HSMHV2_MOD_WGLKB1: mod->HSMHV2_wglkb1 = value->rValue; mod->HSMHV2_wglkb1_Given = TRUE; break; case HSMHV2_MOD_WGLKB2: mod->HSMHV2_wglkb2 = value->rValue; mod->HSMHV2_wglkb2_Given = TRUE; break; case HSMHV2_MOD_WNFTRP: mod->HSMHV2_wnftrp = value->rValue; mod->HSMHV2_wnftrp_Given = TRUE; break; case HSMHV2_MOD_WNFALP: mod->HSMHV2_wnfalp = value->rValue; mod->HSMHV2_wnfalp_Given = TRUE; break; case HSMHV2_MOD_WVDIFFJ: mod->HSMHV2_wvdiffj = value->rValue; mod->HSMHV2_wvdiffj_Given = TRUE; break; case HSMHV2_MOD_WIBPC1: mod->HSMHV2_wibpc1 = value->rValue; mod->HSMHV2_wibpc1_Given = TRUE; break; case HSMHV2_MOD_WIBPC2: mod->HSMHV2_wibpc2 = value->rValue; mod->HSMHV2_wibpc2_Given = TRUE; break; break; case HSMHV2_MOD_WCGBO: mod->HSMHV2_wcgbo = value->rValue; mod->HSMHV2_wcgbo_Given = TRUE; break; case HSMHV2_MOD_WCVDSOVER: mod->HSMHV2_wcvdsover = value->rValue; mod->HSMHV2_wcvdsover_Given = TRUE; break; case HSMHV2_MOD_WFALPH: mod->HSMHV2_wfalph = value->rValue; mod->HSMHV2_wfalph_Given = TRUE; break; case HSMHV2_MOD_WNPEXT: mod->HSMHV2_wnpext = value->rValue; mod->HSMHV2_wnpext_Given = TRUE; break; case HSMHV2_MOD_WPOWRAT: mod->HSMHV2_wpowrat = value->rValue; mod->HSMHV2_wpowrat_Given = TRUE; break; case HSMHV2_MOD_WRD: mod->HSMHV2_wrd = value->rValue; mod->HSMHV2_wrd_Given = TRUE; break; case HSMHV2_MOD_WRD22: mod->HSMHV2_wrd22 = value->rValue; mod->HSMHV2_wrd22_Given = TRUE; break; case HSMHV2_MOD_WRD23: mod->HSMHV2_wrd23 = value->rValue; mod->HSMHV2_wrd23_Given = TRUE; break; case HSMHV2_MOD_WRD24: mod->HSMHV2_wrd24 = value->rValue; mod->HSMHV2_wrd24_Given = TRUE; break; case HSMHV2_MOD_WRDICT1: mod->HSMHV2_wrdict1 = value->rValue; mod->HSMHV2_wrdict1_Given = TRUE; break; case HSMHV2_MOD_WRDOV13: mod->HSMHV2_wrdov13 = value->rValue; mod->HSMHV2_wrdov13_Given = TRUE; break; case HSMHV2_MOD_WRDSLP1: mod->HSMHV2_wrdslp1 = value->rValue; mod->HSMHV2_wrdslp1_Given = TRUE; break; case HSMHV2_MOD_WRDVB: mod->HSMHV2_wrdvb = value->rValue; mod->HSMHV2_wrdvb_Given = TRUE; break; case HSMHV2_MOD_WRDVD: mod->HSMHV2_wrdvd = value->rValue; mod->HSMHV2_wrdvd_Given = TRUE; break; case HSMHV2_MOD_WRDVG11: mod->HSMHV2_wrdvg11 = value->rValue; mod->HSMHV2_wrdvg11_Given = TRUE; break; case HSMHV2_MOD_WRS: mod->HSMHV2_wrs = value->rValue; mod->HSMHV2_wrs_Given = TRUE; break; case HSMHV2_MOD_WRTH0: mod->HSMHV2_wrth0 = value->rValue; mod->HSMHV2_wrth0_Given = TRUE; break; case HSMHV2_MOD_WVOVER: mod->HSMHV2_wvover = value->rValue; mod->HSMHV2_wvover_Given = TRUE; break; case HSMHV2_MOD_WJS0D: mod->HSMHV2_wjs0d = value->rValue; mod->HSMHV2_wjs0d_Given = TRUE; break; case HSMHV2_MOD_WJS0SWD: mod->HSMHV2_wjs0swd = value->rValue; mod->HSMHV2_wjs0swd_Given = TRUE; break; case HSMHV2_MOD_WNJD: mod->HSMHV2_wnjd = value->rValue; mod->HSMHV2_wnjd_Given = TRUE; break; case HSMHV2_MOD_WCISBKD: mod->HSMHV2_wcisbkd = value->rValue; mod->HSMHV2_wcisbkd_Given = TRUE; break; case HSMHV2_MOD_WVDIFFJD: mod->HSMHV2_wvdiffjd = value->rValue; mod->HSMHV2_wvdiffjd_Given = TRUE; break; case HSMHV2_MOD_WJS0S: mod->HSMHV2_wjs0s = value->rValue; mod->HSMHV2_wjs0s_Given = TRUE; break; case HSMHV2_MOD_WJS0SWS: mod->HSMHV2_wjs0sws = value->rValue; mod->HSMHV2_wjs0sws_Given = TRUE; break; case HSMHV2_MOD_WNJS: mod->HSMHV2_wnjs = value->rValue; mod->HSMHV2_wnjs_Given = TRUE; break; case HSMHV2_MOD_WCISBKS: mod->HSMHV2_wcisbks = value->rValue; mod->HSMHV2_wcisbks_Given = TRUE; break; case HSMHV2_MOD_WVDIFFJS: mod->HSMHV2_wvdiffjs = value->rValue; mod->HSMHV2_wvdiffjs_Given = TRUE; break; /* Cross-term dependence */ case HSMHV2_MOD_PVMAX: mod->HSMHV2_pvmax = value->rValue; mod->HSMHV2_pvmax_Given = TRUE; break; case HSMHV2_MOD_PBGTMP1: mod->HSMHV2_pbgtmp1 = value->rValue; mod->HSMHV2_pbgtmp1_Given = TRUE; break; case HSMHV2_MOD_PBGTMP2: mod->HSMHV2_pbgtmp2 = value->rValue; mod->HSMHV2_pbgtmp2_Given = TRUE; break; case HSMHV2_MOD_PEG0: mod->HSMHV2_peg0 = value->rValue; mod->HSMHV2_peg0_Given = TRUE; break; case HSMHV2_MOD_PVFBOVER: mod->HSMHV2_pvfbover = value->rValue; mod->HSMHV2_pvfbover_Given = TRUE; break; case HSMHV2_MOD_PNOVER: mod->HSMHV2_pnover = value->rValue; mod->HSMHV2_pnover_Given = TRUE; break; case HSMHV2_MOD_PNOVERS: mod->HSMHV2_pnovers = value->rValue; mod->HSMHV2_pnovers_Given = TRUE; break; case HSMHV2_MOD_PWL2: mod->HSMHV2_pwl2 = value->rValue; mod->HSMHV2_pwl2_Given = TRUE; break; case HSMHV2_MOD_PVFBC: mod->HSMHV2_pvfbc = value->rValue; mod->HSMHV2_pvfbc_Given = TRUE; break; case HSMHV2_MOD_PNSUBC: mod->HSMHV2_pnsubc = value->rValue; mod->HSMHV2_pnsubc_Given = TRUE; break; case HSMHV2_MOD_PNSUBP: mod->HSMHV2_pnsubp = value->rValue; mod->HSMHV2_pnsubp_Given = TRUE; break; case HSMHV2_MOD_PSCP1: mod->HSMHV2_pscp1 = value->rValue; mod->HSMHV2_pscp1_Given = TRUE; break; case HSMHV2_MOD_PSCP2: mod->HSMHV2_pscp2 = value->rValue; mod->HSMHV2_pscp2_Given = TRUE; break; case HSMHV2_MOD_PSCP3: mod->HSMHV2_pscp3 = value->rValue; mod->HSMHV2_pscp3_Given = TRUE; break; case HSMHV2_MOD_PSC1: mod->HSMHV2_psc1 = value->rValue; mod->HSMHV2_psc1_Given = TRUE; break; case HSMHV2_MOD_PSC2: mod->HSMHV2_psc2 = value->rValue; mod->HSMHV2_psc2_Given = TRUE; break; case HSMHV2_MOD_PSC3: mod->HSMHV2_psc3 = value->rValue; mod->HSMHV2_psc3_Given = TRUE; break; case HSMHV2_MOD_PPGD1: mod->HSMHV2_ppgd1 = value->rValue; mod->HSMHV2_ppgd1_Given = TRUE; break; case HSMHV2_MOD_PNDEP: mod->HSMHV2_pndep = value->rValue; mod->HSMHV2_pndep_Given = TRUE; break; case HSMHV2_MOD_PNINV: mod->HSMHV2_pninv = value->rValue; mod->HSMHV2_pninv_Given = TRUE; break; case HSMHV2_MOD_PMUECB0: mod->HSMHV2_pmuecb0 = value->rValue; mod->HSMHV2_pmuecb0_Given = TRUE; break; case HSMHV2_MOD_PMUECB1: mod->HSMHV2_pmuecb1 = value->rValue; mod->HSMHV2_pmuecb1_Given = TRUE; break; case HSMHV2_MOD_PMUEPH1: mod->HSMHV2_pmueph1 = value->rValue; mod->HSMHV2_pmueph1_Given = TRUE; break; case HSMHV2_MOD_PVTMP: mod->HSMHV2_pvtmp = value->rValue; mod->HSMHV2_pvtmp_Given = TRUE; break; case HSMHV2_MOD_PWVTH0: mod->HSMHV2_pwvth0 = value->rValue; mod->HSMHV2_pwvth0_Given = TRUE; break; case HSMHV2_MOD_PMUESR1: mod->HSMHV2_pmuesr1 = value->rValue; mod->HSMHV2_pmuesr1_Given = TRUE; break; case HSMHV2_MOD_PMUETMP: mod->HSMHV2_pmuetmp = value->rValue; mod->HSMHV2_pmuetmp_Given = TRUE; break; case HSMHV2_MOD_PSUB1: mod->HSMHV2_psub1 = value->rValue; mod->HSMHV2_psub1_Given = TRUE; break; case HSMHV2_MOD_PSUB2: mod->HSMHV2_psub2 = value->rValue; mod->HSMHV2_psub2_Given = TRUE; break; case HSMHV2_MOD_PSVDS: mod->HSMHV2_psvds = value->rValue; mod->HSMHV2_psvds_Given = TRUE; break; case HSMHV2_MOD_PSVBS: mod->HSMHV2_psvbs = value->rValue; mod->HSMHV2_psvbs_Given = TRUE; break; case HSMHV2_MOD_PSVGS: mod->HSMHV2_psvgs = value->rValue; mod->HSMHV2_psvgs_Given = TRUE; break; case HSMHV2_MOD_PFN1: mod->HSMHV2_pfn1 = value->rValue; mod->HSMHV2_pfn1_Given = TRUE; break; case HSMHV2_MOD_PFN2: mod->HSMHV2_pfn2 = value->rValue; mod->HSMHV2_pfn2_Given = TRUE; break; case HSMHV2_MOD_PFN3: mod->HSMHV2_pfn3 = value->rValue; mod->HSMHV2_pfn3_Given = TRUE; break; case HSMHV2_MOD_PFVBS: mod->HSMHV2_pfvbs = value->rValue; mod->HSMHV2_pfvbs_Given = TRUE; break; case HSMHV2_MOD_PNSTI: mod->HSMHV2_pnsti = value->rValue; mod->HSMHV2_pnsti_Given = TRUE; break; case HSMHV2_MOD_PWSTI: mod->HSMHV2_pwsti = value->rValue; mod->HSMHV2_pwsti_Given = TRUE; break; case HSMHV2_MOD_PSCSTI1: mod->HSMHV2_pscsti1 = value->rValue; mod->HSMHV2_pscsti1_Given = TRUE; break; case HSMHV2_MOD_PSCSTI2: mod->HSMHV2_pscsti2 = value->rValue; mod->HSMHV2_pscsti2_Given = TRUE; break; case HSMHV2_MOD_PVTHSTI: mod->HSMHV2_pvthsti = value->rValue; mod->HSMHV2_pvthsti_Given = TRUE; break; case HSMHV2_MOD_PMUESTI1: mod->HSMHV2_pmuesti1 = value->rValue; mod->HSMHV2_pmuesti1_Given = TRUE; break; case HSMHV2_MOD_PMUESTI2: mod->HSMHV2_pmuesti2 = value->rValue; mod->HSMHV2_pmuesti2_Given = TRUE; break; case HSMHV2_MOD_PMUESTI3: mod->HSMHV2_pmuesti3 = value->rValue; mod->HSMHV2_pmuesti3_Given = TRUE; break; case HSMHV2_MOD_PNSUBPSTI1: mod->HSMHV2_pnsubpsti1 = value->rValue; mod->HSMHV2_pnsubpsti1_Given = TRUE; break; case HSMHV2_MOD_PNSUBPSTI2: mod->HSMHV2_pnsubpsti2 = value->rValue; mod->HSMHV2_pnsubpsti2_Given = TRUE; break; case HSMHV2_MOD_PNSUBPSTI3: mod->HSMHV2_pnsubpsti3 = value->rValue; mod->HSMHV2_pnsubpsti3_Given = TRUE; break; case HSMHV2_MOD_PCGSO: mod->HSMHV2_pcgso = value->rValue; mod->HSMHV2_pcgso_Given = TRUE; break; case HSMHV2_MOD_PCGDO: mod->HSMHV2_pcgdo = value->rValue; mod->HSMHV2_pcgdo_Given = TRUE; break; case HSMHV2_MOD_PJS0: mod->HSMHV2_pjs0 = value->rValue; mod->HSMHV2_pjs0_Given = TRUE; break; case HSMHV2_MOD_PJS0SW: mod->HSMHV2_pjs0sw = value->rValue; mod->HSMHV2_pjs0sw_Given = TRUE; break; case HSMHV2_MOD_PNJ: mod->HSMHV2_pnj = value->rValue; mod->HSMHV2_pnj_Given = TRUE; break; case HSMHV2_MOD_PCISBK: mod->HSMHV2_pcisbk = value->rValue; mod->HSMHV2_pcisbk_Given = TRUE; break; case HSMHV2_MOD_PCLM1: mod->HSMHV2_pclm1 = value->rValue; mod->HSMHV2_pclm1_Given = TRUE; break; case HSMHV2_MOD_PCLM2: mod->HSMHV2_pclm2 = value->rValue; mod->HSMHV2_pclm2_Given = TRUE; break; case HSMHV2_MOD_PCLM3: mod->HSMHV2_pclm3 = value->rValue; mod->HSMHV2_pclm3_Given = TRUE; break; case HSMHV2_MOD_PWFC: mod->HSMHV2_pwfc = value->rValue; mod->HSMHV2_pwfc_Given = TRUE; break; case HSMHV2_MOD_PGIDL1: mod->HSMHV2_pgidl1 = value->rValue; mod->HSMHV2_pgidl1_Given = TRUE; break; case HSMHV2_MOD_PGIDL2: mod->HSMHV2_pgidl2 = value->rValue; mod->HSMHV2_pgidl2_Given = TRUE; break; case HSMHV2_MOD_PGLEAK1: mod->HSMHV2_pgleak1 = value->rValue; mod->HSMHV2_pgleak1_Given = TRUE; break; case HSMHV2_MOD_PGLEAK2: mod->HSMHV2_pgleak2 = value->rValue; mod->HSMHV2_pgleak2_Given = TRUE; break; case HSMHV2_MOD_PGLEAK3: mod->HSMHV2_pgleak3 = value->rValue; mod->HSMHV2_pgleak3_Given = TRUE; break; case HSMHV2_MOD_PGLEAK6: mod->HSMHV2_pgleak6 = value->rValue; mod->HSMHV2_pgleak6_Given = TRUE; break; case HSMHV2_MOD_PGLKSD1: mod->HSMHV2_pglksd1 = value->rValue; mod->HSMHV2_pglksd1_Given = TRUE; break; case HSMHV2_MOD_PGLKSD2: mod->HSMHV2_pglksd2 = value->rValue; mod->HSMHV2_pglksd2_Given = TRUE; break; case HSMHV2_MOD_PGLKB1: mod->HSMHV2_pglkb1 = value->rValue; mod->HSMHV2_pglkb1_Given = TRUE; break; case HSMHV2_MOD_PGLKB2: mod->HSMHV2_pglkb2 = value->rValue; mod->HSMHV2_pglkb2_Given = TRUE; break; case HSMHV2_MOD_PNFTRP: mod->HSMHV2_pnftrp = value->rValue; mod->HSMHV2_pnftrp_Given = TRUE; break; case HSMHV2_MOD_PNFALP: mod->HSMHV2_pnfalp = value->rValue; mod->HSMHV2_pnfalp_Given = TRUE; break; case HSMHV2_MOD_PVDIFFJ: mod->HSMHV2_pvdiffj = value->rValue; mod->HSMHV2_pvdiffj_Given = TRUE; break; case HSMHV2_MOD_PIBPC1: mod->HSMHV2_pibpc1 = value->rValue; mod->HSMHV2_pibpc1_Given = TRUE; break; case HSMHV2_MOD_PIBPC2: mod->HSMHV2_pibpc2 = value->rValue; mod->HSMHV2_pibpc2_Given = TRUE; break; break; case HSMHV2_MOD_PCGBO: mod->HSMHV2_pcgbo = value->rValue; mod->HSMHV2_pcgbo_Given = TRUE; break; case HSMHV2_MOD_PCVDSOVER: mod->HSMHV2_pcvdsover = value->rValue; mod->HSMHV2_pcvdsover_Given = TRUE; break; case HSMHV2_MOD_PFALPH: mod->HSMHV2_pfalph = value->rValue; mod->HSMHV2_pfalph_Given = TRUE; break; case HSMHV2_MOD_PNPEXT: mod->HSMHV2_pnpext = value->rValue; mod->HSMHV2_pnpext_Given = TRUE; break; case HSMHV2_MOD_PPOWRAT: mod->HSMHV2_ppowrat = value->rValue; mod->HSMHV2_ppowrat_Given = TRUE; break; case HSMHV2_MOD_PRD: mod->HSMHV2_prd = value->rValue; mod->HSMHV2_prd_Given = TRUE; break; case HSMHV2_MOD_PRD22: mod->HSMHV2_prd22 = value->rValue; mod->HSMHV2_prd22_Given = TRUE; break; case HSMHV2_MOD_PRD23: mod->HSMHV2_prd23 = value->rValue; mod->HSMHV2_prd23_Given = TRUE; break; case HSMHV2_MOD_PRD24: mod->HSMHV2_prd24 = value->rValue; mod->HSMHV2_prd24_Given = TRUE; break; case HSMHV2_MOD_PRDICT1: mod->HSMHV2_prdict1 = value->rValue; mod->HSMHV2_prdict1_Given = TRUE; break; case HSMHV2_MOD_PRDOV13: mod->HSMHV2_prdov13 = value->rValue; mod->HSMHV2_prdov13_Given = TRUE; break; case HSMHV2_MOD_PRDSLP1: mod->HSMHV2_prdslp1 = value->rValue; mod->HSMHV2_prdslp1_Given = TRUE; break; case HSMHV2_MOD_PRDVB: mod->HSMHV2_prdvb = value->rValue; mod->HSMHV2_prdvb_Given = TRUE; break; case HSMHV2_MOD_PRDVD: mod->HSMHV2_prdvd = value->rValue; mod->HSMHV2_prdvd_Given = TRUE; break; case HSMHV2_MOD_PRDVG11: mod->HSMHV2_prdvg11 = value->rValue; mod->HSMHV2_prdvg11_Given = TRUE; break; case HSMHV2_MOD_PRS: mod->HSMHV2_prs = value->rValue; mod->HSMHV2_prs_Given = TRUE; break; case HSMHV2_MOD_PRTH0: mod->HSMHV2_prth0 = value->rValue; mod->HSMHV2_prth0_Given = TRUE; break; case HSMHV2_MOD_PVOVER: mod->HSMHV2_pvover = value->rValue; mod->HSMHV2_pvover_Given = TRUE; break; case HSMHV2_MOD_PJS0D: mod->HSMHV2_pjs0d = value->rValue; mod->HSMHV2_pjs0d_Given = TRUE; break; case HSMHV2_MOD_PJS0SWD: mod->HSMHV2_pjs0swd = value->rValue; mod->HSMHV2_pjs0swd_Given = TRUE; break; case HSMHV2_MOD_PNJD: mod->HSMHV2_pnjd = value->rValue; mod->HSMHV2_pnjd_Given = TRUE; break; case HSMHV2_MOD_PCISBKD: mod->HSMHV2_pcisbkd = value->rValue; mod->HSMHV2_pcisbkd_Given = TRUE; break; case HSMHV2_MOD_PVDIFFJD: mod->HSMHV2_pvdiffjd = value->rValue; mod->HSMHV2_pvdiffjd_Given = TRUE; break; case HSMHV2_MOD_PJS0S: mod->HSMHV2_pjs0s = value->rValue; mod->HSMHV2_pjs0s_Given = TRUE; break; case HSMHV2_MOD_PJS0SWS: mod->HSMHV2_pjs0sws = value->rValue; mod->HSMHV2_pjs0sws_Given = TRUE; break; case HSMHV2_MOD_PNJS: mod->HSMHV2_pnjs = value->rValue; mod->HSMHV2_pnjs_Given = TRUE; break; case HSMHV2_MOD_PCISBKS: mod->HSMHV2_pcisbks = value->rValue; mod->HSMHV2_pcisbks_Given = TRUE; break; case HSMHV2_MOD_PVDIFFJS: mod->HSMHV2_pvdiffjs = value->rValue; mod->HSMHV2_pvdiffjs_Given = TRUE; break; case HSMHV2_MOD_NDEPM: mod->HSMHV2_ndepm = value->rValue; mod->HSMHV2_ndepm_Given = TRUE; break; case HSMHV2_MOD_TNDEP: mod->HSMHV2_tndep = value->rValue; mod->HSMHV2_tndep_Given = TRUE; break; case HSMHV2_MOD_DEPMUE0: mod->HSMHV2_depmue0 = value->rValue; mod->HSMHV2_depmue0_Given = TRUE; break; case HSMHV2_MOD_DEPMUE1: mod->HSMHV2_depmue1 = value->rValue; mod->HSMHV2_depmue1_Given = TRUE; break; case HSMHV2_MOD_DEPMUEBACK0: mod->HSMHV2_depmueback0 = value->rValue; mod->HSMHV2_depmueback0_Given = TRUE; break; case HSMHV2_MOD_DEPMUEBACK1: mod->HSMHV2_depmueback1 = value->rValue; mod->HSMHV2_depmueback1_Given = TRUE; break; case HSMHV2_MOD_DEPLEAK: mod->HSMHV2_depleak = value->rValue; mod->HSMHV2_depleak_Given = TRUE; break; case HSMHV2_MOD_DEPETA: mod->HSMHV2_depeta = value->rValue; mod->HSMHV2_depeta_Given = TRUE; break; case HSMHV2_MOD_DEPVMAX: mod->HSMHV2_depvmax = value->rValue; mod->HSMHV2_depvmax_Given = TRUE; break; case HSMHV2_MOD_DEPVDSEF1: mod->HSMHV2_depvdsef1 = value->rValue; mod->HSMHV2_depvdsef1_Given = TRUE; break; case HSMHV2_MOD_DEPVDSEF2: mod->HSMHV2_depvdsef2 = value->rValue; mod->HSMHV2_depvdsef2_Given = TRUE; break; case HSMHV2_MOD_DEPMUEPH0: mod->HSMHV2_depmueph0 = value->rValue; mod->HSMHV2_depmueph0_Given = TRUE; break; case HSMHV2_MOD_DEPMUEPH1: mod->HSMHV2_depmueph1 = value->rValue; mod->HSMHV2_depmueph1_Given = TRUE; break; case HSMHV2_MOD_DEPBB: mod->HSMHV2_depbb = value->rValue; mod->HSMHV2_depbb_Given = TRUE; break; case HSMHV2_MOD_DEPVTMP: mod->HSMHV2_depvtmp = value->rValue; mod->HSMHV2_depvtmp_Given = TRUE; break; case HSMHV2_MOD_DEPMUETMP: mod->HSMHV2_depmuetmp = value->rValue; mod->HSMHV2_depmuetmp_Given = TRUE; break; case HSMHV2_MOD_ISBREAK: mod->HSMHV2_isbreak = value->rValue; mod->HSMHV2_isbreak_Given = TRUE; break; case HSMHV2_MOD_RWELL: mod->HSMHV2_rwell = value->rValue; mod->HSMHV2_rwell_Given = TRUE; break; case HSMHV2_MOD_VGS_MAX: mod->HSMHV2vgsMax = value->rValue; mod->HSMHV2vgsMaxGiven = TRUE; break; case HSMHV2_MOD_VGD_MAX: mod->HSMHV2vgdMax = value->rValue; mod->HSMHV2vgdMaxGiven = TRUE; break; case HSMHV2_MOD_VGB_MAX: mod->HSMHV2vgbMax = value->rValue; mod->HSMHV2vgbMaxGiven = TRUE; break; case HSMHV2_MOD_VDS_MAX: mod->HSMHV2vdsMax = value->rValue; mod->HSMHV2vdsMaxGiven = TRUE; break; case HSMHV2_MOD_VBS_MAX: mod->HSMHV2vbsMax = value->rValue; mod->HSMHV2vbsMaxGiven = TRUE; break; case HSMHV2_MOD_VBD_MAX: mod->HSMHV2vbdMax = value->rValue; mod->HSMHV2vbdMaxGiven = TRUE; break; case HSMHV2_MOD_VGSR_MAX: mod->HSMHV2vgsrMax = value->rValue; mod->HSMHV2vgsrMaxGiven = TRUE; break; case HSMHV2_MOD_VGDR_MAX: mod->HSMHV2vgdrMax = value->rValue; mod->HSMHV2vgdrMaxGiven = TRUE; break; case HSMHV2_MOD_VGBR_MAX: mod->HSMHV2vgbrMax = value->rValue; mod->HSMHV2vgbrMaxGiven = TRUE; break; case HSMHV2_MOD_VBSR_MAX: mod->HSMHV2vbsrMax = value->rValue; mod->HSMHV2vbsrMaxGiven = TRUE; break; case HSMHV2_MOD_VBDR_MAX: mod->HSMHV2vbdrMax = value->rValue; mod->HSMHV2vbdrMaxGiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2itf.h0000644000175000017500000000465713546075722023013 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhvitf DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ #ifndef DEV_HISIMHV2 #define DEV_HISIMHV2 SPICEdev *get_hsmhv2_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2eval_qover.h0000644000175000017500000006452613546075722024375 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhveval_qover.h DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ /* Begin HSMHV2evalQover */ /*---------------------------------------------------* * Clamp -Vxbgmt. *-----------------*/ T0 = - Vxbgmt; if ( T0 > Vbs_bnd ) { T1 = T0 - Vbs_bnd; T1_dT = - Vbs_bnd_dT; T2 = Vbs_max - Vbs_bnd; T2_dT = Vbs_max_dT - Vbs_bnd_dT; Fn_SUPoly4m( TY, T1, T2, T11, T0 ); TY_dT = T1_dT * T11 + T2_dT * T0; T10 = Vbs_bnd + TY ; T10_dT = Vbs_bnd_dT + TY_dT ; } else { T10 = T0 ; T11 = 1.0 ; T10_dT = 0.0; } Vxbgmtcl = - T10 - small2 ; Vxbgmtcl_dVxbgmt = T11; Vxbgmtcl_dT = - T10_dT; fac1 = cnst0over_func * Cox0_inv ; fac1_dVbs = 0.0; fac1_dVds = 0.0; fac1_dVgs = 0.0; fac1_dT = cnst0over_func_dT * Cox0_inv ; fac1p2 = fac1 * fac1 ; fac1p2_dT = 2.0 * fac1 * fac1_dT ; VgpLD = - Vgbgmt + pParam->HSMHV2_vfbover; VgpLD_dVgb = - 1.0e0 ; T0 = Nover_func / here->HSMHV2_nin ; Pb2over = 2.0 / beta * log( T0 ) ; T0_dT = - T0 / here->HSMHV2_nin * Nin_dT ; Pb2over_dT = - Pb2over / beta * beta_dT + 2.0 / beta / T0 * T0_dT ; Vgb_fb_LD = - Vxbgmtcl ; /*-----------------------------------* * QsuLD: total charge = Accumulation | Depletion+inversion *-----------------*/ if ( VgpLD < Vgb_fb_LD ){ /*---------------------------* * Accumulation *-----------------*/ flg_ovzone = -1 ; T1 = 1.0 / ( beta * cnst0over_func ) ; T1_dT = - T1 * T1 * ( beta_dT * cnst0over_func + beta * cnst0over_func_dT ) ; TY = T1 * Cox0 ; Ac41 = 2.0 + 3.0 * C_SQRT_2 * TY ; Ac4 = 8.0 * Ac41 * Ac41 * Ac41 ; TY_dT = T1_dT * Cox0 ; Ac41_dT = 3.0 * C_SQRT_2 * TY_dT ; Ac4_dT = 8.0 * 3.0 * Ac41 * Ac41 * Ac41_dT ; Ps0_min = here->HSMHV2_eg - Pb2over ; Ps0_min_dT = Eg_dT - Pb2over_dT ; TX = beta * ( VgpLD + Vxbgmtcl ) ; TX_dVxb = beta * Vxbgmtcl_dVxbgmt ; TX_dVgb = beta * VgpLD_dVgb ; TX_dT = beta_dT * ( VgpLD + Vxbgmtcl ) + beta * Vxbgmtcl_dT; Ac31 = 7.0 * C_SQRT_2 - 9.0 * TY * ( TX - 2.0 ) ; Ac31_dVxb = - 9.0 * TY * TX_dVxb ; Ac31_dVgb = - 9.0 * TY * TX_dVgb ; Ac31_dT = - 9.0 * ( TY_dT * ( TX - 2.0 ) + TY * TX_dT ); Ac3 = Ac31 * Ac31 ; T1 = 2.0 * Ac31 ; Ac3_dVxb = T1 * Ac31_dVxb ; Ac3_dVgb = T1 * Ac31_dVgb ; Ac3_dT = T1 * Ac31_dT ; if ( Ac4 < Ac3*1.0e-8 ) { Ac1 = 0.5*Ac4/Ac31 ; Ac1_dVxb = - 0.5*Ac4/Ac3*Ac31_dVxb ; Ac1_dVgb = - 0.5*Ac4/Ac3*Ac31_dVxb ; Ac1_dT = 0.5*Ac4_dT/Ac31 - 0.5*Ac4/Ac3*Ac31_dT ; } else { Ac2 = sqrt( Ac4 + Ac3 ) ; T1 = 0.5 / Ac2 ; Ac2_dVxb = T1 * Ac3_dVxb ; Ac2_dVgb = T1 * Ac3_dVgb ; Ac2_dT = T1 * ( Ac4_dT + Ac3_dT ); Ac1 = -Ac31 + Ac2 ; Ac1_dVxb = Ac2_dVxb -Ac31_dVxb ; Ac1_dVgb = Ac2_dVgb -Ac31_dVgb ; Ac1_dT = Ac2_dT -Ac31_dT ; } Acd = pow( Ac1 , C_1o3 ) ; T1 = C_1o3 / ( Acd * Acd ) ; Acd_dVxb = Ac1_dVxb * T1 ; Acd_dVgb = Ac1_dVgb * T1 ; Acd_dT = Ac1_dT * T1 ; Acn = -4.0 * C_SQRT_2 - 12.0 * TY + 2.0 * Acd + C_SQRT_2 * Acd * Acd ; T1 = 2.0 + 2.0 * C_SQRT_2 * Acd ; Acn_dVxb = T1 * Acd_dVxb ; Acn_dVgb = T1 * Acd_dVgb ; Acn_dT = - 12.0 * TY_dT + T1 * Acd_dT ; Chi = Acn / Acd ; T1 = 1.0 / ( Acd * Acd ) ; Chi_dVxb = ( Acn_dVxb * Acd - Acn * Acd_dVxb ) * T1 ; Chi_dVgb = ( Acn_dVgb * Acd - Acn * Acd_dVgb ) * T1 ; Chi_dT = ( Acn_dT * Acd - Acn * Acd_dT ) * T1 ; Psa = Chi * beta_inv - Vxbgmtcl ; Psa_dVxb = Chi_dVxb * beta_inv - Vxbgmtcl_dVxbgmt ; Psa_dVgb = Chi_dVgb * beta_inv ; Psa_dT = Chi_dT * beta_inv + Chi * beta_inv_dT - Vxbgmtcl_dT ; T1 = Psa + Vxbgmtcl ; T1_dT = Psa_dT + Vxbgmtcl_dT ; T2 = T1 / Ps0_min ; T2_dT = ( T1_dT * Ps0_min - T1 * Ps0_min_dT ) / ( Ps0_min * Ps0_min ) ; T3 = sqrt( 1.0 + ( T2 * T2 ) ) ; T9 = T2 / T3 / Ps0_min ; T3_dVd = T9 * ( Psa_dVxb + Vxbgmtcl_dVxbgmt ) ; T3_dVg = T9 * Psa_dVgb ; T3_dT = T2_dT * T2 / T3; Ps0LD = T1 / T3 - Vxbgmtcl ; T9 = 1.0 / ( T3 * T3 ) ; Ps0LD_dVxb = T9 * ( ( Psa_dVxb + Vxbgmtcl_dVxbgmt ) * T3 - T1 * T3_dVd ) - Vxbgmtcl_dVxbgmt ; Ps0LD_dVgb = T9 * ( Psa_dVgb * T3 - T1 * T3_dVg ); Ps0LD_dT = T9 * ( T1_dT * T3 - T1 * T3_dT ) - Vxbgmtcl_dT; T2 = ( VgpLD - Ps0LD ) ; QsuLD = Cox0 * T2 ; QsuLD_dVxb = - Cox0 * Ps0LD_dVxb ; QsuLD_dVgb = Cox0 * ( VgpLD_dVgb - Ps0LD_dVgb ) ; QsuLD_dT = Cox0 * ( - Ps0LD_dT ) ; QbuLD = QsuLD ; QbuLD_dVxb = QsuLD_dVxb ; QbuLD_dVgb = QsuLD_dVgb ; QbuLD_dT = QsuLD_dT ; } else { /*---------------------------* * Depletion and inversion *-----------------*/ /* initial value for a few fixpoint iterations to get Ps0_iniA from simplified Poisson equation: */ flg_ovzone = 2 ; Chi = znbd3 ; Chi_dVxb = 0.0 ; Chi_dVgb = 0.0 ; Chi_dT = 0.0 ; Ps0_iniA= Chi/beta - Vxbgmtcl ; Ps0_iniA_dVxb = Chi_dVxb/beta - Vxbgmtcl_dVxbgmt ; Ps0_iniA_dVgb = Chi_dVgb/beta ; Ps0_iniA_dT = Chi_dT/beta - Chi*beta_dT/(beta*beta) - Vxbgmtcl_dT; /* 1 .. 2 relaxation steps should be sufficient */ for ( lp_ld = 1; lp_ld <= 2; lp_ld ++ ) { TY = exp(-Chi); TY_dVxb = -Chi_dVxb * TY; TY_dVgb = -Chi_dVgb * TY; TY_dT = - Chi_dT * TY; TX = 1.0e0 + 4.0e0 * ( beta * ( VgpLD + Vxbgmtcl ) - 1.0e0 + TY ) / ( fac1p2 * beta2 ) ; TX_dVxb = 4.0e0 * ( beta * ( Vxbgmtcl_dVxbgmt ) + TY_dVxb ) / ( fac1p2 * beta2 ); TX_dVgb = 4.0e0 * ( beta * ( VgpLD_dVgb ) + TY_dVgb ) / ( fac1p2 * beta2 ); T1 = ( beta * ( VgpLD + Vxbgmtcl ) - 1.0e0 + TY ); T1_dT = beta_dT * ( VgpLD + Vxbgmtcl ) + beta * Vxbgmtcl_dT + TY_dT; T3 = fac1p2 * beta2 ; T3_dT = fac1p2_dT * beta2 + fac1p2 * ( 2 * beta * beta_dT ) ; TX_dT = 4 * ( T1_dT * T3 - T1 * T3_dT ) / ( T3 * T3 ); if ( TX < epsm10) { TX = epsm10; TX_dVxb = TX_dVgb = TX_dT = 0.0; } Ps0_iniA = VgpLD + fac1p2 * beta / 2.0e0 * ( 1.0e0 - sqrt( TX ) ) ; Ps0_iniA_dVxb = - fac1p2 * beta / 2.0e0 * TX_dVxb * 0.5 / sqrt( TX ); Ps0_iniA_dVgb = VgpLD_dVgb - fac1p2 * beta / 2.0e0 * TX_dVgb * 0.5 / sqrt( TX ); T1 = fac1p2 * beta ; T1_dT = fac1p2_dT * beta + fac1p2 * beta_dT ; T2 = 1.0 - sqrt( TX ); T2_dT = - 1.0e0 / ( 2.0e0 * sqrt( TX ) ) * TX_dT ; Ps0_iniA_dT = ( T1_dT * T2 + T1 * T2_dT ) / 2.0e0 ; Chi = beta * ( Ps0_iniA + Vxbgmtcl ) ; Chi_dVxb = beta * ( Ps0_iniA_dVxb + Vxbgmtcl_dVxbgmt ) ; Chi_dVgb = beta * ( Ps0_iniA_dVgb ) ; Chi_dT = beta_dT * ( Ps0_iniA + Vxbgmtcl ) + beta * ( Ps0_iniA_dT + Vxbgmtcl_dT ); } /* End of iteration */ if ( Chi < znbd3 ) { flg_ovzone = 1 ; /*-----------------------------------* * zone-D1 * - Ps0_iniA is the analytical solution of QovLD=Qb0 with * Qb0 being approximated by 3-degree polynomial. * * new: Inclusion of exp(-Chi) term at right border *-----------------*/ Ta = 1.0/(9.0*sqrt(2.0)) - (5.0+7.0*exp(-3.0)) / (54.0*sqrt(2.0+exp(-3.0))); Tb = (1.0+exp(-3.0)) / (2.0*sqrt(2.0+exp(-3.0))) - sqrt(2.0) / 3.0; Tc = 1.0/sqrt(2.0) + 1.0/(beta*fac1); Tc_dT = - (beta_dT*fac1 + beta*fac1_dT)/(beta2*fac1p2); Td = - (VgpLD + Vxbgmtcl) / fac1; Td_dVxb = - Vxbgmtcl_dVxbgmt / fac1; Td_dVgb = - VgpLD_dVgb / fac1; Td_dT = - (Vxbgmtcl_dT*fac1 - (VgpLD+Vxbgmtcl)*fac1_dT)/fac1p2; Tq = Tb*Tb*Tb / (27.0*Ta*Ta*Ta) - Tb*Tc/(6.0*Ta*Ta) + Td/(2.0*Ta); Tq_dVxb = Td_dVxb/(2.0*Ta); Tq_dVgb = Td_dVgb / (2.0*Ta); Tq_dT = - Tb/(6.0*Ta*Ta)*Tc_dT + Td_dT/(2.0*Ta); Tp = (3.0*Ta*Tc-Tb*Tb)/(9.0*Ta*Ta); Tp_dT = Tc_dT/(3.0*Ta); T5 = sqrt(Tq*Tq + Tp*Tp*Tp); T5_dVxb = 2.0*Tq*Tq_dVxb / (2.0*T5); T5_dVgb = 2.0*Tq*Tq_dVgb / (2.0*T5); T5_dT = (2.0*Tq*Tq_dT + 3.0*Tp*Tp*Tp_dT) / (2.0*T5); Tu = pow(-Tq + T5,C_1o3); Tu_dVxb = Tu / (3.0 * (-Tq + T5)) * (-Tq_dVxb + T5_dVxb); Tu_dVgb = Tu / (3.0 * (-Tq + T5)) * (-Tq_dVgb + T5_dVgb); Tu_dT = Tu / (3.0 * (-Tq + T5)) * (-Tq_dT + T5_dT); Tv = -pow(Tq + T5,C_1o3); Tv_dVxb = Tv / (3.0 * (-Tq - T5)) * (-Tq_dVxb - T5_dVxb); Tv_dVgb = Tv / (3.0 * (-Tq - T5)) * (-Tq_dVgb - T5_dVgb); Tv_dT = Tv / (3.0 * (-Tq - T5)) * (-Tq_dT - T5_dT ); TX = Tu + Tv - Tb/(3.0*Ta); TX_dVxb = Tu_dVxb + Tv_dVxb; TX_dVgb = Tu_dVgb + Tv_dVgb; TX_dT = Tu_dT + Tv_dT ; Ps0_iniA = TX * beta_inv - Vxbgmtcl ; Ps0_iniA_dVxb = TX_dVxb * beta_inv - Vxbgmtcl_dVxbgmt; Ps0_iniA_dVgb = TX_dVgb * beta_inv; Ps0_iniA_dT = TX_dT * beta_inv + TX * beta_inv_dT - Vxbgmtcl_dT; Chi = beta * ( Ps0_iniA + Vxbgmtcl ) ; Chi_dVxb = beta * ( Ps0_iniA_dVxb + Vxbgmtcl_dVxbgmt ) ; Chi_dVgb = beta * ( Ps0_iniA_dVgb ) ; Chi_dT = beta_dT * ( Ps0_iniA + Vxbgmtcl ) + beta * ( Ps0_iniA_dT + Vxbgmtcl_dT ); } if ( model->HSMHV2_coqovsm > 0 ) { /*-----------------------------------* * - Ps0_iniB : upper bound. *-----------------*/ flg_ovzone += 2; VgpLD_shift = VgpLD + Vxbgmtcl + 0.1; VgpLD_shift_dVgb = VgpLD_dVgb; VgpLD_shift_dVxb = Vxbgmtcl_dVxbgmt; VgpLD_shift_dT = Vxbgmtcl_dT; exp_bVbs = exp( beta * - Vxbgmtcl ) + small; exp_bVbs_dVxb = - exp_bVbs * beta * Vxbgmtcl_dVxbgmt; exp_bVbs_dT = - exp_bVbs * (beta_dT*Vxbgmtcl + beta*Vxbgmtcl_dT); T0 = here->HSMHV2_nin / Nover_func; T0_dT = Nin_dT / Nover_func; cnst1over = T0 * T0; cnst1over_dT = 2.0 * T0 * T0_dT; gamma = cnst1over * exp_bVbs; gamma_dVxb = cnst1over * exp_bVbs_dVxb; gamma_dT = cnst1over_dT * exp_bVbs + cnst1over * exp_bVbs_dT; T0 = beta2 * fac1p2; T0_dT = 2.0 * beta * fac1 * (beta_dT*fac1+beta*fac1_dT); psi = beta*VgpLD_shift; psi_dVgb = beta*VgpLD_shift_dVgb; psi_dVxb = beta*VgpLD_shift_dVxb; psi_dT = beta_dT*VgpLD_shift + beta*VgpLD_shift_dT; Chi_1 = log(gamma*T0 + psi*psi) - log(cnst1over*T0) + beta*Vxbgmtcl; Chi_1_dVgb = 2.0*psi*psi_dVgb/ (gamma*T0 + psi*psi); Chi_1_dVxb = (gamma_dVxb*T0+2.0*psi*psi_dVxb)/(gamma*T0+psi*psi) + beta*Vxbgmtcl_dVxbgmt; Chi_1_dT = (gamma_dT*T0+gamma*T0_dT+2.0*psi*psi_dT)/(gamma*T0+psi*psi) - (cnst1over_dT*T0 + cnst1over*T0_dT)/(cnst1over*T0) + beta_dT*Vxbgmtcl + beta*Vxbgmtcl_dT; Fn_SU2( Chi_1, Chi_1, psi, 1.0, T1, T2 ); Chi_1_dVgb = Chi_1_dVgb*T1 + psi_dVgb*T2; Chi_1_dVxb = Chi_1_dVxb*T1 + psi_dVxb*T2; Chi_1_dT = Chi_1_dT *T1 + psi_dT *T2; /* 1 fixpoint step for getting more accurate Chi_B */ psi -= Chi_1 ; psi_dVgb -= Chi_1_dVgb ; psi_dVxb -= Chi_1_dVxb ; psi_dT -= Chi_1_dT ; psi += beta*0.1 ; psi_dT += beta_dT*0.1 ; psi_B = psi; arg_B = psi*psi/(gamma*T0); Chi_B = log(gamma*T0 + psi*psi) - log(cnst1over*T0) + beta*Vxbgmtcl; Chi_B_dVgb = 2.0*psi*psi_dVgb/ (gamma*T0 + psi*psi); Chi_B_dVxb = (gamma_dVxb*T0+2.0*psi*psi_dVxb)/(gamma*T0+psi*psi) + beta*Vxbgmtcl_dVxbgmt; Chi_B_dT = (gamma_dT*T0+gamma*T0_dT+2.0*psi*psi_dT)/(gamma*T0+psi*psi) - (cnst1over_dT*T0 + cnst1over*T0_dT)/(cnst1over*T0) + beta_dT*Vxbgmtcl + beta*Vxbgmtcl_dT; Ps0_iniB = Chi_B/beta - Vxbgmtcl ; Ps0_iniB_dVgb = Chi_B_dVgb/beta; Ps0_iniB_dVxb = Chi_B_dVxb/beta- Vxbgmtcl_dVxbgmt; Ps0_iniB_dT = Chi_B_dT/beta - Chi_B/(beta*beta)*beta_dT - Vxbgmtcl_dT; /* construction of Ps0LD by taking Ps0_iniB as an upper limit of Ps0_iniA * * Limiting is done for Chi rather than for Ps0LD, to avoid shifting * for Fn_SU2 */ Chi_A = Chi; Chi_A_dVxb = Chi_dVxb; Chi_A_dVgb = Chi_dVgb; Chi_A_dT = Chi_dT; Fn_SU2( Chi, Chi_A, Chi_B, c_ps0ini_2*75.00, T1, T2 ); /* org: 50 */ Chi_dVgb = Chi_A_dVgb * T1 + Chi_B_dVgb * T2; Chi_dVxb = Chi_A_dVxb * T1 + Chi_B_dVxb * T2; Chi_dT = Chi_A_dT * T1 + Chi_B_dT * T2; } /* updating Ps0LD */ Ps0LD= Chi/beta - Vxbgmtcl ; Ps0LD_dVgb = Chi_dVgb/beta; Ps0LD_dVxb = Chi_dVxb/beta- Vxbgmtcl_dVxbgmt; Ps0LD_dT = Chi_dT/beta - Chi/(beta*beta)*beta_dT - Vxbgmtcl_dT; T1 = Chi - 1.0 + exp(-Chi); T1_dVxb = (1.0 - exp(-Chi)) * Chi_dVxb ; T1_dVgb = (1.0 - exp(-Chi)) * Chi_dVgb ; T1_dT = (1.0 - exp(-Chi)) * Chi_dT ; if (T1 < epsm10) { T1 = epsm10 ; T1_dVxb = 0.0 ; T1_dVgb = 0.0 ; T1_dT = 0.0 ; } T2 = sqrt(T1); QbuLD = cnst0over_func * T2 ; T3 = cnst0over_func * 0.5 / T2 ; QbuLD_dVxb = T3 * T1_dVxb ; QbuLD_dVgb = T3 * T1_dVgb ; QbuLD_dT = T3 * T1_dT + cnst0over_func_dT * T2 ; /*-----------------------------------------------------------* * QsuLD : Qovs or Qovd in unit area. * note: QsuLD = Qdep+Qinv. *-----------------*/ QsuLD = Cox0 * ( VgpLD - Ps0LD ) ; QsuLD_dVxb = Cox0 * ( - Ps0LD_dVxb ) ; QsuLD_dVgb = Cox0 * ( VgpLD_dVgb - Ps0LD_dVgb ) ; QsuLD_dT = Cox0 * ( - Ps0LD_dT ) ; if ( model->HSMHV2_coqovsm == 1 ) { /* take initial values from analytical model */ /*---------------------------------------------------* * Calculation of Ps0LD. (beginning of Newton loop) * - Fs0 : Fs0 = 0 is the equation to be solved. * - dPs0 : correction value. *-----------------*/ /* initial value too close to flat band should not be used */ // if (Ps0LD+Vxbgmtcl < 1.0e-2) Ps0LD = 1.0e-2 - Vxbgmtcl; exp_bVbs = exp( beta * - Vxbgmtcl ) ; T0 = here->HSMHV2_nin / Nover_func; cnst1over = T0 * T0; cnst1over_dT = 2.0 * T0 * ( Nin_dT / Nover_func ); cfs1 = cnst1over * exp_bVbs ; flg_conv = 0 ; for ( lp_s0 = 1 ; lp_s0 <= 2*lp_s0_max + 1 ; lp_s0 ++ ) { Chi = beta * ( Ps0LD + Vxbgmtcl ) ; if ( Chi < znbd5 ) { /*-------------------------------------------* * zone-D1/D2. (Ps0LD) *-----------------*/ fi = Chi * Chi * Chi * ( cn_im53 + Chi * ( cn_im54 + Chi * cn_im55 ) ) ; fi_dChi = Chi * Chi * ( 3 * cn_im53 + Chi * ( 4 * cn_im54 + Chi * 5 * cn_im55 ) ) ; fs01 = cfs1 * fi * fi ; fs01_dPs0 = cfs1 * beta * 2 * fi * fi_dChi ; fb = Chi * ( cn_nc51 + Chi * ( cn_nc52 + Chi * ( cn_nc53 + Chi * ( cn_nc54 + Chi * cn_nc55 ) ) ) ) ; fb_dChi = cn_nc51 + Chi * ( 2 * cn_nc52 + Chi * ( 3 * cn_nc53 + Chi * ( 4 * cn_nc54 + Chi * 5 * cn_nc55 ) ) ) ; fs02 = sqrt( fb * fb + fs01 + small ) ; fs02_dPs0 = ( beta * fb_dChi * 2 * fb + fs01_dPs0 ) / ( fs02 + fs02 ) ; } else { /*-------------------------------------------* * zone-D3. (Ps0LD) *-----------------*/ if ( Chi < large_arg ) { /* avoid exp_Chi to become extremely large */ exp_Chi = exp( Chi ) ; fs01 = cfs1 * ( exp_Chi - 1.0e0 ) ; fs01_dPs0 = cfs1 * beta * ( exp_Chi ) ; } else { exp_bPs0 = exp( beta*Ps0LD ) ; fs01 = cnst1over * ( exp_bPs0 - exp_bVbs ) ; fs01_dPs0 = cnst1over * beta * exp_bPs0 ; } fs02 = sqrt( Chi - 1.0 + fs01 ) ; fs02_dPs0 = ( beta + fs01_dPs0 ) / fs02 * 0.5 ; } /* end of if ( Chi ... ) block */ /*-----------------------------------------------------------* * Fs0 *-----------------*/ Fs0 = VgpLD - Ps0LD - fac1 * fs02 ; Fs0_dPs0 = - 1.0e0 - fac1 * fs02_dPs0 ; if ( flg_conv == 1 ) break ; dPs0 = - Fs0 / Fs0_dPs0 ; /*-------------------------------------------* * Update Ps0LD . *-----------------*/ dPlim = 0.5*dP_max*(1.0 + Fn_Max(1.e0,fabs(Ps0LD))) ; if ( fabs( dPs0 ) > dPlim ) dPs0 = dPlim * Fn_Sgn( dPs0 ) ; Ps0LD = Ps0LD + dPs0 ; TX = -Vxbgmtcl + ps_conv / 2 ; if ( Ps0LD < TX ) Ps0LD = TX ; /*-------------------------------------------* * Check convergence. *-----------------*/ if ( fabs( dPs0 ) <= ps_conv && fabs( Fs0 ) <= gs_conv ) { flg_conv = 1 ; } } /* end of Ps0LD Newton loop */ /*-------------------------------------------* * Procedure for diverged case. *-----------------*/ if ( flg_conv == 0 ) { fprintf( stderr , "*** warning(HiSIM_HV(%s)): Went Over Iteration Maximum (Ps0LD)\n",model->HSMHV2modName ) ; fprintf( stderr , " -Vxbgmtcl = %e Vgbgmt = %e\n" , -Vxbgmtcl , Vgbgmt ) ; } /*---------------------------------------------------* * Evaluate derivatives of Ps0LD. *-----------------*/ Chi_dT = beta_dT * ( Ps0LD + Vxbgmtcl ) + beta * Vxbgmtcl_dT; exp_bVbs_dT = - ( beta_dT * Vxbgmtcl + beta * Vxbgmtcl_dT ) * exp_bVbs; cfs1_dT = exp_bVbs * cnst1over_dT + exp_bVbs_dT * cnst1over; if ( Chi < znbd5 ) { fs01_dVbs = cfs1 * beta * fi * ( - fi + 2 * fi_dChi ) ; /* fs01_dVxbgmtcl */ fs01_dT = cfs1 * 2 * fi * fi_dChi * Chi_dT + fi * fi * cfs1_dT ; T2 = 1.0e0 / ( fs02 + fs02 ) ; fs02_dVbs = ( + beta * fb_dChi * 2 * fb + fs01_dVbs ) * T2 ; /* fs02_dVxbgmtcl */ fs02_dT = ( 2 * fb * fb_dChi * Chi_dT + fs01_dT ) * T2 ; } else { if ( Chi < large_arg ) { fs01_dVbs = + cfs1 * beta ; /* fs01_dVxbgmtcl */ exp_Chi_dT = exp_Chi * Chi_dT ; fs01_dT = ( exp_Chi - 1.0e0 ) * cfs1_dT + cfs1 * exp_Chi_dT ; } else { fs01_dVbs = + cfs1 * beta ; exp_bPs0_dT = exp_bPs0 * Ps0LD * beta_dT ; fs01_dT = cnst1over_dT*(exp_bPs0-exp_bVbs) + cnst1over*(exp_bPs0_dT-exp_bVbs_dT) ; } T2 = 0.5e0 / fs02 ; fs02_dVbs = ( + beta + fs01_dVbs ) * T2 ; /* fs02_dVxbgmtcl */ fs02_dT = T2 * ( Chi_dT + fs01_dT ) ; } T1 = 1.0 / Fs0_dPs0 ; Ps0LD_dVxb = - ( - fac1 * fs02_dVbs ) * T1 ; Ps0LD_dVds = 0.0 ; Ps0LD_dVgb = - ( VgpLD_dVgb - fac1_dVgs * fs02 ) * T1 ; Ps0LD_dT = - ( - ( fac1 * fs02_dT + fac1_dT * fs02 ) ) * T1; Chi_dT = beta_dT * ( Ps0LD + Vxbgmtcl ) + beta * ( Ps0LD_dT + Vxbgmtcl_dT ); if ( Chi < znbd5 ) { /*-------------------------------------------* * zone-D1/D2. (Ps0LD) *-----------------*/ if ( Chi < znbd3 ) { flg_ovzone = 1; } else { flg_ovzone = 2; } Xi0 = fb * fb + epsm10 ; T1 = 2 * fb * fb_dChi * beta ; Xi0_dVbs = T1 * ( Ps0LD_dVxb + 1.0 ) ; /* Xi0_dVxbgmtcl */ Xi0_dVds = T1 * Ps0LD_dVds ; Xi0_dVgs = T1 * Ps0LD_dVgb ; Xi0_dT = 2 * fb * fb_dChi * Chi_dT ; Xi0p12 = fb + epsm10 ; T1 = fb_dChi * beta ; Xi0p12_dVbs = T1 * ( Ps0LD_dVxb + 1.0 ) ; /* Xi0p12_dVxbgmtcl */ Xi0p12_dVds = T1 * Ps0LD_dVds ; Xi0p12_dVgs = T1 * Ps0LD_dVgb ; Xi0p12_dT = fb_dChi * Chi_dT ; Xi0p32 = fb * fb * fb + epsm10 ; T1 = 3 * fb * fb * fb_dChi * beta ; Xi0p32_dVbs = T1 * ( Ps0LD_dVxb + 1.0 ) ; /* Xi0p32_dVxbgmtcl */ Xi0p32_dVds = T1 * Ps0LD_dVds ; Xi0p32_dVgs = T1 * Ps0LD_dVgb ; Xi0p32_dT = 3 * fb * fb * fb_dChi * Chi_dT ; } else { /*-------------------------------------------* * zone-D3. (Ps0LD) *-----------------*/ flg_ovzone = 3 ; Xi0 = Chi - 1.0e0 ; Xi0_dVbs = beta * ( Ps0LD_dVxb + 1.0e0 ) ; /* Xi0_dVxbgmtcl */ Xi0_dVds = beta * Ps0LD_dVds ; Xi0_dVgs = beta * Ps0LD_dVgb ; Xi0_dT = Chi_dT ; Xi0p12 = sqrt( Xi0 ) ; T1 = 0.5e0 / Xi0p12 ; Xi0p12_dVbs = T1 * Xi0_dVbs ; Xi0p12_dVds = T1 * Xi0_dVds ; Xi0p12_dVgs = T1 * Xi0_dVgs ; Xi0p12_dT = T1 * Xi0_dT ; Xi0p32 = Xi0 * Xi0p12 ; T1 = 1.5e0 * Xi0p12 ; Xi0p32_dVbs = T1 * Xi0_dVbs ; Xi0p32_dVds = T1 * Xi0_dVds ; Xi0p32_dVgs = T1 * Xi0_dVgs ; Xi0p32_dT = T1 * Xi0_dT ; } /* end of if ( Chi ... ) block */ /*-----------------------------------------------------------* * - Recalculate the derivatives of fs01 and fs02. *-----------------*/ fs01_dVbs = Ps0LD_dVxb * fs01_dPs0 + fs01_dVbs ; fs01_dVds = Ps0LD_dVds * fs01_dPs0 ; fs01_dVgs = Ps0LD_dVgb * fs01_dPs0 ; fs01_dT = Ps0LD_dT * fs01_dPs0 + fs01_dT; fs02_dVbs = Ps0LD_dVxb * fs02_dPs0 + fs02_dVbs ; fs02_dVxb = Ps0LD_dVds * fs02_dPs0 ; fs02_dVgb = Ps0LD_dVgb * fs02_dPs0 ; fs02_dT = Ps0LD_dT * fs02_dPs0 + fs02_dT; /*-----------------------------------------------------------* * QbuLD and QiuLD *-----------------*/ QbuLD = cnst0over_func * Xi0p12 ; QbuLD_dVxb = cnst0over_func * Xi0p12_dVbs ; QbuLD_dVgb = cnst0over_func * Xi0p12_dVgs ; QbuLD_dT = cnst0over_func * Xi0p12_dT + cnst0over_func_dT * Xi0p12; T1 = 1.0 / ( fs02 + Xi0p12 ) ; QiuLD = cnst0over_func * fs01 * T1 ; T2 = 1.0 / ( fs01 + epsm10 ) ; QiuLD_dVbs = QiuLD * ( fs01_dVbs * T2 - ( fs02_dVbs + Xi0p12_dVbs ) * T1 ) ; QiuLD_dVgs = QiuLD * ( fs01_dVgs * T2 - ( fs02_dVgb + Xi0p12_dVgs ) * T1 ) ; T1_dT = - T1 * T1 * ( fs02_dT + Xi0p12_dT ); QiuLD_dT = cnst0over_func * ( fs01 * T1_dT + T1 * fs01_dT ) + fs01 * T1 * cnst0over_func_dT; /*-----------------------------------------------------------* * Extrapolation: X_dVxbgmt = X_dVxbgmtcl * Vxbgmtcl_dVxbgmt *-----------------*/ QbuLD_dVxb *= Vxbgmtcl_dVxbgmt ; QiuLD_dVbs *= Vxbgmtcl_dVxbgmt ; /*-----------------------------------------------------------* * Total overlap charge *-----------------*/ QsuLD = QbuLD + QiuLD; QsuLD_dVxb = QbuLD_dVxb + QiuLD_dVbs; QsuLD_dVgb = QbuLD_dVgb + QiuLD_dVgs; QsuLD_dT = QbuLD_dT + QiuLD_dT; } /* end of COQOVSM branches */ } /* end of Vgbgmt region blocks */ /* convert to source ref. */ Ps0LD_dVbs = Ps0LD_dVxb * Vxbgmt_dVbs + Ps0LD_dVgb * Vgbgmt_dVbs ; Ps0LD_dVds = Ps0LD_dVxb * Vxbgmt_dVds + Ps0LD_dVgb * Vgbgmt_dVds ; Ps0LD_dVgs = Ps0LD_dVxb * Vxbgmt_dVgs + Ps0LD_dVgb * Vgbgmt_dVgs ; QsuLD_dVbs = QsuLD_dVxb * Vxbgmt_dVbs + QsuLD_dVgb * Vgbgmt_dVbs ; QsuLD_dVds = QsuLD_dVxb * Vxbgmt_dVds + QsuLD_dVgb * Vgbgmt_dVds ; QsuLD_dVgs = QsuLD_dVxb * Vxbgmt_dVgs + QsuLD_dVgb * Vgbgmt_dVgs ; QbuLD_dVbs = QbuLD_dVxb * Vxbgmt_dVbs + QbuLD_dVgb * Vgbgmt_dVbs ; QbuLD_dVds = QbuLD_dVxb * Vxbgmt_dVds + QbuLD_dVgb * Vgbgmt_dVds ; QbuLD_dVgs = QbuLD_dVxb * Vxbgmt_dVgs + QbuLD_dVgb * Vgbgmt_dVgs ; /* inversion charge = total - depletion */ QiuLD = QsuLD - QbuLD ; QiuLD_dVbs = QsuLD_dVbs - QbuLD_dVbs ; QiuLD_dVds = QsuLD_dVds - QbuLD_dVds ; QiuLD_dVgs = QsuLD_dVgs - QbuLD_dVgs ; QiuLD_dT = QsuLD_dT - QbuLD_dT ; /* End HSMHV2evalQover */ tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2temp_eval_rdri.h0000644000175000017500000000762613546075722025224 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhvtemp_eval_rdri.h DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ TTEMP = ckt->CKTtemp; if ( here->HSMHV2_dtemp_Given ) { TTEMP = TTEMP + here->HSMHV2_dtemp ; } TTEMP0 = TTEMP ; #ifdef HSMHV2EVAL /* Self heating */ TTEMP = TTEMP + deltemp ; #endif /* Phonon Scattering (temperature-dependent part) */ T1 = Fn_Pow ( here->HSMHV2_Tratio, model->HSMHV2_rdrmuetmp ) ; here->HSMHV2_rdrmue = modelMKS->HSMHV2_rdrmue / T1 ; #ifdef HSMHV2EVAL T1_dT = model->HSMHV2_rdrmuetmp * Fn_Pow( here->HSMHV2_Tratio, model->HSMHV2_rdrmuetmp - 1.0 ) / model->HSMHV2_ktnom ; Mu0_dT = - modelMKS->HSMHV2_rdrmue / ( T1 * T1 ) * T1_dT ; #endif /* Velocity Temperature Dependence */ T0 = 1.8 + 0.4 * here->HSMHV2_Tratio + 0.1 * here->HSMHV2_Tratio * here->HSMHV2_Tratio - model->HSMHV2_rdrvtmp * ( 1.0 - here->HSMHV2_Tratio ) ; #ifdef HSMHV2EVAL T0_dT = 1 / model->HSMHV2_ktnom * ( 0.4 + 0.2 * here->HSMHV2_Tratio + model->HSMHV2_rdrvtmp ) ; #endif here->HSMHV2_rdrvmax = modelMKS->HSMHV2_rdrvmax / T0 ; #ifdef HSMHV2EVAL Vmax_dT = - modelMKS->HSMHV2_rdrvmax / ( T0 * T0 ) * T0_dT ; #endif here->HSMHV2_rdrcx = model->HSMHV2_rdrcx ; here->HSMHV2_rdrcar = model->HSMHV2_rdrcar ; #ifdef HSMHV2EVAL Cx_dT = 0.0 ; Car_dT = 0.0 ; #endif //Toshiba model // here->HSMHV2_rdrbb = model->HSMHV2_rdrbb+model->HSMHV2_rdrbbtmp*(TTEMP-model->HSMHV2_ktnom) ; #ifdef HSMHV2EVAL Rdrbb_dT = model->HSMHV2_rdrbbtmp ; #endif /* end of HSMHV2temp_eval_rdri.h */ tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2eval_rdrift.c0000644000175000017500000005477713546075722024535 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhveval_rdrift.c DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ /*===========================================================* * Preamble. *=================*/ /*---------------------------------------------------* * Header files. *-----------------*/ #include "ngspice/ngspice.h" #ifdef __STDC__ /* #include */ #endif /*-----------------------------------* * HiSIM macros *-----------------*/ #include "hisimhv2.h" #include "hsmhv2evalenv.h" /* local variables used in macro functions */ static double TMF0 , TMF1 , TMF2 , TMF3 ; /*===========================================================* * pow *=================*/ #ifdef POW_TO_EXP_AND_LOG #define Fn_Pow( x , y ) exp( y * log( x ) ) #else #define Fn_Pow( x , y ) pow( x , y ) #endif /*===========================================================* * Macro Functions for ceiling/flooring/symmetrization. *=================*/ /*---------------------------------------------------* * smoothUpper: ceiling. * y = xmax - 0.5 ( arg + sqrt( arg^2 + 4 xmax delta ) ) * arg = xmax - x - delta *-----------------*/ #define Fn_SU( y , x , xmax , delta , dx ) { \ TMF1 = ( xmax ) - ( x ) - ( delta ) ; \ TMF2 = 4.0 * ( xmax ) * ( delta) ; \ TMF2 = TMF2 > 0.0 ? TMF2 : - ( TMF2 ) ; \ TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \ dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \ y = ( xmax ) - 0.5 * ( TMF1 + TMF2 ) ; \ } #define Fn_SU2( y , x , xmax , delta , dy_dx , dy_dxmax ) { \ TMF1 = ( xmax ) - ( x ) - ( delta ) ; \ TMF2 = 4.0 * ( xmax ) * ( delta) ; \ TMF2 = TMF2 > 0.0 ? TMF2 : - ( TMF2 ) ; \ TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \ dy_dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \ dy_dxmax = 0.5 * ( 1.0 - ( TMF1 + 2.0 * delta ) / TMF2 ) ; \ y = ( xmax ) - 0.5 * ( TMF1 + TMF2 ) ; \ } /*---------------------------------------------------* * smoothLower: flooring. * y = xmin + 0.5 ( arg + sqrt( arg^2 + 4 xmin delta ) ) * arg = x - xmin - delta *-----------------*/ #define Fn_SL( y , x , xmin , delta , dx ) { \ TMF1 = ( x ) - ( xmin ) - ( delta ) ; \ TMF2 = 4.0 * ( xmin ) * ( delta ) ; \ TMF2 = TMF2 > 0.0 ? TMF2 : - ( TMF2 ) ; \ TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \ dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \ y = ( xmin ) + 0.5 * ( TMF1 + TMF2 ) ; \ } #define Fn_SL2( y , x , xmin , delta , dy_dx, dy_dxmin ) { \ TMF1 = ( x ) - ( xmin ) - ( delta ) ; \ TMF2 = 4.0 * ( xmin ) * ( delta ) ; \ TMF2 = TMF2 > 0.0 ? TMF2 : - ( TMF2 ) ; \ TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \ dy_dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \ dy_dxmin = 0.5 * ( 1.0 - ( TMF1 - 2.0 * delta ) / TMF2 ) ; \ y = ( xmin ) + 0.5 * ( TMF1 + TMF2 ) ; \ } /*---------------------------------------------------* * smoothZero: flooring to zero. * y = 0.5 ( x + sqrt( x^2 + 4 delta^2 ) ) *-----------------*/ #define Fn_SZ( y , x , delta , dx ) { \ TMF2 = sqrt ( ( x ) * ( x ) + 4.0 * ( delta ) * ( delta ) ) ; \ dx = 0.5 * ( 1.0 + ( x ) / TMF2 ) ; \ y = 0.5 * ( ( x ) + TMF2 ) ; \ if( y < 0.0 ) { y=0.0; dx=0.0; } \ } /*---------------------------------------------------* * SymAdd: evaluate additional term for symmetry. *-----------------*/ #define Fn_SymAdd( y , x , add0 , dx ) \ { \ if( ( x ) < 1e6 ) { \ TMF1 = 2.0 * ( x ) / ( add0 ) ; \ TMF2 = 1.0 + TMF1 * ( (1.0/2) + TMF1 * ( (1.0/6) \ + TMF1 * ( (1.0/24) + TMF1 * ( (1.0/120) \ + TMF1 * ( (1.0/720) + TMF1 * (1.0/5040) ) ) ) ) ) ; \ TMF3 = (1.0/2) + TMF1 * ( (1.0/3) \ + TMF1 * ( (1.0/8) + TMF1 * ( (1.0/30) \ + TMF1 * ( (1.0/144) + TMF1 * (1.0/840) ) ) ) ) ; \ y = add0 / TMF2 ; \ dx = - 2.0 * TMF3 / ( TMF2 * TMF2 ) ; \ } else { y=0.0; dx=0.9; } \ } #define Fn_CP( y , x , xmax , pw , dx ) { \ double x2 = (x) * (x) ; \ double xmax2 = (xmax) * (xmax) ; \ double xp = 1.0 , xmp = 1.0 ; \ int m =0, mm =0; \ double arg =0.0, dnm =0.0; \ for ( m = 0 ; m < pw ; m ++ ) { xp *= x2 ; xmp *= xmax2 ; } \ arg = xp + xmp ; \ dnm = arg ; \ if ( pw == 1 || pw == 2 || pw == 4 || pw == 8 ) { \ if ( pw == 1 ) { mm = 1 ; \ } else if ( pw == 2 ) { mm = 2 ; \ } else if ( pw == 4 ) { mm = 3 ; \ } else if ( pw == 8 ) { mm = 4 ; } \ for ( m = 0 ; m < mm ; m ++ ) { dnm = sqrt( dnm ) ; } \ } else { dnm = Fn_Pow( dnm , 1.0 / ( 2.0 * pw ) ) ; } \ dnm = 1.0 / dnm ; \ y = (x) * (xmax) * dnm ; \ dx = (xmax) * xmp * dnm / arg ; \ } #define Fn_SU_CP( y , x , xmax , delta , pw , dx ) { \ if(x > xmax - delta && delta >= 0.0) { \ TMF1 = x - xmax + delta ; \ Fn_CP( TMF0 , TMF1 , delta , pw , dx ) \ y = xmax - delta + TMF0 ; \ dx = dx ; \ } else { \ y = x ; \ dx = 1.0 ; \ } \ } /*===========================================================* * Function hsmhvrdrift. *=================*/ int HSMHV2rdrift ( double Vddp, double Vds, double Vbs, double Vsubs, /* substrate-source voltage */ double deltemp, HSMHV2instance *here, HSMHV2model *model, CKTcircuit *ckt ) { HSMHV2binningParam *pParam = &here->pParam ; HSMHV2modelMKSParam *modelMKS = &model->modelMKS ; const double small = 1.0e-50 ; double Mfactor =0.0, WeffLD_nf =0.0 ; double Ldrift =0.0, Xldld =0.0 ; double Nover =0.0 ; /* temporary vars. & derivatives*/ double T0 =0.0, T0_dVb =0.0, T0_dVd =0.0, T0_dVg =0.0, T0_dT =0.0 ; double T1 =0.0, T1_dVd =0.0, T1_dT =0.0, T1_dVddp =0.0 ; double T2 =0.0, T2_dVb =0.0, T2_dVd =0.0, T2_dT =0.0, T2_dVddp =0.0 ; double T3 =0.0, T3_dT =0.0, T3_dVddp =0.0 ; double T4 =0.0, T4_dT =0.0, T4_dVddp =0.0 ; double T5 =0.0, T5_dT =0.0, T5_dVddp =0.0 ; double T6 =0.0, T6_dT =0.0, T6_dVddp =0.0 ; double T9 =0.0 ; /* bias-dependent Rd, Rs */ double Edri =0.0, Edri_dVddp =0.0 ; double Vdri =0.0, Vdri_dVddp =0.0, Vdri_dT =0.0 ; double Vmax =0.0, Vmax_dT =0.0 ; double Mu0 =0.0, Mu0_dT =0.0 ; double Cx =0.0, Cx_dT =0.0 ; double Car =0.0, Car_dT =0.0 ; double Mu =0.0, Mu_dVddp = 0.0, Mu_dT =0.0 ; double Xov =0.0, Xov_dVds =0.0, Xov_dVgs =0.0, Xov_dVbs =0.0, Xov_dT =0.0 ; double Carr =0.0, Carr_dVds=0.0, Carr_dVgs=0.0, Carr_dVbs=0.0, Carr_dVddp =0.0, Carr_dT =0.0 ; double GD =0.0, GD_dVddp =0.0, GD_dVgse =0.0, GD_dT =0.0, GD_dVds =0.0, GD_dVgs =0.0, GD_dVbs =0.0 ; double Rd =0.0, Rd_dVddp =0.0, Rd_dVdse =0.0, Rd_dVgse =0.0, Rd_dVbse =0.0, Rd_dT =0.0, Rd_dVds =0.0, Rd_dVgs =0.0, Rd_dVbs =0.0 ; double Vddpz=0.0, Vddpz_dVddp=0.0, Vzadd =0.0, Vzadd_dVddp=0.0 ; /* temperature-dependent variables for SHE model */ double TTEMP =0.0, TTEMP0 =0.0 ; /* Wdepl and Wjunc */ double Wdepl, Wdepl_dVd, Wdepl_dVg, Wdepl_dVb, Wdepl_dT; double Wjunc0, Wjunc0_dVd, Wjunc0_dVb; double Wrdrdjunc, Wjunc, Wjunc_dVd, Wjunc_dVb; const double Res_min = 1.0e-4 ; const double epsm10 = 10.0e0 * C_EPS_M ; const double ps_conv = 1.0e-12 ; double Rdrbb_dT =0.0 ; double Wdep = 0.0, Wdep_dVdserev = 0.0, Wdep_dVsubsrev = 0.0 ; double T1_dVdserev = 0.0, T1_dVsubsrev = 0.0, T6_dVdserev = 0.0, T6_dVsubsrev = 0.0 ; double Rd_dVsubs=0.0 ; #define C_sub_delta 0.1 /* CHECK! */ #define C_sub_delta2 1.0e-9 /* CHECK! */ NG_IGNORE(Vsubs); /*================ Start of executable code.=================*/ /*-----------------------------------------------------------* * Temperature dependent constants. *-----------------*/ if ( here->HSMHV2tempNode > 0 && pParam->HSMHV2_rth0 != 0.0 ) { #define HSMHV2EVAL #include "hsmhv2temp_eval_rdri.h" } else { if ( here->HSMHV2_dtemp_Given ) { TTEMP = TTEMP + here->HSMHV2_dtemp ; } Mu0_dT = 0.0 ; Vmax_dT = 0.0 ; Cx_dT = 0.0 ; Car_dT = 0.0 ; Rdrbb_dT = 0.0 ; } Mfactor = here->HSMHV2_m ; WeffLD_nf = here->HSMHV2_weff_ld * here->HSMHV2_nf ; Ldrift = here->HSMHV2_ldrift1 + here->HSMHV2_ldrift2 ; Xldld = model->HSMHV2_xldld + small ; Nover = pParam->HSMHV2_nover ; Mu0 = here->HSMHV2_rdrmue * here->HSMHV2_rdrmuel ; Mu0_dT = Mu0_dT * here->HSMHV2_rdrmuel ; Vmax = here->HSMHV2_rdrvmax * here->HSMHV2_rdrvmaxw * here->HSMHV2_rdrvmaxl + small ; Vmax_dT = Vmax_dT * here->HSMHV2_rdrvmaxw * here->HSMHV2_rdrvmaxl ; Cx = here->HSMHV2_rdrcx * here->HSMHV2_rdrcxw ; Cx_dT = Cx_dT * here->HSMHV2_rdrcxw ; Car = here->HSMHV2_rdrcar ; //-----------------------------------------------------------* // Modified bias introduced to realize symmetry at Vddp=0. //-----------------// if(Vddp < 0) { Fn_SymAdd( Vzadd , -Vddp / 2 , model->HSMHV2_vzadd0 , T2 ) ; Vzadd_dVddp = - T2 / 2.0 ; if( Vzadd < ps_conv ) { Vzadd = ps_conv ; Vzadd_dVddp = 0.0 ; } Vddpz = Vddp - 2 * Vzadd ; Vddpz_dVddp = 1.0 - 2 * Vzadd_dVddp ; } else { Fn_SymAdd( Vzadd , Vddp / 2 , model->HSMHV2_vzadd0 , T2 ) ; Vzadd_dVddp = T2 / 2.0 ; if( Vzadd < ps_conv ) { Vzadd = ps_conv ; Vzadd_dVddp = 0.0 ; } Vddpz = Vddp + 2 * Vzadd ; Vddpz_dVddp = 1.0 + 2 * Vzadd_dVddp ; } Edri = Vddpz / Ldrift ; Edri_dVddp = Vddpz_dVddp / Ldrift ; Vdri = Mu0 * Edri ; Vdri_dVddp = Mu0 * Edri_dVddp ; Vdri_dT = Mu0_dT * Edri ; /*-----------------------------------------------------------* * Mu : mobility *-----------------*/ if ( Vddp >= 0 ) { T1 = Vdri / Vmax ; T1_dVddp = Vdri_dVddp / Vmax ; T1_dT = ( Vdri_dT * Vmax - Vdri * Vmax_dT ) / ( Vmax * Vmax ); } else { T1 = - Vdri / Vmax ; T1_dVddp = - Vdri_dVddp / Vmax ; T1_dT = - ( Vdri_dT * Vmax - Vdri * Vmax_dT ) / ( Vmax * Vmax ); } if( model->HSMHV2_rdrbbtmp == 0.0 ) { if( T1 == 0.0 ) { T2 = 0.0 ; T2_dT = 0.0 ; T2_dVddp = 0.0 ; T4 = 1.0 ; T4_dT = 0.0 ; T4_dVddp = 0.0 ; }else { if ( 1.0e0 - epsm10 <= here->HSMHV2_rdrbb && here->HSMHV2_rdrbb <= 1.0e0 + epsm10 ) { T3 = 1.0e0 ; T3_dT = 0.0e0 ; T3_dVddp = 0.0e0 ; } else if ( 2.0e0 - epsm10 <= here->HSMHV2_rdrbb && here->HSMHV2_rdrbb <= 2.0e0 + epsm10 ) { T3 = T1 ; T3_dT = T1_dT ; T3_dVddp = T1_dVddp ; } else { T3 = Fn_Pow( T1 , here->HSMHV2_rdrbb - 1.0e0 ) ; T3_dT = ( here->HSMHV2_rdrbb - 1.0e0 )* Fn_Pow( T1 , here->HSMHV2_rdrbb - 2.0e0 ) * T1_dT ; T3_dVddp = ( here->HSMHV2_rdrbb - 1.0e0 )* Fn_Pow( T1 , here->HSMHV2_rdrbb - 2.0e0 ) * T1_dVddp ; } T2 = T1 * T3 ; T2_dT = T1 * T3_dT + T3 * T1_dT ; T2_dVddp = T1 * T3_dVddp + T3 * T1_dVddp ; T4 = 1.0e0 + T2 ; T4_dT = T2_dT ; T4_dVddp = T2_dVddp ; } if ( 1.0e0 - epsm10 <= here->HSMHV2_rdrbb && here->HSMHV2_rdrbb <= 1.0e0 + epsm10 ) { T5 = 1.0 / T4 ; T5_dT = - T5 * T5 * T4_dT ; T5_dVddp = - T5 * T5 * T4_dVddp ; } else if ( 2.0e0 - epsm10 <= here->HSMHV2_rdrbb && here->HSMHV2_rdrbb <= 2.0e0 + epsm10 ) { T5 = 1.0 / sqrt( T4 ) ; T5_dT = - 0.5e0 / ( T4 * sqrt(T4) ) * T4_dT ; T5_dVddp = - 0.5e0 / ( T4 * sqrt(T4) ) * T4_dVddp; } else { T6 = Fn_Pow( T4 , ( - 1.0e0 / here->HSMHV2_rdrbb - 1.0e0 ) ) ; T5 = T4 * T6 ; T6_dT = ( - 1.0e0 / here->HSMHV2_rdrbb - 1.0e0 ) * Fn_Pow( T4 , ( - 1.0e0 / here->HSMHV2_rdrbb - 2.0e0 ) ) * T4_dT ; T6_dVddp = ( - 1.0e0 / here->HSMHV2_rdrbb - 1.0e0 ) * Fn_Pow( T4 , ( - 1.0e0 / here->HSMHV2_rdrbb - 2.0e0 ) ) * T4_dVddp ; T5_dT = T4_dT * T6 + T4 * T6_dT ; T5_dVddp = T4_dVddp * T6 + T4 * T6_dVddp ; } } else { if( T1 == 0.0 ) { T2 = 0.0 ; T2_dT = 0.0 ; T2_dVddp = 0.0 ; T4 = 1.0 ; T4_dT = 0.0 ; T4_dVddp = 0.0 ; }else { T3 = Fn_Pow( T1 , here->HSMHV2_rdrbb - 1.0e0 ) ; T3_dT = ( here->HSMHV2_rdrbb - 1.0e0 )* Fn_Pow( T1 , here->HSMHV2_rdrbb - 2.0e0 ) * T1_dT + T3*log(T1)*Rdrbb_dT ; T3_dVddp = ( here->HSMHV2_rdrbb - 1.0e0 )* Fn_Pow( T1 , here->HSMHV2_rdrbb - 2.0e0 ) * T1_dVddp ; T2 = T1 * T3 ; T2_dT = T1 * T3_dT + T3 * T1_dT ; T2_dVddp = T1 * T3_dVddp + T3 * T1_dVddp ; T4 = 1.0e0 + T2 ; T4_dT = T2_dT ; T4_dVddp = T2_dVddp ; } T6 = Fn_Pow( T4 , ( - 1.0e0 / here->HSMHV2_rdrbb - 1.0e0 ) ) ; T5 = T4 * T6 ; T6_dT = ( - 1.0e0 / here->HSMHV2_rdrbb - 1.0e0 ) * Fn_Pow( T4 , ( - 1.0e0 / here->HSMHV2_rdrbb - 2.0e0 ) ) * T4_dT +T6*log(T4)/here->HSMHV2_rdrbb/here->HSMHV2_rdrbb*Rdrbb_dT ; T6_dVddp = ( - 1.0e0 / here->HSMHV2_rdrbb - 1.0e0 ) * Fn_Pow( T4 , ( - 1.0e0 / here->HSMHV2_rdrbb - 2.0e0 ) ) * T4_dVddp ; T5_dT = T4_dT * T6 + T4 * T6_dT ; T5_dVddp = T4_dVddp * T6 + T4 * T6_dVddp ; } Mu = Mu0 * T5 ; Mu_dVddp = Mu0 * T5_dVddp ; Mu_dT = Mu0_dT * T5 + Mu0 * T5_dT ; /*-----------------------------------------------------------* * Carr : carrier density *-----------------*/ T4 = 1.0e0 + T1 ; T4_dVddp = T1_dVddp ; T4_dT = T1_dT ; T5 = 1.0 / T4 ; T5_dVddp = - T5 * T5 * T4_dVddp ; T5_dT = - T5 * T5 * T4_dT ; Carr = Nover * ( 1.0 + Car * ( 1.0 - T5 ) * Vddpz / ( Ldrift - model->HSMHV2_rdrdl2 ) ) ; Carr_dVddp = Nover * Car * ( - T5_dVddp * Vddpz + ( 1.0 - T5 ) * Vddpz_dVddp ) / ( Ldrift - model->HSMHV2_rdrdl2 ) ; Carr_dT = Nover * ( Car_dT * ( 1.0 - T5 ) + Car * ( - T5_dT ) ) * Vddpz / ( Ldrift - model->HSMHV2_rdrdl2 ) ; Carr += - here->HSMHV2_QbuLD / C_QE * model->HSMHV2_rdrqover; Carr_dVds = - here->HSMHV2_QbuLD_dVds / C_QE * model->HSMHV2_rdrqover; Carr_dVgs = - here->HSMHV2_QbuLD_dVgs / C_QE * model->HSMHV2_rdrqover; Carr_dVbs = - here->HSMHV2_QbuLD_dVbs / C_QE * model->HSMHV2_rdrqover; Carr_dT += - here->HSMHV2_QbuLD_dTi / C_QE * model->HSMHV2_rdrqover; /*-----------------------------------------------------------* * Xov : depth of the current flow *-----------------*/ T0 = -here->HSMHV2_Ps0LD ; T0_dVd = -here->HSMHV2_Ps0LD_dVds ; T0_dVg = -here->HSMHV2_Ps0LD_dVgs ; T0_dVb = -here->HSMHV2_Ps0LD_dVbs ; T0_dT = -here->HSMHV2_Ps0LD_dTi ; Fn_SZ( T0 , T0 , 1.0e-2 , T9 ) ; T0 += epsm10 ; T0_dVd *= T9 ; T0_dVg *= T9 ; T0_dVb *= T9 ; T0_dT *= T9 ; Wdepl = sqrt ( here->HSMHV2_kdep * T0 ) ; Wdepl_dVd = here->HSMHV2_kdep / ( 2.0 * Wdepl ) * T0_dVd ; Wdepl_dVg = here->HSMHV2_kdep / ( 2.0 * Wdepl ) * T0_dVg ; Wdepl_dVb = here->HSMHV2_kdep / ( 2.0 * Wdepl ) * T0_dVb ; Wdepl_dT = here->HSMHV2_kdep / ( 2.0 * Wdepl ) * T0_dT ; T2 = Vds - Vbs + model->HSMHV2_vbi ; T2_dVd = 1.0 ; T2_dVb = -1.0 ; Fn_SZ( T2 , T2 , 1.0e-2 , T9 ) ; T2 += epsm10 ; T2_dVd *= T9 ; T2_dVb *= T9 ; Wjunc0 = sqrt ( here->HSMHV2_kjunc * T2 ) ; Wjunc0_dVd = here->HSMHV2_kjunc / ( 2.0 * Wjunc0 ) * T2_dVd ; Wjunc0_dVb = here->HSMHV2_kjunc / ( 2.0 * Wjunc0 ) * T2_dVb ; Fn_SU( Wjunc, Wjunc0, Xldld, 10e-3*Xldld, T0 ); Wjunc_dVd = Wjunc0_dVd * T0; Wjunc_dVb = Wjunc0_dVb * T0; // Wrdrdjunc = model->HSMHV2_rdrdjunc + small ; Wrdrdjunc = model->HSMHV2_rdrdjunc + epsm10 ; Xov = here->HSMHV2_Xmax - Cx * ( here->HSMHV2_Xmax / Wrdrdjunc * Wdepl + here->HSMHV2_Xmax / Xldld * Wjunc ) ; Xov_dVds = - Cx * here->HSMHV2_Xmax / Wrdrdjunc * Wdepl_dVd - Cx * here->HSMHV2_Xmax / Xldld * Wjunc_dVd ; Xov_dVgs = - Cx * here->HSMHV2_Xmax / Wrdrdjunc * Wdepl_dVg ; Xov_dVbs = - Cx * here->HSMHV2_Xmax / Wrdrdjunc * Wdepl_dVb - Cx * here->HSMHV2_Xmax / Xldld * Wjunc_dVb ; Xov_dT = - Cx_dT * ( here->HSMHV2_Xmax / Wrdrdjunc * Wdepl + here->HSMHV2_Xmax / Xldld * Wjunc ) - Cx * here->HSMHV2_Xmax / Wrdrdjunc * Wdepl_dT ; Fn_SZ( Xov , Xov , (1.0 - here->HSMHV2_rdrcx) * here->HSMHV2_Xmax / 100 , T9 ) ; Xov_dVds *= T9 ; Xov_dVgs *= T9 ; Xov_dVbs *= T9 ; Xov_dT *= T9 ; /*-----------------------------------------------------------* * Rd : drift resistance *-----------------*/ T0 = C_QE / ( Ldrift + model->HSMHV2_rdrdl1 ); T1 = T0; T1_dVd = 0.0 ; GD = T1 * Xov * Mu * Carr ; GD_dVddp = T1 * Xov * Mu_dVddp * Carr + T1 * Xov * Mu * Carr_dVddp ; GD_dVgse = 0.0 ; GD_dT = T1 * Xov * Mu_dT * Carr + T1 * Xov_dT * Mu * Carr + T1 * Xov * Mu * Carr_dT ; GD_dVds = T1 * Mu * (Xov_dVds * Carr + Xov * Carr_dVds) + T1_dVd * Mu * Xov * Carr; GD_dVgs = T1 * Mu * (Xov_dVgs * Carr + Xov * Carr_dVgs); GD_dVbs = T1 * Mu * (Xov_dVbs * Carr + Xov * Carr_dVbs); if ( GD <= 0 ) { // GD = small ; GD = epsm10 ; GD_dVddp = 0.0 ; GD_dVgse = 0.0 ; GD_dT = 0.0 ; GD_dVds = 0.0 ; GD_dVgs = 0.0 ; GD_dVbs = 0.0 ; } Rd = 1 / GD ; Rd_dVddp = - GD_dVddp * Rd * Rd ; Rd_dVgse = - GD_dVgse * Rd * Rd ; Rd_dT = - GD_dT * Rd * Rd ; Rd_dVds = - GD_dVds * Rd * Rd ; Rd_dVgs = - GD_dVgs * Rd * Rd ; Rd_dVbs = - GD_dVbs * Rd * Rd ; /* Weff dependence of the resistances */ Rd = Rd / WeffLD_nf ; Fn_SU_CP( Rd, Rd, 1e6, 1e3, 2, T0 ) ; Rd_dVddp = Rd_dVddp*T0/WeffLD_nf ; Rd_dVgse = Rd_dVgse*T0/WeffLD_nf ; Rd_dT = Rd_dT*T0/WeffLD_nf ; Rd_dVds = Rd_dVds*T0/WeffLD_nf ; Rd_dVgs = Rd_dVgs*T0/WeffLD_nf ; Rd_dVbs = Rd_dVbs*T0/WeffLD_nf ; if ( here->HSMHV2subNode >= 0 && ( pParam->HSMHV2_nover * ( modelMKS->HSMHV2_nsubsub + pParam->HSMHV2_nover ) ) > 0 ) { /* external substrate node exists && LDMOS case: */ /* Substrate Effect */ T0 = model->HSMHV2_vbisub - model->HSMHV2_rdvdsub * here->HSMHV2_Vdserevz - model->HSMHV2_rdvsub * here->HSMHV2_Vsubsrev ; Fn_SZ( T1, T0, 10.0, T2 ) ; T1 += epsm10 ; T1_dVdserev = - model->HSMHV2_rdvdsub * here->HSMHV2_Vdserevz_dVd * T2 ; T1_dVsubsrev = - model->HSMHV2_rdvsub * T2 ; T0 = modelMKS->HSMHV2_nsubsub / ( pParam->HSMHV2_nover * ( modelMKS->HSMHV2_nsubsub + pParam->HSMHV2_nover ) ) ; T4 = 2 * C_ESI / C_QE * T0 ; Wdep = sqrt ( T4 * T1 ) + small ; Wdep_dVdserev = 0.5 * T4 * T1_dVdserev / Wdep ; Wdep_dVsubsrev = 0.5 * T4 * T1_dVsubsrev / Wdep ; Fn_SU( Wdep, Wdep, model->HSMHV2_ddrift, C_sub_delta * model->HSMHV2_ddrift, T0 ) ; Wdep_dVdserev *= T0 ; Wdep_dVsubsrev *= T0 ; T0 = model->HSMHV2_ddrift - Wdep ; Fn_SZ( T0, T0, C_sub_delta2, T2 ) ; T0 += epsm10; T6 = (here->HSMHV2_ldrift1 + here->HSMHV2_ldrift2 ) / T0 ; T6_dVdserev = T2 * Wdep_dVdserev * T6 / T0 ; T6_dVsubsrev = T2 * Wdep_dVsubsrev * T6 / T0 ; T0 = Rd ; Rd = T0 * T6 ; Rd_dVddp = Rd_dVddp * T6 ; Rd_dVgse = Rd_dVgse * T6 ; Rd_dVdse = T0 * T6_dVdserev ; Rd_dVbse = Rd_dVgse * T6 ; Rd_dVds = Rd_dVds * T6 ; Rd_dVgs = Rd_dVgs * T6 ; Rd_dVbs = Rd_dVbs * T6 ; Rd_dVsubs = T0 * T6_dVsubsrev ; Rd_dT = Rd_dT * T6 ; } /* Sheet resistances are added. */ Rd += here->HSMHV2_rd0 ; /* Re-stamps for hsmhvnoi.c */ /* Please see hsmhvnoi.c */ if ( Rd > Res_min && model->HSMHV2_cothrml ) here->HSMHV2drainConductance = Mfactor / Rd ; else here->HSMHV2drainConductance = 0.0 ; if ( here->HSMHV2_Rs > Res_min && model->HSMHV2_cothrml ) here->HSMHV2sourceConductance = Mfactor / here->HSMHV2_rs0 ; else here->HSMHV2sourceConductance = 0.0 ; /* Clamping to Res_min */ here->HSMHV2_Rs = here->HSMHV2_rs0 / Mfactor ; if(here->HSMHV2_Rs < Res_min) { here->HSMHV2_Rs = Res_min ; } here->HSMHV2_dRs_dVdse = 0.0 ; here->HSMHV2_dRs_dVgse = 0.0 ; here->HSMHV2_dRs_dVbse = 0.0 ; here->HSMHV2_dRs_dVsubs = 0.0 ; here->HSMHV2_dRs_dTi = 0.0 ; /* Clamping to Res_min */ here->HSMHV2_Rd = Rd / Mfactor ; if(here->HSMHV2_Rd < Res_min) { here->HSMHV2_Rd = Res_min ; here->HSMHV2_dRd_dVddp = 0.0 ; here->HSMHV2_dRd_dVdse = 0.0 ; here->HSMHV2_dRd_dVgse = 0.0 ; here->HSMHV2_dRd_dVbse = 0.0 ; here->HSMHV2_dRd_dVsubs = 0.0 ; here->HSMHV2_dRd_dTi = 0.0 ; here->HSMHV2_dRd_dVds = 0.0 ; here->HSMHV2_dRd_dVgs = 0.0 ; here->HSMHV2_dRd_dVbs = 0.0 ; } else { here->HSMHV2_dRd_dVddp = Rd_dVddp / Mfactor ; here->HSMHV2_dRd_dVdse = Rd_dVdse / Mfactor ; here->HSMHV2_dRd_dVgse = Rd_dVgse / Mfactor ; here->HSMHV2_dRd_dVbse = Rd_dVbse / Mfactor ; here->HSMHV2_dRd_dVsubs= Rd_dVsubs / Mfactor ; here->HSMHV2_dRd_dTi = Rd_dT / Mfactor ; here->HSMHV2_dRd_dVds = Rd_dVds / Mfactor ; here->HSMHV2_dRd_dVgs = Rd_dVgs / Mfactor ; here->HSMHV2_dRd_dVbs = Rd_dVbs / Mfactor ; } return ( HiSIM_OK ) ; } tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2temp_eval.h0000644000175000017500000004115313546075722024175 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhvtemp_eval.h DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ #define C_rdtemp_min 5.0e-3 #define C_rdtemp_dlt 1.0e-2 TTEMP = ckt->CKTtemp; if ( here->HSMHV2_dtemp_Given ) { TTEMP = TTEMP + here->HSMHV2_dtemp ; } TTEMP0 = TTEMP ; #ifdef HSMHV2EVAL /* Self heating */ TTEMP = TTEMP + deltemp ; #endif Tdiff0 = TTEMP0 - model->HSMHV2_ktnom ; Tdiff0_2 = TTEMP0 * TTEMP0 - model->HSMHV2_ktnom * model->HSMHV2_ktnom ; Tdiff = TTEMP - model->HSMHV2_ktnom ; Tdiff_2 = TTEMP * TTEMP - model->HSMHV2_ktnom * model->HSMHV2_ktnom ; here->HSMHV2_Tratio = TTEMP / model->HSMHV2_ktnom ; /* Band gap */ here->HSMHV2_eg = Eg = here->HSMHV2_egtnom - pParam->HSMHV2_bgtmp1 * Tdiff - pParam->HSMHV2_bgtmp2 * Tdiff_2 ; here->HSMHV2_sqrt_eg = sqrt( Eg ) ; #ifdef HSMHV2EVAL Eg_dT = -pParam->HSMHV2_bgtmp1 - 2.0e0 * TTEMP * pParam->HSMHV2_bgtmp2 ; #endif T1 = 1.0 / TTEMP ; T2 = 1.0 / model->HSMHV2_ktnom ; T3 = here->HSMHV2_egtnom + model->HSMHV2_egig + model->HSMHV2_igtemp2 * ( T1 - T2 ) + model->HSMHV2_igtemp3 * ( T1 * T1 - T2 * T2 ) ; here->HSMHV2_egp12 = sqrt ( T3 ) ; here->HSMHV2_egp32 = T3 * here->HSMHV2_egp12 ; /* Inverse of the thermal voltage */ here->HSMHV2_beta = beta = C_QE / (C_KB * TTEMP) ; here->HSMHV2_beta_inv = 1.0 / beta ; here->HSMHV2_beta2 = beta * beta ; here->HSMHV2_betatnom = C_QE / (C_KB * model->HSMHV2_ktnom) ; #ifdef HSMHV2EVAL beta_dT=-C_QE/(C_KB*TTEMP*TTEMP); beta_inv_dT = C_KB / C_QE ; #endif /* Intrinsic carrier concentration */ here->HSMHV2_nin = Nin = C_Nin0 * Fn_Pow (here->HSMHV2_Tratio, 1.5e0) * exp (- Eg / 2.0e0 * beta + here->HSMHV2_egtnom / 2.0e0 * here->HSMHV2_betatnom) ; #ifdef HSMHV2EVAL Nin_dT = C_Nin0 * exp (- Eg / 2.0e0 * beta + here->HSMHV2_egtnom / 2.0e0 * here->HSMHV2_betatnom) * 1.5e0 * Fn_Pow ( here->HSMHV2_Tratio , 0.5e0 ) / model->HSMHV2_ktnom + C_Nin0 * Fn_Pow (here->HSMHV2_Tratio, 1.5e0) * exp (- Eg / 2.0e0 * beta + here->HSMHV2_egtnom / 2.0e0 * here->HSMHV2_betatnom) * ( - Eg / 2.0e0 * beta_dT - beta / 2.0e0 * Eg_dT ); #endif /* Phonon Scattering (temperature-dependent part) */ T1 = Fn_Pow (here->HSMHV2_Tratio, pParam->HSMHV2_muetmp) ; here->HSMHV2_mphn0 = T1 / here->HSMHV2_mueph ; here->HSMHV2_mphn1 = here->HSMHV2_mphn0 * model->HSMHV2_mueph0 ; #ifdef HSMHV2EVAL T1_dT = pParam->HSMHV2_muetmp * Fn_Pow(here->HSMHV2_Tratio, pParam->HSMHV2_muetmp - 1.0 ) / model->HSMHV2_ktnom ; mphn0_dT = T1_dT / here->HSMHV2_mueph ; #endif if( model->HSMHV2_codep == 1 ) { /* depletion MOS parameter (temperature-dependent part) */ here->HSMHV2_Pb2n = 2.0/beta*log(here->HSMHV2_ndepm/Nin) ; here->HSMHV2_Vbipn = 1.0/beta*log(here->HSMHV2_ndepm*here->HSMHV2_nsub/Nin/Nin) ; here->HSMHV2_cnst0 = sqrt ( 2.0 * C_ESI * C_QE * here->HSMHV2_ndepm / beta ) ; here->HSMHV2_cnst1 = Nin*Nin/here->HSMHV2_ndepm/here->HSMHV2_ndepm ; T1 = Fn_Pow (here->HSMHV2_Tratio, model->HSMHV2_depmuetmp) ; here->HSMHV2_depmphn0 = T1 / model->HSMHV2_depmueph1 ; here->HSMHV2_depmphn1 = here->HSMHV2_depmphn0 * model->HSMHV2_depmueph0 ; T0 = 1.8 + 0.4 * here->HSMHV2_Tratio + 0.1 * here->HSMHV2_Tratio * here->HSMHV2_Tratio - model->HSMHV2_depvtmp * ( 1.0 - here->HSMHV2_Tratio ) ; here->HSMHV2_depvmax = modelMKS->HSMHV2_depvmax / T0 ; #ifdef HSMHV2EVAL Pb2n_dT = -here->HSMHV2_Pb2n/beta*beta_dT-2.0/beta/Nin*Nin_dT ; Vbipn_dT = -here->HSMHV2_Vbipn/beta*beta_dT-2/beta/Nin*Nin_dT ; cnst0_dT = 0.5e0 / here->HSMHV2_cnst0 * 2.0 * C_ESI * C_QE * here->HSMHV2_ndepm * beta_inv_dT ; cnst1_dT = 2.0e0 * Nin * Nin_dT / here->HSMHV2_ndepm / here->HSMHV2_ndepm ; T1_dT = model->HSMHV2_depmuetmp * Fn_Pow(here->HSMHV2_Tratio, model->HSMHV2_depmuetmp - 1.0 ) / model->HSMHV2_ktnom ; depmphn0_dT = T1_dT / model->HSMHV2_depmueph1 ; T0_dT = 1 / model->HSMHV2_ktnom * ( 0.4 + 0.2 * here->HSMHV2_Tratio + model->HSMHV2_depvtmp ) ; depVmax_dT = - modelMKS->HSMHV2_depvmax / ( T0 * T0 ) * T0_dT ; #endif } /* Pocket Overlap (temperature-dependent part) */ here->HSMHV2_ptovr = here->HSMHV2_ptovr0 / beta ; #ifdef HSMHV2EVAL ptovr_dT = here->HSMHV2_ptovr0 * beta_inv_dT ; #endif /* Velocity Temperature Dependence */ T1 = TTEMP / model->HSMHV2_ktnom ; T0 = 1.8 + 0.4 * T1 + 0.1 * T1 * T1 - pParam->HSMHV2_vtmp * (1.0 - T1) ; if ( model->HSMHV2_cotemp != 2 ) { /* without deltemp (COTEMP=0,1,3) */ here->HSMHV2_vmax = here->HSMHV2_vmax0 * pParam->HSMHV2_vmax / T0 * ( 1.0 + model->HSMHV2_vmaxt1 * Tdiff0 + model->HSMHV2_vmaxt2 * Tdiff0_2 ) ; #ifdef HSMHV2EVAL Vmax_dT=-here->HSMHV2_vmax0 * pParam->HSMHV2_vmax / ( T0 * T0 ) * ( 1.0 + model->HSMHV2_vmaxt1 * Tdiff0 + model->HSMHV2_vmaxt2 * Tdiff0_2 ) * 1/model->HSMHV2_ktnom * (0.4 + 0.2 * T1 + pParam->HSMHV2_vtmp) ; #endif } else { /* with deltemp (COTEMP=2) */ here->HSMHV2_vmax = here->HSMHV2_vmax0 * pParam->HSMHV2_vmax / T0 * ( 1.0 + model->HSMHV2_vmaxt1 * Tdiff + model->HSMHV2_vmaxt2 * Tdiff_2 ) ; #ifdef HSMHV2EVAL /* under development */ Vmax_dT = here->HSMHV2_vmax0 * pParam->HSMHV2_vmax / ( T0 * T0 ) * ( ( model->HSMHV2_vmaxt1 + 2.0 * TTEMP * model->HSMHV2_vmaxt2 ) * T0 - ( 1.0 + model->HSMHV2_vmaxt1 * Tdiff + model->HSMHV2_vmaxt2 * Tdiff_2 ) * 1/model->HSMHV2_ktnom * (0.4 + 0.2 * T1 + pParam->HSMHV2_vtmp) ) ; #endif } if ( model->HSMHV2_cotemp != 2 ) { /* without deltemp (COTEMP=0,1,3) */ here->HSMHV2_ninvd = here->HSMHV2_ninvd0 * ( 1.0 + model->HSMHV2_ninvdt1 * Tdiff0 + model->HSMHV2_ninvdt2 * Tdiff0_2 ) ; #ifdef HSMHV2EVAL ninvd_dT = 0.0 ; #endif } else { /* with deltemp (COTEMP=2) */ /* under development */ here->HSMHV2_ninvd = here->HSMHV2_ninvd0 * ( 1.0 + model->HSMHV2_ninvdt1 * Tdiff + model->HSMHV2_ninvdt2 * Tdiff_2 ) ; #ifdef HSMHV2EVAL ninvd_dT = here->HSMHV2_ninvd0 * ( model->HSMHV2_ninvdt1 + 2.0 * TTEMP * model->HSMHV2_ninvdt2 ) ; #endif } /* Temperature Dependence of RTH0 */ pParam->HSMHV2_rth = ( pParam->HSMHV2_rth0 + model->HSMHV2_rthtemp1 * Tdiff0 + model->HSMHV2_rthtemp2 * Tdiff0_2 ) * here->HSMHV2_rthtemp0 ; /* Temperature Dependence of POWRAT */ T2 = pParam->HSMHV2_powrat + model->HSMHV2_prattemp1 * Tdiff0 + model->HSMHV2_prattemp2 * Tdiff0_2 ; Fn_SL( T2 , T2 , 0 , 0.05 , T0 ); Fn_SU( here->HSMHV2_powratio , T2 , 1 , 0.05 , T0 ); /* 2 phi_B (temperature-dependent) */ /* @temp, with pocket */ here->HSMHV2_pb2 = 2.0e0 / beta * log (here->HSMHV2_nsub / Nin) ; #ifdef HSMHV2EVAL Pb2_dT = - (here->HSMHV2_pb2 * beta_dT + 2.0e0 / Nin * Nin_dT ) / beta ; #endif /* Depletion Width */ T1 = 2.0e0 * C_ESI / C_QE ; here->HSMHV2_wdpl = sqrt ( T1 / here->HSMHV2_nsub ) ; here->HSMHV2_wdplp = sqrt( T1 / ( here->HSMHV2_nsubp ) ) ; if( model->HSMHV2_codep == 0 ) { /* Coefficient of the F function for bulk charge */ here->HSMHV2_cnst0 = sqrt ( 2.0 * C_ESI * C_QE * here->HSMHV2_nsub / beta ) ; /* cnst1: n_{p0} / p_{p0} */ T1 = Nin / here->HSMHV2_nsub ; here->HSMHV2_cnst1 = T1 * T1 ; #ifdef HSMHV2EVAL cnst0_dT = 0.5e0 / here->HSMHV2_cnst0 * 2.0 * C_ESI * C_QE * here->HSMHV2_nsub * beta_inv_dT ; cnst1_dT = 2.0e0 * Nin * Nin_dT / here->HSMHV2_nsub / here->HSMHV2_nsub ; #endif } if( model->HSMHV2_codep == 0 ) { if ( pParam->HSMHV2_nover != 0.0 ) { here->HSMHV2_cnst0over = here->HSMHV2_cnst0 * sqrt( pParam->HSMHV2_nover / here->HSMHV2_nsub ) ; #ifdef HSMHV2EVAL cnst0over_dT = cnst0_dT * sqrt( pParam->HSMHV2_nover / here->HSMHV2_nsub ) ; #endif } if ( pParam->HSMHV2_novers != 0.0 ) { here->HSMHV2_cnst0overs = here->HSMHV2_cnst0 * sqrt( pParam->HSMHV2_novers / here->HSMHV2_nsub ) ; #ifdef HSMHV2EVAL cnst0overs_dT = cnst0_dT * sqrt( pParam->HSMHV2_novers / here->HSMHV2_nsub ) ; #endif } } else { if ( pParam->HSMHV2_nover != 0.0 ) { here->HSMHV2_cnst0over = here->HSMHV2_cnst0 * sqrt( pParam->HSMHV2_nover / here->HSMHV2_ndepm ) ; #ifdef HSMHV2EVAL cnst0over_dT = cnst0_dT * sqrt( pParam->HSMHV2_nover / here->HSMHV2_ndepm ) ; #endif } if ( pParam->HSMHV2_novers != 0.0 ) { here->HSMHV2_cnst0overs = here->HSMHV2_cnst0 * sqrt( pParam->HSMHV2_novers / here->HSMHV2_ndepm ) ; #ifdef HSMHV2EVAL cnst0overs_dT = cnst0_dT * sqrt( pParam->HSMHV2_novers / here->HSMHV2_ndepm ) ; #endif } } /* temperature-dependent resistance model */ /* drain side */ if ( pParam->HSMHV2_rd > 0.0 ) { T2 = here->HSMHV2_rdtemp0 * ( here->HSMHV2_ldrift1 * pParam->HSMHV2_rdslp1 * C_m2um + pParam->HSMHV2_rdict1 ) * ( here->HSMHV2_ldrift2 * model->HSMHV2_rdslp2 * C_m2um + model->HSMHV2_rdict2 ) ; if ( model->HSMHV2_cotemp == 1 ) { /* without deltemp (COTEMP=1) */ here->HSMHV2_rd = ( pParam->HSMHV2_rd + modelMKS->HSMHV2_rdtemp1 * Tdiff0 + modelMKS->HSMHV2_rdtemp2 * Tdiff0_2 ) * T2 ; Fn_SL( here->HSMHV2_rd, here->HSMHV2_rd, C_rdtemp_min * pParam->HSMHV2_rd, C_rdtemp_dlt * pParam->HSMHV2_rd, T0 ); #ifdef HSMHV2EVAL Rd0_dT = 0.0 ; #endif } else { /* with deltemp (COTEMP=0,2,3) */ here->HSMHV2_rd = ( pParam->HSMHV2_rd + modelMKS->HSMHV2_rdtemp1 * Tdiff + modelMKS->HSMHV2_rdtemp2 * Tdiff_2 ) * T2 ; Fn_SL( here->HSMHV2_rd, here->HSMHV2_rd, C_rdtemp_min * pParam->HSMHV2_rd, C_rdtemp_dlt * pParam->HSMHV2_rd, T0 ); #ifdef HSMHV2EVAL Rd0_dT = ( modelMKS->HSMHV2_rdtemp1 + 2.0 * TTEMP * modelMKS->HSMHV2_rdtemp2 ) * T2 * T0 ; #endif } } else { here->HSMHV2_rd = 0.0 ; } /* source side (asymmetric case) */ if ( pParam->HSMHV2_rs > 0.0 ) { T2 = here->HSMHV2_rdtemp0 * ( here->HSMHV2_ldrift1s * pParam->HSMHV2_rdslp1 * C_m2um + pParam->HSMHV2_rdict1 ) * ( here->HSMHV2_ldrift2s * model->HSMHV2_rdslp2 * C_m2um + model->HSMHV2_rdict2 ) ; if ( model->HSMHV2_cotemp == 1 ) { /* without deltemp (COTEMP=1) */ here->HSMHV2_rs = ( pParam->HSMHV2_rs + modelMKS->HSMHV2_rdtemp1 * Tdiff0 + modelMKS->HSMHV2_rdtemp2 * Tdiff0_2 ) * T2 ; Fn_SL( here->HSMHV2_rs, here->HSMHV2_rs, C_rdtemp_min * pParam->HSMHV2_rs, C_rdtemp_dlt * pParam->HSMHV2_rs, T0 ); #ifdef HSMHV2EVAL Rs0_dT = 0.0 ; #endif } else { /* with deltemp (COTEMP=0,2,3) */ here->HSMHV2_rs = ( pParam->HSMHV2_rs + modelMKS->HSMHV2_rdtemp1 * Tdiff + modelMKS->HSMHV2_rdtemp2 * Tdiff_2 ) * T2 ; Fn_SL( here->HSMHV2_rs, here->HSMHV2_rs, C_rdtemp_min * pParam->HSMHV2_rs, C_rdtemp_dlt * pParam->HSMHV2_rs, T0 ); #ifdef HSMHV2EVAL Rs0_dT = ( modelMKS->HSMHV2_rdtemp1 + 2.0 * TTEMP * modelMKS->HSMHV2_rdtemp2 ) * T2 * T0 ; #endif } } else { here->HSMHV2_rs = 0.0 ; } if ( pParam->HSMHV2_rdvd > 0.0 ) { T4 = here->HSMHV2_rdvdtemp0 * ( here->HSMHV2_ldrift1 * pParam->HSMHV2_rdslp1 * C_m2um + pParam->HSMHV2_rdict1 ) * ( here->HSMHV2_ldrift2 * model->HSMHV2_rdslp2 * C_m2um + model->HSMHV2_rdict2 ) ; T1 = ( 1 - pParam->HSMHV2_rdov13 ) * here->HSMHV2_loverld * C_m2um ; T0 = - model->HSMHV2_rdov11 / ( model->HSMHV2_rdov12 + small ) ; T3 = ( T0 * here->HSMHV2_loverld * C_m2um + 1.0 + model->HSMHV2_rdov11 ) ; Fn_SL( T5 , T3 * T4 , T4 , 10.0e-3 , T6 ) ; Fn_SU( T7 , T5 , T4 * ( model->HSMHV2_rdov11 + 1.0) , 50.0e-6 , T6 ) ; Fn_SL( T2 , T7 + T1 * T4 , 0, 50.0e-6 , T6 ) ; if ( model->HSMHV2_cotemp == 0 || model->HSMHV2_cotemp == 1 ) { /* without deltemp (COTEMP=0,1) */ here->HSMHV2_rdvd = ( pParam->HSMHV2_rdvd + modelMKS->HSMHV2_rdvdtemp1 * Tdiff0 + modelMKS->HSMHV2_rdvdtemp2 * Tdiff0_2 ) * T2 ; Fn_SL( here->HSMHV2_rdvd, here->HSMHV2_rdvd, C_rdtemp_min * pParam->HSMHV2_rdvd, C_rdtemp_dlt * pParam->HSMHV2_rdvd, T0 ); #ifdef HSMHV2EVAL Rdvd_dT = 0.0 ; #endif } else { /* with deltemp (COTEMP=2,3) */ here->HSMHV2_rdvd = ( pParam->HSMHV2_rdvd + modelMKS->HSMHV2_rdvdtemp1 * Tdiff + modelMKS->HSMHV2_rdvdtemp2 * Tdiff_2 ) * T2 ; Fn_SL( here->HSMHV2_rdvd, here->HSMHV2_rdvd, C_rdtemp_min * pParam->HSMHV2_rdvd, C_rdtemp_dlt * pParam->HSMHV2_rdvd, T0 ); #ifdef HSMHV2EVAL Rdvd_dT = ( modelMKS->HSMHV2_rdvdtemp1 + 2.0 * TTEMP * modelMKS->HSMHV2_rdvdtemp2 ) * T2 * T0 ; #endif } T4 = here->HSMHV2_rdvdtemp0 * ( here->HSMHV2_ldrift1s * pParam->HSMHV2_rdslp1 * C_m2um + pParam->HSMHV2_rdict1 ) * ( here->HSMHV2_ldrift2s * model->HSMHV2_rdslp2 * C_m2um + model->HSMHV2_rdict2 ) ; T1 = ( 1 - pParam->HSMHV2_rdov13 ) * here->HSMHV2_lovers * C_m2um ; T0 = - model->HSMHV2_rdov11 / ( model->HSMHV2_rdov12 + small ) ; T3 = ( T0 * here->HSMHV2_lovers * C_m2um + 1.0 + model->HSMHV2_rdov11 ) ; Fn_SL( T5 , T3 * T4 , T4 , 10.0e-3 , T6 ) ; Fn_SU( T7 , T5 , T4 * ( model->HSMHV2_rdov11 + 1.0) , 50.0e-6 , T6 ) ; Fn_SL( T2 , T7 + T1 * T4 , 0, 50.0e-6 , T6 ) ; if ( model->HSMHV2_cotemp == 0 || model->HSMHV2_cotemp == 1 ) { /* without deltemp (COTEMP=0,1) */ here->HSMHV2_rsvd = ( pParam->HSMHV2_rdvd + modelMKS->HSMHV2_rdvdtemp1 * Tdiff0 + modelMKS->HSMHV2_rdvdtemp2 * Tdiff0_2 ) * T2 ; Fn_SL( here->HSMHV2_rsvd, here->HSMHV2_rsvd, C_rdtemp_min * pParam->HSMHV2_rdvd, C_rdtemp_dlt * pParam->HSMHV2_rdvd, T0 ); #ifdef HSMHV2EVAL Rsvd_dT = 0.0 ; #endif } else { /* with deltemp (COTEMP=2,3) */ here->HSMHV2_rsvd = ( pParam->HSMHV2_rdvd + modelMKS->HSMHV2_rdvdtemp1 * Tdiff + modelMKS->HSMHV2_rdvdtemp2 * Tdiff_2 ) * T2 ; Fn_SL( here->HSMHV2_rsvd, here->HSMHV2_rsvd, C_rdtemp_min * pParam->HSMHV2_rdvd, C_rdtemp_dlt * pParam->HSMHV2_rdvd, T0 ); #ifdef HSMHV2EVAL Rsvd_dT = ( modelMKS->HSMHV2_rdvdtemp1 + 2.0 * TTEMP * modelMKS->HSMHV2_rdvdtemp2 ) * T2 * T0 ; #endif } } else { here->HSMHV2_rdvd = 0.0 ; here->HSMHV2_rsvd = 0.0 ; } /* costi0 and costi1 for STI transistor model (temperature-dependent part) */ here->HSMHV2_costi0 = here->HSMHV2_costi00 * sqrt(here->HSMHV2_beta_inv) ; here->HSMHV2_costi0_p2 = here->HSMHV2_costi0 * here->HSMHV2_costi0 ; here->HSMHV2_costi1 = here->HSMHV2_nin * here->HSMHV2_nin * here->HSMHV2_nsti_p2 ; /* end of HSMHV2temp_eval.h */ tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2par.c0000644000175000017500000001676313546075722023007 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhvpar.c DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "hsmhv2def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/fteext.h" int HSMHV2param( int param, IFvalue *value, GENinstance *inst, IFvalue *select) { double scale; HSMHV2instance *here = (HSMHV2instance*)inst; NG_IGNORE(select); if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; switch (param) { case HSMHV2_COSELFHEAT: here->HSMHV2_coselfheat = value->iValue; here->HSMHV2_coselfheat_Given = TRUE; break; case HSMHV2_COSUBNODE: here->HSMHV2_cosubnode = value->iValue; here->HSMHV2_cosubnode_Given = TRUE; break; case HSMHV2_W: here->HSMHV2_w = value->rValue * scale; here->HSMHV2_w_Given = TRUE; break; case HSMHV2_L: here->HSMHV2_l = value->rValue * scale; here->HSMHV2_l_Given = TRUE; break; case HSMHV2_AS: here->HSMHV2_as = value->rValue * scale * scale; here->HSMHV2_as_Given = TRUE; break; case HSMHV2_AD: here->HSMHV2_ad = value->rValue * scale * scale; here->HSMHV2_ad_Given = TRUE; break; case HSMHV2_PS: here->HSMHV2_ps = value->rValue * scale; here->HSMHV2_ps_Given = TRUE; break; case HSMHV2_PD: here->HSMHV2_pd = value->rValue * scale; here->HSMHV2_pd_Given = TRUE; break; case HSMHV2_NRS: here->HSMHV2_nrs = value->rValue; here->HSMHV2_nrs_Given = TRUE; break; case HSMHV2_NRD: here->HSMHV2_nrd = value->rValue; here->HSMHV2_nrd_Given = TRUE; break; case HSMHV2_DTEMP: here->HSMHV2_dtemp = value->rValue; here->HSMHV2_dtemp_Given = TRUE; break; case HSMHV2_OFF: here->HSMHV2_off = value->iValue; break; case HSMHV2_IC_VBS: here->HSMHV2_icVBS = value->rValue; here->HSMHV2_icVBS_Given = TRUE; break; case HSMHV2_IC_VDS: here->HSMHV2_icVDS = value->rValue; here->HSMHV2_icVDS_Given = TRUE; break; case HSMHV2_IC_VGS: here->HSMHV2_icVGS = value->rValue; here->HSMHV2_icVGS_Given = TRUE; break; case HSMHV2_IC: switch (value->v.numValue) { case 3: here->HSMHV2_icVBS = *(value->v.vec.rVec + 2); here->HSMHV2_icVBS_Given = TRUE; case 2: here->HSMHV2_icVGS = *(value->v.vec.rVec + 1); here->HSMHV2_icVGS_Given = TRUE; case 1: here->HSMHV2_icVDS = *(value->v.vec.rVec); here->HSMHV2_icVDS_Given = TRUE; break; default: return(E_BADPARM); } break; case HSMHV2_CORBNET: here->HSMHV2_corbnet = value->iValue; here->HSMHV2_corbnet_Given = TRUE; break; case HSMHV2_RBPB: here->HSMHV2_rbpb = value->rValue; here->HSMHV2_rbpb_Given = TRUE; break; case HSMHV2_RBPD: here->HSMHV2_rbpd = value->rValue; here->HSMHV2_rbpd_Given = TRUE; break; case HSMHV2_RBPS: here->HSMHV2_rbps = value->rValue; here->HSMHV2_rbps_Given = TRUE; break; case HSMHV2_RBDB: here->HSMHV2_rbdb = value->rValue; here->HSMHV2_rbdb_Given = TRUE; break; case HSMHV2_RBSB: here->HSMHV2_rbsb = value->rValue; here->HSMHV2_rbsb_Given = TRUE; break; case HSMHV2_CORG: here->HSMHV2_corg = value->iValue; here->HSMHV2_corg_Given = TRUE; break; case HSMHV2_NGCON: here->HSMHV2_ngcon = value->rValue; here->HSMHV2_ngcon_Given = TRUE; break; case HSMHV2_XGW: here->HSMHV2_xgw = value->rValue; here->HSMHV2_xgw_Given = TRUE; break; case HSMHV2_XGL: here->HSMHV2_xgl = value->rValue; here->HSMHV2_xgl_Given = TRUE; break; case HSMHV2_NF: here->HSMHV2_nf = value->rValue; here->HSMHV2_nf_Given = TRUE; break; case HSMHV2_SA: here->HSMHV2_sa = value->rValue; here->HSMHV2_sa_Given = TRUE; break; case HSMHV2_SB: here->HSMHV2_sb = value->rValue; here->HSMHV2_sb_Given = TRUE; break; case HSMHV2_SD: here->HSMHV2_sd = value->rValue; here->HSMHV2_sd_Given = TRUE; break; case HSMHV2_NSUBCDFM: here->HSMHV2_nsubcdfm = value->rValue; here->HSMHV2_nsubcdfm_Given = TRUE; break; case HSMHV2_M: here->HSMHV2_m = value->rValue; here->HSMHV2_m_Given = TRUE; break; case HSMHV2_SUBLD1: here->HSMHV2_subld1 = value->rValue; here->HSMHV2_subld1_Given = TRUE; break; case HSMHV2_SUBLD2: here->HSMHV2_subld2 = value->rValue; here->HSMHV2_subld2_Given = TRUE; break; case HSMHV2_LOVER: here->HSMHV2_lover = value->rValue; here->HSMHV2_lover_Given = TRUE; break; case HSMHV2_LOVERS: here->HSMHV2_lovers = value->rValue; here->HSMHV2_lovers_Given = TRUE; break; case HSMHV2_LOVERLD: here->HSMHV2_loverld = value->rValue; here->HSMHV2_loverld_Given = TRUE; break; case HSMHV2_LDRIFT1: here->HSMHV2_ldrift1 = value->rValue; here->HSMHV2_ldrift1_Given = TRUE; break; case HSMHV2_LDRIFT2: here->HSMHV2_ldrift2 = value->rValue; here->HSMHV2_ldrift2_Given = TRUE; break; case HSMHV2_LDRIFT1S: here->HSMHV2_ldrift1s = value->rValue; here->HSMHV2_ldrift1s_Given = TRUE; break; case HSMHV2_LDRIFT2S: here->HSMHV2_ldrift2s = value->rValue; here->HSMHV2_ldrift2s_Given = TRUE; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2temp_eval_dio.h0000644000175000017500000002230513546075722025026 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhvtemp_eval_dio.h DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ #define small 1.0e-50 TTEMP = ckt->CKTtemp; if ( here->HSMHV2_dtemp_Given ) { TTEMP = TTEMP + here->HSMHV2_dtemp ; } TTEMP0 = TTEMP ; #ifdef HSMHV2EVAL /* Self heating */ TTEMP = TTEMP + deltemp ; #endif /* Band gap */ T1 = TTEMP - model->HSMHV2_ktnom ; T2 = TTEMP * TTEMP - model->HSMHV2_ktnom * model->HSMHV2_ktnom ; Eg = here->HSMHV2_egtnom - pParam->HSMHV2_bgtmp1 * T1 - pParam->HSMHV2_bgtmp2 * T2 ; #ifdef HSMHV2EVAL Eg_dT = -pParam->HSMHV2_bgtmp1 - 2.0e0 * TTEMP * pParam->HSMHV2_bgtmp2 ; #endif /* Inverse of the thermal voltage */ here->HSMHV2_beta = beta = C_QE / (C_KB * TTEMP) ; here->HSMHV2_beta_inv = 1.0 / beta ; here->HSMHV2_beta2 = beta * beta ; here->HSMHV2_betatnom = C_QE / (C_KB * model->HSMHV2_ktnom) ; #ifdef HSMHV2EVAL beta_dT=-C_QE/(C_KB*TTEMP*TTEMP); beta_inv_dT = C_KB / C_QE ; #endif log_Tratio = log (here->HSMHV2_Tratio) ; /* for substrate-drain junction diode. */ js = pParam->HSMHV2_js0d * exp ((here->HSMHV2_egtnom * here->HSMHV2_betatnom - Eg * beta + model->HSMHV2_xtid * log_Tratio) / pParam->HSMHV2_njd) ; jssw = pParam->HSMHV2_js0swd * exp ((here->HSMHV2_egtnom * here->HSMHV2_betatnom - Eg * beta + model->HSMHV2_xtid * log_Tratio) / model->HSMHV2_njswd) ; js2 = pParam->HSMHV2_js0d * exp ((here->HSMHV2_egtnom * here->HSMHV2_betatnom - Eg * beta + model->HSMHV2_xti2d * log_Tratio) / pParam->HSMHV2_njd) ; jssw2 = pParam->HSMHV2_js0swd * exp ((here->HSMHV2_egtnom * here->HSMHV2_betatnom - Eg * beta + model->HSMHV2_xti2d * log_Tratio) / model->HSMHV2_njswd) ; #ifdef HSMHV2EVAL T0 = - Eg * beta_dT - Eg_dT * beta ; /* Self heating */ T1 = T0 + model->HSMHV2_xtid / TTEMP ; /* Self heating */ T2 = T0 + model->HSMHV2_xti2d / TTEMP ; /* Self heating */ js_dT = js * T1 / pParam->HSMHV2_njd; /* Self heating */ jssw_dT = jssw * T1/ model->HSMHV2_njswd ; /* Self heating */ js2_dT = js2 * T2 / pParam->HSMHV2_njd; /* Self heating */ jssw2_dT = jssw2 * T2 / model->HSMHV2_njswd; /* Self heating */ #endif here->HSMHV2_isbd = here->HSMHV2_ad * js + here->HSMHV2_pd * jssw ; here->HSMHV2_isbd2 = here->HSMHV2_ad * js2 + here->HSMHV2_pd * jssw2 ; #ifdef HSMHV2EVAL isbd_dT = here->HSMHV2_ad * js_dT + here->HSMHV2_pd * jssw_dT ; /* Self heating */ isbd2_dT = here->HSMHV2_ad * js2_dT + here->HSMHV2_pd * jssw2_dT ; /* Self heating */ #endif T0 = here->HSMHV2_Tratio * here->HSMHV2_Tratio ; T2 = here->HSMHV2_isbd + small ; #ifdef HSMHV2EVAL T1_dT = 1.0 / model->HSMHV2_ktnom ; /* Self heating */ T0_dT = 2.0 * here->HSMHV2_Tratio * T1_dT ; /* Self heating */ T2_dT = isbd_dT ; /* Self heating */ #endif here->HSMHV2_vbdt = pParam->HSMHV2_njd / beta * log ( pParam->HSMHV2_vdiffjd * T0 / T2 + 1.0 ) ; here->HSMHV2_exptempd = exp (( here->HSMHV2_Tratio - 1.0 ) * model->HSMHV2_ctempd ) ; #ifdef HSMHV2EVAL vbdt_dT = - beta_dT / beta * here->HSMHV2_vbdt + pParam->HSMHV2_njd / beta * pParam->HSMHV2_vdiffjd / ( pParam->HSMHV2_vdiffjd * T0 / T2 + 1.0 ) * ( T0_dT / T2 - T0 / T2 / T2 * T2_dT ) ; /* Self heating */ #endif here->HSMHV2_jd_nvtm_invd = 1.0 / ( pParam->HSMHV2_njd / beta ) ; here->HSMHV2_jd_expcd = exp (here->HSMHV2_vbdt * here->HSMHV2_jd_nvtm_invd ) ; #ifdef HSMHV2EVAL exptempd_dT = model->HSMHV2_ctempd / model->HSMHV2_ktnom * here->HSMHV2_exptempd ; /* Self heating */ jd_nvtm_invd_dT = beta_dT / pParam->HSMHV2_njd ; /* Self heating */ jd_expcd_dT = here->HSMHV2_jd_expcd * ( vbdt_dT * here->HSMHV2_jd_nvtm_invd + here->HSMHV2_vbdt * jd_nvtm_invd_dT ) ; /* Self heating */ #endif /* for substrate-source junction diode. */ js = pParam->HSMHV2_js0s * exp ((here->HSMHV2_egtnom * here->HSMHV2_betatnom - Eg * beta + model->HSMHV2_xtis * log_Tratio) / pParam->HSMHV2_njs) ; jssw = pParam->HSMHV2_js0sws * exp ((here->HSMHV2_egtnom * here->HSMHV2_betatnom - Eg * beta + model->HSMHV2_xtis * log_Tratio) / model->HSMHV2_njsws) ; js2 = pParam->HSMHV2_js0s * exp ((here->HSMHV2_egtnom * here->HSMHV2_betatnom - Eg * beta + model->HSMHV2_xti2s * log_Tratio) / pParam->HSMHV2_njs) ; jssw2 = pParam->HSMHV2_js0sws * exp ((here->HSMHV2_egtnom * here->HSMHV2_betatnom - Eg * beta + model->HSMHV2_xti2s * log_Tratio) / model->HSMHV2_njsws) ; #ifdef HSMHV2EVAL T0 = - Eg * beta_dT - Eg_dT * beta ; /* Self heating */ T1 = T0 + model->HSMHV2_xtis / TTEMP ; /* Self heating */ T2 = T0 + model->HSMHV2_xti2s / TTEMP ; /* Self heating */ js_dT = js * T1 / pParam->HSMHV2_njs; /* Self heating */ jssw_dT = jssw * T1/ model->HSMHV2_njsws ; /* Self heating */ js2_dT = js2 * T2 / pParam->HSMHV2_njs; /* Self heating */ jssw2_dT = jssw2 * T2 / model->HSMHV2_njsws; /* Self heating */ #endif here->HSMHV2_isbs = here->HSMHV2_as * js + here->HSMHV2_ps * jssw ; here->HSMHV2_isbs2 = here->HSMHV2_as * js2 + here->HSMHV2_ps * jssw2 ; #ifdef HSMHV2EVAL isbs_dT = here->HSMHV2_as * js_dT + here->HSMHV2_ps * jssw_dT ; /* Self heating */ isbs2_dT = here->HSMHV2_as * js2_dT + here->HSMHV2_ps * jssw2_dT ; /* Self heating */ #endif T0 = here->HSMHV2_Tratio * here->HSMHV2_Tratio ; T3 = here->HSMHV2_isbs + small ; #ifdef HSMHV2EVAL T1_dT = 1.0 / model->HSMHV2_ktnom ; /* Self heating */ T0_dT = 2.0 * here->HSMHV2_Tratio * T1_dT ; /* Self heating */ T3_dT = isbs_dT ; /* Self heating */ #endif here->HSMHV2_vbst = pParam->HSMHV2_njs / beta * log ( pParam->HSMHV2_vdiffjs * T0 / T3 + 1.0 ) ; here->HSMHV2_exptemps = exp (( here->HSMHV2_Tratio - 1.0 ) * model->HSMHV2_ctemps ) ; #ifdef HSMHV2EVAL vbst_dT = - beta_dT / beta * here->HSMHV2_vbst + pParam->HSMHV2_njs / beta * pParam->HSMHV2_vdiffjs / ( pParam->HSMHV2_vdiffjs * T0 / T3 + 1.0 ) * ( T0_dT / T3 - T0 / T3 / T3 * T3_dT ) ; /* Self heating */ #endif here->HSMHV2_jd_nvtm_invs = 1.0 / ( pParam->HSMHV2_njs / beta ) ; here->HSMHV2_jd_expcs = exp (here->HSMHV2_vbst * here->HSMHV2_jd_nvtm_invs ) ; #ifdef HSMHV2EVAL exptemps_dT = model->HSMHV2_ctemps / model->HSMHV2_ktnom * here->HSMHV2_exptemps ; /* Self heating */ jd_nvtm_invs_dT = beta_dT / pParam->HSMHV2_njs ; /* Self heating */ jd_expcs_dT = here->HSMHV2_jd_expcs * ( vbst_dT * here->HSMHV2_jd_nvtm_invs + here->HSMHV2_vbst * jd_nvtm_invs_dT ) ; /* Self heating */ #endif /* end of HSMHV2temp_eval_dio.h */ tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2.c0000644000175000017500000020065613546075722022300 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhv.c DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "hsmhv2def.h" #include "ngspice/suffix.h" IFparm HSMHV2pTable[] = { /* parameters */ IOP( "coselfheat", HSMHV2_COSELFHEAT, IF_INTEGER, "Calculation of self heating model"), IOP( "cosubnode", HSMHV2_COSUBNODE, IF_INTEGER, "Switch tempNode to subNode"), IOP( "l", HSMHV2_L, IF_REAL , "Length"), IOP( "w", HSMHV2_W, IF_REAL , "Width"), IOP( "ad", HSMHV2_AD, IF_REAL , "Drain area"), IOP( "as", HSMHV2_AS, IF_REAL , "Source area"), IOP( "pd", HSMHV2_PD, IF_REAL , "Drain perimeter"), IOP( "ps", HSMHV2_PS, IF_REAL , "Source perimeter"), IOP( "nrd", HSMHV2_NRD, IF_REAL , "Number of squares in drain"), IOP( "nrs", HSMHV2_NRS, IF_REAL , "Number of squares in source"), IOP( "dtemp", HSMHV2_DTEMP,IF_REAL , ""), IOP( "off", HSMHV2_OFF, IF_FLAG , "Device is initially off"), IP ( "ic", HSMHV2_IC, IF_REALVEC , "Vector of DS,GS,BS initial voltages"), IOP("corbnet", HSMHV2_CORBNET, IF_INTEGER, "Activate body resistance (1) or not (0)"), IOP("rbpb", HSMHV2_RBPB, IF_REAL, ""), IOP("rbpd", HSMHV2_RBPD, IF_REAL, ""), IOP("rbps", HSMHV2_RBPS, IF_REAL, ""), IOP("rbdb", HSMHV2_RBDB, IF_REAL, ""), IOP("rbsb", HSMHV2_RBSB, IF_REAL, ""), IOP("corg", HSMHV2_CORG, IF_INTEGER, "Activate gate resistance (1) or not (0)"), IOP("ngcon", HSMHV2_NGCON, IF_REAL, "Number of gate contacts"), IOP("xgw", HSMHV2_XGW, IF_REAL, "Distance from gate contact to channel edge"), IOP("xgl", HSMHV2_XGL, IF_REAL, "Offset of gate length due to variation in patterning"), IOP("nf", HSMHV2_NF, IF_REAL, "Number of fingers"), IOP("sa", HSMHV2_SA, IF_REAL, "Distance from STI edge to Gate edge [m]"), IOP("sb", HSMHV2_SB, IF_REAL, "Distance from STI edge to Gate edge [m]"), IOP("sd", HSMHV2_SD, IF_REAL, "Distance from Gate edge to Gate edge [m]"), IOP("nsubcdfm", HSMHV2_NSUBCDFM, IF_REAL, "Constant part of Nsub for DFM [1/cm^3]"), IOP("m", HSMHV2_M, IF_REAL, "Multiplication factor [-]"), IOP("subld1", HSMHV2_SUBLD1, IF_REAL, "Parameter for impact-ionization current in the drift region [-]"), IOP("subld2", HSMHV2_SUBLD2, IF_REAL, "Parameter for impact-ionization current in the drift region [m^{-1}*V^{3/2}]"), IOP("lover", HSMHV2_LOVER, IF_REAL, "Overlap length on source side [m]"), IOP("lovers", HSMHV2_LOVERS, IF_REAL, "Overlap length on source side [m]"), IOP("loverld", HSMHV2_LOVERLD, IF_REAL, "Overlap length on drain side [m]"), IOP("ldrift1", HSMHV2_LDRIFT1, IF_REAL, "Parameter for drift region length-1 [m]"), IOP("ldrift2", HSMHV2_LDRIFT2, IF_REAL, "Parameter for drift region length-2 [m]"), IOP("ldrift1s", HSMHV2_LDRIFT1S, IF_REAL, "Parameter for drift region length-1 on source side[m]"), IOP("ldrift2s", HSMHV2_LDRIFT2S, IF_REAL, "Parameter for drift region length-2 on source side[m]"), /* Output Physical Values: */ OP ( "ids", HSMHV2_CD, IF_REAL , "Ids"), /* Drain-Source current */ OP ( "isub", HSMHV2_ISUB, IF_REAL , "Isub"), /* Substrate current */ OP ( "isubld", HSMHV2_ISUBLD, IF_REAL , "IsubLD"), /* Substrate current */ OP ( "idsibpc", HSMHV2_IDSIBPC, IF_REAL , "IdsIBPC"), /* Impact-Ionization Induced Bulk Potential Change (IBPC)*/ OP ( "igidl", HSMHV2_IGIDL, IF_REAL , "Igidl"), /* Gate-Induced Drain Leakage current */ OP ( "igisl", HSMHV2_IGISL, IF_REAL , "Igisl"), /* Gate-Induced Source Leakage current */ OP ( "igd", HSMHV2_IGD, IF_REAL , "Igd"), /* Gate-Drain current */ OP ( "igs", HSMHV2_IGS, IF_REAL , "Igs"), /* Gate-Source current */ OP ( "igb", HSMHV2_IGB, IF_REAL , "Igb"), /* Gate-Substrate current */ OP ( "gm", HSMHV2_GM, IF_REAL , "Gm"), /* Transconductance */ OP ( "gds", HSMHV2_GDS, IF_REAL , "Gds"), /* Channel conductance */ OP ( "gmbs", HSMHV2_GMBS, IF_REAL , "Gmbs"), /* Body effect (Back gate) transconductance */ OP ( "gmt", HSMHV2_GMT, IF_REAL , "GmT"), /* Temp - transconductance ----SHE----*/ OP ( "von", HSMHV2_VON, IF_REAL , "Von"), /* Threshold voltage */ OP ( "vdsat", HSMHV2_VDSAT, IF_REAL , "Vdsat"), /* Saturation voltage */ OP ( "qb", HSMHV2_QB, IF_REAL , "Qb"), /* Bulk charge */ OP ( "qg", HSMHV2_QG, IF_REAL , "Qg"), /* Gate charge */ OP ( "qd", HSMHV2_QD, IF_REAL , "Qd"), /* Drain charge */ OP ( "cgg", HSMHV2_CGG, IF_REAL , "Cgg"), /* MOSFET capacitance */ OP ( "cgd", HSMHV2_CGD, IF_REAL , "Cgd"), /* MOSFET capacitance */ OP ( "cgs", HSMHV2_CGS, IF_REAL , "Cgs"), /* MOSFET capacitance */ OP ( "cbg", HSMHV2_CBG, IF_REAL , "Cbg"), /* MOSFET capacitance */ OP ( "cbs", HSMHV2_CBSB, IF_REAL , "Cbs"), /* MOSFET capacitance */ OP ( "cbd", HSMHV2_CBDB, IF_REAL , "Cbd"), /* MOSFET capacitance */ OP ( "cdg", HSMHV2_CDG, IF_REAL , "Cdg"), /* MOSFET capacitance */ OP ( "cdd", HSMHV2_CDD, IF_REAL , "Cdd"), /* MOSFET capacitance */ OP ( "cds", HSMHV2_CDS, IF_REAL , "Cds"), /* MOSFET capacitance */ OP ( "cgdo", HSMHV2_CGDO, IF_REAL , "Cgdo"), /* MOSFET overlap capacitance */ OP ( "cgso", HSMHV2_CGSO, IF_REAL , "Cgso"), /* MOSFET overlap capacitance */ OP ( "cgbo", HSMHV2_CGBO, IF_REAL , "Cgbo"), /* MOSFET overlap capacitance */ OP ( "ibd", HSMHV2_CBD, IF_REAL , "Ibd"), /* Diode current */ OP ( "ibs", HSMHV2_CBS, IF_REAL , "Ibs"), /* Diode current */ OP ( "gbd", HSMHV2_GBD, IF_REAL , "Gbd"), /* Diode conductance */ OP ( "gbs", HSMHV2_GBS, IF_REAL , "Gbs"), /* Diode conductance */ OP ( "capbd", HSMHV2_CAPBD, IF_REAL , "Capbd"), /* Diode capacitance */ OP ( "capbs", HSMHV2_CAPBS, IF_REAL , "Capbs") /* Diode capacitance */ }; IFparm HSMHV2mPTable[] = { /* model parameters */ IP("nmos", HSMHV2_MOD_NMOS, IF_FLAG, ""), IP("pmos", HSMHV2_MOD_PMOS, IF_FLAG, ""), IOP("level", HSMHV2_MOD_LEVEL, IF_INTEGER, ""), IOP("info", HSMHV2_MOD_INFO, IF_INTEGER, "Information level (for debug, etc.)"), IOP("noise", HSMHV2_MOD_NOISE, IF_INTEGER, "Noise model selector"), IOP("version", HSMHV2_MOD_VERSION, IF_STRING, "Model version"), IOP("show", HSMHV2_MOD_SHOW, IF_INTEGER, "Show physical value"), IOP("corsrd", HSMHV2_MOD_CORSRD, IF_INTEGER, "Handling of Rs and Rd"), IOP("corg", HSMHV2_MOD_CORG, IF_INTEGER, "Activate gate resistance (1) or not (0)"), IOP("coiprv", HSMHV2_MOD_COIPRV, IF_INTEGER, "Use ids_prv as initial guess of Ids (internal flag)"), IOP("copprv", HSMHV2_MOD_COPPRV, IF_INTEGER, "Use ps{0/l}_prv as initial guess of Ps{0/l} (internal flag)"), IOP("coadov", HSMHV2_MOD_COADOV, IF_INTEGER, "Add overlap to intrisic"), IOP("coisub", HSMHV2_MOD_COISUB, IF_INTEGER, "Calculate isub"), IOP("coiigs", HSMHV2_MOD_COIIGS, IF_INTEGER, "Calculate igate"), IOP("cogidl", HSMHV2_MOD_COGIDL, IF_INTEGER, "Calculate igidl"), IOP("coovlp", HSMHV2_MOD_COOVLP, IF_INTEGER, "Calculate overlap charge on the drain side"), IOP("coovlps", HSMHV2_MOD_COOVLPS, IF_INTEGER, "Calculate overlap charge on the source side"), IOP("coflick", HSMHV2_MOD_COFLICK, IF_INTEGER, "Calculate 1/f noise"), IOP("coisti", HSMHV2_MOD_COISTI, IF_INTEGER, "Calculate STI"), IOP("conqs", HSMHV2_MOD_CONQS, IF_INTEGER, "Calculate in nqs mode or qs mode"), IOP("corbnet", HSMHV2_MOD_CORBNET, IF_INTEGER, ""), IOP("cothrml", HSMHV2_MOD_COTHRML, IF_INTEGER, "Calculate thermal noise"), IOP("coign", HSMHV2_MOD_COIGN, IF_INTEGER, "Calculate induced gate noise"), IOP("codfm", HSMHV2_MOD_CODFM, IF_INTEGER, "Calculation of model for DFM"), IOP("coqovsm", HSMHV2_MOD_COQOVSM, IF_INTEGER, "select smoothing method of Qover"), IOP("coselfheat", HSMHV2_MOD_COSELFHEAT, IF_INTEGER, "Calculation of self heating model"), IOP("cosubnode", HSMHV2_MOD_COSUBNODE, IF_INTEGER, "Switch tempNode to subNode"), IOP("cosym", HSMHV2_MOD_COSYM, IF_INTEGER, "Model selector for symmetry device"), IOP("cotemp", HSMHV2_MOD_COTEMP, IF_INTEGER, "Model flag for temperature dependence"), IOP("coldrift", HSMHV2_MOD_COLDRIFT, IF_INTEGER, "selector for Ldrift parameter"), IOP("cordrift", HSMHV2_MOD_CORDRIFT, IF_INTEGER, ""), IOP("coerrrep", HSMHV2_MOD_COERRREP, IF_INTEGER, "selector for error report"), IOP("codep", HSMHV2_MOD_CODEP, IF_INTEGER, "selector for depletion device"), IOP("coddlt", HSMHV2_MOD_CODDLT, IF_INTEGER, "selector for DDLT model"), IOP("vbsmin", HSMHV2_MOD_VBSMIN, IF_REAL, "Minimum back bias voltage to be treated in hsmhveval [V]"), IOP("vmax", HSMHV2_MOD_VMAX, IF_REAL, "Saturation velocity [cm/s]"), IOP("vmaxt1", HSMHV2_MOD_VMAXT1, IF_REAL, "Saturation velocity coeff. [-]"), IOP("vmaxt2", HSMHV2_MOD_VMAXT2, IF_REAL, "Saturation velocity coeff. [-]"), IOP("bgtmp1", HSMHV2_MOD_BGTMP1, IF_REAL, "First order temp. coeff. for band gap [V/K]"), IOP("bgtmp2", HSMHV2_MOD_BGTMP2, IF_REAL, "Second order temp. coeff. for band gap [V/K^2]"), IOP("eg0", HSMHV2_MOD_EG0, IF_REAL, ""), IOP("tox", HSMHV2_MOD_TOX, IF_REAL, "Oxide thickness [m]"), IOP("xld", HSMHV2_MOD_XLD, IF_REAL, "Lateral diffusion of S/D under the gate [m]"), IOP("xldld", HSMHV2_MOD_XLDLD, IF_REAL, "Lateral diffusion of Drain under the gate [m]"), IOP("xwdld", HSMHV2_MOD_XWDLD, IF_REAL, ""), IOP("lover", HSMHV2_MOD_LOVER, IF_REAL, "Overlap length on source side [m], alias for lovers"), IOP("lovers", HSMHV2_MOD_LOVERS, IF_REAL, "Overlap length on source side [m]"), IOP("rdov11", HSMHV2_MOD_RDOV11, IF_REAL, "Dependence coeff. for overlap length"), IOP("rdov12", HSMHV2_MOD_RDOV12, IF_REAL, "Dependence coeff. for overlap length"), IOP("rdov13", HSMHV2_MOD_RDOV13, IF_REAL, "Dependence coeff. for overlap length"), IOP("rdslp1", HSMHV2_MOD_RDSLP1, IF_REAL, "LDRIFT1 dependence of resistance for CORSRD=1,3"), IOP("rdict1", HSMHV2_MOD_RDICT1, IF_REAL, "LDRIFT1 dependence of resistance for CORSRD=1,3"), IOP("rdslp2", HSMHV2_MOD_RDSLP2, IF_REAL, "LDRIFT2 dependence of resistance for CORSRD=1,3"), IOP("rdict2", HSMHV2_MOD_RDICT2, IF_REAL, "LDRIFT2 dependence of resistance for CORSRD=1,3"), IOP("loverld", HSMHV2_MOD_LOVERLD, IF_REAL, "Overlap length on the drain side"), IOP("ldrift1", HSMHV2_MOD_LDRIFT1, IF_REAL, "Drift region length-1 on the drain side[m]"), IOP("ldrift2", HSMHV2_MOD_LDRIFT2, IF_REAL, "Drift region length-2 on the drain side[m]"), IOP("ldrift1s", HSMHV2_MOD_LDRIFT1S, IF_REAL, "Drift region length-1 on the source side[m]"), IOP("ldrift2s", HSMHV2_MOD_LDRIFT2S, IF_REAL, "Drift region length-2 on the source side[m]"), IOP("subld1", HSMHV2_MOD_SUBLD1, IF_REAL, "Impact-ionization current in the drift region [-]"), IOP("subld1l", HSMHV2_MOD_SUBLD1L, IF_REAL, "Impact-ionization current in the drift region [um^{subld1lp}]"), IOP("subld1lp", HSMHV2_MOD_SUBLD1LP, IF_REAL, "Impact-ionization current in the drift region [-]"), IOP("subld2", HSMHV2_MOD_SUBLD2, IF_REAL, "Impact-ionization current in the drift region [m^{-1}*V^{3/2}]"), IOP("xpdv", HSMHV2_MOD_XPDV, IF_REAL, "Impact-ionization current in the drift region [m^{-1}]"), IOP("xpvdth", HSMHV2_MOD_XPVDTH, IF_REAL, "Impact-ionization current in the drift region [V]"), IOP("xpvdthg", HSMHV2_MOD_XPVDTHG, IF_REAL, "Impact-ionization current in the drift region [V^{-1}]"), IOP("ddltmax", HSMHV2_MOD_DDLTMAX, IF_REAL, ""), /* Vdseff */ IOP("ddltslp", HSMHV2_MOD_DDLTSLP, IF_REAL, ""), /* Vdseff */ IOP("ddltict", HSMHV2_MOD_DDLTICT, IF_REAL, ""), /* Vdseff */ IOP("vfbover", HSMHV2_MOD_VFBOVER, IF_REAL, ""), IOP("nover", HSMHV2_MOD_NOVER, IF_REAL, ""), IOP("novers", HSMHV2_MOD_NOVERS, IF_REAL, ""), IOP("xwd", HSMHV2_MOD_XWD, IF_REAL, "Lateral diffusion along the width dir. [m]"), IOP("xwdc", HSMHV2_MOD_XWDC, IF_REAL, "Lateral diffusion along the width dir. for capacitance [m]"), IOP("xl", HSMHV2_MOD_XL, IF_REAL, "Gate length offset due to mask/etch effect [m]"), IOP("xw", HSMHV2_MOD_XW, IF_REAL, "Gate width offset due to mask/etch effect [m]"), IOP("saref", HSMHV2_MOD_SAREF, IF_REAL, "Reference distance from STI edge to Gate edge [m]"), IOP("sbref", HSMHV2_MOD_SBREF, IF_REAL, "Reference distance from STI edge to Gate edge [m]"), IOP("ll", HSMHV2_MOD_LL, IF_REAL, "Gate length parameter"), IOP("lld", HSMHV2_MOD_LLD, IF_REAL, "Gate length parameter"), IOP("lln", HSMHV2_MOD_LLN, IF_REAL, "Gate length parameter"), IOP("wl", HSMHV2_MOD_WL, IF_REAL, "Gate width parameter"), IOP("wl1", HSMHV2_MOD_WL1, IF_REAL, "Gate width parameter"), IOP("wl1p", HSMHV2_MOD_WL1P, IF_REAL, "Gate width parameter"), IOP("wl2", HSMHV2_MOD_WL2, IF_REAL, "Gate width parameter"), IOP("wl2p", HSMHV2_MOD_WL2P, IF_REAL, "Gate width parameter"), IOP("wld", HSMHV2_MOD_WLD, IF_REAL, "Gate width parameter"), IOP("wln", HSMHV2_MOD_WLN, IF_REAL, "Gate width parameter"), IOP("xqy", HSMHV2_MOD_XQY, IF_REAL, "[m]"), IOP("xqy1", HSMHV2_MOD_XQY1, IF_REAL, "[F m^{XQY2}]"), IOP("xqy2", HSMHV2_MOD_XQY2, IF_REAL, "[-]"), IOP("rs", HSMHV2_MOD_RS, IF_REAL, "Source contact resistance [ohm m]"), IOP("rd", HSMHV2_MOD_RD, IF_REAL, "Drain contact resistance [ohm m]"), IOP("rsh", HSMHV2_MOD_RSH, IF_REAL, "Source/drain diffusion sheet resistance [ohm]"), IOP("rshg", HSMHV2_MOD_RSHG, IF_REAL, "Gate-elecrode sheet resistance"), IOP("vfbc", HSMHV2_MOD_VFBC, IF_REAL, "Constant part of Vfb [V]"), IOP("vbi", HSMHV2_MOD_VBI, IF_REAL, "Built-in potential [V]"), IOP("nsubc", HSMHV2_MOD_NSUBC, IF_REAL, "Constant part of Nsub [1/cm^3]"), IOP("parl2", HSMHV2_MOD_PARL2, IF_REAL, "Under diffusion [m]"), IOP("lp", HSMHV2_MOD_LP, IF_REAL, "Length of pocket potential [m]"), IOP("nsubp", HSMHV2_MOD_NSUBP, IF_REAL, "[1/cm^3]"), IOP("nsubp0", HSMHV2_MOD_NSUBP0, IF_REAL, "Pocket implant parameter"), IOP("nsubwp", HSMHV2_MOD_NSUBWP, IF_REAL, "Pocket implant parameter"), IOP("scp1", HSMHV2_MOD_SCP1, IF_REAL, "Parameter for pocket [-]"), IOP("scp2", HSMHV2_MOD_SCP2, IF_REAL, "Parameter for pocket [1/V]"), IOP("scp3", HSMHV2_MOD_SCP3, IF_REAL, "Parameter for pocket [m/V]"), IOP("sc1", HSMHV2_MOD_SC1, IF_REAL, "Parameter for SCE [-]"), IOP("sc2", HSMHV2_MOD_SC2, IF_REAL, "Parameter for SCE [1/V]"), IOP("sc3", HSMHV2_MOD_SC3, IF_REAL, "Parameter for SCE [m/V]"), IOP("sc4", HSMHV2_MOD_SC4, IF_REAL, "Parameter for SCE [1/V]"), IOP("pgd1", HSMHV2_MOD_PGD1, IF_REAL, "Parameter for gate-poly depletion [V]"), IOP("pgd2", HSMHV2_MOD_PGD2, IF_REAL, "Parameter for gate-poly depletion [V]"), //IOP("pgd3", HSMHV2_MOD_PGD3, IF_REAL, "Parameter for gate-poly depletion [-]"), IOP("pgd4", HSMHV2_MOD_PGD4, IF_REAL, "Parameter for gate-poly depletion [-]"), IOP("ndep", HSMHV2_MOD_NDEP, IF_REAL, "Coeff. of Qbm for Eeff [-]"), IOP("ndepl", HSMHV2_MOD_NDEPL, IF_REAL, "Coeff. of Qbm for Eeff [-]"), IOP("ndeplp", HSMHV2_MOD_NDEPLP, IF_REAL, "Coeff. of Qbm for Eeff [-]"), IOP("ninv", HSMHV2_MOD_NINV, IF_REAL, "Coeff. of Qnm for Eeff [-]"), IOP("ninvd", HSMHV2_MOD_NINVD, IF_REAL, "Modification of Vdse dependence on Eeff [1/V]"), IOP("ninvdw", HSMHV2_MOD_NINVDW, IF_REAL, "Coeff of modification of Vdse dependence on Eeff [-]"), IOP("ninvdwp", HSMHV2_MOD_NINVDWP, IF_REAL, "Coeff of modification of Vdse dependence on Eeff [-]"), IOP("ninvdt1", HSMHV2_MOD_NINVDT1, IF_REAL, "Coeff of modification of Vdse dependence on Eeff [-]"), IOP("ninvdt2", HSMHV2_MOD_NINVDT2, IF_REAL, "Coeff of modification of Vdse dependence on Eeff [-]"), IOP("muecb0", HSMHV2_MOD_MUECB0, IF_REAL, "Const. part of coulomb scattering [cm^2/Vs]"), IOP("muecb1", HSMHV2_MOD_MUECB1, IF_REAL, "Coeff. for coulomb scattering [cm^2/Vs]"), IOP("mueph0", HSMHV2_MOD_MUEPH0, IF_REAL, "Power of Eeff for phonon scattering [-]"), IOP("mueph1", HSMHV2_MOD_MUEPH1, IF_REAL, ""), IOP("muephw", HSMHV2_MOD_MUEPHW, IF_REAL, ""), IOP("muepwp", HSMHV2_MOD_MUEPWP, IF_REAL, "Phonon scattering parameter"), IOP("muephl", HSMHV2_MOD_MUEPHL, IF_REAL, "Phonon scattering parameter"), IOP("mueplp", HSMHV2_MOD_MUEPLP, IF_REAL, "Phonon scattering parameter"), IOP("muephs", HSMHV2_MOD_MUEPHS, IF_REAL, ""), IOP("muepsp", HSMHV2_MOD_MUEPSP, IF_REAL, ""), IOP("vtmp", HSMHV2_MOD_VTMP, IF_REAL, ""), IOP("wvth0", HSMHV2_MOD_WVTH0, IF_REAL, ""), IOP("muesr0", HSMHV2_MOD_MUESR0, IF_REAL, "Power of Eeff for S.R. scattering [-]"), IOP("muesr1", HSMHV2_MOD_MUESR1, IF_REAL, "Coeff. for S.R. scattering [-]"), IOP("muesrl", HSMHV2_MOD_MUESRL, IF_REAL, "Surface roughness parameter"), IOP("muesrw", HSMHV2_MOD_MUESRW, IF_REAL, "Change of surface roughness related mobility"), IOP("mueswp", HSMHV2_MOD_MUESWP, IF_REAL, "Change of surface roughness related mobility"), IOP("mueslp", HSMHV2_MOD_MUESLP, IF_REAL, "Surface roughness parameter"), IOP("muetmp", HSMHV2_MOD_MUETMP, IF_REAL, "Parameter for mobility [-]"), IOP("bb", HSMHV2_MOD_BB, IF_REAL, "Empirical mobility model coefficient [-]"), IOP("sub1", HSMHV2_MOD_SUB1, IF_REAL, "Parameter for Isub [1/V]"), IOP("sub2", HSMHV2_MOD_SUB2, IF_REAL, "Parameter for Isub [V]"), IOP("svgs", HSMHV2_MOD_SVGS, IF_REAL, "Coefficient for Vg of Psislsat"), IOP("svbs", HSMHV2_MOD_SVBS, IF_REAL, "Coefficient for Vbs of Psislsat"), IOP("svbsl", HSMHV2_MOD_SVBSL, IF_REAL, " "), IOP("svds", HSMHV2_MOD_SVDS, IF_REAL, " "), IOP("slg", HSMHV2_MOD_SLG, IF_REAL, " "), IOP("sub1l", HSMHV2_MOD_SUB1L, IF_REAL, " "), IOP("sub2l", HSMHV2_MOD_SUB2L, IF_REAL, " "), IOP("fn1", HSMHV2_MOD_FN1, IF_REAL, " "), IOP("fn2", HSMHV2_MOD_FN2, IF_REAL, " "), IOP("fn3", HSMHV2_MOD_FN3, IF_REAL, " "), IOP("fvbs", HSMHV2_MOD_FVBS, IF_REAL, " "), IOP("svgsl", HSMHV2_MOD_SVGSL, IF_REAL, " "), IOP("svgslp", HSMHV2_MOD_SVGSLP, IF_REAL, " "), IOP("svgswp", HSMHV2_MOD_SVGSWP, IF_REAL, " "), IOP("svgsw", HSMHV2_MOD_SVGSW, IF_REAL, " "), IOP("svbslp", HSMHV2_MOD_SVBSLP, IF_REAL, " "), IOP("slgl", HSMHV2_MOD_SLGL, IF_REAL, " "), IOP("slglp", HSMHV2_MOD_SLGLP, IF_REAL, " "), IOP("sub1lp", HSMHV2_MOD_SUB1LP, IF_REAL, " "), IOP("nsti", HSMHV2_MOD_NSTI, IF_REAL, "Parameter for STI [1/cm^3]"), IOP("wsti", HSMHV2_MOD_WSTI, IF_REAL, "Parameter for STI [m]"), IOP("wstil", HSMHV2_MOD_WSTIL, IF_REAL, "Parameter for STI [?]"), IOP("wstilp", HSMHV2_MOD_WSTILP, IF_REAL, "Parameter for STI [?]"), IOP("wstiw", HSMHV2_MOD_WSTIW, IF_REAL, "Parameter for STI [?]"), IOP("wstiwp", HSMHV2_MOD_WSTIWP, IF_REAL, "Parameter for STI [?]"), IOP("scsti1", HSMHV2_MOD_SCSTI1, IF_REAL, "Parameter for STI [-]"), IOP("scsti2", HSMHV2_MOD_SCSTI2, IF_REAL, "Parameter for STI [1/V]"), IOP("vthsti", HSMHV2_MOD_VTHSTI, IF_REAL, "Parameter for STI"), IOP("vdsti", HSMHV2_MOD_VDSTI, IF_REAL, "Parameter for STI [-]"), IOP("muesti1", HSMHV2_MOD_MUESTI1, IF_REAL, "STI Stress mobility parameter"), IOP("muesti2", HSMHV2_MOD_MUESTI2, IF_REAL, "STI Stress mobility parameter"), IOP("muesti3", HSMHV2_MOD_MUESTI3, IF_REAL, "STI Stress mobility parameter"), IOP("nsubpsti1", HSMHV2_MOD_NSUBPSTI1, IF_REAL, "STI Stress pocket implant parameter"), IOP("nsubpsti2", HSMHV2_MOD_NSUBPSTI2, IF_REAL, "STI Stress pocket implant parameter"), IOP("nsubpsti3", HSMHV2_MOD_NSUBPSTI3, IF_REAL, "STI Stress pocket implant parameter"), IOP("lpext", HSMHV2_MOD_LPEXT, IF_REAL, "Pocket extension"), IOP("npext", HSMHV2_MOD_NPEXT, IF_REAL, "Pocket extension"), IOP("scp22", HSMHV2_MOD_SCP22, IF_REAL, ""), IOP("scp21", HSMHV2_MOD_SCP21, IF_REAL, ""), IOP("bs1", HSMHV2_MOD_BS1, IF_REAL, ""), IOP("bs2", HSMHV2_MOD_BS2, IF_REAL, ""), IOP("cgso", HSMHV2_MOD_CGSO, IF_REAL, "G-S overlap capacitance per unit W [F/m]"), IOP("cgdo", HSMHV2_MOD_CGDO, IF_REAL, "G-D overlap capacitance per unit W [F/m]"), IOP("cgbo", HSMHV2_MOD_CGBO, IF_REAL, "G-B overlap capacitance per unit L [F/m]"), IOP("tpoly", HSMHV2_MOD_TPOLY, IF_REAL, "Height of poly gate on the source side[m]"), IOP("js0", HSMHV2_MOD_JS0, IF_REAL, "Saturation current density [A/m^2]"), IOP("js0sw", HSMHV2_MOD_JS0SW, IF_REAL, "Side wall saturation current density [A/m]"), IOP("nj", HSMHV2_MOD_NJ, IF_REAL, "Emission coefficient [-]"), IOP("njsw", HSMHV2_MOD_NJSW, IF_REAL, "Sidewall emission coefficient"), IOP("xti", HSMHV2_MOD_XTI, IF_REAL, "Junction current temparature exponent coefficient [-]"), IOP("cj", HSMHV2_MOD_CJ, IF_REAL, "Bottom junction capacitance per unit area at zero bias [F/m^2]"), IOP("cjsw", HSMHV2_MOD_CJSW, IF_REAL, "Source/drain sidewall junction capacitance grading coefficient per unit length at zero bias [F/m]"), IOP("cjswg", HSMHV2_MOD_CJSWG, IF_REAL, "Source/drain gate sidewall junction capacitance per unit length at zero bias [F/m]"), IOP("mj", HSMHV2_MOD_MJ, IF_REAL, "Bottom junction capacitance grading coefficient"), IOP("mjsw", HSMHV2_MOD_MJSW, IF_REAL, "Source/drain sidewall junction capacitance grading coefficient"), IOP("mjswg", HSMHV2_MOD_MJSWG, IF_REAL, "Source/drain gate sidewall junction capacitance grading coefficient"), IOP("pb", HSMHV2_MOD_PB, IF_REAL, "Bottom junction build-in potential [V]"), IOP("pbsw", HSMHV2_MOD_PBSW, IF_REAL, "Source/drain sidewall junction build-in potential [V]"), IOP("pbswg", HSMHV2_MOD_PBSWG, IF_REAL, "Source/drain gate sidewall junction build-in potential [V]"), IOP("xti2", HSMHV2_MOD_XTI2, IF_REAL, "Temperature coefficient [-]"), IOP("cisb", HSMHV2_MOD_CISB, IF_REAL, "Reverse bias saturation current [-]"), IOP("cvb", HSMHV2_MOD_CVB, IF_REAL, "Bias dependence coefficient of cisb [-]"), IOP("ctemp", HSMHV2_MOD_CTEMP, IF_REAL, "Temperature coefficient [-]"), IOP("cisbk", HSMHV2_MOD_CISBK, IF_REAL, "Reverse bias saturation current [A]"), IOP("cvbk", HSMHV2_MOD_CVBK, IF_REAL, "Inactived by CVB "), IOP("divx", HSMHV2_MOD_DIVX, IF_REAL, " [1/V]"), IOP("clm1", HSMHV2_MOD_CLM1, IF_REAL, "Parameter for CLM [-]"), IOP("clm2", HSMHV2_MOD_CLM2, IF_REAL, "Parameter for CLM [1/m]"), IOP("clm3", HSMHV2_MOD_CLM3, IF_REAL, "Parameter for CLM [-]"), IOP("clm5", HSMHV2_MOD_CLM5, IF_REAL, "Parameter for CLM [-]"), IOP("clm6", HSMHV2_MOD_CLM6, IF_REAL, "Parameter for CLM [um^{-clm5}]"), IOP("vover", HSMHV2_MOD_VOVER, IF_REAL, "Parameter for overshoot [m^{voverp}]"), IOP("voverp", HSMHV2_MOD_VOVERP, IF_REAL, "Parameter for overshoot [-]"), IOP("vovers", HSMHV2_MOD_VOVERS, IF_REAL, "Parameter for overshoot [-]"), IOP("voversp", HSMHV2_MOD_VOVERSP, IF_REAL, "Parameter for overshoot [-]"), IOP("wfc", HSMHV2_MOD_WFC, IF_REAL, "Parameter for narrow channel effect [m*F/(cm^2)]"), IOP("nsubcw", HSMHV2_MOD_NSUBCW, IF_REAL, "Parameter for narrow channel effect "), IOP("nsubcwp", HSMHV2_MOD_NSUBCWP, IF_REAL, "Parameter for narrow channel effect "), IOP("qme1", HSMHV2_MOD_QME1, IF_REAL, "Parameter for quantum effect [mV]"), IOP("qme2", HSMHV2_MOD_QME2, IF_REAL, "Parameter for quantum effect [V]"), IOP("qme3", HSMHV2_MOD_QME3, IF_REAL, "Parameter for quantum effect [m]"), IOP("gidl1", HSMHV2_MOD_GIDL1, IF_REAL, "Parameter for GIDL [?]"), IOP("gidl2", HSMHV2_MOD_GIDL2, IF_REAL, "Parameter for GIDL [?]"), IOP("gidl3", HSMHV2_MOD_GIDL3, IF_REAL, "Parameter for GIDL [?]"), IOP("gidl4", HSMHV2_MOD_GIDL4, IF_REAL, "Parameter for GIDL [?]"), IOP("gidl5", HSMHV2_MOD_GIDL5, IF_REAL, "Parameter for GIDL [?]"), IOP("glpart1", HSMHV2_MOD_GLPART1, IF_REAL, "Parameter for gate current [-]"), IOP("gleak1", HSMHV2_MOD_GLEAK1, IF_REAL, "Parameter for gate current [A*V^(-3/2)/C]"), IOP("gleak2", HSMHV2_MOD_GLEAK2, IF_REAL, "Parameter for gate current [V^(-1/2)/m ]"), IOP("gleak3", HSMHV2_MOD_GLEAK3, IF_REAL, "Parameter for gate current [-]"), IOP("gleak4", HSMHV2_MOD_GLEAK4, IF_REAL, "Parameter for gate current [1/m]"), IOP("gleak5", HSMHV2_MOD_GLEAK5, IF_REAL, "Parameter for gate current [V/m]"), IOP("gleak6", HSMHV2_MOD_GLEAK6, IF_REAL, "Parameter for gate current [V]"), IOP("gleak7", HSMHV2_MOD_GLEAK7, IF_REAL, "Parameter for gate current [m^2]"), IOP("glksd1", HSMHV2_MOD_GLKSD1, IF_REAL, "Parameter for gate current [A*m/V^2]"), IOP("glksd2", HSMHV2_MOD_GLKSD2, IF_REAL, "Parameter for gate current [1/(V*m)]"), IOP("glksd3", HSMHV2_MOD_GLKSD3, IF_REAL, "Parameter for gate current [1/m]"), IOP("glkb1", HSMHV2_MOD_GLKB1, IF_REAL, "Parameter for gate current [A/V^2]"), IOP("glkb2", HSMHV2_MOD_GLKB2, IF_REAL, "Parameter for gate current [m/V]"), IOP("glkb3", HSMHV2_MOD_GLKB3, IF_REAL, "Parameter for gate current [V]"), IOP("egig", HSMHV2_MOD_EGIG, IF_REAL, "Parameter for gate current [V]"), IOP("igtemp2", HSMHV2_MOD_IGTEMP2, IF_REAL, "Parameter for gate current [V*k]"), IOP("igtemp3", HSMHV2_MOD_IGTEMP3, IF_REAL, "Parameter for gate current [V*k^2]"), IOP("vzadd0", HSMHV2_MOD_VZADD0, IF_REAL, "Vzadd at Vds=0 [V]"), IOP("pzadd0", HSMHV2_MOD_PZADD0, IF_REAL, "Pzadd at Vds=0 [V]"), IOP("nftrp", HSMHV2_MOD_NFTRP, IF_REAL, ""), IOP("nfalp", HSMHV2_MOD_NFALP, IF_REAL, ""), IOP("cit", HSMHV2_MOD_CIT, IF_REAL, ""), IOP("falph", HSMHV2_MOD_FALPH, IF_REAL, "Parameter for 1/f noise"), IOP("kappa", HSMHV2_MOD_KAPPA, IF_REAL, "Dielectric constant for high-k stacked gate"), //IOP("pthrou", HSMHV2_MOD_PTHROU, IF_REAL, "Modify subthreshold slope [-]"), IOP("vdiffj", HSMHV2_MOD_VDIFFJ, IF_REAL, "Threshold voltage for S/D junction diode [V]"), IOP("dly1", HSMHV2_MOD_DLY1, IF_REAL, "Parameter for transit time [-]"), IOP("dly2", HSMHV2_MOD_DLY2, IF_REAL, "Parameter for transit time [-]"), IOP("dly3", HSMHV2_MOD_DLY3, IF_REAL, "Parameter for transforming bulk charge [s/F]"), IOP("dlyov", HSMHV2_MOD_DLYOV, IF_REAL, "Parameter for transforming overlap charge [s/F]"), /* not used */ IOP("tnom", HSMHV2_MOD_TNOM, IF_REAL, "Nominal temperature [K]"), IOP("ovslp", HSMHV2_MOD_OVSLP, IF_REAL, ""), IOP("ovmag", HSMHV2_MOD_OVMAG, IF_REAL, ""), IOP("gbmin", HSMHV2_MOD_GBMIN, IF_REAL, ""), IOP("rbpb", HSMHV2_MOD_RBPB, IF_REAL, ""), IOP("rbpd", HSMHV2_MOD_RBPD, IF_REAL, ""), /* not used */ IOP("rbps", HSMHV2_MOD_RBPS, IF_REAL, ""), /* not used */ IOP("rbdb", HSMHV2_MOD_RBDB, IF_REAL, ""), IOP("rbsb", HSMHV2_MOD_RBSB, IF_REAL, ""), IOP("ibpc1", HSMHV2_MOD_IBPC1, IF_REAL, "Parameter for impact-ionization induced bulk potential change"), IOP("ibpc1l", HSMHV2_MOD_IBPC1L, IF_REAL, "Parameter for impact-ionization induced bulk potential change"), IOP("ibpc1lp", HSMHV2_MOD_IBPC1LP, IF_REAL, "Parameter for impact-ionization induced bulk potential change"), IOP("ibpc2", HSMHV2_MOD_IBPC2, IF_REAL, "Parameter for impact-ionization induced bulk potential change"), IOP("mphdfm", HSMHV2_MOD_MPHDFM, IF_REAL, "NSUBCDFM dependence of phonon scattering for DFM"), IOP("ptl", HSMHV2_MOD_PTL, IF_REAL, ""), IOP("ptp", HSMHV2_MOD_PTP, IF_REAL, ""), IOP("pt2", HSMHV2_MOD_PT2, IF_REAL, ""), IOP("ptlp", HSMHV2_MOD_PTLP, IF_REAL, ""), IOP("gdl", HSMHV2_MOD_GDL, IF_REAL, ""), IOP("gdlp", HSMHV2_MOD_GDLP, IF_REAL, ""), IOP("gdld", HSMHV2_MOD_GDLD, IF_REAL, ""), IOP("pt4", HSMHV2_MOD_PT4, IF_REAL, ""), IOP("pt4p", HSMHV2_MOD_PT4P, IF_REAL, ""), IOP("rdvg11", HSMHV2_MOD_RDVG11, IF_REAL, ""), IOP("rdvg12", HSMHV2_MOD_RDVG12, IF_REAL, ""), IOP("rth0", HSMHV2_MOD_RTH0, IF_REAL, "Thermal resistance"), /* Self-heating model --SHE---*/ IOP("cth0", HSMHV2_MOD_CTH0, IF_REAL, "Thermal capacitance"), /* Self-heating model --SHE--- */ IOP("powrat", HSMHV2_MOD_POWRAT, IF_REAL, ""), /* Self-heating model --SHE--- */ IOP("rthtemp1", HSMHV2_MOD_RTHTEMP1, IF_REAL, "Thermal resistance"), /* Self-heating model --SHE---*/ IOP("rthtemp2", HSMHV2_MOD_RTHTEMP2, IF_REAL, "Thermal resistance"), /* Self-heating model --SHE---*/ IOP("prattemp1", HSMHV2_MOD_PRATTEMP1, IF_REAL, ""), /* Self-heating model --SHE--- */ IOP("prattemp2", HSMHV2_MOD_PRATTEMP2, IF_REAL, ""), /* Self-heating model --SHE--- */ IOP("tcjbd", HSMHV2_MOD_TCJBD, IF_REAL, "Temperature dependence of cjbd"), /* Self-heating model --SHE--- */ IOP("tcjbs", HSMHV2_MOD_TCJBS, IF_REAL, "Temperature dependence of cjbs"), /* Self-heating model --SHE--- */ IOP("tcjbdsw", HSMHV2_MOD_TCJBDSW, IF_REAL, "Temperature dependence of cjbdsw"), /* Self-heating model --SHE--- */ IOP("tcjbssw", HSMHV2_MOD_TCJBSSW, IF_REAL, "Temperature dependence of cjbssw"), /* Self-heating model --SHE--- */ IOP("tcjbdswg", HSMHV2_MOD_TCJBDSWG, IF_REAL, "Temperature dependence of cjbdswg"), /* Self-heating model --SHE--- */ IOP("tcjbsswg", HSMHV2_MOD_TCJBSSWG, IF_REAL, "Temperature dependence of cjbsswg"), /* Self-heating model --SHE--- */ IOP("qdftvd", HSMHV2_MOD_QDFTVD, IF_REAL, "Qdrift Vd dependence "), IOP("rdvd", HSMHV2_MOD_RDVD, IF_REAL, ""), IOP("rdvb", HSMHV2_MOD_RDVB, IF_REAL, ""), IOP("rd20", HSMHV2_MOD_RD20, IF_REAL, ""), IOP("rd21", HSMHV2_MOD_RD21, IF_REAL, ""), IOP("rd22", HSMHV2_MOD_RD22, IF_REAL, ""), IOP("rd22d", HSMHV2_MOD_RD22D, IF_REAL, ""), IOP("rd23", HSMHV2_MOD_RD23, IF_REAL, ""), IOP("rd24", HSMHV2_MOD_RD24, IF_REAL, ""), IOP("rd25", HSMHV2_MOD_RD25, IF_REAL, ""), IOP("rdvdl", HSMHV2_MOD_RDVDL, IF_REAL, ""), IOP("rdvdlp", HSMHV2_MOD_RDVDLP, IF_REAL, ""), IOP("rdvds", HSMHV2_MOD_RDVDS, IF_REAL, ""), IOP("rdvdsp", HSMHV2_MOD_RDVDSP, IF_REAL, ""), IOP("rd23l", HSMHV2_MOD_RD23L, IF_REAL, ""), IOP("rd23lp", HSMHV2_MOD_RD23LP, IF_REAL, ""), IOP("rd23s", HSMHV2_MOD_RD23S, IF_REAL, ""), IOP("rd23sp", HSMHV2_MOD_RD23SP, IF_REAL, ""), IOP("rds", HSMHV2_MOD_RDS, IF_REAL, ""), IOP("rdsp", HSMHV2_MOD_RDSP, IF_REAL, ""), //IOP("qovsm", HSMHV2_MOD_QOVSM, IF_REAL, "Smoothing Qover at depletion/inversion transition"), // IOP("ldrift", HSMHV2_MOD_LDRIFT, IF_REAL, "alias for ldrift2"), IOP("rdtemp1", HSMHV2_MOD_RDTEMP1, IF_REAL, "Temperature-dependence of Rd"), IOP("rdtemp2", HSMHV2_MOD_RDTEMP2, IF_REAL, "Temperature-dependence of Rd"), IOP("rth0r", HSMHV2_MOD_RTH0R, IF_REAL, "Heat radiation for SHE"), /* not used */ IOP("rdvdtemp1", HSMHV2_MOD_RDVDTEMP1, IF_REAL, "Temperature-dependence of RDVD"), IOP("rdvdtemp2", HSMHV2_MOD_RDVDTEMP2, IF_REAL, "Temperature-dependence of RDVD"), IOP("rth0w", HSMHV2_MOD_RTH0W, IF_REAL, "Width-dependence of RTH0"), IOP("rth0wp", HSMHV2_MOD_RTH0WP, IF_REAL, "Width-dependence of RTH0"), IOP("rth0nf", HSMHV2_MOD_RTH0NF, IF_REAL, "nf-dependence of RTH0"), IOP("cvdsover", HSMHV2_MOD_CVDSOVER, IF_REAL, "vds drop along the overlap"), IOP("rdvsub", HSMHV2_MOD_RDVSUB, IF_REAL, "model parameter for the substrate effect"), IOP("rdvdsub", HSMHV2_MOD_RDVDSUB, IF_REAL, "model parameter for the substrate effect"), IOP("ddrift", HSMHV2_MOD_DDRIFT, IF_REAL, "model parameter for the substrate effect"), IOP("vbisub", HSMHV2_MOD_VBISUB, IF_REAL, "model parameter for the substrate effect"), IOP("nsubsub", HSMHV2_MOD_NSUBSUB, IF_REAL, "model parameter for the substrate effect"), IOP("rdrmue", HSMHV2_MOD_RDRMUE, IF_REAL, ""), IOP("rdrvmax", HSMHV2_MOD_RDRVMAX, IF_REAL, ""), IOP("rdrmuetmp", HSMHV2_MOD_RDRMUETMP, IF_REAL, ""), IOP("ndepm", HSMHV2_MOD_NDEPM, IF_REAL, "N- layer concentlation of the depletion MOS model"), IOP("tndep", HSMHV2_MOD_TNDEP, IF_REAL, "N- layer depth of the depletion MOS model"), IOP("depmue0", HSMHV2_MOD_DEPMUE0, IF_REAL, "coulomb scattering of resistor region "), IOP("depmue1", HSMHV2_MOD_DEPMUE1, IF_REAL, "coulomb scattering of resistor region"), IOP("depmueback0", HSMHV2_MOD_DEPMUEBACK0, IF_REAL, "coulomb scattering of back region"), IOP("depmueback1", HSMHV2_MOD_DEPMUEBACK1, IF_REAL, "coulomb scattering of back region"), IOP("depleak", HSMHV2_MOD_DEPLEAK, IF_REAL, "leakage current coefficient"), IOP("depeta", HSMHV2_MOD_DEPETA, IF_REAL, "Vds dependence"), IOP("depvmax", HSMHV2_MOD_DEPVMAX, IF_REAL, "velocity saturation"), IOP("depvdsef1", HSMHV2_MOD_DEPVDSEF1, IF_REAL, "Vds dependece of leakage current"), IOP("depvdsef2", HSMHV2_MOD_DEPVDSEF2, IF_REAL, "Vds dependece of leakage current"), IOP("depmueph0", HSMHV2_MOD_DEPMUEPH0, IF_REAL, "phonon scattering"), IOP("depmueph1", HSMHV2_MOD_DEPMUEPH1, IF_REAL, "phonon scattering"), IOP("depbb", HSMHV2_MOD_DEPBB, IF_REAL, "high field effect coeeficient"), IOP("depvtmp", HSMHV2_MOD_DEPVTMP, IF_REAL, "temperature dependence of velocity saturation"), IOP("depmuetmp", HSMHV2_MOD_DEPMUETMP, IF_REAL, "temperature dependence of mobility"), IOP("isbreak", HSMHV2_MOD_ISBREAK, IF_REAL, "reverse saturation current for breakdown"), IOP("rwell", HSMHV2_MOD_RWELL, IF_REAL, "well resistance for breakdown"), IOP("rdrvtmp", HSMHV2_MOD_RDRVTMP, IF_REAL, ""), /* IOP("rdrvmaxt1", HSMHV2_MOD_RDRVMAXT1, IF_REAL, ""), */ /* IOP("rdrvmaxt2", HSMHV2_MOD_RDRVMAXT2, IF_REAL, ""), */ IOP("rdrdjunc", HSMHV2_MOD_RDRDJUNC, IF_REAL, ""), IOP("rdrcx", HSMHV2_MOD_RDRCX, IF_REAL, ""), IOP("rdrcar", HSMHV2_MOD_RDRCAR, IF_REAL, ""), IOP("rdrdl1", HSMHV2_MOD_RDRDL1, IF_REAL, ""), IOP("rdrdl2", HSMHV2_MOD_RDRDL2, IF_REAL, ""), IOP("rdrvmaxw", HSMHV2_MOD_RDRVMAXW, IF_REAL, ""), IOP("rdrvmaxwp", HSMHV2_MOD_RDRVMAXWP, IF_REAL, ""), IOP("rdrvmaxl", HSMHV2_MOD_RDRVMAXL, IF_REAL, ""), IOP("rdrvmaxlp", HSMHV2_MOD_RDRVMAXLP, IF_REAL, ""), IOP("rdrmuel", HSMHV2_MOD_RDRMUEL, IF_REAL, ""), IOP("rdrmuelp", HSMHV2_MOD_RDRMUELP, IF_REAL, ""), IOP("rdrqover", HSMHV2_MOD_RDRQOVER, IF_REAL, ""), IOP("qovadd", HSMHV2_MOD_QOVADD, IF_REAL, "parameter for additional Qover Charge [-]"), IOP("js0d", HSMHV2_MOD_JS0D, IF_REAL, "Saturation current density for drain junction [A/m^2]"), IOP("js0swd", HSMHV2_MOD_JS0SWD, IF_REAL, "Side wall saturation current density for drain junction [A/m ]"), IOP("njd", HSMHV2_MOD_NJD, IF_REAL, "Emission coefficient for drain junction [- ]"), IOP("njswd", HSMHV2_MOD_NJSWD, IF_REAL, "Sidewall emission coefficient for drain junction [ ]"), IOP("xtid", HSMHV2_MOD_XTID, IF_REAL, "Junction current temparature exponent coefficient for drain junction [- ]"), IOP("cjd", HSMHV2_MOD_CJD, IF_REAL, "Bottom junction capacitance per unit area at zero bias for drain junction [F/m^2]"), IOP("cjswd", HSMHV2_MOD_CJSWD, IF_REAL, "Sidewall junction capacitance grading coefficient per unit length at zero bias for drain junction [F/m ]"), IOP("cjswgd", HSMHV2_MOD_CJSWGD, IF_REAL, "Gate sidewall junction capacitance per unit length at zero bias for drain junction [F/m ]"), IOP("mjd", HSMHV2_MOD_MJD, IF_REAL, "Bottom junction capacitance grading coefficient for drain junction [ ]"), IOP("mjswd", HSMHV2_MOD_MJSWD, IF_REAL, "Sidewall junction capacitance grading coefficient for drain junction [ ]"), IOP("mjswgd", HSMHV2_MOD_MJSWGD, IF_REAL, "Gate sidewall junction capacitance grading coefficient for drain junction [ ]"), IOP("pbd", HSMHV2_MOD_PBD, IF_REAL, "Bottom junction build-in potential for drain junction [V ]"), IOP("pbswd", HSMHV2_MOD_PBSWD, IF_REAL, "Sidewall junction build-in potential for drain junction [V ]"), IOP("pbswgd", HSMHV2_MOD_PBSWDG, IF_REAL, "Gate sidewall junction build-in potential for drain junction [V ]"), IOP("xti2d", HSMHV2_MOD_XTI2D, IF_REAL, "Temperature coefficient for drain junction [- ]"), IOP("cisbd", HSMHV2_MOD_CISBD, IF_REAL, "Reverse bias saturation current for drain junction [- ]"), IOP("cvbd", HSMHV2_MOD_CVBD, IF_REAL, "Bias dependence coefficient of cisb for drain junction [- ]"), IOP("ctempd", HSMHV2_MOD_CTEMPD, IF_REAL, "Temperature coefficient for drain junction [- ]"), IOP("cisbkd", HSMHV2_MOD_CISBKD, IF_REAL, "Reverse bias saturation current for drain junction [A ]"), IOP("divxd", HSMHV2_MOD_DIVXD, IF_REAL, "Reverse coefficient coefficient for drain junction [1/V ]"), IOP("vdiffjd", HSMHV2_MOD_VDIFFJD, IF_REAL, "Threshold voltage for junction diode for drain junction [V ]"), IOP("js0s", HSMHV2_MOD_JS0S, IF_REAL, "Saturation current density for source junction [A/m^2]"), IOP("js0sws", HSMHV2_MOD_JS0SWS, IF_REAL, "Side wall saturation current density for source junction [A/m ]"), IOP("njs", HSMHV2_MOD_NJS, IF_REAL, "Emission coefficient for source junction [- ]"), IOP("njsws", HSMHV2_MOD_NJSWS, IF_REAL, "Sidewall emission coefficient for source junction [ ]"), IOP("xtis", HSMHV2_MOD_XTIS, IF_REAL, "Junction current temparature exponent coefficient for source junction [- ]"), IOP("cjs", HSMHV2_MOD_CJS, IF_REAL, "Bottom junction capacitance per unit area at zero bias for source junction [F/m^2]"), IOP("cjsws", HSMHV2_MOD_CJSSW, IF_REAL, "Sidewall junction capacitance grading coefficient per unit length at zero bias for source junction [F/m ]"), IOP("cjswgs", HSMHV2_MOD_CJSWGS, IF_REAL, "Gate sidewall junction capacitance per unit length at zero bias for source junction [F/m ]"), IOP("mjs", HSMHV2_MOD_MJS, IF_REAL, "Bottom junction capacitance grading coefficient for source junction [ ]"), IOP("mjsws", HSMHV2_MOD_MJSWS, IF_REAL, "Sidewall junction capacitance grading coefficient for source junction [ ]"), IOP("mjswgs", HSMHV2_MOD_MJSWGS, IF_REAL, "Gate sidewall junction capacitance grading coefficient for source junction [ ]"), IOP("pbs", HSMHV2_MOD_PBS, IF_REAL, "Bottom junction build-in potential for source junction [V ]"), IOP("pbsws", HSMHV2_MOD_PBSWS, IF_REAL, "Sidewall junction build-in potential for source junction [V ]"), IOP("pbswgs", HSMHV2_MOD_PBSWSG, IF_REAL, "Gate sidewall junction build-in potential for source junction [V ]"), IOP("xti2s", HSMHV2_MOD_XTI2S, IF_REAL, "Temperature coefficient for source junction [- ]"), IOP("cisbs", HSMHV2_MOD_CISBS, IF_REAL, "Reverse bias saturation current for source junction [- ]"), IOP("cvbs", HSMHV2_MOD_CVBS, IF_REAL, "Bias dependence coefficient of cisb for source junction [- ]"), IOP("ctemps", HSMHV2_MOD_CTEMPS, IF_REAL, "Temperature coefficient for source junction [- ]"), IOP("cisbks", HSMHV2_MOD_CISBKS, IF_REAL, "Reverse bias saturation current for source junction [A ]"), IOP("divxs", HSMHV2_MOD_DIVXS, IF_REAL, "Reverse coefficient coefficient for source junction [1/V ]"), IOP("vdiffjs", HSMHV2_MOD_VDIFFJS, IF_REAL, "Threshold voltage for junction diode for source junction [V ]"), IOP("shemax", HSMHV2_MOD_SHEMAX, IF_REAL, "Maximum rise temperatue for SHE [C]"), IOP("vgsmin", HSMHV2_MOD_VGSMIN, IF_REAL, "minimal/maximal expected Vgs (NMOS/PMOS) [V]"), IOP("gdsleak", HSMHV2_MOD_GDSLEAK, IF_REAL, "Channel leakage conductance [A/V]"), IOP("rdrbb", HSMHV2_MOD_RDRBB, IF_REAL, "degradation of the mobility in drift region"), IOP("rdrbbtmp", HSMHV2_MOD_RDRBBTMP, IF_REAL, "temperature coeeficient of RDRBB"), /* binning parameters */ IOP("lmin", HSMHV2_MOD_LMIN, IF_REAL, "Minimum length for the model"), IOP("lmax", HSMHV2_MOD_LMAX, IF_REAL, "Maximum length for the model"), IOP("wmin", HSMHV2_MOD_WMIN, IF_REAL, "Minimum width for the model"), IOP("wmax", HSMHV2_MOD_WMAX, IF_REAL, "Maximum width for the model"), IOP("lbinn", HSMHV2_MOD_LBINN, IF_REAL, "L modulation coefficient for binning"), IOP("wbinn", HSMHV2_MOD_WBINN, IF_REAL, "W modulation coefficient for binning"), /* Length dependence */ IOP("lvmax", HSMHV2_MOD_LVMAX, IF_REAL, "Length dependence of vmax"), IOP("lbgtmp1", HSMHV2_MOD_LBGTMP1, IF_REAL, "Length dependence of bgtmp1"), IOP("lbgtmp2", HSMHV2_MOD_LBGTMP2, IF_REAL, "Length dependence of bgtmp2"), IOP("leg0", HSMHV2_MOD_LEG0, IF_REAL, "Length dependence of eg0"), IOP("lvfbover", HSMHV2_MOD_LVFBOVER, IF_REAL, "Length dependence of vfbover"), IOP("lnover", HSMHV2_MOD_LNOVER, IF_REAL, "Length dependence of nover"), IOP("lnovers", HSMHV2_MOD_LNOVERS, IF_REAL, "Length dependence of nover on source side"), IOP("lwl2", HSMHV2_MOD_LWL2, IF_REAL, "Length dependence of wl2"), IOP("lvfbc", HSMHV2_MOD_LVFBC, IF_REAL, "Length dependence of vfbc"), IOP("lnsubc", HSMHV2_MOD_LNSUBC, IF_REAL, "Length dependence of nsubc"), IOP("lnsubp", HSMHV2_MOD_LNSUBP, IF_REAL, "Length dependence of nsubp"), IOP("lscp1", HSMHV2_MOD_LSCP1, IF_REAL, "Length dependence of scp1"), IOP("lscp2", HSMHV2_MOD_LSCP2, IF_REAL, "Length dependence of scp2"), IOP("lscp3", HSMHV2_MOD_LSCP3, IF_REAL, "Length dependence of scp3"), IOP("lsc1", HSMHV2_MOD_LSC1, IF_REAL, "Length dependence of sc1"), IOP("lsc2", HSMHV2_MOD_LSC2, IF_REAL, "Length dependence of sc2"), IOP("lsc3", HSMHV2_MOD_LSC3, IF_REAL, "Length dependence of sc3"), IOP("lpgd1", HSMHV2_MOD_LPGD1, IF_REAL, "Length dependence of pgd1"), //IOP("lpgd3", HSMHV2_MOD_LPGD3, IF_REAL, "Length dependence of pgd3"), IOP("lndep", HSMHV2_MOD_LNDEP, IF_REAL, "Length dependence of ndep"), IOP("lninv", HSMHV2_MOD_LNINV, IF_REAL, "Length dependence of ninv"), IOP("lmuecb0", HSMHV2_MOD_LMUECB0, IF_REAL, "Length dependence of muecb0"), IOP("lmuecb1", HSMHV2_MOD_LMUECB1, IF_REAL, "Length dependence of muecb1"), IOP("lmueph1", HSMHV2_MOD_LMUEPH1, IF_REAL, "Length dependence of mueph1"), IOP("lvtmp", HSMHV2_MOD_LVTMP, IF_REAL, "Length dependence of vtmp"), IOP("lwvth0", HSMHV2_MOD_LWVTH0, IF_REAL, "Length dependence of wvth0"), IOP("lmuesr1", HSMHV2_MOD_LMUESR1, IF_REAL, "Length dependence of muesr1"), IOP("lmuetmp", HSMHV2_MOD_LMUETMP, IF_REAL, "Length dependence of muetmp"), IOP("lsub1", HSMHV2_MOD_LSUB1, IF_REAL, "Length dependence of sub1"), IOP("lsub2", HSMHV2_MOD_LSUB2, IF_REAL, "Length dependence of sub2"), IOP("lsvds", HSMHV2_MOD_LSVDS, IF_REAL, "Length dependence of svds"), IOP("lsvbs", HSMHV2_MOD_LSVBS, IF_REAL, "Length dependence of svbs"), IOP("lsvgs", HSMHV2_MOD_LSVGS, IF_REAL, "Length dependence of svgs"), IOP("lfn1", HSMHV2_MOD_LFN1, IF_REAL, "Length dependence of fn1"), IOP("lfn2", HSMHV2_MOD_LFN2, IF_REAL, "Length dependence of fn2"), IOP("lfn3", HSMHV2_MOD_LFN3, IF_REAL, "Length dependence of fn3"), IOP("lfvbs", HSMHV2_MOD_LFVBS, IF_REAL, "Length dependence of fvbs"), IOP("lnsti", HSMHV2_MOD_LNSTI, IF_REAL, "Length dependence of nsti"), IOP("lwsti", HSMHV2_MOD_LWSTI, IF_REAL, "Length dependence of wsti"), IOP("lscsti1", HSMHV2_MOD_LSCSTI1, IF_REAL, "Length dependence of scsti1"), IOP("lscsti2", HSMHV2_MOD_LSCSTI2, IF_REAL, "Length dependence of scsti2"), IOP("lvthsti", HSMHV2_MOD_LVTHSTI, IF_REAL, "Length dependence of vthsti"), IOP("lmuesti1", HSMHV2_MOD_LMUESTI1, IF_REAL, "Length dependence of muesti1"), IOP("lmuesti2", HSMHV2_MOD_LMUESTI2, IF_REAL, "Length dependence of muesti2"), IOP("lmuesti3", HSMHV2_MOD_LMUESTI3, IF_REAL, "Length dependence of muesti3"), IOP("lnsubpsti1", HSMHV2_MOD_LNSUBPSTI1, IF_REAL, "Length dependence of nsubpsti1"), IOP("lnsubpsti2", HSMHV2_MOD_LNSUBPSTI2, IF_REAL, "Length dependence of nsubpsti2"), IOP("lnsubpsti3", HSMHV2_MOD_LNSUBPSTI3, IF_REAL, "Length dependence of nsubpsti3"), IOP("lcgso", HSMHV2_MOD_LCGSO, IF_REAL, "Length dependence of cgso"), IOP("lcgdo", HSMHV2_MOD_LCGDO, IF_REAL, "Length dependence of cgdo"), IOP("ljs0", HSMHV2_MOD_LJS0, IF_REAL, "Length dependence of js0"), IOP("ljs0sw", HSMHV2_MOD_LJS0SW, IF_REAL, "Length dependence of js0sw"), IOP("lnj", HSMHV2_MOD_LNJ, IF_REAL, "Length dependence of nj"), IOP("lcisbk", HSMHV2_MOD_LCISBK, IF_REAL, "Length dependence of cisbk"), IOP("lclm1", HSMHV2_MOD_LCLM1, IF_REAL, "Length dependence of clm1"), IOP("lclm2", HSMHV2_MOD_LCLM2, IF_REAL, "Length dependence of clm2"), IOP("lclm3", HSMHV2_MOD_LCLM3, IF_REAL, "Length dependence of clm3"), IOP("lwfc", HSMHV2_MOD_LWFC, IF_REAL, "Length dependence of wfc"), IOP("lgidl1", HSMHV2_MOD_LGIDL1, IF_REAL, "Length dependence of gidl1"), IOP("lgidl2", HSMHV2_MOD_LGIDL2, IF_REAL, "Length dependence of gidl2"), IOP("lgleak1", HSMHV2_MOD_LGLEAK1, IF_REAL, "Length dependence of gleak1"), IOP("lgleak2", HSMHV2_MOD_LGLEAK2, IF_REAL, "Length dependence of gleak2"), IOP("lgleak3", HSMHV2_MOD_LGLEAK3, IF_REAL, "Length dependence of gleak3"), IOP("lgleak6", HSMHV2_MOD_LGLEAK6, IF_REAL, "Length dependence of gleak6"), IOP("lglksd1", HSMHV2_MOD_LGLKSD1, IF_REAL, "Length dependence of glksd1"), IOP("lglksd2", HSMHV2_MOD_LGLKSD2, IF_REAL, "Length dependence of glksd2"), IOP("lglkb1", HSMHV2_MOD_LGLKB1, IF_REAL, "Length dependence of glkb1"), IOP("lglkb2", HSMHV2_MOD_LGLKB2, IF_REAL, "Length dependence of glkb2"), IOP("lnftrp", HSMHV2_MOD_LNFTRP, IF_REAL, "Length dependence of nftrp"), IOP("lnfalp", HSMHV2_MOD_LNFALP, IF_REAL, "Length dependence of nfalp"), //IOP("lpthrou", HSMHV2_MOD_LPTHROU, IF_REAL, "Length dependence of pthrou"), IOP("lvdiffj", HSMHV2_MOD_LVDIFFJ, IF_REAL, "Length dependence of vdiffj"), IOP("libpc1", HSMHV2_MOD_LIBPC1, IF_REAL, "Length dependence of ibpc1"), IOP("libpc2", HSMHV2_MOD_LIBPC2, IF_REAL, "Length dependence of ibpc2"), IOP("lcgbo", HSMHV2_MOD_LCGBO, IF_REAL, "Length dependence of cgbo"), IOP("lcvdsover", HSMHV2_MOD_LCVDSOVER, IF_REAL, "Length dependence of cvdsover"), IOP("lfalph", HSMHV2_MOD_LFALPH, IF_REAL, "Length dependence of falph"), IOP("lnpext", HSMHV2_MOD_LNPEXT, IF_REAL, "Length dependence of npext"), IOP("lpowrat", HSMHV2_MOD_LPOWRAT, IF_REAL, "Length dependence of powrat"), IOP("lrd", HSMHV2_MOD_LRD, IF_REAL, "Length dependence of rd"), IOP("lrd22", HSMHV2_MOD_LRD22, IF_REAL, "Length dependence of rd22"), IOP("lrd23", HSMHV2_MOD_LRD23, IF_REAL, "Length dependence of rd23"), IOP("lrd24", HSMHV2_MOD_LRD24, IF_REAL, "Length dependence of rd24"), IOP("lrdict1", HSMHV2_MOD_LRDICT1, IF_REAL, "Length dependence of rdict1"), IOP("lrdov13", HSMHV2_MOD_LRDOV13, IF_REAL, "Length dependence of rdov13"), IOP("lrdslp1", HSMHV2_MOD_LRDSLP1, IF_REAL, "Length dependence of rdslp1"), IOP("lrdvb", HSMHV2_MOD_LRDVB, IF_REAL, "Length dependence of rdvb"), IOP("lrdvd", HSMHV2_MOD_LRDVD, IF_REAL, "Length dependence of rdvd"), IOP("lrdvg11", HSMHV2_MOD_LRDVG11, IF_REAL, "Length dependence of rdvg11"), IOP("lrs", HSMHV2_MOD_LRS, IF_REAL, "Length dependence of rs"), IOP("lrth0", HSMHV2_MOD_LRTH0, IF_REAL, "Length dependence of rth0"), IOP("lvover", HSMHV2_MOD_LVOVER, IF_REAL, "Length dependence of vover"), IOP("ljs0d", HSMHV2_MOD_LJS0D, IF_REAL, "Length dependence of js0d"), IOP("ljs0swd", HSMHV2_MOD_LJS0SWD, IF_REAL, "Length dependence of js0swd"), IOP("lnjd", HSMHV2_MOD_LNJD, IF_REAL, "Length dependence of njd"), IOP("lcisbkd", HSMHV2_MOD_LCISBKD, IF_REAL, "Length dependence of cisbkd"), IOP("lvdiffjd", HSMHV2_MOD_LVDIFFJD, IF_REAL, "Length dependence of vdiffjd"), IOP("ljs0s", HSMHV2_MOD_LJS0S, IF_REAL, "Length dependence of js0s"), IOP("ljs0sws", HSMHV2_MOD_LJS0SWS, IF_REAL, "Length dependence of js0sws"), IOP("lnjs", HSMHV2_MOD_LNJS, IF_REAL, "Length dependence of njs"), IOP("lcisbks", HSMHV2_MOD_LCISBKS, IF_REAL, "Length dependence of cisbks"), IOP("lvdiffjs", HSMHV2_MOD_LVDIFFJS, IF_REAL, "Length dependence of vdiffjs"), /* Width dependence */ IOP("wvmax", HSMHV2_MOD_WVMAX, IF_REAL, "Width dependence of vmax"), IOP("wbgtmp1", HSMHV2_MOD_WBGTMP1, IF_REAL, "Width dependence of bgtmp1"), IOP("wbgtmp2", HSMHV2_MOD_WBGTMP2, IF_REAL, "Width dependence of bgtmp2"), IOP("weg0", HSMHV2_MOD_WEG0, IF_REAL, "Width dependence of eg0"), IOP("wvfbover", HSMHV2_MOD_WVFBOVER, IF_REAL, "Width dependence of vfbover"), IOP("wnover", HSMHV2_MOD_WNOVER, IF_REAL, "Width dependence of nover"), IOP("wnovers", HSMHV2_MOD_WNOVERS, IF_REAL, "Width dependence of novers on source side"), IOP("wwl2", HSMHV2_MOD_WWL2, IF_REAL, "Width dependence of wl2"), IOP("wvfbc", HSMHV2_MOD_WVFBC, IF_REAL, "Width dependence of vfbc"), IOP("wnsubc", HSMHV2_MOD_WNSUBC, IF_REAL, "Width dependence of nsubc"), IOP("wnsubp", HSMHV2_MOD_WNSUBP, IF_REAL, "Width dependence of nsubp"), IOP("wscp1", HSMHV2_MOD_WSCP1, IF_REAL, "Width dependence of scp1"), IOP("wscp2", HSMHV2_MOD_WSCP2, IF_REAL, "Width dependence of scp2"), IOP("wscp3", HSMHV2_MOD_WSCP3, IF_REAL, "Width dependence of scp3"), IOP("wsc1", HSMHV2_MOD_WSC1, IF_REAL, "Width dependence of sc1"), IOP("wsc2", HSMHV2_MOD_WSC2, IF_REAL, "Width dependence of sc2"), IOP("wsc3", HSMHV2_MOD_WSC3, IF_REAL, "Width dependence of sc3"), IOP("wpgd1", HSMHV2_MOD_WPGD1, IF_REAL, "Width dependence of pgd1"), //IOP("wpgd3", HSMHV2_MOD_WPGD3, IF_REAL, "Width dependence of pgd3"), IOP("wndep", HSMHV2_MOD_WNDEP, IF_REAL, "Width dependence of ndep"), IOP("wninv", HSMHV2_MOD_WNINV, IF_REAL, "Width dependence of ninv"), IOP("wmuecb0", HSMHV2_MOD_WMUECB0, IF_REAL, "Width dependence of muecb0"), IOP("wmuecb1", HSMHV2_MOD_WMUECB1, IF_REAL, "Width dependence of muecb1"), IOP("wmueph1", HSMHV2_MOD_WMUEPH1, IF_REAL, "Width dependence of mueph1"), IOP("wvtmp", HSMHV2_MOD_WVTMP, IF_REAL, "Width dependence of vtmp"), IOP("wwvth0", HSMHV2_MOD_WWVTH0, IF_REAL, "Width dependence of wvth0"), IOP("wmuesr1", HSMHV2_MOD_WMUESR1, IF_REAL, "Width dependence of muesr1"), IOP("wmuetmp", HSMHV2_MOD_WMUETMP, IF_REAL, "Width dependence of muetmp"), IOP("wsub1", HSMHV2_MOD_WSUB1, IF_REAL, "Width dependence of sub1"), IOP("wsub2", HSMHV2_MOD_WSUB2, IF_REAL, "Width dependence of sub2"), IOP("wsvds", HSMHV2_MOD_WSVDS, IF_REAL, "Width dependence of svds"), IOP("wsvbs", HSMHV2_MOD_WSVBS, IF_REAL, "Width dependence of svbs"), IOP("wsvgs", HSMHV2_MOD_WSVGS, IF_REAL, "Width dependence of svgs"), IOP("wfn1", HSMHV2_MOD_WFN1, IF_REAL, "Width dependence of fn1"), IOP("wfn2", HSMHV2_MOD_WFN2, IF_REAL, "Width dependence of fn2"), IOP("wfn3", HSMHV2_MOD_WFN3, IF_REAL, "Width dependence of fn3"), IOP("wfvbs", HSMHV2_MOD_WFVBS, IF_REAL, "Width dependence of fvbs"), IOP("wnsti", HSMHV2_MOD_WNSTI, IF_REAL, "Width dependence of nsti"), IOP("wwsti", HSMHV2_MOD_WWSTI, IF_REAL, "Width dependence of wsti"), IOP("wscsti1", HSMHV2_MOD_WSCSTI1, IF_REAL, "Width dependence of scsti1"), IOP("wscsti2", HSMHV2_MOD_WSCSTI2, IF_REAL, "Width dependence of scsti2"), IOP("wvthsti", HSMHV2_MOD_WVTHSTI, IF_REAL, "Width dependence of vthsti"), IOP("wmuesti1", HSMHV2_MOD_WMUESTI1, IF_REAL, "Width dependence of muesti1"), IOP("wmuesti2", HSMHV2_MOD_WMUESTI2, IF_REAL, "Width dependence of muesti2"), IOP("wmuesti3", HSMHV2_MOD_WMUESTI3, IF_REAL, "Width dependence of muesti3"), IOP("wnsubpsti1", HSMHV2_MOD_WNSUBPSTI1, IF_REAL, "Width dependence of nsubpsti1"), IOP("wnsubpsti2", HSMHV2_MOD_WNSUBPSTI2, IF_REAL, "Width dependence of nsubpsti2"), IOP("wnsubpsti3", HSMHV2_MOD_WNSUBPSTI3, IF_REAL, "Width dependence of nsubpsti3"), IOP("wcgso", HSMHV2_MOD_WCGSO, IF_REAL, "Width dependence of cgso"), IOP("wcgdo", HSMHV2_MOD_WCGDO, IF_REAL, "Width dependence of cgdo"), IOP("wjs0", HSMHV2_MOD_WJS0, IF_REAL, "Width dependence of js0"), IOP("wjs0sw", HSMHV2_MOD_WJS0SW, IF_REAL, "Width dependence of js0sw"), IOP("wnj", HSMHV2_MOD_WNJ, IF_REAL, "Width dependence of nj"), IOP("wcisbk", HSMHV2_MOD_WCISBK, IF_REAL, "Width dependence of cisbk"), IOP("wclm1", HSMHV2_MOD_WCLM1, IF_REAL, "Width dependence of clm1"), IOP("wclm2", HSMHV2_MOD_WCLM2, IF_REAL, "Width dependence of clm2"), IOP("wclm3", HSMHV2_MOD_WCLM3, IF_REAL, "Width dependence of clm3"), IOP("wwfc", HSMHV2_MOD_WWFC, IF_REAL, "Width dependence of wfc"), IOP("wgidl1", HSMHV2_MOD_WGIDL1, IF_REAL, "Width dependence of gidl1"), IOP("wgidl2", HSMHV2_MOD_WGIDL2, IF_REAL, "Width dependence of gidl2"), IOP("wgleak1", HSMHV2_MOD_WGLEAK1, IF_REAL, "Width dependence of gleak1"), IOP("wgleak2", HSMHV2_MOD_WGLEAK2, IF_REAL, "Width dependence of gleak2"), IOP("wgleak3", HSMHV2_MOD_WGLEAK3, IF_REAL, "Width dependence of gleak3"), IOP("wgleak6", HSMHV2_MOD_WGLEAK6, IF_REAL, "Width dependence of gleak6"), IOP("wglksd1", HSMHV2_MOD_WGLKSD1, IF_REAL, "Width dependence of glksd1"), IOP("wglksd2", HSMHV2_MOD_WGLKSD2, IF_REAL, "Width dependence of glksd2"), IOP("wglkb1", HSMHV2_MOD_WGLKB1, IF_REAL, "Width dependence of glkb1"), IOP("wglkb2", HSMHV2_MOD_WGLKB2, IF_REAL, "Width dependence of glkb2"), IOP("wnftrp", HSMHV2_MOD_WNFTRP, IF_REAL, "Width dependence of nftrp"), IOP("wnfalp", HSMHV2_MOD_WNFALP, IF_REAL, "Width dependence of nfalp"), //IOP("wpthrou", HSMHV2_MOD_WPTHROU, IF_REAL, "Width dependence of pthrou"), IOP("wvdiffj", HSMHV2_MOD_WVDIFFJ, IF_REAL, "Width dependence of vdiffj"), IOP("wibpc1", HSMHV2_MOD_WIBPC1, IF_REAL, "Width dependence of ibpc1"), IOP("wibpc2", HSMHV2_MOD_WIBPC2, IF_REAL, "Width dependence of ibpc2"), IOP("wcgbo", HSMHV2_MOD_WCGBO, IF_REAL, "Width dependence of cgbo"), IOP("wcvdsover", HSMHV2_MOD_WCVDSOVER, IF_REAL, "Width dependence of cvdsover"), IOP("wfalph", HSMHV2_MOD_WFALPH, IF_REAL, "Width dependence of falph"), IOP("wnpext", HSMHV2_MOD_WNPEXT, IF_REAL, "Width dependence of npext"), IOP("wpowrat", HSMHV2_MOD_WPOWRAT, IF_REAL, "Width dependence of powrat"), IOP("wrd", HSMHV2_MOD_WRD, IF_REAL, "Width dependence of rd"), IOP("wrd22", HSMHV2_MOD_WRD22, IF_REAL, "Width dependence of rd22"), IOP("wrd23", HSMHV2_MOD_WRD23, IF_REAL, "Width dependence of rd23"), IOP("wrd24", HSMHV2_MOD_WRD24, IF_REAL, "Width dependence of rd24"), IOP("wrdict1", HSMHV2_MOD_WRDICT1, IF_REAL, "Width dependence of rdict1"), IOP("wrdov13", HSMHV2_MOD_WRDOV13, IF_REAL, "Width dependence of rdov13"), IOP("wrdslp1", HSMHV2_MOD_WRDSLP1, IF_REAL, "Width dependence of rdslp1"), IOP("wrdvb", HSMHV2_MOD_WRDVB, IF_REAL, "Width dependence of rdvb"), IOP("wrdvd", HSMHV2_MOD_WRDVD, IF_REAL, "Width dependence of rdvd"), IOP("wrdvg11", HSMHV2_MOD_WRDVG11, IF_REAL, "Width dependence of rdvg11"), IOP("wrs", HSMHV2_MOD_WRS, IF_REAL, "Width dependence of rs"), IOP("wrth0", HSMHV2_MOD_WRTH0, IF_REAL, "Width dependence of rth0"), IOP("wvover", HSMHV2_MOD_WVOVER, IF_REAL, "Width dependence of vover"), IOP("wjs0d", HSMHV2_MOD_WJS0D, IF_REAL, "Wength dependence of js0d"), IOP("wjs0swd", HSMHV2_MOD_WJS0SWD, IF_REAL, "Wength dependence of js0swd"), IOP("wnjd", HSMHV2_MOD_WNJD, IF_REAL, "Wength dependence of njd"), IOP("wcisbkd", HSMHV2_MOD_WCISBKD, IF_REAL, "Wength dependence of cisbkd"), IOP("wvdiffjd", HSMHV2_MOD_WVDIFFJD, IF_REAL, "Wength dependence of vdiffjd"), IOP("wjs0s", HSMHV2_MOD_WJS0S, IF_REAL, "Wength dependence of js0s"), IOP("wjs0sws", HSMHV2_MOD_WJS0SWS, IF_REAL, "Wength dependence of js0sws"), IOP("wnjs", HSMHV2_MOD_WNJS, IF_REAL, "Wength dependence of njs"), IOP("wcisbks", HSMHV2_MOD_WCISBKS, IF_REAL, "Wength dependence of cisbks"), IOP("wvdiffjs", HSMHV2_MOD_WVDIFFJS, IF_REAL, "Wength dependence of vdiffjs"), /* Cross-term dependence */ IOP("pvmax", HSMHV2_MOD_PVMAX, IF_REAL, "Cross-term dependence of vmax"), IOP("pbgtmp1", HSMHV2_MOD_PBGTMP1, IF_REAL, "Cross-term dependence of bgtmp1"), IOP("pbgtmp2", HSMHV2_MOD_PBGTMP2, IF_REAL, "Cross-term dependence of bgtmp2"), IOP("peg0", HSMHV2_MOD_PEG0, IF_REAL, "Cross-term dependence of eg0"), IOP("pvfbover", HSMHV2_MOD_PVFBOVER, IF_REAL, "Cross-term dependence of vfbover"), IOP("pnover", HSMHV2_MOD_PNOVER, IF_REAL, "Cross-term dependence of nover"), IOP("pnovers", HSMHV2_MOD_PNOVERS, IF_REAL, "Cross-term dependence of nover on source side"), IOP("pwl2", HSMHV2_MOD_PWL2, IF_REAL, "Cross-term dependence of wl2"), IOP("pvfbc", HSMHV2_MOD_PVFBC, IF_REAL, "Cross-term dependence of vfbc"), IOP("pnsubc", HSMHV2_MOD_PNSUBC, IF_REAL, "Cross-term dependence of nsubc"), IOP("pnsubp", HSMHV2_MOD_PNSUBP, IF_REAL, "Cross-term dependence of nsubp"), IOP("pscp1", HSMHV2_MOD_PSCP1, IF_REAL, "Cross-term dependence of scp1"), IOP("pscp2", HSMHV2_MOD_PSCP2, IF_REAL, "Cross-term dependence of scp2"), IOP("pscp3", HSMHV2_MOD_PSCP3, IF_REAL, "Cross-term dependence of scp3"), IOP("psc1", HSMHV2_MOD_PSC1, IF_REAL, "Cross-term dependence of sc1"), IOP("psc2", HSMHV2_MOD_PSC2, IF_REAL, "Cross-term dependence of sc2"), IOP("psc3", HSMHV2_MOD_PSC3, IF_REAL, "Cross-term dependence of sc3"), IOP("ppgd1", HSMHV2_MOD_PPGD1, IF_REAL, "Cross-term dependence of pgd1"), //IOP("ppgd3", HSMHV2_MOD_PPGD3, IF_REAL, "Cross-term dependence of pgd3"), IOP("pndep", HSMHV2_MOD_PNDEP, IF_REAL, "Cross-term dependence of ndep"), IOP("pninv", HSMHV2_MOD_PNINV, IF_REAL, "Cross-term dependence of ninv"), IOP("pmuecb0", HSMHV2_MOD_PMUECB0, IF_REAL, "Cross-term dependence of muecb0"), IOP("pmuecb1", HSMHV2_MOD_PMUECB1, IF_REAL, "Cross-term dependence of muecb1"), IOP("pmueph1", HSMHV2_MOD_PMUEPH1, IF_REAL, "Cross-term dependence of mueph1"), IOP("pvtmp", HSMHV2_MOD_PVTMP, IF_REAL, "Cross-term dependence of vtmp"), IOP("pwvth0", HSMHV2_MOD_PWVTH0, IF_REAL, "Cross-term dependence of wvth0"), IOP("pmuesr1", HSMHV2_MOD_PMUESR1, IF_REAL, "Cross-term dependence of muesr1"), IOP("pmuetmp", HSMHV2_MOD_PMUETMP, IF_REAL, "Cross-term dependence of muetmp"), IOP("psub1", HSMHV2_MOD_PSUB1, IF_REAL, "Cross-term dependence of sub1"), IOP("psub2", HSMHV2_MOD_PSUB2, IF_REAL, "Cross-term dependence of sub2"), IOP("psvds", HSMHV2_MOD_PSVDS, IF_REAL, "Cross-term dependence of svds"), IOP("psvbs", HSMHV2_MOD_PSVBS, IF_REAL, "Cross-term dependence of svbs"), IOP("psvgs", HSMHV2_MOD_PSVGS, IF_REAL, "Cross-term dependence of svgs"), IOP("pfn1", HSMHV2_MOD_PFN1, IF_REAL, "Cross-term dependence of fn1"), IOP("pfn2", HSMHV2_MOD_PFN2, IF_REAL, "Cross-term dependence of fn2"), IOP("pfn3", HSMHV2_MOD_PFN3, IF_REAL, "Cross-term dependence of fn3"), IOP("pfvbs", HSMHV2_MOD_PFVBS, IF_REAL, "Cross-term dependence of fvbs"), IOP("pnsti", HSMHV2_MOD_PNSTI, IF_REAL, "Cross-term dependence of nsti"), IOP("pwsti", HSMHV2_MOD_PWSTI, IF_REAL, "Cross-term dependence of wsti"), IOP("pscsti1", HSMHV2_MOD_PSCSTI1, IF_REAL, "Cross-term dependence of scsti1"), IOP("pscsti2", HSMHV2_MOD_PSCSTI2, IF_REAL, "Cross-term dependence of scsti2"), IOP("pvthsti", HSMHV2_MOD_PVTHSTI, IF_REAL, "Cross-term dependence of vthsti"), IOP("pmuesti1", HSMHV2_MOD_PMUESTI1, IF_REAL, "Cross-term dependence of muesti1"), IOP("pmuesti2", HSMHV2_MOD_PMUESTI2, IF_REAL, "Cross-term dependence of muesti2"), IOP("pmuesti3", HSMHV2_MOD_PMUESTI3, IF_REAL, "Cross-term dependence of muesti3"), IOP("pnsubpsti1", HSMHV2_MOD_PNSUBPSTI1, IF_REAL, "Cross-term dependence of nsubpsti1"), IOP("pnsubpsti2", HSMHV2_MOD_PNSUBPSTI2, IF_REAL, "Cross-term dependence of nsubpsti2"), IOP("pnsubpsti3", HSMHV2_MOD_PNSUBPSTI3, IF_REAL, "Cross-term dependence of nsubpsti3"), IOP("pcgso", HSMHV2_MOD_PCGSO, IF_REAL, "Cross-term dependence of cgso"), IOP("pcgdo", HSMHV2_MOD_PCGDO, IF_REAL, "Cross-term dependence of cgdo"), IOP("pjs0", HSMHV2_MOD_PJS0, IF_REAL, "Cross-term dependence of js0"), IOP("pjs0sw", HSMHV2_MOD_PJS0SW, IF_REAL, "Cross-term dependence of js0sw"), IOP("pnj", HSMHV2_MOD_PNJ, IF_REAL, "Cross-term dependence of nj"), IOP("pcisbk", HSMHV2_MOD_PCISBK, IF_REAL, "Cross-term dependence of cisbk"), IOP("pclm1", HSMHV2_MOD_PCLM1, IF_REAL, "Cross-term dependence of clm1"), IOP("pclm2", HSMHV2_MOD_PCLM2, IF_REAL, "Cross-term dependence of clm2"), IOP("pclm3", HSMHV2_MOD_PCLM3, IF_REAL, "Cross-term dependence of clm3"), IOP("pwfc", HSMHV2_MOD_PWFC, IF_REAL, "Cross-term dependence of wfc"), IOP("pgidl1", HSMHV2_MOD_PGIDL1, IF_REAL, "Cross-term dependence of gidl1"), IOP("pgidl2", HSMHV2_MOD_PGIDL2, IF_REAL, "Cross-term dependence of gidl2"), IOP("pgleak1", HSMHV2_MOD_PGLEAK1, IF_REAL, "Cross-term dependence of gleak1"), IOP("pgleak2", HSMHV2_MOD_PGLEAK2, IF_REAL, "Cross-term dependence of gleak2"), IOP("pgleak3", HSMHV2_MOD_PGLEAK3, IF_REAL, "Cross-term dependence of gleak3"), IOP("pgleak6", HSMHV2_MOD_PGLEAK6, IF_REAL, "Cross-term dependence of gleak6"), IOP("pglksd1", HSMHV2_MOD_PGLKSD1, IF_REAL, "Cross-term dependence of glksd1"), IOP("pglksd2", HSMHV2_MOD_PGLKSD2, IF_REAL, "Cross-term dependence of glksd2"), IOP("pglkb1", HSMHV2_MOD_PGLKB1, IF_REAL, "Cross-term dependence of glkb1"), IOP("pglkb2", HSMHV2_MOD_PGLKB2, IF_REAL, "Cross-term dependence of glkb2"), IOP("pnftrp", HSMHV2_MOD_PNFTRP, IF_REAL, "Cross-term dependence of nftrp"), IOP("pnfalp", HSMHV2_MOD_PNFALP, IF_REAL, "Cross-term dependence of nfalp"), //IOP("ppthrou", HSMHV2_MOD_PPTHROU, IF_REAL, "Cross-term dependence of pthrou"), IOP("pvdiffj", HSMHV2_MOD_PVDIFFJ, IF_REAL, "Cross-term dependence of vdiffj"), IOP("pibpc1", HSMHV2_MOD_PIBPC1, IF_REAL, "Cross-term dependence of ibpc1"), IOP("pibpc2", HSMHV2_MOD_PIBPC2, IF_REAL, "Cross-term dependence of ibpc2"), IOP("pcgbo", HSMHV2_MOD_PCGBO, IF_REAL, "Cross-term dependence of cgbo"), IOP("pcvdsover", HSMHV2_MOD_PCVDSOVER, IF_REAL, "Cross-term dependence of cvdsover"), IOP("pfalph", HSMHV2_MOD_PFALPH, IF_REAL, "Cross-term dependence of falph"), IOP("pnpext", HSMHV2_MOD_PNPEXT, IF_REAL, "Cross-term dependence of npext"), IOP("ppowrat", HSMHV2_MOD_PPOWRAT, IF_REAL, "Cross-term dependence of powrat"), IOP("prd", HSMHV2_MOD_PRD, IF_REAL, "Cross-term dependence of rd"), IOP("prd22", HSMHV2_MOD_PRD22, IF_REAL, "Cross-term dependence of rd22"), IOP("prd23", HSMHV2_MOD_PRD23, IF_REAL, "Cross-term dependence of rd23"), IOP("prd24", HSMHV2_MOD_PRD24, IF_REAL, "Cross-term dependence of rd24"), IOP("prdict1", HSMHV2_MOD_PRDICT1, IF_REAL, "Cross-term dependence of rdict1"), IOP("prdov13", HSMHV2_MOD_PRDOV13, IF_REAL, "Cross-term dependence of rdov13"), IOP("prdslp1", HSMHV2_MOD_PRDSLP1, IF_REAL, "Cross-term dependence of rdslp1"), IOP("prdvb", HSMHV2_MOD_PRDVB, IF_REAL, "Cross-term dependence of rdvb"), IOP("prdvd", HSMHV2_MOD_PRDVD, IF_REAL, "Cross-term dependence of rdvd"), IOP("prdvg11", HSMHV2_MOD_PRDVG11, IF_REAL, "Cross-term dependence of rdvg11"), IOP("prs", HSMHV2_MOD_PRS, IF_REAL, "Cross-term dependence of rs"), IOP("prth0", HSMHV2_MOD_PRTH0, IF_REAL, "Cross-term dependence of rth0"), IOP("pvover", HSMHV2_MOD_PVOVER, IF_REAL, "Cross-term dependence of vover"), IOP("pjs0d", HSMHV2_MOD_PJS0D, IF_REAL, "Cross-term dependence of js0d"), IOP("pjs0swd", HSMHV2_MOD_PJS0SWD, IF_REAL, "Cross-term dependence of js0swd"), IOP("pnjd", HSMHV2_MOD_PNJD, IF_REAL, "Cross-term dependence of njd"), IOP("pcisbkd", HSMHV2_MOD_PCISBKD, IF_REAL, "Cross-term dependence of cisbkd"), IOP("pvdiffjd", HSMHV2_MOD_PVDIFFJD, IF_REAL, "Cross-term dependence of vdiffjd"), IOP("pjs0s", HSMHV2_MOD_PJS0S, IF_REAL, "Cross-term dependence of js0s"), IOP("pjs0sws", HSMHV2_MOD_PJS0SWS, IF_REAL, "Cross-term dependence of js0sws"), IOP("pnjs", HSMHV2_MOD_PNJS, IF_REAL, "Cross-term dependence of njs"), IOP("pcisbks", HSMHV2_MOD_PCISBKS, IF_REAL, "Cross-term dependence of cisbks"), IOP("pvdiffjs", HSMHV2_MOD_PVDIFFJS, IF_REAL, "Cross-term dependence of vdiffjs"), IOP("vgs_max", HSMHV2_MOD_VGS_MAX, IF_REAL, "maximum voltage G-S branch"), IOP("vgd_max", HSMHV2_MOD_VGD_MAX, IF_REAL, "maximum voltage G-D branch"), IOP("vgb_max", HSMHV2_MOD_VGB_MAX, IF_REAL, "maximum voltage G-B branch"), IOP("vds_max", HSMHV2_MOD_VDS_MAX, IF_REAL, "maximum voltage D-S branch"), IOP("vbs_max", HSMHV2_MOD_VBS_MAX, IF_REAL, "maximum voltage B-S branch"), IOP("vbd_max", HSMHV2_MOD_VBD_MAX, IF_REAL, "maximum voltage B-D branch"), IOP("vgsr_max", HSMHV2_MOD_VGSR_MAX, IF_REAL, "maximum voltage G-S branch"), IOP("vgdr_max", HSMHV2_MOD_VGDR_MAX, IF_REAL, "maximum voltage G-D branch"), IOP("vgbr_max", HSMHV2_MOD_VGBR_MAX, IF_REAL, "maximum voltage G-B branch"), IOP("vbsr_max", HSMHV2_MOD_VBSR_MAX, IF_REAL, "maximum voltage B-S branch"), IOP("vbdr_max", HSMHV2_MOD_VBDR_MAX, IF_REAL, "maximum voltage B-D branch") }; char *HSMHV2names[] = { "Drain", "Gate", "Source", "Bulk", "Substrate", "Temp" }; int HSMHV2nSize = NUMELEMS(HSMHV2names); int HSMHV2pTSize = NUMELEMS(HSMHV2pTable); int HSMHV2mPTSize = NUMELEMS(HSMHV2mPTable); int HSMHV2iSize = sizeof(HSMHV2instance); int HSMHV2mSize = sizeof(HSMHV2model); tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2ask.c0000644000175000017500000004004613546075722022772 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhvask.c DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "hsmhv2def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HSMHV2ask( CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { HSMHV2instance *here = (HSMHV2instance*)inst; int flg_nqs ; double cggb_nqs, cgdb_nqs, cgsb_nqs, cdgb_nqs, cddb_nqs, cdsb_nqs, cbgb_nqs, cbdb_nqs, cbsb_nqs ; double Qi_nqs, dQi_nqs_dVds, dQi_nqs_dVgs, dQi_nqs_dVbs, dQb_nqs_dVds, dQb_nqs_dVgs, dQb_nqs_dVbs ; double Qdrat, dQdrat_dVds, dQdrat_dVgs, dQdrat_dVbs, dQi_dVds, dQi_dVgs, dQi_dVbs, dQbulk_dVds, dQbulk_dVgs, dQbulk_dVbs ; double dQd_nqs_dVds, dQd_nqs_dVgs, dQd_nqs_dVbs, dQd_nqs_dQi_nqs ; double dQg_nqs_dQi_nqs, dQg_nqs_dQb_nqs ; NG_IGNORE(select); here->HSMHV2_csdo = - (here->HSMHV2_cddo + here->HSMHV2_cgdo + here->HSMHV2_cbdo) ; here->HSMHV2_csgo = - (here->HSMHV2_cdgo + here->HSMHV2_cggo + here->HSMHV2_cbgo) ; here->HSMHV2_csbo = - (here->HSMHV2_cdbo + here->HSMHV2_cgbo + here->HSMHV2_cbbo) ; here->HSMHV2_cdso = - (here->HSMHV2_cddo + here->HSMHV2_cdgo + here->HSMHV2_cdbo) ; here->HSMHV2_cgso = - (here->HSMHV2_cgdo + here->HSMHV2_cggo + here->HSMHV2_cgbo) ; here->HSMHV2_csso = - (here->HSMHV2_csdo + here->HSMHV2_csgo + here->HSMHV2_csbo) ; /* NQS? */ if (here->HSMHV2QIqiPtr == NULL) { flg_nqs = 0 ; } else { flg_nqs = 1 ; } /* printf("HSMHV2ask: flg_nqs = %d\n", flg_nqs) ; */ if (flg_nqs) { /* collect data for NQS case (DC operating point only!) */ Qi_nqs = *(ckt->CKTstate0 + here->HSMHV2qi_nqs) ; if ( here->HSMHV2_mode > 0 ) { /* forward mode */ Qdrat = here->HSMHV2_Xd ; dQdrat_dVds = here->HSMHV2_Xd_dVdsi ; dQdrat_dVgs = here->HSMHV2_Xd_dVgsi ; dQdrat_dVbs = here->HSMHV2_Xd_dVbsi ; dQi_dVds = here->HSMHV2_Qi_dVdsi ; dQi_dVgs = here->HSMHV2_Qi_dVgsi ; dQi_dVbs = here->HSMHV2_Qi_dVbsi ; dQbulk_dVds = here->HSMHV2_Qbulk_dVdsi ; dQbulk_dVgs = here->HSMHV2_Qbulk_dVgsi ; dQbulk_dVbs = here->HSMHV2_Qbulk_dVbsi ; } else { /* reverse mode */ Qdrat = 1.0 - here->HSMHV2_Xd ; dQdrat_dVds = +(here->HSMHV2_Xd_dVdsi + here->HSMHV2_Xd_dVgsi + here->HSMHV2_Xd_dVbsi) ; dQdrat_dVgs = - here->HSMHV2_Xd_dVgsi ; dQdrat_dVbs = - here->HSMHV2_Xd_dVbsi ; dQi_dVds = -(here->HSMHV2_Qi_dVdsi + here->HSMHV2_Qi_dVgsi + here->HSMHV2_Qi_dVbsi) ; dQi_dVgs = here->HSMHV2_Qi_dVgsi ; dQi_dVbs = here->HSMHV2_Qi_dVbsi ; dQbulk_dVds = -(here->HSMHV2_Qbulk_dVdsi + here->HSMHV2_Qbulk_dVgsi + here->HSMHV2_Qbulk_dVbsi) ; dQbulk_dVgs = here->HSMHV2_Qbulk_dVgsi ; dQbulk_dVbs = here->HSMHV2_Qbulk_dVbsi ; } /* from Qg_nqs = - Qi_nqs - Qb_nqs: */ dQg_nqs_dQi_nqs = - 1.0 ; dQg_nqs_dQb_nqs = - 1.0 ; /* from Qd_nqs = Qi_nqs * Qdrat: */ dQd_nqs_dVds = Qi_nqs * dQdrat_dVds ; dQd_nqs_dVgs = Qi_nqs * dQdrat_dVgs ; dQd_nqs_dVbs = Qi_nqs * dQdrat_dVbs ; dQd_nqs_dQi_nqs = Qdrat ; /* by implicit differentiation of the NQS equations (DC operating point only!): */ dQi_nqs_dVds = dQi_dVds ; dQi_nqs_dVgs = dQi_dVgs ; dQi_nqs_dVbs = dQi_dVbs ; dQb_nqs_dVds = dQbulk_dVds ; dQb_nqs_dVgs = dQbulk_dVgs ; dQb_nqs_dVbs = dQbulk_dVbs ; cggb_nqs = dQg_nqs_dQi_nqs * dQi_nqs_dVgs + dQg_nqs_dQb_nqs * dQb_nqs_dVgs ; cgdb_nqs = dQg_nqs_dQi_nqs * dQi_nqs_dVds + dQg_nqs_dQb_nqs * dQb_nqs_dVds ; cgsb_nqs = - dQg_nqs_dQi_nqs * (dQi_nqs_dVds + dQi_nqs_dVgs + dQi_nqs_dVbs) - dQg_nqs_dQb_nqs * (dQb_nqs_dVds + dQb_nqs_dVgs + dQb_nqs_dVbs) ; cdgb_nqs = dQd_nqs_dVgs + dQd_nqs_dQi_nqs * dQi_nqs_dVgs ; cddb_nqs = dQd_nqs_dVds + dQd_nqs_dQi_nqs * dQi_nqs_dVds ; cdsb_nqs = -(dQd_nqs_dVds + dQd_nqs_dVgs + dQd_nqs_dVbs) - dQd_nqs_dQi_nqs * (dQi_nqs_dVds + dQi_nqs_dVgs + dQi_nqs_dVbs) ; cbgb_nqs = dQb_nqs_dVgs ; cbdb_nqs = dQb_nqs_dVds ; cbsb_nqs = -(dQb_nqs_dVds + dQb_nqs_dVgs + dQb_nqs_dVbs) ; } else { /* QS case */ cggb_nqs = cgdb_nqs = cgsb_nqs = cdgb_nqs = cddb_nqs = cdsb_nqs = cbgb_nqs = cbdb_nqs = cbsb_nqs = 0.0 ; } switch (which) { case HSMHV2_COSELFHEAT: value->iValue = here->HSMHV2_coselfheat; return(OK); case HSMHV2_COSUBNODE: value->iValue = here->HSMHV2_cosubnode; return(OK); case HSMHV2_L: value->rValue = here->HSMHV2_l; return(OK); case HSMHV2_W: value->rValue = here->HSMHV2_w; return(OK); case HSMHV2_AS: value->rValue = here->HSMHV2_as; return(OK); case HSMHV2_AD: value->rValue = here->HSMHV2_ad; return(OK); case HSMHV2_PS: value->rValue = here->HSMHV2_ps; return(OK); case HSMHV2_PD: value->rValue = here->HSMHV2_pd; return(OK); case HSMHV2_NRS: value->rValue = here->HSMHV2_nrs; return(OK); case HSMHV2_NRD: value->rValue = here->HSMHV2_nrd; return(OK); case HSMHV2_DTEMP: value->rValue = here->HSMHV2_dtemp; return(OK); case HSMHV2_OFF: value->iValue = here->HSMHV2_off; return(OK); case HSMHV2_IC_VBS: value->rValue = here->HSMHV2_icVBS; return(OK); case HSMHV2_IC_VDS: value->rValue = here->HSMHV2_icVDS; return(OK); case HSMHV2_IC_VGS: value->rValue = here->HSMHV2_icVGS; return(OK); case HSMHV2_DNODE: value->iValue = here->HSMHV2dNode; return(OK); case HSMHV2_GNODE: value->iValue = here->HSMHV2gNode; return(OK); case HSMHV2_SNODE: value->iValue = here->HSMHV2sNode; return(OK); case HSMHV2_BNODE: value->iValue = here->HSMHV2bNode; return(OK); case HSMHV2_DNODEPRIME: value->iValue = here->HSMHV2dNodePrime; return(OK); case HSMHV2_SNODEPRIME: value->iValue = here->HSMHV2sNodePrime; return(OK); case HSMHV2_SOURCECONDUCT: value->rValue = here->HSMHV2sourceConductance; return(OK); case HSMHV2_DRAINCONDUCT: value->rValue = here->HSMHV2drainConductance; return(OK); case HSMHV2_VBD: value->rValue = *(ckt->CKTstate0 + here->HSMHV2vbd); return(OK); case HSMHV2_VBS: value->rValue = *(ckt->CKTstate0 + here->HSMHV2vbs); return(OK); case HSMHV2_VGS: value->rValue = *(ckt->CKTstate0 + here->HSMHV2vgs); return(OK); case HSMHV2_VDS: value->rValue = *(ckt->CKTstate0 + here->HSMHV2vds); return(OK); case HSMHV2_CD: value->rValue = here->HSMHV2_ids; return(OK); case HSMHV2_ISUB: value->rValue = here->HSMHV2_isub; return(OK); case HSMHV2_ISUBLD: value->rValue = here->HSMHV2_isubld; return(OK); case HSMHV2_IDSIBPC: value->rValue = here->HSMHV2_idsibpc; return(OK); case HSMHV2_IGIDL: value->rValue = here->HSMHV2_igidl; return(OK); case HSMHV2_IGISL: value->rValue = here->HSMHV2_igisl; return(OK); case HSMHV2_IGD: value->rValue = here->HSMHV2_igd; return(OK); case HSMHV2_IGS: value->rValue = here->HSMHV2_igs; return(OK); case HSMHV2_IGB: value->rValue = here->HSMHV2_igb; return(OK); case HSMHV2_CBS: value->rValue = here->HSMHV2_ibs; return(OK); case HSMHV2_CBD: value->rValue = here->HSMHV2_ibd; return(OK); case HSMHV2_GM: value->rValue = here->HSMHV2_dIds_dVgsi; return(OK); case HSMHV2_GMT: value->rValue = here->HSMHV2_dIds_dTi; return(OK); case HSMHV2_GDS: value->rValue = here->HSMHV2_dIds_dVdsi; return(OK); case HSMHV2_GMBS: value->rValue = here->HSMHV2_dIds_dVbsi; return(OK); case HSMHV2_GBD: value->rValue = here->HSMHV2_gbd; return(OK); case HSMHV2_GBS: value->rValue = here->HSMHV2_gbs; return(OK); case HSMHV2_QB: value->rValue = *(ckt->CKTstate0 + here->HSMHV2qb); return(OK); case HSMHV2_CQB: value->rValue = *(ckt->CKTstate0 + here->HSMHV2cqb); return(OK); case HSMHV2_QG: value->rValue = *(ckt->CKTstate0 + here->HSMHV2qg); return(OK); case HSMHV2_CQG: value->rValue = *(ckt->CKTstate0 + here->HSMHV2cqg); return(OK); case HSMHV2_QD: value->rValue = *(ckt->CKTstate0 + here->HSMHV2qd); return(OK); case HSMHV2_CQD: value->rValue = *(ckt->CKTstate0 + here->HSMHV2cqd); return(OK); case HSMHV2_CGG: value->rValue = here->HSMHV2_dQg_dVgsi - here->HSMHV2_cggo; if (flg_nqs) value->rValue += cggb_nqs; return(OK); case HSMHV2_CGD: value->rValue = (here->HSMHV2_mode > 0) ? here->HSMHV2_dQg_dVdsi - here->HSMHV2_cgdo : - (here->HSMHV2_dQg_dVdsi + here->HSMHV2_dQg_dVgsi + here->HSMHV2_dQg_dVbsi) - here->HSMHV2_cgso; if (flg_nqs) value->rValue += cgdb_nqs; return(OK); case HSMHV2_CGS: value->rValue = (here->HSMHV2_mode > 0) ? - (here->HSMHV2_dQg_dVdsi + here->HSMHV2_dQg_dVgsi + here->HSMHV2_dQg_dVbsi) - here->HSMHV2_cgso : here->HSMHV2_dQg_dVdsi - here->HSMHV2_cgdo; if (flg_nqs) value->rValue += cgsb_nqs; return(OK); case HSMHV2_CDG: value->rValue = (here->HSMHV2_mode > 0) ? here->HSMHV2_dQdi_dVgsi - here->HSMHV2_cdgo : here->HSMHV2_dQsi_dVgsi - here->HSMHV2_csgo; if (flg_nqs) value->rValue += cdgb_nqs; return(OK); case HSMHV2_CDD: value->rValue = (here->HSMHV2_mode > 0) ? here->HSMHV2_dQdi_dVdsi - here->HSMHV2_cddo : - (here->HSMHV2_dQsi_dVdsi + here->HSMHV2_dQsi_dVgsi + here->HSMHV2_dQsi_dVbsi) - here->HSMHV2_csso; if (flg_nqs) value->rValue += cddb_nqs; return(OK); case HSMHV2_CDS: value->rValue = (here->HSMHV2_mode > 0) ? - (here->HSMHV2_dQdi_dVdsi + here->HSMHV2_dQdi_dVgsi + here->HSMHV2_dQdi_dVbsi) - here->HSMHV2_cdso : here->HSMHV2_dQsi_dVdsi - here->HSMHV2_csdo; if (flg_nqs) value->rValue += cdsb_nqs; return(OK); case HSMHV2_CBG: value->rValue = here->HSMHV2_dQb_dVgsi - here->HSMHV2_cbgo; if (flg_nqs) value->rValue += cbgb_nqs; return(OK); case HSMHV2_CBDB: value->rValue = (here->HSMHV2_mode > 0) ? here->HSMHV2_dQb_dVdsi - here->HSMHV2_cbdo : - (here->HSMHV2_dQb_dVdsi + here->HSMHV2_dQb_dVgsi + here->HSMHV2_dQb_dVbsi) + (here->HSMHV2_cbdo+here->HSMHV2_cbgo+here->HSMHV2_cbbo); if (flg_nqs) value->rValue += cbdb_nqs; return(OK); case HSMHV2_CBSB: value->rValue = (here->HSMHV2_mode > 0) ? - (here->HSMHV2_dQb_dVdsi + here->HSMHV2_dQb_dVgsi + here->HSMHV2_dQb_dVbsi) + (here->HSMHV2_cbdo + here->HSMHV2_cbgo + here->HSMHV2_cbbo) : here->HSMHV2_dQb_dVdsi - here->HSMHV2_cbdo; if (flg_nqs) value->rValue += cbsb_nqs; return(OK); case HSMHV2_CGDO: value->rValue = (here->HSMHV2_mode > 0) ? here->HSMHV2_cgdo : here->HSMHV2_cgso; return(OK); case HSMHV2_CGSO: value->rValue = (here->HSMHV2_mode > 0) ? here->HSMHV2_cgso : here->HSMHV2_cgdo; return(OK); case HSMHV2_CGBO: value->rValue = here->HSMHV2_cgbo; return(OK); case HSMHV2_CAPBD: value->rValue = here->HSMHV2_capbd; return(OK); case HSMHV2_CAPBS: value->rValue = here->HSMHV2_capbs; return(OK); case HSMHV2_VON: value->rValue = here->HSMHV2_von; return(OK); case HSMHV2_VDSAT: value->rValue = here->HSMHV2_vdsat; return(OK); case HSMHV2_QBS: value->rValue = *(ckt->CKTstate0 + here->HSMHV2qbs); return(OK); case HSMHV2_QBD: value->rValue = *(ckt->CKTstate0 + here->HSMHV2qbd); return(OK); case HSMHV2_CORBNET: value->iValue = here->HSMHV2_corbnet; return(OK); case HSMHV2_RBPB: value->rValue = here->HSMHV2_rbpb; return (OK); case HSMHV2_RBPD: value->rValue = here->HSMHV2_rbpd; return(OK); case HSMHV2_RBPS: value->rValue = here->HSMHV2_rbps; return(OK); case HSMHV2_RBDB: value->rValue = here->HSMHV2_rbdb; return(OK); case HSMHV2_RBSB: value->rValue = here->HSMHV2_rbsb; return(OK); case HSMHV2_CORG: value->iValue = here->HSMHV2_corg; return(OK); case HSMHV2_NGCON: value->rValue = here->HSMHV2_ngcon; return(OK); case HSMHV2_XGW: value->rValue = here->HSMHV2_xgw; return(OK); case HSMHV2_XGL: value->rValue = here->HSMHV2_xgl; return(OK); case HSMHV2_NF: value->rValue = here->HSMHV2_nf; return(OK); case HSMHV2_SA: value->rValue = here->HSMHV2_sa; return(OK); case HSMHV2_SB: value->rValue = here->HSMHV2_sb; return(OK); case HSMHV2_SD: value->rValue = here->HSMHV2_sd; return(OK); case HSMHV2_NSUBCDFM: value->rValue = here->HSMHV2_nsubcdfm; return(OK); case HSMHV2_M: value->rValue = here->HSMHV2_m; return(OK); case HSMHV2_SUBLD1: value->rValue = here->HSMHV2_subld1; return(OK); case HSMHV2_SUBLD2: value->rValue = here->HSMHV2_subld2; return(OK); case HSMHV2_LOVER: value->rValue = here->HSMHV2_lover; return(OK); case HSMHV2_LOVERS: value->rValue = here->HSMHV2_lovers; return(OK); case HSMHV2_LOVERLD: value->rValue = here->HSMHV2_loverld; return(OK); case HSMHV2_LDRIFT1: value->rValue = here->HSMHV2_ldrift1; return(OK); case HSMHV2_LDRIFT2: value->rValue = here->HSMHV2_ldrift2; return(OK); case HSMHV2_LDRIFT1S: value->rValue = here->HSMHV2_ldrift1s; return(OK); case HSMHV2_LDRIFT2S: value->rValue = here->HSMHV2_ldrift2s; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2trunc.c0000644000175000017500000000665113546075722023353 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhvtrunc.c DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "hsmhv2def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HSMHV2trunc( GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { HSMHV2model *model = (HSMHV2model*)inModel; HSMHV2instance *here; #ifdef STEPDEBUG double debugtemp=0.0 ; #endif /* STEPDEBUG */ for ( ;model != NULL ;model = HSMHV2nextModel(model)) { for ( here=HSMHV2instances(model);here!=NULL ; here = HSMHV2nextInstance(here)) { #ifdef STEPDEBUG debugtemp = *timeStep; #endif /* STEPDEBUG */ CKTterr(here->HSMHV2qb,ckt,timeStep); CKTterr(here->HSMHV2qg,ckt,timeStep); CKTterr(here->HSMHV2qd,ckt,timeStep); CKTterr(here->HSMHV2qbs,ckt,timeStep); CKTterr(here->HSMHV2qbd,ckt,timeStep); CKTterr(here->HSMHV2qfd,ckt,timeStep); CKTterr(here->HSMHV2qfs,ckt,timeStep); #ifdef STEPDEBUG if ( debugtemp != *timeStep ) printf("device %s reduces step from %g to %g\n", here->HSMHV2name, debugtemp, *timeStep); #endif /* STEPDEBUG */ } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2cvtest.c0000644000175000017500000003337013546075722023526 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhvcvtest.c DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "hsmhv2def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HSMHV2convTest( GENmodel *inModel, CKTcircuit *ckt) { HSMHV2model *model = (HSMHV2model*)inModel; HSMHV2instance *here; double vds=0.0, vgs=0.0, vbs=0.0, vdse=0.0, vgse=0.0, vbse=0.0, vdbd=0.0, vsbs=0.0, deltemp =0.0 ; double delvds=0.0, delvgs=0.0, delvbs=0.0, delvdse=0.0, delvgse=0.0, delvbse=0.0, delvdbd=0.0, delvsbs=0.0, deldeltemp =0.0 ; double Ids=0.0, gds=0.0, gm=0.0, gmbs=0.0, gmT=0.0, gmbs_ext=0.0, gds_ext=0.0, gm_ext=0.0, Isub=0.0, dIsub_dVds=0.0, dIsub_dVgs=0.0, dIsub_dVbs=0.0, dIsub_dT=0.0, Isubs=0.0, dIsubs_dVds=0.0, dIsubs_dVgs=0.0, dIsubs_dVbs=0.0, dIsubs_dT=0.0, Igidl=0.0, dIgidl_dVds=0.0, dIgidl_dVgs=0.0, dIgidl_dVbs=0.0, dIgidl_dT=0.0, Igisl=0.0, dIgisl_dVds=0.0, dIgisl_dVgs=0.0, dIgisl_dVbs=0.0, dIgisl_dT=0.0, Igd=0.0, dIgd_dVd=0.0, dIgd_dVg=0.0, dIgd_dVb=0.0, dIgd_dT=0.0, Igs=0.0, dIgs_dVd=0.0, dIgs_dVg=0.0, dIgs_dVb=0.0, dIgs_dT=0.0, Igb=0.0, dIgb_dVd=0.0, dIgb_dVg=0.0, dIgb_dVb=0.0, dIgb_dT=0.0, Ibd=0.0, Gbd=0.0, Gbdt=0.0, Ibs=0.0, Gbs=0.0, Gbst =0.0 ; double i_dP=0.0, i_gP=0.0, i_sP=0.0, i_db=0.0, i_sb=0.0, i_dP_hat=0.0, i_gP_hat=0.0, i_sP_hat=0.0, i_db_hat=0.0, i_sb_hat =0.0 ; double tol0=0.0, tol1=0.0, tol2=0.0, tol3=0.0, tol4 =0.0 ; /* loop through all the HSMHV2 device models */ for ( ; model != NULL; model = HSMHV2nextModel(model)) { /* loop through all the instances of the model */ for ( here = HSMHV2instances(model); here != NULL ; here = HSMHV2nextInstance(here)) { vds = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2dNodePrime) - *(ckt->CKTrhsOld+here->HSMHV2sNodePrime)); vgs = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2gNodePrime) - *(ckt->CKTrhsOld+here->HSMHV2sNodePrime)); vbs = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2bNodePrime) - *(ckt->CKTrhsOld+here->HSMHV2sNodePrime)); vdse = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2dNode) - *(ckt->CKTrhsOld+here->HSMHV2sNode)); vgse = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2gNodePrime) - *(ckt->CKTrhsOld+here->HSMHV2sNode)); vbse = model->HSMHV2_type * (*(ckt->CKTrhsOld+here->HSMHV2bNodePrime) - *(ckt->CKTrhsOld+here->HSMHV2sNode)); vdbd = model->HSMHV2_type * (*(ckt->CKTrhsOld + here->HSMHV2dbNode) - *(ckt->CKTrhsOld + here->HSMHV2dNode)); vsbs = model->HSMHV2_type * (*(ckt->CKTrhsOld + here->HSMHV2sbNode) - *(ckt->CKTrhsOld + here->HSMHV2sNode)); if( here->HSMHV2tempNode > 0 ){ deltemp = *(ckt->CKTrhsOld + here->HSMHV2tempNode); } else { deltemp = 0.0 ; } delvds = vds - *(ckt->CKTstate0 + here->HSMHV2vds) ; delvgs = vgs - *(ckt->CKTstate0 + here->HSMHV2vgs) ; delvbs = vbs - *(ckt->CKTstate0 + here->HSMHV2vbs) ; delvdse = vdse - *(ckt->CKTstate0 + here->HSMHV2vdse) ; delvgse = vgse - *(ckt->CKTstate0 + here->HSMHV2vgse) ; delvbse = vbse - *(ckt->CKTstate0 + here->HSMHV2vbse) ; delvdbd = vdbd - *(ckt->CKTstate0 + here->HSMHV2vdbd) ; delvsbs = vsbs - *(ckt->CKTstate0 + here->HSMHV2vsbs) ; if( here->HSMHV2tempNode > 0 ){ deldeltemp = deltemp - *(ckt->CKTstate0 + here->HSMHV2deltemp) ; } else { deldeltemp = 0.0 ; } if ( here->HSMHV2_mode > 0 ) { /* forward mode */ Ids = here->HSMHV2_ids ; gds = here->HSMHV2_dIds_dVdsi ; gm = here->HSMHV2_dIds_dVgsi ; gmbs = here->HSMHV2_dIds_dVbsi ; gmT = (here->HSMHV2tempNode > 0) ? here->HSMHV2_dIds_dTi : 0.0 ; gmbs_ext = here->HSMHV2_dIds_dVbse; gds_ext = here->HSMHV2_dIds_dVdse ; gm_ext = here->HSMHV2_dIds_dVgse; Isub = here->HSMHV2_isub ; dIsub_dVds = here->HSMHV2_dIsub_dVdsi ; dIsub_dVgs = here->HSMHV2_dIsub_dVgsi ; dIsub_dVbs = here->HSMHV2_dIsub_dVbsi ; dIsub_dT = (here->HSMHV2tempNode > 0) ? here->HSMHV2_dIsub_dTi : 0.0 ; Isubs = 0.0 ; dIsubs_dVds = 0.0 ; dIsubs_dVgs = 0.0 ; dIsubs_dVbs = 0.0 ; dIsubs_dT = 0.0 ; Igidl = here->HSMHV2_igidl ; dIgidl_dVds = here->HSMHV2_dIgidl_dVdsi ; dIgidl_dVgs = here->HSMHV2_dIgidl_dVgsi ; dIgidl_dVbs = here->HSMHV2_dIgidl_dVbsi ; dIgidl_dT = (here->HSMHV2tempNode > 0) ? here->HSMHV2_dIgidl_dTi : 0.0 ; Igisl = here->HSMHV2_igisl ; dIgisl_dVds = here->HSMHV2_dIgisl_dVdsi ; dIgisl_dVgs = here->HSMHV2_dIgisl_dVgsi ; dIgisl_dVbs = here->HSMHV2_dIgisl_dVbsi ; dIgisl_dT = (here->HSMHV2tempNode > 0) ? here->HSMHV2_dIgisl_dTi : 0.0 ; Igd = here->HSMHV2_igd ; dIgd_dVd = here->HSMHV2_dIgd_dVdsi ; dIgd_dVg = here->HSMHV2_dIgd_dVgsi ; dIgd_dVb = here->HSMHV2_dIgd_dVbsi ; dIgd_dT = (here->HSMHV2tempNode > 0) ? here->HSMHV2_dIgd_dTi : 0.0 ; Igs = here->HSMHV2_igs ; dIgs_dVd = here->HSMHV2_dIgs_dVdsi ; dIgs_dVg = here->HSMHV2_dIgs_dVgsi ; dIgs_dVb = here->HSMHV2_dIgs_dVbsi ; dIgs_dT = (here->HSMHV2tempNode > 0) ? here->HSMHV2_dIgs_dTi : 0.0 ; Igb = here->HSMHV2_igb ; dIgb_dVd = here->HSMHV2_dIgb_dVdsi ; dIgb_dVg = here->HSMHV2_dIgb_dVgsi ; dIgb_dVb = here->HSMHV2_dIgb_dVbsi ; dIgb_dT = (here->HSMHV2tempNode > 0) ? here->HSMHV2_dIgb_dTi : 0.0 ; Ibd = here->HSMHV2_ibd ; Gbd = here->HSMHV2_gbd ; Gbdt = (here->HSMHV2tempNode > 0) ? here->HSMHV2_gbdT : 0.0 ; Ibs = here->HSMHV2_ibs ; Gbs = here->HSMHV2_gbs ; Gbst = (here->HSMHV2tempNode > 0) ? here->HSMHV2_gbsT : 0.0 ; } else { /* reverse mode */ Ids = - here->HSMHV2_ids ; gds = + (here->HSMHV2_dIds_dVdsi + here->HSMHV2_dIds_dVgsi + here->HSMHV2_dIds_dVbsi) ; gm = - here->HSMHV2_dIds_dVgsi ; gmbs = - here->HSMHV2_dIds_dVbsi ; gmT = (here->HSMHV2tempNode > 0) ? - here->HSMHV2_dIds_dTi : 0.0 ; gds_ext = + (here->HSMHV2_dIds_dVdse + here->HSMHV2_dIds_dVgse + here->HSMHV2_dIds_dVbse) ; gm_ext = - here->HSMHV2_dIds_dVgse; gmbs_ext = - here->HSMHV2_dIds_dVbse; Isub = 0.0 ; dIsub_dVds = 0.0 ; dIsub_dVgs = 0.0 ; dIsub_dVbs = 0.0 ; dIsub_dT = 0.0 ; Isubs = here->HSMHV2_isub ; dIsubs_dVds = - (here->HSMHV2_dIsub_dVdsi + here->HSMHV2_dIsub_dVgsi + here->HSMHV2_dIsub_dVbsi) ; dIsubs_dVgs = here->HSMHV2_dIsub_dVgsi ; dIsubs_dVbs = here->HSMHV2_dIsub_dVbsi ; dIsubs_dT = (here->HSMHV2tempNode > 0) ? here->HSMHV2_dIsub_dTi : 0.0 ; Igidl = here->HSMHV2_igisl ; dIgidl_dVds = - (here->HSMHV2_dIgisl_dVdsi + here->HSMHV2_dIgisl_dVgsi + here->HSMHV2_dIgisl_dVbsi) ; dIgidl_dVgs = here->HSMHV2_dIgisl_dVgsi ; dIgidl_dVbs = here->HSMHV2_dIgisl_dVbsi ; dIgidl_dT = (here->HSMHV2tempNode > 0) ? here->HSMHV2_dIgisl_dTi : 0.0 ; Igisl = here->HSMHV2_igidl ; dIgisl_dVds = - (here->HSMHV2_dIgidl_dVdsi + here->HSMHV2_dIgidl_dVgsi + here->HSMHV2_dIgidl_dVbsi) ; dIgisl_dVgs = here->HSMHV2_dIgidl_dVgsi ; dIgisl_dVbs = here->HSMHV2_dIgidl_dVbsi ; dIgisl_dT = (here->HSMHV2tempNode > 0) ? here->HSMHV2_dIgidl_dTi : 0.0 ; Igd = here->HSMHV2_igd ; dIgd_dVd = - (here->HSMHV2_dIgs_dVdsi + here->HSMHV2_dIgs_dVgsi + here->HSMHV2_dIgs_dVbsi) ; dIgd_dVg = here->HSMHV2_dIgs_dVgsi ; dIgd_dVb = here->HSMHV2_dIgs_dVbsi ; dIgd_dT = (here->HSMHV2tempNode > 0) ? here->HSMHV2_dIgs_dTi : 0.0 ; Igs = here->HSMHV2_igs ; dIgs_dVd = - (here->HSMHV2_dIgd_dVdsi + here->HSMHV2_dIgd_dVgsi + here->HSMHV2_dIgd_dVbsi) ; dIgs_dVg = here->HSMHV2_dIgd_dVgsi ; dIgs_dVb = here->HSMHV2_dIgd_dVbsi ; dIgs_dT = (here->HSMHV2tempNode > 0) ? here->HSMHV2_dIgd_dTi : 0.0 ; Igb = here->HSMHV2_igb ; dIgb_dVd = - (here->HSMHV2_dIgb_dVdsi + here->HSMHV2_dIgb_dVgsi + here->HSMHV2_dIgb_dVbsi) ; dIgb_dVg = here->HSMHV2_dIgb_dVgsi ; dIgb_dVb = here->HSMHV2_dIgb_dVbsi ; dIgb_dT = (here->HSMHV2tempNode > 0) ? here->HSMHV2_dIgb_dTi : 0.0 ; Ibd = here->HSMHV2_ibd ; Gbd = here->HSMHV2_gbd ; Gbdt = (here->HSMHV2tempNode > 0) ? here->HSMHV2_gbdT : 0.0 ; Ibs = here->HSMHV2_ibs ; Gbs = here->HSMHV2_gbs ; Gbst = (here->HSMHV2tempNode > 0) ? here->HSMHV2_gbsT : 0.0 ; } /* end of reverse mode */ /* for convergence control, only nonlinear static currents are considered: */ i_dP = Ids + Isub + Igidl - Igd ; i_dP_hat = i_dP + gm *delvgs + gds *delvds + gmbs *delvbs + gmT *deldeltemp + dIsub_dVgs *delvgs + dIsub_dVds *delvds + dIsub_dVbs *delvbs + dIsub_dT *deldeltemp + dIgidl_dVgs*delvgs + dIgidl_dVds*delvds + dIgidl_dVbs*delvbs + dIgidl_dT*deldeltemp -(dIgd_dVg *delvgs + dIgd_dVd *delvds + dIgd_dVb *delvbs + dIgd_dT *deldeltemp) + gm_ext *delvgse + gds_ext *delvdse + gmbs_ext *delvbse ; i_gP = Igd + Igs + Igb ; i_gP_hat = i_gP + dIgd_dVg *delvgs + dIgd_dVd *delvds + dIgd_dVb *delvbs + dIgd_dT *deldeltemp + dIgs_dVg *delvgs + dIgs_dVd *delvds + dIgs_dVb *delvbs + dIgs_dT *deldeltemp + dIgb_dVg *delvgs + dIgb_dVd *delvds + dIgb_dVb *delvbs + dIgb_dT *deldeltemp ; i_sP =-Ids + Isubs + Igisl - Igs ; i_sP_hat = i_sP -(gm *delvgs + gds *delvds + gmbs *delvbs + gmT *deldeltemp) + dIsubs_dVgs*delvgs + dIsubs_dVds*delvds + dIsubs_dVbs*delvbs + dIsubs_dT*deldeltemp + dIgisl_dVgs*delvgs + dIgisl_dVds*delvds + dIgisl_dVbs*delvbs + dIgisl_dT*deldeltemp -(dIgs_dVg *delvgs + dIgs_dVd *delvds + dIgs_dVb *delvbs + dIgs_dT *deldeltemp) -(gm_ext *delvgse + gds_ext *delvdse + gmbs_ext *delvbse) ; i_db = Ibd ; i_db_hat = i_db + Gbd*delvdbd + Gbdt*deldeltemp ; i_sb = Ibs ; i_sb_hat = i_sb + Gbs*delvsbs + Gbst*deldeltemp ; /* to be added: power source for thermal network */ /* * check convergence */ if ( here->HSMHV2_off == 0 || !(ckt->CKTmode & MODEINITFIX) ) { tol0 = ckt->CKTreltol * MAX(fabs(i_dP_hat), fabs(i_dP)) + ckt->CKTabstol; tol1 = ckt->CKTreltol * MAX(fabs(i_gP_hat), fabs(i_gP)) + ckt->CKTabstol; tol2 = ckt->CKTreltol * MAX(fabs(i_sP_hat), fabs(i_sP)) + ckt->CKTabstol; tol3 = ckt->CKTreltol * MAX(fabs(i_db_hat), fabs(i_db)) + ckt->CKTabstol; tol4 = ckt->CKTreltol * MAX(fabs(i_sb_hat), fabs(i_sb)) + ckt->CKTabstol; if ( (fabs(i_dP_hat - i_dP) >= tol0) || (fabs(i_gP_hat - i_gP) >= tol1) || (fabs(i_sP_hat - i_sP) >= tol2) || (fabs(i_db_hat - i_db) >= tol3) || (fabs(i_sb_hat - i_sb) >= tol4) ) { ckt->CKTnoncon++; return(OK); } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2def.h0000644000175000017500000033433013546075722022761 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhvdef DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ #ifndef HSMHV2 #define HSMHV2 #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" /* declarations for HiSIMHV MOSFETs */ /* unit-converted model parameters */ typedef struct sHSMHV2modelMKSParam { double HSMHV2_npext ; double HSMHV2_vmax ; double HSMHV2_ll ; double HSMHV2_wl ; double HSMHV2_svgsl ; double HSMHV2_svgsw ; double HSMHV2_svbsl ; double HSMHV2_slgl ; double HSMHV2_sub1l ; double HSMHV2_slg ; double HSMHV2_sub2l ; double HSMHV2_subld2 ; double HSMHV2_rd22 ; double HSMHV2_rd23 ; double HSMHV2_rd24 ; double HSMHV2_rdtemp1 ; double HSMHV2_rdtemp2 ; double HSMHV2_rdvd ; double HSMHV2_rdvdtemp1 ; double HSMHV2_rdvdtemp2 ; double HSMHV2_nsubsub ; double HSMHV2_nsubpsti1 ; double HSMHV2_muesti1 ; double HSMHV2_wfc ; double HSMHV2_glksd1 ; double HSMHV2_glksd2 ; double HSMHV2_glksd3 ; double HSMHV2_gleak2 ; double HSMHV2_gleak4 ; double HSMHV2_gleak5 ; double HSMHV2_gleak7 ; double HSMHV2_glkb2 ; double HSMHV2_fn2 ; double HSMHV2_gidl1 ; double HSMHV2_gidl2 ; double HSMHV2_nfalp ; double HSMHV2_nftrp ; double HSMHV2_cit ; double HSMHV2_ovslp ; double HSMHV2_dly3 ; double HSMHV2_rth0 ; double HSMHV2_cth0 ; double HSMHV2_rdrmue ; double HSMHV2_rdrvmax ; double HSMHV2_ndepm ; double HSMHV2_depvmax ; } HSMHV2modelMKSParam ; /* binning parameters */ typedef struct sHSMHV2binningParam { double HSMHV2_vmax ; double HSMHV2_bgtmp1 ; double HSMHV2_bgtmp2 ; double HSMHV2_eg0 ; double HSMHV2_vfbover ; double HSMHV2_nover ; double HSMHV2_novers ; double HSMHV2_wl2 ; double HSMHV2_vfbc ; double HSMHV2_nsubc ; double HSMHV2_nsubp ; double HSMHV2_scp1 ; double HSMHV2_scp2 ; double HSMHV2_scp3 ; double HSMHV2_sc1 ; double HSMHV2_sc2 ; double HSMHV2_sc3 ; double HSMHV2_pgd1 ; //double HSMHV2_pgd3 ; double HSMHV2_ndep ; double HSMHV2_ninv ; double HSMHV2_muecb0 ; double HSMHV2_muecb1 ; double HSMHV2_mueph1 ; double HSMHV2_vtmp ; double HSMHV2_wvth0 ; double HSMHV2_muesr1 ; double HSMHV2_muetmp ; double HSMHV2_sub1 ; double HSMHV2_sub2 ; double HSMHV2_svds ; double HSMHV2_svbs ; double HSMHV2_svgs ; double HSMHV2_fn1 ; double HSMHV2_fn2 ; double HSMHV2_fn3 ; double HSMHV2_fvbs ; double HSMHV2_nsti ; double HSMHV2_wsti ; double HSMHV2_scsti1 ; double HSMHV2_scsti2 ; double HSMHV2_vthsti ; double HSMHV2_muesti1 ; double HSMHV2_muesti2 ; double HSMHV2_muesti3 ; double HSMHV2_nsubpsti1 ; double HSMHV2_nsubpsti2 ; double HSMHV2_nsubpsti3 ; double HSMHV2_cgso ; double HSMHV2_cgdo ; double HSMHV2_js0 ; double HSMHV2_js0sw ; double HSMHV2_nj ; double HSMHV2_cisbk ; double HSMHV2_clm1 ; double HSMHV2_clm2 ; double HSMHV2_clm3 ; double HSMHV2_wfc ; double HSMHV2_gidl1 ; double HSMHV2_gidl2 ; double HSMHV2_gleak1 ; double HSMHV2_gleak2 ; double HSMHV2_gleak3 ; double HSMHV2_gleak6 ; double HSMHV2_glksd1 ; double HSMHV2_glksd2 ; double HSMHV2_glkb1 ; double HSMHV2_glkb2 ; double HSMHV2_nftrp ; double HSMHV2_nfalp ; double HSMHV2_vdiffj ; double HSMHV2_ibpc1 ; double HSMHV2_ibpc2 ; double HSMHV2_cgbo ; double HSMHV2_cvdsover ; double HSMHV2_falph ; double HSMHV2_npext ; double HSMHV2_powrat ; double HSMHV2_rd ; double HSMHV2_rd22 ; double HSMHV2_rd23 ; double HSMHV2_rd24 ; double HSMHV2_rdict1 ; double HSMHV2_rdov13 ; double HSMHV2_rdslp1 ; double HSMHV2_rdvb ; double HSMHV2_rdvd ; double HSMHV2_rdvg11 ; double HSMHV2_rs ; double HSMHV2_rth0 ; double HSMHV2_vover ; /*-----------SHE--------------*/ double HSMHV2_rth ; double HSMHV2_cth ; double HSMHV2_js0d; double HSMHV2_js0swd; double HSMHV2_njd; double HSMHV2_cisbkd; double HSMHV2_vdiffjd; double HSMHV2_js0s; double HSMHV2_js0sws; double HSMHV2_njs; double HSMHV2_cisbks; double HSMHV2_vdiffjs; /*-----------------------------*/ } HSMHV2binningParam ; /* unit-converted parameters for each instance */ typedef struct sHSMHV2hereMKSParam { double HSMHV2_vmax ; double HSMHV2_subld2 ; double HSMHV2_ndep ; double HSMHV2_ninv ; double HSMHV2_nsubc ; double HSMHV2_nsubcdfm ; double HSMHV2_nsubp ; double HSMHV2_nsubpsti1 ; double HSMHV2_muesti1 ; double HSMHV2_nsti ; double HSMHV2_npext ; double HSMHV2_nover ; double HSMHV2_novers ; double HSMHV2_wfc ; double HSMHV2_glksd1 ; double HSMHV2_glksd2 ; double HSMHV2_gleak2 ; double HSMHV2_glkb2 ; double HSMHV2_fn2 ; double HSMHV2_gidl1 ; double HSMHV2_gidl2 ; double HSMHV2_nfalp ; double HSMHV2_nftrp ; } HSMHV2hereMKSParam ; /* information needed for each instance */ typedef struct sHSMHV2instance { struct GENinstance gen; #define HSMHV2modPtr(inst) ((struct sHSMHV2model *)((inst)->gen.GENmodPtr)) #define HSMHV2nextInstance(inst) ((struct sHSMHV2instance *)((inst)->gen.GENnextInstance)) #define HSMHV2name gen.GENname #define HSMHV2states gen.GENstate const int HSMHV2dNode; /* number of the drain node of the mosfet */ const int HSMHV2gNode; /* number of the gate node of the mosfet */ const int HSMHV2sNode; /* number of the source node of the mosfet */ const int HSMHV2bNode; /* number of the bulk node of the mosfet */ const int HSMHV2subNodeExt; /* number of the substrate node */ const int HSMHV2tempNodeExt;/* number of the temp node----------SHE--------*/ int HSMHV2subNode; /* number of the substrate node */ int HSMHV2tempNode; /* number of the temp node */ int HSMHV2dNodePrime; /* number od the inner drain node */ int HSMHV2gNodePrime; /* number of the inner gate node */ int HSMHV2sNodePrime; /* number od the inner source node */ int HSMHV2bNodePrime; int HSMHV2dbNode; int HSMHV2sbNode; int HSMHV2qiNode; /* number of the qi node in case of NQS */ int HSMHV2qbNode; /* number of the qb node in case of NQS */ double HSMHV2_noiflick; /* for 1/f noise calc. */ double HSMHV2_noithrml; /* for thrmal noise calc. */ double HSMHV2_noiigate; /* for induced gate noise */ double HSMHV2_noicross; /* for induced gate noise */ /* instance */ int HSMHV2_coselfheat; /* Self-heating model */ int HSMHV2_cosubnode; /* switch tempNode to subNode */ double HSMHV2_l; /* the length of the channel region */ double HSMHV2_w; /* the width of the channel region */ double HSMHV2_ad; /* the area of the drain diffusion */ double HSMHV2_as; /* the area of the source diffusion */ double HSMHV2_pd; /* perimeter of drain junction [m] */ double HSMHV2_ps; /* perimeter of source junction [m] */ double HSMHV2_nrd; /* equivalent num of squares of drain [-] (unused) */ double HSMHV2_nrs; /* equivalent num of squares of source [-] (unused) */ double HSMHV2_dtemp; double HSMHV2_weff; /* the effective width of the channel region */ double HSMHV2_weff_ld; /* the effective width of the drift region */ double HSMHV2_weff_cv; /* the effective width of the drift region for capacitance */ double HSMHV2_weff_nf; /* Weff * NF */ double HSMHV2_weffcv_nf; /* Weffcv * NF */ double HSMHV2_leff; /* the effective length of the channel region */ int HSMHV2_corbnet ; double HSMHV2_rbpb ; double HSMHV2_rbpd ; double HSMHV2_rbps ; double HSMHV2_rbdb ; double HSMHV2_rbsb ; int HSMHV2_corg ; double HSMHV2_ngcon; double HSMHV2_xgw; double HSMHV2_xgl; double HSMHV2_nf; double HSMHV2_sa; double HSMHV2_sb; double HSMHV2_sd; double HSMHV2_nsubcdfm; double HSMHV2_m; double HSMHV2_subld1; double HSMHV2_subld2; double HSMHV2_lover; double HSMHV2_lovers; double HSMHV2_loverld; double HSMHV2_ldrift1; double HSMHV2_ldrift2; double HSMHV2_ldrift1s; double HSMHV2_ldrift2s; int HSMHV2_called; /* flag to check the first call */ /* previous values to evaluate initial guess */ double HSMHV2_mode_prv; double HSMHV2_vbsc_prv; double HSMHV2_vdsc_prv; double HSMHV2_vgsc_prv; double HSMHV2_ps0_prv; double HSMHV2_ps0_dvbs_prv; double HSMHV2_ps0_dvds_prv; double HSMHV2_ps0_dvgs_prv; double HSMHV2_ps0_dtemp_prv; double HSMHV2_pds_prv; double HSMHV2_pds_dvbs_prv; double HSMHV2_pds_dvds_prv; double HSMHV2_pds_dvgs_prv; double HSMHV2_pds_dtemp_prv; /* double HSMHV2_ids_prv; not used */ /* double HSMHV2_ids_dvbs_prv; not used */ /* double HSMHV2_ids_dvds_prv; not used */ /* double HSMHV2_ids_dvgs_prv; not used */ /* double HSMHV2_ids_dtemp_prv; not used */ double HSMHV2_mode_prv2; double HSMHV2_vbsc_prv2; double HSMHV2_vdsc_prv2; double HSMHV2_vgsc_prv2; double HSMHV2_ps0_prv2; /* assigned but not used */ double HSMHV2_ps0_dvbs_prv2; double HSMHV2_ps0_dvds_prv2; double HSMHV2_ps0_dvgs_prv2; double HSMHV2_pds_prv2; /* assigned but not used */ double HSMHV2_pds_dvbs_prv2; double HSMHV2_pds_dvds_prv2; double HSMHV2_pds_dvgs_prv2; double HSMHV2_temp_prv; /* double HSMHV2_time; /\* for debug print *\/ */ /* output */ /* int HSMHV2_capop; not used */ /* double HSMHV2_gd; not used */ /* double HSMHV2_gs; not used */ double HSMHV2_cgso; /* can be made local */ double HSMHV2_cgdo; double HSMHV2_cgbo; double HSMHV2_cggo; double HSMHV2_cdso; /* can be made local */ double HSMHV2_cddo; double HSMHV2_cdgo; double HSMHV2_cdbo; double HSMHV2_csso; /* can be made local */ double HSMHV2_csdo; /* can be made local */ double HSMHV2_csgo; /* can be made local */ double HSMHV2_csbo; /* can be made local */ double HSMHV2_cbdo; double HSMHV2_cbgo; double HSMHV2_cbbo; /* double HSMHV2_cqyd; not used */ /* double HSMHV2_cqyg; not used */ /* double HSMHV2_cqyb; not used */ double HSMHV2_von; /* vth */ double HSMHV2_vdsat; /* double HSMHV2_capgs; not used */ /* double HSMHV2_capgd; not used */ /* double HSMHV2_capgb; not used */ /* double HSMHV2_rth0; not used */ /* double HSMHV2_cth0; not used */ /* double HSMHV2_cth; not used */ #define XDIM 14 double HSMHV2_ydc_d[XDIM], HSMHV2_ydc_dP[XDIM], HSMHV2_ydc_g[XDIM], HSMHV2_ydc_gP[XDIM], HSMHV2_ydc_s[XDIM], HSMHV2_ydc_sP[XDIM], HSMHV2_ydc_bP[XDIM], HSMHV2_ydc_b[XDIM], HSMHV2_ydc_db[XDIM], HSMHV2_ydc_sb[XDIM], HSMHV2_ydc_t[XDIM], HSMHV2_ydc_qi[XDIM], HSMHV2_ydc_qb[XDIM]; double HSMHV2_ydyn_d[XDIM], HSMHV2_ydyn_dP[XDIM], HSMHV2_ydyn_g[XDIM], HSMHV2_ydyn_gP[XDIM], HSMHV2_ydyn_s[XDIM], HSMHV2_ydyn_sP[XDIM], HSMHV2_ydyn_bP[XDIM], HSMHV2_ydyn_b[XDIM], HSMHV2_ydyn_db[XDIM], HSMHV2_ydyn_sb[XDIM], HSMHV2_ydyn_t[XDIM], HSMHV2_ydyn_qi[XDIM], HSMHV2_ydyn_qb[XDIM]; /* resistances */ double HSMHV2_Rd ; /* different from HSMHV2_rd */ double HSMHV2_dRd_dVdse ; double HSMHV2_dRd_dVgse ; double HSMHV2_dRd_dVbse ; double HSMHV2_dRd_dVddp ; double HSMHV2_dRd_dVsubs ; double HSMHV2_dRd_dTi ; double HSMHV2_dRd_dVds ; double HSMHV2_dRd_dVgs ; double HSMHV2_dRd_dVbs ; double HSMHV2_Rs ; /* different from HSMHV2_rs */ double HSMHV2_dRs_dVdse ; double HSMHV2_dRs_dVgse ; double HSMHV2_dRs_dVbse ; double HSMHV2_dRs_dVsubs ; double HSMHV2_dRs_dTi ; /* drain current */ double HSMHV2_ids; double HSMHV2_gds; /* used for printout, but not loaded */ double HSMHV2_gm; /* used for printout, but not loaded */ double HSMHV2_gmbs; /* used for printout, but not loaded */ double HSMHV2_dIds_dVdse ; double HSMHV2_dIds_dVgse ; double HSMHV2_dIds_dVbse ; double HSMHV2_dIds_dVdsi ; double HSMHV2_dIds_dVgsi ; double HSMHV2_dIds_dVbsi ; double HSMHV2_dIds_dTi ; /* substrate current */ double HSMHV2_isub; /* double HSMHV2_gbgs; not used */ /* double HSMHV2_gbds; not used */ /* double HSMHV2_gbbs; not used */ double HSMHV2_dIsub_dVdsi ; double HSMHV2_dIsub_dVgsi ; double HSMHV2_dIsub_dVbsi ; double HSMHV2_dIsub_dTi ; double HSMHV2_isubld; double HSMHV2_dIsubLD_dVdsi ; double HSMHV2_dIsubLD_dVgsi ; double HSMHV2_dIsubLD_dVbsi ; double HSMHV2_dIsubLD_dTi ; double HSMHV2_dIsubLD_dVddp ; double HSMHV2_idsibpc; double HSMHV2_dIdsIBPC_dVdsi ; double HSMHV2_dIdsIBPC_dVgsi ; double HSMHV2_dIdsIBPC_dVbsi ; double HSMHV2_dIdsIBPC_dTi ; double HSMHV2_dIdsIBPC_dVddp ; /* gidl and gisl current */ double HSMHV2_igidl; /* gate induced drain leakage */ /* double HSMHV2_gigidlgs; not used */ /* double HSMHV2_gigidlds; not used */ /* double HSMHV2_gigidlbs; not used */ double HSMHV2_dIgidl_dVdsi ; double HSMHV2_dIgidl_dVgsi ; double HSMHV2_dIgidl_dVbsi ; double HSMHV2_dIgidl_dTi ; double HSMHV2_igisl; /* gate induced source leakage */ /* double HSMHV2_gigislgd; not used */ /* double HSMHV2_gigislsd; not used */ /* double HSMHV2_gigislbd; not used */ double HSMHV2_dIgisl_dVdsi ; double HSMHV2_dIgisl_dVgsi ; double HSMHV2_dIgisl_dVbsi ; double HSMHV2_dIgisl_dTi ; /* gate leakage currents */ double HSMHV2_igb; /* gate tunneling current (gate to bulk) */ /* double HSMHV2_gigbg; not used */ /* double HSMHV2_gigbd; not used */ /* double HSMHV2_gigbb; not used */ /* double HSMHV2_gigbs; not used */ double HSMHV2_dIgb_dVdsi ; double HSMHV2_dIgb_dVgsi ; double HSMHV2_dIgb_dVbsi ; double HSMHV2_dIgb_dTi ; double HSMHV2_igd; /* gate tunneling current (gate to drain) */ /* double HSMHV2_gigdg; not used */ /* double HSMHV2_gigdd; not used */ /* double HSMHV2_gigdb; not used */ /* double HSMHV2_gigds; not used */ double HSMHV2_dIgd_dVdsi ; double HSMHV2_dIgd_dVgsi ; double HSMHV2_dIgd_dVbsi ; double HSMHV2_dIgd_dTi ; double HSMHV2_igs; /* gate tunneling current (gate to source) */ /* double HSMHV2_gigsg; not used */ /* double HSMHV2_gigsd; not used */ /* double HSMHV2_gigsb; not used */ /* double HSMHV2_gigss; not used */ double HSMHV2_dIgs_dVdsi ; double HSMHV2_dIgs_dVgsi ; double HSMHV2_dIgs_dVbsi ; double HSMHV2_dIgs_dTi ; /* charges */ double HSMHV2_qd; double HSMHV2_cdgb; /* used for printout, but not loaded */ /* double HSMHV2_cddb; not used */ /* double HSMHV2_cdsb; not used */ /* double HSMHV2cdT; not used */ double HSMHV2_dQdi_dVdsi ; double HSMHV2_dQdi_dVgsi ; double HSMHV2_dQdi_dVbsi ; double HSMHV2_dQdi_dTi ; double HSMHV2_qg; double HSMHV2_cggb; /* used for printout, but not loaded */ double HSMHV2_cgdb; /* used for printout, but not loaded */ double HSMHV2_cgsb; /* used for printout, but not loaded */ /* double HSMHV2cgT; not used */ double HSMHV2_dQg_dVdsi ; double HSMHV2_dQg_dVgsi ; double HSMHV2_dQg_dVbsi ; double HSMHV2_dQg_dTi ; double HSMHV2_qs; double HSMHV2_dQsi_dVdsi ; double HSMHV2_dQsi_dVgsi ; double HSMHV2_dQsi_dVbsi ; double HSMHV2_dQsi_dTi ; double HSMHV2_qb; /* bulk charge qb = -(qg + qd + qs) */ double HSMHV2_cbgb; /* used for printout, but not loaded */ /* double HSMHV2_cbdb; not used */ /* double HSMHV2_cbsb; not used */ /* double HSMHV2cbT; not used */ double HSMHV2_dQb_dVdsi ; /* Qb: bulk charge inclusive overlaps, Qbulk: bulk charge without overlaps (see above) */ double HSMHV2_dQb_dVgsi ; double HSMHV2_dQb_dVbsi ; double HSMHV2_dQb_dTi ; /* outer charges (fringing etc.) */ double HSMHV2_qdp ; double HSMHV2_dqdp_dVdse ; double HSMHV2_dqdp_dVgse ; double HSMHV2_dqdp_dVbse ; double HSMHV2_dqdp_dTi ; double HSMHV2_qsp ; double HSMHV2_dqsp_dVdse ; double HSMHV2_dqsp_dVgse ; double HSMHV2_dqsp_dVbse ; double HSMHV2_dqsp_dTi ; double HSMHV2_qgext ; double HSMHV2_dQgext_dVdse ; double HSMHV2_dQgext_dVgse ; double HSMHV2_dQgext_dVbse ; double HSMHV2_dQgext_dTi ; double HSMHV2_qdext ; double HSMHV2_dQdext_dVdse ; double HSMHV2_dQdext_dVgse ; double HSMHV2_dQdext_dVbse ; double HSMHV2_dQdext_dTi ; double HSMHV2_qbext ; double HSMHV2_dQbext_dVdse ; double HSMHV2_dQbext_dVgse ; double HSMHV2_dQbext_dVbse ; double HSMHV2_dQbext_dTi ; double HSMHV2_qsext ; double HSMHV2_dQsext_dVdse ; double HSMHV2_dQsext_dVgse ; double HSMHV2_dQsext_dVbse ; double HSMHV2_dQsext_dTi ; /* junctions */ double HSMHV2_ibd; double HSMHV2_gbd; double HSMHV2_gbdT; double HSMHV2_ibs; double HSMHV2_gbs; double HSMHV2_gbsT; double HSMHV2_qbd; double HSMHV2_capbd; double HSMHV2_gcbdT; double HSMHV2_qbs; double HSMHV2_capbs; double HSMHV2_gcbsT; /* double HSMHV2_gtempg; not used */ /* double HSMHV2_gtempt; not used */ /* double HSMHV2_gtempd; not used */ /* double HSMHV2_gtempb; not used */ /* double HSMHV2_gmt; not used */ /* double HSMHV2_isubt; not used */ /* NQS */ double HSMHV2_tau ; double HSMHV2_tau_dVgsi ; double HSMHV2_tau_dVdsi ; double HSMHV2_tau_dVbsi ; double HSMHV2_tau_dTi ; double HSMHV2_Xd ; double HSMHV2_Xd_dVgsi ; double HSMHV2_Xd_dVdsi ; double HSMHV2_Xd_dVbsi ; double HSMHV2_Xd_dTi ; double HSMHV2_Qi ; double HSMHV2_Qi_dVgsi ; double HSMHV2_Qi_dVdsi ; double HSMHV2_Qi_dVbsi ; double HSMHV2_Qi_dTi ; double HSMHV2_taub ; double HSMHV2_taub_dVgsi ; double HSMHV2_taub_dVdsi ; double HSMHV2_taub_dVbsi ; double HSMHV2_taub_dTi ; double HSMHV2_Qbulk ; /* Qbulk: without overlaps, Qb: inclusive overlaps (see below) */ double HSMHV2_Qbulk_dVgsi ; double HSMHV2_Qbulk_dVdsi ; double HSMHV2_Qbulk_dVbsi ; double HSMHV2_Qbulk_dTi ; /* internal variables */ double HSMHV2_exptempd ; double HSMHV2_exptemps ; double HSMHV2_jd_nvtm_invd ; double HSMHV2_jd_nvtm_invs ; double HSMHV2_eg ; double HSMHV2_beta ; double HSMHV2_beta_inv ; double HSMHV2_beta2 ; double HSMHV2_betatnom ; double HSMHV2_nin ; double HSMHV2_egp12 ; double HSMHV2_egp32 ; double HSMHV2_lgate ; double HSMHV2_wg ; double HSMHV2_mueph ; double HSMHV2_mphn0 ; double HSMHV2_depmphn0 ; double HSMHV2_mphn1 ; double HSMHV2_depmphn1 ; double HSMHV2_muesr ; double HSMHV2_rdvd ; double HSMHV2_rsvd ; /* for the reverse mode */ double HSMHV2_rd23 ; double HSMHV2_ninvd ; double HSMHV2_ninvd0 ; double HSMHV2_nsub ; double HSMHV2_qnsub ; double HSMHV2_qnsub_esi ; double HSMHV2_2qnsub_esi ; double HSMHV2_ptovr0 ; double HSMHV2_ptovr ; double HSMHV2_vmax0 ; double HSMHV2_vmax ; double HSMHV2_pb2 ; double HSMHV2_pb20 ; double HSMHV2_pb2c ; double HSMHV2_cnst0 ; double HSMHV2_cnst1 ; double HSMHV2_isbd ; double HSMHV2_isbd2 ; double HSMHV2_isbs ; double HSMHV2_isbs2 ; double HSMHV2_vbdt ; double HSMHV2_vbst ; double HSMHV2_wsti ; double HSMHV2_cnstpgd ; /* double HSMHV2_ninvp0 ; not used */ /* double HSMHV2_ninv0 ; not used */ double HSMHV2_grbpb ; double HSMHV2_grbpd ; double HSMHV2_grbps ; double HSMHV2_grg ; double HSMHV2_rs ; double HSMHV2_rs0 ; double HSMHV2_rd ; double HSMHV2_rd0 ; double HSMHV2_rdtemp0 ; double HSMHV2_clmmod ; double HSMHV2_lgatesm ; double HSMHV2_dVthsm ; double HSMHV2_ddlt ; double HSMHV2_xsub1 ; double HSMHV2_xsub2 ; double HSMHV2_ibpc1 ; double HSMHV2_xgate ; double HSMHV2_xvbs ; double HSMHV2_vg2const ; double HSMHV2_wdpl ; double HSMHV2_wdplp ; double HSMHV2_cfrng ; double HSMHV2_jd_expcd ; double HSMHV2_jd_expcs ; double HSMHV2_sqrt_eg ; double HSMHV2_egtnom ; double HSMHV2_cecox ; double HSMHV2_msc ; int HSMHV2_flg_pgd ; double HSMHV2_ndep_o_esi ; double HSMHV2_ninv_o_esi ; double HSMHV2_cqyb0 ; double HSMHV2_cnst0over ; double HSMHV2_cnst0overs ; double HSMHV2_costi00 ; double HSMHV2_nsti_p2 ; double HSMHV2_costi0 ; double HSMHV2_costi0_p2 ; double HSMHV2_costi1 ; double HSMHV2_ptl0; double HSMHV2_pt40; double HSMHV2_gdl0; double HSMHV2_rdvdtemp0 ; double HSMHV2_rthtemp0 ; double HSMHV2_powratio ; double HSMHV2_rdrmue ; double HSMHV2_rdrvmax ; double HSMHV2_depvmax ; double HSMHV2_rdrcx ; double HSMHV2_rdrcar ; double HSMHV2_xpdv ; double HSMHV2_Ps0LD ; double HSMHV2_Ps0LD_dVds ; double HSMHV2_Ps0LD_dVgs ; double HSMHV2_Ps0LD_dVbs ; double HSMHV2_Ps0LD_dTi ; double HSMHV2_QbuLD ; double HSMHV2_QbuLD_dVds ; double HSMHV2_QbuLD_dVgs ; double HSMHV2_QbuLD_dVbs ; double HSMHV2_QbuLD_dTi ; double HSMHV2_kjunc ; double HSMHV2_kdep ; double HSMHV2_Xmax ; double HSMHV2_rdrcxw ; double HSMHV2_rdrvmaxw ; double HSMHV2_rdrvmaxl ; double HSMHV2_rdrmuel ; double HSMHV2_mueph1 ; double HSMHV2_nsubp; double HSMHV2_nsubc; double HSMHV2_Tratio; double HSMHV2_ndepm ; double HSMHV2_Pb2n ; double HSMHV2_Vbipn ; double HSMHV2_rdrbb ; int HSMHV2_cordrift ; double HSMHV2_Vdserevz ; double HSMHV2_Vdserevz_dVd ; double HSMHV2_Vsubsrev ; HSMHV2hereMKSParam hereMKS ; /* unit-converted parameters */ HSMHV2binningParam pParam ; /* binning parameters */ /* no use in SPICE3f5 double HSMHV2drainSquares; the length of the drain in squares double HSMHV2sourceSquares; the length of the source in squares */ double HSMHV2sourceConductance; /* cond. of source (or 0): set in setup */ double HSMHV2drainConductance; /* cond. of drain (or 0): set in setup */ double HSMHV2_icVBS; /* initial condition B-S voltage */ double HSMHV2_icVDS; /* initial condition D-S voltage */ double HSMHV2_icVGS; /* initial condition G-S voltage */ int HSMHV2_off; /* non-zero to indicate device is off for dc analysis */ int HSMHV2_mode; /* device mode : 1 = normal, -1 = inverse */ unsigned HSMHV2_coselfheat_Given :1; unsigned HSMHV2_cosubnode_Given :1; unsigned HSMHV2_l_Given :1; unsigned HSMHV2_w_Given :1; unsigned HSMHV2_ad_Given :1; unsigned HSMHV2_as_Given :1; unsigned HSMHV2_pd_Given :1; unsigned HSMHV2_ps_Given :1; unsigned HSMHV2_nrd_Given :1; unsigned HSMHV2_nrs_Given :1; unsigned HSMHV2_dtemp_Given :1; unsigned HSMHV2_icVBS_Given :1; unsigned HSMHV2_icVDS_Given :1; unsigned HSMHV2_icVGS_Given :1; unsigned HSMHV2_corbnet_Given :1; unsigned HSMHV2_rbpb_Given :1; unsigned HSMHV2_rbpd_Given :1; unsigned HSMHV2_rbps_Given :1; unsigned HSMHV2_rbdb_Given :1; unsigned HSMHV2_rbsb_Given :1; unsigned HSMHV2_corg_Given :1; unsigned HSMHV2_ngcon_Given :1; unsigned HSMHV2_xgw_Given :1; unsigned HSMHV2_xgl_Given :1; unsigned HSMHV2_nf_Given :1; unsigned HSMHV2_sa_Given :1; unsigned HSMHV2_sb_Given :1; unsigned HSMHV2_sd_Given :1; unsigned HSMHV2_nsubcdfm_Given :1; unsigned HSMHV2_m_Given :1; unsigned HSMHV2_subld1_Given :1; unsigned HSMHV2_subld2_Given :1; unsigned HSMHV2_lover_Given :1; unsigned HSMHV2_lovers_Given :1; unsigned HSMHV2_loverld_Given :1; unsigned HSMHV2_ldrift1_Given :1; unsigned HSMHV2_ldrift2_Given :1; unsigned HSMHV2_ldrift1s_Given :1; unsigned HSMHV2_ldrift2s_Given :1; /* unsigned HSMHV2_rth0_Given :1; not used */ /* unsigned HSMHV2_cth0_Given :1; not used */ /* pointers to sparse matrix */ double *HSMHV2GgPtr; /* pointer to sparse matrix element at (gate node,gate node) */ double *HSMHV2GgpPtr; /* pointer to sparse matrix element at (gate node,gate prime node) */ /* double *HSMHV2GdpPtr; not used */ /* double *HSMHV2GspPtr; not used */ /* double *HSMHV2GbpPtr; not used */ double *HSMHV2GPgPtr; /* pointer to sparse matrix element at (gate prime node,gate node) */ double *HSMHV2GPgpPtr; /* pointer to sparse matrix element at (gate prime node,gate prime node) */ double *HSMHV2GPdpPtr; /* pointer to sparse matrix element at (gate prime node,drain prime node) */ double *HSMHV2GPspPtr; /* pointer to sparse matrix element at (gate prime node,source prime node) */ double *HSMHV2GPbpPtr; /* pointer to sparse matrix element at (gate prime node,bulk prime node) */ double *HSMHV2DPdPtr; /* pointer to sparse matrix element at (drain prime node,drain node) */ double *HSMHV2DPdpPtr; /* pointer to sparse matrix element at (drain prime node,drain prime node) */ double *HSMHV2DPgpPtr; /* pointer to sparse matrix element at (drain prime node,gate prime node) */ double *HSMHV2DPspPtr; /* pointer to sparse matrix element at (drain prime node,source prime node) */ double *HSMHV2DPbpPtr; /* pointer to sparse matrix element at (drain prime node,bulk prime node) */ double *HSMHV2DdPtr; /* pointer to sparse matrix element at (Drain node,drain node) */ double *HSMHV2DdpPtr; /* pointer to sparse matrix element at (drain node,drain prime node) */ double *HSMHV2DspPtr; /* pointer to sparse matrix element at (drain node,source prime node) */ double *HSMHV2DdbPtr; /* pointer to sparse matrix element at (drain node,drain body node) */ double *HSMHV2SPsPtr; /* pointer to sparse matrix element at (source prime node,source node) */ double *HSMHV2SPspPtr; /* pointer to sparse matrix element at (source prime node,source prime node) */ double *HSMHV2SPgpPtr; /* pointer to sparse matrix element at (source prime node,gate prime node) */ double *HSMHV2SPdpPtr; /* pointer to sparse matrix element at (source prime node,drain prime node) */ double *HSMHV2SPbpPtr; /* pointer to sparse matrix element at (source prime node,bulk prime node) */ double *HSMHV2SsPtr; /* pointer to sparse matrix element at (source node,source node) */ double *HSMHV2SspPtr; /* pointer to sparse matrix element at (source node,source prime node) */ double *HSMHV2SdpPtr; /* pointer to sparse matrix element at (source node,drain prime node) */ double *HSMHV2SsbPtr; /* pointer to sparse matrix element at (source node,source body node) */ double *HSMHV2BPgpPtr; /* pointer to sparse matrix element at (bulk prime node,gate prime node) */ double *HSMHV2BPbpPtr; /* pointer to sparse matrix element at (bulk prime node,bulk prime node) */ double *HSMHV2BPdPtr; /* pointer to sparse matrix element at (bulk prime node,drain node) */ double *HSMHV2BPdpPtr; /* pointer to sparse matrix element at (bulk prime node,drain prime node) */ double *HSMHV2BPspPtr; /* pointer to sparse matrix element at (bulk prime node,source prime node) */ double *HSMHV2BPsPtr; /* pointer to sparse matrix element at (bulk prime node,source node) */ double *HSMHV2BPbPtr; /* pointer to sparse matrix element at (bulk prime node,bulk node) */ double *HSMHV2BPdbPtr; /* pointer to sparse matrix element at (bulk prime node,source body node) */ double *HSMHV2BPsbPtr; /* pointer to sparse matrix element at (bulk prime node,source body node) */ double *HSMHV2DBdPtr; /* pointer to sparse matrix element at (drain body node,drain node) */ double *HSMHV2DBdbPtr; /* pointer to sparse matrix element at (drain body node,drain body node) */ double *HSMHV2DBbpPtr; /* pointer to sparse matrix element at (drain body node,bulk prime node) */ /* double *HSMHV2DBbPtr; not used */ double *HSMHV2SBsPtr; /* pointer to sparse matrix element at (source body node,source node) */ double *HSMHV2SBbpPtr; /* pointer to sparse matrix element at (source body node,bulk prime node) */ /* double *HSMHV2SBbPtr; not used */ double *HSMHV2SBsbPtr; /* pointer to sparse matrix element at (source body node,source body node) */ /* double *HSMHV2BsbPtr; not used */ double *HSMHV2BbpPtr; /* pointer to sparse matrix element at (bulk node,bulk prime node) */ /* double *HSMHV2BdbPtr; not used */ double *HSMHV2BbPtr; /* pointer to sparse matrix element at (bulk node,bulk node) */ double *HSMHV2TemptempPtr; /* pointer to sparse matrix element at (temp node, temp node) */ double *HSMHV2TempdPtr; /* pointer to sparse matrix element at (temp node, drain node) */ double *HSMHV2TempdpPtr; /* pointer to sparse matrix element at (temp node, drain prime node) */ double *HSMHV2TempsPtr; /* pointer to sparse matrix element at (temp node, source node) */ double *HSMHV2TempspPtr; /* pointer to sparse matrix element at (temp node, source prime node) */ /* double *HSMHV2TempgPtr; not used */ double *HSMHV2TempgpPtr; /* pointer to sparse matrix element at (temp node, gate prime node) */ /* double *HSMHV2TempbPtr; not used */ double *HSMHV2TempbpPtr; /* pointer to sparse matrix element at (temp node, bulk prime node) */ /* double *HSMHV2GtempPtr; not used */ double *HSMHV2GPtempPtr; /* pointer to sparse matrix element at (gate prime node, temp node) */ double *HSMHV2DPtempPtr; /* pointer to sparse matrix element at (drain prime node, temp node) */ double *HSMHV2SPtempPtr; /* pointer to sparse matrix element at (source prime node, temp node) */ /* double *HSMHV2BtempPtr; not used */ double *HSMHV2BPtempPtr; /* pointer to sparse matrix element at (bulk prime node, temp node) */ double *HSMHV2DBtempPtr; /* pointer to sparse matrix element at (drain bulk node, temp node) */ double *HSMHV2SBtempPtr; /* pointer to sparse matrix element at (source bulk node, temp node) */ double *HSMHV2DgpPtr; /* pointer to sparse matrix element at (drain node, gate prime node) */ double *HSMHV2DsPtr; /* pointer to sparse matrix element at (drain node, source node) */ double *HSMHV2DbpPtr; /* pointer to sparse matrix element at (drain node, bulk prime node) */ double *HSMHV2DtempPtr; /* pointer to sparse matrix element at (drain node, temp node) */ double *HSMHV2DPsPtr; /* pointer to sparse matrix element at (drain prime node, source node) */ double *HSMHV2GPdPtr; /* pointer to sparse matrix element at (gate prime node, drain node) */ double *HSMHV2GPsPtr; /* pointer to sparse matrix element at (gate prime node, source node) */ double *HSMHV2SdPtr; /* pointer to sparse matrix element at (source node, drain node) */ double *HSMHV2SgpPtr; /* pointer to sparse matrix element at (source node, gate prime node) */ double *HSMHV2SbpPtr; /* pointer to sparse matrix element at (source node, bulk prime node) */ double *HSMHV2StempPtr; /* pointer to sparse matrix element at (source node, temp node) */ double *HSMHV2SPdPtr; /* pointer to sparse matrix element at (source prime node, drain node) */ /* nqs related pointers */ double *HSMHV2DPqiPtr; /* pointer to sparse matrix element at (drain prime node, qi_nqs node) */ double *HSMHV2GPqiPtr; /* pointer to sparse matrix element at (gate prime node, qi_nqs node) */ double *HSMHV2GPqbPtr; /* pointer to sparse matrix element at (gate prime node, qb_nqs node) */ double *HSMHV2SPqiPtr; /* pointer to sparse matrix element at (source prime node, qi_nqs node) */ double *HSMHV2BPqbPtr; /* pointer to sparse matrix element at (bulk prime node, qb_nqs node) */ double *HSMHV2QIdpPtr; /* pointer to sparse matrix element at (qi_nqs node, drain prime node) */ double *HSMHV2QIgpPtr; /* pointer to sparse matrix element at (qi_nqs node, gate prime node) */ double *HSMHV2QIspPtr; /* pointer to sparse matrix element at (qi_nqs node, source prime node) */ double *HSMHV2QIbpPtr; /* pointer to sparse matrix element at (qi_nqs node, bulk prime node) */ double *HSMHV2QIqiPtr; /* pointer to sparse matrix element at (qi_nqs node, qi_nqs node) */ double *HSMHV2QBdpPtr; /* pointer to sparse matrix element at (qb_nqs node, drain prime node) */ double *HSMHV2QBgpPtr; /* pointer to sparse matrix element at (qb_nqs node, gate prime node) */ double *HSMHV2QBspPtr; /* pointer to sparse matrix element at (qb_nqs node, source prime node) */ double *HSMHV2QBbpPtr; /* pointer to sparse matrix element at (qb_nqs node, bulk prime node) */ double *HSMHV2QBqbPtr; /* pointer to sparse matrix element at (qb_nqs node, qb_nqs node) */ double *HSMHV2QItempPtr; /* pointer to sparse matrix element at (qi_nqs node, temp node) */ double *HSMHV2QBtempPtr; /* pointer to sparse matrix element at (qb_nqs node, temp node) */ /* Substrate effect related pointers */ double *HSMHV2DsubPtr; /* pointer to sparse matrix element at (drain node, substrate node) */ double *HSMHV2DPsubPtr; /* pointer to sparse matrix element at (drain prime node, substrate node) */ double *HSMHV2SsubPtr; /* pointer to sparse matrix element at (source node, substrate node) */ double *HSMHV2SPsubPtr; /* pointer to sparse matrix element at (source prime node, substrate node) */ /* common state values in hisim module */ #define HSMHV2vbd HSMHV2states+ 0 #define HSMHV2vbs HSMHV2states+ 1 #define HSMHV2vgs HSMHV2states+ 2 #define HSMHV2vds HSMHV2states+ 3 #define HSMHV2vdbs HSMHV2states+ 4 #define HSMHV2vdbd HSMHV2states+ 5 #define HSMHV2vsbs HSMHV2states+ 6 #define HSMHV2vges HSMHV2states+ 7 #define HSMHV2vsubs HSMHV2states+ 8 /* substrate bias */ #define HSMHV2deltemp HSMHV2states+ 9 #define HSMHV2vdse HSMHV2states+ 10 #define HSMHV2vgse HSMHV2states+ 11 #define HSMHV2vbse HSMHV2states+ 12 #define HSMHV2qb HSMHV2states+ 13 #define HSMHV2cqb HSMHV2states+ 14 #define HSMHV2qg HSMHV2states+ 15 #define HSMHV2cqg HSMHV2states+ 16 #define HSMHV2qd HSMHV2states+ 17 #define HSMHV2cqd HSMHV2states+ 18 #define HSMHV2qbs HSMHV2states+ 19 #define HSMHV2cqbs HSMHV2states+ 20 #define HSMHV2qbd HSMHV2states+ 21 #define HSMHV2cqbd HSMHV2states+ 22 #define HSMHV2qth HSMHV2states+ 23 #define HSMHV2cqth HSMHV2states+ 24 /*add fringing capacitance*/ #define HSMHV2qfd HSMHV2states+ 25 #define HSMHV2cqfd HSMHV2states+ 26 #define HSMHV2qfs HSMHV2states+ 27 #define HSMHV2cqfs HSMHV2states+ 28 /*add external drain capacitance*/ #define HSMHV2qdE HSMHV2states+ 29 #define HSMHV2cqdE HSMHV2states+ 30 #define HSMHV2numStates 31 /* nqs charges */ #define HSMHV2qi_nqs HSMHV2states+ 32 #define HSMHV2dotqi_nqs HSMHV2states + 33 #define HSMHV2qb_nqs HSMHV2states+ 34 #define HSMHV2dotqb_nqs HSMHV2states + 35 #define HSMHV2numStatesNqs 36 /* indices to the array of HiSIMHV NOISE SOURCES */ #define HSMHV2RDNOIZ 0 #define HSMHV2RSNOIZ 1 #define HSMHV2IDNOIZ 2 #define HSMHV2FLNOIZ 3 #define HSMHV2IGNOIZ 4 #define HSMHV2TOTNOIZ 5 #define HSMHV2NSRCS 6 /* the number of HiSIMHV MOSFET noise sources */ #ifndef NONOISE double HSMHV2nVar[NSTATVARS][HSMHV2NSRCS]; #else /* NONOISE */ double **HSMHV2nVar; #endif /* NONOISE */ } HSMHV2instance ; /* per model data */ typedef struct sHSMHV2model { /* model structure for a resistor */ struct GENmodel gen; #define HSMHV2modType gen.GENmodType #define HSMHV2nextModel(inst) ((struct sHSMHV2model *)((inst)->gen.GENnextModel)) #define HSMHV2instances(inst) ((HSMHV2instance *)((inst)->gen.GENinstances)) #define HSMHV2modName gen.GENmodName int HSMHV2_type; /* device type: 1 = nmos, -1 = pmos */ int HSMHV2_level; /* level */ int HSMHV2_info; /* information */ int HSMHV2_noise; /* noise model selecter see hsmhvnoi.c */ char *HSMHV2_version; /* model version */ int HSMHV2_show; /* show physical value 1, 2, ... , 11 */ int HSMHV2_corsrd ; int HSMHV2_corg ; int HSMHV2_coiprv ; int HSMHV2_copprv ; int HSMHV2_coadov ; int HSMHV2_coisub ; int HSMHV2_coiigs ; int HSMHV2_cogidl ; int HSMHV2_coovlp ; int HSMHV2_coovlps ; int HSMHV2_coflick ; int HSMHV2_coisti ; int HSMHV2_conqs ; int HSMHV2_corbnet ; int HSMHV2_cothrml; int HSMHV2_coign; /* Induced gate noise */ int HSMHV2_codfm; /* DFM */ int HSMHV2_coqovsm ; int HSMHV2_coselfheat; /* Self-heating model */ int HSMHV2_cosubnode; /* switch tempNode to subNode */ int HSMHV2_cosym; /* Symmetry model for HV */ int HSMHV2_cotemp; int HSMHV2_coldrift; int HSMHV2_cordrift; int HSMHV2_coerrrep; int HSMHV2_codep; int HSMHV2_coddlt; double HSMHV2_vmax ; double HSMHV2_vmaxt1 ; double HSMHV2_vmaxt2 ; double HSMHV2_bgtmp1 ; double HSMHV2_bgtmp2 ; double HSMHV2_eg0 ; double HSMHV2_tox ; double HSMHV2_xld ; double HSMHV2_xldld ; double HSMHV2_xwdld ; double HSMHV2_lover ; double HSMHV2_lovers ; double HSMHV2_rdov11 ; double HSMHV2_rdov12 ; double HSMHV2_rdov13 ; double HSMHV2_rdslp1 ; double HSMHV2_rdict1 ; double HSMHV2_rdslp2 ; double HSMHV2_rdict2 ; double HSMHV2_loverld ; double HSMHV2_ldrift1 ; double HSMHV2_ldrift2 ; double HSMHV2_ldrift1s ; double HSMHV2_ldrift2s ; double HSMHV2_subld1 ; double HSMHV2_subld1l ; double HSMHV2_subld1lp ; double HSMHV2_subld2 ; double HSMHV2_xpdv ; double HSMHV2_xpvdth ; double HSMHV2_xpvdthg ; double HSMHV2_ddltmax ; double HSMHV2_ddltslp ; double HSMHV2_ddltict ; double HSMHV2_vfbover ; double HSMHV2_nover ; double HSMHV2_novers ; double HSMHV2_xwd ; double HSMHV2_xwdc ; double HSMHV2_xl ; double HSMHV2_xw ; double HSMHV2_saref ; double HSMHV2_sbref ; double HSMHV2_ll ; double HSMHV2_lld ; double HSMHV2_lln ; double HSMHV2_wl ; double HSMHV2_wl1 ; double HSMHV2_wl1p ; double HSMHV2_wl2 ; double HSMHV2_wl2p ; double HSMHV2_wld ; double HSMHV2_wln ; double HSMHV2_xqy ; double HSMHV2_xqy1 ; double HSMHV2_xqy2 ; double HSMHV2_rs; /* source contact resistance */ double HSMHV2_rd; /* drain contact resistance */ double HSMHV2_rsh; /* source/drain diffusion sheet resistance */ double HSMHV2_rshg; /* double HSMHV2_ngcon; */ /* double HSMHV2_xgw; */ /* double HSMHV2_xgl; */ /* double HSMHV2_nf; */ double HSMHV2_vfbc ; double HSMHV2_vbi ; double HSMHV2_nsubc ; double HSMHV2_qdftvd ; double HSMHV2_parl2 ; double HSMHV2_lp ; double HSMHV2_nsubp ; double HSMHV2_nsubp0 ; double HSMHV2_nsubwp ; double HSMHV2_scp1 ; double HSMHV2_scp2 ; double HSMHV2_scp3 ; double HSMHV2_sc1 ; double HSMHV2_sc2 ; double HSMHV2_sc3 ; double HSMHV2_sc4 ; double HSMHV2_pgd1 ; double HSMHV2_pgd2 ; //double HSMHV2_pgd3 ; double HSMHV2_pgd4 ; double HSMHV2_ndep ; double HSMHV2_ndepl ; double HSMHV2_ndeplp ; double HSMHV2_ninv ; double HSMHV2_ninvd ; double HSMHV2_ninvdw ; double HSMHV2_ninvdwp ; double HSMHV2_ninvdt1 ; double HSMHV2_ninvdt2 ; double HSMHV2_muecb0 ; double HSMHV2_muecb1 ; double HSMHV2_mueph1 ; double HSMHV2_mueph0 ; double HSMHV2_muephw ; double HSMHV2_muepwp ; double HSMHV2_muephl ; double HSMHV2_mueplp ; double HSMHV2_muephs ; double HSMHV2_muepsp ; double HSMHV2_vtmp ; double HSMHV2_wvth0 ; double HSMHV2_muesr1 ; double HSMHV2_muesr0 ; double HSMHV2_muesrw ; double HSMHV2_mueswp ; double HSMHV2_muesrl ; double HSMHV2_mueslp ; double HSMHV2_bb ; double HSMHV2_sub1 ; double HSMHV2_sub2 ; double HSMHV2_svgs ; double HSMHV2_svbs ; double HSMHV2_svbsl ; double HSMHV2_svds ; double HSMHV2_slg ; double HSMHV2_sub1l ; double HSMHV2_sub2l ; double HSMHV2_fn1 ; double HSMHV2_fn2 ; double HSMHV2_fn3 ; double HSMHV2_fvbs ; double HSMHV2_svgsl ; double HSMHV2_svgslp ; double HSMHV2_svgswp ; double HSMHV2_svgsw ; double HSMHV2_svbslp ; double HSMHV2_slgl ; double HSMHV2_slglp ; double HSMHV2_sub1lp ; double HSMHV2_nsti ; double HSMHV2_wsti ; double HSMHV2_wstil ; double HSMHV2_wstilp ; double HSMHV2_wstiw ; double HSMHV2_wstiwp ; double HSMHV2_scsti1 ; double HSMHV2_scsti2 ; double HSMHV2_vthsti ; double HSMHV2_vdsti ; double HSMHV2_muesti1 ; double HSMHV2_muesti2 ; double HSMHV2_muesti3 ; double HSMHV2_nsubpsti1 ; double HSMHV2_nsubpsti2 ; double HSMHV2_nsubpsti3 ; double HSMHV2_lpext ; double HSMHV2_npext ; double HSMHV2_scp22 ; double HSMHV2_scp21 ; double HSMHV2_bs1 ; double HSMHV2_bs2 ; double HSMHV2_cgso ; double HSMHV2_cgdo ; double HSMHV2_cgbo ; double HSMHV2_tpoly ; double HSMHV2_js0 ; double HSMHV2_js0sw ; double HSMHV2_nj ; double HSMHV2_njsw ; double HSMHV2_xti ; double HSMHV2_cj ; double HSMHV2_cjsw ; double HSMHV2_cjswg ; double HSMHV2_mj ; double HSMHV2_mjsw ; double HSMHV2_mjswg ; double HSMHV2_xti2 ; double HSMHV2_cisb ; double HSMHV2_cvb ; double HSMHV2_ctemp ; double HSMHV2_cisbk ; double HSMHV2_cvbk ; double HSMHV2_divx ; double HSMHV2_pb ; double HSMHV2_pbsw ; double HSMHV2_pbswg ; double HSMHV2_clm1 ; double HSMHV2_clm2 ; double HSMHV2_clm3 ; double HSMHV2_clm5 ; double HSMHV2_clm6 ; double HSMHV2_muetmp ; double HSMHV2_vover ; double HSMHV2_voverp ; double HSMHV2_vovers ; double HSMHV2_voversp ; double HSMHV2_wfc ; double HSMHV2_nsubcw ; double HSMHV2_nsubcwp ; double HSMHV2_qme1 ; double HSMHV2_qme2 ; double HSMHV2_qme3 ; double HSMHV2_gidl1 ; double HSMHV2_gidl2 ; double HSMHV2_gidl3 ; double HSMHV2_gidl4 ; double HSMHV2_gidl5 ; double HSMHV2_gleak1 ; double HSMHV2_gleak2 ; double HSMHV2_gleak3 ; double HSMHV2_gleak4 ; double HSMHV2_gleak5 ; double HSMHV2_gleak6 ; double HSMHV2_gleak7 ; double HSMHV2_glpart1 ; double HSMHV2_glksd1 ; double HSMHV2_glksd2 ; double HSMHV2_glksd3 ; double HSMHV2_glkb1 ; double HSMHV2_glkb2 ; double HSMHV2_glkb3 ; double HSMHV2_egig; double HSMHV2_igtemp2; double HSMHV2_igtemp3; double HSMHV2_vzadd0 ; double HSMHV2_pzadd0 ; double HSMHV2_nftrp ; double HSMHV2_nfalp ; double HSMHV2_cit ; double HSMHV2_falph ; double HSMHV2_kappa ; double HSMHV2_vdiffj ; double HSMHV2_dly1 ; double HSMHV2_dly2 ; double HSMHV2_dly3 ; double HSMHV2_dlyov; double HSMHV2_tnom ; double HSMHV2_ovslp ; double HSMHV2_ovmag ; /* substrate resistances */ double HSMHV2_gbmin; double HSMHV2_rbpb ; double HSMHV2_rbpd ; double HSMHV2_rbps ; double HSMHV2_rbdb ; double HSMHV2_rbsb ; /* IBPC */ double HSMHV2_ibpc1 ; double HSMHV2_ibpc1l ; double HSMHV2_ibpc1lp ; double HSMHV2_ibpc2 ; /* DFM */ double HSMHV2_mphdfm ; double HSMHV2_ptl, HSMHV2_ptp, HSMHV2_pt2, HSMHV2_ptlp, HSMHV2_gdl, HSMHV2_gdlp ; double HSMHV2_gdld ; double HSMHV2_pt4 ; double HSMHV2_pt4p ; double HSMHV2_vbsmin ; double HSMHV2_rdvg11 ; double HSMHV2_rdvg12 ; double HSMHV2_rd20 ; //double HSMHV2_qovsm ; double HSMHV2_ldrift ; double HSMHV2_rd21 ; double HSMHV2_rd22 ; double HSMHV2_rd22d ; double HSMHV2_rd23 ; double HSMHV2_rd24 ; double HSMHV2_rd25 ; double HSMHV2_rdvdl ; double HSMHV2_rdvdlp ; double HSMHV2_rdvds ; double HSMHV2_rdvdsp ; double HSMHV2_rd23l ; double HSMHV2_rd23lp ; double HSMHV2_rd23s ; double HSMHV2_rd23sp ; double HSMHV2_rds ; double HSMHV2_rdsp ; double HSMHV2_rdvd ; double HSMHV2_rdvb ; double HSMHV2_rdvsub ; /* substrate effect */ double HSMHV2_rdvdsub ; /* substrate effect */ double HSMHV2_ddrift ; /* substrate effect */ double HSMHV2_vbisub ; /* substrate effect */ double HSMHV2_nsubsub ; /* substrate effect */ double HSMHV2_rth0 ; double HSMHV2_cth0 ; double HSMHV2_powrat ; double HSMHV2_tcjbd ; double HSMHV2_tcjbs ; double HSMHV2_tcjbdsw ; double HSMHV2_tcjbssw ; double HSMHV2_tcjbdswg ; double HSMHV2_tcjbsswg ; double HSMHV2_rdtemp1 ; double HSMHV2_rdtemp2 ; double HSMHV2_rth0r ; /* heat radiation for SHE */ double HSMHV2_rdvdtemp1 ; double HSMHV2_rdvdtemp2 ; double HSMHV2_rth0w ; double HSMHV2_rth0wp ; double HSMHV2_rth0nf ; double HSMHV2_rthtemp1 ; double HSMHV2_rthtemp2 ; double HSMHV2_prattemp1 ; double HSMHV2_prattemp2 ; double HSMHV2_cvdsover ; double HSMHV2_rdrmue ; double HSMHV2_rdrvmax ; double HSMHV2_rdrmuetmp ; double HSMHV2_ndepm ; double HSMHV2_tndep ; double HSMHV2_depmue0 ; double HSMHV2_depmue1 ; double HSMHV2_depmueback0 ; double HSMHV2_depmueback1 ; double HSMHV2_depvmax ; double HSMHV2_depvdsef1 ; double HSMHV2_depvdsef2 ; double HSMHV2_depmueph0 ; double HSMHV2_depmueph1 ; double HSMHV2_depbb ; double HSMHV2_depleak ; double HSMHV2_depeta ; double HSMHV2_depvtmp ; double HSMHV2_depmuetmp ; double HSMHV2_isbreak ; double HSMHV2_rwell ; double HSMHV2_rdrvtmp ; // double HSMHV2_rdrvmaxt1 ; // double HSMHV2_rdrvmaxt2 ; double HSMHV2_rdrdjunc ; double HSMHV2_rdrcx ; double HSMHV2_rdrcar ; double HSMHV2_rdrdl1 ; double HSMHV2_rdrdl2 ; double HSMHV2_rdrvmaxw ; double HSMHV2_rdrvmaxwp ; double HSMHV2_rdrvmaxl ; double HSMHV2_rdrvmaxlp ; double HSMHV2_rdrmuel ; double HSMHV2_rdrmuelp ; double HSMHV2_qovadd; double HSMHV2_rdrqover ; double HSMHV2_js0d; double HSMHV2_js0swd; double HSMHV2_njd; double HSMHV2_njswd; double HSMHV2_xtid; double HSMHV2_cjd; double HSMHV2_cjswd; double HSMHV2_cjswgd; double HSMHV2_mjd; double HSMHV2_mjswd; double HSMHV2_mjswgd; double HSMHV2_pbd; double HSMHV2_pbswd; double HSMHV2_pbswgd; double HSMHV2_xti2d; double HSMHV2_cisbd; double HSMHV2_cvbd; double HSMHV2_ctempd; double HSMHV2_cisbkd; double HSMHV2_divxd; double HSMHV2_vdiffjd; double HSMHV2_js0s; double HSMHV2_js0sws; double HSMHV2_njs; double HSMHV2_njsws; double HSMHV2_xtis; double HSMHV2_cjs; double HSMHV2_cjsws; double HSMHV2_cjswgs; double HSMHV2_mjs; double HSMHV2_mjsws; double HSMHV2_mjswgs; double HSMHV2_pbs; double HSMHV2_pbsws; double HSMHV2_pbswgs; double HSMHV2_xti2s; double HSMHV2_cisbs; double HSMHV2_cvbs; double HSMHV2_ctemps; double HSMHV2_cisbks; double HSMHV2_divxs; double HSMHV2_vdiffjs; double HSMHV2_shemax; double HSMHV2_vgsmin; double HSMHV2_gdsleak; double HSMHV2_rdrbb; double HSMHV2_rdrbbtmp; /* binning parameters */ double HSMHV2_lmin ; double HSMHV2_lmax ; double HSMHV2_wmin ; double HSMHV2_wmax ; double HSMHV2_lbinn ; double HSMHV2_wbinn ; /* Length dependence */ double HSMHV2_lvmax ; double HSMHV2_lbgtmp1 ; double HSMHV2_lbgtmp2 ; double HSMHV2_leg0 ; double HSMHV2_lvfbover ; double HSMHV2_lnover ; double HSMHV2_lnovers ; double HSMHV2_lwl2 ; double HSMHV2_lvfbc ; double HSMHV2_lnsubc ; double HSMHV2_lnsubp ; double HSMHV2_lscp1 ; double HSMHV2_lscp2 ; double HSMHV2_lscp3 ; double HSMHV2_lsc1 ; double HSMHV2_lsc2 ; double HSMHV2_lsc3 ; double HSMHV2_lpgd1 ; //double HSMHV2_lpgd3 ; double HSMHV2_lndep ; double HSMHV2_lninv ; double HSMHV2_lmuecb0 ; double HSMHV2_lmuecb1 ; double HSMHV2_lmueph1 ; double HSMHV2_lvtmp ; double HSMHV2_lwvth0 ; double HSMHV2_lmuesr1 ; double HSMHV2_lmuetmp ; double HSMHV2_lsub1 ; double HSMHV2_lsub2 ; double HSMHV2_lsvds ; double HSMHV2_lsvbs ; double HSMHV2_lsvgs ; double HSMHV2_lfn1 ; double HSMHV2_lfn2 ; double HSMHV2_lfn3 ; double HSMHV2_lfvbs ; double HSMHV2_lnsti ; double HSMHV2_lwsti ; double HSMHV2_lscsti1 ; double HSMHV2_lscsti2 ; double HSMHV2_lvthsti ; double HSMHV2_lmuesti1 ; double HSMHV2_lmuesti2 ; double HSMHV2_lmuesti3 ; double HSMHV2_lnsubpsti1 ; double HSMHV2_lnsubpsti2 ; double HSMHV2_lnsubpsti3 ; double HSMHV2_lcgso ; double HSMHV2_lcgdo ; double HSMHV2_ljs0 ; double HSMHV2_ljs0sw ; double HSMHV2_lnj ; double HSMHV2_lcisbk ; double HSMHV2_lclm1 ; double HSMHV2_lclm2 ; double HSMHV2_lclm3 ; double HSMHV2_lwfc ; double HSMHV2_lgidl1 ; double HSMHV2_lgidl2 ; double HSMHV2_lgleak1 ; double HSMHV2_lgleak2 ; double HSMHV2_lgleak3 ; double HSMHV2_lgleak6 ; double HSMHV2_lglksd1 ; double HSMHV2_lglksd2 ; double HSMHV2_lglkb1 ; double HSMHV2_lglkb2 ; double HSMHV2_lnftrp ; double HSMHV2_lnfalp ; double HSMHV2_lvdiffj ; double HSMHV2_libpc1 ; double HSMHV2_libpc2 ; double HSMHV2_lcgbo ; double HSMHV2_lcvdsover ; double HSMHV2_lfalph ; double HSMHV2_lnpext ; double HSMHV2_lpowrat ; double HSMHV2_lrd ; double HSMHV2_lrd22 ; double HSMHV2_lrd23 ; double HSMHV2_lrd24 ; double HSMHV2_lrdict1 ; double HSMHV2_lrdov13 ; double HSMHV2_lrdslp1 ; double HSMHV2_lrdvb ; double HSMHV2_lrdvd ; double HSMHV2_lrdvg11 ; double HSMHV2_lrs ; double HSMHV2_lrth0 ; double HSMHV2_lvover ; double HSMHV2_ljs0d; double HSMHV2_ljs0swd; double HSMHV2_lnjd; double HSMHV2_lcisbkd; double HSMHV2_lvdiffjd; double HSMHV2_ljs0s; double HSMHV2_ljs0sws; double HSMHV2_lnjs; double HSMHV2_lcisbks; double HSMHV2_lvdiffjs; /* Width dependence */ double HSMHV2_wvmax ; double HSMHV2_wbgtmp1 ; double HSMHV2_wbgtmp2 ; double HSMHV2_weg0 ; double HSMHV2_wvfbover ; double HSMHV2_wnover ; double HSMHV2_wnovers ; double HSMHV2_wwl2 ; double HSMHV2_wvfbc ; double HSMHV2_wnsubc ; double HSMHV2_wnsubp ; double HSMHV2_wscp1 ; double HSMHV2_wscp2 ; double HSMHV2_wscp3 ; double HSMHV2_wsc1 ; double HSMHV2_wsc2 ; double HSMHV2_wsc3 ; double HSMHV2_wpgd1 ; //double HSMHV2_wpgd3 ; double HSMHV2_wndep ; double HSMHV2_wninv ; double HSMHV2_wmuecb0 ; double HSMHV2_wmuecb1 ; double HSMHV2_wmueph1 ; double HSMHV2_wvtmp ; double HSMHV2_wwvth0 ; double HSMHV2_wmuesr1 ; double HSMHV2_wmuetmp ; double HSMHV2_wsub1 ; double HSMHV2_wsub2 ; double HSMHV2_wsvds ; double HSMHV2_wsvbs ; double HSMHV2_wsvgs ; double HSMHV2_wfn1 ; double HSMHV2_wfn2 ; double HSMHV2_wfn3 ; double HSMHV2_wfvbs ; double HSMHV2_wnsti ; double HSMHV2_wwsti ; double HSMHV2_wscsti1 ; double HSMHV2_wscsti2 ; double HSMHV2_wvthsti ; double HSMHV2_wmuesti1 ; double HSMHV2_wmuesti2 ; double HSMHV2_wmuesti3 ; double HSMHV2_wnsubpsti1 ; double HSMHV2_wnsubpsti2 ; double HSMHV2_wnsubpsti3 ; double HSMHV2_wcgso ; double HSMHV2_wcgdo ; double HSMHV2_wjs0 ; double HSMHV2_wjs0sw ; double HSMHV2_wnj ; double HSMHV2_wcisbk ; double HSMHV2_wclm1 ; double HSMHV2_wclm2 ; double HSMHV2_wclm3 ; double HSMHV2_wwfc ; double HSMHV2_wgidl1 ; double HSMHV2_wgidl2 ; double HSMHV2_wgleak1 ; double HSMHV2_wgleak2 ; double HSMHV2_wgleak3 ; double HSMHV2_wgleak6 ; double HSMHV2_wglksd1 ; double HSMHV2_wglksd2 ; double HSMHV2_wglkb1 ; double HSMHV2_wglkb2 ; double HSMHV2_wnftrp ; double HSMHV2_wnfalp ; double HSMHV2_wvdiffj ; double HSMHV2_wibpc1 ; double HSMHV2_wibpc2 ; double HSMHV2_wcgbo ; double HSMHV2_wcvdsover ; double HSMHV2_wfalph ; double HSMHV2_wnpext ; double HSMHV2_wpowrat ; double HSMHV2_wrd ; double HSMHV2_wrd22 ; double HSMHV2_wrd23 ; double HSMHV2_wrd24 ; double HSMHV2_wrdict1 ; double HSMHV2_wrdov13 ; double HSMHV2_wrdslp1 ; double HSMHV2_wrdvb ; double HSMHV2_wrdvd ; double HSMHV2_wrdvg11 ; double HSMHV2_wrs ; double HSMHV2_wrth0 ; double HSMHV2_wvover ; double HSMHV2_wjs0d; double HSMHV2_wjs0swd; double HSMHV2_wnjd; double HSMHV2_wcisbkd; double HSMHV2_wvdiffjd; double HSMHV2_wjs0s; double HSMHV2_wjs0sws; double HSMHV2_wnjs; double HSMHV2_wcisbks; double HSMHV2_wvdiffjs; /* Cross-term dependence */ double HSMHV2_pvmax ; double HSMHV2_pbgtmp1 ; double HSMHV2_pbgtmp2 ; double HSMHV2_peg0 ; double HSMHV2_pvfbover ; double HSMHV2_pnover ; double HSMHV2_pnovers ; double HSMHV2_pwl2 ; double HSMHV2_pvfbc ; double HSMHV2_pnsubc ; double HSMHV2_pnsubp ; double HSMHV2_pscp1 ; double HSMHV2_pscp2 ; double HSMHV2_pscp3 ; double HSMHV2_psc1 ; double HSMHV2_psc2 ; double HSMHV2_psc3 ; double HSMHV2_ppgd1 ; //double HSMHV2_ppgd3 ; double HSMHV2_pndep ; double HSMHV2_pninv ; double HSMHV2_pmuecb0 ; double HSMHV2_pmuecb1 ; double HSMHV2_pmueph1 ; double HSMHV2_pvtmp ; double HSMHV2_pwvth0 ; double HSMHV2_pmuesr1 ; double HSMHV2_pmuetmp ; double HSMHV2_psub1 ; double HSMHV2_psub2 ; double HSMHV2_psvds ; double HSMHV2_psvbs ; double HSMHV2_psvgs ; double HSMHV2_pfn1 ; double HSMHV2_pfn2 ; double HSMHV2_pfn3 ; double HSMHV2_pfvbs ; double HSMHV2_pnsti ; double HSMHV2_pwsti ; double HSMHV2_pscsti1 ; double HSMHV2_pscsti2 ; double HSMHV2_pvthsti ; double HSMHV2_pmuesti1 ; double HSMHV2_pmuesti2 ; double HSMHV2_pmuesti3 ; double HSMHV2_pnsubpsti1 ; double HSMHV2_pnsubpsti2 ; double HSMHV2_pnsubpsti3 ; double HSMHV2_pcgso ; double HSMHV2_pcgdo ; double HSMHV2_pjs0 ; double HSMHV2_pjs0sw ; double HSMHV2_pnj ; double HSMHV2_pcisbk ; double HSMHV2_pclm1 ; double HSMHV2_pclm2 ; double HSMHV2_pclm3 ; double HSMHV2_pwfc ; double HSMHV2_pgidl1 ; double HSMHV2_pgidl2 ; double HSMHV2_pgleak1 ; double HSMHV2_pgleak2 ; double HSMHV2_pgleak3 ; double HSMHV2_pgleak6 ; double HSMHV2_pglksd1 ; double HSMHV2_pglksd2 ; double HSMHV2_pglkb1 ; double HSMHV2_pglkb2 ; double HSMHV2_pnftrp ; double HSMHV2_pnfalp ; double HSMHV2_pvdiffj ; double HSMHV2_pibpc1 ; double HSMHV2_pibpc2 ; double HSMHV2_pcgbo ; double HSMHV2_pcvdsover ; double HSMHV2_pfalph ; double HSMHV2_pnpext ; double HSMHV2_ppowrat ; double HSMHV2_prd ; double HSMHV2_prd22 ; double HSMHV2_prd23 ; double HSMHV2_prd24 ; double HSMHV2_prdict1 ; double HSMHV2_prdov13 ; double HSMHV2_prdslp1 ; double HSMHV2_prdvb ; double HSMHV2_prdvd ; double HSMHV2_prdvg11 ; double HSMHV2_prs ; double HSMHV2_prth0 ; double HSMHV2_pvover ; double HSMHV2_pjs0d; double HSMHV2_pjs0swd; double HSMHV2_pnjd; double HSMHV2_pcisbkd; double HSMHV2_pvdiffjd; double HSMHV2_pjs0s; double HSMHV2_pjs0sws; double HSMHV2_pnjs; double HSMHV2_pcisbks; double HSMHV2_pvdiffjs; /* internal variables */ double HSMHV2_exptempd ; double HSMHV2_exptemps ; double HSMHV2_jd_nvtm_invd ; double HSMHV2_jd_nvtm_invs ; double HSMHV2_vcrit ; int HSMHV2_flg_qme ; double HSMHV2_qme12 ; double HSMHV2_ktnom ; int HSMHV2_subversion ; int HSMHV2_revision ; double HSMHV2vgsMax; double HSMHV2vgdMax; double HSMHV2vgbMax; double HSMHV2vdsMax; double HSMHV2vbsMax; double HSMHV2vbdMax; double HSMHV2vgsrMax; double HSMHV2vgdrMax; double HSMHV2vgbrMax; double HSMHV2vbsrMax; double HSMHV2vbdrMax; HSMHV2modelMKSParam modelMKS ; /* unit-converted parameters */ /* flag for model */ unsigned HSMHV2_type_Given :1; unsigned HSMHV2_level_Given :1; unsigned HSMHV2_info_Given :1; unsigned HSMHV2_noise_Given :1; unsigned HSMHV2_version_Given :1; unsigned HSMHV2_show_Given :1; unsigned HSMHV2_corsrd_Given :1; unsigned HSMHV2_corg_Given :1; unsigned HSMHV2_coiprv_Given :1; unsigned HSMHV2_copprv_Given :1; unsigned HSMHV2_coadov_Given :1; unsigned HSMHV2_coisub_Given :1; unsigned HSMHV2_coiigs_Given :1; unsigned HSMHV2_cogidl_Given :1; unsigned HSMHV2_coovlp_Given :1; unsigned HSMHV2_coovlps_Given :1; unsigned HSMHV2_coflick_Given :1; unsigned HSMHV2_coisti_Given :1; unsigned HSMHV2_conqs_Given :1; unsigned HSMHV2_corbnet_Given :1; unsigned HSMHV2_cothrml_Given :1; unsigned HSMHV2_coign_Given :1; /* Induced gate noise */ unsigned HSMHV2_codfm_Given :1; /* DFM */ unsigned HSMHV2_coqovsm_Given :1; unsigned HSMHV2_coselfheat_Given :1; /* Self-heating model */ unsigned HSMHV2_cosubnode_Given :1; /* switch tempNode to subNode */ unsigned HSMHV2_cosym_Given :1; /* Symmetry model for HV */ unsigned HSMHV2_cotemp_Given :1; unsigned HSMHV2_coldrift_Given :1; unsigned HSMHV2_cordrift_Given :1; unsigned HSMHV2_coerrrep_Given :1; unsigned HSMHV2_codep_Given :1; unsigned HSMHV2_coddlt_Given :1; unsigned HSMHV2_kappa_Given :1; unsigned HSMHV2_vdiffj_Given :1; unsigned HSMHV2_vmax_Given :1; unsigned HSMHV2_vmaxt1_Given :1; unsigned HSMHV2_vmaxt2_Given :1; unsigned HSMHV2_bgtmp1_Given :1; unsigned HSMHV2_bgtmp2_Given :1; unsigned HSMHV2_eg0_Given :1; unsigned HSMHV2_tox_Given :1; unsigned HSMHV2_xld_Given :1; unsigned HSMHV2_xldld_Given :1; unsigned HSMHV2_xwdld_Given :1; unsigned HSMHV2_lover_Given :1; unsigned HSMHV2_lovers_Given :1; unsigned HSMHV2_rdov11_Given :1; unsigned HSMHV2_rdov12_Given :1; unsigned HSMHV2_rdov13_Given :1; unsigned HSMHV2_rdslp1_Given :1; unsigned HSMHV2_rdict1_Given :1; unsigned HSMHV2_rdslp2_Given :1; unsigned HSMHV2_rdict2_Given :1; unsigned HSMHV2_loverld_Given :1; unsigned HSMHV2_ldrift1_Given :1; unsigned HSMHV2_ldrift2_Given :1; unsigned HSMHV2_ldrift1s_Given :1; unsigned HSMHV2_ldrift2s_Given :1; unsigned HSMHV2_subld1_Given :1; unsigned HSMHV2_subld1l_Given :1; unsigned HSMHV2_subld1lp_Given :1; unsigned HSMHV2_subld2_Given :1; unsigned HSMHV2_xpdv_Given :1; unsigned HSMHV2_xpvdth_Given :1; unsigned HSMHV2_xpvdthg_Given :1; unsigned HSMHV2_ddltmax_Given :1; unsigned HSMHV2_ddltslp_Given :1; unsigned HSMHV2_ddltict_Given :1; unsigned HSMHV2_vfbover_Given :1; unsigned HSMHV2_nover_Given :1; unsigned HSMHV2_novers_Given :1; unsigned HSMHV2_xwd_Given :1; unsigned HSMHV2_xwdc_Given :1; unsigned HSMHV2_xl_Given :1; unsigned HSMHV2_xw_Given :1; unsigned HSMHV2_saref_Given :1; unsigned HSMHV2_sbref_Given :1; unsigned HSMHV2_ll_Given :1; unsigned HSMHV2_lld_Given :1; unsigned HSMHV2_lln_Given :1; unsigned HSMHV2_wl_Given :1; unsigned HSMHV2_wl1_Given :1; unsigned HSMHV2_wl1p_Given :1; unsigned HSMHV2_wl2_Given :1; unsigned HSMHV2_wl2p_Given :1; unsigned HSMHV2_wld_Given :1; unsigned HSMHV2_wln_Given :1; unsigned HSMHV2_xqy_Given :1; unsigned HSMHV2_xqy1_Given :1; unsigned HSMHV2_xqy2_Given :1; unsigned HSMHV2_rs_Given :1; unsigned HSMHV2_rd_Given :1; unsigned HSMHV2_rsh_Given :1; unsigned HSMHV2_rshg_Given :1; /* unsigned HSMHV2_ngcon_Given :1; */ /* unsigned HSMHV2_xgw_Given :1; */ /* unsigned HSMHV2_xgl_Given :1; */ /* unsigned HSMHV2_nf_Given :1; */ unsigned HSMHV2_vfbc_Given :1; unsigned HSMHV2_vbi_Given :1; unsigned HSMHV2_nsubc_Given :1; unsigned HSMHV2_parl2_Given :1; unsigned HSMHV2_lp_Given :1; unsigned HSMHV2_nsubp_Given :1; unsigned HSMHV2_ndepm_Given :1; unsigned HSMHV2_tndep_Given :1; unsigned HSMHV2_depmue0_Given :1; unsigned HSMHV2_depmue1_Given :1; unsigned HSMHV2_depmueback0_Given :1; unsigned HSMHV2_depmueback1_Given :1; unsigned HSMHV2_depleak_Given :1; unsigned HSMHV2_depeta_Given :1; unsigned HSMHV2_depvmax_Given :1; unsigned HSMHV2_depvdsef1_Given :1; unsigned HSMHV2_depvdsef2_Given :1; unsigned HSMHV2_depmueph0_Given :1; unsigned HSMHV2_depmueph1_Given :1; unsigned HSMHV2_depbb_Given :1; unsigned HSMHV2_depvtmp_Given :1; unsigned HSMHV2_depmuetmp_Given :1; unsigned HSMHV2_isbreak_Given :1; unsigned HSMHV2_rwell_Given :1; unsigned HSMHV2_nsubp0_Given :1; unsigned HSMHV2_nsubwp_Given :1; unsigned HSMHV2_scp1_Given :1; unsigned HSMHV2_scp2_Given :1; unsigned HSMHV2_scp3_Given :1; unsigned HSMHV2_sc1_Given :1; unsigned HSMHV2_sc2_Given :1; unsigned HSMHV2_sc3_Given :1; unsigned HSMHV2_sc4_Given :1; unsigned HSMHV2_pgd1_Given :1; unsigned HSMHV2_pgd2_Given :1; unsigned HSMHV2_pgd4_Given :1; unsigned HSMHV2_ndep_Given :1; unsigned HSMHV2_ndepl_Given :1; unsigned HSMHV2_ndeplp_Given :1; unsigned HSMHV2_ninv_Given :1; unsigned HSMHV2_muecb0_Given :1; unsigned HSMHV2_muecb1_Given :1; unsigned HSMHV2_mueph1_Given :1; unsigned HSMHV2_mueph0_Given :1; unsigned HSMHV2_muephw_Given :1; unsigned HSMHV2_muepwp_Given :1; unsigned HSMHV2_muephl_Given :1; unsigned HSMHV2_mueplp_Given :1; unsigned HSMHV2_muephs_Given :1; unsigned HSMHV2_muepsp_Given :1; unsigned HSMHV2_vtmp_Given :1; unsigned HSMHV2_wvth0_Given :1; unsigned HSMHV2_muesr1_Given :1; unsigned HSMHV2_muesr0_Given :1; unsigned HSMHV2_muesrl_Given :1; unsigned HSMHV2_mueslp_Given :1; unsigned HSMHV2_muesrw_Given :1; unsigned HSMHV2_mueswp_Given :1; unsigned HSMHV2_bb_Given :1; unsigned HSMHV2_sub1_Given :1; unsigned HSMHV2_sub2_Given :1; unsigned HSMHV2_svgs_Given :1; unsigned HSMHV2_svbs_Given :1; unsigned HSMHV2_svbsl_Given :1; unsigned HSMHV2_svds_Given :1; unsigned HSMHV2_slg_Given :1; unsigned HSMHV2_sub1l_Given :1; unsigned HSMHV2_sub2l_Given :1; unsigned HSMHV2_fn1_Given :1; unsigned HSMHV2_fn2_Given :1; unsigned HSMHV2_fn3_Given :1; unsigned HSMHV2_fvbs_Given :1; unsigned HSMHV2_svgsl_Given :1; unsigned HSMHV2_svgslp_Given :1; unsigned HSMHV2_svgswp_Given :1; unsigned HSMHV2_svgsw_Given :1; unsigned HSMHV2_svbslp_Given :1; unsigned HSMHV2_slgl_Given :1; unsigned HSMHV2_slglp_Given :1; unsigned HSMHV2_sub1lp_Given :1; unsigned HSMHV2_nsti_Given :1; unsigned HSMHV2_wsti_Given :1; unsigned HSMHV2_wstil_Given :1; unsigned HSMHV2_wstilp_Given :1; unsigned HSMHV2_wstiw_Given :1; unsigned HSMHV2_wstiwp_Given :1; unsigned HSMHV2_scsti1_Given :1; unsigned HSMHV2_scsti2_Given :1; unsigned HSMHV2_vthsti_Given :1; unsigned HSMHV2_vdsti_Given :1; unsigned HSMHV2_muesti1_Given :1; unsigned HSMHV2_muesti2_Given :1; unsigned HSMHV2_muesti3_Given :1; unsigned HSMHV2_nsubpsti1_Given :1; unsigned HSMHV2_nsubpsti2_Given :1; unsigned HSMHV2_nsubpsti3_Given :1; unsigned HSMHV2_lpext_Given :1; unsigned HSMHV2_npext_Given :1; unsigned HSMHV2_scp22_Given :1; unsigned HSMHV2_scp21_Given :1; unsigned HSMHV2_bs1_Given :1; unsigned HSMHV2_bs2_Given :1; unsigned HSMHV2_cgso_Given :1; unsigned HSMHV2_cgdo_Given :1; unsigned HSMHV2_cgbo_Given :1; unsigned HSMHV2_tpoly_Given :1; unsigned HSMHV2_js0_Given :1; unsigned HSMHV2_js0sw_Given :1; unsigned HSMHV2_nj_Given :1; unsigned HSMHV2_njsw_Given :1; unsigned HSMHV2_xti_Given :1; unsigned HSMHV2_cj_Given :1; unsigned HSMHV2_cjsw_Given :1; unsigned HSMHV2_cjswg_Given :1; unsigned HSMHV2_mj_Given :1; unsigned HSMHV2_mjsw_Given :1; unsigned HSMHV2_mjswg_Given :1; unsigned HSMHV2_xti2_Given :1; unsigned HSMHV2_cisb_Given :1; unsigned HSMHV2_cvb_Given :1; unsigned HSMHV2_ctemp_Given :1; unsigned HSMHV2_cisbk_Given :1; unsigned HSMHV2_cvbk_Given :1; unsigned HSMHV2_divx_Given :1; unsigned HSMHV2_pb_Given :1; unsigned HSMHV2_pbsw_Given :1; unsigned HSMHV2_pbswg_Given :1; unsigned HSMHV2_clm1_Given :1; unsigned HSMHV2_clm2_Given :1; unsigned HSMHV2_clm3_Given :1; unsigned HSMHV2_clm5_Given :1; unsigned HSMHV2_clm6_Given :1; unsigned HSMHV2_muetmp_Given :1; unsigned HSMHV2_vover_Given :1; unsigned HSMHV2_voverp_Given :1; unsigned HSMHV2_vovers_Given :1; unsigned HSMHV2_voversp_Given :1; unsigned HSMHV2_wfc_Given :1; unsigned HSMHV2_nsubcw_Given :1; unsigned HSMHV2_nsubcwp_Given :1; unsigned HSMHV2_qme1_Given :1; unsigned HSMHV2_qme2_Given :1; unsigned HSMHV2_qme3_Given :1; unsigned HSMHV2_gidl1_Given :1; unsigned HSMHV2_gidl2_Given :1; unsigned HSMHV2_gidl3_Given :1; unsigned HSMHV2_gidl4_Given :1; unsigned HSMHV2_gidl5_Given :1; unsigned HSMHV2_gleak1_Given :1; unsigned HSMHV2_gleak2_Given :1; unsigned HSMHV2_gleak3_Given :1; unsigned HSMHV2_gleak4_Given :1; unsigned HSMHV2_gleak5_Given :1; unsigned HSMHV2_gleak6_Given :1; unsigned HSMHV2_gleak7_Given :1; unsigned HSMHV2_glpart1_Given :1; unsigned HSMHV2_glksd1_Given :1; unsigned HSMHV2_glksd2_Given :1; unsigned HSMHV2_glksd3_Given :1; unsigned HSMHV2_glkb1_Given :1; unsigned HSMHV2_glkb2_Given :1; unsigned HSMHV2_glkb3_Given :1; unsigned HSMHV2_egig_Given :1; unsigned HSMHV2_igtemp2_Given :1; unsigned HSMHV2_igtemp3_Given :1; unsigned HSMHV2_vzadd0_Given :1; unsigned HSMHV2_pzadd0_Given :1; unsigned HSMHV2_nftrp_Given :1; unsigned HSMHV2_nfalp_Given :1; unsigned HSMHV2_cit_Given :1; unsigned HSMHV2_falph_Given :1; unsigned HSMHV2_dly1_Given :1; unsigned HSMHV2_dly2_Given :1; unsigned HSMHV2_dly3_Given :1; unsigned HSMHV2_dlyov_Given :1; unsigned HSMHV2_tnom_Given :1; unsigned HSMHV2_ovslp_Given :1; unsigned HSMHV2_ovmag_Given :1; unsigned HSMHV2_gbmin_Given :1; unsigned HSMHV2_rbpb_Given :1; unsigned HSMHV2_rbpd_Given :1; unsigned HSMHV2_rbps_Given :1; unsigned HSMHV2_rbdb_Given :1; unsigned HSMHV2_rbsb_Given :1; unsigned HSMHV2_ibpc1_Given :1; unsigned HSMHV2_ibpc1l_Given :1; unsigned HSMHV2_ibpc1lp_Given :1; unsigned HSMHV2_ibpc2_Given :1; unsigned HSMHV2_mphdfm_Given :1; unsigned HSMHV2_ptl_Given :1; unsigned HSMHV2_ptp_Given :1; unsigned HSMHV2_pt2_Given :1; unsigned HSMHV2_ptlp_Given :1; unsigned HSMHV2_gdl_Given :1; unsigned HSMHV2_gdlp_Given :1; unsigned HSMHV2_gdld_Given :1; unsigned HSMHV2_pt4_Given :1; unsigned HSMHV2_pt4p_Given :1; unsigned HSMHV2_rdvg11_Given :1; unsigned HSMHV2_rdvg12_Given :1; unsigned HSMHV2_ldrift_Given :1; unsigned HSMHV2_rd20_Given :1; unsigned HSMHV2_rd21_Given :1; unsigned HSMHV2_rd22_Given :1; unsigned HSMHV2_rd22d_Given :1; unsigned HSMHV2_rd23_Given :1; unsigned HSMHV2_rd24_Given :1; unsigned HSMHV2_rd25_Given :1; unsigned HSMHV2_rdvdl_Given :1; unsigned HSMHV2_rdvdlp_Given :1; unsigned HSMHV2_rdvds_Given :1; unsigned HSMHV2_rdvdsp_Given :1; unsigned HSMHV2_rd23l_Given :1; unsigned HSMHV2_rd23lp_Given :1; unsigned HSMHV2_rd23s_Given :1; unsigned HSMHV2_rd23sp_Given :1; unsigned HSMHV2_rds_Given :1; unsigned HSMHV2_rdsp_Given :1; unsigned HSMHV2_vbsmin_Given :1; unsigned HSMHV2_ninvd_Given :1; unsigned HSMHV2_ninvdw_Given :1; unsigned HSMHV2_ninvdwp_Given :1; unsigned HSMHV2_ninvdt1_Given :1; unsigned HSMHV2_ninvdt2_Given :1; unsigned HSMHV2_rdvb_Given :1; unsigned HSMHV2_rth0nf_Given :1; unsigned HSMHV2_rthtemp1_Given :1; unsigned HSMHV2_rthtemp2_Given :1; unsigned HSMHV2_prattemp1_Given :1; unsigned HSMHV2_prattemp2_Given :1; unsigned HSMHV2_rth0_Given :1; unsigned HSMHV2_cth0_Given :1; unsigned HSMHV2_powrat_Given :1; unsigned HSMHV2_tcjbd_Given :1; unsigned HSMHV2_tcjbs_Given :1; unsigned HSMHV2_tcjbdsw_Given :1; unsigned HSMHV2_tcjbssw_Given :1; unsigned HSMHV2_tcjbdswg_Given :1; unsigned HSMHV2_tcjbsswg_Given :1; /* unsigned HSMHV2_wth0_Given :1; */ unsigned HSMHV2_qdftvd_Given :1; unsigned HSMHV2_rdvd_Given :1; unsigned HSMHV2_rdtemp1_Given :1; unsigned HSMHV2_rdtemp2_Given :1; unsigned HSMHV2_rth0r_Given :1; unsigned HSMHV2_rdvdtemp1_Given :1; unsigned HSMHV2_rdvdtemp2_Given :1; unsigned HSMHV2_rth0w_Given :1; unsigned HSMHV2_rth0wp_Given :1; unsigned HSMHV2_cvdsover_Given :1; /* substrate effect */ unsigned HSMHV2_rdvsub_Given :1; /* substrate effect */ unsigned HSMHV2_rdvdsub_Given :1; /* substrate effect */ unsigned HSMHV2_ddrift_Given :1; /* substrate effect */ unsigned HSMHV2_vbisub_Given :1; /* substrate effect */ unsigned HSMHV2_nsubsub_Given :1; /* substrate effect */ unsigned HSMHV2_rdrmue_Given :1; unsigned HSMHV2_rdrvmax_Given :1; unsigned HSMHV2_rdrmuetmp_Given :1; unsigned HSMHV2_myu0_leak_Given :1; unsigned HSMHV2_myu0_leaktmp_Given :1; unsigned HSMHV2_myu0_vmax_Given :1; unsigned HSMHV2_myu0_cotemp1_Given :1; unsigned HSMHV2_myu0_cotemp2_Given :1; unsigned HSMHV2_rdrvtmp_Given :1; unsigned HSMHV2_rdrdjunc_Given :1; unsigned HSMHV2_rdrcx_Given :1; unsigned HSMHV2_rdrcar_Given :1; unsigned HSMHV2_rdrdl1_Given :1; unsigned HSMHV2_rdrdl2_Given :1; unsigned HSMHV2_rdrvmaxw_Given :1; unsigned HSMHV2_rdrvmaxwp_Given :1; unsigned HSMHV2_rdrvmaxl_Given :1; unsigned HSMHV2_rdrvmaxlp_Given :1; unsigned HSMHV2_rdrmuel_Given :1; unsigned HSMHV2_rdrmuelp_Given :1; unsigned HSMHV2_qovadd_Given :1; unsigned HSMHV2_rdrqover_Given :1; unsigned HSMHV2_js0d_Given :1; unsigned HSMHV2_js0swd_Given :1; unsigned HSMHV2_njd_Given :1; unsigned HSMHV2_njswd_Given :1; unsigned HSMHV2_xtid_Given :1; unsigned HSMHV2_cjd_Given :1; unsigned HSMHV2_cjswd_Given :1; unsigned HSMHV2_cjswgd_Given :1; unsigned HSMHV2_mjd_Given :1; unsigned HSMHV2_mjswd_Given :1; unsigned HSMHV2_mjswgd_Given :1; unsigned HSMHV2_pbd_Given :1; unsigned HSMHV2_pbswd_Given :1; unsigned HSMHV2_pbswgd_Given :1; unsigned HSMHV2_xti2d_Given :1; unsigned HSMHV2_cisbd_Given :1; unsigned HSMHV2_cvbd_Given :1; unsigned HSMHV2_ctempd_Given :1; unsigned HSMHV2_cisbkd_Given :1; unsigned HSMHV2_divxd_Given :1; unsigned HSMHV2_vdiffjd_Given :1; unsigned HSMHV2_js0s_Given :1; unsigned HSMHV2_js0sws_Given :1; unsigned HSMHV2_njs_Given :1; unsigned HSMHV2_njsws_Given :1; unsigned HSMHV2_xtis_Given :1; unsigned HSMHV2_cjs_Given :1; unsigned HSMHV2_cjsws_Given :1; unsigned HSMHV2_cjswgs_Given :1; unsigned HSMHV2_mjs_Given :1; unsigned HSMHV2_mjsws_Given :1; unsigned HSMHV2_mjswgs_Given :1; unsigned HSMHV2_pbs_Given :1; unsigned HSMHV2_pbsws_Given :1; unsigned HSMHV2_pbswgs_Given :1; unsigned HSMHV2_xti2s_Given :1; unsigned HSMHV2_cisbs_Given :1; unsigned HSMHV2_cvbs_Given :1; unsigned HSMHV2_ctemps_Given :1; unsigned HSMHV2_cisbks_Given :1; unsigned HSMHV2_divxs_Given :1; unsigned HSMHV2_vdiffjs_Given :1; unsigned HSMHV2_shemax_Given :1; unsigned HSMHV2_vgsmin_Given :1; unsigned HSMHV2_gdsleak_Given :1; unsigned HSMHV2_rdrbb_Given :1; unsigned HSMHV2_rdrbbtmp_Given :1; /* binning parameters */ unsigned HSMHV2_lmin_Given :1; unsigned HSMHV2_lmax_Given :1; unsigned HSMHV2_wmin_Given :1; unsigned HSMHV2_wmax_Given :1; unsigned HSMHV2_lbinn_Given :1; unsigned HSMHV2_wbinn_Given :1; /* Length dependence */ unsigned HSMHV2_lvmax_Given :1; unsigned HSMHV2_lbgtmp1_Given :1; unsigned HSMHV2_lbgtmp2_Given :1; unsigned HSMHV2_leg0_Given :1; unsigned HSMHV2_lvfbover_Given :1; unsigned HSMHV2_lnover_Given :1; unsigned HSMHV2_lnovers_Given :1; unsigned HSMHV2_lwl2_Given :1; unsigned HSMHV2_lvfbc_Given :1; unsigned HSMHV2_lnsubc_Given :1; unsigned HSMHV2_lnsubp_Given :1; unsigned HSMHV2_lscp1_Given :1; unsigned HSMHV2_lscp2_Given :1; unsigned HSMHV2_lscp3_Given :1; unsigned HSMHV2_lsc1_Given :1; unsigned HSMHV2_lsc2_Given :1; unsigned HSMHV2_lsc3_Given :1; unsigned HSMHV2_lpgd1_Given :1; unsigned HSMHV2_lndep_Given :1; unsigned HSMHV2_lninv_Given :1; unsigned HSMHV2_lmuecb0_Given :1; unsigned HSMHV2_lmuecb1_Given :1; unsigned HSMHV2_lmueph1_Given :1; unsigned HSMHV2_lvtmp_Given :1; unsigned HSMHV2_lwvth0_Given :1; unsigned HSMHV2_lmuesr1_Given :1; unsigned HSMHV2_lmuetmp_Given :1; unsigned HSMHV2_lsub1_Given :1; unsigned HSMHV2_lsub2_Given :1; unsigned HSMHV2_lsvds_Given :1; unsigned HSMHV2_lsvbs_Given :1; unsigned HSMHV2_lsvgs_Given :1; unsigned HSMHV2_lfn1_Given :1; unsigned HSMHV2_lfn2_Given :1; unsigned HSMHV2_lfn3_Given :1; unsigned HSMHV2_lfvbs_Given :1; unsigned HSMHV2_lnsti_Given :1; unsigned HSMHV2_lwsti_Given :1; unsigned HSMHV2_lscsti1_Given :1; unsigned HSMHV2_lscsti2_Given :1; unsigned HSMHV2_lvthsti_Given :1; unsigned HSMHV2_lmuesti1_Given :1; unsigned HSMHV2_lmuesti2_Given :1; unsigned HSMHV2_lmuesti3_Given :1; unsigned HSMHV2_lnsubpsti1_Given :1; unsigned HSMHV2_lnsubpsti2_Given :1; unsigned HSMHV2_lnsubpsti3_Given :1; unsigned HSMHV2_lcgso_Given :1; unsigned HSMHV2_lcgdo_Given :1; unsigned HSMHV2_ljs0_Given :1; unsigned HSMHV2_ljs0sw_Given :1; unsigned HSMHV2_lnj_Given :1; unsigned HSMHV2_lcisbk_Given :1; unsigned HSMHV2_lclm1_Given :1; unsigned HSMHV2_lclm2_Given :1; unsigned HSMHV2_lclm3_Given :1; unsigned HSMHV2_lwfc_Given :1; unsigned HSMHV2_lgidl1_Given :1; unsigned HSMHV2_lgidl2_Given :1; unsigned HSMHV2_lgleak1_Given :1; unsigned HSMHV2_lgleak2_Given :1; unsigned HSMHV2_lgleak3_Given :1; unsigned HSMHV2_lgleak6_Given :1; unsigned HSMHV2_lglksd1_Given :1; unsigned HSMHV2_lglksd2_Given :1; unsigned HSMHV2_lglkb1_Given :1; unsigned HSMHV2_lglkb2_Given :1; unsigned HSMHV2_lnftrp_Given :1; unsigned HSMHV2_lnfalp_Given :1; unsigned HSMHV2_lvdiffj_Given :1; unsigned HSMHV2_libpc1_Given :1; unsigned HSMHV2_libpc2_Given :1; unsigned HSMHV2_lcgbo_Given :1; unsigned HSMHV2_lcvdsover_Given :1; unsigned HSMHV2_lfalph_Given :1; unsigned HSMHV2_lnpext_Given :1; unsigned HSMHV2_lpowrat_Given :1; unsigned HSMHV2_lrd_Given :1; unsigned HSMHV2_lrd22_Given :1; unsigned HSMHV2_lrd23_Given :1; unsigned HSMHV2_lrd24_Given :1; unsigned HSMHV2_lrdict1_Given :1; unsigned HSMHV2_lrdov13_Given :1; unsigned HSMHV2_lrdslp1_Given :1; unsigned HSMHV2_lrdvb_Given :1; unsigned HSMHV2_lrdvd_Given :1; unsigned HSMHV2_lrdvg11_Given :1; unsigned HSMHV2_lrs_Given :1; unsigned HSMHV2_lrth0_Given :1; unsigned HSMHV2_lvover_Given :1; unsigned HSMHV2_ljs0d_Given :1; unsigned HSMHV2_ljs0swd_Given :1; unsigned HSMHV2_lnjd_Given :1; unsigned HSMHV2_lcisbkd_Given :1; unsigned HSMHV2_lvdiffjd_Given :1; unsigned HSMHV2_ljs0s_Given :1; unsigned HSMHV2_ljs0sws_Given :1; unsigned HSMHV2_lnjs_Given :1; unsigned HSMHV2_lcisbks_Given :1; unsigned HSMHV2_lvdiffjs_Given :1; /* Width dependence */ unsigned HSMHV2_wvmax_Given :1; unsigned HSMHV2_wbgtmp1_Given :1; unsigned HSMHV2_wbgtmp2_Given :1; unsigned HSMHV2_weg0_Given :1; unsigned HSMHV2_wvfbover_Given :1; unsigned HSMHV2_wnover_Given :1; unsigned HSMHV2_wnovers_Given :1; unsigned HSMHV2_wwl2_Given :1; unsigned HSMHV2_wvfbc_Given :1; unsigned HSMHV2_wnsubc_Given :1; unsigned HSMHV2_wnsubp_Given :1; unsigned HSMHV2_wscp1_Given :1; unsigned HSMHV2_wscp2_Given :1; unsigned HSMHV2_wscp3_Given :1; unsigned HSMHV2_wsc1_Given :1; unsigned HSMHV2_wsc2_Given :1; unsigned HSMHV2_wsc3_Given :1; unsigned HSMHV2_wpgd1_Given :1; unsigned HSMHV2_wndep_Given :1; unsigned HSMHV2_wninv_Given :1; unsigned HSMHV2_wmuecb0_Given :1; unsigned HSMHV2_wmuecb1_Given :1; unsigned HSMHV2_wmueph1_Given :1; unsigned HSMHV2_wvtmp_Given :1; unsigned HSMHV2_wwvth0_Given :1; unsigned HSMHV2_wmuesr1_Given :1; unsigned HSMHV2_wmuetmp_Given :1; unsigned HSMHV2_wsub1_Given :1; unsigned HSMHV2_wsub2_Given :1; unsigned HSMHV2_wsvds_Given :1; unsigned HSMHV2_wsvbs_Given :1; unsigned HSMHV2_wsvgs_Given :1; unsigned HSMHV2_wfn1_Given :1; unsigned HSMHV2_wfn2_Given :1; unsigned HSMHV2_wfn3_Given :1; unsigned HSMHV2_wfvbs_Given :1; unsigned HSMHV2_wnsti_Given :1; unsigned HSMHV2_wwsti_Given :1; unsigned HSMHV2_wscsti1_Given :1; unsigned HSMHV2_wscsti2_Given :1; unsigned HSMHV2_wvthsti_Given :1; unsigned HSMHV2_wmuesti1_Given :1; unsigned HSMHV2_wmuesti2_Given :1; unsigned HSMHV2_wmuesti3_Given :1; unsigned HSMHV2_wnsubpsti1_Given :1; unsigned HSMHV2_wnsubpsti2_Given :1; unsigned HSMHV2_wnsubpsti3_Given :1; unsigned HSMHV2_wcgso_Given :1; unsigned HSMHV2_wcgdo_Given :1; unsigned HSMHV2_wjs0_Given :1; unsigned HSMHV2_wjs0sw_Given :1; unsigned HSMHV2_wnj_Given :1; unsigned HSMHV2_wcisbk_Given :1; unsigned HSMHV2_wclm1_Given :1; unsigned HSMHV2_wclm2_Given :1; unsigned HSMHV2_wclm3_Given :1; unsigned HSMHV2_wwfc_Given :1; unsigned HSMHV2_wgidl1_Given :1; unsigned HSMHV2_wgidl2_Given :1; unsigned HSMHV2_wgleak1_Given :1; unsigned HSMHV2_wgleak2_Given :1; unsigned HSMHV2_wgleak3_Given :1; unsigned HSMHV2_wgleak6_Given :1; unsigned HSMHV2_wglksd1_Given :1; unsigned HSMHV2_wglksd2_Given :1; unsigned HSMHV2_wglkb1_Given :1; unsigned HSMHV2_wglkb2_Given :1; unsigned HSMHV2_wnftrp_Given :1; unsigned HSMHV2_wnfalp_Given :1; unsigned HSMHV2_wvdiffj_Given :1; unsigned HSMHV2_wibpc1_Given :1; unsigned HSMHV2_wibpc2_Given :1; unsigned HSMHV2_wcgbo_Given :1; unsigned HSMHV2_wcvdsover_Given :1; unsigned HSMHV2_wfalph_Given :1; unsigned HSMHV2_wnpext_Given :1; unsigned HSMHV2_wpowrat_Given :1; unsigned HSMHV2_wrd_Given :1; unsigned HSMHV2_wrd22_Given :1; unsigned HSMHV2_wrd23_Given :1; unsigned HSMHV2_wrd24_Given :1; unsigned HSMHV2_wrdict1_Given :1; unsigned HSMHV2_wrdov13_Given :1; unsigned HSMHV2_wrdslp1_Given :1; unsigned HSMHV2_wrdvb_Given :1; unsigned HSMHV2_wrdvd_Given :1; unsigned HSMHV2_wrdvg11_Given :1; unsigned HSMHV2_wrs_Given :1; unsigned HSMHV2_wrth0_Given :1; unsigned HSMHV2_wvover_Given :1; unsigned HSMHV2_wjs0d_Given :1; unsigned HSMHV2_wjs0swd_Given :1; unsigned HSMHV2_wnjd_Given :1; unsigned HSMHV2_wcisbkd_Given :1; unsigned HSMHV2_wvdiffjd_Given :1; unsigned HSMHV2_wjs0s_Given :1; unsigned HSMHV2_wjs0sws_Given :1; unsigned HSMHV2_wnjs_Given :1; unsigned HSMHV2_wcisbks_Given :1; unsigned HSMHV2_wvdiffjs_Given :1; /* Cross-term dependence */ unsigned HSMHV2_pvmax_Given :1; unsigned HSMHV2_pbgtmp1_Given :1; unsigned HSMHV2_pbgtmp2_Given :1; unsigned HSMHV2_peg0_Given :1; unsigned HSMHV2_pvfbover_Given :1; unsigned HSMHV2_pnover_Given :1; unsigned HSMHV2_pnovers_Given :1; unsigned HSMHV2_pwl2_Given :1; unsigned HSMHV2_pvfbc_Given :1; unsigned HSMHV2_pnsubc_Given :1; unsigned HSMHV2_pnsubp_Given :1; unsigned HSMHV2_pscp1_Given :1; unsigned HSMHV2_pscp2_Given :1; unsigned HSMHV2_pscp3_Given :1; unsigned HSMHV2_psc1_Given :1; unsigned HSMHV2_psc2_Given :1; unsigned HSMHV2_psc3_Given :1; unsigned HSMHV2_ppgd1_Given :1; unsigned HSMHV2_pndep_Given :1; unsigned HSMHV2_pninv_Given :1; unsigned HSMHV2_pmuecb0_Given :1; unsigned HSMHV2_pmuecb1_Given :1; unsigned HSMHV2_pmueph1_Given :1; unsigned HSMHV2_pvtmp_Given :1; unsigned HSMHV2_pwvth0_Given :1; unsigned HSMHV2_pmuesr1_Given :1; unsigned HSMHV2_pmuetmp_Given :1; unsigned HSMHV2_psub1_Given :1; unsigned HSMHV2_psub2_Given :1; unsigned HSMHV2_psvds_Given :1; unsigned HSMHV2_psvbs_Given :1; unsigned HSMHV2_psvgs_Given :1; unsigned HSMHV2_pfn1_Given :1; unsigned HSMHV2_pfn2_Given :1; unsigned HSMHV2_pfn3_Given :1; unsigned HSMHV2_pfvbs_Given :1; unsigned HSMHV2_pnsti_Given :1; unsigned HSMHV2_pwsti_Given :1; unsigned HSMHV2_pscsti1_Given :1; unsigned HSMHV2_pscsti2_Given :1; unsigned HSMHV2_pvthsti_Given :1; unsigned HSMHV2_pmuesti1_Given :1; unsigned HSMHV2_pmuesti2_Given :1; unsigned HSMHV2_pmuesti3_Given :1; unsigned HSMHV2_pnsubpsti1_Given :1; unsigned HSMHV2_pnsubpsti2_Given :1; unsigned HSMHV2_pnsubpsti3_Given :1; unsigned HSMHV2_pcgso_Given :1; unsigned HSMHV2_pcgdo_Given :1; unsigned HSMHV2_pjs0_Given :1; unsigned HSMHV2_pjs0sw_Given :1; unsigned HSMHV2_pnj_Given :1; unsigned HSMHV2_pcisbk_Given :1; unsigned HSMHV2_pclm1_Given :1; unsigned HSMHV2_pclm2_Given :1; unsigned HSMHV2_pclm3_Given :1; unsigned HSMHV2_pwfc_Given :1; unsigned HSMHV2_pgidl1_Given :1; unsigned HSMHV2_pgidl2_Given :1; unsigned HSMHV2_pgleak1_Given :1; unsigned HSMHV2_pgleak2_Given :1; unsigned HSMHV2_pgleak3_Given :1; unsigned HSMHV2_pgleak6_Given :1; unsigned HSMHV2_pglksd1_Given :1; unsigned HSMHV2_pglksd2_Given :1; unsigned HSMHV2_pglkb1_Given :1; unsigned HSMHV2_pglkb2_Given :1; unsigned HSMHV2_pnftrp_Given :1; unsigned HSMHV2_pnfalp_Given :1; unsigned HSMHV2_pvdiffj_Given :1; unsigned HSMHV2_pibpc1_Given :1; unsigned HSMHV2_pibpc2_Given :1; unsigned HSMHV2_pcgbo_Given :1; unsigned HSMHV2_pcvdsover_Given :1; unsigned HSMHV2_pfalph_Given :1; unsigned HSMHV2_pnpext_Given :1; unsigned HSMHV2_ppowrat_Given :1; unsigned HSMHV2_prd_Given :1; unsigned HSMHV2_prd22_Given :1; unsigned HSMHV2_prd23_Given :1; unsigned HSMHV2_prd24_Given :1; unsigned HSMHV2_prdict1_Given :1; unsigned HSMHV2_prdov13_Given :1; unsigned HSMHV2_prdslp1_Given :1; unsigned HSMHV2_prdvb_Given :1; unsigned HSMHV2_prdvd_Given :1; unsigned HSMHV2_prdvg11_Given :1; unsigned HSMHV2_prs_Given :1; unsigned HSMHV2_prth0_Given :1; unsigned HSMHV2_pvover_Given :1; unsigned HSMHV2_pjs0d_Given :1; unsigned HSMHV2_pjs0swd_Given :1; unsigned HSMHV2_pnjd_Given :1; unsigned HSMHV2_pcisbkd_Given :1; unsigned HSMHV2_pvdiffjd_Given :1; unsigned HSMHV2_pjs0s_Given :1; unsigned HSMHV2_pjs0sws_Given :1; unsigned HSMHV2_pnjs_Given :1; unsigned HSMHV2_pcisbks_Given :1; unsigned HSMHV2_pvdiffjs_Given :1; unsigned HSMHV2vgsMaxGiven :1; unsigned HSMHV2vgdMaxGiven :1; unsigned HSMHV2vgbMaxGiven :1; unsigned HSMHV2vdsMaxGiven :1; unsigned HSMHV2vbsMaxGiven :1; unsigned HSMHV2vbdMaxGiven :1; unsigned HSMHV2vgsrMaxGiven :1; unsigned HSMHV2vgdrMaxGiven :1; unsigned HSMHV2vgbrMaxGiven :1; unsigned HSMHV2vbsrMaxGiven :1; unsigned HSMHV2vbdrMaxGiven :1; } HSMHV2model; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ #define HSMHV2_BAD_PARAM -1 /* flags */ #define HSMHV2_MOD_NMOS 1 #define HSMHV2_MOD_PMOS 2 #define HSMHV2_MOD_LEVEL 3 #define HSMHV2_MOD_INFO 4 #define HSMHV2_MOD_NOISE 5 #define HSMHV2_MOD_VERSION 6 #define HSMHV2_MOD_SHOW 7 #define HSMHV2_MOD_CORSRD 11 #define HSMHV2_MOD_COIPRV 12 #define HSMHV2_MOD_COPPRV 13 #define HSMHV2_MOD_COADOV 17 #define HSMHV2_MOD_COISUB 21 #define HSMHV2_MOD_COIIGS 22 #define HSMHV2_MOD_COGIDL 23 #define HSMHV2_MOD_COOVLP 24 #define HSMHV2_MOD_COOVLPS 8 #define HSMHV2_MOD_COFLICK 25 #define HSMHV2_MOD_COISTI 26 #define HSMHV2_MOD_CONQS 29 #define HSMHV2_MOD_COTHRML 30 #define HSMHV2_MOD_COIGN 31 /* Induced gate noise */ #define HSMHV2_MOD_CORG 32 #define HSMHV2_MOD_CORBNET 33 #define HSMHV2_MOD_CODFM 36 /* DFM */ #define HSMHV2_MOD_COQOVSM 34 #define HSMHV2_MOD_COSELFHEAT 35 /* Self-heating model--SHE-- */ #define HSMHV2_MOD_COSUBNODE 48 #define HSMHV2_MOD_COSYM 37 /* Symmery model for HV */ #define HSMHV2_MOD_COTEMP 38 #define HSMHV2_MOD_COLDRIFT 39 #define HSMHV2_MOD_CORDRIFT 40 #define HSMHV2_MOD_COERRREP 44 #define HSMHV2_MOD_CODEP 45 #define HSMHV2_MOD_CODDLT 46 /* device parameters */ #define HSMHV2_COSELFHEAT 49 #define HSMHV2_COSUBNODE 50 #define HSMHV2_L 51 #define HSMHV2_W 52 #define HSMHV2_AD 53 #define HSMHV2_AS 54 #define HSMHV2_PD 55 #define HSMHV2_PS 56 #define HSMHV2_NRD 57 #define HSMHV2_NRS 58 /* #define HSMHV2_TEMP 59 not used */ #define HSMHV2_DTEMP 60 #define HSMHV2_OFF 61 #define HSMHV2_IC_VBS 62 #define HSMHV2_IC_VDS 63 #define HSMHV2_IC_VGS 64 #define HSMHV2_IC 65 #define HSMHV2_CORBNET 66 #define HSMHV2_RBPB 67 #define HSMHV2_RBPD 68 #define HSMHV2_RBPS 69 #define HSMHV2_RBDB 70 #define HSMHV2_RBSB 71 #define HSMHV2_CORG 72 /* #define HSMHV2_RSHG 73 */ #define HSMHV2_NGCON 74 #define HSMHV2_XGW 75 #define HSMHV2_XGL 76 #define HSMHV2_NF 77 #define HSMHV2_SA 78 #define HSMHV2_SB 79 #define HSMHV2_SD 80 #define HSMHV2_NSUBCDFM 82 #define HSMHV2_M 83 #define HSMHV2_SUBLD1 86 #define HSMHV2_SUBLD2 87 #define HSMHV2_LOVER 41 #define HSMHV2_LOVERS 42 #define HSMHV2_LOVERLD 43 #define HSMHV2_LDRIFT1 88 #define HSMHV2_LDRIFT2 89 #define HSMHV2_LDRIFT1S 90 #define HSMHV2_LDRIFT2S 91 /* #define HSMHV2_RTH0 84 not used */ /* #define HSMHV2_CTH0 85 not used */ /* model parameters */ #define HSMHV2_MOD_VBSMIN 198 #define HSMHV2_MOD_VMAX 500 #define HSMHV2_MOD_VMAXT1 503 #define HSMHV2_MOD_VMAXT2 504 #define HSMHV2_MOD_BGTMP1 101 #define HSMHV2_MOD_BGTMP2 102 #define HSMHV2_MOD_EG0 103 #define HSMHV2_MOD_TOX 104 #define HSMHV2_MOD_XLD 105 #define HSMHV2_MOD_LOVER 106 #define HSMHV2_MOD_LOVERS 385 #define HSMHV2_MOD_RDOV11 313 #define HSMHV2_MOD_RDOV12 314 #define HSMHV2_MOD_RDOV13 476 #define HSMHV2_MOD_RDSLP1 315 #define HSMHV2_MOD_RDICT1 316 #define HSMHV2_MOD_RDSLP2 317 #define HSMHV2_MOD_RDICT2 318 #define HSMHV2_MOD_LOVERLD 436 #define HSMHV2_MOD_LDRIFT1 319 #define HSMHV2_MOD_LDRIFT2 320 #define HSMHV2_MOD_LDRIFT1S 324 #define HSMHV2_MOD_LDRIFT2S 325 #define HSMHV2_MOD_SUBLD1 321 #define HSMHV2_MOD_SUBLD1L 329 #define HSMHV2_MOD_SUBLD1LP 330 #define HSMHV2_MOD_SUBLD2 322 #define HSMHV2_MOD_XPDV 326 #define HSMHV2_MOD_XPVDTH 327 #define HSMHV2_MOD_XPVDTHG 328 #define HSMHV2_MOD_DDLTMAX 421 /* Vdseff */ #define HSMHV2_MOD_DDLTSLP 422 /* Vdseff */ #define HSMHV2_MOD_DDLTICT 423 /* Vdseff */ #define HSMHV2_MOD_VFBOVER 428 #define HSMHV2_MOD_NOVER 430 #define HSMHV2_MOD_NOVERS 431 #define HSMHV2_MOD_XWD 107 #define HSMHV2_MOD_XWDC 513 #define HSMHV2_MOD_XL 112 #define HSMHV2_MOD_XW 117 #define HSMHV2_MOD_SAREF 433 #define HSMHV2_MOD_SBREF 434 #define HSMHV2_MOD_LL 108 #define HSMHV2_MOD_LLD 109 #define HSMHV2_MOD_LLN 110 #define HSMHV2_MOD_WL 111 #define HSMHV2_MOD_WL1 113 #define HSMHV2_MOD_WL1P 114 #define HSMHV2_MOD_WL2 407 #define HSMHV2_MOD_WL2P 408 #define HSMHV2_MOD_WLD 115 #define HSMHV2_MOD_WLN 116 #define HSMHV2_MOD_XQY 178 #define HSMHV2_MOD_XQY1 118 #define HSMHV2_MOD_XQY2 120 #define HSMHV2_MOD_RSH 119 #define HSMHV2_MOD_RSHG 384 /* #define HSMHV2_MOD_NGCON 385 */ /* #define HSMHV2_MOD_XGW 386 */ /* #define HSMHV2_MOD_XGL 387 */ /* #define HSMHV2_MOD_NF 388 */ #define HSMHV2_MOD_RS 398 #define HSMHV2_MOD_RD 399 #define HSMHV2_MOD_VFBC 121 #define HSMHV2_MOD_VBI 122 #define HSMHV2_MOD_NSUBC 123 #define HSMHV2_MOD_TNOM 124 #define HSMHV2_MOD_PARL2 125 #define HSMHV2_MOD_SC1 126 #define HSMHV2_MOD_SC2 127 #define HSMHV2_MOD_SC3 128 #define HSMHV2_MOD_SC4 248 #define HSMHV2_MOD_NDEP 129 #define HSMHV2_MOD_NDEPL 419 #define HSMHV2_MOD_NDEPLP 420 #define HSMHV2_MOD_NINV 130 #define HSMHV2_MOD_NINVD 505 #define HSMHV2_MOD_NINVDW 506 #define HSMHV2_MOD_NINVDWP 507 #define HSMHV2_MOD_NINVDT1 508 #define HSMHV2_MOD_NINVDT2 509 #define HSMHV2_MOD_MUECB0 131 #define HSMHV2_MOD_MUECB1 132 #define HSMHV2_MOD_MUEPH1 133 #define HSMHV2_MOD_MUEPH0 134 #define HSMHV2_MOD_MUEPHW 135 #define HSMHV2_MOD_MUEPWP 136 #define HSMHV2_MOD_MUEPHL 137 #define HSMHV2_MOD_MUEPLP 138 #define HSMHV2_MOD_MUEPHS 139 #define HSMHV2_MOD_MUEPSP 140 #define HSMHV2_MOD_VTMP 141 #define HSMHV2_MOD_WVTH0 142 #define HSMHV2_MOD_MUESR1 143 #define HSMHV2_MOD_MUESR0 144 #define HSMHV2_MOD_MUESRL 145 #define HSMHV2_MOD_MUESLP 146 #define HSMHV2_MOD_MUESRW 147 #define HSMHV2_MOD_MUESWP 148 #define HSMHV2_MOD_BB 149 #define HSMHV2_MOD_SUB1 151 #define HSMHV2_MOD_SUB2 152 #define HSMHV2_MOD_CGSO 154 #define HSMHV2_MOD_CGDO 155 #define HSMHV2_MOD_CGBO 156 #define HSMHV2_MOD_JS0 157 #define HSMHV2_MOD_JS0SW 158 #define HSMHV2_MOD_NJ 159 #define HSMHV2_MOD_NJSW 160 #define HSMHV2_MOD_XTI 161 #define HSMHV2_MOD_CJ 162 #define HSMHV2_MOD_CJSW 163 #define HSMHV2_MOD_CJSWG 164 #define HSMHV2_MOD_MJ 165 #define HSMHV2_MOD_MJSW 166 #define HSMHV2_MOD_MJSWG 167 #define HSMHV2_MOD_XTI2 168 #define HSMHV2_MOD_CISB 169 #define HSMHV2_MOD_CVB 170 #define HSMHV2_MOD_CTEMP 171 #define HSMHV2_MOD_CISBK 172 #define HSMHV2_MOD_CVBK 173 #define HSMHV2_MOD_DIVX 174 #define HSMHV2_MOD_PB 175 #define HSMHV2_MOD_PBSW 176 #define HSMHV2_MOD_PBSWG 177 #define HSMHV2_MOD_TPOLY 179 /* #define HSMHV2_MOD_TPOLYLD not used */ #define HSMHV2_MOD_LP 180 #define HSMHV2_MOD_NSUBP 181 #define HSMHV2_MOD_NSUBP0 182 #define HSMHV2_MOD_NSUBWP 183 #define HSMHV2_MOD_NDEPM 600 #define HSMHV2_MOD_TNDEP 601 #define HSMHV2_MOD_DEPMUE0 605 #define HSMHV2_MOD_DEPMUE1 606 #define HSMHV2_MOD_DEPMUEBACK0 607 #define HSMHV2_MOD_DEPMUEBACK1 608 #define HSMHV2_MOD_DEPVMAX 609 #define HSMHV2_MOD_DEPBB 610 #define HSMHV2_MOD_DEPVDSEF1 611 #define HSMHV2_MOD_DEPVDSEF2 612 #define HSMHV2_MOD_DEPMUEPH0 613 #define HSMHV2_MOD_DEPMUEPH1 614 #define HSMHV2_MOD_DEPLEAK 615 #define HSMHV2_MOD_DEPETA 616 #define HSMHV2_MOD_DEPVTMP 617 #define HSMHV2_MOD_DEPMUETMP 618 #define HSMHV2_MOD_ISBREAK 619 #define HSMHV2_MOD_RWELL 620 #define HSMHV2_MOD_SCP1 184 #define HSMHV2_MOD_SCP2 185 #define HSMHV2_MOD_SCP3 186 #define HSMHV2_MOD_PGD1 187 #define HSMHV2_MOD_PGD2 188 //#define HSMHV2_MOD_PGD3 #define HSMHV2_MOD_PGD4 190 #define HSMHV2_MOD_CLM1 191 #define HSMHV2_MOD_CLM2 192 #define HSMHV2_MOD_CLM3 193 #define HSMHV2_MOD_CLM5 402 #define HSMHV2_MOD_CLM6 403 #define HSMHV2_MOD_MUETMP 195 #define HSMHV2_MOD_VOVER 199 #define HSMHV2_MOD_VOVERP 200 #define HSMHV2_MOD_WFC 201 #define HSMHV2_MOD_NSUBCW 249 #define HSMHV2_MOD_NSUBCWP 250 #define HSMHV2_MOD_QME1 202 #define HSMHV2_MOD_QME2 203 #define HSMHV2_MOD_QME3 204 #define HSMHV2_MOD_GIDL1 205 #define HSMHV2_MOD_GIDL2 206 #define HSMHV2_MOD_GIDL3 207 #define HSMHV2_MOD_GLEAK1 208 #define HSMHV2_MOD_GLEAK2 209 #define HSMHV2_MOD_GLEAK3 210 #define HSMHV2_MOD_GLEAK4 211 #define HSMHV2_MOD_GLEAK5 212 #define HSMHV2_MOD_GLEAK6 213 #define HSMHV2_MOD_GLEAK7 214 #define HSMHV2_MOD_GLPART1 406 #define HSMHV2_MOD_GLKSD1 215 #define HSMHV2_MOD_GLKSD2 216 #define HSMHV2_MOD_GLKSD3 217 #define HSMHV2_MOD_GLKB1 218 #define HSMHV2_MOD_GLKB2 219 #define HSMHV2_MOD_GLKB3 429 #define HSMHV2_MOD_EGIG 220 #define HSMHV2_MOD_IGTEMP2 221 #define HSMHV2_MOD_IGTEMP3 222 #define HSMHV2_MOD_VZADD0 223 #define HSMHV2_MOD_PZADD0 224 #define HSMHV2_MOD_NSTI 225 #define HSMHV2_MOD_WSTI 226 #define HSMHV2_MOD_WSTIL 227 #define HSMHV2_MOD_WSTILP 231 #define HSMHV2_MOD_WSTIW 234 #define HSMHV2_MOD_WSTIWP 228 #define HSMHV2_MOD_SCSTI1 229 #define HSMHV2_MOD_SCSTI2 230 #define HSMHV2_MOD_VTHSTI 232 #define HSMHV2_MOD_VDSTI 233 #define HSMHV2_MOD_MUESTI1 235 #define HSMHV2_MOD_MUESTI2 236 #define HSMHV2_MOD_MUESTI3 237 #define HSMHV2_MOD_NSUBPSTI1 238 #define HSMHV2_MOD_NSUBPSTI2 239 #define HSMHV2_MOD_NSUBPSTI3 240 #define HSMHV2_MOD_LPEXT 241 #define HSMHV2_MOD_NPEXT 242 #define HSMHV2_MOD_SCP22 243 #define HSMHV2_MOD_SCP21 244 #define HSMHV2_MOD_BS1 245 #define HSMHV2_MOD_BS2 246 #define HSMHV2_MOD_KAPPA 251 //#define HSMHV2_MOD_PTHROU 253 #define HSMHV2_MOD_VDIFFJ 254 #define HSMHV2_MOD_DLY1 255 #define HSMHV2_MOD_DLY2 256 #define HSMHV2_MOD_DLY3 257 #define HSMHV2_MOD_NFTRP 258 #define HSMHV2_MOD_NFALP 259 #define HSMHV2_MOD_CIT 260 #define HSMHV2_MOD_FALPH 263 #define HSMHV2_MOD_OVSLP 261 #define HSMHV2_MOD_OVMAG 262 #define HSMHV2_MOD_GIDL4 281 #define HSMHV2_MOD_GIDL5 282 #define HSMHV2_MOD_SVGS 283 #define HSMHV2_MOD_SVBS 284 #define HSMHV2_MOD_SVBSL 285 #define HSMHV2_MOD_SVDS 286 #define HSMHV2_MOD_SLG 287 #define HSMHV2_MOD_SUB1L 290 #define HSMHV2_MOD_SUB2L 292 #define HSMHV2_MOD_FN1 294 #define HSMHV2_MOD_FN2 295 #define HSMHV2_MOD_FN3 296 #define HSMHV2_MOD_FVBS 297 #define HSMHV2_MOD_VOVERS 303 #define HSMHV2_MOD_VOVERSP 304 #define HSMHV2_MOD_SVGSL 305 #define HSMHV2_MOD_SVGSLP 306 #define HSMHV2_MOD_SVGSWP 307 #define HSMHV2_MOD_SVGSW 308 #define HSMHV2_MOD_SVBSLP 309 #define HSMHV2_MOD_SLGL 310 #define HSMHV2_MOD_SLGLP 311 #define HSMHV2_MOD_SUB1LP 312 #define HSMHV2_MOD_IBPC1 404 #define HSMHV2_MOD_IBPC1L 331 #define HSMHV2_MOD_IBPC1LP 332 #define HSMHV2_MOD_IBPC2 405 #define HSMHV2_MOD_MPHDFM 409 #define HSMHV2_MOD_PTL 530 #define HSMHV2_MOD_PTP 531 #define HSMHV2_MOD_PT2 532 #define HSMHV2_MOD_PTLP 533 #define HSMHV2_MOD_GDL 534 #define HSMHV2_MOD_GDLP 535 #define HSMHV2_MOD_GDLD 536 #define HSMHV2_MOD_PT4 537 #define HSMHV2_MOD_PT4P 538 #define HSMHV2_MOD_RDVG11 424 #define HSMHV2_MOD_RDVG12 425 #define HSMHV2_MOD_RTH0 432 #define HSMHV2_MOD_CTH0 462 #define HSMHV2_MOD_POWRAT 463 /* #define HSMHV2_MOD_WTH0 463 /\*---------SHE----------*\/ */ #define HSMHV2_MOD_DLYOV 437 #define HSMHV2_MOD_QDFTVD 438 #define HSMHV2_MOD_XLDLD 439 #define HSMHV2_MOD_XWDLD 494 #define HSMHV2_MOD_RDVD 510 #define HSMHV2_MOD_RDVB 301 #define HSMHV2_MOD_RDVSUB 481 /* substrate effect */ #define HSMHV2_MOD_RDVDSUB 482 /* substrate effect */ #define HSMHV2_MOD_DDRIFT 483 /* substrate effect */ #define HSMHV2_MOD_VBISUB 484 /* substrate effect */ #define HSMHV2_MOD_NSUBSUB 485 /* substrate effect */ //#define HSMHV2_MOD_QOVSM 323 //#define HSMHV2_MOD_LDRIFT 458 #define HSMHV2_MOD_RD20 447 #define HSMHV2_MOD_RD21 441 #define HSMHV2_MOD_RD22 442 #define HSMHV2_MOD_RD22D 478 #define HSMHV2_MOD_RD23 443 #define HSMHV2_MOD_RD24 444 #define HSMHV2_MOD_RD25 445 #define HSMHV2_MOD_RDVDL 448 #define HSMHV2_MOD_RDVDLP 449 #define HSMHV2_MOD_RDVDS 450 #define HSMHV2_MOD_RDVDSP 451 #define HSMHV2_MOD_RD23L 452 #define HSMHV2_MOD_RD23LP 453 #define HSMHV2_MOD_RD23S 454 #define HSMHV2_MOD_RD23SP 455 #define HSMHV2_MOD_RDS 456 #define HSMHV2_MOD_RDSP 457 #define HSMHV2_MOD_RDTEMP1 461 #define HSMHV2_MOD_RDTEMP2 464 #define HSMHV2_MOD_RTH0R 470 #define HSMHV2_MOD_RDVDTEMP1 471 #define HSMHV2_MOD_RDVDTEMP2 472 #define HSMHV2_MOD_RTH0W 473 #define HSMHV2_MOD_RTH0WP 474 #define HSMHV2_MOD_RTH0NF 475 #define HSMHV2_MOD_RTHTEMP1 490 #define HSMHV2_MOD_RTHTEMP2 491 #define HSMHV2_MOD_PRATTEMP1 492 #define HSMHV2_MOD_PRATTEMP2 493 #define HSMHV2_MOD_CVDSOVER 480 #define HSMHV2_MOD_RDRMUE 520 #define HSMHV2_MOD_RDRVMAX 521 #define HSMHV2_MOD_RDRMUETMP 522 #define HSMHV2_MOD_M0LEAK 524 #define HSMHV2_MOD_M0LEAKTMP 525 #define HSMHV2_MOD_LEAKVMAX 543 #define HSMHV2_MOD_M0TEMP1 551 #define HSMHV2_MOD_M0TEMP2 553 #define HSMHV2_MOD_RDRVTMP 523 #define HSMHV2_MOD_RDRDJUNC 527 #define HSMHV2_MOD_RDRCX 528 #define HSMHV2_MOD_RDRCAR 529 #define HSMHV2_MOD_RDRDL1 540 #define HSMHV2_MOD_RDRDL2 541 #define HSMHV2_MOD_RDRVMAXW 544 #define HSMHV2_MOD_RDRVMAXWP 545 #define HSMHV2_MOD_RDRVMAXL 546 #define HSMHV2_MOD_RDRVMAXLP 547 #define HSMHV2_MOD_RDRMUEL 548 #define HSMHV2_MOD_RDRMUELP 549 #define HSMHV2_MOD_RDRQOVER 552 #define HSMHV2_MOD_QOVADD 338 #define HSMHV2_MOD_JS0D 100 #define HSMHV2_MOD_JS0SWD 150 #define HSMHV2_MOD_NJD 153 #define HSMHV2_MOD_NJSWD 189 #define HSMHV2_MOD_XTID 194 #define HSMHV2_MOD_CJD 196 #define HSMHV2_MOD_CJSWD 197 #define HSMHV2_MOD_CJSWGD 247 #define HSMHV2_MOD_MJD 252 #define HSMHV2_MOD_MJSWD 253 #define HSMHV2_MOD_MJSWGD 264 #define HSMHV2_MOD_PBD 265 #define HSMHV2_MOD_PBSWD 266 #define HSMHV2_MOD_PBSWDG 267 #define HSMHV2_MOD_XTI2D 268 #define HSMHV2_MOD_CISBD 269 #define HSMHV2_MOD_CVBD 270 #define HSMHV2_MOD_CTEMPD 271 #define HSMHV2_MOD_CISBKD 272 #define HSMHV2_MOD_DIVXD 274 #define HSMHV2_MOD_VDIFFJD 275 #define HSMHV2_MOD_JS0S 276 #define HSMHV2_MOD_JS0SWS 277 #define HSMHV2_MOD_NJS 278 #define HSMHV2_MOD_NJSWS 279 #define HSMHV2_MOD_XTIS 280 #define HSMHV2_MOD_CJS 288 #define HSMHV2_MOD_CJSSW 289 #define HSMHV2_MOD_CJSWGS 291 #define HSMHV2_MOD_MJS 293 #define HSMHV2_MOD_MJSWS 298 #define HSMHV2_MOD_MJSWGS 299 #define HSMHV2_MOD_PBS 300 #define HSMHV2_MOD_PBSWS 302 #define HSMHV2_MOD_PBSWSG 323 #define HSMHV2_MOD_XTI2S 333 #define HSMHV2_MOD_CISBS 334 #define HSMHV2_MOD_CVBS 335 #define HSMHV2_MOD_CTEMPS 336 #define HSMHV2_MOD_CISBKS 337 #define HSMHV2_MOD_DIVXS 339 #define HSMHV2_MOD_VDIFFJS 340 #define HSMHV2_MOD_SHEMAX 501 #define HSMHV2_MOD_VGSMIN 502 #define HSMHV2_MOD_GDSLEAK 511 #define HSMHV2_MOD_RDRBB 273 #define HSMHV2_MOD_RDRBBTMP 602 /* binning parameters */ #define HSMHV2_MOD_LMIN 1000 #define HSMHV2_MOD_LMAX 1001 #define HSMHV2_MOD_WMIN 1002 #define HSMHV2_MOD_WMAX 1003 #define HSMHV2_MOD_LBINN 1004 #define HSMHV2_MOD_WBINN 1005 /* Length dependence */ #define HSMHV2_MOD_LVMAX 1100 #define HSMHV2_MOD_LBGTMP1 1101 #define HSMHV2_MOD_LBGTMP2 1102 #define HSMHV2_MOD_LEG0 1103 #define HSMHV2_MOD_LVFBOVER 1428 #define HSMHV2_MOD_LNOVER 1430 #define HSMHV2_MOD_LNOVERS 1431 #define HSMHV2_MOD_LWL2 1407 #define HSMHV2_MOD_LVFBC 1121 #define HSMHV2_MOD_LNSUBC 1123 #define HSMHV2_MOD_LNSUBP 1181 #define HSMHV2_MOD_LSCP1 1184 #define HSMHV2_MOD_LSCP2 1185 #define HSMHV2_MOD_LSCP3 1186 #define HSMHV2_MOD_LSC1 1126 #define HSMHV2_MOD_LSC2 1127 #define HSMHV2_MOD_LSC3 1128 #define HSMHV2_MOD_LPGD1 1187 //#define HSMHV2_MOD_LPGD3 1189 #define HSMHV2_MOD_LNDEP 1129 #define HSMHV2_MOD_LNINV 1130 #define HSMHV2_MOD_LMUECB0 1131 #define HSMHV2_MOD_LMUECB1 1132 #define HSMHV2_MOD_LMUEPH1 1133 #define HSMHV2_MOD_LVTMP 1141 #define HSMHV2_MOD_LWVTH0 1142 #define HSMHV2_MOD_LMUESR1 1143 #define HSMHV2_MOD_LMUETMP 1195 #define HSMHV2_MOD_LSUB1 1151 #define HSMHV2_MOD_LSUB2 1152 #define HSMHV2_MOD_LSVDS 1286 #define HSMHV2_MOD_LSVBS 1284 #define HSMHV2_MOD_LSVGS 1283 #define HSMHV2_MOD_LFN1 1294 #define HSMHV2_MOD_LFN2 1295 #define HSMHV2_MOD_LFN3 1296 #define HSMHV2_MOD_LFVBS 1297 #define HSMHV2_MOD_LNSTI 1225 #define HSMHV2_MOD_LWSTI 1226 #define HSMHV2_MOD_LSCSTI1 1229 #define HSMHV2_MOD_LSCSTI2 1230 #define HSMHV2_MOD_LVTHSTI 1232 #define HSMHV2_MOD_LMUESTI1 1235 #define HSMHV2_MOD_LMUESTI2 1236 #define HSMHV2_MOD_LMUESTI3 1237 #define HSMHV2_MOD_LNSUBPSTI1 1238 #define HSMHV2_MOD_LNSUBPSTI2 1239 #define HSMHV2_MOD_LNSUBPSTI3 1240 #define HSMHV2_MOD_LCGSO 1154 #define HSMHV2_MOD_LCGDO 1155 #define HSMHV2_MOD_LJS0 1157 #define HSMHV2_MOD_LJS0SW 1158 #define HSMHV2_MOD_LNJ 1159 #define HSMHV2_MOD_LCISBK 1172 #define HSMHV2_MOD_LCLM1 1191 #define HSMHV2_MOD_LCLM2 1192 #define HSMHV2_MOD_LCLM3 1193 #define HSMHV2_MOD_LWFC 1201 #define HSMHV2_MOD_LGIDL1 1205 #define HSMHV2_MOD_LGIDL2 1206 #define HSMHV2_MOD_LGLEAK1 1208 #define HSMHV2_MOD_LGLEAK2 1209 #define HSMHV2_MOD_LGLEAK3 1210 #define HSMHV2_MOD_LGLEAK6 1213 #define HSMHV2_MOD_LGLKSD1 1215 #define HSMHV2_MOD_LGLKSD2 1216 #define HSMHV2_MOD_LGLKB1 1218 #define HSMHV2_MOD_LGLKB2 1219 #define HSMHV2_MOD_LNFTRP 1258 #define HSMHV2_MOD_LNFALP 1259 //#define HSMHV2_MOD_LPTHROU 1253 #define HSMHV2_MOD_LVDIFFJ 1254 #define HSMHV2_MOD_LIBPC1 1404 #define HSMHV2_MOD_LIBPC2 1405 #define HSMHV2_MOD_LCGBO 1156 #define HSMHV2_MOD_LCVDSOVER 1480 #define HSMHV2_MOD_LFALPH 1263 #define HSMHV2_MOD_LNPEXT 1242 #define HSMHV2_MOD_LPOWRAT 1463 #define HSMHV2_MOD_LRD 1399 #define HSMHV2_MOD_LRD22 1442 #define HSMHV2_MOD_LRD23 1443 #define HSMHV2_MOD_LRD24 1444 #define HSMHV2_MOD_LRDICT1 1316 #define HSMHV2_MOD_LRDOV13 1476 #define HSMHV2_MOD_LRDSLP1 1315 #define HSMHV2_MOD_LRDVB 1301 #define HSMHV2_MOD_LRDVD 1510 #define HSMHV2_MOD_LRDVG11 1424 #define HSMHV2_MOD_LRS 1398 #define HSMHV2_MOD_LRTH0 1432 #define HSMHV2_MOD_LVOVER 1199 #define HSMHV2_MOD_LJS0D 345 #define HSMHV2_MOD_LJS0SWD 370 #define HSMHV2_MOD_LNJD 372 #define HSMHV2_MOD_LCISBKD 386 #define HSMHV2_MOD_LVDIFFJD 387 #define HSMHV2_MOD_LJS0S 388 #define HSMHV2_MOD_LJS0SWS 395 #define HSMHV2_MOD_LNJS 396 #define HSMHV2_MOD_LCISBKS 397 #define HSMHV2_MOD_LVDIFFJS 400 /* Width dependence */ #define HSMHV2_MOD_WVMAX 2100 #define HSMHV2_MOD_WBGTMP1 2101 #define HSMHV2_MOD_WBGTMP2 2102 #define HSMHV2_MOD_WEG0 2103 #define HSMHV2_MOD_WVFBOVER 2428 #define HSMHV2_MOD_WNOVER 2430 #define HSMHV2_MOD_WNOVERS 2431 #define HSMHV2_MOD_WWL2 2407 #define HSMHV2_MOD_WVFBC 2121 #define HSMHV2_MOD_WNSUBC 2123 #define HSMHV2_MOD_WNSUBP 2181 #define HSMHV2_MOD_WSCP1 2184 #define HSMHV2_MOD_WSCP2 2185 #define HSMHV2_MOD_WSCP3 2186 #define HSMHV2_MOD_WSC1 2126 #define HSMHV2_MOD_WSC2 2127 #define HSMHV2_MOD_WSC3 2128 #define HSMHV2_MOD_WPGD1 2187 //#define HSMHV2_MOD_WPGD3 2189 #define HSMHV2_MOD_WNDEP 2129 #define HSMHV2_MOD_WNINV 2130 #define HSMHV2_MOD_WMUECB0 2131 #define HSMHV2_MOD_WMUECB1 2132 #define HSMHV2_MOD_WMUEPH1 2133 #define HSMHV2_MOD_WVTMP 2141 #define HSMHV2_MOD_WWVTH0 2142 #define HSMHV2_MOD_WMUESR1 2143 #define HSMHV2_MOD_WMUETMP 2195 #define HSMHV2_MOD_WSUB1 2151 #define HSMHV2_MOD_WSUB2 2152 #define HSMHV2_MOD_WSVDS 2286 #define HSMHV2_MOD_WSVBS 2284 #define HSMHV2_MOD_WSVGS 2283 #define HSMHV2_MOD_WFN1 2294 #define HSMHV2_MOD_WFN2 2295 #define HSMHV2_MOD_WFN3 2296 #define HSMHV2_MOD_WFVBS 2297 #define HSMHV2_MOD_WNSTI 2225 #define HSMHV2_MOD_WWSTI 2226 #define HSMHV2_MOD_WSCSTI1 2229 #define HSMHV2_MOD_WSCSTI2 2230 #define HSMHV2_MOD_WVTHSTI 2232 #define HSMHV2_MOD_WMUESTI1 2235 #define HSMHV2_MOD_WMUESTI2 2236 #define HSMHV2_MOD_WMUESTI3 2237 #define HSMHV2_MOD_WNSUBPSTI1 2238 #define HSMHV2_MOD_WNSUBPSTI2 2239 #define HSMHV2_MOD_WNSUBPSTI3 2240 #define HSMHV2_MOD_WCGSO 2154 #define HSMHV2_MOD_WCGDO 2155 #define HSMHV2_MOD_WJS0 2157 #define HSMHV2_MOD_WJS0SW 2158 #define HSMHV2_MOD_WNJ 2159 #define HSMHV2_MOD_WCISBK 2172 #define HSMHV2_MOD_WCLM1 2191 #define HSMHV2_MOD_WCLM2 2192 #define HSMHV2_MOD_WCLM3 2193 #define HSMHV2_MOD_WWFC 2201 #define HSMHV2_MOD_WGIDL1 2205 #define HSMHV2_MOD_WGIDL2 2206 #define HSMHV2_MOD_WGLEAK1 2208 #define HSMHV2_MOD_WGLEAK2 2209 #define HSMHV2_MOD_WGLEAK3 2210 #define HSMHV2_MOD_WGLEAK6 2213 #define HSMHV2_MOD_WGLKSD1 2215 #define HSMHV2_MOD_WGLKSD2 2216 #define HSMHV2_MOD_WGLKB1 2218 #define HSMHV2_MOD_WGLKB2 2219 #define HSMHV2_MOD_WNFTRP 2258 #define HSMHV2_MOD_WNFALP 2259 //#define HSMHV2_MOD_WPTHROU 2253 #define HSMHV2_MOD_WVDIFFJ 2254 #define HSMHV2_MOD_WIBPC1 2404 #define HSMHV2_MOD_WIBPC2 2405 #define HSMHV2_MOD_WCGBO 2156 #define HSMHV2_MOD_WCVDSOVER 2480 #define HSMHV2_MOD_WFALPH 2263 #define HSMHV2_MOD_WNPEXT 2242 #define HSMHV2_MOD_WPOWRAT 2463 #define HSMHV2_MOD_WRD 2399 #define HSMHV2_MOD_WRD22 2442 #define HSMHV2_MOD_WRD23 2443 #define HSMHV2_MOD_WRD24 2444 #define HSMHV2_MOD_WRDICT1 2316 #define HSMHV2_MOD_WRDOV13 2476 #define HSMHV2_MOD_WRDSLP1 2315 #define HSMHV2_MOD_WRDVB 2301 #define HSMHV2_MOD_WRDVD 2510 #define HSMHV2_MOD_WRDVG11 2424 #define HSMHV2_MOD_WRS 2398 #define HSMHV2_MOD_WRTH0 2432 #define HSMHV2_MOD_WVOVER 2199 #define HSMHV2_MOD_WJS0D 401 #define HSMHV2_MOD_WJS0SWD 435 #define HSMHV2_MOD_WNJD 440 #define HSMHV2_MOD_WCISBKD 446 #define HSMHV2_MOD_WVDIFFJD 459 #define HSMHV2_MOD_WJS0S 460 #define HSMHV2_MOD_WJS0SWS 467 #define HSMHV2_MOD_WNJS 468 #define HSMHV2_MOD_WCISBKS 469 #define HSMHV2_MOD_WVDIFFJS 477 /* Cross-term dependence */ #define HSMHV2_MOD_PVMAX 3100 #define HSMHV2_MOD_PBGTMP1 3101 #define HSMHV2_MOD_PBGTMP2 3102 #define HSMHV2_MOD_PEG0 3103 #define HSMHV2_MOD_PVFBOVER 3428 #define HSMHV2_MOD_PNOVER 3430 #define HSMHV2_MOD_PNOVERS 3431 #define HSMHV2_MOD_PWL2 3407 #define HSMHV2_MOD_PVFBC 3121 #define HSMHV2_MOD_PNSUBC 3123 #define HSMHV2_MOD_PNSUBP 3181 #define HSMHV2_MOD_PSCP1 3184 #define HSMHV2_MOD_PSCP2 3185 #define HSMHV2_MOD_PSCP3 3186 #define HSMHV2_MOD_PSC1 3126 #define HSMHV2_MOD_PSC2 3127 #define HSMHV2_MOD_PSC3 3128 #define HSMHV2_MOD_PPGD1 3187 //#define HSMHV2_MOD_PPGD3 3189 #define HSMHV2_MOD_PNDEP 3129 #define HSMHV2_MOD_PNINV 3130 #define HSMHV2_MOD_PMUECB0 3131 #define HSMHV2_MOD_PMUECB1 3132 #define HSMHV2_MOD_PMUEPH1 3133 #define HSMHV2_MOD_PVTMP 3141 #define HSMHV2_MOD_PWVTH0 3142 #define HSMHV2_MOD_PMUESR1 3143 #define HSMHV2_MOD_PMUETMP 3195 #define HSMHV2_MOD_PSUB1 3151 #define HSMHV2_MOD_PSUB2 3152 #define HSMHV2_MOD_PSVDS 3286 #define HSMHV2_MOD_PSVBS 3284 #define HSMHV2_MOD_PSVGS 3283 #define HSMHV2_MOD_PFN1 3294 #define HSMHV2_MOD_PFN2 3295 #define HSMHV2_MOD_PFN3 3296 #define HSMHV2_MOD_PFVBS 3297 #define HSMHV2_MOD_PNSTI 3225 #define HSMHV2_MOD_PWSTI 3226 #define HSMHV2_MOD_PSCSTI1 3229 #define HSMHV2_MOD_PSCSTI2 3230 #define HSMHV2_MOD_PVTHSTI 3232 #define HSMHV2_MOD_PMUESTI1 3235 #define HSMHV2_MOD_PMUESTI2 3236 #define HSMHV2_MOD_PMUESTI3 3237 #define HSMHV2_MOD_PNSUBPSTI1 3238 #define HSMHV2_MOD_PNSUBPSTI2 3239 #define HSMHV2_MOD_PNSUBPSTI3 3240 #define HSMHV2_MOD_PCGSO 3154 #define HSMHV2_MOD_PCGDO 3155 #define HSMHV2_MOD_PJS0 3157 #define HSMHV2_MOD_PJS0SW 3158 #define HSMHV2_MOD_PNJ 3159 #define HSMHV2_MOD_PCISBK 3172 #define HSMHV2_MOD_PCLM1 3191 #define HSMHV2_MOD_PCLM2 3192 #define HSMHV2_MOD_PCLM3 3193 #define HSMHV2_MOD_PWFC 3201 #define HSMHV2_MOD_PGIDL1 3205 #define HSMHV2_MOD_PGIDL2 3206 #define HSMHV2_MOD_PGLEAK1 3208 #define HSMHV2_MOD_PGLEAK2 3209 #define HSMHV2_MOD_PGLEAK3 3210 #define HSMHV2_MOD_PGLEAK6 3213 #define HSMHV2_MOD_PGLKSD1 3215 #define HSMHV2_MOD_PGLKSD2 3216 #define HSMHV2_MOD_PGLKB1 3218 #define HSMHV2_MOD_PGLKB2 3219 #define HSMHV2_MOD_PNFTRP 3258 #define HSMHV2_MOD_PNFALP 3259 //#define HSMHV2_MOD_PPTHROU 3253 #define HSMHV2_MOD_PVDIFFJ 3254 #define HSMHV2_MOD_PIBPC1 3404 #define HSMHV2_MOD_PIBPC2 3405 #define HSMHV2_MOD_PCGBO 3156 #define HSMHV2_MOD_PCVDSOVER 3480 #define HSMHV2_MOD_PFALPH 3263 #define HSMHV2_MOD_PNPEXT 3242 #define HSMHV2_MOD_PPOWRAT 3463 #define HSMHV2_MOD_PRD 3399 #define HSMHV2_MOD_PRD22 3442 #define HSMHV2_MOD_PRD23 3443 #define HSMHV2_MOD_PRD24 3444 #define HSMHV2_MOD_PRDICT1 3316 #define HSMHV2_MOD_PRDOV13 3476 #define HSMHV2_MOD_PRDSLP1 3315 #define HSMHV2_MOD_PRDVB 3301 #define HSMHV2_MOD_PRDVD 3510 #define HSMHV2_MOD_PRDVG11 3424 #define HSMHV2_MOD_PRS 3398 #define HSMHV2_MOD_PRTH0 3432 #define HSMHV2_MOD_PVOVER 3199 #define HSMHV2_MOD_PJS0D 479 #define HSMHV2_MOD_PJS0SWD 486 #define HSMHV2_MOD_PNJD 487 #define HSMHV2_MOD_PCISBKD 488 #define HSMHV2_MOD_PVDIFFJD 489 #define HSMHV2_MOD_PJS0S 495 #define HSMHV2_MOD_PJS0SWS 496 #define HSMHV2_MOD_PNJS 497 #define HSMHV2_MOD_PCISBKS 498 #define HSMHV2_MOD_PVDIFFJS 499 /* device requests */ #define HSMHV2_DNODE 341 #define HSMHV2_GNODE 342 #define HSMHV2_SNODE 343 #define HSMHV2_BNODE 344 /* #define HSMHV2_TEMPNODE 345 not used */ #define HSMHV2_DNODEPRIME 346 #define HSMHV2_SNODEPRIME 347 /* #define HSMHV2_BNODEPRIME 395 not used */ /* #define HSMHV2_DBNODE 396 not used */ /* #define HSMHV2_SBNODE 397 not used */ /* #define HSMHV2_VBD 347 */ #define HSMHV2_VBD 466 #define HSMHV2_VBS 348 #define HSMHV2_VGS 349 #define HSMHV2_VDS 350 #define HSMHV2_CD 351 #define HSMHV2_CBS 352 #define HSMHV2_CBD 353 #define HSMHV2_GM 354 #define HSMHV2_GDS 355 #define HSMHV2_GMBS 356 #define HSMHV2_GMT 465 /* #define HSMHV2_ISUBT 466 */ #define HSMHV2_GBD 357 #define HSMHV2_GBS 358 #define HSMHV2_QB 359 #define HSMHV2_CQB 360 /* #define HSMHV2_QTH 467 not used */ /* #define HSMHV2_CQTH 468 not used */ /* #define HSMHV2_CTH 469 not used */ #define HSMHV2_QG 361 #define HSMHV2_CQG 362 #define HSMHV2_QD 363 #define HSMHV2_CQD 364 #define HSMHV2_CGG 365 #define HSMHV2_CGD 366 #define HSMHV2_CGS 367 #define HSMHV2_CBG 368 #define HSMHV2_CAPBD 369 /* #define HSMHV2_CQBD 370 not used */ #define HSMHV2_CAPBS 371 /* #define HSMHV2_CQBS 372 not used */ #define HSMHV2_CDG 373 #define HSMHV2_CDD 374 #define HSMHV2_CDS 375 #define HSMHV2_VON 376 #define HSMHV2_VDSAT 377 #define HSMHV2_QBS 378 #define HSMHV2_QBD 379 #define HSMHV2_SOURCECONDUCT 380 #define HSMHV2_DRAINCONDUCT 381 #define HSMHV2_CBDB 382 #define HSMHV2_CBSB 383 #define HSMHV2_MOD_RBPB 389 #define HSMHV2_MOD_RBPD 390 #define HSMHV2_MOD_RBPS 391 #define HSMHV2_MOD_RBDB 392 #define HSMHV2_MOD_RBSB 393 #define HSMHV2_MOD_GBMIN 394 #define HSMHV2_ISUB 410 #define HSMHV2_ISUBLD 426 #define HSMHV2_IDSIBPC 427 #define HSMHV2_IGIDL 411 #define HSMHV2_IGISL 412 #define HSMHV2_IGD 413 #define HSMHV2_IGS 414 #define HSMHV2_IGB 415 #define HSMHV2_CGSO 416 #define HSMHV2_CGBO 417 #define HSMHV2_CGDO 418 #define HSMHV2_MOD_TCJBD 92 #define HSMHV2_MOD_TCJBS 93 #define HSMHV2_MOD_TCJBDSW 94 #define HSMHV2_MOD_TCJBSSW 95 #define HSMHV2_MOD_TCJBDSWG 96 #define HSMHV2_MOD_TCJBSSWG 97 #define HSMHV2_MOD_VGS_MAX 4001 #define HSMHV2_MOD_VGD_MAX 4002 #define HSMHV2_MOD_VGB_MAX 4003 #define HSMHV2_MOD_VDS_MAX 4004 #define HSMHV2_MOD_VBS_MAX 4005 #define HSMHV2_MOD_VBD_MAX 4006 #define HSMHV2_MOD_VGSR_MAX 4007 #define HSMHV2_MOD_VGDR_MAX 4008 #define HSMHV2_MOD_VGBR_MAX 4009 #define HSMHV2_MOD_VBSR_MAX 4010 #define HSMHV2_MOD_VBDR_MAX 4011 #include "hsmhv2ext.h" /* Prototype has to be adapted! extern void HSMHV2evaluate(double,double,double,HSMHV2instance*,HSMHV2model*, double*,double*,double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, CKTcircuit*); */ #endif /*HSMHV2*/ tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2ext.h0000644000175000017500000000314513546075722023020 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 2 REVISION : 0 ) Model Parameter 'VERSION' : 2.20 FILE : hsmhvext.h DATE : 2014.6.11 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ extern int HSMHV2acLoad(GENmodel *,CKTcircuit*); extern int HSMHV2ask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*); extern int HSMHV2convTest(GENmodel *,CKTcircuit*); extern int HSMHV2getic(GENmodel*,CKTcircuit*); extern int HSMHV2load(GENmodel*,CKTcircuit*); extern int HSMHV2mAsk(CKTcircuit*,GENmodel *,int, IFvalue*); extern int HSMHV2mParam(int,IFvalue*,GENmodel*); extern void HSMHV2mosCap(CKTcircuit*, double, double, double, double*, double, double, double, double, double, double, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*); extern int HSMHV2param(int,IFvalue*,GENinstance*,IFvalue*); extern int HSMHV2pzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int HSMHV2setup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int HSMHV2unsetup(GENmodel*,CKTcircuit*); extern int HSMHV2temp(GENmodel*,CKTcircuit*); extern int HSMHV2trunc(GENmodel*,CKTcircuit*,double*); extern int HSMHV2noise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int HSMHV2soaCheck(CKTcircuit *, GENmodel *); tmpk8ny_4pz/src/spicelib/devices/hisimhv2/hsmhv2init.h0000644000175000017500000000041413546075722023157 0ustar carstencarsten#ifndef _HSMHV2INIT_H #define _HSMHV2INIT_H extern IFparm HSMHV2pTable[ ]; extern IFparm HSMHV2mPTable[ ]; extern char *HSMHV2names[ ]; extern int HSMHV2pTSize; extern int HSMHV2mPTSize; extern int HSMHV2nSize; extern int HSMHV2iSize; extern int HSMHV2mSize; #endif tmpk8ny_4pz/src/spicelib/devices/cktbindnode.c0000644000175000017500000000143413546075722021615 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* CKTbindNode * * bind a node of the specified device of the given type to its place * in the specified circuit. */ #include "ngspice/ngspice.h" #include #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "dev.h" int CKTbindNode(CKTcircuit *ckt, GENinstance *instance, int term, CKTnode *node) { SPICEdev **devs = devices(); int type = instance->GENmodPtr->GENmodType; NG_IGNORE(ckt); if (*(devs[type]->DEVpublic.terms) >= term && term > 0) { /* argh, terminals are counted from 1 */ GENnode(instance)[term - 1] = node->number; return OK; } else { return E_NOTERM; } } tmpk8ny_4pz/src/spicelib/devices/Makefile.am0000644000175000017500000000301713546075722021220 0ustar carstencarsten## Process this file with automake to produce Makefile.in SUBDIRS = \ asrc \ bjt \ bsim1 \ bsim2 \ bsim3 \ bsimsoi \ bsim4 \ bsim4v5 \ bsim4v6 \ bsim4v7 \ bsim3v0 \ bsim3v1 \ bsim3v32 \ bsim3soi_pd \ bsim3soi_fd \ bsim3soi_dd \ cap \ cccs \ ccvs \ cpl \ csw \ dio \ ind \ isrc \ hfet1 \ hfet2 \ hisim2 \ hisimhv1 \ hisimhv2 \ jfet \ jfet2 \ ltra \ mes \ mesa \ mos1 \ mos2 \ mos3 \ mos6 \ mos9 \ res \ soi3 \ sw \ tra \ txl \ urc \ vbic \ vccs \ vcvs \ vdmos \ vsrc \ @VLADEVDIR@ if NDEV_WANTED SUBDIRS += ndev endif if NUMDEV_WANTED SUBDIRS += nbjt nbjt2 numd numd2 numos endif DIST_SUBDIRS = \ asrc \ bjt \ bsim1 \ bsim2 \ bsim3 \ bsimsoi \ bsim4 \ bsim4v5 \ bsim4v6 \ bsim4v7 \ bsim3v0 \ bsim3v1 \ bsim3v32 \ bsim3soi_pd \ bsim3soi_fd \ bsim3soi_dd \ cap \ cccs \ ccvs \ cpl \ csw \ dio \ ind \ isrc \ hfet1 \ hfet2 \ hisim2 \ hisimhv1 \ hisimhv2 \ jfet \ jfet2 \ ltra \ mes \ mesa \ mos1 \ mos2 \ mos3 \ mos6 \ mos9 \ ndev \ res \ soi3 \ sw \ tra \ txl \ urc \ vbic \ vccs \ vcvs \ vdmos \ vsrc \ nbjt \ nbjt2 \ numd \ numd2 \ numos noinst_LTLIBRARIES = libdev.la libdev_la_SOURCES = \ dev.c \ dev.h \ devsup.c \ cktaccept.c \ cktaccept.h \ cktask.c \ cktbindnode.c \ cktcrte.c \ cktfinddev.c \ cktinit.c \ cktsoachk.c \ limit.c EXTRA_DIST = adms/admst AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include -I$(top_srcdir)/src/spicelib/devices AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/dev.h0000644000175000017500000000050313546075722020110 0ustar carstencarsten#ifndef _DEV_H #define _DEV_H void spice_init_devices(void); void spice_destroy_devices(void); int num_devices(void); IFdevice **devices_ptr(void); SPICEdev **devices(void); #ifdef XSPICE int load_opus(char *); int DEVflag(int type); #endif #ifdef DEVLIB void load_alldevs(void); int load_dev(char *name); #endif #endif tmpk8ny_4pz/src/spicelib/devices/mos2/0000755000175000017500000000000013546075722020043 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/mos2/mos2sacl.c0000644000175000017500000007411013546075722021735 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ /* actually load the current ac sensitivity * information into the array previously provided */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/const.h" #include "mos2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS2sAcLoad(GENmodel *inModel, CKTcircuit *ckt) { MOS2model *model = (MOS2model *)inModel; MOS2instance *here; int xnrm; int xrev; double A0; double Apert = 0.0; double DELA; double DELAinv; double gdpr0; double gspr0; double gds0; double gbs0; double gbd0; double gm0; double gmbs0; double gdpr; double gspr; double gds; double gbs; double gbd; double gm; double gmbs; double xcgs0; double xcgd0; double xcgb0; double xbd0; double xbs0; double xcgs; double xcgd; double xcgb; double xbd; double xbs; double vbsOp; double vbdOp; double vspr; double vdpr; double vgs; double vgd; double vgb; double vbs; double vbd; double vds; double ivspr; double ivdpr; double ivgs; double ivgd; double ivgb; double ivbs; double ivbd; double ivds; double cspr; double cdpr; double cgs; double cgd; double cgb; double cbs; double cbd; double cds; double cs0; double csprm0; double cd0; double cdprm0; double cg0; double cb0; double cs; double csprm; double cd; double cdprm; double cg; double cb; double icspr; double icdpr; double icgs; double icgd; double icgb; double icbs; double icbd; double icds; double ics0; double icsprm0; double icd0; double icdprm0; double icg0; double icb0; double ics; double icsprm; double icd; double icdprm; double icg; double icb; double DvDp = 0.0; int i; int flag; int error; int iparmno; double arg; double sarg; double sargsw; double SaveState[44]; int save_mode; SENstruct *info; #ifdef SENSDEBUG printf("MOS2senacload\n"); printf("CKTomega = %.5e\n",ckt->CKTomega); #endif /* SENSDEBUG */ info = ckt->CKTsenInfo; info->SENstatus = PERTURBATION; for( ; model != NULL; model = MOS2nextModel(model)) { for(here = MOS2instances(model); here!= NULL; here = MOS2nextInstance(here)) { /* save the unperturbed values in the state vector */ for(i=0; i <= 16; i++) *(SaveState + i) = *(ckt->CKTstate0 + here->MOS2states + i); *(SaveState + 17) = here->MOS2sourceConductance; *(SaveState + 18) = here->MOS2drainConductance; *(SaveState + 19) = here->MOS2cd; *(SaveState + 20) = here->MOS2cbs; *(SaveState + 21) = here->MOS2cbd; *(SaveState + 22) = here->MOS2gmbs; *(SaveState + 23) = here->MOS2gm; *(SaveState + 24) = here->MOS2gds; *(SaveState + 25) = here->MOS2gbd; *(SaveState + 26) = here->MOS2gbs; *(SaveState + 27) = here->MOS2capbd; *(SaveState + 28) = here->MOS2capbs; *(SaveState + 29) = here->MOS2Cbd; *(SaveState + 30) = here->MOS2Cbdsw; *(SaveState + 31) = here->MOS2Cbs; *(SaveState + 32) = here->MOS2Cbssw; *(SaveState + 33) = here->MOS2f2d; *(SaveState + 34) = here->MOS2f3d; *(SaveState + 35) = here->MOS2f4d; *(SaveState + 36) = here->MOS2f2s; *(SaveState + 37) = here->MOS2f3s; *(SaveState + 38) = here->MOS2f4s; *(SaveState + 39) = here->MOS2cgs; *(SaveState + 40) = here->MOS2cgd; *(SaveState + 41) = here->MOS2cgb; *(SaveState + 42) = here->MOS2vdsat; *(SaveState + 43) = here->MOS2von; save_mode = here->MOS2mode; xnrm=1; xrev=0; if (here->MOS2mode < 0) { xnrm=0; xrev=1; } vbsOp = model->MOS2type * ( *(ckt->CKTrhsOp+here->MOS2bNode) - *(ckt->CKTrhsOp+here->MOS2sNodePrime)); vbdOp = model->MOS2type * ( *(ckt->CKTrhsOp+here->MOS2bNode) - *(ckt->CKTrhsOp+here->MOS2dNodePrime)); vspr = *(ckt->CKTrhsOld + here->MOS2sNode) - *(ckt->CKTrhsOld + here->MOS2sNodePrime) ; ivspr = *(ckt->CKTirhsOld + here->MOS2sNode) - *(ckt->CKTirhsOld + here->MOS2sNodePrime) ; vdpr = *(ckt->CKTrhsOld + here->MOS2dNode) - *(ckt->CKTrhsOld + here->MOS2dNodePrime) ; ivdpr = *(ckt->CKTirhsOld + here->MOS2dNode) - *(ckt->CKTirhsOld + here->MOS2dNodePrime) ; vgb = *(ckt->CKTrhsOld + here->MOS2gNode) - *(ckt->CKTrhsOld + here->MOS2bNode) ; ivgb = *(ckt->CKTirhsOld + here->MOS2gNode) - *(ckt->CKTirhsOld + here->MOS2bNode) ; vbs = *(ckt->CKTrhsOld + here->MOS2bNode) - *(ckt->CKTrhsOld + here->MOS2sNodePrime) ; ivbs = *(ckt->CKTirhsOld + here->MOS2bNode) - *(ckt->CKTirhsOld + here->MOS2sNodePrime) ; vbd = *(ckt->CKTrhsOld + here->MOS2bNode) - *(ckt->CKTrhsOld + here->MOS2dNodePrime) ; ivbd = *(ckt->CKTirhsOld + here->MOS2bNode) - *(ckt->CKTirhsOld + here->MOS2dNodePrime) ; vds = vbs - vbd ; ivds = ivbs - ivbd ; vgs = vgb + vbs ; ivgs = ivgb + ivbs ; vgd = vgb + vbd ; ivgd = ivgb + ivbd ; #ifdef SENSDEBUG printf("senacload instance name %s\n",here->MOS2name); printf("gate = %d ,drain = %d, drainprm = %d\n", here->MOS2gNode,here->MOS2dNode,here->MOS2dNodePrime); printf("source = %d , sourceprm = %d ,body = %d, senparmno = %d\n", here->MOS2sNode ,here->MOS2sNodePrime, here->MOS2bNode,here->MOS2senParmNo); printf("\n without perturbation \n"); #endif /* SENSDEBUG */ /* without perturbation */ *(ckt->CKTstate0 + here->MOS2vbs) = vbsOp; *(ckt->CKTstate0 + here->MOS2vbd) = vbdOp; here->MOS2senPertFlag = ON ; if(info->SENacpertflag == 1){ /* store the unperturbed values of small signal parameters */ if((error = MOS2load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS2senCgs) = here->MOS2cgs; *(here->MOS2senCgd) = here->MOS2cgd; *(here->MOS2senCgb) = here->MOS2cgb; *(here->MOS2senCbd) = here->MOS2capbd; *(here->MOS2senCbs) = here->MOS2capbs; *(here->MOS2senGds) = here->MOS2gds; *(here->MOS2senGbs) = here->MOS2gbs; *(here->MOS2senGbd) = here->MOS2gbd; *(here->MOS2senGm) = here->MOS2gm; *(here->MOS2senGmbs) = here->MOS2gmbs; } xcgs0= *(here->MOS2senCgs) * ckt->CKTomega; xcgd0= *(here->MOS2senCgd) * ckt->CKTomega; xcgb0= *(here->MOS2senCgb) * ckt->CKTomega; xbd0= *(here->MOS2senCbd) * ckt->CKTomega; xbs0= *(here->MOS2senCbs) * ckt->CKTomega; gds0= *(here->MOS2senGds); gbs0= *(here->MOS2senGbs); gbd0= *(here->MOS2senGbd); gm0= *(here->MOS2senGm); gmbs0= *(here->MOS2senGmbs); gdpr0 = here->MOS2drainConductance; gspr0 = here->MOS2sourceConductance; cspr = gspr0 * vspr ; icspr = gspr0 * ivspr ; cdpr = gdpr0 * vdpr ; icdpr = gdpr0 * ivdpr ; cgs = ( - xcgs0 * ivgs ); icgs = xcgs0 * vgs ; cgd = ( - xcgd0 * ivgd ); icgd = xcgd0 * vgd ; cgb = ( - xcgb0 * ivgb ); icgb = xcgb0 * vgb ; cbs = ( gbs0 * vbs - xbs0 * ivbs ); icbs = ( xbs0 * vbs + gbs0 * ivbs ); cbd = ( gbd0 * vbd - xbd0 * ivbd ); icbd = ( xbd0 * vbd + gbd0 * ivbd ); cds = ( gds0 * vds + xnrm * (gm0 * vgs + gmbs0 * vbs) - xrev * (gm0 * vgd + gmbs0 * vbd) ); icds = ( gds0 * ivds + xnrm * (gm0 * ivgs + gmbs0 * ivbs) - xrev * (gm0 * ivgd + gmbs0 * ivbd) ); cs0 = cspr; ics0 = icspr; csprm0 = ( -cspr - cgs - cbs - cds ) ; icsprm0 = ( -icspr - icgs - icbs - icds ) ; cd0 = cdpr; icd0 = icdpr; cdprm0 = ( -cdpr - cgd - cbd + cds ) ; icdprm0 = ( -icdpr - icgd - icbd + icds ) ; cg0 = cgs + cgd + cgb ; icg0 = icgs + icgd + icgb ; cb0 = cbs + cbd - cgb ; icb0 = icbs + icbd - icgb ; #ifdef SENSDEBUG printf("gspr0 = %.7e , gdpr0 = %.7e , gds0 = %.7e, gbs0 = %.7e\n", gspr0,gdpr0,gds0,gbs0); printf("gbd0 = %.7e , gm0 = %.7e , gmbs0 = %.7e\n",gbd0,gm0,gmbs0); printf("xcgs0 = %.7e , xcgd0 = %.7e , xcgb0 = %.7e,", xcgs0,xcgd0,xcgb0); printf("xbd0 = %.7e,xbs0 = %.7e\n", xbd0,xbs0); printf("vbs = %.7e , vbd = %.7e , vgb = %.7e\n",vbs,vbd,vgb); printf("ivbs = %.7e , ivbd = %.7e , ivgb = %.7e\n",ivbs,ivbd,ivgb); printf("cbs0 = %.7e , cbd0 = %.7e , cgb0 = %.7e\n",cbs,cbd,cgb); printf("cb0 = %.7e , cg0 = %.7e , cs0 = %.7e\n",cb0,cg0,cs0); printf("csprm0 = %.7e, cd0 = %.7e, cdprm0 = %.7e\n", csprm0,cd0,cdprm0); printf("icb0 = %.7e , icg0 = %.7e , ics0 = %.7e\n",icb0,icg0,ics0); printf("icsprm0 = %.7e, icd0 = %.7e, icdprm0 = %.7e\n", icsprm0,icd0,icdprm0); printf("\nPerturbation of vbs\n"); #endif /* SENSDEBUG */ /* Perturbation of vbs */ flag = 1; A0 = vbsOp; DELA = info->SENpertfac * CONSTvt0 ; DELAinv = 1.0/DELA; if(info->SENacpertflag == 1){ /* store the values of small signal parameters * corresponding to perturbed vbs */ Apert = A0 + DELA; *(ckt->CKTstate0 + here->MOS2vbs) = Apert; *(ckt->CKTstate0 + here->MOS2vbd) = vbdOp; if((error = MOS2load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS2senCgs + 1) = here->MOS2cgs; *(here->MOS2senCgd + 1) = here->MOS2cgd; *(here->MOS2senCgb + 1) = here->MOS2cgb; *(here->MOS2senCbd + 1) = here->MOS2capbd; *(here->MOS2senCbs + 1) = here->MOS2capbs; *(here->MOS2senGds + 1) = here->MOS2gds; *(here->MOS2senGbs + 1) = here->MOS2gbs; *(here->MOS2senGbd + 1) = here->MOS2gbd; *(here->MOS2senGm + 1) = here->MOS2gm; *(here->MOS2senGmbs + 1) = here->MOS2gmbs; *(ckt->CKTstate0 + here->MOS2vbs) = A0; } goto load; pertvbd: /* Perturbation of vbd */ #ifdef SENSDEBUG printf("\nPerturbation of vbd\n"); #endif /* SENSDEBUG */ flag = 2; A0 = vbdOp; DELA = info->SENpertfac * CONSTvt0 + 1e-8; DELAinv = 1.0/DELA; if(info->SENacpertflag == 1){ /* store the values of small signal parameters * corresponding to perturbed vbd */ Apert = A0 + DELA; *(ckt->CKTstate0 + here->MOS2vbs) = vbsOp; *(ckt->CKTstate0 + here->MOS2vbd) = Apert; if((error = MOS2load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS2senCgs + 2) = here->MOS2cgs; *(here->MOS2senCgd + 2) = here->MOS2cgd; *(here->MOS2senCgb + 2) = here->MOS2cgb; *(here->MOS2senCbd + 2) = here->MOS2capbd; *(here->MOS2senCbs + 2) = here->MOS2capbs; *(here->MOS2senGds + 2) = here->MOS2gds; *(here->MOS2senGbs + 2) = here->MOS2gbs; *(here->MOS2senGbd + 2) = here->MOS2gbd; *(here->MOS2senGm + 2) = here->MOS2gm; *(here->MOS2senGmbs + 2) = here->MOS2gmbs; *(ckt->CKTstate0 + here->MOS2vbd) = A0; } goto load; pertvgb: /* Perturbation of vgb */ #ifdef SENSDEBUG printf("\nPerturbation of vgb\n"); #endif /* SENSDEBUG */ flag = 3; A0 = model->MOS2type * (*(ckt->CKTrhsOp + here->MOS2gNode) - *(ckt->CKTrhsOp + here->MOS2bNode)); DELA = info->SENpertfac * A0 + 1e-8; DELAinv = model->MOS2type * 1.0/DELA; if(info->SENacpertflag == 1){ /* store the values of small signal parameters * corresponding to perturbed vgb */ *(ckt->CKTstate0 + here->MOS2vbs) = vbsOp; *(ckt->CKTstate0 + here->MOS2vbd) = vbdOp; *(ckt->CKTrhsOp + here->MOS2bNode) -= DELA; if((error = MOS2load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS2senCgs + 3) = here->MOS2cgs; *(here->MOS2senCgd + 3) = here->MOS2cgd; *(here->MOS2senCgb + 3) = here->MOS2cgb; *(here->MOS2senCbd + 3) = here->MOS2capbd; *(here->MOS2senCbs + 3) = here->MOS2capbs; *(here->MOS2senGds + 3) = here->MOS2gds; *(here->MOS2senGbs + 3) = here->MOS2gbs; *(here->MOS2senGbd + 3) = here->MOS2gbd; *(here->MOS2senGm + 3) = here->MOS2gm; *(here->MOS2senGmbs + 3) = here->MOS2gmbs; *(ckt->CKTrhsOp + here->MOS2bNode) += DELA; } goto load; pertl: /* Perturbation of length */ if(here->MOS2sens_l == 0){ goto pertw; } #ifdef SENSDEBUG printf("\nPerturbation of length\n"); #endif /* SENSDEBUG */ flag = 4; A0 = here->MOS2l; DELA = info->SENpertfac * A0; DELAinv = 1.0/DELA; if(info->SENacpertflag == 1){ /* store the values of small signal parameters * corresponding to perturbed length */ Apert = A0 + DELA; here->MOS2l = Apert; *(ckt->CKTstate0 + here->MOS2vbs) = vbsOp; *(ckt->CKTstate0 + here->MOS2vbd) = vbdOp; if((error = MOS2load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS2senCgs + 4) = here->MOS2cgs; *(here->MOS2senCgd + 4) = here->MOS2cgd; *(here->MOS2senCgb + 4) = here->MOS2cgb; *(here->MOS2senCbd + 4) = here->MOS2capbd; *(here->MOS2senCbs + 4) = here->MOS2capbs; *(here->MOS2senGds + 4) = here->MOS2gds; *(here->MOS2senGbs + 4) = here->MOS2gbs; *(here->MOS2senGbd + 4) = here->MOS2gbd; *(here->MOS2senGm + 4) = here->MOS2gm; *(here->MOS2senGmbs + 4) = here->MOS2gmbs; here->MOS2l = A0; } goto load; pertw: /* Perturbation of width */ if(here->MOS2sens_w == 0) goto next; #ifdef SENSDEBUG printf("\nPerturbation of width\n"); #endif /* SENSDEBUG */ flag = 5; A0 = here->MOS2w; DELA = info->SENpertfac * A0; DELAinv = 1.0/DELA; Apert = A0 + DELA; if(info->SENacpertflag == 1){ /* store the values of small signal parameters * corresponding to perturbed width */ here->MOS2w = Apert; here->MOS2drainArea *= (1 + info->SENpertfac); here->MOS2sourceArea *= (1 + info->SENpertfac); here->MOS2Cbd *= (1 + info->SENpertfac); here->MOS2Cbs *= (1 + info->SENpertfac); if(here->MOS2drainPerimiter){ here->MOS2Cbdsw += here->MOS2Cbdsw * DELA/here->MOS2drainPerimiter; } if(here->MOS2sourcePerimiter){ here->MOS2Cbssw += here->MOS2Cbssw * DELA/here->MOS2sourcePerimiter; } if(vbdOp >= here->MOS2tDepCap){ arg = 1-model->MOS2fwdCapDepCoeff; sarg = exp( (-model->MOS2bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS2bulkJctSideGradingCoeff) * log(arg) ); here->MOS2f2d = here->MOS2Cbd*(1-model->MOS2fwdCapDepCoeff* (1+model->MOS2bulkJctBotGradingCoeff))* sarg/arg + here->MOS2Cbdsw*(1-model->MOS2fwdCapDepCoeff* (1+model->MOS2bulkJctSideGradingCoeff))* sargsw/arg; here->MOS2f3d = here->MOS2Cbd * model->MOS2bulkJctBotGradingCoeff * sarg/arg/ here->MOS2tBulkPot + here->MOS2Cbdsw * model->MOS2bulkJctSideGradingCoeff * sargsw/arg / here->MOS2tBulkPot; here->MOS2f4d = here->MOS2Cbd*here->MOS2tBulkPot* (1-arg*sarg)/(1-model->MOS2bulkJctBotGradingCoeff) + here->MOS2Cbdsw*here->MOS2tBulkPot*(1-arg*sargsw)/ (1-model->MOS2bulkJctSideGradingCoeff) -here->MOS2f3d/2* (here->MOS2tDepCap*here->MOS2tDepCap) -here->MOS2tDepCap * here->MOS2f2d; } if(vbsOp >= here->MOS2tDepCap){ arg = 1-model->MOS2fwdCapDepCoeff; sarg = exp( (-model->MOS2bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS2bulkJctSideGradingCoeff) * log(arg) ); here->MOS2f2s = here->MOS2Cbs*(1-model->MOS2fwdCapDepCoeff* (1+model->MOS2bulkJctBotGradingCoeff))* sarg/arg + here->MOS2Cbssw*(1-model->MOS2fwdCapDepCoeff* (1+model->MOS2bulkJctSideGradingCoeff))* sargsw/arg; here->MOS2f3s = here->MOS2Cbs * model->MOS2bulkJctBotGradingCoeff * sarg/arg/ here->MOS2tBulkPot + here->MOS2Cbssw * model->MOS2bulkJctSideGradingCoeff * sargsw/arg / here->MOS2tBulkPot; here->MOS2f4s = here->MOS2Cbs*here->MOS2tBulkPot* (1-arg*sarg)/(1-model->MOS2bulkJctBotGradingCoeff) + here->MOS2Cbssw*here->MOS2tBulkPot*(1-arg*sargsw)/ (1-model->MOS2bulkJctSideGradingCoeff) -here->MOS2f3s/2* (here->MOS2tDepCap*here->MOS2tDepCap) -here->MOS2tDepCap * here->MOS2f2s; } *(ckt->CKTstate0 + here->MOS2vbs) = vbsOp; *(ckt->CKTstate0 + here->MOS2vbd) = vbdOp; if((error = MOS2load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS2senCgs + 5) = here->MOS2cgs; *(here->MOS2senCgd + 5) = here->MOS2cgd; *(here->MOS2senCgb + 5) = here->MOS2cgb; *(here->MOS2senCbd + 5) = here->MOS2capbd; *(here->MOS2senCbs + 5) = here->MOS2capbs; *(here->MOS2senGds + 5) = here->MOS2gds; *(here->MOS2senGbs + 5) = here->MOS2gbs; *(here->MOS2senGbd + 5) = here->MOS2gbd; *(here->MOS2senGm + 5) = here->MOS2gm; *(here->MOS2senGmbs + 5) = here->MOS2gmbs; here->MOS2w = A0; here->MOS2drainArea /= (1 + info->SENpertfac); here->MOS2sourceArea /= (1 + info->SENpertfac); } load: gds= *(here->MOS2senGds + flag); gbs= *(here->MOS2senGbs + flag); gbd= *(here->MOS2senGbd + flag); gm= *(here->MOS2senGm + flag); gmbs= *(here->MOS2senGmbs + flag); if(flag == 5){ gdpr = here->MOS2drainConductance * Apert/A0; gspr = here->MOS2sourceConductance * Apert/A0; } else{ gdpr = here->MOS2drainConductance; gspr = here->MOS2sourceConductance; } xcgs= *(here->MOS2senCgs + flag) * ckt->CKTomega; xcgd= *(here->MOS2senCgd + flag) * ckt->CKTomega; xcgb= *(here->MOS2senCgb + flag) * ckt->CKTomega; xbd= *(here->MOS2senCbd + flag) * ckt->CKTomega; xbs= *(here->MOS2senCbs + flag) * ckt->CKTomega; #ifdef SENSDEBUG printf("flag = %d \n",flag); printf("gspr = %.7e , gdpr = %.7e , gds = %.7e, gbs = %.7e\n", gspr,gdpr,gds,gbs); printf("gbd = %.7e , gm = %.7e , gmbs = %.7e\n",gbd,gm,gmbs); printf("xcgs = %.7e , xcgd = %.7e , xcgb = %.7e,", xcgs,xcgd,xcgb); printf("xbd = %.7e,xbs = %.7e\n", xbd,xbs); #endif /* SENSDEBUG */ cspr = gspr * vspr ; icspr = gspr * ivspr ; cdpr = gdpr * vdpr ; icdpr = gdpr * ivdpr ; cgs = ( - xcgs * ivgs ); icgs = xcgs * vgs ; cgd = ( - xcgd * ivgd ); icgd = xcgd * vgd ; cgb = ( - xcgb * ivgb ); icgb = xcgb * vgb ; cbs = ( gbs * vbs - xbs * ivbs ); icbs = ( xbs * vbs + gbs * ivbs ); cbd = ( gbd * vbd - xbd * ivbd ); icbd = ( xbd * vbd + gbd * ivbd ); cds = ( gds * vds + xnrm * (gm * vgs + gmbs * vbs) - xrev * (gm * vgd + gmbs * vbd) ); icds = ( gds * ivds + xnrm * (gm * ivgs + gmbs * ivbs) - xrev * (gm * ivgd + gmbs * ivbd) ); cs = cspr; ics = icspr; csprm = ( -cspr - cgs - cbs - cds ) ; icsprm = ( -icspr - icgs - icbs - icds ) ; cd = cdpr; icd = icdpr; cdprm = ( -cdpr - cgd - cbd + cds ) ; icdprm = ( -icdpr - icgd - icbd + icds ) ; cg = cgs + cgd + cgb ; icg = icgs + icgd + icgb ; cb = cbs + cbd - cgb ; icb = icbs + icbd - icgb ; #ifdef SENSDEBUG printf("vbs = %.7e , vbd = %.7e , vgb = %.7e\n",vbs,vbd,vgb); printf("ivbs = %.7e , ivbd = %.7e , ivgb = %.7e\n",ivbs,ivbd,ivgb); printf("cbs = %.7e , cbd = %.7e , cgb = %.7e\n",cbs,cbd,cgb); printf("cb = %.7e , cg = %.7e , cs = %.7e\n",cb,cg,cs); printf("csprm = %.7e, cd = %.7e, cdprm = %.7e\n",csprm,cd,cdprm); printf("icb = %.7e , icg = %.7e , ics = %.7e\n",icb,icg,ics); printf("icsprm = %.7e, icd = %.7e, icdprm = %.7e\n", icsprm,icd,icdprm); #endif /* SENSDEBUG */ for(iparmno = 1;iparmno<=info->SENparms;iparmno++){ if ((flag == 4) || (iparmno != here->MOS2senParmNo) ) continue; if ((flag == 5) || (iparmno != (here->MOS2senParmNo + (int) here->MOS2sens_l)) ) continue; switch(flag){ case 1: DvDp = model->MOS2type * (info->SEN_Sap[here->MOS2bNode][iparmno] - info->SEN_Sap[here->MOS2sNodePrime][iparmno]); break; case 2: DvDp = model->MOS2type * ( info->SEN_Sap[here->MOS2bNode][iparmno] - info->SEN_Sap[here->MOS2dNodePrime][iparmno]); break; case 3: DvDp = model->MOS2type * ( info->SEN_Sap[here->MOS2gNode][iparmno] - info->SEN_Sap[here->MOS2bNode][iparmno]); break; case 4: DvDp = 1; break; case 5: DvDp = 1; break; } *(info->SEN_RHS[here->MOS2bNode] + iparmno) -= ( cb - cb0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS2bNode] + iparmno) -= ( icb - icb0) * DELAinv * DvDp; *(info->SEN_RHS[here->MOS2gNode] + iparmno) -= ( cg - cg0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS2gNode] + iparmno) -= ( icg - icg0) * DELAinv * DvDp; if(here->MOS2sNode != here->MOS2sNodePrime){ *(info->SEN_RHS[here->MOS2sNode] + iparmno) -= ( cs - cs0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS2sNode] + iparmno) -= ( ics - ics0) * DELAinv * DvDp; } *(info->SEN_RHS[here->MOS2sNodePrime] + iparmno) -= ( csprm - csprm0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS2sNodePrime] + iparmno) -= ( icsprm - icsprm0) * DELAinv * DvDp; if(here->MOS2dNode != here->MOS2dNodePrime){ *(info->SEN_RHS[here->MOS2dNode] + iparmno) -= ( cd - cd0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS2dNode] + iparmno) -= ( icd - icd0) * DELAinv * DvDp; } *(info->SEN_RHS[here->MOS2dNodePrime] + iparmno) -= ( cdprm - cdprm0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS2dNodePrime] + iparmno) -= ( icdprm - icdprm0) * DELAinv * DvDp; #ifdef SENSDEBUG printf("after loading\n"); printf("DvDp = %.5e , DELAinv = %.5e ,flag = %d ,", DvDp,DELAinv,flag); printf("iparmno = %d,senparmno = %d\n" ,iparmno,here->MOS2senParmNo); printf("A0 = %.5e , Apert = %.5e ,CONSTvt0 = %.5e \n", A0,Apert,CONSTvt0); printf("senb = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS2bNode] + iparmno), *(info->SEN_iRHS[here->MOS2bNode] + iparmno)); printf("seng = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS2gNode] + iparmno), *(info->SEN_iRHS[here->MOS2gNode] + iparmno)); printf("sens = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS2sNode] + iparmno), *(info->SEN_iRHS[here->MOS2sNode] + iparmno)); printf("sensprm = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS2sNodePrime] + iparmno), *(info->SEN_iRHS[here->MOS2sNodePrime] + iparmno)); printf("send = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS2dNode] + iparmno), *(info->SEN_iRHS[here->MOS2dNode] + iparmno)); printf("sendprm = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS2dNodePrime] + iparmno), *(info->SEN_iRHS[here->MOS2dNodePrime] + iparmno)); #endif /* SENSDEBUG */ } switch(flag){ case 1: goto pertvbd ; case 2: goto pertvgb ; case 3: goto pertl ; case 4: goto pertw ; case 5: break; } next: ; /* put the unperturbed values back into the state vector */ for(i=0; i <= 16; i++) *(ckt->CKTstate0 + here->MOS2states + i) = *(SaveState + i); here->MOS2sourceConductance = *(SaveState + 17) ; here->MOS2drainConductance = *(SaveState + 18) ; here->MOS2cd = *(SaveState + 19) ; here->MOS2cbs = *(SaveState + 20) ; here->MOS2cbd = *(SaveState + 21) ; here->MOS2gmbs = *(SaveState + 22) ; here->MOS2gm = *(SaveState + 23) ; here->MOS2gds = *(SaveState + 24) ; here->MOS2gbd = *(SaveState + 25) ; here->MOS2gbs = *(SaveState + 26) ; here->MOS2capbd = *(SaveState + 27) ; here->MOS2capbs = *(SaveState + 28) ; here->MOS2Cbd = *(SaveState + 29) ; here->MOS2Cbdsw = *(SaveState + 30) ; here->MOS2Cbs = *(SaveState + 31) ; here->MOS2Cbssw = *(SaveState + 32) ; here->MOS2f2d = *(SaveState + 33) ; here->MOS2f3d = *(SaveState + 34) ; here->MOS2f4d = *(SaveState + 35) ; here->MOS2f2s = *(SaveState + 36) ; here->MOS2f3s = *(SaveState + 37) ; here->MOS2f4s = *(SaveState + 38) ; here->MOS2cgs = *(SaveState + 39) ; here->MOS2cgd = *(SaveState + 40) ; here->MOS2cgb = *(SaveState + 41) ; here->MOS2vdsat = *(SaveState + 42) ; here->MOS2von = *(SaveState + 43) ; here->MOS2mode = save_mode ; here->MOS2senPertFlag = OFF; } } info->SENstatus = NORMAL; #ifdef SENSDEBUG printf("MOS2senacload end\n"); #endif /* SENSDEBUG */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos2/mos2temp.c0000644000175000017500000003506513546075722021766 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos2defs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* assuming silicon - make definition for epsilon of silicon */ #define EPSSIL (11.7 * 8.854214871e-12) int MOS2temp(GENmodel *inModel, CKTcircuit *ckt) { MOS2model *model = (MOS2model *)inModel; MOS2instance *here; double egfet; double wkfngs; double wkfng; double fermig; double fermis; double vfb; double fact1,fact2; double vt,vtnom; double kt,kt1; double egfet1; double arg1; double pbfact,pbfact1; double ratio,ratio4; double phio; double pbo; double gmaold,gmanew; double capfact; /* loop through all the resistor models */ for( ; model != NULL; model = MOS2nextModel(model)) { /* perform model defaulting */ /* now model parameter preprocessing */ if(!model->MOS2tnomGiven) { model->MOS2tnom = ckt->CKTnomTemp; } fact1 = model->MOS2tnom/REFTEMP; vtnom = model->MOS2tnom*CONSTKoverQ; kt1 = CONSTboltz * model->MOS2tnom; egfet1 = 1.16-(7.02e-4*model->MOS2tnom*model->MOS2tnom)/ (model->MOS2tnom+1108); arg1 = -egfet1/(kt1+kt1)+1.1150877/(CONSTboltz*(REFTEMP+REFTEMP)); pbfact1 = -2*vtnom *(1.5*log(fact1)+CHARGE*arg1); if (model->MOS2phi <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "%s: Phi is not positive.", model->MOS2modName); return(E_BADPARM); } if(!model->MOS2oxideThicknessGiven) { model->MOS2oxideThickness = 1e-7; } model->MOS2oxideCapFactor = 3.9 * 8.854214871e-12/ model->MOS2oxideThickness; if(!model->MOS2surfaceMobilityGiven) model->MOS2surfaceMobility=600; if(!model->MOS2transconductanceGiven) { model->MOS2transconductance = model->MOS2surfaceMobility * 1e-4 /*(m**2/cm**2) */ * model->MOS2oxideCapFactor; } if(model->MOS2substrateDopingGiven) { if(model->MOS2substrateDoping *1e6 /*(cm**3/m**3)*/ >1.45e16) { if(!model->MOS2phiGiven) { model->MOS2phi = 2*vtnom* log(model->MOS2substrateDoping* 1e6 /*(cm**3/m**3)*//1.45e16); model->MOS2phi = MAX(.1,model->MOS2phi); } fermis = model->MOS2type * .5 * model->MOS2phi; wkfng = 3.2; if(!model->MOS2gateTypeGiven) model->MOS2gateType=1; if(model->MOS2gateType != 0) { fermig = model->MOS2type * model->MOS2gateType*.5*egfet1; wkfng = 3.25 + .5 * egfet1 - fermig; } wkfngs = wkfng - (3.25 + .5 * egfet1 +fermis); if(!model->MOS2gammaGiven) { model->MOS2gamma = sqrt(2 * 11.70 * 8.854214871e-12 * CHARGE * model->MOS2substrateDoping * 1e6 /*(cm**3/m**3)*/)/model->MOS2oxideCapFactor; } if(!model->MOS2vt0Given) { if(!model->MOS2surfaceStateDensityGiven) model->MOS2surfaceStateDensity=0; vfb = wkfngs - model->MOS2surfaceStateDensity * 1e4 /*(cm**2/m**2)*/ * CHARGE/model->MOS2oxideCapFactor; model->MOS2vt0 = vfb + model->MOS2type * (model->MOS2gamma * sqrt(model->MOS2phi)+ model->MOS2phi); } else { vfb = model->MOS2vt0 - model->MOS2type * (model->MOS2gamma* sqrt(model->MOS2phi)+model->MOS2phi); } model->MOS2xd = sqrt((EPSSIL+EPSSIL)/ (CHARGE*model->MOS2substrateDoping *1e6 /*(cm**3/m**3)*/)); } else { model->MOS2substrateDoping = 0; SPfrontEnd->IFerrorf (ERR_FATAL, "%s: Nsub < Ni", model->MOS2modName); return(E_BADPARM); } } if(!model->MOS2bulkCapFactorGiven) { model->MOS2bulkCapFactor = sqrt(EPSSIL*CHARGE* model->MOS2substrateDoping* 1e6 /*cm**3/m**3*/ /(2*model->MOS2bulkJctPotential)); } /* loop through all instances of the model */ for(here = MOS2instances(model); here!= NULL; here = MOS2nextInstance(here)) { double czbd; /* zero voltage bulk-drain capacitance */ double czbdsw; /* zero voltage bulk-drain sidewall capacitance */ double czbs; /* zero voltage bulk-source capacitance */ double czbssw; /* zero voltage bulk-source sidewall capacitance */ double arg; /* 1 - fc */ double sarg; /* (1-fc) ^^ (-mj) */ double sargsw; /* (1-fc) ^^ (-mjsw) */ /* perform the parameter defaulting */ if(!here->MOS2dtempGiven) { here->MOS2dtemp = 0.0; } if(!here->MOS2tempGiven) { here->MOS2temp = ckt->CKTtemp + here->MOS2dtemp; } here->MOS2mode = 1; here->MOS2von = 0; vt = here->MOS2temp * CONSTKoverQ; ratio = here->MOS2temp/model->MOS2tnom; fact2 = here->MOS2temp/REFTEMP; kt = here->MOS2temp * CONSTboltz; egfet = 1.16-(7.02e-4*here->MOS2temp*here->MOS2temp)/ (here->MOS2temp+1108); arg = -egfet/(kt+kt)+1.1150877/(CONSTboltz*(REFTEMP+REFTEMP)); pbfact = -2*vt *(1.5*log(fact2)+CHARGE*arg); if(!here->MOS2drainAreaGiven) { here->MOS2drainArea = ckt->CKTdefaultMosAD; } if(!here->MOS2mGiven) { here->MOS2m = ckt->CKTdefaultMosM; } if(!here->MOS2lGiven) { here->MOS2l = ckt->CKTdefaultMosL; } if(!here->MOS2sourceAreaGiven) { here->MOS2sourceArea = ckt->CKTdefaultMosAS; } if(!here->MOS2wGiven) { here->MOS2w = ckt->CKTdefaultMosW; } if(model->MOS2drainResistanceGiven) { if(model->MOS2drainResistance != 0) { here->MOS2drainConductance = here->MOS2m / model->MOS2drainResistance; } else { here->MOS2drainConductance = 0; } } else if (model->MOS2sheetResistanceGiven) { if((model->MOS2sheetResistance != 0) && (here->MOS2drainSquares != 0)) { here->MOS2drainConductance = here->MOS2m / (model->MOS2sheetResistance*here->MOS2drainSquares); } else { here->MOS2drainConductance = 0; } } else { here->MOS2drainConductance = 0; } if(model->MOS2sourceResistanceGiven) { if(model->MOS2sourceResistance != 0) { here->MOS2sourceConductance = here->MOS2m / model->MOS2sourceResistance; } else { here->MOS2sourceConductance = 0; } } else if (model->MOS2sheetResistanceGiven) { if ((model->MOS2sheetResistance != 0) && (here->MOS2sourceSquares != 0)) { here->MOS2sourceConductance = here->MOS2m / (model->MOS2sheetResistance*here->MOS2sourceSquares); } else { here->MOS2sourceConductance = 0; } } else { here->MOS2sourceConductance = 0; } if(here->MOS2l - 2 * model->MOS2latDiff <=0) { SPfrontEnd->IFerrorf (ERR_WARNING, "%s: effective channel length less than zero", here->MOS2name); } ratio4 = ratio * sqrt(ratio); here->MOS2tTransconductance = model->MOS2transconductance / ratio4; here->MOS2tSurfMob = model->MOS2surfaceMobility/ratio4; phio= (model->MOS2phi-pbfact1)/fact1; here->MOS2tPhi = fact2 * phio + pbfact; here->MOS2tVbi = model->MOS2vt0 - model->MOS2type * (model->MOS2gamma* sqrt(model->MOS2phi)) +.5*(egfet1-egfet) + model->MOS2type*.5* (here->MOS2tPhi-model->MOS2phi); here->MOS2tVto = here->MOS2tVbi + model->MOS2type * model->MOS2gamma * sqrt(here->MOS2tPhi); here->MOS2tSatCur = model->MOS2jctSatCur* exp(-egfet/vt+egfet1/vtnom); here->MOS2tSatCurDens = model->MOS2jctSatCurDensity * exp(-egfet/vt+egfet1/vtnom); pbo = (model->MOS2bulkJctPotential - pbfact1)/fact1; gmaold = (model->MOS2bulkJctPotential-pbo)/pbo; capfact = 1/(1+model->MOS2bulkJctBotGradingCoeff* (4e-4*(model->MOS2tnom-REFTEMP)-gmaold)); here->MOS2tCbd = model->MOS2capBD * capfact; here->MOS2tCbs = model->MOS2capBS * capfact; here->MOS2tCj = model->MOS2bulkCapFactor * capfact; capfact = 1/(1+model->MOS2bulkJctSideGradingCoeff* (4e-4*(model->MOS2tnom-REFTEMP)-gmaold)); here->MOS2tCjsw = model->MOS2sideWallCapFactor * capfact; here->MOS2tBulkPot = fact2 * pbo+pbfact; gmanew = (here->MOS2tBulkPot-pbo)/pbo; capfact = (1+model->MOS2bulkJctBotGradingCoeff* (4e-4*(here->MOS2temp-REFTEMP)-gmanew)); here->MOS2tCbd *= capfact; here->MOS2tCbs *= capfact; here->MOS2tCj *= capfact; capfact = (1+model->MOS2bulkJctSideGradingCoeff* (4e-4*(here->MOS2temp-REFTEMP)-gmanew)); here->MOS2tCjsw *= capfact; here->MOS2tDepCap = model->MOS2fwdCapDepCoeff * here->MOS2tBulkPot; if( (here->MOS2tSatCurDens == 0) || (here->MOS2drainArea == 0) || (here->MOS2sourceArea == 0) ) { here->MOS2sourceVcrit = here->MOS2drainVcrit = vt*log(vt/(CONSTroot2*here->MOS2m*here->MOS2tSatCur)); } else { here->MOS2drainVcrit = vt * log( vt / (CONSTroot2 * here->MOS2m * here->MOS2tSatCurDens * here->MOS2drainArea)); here->MOS2sourceVcrit = vt * log( vt / (CONSTroot2 * here->MOS2m * here->MOS2tSatCurDens * here->MOS2sourceArea)); } if(model->MOS2capBDGiven) { czbd = here->MOS2tCbd * here->MOS2m; } else { if(model->MOS2bulkCapFactorGiven) { czbd=here->MOS2tCj*here->MOS2drainArea * here->MOS2m; } else { czbd=0; } } if(model->MOS2sideWallCapFactorGiven) { czbdsw= here->MOS2tCjsw * here->MOS2drainPerimiter * here->MOS2m;; } else { czbdsw=0; } arg = 1-model->MOS2fwdCapDepCoeff; sarg = exp( (-model->MOS2bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS2bulkJctSideGradingCoeff) * log(arg) ); here->MOS2Cbd = czbd; here->MOS2Cbdsw = czbdsw; here->MOS2f2d = czbd*(1-model->MOS2fwdCapDepCoeff* (1+model->MOS2bulkJctBotGradingCoeff))* sarg/arg + czbdsw*(1-model->MOS2fwdCapDepCoeff* (1+model->MOS2bulkJctSideGradingCoeff))* sargsw/arg; here->MOS2f3d = czbd * model->MOS2bulkJctBotGradingCoeff * sarg/arg/ here->MOS2tBulkPot + czbdsw * model->MOS2bulkJctSideGradingCoeff * sargsw/arg / here->MOS2tBulkPot; here->MOS2f4d = czbd*here->MOS2tBulkPot*(1-arg*sarg)/ (1-model->MOS2bulkJctBotGradingCoeff) + czbdsw*here->MOS2tBulkPot*(1-arg*sargsw)/ (1-model->MOS2bulkJctSideGradingCoeff) -here->MOS2f3d/2* (here->MOS2tDepCap*here->MOS2tDepCap) -here->MOS2tDepCap * here->MOS2f2d; if(model->MOS2capBSGiven) { czbs=here->MOS2tCbs * here->MOS2m; } else { if(model->MOS2bulkCapFactorGiven) { czbs=here->MOS2tCj*here->MOS2sourceArea * here->MOS2m; } else { czbs=0; } } if(model->MOS2sideWallCapFactorGiven) { czbssw = here->MOS2tCjsw * here->MOS2sourcePerimiter * here->MOS2m; } else { czbssw=0; } arg = 1-model->MOS2fwdCapDepCoeff; sarg = exp( (-model->MOS2bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS2bulkJctSideGradingCoeff) * log(arg) ); here->MOS2Cbs = czbs; here->MOS2Cbssw = czbssw; here->MOS2f2s = czbs*(1-model->MOS2fwdCapDepCoeff* (1+model->MOS2bulkJctBotGradingCoeff))* sarg/arg + czbssw*(1-model->MOS2fwdCapDepCoeff* (1+model->MOS2bulkJctSideGradingCoeff))* sargsw/arg; here->MOS2f3s = czbs * model->MOS2bulkJctBotGradingCoeff * sarg/arg/ here->MOS2tBulkPot + czbssw * model->MOS2bulkJctSideGradingCoeff * sargsw/arg / here->MOS2tBulkPot; here->MOS2f4s = czbs*here->MOS2tBulkPot*(1-arg*sarg)/ (1-model->MOS2bulkJctBotGradingCoeff) + czbssw*here->MOS2tBulkPot*(1-arg*sargsw)/ (1-model->MOS2bulkJctSideGradingCoeff) -here->MOS2f3s/2* (here->MOS2tDepCap*here->MOS2tDepCap) -here->MOS2tDepCap * here->MOS2f2s; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos2/mos2ext.h0000644000175000017500000000236313546075722021621 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ extern int MOS2acLoad(GENmodel*,CKTcircuit*); extern int MOS2ask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int MOS2mAsk(CKTcircuit*,GENmodel*,int,IFvalue*); extern int MOS2convTest(GENmodel*,CKTcircuit*); extern int MOS2delete(GENinstance*); extern int MOS2getic(GENmodel*,CKTcircuit*); extern int MOS2load(GENmodel*,CKTcircuit*); extern int MOS2mParam(int,IFvalue*,GENmodel*); extern int MOS2param(int,IFvalue*,GENinstance*,IFvalue*); extern int MOS2pzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int MOS2sAcLoad(GENmodel*,CKTcircuit*); extern int MOS2sLoad(GENmodel*,CKTcircuit*); extern void MOS2sPrint(GENmodel*,CKTcircuit*); extern int MOS2sSetup(SENstruct*,GENmodel*); extern int MOS2sUpdate(GENmodel*,CKTcircuit*); extern int MOS2setup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int MOS2unsetup(GENmodel*,CKTcircuit*); extern int MOS2temp(GENmodel*,CKTcircuit*); extern int MOS2trunc(GENmodel*,CKTcircuit*,double*); extern int MOS2disto(int,GENmodel*,CKTcircuit*); extern int MOS2noise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int MOS2dSetup(GENmodel*,CKTcircuit*); tmpk8ny_4pz/src/spicelib/devices/mos2/Makefile.am0000644000175000017500000000112113546075722022072 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libmos2.la libmos2_la_SOURCES = \ mos2.c \ mos2acld.c \ mos2ask.c \ mos2conv.c \ mos2defs.h \ mos2del.c \ mos2dist.c \ mos2dset.c \ mos2ext.h \ mos2ic.c \ mos2init.c \ mos2init.h \ mos2itf.h \ mos2load.c \ mos2mask.c \ mos2mpar.c \ mos2noi.c \ mos2par.c \ mos2pzld.c \ mos2sacl.c \ mos2set.c \ mos2sld.c \ mos2sprt.c \ mos2sset.c \ mos2supd.c \ mos2temp.c \ mos2trun.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/mos2/mos2noi.c0000644000175000017500000001314113546075722021575 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Gary W. Ng Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "mos2defs.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" /* * MOS2noise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with MOSFET's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the MOSFET's is summed with the variable "OnDens". */ int MOS2noise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; MOS2model *firstModel = (MOS2model *) genmodel; MOS2model *model; MOS2instance *inst; double tempOnoise; double tempInoise; double noizDens[MOS2NSRCS]; double lnNdens[MOS2NSRCS]; int i; /* define the names of the noise sources */ static char *MOS2nNames[MOS2NSRCS] = { /* Note that we have to keep the order */ "_rd", /* noise due to rd */ /* consistent with thestrchr definitions */ "_rs", /* noise due to rs */ /* in MOS2defs.h */ "_id", /* noise due to id */ "_1overf", /* flicker (1/f) noise */ "" /* total transistor noise */ }; for (model=firstModel; model != NULL; model=MOS2nextModel(model)) { for (inst=MOS2instances(model); inst != NULL; inst=MOS2nextInstance(inst)) { switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i=0; i < MOS2NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_%s%s", inst->MOS2name, MOS2nNames[i]); } break; case INT_NOIZ: for (i=0; i < MOS2NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total_%s%s", inst->MOS2name, MOS2nNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total_%s%s", inst->MOS2name, MOS2nNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: NevalSrc(&noizDens[MOS2RDNOIZ],&lnNdens[MOS2RDNOIZ], ckt,THERMNOISE,inst->MOS2dNodePrime,inst->MOS2dNode, inst->MOS2drainConductance); NevalSrc(&noizDens[MOS2RSNOIZ],&lnNdens[MOS2RSNOIZ], ckt,THERMNOISE,inst->MOS2sNodePrime,inst->MOS2sNode, inst->MOS2sourceConductance); NevalSrc(&noizDens[MOS2IDNOIZ],&lnNdens[MOS2IDNOIZ], ckt,THERMNOISE,inst->MOS2dNodePrime,inst->MOS2sNodePrime, (2.0/3.0 * fabs(inst->MOS2gm))); NevalSrc(&noizDens[MOS2FLNOIZ], NULL, ckt, N_GAIN,inst->MOS2dNodePrime, inst->MOS2sNodePrime, (double)0.0); noizDens[MOS2FLNOIZ] *= model->MOS2fNcoef * exp(model->MOS2fNexp * log(MAX(fabs(inst->MOS2cd),N_MINLOG))) / (data->freq * inst->MOS2w * inst->MOS2m * (inst->MOS2l - 2*model->MOS2latDiff) * model->MOS2oxideCapFactor * model->MOS2oxideCapFactor); lnNdens[MOS2FLNOIZ] = log(MAX(noizDens[MOS2FLNOIZ],N_MINLOG)); noizDens[MOS2TOTNOIZ] = noizDens[MOS2RDNOIZ] + noizDens[MOS2RSNOIZ] + noizDens[MOS2IDNOIZ] + noizDens[MOS2FLNOIZ]; lnNdens[MOS2TOTNOIZ] = log(MAX(noizDens[MOS2TOTNOIZ], N_MINLOG)); *OnDens += noizDens[MOS2TOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to */ /* initialize our "history" variables */ for (i=0; i < MOS2NSRCS; i++) { inst->MOS2nVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i=0; i < MOS2NSRCS; i++) { inst->MOS2nVar[OUTNOIZ][i] = 0.0; inst->MOS2nVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0 (we have to integrate) */ for (i=0; i < MOS2NSRCS; i++) { if (i != MOS2TOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], inst->MOS2nVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv , lnNdens[i] + data->lnGainInv, inst->MOS2nVar[LNLSTDENS][i] + data->lnGainInv, data); inst->MOS2nVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { inst->MOS2nVar[OUTNOIZ][i] += tempOnoise; inst->MOS2nVar[OUTNOIZ][MOS2TOTNOIZ] += tempOnoise; inst->MOS2nVar[INNOIZ][i] += tempInoise; inst->MOS2nVar[INNOIZ][MOS2TOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i=0; i < MOS2NSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i=0; i < MOS2NSRCS; i++) { data->outpVector[data->outNumber++] = inst->MOS2nVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = inst->MOS2nVar[INNOIZ][i]; } } /* if */ break; } /* switch (mode) */ break; case N_CLOSE: return (OK); /* do nothing, the main calling routine will close */ break; /* the plots */ } /* switch (operation) */ } /* for inst */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos2/mos2init.c0000644000175000017500000000326213546075722021756 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "mos2itf.h" #include "mos2ext.h" #include "mos2init.h" SPICEdev MOS2info = { .DEVpublic = { .name = "Mos2", .description = "Level 2 MOSfet model with Meyer capacitance model", .terms = &MOS2nSize, .numNames = &MOS2nSize, .termNames = MOS2names, .numInstanceParms = &MOS2pTSize, .instanceParms = MOS2pTable, .numModelParms = &MOS2mPTSize, .modelParms = MOS2mPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = MOS2param, .DEVmodParam = MOS2mParam, .DEVload = MOS2load, .DEVsetup = MOS2setup, .DEVunsetup = MOS2unsetup, .DEVpzSetup = MOS2setup, .DEVtemperature = MOS2temp, .DEVtrunc = MOS2trunc, .DEVfindBranch = NULL, .DEVacLoad = MOS2acLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = MOS2delete, .DEVsetic = MOS2getic, .DEVask = MOS2ask, .DEVmodAsk = MOS2mAsk, .DEVpzLoad = MOS2pzLoad, .DEVconvTest = MOS2convTest, .DEVsenSetup = MOS2sSetup, .DEVsenLoad = MOS2sLoad, .DEVsenUpdate = MOS2sUpdate, .DEVsenAcLoad = MOS2sAcLoad, .DEVsenPrint = MOS2sPrint, .DEVsenTrunc = NULL, .DEVdisto = MOS2disto, .DEVnoise = MOS2noise, .DEVsoaCheck = NULL, .DEVinstSize = &MOS2iSize, .DEVmodSize = &MOS2mSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_mos2_info(void) { return &MOS2info; } tmpk8ny_4pz/src/spicelib/devices/mos2/mos2mpar.c0000644000175000017500000001433313546075722021753 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "mos2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS2mParam(int param, IFvalue *value, GENmodel *inModel) { MOS2model *model = (MOS2model *)inModel; switch(param) { case MOS2_MOD_TNOM: model->MOS2tnom = value->rValue+CONSTCtoK; model->MOS2tnomGiven = TRUE; break; case MOS2_MOD_VTO: model->MOS2vt0 = value->rValue; model->MOS2vt0Given = TRUE; break; case MOS2_MOD_KP: model->MOS2transconductance = value->rValue; model->MOS2transconductanceGiven = TRUE; break; case MOS2_MOD_GAMMA: model->MOS2gamma = value->rValue; model->MOS2gammaGiven = TRUE; break; case MOS2_MOD_PHI: model->MOS2phi = value->rValue; model->MOS2phiGiven = TRUE; break; case MOS2_MOD_LAMBDA: model->MOS2lambda = value->rValue; model->MOS2lambdaGiven = TRUE; break; case MOS2_MOD_RD: model->MOS2drainResistance = value->rValue; model->MOS2drainResistanceGiven = TRUE; break; case MOS2_MOD_RS: model->MOS2sourceResistance = value->rValue; model->MOS2sourceResistanceGiven = TRUE; break; case MOS2_MOD_CBD: model->MOS2capBD = value->rValue; model->MOS2capBDGiven = TRUE; break; case MOS2_MOD_CBS: model->MOS2capBS = value->rValue; model->MOS2capBSGiven = TRUE; break; case MOS2_MOD_IS: model->MOS2jctSatCur = value->rValue; model->MOS2jctSatCurGiven = TRUE; break; case MOS2_MOD_PB: model->MOS2bulkJctPotential = value->rValue; model->MOS2bulkJctPotentialGiven = TRUE; break; case MOS2_MOD_CGSO: model->MOS2gateSourceOverlapCapFactor = value->rValue; model->MOS2gateSourceOverlapCapFactorGiven = TRUE; break; case MOS2_MOD_CGDO: model->MOS2gateDrainOverlapCapFactor = value->rValue; model->MOS2gateDrainOverlapCapFactorGiven = TRUE; break; case MOS2_MOD_CGBO: model->MOS2gateBulkOverlapCapFactor = value->rValue; model->MOS2gateBulkOverlapCapFactorGiven = TRUE; break; case MOS2_MOD_CJ: model->MOS2bulkCapFactor = value->rValue; model->MOS2bulkCapFactorGiven = TRUE; break; case MOS2_MOD_MJ: model->MOS2bulkJctBotGradingCoeff = value->rValue; model->MOS2bulkJctBotGradingCoeffGiven = TRUE; break; case MOS2_MOD_CJSW: model->MOS2sideWallCapFactor = value->rValue; model->MOS2sideWallCapFactorGiven = TRUE; break; case MOS2_MOD_MJSW: model->MOS2bulkJctSideGradingCoeff = value->rValue; model->MOS2bulkJctSideGradingCoeffGiven = TRUE; break; case MOS2_MOD_JS: model->MOS2jctSatCurDensity = value->rValue; model->MOS2jctSatCurDensityGiven = TRUE; break; case MOS2_MOD_TOX: model->MOS2oxideThickness = value->rValue; model->MOS2oxideThicknessGiven = TRUE; break; case MOS2_MOD_LD: model->MOS2latDiff = value->rValue; model->MOS2latDiffGiven = TRUE; break; case MOS2_MOD_RSH: model->MOS2sheetResistance = value->rValue; model->MOS2sheetResistanceGiven = TRUE; break; case MOS2_MOD_U0: model->MOS2surfaceMobility = value->rValue; model->MOS2surfaceMobilityGiven = TRUE; break; case MOS2_MOD_FC: model->MOS2fwdCapDepCoeff = value->rValue; model->MOS2fwdCapDepCoeffGiven = TRUE; break; case MOS2_MOD_NSUB: model->MOS2substrateDoping = value->rValue; model->MOS2substrateDopingGiven = TRUE; break; case MOS2_MOD_TPG: model->MOS2gateType = value->iValue; model->MOS2gateTypeGiven = TRUE; break; case MOS2_MOD_NSS: model->MOS2surfaceStateDensity = value->rValue; model->MOS2surfaceStateDensityGiven = TRUE; break; case MOS2_MOD_NFS: model->MOS2fastSurfaceStateDensity = value->rValue; model->MOS2fastSurfaceStateDensityGiven = TRUE; break; case MOS2_MOD_DELTA: model->MOS2narrowFactor = value->rValue; model->MOS2narrowFactorGiven = TRUE; break; case MOS2_MOD_UEXP: model->MOS2critFieldExp = value->rValue; model->MOS2critFieldExpGiven = TRUE; break; case MOS2_MOD_VMAX: model->MOS2maxDriftVel = value->rValue; model->MOS2maxDriftVelGiven = TRUE; break; case MOS2_MOD_XJ: model->MOS2junctionDepth = value->rValue; model->MOS2junctionDepthGiven = TRUE; break; case MOS2_MOD_NEFF: model->MOS2channelCharge = value->rValue; model->MOS2channelChargeGiven = TRUE; break; case MOS2_MOD_UCRIT: model->MOS2critField = value->rValue; model->MOS2critFieldGiven = TRUE; break; case MOS2_MOD_NMOS: if(value->iValue) { model->MOS2type = 1; model->MOS2typeGiven = TRUE; } break; case MOS2_MOD_PMOS: if(value->iValue) { model->MOS2type = -1; model->MOS2typeGiven = TRUE; } break; case MOS2_MOD_KF: model->MOS2fNcoef = value->rValue; model->MOS2fNcoefGiven = TRUE; break; case MOS2_MOD_AF: model->MOS2fNexp = value->rValue; model->MOS2fNexpGiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos2/mos2ic.c0000644000175000017500000000244313546075722021406 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS2getic(GENmodel *inModel, CKTcircuit *ckt) { MOS2model *model = (MOS2model *)inModel; MOS2instance *here; /* * grab initial conditions out of rhs array. User specified, so use * external nodes to get values */ for( ; model ; model = MOS2nextModel(model)) { for(here = MOS2instances(model); here ; here = MOS2nextInstance(here)) { if(!here->MOS2icVBSGiven) { here->MOS2icVBS = *(ckt->CKTrhs + here->MOS2bNode) - *(ckt->CKTrhs + here->MOS2sNode); } if(!here->MOS2icVDSGiven) { here->MOS2icVDS = *(ckt->CKTrhs + here->MOS2dNode) - *(ckt->CKTrhs + here->MOS2sNode); } if(!here->MOS2icVGSGiven) { here->MOS2icVGS = *(ckt->CKTrhs + here->MOS2gNode) - *(ckt->CKTrhs + here->MOS2sNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos2/mos2conv.c0000644000175000017500000000634113546075722021761 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS2convTest(GENmodel *inModel, CKTcircuit *ckt) { MOS2model *model = (MOS2model *)inModel; MOS2instance *here; double delvbs; double delvbd; double delvgs; double delvds; double delvgd; double cbhat; double cdhat; double vbs; double vbd; double vgs; double vds; double vgd; double vgdo; double tol; for( ; model != NULL; model = MOS2nextModel(model)) { for(here = MOS2instances(model); here!= NULL; here = MOS2nextInstance(here)) { vbs = model->MOS2type * ( *(ckt->CKTrhs+here->MOS2bNode) - *(ckt->CKTrhs+here->MOS2sNodePrime)); vgs = model->MOS2type * ( *(ckt->CKTrhs+here->MOS2gNode) - *(ckt->CKTrhs+here->MOS2sNodePrime)); vds = model->MOS2type * ( *(ckt->CKTrhs+here->MOS2dNodePrime) - *(ckt->CKTrhs+here->MOS2sNodePrime)); vbd=vbs-vds; vgd=vgs-vds; vgdo = *(ckt->CKTstate0 + here->MOS2vgs) - *(ckt->CKTstate0 + here->MOS2vds); delvbs = vbs - *(ckt->CKTstate0 + here->MOS2vbs); delvbd = vbd - *(ckt->CKTstate0 + here->MOS2vbd); delvgs = vgs - *(ckt->CKTstate0 + here->MOS2vgs); delvds = vds - *(ckt->CKTstate0 + here->MOS2vds); delvgd = vgd-vgdo; /* these are needed for convergence testing */ if (here->MOS2mode >= 0) { cdhat= here->MOS2cd- here->MOS2gbd * delvbd + here->MOS2gmbs * delvbs + here->MOS2gm * delvgs + here->MOS2gds * delvds ; } else { cdhat= here->MOS2cd - ( here->MOS2gbd - here->MOS2gmbs) * delvbd - here->MOS2gm * delvgd + here->MOS2gds * delvds ; } cbhat= here->MOS2cbs + here->MOS2cbd + here->MOS2gbd * delvbd + here->MOS2gbs * delvbs ; /* * check convergence */ tol=ckt->CKTreltol*MAX(fabs(cdhat),fabs(here->MOS2cd))+ ckt->CKTabstol; if (fabs(cdhat-here->MOS2cd) >= tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue, we haven't converged */ } else { tol=ckt->CKTreltol* MAX(fabs(cbhat),fabs(here->MOS2cbs+here->MOS2cbd))+ ckt->CKTabstol; if (fabs(cbhat-(here->MOS2cbs+here->MOS2cbd)) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue, we haven't converged*/ } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos2/mos2sprt.c0000644000175000017500000000402513546075722022001 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes This function is obsolete (was used by an old sensitivity analysis) **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mos2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" void MOS2sPrint(GENmodel *inModel, CKTcircuit *ckt) /* Pretty print the sensitivity info for all the MOS2 * devices in the circuit. */ { MOS2model *model = (MOS2model *)inModel; MOS2instance *here; printf("LEVEL 2 MOSFETS-----------------\n"); /* loop through all the MOS2 models */ for( ; model != NULL; model = MOS2nextModel(model)) { printf("Model name:%s\n",model->MOS2modName); /* loop through all the instances of the model */ for (here = MOS2instances(model); here != NULL ; here=MOS2nextInstance(here)) { printf(" Instance name:%s\n",here->MOS2name); printf(" Drain, Gate , Source nodes: %s, %s ,%s\n", CKTnodName(ckt,here->MOS2dNode),CKTnodName(ckt,here->MOS2gNode), CKTnodName(ckt,here->MOS2sNode)); printf(" Multiplier: %g ",here->MOS2m); printf(here->MOS2mGiven ? "(specified)\n" : "(default)\n"); printf(" Length: %g ",here->MOS2l); printf(here->MOS2lGiven ? "(specified)\n" : "(default)\n"); printf(" Width: %g ",here->MOS2w); printf(here->MOS2wGiven ? "(specified)\n" : "(default)\n"); if(here->MOS2sens_l == 1){ printf(" MOS2senParmNo:l = %d ",here->MOS2senParmNo); } else{ printf(" MOS2senParmNo:l = 0 "); } if(here->MOS2sens_w == 1){ printf(" w = %d \n",here->MOS2senParmNo + here->MOS2sens_l); } else{ printf(" w = 0 \n"); } } } } tmpk8ny_4pz/src/spicelib/devices/mos2/mos2dist.c0000644000175000017500000007716513546075722021773 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos2defs.h" #include "ngspice/sperror.h" #include "ngspice/distodef.h" #include "ngspice/suffix.h" int MOS2disto(int mode,GENmodel *genmodel, CKTcircuit *ckt) /* assuming here that ckt->CKTomega has been initialised to * the correct value */ { MOS2model *model = (MOS2model *) genmodel; DISTOAN* job = (DISTOAN*) ckt->CKTcurJob; DpassStr pass; double r1h1x,i1h1x; double r1h1y,i1h1y; double r1h1z, i1h1z; double r1h2x, i1h2x; double r1h2y, i1h2y; double r1h2z, i1h2z; double r1hm2x,i1hm2x; double r1hm2y,i1hm2y; double r1hm2z, i1hm2z; double r2h11x,i2h11x; double r2h11y,i2h11y; double r2h11z, i2h11z; double r2h1m2x,i2h1m2x; double r2h1m2y,i2h1m2y; double r2h1m2z, i2h1m2z; double temp, itemp; MOS2instance *here; if (mode == D_SETUP) return(MOS2dSetup(genmodel,ckt)); if ((mode == D_TWOF1) || (mode == D_THRF1) || (mode == D_F1PF2) || (mode == D_F1MF2) || (mode == D_2F1MF2)) { /* loop through all the MOS2 models */ for( ; model != NULL; model = MOS2nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS2instances(model); here != NULL ; here=MOS2nextInstance(here)) { /* loading starts here */ switch (mode) { case D_TWOF1: /* x = vgs, y = vbs z = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MOS2gNode)) - *(job->r1H1ptr + (here->MOS2sNodePrime)); i1h1x = *(job->i1H1ptr + (here->MOS2gNode)) - *(job->i1H1ptr + (here->MOS2sNodePrime)); r1h1y = *(job->r1H1ptr + (here->MOS2bNode)) - *(job->r1H1ptr + (here->MOS2sNodePrime)); i1h1y = *(job->i1H1ptr + (here->MOS2bNode)) - *(job->i1H1ptr + (here->MOS2sNodePrime)); r1h1z = *(job->r1H1ptr + (here->MOS2dNodePrime)) - *(job->r1H1ptr + (here->MOS2sNodePrime)); i1h1z = *(job->i1H1ptr + (here->MOS2dNodePrime)) - *(job->i1H1ptr + (here->MOS2sNodePrime)); /* loading starts here */ /* loading cdrain term */ temp = DFn2F1(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z); itemp = DFi2F1(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z); *(ckt->CKTrhs + (here->MOS2dNodePrime)) -= temp; *(ckt->CKTirhs + (here->MOS2dNodePrime)) -= itemp; *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp; /* cdrain term over */ /* loading gbs term */ temp = D1n2F1(here->gbs2, r1h1y, i1h1y); itemp = D1i2F1(here->gbs2, r1h1y, i1h1y); *(ckt->CKTrhs + (here->MOS2bNode)) -= temp; *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp; /* gbs over */ /* loading gbd term */ temp = D1n2F1(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z); itemp = D1i2F1(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z); *(ckt->CKTrhs + (here->MOS2bNode)) -= temp; *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp; /* gbd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1i2F1(here->capgs2, r1h1x, i1h1x); itemp = ckt->CKTomega * D1n2F1(here->capgs2, r1h1x, i1h1x); *(ckt->CKTrhs + (here->MOS2gNode)) -= temp; *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1i2F1(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z); itemp = ckt->CKTomega * D1n2F1(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z); *(ckt->CKTrhs + (here->MOS2gNode)) -= temp; *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp; /* capgd over */ /* loading capgb term */ temp = -ckt->CKTomega * D1i2F1(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y); itemp = ckt->CKTomega * D1n2F1(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y); *(ckt->CKTrhs + (here->MOS2gNode)) -= temp; *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2bNode)) += temp; *(ckt->CKTirhs + (here->MOS2bNode)) += itemp; /* capgb over */ /* loading capbs term */ temp = -ckt->CKTomega * D1i2F1(here->capbs2, r1h1y, i1h1y); itemp = ckt->CKTomega * D1n2F1(here->capbs2, r1h1y, i1h1y); *(ckt->CKTrhs + (here->MOS2bNode)) -= temp; *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp; /* capbs over */ /* loading capbd term */ temp = -ckt->CKTomega * D1i2F1(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z); itemp = ckt->CKTomega * D1n2F1(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z); *(ckt->CKTrhs + (here->MOS2bNode)) -= temp; *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp; /* capbd over */ /* all done */ break; case D_THRF1: /* x = vgs, y = vbs z = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MOS2gNode)) - *(job->r1H1ptr + (here->MOS2sNodePrime)); i1h1x = *(job->i1H1ptr + (here->MOS2gNode)) - *(job->i1H1ptr + (here->MOS2sNodePrime)); r1h1y = *(job->r1H1ptr + (here->MOS2bNode)) - *(job->r1H1ptr + (here->MOS2sNodePrime)); i1h1y = *(job->i1H1ptr + (here->MOS2bNode)) - *(job->i1H1ptr + (here->MOS2sNodePrime)); r1h1z = *(job->r1H1ptr + (here->MOS2dNodePrime)) - *(job->r1H1ptr + (here->MOS2sNodePrime)); i1h1z = *(job->i1H1ptr + (here->MOS2dNodePrime)) - *(job->i1H1ptr + (here->MOS2sNodePrime)); r2h11x = *(job->r2H11ptr + (here->MOS2gNode)) - *(job->r2H11ptr + (here->MOS2sNodePrime)); i2h11x = *(job->i2H11ptr + (here->MOS2gNode)) - *(job->i2H11ptr + (here->MOS2sNodePrime)); r2h11y = *(job->r2H11ptr + (here->MOS2bNode)) - *(job->r2H11ptr + (here->MOS2sNodePrime)); i2h11y = *(job->i2H11ptr + (here->MOS2bNode)) - *(job->i2H11ptr + (here->MOS2sNodePrime)); r2h11z = *(job->r2H11ptr + (here->MOS2dNodePrime)) - *(job->r2H11ptr + (here->MOS2sNodePrime)); i2h11z = *(job->i2H11ptr + (here->MOS2dNodePrime)) - *(job->i2H11ptr + (here->MOS2sNodePrime)); /* loading starts here */ /* loading cdrain term */ temp = DFn3F1(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, here->cdr_x3, here->cdr_y3, here->cdr_z3, here->cdr_x2y, here->cdr_x2z, here->cdr_xy2, here->cdr_y2z, here->cdr_xz2, here->cdr_yz2, here->cdr_xyz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r2h11x, i2h11x, r2h11y, i2h11y, r2h11z, i2h11z); itemp = DFi3F1(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, here->cdr_x3, here->cdr_y3, here->cdr_z3, here->cdr_x2y, here->cdr_x2z, here->cdr_xy2, here->cdr_y2z, here->cdr_xz2, here->cdr_yz2, here->cdr_xyz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r2h11x, i2h11x, r2h11y, i2h11y, r2h11z, i2h11z); *(ckt->CKTrhs + (here->MOS2dNodePrime)) -= temp; *(ckt->CKTirhs + (here->MOS2dNodePrime)) -= itemp; *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp; /* cdrain term over */ /* loading gbs term */ temp = D1n3F1(here->gbs2, here->gbs3, r1h1y, i1h1y, r2h11y, i2h11y); itemp = D1i3F1(here->gbs2, here->gbs3, r1h1y, i1h1y, r2h11y, i2h11y); *(ckt->CKTrhs + (here->MOS2bNode)) -= temp; *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp; /* gbs over */ /* loading gbd term */ temp = D1n3F1(here->gbd2, here->gbd3, r1h1y - r1h1z, i1h1y - i1h1z, r2h11y - r2h11z, i2h11y - i2h11z); itemp = D1i3F1(here->gbd2, here->gbd3, r1h1y - r1h1z, i1h1y - i1h1z, r2h11y - r2h11z, i2h11y - i2h11z); *(ckt->CKTrhs + (here->MOS2bNode)) -= temp; *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp; /* gbd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1i3F1(here->capgs2, here->capgs3, r1h1x, i1h1x, r2h11x, i2h11x); itemp = ckt->CKTomega * D1n3F1(here->capgs2, here->capgs3, r1h1x, i1h1x, r2h11x, i2h11x); *(ckt->CKTrhs + (here->MOS2gNode)) -= temp; *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1i3F1(here->capgd2, here->capgd3, r1h1x - r1h1z, i1h1x - i1h1z, r2h11x - r2h11z, i2h11x - i2h11z); itemp = ckt->CKTomega * D1n3F1(here->capgd2, here->capgd3, r1h1x - r1h1z, i1h1x - i1h1z, r2h11x - r2h11z, i2h11x - i2h11z); *(ckt->CKTrhs + (here->MOS2gNode)) -= temp; *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp; /* capgd over */ /* loading capgb term */ temp = -ckt->CKTomega * D1i3F1(here->capgb2, here->capgb3, r1h1x - r1h1y, i1h1x - i1h1y, r2h11x - r2h11y, i2h11x - i2h11y); itemp = ckt->CKTomega * D1n3F1(here->capgb2, here->capgb3, r1h1x - r1h1y, i1h1x - i1h1y, r2h11x - r2h11y, i2h11x - i2h11y); *(ckt->CKTrhs + (here->MOS2gNode)) -= temp; *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2bNode)) += temp; *(ckt->CKTirhs + (here->MOS2bNode)) += itemp; /* capgb over */ /* loading capbs term */ temp = -ckt->CKTomega * D1i3F1(here->capbs2, here->capbs3, r1h1y, i1h1y, r2h11y, i2h11y); itemp = ckt->CKTomega * D1n3F1(here->capbs2, here->capbs3, r1h1y, i1h1y, r2h11y, i2h11y); *(ckt->CKTrhs + (here->MOS2bNode)) -= temp; *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp; /* capbs over */ /* loading capbd term */ temp = -ckt->CKTomega * D1i3F1(here->capbd2, here->capbd3, r1h1y - r1h1z, i1h1y - i1h1z, r2h11y - r2h11z, i2h11y - i2h11z); itemp = ckt->CKTomega * D1n3F1(here->capbd2, here->capbd3, r1h1y - r1h1z, i1h1y - i1h1z, r2h11y - r2h11z, i2h11y - i2h11z); *(ckt->CKTrhs + (here->MOS2bNode)) -= temp; *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp; /* capbd over */ /* all done */ break; case D_F1PF2: /* x = vgs, y = vbs z = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MOS2gNode)) - *(job->r1H1ptr + (here->MOS2sNodePrime)); i1h1x = *(job->i1H1ptr + (here->MOS2gNode)) - *(job->i1H1ptr + (here->MOS2sNodePrime)); r1h1y = *(job->r1H1ptr + (here->MOS2bNode)) - *(job->r1H1ptr + (here->MOS2sNodePrime)); i1h1y = *(job->i1H1ptr + (here->MOS2bNode)) - *(job->i1H1ptr + (here->MOS2sNodePrime)); r1h1z = *(job->r1H1ptr + (here->MOS2dNodePrime)) - *(job->r1H1ptr + (here->MOS2sNodePrime)); i1h1z = *(job->i1H1ptr + (here->MOS2dNodePrime)) - *(job->i1H1ptr + (here->MOS2sNodePrime)); r1h2x = *(job->r1H2ptr + (here->MOS2gNode)) - *(job->r1H2ptr + (here->MOS2sNodePrime)); i1h2x = *(job->i1H2ptr + (here->MOS2gNode)) - *(job->i1H2ptr + (here->MOS2sNodePrime)); r1h2y = *(job->r1H2ptr + (here->MOS2bNode)) - *(job->r1H2ptr + (here->MOS2sNodePrime)); i1h2y = *(job->i1H2ptr + (here->MOS2bNode)) - *(job->i1H2ptr + (here->MOS2sNodePrime)); r1h2z = *(job->r1H2ptr + (here->MOS2dNodePrime)) - *(job->r1H2ptr + (here->MOS2sNodePrime)); i1h2z = *(job->i1H2ptr + (here->MOS2dNodePrime)) - *(job->i1H2ptr + (here->MOS2sNodePrime)); /* loading starts here */ /* loading cdrain term */ temp = DFnF12(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1h2x, i1h2x, r1h2y, i1h2y, r1h2z, i1h2z); itemp = DFiF12(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1h2x, i1h2x, r1h2y, i1h2y, r1h2z, i1h2z); *(ckt->CKTrhs + (here->MOS2dNodePrime)) -= temp; *(ckt->CKTirhs + (here->MOS2dNodePrime)) -= itemp; *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp; /* cdrain term over */ /* loading gbs term */ temp = D1nF12(here->gbs2, r1h1y, i1h1y, r1h2y, i1h2y); itemp = D1iF12(here->gbs2, r1h1y, i1h1y, r1h2y, i1h2y); *(ckt->CKTrhs + (here->MOS2bNode)) -= temp; *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp; /* gbs over */ /* loading gbd term */ temp = D1nF12(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1h2y - r1h2z, i1h2y - i1h2z); itemp = D1iF12(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1h2y - r1h2z, i1h2y - i1h2z); *(ckt->CKTrhs + (here->MOS2bNode)) -= temp; *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp; /* gbd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1iF12(here->capgs2, r1h1x, i1h1x, r1h2x, i1h2x); itemp = ckt->CKTomega * D1nF12(here->capgs2, r1h1x, i1h1x, r1h2x, i1h2x); *(ckt->CKTrhs + (here->MOS2gNode)) -= temp; *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1iF12(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z, r1h2x - r1h2z, i1h2x - i1h2z); itemp = ckt->CKTomega * D1nF12(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z, r1h2x - r1h2z, i1h2x - i1h2z); *(ckt->CKTrhs + (here->MOS2gNode)) -= temp; *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp; /* capgd over */ /* loading capgb term */ temp = -ckt->CKTomega * D1iF12(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y, r1h2x - r1h2y, i1h2x - i1h2y); itemp = ckt->CKTomega * D1nF12(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y, r1h2x - r1h2y, i1h2x - i1h2y); *(ckt->CKTrhs + (here->MOS2gNode)) -= temp; *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2bNode)) += temp; *(ckt->CKTirhs + (here->MOS2bNode)) += itemp; /* capgb over */ /* loading capbs term */ temp = -ckt->CKTomega * D1iF12(here->capbs2, r1h1y, i1h1y, r1h2y, i1h2y); itemp = ckt->CKTomega * D1nF12(here->capbs2, r1h1y, i1h1y, r1h2y, i1h2y); *(ckt->CKTrhs + (here->MOS2bNode)) -= temp; *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp; /* capbs over */ /* loading capbd term */ temp = -ckt->CKTomega * D1iF12(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1h2y - r1h2z, i1h2y - i1h2z); itemp = ckt->CKTomega * D1nF12(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1h2y - r1h2z, i1h2y - i1h2z); *(ckt->CKTrhs + (here->MOS2bNode)) -= temp; *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp; /* capbd over */ /* all done */ break; case D_F1MF2: /* x = vgs, y = vbs z = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MOS2gNode)) - *(job->r1H1ptr + (here->MOS2sNodePrime)); i1h1x = *(job->i1H1ptr + (here->MOS2gNode)) - *(job->i1H1ptr + (here->MOS2sNodePrime)); r1h1y = *(job->r1H1ptr + (here->MOS2bNode)) - *(job->r1H1ptr + (here->MOS2sNodePrime)); i1h1y = *(job->i1H1ptr + (here->MOS2bNode)) - *(job->i1H1ptr + (here->MOS2sNodePrime)); r1h1z = *(job->r1H1ptr + (here->MOS2dNodePrime)) - *(job->r1H1ptr + (here->MOS2sNodePrime)); i1h1z = *(job->i1H1ptr + (here->MOS2dNodePrime)) - *(job->i1H1ptr + (here->MOS2sNodePrime)); r1hm2x = *(job->r1H2ptr + (here->MOS2gNode)) - *(job->r1H2ptr + (here->MOS2sNodePrime)); i1hm2x = -(*(job->i1H2ptr + (here->MOS2gNode)) - *(job->i1H2ptr + (here->MOS2sNodePrime))); r1hm2y = *(job->r1H2ptr + (here->MOS2bNode)) - *(job->r1H2ptr + (here->MOS2sNodePrime)); i1hm2y = -(*(job->i1H2ptr + (here->MOS2bNode)) - *(job->i1H2ptr + (here->MOS2sNodePrime))); r1hm2z = *(job->r1H2ptr + (here->MOS2dNodePrime)) - *(job->r1H2ptr + (here->MOS2sNodePrime)); i1hm2z = -(*(job->i1H2ptr + (here->MOS2dNodePrime)) - *(job->i1H2ptr + (here->MOS2sNodePrime))); /* loading starts here */ /* loading cdrain term */ temp = DFnF12(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1hm2x, i1hm2x, r1hm2y, i1hm2y, r1hm2z, i1hm2z); itemp = DFiF12(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1hm2x, i1hm2x, r1hm2y, i1hm2y, r1hm2z, i1hm2z); *(ckt->CKTrhs + (here->MOS2dNodePrime)) -= temp; *(ckt->CKTirhs + (here->MOS2dNodePrime)) -= itemp; *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp; /* cdrain term over */ /* loading gbs term */ temp = D1nF12(here->gbs2, r1h1y, i1h1y, r1hm2y, i1hm2y); itemp = D1iF12(here->gbs2, r1h1y, i1h1y, r1hm2y, i1hm2y); *(ckt->CKTrhs + (here->MOS2bNode)) -= temp; *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp; /* gbs over */ /* loading gbd term */ temp = D1nF12(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z); itemp = D1iF12(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z); *(ckt->CKTrhs + (here->MOS2bNode)) -= temp; *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp; /* gbd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1iF12(here->capgs2, r1h1x, i1h1x, r1hm2x, i1hm2x); itemp = ckt->CKTomega * D1nF12(here->capgs2, r1h1x, i1h1x, r1hm2x, i1hm2x); *(ckt->CKTrhs + (here->MOS2gNode)) -= temp; *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1iF12(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z, r1hm2x - r1hm2z, i1hm2x - i1hm2z); itemp = ckt->CKTomega * D1nF12(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z, r1hm2x - r1hm2z, i1hm2x - i1hm2z); *(ckt->CKTrhs + (here->MOS2gNode)) -= temp; *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp; /* capgd over */ /* loading capgb term */ temp = -ckt->CKTomega * D1iF12(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y); itemp = ckt->CKTomega * D1nF12(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y); *(ckt->CKTrhs + (here->MOS2gNode)) -= temp; *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2bNode)) += temp; *(ckt->CKTirhs + (here->MOS2bNode)) += itemp; /* capgb over */ /* loading capbs term */ temp = -ckt->CKTomega * D1iF12(here->capbs2, r1h1y, i1h1y, r1hm2y, i1hm2y); itemp = ckt->CKTomega * D1nF12(here->capbs2, r1h1y, i1h1y, r1hm2y, i1hm2y); *(ckt->CKTrhs + (here->MOS2bNode)) -= temp; *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp; /* capbs over */ /* loading capbd term */ temp = -ckt->CKTomega * D1iF12(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z); itemp = ckt->CKTomega * D1nF12(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z); *(ckt->CKTrhs + (here->MOS2bNode)) -= temp; *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp; /* capbd over */ /* all done */ break; case D_2F1MF2: /* x = vgs, y = vbs z = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MOS2gNode)) - *(job->r1H1ptr + (here->MOS2sNodePrime)); i1h1x = *(job->i1H1ptr + (here->MOS2gNode)) - *(job->i1H1ptr + (here->MOS2sNodePrime)); r1h1y = *(job->r1H1ptr + (here->MOS2bNode)) - *(job->r1H1ptr + (here->MOS2sNodePrime)); i1h1y = *(job->i1H1ptr + (here->MOS2bNode)) - *(job->i1H1ptr + (here->MOS2sNodePrime)); r1h1z = *(job->r1H1ptr + (here->MOS2dNodePrime)) - *(job->r1H1ptr + (here->MOS2sNodePrime)); i1h1z = *(job->i1H1ptr + (here->MOS2dNodePrime)) - *(job->i1H1ptr + (here->MOS2sNodePrime)); r1hm2x = *(job->r1H2ptr + (here->MOS2gNode)) - *(job->r1H2ptr + (here->MOS2sNodePrime)); i1hm2x = -(*(job->i1H2ptr + (here->MOS2gNode)) - *(job->i1H2ptr + (here->MOS2sNodePrime))); r1hm2y = *(job->r1H2ptr + (here->MOS2bNode)) - *(job->r1H2ptr + (here->MOS2sNodePrime)); i1hm2y = -(*(job->i1H2ptr + (here->MOS2bNode)) - *(job->i1H2ptr + (here->MOS2sNodePrime))); r1hm2z = *(job->r1H2ptr + (here->MOS2dNodePrime)) - *(job->r1H2ptr + (here->MOS2sNodePrime)); i1hm2z = -(*(job->i1H2ptr + (here->MOS2dNodePrime)) - *(job->i1H2ptr + (here->MOS2sNodePrime))); r2h11x = *(job->r1H1ptr + (here->MOS2gNode)) - *(job->r1H1ptr + (here->MOS2sNodePrime)); i2h11x = *(job->i1H1ptr + (here->MOS2gNode)) - *(job->i1H1ptr + (here->MOS2sNodePrime)); r2h11y = *(job->r1H1ptr + (here->MOS2bNode)) - *(job->r1H1ptr + (here->MOS2sNodePrime)); i2h11y = *(job->i1H1ptr + (here->MOS2bNode)) - *(job->i1H1ptr + (here->MOS2sNodePrime)); r2h11z = *(job->r1H1ptr + (here->MOS2dNodePrime)) - *(job->r1H1ptr + (here->MOS2sNodePrime)); i2h11z = *(job->i1H1ptr + (here->MOS2dNodePrime)) - *(job->i1H1ptr + (here->MOS2sNodePrime)); r2h1m2x = *(job->r2H1m2ptr + (here->MOS2gNode)) - *(job->r2H1m2ptr + (here->MOS2sNodePrime)); i2h1m2x = *(job->i2H1m2ptr + (here->MOS2gNode)) - *(job->i2H1m2ptr + (here->MOS2sNodePrime)); r2h1m2y = *(job->r2H1m2ptr + (here->MOS2bNode)) - *(job->r2H1m2ptr + (here->MOS2sNodePrime)); i2h1m2y = *(job->i2H1m2ptr + (here->MOS2bNode)) - *(job->i2H1m2ptr + (here->MOS2sNodePrime)); r2h1m2z = *(job->r2H1m2ptr + (here->MOS2dNodePrime)) - *(job->r2H1m2ptr + (here->MOS2sNodePrime)); i2h1m2z = *(job->i2H1m2ptr + (here->MOS2dNodePrime)) - *(job->i2H1m2ptr + (here->MOS2sNodePrime)); /* loading starts here */ /* loading cdrain term */ pass.cxx = here->cdr_x2; pass.cyy = here->cdr_y2; pass.czz = here->cdr_z2; pass.cxy = here->cdr_xy; pass.cyz = here->cdr_yz; pass.cxz = here->cdr_xz; pass.cxxx = here->cdr_x3; pass.cyyy = here->cdr_y3; pass.czzz = here->cdr_z3; pass.cxxy = here->cdr_x2y; pass.cxxz = here->cdr_x2z; pass.cxyy = here->cdr_xy2; pass.cyyz = here->cdr_y2z; pass.cxzz = here->cdr_xz2; pass.cyzz = here->cdr_yz2; pass.cxyz = here->cdr_xyz; pass.r1h1x = r1h1x; pass.i1h1x = i1h1x; pass.r1h1y = r1h1y; pass.i1h1y = i1h1y; pass.r1h1z = r1h1z; pass.i1h1z = i1h1z; pass.r1h2x = r1hm2x; pass.i1h2x = i1hm2x; pass.r1h2y = r1hm2y; pass.i1h2y = i1hm2y; pass.r1h2z = r1hm2z; pass.i1h2z = i1hm2z; pass.r2h11x = r2h11x; pass.i2h11x = i2h11x; pass.r2h11y = r2h11y; pass.i2h11y = i2h11y; pass.r2h11z = r2h11z; pass.i2h11z = i2h11z; pass.h2f1f2x = r2h1m2x; pass.ih2f1f2x = i2h1m2x; pass.h2f1f2y = r2h1m2y; pass.ih2f1f2y = i2h1m2y; pass.h2f1f2z = r2h1m2z; pass.ih2f1f2z = i2h1m2z; temp = DFn2F12(&pass); itemp = DFi2F12(&pass); *(ckt->CKTrhs + (here->MOS2dNodePrime)) -= temp; *(ckt->CKTirhs + (here->MOS2dNodePrime)) -= itemp; *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp; /* cdrain term over */ /* loading gbs term */ temp = D1n2F12(here->gbs2, here->gbs3, r1h1y, i1h1y, r1hm2y, i1hm2y, r2h11y, i2h11y, r2h1m2y, i2h1m2y); itemp = D1i2F12(here->gbs2, here->gbs3, r1h1y, i1h1y, r1hm2y, i1hm2y, r2h11y, i2h11y, r2h1m2y, i2h1m2y); *(ckt->CKTrhs + (here->MOS2bNode)) -= temp; *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp; /* gbs over */ /* loading gbd term */ temp = D1n2F12(here->gbd2, here->gbd3, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z, r2h11y - r2h11z, i2h11y - i2h11z, r2h1m2y - r2h1m2z, i2h1m2y - i2h1m2z); itemp = D1i2F12(here->gbd2, here->gbd3, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z, r2h11y - r2h11z, i2h11y - i2h11z, r2h1m2y - r2h1m2z, i2h1m2y - i2h1m2z); *(ckt->CKTrhs + (here->MOS2bNode)) -= temp; *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp; /* gbd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1i2F12(here->capgs2, here->capgs3, r1h1x, i1h1x, r1hm2x, i1hm2x, r2h11x, i2h11x, r2h1m2x, i2h1m2x); itemp = ckt->CKTomega * D1n2F12(here->capgs2, here->capgs3, r1h1x, i1h1x, r1hm2x, i1hm2x, r2h11x, i2h11x, r2h1m2x, i2h1m2x); *(ckt->CKTrhs + (here->MOS2gNode)) -= temp; *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1i2F12(here->capgd2, here->capgd3, r1h1x - r1h1z, i1h1x - i1h1z, r1hm2x - r1hm2z, i1hm2x - i1hm2z, r2h11x - r2h11z, i2h11x - i2h11z, r2h1m2x - r2h1m2z, i2h1m2x - i2h1m2z); itemp = ckt->CKTomega * D1n2F12(here->capgd2, here->capgd3, r1h1x - r1h1z, i1h1x - i1h1z, r1hm2x - r1hm2z, i1hm2x - i1hm2z, r2h11x - r2h11z, i2h11x - i2h11z, r2h1m2x - r2h1m2z, i2h1m2x - i2h1m2z); *(ckt->CKTrhs + (here->MOS2gNode)) -= temp; *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp; /* capgd over */ /* loading capgb term */ temp = -ckt->CKTomega * D1i2F12(here->capgb2, here->capgb3, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y, r2h11x - r2h11y, i2h11x - i2h11y, r2h1m2x - r2h1m2y, i2h1m2x - i2h1m2y); itemp = ckt->CKTomega * D1n2F12(here->capgb2, here->capgb3, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y, r2h11x - r2h11y, i2h11x - i2h11y, r2h1m2x - r2h1m2y, i2h1m2x - i2h1m2y); *(ckt->CKTrhs + (here->MOS2gNode)) -= temp; *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2bNode)) += temp; *(ckt->CKTirhs + (here->MOS2bNode)) += itemp; /* capgb over */ /* loading capbs term */ temp = -ckt->CKTomega * D1i2F12(here->capbs2, here->capbs3, r1h1y, i1h1y, r1hm2y, i1hm2y, r2h11y, i2h11y, r2h1m2y, i2h1m2y); itemp = ckt->CKTomega * D1n2F12(here->capbs2, here->capbs3, r1h1y, i1h1y, r1hm2y, i1hm2y, r2h11y, i2h11y, r2h1m2y, i2h1m2y); *(ckt->CKTrhs + (here->MOS2bNode)) -= temp; *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp; /* capbs over */ /* loading capbd term */ temp = -ckt->CKTomega * D1i2F12(here->capbd2, here->capbd3, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z, r2h11y - r2h11z, i2h11y - i2h11z, r2h1m2y - r2h1m2z, i2h1m2y - i2h1m2z); itemp = ckt->CKTomega * D1n2F12(here->capbd2, here->capbd3, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z, r2h11y - r2h11z, i2h11y - i2h11z, r2h1m2y - r2h1m2z, i2h1m2y - i2h1m2z); *(ckt->CKTrhs + (here->MOS2bNode)) -= temp; *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp; /* capbd over */ /* all done */ break; default: ; } } } return(OK); } else return(E_BADPARM); } tmpk8ny_4pz/src/spicelib/devices/mos2/mos2par.c0000644000175000017500000000712213546075722021574 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "mos2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/fteext.h" /* ARGSUSED */ int MOS2param(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { double scale; MOS2instance *here = (MOS2instance *)inst; NG_IGNORE(select); if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; switch(param) { case MOS2_TEMP: here->MOS2temp = value->rValue+CONSTCtoK; here->MOS2tempGiven = TRUE; break; case MOS2_DTEMP: here->MOS2dtemp = value->rValue; here->MOS2dtempGiven = TRUE; break; case MOS2_M: here->MOS2m = value->rValue; here->MOS2mGiven = TRUE; break; case MOS2_W: here->MOS2w = value->rValue * scale; here->MOS2wGiven = TRUE; break; case MOS2_L: here->MOS2l = value->rValue * scale; here->MOS2lGiven = TRUE; break; case MOS2_AS: here->MOS2sourceArea = value->rValue * scale * scale; here->MOS2sourceAreaGiven = TRUE; break; case MOS2_AD: here->MOS2drainArea = value->rValue * scale * scale; here->MOS2drainAreaGiven = TRUE; break; case MOS2_PS: here->MOS2sourcePerimiter = value->rValue * scale; here->MOS2sourcePerimiterGiven = TRUE; break; case MOS2_PD: here->MOS2drainPerimiter = value->rValue * scale; here->MOS2drainPerimiterGiven = TRUE; break; case MOS2_NRS: here->MOS2sourceSquares = value->rValue; here->MOS2sourceSquaresGiven = TRUE; break; case MOS2_NRD: here->MOS2drainSquares = value->rValue; here->MOS2drainSquaresGiven = TRUE; break; case MOS2_OFF: here->MOS2off = (value->iValue != 0); break; case MOS2_IC_VBS: here->MOS2icVBS = value->rValue; here->MOS2icVBSGiven = TRUE; break; case MOS2_IC_VDS: here->MOS2icVDS = value->rValue; here->MOS2icVDSGiven = TRUE; break; case MOS2_IC_VGS: here->MOS2icVGS = value->rValue; here->MOS2icVGSGiven = TRUE; break; case MOS2_IC: switch(value->v.numValue){ case 3: here->MOS2icVBS = *(value->v.vec.rVec+2); here->MOS2icVBSGiven = TRUE; case 2: here->MOS2icVGS = *(value->v.vec.rVec+1); here->MOS2icVGSGiven = TRUE; case 1: here->MOS2icVDS = *(value->v.vec.rVec); here->MOS2icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; case MOS2_L_SENS: if(value->iValue) { here->MOS2senParmNo = 1; here->MOS2sens_l = 1; } break; case MOS2_W_SENS: if(value->iValue) { here->MOS2senParmNo = 1; here->MOS2sens_w = 1; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos2/mos2defs.h0000644000175000017500000004475713546075722021757 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFIxes **********/ #ifndef MOS2 #define MOS2 #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" /* declarations for level 2 MOSFETs */ /* indices to the array of MOSFET(2) noise sources */ enum { MOS2RDNOIZ = 0, MOS2RSNOIZ, MOS2IDNOIZ, MOS2FLNOIZ, MOS2TOTNOIZ, /* finally, the number of noise sources */ MOS2NSRCS }; /* information needed for each instance */ typedef struct sMOS2instance { struct GENinstance gen; #define MOS2modPtr(inst) ((struct sMOS2model *)((inst)->gen.GENmodPtr)) #define MOS2nextInstance(inst) ((struct sMOS2instance *)((inst)->gen.GENnextInstance)) #define MOS2name gen.GENname #define MOS2states gen.GENstate const int MOS2dNode; /* number of the gate node of the mosfet */ const int MOS2gNode; /* number of the gate node of the mosfet */ const int MOS2sNode; /* number of the source node of the mosfet */ const int MOS2bNode; /* number of the bulk node of the mosfet */ int MOS2dNodePrime; /* number of the internal drain node of the mosfet */ int MOS2sNodePrime; /* number of the internal source node of the mosfet */ int MOS2mode; /* device mode : 1 = normal, -1 = inverse */ unsigned MOS2mGiven :1; unsigned MOS2off :1;/* non-zero to indicate device is off for dc analysis*/ unsigned MOS2lGiven :1; unsigned MOS2wGiven :1; unsigned MOS2drainAreaGiven :1; unsigned MOS2sourceAreaGiven :1; unsigned MOS2drainSquaresGiven :1; unsigned MOS2sourceSquaresGiven :1; unsigned MOS2drainPerimiterGiven :1; unsigned MOS2sourcePerimiterGiven :1; unsigned MOS2dNodePrimeSet :1; unsigned MOS2sNodePrimeSet :1; unsigned MOS2icVBSGiven :1; unsigned MOS2icVDSGiven :1; unsigned MOS2icVGSGiven :1; unsigned MOS2vonGiven :1; unsigned MOS2vdsatGiven :1; unsigned MOS2tempGiven :1; /* per-instance temperature specified? */ unsigned MOS2dtempGiven :1; /* per-instance temperature difference specified? */ unsigned MOS2sens_l :1; /* field which indicates whether length of the mosfet is a design parameter or not */ unsigned MOS2sens_w :1; /* field which indicates whether width of the mosfet is a design parameter or not */ unsigned MOS2senPertFlag :1; /* indictes whether the the parameter of the particular instance is to be perturbed */ double *MOS2DdPtr; /* pointer to sparse matrix element at * (Drain node,drain node) */ double *MOS2GgPtr; /* pointer to sparse matrix element at * (gate node,gate node) */ double *MOS2SsPtr; /* pointer to sparse matrix element at * (source node,source node) */ double *MOS2BbPtr; /* pointer to sparse matrix element at * (bulk node,bulk node) */ double *MOS2DPdpPtr; /* pointer to sparse matrix element at * (drain prime node,drain prime node) */ double *MOS2SPspPtr; /* pointer to sparse matrix element at * (source prime node,source prime node) */ double *MOS2DdpPtr; /* pointer to sparse matrix element at * (drain node,drain prime node) */ double *MOS2GbPtr; /* pointer to sparse matrix element at * (gate node,bulk node) */ double *MOS2GdpPtr; /* pointer to sparse matrix element at * (gate node,drain prime node) */ double *MOS2GspPtr; /* pointer to sparse matrix element at * (gate node,source prime node) */ double *MOS2SspPtr; /* pointer to sparse matrix element at * (source node,source prime node) */ double *MOS2BdpPtr; /* pointer to sparse matrix element at * (bulk node,drain prime node) */ double *MOS2BspPtr; /* pointer to sparse matrix element at * (bulk node,source prime node) */ double *MOS2DPspPtr; /* pointer to sparse matrix element at * (drain prime node,source prime node) */ double *MOS2DPdPtr; /* pointer to sparse matrix element at * (drain prime node,drain node) */ double *MOS2BgPtr; /* pointer to sparse matrix element at * (bulk node,gate node) */ double *MOS2DPgPtr; /* pointer to sparse matrix element at * (drain prime node,gate node) */ double *MOS2SPgPtr; /* pointer to sparse matrix element at * (source prime node,gate node) */ double *MOS2SPsPtr; /* pointer to sparse matrix element at * (source prime node,source node) */ double *MOS2DPbPtr; /* pointer to sparse matrix element at * (drain prime node,bulk node) */ double *MOS2SPbPtr; /* pointer to sparse matrix element at * (source prime node,bulk node) */ double *MOS2SPdpPtr; /* pointer to sparse matrix element at * (source prime node,drain prime node) */ int MOS2senParmNo; /* parameter # for sensitivity use; set equal to 0 if neither length nor width of the mosfet is a design parameter */ double MOS2cgs; double MOS2cgd; double MOS2cgb; double *MOS2sens; #define MOS2senCgs MOS2sens /* contains pertured values of cgs */ #define MOS2senCgd MOS2sens + 6 /* contains perturbed values of cgd*/ #define MOS2senCgb MOS2sens + 12 /* contains perturbed values of cgb*/ #define MOS2senCbd MOS2sens + 18 /* contains perturbed values of cbd*/ #define MOS2senCbs MOS2sens + 24 /* contains perturbed values of cbs*/ #define MOS2senGds MOS2sens + 30 /* contains perturbed values of gds*/ #define MOS2senGbs MOS2sens + 36 /* contains perturbed values of gbs*/ #define MOS2senGbd MOS2sens + 42 /* contains perturbed values of gbd*/ #define MOS2senGm MOS2sens + 48 /* contains perturbed values of gm*/ #define MOS2senGmbs MOS2sens + 54 /* contains perturbed values of gmbs*/ #define MOS2dphigs_dl MOS2sens + 60 #define MOS2dphigd_dl MOS2sens + 61 #define MOS2dphigb_dl MOS2sens + 62 #define MOS2dphibs_dl MOS2sens + 63 #define MOS2dphibd_dl MOS2sens + 64 #define MOS2dphigs_dw MOS2sens + 65 #define MOS2dphigd_dw MOS2sens + 66 #define MOS2dphigb_dw MOS2sens + 67 #define MOS2dphibs_dw MOS2sens + 68 #define MOS2dphibd_dw MOS2sens + 69 double MOS2temp; /* temperature at which this instance operates */ double MOS2dtemp; /* difference of instance temperature from circuit temperature */ double MOS2tTransconductance; /* temperature corrected transconductance*/ double MOS2tSurfMob; /* temperature corrected surface mobility */ double MOS2tPhi; /* temperature corrected Phi */ double MOS2tVto; /* temperature corrected Vto */ double MOS2tSatCur; /* temperature corrected saturation Cur. */ double MOS2tSatCurDens; /* temperature corrected saturation Cur. density*/ double MOS2tCbd; /* temperature corrected B-D Capacitance */ double MOS2tCbs; /* temperature corrected B-S Capacitance */ double MOS2tCj; /* temperature corrected Bulk bottom Capacitance */ double MOS2tCjsw; /* temperature corrected Bulk side Capacitance */ double MOS2tBulkPot; /* temperature corrected Bulk potential */ double MOS2tDepCap; /* temperature adjusted transition point in */ /* the cureve matching Fc * Vj */ double MOS2tVbi; /* temperature adjusted Vbi */ double MOS2m; /* parallel device multiplier */ double MOS2l; /* the length of the channel region */ double MOS2w; /* the width of the channel region */ double MOS2drainArea; /* the area of the drain diffusion */ double MOS2sourceArea; /* the area of the source diffusion */ double MOS2drainSquares; /* the length of the drain in squares */ double MOS2sourceSquares; /* the length of the source in squares */ double MOS2drainPerimiter; double MOS2sourcePerimiter; double MOS2sourceConductance; /*conductance of source(or 0):set in setup*/ double MOS2drainConductance; /*conductance of drain(or 0):set in setup*/ double MOS2icVBS; /* initial condition B-S voltage */ double MOS2icVDS; /* initial condition D-S voltage */ double MOS2icVGS; /* initial condition G-S voltage */ double MOS2von; double MOS2vdsat; double MOS2sourceVcrit; /* Vcrit for pos. vds */ double MOS2drainVcrit; /* Vcrit for pos. vds */ double MOS2cd; double MOS2cbs; double MOS2cbd; double MOS2gmbs; double MOS2gm; double MOS2gds; double MOS2gbd; double MOS2gbs; double MOS2capbd; double MOS2capbs; double MOS2Cbd; double MOS2Cbdsw; double MOS2Cbs; double MOS2Cbssw; double MOS2f2d; double MOS2f3d; double MOS2f4d; double MOS2f2s; double MOS2f3s; double MOS2f4s; /* distortion stuff */ /* * naming convention: * x = vgs * y = vbs * z = vds * cdr = cdrain */ #define MOS2NDCOEFFS 30 #ifndef NODISTO double MOS2dCoeffs[MOS2NDCOEFFS]; #else /* NODISTO */ double *MOS2dCoeffs; #endif /* NODISTO */ #ifndef CONFIG #define capbs2 MOS2dCoeffs[0] #define capbs3 MOS2dCoeffs[1] #define capbd2 MOS2dCoeffs[2] #define capbd3 MOS2dCoeffs[3] #define gbs2 MOS2dCoeffs[4] #define gbs3 MOS2dCoeffs[5] #define gbd2 MOS2dCoeffs[6] #define gbd3 MOS2dCoeffs[7] #define capgb2 MOS2dCoeffs[8] #define capgb3 MOS2dCoeffs[9] #define cdr_x2 MOS2dCoeffs[10] #define cdr_y2 MOS2dCoeffs[11] #define cdr_z2 MOS2dCoeffs[12] #define cdr_xy MOS2dCoeffs[13] #define cdr_yz MOS2dCoeffs[14] #define cdr_xz MOS2dCoeffs[15] #define cdr_x3 MOS2dCoeffs[16] #define cdr_y3 MOS2dCoeffs[17] #define cdr_z3 MOS2dCoeffs[18] #define cdr_x2z MOS2dCoeffs[19] #define cdr_x2y MOS2dCoeffs[20] #define cdr_y2z MOS2dCoeffs[21] #define cdr_xy2 MOS2dCoeffs[22] #define cdr_xz2 MOS2dCoeffs[23] #define cdr_yz2 MOS2dCoeffs[24] #define cdr_xyz MOS2dCoeffs[25] #define capgs2 MOS2dCoeffs[26] #define capgs3 MOS2dCoeffs[27] #define capgd2 MOS2dCoeffs[28] #define capgd3 MOS2dCoeffs[29] /* end distortion coeffs. */ #endif #ifndef NONOISE double MOS2nVar[NSTATVARS][MOS2NSRCS]; #else /* NONOISE */ double **MOS2nVar; #endif /* NONOISE */ } MOS2instance ; #define MOS2vbd MOS2states+ 0 /* bulk-drain voltage */ #define MOS2vbs MOS2states+ 1 /* bulk-source voltage */ #define MOS2vgs MOS2states+ 2 /* gate-source voltage */ #define MOS2vds MOS2states+ 3 /* drain-source voltage */ #define MOS2capgs MOS2states+4 /* gate-source capacitor value */ #define MOS2qgs MOS2states+ 5 /* gate-source capacitor charge */ #define MOS2cqgs MOS2states+ 6 /* gate-source capacitor current */ #define MOS2capgd MOS2states+ 7 /* gate-drain capacitor value */ #define MOS2qgd MOS2states+ 8 /* gate-drain capacitor charge */ #define MOS2cqgd MOS2states+ 9 /* gate-drain capacitor current */ #define MOS2capgb MOS2states+10 /* gate-bulk capacitor value */ #define MOS2qgb MOS2states+ 11 /* gate-bulk capacitor charge */ #define MOS2cqgb MOS2states+ 12 /* gate-bulk capacitor current */ #define MOS2qbd MOS2states+ 13 /* bulk-drain capacitor charge */ #define MOS2cqbd MOS2states+ 14 /* bulk-drain capacitor current */ #define MOS2qbs MOS2states+ 15 /* bulk-source capacitor charge */ #define MOS2cqbs MOS2states+ 16 /* bulk-source capacitor current */ #define MOS2numStates 17 #define MOS2sensxpgs MOS2states+17 /* charge sensitivities and their derivatives * +18 for the derivatives * pointer to the beginning of the array */ #define MOS2sensxpgd MOS2states+19 #define MOS2sensxpgb MOS2states+21 #define MOS2sensxpbs MOS2states+23 #define MOS2sensxpbd MOS2states+25 #define MOS2numSenStates 10 /* per model data */ /* NOTE: parameters makred 'input - use xxxx' are parameters for * which a temperature correction is applied in MOS2temp, thus * the MOS3xxxx value in the per-instance structure should be used * instead in all calculations */ typedef struct sMOS2model { /* model structure for a resistor */ struct GENmodel gen; #define MOS2modType gen.GENmodType #define MOS2nextModel(inst) ((struct sMOS2model *)((inst)->gen.GENnextModel)) #define MOS2instances(inst) ((MOS2instance *)((inst)->gen.GENinstances)) #define MOS2modName gen.GENmodName int MOS2type; /* device type : 1 = nmos, -1 = pmos */ int MOS2gateType; double MOS2tnom; /* temperature at which parms were measured */ double MOS2latDiff; double MOS2jctSatCurDensity; /* input - use tSatCurDens */ double MOS2jctSatCur; /* input - use tSatCur */ double MOS2drainResistance; double MOS2sourceResistance; double MOS2sheetResistance; double MOS2transconductance; /* input - use tTransconductance */ double MOS2gateSourceOverlapCapFactor; double MOS2gateDrainOverlapCapFactor; double MOS2gateBulkOverlapCapFactor; double MOS2oxideCapFactor; double MOS2vt0; /* input - use tVto */ double MOS2capBD; /* input - use tCbd */ double MOS2capBS; /* input - use tCbs */ double MOS2bulkCapFactor; /* input - use tCj */ double MOS2sideWallCapFactor; /* input - use tCjsw */ double MOS2bulkJctPotential; /* input - use tBulkPot */ double MOS2bulkJctBotGradingCoeff; double MOS2bulkJctSideGradingCoeff; double MOS2fwdCapDepCoeff; double MOS2phi; /* input - use tPhi */ double MOS2gamma; double MOS2lambda; double MOS2substrateDoping; double MOS2surfaceStateDensity; double MOS2fastSurfaceStateDensity; /* nfs */ double MOS2oxideThickness; double MOS2surfaceMobility; double MOS2fNcoef; double MOS2fNexp; double MOS2narrowFactor; /* delta */ double MOS2critFieldExp; /* uexp */ double MOS2critField; /* ucrit */ double MOS2maxDriftVel; /* vmax */ double MOS2xd; double MOS2junctionDepth; /* xj */ double MOS2channelCharge; /* neff */ unsigned MOS2tnomGiven :1; /* user specified parm. meas. temp */ unsigned MOS2typeGiven :1; unsigned MOS2latDiffGiven :1; unsigned MOS2jctSatCurDensityGiven :1; unsigned MOS2jctSatCurGiven :1; unsigned MOS2drainResistanceGiven :1; unsigned MOS2sourceResistanceGiven :1; unsigned MOS2sheetResistanceGiven :1; unsigned MOS2transconductanceGiven :1; unsigned MOS2gateSourceOverlapCapFactorGiven :1; unsigned MOS2gateDrainOverlapCapFactorGiven :1; unsigned MOS2gateBulkOverlapCapFactorGiven :1; unsigned MOS2vt0Given :1; unsigned MOS2capBDGiven :1; unsigned MOS2capBSGiven :1; unsigned MOS2bulkCapFactorGiven :1; unsigned MOS2sideWallCapFactorGiven :1; unsigned MOS2bulkJctPotentialGiven :1; unsigned MOS2bulkJctBotGradingCoeffGiven :1; unsigned MOS2bulkJctSideGradingCoeffGiven :1; unsigned MOS2fwdCapDepCoeffGiven :1; unsigned MOS2phiGiven :1; unsigned MOS2gammaGiven :1; unsigned MOS2lambdaGiven :1; unsigned MOS2substrateDopingGiven :1; unsigned MOS2gateTypeGiven :1; unsigned MOS2surfaceStateDensityGiven :1; unsigned MOS2fastSurfaceStateDensityGiven :1; /* nfs */ unsigned MOS2oxideThicknessGiven :1; unsigned MOS2surfaceMobilityGiven :1; unsigned MOS2narrowFactorGiven :1; /* delta */ unsigned MOS2critFieldExpGiven :1; /* uexp */ unsigned MOS2critFieldGiven :1; /* ucrit */ unsigned MOS2maxDriftVelGiven :1; /* vmax */ unsigned MOS2junctionDepthGiven :1; /* xj */ unsigned MOS2channelChargeGiven :1; /* neff */ unsigned MOS2fNcoefGiven :1; unsigned MOS2fNexpGiven :1; } MOS2model; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ /* device parameters */ enum { MOS2_W = 1, MOS2_L, MOS2_AS, MOS2_AD, MOS2_PS, MOS2_PD, MOS2_NRS, MOS2_NRD, MOS2_OFF, MOS2_IC, MOS2_IC_VBS, MOS2_IC_VDS, MOS2_IC_VGS, MOS2_W_SENS, MOS2_L_SENS, MOS2_CB, MOS2_CG, MOS2_CS, MOS2_POWER, MOS2_CGS, MOS2_CGD, MOS2_DNODE, MOS2_GNODE, MOS2_SNODE, MOS2_BNODE, MOS2_DNODEPRIME, MOS2_SNODEPRIME, MOS2_SOURCECONDUCT, MOS2_DRAINCONDUCT, MOS2_VON, MOS2_VDSAT, MOS2_SOURCEVCRIT, MOS2_DRAINVCRIT, MOS2_CD, MOS2_CBS, MOS2_CBD, MOS2_GMBS, MOS2_GM, MOS2_GDS, MOS2_GBD, MOS2_GBS, MOS2_CAPBD, MOS2_CAPBS, MOS2_CAPZEROBIASBD, MOS2_CAPZEROBIASBDSW, MOS2_CAPZEROBIASBS, MOS2_CAPZEROBIASBSSW, MOS2_VBD, MOS2_VBS, MOS2_VGS, MOS2_VDS, MOS2_CAPGS, MOS2_QGS, MOS2_CQGS, MOS2_CAPGD, MOS2_QGD, MOS2_CQGD, MOS2_CAPGB, MOS2_QGB, MOS2_CQGB, MOS2_QBD, MOS2_CQBD, MOS2_QBS, MOS2_CQBS, MOS2_W_SENS_REAL, MOS2_W_SENS_IMAG, MOS2_W_SENS_MAG, MOS2_W_SENS_PH, MOS2_W_SENS_CPLX, MOS2_L_SENS_REAL, MOS2_L_SENS_IMAG, MOS2_L_SENS_MAG, MOS2_L_SENS_PH, MOS2_L_SENS_CPLX, MOS2_L_SENS_DC, MOS2_W_SENS_DC, MOS2_TEMP, MOS2_SOURCERESIST, MOS2_DRAINRESIST, MOS2_M, MOS2_DTEMP, }; /* model paramerers */ enum { MOS2_MOD_VTO = 101, MOS2_MOD_KP, MOS2_MOD_GAMMA, MOS2_MOD_PHI, MOS2_MOD_LAMBDA, MOS2_MOD_RD, MOS2_MOD_RS, MOS2_MOD_CBD, MOS2_MOD_CBS, MOS2_MOD_IS, MOS2_MOD_PB, MOS2_MOD_CGSO, MOS2_MOD_CGDO, MOS2_MOD_CGBO, MOS2_MOD_CJ, MOS2_MOD_MJ, MOS2_MOD_CJSW, MOS2_MOD_MJSW, MOS2_MOD_JS, MOS2_MOD_TOX, MOS2_MOD_LD, MOS2_MOD_RSH, MOS2_MOD_U0, MOS2_MOD_FC, MOS2_MOD_NSUB, MOS2_MOD_TPG, MOS2_MOD_NSS, MOS2_MOD_NFS, MOS2_MOD_DELTA, MOS2_MOD_UEXP, MOS2_MOD_VMAX, MOS2_MOD_XJ, MOS2_MOD_NEFF, MOS2_MOD_UCRIT, MOS2_MOD_NMOS, MOS2_MOD_PMOS, MOS2_MOD_TNOM, }; enum { MOS2_MOD_KF = 139, MOS2_MOD_AF, MOS2_MOD_TYPE, }; /* model questions */ #include "mos2ext.h" #endif /*MOS2*/ tmpk8ny_4pz/src/spicelib/devices/mos2/mos2sset.c0000644000175000017500000000261013546075722021765 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mos2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS2sSetup(SENstruct *info, GENmodel *inModel) /* loop through all the devices and * allocate parameter #s to design parameters */ { MOS2model *model = (MOS2model *)inModel; MOS2instance *here; /* loop through all the models */ for( ; model != NULL; model = MOS2nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS2instances(model); here != NULL ; here=MOS2nextInstance(here)) { if(here->MOS2senParmNo){ if((here->MOS2sens_l)&&(here->MOS2sens_w)){ here->MOS2senParmNo = ++(info->SENparms); ++(info->SENparms);/* MOS has two design parameters */ } else{ here->MOS2senParmNo = ++(info->SENparms); } } here->MOS2senPertFlag = OFF; if((here->MOS2sens = TMALLOC(double, 70)) == NULL) { return(E_NOMEM); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos2/mos2sld.c0000644000175000017500000006424113546075722021601 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ /* actually load the current sensitivity * information into the array previously provided */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mos2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS2sLoad(GENmodel *inModel, CKTcircuit *ckt) { MOS2model *model = (MOS2model *)inModel; MOS2instance *here; double SaveState[44]; int save_mode; int i; int iparmno; int error; int flag; double A0; double DELA; double Apert; double DELAinv; double gspr0; double gspr; double gdpr0; double gdpr; double cdpr0; double cspr0; double cd0; double cbd0; double cbs0; double cd; double cbd; double cbs; double DcdprDp; double DcsprDp; double DcbDp; double DcdDp; double DcbsDp; double DcbdDp; double DcdprmDp; double DcsprmDp; double qgs0; double qgd0; double qgb0; double qbd0; double qbd; double qbs0; double qbs; double DqgsDp; double DqgdDp; double DqgbDp; double DqbdDp; double DqbsDp; double Osxpgs; double Osxpgd; double Osxpgb; double Osxpbd; double Osxpbs; double tag0; double tag1; double arg; double sarg; double sargsw; int offset; double EffectiveLength; SENstruct *info; #ifdef SENSDEBUG printf("MOS2senload \n"); printf("CKTtime = %.5e\n",ckt->CKTtime); printf("CKTorder = %d\n",ckt->CKTorder); #endif /* SENSDEBUG */ info = ckt->CKTsenInfo; info->SENstatus = PERTURBATION; tag0 = ckt->CKTag[0]; tag1 = ckt->CKTag[1]; if(ckt->CKTorder == 1){ tag1 = 0; } /* loop through all the models */ for( ; model != NULL; model = MOS2nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS2instances(model); here != NULL ; here=MOS2nextInstance(here)) { #ifdef SENSDEBUG printf("senload instance name %s\n",here->MOS2name); printf("gate = %d ,drain = %d, drainprm = %d\n", here->MOS2gNode,here->MOS2dNode,here->MOS2dNodePrime); printf("source = %d , sourceprm = %d ,body = %d, senparmno = %d\n", here->MOS2sNode ,here->MOS2sNodePrime, here->MOS2bNode,here->MOS2senParmNo); #endif /* SENSDEBUG */ /* save the unperturbed values in the state vector */ for(i=0; i <= 16; i++){ *(SaveState + i) = *(ckt->CKTstate0 + here->MOS2states + i); } *(SaveState + 17) = here->MOS2sourceConductance; *(SaveState + 18) = here->MOS2drainConductance; *(SaveState + 19) = here->MOS2cd; *(SaveState + 20) = here->MOS2cbs; *(SaveState + 21) = here->MOS2cbd; *(SaveState + 22) = here->MOS2gmbs; *(SaveState + 23) = here->MOS2gm; *(SaveState + 24) = here->MOS2gds; *(SaveState + 25) = here->MOS2gbd; *(SaveState + 26) = here->MOS2gbs; *(SaveState + 27) = here->MOS2capbd; *(SaveState + 28) = here->MOS2capbs; *(SaveState + 29) = here->MOS2Cbd; *(SaveState + 30) = here->MOS2Cbdsw; *(SaveState + 31) = here->MOS2Cbs; *(SaveState + 32) = here->MOS2Cbssw; *(SaveState + 33) = here->MOS2f2d; *(SaveState + 34) = here->MOS2f3d; *(SaveState + 35) = here->MOS2f4d; *(SaveState + 36) = here->MOS2f2s; *(SaveState + 37) = here->MOS2f3s; *(SaveState + 38) = here->MOS2f4s; *(SaveState + 39) = here->MOS2cgs; *(SaveState + 40) = here->MOS2cgd; *(SaveState + 41) = here->MOS2cgb; *(SaveState + 42) = here->MOS2vdsat; *(SaveState + 43) = here->MOS2von; save_mode = here->MOS2mode; if(here->MOS2senParmNo == 0) goto next1; #ifdef SENSDEBUG printf("without perturbation \n"); printf("gbd =%.5e\n",here->MOS2gbd); printf("satCur =%.5e\n",here->MOS2tSatCur); printf("satCurDens =%.5e\n",here->MOS2tSatCurDens); printf("vbd =%.5e\n",*(ckt->CKTstate0 + here->MOS2vbd)); #endif /* SENSDEBUG */ cdpr0= here->MOS2cd; cspr0= -(here->MOS2cd + here->MOS2cbd + here->MOS2cbs); if((info->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)){ qgs0 = *(ckt->CKTstate1 + here->MOS2qgs); qgd0 = *(ckt->CKTstate1 + here->MOS2qgd); qgb0 = *(ckt->CKTstate1 + here->MOS2qgb); } else{ qgs0 = *(ckt->CKTstate0 + here->MOS2qgs); qgd0 = *(ckt->CKTstate0 + here->MOS2qgd); qgb0 = *(ckt->CKTstate0 + here->MOS2qgb); } here->MOS2senPertFlag = ON; error = MOS2load((GENmodel*)model,ckt); if(error) return(error); cd0 = here->MOS2cd ; cbd0 = here->MOS2cbd ; cbs0 = here->MOS2cbs ; gspr0= here->MOS2sourceConductance ; gdpr0= here->MOS2drainConductance ; qbs0 = *(ckt->CKTstate0 + here->MOS2qbs); qbd0 = *(ckt->CKTstate0 + here->MOS2qbd); for( flag = 0 ; flag <= 1 ; flag++){ if(here->MOS2sens_l == 0) if(flag == 0) goto next2; if(here->MOS2sens_w == 0) if(flag == 1) goto next2; if(flag == 0){ A0 = here->MOS2l; DELA = info->SENpertfac * A0; DELAinv = 1.0/DELA; Apert = A0 + DELA; here->MOS2l = Apert; } else{ A0 = here->MOS2w; DELA = info->SENpertfac * A0; DELAinv = 1.0/DELA; Apert = A0 + DELA; here->MOS2w = Apert; here->MOS2drainArea *= (1 + info->SENpertfac); here->MOS2sourceArea *= (1 + info->SENpertfac); here->MOS2Cbd *= (1 + info->SENpertfac); here->MOS2Cbs *= (1 + info->SENpertfac); if(here->MOS2drainPerimiter){ here->MOS2Cbdsw += here->MOS2Cbdsw * DELA/here->MOS2drainPerimiter; } if(here->MOS2sourcePerimiter){ here->MOS2Cbssw += here->MOS2Cbssw * DELA/here->MOS2sourcePerimiter; } if(*(ckt->CKTstate0 + here->MOS2vbd) >= here->MOS2tDepCap){ arg = 1-model->MOS2fwdCapDepCoeff; sarg = exp( (-model->MOS2bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS2bulkJctSideGradingCoeff) * log(arg) ); here->MOS2f2d = here->MOS2Cbd* (1-model->MOS2fwdCapDepCoeff* (1+model->MOS2bulkJctBotGradingCoeff))* sarg/arg + here->MOS2Cbdsw*(1-model->MOS2fwdCapDepCoeff* (1+model->MOS2bulkJctSideGradingCoeff))* sargsw/arg; here->MOS2f3d = here->MOS2Cbd * model->MOS2bulkJctBotGradingCoeff * sarg/arg/ here->MOS2tBulkPot + here->MOS2Cbdsw * model->MOS2bulkJctSideGradingCoeff * sargsw/arg / here->MOS2tBulkPot; here->MOS2f4d = here->MOS2Cbd* here->MOS2tBulkPot*(1-arg*sarg)/ (1-model->MOS2bulkJctBotGradingCoeff) + here->MOS2Cbdsw*here->MOS2tBulkPot* (1-arg*sargsw)/ (1-model->MOS2bulkJctSideGradingCoeff) -here->MOS2f3d/2* (here->MOS2tDepCap*here->MOS2tDepCap) -here->MOS2tDepCap * here->MOS2f2d; } if(*(ckt->CKTstate0 + here->MOS2vbs) >= here->MOS2tDepCap){ arg = 1-model->MOS2fwdCapDepCoeff; sarg = exp( (-model->MOS2bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS2bulkJctSideGradingCoeff) * log(arg) ); here->MOS2f2s = here->MOS2Cbs* (1-model->MOS2fwdCapDepCoeff* (1+model->MOS2bulkJctBotGradingCoeff))* sarg/arg + here->MOS2Cbssw*(1-model->MOS2fwdCapDepCoeff* (1+model->MOS2bulkJctSideGradingCoeff))* sargsw/arg; here->MOS2f3s = here->MOS2Cbs * model->MOS2bulkJctBotGradingCoeff * sarg/arg/ here->MOS2tBulkPot + here->MOS2Cbssw * model->MOS2bulkJctSideGradingCoeff *sargsw/arg / here->MOS2tBulkPot; here->MOS2f4s = here->MOS2Cbs*here->MOS2tBulkPot* (1-arg*sarg)/ (1-model->MOS2bulkJctBotGradingCoeff) + here->MOS2Cbssw*here->MOS2tBulkPot* (1-arg*sargsw)/ (1-model->MOS2bulkJctSideGradingCoeff) -here->MOS2f3s/2* (here->MOS2tDepCap*here->MOS2tDepCap) -here->MOS2tDepCap * here->MOS2f2s; } here->MOS2drainConductance *= Apert/A0; here->MOS2sourceConductance *= Apert/A0; } #ifdef SENSDEBUG if(flag == 0) printf("perturbation of l\n"); if(flag == 1) printf("perturbation of w\n"); #endif /* SENSDEBUG */ error = MOS2load((GENmodel*)model,ckt); if(error) return(error); if(flag == 0){ here->MOS2l = A0; } else{ here->MOS2w = A0; here->MOS2drainArea /= (1 + info->SENpertfac); here->MOS2sourceArea /= (1 + info->SENpertfac); here->MOS2drainConductance *= A0/Apert; here->MOS2sourceConductance *= A0/Apert; } cd = here->MOS2cd ; cbd = here->MOS2cbd ; cbs = here->MOS2cbs ; gspr= here->MOS2sourceConductance ; gdpr= here->MOS2drainConductance ; DcdDp = (cd - cd0) * DELAinv; DcbsDp = (cbs - cbs0) * DELAinv; DcbdDp = (cbd - cbd0) * DELAinv; DcbDp = ( DcbsDp + DcbdDp ); DcdprDp = 0; DcsprDp = 0; if(here->MOS2dNode != here->MOS2dNodePrime) if(gdpr0) DcdprDp = cdpr0 * (gdpr - gdpr0)/gdpr0 * DELAinv; if(here->MOS2sNode != here->MOS2sNodePrime) if(gspr0) DcsprDp = cspr0 * (gspr - gspr0)/gspr0 * DELAinv; DcdprmDp = ( - DcdprDp + DcdDp); DcsprmDp = ( - DcbsDp - DcdDp - DcbdDp - DcsprDp); if(flag == 0){ EffectiveLength = here->MOS2l - 2*model->MOS2latDiff; if(EffectiveLength == 0){ DqgsDp = 0; DqgdDp = 0; DqgbDp = 0; } else{ DqgsDp = model->MOS2type * qgs0 / EffectiveLength; DqgdDp = model->MOS2type * qgd0 / EffectiveLength; DqgbDp = model->MOS2type * qgb0 / EffectiveLength; } } else{ DqgsDp = model->MOS2type * qgs0 / here->MOS2w; DqgdDp = model->MOS2type * qgd0 / here->MOS2w; DqgbDp = model->MOS2type * qgb0 / here->MOS2w; } qbd = *(ckt->CKTstate0 + here->MOS2qbd); qbs = *(ckt->CKTstate0 + here->MOS2qbs); DqbsDp = model->MOS2type * (qbs - qbs0)*DELAinv; DqbdDp = model->MOS2type * (qbd - qbd0)*DELAinv; if(flag == 0){ *(here->MOS2dphigs_dl) = DqgsDp; *(here->MOS2dphigd_dl) = DqgdDp; *(here->MOS2dphibs_dl) = DqbsDp; *(here->MOS2dphibd_dl) = DqbdDp; *(here->MOS2dphigb_dl) = DqgbDp; } else{ *(here->MOS2dphigs_dw) = DqgsDp; *(here->MOS2dphigd_dw) = DqgdDp; *(here->MOS2dphibs_dw) = DqbsDp; *(here->MOS2dphibd_dw) = DqbdDp; *(here->MOS2dphigb_dw) = DqgbDp; } #ifdef SENSDEBUG printf("CKTag[0]=%.7e,CKTag[1]=%.7e,flag= %d\n", ckt->CKTag[0],ckt->CKTag[1],flag); printf("cd0 = %.7e ,cd = %.7e,\n",cd0,cd); printf("cbs0 = %.7e ,cbs = %.7e,\n",cbs0,cbs); printf("cbd0 = %.7e ,cbd = %.7e,\n",cbd0,cbd); printf("DcdprmDp = %.7e,\n",DcdprmDp); printf("DcsprmDp = %.7e,\n",DcsprmDp); printf("DcdprDp = %.7e,\n",DcdprDp); printf("DcsprDp = %.7e,\n",DcsprDp); printf("qgs0 = %.7e \n",qgs0); printf("qgd0 = %.7e \n",qgd0); printf("qgb0 = %.7e \n",qgb0); printf("qbs0 = %.7e ,qbs = %.7e,\n",qbs0,qbs); printf("qbd0 = %.7e ,qbd = %.7e,\n",qbd0,qbd); printf("DqgsDp = %.7e \n",DqgsDp); printf("DqgdDp = %.7e \n",DqgdDp); printf("DqgbDp = %.7e \n",DqgbDp); printf("DqbsDp = %.7e \n",DqbsDp); printf("DqbdDp = %.7e \n",DqbdDp); printf("EffectiveLength = %.7e \n",EffectiveLength); printf("tdepCap = %.7e \n",here->MOS2tDepCap); printf("\n"); #endif /* SENSDEBUG*/ if((info->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)) goto next2; /* * load RHS matrix */ if(flag == 0){ *(info->SEN_RHS[here->MOS2bNode] + here->MOS2senParmNo) -= model->MOS2type * DcbDp; *(info->SEN_RHS[here->MOS2dNode] + here->MOS2senParmNo) -= model->MOS2type * DcdprDp; *(info->SEN_RHS[here->MOS2dNodePrime] + here->MOS2senParmNo) -= model->MOS2type * DcdprmDp; *(info->SEN_RHS[here->MOS2sNode] + here->MOS2senParmNo) -= model->MOS2type * DcsprDp; *(info->SEN_RHS[here->MOS2sNodePrime] + here->MOS2senParmNo) -= model->MOS2type * DcsprmDp; } else{ offset = here->MOS2sens_l; *(info->SEN_RHS[here->MOS2bNode] + here->MOS2senParmNo + offset) -= model->MOS2type * DcbDp; *(info->SEN_RHS[here->MOS2dNode] + here->MOS2senParmNo + offset) -= model->MOS2type * DcdprDp; *(info->SEN_RHS[here->MOS2dNodePrime] + here->MOS2senParmNo + offset) -= model->MOS2type * DcdprmDp; *(info->SEN_RHS[here->MOS2sNode] + here->MOS2senParmNo + offset) -= model->MOS2type * DcsprDp; *(info->SEN_RHS[here->MOS2sNodePrime] + here->MOS2senParmNo + offset) -= model->MOS2type * DcsprmDp; } #ifdef SENSDEBUG printf("after loading\n"); if(flag == 0){ printf("DcbDp=%.7e\n", *(info->SEN_RHS[here->MOS2bNode] + here->MOS2senParmNo)); printf("DcdprDp=%.7e\n", *(info->SEN_RHS[here->MOS2dNode] + here->MOS2senParmNo)); printf("DcsprDp=%.7e\n", *(info->SEN_RHS[here->MOS2sNode] + here->MOS2senParmNo)); printf("DcdprmDp=%.7e\n", *(info->SEN_RHS[here->MOS2dNodePrime] + here->MOS2senParmNo)); printf("DcsprmDp=%.7e\n", *(info->SEN_RHS[here->MOS2sNodePrime] + here->MOS2senParmNo)); printf("\n"); } else{ printf("DcbDp=%.7e\n", *(info->SEN_RHS[here->MOS2bNode] + here->MOS2senParmNo + here->MOS2sens_l)); printf("DcdprDp=%.7e\n", *(info->SEN_RHS[here->MOS2dNode] + here->MOS2senParmNo + here->MOS2sens_l)); printf("DcsprDp=%.7e\n", *(info->SEN_RHS[here->MOS2sNode] + here->MOS2senParmNo + here->MOS2sens_l)); printf("DcdprmDp=%.7e\n", *(info->SEN_RHS[here->MOS2dNodePrime] + here->MOS2senParmNo + here->MOS2sens_l)); printf("DcsprmDp=%.7e\n", *(info->SEN_RHS[here->MOS2sNodePrime] + here->MOS2senParmNo + here->MOS2sens_l)); } #endif /* SENSDEBUG*/ next2: ; } next1: if((info->SENmode == DCSEN) || (ckt->CKTmode&MODETRANOP) ) goto restore; if((info->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)) goto restore; for(iparmno = 1;iparmno<=info->SENparms;iparmno++){ #ifdef SENSDEBUG printf("after conductive currents\n"); printf("iparmno = %d\n",iparmno); printf("DcbDp=%.7e\n", *(info->SEN_RHS[here->MOS2bNode] + iparmno)); printf("DcdprDp=%.7e\n", *(info->SEN_RHS[here->MOS2dNode] + iparmno)); printf("DcdprmDp=%.7e\n", *(info->SEN_RHS[here->MOS2dNodePrime] + iparmno)); printf("DcsprDp=%.7e\n", *(info->SEN_RHS[here->MOS2sNode] + iparmno)); printf("DcsprmDp=%.7e\n", *(info->SEN_RHS[here->MOS2sNodePrime] + iparmno)); printf("\n"); #endif /* SENSDEBUG */ Osxpgs = tag0 * *(ckt->CKTstate1 + here->MOS2sensxpgs + 10*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->MOS2sensxpgs + 10*(iparmno - 1) + 1); Osxpgd = tag0 * *(ckt->CKTstate1 + here->MOS2sensxpgd + 10*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->MOS2sensxpgd + 10*(iparmno - 1) + 1); Osxpbs = tag0 * *(ckt->CKTstate1 + here->MOS2sensxpbs + 10*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->MOS2sensxpbs + 10*(iparmno - 1) + 1); Osxpbd =tag0 * *(ckt->CKTstate1 + here->MOS2sensxpbd + 10*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->MOS2sensxpbd + 10*(iparmno - 1) + 1); Osxpgb = tag0 * *(ckt->CKTstate1 + here->MOS2sensxpgb + 10*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->MOS2sensxpgb + 10*(iparmno - 1) + 1); #ifdef SENSDEBUG printf("iparmno=%d\n",iparmno); printf("sxpgs=%.7e,sdgs=%.7e\n", *(ckt->CKTstate1 + here->MOS2sensxpgs + 10*(iparmno - 1)), *(ckt->CKTstate1 + here->MOS2sensxpgs + 10*(iparmno - 1) + 1)); printf("sxpgd=%.7e,sdgd=%.7e\n", *(ckt->CKTstate1 + here->MOS2sensxpgd + 10*(iparmno - 1)), *(ckt->CKTstate1 + here->MOS2sensxpgd + 10*(iparmno - 1) + 1)); printf("sxpbs=%.7e,sdbs=%.7e\n", *(ckt->CKTstate1 + here->MOS2sensxpbs + 10*(iparmno - 1)), *(ckt->CKTstate1 + here->MOS2sensxpbs + 10*(iparmno - 1) + 1)); printf("sxpbd=%.7e,sdbd=%.7e\n", *(ckt->CKTstate1 + here->MOS2sensxpbd + 10*(iparmno - 1)), *(ckt->CKTstate1 + here->MOS2sensxpbd + 10*(iparmno - 1) + 1)); printf("sxpgb=%.7e,sdgb=%.7e\n", *(ckt->CKTstate1 + here->MOS2sensxpgb + 10*(iparmno - 1)), *(ckt->CKTstate1 + here->MOS2sensxpgb + 10*(iparmno - 1) + 1)); printf("before loading DqDp\n"); printf("Osxpgs=%.7e,Osxpgd=%.7e\n",Osxpgs,Osxpgd); printf("Osxpbs=%.7e,Osxpbd=%.7e,Osxpgb=%.7e\n", Osxpbs,Osxpbd,Osxpgb); printf("\n"); #endif /* SENSDEBUG */ if(here->MOS2sens_l && (iparmno == here->MOS2senParmNo)){ Osxpgs -= tag0 * *(here->MOS2dphigs_dl); Osxpgd -= tag0 * *(here->MOS2dphigd_dl); Osxpbs -= tag0 * *(here->MOS2dphibs_dl); Osxpbd -= tag0 * *(here->MOS2dphibd_dl); Osxpgb -= tag0 * *(here->MOS2dphigb_dl); } if(here->MOS2sens_w && (iparmno == (here->MOS2senParmNo + (int) here->MOS2sens_l))){ Osxpgs -= tag0 * *(here->MOS2dphigs_dw); Osxpgd -= tag0 * *(here->MOS2dphigd_dw); Osxpbs -= tag0 * *(here->MOS2dphibs_dw); Osxpbd -= tag0 * *(here->MOS2dphibd_dw); Osxpgb -= tag0 * *(here->MOS2dphigb_dw); } #ifdef SENSDEBUG printf("after loading DqDp\n"); printf("DqgsDp=%.7e",DqgsDp); printf("Osxpgs=%.7e,Osxpgd=%.7e\n",Osxpgs,Osxpgd); printf("Osxpbs=%.7e,Osxpbd=%.7e,Osxpgb=%.7e\n", Osxpbs,Osxpbd,Osxpgb); #endif /* SENSDEBUG */ *(info->SEN_RHS[here->MOS2bNode] + iparmno) += Osxpbs + Osxpbd -Osxpgb; *(info->SEN_RHS[here->MOS2gNode] + iparmno) += Osxpgs + Osxpgd + Osxpgb; *(info->SEN_RHS[here->MOS2dNodePrime] + iparmno) -= Osxpgd + Osxpbd ; *(info->SEN_RHS[here->MOS2sNodePrime] + iparmno) -= Osxpgs + Osxpbs; #ifdef SENSDEBUG printf("after capacitive currents\n"); printf("DcbDp=%.7e\n", *(info->SEN_RHS[here->MOS2bNode] + iparmno)); printf("DcdprDp=%.7e\n", *(info->SEN_RHS[here->MOS2dNode] + iparmno)); printf("DcdprmDp=%.7e\n", *(info->SEN_RHS[here->MOS2dNodePrime] + iparmno)); printf("DcsprDp=%.7e\n", *(info->SEN_RHS[here->MOS2sNode] + iparmno)); printf("DcsprmDp=%.7e\n", *(info->SEN_RHS[here->MOS2sNodePrime] + iparmno)); #endif /* SENSDEBUG */ } restore: /* put the unperturbed values back into the state vector */ for(i=0; i <= 16; i++) *(ckt->CKTstate0 + here->MOS2states + i) = *(SaveState + i); here->MOS2sourceConductance = *(SaveState + 17) ; here->MOS2drainConductance = *(SaveState + 18) ; here->MOS2cd = *(SaveState + 19) ; here->MOS2cbs = *(SaveState + 20) ; here->MOS2cbd = *(SaveState + 21) ; here->MOS2gmbs = *(SaveState + 22) ; here->MOS2gm = *(SaveState + 23) ; here->MOS2gds = *(SaveState + 24) ; here->MOS2gbd = *(SaveState + 25) ; here->MOS2gbs = *(SaveState + 26) ; here->MOS2capbd = *(SaveState + 27) ; here->MOS2capbs = *(SaveState + 28) ; here->MOS2Cbd = *(SaveState + 29) ; here->MOS2Cbdsw = *(SaveState + 30) ; here->MOS2Cbs = *(SaveState + 31) ; here->MOS2Cbssw = *(SaveState + 32) ; here->MOS2f2d = *(SaveState + 33) ; here->MOS2f3d = *(SaveState + 34) ; here->MOS2f4d = *(SaveState + 35) ; here->MOS2f2s = *(SaveState + 36) ; here->MOS2f3s = *(SaveState + 37) ; here->MOS2f4s = *(SaveState + 38) ; here->MOS2cgs = *(SaveState + 39) ; here->MOS2cgd = *(SaveState + 40) ; here->MOS2cgb = *(SaveState + 41) ; here->MOS2vdsat = *(SaveState + 42) ; here->MOS2von = *(SaveState + 43) ; here->MOS2mode = save_mode ; here->MOS2senPertFlag = OFF; } } info->SENstatus = NORMAL; #ifdef SENSDEBUG printf("MOS2senload end\n"); #endif /* SENSDEBUG */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos2/mos2.c0000644000175000017500000002267413546075722021102 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFIxes **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "mos2defs.h" #include "ngspice/suffix.h" IFparm MOS2pTable[] = { /* parameters */ IOPU("m", MOS2_M, IF_REAL , "Multiplier"), IOPU("l", MOS2_L, IF_REAL , "Length"), IOPU("w", MOS2_W, IF_REAL , "Width"), IOPU("ad", MOS2_AD, IF_REAL , "Drain area"), IOPU("as", MOS2_AS, IF_REAL , "Source area"), IOPU("pd", MOS2_PD, IF_REAL , "Drain perimeter"), IOPU("ps", MOS2_PS, IF_REAL , "Source perimeter"), OP( "id", MOS2_CD, IF_REAL,"Drain current"), OPR( "cd", MOS2_CD, IF_REAL,""), OP( "ibd", MOS2_CBD, IF_REAL, "B-D junction current"), OP( "ibs", MOS2_CBS, IF_REAL, "B-S junction current"), OP( "is", MOS2_CS, IF_REAL, "Source current "), OP( "ig", MOS2_CG, IF_REAL, "Gate current "), OP( "ib", MOS2_CB, IF_REAL, "Bulk current "), OP( "vgs", MOS2_VGS, IF_REAL, "Gate-Source voltage"), OP( "vds", MOS2_VDS, IF_REAL, "Drain-Source voltage"), OP( "vbs", MOS2_VBS, IF_REAL, "Bulk-Source voltage"), OPU( "vbd", MOS2_VBD, IF_REAL, "Bulk-Drain voltage"), IOPU("nrd", MOS2_NRD, IF_REAL , "Drain squares"), IOPU("nrs", MOS2_NRS, IF_REAL , "Source squares"), IP("off", MOS2_OFF, IF_FLAG , "Device initially off"), IOPAU("icvds", MOS2_IC_VDS,IF_REAL , "Initial D-S voltage"), IOPAU("icvgs", MOS2_IC_VGS,IF_REAL , "Initial G-S voltage"), IOPAU("icvbs", MOS2_IC_VBS,IF_REAL , "Initial B-S voltage"), IOPU("temp", MOS2_TEMP, IF_REAL ,"Instance operating temperature"), IOPU("dtemp", MOS2_DTEMP, IF_REAL , "Instance temperature difference"), IP( "ic", MOS2_IC, IF_REALVEC, "Vector of D-S, G-S, B-S voltages"), IP( "sens_l", MOS2_L_SENS,IF_FLAG, "flag to request sensitivity WRT length"), IP( "sens_w", MOS2_W_SENS,IF_FLAG, "flag to request sensitivity WRT width"), /* OP( "cgs", MOS2_CGS, IF_REAL , "Gate-Source capacitance"), OP( "cgd", MOS2_CGD, IF_REAL , "Gate-Drain capacitance"), */ OPU( "dnode", MOS2_DNODE, IF_INTEGER, "Number of drain node"), OPU( "gnode", MOS2_GNODE, IF_INTEGER, "Number of gate node"), OPU( "snode", MOS2_SNODE, IF_INTEGER, "Number of source node"), OPU( "bnode", MOS2_BNODE, IF_INTEGER, "Number of bulk node"), OPU( "dnodeprime", MOS2_DNODEPRIME, IF_INTEGER, "Number of internal drain node"), OPU( "snodeprime", MOS2_SNODEPRIME, IF_INTEGER, "Number of internal source node"), OP( "von", MOS2_VON, IF_REAL, " "), OP( "vdsat", MOS2_VDSAT, IF_REAL,"Saturation drain voltage"), OPU( "sourcevcrit", MOS2_SOURCEVCRIT, IF_REAL,"Critical source voltage"), OPU( "drainvcrit", MOS2_DRAINVCRIT, IF_REAL,"Critical drain voltage"), OP( "rs", MOS2_SOURCERESIST, IF_REAL, "Source resistance"), OPU( "sourceconductance", MOS2_SOURCECONDUCT, IF_REAL, "Source conductance"), OP( "rd", MOS2_DRAINRESIST, IF_REAL, "Drain resistance"), OPU( "drainconductance", MOS2_DRAINCONDUCT, IF_REAL, "Drain conductance"), OP( "gm", MOS2_GM, IF_REAL, "Transconductance"), OP( "gds", MOS2_GDS, IF_REAL, "Drain-Source conductance"), OP( "gmb", MOS2_GMBS, IF_REAL, "Bulk-Source transconductance"), OPR( "gmbs", MOS2_GMBS, IF_REAL, ""), OPU( "gbd", MOS2_GBD, IF_REAL, "Bulk-Drain conductance"), OPU( "gbs", MOS2_GBS, IF_REAL, "Bulk-Source conductance"), OP( "cbd", MOS2_CAPBD, IF_REAL, "Bulk-Drain capacitance"), OP( "cbs", MOS2_CAPBS, IF_REAL, "Bulk-Source capacitance"), OP( "cgs", MOS2_CAPGS, IF_REAL, "Gate-Source capacitance"), OP( "cgd", MOS2_CAPGD, IF_REAL, "Gate-Drain capacitance"), OP( "cgb", MOS2_CAPGB, IF_REAL, "Gate-Bulk capacitance"), OPU( "cbd0", MOS2_CAPZEROBIASBD, IF_REAL,"Zero-Bias B-D junction capacitance"), OPU( "cbdsw0",MOS2_CAPZEROBIASBDSW,IF_REAL, " "), OPU( "cbs0", MOS2_CAPZEROBIASBS, IF_REAL,"Zero-Bias B-S junction capacitance"), OPU( "cbssw0", MOS2_CAPZEROBIASBSSW,IF_REAL," "), OPU("cqgs",MOS2_CQGS,IF_REAL,"Capacitance due to gate-source charge storage"), OPU("cqgd",MOS2_CQGD,IF_REAL,"Capacitance due to gate-drain charge storage"), OPU("cqgb",MOS2_CQGB,IF_REAL,"Capacitance due to gate-bulk charge storage"), OPU("cqbd",MOS2_CQBD,IF_REAL,"Capacitance due to bulk-drain charge storage"), OPU("cqbs",MOS2_CQBS,IF_REAL,"Capacitance due to bulk-source charge storage"), OPU( "qgs", MOS2_QGS, IF_REAL, "Gate-Source charge storage"), OPU( "qgd", MOS2_QGD, IF_REAL, "Gate-Drain charge storage"), OPU( "qgb", MOS2_QGB, IF_REAL, "Gate-Bulk charge storage"), OPU( "qbd", MOS2_QBD, IF_REAL, "Bulk-Drain charge storage"), OPU( "qbs", MOS2_QBS, IF_REAL, "Bulk-Source charge storage"), OPU( "p", MOS2_POWER, IF_REAL, "Instantaneous power "), OPU( "sens_l_dc", MOS2_L_SENS_DC, IF_REAL, "dc sensitivity wrt length"), OPU( "sens_l_real", MOS2_L_SENS_REAL, IF_REAL, "real part of ac sensitivity wrt length"), OPU( "sens_l_imag", MOS2_L_SENS_IMAG, IF_REAL, "imag part of ac sensitivity wrt length"), OPU( "sens_l_cplx", MOS2_L_SENS_CPLX, IF_COMPLEX, "ac sensitivity wrt length"), OPU( "sens_l_mag", MOS2_L_SENS_MAG, IF_REAL, "sensitivity wrt l of ac magnitude"), OPU( "sens_l_ph", MOS2_L_SENS_PH, IF_REAL, "sensitivity wrt l of ac phase"), OPU( "sens_w_dc", MOS2_W_SENS_DC, IF_REAL, "dc sensitivity wrt width"), OPU( "sens_w_real", MOS2_W_SENS_REAL, IF_REAL, "dc sensitivity and real part of ac sensitivity wrt width"), OPU( "sens_w_imag", MOS2_W_SENS_IMAG, IF_REAL, "imag part of ac sensitivity wrt width"), OPU( "sens_w_mag", MOS2_W_SENS_MAG, IF_REAL, "sensitivity wrt w of ac magnitude"), OPU( "sens_w_ph", MOS2_W_SENS_PH, IF_REAL, "sensitivity wrt w of ac phase"), OPU( "sens_w_cplx", MOS2_W_SENS_CPLX, IF_COMPLEX, "ac sensitivity wrt width") }; IFparm MOS2mPTable[] = { /* model parameters */ OP("type", MOS2_MOD_TYPE, IF_STRING ,"N-channel or P-channel MOS"), IOP("vto", MOS2_MOD_VTO, IF_REAL ,"Threshold voltage"), IOPR("vt0", MOS2_MOD_VTO, IF_REAL ,"Threshold voltage"), IOP("kp", MOS2_MOD_KP, IF_REAL ,"Transconductance parameter"), IOP("gamma", MOS2_MOD_GAMMA, IF_REAL ,"Bulk threshold parameter"), IOP("phi", MOS2_MOD_PHI, IF_REAL ,"Surface potential"), IOP("lambda",MOS2_MOD_LAMBDA,IF_REAL ,"Channel length modulation"), IOP("rd", MOS2_MOD_RD, IF_REAL ,"Drain ohmic resistance"), IOP("rs", MOS2_MOD_RS, IF_REAL ,"Source ohmic resistance"), IOP("cbd", MOS2_MOD_CBD, IF_REAL ,"B-D junction capacitance"), IOP("cbs", MOS2_MOD_CBS, IF_REAL ,"B-S junction capacitance"), IOP("is", MOS2_MOD_IS, IF_REAL ,"Bulk junction sat. current"), IOP("pb", MOS2_MOD_PB, IF_REAL ,"Bulk junction potential"), IOPA("cgso", MOS2_MOD_CGSO, IF_REAL ,"Gate-source overlap cap."), IOPA("cgdo", MOS2_MOD_CGDO, IF_REAL ,"Gate-drain overlap cap."), IOPA("cgbo", MOS2_MOD_CGBO, IF_REAL ,"Gate-bulk overlap cap."), IOP("rsh", MOS2_MOD_RSH, IF_REAL ,"Sheet resistance"), IOPA("cj", MOS2_MOD_CJ, IF_REAL ,"Bottom junction cap per area"), IOP("mj", MOS2_MOD_MJ, IF_REAL ,"Bottom grading coefficient"), IOPA("cjsw", MOS2_MOD_CJSW, IF_REAL ,"Side junction cap per area"), IOP("mjsw", MOS2_MOD_MJSW, IF_REAL ,"Side grading coefficient"), IOP("js", MOS2_MOD_JS, IF_REAL ,"Bulk jct. sat. current density"), IOP("tox", MOS2_MOD_TOX, IF_REAL ,"Oxide thickness"), IOP("ld", MOS2_MOD_LD, IF_REAL ,"Lateral diffusion"), IOP("u0", MOS2_MOD_U0, IF_REAL ,"Surface mobility"), IOPR("uo", MOS2_MOD_U0, IF_REAL ,"Surface mobility"), IOP("fc", MOS2_MOD_FC, IF_REAL ,"Forward bias jct. fit parm."), IP("nmos", MOS2_MOD_NMOS, IF_FLAG ,"N type MOSfet model"), IP("pmos", MOS2_MOD_PMOS, IF_FLAG ,"P type MOSfet model"), IOP("nsub", MOS2_MOD_NSUB, IF_REAL ,"Substrate doping"), IOP("tpg", MOS2_MOD_TPG, IF_INTEGER,"Gate type"), IOP("nss", MOS2_MOD_NSS, IF_REAL ,"Surface state density"), IOP("delta", MOS2_MOD_DELTA, IF_REAL ,"Width effect on threshold"), IOP("uexp", MOS2_MOD_UEXP, IF_REAL ,"Crit. field exp for mob. deg."), IOP("ucrit", MOS2_MOD_UCRIT, IF_REAL ,"Crit. field for mob. degradation"), IOP("vmax", MOS2_MOD_VMAX, IF_REAL ,"Maximum carrier drift velocity"), IOP("xj", MOS2_MOD_XJ, IF_REAL ,"Junction depth"), IOP("neff", MOS2_MOD_NEFF, IF_REAL ,"Total channel charge coeff."), IOP("nfs", MOS2_MOD_NFS, IF_REAL ,"Fast surface state density"), IOPU("tnom", MOS2_MOD_TNOM, IF_REAL ,"Parameter measurement temperature"), IOP("kf", MOS2_MOD_KF, IF_REAL ,"Flicker noise coefficient"), IOP("af", MOS2_MOD_AF, IF_REAL ,"Flicker noise exponent") }; char *MOS2names[] = { "Drain", "Gate", "Source", "Bulk" }; int MOS2nSize = NUMELEMS(MOS2names); int MOS2pTSize = NUMELEMS(MOS2pTable); int MOS2mPTSize = NUMELEMS(MOS2mPTable); int MOS2iSize = sizeof(MOS2instance); int MOS2mSize = sizeof(MOS2model); tmpk8ny_4pz/src/spicelib/devices/mos2/mos2acld.c0000644000175000017500000001040313546075722021711 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS2acLoad(GENmodel *inModel, CKTcircuit *ckt) { MOS2model *model = (MOS2model *)inModel; MOS2instance *here; int xnrm; int xrev; double xgs; double xgd; double xgb; double xbd; double xbs; double capgs; double capgd; double capgb; double GateBulkOverlapCap; double GateDrainOverlapCap; double GateSourceOverlapCap; double EffectiveLength; for( ; model != NULL; model = MOS2nextModel(model)) { for(here = MOS2instances(model); here!= NULL; here = MOS2nextInstance(here)) { if (here->MOS2mode < 0) { xnrm=0; xrev=1; } else { xnrm=1; xrev=0; } /* * meyer's model parameters */ EffectiveLength=here->MOS2l - 2*model->MOS2latDiff; GateSourceOverlapCap = model->MOS2gateSourceOverlapCapFactor * here->MOS2m * here->MOS2w; GateDrainOverlapCap = model->MOS2gateDrainOverlapCapFactor * here->MOS2m * here->MOS2w; GateBulkOverlapCap = model->MOS2gateBulkOverlapCapFactor * here->MOS2m * EffectiveLength; capgs = ( *(ckt->CKTstate0+here->MOS2capgs)+ *(ckt->CKTstate0+here->MOS2capgs) + GateSourceOverlapCap ); capgd = ( *(ckt->CKTstate0+here->MOS2capgd)+ *(ckt->CKTstate0+here->MOS2capgd) + GateDrainOverlapCap ); capgb = ( *(ckt->CKTstate0+here->MOS2capgb)+ *(ckt->CKTstate0+here->MOS2capgb) + GateBulkOverlapCap ); xgs = capgs * ckt->CKTomega; xgd = capgd * ckt->CKTomega; xgb = capgb * ckt->CKTomega; xbd = here->MOS2capbd * ckt->CKTomega; xbs = here->MOS2capbs * ckt->CKTomega; /* * load matrix */ *(here->MOS2GgPtr +1) += xgd+xgs+xgb; *(here->MOS2BbPtr +1) += xgb+xbd+xbs; *(here->MOS2DPdpPtr +1) += xgd+xbd; *(here->MOS2SPspPtr +1) += xgs+xbs; *(here->MOS2GbPtr +1) -= xgb; *(here->MOS2GdpPtr +1) -= xgd; *(here->MOS2GspPtr +1) -= xgs; *(here->MOS2BgPtr +1) -= xgb; *(here->MOS2BdpPtr +1) -= xbd; *(here->MOS2BspPtr +1) -= xbs; *(here->MOS2DPgPtr +1) -= xgd; *(here->MOS2DPbPtr +1) -= xbd; *(here->MOS2SPgPtr +1) -= xgs; *(here->MOS2SPbPtr +1) -= xbs; *(here->MOS2DdPtr) += here->MOS2drainConductance; *(here->MOS2SsPtr) += here->MOS2sourceConductance; *(here->MOS2BbPtr) += here->MOS2gbd+here->MOS2gbs; *(here->MOS2DPdpPtr) += here->MOS2drainConductance+ here->MOS2gds+here->MOS2gbd+ xrev*(here->MOS2gm+here->MOS2gmbs); *(here->MOS2SPspPtr) += here->MOS2sourceConductance+ here->MOS2gds+here->MOS2gbs+ xnrm*(here->MOS2gm+here->MOS2gmbs); *(here->MOS2DdpPtr) -= here->MOS2drainConductance; *(here->MOS2SspPtr) -= here->MOS2sourceConductance; *(here->MOS2BdpPtr) -= here->MOS2gbd; *(here->MOS2BspPtr) -= here->MOS2gbs; *(here->MOS2DPdPtr) -= here->MOS2drainConductance; *(here->MOS2DPgPtr) += (xnrm-xrev)*here->MOS2gm; *(here->MOS2DPbPtr) += -here->MOS2gbd+(xnrm-xrev)*here->MOS2gmbs; *(here->MOS2DPspPtr) -= here->MOS2gds+ xnrm*(here->MOS2gm+here->MOS2gmbs); *(here->MOS2SPgPtr) -= (xnrm-xrev)*here->MOS2gm; *(here->MOS2SPsPtr) -= here->MOS2sourceConductance; *(here->MOS2SPbPtr) -= here->MOS2gbs+(xnrm-xrev)*here->MOS2gmbs; *(here->MOS2SPdpPtr) -= here->MOS2gds+ xrev*(here->MOS2gm+here->MOS2gmbs); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos2/mos2ask.c0000644000175000017500000004023213546075722021567 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Mathew Lew and Thomas L. Quarles Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "mos2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int MOS2ask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { MOS2instance *here = (MOS2instance *)inst; double vr; double vi; double sr; double si; double vm; static char *msg = "Current and power not available for ac analysis"; switch(which) { case MOS2_TEMP: value->rValue = here->MOS2temp-CONSTCtoK; return(OK); case MOS2_DTEMP: value->rValue = here->MOS2dtemp; return(OK); case MOS2_CGS: value->rValue = 2* *(ckt->CKTstate0 + here->MOS2capgs); return(OK); case MOS2_CGD: value->rValue = 2* *(ckt->CKTstate0 + here->MOS2capgd); return(OK); case MOS2_M: value->rValue = here->MOS2m; return(OK); case MOS2_L: value->rValue = here->MOS2l; return(OK); case MOS2_W: value->rValue = here->MOS2w; return(OK); case MOS2_AS: value->rValue = here->MOS2sourceArea; return(OK); case MOS2_AD: value->rValue = here->MOS2drainArea; return(OK); case MOS2_PS: value->rValue = here->MOS2sourcePerimiter; return(OK); case MOS2_PD: value->rValue = here->MOS2drainPerimiter; return(OK); case MOS2_NRS: value->rValue = here->MOS2sourceSquares; return(OK); case MOS2_NRD: value->rValue = here->MOS2drainSquares; return(OK); case MOS2_OFF: value->rValue = here->MOS2off; return(OK); case MOS2_IC_VBS: value->rValue = here->MOS2icVBS; return(OK); case MOS2_IC_VDS: value->rValue = here->MOS2icVDS; return(OK); case MOS2_IC_VGS: value->rValue = here->MOS2icVGS; return(OK); case MOS2_DNODE: value->iValue = here->MOS2dNode; return(OK); case MOS2_GNODE: value->iValue = here->MOS2gNode; return(OK); case MOS2_SNODE: value->iValue = here->MOS2sNode; return(OK); case MOS2_BNODE: value->iValue = here->MOS2bNode; return(OK); case MOS2_DNODEPRIME: value->iValue = here->MOS2dNodePrime; return(OK); case MOS2_SNODEPRIME: value->iValue = here->MOS2sNodePrime; return(OK); case MOS2_SOURCECONDUCT: value->rValue = here->MOS2sourceConductance; return(OK); case MOS2_DRAINCONDUCT: value->rValue = here->MOS2drainConductance; return(OK); case MOS2_SOURCERESIST: if (here->MOS2sNodePrime != here->MOS2sNode) value->rValue = 1.0 / here->MOS2sourceConductance; else value->rValue = 0.0; return(OK); case MOS2_DRAINRESIST: if (here->MOS2dNodePrime != here->MOS2dNode) value->rValue = 1.0 / here->MOS2drainConductance; else value->rValue = 0.0; return(OK); case MOS2_VON: value->rValue = here->MOS2von; return(OK); case MOS2_VDSAT: value->rValue = here->MOS2vdsat; return(OK); case MOS2_SOURCEVCRIT: value->rValue = here->MOS2sourceVcrit; return(OK); case MOS2_DRAINVCRIT: value->rValue = here->MOS2drainVcrit; return(OK); case MOS2_CD: value->rValue = here->MOS2cd; return(OK); case MOS2_CBS: value->rValue = here->MOS2cbs; return(OK); case MOS2_CBD: value->rValue = here->MOS2cbd; return(OK); case MOS2_GMBS: value->rValue = here->MOS2gmbs; return(OK); case MOS2_GM: value->rValue = here->MOS2gm; return(OK); case MOS2_GDS: value->rValue = here->MOS2gds; return(OK); case MOS2_GBD: value->rValue = here->MOS2gbd; return(OK); case MOS2_GBS: value->rValue = here->MOS2gbs; return(OK); case MOS2_CAPBD: value->rValue = here->MOS2capbd; return(OK); case MOS2_CAPBS: value->rValue = here->MOS2capbs; return(OK); case MOS2_CAPZEROBIASBD: value->rValue = here->MOS2Cbd; return(OK); case MOS2_CAPZEROBIASBDSW: value->rValue = here->MOS2Cbdsw; return(OK); case MOS2_CAPZEROBIASBS: value->rValue = here->MOS2Cbs; return(OK); case MOS2_CAPZEROBIASBSSW: value->rValue = here->MOS2Cbssw; return(OK); case MOS2_VBD: value->rValue = *(ckt->CKTstate0 + here->MOS2vbd); return(OK); case MOS2_VBS: value->rValue = *(ckt->CKTstate0 + here->MOS2vbs); return(OK); case MOS2_VGS: value->rValue = *(ckt->CKTstate0 + here->MOS2vgs); return(OK); case MOS2_VDS: value->rValue = *(ckt->CKTstate0 + here->MOS2vds); return(OK); case MOS2_CAPGS: value->rValue = 2* *(ckt->CKTstate0 + here->MOS2capgs); /* add overlap capacitance */ value->rValue += (MOS2modPtr(here)->MOS2gateSourceOverlapCapFactor) * here->MOS2m * (here->MOS2w); return(OK); case MOS2_QGS: value->rValue = *(ckt->CKTstate0 + here->MOS2qgs); return(OK); case MOS2_CQGS: value->rValue = *(ckt->CKTstate0 + here->MOS2cqgs); return(OK); case MOS2_CAPGD: value->rValue = 2* *(ckt->CKTstate0 + here->MOS2capgd); /* add overlap capacitance */ value->rValue += (MOS2modPtr(here)->MOS2gateDrainOverlapCapFactor) * here->MOS2m * (here->MOS2w); return(OK); case MOS2_QGD: value->rValue = *(ckt->CKTstate0 + here->MOS2qgd); return(OK); case MOS2_CQGD: value->rValue = *(ckt->CKTstate0 + here->MOS2cqgd); return(OK); case MOS2_CAPGB: value->rValue = 2* *(ckt->CKTstate0 + here->MOS2capgb); /* add overlap capacitance */ value->rValue += (MOS2modPtr(here)->MOS2gateBulkOverlapCapFactor) * here->MOS2m * (here->MOS2l -2*(MOS2modPtr(here)->MOS2latDiff)); return(OK); case MOS2_QGB: value->rValue = *(ckt->CKTstate0 + here->MOS2qgb); return(OK); case MOS2_CQGB: value->rValue = *(ckt->CKTstate0 + here->MOS2cqgb); return(OK); case MOS2_QBD: value->rValue = *(ckt->CKTstate0 + here->MOS2qbd); return(OK); case MOS2_CQBD: value->rValue = *(ckt->CKTstate0 + here->MOS2cqbd); return(OK); case MOS2_QBS: value->rValue = *(ckt->CKTstate0 + here->MOS2qbs); return(OK); case MOS2_CQBS: value->rValue = *(ckt->CKTstate0 + here->MOS2cqbs); return(OK); case MOS2_L_SENS_DC: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_Sap[select->iValue + 1]+ here->MOS2senParmNo); } return(OK); case MOS2_L_SENS_REAL: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS2senParmNo); } return(OK); case MOS2_L_SENS_IMAG: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS2senParmNo); } return(OK); case MOS2_L_SENS_MAG: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = sqrt(vr*vr + vi*vi); if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS2senParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS2senParmNo); value->rValue = (vr * sr + vi * si)/vm; } return(OK); case MOS2_L_SENS_PH: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = vr*vr + vi*vi; if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS2senParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS2senParmNo); value->rValue = (vr * si - vi * sr)/vm; } return(OK); case MOS2_L_SENS_CPLX: if(ckt->CKTsenInfo){ value->cValue.real= *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS2senParmNo); value->cValue.imag= *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS2senParmNo); } return(OK); case MOS2_W_SENS_DC: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_Sap[select->iValue + 1]+ here->MOS2senParmNo + here->MOS2sens_l); } return(OK); case MOS2_W_SENS_REAL: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS2senParmNo + here->MOS2sens_l); } return(OK); case MOS2_W_SENS_IMAG: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS2senParmNo + here->MOS2sens_l); } return(OK); case MOS2_W_SENS_MAG: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = sqrt(vr*vr + vi*vi); if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS2senParmNo + here->MOS2sens_l); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS2senParmNo + here->MOS2sens_l); value->rValue = (vr * sr + vi * si)/vm; } return(OK); case MOS2_W_SENS_PH: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = vr*vr + vi*vi; if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS2senParmNo + here->MOS2sens_l); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS2senParmNo + here->MOS2sens_l); value->rValue = (vr * si - vi * sr)/vm; } return(OK); case MOS2_W_SENS_CPLX: if(ckt->CKTsenInfo){ value->cValue.real= *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS2senParmNo + here->MOS2sens_l); value->cValue.imag= *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS2senParmNo + here->MOS2sens_l); } return(OK); case MOS2_CB : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MOS2ask.c"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = here->MOS2cbd + here->MOS2cbs - *(ckt->CKTstate0 + here->MOS2cqgb); } return(OK); case MOS2_CG : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MOS2ask.c"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else if (ckt->CKTcurrentAnalysis & (DOING_DCOP | DOING_TRCV)) { value->rValue = 0; } else if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && (ckt->CKTmode & MODETRANOP)) { value->rValue = 0; } else { value->rValue = *(ckt->CKTstate0 + here->MOS2cqgb) + *(ckt->CKTstate0 + here->MOS2cqgd) + *(ckt->CKTstate0 + here->MOS2cqgs); } return(OK); case MOS2_CS : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MOS2ask.c"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = -here->MOS2cd; value->rValue -= here->MOS2cbd + here->MOS2cbs - *(ckt->CKTstate0 + here->MOS2cqgb); if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { value->rValue -= *(ckt->CKTstate0 + here->MOS2cqgb) + *(ckt->CKTstate0 + here->MOS2cqgd) + *(ckt->CKTstate0 + here->MOS2cqgs); } } return(OK); case MOS2_POWER : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MOS2ask.c"; strcpy(errMsg,msg); return(E_ASKPOWER); } else { double temp; value->rValue = here->MOS2cd * *(ckt->CKTrhsOld + here->MOS2dNode); value->rValue += (here->MOS2cbd + here->MOS2cbs - *(ckt->CKTstate0 + here->MOS2cqgb)) * *(ckt->CKTrhsOld + here->MOS2bNode); if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { value->rValue += (*(ckt->CKTstate0 + here->MOS2cqgb) + *(ckt->CKTstate0 + here->MOS2cqgd) + *(ckt->CKTstate0 + here->MOS2cqgs)) * *(ckt->CKTrhsOld + here->MOS2gNode); } temp = -here->MOS2cd; temp -= here->MOS2cbd + here->MOS2cbs ; if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { temp -= *(ckt->CKTstate0 + here->MOS2cqgb) + *(ckt->CKTstate0 + here->MOS2cqgd) + *(ckt->CKTstate0 + here->MOS2cqgs); } value->rValue += temp * *(ckt->CKTrhsOld + here->MOS2sNode); } return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/mos2/mos2del.c0000644000175000017500000000057313546075722021561 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "mos2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS2delete(GENinstance *gen_inst) { MOS2instance *inst = (MOS2instance *) gen_inst; FREE(inst->MOS2sens); return OK; } tmpk8ny_4pz/src/spicelib/devices/mos2/mos2mask.c0000644000175000017500000001040413546075722021742 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "mos2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS2mAsk(CKTcircuit *ckt, GENmodel *inModel, int param, IFvalue *value) { MOS2model *model = (MOS2model *)inModel; NG_IGNORE(ckt); switch(param) { case MOS2_MOD_TNOM: value->rValue = model->MOS2tnom - CONSTCtoK; break; case MOS2_MOD_VTO: value->rValue = model->MOS2vt0; break; case MOS2_MOD_KP: value->rValue = model->MOS2transconductance; break; case MOS2_MOD_GAMMA: value->rValue = model->MOS2gamma; break; case MOS2_MOD_PHI: value->rValue = model->MOS2phi; break; case MOS2_MOD_LAMBDA: value->rValue = model->MOS2lambda; break; case MOS2_MOD_RD: value->rValue = model->MOS2drainResistance; break; case MOS2_MOD_RS: value->rValue = model->MOS2sourceResistance; break; case MOS2_MOD_CBD: value->rValue = model->MOS2capBD; break; case MOS2_MOD_CBS: value->rValue = model->MOS2capBS; break; case MOS2_MOD_IS: value->rValue = model->MOS2jctSatCur; break; case MOS2_MOD_PB: value->rValue = model->MOS2bulkJctPotential; break; case MOS2_MOD_CGSO: value->rValue = model->MOS2gateSourceOverlapCapFactor; break; case MOS2_MOD_CGDO: value->rValue = model->MOS2gateDrainOverlapCapFactor; break; case MOS2_MOD_CGBO: value->rValue = model->MOS2gateBulkOverlapCapFactor; break; case MOS2_MOD_CJ: value->rValue = model->MOS2bulkCapFactor; break; case MOS2_MOD_MJ: value->rValue = model->MOS2bulkJctBotGradingCoeff; break; case MOS2_MOD_CJSW: value->rValue = model->MOS2sideWallCapFactor; break; case MOS2_MOD_MJSW: value->rValue = model->MOS2bulkJctSideGradingCoeff; break; case MOS2_MOD_JS: value->rValue = model->MOS2jctSatCurDensity; break; case MOS2_MOD_TOX: value->rValue = model->MOS2oxideThickness; break; case MOS2_MOD_LD: value->rValue = model->MOS2latDiff; break; case MOS2_MOD_RSH: value->rValue = model->MOS2sheetResistance; break; case MOS2_MOD_U0: value->rValue = model->MOS2surfaceMobility; break; case MOS2_MOD_FC: value->rValue = model->MOS2fwdCapDepCoeff; break; case MOS2_MOD_NSUB: value->rValue = model->MOS2substrateDoping; break; case MOS2_MOD_TPG: value->rValue = model->MOS2gateType; break; case MOS2_MOD_NSS: value->rValue = model->MOS2surfaceStateDensity; break; case MOS2_MOD_NFS: value->rValue = model->MOS2fastSurfaceStateDensity; break; case MOS2_MOD_DELTA: value->rValue = model->MOS2narrowFactor; break; case MOS2_MOD_UEXP: value->rValue = model->MOS2critFieldExp; break; case MOS2_MOD_VMAX: value->rValue = model->MOS2maxDriftVel; break; case MOS2_MOD_XJ: value->rValue = model->MOS2junctionDepth; break; case MOS2_MOD_NEFF: value->rValue = model->MOS2channelCharge; break; case MOS2_MOD_UCRIT: value->rValue = model->MOS2critField; break; case MOS2_MOD_KF: value->rValue = model->MOS2fNcoef; break; case MOS2_MOD_AF: value->rValue = model->MOS2fNexp; break; case MOS2_MOD_TYPE: if (model->MOS2type > 0) value->sValue = "nmos"; else value->sValue = "pmos"; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos2/mos2pzld.c0000644000175000017500000001204613546075722021764 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "mos2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS2pzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { MOS2model *model = (MOS2model *)inModel; MOS2instance *here; int xnrm; int xrev; double xgs; double xgd; double xgb; double xbd; double xbs; double capgs; double capgd; double capgb; double GateBulkOverlapCap; double GateDrainOverlapCap; double GateSourceOverlapCap; double EffectiveLength; for( ; model != NULL; model = MOS2nextModel(model)) { for(here = MOS2instances(model); here!= NULL; here = MOS2nextInstance(here)) { if (here->MOS2mode < 0) { xnrm=0; xrev=1; } else { xnrm=1; xrev=0; } /* * meyer's model parameters */ EffectiveLength=here->MOS2l - 2*model->MOS2latDiff; GateSourceOverlapCap = model->MOS2gateSourceOverlapCapFactor * here->MOS2m * here->MOS2w; GateDrainOverlapCap = model->MOS2gateDrainOverlapCapFactor * here->MOS2m * here->MOS2w; GateBulkOverlapCap = model->MOS2gateBulkOverlapCapFactor * here->MOS2m * EffectiveLength; capgs = ( 2* *(ckt->CKTstate0+here->MOS2capgs)+ GateSourceOverlapCap ); capgd = ( 2* *(ckt->CKTstate0+here->MOS2capgd)+ GateDrainOverlapCap ); capgb = ( 2* *(ckt->CKTstate0+here->MOS2capgb)+ GateBulkOverlapCap ); xgs = capgs; xgd = capgd; xgb = capgb; xbd = here->MOS2capbd; xbs = here->MOS2capbs; /*printf("mos2: xgs=%g, xgd=%g, xgb=%g, xbd=%g, xbs=%g\n", xgs,xgd,xgb,xbd,xbs);*/ /* * load matrix */ *(here->MOS2GgPtr ) += (xgd+xgs+xgb)*s->real; *(here->MOS2GgPtr +1) += (xgd+xgs+xgb)*s->imag; *(here->MOS2BbPtr ) += (xgb+xbd+xbs)*s->real; *(here->MOS2BbPtr +1) += (xgb+xbd+xbs)*s->imag; *(here->MOS2DPdpPtr ) += (xgd+xbd)*s->real; *(here->MOS2DPdpPtr +1) += (xgd+xbd)*s->imag; *(here->MOS2SPspPtr ) += (xgs+xbs)*s->real; *(here->MOS2SPspPtr +1) += (xgs+xbs)*s->imag; *(here->MOS2GbPtr ) -= xgb*s->real; *(here->MOS2GbPtr +1) -= xgb*s->imag; *(here->MOS2GdpPtr ) -= xgd*s->real; *(here->MOS2GdpPtr +1) -= xgd*s->imag; *(here->MOS2GspPtr ) -= xgs*s->real; *(here->MOS2GspPtr +1) -= xgs*s->imag; *(here->MOS2BgPtr ) -= xgb*s->real; *(here->MOS2BgPtr +1) -= xgb*s->imag; *(here->MOS2BdpPtr ) -= xbd*s->real; *(here->MOS2BdpPtr +1) -= xbd*s->imag; *(here->MOS2BspPtr ) -= xbs*s->real; *(here->MOS2BspPtr +1) -= xbs*s->imag; *(here->MOS2DPgPtr ) -= xgd*s->real; *(here->MOS2DPgPtr +1) -= xgd*s->imag; *(here->MOS2DPbPtr ) -= xbd*s->real; *(here->MOS2DPbPtr +1) -= xbd*s->imag; *(here->MOS2SPgPtr ) -= xgs*s->real; *(here->MOS2SPgPtr +1) -= xgs*s->imag; *(here->MOS2SPbPtr ) -= xbs*s->real; *(here->MOS2SPbPtr +1) -= xbs*s->imag; *(here->MOS2DdPtr) += here->MOS2drainConductance; *(here->MOS2SsPtr) += here->MOS2sourceConductance; *(here->MOS2BbPtr) += here->MOS2gbd+here->MOS2gbs; *(here->MOS2DPdpPtr) += here->MOS2drainConductance+ here->MOS2gds+here->MOS2gbd+ xrev*(here->MOS2gm+here->MOS2gmbs); *(here->MOS2SPspPtr) += here->MOS2sourceConductance+ here->MOS2gds+here->MOS2gbs+ xnrm*(here->MOS2gm+here->MOS2gmbs); *(here->MOS2DdpPtr) -= here->MOS2drainConductance; *(here->MOS2SspPtr) -= here->MOS2sourceConductance; *(here->MOS2BdpPtr) -= here->MOS2gbd; *(here->MOS2BspPtr) -= here->MOS2gbs; *(here->MOS2DPdPtr) -= here->MOS2drainConductance; *(here->MOS2DPgPtr) += (xnrm-xrev)*here->MOS2gm; *(here->MOS2DPbPtr) += -here->MOS2gbd+(xnrm-xrev)*here->MOS2gmbs; *(here->MOS2DPspPtr) -= here->MOS2gds+ xnrm*(here->MOS2gm+here->MOS2gmbs); *(here->MOS2SPgPtr) -= (xnrm-xrev)*here->MOS2gm; *(here->MOS2SPsPtr) -= here->MOS2sourceConductance; *(here->MOS2SPbPtr) -= here->MOS2gbs+(xnrm-xrev)*here->MOS2gmbs; *(here->MOS2SPdpPtr) -= here->MOS2gds+ xrev*(here->MOS2gm+here->MOS2gmbs); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos2/mos2dset.c0000644000175000017500000013453213546075722021757 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/distodef.h" #include "ngspice/devdefs.h" #include "ngspice/cktdefs.h" #include "mos2defs.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* assuming silicon - make definition for epsilon of silicon */ #define EPSSIL (11.7 * 8.854214871e-12) static double sig1[4] = {1.0, -1.0, 1.0, -1.0}; static double sig2[4] = {1.0, 1.0,-1.0, -1.0}; int MOS2dSetup(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current value into the * sparse matrix previously provided */ { MOS2model *model = (MOS2model *)inModel; MOS2instance *here; double Beta; double DrainSatCur; double EffectiveLength; double GateBulkOverlapCap; double GateDrainOverlapCap; double GateSourceOverlapCap; double OxideCap; double SourceSatCur; double arg; double cdrain; double ebd; double evbs; double sarg; double sargsw; double vbd; double vbs; double vds; double vdsat; double vgb; double vgd; double vgs; double von; double vt; /* K * T / Q */ double lcapgs2; double lcapgd2; double lcapgb2; double lcapgs3; double lcapgd3; double lcapgb3; double lgbs, lgbs2, lgbs3; double lgbd, lgbd2, lgbd3; double vgst; double lcapbs, lcapbs2, lcapbs3; double lcapbd, lcapbd2, lcapbd3; double gm2, gb2, gds2; double gmb, gmds, gbds; double gm3, gb3, gds3; double gm2b, gm2ds, gmb2, gmds2, gbds2, gb2ds; double gmbds; Dderivs d_cdrain; /* loop through all the MOS2 device models */ for( ; model != NULL; model = MOS2nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS2instances(model); here != NULL ; here=MOS2nextInstance(here)) { vt = CONSTKoverQ * here->MOS2temp; EffectiveLength=here->MOS2l - 2*model->MOS2latDiff; if( (here->MOS2tSatCurDens == 0) || (here->MOS2drainArea == 0) || (here->MOS2sourceArea == 0)) { DrainSatCur = here->MOS2m * here->MOS2tSatCur; SourceSatCur = here->MOS2m * here->MOS2tSatCur; } else { DrainSatCur = here->MOS2tSatCurDens * here->MOS2m * here->MOS2drainArea; SourceSatCur = here->MOS2tSatCurDens * here->MOS2m * here->MOS2sourceArea; } GateSourceOverlapCap = model->MOS2gateSourceOverlapCapFactor * here->MOS2m * here->MOS2w; GateDrainOverlapCap = model->MOS2gateDrainOverlapCapFactor * here->MOS2m * here->MOS2w; GateBulkOverlapCap = model->MOS2gateBulkOverlapCapFactor * here->MOS2m * EffectiveLength; Beta = here->MOS2tTransconductance * here->MOS2m * here->MOS2w/EffectiveLength; OxideCap = model->MOS2oxideCapFactor * EffectiveLength * here->MOS2m * here->MOS2w; /* general iteration */ vbs = model->MOS2type * ( *(ckt->CKTrhsOld+here->MOS2bNode) - *(ckt->CKTrhsOld+here->MOS2sNodePrime)); vgs = model->MOS2type * ( *(ckt->CKTrhsOld+here->MOS2gNode) - *(ckt->CKTrhsOld+here->MOS2sNodePrime)); vds = model->MOS2type * ( *(ckt->CKTrhsOld+here->MOS2dNodePrime) - *(ckt->CKTrhsOld+here->MOS2sNodePrime)); /* now some common crunching for some more useful quantities */ vbd=vbs-vds; vgd=vgs-vds; /* now all the preliminaries are over - we can start doing the * real work */ vgb = vgs - vbs; /* bulk-source and bulk-drain doides here we just evaluate * the ideal diode current and the correspoinding * derivative (conductance). */ if(vbs <= 0) { lgbs = SourceSatCur/vt; lgbs += ckt->CKTgmin; lgbs2 = lgbs3 = 0; } else { evbs = exp(MIN(MAX_EXP_ARG,vbs/vt)); lgbs = SourceSatCur*evbs/vt + ckt->CKTgmin; lgbs2 = model->MOS2type *0.5 * (lgbs - ckt->CKTgmin)/vt; lgbs3 = model->MOS2type *lgbs2/(vt*3); } if(vbd <= 0) { lgbd = DrainSatCur/vt; lgbd += ckt->CKTgmin; lgbd2 = lgbd3 = 0; } else { ebd = exp(MIN(MAX_EXP_ARG,vbd/vt)); lgbd = DrainSatCur*ebd/vt +ckt->CKTgmin; lgbd2 = model->MOS2type *0.5 * (lgbd - ckt->CKTgmin)/vt; lgbd3 = model->MOS2type *lgbd2/(vt*3); } if(vds >= 0) { /* normal mode */ here->MOS2mode = 1; } else { /* inverse mode */ here->MOS2mode = -1; } { /* moseq2(vds,vbs,vgs,gm,gds,gmbs,qg,qc,qb, * cggb,cgdb,cgsb,cbgb,cbdb,cbsb) */ /* note: cgdb, cgsb, cbdb, cbsb never used */ /* * this routine evaluates the drain current, its derivatives and * the charges associated with the gate, channel and bulk * for mosfets * */ double arg; double sarg; double a4[4],b4[4],x4[8],poly4[8]; double beta1; double sphi = 0.0; /* square root of phi */ double sphi3 = 0.0; /* square root of phi cubed */ double barg; double factor; double eta; double vbin; double argd = 0.0; double args = 0.0; double argss; double argsd; double argxs; double argxd; double gamasd; double xwd; double xws; double gammad; double cfs; double cdonco; double xn; double argg = 0.0; double sarg3; double sbiarg; double body; double udenom; double gammd2; double argv; double vgsx; double ufact; double ueff; double a1; double a3; double a; double b1; double b3; double b; double c1; double c; double d1; double fi; double p0; double p2; double p3; double p4; double p; double r3; double r; double ro; double s2; double s; double v1; double v2; double xv; double y3; double delta4; double xvalid = 0.0; double bsarg; double bodys; double sargv; double xlfact; double xdv; double xlv; double xls; double clfact; double xleff; double deltal; double xwb; double vdson; double cdson; double expg; double xld; double xlamda = model->MOS2lambda; Dderivs d_xleff, d_delta1; Dderivs d_xlfact; Dderivs d_xlv, d_xls; Dderivs d_bsarg, d_bodys, d_vdsat, d_sargv; Dderivs d_delta4, d_a4[3], d_b4[3], d_x4[3], d_poly4[3]; Dderivs d_xvalid; Dderivs d_ro, d_fi, d_y3, d_p3, d_p4, d_a3, d_b3; Dderivs d_r3, d_s2, d_pee, d_p0, d_p2; Dderivs d_b1, d_c1, d_d1, d_a, d_b, d_c, d_arr, d_s; Dderivs d_xv, d_a1; Dderivs d_v1, d_v2; Dderivs d_argv,d_gammd2; Dderivs d_ufact; Dderivs d_udenom; Dderivs d_sarg3, d_body; Dderivs d_vgst; Dderivs d_argg; Dderivs d_cdonco,d_tmp,d_xn; Dderivs d_dbargs,d_dbargd,d_dgddvb; Dderivs d_dbxwd,d_dbxws; Dderivs d_dsrgdb, d_dbrgdb; Dderivs d_gamasd, d_gammad, d_args, d_argd; Dderivs d_argxs, d_argxd; Dderivs d_argss, d_argsd; Dderivs d_xwd, d_xws; Dderivs d_zero; Dderivs d_vbin; Dderivs d_barg; Dderivs d_sarg; Dderivs d_phiMinVbs; Dderivs d_p, d_q, d_r; Dderivs d_von, d_dummy, d_vgsx, d_arg, d_dumarg; Dderivs d_ueff, d_beta1, d_clfact, d_xlamda,d_mos2gds; Dderivs d_vdson, d_cdson, d_expg; double dsrgdb, dbrgdb, dbxwd, dbxws, dbargs = 0.0, dbargd = 0.0; double dgddvb; /* from now on, p=vgs, q=vbs, r=vds */ /* * 'local' variables - these switch d & s around appropriately * so that we don't have to worry about vds < 0 */ double lvbs = here->MOS2mode==1?vbs:vbd; double lvds = here->MOS2mode*vds; double lvgs = here->MOS2mode==1?vgs:vgd; double phiMinVbs = here->MOS2tPhi - lvbs; double tmp; /* a temporary variable, not used for more than */ /* about 10 lines at a time */ int iknt; int jknt; int i; int j; /* * compute some useful quantities */ d_p.value = 0.0; d_p.d1_p = 1.0; d_p.d1_q = 0.0; d_p.d1_r = 0.0; d_p.d2_p2 = 0.0; d_p.d2_q2 = 0.0; d_p.d2_r2 = 0.0; d_p.d2_pq = 0.0; d_p.d2_qr = 0.0; d_p.d2_pr = 0.0; d_p.d3_p3 = 0.0; d_p.d3_q3 = 0.0; d_p.d3_r3 = 0.0; d_p.d3_p2r = 0.0; d_p.d3_p2q = 0.0; d_p.d3_q2r = 0.0; d_p.d3_pq2 = 0.0; d_p.d3_pr2 = 0.0; d_p.d3_qr2 = 0.0; d_p.d3_pqr = 0.0; EqualDeriv(&d_q,&d_p); EqualDeriv(&d_r,&d_p); EqualDeriv(&d_zero,&d_p); d_q.d1_p = d_r.d1_p = d_zero.d1_p = 0.0; d_q.d1_q = d_r.d1_r = 1.0; EqualDeriv(&d_phiMinVbs,&d_q); d_phiMinVbs.value = phiMinVbs; d_phiMinVbs.d1_q = - d_phiMinVbs.d1_q; if (lvbs <= 0.0) { sarg = sqrt(phiMinVbs); SqrtDeriv(&d_sarg, &d_phiMinVbs); dsrgdb = -0.5/sarg; InvDeriv(&d_dsrgdb,&d_sarg); TimesDeriv(&d_dsrgdb,&d_dsrgdb,-0.5); } else { sphi = sqrt(here->MOS2tPhi); /*const*/ sphi3 = here->MOS2tPhi*sphi; /*const*/ sarg = sphi/(1.0+0.5*lvbs/here->MOS2tPhi); EqualDeriv(&d_sarg,&d_q); d_sarg.value = lvbs; TimesDeriv(&d_sarg,&d_sarg,0.5/here->MOS2tPhi); d_sarg.value += 1.0; InvDeriv(&d_sarg,&d_sarg); TimesDeriv(&d_sarg,&d_sarg,sphi); dsrgdb = -0.5*sarg*sarg/sphi3; MultDeriv(&d_dsrgdb,&d_sarg,&d_sarg); TimesDeriv(&d_dsrgdb,&d_dsrgdb,-0.5/sphi3); /* tmp = sarg/sphi3; */ } if ((lvds-lvbs) >= 0) { barg = sqrt(phiMinVbs+lvds); EqualDeriv(&d_barg,&d_phiMinVbs); d_barg.value += lvds; d_barg.d1_r += 1.0; SqrtDeriv(&d_barg,&d_barg); dbrgdb = -0.5/barg; InvDeriv(&d_dbrgdb,&d_barg); TimesDeriv(&d_dbrgdb,&d_dbrgdb,-0.5); } else { sphi = sqrt(here->MOS2tPhi); /* added by HT 050523 */ sphi3 = here->MOS2tPhi*sphi; /* added by HT 050523 */ barg = sphi/(1.0+0.5*(lvbs-lvds)/here->MOS2tPhi); EqualDeriv(&d_barg,&d_q); d_barg.value = lvbs - lvds; d_barg.d1_r -= 1.0; TimesDeriv(&d_barg,&d_barg,0.5/here->MOS2tPhi); d_barg.value += 1.0; InvDeriv(&d_barg,&d_barg); TimesDeriv(&d_barg,&d_barg,sphi); dbrgdb = -0.5*barg*barg/sphi3; MultDeriv(&d_dbrgdb,&d_barg,&d_barg); TimesDeriv(&d_dbrgdb,&d_dbrgdb,-0.5/sphi3); /* tmp = barg/sphi3; */ } /* * calculate threshold voltage (von) * narrow-channel effect */ /*XXX constant per device */ factor = 0.125*model->MOS2narrowFactor*2.0*M_PI*EPSSIL/ OxideCap*EffectiveLength; /*XXX constant per device */ eta = 1.0+factor; vbin = here->MOS2tVbi*model->MOS2type+factor*phiMinVbs; /* mistake! fixed Dec 7 '89 TimesDeriv(&d_vbin,&d_phiMinVbs,here->MOS2tVbi* model->MOS2type+factor); */ TimesDeriv(&d_vbin,&d_phiMinVbs,factor); d_vbin.value += here->MOS2tVbi*model->MOS2type; if ((model->MOS2gamma > 0.0) || (model->MOS2substrateDoping > 0.0)) { xwd = model->MOS2xd*barg; xws = model->MOS2xd*sarg; TimesDeriv(&d_xwd,&d_barg,model->MOS2xd); TimesDeriv(&d_xws,&d_sarg,model->MOS2xd); /* * short-channel effect with vds .ne. 0.0 */ argss = 0.0; argsd = 0.0; EqualDeriv(&d_argss,&d_zero); EqualDeriv(&d_argsd,&d_zero); if (model->MOS2junctionDepth > 0) { tmp = 2.0/model->MOS2junctionDepth; /*const*/ argxs = 1.0+xws*tmp; TimesDeriv(&d_argxs,&d_xws,tmp); d_argxs.value += 1.0; argxd = 1.0+xwd*tmp; TimesDeriv(&d_argxd,&d_xwd,tmp); d_argxd.value += 1.0; args = sqrt(argxs); SqrtDeriv(&d_args,&d_argxs); argd = sqrt(argxd); SqrtDeriv(&d_argd,&d_argxd); tmp = .5*model->MOS2junctionDepth/EffectiveLength; argss = tmp * (args-1.0); TimesDeriv(&d_argss,&d_args,tmp); d_argss.value -= tmp; argsd = tmp * (argd-1.0); TimesDeriv(&d_argsd,&d_argd,tmp); d_argsd.value -= tmp; } gamasd = model->MOS2gamma*(1.0-argss-argsd); PlusDeriv(&d_gamasd,&d_argss,&d_argsd); d_gamasd.value -= 1.0; TimesDeriv(&d_gamasd,&d_gamasd,-model->MOS2gamma); dbxwd = model->MOS2xd*dbrgdb; dbxws = model->MOS2xd*dsrgdb; TimesDeriv(&d_dbxwd,&d_dbrgdb,model->MOS2xd); TimesDeriv(&d_dbxws,&d_dsrgdb,model->MOS2xd); if (model->MOS2junctionDepth > 0) { tmp = 0.5/EffectiveLength; dbargs = tmp*dbxws/args; dbargd = tmp*dbxwd/argd; DivDeriv(&d_dbargs,&d_dbxws,&d_args); DivDeriv(&d_dbargd,&d_dbxwd,&d_argd); TimesDeriv(&d_dbargs,&d_dbargs,tmp); TimesDeriv(&d_dbargd,&d_dbargd,tmp); } dgddvb = -model->MOS2gamma*(dbargs+dbargd); PlusDeriv(&d_dgddvb,&d_dbargs,&d_dbargd); TimesDeriv(&d_dgddvb,&d_dgddvb,-model->MOS2gamma); if (model->MOS2junctionDepth > 0) { } } else { gamasd = model->MOS2gamma; gammad = model->MOS2gamma; EqualDeriv(&d_gamasd,&d_zero); EqualDeriv(&d_gammad,&d_zero); d_gamasd.value = d_gammad.value = model->MOS2gamma; dgddvb = 0.0; EqualDeriv(&d_dgddvb,&d_zero); } von = vbin+gamasd*sarg; MultDeriv(&d_von,&d_gamasd,&d_sarg); PlusDeriv(&d_von,&d_von,&d_vbin); /* vth = von; EqualDeriv(&d_vth,&d_von); */ vdsat = 0.0; EqualDeriv(&d_vdsat,&d_zero); if (model->MOS2fastSurfaceStateDensity != 0.0 && OxideCap != 0.0) { /* XXX constant per model */ cfs = CHARGE*model->MOS2fastSurfaceStateDensity* 1e4 /*(cm**2/m**2)*/; cdonco = -(gamasd*dsrgdb + dgddvb*sarg) + factor; MultDeriv(&d_dummy,&d_dgddvb,&d_sarg); MultDeriv(&d_cdonco,&d_gamasd,&d_dsrgdb); PlusDeriv(&d_cdonco,&d_cdonco,&d_dummy); TimesDeriv(&d_cdonco,&d_cdonco,-1.0); d_cdonco.value += factor; xn = 1.0+cfs/OxideCap*here->MOS2m*here->MOS2w*EffectiveLength+cdonco; EqualDeriv(&d_xn,&d_cdonco); d_xn.value = xn; tmp = vt*xn; TimesDeriv(&d_tmp,&d_xn,vt); von = von+tmp; PlusDeriv(&d_von,&d_von,&d_tmp); argg = 1.0/tmp; InvDeriv(&d_argg,&d_tmp); vgst = lvgs-von; TimesDeriv(&d_vgst,&d_von,-1.0); PlusDeriv(&d_vgst,&d_vgst,&d_p); d_vgst.value += lvgs; } else { vgst = lvgs-von; TimesDeriv(&d_vgst,&d_von,-1.0); PlusDeriv(&d_vgst,&d_vgst,&d_p); d_vgst.value += lvgs; if (lvgs <= von) { /* * cutoff region */ here->MOS2gds = 0.0; /* look at this later */ goto line1050; } } /* * compute some more useful quantities */ sarg3 = sarg*sarg*sarg; CubeDeriv(&d_sarg3,&d_sarg); /* XXX constant per model */ sbiarg = sqrt(here->MOS2tBulkPot); /*const*/ gammad = gamasd; EqualDeriv(&d_gammad,&d_gamasd); body = barg*barg*barg-sarg3; TimesDeriv(&d_body,&d_sarg3,-1.0); CubeDeriv(&d_dummy,&d_barg); PlusDeriv(&d_body,&d_body,&d_dummy); if (model->MOS2fastSurfaceStateDensity == 0.0) goto line400; if (OxideCap == 0.0) goto line410; /* * evaluate effective mobility and its derivatives */ line400: if (OxideCap <= 0.0) goto line410; udenom = vgst; EqualDeriv(&d_udenom,&d_vgst); tmp = model->MOS2critField * 100 /* cm/m */ * EPSSIL/ model->MOS2oxideCapFactor; if (udenom <= tmp) goto line410; ufact = exp(model->MOS2critFieldExp*log(tmp/udenom)); /* dummy = tmp/udenom */ InvDeriv(&d_dummy,&d_udenom); TimesDeriv(&d_dummy,&d_dummy,tmp); PowDeriv(&d_ufact,&d_dummy,model->MOS2critFieldExp); ueff = model->MOS2surfaceMobility * 1e-4 /*(m**2/cm**2) */ *ufact; TimesDeriv(&d_ueff,&d_ufact,model->MOS2surfaceMobility * 1e-4); goto line500; line410: ufact = 0.0; EqualDeriv(&d_ufact,&d_zero); ueff = model->MOS2surfaceMobility * 1e-4 /*(m**2/cm**2) */ ; EqualDeriv(&d_ueff,&d_zero); d_ueff.value = ueff; /* * evaluate saturation voltage and its derivatives according to * grove-frohman equation */ line500: vgsx = lvgs; EqualDeriv(&d_vgsx,&d_p); d_vgsx.value = lvgs; gammad = gamasd/eta; /* eta is a constant */ TimesDeriv(&d_gammad,&d_gamasd,1/eta); if (model->MOS2fastSurfaceStateDensity != 0 && OxideCap != 0) { vgsx = MAX(lvgs,von); /* mistake! fixed Dec 8 '89 if (vgsx < von) { } */ if (lvgs > von) { EqualDeriv(&d_vgsx,&d_p);d_vgsx.value = lvgs; } else { EqualDeriv(&d_vgsx,&d_von); } } if (gammad > 0) { gammd2 = gammad*gammad; MultDeriv(&d_gammd2,&d_gammad,&d_gammad); argv = (vgsx-vbin)/eta+phiMinVbs; TimesDeriv(&d_argv,&d_vbin,-1.0); PlusDeriv(&d_argv,&d_vgsx,&d_vgsx); TimesDeriv(&d_argv,&d_argv,1/eta); PlusDeriv(&d_argv,&d_argv,&d_phiMinVbs); if (argv <= 0.0) { vdsat = 0.0; EqualDeriv(&d_vdsat,&d_zero); } else { arg = sqrt(1.0+4.0*argv/gammd2); DivDeriv(&d_arg,&d_argv,&d_gammd2); TimesDeriv(&d_arg,&d_arg,4.0);d_arg.value += 1.0; SqrtDeriv(&d_arg,&d_arg); #if 0 dumarg= sqrt(gammd2*gammd2 +4*argv*gammd2); TimesDeriv(&d_dumarg,&d_argv,4.0); PlusDeriv(&d_dumarg,&d_dumarg,&d_gammd2); MultDeriv(&d_dumarg,&d_dumarg,&d_gammd2); SqrtDeriv(&d_dumarg,&d_dumarg); vdsat = (vgsx-vbin)/eta+gammd2*(1.0-arg)/2.0; /* distortion vdsat=(vgsx-vbin)/eta + (gammd2 - dumarg)/2.0 = argv - phiMinVbs + (gammd2 - dumarg)/2 */ #endif TimesDeriv(&d_dummy,&d_dumarg,-1.0); PlusDeriv(&d_dummy,&d_dummy,&d_gammd2); TimesDeriv(&d_dummy,&d_dummy,0.5); TimesDeriv(&d_vdsat,&d_phiMinVbs,-1.0); PlusDeriv(&d_vdsat,&d_vdsat,&d_argv); PlusDeriv(&d_vdsat,&d_dummy,&d_vdsat); vdsat = MAX(vdsat,0.0); if (vdsat < 0.0) { EqualDeriv(&d_vdsat,&d_zero); } } } else { vdsat = (vgsx-vbin)/eta; TimesDeriv(&d_vdsat,&d_vbin,-1.0); PlusDeriv(&d_vdsat,&d_vgsx,&d_vdsat); TimesDeriv(&d_vdsat,&d_vdsat,1/eta); vdsat = MAX(vdsat,0.0); if (vdsat < 0.0) { EqualDeriv(&d_vdsat,&d_zero); } } if (model->MOS2maxDriftVel > 0) { /* * evaluate saturation voltage and its derivatives * according to baum's theory of scattering velocity * saturation */ gammd2 = gammad*gammad; MultDeriv(&d_gammd2,&d_gammad,&d_gammad); v1 = (vgsx-vbin)/eta+phiMinVbs; TimesDeriv(&d_v1,&d_vbin,-1.0); #if 0 /* mistake ! (fixed Dec 7 '89) thanks to Jean Hsu */ PlusDeriv(&d_v1,&d_vgsx,&d_vgsx); #endif PlusDeriv(&d_v1,&d_v1,&d_vgsx); TimesDeriv(&d_v1,&d_v1,1/eta); PlusDeriv(&d_v1,&d_v1,&d_phiMinVbs); v2 = phiMinVbs; EqualDeriv(&d_v2,&d_phiMinVbs); xv = model->MOS2maxDriftVel*EffectiveLength/ueff; InvDeriv(&d_xv,&d_ueff); TimesDeriv(&d_xv,&d_xv,model->MOS2maxDriftVel*EffectiveLength); a1 = gammad/0.75; TimesDeriv(&d_a1,&d_gammad,4.0/3.0); /* dummy1 = a1 */ b1 = -2.0*(v1+xv); PlusDeriv(&d_b1,&d_v1,&d_xv); TimesDeriv(&d_b1,&d_b1,-2.0); /* dummy2 = b1 */ c1 = -2.0*gammad*xv; MultDeriv(&d_c1,&d_gammad,&d_xv); TimesDeriv(&d_c1,&d_c1,-2.0); /* dummy3 = c1 */ d1 = 2.0*v1*(v2+xv)-v2*v2-4.0/3.0*gammad*sarg3; MultDeriv(&d_d1,&d_gammad,&d_sarg3); TimesDeriv(&d_d1,&d_d1,4.0/3.0); MultDeriv(&d_dummy,&d_v2,&d_v2); PlusDeriv(&d_d1,&d_d1,&d_dummy); TimesDeriv(&d_d1,&d_d1,-1.0); PlusDeriv(&d_dummy,&d_v2,&d_xv); MultDeriv(&d_dummy,&d_dummy,&d_v1); TimesDeriv(&d_dummy,&d_dummy,2.0); PlusDeriv(&d_d1,&d_d1,&d_dummy); a = -b1; TimesDeriv(&d_a,&d_b1,-1.0); b = a1*c1-4.0*d1; TimesDeriv(&d_b,&d_d1,-4.0); MultDeriv(&d_dummy,&d_a1,&d_c1); /* mistake! - fixed Dec 8 '89 PlusDeriv(&d_d1,&d_d1,&d_dummy); */ PlusDeriv(&d_b,&d_b,&d_dummy); c = -d1*(a1*a1-4.0*b1)-c1*c1; TimesDeriv(&d_dummy,&d_b1,-4.0); MultDeriv(&d_c,&d_a1,&d_a1); PlusDeriv(&d_dummy,&d_dummy,&d_c); MultDeriv(&d_c,&d_dummy,&d_d1); MultDeriv(&d_dummy,&d_c1,&d_c1); PlusDeriv(&d_c,&d_c,&d_dummy); TimesDeriv(&d_c,&d_c,-1.0); r = -a*a/3.0+b; MultDeriv(&d_arr,&d_a,&d_a); TimesDeriv(&d_arr,&d_arr,-1.0/3.0); PlusDeriv(&d_arr,&d_arr,&d_b); s = 2.0*a*a*a/27.0-a*b/3.0+c; CubeDeriv(&d_s,&d_a); TimesDeriv(&d_s,&d_s,2.0/27.0); PlusDeriv(&d_s,&d_s,&d_c); MultDeriv(&d_dummy,&d_a,&d_b); TimesDeriv(&d_dummy,&d_dummy,-1.0/3.0); PlusDeriv(&d_s,&d_s,&d_dummy); r3 = r*r*r; CubeDeriv(&d_r3,&d_arr); s2 = s*s; MultDeriv(&d_s2,&d_s,&d_s); p = s2/4.0+r3/27.0; TimesDeriv(&d_dummy,&d_r3,1.0/27.0); TimesDeriv(&d_pee,&d_s2,0.25); PlusDeriv(&d_pee,&d_pee,&d_dummy); p0 = fabs(p); if (p < 0.0) /* mistake! fixed Dec 8 '89 TimesDeriv(&d_pee,&d_pee, -1.0); */ TimesDeriv(&d_p0,&d_pee, -1.0); p2 = sqrt(p0); SqrtDeriv(&d_p2,&d_p0); if (p < 0) { ro = sqrt(s2/4.0+p0); ro = log(ro)/3.0; ro = exp(ro); /* the above is eqvt. to ro = (s2/4.0 + p0)^1/6; */ TimesDeriv(&d_ro,&d_s2,0.25); PlusDeriv(&d_ro,&d_ro,&d_p0); PowDeriv(&d_ro,&d_ro,1.0/6.0); fi = atan(-2.0*p2/s); DivDeriv(&d_fi,&d_p2,&d_s); TimesDeriv(&d_fi,&d_fi,-2.0); AtanDeriv(&d_fi,&d_fi); y3 = 2.0*ro*cos(fi/3.0)-a/3.0; TimesDeriv(&d_dummy,&d_fi,1.0/3.0); CosDeriv(&d_dummy,&d_dummy); MultDeriv(&d_y3,&d_ro,&d_dummy); TimesDeriv(&d_y3,&d_y3,2.0); /* mistake! fixed Dec 8 '89 TimesDeriv(&d_dummy,&d_a,-3.0); */ TimesDeriv(&d_dummy,&d_a,-1/3.0); PlusDeriv(&d_y3,&d_y3,&d_dummy); } else { p3 = (-s/2.0+p2); TimesDeriv(&d_p3,&d_s,-0.5); PlusDeriv(&d_p3,&d_p3,&d_p2); p3 = exp(log(fabs(p3))/3.0); /* eqvt. to (fabs(p3)) ^ 1/3 */ if (p3 < 0.0) TimesDeriv(&d_p3,&d_p3,-1.0); PowDeriv(&d_p3,&d_p3,1.0/3.0); p4 = (-s/2.0-p2); TimesDeriv(&d_p4,&d_s,0.5); PlusDeriv(&d_p4,&d_p4,&d_p2); if (p4 < 0.0) TimesDeriv(&d_p4,&d_p4,-1.0); /* this is fabs(p4) */ p4 = exp(log(fabs(p4))/3.0); PowDeriv(&d_p4,&d_p4,1.0/3.0); y3 = p3+p4-a/3.0; TimesDeriv(&d_y3,&d_a,-1.0/3.0); PlusDeriv(&d_y3,&d_y3,&d_p4); PlusDeriv(&d_y3,&d_y3,&d_p3); } iknt = 0; a3 = sqrt(a1*a1/4.0-b1+y3); MultDeriv(&d_a3,&d_a1,&d_a1); TimesDeriv(&d_a3,&d_a3,0.25); PlusDeriv(&d_a3,&d_a3,&d_y3); TimesDeriv(&d_dummy,&d_b1,-1.0); PlusDeriv(&d_a3,&d_a3,&d_dummy); SqrtDeriv(&d_a3,&d_a3); b3 = sqrt(y3*y3/4.0-d1); MultDeriv(&d_b3,&d_y3,&d_y3); TimesDeriv(&d_b3,&d_b3,0.25); TimesDeriv(&d_dummy,&d_d1,-1.0); PlusDeriv(&d_b3,&d_b3,&d_dummy); SqrtDeriv(&d_b3,&d_b3); for(i = 1;i<=4;i++) { a4[i-1] = a1/2.0+sig1[i-1]*a3; TimesDeriv(&d_a4[i-1],&d_a1,0.5); TimesDeriv(&d_dummy,&d_a3,sig1[i-1]); PlusDeriv(&d_a4[i-1],&d_a4[i-1],&d_dummy); b4[i-1] = y3/2.0+sig2[i-1]*b3; TimesDeriv(&d_b4[i-1],&d_y3,0.5); TimesDeriv(&d_dummy,&d_b3,sig2[i-1]); PlusDeriv(&d_b4[i-1],&d_b4[i-1],&d_dummy); delta4 = a4[i-1]*a4[i-1]/4.0-b4[i-1]; MultDeriv(&d_delta4,&d_a4[i-1],&d_a4[i-1]); TimesDeriv(&d_delta4,&d_delta4,0.25); TimesDeriv(&d_dummy,&d_b4[i-1],-1.0); PlusDeriv(&d_delta4,&d_delta4,&d_dummy); if (delta4 < 0) continue; iknt = iknt+1; tmp = sqrt(delta4); SqrtDeriv(&d_tmp,&d_delta4); x4[iknt-1] = -a4[i-1]/2.0+tmp; TimesDeriv(&d_x4[iknt-1],&d_a4[i-1],-0.5); PlusDeriv(&d_x4[iknt-1],&d_x4[iknt-1],&d_tmp); iknt = iknt+1; x4[iknt-1] = -a4[i-1]/2.0-tmp; TimesDeriv(&d_x4[iknt-1],&d_a4[i-1],-0.5); PlusDeriv(&d_x4[iknt-1],&d_x4[iknt-1],&d_tmp); } jknt = 0; for(j = 1;j<=iknt;j++) { if (x4[j-1] <= 0) continue; /* XXX implement this sanely */ poly4[j-1] = x4[j-1]*x4[j-1]*x4[j-1]*x4[j-1]+a1*x4[j-1]* x4[j-1]*x4[j-1]; CubeDeriv(&d_dummy,&d_x4[j-1]); PlusDeriv(&d_poly4[j-1],&d_x4[j-1],&d_a1); MultDeriv(&d_poly4[j-1],&d_poly4[j-1],&d_dummy); poly4[j-1] = poly4[j-1]+b1*x4[j-1]*x4[j-1]+c1*x4[j-1]+d1; PlusDeriv(&d_poly4[j-1],&d_poly4[j-1],&d_d1); MultDeriv(&d_dummy,&d_b1,&d_x4[j-1]); PlusDeriv(&d_dummy,&d_dummy,&d_c1); MultDeriv(&d_dummy,&d_dummy,&d_x4[j-1]); PlusDeriv(&d_poly4[j-1],&d_poly4[j-1],&d_dummy); if (fabs(poly4[j-1]) > 1.0e-6) continue; jknt = jknt+1; if (jknt <= 1) { xvalid = x4[j-1]; EqualDeriv(&d_xvalid,&d_x4[j-1]); } if (x4[j-1] > xvalid) continue; xvalid = x4[j-1]; EqualDeriv(&d_xvalid,&d_x4[j-1]); } if (jknt > 0) { vdsat = xvalid*xvalid-phiMinVbs; MultDeriv(&d_vdsat,&d_xvalid,&d_xvalid); TimesDeriv(&d_dummy,&d_phiMinVbs,-1.0); PlusDeriv(&d_vdsat,&d_vdsat,&d_dummy); } } /* * evaluate effective channel length and its derivatives */ if (lvds != 0.0) { gammad = gamasd; EqualDeriv(&d_gammad,&d_gamasd); if ((lvbs-vdsat) <= 0) { bsarg = sqrt(vdsat+phiMinVbs); PlusDeriv(&d_bsarg,&d_vdsat,&d_phiMinVbs); SqrtDeriv(&d_bsarg,&d_bsarg); } else { bsarg = sphi/(1.0+0.5*(lvbs-vdsat)/here->MOS2tPhi); TimesDeriv(&d_bsarg,&d_vdsat,-1.0); d_bsarg.value += lvbs; d_bsarg.d1_r += 1.0; TimesDeriv(&d_bsarg,&d_bsarg,0.5/here->MOS2tPhi); d_bsarg.value += 1.0; InvDeriv(&d_bsarg,&d_bsarg); TimesDeriv(&d_bsarg,&d_bsarg,sphi); } bodys = bsarg*bsarg*bsarg-sarg3; CubeDeriv(&d_bodys,&d_bsarg); TimesDeriv(&d_dummy,&d_sarg3,-1.0); PlusDeriv(&d_bodys,&d_bodys,&d_dummy); if (model->MOS2maxDriftVel <= 0) { if (model->MOS2substrateDoping == 0.0) goto line610; if (xlamda > 0.0) goto line610; argv = (lvds-vdsat)/4.0; TimesDeriv(&d_argv,&d_vdsat,-1.0); d_argv.value += lvds; d_argv.d1_r += 1.0; TimesDeriv(&d_argv,&d_argv,0.25); sargv = sqrt(1.0+argv*argv); MultDeriv(&d_sargv,&d_argv,&d_argv); d_sargv.value += 1.0; SqrtDeriv(&d_sargv,&d_sargv); arg = sqrt(argv+sargv); PlusDeriv(&d_arg,&d_sargv,&d_argv); SqrtDeriv(&d_arg,&d_arg); xlfact = model->MOS2xd/(EffectiveLength*lvds); EqualDeriv(&d_xlfact,&d_r); d_xlfact.value = lvds; InvDeriv(&d_xlfact,&d_xlfact); TimesDeriv(&d_xlfact,&d_xlfact,model->MOS2xd/EffectiveLength); xlamda = xlfact*arg; MultDeriv(&d_xlamda,&d_xlfact,&d_arg); } else { argv = (vgsx-vbin)/eta-vdsat; TimesDeriv(&d_argv,&d_vbin,-1.0); PlusDeriv(&d_argv,&d_argv,&d_vgsx); TimesDeriv(&d_argv,&d_argv,1/eta); TimesDeriv(&d_dummy,&d_vdsat,-1.0); PlusDeriv(&d_argv,&d_argv,&d_dummy); xdv = model->MOS2xd/sqrt(model->MOS2channelCharge); /*const*/ xlv = model->MOS2maxDriftVel*xdv/(2.0*ueff); InvDeriv(&d_xlv,&d_ueff); TimesDeriv(&d_xlv,&d_xlv,model->MOS2maxDriftVel*xdv*0.5); /* retained for historical interest vqchan = argv-gammad*bsarg; MultDeriv(&d_vqchan,&d_gammad,&d_bsarg); TimesDeriv(&d_vqchan,&d_vqchan,-1); PlusDeriv(&d_vqchan,&d_vqchan,&d_argv); */ /* gammad = gamasd vl = model->MOS2maxDriftVel*EffectiveLength;const*/ if (model->MOS2substrateDoping == 0.0) goto line610; if (xlamda > 0.0) goto line610; argv = lvds-vdsat; TimesDeriv(&d_argv,&d_vdsat,-1.0); d_argv.value += lvds; d_argv.d1_r += 1.0; if (argv < 0.0) EqualDeriv(&d_argv,&d_zero); argv = MAX(argv,0.0); xls = sqrt(xlv*xlv+argv); MultDeriv(&d_xls,&d_xlv,&d_xlv); PlusDeriv(&d_xls,&d_xls,&d_argv); SqrtDeriv(&d_xls,&d_xls); /* dummy9 = xlv*xlv + argv */ xlfact = xdv/(EffectiveLength*lvds); EqualDeriv(&d_xlfact,&d_r); d_xlfact.value += lvds; InvDeriv(&d_xlfact,&d_xlfact); TimesDeriv(&d_xlfact,&d_xlfact,xdv/EffectiveLength); xlamda = xlfact*(xls-xlv); TimesDeriv(&d_xlamda,&d_xlv,-1.0); PlusDeriv(&d_xlamda,&d_xlamda,&d_xls); MultDeriv(&d_xlamda,&d_xlamda,&d_xlfact); } } line610: /* * limit channel shortening at punch-through */ xwb = model->MOS2xd*sbiarg; /*const*/ xld = EffectiveLength-xwb; /*const*/ clfact = 1.0-xlamda*lvds; EqualDeriv(&d_clfact,&d_r); d_clfact.value = lvds; d_clfact.d1_r = -1; MultDeriv(&d_clfact,&d_clfact,&d_xlamda); d_clfact.value += 1.0; xleff = EffectiveLength*clfact; TimesDeriv(&d_xleff,&d_clfact,EffectiveLength); deltal = xlamda*lvds*EffectiveLength; EqualDeriv(&d_delta1,&d_r); d_delta1.value = EffectiveLength*lvds; d_delta1.d1_r = EffectiveLength; MultDeriv(&d_delta1,&d_delta1,&d_xlamda); if (model->MOS2substrateDoping == 0.0) xwb = 0.25e-6; if (xleff < xwb) { xleff = xwb/(1.0+(deltal-xld)/xwb); EqualDeriv(&d_xleff,&d_delta1);d_xleff.value -= xld; TimesDeriv(&d_xleff,&d_xleff,1/xwb);d_xleff.value += 1.0; InvDeriv(&d_xleff,&d_xleff); TimesDeriv(&d_xleff,&d_xleff,xwb); clfact = xleff/EffectiveLength; TimesDeriv(&d_clfact,&d_xleff,1/EffectiveLength); /* dfact = xleff*xleff/(xwb*xwb); */ } /* * evaluate effective beta (effective kp) */ beta1 = Beta*ufact/clfact; DivDeriv(&d_beta1,&d_ufact,&d_clfact); TimesDeriv(&d_beta1,&d_beta1,Beta); /* * test for mode of operation and branch appropriately */ gammad = gamasd; EqualDeriv(&d_gammad,&d_gamasd); if (lvds <= 1.0e-10) { if (lvgs <= von) { if ((model->MOS2fastSurfaceStateDensity == 0.0) || (OxideCap == 0.0)) { here->MOS2gds = 0.0; d_cdrain.d1_q = 0.0; d_cdrain.d2_q2 = 0.0; d_cdrain.d3_q3 = 0.0; goto line1050; } here->MOS2gds = beta1*(von-vbin-gammad*sarg)*exp(argg* (lvgs-von)); MultDeriv(&d_dummy,&d_gammad,&d_sarg); PlusDeriv(&d_dummy,&d_dummy,&d_vbin); TimesDeriv(&d_dummy,&d_dummy,-1.0); PlusDeriv(&d_dummy,&d_dummy,&d_von); MultDeriv(&d_mos2gds,&d_beta1,&d_dummy); TimesDeriv(&d_dummy,&d_von,-1.0); PlusDeriv(&d_dummy,&d_dummy,&d_p); d_dummy.value += lvgs; MultDeriv(&d_dummy,&d_dummy,&d_argg); ExpDeriv(&d_dummy,&d_dummy); MultDeriv(&d_mos2gds,&d_mos2gds,&d_dummy); d_cdrain.d1_r = d_mos2gds.value; d_cdrain.d2_r2 = d_mos2gds.d1_r; d_cdrain.d3_r3 = d_mos2gds.d2_r2; /* dummy1 = von - vbin - gamasd*sarg */ goto line1050; } here->MOS2gds = beta1*(lvgs-vbin-gammad*sarg); MultDeriv(&d_mos2gds,&d_gammad,&d_sarg); PlusDeriv(&d_mos2gds,&d_mos2gds,&d_vbin); TimesDeriv(&d_mos2gds,&d_mos2gds,-1.0); MultDeriv(&d_mos2gds,&d_mos2gds,&d_beta1); d_cdrain.d1_r = d_mos2gds.value; d_cdrain.d2_r2 = d_mos2gds.d1_r; d_cdrain.d3_r3 = d_mos2gds.d2_r2; goto line1050; } if (lvgs > von) goto line900; /* * subthreshold region */ if (vdsat <= 0) { here->MOS2gds = 0.0; d_cdrain.d1_r = 0.0; d_cdrain.d2_r2 = 0.0; d_cdrain.d3_r3 = 0.0; /* if (lvgs > vth) goto doneval; */ goto line1050; } vdson = MIN(vdsat,lvds); if (vdsat <= lvds) { EqualDeriv(&d_vdson,&d_vdsat); } else { EqualDeriv(&d_vdson,&d_r); d_vdson.value = lvds; } if (lvds > vdsat) { barg = bsarg; EqualDeriv(&d_barg,&d_bsarg); body = bodys; EqualDeriv(&d_body,&d_bodys); } cdson = beta1*((von-vbin-eta*vdson*0.5)*vdson-gammad*body/1.5); MultDeriv(&d_dummy,&d_gammad,&d_body); TimesDeriv(&d_cdson,&d_dummy,-1/1.5); TimesDeriv(&d_dummy,&d_vdson,0.5*eta); PlusDeriv(&d_dummy,&d_dummy,&d_vbin); TimesDeriv(&d_dummy,&d_dummy,-1.0); PlusDeriv(&d_dummy,&d_dummy,&d_von); MultDeriv(&d_dummy,&d_dummy,&d_vdson); PlusDeriv(&d_dummy,&d_dummy,&d_cdson); MultDeriv(&d_cdson,&d_dummy,&d_beta1); expg = exp(argg*(lvgs-von)); TimesDeriv(&d_expg,&d_von,-1.0); d_expg.value += lvgs; d_expg.d1_p += 1.0; MultDeriv(&d_expg,&d_expg,&d_argg); ExpDeriv(&d_expg,&d_expg); cdrain = cdson*expg; MultDeriv(&d_cdrain,&d_cdson,&d_expg); /* gmw = cdrain*argg; here->MOS2gm = gmw; tmp = gmw*(lvgs-von)/xn; */ goto doneval; line900: if (lvds <= vdsat) { /* * linear region */ cdrain = beta1*((lvgs-vbin-eta*lvds/2.0)*lvds-gammad*body/1.5); MultDeriv(&d_dummy,&d_gammad,&d_body); TimesDeriv(&d_dummy,&d_dummy,-1/1.5); EqualDeriv(&d_cdrain,&d_r); d_cdrain.value = eta*lvds*0.5; d_cdrain.d1_r = 0.5*eta; PlusDeriv(&d_cdrain,&d_cdrain,&d_vbin); TimesDeriv(&d_cdrain,&d_cdrain,-1.0); d_cdrain.value += lvgs; d_cdrain.d1_p += 1.0; EqualDeriv(&d_dummy,&d_r); d_dummy.value = lvds; MultDeriv(&d_cdrain,&d_cdrain,&d_dummy); MultDeriv(&d_dummy,&d_gammad,&d_body); TimesDeriv(&d_dummy,&d_dummy,-1/1.5); PlusDeriv(&d_cdrain,&d_cdrain,&d_dummy); MultDeriv(&d_cdrain,&d_cdrain,&d_beta1); } else { /* * saturation region */ cdrain = beta1*((lvgs-vbin-eta* vdsat/2.0)*vdsat-gammad*bodys/1.5); TimesDeriv(&d_cdrain,&d_vdsat,0.5*eta); PlusDeriv(&d_cdrain,&d_cdrain,&d_vbin); TimesDeriv(&d_cdrain,&d_cdrain,-1.0); d_cdrain.value += lvgs; d_cdrain.d1_p += 1.0; MultDeriv(&d_cdrain,&d_cdrain,&d_vdsat); MultDeriv(&d_dummy,&d_gammad,&d_bodys); TimesDeriv(&d_dummy,&d_dummy,-1/1.5); PlusDeriv(&d_cdrain,&d_cdrain,&d_dummy); MultDeriv(&d_cdrain,&d_cdrain,&d_beta1); } /* * compute charges for "on" region */ goto doneval; /* * finish special cases */ line1050: cdrain = 0.0; here->MOS2gm = 0.0; here->MOS2gmbs = 0.0; d_cdrain.value = 0.0; d_cdrain.d1_p = 0.0; d_cdrain.d1_q = 0.0; d_cdrain.d2_p2 = 0.0; d_cdrain.d2_q2 = 0.0; d_cdrain.d2_pq = 0.0; d_cdrain.d2_qr = 0.0; d_cdrain.d2_pr = 0.0; d_cdrain.d3_p3 = 0.0; d_cdrain.d3_q3 = 0.0; d_cdrain.d3_p2r = 0.0; d_cdrain.d3_p2q = 0.0; d_cdrain.d3_q2r = 0.0; d_cdrain.d3_pq2 = 0.0; d_cdrain.d3_pr2 = 0.0; d_cdrain.d3_qr2 = 0.0; d_cdrain.d3_pqr = 0.0; } /* * finished */ /*================HERE=================*/ doneval: /* * COMPUTE EQUIVALENT DRAIN CURRENT SOURCE */ /* * now we do the hard part of the bulk-drain and bulk-source * diode - we evaluate the non-linear capacitance and * charge * the basic equations are not hard, but the implementation * is somewhat long in an attempt to avoid log/exponential * evaluations */ /* * charge storage elements * *.. bulk-drain and bulk-source depletion capacitances */ if (vbs < here->MOS2tDepCap){ arg=1-vbs/here->MOS2tBulkPot; /* * the following block looks somewhat long and messy, * but since most users use the default grading * coefficients of .5, and sqrt is MUCH faster than an * exp(log()) we use this special case code to buy time. * (as much as 10% of total job time!) */ if(model->MOS2bulkJctBotGradingCoeff == model->MOS2bulkJctSideGradingCoeff) { if(model->MOS2bulkJctBotGradingCoeff == .5) { sarg = sargsw = 1/sqrt(arg); } else { sarg = sargsw = exp(-model->MOS2bulkJctBotGradingCoeff* log(arg)); } } else { if(model->MOS2bulkJctBotGradingCoeff == .5) { sarg = 1/sqrt(arg); } else { sarg = exp(-model->MOS2bulkJctBotGradingCoeff* log(arg)); } if(model->MOS2bulkJctSideGradingCoeff == .5) { sargsw = 1/sqrt(arg); } else { sargsw =exp(-model->MOS2bulkJctSideGradingCoeff* log(arg)); } } lcapbs=here->MOS2Cbs*sarg+ here->MOS2Cbssw*sargsw; lcapbs2 = model->MOS2type*0.5/here->MOS2tBulkPot*( here->MOS2Cbs*model->MOS2bulkJctBotGradingCoeff* sarg/arg + here->MOS2Cbssw* model->MOS2bulkJctSideGradingCoeff*sargsw/arg); lcapbs3 = here->MOS2Cbs*sarg* model->MOS2bulkJctBotGradingCoeff* (model->MOS2bulkJctBotGradingCoeff+1); lcapbs3 += here->MOS2Cbssw*sargsw* model->MOS2bulkJctSideGradingCoeff* (model->MOS2bulkJctSideGradingCoeff+1); lcapbs3 = lcapbs3/(6*here->MOS2tBulkPot* here->MOS2tBulkPot*arg*arg); } else { /* *(ckt->CKTstate0 + here->MOS2qbs)= here->MOS2f4s + vbs*(here->MOS2f2s+vbs*(here->MOS2f3s/2));*/ lcapbs=here->MOS2f2s+here->MOS2f3s*vbs; lcapbs2 = 0.5*here->MOS2f3s; lcapbs3 = 0; } if (vbd < here->MOS2tDepCap) { arg=1-vbd/here->MOS2tBulkPot; /* * the following block looks somewhat long and messy, * but since most users use the default grading * coefficients of .5, and sqrt is MUCH faster than an * exp(log()) we use this special case code to buy time. * (as much as 10% of total job time!) */ if(model->MOS2bulkJctBotGradingCoeff == .5 && model->MOS2bulkJctSideGradingCoeff == .5) { sarg = sargsw = 1/sqrt(arg); } else { if(model->MOS2bulkJctBotGradingCoeff == .5) { sarg = 1/sqrt(arg); } else { sarg = exp(-model->MOS2bulkJctBotGradingCoeff* log(arg)); } if(model->MOS2bulkJctSideGradingCoeff == .5) { sargsw = 1/sqrt(arg); } else { sargsw =exp(-model->MOS2bulkJctSideGradingCoeff* log(arg)); } } lcapbd=here->MOS2Cbd*sarg+ here->MOS2Cbdsw*sargsw; lcapbd2 = model->MOS2type*0.5/here->MOS2tBulkPot*( here->MOS2Cbd*model->MOS2bulkJctBotGradingCoeff* sarg/arg + here->MOS2Cbdsw* model->MOS2bulkJctSideGradingCoeff*sargsw/arg); lcapbd3 = here->MOS2Cbd*sarg* model->MOS2bulkJctBotGradingCoeff* (model->MOS2bulkJctBotGradingCoeff+1); lcapbd3 += here->MOS2Cbdsw*sargsw* model->MOS2bulkJctSideGradingCoeff* (model->MOS2bulkJctSideGradingCoeff+1); lcapbd3 = lcapbd3/(6*here->MOS2tBulkPot* here->MOS2tBulkPot*arg*arg); } else { lcapbd=here->MOS2f2d + vbd * here->MOS2f3d; lcapbd2=0.5*here->MOS2f3d; lcapbd3=0; } /* * meyer's capacitor model */ /* * the meyer capacitance equations are in DEVqmeyer * these expressions are derived from those equations. * these expressions are incorrect; they assume just one * controlling variable for each charge storage element * while actually there are several; the MOS2 small * signal ac linear model is also wrong because it * ignores controlled capacitive elements. these can be * corrected (as can the linear ss ac model) if the * expressions for the charge are available */ { double phi; double cox; double vddif; double vddif1; double vddif2; /* von, vgst and vdsat have already been adjusted for possible source-drain interchange */ phi = here->MOS2tPhi; cox = OxideCap; if (vgst <= -phi) { lcapgb2=lcapgb3=lcapgs2=lcapgs3=lcapgd2=lcapgd3=0; } else if (vgst <= -phi/2) { lcapgb2= -cox/(4*phi); lcapgb3=lcapgs2=lcapgs3=lcapgd2=lcapgd3=0; } else if (vgst <= 0) { lcapgb2= -cox/(4*phi); lcapgb3=lcapgs3=lcapgd2=lcapgd3=0; lcapgs2 = cox/(3*phi); } else { /* the MOS2modes are around because vds has not been adjusted */ if (vdsat <= here->MOS2mode*vds) { lcapgb2=lcapgb3=lcapgs2=lcapgs3=lcapgd2=lcapgd3=0; } else { vddif = 2.0*vdsat-here->MOS2mode*vds; vddif1 = vdsat-here->MOS2mode*vds/*-1.0e-12*/; vddif2 = vddif*vddif; lcapgd2 = -vdsat*here->MOS2mode*vds*cox/(3*vddif*vddif2); lcapgd3 = - here->MOS2mode*vds*cox*(vddif - 6*vdsat)/(9*vddif2*vddif2); lcapgs2 = -vddif1*here->MOS2mode*vds*cox/(3*vddif*vddif2); lcapgs3 = - here->MOS2mode*vds*cox*(vddif - 6*vddif1)/(9*vddif2*vddif2); lcapgb2=lcapgb3=0; } } } /* the b-s and b-d diodes need no processing ... */ here->capbs2 = lcapbs2; here->capbs3 = lcapbs3; here->capbd2 = lcapbd2; here->capbd3 = lcapbd3; here->gbs2 = lgbs2; here->gbs3 = lgbs3; here->gbd2 = lgbd2; here->gbd3 = lgbd3; here->capgb2 = model->MOS2type*lcapgb2; here->capgb3 = lcapgb3; /* * process to get Taylor coefficients, taking into * account type and mode. */ gm2 = d_cdrain.d2_p2; gb2 = d_cdrain.d2_q2; gds2 = d_cdrain.d2_r2; gmb = d_cdrain.d2_pq; gbds = d_cdrain.d2_qr; gmds = d_cdrain.d2_pr; gm3 = d_cdrain.d3_p3; gb3 = d_cdrain.d3_q3; gds3 = d_cdrain.d3_r3; gm2ds = d_cdrain.d3_p2r; gm2b = d_cdrain.d3_p2q; gb2ds = d_cdrain.d3_q2r; gmb2 = d_cdrain.d3_pq2; gmds2 = d_cdrain.d3_pr2; gbds2 = d_cdrain.d3_qr2; gmbds = d_cdrain.d3_pqr; if (here->MOS2mode == 1) { /* normal mode - no source-drain interchange */ here->cdr_x2 = gm2; here->cdr_y2 = gb2; here->cdr_z2 = gds2; here->cdr_xy = gmb; here->cdr_yz = gbds; here->cdr_xz = gmds; here->cdr_x3 = gm3; here->cdr_y3 = gb3; here->cdr_z3 = gds3; here->cdr_x2z = gm2ds; here->cdr_x2y = gm2b; here->cdr_y2z = gb2ds; here->cdr_xy2 = gmb2; here->cdr_xz2 = gmds2; here->cdr_yz2 = gbds2; here->cdr_xyz = gmbds; /* the gate caps have been divided and made into Taylor coeffs., but not adjusted for type */ here->capgs2 = model->MOS2type*lcapgs2; here->capgs3 = lcapgs3; here->capgd2 = model->MOS2type*lcapgd2; here->capgd3 = lcapgd3; } else { /* * inverse mode - source and drain interchanged */ here->cdr_x2 = -gm2; here->cdr_y2 = -gb2; here->cdr_z2 = -(gm2 + gb2 + gds2 + 2*(gmb + gmds + gbds)); here->cdr_xy = -gmb; here->cdr_yz = gmb + gb2 + gbds; here->cdr_xz = gm2 + gmb + gmds; here->cdr_x3 = -gm3; here->cdr_y3 = -gb3; here->cdr_z3 = gm3 + gb3 + gds3 + 3*(gm2b + gm2ds + gmb2 + gb2ds + gmds2 + gbds2) + 6*gmbds ; here->cdr_x2z = gm3 + gm2b + gm2ds; here->cdr_x2y = -gm2b; here->cdr_y2z = gmb2 + gb3 + gb2ds; here->cdr_xy2 = -gmb2; here->cdr_xz2 = -(gm3 + 2*(gm2b + gm2ds + gmbds) + gmb2 + gmds2); here->cdr_yz2 = -(gb3 + 2*(gmb2 + gb2ds + gmbds) + gm2b + gbds2); here->cdr_xyz = gm2b + gmb2 + gmbds; here->capgs2 = model->MOS2type*lcapgd2; here->capgs3 = lcapgd3; here->capgd2 = model->MOS2type*lcapgs2; here->capgd3 = lcapgs3; } /* now to adjust for type and multiply by factors to convert to Taylor coeffs. */ here->cdr_x2 = 0.5*model->MOS2type*here->cdr_x2; here->cdr_y2 = 0.5*model->MOS2type*here->cdr_y2; here->cdr_z2 = 0.5*model->MOS2type*here->cdr_z2; here->cdr_xy = model->MOS2type*here->cdr_xy; here->cdr_yz = model->MOS2type*here->cdr_yz; here->cdr_xz = model->MOS2type*here->cdr_xz; here->cdr_x3 = here->cdr_x3/6.; here->cdr_y3 = here->cdr_y3/6.; here->cdr_z3 = here->cdr_z3/6.; here->cdr_x2z = 0.5*here->cdr_x2z; here->cdr_x2y = 0.5*here->cdr_x2y; here->cdr_y2z = 0.5*here->cdr_y2z; here->cdr_xy2 = 0.5*here->cdr_xy2; here->cdr_xz2 = 0.5*here->cdr_xz2; here->cdr_yz2 = 0.5*here->cdr_yz2; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos2/mos2set.c0000644000175000017500000002123313546075722021604 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/const.h" #include "ngspice/cktdefs.h" #include "mos2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS2setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* load the MOS2 device structure with those pointers needed later * for fast matrix loading */ { MOS2model *model = (MOS2model *)inModel; MOS2instance *here; int error; CKTnode *tmp; /* loop through all the MOS2 device models */ for( ; model != NULL; model = MOS2nextModel(model)) { if(!model->MOS2typeGiven) { model->MOS2type = NMOS; } if(!model->MOS2latDiffGiven) { model->MOS2latDiff = 0; } if(!model->MOS2jctSatCurDensityGiven) { model->MOS2jctSatCurDensity = 0; } if(!model->MOS2jctSatCurGiven) { model->MOS2jctSatCur = 1e-14; } if(!model->MOS2drainResistanceGiven) { model->MOS2drainResistance = 0; } if(!model->MOS2sourceResistanceGiven) { model->MOS2sourceResistance = 0; } if(!model->MOS2sheetResistanceGiven) { model->MOS2sheetResistance = 0; } if(!model->MOS2gateSourceOverlapCapFactorGiven) { model->MOS2gateSourceOverlapCapFactor = 0; } if(!model->MOS2gateDrainOverlapCapFactorGiven) { model->MOS2gateDrainOverlapCapFactor = 0; } if(!model->MOS2gateBulkOverlapCapFactorGiven) { model->MOS2gateBulkOverlapCapFactor = 0; } if(!model->MOS2vt0Given) { model->MOS2vt0 = 0; } if(!model->MOS2bulkJctPotentialGiven) { model->MOS2bulkJctPotential = .8; } if(!model->MOS2capBDGiven) { model->MOS2capBD = 0; } if(!model->MOS2capBSGiven) { model->MOS2capBS = 0; } if(!model->MOS2sideWallCapFactorGiven) { model->MOS2sideWallCapFactor = 0; } if(!model->MOS2bulkJctBotGradingCoeffGiven) { model->MOS2bulkJctBotGradingCoeff = .5; } if(!model->MOS2bulkJctSideGradingCoeffGiven) { model->MOS2bulkJctSideGradingCoeff = .33; } if(!model->MOS2fwdCapDepCoeffGiven) { model->MOS2fwdCapDepCoeff = .5; } if(!model->MOS2phiGiven) { model->MOS2phi = .6; } if(!model->MOS2lambdaGiven) { model->MOS2lambda = 0; } if(!model->MOS2gammaGiven) { model->MOS2gamma = 0; } if(!model->MOS2narrowFactorGiven) { model->MOS2narrowFactor = 0; } if(!model->MOS2critFieldExpGiven) { model->MOS2critFieldExp = 0; } if(!model->MOS2critFieldGiven) { model->MOS2critField = 1e4; } if(!model->MOS2maxDriftVelGiven) { model->MOS2maxDriftVel = 0; } if(!model->MOS2junctionDepthGiven) { model->MOS2junctionDepth = 0; } if(!model->MOS2channelChargeGiven) { model->MOS2channelCharge = 1; } if(!model->MOS2fastSurfaceStateDensityGiven) { model->MOS2fastSurfaceStateDensity = 0; } if(!model->MOS2fNcoefGiven) { model->MOS2fNcoef = 0; } if(!model->MOS2fNexpGiven) { model->MOS2fNexp = 1; } /* loop through all the instances of the model */ for (here = MOS2instances(model); here != NULL ; here=MOS2nextInstance(here)) { CKTnode *tmpNode; IFuid tmpName; /* allocate a chunk of the state vector */ here->MOS2states = *states; *states += MOS2numStates; if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN) ){ *states += MOS2numSenStates * (ckt->CKTsenInfo->SENparms); } if(!here->MOS2drainPerimiterGiven) { here->MOS2drainPerimiter = 0; } if(!here->MOS2icVBSGiven) { here->MOS2icVBS = 0; } if(!here->MOS2icVDSGiven) { here->MOS2icVDS = 0; } if(!here->MOS2icVGSGiven) { here->MOS2icVGS = 0; } if(!here->MOS2sourcePerimiterGiven) { here->MOS2sourcePerimiter = 0; } if(!here->MOS2vdsatGiven) { here->MOS2vdsat = 0; } if (!here->MOS2drainSquaresGiven) { here->MOS2drainSquares=1; } if (!here->MOS2sourceSquaresGiven) { here->MOS2sourceSquares=1; } if ((model->MOS2drainResistance != 0 || (here->MOS2drainSquares != 0 && model->MOS2sheetResistance != 0))) { if (here->MOS2dNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->MOS2name,"internal#drain"); if(error) return(error); here->MOS2dNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->MOS2dNodePrime = here->MOS2dNode; } if( ( (model->MOS2sourceResistance != 0) || ((here->MOS2sourceSquares != 0) && (model->MOS2sheetResistance != 0)) )) { if (here->MOS2sNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->MOS2name,"internal#source"); if(error) return(error); here->MOS2sNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->MOS2sNodePrime = here->MOS2sNode; } /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(MOS2DdPtr, MOS2dNode, MOS2dNode); TSTALLOC(MOS2GgPtr, MOS2gNode, MOS2gNode); TSTALLOC(MOS2SsPtr, MOS2sNode, MOS2sNode); TSTALLOC(MOS2BbPtr, MOS2bNode, MOS2bNode); TSTALLOC(MOS2DPdpPtr, MOS2dNodePrime, MOS2dNodePrime); TSTALLOC(MOS2SPspPtr, MOS2sNodePrime, MOS2sNodePrime); TSTALLOC(MOS2DdpPtr, MOS2dNode, MOS2dNodePrime); TSTALLOC(MOS2GbPtr, MOS2gNode, MOS2bNode); TSTALLOC(MOS2GdpPtr, MOS2gNode, MOS2dNodePrime); TSTALLOC(MOS2GspPtr, MOS2gNode, MOS2sNodePrime); TSTALLOC(MOS2SspPtr, MOS2sNode, MOS2sNodePrime); TSTALLOC(MOS2BdpPtr, MOS2bNode, MOS2dNodePrime); TSTALLOC(MOS2BspPtr, MOS2bNode, MOS2sNodePrime); TSTALLOC(MOS2DPspPtr, MOS2dNodePrime, MOS2sNodePrime); TSTALLOC(MOS2DPdPtr, MOS2dNodePrime, MOS2dNode); TSTALLOC(MOS2BgPtr, MOS2bNode, MOS2gNode); TSTALLOC(MOS2DPgPtr, MOS2dNodePrime, MOS2gNode); TSTALLOC(MOS2SPgPtr, MOS2sNodePrime, MOS2gNode); TSTALLOC(MOS2SPsPtr, MOS2sNodePrime, MOS2sNode); TSTALLOC(MOS2DPbPtr, MOS2dNodePrime, MOS2bNode); TSTALLOC(MOS2SPbPtr, MOS2sNodePrime, MOS2bNode); TSTALLOC(MOS2SPdpPtr, MOS2sNodePrime, MOS2dNodePrime); } } return(OK); } int MOS2unsetup(GENmodel *inModel, CKTcircuit *ckt) { MOS2model *model; MOS2instance *here; for (model = (MOS2model *)inModel; model != NULL; model = MOS2nextModel(model)) { for (here = MOS2instances(model); here != NULL; here=MOS2nextInstance(here)) { if (here->MOS2sNodePrime > 0 && here->MOS2sNodePrime != here->MOS2sNode) CKTdltNNum(ckt, here->MOS2sNodePrime); here->MOS2sNodePrime = 0; if (here->MOS2dNodePrime > 0 && here->MOS2dNodePrime != here->MOS2dNode) CKTdltNNum(ckt, here->MOS2dNodePrime); here->MOS2dNodePrime = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/mos2/mos2itf.h0000644000175000017500000000026013546075722021575 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_MOS2 #define DEV_MOS2 SPICEdev *get_mos2_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/mos2/mos2init.h0000644000175000017500000000037013546075722021760 0ustar carstencarsten#ifndef _MOS2INIT_H #define _MOS2INIT_H extern IFparm MOS2pTable[ ]; extern IFparm MOS2mPTable[ ]; extern char *MOS2names[ ]; extern int MOS2pTSize; extern int MOS2mPTSize; extern int MOS2nSize; extern int MOS2iSize; extern int MOS2mSize; #endif tmpk8ny_4pz/src/spicelib/devices/mos2/mos2trun.c0000644000175000017500000000134513546075722022003 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS2trunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { MOS2model *model = (MOS2model *)inModel; MOS2instance *here; for( ; model != NULL; model = MOS2nextModel(model)) { for(here=MOS2instances(model);here!=NULL;here = MOS2nextInstance(here)){ CKTterr(here->MOS2qgs,ckt,timeStep); CKTterr(here->MOS2qgd,ckt,timeStep); CKTterr(here->MOS2qgb,ckt,timeStep); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos2/mos2supd.c0000644000175000017500000001566413546075722021777 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ /* update the charge sensitivities and their derivatives */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mos2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS2sUpdate(GENmodel *inModel, CKTcircuit *ckt) { MOS2model *model = (MOS2model *)inModel; MOS2instance *here; int iparmno; double sb; double sg; double sdprm; double ssprm; double sxpgs; double sxpgd; double sxpbs; double sxpbd; double sxpgb; double dummy1; double dummy2; SENstruct *info; if(ckt->CKTtime == 0) return(OK); info = ckt->CKTsenInfo; #ifdef SENSDEBUG printf("MOS2senupdate\n"); printf("CKTtime = %.5e\n",ckt->CKTtime); #endif /* SENSDEBUG */ sxpgs = 0; sxpgd = 0; sxpbs = 0; sxpbd = 0; sxpgb = 0; dummy1 = 0; dummy2 = 0; /* loop through all the MOS2 models */ for( ; model != NULL; model = MOS2nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS2instances(model); here != NULL ; here=MOS2nextInstance(here)) { #ifdef SENSDEBUG printf("senupdate instance name %s\n",here->MOS2name); printf("before loading\n"); printf("CKTag[0] = %.2e,CKTag[1] = %.2e\n", ckt->CKTag[0],ckt->CKTag[1]); printf("capgs = %.7e\n",here->MOS2cgs); printf("capgd = %.7e\n",here->MOS2cgd); printf("capgb = %.7e\n",here->MOS2cgb); printf("capbs = %.7e\n",here->MOS2capbs); printf("capbd = %.7e\n",here->MOS2capbd); #endif /* SENSDEBUG */ for(iparmno = 1;iparmno<=info->SENparms;iparmno++){ sb = *(info->SEN_Sap[here->MOS2bNode] + iparmno); sg = *(info->SEN_Sap[here->MOS2gNode] + iparmno); ssprm = *(info->SEN_Sap[here->MOS2sNodePrime] + iparmno); sdprm = *(info->SEN_Sap[here->MOS2dNodePrime] + iparmno); #ifdef SENSDEBUG printf("iparmno = %d\n",iparmno); printf("sb = %.7e,sg = %.7e\n",sb,sg); printf("ssprm = %.7e,sdprm = %.7e\n",ssprm,sdprm); #endif /* SENSDEBUG */ sxpgs = (sg - ssprm) * here->MOS2cgs ; sxpgd = (sg - sdprm) * here->MOS2cgd ; sxpgb = (sg - sb) * here->MOS2cgb ; sxpbs = (sb - ssprm) * here->MOS2capbs ; sxpbd = (sb - sdprm) * here->MOS2capbd ; if(here->MOS2sens_l && (iparmno == here->MOS2senParmNo)){ sxpgs += *(here->MOS2dphigs_dl); sxpgd += *(here->MOS2dphigd_dl); sxpbs += *(here->MOS2dphibs_dl); sxpbd += *(here->MOS2dphibd_dl); sxpgb += *(here->MOS2dphigb_dl); } if(here->MOS2sens_w && (iparmno == (here->MOS2senParmNo + (int) here->MOS2sens_l))){ sxpgs += *(here->MOS2dphigs_dw); sxpgd += *(here->MOS2dphigd_dw); sxpbs += *(here->MOS2dphibs_dw); sxpbd += *(here->MOS2dphibd_dw); sxpgb += *(here->MOS2dphigb_dw); } if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->MOS2sensxpgs + 10 * (iparmno - 1)) = sxpgs; *(ckt->CKTstate1 + here->MOS2sensxpgd + 10 * (iparmno - 1)) = sxpgd; *(ckt->CKTstate1 + here->MOS2sensxpbs + 10 * (iparmno - 1)) = sxpbs; *(ckt->CKTstate1 + here->MOS2sensxpbd + 10 * (iparmno - 1)) = sxpbd; *(ckt->CKTstate1 + here->MOS2sensxpgb + 10 * (iparmno - 1)) = sxpgb; *(ckt->CKTstate1 + here->MOS2sensxpgs + 10 * (iparmno - 1) + 1) = 0; *(ckt->CKTstate1 + here->MOS2sensxpgd + 10 * (iparmno - 1) + 1) = 0; *(ckt->CKTstate1 + here->MOS2sensxpbs + 10 * (iparmno - 1) + 1) = 0; *(ckt->CKTstate1 + here->MOS2sensxpbd + 10 * (iparmno - 1) + 1) = 0; *(ckt->CKTstate1 + here->MOS2sensxpgb + 10 * (iparmno - 1) + 1) = 0; goto next; } *(ckt->CKTstate0 + here->MOS2sensxpgs + 10 * (iparmno - 1)) = sxpgs; *(ckt->CKTstate0 + here->MOS2sensxpgd + 10 * (iparmno - 1)) = sxpgd; *(ckt->CKTstate0 + here->MOS2sensxpbs + 10 * (iparmno - 1)) = sxpbs; *(ckt->CKTstate0 + here->MOS2sensxpbd + 10 * (iparmno - 1)) = sxpbd; *(ckt->CKTstate0 + here->MOS2sensxpgb + 10 * (iparmno - 1)) = sxpgb; NIintegrate(ckt,&dummy1,&dummy2,here->MOS2cgs, here->MOS2sensxpgs + 10*(iparmno -1)); NIintegrate(ckt,&dummy1,&dummy2,here->MOS2cgd, here->MOS2sensxpgd + 10*(iparmno -1)); NIintegrate(ckt,&dummy1,&dummy2,here->MOS2cgb, here->MOS2sensxpgb + 10*(iparmno -1)); NIintegrate(ckt,&dummy1,&dummy2,here->MOS2capbs, here->MOS2sensxpbs + 10*(iparmno -1)); NIintegrate(ckt,&dummy1,&dummy2,here->MOS2capbd, here->MOS2sensxpbd + 10*(iparmno -1)); next: ; #ifdef SENSDEBUG printf("after loading\n"); printf("sxpgs = %.7e,sdotxpgs = %.7e\n", sxpgs,*(ckt->CKTstate0 + here->MOS2sensxpgs + 10 * (iparmno - 1) + 1)); printf("sxpgd = %.7e,sdotxpgd = %.7e\n", sxpgd,*(ckt->CKTstate0 + here->MOS2sensxpgd + 10 * (iparmno - 1) + 1)); printf("sxpgb = %.7e,sdotxpgb = %.7e\n", sxpgb,*(ckt->CKTstate0 + here->MOS2sensxpgb + 10 * (iparmno - 1) + 1)); printf("sxpbs = %.7e,sdotxpbs = %.7e\n", sxpbs,*(ckt->CKTstate0 + here->MOS2sensxpbs + 10 * (iparmno - 1) + 1)); printf("sxpbd = %.7e,sdotxpbd = %.7e\n", sxpbd,*(ckt->CKTstate0 + here->MOS2sensxpbd + 10 * (iparmno - 1) + 1)); #endif /* SENSDEBUG */ } } } #ifdef SENSDEBUG printf("MOS2senupdate end\n"); #endif /* SENSDEBUG */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos2/mos2load.c0000644000175000017500000015521613546075722021741 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 alansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/cktdefs.h" #include "mos2defs.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* assuming silicon - make definition for epsilon of silicon */ #define EPSSIL (11.7 * 8.854214871e-12) static double sig1[4] = {1.0, -1.0, 1.0, -1.0}; static double sig2[4] = {1.0, 1.0,-1.0, -1.0}; int MOS2load(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current value into the * sparse matrix previously provided */ { MOS2model *model = (MOS2model *)inModel; MOS2instance *here; int error; double Beta; double DrainSatCur; double EffectiveLength; double GateBulkOverlapCap; double GateDrainOverlapCap; double GateSourceOverlapCap; double OxideCap; double SourceSatCur; double arg; double cbhat; double cdhat; double cdrain = 0.0; double cdreq; double ceq; double ceqbd; double ceqbs; double ceqgb; double ceqgd; double ceqgs; double delvbd; double delvbs; double delvds; double delvgd; double delvgs; double evbd; double evbs; double gcgb; double gcgd; double gcgs; double geq; double sarg; double sargsw; double vbd; double vbs; double vds; double vdsat; double vgb1; double vgb; double vgd1; double vgd; double vgdo; double vgs1; double vgs; double von; double vt; /* K * T / Q */ #ifndef PREDICTOR double xfact = 0.0; #endif double capgs = 0.0; /* total gate-source capacitance */ double capgd = 0.0; /* total gate-drain capacitance */ double capgb = 0.0; /* total gate-bulk capacitance */ int xnrm; int xrev; int Check; #ifndef NOBYPASS double tempv; #endif /*NOBYPASS*/ #ifdef CAPBYPASS int senflag; #endif /* CAPBYPASS */ int SenCond=0; #ifdef CAPBYPASS senflag = 0; if(ckt->CKTsenInfo){ if(ckt->CKTsenInfo->SENstatus == PERTURBATION){ if((ckt->CKTsenInfo->SENmode == ACSEN)|| (ckt->CKTsenInfo->SENmode == TRANSEN)){ senflag = 1; } } } #endif /* CAPBYPASS */ /* loop through all the MOS2 device models */ for( ; model != NULL; model = MOS2nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS2instances(model); here != NULL ; here=MOS2nextInstance(here)) { vt = CONSTKoverQ * here->MOS2temp; Check=1; if(ckt->CKTsenInfo){ #ifdef SENSDEBUG printf("MOS2load %s\n",here->MOS2name); #endif /* SENSDEBUG */ if(ckt->CKTsenInfo->SENstatus == PERTURBATION) { if(here->MOS2senPertFlag == OFF)continue; } SenCond = here->MOS2senPertFlag; } EffectiveLength=here->MOS2l - 2*model->MOS2latDiff; if( (here->MOS2tSatCurDens == 0) || (here->MOS2drainArea == 0) || (here->MOS2sourceArea == 0)) { DrainSatCur = here->MOS2m * here->MOS2tSatCur; SourceSatCur = here->MOS2m * here->MOS2tSatCur; } else { DrainSatCur = here->MOS2m * here->MOS2tSatCurDens * here->MOS2drainArea; SourceSatCur = here->MOS2m * here->MOS2tSatCurDens * here->MOS2sourceArea; } GateSourceOverlapCap = model->MOS2gateSourceOverlapCapFactor * here->MOS2m * here->MOS2w; GateDrainOverlapCap = model->MOS2gateDrainOverlapCapFactor * here->MOS2m * here->MOS2w; GateBulkOverlapCap = model->MOS2gateBulkOverlapCapFactor * here->MOS2m * EffectiveLength; Beta = here->MOS2tTransconductance * here->MOS2w * here->MOS2m/EffectiveLength; OxideCap = model->MOS2oxideCapFactor * EffectiveLength * here->MOS2m * here->MOS2w; if(SenCond){ #ifdef SENSDEBUG printf("MOS2senPertFlag = ON \n"); #endif /* SENSDEBUG */ if((ckt->CKTsenInfo->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)) { vgs = *(ckt->CKTstate1 + here->MOS2vgs); vds = *(ckt->CKTstate1 + here->MOS2vds); vbs = *(ckt->CKTstate1 + here->MOS2vbs); vbd = *(ckt->CKTstate1 + here->MOS2vbd); vgb = vgs - vbs; vgd = vgs - vds; } else if (ckt->CKTsenInfo->SENmode == ACSEN){ vgb = model->MOS2type * ( *(ckt->CKTrhsOp+here->MOS2gNode) - *(ckt->CKTrhsOp+here->MOS2bNode)); vbs = *(ckt->CKTstate0 + here->MOS2vbs); vbd = *(ckt->CKTstate0 + here->MOS2vbd); vgd = vgb + vbd ; vgs = vgb + vbs ; vds = vbs - vbd ; } else{ vgs = *(ckt->CKTstate0 + here->MOS2vgs); vds = *(ckt->CKTstate0 + here->MOS2vds); vbs = *(ckt->CKTstate0 + here->MOS2vbs); vbd = *(ckt->CKTstate0 + here->MOS2vbd); vgb = vgs - vbs; vgd = vgs - vds; } #ifdef SENSDEBUG printf(" vbs = %.7e ,vbd = %.7e,vgb = %.7e\n",vbs,vbd,vgb); printf(" vgs = %.7e ,vds = %.7e,vgd = %.7e\n",vgs,vds,vgd); #endif /* SENSDEBUG */ goto next1; } if((ckt->CKTmode & (MODEINITFLOAT | MODEINITPRED |MODEINITSMSIG | MODEINITTRAN)) || ( (ckt->CKTmode & MODEINITFIX) && (!here->MOS2off) ) ) { #ifndef PREDICTOR if(ckt->CKTmode & (MODEINITPRED | MODEINITTRAN) ) { /* predictor step */ xfact=ckt->CKTdelta/ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->MOS2vbs) = *(ckt->CKTstate1 + here->MOS2vbs); vbs = (1+xfact)* (*(ckt->CKTstate1 + here->MOS2vbs)) -(xfact * (*(ckt->CKTstate2 + here->MOS2vbs))); *(ckt->CKTstate0 + here->MOS2vgs) = *(ckt->CKTstate1 + here->MOS2vgs); vgs = (1+xfact)* (*(ckt->CKTstate1 + here->MOS2vgs)) -(xfact * (*(ckt->CKTstate2 + here->MOS2vgs))); *(ckt->CKTstate0 + here->MOS2vds) = *(ckt->CKTstate1 + here->MOS2vds); vds = (1+xfact)* (*(ckt->CKTstate1 + here->MOS2vds)) -(xfact * (*(ckt->CKTstate2 + here->MOS2vds))); *(ckt->CKTstate0 + here->MOS2vbd) = *(ckt->CKTstate0 + here->MOS2vbs)- *(ckt->CKTstate0 + here->MOS2vds); } else { #endif /* PREDICTOR */ /* general iteration */ vbs = model->MOS2type * ( *(ckt->CKTrhsOld+here->MOS2bNode) - *(ckt->CKTrhsOld+here->MOS2sNodePrime)); vgs = model->MOS2type * ( *(ckt->CKTrhsOld+here->MOS2gNode) - *(ckt->CKTrhsOld+here->MOS2sNodePrime)); vds = model->MOS2type * ( *(ckt->CKTrhsOld+here->MOS2dNodePrime) - *(ckt->CKTrhsOld+here->MOS2sNodePrime)); #ifndef PREDICTOR } #endif /* PREDICTOR */ /* now some common crunching for some more useful quantities */ vbd=vbs-vds; vgd=vgs-vds; vgdo = *(ckt->CKTstate0 + here->MOS2vgs) - *(ckt->CKTstate0 + here->MOS2vds); delvbs = vbs - *(ckt->CKTstate0 + here->MOS2vbs); delvbd = vbd - *(ckt->CKTstate0 + here->MOS2vbd); delvgs = vgs - *(ckt->CKTstate0 + here->MOS2vgs); delvds = vds - *(ckt->CKTstate0 + here->MOS2vds); delvgd = vgd-vgdo; /* these are needed for convergence testing */ if (here->MOS2mode >= 0) { cdhat= here->MOS2cd - here->MOS2gbd * delvbd + here->MOS2gmbs * delvbs + here->MOS2gm * delvgs + here->MOS2gds * delvds ; } else { cdhat= here->MOS2cd + ( here->MOS2gmbs - here->MOS2gbd) * delvbd - here->MOS2gm * delvgd + here->MOS2gds * delvds ; } cbhat= here->MOS2cbs + here->MOS2cbd + here->MOS2gbd * delvbd + here->MOS2gbs * delvbs ; /* now lets see if we can bypass (ugh) */ /* the following massive if should all be one * single compound if statement, but most compilers * can't handle it in one piece, so it is broken up * into several stages here */ #ifndef NOBYPASS tempv = MAX(fabs(cbhat),fabs(here->MOS2cbs+here->MOS2cbd))+ ckt->CKTabstol; if((!(ckt->CKTmode & (MODEINITPRED|MODEINITTRAN|MODEINITSMSIG) )) && (ckt->CKTbypass) ) if ( (fabs(cbhat-(here->MOS2cbs + here->MOS2cbd)) < ckt->CKTreltol * tempv)) if( (fabs(delvbs) < (ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->MOS2vbs)))+ ckt->CKTvoltTol))) if ( (fabs(delvbd) < (ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0+here->MOS2vbd)))+ ckt->CKTvoltTol)) ) if( (fabs(delvgs) < (ckt->CKTreltol * MAX(fabs(vgs), fabs(*(ckt->CKTstate0+here->MOS2vgs)))+ ckt->CKTvoltTol)) ) if ( (fabs(delvds) < (ckt->CKTreltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0+here->MOS2vds)))+ ckt->CKTvoltTol)) ) if( (fabs(cdhat- here->MOS2cd) < ckt->CKTreltol * MAX(fabs(cdhat),fabs( here->MOS2cd)) + ckt->CKTabstol) ) { /* bypass code */ /* nothing interesting has changed since last * iteration on this device, so we just * copy all the values computed last iteration * out and keep going */ vbs = *(ckt->CKTstate0 + here->MOS2vbs); vbd = *(ckt->CKTstate0 + here->MOS2vbd); vgs = *(ckt->CKTstate0 + here->MOS2vgs); vds = *(ckt->CKTstate0 + here->MOS2vds); vgd = vgs - vds; vgb = vgs - vbs; cdrain = here->MOS2mode * (here->MOS2cd + here->MOS2cbd); if(ckt->CKTmode & (MODETRAN | MODETRANOP)) { capgs = ( *(ckt->CKTstate0 + here->MOS2capgs)+ *(ckt->CKTstate1 + here->MOS2capgs)+ GateSourceOverlapCap ); capgd = ( *(ckt->CKTstate0 + here->MOS2capgd)+ *(ckt->CKTstate1 + here->MOS2capgd)+ GateDrainOverlapCap ); capgb = ( *(ckt->CKTstate0 + here->MOS2capgb)+ *(ckt->CKTstate1 + here->MOS2capgb)+ GateBulkOverlapCap ); if(ckt->CKTsenInfo){ here->MOS2cgs = capgs; here->MOS2cgd = capgd; here->MOS2cgb = capgb; } } goto bypass; } #endif /*NOBYPASS*/ /* ok - bypass is out, do it the hard way */ von = model->MOS2type * here->MOS2von; /* * limiting * We want to keep device voltages from changing * so fast that the exponentials churn out overflows * and similar rudeness */ if(*(ckt->CKTstate0 + here->MOS2vds) >=0) { vgs = DEVfetlim(vgs,*(ckt->CKTstate0 + here->MOS2vgs) ,von); vds = vgs - vgd; vds = DEVlimvds(vds,*(ckt->CKTstate0 + here->MOS2vds)); vgd = vgs - vds; } else { vgd = DEVfetlim(vgd,vgdo,von); vds = vgs - vgd; if(!(ckt->CKTfixLimit)) { vds = -DEVlimvds(-vds,-(*(ckt->CKTstate0 + here->MOS2vds))); } vgs = vgd + vds; } if(vds >= 0) { vbs = DEVpnjlim(vbs,*(ckt->CKTstate0 + here->MOS2vbs), vt,here->MOS2sourceVcrit,&Check); vbd = vbs-vds; } else { vbd = DEVpnjlim(vbd,*(ckt->CKTstate0 + here->MOS2vbd), vt,here->MOS2drainVcrit,&Check); vbs = vbd + vds; } } else { /* ok - not one of the simple cases, so we have to * look at other possibilities */ if((ckt->CKTmode & MODEINITJCT) && !here->MOS2off) { vds= model->MOS2type * here->MOS2icVDS; vgs= model->MOS2type * here->MOS2icVGS; vbs= model->MOS2type * here->MOS2icVBS; if((vds==0) && (vgs==0) && (vbs==0) && ((ckt->CKTmode & (MODETRAN|MODEDCOP|MODEDCTRANCURVE)) || (!(ckt->CKTmode & MODEUIC)))) { vbs = -1; vgs = model->MOS2type * here->MOS2tVto; vds = 0; } } else { vbs=vgs=vds=0; } } /* now all the preliminaries are over - we can start doing the * real work */ vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; /* bulk-source and bulk-drain doides * here we just evaluate the ideal diode current and the * correspoinding derivative (conductance). */ next1: if(vbs <= -3*vt) { here->MOS2gbs = ckt->CKTgmin; here->MOS2cbs = here->MOS2gbs*vbs-SourceSatCur; } else { evbs = exp(MIN(MAX_EXP_ARG,vbs/vt)); here->MOS2gbs = SourceSatCur*evbs/vt + ckt->CKTgmin; here->MOS2cbs = SourceSatCur*(evbs-1) + ckt->CKTgmin*vbs; } if(vbd <= -3*vt) { here->MOS2gbd = ckt->CKTgmin; here->MOS2cbd = here->MOS2gbd*vbd-DrainSatCur; } else { evbd = exp(MIN(MAX_EXP_ARG,vbd/vt)); here->MOS2gbd = DrainSatCur*evbd/vt + ckt->CKTgmin; here->MOS2cbd = DrainSatCur*(evbd-1) + ckt->CKTgmin*vbd; } if(vds >= 0) { /* normal mode */ here->MOS2mode = 1; } else { /* inverse mode */ here->MOS2mode = -1; } { /* moseq2(vds,vbs,vgs,gm,gds,gmbs,qg,qc,qb, * cggb,cgdb,cgsb,cbgb,cbdb,cbsb) */ /* note: cgdb, cgsb, cbdb, cbsb never used */ /* * this routine evaluates the drain current, its derivatives and * the charges associated with the gate, channel and bulk * for mosfets * */ double arg; double sarg; double a4[4],b4[4],x4[8],poly4[8]; double beta1; double dsrgdb; double d2sdb2; double sphi = 0.0; /* square root of phi */ double sphi3 = 0.0; /* square root of phi cubed */ double barg; double d2bdb2; double factor; double dbrgdb; double eta; double vbin; double argd = 0.0; double args = 0.0; double argss; double argsd; double argxs = 0.0; double argxd = 0.0; double daddb2; double dasdb2; double dbargd; double dbargs; double dbxwd; double dbxws; double dgddb2; double dgddvb; double dgdvds; double gamasd; double xwd; double xws; double ddxwd; double gammad; double vth; double cfs; double cdonco; double xn = 0.0; double argg = 0.0; double vgst; double sarg3; double sbiarg; double dgdvbs; double body; double gdbdv; double dodvbs; double dodvds = 0.0; double dxndvd = 0.0; double dxndvb = 0.0; double udenom; double dudvgs; double dudvds; double dudvbs; double gammd2; double argv; double vgsx; double ufact; double ueff; double dsdvgs; double dsdvbs; double a1; double a3; double a; double b1; double b3; double b; double c1; double c; double d1; double fi; double p0; double p2; double p3; double p4; double p; double r3; double r; double ro; double s2; double s; double v1; double v2; double xv; double y3; double delta4; double xvalid = 0.0; double bsarg = 0.0; double dbsrdb; double bodys = 0.0; double gdbdvs = 0.0; double sargv; double xlfact; double dldsat; double xdv; double xlv; double vqchan; double dqdsat; double vl; double dfundg; double dfunds; double dfundb; double xls; double dldvgs; double dldvds; double dldvbs; double dfact; double clfact; double xleff; double deltal; double xwb; double vdson; double cdson; double didvds; double gdson; double gmw; double gbson; double expg; double xld; double xlamda = model->MOS2lambda; /* 'local' variables - these switch d & s around appropriately * so that we don't have to worry about vds < 0 */ double lvbs = here->MOS2mode==1?vbs:vbd; double lvds = here->MOS2mode*vds; double lvgs = here->MOS2mode==1?vgs:vgd; double phiMinVbs = here->MOS2tPhi - lvbs; double tmp; /* a temporary variable, not used for more than */ /* about 10 lines at a time */ int iknt; int jknt; int i; int j; /* * compute some useful quantities */ if (lvbs <= 0.0) { sarg = sqrt(phiMinVbs); dsrgdb = -0.5/sarg; d2sdb2 = 0.5*dsrgdb/phiMinVbs; } else { sphi = sqrt(here->MOS2tPhi); sphi3 = here->MOS2tPhi*sphi; sarg = sphi/(1.0+0.5*lvbs/here->MOS2tPhi); tmp = sarg/sphi3; dsrgdb = -0.5*sarg*tmp; d2sdb2 = -dsrgdb*tmp; } if ((lvbs-lvds) <= 0) { barg = sqrt(phiMinVbs+lvds); dbrgdb = -0.5/barg; d2bdb2 = 0.5*dbrgdb/(phiMinVbs+lvds); } else { sphi = sqrt(here->MOS2tPhi);/* added by HT 050523 */ sphi3 = here->MOS2tPhi*sphi;/* added by HT 050523 */ barg = sphi/(1.0+0.5*(lvbs-lvds)/here->MOS2tPhi); tmp = barg/sphi3; dbrgdb = -0.5*barg*tmp; d2bdb2 = -dbrgdb*tmp; } /* * calculate threshold voltage (von) * narrow-channel effect */ /*XXX constant per device */ factor = 0.125*model->MOS2narrowFactor*2.0*M_PI*EPSSIL/ OxideCap*EffectiveLength; /*XXX constant per device */ eta = 1.0+factor; vbin = here->MOS2tVbi*model->MOS2type+factor*phiMinVbs; if ((model->MOS2gamma > 0.0) || (model->MOS2substrateDoping > 0.0)) { xwd = model->MOS2xd*barg; xws = model->MOS2xd*sarg; /* * short-channel effect with vds .ne. 0.0 */ argss = 0.0; argsd = 0.0; dbargs = 0.0; dbargd = 0.0; dgdvds = 0.0; dgddb2 = 0.0; if (model->MOS2junctionDepth > 0) { tmp = 2.0/model->MOS2junctionDepth; argxs = 1.0+xws*tmp; argxd = 1.0+xwd*tmp; args = sqrt(argxs); argd = sqrt(argxd); tmp = .5*model->MOS2junctionDepth/EffectiveLength; argss = tmp * (args-1.0); argsd = tmp * (argd-1.0); } gamasd = model->MOS2gamma*(1.0-argss-argsd); dbxwd = model->MOS2xd*dbrgdb; dbxws = model->MOS2xd*dsrgdb; if (model->MOS2junctionDepth > 0) { tmp = 0.5/EffectiveLength; dbargs = tmp*dbxws/args; dbargd = tmp*dbxwd/argd; dasdb2 = -model->MOS2xd*( d2sdb2+dsrgdb*dsrgdb* model->MOS2xd/(model->MOS2junctionDepth*argxs))/ (EffectiveLength*args); daddb2 = -model->MOS2xd*( d2bdb2+dbrgdb*dbrgdb* model->MOS2xd/(model->MOS2junctionDepth*argxd))/ (EffectiveLength*argd); dgddb2 = -0.5*model->MOS2gamma*(dasdb2+daddb2); } dgddvb = -model->MOS2gamma*(dbargs+dbargd); if (model->MOS2junctionDepth > 0) { ddxwd = -dbxwd; dgdvds = -model->MOS2gamma*0.5*ddxwd/(EffectiveLength*argd); } } else { gamasd = model->MOS2gamma; gammad = model->MOS2gamma; dgddvb = 0.0; dgdvds = 0.0; dgddb2 = 0.0; } von = vbin+gamasd*sarg; vth = von; vdsat = 0.0; if (model->MOS2fastSurfaceStateDensity != 0.0 && OxideCap != 0.0) { /* XXX constant per model */ cfs = CHARGE*model->MOS2fastSurfaceStateDensity* 1e4 /*(cm**2/m**2)*/; cdonco = -(gamasd*dsrgdb+dgddvb*sarg)+factor; xn = 1.0+cfs/OxideCap*here->MOS2m* here->MOS2w*EffectiveLength+cdonco; tmp = vt*xn; von = von+tmp; argg = 1.0/tmp; vgst = lvgs-von; } else { vgst = lvgs-von; if (lvgs <= vbin) { /* * cutoff region */ here->MOS2gds = 0.0; goto line1050; } } /* * compute some more useful quantities */ sarg3 = sarg*sarg*sarg; /* XXX constant per model */ sbiarg = sqrt(here->MOS2tBulkPot); gammad = gamasd; dgdvbs = dgddvb; body = barg*barg*barg-sarg3; gdbdv = 2.0*gammad*(barg*barg*dbrgdb-sarg*sarg*dsrgdb); dodvbs = -factor+dgdvbs*sarg+gammad*dsrgdb; if (model->MOS2fastSurfaceStateDensity == 0.0) goto line400; if (OxideCap == 0.0) goto line410; dxndvb = 2.0*dgdvbs*dsrgdb+gammad*d2sdb2+dgddb2*sarg; dodvbs = dodvbs+vt*dxndvb; dxndvd = dgdvds*dsrgdb; dodvds = dgdvds*sarg+vt*dxndvd; /* * evaluate effective mobility and its derivatives */ line400: if (OxideCap <= 0.0) goto line410; udenom = vgst; tmp = model->MOS2critField * 100 /* cm/m */ * EPSSIL/ model->MOS2oxideCapFactor; if (udenom <= tmp) goto line410; ufact = exp(model->MOS2critFieldExp*log(tmp/udenom)); ueff = model->MOS2surfaceMobility * 1e-4 /*(m**2/cm**2) */ *ufact; dudvgs = -ufact*model->MOS2critFieldExp/udenom; dudvds = 0.0; dudvbs = model->MOS2critFieldExp*ufact*dodvbs/vgst; goto line500; line410: ufact = 1.0; ueff = model->MOS2surfaceMobility * 1e-4 /*(m**2/cm**2) */ ; dudvgs = 0.0; dudvds = 0.0; dudvbs = 0.0; /* * evaluate saturation voltage and its derivatives according to * grove-frohman equation */ line500: vgsx = lvgs; gammad = gamasd/eta; dgdvbs = dgddvb; if (model->MOS2fastSurfaceStateDensity != 0 && OxideCap != 0) { vgsx = MAX(lvgs,von); } if (gammad > 0) { gammd2 = gammad*gammad; argv = (vgsx-vbin)/eta+phiMinVbs; if (argv <= 0.0) { vdsat = 0.0; dsdvgs = 0.0; dsdvbs = 0.0; } else { arg = sqrt(1.0+4.0*argv/gammd2); vdsat = (vgsx-vbin)/eta+gammd2*(1.0-arg)/2.0; vdsat = MAX(vdsat,0.0); dsdvgs = (1.0-1.0/arg)/eta; dsdvbs = (gammad*(1.0-arg)+2.0*argv/(gammad*arg))/ eta*dgdvbs+1.0/arg+factor*dsdvgs; } } else { vdsat = (vgsx-vbin)/eta; vdsat = MAX(vdsat,0.0); dsdvgs = 1.0; dsdvbs = 0.0; } if (model->MOS2maxDriftVel > 0) { /* * evaluate saturation voltage and its derivatives * according to baum's theory of scattering velocity * saturation */ gammd2 = gammad*gammad; v1 = (vgsx-vbin)/eta+phiMinVbs; v2 = phiMinVbs; xv = model->MOS2maxDriftVel*EffectiveLength/ueff; a1 = gammad/0.75; b1 = -2.0*(v1+xv); c1 = -2.0*gammad*xv; d1 = 2.0*v1*(v2+xv)-v2*v2-4.0/3.0*gammad*sarg3; a = -b1; b = a1*c1-4.0*d1; c = -d1*(a1*a1-4.0*b1)-c1*c1; r = -a*a/3.0+b; s = 2.0*a*a*a/27.0-a*b/3.0+c; r3 = r*r*r; s2 = s*s; p = s2/4.0+r3/27.0; p0 = fabs(p); p2 = sqrt(p0); if (p < 0) { ro = sqrt(s2/4.0+p0); ro = log(ro)/3.0; ro = exp(ro); fi = atan(-2.0*p2/s); y3 = 2.0*ro*cos(fi/3.0)-a/3.0; } else { p3 = (-s/2.0+p2); p3 = exp(log(fabs(p3))/3.0); p4 = (-s/2.0-p2); p4 = exp(log(fabs(p4))/3.0); y3 = p3+p4-a/3.0; } iknt = 0; a3 = sqrt(a1*a1/4.0-b1+y3); b3 = sqrt(y3*y3/4.0-d1); for(i = 1;i<=4;i++) { a4[i-1] = a1/2.0+sig1[i-1]*a3; b4[i-1] = y3/2.0+sig2[i-1]*b3; delta4 = a4[i-1]*a4[i-1]/4.0-b4[i-1]; if (delta4 < 0) continue; iknt = iknt+1; tmp = sqrt(delta4); x4[iknt-1] = -a4[i-1]/2.0+tmp; iknt = iknt+1; x4[iknt-1] = -a4[i-1]/2.0-tmp; } jknt = 0; for(j = 1;j<=iknt;j++) { if (x4[j-1] <= 0) continue; /* XXX implement this sanely */ poly4[j-1] = x4[j-1]*x4[j-1]*x4[j-1]*x4[j-1]+a1*x4[j-1]* x4[j-1]*x4[j-1]; poly4[j-1] = poly4[j-1]+b1*x4[j-1]*x4[j-1]+c1*x4[j-1]+d1; if (fabs(poly4[j-1]) > 1.0e-6) continue; jknt = jknt+1; if (jknt <= 1) { xvalid = x4[j-1]; } if (x4[j-1] > xvalid) continue; xvalid = x4[j-1]; } if (jknt > 0) { vdsat = xvalid*xvalid-phiMinVbs; } } /* * evaluate effective channel length and its derivatives */ if (lvds != 0.0) { gammad = gamasd; if ((lvbs-vdsat) <= 0) { bsarg = sqrt(vdsat+phiMinVbs); dbsrdb = -0.5/bsarg; } else { sphi = sqrt(here->MOS2tPhi);/* added by HT 050523 */ sphi3 = here->MOS2tPhi*sphi;/* added by HT 050523 */ bsarg = sphi/(1.0+0.5*(lvbs-vdsat)/here->MOS2tPhi); dbsrdb = -0.5*bsarg*bsarg/sphi3; } bodys = bsarg*bsarg*bsarg-sarg3; gdbdvs = 2.0*gammad*(bsarg*bsarg*dbsrdb-sarg*sarg*dsrgdb); if (model->MOS2maxDriftVel <= 0) { if (model->MOS2substrateDoping == 0.0) goto line610; if (xlamda > 0.0) goto line610; argv = (lvds-vdsat)/4.0; sargv = sqrt(1.0+argv*argv); arg = sqrt(argv+sargv); xlfact = model->MOS2xd/(EffectiveLength*lvds); xlamda = xlfact*arg; dldsat = lvds*xlamda/(8.0*sargv); } else { argv = (vgsx-vbin)/eta-vdsat; xdv = model->MOS2xd/sqrt(model->MOS2channelCharge); xlv = model->MOS2maxDriftVel*xdv/(2.0*ueff); vqchan = argv-gammad*bsarg; dqdsat = -1.0+gammad*dbsrdb; vl = model->MOS2maxDriftVel*EffectiveLength; dfunds = vl*dqdsat-ueff*vqchan; dfundg = (vl-ueff*vdsat)/eta; dfundb = -vl*(1.0+dqdsat-factor/eta)+ueff* (gdbdvs-dgdvbs*bodys/1.5)/eta; dsdvgs = -dfundg/dfunds; dsdvbs = -dfundb/dfunds; if (model->MOS2substrateDoping == 0.0) goto line610; if (xlamda > 0.0) goto line610; argv = lvds-vdsat; argv = MAX(argv,0.0); xls = sqrt(xlv*xlv+argv); dldsat = xdv/(2.0*xls); xlfact = xdv/(EffectiveLength*lvds); xlamda = xlfact*(xls-xlv); dldsat = dldsat/EffectiveLength; } dldvgs = dldsat*dsdvgs; dldvds = -xlamda+dldsat; dldvbs = dldsat*dsdvbs; } else { line610: dldvgs = 0.0; dldvds = 0.0; dldvbs = 0.0; } /* * limit channel shortening at punch-through */ xwb = model->MOS2xd*sbiarg; xld = EffectiveLength-xwb; clfact = 1.0-xlamda*lvds; dldvds = -xlamda-dldvds; xleff = EffectiveLength*clfact; deltal = xlamda*lvds*EffectiveLength; if (model->MOS2substrateDoping == 0.0) xwb = 0.25e-6; if (xleff < xwb) { xleff = xwb/(1.0+(deltal-xld)/xwb); clfact = xleff/EffectiveLength; dfact = xleff*xleff/(xwb*xwb); dldvgs = dfact*dldvgs; dldvds = dfact*dldvds; dldvbs = dfact*dldvbs; } /* * evaluate effective beta (effective kp) */ beta1 = Beta*ufact/clfact; /* * test for mode of operation and branch appropriately */ gammad = gamasd; dgdvbs = dgddvb; if (lvds <= 1.0e-10) { if (lvgs <= von) { if ((model->MOS2fastSurfaceStateDensity == 0.0) || (OxideCap == 0.0)) { here->MOS2gds = 0.0; goto line1050; } here->MOS2gds = beta1*(von-vbin-gammad*sarg)*exp(argg* (lvgs-von)); goto line1050; } here->MOS2gds = beta1*(lvgs-vbin-gammad*sarg); goto line1050; } if (model->MOS2fastSurfaceStateDensity != 0 && OxideCap != 0) { if (lvgs > von) goto line900; } else { if (lvgs > vbin) goto line900; goto doneval; } if (lvgs > von) goto line900; /* * subthreshold region */ if (vdsat <= 0) { here->MOS2gds = 0.0; if (lvgs > vth) goto doneval; goto line1050; } vdson = MIN(vdsat,lvds); if (lvds > vdsat) { barg = bsarg; dbrgdb = dbsrdb; body = bodys; gdbdv = gdbdvs; } cdson = beta1*((von-vbin-eta*vdson*0.5)*vdson-gammad*body/1.5); didvds = beta1*(von-vbin-eta*vdson-gammad*barg); gdson = -cdson*dldvds/clfact-beta1*dgdvds*body/1.5; if (lvds < vdsat) gdson = gdson+didvds; gbson = -cdson*dldvbs/clfact+beta1* (dodvbs*vdson+factor*vdson-dgdvbs*body/1.5-gdbdv); if (lvds > vdsat) gbson = gbson+didvds*dsdvbs; expg = exp(argg*(lvgs-von)); cdrain = cdson*expg; gmw = cdrain*argg; here->MOS2gm = gmw; if (lvds > vdsat) here->MOS2gm = gmw+didvds*dsdvgs*expg; tmp = gmw*(lvgs-von)/xn; here->MOS2gds = gdson*expg-here->MOS2gm*dodvds-tmp*dxndvd; here->MOS2gmbs = gbson*expg-here->MOS2gm*dodvbs-tmp*dxndvb; goto doneval; line900: if (lvds <= vdsat) { /* * linear region */ cdrain = beta1*((lvgs-vbin-eta*lvds/2.0)*lvds-gammad*body/1.5); arg = cdrain*(dudvgs/ufact-dldvgs/clfact); here->MOS2gm = arg+beta1*lvds; arg = cdrain*(dudvds/ufact-dldvds/clfact); here->MOS2gds = arg+beta1*(lvgs-vbin-eta* lvds-gammad*barg-dgdvds*body/1.5); arg = cdrain*(dudvbs/ufact-dldvbs/clfact); here->MOS2gmbs = arg-beta1*(gdbdv+dgdvbs*body/1.5-factor*lvds); } else { /* * saturation region */ cdrain = beta1*((lvgs-vbin-eta* vdsat/2.0)*vdsat-gammad*bodys/1.5); arg = cdrain*(dudvgs/ufact-dldvgs/clfact); here->MOS2gm = arg+beta1*vdsat+beta1*(lvgs- vbin-eta*vdsat-gammad*bsarg)*dsdvgs; here->MOS2gds = -cdrain*dldvds/clfact-beta1*dgdvds*bodys/1.5; arg = cdrain*(dudvbs/ufact-dldvbs/clfact); here->MOS2gmbs = arg-beta1*(gdbdvs+dgdvbs*bodys/1.5-factor* vdsat)+beta1* (lvgs-vbin-eta*vdsat-gammad*bsarg)*dsdvbs; } /* * compute charges for "on" region */ goto doneval; /* * finish special cases */ line1050: cdrain = 0.0; here->MOS2gm = 0.0; here->MOS2gmbs = 0.0; /* * finished */ } doneval: here->MOS2von = model->MOS2type * von; here->MOS2vdsat = model->MOS2type * vdsat; /* * COMPUTE EQUIVALENT DRAIN CURRENT SOURCE */ here->MOS2cd=here->MOS2mode * cdrain - here->MOS2cbd; if (ckt->CKTmode & (MODETRAN | MODETRANOP|MODEINITSMSIG)) { /* * now we do the hard part of the bulk-drain and bulk-source * diode - we evaluate the non-linear capacitance and * charge * * the basic equations are not hard, but the implementation * is somewhat long in an attempt to avoid log/exponential * evaluations */ /* * charge storage elements * *.. bulk-drain and bulk-source depletion capacitances */ #ifdef CAPBYPASS if(((ckt->CKTmode & (MODEINITPRED | MODEINITTRAN) ) || fabs(delvbs) >= ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->MOS2vbs)))+ ckt->CKTvoltTol)|| senflag) #endif /*CAPBYPASS*/ { /* can't bypass the diode capacitance calculations */ if(here->MOS2Cbs != 0 || here->MOS2Cbssw != 0) { if (vbs < here->MOS2tDepCap){ arg=1-vbs/here->MOS2tBulkPot; /* * the following block looks somewhat long and messy, * but since most users use the default grading * coefficients of .5, and sqrt is MUCH faster than an * exp(log()) we use this special case code to buy time. * (as much as 10% of total job time!) */ if(model->MOS2bulkJctBotGradingCoeff == model->MOS2bulkJctSideGradingCoeff) { if(model->MOS2bulkJctBotGradingCoeff == .5) { sarg = sargsw = 1/sqrt(arg); } else { sarg = sargsw = exp(-model->MOS2bulkJctBotGradingCoeff* log(arg)); } } else { if(model->MOS2bulkJctBotGradingCoeff == .5) { sarg = 1/sqrt(arg); } else { sarg = exp(-model->MOS2bulkJctBotGradingCoeff* log(arg)); } if(model->MOS2bulkJctSideGradingCoeff == .5) { sargsw = 1/sqrt(arg); } else { sargsw =exp(-model->MOS2bulkJctSideGradingCoeff* log(arg)); } } *(ckt->CKTstate0 + here->MOS2qbs) = here->MOS2tBulkPot*(here->MOS2Cbs* (1-arg*sarg)/(1-model->MOS2bulkJctBotGradingCoeff) +here->MOS2Cbssw* (1-arg*sargsw)/ (1-model->MOS2bulkJctSideGradingCoeff)); here->MOS2capbs=here->MOS2Cbs*sarg+ here->MOS2Cbssw*sargsw; } else { *(ckt->CKTstate0 + here->MOS2qbs) = here->MOS2f4s + vbs*(here->MOS2f2s+vbs*(here->MOS2f3s/2)); here->MOS2capbs=here->MOS2f2s+here->MOS2f3s*vbs; } } else { *(ckt->CKTstate0 + here->MOS2qbs) = 0; here->MOS2capbs=0; } } #ifdef CAPBYPASS if(((ckt->CKTmode & (MODEINITPRED | MODEINITTRAN) ) || fabs(delvbd) >= ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0+here->MOS2vbd)))+ ckt->CKTvoltTol)|| senflag) #endif /*CAPBYPASS*/ /* can't bypass the diode capacitance calculations */ { if(here->MOS2Cbd != 0 || here->MOS2Cbdsw != 0 ) { if (vbd < here->MOS2tDepCap) { arg=1-vbd/here->MOS2tBulkPot; /* * the following block looks somewhat long and messy, * but since most users use the default grading * coefficients of .5, and sqrt is MUCH faster than an * exp(log()) we use this special case code to buy time. * (as much as 10% of total job time!) */ if(model->MOS2bulkJctBotGradingCoeff == .5 && model->MOS2bulkJctSideGradingCoeff == .5) { sarg = sargsw = 1/sqrt(arg); } else { if(model->MOS2bulkJctBotGradingCoeff == .5) { sarg = 1/sqrt(arg); } else { sarg = exp(-model->MOS2bulkJctBotGradingCoeff* log(arg)); } if(model->MOS2bulkJctSideGradingCoeff == .5) { sargsw = 1/sqrt(arg); } else { sargsw =exp(-model->MOS2bulkJctSideGradingCoeff* log(arg)); } } *(ckt->CKTstate0 + here->MOS2qbd) = here->MOS2tBulkPot*(here->MOS2Cbd* (1-arg*sarg) /(1-model->MOS2bulkJctBotGradingCoeff) +here->MOS2Cbdsw* (1-arg*sargsw) /(1-model->MOS2bulkJctSideGradingCoeff)); here->MOS2capbd=here->MOS2Cbd*sarg+ here->MOS2Cbdsw*sargsw; } else { *(ckt->CKTstate0 + here->MOS2qbd) = here->MOS2f4d + vbd * (here->MOS2f2d + vbd * here->MOS2f3d/2); here->MOS2capbd=here->MOS2f2d + vbd * here->MOS2f3d; } } else { *(ckt->CKTstate0 + here->MOS2qbd) = 0; here->MOS2capbd = 0; } } if(SenCond && (ckt->CKTsenInfo->SENmode==TRANSEN)) goto next2; if ( ckt->CKTmode & MODETRAN ) { /* (above only excludes tranop, since we're only at this * point if tran or tranop ) */ /* * calculate equivalent conductances and currents for * depletion capacitors */ /* integrate the capacitors and save results */ error = NIintegrate(ckt,&geq,&ceq,here->MOS2capbd, here->MOS2qbd); if(error) return(error); here->MOS2gbd += geq; here->MOS2cbd += *(ckt->CKTstate0 + here->MOS2cqbd); here->MOS2cd -= *(ckt->CKTstate0 + here->MOS2cqbd); error = NIintegrate(ckt,&geq,&ceq,here->MOS2capbs, here->MOS2qbs); if(error) return(error); here->MOS2gbs += geq; here->MOS2cbs += *(ckt->CKTstate0 + here->MOS2cqbs); } } if(SenCond) goto next2; /* * check convergence */ if ( (here->MOS2off == 0) || (!(ckt->CKTmode & (MODEINITFIX|MODEINITSMSIG))) ){ if (Check == 1) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; } } next2: *(ckt->CKTstate0 + here->MOS2vbs) = vbs; *(ckt->CKTstate0 + here->MOS2vbd) = vbd; *(ckt->CKTstate0 + here->MOS2vgs) = vgs; *(ckt->CKTstate0 + here->MOS2vds) = vds; /* * meyer's capacitor model */ if ( ckt->CKTmode & (MODETRAN|MODETRANOP|MODEINITSMSIG)) { /* * calculate meyer's capacitors */ if (here->MOS2mode > 0){ DEVqmeyer (vgs,vgd,vgb,von,vdsat, (ckt->CKTstate0 + here->MOS2capgs), (ckt->CKTstate0 + here->MOS2capgd), (ckt->CKTstate0 + here->MOS2capgb), here->MOS2tPhi,OxideCap); } else { DEVqmeyer (vgd,vgs,vgb,von,vdsat, (ckt->CKTstate0 + here->MOS2capgd), (ckt->CKTstate0 + here->MOS2capgs), (ckt->CKTstate0 + here->MOS2capgb), here->MOS2tPhi,OxideCap); } vgs1 = *(ckt->CKTstate1 + here->MOS2vgs); vgd1 = vgs1 - *(ckt->CKTstate1 + here->MOS2vds); vgb1 = vgs1 - *(ckt->CKTstate1 + here->MOS2vbs); if(ckt->CKTmode & MODETRANOP) { capgs = 2 * *(ckt->CKTstate0 + here->MOS2capgs)+ GateSourceOverlapCap; capgd = 2 * *(ckt->CKTstate0 + here->MOS2capgd)+ GateDrainOverlapCap; capgb = 2 * *(ckt->CKTstate0 + here->MOS2capgb)+ GateBulkOverlapCap; } else { capgs = *(ckt->CKTstate0 + here->MOS2capgs)+ *(ckt->CKTstate1 + here->MOS2capgs)+ GateSourceOverlapCap; capgd = *(ckt->CKTstate0 + here->MOS2capgd)+ *(ckt->CKTstate1 + here->MOS2capgd)+ GateDrainOverlapCap; capgb = *(ckt->CKTstate0 + here->MOS2capgb)+ *(ckt->CKTstate1 + here->MOS2capgb)+ GateBulkOverlapCap; } if(ckt->CKTsenInfo){ here->MOS2cgs = capgs; here->MOS2cgd = capgd; here->MOS2cgb = capgb; } /* * store small-signal parameters (for meyer's model) * all parameters already stored, so done... */ if(SenCond){ if(ckt->CKTsenInfo->SENmode & (DCSEN|ACSEN)){ continue; } } #ifndef PREDICTOR if(ckt->CKTmode & (MODEINITPRED | MODEINITTRAN) ) { *(ckt->CKTstate0 + here->MOS2qgs) = (1+xfact) * *(ckt->CKTstate1 + here->MOS2qgs) -xfact * *(ckt->CKTstate2 + here->MOS2qgs); *(ckt->CKTstate0 + here->MOS2qgd) = (1+xfact) * *(ckt->CKTstate1 + here->MOS2qgd) -xfact * *(ckt->CKTstate2 + here->MOS2qgd); *(ckt->CKTstate0 + here->MOS2qgb) = (1+xfact) * *(ckt->CKTstate1 + here->MOS2qgb) -xfact * *(ckt->CKTstate2 + here->MOS2qgb); } else { #endif /* PREDICTOR */ if(ckt->CKTmode & MODETRAN) { *(ckt->CKTstate0 + here->MOS2qgs) = (vgs-vgs1)*capgs + *(ckt->CKTstate1 + here->MOS2qgs) ; *(ckt->CKTstate0 + here->MOS2qgd) = (vgd-vgd1)*capgd + *(ckt->CKTstate1 + here->MOS2qgd) ; *(ckt->CKTstate0 + here->MOS2qgb) = (vgb-vgb1)*capgb + *(ckt->CKTstate1 + here->MOS2qgb) ; } else { /* TRANOP */ *(ckt->CKTstate0 + here->MOS2qgs) = capgs*vgs; *(ckt->CKTstate0 + here->MOS2qgd) = capgd*vgd; *(ckt->CKTstate0 + here->MOS2qgb) = capgb*vgb; } #ifndef PREDICTOR } #endif /* PREDICTOR */ } #ifndef NOBYPASS bypass: #endif /* NOBYPASS */ if(SenCond) continue; if((ckt->CKTmode & MODEINITTRAN) || (!(ckt->CKTmode & MODETRAN)) ) { /* initialize to zero charge conductances and current */ gcgs=0; ceqgs=0; gcgd=0; ceqgd=0; gcgb=0; ceqgb=0; } else { if(capgs == 0) *(ckt->CKTstate0 + here->MOS2cqgs) =0; if(capgd == 0) *(ckt->CKTstate0 + here->MOS2cqgd) =0; if(capgb == 0) *(ckt->CKTstate0 + here->MOS2cqgb) =0; /* * calculate equivalent conductances and currents for * meyer"s capacitors */ error = NIintegrate(ckt,&gcgs,&ceqgs,capgs,here->MOS2qgs); if(error) return(error); error = NIintegrate(ckt,&gcgd,&ceqgd,capgd,here->MOS2qgd); if(error) return(error); error = NIintegrate(ckt,&gcgb,&ceqgb,capgb,here->MOS2qgb); if(error) return(error); ceqgs=ceqgs-gcgs*vgs+ckt->CKTag[0]* *(ckt->CKTstate0 + here->MOS2qgs); ceqgd=ceqgd-gcgd*vgd+ckt->CKTag[0]* *(ckt->CKTstate0 + here->MOS2qgd); ceqgb=ceqgb-gcgb*vgb+ckt->CKTag[0]* *(ckt->CKTstate0 + here->MOS2qgb); } /* * store charge storage info for meyer's cap in lx table */ /* * load current vector */ ceqbs = model->MOS2type * (here->MOS2cbs-(here->MOS2gbs)*vbs); ceqbd = model->MOS2type * (here->MOS2cbd-(here->MOS2gbd)*vbd); if (here->MOS2mode >= 0) { xnrm=1; xrev=0; cdreq=model->MOS2type*(cdrain-here->MOS2gds*vds- here->MOS2gm*vgs-here->MOS2gmbs*vbs); } else { xnrm=0; xrev=1; cdreq = -(model->MOS2type)*(cdrain-here->MOS2gds*(-vds)- here->MOS2gm*vgd-here->MOS2gmbs*vbd); } *(ckt->CKTrhs + here->MOS2gNode) -= model->MOS2type * (ceqgs + ceqgb + ceqgd); *(ckt->CKTrhs + here->MOS2bNode) -= (ceqbs+ceqbd-model->MOS2type * ceqgb); *(ckt->CKTrhs + here->MOS2dNodePrime) += ceqbd - cdreq + model->MOS2type * ceqgd; *(ckt->CKTrhs + here->MOS2sNodePrime) += cdreq + ceqbs + model->MOS2type * ceqgs; #if 0 printf(" loading %s at time %g\n", here->MOS2name, ckt->CKTtime); printf("%g %g %g %g %g\n", here->MOS2drainConductance, gcgd+gcgs+gcgb, here->MOS2sourceConductance, here->MOS2gbd, here->MOS2gbs); printf("%g %g %g %g %g\n", -gcgb, 0.0, 0.0, here->MOS2gds, here->MOS2gm); printf("%g %g %g %g %g\n", here->MOS2gds, here->MOS2gmbs, gcgd, -gcgs, -gcgd); printf("%g %g %g %g %g\n", -gcgs, -gcgd, 0.0, -gcgs, 0.0); #endif /* * load y matrix */ *(here->MOS2DdPtr) += (here->MOS2drainConductance); *(here->MOS2GgPtr) += gcgd+gcgs+gcgb; *(here->MOS2SsPtr) += (here->MOS2sourceConductance); *(here->MOS2BbPtr) += (here->MOS2gbd+here->MOS2gbs+gcgb); *(here->MOS2DPdpPtr) += here->MOS2drainConductance+here->MOS2gds+ here->MOS2gbd+xrev*(here->MOS2gm+here->MOS2gmbs)+gcgd; *(here->MOS2SPspPtr) += here->MOS2sourceConductance+here->MOS2gds+ here->MOS2gbs+xnrm*(here->MOS2gm+here->MOS2gmbs)+gcgs; *(here->MOS2DdpPtr) -= here->MOS2drainConductance; *(here->MOS2GbPtr) -= gcgb; *(here->MOS2GdpPtr) -= gcgd; *(here->MOS2GspPtr) -= gcgs; *(here->MOS2SspPtr) -= here->MOS2sourceConductance; *(here->MOS2BgPtr) -= gcgb; *(here->MOS2BdpPtr) -= here->MOS2gbd; *(here->MOS2BspPtr) -= here->MOS2gbs; *(here->MOS2DPdPtr) -= here->MOS2drainConductance; *(here->MOS2DPgPtr) += ((xnrm-xrev)*here->MOS2gm-gcgd); *(here->MOS2DPbPtr) += (-here->MOS2gbd+(xnrm-xrev)*here->MOS2gmbs); *(here->MOS2DPspPtr) -= here->MOS2gds+xnrm*(here->MOS2gm+ here->MOS2gmbs); *(here->MOS2SPgPtr) -= (xnrm-xrev)*here->MOS2gm+gcgs; *(here->MOS2SPsPtr) -= here->MOS2sourceConductance; *(here->MOS2SPbPtr) -= here->MOS2gbs+(xnrm-xrev)*here->MOS2gmbs; *(here->MOS2SPdpPtr) -= here->MOS2gds+xrev*(here->MOS2gm+ here->MOS2gmbs); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v32/0000755000175000017500000000000013546075722020533 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/bsim3v32/b3v32acld.c0000644000175000017500000003627113546075722022373 0ustar carstencarsten/**** BSIM3v3.2.4, Released by Xuemei Xi 12/14/2001 ****/ /********** * Copyright 2001 Regents of the University of California. All rights reserved. * File: b3acld.c of BSIM3v3.2.4 * Author: 1995 Min-Chie Jeng and Mansun Chan * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi * Modified by Paolo Nenzi 2002 and Dietmar Warning 2003 **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3v32def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3v32acLoad (GENmodel *inModel, CKTcircuit *ckt) { BSIM3v32model *model = (BSIM3v32model*)inModel; BSIM3v32instance *here; double xcggb, xcgdb, xcgsb, xcbgb, xcbdb, xcbsb, xcddb, xcssb, xcdgb; double gdpr, gspr, gds, gbd, gbs, capbd, capbs, xcsgb, xcdsb, xcsdb; double cggb, cgdb, cgsb, cbgb, cbdb, cbsb, cddb, cdgb, cdsb, omega; double GSoverlapCap, GDoverlapCap, GBoverlapCap, FwdSum, RevSum, Gm, Gmbs; double dxpart, sxpart, xgtg, xgtd, xgts, xgtb; double xcqgb = 0.0, xcqdb = 0.0, xcqsb = 0.0, xcqbb = 0.0; double gbspsp, gbbdp, gbbsp, gbspg, gbspb; double gbspdp, gbdpdp, gbdpg, gbdpb, gbdpsp; double ddxpart_dVd, ddxpart_dVg, ddxpart_dVb, ddxpart_dVs; double dsxpart_dVd, dsxpart_dVg, dsxpart_dVb, dsxpart_dVs; double T1, CoxWL, qcheq, Cdg, Cdd, Cds, Csg, Csd, Css; double ScalingFactor = 1.0e-9; double m; omega = ckt->CKTomega; for (; model != NULL; model = BSIM3v32nextModel(model)) { for (here = BSIM3v32instances(model); here!= NULL; here = BSIM3v32nextInstance(here)) { if (here->BSIM3v32mode >= 0) { Gm = here->BSIM3v32gm; Gmbs = here->BSIM3v32gmbs; FwdSum = Gm + Gmbs; RevSum = 0.0; gbbdp = -here->BSIM3v32gbds; gbbsp = here->BSIM3v32gbds + here->BSIM3v32gbgs + here->BSIM3v32gbbs; gbdpg = here->BSIM3v32gbgs; gbdpb = here->BSIM3v32gbbs; gbdpdp = here->BSIM3v32gbds; gbdpsp = -(gbdpg + gbdpb + gbdpdp); gbspdp = 0.0; gbspg = 0.0; gbspb = 0.0; gbspsp = 0.0; if (here->BSIM3v32nqsMod == 0) { cggb = here->BSIM3v32cggb; cgsb = here->BSIM3v32cgsb; cgdb = here->BSIM3v32cgdb; cbgb = here->BSIM3v32cbgb; cbsb = here->BSIM3v32cbsb; cbdb = here->BSIM3v32cbdb; cdgb = here->BSIM3v32cdgb; cdsb = here->BSIM3v32cdsb; cddb = here->BSIM3v32cddb; xgtg = xgtd = xgts = xgtb = 0.0; sxpart = 0.6; dxpart = 0.4; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { cggb = cgdb = cgsb = 0.0; cbgb = cbdb = cbsb = 0.0; cdgb = cddb = cdsb = 0.0; xgtg = here->BSIM3v32gtg; xgtd = here->BSIM3v32gtd; xgts = here->BSIM3v32gts; xgtb = here->BSIM3v32gtb; xcqgb = here->BSIM3v32cqgb * omega; xcqdb = here->BSIM3v32cqdb * omega; xcqsb = here->BSIM3v32cqsb * omega; xcqbb = here->BSIM3v32cqbb * omega; CoxWL = model->BSIM3v32cox * here->pParam->BSIM3v32weffCV * here->pParam->BSIM3v32leffCV; qcheq = -(here->BSIM3v32qgate + here->BSIM3v32qbulk); if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM3v32xpart < 0.5) { dxpart = 0.4; } else if (model->BSIM3v32xpart > 0.5) { dxpart = 0.0; } else { dxpart = 0.5; } ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; } else { dxpart = here->BSIM3v32qdrn / qcheq; Cdd = here->BSIM3v32cddb; Csd = -(here->BSIM3v32cgdb + here->BSIM3v32cddb + here->BSIM3v32cbdb); ddxpart_dVd = (Cdd - dxpart * (Cdd + Csd)) / qcheq; Cdg = here->BSIM3v32cdgb; Csg = -(here->BSIM3v32cggb + here->BSIM3v32cdgb + here->BSIM3v32cbgb); ddxpart_dVg = (Cdg - dxpart * (Cdg + Csg)) / qcheq; Cds = here->BSIM3v32cdsb; Css = -(here->BSIM3v32cgsb + here->BSIM3v32cdsb + here->BSIM3v32cbsb); ddxpart_dVs = (Cds - dxpart * (Cds + Css)) / qcheq; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); } sxpart = 1.0 - dxpart; dsxpart_dVd = -ddxpart_dVd; dsxpart_dVg = -ddxpart_dVg; dsxpart_dVs = -ddxpart_dVs; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); } } else { Gm = -here->BSIM3v32gm; Gmbs = -here->BSIM3v32gmbs; FwdSum = 0.0; RevSum = -(Gm + Gmbs); gbbsp = -here->BSIM3v32gbds; gbbdp = here->BSIM3v32gbds + here->BSIM3v32gbgs + here->BSIM3v32gbbs; gbdpg = 0.0; gbdpsp = 0.0; gbdpb = 0.0; gbdpdp = 0.0; gbspg = here->BSIM3v32gbgs; gbspsp = here->BSIM3v32gbds; gbspb = here->BSIM3v32gbbs; gbspdp = -(gbspg + gbspsp + gbspb); if (here->BSIM3v32nqsMod == 0) { cggb = here->BSIM3v32cggb; cgsb = here->BSIM3v32cgdb; cgdb = here->BSIM3v32cgsb; cbgb = here->BSIM3v32cbgb; cbsb = here->BSIM3v32cbdb; cbdb = here->BSIM3v32cbsb; cdgb = -(here->BSIM3v32cdgb + cggb + cbgb); cdsb = -(here->BSIM3v32cddb + cgsb + cbsb); cddb = -(here->BSIM3v32cdsb + cgdb + cbdb); xgtg = xgtd = xgts = xgtb = 0.0; sxpart = 0.4; dxpart = 0.6; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { cggb = cgdb = cgsb = 0.0; cbgb = cbdb = cbsb = 0.0; cdgb = cddb = cdsb = 0.0; xgtg = here->BSIM3v32gtg; xgtd = here->BSIM3v32gts; xgts = here->BSIM3v32gtd; xgtb = here->BSIM3v32gtb; xcqgb = here->BSIM3v32cqgb * omega; xcqdb = here->BSIM3v32cqsb * omega; xcqsb = here->BSIM3v32cqdb * omega; xcqbb = here->BSIM3v32cqbb * omega; CoxWL = model->BSIM3v32cox * here->pParam->BSIM3v32weffCV * here->pParam->BSIM3v32leffCV; qcheq = -(here->BSIM3v32qgate + here->BSIM3v32qbulk); if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM3v32xpart < 0.5) { sxpart = 0.4; } else if (model->BSIM3v32xpart > 0.5) { sxpart = 0.0; } else { sxpart = 0.5; } dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { sxpart = here->BSIM3v32qdrn / qcheq; Css = here->BSIM3v32cddb; Cds = -(here->BSIM3v32cgdb + here->BSIM3v32cddb + here->BSIM3v32cbdb); dsxpart_dVs = (Css - sxpart * (Css + Cds)) / qcheq; Csg = here->BSIM3v32cdgb; Cdg = -(here->BSIM3v32cggb + here->BSIM3v32cdgb + here->BSIM3v32cbgb); dsxpart_dVg = (Csg - sxpart * (Csg + Cdg)) / qcheq; Csd = here->BSIM3v32cdsb; Cdd = -(here->BSIM3v32cgsb + here->BSIM3v32cdsb + here->BSIM3v32cbsb); dsxpart_dVd = (Csd - sxpart * (Csd + Cdd)) / qcheq; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); } dxpart = 1.0 - sxpart; ddxpart_dVd = -dsxpart_dVd; ddxpart_dVg = -dsxpart_dVg; ddxpart_dVs = -dsxpart_dVs; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); } } T1 = *(ckt->CKTstate0 + here->BSIM3v32qdef) * here->BSIM3v32gtau; gdpr = here->BSIM3v32drainConductance; gspr = here->BSIM3v32sourceConductance; gds = here->BSIM3v32gds; gbd = here->BSIM3v32gbd; gbs = here->BSIM3v32gbs; capbd = here->BSIM3v32capbd; capbs = here->BSIM3v32capbs; GSoverlapCap = here->BSIM3v32cgso; GDoverlapCap = here->BSIM3v32cgdo; GBoverlapCap = here->pParam->BSIM3v32cgbo; xcdgb = (cdgb - GDoverlapCap) * omega; xcddb = (cddb + capbd + GDoverlapCap) * omega; xcdsb = cdsb * omega; xcsgb = -(cggb + cbgb + cdgb + GSoverlapCap) * omega; xcsdb = -(cgdb + cbdb + cddb) * omega; xcssb = (capbs + GSoverlapCap - (cgsb + cbsb + cdsb)) * omega; xcggb = (cggb + GDoverlapCap + GSoverlapCap + GBoverlapCap) * omega; xcgdb = (cgdb - GDoverlapCap ) * omega; xcgsb = (cgsb - GSoverlapCap) * omega; xcbgb = (cbgb - GBoverlapCap) * omega; xcbdb = (cbdb - capbd ) * omega; xcbsb = (cbsb - capbs ) * omega; m = here->BSIM3v32m; *(here->BSIM3v32GgPtr + 1) += m * xcggb; *(here->BSIM3v32BbPtr + 1) -= m * (xcbgb + xcbdb + xcbsb); *(here->BSIM3v32DPdpPtr + 1) += m * xcddb; *(here->BSIM3v32SPspPtr + 1) += m * xcssb; *(here->BSIM3v32GbPtr + 1) -= m * (xcggb + xcgdb + xcgsb); *(here->BSIM3v32GdpPtr + 1) += m * xcgdb; *(here->BSIM3v32GspPtr + 1) += m * xcgsb; *(here->BSIM3v32BgPtr + 1) += m * xcbgb; *(here->BSIM3v32BdpPtr + 1) += m * xcbdb; *(here->BSIM3v32BspPtr + 1) += m * xcbsb; *(here->BSIM3v32DPgPtr + 1) += m * xcdgb; *(here->BSIM3v32DPbPtr + 1) -= m * (xcdgb + xcddb + xcdsb); *(here->BSIM3v32DPspPtr + 1) += m * xcdsb; *(here->BSIM3v32SPgPtr + 1) += m * xcsgb; *(here->BSIM3v32SPbPtr + 1) -= m * (xcsgb + xcsdb + xcssb); *(here->BSIM3v32SPdpPtr + 1) += m * xcsdb; *(here->BSIM3v32DdPtr) += m * gdpr; *(here->BSIM3v32SsPtr) += m * gspr; *(here->BSIM3v32BbPtr) += m * (gbd + gbs - here->BSIM3v32gbbs); *(here->BSIM3v32DPdpPtr) += m * (gdpr + gds + gbd + RevSum + dxpart * xgtd + T1 * ddxpart_dVd + gbdpdp); *(here->BSIM3v32SPspPtr) += m * (gspr + gds + gbs + FwdSum + sxpart * xgts + T1 * dsxpart_dVs + gbspsp); *(here->BSIM3v32DdpPtr) -= m * gdpr; *(here->BSIM3v32SspPtr) -= m * gspr; *(here->BSIM3v32BgPtr) -= m * here->BSIM3v32gbgs; *(here->BSIM3v32BdpPtr) -= m * (gbd - gbbdp); *(here->BSIM3v32BspPtr) -= m * (gbs - gbbsp); *(here->BSIM3v32DPdPtr) -= m * gdpr; *(here->BSIM3v32DPgPtr) += m * (Gm + dxpart * xgtg + T1 * ddxpart_dVg + gbdpg); *(here->BSIM3v32DPbPtr) -= m * (gbd - Gmbs - dxpart * xgtb - T1 * ddxpart_dVb - gbdpb); *(here->BSIM3v32DPspPtr) -= m * (gds + FwdSum - dxpart * xgts - T1 * ddxpart_dVs - gbdpsp); *(here->BSIM3v32SPgPtr) -= m * (Gm - sxpart * xgtg - T1 * dsxpart_dVg - gbspg); *(here->BSIM3v32SPsPtr) -= m * gspr; *(here->BSIM3v32SPbPtr) -= m * (gbs + Gmbs - sxpart * xgtb - T1 * dsxpart_dVb - gbspb); *(here->BSIM3v32SPdpPtr) -= m * (gds + RevSum - sxpart * xgtd - T1 * dsxpart_dVd - gbspdp); *(here->BSIM3v32GgPtr) -= m * xgtg; *(here->BSIM3v32GbPtr) -= m * xgtb; *(here->BSIM3v32GdpPtr) -= m * xgtd; *(here->BSIM3v32GspPtr) -= m * xgts; if (here->BSIM3v32nqsMod) { *(here->BSIM3v32QqPtr + 1) += m * omega * ScalingFactor; *(here->BSIM3v32QgPtr + 1) -= m * xcqgb; *(here->BSIM3v32QdpPtr + 1) -= m * xcqdb; *(here->BSIM3v32QspPtr + 1) -= m * xcqsb; *(here->BSIM3v32QbPtr + 1) -= m * xcqbb; *(here->BSIM3v32QqPtr) += m * here->BSIM3v32gtau; *(here->BSIM3v32DPqPtr) += m * (dxpart * here->BSIM3v32gtau); *(here->BSIM3v32SPqPtr) += m * (sxpart * here->BSIM3v32gtau); *(here->BSIM3v32GqPtr) -= m * here->BSIM3v32gtau; *(here->BSIM3v32QgPtr) += m * xgtg; *(here->BSIM3v32QdpPtr) += m * xgtd; *(here->BSIM3v32QspPtr) += m * xgts; *(here->BSIM3v32QbPtr) += m * xgtb; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v32/B3TERMS_OF_USE0000644000175000017500000000247513546075722022645 0ustar carstencarsten The terms under which the software is provided are as the following. Software is distributed as is, completely without warranty or service support. The University of California and its employees are not liable for the condition or performance of the software. The University owns the copyright but shall not be liable for any infringement of copyright or other proprietary rights brought by third parties against the users of the software. The University of California hereby disclaims all implied warranties. The University of California grants the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions: 1. The users agree not to charge for the University of California code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge the UC Berkeley BSIM Research Group that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to obey all U.S. Government restrictions governing redistribution or export of the software. 4. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others. tmpk8ny_4pz/src/spicelib/devices/bsim3v32/Makefile.am0000644000175000017500000000113713546075722022571 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libbsim3v32.la libbsim3v32_la_SOURCES = \ b3v32.c \ b3v32acld.c \ b3v32ask.c \ b3v32check.c \ b3v32cvtest.c \ b3v32getic.c \ b3v32ld.c \ b3v32mask.c \ b3v32mdel.c \ b3v32mpar.c \ b3v32noi.c \ b3v32par.c \ b3v32pzld.c \ b3v32set.c \ b3v32soachk.c \ b3v32temp.c \ b3v32trunc.c \ bsim3v32def.h \ bsim3v32ext.h \ bsim3v32init.c \ bsim3v32init.h \ bsim3v32itf.h AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in EXTRA_DIST = B3TERMS_OF_USE tmpk8ny_4pz/src/spicelib/devices/bsim3v32/b3v32getic.c0000644000175000017500000000257513546075722022563 0ustar carstencarsten/**** BSIM3v3.2.4, Released by Xuemei Xi 12/14/2001 ****/ /********** * Copyright 2001 Regents of the University of California. All rights reserved. * File: b3getic.c of BSIM3v3.2.4 * Author: 1995 Min-Chie Jeng and Mansun Chan. * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3v32def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3v32getic (GENmodel *inModel, CKTcircuit *ckt) { BSIM3v32model *model = (BSIM3v32model*)inModel; BSIM3v32instance *here; for (; model ; model = BSIM3v32nextModel(model)) { for (here = BSIM3v32instances(model); here; here = BSIM3v32nextInstance(here)) { if (!here->BSIM3v32icVBSGiven) { here->BSIM3v32icVBS = *(ckt->CKTrhs + here->BSIM3v32bNode) - *(ckt->CKTrhs + here->BSIM3v32sNode); } if (!here->BSIM3v32icVDSGiven) { here->BSIM3v32icVDS = *(ckt->CKTrhs + here->BSIM3v32dNode) - *(ckt->CKTrhs + here->BSIM3v32sNode); } if (!here->BSIM3v32icVGSGiven) { here->BSIM3v32icVGS = *(ckt->CKTrhs + here->BSIM3v32gNode) - *(ckt->CKTrhs + here->BSIM3v32sNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v32/b3v32cvtest.c0000644000175000017500000001034213546075722022767 0ustar carstencarsten/**** BSIM3v3.2.4, Released by Xuemei Xi 12/14/2001 ****/ /********** * Copyright 2001 Regents of the University of California. All rights reserved. * File: b3cvtest.c of BSIM3v3.2.4 * Author: 1995 Min-Chie Jeng and Mansun Chan * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi * Modified by Paolo Nenzi 2002 **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3v32def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3v32convTest (GENmodel *inModel, CKTcircuit *ckt) { BSIM3v32model *model = (BSIM3v32model*)inModel; BSIM3v32instance *here; double delvbd, delvbs, delvds, delvgd, delvgs, vbd, vbs, vds; double cbd, cbhat, cbs, cd, cdhat, tol, vgd, vgdo, vgs; /* loop through all the BSIM3v32 device models */ for (; model != NULL; model = BSIM3v32nextModel(model)) { /* loop through all the instances of the model */ for (here = BSIM3v32instances(model); here != NULL ; here=BSIM3v32nextInstance(here)) { vbs = model->BSIM3v32type * (*(ckt->CKTrhsOld+here->BSIM3v32bNode) - *(ckt->CKTrhsOld+here->BSIM3v32sNodePrime)); vgs = model->BSIM3v32type * (*(ckt->CKTrhsOld+here->BSIM3v32gNode) - *(ckt->CKTrhsOld+here->BSIM3v32sNodePrime)); vds = model->BSIM3v32type * (*(ckt->CKTrhsOld+here->BSIM3v32dNodePrime) - *(ckt->CKTrhsOld+here->BSIM3v32sNodePrime)); vbd = vbs - vds; vgd = vgs - vds; vgdo = *(ckt->CKTstate0 + here->BSIM3v32vgs) - *(ckt->CKTstate0 + here->BSIM3v32vds); delvbs = vbs - *(ckt->CKTstate0 + here->BSIM3v32vbs); delvbd = vbd - *(ckt->CKTstate0 + here->BSIM3v32vbd); delvgs = vgs - *(ckt->CKTstate0 + here->BSIM3v32vgs); delvds = vds - *(ckt->CKTstate0 + here->BSIM3v32vds); delvgd = vgd-vgdo; cd = here->BSIM3v32cd - here->BSIM3v32cbd; if (here->BSIM3v32mode >= 0) { cd += here->BSIM3v32csub; cdhat = cd - here->BSIM3v32gbd * delvbd + (here->BSIM3v32gmbs + here->BSIM3v32gbbs) * delvbs + (here->BSIM3v32gm + here->BSIM3v32gbgs) * delvgs + (here->BSIM3v32gds + here->BSIM3v32gbds) * delvds; } else { cdhat = cd + (here->BSIM3v32gmbs - here->BSIM3v32gbd) * delvbd + here->BSIM3v32gm * delvgd - here->BSIM3v32gds * delvds; } /* * check convergence */ if ((here->BSIM3v32off == 0) || (!(ckt->CKTmode & MODEINITFIX))) { tol = ckt->CKTreltol * MAX(fabs(cdhat), fabs(cd)) + ckt->CKTabstol; if (fabs(cdhat - cd) >= tol) { ckt->CKTnoncon++; return(OK); } cbs = here->BSIM3v32cbs; cbd = here->BSIM3v32cbd; if (here->BSIM3v32mode >= 0) { cbhat = cbs + cbd - here->BSIM3v32csub + here->BSIM3v32gbd * delvbd + (here->BSIM3v32gbs - here->BSIM3v32gbbs) * delvbs - here->BSIM3v32gbgs * delvgs - here->BSIM3v32gbds * delvds; } else { cbhat = cbs + cbd - here->BSIM3v32csub + here->BSIM3v32gbs * delvbs + (here->BSIM3v32gbd - here->BSIM3v32gbbs) * delvbd - here->BSIM3v32gbgs * delvgd + here->BSIM3v32gbds * delvds; } tol = ckt->CKTreltol * MAX(fabs(cbhat), fabs(cbs + cbd - here->BSIM3v32csub)) + ckt->CKTabstol; if (fabs(cbhat - (cbs + cbd - here->BSIM3v32csub)) > tol) { ckt->CKTnoncon++; return(OK); } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v32/b3v32noi.c0000644000175000017500000005273613546075722022261 0ustar carstencarsten/**** BSIM3v3.2.4, Released by Xuemei Xi 12/21/2001 ****/ /********** * Copyright 2001 Regents of the University of California. All rights reserved. * File: b3noi.c of BSIM3v3.2.4 * Author: 1995 Gary W. Ng and Min-Chie Jeng. * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi * Modified by Xuemei Xi, 10/05, 12/21, 2001. * Modified bt Paolo Nenzi 2002 and Dietmar Warning 2003 **********/ #include "ngspice/ngspice.h" #include "bsim3v32def.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" #include "ngspice/const.h" /* jwan */ /* * BSIM3v32noise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with MOSFET's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the MOSFET's is summed with the variable "OnDens". */ /* Channel thermal and flicker noises are calculated based on the value of model->BSIM3v32noiMod. If model->BSIM3v32noiMod = 1, Channel thermal noise = SPICE2 model Flicker noise = SPICE2 model If model->BSIM3v32noiMod = 2, Channel thermal noise = BSIM3v32 model Flicker noise = BSIM3v32 model If model->BSIM3v32noiMod = 3, Channel thermal noise = SPICE2 model Flicker noise = BSIM3v32 model If model->BSIM3v32noiMod = 4, Channel thermal noise = BSIM3v32 model Flicker noise = SPICE2 model */ /* * The StrongInversionNoiseEval function has been modified in * the release 3.2.4 of BSIM3v32 model. To accomodate both the old * and the new code, I have renamed according to the following: * * * BSIM3v3.2.4 -> StrongInversionNoiseEvalNew * Previous -> StrongInversionNoiseEvalOld * * 2002 Paolo Nenzi */ /* * JX: 1/f noise model is smoothed out 12/18/01. */ static double StrongInversionNoiseEvalNew(double Vds, BSIM3v32model *model, BSIM3v32instance *here, double freq, double temp) { struct bsim3v32SizeDependParam *pParam; double cd, esat, DelClm, EffFreq, N0, Nl; double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi; pParam = here->pParam; cd = fabs(here->BSIM3v32cd); esat = 2.0 * pParam->BSIM3v32vsattemp / here->BSIM3v32ueff; if(model->BSIM3v32em<=0.0) DelClm = 0.0; else { T0 = ((((Vds - here->BSIM3v32Vdseff) / pParam->BSIM3v32litl) + model->BSIM3v32em) / esat); DelClm = pParam->BSIM3v32litl * log (MAX(T0, N_MINLOG)); } EffFreq = pow(freq, model->BSIM3v32ef); T1 = CHARGE * CHARGE * 8.62e-5 * cd * temp * here->BSIM3v32ueff; T2 = 1.0e8 * EffFreq * here->BSIM3v32Abulk * model->BSIM3v32cox * pParam->BSIM3v32leff * pParam->BSIM3v32leff; N0 = model->BSIM3v32cox * here->BSIM3v32Vgsteff / CHARGE; Nl = model->BSIM3v32cox * here->BSIM3v32Vgsteff * (1.0 - here->BSIM3v32AbovVgst2Vtm * here->BSIM3v32Vdseff) / CHARGE; T3 = model->BSIM3v32oxideTrapDensityA * log(MAX(((N0 + 2.0e14) / (Nl + 2.0e14)), N_MINLOG)); T4 = model->BSIM3v32oxideTrapDensityB * (N0 - Nl); T5 = model->BSIM3v32oxideTrapDensityC * 0.5 * (N0 * N0 - Nl * Nl); T6 = 8.62e-5 * temp * cd * cd; T7 = 1.0e8 * EffFreq * pParam->BSIM3v32leff * pParam->BSIM3v32leff * pParam->BSIM3v32weff; T8 = model->BSIM3v32oxideTrapDensityA + model->BSIM3v32oxideTrapDensityB * Nl + model->BSIM3v32oxideTrapDensityC * Nl * Nl; T9 = (Nl + 2.0e14) * (Nl + 2.0e14); Ssi = T1 / T2 * (T3 + T4 + T5) + T6 / T7 * DelClm * T8 / T9; return Ssi; } /* * The code for releases: BSIM3V32, BSIM3V322, BSIM3V323 * follows */ static double StrongInversionNoiseEvalOld(double vgs, double vds, BSIM3v32model *model, BSIM3v32instance *here, double freq, double temp) { struct bsim3v32SizeDependParam *pParam; double cd, esat, DelClm, EffFreq, N0, Nl, Vgst; double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi; pParam = here->pParam; cd = fabs (here->BSIM3v32cd); /* Added revision dependent code */ if (model->BSIM3v32intVersion < BSIM3v32V323) { if (vds > here->BSIM3v32vdsat) { esat = 2.0 * pParam->BSIM3v32vsattemp / here->BSIM3v32ueff; T0 = ((((vds - here->BSIM3v32vdsat) / pParam->BSIM3v32litl) + model->BSIM3v32em) / esat); DelClm = pParam->BSIM3v32litl * log (MAX (T0, N_MINLOG)); } else DelClm = 0.0; } else { if (model->BSIM3v32em <= 0.0) /* flicker noise modified -JX */ DelClm = 0.0; else if (vds > here->BSIM3v32vdsat) { esat = 2.0 * pParam->BSIM3v32vsattemp / here->BSIM3v32ueff; T0 = ((((vds - here->BSIM3v32vdsat) / pParam->BSIM3v32litl) + model->BSIM3v32em) / esat); DelClm = pParam->BSIM3v32litl * log (MAX (T0, N_MINLOG)); } else DelClm = 0.0; } EffFreq = pow (freq, model->BSIM3v32ef); T1 = CHARGE * CHARGE * 8.62e-5 * cd * temp * here->BSIM3v32ueff; T2 = 1.0e8 * EffFreq * model->BSIM3v32cox * pParam->BSIM3v32leff * pParam->BSIM3v32leff; Vgst = vgs - here->BSIM3v32von; N0 = model->BSIM3v32cox * Vgst / CHARGE; if (N0 < 0.0) N0 = 0.0; Nl = model->BSIM3v32cox * (Vgst - MIN (vds, here->BSIM3v32vdsat)) / CHARGE; if (Nl < 0.0) Nl = 0.0; T3 = model->BSIM3v32oxideTrapDensityA * log (MAX (((N0 + 2.0e14) / (Nl + 2.0e14)), N_MINLOG)); T4 = model->BSIM3v32oxideTrapDensityB * (N0 - Nl); T5 = model->BSIM3v32oxideTrapDensityC * 0.5 * (N0 * N0 - Nl * Nl); T6 = 8.62e-5 * temp * cd * cd; T7 = 1.0e8 * EffFreq * pParam->BSIM3v32leff * pParam->BSIM3v32leff * pParam->BSIM3v32weff; T8 = model->BSIM3v32oxideTrapDensityA + model->BSIM3v32oxideTrapDensityB * Nl + model->BSIM3v32oxideTrapDensityC * Nl * Nl; T9 = (Nl + 2.0e14) * (Nl + 2.0e14); Ssi = T1 / T2 * (T3 + T4 + T5) + T6 / T7 * DelClm * T8 / T9; return Ssi; } int BSIM3v32noise (int mode, int operation, GENmodel *inModel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; BSIM3v32model *model = (BSIM3v32model *)inModel; BSIM3v32instance *here; struct bsim3v32SizeDependParam *pParam; double tempOnoise; double tempInoise; double noizDens[BSIM3v32NSRCS]; double lnNdens[BSIM3v32NSRCS]; double vgs, vds, Slimit; double T1, T10, T11; double Ssi, Swi; double m; int i; /* define the names of the noise sources */ static char *BSIM3v32nNames[BSIM3v32NSRCS] = { /* Note that we have to keep the order */ ".rd", /* noise due to rd */ /* consistent with the index definitions */ ".rs", /* noise due to rs */ /* in BSIM3v32defs.h */ ".id", /* noise due to id */ ".1overf", /* flicker (1/f) noise */ "" /* total transistor noise */ }; for (; model != NULL; model = BSIM3v32nextModel(model)) { for (here = BSIM3v32instances(model); here != NULL; here = BSIM3v32nextInstance(here)) { pParam = here->pParam; switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i = 0; i < BSIM3v32NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise.%s%s", here->BSIM3v32name, BSIM3v32nNames[i]); } break; case INT_NOIZ: for (i = 0; i < BSIM3v32NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total.%s%s", here->BSIM3v32name, BSIM3v32nNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total.%s%s", here->BSIM3v32name, BSIM3v32nNames[i]); } break; } } break; case N_CALC: m = here->BSIM3v32m; switch (mode) { case N_DENS: NevalSrc(&noizDens[BSIM3v32RDNOIZ], &lnNdens[BSIM3v32RDNOIZ], ckt, THERMNOISE, here->BSIM3v32dNodePrime, here->BSIM3v32dNode, here->BSIM3v32drainConductance * m); NevalSrc(&noizDens[BSIM3v32RSNOIZ], &lnNdens[BSIM3v32RSNOIZ], ckt, THERMNOISE, here->BSIM3v32sNodePrime, here->BSIM3v32sNode, here->BSIM3v32sourceConductance * m); switch( model->BSIM3v32noiMod ) { case 1: case 3: NevalSrc(&noizDens[BSIM3v32IDNOIZ], &lnNdens[BSIM3v32IDNOIZ], ckt, THERMNOISE, here->BSIM3v32dNodePrime, here->BSIM3v32sNodePrime, (2.0 / 3.0 * fabs(here->BSIM3v32gm + here->BSIM3v32gds + here->BSIM3v32gmbs)) * m); break; case 2: case 4: /* Added revision dependent code */ if (model->BSIM3v32intVersion == BSIM3v32V324) { NevalSrc(&noizDens[BSIM3v32IDNOIZ], &lnNdens[BSIM3v32IDNOIZ], ckt, THERMNOISE, here->BSIM3v32dNodePrime, here->BSIM3v32sNodePrime, (m * here->BSIM3v32ueff * fabs(here->BSIM3v32qinv) / (pParam->BSIM3v32leff * pParam->BSIM3v32leff + here->BSIM3v32ueff * fabs(here->BSIM3v32qinv) * here->BSIM3v32rds))); /* bugfix */ } else { /* for all versions lower then 3.2.4 */ NevalSrc(&noizDens[BSIM3v32IDNOIZ], &lnNdens[BSIM3v32IDNOIZ], ckt, THERMNOISE, here->BSIM3v32dNodePrime, here->BSIM3v32sNodePrime, (m * here->BSIM3v32ueff * fabs(here->BSIM3v32qinv / (pParam->BSIM3v32leff * pParam->BSIM3v32leff)))); } break; } NevalSrc(&noizDens[BSIM3v32FLNOIZ], NULL, ckt, N_GAIN, here->BSIM3v32dNodePrime, here->BSIM3v32sNodePrime, (double) 0.0); switch( model->BSIM3v32noiMod ) { case 1: case 4: noizDens[BSIM3v32FLNOIZ] *= m * model->BSIM3v32kf * exp(model->BSIM3v32af * log(MAX(fabs(here->BSIM3v32cd), N_MINLOG))) / (pow(data->freq, model->BSIM3v32ef) * pParam->BSIM3v32leff * pParam->BSIM3v32leff * model->BSIM3v32cox); break; case 2: case 3: vgs = *(ckt->CKTstates[0] + here->BSIM3v32vgs); vds = *(ckt->CKTstates[0] + here->BSIM3v32vds); if (vds < 0.0) { vds = -vds; vgs = vgs + vds; } /* Added revision dependent code */ if (model->BSIM3v32intVersion == BSIM3v32V324) { Ssi = StrongInversionNoiseEvalNew(vds, model, here, data->freq, ckt->CKTtemp); T10 = model->BSIM3v32oxideTrapDensityA * 8.62e-5 * ckt->CKTtemp; T11 = pParam->BSIM3v32weff * pParam->BSIM3v32leff * pow(data->freq, model->BSIM3v32ef) * 4.0e36; Swi = T10 / T11 * here->BSIM3v32cd * here->BSIM3v32cd; T1 = Swi + Ssi; if (T1 > 0.0) noizDens[BSIM3v32FLNOIZ] *= m * (Ssi * Swi) / T1; else noizDens[BSIM3v32FLNOIZ] *= 0.0; } else { /* for all versions lower then 3.2.4 */ if (vgs >= here->BSIM3v32von + 0.1) { Ssi = StrongInversionNoiseEvalOld(vgs, vds, model, here, data->freq, ckt->CKTtemp); noizDens[BSIM3v32FLNOIZ] *= m * Ssi; } else { pParam = here->pParam; T10 = model->BSIM3v32oxideTrapDensityA * 8.62e-5 * ckt->CKTtemp; T11 = pParam->BSIM3v32weff * pParam-> BSIM3v32leff * pow (data->freq, model->BSIM3v32ef) * 4.0e36; Swi = T10 / T11 * here->BSIM3v32cd * here->BSIM3v32cd; Slimit = StrongInversionNoiseEvalOld( here->BSIM3v32von + 0.1, vds, model, here, data->freq, ckt->CKTtemp); T1 = Swi + Slimit; if (T1 > 0.0) noizDens[BSIM3v32FLNOIZ] *= m * (Slimit * Swi) / T1; else noizDens[BSIM3v32FLNOIZ] *= 0.0; } } break; } lnNdens[BSIM3v32FLNOIZ] = log(MAX(noizDens[BSIM3v32FLNOIZ], N_MINLOG)); noizDens[BSIM3v32TOTNOIZ] = noizDens[BSIM3v32RDNOIZ] + noizDens[BSIM3v32RSNOIZ] + noizDens[BSIM3v32IDNOIZ] + noizDens[BSIM3v32FLNOIZ]; lnNdens[BSIM3v32TOTNOIZ] = log(MAX(noizDens[BSIM3v32TOTNOIZ], N_MINLOG)); *OnDens += noizDens[BSIM3v32TOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to initialize our "history" variables. */ for (i = 0; i < BSIM3v32NSRCS; i++) { here->BSIM3v32nVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i = 0; i < BSIM3v32NSRCS; i++) { here->BSIM3v32nVar[OUTNOIZ][i] = 0.0; here->BSIM3v32nVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0, we have to integrate. */ for (i = 0; i < BSIM3v32NSRCS; i++) { if (i != BSIM3v32TOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], here->BSIM3v32nVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv, lnNdens[i] + data->lnGainInv, here->BSIM3v32nVar[LNLSTDENS][i] + data->lnGainInv, data); here->BSIM3v32nVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { here->BSIM3v32nVar[OUTNOIZ][i] += tempOnoise; here->BSIM3v32nVar[OUTNOIZ][BSIM3v32TOTNOIZ] += tempOnoise; here->BSIM3v32nVar[INNOIZ][i] += tempInoise; here->BSIM3v32nVar[INNOIZ][BSIM3v32TOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i = 0; i < BSIM3v32NSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i = 0; i < BSIM3v32NSRCS; i++) { data->outpVector[data->outNumber++] = here->BSIM3v32nVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = here->BSIM3v32nVar[INNOIZ][i]; } } break; } break; case N_CLOSE: /* do nothing, the main calling routine will close */ return (OK); break; /* the plots */ } /* switch (operation) */ } /* for here */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v32/b3v32set.c0000644000175000017500000013602513546075722022261 0ustar carstencarsten/**** BSIM3v3.2.4, Released by Xuemei Xi 12/21/2001 ****/ /********** * Copyright 2001 Regents of the University of California. All rights reserved. * File: b3set.c of BSIM3v3.2.4 * Author: 1995 Min-Chie Jeng and Mansun Chan. * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "bsim3v32def.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define SMOOTHFACTOR 0.1 #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define PI 3.141592654 #define Charge_q 1.60219e-19 #define Meter2Micron 1.0e6 int BSIM3v32setup (SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { BSIM3v32model *model = (BSIM3v32model*)inModel; BSIM3v32instance *here; int error; CKTnode *tmp; CKTnode *tmpNode; IFuid tmpName; #ifdef USE_OMP int idx, InstCount; BSIM3v32instance **InstArray; #endif /* loop through all the BSIM3v32 device models */ for( ; model != NULL; model = BSIM3v32nextModel(model)) { /* Default value Processing for BSIM3v32 MOSFET Models */ if (!model->BSIM3v32typeGiven) model->BSIM3v32type = NMOS; if (!model->BSIM3v32mobModGiven) model->BSIM3v32mobMod = 1; if (!model->BSIM3v32binUnitGiven) model->BSIM3v32binUnit = 1; if (!model->BSIM3v32paramChkGiven) model->BSIM3v32paramChk = 0; if (!model->BSIM3v32capModGiven) model->BSIM3v32capMod = 3; if (!model->BSIM3v32acmModGiven) model->BSIM3v32acmMod = 0; if (!model->BSIM3v32calcacmGiven) model->BSIM3v32calcacm = 0; if (!model->BSIM3v32noiModGiven) model->BSIM3v32noiMod = 1; if (!model->BSIM3v32nqsModGiven) model->BSIM3v32nqsMod = 0; else if ((model->BSIM3v32nqsMod != 0) && (model->BSIM3v32nqsMod != 1)) { model->BSIM3v32nqsMod = 0; printf("Warning: nqsMod has been set to its default value: 0.\n"); } /* If the user does not provide the model revision, * we always choose the most recent. */ if (!model->BSIM3v32versionGiven) model->BSIM3v32version = copy("3.2.4"); /* I have added below the code that translate model string * into an integer. This trick is meant to speed up the * revision testing instruction, since comparing integer * is faster than comparing strings. * Paolo Nenzi 2002 */ if ((!strcmp(model->BSIM3v32version, "3.2.4"))||(!strncmp(model->BSIM3v32version, "3.24", 4))) model->BSIM3v32intVersion = BSIM3v32V324; else if ((!strcmp(model->BSIM3v32version, "3.2.3"))||(!strncmp(model->BSIM3v32version, "3.23", 4))) model->BSIM3v32intVersion = BSIM3v32V323; else if ((!strcmp(model->BSIM3v32version, "3.2.2"))||(!strncmp(model->BSIM3v32version, "3.22", 4))) model->BSIM3v32intVersion = BSIM3v32V322; else if ((!strncmp(model->BSIM3v32version, "3.2", 3))||(!strncmp(model->BSIM3v32version, "3.20", 4))) model->BSIM3v32intVersion = BSIM3v32V32; else model->BSIM3v32intVersion = BSIM3v32V3OLD; /* BSIM3v32V3OLD is a placeholder for pre 3.2 revision * This model should not be used for pre 3.2 models. */ if (!model->BSIM3v32toxGiven) model->BSIM3v32tox = 150.0e-10; model->BSIM3v32cox = 3.453133e-11 / model->BSIM3v32tox; if (!model->BSIM3v32toxmGiven) model->BSIM3v32toxm = model->BSIM3v32tox; if (!model->BSIM3v32cdscGiven) model->BSIM3v32cdsc = 2.4e-4; /* unit Q/V/m^2 */ if (!model->BSIM3v32cdscbGiven) model->BSIM3v32cdscb = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3v32cdscdGiven) model->BSIM3v32cdscd = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3v32citGiven) model->BSIM3v32cit = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3v32nfactorGiven) model->BSIM3v32nfactor = 1; if (!model->BSIM3v32xjGiven) model->BSIM3v32xj = .15e-6; if (!model->BSIM3v32vsatGiven) model->BSIM3v32vsat = 8.0e4; /* unit m/s */ if (!model->BSIM3v32atGiven) model->BSIM3v32at = 3.3e4; /* unit m/s */ if (!model->BSIM3v32a0Given) model->BSIM3v32a0 = 1.0; if (!model->BSIM3v32agsGiven) model->BSIM3v32ags = 0.0; if (!model->BSIM3v32a1Given) model->BSIM3v32a1 = 0.0; if (!model->BSIM3v32a2Given) model->BSIM3v32a2 = 1.0; if (!model->BSIM3v32ketaGiven) model->BSIM3v32keta = -0.047; /* unit / V */ if (!model->BSIM3v32nsubGiven) model->BSIM3v32nsub = 6.0e16; /* unit 1/cm3 */ if (!model->BSIM3v32npeakGiven) model->BSIM3v32npeak = 1.7e17; /* unit 1/cm3 */ if (!model->BSIM3v32ngateGiven) model->BSIM3v32ngate = 0; /* unit 1/cm3 */ if (!model->BSIM3v32vbmGiven) model->BSIM3v32vbm = -3.0; if (!model->BSIM3v32xtGiven) model->BSIM3v32xt = 1.55e-7; if (!model->BSIM3v32kt1Given) model->BSIM3v32kt1 = -0.11; /* unit V */ if (!model->BSIM3v32kt1lGiven) model->BSIM3v32kt1l = 0.0; /* unit V*m */ if (!model->BSIM3v32kt2Given) model->BSIM3v32kt2 = 0.022; /* No unit */ if (!model->BSIM3v32k3Given) model->BSIM3v32k3 = 80.0; if (!model->BSIM3v32k3bGiven) model->BSIM3v32k3b = 0.0; if (!model->BSIM3v32w0Given) model->BSIM3v32w0 = 2.5e-6; if (!model->BSIM3v32nlxGiven) model->BSIM3v32nlx = 1.74e-7; if (!model->BSIM3v32dvt0Given) model->BSIM3v32dvt0 = 2.2; if (!model->BSIM3v32dvt1Given) model->BSIM3v32dvt1 = 0.53; if (!model->BSIM3v32dvt2Given) model->BSIM3v32dvt2 = -0.032; /* unit 1 / V */ if (!model->BSIM3v32dvt0wGiven) model->BSIM3v32dvt0w = 0.0; if (!model->BSIM3v32dvt1wGiven) model->BSIM3v32dvt1w = 5.3e6; if (!model->BSIM3v32dvt2wGiven) model->BSIM3v32dvt2w = -0.032; if (!model->BSIM3v32droutGiven) model->BSIM3v32drout = 0.56; if (!model->BSIM3v32dsubGiven) model->BSIM3v32dsub = model->BSIM3v32drout; if (!model->BSIM3v32vth0Given) model->BSIM3v32vth0 = (model->BSIM3v32type == NMOS) ? 0.7 : -0.7; if (!model->BSIM3v32uaGiven) model->BSIM3v32ua = 2.25e-9; /* unit m/V */ if (!model->BSIM3v32ua1Given) model->BSIM3v32ua1 = 4.31e-9; /* unit m/V */ if (!model->BSIM3v32ubGiven) model->BSIM3v32ub = 5.87e-19; /* unit (m/V)**2 */ if (!model->BSIM3v32ub1Given) model->BSIM3v32ub1 = -7.61e-18; /* unit (m/V)**2 */ if (!model->BSIM3v32ucGiven) model->BSIM3v32uc = (model->BSIM3v32mobMod == 3) ? -0.0465 : -0.0465e-9; if (!model->BSIM3v32uc1Given) model->BSIM3v32uc1 = (model->BSIM3v32mobMod == 3) ? -0.056 : -0.056e-9; if (!model->BSIM3v32u0Given) model->BSIM3v32u0 = (model->BSIM3v32type == NMOS) ? 0.067 : 0.025; if (!model->BSIM3v32uteGiven) model->BSIM3v32ute = -1.5; if (!model->BSIM3v32voffGiven) model->BSIM3v32voff = -0.08; if (!model->BSIM3v32deltaGiven) model->BSIM3v32delta = 0.01; if (!model->BSIM3v32rdswGiven) model->BSIM3v32rdsw = 0; if (!model->BSIM3v32prwgGiven) model->BSIM3v32prwg = 0.0; /* unit 1/V */ if (!model->BSIM3v32prwbGiven) model->BSIM3v32prwb = 0.0; if (!model->BSIM3v32prtGiven) model->BSIM3v32prt = 0.0; if (!model->BSIM3v32eta0Given) model->BSIM3v32eta0 = 0.08; /* no unit */ if (!model->BSIM3v32etabGiven) model->BSIM3v32etab = -0.07; /* unit 1/V */ if (!model->BSIM3v32pclmGiven) model->BSIM3v32pclm = 1.3; /* no unit */ if (!model->BSIM3v32pdibl1Given) model->BSIM3v32pdibl1 = .39; /* no unit */ if (!model->BSIM3v32pdibl2Given) model->BSIM3v32pdibl2 = 0.0086; /* no unit */ if (!model->BSIM3v32pdiblbGiven) model->BSIM3v32pdiblb = 0.0; /* 1/V */ if (!model->BSIM3v32pscbe1Given) model->BSIM3v32pscbe1 = 4.24e8; if (!model->BSIM3v32pscbe2Given) model->BSIM3v32pscbe2 = 1.0e-5; if (!model->BSIM3v32pvagGiven) model->BSIM3v32pvag = 0.0; if (!model->BSIM3v32wrGiven) model->BSIM3v32wr = 1.0; if (!model->BSIM3v32dwgGiven) model->BSIM3v32dwg = 0.0; if (!model->BSIM3v32dwbGiven) model->BSIM3v32dwb = 0.0; if (!model->BSIM3v32b0Given) model->BSIM3v32b0 = 0.0; if (!model->BSIM3v32b1Given) model->BSIM3v32b1 = 0.0; if (!model->BSIM3v32alpha0Given) model->BSIM3v32alpha0 = 0.0; if (!model->BSIM3v32alpha1Given) model->BSIM3v32alpha1 = 0.0; if (!model->BSIM3v32beta0Given) model->BSIM3v32beta0 = 30.0; if (!model->BSIM3v32ijthGiven) model->BSIM3v32ijth = 0.1; /* unit A */ if (!model->BSIM3v32elmGiven) model->BSIM3v32elm = 5.0; if (!model->BSIM3v32cgslGiven) model->BSIM3v32cgsl = 0.0; if (!model->BSIM3v32cgdlGiven) model->BSIM3v32cgdl = 0.0; if (!model->BSIM3v32ckappaGiven) model->BSIM3v32ckappa = 0.6; if (!model->BSIM3v32clcGiven) model->BSIM3v32clc = 0.1e-6; if (!model->BSIM3v32cleGiven) model->BSIM3v32cle = 0.6; if (!model->BSIM3v32vfbcvGiven) model->BSIM3v32vfbcv = -1.0; if (!model->BSIM3v32acdeGiven) model->BSIM3v32acde = 1.0; if (!model->BSIM3v32moinGiven) model->BSIM3v32moin = 15.0; if (!model->BSIM3v32noffGiven) model->BSIM3v32noff = 1.0; if (!model->BSIM3v32voffcvGiven) model->BSIM3v32voffcv = 0.0; if (!model->BSIM3v32tcjGiven) model->BSIM3v32tcj = 0.0; if (!model->BSIM3v32tpbGiven) model->BSIM3v32tpb = 0.0; if (!model->BSIM3v32tcjswGiven) model->BSIM3v32tcjsw = 0.0; if (!model->BSIM3v32tpbswGiven) model->BSIM3v32tpbsw = 0.0; if (!model->BSIM3v32tcjswgGiven) model->BSIM3v32tcjswg = 0.0; if (!model->BSIM3v32tpbswgGiven) model->BSIM3v32tpbswg = 0.0; /* ACM model */ if (!model->BSIM3v32hdifGiven) model->BSIM3v32hdif = 0.0; if (!model->BSIM3v32ldifGiven) model->BSIM3v32ldif = 0.0; if (!model->BSIM3v32ldGiven) model->BSIM3v32ld = 0.0; if (!model->BSIM3v32rdGiven) model->BSIM3v32rd = 0.0; if (!model->BSIM3v32rsGiven) model->BSIM3v32rs = 0.0; if (!model->BSIM3v32rdcGiven) model->BSIM3v32rdc = 0.0; if (!model->BSIM3v32rscGiven) model->BSIM3v32rsc = 0.0; if (!model->BSIM3v32wmltGiven) model->BSIM3v32wmlt = 1.0; if (!model->BSIM3v32lmltGiven) model->BSIM3v32lmlt = 1.0; /* Length dependence */ if (!model->BSIM3v32lcdscGiven) model->BSIM3v32lcdsc = 0.0; if (!model->BSIM3v32lcdscbGiven) model->BSIM3v32lcdscb = 0.0; if (!model->BSIM3v32lcdscdGiven) model->BSIM3v32lcdscd = 0.0; if (!model->BSIM3v32lcitGiven) model->BSIM3v32lcit = 0.0; if (!model->BSIM3v32lnfactorGiven) model->BSIM3v32lnfactor = 0.0; if (!model->BSIM3v32lxjGiven) model->BSIM3v32lxj = 0.0; if (!model->BSIM3v32lvsatGiven) model->BSIM3v32lvsat = 0.0; if (!model->BSIM3v32latGiven) model->BSIM3v32lat = 0.0; if (!model->BSIM3v32la0Given) model->BSIM3v32la0 = 0.0; if (!model->BSIM3v32lagsGiven) model->BSIM3v32lags = 0.0; if (!model->BSIM3v32la1Given) model->BSIM3v32la1 = 0.0; if (!model->BSIM3v32la2Given) model->BSIM3v32la2 = 0.0; if (!model->BSIM3v32lketaGiven) model->BSIM3v32lketa = 0.0; if (!model->BSIM3v32lnsubGiven) model->BSIM3v32lnsub = 0.0; if (!model->BSIM3v32lnpeakGiven) model->BSIM3v32lnpeak = 0.0; if (!model->BSIM3v32lngateGiven) model->BSIM3v32lngate = 0.0; if (!model->BSIM3v32lvbmGiven) model->BSIM3v32lvbm = 0.0; if (!model->BSIM3v32lxtGiven) model->BSIM3v32lxt = 0.0; if (!model->BSIM3v32lkt1Given) model->BSIM3v32lkt1 = 0.0; if (!model->BSIM3v32lkt1lGiven) model->BSIM3v32lkt1l = 0.0; if (!model->BSIM3v32lkt2Given) model->BSIM3v32lkt2 = 0.0; if (!model->BSIM3v32lk3Given) model->BSIM3v32lk3 = 0.0; if (!model->BSIM3v32lk3bGiven) model->BSIM3v32lk3b = 0.0; if (!model->BSIM3v32lw0Given) model->BSIM3v32lw0 = 0.0; if (!model->BSIM3v32lnlxGiven) model->BSIM3v32lnlx = 0.0; if (!model->BSIM3v32ldvt0Given) model->BSIM3v32ldvt0 = 0.0; if (!model->BSIM3v32ldvt1Given) model->BSIM3v32ldvt1 = 0.0; if (!model->BSIM3v32ldvt2Given) model->BSIM3v32ldvt2 = 0.0; if (!model->BSIM3v32ldvt0wGiven) model->BSIM3v32ldvt0w = 0.0; if (!model->BSIM3v32ldvt1wGiven) model->BSIM3v32ldvt1w = 0.0; if (!model->BSIM3v32ldvt2wGiven) model->BSIM3v32ldvt2w = 0.0; if (!model->BSIM3v32ldroutGiven) model->BSIM3v32ldrout = 0.0; if (!model->BSIM3v32ldsubGiven) model->BSIM3v32ldsub = 0.0; if (!model->BSIM3v32lvth0Given) model->BSIM3v32lvth0 = 0.0; if (!model->BSIM3v32luaGiven) model->BSIM3v32lua = 0.0; if (!model->BSIM3v32lua1Given) model->BSIM3v32lua1 = 0.0; if (!model->BSIM3v32lubGiven) model->BSIM3v32lub = 0.0; if (!model->BSIM3v32lub1Given) model->BSIM3v32lub1 = 0.0; if (!model->BSIM3v32lucGiven) model->BSIM3v32luc = 0.0; if (!model->BSIM3v32luc1Given) model->BSIM3v32luc1 = 0.0; if (!model->BSIM3v32lu0Given) model->BSIM3v32lu0 = 0.0; if (!model->BSIM3v32luteGiven) model->BSIM3v32lute = 0.0; if (!model->BSIM3v32lvoffGiven) model->BSIM3v32lvoff = 0.0; if (!model->BSIM3v32ldeltaGiven) model->BSIM3v32ldelta = 0.0; if (!model->BSIM3v32lrdswGiven) model->BSIM3v32lrdsw = 0.0; if (!model->BSIM3v32lprwbGiven) model->BSIM3v32lprwb = 0.0; if (!model->BSIM3v32lprwgGiven) model->BSIM3v32lprwg = 0.0; if (!model->BSIM3v32lprtGiven) model->BSIM3v32lprt = 0.0; if (!model->BSIM3v32leta0Given) model->BSIM3v32leta0 = 0.0; if (!model->BSIM3v32letabGiven) model->BSIM3v32letab = -0.0; if (!model->BSIM3v32lpclmGiven) model->BSIM3v32lpclm = 0.0; if (!model->BSIM3v32lpdibl1Given) model->BSIM3v32lpdibl1 = 0.0; if (!model->BSIM3v32lpdibl2Given) model->BSIM3v32lpdibl2 = 0.0; if (!model->BSIM3v32lpdiblbGiven) model->BSIM3v32lpdiblb = 0.0; if (!model->BSIM3v32lpscbe1Given) model->BSIM3v32lpscbe1 = 0.0; if (!model->BSIM3v32lpscbe2Given) model->BSIM3v32lpscbe2 = 0.0; if (!model->BSIM3v32lpvagGiven) model->BSIM3v32lpvag = 0.0; if (!model->BSIM3v32lwrGiven) model->BSIM3v32lwr = 0.0; if (!model->BSIM3v32ldwgGiven) model->BSIM3v32ldwg = 0.0; if (!model->BSIM3v32ldwbGiven) model->BSIM3v32ldwb = 0.0; if (!model->BSIM3v32lb0Given) model->BSIM3v32lb0 = 0.0; if (!model->BSIM3v32lb1Given) model->BSIM3v32lb1 = 0.0; if (!model->BSIM3v32lalpha0Given) model->BSIM3v32lalpha0 = 0.0; if (!model->BSIM3v32lalpha1Given) model->BSIM3v32lalpha1 = 0.0; if (!model->BSIM3v32lbeta0Given) model->BSIM3v32lbeta0 = 0.0; if (!model->BSIM3v32lvfbGiven) model->BSIM3v32lvfb = 0.0; if (!model->BSIM3v32lelmGiven) model->BSIM3v32lelm = 0.0; if (!model->BSIM3v32lcgslGiven) model->BSIM3v32lcgsl = 0.0; if (!model->BSIM3v32lcgdlGiven) model->BSIM3v32lcgdl = 0.0; if (!model->BSIM3v32lckappaGiven) model->BSIM3v32lckappa = 0.0; if (!model->BSIM3v32lclcGiven) model->BSIM3v32lclc = 0.0; if (!model->BSIM3v32lcleGiven) model->BSIM3v32lcle = 0.0; if (!model->BSIM3v32lcfGiven) model->BSIM3v32lcf = 0.0; if (!model->BSIM3v32lvfbcvGiven) model->BSIM3v32lvfbcv = 0.0; if (!model->BSIM3v32lacdeGiven) model->BSIM3v32lacde = 0.0; if (!model->BSIM3v32lmoinGiven) model->BSIM3v32lmoin = 0.0; if (!model->BSIM3v32lnoffGiven) model->BSIM3v32lnoff = 0.0; if (!model->BSIM3v32lvoffcvGiven) model->BSIM3v32lvoffcv = 0.0; /* Width dependence */ if (!model->BSIM3v32wcdscGiven) model->BSIM3v32wcdsc = 0.0; if (!model->BSIM3v32wcdscbGiven) model->BSIM3v32wcdscb = 0.0; if (!model->BSIM3v32wcdscdGiven) model->BSIM3v32wcdscd = 0.0; if (!model->BSIM3v32wcitGiven) model->BSIM3v32wcit = 0.0; if (!model->BSIM3v32wnfactorGiven) model->BSIM3v32wnfactor = 0.0; if (!model->BSIM3v32wxjGiven) model->BSIM3v32wxj = 0.0; if (!model->BSIM3v32wvsatGiven) model->BSIM3v32wvsat = 0.0; if (!model->BSIM3v32watGiven) model->BSIM3v32wat = 0.0; if (!model->BSIM3v32wa0Given) model->BSIM3v32wa0 = 0.0; if (!model->BSIM3v32wagsGiven) model->BSIM3v32wags = 0.0; if (!model->BSIM3v32wa1Given) model->BSIM3v32wa1 = 0.0; if (!model->BSIM3v32wa2Given) model->BSIM3v32wa2 = 0.0; if (!model->BSIM3v32wketaGiven) model->BSIM3v32wketa = 0.0; if (!model->BSIM3v32wnsubGiven) model->BSIM3v32wnsub = 0.0; if (!model->BSIM3v32wnpeakGiven) model->BSIM3v32wnpeak = 0.0; if (!model->BSIM3v32wngateGiven) model->BSIM3v32wngate = 0.0; if (!model->BSIM3v32wvbmGiven) model->BSIM3v32wvbm = 0.0; if (!model->BSIM3v32wxtGiven) model->BSIM3v32wxt = 0.0; if (!model->BSIM3v32wkt1Given) model->BSIM3v32wkt1 = 0.0; if (!model->BSIM3v32wkt1lGiven) model->BSIM3v32wkt1l = 0.0; if (!model->BSIM3v32wkt2Given) model->BSIM3v32wkt2 = 0.0; if (!model->BSIM3v32wk3Given) model->BSIM3v32wk3 = 0.0; if (!model->BSIM3v32wk3bGiven) model->BSIM3v32wk3b = 0.0; if (!model->BSIM3v32ww0Given) model->BSIM3v32ww0 = 0.0; if (!model->BSIM3v32wnlxGiven) model->BSIM3v32wnlx = 0.0; if (!model->BSIM3v32wdvt0Given) model->BSIM3v32wdvt0 = 0.0; if (!model->BSIM3v32wdvt1Given) model->BSIM3v32wdvt1 = 0.0; if (!model->BSIM3v32wdvt2Given) model->BSIM3v32wdvt2 = 0.0; if (!model->BSIM3v32wdvt0wGiven) model->BSIM3v32wdvt0w = 0.0; if (!model->BSIM3v32wdvt1wGiven) model->BSIM3v32wdvt1w = 0.0; if (!model->BSIM3v32wdvt2wGiven) model->BSIM3v32wdvt2w = 0.0; if (!model->BSIM3v32wdroutGiven) model->BSIM3v32wdrout = 0.0; if (!model->BSIM3v32wdsubGiven) model->BSIM3v32wdsub = 0.0; if (!model->BSIM3v32wvth0Given) model->BSIM3v32wvth0 = 0.0; if (!model->BSIM3v32wuaGiven) model->BSIM3v32wua = 0.0; if (!model->BSIM3v32wua1Given) model->BSIM3v32wua1 = 0.0; if (!model->BSIM3v32wubGiven) model->BSIM3v32wub = 0.0; if (!model->BSIM3v32wub1Given) model->BSIM3v32wub1 = 0.0; if (!model->BSIM3v32wucGiven) model->BSIM3v32wuc = 0.0; if (!model->BSIM3v32wuc1Given) model->BSIM3v32wuc1 = 0.0; if (!model->BSIM3v32wu0Given) model->BSIM3v32wu0 = 0.0; if (!model->BSIM3v32wuteGiven) model->BSIM3v32wute = 0.0; if (!model->BSIM3v32wvoffGiven) model->BSIM3v32wvoff = 0.0; if (!model->BSIM3v32wdeltaGiven) model->BSIM3v32wdelta = 0.0; if (!model->BSIM3v32wrdswGiven) model->BSIM3v32wrdsw = 0.0; if (!model->BSIM3v32wprwbGiven) model->BSIM3v32wprwb = 0.0; if (!model->BSIM3v32wprwgGiven) model->BSIM3v32wprwg = 0.0; if (!model->BSIM3v32wprtGiven) model->BSIM3v32wprt = 0.0; if (!model->BSIM3v32weta0Given) model->BSIM3v32weta0 = 0.0; if (!model->BSIM3v32wetabGiven) model->BSIM3v32wetab = 0.0; if (!model->BSIM3v32wpclmGiven) model->BSIM3v32wpclm = 0.0; if (!model->BSIM3v32wpdibl1Given) model->BSIM3v32wpdibl1 = 0.0; if (!model->BSIM3v32wpdibl2Given) model->BSIM3v32wpdibl2 = 0.0; if (!model->BSIM3v32wpdiblbGiven) model->BSIM3v32wpdiblb = 0.0; if (!model->BSIM3v32wpscbe1Given) model->BSIM3v32wpscbe1 = 0.0; if (!model->BSIM3v32wpscbe2Given) model->BSIM3v32wpscbe2 = 0.0; if (!model->BSIM3v32wpvagGiven) model->BSIM3v32wpvag = 0.0; if (!model->BSIM3v32wwrGiven) model->BSIM3v32wwr = 0.0; if (!model->BSIM3v32wdwgGiven) model->BSIM3v32wdwg = 0.0; if (!model->BSIM3v32wdwbGiven) model->BSIM3v32wdwb = 0.0; if (!model->BSIM3v32wb0Given) model->BSIM3v32wb0 = 0.0; if (!model->BSIM3v32wb1Given) model->BSIM3v32wb1 = 0.0; if (!model->BSIM3v32walpha0Given) model->BSIM3v32walpha0 = 0.0; if (!model->BSIM3v32walpha1Given) model->BSIM3v32walpha1 = 0.0; if (!model->BSIM3v32wbeta0Given) model->BSIM3v32wbeta0 = 0.0; if (!model->BSIM3v32wvfbGiven) model->BSIM3v32wvfb = 0.0; if (!model->BSIM3v32welmGiven) model->BSIM3v32welm = 0.0; if (!model->BSIM3v32wcgslGiven) model->BSIM3v32wcgsl = 0.0; if (!model->BSIM3v32wcgdlGiven) model->BSIM3v32wcgdl = 0.0; if (!model->BSIM3v32wckappaGiven) model->BSIM3v32wckappa = 0.0; if (!model->BSIM3v32wcfGiven) model->BSIM3v32wcf = 0.0; if (!model->BSIM3v32wclcGiven) model->BSIM3v32wclc = 0.0; if (!model->BSIM3v32wcleGiven) model->BSIM3v32wcle = 0.0; if (!model->BSIM3v32wvfbcvGiven) model->BSIM3v32wvfbcv = 0.0; if (!model->BSIM3v32wacdeGiven) model->BSIM3v32wacde = 0.0; if (!model->BSIM3v32wmoinGiven) model->BSIM3v32wmoin = 0.0; if (!model->BSIM3v32wnoffGiven) model->BSIM3v32wnoff = 0.0; if (!model->BSIM3v32wvoffcvGiven) model->BSIM3v32wvoffcv = 0.0; /* Cross-term dependence */ if (!model->BSIM3v32pcdscGiven) model->BSIM3v32pcdsc = 0.0; if (!model->BSIM3v32pcdscbGiven) model->BSIM3v32pcdscb = 0.0; if (!model->BSIM3v32pcdscdGiven) model->BSIM3v32pcdscd = 0.0; if (!model->BSIM3v32pcitGiven) model->BSIM3v32pcit = 0.0; if (!model->BSIM3v32pnfactorGiven) model->BSIM3v32pnfactor = 0.0; if (!model->BSIM3v32pxjGiven) model->BSIM3v32pxj = 0.0; if (!model->BSIM3v32pvsatGiven) model->BSIM3v32pvsat = 0.0; if (!model->BSIM3v32patGiven) model->BSIM3v32pat = 0.0; if (!model->BSIM3v32pa0Given) model->BSIM3v32pa0 = 0.0; if (!model->BSIM3v32pagsGiven) model->BSIM3v32pags = 0.0; if (!model->BSIM3v32pa1Given) model->BSIM3v32pa1 = 0.0; if (!model->BSIM3v32pa2Given) model->BSIM3v32pa2 = 0.0; if (!model->BSIM3v32pketaGiven) model->BSIM3v32pketa = 0.0; if (!model->BSIM3v32pnsubGiven) model->BSIM3v32pnsub = 0.0; if (!model->BSIM3v32pnpeakGiven) model->BSIM3v32pnpeak = 0.0; if (!model->BSIM3v32pngateGiven) model->BSIM3v32pngate = 0.0; if (!model->BSIM3v32pvbmGiven) model->BSIM3v32pvbm = 0.0; if (!model->BSIM3v32pxtGiven) model->BSIM3v32pxt = 0.0; if (!model->BSIM3v32pkt1Given) model->BSIM3v32pkt1 = 0.0; if (!model->BSIM3v32pkt1lGiven) model->BSIM3v32pkt1l = 0.0; if (!model->BSIM3v32pkt2Given) model->BSIM3v32pkt2 = 0.0; if (!model->BSIM3v32pk3Given) model->BSIM3v32pk3 = 0.0; if (!model->BSIM3v32pk3bGiven) model->BSIM3v32pk3b = 0.0; if (!model->BSIM3v32pw0Given) model->BSIM3v32pw0 = 0.0; if (!model->BSIM3v32pnlxGiven) model->BSIM3v32pnlx = 0.0; if (!model->BSIM3v32pdvt0Given) model->BSIM3v32pdvt0 = 0.0; if (!model->BSIM3v32pdvt1Given) model->BSIM3v32pdvt1 = 0.0; if (!model->BSIM3v32pdvt2Given) model->BSIM3v32pdvt2 = 0.0; if (!model->BSIM3v32pdvt0wGiven) model->BSIM3v32pdvt0w = 0.0; if (!model->BSIM3v32pdvt1wGiven) model->BSIM3v32pdvt1w = 0.0; if (!model->BSIM3v32pdvt2wGiven) model->BSIM3v32pdvt2w = 0.0; if (!model->BSIM3v32pdroutGiven) model->BSIM3v32pdrout = 0.0; if (!model->BSIM3v32pdsubGiven) model->BSIM3v32pdsub = 0.0; if (!model->BSIM3v32pvth0Given) model->BSIM3v32pvth0 = 0.0; if (!model->BSIM3v32puaGiven) model->BSIM3v32pua = 0.0; if (!model->BSIM3v32pua1Given) model->BSIM3v32pua1 = 0.0; if (!model->BSIM3v32pubGiven) model->BSIM3v32pub = 0.0; if (!model->BSIM3v32pub1Given) model->BSIM3v32pub1 = 0.0; if (!model->BSIM3v32pucGiven) model->BSIM3v32puc = 0.0; if (!model->BSIM3v32puc1Given) model->BSIM3v32puc1 = 0.0; if (!model->BSIM3v32pu0Given) model->BSIM3v32pu0 = 0.0; if (!model->BSIM3v32puteGiven) model->BSIM3v32pute = 0.0; if (!model->BSIM3v32pvoffGiven) model->BSIM3v32pvoff = 0.0; if (!model->BSIM3v32pdeltaGiven) model->BSIM3v32pdelta = 0.0; if (!model->BSIM3v32prdswGiven) model->BSIM3v32prdsw = 0.0; if (!model->BSIM3v32pprwbGiven) model->BSIM3v32pprwb = 0.0; if (!model->BSIM3v32pprwgGiven) model->BSIM3v32pprwg = 0.0; if (!model->BSIM3v32pprtGiven) model->BSIM3v32pprt = 0.0; if (!model->BSIM3v32peta0Given) model->BSIM3v32peta0 = 0.0; if (!model->BSIM3v32petabGiven) model->BSIM3v32petab = 0.0; if (!model->BSIM3v32ppclmGiven) model->BSIM3v32ppclm = 0.0; if (!model->BSIM3v32ppdibl1Given) model->BSIM3v32ppdibl1 = 0.0; if (!model->BSIM3v32ppdibl2Given) model->BSIM3v32ppdibl2 = 0.0; if (!model->BSIM3v32ppdiblbGiven) model->BSIM3v32ppdiblb = 0.0; if (!model->BSIM3v32ppscbe1Given) model->BSIM3v32ppscbe1 = 0.0; if (!model->BSIM3v32ppscbe2Given) model->BSIM3v32ppscbe2 = 0.0; if (!model->BSIM3v32ppvagGiven) model->BSIM3v32ppvag = 0.0; if (!model->BSIM3v32pwrGiven) model->BSIM3v32pwr = 0.0; if (!model->BSIM3v32pdwgGiven) model->BSIM3v32pdwg = 0.0; if (!model->BSIM3v32pdwbGiven) model->BSIM3v32pdwb = 0.0; if (!model->BSIM3v32pb0Given) model->BSIM3v32pb0 = 0.0; if (!model->BSIM3v32pb1Given) model->BSIM3v32pb1 = 0.0; if (!model->BSIM3v32palpha0Given) model->BSIM3v32palpha0 = 0.0; if (!model->BSIM3v32palpha1Given) model->BSIM3v32palpha1 = 0.0; if (!model->BSIM3v32pbeta0Given) model->BSIM3v32pbeta0 = 0.0; if (!model->BSIM3v32pvfbGiven) model->BSIM3v32pvfb = 0.0; if (!model->BSIM3v32pelmGiven) model->BSIM3v32pelm = 0.0; if (!model->BSIM3v32pcgslGiven) model->BSIM3v32pcgsl = 0.0; if (!model->BSIM3v32pcgdlGiven) model->BSIM3v32pcgdl = 0.0; if (!model->BSIM3v32pckappaGiven) model->BSIM3v32pckappa = 0.0; if (!model->BSIM3v32pcfGiven) model->BSIM3v32pcf = 0.0; if (!model->BSIM3v32pclcGiven) model->BSIM3v32pclc = 0.0; if (!model->BSIM3v32pcleGiven) model->BSIM3v32pcle = 0.0; if (!model->BSIM3v32pvfbcvGiven) model->BSIM3v32pvfbcv = 0.0; if (!model->BSIM3v32pacdeGiven) model->BSIM3v32pacde = 0.0; if (!model->BSIM3v32pmoinGiven) model->BSIM3v32pmoin = 0.0; if (!model->BSIM3v32pnoffGiven) model->BSIM3v32pnoff = 0.0; if (!model->BSIM3v32pvoffcvGiven) model->BSIM3v32pvoffcv = 0.0; /* unit degree celcius */ if (!model->BSIM3v32tnomGiven) model->BSIM3v32tnom = ckt->CKTnomTemp; /* else model->BSIM3v32tnom = model->BSIM3v32tnom + 273.15; we make this transform in b3v32mpar.c in the first run */ if (!model->BSIM3v32LintGiven) model->BSIM3v32Lint = 0.0; if (!model->BSIM3v32LlGiven) model->BSIM3v32Ll = 0.0; if (!model->BSIM3v32LlcGiven) model->BSIM3v32Llc = model->BSIM3v32Ll; if (!model->BSIM3v32LlnGiven) model->BSIM3v32Lln = 1.0; if (!model->BSIM3v32LwGiven) model->BSIM3v32Lw = 0.0; if (!model->BSIM3v32LwcGiven) model->BSIM3v32Lwc = model->BSIM3v32Lw; if (!model->BSIM3v32LwnGiven) model->BSIM3v32Lwn = 1.0; if (!model->BSIM3v32LwlGiven) model->BSIM3v32Lwl = 0.0; if (!model->BSIM3v32LwlcGiven) model->BSIM3v32Lwlc = model->BSIM3v32Lwl; if (!model->BSIM3v32LminGiven) model->BSIM3v32Lmin = 0.0; if (!model->BSIM3v32LmaxGiven) model->BSIM3v32Lmax = 1.0; if (!model->BSIM3v32WintGiven) model->BSIM3v32Wint = 0.0; if (!model->BSIM3v32WlGiven) model->BSIM3v32Wl = 0.0; if (!model->BSIM3v32WlcGiven) model->BSIM3v32Wlc = model->BSIM3v32Wl; if (!model->BSIM3v32WlnGiven) model->BSIM3v32Wln = 1.0; if (!model->BSIM3v32WwGiven) model->BSIM3v32Ww = 0.0; if (!model->BSIM3v32WwcGiven) model->BSIM3v32Wwc = model->BSIM3v32Ww; if (!model->BSIM3v32WwnGiven) model->BSIM3v32Wwn = 1.0; if (!model->BSIM3v32WwlGiven) model->BSIM3v32Wwl = 0.0; if (!model->BSIM3v32WwlcGiven) model->BSIM3v32Wwlc = model->BSIM3v32Wwl; if (!model->BSIM3v32WminGiven) model->BSIM3v32Wmin = 0.0; if (!model->BSIM3v32WmaxGiven) model->BSIM3v32Wmax = 1.0; if (!model->BSIM3v32dwcGiven) model->BSIM3v32dwc = model->BSIM3v32Wint; if (!model->BSIM3v32dlcGiven) model->BSIM3v32dlc = model->BSIM3v32Lint; if (!model->BSIM3v32xlGiven) model->BSIM3v32xl = 0.0; if (!model->BSIM3v32xwGiven) model->BSIM3v32xw = 0.0; if (!model->BSIM3v32cfGiven) model->BSIM3v32cf = 2.0 * EPSOX / PI * log(1.0 + 0.4e-6 / model->BSIM3v32tox); if (!model->BSIM3v32cgdoGiven) { if (model->BSIM3v32dlcGiven && (model->BSIM3v32dlc > 0.0)) { model->BSIM3v32cgdo = model->BSIM3v32dlc * model->BSIM3v32cox - model->BSIM3v32cgdl ; } else model->BSIM3v32cgdo = 0.6 * model->BSIM3v32xj * model->BSIM3v32cox; } if (!model->BSIM3v32cgsoGiven) { if (model->BSIM3v32dlcGiven && (model->BSIM3v32dlc > 0.0)) { model->BSIM3v32cgso = model->BSIM3v32dlc * model->BSIM3v32cox - model->BSIM3v32cgsl ; } else model->BSIM3v32cgso = 0.6 * model->BSIM3v32xj * model->BSIM3v32cox; } if (!model->BSIM3v32cgboGiven) { model->BSIM3v32cgbo = 2.0 * model->BSIM3v32dwc * model->BSIM3v32cox; } if (!model->BSIM3v32xpartGiven) model->BSIM3v32xpart = 0.0; if (!model->BSIM3v32sheetResistanceGiven) model->BSIM3v32sheetResistance = 0.0; if (!model->BSIM3v32unitAreaJctCapGiven) model->BSIM3v32unitAreaJctCap = 5.0E-4; if (!model->BSIM3v32unitLengthSidewallJctCapGiven) model->BSIM3v32unitLengthSidewallJctCap = 5.0E-10; if (!model->BSIM3v32unitLengthGateSidewallJctCapGiven) model->BSIM3v32unitLengthGateSidewallJctCap = model->BSIM3v32unitLengthSidewallJctCap ; if (!model->BSIM3v32jctSatCurDensityGiven) model->BSIM3v32jctSatCurDensity = 1.0E-4; if (!model->BSIM3v32jctSidewallSatCurDensityGiven) model->BSIM3v32jctSidewallSatCurDensity = 0.0; if (!model->BSIM3v32bulkJctPotentialGiven) model->BSIM3v32bulkJctPotential = 1.0; if (!model->BSIM3v32sidewallJctPotentialGiven) model->BSIM3v32sidewallJctPotential = 1.0; if (!model->BSIM3v32GatesidewallJctPotentialGiven) model->BSIM3v32GatesidewallJctPotential = model->BSIM3v32sidewallJctPotential; if (!model->BSIM3v32bulkJctBotGradingCoeffGiven) model->BSIM3v32bulkJctBotGradingCoeff = 0.5; if (!model->BSIM3v32bulkJctSideGradingCoeffGiven) model->BSIM3v32bulkJctSideGradingCoeff = 0.33; if (!model->BSIM3v32bulkJctGateSideGradingCoeffGiven) model->BSIM3v32bulkJctGateSideGradingCoeff = model->BSIM3v32bulkJctSideGradingCoeff; if (!model->BSIM3v32jctEmissionCoeffGiven) model->BSIM3v32jctEmissionCoeff = 1.0; if (!model->BSIM3v32jctTempExponentGiven) model->BSIM3v32jctTempExponent = 3.0; if (!model->BSIM3v32oxideTrapDensityAGiven) { if (model->BSIM3v32type == NMOS) model->BSIM3v32oxideTrapDensityA = 1e20; else model->BSIM3v32oxideTrapDensityA=9.9e18; } if (!model->BSIM3v32oxideTrapDensityBGiven) { if (model->BSIM3v32type == NMOS) model->BSIM3v32oxideTrapDensityB = 5e4; else model->BSIM3v32oxideTrapDensityB = 2.4e3; } if (!model->BSIM3v32oxideTrapDensityCGiven) { if (model->BSIM3v32type == NMOS) model->BSIM3v32oxideTrapDensityC = -1.4e-12; else model->BSIM3v32oxideTrapDensityC = 1.4e-12; } if (!model->BSIM3v32emGiven) model->BSIM3v32em = 4.1e7; /* V/m */ if (!model->BSIM3v32efGiven) model->BSIM3v32ef = 1.0; if (!model->BSIM3v32afGiven) model->BSIM3v32af = 1.0; if (!model->BSIM3v32kfGiven) model->BSIM3v32kf = 0.0; if (!model->BSIM3v32vgsMaxGiven) model->BSIM3v32vgsMax = 1e99; if (!model->BSIM3v32vgdMaxGiven) model->BSIM3v32vgdMax = 1e99; if (!model->BSIM3v32vgbMaxGiven) model->BSIM3v32vgbMax = 1e99; if (!model->BSIM3v32vdsMaxGiven) model->BSIM3v32vdsMax = 1e99; if (!model->BSIM3v32vbsMaxGiven) model->BSIM3v32vbsMax = 1e99; if (!model->BSIM3v32vbdMaxGiven) model->BSIM3v32vbdMax = 1e99; if (!model->BSIM3v32vgsrMaxGiven) model->BSIM3v32vgsrMax = 1e99; if (!model->BSIM3v32vgdrMaxGiven) model->BSIM3v32vgdrMax = 1e99; if (!model->BSIM3v32vgbrMaxGiven) model->BSIM3v32vgbrMax = 1e99; if (!model->BSIM3v32vbsrMaxGiven) model->BSIM3v32vbsrMax = 1e99; if (!model->BSIM3v32vbdrMaxGiven) model->BSIM3v32vbdrMax = 1e99; /* loop through all the instances of the model */ for (here = BSIM3v32instances(model); here != NULL ; here=BSIM3v32nextInstance(here)) { /* allocate a chunk of the state vector */ here->BSIM3v32states = *states; *states += BSIM3v32numStates; /* perform the parameter defaulting */ if (!here->BSIM3v32drainAreaGiven) here->BSIM3v32drainArea = 0.0; if (!here->BSIM3v32drainPerimeterGiven) here->BSIM3v32drainPerimeter = 0.0; if (!here->BSIM3v32drainSquaresGiven) { if (model->BSIM3v32acmMod == 0) here->BSIM3v32drainSquares = 1.0; else here->BSIM3v32drainSquares = 0.0; } if (!here->BSIM3v32delvtoGiven) here->BSIM3v32delvto = 0.0; if (!here->BSIM3v32mulu0Given) here->BSIM3v32mulu0 = 1.0; if (!here->BSIM3v32icVBSGiven) here->BSIM3v32icVBS = 0.0; if (!here->BSIM3v32icVDSGiven) here->BSIM3v32icVDS = 0.0; if (!here->BSIM3v32icVGSGiven) here->BSIM3v32icVGS = 0.0; if (!here->BSIM3v32lGiven) here->BSIM3v32l = 5.0e-6; if (!here->BSIM3v32sourceAreaGiven) here->BSIM3v32sourceArea = 0.0; if (!here->BSIM3v32sourcePerimeterGiven) here->BSIM3v32sourcePerimeter = 0.0; if (!here->BSIM3v32sourceSquaresGiven) { if (model->BSIM3v32acmMod == 0) here->BSIM3v32sourceSquares = 1.0; else here->BSIM3v32sourceSquares = 0.0; } if (!here->BSIM3v32wGiven) here->BSIM3v32w = 5.0e-6; if (!here->BSIM3v32nqsModGiven) here->BSIM3v32nqsMod = model->BSIM3v32nqsMod; else if ((here->BSIM3v32nqsMod != 0) && (here->BSIM3v32nqsMod != 1)) { here->BSIM3v32nqsMod = model->BSIM3v32nqsMod; printf("Warning: nqsMod has been set to its global value %d.\n", model->BSIM3v32nqsMod); } if (!here->BSIM3v32geoGiven) here->BSIM3v32geo = 0; if (!here->BSIM3v32mGiven) here->BSIM3v32m = 1; /* process source/drain series resistance */ /* ACM model */ double DrainResistance, SourceResistance; if (model->BSIM3v32acmMod == 0) { DrainResistance = model->BSIM3v32sheetResistance * here->BSIM3v32drainSquares; SourceResistance = model->BSIM3v32sheetResistance * here->BSIM3v32sourceSquares; } else /* ACM > 0 */ { error = ACM_SourceDrainResistances( model->BSIM3v32acmMod, model->BSIM3v32ld, model->BSIM3v32ldif, model->BSIM3v32hdif, model->BSIM3v32wmlt, here->BSIM3v32w, model->BSIM3v32xw, model->BSIM3v32sheetResistance, here->BSIM3v32drainSquaresGiven, model->BSIM3v32rd, model->BSIM3v32rdc, here->BSIM3v32drainSquares, here->BSIM3v32sourceSquaresGiven, model->BSIM3v32rs, model->BSIM3v32rsc, here->BSIM3v32sourceSquares, &DrainResistance, &SourceResistance ); if (error) return(error); } /* process drain series resistance */ if (DrainResistance != 0) { if(here->BSIM3v32dNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM3v32name,"drain"); if(error) return(error); here->BSIM3v32dNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->BSIM3v32dNodePrime = here->BSIM3v32dNode; } /* process source series resistance */ if (SourceResistance != 0) { if(here->BSIM3v32sNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM3v32name,"source"); if(error) return(error); here->BSIM3v32sNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->BSIM3v32sNodePrime = here->BSIM3v32sNode; } /* internal charge node */ if (here->BSIM3v32nqsMod) { if(here->BSIM3v32qNode == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM3v32name,"charge"); if(error) return(error); here->BSIM3v32qNode = tmp->number; } } else { here->BSIM3v32qNode = 0; } /* Channel length scaling with lmlt model parameter */ if (model->BSIM3v32lmltGiven) here->BSIM3v32l *= model->BSIM3v32lmlt; /* set Sparse Matrix Pointers */ /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(BSIM3v32DdPtr, BSIM3v32dNode, BSIM3v32dNode); TSTALLOC(BSIM3v32GgPtr, BSIM3v32gNode, BSIM3v32gNode); TSTALLOC(BSIM3v32SsPtr, BSIM3v32sNode, BSIM3v32sNode); TSTALLOC(BSIM3v32BbPtr, BSIM3v32bNode, BSIM3v32bNode); TSTALLOC(BSIM3v32DPdpPtr, BSIM3v32dNodePrime, BSIM3v32dNodePrime); TSTALLOC(BSIM3v32SPspPtr, BSIM3v32sNodePrime, BSIM3v32sNodePrime); TSTALLOC(BSIM3v32DdpPtr, BSIM3v32dNode, BSIM3v32dNodePrime); TSTALLOC(BSIM3v32GbPtr, BSIM3v32gNode, BSIM3v32bNode); TSTALLOC(BSIM3v32GdpPtr, BSIM3v32gNode, BSIM3v32dNodePrime); TSTALLOC(BSIM3v32GspPtr, BSIM3v32gNode, BSIM3v32sNodePrime); TSTALLOC(BSIM3v32SspPtr, BSIM3v32sNode, BSIM3v32sNodePrime); TSTALLOC(BSIM3v32BdpPtr, BSIM3v32bNode, BSIM3v32dNodePrime); TSTALLOC(BSIM3v32BspPtr, BSIM3v32bNode, BSIM3v32sNodePrime); TSTALLOC(BSIM3v32DPspPtr, BSIM3v32dNodePrime, BSIM3v32sNodePrime); TSTALLOC(BSIM3v32DPdPtr, BSIM3v32dNodePrime, BSIM3v32dNode); TSTALLOC(BSIM3v32BgPtr, BSIM3v32bNode, BSIM3v32gNode); TSTALLOC(BSIM3v32DPgPtr, BSIM3v32dNodePrime, BSIM3v32gNode); TSTALLOC(BSIM3v32SPgPtr, BSIM3v32sNodePrime, BSIM3v32gNode); TSTALLOC(BSIM3v32SPsPtr, BSIM3v32sNodePrime, BSIM3v32sNode); TSTALLOC(BSIM3v32DPbPtr, BSIM3v32dNodePrime, BSIM3v32bNode); TSTALLOC(BSIM3v32SPbPtr, BSIM3v32sNodePrime, BSIM3v32bNode); TSTALLOC(BSIM3v32SPdpPtr, BSIM3v32sNodePrime, BSIM3v32dNodePrime); TSTALLOC(BSIM3v32QqPtr, BSIM3v32qNode, BSIM3v32qNode); TSTALLOC(BSIM3v32QdpPtr, BSIM3v32qNode, BSIM3v32dNodePrime); TSTALLOC(BSIM3v32QspPtr, BSIM3v32qNode, BSIM3v32sNodePrime); TSTALLOC(BSIM3v32QgPtr, BSIM3v32qNode, BSIM3v32gNode); TSTALLOC(BSIM3v32QbPtr, BSIM3v32qNode, BSIM3v32bNode); TSTALLOC(BSIM3v32DPqPtr, BSIM3v32dNodePrime, BSIM3v32qNode); TSTALLOC(BSIM3v32SPqPtr, BSIM3v32sNodePrime, BSIM3v32qNode); TSTALLOC(BSIM3v32GqPtr, BSIM3v32gNode, BSIM3v32qNode); TSTALLOC(BSIM3v32BqPtr, BSIM3v32bNode, BSIM3v32qNode); } } #ifdef USE_OMP InstCount = 0; model = (BSIM3v32model*)inModel; /* loop through all the BSIM3 device models to count the number of instances */ for (; model != NULL; model = BSIM3v32nextModel(model)) { /* loop through all the instances of the model */ for (here = BSIM3v32instances(model); here != NULL; here = BSIM3v32nextInstance(here)) { InstCount++; } model->BSIM3v32InstCount = 0; model->BSIM3v32InstanceArray = NULL; } InstArray = TMALLOC(BSIM3v32instance*, InstCount); model = (BSIM3v32model*)inModel; /* store this in the first model only */ model->BSIM3v32InstCount = InstCount; model->BSIM3v32InstanceArray = InstArray; idx = 0; for (; model != NULL; model = BSIM3v32nextModel(model)) { /* loop through all the instances of the model */ for (here = BSIM3v32instances(model); here != NULL; here = BSIM3v32nextInstance(here)) { InstArray[idx] = here; idx++; } } #endif return(OK); } int BSIM3v32unsetup( GENmodel *inModel, CKTcircuit *ckt) { BSIM3v32model *model; BSIM3v32instance *here; #ifdef USE_OMP model = (BSIM3v32model*)inModel; tfree(model->BSIM3v32InstanceArray); #endif for (model = (BSIM3v32model *)inModel; model != NULL; model = BSIM3v32nextModel(model)) { for (here = BSIM3v32instances(model); here != NULL; here=BSIM3v32nextInstance(here)) { if (here->BSIM3v32qNode > 0) CKTdltNNum(ckt, here->BSIM3v32qNode); here->BSIM3v32qNode = 0; if (here->BSIM3v32sNodePrime > 0 && here->BSIM3v32sNodePrime != here->BSIM3v32sNode) CKTdltNNum(ckt, here->BSIM3v32sNodePrime); here->BSIM3v32sNodePrime = 0; if (here->BSIM3v32dNodePrime > 0 && here->BSIM3v32dNodePrime != here->BSIM3v32dNode) CKTdltNNum(ckt, here->BSIM3v32dNodePrime); here->BSIM3v32dNodePrime = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim3v32/b3v32soachk.c0000644000175000017500000003660013546075722022734 0ustar carstencarsten/********** Copyright 2013 Dietmar Warning. All rights reserved. Author: 2013 Dietmar Warning **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3v32def.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/cpdefs.h" int BSIM3v32soaCheck(CKTcircuit *ckt, GENmodel *inModel) { BSIM3v32model *model = (BSIM3v32model *) inModel; BSIM3v32instance *here; double vgs, vgd, vgb, vds, vbs, vbd; /* actual mos voltages */ int maxwarns; static int warns_vgs = 0, warns_vgd = 0, warns_vgb = 0, warns_vds = 0, warns_vbs = 0, warns_vbd = 0; if (!ckt) { warns_vgs = 0; warns_vgd = 0; warns_vgb = 0; warns_vds = 0; warns_vbs = 0; warns_vbd = 0; return OK; } maxwarns = ckt->CKTsoaMaxWarns; for (; model; model = BSIM3v32nextModel(model)) { for (here = BSIM3v32instances(model); here; here = BSIM3v32nextInstance(here)) { vgs = ckt->CKTrhsOld [here->BSIM3v32gNode] - ckt->CKTrhsOld [here->BSIM3v32sNodePrime]; vgd = ckt->CKTrhsOld [here->BSIM3v32gNode] - ckt->CKTrhsOld [here->BSIM3v32dNodePrime]; vgb = ckt->CKTrhsOld [here->BSIM3v32gNode] - ckt->CKTrhsOld [here->BSIM3v32bNode]; vds = ckt->CKTrhsOld [here->BSIM3v32dNodePrime] - ckt->CKTrhsOld [here->BSIM3v32sNodePrime]; vbs = ckt->CKTrhsOld [here->BSIM3v32bNode] - ckt->CKTrhsOld [here->BSIM3v32sNodePrime]; vbd = ckt->CKTrhsOld [here->BSIM3v32bNode] - ckt->CKTrhsOld [here->BSIM3v32dNodePrime]; if (!model->BSIM3v32vgsrMaxGiven) { if (fabs(vgs) > model->BSIM3v32vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->BSIM3v32vgsMax); warns_vgs++; } if (!model->BSIM3v32vgbMaxGiven) { if (fabs(vgb) > model->BSIM3v32vgsMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgs_max=%g\n", vgb, model->BSIM3v32vgsMax); warns_vgb++; } } else { if (fabs(vgb) > model->BSIM3v32vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM3v32vgbMax); warns_vgb++; } } } else { if (model->BSIM3v32type > 0) { if (vgs > model->BSIM3v32vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->BSIM3v32vgsMax); warns_vgs++; } if (-1*vgs > model->BSIM3v32vgsrMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgsr_max=%g\n", vgs, model->BSIM3v32vgsrMax); warns_vgs++; } } else { if (vgs > model->BSIM3v32vgsrMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgsr_max=%g\n", vgs, model->BSIM3v32vgsrMax); warns_vgs++; } if (-1*vgs > model->BSIM3v32vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->BSIM3v32vgsMax); warns_vgs++; } } } if (!model->BSIM3v32vgdrMaxGiven) { if (fabs(vgd) > model->BSIM3v32vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->BSIM3v32vgdMax); warns_vgd++; } } else { if (model->BSIM3v32type > 0) { if (vgd > model->BSIM3v32vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->BSIM3v32vgdMax); warns_vgd++; } if (-1*vgd > model->BSIM3v32vgdrMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgdr_max=%g\n", vgd, model->BSIM3v32vgdrMax); warns_vgd++; } } else { if (vgd > model->BSIM3v32vgdrMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgdr_max=%g\n", vgd, model->BSIM3v32vgdrMax); warns_vgd++; } if (-1*vgd > model->BSIM3v32vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->BSIM3v32vgdMax); warns_vgd++; } } } if (fabs(vds) > model->BSIM3v32vdsMax) if (warns_vds < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vds=%g has exceeded Vds_max=%g\n", vds, model->BSIM3v32vdsMax); warns_vds++; } if (!model->BSIM3v32vgbrMaxGiven) { if (fabs(vgb) > model->BSIM3v32vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM3v32vgbMax); warns_vgb++; } } else { if (model->BSIM3v32type > 0) { if (vgb > model->BSIM3v32vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM3v32vgbMax); warns_vgb++; } if (-1*vgb > model->BSIM3v32vgbrMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgbr_max=%g\n", vgb, model->BSIM3v32vgbrMax); warns_vgb++; } } else { if (vgb > model->BSIM3v32vgbrMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgbr_max=%g\n", vgb, model->BSIM3v32vgbrMax); warns_vgb++; } if (-1*vgb > model->BSIM3v32vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM3v32vgbMax); warns_vgb++; } } } if (!model->BSIM3v32vbsrMaxGiven) { if (!model->BSIM3v32vbsMaxGiven) { if (fabs(vbs) > model->BSIM3v32vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->BSIM3v32vbdMax); warns_vbs++; } } else { if (fabs(vbs) > model->BSIM3v32vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->BSIM3v32vbsMax); warns_vbs++; } } } else { if (!model->BSIM3v32vbsMaxGiven) { if (model->BSIM3v32type > 0) { if (vbs > model->BSIM3v32vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->BSIM3v32vbdMax); warns_vbs++; } if (-1*vbs > model->BSIM3v32vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM3v32vbsrMax); warns_vbs++; } } else { if (vbs > model->BSIM3v32vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM3v32vbsrMax); warns_vbs++; } if (-1*vbs > model->BSIM3v32vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->BSIM3v32vbdMax); warns_vbs++; } } } else { if (model->BSIM3v32type > 0) { if (vbs > model->BSIM3v32vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->BSIM3v32vbsMax); warns_vbs++; } if (-1*vbs > model->BSIM3v32vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM3v32vbsrMax); warns_vbs++; } } else { if (vbs > model->BSIM3v32vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM3v32vbsrMax); warns_vbs++; } if (-1*vbs > model->BSIM3v32vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->BSIM3v32vbsMax); warns_vbs++; } } } } if (!model->BSIM3v32vbdrMaxGiven) { if (fabs(vbd) > model->BSIM3v32vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->BSIM3v32vbdMax); warns_vbd++; } } else { if (model->BSIM3v32type > 0) { if (vbd > model->BSIM3v32vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->BSIM3v32vbdMax); warns_vbd++; } if (-1*vbd > model->BSIM3v32vbdrMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbdr_max=%g\n", vbd, model->BSIM3v32vbdrMax); warns_vbd++; } } else { if (vbd > model->BSIM3v32vbdrMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbdr_max=%g\n", vbd, model->BSIM3v32vbdrMax); warns_vbd++; } if (-1*vbd > model->BSIM3v32vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->BSIM3v32vbdMax); warns_vbd++; } } } } } return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim3v32/b3v32pzld.c0000644000175000017500000004036313546075722022436 0ustar carstencarsten/**** BSIM3v3.2.4, Released by Xuemei Xi 12/21/2001 ****/ /********** * Copyright 2001 Regents of the University of California. All rights reserved. * File: b3pzld.c of BSIM3v3.2.4 * Author: 1995 Min-Chie Jeng and Mansun Chan. * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi * Modified by Paolo Nenzi 2002 **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "bsim3v32def.h" #include "ngspice/suffix.h" int BSIM3v32pzLoad (GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { BSIM3v32model *model = (BSIM3v32model*)inModel; BSIM3v32instance *here; double xcggb, xcgdb, xcgsb, xcgbb, xcbgb, xcbdb, xcbsb, xcbbb; double xcdgb, xcddb, xcdsb, xcdbb, xcsgb, xcsdb, xcssb, xcsbb; double gdpr, gspr, gds, gbd, gbs, capbd, capbs, FwdSum, RevSum, Gm, Gmbs; double cggb, cgdb, cgsb, cbgb, cbdb, cbsb, cddb, cdgb, cdsb; double GSoverlapCap, GDoverlapCap, GBoverlapCap; double dxpart, sxpart, xgtg, xgtd, xgts, xgtb; double xcqgb = 0.0, xcqdb = 0.0, xcqsb = 0.0, xcqbb = 0.0; double gbspsp, gbbdp, gbbsp, gbspg, gbspb; double gbspdp, gbdpdp, gbdpg, gbdpb, gbdpsp; double ddxpart_dVd, ddxpart_dVg, ddxpart_dVb, ddxpart_dVs; double dsxpart_dVd, dsxpart_dVg, dsxpart_dVb, dsxpart_dVs; double T1, CoxWL, qcheq, Cdg, Cdd, Cds, Csg, Csd, Css; double ScalingFactor = 1.0e-9; double m; for (; model != NULL; model = BSIM3v32nextModel(model)) { for (here = BSIM3v32instances(model); here!= NULL; here = BSIM3v32nextInstance(here)) { if (here->BSIM3v32mode >= 0) { Gm = here->BSIM3v32gm; Gmbs = here->BSIM3v32gmbs; FwdSum = Gm + Gmbs; RevSum = 0.0; gbbdp = -here->BSIM3v32gbds; gbbsp = here->BSIM3v32gbds + here->BSIM3v32gbgs + here->BSIM3v32gbbs; gbdpg = here->BSIM3v32gbgs; gbdpdp = here->BSIM3v32gbds; gbdpb = here->BSIM3v32gbbs; gbdpsp = -(gbdpg + gbdpdp + gbdpb); gbspg = 0.0; gbspdp = 0.0; gbspb = 0.0; gbspsp = 0.0; if (here->BSIM3v32nqsMod == 0) { cggb = here->BSIM3v32cggb; cgsb = here->BSIM3v32cgsb; cgdb = here->BSIM3v32cgdb; cbgb = here->BSIM3v32cbgb; cbsb = here->BSIM3v32cbsb; cbdb = here->BSIM3v32cbdb; cdgb = here->BSIM3v32cdgb; cdsb = here->BSIM3v32cdsb; cddb = here->BSIM3v32cddb; xgtg = xgtd = xgts = xgtb = 0.0; sxpart = 0.6; dxpart = 0.4; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { cggb = cgdb = cgsb = 0.0; cbgb = cbdb = cbsb = 0.0; cdgb = cddb = cdsb = 0.0; xgtg = here->BSIM3v32gtg; xgtd = here->BSIM3v32gtd; xgts = here->BSIM3v32gts; xgtb = here->BSIM3v32gtb; xcqgb = here->BSIM3v32cqgb; xcqdb = here->BSIM3v32cqdb; xcqsb = here->BSIM3v32cqsb; xcqbb = here->BSIM3v32cqbb; CoxWL = model->BSIM3v32cox * here->pParam->BSIM3v32weffCV * here->pParam->BSIM3v32leffCV; qcheq = -(here->BSIM3v32qgate + here->BSIM3v32qbulk); if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM3v32xpart < 0.5) { dxpart = 0.4; } else if (model->BSIM3v32xpart > 0.5) { dxpart = 0.0; } else { dxpart = 0.5; } ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; } else { dxpart = here->BSIM3v32qdrn / qcheq; Cdd = here->BSIM3v32cddb; Csd = -(here->BSIM3v32cgdb + here->BSIM3v32cddb + here->BSIM3v32cbdb); ddxpart_dVd = (Cdd - dxpart * (Cdd + Csd)) / qcheq; Cdg = here->BSIM3v32cdgb; Csg = -(here->BSIM3v32cggb + here->BSIM3v32cdgb + here->BSIM3v32cbgb); ddxpart_dVg = (Cdg - dxpart * (Cdg + Csg)) / qcheq; Cds = here->BSIM3v32cdsb; Css = -(here->BSIM3v32cgsb + here->BSIM3v32cdsb + here->BSIM3v32cbsb); ddxpart_dVs = (Cds - dxpart * (Cds + Css)) / qcheq; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); } sxpart = 1.0 - dxpart; dsxpart_dVd = -ddxpart_dVd; dsxpart_dVg = -ddxpart_dVg; dsxpart_dVs = -ddxpart_dVs; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); } } else { Gm = -here->BSIM3v32gm; Gmbs = -here->BSIM3v32gmbs; FwdSum = 0.0; RevSum = -(Gm + Gmbs); gbbsp = -here->BSIM3v32gbds; gbbdp = here->BSIM3v32gbds + here->BSIM3v32gbgs + here->BSIM3v32gbbs; gbdpg = 0.0; gbdpsp = 0.0; gbdpb = 0.0; gbdpdp = 0.0; gbspg = here->BSIM3v32gbgs; gbspsp = here->BSIM3v32gbds; gbspb = here->BSIM3v32gbbs; gbspdp = -(gbspg + gbspsp + gbspb); if (here->BSIM3v32nqsMod == 0) { cggb = here->BSIM3v32cggb; cgsb = here->BSIM3v32cgdb; cgdb = here->BSIM3v32cgsb; cbgb = here->BSIM3v32cbgb; cbsb = here->BSIM3v32cbdb; cbdb = here->BSIM3v32cbsb; cdgb = -(here->BSIM3v32cdgb + cggb + cbgb); cdsb = -(here->BSIM3v32cddb + cgsb + cbsb); cddb = -(here->BSIM3v32cdsb + cgdb + cbdb); xgtg = xgtd = xgts = xgtb = 0.0; sxpart = 0.4; dxpart = 0.6; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { cggb = cgdb = cgsb = 0.0; cbgb = cbdb = cbsb = 0.0; cdgb = cddb = cdsb = 0.0; xgtg = here->BSIM3v32gtg; xgtd = here->BSIM3v32gts; xgts = here->BSIM3v32gtd; xgtb = here->BSIM3v32gtb; xcqgb = here->BSIM3v32cqgb; xcqdb = here->BSIM3v32cqsb; xcqsb = here->BSIM3v32cqdb; xcqbb = here->BSIM3v32cqbb; CoxWL = model->BSIM3v32cox * here->pParam->BSIM3v32weffCV * here->pParam->BSIM3v32leffCV; qcheq = -(here->BSIM3v32qgate + here->BSIM3v32qbulk); if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM3v32xpart < 0.5) { sxpart = 0.4; } else if (model->BSIM3v32xpart > 0.5) { sxpart = 0.0; } else { sxpart = 0.5; } dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { sxpart = here->BSIM3v32qdrn / qcheq; Css = here->BSIM3v32cddb; Cds = -(here->BSIM3v32cgdb + here->BSIM3v32cddb + here->BSIM3v32cbdb); dsxpart_dVs = (Css - sxpart * (Css + Cds)) / qcheq; Csg = here->BSIM3v32cdgb; Cdg = -(here->BSIM3v32cggb + here->BSIM3v32cdgb + here->BSIM3v32cbgb); dsxpart_dVg = (Csg - sxpart * (Csg + Cdg)) / qcheq; Csd = here->BSIM3v32cdsb; Cdd = -(here->BSIM3v32cgsb + here->BSIM3v32cdsb + here->BSIM3v32cbsb); dsxpart_dVd = (Csd - sxpart * (Csd + Cdd)) / qcheq; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); } dxpart = 1.0 - sxpart; ddxpart_dVd = -dsxpart_dVd; ddxpart_dVg = -dsxpart_dVg; ddxpart_dVs = -dsxpart_dVs; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); } } T1 = *(ckt->CKTstate0 + here->BSIM3v32qdef) * here->BSIM3v32gtau; gdpr = here->BSIM3v32drainConductance; gspr = here->BSIM3v32sourceConductance; gds = here->BSIM3v32gds; gbd = here->BSIM3v32gbd; gbs = here->BSIM3v32gbs; capbd = here->BSIM3v32capbd; capbs = here->BSIM3v32capbs; GSoverlapCap = here->BSIM3v32cgso; GDoverlapCap = here->BSIM3v32cgdo; GBoverlapCap = here->pParam->BSIM3v32cgbo; xcdgb = (cdgb - GDoverlapCap); xcddb = (cddb + capbd + GDoverlapCap); xcdsb = cdsb; xcdbb = -(xcdgb + xcddb + xcdsb); xcsgb = -(cggb + cbgb + cdgb + GSoverlapCap); xcsdb = -(cgdb + cbdb + cddb); xcssb = (capbs + GSoverlapCap - (cgsb + cbsb + cdsb)); xcsbb = -(xcsgb + xcsdb + xcssb); xcggb = (cggb + GDoverlapCap + GSoverlapCap + GBoverlapCap); xcgdb = (cgdb - GDoverlapCap); xcgsb = (cgsb - GSoverlapCap); xcgbb = -(xcggb + xcgdb + xcgsb); xcbgb = (cbgb - GBoverlapCap); xcbdb = (cbdb - capbd); xcbsb = (cbsb - capbs); xcbbb = -(xcbgb + xcbdb + xcbsb); m = here->BSIM3v32m; *(here->BSIM3v32GgPtr ) += m * (xcggb * s->real); *(here->BSIM3v32GgPtr +1) += m * (xcggb * s->imag); *(here->BSIM3v32BbPtr ) += m * (xcbbb * s->real); *(here->BSIM3v32BbPtr +1) += m * (xcbbb * s->imag); *(here->BSIM3v32DPdpPtr ) += m * (xcddb * s->real); *(here->BSIM3v32DPdpPtr +1) += m * (xcddb * s->imag); *(here->BSIM3v32SPspPtr ) += m * (xcssb * s->real); *(here->BSIM3v32SPspPtr +1) += m * (xcssb * s->imag); *(here->BSIM3v32GbPtr ) += m * (xcgbb * s->real); *(here->BSIM3v32GbPtr +1) += m * (xcgbb * s->imag); *(here->BSIM3v32GdpPtr ) += m * (xcgdb * s->real); *(here->BSIM3v32GdpPtr +1) += m * (xcgdb * s->imag); *(here->BSIM3v32GspPtr ) += m * (xcgsb * s->real); *(here->BSIM3v32GspPtr +1) += m * (xcgsb * s->imag); *(here->BSIM3v32BgPtr ) += m * (xcbgb * s->real); *(here->BSIM3v32BgPtr +1) += m * (xcbgb * s->imag); *(here->BSIM3v32BdpPtr ) += m * (xcbdb * s->real); *(here->BSIM3v32BdpPtr +1) += m * (xcbdb * s->imag); *(here->BSIM3v32BspPtr ) += m * (xcbsb * s->real); *(here->BSIM3v32BspPtr +1) += m * (xcbsb * s->imag); *(here->BSIM3v32DPgPtr ) += m * (xcdgb * s->real); *(here->BSIM3v32DPgPtr +1) += m * (xcdgb * s->imag); *(here->BSIM3v32DPbPtr ) += m * (xcdbb * s->real); *(here->BSIM3v32DPbPtr +1) += m * (xcdbb * s->imag); *(here->BSIM3v32DPspPtr ) += m * (xcdsb * s->real); *(here->BSIM3v32DPspPtr +1) += m * (xcdsb * s->imag); *(here->BSIM3v32SPgPtr ) += m * (xcsgb * s->real); *(here->BSIM3v32SPgPtr +1) += m * (xcsgb * s->imag); *(here->BSIM3v32SPbPtr ) += m * (xcsbb * s->real); *(here->BSIM3v32SPbPtr +1) += m * (xcsbb * s->imag); *(here->BSIM3v32SPdpPtr ) += m * (xcsdb * s->real); *(here->BSIM3v32SPdpPtr +1) += m * (xcsdb * s->imag); *(here->BSIM3v32DdPtr) += m * gdpr; *(here->BSIM3v32DdpPtr) -= m * gdpr; *(here->BSIM3v32DPdPtr) -= m * gdpr; *(here->BSIM3v32SsPtr) += m * gspr; *(here->BSIM3v32SspPtr) -= m * gspr; *(here->BSIM3v32SPsPtr) -= m * gspr; *(here->BSIM3v32BgPtr) -= m * here->BSIM3v32gbgs; *(here->BSIM3v32BbPtr) += m * (gbd + gbs - here->BSIM3v32gbbs); *(here->BSIM3v32BdpPtr) -= m * (gbd - gbbdp); *(here->BSIM3v32BspPtr) -= m * (gbs - gbbsp); *(here->BSIM3v32DPgPtr) += Gm + dxpart * xgtg + T1 * ddxpart_dVg + gbdpg; *(here->BSIM3v32DPdpPtr) += gdpr + gds + gbd + RevSum + dxpart * xgtd + T1 * ddxpart_dVd + gbdpdp; *(here->BSIM3v32DPspPtr) -= gds + FwdSum - dxpart * xgts - T1 * ddxpart_dVs - gbdpsp; *(here->BSIM3v32DPbPtr) -= gbd - Gmbs - dxpart * xgtb - T1 * ddxpart_dVb - gbdpb; *(here->BSIM3v32SPgPtr) -= Gm - sxpart * xgtg - T1 * dsxpart_dVg - gbspg; *(here->BSIM3v32SPspPtr) += gspr + gds + gbs + FwdSum + sxpart * xgts + T1 * dsxpart_dVs + gbspsp; *(here->BSIM3v32SPbPtr) -= gbs + Gmbs - sxpart * xgtb - T1 * dsxpart_dVb - gbspb; *(here->BSIM3v32SPdpPtr) -= gds + RevSum - sxpart * xgtd - T1 * dsxpart_dVd - gbspdp; *(here->BSIM3v32GgPtr) -= xgtg; *(here->BSIM3v32GbPtr) -= xgtb; *(here->BSIM3v32GdpPtr) -= xgtd; *(here->BSIM3v32GspPtr) -= xgts; if (here->BSIM3v32nqsMod) { *(here->BSIM3v32QqPtr ) += m * (s->real * ScalingFactor); *(here->BSIM3v32QqPtr +1) += m * (s->imag * ScalingFactor); *(here->BSIM3v32QgPtr ) -= m * (xcqgb * s->real); *(here->BSIM3v32QgPtr +1) -= m * (xcqgb * s->imag); *(here->BSIM3v32QdpPtr ) -= m * (xcqdb * s->real); *(here->BSIM3v32QdpPtr +1) -= m * (xcqdb * s->imag); *(here->BSIM3v32QbPtr ) -= m * (xcqbb * s->real); *(here->BSIM3v32QbPtr +1) -= m * (xcqbb * s->imag); *(here->BSIM3v32QspPtr ) -= m * (xcqsb * s->real); *(here->BSIM3v32QspPtr +1) -= m * (xcqsb * s->imag); *(here->BSIM3v32GqPtr) -= m * (here->BSIM3v32gtau); *(here->BSIM3v32DPqPtr) += m * (dxpart * here->BSIM3v32gtau); *(here->BSIM3v32SPqPtr) += m * (sxpart * here->BSIM3v32gtau); *(here->BSIM3v32QqPtr) += m * (here->BSIM3v32gtau); *(here->BSIM3v32QgPtr) += m * xgtg; *(here->BSIM3v32QdpPtr) += m * xgtd; *(here->BSIM3v32QbPtr) += m * xgtb; *(here->BSIM3v32QspPtr) += m * xgts; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v32/b3v32ask.c0000644000175000017500000002027613546075722022244 0ustar carstencarsten/**** BSIM3v3.2.4, Released by Xuemei Xi 12/14/2001 ****/ /********** * Copyright 2001 Regents of the University of California. All rights reserved. * File: b3ask.c of BSIM3v3.2.4 * Author: 1995 Min-Chie Jeng and Mansun Chan * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi * Modified bt Paolo Nenzi 2002 and Dietmar Warning 2003 **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "bsim3v32def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3v32ask (CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { BSIM3v32instance *here = (BSIM3v32instance*)inst; BSIM3v32model *model = BSIM3v32modPtr(here); /* for lmlt */ NG_IGNORE(select); switch(which) { case BSIM3v32_L: value->rValue = here->BSIM3v32l; value->rValue *= model->BSIM3v32lmlt; return(OK); case BSIM3v32_W: value->rValue = here->BSIM3v32w; return(OK); case BSIM3v32_M: value->rValue = here->BSIM3v32m; return (OK); case BSIM3v32_AS: value->rValue = here->BSIM3v32sourceArea; return(OK); case BSIM3v32_AD: value->rValue = here->BSIM3v32drainArea; return(OK); case BSIM3v32_PS: value->rValue = here->BSIM3v32sourcePerimeter; return(OK); case BSIM3v32_PD: value->rValue = here->BSIM3v32drainPerimeter; return(OK); case BSIM3v32_NRS: value->rValue = here->BSIM3v32sourceSquares; return(OK); case BSIM3v32_NRD: value->rValue = here->BSIM3v32drainSquares; return(OK); case BSIM3v32_OFF: value->rValue = here->BSIM3v32off; return(OK); case BSIM3v32_NQSMOD: value->iValue = here->BSIM3v32nqsMod; return(OK); case BSIM3v32_GEO: value->iValue = here->BSIM3v32geo; return(OK); case BSIM3v32_DELVTO: value->rValue = here->BSIM3v32delvto; return(OK); case BSIM3v32_MULU0: value->rValue = here->BSIM3v32mulu0; return(OK); case BSIM3v32_IC_VBS: value->rValue = here->BSIM3v32icVBS; return(OK); case BSIM3v32_IC_VDS: value->rValue = here->BSIM3v32icVDS; return(OK); case BSIM3v32_IC_VGS: value->rValue = here->BSIM3v32icVGS; return(OK); case BSIM3v32_DNODE: value->iValue = here->BSIM3v32dNode; return(OK); case BSIM3v32_GNODE: value->iValue = here->BSIM3v32gNode; return(OK); case BSIM3v32_SNODE: value->iValue = here->BSIM3v32sNode; return(OK); case BSIM3v32_BNODE: value->iValue = here->BSIM3v32bNode; return(OK); case BSIM3v32_DNODEPRIME: value->iValue = here->BSIM3v32dNodePrime; return(OK); case BSIM3v32_SNODEPRIME: value->iValue = here->BSIM3v32sNodePrime; return(OK); case BSIM3v32_SOURCECONDUCT: value->rValue = here->BSIM3v32sourceConductance; value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_DRAINCONDUCT: value->rValue = here->BSIM3v32drainConductance; value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_VBD: value->rValue = *(ckt->CKTstate0 + here->BSIM3v32vbd); return(OK); case BSIM3v32_VBS: value->rValue = *(ckt->CKTstate0 + here->BSIM3v32vbs); return(OK); case BSIM3v32_VGS: value->rValue = *(ckt->CKTstate0 + here->BSIM3v32vgs); return(OK); case BSIM3v32_VDS: value->rValue = *(ckt->CKTstate0 + here->BSIM3v32vds); return(OK); case BSIM3v32_CD: value->rValue = here->BSIM3v32cd; value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_CBS: value->rValue = here->BSIM3v32cbs; value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_CBD: value->rValue = here->BSIM3v32cbd; value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_GM: value->rValue = here->BSIM3v32gm; value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_GDS: value->rValue = here->BSIM3v32gds; value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_GMBS: value->rValue = here->BSIM3v32gmbs; value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_GBD: value->rValue = here->BSIM3v32gbd; value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_GBS: value->rValue = here->BSIM3v32gbs; value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_QB: value->rValue = *(ckt->CKTstate0 + here->BSIM3v32qb); value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_CQB: value->rValue = *(ckt->CKTstate0 + here->BSIM3v32cqb); value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_QG: value->rValue = *(ckt->CKTstate0 + here->BSIM3v32qg); value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_CQG: value->rValue = *(ckt->CKTstate0 + here->BSIM3v32cqg); value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_QD: value->rValue = *(ckt->CKTstate0 + here->BSIM3v32qd); value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_CQD: value->rValue = *(ckt->CKTstate0 + here->BSIM3v32cqd); value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_CGG: value->rValue = here->BSIM3v32cggb; value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_CGD: value->rValue = here->BSIM3v32cgdb; value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_CGS: value->rValue = here->BSIM3v32cgsb; value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_CDG: value->rValue = here->BSIM3v32cdgb; value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_CDD: value->rValue = here->BSIM3v32cddb; value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_CDS: value->rValue = here->BSIM3v32cdsb; value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_CBG: value->rValue = here->BSIM3v32cbgb; value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_CBDB: value->rValue = here->BSIM3v32cbdb; value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_CBSB: value->rValue = here->BSIM3v32cbsb; value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_CAPBD: value->rValue = here->BSIM3v32capbd; value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_CAPBS: value->rValue = here->BSIM3v32capbs; value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_VON: value->rValue = here->BSIM3v32von; return(OK); case BSIM3v32_VDSAT: value->rValue = here->BSIM3v32vdsat; return(OK); case BSIM3v32_QBS: value->rValue = *(ckt->CKTstate0 + here->BSIM3v32qbs); value->rValue *= here->BSIM3v32m; return(OK); case BSIM3v32_QBD: value->rValue = *(ckt->CKTstate0 + here->BSIM3v32qbd); value->rValue *= here->BSIM3v32m; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim3v32/bsim3v32init.c0000644000175000017500000000342613546075722023140 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "bsim3v32itf.h" #include "bsim3v32ext.h" #include "bsim3v32init.h" SPICEdev BSIM3v32info = { .DEVpublic = { .name = "BSIM3v32", .description = "Berkeley Short Channel IGFET Model Version-3", .terms = &BSIM3v32nSize, .numNames = &BSIM3v32nSize, .termNames = BSIM3v32names, .numInstanceParms = &BSIM3v32pTSize, .instanceParms = BSIM3v32pTable, .numModelParms = &BSIM3v32mPTSize, .modelParms = BSIM3v32mPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = BSIM3v32param, .DEVmodParam = BSIM3v32mParam, .DEVload = BSIM3v32load, .DEVsetup = BSIM3v32setup, .DEVunsetup = BSIM3v32unsetup, .DEVpzSetup = BSIM3v32setup, .DEVtemperature = BSIM3v32temp, .DEVtrunc = BSIM3v32trunc, .DEVfindBranch = NULL, .DEVacLoad = BSIM3v32acLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = BSIM3v32mDelete, .DEVdelete = NULL, .DEVsetic = BSIM3v32getic, .DEVask = BSIM3v32ask, .DEVmodAsk = BSIM3v32mAsk, .DEVpzLoad = BSIM3v32pzLoad, .DEVconvTest = BSIM3v32convTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = BSIM3v32noise, .DEVsoaCheck = BSIM3v32soaCheck, .DEVinstSize = &BSIM3v32iSize, .DEVmodSize = &BSIM3v32mSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_bsim3v32_info(void) { return &BSIM3v32info; } tmpk8ny_4pz/src/spicelib/devices/bsim3v32/b3v32trunc.c0000644000175000017500000000251713546075722022617 0ustar carstencarsten/**** BSIM3v3.2.4, Released by Xuemei Xi 12/21/2001 ****/ /********** * Copyright 2001 Regents of the University of California. All rights reserved. * File: b3trunc.c of BSIM3v3.2.4 * Author: 1995 Min-Chie Jeng and Mansun Chan. * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi * Modified by Poalo Nenzi 2002 **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3v32def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3v32trunc (GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { BSIM3v32model *model = (BSIM3v32model*)inModel; BSIM3v32instance *here; #ifdef STEPDEBUG double debugtemp; #endif /* STEPDEBUG */ for (; model != NULL; model = BSIM3v32nextModel(model)) { for (here = BSIM3v32instances(model); here != NULL; here = BSIM3v32nextInstance(here)) { #ifdef STEPDEBUG debugtemp = *timeStep; #endif /* STEPDEBUG */ CKTterr(here->BSIM3v32qb,ckt,timeStep); CKTterr(here->BSIM3v32qg,ckt,timeStep); CKTterr(here->BSIM3v32qd,ckt,timeStep); #ifdef STEPDEBUG if(debugtemp != *timeStep) { printf("device %s reduces step from %g to %g\n", here->BSIM3v32name,debugtemp,*timeStep); } #endif /* STEPDEBUG */ } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v32/b3v32mpar.c0000644000175000017500000017311413546075722022425 0ustar carstencarsten/**** BSIM3v3.2.4, Released by Xuemei Xi 12/21/2001 ****/ /********** * Copyright 2001 Regents of the University of California. All rights reserved. * File: b3mpar.c of BSIM3v3.2.4 * Author: 1995 Min-Chie Jeng and Mansun Chan. * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi * Modified by Paolo Nenzi 2002 and Dietmar Warning 2003 **********/ #include "ngspice/ngspice.h" #include "bsim3v32def.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3v32mParam(int param, IFvalue *value, GENmodel *inMod) { BSIM3v32model *mod = (BSIM3v32model*)inMod; switch(param) { case BSIM3v32_MOD_MOBMOD : mod->BSIM3v32mobMod = value->iValue; mod->BSIM3v32mobModGiven = TRUE; break; case BSIM3v32_MOD_BINUNIT : mod->BSIM3v32binUnit = value->iValue; mod->BSIM3v32binUnitGiven = TRUE; break; case BSIM3v32_MOD_PARAMCHK : mod->BSIM3v32paramChk = value->iValue; mod->BSIM3v32paramChkGiven = TRUE; break; case BSIM3v32_MOD_CAPMOD : mod->BSIM3v32capMod = value->iValue; mod->BSIM3v32capModGiven = TRUE; break; case BSIM3v32_MOD_ACMMOD: mod->BSIM3v32acmMod = value->iValue; mod->BSIM3v32acmModGiven = TRUE; break; case BSIM3v32_MOD_CALCACM: mod->BSIM3v32calcacm = value->iValue; mod->BSIM3v32calcacmGiven = TRUE; break; case BSIM3v32_MOD_NOIMOD : mod->BSIM3v32noiMod = value->iValue; mod->BSIM3v32noiModGiven = TRUE; break; case BSIM3v32_MOD_NQSMOD : mod->BSIM3v32nqsMod = value->iValue; mod->BSIM3v32nqsModGiven = TRUE; break; case BSIM3v32_MOD_VERSION : mod->BSIM3v32version = value->sValue; mod->BSIM3v32versionGiven = TRUE; break; case BSIM3v32_MOD_TOX : mod->BSIM3v32tox = value->rValue; mod->BSIM3v32toxGiven = TRUE; break; case BSIM3v32_MOD_TOXM : mod->BSIM3v32toxm = value->rValue; mod->BSIM3v32toxmGiven = TRUE; break; case BSIM3v32_MOD_CDSC : mod->BSIM3v32cdsc = value->rValue; mod->BSIM3v32cdscGiven = TRUE; break; case BSIM3v32_MOD_CDSCB : mod->BSIM3v32cdscb = value->rValue; mod->BSIM3v32cdscbGiven = TRUE; break; case BSIM3v32_MOD_CDSCD : mod->BSIM3v32cdscd = value->rValue; mod->BSIM3v32cdscdGiven = TRUE; break; case BSIM3v32_MOD_CIT : mod->BSIM3v32cit = value->rValue; mod->BSIM3v32citGiven = TRUE; break; case BSIM3v32_MOD_NFACTOR : mod->BSIM3v32nfactor = value->rValue; mod->BSIM3v32nfactorGiven = TRUE; break; case BSIM3v32_MOD_XJ: mod->BSIM3v32xj = value->rValue; mod->BSIM3v32xjGiven = TRUE; break; case BSIM3v32_MOD_VSAT: mod->BSIM3v32vsat = value->rValue; mod->BSIM3v32vsatGiven = TRUE; break; case BSIM3v32_MOD_A0: mod->BSIM3v32a0 = value->rValue; mod->BSIM3v32a0Given = TRUE; break; case BSIM3v32_MOD_AGS: mod->BSIM3v32ags= value->rValue; mod->BSIM3v32agsGiven = TRUE; break; case BSIM3v32_MOD_A1: mod->BSIM3v32a1 = value->rValue; mod->BSIM3v32a1Given = TRUE; break; case BSIM3v32_MOD_A2: mod->BSIM3v32a2 = value->rValue; mod->BSIM3v32a2Given = TRUE; break; case BSIM3v32_MOD_AT: mod->BSIM3v32at = value->rValue; mod->BSIM3v32atGiven = TRUE; break; case BSIM3v32_MOD_KETA: mod->BSIM3v32keta = value->rValue; mod->BSIM3v32ketaGiven = TRUE; break; case BSIM3v32_MOD_NSUB: mod->BSIM3v32nsub = value->rValue; mod->BSIM3v32nsubGiven = TRUE; break; case BSIM3v32_MOD_NPEAK: mod->BSIM3v32npeak = value->rValue; mod->BSIM3v32npeakGiven = TRUE; if (mod->BSIM3v32npeak > 1.0e20) mod->BSIM3v32npeak *= 1.0e-6; break; case BSIM3v32_MOD_NGATE: mod->BSIM3v32ngate = value->rValue; mod->BSIM3v32ngateGiven = TRUE; if (mod->BSIM3v32ngate > 1.0e23) mod->BSIM3v32ngate *= 1.0e-6; break; case BSIM3v32_MOD_GAMMA1: mod->BSIM3v32gamma1 = value->rValue; mod->BSIM3v32gamma1Given = TRUE; break; case BSIM3v32_MOD_GAMMA2: mod->BSIM3v32gamma2 = value->rValue; mod->BSIM3v32gamma2Given = TRUE; break; case BSIM3v32_MOD_VBX: mod->BSIM3v32vbx = value->rValue; mod->BSIM3v32vbxGiven = TRUE; break; case BSIM3v32_MOD_VBM: mod->BSIM3v32vbm = value->rValue; mod->BSIM3v32vbmGiven = TRUE; break; case BSIM3v32_MOD_XT: mod->BSIM3v32xt = value->rValue; mod->BSIM3v32xtGiven = TRUE; break; case BSIM3v32_MOD_K1: mod->BSIM3v32k1 = value->rValue; mod->BSIM3v32k1Given = TRUE; break; case BSIM3v32_MOD_KT1: mod->BSIM3v32kt1 = value->rValue; mod->BSIM3v32kt1Given = TRUE; break; case BSIM3v32_MOD_KT1L: mod->BSIM3v32kt1l = value->rValue; mod->BSIM3v32kt1lGiven = TRUE; break; case BSIM3v32_MOD_KT2: mod->BSIM3v32kt2 = value->rValue; mod->BSIM3v32kt2Given = TRUE; break; case BSIM3v32_MOD_K2: mod->BSIM3v32k2 = value->rValue; mod->BSIM3v32k2Given = TRUE; break; case BSIM3v32_MOD_K3: mod->BSIM3v32k3 = value->rValue; mod->BSIM3v32k3Given = TRUE; break; case BSIM3v32_MOD_K3B: mod->BSIM3v32k3b = value->rValue; mod->BSIM3v32k3bGiven = TRUE; break; case BSIM3v32_MOD_NLX: mod->BSIM3v32nlx = value->rValue; mod->BSIM3v32nlxGiven = TRUE; break; case BSIM3v32_MOD_W0: mod->BSIM3v32w0 = value->rValue; mod->BSIM3v32w0Given = TRUE; break; case BSIM3v32_MOD_DVT0: mod->BSIM3v32dvt0 = value->rValue; mod->BSIM3v32dvt0Given = TRUE; break; case BSIM3v32_MOD_DVT1: mod->BSIM3v32dvt1 = value->rValue; mod->BSIM3v32dvt1Given = TRUE; break; case BSIM3v32_MOD_DVT2: mod->BSIM3v32dvt2 = value->rValue; mod->BSIM3v32dvt2Given = TRUE; break; case BSIM3v32_MOD_DVT0W: mod->BSIM3v32dvt0w = value->rValue; mod->BSIM3v32dvt0wGiven = TRUE; break; case BSIM3v32_MOD_DVT1W: mod->BSIM3v32dvt1w = value->rValue; mod->BSIM3v32dvt1wGiven = TRUE; break; case BSIM3v32_MOD_DVT2W: mod->BSIM3v32dvt2w = value->rValue; mod->BSIM3v32dvt2wGiven = TRUE; break; case BSIM3v32_MOD_DROUT: mod->BSIM3v32drout = value->rValue; mod->BSIM3v32droutGiven = TRUE; break; case BSIM3v32_MOD_DSUB: mod->BSIM3v32dsub = value->rValue; mod->BSIM3v32dsubGiven = TRUE; break; case BSIM3v32_MOD_VTH0: mod->BSIM3v32vth0 = value->rValue; mod->BSIM3v32vth0Given = TRUE; break; case BSIM3v32_MOD_UA: mod->BSIM3v32ua = value->rValue; mod->BSIM3v32uaGiven = TRUE; break; case BSIM3v32_MOD_UA1: mod->BSIM3v32ua1 = value->rValue; mod->BSIM3v32ua1Given = TRUE; break; case BSIM3v32_MOD_UB: mod->BSIM3v32ub = value->rValue; mod->BSIM3v32ubGiven = TRUE; break; case BSIM3v32_MOD_UB1: mod->BSIM3v32ub1 = value->rValue; mod->BSIM3v32ub1Given = TRUE; break; case BSIM3v32_MOD_UC: mod->BSIM3v32uc = value->rValue; mod->BSIM3v32ucGiven = TRUE; break; case BSIM3v32_MOD_UC1: mod->BSIM3v32uc1 = value->rValue; mod->BSIM3v32uc1Given = TRUE; break; case BSIM3v32_MOD_U0 : mod->BSIM3v32u0 = value->rValue; mod->BSIM3v32u0Given = TRUE; break; case BSIM3v32_MOD_UTE : mod->BSIM3v32ute = value->rValue; mod->BSIM3v32uteGiven = TRUE; break; case BSIM3v32_MOD_VOFF: mod->BSIM3v32voff = value->rValue; mod->BSIM3v32voffGiven = TRUE; break; case BSIM3v32_MOD_DELTA : mod->BSIM3v32delta = value->rValue; mod->BSIM3v32deltaGiven = TRUE; break; case BSIM3v32_MOD_RDSW: mod->BSIM3v32rdsw = value->rValue; mod->BSIM3v32rdswGiven = TRUE; break; case BSIM3v32_MOD_PRWG: mod->BSIM3v32prwg = value->rValue; mod->BSIM3v32prwgGiven = TRUE; break; case BSIM3v32_MOD_PRWB: mod->BSIM3v32prwb = value->rValue; mod->BSIM3v32prwbGiven = TRUE; break; case BSIM3v32_MOD_PRT: mod->BSIM3v32prt = value->rValue; mod->BSIM3v32prtGiven = TRUE; break; case BSIM3v32_MOD_ETA0: mod->BSIM3v32eta0 = value->rValue; mod->BSIM3v32eta0Given = TRUE; break; case BSIM3v32_MOD_ETAB: mod->BSIM3v32etab = value->rValue; mod->BSIM3v32etabGiven = TRUE; break; case BSIM3v32_MOD_PCLM: mod->BSIM3v32pclm = value->rValue; mod->BSIM3v32pclmGiven = TRUE; break; case BSIM3v32_MOD_PDIBL1: mod->BSIM3v32pdibl1 = value->rValue; mod->BSIM3v32pdibl1Given = TRUE; break; case BSIM3v32_MOD_PDIBL2: mod->BSIM3v32pdibl2 = value->rValue; mod->BSIM3v32pdibl2Given = TRUE; break; case BSIM3v32_MOD_PDIBLB: mod->BSIM3v32pdiblb = value->rValue; mod->BSIM3v32pdiblbGiven = TRUE; break; case BSIM3v32_MOD_PSCBE1: mod->BSIM3v32pscbe1 = value->rValue; mod->BSIM3v32pscbe1Given = TRUE; break; case BSIM3v32_MOD_PSCBE2: mod->BSIM3v32pscbe2 = value->rValue; mod->BSIM3v32pscbe2Given = TRUE; break; case BSIM3v32_MOD_PVAG: mod->BSIM3v32pvag = value->rValue; mod->BSIM3v32pvagGiven = TRUE; break; case BSIM3v32_MOD_WR : mod->BSIM3v32wr = value->rValue; mod->BSIM3v32wrGiven = TRUE; break; case BSIM3v32_MOD_DWG : mod->BSIM3v32dwg = value->rValue; mod->BSIM3v32dwgGiven = TRUE; break; case BSIM3v32_MOD_DWB : mod->BSIM3v32dwb = value->rValue; mod->BSIM3v32dwbGiven = TRUE; break; case BSIM3v32_MOD_B0 : mod->BSIM3v32b0 = value->rValue; mod->BSIM3v32b0Given = TRUE; break; case BSIM3v32_MOD_B1 : mod->BSIM3v32b1 = value->rValue; mod->BSIM3v32b1Given = TRUE; break; case BSIM3v32_MOD_ALPHA0 : mod->BSIM3v32alpha0 = value->rValue; mod->BSIM3v32alpha0Given = TRUE; break; case BSIM3v32_MOD_ALPHA1 : mod->BSIM3v32alpha1 = value->rValue; mod->BSIM3v32alpha1Given = TRUE; break; case BSIM3v32_MOD_BETA0 : mod->BSIM3v32beta0 = value->rValue; mod->BSIM3v32beta0Given = TRUE; break; case BSIM3v32_MOD_IJTH : mod->BSIM3v32ijth = value->rValue; mod->BSIM3v32ijthGiven = TRUE; break; case BSIM3v32_MOD_VFB : mod->BSIM3v32vfb = value->rValue; mod->BSIM3v32vfbGiven = TRUE; break; case BSIM3v32_MOD_ELM : mod->BSIM3v32elm = value->rValue; mod->BSIM3v32elmGiven = TRUE; break; case BSIM3v32_MOD_CGSL : mod->BSIM3v32cgsl = value->rValue; mod->BSIM3v32cgslGiven = TRUE; break; case BSIM3v32_MOD_CGDL : mod->BSIM3v32cgdl = value->rValue; mod->BSIM3v32cgdlGiven = TRUE; break; case BSIM3v32_MOD_CKAPPA : mod->BSIM3v32ckappa = value->rValue; mod->BSIM3v32ckappaGiven = TRUE; break; case BSIM3v32_MOD_CF : mod->BSIM3v32cf = value->rValue; mod->BSIM3v32cfGiven = TRUE; break; case BSIM3v32_MOD_CLC : mod->BSIM3v32clc = value->rValue; mod->BSIM3v32clcGiven = TRUE; break; case BSIM3v32_MOD_CLE : mod->BSIM3v32cle = value->rValue; mod->BSIM3v32cleGiven = TRUE; break; case BSIM3v32_MOD_DWC : mod->BSIM3v32dwc = value->rValue; mod->BSIM3v32dwcGiven = TRUE; break; case BSIM3v32_MOD_DLC : mod->BSIM3v32dlc = value->rValue; mod->BSIM3v32dlcGiven = TRUE; break; case BSIM3v32_MOD_VFBCV : mod->BSIM3v32vfbcv = value->rValue; mod->BSIM3v32vfbcvGiven = TRUE; break; case BSIM3v32_MOD_ACDE : mod->BSIM3v32acde = value->rValue; mod->BSIM3v32acdeGiven = TRUE; break; case BSIM3v32_MOD_MOIN : mod->BSIM3v32moin = value->rValue; mod->BSIM3v32moinGiven = TRUE; break; case BSIM3v32_MOD_NOFF : mod->BSIM3v32noff = value->rValue; mod->BSIM3v32noffGiven = TRUE; break; case BSIM3v32_MOD_VOFFCV : mod->BSIM3v32voffcv = value->rValue; mod->BSIM3v32voffcvGiven = TRUE; break; case BSIM3v32_MOD_TCJ : mod->BSIM3v32tcj = value->rValue; mod->BSIM3v32tcjGiven = TRUE; break; case BSIM3v32_MOD_TPB : mod->BSIM3v32tpb = value->rValue; mod->BSIM3v32tpbGiven = TRUE; break; case BSIM3v32_MOD_TCJSW : mod->BSIM3v32tcjsw = value->rValue; mod->BSIM3v32tcjswGiven = TRUE; break; case BSIM3v32_MOD_TPBSW : mod->BSIM3v32tpbsw = value->rValue; mod->BSIM3v32tpbswGiven = TRUE; break; case BSIM3v32_MOD_TCJSWG : mod->BSIM3v32tcjswg = value->rValue; mod->BSIM3v32tcjswgGiven = TRUE; break; case BSIM3v32_MOD_TPBSWG : mod->BSIM3v32tpbswg = value->rValue; mod->BSIM3v32tpbswgGiven = TRUE; break; /* acm model */ case BSIM3v32_MOD_HDIF: mod->BSIM3v32hdif = value->rValue; mod->BSIM3v32hdifGiven = TRUE; break; case BSIM3v32_MOD_LDIF: mod->BSIM3v32ldif = value->rValue; mod->BSIM3v32ldifGiven = TRUE; break; case BSIM3v32_MOD_LD: mod->BSIM3v32ld = value->rValue; mod->BSIM3v32ldGiven = TRUE; break; case BSIM3v32_MOD_RD: mod->BSIM3v32rd = value->rValue; mod->BSIM3v32rdGiven = TRUE; break; case BSIM3v32_MOD_RS: mod->BSIM3v32rs = value->rValue; mod->BSIM3v32rsGiven = TRUE; break; case BSIM3v32_MOD_RDC: mod->BSIM3v32rdc = value->rValue; mod->BSIM3v32rdcGiven = TRUE; break; case BSIM3v32_MOD_RSC: mod->BSIM3v32rsc = value->rValue; mod->BSIM3v32rscGiven = TRUE; break; case BSIM3v32_MOD_WMLT: mod->BSIM3v32wmlt = value->rValue; mod->BSIM3v32wmltGiven = TRUE; break; /* Length shrink */ case BSIM3v32_MOD_LMLT: mod->BSIM3v32lmlt = value->rValue; mod->BSIM3v32lmltGiven = TRUE; break; /* Length dependence */ case BSIM3v32_MOD_LCDSC : mod->BSIM3v32lcdsc = value->rValue; mod->BSIM3v32lcdscGiven = TRUE; break; case BSIM3v32_MOD_LCDSCB : mod->BSIM3v32lcdscb = value->rValue; mod->BSIM3v32lcdscbGiven = TRUE; break; case BSIM3v32_MOD_LCDSCD : mod->BSIM3v32lcdscd = value->rValue; mod->BSIM3v32lcdscdGiven = TRUE; break; case BSIM3v32_MOD_LCIT : mod->BSIM3v32lcit = value->rValue; mod->BSIM3v32lcitGiven = TRUE; break; case BSIM3v32_MOD_LNFACTOR : mod->BSIM3v32lnfactor = value->rValue; mod->BSIM3v32lnfactorGiven = TRUE; break; case BSIM3v32_MOD_LXJ: mod->BSIM3v32lxj = value->rValue; mod->BSIM3v32lxjGiven = TRUE; break; case BSIM3v32_MOD_LVSAT: mod->BSIM3v32lvsat = value->rValue; mod->BSIM3v32lvsatGiven = TRUE; break; case BSIM3v32_MOD_LA0: mod->BSIM3v32la0 = value->rValue; mod->BSIM3v32la0Given = TRUE; break; case BSIM3v32_MOD_LAGS: mod->BSIM3v32lags = value->rValue; mod->BSIM3v32lagsGiven = TRUE; break; case BSIM3v32_MOD_LA1: mod->BSIM3v32la1 = value->rValue; mod->BSIM3v32la1Given = TRUE; break; case BSIM3v32_MOD_LA2: mod->BSIM3v32la2 = value->rValue; mod->BSIM3v32la2Given = TRUE; break; case BSIM3v32_MOD_LAT: mod->BSIM3v32lat = value->rValue; mod->BSIM3v32latGiven = TRUE; break; case BSIM3v32_MOD_LKETA: mod->BSIM3v32lketa = value->rValue; mod->BSIM3v32lketaGiven = TRUE; break; case BSIM3v32_MOD_LNSUB: mod->BSIM3v32lnsub = value->rValue; mod->BSIM3v32lnsubGiven = TRUE; break; case BSIM3v32_MOD_LNPEAK: mod->BSIM3v32lnpeak = value->rValue; mod->BSIM3v32lnpeakGiven = TRUE; if (mod->BSIM3v32lnpeak > 1.0e20) mod->BSIM3v32lnpeak *= 1.0e-6; break; case BSIM3v32_MOD_LNGATE: mod->BSIM3v32lngate = value->rValue; mod->BSIM3v32lngateGiven = TRUE; if (mod->BSIM3v32lngate > 1.0e23) mod->BSIM3v32lngate *= 1.0e-6; break; case BSIM3v32_MOD_LGAMMA1: mod->BSIM3v32lgamma1 = value->rValue; mod->BSIM3v32lgamma1Given = TRUE; break; case BSIM3v32_MOD_LGAMMA2: mod->BSIM3v32lgamma2 = value->rValue; mod->BSIM3v32lgamma2Given = TRUE; break; case BSIM3v32_MOD_LVBX: mod->BSIM3v32lvbx = value->rValue; mod->BSIM3v32lvbxGiven = TRUE; break; case BSIM3v32_MOD_LVBM: mod->BSIM3v32lvbm = value->rValue; mod->BSIM3v32lvbmGiven = TRUE; break; case BSIM3v32_MOD_LXT: mod->BSIM3v32lxt = value->rValue; mod->BSIM3v32lxtGiven = TRUE; break; case BSIM3v32_MOD_LK1: mod->BSIM3v32lk1 = value->rValue; mod->BSIM3v32lk1Given = TRUE; break; case BSIM3v32_MOD_LKT1: mod->BSIM3v32lkt1 = value->rValue; mod->BSIM3v32lkt1Given = TRUE; break; case BSIM3v32_MOD_LKT1L: mod->BSIM3v32lkt1l = value->rValue; mod->BSIM3v32lkt1lGiven = TRUE; break; case BSIM3v32_MOD_LKT2: mod->BSIM3v32lkt2 = value->rValue; mod->BSIM3v32lkt2Given = TRUE; break; case BSIM3v32_MOD_LK2: mod->BSIM3v32lk2 = value->rValue; mod->BSIM3v32lk2Given = TRUE; break; case BSIM3v32_MOD_LK3: mod->BSIM3v32lk3 = value->rValue; mod->BSIM3v32lk3Given = TRUE; break; case BSIM3v32_MOD_LK3B: mod->BSIM3v32lk3b = value->rValue; mod->BSIM3v32lk3bGiven = TRUE; break; case BSIM3v32_MOD_LNLX: mod->BSIM3v32lnlx = value->rValue; mod->BSIM3v32lnlxGiven = TRUE; break; case BSIM3v32_MOD_LW0: mod->BSIM3v32lw0 = value->rValue; mod->BSIM3v32lw0Given = TRUE; break; case BSIM3v32_MOD_LDVT0: mod->BSIM3v32ldvt0 = value->rValue; mod->BSIM3v32ldvt0Given = TRUE; break; case BSIM3v32_MOD_LDVT1: mod->BSIM3v32ldvt1 = value->rValue; mod->BSIM3v32ldvt1Given = TRUE; break; case BSIM3v32_MOD_LDVT2: mod->BSIM3v32ldvt2 = value->rValue; mod->BSIM3v32ldvt2Given = TRUE; break; case BSIM3v32_MOD_LDVT0W: mod->BSIM3v32ldvt0w = value->rValue; mod->BSIM3v32ldvt0wGiven = TRUE; break; case BSIM3v32_MOD_LDVT1W: mod->BSIM3v32ldvt1w = value->rValue; mod->BSIM3v32ldvt1wGiven = TRUE; break; case BSIM3v32_MOD_LDVT2W: mod->BSIM3v32ldvt2w = value->rValue; mod->BSIM3v32ldvt2wGiven = TRUE; break; case BSIM3v32_MOD_LDROUT: mod->BSIM3v32ldrout = value->rValue; mod->BSIM3v32ldroutGiven = TRUE; break; case BSIM3v32_MOD_LDSUB: mod->BSIM3v32ldsub = value->rValue; mod->BSIM3v32ldsubGiven = TRUE; break; case BSIM3v32_MOD_LVTH0: mod->BSIM3v32lvth0 = value->rValue; mod->BSIM3v32lvth0Given = TRUE; break; case BSIM3v32_MOD_LUA: mod->BSIM3v32lua = value->rValue; mod->BSIM3v32luaGiven = TRUE; break; case BSIM3v32_MOD_LUA1: mod->BSIM3v32lua1 = value->rValue; mod->BSIM3v32lua1Given = TRUE; break; case BSIM3v32_MOD_LUB: mod->BSIM3v32lub = value->rValue; mod->BSIM3v32lubGiven = TRUE; break; case BSIM3v32_MOD_LUB1: mod->BSIM3v32lub1 = value->rValue; mod->BSIM3v32lub1Given = TRUE; break; case BSIM3v32_MOD_LUC: mod->BSIM3v32luc = value->rValue; mod->BSIM3v32lucGiven = TRUE; break; case BSIM3v32_MOD_LUC1: mod->BSIM3v32luc1 = value->rValue; mod->BSIM3v32luc1Given = TRUE; break; case BSIM3v32_MOD_LU0 : mod->BSIM3v32lu0 = value->rValue; mod->BSIM3v32lu0Given = TRUE; break; case BSIM3v32_MOD_LUTE : mod->BSIM3v32lute = value->rValue; mod->BSIM3v32luteGiven = TRUE; break; case BSIM3v32_MOD_LVOFF: mod->BSIM3v32lvoff = value->rValue; mod->BSIM3v32lvoffGiven = TRUE; break; case BSIM3v32_MOD_LDELTA : mod->BSIM3v32ldelta = value->rValue; mod->BSIM3v32ldeltaGiven = TRUE; break; case BSIM3v32_MOD_LRDSW: mod->BSIM3v32lrdsw = value->rValue; mod->BSIM3v32lrdswGiven = TRUE; break; case BSIM3v32_MOD_LPRWB: mod->BSIM3v32lprwb = value->rValue; mod->BSIM3v32lprwbGiven = TRUE; break; case BSIM3v32_MOD_LPRWG: mod->BSIM3v32lprwg = value->rValue; mod->BSIM3v32lprwgGiven = TRUE; break; case BSIM3v32_MOD_LPRT: mod->BSIM3v32lprt = value->rValue; mod->BSIM3v32lprtGiven = TRUE; break; case BSIM3v32_MOD_LETA0: mod->BSIM3v32leta0 = value->rValue; mod->BSIM3v32leta0Given = TRUE; break; case BSIM3v32_MOD_LETAB: mod->BSIM3v32letab = value->rValue; mod->BSIM3v32letabGiven = TRUE; break; case BSIM3v32_MOD_LPCLM: mod->BSIM3v32lpclm = value->rValue; mod->BSIM3v32lpclmGiven = TRUE; break; case BSIM3v32_MOD_LPDIBL1: mod->BSIM3v32lpdibl1 = value->rValue; mod->BSIM3v32lpdibl1Given = TRUE; break; case BSIM3v32_MOD_LPDIBL2: mod->BSIM3v32lpdibl2 = value->rValue; mod->BSIM3v32lpdibl2Given = TRUE; break; case BSIM3v32_MOD_LPDIBLB: mod->BSIM3v32lpdiblb = value->rValue; mod->BSIM3v32lpdiblbGiven = TRUE; break; case BSIM3v32_MOD_LPSCBE1: mod->BSIM3v32lpscbe1 = value->rValue; mod->BSIM3v32lpscbe1Given = TRUE; break; case BSIM3v32_MOD_LPSCBE2: mod->BSIM3v32lpscbe2 = value->rValue; mod->BSIM3v32lpscbe2Given = TRUE; break; case BSIM3v32_MOD_LPVAG: mod->BSIM3v32lpvag = value->rValue; mod->BSIM3v32lpvagGiven = TRUE; break; case BSIM3v32_MOD_LWR : mod->BSIM3v32lwr = value->rValue; mod->BSIM3v32lwrGiven = TRUE; break; case BSIM3v32_MOD_LDWG : mod->BSIM3v32ldwg = value->rValue; mod->BSIM3v32ldwgGiven = TRUE; break; case BSIM3v32_MOD_LDWB : mod->BSIM3v32ldwb = value->rValue; mod->BSIM3v32ldwbGiven = TRUE; break; case BSIM3v32_MOD_LB0 : mod->BSIM3v32lb0 = value->rValue; mod->BSIM3v32lb0Given = TRUE; break; case BSIM3v32_MOD_LB1 : mod->BSIM3v32lb1 = value->rValue; mod->BSIM3v32lb1Given = TRUE; break; case BSIM3v32_MOD_LALPHA0 : mod->BSIM3v32lalpha0 = value->rValue; mod->BSIM3v32lalpha0Given = TRUE; break; case BSIM3v32_MOD_LALPHA1 : mod->BSIM3v32lalpha1 = value->rValue; mod->BSIM3v32lalpha1Given = TRUE; break; case BSIM3v32_MOD_LBETA0 : mod->BSIM3v32lbeta0 = value->rValue; mod->BSIM3v32lbeta0Given = TRUE; break; case BSIM3v32_MOD_LVFB : mod->BSIM3v32lvfb = value->rValue; mod->BSIM3v32lvfbGiven = TRUE; break; case BSIM3v32_MOD_LELM : mod->BSIM3v32lelm = value->rValue; mod->BSIM3v32lelmGiven = TRUE; break; case BSIM3v32_MOD_LCGSL : mod->BSIM3v32lcgsl = value->rValue; mod->BSIM3v32lcgslGiven = TRUE; break; case BSIM3v32_MOD_LCGDL : mod->BSIM3v32lcgdl = value->rValue; mod->BSIM3v32lcgdlGiven = TRUE; break; case BSIM3v32_MOD_LCKAPPA : mod->BSIM3v32lckappa = value->rValue; mod->BSIM3v32lckappaGiven = TRUE; break; case BSIM3v32_MOD_LCF : mod->BSIM3v32lcf = value->rValue; mod->BSIM3v32lcfGiven = TRUE; break; case BSIM3v32_MOD_LCLC : mod->BSIM3v32lclc = value->rValue; mod->BSIM3v32lclcGiven = TRUE; break; case BSIM3v32_MOD_LCLE : mod->BSIM3v32lcle = value->rValue; mod->BSIM3v32lcleGiven = TRUE; break; case BSIM3v32_MOD_LVFBCV : mod->BSIM3v32lvfbcv = value->rValue; mod->BSIM3v32lvfbcvGiven = TRUE; break; case BSIM3v32_MOD_LACDE : mod->BSIM3v32lacde = value->rValue; mod->BSIM3v32lacdeGiven = TRUE; break; case BSIM3v32_MOD_LMOIN : mod->BSIM3v32lmoin = value->rValue; mod->BSIM3v32lmoinGiven = TRUE; break; case BSIM3v32_MOD_LNOFF : mod->BSIM3v32lnoff = value->rValue; mod->BSIM3v32lnoffGiven = TRUE; break; case BSIM3v32_MOD_LVOFFCV : mod->BSIM3v32lvoffcv = value->rValue; mod->BSIM3v32lvoffcvGiven = TRUE; break; /* Width dependence */ case BSIM3v32_MOD_WCDSC : mod->BSIM3v32wcdsc = value->rValue; mod->BSIM3v32wcdscGiven = TRUE; break; case BSIM3v32_MOD_WCDSCB : mod->BSIM3v32wcdscb = value->rValue; mod->BSIM3v32wcdscbGiven = TRUE; break; case BSIM3v32_MOD_WCDSCD : mod->BSIM3v32wcdscd = value->rValue; mod->BSIM3v32wcdscdGiven = TRUE; break; case BSIM3v32_MOD_WCIT : mod->BSIM3v32wcit = value->rValue; mod->BSIM3v32wcitGiven = TRUE; break; case BSIM3v32_MOD_WNFACTOR : mod->BSIM3v32wnfactor = value->rValue; mod->BSIM3v32wnfactorGiven = TRUE; break; case BSIM3v32_MOD_WXJ: mod->BSIM3v32wxj = value->rValue; mod->BSIM3v32wxjGiven = TRUE; break; case BSIM3v32_MOD_WVSAT: mod->BSIM3v32wvsat = value->rValue; mod->BSIM3v32wvsatGiven = TRUE; break; case BSIM3v32_MOD_WA0: mod->BSIM3v32wa0 = value->rValue; mod->BSIM3v32wa0Given = TRUE; break; case BSIM3v32_MOD_WAGS: mod->BSIM3v32wags = value->rValue; mod->BSIM3v32wagsGiven = TRUE; break; case BSIM3v32_MOD_WA1: mod->BSIM3v32wa1 = value->rValue; mod->BSIM3v32wa1Given = TRUE; break; case BSIM3v32_MOD_WA2: mod->BSIM3v32wa2 = value->rValue; mod->BSIM3v32wa2Given = TRUE; break; case BSIM3v32_MOD_WAT: mod->BSIM3v32wat = value->rValue; mod->BSIM3v32watGiven = TRUE; break; case BSIM3v32_MOD_WKETA: mod->BSIM3v32wketa = value->rValue; mod->BSIM3v32wketaGiven = TRUE; break; case BSIM3v32_MOD_WNSUB: mod->BSIM3v32wnsub = value->rValue; mod->BSIM3v32wnsubGiven = TRUE; break; case BSIM3v32_MOD_WNPEAK: mod->BSIM3v32wnpeak = value->rValue; mod->BSIM3v32wnpeakGiven = TRUE; if (mod->BSIM3v32wnpeak > 1.0e20) mod->BSIM3v32wnpeak *= 1.0e-6; break; case BSIM3v32_MOD_WNGATE: mod->BSIM3v32wngate = value->rValue; mod->BSIM3v32wngateGiven = TRUE; if (mod->BSIM3v32wngate > 1.0e23) mod->BSIM3v32wngate *= 1.0e-6; break; case BSIM3v32_MOD_WGAMMA1: mod->BSIM3v32wgamma1 = value->rValue; mod->BSIM3v32wgamma1Given = TRUE; break; case BSIM3v32_MOD_WGAMMA2: mod->BSIM3v32wgamma2 = value->rValue; mod->BSIM3v32wgamma2Given = TRUE; break; case BSIM3v32_MOD_WVBX: mod->BSIM3v32wvbx = value->rValue; mod->BSIM3v32wvbxGiven = TRUE; break; case BSIM3v32_MOD_WVBM: mod->BSIM3v32wvbm = value->rValue; mod->BSIM3v32wvbmGiven = TRUE; break; case BSIM3v32_MOD_WXT: mod->BSIM3v32wxt = value->rValue; mod->BSIM3v32wxtGiven = TRUE; break; case BSIM3v32_MOD_WK1: mod->BSIM3v32wk1 = value->rValue; mod->BSIM3v32wk1Given = TRUE; break; case BSIM3v32_MOD_WKT1: mod->BSIM3v32wkt1 = value->rValue; mod->BSIM3v32wkt1Given = TRUE; break; case BSIM3v32_MOD_WKT1L: mod->BSIM3v32wkt1l = value->rValue; mod->BSIM3v32wkt1lGiven = TRUE; break; case BSIM3v32_MOD_WKT2: mod->BSIM3v32wkt2 = value->rValue; mod->BSIM3v32wkt2Given = TRUE; break; case BSIM3v32_MOD_WK2: mod->BSIM3v32wk2 = value->rValue; mod->BSIM3v32wk2Given = TRUE; break; case BSIM3v32_MOD_WK3: mod->BSIM3v32wk3 = value->rValue; mod->BSIM3v32wk3Given = TRUE; break; case BSIM3v32_MOD_WK3B: mod->BSIM3v32wk3b = value->rValue; mod->BSIM3v32wk3bGiven = TRUE; break; case BSIM3v32_MOD_WNLX: mod->BSIM3v32wnlx = value->rValue; mod->BSIM3v32wnlxGiven = TRUE; break; case BSIM3v32_MOD_WW0: mod->BSIM3v32ww0 = value->rValue; mod->BSIM3v32ww0Given = TRUE; break; case BSIM3v32_MOD_WDVT0: mod->BSIM3v32wdvt0 = value->rValue; mod->BSIM3v32wdvt0Given = TRUE; break; case BSIM3v32_MOD_WDVT1: mod->BSIM3v32wdvt1 = value->rValue; mod->BSIM3v32wdvt1Given = TRUE; break; case BSIM3v32_MOD_WDVT2: mod->BSIM3v32wdvt2 = value->rValue; mod->BSIM3v32wdvt2Given = TRUE; break; case BSIM3v32_MOD_WDVT0W: mod->BSIM3v32wdvt0w = value->rValue; mod->BSIM3v32wdvt0wGiven = TRUE; break; case BSIM3v32_MOD_WDVT1W: mod->BSIM3v32wdvt1w = value->rValue; mod->BSIM3v32wdvt1wGiven = TRUE; break; case BSIM3v32_MOD_WDVT2W: mod->BSIM3v32wdvt2w = value->rValue; mod->BSIM3v32wdvt2wGiven = TRUE; break; case BSIM3v32_MOD_WDROUT: mod->BSIM3v32wdrout = value->rValue; mod->BSIM3v32wdroutGiven = TRUE; break; case BSIM3v32_MOD_WDSUB: mod->BSIM3v32wdsub = value->rValue; mod->BSIM3v32wdsubGiven = TRUE; break; case BSIM3v32_MOD_WVTH0: mod->BSIM3v32wvth0 = value->rValue; mod->BSIM3v32wvth0Given = TRUE; break; case BSIM3v32_MOD_WUA: mod->BSIM3v32wua = value->rValue; mod->BSIM3v32wuaGiven = TRUE; break; case BSIM3v32_MOD_WUA1: mod->BSIM3v32wua1 = value->rValue; mod->BSIM3v32wua1Given = TRUE; break; case BSIM3v32_MOD_WUB: mod->BSIM3v32wub = value->rValue; mod->BSIM3v32wubGiven = TRUE; break; case BSIM3v32_MOD_WUB1: mod->BSIM3v32wub1 = value->rValue; mod->BSIM3v32wub1Given = TRUE; break; case BSIM3v32_MOD_WUC: mod->BSIM3v32wuc = value->rValue; mod->BSIM3v32wucGiven = TRUE; break; case BSIM3v32_MOD_WUC1: mod->BSIM3v32wuc1 = value->rValue; mod->BSIM3v32wuc1Given = TRUE; break; case BSIM3v32_MOD_WU0 : mod->BSIM3v32wu0 = value->rValue; mod->BSIM3v32wu0Given = TRUE; break; case BSIM3v32_MOD_WUTE : mod->BSIM3v32wute = value->rValue; mod->BSIM3v32wuteGiven = TRUE; break; case BSIM3v32_MOD_WVOFF: mod->BSIM3v32wvoff = value->rValue; mod->BSIM3v32wvoffGiven = TRUE; break; case BSIM3v32_MOD_WDELTA : mod->BSIM3v32wdelta = value->rValue; mod->BSIM3v32wdeltaGiven = TRUE; break; case BSIM3v32_MOD_WRDSW: mod->BSIM3v32wrdsw = value->rValue; mod->BSIM3v32wrdswGiven = TRUE; break; case BSIM3v32_MOD_WPRWB: mod->BSIM3v32wprwb = value->rValue; mod->BSIM3v32wprwbGiven = TRUE; break; case BSIM3v32_MOD_WPRWG: mod->BSIM3v32wprwg = value->rValue; mod->BSIM3v32wprwgGiven = TRUE; break; case BSIM3v32_MOD_WPRT: mod->BSIM3v32wprt = value->rValue; mod->BSIM3v32wprtGiven = TRUE; break; case BSIM3v32_MOD_WETA0: mod->BSIM3v32weta0 = value->rValue; mod->BSIM3v32weta0Given = TRUE; break; case BSIM3v32_MOD_WETAB: mod->BSIM3v32wetab = value->rValue; mod->BSIM3v32wetabGiven = TRUE; break; case BSIM3v32_MOD_WPCLM: mod->BSIM3v32wpclm = value->rValue; mod->BSIM3v32wpclmGiven = TRUE; break; case BSIM3v32_MOD_WPDIBL1: mod->BSIM3v32wpdibl1 = value->rValue; mod->BSIM3v32wpdibl1Given = TRUE; break; case BSIM3v32_MOD_WPDIBL2: mod->BSIM3v32wpdibl2 = value->rValue; mod->BSIM3v32wpdibl2Given = TRUE; break; case BSIM3v32_MOD_WPDIBLB: mod->BSIM3v32wpdiblb = value->rValue; mod->BSIM3v32wpdiblbGiven = TRUE; break; case BSIM3v32_MOD_WPSCBE1: mod->BSIM3v32wpscbe1 = value->rValue; mod->BSIM3v32wpscbe1Given = TRUE; break; case BSIM3v32_MOD_WPSCBE2: mod->BSIM3v32wpscbe2 = value->rValue; mod->BSIM3v32wpscbe2Given = TRUE; break; case BSIM3v32_MOD_WPVAG: mod->BSIM3v32wpvag = value->rValue; mod->BSIM3v32wpvagGiven = TRUE; break; case BSIM3v32_MOD_WWR : mod->BSIM3v32wwr = value->rValue; mod->BSIM3v32wwrGiven = TRUE; break; case BSIM3v32_MOD_WDWG : mod->BSIM3v32wdwg = value->rValue; mod->BSIM3v32wdwgGiven = TRUE; break; case BSIM3v32_MOD_WDWB : mod->BSIM3v32wdwb = value->rValue; mod->BSIM3v32wdwbGiven = TRUE; break; case BSIM3v32_MOD_WB0 : mod->BSIM3v32wb0 = value->rValue; mod->BSIM3v32wb0Given = TRUE; break; case BSIM3v32_MOD_WB1 : mod->BSIM3v32wb1 = value->rValue; mod->BSIM3v32wb1Given = TRUE; break; case BSIM3v32_MOD_WALPHA0 : mod->BSIM3v32walpha0 = value->rValue; mod->BSIM3v32walpha0Given = TRUE; break; case BSIM3v32_MOD_WALPHA1 : mod->BSIM3v32walpha1 = value->rValue; mod->BSIM3v32walpha1Given = TRUE; break; case BSIM3v32_MOD_WBETA0 : mod->BSIM3v32wbeta0 = value->rValue; mod->BSIM3v32wbeta0Given = TRUE; break; case BSIM3v32_MOD_WVFB : mod->BSIM3v32wvfb = value->rValue; mod->BSIM3v32wvfbGiven = TRUE; break; case BSIM3v32_MOD_WELM : mod->BSIM3v32welm = value->rValue; mod->BSIM3v32welmGiven = TRUE; break; case BSIM3v32_MOD_WCGSL : mod->BSIM3v32wcgsl = value->rValue; mod->BSIM3v32wcgslGiven = TRUE; break; case BSIM3v32_MOD_WCGDL : mod->BSIM3v32wcgdl = value->rValue; mod->BSIM3v32wcgdlGiven = TRUE; break; case BSIM3v32_MOD_WCKAPPA : mod->BSIM3v32wckappa = value->rValue; mod->BSIM3v32wckappaGiven = TRUE; break; case BSIM3v32_MOD_WCF : mod->BSIM3v32wcf = value->rValue; mod->BSIM3v32wcfGiven = TRUE; break; case BSIM3v32_MOD_WCLC : mod->BSIM3v32wclc = value->rValue; mod->BSIM3v32wclcGiven = TRUE; break; case BSIM3v32_MOD_WCLE : mod->BSIM3v32wcle = value->rValue; mod->BSIM3v32wcleGiven = TRUE; break; case BSIM3v32_MOD_WVFBCV : mod->BSIM3v32wvfbcv = value->rValue; mod->BSIM3v32wvfbcvGiven = TRUE; break; case BSIM3v32_MOD_WACDE : mod->BSIM3v32wacde = value->rValue; mod->BSIM3v32wacdeGiven = TRUE; break; case BSIM3v32_MOD_WMOIN : mod->BSIM3v32wmoin = value->rValue; mod->BSIM3v32wmoinGiven = TRUE; break; case BSIM3v32_MOD_WNOFF : mod->BSIM3v32wnoff = value->rValue; mod->BSIM3v32wnoffGiven = TRUE; break; case BSIM3v32_MOD_WVOFFCV : mod->BSIM3v32wvoffcv = value->rValue; mod->BSIM3v32wvoffcvGiven = TRUE; break; /* Cross-term dependence */ case BSIM3v32_MOD_PCDSC : mod->BSIM3v32pcdsc = value->rValue; mod->BSIM3v32pcdscGiven = TRUE; break; case BSIM3v32_MOD_PCDSCB : mod->BSIM3v32pcdscb = value->rValue; mod->BSIM3v32pcdscbGiven = TRUE; break; case BSIM3v32_MOD_PCDSCD : mod->BSIM3v32pcdscd = value->rValue; mod->BSIM3v32pcdscdGiven = TRUE; break; case BSIM3v32_MOD_PCIT : mod->BSIM3v32pcit = value->rValue; mod->BSIM3v32pcitGiven = TRUE; break; case BSIM3v32_MOD_PNFACTOR : mod->BSIM3v32pnfactor = value->rValue; mod->BSIM3v32pnfactorGiven = TRUE; break; case BSIM3v32_MOD_PXJ: mod->BSIM3v32pxj = value->rValue; mod->BSIM3v32pxjGiven = TRUE; break; case BSIM3v32_MOD_PVSAT: mod->BSIM3v32pvsat = value->rValue; mod->BSIM3v32pvsatGiven = TRUE; break; case BSIM3v32_MOD_PA0: mod->BSIM3v32pa0 = value->rValue; mod->BSIM3v32pa0Given = TRUE; break; case BSIM3v32_MOD_PAGS: mod->BSIM3v32pags = value->rValue; mod->BSIM3v32pagsGiven = TRUE; break; case BSIM3v32_MOD_PA1: mod->BSIM3v32pa1 = value->rValue; mod->BSIM3v32pa1Given = TRUE; break; case BSIM3v32_MOD_PA2: mod->BSIM3v32pa2 = value->rValue; mod->BSIM3v32pa2Given = TRUE; break; case BSIM3v32_MOD_PAT: mod->BSIM3v32pat = value->rValue; mod->BSIM3v32patGiven = TRUE; break; case BSIM3v32_MOD_PKETA: mod->BSIM3v32pketa = value->rValue; mod->BSIM3v32pketaGiven = TRUE; break; case BSIM3v32_MOD_PNSUB: mod->BSIM3v32pnsub = value->rValue; mod->BSIM3v32pnsubGiven = TRUE; break; case BSIM3v32_MOD_PNPEAK: mod->BSIM3v32pnpeak = value->rValue; mod->BSIM3v32pnpeakGiven = TRUE; if (mod->BSIM3v32pnpeak > 1.0e20) mod->BSIM3v32pnpeak *= 1.0e-6; break; case BSIM3v32_MOD_PNGATE: mod->BSIM3v32pngate = value->rValue; mod->BSIM3v32pngateGiven = TRUE; if (mod->BSIM3v32pngate > 1.0e23) mod->BSIM3v32pngate *= 1.0e-6; break; case BSIM3v32_MOD_PGAMMA1: mod->BSIM3v32pgamma1 = value->rValue; mod->BSIM3v32pgamma1Given = TRUE; break; case BSIM3v32_MOD_PGAMMA2: mod->BSIM3v32pgamma2 = value->rValue; mod->BSIM3v32pgamma2Given = TRUE; break; case BSIM3v32_MOD_PVBX: mod->BSIM3v32pvbx = value->rValue; mod->BSIM3v32pvbxGiven = TRUE; break; case BSIM3v32_MOD_PVBM: mod->BSIM3v32pvbm = value->rValue; mod->BSIM3v32pvbmGiven = TRUE; break; case BSIM3v32_MOD_PXT: mod->BSIM3v32pxt = value->rValue; mod->BSIM3v32pxtGiven = TRUE; break; case BSIM3v32_MOD_PK1: mod->BSIM3v32pk1 = value->rValue; mod->BSIM3v32pk1Given = TRUE; break; case BSIM3v32_MOD_PKT1: mod->BSIM3v32pkt1 = value->rValue; mod->BSIM3v32pkt1Given = TRUE; break; case BSIM3v32_MOD_PKT1L: mod->BSIM3v32pkt1l = value->rValue; mod->BSIM3v32pkt1lGiven = TRUE; break; case BSIM3v32_MOD_PKT2: mod->BSIM3v32pkt2 = value->rValue; mod->BSIM3v32pkt2Given = TRUE; break; case BSIM3v32_MOD_PK2: mod->BSIM3v32pk2 = value->rValue; mod->BSIM3v32pk2Given = TRUE; break; case BSIM3v32_MOD_PK3: mod->BSIM3v32pk3 = value->rValue; mod->BSIM3v32pk3Given = TRUE; break; case BSIM3v32_MOD_PK3B: mod->BSIM3v32pk3b = value->rValue; mod->BSIM3v32pk3bGiven = TRUE; break; case BSIM3v32_MOD_PNLX: mod->BSIM3v32pnlx = value->rValue; mod->BSIM3v32pnlxGiven = TRUE; break; case BSIM3v32_MOD_PW0: mod->BSIM3v32pw0 = value->rValue; mod->BSIM3v32pw0Given = TRUE; break; case BSIM3v32_MOD_PDVT0: mod->BSIM3v32pdvt0 = value->rValue; mod->BSIM3v32pdvt0Given = TRUE; break; case BSIM3v32_MOD_PDVT1: mod->BSIM3v32pdvt1 = value->rValue; mod->BSIM3v32pdvt1Given = TRUE; break; case BSIM3v32_MOD_PDVT2: mod->BSIM3v32pdvt2 = value->rValue; mod->BSIM3v32pdvt2Given = TRUE; break; case BSIM3v32_MOD_PDVT0W: mod->BSIM3v32pdvt0w = value->rValue; mod->BSIM3v32pdvt0wGiven = TRUE; break; case BSIM3v32_MOD_PDVT1W: mod->BSIM3v32pdvt1w = value->rValue; mod->BSIM3v32pdvt1wGiven = TRUE; break; case BSIM3v32_MOD_PDVT2W: mod->BSIM3v32pdvt2w = value->rValue; mod->BSIM3v32pdvt2wGiven = TRUE; break; case BSIM3v32_MOD_PDROUT: mod->BSIM3v32pdrout = value->rValue; mod->BSIM3v32pdroutGiven = TRUE; break; case BSIM3v32_MOD_PDSUB: mod->BSIM3v32pdsub = value->rValue; mod->BSIM3v32pdsubGiven = TRUE; break; case BSIM3v32_MOD_PVTH0: mod->BSIM3v32pvth0 = value->rValue; mod->BSIM3v32pvth0Given = TRUE; break; case BSIM3v32_MOD_PUA: mod->BSIM3v32pua = value->rValue; mod->BSIM3v32puaGiven = TRUE; break; case BSIM3v32_MOD_PUA1: mod->BSIM3v32pua1 = value->rValue; mod->BSIM3v32pua1Given = TRUE; break; case BSIM3v32_MOD_PUB: mod->BSIM3v32pub = value->rValue; mod->BSIM3v32pubGiven = TRUE; break; case BSIM3v32_MOD_PUB1: mod->BSIM3v32pub1 = value->rValue; mod->BSIM3v32pub1Given = TRUE; break; case BSIM3v32_MOD_PUC: mod->BSIM3v32puc = value->rValue; mod->BSIM3v32pucGiven = TRUE; break; case BSIM3v32_MOD_PUC1: mod->BSIM3v32puc1 = value->rValue; mod->BSIM3v32puc1Given = TRUE; break; case BSIM3v32_MOD_PU0 : mod->BSIM3v32pu0 = value->rValue; mod->BSIM3v32pu0Given = TRUE; break; case BSIM3v32_MOD_PUTE : mod->BSIM3v32pute = value->rValue; mod->BSIM3v32puteGiven = TRUE; break; case BSIM3v32_MOD_PVOFF: mod->BSIM3v32pvoff = value->rValue; mod->BSIM3v32pvoffGiven = TRUE; break; case BSIM3v32_MOD_PDELTA : mod->BSIM3v32pdelta = value->rValue; mod->BSIM3v32pdeltaGiven = TRUE; break; case BSIM3v32_MOD_PRDSW: mod->BSIM3v32prdsw = value->rValue; mod->BSIM3v32prdswGiven = TRUE; break; case BSIM3v32_MOD_PPRWB: mod->BSIM3v32pprwb = value->rValue; mod->BSIM3v32pprwbGiven = TRUE; break; case BSIM3v32_MOD_PPRWG: mod->BSIM3v32pprwg = value->rValue; mod->BSIM3v32pprwgGiven = TRUE; break; case BSIM3v32_MOD_PPRT: mod->BSIM3v32pprt = value->rValue; mod->BSIM3v32pprtGiven = TRUE; break; case BSIM3v32_MOD_PETA0: mod->BSIM3v32peta0 = value->rValue; mod->BSIM3v32peta0Given = TRUE; break; case BSIM3v32_MOD_PETAB: mod->BSIM3v32petab = value->rValue; mod->BSIM3v32petabGiven = TRUE; break; case BSIM3v32_MOD_PPCLM: mod->BSIM3v32ppclm = value->rValue; mod->BSIM3v32ppclmGiven = TRUE; break; case BSIM3v32_MOD_PPDIBL1: mod->BSIM3v32ppdibl1 = value->rValue; mod->BSIM3v32ppdibl1Given = TRUE; break; case BSIM3v32_MOD_PPDIBL2: mod->BSIM3v32ppdibl2 = value->rValue; mod->BSIM3v32ppdibl2Given = TRUE; break; case BSIM3v32_MOD_PPDIBLB: mod->BSIM3v32ppdiblb = value->rValue; mod->BSIM3v32ppdiblbGiven = TRUE; break; case BSIM3v32_MOD_PPSCBE1: mod->BSIM3v32ppscbe1 = value->rValue; mod->BSIM3v32ppscbe1Given = TRUE; break; case BSIM3v32_MOD_PPSCBE2: mod->BSIM3v32ppscbe2 = value->rValue; mod->BSIM3v32ppscbe2Given = TRUE; break; case BSIM3v32_MOD_PPVAG: mod->BSIM3v32ppvag = value->rValue; mod->BSIM3v32ppvagGiven = TRUE; break; case BSIM3v32_MOD_PWR : mod->BSIM3v32pwr = value->rValue; mod->BSIM3v32pwrGiven = TRUE; break; case BSIM3v32_MOD_PDWG : mod->BSIM3v32pdwg = value->rValue; mod->BSIM3v32pdwgGiven = TRUE; break; case BSIM3v32_MOD_PDWB : mod->BSIM3v32pdwb = value->rValue; mod->BSIM3v32pdwbGiven = TRUE; break; case BSIM3v32_MOD_PB0 : mod->BSIM3v32pb0 = value->rValue; mod->BSIM3v32pb0Given = TRUE; break; case BSIM3v32_MOD_PB1 : mod->BSIM3v32pb1 = value->rValue; mod->BSIM3v32pb1Given = TRUE; break; case BSIM3v32_MOD_PALPHA0 : mod->BSIM3v32palpha0 = value->rValue; mod->BSIM3v32palpha0Given = TRUE; break; case BSIM3v32_MOD_PALPHA1 : mod->BSIM3v32palpha1 = value->rValue; mod->BSIM3v32palpha1Given = TRUE; break; case BSIM3v32_MOD_PBETA0 : mod->BSIM3v32pbeta0 = value->rValue; mod->BSIM3v32pbeta0Given = TRUE; break; case BSIM3v32_MOD_PVFB : mod->BSIM3v32pvfb = value->rValue; mod->BSIM3v32pvfbGiven = TRUE; break; case BSIM3v32_MOD_PELM : mod->BSIM3v32pelm = value->rValue; mod->BSIM3v32pelmGiven = TRUE; break; case BSIM3v32_MOD_PCGSL : mod->BSIM3v32pcgsl = value->rValue; mod->BSIM3v32pcgslGiven = TRUE; break; case BSIM3v32_MOD_PCGDL : mod->BSIM3v32pcgdl = value->rValue; mod->BSIM3v32pcgdlGiven = TRUE; break; case BSIM3v32_MOD_PCKAPPA : mod->BSIM3v32pckappa = value->rValue; mod->BSIM3v32pckappaGiven = TRUE; break; case BSIM3v32_MOD_PCF : mod->BSIM3v32pcf = value->rValue; mod->BSIM3v32pcfGiven = TRUE; break; case BSIM3v32_MOD_PCLC : mod->BSIM3v32pclc = value->rValue; mod->BSIM3v32pclcGiven = TRUE; break; case BSIM3v32_MOD_PCLE : mod->BSIM3v32pcle = value->rValue; mod->BSIM3v32pcleGiven = TRUE; break; case BSIM3v32_MOD_PVFBCV : mod->BSIM3v32pvfbcv = value->rValue; mod->BSIM3v32pvfbcvGiven = TRUE; break; case BSIM3v32_MOD_PACDE : mod->BSIM3v32pacde = value->rValue; mod->BSIM3v32pacdeGiven = TRUE; break; case BSIM3v32_MOD_PMOIN : mod->BSIM3v32pmoin = value->rValue; mod->BSIM3v32pmoinGiven = TRUE; break; case BSIM3v32_MOD_PNOFF : mod->BSIM3v32pnoff = value->rValue; mod->BSIM3v32pnoffGiven = TRUE; break; case BSIM3v32_MOD_PVOFFCV : mod->BSIM3v32pvoffcv = value->rValue; mod->BSIM3v32pvoffcvGiven = TRUE; break; case BSIM3v32_MOD_TNOM : mod->BSIM3v32tnom = value->rValue + CONSTCtoK; mod->BSIM3v32tnomGiven = TRUE; break; case BSIM3v32_MOD_CGSO : mod->BSIM3v32cgso = value->rValue; mod->BSIM3v32cgsoGiven = TRUE; break; case BSIM3v32_MOD_CGDO : mod->BSIM3v32cgdo = value->rValue; mod->BSIM3v32cgdoGiven = TRUE; break; case BSIM3v32_MOD_CGBO : mod->BSIM3v32cgbo = value->rValue; mod->BSIM3v32cgboGiven = TRUE; break; case BSIM3v32_MOD_XPART : mod->BSIM3v32xpart = value->rValue; mod->BSIM3v32xpartGiven = TRUE; break; case BSIM3v32_MOD_RSH : mod->BSIM3v32sheetResistance = value->rValue; mod->BSIM3v32sheetResistanceGiven = TRUE; break; case BSIM3v32_MOD_JS : mod->BSIM3v32jctSatCurDensity = value->rValue; mod->BSIM3v32jctSatCurDensityGiven = TRUE; break; case BSIM3v32_MOD_JSW : mod->BSIM3v32jctSidewallSatCurDensity = value->rValue; mod->BSIM3v32jctSidewallSatCurDensityGiven = TRUE; break; case BSIM3v32_MOD_PB : mod->BSIM3v32bulkJctPotential = value->rValue; mod->BSIM3v32bulkJctPotentialGiven = TRUE; break; case BSIM3v32_MOD_MJ : mod->BSIM3v32bulkJctBotGradingCoeff = value->rValue; mod->BSIM3v32bulkJctBotGradingCoeffGiven = TRUE; break; case BSIM3v32_MOD_PBSW : mod->BSIM3v32sidewallJctPotential = value->rValue; mod->BSIM3v32sidewallJctPotentialGiven = TRUE; break; case BSIM3v32_MOD_MJSW : mod->BSIM3v32bulkJctSideGradingCoeff = value->rValue; mod->BSIM3v32bulkJctSideGradingCoeffGiven = TRUE; break; case BSIM3v32_MOD_CJ : mod->BSIM3v32unitAreaJctCap = value->rValue; mod->BSIM3v32unitAreaJctCapGiven = TRUE; break; case BSIM3v32_MOD_CJSW : mod->BSIM3v32unitLengthSidewallJctCap = value->rValue; mod->BSIM3v32unitLengthSidewallJctCapGiven = TRUE; break; case BSIM3v32_MOD_NJ : mod->BSIM3v32jctEmissionCoeff = value->rValue; mod->BSIM3v32jctEmissionCoeffGiven = TRUE; break; case BSIM3v32_MOD_PBSWG : mod->BSIM3v32GatesidewallJctPotential = value->rValue; mod->BSIM3v32GatesidewallJctPotentialGiven = TRUE; break; case BSIM3v32_MOD_MJSWG : mod->BSIM3v32bulkJctGateSideGradingCoeff = value->rValue; mod->BSIM3v32bulkJctGateSideGradingCoeffGiven = TRUE; break; case BSIM3v32_MOD_CJSWG : mod->BSIM3v32unitLengthGateSidewallJctCap = value->rValue; mod->BSIM3v32unitLengthGateSidewallJctCapGiven = TRUE; break; case BSIM3v32_MOD_XTI : mod->BSIM3v32jctTempExponent = value->rValue; mod->BSIM3v32jctTempExponentGiven = TRUE; break; case BSIM3v32_MOD_LINT : mod->BSIM3v32Lint = value->rValue; mod->BSIM3v32LintGiven = TRUE; break; case BSIM3v32_MOD_LL : mod->BSIM3v32Ll = value->rValue; mod->BSIM3v32LlGiven = TRUE; break; case BSIM3v32_MOD_LLC : mod->BSIM3v32Llc = value->rValue; mod->BSIM3v32LlcGiven = TRUE; break; case BSIM3v32_MOD_LLN : mod->BSIM3v32Lln = value->rValue; mod->BSIM3v32LlnGiven = TRUE; break; case BSIM3v32_MOD_LW : mod->BSIM3v32Lw = value->rValue; mod->BSIM3v32LwGiven = TRUE; break; case BSIM3v32_MOD_LWC : mod->BSIM3v32Lwc = value->rValue; mod->BSIM3v32LwcGiven = TRUE; break; case BSIM3v32_MOD_LWN : mod->BSIM3v32Lwn = value->rValue; mod->BSIM3v32LwnGiven = TRUE; break; case BSIM3v32_MOD_LWL : mod->BSIM3v32Lwl = value->rValue; mod->BSIM3v32LwlGiven = TRUE; break; case BSIM3v32_MOD_LWLC : mod->BSIM3v32Lwlc = value->rValue; mod->BSIM3v32LwlcGiven = TRUE; break; case BSIM3v32_MOD_LMIN : mod->BSIM3v32Lmin = value->rValue; mod->BSIM3v32LminGiven = TRUE; break; case BSIM3v32_MOD_LMAX : mod->BSIM3v32Lmax = value->rValue; mod->BSIM3v32LmaxGiven = TRUE; break; case BSIM3v32_MOD_WINT : mod->BSIM3v32Wint = value->rValue; mod->BSIM3v32WintGiven = TRUE; break; case BSIM3v32_MOD_WL : mod->BSIM3v32Wl = value->rValue; mod->BSIM3v32WlGiven = TRUE; break; case BSIM3v32_MOD_WLC : mod->BSIM3v32Wlc = value->rValue; mod->BSIM3v32WlcGiven = TRUE; break; case BSIM3v32_MOD_WLN : mod->BSIM3v32Wln = value->rValue; mod->BSIM3v32WlnGiven = TRUE; break; case BSIM3v32_MOD_WW : mod->BSIM3v32Ww = value->rValue; mod->BSIM3v32WwGiven = TRUE; break; case BSIM3v32_MOD_WWC : mod->BSIM3v32Wwc = value->rValue; mod->BSIM3v32WwcGiven = TRUE; break; case BSIM3v32_MOD_WWN : mod->BSIM3v32Wwn = value->rValue; mod->BSIM3v32WwnGiven = TRUE; break; case BSIM3v32_MOD_WWL : mod->BSIM3v32Wwl = value->rValue; mod->BSIM3v32WwlGiven = TRUE; break; case BSIM3v32_MOD_WWLC : mod->BSIM3v32Wwlc = value->rValue; mod->BSIM3v32WwlcGiven = TRUE; break; case BSIM3v32_MOD_WMIN : mod->BSIM3v32Wmin = value->rValue; mod->BSIM3v32WminGiven = TRUE; break; case BSIM3v32_MOD_WMAX : mod->BSIM3v32Wmax = value->rValue; mod->BSIM3v32WmaxGiven = TRUE; break; case BSIM3v32_MOD_XL: mod->BSIM3v32xl = value->rValue; mod->BSIM3v32xlGiven = TRUE; break; case BSIM3v32_MOD_XW: mod->BSIM3v32xw = value->rValue; mod->BSIM3v32xwGiven = TRUE; break; case BSIM3v32_MOD_NOIA : mod->BSIM3v32oxideTrapDensityA = value->rValue; mod->BSIM3v32oxideTrapDensityAGiven = TRUE; break; case BSIM3v32_MOD_NOIB : mod->BSIM3v32oxideTrapDensityB = value->rValue; mod->BSIM3v32oxideTrapDensityBGiven = TRUE; break; case BSIM3v32_MOD_NOIC : mod->BSIM3v32oxideTrapDensityC = value->rValue; mod->BSIM3v32oxideTrapDensityCGiven = TRUE; break; case BSIM3v32_MOD_EM : mod->BSIM3v32em = value->rValue; mod->BSIM3v32emGiven = TRUE; break; case BSIM3v32_MOD_EF : mod->BSIM3v32ef = value->rValue; mod->BSIM3v32efGiven = TRUE; break; case BSIM3v32_MOD_AF : mod->BSIM3v32af = value->rValue; mod->BSIM3v32afGiven = TRUE; break; case BSIM3v32_MOD_KF : mod->BSIM3v32kf = value->rValue; mod->BSIM3v32kfGiven = TRUE; break; case BSIM3v32_MOD_VGS_MAX: mod->BSIM3v32vgsMax = value->rValue; mod->BSIM3v32vgsMaxGiven = TRUE; break; case BSIM3v32_MOD_VGD_MAX: mod->BSIM3v32vgdMax = value->rValue; mod->BSIM3v32vgdMaxGiven = TRUE; break; case BSIM3v32_MOD_VGB_MAX: mod->BSIM3v32vgbMax = value->rValue; mod->BSIM3v32vgbMaxGiven = TRUE; break; case BSIM3v32_MOD_VDS_MAX: mod->BSIM3v32vdsMax = value->rValue; mod->BSIM3v32vdsMaxGiven = TRUE; break; case BSIM3v32_MOD_VBS_MAX: mod->BSIM3v32vbsMax = value->rValue; mod->BSIM3v32vbsMaxGiven = TRUE; break; case BSIM3v32_MOD_VBD_MAX: mod->BSIM3v32vbdMax = value->rValue; mod->BSIM3v32vbdMaxGiven = TRUE; break; case BSIM3v32_MOD_VGSR_MAX: mod->BSIM3v32vgsrMax = value->rValue; mod->BSIM3v32vgsrMaxGiven = TRUE; break; case BSIM3v32_MOD_VGDR_MAX: mod->BSIM3v32vgdrMax = value->rValue; mod->BSIM3v32vgdrMaxGiven = TRUE; break; case BSIM3v32_MOD_VGBR_MAX: mod->BSIM3v32vgbrMax = value->rValue; mod->BSIM3v32vgbrMaxGiven = TRUE; break; case BSIM3v32_MOD_VBSR_MAX: mod->BSIM3v32vbsrMax = value->rValue; mod->BSIM3v32vbsrMaxGiven = TRUE; break; case BSIM3v32_MOD_VBDR_MAX: mod->BSIM3v32vbdrMax = value->rValue; mod->BSIM3v32vbdrMaxGiven = TRUE; break; case BSIM3v32_MOD_NMOS : if(value->iValue) { mod->BSIM3v32type = 1; mod->BSIM3v32typeGiven = TRUE; } break; case BSIM3v32_MOD_PMOS : if(value->iValue) { mod->BSIM3v32type = - 1; mod->BSIM3v32typeGiven = TRUE; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v32/b3v32par.c0000644000175000017500000000753713546075722022255 0ustar carstencarsten/**** BSIM3v3.2.4, Released by Xuemei Xi 12/21/2001 ****/ /********** * Copyright 2001 Regents of the University of California. All rights reserved. * File: b3par.c of BSIM3v3.2.4 * Author: 1995 Min-Chie Jeng and Mansun Chan * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi * Modified by Paolo Nenzi 2002 and Dietmar Warning 2003 **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "bsim3v32def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/fteext.h" int BSIM3v32param (int param, IFvalue *value, GENinstance *inst, IFvalue *select) { double scale; BSIM3v32instance *here = (BSIM3v32instance*)inst; NG_IGNORE(select); if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; switch(param) { case BSIM3v32_W: here->BSIM3v32w = value->rValue*scale; here->BSIM3v32wGiven = TRUE; break; case BSIM3v32_L: here->BSIM3v32l = value->rValue*scale; here->BSIM3v32lGiven = TRUE; break; case BSIM3v32_M: here->BSIM3v32m = value->rValue; here->BSIM3v32mGiven = TRUE; break; case BSIM3v32_AS: here->BSIM3v32sourceArea = value->rValue*scale*scale; here->BSIM3v32sourceAreaGiven = TRUE; break; case BSIM3v32_AD: here->BSIM3v32drainArea = value->rValue*scale*scale; here->BSIM3v32drainAreaGiven = TRUE; break; case BSIM3v32_PS: here->BSIM3v32sourcePerimeter = value->rValue*scale; here->BSIM3v32sourcePerimeterGiven = TRUE; break; case BSIM3v32_PD: here->BSIM3v32drainPerimeter = value->rValue*scale; here->BSIM3v32drainPerimeterGiven = TRUE; break; case BSIM3v32_NRS: here->BSIM3v32sourceSquares = value->rValue; here->BSIM3v32sourceSquaresGiven = TRUE; break; case BSIM3v32_NRD: here->BSIM3v32drainSquares = value->rValue; here->BSIM3v32drainSquaresGiven = TRUE; break; case BSIM3v32_OFF: here->BSIM3v32off = value->iValue; break; case BSIM3v32_IC_VBS: here->BSIM3v32icVBS = value->rValue; here->BSIM3v32icVBSGiven = TRUE; break; case BSIM3v32_IC_VDS: here->BSIM3v32icVDS = value->rValue; here->BSIM3v32icVDSGiven = TRUE; break; case BSIM3v32_IC_VGS: here->BSIM3v32icVGS = value->rValue; here->BSIM3v32icVGSGiven = TRUE; break; case BSIM3v32_NQSMOD: here->BSIM3v32nqsMod = value->iValue; here->BSIM3v32nqsModGiven = TRUE; break; case BSIM3v32_GEO: here->BSIM3v32geo = value->iValue; here->BSIM3v32geoGiven = TRUE; break; case BSIM3v32_DELVTO: here->BSIM3v32delvto = value->rValue; here->BSIM3v32delvtoGiven = TRUE; break; case BSIM3v32_MULU0: here->BSIM3v32mulu0 = value->rValue; here->BSIM3v32mulu0Given = TRUE; break; case BSIM3v32_IC: switch(value->v.numValue){ case 3: here->BSIM3v32icVBS = *(value->v.vec.rVec+2); here->BSIM3v32icVBSGiven = TRUE; case 2: here->BSIM3v32icVGS = *(value->v.vec.rVec+1); here->BSIM3v32icVGSGiven = TRUE; case 1: here->BSIM3v32icVDS = *(value->v.vec.rVec); here->BSIM3v32icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v32/b3v32ld.c0000644000175000017500000045137113546075722022071 0ustar carstencarsten/**** BSIM3v3.2.4, Released by Xuemei Xi 12/21/2001 ****/ /********** * Copyright 2001 Regents of the University of California. All rights reserved. * File: b3ld.c of BSIM3v3.2.4 * Author: 1991 JianHui Huang and Min-Chie Jeng. * Modified by Mansun Chan (1995). * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi * Modified by Xuemei Xi, 10/05, 12/21, 2001. * Modified by Paolo Nenzi 2002 and Dietmar Warning 2003 **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3v32def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define Charge_q 1.60219e-19 #define DELTA_1 0.02 #define DELTA_2 0.02 #define DELTA_3 0.02 #define DELTA_4 0.02 #ifdef USE_OMP int BSIM3v32LoadOMP(BSIM3v32instance *here, CKTcircuit *ckt); void BSIM3v32LoadRhsMat(GENmodel *inModel, CKTcircuit *ckt); #endif int BSIM3v32load (GENmodel *inModel, CKTcircuit *ckt) { #ifdef USE_OMP int idx; BSIM3v32model *model = (BSIM3v32model*)inModel; int error = 0; BSIM3v32instance **InstArray; InstArray = model->BSIM3v32InstanceArray; #pragma omp parallel for for (idx = 0; idx < model->BSIM3v32InstCount; idx++) { BSIM3v32instance *here = InstArray[idx]; int local_error = BSIM3v32LoadOMP(here, ckt); if (local_error) error = local_error; } BSIM3v32LoadRhsMat(inModel, ckt); return error; } int BSIM3v32LoadOMP(BSIM3v32instance *here, CKTcircuit *ckt) { BSIM3v32model *model = BSIM3v32modPtr(here); #else BSIM3v32model *model = (BSIM3v32model*)inModel; BSIM3v32instance *here; #endif double SourceSatCurrent, DrainSatCurrent; double ag0, qgd, qgs, qgb, von, cbhat, VgstNVt, ExpVgst; double cdrain, cdhat, cdreq, ceqbd, ceqbs, ceqqb, ceqqd, ceqqg, ceq, geq; double czbd, czbdsw, czbdswg, czbs, czbssw, czbsswg, evbd, evbs, arg, sarg; double delvbd, delvbs, delvds, delvgd, delvgs; double Vfbeff, dVfbeff_dVg, dVfbeff_dVd = 0.0, dVfbeff_dVb, V3, V4; double gcbdb, gcbgb, gcbsb, gcddb, gcdgb, gcdsb, gcgdb, gcggb, gcgsb, gcsdb; #ifndef NEWCONV double tol; #endif double gcsgb, gcssb, MJ, MJSW, MJSWG; double vbd, vbs, vds, vgb, vgd, vgs, vgdo; #ifndef PREDICTOR double xfact; #endif double qgate = 0.0, qbulk = 0.0, qdrn = 0.0, qsrc; double qinoi, cqgate, cqbulk, cqdrn; double Vds, Vgs, Vbs, Gmbs, FwdSum, RevSum; double Vgs_eff, Vfb, dVfb_dVb = 0.0, dVfb_dVd = 0.0; double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth, dVth_dVb, dVth_dVd; double Vgst, dVgst_dVg, dVgst_dVb, dVgs_eff_dVg, Nvtm; double Vtm; double n, dn_dVb, dn_dVd, voffcv, noff, dnoff_dVd, dnoff_dVb; double ExpArg, V0, CoxWLcen, QovCox, LINK; double DeltaPhi, dDeltaPhi_dVg, dDeltaPhi_dVd, dDeltaPhi_dVb; double Cox, Tox, Tcen, dTcen_dVg, dTcen_dVd, dTcen_dVb; double Ccen, Coxeff, dCoxeff_dVg, dCoxeff_dVd, dCoxeff_dVb; double Denomi, dDenomi_dVg, dDenomi_dVd, dDenomi_dVb; double ueff, dueff_dVg, dueff_dVd, dueff_dVb; double Esat, Vdsat; double EsatL, dEsatL_dVg, dEsatL_dVd, dEsatL_dVb; double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, Vasat, dAlphaz_dVg, dAlphaz_dVb; double dVasat_dVg, dVasat_dVb, dVasat_dVd, Va, dVa_dVd, dVa_dVg, dVa_dVb; double Vbseff, dVbseff_dVb, VbseffCV, dVbseffCV_dVb; double Arg1, One_Third_CoxWL, Two_Third_CoxWL, Alphaz, CoxWL; double T0, dT0_dVg, dT0_dVd, dT0_dVb; double T1, dT1_dVg, dT1_dVd, dT1_dVb; double T2, dT2_dVg, dT2_dVd, dT2_dVb; double T3, dT3_dVg, dT3_dVd, dT3_dVb; double T4; double T5; double T6; double T7; double T8; double T9; double T10; double T11, T12; double tmp, Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVb; double VACLM, dVACLM_dVg, dVACLM_dVd, dVACLM_dVb; double VADIBL, dVADIBL_dVg, dVADIBL_dVd, dVADIBL_dVb; double Xdep, dXdep_dVb, lt1, dlt1_dVb, ltw, dltw_dVb, Delt_vth, dDelt_vth_dVb; double Theta0, dTheta0_dVb; double TempRatio, tmp1, tmp2, tmp3, tmp4; double DIBL_Sft, dDIBL_Sft_dVd, Lambda, dLambda_dVg; double Idtot, Ibtot; #ifndef NOBYPASS double tempv; #endif double a1, ScalingFactor; double Vgsteff, dVgsteff_dVg, dVgsteff_dVd, dVgsteff_dVb; double Vdseff, dVdseff_dVg, dVdseff_dVd, dVdseff_dVb; double VdseffCV, dVdseffCV_dVg, dVdseffCV_dVd, dVdseffCV_dVb; double diffVds, dAbulk_dVg; double beta, dbeta_dVg, dbeta_dVd, dbeta_dVb; double gche, dgche_dVg, dgche_dVd, dgche_dVb; double fgche1, dfgche1_dVg, dfgche1_dVd, dfgche1_dVb; double fgche2, dfgche2_dVg, dfgche2_dVd, dfgche2_dVb; double Idl, dIdl_dVg, dIdl_dVd, dIdl_dVb; double Idsa, dIdsa_dVg, dIdsa_dVd, dIdsa_dVb; double Ids, Gm, Gds, Gmb; double Isub, Gbd, Gbg, Gbb; double VASCBE, dVASCBE_dVg, dVASCBE_dVd, dVASCBE_dVb; double CoxWovL; double Rds, dRds_dVg, dRds_dVb, WVCox, WVCoxRds; double Vgst2Vtm, VdsatCV, dVdsatCV_dVg, dVdsatCV_dVb; double Leff, Weff, dWeff_dVg, dWeff_dVb; double AbulkCV, dAbulkCV_dVb; double qgdo, qgso, cgdo, cgso; double qcheq = 0.0, qdef, gqdef = 0.0, cqdef, cqcheq, gtau_diff, gtau_drift; double gcqdb = 0.0,gcqsb = 0.0, gcqgb = 0.0,gcqbb = 0.0; double dxpart, sxpart, ggtg, ggtd, ggts, ggtb; double ddxpart_dVd, ddxpart_dVg, ddxpart_dVb, ddxpart_dVs; double dsxpart_dVd, dsxpart_dVg, dsxpart_dVb, dsxpart_dVs; double gbspsp, gbbdp, gbbsp, gbspg, gbspb, gbspdp; double gbdpdp, gbdpg, gbdpb, gbdpsp; double Cgg, Cgd, Cgb, Cdg, Cdd, Cds; double Csg, Csd, Css, Csb, Cbg, Cbd, Cbb; double Cgg1, Cgb1, Cgd1, Cbg1, Cbb1, Cbd1, Qac0, Qsub0; double dQac0_dVg, dQac0_dVd = 0.0, dQac0_dVb, dQsub0_dVg; double dQsub0_dVd, dQsub0_dVb; double m; struct bsim3v32SizeDependParam *pParam; int ByPass, Check, ChargeComputationNeeded, error; ScalingFactor = 1.0e-9; ChargeComputationNeeded = ((ckt->CKTmode & (MODEDCTRANCURVE | MODEAC | MODETRAN | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) ? 1 : 0; #ifndef USE_OMP for (; model != NULL; model = BSIM3v32nextModel(model)) { for (here = BSIM3v32instances(model); here != NULL; here = BSIM3v32nextInstance(here)) { #endif Check = 1; ByPass = 0; pParam = here->pParam; if ((ckt->CKTmode & MODEINITSMSIG)) { vbs = *(ckt->CKTstate0 + here->BSIM3v32vbs); vgs = *(ckt->CKTstate0 + here->BSIM3v32vgs); vds = *(ckt->CKTstate0 + here->BSIM3v32vds); qdef = *(ckt->CKTstate0 + here->BSIM3v32qdef); } else if ((ckt->CKTmode & MODEINITTRAN)) { vbs = *(ckt->CKTstate1 + here->BSIM3v32vbs); vgs = *(ckt->CKTstate1 + here->BSIM3v32vgs); vds = *(ckt->CKTstate1 + here->BSIM3v32vds); qdef = *(ckt->CKTstate1 + here->BSIM3v32qdef); } else if ((ckt->CKTmode & MODEINITJCT) && !here->BSIM3v32off) { vds = model->BSIM3v32type * here->BSIM3v32icVDS; vgs = model->BSIM3v32type * here->BSIM3v32icVGS; vbs = model->BSIM3v32type * here->BSIM3v32icVBS; qdef = 0.0; if ((vds == 0.0) && (vgs == 0.0) && (vbs == 0.0) && ((ckt->CKTmode & (MODETRAN | MODEAC|MODEDCOP | MODEDCTRANCURVE)) || (!(ckt->CKTmode & MODEUIC)))) { vbs = 0.0; vgs = model->BSIM3v32type * here->BSIM3v32vth0 + 0.1; vds = 0.1; } } else if ((ckt->CKTmode & (MODEINITJCT | MODEINITFIX)) && (here->BSIM3v32off)) { qdef = vbs = vgs = vds = 0.0; } else { #ifndef PREDICTOR if ((ckt->CKTmode & MODEINITPRED)) { xfact = ckt->CKTdelta / ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->BSIM3v32vbs) = *(ckt->CKTstate1 + here->BSIM3v32vbs); vbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM3v32vbs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM3v32vbs))); *(ckt->CKTstate0 + here->BSIM3v32vgs) = *(ckt->CKTstate1 + here->BSIM3v32vgs); vgs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM3v32vgs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM3v32vgs))); *(ckt->CKTstate0 + here->BSIM3v32vds) = *(ckt->CKTstate1 + here->BSIM3v32vds); vds = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM3v32vds)) - (xfact * (*(ckt->CKTstate2 + here->BSIM3v32vds))); *(ckt->CKTstate0 + here->BSIM3v32vbd) = *(ckt->CKTstate0 + here->BSIM3v32vbs) - *(ckt->CKTstate0 + here->BSIM3v32vds); *(ckt->CKTstate0 + here->BSIM3v32qdef) = *(ckt->CKTstate1 + here->BSIM3v32qdef); qdef = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM3v32qdef)) -(xfact * (*(ckt->CKTstate2 + here->BSIM3v32qdef))); } else { #endif /* PREDICTOR */ vbs = model->BSIM3v32type * (*(ckt->CKTrhsOld + here->BSIM3v32bNode) - *(ckt->CKTrhsOld + here->BSIM3v32sNodePrime)); vgs = model->BSIM3v32type * (*(ckt->CKTrhsOld + here->BSIM3v32gNode) - *(ckt->CKTrhsOld + here->BSIM3v32sNodePrime)); vds = model->BSIM3v32type * (*(ckt->CKTrhsOld + here->BSIM3v32dNodePrime) - *(ckt->CKTrhsOld + here->BSIM3v32sNodePrime)); qdef = model->BSIM3v32type * (*(ckt->CKTrhsOld + here->BSIM3v32qNode)); #ifndef PREDICTOR } #endif /* PREDICTOR */ vbd = vbs - vds; vgd = vgs - vds; vgdo = *(ckt->CKTstate0 + here->BSIM3v32vgs) - *(ckt->CKTstate0 + here->BSIM3v32vds); delvbs = vbs - *(ckt->CKTstate0 + here->BSIM3v32vbs); delvbd = vbd - *(ckt->CKTstate0 + here->BSIM3v32vbd); delvgs = vgs - *(ckt->CKTstate0 + here->BSIM3v32vgs); delvds = vds - *(ckt->CKTstate0 + here->BSIM3v32vds); delvgd = vgd - vgdo; if (here->BSIM3v32mode >= 0) { Idtot = here->BSIM3v32cd + here->BSIM3v32csub - here->BSIM3v32cbd; cdhat = Idtot - here->BSIM3v32gbd * delvbd + (here->BSIM3v32gmbs + here->BSIM3v32gbbs) * delvbs + (here->BSIM3v32gm + here->BSIM3v32gbgs) * delvgs + (here->BSIM3v32gds + here->BSIM3v32gbds) * delvds; Ibtot = here->BSIM3v32cbs + here->BSIM3v32cbd - here->BSIM3v32csub; cbhat = Ibtot + here->BSIM3v32gbd * delvbd + (here->BSIM3v32gbs - here->BSIM3v32gbbs) * delvbs - here->BSIM3v32gbgs * delvgs - here->BSIM3v32gbds * delvds; } else { Idtot = here->BSIM3v32cd - here->BSIM3v32cbd; cdhat = Idtot - (here->BSIM3v32gbd - here->BSIM3v32gmbs) * delvbd + here->BSIM3v32gm * delvgd - here->BSIM3v32gds * delvds; Ibtot = here->BSIM3v32cbs + here->BSIM3v32cbd - here->BSIM3v32csub; cbhat = Ibtot + here->BSIM3v32gbs * delvbs + (here->BSIM3v32gbd - here->BSIM3v32gbbs) * delvbd - here->BSIM3v32gbgs * delvgd + here->BSIM3v32gbds * delvds; } #ifndef NOBYPASS /* following should be one big if connected by && all over * the place, but some C compilers can't handle that, so * we split it up here to let them digest it in stages */ if ((!(ckt->CKTmode & MODEINITPRED)) && (ckt->CKTbypass)) if ((fabs(delvbs) < (ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->BSIM3v32vbs))) + ckt->CKTvoltTol))) if ((fabs(delvbd) < (ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0+here->BSIM3v32vbd))) + ckt->CKTvoltTol))) if ((fabs(delvgs) < (ckt->CKTreltol * MAX(fabs(vgs), fabs(*(ckt->CKTstate0+here->BSIM3v32vgs))) + ckt->CKTvoltTol))) if ((fabs(delvds) < (ckt->CKTreltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0+here->BSIM3v32vds))) + ckt->CKTvoltTol))) if ((fabs(cdhat - Idtot) < ckt->CKTreltol * MAX(fabs(cdhat),fabs(Idtot)) + ckt->CKTabstol)) { tempv = MAX(fabs(cbhat),fabs(Ibtot)) + ckt->CKTabstol; if ((fabs(cbhat - Ibtot)) < ckt->CKTreltol * tempv) { /* bypass code */ vbs = *(ckt->CKTstate0 + here->BSIM3v32vbs); vbd = *(ckt->CKTstate0 + here->BSIM3v32vbd); vgs = *(ckt->CKTstate0 + here->BSIM3v32vgs); vds = *(ckt->CKTstate0 + here->BSIM3v32vds); qdef = *(ckt->CKTstate0 + here->BSIM3v32qdef); vgd = vgs - vds; vgb = vgs - vbs; cdrain = here->BSIM3v32cd; if ((ckt->CKTmode & (MODETRAN | MODEAC)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) { ByPass = 1; qgate = here->BSIM3v32qgate; qbulk = here->BSIM3v32qbulk; qdrn = here->BSIM3v32qdrn; goto line755; } else { goto line850; } } } #endif /*NOBYPASS*/ von = here->BSIM3v32von; if (*(ckt->CKTstate0 + here->BSIM3v32vds) >= 0.0) { vgs = DEVfetlim(vgs, *(ckt->CKTstate0+here->BSIM3v32vgs), von); vds = vgs - vgd; vds = DEVlimvds(vds, *(ckt->CKTstate0 + here->BSIM3v32vds)); vgd = vgs - vds; } else { vgd = DEVfetlim(vgd, vgdo, von); vds = vgs - vgd; vds = -DEVlimvds(-vds, -(*(ckt->CKTstate0+here->BSIM3v32vds))); vgs = vgd + vds; } if (vds >= 0.0) { vbs = DEVpnjlim(vbs, *(ckt->CKTstate0 + here->BSIM3v32vbs), CONSTvt0, model->BSIM3v32vcrit, &Check); vbd = vbs - vds; } else { vbd = DEVpnjlim(vbd, *(ckt->CKTstate0 + here->BSIM3v32vbd), CONSTvt0, model->BSIM3v32vcrit, &Check); vbs = vbd + vds; } } /* determine DC current and derivatives */ vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; /* Source/drain junction diode DC model begins */ Nvtm = model->BSIM3v32vtm * model->BSIM3v32jctEmissionCoeff; /* acm model */ if (model->BSIM3v32acmMod == 0) { if ((here->BSIM3v32sourceArea <= 0.0) && (here->BSIM3v32sourcePerimeter <= 0.0)) { SourceSatCurrent = 1.0e-14; } else { SourceSatCurrent = here->BSIM3v32sourceArea * model->BSIM3v32jctTempSatCurDensity + here->BSIM3v32sourcePerimeter * model->BSIM3v32jctSidewallTempSatCurDensity; } if ((here->BSIM3v32drainArea <= 0.0) && (here->BSIM3v32drainPerimeter <= 0.0)) { DrainSatCurrent = 1.0e-14; } else { DrainSatCurrent = here->BSIM3v32drainArea * model->BSIM3v32jctTempSatCurDensity + here->BSIM3v32drainPerimeter * model->BSIM3v32jctSidewallTempSatCurDensity; } } else { error = ACM_saturationCurrents( model->BSIM3v32acmMod, model->BSIM3v32calcacm, here->BSIM3v32geo, model->BSIM3v32hdif, model->BSIM3v32wmlt, here->BSIM3v32w, model->BSIM3v32xw, model->BSIM3v32jctTempSatCurDensity, model->BSIM3v32jctSidewallTempSatCurDensity, here->BSIM3v32drainAreaGiven, here->BSIM3v32drainArea, here->BSIM3v32drainPerimeterGiven, here->BSIM3v32drainPerimeter, here->BSIM3v32sourceAreaGiven, here->BSIM3v32sourceArea, here->BSIM3v32sourcePerimeterGiven, here->BSIM3v32sourcePerimeter, &DrainSatCurrent, &SourceSatCurrent ); if (error) return(error); } if (SourceSatCurrent <= 0.0) { here->BSIM3v32gbs = ckt->CKTgmin; here->BSIM3v32cbs = here->BSIM3v32gbs * vbs; } else { if (model->BSIM3v32ijth == 0.0) { evbs = exp(vbs / Nvtm); here->BSIM3v32gbs = SourceSatCurrent * evbs / Nvtm + ckt->CKTgmin; here->BSIM3v32cbs = SourceSatCurrent * (evbs - 1.0) + ckt->CKTgmin * vbs; } else { if (vbs < here->BSIM3v32vjsm) { evbs = exp(vbs / Nvtm); here->BSIM3v32gbs = SourceSatCurrent * evbs / Nvtm + ckt->CKTgmin; here->BSIM3v32cbs = SourceSatCurrent * (evbs - 1.0) + ckt->CKTgmin * vbs; } else { /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: case BSIM3v32V322: T0 = here->BSIM3v32IsEvjsm / Nvtm; here->BSIM3v32gbs = T0 + (ckt->CKTgmin); here->BSIM3v32cbs = here->BSIM3v32IsEvjsm - SourceSatCurrent + T0 * (vbs - here->BSIM3v32vjsm) + (ckt->CKTgmin) * vbs; break; case BSIM3v32V32: default: T0 = (SourceSatCurrent + model->BSIM3v32ijth) / Nvtm; here->BSIM3v32gbs = T0 + (ckt->CKTgmin); here->BSIM3v32cbs = model->BSIM3v32ijth + (ckt->CKTgmin) * vbs + T0 * (vbs - here->BSIM3v32vjsm); } } } } if (DrainSatCurrent <= 0.0) { here->BSIM3v32gbd = ckt->CKTgmin; here->BSIM3v32cbd = here->BSIM3v32gbd * vbd; } else { if (model->BSIM3v32ijth == 0.0) { evbd = exp(vbd / Nvtm); here->BSIM3v32gbd = DrainSatCurrent * evbd / Nvtm + ckt->CKTgmin; here->BSIM3v32cbd = DrainSatCurrent * (evbd - 1.0) + ckt->CKTgmin * vbd; } else { if (vbd < here->BSIM3v32vjdm) { evbd = exp(vbd / Nvtm); here->BSIM3v32gbd = DrainSatCurrent * evbd / Nvtm + ckt->CKTgmin; here->BSIM3v32cbd = DrainSatCurrent * (evbd - 1.0) + ckt->CKTgmin * vbd; } else { /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: case BSIM3v32V322: T0 = here->BSIM3v32IsEvjdm / Nvtm; here->BSIM3v32gbd = T0 + (ckt->CKTgmin); here->BSIM3v32cbd = here->BSIM3v32IsEvjdm - DrainSatCurrent + T0 * (vbd - here->BSIM3v32vjdm) + (ckt->CKTgmin) * vbd; break; case BSIM3v32V32: default: T0 = (DrainSatCurrent + model->BSIM3v32ijth) / Nvtm; here->BSIM3v32gbd = T0 + (ckt->CKTgmin); here->BSIM3v32cbd = model->BSIM3v32ijth + (ckt->CKTgmin) * vbd + T0 * (vbd - here->BSIM3v32vjdm); } } } } /* End of diode DC model */ if (vds >= 0.0) { /* normal mode */ here->BSIM3v32mode = 1; Vds = vds; Vgs = vgs; Vbs = vbs; } else { /* inverse mode */ here->BSIM3v32mode = -1; Vds = -vds; Vgs = vgd; Vbs = vbd; } T0 = Vbs - pParam->BSIM3v32vbsc - 0.001; T1 = sqrt(T0 * T0 - 0.004 * pParam->BSIM3v32vbsc); Vbseff = pParam->BSIM3v32vbsc + 0.5 * (T0 + T1); dVbseff_dVb = 0.5 * (1.0 + T0 / T1); if (Vbseff < Vbs) { Vbseff = Vbs; } if (Vbseff > 0.0) { T0 = pParam->BSIM3v32phi / (pParam->BSIM3v32phi + Vbseff); Phis = pParam->BSIM3v32phi * T0; dPhis_dVb = -T0 * T0; sqrtPhis = pParam->BSIM3v32phis3 / (pParam->BSIM3v32phi + 0.5 * Vbseff); dsqrtPhis_dVb = -0.5 * sqrtPhis * sqrtPhis / pParam->BSIM3v32phis3; } else { Phis = pParam->BSIM3v32phi - Vbseff; dPhis_dVb = -1.0; sqrtPhis = sqrt(Phis); dsqrtPhis_dVb = -0.5 / sqrtPhis; } Xdep = pParam->BSIM3v32Xdep0 * sqrtPhis / pParam->BSIM3v32sqrtPhi; dXdep_dVb = (pParam->BSIM3v32Xdep0 / pParam->BSIM3v32sqrtPhi) * dsqrtPhis_dVb; Leff = pParam->BSIM3v32leff; Vtm = model->BSIM3v32vtm; /* Vth Calculation */ T3 = sqrt(Xdep); V0 = pParam->BSIM3v32vbi - pParam->BSIM3v32phi; T0 = pParam->BSIM3v32dvt2 * Vbseff; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->BSIM3v32dvt2; } else /* Added to avoid any discontinuity problems caused by dvt2 */ { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->BSIM3v32dvt2 * T4 * T4; } lt1 = model->BSIM3v32factor1 * T3 * T1; dlt1_dVb = model->BSIM3v32factor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * T2); T0 = pParam->BSIM3v32dvt2w * Vbseff; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->BSIM3v32dvt2w; } else /* Added to avoid any discontinuity problems caused by dvt2w */ { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->BSIM3v32dvt2w * T4 * T4; } ltw = model->BSIM3v32factor1 * T3 * T1; dltw_dVb = model->BSIM3v32factor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * T2); T0 = -0.5 * pParam->BSIM3v32dvt1 * Leff / lt1; if (T0 > -EXP_THRESHOLD) { T1 = exp(T0); Theta0 = T1 * (1.0 + 2.0 * T1); dT1_dVb = -T0 / lt1 * T1 * dlt1_dVb; dTheta0_dVb = (1.0 + 4.0 * T1) * dT1_dVb; } else { T1 = MIN_EXP; Theta0 = T1 * (1.0 + 2.0 * T1); dTheta0_dVb = 0.0; } here->BSIM3v32thetavth = pParam->BSIM3v32dvt0 * Theta0; Delt_vth = here->BSIM3v32thetavth * V0; dDelt_vth_dVb = pParam->BSIM3v32dvt0 * dTheta0_dVb * V0; T0 = -0.5 * pParam->BSIM3v32dvt1w * pParam->BSIM3v32weff * Leff / ltw; if (T0 > -EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 * (1.0 + 2.0 * T1); dT1_dVb = -T0 / ltw * T1 * dltw_dVb; dT2_dVb = (1.0 + 4.0 * T1) * dT1_dVb; } else { T1 = MIN_EXP; T2 = T1 * (1.0 + 2.0 * T1); dT2_dVb = 0.0; } T0 = pParam->BSIM3v32dvt0w * T2; T2 = T0 * V0; dT2_dVb = pParam->BSIM3v32dvt0w * dT2_dVb * V0; TempRatio = ckt->CKTtemp / model->BSIM3v32tnom - 1.0; T0 = sqrt(1.0 + pParam->BSIM3v32nlx / Leff); T1 = pParam->BSIM3v32k1ox * (T0 - 1.0) * pParam->BSIM3v32sqrtPhi + (pParam->BSIM3v32kt1 + pParam->BSIM3v32kt1l / Leff + pParam->BSIM3v32kt2 * Vbseff) * TempRatio; tmp2 = model->BSIM3v32tox * pParam->BSIM3v32phi / (pParam->BSIM3v32weff + pParam->BSIM3v32w0); T3 = pParam->BSIM3v32eta0 + pParam->BSIM3v32etab * Vbseff; if (T3 < 1.0e-4) /* avoid discontinuity problems caused by etab */ { T9 = 1.0 / (3.0 - 2.0e4 * T3); T3 = (2.0e-4 - T3) * T9; T4 = T9 * T9; } else { T4 = 1.0; } dDIBL_Sft_dVd = T3 * pParam->BSIM3v32theta0vb0; DIBL_Sft = dDIBL_Sft_dVd * Vds; Vth = model->BSIM3v32type * here->BSIM3v32vth0 - pParam->BSIM3v32k1 * pParam->BSIM3v32sqrtPhi + pParam->BSIM3v32k1ox * sqrtPhis - pParam->BSIM3v32k2ox * Vbseff - Delt_vth - T2 + (pParam->BSIM3v32k3 + pParam->BSIM3v32k3b * Vbseff) * tmp2 + T1 - DIBL_Sft; here->BSIM3v32von = Vth; dVth_dVb = pParam->BSIM3v32k1ox * dsqrtPhis_dVb - pParam->BSIM3v32k2ox - dDelt_vth_dVb - dT2_dVb + pParam->BSIM3v32k3b * tmp2 - pParam->BSIM3v32etab * Vds * pParam->BSIM3v32theta0vb0 * T4 + pParam->BSIM3v32kt2 * TempRatio; dVth_dVd = -dDIBL_Sft_dVd; /* Calculate n */ tmp2 = pParam->BSIM3v32nfactor * EPSSI / Xdep; tmp3 = pParam->BSIM3v32cdsc + pParam->BSIM3v32cdscb * Vbseff + pParam->BSIM3v32cdscd * Vds; tmp4 = (tmp2 + tmp3 * Theta0 + pParam->BSIM3v32cit) / model->BSIM3v32cox; if (tmp4 >= -0.5) { n = 1.0 + tmp4; dn_dVb = (-tmp2 / Xdep * dXdep_dVb + tmp3 * dTheta0_dVb + pParam->BSIM3v32cdscb * Theta0) / model->BSIM3v32cox; dn_dVd = pParam->BSIM3v32cdscd * Theta0 / model->BSIM3v32cox; } else /* avoid discontinuity problems caused by tmp4 */ { T0 = 1.0 / (3.0 + 8.0 * tmp4); n = (1.0 + 3.0 * tmp4) * T0; T0 *= T0; dn_dVb = (-tmp2 / Xdep * dXdep_dVb + tmp3 * dTheta0_dVb + pParam->BSIM3v32cdscb * Theta0) / model->BSIM3v32cox * T0; dn_dVd = pParam->BSIM3v32cdscd * Theta0 / model->BSIM3v32cox * T0; } /* Poly Gate Si Depletion Effect */ T0 = here->BSIM3v32vfb + pParam->BSIM3v32phi; if ((pParam->BSIM3v32ngate > 1.e18) && (pParam->BSIM3v32ngate < 1.e25) && (Vgs > T0)) /* added to avoid the problem caused by ngate */ { T1 = 1.0e6 * Charge_q * EPSSI * pParam->BSIM3v32ngate / (model->BSIM3v32cox * model->BSIM3v32cox); T4 = sqrt(1.0 + 2.0 * (Vgs - T0) / T1); T2 = T1 * (T4 - 1.0); T3 = 0.5 * T2 * T2 / T1; /* T3 = Vpoly */ T7 = 1.12 - T3 - 0.05; T6 = sqrt(T7 * T7 + 0.224); T5 = 1.12 - 0.5 * (T7 + T6); Vgs_eff = Vgs - T5; dVgs_eff_dVg = 1.0 - (0.5 - 0.5 / T4) * (1.0 + T7 / T6); } else { Vgs_eff = Vgs; dVgs_eff_dVg = 1.0; } Vgst = Vgs_eff - Vth; /* Effective Vgst (Vgsteff) Calculation */ T10 = 2.0 * n * Vtm; VgstNVt = Vgst / T10; ExpArg = (2.0 * pParam->BSIM3v32voff - Vgst) / T10; /* MCJ: Very small Vgst */ if (VgstNVt > EXP_THRESHOLD) { Vgsteff = Vgst; dVgsteff_dVg = dVgs_eff_dVg; dVgsteff_dVd = -dVth_dVd; dVgsteff_dVb = -dVth_dVb; } else if (ExpArg > EXP_THRESHOLD) { T0 = (Vgst - pParam->BSIM3v32voff) / (n * Vtm); ExpVgst = exp(T0); Vgsteff = Vtm * pParam->BSIM3v32cdep0 / model->BSIM3v32cox * ExpVgst; dVgsteff_dVg = Vgsteff / (n * Vtm); dVgsteff_dVd = -dVgsteff_dVg * (dVth_dVd + T0 * Vtm * dn_dVd); dVgsteff_dVb = -dVgsteff_dVg * (dVth_dVb + T0 * Vtm * dn_dVb); dVgsteff_dVg *= dVgs_eff_dVg; } else { ExpVgst = exp(VgstNVt); T1 = T10 * log(1.0 + ExpVgst); dT1_dVg = ExpVgst / (1.0 + ExpVgst); dT1_dVb = -dT1_dVg * (dVth_dVb + Vgst / n * dn_dVb) + T1 / n * dn_dVb; dT1_dVd = -dT1_dVg * (dVth_dVd + Vgst / n * dn_dVd) + T1 / n * dn_dVd; dT2_dVg = -model->BSIM3v32cox / (Vtm * pParam->BSIM3v32cdep0) * exp(ExpArg); T2 = 1.0 - T10 * dT2_dVg; dT2_dVd = -dT2_dVg * (dVth_dVd - 2.0 * Vtm * ExpArg * dn_dVd) + (T2 - 1.0) / n * dn_dVd; dT2_dVb = -dT2_dVg * (dVth_dVb - 2.0 * Vtm * ExpArg * dn_dVb) + (T2 - 1.0) / n * dn_dVb; Vgsteff = T1 / T2; T3 = T2 * T2; dVgsteff_dVg = (T2 * dT1_dVg - T1 * dT2_dVg) / T3 * dVgs_eff_dVg; dVgsteff_dVd = (T2 * dT1_dVd - T1 * dT2_dVd) / T3; dVgsteff_dVb = (T2 * dT1_dVb - T1 * dT2_dVb) / T3; } /* Added revision dependent code */ if (model->BSIM3v32intVersion > BSIM3v32V323) { here->BSIM3v32Vgsteff = Vgsteff; } /* Calculate Effective Channel Geometry */ T9 = sqrtPhis - pParam->BSIM3v32sqrtPhi; Weff = pParam->BSIM3v32weff - 2.0 * (pParam->BSIM3v32dwg * Vgsteff + pParam->BSIM3v32dwb * T9); dWeff_dVg = -2.0 * pParam->BSIM3v32dwg; dWeff_dVb = -2.0 * pParam->BSIM3v32dwb * dsqrtPhis_dVb; if (Weff < 2.0e-8) /* to avoid the discontinuity problem due to Weff*/ { T0 = 1.0 / (6.0e-8 - 2.0 * Weff); Weff = 2.0e-8 * (4.0e-8 - Weff) * T0; T0 *= T0 * 4.0e-16; dWeff_dVg *= T0; dWeff_dVb *= T0; } T0 = pParam->BSIM3v32prwg * Vgsteff + pParam->BSIM3v32prwb * T9; if (T0 >= -0.9) { Rds = pParam->BSIM3v32rds0 * (1.0 + T0); dRds_dVg = pParam->BSIM3v32rds0 * pParam->BSIM3v32prwg; dRds_dVb = pParam->BSIM3v32rds0 * pParam->BSIM3v32prwb * dsqrtPhis_dVb; } else /* to avoid the discontinuity problem due to prwg and prwb*/ { T1 = 1.0 / (17.0 + 20.0 * T0); Rds = pParam->BSIM3v32rds0 * (0.8 + T0) * T1; T1 *= T1; dRds_dVg = pParam->BSIM3v32rds0 * pParam->BSIM3v32prwg * T1; dRds_dVb = pParam->BSIM3v32rds0 * pParam->BSIM3v32prwb * dsqrtPhis_dVb * T1; } /* Added revision dependent code */ if (model->BSIM3v32intVersion > BSIM3v32V323) { here->BSIM3v32rds = Rds; /* Noise Bugfix */ } /* Calculate Abulk */ T1 = 0.5 * pParam->BSIM3v32k1ox / sqrtPhis; dT1_dVb = -T1 / sqrtPhis * dsqrtPhis_dVb; T9 = sqrt(pParam->BSIM3v32xj * Xdep); tmp1 = Leff + 2.0 * T9; T5 = Leff / tmp1; tmp2 = pParam->BSIM3v32a0 * T5; tmp3 = pParam->BSIM3v32weff + pParam->BSIM3v32b1; tmp4 = pParam->BSIM3v32b0 / tmp3; T2 = tmp2 + tmp4; dT2_dVb = -T9 / tmp1 / Xdep * dXdep_dVb; T6 = T5 * T5; T7 = T5 * T6; Abulk0 = 1.0 + T1 * T2; dAbulk0_dVb = T1 * tmp2 * dT2_dVb + T2 * dT1_dVb; T8 = pParam->BSIM3v32ags * pParam->BSIM3v32a0 * T7; dAbulk_dVg = -T1 * T8; Abulk = Abulk0 + dAbulk_dVg * Vgsteff; dAbulk_dVb = dAbulk0_dVb - T8 * Vgsteff * (dT1_dVb + 3.0 * T1 * dT2_dVb); if (Abulk0 < 0.1) /* added to avoid the problems caused by Abulk0 */ { T9 = 1.0 / (3.0 - 20.0 * Abulk0); Abulk0 = (0.2 - Abulk0) * T9; dAbulk0_dVb *= T9 * T9; } if (Abulk < 0.1) /* added to avoid the problems caused by Abulk */ { T9 = 1.0 / (3.0 - 20.0 * Abulk); Abulk = (0.2 - Abulk) * T9; /* Added revision dependent code */ if (model->BSIM3v32intVersion > BSIM3v32V32) { T10 = T9 * T9; dAbulk_dVb *= T10; dAbulk_dVg *= T10; } else { dAbulk_dVb *= T9 * T9; } } /* Added revision dependent code */ if (model->BSIM3v32intVersion > BSIM3v32V323) { here->BSIM3v32Abulk = Abulk; } T2 = pParam->BSIM3v32keta * Vbseff; if (T2 >= -0.9) { T0 = 1.0 / (1.0 + T2); dT0_dVb = -pParam->BSIM3v32keta * T0 * T0; } else /* added to avoid the problems caused by Keta */ { T1 = 1.0 / (0.8 + T2); T0 = (17.0 + 20.0 * T2) * T1; dT0_dVb = -pParam->BSIM3v32keta * T1 * T1; } dAbulk_dVg *= T0; dAbulk_dVb = dAbulk_dVb * T0 + Abulk * dT0_dVb; dAbulk0_dVb = dAbulk0_dVb * T0 + Abulk0 * dT0_dVb; Abulk *= T0; Abulk0 *= T0; /* Mobility calculation */ if (model->BSIM3v32mobMod == 1) { T0 = Vgsteff + Vth + Vth; T2 = pParam->BSIM3v32ua + pParam->BSIM3v32uc * Vbseff; T3 = T0 / model->BSIM3v32tox; T5 = T3 * (T2 + pParam->BSIM3v32ub * T3); dDenomi_dVg = (T2 + 2.0 * pParam->BSIM3v32ub * T3) / model->BSIM3v32tox; dDenomi_dVd = dDenomi_dVg * 2.0 * dVth_dVd; dDenomi_dVb = dDenomi_dVg * 2.0 * dVth_dVb + pParam->BSIM3v32uc * T3; } else if (model->BSIM3v32mobMod == 2) { T5 = Vgsteff / model->BSIM3v32tox * (pParam->BSIM3v32ua + pParam->BSIM3v32uc * Vbseff + pParam->BSIM3v32ub * Vgsteff / model->BSIM3v32tox); dDenomi_dVg = (pParam->BSIM3v32ua + pParam->BSIM3v32uc * Vbseff + 2.0 * pParam->BSIM3v32ub * Vgsteff / model->BSIM3v32tox) / model->BSIM3v32tox; dDenomi_dVd = 0.0; dDenomi_dVb = Vgsteff * pParam->BSIM3v32uc / model->BSIM3v32tox; } else { T0 = Vgsteff + Vth + Vth; T2 = 1.0 + pParam->BSIM3v32uc * Vbseff; T3 = T0 / model->BSIM3v32tox; T4 = T3 * (pParam->BSIM3v32ua + pParam->BSIM3v32ub * T3); T5 = T4 * T2; dDenomi_dVg = (pParam->BSIM3v32ua + 2.0 * pParam->BSIM3v32ub * T3) * T2 / model->BSIM3v32tox; dDenomi_dVd = dDenomi_dVg * 2.0 * dVth_dVd; dDenomi_dVb = dDenomi_dVg * 2.0 * dVth_dVb + pParam->BSIM3v32uc * T4; } if (T5 >= -0.8) { Denomi = 1.0 + T5; } else /* Added to avoid the discontinuity problem caused by ua and ub*/ { T9 = 1.0 / (7.0 + 10.0 * T5); Denomi = (0.6 + T5) * T9; T9 *= T9; dDenomi_dVg *= T9; dDenomi_dVd *= T9; dDenomi_dVb *= T9; } here->BSIM3v32ueff = ueff = here->BSIM3v32u0temp / Denomi; T9 = -ueff / Denomi; dueff_dVg = T9 * dDenomi_dVg; dueff_dVd = T9 * dDenomi_dVd; dueff_dVb = T9 * dDenomi_dVb; /* Saturation Drain Voltage Vdsat */ WVCox = Weff * pParam->BSIM3v32vsattemp * model->BSIM3v32cox; WVCoxRds = WVCox * Rds; Esat = 2.0 * pParam->BSIM3v32vsattemp / ueff; EsatL = Esat * Leff; T0 = -EsatL /ueff; dEsatL_dVg = T0 * dueff_dVg; dEsatL_dVd = T0 * dueff_dVd; dEsatL_dVb = T0 * dueff_dVb; /* Sqrt() */ a1 = pParam->BSIM3v32a1; if (a1 == 0.0) { Lambda = pParam->BSIM3v32a2; dLambda_dVg = 0.0; } else if (a1 > 0.0) /* Added to avoid the discontinuity problem caused by a1 and a2 (Lambda) */ { T0 = 1.0 - pParam->BSIM3v32a2; T1 = T0 - pParam->BSIM3v32a1 * Vgsteff - 0.0001; T2 = sqrt(T1 * T1 + 0.0004 * T0); Lambda = pParam->BSIM3v32a2 + T0 - 0.5 * (T1 + T2); dLambda_dVg = 0.5 * pParam->BSIM3v32a1 * (1.0 + T1 / T2); } else { T1 = pParam->BSIM3v32a2 + pParam->BSIM3v32a1 * Vgsteff - 0.0001; T2 = sqrt(T1 * T1 + 0.0004 * pParam->BSIM3v32a2); Lambda = 0.5 * (T1 + T2); dLambda_dVg = 0.5 * pParam->BSIM3v32a1 * (1.0 + T1 / T2); } Vgst2Vtm = Vgsteff + 2.0 * Vtm; /* Added revision dependent code */ if (model->BSIM3v32intVersion > BSIM3v32V323) { here->BSIM3v32AbovVgst2Vtm = Abulk / Vgst2Vtm; } if (Rds > 0) { tmp2 = dRds_dVg / Rds + dWeff_dVg / Weff; tmp3 = dRds_dVb / Rds + dWeff_dVb / Weff; } else { tmp2 = dWeff_dVg / Weff; tmp3 = dWeff_dVb / Weff; } if ((Rds == 0.0) && (Lambda == 1.0)) { T0 = 1.0 / (Abulk * EsatL + Vgst2Vtm); tmp1 = 0.0; T1 = T0 * T0; T2 = Vgst2Vtm * T0; T3 = EsatL * Vgst2Vtm; Vdsat = T3 * T0; dT0_dVg = -(Abulk * dEsatL_dVg + EsatL * dAbulk_dVg + 1.0) * T1; dT0_dVd = -(Abulk * dEsatL_dVd) * T1; dT0_dVb = -(Abulk * dEsatL_dVb + dAbulk_dVb * EsatL) * T1; dVdsat_dVg = T3 * dT0_dVg + T2 * dEsatL_dVg + EsatL * T0; dVdsat_dVd = T3 * dT0_dVd + T2 * dEsatL_dVd; dVdsat_dVb = T3 * dT0_dVb + T2 * dEsatL_dVb; } else { tmp1 = dLambda_dVg / (Lambda * Lambda); T9 = Abulk * WVCoxRds; T8 = Abulk * T9; T7 = Vgst2Vtm * T9; T6 = Vgst2Vtm * WVCoxRds; T0 = 2.0 * Abulk * (T9 - 1.0 + 1.0 / Lambda); dT0_dVg = 2.0 * (T8 * tmp2 - Abulk * tmp1 + (2.0 * T9 + 1.0 / Lambda - 1.0) * dAbulk_dVg); dT0_dVb = 2.0 * (T8 * (2.0 / Abulk * dAbulk_dVb + tmp3) + (1.0 / Lambda - 1.0) * dAbulk_dVb); dT0_dVd = 0.0; T1 = Vgst2Vtm * (2.0 / Lambda - 1.0) + Abulk * EsatL + 3.0 * T7; dT1_dVg = (2.0 / Lambda - 1.0) - 2.0 * Vgst2Vtm * tmp1 + Abulk * dEsatL_dVg + EsatL * dAbulk_dVg + 3.0 * (T9 + T7 * tmp2 + T6 * dAbulk_dVg); dT1_dVb = Abulk * dEsatL_dVb + EsatL * dAbulk_dVb + 3.0 * (T6 * dAbulk_dVb + T7 * tmp3); dT1_dVd = Abulk * dEsatL_dVd; T2 = Vgst2Vtm * (EsatL + 2.0 * T6); dT2_dVg = EsatL + Vgst2Vtm * dEsatL_dVg + T6 * (4.0 + 2.0 * Vgst2Vtm * tmp2); dT2_dVb = Vgst2Vtm * (dEsatL_dVb + 2.0 * T6 * tmp3); dT2_dVd = Vgst2Vtm * dEsatL_dVd; T3 = sqrt(T1 * T1 - 2.0 * T0 * T2); Vdsat = (T1 - T3) / T0; dT3_dVg = (T1 * dT1_dVg - 2.0 * (T0 * dT2_dVg + T2 * dT0_dVg)) / T3; dT3_dVd = (T1 * dT1_dVd - 2.0 * (T0 * dT2_dVd + T2 * dT0_dVd)) / T3; dT3_dVb = (T1 * dT1_dVb - 2.0 * (T0 * dT2_dVb + T2 * dT0_dVb)) / T3; dVdsat_dVg = (dT1_dVg - (T1 * dT1_dVg - dT0_dVg * T2 - T0 * dT2_dVg) / T3 - Vdsat * dT0_dVg) / T0; dVdsat_dVb = (dT1_dVb - (T1 * dT1_dVb - dT0_dVb * T2 - T0 * dT2_dVb) / T3 - Vdsat * dT0_dVb) / T0; dVdsat_dVd = (dT1_dVd - (T1 * dT1_dVd - T0 * dT2_dVd) / T3) / T0; } here->BSIM3v32vdsat = Vdsat; /* Effective Vds (Vdseff) Calculation */ T1 = Vdsat - Vds - pParam->BSIM3v32delta; dT1_dVg = dVdsat_dVg; dT1_dVd = dVdsat_dVd - 1.0; dT1_dVb = dVdsat_dVb; T2 = sqrt(T1 * T1 + 4.0 * pParam->BSIM3v32delta * Vdsat); T0 = T1 / T2; T3 = 2.0 * pParam->BSIM3v32delta / T2; dT2_dVg = T0 * dT1_dVg + T3 * dVdsat_dVg; dT2_dVd = T0 * dT1_dVd + T3 * dVdsat_dVd; dT2_dVb = T0 * dT1_dVb + T3 * dVdsat_dVb; Vdseff = Vdsat - 0.5 * (T1 + T2); dVdseff_dVg = dVdsat_dVg - 0.5 * (dT1_dVg + dT2_dVg); dVdseff_dVd = dVdsat_dVd - 0.5 * (dT1_dVd + dT2_dVd); dVdseff_dVb = dVdsat_dVb - 0.5 * (dT1_dVb + dT2_dVb); /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: case BSIM3v32V322: /* Added to eliminate non-zero Vdseff at Vds=0.0 */ if (Vds == 0.0) { Vdseff = 0.0; dVdseff_dVg = 0.0; dVdseff_dVb = 0.0; } break; case BSIM3v32V32: default: /* Do nothing */ break; } /* Calculate VAsat */ tmp4 = 1.0 - 0.5 * Abulk * Vdsat / Vgst2Vtm; T9 = WVCoxRds * Vgsteff; T8 = T9 / Vgst2Vtm; T0 = EsatL + Vdsat + 2.0 * T9 * tmp4; T7 = 2.0 * WVCoxRds * tmp4; dT0_dVg = dEsatL_dVg + dVdsat_dVg + T7 * (1.0 + tmp2 * Vgsteff) - T8 * (Abulk * dVdsat_dVg - Abulk * Vdsat / Vgst2Vtm + Vdsat * dAbulk_dVg); dT0_dVb = dEsatL_dVb + dVdsat_dVb + T7 * tmp3 * Vgsteff - T8 * (dAbulk_dVb * Vdsat + Abulk * dVdsat_dVb); dT0_dVd = dEsatL_dVd + dVdsat_dVd - T8 * Abulk * dVdsat_dVd; T9 = WVCoxRds * Abulk; T1 = 2.0 / Lambda - 1.0 + T9; dT1_dVg = -2.0 * tmp1 + WVCoxRds * (Abulk * tmp2 + dAbulk_dVg); dT1_dVb = dAbulk_dVb * WVCoxRds + T9 * tmp3; Vasat = T0 / T1; dVasat_dVg = (dT0_dVg - Vasat * dT1_dVg) / T1; dVasat_dVb = (dT0_dVb - Vasat * dT1_dVb) / T1; dVasat_dVd = dT0_dVd / T1; if (Vdseff > Vds) Vdseff = Vds; diffVds = Vds - Vdseff; /* Added revision dependent code */ if (model->BSIM3v32intVersion > BSIM3v32V323) { here->BSIM3v32Vdseff = Vdseff; } /* Calculate VACLM */ if ((pParam->BSIM3v32pclm > 0.0) && (diffVds > 1.0e-10)) { T0 = 1.0 / (pParam->BSIM3v32pclm * Abulk * pParam->BSIM3v32litl); dT0_dVb = -T0 / Abulk * dAbulk_dVb; dT0_dVg = -T0 / Abulk * dAbulk_dVg; T2 = Vgsteff / EsatL; T1 = Leff * (Abulk + T2); dT1_dVg = Leff * ((1.0 - T2 * dEsatL_dVg) / EsatL + dAbulk_dVg); dT1_dVb = Leff * (dAbulk_dVb - T2 * dEsatL_dVb / EsatL); dT1_dVd = -T2 * dEsatL_dVd / Esat; T9 = T0 * T1; VACLM = T9 * diffVds; dVACLM_dVg = T0 * dT1_dVg * diffVds - T9 * dVdseff_dVg + T1 * diffVds * dT0_dVg; dVACLM_dVb = (dT0_dVb * T1 + T0 * dT1_dVb) * diffVds - T9 * dVdseff_dVb; dVACLM_dVd = T0 * dT1_dVd * diffVds + T9 * (1.0 - dVdseff_dVd); } else { VACLM = MAX_EXP; dVACLM_dVd = dVACLM_dVg = dVACLM_dVb = 0.0; } /* Calculate VADIBL */ if (pParam->BSIM3v32thetaRout > 0.0) { T8 = Abulk * Vdsat; T0 = Vgst2Vtm * T8; dT0_dVg = Vgst2Vtm * Abulk * dVdsat_dVg + T8 + Vgst2Vtm * Vdsat * dAbulk_dVg; dT0_dVb = Vgst2Vtm * (dAbulk_dVb * Vdsat + Abulk * dVdsat_dVb); dT0_dVd = Vgst2Vtm * Abulk * dVdsat_dVd; T1 = Vgst2Vtm + T8; dT1_dVg = 1.0 + Abulk * dVdsat_dVg + Vdsat * dAbulk_dVg; dT1_dVb = Abulk * dVdsat_dVb + dAbulk_dVb * Vdsat; dT1_dVd = Abulk * dVdsat_dVd; T9 = T1 * T1; T2 = pParam->BSIM3v32thetaRout; VADIBL = (Vgst2Vtm - T0 / T1) / T2; dVADIBL_dVg = (1.0 - dT0_dVg / T1 + T0 * dT1_dVg / T9) / T2; dVADIBL_dVb = (-dT0_dVb / T1 + T0 * dT1_dVb / T9) / T2; dVADIBL_dVd = (-dT0_dVd / T1 + T0 * dT1_dVd / T9) / T2; T7 = pParam->BSIM3v32pdiblb * Vbseff; if (T7 >= -0.9) { T3 = 1.0 / (1.0 + T7); VADIBL *= T3; dVADIBL_dVg *= T3; dVADIBL_dVb = (dVADIBL_dVb - VADIBL * pParam->BSIM3v32pdiblb) * T3; dVADIBL_dVd *= T3; } else /* Added to avoid the discontinuity problem caused by pdiblcb */ { T4 = 1.0 / (0.8 + T7); T3 = (17.0 + 20.0 * T7) * T4; dVADIBL_dVg *= T3; dVADIBL_dVb = dVADIBL_dVb * T3 - VADIBL * pParam->BSIM3v32pdiblb * T4 * T4; dVADIBL_dVd *= T3; VADIBL *= T3; } } else { VADIBL = MAX_EXP; dVADIBL_dVd = dVADIBL_dVg = dVADIBL_dVb = 0.0; } /* Calculate VA */ T8 = pParam->BSIM3v32pvag / EsatL; T9 = T8 * Vgsteff; if (T9 > -0.9) { T0 = 1.0 + T9; dT0_dVg = T8 * (1.0 - Vgsteff * dEsatL_dVg / EsatL); dT0_dVb = -T9 * dEsatL_dVb / EsatL; dT0_dVd = -T9 * dEsatL_dVd / EsatL; } else /* Added to avoid the discontinuity problems caused by pvag */ { T1 = 1.0 / (17.0 + 20.0 * T9); T0 = (0.8 + T9) * T1; T1 *= T1; dT0_dVg = T8 * (1.0 - Vgsteff * dEsatL_dVg / EsatL) * T1; T9 *= T1 / EsatL; dT0_dVb = -T9 * dEsatL_dVb; dT0_dVd = -T9 * dEsatL_dVd; } tmp1 = VACLM * VACLM; tmp2 = VADIBL * VADIBL; tmp3 = VACLM + VADIBL; T1 = VACLM * VADIBL / tmp3; tmp3 *= tmp3; dT1_dVg = (tmp1 * dVADIBL_dVg + tmp2 * dVACLM_dVg) / tmp3; dT1_dVd = (tmp1 * dVADIBL_dVd + tmp2 * dVACLM_dVd) / tmp3; dT1_dVb = (tmp1 * dVADIBL_dVb + tmp2 * dVACLM_dVb) / tmp3; Va = Vasat + T0 * T1; dVa_dVg = dVasat_dVg + T1 * dT0_dVg + T0 * dT1_dVg; dVa_dVd = dVasat_dVd + T1 * dT0_dVd + T0 * dT1_dVd; dVa_dVb = dVasat_dVb + T1 * dT0_dVb + T0 * dT1_dVb; /* Calculate VASCBE */ if (pParam->BSIM3v32pscbe2 > 0.0) { if (diffVds > pParam->BSIM3v32pscbe1 * pParam->BSIM3v32litl / EXP_THRESHOLD) { T0 = pParam->BSIM3v32pscbe1 * pParam->BSIM3v32litl / diffVds; VASCBE = Leff * exp(T0) / pParam->BSIM3v32pscbe2; T1 = T0 * VASCBE / diffVds; dVASCBE_dVg = T1 * dVdseff_dVg; dVASCBE_dVd = -T1 * (1.0 - dVdseff_dVd); dVASCBE_dVb = T1 * dVdseff_dVb; } else { VASCBE = MAX_EXP * Leff/pParam->BSIM3v32pscbe2; dVASCBE_dVg = dVASCBE_dVd = dVASCBE_dVb = 0.0; } } else { VASCBE = MAX_EXP; dVASCBE_dVg = dVASCBE_dVd = dVASCBE_dVb = 0.0; } /* Calculate Ids */ CoxWovL = model->BSIM3v32cox * Weff / Leff; beta = ueff * CoxWovL; dbeta_dVg = CoxWovL * dueff_dVg + beta * dWeff_dVg / Weff; dbeta_dVd = CoxWovL * dueff_dVd; dbeta_dVb = CoxWovL * dueff_dVb + beta * dWeff_dVb / Weff; T0 = 1.0 - 0.5 * Abulk * Vdseff / Vgst2Vtm; dT0_dVg = -0.5 * (Abulk * dVdseff_dVg - Abulk * Vdseff / Vgst2Vtm + Vdseff * dAbulk_dVg) / Vgst2Vtm; dT0_dVd = -0.5 * Abulk * dVdseff_dVd / Vgst2Vtm; dT0_dVb = -0.5 * (Abulk * dVdseff_dVb + dAbulk_dVb * Vdseff) / Vgst2Vtm; fgche1 = Vgsteff * T0; dfgche1_dVg = Vgsteff * dT0_dVg + T0; dfgche1_dVd = Vgsteff * dT0_dVd; dfgche1_dVb = Vgsteff * dT0_dVb; T9 = Vdseff / EsatL; fgche2 = 1.0 + T9; dfgche2_dVg = (dVdseff_dVg - T9 * dEsatL_dVg) / EsatL; dfgche2_dVd = (dVdseff_dVd - T9 * dEsatL_dVd) / EsatL; dfgche2_dVb = (dVdseff_dVb - T9 * dEsatL_dVb) / EsatL; gche = beta * fgche1 / fgche2; dgche_dVg = (beta * dfgche1_dVg + fgche1 * dbeta_dVg - gche * dfgche2_dVg) / fgche2; dgche_dVd = (beta * dfgche1_dVd + fgche1 * dbeta_dVd - gche * dfgche2_dVd) / fgche2; dgche_dVb = (beta * dfgche1_dVb + fgche1 * dbeta_dVb - gche * dfgche2_dVb) / fgche2; T0 = 1.0 + gche * Rds; T9 = Vdseff / T0; Idl = gche * T9; dIdl_dVg = (gche * dVdseff_dVg + T9 * dgche_dVg) / T0 - Idl * gche / T0 * dRds_dVg ; dIdl_dVd = (gche * dVdseff_dVd + T9 * dgche_dVd) / T0; dIdl_dVb = (gche * dVdseff_dVb + T9 * dgche_dVb - Idl * dRds_dVb * gche) / T0; T9 = diffVds / Va; T0 = 1.0 + T9; Idsa = Idl * T0; dIdsa_dVg = T0 * dIdl_dVg - Idl * (dVdseff_dVg + T9 * dVa_dVg) / Va; dIdsa_dVd = T0 * dIdl_dVd + Idl * (1.0 - dVdseff_dVd - T9 * dVa_dVd) / Va; dIdsa_dVb = T0 * dIdl_dVb - Idl * (dVdseff_dVb + T9 * dVa_dVb) / Va; T9 = diffVds / VASCBE; T0 = 1.0 + T9; Ids = Idsa * T0; Gm = T0 * dIdsa_dVg - Idsa * (dVdseff_dVg + T9 * dVASCBE_dVg) / VASCBE; Gds = T0 * dIdsa_dVd + Idsa * (1.0 - dVdseff_dVd - T9 * dVASCBE_dVd) / VASCBE; Gmb = T0 * dIdsa_dVb - Idsa * (dVdseff_dVb + T9 * dVASCBE_dVb) / VASCBE; Gds += Gm * dVgsteff_dVd; Gmb += Gm * dVgsteff_dVb; Gm *= dVgsteff_dVg; Gmb *= dVbseff_dVb; /* Substrate current begins */ tmp = pParam->BSIM3v32alpha0 + pParam->BSIM3v32alpha1 * Leff; if ((tmp <= 0.0) || (pParam->BSIM3v32beta0 <= 0.0)) { Isub = Gbd = Gbb = Gbg = 0.0; } else { T2 = tmp / Leff; if (diffVds > pParam->BSIM3v32beta0 / EXP_THRESHOLD) { T0 = -pParam->BSIM3v32beta0 / diffVds; T1 = T2 * diffVds * exp(T0); T3 = T1 / diffVds * (T0 - 1.0); dT1_dVg = T3 * dVdseff_dVg; dT1_dVd = T3 * (dVdseff_dVd - 1.0); dT1_dVb = T3 * dVdseff_dVb; } else { T3 = T2 * MIN_EXP; T1 = T3 * diffVds; dT1_dVg = -T3 * dVdseff_dVg; dT1_dVd = T3 * (1.0 - dVdseff_dVd); dT1_dVb = -T3 * dVdseff_dVb; } Isub = T1 * Idsa; Gbg = T1 * dIdsa_dVg + Idsa * dT1_dVg; Gbd = T1 * dIdsa_dVd + Idsa * dT1_dVd; Gbb = T1 * dIdsa_dVb + Idsa * dT1_dVb; Gbd += Gbg * dVgsteff_dVd; Gbb += Gbg * dVgsteff_dVb; Gbg *= dVgsteff_dVg; Gbb *= dVbseff_dVb; /* bug fixing */ } cdrain = Ids; here->BSIM3v32gds = Gds; here->BSIM3v32gm = Gm; here->BSIM3v32gmbs = Gmb; here->BSIM3v32gbbs = Gbb; here->BSIM3v32gbgs = Gbg; here->BSIM3v32gbds = Gbd; here->BSIM3v32csub = Isub; /* BSIM3v32 thermal noise Qinv calculated from all capMod * 0, 1, 2 & 3 stored in here->BSIM3v32qinv 1/1998 */ if ((model->BSIM3v32xpart < 0) || (!ChargeComputationNeeded)) { qgate = qdrn = qsrc = qbulk = 0.0; here->BSIM3v32cggb = here->BSIM3v32cgsb = here->BSIM3v32cgdb = 0.0; here->BSIM3v32cdgb = here->BSIM3v32cdsb = here->BSIM3v32cddb = 0.0; here->BSIM3v32cbgb = here->BSIM3v32cbsb = here->BSIM3v32cbdb = 0.0; here->BSIM3v32cqdb = here->BSIM3v32cqsb = here->BSIM3v32cqgb = here->BSIM3v32cqbb = 0.0; here->BSIM3v32gtau = 0.0; goto finished; } else if (model->BSIM3v32capMod == 0) { if (Vbseff < 0.0) { Vbseff = Vbs; dVbseff_dVb = 1.0; } else { Vbseff = pParam->BSIM3v32phi - Phis; dVbseff_dVb = -dPhis_dVb; } Vfb = pParam->BSIM3v32vfbcv; Vth = Vfb + pParam->BSIM3v32phi + pParam->BSIM3v32k1ox * sqrtPhis; Vgst = Vgs_eff - Vth; dVth_dVb = pParam->BSIM3v32k1ox * dsqrtPhis_dVb; dVgst_dVb = -dVth_dVb; dVgst_dVg = dVgs_eff_dVg; CoxWL = model->BSIM3v32cox * pParam->BSIM3v32weffCV * pParam->BSIM3v32leffCV; Arg1 = Vgs_eff - Vbseff - Vfb; if (Arg1 <= 0.0) { qgate = CoxWL * Arg1; qbulk = -qgate; qdrn = 0.0; here->BSIM3v32cggb = CoxWL * dVgs_eff_dVg; here->BSIM3v32cgdb = 0.0; here->BSIM3v32cgsb = CoxWL * (dVbseff_dVb - dVgs_eff_dVg); here->BSIM3v32cdgb = 0.0; here->BSIM3v32cddb = 0.0; here->BSIM3v32cdsb = 0.0; here->BSIM3v32cbgb = -CoxWL * dVgs_eff_dVg; here->BSIM3v32cbdb = 0.0; here->BSIM3v32cbsb = -here->BSIM3v32cgsb; here->BSIM3v32qinv = 0.0; } else if (Vgst <= 0.0) { T1 = 0.5 * pParam->BSIM3v32k1ox; T2 = sqrt(T1 * T1 + Arg1); qgate = CoxWL * pParam->BSIM3v32k1ox * (T2 - T1); qbulk = -qgate; qdrn = 0.0; T0 = CoxWL * T1 / T2; here->BSIM3v32cggb = T0 * dVgs_eff_dVg; here->BSIM3v32cgdb = 0.0; here->BSIM3v32cgsb = T0 * (dVbseff_dVb - dVgs_eff_dVg); here->BSIM3v32cdgb = 0.0; here->BSIM3v32cddb = 0.0; here->BSIM3v32cdsb = 0.0; here->BSIM3v32cbgb = -here->BSIM3v32cggb; here->BSIM3v32cbdb = 0.0; here->BSIM3v32cbsb = -here->BSIM3v32cgsb; here->BSIM3v32qinv = 0.0; } else { One_Third_CoxWL = CoxWL / 3.0; Two_Third_CoxWL = 2.0 * One_Third_CoxWL; AbulkCV = Abulk0 * pParam->BSIM3v32abulkCVfactor; dAbulkCV_dVb = pParam->BSIM3v32abulkCVfactor * dAbulk0_dVb; Vdsat = Vgst / AbulkCV; dVdsat_dVg = dVgs_eff_dVg / AbulkCV; dVdsat_dVb = - (Vdsat * dAbulkCV_dVb + dVth_dVb)/ AbulkCV; if (model->BSIM3v32xpart > 0.5) { /* 0/100 Charge partition model */ if (Vdsat <= Vds) { /* saturation region */ T1 = Vdsat / 3.0; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM3v32phi - T1); T2 = -Two_Third_CoxWL * Vgst; qbulk = -(qgate + T2); qdrn = 0.0; here->BSIM3v32cggb = One_Third_CoxWL * (3.0 - dVdsat_dVg) * dVgs_eff_dVg; T2 = -One_Third_CoxWL * dVdsat_dVb; here->BSIM3v32cgsb = -(here->BSIM3v32cggb + T2); here->BSIM3v32cgdb = 0.0; here->BSIM3v32cdgb = 0.0; here->BSIM3v32cddb = 0.0; here->BSIM3v32cdsb = 0.0; here->BSIM3v32cbgb = -(here->BSIM3v32cggb - Two_Third_CoxWL * dVgs_eff_dVg); T3 = -(T2 + Two_Third_CoxWL * dVth_dVb); here->BSIM3v32cbsb = -(here->BSIM3v32cbgb + T3); here->BSIM3v32cbdb = 0.0; here->BSIM3v32qinv = -(qgate + qbulk); } else { /* linear region */ Alphaz = Vgst / Vdsat; T1 = 2.0 * Vdsat - Vds; T2 = Vds / (3.0 * T1); T3 = T2 * Vds; T9 = 0.25 * CoxWL; T4 = T9 * Alphaz; T7 = 2.0 * Vds - T1 - 3.0 * T3; T8 = T3 - T1 - 2.0 * Vds; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM3v32phi - 0.5 * (Vds - T3)); T10 = T4 * T8; qdrn = T4 * T7; qbulk = -(qgate + qdrn + T10); T5 = T3 / T1; here->BSIM3v32cggb = CoxWL * (1.0 - T5 * dVdsat_dVg) * dVgs_eff_dVg; T11 = -CoxWL * T5 * dVdsat_dVb; here->BSIM3v32cgdb = CoxWL * (T2 - 0.5 + 0.5 * T5); here->BSIM3v32cgsb = -(here->BSIM3v32cggb + T11 + here->BSIM3v32cgdb); T6 = 1.0 / Vdsat; dAlphaz_dVg = T6 * (1.0 - Alphaz * dVdsat_dVg); dAlphaz_dVb = -T6 * (dVth_dVb + Alphaz * dVdsat_dVb); T7 = T9 * T7; T8 = T9 * T8; T9 = 2.0 * T4 * (1.0 - 3.0 * T5); here->BSIM3v32cdgb = (T7 * dAlphaz_dVg - T9 * dVdsat_dVg) * dVgs_eff_dVg; T12 = T7 * dAlphaz_dVb - T9 * dVdsat_dVb; here->BSIM3v32cddb = T4 * (3.0 - 6.0 * T2 - 3.0 * T5); here->BSIM3v32cdsb = -(here->BSIM3v32cdgb + T12 + here->BSIM3v32cddb); T9 = 2.0 * T4 * (1.0 + T5); T10 = (T8 * dAlphaz_dVg - T9 * dVdsat_dVg) * dVgs_eff_dVg; T11 = T8 * dAlphaz_dVb - T9 * dVdsat_dVb; T12 = T4 * (2.0 * T2 + T5 - 1.0); T0 = -(T10 + T11 + T12); here->BSIM3v32cbgb = -(here->BSIM3v32cggb + here->BSIM3v32cdgb + T10); here->BSIM3v32cbdb = -(here->BSIM3v32cgdb + here->BSIM3v32cddb + T12); here->BSIM3v32cbsb = -(here->BSIM3v32cgsb + here->BSIM3v32cdsb + T0); here->BSIM3v32qinv = -(qgate + qbulk); } } else if (model->BSIM3v32xpart < 0.5) { /* 40/60 Charge partition model */ if (Vds >= Vdsat) { /* saturation region */ T1 = Vdsat / 3.0; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM3v32phi - T1); T2 = -Two_Third_CoxWL * Vgst; qbulk = -(qgate + T2); qdrn = 0.4 * T2; here->BSIM3v32cggb = One_Third_CoxWL * (3.0 - dVdsat_dVg) * dVgs_eff_dVg; T2 = -One_Third_CoxWL * dVdsat_dVb; here->BSIM3v32cgsb = -(here->BSIM3v32cggb + T2); here->BSIM3v32cgdb = 0.0; T3 = 0.4 * Two_Third_CoxWL; here->BSIM3v32cdgb = -T3 * dVgs_eff_dVg; here->BSIM3v32cddb = 0.0; T4 = T3 * dVth_dVb; here->BSIM3v32cdsb = -(T4 + here->BSIM3v32cdgb); here->BSIM3v32cbgb = -(here->BSIM3v32cggb - Two_Third_CoxWL * dVgs_eff_dVg); T3 = -(T2 + Two_Third_CoxWL * dVth_dVb); here->BSIM3v32cbsb = -(here->BSIM3v32cbgb + T3); here->BSIM3v32cbdb = 0.0; here->BSIM3v32qinv = -(qgate + qbulk); } else { /* linear region */ Alphaz = Vgst / Vdsat; T1 = 2.0 * Vdsat - Vds; T2 = Vds / (3.0 * T1); T3 = T2 * Vds; T9 = 0.25 * CoxWL; T4 = T9 * Alphaz; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM3v32phi - 0.5 * (Vds - T3)); T5 = T3 / T1; here->BSIM3v32cggb = CoxWL * (1.0 - T5 * dVdsat_dVg) * dVgs_eff_dVg; tmp = -CoxWL * T5 * dVdsat_dVb; here->BSIM3v32cgdb = CoxWL * (T2 - 0.5 + 0.5 * T5); here->BSIM3v32cgsb = -(here->BSIM3v32cggb + here->BSIM3v32cgdb + tmp); T6 = 1.0 / Vdsat; dAlphaz_dVg = T6 * (1.0 - Alphaz * dVdsat_dVg); dAlphaz_dVb = -T6 * (dVth_dVb + Alphaz * dVdsat_dVb); T6 = 8.0 * Vdsat * Vdsat - 6.0 * Vdsat * Vds + 1.2 * Vds * Vds; T8 = T2 / T1; T7 = Vds - T1 - T8 * T6; qdrn = T4 * T7; T7 *= T9; tmp = T8 / T1; tmp1 = T4 * (2.0 - 4.0 * tmp * T6 + T8 * (16.0 * Vdsat - 6.0 * Vds)); here->BSIM3v32cdgb = (T7 * dAlphaz_dVg - tmp1 * dVdsat_dVg) * dVgs_eff_dVg; T10 = T7 * dAlphaz_dVb - tmp1 * dVdsat_dVb; here->BSIM3v32cddb = T4 * (2.0 - (1.0 / (3.0 * T1 * T1) + 2.0 * tmp) * T6 + T8 * (6.0 * Vdsat - 2.4 * Vds)); here->BSIM3v32cdsb = -(here->BSIM3v32cdgb + T10 + here->BSIM3v32cddb); T7 = 2.0 * (T1 + T3); qbulk = -(qgate - T4 * T7); T7 *= T9; T0 = 4.0 * T4 * (1.0 - T5); T12 = (-T7 * dAlphaz_dVg - here->BSIM3v32cdgb - T0 * dVdsat_dVg) * dVgs_eff_dVg; T11 = -T7 * dAlphaz_dVb - T10 - T0 * dVdsat_dVb; T10 = -4.0 * T4 * (T2 - 0.5 + 0.5 * T5) - here->BSIM3v32cddb; tmp = -(T10 + T11 + T12); here->BSIM3v32cbgb = -(here->BSIM3v32cggb + here->BSIM3v32cdgb + T12); here->BSIM3v32cbdb = -(here->BSIM3v32cgdb + here->BSIM3v32cddb + T10); /* bug fix */ here->BSIM3v32cbsb = -(here->BSIM3v32cgsb + here->BSIM3v32cdsb + tmp); here->BSIM3v32qinv = -(qgate + qbulk); } } else { /* 50/50 partitioning */ if (Vds >= Vdsat) { /* saturation region */ T1 = Vdsat / 3.0; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM3v32phi - T1); T2 = -Two_Third_CoxWL * Vgst; qbulk = -(qgate + T2); qdrn = 0.5 * T2; here->BSIM3v32cggb = One_Third_CoxWL * (3.0 - dVdsat_dVg) * dVgs_eff_dVg; T2 = -One_Third_CoxWL * dVdsat_dVb; here->BSIM3v32cgsb = -(here->BSIM3v32cggb + T2); here->BSIM3v32cgdb = 0.0; here->BSIM3v32cdgb = -One_Third_CoxWL * dVgs_eff_dVg; here->BSIM3v32cddb = 0.0; T4 = One_Third_CoxWL * dVth_dVb; here->BSIM3v32cdsb = -(T4 + here->BSIM3v32cdgb); here->BSIM3v32cbgb = -(here->BSIM3v32cggb - Two_Third_CoxWL * dVgs_eff_dVg); T3 = -(T2 + Two_Third_CoxWL * dVth_dVb); here->BSIM3v32cbsb = -(here->BSIM3v32cbgb + T3); here->BSIM3v32cbdb = 0.0; here->BSIM3v32qinv = -(qgate + qbulk); } else { /* linear region */ Alphaz = Vgst / Vdsat; T1 = 2.0 * Vdsat - Vds; T2 = Vds / (3.0 * T1); T3 = T2 * Vds; T9 = 0.25 * CoxWL; T4 = T9 * Alphaz; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM3v32phi - 0.5 * (Vds - T3)); T5 = T3 / T1; here->BSIM3v32cggb = CoxWL * (1.0 - T5 * dVdsat_dVg) * dVgs_eff_dVg; tmp = -CoxWL * T5 * dVdsat_dVb; here->BSIM3v32cgdb = CoxWL * (T2 - 0.5 + 0.5 * T5); here->BSIM3v32cgsb = -(here->BSIM3v32cggb + here->BSIM3v32cgdb + tmp); T6 = 1.0 / Vdsat; dAlphaz_dVg = T6 * (1.0 - Alphaz * dVdsat_dVg); dAlphaz_dVb = -T6 * (dVth_dVb + Alphaz * dVdsat_dVb); T7 = T1 + T3; qdrn = -T4 * T7; qbulk = - (qgate + qdrn + qdrn); T7 *= T9; T0 = T4 * (2.0 * T5 - 2.0); here->BSIM3v32cdgb = (T0 * dVdsat_dVg - T7 * dAlphaz_dVg) * dVgs_eff_dVg; T12 = T0 * dVdsat_dVb - T7 * dAlphaz_dVb; here->BSIM3v32cddb = T4 * (1.0 - 2.0 * T2 - T5); here->BSIM3v32cdsb = -(here->BSIM3v32cdgb + T12 + here->BSIM3v32cddb); here->BSIM3v32cbgb = -(here->BSIM3v32cggb + 2.0 * here->BSIM3v32cdgb); here->BSIM3v32cbdb = -(here->BSIM3v32cgdb + 2.0 * here->BSIM3v32cddb); here->BSIM3v32cbsb = -(here->BSIM3v32cgsb + 2.0 * here->BSIM3v32cdsb); here->BSIM3v32qinv = -(qgate + qbulk); } } } } else { if (Vbseff < 0.0) { VbseffCV = Vbseff; dVbseffCV_dVb = 1.0; } else { VbseffCV = pParam->BSIM3v32phi - Phis; dVbseffCV_dVb = -dPhis_dVb; } CoxWL = model->BSIM3v32cox * pParam->BSIM3v32weffCV * pParam->BSIM3v32leffCV; /* Seperate VgsteffCV with noff and voffcv */ noff = n * pParam->BSIM3v32noff; dnoff_dVd = pParam->BSIM3v32noff * dn_dVd; dnoff_dVb = pParam->BSIM3v32noff * dn_dVb; T0 = Vtm * noff; voffcv = pParam->BSIM3v32voffcv; VgstNVt = (Vgst - voffcv) / T0; if (VgstNVt > EXP_THRESHOLD) { Vgsteff = Vgst - voffcv; dVgsteff_dVg = dVgs_eff_dVg; dVgsteff_dVd = -dVth_dVd; dVgsteff_dVb = -dVth_dVb; } else if (VgstNVt < -EXP_THRESHOLD) { Vgsteff = T0 * log(1.0 + MIN_EXP); dVgsteff_dVg = 0.0; dVgsteff_dVd = Vgsteff / noff; dVgsteff_dVb = dVgsteff_dVd * dnoff_dVb; dVgsteff_dVd *= dnoff_dVd; } else { ExpVgst = exp(VgstNVt); Vgsteff = T0 * log(1.0 + ExpVgst); dVgsteff_dVg = ExpVgst / (1.0 + ExpVgst); dVgsteff_dVd = -dVgsteff_dVg * (dVth_dVd + (Vgst - voffcv) / noff * dnoff_dVd) + Vgsteff / noff * dnoff_dVd; dVgsteff_dVb = -dVgsteff_dVg * (dVth_dVb + (Vgst - voffcv) / noff * dnoff_dVb) + Vgsteff / noff * dnoff_dVb; dVgsteff_dVg *= dVgs_eff_dVg; } /* End of VgsteffCV */ if (model->BSIM3v32capMod == 1) { /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: case BSIM3v32V322: Vfb = here->BSIM3v32vfbzb; break; case BSIM3v32V32: Vfb = here->BSIM3v32vfbzb; dVfb_dVb = dVfb_dVd = 0.0; break; default: Vfb = Vth - pParam->BSIM3v32phi - pParam->BSIM3v32k1ox * sqrtPhis; dVfb_dVb = dVth_dVb - pParam->BSIM3v32k1ox * dsqrtPhis_dVb; dVfb_dVd = dVth_dVd; } Arg1 = Vgs_eff - VbseffCV - Vfb - Vgsteff; if (Arg1 <= 0.0) { qgate = CoxWL * Arg1; Cgg = CoxWL * (dVgs_eff_dVg - dVgsteff_dVg); /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: case BSIM3v32V322: Cgd = -CoxWL * dVgsteff_dVd; Cgb = -CoxWL * (dVbseffCV_dVb + dVgsteff_dVb); break; case BSIM3v32V32: default: Cgd = -CoxWL * (dVfb_dVd + dVgsteff_dVd); Cgb = -CoxWL * (dVfb_dVb + dVbseffCV_dVb + dVgsteff_dVb); } } else { T0 = 0.5 * pParam->BSIM3v32k1ox; T1 = sqrt(T0 * T0 + Arg1); T2 = CoxWL * T0 / T1; qgate = CoxWL * pParam->BSIM3v32k1ox * (T1 - T0); Cgg = T2 * (dVgs_eff_dVg - dVgsteff_dVg); /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: case BSIM3v32V322: Cgd = -T2 * dVgsteff_dVd; Cgb = -T2 * (dVbseffCV_dVb + dVgsteff_dVb); break; case BSIM3v32V32: default: Cgd = -T2 * (dVfb_dVd + dVgsteff_dVd); Cgb = -T2 * (dVfb_dVb + dVbseffCV_dVb + dVgsteff_dVb); } } qbulk = -qgate; Cbg = -Cgg; Cbd = -Cgd; Cbb = -Cgb; One_Third_CoxWL = CoxWL / 3.0; Two_Third_CoxWL = 2.0 * One_Third_CoxWL; AbulkCV = Abulk0 * pParam->BSIM3v32abulkCVfactor; dAbulkCV_dVb = pParam->BSIM3v32abulkCVfactor * dAbulk0_dVb; VdsatCV = Vgsteff / AbulkCV; if (VdsatCV < Vds) { dVdsatCV_dVg = 1.0 / AbulkCV; dVdsatCV_dVb = -VdsatCV * dAbulkCV_dVb / AbulkCV; T0 = Vgsteff - VdsatCV / 3.0; dT0_dVg = 1.0 - dVdsatCV_dVg / 3.0; dT0_dVb = -dVdsatCV_dVb / 3.0; qgate += CoxWL * T0; Cgg1 = CoxWL * dT0_dVg; Cgb1 = CoxWL * dT0_dVb + Cgg1 * dVgsteff_dVb; Cgd1 = Cgg1 * dVgsteff_dVd; Cgg1 *= dVgsteff_dVg; Cgg += Cgg1; Cgb += Cgb1; Cgd += Cgd1; T0 = VdsatCV - Vgsteff; dT0_dVg = dVdsatCV_dVg - 1.0; dT0_dVb = dVdsatCV_dVb; qbulk += One_Third_CoxWL * T0; Cbg1 = One_Third_CoxWL * dT0_dVg; Cbb1 = One_Third_CoxWL * dT0_dVb + Cbg1 * dVgsteff_dVb; Cbd1 = Cbg1 * dVgsteff_dVd; Cbg1 *= dVgsteff_dVg; Cbg += Cbg1; Cbb += Cbb1; Cbd += Cbd1; if (model->BSIM3v32xpart > 0.5) T0 = -Two_Third_CoxWL; else if (model->BSIM3v32xpart < 0.5) T0 = -0.4 * CoxWL; else T0 = -One_Third_CoxWL; qsrc = T0 * Vgsteff; Csg = T0 * dVgsteff_dVg; Csb = T0 * dVgsteff_dVb; Csd = T0 * dVgsteff_dVd; Cgb *= dVbseff_dVb; Cbb *= dVbseff_dVb; Csb *= dVbseff_dVb; } else { T0 = AbulkCV * Vds; T1 = 12.0 * (Vgsteff - 0.5 * T0 + 1.e-20); T2 = Vds / T1; T3 = T0 * T2; dT3_dVg = -12.0 * T2 * T2 * AbulkCV; dT3_dVd = 6.0 * T0 * (4.0 * Vgsteff - T0) / T1 / T1 - 0.5; dT3_dVb = 12.0 * T2 * T2 * dAbulkCV_dVb * Vgsteff; qgate += CoxWL * (Vgsteff - 0.5 * Vds + T3); Cgg1 = CoxWL * (1.0 + dT3_dVg); Cgb1 = CoxWL * dT3_dVb + Cgg1 * dVgsteff_dVb; Cgd1 = CoxWL * dT3_dVd + Cgg1 * dVgsteff_dVd; Cgg1 *= dVgsteff_dVg; Cgg += Cgg1; Cgb += Cgb1; Cgd += Cgd1; qbulk += CoxWL * (1.0 - AbulkCV) * (0.5 * Vds - T3); Cbg1 = -CoxWL * ((1.0 - AbulkCV) * dT3_dVg); Cbb1 = -CoxWL * ((1.0 - AbulkCV) * dT3_dVb + (0.5 * Vds - T3) * dAbulkCV_dVb) + Cbg1 * dVgsteff_dVb; Cbd1 = -CoxWL * (1.0 - AbulkCV) * dT3_dVd + Cbg1 * dVgsteff_dVd; Cbg1 *= dVgsteff_dVg; Cbg += Cbg1; Cbb += Cbb1; Cbd += Cbd1; if (model->BSIM3v32xpart > 0.5) { /* 0/100 Charge petition model */ T1 = T1 + T1; qsrc = -CoxWL * (0.5 * Vgsteff + 0.25 * T0 - T0 * T0 / T1); Csg = -CoxWL * (0.5 + 24.0 * T0 * Vds / T1 / T1 * AbulkCV); Csb = -CoxWL * (0.25 * Vds * dAbulkCV_dVb - 12.0 * T0 * Vds / T1 / T1 * (4.0 * Vgsteff - T0) * dAbulkCV_dVb) + Csg * dVgsteff_dVb; Csd = -CoxWL * (0.25 * AbulkCV - 12.0 * AbulkCV * T0 / T1 / T1 * (4.0 * Vgsteff - T0)) + Csg * dVgsteff_dVd; Csg *= dVgsteff_dVg; } else if (model->BSIM3v32xpart < 0.5) { /* 40/60 Charge petition model */ T1 = T1 / 12.0; T2 = 0.5 * CoxWL / (T1 * T1); T3 = Vgsteff * (2.0 * T0 * T0 / 3.0 + Vgsteff * (Vgsteff - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T2 * T3; T4 = 4.0 / 3.0 * Vgsteff * (Vgsteff - T0) + 0.4 * T0 * T0; Csg = -2.0 * qsrc / T1 - T2 * (Vgsteff * (3.0 * Vgsteff - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0); Csb = (qsrc / T1 * Vds + T2 * T4 * Vds) * dAbulkCV_dVb + Csg * dVgsteff_dVb; Csd = (qsrc / T1 + T2 * T4) * AbulkCV + Csg * dVgsteff_dVd; Csg *= dVgsteff_dVg; } else { /* 50/50 Charge petition model */ qsrc = -0.5 * (qgate + qbulk); Csg = -0.5 * (Cgg1 + Cbg1); Csb = -0.5 * (Cgb1 + Cbb1); Csd = -0.5 * (Cgd1 + Cbd1); } Cgb *= dVbseff_dVb; Cbb *= dVbseff_dVb; Csb *= dVbseff_dVb; } qdrn = -(qgate + qbulk + qsrc); here->BSIM3v32cggb = Cgg; here->BSIM3v32cgsb = -(Cgg + Cgd + Cgb); here->BSIM3v32cgdb = Cgd; here->BSIM3v32cdgb = -(Cgg + Cbg + Csg); here->BSIM3v32cdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb + Csg + Csd + Csb); here->BSIM3v32cddb = -(Cgd + Cbd + Csd); here->BSIM3v32cbgb = Cbg; here->BSIM3v32cbsb = -(Cbg + Cbd + Cbb); here->BSIM3v32cbdb = Cbd; here->BSIM3v32qinv = -(qgate + qbulk); } else if (model->BSIM3v32capMod == 2) { /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: case BSIM3v32V322: Vfb = here->BSIM3v32vfbzb; break; case BSIM3v32V32: Vfb = here->BSIM3v32vfbzb; dVfb_dVb = dVfb_dVd = 0.0; break; default: /* old code prior to v3.2 */ Vfb = Vth - pParam->BSIM3v32phi - pParam->BSIM3v32k1ox * sqrtPhis; dVfb_dVb = dVth_dVb - pParam->BSIM3v32k1ox * dsqrtPhis_dVb; dVfb_dVd = dVth_dVd; } V3 = Vfb - Vgs_eff + VbseffCV - DELTA_3; if (Vfb <= 0.0) { T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * Vfb); T2 = -DELTA_3 / T0; } else { T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * Vfb); T2 = DELTA_3 / T0; } T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = Vfb - 0.5 * (V3 + T0); /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: case BSIM3v32V322: /* Do nothing */ break; case BSIM3v32V32: default: dVfbeff_dVd = (1.0 - T1 - T2) * dVfb_dVd; } dVfbeff_dVg = T1 * dVgs_eff_dVg; /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: case BSIM3v32V322: dVfbeff_dVb = -T1 * dVbseffCV_dVb; break; case BSIM3v32V32: default: dVfbeff_dVb = (1.0 - T1 - T2) * dVfb_dVb - T1 * dVbseffCV_dVb; } Qac0 = CoxWL * (Vfbeff - Vfb); dQac0_dVg = CoxWL * dVfbeff_dVg; /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: case BSIM3v32V322: /* Do nothing */ break; case BSIM3v32V32: default: dQac0_dVd = CoxWL * (dVfbeff_dVd - dVfb_dVd); } /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: case BSIM3v32V322: dQac0_dVb = CoxWL * dVfbeff_dVb; break; case BSIM3v32V32: default: dQac0_dVb = CoxWL * (dVfbeff_dVb - dVfb_dVb); } T0 = 0.5 * pParam->BSIM3v32k1ox; T3 = Vgs_eff - Vfbeff - VbseffCV - Vgsteff; if (pParam->BSIM3v32k1ox == 0.0) { T1 = 0.0; T2 = 0.0; } else if (T3 < 0.0) { T1 = T0 + T3 / pParam->BSIM3v32k1ox; T2 = CoxWL; } else { T1 = sqrt(T0 * T0 + T3); T2 = CoxWL * T0 / T1; } Qsub0 = CoxWL * pParam->BSIM3v32k1ox * (T1 - T0); dQsub0_dVg = T2 * (dVgs_eff_dVg - dVfbeff_dVg - dVgsteff_dVg); /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: case BSIM3v32V322: dQsub0_dVd = -T2 * dVgsteff_dVd; break; case BSIM3v32V32: default: dQsub0_dVd = -T2 * (dVfbeff_dVd + dVgsteff_dVd); } dQsub0_dVb = -T2 * (dVfbeff_dVb + dVbseffCV_dVb + dVgsteff_dVb); AbulkCV = Abulk0 * pParam->BSIM3v32abulkCVfactor; dAbulkCV_dVb = pParam->BSIM3v32abulkCVfactor * dAbulk0_dVb; VdsatCV = Vgsteff / AbulkCV; V4 = VdsatCV - Vds - DELTA_4; T0 = sqrt(V4 * V4 + 4.0 * DELTA_4 * VdsatCV); VdseffCV = VdsatCV - 0.5 * (V4 + T0); T1 = 0.5 * (1.0 + V4 / T0); T2 = DELTA_4 / T0; T3 = (1.0 - T1 - T2) / AbulkCV; dVdseffCV_dVg = T3; dVdseffCV_dVd = T1; dVdseffCV_dVb = -T3 * VdsatCV * dAbulkCV_dVb; /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: case BSIM3v32V322: /* Added to eliminate non-zero VdseffCV at Vds=0.0 */ if (Vds == 0.0) { VdseffCV = 0.0; dVdseffCV_dVg = 0.0; dVdseffCV_dVb = 0.0; } break; case BSIM3v32V32: default: /* Do nothing */ break; } T0 = AbulkCV * VdseffCV; T1 = 12.0 * (Vgsteff - 0.5 * T0 + 1e-20); T2 = VdseffCV / T1; T3 = T0 * T2; T4 = (1.0 - 12.0 * T2 * T2 * AbulkCV); T5 = (6.0 * T0 * (4.0 * Vgsteff - T0) / (T1 * T1) - 0.5); T6 = 12.0 * T2 * T2 * Vgsteff; qinoi = -CoxWL * (Vgsteff - 0.5 * T0 + AbulkCV * T3); qgate = CoxWL * (Vgsteff - 0.5 * VdseffCV + T3); Cgg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); Cgd1 = CoxWL * T5 * dVdseffCV_dVd + Cgg1 * dVgsteff_dVd; Cgb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Cgg1 * dVgsteff_dVb; Cgg1 *= dVgsteff_dVg; T7 = 1.0 - AbulkCV; qbulk = CoxWL * T7 * (0.5 * VdseffCV - T3); T4 = -T7 * (T4 - 1.0); T5 = -T7 * T5; T6 = -(T7 * T6 + (0.5 * VdseffCV - T3)); Cbg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); Cbd1 = CoxWL * T5 * dVdseffCV_dVd + Cbg1 * dVgsteff_dVd; Cbb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Cbg1 * dVgsteff_dVb; Cbg1 *= dVgsteff_dVg; if (model->BSIM3v32xpart > 0.5) { /* 0/100 Charge petition model */ T1 = T1 + T1; qsrc = -CoxWL * (0.5 * Vgsteff + 0.25 * T0 - T0 * T0 / T1); T7 = (4.0 * Vgsteff - T0) / (T1 * T1); T4 = -(0.5 + 24.0 * T0 * T0 / (T1 * T1)); T5 = -(0.25 * AbulkCV - 12.0 * AbulkCV * T0 * T7); T6 = -(0.25 * VdseffCV - 12.0 * T0 * VdseffCV * T7); Csg = CoxWL * (T4 + T5 * dVdseffCV_dVg); Csd = CoxWL * T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd; Csb = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Csg * dVgsteff_dVb; Csg *= dVgsteff_dVg; } else if (model->BSIM3v32xpart < 0.5) { /* 40/60 Charge petition model */ T1 = T1 / 12.0; T2 = 0.5 * CoxWL / (T1 * T1); T3 = Vgsteff * (2.0 * T0 * T0 / 3.0 + Vgsteff * (Vgsteff - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T2 * T3; T7 = 4.0 / 3.0 * Vgsteff * (Vgsteff - T0) + 0.4 * T0 * T0; T4 = -2.0 * qsrc / T1 - T2 * (Vgsteff * (3.0 * Vgsteff - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0); T5 = (qsrc / T1 + T2 * T7) * AbulkCV; T6 = (qsrc / T1 * VdseffCV + T2 * T7 * VdseffCV); Csg = (T4 + T5 * dVdseffCV_dVg); Csd = T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd; Csb = (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Csg * dVgsteff_dVb; Csg *= dVgsteff_dVg; } else { /* 50/50 Charge petition model */ qsrc = -0.5 * (qgate + qbulk); Csg = -0.5 * (Cgg1 + Cbg1); Csb = -0.5 * (Cgb1 + Cbb1); Csd = -0.5 * (Cgd1 + Cbd1); } qgate += Qac0 + Qsub0; qbulk -= (Qac0 + Qsub0); qdrn = -(qgate + qbulk + qsrc); Cgg = dQac0_dVg + dQsub0_dVg + Cgg1; /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: case BSIM3v32V322: Cgd = dQsub0_dVd + Cgd1; break; case BSIM3v32V32: default: Cgd = dQac0_dVd + dQsub0_dVd + Cgd1; } Cgb = dQac0_dVb + dQsub0_dVb + Cgb1; Cbg = Cbg1 - dQac0_dVg - dQsub0_dVg; /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: case BSIM3v32V322: Cbd = Cbd1 - dQsub0_dVd; break; case BSIM3v32V32: default: Cbd = Cbd1 - dQac0_dVd - dQsub0_dVd; } Cbb = Cbb1 - dQac0_dVb - dQsub0_dVb; Cgb *= dVbseff_dVb; Cbb *= dVbseff_dVb; Csb *= dVbseff_dVb; here->BSIM3v32cggb = Cgg; here->BSIM3v32cgsb = -(Cgg + Cgd + Cgb); here->BSIM3v32cgdb = Cgd; here->BSIM3v32cdgb = -(Cgg + Cbg + Csg); here->BSIM3v32cdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb + Csg + Csd + Csb); here->BSIM3v32cddb = -(Cgd + Cbd + Csd); here->BSIM3v32cbgb = Cbg; here->BSIM3v32cbsb = -(Cbg + Cbd + Cbb); here->BSIM3v32cbdb = Cbd; here->BSIM3v32qinv = qinoi; } /* New Charge-Thickness capMod (CTM) begins */ else if (model->BSIM3v32capMod == 3) { V3 = here->BSIM3v32vfbzb - Vgs_eff + VbseffCV - DELTA_3; if (here->BSIM3v32vfbzb <= 0.0) { T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * here->BSIM3v32vfbzb); T2 = -DELTA_3 / T0; } else { T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * here->BSIM3v32vfbzb); T2 = DELTA_3 / T0; } T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = here->BSIM3v32vfbzb - 0.5 * (V3 + T0); dVfbeff_dVg = T1 * dVgs_eff_dVg; dVfbeff_dVb = -T1 * dVbseffCV_dVb; Cox = model->BSIM3v32cox; Tox = 1.0e8 * model->BSIM3v32tox; T0 = (Vgs_eff - VbseffCV - here->BSIM3v32vfbzb) / Tox; dT0_dVg = dVgs_eff_dVg / Tox; dT0_dVb = -dVbseffCV_dVb / Tox; tmp = T0 * pParam->BSIM3v32acde; if ((-EXP_THRESHOLD < tmp) && (tmp < EXP_THRESHOLD)) { Tcen = pParam->BSIM3v32ldeb * exp(tmp); dTcen_dVg = pParam->BSIM3v32acde * Tcen; dTcen_dVb = dTcen_dVg * dT0_dVb; dTcen_dVg *= dT0_dVg; } else if (tmp <= -EXP_THRESHOLD) { Tcen = pParam->BSIM3v32ldeb * MIN_EXP; dTcen_dVg = dTcen_dVb = 0.0; } else { Tcen = pParam->BSIM3v32ldeb * MAX_EXP; dTcen_dVg = dTcen_dVb = 0.0; } LINK = 1.0e-3 * model->BSIM3v32tox; V3 = pParam->BSIM3v32ldeb - Tcen - LINK; V4 = sqrt(V3 * V3 + 4.0 * LINK * pParam->BSIM3v32ldeb); Tcen = pParam->BSIM3v32ldeb - 0.5 * (V3 + V4); T1 = 0.5 * (1.0 + V3 / V4); dTcen_dVg *= T1; dTcen_dVb *= T1; Ccen = EPSSI / Tcen; T2 = Cox / (Cox + Ccen); Coxeff = T2 * Ccen; T3 = -Ccen / Tcen; dCoxeff_dVg = T2 * T2 * T3; dCoxeff_dVb = dCoxeff_dVg * dTcen_dVb; dCoxeff_dVg *= dTcen_dVg; CoxWLcen = CoxWL * Coxeff / Cox; Qac0 = CoxWLcen * (Vfbeff - here->BSIM3v32vfbzb); QovCox = Qac0 / Coxeff; dQac0_dVg = CoxWLcen * dVfbeff_dVg + QovCox * dCoxeff_dVg; dQac0_dVb = CoxWLcen * dVfbeff_dVb + QovCox * dCoxeff_dVb; T0 = 0.5 * pParam->BSIM3v32k1ox; T3 = Vgs_eff - Vfbeff - VbseffCV - Vgsteff; if (pParam->BSIM3v32k1ox == 0.0) { T1 = 0.0; T2 = 0.0; } else if (T3 < 0.0) { T1 = T0 + T3 / pParam->BSIM3v32k1ox; T2 = CoxWLcen; } else { T1 = sqrt(T0 * T0 + T3); T2 = CoxWLcen * T0 / T1; } Qsub0 = CoxWLcen * pParam->BSIM3v32k1ox * (T1 - T0); QovCox = Qsub0 / Coxeff; dQsub0_dVg = T2 * (dVgs_eff_dVg - dVfbeff_dVg - dVgsteff_dVg) + QovCox * dCoxeff_dVg; dQsub0_dVd = -T2 * dVgsteff_dVd; dQsub0_dVb = -T2 * (dVfbeff_dVb + dVbseffCV_dVb + dVgsteff_dVb) + QovCox * dCoxeff_dVb; /* Gate-bias dependent delta Phis begins */ if (pParam->BSIM3v32k1ox <= 0.0) { Denomi = 0.25 * pParam->BSIM3v32moin * Vtm; T0 = 0.5 * pParam->BSIM3v32sqrtPhi; } else { Denomi = pParam->BSIM3v32moin * Vtm * pParam->BSIM3v32k1ox * pParam->BSIM3v32k1ox; T0 = pParam->BSIM3v32k1ox * pParam->BSIM3v32sqrtPhi; } T1 = 2.0 * T0 + Vgsteff; DeltaPhi = Vtm * log(1.0 + T1 * Vgsteff / Denomi); dDeltaPhi_dVg = 2.0 * Vtm * (T1 -T0) / (Denomi + T1 * Vgsteff); dDeltaPhi_dVd = dDeltaPhi_dVg * dVgsteff_dVd; dDeltaPhi_dVb = dDeltaPhi_dVg * dVgsteff_dVb; /* End of delta Phis */ T3 = 4.0 * (Vth - here->BSIM3v32vfbzb - pParam->BSIM3v32phi); Tox += Tox; if (T3 >= 0.0) { /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: case BSIM3v32V322: T0 = (Vgsteff + T3) / Tox; dT0_dVd = (dVgsteff_dVd + 4.0 * dVth_dVd) / Tox; dT0_dVb = (dVgsteff_dVb + 4.0 * dVth_dVb) / Tox; break; case BSIM3v32V32: default: T0 = (Vgsteff + T3) / Tox; } } else { /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: case BSIM3v32V322: T0 = (Vgsteff + 1.0e-20) / Tox; dT0_dVd = dVgsteff_dVd / Tox; dT0_dVb = dVgsteff_dVb / Tox; break; case BSIM3v32V32: default: T0 = (Vgsteff + 1.0e-20) / Tox; } } tmp = exp(0.7 * log(T0)); T1 = 1.0 + tmp; T2 = 0.7 * tmp / (T0 * Tox); Tcen = 1.9e-9 / T1; dTcen_dVg = -1.9e-9 * T2 / T1 /T1; /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: case BSIM3v32V322: dTcen_dVd = Tox * dTcen_dVg; dTcen_dVb = dTcen_dVd * dT0_dVb; dTcen_dVd *= dT0_dVd; break; case BSIM3v32V32: default: dTcen_dVd = dTcen_dVg * (4.0 * dVth_dVd + dVgsteff_dVd); dTcen_dVb = dTcen_dVg * (4.0 * dVth_dVb + dVgsteff_dVb); } dTcen_dVg *= dVgsteff_dVg; Ccen = EPSSI / Tcen; T0 = Cox / (Cox + Ccen); Coxeff = T0 * Ccen; T1 = -Ccen / Tcen; dCoxeff_dVg = T0 * T0 * T1; dCoxeff_dVd = dCoxeff_dVg * dTcen_dVd; dCoxeff_dVb = dCoxeff_dVg * dTcen_dVb; dCoxeff_dVg *= dTcen_dVg; CoxWLcen = CoxWL * Coxeff / Cox; AbulkCV = Abulk0 * pParam->BSIM3v32abulkCVfactor; dAbulkCV_dVb = pParam->BSIM3v32abulkCVfactor * dAbulk0_dVb; VdsatCV = (Vgsteff - DeltaPhi) / AbulkCV; V4 = VdsatCV - Vds - DELTA_4; T0 = sqrt(V4 * V4 + 4.0 * DELTA_4 * VdsatCV); VdseffCV = VdsatCV - 0.5 * (V4 + T0); T1 = 0.5 * (1.0 + V4 / T0); T2 = DELTA_4 / T0; T3 = (1.0 - T1 - T2) / AbulkCV; T4 = T3 * ( 1.0 - dDeltaPhi_dVg); dVdseffCV_dVg = T4; dVdseffCV_dVd = T1; dVdseffCV_dVb = -T3 * VdsatCV * dAbulkCV_dVb; /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: case BSIM3v32V322: /* Added to eliminate non-zero VdseffCV at Vds=0.0 */ if (Vds == 0.0) { VdseffCV = 0.0; dVdseffCV_dVg = 0.0; dVdseffCV_dVb = 0.0; } break; case BSIM3v32V32: default: /* Do nothing */ break; } T0 = AbulkCV * VdseffCV; T1 = Vgsteff - DeltaPhi; T2 = 12.0 * (T1 - 0.5 * T0 + 1.0e-20); T3 = T0 / T2; T4 = 1.0 - 12.0 * T3 * T3; T5 = AbulkCV * (6.0 * T0 * (4.0 * T1 - T0) / (T2 * T2) - 0.5); T6 = T5 * VdseffCV / AbulkCV; qgate = qinoi = CoxWLcen * (T1 - T0 * (0.5 - T3)); QovCox = qgate / Coxeff; Cgg1 = CoxWLcen * (T4 * (1.0 - dDeltaPhi_dVg) + T5 * dVdseffCV_dVg); Cgd1 = CoxWLcen * T5 * dVdseffCV_dVd + Cgg1 * dVgsteff_dVd + QovCox * dCoxeff_dVd; Cgb1 = CoxWLcen * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Cgg1 * dVgsteff_dVb + QovCox * dCoxeff_dVb; Cgg1 = Cgg1 * dVgsteff_dVg + QovCox * dCoxeff_dVg; T7 = 1.0 - AbulkCV; T8 = T2 * T2; T9 = 12.0 * T7 * T0 * T0 / (T8 * AbulkCV); T10 = T9 * (1.0 - dDeltaPhi_dVg); T11 = -T7 * T5 / AbulkCV; T12 = -(T9 * T1 / AbulkCV + VdseffCV * (0.5 - T0 / T2)); qbulk = CoxWLcen * T7 * (0.5 * VdseffCV - T0 * VdseffCV / T2); QovCox = qbulk / Coxeff; Cbg1 = CoxWLcen * (T10 + T11 * dVdseffCV_dVg); Cbd1 = CoxWLcen * T11 * dVdseffCV_dVd + Cbg1 * dVgsteff_dVd + QovCox * dCoxeff_dVd; Cbb1 = CoxWLcen * (T11 * dVdseffCV_dVb + T12 * dAbulkCV_dVb) + Cbg1 * dVgsteff_dVb + QovCox * dCoxeff_dVb; Cbg1 = Cbg1 * dVgsteff_dVg + QovCox * dCoxeff_dVg; if (model->BSIM3v32xpart > 0.5) { /* 0/100 partition */ qsrc = -CoxWLcen * (T1 / 2.0 + T0 / 4.0 - 0.5 * T0 * T0 / T2); QovCox = qsrc / Coxeff; T2 += T2; T3 = T2 * T2; T7 = -(0.25 - 12.0 * T0 * (4.0 * T1 - T0) / T3); T4 = -(0.5 + 24.0 * T0 * T0 / T3) * (1.0 - dDeltaPhi_dVg); T5 = T7 * AbulkCV; T6 = T7 * VdseffCV; Csg = CoxWLcen * (T4 + T5 * dVdseffCV_dVg); Csd = CoxWLcen * T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd + QovCox * dCoxeff_dVd; Csb = CoxWLcen * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Csg * dVgsteff_dVb + QovCox * dCoxeff_dVb; Csg = Csg * dVgsteff_dVg + QovCox * dCoxeff_dVg; } else if (model->BSIM3v32xpart < 0.5) { /* 40/60 partition */ T2 = T2 / 12.0; T3 = 0.5 * CoxWLcen / (T2 * T2); T4 = T1 * (2.0 * T0 * T0 / 3.0 + T1 * (T1 - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T3 * T4; QovCox = qsrc / Coxeff; T8 = 4.0 / 3.0 * T1 * (T1 - T0) + 0.4 * T0 * T0; T5 = -2.0 * qsrc / T2 - T3 * (T1 * (3.0 * T1 - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0); T6 = AbulkCV * (qsrc / T2 + T3 * T8); T7 = T6 * VdseffCV / AbulkCV; Csg = T5 * (1.0 - dDeltaPhi_dVg) + T6 * dVdseffCV_dVg; Csd = Csg * dVgsteff_dVd + T6 * dVdseffCV_dVd + QovCox * dCoxeff_dVd; Csb = Csg * dVgsteff_dVb + T6 * dVdseffCV_dVb + T7 * dAbulkCV_dVb + QovCox * dCoxeff_dVb; Csg = Csg * dVgsteff_dVg + QovCox * dCoxeff_dVg; } else { /* 50/50 partition */ qsrc = -0.5 * qgate; Csg = -0.5 * Cgg1; Csd = -0.5 * Cgd1; Csb = -0.5 * Cgb1; } qgate += Qac0 + Qsub0 - qbulk; qbulk -= (Qac0 + Qsub0); qdrn = -(qgate + qbulk + qsrc); Cbg = Cbg1 - dQac0_dVg - dQsub0_dVg; Cbd = Cbd1 - dQsub0_dVd; Cbb = Cbb1 - dQac0_dVb - dQsub0_dVb; Cgg = Cgg1 - Cbg; Cgd = Cgd1 - Cbd; Cgb = Cgb1 - Cbb; Cgb *= dVbseff_dVb; Cbb *= dVbseff_dVb; Csb *= dVbseff_dVb; here->BSIM3v32cggb = Cgg; here->BSIM3v32cgsb = -(Cgg + Cgd + Cgb); here->BSIM3v32cgdb = Cgd; here->BSIM3v32cdgb = -(Cgg + Cbg + Csg); here->BSIM3v32cdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb + Csg + Csd + Csb); here->BSIM3v32cddb = -(Cgd + Cbd + Csd); here->BSIM3v32cbgb = Cbg; here->BSIM3v32cbsb = -(Cbg + Cbd + Cbb); here->BSIM3v32cbdb = Cbd; here->BSIM3v32qinv = -qinoi; } /* End of CTM */ } finished: /* Returning Values to Calling Routine */ /* * COMPUTE EQUIVALENT DRAIN CURRENT SOURCE */ here->BSIM3v32qgate = qgate; here->BSIM3v32qbulk = qbulk; here->BSIM3v32qdrn = qdrn; here->BSIM3v32cd = cdrain; if (ChargeComputationNeeded) { /* charge storage elements * bulk-drain and bulk-source depletion capacitances * czbd : zero bias drain junction capacitance * czbs : zero bias source junction capacitance * czbdsw: zero bias drain junction sidewall capacitance along field oxide * czbssw: zero bias source junction sidewall capacitance along field oxide * czbdswg: zero bias drain junction sidewall capacitance along gate side * czbsswg: zero bias source junction sidewall capacitance along gate side */ if (model->BSIM3v32acmMod == 0) { /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: czbd = model->BSIM3v32unitAreaTempJctCap * here->BSIM3v32drainArea; /*bug fix */ czbs = model->BSIM3v32unitAreaTempJctCap * here->BSIM3v32sourceArea; break; case BSIM3v32V322: case BSIM3v32V32: default: czbd = model->BSIM3v32unitAreaJctCap * here->BSIM3v32drainArea; czbs = model->BSIM3v32unitAreaJctCap * here->BSIM3v32sourceArea; } if (here->BSIM3v32drainPerimeter < pParam->BSIM3v32weff) { czbdsw = 0.0; /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: czbdswg = model->BSIM3v32unitLengthGateSidewallTempJctCap * here->BSIM3v32drainPerimeter; break; case BSIM3v32V322: case BSIM3v32V32: default: czbdswg = model->BSIM3v32unitLengthGateSidewallJctCap * here->BSIM3v32drainPerimeter; } } else { /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: czbdsw = model->BSIM3v32unitLengthSidewallTempJctCap * (here->BSIM3v32drainPerimeter - pParam->BSIM3v32weff); czbdswg = model->BSIM3v32unitLengthGateSidewallTempJctCap * pParam->BSIM3v32weff; break; case BSIM3v32V322: case BSIM3v32V32: default: czbdsw = model->BSIM3v32unitLengthSidewallJctCap * (here->BSIM3v32drainPerimeter - pParam->BSIM3v32weff); czbdswg = model->BSIM3v32unitLengthGateSidewallJctCap * pParam->BSIM3v32weff; } } if (here->BSIM3v32sourcePerimeter < pParam->BSIM3v32weff) { czbssw = 0.0; /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: czbsswg = model->BSIM3v32unitLengthGateSidewallTempJctCap * here->BSIM3v32sourcePerimeter; break; case BSIM3v32V322: case BSIM3v32V32: default: czbsswg = model->BSIM3v32unitLengthGateSidewallJctCap * here->BSIM3v32sourcePerimeter; } } else { /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: czbssw = model->BSIM3v32unitLengthSidewallTempJctCap * (here->BSIM3v32sourcePerimeter - pParam->BSIM3v32weff); czbsswg = model->BSIM3v32unitLengthGateSidewallTempJctCap * pParam->BSIM3v32weff; break; case BSIM3v32V322: case BSIM3v32V32: default: czbssw = model->BSIM3v32unitLengthSidewallJctCap * (here->BSIM3v32sourcePerimeter - pParam->BSIM3v32weff); czbsswg = model->BSIM3v32unitLengthGateSidewallJctCap * pParam->BSIM3v32weff; } } } else { /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: error = ACM_junctionCapacitances( model->BSIM3v32acmMod, model->BSIM3v32calcacm, here->BSIM3v32geo, model->BSIM3v32hdif, model->BSIM3v32wmlt, here->BSIM3v32w, model->BSIM3v32xw, here->BSIM3v32drainAreaGiven, here->BSIM3v32drainArea, here->BSIM3v32drainPerimeterGiven, here->BSIM3v32drainPerimeter, here->BSIM3v32sourceAreaGiven, here->BSIM3v32sourceArea, here->BSIM3v32sourcePerimeterGiven, here->BSIM3v32sourcePerimeter, model->BSIM3v32unitAreaTempJctCap, model->BSIM3v32unitLengthSidewallTempJctCap, model->BSIM3v32unitLengthGateSidewallTempJctCap, &czbd, &czbdsw, &czbdswg, &czbs, &czbssw, &czbsswg ); break; case BSIM3v32V322: case BSIM3v32V32: default: error = ACM_junctionCapacitances( model->BSIM3v32acmMod, model->BSIM3v32calcacm, here->BSIM3v32geo, model->BSIM3v32hdif, model->BSIM3v32wmlt, here->BSIM3v32w, model->BSIM3v32xw, here->BSIM3v32drainAreaGiven, here->BSIM3v32drainArea, here->BSIM3v32drainPerimeterGiven, here->BSIM3v32drainPerimeter, here->BSIM3v32sourceAreaGiven, here->BSIM3v32sourceArea, here->BSIM3v32sourcePerimeterGiven, here->BSIM3v32sourcePerimeter, model->BSIM3v32unitAreaJctCap, model->BSIM3v32unitLengthSidewallJctCap, model->BSIM3v32unitLengthGateSidewallJctCap, &czbd, &czbdsw, &czbdswg, &czbs, &czbssw, &czbsswg ); } if (error) return(error); } MJ = model->BSIM3v32bulkJctBotGradingCoeff; MJSW = model->BSIM3v32bulkJctSideGradingCoeff; MJSWG = model->BSIM3v32bulkJctGateSideGradingCoeff; /* Source Bulk Junction */ if (vbs == 0.0) { *(ckt->CKTstate0 + here->BSIM3v32qbs) = 0.0; here->BSIM3v32capbs = czbs + czbssw + czbsswg; } else if (vbs < 0.0) { if (czbs > 0.0) { arg = 1.0 - vbs / model->BSIM3v32PhiB; if (MJ == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJ * log(arg)); *(ckt->CKTstate0 + here->BSIM3v32qbs) = model->BSIM3v32PhiB * czbs * (1.0 - arg * sarg) / (1.0 - MJ); here->BSIM3v32capbs = czbs * sarg; } else { *(ckt->CKTstate0 + here->BSIM3v32qbs) = 0.0; here->BSIM3v32capbs = 0.0; } if (czbssw > 0.0) { arg = 1.0 - vbs / model->BSIM3v32PhiBSW; if (MJSW == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSW * log(arg)); *(ckt->CKTstate0 + here->BSIM3v32qbs) += model->BSIM3v32PhiBSW * czbssw * (1.0 - arg * sarg) / (1.0 - MJSW); here->BSIM3v32capbs += czbssw * sarg; } if (czbsswg > 0.0) { arg = 1.0 - vbs / model->BSIM3v32PhiBSWG; if (MJSWG == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSWG * log(arg)); *(ckt->CKTstate0 + here->BSIM3v32qbs) += model->BSIM3v32PhiBSWG * czbsswg * (1.0 - arg * sarg) / (1.0 - MJSWG); here->BSIM3v32capbs += czbsswg * sarg; } } else { T0 = czbs + czbssw + czbsswg; T1 = vbs * (czbs * MJ / model->BSIM3v32PhiB + czbssw * MJSW / model->BSIM3v32PhiBSW + czbsswg * MJSWG / model->BSIM3v32PhiBSWG); *(ckt->CKTstate0 + here->BSIM3v32qbs) = vbs * (T0 + 0.5 * T1); here->BSIM3v32capbs = T0 + T1; } /* Drain Bulk Junction */ if (vbd == 0.0) { *(ckt->CKTstate0 + here->BSIM3v32qbd) = 0.0; here->BSIM3v32capbd = czbd + czbdsw + czbdswg; } else if (vbd < 0.0) { if (czbd > 0.0) { arg = 1.0 - vbd / model->BSIM3v32PhiB; if (MJ == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJ * log(arg)); *(ckt->CKTstate0 + here->BSIM3v32qbd) = model->BSIM3v32PhiB * czbd * (1.0 - arg * sarg) / (1.0 - MJ); here->BSIM3v32capbd = czbd * sarg; } else { *(ckt->CKTstate0 + here->BSIM3v32qbd) = 0.0; here->BSIM3v32capbd = 0.0; } if (czbdsw > 0.0) { arg = 1.0 - vbd / model->BSIM3v32PhiBSW; if (MJSW == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSW * log(arg)); *(ckt->CKTstate0 + here->BSIM3v32qbd) += model->BSIM3v32PhiBSW * czbdsw * (1.0 - arg * sarg) / (1.0 - MJSW); here->BSIM3v32capbd += czbdsw * sarg; } if (czbdswg > 0.0) { arg = 1.0 - vbd / model->BSIM3v32PhiBSWG; if (MJSWG == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSWG * log(arg)); *(ckt->CKTstate0 + here->BSIM3v32qbd) += model->BSIM3v32PhiBSWG * czbdswg * (1.0 - arg * sarg) / (1.0 - MJSWG); here->BSIM3v32capbd += czbdswg * sarg; } } else { T0 = czbd + czbdsw + czbdswg; T1 = vbd * (czbd * MJ / model->BSIM3v32PhiB + czbdsw * MJSW / model->BSIM3v32PhiBSW + czbdswg * MJSWG / model->BSIM3v32PhiBSWG); *(ckt->CKTstate0 + here->BSIM3v32qbd) = vbd * (T0 + 0.5 * T1); here->BSIM3v32capbd = T0 + T1; } } /* * check convergence */ if ((here->BSIM3v32off == 0) || (!(ckt->CKTmode & MODEINITFIX))) { if (Check == 1) { ckt->CKTnoncon++; #ifndef NEWCONV } else { if (here->BSIM3v32mode >= 0) { Idtot = here->BSIM3v32cd + here->BSIM3v32csub - here->BSIM3v32cbd; } else { Idtot = here->BSIM3v32cd - here->BSIM3v32cbd; } tol = ckt->CKTreltol * MAX(fabs(cdhat), fabs(Idtot)) + ckt->CKTabstol; if (fabs(cdhat - Idtot) >= tol) { ckt->CKTnoncon++; } else { Ibtot = here->BSIM3v32cbs + here->BSIM3v32cbd - here->BSIM3v32csub; tol = ckt->CKTreltol * MAX(fabs(cbhat), fabs(Ibtot)) + ckt->CKTabstol; if (fabs(cbhat - Ibtot) > tol) { ckt->CKTnoncon++; } } #endif /* NEWCONV */ } } *(ckt->CKTstate0 + here->BSIM3v32vbs) = vbs; *(ckt->CKTstate0 + here->BSIM3v32vbd) = vbd; *(ckt->CKTstate0 + here->BSIM3v32vgs) = vgs; *(ckt->CKTstate0 + here->BSIM3v32vds) = vds; *(ckt->CKTstate0 + here->BSIM3v32qdef) = qdef; /* bulk and channel charge plus overlaps */ if (!ChargeComputationNeeded) goto line850; #ifndef NOBYPASS line755: #endif /* NQS begins */ if (here->BSIM3v32nqsMod) { qcheq = -(qbulk + qgate); here->BSIM3v32cqgb = -(here->BSIM3v32cggb + here->BSIM3v32cbgb); here->BSIM3v32cqdb = -(here->BSIM3v32cgdb + here->BSIM3v32cbdb); here->BSIM3v32cqsb = -(here->BSIM3v32cgsb + here->BSIM3v32cbsb); here->BSIM3v32cqbb = -(here->BSIM3v32cqgb + here->BSIM3v32cqdb + here->BSIM3v32cqsb); gtau_drift = fabs(here->BSIM3v32tconst * qcheq) * ScalingFactor; T0 = pParam->BSIM3v32leffCV * pParam->BSIM3v32leffCV; gtau_diff = 16.0 * here->BSIM3v32u0temp * model->BSIM3v32vtm / T0 * ScalingFactor; here->BSIM3v32gtau = gtau_drift + gtau_diff; } if (model->BSIM3v32capMod == 0) { /* code merge -JX */ cgdo = pParam->BSIM3v32cgdo; qgdo = pParam->BSIM3v32cgdo * vgd; cgso = pParam->BSIM3v32cgso; qgso = pParam->BSIM3v32cgso * vgs; } else if (model->BSIM3v32capMod == 1) { if (vgd < 0.0) { T1 = sqrt(1.0 - 4.0 * vgd / pParam->BSIM3v32ckappa); cgdo = pParam->BSIM3v32cgdo + pParam->BSIM3v32weffCV * pParam->BSIM3v32cgdl / T1; qgdo = pParam->BSIM3v32cgdo * vgd - pParam->BSIM3v32weffCV * 0.5 * pParam->BSIM3v32cgdl * pParam->BSIM3v32ckappa * (T1 - 1.0); } else { cgdo = pParam->BSIM3v32cgdo + pParam->BSIM3v32weffCV * pParam->BSIM3v32cgdl; qgdo = (pParam->BSIM3v32weffCV * pParam->BSIM3v32cgdl + pParam->BSIM3v32cgdo) * vgd; } if (vgs < 0.0) { T1 = sqrt(1.0 - 4.0 * vgs / pParam->BSIM3v32ckappa); cgso = pParam->BSIM3v32cgso + pParam->BSIM3v32weffCV * pParam->BSIM3v32cgsl / T1; qgso = pParam->BSIM3v32cgso * vgs - pParam->BSIM3v32weffCV * 0.5 * pParam->BSIM3v32cgsl * pParam->BSIM3v32ckappa * (T1 - 1.0); } else { cgso = pParam->BSIM3v32cgso + pParam->BSIM3v32weffCV * pParam->BSIM3v32cgsl; qgso = (pParam->BSIM3v32weffCV * pParam->BSIM3v32cgsl + pParam->BSIM3v32cgso) * vgs; } } else { T0 = vgd + DELTA_1; T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); T3 = pParam->BSIM3v32weffCV * pParam->BSIM3v32cgdl; T4 = sqrt(1.0 - 4.0 * T2 / pParam->BSIM3v32ckappa); cgdo = pParam->BSIM3v32cgdo + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgdo = (pParam->BSIM3v32cgdo + T3) * vgd - T3 * (T2 + 0.5 * pParam->BSIM3v32ckappa * (T4 - 1.0)); T0 = vgs + DELTA_1; T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); T3 = pParam->BSIM3v32weffCV * pParam->BSIM3v32cgsl; T4 = sqrt(1.0 - 4.0 * T2 / pParam->BSIM3v32ckappa); cgso = pParam->BSIM3v32cgso + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgso = (pParam->BSIM3v32cgso + T3) * vgs - T3 * (T2 + 0.5 * pParam->BSIM3v32ckappa * (T4 - 1.0)); } here->BSIM3v32cgdo = cgdo; here->BSIM3v32cgso = cgso; ag0 = ckt->CKTag[0]; if (here->BSIM3v32mode > 0) { if (here->BSIM3v32nqsMod == 0) { gcggb = (here->BSIM3v32cggb + cgdo + cgso + pParam->BSIM3v32cgbo ) * ag0; gcgdb = (here->BSIM3v32cgdb - cgdo) * ag0; gcgsb = (here->BSIM3v32cgsb - cgso) * ag0; gcdgb = (here->BSIM3v32cdgb - cgdo) * ag0; gcddb = (here->BSIM3v32cddb + here->BSIM3v32capbd + cgdo) * ag0; gcdsb = here->BSIM3v32cdsb * ag0; gcsgb = -(here->BSIM3v32cggb + here->BSIM3v32cbgb + here->BSIM3v32cdgb + cgso) * ag0; gcsdb = -(here->BSIM3v32cgdb + here->BSIM3v32cbdb + here->BSIM3v32cddb) * ag0; gcssb = (here->BSIM3v32capbs + cgso - (here->BSIM3v32cgsb + here->BSIM3v32cbsb + here->BSIM3v32cdsb)) * ag0; gcbgb = (here->BSIM3v32cbgb - pParam->BSIM3v32cgbo) * ag0; gcbdb = (here->BSIM3v32cbdb - here->BSIM3v32capbd) * ag0; gcbsb = (here->BSIM3v32cbsb - here->BSIM3v32capbs) * ag0; qgd = qgdo; qgs = qgso; qgb = pParam->BSIM3v32cgbo * vgb; qgate += qgd + qgs + qgb; qbulk -= qgb; qdrn -= qgd; qsrc = -(qgate + qbulk + qdrn); ggtg = ggtd = ggtb = ggts = 0.0; sxpart = 0.6; dxpart = 0.4; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { if (qcheq > 0.0) T0 = here->BSIM3v32tconst * qdef * ScalingFactor; else T0 = -here->BSIM3v32tconst * qdef * ScalingFactor; ggtg = here->BSIM3v32gtg = T0 * here->BSIM3v32cqgb; ggtd = here->BSIM3v32gtd = T0 * here->BSIM3v32cqdb; ggts = here->BSIM3v32gts = T0 * here->BSIM3v32cqsb; ggtb = here->BSIM3v32gtb = T0 * here->BSIM3v32cqbb; gqdef = ScalingFactor * ag0; gcqgb = here->BSIM3v32cqgb * ag0; gcqdb = here->BSIM3v32cqdb * ag0; gcqsb = here->BSIM3v32cqsb * ag0; gcqbb = here->BSIM3v32cqbb * ag0; gcggb = (cgdo + cgso + pParam->BSIM3v32cgbo ) * ag0; gcgdb = -cgdo * ag0; gcgsb = -cgso * ag0; gcdgb = -cgdo * ag0; gcddb = (here->BSIM3v32capbd + cgdo) * ag0; gcdsb = 0.0; gcsgb = -cgso * ag0; gcsdb = 0.0; gcssb = (here->BSIM3v32capbs + cgso) * ag0; gcbgb = -pParam->BSIM3v32cgbo * ag0; gcbdb = -here->BSIM3v32capbd * ag0; gcbsb = -here->BSIM3v32capbs * ag0; CoxWL = model->BSIM3v32cox * pParam->BSIM3v32weffCV * pParam->BSIM3v32leffCV; if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM3v32xpart < 0.5) { dxpart = 0.4; } else if (model->BSIM3v32xpart > 0.5) { dxpart = 0.0; } else { dxpart = 0.5; } ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; } else { dxpart = qdrn / qcheq; Cdd = here->BSIM3v32cddb; Csd = -(here->BSIM3v32cgdb + here->BSIM3v32cddb + here->BSIM3v32cbdb); ddxpart_dVd = (Cdd - dxpart * (Cdd + Csd)) / qcheq; Cdg = here->BSIM3v32cdgb; Csg = -(here->BSIM3v32cggb + here->BSIM3v32cdgb + here->BSIM3v32cbgb); ddxpart_dVg = (Cdg - dxpart * (Cdg + Csg)) / qcheq; Cds = here->BSIM3v32cdsb; Css = -(here->BSIM3v32cgsb + here->BSIM3v32cdsb + here->BSIM3v32cbsb); ddxpart_dVs = (Cds - dxpart * (Cds + Css)) / qcheq; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); } sxpart = 1.0 - dxpart; dsxpart_dVd = -ddxpart_dVd; dsxpart_dVg = -ddxpart_dVg; dsxpart_dVs = -ddxpart_dVs; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); qgd = qgdo; qgs = qgso; qgb = pParam->BSIM3v32cgbo * vgb; qgate = qgd + qgs + qgb; qbulk = -qgb; qdrn = -qgd; qsrc = -(qgate + qbulk + qdrn); } } else { if (here->BSIM3v32nqsMod == 0) { gcggb = (here->BSIM3v32cggb + cgdo + cgso + pParam->BSIM3v32cgbo ) * ag0; gcgdb = (here->BSIM3v32cgsb - cgdo) * ag0; gcgsb = (here->BSIM3v32cgdb - cgso) * ag0; gcdgb = -(here->BSIM3v32cggb + here->BSIM3v32cbgb + here->BSIM3v32cdgb + cgdo) * ag0; gcddb = (here->BSIM3v32capbd + cgdo - (here->BSIM3v32cgsb + here->BSIM3v32cbsb + here->BSIM3v32cdsb)) * ag0; gcdsb = -(here->BSIM3v32cgdb + here->BSIM3v32cbdb + here->BSIM3v32cddb) * ag0; gcsgb = (here->BSIM3v32cdgb - cgso) * ag0; gcsdb = here->BSIM3v32cdsb * ag0; gcssb = (here->BSIM3v32cddb + here->BSIM3v32capbs + cgso) * ag0; gcbgb = (here->BSIM3v32cbgb - pParam->BSIM3v32cgbo) * ag0; gcbdb = (here->BSIM3v32cbsb - here->BSIM3v32capbd) * ag0; gcbsb = (here->BSIM3v32cbdb - here->BSIM3v32capbs) * ag0; qgd = qgdo; qgs = qgso; qgb = pParam->BSIM3v32cgbo * vgb; qgate += qgd + qgs + qgb; qbulk -= qgb; qsrc = qdrn - qgs; qdrn = -(qgate + qbulk + qsrc); ggtg = ggtd = ggtb = ggts = 0.0; sxpart = 0.4; dxpart = 0.6; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { if (qcheq > 0.0) T0 = here->BSIM3v32tconst * qdef * ScalingFactor; else T0 = -here->BSIM3v32tconst * qdef * ScalingFactor; ggtg = here->BSIM3v32gtg = T0 * here->BSIM3v32cqgb; ggts = here->BSIM3v32gtd = T0 * here->BSIM3v32cqdb; ggtd = here->BSIM3v32gts = T0 * here->BSIM3v32cqsb; ggtb = here->BSIM3v32gtb = T0 * here->BSIM3v32cqbb; gqdef = ScalingFactor * ag0; gcqgb = here->BSIM3v32cqgb * ag0; gcqdb = here->BSIM3v32cqsb * ag0; gcqsb = here->BSIM3v32cqdb * ag0; gcqbb = here->BSIM3v32cqbb * ag0; gcggb = (cgdo + cgso + pParam->BSIM3v32cgbo) * ag0; gcgdb = -cgdo * ag0; gcgsb = -cgso * ag0; gcdgb = -cgdo * ag0; gcddb = (here->BSIM3v32capbd + cgdo) * ag0; gcdsb = 0.0; gcsgb = -cgso * ag0; gcsdb = 0.0; gcssb = (here->BSIM3v32capbs + cgso) * ag0; gcbgb = -pParam->BSIM3v32cgbo * ag0; gcbdb = -here->BSIM3v32capbd * ag0; gcbsb = -here->BSIM3v32capbs * ag0; CoxWL = model->BSIM3v32cox * pParam->BSIM3v32weffCV * pParam->BSIM3v32leffCV; if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM3v32xpart < 0.5) { sxpart = 0.4; } else if (model->BSIM3v32xpart > 0.5) { sxpart = 0.0; } else { sxpart = 0.5; } dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { sxpart = qdrn / qcheq; Css = here->BSIM3v32cddb; Cds = -(here->BSIM3v32cgdb + here->BSIM3v32cddb + here->BSIM3v32cbdb); dsxpart_dVs = (Css - sxpart * (Css + Cds)) / qcheq; Csg = here->BSIM3v32cdgb; Cdg = -(here->BSIM3v32cggb + here->BSIM3v32cdgb + here->BSIM3v32cbgb); dsxpart_dVg = (Csg - sxpart * (Csg + Cdg)) / qcheq; Csd = here->BSIM3v32cdsb; Cdd = -(here->BSIM3v32cgsb + here->BSIM3v32cdsb + here->BSIM3v32cbsb); dsxpart_dVd = (Csd - sxpart * (Csd + Cdd)) / qcheq; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); } dxpart = 1.0 - sxpart; ddxpart_dVd = -dsxpart_dVd; ddxpart_dVg = -dsxpart_dVg; ddxpart_dVs = -dsxpart_dVs; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); qgd = qgdo; qgs = qgso; qgb = pParam->BSIM3v32cgbo * vgb; qgate = qgd + qgs + qgb; qbulk = -qgb; qsrc = -qgs; qdrn = -(qgate + qbulk + qsrc); } } cqdef = cqcheq = 0.0; if (ByPass) goto line860; *(ckt->CKTstate0 + here->BSIM3v32qg) = qgate; *(ckt->CKTstate0 + here->BSIM3v32qd) = qdrn - *(ckt->CKTstate0 + here->BSIM3v32qbd); *(ckt->CKTstate0 + here->BSIM3v32qb) = qbulk + *(ckt->CKTstate0 + here->BSIM3v32qbd) + *(ckt->CKTstate0 + here->BSIM3v32qbs); if (here->BSIM3v32nqsMod) { *(ckt->CKTstate0 + here->BSIM3v32qcdump) = qdef * ScalingFactor; *(ckt->CKTstate0 + here->BSIM3v32qcheq) = qcheq; } /* store small signal parameters */ if (ckt->CKTmode & MODEINITSMSIG) { goto line1000; } if (!ChargeComputationNeeded) goto line850; if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->BSIM3v32qb) = *(ckt->CKTstate0 + here->BSIM3v32qb); *(ckt->CKTstate1 + here->BSIM3v32qg) = *(ckt->CKTstate0 + here->BSIM3v32qg); *(ckt->CKTstate1 + here->BSIM3v32qd) = *(ckt->CKTstate0 + here->BSIM3v32qd); if (here->BSIM3v32nqsMod) { *(ckt->CKTstate1 + here->BSIM3v32qcheq) = *(ckt->CKTstate0 + here->BSIM3v32qcheq); *(ckt->CKTstate1 + here->BSIM3v32qcdump) = *(ckt->CKTstate0 + here->BSIM3v32qcdump); } } error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM3v32qb); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM3v32qg); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM3v32qd); if (error) return(error); if (here->BSIM3v32nqsMod) { error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM3v32qcdump); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM3v32qcheq); if (error) return(error); } goto line860; line850: /* initialize to zero charge conductance and current */ ceqqg = ceqqb = ceqqd = 0.0; cqcheq = cqdef = 0.0; gcdgb = gcddb = gcdsb = 0.0; gcsgb = gcsdb = gcssb = 0.0; gcggb = gcgdb = gcgsb = 0.0; gcbgb = gcbdb = gcbsb = 0.0; gqdef = gcqgb = gcqdb = gcqsb = gcqbb = 0.0; ggtg = ggtd = ggtb = ggts = 0.0; sxpart = (1.0 - (dxpart = (here->BSIM3v32mode > 0) ? 0.4 : 0.6)); ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; if (here->BSIM3v32nqsMod) here->BSIM3v32gtau = 16.0 * here->BSIM3v32u0temp * model->BSIM3v32vtm / pParam->BSIM3v32leffCV / pParam->BSIM3v32leffCV * ScalingFactor; else here->BSIM3v32gtau = 0.0; goto line900; line860: /* evaluate equivalent charge current */ cqgate = *(ckt->CKTstate0 + here->BSIM3v32cqg); cqbulk = *(ckt->CKTstate0 + here->BSIM3v32cqb); cqdrn = *(ckt->CKTstate0 + here->BSIM3v32cqd); ceqqg = cqgate - gcggb * vgb + gcgdb * vbd + gcgsb * vbs; ceqqb = cqbulk - gcbgb * vgb + gcbdb * vbd + gcbsb * vbs; ceqqd = cqdrn - gcdgb * vgb + gcddb * vbd + gcdsb * vbs; if (here->BSIM3v32nqsMod) { T0 = ggtg * vgb - ggtd * vbd - ggts * vbs; ceqqg += T0; T1 = qdef * here->BSIM3v32gtau; ceqqd -= dxpart * T0 + T1 * (ddxpart_dVg * vgb - ddxpart_dVd * vbd - ddxpart_dVs * vbs); cqdef = *(ckt->CKTstate0 + here->BSIM3v32cqcdump) - gqdef * qdef; cqcheq = *(ckt->CKTstate0 + here->BSIM3v32cqcheq) - (gcqgb * vgb - gcqdb * vbd - gcqsb * vbs) + T0; } if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->BSIM3v32cqb) = *(ckt->CKTstate0 + here->BSIM3v32cqb); *(ckt->CKTstate1 + here->BSIM3v32cqg) = *(ckt->CKTstate0 + here->BSIM3v32cqg); *(ckt->CKTstate1 + here->BSIM3v32cqd) = *(ckt->CKTstate0 + here->BSIM3v32cqd); if (here->BSIM3v32nqsMod) { *(ckt->CKTstate1 + here->BSIM3v32cqcheq) = *(ckt->CKTstate0 + here->BSIM3v32cqcheq); *(ckt->CKTstate1 + here->BSIM3v32cqcdump) = *(ckt->CKTstate0 + here->BSIM3v32cqcdump); } } /* * load current vector */ line900: if (here->BSIM3v32mode >= 0) { Gm = here->BSIM3v32gm; Gmbs = here->BSIM3v32gmbs; FwdSum = Gm + Gmbs; RevSum = 0.0; cdreq = model->BSIM3v32type * (cdrain - here->BSIM3v32gds * vds - Gm * vgs - Gmbs * vbs); ceqbd = -model->BSIM3v32type * (here->BSIM3v32csub - here->BSIM3v32gbds * vds - here->BSIM3v32gbgs * vgs - here->BSIM3v32gbbs * vbs); ceqbs = 0.0; gbbdp = -here->BSIM3v32gbds; gbbsp = (here->BSIM3v32gbds + here->BSIM3v32gbgs + here->BSIM3v32gbbs); gbdpg = here->BSIM3v32gbgs; gbdpdp = here->BSIM3v32gbds; gbdpb = here->BSIM3v32gbbs; gbdpsp = -(gbdpg + gbdpdp + gbdpb); gbspg = 0.0; gbspdp = 0.0; gbspb = 0.0; gbspsp = 0.0; } else { Gm = -here->BSIM3v32gm; Gmbs = -here->BSIM3v32gmbs; FwdSum = 0.0; RevSum = -(Gm + Gmbs); cdreq = -model->BSIM3v32type * (cdrain + here->BSIM3v32gds * vds + Gm * vgd + Gmbs * vbd); ceqbs = -model->BSIM3v32type * (here->BSIM3v32csub + here->BSIM3v32gbds * vds - here->BSIM3v32gbgs * vgd - here->BSIM3v32gbbs * vbd); ceqbd = 0.0; gbbsp = -here->BSIM3v32gbds; gbbdp = (here->BSIM3v32gbds + here->BSIM3v32gbgs + here->BSIM3v32gbbs); gbdpg = 0.0; gbdpsp = 0.0; gbdpb = 0.0; gbdpdp = 0.0; gbspg = here->BSIM3v32gbgs; gbspsp = here->BSIM3v32gbds; gbspb = here->BSIM3v32gbbs; gbspdp = -(gbspg + gbspsp + gbspb); } if (model->BSIM3v32type > 0) { ceqbs += (here->BSIM3v32cbs - here->BSIM3v32gbs * vbs); ceqbd += (here->BSIM3v32cbd - here->BSIM3v32gbd * vbd); /* ceqqg = ceqqg; ceqqb = ceqqb; ceqqd = ceqqd; cqdef = cqdef; cqcheq = cqcheq; */ } else { ceqbs -= (here->BSIM3v32cbs - here->BSIM3v32gbs * vbs); ceqbd -= (here->BSIM3v32cbd - here->BSIM3v32gbd * vbd); ceqqg = -ceqqg; ceqqb = -ceqqb; ceqqd = -ceqqd; cqdef = -cqdef; cqcheq = -cqcheq; } m = here->BSIM3v32m; #ifdef USE_OMP here->BSIM3v32rhsG = m * ceqqg; here->BSIM3v32rhsB = m * (ceqbs + ceqbd + ceqqb); here->BSIM3v32rhsD = m * (ceqbd - cdreq - ceqqd); here->BSIM3v32rhsS = m * (cdreq + ceqbs + ceqqg + ceqqb + ceqqd); if (here->BSIM3v32nqsMod) here->BSIM3v32rhsQ = m * (cqcheq - cqdef); #else (*(ckt->CKTrhs + here->BSIM3v32gNode) -= m * ceqqg); (*(ckt->CKTrhs + here->BSIM3v32bNode) -= m * (ceqbs + ceqbd + ceqqb)); (*(ckt->CKTrhs + here->BSIM3v32dNodePrime) += m * (ceqbd - cdreq - ceqqd)); (*(ckt->CKTrhs + here->BSIM3v32sNodePrime) += m * (cdreq + ceqbs + ceqqg + ceqqb + ceqqd)); if (here->BSIM3v32nqsMod) *(ckt->CKTrhs + here->BSIM3v32qNode) += m * (cqcheq - cqdef); #endif /* * load y matrix */ T1 = qdef * here->BSIM3v32gtau; #ifdef USE_OMP here->BSIM3v32DdPt = m * here->BSIM3v32drainConductance; here->BSIM3v32GgPt = m * (gcggb - ggtg); here->BSIM3v32SsPt = m * here->BSIM3v32sourceConductance; here->BSIM3v32BbPt = m * (here->BSIM3v32gbd + here->BSIM3v32gbs - gcbgb - gcbdb - gcbsb - here->BSIM3v32gbbs); here->BSIM3v32DPdpPt = m * (here->BSIM3v32drainConductance + here->BSIM3v32gds + here->BSIM3v32gbd + RevSum + gcddb + dxpart * ggtd + T1 * ddxpart_dVd + gbdpdp); here->BSIM3v32SPspPt = m * (here->BSIM3v32sourceConductance + here->BSIM3v32gds + here->BSIM3v32gbs + FwdSum + gcssb + sxpart * ggts + T1 * dsxpart_dVs + gbspsp); here->BSIM3v32DdpPt = m * here->BSIM3v32drainConductance; here->BSIM3v32GbPt = m * (gcggb + gcgdb + gcgsb + ggtb); here->BSIM3v32GdpPt = m * (gcgdb - ggtd); here->BSIM3v32GspPt = m * (gcgsb - ggts); here->BSIM3v32SspPt = m * here->BSIM3v32sourceConductance; here->BSIM3v32BgPt = m * (gcbgb - here->BSIM3v32gbgs); here->BSIM3v32BdpPt = m * (gcbdb - here->BSIM3v32gbd + gbbdp); here->BSIM3v32BspPt = m * (gcbsb - here->BSIM3v32gbs + gbbsp); here->BSIM3v32DPdPt = m * here->BSIM3v32drainConductance; here->BSIM3v32DPgPt = m * (Gm + gcdgb + dxpart * ggtg + T1 * ddxpart_dVg + gbdpg); here->BSIM3v32DPbPt = m * (here->BSIM3v32gbd - Gmbs + gcdgb + gcddb + gcdsb - dxpart * ggtb - T1 * ddxpart_dVb - gbdpb); here->BSIM3v32DPspPt = m * (here->BSIM3v32gds + FwdSum - gcdsb - dxpart * ggts - T1 * ddxpart_dVs - gbdpsp); here->BSIM3v32SPgPt = m * (gcsgb - Gm + sxpart * ggtg + T1 * dsxpart_dVg + gbspg); here->BSIM3v32SPsPt = m * here->BSIM3v32sourceConductance; here->BSIM3v32SPbPt = m * (here->BSIM3v32gbs + Gmbs + gcsgb + gcsdb + gcssb - sxpart * ggtb - T1 * dsxpart_dVb - gbspb); here->BSIM3v32SPdpPt = m * (here->BSIM3v32gds + RevSum - gcsdb - sxpart * ggtd - T1 * dsxpart_dVd - gbspdp); if (here->BSIM3v32nqsMod) { here->BSIM3v32QqPt = m * (gqdef + here->BSIM3v32gtau); here->BSIM3v32DPqPt = m * (dxpart * here->BSIM3v32gtau); here->BSIM3v32SPqPt = m * (sxpart * here->BSIM3v32gtau); here->BSIM3v32GqPt = m * here->BSIM3v32gtau; here->BSIM3v32QgPt = m * (ggtg - gcqgb); here->BSIM3v32QdpPt = m * (ggtd - gcqdb); here->BSIM3v32QspPt = m * (ggts - gcqsb); here->BSIM3v32QbPt = m * (ggtb - gcqbb); } #else (*(here->BSIM3v32DdPtr) += m * here->BSIM3v32drainConductance); (*(here->BSIM3v32GgPtr) += m * (gcggb - ggtg)); (*(here->BSIM3v32SsPtr) += m * here->BSIM3v32sourceConductance); (*(here->BSIM3v32BbPtr) += m * (here->BSIM3v32gbd + here->BSIM3v32gbs - gcbgb - gcbdb - gcbsb - here->BSIM3v32gbbs)); (*(here->BSIM3v32DPdpPtr) += m * (here->BSIM3v32drainConductance + here->BSIM3v32gds + here->BSIM3v32gbd + RevSum + gcddb + dxpart * ggtd + T1 * ddxpart_dVd + gbdpdp)); (*(here->BSIM3v32SPspPtr) += m * (here->BSIM3v32sourceConductance + here->BSIM3v32gds + here->BSIM3v32gbs + FwdSum + gcssb + sxpart * ggts + T1 * dsxpart_dVs + gbspsp)); (*(here->BSIM3v32DdpPtr) -= m * here->BSIM3v32drainConductance); (*(here->BSIM3v32GbPtr) -= m * (gcggb + gcgdb + gcgsb + ggtb)); (*(here->BSIM3v32GdpPtr) += m * (gcgdb - ggtd)); (*(here->BSIM3v32GspPtr) += m * (gcgsb - ggts)); (*(here->BSIM3v32SspPtr) -= m * here->BSIM3v32sourceConductance); (*(here->BSIM3v32BgPtr) += m * (gcbgb - here->BSIM3v32gbgs)); (*(here->BSIM3v32BdpPtr) += m * (gcbdb - here->BSIM3v32gbd + gbbdp)); (*(here->BSIM3v32BspPtr) += m * (gcbsb - here->BSIM3v32gbs + gbbsp)); (*(here->BSIM3v32DPdPtr) -= m * here->BSIM3v32drainConductance); (*(here->BSIM3v32DPgPtr) += m * (Gm + gcdgb + dxpart * ggtg + T1 * ddxpart_dVg + gbdpg)); (*(here->BSIM3v32DPbPtr) -= m * (here->BSIM3v32gbd - Gmbs + gcdgb + gcddb + gcdsb - dxpart * ggtb - T1 * ddxpart_dVb - gbdpb)); (*(here->BSIM3v32DPspPtr) -= m * (here->BSIM3v32gds + FwdSum - gcdsb - dxpart * ggts - T1 * ddxpart_dVs - gbdpsp)); (*(here->BSIM3v32SPgPtr) += m * (gcsgb - Gm + sxpart * ggtg + T1 * dsxpart_dVg + gbspg)); (*(here->BSIM3v32SPsPtr) -= m * here->BSIM3v32sourceConductance); (*(here->BSIM3v32SPbPtr) -= m * (here->BSIM3v32gbs + Gmbs + gcsgb + gcsdb + gcssb - sxpart * ggtb - T1 * dsxpart_dVb - gbspb)); (*(here->BSIM3v32SPdpPtr) -= m * (here->BSIM3v32gds + RevSum - gcsdb - sxpart * ggtd - T1 * dsxpart_dVd - gbspdp)); if (here->BSIM3v32nqsMod) { *(here->BSIM3v32QqPtr) += m * (gqdef + here->BSIM3v32gtau); *(here->BSIM3v32DPqPtr) += m * (dxpart * here->BSIM3v32gtau); *(here->BSIM3v32SPqPtr) += m * (sxpart * here->BSIM3v32gtau); *(here->BSIM3v32GqPtr) -= m * here->BSIM3v32gtau; *(here->BSIM3v32QgPtr) += m * (ggtg - gcqgb); *(here->BSIM3v32QdpPtr) += m * (ggtd - gcqdb); *(here->BSIM3v32QspPtr) += m * (ggts - gcqsb); *(here->BSIM3v32QbPtr) += m * (ggtb - gcqbb); } #endif line1000: ; #ifndef USE_OMP } /* End of Mosfet Instance */ } /* End of Model Instance */ #endif return(OK); } #ifdef USE_OMP void BSIM3v32LoadRhsMat(GENmodel *inModel, CKTcircuit *ckt) { int InstCount, idx; BSIM3v32instance **InstArray; BSIM3v32instance *here; BSIM3v32model *model = (BSIM3v32model*)inModel; InstArray = model->BSIM3v32InstanceArray; InstCount = model->BSIM3v32InstCount; for (idx = 0; idx < InstCount; idx++) { here = InstArray[idx]; model = BSIM3v32modPtr(here); /* Update b for Ax = b */ (*(ckt->CKTrhs + here->BSIM3v32gNode) -= here->BSIM3v32rhsG); (*(ckt->CKTrhs + here->BSIM3v32bNode) -= here->BSIM3v32rhsB); (*(ckt->CKTrhs + here->BSIM3v32dNodePrime) += here->BSIM3v32rhsD); (*(ckt->CKTrhs + here->BSIM3v32sNodePrime) += here->BSIM3v32rhsS); if (here->BSIM3v32nqsMod) (*(ckt->CKTrhs + here->BSIM3v32qNode) += here->BSIM3v32rhsQ); /* Update A for Ax = b */ (*(here->BSIM3v32DdPtr) += here->BSIM3v32DdPt); (*(here->BSIM3v32GgPtr) += here->BSIM3v32GgPt); (*(here->BSIM3v32SsPtr) += here->BSIM3v32SsPt); (*(here->BSIM3v32BbPtr) += here->BSIM3v32BbPt); (*(here->BSIM3v32DPdpPtr) += here->BSIM3v32DPdpPt); (*(here->BSIM3v32SPspPtr) += here->BSIM3v32SPspPt); (*(here->BSIM3v32DdpPtr) -= here->BSIM3v32DdpPt); (*(here->BSIM3v32GbPtr) -= here->BSIM3v32GbPt); (*(here->BSIM3v32GdpPtr) += here->BSIM3v32GdpPt); (*(here->BSIM3v32GspPtr) += here->BSIM3v32GspPt); (*(here->BSIM3v32SspPtr) -= here->BSIM3v32SspPt); (*(here->BSIM3v32BgPtr) += here->BSIM3v32BgPt); (*(here->BSIM3v32BdpPtr) += here->BSIM3v32BdpPt); (*(here->BSIM3v32BspPtr) += here->BSIM3v32BspPt); (*(here->BSIM3v32DPdPtr) -= here->BSIM3v32DPdPt); (*(here->BSIM3v32DPgPtr) += here->BSIM3v32DPgPt); (*(here->BSIM3v32DPbPtr) -= here->BSIM3v32DPbPt); (*(here->BSIM3v32DPspPtr) -= here->BSIM3v32DPspPt); (*(here->BSIM3v32SPgPtr) += here->BSIM3v32SPgPt); (*(here->BSIM3v32SPsPtr) -= here->BSIM3v32SPsPt); (*(here->BSIM3v32SPbPtr) -= here->BSIM3v32SPbPt); (*(here->BSIM3v32SPdpPtr) -= here->BSIM3v32SPdpPt); if (here->BSIM3v32nqsMod) { *(here->BSIM3v32QqPtr) += here->BSIM3v32QqPt; *(here->BSIM3v32DPqPtr) += here->BSIM3v32DPqPt; *(here->BSIM3v32SPqPtr) += here->BSIM3v32SPqPt; *(here->BSIM3v32GqPtr) -= here->BSIM3v32GqPt; *(here->BSIM3v32QgPtr) += here->BSIM3v32QgPt; *(here->BSIM3v32QdpPtr) += here->BSIM3v32QdpPt; *(here->BSIM3v32QspPtr) += here->BSIM3v32QspPt; *(here->BSIM3v32QbPtr) += here->BSIM3v32QbPt; } } } #endif tmpk8ny_4pz/src/spicelib/devices/bsim3v32/bsim3v32ext.h0000644000175000017500000000275513546075722023006 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: 1991 JianHui Huang and Min-Chie Jeng. Modified by Yuhua Cheng to use BSIM3v3 in Spice3f5 (Jan. 1997) Modified by Paolo Nenzi 2002 File: bsim3ext.h **********/ extern int BSIM3v32acLoad(GENmodel *,CKTcircuit*); extern int BSIM3v32ask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*); extern int BSIM3v32convTest(GENmodel *,CKTcircuit*); extern int BSIM3v32getic(GENmodel*,CKTcircuit*); extern int BSIM3v32load(GENmodel*,CKTcircuit*); extern int BSIM3v32mAsk(CKTcircuit*,GENmodel *,int, IFvalue*); extern int BSIM3v32mDelete(GENmodel*); extern int BSIM3v32mParam(int,IFvalue*,GENmodel*); extern void BSIM3v32mosCap(CKTcircuit*, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*); extern int BSIM3v32param(int,IFvalue*,GENinstance*,IFvalue*); extern int BSIM3v32pzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int BSIM3v32setup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int BSIM3v32temp(GENmodel*,CKTcircuit*); extern int BSIM3v32trunc(GENmodel*,CKTcircuit*,double*); extern int BSIM3v32noise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int BSIM3v32unsetup(GENmodel*,CKTcircuit*); extern int BSIM3v32soaCheck(CKTcircuit *, GENmodel *); tmpk8ny_4pz/src/spicelib/devices/bsim3v32/b3v32.c0000644000175000017500000010627713546075722021553 0ustar carstencarsten/**** BSIM3v3.2.4, Released by Xuemei Xi 12/14/2001 ****/ /********** * Copyright 2001 Regents of the University of California. All rights reserved. * File: b3.c of BSIM3v3.2.4 * Author: 1995 Min-Chie Jeng and Mansun Chan * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi * Modified by Paolo Nenzi 2002 and Dietmar Warning 2003 **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "bsim3v32def.h" #include "ngspice/suffix.h" IFparm BSIM3v32pTable[] = { /* parameters */ IOP( "l", BSIM3v32_L, IF_REAL , "Length"), IOP( "w", BSIM3v32_W, IF_REAL , "Width"), IOP( "m", BSIM3v32_M, IF_REAL , "Parallel multiplier"), IOP( "ad", BSIM3v32_AD, IF_REAL , "Drain area"), IOP( "as", BSIM3v32_AS, IF_REAL , "Source area"), IOP( "pd", BSIM3v32_PD, IF_REAL , "Drain perimeter"), IOP( "ps", BSIM3v32_PS, IF_REAL , "Source perimeter"), IOP( "nrd", BSIM3v32_NRD, IF_REAL , "Number of squares in drain"), IOP( "nrs", BSIM3v32_NRS, IF_REAL , "Number of squares in source"), IOP( "off", BSIM3v32_OFF, IF_FLAG , "Device is initially off"), IOP( "nqsmod", BSIM3v32_NQSMOD, IF_INTEGER, "Non-quasi-static model selector"), IOP( "geo", BSIM3v32_GEO, IF_INTEGER, "ACM model drain/source connection"), IOP( "delvto", BSIM3v32_DELVTO, IF_REAL , "Zero bias threshold voltage variation"), IOP( "mulu0", BSIM3v32_MULU0, IF_REAL , "Low field mobility multiplier"), IP( "ic", BSIM3v32_IC, IF_REALVEC , "Vector of DS,GS,BS initial voltages"), OP( "gmbs", BSIM3v32_GMBS, IF_REAL, "Gmb"), OP( "gm", BSIM3v32_GM, IF_REAL, "Gm"), OP( "gds", BSIM3v32_GDS, IF_REAL, "Gds"), OP( "vdsat", BSIM3v32_VDSAT, IF_REAL, "Vdsat"), OP( "vth", BSIM3v32_VON, IF_REAL, "Vth"), OP( "id", BSIM3v32_CD, IF_REAL, "Ids"), OP( "vbs", BSIM3v32_VBS, IF_REAL, "Vbs"), OP( "vgs", BSIM3v32_VGS, IF_REAL, "Vgs"), OP( "vds", BSIM3v32_VDS, IF_REAL, "Vds"), OP( "ibd", BSIM3v32_CBD, IF_REAL, "Ibd"), /* newly added from here */ OP( "ibs", BSIM3v32_CBS, IF_REAL, "Ibs"), OP( "gbd", BSIM3v32_GBD, IF_REAL, "gbd"), OP( "gbs", BSIM3v32_GBS, IF_REAL, "gbs"), OP( "qb", BSIM3v32_QB, IF_REAL, "Qbulk"), OP( "cqb", BSIM3v32_CQB, IF_REAL, "CQbulk"), OP( "qg", BSIM3v32_QG, IF_REAL, "Qgate"), OP( "cqg", BSIM3v32_CQG, IF_REAL, "CQgate"), OP( "qd", BSIM3v32_QD, IF_REAL, "Qdrain"), OP( "cqd", BSIM3v32_CQD, IF_REAL, "CQdrain"), OP( "cgg", BSIM3v32_CGG, IF_REAL, "Cggb"), OP( "cgd", BSIM3v32_CGD, IF_REAL, "Cgdb"), OP( "cgs", BSIM3v32_CGS, IF_REAL, "Cgsb"), OP( "cdg", BSIM3v32_CDG, IF_REAL, "Cdgb"), OP( "cdd", BSIM3v32_CDD, IF_REAL, "Cddb"), OP( "cds", BSIM3v32_CDS, IF_REAL, "Cdsb"), OP( "cbg", BSIM3v32_CBG, IF_REAL, "Cbgb"), OP( "cbd", BSIM3v32_CBDB, IF_REAL, "Cbdb"), OP( "cbs", BSIM3v32_CBSB, IF_REAL, "Cbsb"), OP( "capbd", BSIM3v32_CAPBD, IF_REAL, "Capbd"), OP( "capbs", BSIM3v32_CAPBS, IF_REAL, "Capbs"), }; IFparm BSIM3v32mPTable[] = { /* model parameters */ IOP( "capmod", BSIM3v32_MOD_CAPMOD, IF_INTEGER, "Capacitance model selector"), IOP( "mobmod", BSIM3v32_MOD_MOBMOD, IF_INTEGER, "Mobility model selector"), IOP( "noimod", BSIM3v32_MOD_NOIMOD, IF_INTEGER, "Noise model selector"), IOP( "nqsmod", BSIM3v32_MOD_NQSMOD, IF_INTEGER, "Non-quasi-static model selector"), IOP( "acm", BSIM3v32_MOD_ACMMOD, IF_INTEGER, "Area calculation method selector"), IOP( "calcacm", BSIM3v32_MOD_CALCACM, IF_INTEGER, "Area calculation method ACM=12"), IOP( "paramchk", BSIM3v32_MOD_PARAMCHK, IF_INTEGER, "Model parameter checking selector"), IOP( "binunit", BSIM3v32_MOD_BINUNIT, IF_INTEGER, "Bin unit selector"), IOP( "version", BSIM3v32_MOD_VERSION, IF_STRING, " parameter for model version"), IOP( "tox", BSIM3v32_MOD_TOX, IF_REAL, "Gate oxide thickness in meters"), IOP( "toxm", BSIM3v32_MOD_TOXM, IF_REAL, "Gate oxide thickness used in extraction"), IOP( "cdsc", BSIM3v32_MOD_CDSC, IF_REAL, "Drain/Source and channel coupling capacitance"), IOP( "cdscb", BSIM3v32_MOD_CDSCB, IF_REAL, "Body-bias dependence of cdsc"), IOP( "cdscd", BSIM3v32_MOD_CDSCD, IF_REAL, "Drain-bias dependence of cdsc"), IOP( "cit", BSIM3v32_MOD_CIT, IF_REAL, "Interface state capacitance"), IOP( "nfactor", BSIM3v32_MOD_NFACTOR, IF_REAL, "Subthreshold swing Coefficient"), IOP( "xj", BSIM3v32_MOD_XJ, IF_REAL, "Junction depth in meters"), IOP( "vsat", BSIM3v32_MOD_VSAT, IF_REAL, "Saturation velocity at tnom"), IOP( "at", BSIM3v32_MOD_AT, IF_REAL, "Temperature coefficient of vsat"), IOP( "a0", BSIM3v32_MOD_A0, IF_REAL, "Non-uniform depletion width effect coefficient."), IOP( "ags", BSIM3v32_MOD_AGS, IF_REAL, "Gate bias coefficient of Abulk."), IOP( "a1", BSIM3v32_MOD_A1, IF_REAL, "Non-saturation effect coefficient"), IOP( "a2", BSIM3v32_MOD_A2, IF_REAL, "Non-saturation effect coefficient"), IOP( "keta", BSIM3v32_MOD_KETA, IF_REAL, "Body-bias coefficient of non-uniform depletion width effect."), IOP( "nsub", BSIM3v32_MOD_NSUB, IF_REAL, "Substrate doping concentration"), IOP( "nch", BSIM3v32_MOD_NPEAK, IF_REAL, "Channel doping concentration"), IOP( "ngate", BSIM3v32_MOD_NGATE, IF_REAL, "Poly-gate doping concentration"), IOP( "gamma1", BSIM3v32_MOD_GAMMA1, IF_REAL, "Vth body coefficient"), IOP( "gamma2", BSIM3v32_MOD_GAMMA2, IF_REAL, "Vth body coefficient"), IOP( "vbx", BSIM3v32_MOD_VBX, IF_REAL, "Vth transition body Voltage"), IOP( "vbm", BSIM3v32_MOD_VBM, IF_REAL, "Maximum body voltage"), IOP( "xt", BSIM3v32_MOD_XT, IF_REAL, "Doping depth"), IOP( "k1", BSIM3v32_MOD_K1, IF_REAL, "Bulk effect coefficient 1"), IOP( "kt1", BSIM3v32_MOD_KT1, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt1l", BSIM3v32_MOD_KT1L, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt2", BSIM3v32_MOD_KT2, IF_REAL, "Body-coefficient of kt1"), IOP( "k2", BSIM3v32_MOD_K2, IF_REAL, "Bulk effect coefficient 2"), IOP( "k3", BSIM3v32_MOD_K3, IF_REAL, "Narrow width effect coefficient"), IOP( "k3b", BSIM3v32_MOD_K3B, IF_REAL, "Body effect coefficient of k3"), IOP( "w0", BSIM3v32_MOD_W0, IF_REAL, "Narrow width effect parameter"), IOP( "nlx", BSIM3v32_MOD_NLX, IF_REAL, "Lateral non-uniform doping effect"), IOP( "dvt0", BSIM3v32_MOD_DVT0, IF_REAL, "Short channel effect coeff. 0"), IOP( "dvt1", BSIM3v32_MOD_DVT1, IF_REAL, "Short channel effect coeff. 1"), IOP( "dvt2", BSIM3v32_MOD_DVT2, IF_REAL, "Short channel effect coeff. 2"), IOP( "dvt0w", BSIM3v32_MOD_DVT0W, IF_REAL, "Narrow Width coeff. 0"), IOP( "dvt1w", BSIM3v32_MOD_DVT1W, IF_REAL, "Narrow Width effect coeff. 1"), IOP( "dvt2w", BSIM3v32_MOD_DVT2W, IF_REAL, "Narrow Width effect coeff. 2"), IOP( "drout", BSIM3v32_MOD_DROUT, IF_REAL, "DIBL coefficient of output resistance"), IOP( "dsub", BSIM3v32_MOD_DSUB, IF_REAL, "DIBL coefficient in the subthreshold region"), IOP( "vth0", BSIM3v32_MOD_VTH0, IF_REAL,"Threshold voltage"), IOPR("vtho", BSIM3v32_MOD_VTH0, IF_REAL,"Threshold voltage"), IOP( "ua", BSIM3v32_MOD_UA, IF_REAL, "Linear gate dependence of mobility"), IOP( "ua1", BSIM3v32_MOD_UA1, IF_REAL, "Temperature coefficient of ua"), IOP( "ub", BSIM3v32_MOD_UB, IF_REAL, "Quadratic gate dependence of mobility"), IOP( "ub1", BSIM3v32_MOD_UB1, IF_REAL, "Temperature coefficient of ub"), IOP( "uc", BSIM3v32_MOD_UC, IF_REAL, "Body-bias dependence of mobility"), IOP( "uc1", BSIM3v32_MOD_UC1, IF_REAL, "Temperature coefficient of uc"), IOP( "u0", BSIM3v32_MOD_U0, IF_REAL, "Low-field mobility at Tnom"), IOP( "ute", BSIM3v32_MOD_UTE, IF_REAL, "Temperature coefficient of mobility"), IOP( "voff", BSIM3v32_MOD_VOFF, IF_REAL, "Threshold voltage offset"), IOP( "tnom", BSIM3v32_MOD_TNOM, IF_REAL, "Parameter measurement temperature"), IOP( "cgso", BSIM3v32_MOD_CGSO, IF_REAL, "Gate-source overlap capacitance per width"), IOP( "cgdo", BSIM3v32_MOD_CGDO, IF_REAL, "Gate-drain overlap capacitance per width"), IOP( "cgbo", BSIM3v32_MOD_CGBO, IF_REAL, "Gate-bulk overlap capacitance per length"), IOP( "xpart", BSIM3v32_MOD_XPART, IF_REAL, "Channel charge partitioning"), IOP( "elm", BSIM3v32_MOD_ELM, IF_REAL, "Non-quasi-static Elmore Constant Parameter"), IOP( "delta", BSIM3v32_MOD_DELTA, IF_REAL, "Effective Vds parameter"), IOP( "rsh", BSIM3v32_MOD_RSH, IF_REAL, "Source-drain sheet resistance"), IOP( "rdsw", BSIM3v32_MOD_RDSW, IF_REAL, "Source-drain resistance per width"), IOP( "prwg", BSIM3v32_MOD_PRWG, IF_REAL, "Gate-bias effect on parasitic resistance "), IOP( "prwb", BSIM3v32_MOD_PRWB, IF_REAL, "Body-effect on parasitic resistance "), IOP( "prt", BSIM3v32_MOD_PRT, IF_REAL, "Temperature coefficient of parasitic resistance "), IOP( "eta0", BSIM3v32_MOD_ETA0, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "etab", BSIM3v32_MOD_ETAB, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "pclm", BSIM3v32_MOD_PCLM, IF_REAL, "Channel length modulation Coefficient"), IOP( "pdiblc1", BSIM3v32_MOD_PDIBL1, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblc2", BSIM3v32_MOD_PDIBL2, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblcb", BSIM3v32_MOD_PDIBLB, IF_REAL, "Body-effect on drain-induced barrier lowering"), IOP( "pscbe1", BSIM3v32_MOD_PSCBE1, IF_REAL, "Substrate current body-effect coefficient"), IOP( "pscbe2", BSIM3v32_MOD_PSCBE2, IF_REAL, "Substrate current body-effect coefficient"), IOP( "pvag", BSIM3v32_MOD_PVAG, IF_REAL, "Gate dependence of output resistance parameter"), IOP( "js", BSIM3v32_MOD_JS, IF_REAL, "Source/drain junction reverse saturation current density"), IOP( "jsw", BSIM3v32_MOD_JSW, IF_REAL, "Sidewall junction reverse saturation current density"), IOP( "pb", BSIM3v32_MOD_PB, IF_REAL, "Source/drain junction built-in potential"), IOP( "nj", BSIM3v32_MOD_NJ, IF_REAL, "Source/drain junction emission coefficient"), IOP( "xti", BSIM3v32_MOD_XTI, IF_REAL, "Junction current temperature exponent"), IOP( "mj", BSIM3v32_MOD_MJ, IF_REAL, "Source/drain bottom junction capacitance grading coefficient"), IOP( "pbsw", BSIM3v32_MOD_PBSW, IF_REAL, "Source/drain sidewall junction capacitance built in potential"), IOP( "mjsw", BSIM3v32_MOD_MJSW, IF_REAL, "Source/drain sidewall junction capacitance grading coefficient"), IOP( "pbswg", BSIM3v32_MOD_PBSWG, IF_REAL, "Source/drain (gate side) sidewall junction capacitance built in potential"), IOP( "mjswg", BSIM3v32_MOD_MJSWG, IF_REAL, "Source/drain (gate side) sidewall junction capacitance grading coefficient"), IOP( "cj", BSIM3v32_MOD_CJ, IF_REAL, "Source/drain bottom junction capacitance per unit area"), IOP( "vfbcv", BSIM3v32_MOD_VFBCV, IF_REAL, "Flat Band Voltage parameter for capmod=0 only"), IOP( "vfb", BSIM3v32_MOD_VFB, IF_REAL, "Flat Band Voltage"), IOP( "cjsw", BSIM3v32_MOD_CJSW, IF_REAL, "Source/drain sidewall junction capacitance per unit periphery"), IOP( "cjswg", BSIM3v32_MOD_CJSWG, IF_REAL, "Source/drain (gate side) sidewall junction capacitance per unit width"), IOP( "tpb", BSIM3v32_MOD_TPB, IF_REAL, "Temperature coefficient of pb"), IOP( "tcj", BSIM3v32_MOD_TCJ, IF_REAL, "Temperature coefficient of cj"), IOP( "tpbsw", BSIM3v32_MOD_TPBSW, IF_REAL, "Temperature coefficient of pbsw"), IOP( "tcjsw", BSIM3v32_MOD_TCJSW, IF_REAL, "Temperature coefficient of cjsw"), IOP( "tpbswg", BSIM3v32_MOD_TPBSWG, IF_REAL, "Temperature coefficient of pbswg"), IOP( "tcjswg", BSIM3v32_MOD_TCJSWG, IF_REAL, "Temperature coefficient of cjswg"), IOP( "acde", BSIM3v32_MOD_ACDE, IF_REAL, "Exponential coefficient for finite charge thickness"), IOP( "moin", BSIM3v32_MOD_MOIN, IF_REAL, "Coefficient for gate-bias dependent surface potential"), IOP( "noff", BSIM3v32_MOD_NOFF, IF_REAL, "C-V turn-on/off parameter"), IOP( "voffcv", BSIM3v32_MOD_VOFFCV, IF_REAL, "C-V lateral-shift parameter"), IOP( "lint", BSIM3v32_MOD_LINT, IF_REAL, "Length reduction parameter"), IOP( "ll", BSIM3v32_MOD_LL, IF_REAL, "Length reduction parameter"), IOP( "llc", BSIM3v32_MOD_LLC, IF_REAL, "Length reduction parameter for CV"), IOP( "lln", BSIM3v32_MOD_LLN, IF_REAL, "Length reduction parameter"), IOP( "lw", BSIM3v32_MOD_LW, IF_REAL, "Length reduction parameter"), IOP( "lwc", BSIM3v32_MOD_LWC, IF_REAL, "Length reduction parameter for CV"), IOP( "lwn", BSIM3v32_MOD_LWN, IF_REAL, "Length reduction parameter"), IOP( "lwl", BSIM3v32_MOD_LWL, IF_REAL, "Length reduction parameter"), IOP( "lwlc", BSIM3v32_MOD_LWLC, IF_REAL, "Length reduction parameter for CV"), IOP( "lmin", BSIM3v32_MOD_LMIN, IF_REAL, "Minimum length for the model"), IOP( "lmax", BSIM3v32_MOD_LMAX, IF_REAL, "Maximum length for the model"), IOP( "xl", BSIM3v32_MOD_XL, IF_REAL, "Length correction parameter"), IOP( "xw", BSIM3v32_MOD_XW, IF_REAL, "Width correction parameter"), IOP( "wr", BSIM3v32_MOD_WR, IF_REAL, "Width dependence of rds"), IOP( "wint", BSIM3v32_MOD_WINT, IF_REAL, "Width reduction parameter"), IOP( "dwg", BSIM3v32_MOD_DWG, IF_REAL, "Width reduction parameter"), IOP( "dwb", BSIM3v32_MOD_DWB, IF_REAL, "Width reduction parameter"), IOP( "wl", BSIM3v32_MOD_WL, IF_REAL, "Width reduction parameter"), IOP( "wlc", BSIM3v32_MOD_WLC, IF_REAL, "Width reduction parameter for CV"), IOP( "wln", BSIM3v32_MOD_WLN, IF_REAL, "Width reduction parameter"), IOP( "ww", BSIM3v32_MOD_WW, IF_REAL, "Width reduction parameter"), IOP( "wwc", BSIM3v32_MOD_WWC, IF_REAL, "Width reduction parameter for CV"), IOP( "wwn", BSIM3v32_MOD_WWN, IF_REAL, "Width reduction parameter"), IOP( "wwl", BSIM3v32_MOD_WWL, IF_REAL, "Width reduction parameter"), IOP( "wwlc", BSIM3v32_MOD_WWLC, IF_REAL, "Width reduction parameter for CV"), IOP( "wmin", BSIM3v32_MOD_WMIN, IF_REAL, "Minimum width for the model"), IOP( "wmax", BSIM3v32_MOD_WMAX, IF_REAL, "Maximum width for the model"), IOP( "b0", BSIM3v32_MOD_B0, IF_REAL, "Abulk narrow width parameter"), IOP( "b1", BSIM3v32_MOD_B1, IF_REAL, "Abulk narrow width parameter"), IOP( "cgsl", BSIM3v32_MOD_CGSL, IF_REAL, "New C-V model parameter"), IOP( "cgdl", BSIM3v32_MOD_CGDL, IF_REAL, "New C-V model parameter"), IOP( "ckappa", BSIM3v32_MOD_CKAPPA, IF_REAL, "New C-V model parameter"), IOP( "cf", BSIM3v32_MOD_CF, IF_REAL, "Fringe capacitance parameter"), IOP( "clc", BSIM3v32_MOD_CLC, IF_REAL, "Vdsat parameter for C-V model"), IOP( "cle", BSIM3v32_MOD_CLE, IF_REAL, "Vdsat parameter for C-V model"), IOP( "dwc", BSIM3v32_MOD_DWC, IF_REAL, "Delta W for C-V model"), IOP( "dlc", BSIM3v32_MOD_DLC, IF_REAL, "Delta L for C-V model"), IOP( "hdif", BSIM3v32_MOD_HDIF, IF_REAL, "ACM Parameter: Distance Gate - contact"), IOP( "ldif", BSIM3v32_MOD_LDIF, IF_REAL, "ACM Parameter: Length of LDD Gate-Source/Drain"), IOP( "ld", BSIM3v32_MOD_LD, IF_REAL, "ACM Parameter: Length of LDD under Gate"), IOP( "rd", BSIM3v32_MOD_RD, IF_REAL, "ACM Parameter: Resistance of LDD drain side"), IOP( "rs", BSIM3v32_MOD_RS, IF_REAL, "ACM Parameter: Resistance of LDD source side"), IOP( "rdc", BSIM3v32_MOD_RDC, IF_REAL, "ACM Parameter: Resistance contact drain side"), IOP( "rsc", BSIM3v32_MOD_RSC, IF_REAL, "ACM Parameter: Resistance contact source side"), IOP( "wmlt", BSIM3v32_MOD_WMLT, IF_REAL, "ACM Parameter: Width shrink factor"), IOP( "lmlt", BSIM3v32_MOD_LMLT, IF_REAL, "Channel length shrink factor"), IOP( "alpha0", BSIM3v32_MOD_ALPHA0, IF_REAL, "substrate current model parameter"), IOP( "alpha1", BSIM3v32_MOD_ALPHA1, IF_REAL, "substrate current model parameter"), IOP( "beta0", BSIM3v32_MOD_BETA0, IF_REAL, "substrate current model parameter"), IOP( "ijth", BSIM3v32_MOD_IJTH, IF_REAL, "Diode limiting current"), IOP( "lcdsc", BSIM3v32_MOD_LCDSC, IF_REAL, "Length dependence of cdsc"), IOP( "lcdscb", BSIM3v32_MOD_LCDSCB, IF_REAL, "Length dependence of cdscb"), IOP( "lcdscd", BSIM3v32_MOD_LCDSCD, IF_REAL, "Length dependence of cdscd"), IOP( "lcit", BSIM3v32_MOD_LCIT, IF_REAL, "Length dependence of cit"), IOP( "lnfactor", BSIM3v32_MOD_LNFACTOR, IF_REAL, "Length dependence of nfactor"), IOP( "lxj", BSIM3v32_MOD_LXJ, IF_REAL, "Length dependence of xj"), IOP( "lvsat", BSIM3v32_MOD_LVSAT, IF_REAL, "Length dependence of vsat"), IOP( "lat", BSIM3v32_MOD_LAT, IF_REAL, "Length dependence of at"), IOP( "la0", BSIM3v32_MOD_LA0, IF_REAL, "Length dependence of a0"), IOP( "lags", BSIM3v32_MOD_LAGS, IF_REAL, "Length dependence of ags"), IOP( "la1", BSIM3v32_MOD_LA1, IF_REAL, "Length dependence of a1"), IOP( "la2", BSIM3v32_MOD_LA2, IF_REAL, "Length dependence of a2"), IOP( "lketa", BSIM3v32_MOD_LKETA, IF_REAL, "Length dependence of keta"), IOP( "lnsub", BSIM3v32_MOD_LNSUB, IF_REAL, "Length dependence of nsub"), IOP( "lnch", BSIM3v32_MOD_LNPEAK, IF_REAL, "Length dependence of nch"), IOP( "lngate", BSIM3v32_MOD_LNGATE, IF_REAL, "Length dependence of ngate"), IOP( "lgamma1", BSIM3v32_MOD_LGAMMA1, IF_REAL, "Length dependence of gamma1"), IOP( "lgamma2", BSIM3v32_MOD_LGAMMA2, IF_REAL, "Length dependence of gamma2"), IOP( "lvbx", BSIM3v32_MOD_LVBX, IF_REAL, "Length dependence of vbx"), IOP( "lvbm", BSIM3v32_MOD_LVBM, IF_REAL, "Length dependence of vbm"), IOP( "lxt", BSIM3v32_MOD_LXT, IF_REAL, "Length dependence of xt"), IOP( "lk1", BSIM3v32_MOD_LK1, IF_REAL, "Length dependence of k1"), IOP( "lkt1", BSIM3v32_MOD_LKT1, IF_REAL, "Length dependence of kt1"), IOP( "lkt1l", BSIM3v32_MOD_LKT1L, IF_REAL, "Length dependence of kt1l"), IOP( "lkt2", BSIM3v32_MOD_LKT2, IF_REAL, "Length dependence of kt2"), IOP( "lk2", BSIM3v32_MOD_LK2, IF_REAL, "Length dependence of k2"), IOP( "lk3", BSIM3v32_MOD_LK3, IF_REAL, "Length dependence of k3"), IOP( "lk3b", BSIM3v32_MOD_LK3B, IF_REAL, "Length dependence of k3b"), IOP( "lw0", BSIM3v32_MOD_LW0, IF_REAL, "Length dependence of w0"), IOP( "lnlx", BSIM3v32_MOD_LNLX, IF_REAL, "Length dependence of nlx"), IOP( "ldvt0", BSIM3v32_MOD_LDVT0, IF_REAL, "Length dependence of dvt0"), IOP( "ldvt1", BSIM3v32_MOD_LDVT1, IF_REAL, "Length dependence of dvt1"), IOP( "ldvt2", BSIM3v32_MOD_LDVT2, IF_REAL, "Length dependence of dvt2"), IOP( "ldvt0w", BSIM3v32_MOD_LDVT0W, IF_REAL, "Length dependence of dvt0w"), IOP( "ldvt1w", BSIM3v32_MOD_LDVT1W, IF_REAL, "Length dependence of dvt1w"), IOP( "ldvt2w", BSIM3v32_MOD_LDVT2W, IF_REAL, "Length dependence of dvt2w"), IOP( "ldrout", BSIM3v32_MOD_LDROUT, IF_REAL, "Length dependence of drout"), IOP( "ldsub", BSIM3v32_MOD_LDSUB, IF_REAL, "Length dependence of dsub"), IOP( "lvth0", BSIM3v32_MOD_LVTH0, IF_REAL,"Length dependence of vth0"), IOPR("lvtho", BSIM3v32_MOD_LVTH0, IF_REAL,"Length dependence of vtho"), IOP( "lua", BSIM3v32_MOD_LUA, IF_REAL, "Length dependence of ua"), IOP( "lua1", BSIM3v32_MOD_LUA1, IF_REAL, "Length dependence of ua1"), IOP( "lub", BSIM3v32_MOD_LUB, IF_REAL, "Length dependence of ub"), IOP( "lub1", BSIM3v32_MOD_LUB1, IF_REAL, "Length dependence of ub1"), IOP( "luc", BSIM3v32_MOD_LUC, IF_REAL, "Length dependence of uc"), IOP( "luc1", BSIM3v32_MOD_LUC1, IF_REAL, "Length dependence of uc1"), IOP( "lu0", BSIM3v32_MOD_LU0, IF_REAL, "Length dependence of u0"), IOP( "lute", BSIM3v32_MOD_LUTE, IF_REAL, "Length dependence of ute"), IOP( "lvoff", BSIM3v32_MOD_LVOFF, IF_REAL, "Length dependence of voff"), IOP( "lelm", BSIM3v32_MOD_LELM, IF_REAL, "Length dependence of elm"), IOP( "ldelta", BSIM3v32_MOD_LDELTA, IF_REAL, "Length dependence of delta"), IOP( "lrdsw", BSIM3v32_MOD_LRDSW, IF_REAL, "Length dependence of rdsw "), IOP( "lprwg", BSIM3v32_MOD_LPRWG, IF_REAL, "Length dependence of prwg "), IOP( "lprwb", BSIM3v32_MOD_LPRWB, IF_REAL, "Length dependence of prwb "), IOP( "lprt", BSIM3v32_MOD_LPRT, IF_REAL, "Length dependence of prt "), IOP( "leta0", BSIM3v32_MOD_LETA0, IF_REAL, "Length dependence of eta0"), IOP( "letab", BSIM3v32_MOD_LETAB, IF_REAL, "Length dependence of etab"), IOP( "lpclm", BSIM3v32_MOD_LPCLM, IF_REAL, "Length dependence of pclm"), IOP( "lpdiblc1", BSIM3v32_MOD_LPDIBL1, IF_REAL, "Length dependence of pdiblc1"), IOP( "lpdiblc2", BSIM3v32_MOD_LPDIBL2, IF_REAL, "Length dependence of pdiblc2"), IOP( "lpdiblcb", BSIM3v32_MOD_LPDIBLB, IF_REAL, "Length dependence of pdiblcb"), IOP( "lpscbe1", BSIM3v32_MOD_LPSCBE1, IF_REAL, "Length dependence of pscbe1"), IOP( "lpscbe2", BSIM3v32_MOD_LPSCBE2, IF_REAL, "Length dependence of pscbe2"), IOP( "lpvag", BSIM3v32_MOD_LPVAG, IF_REAL, "Length dependence of pvag"), IOP( "lwr", BSIM3v32_MOD_LWR, IF_REAL, "Length dependence of wr"), IOP( "ldwg", BSIM3v32_MOD_LDWG, IF_REAL, "Length dependence of dwg"), IOP( "ldwb", BSIM3v32_MOD_LDWB, IF_REAL, "Length dependence of dwb"), IOP( "lb0", BSIM3v32_MOD_LB0, IF_REAL, "Length dependence of b0"), IOP( "lb1", BSIM3v32_MOD_LB1, IF_REAL, "Length dependence of b1"), IOP( "lcgsl", BSIM3v32_MOD_LCGSL, IF_REAL, "Length dependence of cgsl"), IOP( "lcgdl", BSIM3v32_MOD_LCGDL, IF_REAL, "Length dependence of cgdl"), IOP( "lckappa", BSIM3v32_MOD_LCKAPPA, IF_REAL, "Length dependence of ckappa"), IOP( "lcf", BSIM3v32_MOD_LCF, IF_REAL, "Length dependence of cf"), IOP( "lclc", BSIM3v32_MOD_LCLC, IF_REAL, "Length dependence of clc"), IOP( "lcle", BSIM3v32_MOD_LCLE, IF_REAL, "Length dependence of cle"), IOP( "lalpha0", BSIM3v32_MOD_LALPHA0, IF_REAL, "Length dependence of alpha0"), IOP( "lalpha1", BSIM3v32_MOD_LALPHA1, IF_REAL, "Length dependence of alpha1"), IOP( "lbeta0", BSIM3v32_MOD_LBETA0, IF_REAL, "Length dependence of beta0"), IOP( "lvfbcv", BSIM3v32_MOD_LVFBCV, IF_REAL, "Length dependence of vfbcv"), IOP( "lvfb", BSIM3v32_MOD_LVFB, IF_REAL, "Length dependence of vfb"), IOP( "lacde", BSIM3v32_MOD_LACDE, IF_REAL, "Length dependence of acde"), IOP( "lmoin", BSIM3v32_MOD_LMOIN, IF_REAL, "Length dependence of moin"), IOP( "lnoff", BSIM3v32_MOD_LNOFF, IF_REAL, "Length dependence of noff"), IOP( "lvoffcv", BSIM3v32_MOD_LVOFFCV, IF_REAL, "Length dependence of voffcv"), IOP( "wcdsc", BSIM3v32_MOD_WCDSC, IF_REAL, "Width dependence of cdsc"), IOP( "wcdscb", BSIM3v32_MOD_WCDSCB, IF_REAL, "Width dependence of cdscb"), IOP( "wcdscd", BSIM3v32_MOD_WCDSCD, IF_REAL, "Width dependence of cdscd"), IOP( "wcit", BSIM3v32_MOD_WCIT, IF_REAL, "Width dependence of cit"), IOP( "wnfactor", BSIM3v32_MOD_WNFACTOR, IF_REAL, "Width dependence of nfactor"), IOP( "wxj", BSIM3v32_MOD_WXJ, IF_REAL, "Width dependence of xj"), IOP( "wvsat", BSIM3v32_MOD_WVSAT, IF_REAL, "Width dependence of vsat"), IOP( "wat", BSIM3v32_MOD_WAT, IF_REAL, "Width dependence of at"), IOP( "wa0", BSIM3v32_MOD_WA0, IF_REAL, "Width dependence of a0"), IOP( "wags", BSIM3v32_MOD_WAGS, IF_REAL, "Width dependence of ags"), IOP( "wa1", BSIM3v32_MOD_WA1, IF_REAL, "Width dependence of a1"), IOP( "wa2", BSIM3v32_MOD_WA2, IF_REAL, "Width dependence of a2"), IOP( "wketa", BSIM3v32_MOD_WKETA, IF_REAL, "Width dependence of keta"), IOP( "wnsub", BSIM3v32_MOD_WNSUB, IF_REAL, "Width dependence of nsub"), IOP( "wnch", BSIM3v32_MOD_WNPEAK, IF_REAL, "Width dependence of nch"), IOP( "wngate", BSIM3v32_MOD_WNGATE, IF_REAL, "Width dependence of ngate"), IOP( "wgamma1", BSIM3v32_MOD_WGAMMA1, IF_REAL, "Width dependence of gamma1"), IOP( "wgamma2", BSIM3v32_MOD_WGAMMA2, IF_REAL, "Width dependence of gamma2"), IOP( "wvbx", BSIM3v32_MOD_WVBX, IF_REAL, "Width dependence of vbx"), IOP( "wvbm", BSIM3v32_MOD_WVBM, IF_REAL, "Width dependence of vbm"), IOP( "wxt", BSIM3v32_MOD_WXT, IF_REAL, "Width dependence of xt"), IOP( "wk1", BSIM3v32_MOD_WK1, IF_REAL, "Width dependence of k1"), IOP( "wkt1", BSIM3v32_MOD_WKT1, IF_REAL, "Width dependence of kt1"), IOP( "wkt1l", BSIM3v32_MOD_WKT1L, IF_REAL, "Width dependence of kt1l"), IOP( "wkt2", BSIM3v32_MOD_WKT2, IF_REAL, "Width dependence of kt2"), IOP( "wk2", BSIM3v32_MOD_WK2, IF_REAL, "Width dependence of k2"), IOP( "wk3", BSIM3v32_MOD_WK3, IF_REAL, "Width dependence of k3"), IOP( "wk3b", BSIM3v32_MOD_WK3B, IF_REAL, "Width dependence of k3b"), IOP( "ww0", BSIM3v32_MOD_WW0, IF_REAL, "Width dependence of w0"), IOP( "wnlx", BSIM3v32_MOD_WNLX, IF_REAL, "Width dependence of nlx"), IOP( "wdvt0", BSIM3v32_MOD_WDVT0, IF_REAL, "Width dependence of dvt0"), IOP( "wdvt1", BSIM3v32_MOD_WDVT1, IF_REAL, "Width dependence of dvt1"), IOP( "wdvt2", BSIM3v32_MOD_WDVT2, IF_REAL, "Width dependence of dvt2"), IOP( "wdvt0w", BSIM3v32_MOD_WDVT0W, IF_REAL, "Width dependence of dvt0w"), IOP( "wdvt1w", BSIM3v32_MOD_WDVT1W, IF_REAL, "Width dependence of dvt1w"), IOP( "wdvt2w", BSIM3v32_MOD_WDVT2W, IF_REAL, "Width dependence of dvt2w"), IOP( "wdrout", BSIM3v32_MOD_WDROUT, IF_REAL, "Width dependence of drout"), IOP( "wdsub", BSIM3v32_MOD_WDSUB, IF_REAL, "Width dependence of dsub"), IOP( "wvth0", BSIM3v32_MOD_WVTH0, IF_REAL,"Width dependence of vth0"), IOPR("wvtho", BSIM3v32_MOD_WVTH0, IF_REAL,"Width dependence of vtho"), IOP( "wua", BSIM3v32_MOD_WUA, IF_REAL, "Width dependence of ua"), IOP( "wua1", BSIM3v32_MOD_WUA1, IF_REAL, "Width dependence of ua1"), IOP( "wub", BSIM3v32_MOD_WUB, IF_REAL, "Width dependence of ub"), IOP( "wub1", BSIM3v32_MOD_WUB1, IF_REAL, "Width dependence of ub1"), IOP( "wuc", BSIM3v32_MOD_WUC, IF_REAL, "Width dependence of uc"), IOP( "wuc1", BSIM3v32_MOD_WUC1, IF_REAL, "Width dependence of uc1"), IOP( "wu0", BSIM3v32_MOD_WU0, IF_REAL, "Width dependence of u0"), IOP( "wute", BSIM3v32_MOD_WUTE, IF_REAL, "Width dependence of ute"), IOP( "wvoff", BSIM3v32_MOD_WVOFF, IF_REAL, "Width dependence of voff"), IOP( "welm", BSIM3v32_MOD_WELM, IF_REAL, "Width dependence of elm"), IOP( "wdelta", BSIM3v32_MOD_WDELTA, IF_REAL, "Width dependence of delta"), IOP( "wrdsw", BSIM3v32_MOD_WRDSW, IF_REAL, "Width dependence of rdsw "), IOP( "wprwg", BSIM3v32_MOD_WPRWG, IF_REAL, "Width dependence of prwg "), IOP( "wprwb", BSIM3v32_MOD_WPRWB, IF_REAL, "Width dependence of prwb "), IOP( "wprt", BSIM3v32_MOD_WPRT, IF_REAL, "Width dependence of prt"), IOP( "weta0", BSIM3v32_MOD_WETA0, IF_REAL, "Width dependence of eta0"), IOP( "wetab", BSIM3v32_MOD_WETAB, IF_REAL, "Width dependence of etab"), IOP( "wpclm", BSIM3v32_MOD_WPCLM, IF_REAL, "Width dependence of pclm"), IOP( "wpdiblc1", BSIM3v32_MOD_WPDIBL1, IF_REAL, "Width dependence of pdiblc1"), IOP( "wpdiblc2", BSIM3v32_MOD_WPDIBL2, IF_REAL, "Width dependence of pdiblc2"), IOP( "wpdiblcb", BSIM3v32_MOD_WPDIBLB, IF_REAL, "Width dependence of pdiblcb"), IOP( "wpscbe1", BSIM3v32_MOD_WPSCBE1, IF_REAL, "Width dependence of pscbe1"), IOP( "wpscbe2", BSIM3v32_MOD_WPSCBE2, IF_REAL, "Width dependence of pscbe2"), IOP( "wpvag", BSIM3v32_MOD_WPVAG, IF_REAL, "Width dependence of pvag"), IOP( "wwr", BSIM3v32_MOD_WWR, IF_REAL, "Width dependence of wr"), IOP( "wdwg", BSIM3v32_MOD_WDWG, IF_REAL, "Width dependence of dwg"), IOP( "wdwb", BSIM3v32_MOD_WDWB, IF_REAL, "Width dependence of dwb"), IOP( "wb0", BSIM3v32_MOD_WB0, IF_REAL, "Width dependence of b0"), IOP( "wb1", BSIM3v32_MOD_WB1, IF_REAL, "Width dependence of b1"), IOP( "wcgsl", BSIM3v32_MOD_WCGSL, IF_REAL, "Width dependence of cgsl"), IOP( "wcgdl", BSIM3v32_MOD_WCGDL, IF_REAL, "Width dependence of cgdl"), IOP( "wckappa", BSIM3v32_MOD_WCKAPPA, IF_REAL, "Width dependence of ckappa"), IOP( "wcf", BSIM3v32_MOD_WCF, IF_REAL, "Width dependence of cf"), IOP( "wclc", BSIM3v32_MOD_WCLC, IF_REAL, "Width dependence of clc"), IOP( "wcle", BSIM3v32_MOD_WCLE, IF_REAL, "Width dependence of cle"), IOP( "walpha0", BSIM3v32_MOD_WALPHA0, IF_REAL, "Width dependence of alpha0"), IOP( "walpha1", BSIM3v32_MOD_WALPHA1, IF_REAL, "Width dependence of alpha1"), IOP( "wbeta0", BSIM3v32_MOD_WBETA0, IF_REAL, "Width dependence of beta0"), IOP( "wvfbcv", BSIM3v32_MOD_WVFBCV, IF_REAL, "Width dependence of vfbcv"), IOP( "wvfb", BSIM3v32_MOD_WVFB, IF_REAL, "Width dependence of vfb"), IOP( "wacde", BSIM3v32_MOD_WACDE, IF_REAL, "Width dependence of acde"), IOP( "wmoin", BSIM3v32_MOD_WMOIN, IF_REAL, "Width dependence of moin"), IOP( "wnoff", BSIM3v32_MOD_WNOFF, IF_REAL, "Width dependence of noff"), IOP( "wvoffcv", BSIM3v32_MOD_WVOFFCV, IF_REAL, "Width dependence of voffcv"), IOP( "pcdsc", BSIM3v32_MOD_PCDSC, IF_REAL, "Cross-term dependence of cdsc"), IOP( "pcdscb", BSIM3v32_MOD_PCDSCB, IF_REAL, "Cross-term dependence of cdscb"), IOP( "pcdscd", BSIM3v32_MOD_PCDSCD, IF_REAL, "Cross-term dependence of cdscd"), IOP( "pcit", BSIM3v32_MOD_PCIT, IF_REAL, "Cross-term dependence of cit"), IOP( "pnfactor", BSIM3v32_MOD_PNFACTOR, IF_REAL, "Cross-term dependence of nfactor"), IOP( "pxj", BSIM3v32_MOD_PXJ, IF_REAL, "Cross-term dependence of xj"), IOP( "pvsat", BSIM3v32_MOD_PVSAT, IF_REAL, "Cross-term dependence of vsat"), IOP( "pat", BSIM3v32_MOD_PAT, IF_REAL, "Cross-term dependence of at"), IOP( "pa0", BSIM3v32_MOD_PA0, IF_REAL, "Cross-term dependence of a0"), IOP( "pags", BSIM3v32_MOD_PAGS, IF_REAL, "Cross-term dependence of ags"), IOP( "pa1", BSIM3v32_MOD_PA1, IF_REAL, "Cross-term dependence of a1"), IOP( "pa2", BSIM3v32_MOD_PA2, IF_REAL, "Cross-term dependence of a2"), IOP( "pketa", BSIM3v32_MOD_PKETA, IF_REAL, "Cross-term dependence of keta"), IOP( "pnsub", BSIM3v32_MOD_PNSUB, IF_REAL, "Cross-term dependence of nsub"), IOP( "pnch", BSIM3v32_MOD_PNPEAK, IF_REAL, "Cross-term dependence of nch"), IOP( "pngate", BSIM3v32_MOD_PNGATE, IF_REAL, "Cross-term dependence of ngate"), IOP( "pgamma1", BSIM3v32_MOD_PGAMMA1, IF_REAL, "Cross-term dependence of gamma1"), IOP( "pgamma2", BSIM3v32_MOD_PGAMMA2, IF_REAL, "Cross-term dependence of gamma2"), IOP( "pvbx", BSIM3v32_MOD_PVBX, IF_REAL, "Cross-term dependence of vbx"), IOP( "pvbm", BSIM3v32_MOD_PVBM, IF_REAL, "Cross-term dependence of vbm"), IOP( "pxt", BSIM3v32_MOD_PXT, IF_REAL, "Cross-term dependence of xt"), IOP( "pk1", BSIM3v32_MOD_PK1, IF_REAL, "Cross-term dependence of k1"), IOP( "pkt1", BSIM3v32_MOD_PKT1, IF_REAL, "Cross-term dependence of kt1"), IOP( "pkt1l", BSIM3v32_MOD_PKT1L, IF_REAL, "Cross-term dependence of kt1l"), IOP( "pkt2", BSIM3v32_MOD_PKT2, IF_REAL, "Cross-term dependence of kt2"), IOP( "pk2", BSIM3v32_MOD_PK2, IF_REAL, "Cross-term dependence of k2"), IOP( "pk3", BSIM3v32_MOD_PK3, IF_REAL, "Cross-term dependence of k3"), IOP( "pk3b", BSIM3v32_MOD_PK3B, IF_REAL, "Cross-term dependence of k3b"), IOP( "pw0", BSIM3v32_MOD_PW0, IF_REAL, "Cross-term dependence of w0"), IOP( "pnlx", BSIM3v32_MOD_PNLX, IF_REAL, "Cross-term dependence of nlx"), IOP( "pdvt0", BSIM3v32_MOD_PDVT0, IF_REAL, "Cross-term dependence of dvt0"), IOP( "pdvt1", BSIM3v32_MOD_PDVT1, IF_REAL, "Cross-term dependence of dvt1"), IOP( "pdvt2", BSIM3v32_MOD_PDVT2, IF_REAL, "Cross-term dependence of dvt2"), IOP( "pdvt0w", BSIM3v32_MOD_PDVT0W, IF_REAL, "Cross-term dependence of dvt0w"), IOP( "pdvt1w", BSIM3v32_MOD_PDVT1W, IF_REAL, "Cross-term dependence of dvt1w"), IOP( "pdvt2w", BSIM3v32_MOD_PDVT2W, IF_REAL, "Cross-term dependence of dvt2w"), IOP( "pdrout", BSIM3v32_MOD_PDROUT, IF_REAL, "Cross-term dependence of drout"), IOP( "pdsub", BSIM3v32_MOD_PDSUB, IF_REAL, "Cross-term dependence of dsub"), IOP( "pvth0", BSIM3v32_MOD_PVTH0, IF_REAL,"Cross-term dependence of vth0"), IOPR("pvtho", BSIM3v32_MOD_PVTH0, IF_REAL,"Cross-term dependence of vtho"), IOP( "pua", BSIM3v32_MOD_PUA, IF_REAL, "Cross-term dependence of ua"), IOP( "pua1", BSIM3v32_MOD_PUA1, IF_REAL, "Cross-term dependence of ua1"), IOP( "pub", BSIM3v32_MOD_PUB, IF_REAL, "Cross-term dependence of ub"), IOP( "pub1", BSIM3v32_MOD_PUB1, IF_REAL, "Cross-term dependence of ub1"), IOP( "puc", BSIM3v32_MOD_PUC, IF_REAL, "Cross-term dependence of uc"), IOP( "puc1", BSIM3v32_MOD_PUC1, IF_REAL, "Cross-term dependence of uc1"), IOP( "pu0", BSIM3v32_MOD_PU0, IF_REAL, "Cross-term dependence of u0"), IOP( "pute", BSIM3v32_MOD_PUTE, IF_REAL, "Cross-term dependence of ute"), IOP( "pvoff", BSIM3v32_MOD_PVOFF, IF_REAL, "Cross-term dependence of voff"), IOP( "pelm", BSIM3v32_MOD_PELM, IF_REAL, "Cross-term dependence of elm"), IOP( "pdelta", BSIM3v32_MOD_PDELTA, IF_REAL, "Cross-term dependence of delta"), IOP( "prdsw", BSIM3v32_MOD_PRDSW, IF_REAL, "Cross-term dependence of rdsw "), IOP( "pprwg", BSIM3v32_MOD_PPRWG, IF_REAL, "Cross-term dependence of prwg "), IOP( "pprwb", BSIM3v32_MOD_PPRWB, IF_REAL, "Cross-term dependence of prwb "), IOP( "pprt", BSIM3v32_MOD_PPRT, IF_REAL, "Cross-term dependence of prt "), IOP( "peta0", BSIM3v32_MOD_PETA0, IF_REAL, "Cross-term dependence of eta0"), IOP( "petab", BSIM3v32_MOD_PETAB, IF_REAL, "Cross-term dependence of etab"), IOP( "ppclm", BSIM3v32_MOD_PPCLM, IF_REAL, "Cross-term dependence of pclm"), IOP( "ppdiblc1", BSIM3v32_MOD_PPDIBL1, IF_REAL, "Cross-term dependence of pdiblc1"), IOP( "ppdiblc2", BSIM3v32_MOD_PPDIBL2, IF_REAL, "Cross-term dependence of pdiblc2"), IOP( "ppdiblcb", BSIM3v32_MOD_PPDIBLB, IF_REAL, "Cross-term dependence of pdiblcb"), IOP( "ppscbe1", BSIM3v32_MOD_PPSCBE1, IF_REAL, "Cross-term dependence of pscbe1"), IOP( "ppscbe2", BSIM3v32_MOD_PPSCBE2, IF_REAL, "Cross-term dependence of pscbe2"), IOP( "ppvag", BSIM3v32_MOD_PPVAG, IF_REAL, "Cross-term dependence of pvag"), IOP( "pwr", BSIM3v32_MOD_PWR, IF_REAL, "Cross-term dependence of wr"), IOP( "pdwg", BSIM3v32_MOD_PDWG, IF_REAL, "Cross-term dependence of dwg"), IOP( "pdwb", BSIM3v32_MOD_PDWB, IF_REAL, "Cross-term dependence of dwb"), IOP( "pb0", BSIM3v32_MOD_PB0, IF_REAL, "Cross-term dependence of b0"), IOP( "pb1", BSIM3v32_MOD_PB1, IF_REAL, "Cross-term dependence of b1"), IOP( "pcgsl", BSIM3v32_MOD_PCGSL, IF_REAL, "Cross-term dependence of cgsl"), IOP( "pcgdl", BSIM3v32_MOD_PCGDL, IF_REAL, "Cross-term dependence of cgdl"), IOP( "pckappa", BSIM3v32_MOD_PCKAPPA, IF_REAL, "Cross-term dependence of ckappa"), IOP( "pcf", BSIM3v32_MOD_PCF, IF_REAL, "Cross-term dependence of cf"), IOP( "pclc", BSIM3v32_MOD_PCLC, IF_REAL, "Cross-term dependence of clc"), IOP( "pcle", BSIM3v32_MOD_PCLE, IF_REAL, "Cross-term dependence of cle"), IOP( "palpha0", BSIM3v32_MOD_PALPHA0, IF_REAL, "Cross-term dependence of alpha0"), IOP( "palpha1", BSIM3v32_MOD_PALPHA1, IF_REAL, "Cross-term dependence of alpha1"), IOP( "pbeta0", BSIM3v32_MOD_PBETA0, IF_REAL, "Cross-term dependence of beta0"), IOP( "pvfbcv", BSIM3v32_MOD_PVFBCV, IF_REAL, "Cross-term dependence of vfbcv"), IOP( "pvfb", BSIM3v32_MOD_PVFB, IF_REAL, "Cross-term dependence of vfb"), IOP( "pacde", BSIM3v32_MOD_PACDE, IF_REAL, "Cross-term dependence of acde"), IOP( "pmoin", BSIM3v32_MOD_PMOIN, IF_REAL, "Cross-term dependence of moin"), IOP( "pnoff", BSIM3v32_MOD_PNOFF, IF_REAL, "Cross-term dependence of noff"), IOP( "pvoffcv", BSIM3v32_MOD_PVOFFCV, IF_REAL, "Cross-term dependence of voffcv"), IOP( "noia", BSIM3v32_MOD_NOIA, IF_REAL, "Flicker noise parameter"), IOP( "noib", BSIM3v32_MOD_NOIB, IF_REAL, "Flicker noise parameter"), IOP( "noic", BSIM3v32_MOD_NOIC, IF_REAL, "Flicker noise parameter"), IOP( "em", BSIM3v32_MOD_EM, IF_REAL, "Flicker noise parameter"), IOP( "ef", BSIM3v32_MOD_EF, IF_REAL, "Flicker noise frequency exponent"), IOP( "af", BSIM3v32_MOD_AF, IF_REAL, "Flicker noise exponent"), IOP( "kf", BSIM3v32_MOD_KF, IF_REAL, "Flicker noise coefficient"), IOP("vgs_max", BSIM3v32_MOD_VGS_MAX, IF_REAL, "maximum voltage G-S branch"), IOP("vgd_max", BSIM3v32_MOD_VGD_MAX, IF_REAL, "maximum voltage G-D branch"), IOP("vgb_max", BSIM3v32_MOD_VGB_MAX, IF_REAL, "maximum voltage G-B branch"), IOP("vds_max", BSIM3v32_MOD_VDS_MAX, IF_REAL, "maximum voltage D-S branch"), IOP("vbs_max", BSIM3v32_MOD_VBS_MAX, IF_REAL, "maximum voltage B-S branch"), IOP("vbd_max", BSIM3v32_MOD_VBD_MAX, IF_REAL, "maximum voltage B-D branch"), IOP("vgsr_max", BSIM3v32_MOD_VGSR_MAX, IF_REAL, "maximum voltage G-S branch"), IOP("vgdr_max", BSIM3v32_MOD_VGDR_MAX, IF_REAL, "maximum voltage G-D branch"), IOP("vgbr_max", BSIM3v32_MOD_VGBR_MAX, IF_REAL, "maximum voltage G-B branch"), IOP("vbsr_max", BSIM3v32_MOD_VBSR_MAX, IF_REAL, "maximum voltage B-S branch"), IOP("vbdr_max", BSIM3v32_MOD_VBDR_MAX, IF_REAL, "maximum voltage B-D branch"), IP( "nmos", BSIM3v32_MOD_NMOS, IF_FLAG, "Flag to indicate NMOS"), IP( "pmos", BSIM3v32_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"), }; char *BSIM3v32names[] = { "Drain", "Gate", "Source", "Bulk", "Charge" }; int BSIM3v32nSize = NUMELEMS(BSIM3v32names); int BSIM3v32pTSize = NUMELEMS(BSIM3v32pTable); int BSIM3v32mPTSize = NUMELEMS(BSIM3v32mPTable); int BSIM3v32iSize = sizeof(BSIM3v32instance); int BSIM3v32mSize = sizeof(BSIM3v32model); tmpk8ny_4pz/src/spicelib/devices/bsim3v32/bsim3v32init.h0000644000175000017500000000044013546075722023136 0ustar carstencarsten#ifndef _BSIM3v32INIT_H #define _BSIM3v32INIT_H extern IFparm BSIM3v32pTable[ ]; extern IFparm BSIM3v32mPTable[ ]; extern char *BSIM3v32names[ ]; extern int BSIM3v32pTSize; extern int BSIM3v32mPTSize; extern int BSIM3v32nSize; extern int BSIM3v32iSize; extern int BSIM3v32mSize; #endif tmpk8ny_4pz/src/spicelib/devices/bsim3v32/bsim3v32itf.h0000644000175000017500000000043113546075722022755 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: 1991 JianHui Huang and Min-Chie Jeng. Modified by Paolo Nenzi 2002 File: bsim3itf.h **********/ #ifndef DEV_BSIM3v32 #define DEV_BSIM3v32 SPICEdev *get_bsim3v32_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/bsim3v32/b3v32temp.c0000644000175000017500000014760013546075722022434 0ustar carstencarsten/**** BSIM3v3.2.4, Released by Xuemei Xi 12/21/2001 ****/ /********** * Copyright 2001 Regents of the University of California. All rights reserved. * File: b3temp.c of BSIM3v3.2.4 * Author: 1995 Min-Chie Jeng and Mansun Chan. * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi * Modified by Paolo Nenzi 2002 and Dietmar Warning 2003 **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "bsim3v32def.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" #define Kb 1.3806226e-23 #define KboQ 8.617087e-5 /* Kb / q where q = 1.60219e-19 */ #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define PI 3.141592654 #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define Charge_q 1.60219e-19 /* ARGSUSED */ int BSIM3v32temp (GENmodel *inModel, CKTcircuit *ckt) { BSIM3v32model *model = (BSIM3v32model*) inModel; BSIM3v32instance *here; struct bsim3v32SizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam=NULL; double tmp, tmp1, tmp2, tmp3, Eg, Eg0, ni, T0, T1, T2, T3, T4, T5, Ldrn, Wdrn; double delTemp, Temp, TRatio, Inv_L, Inv_W, Inv_LW, Vtm0, Tnom; double Nvtm, SourceSatCurrent, DrainSatCurrent; int Size_Not_Found, error; /* loop through all the BSIM3v32 device models */ for (; model != NULL; model = BSIM3v32nextModel(model)) { Temp = ckt->CKTtemp; if (model->BSIM3v32bulkJctPotential < 0.1) { model->BSIM3v32bulkJctPotential = 0.1; fprintf(stderr, "Given pb is less than 0.1. Pb is set to 0.1.\n"); } if (model->BSIM3v32sidewallJctPotential < 0.1) { model->BSIM3v32sidewallJctPotential = 0.1; fprintf(stderr, "Given pbsw is less than 0.1. Pbsw is set to 0.1.\n"); } if (model->BSIM3v32GatesidewallJctPotential < 0.1) { model->BSIM3v32GatesidewallJctPotential = 0.1; fprintf(stderr, "Given pbswg is less than 0.1. Pbswg is set to 0.1.\n"); } struct bsim3v32SizeDependParam *p = model->pSizeDependParamKnot; while (p) { struct bsim3v32SizeDependParam *next_p = p->pNext; FREE(p); p = next_p; } model->pSizeDependParamKnot = NULL; pLastKnot = NULL; Tnom = model->BSIM3v32tnom; TRatio = Temp / Tnom; model->BSIM3v32vcrit = CONSTvt0 * log(CONSTvt0 / (CONSTroot2 * 1.0e-14)); model->BSIM3v32factor1 = sqrt(EPSSI / EPSOX * model->BSIM3v32tox); Vtm0 = KboQ * Tnom; Eg0 = 1.16 - 7.02e-4 * Tnom * Tnom / (Tnom + 1108.0); ni = 1.45e10 * (Tnom / 300.15) * sqrt(Tnom / 300.15) * exp(21.5565981 - Eg0 / (2.0 * Vtm0)); model->BSIM3v32vtm = KboQ * Temp; Eg = 1.16 - 7.02e-4 * Temp * Temp / (Temp + 1108.0); if (Temp != Tnom) { T0 = Eg0 / Vtm0 - Eg / model->BSIM3v32vtm + model->BSIM3v32jctTempExponent * log(Temp / Tnom); T1 = exp(T0 / model->BSIM3v32jctEmissionCoeff); model->BSIM3v32jctTempSatCurDensity = model->BSIM3v32jctSatCurDensity * T1; model->BSIM3v32jctSidewallTempSatCurDensity = model->BSIM3v32jctSidewallSatCurDensity * T1; } else { model->BSIM3v32jctTempSatCurDensity = model->BSIM3v32jctSatCurDensity; model->BSIM3v32jctSidewallTempSatCurDensity = model->BSIM3v32jctSidewallSatCurDensity; } if (model->BSIM3v32jctTempSatCurDensity < 0.0) model->BSIM3v32jctTempSatCurDensity = 0.0; if (model->BSIM3v32jctSidewallTempSatCurDensity < 0.0) model->BSIM3v32jctSidewallTempSatCurDensity = 0.0; /* Temperature dependence of D/B and S/B diode capacitance begins */ delTemp = ckt->CKTtemp - model->BSIM3v32tnom; T0 = model->BSIM3v32tcj * delTemp; if (T0 >= -1.0) { /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: model->BSIM3v32unitAreaTempJctCap = model->BSIM3v32unitAreaJctCap * (1.0 + T0); break; case BSIM3v32V322: case BSIM3v32V32: default: model->BSIM3v32unitAreaJctCap *= 1.0 + T0; } } else if (model->BSIM3v32unitAreaJctCap > 0.0) { /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: model->BSIM3v32unitAreaTempJctCap = 0.0; break; case BSIM3v32V322: case BSIM3v32V32: default: model->BSIM3v32unitAreaJctCap = 0.0; } fprintf(stderr, "Temperature effect has caused cj to be negative. Cj is clamped to zero.\n"); } T0 = model->BSIM3v32tcjsw * delTemp; if (T0 >= -1.0) { /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: model->BSIM3v32unitLengthSidewallTempJctCap = model->BSIM3v32unitLengthSidewallJctCap * (1.0 + T0); break; case BSIM3v32V322: case BSIM3v32V32: default: model->BSIM3v32unitLengthSidewallJctCap *= 1.0 + T0; } } else if (model->BSIM3v32unitLengthSidewallJctCap > 0.0) { /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: model->BSIM3v32unitLengthSidewallTempJctCap = 0.0; break; case BSIM3v32V322: case BSIM3v32V32: default: model->BSIM3v32unitLengthSidewallJctCap = 0.0; } fprintf(stderr, "Temperature effect has caused cjsw to be negative. Cjsw is clamped to zero.\n"); } T0 = model->BSIM3v32tcjswg * delTemp; if (T0 >= -1.0) { /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: model->BSIM3v32unitLengthGateSidewallTempJctCap = model->BSIM3v32unitLengthGateSidewallJctCap * (1.0 + T0); break; case BSIM3v32V322: case BSIM3v32V32: default: model->BSIM3v32unitLengthGateSidewallJctCap *= 1.0 + T0; } } else if (model->BSIM3v32unitLengthGateSidewallJctCap > 0.0) { /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: model->BSIM3v32unitLengthGateSidewallTempJctCap = 0.0; break; case BSIM3v32V322: case BSIM3v32V32: default: model->BSIM3v32unitLengthGateSidewallJctCap = 0.0; } fprintf(stderr, "Temperature effect has caused cjswg to be negative. Cjswg is clamped to zero.\n"); } model->BSIM3v32PhiB = model->BSIM3v32bulkJctPotential - model->BSIM3v32tpb * delTemp; if (model->BSIM3v32PhiB < 0.01) { model->BSIM3v32PhiB = 0.01; fprintf(stderr, "Temperature effect has caused pb to be less than 0.01. Pb is clamped to 0.01.\n"); } model->BSIM3v32PhiBSW = model->BSIM3v32sidewallJctPotential - model->BSIM3v32tpbsw * delTemp; if (model->BSIM3v32PhiBSW <= 0.01) { model->BSIM3v32PhiBSW = 0.01; fprintf(stderr, "Temperature effect has caused pbsw to be less than 0.01. Pbsw is clamped to 0.01.\n"); } model->BSIM3v32PhiBSWG = model->BSIM3v32GatesidewallJctPotential - model->BSIM3v32tpbswg * delTemp; if (model->BSIM3v32PhiBSWG <= 0.01) { model->BSIM3v32PhiBSWG = 0.01; fprintf(stderr, "Temperature effect has caused pbswg to be less than 0.01. Pbswg is clamped to 0.01.\n"); } /* End of junction capacitance */ /* loop through all the instances of the model */ /* MCJ: Length and Width not initialized */ for (here = BSIM3v32instances(model); here != NULL; here = BSIM3v32nextInstance(here)) { pSizeDependParamKnot = model->pSizeDependParamKnot; Size_Not_Found = 1; while ((pSizeDependParamKnot != NULL) && Size_Not_Found) { if ((here->BSIM3v32l == pSizeDependParamKnot->Length) && (here->BSIM3v32w == pSizeDependParamKnot->Width)) { Size_Not_Found = 0; here->pParam = pSizeDependParamKnot; if (model->BSIM3v32intVersion > BSIM3v32V322) { pParam = here->pParam; /*bug-fix */ } } else { pLastKnot = pSizeDependParamKnot; pSizeDependParamKnot = pSizeDependParamKnot->pNext; } } if (Size_Not_Found) { pParam = TMALLOC(struct bsim3v32SizeDependParam, 1); if (pLastKnot == NULL) model->pSizeDependParamKnot = pParam; else pLastKnot->pNext = pParam; pParam->pNext = NULL; here->pParam = pParam; Ldrn = here->BSIM3v32l; Wdrn = here->BSIM3v32w; pParam->Length = Ldrn; pParam->Width = Wdrn; T0 = pow(Ldrn, model->BSIM3v32Lln); T1 = pow(Wdrn, model->BSIM3v32Lwn); tmp1 = model->BSIM3v32Ll / T0 + model->BSIM3v32Lw / T1 + model->BSIM3v32Lwl / (T0 * T1); pParam->BSIM3v32dl = model->BSIM3v32Lint + tmp1; tmp2 = model->BSIM3v32Llc / T0 + model->BSIM3v32Lwc / T1 + model->BSIM3v32Lwlc / (T0 * T1); pParam->BSIM3v32dlc = model->BSIM3v32dlc + tmp2; T2 = pow(Ldrn, model->BSIM3v32Wln); T3 = pow(Wdrn, model->BSIM3v32Wwn); tmp1 = model->BSIM3v32Wl / T2 + model->BSIM3v32Ww / T3 + model->BSIM3v32Wwl / (T2 * T3); pParam->BSIM3v32dw = model->BSIM3v32Wint + tmp1; tmp2 = model->BSIM3v32Wlc / T2 + model->BSIM3v32Wwc / T3 + model->BSIM3v32Wwlc / (T2 * T3); pParam->BSIM3v32dwc = model->BSIM3v32dwc + tmp2; pParam->BSIM3v32leff = here->BSIM3v32l + model->BSIM3v32xl - 2.0 * pParam->BSIM3v32dl; if (pParam->BSIM3v32leff <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM3v32: mosfet %s, model %s: Effective channel length <= 0", model->BSIM3v32modName, here->BSIM3v32name); return(E_BADPARM); } pParam->BSIM3v32weff = here->BSIM3v32w + model->BSIM3v32xw - 2.0 * pParam->BSIM3v32dw; if (pParam->BSIM3v32weff <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM3v32: mosfet %s, model %s: Effective channel width <= 0", model->BSIM3v32modName, here->BSIM3v32name); return(E_BADPARM); } pParam->BSIM3v32leffCV = here->BSIM3v32l + model->BSIM3v32xl - 2.0 * pParam->BSIM3v32dlc; if (pParam->BSIM3v32leffCV <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM3v32: mosfet %s, model %s: Effective channel length for C-V <= 0", model->BSIM3v32modName, here->BSIM3v32name); return(E_BADPARM); } pParam->BSIM3v32weffCV = here->BSIM3v32w + model->BSIM3v32xw - 2.0 * pParam->BSIM3v32dwc; if (pParam->BSIM3v32weffCV <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM3v32: mosfet %s, model %s: Effective channel width for C-V <= 0", model->BSIM3v32modName, here->BSIM3v32name); return(E_BADPARM); } if (model->BSIM3v32binUnit == 1) { Inv_L = 1.0e-6 / pParam->BSIM3v32leff; Inv_W = 1.0e-6 / pParam->BSIM3v32weff; Inv_LW = 1.0e-12 / (pParam->BSIM3v32leff * pParam->BSIM3v32weff); } else { Inv_L = 1.0 / pParam->BSIM3v32leff; Inv_W = 1.0 / pParam->BSIM3v32weff; Inv_LW = 1.0 / (pParam->BSIM3v32leff * pParam->BSIM3v32weff); } pParam->BSIM3v32cdsc = model->BSIM3v32cdsc + model->BSIM3v32lcdsc * Inv_L + model->BSIM3v32wcdsc * Inv_W + model->BSIM3v32pcdsc * Inv_LW; pParam->BSIM3v32cdscb = model->BSIM3v32cdscb + model->BSIM3v32lcdscb * Inv_L + model->BSIM3v32wcdscb * Inv_W + model->BSIM3v32pcdscb * Inv_LW; pParam->BSIM3v32cdscd = model->BSIM3v32cdscd + model->BSIM3v32lcdscd * Inv_L + model->BSIM3v32wcdscd * Inv_W + model->BSIM3v32pcdscd * Inv_LW; pParam->BSIM3v32cit = model->BSIM3v32cit + model->BSIM3v32lcit * Inv_L + model->BSIM3v32wcit * Inv_W + model->BSIM3v32pcit * Inv_LW; pParam->BSIM3v32nfactor = model->BSIM3v32nfactor + model->BSIM3v32lnfactor * Inv_L + model->BSIM3v32wnfactor * Inv_W + model->BSIM3v32pnfactor * Inv_LW; pParam->BSIM3v32xj = model->BSIM3v32xj + model->BSIM3v32lxj * Inv_L + model->BSIM3v32wxj * Inv_W + model->BSIM3v32pxj * Inv_LW; pParam->BSIM3v32vsat = model->BSIM3v32vsat + model->BSIM3v32lvsat * Inv_L + model->BSIM3v32wvsat * Inv_W + model->BSIM3v32pvsat * Inv_LW; pParam->BSIM3v32at = model->BSIM3v32at + model->BSIM3v32lat * Inv_L + model->BSIM3v32wat * Inv_W + model->BSIM3v32pat * Inv_LW; pParam->BSIM3v32a0 = model->BSIM3v32a0 + model->BSIM3v32la0 * Inv_L + model->BSIM3v32wa0 * Inv_W + model->BSIM3v32pa0 * Inv_LW; pParam->BSIM3v32ags = model->BSIM3v32ags + model->BSIM3v32lags * Inv_L + model->BSIM3v32wags * Inv_W + model->BSIM3v32pags * Inv_LW; pParam->BSIM3v32a1 = model->BSIM3v32a1 + model->BSIM3v32la1 * Inv_L + model->BSIM3v32wa1 * Inv_W + model->BSIM3v32pa1 * Inv_LW; pParam->BSIM3v32a2 = model->BSIM3v32a2 + model->BSIM3v32la2 * Inv_L + model->BSIM3v32wa2 * Inv_W + model->BSIM3v32pa2 * Inv_LW; pParam->BSIM3v32keta = model->BSIM3v32keta + model->BSIM3v32lketa * Inv_L + model->BSIM3v32wketa * Inv_W + model->BSIM3v32pketa * Inv_LW; pParam->BSIM3v32nsub = model->BSIM3v32nsub + model->BSIM3v32lnsub * Inv_L + model->BSIM3v32wnsub * Inv_W + model->BSIM3v32pnsub * Inv_LW; pParam->BSIM3v32npeak = model->BSIM3v32npeak + model->BSIM3v32lnpeak * Inv_L + model->BSIM3v32wnpeak * Inv_W + model->BSIM3v32pnpeak * Inv_LW; pParam->BSIM3v32ngate = model->BSIM3v32ngate + model->BSIM3v32lngate * Inv_L + model->BSIM3v32wngate * Inv_W + model->BSIM3v32pngate * Inv_LW; pParam->BSIM3v32gamma1 = model->BSIM3v32gamma1 + model->BSIM3v32lgamma1 * Inv_L + model->BSIM3v32wgamma1 * Inv_W + model->BSIM3v32pgamma1 * Inv_LW; pParam->BSIM3v32gamma2 = model->BSIM3v32gamma2 + model->BSIM3v32lgamma2 * Inv_L + model->BSIM3v32wgamma2 * Inv_W + model->BSIM3v32pgamma2 * Inv_LW; pParam->BSIM3v32vbx = model->BSIM3v32vbx + model->BSIM3v32lvbx * Inv_L + model->BSIM3v32wvbx * Inv_W + model->BSIM3v32pvbx * Inv_LW; pParam->BSIM3v32vbm = model->BSIM3v32vbm + model->BSIM3v32lvbm * Inv_L + model->BSIM3v32wvbm * Inv_W + model->BSIM3v32pvbm * Inv_LW; pParam->BSIM3v32xt = model->BSIM3v32xt + model->BSIM3v32lxt * Inv_L + model->BSIM3v32wxt * Inv_W + model->BSIM3v32pxt * Inv_LW; pParam->BSIM3v32vfb = model->BSIM3v32vfb + model->BSIM3v32lvfb * Inv_L + model->BSIM3v32wvfb * Inv_W + model->BSIM3v32pvfb * Inv_LW; pParam->BSIM3v32k1 = model->BSIM3v32k1 + model->BSIM3v32lk1 * Inv_L + model->BSIM3v32wk1 * Inv_W + model->BSIM3v32pk1 * Inv_LW; pParam->BSIM3v32kt1 = model->BSIM3v32kt1 + model->BSIM3v32lkt1 * Inv_L + model->BSIM3v32wkt1 * Inv_W + model->BSIM3v32pkt1 * Inv_LW; pParam->BSIM3v32kt1l = model->BSIM3v32kt1l + model->BSIM3v32lkt1l * Inv_L + model->BSIM3v32wkt1l * Inv_W + model->BSIM3v32pkt1l * Inv_LW; pParam->BSIM3v32k2 = model->BSIM3v32k2 + model->BSIM3v32lk2 * Inv_L + model->BSIM3v32wk2 * Inv_W + model->BSIM3v32pk2 * Inv_LW; pParam->BSIM3v32kt2 = model->BSIM3v32kt2 + model->BSIM3v32lkt2 * Inv_L + model->BSIM3v32wkt2 * Inv_W + model->BSIM3v32pkt2 * Inv_LW; pParam->BSIM3v32k3 = model->BSIM3v32k3 + model->BSIM3v32lk3 * Inv_L + model->BSIM3v32wk3 * Inv_W + model->BSIM3v32pk3 * Inv_LW; pParam->BSIM3v32k3b = model->BSIM3v32k3b + model->BSIM3v32lk3b * Inv_L + model->BSIM3v32wk3b * Inv_W + model->BSIM3v32pk3b * Inv_LW; pParam->BSIM3v32w0 = model->BSIM3v32w0 + model->BSIM3v32lw0 * Inv_L + model->BSIM3v32ww0 * Inv_W + model->BSIM3v32pw0 * Inv_LW; pParam->BSIM3v32nlx = model->BSIM3v32nlx + model->BSIM3v32lnlx * Inv_L + model->BSIM3v32wnlx * Inv_W + model->BSIM3v32pnlx * Inv_LW; pParam->BSIM3v32dvt0 = model->BSIM3v32dvt0 + model->BSIM3v32ldvt0 * Inv_L + model->BSIM3v32wdvt0 * Inv_W + model->BSIM3v32pdvt0 * Inv_LW; pParam->BSIM3v32dvt1 = model->BSIM3v32dvt1 + model->BSIM3v32ldvt1 * Inv_L + model->BSIM3v32wdvt1 * Inv_W + model->BSIM3v32pdvt1 * Inv_LW; pParam->BSIM3v32dvt2 = model->BSIM3v32dvt2 + model->BSIM3v32ldvt2 * Inv_L + model->BSIM3v32wdvt2 * Inv_W + model->BSIM3v32pdvt2 * Inv_LW; pParam->BSIM3v32dvt0w = model->BSIM3v32dvt0w + model->BSIM3v32ldvt0w * Inv_L + model->BSIM3v32wdvt0w * Inv_W + model->BSIM3v32pdvt0w * Inv_LW; pParam->BSIM3v32dvt1w = model->BSIM3v32dvt1w + model->BSIM3v32ldvt1w * Inv_L + model->BSIM3v32wdvt1w * Inv_W + model->BSIM3v32pdvt1w * Inv_LW; pParam->BSIM3v32dvt2w = model->BSIM3v32dvt2w + model->BSIM3v32ldvt2w * Inv_L + model->BSIM3v32wdvt2w * Inv_W + model->BSIM3v32pdvt2w * Inv_LW; pParam->BSIM3v32drout = model->BSIM3v32drout + model->BSIM3v32ldrout * Inv_L + model->BSIM3v32wdrout * Inv_W + model->BSIM3v32pdrout * Inv_LW; pParam->BSIM3v32dsub = model->BSIM3v32dsub + model->BSIM3v32ldsub * Inv_L + model->BSIM3v32wdsub * Inv_W + model->BSIM3v32pdsub * Inv_LW; pParam->BSIM3v32vth0 = model->BSIM3v32vth0 + model->BSIM3v32lvth0 * Inv_L + model->BSIM3v32wvth0 * Inv_W + model->BSIM3v32pvth0 * Inv_LW; pParam->BSIM3v32ua = model->BSIM3v32ua + model->BSIM3v32lua * Inv_L + model->BSIM3v32wua * Inv_W + model->BSIM3v32pua * Inv_LW; pParam->BSIM3v32ua1 = model->BSIM3v32ua1 + model->BSIM3v32lua1 * Inv_L + model->BSIM3v32wua1 * Inv_W + model->BSIM3v32pua1 * Inv_LW; pParam->BSIM3v32ub = model->BSIM3v32ub + model->BSIM3v32lub * Inv_L + model->BSIM3v32wub * Inv_W + model->BSIM3v32pub * Inv_LW; pParam->BSIM3v32ub1 = model->BSIM3v32ub1 + model->BSIM3v32lub1 * Inv_L + model->BSIM3v32wub1 * Inv_W + model->BSIM3v32pub1 * Inv_LW; pParam->BSIM3v32uc = model->BSIM3v32uc + model->BSIM3v32luc * Inv_L + model->BSIM3v32wuc * Inv_W + model->BSIM3v32puc * Inv_LW; pParam->BSIM3v32uc1 = model->BSIM3v32uc1 + model->BSIM3v32luc1 * Inv_L + model->BSIM3v32wuc1 * Inv_W + model->BSIM3v32puc1 * Inv_LW; pParam->BSIM3v32u0 = model->BSIM3v32u0 + model->BSIM3v32lu0 * Inv_L + model->BSIM3v32wu0 * Inv_W + model->BSIM3v32pu0 * Inv_LW; pParam->BSIM3v32ute = model->BSIM3v32ute + model->BSIM3v32lute * Inv_L + model->BSIM3v32wute * Inv_W + model->BSIM3v32pute * Inv_LW; pParam->BSIM3v32voff = model->BSIM3v32voff + model->BSIM3v32lvoff * Inv_L + model->BSIM3v32wvoff * Inv_W + model->BSIM3v32pvoff * Inv_LW; pParam->BSIM3v32delta = model->BSIM3v32delta + model->BSIM3v32ldelta * Inv_L + model->BSIM3v32wdelta * Inv_W + model->BSIM3v32pdelta * Inv_LW; pParam->BSIM3v32rdsw = model->BSIM3v32rdsw + model->BSIM3v32lrdsw * Inv_L + model->BSIM3v32wrdsw * Inv_W + model->BSIM3v32prdsw * Inv_LW; pParam->BSIM3v32prwg = model->BSIM3v32prwg + model->BSIM3v32lprwg * Inv_L + model->BSIM3v32wprwg * Inv_W + model->BSIM3v32pprwg * Inv_LW; pParam->BSIM3v32prwb = model->BSIM3v32prwb + model->BSIM3v32lprwb * Inv_L + model->BSIM3v32wprwb * Inv_W + model->BSIM3v32pprwb * Inv_LW; pParam->BSIM3v32prt = model->BSIM3v32prt + model->BSIM3v32lprt * Inv_L + model->BSIM3v32wprt * Inv_W + model->BSIM3v32pprt * Inv_LW; pParam->BSIM3v32eta0 = model->BSIM3v32eta0 + model->BSIM3v32leta0 * Inv_L + model->BSIM3v32weta0 * Inv_W + model->BSIM3v32peta0 * Inv_LW; pParam->BSIM3v32etab = model->BSIM3v32etab + model->BSIM3v32letab * Inv_L + model->BSIM3v32wetab * Inv_W + model->BSIM3v32petab * Inv_LW; pParam->BSIM3v32pclm = model->BSIM3v32pclm + model->BSIM3v32lpclm * Inv_L + model->BSIM3v32wpclm * Inv_W + model->BSIM3v32ppclm * Inv_LW; pParam->BSIM3v32pdibl1 = model->BSIM3v32pdibl1 + model->BSIM3v32lpdibl1 * Inv_L + model->BSIM3v32wpdibl1 * Inv_W + model->BSIM3v32ppdibl1 * Inv_LW; pParam->BSIM3v32pdibl2 = model->BSIM3v32pdibl2 + model->BSIM3v32lpdibl2 * Inv_L + model->BSIM3v32wpdibl2 * Inv_W + model->BSIM3v32ppdibl2 * Inv_LW; pParam->BSIM3v32pdiblb = model->BSIM3v32pdiblb + model->BSIM3v32lpdiblb * Inv_L + model->BSIM3v32wpdiblb * Inv_W + model->BSIM3v32ppdiblb * Inv_LW; pParam->BSIM3v32pscbe1 = model->BSIM3v32pscbe1 + model->BSIM3v32lpscbe1 * Inv_L + model->BSIM3v32wpscbe1 * Inv_W + model->BSIM3v32ppscbe1 * Inv_LW; pParam->BSIM3v32pscbe2 = model->BSIM3v32pscbe2 + model->BSIM3v32lpscbe2 * Inv_L + model->BSIM3v32wpscbe2 * Inv_W + model->BSIM3v32ppscbe2 * Inv_LW; pParam->BSIM3v32pvag = model->BSIM3v32pvag + model->BSIM3v32lpvag * Inv_L + model->BSIM3v32wpvag * Inv_W + model->BSIM3v32ppvag * Inv_LW; pParam->BSIM3v32wr = model->BSIM3v32wr + model->BSIM3v32lwr * Inv_L + model->BSIM3v32wwr * Inv_W + model->BSIM3v32pwr * Inv_LW; pParam->BSIM3v32dwg = model->BSIM3v32dwg + model->BSIM3v32ldwg * Inv_L + model->BSIM3v32wdwg * Inv_W + model->BSIM3v32pdwg * Inv_LW; pParam->BSIM3v32dwb = model->BSIM3v32dwb + model->BSIM3v32ldwb * Inv_L + model->BSIM3v32wdwb * Inv_W + model->BSIM3v32pdwb * Inv_LW; pParam->BSIM3v32b0 = model->BSIM3v32b0 + model->BSIM3v32lb0 * Inv_L + model->BSIM3v32wb0 * Inv_W + model->BSIM3v32pb0 * Inv_LW; pParam->BSIM3v32b1 = model->BSIM3v32b1 + model->BSIM3v32lb1 * Inv_L + model->BSIM3v32wb1 * Inv_W + model->BSIM3v32pb1 * Inv_LW; pParam->BSIM3v32alpha0 = model->BSIM3v32alpha0 + model->BSIM3v32lalpha0 * Inv_L + model->BSIM3v32walpha0 * Inv_W + model->BSIM3v32palpha0 * Inv_LW; pParam->BSIM3v32alpha1 = model->BSIM3v32alpha1 + model->BSIM3v32lalpha1 * Inv_L + model->BSIM3v32walpha1 * Inv_W + model->BSIM3v32palpha1 * Inv_LW; pParam->BSIM3v32beta0 = model->BSIM3v32beta0 + model->BSIM3v32lbeta0 * Inv_L + model->BSIM3v32wbeta0 * Inv_W + model->BSIM3v32pbeta0 * Inv_LW; /* CV model */ pParam->BSIM3v32elm = model->BSIM3v32elm + model->BSIM3v32lelm * Inv_L + model->BSIM3v32welm * Inv_W + model->BSIM3v32pelm * Inv_LW; pParam->BSIM3v32cgsl = model->BSIM3v32cgsl + model->BSIM3v32lcgsl * Inv_L + model->BSIM3v32wcgsl * Inv_W + model->BSIM3v32pcgsl * Inv_LW; pParam->BSIM3v32cgdl = model->BSIM3v32cgdl + model->BSIM3v32lcgdl * Inv_L + model->BSIM3v32wcgdl * Inv_W + model->BSIM3v32pcgdl * Inv_LW; pParam->BSIM3v32ckappa = model->BSIM3v32ckappa + model->BSIM3v32lckappa * Inv_L + model->BSIM3v32wckappa * Inv_W + model->BSIM3v32pckappa * Inv_LW; pParam->BSIM3v32cf = model->BSIM3v32cf + model->BSIM3v32lcf * Inv_L + model->BSIM3v32wcf * Inv_W + model->BSIM3v32pcf * Inv_LW; pParam->BSIM3v32clc = model->BSIM3v32clc + model->BSIM3v32lclc * Inv_L + model->BSIM3v32wclc * Inv_W + model->BSIM3v32pclc * Inv_LW; pParam->BSIM3v32cle = model->BSIM3v32cle + model->BSIM3v32lcle * Inv_L + model->BSIM3v32wcle * Inv_W + model->BSIM3v32pcle * Inv_LW; pParam->BSIM3v32vfbcv = model->BSIM3v32vfbcv + model->BSIM3v32lvfbcv * Inv_L + model->BSIM3v32wvfbcv * Inv_W + model->BSIM3v32pvfbcv * Inv_LW; pParam->BSIM3v32acde = model->BSIM3v32acde + model->BSIM3v32lacde * Inv_L + model->BSIM3v32wacde * Inv_W + model->BSIM3v32pacde * Inv_LW; pParam->BSIM3v32moin = model->BSIM3v32moin + model->BSIM3v32lmoin * Inv_L + model->BSIM3v32wmoin * Inv_W + model->BSIM3v32pmoin * Inv_LW; pParam->BSIM3v32noff = model->BSIM3v32noff + model->BSIM3v32lnoff * Inv_L + model->BSIM3v32wnoff * Inv_W + model->BSIM3v32pnoff * Inv_LW; pParam->BSIM3v32voffcv = model->BSIM3v32voffcv + model->BSIM3v32lvoffcv * Inv_L + model->BSIM3v32wvoffcv * Inv_W + model->BSIM3v32pvoffcv * Inv_LW; pParam->BSIM3v32abulkCVfactor = 1.0 + pow((pParam->BSIM3v32clc / pParam->BSIM3v32leffCV), pParam->BSIM3v32cle); T0 = (TRatio - 1.0); pParam->BSIM3v32ua = pParam->BSIM3v32ua + pParam->BSIM3v32ua1 * T0; pParam->BSIM3v32ub = pParam->BSIM3v32ub + pParam->BSIM3v32ub1 * T0; pParam->BSIM3v32uc = pParam->BSIM3v32uc + pParam->BSIM3v32uc1 * T0; if (pParam->BSIM3v32u0 > 1.0) pParam->BSIM3v32u0 = pParam->BSIM3v32u0 / 1.0e4; pParam->BSIM3v32u0temp = pParam->BSIM3v32u0 * pow(TRatio, pParam->BSIM3v32ute); pParam->BSIM3v32vsattemp = pParam->BSIM3v32vsat - pParam->BSIM3v32at * T0; pParam->BSIM3v32rds0 = (pParam->BSIM3v32rdsw + pParam->BSIM3v32prt * T0) / pow(pParam->BSIM3v32weff * 1E6, pParam->BSIM3v32wr); if (BSIM3v32checkModel(model, here, ckt)) { SPfrontEnd->IFerrorf (ERR_FATAL, "Fatal error(s) detected during BSIM3v32V3.2 parameter checking for %s in model %s", model->BSIM3v32modName, here->BSIM3v32name); return(E_BADPARM); } pParam->BSIM3v32cgdo = (model->BSIM3v32cgdo + pParam->BSIM3v32cf) * pParam->BSIM3v32weffCV; pParam->BSIM3v32cgso = (model->BSIM3v32cgso + pParam->BSIM3v32cf) * pParam->BSIM3v32weffCV; pParam->BSIM3v32cgbo = model->BSIM3v32cgbo * pParam->BSIM3v32leffCV; T0 = pParam->BSIM3v32leffCV * pParam->BSIM3v32leffCV; pParam->BSIM3v32tconst = pParam->BSIM3v32u0temp * pParam->BSIM3v32elm / (model->BSIM3v32cox * pParam->BSIM3v32weffCV * pParam->BSIM3v32leffCV * T0); if (!model->BSIM3v32npeakGiven && model->BSIM3v32gamma1Given) { T0 = pParam->BSIM3v32gamma1 * model->BSIM3v32cox; pParam->BSIM3v32npeak = 3.021E22 * T0 * T0; } pParam->BSIM3v32phi = 2.0 * Vtm0 * log(pParam->BSIM3v32npeak / ni); pParam->BSIM3v32sqrtPhi = sqrt(pParam->BSIM3v32phi); pParam->BSIM3v32phis3 = pParam->BSIM3v32sqrtPhi * pParam->BSIM3v32phi; pParam->BSIM3v32Xdep0 = sqrt(2.0 * EPSSI / (Charge_q * pParam->BSIM3v32npeak * 1.0e6)) * pParam->BSIM3v32sqrtPhi; pParam->BSIM3v32sqrtXdep0 = sqrt(pParam->BSIM3v32Xdep0); pParam->BSIM3v32litl = sqrt(3.0 * pParam->BSIM3v32xj * model->BSIM3v32tox); pParam->BSIM3v32vbi = Vtm0 * log(1.0e20 * pParam->BSIM3v32npeak / (ni * ni)); pParam->BSIM3v32cdep0 = sqrt(Charge_q * EPSSI * pParam->BSIM3v32npeak * 1.0e6 / 2.0 / pParam->BSIM3v32phi); pParam->BSIM3v32ldeb = sqrt(EPSSI * Vtm0 / (Charge_q * pParam->BSIM3v32npeak * 1.0e6)) / 3.0; pParam->BSIM3v32acde *= pow((pParam->BSIM3v32npeak / 2.0e16), -0.25); if (model->BSIM3v32k1Given || model->BSIM3v32k2Given) { if (!model->BSIM3v32k1Given) { if ((!ckt->CKTcurJob) || (ckt->CKTcurJob->JOBtype < 9)) /* don't print in sensitivity */ fprintf(stdout, "Warning: k1 should be specified with k2.\n"); pParam->BSIM3v32k1 = 0.53; } if (!model->BSIM3v32k2Given) { if ((!ckt->CKTcurJob) || (ckt->CKTcurJob->JOBtype < 9)) /* don't print in sensitivity */ fprintf(stdout, "Warning: k2 should be specified with k1.\n"); pParam->BSIM3v32k2 = -0.0186; } if ((!ckt->CKTcurJob) || (ckt->CKTcurJob->JOBtype < 9)) { /* don't print in sensitivity */ if (model->BSIM3v32nsubGiven) fprintf(stdout, "Warning: nsub is ignored because k1 or k2 is given.\n"); if (model->BSIM3v32xtGiven) fprintf(stdout, "Warning: xt is ignored because k1 or k2 is given.\n"); if (model->BSIM3v32vbxGiven) fprintf(stdout, "Warning: vbx is ignored because k1 or k2 is given.\n"); if (model->BSIM3v32gamma1Given) fprintf(stdout, "Warning: gamma1 is ignored because k1 or k2 is given.\n"); if (model->BSIM3v32gamma2Given) fprintf(stdout, "Warning: gamma2 is ignored because k1 or k2 is given.\n"); } } else { if (!model->BSIM3v32vbxGiven) pParam->BSIM3v32vbx = pParam->BSIM3v32phi - 7.7348e-4 * pParam->BSIM3v32npeak * pParam->BSIM3v32xt * pParam->BSIM3v32xt; if (pParam->BSIM3v32vbx > 0.0) pParam->BSIM3v32vbx = -pParam->BSIM3v32vbx; if (pParam->BSIM3v32vbm > 0.0) pParam->BSIM3v32vbm = -pParam->BSIM3v32vbm; if (!model->BSIM3v32gamma1Given) pParam->BSIM3v32gamma1 = 5.753e-12 * sqrt(pParam->BSIM3v32npeak) / model->BSIM3v32cox; if (!model->BSIM3v32gamma2Given) pParam->BSIM3v32gamma2 = 5.753e-12 * sqrt(pParam->BSIM3v32nsub) / model->BSIM3v32cox; T0 = pParam->BSIM3v32gamma1 - pParam->BSIM3v32gamma2; T1 = sqrt(pParam->BSIM3v32phi - pParam->BSIM3v32vbx) - pParam->BSIM3v32sqrtPhi; T2 = sqrt(pParam->BSIM3v32phi * (pParam->BSIM3v32phi - pParam->BSIM3v32vbm)) - pParam->BSIM3v32phi; pParam->BSIM3v32k2 = T0 * T1 / (2.0 * T2 + pParam->BSIM3v32vbm); pParam->BSIM3v32k1 = pParam->BSIM3v32gamma2 - 2.0 * pParam->BSIM3v32k2 * sqrt(pParam->BSIM3v32phi - pParam->BSIM3v32vbm); } if (pParam->BSIM3v32k2 < 0.0) { T0 = 0.5 * pParam->BSIM3v32k1 / pParam->BSIM3v32k2; pParam->BSIM3v32vbsc = 0.9 * (pParam->BSIM3v32phi - T0 * T0); if (pParam->BSIM3v32vbsc > -3.0) pParam->BSIM3v32vbsc = -3.0; else if (pParam->BSIM3v32vbsc < -30.0) pParam->BSIM3v32vbsc = -30.0; } else { pParam->BSIM3v32vbsc = -30.0; } if (pParam->BSIM3v32vbsc > pParam->BSIM3v32vbm) pParam->BSIM3v32vbsc = pParam->BSIM3v32vbm; if (!model->BSIM3v32vfbGiven) { if (model->BSIM3v32vth0Given) { pParam->BSIM3v32vfb = model->BSIM3v32type * pParam->BSIM3v32vth0 - pParam->BSIM3v32phi - pParam->BSIM3v32k1 * pParam->BSIM3v32sqrtPhi; } else { pParam->BSIM3v32vfb = -1.0; } } if (!model->BSIM3v32vth0Given) { pParam->BSIM3v32vth0 = model->BSIM3v32type * (pParam->BSIM3v32vfb + pParam->BSIM3v32phi + pParam->BSIM3v32k1 * pParam->BSIM3v32sqrtPhi); } pParam->BSIM3v32k1ox = pParam->BSIM3v32k1 * model->BSIM3v32tox / model->BSIM3v32toxm; pParam->BSIM3v32k2ox = pParam->BSIM3v32k2 * model->BSIM3v32tox / model->BSIM3v32toxm; T1 = sqrt(EPSSI / EPSOX * model->BSIM3v32tox * pParam->BSIM3v32Xdep0); T0 = exp(-0.5 * pParam->BSIM3v32dsub * pParam->BSIM3v32leff / T1); pParam->BSIM3v32theta0vb0 = (T0 + 2.0 * T0 * T0); T0 = exp(-0.5 * pParam->BSIM3v32drout * pParam->BSIM3v32leff / T1); T2 = (T0 + 2.0 * T0 * T0); pParam->BSIM3v32thetaRout = pParam->BSIM3v32pdibl1 * T2 + pParam->BSIM3v32pdibl2; tmp = sqrt(pParam->BSIM3v32Xdep0); tmp1 = pParam->BSIM3v32vbi - pParam->BSIM3v32phi; tmp2 = model->BSIM3v32factor1 * tmp; T0 = -0.5 * pParam->BSIM3v32dvt1w * pParam->BSIM3v32weff * pParam->BSIM3v32leff / tmp2; if (T0 > -EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 * (1.0 + 2.0 * T1); } else { T1 = MIN_EXP; T2 = T1 * (1.0 + 2.0 * T1); } T0 = pParam->BSIM3v32dvt0w * T2; T2 = T0 * tmp1; T0 = -0.5 * pParam->BSIM3v32dvt1 * pParam->BSIM3v32leff / tmp2; if (T0 > -EXP_THRESHOLD) { T1 = exp(T0); T3 = T1 * (1.0 + 2.0 * T1); } else { T1 = MIN_EXP; T3 = T1 * (1.0 + 2.0 * T1); } T3 = pParam->BSIM3v32dvt0 * T3 * tmp1; T4 = model->BSIM3v32tox * pParam->BSIM3v32phi / (pParam->BSIM3v32weff + pParam->BSIM3v32w0); T0 = sqrt(1.0 + pParam->BSIM3v32nlx / pParam->BSIM3v32leff); T5 = pParam->BSIM3v32k1ox * (T0 - 1.0) * pParam->BSIM3v32sqrtPhi + (pParam->BSIM3v32kt1 + pParam->BSIM3v32kt1l / pParam->BSIM3v32leff) * (TRatio - 1.0); tmp3 = model->BSIM3v32type * pParam->BSIM3v32vth0 - T2 - T3 + pParam->BSIM3v32k3 * T4 + T5; pParam->BSIM3v32vfbzb = tmp3 - pParam->BSIM3v32phi - pParam->BSIM3v32k1 * pParam->BSIM3v32sqrtPhi; /* End of vfbzb */ } /* adding delvto */ here->BSIM3v32vth0 = pParam->BSIM3v32vth0 + here->BSIM3v32delvto; here->BSIM3v32vfb = pParam->BSIM3v32vfb + model->BSIM3v32type * here->BSIM3v32delvto; here->BSIM3v32vfbzb = pParam->BSIM3v32vfbzb + model->BSIM3v32type * here->BSIM3v32delvto; /* low field mobility multiplier */ here->BSIM3v32u0temp = pParam->BSIM3v32u0temp * here->BSIM3v32mulu0; here->BSIM3v32tconst = here->BSIM3v32u0temp * pParam->BSIM3v32elm / (model->BSIM3v32cox * pParam->BSIM3v32weffCV * pParam->BSIM3v32leffCV * T0); /* process source/drain series resistance */ /* ACM model */ double DrainResistance, SourceResistance; if (model->BSIM3v32acmMod == 0) { DrainResistance = model->BSIM3v32sheetResistance * here->BSIM3v32drainSquares; SourceResistance = model->BSIM3v32sheetResistance * here->BSIM3v32sourceSquares; } else /* ACM > 0 */ { error = ACM_SourceDrainResistances( model->BSIM3v32acmMod, model->BSIM3v32ld, model->BSIM3v32ldif, model->BSIM3v32hdif, model->BSIM3v32wmlt, here->BSIM3v32w, model->BSIM3v32xw, model->BSIM3v32sheetResistance, here->BSIM3v32drainSquaresGiven, model->BSIM3v32rd, model->BSIM3v32rdc, here->BSIM3v32drainSquares, here->BSIM3v32sourceSquaresGiven, model->BSIM3v32rs, model->BSIM3v32rsc, here->BSIM3v32sourceSquares, &DrainResistance, &SourceResistance ); if (error) return(error); } if (DrainResistance > 0.0) here->BSIM3v32drainConductance = 1.0 / DrainResistance; else here->BSIM3v32drainConductance = 0.0; if (SourceResistance > 0.0) here->BSIM3v32sourceConductance = 1.0 / SourceResistance; else here->BSIM3v32sourceConductance = 0.0; here->BSIM3v32cgso = pParam->BSIM3v32cgso; here->BSIM3v32cgdo = pParam->BSIM3v32cgdo; Nvtm = model->BSIM3v32vtm * model->BSIM3v32jctEmissionCoeff; if (model->BSIM3v32acmMod == 0) { if ((here->BSIM3v32sourceArea <= 0.0) && (here->BSIM3v32sourcePerimeter <= 0.0)) { SourceSatCurrent = 1.0e-14; } else { SourceSatCurrent = here->BSIM3v32sourceArea * model->BSIM3v32jctTempSatCurDensity + here->BSIM3v32sourcePerimeter * model->BSIM3v32jctSidewallTempSatCurDensity; } if ((here->BSIM3v32drainArea <= 0.0) && (here->BSIM3v32drainPerimeter <= 0.0)) { DrainSatCurrent = 1.0e-14; } else { DrainSatCurrent = here->BSIM3v32drainArea * model->BSIM3v32jctTempSatCurDensity + here->BSIM3v32drainPerimeter * model->BSIM3v32jctSidewallTempSatCurDensity; } } else /* ACM > 0 */ { error = ACM_saturationCurrents( model->BSIM3v32acmMod, model->BSIM3v32calcacm, here->BSIM3v32geo, model->BSIM3v32hdif, model->BSIM3v32wmlt, here->BSIM3v32w, model->BSIM3v32xw, model->BSIM3v32jctTempSatCurDensity, model->BSIM3v32jctSidewallTempSatCurDensity, here->BSIM3v32drainAreaGiven, here->BSIM3v32drainArea, here->BSIM3v32drainPerimeterGiven, here->BSIM3v32drainPerimeter, here->BSIM3v32sourceAreaGiven, here->BSIM3v32sourceArea, here->BSIM3v32sourcePerimeterGiven, here->BSIM3v32sourcePerimeter, &DrainSatCurrent, &SourceSatCurrent ); if (error) return(error); } if ((SourceSatCurrent > 0.0) && (model->BSIM3v32ijth > 0.0)) { here->BSIM3v32vjsm = Nvtm * log(model->BSIM3v32ijth / SourceSatCurrent + 1.0); /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: case BSIM3v32V322: here->BSIM3v32IsEvjsm = SourceSatCurrent * exp(here->BSIM3v32vjsm / Nvtm); break; case BSIM3v32V32: default: /* Do nothing */ break; } } if ((DrainSatCurrent > 0.0) && (model->BSIM3v32ijth > 0.0)) { here->BSIM3v32vjdm = Nvtm * log(model->BSIM3v32ijth / DrainSatCurrent + 1.0); /* Added revision dependent code */ switch (model->BSIM3v32intVersion) { case BSIM3v32V324: case BSIM3v32V323: case BSIM3v32V322: here->BSIM3v32IsEvjdm = DrainSatCurrent * exp(here->BSIM3v32vjdm / Nvtm); break; case BSIM3v32V32: default: /* Do nothing */ break; } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v32/b3v32mask.c0000644000175000017500000013146713546075722022426 0ustar carstencarsten/**** BSIM3v3.2.4, Released by Xuemei Xi 12/21/2001 ****/ /********** * Copyright 2001 Regents of the University of California. All rights reserved. * File: b3mask.c of BSIM3v3.2.4 * Author: 1995 Min-Chie Jeng and Mansun Chan. * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi * Modified by Paolo Nenzi 2002 and Dietmar Warning 2003 **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "bsim3v32def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3v32mAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { BSIM3v32model *model = (BSIM3v32model *)inst; NG_IGNORE(ckt); switch(which) { case BSIM3v32_MOD_MOBMOD: value->iValue = model->BSIM3v32mobMod; return(OK); case BSIM3v32_MOD_PARAMCHK: value->iValue = model->BSIM3v32paramChk; return(OK); case BSIM3v32_MOD_BINUNIT: value->iValue = model->BSIM3v32binUnit; return(OK); case BSIM3v32_MOD_CAPMOD: value->iValue = model->BSIM3v32capMod; return(OK); case BSIM3v32_MOD_NOIMOD: value->iValue = model->BSIM3v32noiMod; return(OK); case BSIM3v32_MOD_NQSMOD: value->iValue = model->BSIM3v32nqsMod; return(OK); case BSIM3v32_MOD_ACMMOD: value->iValue = model->BSIM3v32acmMod; return(OK); case BSIM3v32_MOD_CALCACM: value->iValue = model->BSIM3v32calcacm; return(OK); case BSIM3v32_MOD_VERSION : value->sValue = model->BSIM3v32version; return(OK); case BSIM3v32_MOD_TOX : value->rValue = model->BSIM3v32tox; return(OK); case BSIM3v32_MOD_TOXM : value->rValue = model->BSIM3v32toxm; return(OK); case BSIM3v32_MOD_CDSC : value->rValue = model->BSIM3v32cdsc; return(OK); case BSIM3v32_MOD_CDSCB : value->rValue = model->BSIM3v32cdscb; return(OK); case BSIM3v32_MOD_CDSCD : value->rValue = model->BSIM3v32cdscd; return(OK); case BSIM3v32_MOD_CIT : value->rValue = model->BSIM3v32cit; return(OK); case BSIM3v32_MOD_NFACTOR : value->rValue = model->BSIM3v32nfactor; return(OK); case BSIM3v32_MOD_XJ: value->rValue = model->BSIM3v32xj; return(OK); case BSIM3v32_MOD_VSAT: value->rValue = model->BSIM3v32vsat; return(OK); case BSIM3v32_MOD_AT: value->rValue = model->BSIM3v32at; return(OK); case BSIM3v32_MOD_A0: value->rValue = model->BSIM3v32a0; return(OK); case BSIM3v32_MOD_AGS: value->rValue = model->BSIM3v32ags; return(OK); case BSIM3v32_MOD_A1: value->rValue = model->BSIM3v32a1; return(OK); case BSIM3v32_MOD_A2: value->rValue = model->BSIM3v32a2; return(OK); case BSIM3v32_MOD_KETA: value->rValue = model->BSIM3v32keta; return(OK); case BSIM3v32_MOD_NSUB: value->rValue = model->BSIM3v32nsub; return(OK); case BSIM3v32_MOD_NPEAK: value->rValue = model->BSIM3v32npeak; return(OK); case BSIM3v32_MOD_NGATE: value->rValue = model->BSIM3v32ngate; return(OK); case BSIM3v32_MOD_GAMMA1: value->rValue = model->BSIM3v32gamma1; return(OK); case BSIM3v32_MOD_GAMMA2: value->rValue = model->BSIM3v32gamma2; return(OK); case BSIM3v32_MOD_VBX: value->rValue = model->BSIM3v32vbx; return(OK); case BSIM3v32_MOD_VBM: value->rValue = model->BSIM3v32vbm; return(OK); case BSIM3v32_MOD_XT: value->rValue = model->BSIM3v32xt; return(OK); case BSIM3v32_MOD_K1: value->rValue = model->BSIM3v32k1; return(OK); case BSIM3v32_MOD_KT1: value->rValue = model->BSIM3v32kt1; return(OK); case BSIM3v32_MOD_KT1L: value->rValue = model->BSIM3v32kt1l; return(OK); case BSIM3v32_MOD_KT2 : value->rValue = model->BSIM3v32kt2; return(OK); case BSIM3v32_MOD_K2 : value->rValue = model->BSIM3v32k2; return(OK); case BSIM3v32_MOD_K3: value->rValue = model->BSIM3v32k3; return(OK); case BSIM3v32_MOD_K3B: value->rValue = model->BSIM3v32k3b; return(OK); case BSIM3v32_MOD_W0: value->rValue = model->BSIM3v32w0; return(OK); case BSIM3v32_MOD_NLX: value->rValue = model->BSIM3v32nlx; return(OK); case BSIM3v32_MOD_DVT0 : value->rValue = model->BSIM3v32dvt0; return(OK); case BSIM3v32_MOD_DVT1 : value->rValue = model->BSIM3v32dvt1; return(OK); case BSIM3v32_MOD_DVT2 : value->rValue = model->BSIM3v32dvt2; return(OK); case BSIM3v32_MOD_DVT0W : value->rValue = model->BSIM3v32dvt0w; return(OK); case BSIM3v32_MOD_DVT1W : value->rValue = model->BSIM3v32dvt1w; return(OK); case BSIM3v32_MOD_DVT2W : value->rValue = model->BSIM3v32dvt2w; return(OK); case BSIM3v32_MOD_DROUT : value->rValue = model->BSIM3v32drout; return(OK); case BSIM3v32_MOD_DSUB : value->rValue = model->BSIM3v32dsub; return(OK); case BSIM3v32_MOD_VTH0: value->rValue = model->BSIM3v32vth0; return(OK); case BSIM3v32_MOD_UA: value->rValue = model->BSIM3v32ua; return(OK); case BSIM3v32_MOD_UA1: value->rValue = model->BSIM3v32ua1; return(OK); case BSIM3v32_MOD_UB: value->rValue = model->BSIM3v32ub; return(OK); case BSIM3v32_MOD_UB1: value->rValue = model->BSIM3v32ub1; return(OK); case BSIM3v32_MOD_UC: value->rValue = model->BSIM3v32uc; return(OK); case BSIM3v32_MOD_UC1: value->rValue = model->BSIM3v32uc1; return(OK); case BSIM3v32_MOD_U0: value->rValue = model->BSIM3v32u0; return(OK); case BSIM3v32_MOD_UTE: value->rValue = model->BSIM3v32ute; return(OK); case BSIM3v32_MOD_VOFF: value->rValue = model->BSIM3v32voff; return(OK); case BSIM3v32_MOD_DELTA: value->rValue = model->BSIM3v32delta; return(OK); case BSIM3v32_MOD_RDSW: value->rValue = model->BSIM3v32rdsw; return(OK); case BSIM3v32_MOD_PRWG: value->rValue = model->BSIM3v32prwg; return(OK); case BSIM3v32_MOD_PRWB: value->rValue = model->BSIM3v32prwb; return(OK); case BSIM3v32_MOD_PRT: value->rValue = model->BSIM3v32prt; return(OK); case BSIM3v32_MOD_ETA0: value->rValue = model->BSIM3v32eta0; return(OK); case BSIM3v32_MOD_ETAB: value->rValue = model->BSIM3v32etab; return(OK); case BSIM3v32_MOD_PCLM: value->rValue = model->BSIM3v32pclm; return(OK); case BSIM3v32_MOD_PDIBL1: value->rValue = model->BSIM3v32pdibl1; return(OK); case BSIM3v32_MOD_PDIBL2: value->rValue = model->BSIM3v32pdibl2; return(OK); case BSIM3v32_MOD_PDIBLB: value->rValue = model->BSIM3v32pdiblb; return(OK); case BSIM3v32_MOD_PSCBE1: value->rValue = model->BSIM3v32pscbe1; return(OK); case BSIM3v32_MOD_PSCBE2: value->rValue = model->BSIM3v32pscbe2; return(OK); case BSIM3v32_MOD_PVAG: value->rValue = model->BSIM3v32pvag; return(OK); case BSIM3v32_MOD_WR: value->rValue = model->BSIM3v32wr; return(OK); case BSIM3v32_MOD_DWG: value->rValue = model->BSIM3v32dwg; return(OK); case BSIM3v32_MOD_DWB: value->rValue = model->BSIM3v32dwb; return(OK); case BSIM3v32_MOD_B0: value->rValue = model->BSIM3v32b0; return(OK); case BSIM3v32_MOD_B1: value->rValue = model->BSIM3v32b1; return(OK); case BSIM3v32_MOD_ALPHA0: value->rValue = model->BSIM3v32alpha0; return(OK); case BSIM3v32_MOD_ALPHA1: value->rValue = model->BSIM3v32alpha1; return(OK); case BSIM3v32_MOD_BETA0: value->rValue = model->BSIM3v32beta0; return(OK); case BSIM3v32_MOD_IJTH: value->rValue = model->BSIM3v32ijth; return(OK); case BSIM3v32_MOD_VFB: value->rValue = model->BSIM3v32vfb; return(OK); case BSIM3v32_MOD_ELM: value->rValue = model->BSIM3v32elm; return(OK); case BSIM3v32_MOD_CGSL: value->rValue = model->BSIM3v32cgsl; return(OK); case BSIM3v32_MOD_CGDL: value->rValue = model->BSIM3v32cgdl; return(OK); case BSIM3v32_MOD_CKAPPA: value->rValue = model->BSIM3v32ckappa; return(OK); case BSIM3v32_MOD_CF: value->rValue = model->BSIM3v32cf; return(OK); case BSIM3v32_MOD_CLC: value->rValue = model->BSIM3v32clc; return(OK); case BSIM3v32_MOD_CLE: value->rValue = model->BSIM3v32cle; return(OK); case BSIM3v32_MOD_DWC: value->rValue = model->BSIM3v32dwc; return(OK); case BSIM3v32_MOD_DLC: value->rValue = model->BSIM3v32dlc; return(OK); case BSIM3v32_MOD_VFBCV: value->rValue = model->BSIM3v32vfbcv; return(OK); case BSIM3v32_MOD_ACDE: value->rValue = model->BSIM3v32acde; return(OK); case BSIM3v32_MOD_MOIN: value->rValue = model->BSIM3v32moin; return(OK); case BSIM3v32_MOD_NOFF: value->rValue = model->BSIM3v32noff; return(OK); case BSIM3v32_MOD_VOFFCV: value->rValue = model->BSIM3v32voffcv; return(OK); case BSIM3v32_MOD_TCJ: value->rValue = model->BSIM3v32tcj; return(OK); case BSIM3v32_MOD_TPB: value->rValue = model->BSIM3v32tpb; return(OK); case BSIM3v32_MOD_TCJSW: value->rValue = model->BSIM3v32tcjsw; return(OK); case BSIM3v32_MOD_TPBSW: value->rValue = model->BSIM3v32tpbsw; return(OK); case BSIM3v32_MOD_TCJSWG: value->rValue = model->BSIM3v32tcjswg; return(OK); case BSIM3v32_MOD_TPBSWG: value->rValue = model->BSIM3v32tpbswg; return(OK); /* ACM model */ case BSIM3v32_MOD_HDIF: value->rValue = model->BSIM3v32hdif; return(OK); case BSIM3v32_MOD_LDIF: value->rValue = model->BSIM3v32ldif; return(OK); case BSIM3v32_MOD_LD: value->rValue = model->BSIM3v32ld; return(OK); case BSIM3v32_MOD_RD: value->rValue = model->BSIM3v32rd; return(OK); case BSIM3v32_MOD_RS: value->rValue = model->BSIM3v32rs; return(OK); case BSIM3v32_MOD_RDC: value->rValue = model->BSIM3v32rdc; return(OK); case BSIM3v32_MOD_RSC: value->rValue = model->BSIM3v32rsc; return(OK); case BSIM3v32_MOD_WMLT: value->rValue = model->BSIM3v32wmlt; return(OK); case BSIM3v32_MOD_LMLT: value->rValue = model->BSIM3v32lmlt; return(OK); /* Length dependence */ case BSIM3v32_MOD_LCDSC : value->rValue = model->BSIM3v32lcdsc; return(OK); case BSIM3v32_MOD_LCDSCB : value->rValue = model->BSIM3v32lcdscb; return(OK); case BSIM3v32_MOD_LCDSCD : value->rValue = model->BSIM3v32lcdscd; return(OK); case BSIM3v32_MOD_LCIT : value->rValue = model->BSIM3v32lcit; return(OK); case BSIM3v32_MOD_LNFACTOR : value->rValue = model->BSIM3v32lnfactor; return(OK); case BSIM3v32_MOD_LXJ: value->rValue = model->BSIM3v32lxj; return(OK); case BSIM3v32_MOD_LVSAT: value->rValue = model->BSIM3v32lvsat; return(OK); case BSIM3v32_MOD_LAT: value->rValue = model->BSIM3v32lat; return(OK); case BSIM3v32_MOD_LA0: value->rValue = model->BSIM3v32la0; return(OK); case BSIM3v32_MOD_LAGS: value->rValue = model->BSIM3v32lags; return(OK); case BSIM3v32_MOD_LA1: value->rValue = model->BSIM3v32la1; return(OK); case BSIM3v32_MOD_LA2: value->rValue = model->BSIM3v32la2; return(OK); case BSIM3v32_MOD_LKETA: value->rValue = model->BSIM3v32lketa; return(OK); case BSIM3v32_MOD_LNSUB: value->rValue = model->BSIM3v32lnsub; return(OK); case BSIM3v32_MOD_LNPEAK: value->rValue = model->BSIM3v32lnpeak; return(OK); case BSIM3v32_MOD_LNGATE: value->rValue = model->BSIM3v32lngate; return(OK); case BSIM3v32_MOD_LGAMMA1: value->rValue = model->BSIM3v32lgamma1; return(OK); case BSIM3v32_MOD_LGAMMA2: value->rValue = model->BSIM3v32lgamma2; return(OK); case BSIM3v32_MOD_LVBX: value->rValue = model->BSIM3v32lvbx; return(OK); case BSIM3v32_MOD_LVBM: value->rValue = model->BSIM3v32lvbm; return(OK); case BSIM3v32_MOD_LXT: value->rValue = model->BSIM3v32lxt; return(OK); case BSIM3v32_MOD_LK1: value->rValue = model->BSIM3v32lk1; return(OK); case BSIM3v32_MOD_LKT1: value->rValue = model->BSIM3v32lkt1; return(OK); case BSIM3v32_MOD_LKT1L: value->rValue = model->BSIM3v32lkt1l; return(OK); case BSIM3v32_MOD_LKT2 : value->rValue = model->BSIM3v32lkt2; return(OK); case BSIM3v32_MOD_LK2 : value->rValue = model->BSIM3v32lk2; return(OK); case BSIM3v32_MOD_LK3: value->rValue = model->BSIM3v32lk3; return(OK); case BSIM3v32_MOD_LK3B: value->rValue = model->BSIM3v32lk3b; return(OK); case BSIM3v32_MOD_LW0: value->rValue = model->BSIM3v32lw0; return(OK); case BSIM3v32_MOD_LNLX: value->rValue = model->BSIM3v32lnlx; return(OK); case BSIM3v32_MOD_LDVT0: value->rValue = model->BSIM3v32ldvt0; return(OK); case BSIM3v32_MOD_LDVT1 : value->rValue = model->BSIM3v32ldvt1; return(OK); case BSIM3v32_MOD_LDVT2 : value->rValue = model->BSIM3v32ldvt2; return(OK); case BSIM3v32_MOD_LDVT0W : value->rValue = model->BSIM3v32ldvt0w; return(OK); case BSIM3v32_MOD_LDVT1W : value->rValue = model->BSIM3v32ldvt1w; return(OK); case BSIM3v32_MOD_LDVT2W : value->rValue = model->BSIM3v32ldvt2w; return(OK); case BSIM3v32_MOD_LDROUT : value->rValue = model->BSIM3v32ldrout; return(OK); case BSIM3v32_MOD_LDSUB : value->rValue = model->BSIM3v32ldsub; return(OK); case BSIM3v32_MOD_LVTH0: value->rValue = model->BSIM3v32lvth0; return(OK); case BSIM3v32_MOD_LUA: value->rValue = model->BSIM3v32lua; return(OK); case BSIM3v32_MOD_LUA1: value->rValue = model->BSIM3v32lua1; return(OK); case BSIM3v32_MOD_LUB: value->rValue = model->BSIM3v32lub; return(OK); case BSIM3v32_MOD_LUB1: value->rValue = model->BSIM3v32lub1; return(OK); case BSIM3v32_MOD_LUC: value->rValue = model->BSIM3v32luc; return(OK); case BSIM3v32_MOD_LUC1: value->rValue = model->BSIM3v32luc1; return(OK); case BSIM3v32_MOD_LU0: value->rValue = model->BSIM3v32lu0; return(OK); case BSIM3v32_MOD_LUTE: value->rValue = model->BSIM3v32lute; return(OK); case BSIM3v32_MOD_LVOFF: value->rValue = model->BSIM3v32lvoff; return(OK); case BSIM3v32_MOD_LDELTA: value->rValue = model->BSIM3v32ldelta; return(OK); case BSIM3v32_MOD_LRDSW: value->rValue = model->BSIM3v32lrdsw; return(OK); case BSIM3v32_MOD_LPRWB: value->rValue = model->BSIM3v32lprwb; return(OK); case BSIM3v32_MOD_LPRWG: value->rValue = model->BSIM3v32lprwg; return(OK); case BSIM3v32_MOD_LPRT: value->rValue = model->BSIM3v32lprt; return(OK); case BSIM3v32_MOD_LETA0: value->rValue = model->BSIM3v32leta0; return(OK); case BSIM3v32_MOD_LETAB: value->rValue = model->BSIM3v32letab; return(OK); case BSIM3v32_MOD_LPCLM: value->rValue = model->BSIM3v32lpclm; return(OK); case BSIM3v32_MOD_LPDIBL1: value->rValue = model->BSIM3v32lpdibl1; return(OK); case BSIM3v32_MOD_LPDIBL2: value->rValue = model->BSIM3v32lpdibl2; return(OK); case BSIM3v32_MOD_LPDIBLB: value->rValue = model->BSIM3v32lpdiblb; return(OK); case BSIM3v32_MOD_LPSCBE1: value->rValue = model->BSIM3v32lpscbe1; return(OK); case BSIM3v32_MOD_LPSCBE2: value->rValue = model->BSIM3v32lpscbe2; return(OK); case BSIM3v32_MOD_LPVAG: value->rValue = model->BSIM3v32lpvag; return(OK); case BSIM3v32_MOD_LWR: value->rValue = model->BSIM3v32lwr; return(OK); case BSIM3v32_MOD_LDWG: value->rValue = model->BSIM3v32ldwg; return(OK); case BSIM3v32_MOD_LDWB: value->rValue = model->BSIM3v32ldwb; return(OK); case BSIM3v32_MOD_LB0: value->rValue = model->BSIM3v32lb0; return(OK); case BSIM3v32_MOD_LB1: value->rValue = model->BSIM3v32lb1; return(OK); case BSIM3v32_MOD_LALPHA0: value->rValue = model->BSIM3v32lalpha0; return(OK); case BSIM3v32_MOD_LALPHA1: value->rValue = model->BSIM3v32lalpha1; return(OK); case BSIM3v32_MOD_LBETA0: value->rValue = model->BSIM3v32lbeta0; return(OK); case BSIM3v32_MOD_LVFB: value->rValue = model->BSIM3v32lvfb; return(OK); case BSIM3v32_MOD_LELM: value->rValue = model->BSIM3v32lelm; return(OK); case BSIM3v32_MOD_LCGSL: value->rValue = model->BSIM3v32lcgsl; return(OK); case BSIM3v32_MOD_LCGDL: value->rValue = model->BSIM3v32lcgdl; return(OK); case BSIM3v32_MOD_LCKAPPA: value->rValue = model->BSIM3v32lckappa; return(OK); case BSIM3v32_MOD_LCF: value->rValue = model->BSIM3v32lcf; return(OK); case BSIM3v32_MOD_LCLC: value->rValue = model->BSIM3v32lclc; return(OK); case BSIM3v32_MOD_LCLE: value->rValue = model->BSIM3v32lcle; return(OK); case BSIM3v32_MOD_LVFBCV: value->rValue = model->BSIM3v32lvfbcv; return(OK); case BSIM3v32_MOD_LACDE: value->rValue = model->BSIM3v32lacde; return(OK); case BSIM3v32_MOD_LMOIN: value->rValue = model->BSIM3v32lmoin; return(OK); case BSIM3v32_MOD_LNOFF: value->rValue = model->BSIM3v32lnoff; return(OK); case BSIM3v32_MOD_LVOFFCV: value->rValue = model->BSIM3v32lvoffcv; return(OK); /* Width dependence */ case BSIM3v32_MOD_WCDSC : value->rValue = model->BSIM3v32wcdsc; return(OK); case BSIM3v32_MOD_WCDSCB : value->rValue = model->BSIM3v32wcdscb; return(OK); case BSIM3v32_MOD_WCDSCD : value->rValue = model->BSIM3v32wcdscd; return(OK); case BSIM3v32_MOD_WCIT : value->rValue = model->BSIM3v32wcit; return(OK); case BSIM3v32_MOD_WNFACTOR : value->rValue = model->BSIM3v32wnfactor; return(OK); case BSIM3v32_MOD_WXJ: value->rValue = model->BSIM3v32wxj; return(OK); case BSIM3v32_MOD_WVSAT: value->rValue = model->BSIM3v32wvsat; return(OK); case BSIM3v32_MOD_WAT: value->rValue = model->BSIM3v32wat; return(OK); case BSIM3v32_MOD_WA0: value->rValue = model->BSIM3v32wa0; return(OK); case BSIM3v32_MOD_WAGS: value->rValue = model->BSIM3v32wags; return(OK); case BSIM3v32_MOD_WA1: value->rValue = model->BSIM3v32wa1; return(OK); case BSIM3v32_MOD_WA2: value->rValue = model->BSIM3v32wa2; return(OK); case BSIM3v32_MOD_WKETA: value->rValue = model->BSIM3v32wketa; return(OK); case BSIM3v32_MOD_WNSUB: value->rValue = model->BSIM3v32wnsub; return(OK); case BSIM3v32_MOD_WNPEAK: value->rValue = model->BSIM3v32wnpeak; return(OK); case BSIM3v32_MOD_WNGATE: value->rValue = model->BSIM3v32wngate; return(OK); case BSIM3v32_MOD_WGAMMA1: value->rValue = model->BSIM3v32wgamma1; return(OK); case BSIM3v32_MOD_WGAMMA2: value->rValue = model->BSIM3v32wgamma2; return(OK); case BSIM3v32_MOD_WVBX: value->rValue = model->BSIM3v32wvbx; return(OK); case BSIM3v32_MOD_WVBM: value->rValue = model->BSIM3v32wvbm; return(OK); case BSIM3v32_MOD_WXT: value->rValue = model->BSIM3v32wxt; return(OK); case BSIM3v32_MOD_WK1: value->rValue = model->BSIM3v32wk1; return(OK); case BSIM3v32_MOD_WKT1: value->rValue = model->BSIM3v32wkt1; return(OK); case BSIM3v32_MOD_WKT1L: value->rValue = model->BSIM3v32wkt1l; return(OK); case BSIM3v32_MOD_WKT2 : value->rValue = model->BSIM3v32wkt2; return(OK); case BSIM3v32_MOD_WK2 : value->rValue = model->BSIM3v32wk2; return(OK); case BSIM3v32_MOD_WK3: value->rValue = model->BSIM3v32wk3; return(OK); case BSIM3v32_MOD_WK3B: value->rValue = model->BSIM3v32wk3b; return(OK); case BSIM3v32_MOD_WW0: value->rValue = model->BSIM3v32ww0; return(OK); case BSIM3v32_MOD_WNLX: value->rValue = model->BSIM3v32wnlx; return(OK); case BSIM3v32_MOD_WDVT0: value->rValue = model->BSIM3v32wdvt0; return(OK); case BSIM3v32_MOD_WDVT1 : value->rValue = model->BSIM3v32wdvt1; return(OK); case BSIM3v32_MOD_WDVT2 : value->rValue = model->BSIM3v32wdvt2; return(OK); case BSIM3v32_MOD_WDVT0W : value->rValue = model->BSIM3v32wdvt0w; return(OK); case BSIM3v32_MOD_WDVT1W : value->rValue = model->BSIM3v32wdvt1w; return(OK); case BSIM3v32_MOD_WDVT2W : value->rValue = model->BSIM3v32wdvt2w; return(OK); case BSIM3v32_MOD_WDROUT : value->rValue = model->BSIM3v32wdrout; return(OK); case BSIM3v32_MOD_WDSUB : value->rValue = model->BSIM3v32wdsub; return(OK); case BSIM3v32_MOD_WVTH0: value->rValue = model->BSIM3v32wvth0; return(OK); case BSIM3v32_MOD_WUA: value->rValue = model->BSIM3v32wua; return(OK); case BSIM3v32_MOD_WUA1: value->rValue = model->BSIM3v32wua1; return(OK); case BSIM3v32_MOD_WUB: value->rValue = model->BSIM3v32wub; return(OK); case BSIM3v32_MOD_WUB1: value->rValue = model->BSIM3v32wub1; return(OK); case BSIM3v32_MOD_WUC: value->rValue = model->BSIM3v32wuc; return(OK); case BSIM3v32_MOD_WUC1: value->rValue = model->BSIM3v32wuc1; return(OK); case BSIM3v32_MOD_WU0: value->rValue = model->BSIM3v32wu0; return(OK); case BSIM3v32_MOD_WUTE: value->rValue = model->BSIM3v32wute; return(OK); case BSIM3v32_MOD_WVOFF: value->rValue = model->BSIM3v32wvoff; return(OK); case BSIM3v32_MOD_WDELTA: value->rValue = model->BSIM3v32wdelta; return(OK); case BSIM3v32_MOD_WRDSW: value->rValue = model->BSIM3v32wrdsw; return(OK); case BSIM3v32_MOD_WPRWB: value->rValue = model->BSIM3v32wprwb; return(OK); case BSIM3v32_MOD_WPRWG: value->rValue = model->BSIM3v32wprwg; return(OK); case BSIM3v32_MOD_WPRT: value->rValue = model->BSIM3v32wprt; return(OK); case BSIM3v32_MOD_WETA0: value->rValue = model->BSIM3v32weta0; return(OK); case BSIM3v32_MOD_WETAB: value->rValue = model->BSIM3v32wetab; return(OK); case BSIM3v32_MOD_WPCLM: value->rValue = model->BSIM3v32wpclm; return(OK); case BSIM3v32_MOD_WPDIBL1: value->rValue = model->BSIM3v32wpdibl1; return(OK); case BSIM3v32_MOD_WPDIBL2: value->rValue = model->BSIM3v32wpdibl2; return(OK); case BSIM3v32_MOD_WPDIBLB: value->rValue = model->BSIM3v32wpdiblb; return(OK); case BSIM3v32_MOD_WPSCBE1: value->rValue = model->BSIM3v32wpscbe1; return(OK); case BSIM3v32_MOD_WPSCBE2: value->rValue = model->BSIM3v32wpscbe2; return(OK); case BSIM3v32_MOD_WPVAG: value->rValue = model->BSIM3v32wpvag; return(OK); case BSIM3v32_MOD_WWR: value->rValue = model->BSIM3v32wwr; return(OK); case BSIM3v32_MOD_WDWG: value->rValue = model->BSIM3v32wdwg; return(OK); case BSIM3v32_MOD_WDWB: value->rValue = model->BSIM3v32wdwb; return(OK); case BSIM3v32_MOD_WB0: value->rValue = model->BSIM3v32wb0; return(OK); case BSIM3v32_MOD_WB1: value->rValue = model->BSIM3v32wb1; return(OK); case BSIM3v32_MOD_WALPHA0: value->rValue = model->BSIM3v32walpha0; return(OK); case BSIM3v32_MOD_WALPHA1: value->rValue = model->BSIM3v32walpha1; return(OK); case BSIM3v32_MOD_WBETA0: value->rValue = model->BSIM3v32wbeta0; return(OK); case BSIM3v32_MOD_WVFB: value->rValue = model->BSIM3v32wvfb; return(OK); case BSIM3v32_MOD_WELM: value->rValue = model->BSIM3v32welm; return(OK); case BSIM3v32_MOD_WCGSL: value->rValue = model->BSIM3v32wcgsl; return(OK); case BSIM3v32_MOD_WCGDL: value->rValue = model->BSIM3v32wcgdl; return(OK); case BSIM3v32_MOD_WCKAPPA: value->rValue = model->BSIM3v32wckappa; return(OK); case BSIM3v32_MOD_WCF: value->rValue = model->BSIM3v32wcf; return(OK); case BSIM3v32_MOD_WCLC: value->rValue = model->BSIM3v32wclc; return(OK); case BSIM3v32_MOD_WCLE: value->rValue = model->BSIM3v32wcle; return(OK); case BSIM3v32_MOD_WVFBCV: value->rValue = model->BSIM3v32wvfbcv; return(OK); case BSIM3v32_MOD_WACDE: value->rValue = model->BSIM3v32wacde; return(OK); case BSIM3v32_MOD_WMOIN: value->rValue = model->BSIM3v32wmoin; return(OK); case BSIM3v32_MOD_WNOFF: value->rValue = model->BSIM3v32wnoff; return(OK); case BSIM3v32_MOD_WVOFFCV: value->rValue = model->BSIM3v32wvoffcv; return(OK); /* Cross-term dependence */ case BSIM3v32_MOD_PCDSC : value->rValue = model->BSIM3v32pcdsc; return(OK); case BSIM3v32_MOD_PCDSCB : value->rValue = model->BSIM3v32pcdscb; return(OK); case BSIM3v32_MOD_PCDSCD : value->rValue = model->BSIM3v32pcdscd; return(OK); case BSIM3v32_MOD_PCIT : value->rValue = model->BSIM3v32pcit; return(OK); case BSIM3v32_MOD_PNFACTOR : value->rValue = model->BSIM3v32pnfactor; return(OK); case BSIM3v32_MOD_PXJ: value->rValue = model->BSIM3v32pxj; return(OK); case BSIM3v32_MOD_PVSAT: value->rValue = model->BSIM3v32pvsat; return(OK); case BSIM3v32_MOD_PAT: value->rValue = model->BSIM3v32pat; return(OK); case BSIM3v32_MOD_PA0: value->rValue = model->BSIM3v32pa0; return(OK); case BSIM3v32_MOD_PAGS: value->rValue = model->BSIM3v32pags; return(OK); case BSIM3v32_MOD_PA1: value->rValue = model->BSIM3v32pa1; return(OK); case BSIM3v32_MOD_PA2: value->rValue = model->BSIM3v32pa2; return(OK); case BSIM3v32_MOD_PKETA: value->rValue = model->BSIM3v32pketa; return(OK); case BSIM3v32_MOD_PNSUB: value->rValue = model->BSIM3v32pnsub; return(OK); case BSIM3v32_MOD_PNPEAK: value->rValue = model->BSIM3v32pnpeak; return(OK); case BSIM3v32_MOD_PNGATE: value->rValue = model->BSIM3v32pngate; return(OK); case BSIM3v32_MOD_PGAMMA1: value->rValue = model->BSIM3v32pgamma1; return(OK); case BSIM3v32_MOD_PGAMMA2: value->rValue = model->BSIM3v32pgamma2; return(OK); case BSIM3v32_MOD_PVBX: value->rValue = model->BSIM3v32pvbx; return(OK); case BSIM3v32_MOD_PVBM: value->rValue = model->BSIM3v32pvbm; return(OK); case BSIM3v32_MOD_PXT: value->rValue = model->BSIM3v32pxt; return(OK); case BSIM3v32_MOD_PK1: value->rValue = model->BSIM3v32pk1; return(OK); case BSIM3v32_MOD_PKT1: value->rValue = model->BSIM3v32pkt1; return(OK); case BSIM3v32_MOD_PKT1L: value->rValue = model->BSIM3v32pkt1l; return(OK); case BSIM3v32_MOD_PKT2 : value->rValue = model->BSIM3v32pkt2; return(OK); case BSIM3v32_MOD_PK2 : value->rValue = model->BSIM3v32pk2; return(OK); case BSIM3v32_MOD_PK3: value->rValue = model->BSIM3v32pk3; return(OK); case BSIM3v32_MOD_PK3B: value->rValue = model->BSIM3v32pk3b; return(OK); case BSIM3v32_MOD_PW0: value->rValue = model->BSIM3v32pw0; return(OK); case BSIM3v32_MOD_PNLX: value->rValue = model->BSIM3v32pnlx; return(OK); case BSIM3v32_MOD_PDVT0 : value->rValue = model->BSIM3v32pdvt0; return(OK); case BSIM3v32_MOD_PDVT1 : value->rValue = model->BSIM3v32pdvt1; return(OK); case BSIM3v32_MOD_PDVT2 : value->rValue = model->BSIM3v32pdvt2; return(OK); case BSIM3v32_MOD_PDVT0W : value->rValue = model->BSIM3v32pdvt0w; return(OK); case BSIM3v32_MOD_PDVT1W : value->rValue = model->BSIM3v32pdvt1w; return(OK); case BSIM3v32_MOD_PDVT2W : value->rValue = model->BSIM3v32pdvt2w; return(OK); case BSIM3v32_MOD_PDROUT : value->rValue = model->BSIM3v32pdrout; return(OK); case BSIM3v32_MOD_PDSUB : value->rValue = model->BSIM3v32pdsub; return(OK); case BSIM3v32_MOD_PVTH0: value->rValue = model->BSIM3v32pvth0; return(OK); case BSIM3v32_MOD_PUA: value->rValue = model->BSIM3v32pua; return(OK); case BSIM3v32_MOD_PUA1: value->rValue = model->BSIM3v32pua1; return(OK); case BSIM3v32_MOD_PUB: value->rValue = model->BSIM3v32pub; return(OK); case BSIM3v32_MOD_PUB1: value->rValue = model->BSIM3v32pub1; return(OK); case BSIM3v32_MOD_PUC: value->rValue = model->BSIM3v32puc; return(OK); case BSIM3v32_MOD_PUC1: value->rValue = model->BSIM3v32puc1; return(OK); case BSIM3v32_MOD_PU0: value->rValue = model->BSIM3v32pu0; return(OK); case BSIM3v32_MOD_PUTE: value->rValue = model->BSIM3v32pute; return(OK); case BSIM3v32_MOD_PVOFF: value->rValue = model->BSIM3v32pvoff; return(OK); case BSIM3v32_MOD_PDELTA: value->rValue = model->BSIM3v32pdelta; return(OK); case BSIM3v32_MOD_PRDSW: value->rValue = model->BSIM3v32prdsw; return(OK); case BSIM3v32_MOD_PPRWB: value->rValue = model->BSIM3v32pprwb; return(OK); case BSIM3v32_MOD_PPRWG: value->rValue = model->BSIM3v32pprwg; return(OK); case BSIM3v32_MOD_PPRT: value->rValue = model->BSIM3v32pprt; return(OK); case BSIM3v32_MOD_PETA0: value->rValue = model->BSIM3v32peta0; return(OK); case BSIM3v32_MOD_PETAB: value->rValue = model->BSIM3v32petab; return(OK); case BSIM3v32_MOD_PPCLM: value->rValue = model->BSIM3v32ppclm; return(OK); case BSIM3v32_MOD_PPDIBL1: value->rValue = model->BSIM3v32ppdibl1; return(OK); case BSIM3v32_MOD_PPDIBL2: value->rValue = model->BSIM3v32ppdibl2; return(OK); case BSIM3v32_MOD_PPDIBLB: value->rValue = model->BSIM3v32ppdiblb; return(OK); case BSIM3v32_MOD_PPSCBE1: value->rValue = model->BSIM3v32ppscbe1; return(OK); case BSIM3v32_MOD_PPSCBE2: value->rValue = model->BSIM3v32ppscbe2; return(OK); case BSIM3v32_MOD_PPVAG: value->rValue = model->BSIM3v32ppvag; return(OK); case BSIM3v32_MOD_PWR: value->rValue = model->BSIM3v32pwr; return(OK); case BSIM3v32_MOD_PDWG: value->rValue = model->BSIM3v32pdwg; return(OK); case BSIM3v32_MOD_PDWB: value->rValue = model->BSIM3v32pdwb; return(OK); case BSIM3v32_MOD_PB0: value->rValue = model->BSIM3v32pb0; return(OK); case BSIM3v32_MOD_PB1: value->rValue = model->BSIM3v32pb1; return(OK); case BSIM3v32_MOD_PALPHA0: value->rValue = model->BSIM3v32palpha0; return(OK); case BSIM3v32_MOD_PALPHA1: value->rValue = model->BSIM3v32palpha1; return(OK); case BSIM3v32_MOD_PBETA0: value->rValue = model->BSIM3v32pbeta0; return(OK); case BSIM3v32_MOD_PVFB: value->rValue = model->BSIM3v32pvfb; return(OK); case BSIM3v32_MOD_PELM: value->rValue = model->BSIM3v32pelm; return(OK); case BSIM3v32_MOD_PCGSL: value->rValue = model->BSIM3v32pcgsl; return(OK); case BSIM3v32_MOD_PCGDL: value->rValue = model->BSIM3v32pcgdl; return(OK); case BSIM3v32_MOD_PCKAPPA: value->rValue = model->BSIM3v32pckappa; return(OK); case BSIM3v32_MOD_PCF: value->rValue = model->BSIM3v32pcf; return(OK); case BSIM3v32_MOD_PCLC: value->rValue = model->BSIM3v32pclc; return(OK); case BSIM3v32_MOD_PCLE: value->rValue = model->BSIM3v32pcle; return(OK); case BSIM3v32_MOD_PVFBCV: value->rValue = model->BSIM3v32pvfbcv; return(OK); case BSIM3v32_MOD_PACDE: value->rValue = model->BSIM3v32pacde; return(OK); case BSIM3v32_MOD_PMOIN: value->rValue = model->BSIM3v32pmoin; return(OK); case BSIM3v32_MOD_PNOFF: value->rValue = model->BSIM3v32pnoff; return(OK); case BSIM3v32_MOD_PVOFFCV: value->rValue = model->BSIM3v32pvoffcv; return(OK); case BSIM3v32_MOD_TNOM : value->rValue = model->BSIM3v32tnom; return(OK); case BSIM3v32_MOD_CGSO: value->rValue = model->BSIM3v32cgso; return(OK); case BSIM3v32_MOD_CGDO: value->rValue = model->BSIM3v32cgdo; return(OK); case BSIM3v32_MOD_CGBO: value->rValue = model->BSIM3v32cgbo; return(OK); case BSIM3v32_MOD_XPART: value->rValue = model->BSIM3v32xpart; return(OK); case BSIM3v32_MOD_RSH: value->rValue = model->BSIM3v32sheetResistance; return(OK); case BSIM3v32_MOD_JS: value->rValue = model->BSIM3v32jctSatCurDensity; return(OK); case BSIM3v32_MOD_JSW: value->rValue = model->BSIM3v32jctSidewallSatCurDensity; return(OK); case BSIM3v32_MOD_PB: value->rValue = model->BSIM3v32bulkJctPotential; return(OK); case BSIM3v32_MOD_MJ: value->rValue = model->BSIM3v32bulkJctBotGradingCoeff; return(OK); case BSIM3v32_MOD_PBSW: value->rValue = model->BSIM3v32sidewallJctPotential; return(OK); case BSIM3v32_MOD_MJSW: value->rValue = model->BSIM3v32bulkJctSideGradingCoeff; return(OK); case BSIM3v32_MOD_CJ: value->rValue = model->BSIM3v32unitAreaJctCap; return(OK); case BSIM3v32_MOD_CJSW: value->rValue = model->BSIM3v32unitLengthSidewallJctCap; return(OK); case BSIM3v32_MOD_PBSWG: value->rValue = model->BSIM3v32GatesidewallJctPotential; return(OK); case BSIM3v32_MOD_MJSWG: value->rValue = model->BSIM3v32bulkJctGateSideGradingCoeff; return(OK); case BSIM3v32_MOD_CJSWG: value->rValue = model->BSIM3v32unitLengthGateSidewallJctCap; return(OK); case BSIM3v32_MOD_NJ: value->rValue = model->BSIM3v32jctEmissionCoeff; return(OK); case BSIM3v32_MOD_XTI: value->rValue = model->BSIM3v32jctTempExponent; return(OK); case BSIM3v32_MOD_LINT: value->rValue = model->BSIM3v32Lint; return(OK); case BSIM3v32_MOD_LL: value->rValue = model->BSIM3v32Ll; return(OK); case BSIM3v32_MOD_LLC: value->rValue = model->BSIM3v32Llc; return(OK); case BSIM3v32_MOD_LLN: value->rValue = model->BSIM3v32Lln; return(OK); case BSIM3v32_MOD_LW: value->rValue = model->BSIM3v32Lw; return(OK); case BSIM3v32_MOD_LWC: value->rValue = model->BSIM3v32Lwc; return(OK); case BSIM3v32_MOD_LWN: value->rValue = model->BSIM3v32Lwn; return(OK); case BSIM3v32_MOD_LWL: value->rValue = model->BSIM3v32Lwl; return(OK); case BSIM3v32_MOD_LWLC: value->rValue = model->BSIM3v32Lwlc; return(OK); case BSIM3v32_MOD_LMIN: value->rValue = model->BSIM3v32Lmin; return(OK); case BSIM3v32_MOD_LMAX: value->rValue = model->BSIM3v32Lmax; return(OK); case BSIM3v32_MOD_WINT: value->rValue = model->BSIM3v32Wint; return(OK); case BSIM3v32_MOD_WL: value->rValue = model->BSIM3v32Wl; return(OK); case BSIM3v32_MOD_WLC: value->rValue = model->BSIM3v32Wlc; return(OK); case BSIM3v32_MOD_WLN: value->rValue = model->BSIM3v32Wln; return(OK); case BSIM3v32_MOD_WW: value->rValue = model->BSIM3v32Ww; return(OK); case BSIM3v32_MOD_WWC: value->rValue = model->BSIM3v32Wwc; return(OK); case BSIM3v32_MOD_WWN: value->rValue = model->BSIM3v32Wwn; return(OK); case BSIM3v32_MOD_WWL: value->rValue = model->BSIM3v32Wwl; return(OK); case BSIM3v32_MOD_WWLC: value->rValue = model->BSIM3v32Wwlc; return(OK); case BSIM3v32_MOD_WMIN: value->rValue = model->BSIM3v32Wmin; return(OK); case BSIM3v32_MOD_WMAX: value->rValue = model->BSIM3v32Wmax; return(OK); case BSIM3v32_MOD_XL: value->rValue = model->BSIM3v32xl; return(OK); case BSIM3v32_MOD_XW: value->rValue = model->BSIM3v32xw; return(OK); case BSIM3v32_MOD_NOIA: value->rValue = model->BSIM3v32oxideTrapDensityA; return(OK); case BSIM3v32_MOD_NOIB: value->rValue = model->BSIM3v32oxideTrapDensityB; return(OK); case BSIM3v32_MOD_NOIC: value->rValue = model->BSIM3v32oxideTrapDensityC; return(OK); case BSIM3v32_MOD_EM: value->rValue = model->BSIM3v32em; return(OK); case BSIM3v32_MOD_EF: value->rValue = model->BSIM3v32ef; return(OK); case BSIM3v32_MOD_AF: value->rValue = model->BSIM3v32af; return(OK); case BSIM3v32_MOD_KF: value->rValue = model->BSIM3v32kf; return(OK); case BSIM3v32_MOD_VGS_MAX: value->rValue = model->BSIM3v32vgsMax; return(OK); case BSIM3v32_MOD_VGD_MAX: value->rValue = model->BSIM3v32vgdMax; return(OK); case BSIM3v32_MOD_VGB_MAX: value->rValue = model->BSIM3v32vgbMax; return(OK); case BSIM3v32_MOD_VDS_MAX: value->rValue = model->BSIM3v32vdsMax; return(OK); case BSIM3v32_MOD_VBS_MAX: value->rValue = model->BSIM3v32vbsMax; return(OK); case BSIM3v32_MOD_VBD_MAX: value->rValue = model->BSIM3v32vbdMax; return(OK); case BSIM3v32_MOD_VGSR_MAX: value->rValue = model->BSIM3v32vgsrMax; return(OK); case BSIM3v32_MOD_VGDR_MAX: value->rValue = model->BSIM3v32vgdrMax; return(OK); case BSIM3v32_MOD_VGBR_MAX: value->rValue = model->BSIM3v32vgbrMax; return(OK); case BSIM3v32_MOD_VBSR_MAX: value->rValue = model->BSIM3v32vbsrMax; return(OK); case BSIM3v32_MOD_VBDR_MAX: value->rValue = model->BSIM3v32vbdrMax; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim3v32/b3v32mdel.c0000644000175000017500000000152713546075722022405 0ustar carstencarsten/**** BSIM3v3.2.4, Released by Xuemei Xi 12/21/2001 ****/ /********** * Copyright 2001 Regents of the University of California. All rights reserved. * File: b3mdel.c of BSIM3v3.2.4 * Author: 1995 Min-Chie Jeng and Mansun Chan. * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi * Modified by Paolo Nenzi 2002 **********/ #include "ngspice/ngspice.h" #include "bsim3v32def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3v32mDelete(GENmodel *gen_model) { BSIM3v32model *model = (BSIM3v32model *) gen_model; #ifdef USE_OMP FREE(model->BSIM3v32InstanceArray); #endif struct bsim3v32SizeDependParam *p = model->pSizeDependParamKnot; while (p) { struct bsim3v32SizeDependParam *next_p = p->pNext; FREE(p); p = next_p; } FREE(model->BSIM3v32version); return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim3v32/b3v32check.c0000644000175000017500000005002513546075722022536 0ustar carstencarsten/**** BSIM3v3.2.4, Released by Xuemei Xi 12/14/2001 ****/ /********** * Copyright 2001 Regents of the University of California. All rights reserved. * File: b3check.c of BSIM3v3.2.4 * Author: 1995 Min-Chie Jeng * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi * Modified by Xuemei Xi, 10/05, 12/14, 2001. * Modified by Paolo Nenzi 2002 and Dietmar Warning 2003 **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3v32def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" int BSIM3v32checkModel (BSIM3v32model *model, BSIM3v32instance *here, CKTcircuit *ckt) { struct bsim3v32SizeDependParam *pParam; int Fatal_Flag = 0; FILE *fplog; NG_IGNORE(ckt); if ((fplog = fopen("b3v32check.log", "w")) != NULL) { pParam = here->pParam; fprintf (fplog, "BSIM3 Model (Supports: v3.2, v3.2.2, v3.2.3, v3.2.4)\n"); fprintf (fplog, "Parameter Checking.\n"); fprintf (fplog, "Model = %s\n", model->BSIM3v32modName); fprintf (fplog, "W = %g, L = %g, M = %g\n", here->BSIM3v32w, here->BSIM3v32l, here->BSIM3v32m); if ((strcmp(model->BSIM3v32version, "3.2.4")) && (strncmp(model->BSIM3v32version, "3.24", 4)) && (strcmp(model->BSIM3v32version, "3.2.3")) && (strncmp(model->BSIM3v32version, "3.23", 4)) && (strcmp(model->BSIM3v32version, "3.2.2")) && (strncmp(model->BSIM3v32version, "3.22", 4)) && (strncmp(model->BSIM3v32version, "3.2", 3)) && (strncmp(model->BSIM3v32version, "3.20", 4))) { fprintf (fplog, "Warning: This model supports BSIM3v3.2, BSIM3v3.2.2, BSIM3v3.2.3, BSIM3v3.2.4\n"); fprintf (fplog, "You specified a wrong version number. Working now with BSIM3v3.2.4.\n"); printf ("Warning: This model supports BSIM3v3.2, BSIM3v3.2.2, BSIM3v3.2.3, BSIM3v3.2.4\n"); printf ("You specified a wrong version number. Working now with BSIM3v3.2.4.\n"); } if (pParam->BSIM3v32nlx < -pParam->BSIM3v32leff) { fprintf(fplog, "Fatal: Nlx = %g is less than -Leff.\n", pParam->BSIM3v32nlx); printf("Fatal: Nlx = %g is less than -Leff.\n", pParam->BSIM3v32nlx); Fatal_Flag = 1; } if (model->BSIM3v32tox <= 0.0) { fprintf(fplog, "Fatal: Tox = %g is not positive.\n", model->BSIM3v32tox); printf("Fatal: Tox = %g is not positive.\n", model->BSIM3v32tox); Fatal_Flag = 1; } if (model->BSIM3v32toxm <= 0.0) { fprintf(fplog, "Fatal: Toxm = %g is not positive.\n", model->BSIM3v32toxm); printf("Fatal: Toxm = %g is not positive.\n", model->BSIM3v32toxm); Fatal_Flag = 1; } if (pParam->BSIM3v32npeak <= 0.0) { fprintf(fplog, "Fatal: Nch = %g is not positive.\n", pParam->BSIM3v32npeak); printf("Fatal: Nch = %g is not positive.\n", pParam->BSIM3v32npeak); Fatal_Flag = 1; } if (pParam->BSIM3v32nsub <= 0.0) { fprintf(fplog, "Fatal: Nsub = %g is not positive.\n", pParam->BSIM3v32nsub); printf("Fatal: Nsub = %g is not positive.\n", pParam->BSIM3v32nsub); Fatal_Flag = 1; } if (pParam->BSIM3v32ngate < 0.0) { fprintf(fplog, "Fatal: Ngate = %g is not positive.\n", pParam->BSIM3v32ngate); printf("Fatal: Ngate = %g Ngate is not positive.\n", pParam->BSIM3v32ngate); Fatal_Flag = 1; } if (pParam->BSIM3v32ngate > 1.e25) { fprintf(fplog, "Fatal: Ngate = %g is too high.\n", pParam->BSIM3v32ngate); printf("Fatal: Ngate = %g Ngate is too high\n", pParam->BSIM3v32ngate); Fatal_Flag = 1; } if (pParam->BSIM3v32xj <= 0.0) { fprintf(fplog, "Fatal: Xj = %g is not positive.\n", pParam->BSIM3v32xj); printf("Fatal: Xj = %g is not positive.\n", pParam->BSIM3v32xj); Fatal_Flag = 1; } if (pParam->BSIM3v32dvt1 < 0.0) { fprintf(fplog, "Fatal: Dvt1 = %g is negative.\n", pParam->BSIM3v32dvt1); printf("Fatal: Dvt1 = %g is negative.\n", pParam->BSIM3v32dvt1); Fatal_Flag = 1; } if (pParam->BSIM3v32dvt1w < 0.0) { fprintf(fplog, "Fatal: Dvt1w = %g is negative.\n", pParam->BSIM3v32dvt1w); printf("Fatal: Dvt1w = %g is negative.\n", pParam->BSIM3v32dvt1w); Fatal_Flag = 1; } if (pParam->BSIM3v32w0 == -pParam->BSIM3v32weff) { fprintf(fplog, "Fatal: (W0 + Weff) = 0 causing divided-by-zero.\n"); printf("Fatal: (W0 + Weff) = 0 causing divided-by-zero.\n"); Fatal_Flag = 1; } if (pParam->BSIM3v32dsub < 0.0) { fprintf(fplog, "Fatal: Dsub = %g is negative.\n", pParam->BSIM3v32dsub); printf("Fatal: Dsub = %g is negative.\n", pParam->BSIM3v32dsub); Fatal_Flag = 1; } if (pParam->BSIM3v32b1 == -pParam->BSIM3v32weff) { fprintf(fplog, "Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); printf("Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); Fatal_Flag = 1; } if (pParam->BSIM3v32u0temp <= 0.0) { fprintf(fplog, "Fatal: u0 at current temperature = %g is not positive.\n", pParam->BSIM3v32u0temp); printf("Fatal: u0 at current temperature = %g is not positive.\n", pParam->BSIM3v32u0temp); Fatal_Flag = 1; } /* Check delta parameter */ if (pParam->BSIM3v32delta < 0.0) { fprintf(fplog, "Fatal: Delta = %g is less than zero.\n", pParam->BSIM3v32delta); printf("Fatal: Delta = %g is less than zero.\n", pParam->BSIM3v32delta); Fatal_Flag = 1; } if (pParam->BSIM3v32vsattemp <= 0.0) { fprintf(fplog, "Fatal: Vsat at current temperature = %g is not positive.\n", pParam->BSIM3v32vsattemp); printf("Fatal: Vsat at current temperature = %g is not positive.\n", pParam->BSIM3v32vsattemp); Fatal_Flag = 1; } /* Check Rout parameters */ if (pParam->BSIM3v32pclm <= 0.0) { fprintf(fplog, "Fatal: Pclm = %g is not positive.\n", pParam->BSIM3v32pclm); printf("Fatal: Pclm = %g is not positive.\n", pParam->BSIM3v32pclm); Fatal_Flag = 1; } if (pParam->BSIM3v32drout < 0.0) { fprintf(fplog, "Fatal: Drout = %g is negative.\n", pParam->BSIM3v32drout); printf("Fatal: Drout = %g is negative.\n", pParam->BSIM3v32drout); Fatal_Flag = 1; } if (pParam->BSIM3v32pscbe2 <= 0.0) { fprintf(fplog, "Warning: Pscbe2 = %g is not positive.\n", pParam->BSIM3v32pscbe2); printf("Warning: Pscbe2 = %g is not positive.\n", pParam->BSIM3v32pscbe2); } /* ACM model */ if (model->BSIM3v32acmMod == 0) { if (model->BSIM3v32unitLengthSidewallJctCap > 0.0 || model->BSIM3v32unitLengthGateSidewallJctCap > 0.0) { if (here->BSIM3v32drainPerimeter < pParam->BSIM3v32weff) { fprintf(fplog, "Warning: Pd = %g is less than W.\n", here->BSIM3v32drainPerimeter); printf("Warning: Pd = %g is less than W.\n", here->BSIM3v32drainPerimeter); } if (here->BSIM3v32sourcePerimeter < pParam->BSIM3v32weff) { fprintf(fplog, "Warning: Ps = %g is less than W.\n", here->BSIM3v32sourcePerimeter); printf("Warning: Ps = %g is less than W.\n", here->BSIM3v32sourcePerimeter); } } } if ((model->BSIM3v32calcacm > 0) && (model->BSIM3v32acmMod != 12)) { fprintf(fplog, "Warning: CALCACM = %d is wrong. Set back to 0.\n", model->BSIM3v32calcacm); printf("Warning: CALCACM = %d is wrong. Set back to 0.\n", model->BSIM3v32calcacm); model->BSIM3v32calcacm = 0; } if (pParam->BSIM3v32noff < 0.1) { fprintf(fplog, "Warning: Noff = %g is too small.\n", pParam->BSIM3v32noff); printf("Warning: Noff = %g is too small.\n", pParam->BSIM3v32noff); } if (pParam->BSIM3v32noff > 4.0) { fprintf(fplog, "Warning: Noff = %g is too large.\n", pParam->BSIM3v32noff); printf("Warning: Noff = %g is too large.\n", pParam->BSIM3v32noff); } if (pParam->BSIM3v32voffcv < -0.5) { fprintf(fplog, "Warning: Voffcv = %g is too small.\n", pParam->BSIM3v32voffcv); printf("Warning: Voffcv = %g is too small.\n", pParam->BSIM3v32voffcv); } if (pParam->BSIM3v32voffcv > 0.5) { fprintf(fplog, "Warning: Voffcv = %g is too large.\n", pParam->BSIM3v32voffcv); printf("Warning: Voffcv = %g is too large.\n", pParam->BSIM3v32voffcv); } if (model->BSIM3v32ijth < 0.0) { fprintf(fplog, "Fatal: Ijth = %g cannot be negative.\n", model->BSIM3v32ijth); printf("Fatal: Ijth = %g cannot be negative.\n", model->BSIM3v32ijth); Fatal_Flag = 1; } /* Check capacitance parameters */ if (pParam->BSIM3v32clc < 0.0) { fprintf(fplog, "Fatal: Clc = %g is negative.\n", pParam->BSIM3v32clc); printf("Fatal: Clc = %g is negative.\n", pParam->BSIM3v32clc); Fatal_Flag = 1; } if (pParam->BSIM3v32moin < 5.0) { fprintf(fplog, "Warning: Moin = %g is too small.\n", pParam->BSIM3v32moin); printf("Warning: Moin = %g is too small.\n", pParam->BSIM3v32moin); } if (pParam->BSIM3v32moin > 25.0) { fprintf(fplog, "Warning: Moin = %g is too large.\n", pParam->BSIM3v32moin); printf("Warning: Moin = %g is too large.\n", pParam->BSIM3v32moin); } if(model->BSIM3v32capMod ==3) { if (pParam->BSIM3v32acde < 0.4) { fprintf(fplog, "Warning: Acde = %g is too small.\n", pParam->BSIM3v32acde); printf("Warning: Acde = %g is too small.\n", pParam->BSIM3v32acde); } if (pParam->BSIM3v32acde > 1.6) { fprintf(fplog, "Warning: Acde = %g is too large.\n", pParam->BSIM3v32acde); printf("Warning: Acde = %g is too large.\n", pParam->BSIM3v32acde); } } if (model->BSIM3v32paramChk ==1) { /* Check L and W parameters */ if (pParam->BSIM3v32leff <= 5.0e-8) { fprintf(fplog, "Warning: Leff = %g may be too small.\n", pParam->BSIM3v32leff); printf("Warning: Leff = %g may be too small.\n", pParam->BSIM3v32leff); } if (pParam->BSIM3v32leffCV <= 5.0e-8) { fprintf(fplog, "Warning: Leff for CV = %g may be too small.\n", pParam->BSIM3v32leffCV); printf("Warning: Leff for CV = %g may be too small.\n", pParam->BSIM3v32leffCV); } if (pParam->BSIM3v32weff <= 1.0e-7) { fprintf(fplog, "Warning: Weff = %g may be too small.\n", pParam->BSIM3v32weff); printf("Warning: Weff = %g may be too small.\n", pParam->BSIM3v32weff); } if (pParam->BSIM3v32weffCV <= 1.0e-7) { fprintf(fplog, "Warning: Weff for CV = %g may be too small.\n", pParam->BSIM3v32weffCV); printf("Warning: Weff for CV = %g may be too small.\n", pParam->BSIM3v32weffCV); } /* Check threshold voltage parameters */ if (pParam->BSIM3v32nlx < 0.0) { fprintf(fplog, "Warning: Nlx = %g is negative.\n", pParam->BSIM3v32nlx); printf("Warning: Nlx = %g is negative.\n", pParam->BSIM3v32nlx); } if (model->BSIM3v32tox < 1.0e-9) { fprintf(fplog, "Warning: Tox = %g is less than 10A.\n", model->BSIM3v32tox); printf("Warning: Tox = %g is less than 10A.\n", model->BSIM3v32tox); } if (pParam->BSIM3v32npeak <= 1.0e15) { fprintf(fplog, "Warning: Nch = %g may be too small.\n", pParam->BSIM3v32npeak); printf("Warning: Nch = %g may be too small.\n", pParam->BSIM3v32npeak); } else if (pParam->BSIM3v32npeak >= 1.0e21) { fprintf(fplog, "Warning: Nch = %g may be too large.\n", pParam->BSIM3v32npeak); printf("Warning: Nch = %g may be too large.\n", pParam->BSIM3v32npeak); } if (pParam->BSIM3v32nsub <= 1.0e14) { fprintf(fplog, "Warning: Nsub = %g may be too small.\n", pParam->BSIM3v32nsub); printf("Warning: Nsub = %g may be too small.\n", pParam->BSIM3v32nsub); } else if (pParam->BSIM3v32nsub >= 1.0e21) { fprintf(fplog, "Warning: Nsub = %g may be too large.\n", pParam->BSIM3v32nsub); printf("Warning: Nsub = %g may be too large.\n", pParam->BSIM3v32nsub); } if ((pParam->BSIM3v32ngate > 0.0) && (pParam->BSIM3v32ngate <= 1.e18)) { fprintf(fplog, "Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->BSIM3v32ngate); printf("Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->BSIM3v32ngate); } if (pParam->BSIM3v32dvt0 < 0.0) { fprintf(fplog, "Warning: Dvt0 = %g is negative.\n", pParam->BSIM3v32dvt0); printf("Warning: Dvt0 = %g is negative.\n", pParam->BSIM3v32dvt0); } if (fabs(1.0e-6 / (pParam->BSIM3v32w0 + pParam->BSIM3v32weff)) > 10.0) { fprintf(fplog, "Warning: (W0 + Weff) may be too small.\n"); printf("Warning: (W0 + Weff) may be too small.\n"); } /* Check subthreshold parameters */ if (pParam->BSIM3v32nfactor < 0.0) { fprintf(fplog, "Warning: Nfactor = %g is negative.\n", pParam->BSIM3v32nfactor); printf("Warning: Nfactor = %g is negative.\n", pParam->BSIM3v32nfactor); } if (pParam->BSIM3v32cdsc < 0.0) { fprintf(fplog, "Warning: Cdsc = %g is negative.\n", pParam->BSIM3v32cdsc); printf("Warning: Cdsc = %g is negative.\n", pParam->BSIM3v32cdsc); } if (pParam->BSIM3v32cdscd < 0.0) { fprintf(fplog, "Warning: Cdscd = %g is negative.\n", pParam->BSIM3v32cdscd); printf("Warning: Cdscd = %g is negative.\n", pParam->BSIM3v32cdscd); } /* Check DIBL parameters */ if (pParam->BSIM3v32eta0 < 0.0) { fprintf(fplog, "Warning: Eta0 = %g is negative.\n", pParam->BSIM3v32eta0); printf("Warning: Eta0 = %g is negative.\n", pParam->BSIM3v32eta0); } /* Check Abulk parameters */ if (fabs(1.0e-6 / (pParam->BSIM3v32b1 + pParam->BSIM3v32weff)) > 10.0) { fprintf(fplog, "Warning: (B1 + Weff) may be too small.\n"); printf("Warning: (B1 + Weff) may be too small.\n"); } /* Check Saturation parameters */ if (pParam->BSIM3v32a2 < 0.01) { fprintf(fplog, "Warning: A2 = %g is too small. Set to 0.01.\n", pParam->BSIM3v32a2); printf("Warning: A2 = %g is too small. Set to 0.01.\n", pParam->BSIM3v32a2); pParam->BSIM3v32a2 = 0.01; } else if (pParam->BSIM3v32a2 > 1.0) { fprintf(fplog, "Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->BSIM3v32a2); printf("Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->BSIM3v32a2); pParam->BSIM3v32a2 = 1.0; pParam->BSIM3v32a1 = 0.0; } if (pParam->BSIM3v32rdsw < 0.0) { fprintf(fplog, "Warning: Rdsw = %g is negative. Set to zero.\n", pParam->BSIM3v32rdsw); printf("Warning: Rdsw = %g is negative. Set to zero.\n", pParam->BSIM3v32rdsw); pParam->BSIM3v32rdsw = 0.0; pParam->BSIM3v32rds0 = 0.0; } else if ((pParam->BSIM3v32rds0 > 0.0) && (pParam->BSIM3v32rds0 < 0.001)) { fprintf(fplog, "Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n", pParam->BSIM3v32rds0); printf("Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n", pParam->BSIM3v32rds0); pParam->BSIM3v32rds0 = 0.0; } if (pParam->BSIM3v32vsattemp < 1.0e3) { fprintf(fplog, "Warning: Vsat at current temperature = %g may be too small.\n", pParam->BSIM3v32vsattemp); printf("Warning: Vsat at current temperature = %g may be too small.\n", pParam->BSIM3v32vsattemp); } if (pParam->BSIM3v32pdibl1 < 0.0) { fprintf(fplog, "Warning: Pdibl1 = %g is negative.\n", pParam->BSIM3v32pdibl1); printf("Warning: Pdibl1 = %g is negative.\n", pParam->BSIM3v32pdibl1); } if (pParam->BSIM3v32pdibl2 < 0.0) { fprintf(fplog, "Warning: Pdibl2 = %g is negative.\n", pParam->BSIM3v32pdibl2); printf("Warning: Pdibl2 = %g is negative.\n", pParam->BSIM3v32pdibl2); } /* Check overlap capacitance parameters */ if (model->BSIM3v32cgdo < 0.0) { fprintf(fplog, "Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM3v32cgdo); printf("Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM3v32cgdo); model->BSIM3v32cgdo = 0.0; } if (model->BSIM3v32cgso < 0.0) { fprintf(fplog, "Warning: cgso = %g is negative. Set to zero.\n", model->BSIM3v32cgso); printf("Warning: cgso = %g is negative. Set to zero.\n", model->BSIM3v32cgso); model->BSIM3v32cgso = 0.0; } if (model->BSIM3v32cgbo < 0.0) { fprintf(fplog, "Warning: cgbo = %g is negative. Set to zero.\n", model->BSIM3v32cgbo); printf("Warning: cgbo = %g is negative. Set to zero.\n", model->BSIM3v32cgbo); model->BSIM3v32cgbo = 0.0; } }/* loop for the parameter check for warning messages */ fclose(fplog); } else { fprintf(stderr, "Warning: Can't open log file. Parameter checking skipped.\n"); } return(Fatal_Flag); } tmpk8ny_4pz/src/spicelib/devices/bsim3v32/bsim3v32def.h0000644000175000017500000016633013546075722022744 0ustar carstencarsten/********** Copyright 2001 Regents of the University of California. All rights reserved. Author: 1995 Min-Chie Jeng and Mansun Chan. Author: 1997-1999 Weidong Liu. Author: 2001 Xuemei Xi Modified by Paolo Nenzi 2002 and Dietmar Warning 2003 File: bsim3v32def.h **********/ #ifndef BSIM3v32 #define BSIM3v32 #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" typedef struct sBSIM3v32instance { struct GENinstance gen; #define BSIM3v32modPtr(inst) ((struct sBSIM3v32model *)((inst)->gen.GENmodPtr)) #define BSIM3v32nextInstance(inst) ((struct sBSIM3v32instance *)((inst)->gen.GENnextInstance)) #define BSIM3v32name gen.GENname #define BSIM3v32states gen.GENstate const int BSIM3v32dNode; const int BSIM3v32gNode; const int BSIM3v32sNode; const int BSIM3v32bNode; int BSIM3v32dNodePrime; int BSIM3v32sNodePrime; int BSIM3v32qNode; /* MCJ */ /* MCJ */ double BSIM3v32ueff; double BSIM3v32thetavth; double BSIM3v32von; double BSIM3v32vdsat; double BSIM3v32cgdo; double BSIM3v32cgso; double BSIM3v32vjsm; double BSIM3v32IsEvjsm; double BSIM3v32vjdm; double BSIM3v32IsEvjdm; double BSIM3v32l; double BSIM3v32w; double BSIM3v32m; double BSIM3v32drainArea; double BSIM3v32sourceArea; double BSIM3v32drainSquares; double BSIM3v32sourceSquares; double BSIM3v32drainPerimeter; double BSIM3v32sourcePerimeter; double BSIM3v32sourceConductance; double BSIM3v32drainConductance; double BSIM3v32delvto; double BSIM3v32mulu0; double BSIM3v32vth0; double BSIM3v32vfb; double BSIM3v32vfbzb; double BSIM3v32u0temp; double BSIM3v32tconst; double BSIM3v32icVBS; double BSIM3v32icVDS; double BSIM3v32icVGS; int BSIM3v32off; int BSIM3v32mode; int BSIM3v32nqsMod; int BSIM3v32geo; /* OP point */ double BSIM3v32qinv; double BSIM3v32cd; double BSIM3v32cbs; double BSIM3v32cbd; double BSIM3v32csub; double BSIM3v32gm; double BSIM3v32gds; double BSIM3v32gmbs; double BSIM3v32gbd; double BSIM3v32gbs; double BSIM3v32gbbs; double BSIM3v32gbgs; double BSIM3v32gbds; double BSIM3v32cggb; double BSIM3v32cgdb; double BSIM3v32cgsb; double BSIM3v32cbgb; double BSIM3v32cbdb; double BSIM3v32cbsb; double BSIM3v32cdgb; double BSIM3v32cddb; double BSIM3v32cdsb; double BSIM3v32capbd; double BSIM3v32capbs; double BSIM3v32cqgb; double BSIM3v32cqdb; double BSIM3v32cqsb; double BSIM3v32cqbb; double BSIM3v32qgate; double BSIM3v32qbulk; double BSIM3v32qdrn; double BSIM3v32gtau; double BSIM3v32gtg; double BSIM3v32gtd; double BSIM3v32gts; double BSIM3v32gtb; double BSIM3v32rds; /* Noise bugfix */ double BSIM3v32Vgsteff; double BSIM3v32Vdseff; double BSIM3v32Abulk; double BSIM3v32AbovVgst2Vtm; struct bsim3v32SizeDependParam *pParam; unsigned BSIM3v32lGiven :1; unsigned BSIM3v32wGiven :1; unsigned BSIM3v32mGiven :1; unsigned BSIM3v32drainAreaGiven :1; unsigned BSIM3v32sourceAreaGiven :1; unsigned BSIM3v32drainSquaresGiven :1; unsigned BSIM3v32sourceSquaresGiven :1; unsigned BSIM3v32drainPerimeterGiven :1; unsigned BSIM3v32sourcePerimeterGiven :1; unsigned BSIM3v32delvtoGiven :1; unsigned BSIM3v32mulu0Given :1; unsigned BSIM3v32dNodePrimeSet :1; unsigned BSIM3v32sNodePrimeSet :1; unsigned BSIM3v32icVBSGiven :1; unsigned BSIM3v32icVDSGiven :1; unsigned BSIM3v32icVGSGiven :1; unsigned BSIM3v32nqsModGiven :1; unsigned BSIM3v32geoGiven :1; double *BSIM3v32DdPtr; double *BSIM3v32GgPtr; double *BSIM3v32SsPtr; double *BSIM3v32BbPtr; double *BSIM3v32DPdpPtr; double *BSIM3v32SPspPtr; double *BSIM3v32DdpPtr; double *BSIM3v32GbPtr; double *BSIM3v32GdpPtr; double *BSIM3v32GspPtr; double *BSIM3v32SspPtr; double *BSIM3v32BdpPtr; double *BSIM3v32BspPtr; double *BSIM3v32DPspPtr; double *BSIM3v32DPdPtr; double *BSIM3v32BgPtr; double *BSIM3v32DPgPtr; double *BSIM3v32SPgPtr; double *BSIM3v32SPsPtr; double *BSIM3v32DPbPtr; double *BSIM3v32SPbPtr; double *BSIM3v32SPdpPtr; double *BSIM3v32QqPtr; double *BSIM3v32QdpPtr; double *BSIM3v32QgPtr; double *BSIM3v32QspPtr; double *BSIM3v32QbPtr; double *BSIM3v32DPqPtr; double *BSIM3v32GqPtr; double *BSIM3v32SPqPtr; double *BSIM3v32BqPtr; #ifdef USE_OMP /* per instance storage of results, to update matrix at a later stge */ double BSIM3v32rhsG; double BSIM3v32rhsB; double BSIM3v32rhsD; double BSIM3v32rhsS; double BSIM3v32rhsQ; double BSIM3v32DdPt; double BSIM3v32GgPt; double BSIM3v32SsPt; double BSIM3v32BbPt; double BSIM3v32DPdpPt; double BSIM3v32SPspPt; double BSIM3v32DdpPt; double BSIM3v32GbPt; double BSIM3v32GdpPt; double BSIM3v32GspPt; double BSIM3v32SspPt; double BSIM3v32BdpPt; double BSIM3v32BspPt; double BSIM3v32DPspPt; double BSIM3v32DPdPt; double BSIM3v32BgPt; double BSIM3v32DPgPt; double BSIM3v32SPgPt; double BSIM3v32SPsPt; double BSIM3v32DPbPt; double BSIM3v32SPbPt; double BSIM3v32SPdpPt; double BSIM3v32QqPt; double BSIM3v32QdpPt; double BSIM3v32QgPt; double BSIM3v32QspPt; double BSIM3v32QbPt; double BSIM3v32DPqPt; double BSIM3v32GqPt; double BSIM3v32SPqPt; double BSIM3v32BqPt; #endif #define BSIM3v32vbd BSIM3v32states+ 0 #define BSIM3v32vbs BSIM3v32states+ 1 #define BSIM3v32vgs BSIM3v32states+ 2 #define BSIM3v32vds BSIM3v32states+ 3 #define BSIM3v32qb BSIM3v32states+ 4 #define BSIM3v32cqb BSIM3v32states+ 5 #define BSIM3v32qg BSIM3v32states+ 6 #define BSIM3v32cqg BSIM3v32states+ 7 #define BSIM3v32qd BSIM3v32states+ 8 #define BSIM3v32cqd BSIM3v32states+ 9 #define BSIM3v32qbs BSIM3v32states+ 10 #define BSIM3v32qbd BSIM3v32states+ 11 #define BSIM3v32qcheq BSIM3v32states+ 12 #define BSIM3v32cqcheq BSIM3v32states+ 13 #define BSIM3v32qcdump BSIM3v32states+ 14 #define BSIM3v32cqcdump BSIM3v32states+ 15 #define BSIM3v32qdef BSIM3v32states+ 16 #define BSIM3v32numStates 17 /* indices to the array of BSIM3v32 NOISE SOURCES */ #define BSIM3v32RDNOIZ 0 #define BSIM3v32RSNOIZ 1 #define BSIM3v32IDNOIZ 2 #define BSIM3v32FLNOIZ 3 #define BSIM3v32TOTNOIZ 4 #define BSIM3v32NSRCS 5 /* the number of BSIM3v32 MOSFET noise sources */ #ifndef NONOISE double BSIM3v32nVar[NSTATVARS][BSIM3v32NSRCS]; #else /* NONOISE */ double **BSIM3v32nVar; #endif /* NONOISE */ } BSIM3v32instance ; struct bsim3v32SizeDependParam { double Width; double Length; double BSIM3v32cdsc; double BSIM3v32cdscb; double BSIM3v32cdscd; double BSIM3v32cit; double BSIM3v32nfactor; double BSIM3v32xj; double BSIM3v32vsat; double BSIM3v32at; double BSIM3v32a0; double BSIM3v32ags; double BSIM3v32a1; double BSIM3v32a2; double BSIM3v32keta; double BSIM3v32nsub; double BSIM3v32npeak; double BSIM3v32ngate; double BSIM3v32gamma1; double BSIM3v32gamma2; double BSIM3v32vbx; double BSIM3v32vbi; double BSIM3v32vbm; double BSIM3v32vbsc; double BSIM3v32xt; double BSIM3v32phi; double BSIM3v32litl; double BSIM3v32k1; double BSIM3v32kt1; double BSIM3v32kt1l; double BSIM3v32kt2; double BSIM3v32k2; double BSIM3v32k3; double BSIM3v32k3b; double BSIM3v32w0; double BSIM3v32nlx; double BSIM3v32dvt0; double BSIM3v32dvt1; double BSIM3v32dvt2; double BSIM3v32dvt0w; double BSIM3v32dvt1w; double BSIM3v32dvt2w; double BSIM3v32drout; double BSIM3v32dsub; double BSIM3v32vth0; double BSIM3v32ua; double BSIM3v32ua1; double BSIM3v32ub; double BSIM3v32ub1; double BSIM3v32uc; double BSIM3v32uc1; double BSIM3v32u0; double BSIM3v32ute; double BSIM3v32voff; double BSIM3v32vfb; double BSIM3v32delta; double BSIM3v32rdsw; double BSIM3v32rds0; double BSIM3v32prwg; double BSIM3v32prwb; double BSIM3v32prt; double BSIM3v32eta0; double BSIM3v32etab; double BSIM3v32pclm; double BSIM3v32pdibl1; double BSIM3v32pdibl2; double BSIM3v32pdiblb; double BSIM3v32pscbe1; double BSIM3v32pscbe2; double BSIM3v32pvag; double BSIM3v32wr; double BSIM3v32dwg; double BSIM3v32dwb; double BSIM3v32b0; double BSIM3v32b1; double BSIM3v32alpha0; double BSIM3v32alpha1; double BSIM3v32beta0; /* CV model */ double BSIM3v32elm; double BSIM3v32cgsl; double BSIM3v32cgdl; double BSIM3v32ckappa; double BSIM3v32cf; double BSIM3v32clc; double BSIM3v32cle; double BSIM3v32vfbcv; double BSIM3v32noff; double BSIM3v32voffcv; double BSIM3v32acde; double BSIM3v32moin; /* Pre-calculated constants */ double BSIM3v32dw; double BSIM3v32dl; double BSIM3v32leff; double BSIM3v32weff; double BSIM3v32dwc; double BSIM3v32dlc; double BSIM3v32leffCV; double BSIM3v32weffCV; double BSIM3v32abulkCVfactor; double BSIM3v32cgso; double BSIM3v32cgdo; double BSIM3v32cgbo; double BSIM3v32tconst; double BSIM3v32u0temp; double BSIM3v32vsattemp; double BSIM3v32sqrtPhi; double BSIM3v32phis3; double BSIM3v32Xdep0; double BSIM3v32sqrtXdep0; double BSIM3v32theta0vb0; double BSIM3v32thetaRout; double BSIM3v32cof1; double BSIM3v32cof2; double BSIM3v32cof3; double BSIM3v32cof4; double BSIM3v32cdep0; double BSIM3v32vfbzb; double BSIM3v32ldeb; double BSIM3v32k1ox; double BSIM3v32k2ox; struct bsim3v32SizeDependParam *pNext; }; typedef struct sBSIM3v32model { struct GENmodel gen; #define BSIM3v32modType gen.GENmodType #define BSIM3v32nextModel(inst) ((struct sBSIM3v32model *)((inst)->gen.GENnextModel)) #define BSIM3v32instances(inst) ((BSIM3v32instance *)((inst)->gen.GENinstances)) #define BSIM3v32modName gen.GENmodName int BSIM3v32type; int BSIM3v32mobMod; int BSIM3v32capMod; int BSIM3v32acmMod; int BSIM3v32calcacm; int BSIM3v32noiMod; int BSIM3v32nqsMod; int BSIM3v32binUnit; int BSIM3v32paramChk; char *BSIM3v32version; /* The following field is an integer coding * of BSIM3v32version. */ int BSIM3v32intVersion; #define BSIM3v32V324 324 /* BSIM3v32 V3.2.4 */ #define BSIM3v32V323 323 /* BSIM3v32 V3.2.3 */ #define BSIM3v32V322 322 /* BSIM3v32 V3.2.2 */ #define BSIM3v32V32 32 /* BSIM3v32 V3.2 */ #define BSIM3v32V3OLD 0 /* Old model */ double BSIM3v32tox; double BSIM3v32toxm; double BSIM3v32cdsc; double BSIM3v32cdscb; double BSIM3v32cdscd; double BSIM3v32cit; double BSIM3v32nfactor; double BSIM3v32xj; double BSIM3v32vsat; double BSIM3v32at; double BSIM3v32a0; double BSIM3v32ags; double BSIM3v32a1; double BSIM3v32a2; double BSIM3v32keta; double BSIM3v32nsub; double BSIM3v32npeak; double BSIM3v32ngate; double BSIM3v32gamma1; double BSIM3v32gamma2; double BSIM3v32vbx; double BSIM3v32vbm; double BSIM3v32xt; double BSIM3v32k1; double BSIM3v32kt1; double BSIM3v32kt1l; double BSIM3v32kt2; double BSIM3v32k2; double BSIM3v32k3; double BSIM3v32k3b; double BSIM3v32w0; double BSIM3v32nlx; double BSIM3v32dvt0; double BSIM3v32dvt1; double BSIM3v32dvt2; double BSIM3v32dvt0w; double BSIM3v32dvt1w; double BSIM3v32dvt2w; double BSIM3v32drout; double BSIM3v32dsub; double BSIM3v32vth0; double BSIM3v32ua; double BSIM3v32ua1; double BSIM3v32ub; double BSIM3v32ub1; double BSIM3v32uc; double BSIM3v32uc1; double BSIM3v32u0; double BSIM3v32ute; double BSIM3v32voff; double BSIM3v32delta; double BSIM3v32rdsw; double BSIM3v32prwg; double BSIM3v32prwb; double BSIM3v32prt; double BSIM3v32eta0; double BSIM3v32etab; double BSIM3v32pclm; double BSIM3v32pdibl1; double BSIM3v32pdibl2; double BSIM3v32pdiblb; double BSIM3v32pscbe1; double BSIM3v32pscbe2; double BSIM3v32pvag; double BSIM3v32wr; double BSIM3v32dwg; double BSIM3v32dwb; double BSIM3v32b0; double BSIM3v32b1; double BSIM3v32alpha0; double BSIM3v32alpha1; double BSIM3v32beta0; double BSIM3v32ijth; double BSIM3v32vfb; /* CV model */ double BSIM3v32elm; double BSIM3v32cgsl; double BSIM3v32cgdl; double BSIM3v32ckappa; double BSIM3v32cf; double BSIM3v32vfbcv; double BSIM3v32clc; double BSIM3v32cle; double BSIM3v32dwc; double BSIM3v32dlc; double BSIM3v32noff; double BSIM3v32voffcv; double BSIM3v32acde; double BSIM3v32moin; double BSIM3v32tcj; double BSIM3v32tcjsw; double BSIM3v32tcjswg; double BSIM3v32tpb; double BSIM3v32tpbsw; double BSIM3v32tpbswg; /* ACM model */ double BSIM3v32xl; double BSIM3v32xw; double BSIM3v32hdif; double BSIM3v32ldif; double BSIM3v32ld; double BSIM3v32rd; double BSIM3v32rs; double BSIM3v32rdc; double BSIM3v32rsc; double BSIM3v32wmlt; double BSIM3v32lmlt; /* Length Dependence */ double BSIM3v32lcdsc; double BSIM3v32lcdscb; double BSIM3v32lcdscd; double BSIM3v32lcit; double BSIM3v32lnfactor; double BSIM3v32lxj; double BSIM3v32lvsat; double BSIM3v32lat; double BSIM3v32la0; double BSIM3v32lags; double BSIM3v32la1; double BSIM3v32la2; double BSIM3v32lketa; double BSIM3v32lnsub; double BSIM3v32lnpeak; double BSIM3v32lngate; double BSIM3v32lgamma1; double BSIM3v32lgamma2; double BSIM3v32lvbx; double BSIM3v32lvbm; double BSIM3v32lxt; double BSIM3v32lk1; double BSIM3v32lkt1; double BSIM3v32lkt1l; double BSIM3v32lkt2; double BSIM3v32lk2; double BSIM3v32lk3; double BSIM3v32lk3b; double BSIM3v32lw0; double BSIM3v32lnlx; double BSIM3v32ldvt0; double BSIM3v32ldvt1; double BSIM3v32ldvt2; double BSIM3v32ldvt0w; double BSIM3v32ldvt1w; double BSIM3v32ldvt2w; double BSIM3v32ldrout; double BSIM3v32ldsub; double BSIM3v32lvth0; double BSIM3v32lua; double BSIM3v32lua1; double BSIM3v32lub; double BSIM3v32lub1; double BSIM3v32luc; double BSIM3v32luc1; double BSIM3v32lu0; double BSIM3v32lute; double BSIM3v32lvoff; double BSIM3v32ldelta; double BSIM3v32lrdsw; double BSIM3v32lprwg; double BSIM3v32lprwb; double BSIM3v32lprt; double BSIM3v32leta0; double BSIM3v32letab; double BSIM3v32lpclm; double BSIM3v32lpdibl1; double BSIM3v32lpdibl2; double BSIM3v32lpdiblb; double BSIM3v32lpscbe1; double BSIM3v32lpscbe2; double BSIM3v32lpvag; double BSIM3v32lwr; double BSIM3v32ldwg; double BSIM3v32ldwb; double BSIM3v32lb0; double BSIM3v32lb1; double BSIM3v32lalpha0; double BSIM3v32lalpha1; double BSIM3v32lbeta0; double BSIM3v32lvfb; /* CV model */ double BSIM3v32lelm; double BSIM3v32lcgsl; double BSIM3v32lcgdl; double BSIM3v32lckappa; double BSIM3v32lcf; double BSIM3v32lclc; double BSIM3v32lcle; double BSIM3v32lvfbcv; double BSIM3v32lnoff; double BSIM3v32lvoffcv; double BSIM3v32lacde; double BSIM3v32lmoin; /* Width Dependence */ double BSIM3v32wcdsc; double BSIM3v32wcdscb; double BSIM3v32wcdscd; double BSIM3v32wcit; double BSIM3v32wnfactor; double BSIM3v32wxj; double BSIM3v32wvsat; double BSIM3v32wat; double BSIM3v32wa0; double BSIM3v32wags; double BSIM3v32wa1; double BSIM3v32wa2; double BSIM3v32wketa; double BSIM3v32wnsub; double BSIM3v32wnpeak; double BSIM3v32wngate; double BSIM3v32wgamma1; double BSIM3v32wgamma2; double BSIM3v32wvbx; double BSIM3v32wvbm; double BSIM3v32wxt; double BSIM3v32wk1; double BSIM3v32wkt1; double BSIM3v32wkt1l; double BSIM3v32wkt2; double BSIM3v32wk2; double BSIM3v32wk3; double BSIM3v32wk3b; double BSIM3v32ww0; double BSIM3v32wnlx; double BSIM3v32wdvt0; double BSIM3v32wdvt1; double BSIM3v32wdvt2; double BSIM3v32wdvt0w; double BSIM3v32wdvt1w; double BSIM3v32wdvt2w; double BSIM3v32wdrout; double BSIM3v32wdsub; double BSIM3v32wvth0; double BSIM3v32wua; double BSIM3v32wua1; double BSIM3v32wub; double BSIM3v32wub1; double BSIM3v32wuc; double BSIM3v32wuc1; double BSIM3v32wu0; double BSIM3v32wute; double BSIM3v32wvoff; double BSIM3v32wdelta; double BSIM3v32wrdsw; double BSIM3v32wprwg; double BSIM3v32wprwb; double BSIM3v32wprt; double BSIM3v32weta0; double BSIM3v32wetab; double BSIM3v32wpclm; double BSIM3v32wpdibl1; double BSIM3v32wpdibl2; double BSIM3v32wpdiblb; double BSIM3v32wpscbe1; double BSIM3v32wpscbe2; double BSIM3v32wpvag; double BSIM3v32wwr; double BSIM3v32wdwg; double BSIM3v32wdwb; double BSIM3v32wb0; double BSIM3v32wb1; double BSIM3v32walpha0; double BSIM3v32walpha1; double BSIM3v32wbeta0; double BSIM3v32wvfb; /* CV model */ double BSIM3v32welm; double BSIM3v32wcgsl; double BSIM3v32wcgdl; double BSIM3v32wckappa; double BSIM3v32wcf; double BSIM3v32wclc; double BSIM3v32wcle; double BSIM3v32wvfbcv; double BSIM3v32wnoff; double BSIM3v32wvoffcv; double BSIM3v32wacde; double BSIM3v32wmoin; /* Cross-term Dependence */ double BSIM3v32pcdsc; double BSIM3v32pcdscb; double BSIM3v32pcdscd; double BSIM3v32pcit; double BSIM3v32pnfactor; double BSIM3v32pxj; double BSIM3v32pvsat; double BSIM3v32pat; double BSIM3v32pa0; double BSIM3v32pags; double BSIM3v32pa1; double BSIM3v32pa2; double BSIM3v32pketa; double BSIM3v32pnsub; double BSIM3v32pnpeak; double BSIM3v32pngate; double BSIM3v32pgamma1; double BSIM3v32pgamma2; double BSIM3v32pvbx; double BSIM3v32pvbm; double BSIM3v32pxt; double BSIM3v32pk1; double BSIM3v32pkt1; double BSIM3v32pkt1l; double BSIM3v32pkt2; double BSIM3v32pk2; double BSIM3v32pk3; double BSIM3v32pk3b; double BSIM3v32pw0; double BSIM3v32pnlx; double BSIM3v32pdvt0; double BSIM3v32pdvt1; double BSIM3v32pdvt2; double BSIM3v32pdvt0w; double BSIM3v32pdvt1w; double BSIM3v32pdvt2w; double BSIM3v32pdrout; double BSIM3v32pdsub; double BSIM3v32pvth0; double BSIM3v32pua; double BSIM3v32pua1; double BSIM3v32pub; double BSIM3v32pub1; double BSIM3v32puc; double BSIM3v32puc1; double BSIM3v32pu0; double BSIM3v32pute; double BSIM3v32pvoff; double BSIM3v32pdelta; double BSIM3v32prdsw; double BSIM3v32pprwg; double BSIM3v32pprwb; double BSIM3v32pprt; double BSIM3v32peta0; double BSIM3v32petab; double BSIM3v32ppclm; double BSIM3v32ppdibl1; double BSIM3v32ppdibl2; double BSIM3v32ppdiblb; double BSIM3v32ppscbe1; double BSIM3v32ppscbe2; double BSIM3v32ppvag; double BSIM3v32pwr; double BSIM3v32pdwg; double BSIM3v32pdwb; double BSIM3v32pb0; double BSIM3v32pb1; double BSIM3v32palpha0; double BSIM3v32palpha1; double BSIM3v32pbeta0; double BSIM3v32pvfb; /* CV model */ double BSIM3v32pelm; double BSIM3v32pcgsl; double BSIM3v32pcgdl; double BSIM3v32pckappa; double BSIM3v32pcf; double BSIM3v32pclc; double BSIM3v32pcle; double BSIM3v32pvfbcv; double BSIM3v32pnoff; double BSIM3v32pvoffcv; double BSIM3v32pacde; double BSIM3v32pmoin; double BSIM3v32tnom; double BSIM3v32cgso; double BSIM3v32cgdo; double BSIM3v32cgbo; double BSIM3v32xpart; double BSIM3v32cFringOut; double BSIM3v32cFringMax; double BSIM3v32sheetResistance; double BSIM3v32jctSatCurDensity; double BSIM3v32jctSidewallSatCurDensity; double BSIM3v32bulkJctPotential; double BSIM3v32bulkJctBotGradingCoeff; double BSIM3v32bulkJctSideGradingCoeff; double BSIM3v32bulkJctGateSideGradingCoeff; double BSIM3v32sidewallJctPotential; double BSIM3v32GatesidewallJctPotential; double BSIM3v32unitAreaJctCap; double BSIM3v32unitLengthSidewallJctCap; double BSIM3v32unitLengthGateSidewallJctCap; double BSIM3v32jctEmissionCoeff; double BSIM3v32jctTempExponent; double BSIM3v32Lint; double BSIM3v32Ll; double BSIM3v32Llc; double BSIM3v32Lln; double BSIM3v32Lw; double BSIM3v32Lwc; double BSIM3v32Lwn; double BSIM3v32Lwl; double BSIM3v32Lwlc; double BSIM3v32Lmin; double BSIM3v32Lmax; double BSIM3v32Wint; double BSIM3v32Wl; double BSIM3v32Wlc; double BSIM3v32Wln; double BSIM3v32Ww; double BSIM3v32Wwc; double BSIM3v32Wwn; double BSIM3v32Wwl; double BSIM3v32Wwlc; double BSIM3v32Wmin; double BSIM3v32Wmax; /* Pre-calculated constants */ /* MCJ: move to size-dependent param. */ double BSIM3v32vtm; double BSIM3v32cox; double BSIM3v32cof1; double BSIM3v32cof2; double BSIM3v32cof3; double BSIM3v32cof4; double BSIM3v32vcrit; double BSIM3v32factor1; double BSIM3v32PhiB; double BSIM3v32PhiBSW; double BSIM3v32PhiBSWG; double BSIM3v32jctTempSatCurDensity; double BSIM3v32jctSidewallTempSatCurDensity; double BSIM3v32unitAreaTempJctCap; double BSIM3v32unitLengthSidewallTempJctCap; double BSIM3v32unitLengthGateSidewallTempJctCap; double BSIM3v32oxideTrapDensityA; double BSIM3v32oxideTrapDensityB; double BSIM3v32oxideTrapDensityC; double BSIM3v32em; double BSIM3v32ef; double BSIM3v32af; double BSIM3v32kf; double BSIM3v32vgsMax; double BSIM3v32vgdMax; double BSIM3v32vgbMax; double BSIM3v32vdsMax; double BSIM3v32vbsMax; double BSIM3v32vbdMax; double BSIM3v32vgsrMax; double BSIM3v32vgdrMax; double BSIM3v32vgbrMax; double BSIM3v32vbsrMax; double BSIM3v32vbdrMax; struct bsim3v32SizeDependParam *pSizeDependParamKnot; #ifdef USE_OMP int BSIM3v32InstCount; struct sBSIM3v32instance **BSIM3v32InstanceArray; #endif /* Flags */ unsigned BSIM3v32mobModGiven :1; unsigned BSIM3v32binUnitGiven :1; unsigned BSIM3v32capModGiven :1; unsigned BSIM3v32acmModGiven :1; unsigned BSIM3v32calcacmGiven :1; unsigned BSIM3v32paramChkGiven :1; unsigned BSIM3v32noiModGiven :1; unsigned BSIM3v32nqsModGiven :1; unsigned BSIM3v32typeGiven :1; unsigned BSIM3v32toxGiven :1; unsigned BSIM3v32versionGiven :1; unsigned BSIM3v32toxmGiven :1; unsigned BSIM3v32cdscGiven :1; unsigned BSIM3v32cdscbGiven :1; unsigned BSIM3v32cdscdGiven :1; unsigned BSIM3v32citGiven :1; unsigned BSIM3v32nfactorGiven :1; unsigned BSIM3v32xjGiven :1; unsigned BSIM3v32vsatGiven :1; unsigned BSIM3v32atGiven :1; unsigned BSIM3v32a0Given :1; unsigned BSIM3v32agsGiven :1; unsigned BSIM3v32a1Given :1; unsigned BSIM3v32a2Given :1; unsigned BSIM3v32ketaGiven :1; unsigned BSIM3v32nsubGiven :1; unsigned BSIM3v32npeakGiven :1; unsigned BSIM3v32ngateGiven :1; unsigned BSIM3v32gamma1Given :1; unsigned BSIM3v32gamma2Given :1; unsigned BSIM3v32vbxGiven :1; unsigned BSIM3v32vbmGiven :1; unsigned BSIM3v32xtGiven :1; unsigned BSIM3v32k1Given :1; unsigned BSIM3v32kt1Given :1; unsigned BSIM3v32kt1lGiven :1; unsigned BSIM3v32kt2Given :1; unsigned BSIM3v32k2Given :1; unsigned BSIM3v32k3Given :1; unsigned BSIM3v32k3bGiven :1; unsigned BSIM3v32w0Given :1; unsigned BSIM3v32nlxGiven :1; unsigned BSIM3v32dvt0Given :1; unsigned BSIM3v32dvt1Given :1; unsigned BSIM3v32dvt2Given :1; unsigned BSIM3v32dvt0wGiven :1; unsigned BSIM3v32dvt1wGiven :1; unsigned BSIM3v32dvt2wGiven :1; unsigned BSIM3v32droutGiven :1; unsigned BSIM3v32dsubGiven :1; unsigned BSIM3v32vth0Given :1; unsigned BSIM3v32uaGiven :1; unsigned BSIM3v32ua1Given :1; unsigned BSIM3v32ubGiven :1; unsigned BSIM3v32ub1Given :1; unsigned BSIM3v32ucGiven :1; unsigned BSIM3v32uc1Given :1; unsigned BSIM3v32u0Given :1; unsigned BSIM3v32uteGiven :1; unsigned BSIM3v32voffGiven :1; unsigned BSIM3v32rdswGiven :1; unsigned BSIM3v32prwgGiven :1; unsigned BSIM3v32prwbGiven :1; unsigned BSIM3v32prtGiven :1; unsigned BSIM3v32eta0Given :1; unsigned BSIM3v32etabGiven :1; unsigned BSIM3v32pclmGiven :1; unsigned BSIM3v32pdibl1Given :1; unsigned BSIM3v32pdibl2Given :1; unsigned BSIM3v32pdiblbGiven :1; unsigned BSIM3v32pscbe1Given :1; unsigned BSIM3v32pscbe2Given :1; unsigned BSIM3v32pvagGiven :1; unsigned BSIM3v32deltaGiven :1; unsigned BSIM3v32wrGiven :1; unsigned BSIM3v32dwgGiven :1; unsigned BSIM3v32dwbGiven :1; unsigned BSIM3v32b0Given :1; unsigned BSIM3v32b1Given :1; unsigned BSIM3v32alpha0Given :1; unsigned BSIM3v32alpha1Given :1; unsigned BSIM3v32beta0Given :1; unsigned BSIM3v32ijthGiven :1; unsigned BSIM3v32vfbGiven :1; /* CV model */ unsigned BSIM3v32elmGiven :1; unsigned BSIM3v32cgslGiven :1; unsigned BSIM3v32cgdlGiven :1; unsigned BSIM3v32ckappaGiven :1; unsigned BSIM3v32cfGiven :1; unsigned BSIM3v32vfbcvGiven :1; unsigned BSIM3v32clcGiven :1; unsigned BSIM3v32cleGiven :1; unsigned BSIM3v32dwcGiven :1; unsigned BSIM3v32dlcGiven :1; unsigned BSIM3v32noffGiven :1; unsigned BSIM3v32voffcvGiven :1; unsigned BSIM3v32acdeGiven :1; unsigned BSIM3v32moinGiven :1; unsigned BSIM3v32tcjGiven :1; unsigned BSIM3v32tcjswGiven :1; unsigned BSIM3v32tcjswgGiven :1; unsigned BSIM3v32tpbGiven :1; unsigned BSIM3v32tpbswGiven :1; unsigned BSIM3v32tpbswgGiven :1; /* ACM model */ unsigned BSIM3v32xlGiven :1; unsigned BSIM3v32xwGiven :1; unsigned BSIM3v32hdifGiven :1; unsigned BSIM3v32ldifGiven :1; unsigned BSIM3v32ldGiven :1; unsigned BSIM3v32rdGiven :1; unsigned BSIM3v32rsGiven :1; unsigned BSIM3v32rdcGiven :1; unsigned BSIM3v32rscGiven :1; unsigned BSIM3v32wmltGiven :1; unsigned BSIM3v32lmltGiven :1; /* Length dependence */ unsigned BSIM3v32lcdscGiven :1; unsigned BSIM3v32lcdscbGiven :1; unsigned BSIM3v32lcdscdGiven :1; unsigned BSIM3v32lcitGiven :1; unsigned BSIM3v32lnfactorGiven :1; unsigned BSIM3v32lxjGiven :1; unsigned BSIM3v32lvsatGiven :1; unsigned BSIM3v32latGiven :1; unsigned BSIM3v32la0Given :1; unsigned BSIM3v32lagsGiven :1; unsigned BSIM3v32la1Given :1; unsigned BSIM3v32la2Given :1; unsigned BSIM3v32lketaGiven :1; unsigned BSIM3v32lnsubGiven :1; unsigned BSIM3v32lnpeakGiven :1; unsigned BSIM3v32lngateGiven :1; unsigned BSIM3v32lgamma1Given :1; unsigned BSIM3v32lgamma2Given :1; unsigned BSIM3v32lvbxGiven :1; unsigned BSIM3v32lvbmGiven :1; unsigned BSIM3v32lxtGiven :1; unsigned BSIM3v32lk1Given :1; unsigned BSIM3v32lkt1Given :1; unsigned BSIM3v32lkt1lGiven :1; unsigned BSIM3v32lkt2Given :1; unsigned BSIM3v32lk2Given :1; unsigned BSIM3v32lk3Given :1; unsigned BSIM3v32lk3bGiven :1; unsigned BSIM3v32lw0Given :1; unsigned BSIM3v32lnlxGiven :1; unsigned BSIM3v32ldvt0Given :1; unsigned BSIM3v32ldvt1Given :1; unsigned BSIM3v32ldvt2Given :1; unsigned BSIM3v32ldvt0wGiven :1; unsigned BSIM3v32ldvt1wGiven :1; unsigned BSIM3v32ldvt2wGiven :1; unsigned BSIM3v32ldroutGiven :1; unsigned BSIM3v32ldsubGiven :1; unsigned BSIM3v32lvth0Given :1; unsigned BSIM3v32luaGiven :1; unsigned BSIM3v32lua1Given :1; unsigned BSIM3v32lubGiven :1; unsigned BSIM3v32lub1Given :1; unsigned BSIM3v32lucGiven :1; unsigned BSIM3v32luc1Given :1; unsigned BSIM3v32lu0Given :1; unsigned BSIM3v32luteGiven :1; unsigned BSIM3v32lvoffGiven :1; unsigned BSIM3v32lrdswGiven :1; unsigned BSIM3v32lprwgGiven :1; unsigned BSIM3v32lprwbGiven :1; unsigned BSIM3v32lprtGiven :1; unsigned BSIM3v32leta0Given :1; unsigned BSIM3v32letabGiven :1; unsigned BSIM3v32lpclmGiven :1; unsigned BSIM3v32lpdibl1Given :1; unsigned BSIM3v32lpdibl2Given :1; unsigned BSIM3v32lpdiblbGiven :1; unsigned BSIM3v32lpscbe1Given :1; unsigned BSIM3v32lpscbe2Given :1; unsigned BSIM3v32lpvagGiven :1; unsigned BSIM3v32ldeltaGiven :1; unsigned BSIM3v32lwrGiven :1; unsigned BSIM3v32ldwgGiven :1; unsigned BSIM3v32ldwbGiven :1; unsigned BSIM3v32lb0Given :1; unsigned BSIM3v32lb1Given :1; unsigned BSIM3v32lalpha0Given :1; unsigned BSIM3v32lalpha1Given :1; unsigned BSIM3v32lbeta0Given :1; unsigned BSIM3v32lvfbGiven :1; /* CV model */ unsigned BSIM3v32lelmGiven :1; unsigned BSIM3v32lcgslGiven :1; unsigned BSIM3v32lcgdlGiven :1; unsigned BSIM3v32lckappaGiven :1; unsigned BSIM3v32lcfGiven :1; unsigned BSIM3v32lclcGiven :1; unsigned BSIM3v32lcleGiven :1; unsigned BSIM3v32lvfbcvGiven :1; unsigned BSIM3v32lnoffGiven :1; unsigned BSIM3v32lvoffcvGiven :1; unsigned BSIM3v32lacdeGiven :1; unsigned BSIM3v32lmoinGiven :1; /* Width dependence */ unsigned BSIM3v32wcdscGiven :1; unsigned BSIM3v32wcdscbGiven :1; unsigned BSIM3v32wcdscdGiven :1; unsigned BSIM3v32wcitGiven :1; unsigned BSIM3v32wnfactorGiven :1; unsigned BSIM3v32wxjGiven :1; unsigned BSIM3v32wvsatGiven :1; unsigned BSIM3v32watGiven :1; unsigned BSIM3v32wa0Given :1; unsigned BSIM3v32wagsGiven :1; unsigned BSIM3v32wa1Given :1; unsigned BSIM3v32wa2Given :1; unsigned BSIM3v32wketaGiven :1; unsigned BSIM3v32wnsubGiven :1; unsigned BSIM3v32wnpeakGiven :1; unsigned BSIM3v32wngateGiven :1; unsigned BSIM3v32wgamma1Given :1; unsigned BSIM3v32wgamma2Given :1; unsigned BSIM3v32wvbxGiven :1; unsigned BSIM3v32wvbmGiven :1; unsigned BSIM3v32wxtGiven :1; unsigned BSIM3v32wk1Given :1; unsigned BSIM3v32wkt1Given :1; unsigned BSIM3v32wkt1lGiven :1; unsigned BSIM3v32wkt2Given :1; unsigned BSIM3v32wk2Given :1; unsigned BSIM3v32wk3Given :1; unsigned BSIM3v32wk3bGiven :1; unsigned BSIM3v32ww0Given :1; unsigned BSIM3v32wnlxGiven :1; unsigned BSIM3v32wdvt0Given :1; unsigned BSIM3v32wdvt1Given :1; unsigned BSIM3v32wdvt2Given :1; unsigned BSIM3v32wdvt0wGiven :1; unsigned BSIM3v32wdvt1wGiven :1; unsigned BSIM3v32wdvt2wGiven :1; unsigned BSIM3v32wdroutGiven :1; unsigned BSIM3v32wdsubGiven :1; unsigned BSIM3v32wvth0Given :1; unsigned BSIM3v32wuaGiven :1; unsigned BSIM3v32wua1Given :1; unsigned BSIM3v32wubGiven :1; unsigned BSIM3v32wub1Given :1; unsigned BSIM3v32wucGiven :1; unsigned BSIM3v32wuc1Given :1; unsigned BSIM3v32wu0Given :1; unsigned BSIM3v32wuteGiven :1; unsigned BSIM3v32wvoffGiven :1; unsigned BSIM3v32wrdswGiven :1; unsigned BSIM3v32wprwgGiven :1; unsigned BSIM3v32wprwbGiven :1; unsigned BSIM3v32wprtGiven :1; unsigned BSIM3v32weta0Given :1; unsigned BSIM3v32wetabGiven :1; unsigned BSIM3v32wpclmGiven :1; unsigned BSIM3v32wpdibl1Given :1; unsigned BSIM3v32wpdibl2Given :1; unsigned BSIM3v32wpdiblbGiven :1; unsigned BSIM3v32wpscbe1Given :1; unsigned BSIM3v32wpscbe2Given :1; unsigned BSIM3v32wpvagGiven :1; unsigned BSIM3v32wdeltaGiven :1; unsigned BSIM3v32wwrGiven :1; unsigned BSIM3v32wdwgGiven :1; unsigned BSIM3v32wdwbGiven :1; unsigned BSIM3v32wb0Given :1; unsigned BSIM3v32wb1Given :1; unsigned BSIM3v32walpha0Given :1; unsigned BSIM3v32walpha1Given :1; unsigned BSIM3v32wbeta0Given :1; unsigned BSIM3v32wvfbGiven :1; /* CV model */ unsigned BSIM3v32welmGiven :1; unsigned BSIM3v32wcgslGiven :1; unsigned BSIM3v32wcgdlGiven :1; unsigned BSIM3v32wckappaGiven :1; unsigned BSIM3v32wcfGiven :1; unsigned BSIM3v32wclcGiven :1; unsigned BSIM3v32wcleGiven :1; unsigned BSIM3v32wvfbcvGiven :1; unsigned BSIM3v32wnoffGiven :1; unsigned BSIM3v32wvoffcvGiven :1; unsigned BSIM3v32wacdeGiven :1; unsigned BSIM3v32wmoinGiven :1; /* Cross-term dependence */ unsigned BSIM3v32pcdscGiven :1; unsigned BSIM3v32pcdscbGiven :1; unsigned BSIM3v32pcdscdGiven :1; unsigned BSIM3v32pcitGiven :1; unsigned BSIM3v32pnfactorGiven :1; unsigned BSIM3v32pxjGiven :1; unsigned BSIM3v32pvsatGiven :1; unsigned BSIM3v32patGiven :1; unsigned BSIM3v32pa0Given :1; unsigned BSIM3v32pagsGiven :1; unsigned BSIM3v32pa1Given :1; unsigned BSIM3v32pa2Given :1; unsigned BSIM3v32pketaGiven :1; unsigned BSIM3v32pnsubGiven :1; unsigned BSIM3v32pnpeakGiven :1; unsigned BSIM3v32pngateGiven :1; unsigned BSIM3v32pgamma1Given :1; unsigned BSIM3v32pgamma2Given :1; unsigned BSIM3v32pvbxGiven :1; unsigned BSIM3v32pvbmGiven :1; unsigned BSIM3v32pxtGiven :1; unsigned BSIM3v32pk1Given :1; unsigned BSIM3v32pkt1Given :1; unsigned BSIM3v32pkt1lGiven :1; unsigned BSIM3v32pkt2Given :1; unsigned BSIM3v32pk2Given :1; unsigned BSIM3v32pk3Given :1; unsigned BSIM3v32pk3bGiven :1; unsigned BSIM3v32pw0Given :1; unsigned BSIM3v32pnlxGiven :1; unsigned BSIM3v32pdvt0Given :1; unsigned BSIM3v32pdvt1Given :1; unsigned BSIM3v32pdvt2Given :1; unsigned BSIM3v32pdvt0wGiven :1; unsigned BSIM3v32pdvt1wGiven :1; unsigned BSIM3v32pdvt2wGiven :1; unsigned BSIM3v32pdroutGiven :1; unsigned BSIM3v32pdsubGiven :1; unsigned BSIM3v32pvth0Given :1; unsigned BSIM3v32puaGiven :1; unsigned BSIM3v32pua1Given :1; unsigned BSIM3v32pubGiven :1; unsigned BSIM3v32pub1Given :1; unsigned BSIM3v32pucGiven :1; unsigned BSIM3v32puc1Given :1; unsigned BSIM3v32pu0Given :1; unsigned BSIM3v32puteGiven :1; unsigned BSIM3v32pvoffGiven :1; unsigned BSIM3v32prdswGiven :1; unsigned BSIM3v32pprwgGiven :1; unsigned BSIM3v32pprwbGiven :1; unsigned BSIM3v32pprtGiven :1; unsigned BSIM3v32peta0Given :1; unsigned BSIM3v32petabGiven :1; unsigned BSIM3v32ppclmGiven :1; unsigned BSIM3v32ppdibl1Given :1; unsigned BSIM3v32ppdibl2Given :1; unsigned BSIM3v32ppdiblbGiven :1; unsigned BSIM3v32ppscbe1Given :1; unsigned BSIM3v32ppscbe2Given :1; unsigned BSIM3v32ppvagGiven :1; unsigned BSIM3v32pdeltaGiven :1; unsigned BSIM3v32pwrGiven :1; unsigned BSIM3v32pdwgGiven :1; unsigned BSIM3v32pdwbGiven :1; unsigned BSIM3v32pb0Given :1; unsigned BSIM3v32pb1Given :1; unsigned BSIM3v32palpha0Given :1; unsigned BSIM3v32palpha1Given :1; unsigned BSIM3v32pbeta0Given :1; unsigned BSIM3v32pvfbGiven :1; /* CV model */ unsigned BSIM3v32pelmGiven :1; unsigned BSIM3v32pcgslGiven :1; unsigned BSIM3v32pcgdlGiven :1; unsigned BSIM3v32pckappaGiven :1; unsigned BSIM3v32pcfGiven :1; unsigned BSIM3v32pclcGiven :1; unsigned BSIM3v32pcleGiven :1; unsigned BSIM3v32pvfbcvGiven :1; unsigned BSIM3v32pnoffGiven :1; unsigned BSIM3v32pvoffcvGiven :1; unsigned BSIM3v32pacdeGiven :1; unsigned BSIM3v32pmoinGiven :1; unsigned BSIM3v32useFringeGiven :1; unsigned BSIM3v32tnomGiven :1; unsigned BSIM3v32cgsoGiven :1; unsigned BSIM3v32cgdoGiven :1; unsigned BSIM3v32cgboGiven :1; unsigned BSIM3v32xpartGiven :1; unsigned BSIM3v32sheetResistanceGiven :1; unsigned BSIM3v32jctSatCurDensityGiven :1; unsigned BSIM3v32jctSidewallSatCurDensityGiven :1; unsigned BSIM3v32bulkJctPotentialGiven :1; unsigned BSIM3v32bulkJctBotGradingCoeffGiven :1; unsigned BSIM3v32sidewallJctPotentialGiven :1; unsigned BSIM3v32GatesidewallJctPotentialGiven :1; unsigned BSIM3v32bulkJctSideGradingCoeffGiven :1; unsigned BSIM3v32unitAreaJctCapGiven :1; unsigned BSIM3v32unitLengthSidewallJctCapGiven :1; unsigned BSIM3v32bulkJctGateSideGradingCoeffGiven :1; unsigned BSIM3v32unitLengthGateSidewallJctCapGiven :1; unsigned BSIM3v32jctEmissionCoeffGiven :1; unsigned BSIM3v32jctTempExponentGiven :1; unsigned BSIM3v32oxideTrapDensityAGiven :1; unsigned BSIM3v32oxideTrapDensityBGiven :1; unsigned BSIM3v32oxideTrapDensityCGiven :1; unsigned BSIM3v32emGiven :1; unsigned BSIM3v32efGiven :1; unsigned BSIM3v32afGiven :1; unsigned BSIM3v32kfGiven :1; unsigned BSIM3v32LintGiven :1; unsigned BSIM3v32LlGiven :1; unsigned BSIM3v32LlcGiven :1; unsigned BSIM3v32LlnGiven :1; unsigned BSIM3v32LwGiven :1; unsigned BSIM3v32LwcGiven :1; unsigned BSIM3v32LwnGiven :1; unsigned BSIM3v32LwlGiven :1; unsigned BSIM3v32LwlcGiven :1; unsigned BSIM3v32LminGiven :1; unsigned BSIM3v32LmaxGiven :1; unsigned BSIM3v32WintGiven :1; unsigned BSIM3v32WlGiven :1; unsigned BSIM3v32WlcGiven :1; unsigned BSIM3v32WlnGiven :1; unsigned BSIM3v32WwGiven :1; unsigned BSIM3v32WwcGiven :1; unsigned BSIM3v32WwnGiven :1; unsigned BSIM3v32WwlGiven :1; unsigned BSIM3v32WwlcGiven :1; unsigned BSIM3v32WminGiven :1; unsigned BSIM3v32WmaxGiven :1; unsigned BSIM3v32vgsMaxGiven :1; unsigned BSIM3v32vgdMaxGiven :1; unsigned BSIM3v32vgbMaxGiven :1; unsigned BSIM3v32vdsMaxGiven :1; unsigned BSIM3v32vbsMaxGiven :1; unsigned BSIM3v32vbdMaxGiven :1; unsigned BSIM3v32vgsrMaxGiven :1; unsigned BSIM3v32vgdrMaxGiven :1; unsigned BSIM3v32vgbrMaxGiven :1; unsigned BSIM3v32vbsrMaxGiven :1; unsigned BSIM3v32vbdrMaxGiven :1; } BSIM3v32model; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ /* device parameters */ #define BSIM3v32_W 1 #define BSIM3v32_L 2 #define BSIM3v32_AS 3 #define BSIM3v32_AD 4 #define BSIM3v32_PS 5 #define BSIM3v32_PD 6 #define BSIM3v32_NRS 7 #define BSIM3v32_NRD 8 #define BSIM3v32_OFF 9 #define BSIM3v32_IC_VBS 10 #define BSIM3v32_IC_VDS 11 #define BSIM3v32_IC_VGS 12 #define BSIM3v32_IC 13 #define BSIM3v32_NQSMOD 14 #define BSIM3v32_M 15 #define BSIM3v32_DELVTO 16 #define BSIM3v32_MULU0 17 #define BSIM3v32_GEO 18 /* model parameters */ #define BSIM3v32_MOD_CAPMOD 100 #define BSIM3v32_MOD_ACMMOD 101 #define BSIM3v32_MOD_CALCACM 102 #define BSIM3v32_MOD_MOBMOD 103 #define BSIM3v32_MOD_NOIMOD 104 #define BSIM3v32_MOD_NQSMOD 105 #define BSIM3v32_MOD_TOX 106 #define BSIM3v32_MOD_CDSC 107 #define BSIM3v32_MOD_CDSCB 108 #define BSIM3v32_MOD_CIT 109 #define BSIM3v32_MOD_NFACTOR 110 #define BSIM3v32_MOD_XJ 111 #define BSIM3v32_MOD_VSAT 112 #define BSIM3v32_MOD_AT 113 #define BSIM3v32_MOD_A0 114 #define BSIM3v32_MOD_A1 115 #define BSIM3v32_MOD_A2 116 #define BSIM3v32_MOD_KETA 117 #define BSIM3v32_MOD_NSUB 118 #define BSIM3v32_MOD_NPEAK 119 #define BSIM3v32_MOD_NGATE 120 #define BSIM3v32_MOD_GAMMA1 121 #define BSIM3v32_MOD_GAMMA2 122 #define BSIM3v32_MOD_VBX 123 #define BSIM3v32_MOD_BINUNIT 124 #define BSIM3v32_MOD_VBM 125 #define BSIM3v32_MOD_XT 128 #define BSIM3v32_MOD_K1 129 #define BSIM3v32_MOD_KT1 130 #define BSIM3v32_MOD_KT1L 131 #define BSIM3v32_MOD_K2 132 #define BSIM3v32_MOD_KT2 133 #define BSIM3v32_MOD_K3 134 #define BSIM3v32_MOD_K3B 135 #define BSIM3v32_MOD_W0 136 #define BSIM3v32_MOD_NLX 137 #define BSIM3v32_MOD_DVT0 138 #define BSIM3v32_MOD_DVT1 139 #define BSIM3v32_MOD_DVT2 140 #define BSIM3v32_MOD_DVT0W 141 #define BSIM3v32_MOD_DVT1W 142 #define BSIM3v32_MOD_DVT2W 143 #define BSIM3v32_MOD_DROUT 144 #define BSIM3v32_MOD_DSUB 145 #define BSIM3v32_MOD_VTH0 146 #define BSIM3v32_MOD_UA 147 #define BSIM3v32_MOD_UA1 148 #define BSIM3v32_MOD_UB 149 #define BSIM3v32_MOD_UB1 150 #define BSIM3v32_MOD_UC 151 #define BSIM3v32_MOD_UC1 152 #define BSIM3v32_MOD_U0 153 #define BSIM3v32_MOD_UTE 154 #define BSIM3v32_MOD_VOFF 155 #define BSIM3v32_MOD_DELTA 156 #define BSIM3v32_MOD_RDSW 157 #define BSIM3v32_MOD_PRT 158 #define BSIM3v32_MOD_LDD 159 #define BSIM3v32_MOD_ETA 160 #define BSIM3v32_MOD_ETA0 161 #define BSIM3v32_MOD_ETAB 162 #define BSIM3v32_MOD_PCLM 163 #define BSIM3v32_MOD_PDIBL1 164 #define BSIM3v32_MOD_PDIBL2 165 #define BSIM3v32_MOD_PSCBE1 166 #define BSIM3v32_MOD_PSCBE2 167 #define BSIM3v32_MOD_PVAG 168 #define BSIM3v32_MOD_WR 169 #define BSIM3v32_MOD_DWG 170 #define BSIM3v32_MOD_DWB 171 #define BSIM3v32_MOD_B0 172 #define BSIM3v32_MOD_B1 173 #define BSIM3v32_MOD_ALPHA0 174 #define BSIM3v32_MOD_BETA0 175 #define BSIM3v32_MOD_PDIBLB 178 #define BSIM3v32_MOD_PRWG 179 #define BSIM3v32_MOD_PRWB 180 #define BSIM3v32_MOD_CDSCD 181 #define BSIM3v32_MOD_AGS 182 #define BSIM3v32_MOD_FRINGE 184 #define BSIM3v32_MOD_ELM 185 #define BSIM3v32_MOD_CGSL 186 #define BSIM3v32_MOD_CGDL 187 #define BSIM3v32_MOD_CKAPPA 188 #define BSIM3v32_MOD_CF 189 #define BSIM3v32_MOD_CLC 190 #define BSIM3v32_MOD_CLE 191 #define BSIM3v32_MOD_PARAMCHK 192 #define BSIM3v32_MOD_VERSION 193 #define BSIM3v32_MOD_VFBCV 194 #define BSIM3v32_MOD_ACDE 195 #define BSIM3v32_MOD_MOIN 196 #define BSIM3v32_MOD_NOFF 197 #define BSIM3v32_MOD_IJTH 198 #define BSIM3v32_MOD_ALPHA1 199 #define BSIM3v32_MOD_VFB 200 #define BSIM3v32_MOD_TOXM 201 #define BSIM3v32_MOD_TCJ 202 #define BSIM3v32_MOD_TCJSW 203 #define BSIM3v32_MOD_TCJSWG 204 #define BSIM3v32_MOD_TPB 205 #define BSIM3v32_MOD_TPBSW 206 #define BSIM3v32_MOD_TPBSWG 207 #define BSIM3v32_MOD_VOFFCV 208 /* Length dependence */ #define BSIM3v32_MOD_LCDSC 251 #define BSIM3v32_MOD_LCDSCB 252 #define BSIM3v32_MOD_LCIT 253 #define BSIM3v32_MOD_LNFACTOR 254 #define BSIM3v32_MOD_LXJ 255 #define BSIM3v32_MOD_LVSAT 256 #define BSIM3v32_MOD_LAT 257 #define BSIM3v32_MOD_LA0 258 #define BSIM3v32_MOD_LA1 259 #define BSIM3v32_MOD_LA2 260 #define BSIM3v32_MOD_LKETA 261 #define BSIM3v32_MOD_LNSUB 262 #define BSIM3v32_MOD_LNPEAK 263 #define BSIM3v32_MOD_LNGATE 265 #define BSIM3v32_MOD_LGAMMA1 266 #define BSIM3v32_MOD_LGAMMA2 267 #define BSIM3v32_MOD_LVBX 268 #define BSIM3v32_MOD_LVBM 270 #define BSIM3v32_MOD_LXT 272 #define BSIM3v32_MOD_LK1 275 #define BSIM3v32_MOD_LKT1 276 #define BSIM3v32_MOD_LKT1L 277 #define BSIM3v32_MOD_LK2 278 #define BSIM3v32_MOD_LKT2 279 #define BSIM3v32_MOD_LK3 280 #define BSIM3v32_MOD_LK3B 281 #define BSIM3v32_MOD_LW0 282 #define BSIM3v32_MOD_LNLX 283 #define BSIM3v32_MOD_LDVT0 284 #define BSIM3v32_MOD_LDVT1 285 #define BSIM3v32_MOD_LDVT2 286 #define BSIM3v32_MOD_LDVT0W 287 #define BSIM3v32_MOD_LDVT1W 288 #define BSIM3v32_MOD_LDVT2W 289 #define BSIM3v32_MOD_LDROUT 290 #define BSIM3v32_MOD_LDSUB 291 #define BSIM3v32_MOD_LVTH0 292 #define BSIM3v32_MOD_LUA 293 #define BSIM3v32_MOD_LUA1 294 #define BSIM3v32_MOD_LUB 295 #define BSIM3v32_MOD_LUB1 296 #define BSIM3v32_MOD_LUC 297 #define BSIM3v32_MOD_LUC1 298 #define BSIM3v32_MOD_LU0 299 #define BSIM3v32_MOD_LUTE 300 #define BSIM3v32_MOD_LVOFF 301 #define BSIM3v32_MOD_LDELTA 302 #define BSIM3v32_MOD_LRDSW 303 #define BSIM3v32_MOD_LPRT 304 #define BSIM3v32_MOD_LLDD 305 #define BSIM3v32_MOD_LETA 306 #define BSIM3v32_MOD_LETA0 307 #define BSIM3v32_MOD_LETAB 308 #define BSIM3v32_MOD_LPCLM 309 #define BSIM3v32_MOD_LPDIBL1 310 #define BSIM3v32_MOD_LPDIBL2 311 #define BSIM3v32_MOD_LPSCBE1 312 #define BSIM3v32_MOD_LPSCBE2 313 #define BSIM3v32_MOD_LPVAG 314 #define BSIM3v32_MOD_LWR 315 #define BSIM3v32_MOD_LDWG 316 #define BSIM3v32_MOD_LDWB 317 #define BSIM3v32_MOD_LB0 318 #define BSIM3v32_MOD_LB1 319 #define BSIM3v32_MOD_LALPHA0 320 #define BSIM3v32_MOD_LBETA0 321 #define BSIM3v32_MOD_LPDIBLB 324 #define BSIM3v32_MOD_LPRWG 325 #define BSIM3v32_MOD_LPRWB 326 #define BSIM3v32_MOD_LCDSCD 327 #define BSIM3v32_MOD_LAGS 328 #define BSIM3v32_MOD_LFRINGE 331 #define BSIM3v32_MOD_LELM 332 #define BSIM3v32_MOD_LCGSL 333 #define BSIM3v32_MOD_LCGDL 334 #define BSIM3v32_MOD_LCKAPPA 335 #define BSIM3v32_MOD_LCF 336 #define BSIM3v32_MOD_LCLC 337 #define BSIM3v32_MOD_LCLE 338 #define BSIM3v32_MOD_LVFBCV 339 #define BSIM3v32_MOD_LACDE 340 #define BSIM3v32_MOD_LMOIN 341 #define BSIM3v32_MOD_LNOFF 342 #define BSIM3v32_MOD_LALPHA1 344 #define BSIM3v32_MOD_LVFB 345 #define BSIM3v32_MOD_LVOFFCV 346 /* Width dependence */ #define BSIM3v32_MOD_WCDSC 381 #define BSIM3v32_MOD_WCDSCB 382 #define BSIM3v32_MOD_WCIT 383 #define BSIM3v32_MOD_WNFACTOR 384 #define BSIM3v32_MOD_WXJ 385 #define BSIM3v32_MOD_WVSAT 386 #define BSIM3v32_MOD_WAT 387 #define BSIM3v32_MOD_WA0 388 #define BSIM3v32_MOD_WA1 389 #define BSIM3v32_MOD_WA2 390 #define BSIM3v32_MOD_WKETA 391 #define BSIM3v32_MOD_WNSUB 392 #define BSIM3v32_MOD_WNPEAK 393 #define BSIM3v32_MOD_WNGATE 395 #define BSIM3v32_MOD_WGAMMA1 396 #define BSIM3v32_MOD_WGAMMA2 397 #define BSIM3v32_MOD_WVBX 398 #define BSIM3v32_MOD_WVBM 400 #define BSIM3v32_MOD_WXT 402 #define BSIM3v32_MOD_WK1 405 #define BSIM3v32_MOD_WKT1 406 #define BSIM3v32_MOD_WKT1L 407 #define BSIM3v32_MOD_WK2 408 #define BSIM3v32_MOD_WKT2 409 #define BSIM3v32_MOD_WK3 410 #define BSIM3v32_MOD_WK3B 411 #define BSIM3v32_MOD_WW0 412 #define BSIM3v32_MOD_WNLX 413 #define BSIM3v32_MOD_WDVT0 414 #define BSIM3v32_MOD_WDVT1 415 #define BSIM3v32_MOD_WDVT2 416 #define BSIM3v32_MOD_WDVT0W 417 #define BSIM3v32_MOD_WDVT1W 418 #define BSIM3v32_MOD_WDVT2W 419 #define BSIM3v32_MOD_WDROUT 420 #define BSIM3v32_MOD_WDSUB 421 #define BSIM3v32_MOD_WVTH0 422 #define BSIM3v32_MOD_WUA 423 #define BSIM3v32_MOD_WUA1 424 #define BSIM3v32_MOD_WUB 425 #define BSIM3v32_MOD_WUB1 426 #define BSIM3v32_MOD_WUC 427 #define BSIM3v32_MOD_WUC1 428 #define BSIM3v32_MOD_WU0 429 #define BSIM3v32_MOD_WUTE 430 #define BSIM3v32_MOD_WVOFF 431 #define BSIM3v32_MOD_WDELTA 432 #define BSIM3v32_MOD_WRDSW 433 #define BSIM3v32_MOD_WPRT 434 #define BSIM3v32_MOD_WLDD 435 #define BSIM3v32_MOD_WETA 436 #define BSIM3v32_MOD_WETA0 437 #define BSIM3v32_MOD_WETAB 438 #define BSIM3v32_MOD_WPCLM 439 #define BSIM3v32_MOD_WPDIBL1 440 #define BSIM3v32_MOD_WPDIBL2 441 #define BSIM3v32_MOD_WPSCBE1 442 #define BSIM3v32_MOD_WPSCBE2 443 #define BSIM3v32_MOD_WPVAG 444 #define BSIM3v32_MOD_WWR 445 #define BSIM3v32_MOD_WDWG 446 #define BSIM3v32_MOD_WDWB 447 #define BSIM3v32_MOD_WB0 448 #define BSIM3v32_MOD_WB1 449 #define BSIM3v32_MOD_WALPHA0 450 #define BSIM3v32_MOD_WBETA0 451 #define BSIM3v32_MOD_WPDIBLB 454 #define BSIM3v32_MOD_WPRWG 455 #define BSIM3v32_MOD_WPRWB 456 #define BSIM3v32_MOD_WCDSCD 457 #define BSIM3v32_MOD_WAGS 458 #define BSIM3v32_MOD_WFRINGE 461 #define BSIM3v32_MOD_WELM 462 #define BSIM3v32_MOD_WCGSL 463 #define BSIM3v32_MOD_WCGDL 464 #define BSIM3v32_MOD_WCKAPPA 465 #define BSIM3v32_MOD_WCF 466 #define BSIM3v32_MOD_WCLC 467 #define BSIM3v32_MOD_WCLE 468 #define BSIM3v32_MOD_WVFBCV 469 #define BSIM3v32_MOD_WACDE 470 #define BSIM3v32_MOD_WMOIN 471 #define BSIM3v32_MOD_WNOFF 472 #define BSIM3v32_MOD_WALPHA1 474 #define BSIM3v32_MOD_WVFB 475 #define BSIM3v32_MOD_WVOFFCV 476 /* Cross-term dependence */ #define BSIM3v32_MOD_PCDSC 511 #define BSIM3v32_MOD_PCDSCB 512 #define BSIM3v32_MOD_PCIT 513 #define BSIM3v32_MOD_PNFACTOR 514 #define BSIM3v32_MOD_PXJ 515 #define BSIM3v32_MOD_PVSAT 516 #define BSIM3v32_MOD_PAT 517 #define BSIM3v32_MOD_PA0 518 #define BSIM3v32_MOD_PA1 519 #define BSIM3v32_MOD_PA2 520 #define BSIM3v32_MOD_PKETA 521 #define BSIM3v32_MOD_PNSUB 522 #define BSIM3v32_MOD_PNPEAK 523 #define BSIM3v32_MOD_PNGATE 525 #define BSIM3v32_MOD_PGAMMA1 526 #define BSIM3v32_MOD_PGAMMA2 527 #define BSIM3v32_MOD_PVBX 528 #define BSIM3v32_MOD_PVBM 530 #define BSIM3v32_MOD_PXT 532 #define BSIM3v32_MOD_PK1 535 #define BSIM3v32_MOD_PKT1 536 #define BSIM3v32_MOD_PKT1L 537 #define BSIM3v32_MOD_PK2 538 #define BSIM3v32_MOD_PKT2 539 #define BSIM3v32_MOD_PK3 540 #define BSIM3v32_MOD_PK3B 541 #define BSIM3v32_MOD_PW0 542 #define BSIM3v32_MOD_PNLX 543 #define BSIM3v32_MOD_PDVT0 544 #define BSIM3v32_MOD_PDVT1 545 #define BSIM3v32_MOD_PDVT2 546 #define BSIM3v32_MOD_PDVT0W 547 #define BSIM3v32_MOD_PDVT1W 548 #define BSIM3v32_MOD_PDVT2W 549 #define BSIM3v32_MOD_PDROUT 550 #define BSIM3v32_MOD_PDSUB 551 #define BSIM3v32_MOD_PVTH0 552 #define BSIM3v32_MOD_PUA 553 #define BSIM3v32_MOD_PUA1 554 #define BSIM3v32_MOD_PUB 555 #define BSIM3v32_MOD_PUB1 556 #define BSIM3v32_MOD_PUC 557 #define BSIM3v32_MOD_PUC1 558 #define BSIM3v32_MOD_PU0 559 #define BSIM3v32_MOD_PUTE 560 #define BSIM3v32_MOD_PVOFF 561 #define BSIM3v32_MOD_PDELTA 562 #define BSIM3v32_MOD_PRDSW 563 #define BSIM3v32_MOD_PPRT 564 #define BSIM3v32_MOD_PLDD 565 #define BSIM3v32_MOD_PETA 566 #define BSIM3v32_MOD_PETA0 567 #define BSIM3v32_MOD_PETAB 568 #define BSIM3v32_MOD_PPCLM 569 #define BSIM3v32_MOD_PPDIBL1 570 #define BSIM3v32_MOD_PPDIBL2 571 #define BSIM3v32_MOD_PPSCBE1 572 #define BSIM3v32_MOD_PPSCBE2 573 #define BSIM3v32_MOD_PPVAG 574 #define BSIM3v32_MOD_PWR 575 #define BSIM3v32_MOD_PDWG 576 #define BSIM3v32_MOD_PDWB 577 #define BSIM3v32_MOD_PB0 578 #define BSIM3v32_MOD_PB1 579 #define BSIM3v32_MOD_PALPHA0 580 #define BSIM3v32_MOD_PBETA0 581 #define BSIM3v32_MOD_PPDIBLB 584 #define BSIM3v32_MOD_PPRWG 585 #define BSIM3v32_MOD_PPRWB 586 #define BSIM3v32_MOD_PCDSCD 587 #define BSIM3v32_MOD_PAGS 588 #define BSIM3v32_MOD_PFRINGE 591 #define BSIM3v32_MOD_PELM 592 #define BSIM3v32_MOD_PCGSL 593 #define BSIM3v32_MOD_PCGDL 594 #define BSIM3v32_MOD_PCKAPPA 595 #define BSIM3v32_MOD_PCF 596 #define BSIM3v32_MOD_PCLC 597 #define BSIM3v32_MOD_PCLE 598 #define BSIM3v32_MOD_PVFBCV 599 #define BSIM3v32_MOD_PACDE 600 #define BSIM3v32_MOD_PMOIN 601 #define BSIM3v32_MOD_PNOFF 602 #define BSIM3v32_MOD_PALPHA1 604 #define BSIM3v32_MOD_PVFB 605 #define BSIM3v32_MOD_PVOFFCV 606 #define BSIM3v32_MOD_TNOM 651 #define BSIM3v32_MOD_CGSO 652 #define BSIM3v32_MOD_CGDO 653 #define BSIM3v32_MOD_CGBO 654 #define BSIM3v32_MOD_XPART 655 #define BSIM3v32_MOD_RSH 656 #define BSIM3v32_MOD_JS 657 #define BSIM3v32_MOD_PB 658 #define BSIM3v32_MOD_MJ 659 #define BSIM3v32_MOD_PBSW 660 #define BSIM3v32_MOD_MJSW 661 #define BSIM3v32_MOD_CJ 662 #define BSIM3v32_MOD_CJSW 663 #define BSIM3v32_MOD_NMOS 664 #define BSIM3v32_MOD_PMOS 665 #define BSIM3v32_MOD_NOIA 666 #define BSIM3v32_MOD_NOIB 667 #define BSIM3v32_MOD_NOIC 668 #define BSIM3v32_MOD_LINT 669 #define BSIM3v32_MOD_LL 670 #define BSIM3v32_MOD_LLN 671 #define BSIM3v32_MOD_LW 672 #define BSIM3v32_MOD_LWN 673 #define BSIM3v32_MOD_LWL 674 #define BSIM3v32_MOD_LMIN 675 #define BSIM3v32_MOD_LMAX 676 #define BSIM3v32_MOD_WINT 677 #define BSIM3v32_MOD_WL 678 #define BSIM3v32_MOD_WLN 679 #define BSIM3v32_MOD_WW 680 #define BSIM3v32_MOD_WWN 681 #define BSIM3v32_MOD_WWL 682 #define BSIM3v32_MOD_WMIN 683 #define BSIM3v32_MOD_WMAX 684 #define BSIM3v32_MOD_DWC 685 #define BSIM3v32_MOD_DLC 686 #define BSIM3v32_MOD_EM 687 #define BSIM3v32_MOD_EF 688 #define BSIM3v32_MOD_AF 689 #define BSIM3v32_MOD_KF 690 #define BSIM3v32_MOD_NJ 691 #define BSIM3v32_MOD_XTI 692 #define BSIM3v32_MOD_PBSWG 693 #define BSIM3v32_MOD_MJSWG 694 #define BSIM3v32_MOD_CJSWG 695 #define BSIM3v32_MOD_JSW 696 #define BSIM3v32_MOD_LLC 697 #define BSIM3v32_MOD_LWC 698 #define BSIM3v32_MOD_LWLC 699 #define BSIM3v32_MOD_WLC 700 #define BSIM3v32_MOD_WWC 701 #define BSIM3v32_MOD_WWLC 702 /* ACM parameters */ #define BSIM3v32_MOD_XL 703 #define BSIM3v32_MOD_XW 704 #define BSIM3v32_MOD_HDIF 711 #define BSIM3v32_MOD_LDIF 712 #define BSIM3v32_MOD_LD 713 #define BSIM3v32_MOD_RD 714 #define BSIM3v32_MOD_RS 715 #define BSIM3v32_MOD_RDC 716 #define BSIM3v32_MOD_RSC 717 #define BSIM3v32_MOD_WMLT 718 #define BSIM3v32_MOD_LMLT 719 /* device questions */ #define BSIM3v32_DNODE 751 #define BSIM3v32_GNODE 752 #define BSIM3v32_SNODE 753 #define BSIM3v32_BNODE 754 #define BSIM3v32_DNODEPRIME 755 #define BSIM3v32_SNODEPRIME 756 #define BSIM3v32_VBD 757 #define BSIM3v32_VBS 758 #define BSIM3v32_VGS 759 #define BSIM3v32_VDS 760 #define BSIM3v32_CD 761 #define BSIM3v32_CBS 762 #define BSIM3v32_CBD 763 #define BSIM3v32_GM 764 #define BSIM3v32_GDS 765 #define BSIM3v32_GMBS 766 #define BSIM3v32_GBD 767 #define BSIM3v32_GBS 768 #define BSIM3v32_QB 769 #define BSIM3v32_CQB 770 #define BSIM3v32_QG 771 #define BSIM3v32_CQG 772 #define BSIM3v32_QD 773 #define BSIM3v32_CQD 774 #define BSIM3v32_CGG 775 #define BSIM3v32_CGD 776 #define BSIM3v32_CGS 777 #define BSIM3v32_CBG 778 #define BSIM3v32_CAPBD 779 #define BSIM3v32_CQBD 780 #define BSIM3v32_CAPBS 781 #define BSIM3v32_CQBS 782 #define BSIM3v32_CDG 783 #define BSIM3v32_CDD 784 #define BSIM3v32_CDS 785 #define BSIM3v32_VON 786 #define BSIM3v32_VDSAT 787 #define BSIM3v32_QBS 788 #define BSIM3v32_QBD 789 #define BSIM3v32_SOURCECONDUCT 790 #define BSIM3v32_DRAINCONDUCT 791 #define BSIM3v32_CBDB 792 #define BSIM3v32_CBSB 793 #define BSIM3v32_MOD_VGS_MAX 801 #define BSIM3v32_MOD_VGD_MAX 802 #define BSIM3v32_MOD_VGB_MAX 803 #define BSIM3v32_MOD_VDS_MAX 804 #define BSIM3v32_MOD_VBS_MAX 805 #define BSIM3v32_MOD_VBD_MAX 806 #define BSIM3v32_MOD_VGSR_MAX 807 #define BSIM3v32_MOD_VGDR_MAX 808 #define BSIM3v32_MOD_VGBR_MAX 809 #define BSIM3v32_MOD_VBSR_MAX 810 #define BSIM3v32_MOD_VBDR_MAX 811 #include "bsim3v32ext.h" extern void BSIM3v32evaluate(double,double,double,BSIM3v32instance*,BSIM3v32model*, double*,double*,double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, CKTcircuit*); extern int BSIM3v32debug(BSIM3v32model*, BSIM3v32instance*, CKTcircuit*, int); extern int BSIM3v32checkModel(BSIM3v32model*, BSIM3v32instance*, CKTcircuit*); #endif /*BSIM3v32*/ tmpk8ny_4pz/src/spicelib/devices/bsim4v5/0000755000175000017500000000000013546075722020454 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/bsim4v5/b4v5soachk.c0000644000175000017500000003647113546075722022604 0ustar carstencarsten/********** Copyright 2013 Dietmar Warning. All rights reserved. Author: 2013 Dietmar Warning **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4v5def.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/cpdefs.h" int BSIM4v5soaCheck(CKTcircuit *ckt, GENmodel *inModel) { BSIM4v5model *model = (BSIM4v5model *) inModel; BSIM4v5instance *here; double vgs, vgd, vgb, vds, vbs, vbd; /* actual mos voltages */ int maxwarns; static int warns_vgs = 0, warns_vgd = 0, warns_vgb = 0, warns_vds = 0, warns_vbs = 0, warns_vbd = 0; if (!ckt) { warns_vgs = 0; warns_vgd = 0; warns_vgb = 0; warns_vds = 0; warns_vbs = 0; warns_vbd = 0; return OK; } maxwarns = ckt->CKTsoaMaxWarns; for (; model; model = BSIM4v5nextModel(model)) { for (here = BSIM4v5instances(model); here; here = BSIM4v5nextInstance(here)) { vgs = ckt->CKTrhsOld [here->BSIM4v5gNodePrime] - ckt->CKTrhsOld [here->BSIM4v5sNodePrime]; vgd = ckt->CKTrhsOld [here->BSIM4v5gNodePrime] - ckt->CKTrhsOld [here->BSIM4v5dNodePrime]; vgb = ckt->CKTrhsOld [here->BSIM4v5gNodePrime] - ckt->CKTrhsOld [here->BSIM4v5bNodePrime]; vds = ckt->CKTrhsOld [here->BSIM4v5dNodePrime] - ckt->CKTrhsOld [here->BSIM4v5sNodePrime]; vbs = ckt->CKTrhsOld [here->BSIM4v5bNodePrime] - ckt->CKTrhsOld [here->BSIM4v5sNodePrime]; vbd = ckt->CKTrhsOld [here->BSIM4v5bNodePrime] - ckt->CKTrhsOld [here->BSIM4v5dNodePrime]; if (!model->BSIM4v5vgsrMaxGiven) { if (fabs(vgs) > model->BSIM4v5vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->BSIM4v5vgsMax); warns_vgs++; } if (!model->BSIM4v5vgbMaxGiven) { if (fabs(vgb) > model->BSIM4v5vgsMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgs_max=%g\n", vgb, model->BSIM4v5vgsMax); warns_vgb++; } } else { if (fabs(vgb) > model->BSIM4v5vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM4v5vgbMax); warns_vgb++; } } } else { if (model->BSIM4v5type > 0) { if (vgs > model->BSIM4v5vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->BSIM4v5vgsMax); warns_vgs++; } if (-1*vgs > model->BSIM4v5vgsrMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgsr_max=%g\n", vgs, model->BSIM4v5vgsrMax); warns_vgs++; } } else { if (vgs > model->BSIM4v5vgsrMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgsr_max=%g\n", vgs, model->BSIM4v5vgsrMax); warns_vgs++; } if (-1*vgs > model->BSIM4v5vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->BSIM4v5vgsMax); warns_vgs++; } } } if (!model->BSIM4v5vgdrMaxGiven) { if (fabs(vgd) > model->BSIM4v5vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->BSIM4v5vgdMax); warns_vgd++; } } else { if (model->BSIM4v5type > 0) { if (vgd > model->BSIM4v5vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->BSIM4v5vgdMax); warns_vgd++; } if (-1*vgd > model->BSIM4v5vgdrMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgdr_max=%g\n", vgd, model->BSIM4v5vgdrMax); warns_vgd++; } } else { if (vgd > model->BSIM4v5vgdrMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgdr_max=%g\n", vgd, model->BSIM4v5vgdrMax); warns_vgd++; } if (-1*vgd > model->BSIM4v5vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->BSIM4v5vgdMax); warns_vgd++; } } } if (fabs(vds) > model->BSIM4v5vdsMax) if (warns_vds < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vds=%g has exceeded Vds_max=%g\n", vds, model->BSIM4v5vdsMax); warns_vds++; } if (!model->BSIM4v5vgbrMaxGiven) { if (fabs(vgb) > model->BSIM4v5vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM4v5vgbMax); warns_vgb++; } } else { if (model->BSIM4v5type > 0) { if (vgb > model->BSIM4v5vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM4v5vgbMax); warns_vgb++; } if (-1*vgb > model->BSIM4v5vgbrMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgbr_max=%g\n", vgb, model->BSIM4v5vgbrMax); warns_vgb++; } } else { if (vgb > model->BSIM4v5vgbrMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgbr_max=%g\n", vgb, model->BSIM4v5vgbrMax); warns_vgb++; } if (-1*vgb > model->BSIM4v5vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM4v5vgbMax); warns_vgb++; } } } if (!model->BSIM4v5vbsrMaxGiven) { if (!model->BSIM4v5vbsMaxGiven) { if (fabs(vbs) > model->BSIM4v5vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->BSIM4v5vbdMax); warns_vbs++; } } else { if (fabs(vbs) > model->BSIM4v5vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->BSIM4v5vbsMax); warns_vbs++; } } } else { if (!model->BSIM4v5vbsMaxGiven) { if (model->BSIM4v5type > 0) { if (vbs > model->BSIM4v5vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->BSIM4v5vbdMax); warns_vbs++; } if (-1*vbs > model->BSIM4v5vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM4v5vbsrMax); warns_vbs++; } } else { if (vbs > model->BSIM4v5vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM4v5vbsrMax); warns_vbs++; } if (-1*vbs > model->BSIM4v5vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->BSIM4v5vbdMax); warns_vbs++; } } } else { if (model->BSIM4v5type > 0) { if (vbs > model->BSIM4v5vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->BSIM4v5vbsMax); warns_vbs++; } if (-1*vbs > model->BSIM4v5vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM4v5vbsrMax); warns_vbs++; } } else { if (vbs > model->BSIM4v5vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM4v5vbsrMax); warns_vbs++; } if (-1*vbs > model->BSIM4v5vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->BSIM4v5vbsMax); warns_vbs++; } } } } if (!model->BSIM4v5vbdrMaxGiven) { if (fabs(vbd) > model->BSIM4v5vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->BSIM4v5vbdMax); warns_vbd++; } } else { if (model->BSIM4v5type > 0) { if (vbd > model->BSIM4v5vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->BSIM4v5vbdMax); warns_vbd++; } if (-1*vbd > model->BSIM4v5vbdrMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbdr_max=%g\n", vbd, model->BSIM4v5vbdrMax); warns_vbd++; } } else { if (vbd > model->BSIM4v5vbdrMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbdr_max=%g\n", vbd, model->BSIM4v5vbdrMax); warns_vbd++; } if (-1*vbd > model->BSIM4v5vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->BSIM4v5vbdMax); warns_vbd++; } } } } } return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim4v5/b4v5temp.c0000644000175000017500000030375713546075722022305 0ustar carstencarsten/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ /********** * Copyright 2005 Regents of the University of California. All rights reserved. * File: b4temp.c of BSIM4.5.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "bsim4v5def.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define Kb 1.3806226e-23 #define KboQ 8.617087e-5 #define EPS0 8.85418e-12 #define EPSSI 1.03594e-10 #define PI 3.141592654 #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define Charge_q 1.60219e-19 #define DELTA 1.0E-9 #define DEXP(A,B) { \ if (A > EXP_THRESHOLD) { \ B = MAX_EXP*(1.0+(A)-EXP_THRESHOLD); \ } else if (A < -EXP_THRESHOLD) { \ B = MIN_EXP; \ } else { \ B = exp(A); \ } \ } static int BSIM4v5DioIjthVjmEval( double Nvtm, double Ijth, double Isb, double XExpBV, double *Vjm) { double Tb, Tc, EVjmovNv; Tc = XExpBV; Tb = 1.0 + Ijth / Isb - Tc; EVjmovNv = 0.5 * (Tb + sqrt(Tb * Tb + 4.0 * Tc)); *Vjm = Nvtm * log(EVjmovNv); return 0; } int BSIM4v5temp( GENmodel *inModel, CKTcircuit *ckt) { BSIM4v5model *model = (BSIM4v5model*) inModel; BSIM4v5instance *here; struct bsim4v5SizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam = NULL; double tmp, tmp1, tmp2, Eg, Eg0, ni; double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Lnew=0.0, Wnew; double delTemp, Temp, TRatio, Inv_L, Inv_W, Inv_LW, Vtm0, Tnom; double dumPs, dumPd, dumAs, dumAd, PowWeffWr; double DMCGeff, DMCIeff, DMDGeff; double Nvtms, Nvtmd, SourceSatCurrent, DrainSatCurrent; double T10; double Inv_saref, Inv_sbref, Inv_sa, Inv_sb, rho, Ldrn, dvth0_lod; double W_tmp, Inv_ODeff, OD_offset, dk2_lod, deta0_lod; double lnl, lnw, lnnf, rbpbx, rbpby, rbsbx, rbsby, rbdbx, rbdby,bodymode; double kvsat, wlod, sceff, Wdrn; int Size_Not_Found, i; /* loop through all the BSIM4v5 device models */ for (; model != NULL; model = BSIM4v5nextModel(model)) { Temp = ckt->CKTtemp; if (model->BSIM4v5SbulkJctPotential < 0.1) { model->BSIM4v5SbulkJctPotential = 0.1; fprintf(stderr, "Given pbs is less than 0.1. Pbs is set to 0.1.\n"); } if (model->BSIM4v5SsidewallJctPotential < 0.1) { model->BSIM4v5SsidewallJctPotential = 0.1; fprintf(stderr, "Given pbsws is less than 0.1. Pbsws is set to 0.1.\n"); } if (model->BSIM4v5SGatesidewallJctPotential < 0.1) { model->BSIM4v5SGatesidewallJctPotential = 0.1; fprintf(stderr, "Given pbswgs is less than 0.1. Pbswgs is set to 0.1.\n"); } if (model->BSIM4v5DbulkJctPotential < 0.1) { model->BSIM4v5DbulkJctPotential = 0.1; fprintf(stderr, "Given pbd is less than 0.1. Pbd is set to 0.1.\n"); } if (model->BSIM4v5DsidewallJctPotential < 0.1) { model->BSIM4v5DsidewallJctPotential = 0.1; fprintf(stderr, "Given pbswd is less than 0.1. Pbswd is set to 0.1.\n"); } if (model->BSIM4v5DGatesidewallJctPotential < 0.1) { model->BSIM4v5DGatesidewallJctPotential = 0.1; fprintf(stderr, "Given pbswgd is less than 0.1. Pbswgd is set to 0.1.\n"); } if ((model->BSIM4v5toxeGiven) && (model->BSIM4v5toxpGiven) && (model->BSIM4v5dtoxGiven) && (model->BSIM4v5toxe != (model->BSIM4v5toxp + model->BSIM4v5dtox))) printf("Warning: toxe, toxp and dtox all given and toxe != toxp + dtox; dtox ignored.\n"); else if ((model->BSIM4v5toxeGiven) && (!model->BSIM4v5toxpGiven)) model->BSIM4v5toxp = model->BSIM4v5toxe - model->BSIM4v5dtox; else if ((!model->BSIM4v5toxeGiven) && (model->BSIM4v5toxpGiven)) model->BSIM4v5toxe = model->BSIM4v5toxp + model->BSIM4v5dtox; model->BSIM4v5coxe = model->BSIM4v5epsrox * EPS0 / model->BSIM4v5toxe; model->BSIM4v5coxp = model->BSIM4v5epsrox * EPS0 / model->BSIM4v5toxp; if (!model->BSIM4v5cgdoGiven) { if (model->BSIM4v5dlcGiven && (model->BSIM4v5dlc > 0.0)) model->BSIM4v5cgdo = model->BSIM4v5dlc * model->BSIM4v5coxe - model->BSIM4v5cgdl ; else model->BSIM4v5cgdo = 0.6 * model->BSIM4v5xj * model->BSIM4v5coxe; } if (!model->BSIM4v5cgsoGiven) { if (model->BSIM4v5dlcGiven && (model->BSIM4v5dlc > 0.0)) model->BSIM4v5cgso = model->BSIM4v5dlc * model->BSIM4v5coxe - model->BSIM4v5cgsl ; else model->BSIM4v5cgso = 0.6 * model->BSIM4v5xj * model->BSIM4v5coxe; } if (!model->BSIM4v5cgboGiven) model->BSIM4v5cgbo = 2.0 * model->BSIM4v5dwc * model->BSIM4v5coxe; struct bsim4v5SizeDependParam *p = model->pSizeDependParamKnot; while (p) { struct bsim4v5SizeDependParam *next_p = p->pNext; FREE(p); p = next_p; } model->pSizeDependParamKnot = NULL; pLastKnot = NULL; Tnom = model->BSIM4v5tnom; TRatio = Temp / Tnom; model->BSIM4v5vcrit = CONSTvt0 * log(CONSTvt0 / (CONSTroot2 * 1.0e-14)); model->BSIM4v5factor1 = sqrt(EPSSI / (model->BSIM4v5epsrox * EPS0) * model->BSIM4v5toxe); Vtm0 = model->BSIM4v5vtm0 = KboQ * Tnom; Eg0 = 1.16 - 7.02e-4 * Tnom * Tnom / (Tnom + 1108.0); ni = 1.45e10 * (Tnom / 300.15) * sqrt(Tnom / 300.15) * exp(21.5565981 - Eg0 / (2.0 * Vtm0)); model->BSIM4v5vtm = KboQ * Temp; Eg = 1.16 - 7.02e-4 * Temp * Temp / (Temp + 1108.0); if (Temp != Tnom) { T0 = Eg0 / Vtm0 - Eg / model->BSIM4v5vtm; T1 = log(Temp / Tnom); T2 = T0 + model->BSIM4v5SjctTempExponent * T1; T3 = exp(T2 / model->BSIM4v5SjctEmissionCoeff); model->BSIM4v5SjctTempSatCurDensity = model->BSIM4v5SjctSatCurDensity * T3; model->BSIM4v5SjctSidewallTempSatCurDensity = model->BSIM4v5SjctSidewallSatCurDensity * T3; model->BSIM4v5SjctGateSidewallTempSatCurDensity = model->BSIM4v5SjctGateSidewallSatCurDensity * T3; T2 = T0 + model->BSIM4v5DjctTempExponent * T1; T3 = exp(T2 / model->BSIM4v5DjctEmissionCoeff); model->BSIM4v5DjctTempSatCurDensity = model->BSIM4v5DjctSatCurDensity * T3; model->BSIM4v5DjctSidewallTempSatCurDensity = model->BSIM4v5DjctSidewallSatCurDensity * T3; model->BSIM4v5DjctGateSidewallTempSatCurDensity = model->BSIM4v5DjctGateSidewallSatCurDensity * T3; } else { model->BSIM4v5SjctTempSatCurDensity = model->BSIM4v5SjctSatCurDensity; model->BSIM4v5SjctSidewallTempSatCurDensity = model->BSIM4v5SjctSidewallSatCurDensity; model->BSIM4v5SjctGateSidewallTempSatCurDensity = model->BSIM4v5SjctGateSidewallSatCurDensity; model->BSIM4v5DjctTempSatCurDensity = model->BSIM4v5DjctSatCurDensity; model->BSIM4v5DjctSidewallTempSatCurDensity = model->BSIM4v5DjctSidewallSatCurDensity; model->BSIM4v5DjctGateSidewallTempSatCurDensity = model->BSIM4v5DjctGateSidewallSatCurDensity; } if (model->BSIM4v5SjctTempSatCurDensity < 0.0) model->BSIM4v5SjctTempSatCurDensity = 0.0; if (model->BSIM4v5SjctSidewallTempSatCurDensity < 0.0) model->BSIM4v5SjctSidewallTempSatCurDensity = 0.0; if (model->BSIM4v5SjctGateSidewallTempSatCurDensity < 0.0) model->BSIM4v5SjctGateSidewallTempSatCurDensity = 0.0; if (model->BSIM4v5DjctTempSatCurDensity < 0.0) model->BSIM4v5DjctTempSatCurDensity = 0.0; if (model->BSIM4v5DjctSidewallTempSatCurDensity < 0.0) model->BSIM4v5DjctSidewallTempSatCurDensity = 0.0; if (model->BSIM4v5DjctGateSidewallTempSatCurDensity < 0.0) model->BSIM4v5DjctGateSidewallTempSatCurDensity = 0.0; /* Temperature dependence of D/B and S/B diode capacitance begins */ delTemp = ckt->CKTtemp - model->BSIM4v5tnom; T0 = model->BSIM4v5tcj * delTemp; if (T0 >= -1.0) { model->BSIM4v5SunitAreaTempJctCap = model->BSIM4v5SunitAreaJctCap *(1.0 + T0); /*bug_fix -JX */ model->BSIM4v5DunitAreaTempJctCap = model->BSIM4v5DunitAreaJctCap *(1.0 + T0); } else { if (model->BSIM4v5SunitAreaJctCap > 0.0) { model->BSIM4v5SunitAreaTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjs to be negative. Cjs is clamped to zero.\n"); } if (model->BSIM4v5DunitAreaJctCap > 0.0) { model->BSIM4v5DunitAreaTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjd to be negative. Cjd is clamped to zero.\n"); } } T0 = model->BSIM4v5tcjsw * delTemp; if (T0 >= -1.0) { model->BSIM4v5SunitLengthSidewallTempJctCap = model->BSIM4v5SunitLengthSidewallJctCap *(1.0 + T0); model->BSIM4v5DunitLengthSidewallTempJctCap = model->BSIM4v5DunitLengthSidewallJctCap *(1.0 + T0); } else { if (model->BSIM4v5SunitLengthSidewallJctCap > 0.0) { model->BSIM4v5SunitLengthSidewallTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjsws to be negative. Cjsws is clamped to zero.\n"); } if (model->BSIM4v5DunitLengthSidewallJctCap > 0.0) { model->BSIM4v5DunitLengthSidewallTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjswd to be negative. Cjswd is clamped to zero.\n"); } } T0 = model->BSIM4v5tcjswg * delTemp; if (T0 >= -1.0) { model->BSIM4v5SunitLengthGateSidewallTempJctCap = model->BSIM4v5SunitLengthGateSidewallJctCap *(1.0 + T0); model->BSIM4v5DunitLengthGateSidewallTempJctCap = model->BSIM4v5DunitLengthGateSidewallJctCap *(1.0 + T0); } else { if (model->BSIM4v5SunitLengthGateSidewallJctCap > 0.0) { model->BSIM4v5SunitLengthGateSidewallTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjswgs to be negative. Cjswgs is clamped to zero.\n"); } if (model->BSIM4v5DunitLengthGateSidewallJctCap > 0.0) { model->BSIM4v5DunitLengthGateSidewallTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjswgd to be negative. Cjswgd is clamped to zero.\n"); } } model->BSIM4v5PhiBS = model->BSIM4v5SbulkJctPotential - model->BSIM4v5tpb * delTemp; if (model->BSIM4v5PhiBS < 0.01) { model->BSIM4v5PhiBS = 0.01; fprintf(stderr, "Temperature effect has caused pbs to be less than 0.01. Pbs is clamped to 0.01.\n"); } model->BSIM4v5PhiBD = model->BSIM4v5DbulkJctPotential - model->BSIM4v5tpb * delTemp; if (model->BSIM4v5PhiBD < 0.01) { model->BSIM4v5PhiBD = 0.01; fprintf(stderr, "Temperature effect has caused pbd to be less than 0.01. Pbd is clamped to 0.01.\n"); } model->BSIM4v5PhiBSWS = model->BSIM4v5SsidewallJctPotential - model->BSIM4v5tpbsw * delTemp; if (model->BSIM4v5PhiBSWS <= 0.01) { model->BSIM4v5PhiBSWS = 0.01; fprintf(stderr, "Temperature effect has caused pbsws to be less than 0.01. Pbsws is clamped to 0.01.\n"); } model->BSIM4v5PhiBSWD = model->BSIM4v5DsidewallJctPotential - model->BSIM4v5tpbsw * delTemp; if (model->BSIM4v5PhiBSWD <= 0.01) { model->BSIM4v5PhiBSWD = 0.01; fprintf(stderr, "Temperature effect has caused pbswd to be less than 0.01. Pbswd is clamped to 0.01.\n"); } model->BSIM4v5PhiBSWGS = model->BSIM4v5SGatesidewallJctPotential - model->BSIM4v5tpbswg * delTemp; if (model->BSIM4v5PhiBSWGS <= 0.01) { model->BSIM4v5PhiBSWGS = 0.01; fprintf(stderr, "Temperature effect has caused pbswgs to be less than 0.01. Pbswgs is clamped to 0.01.\n"); } model->BSIM4v5PhiBSWGD = model->BSIM4v5DGatesidewallJctPotential - model->BSIM4v5tpbswg * delTemp; if (model->BSIM4v5PhiBSWGD <= 0.01) { model->BSIM4v5PhiBSWGD = 0.01; fprintf(stderr, "Temperature effect has caused pbswgd to be less than 0.01. Pbswgd is clamped to 0.01.\n"); } /* End of junction capacitance */ if (model->BSIM4v5ijthdfwd <= 0.0) { model->BSIM4v5ijthdfwd = 0.1; fprintf(stderr, "Ijthdfwd reset to %g.\n", model->BSIM4v5ijthdfwd); } if (model->BSIM4v5ijthsfwd <= 0.0) { model->BSIM4v5ijthsfwd = 0.1; fprintf(stderr, "Ijthsfwd reset to %g.\n", model->BSIM4v5ijthsfwd); } if (model->BSIM4v5ijthdrev <= 0.0) { model->BSIM4v5ijthdrev = 0.1; fprintf(stderr, "Ijthdrev reset to %g.\n", model->BSIM4v5ijthdrev); } if (model->BSIM4v5ijthsrev <= 0.0) { model->BSIM4v5ijthsrev = 0.1; fprintf(stderr, "Ijthsrev reset to %g.\n", model->BSIM4v5ijthsrev); } if ((model->BSIM4v5xjbvd <= 0.0) && (model->BSIM4v5dioMod == 2)) { model->BSIM4v5xjbvd = 1.0; fprintf(stderr, "Xjbvd reset to %g.\n", model->BSIM4v5xjbvd); } else if ((model->BSIM4v5xjbvd < 0.0) && (model->BSIM4v5dioMod == 0)) { model->BSIM4v5xjbvd = 1.0; fprintf(stderr, "Xjbvd reset to %g.\n", model->BSIM4v5xjbvd); } if (model->BSIM4v5bvd <= 0.0) { model->BSIM4v5bvd = 10.0; fprintf(stderr, "BVD reset to %g.\n", model->BSIM4v5bvd); } if ((model->BSIM4v5xjbvs <= 0.0) && (model->BSIM4v5dioMod == 2)) { model->BSIM4v5xjbvs = 1.0; fprintf(stderr, "Xjbvs reset to %g.\n", model->BSIM4v5xjbvs); } else if ((model->BSIM4v5xjbvs < 0.0) && (model->BSIM4v5dioMod == 0)) { model->BSIM4v5xjbvs = 1.0; fprintf(stderr, "Xjbvs reset to %g.\n", model->BSIM4v5xjbvs); } if (model->BSIM4v5bvs <= 0.0) { model->BSIM4v5bvs = 10.0; fprintf(stderr, "BVS reset to %g.\n", model->BSIM4v5bvs); } /* loop through all the instances of the model */ for (here = BSIM4v5instances(model); here != NULL; here = BSIM4v5nextInstance(here)) { pSizeDependParamKnot = model->pSizeDependParamKnot; Size_Not_Found = 1; while ((pSizeDependParamKnot != NULL) && Size_Not_Found) { if ((here->BSIM4v5l == pSizeDependParamKnot->Length) && (here->BSIM4v5w == pSizeDependParamKnot->Width) && (here->BSIM4v5nf == pSizeDependParamKnot->NFinger)) { Size_Not_Found = 0; here->pParam = pSizeDependParamKnot; pParam = here->pParam; /*bug-fix */ } else { pLastKnot = pSizeDependParamKnot; pSizeDependParamKnot = pSizeDependParamKnot->pNext; } } /* stress effect */ Ldrn = here->BSIM4v5l; Wdrn = here->BSIM4v5w / here->BSIM4v5nf; if (Size_Not_Found) { pParam = TMALLOC(struct bsim4v5SizeDependParam, 1); if (pLastKnot == NULL) model->pSizeDependParamKnot = pParam; else pLastKnot->pNext = pParam; pParam->pNext = NULL; here->pParam = pParam; pParam->Length = here->BSIM4v5l; pParam->Width = here->BSIM4v5w; pParam->NFinger = here->BSIM4v5nf; Lnew = here->BSIM4v5l + model->BSIM4v5xl ; Wnew = here->BSIM4v5w / here->BSIM4v5nf + model->BSIM4v5xw; T0 = pow(Lnew, model->BSIM4v5Lln); T1 = pow(Wnew, model->BSIM4v5Lwn); tmp1 = model->BSIM4v5Ll / T0 + model->BSIM4v5Lw / T1 + model->BSIM4v5Lwl / (T0 * T1); pParam->BSIM4v5dl = model->BSIM4v5Lint + tmp1; tmp2 = model->BSIM4v5Llc / T0 + model->BSIM4v5Lwc / T1 + model->BSIM4v5Lwlc / (T0 * T1); pParam->BSIM4v5dlc = model->BSIM4v5dlc + tmp2; T2 = pow(Lnew, model->BSIM4v5Wln); T3 = pow(Wnew, model->BSIM4v5Wwn); tmp1 = model->BSIM4v5Wl / T2 + model->BSIM4v5Ww / T3 + model->BSIM4v5Wwl / (T2 * T3); pParam->BSIM4v5dw = model->BSIM4v5Wint + tmp1; tmp2 = model->BSIM4v5Wlc / T2 + model->BSIM4v5Wwc / T3 + model->BSIM4v5Wwlc / (T2 * T3); pParam->BSIM4v5dwc = model->BSIM4v5dwc + tmp2; pParam->BSIM4v5dwj = model->BSIM4v5dwj + tmp2; pParam->BSIM4v5leff = Lnew - 2.0 * pParam->BSIM4v5dl; if (pParam->BSIM4v5leff <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM4v5: mosfet %s, model %s: Effective channel length <= 0", model->BSIM4v5modName, here->BSIM4v5name); return(E_BADPARM); } pParam->BSIM4v5weff = Wnew - 2.0 * pParam->BSIM4v5dw; if (pParam->BSIM4v5weff <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM4v5: mosfet %s, model %s: Effective channel width <= 0", model->BSIM4v5modName, here->BSIM4v5name); return(E_BADPARM); } pParam->BSIM4v5leffCV = Lnew - 2.0 * pParam->BSIM4v5dlc; if (pParam->BSIM4v5leffCV <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM4v5: mosfet %s, model %s: Effective channel length for C-V <= 0", model->BSIM4v5modName, here->BSIM4v5name); return(E_BADPARM); } pParam->BSIM4v5weffCV = Wnew - 2.0 * pParam->BSIM4v5dwc; if (pParam->BSIM4v5weffCV <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM4v5: mosfet %s, model %s: Effective channel width for C-V <= 0", model->BSIM4v5modName, here->BSIM4v5name); return(E_BADPARM); } pParam->BSIM4v5weffCJ = Wnew - 2.0 * pParam->BSIM4v5dwj; if (pParam->BSIM4v5weffCJ <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM4v5: mosfet %s, model %s: Effective channel width for S/D junctions <= 0", model->BSIM4v5modName, here->BSIM4v5name); return(E_BADPARM); } if (model->BSIM4v5binUnit == 1) { Inv_L = 1.0e-6 / pParam->BSIM4v5leff; Inv_W = 1.0e-6 / pParam->BSIM4v5weff; Inv_LW = 1.0e-12 / (pParam->BSIM4v5leff * pParam->BSIM4v5weff); } else { Inv_L = 1.0 / pParam->BSIM4v5leff; Inv_W = 1.0 / pParam->BSIM4v5weff; Inv_LW = 1.0 / (pParam->BSIM4v5leff * pParam->BSIM4v5weff); } pParam->BSIM4v5cdsc = model->BSIM4v5cdsc + model->BSIM4v5lcdsc * Inv_L + model->BSIM4v5wcdsc * Inv_W + model->BSIM4v5pcdsc * Inv_LW; pParam->BSIM4v5cdscb = model->BSIM4v5cdscb + model->BSIM4v5lcdscb * Inv_L + model->BSIM4v5wcdscb * Inv_W + model->BSIM4v5pcdscb * Inv_LW; pParam->BSIM4v5cdscd = model->BSIM4v5cdscd + model->BSIM4v5lcdscd * Inv_L + model->BSIM4v5wcdscd * Inv_W + model->BSIM4v5pcdscd * Inv_LW; pParam->BSIM4v5cit = model->BSIM4v5cit + model->BSIM4v5lcit * Inv_L + model->BSIM4v5wcit * Inv_W + model->BSIM4v5pcit * Inv_LW; pParam->BSIM4v5nfactor = model->BSIM4v5nfactor + model->BSIM4v5lnfactor * Inv_L + model->BSIM4v5wnfactor * Inv_W + model->BSIM4v5pnfactor * Inv_LW; pParam->BSIM4v5xj = model->BSIM4v5xj + model->BSIM4v5lxj * Inv_L + model->BSIM4v5wxj * Inv_W + model->BSIM4v5pxj * Inv_LW; pParam->BSIM4v5vsat = model->BSIM4v5vsat + model->BSIM4v5lvsat * Inv_L + model->BSIM4v5wvsat * Inv_W + model->BSIM4v5pvsat * Inv_LW; pParam->BSIM4v5at = model->BSIM4v5at + model->BSIM4v5lat * Inv_L + model->BSIM4v5wat * Inv_W + model->BSIM4v5pat * Inv_LW; pParam->BSIM4v5a0 = model->BSIM4v5a0 + model->BSIM4v5la0 * Inv_L + model->BSIM4v5wa0 * Inv_W + model->BSIM4v5pa0 * Inv_LW; pParam->BSIM4v5ags = model->BSIM4v5ags + model->BSIM4v5lags * Inv_L + model->BSIM4v5wags * Inv_W + model->BSIM4v5pags * Inv_LW; pParam->BSIM4v5a1 = model->BSIM4v5a1 + model->BSIM4v5la1 * Inv_L + model->BSIM4v5wa1 * Inv_W + model->BSIM4v5pa1 * Inv_LW; pParam->BSIM4v5a2 = model->BSIM4v5a2 + model->BSIM4v5la2 * Inv_L + model->BSIM4v5wa2 * Inv_W + model->BSIM4v5pa2 * Inv_LW; pParam->BSIM4v5keta = model->BSIM4v5keta + model->BSIM4v5lketa * Inv_L + model->BSIM4v5wketa * Inv_W + model->BSIM4v5pketa * Inv_LW; pParam->BSIM4v5nsub = model->BSIM4v5nsub + model->BSIM4v5lnsub * Inv_L + model->BSIM4v5wnsub * Inv_W + model->BSIM4v5pnsub * Inv_LW; pParam->BSIM4v5ndep = model->BSIM4v5ndep + model->BSIM4v5lndep * Inv_L + model->BSIM4v5wndep * Inv_W + model->BSIM4v5pndep * Inv_LW; pParam->BSIM4v5nsd = model->BSIM4v5nsd + model->BSIM4v5lnsd * Inv_L + model->BSIM4v5wnsd * Inv_W + model->BSIM4v5pnsd * Inv_LW; pParam->BSIM4v5phin = model->BSIM4v5phin + model->BSIM4v5lphin * Inv_L + model->BSIM4v5wphin * Inv_W + model->BSIM4v5pphin * Inv_LW; pParam->BSIM4v5ngate = model->BSIM4v5ngate + model->BSIM4v5lngate * Inv_L + model->BSIM4v5wngate * Inv_W + model->BSIM4v5pngate * Inv_LW; pParam->BSIM4v5gamma1 = model->BSIM4v5gamma1 + model->BSIM4v5lgamma1 * Inv_L + model->BSIM4v5wgamma1 * Inv_W + model->BSIM4v5pgamma1 * Inv_LW; pParam->BSIM4v5gamma2 = model->BSIM4v5gamma2 + model->BSIM4v5lgamma2 * Inv_L + model->BSIM4v5wgamma2 * Inv_W + model->BSIM4v5pgamma2 * Inv_LW; pParam->BSIM4v5vbx = model->BSIM4v5vbx + model->BSIM4v5lvbx * Inv_L + model->BSIM4v5wvbx * Inv_W + model->BSIM4v5pvbx * Inv_LW; pParam->BSIM4v5vbm = model->BSIM4v5vbm + model->BSIM4v5lvbm * Inv_L + model->BSIM4v5wvbm * Inv_W + model->BSIM4v5pvbm * Inv_LW; pParam->BSIM4v5xt = model->BSIM4v5xt + model->BSIM4v5lxt * Inv_L + model->BSIM4v5wxt * Inv_W + model->BSIM4v5pxt * Inv_LW; pParam->BSIM4v5vfb = model->BSIM4v5vfb + model->BSIM4v5lvfb * Inv_L + model->BSIM4v5wvfb * Inv_W + model->BSIM4v5pvfb * Inv_LW; pParam->BSIM4v5k1 = model->BSIM4v5k1 + model->BSIM4v5lk1 * Inv_L + model->BSIM4v5wk1 * Inv_W + model->BSIM4v5pk1 * Inv_LW; pParam->BSIM4v5kt1 = model->BSIM4v5kt1 + model->BSIM4v5lkt1 * Inv_L + model->BSIM4v5wkt1 * Inv_W + model->BSIM4v5pkt1 * Inv_LW; pParam->BSIM4v5kt1l = model->BSIM4v5kt1l + model->BSIM4v5lkt1l * Inv_L + model->BSIM4v5wkt1l * Inv_W + model->BSIM4v5pkt1l * Inv_LW; pParam->BSIM4v5k2 = model->BSIM4v5k2 + model->BSIM4v5lk2 * Inv_L + model->BSIM4v5wk2 * Inv_W + model->BSIM4v5pk2 * Inv_LW; pParam->BSIM4v5kt2 = model->BSIM4v5kt2 + model->BSIM4v5lkt2 * Inv_L + model->BSIM4v5wkt2 * Inv_W + model->BSIM4v5pkt2 * Inv_LW; pParam->BSIM4v5k3 = model->BSIM4v5k3 + model->BSIM4v5lk3 * Inv_L + model->BSIM4v5wk3 * Inv_W + model->BSIM4v5pk3 * Inv_LW; pParam->BSIM4v5k3b = model->BSIM4v5k3b + model->BSIM4v5lk3b * Inv_L + model->BSIM4v5wk3b * Inv_W + model->BSIM4v5pk3b * Inv_LW; pParam->BSIM4v5w0 = model->BSIM4v5w0 + model->BSIM4v5lw0 * Inv_L + model->BSIM4v5ww0 * Inv_W + model->BSIM4v5pw0 * Inv_LW; pParam->BSIM4v5lpe0 = model->BSIM4v5lpe0 + model->BSIM4v5llpe0 * Inv_L + model->BSIM4v5wlpe0 * Inv_W + model->BSIM4v5plpe0 * Inv_LW; pParam->BSIM4v5lpeb = model->BSIM4v5lpeb + model->BSIM4v5llpeb * Inv_L + model->BSIM4v5wlpeb * Inv_W + model->BSIM4v5plpeb * Inv_LW; pParam->BSIM4v5dvtp0 = model->BSIM4v5dvtp0 + model->BSIM4v5ldvtp0 * Inv_L + model->BSIM4v5wdvtp0 * Inv_W + model->BSIM4v5pdvtp0 * Inv_LW; pParam->BSIM4v5dvtp1 = model->BSIM4v5dvtp1 + model->BSIM4v5ldvtp1 * Inv_L + model->BSIM4v5wdvtp1 * Inv_W + model->BSIM4v5pdvtp1 * Inv_LW; pParam->BSIM4v5dvt0 = model->BSIM4v5dvt0 + model->BSIM4v5ldvt0 * Inv_L + model->BSIM4v5wdvt0 * Inv_W + model->BSIM4v5pdvt0 * Inv_LW; pParam->BSIM4v5dvt1 = model->BSIM4v5dvt1 + model->BSIM4v5ldvt1 * Inv_L + model->BSIM4v5wdvt1 * Inv_W + model->BSIM4v5pdvt1 * Inv_LW; pParam->BSIM4v5dvt2 = model->BSIM4v5dvt2 + model->BSIM4v5ldvt2 * Inv_L + model->BSIM4v5wdvt2 * Inv_W + model->BSIM4v5pdvt2 * Inv_LW; pParam->BSIM4v5dvt0w = model->BSIM4v5dvt0w + model->BSIM4v5ldvt0w * Inv_L + model->BSIM4v5wdvt0w * Inv_W + model->BSIM4v5pdvt0w * Inv_LW; pParam->BSIM4v5dvt1w = model->BSIM4v5dvt1w + model->BSIM4v5ldvt1w * Inv_L + model->BSIM4v5wdvt1w * Inv_W + model->BSIM4v5pdvt1w * Inv_LW; pParam->BSIM4v5dvt2w = model->BSIM4v5dvt2w + model->BSIM4v5ldvt2w * Inv_L + model->BSIM4v5wdvt2w * Inv_W + model->BSIM4v5pdvt2w * Inv_LW; pParam->BSIM4v5drout = model->BSIM4v5drout + model->BSIM4v5ldrout * Inv_L + model->BSIM4v5wdrout * Inv_W + model->BSIM4v5pdrout * Inv_LW; pParam->BSIM4v5dsub = model->BSIM4v5dsub + model->BSIM4v5ldsub * Inv_L + model->BSIM4v5wdsub * Inv_W + model->BSIM4v5pdsub * Inv_LW; pParam->BSIM4v5vth0 = model->BSIM4v5vth0 + model->BSIM4v5lvth0 * Inv_L + model->BSIM4v5wvth0 * Inv_W + model->BSIM4v5pvth0 * Inv_LW; pParam->BSIM4v5ua = model->BSIM4v5ua + model->BSIM4v5lua * Inv_L + model->BSIM4v5wua * Inv_W + model->BSIM4v5pua * Inv_LW; pParam->BSIM4v5ua1 = model->BSIM4v5ua1 + model->BSIM4v5lua1 * Inv_L + model->BSIM4v5wua1 * Inv_W + model->BSIM4v5pua1 * Inv_LW; pParam->BSIM4v5ub = model->BSIM4v5ub + model->BSIM4v5lub * Inv_L + model->BSIM4v5wub * Inv_W + model->BSIM4v5pub * Inv_LW; pParam->BSIM4v5ub1 = model->BSIM4v5ub1 + model->BSIM4v5lub1 * Inv_L + model->BSIM4v5wub1 * Inv_W + model->BSIM4v5pub1 * Inv_LW; pParam->BSIM4v5uc = model->BSIM4v5uc + model->BSIM4v5luc * Inv_L + model->BSIM4v5wuc * Inv_W + model->BSIM4v5puc * Inv_LW; pParam->BSIM4v5uc1 = model->BSIM4v5uc1 + model->BSIM4v5luc1 * Inv_L + model->BSIM4v5wuc1 * Inv_W + model->BSIM4v5puc1 * Inv_LW; pParam->BSIM4v5ud = model->BSIM4v5ud + model->BSIM4v5lud * Inv_L + model->BSIM4v5wud * Inv_W + model->BSIM4v5pud * Inv_LW; pParam->BSIM4v5ud1 = model->BSIM4v5ud1 + model->BSIM4v5lud1 * Inv_L + model->BSIM4v5wud1 * Inv_W + model->BSIM4v5pud1 * Inv_LW; pParam->BSIM4v5up = model->BSIM4v5up + model->BSIM4v5lup * Inv_L + model->BSIM4v5wup * Inv_W + model->BSIM4v5pup * Inv_LW; pParam->BSIM4v5lp = model->BSIM4v5lp + model->BSIM4v5llp * Inv_L + model->BSIM4v5wlp * Inv_W + model->BSIM4v5plp * Inv_LW; pParam->BSIM4v5eu = model->BSIM4v5eu + model->BSIM4v5leu * Inv_L + model->BSIM4v5weu * Inv_W + model->BSIM4v5peu * Inv_LW; pParam->BSIM4v5u0 = model->BSIM4v5u0 + model->BSIM4v5lu0 * Inv_L + model->BSIM4v5wu0 * Inv_W + model->BSIM4v5pu0 * Inv_LW; pParam->BSIM4v5ute = model->BSIM4v5ute + model->BSIM4v5lute * Inv_L + model->BSIM4v5wute * Inv_W + model->BSIM4v5pute * Inv_LW; pParam->BSIM4v5voff = model->BSIM4v5voff + model->BSIM4v5lvoff * Inv_L + model->BSIM4v5wvoff * Inv_W + model->BSIM4v5pvoff * Inv_LW; pParam->BSIM4v5tvoff = model->BSIM4v5tvoff + model->BSIM4v5ltvoff * Inv_L + model->BSIM4v5wtvoff * Inv_W + model->BSIM4v5ptvoff * Inv_LW; pParam->BSIM4v5minv = model->BSIM4v5minv + model->BSIM4v5lminv * Inv_L + model->BSIM4v5wminv * Inv_W + model->BSIM4v5pminv * Inv_LW; pParam->BSIM4v5fprout = model->BSIM4v5fprout + model->BSIM4v5lfprout * Inv_L + model->BSIM4v5wfprout * Inv_W + model->BSIM4v5pfprout * Inv_LW; pParam->BSIM4v5pdits = model->BSIM4v5pdits + model->BSIM4v5lpdits * Inv_L + model->BSIM4v5wpdits * Inv_W + model->BSIM4v5ppdits * Inv_LW; pParam->BSIM4v5pditsd = model->BSIM4v5pditsd + model->BSIM4v5lpditsd * Inv_L + model->BSIM4v5wpditsd * Inv_W + model->BSIM4v5ppditsd * Inv_LW; pParam->BSIM4v5delta = model->BSIM4v5delta + model->BSIM4v5ldelta * Inv_L + model->BSIM4v5wdelta * Inv_W + model->BSIM4v5pdelta * Inv_LW; pParam->BSIM4v5rdsw = model->BSIM4v5rdsw + model->BSIM4v5lrdsw * Inv_L + model->BSIM4v5wrdsw * Inv_W + model->BSIM4v5prdsw * Inv_LW; pParam->BSIM4v5rdw = model->BSIM4v5rdw + model->BSIM4v5lrdw * Inv_L + model->BSIM4v5wrdw * Inv_W + model->BSIM4v5prdw * Inv_LW; pParam->BSIM4v5rsw = model->BSIM4v5rsw + model->BSIM4v5lrsw * Inv_L + model->BSIM4v5wrsw * Inv_W + model->BSIM4v5prsw * Inv_LW; pParam->BSIM4v5prwg = model->BSIM4v5prwg + model->BSIM4v5lprwg * Inv_L + model->BSIM4v5wprwg * Inv_W + model->BSIM4v5pprwg * Inv_LW; pParam->BSIM4v5prwb = model->BSIM4v5prwb + model->BSIM4v5lprwb * Inv_L + model->BSIM4v5wprwb * Inv_W + model->BSIM4v5pprwb * Inv_LW; pParam->BSIM4v5prt = model->BSIM4v5prt + model->BSIM4v5lprt * Inv_L + model->BSIM4v5wprt * Inv_W + model->BSIM4v5pprt * Inv_LW; pParam->BSIM4v5eta0 = model->BSIM4v5eta0 + model->BSIM4v5leta0 * Inv_L + model->BSIM4v5weta0 * Inv_W + model->BSIM4v5peta0 * Inv_LW; pParam->BSIM4v5etab = model->BSIM4v5etab + model->BSIM4v5letab * Inv_L + model->BSIM4v5wetab * Inv_W + model->BSIM4v5petab * Inv_LW; pParam->BSIM4v5pclm = model->BSIM4v5pclm + model->BSIM4v5lpclm * Inv_L + model->BSIM4v5wpclm * Inv_W + model->BSIM4v5ppclm * Inv_LW; pParam->BSIM4v5pdibl1 = model->BSIM4v5pdibl1 + model->BSIM4v5lpdibl1 * Inv_L + model->BSIM4v5wpdibl1 * Inv_W + model->BSIM4v5ppdibl1 * Inv_LW; pParam->BSIM4v5pdibl2 = model->BSIM4v5pdibl2 + model->BSIM4v5lpdibl2 * Inv_L + model->BSIM4v5wpdibl2 * Inv_W + model->BSIM4v5ppdibl2 * Inv_LW; pParam->BSIM4v5pdiblb = model->BSIM4v5pdiblb + model->BSIM4v5lpdiblb * Inv_L + model->BSIM4v5wpdiblb * Inv_W + model->BSIM4v5ppdiblb * Inv_LW; pParam->BSIM4v5pscbe1 = model->BSIM4v5pscbe1 + model->BSIM4v5lpscbe1 * Inv_L + model->BSIM4v5wpscbe1 * Inv_W + model->BSIM4v5ppscbe1 * Inv_LW; pParam->BSIM4v5pscbe2 = model->BSIM4v5pscbe2 + model->BSIM4v5lpscbe2 * Inv_L + model->BSIM4v5wpscbe2 * Inv_W + model->BSIM4v5ppscbe2 * Inv_LW; pParam->BSIM4v5pvag = model->BSIM4v5pvag + model->BSIM4v5lpvag * Inv_L + model->BSIM4v5wpvag * Inv_W + model->BSIM4v5ppvag * Inv_LW; pParam->BSIM4v5wr = model->BSIM4v5wr + model->BSIM4v5lwr * Inv_L + model->BSIM4v5wwr * Inv_W + model->BSIM4v5pwr * Inv_LW; pParam->BSIM4v5dwg = model->BSIM4v5dwg + model->BSIM4v5ldwg * Inv_L + model->BSIM4v5wdwg * Inv_W + model->BSIM4v5pdwg * Inv_LW; pParam->BSIM4v5dwb = model->BSIM4v5dwb + model->BSIM4v5ldwb * Inv_L + model->BSIM4v5wdwb * Inv_W + model->BSIM4v5pdwb * Inv_LW; pParam->BSIM4v5b0 = model->BSIM4v5b0 + model->BSIM4v5lb0 * Inv_L + model->BSIM4v5wb0 * Inv_W + model->BSIM4v5pb0 * Inv_LW; pParam->BSIM4v5b1 = model->BSIM4v5b1 + model->BSIM4v5lb1 * Inv_L + model->BSIM4v5wb1 * Inv_W + model->BSIM4v5pb1 * Inv_LW; pParam->BSIM4v5alpha0 = model->BSIM4v5alpha0 + model->BSIM4v5lalpha0 * Inv_L + model->BSIM4v5walpha0 * Inv_W + model->BSIM4v5palpha0 * Inv_LW; pParam->BSIM4v5alpha1 = model->BSIM4v5alpha1 + model->BSIM4v5lalpha1 * Inv_L + model->BSIM4v5walpha1 * Inv_W + model->BSIM4v5palpha1 * Inv_LW; pParam->BSIM4v5beta0 = model->BSIM4v5beta0 + model->BSIM4v5lbeta0 * Inv_L + model->BSIM4v5wbeta0 * Inv_W + model->BSIM4v5pbeta0 * Inv_LW; pParam->BSIM4v5agidl = model->BSIM4v5agidl + model->BSIM4v5lagidl * Inv_L + model->BSIM4v5wagidl * Inv_W + model->BSIM4v5pagidl * Inv_LW; pParam->BSIM4v5bgidl = model->BSIM4v5bgidl + model->BSIM4v5lbgidl * Inv_L + model->BSIM4v5wbgidl * Inv_W + model->BSIM4v5pbgidl * Inv_LW; pParam->BSIM4v5cgidl = model->BSIM4v5cgidl + model->BSIM4v5lcgidl * Inv_L + model->BSIM4v5wcgidl * Inv_W + model->BSIM4v5pcgidl * Inv_LW; pParam->BSIM4v5egidl = model->BSIM4v5egidl + model->BSIM4v5legidl * Inv_L + model->BSIM4v5wegidl * Inv_W + model->BSIM4v5pegidl * Inv_LW; pParam->BSIM4v5aigc = model->BSIM4v5aigc + model->BSIM4v5laigc * Inv_L + model->BSIM4v5waigc * Inv_W + model->BSIM4v5paigc * Inv_LW; pParam->BSIM4v5bigc = model->BSIM4v5bigc + model->BSIM4v5lbigc * Inv_L + model->BSIM4v5wbigc * Inv_W + model->BSIM4v5pbigc * Inv_LW; pParam->BSIM4v5cigc = model->BSIM4v5cigc + model->BSIM4v5lcigc * Inv_L + model->BSIM4v5wcigc * Inv_W + model->BSIM4v5pcigc * Inv_LW; pParam->BSIM4v5aigsd = model->BSIM4v5aigsd + model->BSIM4v5laigsd * Inv_L + model->BSIM4v5waigsd * Inv_W + model->BSIM4v5paigsd * Inv_LW; pParam->BSIM4v5bigsd = model->BSIM4v5bigsd + model->BSIM4v5lbigsd * Inv_L + model->BSIM4v5wbigsd * Inv_W + model->BSIM4v5pbigsd * Inv_LW; pParam->BSIM4v5cigsd = model->BSIM4v5cigsd + model->BSIM4v5lcigsd * Inv_L + model->BSIM4v5wcigsd * Inv_W + model->BSIM4v5pcigsd * Inv_LW; pParam->BSIM4v5aigbacc = model->BSIM4v5aigbacc + model->BSIM4v5laigbacc * Inv_L + model->BSIM4v5waigbacc * Inv_W + model->BSIM4v5paigbacc * Inv_LW; pParam->BSIM4v5bigbacc = model->BSIM4v5bigbacc + model->BSIM4v5lbigbacc * Inv_L + model->BSIM4v5wbigbacc * Inv_W + model->BSIM4v5pbigbacc * Inv_LW; pParam->BSIM4v5cigbacc = model->BSIM4v5cigbacc + model->BSIM4v5lcigbacc * Inv_L + model->BSIM4v5wcigbacc * Inv_W + model->BSIM4v5pcigbacc * Inv_LW; pParam->BSIM4v5aigbinv = model->BSIM4v5aigbinv + model->BSIM4v5laigbinv * Inv_L + model->BSIM4v5waigbinv * Inv_W + model->BSIM4v5paigbinv * Inv_LW; pParam->BSIM4v5bigbinv = model->BSIM4v5bigbinv + model->BSIM4v5lbigbinv * Inv_L + model->BSIM4v5wbigbinv * Inv_W + model->BSIM4v5pbigbinv * Inv_LW; pParam->BSIM4v5cigbinv = model->BSIM4v5cigbinv + model->BSIM4v5lcigbinv * Inv_L + model->BSIM4v5wcigbinv * Inv_W + model->BSIM4v5pcigbinv * Inv_LW; pParam->BSIM4v5nigc = model->BSIM4v5nigc + model->BSIM4v5lnigc * Inv_L + model->BSIM4v5wnigc * Inv_W + model->BSIM4v5pnigc * Inv_LW; pParam->BSIM4v5nigbacc = model->BSIM4v5nigbacc + model->BSIM4v5lnigbacc * Inv_L + model->BSIM4v5wnigbacc * Inv_W + model->BSIM4v5pnigbacc * Inv_LW; pParam->BSIM4v5nigbinv = model->BSIM4v5nigbinv + model->BSIM4v5lnigbinv * Inv_L + model->BSIM4v5wnigbinv * Inv_W + model->BSIM4v5pnigbinv * Inv_LW; pParam->BSIM4v5ntox = model->BSIM4v5ntox + model->BSIM4v5lntox * Inv_L + model->BSIM4v5wntox * Inv_W + model->BSIM4v5pntox * Inv_LW; pParam->BSIM4v5eigbinv = model->BSIM4v5eigbinv + model->BSIM4v5leigbinv * Inv_L + model->BSIM4v5weigbinv * Inv_W + model->BSIM4v5peigbinv * Inv_LW; pParam->BSIM4v5pigcd = model->BSIM4v5pigcd + model->BSIM4v5lpigcd * Inv_L + model->BSIM4v5wpigcd * Inv_W + model->BSIM4v5ppigcd * Inv_LW; pParam->BSIM4v5poxedge = model->BSIM4v5poxedge + model->BSIM4v5lpoxedge * Inv_L + model->BSIM4v5wpoxedge * Inv_W + model->BSIM4v5ppoxedge * Inv_LW; pParam->BSIM4v5xrcrg1 = model->BSIM4v5xrcrg1 + model->BSIM4v5lxrcrg1 * Inv_L + model->BSIM4v5wxrcrg1 * Inv_W + model->BSIM4v5pxrcrg1 * Inv_LW; pParam->BSIM4v5xrcrg2 = model->BSIM4v5xrcrg2 + model->BSIM4v5lxrcrg2 * Inv_L + model->BSIM4v5wxrcrg2 * Inv_W + model->BSIM4v5pxrcrg2 * Inv_LW; pParam->BSIM4v5lambda = model->BSIM4v5lambda + model->BSIM4v5llambda * Inv_L + model->BSIM4v5wlambda * Inv_W + model->BSIM4v5plambda * Inv_LW; pParam->BSIM4v5vtl = model->BSIM4v5vtl + model->BSIM4v5lvtl * Inv_L + model->BSIM4v5wvtl * Inv_W + model->BSIM4v5pvtl * Inv_LW; pParam->BSIM4v5xn = model->BSIM4v5xn + model->BSIM4v5lxn * Inv_L + model->BSIM4v5wxn * Inv_W + model->BSIM4v5pxn * Inv_LW; pParam->BSIM4v5vfbsdoff = model->BSIM4v5vfbsdoff + model->BSIM4v5lvfbsdoff * Inv_L + model->BSIM4v5wvfbsdoff * Inv_W + model->BSIM4v5pvfbsdoff * Inv_LW; pParam->BSIM4v5tvfbsdoff = model->BSIM4v5tvfbsdoff + model->BSIM4v5ltvfbsdoff * Inv_L + model->BSIM4v5wtvfbsdoff * Inv_W + model->BSIM4v5ptvfbsdoff * Inv_LW; pParam->BSIM4v5cgsl = model->BSIM4v5cgsl + model->BSIM4v5lcgsl * Inv_L + model->BSIM4v5wcgsl * Inv_W + model->BSIM4v5pcgsl * Inv_LW; pParam->BSIM4v5cgdl = model->BSIM4v5cgdl + model->BSIM4v5lcgdl * Inv_L + model->BSIM4v5wcgdl * Inv_W + model->BSIM4v5pcgdl * Inv_LW; pParam->BSIM4v5ckappas = model->BSIM4v5ckappas + model->BSIM4v5lckappas * Inv_L + model->BSIM4v5wckappas * Inv_W + model->BSIM4v5pckappas * Inv_LW; pParam->BSIM4v5ckappad = model->BSIM4v5ckappad + model->BSIM4v5lckappad * Inv_L + model->BSIM4v5wckappad * Inv_W + model->BSIM4v5pckappad * Inv_LW; pParam->BSIM4v5cf = model->BSIM4v5cf + model->BSIM4v5lcf * Inv_L + model->BSIM4v5wcf * Inv_W + model->BSIM4v5pcf * Inv_LW; pParam->BSIM4v5clc = model->BSIM4v5clc + model->BSIM4v5lclc * Inv_L + model->BSIM4v5wclc * Inv_W + model->BSIM4v5pclc * Inv_LW; pParam->BSIM4v5cle = model->BSIM4v5cle + model->BSIM4v5lcle * Inv_L + model->BSIM4v5wcle * Inv_W + model->BSIM4v5pcle * Inv_LW; pParam->BSIM4v5vfbcv = model->BSIM4v5vfbcv + model->BSIM4v5lvfbcv * Inv_L + model->BSIM4v5wvfbcv * Inv_W + model->BSIM4v5pvfbcv * Inv_LW; pParam->BSIM4v5acde = model->BSIM4v5acde + model->BSIM4v5lacde * Inv_L + model->BSIM4v5wacde * Inv_W + model->BSIM4v5pacde * Inv_LW; pParam->BSIM4v5moin = model->BSIM4v5moin + model->BSIM4v5lmoin * Inv_L + model->BSIM4v5wmoin * Inv_W + model->BSIM4v5pmoin * Inv_LW; pParam->BSIM4v5noff = model->BSIM4v5noff + model->BSIM4v5lnoff * Inv_L + model->BSIM4v5wnoff * Inv_W + model->BSIM4v5pnoff * Inv_LW; pParam->BSIM4v5voffcv = model->BSIM4v5voffcv + model->BSIM4v5lvoffcv * Inv_L + model->BSIM4v5wvoffcv * Inv_W + model->BSIM4v5pvoffcv * Inv_LW; pParam->BSIM4v5kvth0we = model->BSIM4v5kvth0we + model->BSIM4v5lkvth0we * Inv_L + model->BSIM4v5wkvth0we * Inv_W + model->BSIM4v5pkvth0we * Inv_LW; pParam->BSIM4v5k2we = model->BSIM4v5k2we + model->BSIM4v5lk2we * Inv_L + model->BSIM4v5wk2we * Inv_W + model->BSIM4v5pk2we * Inv_LW; pParam->BSIM4v5ku0we = model->BSIM4v5ku0we + model->BSIM4v5lku0we * Inv_L + model->BSIM4v5wku0we * Inv_W + model->BSIM4v5pku0we * Inv_LW; pParam->BSIM4v5abulkCVfactor = 1.0 + pow((pParam->BSIM4v5clc / pParam->BSIM4v5leffCV), pParam->BSIM4v5cle); T0 = (TRatio - 1.0); PowWeffWr = pow(pParam->BSIM4v5weffCJ * 1.0e6, pParam->BSIM4v5wr) * here->BSIM4v5nf; T1 = T2 = T3 = T4 = 0.0; if(model->BSIM4v5tempMod == 0) { pParam->BSIM4v5ua = pParam->BSIM4v5ua + pParam->BSIM4v5ua1 * T0; pParam->BSIM4v5ub = pParam->BSIM4v5ub + pParam->BSIM4v5ub1 * T0; pParam->BSIM4v5uc = pParam->BSIM4v5uc + pParam->BSIM4v5uc1 * T0; pParam->BSIM4v5ud = pParam->BSIM4v5ud + pParam->BSIM4v5ud1 * T0; pParam->BSIM4v5vsattemp = pParam->BSIM4v5vsat - pParam->BSIM4v5at * T0; T10 = pParam->BSIM4v5prt * T0; if(model->BSIM4v5rdsMod) { /* External Rd(V) */ T1 = pParam->BSIM4v5rdw + T10; T2 = model->BSIM4v5rdwmin + T10; /* External Rs(V) */ T3 = pParam->BSIM4v5rsw + T10; T4 = model->BSIM4v5rswmin + T10; } /* Internal Rds(V) in IV */ pParam->BSIM4v5rds0 = (pParam->BSIM4v5rdsw + T10) * here->BSIM4v5nf / PowWeffWr; pParam->BSIM4v5rdswmin = (model->BSIM4v5rdswmin + T10) * here->BSIM4v5nf / PowWeffWr; } else { /* tempMod = 1, 2 */ pParam->BSIM4v5ua = pParam->BSIM4v5ua * (1.0 + pParam->BSIM4v5ua1 * delTemp) ; pParam->BSIM4v5ub = pParam->BSIM4v5ub * (1.0 + pParam->BSIM4v5ub1 * delTemp); pParam->BSIM4v5uc = pParam->BSIM4v5uc * (1.0 + pParam->BSIM4v5uc1 * delTemp); pParam->BSIM4v5ud = pParam->BSIM4v5ud * (1.0 + pParam->BSIM4v5ud1 * delTemp); pParam->BSIM4v5vsattemp = pParam->BSIM4v5vsat * (1.0 - pParam->BSIM4v5at * delTemp); T10 = 1.0 + pParam->BSIM4v5prt * delTemp; if(model->BSIM4v5rdsMod) { /* External Rd(V) */ T1 = pParam->BSIM4v5rdw * T10; T2 = model->BSIM4v5rdwmin * T10; /* External Rs(V) */ T3 = pParam->BSIM4v5rsw * T10; T4 = model->BSIM4v5rswmin * T10; } /* Internal Rds(V) in IV */ pParam->BSIM4v5rds0 = pParam->BSIM4v5rdsw * T10 * here->BSIM4v5nf / PowWeffWr; pParam->BSIM4v5rdswmin = model->BSIM4v5rdswmin * T10 * here->BSIM4v5nf / PowWeffWr; } if (T1 < 0.0) { T1 = 0.0; printf("Warning: Rdw at current temperature is negative; set to 0.\n"); } if (T2 < 0.0) { T2 = 0.0; printf("Warning: Rdwmin at current temperature is negative; set to 0.\n"); } pParam->BSIM4v5rd0 = T1 / PowWeffWr; pParam->BSIM4v5rdwmin = T2 / PowWeffWr; if (T3 < 0.0) { T3 = 0.0; printf("Warning: Rsw at current temperature is negative; set to 0.\n"); } if (T4 < 0.0) { T4 = 0.0; printf("Warning: Rswmin at current temperature is negative; set to 0.\n"); } pParam->BSIM4v5rs0 = T3 / PowWeffWr; pParam->BSIM4v5rswmin = T4 / PowWeffWr; if (pParam->BSIM4v5u0 > 1.0) pParam->BSIM4v5u0 = pParam->BSIM4v5u0 / 1.0e4; /* mobility channel length dependence */ T5 = 1.0 - pParam->BSIM4v5up * exp( - pParam->BSIM4v5leff / pParam->BSIM4v5lp); pParam->BSIM4v5u0temp = pParam->BSIM4v5u0 * T5 * pow(TRatio, pParam->BSIM4v5ute); if (pParam->BSIM4v5eu < 0.0) { pParam->BSIM4v5eu = 0.0; printf("Warning: eu has been negative; reset to 0.0.\n"); } pParam->BSIM4v5vfbsdoff = pParam->BSIM4v5vfbsdoff * (1.0 + pParam->BSIM4v5tvfbsdoff * delTemp); pParam->BSIM4v5voff = pParam->BSIM4v5voff * (1.0 + pParam->BSIM4v5tvoff * delTemp); /* Source End Velocity Limit */ if((model->BSIM4v5vtlGiven) && (model->BSIM4v5vtl > 0.0) ) { if(model->BSIM4v5lc < 0.0) pParam->BSIM4v5lc = 0.0; else pParam->BSIM4v5lc = model->BSIM4v5lc ; T0 = pParam->BSIM4v5leff / (pParam->BSIM4v5xn * pParam->BSIM4v5leff + pParam->BSIM4v5lc); pParam->BSIM4v5tfactor = (1.0 - T0) / (1.0 + T0 ); } pParam->BSIM4v5cgdo = (model->BSIM4v5cgdo + pParam->BSIM4v5cf) * pParam->BSIM4v5weffCV; pParam->BSIM4v5cgso = (model->BSIM4v5cgso + pParam->BSIM4v5cf) * pParam->BSIM4v5weffCV; pParam->BSIM4v5cgbo = model->BSIM4v5cgbo * pParam->BSIM4v5leffCV * here->BSIM4v5nf; if (!model->BSIM4v5ndepGiven && model->BSIM4v5gamma1Given) { T0 = pParam->BSIM4v5gamma1 * model->BSIM4v5coxe; pParam->BSIM4v5ndep = 3.01248e22 * T0 * T0; } pParam->BSIM4v5phi = Vtm0 * log(pParam->BSIM4v5ndep / ni) + pParam->BSIM4v5phin + 0.4; pParam->BSIM4v5sqrtPhi = sqrt(pParam->BSIM4v5phi); pParam->BSIM4v5phis3 = pParam->BSIM4v5sqrtPhi * pParam->BSIM4v5phi; pParam->BSIM4v5Xdep0 = sqrt(2.0 * EPSSI / (Charge_q * pParam->BSIM4v5ndep * 1.0e6)) * pParam->BSIM4v5sqrtPhi; pParam->BSIM4v5sqrtXdep0 = sqrt(pParam->BSIM4v5Xdep0); pParam->BSIM4v5litl = sqrt(3.0 * pParam->BSIM4v5xj * model->BSIM4v5toxe); pParam->BSIM4v5vbi = Vtm0 * log(pParam->BSIM4v5nsd * pParam->BSIM4v5ndep / (ni * ni)); if (pParam->BSIM4v5ngate > 0.0) { pParam->BSIM4v5vfbsd = Vtm0 * log(pParam->BSIM4v5ngate / pParam->BSIM4v5nsd); } else pParam->BSIM4v5vfbsd = 0.0; pParam->BSIM4v5cdep0 = sqrt(Charge_q * EPSSI * pParam->BSIM4v5ndep * 1.0e6 / 2.0 / pParam->BSIM4v5phi); pParam->BSIM4v5ToxRatio = exp(pParam->BSIM4v5ntox * log(model->BSIM4v5toxref / model->BSIM4v5toxe)) / model->BSIM4v5toxe / model->BSIM4v5toxe; pParam->BSIM4v5ToxRatioEdge = exp(pParam->BSIM4v5ntox * log(model->BSIM4v5toxref / (model->BSIM4v5toxe * pParam->BSIM4v5poxedge))) / model->BSIM4v5toxe / model->BSIM4v5toxe / pParam->BSIM4v5poxedge / pParam->BSIM4v5poxedge; pParam->BSIM4v5Aechvb = (model->BSIM4v5type == NMOS) ? 4.97232e-7 : 3.42537e-7; pParam->BSIM4v5Bechvb = (model->BSIM4v5type == NMOS) ? 7.45669e11 : 1.16645e12; pParam->BSIM4v5AechvbEdge = pParam->BSIM4v5Aechvb * pParam->BSIM4v5weff * model->BSIM4v5dlcig * pParam->BSIM4v5ToxRatioEdge; pParam->BSIM4v5BechvbEdge = -pParam->BSIM4v5Bechvb * model->BSIM4v5toxe * pParam->BSIM4v5poxedge; pParam->BSIM4v5Aechvb *= pParam->BSIM4v5weff * pParam->BSIM4v5leff * pParam->BSIM4v5ToxRatio; pParam->BSIM4v5Bechvb *= -model->BSIM4v5toxe; pParam->BSIM4v5mstar = 0.5 + atan(pParam->BSIM4v5minv) / PI; pParam->BSIM4v5voffcbn = pParam->BSIM4v5voff + model->BSIM4v5voffl / pParam->BSIM4v5leff; pParam->BSIM4v5ldeb = sqrt(EPSSI * Vtm0 / (Charge_q * pParam->BSIM4v5ndep * 1.0e6)) / 3.0; pParam->BSIM4v5acde *= pow((pParam->BSIM4v5ndep / 2.0e16), -0.25); if (model->BSIM4v5k1Given || model->BSIM4v5k2Given) { if (!model->BSIM4v5k1Given) { if ((!ckt->CKTcurJob) || (ckt->CKTcurJob->JOBtype < 9)) /* don't print in sensitivity */ fprintf(stdout, "Warning: k1 should be specified with k2.\n"); pParam->BSIM4v5k1 = 0.53; } if (!model->BSIM4v5k2Given) { if ((!ckt->CKTcurJob) || (ckt->CKTcurJob->JOBtype < 9)) /* don't print in sensitivity */ fprintf(stdout, "Warning: k2 should be specified with k1.\n"); pParam->BSIM4v5k2 = -0.0186; } if ((!ckt->CKTcurJob) || (ckt->CKTcurJob->JOBtype < 9)) { /* don't print in sensitivity */ if (model->BSIM4v5nsubGiven) fprintf(stdout, "Warning: nsub is ignored because k1 or k2 is given.\n"); if (model->BSIM4v5xtGiven) fprintf(stdout, "Warning: xt is ignored because k1 or k2 is given.\n"); if (model->BSIM4v5vbxGiven) fprintf(stdout, "Warning: vbx is ignored because k1 or k2 is given.\n"); if (model->BSIM4v5gamma1Given) fprintf(stdout, "Warning: gamma1 is ignored because k1 or k2 is given.\n"); if (model->BSIM4v5gamma2Given) fprintf(stdout, "Warning: gamma2 is ignored because k1 or k2 is given.\n"); } } else { if (!model->BSIM4v5vbxGiven) pParam->BSIM4v5vbx = pParam->BSIM4v5phi - 7.7348e-4 * pParam->BSIM4v5ndep * pParam->BSIM4v5xt * pParam->BSIM4v5xt; if (pParam->BSIM4v5vbx > 0.0) pParam->BSIM4v5vbx = -pParam->BSIM4v5vbx; if (pParam->BSIM4v5vbm > 0.0) pParam->BSIM4v5vbm = -pParam->BSIM4v5vbm; if (!model->BSIM4v5gamma1Given) pParam->BSIM4v5gamma1 = 5.753e-12 * sqrt(pParam->BSIM4v5ndep) / model->BSIM4v5coxe; if (!model->BSIM4v5gamma2Given) pParam->BSIM4v5gamma2 = 5.753e-12 * sqrt(pParam->BSIM4v5nsub) / model->BSIM4v5coxe; T0 = pParam->BSIM4v5gamma1 - pParam->BSIM4v5gamma2; T1 = sqrt(pParam->BSIM4v5phi - pParam->BSIM4v5vbx) - pParam->BSIM4v5sqrtPhi; T2 = sqrt(pParam->BSIM4v5phi * (pParam->BSIM4v5phi - pParam->BSIM4v5vbm)) - pParam->BSIM4v5phi; pParam->BSIM4v5k2 = T0 * T1 / (2.0 * T2 + pParam->BSIM4v5vbm); pParam->BSIM4v5k1 = pParam->BSIM4v5gamma2 - 2.0 * pParam->BSIM4v5k2 * sqrt(pParam->BSIM4v5phi - pParam->BSIM4v5vbm); } if (!model->BSIM4v5vfbGiven) { if (model->BSIM4v5vth0Given) { pParam->BSIM4v5vfb = model->BSIM4v5type * pParam->BSIM4v5vth0 - pParam->BSIM4v5phi - pParam->BSIM4v5k1 * pParam->BSIM4v5sqrtPhi; } else { pParam->BSIM4v5vfb = -1.0; } } if (!model->BSIM4v5vth0Given) { pParam->BSIM4v5vth0 = model->BSIM4v5type * (pParam->BSIM4v5vfb + pParam->BSIM4v5phi + pParam->BSIM4v5k1 * pParam->BSIM4v5sqrtPhi); } pParam->BSIM4v5k1ox = pParam->BSIM4v5k1 * model->BSIM4v5toxe / model->BSIM4v5toxm; tmp = sqrt(EPSSI / (model->BSIM4v5epsrox * EPS0) * model->BSIM4v5toxe * pParam->BSIM4v5Xdep0); T0 = pParam->BSIM4v5dsub * pParam->BSIM4v5leff / tmp; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; pParam->BSIM4v5theta0vb0 = T1 / T4; } else pParam->BSIM4v5theta0vb0 = 1.0 / (MAX_EXP - 2.0); T0 = pParam->BSIM4v5drout * pParam->BSIM4v5leff / tmp; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; T5 = T1 / T4; } else T5 = 1.0 / (MAX_EXP - 2.0); /* 3.0 * MIN_EXP omitted */ pParam->BSIM4v5thetaRout = pParam->BSIM4v5pdibl1 * T5 + pParam->BSIM4v5pdibl2; tmp = sqrt(pParam->BSIM4v5Xdep0); tmp1 = pParam->BSIM4v5vbi - pParam->BSIM4v5phi; tmp2 = model->BSIM4v5factor1 * tmp; T0 = pParam->BSIM4v5dvt1w * pParam->BSIM4v5weff * pParam->BSIM4v5leff / tmp2; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; T8 = T1 / T4; } else T8 = 1.0 / (MAX_EXP - 2.0); T0 = pParam->BSIM4v5dvt0w * T8; T8 = T0 * tmp1; T0 = pParam->BSIM4v5dvt1 * pParam->BSIM4v5leff / tmp2; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; T9 = T1 / T4; } else T9 = 1.0 / (MAX_EXP - 2.0); T9 = pParam->BSIM4v5dvt0 * T9 * tmp1; T4 = model->BSIM4v5toxe * pParam->BSIM4v5phi / (pParam->BSIM4v5weff + pParam->BSIM4v5w0); T0 = sqrt(1.0 + pParam->BSIM4v5lpe0 / pParam->BSIM4v5leff); if((model->BSIM4v5tempMod == 1) || (model->BSIM4v5tempMod == 0)) T3 = (pParam->BSIM4v5kt1 + pParam->BSIM4v5kt1l / pParam->BSIM4v5leff) * (TRatio - 1.0); if(model->BSIM4v5tempMod == 2) T3 = - pParam->BSIM4v5kt1 * (TRatio - 1.0); T5 = pParam->BSIM4v5k1ox * (T0 - 1.0) * pParam->BSIM4v5sqrtPhi + T3; pParam->BSIM4v5vfbzbfactor = - T8 - T9 + pParam->BSIM4v5k3 * T4 + T5 - pParam->BSIM4v5phi - pParam->BSIM4v5k1 * pParam->BSIM4v5sqrtPhi; /* stress effect */ wlod = model->BSIM4v5wlod; if (model->BSIM4v5wlod < 0.0) { fprintf(stderr, "Warning: WLOD = %g is less than 0. 0.0 is used\n",model->BSIM4v5wlod); wlod = 0.0; } T0 = pow(Lnew, model->BSIM4v5llodku0); W_tmp = Wnew + wlod; T1 = pow(W_tmp, model->BSIM4v5wlodku0); tmp1 = model->BSIM4v5lku0 / T0 + model->BSIM4v5wku0 / T1 + model->BSIM4v5pku0 / (T0 * T1); pParam->BSIM4v5ku0 = 1.0 + tmp1; T0 = pow(Lnew, model->BSIM4v5llodvth); T1 = pow(W_tmp, model->BSIM4v5wlodvth); tmp1 = model->BSIM4v5lkvth0 / T0 + model->BSIM4v5wkvth0 / T1 + model->BSIM4v5pkvth0 / (T0 * T1); pParam->BSIM4v5kvth0 = 1.0 + tmp1; pParam->BSIM4v5kvth0 = sqrt(pParam->BSIM4v5kvth0*pParam->BSIM4v5kvth0 + DELTA); T0 = (TRatio - 1.0); pParam->BSIM4v5ku0temp = pParam->BSIM4v5ku0 * (1.0 + model->BSIM4v5tku0 *T0) + DELTA; Inv_saref = 1.0/(model->BSIM4v5saref + 0.5*Ldrn); Inv_sbref = 1.0/(model->BSIM4v5sbref + 0.5*Ldrn); pParam->BSIM4v5inv_od_ref = Inv_saref + Inv_sbref; pParam->BSIM4v5rho_ref = model->BSIM4v5ku0 / pParam->BSIM4v5ku0temp * pParam->BSIM4v5inv_od_ref; } /* End of SizeNotFound */ /* stress effect */ if( (here->BSIM4v5sa > 0.0) && (here->BSIM4v5sb > 0.0) && ((here->BSIM4v5nf == 1.0) || ((here->BSIM4v5nf > 1.0) && (here->BSIM4v5sd > 0.0))) ) { Inv_sa = 0; Inv_sb = 0; kvsat = model->BSIM4v5kvsat; if (model->BSIM4v5kvsat < -1.0 ) { fprintf(stderr, "Warning: KVSAT = %g is too small; -1.0 is used.\n",model->BSIM4v5kvsat); kvsat = -1.0; } if (model->BSIM4v5kvsat > 1.0) { fprintf(stderr, "Warning: KVSAT = %g is too big; 1.0 is used.\n",model->BSIM4v5kvsat); kvsat = 1.0; } for(i = 0; i < here->BSIM4v5nf; i++){ T0 = 1.0 / here->BSIM4v5nf / (here->BSIM4v5sa + 0.5*Ldrn + i * (here->BSIM4v5sd +Ldrn)); T1 = 1.0 / here->BSIM4v5nf / (here->BSIM4v5sb + 0.5*Ldrn + i * (here->BSIM4v5sd +Ldrn)); Inv_sa += T0; Inv_sb += T1; } Inv_ODeff = Inv_sa + Inv_sb; rho = model->BSIM4v5ku0 / pParam->BSIM4v5ku0temp * Inv_ODeff; T0 = (1.0 + rho)/(1.0 + pParam->BSIM4v5rho_ref); here->BSIM4v5u0temp = pParam->BSIM4v5u0temp * T0; T1 = (1.0 + kvsat * rho)/(1.0 + kvsat * pParam->BSIM4v5rho_ref); here->BSIM4v5vsattemp = pParam->BSIM4v5vsattemp * T1; OD_offset = Inv_ODeff - pParam->BSIM4v5inv_od_ref; dvth0_lod = model->BSIM4v5kvth0 / pParam->BSIM4v5kvth0 * OD_offset; dk2_lod = model->BSIM4v5stk2 / pow(pParam->BSIM4v5kvth0, model->BSIM4v5lodk2) * OD_offset; deta0_lod = model->BSIM4v5steta0 / pow(pParam->BSIM4v5kvth0, model->BSIM4v5lodeta0) * OD_offset; here->BSIM4v5vth0 = pParam->BSIM4v5vth0 + dvth0_lod; here->BSIM4v5eta0 = pParam->BSIM4v5eta0 + deta0_lod; here->BSIM4v5k2 = pParam->BSIM4v5k2 + dk2_lod; } else { here->BSIM4v5u0temp = pParam->BSIM4v5u0temp; here->BSIM4v5vth0 = pParam->BSIM4v5vth0; here->BSIM4v5vsattemp = pParam->BSIM4v5vsattemp; here->BSIM4v5eta0 = pParam->BSIM4v5eta0; here->BSIM4v5k2 = pParam->BSIM4v5k2; } /* Well Proximity Effect */ if (model->BSIM4v5wpemod) { if( (!here->BSIM4v5scaGiven) && (!here->BSIM4v5scbGiven) && (!here->BSIM4v5sccGiven) ) { if((here->BSIM4v5scGiven) && (here->BSIM4v5sc > 0.0) ) { T1 = here->BSIM4v5sc + Wdrn; T2 = 1.0 / model->BSIM4v5scref; here->BSIM4v5sca = model->BSIM4v5scref * model->BSIM4v5scref / (here->BSIM4v5sc * T1); here->BSIM4v5scb = ( (0.1 * here->BSIM4v5sc + 0.01 * model->BSIM4v5scref) * exp(-10.0 * here->BSIM4v5sc * T2) - (0.1 * T1 + 0.01 * model->BSIM4v5scref) * exp(-10.0 * T1 * T2) ) / Wdrn; here->BSIM4v5scc = ( (0.05 * here->BSIM4v5sc + 0.0025 * model->BSIM4v5scref) * exp(-20.0 * here->BSIM4v5sc * T2) - (0.05 * T1 + 0.0025 * model->BSIM4v5scref) * exp(-20.0 * T1 * T2) ) / Wdrn; } else { //fprintf(stderr, "Warning: No WPE as none of SCA, SCB, SCC, SC is given and/or SC not positive.\n"); } } sceff = here->BSIM4v5sca + model->BSIM4v5web * here->BSIM4v5scb + model->BSIM4v5wec * here->BSIM4v5scc; here->BSIM4v5vth0 += pParam->BSIM4v5kvth0we * sceff; here->BSIM4v5k2 += pParam->BSIM4v5k2we * sceff; T3 = 1.0 + pParam->BSIM4v5ku0we * sceff; if (T3 <= 0.0) { fprintf(stderr, "Warning: ku0we = %g is negatively too high. Negative mobility! \n", T3); T3 = 0.0; } here->BSIM4v5u0temp *= T3; } /* adding delvto */ here->BSIM4v5vth0 += here->BSIM4v5delvto; here->BSIM4v5vfb = pParam->BSIM4v5vfb + model->BSIM4v5type * here->BSIM4v5delvto; /* Instance variables calculation */ T3 = model->BSIM4v5type * here->BSIM4v5vth0 - here->BSIM4v5vfb - pParam->BSIM4v5phi; T4 = T3 + T3; T5 = 2.5 * T3; here->BSIM4v5vtfbphi1 = (model->BSIM4v5type == NMOS) ? T4 : T5; if (here->BSIM4v5vtfbphi1 < 0.0) here->BSIM4v5vtfbphi1 = 0.0; here->BSIM4v5vtfbphi2 = 4.0 * T3; if (here->BSIM4v5vtfbphi2 < 0.0) here->BSIM4v5vtfbphi2 = 0.0; if (here->BSIM4v5k2 < 0.0) { T0 = 0.5 * pParam->BSIM4v5k1 / here->BSIM4v5k2; here->BSIM4v5vbsc = 0.9 * (pParam->BSIM4v5phi - T0 * T0); if (here->BSIM4v5vbsc > -3.0) here->BSIM4v5vbsc = -3.0; else if (here->BSIM4v5vbsc < -30.0) here->BSIM4v5vbsc = -30.0; } else here->BSIM4v5vbsc = -30.0; if (here->BSIM4v5vbsc > pParam->BSIM4v5vbm) here->BSIM4v5vbsc = pParam->BSIM4v5vbm; here->BSIM4v5k2ox = here->BSIM4v5k2 * model->BSIM4v5toxe / model->BSIM4v5toxm; here->BSIM4v5vfbzb = pParam->BSIM4v5vfbzbfactor + model->BSIM4v5type * here->BSIM4v5vth0 ; here->BSIM4v5cgso = pParam->BSIM4v5cgso; here->BSIM4v5cgdo = pParam->BSIM4v5cgdo; lnl = log(pParam->BSIM4v5leff * 1.0e6); lnw = log(pParam->BSIM4v5weff * 1.0e6); lnnf = log(here->BSIM4v5nf); bodymode = 5; if( ( !model->BSIM4v5rbps0Given) || ( !model->BSIM4v5rbpd0Given) ) bodymode = 1; else if( (!model->BSIM4v5rbsbx0Given && !model->BSIM4v5rbsby0Given) || (!model->BSIM4v5rbdbx0Given && !model->BSIM4v5rbdby0Given) ) bodymode = 3; if(here->BSIM4v5rbodyMod == 2) { if (bodymode == 5) { rbsbx = exp( log(model->BSIM4v5rbsbx0) + model->BSIM4v5rbsdbxl * lnl + model->BSIM4v5rbsdbxw * lnw + model->BSIM4v5rbsdbxnf * lnnf ); rbsby = exp( log(model->BSIM4v5rbsby0) + model->BSIM4v5rbsdbyl * lnl + model->BSIM4v5rbsdbyw * lnw + model->BSIM4v5rbsdbynf * lnnf ); here->BSIM4v5rbsb = rbsbx * rbsby / (rbsbx + rbsby); rbdbx = exp( log(model->BSIM4v5rbdbx0) + model->BSIM4v5rbsdbxl * lnl + model->BSIM4v5rbsdbxw * lnw + model->BSIM4v5rbsdbxnf * lnnf ); rbdby = exp( log(model->BSIM4v5rbdby0) + model->BSIM4v5rbsdbyl * lnl + model->BSIM4v5rbsdbyw * lnw + model->BSIM4v5rbsdbynf * lnnf ); here->BSIM4v5rbdb = rbdbx * rbdby / (rbdbx + rbdby); } if ((bodymode == 3)|| (bodymode == 5)) { here->BSIM4v5rbps = exp( log(model->BSIM4v5rbps0) + model->BSIM4v5rbpsl * lnl + model->BSIM4v5rbpsw * lnw + model->BSIM4v5rbpsnf * lnnf ); here->BSIM4v5rbpd = exp( log(model->BSIM4v5rbpd0) + model->BSIM4v5rbpdl * lnl + model->BSIM4v5rbpdw * lnw + model->BSIM4v5rbpdnf * lnnf ); } rbpbx = exp( log(model->BSIM4v5rbpbx0) + model->BSIM4v5rbpbxl * lnl + model->BSIM4v5rbpbxw * lnw + model->BSIM4v5rbpbxnf * lnnf ); rbpby = exp( log(model->BSIM4v5rbpby0) + model->BSIM4v5rbpbyl * lnl + model->BSIM4v5rbpbyw * lnw + model->BSIM4v5rbpbynf * lnnf ); here->BSIM4v5rbpb = rbpbx*rbpby/(rbpbx + rbpby); } if ((here->BSIM4v5rbodyMod == 1 ) || ((here->BSIM4v5rbodyMod == 2 ) && (bodymode == 5)) ) { if (here->BSIM4v5rbdb < 1.0e-3) here->BSIM4v5grbdb = 1.0e3; /* in mho */ else here->BSIM4v5grbdb = model->BSIM4v5gbmin + 1.0 / here->BSIM4v5rbdb; if (here->BSIM4v5rbpb < 1.0e-3) here->BSIM4v5grbpb = 1.0e3; else here->BSIM4v5grbpb = model->BSIM4v5gbmin + 1.0 / here->BSIM4v5rbpb; if (here->BSIM4v5rbps < 1.0e-3) here->BSIM4v5grbps = 1.0e3; else here->BSIM4v5grbps = model->BSIM4v5gbmin + 1.0 / here->BSIM4v5rbps; if (here->BSIM4v5rbsb < 1.0e-3) here->BSIM4v5grbsb = 1.0e3; else here->BSIM4v5grbsb = model->BSIM4v5gbmin + 1.0 / here->BSIM4v5rbsb; if (here->BSIM4v5rbpd < 1.0e-3) here->BSIM4v5grbpd = 1.0e3; else here->BSIM4v5grbpd = model->BSIM4v5gbmin + 1.0 / here->BSIM4v5rbpd; } if((here->BSIM4v5rbodyMod == 2) && (bodymode == 3)) { here->BSIM4v5grbdb = here->BSIM4v5grbsb = model->BSIM4v5gbmin; if (here->BSIM4v5rbpb < 1.0e-3) here->BSIM4v5grbpb = 1.0e3; else here->BSIM4v5grbpb = model->BSIM4v5gbmin + 1.0 / here->BSIM4v5rbpb; if (here->BSIM4v5rbps < 1.0e-3) here->BSIM4v5grbps = 1.0e3; else here->BSIM4v5grbps = model->BSIM4v5gbmin + 1.0 / here->BSIM4v5rbps; if (here->BSIM4v5rbpd < 1.0e-3) here->BSIM4v5grbpd = 1.0e3; else here->BSIM4v5grbpd = model->BSIM4v5gbmin + 1.0 / here->BSIM4v5rbpd; } if((here->BSIM4v5rbodyMod == 2) && (bodymode == 1)) { here->BSIM4v5grbdb = here->BSIM4v5grbsb = model->BSIM4v5gbmin; here->BSIM4v5grbps = here->BSIM4v5grbpd = 1.0e3; if (here->BSIM4v5rbpb < 1.0e-3) here->BSIM4v5grbpb = 1.0e3; else here->BSIM4v5grbpb = model->BSIM4v5gbmin + 1.0 / here->BSIM4v5rbpb; } /* * Process geomertry dependent parasitics */ here->BSIM4v5grgeltd = model->BSIM4v5rshg * (here->BSIM4v5xgw + pParam->BSIM4v5weffCJ / 3.0 / here->BSIM4v5ngcon) / (here->BSIM4v5ngcon * here->BSIM4v5nf * (Lnew - model->BSIM4v5xgl)); if (here->BSIM4v5grgeltd > 0.0) here->BSIM4v5grgeltd = 1.0 / here->BSIM4v5grgeltd; else { here->BSIM4v5grgeltd = 1.0e3; /* mho */ if (here->BSIM4v5rgateMod != 0) printf("Warning: The gate conductance reset to 1.0e3 mho.\n"); } DMCGeff = model->BSIM4v5dmcg - model->BSIM4v5dmcgt; DMCIeff = model->BSIM4v5dmci; DMDGeff = model->BSIM4v5dmdg - model->BSIM4v5dmcgt; if (here->BSIM4v5sourcePerimeterGiven) { if (model->BSIM4v5perMod == 0) here->BSIM4v5Pseff = here->BSIM4v5sourcePerimeter; else here->BSIM4v5Pseff = here->BSIM4v5sourcePerimeter - pParam->BSIM4v5weffCJ * here->BSIM4v5nf; } else BSIM4v5PAeffGeo(here->BSIM4v5nf, here->BSIM4v5geoMod, here->BSIM4v5min, pParam->BSIM4v5weffCJ, DMCGeff, DMCIeff, DMDGeff, &(here->BSIM4v5Pseff), &dumPd, &dumAs, &dumAd); if (here->BSIM4v5drainPerimeterGiven) { if (model->BSIM4v5perMod == 0) here->BSIM4v5Pdeff = here->BSIM4v5drainPerimeter; else here->BSIM4v5Pdeff = here->BSIM4v5drainPerimeter - pParam->BSIM4v5weffCJ * here->BSIM4v5nf; } else BSIM4v5PAeffGeo(here->BSIM4v5nf, here->BSIM4v5geoMod, here->BSIM4v5min, pParam->BSIM4v5weffCJ, DMCGeff, DMCIeff, DMDGeff, &dumPs, &(here->BSIM4v5Pdeff), &dumAs, &dumAd); if (here->BSIM4v5sourceAreaGiven) here->BSIM4v5Aseff = here->BSIM4v5sourceArea; else BSIM4v5PAeffGeo(here->BSIM4v5nf, here->BSIM4v5geoMod, here->BSIM4v5min, pParam->BSIM4v5weffCJ, DMCGeff, DMCIeff, DMDGeff, &dumPs, &dumPd, &(here->BSIM4v5Aseff), &dumAd); if (here->BSIM4v5drainAreaGiven) here->BSIM4v5Adeff = here->BSIM4v5drainArea; else BSIM4v5PAeffGeo(here->BSIM4v5nf, here->BSIM4v5geoMod, here->BSIM4v5min, pParam->BSIM4v5weffCJ, DMCGeff, DMCIeff, DMDGeff, &dumPs, &dumPd, &dumAs, &(here->BSIM4v5Adeff)); /* Processing S/D resistance and conductance below */ if(here->BSIM4v5sNodePrime != here->BSIM4v5sNode) { here->BSIM4v5sourceConductance = 0.0; if(here->BSIM4v5sourceSquaresGiven) { here->BSIM4v5sourceConductance = model->BSIM4v5sheetResistance * here->BSIM4v5sourceSquares; } else if (here->BSIM4v5rgeoMod > 0) { BSIM4v5RdseffGeo(here->BSIM4v5nf, here->BSIM4v5geoMod, here->BSIM4v5rgeoMod, here->BSIM4v5min, pParam->BSIM4v5weffCJ, model->BSIM4v5sheetResistance, DMCGeff, DMCIeff, DMDGeff, 1, &(here->BSIM4v5sourceConductance)); } else { here->BSIM4v5sourceConductance = 0.0; } if (here->BSIM4v5sourceConductance > 0.0) here->BSIM4v5sourceConductance = 1.0 / here->BSIM4v5sourceConductance; else { here->BSIM4v5sourceConductance = 1.0e3; /* mho */ printf ("Warning: Source conductance reset to 1.0e3 mho.\n"); } } else { here->BSIM4v5sourceConductance = 0.0; } if(here->BSIM4v5dNodePrime != here->BSIM4v5dNode) { here->BSIM4v5drainConductance = 0.0; if(here->BSIM4v5drainSquaresGiven) { here->BSIM4v5drainConductance = model->BSIM4v5sheetResistance * here->BSIM4v5drainSquares; } else if (here->BSIM4v5rgeoMod > 0) { BSIM4v5RdseffGeo(here->BSIM4v5nf, here->BSIM4v5geoMod, here->BSIM4v5rgeoMod, here->BSIM4v5min, pParam->BSIM4v5weffCJ, model->BSIM4v5sheetResistance, DMCGeff, DMCIeff, DMDGeff, 0, &(here->BSIM4v5drainConductance)); } else { here->BSIM4v5drainConductance = 0.0; } if (here->BSIM4v5drainConductance > 0.0) here->BSIM4v5drainConductance = 1.0 / here->BSIM4v5drainConductance; else { here->BSIM4v5drainConductance = 1.0e3; /* mho */ printf ("Warning: Drain conductance reset to 1.0e3 mho.\n"); } } else { here->BSIM4v5drainConductance = 0.0; } /* End of Rsd processing */ Nvtms = model->BSIM4v5vtm * model->BSIM4v5SjctEmissionCoeff; if ((here->BSIM4v5Aseff <= 0.0) && (here->BSIM4v5Pseff <= 0.0)) { SourceSatCurrent = 1.0e-14; } else { SourceSatCurrent = here->BSIM4v5Aseff * model->BSIM4v5SjctTempSatCurDensity + here->BSIM4v5Pseff * model->BSIM4v5SjctSidewallTempSatCurDensity + pParam->BSIM4v5weffCJ * here->BSIM4v5nf * model->BSIM4v5SjctGateSidewallTempSatCurDensity; } if (SourceSatCurrent > 0.0) { switch(model->BSIM4v5dioMod) { case 0: if ((model->BSIM4v5bvs / Nvtms) > EXP_THRESHOLD) here->BSIM4v5XExpBVS = model->BSIM4v5xjbvs * MIN_EXP; else here->BSIM4v5XExpBVS = model->BSIM4v5xjbvs * exp(-model->BSIM4v5bvs / Nvtms); break; case 1: BSIM4v5DioIjthVjmEval(Nvtms, model->BSIM4v5ijthsfwd, SourceSatCurrent, 0.0, &(here->BSIM4v5vjsmFwd)); here->BSIM4v5IVjsmFwd = SourceSatCurrent * exp(here->BSIM4v5vjsmFwd / Nvtms); break; case 2: if ((model->BSIM4v5bvs / Nvtms) > EXP_THRESHOLD) { here->BSIM4v5XExpBVS = model->BSIM4v5xjbvs * MIN_EXP; tmp = MIN_EXP; } else { here->BSIM4v5XExpBVS = exp(-model->BSIM4v5bvs / Nvtms); tmp = here->BSIM4v5XExpBVS; here->BSIM4v5XExpBVS *= model->BSIM4v5xjbvs; } BSIM4v5DioIjthVjmEval(Nvtms, model->BSIM4v5ijthsfwd, SourceSatCurrent, here->BSIM4v5XExpBVS, &(here->BSIM4v5vjsmFwd)); T0 = exp(here->BSIM4v5vjsmFwd / Nvtms); here->BSIM4v5IVjsmFwd = SourceSatCurrent * (T0 - here->BSIM4v5XExpBVS / T0 + here->BSIM4v5XExpBVS - 1.0); here->BSIM4v5SslpFwd = SourceSatCurrent * (T0 + here->BSIM4v5XExpBVS / T0) / Nvtms; T2 = model->BSIM4v5ijthsrev / SourceSatCurrent; if (T2 < 1.0) { T2 = 10.0; fprintf(stderr, "Warning: ijthsrev too small and set to 10 times IsbSat.\n"); } here->BSIM4v5vjsmRev = -model->BSIM4v5bvs - Nvtms * log((T2 - 1.0) / model->BSIM4v5xjbvs); T1 = model->BSIM4v5xjbvs * exp(-(model->BSIM4v5bvs + here->BSIM4v5vjsmRev) / Nvtms); here->BSIM4v5IVjsmRev = SourceSatCurrent * (1.0 + T1); here->BSIM4v5SslpRev = -SourceSatCurrent * T1 / Nvtms; break; default: printf("Specified dioMod = %d not matched\n", model->BSIM4v5dioMod); } } Nvtmd = model->BSIM4v5vtm * model->BSIM4v5DjctEmissionCoeff; if ((here->BSIM4v5Adeff <= 0.0) && (here->BSIM4v5Pdeff <= 0.0)) { DrainSatCurrent = 1.0e-14; } else { DrainSatCurrent = here->BSIM4v5Adeff * model->BSIM4v5DjctTempSatCurDensity + here->BSIM4v5Pdeff * model->BSIM4v5DjctSidewallTempSatCurDensity + pParam->BSIM4v5weffCJ * here->BSIM4v5nf * model->BSIM4v5DjctGateSidewallTempSatCurDensity; } if (DrainSatCurrent > 0.0) { switch(model->BSIM4v5dioMod) { case 0: if ((model->BSIM4v5bvd / Nvtmd) > EXP_THRESHOLD) here->BSIM4v5XExpBVD = model->BSIM4v5xjbvd * MIN_EXP; else here->BSIM4v5XExpBVD = model->BSIM4v5xjbvd * exp(-model->BSIM4v5bvd / Nvtmd); break; case 1: BSIM4v5DioIjthVjmEval(Nvtmd, model->BSIM4v5ijthdfwd, DrainSatCurrent, 0.0, &(here->BSIM4v5vjdmFwd)); here->BSIM4v5IVjdmFwd = DrainSatCurrent * exp(here->BSIM4v5vjdmFwd / Nvtmd); break; case 2: if ((model->BSIM4v5bvd / Nvtmd) > EXP_THRESHOLD) { here->BSIM4v5XExpBVD = model->BSIM4v5xjbvd * MIN_EXP; tmp = MIN_EXP; } else { here->BSIM4v5XExpBVD = exp(-model->BSIM4v5bvd / Nvtmd); tmp = here->BSIM4v5XExpBVD; here->BSIM4v5XExpBVD *= model->BSIM4v5xjbvd; } BSIM4v5DioIjthVjmEval(Nvtmd, model->BSIM4v5ijthdfwd, DrainSatCurrent, here->BSIM4v5XExpBVD, &(here->BSIM4v5vjdmFwd)); T0 = exp(here->BSIM4v5vjdmFwd / Nvtmd); here->BSIM4v5IVjdmFwd = DrainSatCurrent * (T0 - here->BSIM4v5XExpBVD / T0 + here->BSIM4v5XExpBVD - 1.0); here->BSIM4v5DslpFwd = DrainSatCurrent * (T0 + here->BSIM4v5XExpBVD / T0) / Nvtmd; T2 = model->BSIM4v5ijthdrev / DrainSatCurrent; if (T2 < 1.0) { T2 = 10.0; fprintf(stderr, "Warning: ijthdrev too small and set to 10 times IdbSat.\n"); } here->BSIM4v5vjdmRev = -model->BSIM4v5bvd - Nvtmd * log((T2 - 1.0) / model->BSIM4v5xjbvd); /* bugfix */ T1 = model->BSIM4v5xjbvd * exp(-(model->BSIM4v5bvd + here->BSIM4v5vjdmRev) / Nvtmd); here->BSIM4v5IVjdmRev = DrainSatCurrent * (1.0 + T1); here->BSIM4v5DslpRev = -DrainSatCurrent * T1 / Nvtmd; break; default: printf("Specified dioMod = %d not matched\n", model->BSIM4v5dioMod); } } /* GEDL current reverse bias */ T0 = (TRatio - 1.0); model->BSIM4v5njtstemp = model->BSIM4v5njts * (1.0 + model->BSIM4v5tnjts * T0); model->BSIM4v5njtsswtemp = model->BSIM4v5njtssw * (1.0 + model->BSIM4v5tnjtssw * T0); model->BSIM4v5njtsswgtemp = model->BSIM4v5njtsswg * (1.0 + model->BSIM4v5tnjtsswg * T0); T7 = Eg0 / model->BSIM4v5vtm * T0; T9 = model->BSIM4v5xtss * T7; DEXP(T9, T1); T9 = model->BSIM4v5xtsd * T7; DEXP(T9, T2); T9 = model->BSIM4v5xtssws * T7; DEXP(T9, T3); T9 = model->BSIM4v5xtsswd * T7; DEXP(T9, T4); T9 = model->BSIM4v5xtsswgs * T7; DEXP(T9, T5); T9 = model->BSIM4v5xtsswgd * T7; DEXP(T9, T6); T10 = pParam->BSIM4v5weffCJ * here->BSIM4v5nf; here->BSIM4v5SjctTempRevSatCur = T1 * here->BSIM4v5Aseff * model->BSIM4v5jtss; here->BSIM4v5DjctTempRevSatCur = T2 * here->BSIM4v5Adeff * model->BSIM4v5jtsd; here->BSIM4v5SswTempRevSatCur = T3 * here->BSIM4v5Pseff * model->BSIM4v5jtssws; here->BSIM4v5DswTempRevSatCur = T4 * here->BSIM4v5Pdeff * model->BSIM4v5jtsswd; here->BSIM4v5SswgTempRevSatCur = T5 * T10 * model->BSIM4v5jtsswgs; here->BSIM4v5DswgTempRevSatCur = T6 * T10 * model->BSIM4v5jtsswgd; if (BSIM4v5checkModel(model, here, ckt)) { SPfrontEnd->IFerrorf (ERR_FATAL, "Fatal error(s) detected during BSIM4v5.5.0 parameter checking for %s in model %s", model->BSIM4v5modName, here->BSIM4v5name); return(E_BADPARM); } } /* End instance */ } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v5/b4v5trunc.c0000644000175000017500000000320013546075722022447 0ustar carstencarsten/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ /********** * Copyright 2004 Regents of the University of California. All rights reserved. * File: b4trunc.c of BSIM4.5.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Project Director: Prof. Chenming Hu. **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4v5def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4v5trunc( GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { BSIM4v5model *model = (BSIM4v5model*)inModel; BSIM4v5instance *here; #ifdef STEPDEBUG double debugtemp; #endif /* STEPDEBUG */ for (; model != NULL; model = BSIM4v5nextModel(model)) { for (here = BSIM4v5instances(model); here != NULL; here = BSIM4v5nextInstance(here)) { #ifdef STEPDEBUG debugtemp = *timeStep; #endif /* STEPDEBUG */ CKTterr(here->BSIM4v5qb,ckt,timeStep); CKTterr(here->BSIM4v5qg,ckt,timeStep); CKTterr(here->BSIM4v5qd,ckt,timeStep); if (here->BSIM4v5trnqsMod) CKTterr(here->BSIM4v5qcdump,ckt,timeStep); if (here->BSIM4v5rbodyMod) { CKTterr(here->BSIM4v5qbs,ckt,timeStep); CKTterr(here->BSIM4v5qbd,ckt,timeStep); } if (here->BSIM4v5rgateMod == 3) CKTterr(here->BSIM4v5qgmid,ckt,timeStep); #ifdef STEPDEBUG if(debugtemp != *timeStep) { printf("device %s reduces step from %g to %g\n", here->BSIM4v5name,debugtemp,*timeStep); } #endif /* STEPDEBUG */ } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v5/b4v5ask.c0000644000175000017500000003263313546075722022106 0ustar carstencarsten/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/27/2005 ****/ /********** * Copyright 2005 Regents of the University of California. All rights reserved. * File: b4ask.c of BSIM4.5.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "bsim4v5def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4v5ask( CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { BSIM4v5instance *here = (BSIM4v5instance*)inst; NG_IGNORE(select); switch(which) { case BSIM4v5_L: value->rValue = here->BSIM4v5l; return(OK); case BSIM4v5_W: value->rValue = here->BSIM4v5w; return(OK); case BSIM4v5_M: value->rValue = here->BSIM4v5m; return(OK); case BSIM4v5_NF: value->rValue = here->BSIM4v5nf; return(OK); case BSIM4v5_MIN: value->iValue = here->BSIM4v5min; return(OK); case BSIM4v5_AS: value->rValue = here->BSIM4v5sourceArea; return(OK); case BSIM4v5_AD: value->rValue = here->BSIM4v5drainArea; return(OK); case BSIM4v5_PS: value->rValue = here->BSIM4v5sourcePerimeter; return(OK); case BSIM4v5_PD: value->rValue = here->BSIM4v5drainPerimeter; return(OK); case BSIM4v5_NRS: value->rValue = here->BSIM4v5sourceSquares; return(OK); case BSIM4v5_NRD: value->rValue = here->BSIM4v5drainSquares; return(OK); case BSIM4v5_OFF: value->rValue = here->BSIM4v5off; return(OK); case BSIM4v5_SA: value->rValue = here->BSIM4v5sa ; return(OK); case BSIM4v5_SB: value->rValue = here->BSIM4v5sb ; return(OK); case BSIM4v5_SD: value->rValue = here->BSIM4v5sd ; return(OK); case BSIM4v5_SCA: value->rValue = here->BSIM4v5sca ; return(OK); case BSIM4v5_SCB: value->rValue = here->BSIM4v5scb ; return(OK); case BSIM4v5_SCC: value->rValue = here->BSIM4v5scc ; return(OK); case BSIM4v5_SC: value->rValue = here->BSIM4v5sc ; return(OK); case BSIM4v5_RBSB: value->rValue = here->BSIM4v5rbsb; return(OK); case BSIM4v5_RBDB: value->rValue = here->BSIM4v5rbdb; return(OK); case BSIM4v5_RBPB: value->rValue = here->BSIM4v5rbpb; return(OK); case BSIM4v5_RBPS: value->rValue = here->BSIM4v5rbps; return(OK); case BSIM4v5_RBPD: value->rValue = here->BSIM4v5rbpd; return(OK); case BSIM4v5_DELVTO: value->rValue = here->BSIM4v5delvto; return(OK); case BSIM4v5_XGW: value->rValue = here->BSIM4v5xgw; return(OK); case BSIM4v5_NGCON: value->rValue = here->BSIM4v5ngcon; return(OK); case BSIM4v5_TRNQSMOD: value->iValue = here->BSIM4v5trnqsMod; return(OK); case BSIM4v5_ACNQSMOD: value->iValue = here->BSIM4v5acnqsMod; return(OK); case BSIM4v5_RBODYMOD: value->iValue = here->BSIM4v5rbodyMod; return(OK); case BSIM4v5_RGATEMOD: value->iValue = here->BSIM4v5rgateMod; return(OK); case BSIM4v5_GEOMOD: value->iValue = here->BSIM4v5geoMod; return(OK); case BSIM4v5_RGEOMOD: value->iValue = here->BSIM4v5rgeoMod; return(OK); case BSIM4v5_IC_VDS: value->rValue = here->BSIM4v5icVDS; return(OK); case BSIM4v5_IC_VGS: value->rValue = here->BSIM4v5icVGS; return(OK); case BSIM4v5_IC_VBS: value->rValue = here->BSIM4v5icVBS; return(OK); case BSIM4v5_DNODE: value->iValue = here->BSIM4v5dNode; return(OK); case BSIM4v5_GNODEEXT: value->iValue = here->BSIM4v5gNodeExt; return(OK); case BSIM4v5_SNODE: value->iValue = here->BSIM4v5sNode; return(OK); case BSIM4v5_BNODE: value->iValue = here->BSIM4v5bNode; return(OK); case BSIM4v5_DNODEPRIME: value->iValue = here->BSIM4v5dNodePrime; return(OK); case BSIM4v5_GNODEPRIME: value->iValue = here->BSIM4v5gNodePrime; return(OK); case BSIM4v5_GNODEMID: value->iValue = here->BSIM4v5gNodeMid; return(OK); case BSIM4v5_SNODEPRIME: value->iValue = here->BSIM4v5sNodePrime; return(OK); case BSIM4v5_DBNODE: value->iValue = here->BSIM4v5dbNode; return(OK); case BSIM4v5_BNODEPRIME: value->iValue = here->BSIM4v5bNodePrime; return(OK); case BSIM4v5_SBNODE: value->iValue = here->BSIM4v5sbNode; return(OK); case BSIM4v5_SOURCECONDUCT: value->rValue = here->BSIM4v5sourceConductance; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_DRAINCONDUCT: value->rValue = here->BSIM4v5drainConductance; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_VBD: value->rValue = *(ckt->CKTstate0 + here->BSIM4v5vbd); return(OK); case BSIM4v5_VBS: value->rValue = *(ckt->CKTstate0 + here->BSIM4v5vbs); return(OK); case BSIM4v5_VGS: value->rValue = *(ckt->CKTstate0 + here->BSIM4v5vgs); return(OK); case BSIM4v5_VDS: value->rValue = *(ckt->CKTstate0 + here->BSIM4v5vds); return(OK); case BSIM4v5_CD: value->rValue = here->BSIM4v5cd; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_CBS: value->rValue = here->BSIM4v5cbs; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_CBD: value->rValue = here->BSIM4v5cbd; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_CSUB: value->rValue = here->BSIM4v5csub; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_QINV: value->rValue = here-> BSIM4v5qinv; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_IGIDL: value->rValue = here->BSIM4v5Igidl; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_IGISL: value->rValue = here->BSIM4v5Igisl; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_IGS: value->rValue = here->BSIM4v5Igs; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_IGD: value->rValue = here->BSIM4v5Igd; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_IGB: value->rValue = here->BSIM4v5Igb; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_IGCS: value->rValue = here->BSIM4v5Igcs; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_IGCD: value->rValue = here->BSIM4v5Igcd; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_GM: value->rValue = here->BSIM4v5gm; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_GDS: value->rValue = here->BSIM4v5gds; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_GMBS: value->rValue = here->BSIM4v5gmbs; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_GBD: value->rValue = here->BSIM4v5gbd; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_GBS: value->rValue = here->BSIM4v5gbs; value->rValue *= here->BSIM4v5m; return(OK); /* case BSIM4v5_QB: value->rValue = *(ckt->CKTstate0 + here->BSIM4v5qb); return(OK); */ case BSIM4v5_CQB: value->rValue = *(ckt->CKTstate0 + here->BSIM4v5cqb); return(OK); /* case BSIM4v5_QG: value->rValue = *(ckt->CKTstate0 + here->BSIM4v5qg); return(OK); */ case BSIM4v5_CQG: value->rValue = *(ckt->CKTstate0 + here->BSIM4v5cqg); return(OK); /* case BSIM4v5_QD: value->rValue = *(ckt->CKTstate0 + here->BSIM4v5qd); return(OK); */ case BSIM4v5_CQD: value->rValue = *(ckt->CKTstate0 + here->BSIM4v5cqd); return(OK); /* case BSIM4v5_QS: value->rValue = *(ckt->CKTstate0 + here->BSIM4v5qs); return(OK); */ case BSIM4v5_QB: value->rValue = here->BSIM4v5qbulk; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_QG: value->rValue = here->BSIM4v5qgate; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_QS: value->rValue = here->BSIM4v5qsrc; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_QD: value->rValue = here->BSIM4v5qdrn; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_QDEF: value->rValue = *(ckt->CKTstate0 + here->BSIM4v5qdef); return(OK); case BSIM4v5_GCRG: value->rValue = here->BSIM4v5gcrg; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_GTAU: value->rValue = here->BSIM4v5gtau; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_CGGB: value->rValue = here->BSIM4v5cggb; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_CGDB: value->rValue = here->BSIM4v5cgdb; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_CGSB: value->rValue = here->BSIM4v5cgsb; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_CDGB: value->rValue = here->BSIM4v5cdgb; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_CDDB: value->rValue = here->BSIM4v5cddb; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_CDSB: value->rValue = here->BSIM4v5cdsb; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_CBGB: value->rValue = here->BSIM4v5cbgb; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_CBDB: value->rValue = here->BSIM4v5cbdb; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_CBSB: value->rValue = here->BSIM4v5cbsb; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_CSGB: value->rValue = here->BSIM4v5csgb; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_CSDB: value->rValue = here->BSIM4v5csdb; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_CSSB: value->rValue = here->BSIM4v5cssb; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_CGBB: value->rValue = here->BSIM4v5cgbb; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_CDBB: value->rValue = here->BSIM4v5cdbb; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_CSBB: value->rValue = here->BSIM4v5csbb; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_CBBB: value->rValue = here->BSIM4v5cbbb; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_CAPBD: value->rValue = here->BSIM4v5capbd; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_CAPBS: value->rValue = here->BSIM4v5capbs; value->rValue *= here->BSIM4v5m; return(OK); case BSIM4v5_VON: value->rValue = here->BSIM4v5von; return(OK); case BSIM4v5_VDSAT: value->rValue = here->BSIM4v5vdsat; return(OK); case BSIM4v5_QBS: value->rValue = *(ckt->CKTstate0 + here->BSIM4v5qbs); return(OK); case BSIM4v5_QBD: value->rValue = *(ckt->CKTstate0 + here->BSIM4v5qbd); return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim4v5/bsim4v5def.h0000644000175000017500000032334613546075722022610 0ustar carstencarsten/********** Copyright 2005 Regents of the University of California. All rights reserved. Author: 2000 Weidong Liu. Modified by Xuemei Xi, 11/15/2002. Modified by Xuemei Xi, 05/09/2003. Modified by Xuemei Xi, 03/04/2004. Modified by Xuemei Xi, Mohan Dunga, 09/24/2004. Modified by Xuemei Xi, 07/29/2005. File: bsim4v5def.h **********/ #ifndef BSIM4V5 #define BSIM4V5 #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" typedef struct sBSIM4v5instance { struct GENinstance gen; #define BSIM4v5modPtr(inst) ((struct sBSIM4v5model *)((inst)->gen.GENmodPtr)) #define BSIM4v5nextInstance(inst) ((struct sBSIM4v5instance *)((inst)->gen.GENnextInstance)) #define BSIM4v5name gen.GENname #define BSIM4v5states gen.GENstate const int BSIM4v5dNode; const int BSIM4v5gNodeExt; const int BSIM4v5sNode; const int BSIM4v5bNode; int BSIM4v5dNodePrime; int BSIM4v5gNodePrime; int BSIM4v5gNodeMid; int BSIM4v5sNodePrime; int BSIM4v5bNodePrime; int BSIM4v5dbNode; int BSIM4v5sbNode; int BSIM4v5qNode; double BSIM4v5ueff; double BSIM4v5thetavth; double BSIM4v5von; double BSIM4v5vdsat; double BSIM4v5cgdo; double BSIM4v5qgdo; double BSIM4v5cgso; double BSIM4v5qgso; double BSIM4v5grbsb; double BSIM4v5grbdb; double BSIM4v5grbpb; double BSIM4v5grbps; double BSIM4v5grbpd; double BSIM4v5vjsmFwd; double BSIM4v5vjsmRev; double BSIM4v5vjdmFwd; double BSIM4v5vjdmRev; double BSIM4v5XExpBVS; double BSIM4v5XExpBVD; double BSIM4v5SslpFwd; double BSIM4v5SslpRev; double BSIM4v5DslpFwd; double BSIM4v5DslpRev; double BSIM4v5IVjsmFwd; double BSIM4v5IVjsmRev; double BSIM4v5IVjdmFwd; double BSIM4v5IVjdmRev; double BSIM4v5grgeltd; double BSIM4v5Pseff; double BSIM4v5Pdeff; double BSIM4v5Aseff; double BSIM4v5Adeff; double BSIM4v5l; double BSIM4v5w; double BSIM4v5drainArea; double BSIM4v5sourceArea; double BSIM4v5drainSquares; double BSIM4v5sourceSquares; double BSIM4v5drainPerimeter; double BSIM4v5sourcePerimeter; double BSIM4v5sourceConductance; double BSIM4v5drainConductance; /* stress effect instance param */ double BSIM4v5sa; double BSIM4v5sb; double BSIM4v5sd; double BSIM4v5sca; double BSIM4v5scb; double BSIM4v5scc; double BSIM4v5sc; double BSIM4v5rbdb; double BSIM4v5rbsb; double BSIM4v5rbpb; double BSIM4v5rbps; double BSIM4v5rbpd; double BSIM4v5delvto; double BSIM4v5xgw; double BSIM4v5ngcon; /* added here to account stress effect instance dependence */ double BSIM4v5u0temp; double BSIM4v5vsattemp; double BSIM4v5vth0; double BSIM4v5vfb; double BSIM4v5vfbzb; double BSIM4v5vtfbphi1; double BSIM4v5vtfbphi2; double BSIM4v5k2; double BSIM4v5vbsc; double BSIM4v5k2ox; double BSIM4v5eta0; double BSIM4v5icVDS; double BSIM4v5icVGS; double BSIM4v5icVBS; double BSIM4v5nf; double BSIM4v5m; int BSIM4v5off; int BSIM4v5mode; int BSIM4v5trnqsMod; int BSIM4v5acnqsMod; int BSIM4v5rbodyMod; int BSIM4v5rgateMod; int BSIM4v5geoMod; int BSIM4v5rgeoMod; int BSIM4v5min; /* OP point */ double BSIM4v5Vgsteff; double BSIM4v5vgs_eff; double BSIM4v5vgd_eff; double BSIM4v5dvgs_eff_dvg; double BSIM4v5dvgd_eff_dvg; double BSIM4v5Vdseff; double BSIM4v5nstar; double BSIM4v5Abulk; double BSIM4v5EsatL; double BSIM4v5AbovVgst2Vtm; double BSIM4v5qinv; double BSIM4v5cd; double BSIM4v5cbs; double BSIM4v5cbd; double BSIM4v5csub; double BSIM4v5Igidl; double BSIM4v5Igisl; double BSIM4v5gm; double BSIM4v5gds; double BSIM4v5gmbs; double BSIM4v5gbd; double BSIM4v5gbs; double BSIM4v5gbbs; double BSIM4v5gbgs; double BSIM4v5gbds; double BSIM4v5ggidld; double BSIM4v5ggidlg; double BSIM4v5ggidls; double BSIM4v5ggidlb; double BSIM4v5ggisld; double BSIM4v5ggislg; double BSIM4v5ggisls; double BSIM4v5ggislb; double BSIM4v5Igcs; double BSIM4v5gIgcsg; double BSIM4v5gIgcsd; double BSIM4v5gIgcss; double BSIM4v5gIgcsb; double BSIM4v5Igcd; double BSIM4v5gIgcdg; double BSIM4v5gIgcdd; double BSIM4v5gIgcds; double BSIM4v5gIgcdb; double BSIM4v5Igs; double BSIM4v5gIgsg; double BSIM4v5gIgss; double BSIM4v5Igd; double BSIM4v5gIgdg; double BSIM4v5gIgdd; double BSIM4v5Igb; double BSIM4v5gIgbg; double BSIM4v5gIgbd; double BSIM4v5gIgbs; double BSIM4v5gIgbb; double BSIM4v5grdsw; double BSIM4v5IdovVds; double BSIM4v5gcrg; double BSIM4v5gcrgd; double BSIM4v5gcrgg; double BSIM4v5gcrgs; double BSIM4v5gcrgb; double BSIM4v5gstot; double BSIM4v5gstotd; double BSIM4v5gstotg; double BSIM4v5gstots; double BSIM4v5gstotb; double BSIM4v5gdtot; double BSIM4v5gdtotd; double BSIM4v5gdtotg; double BSIM4v5gdtots; double BSIM4v5gdtotb; double BSIM4v5cggb; double BSIM4v5cgdb; double BSIM4v5cgsb; double BSIM4v5cbgb; double BSIM4v5cbdb; double BSIM4v5cbsb; double BSIM4v5cdgb; double BSIM4v5cddb; double BSIM4v5cdsb; double BSIM4v5csgb; double BSIM4v5csdb; double BSIM4v5cssb; double BSIM4v5cgbb; double BSIM4v5cdbb; double BSIM4v5csbb; double BSIM4v5cbbb; double BSIM4v5capbd; double BSIM4v5capbs; double BSIM4v5cqgb; double BSIM4v5cqdb; double BSIM4v5cqsb; double BSIM4v5cqbb; double BSIM4v5qgate; double BSIM4v5qbulk; double BSIM4v5qdrn; double BSIM4v5qsrc; double BSIM4v5qdef; double BSIM4v5qchqs; double BSIM4v5taunet; double BSIM4v5gtau; double BSIM4v5gtg; double BSIM4v5gtd; double BSIM4v5gts; double BSIM4v5gtb; double BSIM4v5SjctTempRevSatCur; double BSIM4v5DjctTempRevSatCur; double BSIM4v5SswTempRevSatCur; double BSIM4v5DswTempRevSatCur; double BSIM4v5SswgTempRevSatCur; double BSIM4v5DswgTempRevSatCur; struct bsim4v5SizeDependParam *pParam; unsigned BSIM4v5lGiven :1; unsigned BSIM4v5wGiven :1; unsigned BSIM4v5mGiven :1; unsigned BSIM4v5nfGiven :1; unsigned BSIM4v5minGiven :1; unsigned BSIM4v5drainAreaGiven :1; unsigned BSIM4v5sourceAreaGiven :1; unsigned BSIM4v5drainSquaresGiven :1; unsigned BSIM4v5sourceSquaresGiven :1; unsigned BSIM4v5drainPerimeterGiven :1; unsigned BSIM4v5sourcePerimeterGiven :1; unsigned BSIM4v5saGiven :1; unsigned BSIM4v5sbGiven :1; unsigned BSIM4v5sdGiven :1; unsigned BSIM4v5scaGiven :1; unsigned BSIM4v5scbGiven :1; unsigned BSIM4v5sccGiven :1; unsigned BSIM4v5scGiven :1; unsigned BSIM4v5rbdbGiven :1; unsigned BSIM4v5rbsbGiven :1; unsigned BSIM4v5rbpbGiven :1; unsigned BSIM4v5rbpdGiven :1; unsigned BSIM4v5rbpsGiven :1; unsigned BSIM4v5delvtoGiven :1; unsigned BSIM4v5xgwGiven :1; unsigned BSIM4v5ngconGiven :1; unsigned BSIM4v5icVDSGiven :1; unsigned BSIM4v5icVGSGiven :1; unsigned BSIM4v5icVBSGiven :1; unsigned BSIM4v5trnqsModGiven :1; unsigned BSIM4v5acnqsModGiven :1; unsigned BSIM4v5rbodyModGiven :1; unsigned BSIM4v5rgateModGiven :1; unsigned BSIM4v5geoModGiven :1; unsigned BSIM4v5rgeoModGiven :1; double *BSIM4v5DPdPtr; double *BSIM4v5DPdpPtr; double *BSIM4v5DPgpPtr; double *BSIM4v5DPgmPtr; double *BSIM4v5DPspPtr; double *BSIM4v5DPbpPtr; double *BSIM4v5DPdbPtr; double *BSIM4v5DdPtr; double *BSIM4v5DdpPtr; double *BSIM4v5GPdpPtr; double *BSIM4v5GPgpPtr; double *BSIM4v5GPgmPtr; double *BSIM4v5GPgePtr; double *BSIM4v5GPspPtr; double *BSIM4v5GPbpPtr; double *BSIM4v5GMdpPtr; double *BSIM4v5GMgpPtr; double *BSIM4v5GMgmPtr; double *BSIM4v5GMgePtr; double *BSIM4v5GMspPtr; double *BSIM4v5GMbpPtr; double *BSIM4v5GEdpPtr; double *BSIM4v5GEgpPtr; double *BSIM4v5GEgmPtr; double *BSIM4v5GEgePtr; double *BSIM4v5GEspPtr; double *BSIM4v5GEbpPtr; double *BSIM4v5SPdpPtr; double *BSIM4v5SPgpPtr; double *BSIM4v5SPgmPtr; double *BSIM4v5SPsPtr; double *BSIM4v5SPspPtr; double *BSIM4v5SPbpPtr; double *BSIM4v5SPsbPtr; double *BSIM4v5SspPtr; double *BSIM4v5SsPtr; double *BSIM4v5BPdpPtr; double *BSIM4v5BPgpPtr; double *BSIM4v5BPgmPtr; double *BSIM4v5BPspPtr; double *BSIM4v5BPdbPtr; double *BSIM4v5BPbPtr; double *BSIM4v5BPsbPtr; double *BSIM4v5BPbpPtr; double *BSIM4v5DBdpPtr; double *BSIM4v5DBdbPtr; double *BSIM4v5DBbpPtr; double *BSIM4v5DBbPtr; double *BSIM4v5SBspPtr; double *BSIM4v5SBbpPtr; double *BSIM4v5SBbPtr; double *BSIM4v5SBsbPtr; double *BSIM4v5BdbPtr; double *BSIM4v5BbpPtr; double *BSIM4v5BsbPtr; double *BSIM4v5BbPtr; double *BSIM4v5DgpPtr; double *BSIM4v5DspPtr; double *BSIM4v5DbpPtr; double *BSIM4v5SdpPtr; double *BSIM4v5SgpPtr; double *BSIM4v5SbpPtr; double *BSIM4v5QdpPtr; double *BSIM4v5QgpPtr; double *BSIM4v5QspPtr; double *BSIM4v5QbpPtr; double *BSIM4v5QqPtr; double *BSIM4v5DPqPtr; double *BSIM4v5GPqPtr; double *BSIM4v5SPqPtr; #ifdef USE_OMP /* per instance storage of results, to update matrix at a later stge */ double BSIM4v5rhsdPrime; double BSIM4v5rhsgPrime; double BSIM4v5rhsgExt; double BSIM4v5grhsMid; double BSIM4v5rhsbPrime; double BSIM4v5rhssPrime; double BSIM4v5rhsdb; double BSIM4v5rhssb; double BSIM4v5rhsd; double BSIM4v5rhss; double BSIM4v5rhsq; double BSIM4v5_1; double BSIM4v5_2; double BSIM4v5_3; double BSIM4v5_4; double BSIM4v5_5; double BSIM4v5_6; double BSIM4v5_7; double BSIM4v5_8; double BSIM4v5_9; double BSIM4v5_10; double BSIM4v5_11; double BSIM4v5_12; double BSIM4v5_13; double BSIM4v5_14; double BSIM4v5_15; double BSIM4v5_16; double BSIM4v5_17; double BSIM4v5_18; double BSIM4v5_19; double BSIM4v5_20; double BSIM4v5_21; double BSIM4v5_22; double BSIM4v5_23; double BSIM4v5_24; double BSIM4v5_25; double BSIM4v5_26; double BSIM4v5_27; double BSIM4v5_28; double BSIM4v5_29; double BSIM4v5_30; double BSIM4v5_31; double BSIM4v5_32; double BSIM4v5_33; double BSIM4v5_34; double BSIM4v5_35; double BSIM4v5_36; double BSIM4v5_37; double BSIM4v5_38; double BSIM4v5_39; double BSIM4v5_40; double BSIM4v5_41; double BSIM4v5_42; double BSIM4v5_43; double BSIM4v5_44; double BSIM4v5_45; double BSIM4v5_46; double BSIM4v5_47; double BSIM4v5_48; double BSIM4v5_49; double BSIM4v5_50; double BSIM4v5_51; double BSIM4v5_52; double BSIM4v5_53; double BSIM4v5_54; double BSIM4v5_55; double BSIM4v5_56; double BSIM4v5_57; double BSIM4v5_58; double BSIM4v5_59; double BSIM4v5_60; double BSIM4v5_61; double BSIM4v5_62; double BSIM4v5_63; double BSIM4v5_64; double BSIM4v5_65; double BSIM4v5_66; double BSIM4v5_67; double BSIM4v5_68; double BSIM4v5_69; double BSIM4v5_70; double BSIM4v5_71; double BSIM4v5_72; double BSIM4v5_73; double BSIM4v5_74; double BSIM4v5_75; double BSIM4v5_76; double BSIM4v5_77; double BSIM4v5_78; double BSIM4v5_79; double BSIM4v5_80; double BSIM4v5_81; double BSIM4v5_82; double BSIM4v5_83; double BSIM4v5_84; double BSIM4v5_85; double BSIM4v5_86; double BSIM4v5_87; double BSIM4v5_88; double BSIM4v5_89; double BSIM4v5_90; double BSIM4v5_91; double BSIM4v5_92; double BSIM4v5_93; double BSIM4v5_94; double BSIM4v5_95; double BSIM4v5_96; double BSIM4v5_97; double BSIM4v5_98; double BSIM4v5_99; double BSIM4v5_100; double BSIM4v5_101; double BSIM4v5_102; double BSIM4v5_103; #endif #define BSIM4v5vbd BSIM4v5states+ 0 #define BSIM4v5vbs BSIM4v5states+ 1 #define BSIM4v5vgs BSIM4v5states+ 2 #define BSIM4v5vds BSIM4v5states+ 3 #define BSIM4v5vdbs BSIM4v5states+ 4 #define BSIM4v5vdbd BSIM4v5states+ 5 #define BSIM4v5vsbs BSIM4v5states+ 6 #define BSIM4v5vges BSIM4v5states+ 7 #define BSIM4v5vgms BSIM4v5states+ 8 #define BSIM4v5vses BSIM4v5states+ 9 #define BSIM4v5vdes BSIM4v5states+ 10 #define BSIM4v5qb BSIM4v5states+ 11 #define BSIM4v5cqb BSIM4v5states+ 12 #define BSIM4v5qg BSIM4v5states+ 13 #define BSIM4v5cqg BSIM4v5states+ 14 #define BSIM4v5qd BSIM4v5states+ 15 #define BSIM4v5cqd BSIM4v5states+ 16 #define BSIM4v5qgmid BSIM4v5states+ 17 #define BSIM4v5cqgmid BSIM4v5states+ 18 #define BSIM4v5qbs BSIM4v5states+ 19 #define BSIM4v5cqbs BSIM4v5states+ 20 #define BSIM4v5qbd BSIM4v5states+ 21 #define BSIM4v5cqbd BSIM4v5states+ 22 #define BSIM4v5qcheq BSIM4v5states+ 23 #define BSIM4v5cqcheq BSIM4v5states+ 24 #define BSIM4v5qcdump BSIM4v5states+ 25 #define BSIM4v5cqcdump BSIM4v5states+ 26 #define BSIM4v5qdef BSIM4v5states+ 27 #define BSIM4v5qs BSIM4v5states+ 28 #define BSIM4v5numStates 29 /* indices to the array of BSIM4v5 NOISE SOURCES */ #define BSIM4v5RDNOIZ 0 #define BSIM4v5RSNOIZ 1 #define BSIM4v5RGNOIZ 2 #define BSIM4v5RBPSNOIZ 3 #define BSIM4v5RBPDNOIZ 4 #define BSIM4v5RBPBNOIZ 5 #define BSIM4v5RBSBNOIZ 6 #define BSIM4v5RBDBNOIZ 7 #define BSIM4v5IDNOIZ 8 #define BSIM4v5FLNOIZ 9 #define BSIM4v5IGSNOIZ 10 #define BSIM4v5IGDNOIZ 11 #define BSIM4v5IGBNOIZ 12 #define BSIM4v5TOTNOIZ 13 #define BSIM4v5NSRCS 14 /* Number of BSIM4v5 noise sources */ #ifndef NONOISE double BSIM4v5nVar[NSTATVARS][BSIM4v5NSRCS]; #else /* NONOISE */ double **BSIM4v5nVar; #endif /* NONOISE */ } BSIM4v5instance ; struct bsim4v5SizeDependParam { double Width; double Length; double NFinger; double BSIM4v5cdsc; double BSIM4v5cdscb; double BSIM4v5cdscd; double BSIM4v5cit; double BSIM4v5nfactor; double BSIM4v5xj; double BSIM4v5vsat; double BSIM4v5at; double BSIM4v5a0; double BSIM4v5ags; double BSIM4v5a1; double BSIM4v5a2; double BSIM4v5keta; double BSIM4v5nsub; double BSIM4v5ndep; double BSIM4v5nsd; double BSIM4v5phin; double BSIM4v5ngate; double BSIM4v5gamma1; double BSIM4v5gamma2; double BSIM4v5vbx; double BSIM4v5vbi; double BSIM4v5vbm; double BSIM4v5xt; double BSIM4v5phi; double BSIM4v5litl; double BSIM4v5k1; double BSIM4v5kt1; double BSIM4v5kt1l; double BSIM4v5kt2; double BSIM4v5k2; double BSIM4v5k3; double BSIM4v5k3b; double BSIM4v5w0; double BSIM4v5dvtp0; double BSIM4v5dvtp1; double BSIM4v5lpe0; double BSIM4v5lpeb; double BSIM4v5dvt0; double BSIM4v5dvt1; double BSIM4v5dvt2; double BSIM4v5dvt0w; double BSIM4v5dvt1w; double BSIM4v5dvt2w; double BSIM4v5drout; double BSIM4v5dsub; double BSIM4v5vth0; double BSIM4v5ua; double BSIM4v5ua1; double BSIM4v5ub; double BSIM4v5ub1; double BSIM4v5uc; double BSIM4v5uc1; double BSIM4v5ud; double BSIM4v5ud1; double BSIM4v5up; double BSIM4v5lp; double BSIM4v5u0; double BSIM4v5eu; double BSIM4v5ute; double BSIM4v5voff; double BSIM4v5tvoff; double BSIM4v5minv; double BSIM4v5vfb; double BSIM4v5delta; double BSIM4v5rdsw; double BSIM4v5rds0; double BSIM4v5rs0; double BSIM4v5rd0; double BSIM4v5rsw; double BSIM4v5rdw; double BSIM4v5prwg; double BSIM4v5prwb; double BSIM4v5prt; double BSIM4v5eta0; double BSIM4v5etab; double BSIM4v5pclm; double BSIM4v5pdibl1; double BSIM4v5pdibl2; double BSIM4v5pdiblb; double BSIM4v5fprout; double BSIM4v5pdits; double BSIM4v5pditsd; double BSIM4v5pscbe1; double BSIM4v5pscbe2; double BSIM4v5pvag; double BSIM4v5wr; double BSIM4v5dwg; double BSIM4v5dwb; double BSIM4v5b0; double BSIM4v5b1; double BSIM4v5alpha0; double BSIM4v5alpha1; double BSIM4v5beta0; double BSIM4v5agidl; double BSIM4v5bgidl; double BSIM4v5cgidl; double BSIM4v5egidl; double BSIM4v5aigc; double BSIM4v5bigc; double BSIM4v5cigc; double BSIM4v5aigsd; double BSIM4v5bigsd; double BSIM4v5cigsd; double BSIM4v5aigbacc; double BSIM4v5bigbacc; double BSIM4v5cigbacc; double BSIM4v5aigbinv; double BSIM4v5bigbinv; double BSIM4v5cigbinv; double BSIM4v5nigc; double BSIM4v5nigbacc; double BSIM4v5nigbinv; double BSIM4v5ntox; double BSIM4v5eigbinv; double BSIM4v5pigcd; double BSIM4v5poxedge; double BSIM4v5xrcrg1; double BSIM4v5xrcrg2; double BSIM4v5lambda; /* overshoot */ double BSIM4v5vtl; /* thermal velocity limit */ double BSIM4v5xn; /* back scattering parameter */ double BSIM4v5lc; /* back scattering parameter */ double BSIM4v5tfactor; /* ballistic transportation factor */ double BSIM4v5vfbsdoff; /* S/D flatband offset voltage */ double BSIM4v5tvfbsdoff; /* added for stress effect */ double BSIM4v5ku0; double BSIM4v5kvth0; double BSIM4v5ku0temp; double BSIM4v5rho_ref; double BSIM4v5inv_od_ref; /* added for well proximity effect */ double BSIM4v5kvth0we; double BSIM4v5k2we; double BSIM4v5ku0we; /* CV model */ double BSIM4v5cgsl; double BSIM4v5cgdl; double BSIM4v5ckappas; double BSIM4v5ckappad; double BSIM4v5cf; double BSIM4v5clc; double BSIM4v5cle; double BSIM4v5vfbcv; double BSIM4v5noff; double BSIM4v5voffcv; double BSIM4v5acde; double BSIM4v5moin; /* Pre-calculated constants */ double BSIM4v5dw; double BSIM4v5dl; double BSIM4v5leff; double BSIM4v5weff; double BSIM4v5dwc; double BSIM4v5dlc; double BSIM4v5dlcig; double BSIM4v5dwj; double BSIM4v5leffCV; double BSIM4v5weffCV; double BSIM4v5weffCJ; double BSIM4v5abulkCVfactor; double BSIM4v5cgso; double BSIM4v5cgdo; double BSIM4v5cgbo; double BSIM4v5u0temp; double BSIM4v5vsattemp; double BSIM4v5sqrtPhi; double BSIM4v5phis3; double BSIM4v5Xdep0; double BSIM4v5sqrtXdep0; double BSIM4v5theta0vb0; double BSIM4v5thetaRout; double BSIM4v5mstar; double BSIM4v5voffcbn; double BSIM4v5rdswmin; double BSIM4v5rdwmin; double BSIM4v5rswmin; double BSIM4v5vfbsd; double BSIM4v5cof1; double BSIM4v5cof2; double BSIM4v5cof3; double BSIM4v5cof4; double BSIM4v5cdep0; double BSIM4v5ToxRatio; double BSIM4v5Aechvb; double BSIM4v5Bechvb; double BSIM4v5ToxRatioEdge; double BSIM4v5AechvbEdge; double BSIM4v5BechvbEdge; double BSIM4v5ldeb; double BSIM4v5k1ox; double BSIM4v5k2ox; double BSIM4v5vfbzbfactor; struct bsim4v5SizeDependParam *pNext; }; typedef struct sBSIM4v5model { struct GENmodel gen; #define BSIM4v5modType gen.GENmodType #define BSIM4v5nextModel(inst) ((struct sBSIM4v5model *)((inst)->gen.GENnextModel)) #define BSIM4v5instances(inst) ((BSIM4v5instance *)((inst)->gen.GENinstances)) #define BSIM4v5modName gen.GENmodName int BSIM4v5type; int BSIM4v5mobMod; int BSIM4v5capMod; int BSIM4v5dioMod; int BSIM4v5trnqsMod; int BSIM4v5acnqsMod; int BSIM4v5fnoiMod; int BSIM4v5tnoiMod; int BSIM4v5rdsMod; int BSIM4v5rbodyMod; int BSIM4v5rgateMod; int BSIM4v5perMod; int BSIM4v5geoMod; int BSIM4v5rgeoMod; int BSIM4v5igcMod; int BSIM4v5igbMod; int BSIM4v5tempMod; int BSIM4v5binUnit; int BSIM4v5paramChk; char *BSIM4v5version; double BSIM4v5toxe; double BSIM4v5toxp; double BSIM4v5toxm; double BSIM4v5dtox; double BSIM4v5epsrox; double BSIM4v5cdsc; double BSIM4v5cdscb; double BSIM4v5cdscd; double BSIM4v5cit; double BSIM4v5nfactor; double BSIM4v5xj; double BSIM4v5vsat; double BSIM4v5at; double BSIM4v5a0; double BSIM4v5ags; double BSIM4v5a1; double BSIM4v5a2; double BSIM4v5keta; double BSIM4v5nsub; double BSIM4v5ndep; double BSIM4v5nsd; double BSIM4v5phin; double BSIM4v5ngate; double BSIM4v5gamma1; double BSIM4v5gamma2; double BSIM4v5vbx; double BSIM4v5vbm; double BSIM4v5xt; double BSIM4v5k1; double BSIM4v5kt1; double BSIM4v5kt1l; double BSIM4v5kt2; double BSIM4v5k2; double BSIM4v5k3; double BSIM4v5k3b; double BSIM4v5w0; double BSIM4v5dvtp0; double BSIM4v5dvtp1; double BSIM4v5lpe0; double BSIM4v5lpeb; double BSIM4v5dvt0; double BSIM4v5dvt1; double BSIM4v5dvt2; double BSIM4v5dvt0w; double BSIM4v5dvt1w; double BSIM4v5dvt2w; double BSIM4v5drout; double BSIM4v5dsub; double BSIM4v5vth0; double BSIM4v5eu; double BSIM4v5ua; double BSIM4v5ua1; double BSIM4v5ub; double BSIM4v5ub1; double BSIM4v5uc; double BSIM4v5uc1; double BSIM4v5ud; double BSIM4v5ud1; double BSIM4v5up; double BSIM4v5lp; double BSIM4v5u0; double BSIM4v5ute; double BSIM4v5voff; double BSIM4v5tvoff; double BSIM4v5minv; double BSIM4v5voffl; double BSIM4v5delta; double BSIM4v5rdsw; double BSIM4v5rdswmin; double BSIM4v5rdwmin; double BSIM4v5rswmin; double BSIM4v5rsw; double BSIM4v5rdw; double BSIM4v5prwg; double BSIM4v5prwb; double BSIM4v5prt; double BSIM4v5eta0; double BSIM4v5etab; double BSIM4v5pclm; double BSIM4v5pdibl1; double BSIM4v5pdibl2; double BSIM4v5pdiblb; double BSIM4v5fprout; double BSIM4v5pdits; double BSIM4v5pditsd; double BSIM4v5pditsl; double BSIM4v5pscbe1; double BSIM4v5pscbe2; double BSIM4v5pvag; double BSIM4v5wr; double BSIM4v5dwg; double BSIM4v5dwb; double BSIM4v5b0; double BSIM4v5b1; double BSIM4v5alpha0; double BSIM4v5alpha1; double BSIM4v5beta0; double BSIM4v5agidl; double BSIM4v5bgidl; double BSIM4v5cgidl; double BSIM4v5egidl; double BSIM4v5aigc; double BSIM4v5bigc; double BSIM4v5cigc; double BSIM4v5aigsd; double BSIM4v5bigsd; double BSIM4v5cigsd; double BSIM4v5aigbacc; double BSIM4v5bigbacc; double BSIM4v5cigbacc; double BSIM4v5aigbinv; double BSIM4v5bigbinv; double BSIM4v5cigbinv; double BSIM4v5nigc; double BSIM4v5nigbacc; double BSIM4v5nigbinv; double BSIM4v5ntox; double BSIM4v5eigbinv; double BSIM4v5pigcd; double BSIM4v5poxedge; double BSIM4v5toxref; double BSIM4v5ijthdfwd; double BSIM4v5ijthsfwd; double BSIM4v5ijthdrev; double BSIM4v5ijthsrev; double BSIM4v5xjbvd; double BSIM4v5xjbvs; double BSIM4v5bvd; double BSIM4v5bvs; double BSIM4v5jtss; double BSIM4v5jtsd; double BSIM4v5jtssws; double BSIM4v5jtsswd; double BSIM4v5jtsswgs; double BSIM4v5jtsswgd; double BSIM4v5njts; double BSIM4v5njtssw; double BSIM4v5njtsswg; double BSIM4v5xtss; double BSIM4v5xtsd; double BSIM4v5xtssws; double BSIM4v5xtsswd; double BSIM4v5xtsswgs; double BSIM4v5xtsswgd; double BSIM4v5tnjts; double BSIM4v5tnjtssw; double BSIM4v5tnjtsswg; double BSIM4v5vtss; double BSIM4v5vtsd; double BSIM4v5vtssws; double BSIM4v5vtsswd; double BSIM4v5vtsswgs; double BSIM4v5vtsswgd; double BSIM4v5xrcrg1; double BSIM4v5xrcrg2; double BSIM4v5lambda; double BSIM4v5vtl; double BSIM4v5lc; double BSIM4v5xn; double BSIM4v5vfbsdoff; /* S/D flatband offset voltage */ double BSIM4v5lintnoi; /* lint offset for noise calculation */ double BSIM4v5tvfbsdoff; double BSIM4v5vfb; double BSIM4v5gbmin; double BSIM4v5rbdb; double BSIM4v5rbsb; double BSIM4v5rbpb; double BSIM4v5rbps; double BSIM4v5rbpd; double BSIM4v5rbps0; double BSIM4v5rbpsl; double BSIM4v5rbpsw; double BSIM4v5rbpsnf; double BSIM4v5rbpd0; double BSIM4v5rbpdl; double BSIM4v5rbpdw; double BSIM4v5rbpdnf; double BSIM4v5rbpbx0; double BSIM4v5rbpbxl; double BSIM4v5rbpbxw; double BSIM4v5rbpbxnf; double BSIM4v5rbpby0; double BSIM4v5rbpbyl; double BSIM4v5rbpbyw; double BSIM4v5rbpbynf; double BSIM4v5rbsbx0; double BSIM4v5rbsby0; double BSIM4v5rbdbx0; double BSIM4v5rbdby0; double BSIM4v5rbsdbxl; double BSIM4v5rbsdbxw; double BSIM4v5rbsdbxnf; double BSIM4v5rbsdbyl; double BSIM4v5rbsdbyw; double BSIM4v5rbsdbynf; double BSIM4v5tnoia; double BSIM4v5tnoib; double BSIM4v5rnoia; double BSIM4v5rnoib; double BSIM4v5ntnoi; /* CV model and Parasitics */ double BSIM4v5cgsl; double BSIM4v5cgdl; double BSIM4v5ckappas; double BSIM4v5ckappad; double BSIM4v5cf; double BSIM4v5vfbcv; double BSIM4v5clc; double BSIM4v5cle; double BSIM4v5dwc; double BSIM4v5dlc; double BSIM4v5xw; double BSIM4v5xl; double BSIM4v5dlcig; double BSIM4v5dwj; double BSIM4v5noff; double BSIM4v5voffcv; double BSIM4v5acde; double BSIM4v5moin; double BSIM4v5tcj; double BSIM4v5tcjsw; double BSIM4v5tcjswg; double BSIM4v5tpb; double BSIM4v5tpbsw; double BSIM4v5tpbswg; double BSIM4v5dmcg; double BSIM4v5dmci; double BSIM4v5dmdg; double BSIM4v5dmcgt; double BSIM4v5xgw; double BSIM4v5xgl; double BSIM4v5rshg; double BSIM4v5ngcon; /* Length Dependence */ double BSIM4v5lcdsc; double BSIM4v5lcdscb; double BSIM4v5lcdscd; double BSIM4v5lcit; double BSIM4v5lnfactor; double BSIM4v5lxj; double BSIM4v5lvsat; double BSIM4v5lat; double BSIM4v5la0; double BSIM4v5lags; double BSIM4v5la1; double BSIM4v5la2; double BSIM4v5lketa; double BSIM4v5lnsub; double BSIM4v5lndep; double BSIM4v5lnsd; double BSIM4v5lphin; double BSIM4v5lngate; double BSIM4v5lgamma1; double BSIM4v5lgamma2; double BSIM4v5lvbx; double BSIM4v5lvbm; double BSIM4v5lxt; double BSIM4v5lk1; double BSIM4v5lkt1; double BSIM4v5lkt1l; double BSIM4v5lkt2; double BSIM4v5lk2; double BSIM4v5lk3; double BSIM4v5lk3b; double BSIM4v5lw0; double BSIM4v5ldvtp0; double BSIM4v5ldvtp1; double BSIM4v5llpe0; double BSIM4v5llpeb; double BSIM4v5ldvt0; double BSIM4v5ldvt1; double BSIM4v5ldvt2; double BSIM4v5ldvt0w; double BSIM4v5ldvt1w; double BSIM4v5ldvt2w; double BSIM4v5ldrout; double BSIM4v5ldsub; double BSIM4v5lvth0; double BSIM4v5lua; double BSIM4v5lua1; double BSIM4v5lub; double BSIM4v5lub1; double BSIM4v5luc; double BSIM4v5luc1; double BSIM4v5lud; double BSIM4v5lud1; double BSIM4v5lup; double BSIM4v5llp; double BSIM4v5lu0; double BSIM4v5leu; double BSIM4v5lute; double BSIM4v5lvoff; double BSIM4v5ltvoff; double BSIM4v5lminv; double BSIM4v5ldelta; double BSIM4v5lrdsw; double BSIM4v5lrsw; double BSIM4v5lrdw; double BSIM4v5lprwg; double BSIM4v5lprwb; double BSIM4v5lprt; double BSIM4v5leta0; double BSIM4v5letab; double BSIM4v5lpclm; double BSIM4v5lpdibl1; double BSIM4v5lpdibl2; double BSIM4v5lpdiblb; double BSIM4v5lfprout; double BSIM4v5lpdits; double BSIM4v5lpditsd; double BSIM4v5lpscbe1; double BSIM4v5lpscbe2; double BSIM4v5lpvag; double BSIM4v5lwr; double BSIM4v5ldwg; double BSIM4v5ldwb; double BSIM4v5lb0; double BSIM4v5lb1; double BSIM4v5lalpha0; double BSIM4v5lalpha1; double BSIM4v5lbeta0; double BSIM4v5lvfb; double BSIM4v5lagidl; double BSIM4v5lbgidl; double BSIM4v5lcgidl; double BSIM4v5legidl; double BSIM4v5laigc; double BSIM4v5lbigc; double BSIM4v5lcigc; double BSIM4v5laigsd; double BSIM4v5lbigsd; double BSIM4v5lcigsd; double BSIM4v5laigbacc; double BSIM4v5lbigbacc; double BSIM4v5lcigbacc; double BSIM4v5laigbinv; double BSIM4v5lbigbinv; double BSIM4v5lcigbinv; double BSIM4v5lnigc; double BSIM4v5lnigbacc; double BSIM4v5lnigbinv; double BSIM4v5lntox; double BSIM4v5leigbinv; double BSIM4v5lpigcd; double BSIM4v5lpoxedge; double BSIM4v5lxrcrg1; double BSIM4v5lxrcrg2; double BSIM4v5llambda; double BSIM4v5lvtl; double BSIM4v5lxn; double BSIM4v5lvfbsdoff; double BSIM4v5ltvfbsdoff; /* CV model */ double BSIM4v5lcgsl; double BSIM4v5lcgdl; double BSIM4v5lckappas; double BSIM4v5lckappad; double BSIM4v5lcf; double BSIM4v5lclc; double BSIM4v5lcle; double BSIM4v5lvfbcv; double BSIM4v5lnoff; double BSIM4v5lvoffcv; double BSIM4v5lacde; double BSIM4v5lmoin; /* Width Dependence */ double BSIM4v5wcdsc; double BSIM4v5wcdscb; double BSIM4v5wcdscd; double BSIM4v5wcit; double BSIM4v5wnfactor; double BSIM4v5wxj; double BSIM4v5wvsat; double BSIM4v5wat; double BSIM4v5wa0; double BSIM4v5wags; double BSIM4v5wa1; double BSIM4v5wa2; double BSIM4v5wketa; double BSIM4v5wnsub; double BSIM4v5wndep; double BSIM4v5wnsd; double BSIM4v5wphin; double BSIM4v5wngate; double BSIM4v5wgamma1; double BSIM4v5wgamma2; double BSIM4v5wvbx; double BSIM4v5wvbm; double BSIM4v5wxt; double BSIM4v5wk1; double BSIM4v5wkt1; double BSIM4v5wkt1l; double BSIM4v5wkt2; double BSIM4v5wk2; double BSIM4v5wk3; double BSIM4v5wk3b; double BSIM4v5ww0; double BSIM4v5wdvtp0; double BSIM4v5wdvtp1; double BSIM4v5wlpe0; double BSIM4v5wlpeb; double BSIM4v5wdvt0; double BSIM4v5wdvt1; double BSIM4v5wdvt2; double BSIM4v5wdvt0w; double BSIM4v5wdvt1w; double BSIM4v5wdvt2w; double BSIM4v5wdrout; double BSIM4v5wdsub; double BSIM4v5wvth0; double BSIM4v5wua; double BSIM4v5wua1; double BSIM4v5wub; double BSIM4v5wub1; double BSIM4v5wuc; double BSIM4v5wuc1; double BSIM4v5wud; double BSIM4v5wud1; double BSIM4v5wup; double BSIM4v5wlp; double BSIM4v5wu0; double BSIM4v5weu; double BSIM4v5wute; double BSIM4v5wvoff; double BSIM4v5wtvoff; double BSIM4v5wminv; double BSIM4v5wdelta; double BSIM4v5wrdsw; double BSIM4v5wrsw; double BSIM4v5wrdw; double BSIM4v5wprwg; double BSIM4v5wprwb; double BSIM4v5wprt; double BSIM4v5weta0; double BSIM4v5wetab; double BSIM4v5wpclm; double BSIM4v5wpdibl1; double BSIM4v5wpdibl2; double BSIM4v5wpdiblb; double BSIM4v5wfprout; double BSIM4v5wpdits; double BSIM4v5wpditsd; double BSIM4v5wpscbe1; double BSIM4v5wpscbe2; double BSIM4v5wpvag; double BSIM4v5wwr; double BSIM4v5wdwg; double BSIM4v5wdwb; double BSIM4v5wb0; double BSIM4v5wb1; double BSIM4v5walpha0; double BSIM4v5walpha1; double BSIM4v5wbeta0; double BSIM4v5wvfb; double BSIM4v5wagidl; double BSIM4v5wbgidl; double BSIM4v5wcgidl; double BSIM4v5wegidl; double BSIM4v5waigc; double BSIM4v5wbigc; double BSIM4v5wcigc; double BSIM4v5waigsd; double BSIM4v5wbigsd; double BSIM4v5wcigsd; double BSIM4v5waigbacc; double BSIM4v5wbigbacc; double BSIM4v5wcigbacc; double BSIM4v5waigbinv; double BSIM4v5wbigbinv; double BSIM4v5wcigbinv; double BSIM4v5wnigc; double BSIM4v5wnigbacc; double BSIM4v5wnigbinv; double BSIM4v5wntox; double BSIM4v5weigbinv; double BSIM4v5wpigcd; double BSIM4v5wpoxedge; double BSIM4v5wxrcrg1; double BSIM4v5wxrcrg2; double BSIM4v5wlambda; double BSIM4v5wvtl; double BSIM4v5wxn; double BSIM4v5wvfbsdoff; double BSIM4v5wtvfbsdoff; /* CV model */ double BSIM4v5wcgsl; double BSIM4v5wcgdl; double BSIM4v5wckappas; double BSIM4v5wckappad; double BSIM4v5wcf; double BSIM4v5wclc; double BSIM4v5wcle; double BSIM4v5wvfbcv; double BSIM4v5wnoff; double BSIM4v5wvoffcv; double BSIM4v5wacde; double BSIM4v5wmoin; /* Cross-term Dependence */ double BSIM4v5pcdsc; double BSIM4v5pcdscb; double BSIM4v5pcdscd; double BSIM4v5pcit; double BSIM4v5pnfactor; double BSIM4v5pxj; double BSIM4v5pvsat; double BSIM4v5pat; double BSIM4v5pa0; double BSIM4v5pags; double BSIM4v5pa1; double BSIM4v5pa2; double BSIM4v5pketa; double BSIM4v5pnsub; double BSIM4v5pndep; double BSIM4v5pnsd; double BSIM4v5pphin; double BSIM4v5pngate; double BSIM4v5pgamma1; double BSIM4v5pgamma2; double BSIM4v5pvbx; double BSIM4v5pvbm; double BSIM4v5pxt; double BSIM4v5pk1; double BSIM4v5pkt1; double BSIM4v5pkt1l; double BSIM4v5pkt2; double BSIM4v5pk2; double BSIM4v5pk3; double BSIM4v5pk3b; double BSIM4v5pw0; double BSIM4v5pdvtp0; double BSIM4v5pdvtp1; double BSIM4v5plpe0; double BSIM4v5plpeb; double BSIM4v5pdvt0; double BSIM4v5pdvt1; double BSIM4v5pdvt2; double BSIM4v5pdvt0w; double BSIM4v5pdvt1w; double BSIM4v5pdvt2w; double BSIM4v5pdrout; double BSIM4v5pdsub; double BSIM4v5pvth0; double BSIM4v5pua; double BSIM4v5pua1; double BSIM4v5pub; double BSIM4v5pub1; double BSIM4v5puc; double BSIM4v5puc1; double BSIM4v5pud; double BSIM4v5pud1; double BSIM4v5pup; double BSIM4v5plp; double BSIM4v5pu0; double BSIM4v5peu; double BSIM4v5pute; double BSIM4v5pvoff; double BSIM4v5ptvoff; double BSIM4v5pminv; double BSIM4v5pdelta; double BSIM4v5prdsw; double BSIM4v5prsw; double BSIM4v5prdw; double BSIM4v5pprwg; double BSIM4v5pprwb; double BSIM4v5pprt; double BSIM4v5peta0; double BSIM4v5petab; double BSIM4v5ppclm; double BSIM4v5ppdibl1; double BSIM4v5ppdibl2; double BSIM4v5ppdiblb; double BSIM4v5pfprout; double BSIM4v5ppdits; double BSIM4v5ppditsd; double BSIM4v5ppscbe1; double BSIM4v5ppscbe2; double BSIM4v5ppvag; double BSIM4v5pwr; double BSIM4v5pdwg; double BSIM4v5pdwb; double BSIM4v5pb0; double BSIM4v5pb1; double BSIM4v5palpha0; double BSIM4v5palpha1; double BSIM4v5pbeta0; double BSIM4v5pvfb; double BSIM4v5pagidl; double BSIM4v5pbgidl; double BSIM4v5pcgidl; double BSIM4v5pegidl; double BSIM4v5paigc; double BSIM4v5pbigc; double BSIM4v5pcigc; double BSIM4v5paigsd; double BSIM4v5pbigsd; double BSIM4v5pcigsd; double BSIM4v5paigbacc; double BSIM4v5pbigbacc; double BSIM4v5pcigbacc; double BSIM4v5paigbinv; double BSIM4v5pbigbinv; double BSIM4v5pcigbinv; double BSIM4v5pnigc; double BSIM4v5pnigbacc; double BSIM4v5pnigbinv; double BSIM4v5pntox; double BSIM4v5peigbinv; double BSIM4v5ppigcd; double BSIM4v5ppoxedge; double BSIM4v5pxrcrg1; double BSIM4v5pxrcrg2; double BSIM4v5plambda; double BSIM4v5pvtl; double BSIM4v5pxn; double BSIM4v5pvfbsdoff; double BSIM4v5ptvfbsdoff; /* CV model */ double BSIM4v5pcgsl; double BSIM4v5pcgdl; double BSIM4v5pckappas; double BSIM4v5pckappad; double BSIM4v5pcf; double BSIM4v5pclc; double BSIM4v5pcle; double BSIM4v5pvfbcv; double BSIM4v5pnoff; double BSIM4v5pvoffcv; double BSIM4v5pacde; double BSIM4v5pmoin; double BSIM4v5tnom; double BSIM4v5cgso; double BSIM4v5cgdo; double BSIM4v5cgbo; double BSIM4v5xpart; double BSIM4v5cFringOut; double BSIM4v5cFringMax; double BSIM4v5sheetResistance; double BSIM4v5SjctSatCurDensity; double BSIM4v5DjctSatCurDensity; double BSIM4v5SjctSidewallSatCurDensity; double BSIM4v5DjctSidewallSatCurDensity; double BSIM4v5SjctGateSidewallSatCurDensity; double BSIM4v5DjctGateSidewallSatCurDensity; double BSIM4v5SbulkJctPotential; double BSIM4v5DbulkJctPotential; double BSIM4v5SbulkJctBotGradingCoeff; double BSIM4v5DbulkJctBotGradingCoeff; double BSIM4v5SbulkJctSideGradingCoeff; double BSIM4v5DbulkJctSideGradingCoeff; double BSIM4v5SbulkJctGateSideGradingCoeff; double BSIM4v5DbulkJctGateSideGradingCoeff; double BSIM4v5SsidewallJctPotential; double BSIM4v5DsidewallJctPotential; double BSIM4v5SGatesidewallJctPotential; double BSIM4v5DGatesidewallJctPotential; double BSIM4v5SunitAreaJctCap; double BSIM4v5DunitAreaJctCap; double BSIM4v5SunitLengthSidewallJctCap; double BSIM4v5DunitLengthSidewallJctCap; double BSIM4v5SunitLengthGateSidewallJctCap; double BSIM4v5DunitLengthGateSidewallJctCap; double BSIM4v5SjctEmissionCoeff; double BSIM4v5DjctEmissionCoeff; double BSIM4v5SjctTempExponent; double BSIM4v5DjctTempExponent; double BSIM4v5njtstemp; double BSIM4v5njtsswtemp; double BSIM4v5njtsswgtemp; double BSIM4v5Lint; double BSIM4v5Ll; double BSIM4v5Llc; double BSIM4v5Lln; double BSIM4v5Lw; double BSIM4v5Lwc; double BSIM4v5Lwn; double BSIM4v5Lwl; double BSIM4v5Lwlc; double BSIM4v5Lmin; double BSIM4v5Lmax; double BSIM4v5Wint; double BSIM4v5Wl; double BSIM4v5Wlc; double BSIM4v5Wln; double BSIM4v5Ww; double BSIM4v5Wwc; double BSIM4v5Wwn; double BSIM4v5Wwl; double BSIM4v5Wwlc; double BSIM4v5Wmin; double BSIM4v5Wmax; /* added for stress effect */ double BSIM4v5saref; double BSIM4v5sbref; double BSIM4v5wlod; double BSIM4v5ku0; double BSIM4v5kvsat; double BSIM4v5kvth0; double BSIM4v5tku0; double BSIM4v5llodku0; double BSIM4v5wlodku0; double BSIM4v5llodvth; double BSIM4v5wlodvth; double BSIM4v5lku0; double BSIM4v5wku0; double BSIM4v5pku0; double BSIM4v5lkvth0; double BSIM4v5wkvth0; double BSIM4v5pkvth0; double BSIM4v5stk2; double BSIM4v5lodk2; double BSIM4v5steta0; double BSIM4v5lodeta0; double BSIM4v5web; double BSIM4v5wec; double BSIM4v5kvth0we; double BSIM4v5k2we; double BSIM4v5ku0we; double BSIM4v5scref; double BSIM4v5wpemod; double BSIM4v5lkvth0we; double BSIM4v5lk2we; double BSIM4v5lku0we; double BSIM4v5wkvth0we; double BSIM4v5wk2we; double BSIM4v5wku0we; double BSIM4v5pkvth0we; double BSIM4v5pk2we; double BSIM4v5pku0we; /* Pre-calculated constants * move to size-dependent param */ double BSIM4v5vtm; double BSIM4v5vtm0; double BSIM4v5coxe; double BSIM4v5coxp; double BSIM4v5cof1; double BSIM4v5cof2; double BSIM4v5cof3; double BSIM4v5cof4; double BSIM4v5vcrit; double BSIM4v5factor1; double BSIM4v5PhiBS; double BSIM4v5PhiBSWS; double BSIM4v5PhiBSWGS; double BSIM4v5SjctTempSatCurDensity; double BSIM4v5SjctSidewallTempSatCurDensity; double BSIM4v5SjctGateSidewallTempSatCurDensity; double BSIM4v5PhiBD; double BSIM4v5PhiBSWD; double BSIM4v5PhiBSWGD; double BSIM4v5DjctTempSatCurDensity; double BSIM4v5DjctSidewallTempSatCurDensity; double BSIM4v5DjctGateSidewallTempSatCurDensity; double BSIM4v5SunitAreaTempJctCap; double BSIM4v5DunitAreaTempJctCap; double BSIM4v5SunitLengthSidewallTempJctCap; double BSIM4v5DunitLengthSidewallTempJctCap; double BSIM4v5SunitLengthGateSidewallTempJctCap; double BSIM4v5DunitLengthGateSidewallTempJctCap; double BSIM4v5oxideTrapDensityA; double BSIM4v5oxideTrapDensityB; double BSIM4v5oxideTrapDensityC; double BSIM4v5em; double BSIM4v5ef; double BSIM4v5af; double BSIM4v5kf; double BSIM4v5vgsMax; double BSIM4v5vgdMax; double BSIM4v5vgbMax; double BSIM4v5vdsMax; double BSIM4v5vbsMax; double BSIM4v5vbdMax; double BSIM4v5vgsrMax; double BSIM4v5vgdrMax; double BSIM4v5vgbrMax; double BSIM4v5vbsrMax; double BSIM4v5vbdrMax; struct bsim4v5SizeDependParam *pSizeDependParamKnot; #ifdef USE_OMP int BSIM4v5InstCount; struct sBSIM4v5instance **BSIM4v5InstanceArray; #endif /* Flags */ unsigned BSIM4v5rgeomodGiven :1; unsigned BSIM4v5stimodGiven :1; unsigned BSIM4v5sa0Given :1; unsigned BSIM4v5sb0Given :1; unsigned BSIM4v5mobModGiven :1; unsigned BSIM4v5binUnitGiven :1; unsigned BSIM4v5capModGiven :1; unsigned BSIM4v5dioModGiven :1; unsigned BSIM4v5rdsModGiven :1; unsigned BSIM4v5rbodyModGiven :1; unsigned BSIM4v5rgateModGiven :1; unsigned BSIM4v5perModGiven :1; unsigned BSIM4v5geoModGiven :1; unsigned BSIM4v5rgeoModGiven :1; unsigned BSIM4v5paramChkGiven :1; unsigned BSIM4v5trnqsModGiven :1; unsigned BSIM4v5acnqsModGiven :1; unsigned BSIM4v5fnoiModGiven :1; unsigned BSIM4v5tnoiModGiven :1; unsigned BSIM4v5igcModGiven :1; unsigned BSIM4v5igbModGiven :1; unsigned BSIM4v5tempModGiven :1; unsigned BSIM4v5typeGiven :1; unsigned BSIM4v5toxrefGiven :1; unsigned BSIM4v5toxeGiven :1; unsigned BSIM4v5toxpGiven :1; unsigned BSIM4v5toxmGiven :1; unsigned BSIM4v5dtoxGiven :1; unsigned BSIM4v5epsroxGiven :1; unsigned BSIM4v5versionGiven :1; unsigned BSIM4v5cdscGiven :1; unsigned BSIM4v5cdscbGiven :1; unsigned BSIM4v5cdscdGiven :1; unsigned BSIM4v5citGiven :1; unsigned BSIM4v5nfactorGiven :1; unsigned BSIM4v5xjGiven :1; unsigned BSIM4v5vsatGiven :1; unsigned BSIM4v5atGiven :1; unsigned BSIM4v5a0Given :1; unsigned BSIM4v5agsGiven :1; unsigned BSIM4v5a1Given :1; unsigned BSIM4v5a2Given :1; unsigned BSIM4v5ketaGiven :1; unsigned BSIM4v5nsubGiven :1; unsigned BSIM4v5ndepGiven :1; unsigned BSIM4v5nsdGiven :1; unsigned BSIM4v5phinGiven :1; unsigned BSIM4v5ngateGiven :1; unsigned BSIM4v5gamma1Given :1; unsigned BSIM4v5gamma2Given :1; unsigned BSIM4v5vbxGiven :1; unsigned BSIM4v5vbmGiven :1; unsigned BSIM4v5xtGiven :1; unsigned BSIM4v5k1Given :1; unsigned BSIM4v5kt1Given :1; unsigned BSIM4v5kt1lGiven :1; unsigned BSIM4v5kt2Given :1; unsigned BSIM4v5k2Given :1; unsigned BSIM4v5k3Given :1; unsigned BSIM4v5k3bGiven :1; unsigned BSIM4v5w0Given :1; unsigned BSIM4v5dvtp0Given :1; unsigned BSIM4v5dvtp1Given :1; unsigned BSIM4v5lpe0Given :1; unsigned BSIM4v5lpebGiven :1; unsigned BSIM4v5dvt0Given :1; unsigned BSIM4v5dvt1Given :1; unsigned BSIM4v5dvt2Given :1; unsigned BSIM4v5dvt0wGiven :1; unsigned BSIM4v5dvt1wGiven :1; unsigned BSIM4v5dvt2wGiven :1; unsigned BSIM4v5droutGiven :1; unsigned BSIM4v5dsubGiven :1; unsigned BSIM4v5vth0Given :1; unsigned BSIM4v5euGiven :1; unsigned BSIM4v5uaGiven :1; unsigned BSIM4v5ua1Given :1; unsigned BSIM4v5ubGiven :1; unsigned BSIM4v5ub1Given :1; unsigned BSIM4v5ucGiven :1; unsigned BSIM4v5uc1Given :1; unsigned BSIM4v5udGiven :1; unsigned BSIM4v5ud1Given :1; unsigned BSIM4v5upGiven :1; unsigned BSIM4v5lpGiven :1; unsigned BSIM4v5u0Given :1; unsigned BSIM4v5uteGiven :1; unsigned BSIM4v5voffGiven :1; unsigned BSIM4v5tvoffGiven :1; unsigned BSIM4v5vofflGiven :1; unsigned BSIM4v5minvGiven :1; unsigned BSIM4v5rdswGiven :1; unsigned BSIM4v5rdswminGiven :1; unsigned BSIM4v5rdwminGiven :1; unsigned BSIM4v5rswminGiven :1; unsigned BSIM4v5rswGiven :1; unsigned BSIM4v5rdwGiven :1; unsigned BSIM4v5prwgGiven :1; unsigned BSIM4v5prwbGiven :1; unsigned BSIM4v5prtGiven :1; unsigned BSIM4v5eta0Given :1; unsigned BSIM4v5etabGiven :1; unsigned BSIM4v5pclmGiven :1; unsigned BSIM4v5pdibl1Given :1; unsigned BSIM4v5pdibl2Given :1; unsigned BSIM4v5pdiblbGiven :1; unsigned BSIM4v5fproutGiven :1; unsigned BSIM4v5pditsGiven :1; unsigned BSIM4v5pditsdGiven :1; unsigned BSIM4v5pditslGiven :1; unsigned BSIM4v5pscbe1Given :1; unsigned BSIM4v5pscbe2Given :1; unsigned BSIM4v5pvagGiven :1; unsigned BSIM4v5deltaGiven :1; unsigned BSIM4v5wrGiven :1; unsigned BSIM4v5dwgGiven :1; unsigned BSIM4v5dwbGiven :1; unsigned BSIM4v5b0Given :1; unsigned BSIM4v5b1Given :1; unsigned BSIM4v5alpha0Given :1; unsigned BSIM4v5alpha1Given :1; unsigned BSIM4v5beta0Given :1; unsigned BSIM4v5agidlGiven :1; unsigned BSIM4v5bgidlGiven :1; unsigned BSIM4v5cgidlGiven :1; unsigned BSIM4v5egidlGiven :1; unsigned BSIM4v5aigcGiven :1; unsigned BSIM4v5bigcGiven :1; unsigned BSIM4v5cigcGiven :1; unsigned BSIM4v5aigsdGiven :1; unsigned BSIM4v5bigsdGiven :1; unsigned BSIM4v5cigsdGiven :1; unsigned BSIM4v5aigbaccGiven :1; unsigned BSIM4v5bigbaccGiven :1; unsigned BSIM4v5cigbaccGiven :1; unsigned BSIM4v5aigbinvGiven :1; unsigned BSIM4v5bigbinvGiven :1; unsigned BSIM4v5cigbinvGiven :1; unsigned BSIM4v5nigcGiven :1; unsigned BSIM4v5nigbinvGiven :1; unsigned BSIM4v5nigbaccGiven :1; unsigned BSIM4v5ntoxGiven :1; unsigned BSIM4v5eigbinvGiven :1; unsigned BSIM4v5pigcdGiven :1; unsigned BSIM4v5poxedgeGiven :1; unsigned BSIM4v5ijthdfwdGiven :1; unsigned BSIM4v5ijthsfwdGiven :1; unsigned BSIM4v5ijthdrevGiven :1; unsigned BSIM4v5ijthsrevGiven :1; unsigned BSIM4v5xjbvdGiven :1; unsigned BSIM4v5xjbvsGiven :1; unsigned BSIM4v5bvdGiven :1; unsigned BSIM4v5bvsGiven :1; unsigned BSIM4v5jtssGiven :1; unsigned BSIM4v5jtsdGiven :1; unsigned BSIM4v5jtsswsGiven :1; unsigned BSIM4v5jtsswdGiven :1; unsigned BSIM4v5jtsswgsGiven :1; unsigned BSIM4v5jtsswgdGiven :1; unsigned BSIM4v5njtsGiven :1; unsigned BSIM4v5njtsswGiven :1; unsigned BSIM4v5njtsswgGiven :1; unsigned BSIM4v5xtssGiven :1; unsigned BSIM4v5xtsdGiven :1; unsigned BSIM4v5xtsswsGiven :1; unsigned BSIM4v5xtsswdGiven :1; unsigned BSIM4v5xtsswgsGiven :1; unsigned BSIM4v5xtsswgdGiven :1; unsigned BSIM4v5tnjtsGiven :1; unsigned BSIM4v5tnjtsswGiven :1; unsigned BSIM4v5tnjtsswgGiven :1; unsigned BSIM4v5vtssGiven :1; unsigned BSIM4v5vtsdGiven :1; unsigned BSIM4v5vtsswsGiven :1; unsigned BSIM4v5vtsswdGiven :1; unsigned BSIM4v5vtsswgsGiven :1; unsigned BSIM4v5vtsswgdGiven :1; unsigned BSIM4v5vfbGiven :1; unsigned BSIM4v5gbminGiven :1; unsigned BSIM4v5rbdbGiven :1; unsigned BSIM4v5rbsbGiven :1; unsigned BSIM4v5rbpsGiven :1; unsigned BSIM4v5rbpdGiven :1; unsigned BSIM4v5rbpbGiven :1; unsigned BSIM4v5rbps0Given :1; unsigned BSIM4v5rbpslGiven :1; unsigned BSIM4v5rbpswGiven :1; unsigned BSIM4v5rbpsnfGiven :1; unsigned BSIM4v5rbpd0Given :1; unsigned BSIM4v5rbpdlGiven :1; unsigned BSIM4v5rbpdwGiven :1; unsigned BSIM4v5rbpdnfGiven :1; unsigned BSIM4v5rbpbx0Given :1; unsigned BSIM4v5rbpbxlGiven :1; unsigned BSIM4v5rbpbxwGiven :1; unsigned BSIM4v5rbpbxnfGiven :1; unsigned BSIM4v5rbpby0Given :1; unsigned BSIM4v5rbpbylGiven :1; unsigned BSIM4v5rbpbywGiven :1; unsigned BSIM4v5rbpbynfGiven :1; unsigned BSIM4v5rbsbx0Given :1; unsigned BSIM4v5rbsby0Given :1; unsigned BSIM4v5rbdbx0Given :1; unsigned BSIM4v5rbdby0Given :1; unsigned BSIM4v5rbsdbxlGiven :1; unsigned BSIM4v5rbsdbxwGiven :1; unsigned BSIM4v5rbsdbxnfGiven :1; unsigned BSIM4v5rbsdbylGiven :1; unsigned BSIM4v5rbsdbywGiven :1; unsigned BSIM4v5rbsdbynfGiven :1; unsigned BSIM4v5xrcrg1Given :1; unsigned BSIM4v5xrcrg2Given :1; unsigned BSIM4v5tnoiaGiven :1; unsigned BSIM4v5tnoibGiven :1; unsigned BSIM4v5rnoiaGiven :1; unsigned BSIM4v5rnoibGiven :1; unsigned BSIM4v5ntnoiGiven :1; unsigned BSIM4v5lambdaGiven :1; unsigned BSIM4v5vtlGiven :1; unsigned BSIM4v5lcGiven :1; unsigned BSIM4v5xnGiven :1; unsigned BSIM4v5vfbsdoffGiven :1; unsigned BSIM4v5lintnoiGiven :1; unsigned BSIM4v5tvfbsdoffGiven :1; /* CV model and parasitics */ unsigned BSIM4v5cgslGiven :1; unsigned BSIM4v5cgdlGiven :1; unsigned BSIM4v5ckappasGiven :1; unsigned BSIM4v5ckappadGiven :1; unsigned BSIM4v5cfGiven :1; unsigned BSIM4v5vfbcvGiven :1; unsigned BSIM4v5clcGiven :1; unsigned BSIM4v5cleGiven :1; unsigned BSIM4v5dwcGiven :1; unsigned BSIM4v5dlcGiven :1; unsigned BSIM4v5xwGiven :1; unsigned BSIM4v5xlGiven :1; unsigned BSIM4v5dlcigGiven :1; unsigned BSIM4v5dwjGiven :1; unsigned BSIM4v5noffGiven :1; unsigned BSIM4v5voffcvGiven :1; unsigned BSIM4v5acdeGiven :1; unsigned BSIM4v5moinGiven :1; unsigned BSIM4v5tcjGiven :1; unsigned BSIM4v5tcjswGiven :1; unsigned BSIM4v5tcjswgGiven :1; unsigned BSIM4v5tpbGiven :1; unsigned BSIM4v5tpbswGiven :1; unsigned BSIM4v5tpbswgGiven :1; unsigned BSIM4v5dmcgGiven :1; unsigned BSIM4v5dmciGiven :1; unsigned BSIM4v5dmdgGiven :1; unsigned BSIM4v5dmcgtGiven :1; unsigned BSIM4v5xgwGiven :1; unsigned BSIM4v5xglGiven :1; unsigned BSIM4v5rshgGiven :1; unsigned BSIM4v5ngconGiven :1; /* Length dependence */ unsigned BSIM4v5lcdscGiven :1; unsigned BSIM4v5lcdscbGiven :1; unsigned BSIM4v5lcdscdGiven :1; unsigned BSIM4v5lcitGiven :1; unsigned BSIM4v5lnfactorGiven :1; unsigned BSIM4v5lxjGiven :1; unsigned BSIM4v5lvsatGiven :1; unsigned BSIM4v5latGiven :1; unsigned BSIM4v5la0Given :1; unsigned BSIM4v5lagsGiven :1; unsigned BSIM4v5la1Given :1; unsigned BSIM4v5la2Given :1; unsigned BSIM4v5lketaGiven :1; unsigned BSIM4v5lnsubGiven :1; unsigned BSIM4v5lndepGiven :1; unsigned BSIM4v5lnsdGiven :1; unsigned BSIM4v5lphinGiven :1; unsigned BSIM4v5lngateGiven :1; unsigned BSIM4v5lgamma1Given :1; unsigned BSIM4v5lgamma2Given :1; unsigned BSIM4v5lvbxGiven :1; unsigned BSIM4v5lvbmGiven :1; unsigned BSIM4v5lxtGiven :1; unsigned BSIM4v5lk1Given :1; unsigned BSIM4v5lkt1Given :1; unsigned BSIM4v5lkt1lGiven :1; unsigned BSIM4v5lkt2Given :1; unsigned BSIM4v5lk2Given :1; unsigned BSIM4v5lk3Given :1; unsigned BSIM4v5lk3bGiven :1; unsigned BSIM4v5lw0Given :1; unsigned BSIM4v5ldvtp0Given :1; unsigned BSIM4v5ldvtp1Given :1; unsigned BSIM4v5llpe0Given :1; unsigned BSIM4v5llpebGiven :1; unsigned BSIM4v5ldvt0Given :1; unsigned BSIM4v5ldvt1Given :1; unsigned BSIM4v5ldvt2Given :1; unsigned BSIM4v5ldvt0wGiven :1; unsigned BSIM4v5ldvt1wGiven :1; unsigned BSIM4v5ldvt2wGiven :1; unsigned BSIM4v5ldroutGiven :1; unsigned BSIM4v5ldsubGiven :1; unsigned BSIM4v5lvth0Given :1; unsigned BSIM4v5luaGiven :1; unsigned BSIM4v5lua1Given :1; unsigned BSIM4v5lubGiven :1; unsigned BSIM4v5lub1Given :1; unsigned BSIM4v5lucGiven :1; unsigned BSIM4v5luc1Given :1; unsigned BSIM4v5ludGiven :1; unsigned BSIM4v5lud1Given :1; unsigned BSIM4v5lupGiven :1; unsigned BSIM4v5llpGiven :1; unsigned BSIM4v5lu0Given :1; unsigned BSIM4v5leuGiven :1; unsigned BSIM4v5luteGiven :1; unsigned BSIM4v5lvoffGiven :1; unsigned BSIM4v5ltvoffGiven :1; unsigned BSIM4v5lminvGiven :1; unsigned BSIM4v5lrdswGiven :1; unsigned BSIM4v5lrswGiven :1; unsigned BSIM4v5lrdwGiven :1; unsigned BSIM4v5lprwgGiven :1; unsigned BSIM4v5lprwbGiven :1; unsigned BSIM4v5lprtGiven :1; unsigned BSIM4v5leta0Given :1; unsigned BSIM4v5letabGiven :1; unsigned BSIM4v5lpclmGiven :1; unsigned BSIM4v5lpdibl1Given :1; unsigned BSIM4v5lpdibl2Given :1; unsigned BSIM4v5lpdiblbGiven :1; unsigned BSIM4v5lfproutGiven :1; unsigned BSIM4v5lpditsGiven :1; unsigned BSIM4v5lpditsdGiven :1; unsigned BSIM4v5lpscbe1Given :1; unsigned BSIM4v5lpscbe2Given :1; unsigned BSIM4v5lpvagGiven :1; unsigned BSIM4v5ldeltaGiven :1; unsigned BSIM4v5lwrGiven :1; unsigned BSIM4v5ldwgGiven :1; unsigned BSIM4v5ldwbGiven :1; unsigned BSIM4v5lb0Given :1; unsigned BSIM4v5lb1Given :1; unsigned BSIM4v5lalpha0Given :1; unsigned BSIM4v5lalpha1Given :1; unsigned BSIM4v5lbeta0Given :1; unsigned BSIM4v5lvfbGiven :1; unsigned BSIM4v5lagidlGiven :1; unsigned BSIM4v5lbgidlGiven :1; unsigned BSIM4v5lcgidlGiven :1; unsigned BSIM4v5legidlGiven :1; unsigned BSIM4v5laigcGiven :1; unsigned BSIM4v5lbigcGiven :1; unsigned BSIM4v5lcigcGiven :1; unsigned BSIM4v5laigsdGiven :1; unsigned BSIM4v5lbigsdGiven :1; unsigned BSIM4v5lcigsdGiven :1; unsigned BSIM4v5laigbaccGiven :1; unsigned BSIM4v5lbigbaccGiven :1; unsigned BSIM4v5lcigbaccGiven :1; unsigned BSIM4v5laigbinvGiven :1; unsigned BSIM4v5lbigbinvGiven :1; unsigned BSIM4v5lcigbinvGiven :1; unsigned BSIM4v5lnigcGiven :1; unsigned BSIM4v5lnigbinvGiven :1; unsigned BSIM4v5lnigbaccGiven :1; unsigned BSIM4v5lntoxGiven :1; unsigned BSIM4v5leigbinvGiven :1; unsigned BSIM4v5lpigcdGiven :1; unsigned BSIM4v5lpoxedgeGiven :1; unsigned BSIM4v5lxrcrg1Given :1; unsigned BSIM4v5lxrcrg2Given :1; unsigned BSIM4v5llambdaGiven :1; unsigned BSIM4v5lvtlGiven :1; unsigned BSIM4v5lxnGiven :1; unsigned BSIM4v5lvfbsdoffGiven :1; unsigned BSIM4v5ltvfbsdoffGiven :1; /* CV model */ unsigned BSIM4v5lcgslGiven :1; unsigned BSIM4v5lcgdlGiven :1; unsigned BSIM4v5lckappasGiven :1; unsigned BSIM4v5lckappadGiven :1; unsigned BSIM4v5lcfGiven :1; unsigned BSIM4v5lclcGiven :1; unsigned BSIM4v5lcleGiven :1; unsigned BSIM4v5lvfbcvGiven :1; unsigned BSIM4v5lnoffGiven :1; unsigned BSIM4v5lvoffcvGiven :1; unsigned BSIM4v5lacdeGiven :1; unsigned BSIM4v5lmoinGiven :1; /* Width dependence */ unsigned BSIM4v5wcdscGiven :1; unsigned BSIM4v5wcdscbGiven :1; unsigned BSIM4v5wcdscdGiven :1; unsigned BSIM4v5wcitGiven :1; unsigned BSIM4v5wnfactorGiven :1; unsigned BSIM4v5wxjGiven :1; unsigned BSIM4v5wvsatGiven :1; unsigned BSIM4v5watGiven :1; unsigned BSIM4v5wa0Given :1; unsigned BSIM4v5wagsGiven :1; unsigned BSIM4v5wa1Given :1; unsigned BSIM4v5wa2Given :1; unsigned BSIM4v5wketaGiven :1; unsigned BSIM4v5wnsubGiven :1; unsigned BSIM4v5wndepGiven :1; unsigned BSIM4v5wnsdGiven :1; unsigned BSIM4v5wphinGiven :1; unsigned BSIM4v5wngateGiven :1; unsigned BSIM4v5wgamma1Given :1; unsigned BSIM4v5wgamma2Given :1; unsigned BSIM4v5wvbxGiven :1; unsigned BSIM4v5wvbmGiven :1; unsigned BSIM4v5wxtGiven :1; unsigned BSIM4v5wk1Given :1; unsigned BSIM4v5wkt1Given :1; unsigned BSIM4v5wkt1lGiven :1; unsigned BSIM4v5wkt2Given :1; unsigned BSIM4v5wk2Given :1; unsigned BSIM4v5wk3Given :1; unsigned BSIM4v5wk3bGiven :1; unsigned BSIM4v5ww0Given :1; unsigned BSIM4v5wdvtp0Given :1; unsigned BSIM4v5wdvtp1Given :1; unsigned BSIM4v5wlpe0Given :1; unsigned BSIM4v5wlpebGiven :1; unsigned BSIM4v5wdvt0Given :1; unsigned BSIM4v5wdvt1Given :1; unsigned BSIM4v5wdvt2Given :1; unsigned BSIM4v5wdvt0wGiven :1; unsigned BSIM4v5wdvt1wGiven :1; unsigned BSIM4v5wdvt2wGiven :1; unsigned BSIM4v5wdroutGiven :1; unsigned BSIM4v5wdsubGiven :1; unsigned BSIM4v5wvth0Given :1; unsigned BSIM4v5wuaGiven :1; unsigned BSIM4v5wua1Given :1; unsigned BSIM4v5wubGiven :1; unsigned BSIM4v5wub1Given :1; unsigned BSIM4v5wucGiven :1; unsigned BSIM4v5wuc1Given :1; unsigned BSIM4v5wudGiven :1; unsigned BSIM4v5wud1Given :1; unsigned BSIM4v5wupGiven :1; unsigned BSIM4v5wlpGiven :1; unsigned BSIM4v5wu0Given :1; unsigned BSIM4v5weuGiven :1; unsigned BSIM4v5wuteGiven :1; unsigned BSIM4v5wvoffGiven :1; unsigned BSIM4v5wtvoffGiven :1; unsigned BSIM4v5wminvGiven :1; unsigned BSIM4v5wrdswGiven :1; unsigned BSIM4v5wrswGiven :1; unsigned BSIM4v5wrdwGiven :1; unsigned BSIM4v5wprwgGiven :1; unsigned BSIM4v5wprwbGiven :1; unsigned BSIM4v5wprtGiven :1; unsigned BSIM4v5weta0Given :1; unsigned BSIM4v5wetabGiven :1; unsigned BSIM4v5wpclmGiven :1; unsigned BSIM4v5wpdibl1Given :1; unsigned BSIM4v5wpdibl2Given :1; unsigned BSIM4v5wpdiblbGiven :1; unsigned BSIM4v5wfproutGiven :1; unsigned BSIM4v5wpditsGiven :1; unsigned BSIM4v5wpditsdGiven :1; unsigned BSIM4v5wpscbe1Given :1; unsigned BSIM4v5wpscbe2Given :1; unsigned BSIM4v5wpvagGiven :1; unsigned BSIM4v5wdeltaGiven :1; unsigned BSIM4v5wwrGiven :1; unsigned BSIM4v5wdwgGiven :1; unsigned BSIM4v5wdwbGiven :1; unsigned BSIM4v5wb0Given :1; unsigned BSIM4v5wb1Given :1; unsigned BSIM4v5walpha0Given :1; unsigned BSIM4v5walpha1Given :1; unsigned BSIM4v5wbeta0Given :1; unsigned BSIM4v5wvfbGiven :1; unsigned BSIM4v5wagidlGiven :1; unsigned BSIM4v5wbgidlGiven :1; unsigned BSIM4v5wcgidlGiven :1; unsigned BSIM4v5wegidlGiven :1; unsigned BSIM4v5waigcGiven :1; unsigned BSIM4v5wbigcGiven :1; unsigned BSIM4v5wcigcGiven :1; unsigned BSIM4v5waigsdGiven :1; unsigned BSIM4v5wbigsdGiven :1; unsigned BSIM4v5wcigsdGiven :1; unsigned BSIM4v5waigbaccGiven :1; unsigned BSIM4v5wbigbaccGiven :1; unsigned BSIM4v5wcigbaccGiven :1; unsigned BSIM4v5waigbinvGiven :1; unsigned BSIM4v5wbigbinvGiven :1; unsigned BSIM4v5wcigbinvGiven :1; unsigned BSIM4v5wnigcGiven :1; unsigned BSIM4v5wnigbinvGiven :1; unsigned BSIM4v5wnigbaccGiven :1; unsigned BSIM4v5wntoxGiven :1; unsigned BSIM4v5weigbinvGiven :1; unsigned BSIM4v5wpigcdGiven :1; unsigned BSIM4v5wpoxedgeGiven :1; unsigned BSIM4v5wxrcrg1Given :1; unsigned BSIM4v5wxrcrg2Given :1; unsigned BSIM4v5wlambdaGiven :1; unsigned BSIM4v5wvtlGiven :1; unsigned BSIM4v5wxnGiven :1; unsigned BSIM4v5wvfbsdoffGiven :1; unsigned BSIM4v5wtvfbsdoffGiven :1; /* CV model */ unsigned BSIM4v5wcgslGiven :1; unsigned BSIM4v5wcgdlGiven :1; unsigned BSIM4v5wckappasGiven :1; unsigned BSIM4v5wckappadGiven :1; unsigned BSIM4v5wcfGiven :1; unsigned BSIM4v5wclcGiven :1; unsigned BSIM4v5wcleGiven :1; unsigned BSIM4v5wvfbcvGiven :1; unsigned BSIM4v5wnoffGiven :1; unsigned BSIM4v5wvoffcvGiven :1; unsigned BSIM4v5wacdeGiven :1; unsigned BSIM4v5wmoinGiven :1; /* Cross-term dependence */ unsigned BSIM4v5pcdscGiven :1; unsigned BSIM4v5pcdscbGiven :1; unsigned BSIM4v5pcdscdGiven :1; unsigned BSIM4v5pcitGiven :1; unsigned BSIM4v5pnfactorGiven :1; unsigned BSIM4v5pxjGiven :1; unsigned BSIM4v5pvsatGiven :1; unsigned BSIM4v5patGiven :1; unsigned BSIM4v5pa0Given :1; unsigned BSIM4v5pagsGiven :1; unsigned BSIM4v5pa1Given :1; unsigned BSIM4v5pa2Given :1; unsigned BSIM4v5pketaGiven :1; unsigned BSIM4v5pnsubGiven :1; unsigned BSIM4v5pndepGiven :1; unsigned BSIM4v5pnsdGiven :1; unsigned BSIM4v5pphinGiven :1; unsigned BSIM4v5pngateGiven :1; unsigned BSIM4v5pgamma1Given :1; unsigned BSIM4v5pgamma2Given :1; unsigned BSIM4v5pvbxGiven :1; unsigned BSIM4v5pvbmGiven :1; unsigned BSIM4v5pxtGiven :1; unsigned BSIM4v5pk1Given :1; unsigned BSIM4v5pkt1Given :1; unsigned BSIM4v5pkt1lGiven :1; unsigned BSIM4v5pkt2Given :1; unsigned BSIM4v5pk2Given :1; unsigned BSIM4v5pk3Given :1; unsigned BSIM4v5pk3bGiven :1; unsigned BSIM4v5pw0Given :1; unsigned BSIM4v5pdvtp0Given :1; unsigned BSIM4v5pdvtp1Given :1; unsigned BSIM4v5plpe0Given :1; unsigned BSIM4v5plpebGiven :1; unsigned BSIM4v5pdvt0Given :1; unsigned BSIM4v5pdvt1Given :1; unsigned BSIM4v5pdvt2Given :1; unsigned BSIM4v5pdvt0wGiven :1; unsigned BSIM4v5pdvt1wGiven :1; unsigned BSIM4v5pdvt2wGiven :1; unsigned BSIM4v5pdroutGiven :1; unsigned BSIM4v5pdsubGiven :1; unsigned BSIM4v5pvth0Given :1; unsigned BSIM4v5puaGiven :1; unsigned BSIM4v5pua1Given :1; unsigned BSIM4v5pubGiven :1; unsigned BSIM4v5pub1Given :1; unsigned BSIM4v5pucGiven :1; unsigned BSIM4v5puc1Given :1; unsigned BSIM4v5pudGiven :1; unsigned BSIM4v5pud1Given :1; unsigned BSIM4v5pupGiven :1; unsigned BSIM4v5plpGiven :1; unsigned BSIM4v5pu0Given :1; unsigned BSIM4v5peuGiven :1; unsigned BSIM4v5puteGiven :1; unsigned BSIM4v5pvoffGiven :1; unsigned BSIM4v5ptvoffGiven :1; unsigned BSIM4v5pminvGiven :1; unsigned BSIM4v5prdswGiven :1; unsigned BSIM4v5prswGiven :1; unsigned BSIM4v5prdwGiven :1; unsigned BSIM4v5pprwgGiven :1; unsigned BSIM4v5pprwbGiven :1; unsigned BSIM4v5pprtGiven :1; unsigned BSIM4v5peta0Given :1; unsigned BSIM4v5petabGiven :1; unsigned BSIM4v5ppclmGiven :1; unsigned BSIM4v5ppdibl1Given :1; unsigned BSIM4v5ppdibl2Given :1; unsigned BSIM4v5ppdiblbGiven :1; unsigned BSIM4v5pfproutGiven :1; unsigned BSIM4v5ppditsGiven :1; unsigned BSIM4v5ppditsdGiven :1; unsigned BSIM4v5ppscbe1Given :1; unsigned BSIM4v5ppscbe2Given :1; unsigned BSIM4v5ppvagGiven :1; unsigned BSIM4v5pdeltaGiven :1; unsigned BSIM4v5pwrGiven :1; unsigned BSIM4v5pdwgGiven :1; unsigned BSIM4v5pdwbGiven :1; unsigned BSIM4v5pb0Given :1; unsigned BSIM4v5pb1Given :1; unsigned BSIM4v5palpha0Given :1; unsigned BSIM4v5palpha1Given :1; unsigned BSIM4v5pbeta0Given :1; unsigned BSIM4v5pvfbGiven :1; unsigned BSIM4v5pagidlGiven :1; unsigned BSIM4v5pbgidlGiven :1; unsigned BSIM4v5pcgidlGiven :1; unsigned BSIM4v5pegidlGiven :1; unsigned BSIM4v5paigcGiven :1; unsigned BSIM4v5pbigcGiven :1; unsigned BSIM4v5pcigcGiven :1; unsigned BSIM4v5paigsdGiven :1; unsigned BSIM4v5pbigsdGiven :1; unsigned BSIM4v5pcigsdGiven :1; unsigned BSIM4v5paigbaccGiven :1; unsigned BSIM4v5pbigbaccGiven :1; unsigned BSIM4v5pcigbaccGiven :1; unsigned BSIM4v5paigbinvGiven :1; unsigned BSIM4v5pbigbinvGiven :1; unsigned BSIM4v5pcigbinvGiven :1; unsigned BSIM4v5pnigcGiven :1; unsigned BSIM4v5pnigbinvGiven :1; unsigned BSIM4v5pnigbaccGiven :1; unsigned BSIM4v5pntoxGiven :1; unsigned BSIM4v5peigbinvGiven :1; unsigned BSIM4v5ppigcdGiven :1; unsigned BSIM4v5ppoxedgeGiven :1; unsigned BSIM4v5pxrcrg1Given :1; unsigned BSIM4v5pxrcrg2Given :1; unsigned BSIM4v5plambdaGiven :1; unsigned BSIM4v5pvtlGiven :1; unsigned BSIM4v5pxnGiven :1; unsigned BSIM4v5pvfbsdoffGiven :1; unsigned BSIM4v5ptvfbsdoffGiven :1; /* CV model */ unsigned BSIM4v5pcgslGiven :1; unsigned BSIM4v5pcgdlGiven :1; unsigned BSIM4v5pckappasGiven :1; unsigned BSIM4v5pckappadGiven :1; unsigned BSIM4v5pcfGiven :1; unsigned BSIM4v5pclcGiven :1; unsigned BSIM4v5pcleGiven :1; unsigned BSIM4v5pvfbcvGiven :1; unsigned BSIM4v5pnoffGiven :1; unsigned BSIM4v5pvoffcvGiven :1; unsigned BSIM4v5pacdeGiven :1; unsigned BSIM4v5pmoinGiven :1; unsigned BSIM4v5useFringeGiven :1; unsigned BSIM4v5tnomGiven :1; unsigned BSIM4v5cgsoGiven :1; unsigned BSIM4v5cgdoGiven :1; unsigned BSIM4v5cgboGiven :1; unsigned BSIM4v5xpartGiven :1; unsigned BSIM4v5sheetResistanceGiven :1; unsigned BSIM4v5SjctSatCurDensityGiven :1; unsigned BSIM4v5SjctSidewallSatCurDensityGiven :1; unsigned BSIM4v5SjctGateSidewallSatCurDensityGiven :1; unsigned BSIM4v5SbulkJctPotentialGiven :1; unsigned BSIM4v5SbulkJctBotGradingCoeffGiven :1; unsigned BSIM4v5SsidewallJctPotentialGiven :1; unsigned BSIM4v5SGatesidewallJctPotentialGiven :1; unsigned BSIM4v5SbulkJctSideGradingCoeffGiven :1; unsigned BSIM4v5SunitAreaJctCapGiven :1; unsigned BSIM4v5SunitLengthSidewallJctCapGiven :1; unsigned BSIM4v5SbulkJctGateSideGradingCoeffGiven :1; unsigned BSIM4v5SunitLengthGateSidewallJctCapGiven :1; unsigned BSIM4v5SjctEmissionCoeffGiven :1; unsigned BSIM4v5SjctTempExponentGiven :1; unsigned BSIM4v5DjctSatCurDensityGiven :1; unsigned BSIM4v5DjctSidewallSatCurDensityGiven :1; unsigned BSIM4v5DjctGateSidewallSatCurDensityGiven :1; unsigned BSIM4v5DbulkJctPotentialGiven :1; unsigned BSIM4v5DbulkJctBotGradingCoeffGiven :1; unsigned BSIM4v5DsidewallJctPotentialGiven :1; unsigned BSIM4v5DGatesidewallJctPotentialGiven :1; unsigned BSIM4v5DbulkJctSideGradingCoeffGiven :1; unsigned BSIM4v5DunitAreaJctCapGiven :1; unsigned BSIM4v5DunitLengthSidewallJctCapGiven :1; unsigned BSIM4v5DbulkJctGateSideGradingCoeffGiven :1; unsigned BSIM4v5DunitLengthGateSidewallJctCapGiven :1; unsigned BSIM4v5DjctEmissionCoeffGiven :1; unsigned BSIM4v5DjctTempExponentGiven :1; unsigned BSIM4v5oxideTrapDensityAGiven :1; unsigned BSIM4v5oxideTrapDensityBGiven :1; unsigned BSIM4v5oxideTrapDensityCGiven :1; unsigned BSIM4v5emGiven :1; unsigned BSIM4v5efGiven :1; unsigned BSIM4v5afGiven :1; unsigned BSIM4v5kfGiven :1; unsigned BSIM4v5vgsMaxGiven :1; unsigned BSIM4v5vgdMaxGiven :1; unsigned BSIM4v5vgbMaxGiven :1; unsigned BSIM4v5vdsMaxGiven :1; unsigned BSIM4v5vbsMaxGiven :1; unsigned BSIM4v5vbdMaxGiven :1; unsigned BSIM4v5vgsrMaxGiven :1; unsigned BSIM4v5vgdrMaxGiven :1; unsigned BSIM4v5vgbrMaxGiven :1; unsigned BSIM4v5vbsrMaxGiven :1; unsigned BSIM4v5vbdrMaxGiven :1; unsigned BSIM4v5LintGiven :1; unsigned BSIM4v5LlGiven :1; unsigned BSIM4v5LlcGiven :1; unsigned BSIM4v5LlnGiven :1; unsigned BSIM4v5LwGiven :1; unsigned BSIM4v5LwcGiven :1; unsigned BSIM4v5LwnGiven :1; unsigned BSIM4v5LwlGiven :1; unsigned BSIM4v5LwlcGiven :1; unsigned BSIM4v5LminGiven :1; unsigned BSIM4v5LmaxGiven :1; unsigned BSIM4v5WintGiven :1; unsigned BSIM4v5WlGiven :1; unsigned BSIM4v5WlcGiven :1; unsigned BSIM4v5WlnGiven :1; unsigned BSIM4v5WwGiven :1; unsigned BSIM4v5WwcGiven :1; unsigned BSIM4v5WwnGiven :1; unsigned BSIM4v5WwlGiven :1; unsigned BSIM4v5WwlcGiven :1; unsigned BSIM4v5WminGiven :1; unsigned BSIM4v5WmaxGiven :1; /* added for stress effect */ unsigned BSIM4v5sarefGiven :1; unsigned BSIM4v5sbrefGiven :1; unsigned BSIM4v5wlodGiven :1; unsigned BSIM4v5ku0Given :1; unsigned BSIM4v5kvsatGiven :1; unsigned BSIM4v5kvth0Given :1; unsigned BSIM4v5tku0Given :1; unsigned BSIM4v5llodku0Given :1; unsigned BSIM4v5wlodku0Given :1; unsigned BSIM4v5llodvthGiven :1; unsigned BSIM4v5wlodvthGiven :1; unsigned BSIM4v5lku0Given :1; unsigned BSIM4v5wku0Given :1; unsigned BSIM4v5pku0Given :1; unsigned BSIM4v5lkvth0Given :1; unsigned BSIM4v5wkvth0Given :1; unsigned BSIM4v5pkvth0Given :1; unsigned BSIM4v5stk2Given :1; unsigned BSIM4v5lodk2Given :1; unsigned BSIM4v5steta0Given :1; unsigned BSIM4v5lodeta0Given :1; unsigned BSIM4v5webGiven :1; unsigned BSIM4v5wecGiven :1; unsigned BSIM4v5kvth0weGiven :1; unsigned BSIM4v5k2weGiven :1; unsigned BSIM4v5ku0weGiven :1; unsigned BSIM4v5screfGiven :1; unsigned BSIM4v5wpemodGiven :1; unsigned BSIM4v5lkvth0weGiven :1; unsigned BSIM4v5lk2weGiven :1; unsigned BSIM4v5lku0weGiven :1; unsigned BSIM4v5wkvth0weGiven :1; unsigned BSIM4v5wk2weGiven :1; unsigned BSIM4v5wku0weGiven :1; unsigned BSIM4v5pkvth0weGiven :1; unsigned BSIM4v5pk2weGiven :1; unsigned BSIM4v5pku0weGiven :1; } BSIM4v5model; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ /* Instance parameters */ #define BSIM4v5_W 1 #define BSIM4v5_L 2 #define BSIM4v5_AS 3 #define BSIM4v5_AD 4 #define BSIM4v5_PS 5 #define BSIM4v5_PD 6 #define BSIM4v5_NRS 7 #define BSIM4v5_NRD 8 #define BSIM4v5_OFF 9 #define BSIM4v5_IC 10 #define BSIM4v5_IC_VDS 11 #define BSIM4v5_IC_VGS 12 #define BSIM4v5_IC_VBS 13 #define BSIM4v5_TRNQSMOD 14 #define BSIM4v5_RBODYMOD 15 #define BSIM4v5_RGATEMOD 16 #define BSIM4v5_GEOMOD 17 #define BSIM4v5_RGEOMOD 18 #define BSIM4v5_NF 19 #define BSIM4v5_MIN 20 #define BSIM4v5_ACNQSMOD 22 #define BSIM4v5_RBDB 23 #define BSIM4v5_RBSB 24 #define BSIM4v5_RBPB 25 #define BSIM4v5_RBPS 26 #define BSIM4v5_RBPD 27 #define BSIM4v5_SA 28 #define BSIM4v5_SB 29 #define BSIM4v5_SD 30 #define BSIM4v5_DELVTO 31 #define BSIM4v5_XGW 32 #define BSIM4v5_NGCON 33 #define BSIM4v5_SCA 34 #define BSIM4v5_SCB 35 #define BSIM4v5_SCC 36 #define BSIM4v5_SC 37 #define BSIM4v5_M 38 /* Global parameters */ #define BSIM4v5_MOD_TEMPMOD 89 #define BSIM4v5_MOD_IGCMOD 90 #define BSIM4v5_MOD_IGBMOD 91 #define BSIM4v5_MOD_ACNQSMOD 92 #define BSIM4v5_MOD_FNOIMOD 93 #define BSIM4v5_MOD_RDSMOD 94 #define BSIM4v5_MOD_DIOMOD 95 #define BSIM4v5_MOD_PERMOD 96 #define BSIM4v5_MOD_GEOMOD 97 #define BSIM4v5_MOD_RGEOMOD 98 #define BSIM4v5_MOD_RGATEMOD 99 #define BSIM4v5_MOD_RBODYMOD 100 #define BSIM4v5_MOD_CAPMOD 101 #define BSIM4v5_MOD_TRNQSMOD 102 #define BSIM4v5_MOD_MOBMOD 103 #define BSIM4v5_MOD_TNOIMOD 104 #define BSIM4v5_MOD_TOXE 105 #define BSIM4v5_MOD_CDSC 106 #define BSIM4v5_MOD_CDSCB 107 #define BSIM4v5_MOD_CIT 108 #define BSIM4v5_MOD_NFACTOR 109 #define BSIM4v5_MOD_XJ 110 #define BSIM4v5_MOD_VSAT 111 #define BSIM4v5_MOD_AT 112 #define BSIM4v5_MOD_A0 113 #define BSIM4v5_MOD_A1 114 #define BSIM4v5_MOD_A2 115 #define BSIM4v5_MOD_KETA 116 #define BSIM4v5_MOD_NSUB 117 #define BSIM4v5_MOD_NDEP 118 #define BSIM4v5_MOD_NGATE 120 #define BSIM4v5_MOD_GAMMA1 121 #define BSIM4v5_MOD_GAMMA2 122 #define BSIM4v5_MOD_VBX 123 #define BSIM4v5_MOD_BINUNIT 124 #define BSIM4v5_MOD_VBM 125 #define BSIM4v5_MOD_XT 126 #define BSIM4v5_MOD_K1 129 #define BSIM4v5_MOD_KT1 130 #define BSIM4v5_MOD_KT1L 131 #define BSIM4v5_MOD_K2 132 #define BSIM4v5_MOD_KT2 133 #define BSIM4v5_MOD_K3 134 #define BSIM4v5_MOD_K3B 135 #define BSIM4v5_MOD_W0 136 #define BSIM4v5_MOD_LPE0 137 #define BSIM4v5_MOD_DVT0 138 #define BSIM4v5_MOD_DVT1 139 #define BSIM4v5_MOD_DVT2 140 #define BSIM4v5_MOD_DVT0W 141 #define BSIM4v5_MOD_DVT1W 142 #define BSIM4v5_MOD_DVT2W 143 #define BSIM4v5_MOD_DROUT 144 #define BSIM4v5_MOD_DSUB 145 #define BSIM4v5_MOD_VTH0 146 #define BSIM4v5_MOD_UA 147 #define BSIM4v5_MOD_UA1 148 #define BSIM4v5_MOD_UB 149 #define BSIM4v5_MOD_UB1 150 #define BSIM4v5_MOD_UC 151 #define BSIM4v5_MOD_UC1 152 #define BSIM4v5_MOD_U0 153 #define BSIM4v5_MOD_UTE 154 #define BSIM4v5_MOD_VOFF 155 #define BSIM4v5_MOD_DELTA 156 #define BSIM4v5_MOD_RDSW 157 #define BSIM4v5_MOD_PRT 158 #define BSIM4v5_MOD_LDD 159 #define BSIM4v5_MOD_ETA 160 #define BSIM4v5_MOD_ETA0 161 #define BSIM4v5_MOD_ETAB 162 #define BSIM4v5_MOD_PCLM 163 #define BSIM4v5_MOD_PDIBL1 164 #define BSIM4v5_MOD_PDIBL2 165 #define BSIM4v5_MOD_PSCBE1 166 #define BSIM4v5_MOD_PSCBE2 167 #define BSIM4v5_MOD_PVAG 168 #define BSIM4v5_MOD_WR 169 #define BSIM4v5_MOD_DWG 170 #define BSIM4v5_MOD_DWB 171 #define BSIM4v5_MOD_B0 172 #define BSIM4v5_MOD_B1 173 #define BSIM4v5_MOD_ALPHA0 174 #define BSIM4v5_MOD_BETA0 175 #define BSIM4v5_MOD_PDIBLB 178 #define BSIM4v5_MOD_PRWG 179 #define BSIM4v5_MOD_PRWB 180 #define BSIM4v5_MOD_CDSCD 181 #define BSIM4v5_MOD_AGS 182 #define BSIM4v5_MOD_FRINGE 184 #define BSIM4v5_MOD_CGSL 186 #define BSIM4v5_MOD_CGDL 187 #define BSIM4v5_MOD_CKAPPAS 188 #define BSIM4v5_MOD_CF 189 #define BSIM4v5_MOD_CLC 190 #define BSIM4v5_MOD_CLE 191 #define BSIM4v5_MOD_PARAMCHK 192 #define BSIM4v5_MOD_VERSION 193 #define BSIM4v5_MOD_VFBCV 194 #define BSIM4v5_MOD_ACDE 195 #define BSIM4v5_MOD_MOIN 196 #define BSIM4v5_MOD_NOFF 197 #define BSIM4v5_MOD_IJTHDFWD 198 #define BSIM4v5_MOD_ALPHA1 199 #define BSIM4v5_MOD_VFB 200 #define BSIM4v5_MOD_TOXM 201 #define BSIM4v5_MOD_TCJ 202 #define BSIM4v5_MOD_TCJSW 203 #define BSIM4v5_MOD_TCJSWG 204 #define BSIM4v5_MOD_TPB 205 #define BSIM4v5_MOD_TPBSW 206 #define BSIM4v5_MOD_TPBSWG 207 #define BSIM4v5_MOD_VOFFCV 208 #define BSIM4v5_MOD_GBMIN 209 #define BSIM4v5_MOD_RBDB 210 #define BSIM4v5_MOD_RBSB 211 #define BSIM4v5_MOD_RBPB 212 #define BSIM4v5_MOD_RBPS 213 #define BSIM4v5_MOD_RBPD 214 #define BSIM4v5_MOD_DMCG 215 #define BSIM4v5_MOD_DMCI 216 #define BSIM4v5_MOD_DMDG 217 #define BSIM4v5_MOD_XGW 218 #define BSIM4v5_MOD_XGL 219 #define BSIM4v5_MOD_RSHG 220 #define BSIM4v5_MOD_NGCON 221 #define BSIM4v5_MOD_AGIDL 222 #define BSIM4v5_MOD_BGIDL 223 #define BSIM4v5_MOD_EGIDL 224 #define BSIM4v5_MOD_IJTHSFWD 225 #define BSIM4v5_MOD_XJBVD 226 #define BSIM4v5_MOD_XJBVS 227 #define BSIM4v5_MOD_BVD 228 #define BSIM4v5_MOD_BVS 229 #define BSIM4v5_MOD_TOXP 230 #define BSIM4v5_MOD_DTOX 231 #define BSIM4v5_MOD_XRCRG1 232 #define BSIM4v5_MOD_XRCRG2 233 #define BSIM4v5_MOD_EU 234 #define BSIM4v5_MOD_IJTHSREV 235 #define BSIM4v5_MOD_IJTHDREV 236 #define BSIM4v5_MOD_MINV 237 #define BSIM4v5_MOD_VOFFL 238 #define BSIM4v5_MOD_PDITS 239 #define BSIM4v5_MOD_PDITSD 240 #define BSIM4v5_MOD_PDITSL 241 #define BSIM4v5_MOD_TNOIA 242 #define BSIM4v5_MOD_TNOIB 243 #define BSIM4v5_MOD_NTNOI 244 #define BSIM4v5_MOD_FPROUT 245 #define BSIM4v5_MOD_LPEB 246 #define BSIM4v5_MOD_DVTP0 247 #define BSIM4v5_MOD_DVTP1 248 #define BSIM4v5_MOD_CGIDL 249 #define BSIM4v5_MOD_PHIN 250 #define BSIM4v5_MOD_RDSWMIN 251 #define BSIM4v5_MOD_RSW 252 #define BSIM4v5_MOD_RDW 253 #define BSIM4v5_MOD_RDWMIN 254 #define BSIM4v5_MOD_RSWMIN 255 #define BSIM4v5_MOD_NSD 256 #define BSIM4v5_MOD_CKAPPAD 257 #define BSIM4v5_MOD_DMCGT 258 #define BSIM4v5_MOD_AIGC 259 #define BSIM4v5_MOD_BIGC 260 #define BSIM4v5_MOD_CIGC 261 #define BSIM4v5_MOD_AIGBACC 262 #define BSIM4v5_MOD_BIGBACC 263 #define BSIM4v5_MOD_CIGBACC 264 #define BSIM4v5_MOD_AIGBINV 265 #define BSIM4v5_MOD_BIGBINV 266 #define BSIM4v5_MOD_CIGBINV 267 #define BSIM4v5_MOD_NIGC 268 #define BSIM4v5_MOD_NIGBACC 269 #define BSIM4v5_MOD_NIGBINV 270 #define BSIM4v5_MOD_NTOX 271 #define BSIM4v5_MOD_TOXREF 272 #define BSIM4v5_MOD_EIGBINV 273 #define BSIM4v5_MOD_PIGCD 274 #define BSIM4v5_MOD_POXEDGE 275 #define BSIM4v5_MOD_EPSROX 276 #define BSIM4v5_MOD_AIGSD 277 #define BSIM4v5_MOD_BIGSD 278 #define BSIM4v5_MOD_CIGSD 279 #define BSIM4v5_MOD_JSWGS 280 #define BSIM4v5_MOD_JSWGD 281 #define BSIM4v5_MOD_LAMBDA 282 #define BSIM4v5_MOD_VTL 283 #define BSIM4v5_MOD_LC 284 #define BSIM4v5_MOD_XN 285 #define BSIM4v5_MOD_RNOIA 286 #define BSIM4v5_MOD_RNOIB 287 #define BSIM4v5_MOD_VFBSDOFF 288 #define BSIM4v5_MOD_LINTNOI 289 #define BSIM4v5_MOD_UD 290 #define BSIM4v5_MOD_UD1 291 #define BSIM4v5_MOD_UP 292 #define BSIM4v5_MOD_LP 293 #define BSIM4v5_MOD_TVOFF 294 #define BSIM4v5_MOD_TVFBSDOFF 295 /* Length dependence */ #define BSIM4v5_MOD_LCDSC 301 #define BSIM4v5_MOD_LCDSCB 302 #define BSIM4v5_MOD_LCIT 303 #define BSIM4v5_MOD_LNFACTOR 304 #define BSIM4v5_MOD_LXJ 305 #define BSIM4v5_MOD_LVSAT 306 #define BSIM4v5_MOD_LAT 307 #define BSIM4v5_MOD_LA0 308 #define BSIM4v5_MOD_LA1 309 #define BSIM4v5_MOD_LA2 310 #define BSIM4v5_MOD_LKETA 311 #define BSIM4v5_MOD_LNSUB 312 #define BSIM4v5_MOD_LNDEP 313 #define BSIM4v5_MOD_LNGATE 315 #define BSIM4v5_MOD_LGAMMA1 316 #define BSIM4v5_MOD_LGAMMA2 317 #define BSIM4v5_MOD_LVBX 318 #define BSIM4v5_MOD_LVBM 320 #define BSIM4v5_MOD_LXT 322 #define BSIM4v5_MOD_LK1 325 #define BSIM4v5_MOD_LKT1 326 #define BSIM4v5_MOD_LKT1L 327 #define BSIM4v5_MOD_LK2 328 #define BSIM4v5_MOD_LKT2 329 #define BSIM4v5_MOD_LK3 330 #define BSIM4v5_MOD_LK3B 331 #define BSIM4v5_MOD_LW0 332 #define BSIM4v5_MOD_LLPE0 333 #define BSIM4v5_MOD_LDVT0 334 #define BSIM4v5_MOD_LDVT1 335 #define BSIM4v5_MOD_LDVT2 336 #define BSIM4v5_MOD_LDVT0W 337 #define BSIM4v5_MOD_LDVT1W 338 #define BSIM4v5_MOD_LDVT2W 339 #define BSIM4v5_MOD_LDROUT 340 #define BSIM4v5_MOD_LDSUB 341 #define BSIM4v5_MOD_LVTH0 342 #define BSIM4v5_MOD_LUA 343 #define BSIM4v5_MOD_LUA1 344 #define BSIM4v5_MOD_LUB 345 #define BSIM4v5_MOD_LUB1 346 #define BSIM4v5_MOD_LUC 347 #define BSIM4v5_MOD_LUC1 348 #define BSIM4v5_MOD_LU0 349 #define BSIM4v5_MOD_LUTE 350 #define BSIM4v5_MOD_LVOFF 351 #define BSIM4v5_MOD_LDELTA 352 #define BSIM4v5_MOD_LRDSW 353 #define BSIM4v5_MOD_LPRT 354 #define BSIM4v5_MOD_LLDD 355 #define BSIM4v5_MOD_LETA 356 #define BSIM4v5_MOD_LETA0 357 #define BSIM4v5_MOD_LETAB 358 #define BSIM4v5_MOD_LPCLM 359 #define BSIM4v5_MOD_LPDIBL1 360 #define BSIM4v5_MOD_LPDIBL2 361 #define BSIM4v5_MOD_LPSCBE1 362 #define BSIM4v5_MOD_LPSCBE2 363 #define BSIM4v5_MOD_LPVAG 364 #define BSIM4v5_MOD_LWR 365 #define BSIM4v5_MOD_LDWG 366 #define BSIM4v5_MOD_LDWB 367 #define BSIM4v5_MOD_LB0 368 #define BSIM4v5_MOD_LB1 369 #define BSIM4v5_MOD_LALPHA0 370 #define BSIM4v5_MOD_LBETA0 371 #define BSIM4v5_MOD_LPDIBLB 374 #define BSIM4v5_MOD_LPRWG 375 #define BSIM4v5_MOD_LPRWB 376 #define BSIM4v5_MOD_LCDSCD 377 #define BSIM4v5_MOD_LAGS 378 #define BSIM4v5_MOD_LFRINGE 381 #define BSIM4v5_MOD_LCGSL 383 #define BSIM4v5_MOD_LCGDL 384 #define BSIM4v5_MOD_LCKAPPAS 385 #define BSIM4v5_MOD_LCF 386 #define BSIM4v5_MOD_LCLC 387 #define BSIM4v5_MOD_LCLE 388 #define BSIM4v5_MOD_LVFBCV 389 #define BSIM4v5_MOD_LACDE 390 #define BSIM4v5_MOD_LMOIN 391 #define BSIM4v5_MOD_LNOFF 392 #define BSIM4v5_MOD_LALPHA1 394 #define BSIM4v5_MOD_LVFB 395 #define BSIM4v5_MOD_LVOFFCV 396 #define BSIM4v5_MOD_LAGIDL 397 #define BSIM4v5_MOD_LBGIDL 398 #define BSIM4v5_MOD_LEGIDL 399 #define BSIM4v5_MOD_LXRCRG1 400 #define BSIM4v5_MOD_LXRCRG2 401 #define BSIM4v5_MOD_LEU 402 #define BSIM4v5_MOD_LMINV 403 #define BSIM4v5_MOD_LPDITS 404 #define BSIM4v5_MOD_LPDITSD 405 #define BSIM4v5_MOD_LFPROUT 406 #define BSIM4v5_MOD_LLPEB 407 #define BSIM4v5_MOD_LDVTP0 408 #define BSIM4v5_MOD_LDVTP1 409 #define BSIM4v5_MOD_LCGIDL 410 #define BSIM4v5_MOD_LPHIN 411 #define BSIM4v5_MOD_LRSW 412 #define BSIM4v5_MOD_LRDW 413 #define BSIM4v5_MOD_LNSD 414 #define BSIM4v5_MOD_LCKAPPAD 415 #define BSIM4v5_MOD_LAIGC 416 #define BSIM4v5_MOD_LBIGC 417 #define BSIM4v5_MOD_LCIGC 418 #define BSIM4v5_MOD_LAIGBACC 419 #define BSIM4v5_MOD_LBIGBACC 420 #define BSIM4v5_MOD_LCIGBACC 421 #define BSIM4v5_MOD_LAIGBINV 422 #define BSIM4v5_MOD_LBIGBINV 423 #define BSIM4v5_MOD_LCIGBINV 424 #define BSIM4v5_MOD_LNIGC 425 #define BSIM4v5_MOD_LNIGBACC 426 #define BSIM4v5_MOD_LNIGBINV 427 #define BSIM4v5_MOD_LNTOX 428 #define BSIM4v5_MOD_LEIGBINV 429 #define BSIM4v5_MOD_LPIGCD 430 #define BSIM4v5_MOD_LPOXEDGE 431 #define BSIM4v5_MOD_LAIGSD 432 #define BSIM4v5_MOD_LBIGSD 433 #define BSIM4v5_MOD_LCIGSD 434 #define BSIM4v5_MOD_LLAMBDA 435 #define BSIM4v5_MOD_LVTL 436 #define BSIM4v5_MOD_LXN 437 #define BSIM4v5_MOD_LVFBSDOFF 438 #define BSIM4v5_MOD_LUD 439 #define BSIM4v5_MOD_LUD1 440 #define BSIM4v5_MOD_LUP 441 #define BSIM4v5_MOD_LLP 442 /* Width dependence */ #define BSIM4v5_MOD_WCDSC 481 #define BSIM4v5_MOD_WCDSCB 482 #define BSIM4v5_MOD_WCIT 483 #define BSIM4v5_MOD_WNFACTOR 484 #define BSIM4v5_MOD_WXJ 485 #define BSIM4v5_MOD_WVSAT 486 #define BSIM4v5_MOD_WAT 487 #define BSIM4v5_MOD_WA0 488 #define BSIM4v5_MOD_WA1 489 #define BSIM4v5_MOD_WA2 490 #define BSIM4v5_MOD_WKETA 491 #define BSIM4v5_MOD_WNSUB 492 #define BSIM4v5_MOD_WNDEP 493 #define BSIM4v5_MOD_WNGATE 495 #define BSIM4v5_MOD_WGAMMA1 496 #define BSIM4v5_MOD_WGAMMA2 497 #define BSIM4v5_MOD_WVBX 498 #define BSIM4v5_MOD_WVBM 500 #define BSIM4v5_MOD_WXT 502 #define BSIM4v5_MOD_WK1 505 #define BSIM4v5_MOD_WKT1 506 #define BSIM4v5_MOD_WKT1L 507 #define BSIM4v5_MOD_WK2 508 #define BSIM4v5_MOD_WKT2 509 #define BSIM4v5_MOD_WK3 510 #define BSIM4v5_MOD_WK3B 511 #define BSIM4v5_MOD_WW0 512 #define BSIM4v5_MOD_WLPE0 513 #define BSIM4v5_MOD_WDVT0 514 #define BSIM4v5_MOD_WDVT1 515 #define BSIM4v5_MOD_WDVT2 516 #define BSIM4v5_MOD_WDVT0W 517 #define BSIM4v5_MOD_WDVT1W 518 #define BSIM4v5_MOD_WDVT2W 519 #define BSIM4v5_MOD_WDROUT 520 #define BSIM4v5_MOD_WDSUB 521 #define BSIM4v5_MOD_WVTH0 522 #define BSIM4v5_MOD_WUA 523 #define BSIM4v5_MOD_WUA1 524 #define BSIM4v5_MOD_WUB 525 #define BSIM4v5_MOD_WUB1 526 #define BSIM4v5_MOD_WUC 527 #define BSIM4v5_MOD_WUC1 528 #define BSIM4v5_MOD_WU0 529 #define BSIM4v5_MOD_WUTE 530 #define BSIM4v5_MOD_WVOFF 531 #define BSIM4v5_MOD_WDELTA 532 #define BSIM4v5_MOD_WRDSW 533 #define BSIM4v5_MOD_WPRT 534 #define BSIM4v5_MOD_WLDD 535 #define BSIM4v5_MOD_WETA 536 #define BSIM4v5_MOD_WETA0 537 #define BSIM4v5_MOD_WETAB 538 #define BSIM4v5_MOD_WPCLM 539 #define BSIM4v5_MOD_WPDIBL1 540 #define BSIM4v5_MOD_WPDIBL2 541 #define BSIM4v5_MOD_WPSCBE1 542 #define BSIM4v5_MOD_WPSCBE2 543 #define BSIM4v5_MOD_WPVAG 544 #define BSIM4v5_MOD_WWR 545 #define BSIM4v5_MOD_WDWG 546 #define BSIM4v5_MOD_WDWB 547 #define BSIM4v5_MOD_WB0 548 #define BSIM4v5_MOD_WB1 549 #define BSIM4v5_MOD_WALPHA0 550 #define BSIM4v5_MOD_WBETA0 551 #define BSIM4v5_MOD_WPDIBLB 554 #define BSIM4v5_MOD_WPRWG 555 #define BSIM4v5_MOD_WPRWB 556 #define BSIM4v5_MOD_WCDSCD 557 #define BSIM4v5_MOD_WAGS 558 #define BSIM4v5_MOD_WFRINGE 561 #define BSIM4v5_MOD_WCGSL 563 #define BSIM4v5_MOD_WCGDL 564 #define BSIM4v5_MOD_WCKAPPAS 565 #define BSIM4v5_MOD_WCF 566 #define BSIM4v5_MOD_WCLC 567 #define BSIM4v5_MOD_WCLE 568 #define BSIM4v5_MOD_WVFBCV 569 #define BSIM4v5_MOD_WACDE 570 #define BSIM4v5_MOD_WMOIN 571 #define BSIM4v5_MOD_WNOFF 572 #define BSIM4v5_MOD_WALPHA1 574 #define BSIM4v5_MOD_WVFB 575 #define BSIM4v5_MOD_WVOFFCV 576 #define BSIM4v5_MOD_WAGIDL 577 #define BSIM4v5_MOD_WBGIDL 578 #define BSIM4v5_MOD_WEGIDL 579 #define BSIM4v5_MOD_WXRCRG1 580 #define BSIM4v5_MOD_WXRCRG2 581 #define BSIM4v5_MOD_WEU 582 #define BSIM4v5_MOD_WMINV 583 #define BSIM4v5_MOD_WPDITS 584 #define BSIM4v5_MOD_WPDITSD 585 #define BSIM4v5_MOD_WFPROUT 586 #define BSIM4v5_MOD_WLPEB 587 #define BSIM4v5_MOD_WDVTP0 588 #define BSIM4v5_MOD_WDVTP1 589 #define BSIM4v5_MOD_WCGIDL 590 #define BSIM4v5_MOD_WPHIN 591 #define BSIM4v5_MOD_WRSW 592 #define BSIM4v5_MOD_WRDW 593 #define BSIM4v5_MOD_WNSD 594 #define BSIM4v5_MOD_WCKAPPAD 595 #define BSIM4v5_MOD_WAIGC 596 #define BSIM4v5_MOD_WBIGC 597 #define BSIM4v5_MOD_WCIGC 598 #define BSIM4v5_MOD_WAIGBACC 599 #define BSIM4v5_MOD_WBIGBACC 600 #define BSIM4v5_MOD_WCIGBACC 601 #define BSIM4v5_MOD_WAIGBINV 602 #define BSIM4v5_MOD_WBIGBINV 603 #define BSIM4v5_MOD_WCIGBINV 604 #define BSIM4v5_MOD_WNIGC 605 #define BSIM4v5_MOD_WNIGBACC 606 #define BSIM4v5_MOD_WNIGBINV 607 #define BSIM4v5_MOD_WNTOX 608 #define BSIM4v5_MOD_WEIGBINV 609 #define BSIM4v5_MOD_WPIGCD 610 #define BSIM4v5_MOD_WPOXEDGE 611 #define BSIM4v5_MOD_WAIGSD 612 #define BSIM4v5_MOD_WBIGSD 613 #define BSIM4v5_MOD_WCIGSD 614 #define BSIM4v5_MOD_WLAMBDA 615 #define BSIM4v5_MOD_WVTL 616 #define BSIM4v5_MOD_WXN 617 #define BSIM4v5_MOD_WVFBSDOFF 618 #define BSIM4v5_MOD_WUD 619 #define BSIM4v5_MOD_WUD1 620 #define BSIM4v5_MOD_WUP 621 #define BSIM4v5_MOD_WLP 622 /* Cross-term dependence */ #define BSIM4v5_MOD_PCDSC 661 #define BSIM4v5_MOD_PCDSCB 662 #define BSIM4v5_MOD_PCIT 663 #define BSIM4v5_MOD_PNFACTOR 664 #define BSIM4v5_MOD_PXJ 665 #define BSIM4v5_MOD_PVSAT 666 #define BSIM4v5_MOD_PAT 667 #define BSIM4v5_MOD_PA0 668 #define BSIM4v5_MOD_PA1 669 #define BSIM4v5_MOD_PA2 670 #define BSIM4v5_MOD_PKETA 671 #define BSIM4v5_MOD_PNSUB 672 #define BSIM4v5_MOD_PNDEP 673 #define BSIM4v5_MOD_PNGATE 675 #define BSIM4v5_MOD_PGAMMA1 676 #define BSIM4v5_MOD_PGAMMA2 677 #define BSIM4v5_MOD_PVBX 678 #define BSIM4v5_MOD_PVBM 680 #define BSIM4v5_MOD_PXT 682 #define BSIM4v5_MOD_PK1 685 #define BSIM4v5_MOD_PKT1 686 #define BSIM4v5_MOD_PKT1L 687 #define BSIM4v5_MOD_PK2 688 #define BSIM4v5_MOD_PKT2 689 #define BSIM4v5_MOD_PK3 690 #define BSIM4v5_MOD_PK3B 691 #define BSIM4v5_MOD_PW0 692 #define BSIM4v5_MOD_PLPE0 693 #define BSIM4v5_MOD_PDVT0 694 #define BSIM4v5_MOD_PDVT1 695 #define BSIM4v5_MOD_PDVT2 696 #define BSIM4v5_MOD_PDVT0W 697 #define BSIM4v5_MOD_PDVT1W 698 #define BSIM4v5_MOD_PDVT2W 699 #define BSIM4v5_MOD_PDROUT 700 #define BSIM4v5_MOD_PDSUB 701 #define BSIM4v5_MOD_PVTH0 702 #define BSIM4v5_MOD_PUA 703 #define BSIM4v5_MOD_PUA1 704 #define BSIM4v5_MOD_PUB 705 #define BSIM4v5_MOD_PUB1 706 #define BSIM4v5_MOD_PUC 707 #define BSIM4v5_MOD_PUC1 708 #define BSIM4v5_MOD_PU0 709 #define BSIM4v5_MOD_PUTE 710 #define BSIM4v5_MOD_PVOFF 711 #define BSIM4v5_MOD_PDELTA 712 #define BSIM4v5_MOD_PRDSW 713 #define BSIM4v5_MOD_PPRT 714 #define BSIM4v5_MOD_PLDD 715 #define BSIM4v5_MOD_PETA 716 #define BSIM4v5_MOD_PETA0 717 #define BSIM4v5_MOD_PETAB 718 #define BSIM4v5_MOD_PPCLM 719 #define BSIM4v5_MOD_PPDIBL1 720 #define BSIM4v5_MOD_PPDIBL2 721 #define BSIM4v5_MOD_PPSCBE1 722 #define BSIM4v5_MOD_PPSCBE2 723 #define BSIM4v5_MOD_PPVAG 724 #define BSIM4v5_MOD_PWR 725 #define BSIM4v5_MOD_PDWG 726 #define BSIM4v5_MOD_PDWB 727 #define BSIM4v5_MOD_PB0 728 #define BSIM4v5_MOD_PB1 729 #define BSIM4v5_MOD_PALPHA0 730 #define BSIM4v5_MOD_PBETA0 731 #define BSIM4v5_MOD_PPDIBLB 734 #define BSIM4v5_MOD_PPRWG 735 #define BSIM4v5_MOD_PPRWB 736 #define BSIM4v5_MOD_PCDSCD 737 #define BSIM4v5_MOD_PAGS 738 #define BSIM4v5_MOD_PFRINGE 741 #define BSIM4v5_MOD_PCGSL 743 #define BSIM4v5_MOD_PCGDL 744 #define BSIM4v5_MOD_PCKAPPAS 745 #define BSIM4v5_MOD_PCF 746 #define BSIM4v5_MOD_PCLC 747 #define BSIM4v5_MOD_PCLE 748 #define BSIM4v5_MOD_PVFBCV 749 #define BSIM4v5_MOD_PACDE 750 #define BSIM4v5_MOD_PMOIN 751 #define BSIM4v5_MOD_PNOFF 752 #define BSIM4v5_MOD_PALPHA1 754 #define BSIM4v5_MOD_PVFB 755 #define BSIM4v5_MOD_PVOFFCV 756 #define BSIM4v5_MOD_PAGIDL 757 #define BSIM4v5_MOD_PBGIDL 758 #define BSIM4v5_MOD_PEGIDL 759 #define BSIM4v5_MOD_PXRCRG1 760 #define BSIM4v5_MOD_PXRCRG2 761 #define BSIM4v5_MOD_PEU 762 #define BSIM4v5_MOD_PMINV 763 #define BSIM4v5_MOD_PPDITS 764 #define BSIM4v5_MOD_PPDITSD 765 #define BSIM4v5_MOD_PFPROUT 766 #define BSIM4v5_MOD_PLPEB 767 #define BSIM4v5_MOD_PDVTP0 768 #define BSIM4v5_MOD_PDVTP1 769 #define BSIM4v5_MOD_PCGIDL 770 #define BSIM4v5_MOD_PPHIN 771 #define BSIM4v5_MOD_PRSW 772 #define BSIM4v5_MOD_PRDW 773 #define BSIM4v5_MOD_PNSD 774 #define BSIM4v5_MOD_PCKAPPAD 775 #define BSIM4v5_MOD_PAIGC 776 #define BSIM4v5_MOD_PBIGC 777 #define BSIM4v5_MOD_PCIGC 778 #define BSIM4v5_MOD_PAIGBACC 779 #define BSIM4v5_MOD_PBIGBACC 780 #define BSIM4v5_MOD_PCIGBACC 781 #define BSIM4v5_MOD_PAIGBINV 782 #define BSIM4v5_MOD_PBIGBINV 783 #define BSIM4v5_MOD_PCIGBINV 784 #define BSIM4v5_MOD_PNIGC 785 #define BSIM4v5_MOD_PNIGBACC 786 #define BSIM4v5_MOD_PNIGBINV 787 #define BSIM4v5_MOD_PNTOX 788 #define BSIM4v5_MOD_PEIGBINV 789 #define BSIM4v5_MOD_PPIGCD 790 #define BSIM4v5_MOD_PPOXEDGE 791 #define BSIM4v5_MOD_PAIGSD 792 #define BSIM4v5_MOD_PBIGSD 793 #define BSIM4v5_MOD_PCIGSD 794 #define BSIM4v5_MOD_SAREF 795 #define BSIM4v5_MOD_SBREF 796 #define BSIM4v5_MOD_KU0 797 #define BSIM4v5_MOD_KVSAT 798 #define BSIM4v5_MOD_TKU0 799 #define BSIM4v5_MOD_LLODKU0 800 #define BSIM4v5_MOD_WLODKU0 801 #define BSIM4v5_MOD_LLODVTH 802 #define BSIM4v5_MOD_WLODVTH 803 #define BSIM4v5_MOD_LKU0 804 #define BSIM4v5_MOD_WKU0 805 #define BSIM4v5_MOD_PKU0 806 #define BSIM4v5_MOD_KVTH0 807 #define BSIM4v5_MOD_LKVTH0 808 #define BSIM4v5_MOD_WKVTH0 809 #define BSIM4v5_MOD_PKVTH0 810 #define BSIM4v5_MOD_WLOD 811 #define BSIM4v5_MOD_STK2 812 #define BSIM4v5_MOD_LODK2 813 #define BSIM4v5_MOD_STETA0 814 #define BSIM4v5_MOD_LODETA0 815 #define BSIM4v5_MOD_WEB 816 #define BSIM4v5_MOD_WEC 817 #define BSIM4v5_MOD_KVTH0WE 818 #define BSIM4v5_MOD_K2WE 819 #define BSIM4v5_MOD_KU0WE 820 #define BSIM4v5_MOD_SCREF 821 #define BSIM4v5_MOD_WPEMOD 822 #define BSIM4v5_MOD_PLAMBDA 825 #define BSIM4v5_MOD_PVTL 826 #define BSIM4v5_MOD_PXN 827 #define BSIM4v5_MOD_PVFBSDOFF 828 #define BSIM4v5_MOD_TNOM 831 #define BSIM4v5_MOD_CGSO 832 #define BSIM4v5_MOD_CGDO 833 #define BSIM4v5_MOD_CGBO 834 #define BSIM4v5_MOD_XPART 835 #define BSIM4v5_MOD_RSH 836 #define BSIM4v5_MOD_JSS 837 #define BSIM4v5_MOD_PBS 838 #define BSIM4v5_MOD_MJS 839 #define BSIM4v5_MOD_PBSWS 840 #define BSIM4v5_MOD_MJSWS 841 #define BSIM4v5_MOD_CJS 842 #define BSIM4v5_MOD_CJSWS 843 #define BSIM4v5_MOD_NMOS 844 #define BSIM4v5_MOD_PMOS 845 #define BSIM4v5_MOD_NOIA 846 #define BSIM4v5_MOD_NOIB 847 #define BSIM4v5_MOD_NOIC 848 #define BSIM4v5_MOD_LINT 849 #define BSIM4v5_MOD_LL 850 #define BSIM4v5_MOD_LLN 851 #define BSIM4v5_MOD_LW 852 #define BSIM4v5_MOD_LWN 853 #define BSIM4v5_MOD_LWL 854 #define BSIM4v5_MOD_LMIN 855 #define BSIM4v5_MOD_LMAX 856 #define BSIM4v5_MOD_WINT 857 #define BSIM4v5_MOD_WL 858 #define BSIM4v5_MOD_WLN 859 #define BSIM4v5_MOD_WW 860 #define BSIM4v5_MOD_WWN 861 #define BSIM4v5_MOD_WWL 862 #define BSIM4v5_MOD_WMIN 863 #define BSIM4v5_MOD_WMAX 864 #define BSIM4v5_MOD_DWC 865 #define BSIM4v5_MOD_DLC 866 #define BSIM4v5_MOD_XL 867 #define BSIM4v5_MOD_XW 868 #define BSIM4v5_MOD_EM 869 #define BSIM4v5_MOD_EF 870 #define BSIM4v5_MOD_AF 871 #define BSIM4v5_MOD_KF 872 #define BSIM4v5_MOD_NJS 873 #define BSIM4v5_MOD_XTIS 874 #define BSIM4v5_MOD_PBSWGS 875 #define BSIM4v5_MOD_MJSWGS 876 #define BSIM4v5_MOD_CJSWGS 877 #define BSIM4v5_MOD_JSWS 878 #define BSIM4v5_MOD_LLC 879 #define BSIM4v5_MOD_LWC 880 #define BSIM4v5_MOD_LWLC 881 #define BSIM4v5_MOD_WLC 882 #define BSIM4v5_MOD_WWC 883 #define BSIM4v5_MOD_WWLC 884 #define BSIM4v5_MOD_DWJ 885 #define BSIM4v5_MOD_JSD 886 #define BSIM4v5_MOD_PBD 887 #define BSIM4v5_MOD_MJD 888 #define BSIM4v5_MOD_PBSWD 889 #define BSIM4v5_MOD_MJSWD 890 #define BSIM4v5_MOD_CJD 891 #define BSIM4v5_MOD_CJSWD 892 #define BSIM4v5_MOD_NJD 893 #define BSIM4v5_MOD_XTID 894 #define BSIM4v5_MOD_PBSWGD 895 #define BSIM4v5_MOD_MJSWGD 896 #define BSIM4v5_MOD_CJSWGD 897 #define BSIM4v5_MOD_JSWD 898 #define BSIM4v5_MOD_DLCIG 899 /* trap-assisted tunneling */ #define BSIM4v5_MOD_JTSS 900 #define BSIM4v5_MOD_JTSD 901 #define BSIM4v5_MOD_JTSSWS 902 #define BSIM4v5_MOD_JTSSWD 903 #define BSIM4v5_MOD_JTSSWGS 904 #define BSIM4v5_MOD_JTSSWGD 905 #define BSIM4v5_MOD_NJTS 906 #define BSIM4v5_MOD_NJTSSW 907 #define BSIM4v5_MOD_NJTSSWG 908 #define BSIM4v5_MOD_XTSS 909 #define BSIM4v5_MOD_XTSD 910 #define BSIM4v5_MOD_XTSSWS 911 #define BSIM4v5_MOD_XTSSWD 912 #define BSIM4v5_MOD_XTSSWGS 913 #define BSIM4v5_MOD_XTSSWGD 914 #define BSIM4v5_MOD_TNJTS 915 #define BSIM4v5_MOD_TNJTSSW 916 #define BSIM4v5_MOD_TNJTSSWG 917 #define BSIM4v5_MOD_VTSS 918 #define BSIM4v5_MOD_VTSD 919 #define BSIM4v5_MOD_VTSSWS 920 #define BSIM4v5_MOD_VTSSWD 921 #define BSIM4v5_MOD_VTSSWGS 922 #define BSIM4v5_MOD_VTSSWGD 923 #define BSIM4v5_MOD_PUD 924 #define BSIM4v5_MOD_PUD1 925 #define BSIM4v5_MOD_PUP 926 #define BSIM4v5_MOD_PLP 927 /* device questions */ #define BSIM4v5_DNODE 945 #define BSIM4v5_GNODEEXT 946 #define BSIM4v5_SNODE 947 #define BSIM4v5_BNODE 948 #define BSIM4v5_DNODEPRIME 949 #define BSIM4v5_GNODEPRIME 950 #define BSIM4v5_GNODEMIDE 951 #define BSIM4v5_GNODEMID 952 #define BSIM4v5_SNODEPRIME 953 #define BSIM4v5_BNODEPRIME 954 #define BSIM4v5_DBNODE 955 #define BSIM4v5_SBNODE 956 #define BSIM4v5_VBD 957 #define BSIM4v5_VBS 958 #define BSIM4v5_VGS 959 #define BSIM4v5_VDS 960 #define BSIM4v5_CD 961 #define BSIM4v5_CBS 962 #define BSIM4v5_CBD 963 #define BSIM4v5_GM 964 #define BSIM4v5_GDS 965 #define BSIM4v5_GMBS 966 #define BSIM4v5_GBD 967 #define BSIM4v5_GBS 968 #define BSIM4v5_QB 969 #define BSIM4v5_CQB 970 #define BSIM4v5_QG 971 #define BSIM4v5_CQG 972 #define BSIM4v5_QD 973 #define BSIM4v5_CQD 974 #define BSIM4v5_CGGB 975 #define BSIM4v5_CGDB 976 #define BSIM4v5_CGSB 977 #define BSIM4v5_CBGB 978 #define BSIM4v5_CAPBD 979 #define BSIM4v5_CQBD 980 #define BSIM4v5_CAPBS 981 #define BSIM4v5_CQBS 982 #define BSIM4v5_CDGB 983 #define BSIM4v5_CDDB 984 #define BSIM4v5_CDSB 985 #define BSIM4v5_VON 986 #define BSIM4v5_VDSAT 987 #define BSIM4v5_QBS 988 #define BSIM4v5_QBD 989 #define BSIM4v5_SOURCECONDUCT 990 #define BSIM4v5_DRAINCONDUCT 991 #define BSIM4v5_CBDB 992 #define BSIM4v5_CBSB 993 #define BSIM4v5_CSUB 994 #define BSIM4v5_QINV 995 #define BSIM4v5_IGIDL 996 #define BSIM4v5_CSGB 997 #define BSIM4v5_CSDB 998 #define BSIM4v5_CSSB 999 #define BSIM4v5_CGBB 1000 #define BSIM4v5_CDBB 1001 #define BSIM4v5_CSBB 1002 #define BSIM4v5_CBBB 1003 #define BSIM4v5_QS 1004 #define BSIM4v5_IGISL 1005 #define BSIM4v5_IGS 1006 #define BSIM4v5_IGD 1007 #define BSIM4v5_IGB 1008 #define BSIM4v5_IGCS 1009 #define BSIM4v5_IGCD 1010 #define BSIM4v5_QDEF 1011 #define BSIM4v5_DELVT0 1012 #define BSIM4v5_GCRG 1013 #define BSIM4v5_GTAU 1014 #define BSIM4v5_MOD_LTVOFF 1051 #define BSIM4v5_MOD_LTVFBSDOFF 1052 #define BSIM4v5_MOD_WTVOFF 1053 #define BSIM4v5_MOD_WTVFBSDOFF 1054 #define BSIM4v5_MOD_PTVOFF 1055 #define BSIM4v5_MOD_PTVFBSDOFF 1056 #define BSIM4v5_MOD_LKVTH0WE 1061 #define BSIM4v5_MOD_LK2WE 1062 #define BSIM4v5_MOD_LKU0WE 1063 #define BSIM4v5_MOD_WKVTH0WE 1064 #define BSIM4v5_MOD_WK2WE 1065 #define BSIM4v5_MOD_WKU0WE 1066 #define BSIM4v5_MOD_PKVTH0WE 1067 #define BSIM4v5_MOD_PK2WE 1068 #define BSIM4v5_MOD_PKU0WE 1069 #define BSIM4v5_MOD_RBPS0 1101 #define BSIM4v5_MOD_RBPSL 1102 #define BSIM4v5_MOD_RBPSW 1103 #define BSIM4v5_MOD_RBPSNF 1104 #define BSIM4v5_MOD_RBPD0 1105 #define BSIM4v5_MOD_RBPDL 1106 #define BSIM4v5_MOD_RBPDW 1107 #define BSIM4v5_MOD_RBPDNF 1108 #define BSIM4v5_MOD_RBPBX0 1109 #define BSIM4v5_MOD_RBPBXL 1110 #define BSIM4v5_MOD_RBPBXW 1111 #define BSIM4v5_MOD_RBPBXNF 1112 #define BSIM4v5_MOD_RBPBY0 1113 #define BSIM4v5_MOD_RBPBYL 1114 #define BSIM4v5_MOD_RBPBYW 1115 #define BSIM4v5_MOD_RBPBYNF 1116 #define BSIM4v5_MOD_RBSBX0 1117 #define BSIM4v5_MOD_RBSBY0 1118 #define BSIM4v5_MOD_RBDBX0 1119 #define BSIM4v5_MOD_RBDBY0 1120 #define BSIM4v5_MOD_RBSDBXL 1121 #define BSIM4v5_MOD_RBSDBXW 1122 #define BSIM4v5_MOD_RBSDBXNF 1123 #define BSIM4v5_MOD_RBSDBYL 1124 #define BSIM4v5_MOD_RBSDBYW 1125 #define BSIM4v5_MOD_RBSDBYNF 1126 #define BSIM4v5_MOD_VGS_MAX 1201 #define BSIM4v5_MOD_VGD_MAX 1202 #define BSIM4v5_MOD_VGB_MAX 1203 #define BSIM4v5_MOD_VDS_MAX 1204 #define BSIM4v5_MOD_VBS_MAX 1205 #define BSIM4v5_MOD_VBD_MAX 1206 #define BSIM4v5_MOD_VGSR_MAX 1207 #define BSIM4v5_MOD_VGDR_MAX 1208 #define BSIM4v5_MOD_VGBR_MAX 1209 #define BSIM4v5_MOD_VBSR_MAX 1210 #define BSIM4v5_MOD_VBDR_MAX 1211 #include "bsim4v5ext.h" extern void BSIM4v5evaluate(double,double,double,BSIM4v5instance*,BSIM4v5model*, double*,double*,double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, CKTcircuit*); extern int BSIM4v5debug(BSIM4v5model*, BSIM4v5instance*, CKTcircuit*, int); extern int BSIM4v5checkModel(BSIM4v5model*, BSIM4v5instance*, CKTcircuit*); extern int BSIM4v5PAeffGeo(double, int, int, double, double, double, double, double *, double *, double *, double *); extern int BSIM4v5RdseffGeo(double, int, int, int, double, double, double, double, double, int, double *); #endif /*BSIM4v5*/ tmpk8ny_4pz/src/spicelib/devices/bsim4v5/Makefile.am0000644000175000017500000000112413546075722022506 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libbsim4v5.la libbsim4v5_la_SOURCES = \ b4v5.c \ b4v5acld.c \ b4v5ask.c \ b4v5check.c \ b4v5cvtest.c \ b4v5geo.c \ b4v5getic.c \ b4v5ld.c \ b4v5mask.c \ b4v5mdel.c \ b4v5mpar.c \ b4v5noi.c \ b4v5par.c \ b4v5pzld.c \ b4v5set.c \ b4v5soachk.c \ b4v5temp.c \ b4v5trunc.c \ bsim4v5def.h \ bsim4v5ext.h \ bsim4v5init.c \ bsim4v5init.h \ bsim4v5itf.h AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in EXTRA_DIST = B4TERMS_OF_USE tmpk8ny_4pz/src/spicelib/devices/bsim4v5/b4v5mdel.c0000644000175000017500000000151513546075722022244 0ustar carstencarsten/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ /********** * Copyright 2005 Regents of the University of California. All rights reserved. * File: b4mdel.c of BSIM4.5.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Project Director: Prof. Chenming Hu. **********/ #include "ngspice/ngspice.h" #include "bsim4v5def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4v5mDelete(GENmodel *gen_model) { BSIM4v5model *model = (BSIM4v5model*) gen_model; #ifdef USE_OMP FREE(model->BSIM4v5InstanceArray); #endif struct bsim4v5SizeDependParam *p = model->pSizeDependParamKnot; while (p) { struct bsim4v5SizeDependParam *next_p = p->pNext; FREE(p); p = next_p; } FREE(model->BSIM4v5version); return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim4v5/b4v5set.c0000644000175000017500000025601313546075722022123 0ustar carstencarsten/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ /********** * Copyright 2005 Regents of the University of California. All rights reserved. * File: b4set.c of BSIM4.5.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. **********/ #include "ngspice/ngspice.h" #include "ngspice/jobdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "bsim4v5def.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #ifdef USE_OMP #include "ngspice/cpextern.h" #endif #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define EPS0 8.85418e-12 #define EPSSI 1.03594e-10 #define PI 3.141592654 #define Charge_q 1.60219e-19 int BSIM4v5setup( SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { BSIM4v5model *model = (BSIM4v5model*)inModel; BSIM4v5instance *here; int error; CKTnode *tmp; int noiseAnalGiven = 0, createNode; /* Criteria for new node creation */ double Rtot, DMCGeff, DMCIeff, DMDGeff; JOB *job; #ifdef USE_OMP int idx, InstCount; BSIM4v5instance **InstArray; #endif /* Search for a noise analysis request */ for (job = ft_curckt->ci_curTask->jobs; job; job = job->JOBnextJob) { if(strcmp(job->JOBname,"Noise Analysis")==0) { noiseAnalGiven = 1; break; } } /* loop through all the BSIM4v5 device models */ for( ; model != NULL; model = BSIM4v5nextModel(model)) { /* process defaults of model parameters */ if (!model->BSIM4v5typeGiven) model->BSIM4v5type = NMOS; if (!model->BSIM4v5mobModGiven) model->BSIM4v5mobMod = 0; else if ((model->BSIM4v5mobMod != 0) && (model->BSIM4v5mobMod != 1) && (model->BSIM4v5mobMod != 2)) { model->BSIM4v5mobMod = 0; printf("Warning: mobMod has been set to its default value: 0.\n"); } if (!model->BSIM4v5binUnitGiven) model->BSIM4v5binUnit = 1; if (!model->BSIM4v5paramChkGiven) model->BSIM4v5paramChk = 1; if (!model->BSIM4v5dioModGiven) model->BSIM4v5dioMod = 1; else if ((model->BSIM4v5dioMod != 0) && (model->BSIM4v5dioMod != 1) && (model->BSIM4v5dioMod != 2)) { model->BSIM4v5dioMod = 1; printf("Warning: dioMod has been set to its default value: 1.\n"); } if (!model->BSIM4v5capModGiven) model->BSIM4v5capMod = 2; else if ((model->BSIM4v5capMod != 0) && (model->BSIM4v5capMod != 1) && (model->BSIM4v5capMod != 2)) { model->BSIM4v5capMod = 2; printf("Warning: capMod has been set to its default value: 2.\n"); } if (!model->BSIM4v5rdsModGiven) model->BSIM4v5rdsMod = 0; else if ((model->BSIM4v5rdsMod != 0) && (model->BSIM4v5rdsMod != 1)) { model->BSIM4v5rdsMod = 0; printf("Warning: rdsMod has been set to its default value: 0.\n"); } if (!model->BSIM4v5rbodyModGiven) model->BSIM4v5rbodyMod = 0; else if ((model->BSIM4v5rbodyMod != 0) && (model->BSIM4v5rbodyMod != 1) && (model->BSIM4v5rbodyMod != 2)) { model->BSIM4v5rbodyMod = 0; printf("Warning: rbodyMod has been set to its default value: 0.\n"); } if (!model->BSIM4v5rgateModGiven) model->BSIM4v5rgateMod = 0; else if ((model->BSIM4v5rgateMod != 0) && (model->BSIM4v5rgateMod != 1) && (model->BSIM4v5rgateMod != 2) && (model->BSIM4v5rgateMod != 3)) { model->BSIM4v5rgateMod = 0; printf("Warning: rgateMod has been set to its default value: 0.\n"); } if (!model->BSIM4v5perModGiven) model->BSIM4v5perMod = 1; else if ((model->BSIM4v5perMod != 0) && (model->BSIM4v5perMod != 1)) { model->BSIM4v5perMod = 1; printf("Warning: perMod has been set to its default value: 1.\n"); } if (!model->BSIM4v5geoModGiven) model->BSIM4v5geoMod = 0; if (!model->BSIM4v5rgeoModGiven) model->BSIM4v5rgeoMod = 0; else if ((model->BSIM4v5rgeoMod != 0) && (model->BSIM4v5rgeoMod != 1)) { model->BSIM4v5rgeoMod = 1; printf("Warning: rgeoMod has been set to its default value: 1.\n"); } if (!model->BSIM4v5fnoiModGiven) model->BSIM4v5fnoiMod = 1; else if ((model->BSIM4v5fnoiMod != 0) && (model->BSIM4v5fnoiMod != 1)) { model->BSIM4v5fnoiMod = 1; printf("Warning: fnoiMod has been set to its default value: 1.\n"); } if (!model->BSIM4v5tnoiModGiven) model->BSIM4v5tnoiMod = 0; /* WDLiu: tnoiMod=1 needs to set internal S/D nodes */ else if ((model->BSIM4v5tnoiMod != 0) && (model->BSIM4v5tnoiMod != 1)) { model->BSIM4v5tnoiMod = 0; printf("Warning: tnoiMod has been set to its default value: 0.\n"); } if (!model->BSIM4v5trnqsModGiven) model->BSIM4v5trnqsMod = 0; else if ((model->BSIM4v5trnqsMod != 0) && (model->BSIM4v5trnqsMod != 1)) { model->BSIM4v5trnqsMod = 0; printf("Warning: trnqsMod has been set to its default value: 0.\n"); } if (!model->BSIM4v5acnqsModGiven) model->BSIM4v5acnqsMod = 0; else if ((model->BSIM4v5acnqsMod != 0) && (model->BSIM4v5acnqsMod != 1)) { model->BSIM4v5acnqsMod = 0; printf("Warning: acnqsMod has been set to its default value: 0.\n"); } if (!model->BSIM4v5igcModGiven) model->BSIM4v5igcMod = 0; else if ((model->BSIM4v5igcMod != 0) && (model->BSIM4v5igcMod != 1) && (model->BSIM4v5igcMod != 2)) { model->BSIM4v5igcMod = 0; printf("Warning: igcMod has been set to its default value: 0.\n"); } if (!model->BSIM4v5igbModGiven) model->BSIM4v5igbMod = 0; else if ((model->BSIM4v5igbMod != 0) && (model->BSIM4v5igbMod != 1)) { model->BSIM4v5igbMod = 0; printf("Warning: igbMod has been set to its default value: 0.\n"); } if (!model->BSIM4v5tempModGiven) model->BSIM4v5tempMod = 0; else if ((model->BSIM4v5tempMod != 0) && (model->BSIM4v5tempMod != 1) && (model->BSIM4v5tempMod != 2)) { model->BSIM4v5tempMod = 0; printf("Warning: tempMod has been set to its default value: 0.\n"); } if (!model->BSIM4v5versionGiven) model->BSIM4v5version = "4.5.0"; if (!model->BSIM4v5toxrefGiven) model->BSIM4v5toxref = 30.0e-10; if (!model->BSIM4v5toxeGiven) model->BSIM4v5toxe = 30.0e-10; if (!model->BSIM4v5toxpGiven) model->BSIM4v5toxp = model->BSIM4v5toxe; if (!model->BSIM4v5toxmGiven) model->BSIM4v5toxm = model->BSIM4v5toxe; if (!model->BSIM4v5dtoxGiven) model->BSIM4v5dtox = 0.0; if (!model->BSIM4v5epsroxGiven) model->BSIM4v5epsrox = 3.9; if (!model->BSIM4v5cdscGiven) model->BSIM4v5cdsc = 2.4e-4; /* unit Q/V/m^2 */ if (!model->BSIM4v5cdscbGiven) model->BSIM4v5cdscb = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM4v5cdscdGiven) model->BSIM4v5cdscd = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM4v5citGiven) model->BSIM4v5cit = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM4v5nfactorGiven) model->BSIM4v5nfactor = 1.0; if (!model->BSIM4v5xjGiven) model->BSIM4v5xj = .15e-6; if (!model->BSIM4v5vsatGiven) model->BSIM4v5vsat = 8.0e4; /* unit m/s */ if (!model->BSIM4v5atGiven) model->BSIM4v5at = 3.3e4; /* unit m/s */ if (!model->BSIM4v5a0Given) model->BSIM4v5a0 = 1.0; if (!model->BSIM4v5agsGiven) model->BSIM4v5ags = 0.0; if (!model->BSIM4v5a1Given) model->BSIM4v5a1 = 0.0; if (!model->BSIM4v5a2Given) model->BSIM4v5a2 = 1.0; if (!model->BSIM4v5ketaGiven) model->BSIM4v5keta = -0.047; /* unit / V */ if (!model->BSIM4v5nsubGiven) model->BSIM4v5nsub = 6.0e16; /* unit 1/cm3 */ if (!model->BSIM4v5ndepGiven) model->BSIM4v5ndep = 1.7e17; /* unit 1/cm3 */ if (!model->BSIM4v5nsdGiven) model->BSIM4v5nsd = 1.0e20; /* unit 1/cm3 */ if (!model->BSIM4v5phinGiven) model->BSIM4v5phin = 0.0; /* unit V */ if (!model->BSIM4v5ngateGiven) model->BSIM4v5ngate = 0; /* unit 1/cm3 */ if (!model->BSIM4v5vbmGiven) model->BSIM4v5vbm = -3.0; if (!model->BSIM4v5xtGiven) model->BSIM4v5xt = 1.55e-7; if (!model->BSIM4v5kt1Given) model->BSIM4v5kt1 = -0.11; /* unit V */ if (!model->BSIM4v5kt1lGiven) model->BSIM4v5kt1l = 0.0; /* unit V*m */ if (!model->BSIM4v5kt2Given) model->BSIM4v5kt2 = 0.022; /* No unit */ if (!model->BSIM4v5k3Given) model->BSIM4v5k3 = 80.0; if (!model->BSIM4v5k3bGiven) model->BSIM4v5k3b = 0.0; if (!model->BSIM4v5w0Given) model->BSIM4v5w0 = 2.5e-6; if (!model->BSIM4v5lpe0Given) model->BSIM4v5lpe0 = 1.74e-7; if (!model->BSIM4v5lpebGiven) model->BSIM4v5lpeb = 0.0; if (!model->BSIM4v5dvtp0Given) model->BSIM4v5dvtp0 = 0.0; if (!model->BSIM4v5dvtp1Given) model->BSIM4v5dvtp1 = 0.0; if (!model->BSIM4v5dvt0Given) model->BSIM4v5dvt0 = 2.2; if (!model->BSIM4v5dvt1Given) model->BSIM4v5dvt1 = 0.53; if (!model->BSIM4v5dvt2Given) model->BSIM4v5dvt2 = -0.032; /* unit 1 / V */ if (!model->BSIM4v5dvt0wGiven) model->BSIM4v5dvt0w = 0.0; if (!model->BSIM4v5dvt1wGiven) model->BSIM4v5dvt1w = 5.3e6; if (!model->BSIM4v5dvt2wGiven) model->BSIM4v5dvt2w = -0.032; if (!model->BSIM4v5droutGiven) model->BSIM4v5drout = 0.56; if (!model->BSIM4v5dsubGiven) model->BSIM4v5dsub = model->BSIM4v5drout; if (!model->BSIM4v5vth0Given) model->BSIM4v5vth0 = (model->BSIM4v5type == NMOS) ? 0.7 : -0.7; if (!model->BSIM4v5euGiven) model->BSIM4v5eu = (model->BSIM4v5type == NMOS) ? 1.67 : 1.0;; if (!model->BSIM4v5uaGiven) model->BSIM4v5ua = (model->BSIM4v5mobMod == 2) ? 1.0e-15 : 1.0e-9; /* unit m/V */ if (!model->BSIM4v5ua1Given) model->BSIM4v5ua1 = 1.0e-9; /* unit m/V */ if (!model->BSIM4v5ubGiven) model->BSIM4v5ub = 1.0e-19; /* unit (m/V)**2 */ if (!model->BSIM4v5ub1Given) model->BSIM4v5ub1 = -1.0e-18; /* unit (m/V)**2 */ if (!model->BSIM4v5ucGiven) model->BSIM4v5uc = (model->BSIM4v5mobMod == 1) ? -0.0465 : -0.0465e-9; if (!model->BSIM4v5uc1Given) model->BSIM4v5uc1 = (model->BSIM4v5mobMod == 1) ? -0.056 : -0.056e-9; if (!model->BSIM4v5udGiven) model->BSIM4v5ud = 1.0e14; /* unit m**(-2) */ if (!model->BSIM4v5ud1Given) model->BSIM4v5ud1 = 0.0; if (!model->BSIM4v5upGiven) model->BSIM4v5up = 0.0; if (!model->BSIM4v5lpGiven) model->BSIM4v5lp = 1.0e-8; if (!model->BSIM4v5u0Given) model->BSIM4v5u0 = (model->BSIM4v5type == NMOS) ? 0.067 : 0.025; if (!model->BSIM4v5uteGiven) model->BSIM4v5ute = -1.5; if (!model->BSIM4v5voffGiven) model->BSIM4v5voff = -0.08; if (!model->BSIM4v5vofflGiven) model->BSIM4v5voffl = 0.0; if (!model->BSIM4v5minvGiven) model->BSIM4v5minv = 0.0; if (!model->BSIM4v5fproutGiven) model->BSIM4v5fprout = 0.0; if (!model->BSIM4v5pditsGiven) model->BSIM4v5pdits = 0.0; if (!model->BSIM4v5pditsdGiven) model->BSIM4v5pditsd = 0.0; if (!model->BSIM4v5pditslGiven) model->BSIM4v5pditsl = 0.0; if (!model->BSIM4v5deltaGiven) model->BSIM4v5delta = 0.01; if (!model->BSIM4v5rdswminGiven) model->BSIM4v5rdswmin = 0.0; if (!model->BSIM4v5rdwminGiven) model->BSIM4v5rdwmin = 0.0; if (!model->BSIM4v5rswminGiven) model->BSIM4v5rswmin = 0.0; if (!model->BSIM4v5rdswGiven) model->BSIM4v5rdsw = 200.0; /* in ohm*um */ if (!model->BSIM4v5rdwGiven) model->BSIM4v5rdw = 100.0; if (!model->BSIM4v5rswGiven) model->BSIM4v5rsw = 100.0; if (!model->BSIM4v5prwgGiven) model->BSIM4v5prwg = 1.0; /* in 1/V */ if (!model->BSIM4v5prwbGiven) model->BSIM4v5prwb = 0.0; if (!model->BSIM4v5prtGiven) model->BSIM4v5prt = 0.0; if (!model->BSIM4v5eta0Given) model->BSIM4v5eta0 = 0.08; /* no unit */ if (!model->BSIM4v5etabGiven) model->BSIM4v5etab = -0.07; /* unit 1/V */ if (!model->BSIM4v5pclmGiven) model->BSIM4v5pclm = 1.3; /* no unit */ if (!model->BSIM4v5pdibl1Given) model->BSIM4v5pdibl1 = 0.39; /* no unit */ if (!model->BSIM4v5pdibl2Given) model->BSIM4v5pdibl2 = 0.0086; /* no unit */ if (!model->BSIM4v5pdiblbGiven) model->BSIM4v5pdiblb = 0.0; /* 1/V */ if (!model->BSIM4v5pscbe1Given) model->BSIM4v5pscbe1 = 4.24e8; if (!model->BSIM4v5pscbe2Given) model->BSIM4v5pscbe2 = 1.0e-5; if (!model->BSIM4v5pvagGiven) model->BSIM4v5pvag = 0.0; if (!model->BSIM4v5wrGiven) model->BSIM4v5wr = 1.0; if (!model->BSIM4v5dwgGiven) model->BSIM4v5dwg = 0.0; if (!model->BSIM4v5dwbGiven) model->BSIM4v5dwb = 0.0; if (!model->BSIM4v5b0Given) model->BSIM4v5b0 = 0.0; if (!model->BSIM4v5b1Given) model->BSIM4v5b1 = 0.0; if (!model->BSIM4v5alpha0Given) model->BSIM4v5alpha0 = 0.0; if (!model->BSIM4v5alpha1Given) model->BSIM4v5alpha1 = 0.0; if (!model->BSIM4v5beta0Given) model->BSIM4v5beta0 = 0.0; if (!model->BSIM4v5agidlGiven) model->BSIM4v5agidl = 0.0; if (!model->BSIM4v5bgidlGiven) model->BSIM4v5bgidl = 2.3e9; /* V/m */ if (!model->BSIM4v5cgidlGiven) model->BSIM4v5cgidl = 0.5; /* V^3 */ if (!model->BSIM4v5egidlGiven) model->BSIM4v5egidl = 0.8; /* V */ if (!model->BSIM4v5aigcGiven) model->BSIM4v5aigc = (model->BSIM4v5type == NMOS) ? 1.36e-2 : 9.80e-3; if (!model->BSIM4v5bigcGiven) model->BSIM4v5bigc = (model->BSIM4v5type == NMOS) ? 1.71e-3 : 7.59e-4; if (!model->BSIM4v5cigcGiven) model->BSIM4v5cigc = (model->BSIM4v5type == NMOS) ? 0.075 : 0.03; if (!model->BSIM4v5aigsdGiven) model->BSIM4v5aigsd = (model->BSIM4v5type == NMOS) ? 1.36e-2 : 9.80e-3; if (!model->BSIM4v5bigsdGiven) model->BSIM4v5bigsd = (model->BSIM4v5type == NMOS) ? 1.71e-3 : 7.59e-4; if (!model->BSIM4v5cigsdGiven) model->BSIM4v5cigsd = (model->BSIM4v5type == NMOS) ? 0.075 : 0.03; if (!model->BSIM4v5aigbaccGiven) model->BSIM4v5aigbacc = 1.36e-2; if (!model->BSIM4v5bigbaccGiven) model->BSIM4v5bigbacc = 1.71e-3; if (!model->BSIM4v5cigbaccGiven) model->BSIM4v5cigbacc = 0.075; if (!model->BSIM4v5aigbinvGiven) model->BSIM4v5aigbinv = 1.11e-2; if (!model->BSIM4v5bigbinvGiven) model->BSIM4v5bigbinv = 9.49e-4; if (!model->BSIM4v5cigbinvGiven) model->BSIM4v5cigbinv = 0.006; if (!model->BSIM4v5nigcGiven) model->BSIM4v5nigc = 1.0; if (!model->BSIM4v5nigbinvGiven) model->BSIM4v5nigbinv = 3.0; if (!model->BSIM4v5nigbaccGiven) model->BSIM4v5nigbacc = 1.0; if (!model->BSIM4v5ntoxGiven) model->BSIM4v5ntox = 1.0; if (!model->BSIM4v5eigbinvGiven) model->BSIM4v5eigbinv = 1.1; if (!model->BSIM4v5pigcdGiven) model->BSIM4v5pigcd = 1.0; if (!model->BSIM4v5poxedgeGiven) model->BSIM4v5poxedge = 1.0; if (!model->BSIM4v5xrcrg1Given) model->BSIM4v5xrcrg1 = 12.0; if (!model->BSIM4v5xrcrg2Given) model->BSIM4v5xrcrg2 = 1.0; if (!model->BSIM4v5ijthsfwdGiven) model->BSIM4v5ijthsfwd = 0.1; /* unit A */ if (!model->BSIM4v5ijthdfwdGiven) model->BSIM4v5ijthdfwd = model->BSIM4v5ijthsfwd; if (!model->BSIM4v5ijthsrevGiven) model->BSIM4v5ijthsrev = 0.1; /* unit A */ if (!model->BSIM4v5ijthdrevGiven) model->BSIM4v5ijthdrev = model->BSIM4v5ijthsrev; if (!model->BSIM4v5tnoiaGiven) model->BSIM4v5tnoia = 1.5; if (!model->BSIM4v5tnoibGiven) model->BSIM4v5tnoib = 3.5; if (!model->BSIM4v5rnoiaGiven) model->BSIM4v5rnoia = 0.577; if (!model->BSIM4v5rnoibGiven) model->BSIM4v5rnoib = 0.5164; if (!model->BSIM4v5ntnoiGiven) model->BSIM4v5ntnoi = 1.0; if (!model->BSIM4v5lambdaGiven) model->BSIM4v5lambda = 0.0; if (!model->BSIM4v5vtlGiven) model->BSIM4v5vtl = 2.0e5; /* unit m/s */ if (!model->BSIM4v5xnGiven) model->BSIM4v5xn = 3.0; if (!model->BSIM4v5lcGiven) model->BSIM4v5lc = 5.0e-9; if (!model->BSIM4v5vfbsdoffGiven) model->BSIM4v5vfbsdoff = 0.0; /* unit v */ if (!model->BSIM4v5tvfbsdoffGiven) model->BSIM4v5tvfbsdoff = 0.0; if (!model->BSIM4v5tvoffGiven) model->BSIM4v5tvoff = 0.0; if (!model->BSIM4v5lintnoiGiven) model->BSIM4v5lintnoi = 0.0; /* unit m */ if (!model->BSIM4v5xjbvsGiven) model->BSIM4v5xjbvs = 1.0; /* no unit */ if (!model->BSIM4v5xjbvdGiven) model->BSIM4v5xjbvd = model->BSIM4v5xjbvs; if (!model->BSIM4v5bvsGiven) model->BSIM4v5bvs = 10.0; /* V */ if (!model->BSIM4v5bvdGiven) model->BSIM4v5bvd = model->BSIM4v5bvs; if (!model->BSIM4v5gbminGiven) model->BSIM4v5gbmin = 1.0e-12; /* in mho */ if (!model->BSIM4v5rbdbGiven) model->BSIM4v5rbdb = 50.0; /* in ohm */ if (!model->BSIM4v5rbpbGiven) model->BSIM4v5rbpb = 50.0; if (!model->BSIM4v5rbsbGiven) model->BSIM4v5rbsb = 50.0; if (!model->BSIM4v5rbpsGiven) model->BSIM4v5rbps = 50.0; if (!model->BSIM4v5rbpdGiven) model->BSIM4v5rbpd = 50.0; if (!model->BSIM4v5rbps0Given) model->BSIM4v5rbps0 = 50.0; if (!model->BSIM4v5rbpslGiven) model->BSIM4v5rbpsl = 0.0; if (!model->BSIM4v5rbpswGiven) model->BSIM4v5rbpsw = 0.0; if (!model->BSIM4v5rbpsnfGiven) model->BSIM4v5rbpsnf = 0.0; if (!model->BSIM4v5rbpd0Given) model->BSIM4v5rbpd0 = 50.0; if (!model->BSIM4v5rbpdlGiven) model->BSIM4v5rbpdl = 0.0; if (!model->BSIM4v5rbpdwGiven) model->BSIM4v5rbpdw = 0.0; if (!model->BSIM4v5rbpdnfGiven) model->BSIM4v5rbpdnf = 0.0; if (!model->BSIM4v5rbpbx0Given) model->BSIM4v5rbpbx0 = 100.0; if (!model->BSIM4v5rbpbxlGiven) model->BSIM4v5rbpbxl = 0.0; if (!model->BSIM4v5rbpbxwGiven) model->BSIM4v5rbpbxw = 0.0; if (!model->BSIM4v5rbpbxnfGiven) model->BSIM4v5rbpbxnf = 0.0; if (!model->BSIM4v5rbpby0Given) model->BSIM4v5rbpby0 = 100.0; if (!model->BSIM4v5rbpbylGiven) model->BSIM4v5rbpbyl = 0.0; if (!model->BSIM4v5rbpbywGiven) model->BSIM4v5rbpbyw = 0.0; if (!model->BSIM4v5rbpbynfGiven) model->BSIM4v5rbpbynf = 0.0; if (!model->BSIM4v5rbsbx0Given) model->BSIM4v5rbsbx0 = 100.0; if (!model->BSIM4v5rbsby0Given) model->BSIM4v5rbsby0 = 100.0; if (!model->BSIM4v5rbdbx0Given) model->BSIM4v5rbdbx0 = 100.0; if (!model->BSIM4v5rbdby0Given) model->BSIM4v5rbdby0 = 100.0; if (!model->BSIM4v5rbsdbxlGiven) model->BSIM4v5rbsdbxl = 0.0; if (!model->BSIM4v5rbsdbxwGiven) model->BSIM4v5rbsdbxw = 0.0; if (!model->BSIM4v5rbsdbxnfGiven) model->BSIM4v5rbsdbxnf = 0.0; if (!model->BSIM4v5rbsdbylGiven) model->BSIM4v5rbsdbyl = 0.0; if (!model->BSIM4v5rbsdbywGiven) model->BSIM4v5rbsdbyw = 0.0; if (!model->BSIM4v5rbsdbynfGiven) model->BSIM4v5rbsdbynf = 0.0; if (!model->BSIM4v5cgslGiven) model->BSIM4v5cgsl = 0.0; if (!model->BSIM4v5cgdlGiven) model->BSIM4v5cgdl = 0.0; if (!model->BSIM4v5ckappasGiven) model->BSIM4v5ckappas = 0.6; if (!model->BSIM4v5ckappadGiven) model->BSIM4v5ckappad = model->BSIM4v5ckappas; if (!model->BSIM4v5clcGiven) model->BSIM4v5clc = 0.1e-6; if (!model->BSIM4v5cleGiven) model->BSIM4v5cle = 0.6; if (!model->BSIM4v5vfbcvGiven) model->BSIM4v5vfbcv = -1.0; if (!model->BSIM4v5acdeGiven) model->BSIM4v5acde = 1.0; if (!model->BSIM4v5moinGiven) model->BSIM4v5moin = 15.0; if (!model->BSIM4v5noffGiven) model->BSIM4v5noff = 1.0; if (!model->BSIM4v5voffcvGiven) model->BSIM4v5voffcv = 0.0; if (!model->BSIM4v5dmcgGiven) model->BSIM4v5dmcg = 0.0; if (!model->BSIM4v5dmciGiven) model->BSIM4v5dmci = model->BSIM4v5dmcg; if (!model->BSIM4v5dmdgGiven) model->BSIM4v5dmdg = 0.0; if (!model->BSIM4v5dmcgtGiven) model->BSIM4v5dmcgt = 0.0; if (!model->BSIM4v5xgwGiven) model->BSIM4v5xgw = 0.0; if (!model->BSIM4v5xglGiven) model->BSIM4v5xgl = 0.0; if (!model->BSIM4v5rshgGiven) model->BSIM4v5rshg = 0.1; if (!model->BSIM4v5ngconGiven) model->BSIM4v5ngcon = 1.0; if (!model->BSIM4v5tcjGiven) model->BSIM4v5tcj = 0.0; if (!model->BSIM4v5tpbGiven) model->BSIM4v5tpb = 0.0; if (!model->BSIM4v5tcjswGiven) model->BSIM4v5tcjsw = 0.0; if (!model->BSIM4v5tpbswGiven) model->BSIM4v5tpbsw = 0.0; if (!model->BSIM4v5tcjswgGiven) model->BSIM4v5tcjswg = 0.0; if (!model->BSIM4v5tpbswgGiven) model->BSIM4v5tpbswg = 0.0; /* Length dependence */ if (!model->BSIM4v5lcdscGiven) model->BSIM4v5lcdsc = 0.0; if (!model->BSIM4v5lcdscbGiven) model->BSIM4v5lcdscb = 0.0; if (!model->BSIM4v5lcdscdGiven) model->BSIM4v5lcdscd = 0.0; if (!model->BSIM4v5lcitGiven) model->BSIM4v5lcit = 0.0; if (!model->BSIM4v5lnfactorGiven) model->BSIM4v5lnfactor = 0.0; if (!model->BSIM4v5lxjGiven) model->BSIM4v5lxj = 0.0; if (!model->BSIM4v5lvsatGiven) model->BSIM4v5lvsat = 0.0; if (!model->BSIM4v5latGiven) model->BSIM4v5lat = 0.0; if (!model->BSIM4v5la0Given) model->BSIM4v5la0 = 0.0; if (!model->BSIM4v5lagsGiven) model->BSIM4v5lags = 0.0; if (!model->BSIM4v5la1Given) model->BSIM4v5la1 = 0.0; if (!model->BSIM4v5la2Given) model->BSIM4v5la2 = 0.0; if (!model->BSIM4v5lketaGiven) model->BSIM4v5lketa = 0.0; if (!model->BSIM4v5lnsubGiven) model->BSIM4v5lnsub = 0.0; if (!model->BSIM4v5lndepGiven) model->BSIM4v5lndep = 0.0; if (!model->BSIM4v5lnsdGiven) model->BSIM4v5lnsd = 0.0; if (!model->BSIM4v5lphinGiven) model->BSIM4v5lphin = 0.0; if (!model->BSIM4v5lngateGiven) model->BSIM4v5lngate = 0.0; if (!model->BSIM4v5lvbmGiven) model->BSIM4v5lvbm = 0.0; if (!model->BSIM4v5lxtGiven) model->BSIM4v5lxt = 0.0; if (!model->BSIM4v5lkt1Given) model->BSIM4v5lkt1 = 0.0; if (!model->BSIM4v5lkt1lGiven) model->BSIM4v5lkt1l = 0.0; if (!model->BSIM4v5lkt2Given) model->BSIM4v5lkt2 = 0.0; if (!model->BSIM4v5lk3Given) model->BSIM4v5lk3 = 0.0; if (!model->BSIM4v5lk3bGiven) model->BSIM4v5lk3b = 0.0; if (!model->BSIM4v5lw0Given) model->BSIM4v5lw0 = 0.0; if (!model->BSIM4v5llpe0Given) model->BSIM4v5llpe0 = 0.0; if (!model->BSIM4v5llpebGiven) model->BSIM4v5llpeb = 0.0; if (!model->BSIM4v5ldvtp0Given) model->BSIM4v5ldvtp0 = 0.0; if (!model->BSIM4v5ldvtp1Given) model->BSIM4v5ldvtp1 = 0.0; if (!model->BSIM4v5ldvt0Given) model->BSIM4v5ldvt0 = 0.0; if (!model->BSIM4v5ldvt1Given) model->BSIM4v5ldvt1 = 0.0; if (!model->BSIM4v5ldvt2Given) model->BSIM4v5ldvt2 = 0.0; if (!model->BSIM4v5ldvt0wGiven) model->BSIM4v5ldvt0w = 0.0; if (!model->BSIM4v5ldvt1wGiven) model->BSIM4v5ldvt1w = 0.0; if (!model->BSIM4v5ldvt2wGiven) model->BSIM4v5ldvt2w = 0.0; if (!model->BSIM4v5ldroutGiven) model->BSIM4v5ldrout = 0.0; if (!model->BSIM4v5ldsubGiven) model->BSIM4v5ldsub = 0.0; if (!model->BSIM4v5lvth0Given) model->BSIM4v5lvth0 = 0.0; if (!model->BSIM4v5luaGiven) model->BSIM4v5lua = 0.0; if (!model->BSIM4v5lua1Given) model->BSIM4v5lua1 = 0.0; if (!model->BSIM4v5lubGiven) model->BSIM4v5lub = 0.0; if (!model->BSIM4v5lub1Given) model->BSIM4v5lub1 = 0.0; if (!model->BSIM4v5lucGiven) model->BSIM4v5luc = 0.0; if (!model->BSIM4v5luc1Given) model->BSIM4v5luc1 = 0.0; if (!model->BSIM4v5ludGiven) model->BSIM4v5lud = 0.0; if (!model->BSIM4v5lud1Given) model->BSIM4v5lud1 = 0.0; if (!model->BSIM4v5lupGiven) model->BSIM4v5lup = 0.0; if (!model->BSIM4v5llpGiven) model->BSIM4v5llp = 0.0; if (!model->BSIM4v5lu0Given) model->BSIM4v5lu0 = 0.0; if (!model->BSIM4v5luteGiven) model->BSIM4v5lute = 0.0; if (!model->BSIM4v5lvoffGiven) model->BSIM4v5lvoff = 0.0; if (!model->BSIM4v5lminvGiven) model->BSIM4v5lminv = 0.0; if (!model->BSIM4v5lfproutGiven) model->BSIM4v5lfprout = 0.0; if (!model->BSIM4v5lpditsGiven) model->BSIM4v5lpdits = 0.0; if (!model->BSIM4v5lpditsdGiven) model->BSIM4v5lpditsd = 0.0; if (!model->BSIM4v5ldeltaGiven) model->BSIM4v5ldelta = 0.0; if (!model->BSIM4v5lrdswGiven) model->BSIM4v5lrdsw = 0.0; if (!model->BSIM4v5lrdwGiven) model->BSIM4v5lrdw = 0.0; if (!model->BSIM4v5lrswGiven) model->BSIM4v5lrsw = 0.0; if (!model->BSIM4v5lprwbGiven) model->BSIM4v5lprwb = 0.0; if (!model->BSIM4v5lprwgGiven) model->BSIM4v5lprwg = 0.0; if (!model->BSIM4v5lprtGiven) model->BSIM4v5lprt = 0.0; if (!model->BSIM4v5leta0Given) model->BSIM4v5leta0 = 0.0; if (!model->BSIM4v5letabGiven) model->BSIM4v5letab = -0.0; if (!model->BSIM4v5lpclmGiven) model->BSIM4v5lpclm = 0.0; if (!model->BSIM4v5lpdibl1Given) model->BSIM4v5lpdibl1 = 0.0; if (!model->BSIM4v5lpdibl2Given) model->BSIM4v5lpdibl2 = 0.0; if (!model->BSIM4v5lpdiblbGiven) model->BSIM4v5lpdiblb = 0.0; if (!model->BSIM4v5lpscbe1Given) model->BSIM4v5lpscbe1 = 0.0; if (!model->BSIM4v5lpscbe2Given) model->BSIM4v5lpscbe2 = 0.0; if (!model->BSIM4v5lpvagGiven) model->BSIM4v5lpvag = 0.0; if (!model->BSIM4v5lwrGiven) model->BSIM4v5lwr = 0.0; if (!model->BSIM4v5ldwgGiven) model->BSIM4v5ldwg = 0.0; if (!model->BSIM4v5ldwbGiven) model->BSIM4v5ldwb = 0.0; if (!model->BSIM4v5lb0Given) model->BSIM4v5lb0 = 0.0; if (!model->BSIM4v5lb1Given) model->BSIM4v5lb1 = 0.0; if (!model->BSIM4v5lalpha0Given) model->BSIM4v5lalpha0 = 0.0; if (!model->BSIM4v5lalpha1Given) model->BSIM4v5lalpha1 = 0.0; if (!model->BSIM4v5lbeta0Given) model->BSIM4v5lbeta0 = 0.0; if (!model->BSIM4v5lagidlGiven) model->BSIM4v5lagidl = 0.0; if (!model->BSIM4v5lbgidlGiven) model->BSIM4v5lbgidl = 0.0; if (!model->BSIM4v5lcgidlGiven) model->BSIM4v5lcgidl = 0.0; if (!model->BSIM4v5legidlGiven) model->BSIM4v5legidl = 0.0; if (!model->BSIM4v5laigcGiven) model->BSIM4v5laigc = 0.0; if (!model->BSIM4v5lbigcGiven) model->BSIM4v5lbigc = 0.0; if (!model->BSIM4v5lcigcGiven) model->BSIM4v5lcigc = 0.0; if (!model->BSIM4v5laigsdGiven) model->BSIM4v5laigsd = 0.0; if (!model->BSIM4v5lbigsdGiven) model->BSIM4v5lbigsd = 0.0; if (!model->BSIM4v5lcigsdGiven) model->BSIM4v5lcigsd = 0.0; if (!model->BSIM4v5laigbaccGiven) model->BSIM4v5laigbacc = 0.0; if (!model->BSIM4v5lbigbaccGiven) model->BSIM4v5lbigbacc = 0.0; if (!model->BSIM4v5lcigbaccGiven) model->BSIM4v5lcigbacc = 0.0; if (!model->BSIM4v5laigbinvGiven) model->BSIM4v5laigbinv = 0.0; if (!model->BSIM4v5lbigbinvGiven) model->BSIM4v5lbigbinv = 0.0; if (!model->BSIM4v5lcigbinvGiven) model->BSIM4v5lcigbinv = 0.0; if (!model->BSIM4v5lnigcGiven) model->BSIM4v5lnigc = 0.0; if (!model->BSIM4v5lnigbinvGiven) model->BSIM4v5lnigbinv = 0.0; if (!model->BSIM4v5lnigbaccGiven) model->BSIM4v5lnigbacc = 0.0; if (!model->BSIM4v5lntoxGiven) model->BSIM4v5lntox = 0.0; if (!model->BSIM4v5leigbinvGiven) model->BSIM4v5leigbinv = 0.0; if (!model->BSIM4v5lpigcdGiven) model->BSIM4v5lpigcd = 0.0; if (!model->BSIM4v5lpoxedgeGiven) model->BSIM4v5lpoxedge = 0.0; if (!model->BSIM4v5lxrcrg1Given) model->BSIM4v5lxrcrg1 = 0.0; if (!model->BSIM4v5lxrcrg2Given) model->BSIM4v5lxrcrg2 = 0.0; if (!model->BSIM4v5leuGiven) model->BSIM4v5leu = 0.0; if (!model->BSIM4v5lvfbGiven) model->BSIM4v5lvfb = 0.0; if (!model->BSIM4v5llambdaGiven) model->BSIM4v5llambda = 0.0; if (!model->BSIM4v5lvtlGiven) model->BSIM4v5lvtl = 0.0; if (!model->BSIM4v5lxnGiven) model->BSIM4v5lxn = 0.0; if (!model->BSIM4v5lvfbsdoffGiven) model->BSIM4v5lvfbsdoff = 0.0; if (!model->BSIM4v5ltvfbsdoffGiven) model->BSIM4v5ltvfbsdoff = 0.0; if (!model->BSIM4v5ltvoffGiven) model->BSIM4v5ltvoff = 0.0; if (!model->BSIM4v5lcgslGiven) model->BSIM4v5lcgsl = 0.0; if (!model->BSIM4v5lcgdlGiven) model->BSIM4v5lcgdl = 0.0; if (!model->BSIM4v5lckappasGiven) model->BSIM4v5lckappas = 0.0; if (!model->BSIM4v5lckappadGiven) model->BSIM4v5lckappad = 0.0; if (!model->BSIM4v5lclcGiven) model->BSIM4v5lclc = 0.0; if (!model->BSIM4v5lcleGiven) model->BSIM4v5lcle = 0.0; if (!model->BSIM4v5lcfGiven) model->BSIM4v5lcf = 0.0; if (!model->BSIM4v5lvfbcvGiven) model->BSIM4v5lvfbcv = 0.0; if (!model->BSIM4v5lacdeGiven) model->BSIM4v5lacde = 0.0; if (!model->BSIM4v5lmoinGiven) model->BSIM4v5lmoin = 0.0; if (!model->BSIM4v5lnoffGiven) model->BSIM4v5lnoff = 0.0; if (!model->BSIM4v5lvoffcvGiven) model->BSIM4v5lvoffcv = 0.0; /* Width dependence */ if (!model->BSIM4v5wcdscGiven) model->BSIM4v5wcdsc = 0.0; if (!model->BSIM4v5wcdscbGiven) model->BSIM4v5wcdscb = 0.0; if (!model->BSIM4v5wcdscdGiven) model->BSIM4v5wcdscd = 0.0; if (!model->BSIM4v5wcitGiven) model->BSIM4v5wcit = 0.0; if (!model->BSIM4v5wnfactorGiven) model->BSIM4v5wnfactor = 0.0; if (!model->BSIM4v5wxjGiven) model->BSIM4v5wxj = 0.0; if (!model->BSIM4v5wvsatGiven) model->BSIM4v5wvsat = 0.0; if (!model->BSIM4v5watGiven) model->BSIM4v5wat = 0.0; if (!model->BSIM4v5wa0Given) model->BSIM4v5wa0 = 0.0; if (!model->BSIM4v5wagsGiven) model->BSIM4v5wags = 0.0; if (!model->BSIM4v5wa1Given) model->BSIM4v5wa1 = 0.0; if (!model->BSIM4v5wa2Given) model->BSIM4v5wa2 = 0.0; if (!model->BSIM4v5wketaGiven) model->BSIM4v5wketa = 0.0; if (!model->BSIM4v5wnsubGiven) model->BSIM4v5wnsub = 0.0; if (!model->BSIM4v5wndepGiven) model->BSIM4v5wndep = 0.0; if (!model->BSIM4v5wnsdGiven) model->BSIM4v5wnsd = 0.0; if (!model->BSIM4v5wphinGiven) model->BSIM4v5wphin = 0.0; if (!model->BSIM4v5wngateGiven) model->BSIM4v5wngate = 0.0; if (!model->BSIM4v5wvbmGiven) model->BSIM4v5wvbm = 0.0; if (!model->BSIM4v5wxtGiven) model->BSIM4v5wxt = 0.0; if (!model->BSIM4v5wkt1Given) model->BSIM4v5wkt1 = 0.0; if (!model->BSIM4v5wkt1lGiven) model->BSIM4v5wkt1l = 0.0; if (!model->BSIM4v5wkt2Given) model->BSIM4v5wkt2 = 0.0; if (!model->BSIM4v5wk3Given) model->BSIM4v5wk3 = 0.0; if (!model->BSIM4v5wk3bGiven) model->BSIM4v5wk3b = 0.0; if (!model->BSIM4v5ww0Given) model->BSIM4v5ww0 = 0.0; if (!model->BSIM4v5wlpe0Given) model->BSIM4v5wlpe0 = 0.0; if (!model->BSIM4v5wlpebGiven) model->BSIM4v5wlpeb = 0.0; if (!model->BSIM4v5wdvtp0Given) model->BSIM4v5wdvtp0 = 0.0; if (!model->BSIM4v5wdvtp1Given) model->BSIM4v5wdvtp1 = 0.0; if (!model->BSIM4v5wdvt0Given) model->BSIM4v5wdvt0 = 0.0; if (!model->BSIM4v5wdvt1Given) model->BSIM4v5wdvt1 = 0.0; if (!model->BSIM4v5wdvt2Given) model->BSIM4v5wdvt2 = 0.0; if (!model->BSIM4v5wdvt0wGiven) model->BSIM4v5wdvt0w = 0.0; if (!model->BSIM4v5wdvt1wGiven) model->BSIM4v5wdvt1w = 0.0; if (!model->BSIM4v5wdvt2wGiven) model->BSIM4v5wdvt2w = 0.0; if (!model->BSIM4v5wdroutGiven) model->BSIM4v5wdrout = 0.0; if (!model->BSIM4v5wdsubGiven) model->BSIM4v5wdsub = 0.0; if (!model->BSIM4v5wvth0Given) model->BSIM4v5wvth0 = 0.0; if (!model->BSIM4v5wuaGiven) model->BSIM4v5wua = 0.0; if (!model->BSIM4v5wua1Given) model->BSIM4v5wua1 = 0.0; if (!model->BSIM4v5wubGiven) model->BSIM4v5wub = 0.0; if (!model->BSIM4v5wub1Given) model->BSIM4v5wub1 = 0.0; if (!model->BSIM4v5wucGiven) model->BSIM4v5wuc = 0.0; if (!model->BSIM4v5wuc1Given) model->BSIM4v5wuc1 = 0.0; if (!model->BSIM4v5wudGiven) model->BSIM4v5wud = 0.0; if (!model->BSIM4v5wud1Given) model->BSIM4v5wud1 = 0.0; if (!model->BSIM4v5wupGiven) model->BSIM4v5wup = 0.0; if (!model->BSIM4v5wlpGiven) model->BSIM4v5wlp = 0.0; if (!model->BSIM4v5wu0Given) model->BSIM4v5wu0 = 0.0; if (!model->BSIM4v5wuteGiven) model->BSIM4v5wute = 0.0; if (!model->BSIM4v5wvoffGiven) model->BSIM4v5wvoff = 0.0; if (!model->BSIM4v5wminvGiven) model->BSIM4v5wminv = 0.0; if (!model->BSIM4v5wfproutGiven) model->BSIM4v5wfprout = 0.0; if (!model->BSIM4v5wpditsGiven) model->BSIM4v5wpdits = 0.0; if (!model->BSIM4v5wpditsdGiven) model->BSIM4v5wpditsd = 0.0; if (!model->BSIM4v5wdeltaGiven) model->BSIM4v5wdelta = 0.0; if (!model->BSIM4v5wrdswGiven) model->BSIM4v5wrdsw = 0.0; if (!model->BSIM4v5wrdwGiven) model->BSIM4v5wrdw = 0.0; if (!model->BSIM4v5wrswGiven) model->BSIM4v5wrsw = 0.0; if (!model->BSIM4v5wprwbGiven) model->BSIM4v5wprwb = 0.0; if (!model->BSIM4v5wprwgGiven) model->BSIM4v5wprwg = 0.0; if (!model->BSIM4v5wprtGiven) model->BSIM4v5wprt = 0.0; if (!model->BSIM4v5weta0Given) model->BSIM4v5weta0 = 0.0; if (!model->BSIM4v5wetabGiven) model->BSIM4v5wetab = 0.0; if (!model->BSIM4v5wpclmGiven) model->BSIM4v5wpclm = 0.0; if (!model->BSIM4v5wpdibl1Given) model->BSIM4v5wpdibl1 = 0.0; if (!model->BSIM4v5wpdibl2Given) model->BSIM4v5wpdibl2 = 0.0; if (!model->BSIM4v5wpdiblbGiven) model->BSIM4v5wpdiblb = 0.0; if (!model->BSIM4v5wpscbe1Given) model->BSIM4v5wpscbe1 = 0.0; if (!model->BSIM4v5wpscbe2Given) model->BSIM4v5wpscbe2 = 0.0; if (!model->BSIM4v5wpvagGiven) model->BSIM4v5wpvag = 0.0; if (!model->BSIM4v5wwrGiven) model->BSIM4v5wwr = 0.0; if (!model->BSIM4v5wdwgGiven) model->BSIM4v5wdwg = 0.0; if (!model->BSIM4v5wdwbGiven) model->BSIM4v5wdwb = 0.0; if (!model->BSIM4v5wb0Given) model->BSIM4v5wb0 = 0.0; if (!model->BSIM4v5wb1Given) model->BSIM4v5wb1 = 0.0; if (!model->BSIM4v5walpha0Given) model->BSIM4v5walpha0 = 0.0; if (!model->BSIM4v5walpha1Given) model->BSIM4v5walpha1 = 0.0; if (!model->BSIM4v5wbeta0Given) model->BSIM4v5wbeta0 = 0.0; if (!model->BSIM4v5wagidlGiven) model->BSIM4v5wagidl = 0.0; if (!model->BSIM4v5wbgidlGiven) model->BSIM4v5wbgidl = 0.0; if (!model->BSIM4v5wcgidlGiven) model->BSIM4v5wcgidl = 0.0; if (!model->BSIM4v5wegidlGiven) model->BSIM4v5wegidl = 0.0; if (!model->BSIM4v5waigcGiven) model->BSIM4v5waigc = 0.0; if (!model->BSIM4v5wbigcGiven) model->BSIM4v5wbigc = 0.0; if (!model->BSIM4v5wcigcGiven) model->BSIM4v5wcigc = 0.0; if (!model->BSIM4v5waigsdGiven) model->BSIM4v5waigsd = 0.0; if (!model->BSIM4v5wbigsdGiven) model->BSIM4v5wbigsd = 0.0; if (!model->BSIM4v5wcigsdGiven) model->BSIM4v5wcigsd = 0.0; if (!model->BSIM4v5waigbaccGiven) model->BSIM4v5waigbacc = 0.0; if (!model->BSIM4v5wbigbaccGiven) model->BSIM4v5wbigbacc = 0.0; if (!model->BSIM4v5wcigbaccGiven) model->BSIM4v5wcigbacc = 0.0; if (!model->BSIM4v5waigbinvGiven) model->BSIM4v5waigbinv = 0.0; if (!model->BSIM4v5wbigbinvGiven) model->BSIM4v5wbigbinv = 0.0; if (!model->BSIM4v5wcigbinvGiven) model->BSIM4v5wcigbinv = 0.0; if (!model->BSIM4v5wnigcGiven) model->BSIM4v5wnigc = 0.0; if (!model->BSIM4v5wnigbinvGiven) model->BSIM4v5wnigbinv = 0.0; if (!model->BSIM4v5wnigbaccGiven) model->BSIM4v5wnigbacc = 0.0; if (!model->BSIM4v5wntoxGiven) model->BSIM4v5wntox = 0.0; if (!model->BSIM4v5weigbinvGiven) model->BSIM4v5weigbinv = 0.0; if (!model->BSIM4v5wpigcdGiven) model->BSIM4v5wpigcd = 0.0; if (!model->BSIM4v5wpoxedgeGiven) model->BSIM4v5wpoxedge = 0.0; if (!model->BSIM4v5wxrcrg1Given) model->BSIM4v5wxrcrg1 = 0.0; if (!model->BSIM4v5wxrcrg2Given) model->BSIM4v5wxrcrg2 = 0.0; if (!model->BSIM4v5weuGiven) model->BSIM4v5weu = 0.0; if (!model->BSIM4v5wvfbGiven) model->BSIM4v5wvfb = 0.0; if (!model->BSIM4v5wlambdaGiven) model->BSIM4v5wlambda = 0.0; if (!model->BSIM4v5wvtlGiven) model->BSIM4v5wvtl = 0.0; if (!model->BSIM4v5wxnGiven) model->BSIM4v5wxn = 0.0; if (!model->BSIM4v5wvfbsdoffGiven) model->BSIM4v5wvfbsdoff = 0.0; if (!model->BSIM4v5wtvfbsdoffGiven) model->BSIM4v5wtvfbsdoff = 0.0; if (!model->BSIM4v5wtvoffGiven) model->BSIM4v5wtvoff = 0.0; if (!model->BSIM4v5wcgslGiven) model->BSIM4v5wcgsl = 0.0; if (!model->BSIM4v5wcgdlGiven) model->BSIM4v5wcgdl = 0.0; if (!model->BSIM4v5wckappasGiven) model->BSIM4v5wckappas = 0.0; if (!model->BSIM4v5wckappadGiven) model->BSIM4v5wckappad = 0.0; if (!model->BSIM4v5wcfGiven) model->BSIM4v5wcf = 0.0; if (!model->BSIM4v5wclcGiven) model->BSIM4v5wclc = 0.0; if (!model->BSIM4v5wcleGiven) model->BSIM4v5wcle = 0.0; if (!model->BSIM4v5wvfbcvGiven) model->BSIM4v5wvfbcv = 0.0; if (!model->BSIM4v5wacdeGiven) model->BSIM4v5wacde = 0.0; if (!model->BSIM4v5wmoinGiven) model->BSIM4v5wmoin = 0.0; if (!model->BSIM4v5wnoffGiven) model->BSIM4v5wnoff = 0.0; if (!model->BSIM4v5wvoffcvGiven) model->BSIM4v5wvoffcv = 0.0; /* Cross-term dependence */ if (!model->BSIM4v5pcdscGiven) model->BSIM4v5pcdsc = 0.0; if (!model->BSIM4v5pcdscbGiven) model->BSIM4v5pcdscb = 0.0; if (!model->BSIM4v5pcdscdGiven) model->BSIM4v5pcdscd = 0.0; if (!model->BSIM4v5pcitGiven) model->BSIM4v5pcit = 0.0; if (!model->BSIM4v5pnfactorGiven) model->BSIM4v5pnfactor = 0.0; if (!model->BSIM4v5pxjGiven) model->BSIM4v5pxj = 0.0; if (!model->BSIM4v5pvsatGiven) model->BSIM4v5pvsat = 0.0; if (!model->BSIM4v5patGiven) model->BSIM4v5pat = 0.0; if (!model->BSIM4v5pa0Given) model->BSIM4v5pa0 = 0.0; if (!model->BSIM4v5pagsGiven) model->BSIM4v5pags = 0.0; if (!model->BSIM4v5pa1Given) model->BSIM4v5pa1 = 0.0; if (!model->BSIM4v5pa2Given) model->BSIM4v5pa2 = 0.0; if (!model->BSIM4v5pketaGiven) model->BSIM4v5pketa = 0.0; if (!model->BSIM4v5pnsubGiven) model->BSIM4v5pnsub = 0.0; if (!model->BSIM4v5pndepGiven) model->BSIM4v5pndep = 0.0; if (!model->BSIM4v5pnsdGiven) model->BSIM4v5pnsd = 0.0; if (!model->BSIM4v5pphinGiven) model->BSIM4v5pphin = 0.0; if (!model->BSIM4v5pngateGiven) model->BSIM4v5pngate = 0.0; if (!model->BSIM4v5pvbmGiven) model->BSIM4v5pvbm = 0.0; if (!model->BSIM4v5pxtGiven) model->BSIM4v5pxt = 0.0; if (!model->BSIM4v5pkt1Given) model->BSIM4v5pkt1 = 0.0; if (!model->BSIM4v5pkt1lGiven) model->BSIM4v5pkt1l = 0.0; if (!model->BSIM4v5pkt2Given) model->BSIM4v5pkt2 = 0.0; if (!model->BSIM4v5pk3Given) model->BSIM4v5pk3 = 0.0; if (!model->BSIM4v5pk3bGiven) model->BSIM4v5pk3b = 0.0; if (!model->BSIM4v5pw0Given) model->BSIM4v5pw0 = 0.0; if (!model->BSIM4v5plpe0Given) model->BSIM4v5plpe0 = 0.0; if (!model->BSIM4v5plpebGiven) model->BSIM4v5plpeb = 0.0; if (!model->BSIM4v5pdvtp0Given) model->BSIM4v5pdvtp0 = 0.0; if (!model->BSIM4v5pdvtp1Given) model->BSIM4v5pdvtp1 = 0.0; if (!model->BSIM4v5pdvt0Given) model->BSIM4v5pdvt0 = 0.0; if (!model->BSIM4v5pdvt1Given) model->BSIM4v5pdvt1 = 0.0; if (!model->BSIM4v5pdvt2Given) model->BSIM4v5pdvt2 = 0.0; if (!model->BSIM4v5pdvt0wGiven) model->BSIM4v5pdvt0w = 0.0; if (!model->BSIM4v5pdvt1wGiven) model->BSIM4v5pdvt1w = 0.0; if (!model->BSIM4v5pdvt2wGiven) model->BSIM4v5pdvt2w = 0.0; if (!model->BSIM4v5pdroutGiven) model->BSIM4v5pdrout = 0.0; if (!model->BSIM4v5pdsubGiven) model->BSIM4v5pdsub = 0.0; if (!model->BSIM4v5pvth0Given) model->BSIM4v5pvth0 = 0.0; if (!model->BSIM4v5puaGiven) model->BSIM4v5pua = 0.0; if (!model->BSIM4v5pua1Given) model->BSIM4v5pua1 = 0.0; if (!model->BSIM4v5pubGiven) model->BSIM4v5pub = 0.0; if (!model->BSIM4v5pub1Given) model->BSIM4v5pub1 = 0.0; if (!model->BSIM4v5pucGiven) model->BSIM4v5puc = 0.0; if (!model->BSIM4v5puc1Given) model->BSIM4v5puc1 = 0.0; if (!model->BSIM4v5pudGiven) model->BSIM4v5pud = 0.0; if (!model->BSIM4v5pud1Given) model->BSIM4v5pud1 = 0.0; if (!model->BSIM4v5pupGiven) model->BSIM4v5pup = 0.0; if (!model->BSIM4v5plpGiven) model->BSIM4v5plp = 0.0; if (!model->BSIM4v5pu0Given) model->BSIM4v5pu0 = 0.0; if (!model->BSIM4v5puteGiven) model->BSIM4v5pute = 0.0; if (!model->BSIM4v5pvoffGiven) model->BSIM4v5pvoff = 0.0; if (!model->BSIM4v5pminvGiven) model->BSIM4v5pminv = 0.0; if (!model->BSIM4v5pfproutGiven) model->BSIM4v5pfprout = 0.0; if (!model->BSIM4v5ppditsGiven) model->BSIM4v5ppdits = 0.0; if (!model->BSIM4v5ppditsdGiven) model->BSIM4v5ppditsd = 0.0; if (!model->BSIM4v5pdeltaGiven) model->BSIM4v5pdelta = 0.0; if (!model->BSIM4v5prdswGiven) model->BSIM4v5prdsw = 0.0; if (!model->BSIM4v5prdwGiven) model->BSIM4v5prdw = 0.0; if (!model->BSIM4v5prswGiven) model->BSIM4v5prsw = 0.0; if (!model->BSIM4v5pprwbGiven) model->BSIM4v5pprwb = 0.0; if (!model->BSIM4v5pprwgGiven) model->BSIM4v5pprwg = 0.0; if (!model->BSIM4v5pprtGiven) model->BSIM4v5pprt = 0.0; if (!model->BSIM4v5peta0Given) model->BSIM4v5peta0 = 0.0; if (!model->BSIM4v5petabGiven) model->BSIM4v5petab = 0.0; if (!model->BSIM4v5ppclmGiven) model->BSIM4v5ppclm = 0.0; if (!model->BSIM4v5ppdibl1Given) model->BSIM4v5ppdibl1 = 0.0; if (!model->BSIM4v5ppdibl2Given) model->BSIM4v5ppdibl2 = 0.0; if (!model->BSIM4v5ppdiblbGiven) model->BSIM4v5ppdiblb = 0.0; if (!model->BSIM4v5ppscbe1Given) model->BSIM4v5ppscbe1 = 0.0; if (!model->BSIM4v5ppscbe2Given) model->BSIM4v5ppscbe2 = 0.0; if (!model->BSIM4v5ppvagGiven) model->BSIM4v5ppvag = 0.0; if (!model->BSIM4v5pwrGiven) model->BSIM4v5pwr = 0.0; if (!model->BSIM4v5pdwgGiven) model->BSIM4v5pdwg = 0.0; if (!model->BSIM4v5pdwbGiven) model->BSIM4v5pdwb = 0.0; if (!model->BSIM4v5pb0Given) model->BSIM4v5pb0 = 0.0; if (!model->BSIM4v5pb1Given) model->BSIM4v5pb1 = 0.0; if (!model->BSIM4v5palpha0Given) model->BSIM4v5palpha0 = 0.0; if (!model->BSIM4v5palpha1Given) model->BSIM4v5palpha1 = 0.0; if (!model->BSIM4v5pbeta0Given) model->BSIM4v5pbeta0 = 0.0; if (!model->BSIM4v5pagidlGiven) model->BSIM4v5pagidl = 0.0; if (!model->BSIM4v5pbgidlGiven) model->BSIM4v5pbgidl = 0.0; if (!model->BSIM4v5pcgidlGiven) model->BSIM4v5pcgidl = 0.0; if (!model->BSIM4v5pegidlGiven) model->BSIM4v5pegidl = 0.0; if (!model->BSIM4v5paigcGiven) model->BSIM4v5paigc = 0.0; if (!model->BSIM4v5pbigcGiven) model->BSIM4v5pbigc = 0.0; if (!model->BSIM4v5pcigcGiven) model->BSIM4v5pcigc = 0.0; if (!model->BSIM4v5paigsdGiven) model->BSIM4v5paigsd = 0.0; if (!model->BSIM4v5pbigsdGiven) model->BSIM4v5pbigsd = 0.0; if (!model->BSIM4v5pcigsdGiven) model->BSIM4v5pcigsd = 0.0; if (!model->BSIM4v5paigbaccGiven) model->BSIM4v5paigbacc = 0.0; if (!model->BSIM4v5pbigbaccGiven) model->BSIM4v5pbigbacc = 0.0; if (!model->BSIM4v5pcigbaccGiven) model->BSIM4v5pcigbacc = 0.0; if (!model->BSIM4v5paigbinvGiven) model->BSIM4v5paigbinv = 0.0; if (!model->BSIM4v5pbigbinvGiven) model->BSIM4v5pbigbinv = 0.0; if (!model->BSIM4v5pcigbinvGiven) model->BSIM4v5pcigbinv = 0.0; if (!model->BSIM4v5pnigcGiven) model->BSIM4v5pnigc = 0.0; if (!model->BSIM4v5pnigbinvGiven) model->BSIM4v5pnigbinv = 0.0; if (!model->BSIM4v5pnigbaccGiven) model->BSIM4v5pnigbacc = 0.0; if (!model->BSIM4v5pntoxGiven) model->BSIM4v5pntox = 0.0; if (!model->BSIM4v5peigbinvGiven) model->BSIM4v5peigbinv = 0.0; if (!model->BSIM4v5ppigcdGiven) model->BSIM4v5ppigcd = 0.0; if (!model->BSIM4v5ppoxedgeGiven) model->BSIM4v5ppoxedge = 0.0; if (!model->BSIM4v5pxrcrg1Given) model->BSIM4v5pxrcrg1 = 0.0; if (!model->BSIM4v5pxrcrg2Given) model->BSIM4v5pxrcrg2 = 0.0; if (!model->BSIM4v5peuGiven) model->BSIM4v5peu = 0.0; if (!model->BSIM4v5pvfbGiven) model->BSIM4v5pvfb = 0.0; if (!model->BSIM4v5plambdaGiven) model->BSIM4v5plambda = 0.0; if (!model->BSIM4v5pvtlGiven) model->BSIM4v5pvtl = 0.0; if (!model->BSIM4v5pxnGiven) model->BSIM4v5pxn = 0.0; if (!model->BSIM4v5pvfbsdoffGiven) model->BSIM4v5pvfbsdoff = 0.0; if (!model->BSIM4v5ptvfbsdoffGiven) model->BSIM4v5ptvfbsdoff = 0.0; if (!model->BSIM4v5ptvoffGiven) model->BSIM4v5ptvoff = 0.0; if (!model->BSIM4v5pcgslGiven) model->BSIM4v5pcgsl = 0.0; if (!model->BSIM4v5pcgdlGiven) model->BSIM4v5pcgdl = 0.0; if (!model->BSIM4v5pckappasGiven) model->BSIM4v5pckappas = 0.0; if (!model->BSIM4v5pckappadGiven) model->BSIM4v5pckappad = 0.0; if (!model->BSIM4v5pcfGiven) model->BSIM4v5pcf = 0.0; if (!model->BSIM4v5pclcGiven) model->BSIM4v5pclc = 0.0; if (!model->BSIM4v5pcleGiven) model->BSIM4v5pcle = 0.0; if (!model->BSIM4v5pvfbcvGiven) model->BSIM4v5pvfbcv = 0.0; if (!model->BSIM4v5pacdeGiven) model->BSIM4v5pacde = 0.0; if (!model->BSIM4v5pmoinGiven) model->BSIM4v5pmoin = 0.0; if (!model->BSIM4v5pnoffGiven) model->BSIM4v5pnoff = 0.0; if (!model->BSIM4v5pvoffcvGiven) model->BSIM4v5pvoffcv = 0.0; if (!model->BSIM4v5gamma1Given) model->BSIM4v5gamma1 = 0.0; if (!model->BSIM4v5lgamma1Given) model->BSIM4v5lgamma1 = 0.0; if (!model->BSIM4v5wgamma1Given) model->BSIM4v5wgamma1 = 0.0; if (!model->BSIM4v5pgamma1Given) model->BSIM4v5pgamma1 = 0.0; if (!model->BSIM4v5gamma2Given) model->BSIM4v5gamma2 = 0.0; if (!model->BSIM4v5lgamma2Given) model->BSIM4v5lgamma2 = 0.0; if (!model->BSIM4v5wgamma2Given) model->BSIM4v5wgamma2 = 0.0; if (!model->BSIM4v5pgamma2Given) model->BSIM4v5pgamma2 = 0.0; if (!model->BSIM4v5vbxGiven) model->BSIM4v5vbx = 0.0; if (!model->BSIM4v5lvbxGiven) model->BSIM4v5lvbx = 0.0; if (!model->BSIM4v5wvbxGiven) model->BSIM4v5wvbx = 0.0; if (!model->BSIM4v5pvbxGiven) model->BSIM4v5pvbx = 0.0; /* unit degree celcius */ if (!model->BSIM4v5tnomGiven) model->BSIM4v5tnom = ckt->CKTnomTemp; if (!model->BSIM4v5LintGiven) model->BSIM4v5Lint = 0.0; if (!model->BSIM4v5LlGiven) model->BSIM4v5Ll = 0.0; if (!model->BSIM4v5LlcGiven) model->BSIM4v5Llc = model->BSIM4v5Ll; if (!model->BSIM4v5LlnGiven) model->BSIM4v5Lln = 1.0; if (!model->BSIM4v5LwGiven) model->BSIM4v5Lw = 0.0; if (!model->BSIM4v5LwcGiven) model->BSIM4v5Lwc = model->BSIM4v5Lw; if (!model->BSIM4v5LwnGiven) model->BSIM4v5Lwn = 1.0; if (!model->BSIM4v5LwlGiven) model->BSIM4v5Lwl = 0.0; if (!model->BSIM4v5LwlcGiven) model->BSIM4v5Lwlc = model->BSIM4v5Lwl; if (!model->BSIM4v5LminGiven) model->BSIM4v5Lmin = 0.0; if (!model->BSIM4v5LmaxGiven) model->BSIM4v5Lmax = 1.0; if (!model->BSIM4v5WintGiven) model->BSIM4v5Wint = 0.0; if (!model->BSIM4v5WlGiven) model->BSIM4v5Wl = 0.0; if (!model->BSIM4v5WlcGiven) model->BSIM4v5Wlc = model->BSIM4v5Wl; if (!model->BSIM4v5WlnGiven) model->BSIM4v5Wln = 1.0; if (!model->BSIM4v5WwGiven) model->BSIM4v5Ww = 0.0; if (!model->BSIM4v5WwcGiven) model->BSIM4v5Wwc = model->BSIM4v5Ww; if (!model->BSIM4v5WwnGiven) model->BSIM4v5Wwn = 1.0; if (!model->BSIM4v5WwlGiven) model->BSIM4v5Wwl = 0.0; if (!model->BSIM4v5WwlcGiven) model->BSIM4v5Wwlc = model->BSIM4v5Wwl; if (!model->BSIM4v5WminGiven) model->BSIM4v5Wmin = 0.0; if (!model->BSIM4v5WmaxGiven) model->BSIM4v5Wmax = 1.0; if (!model->BSIM4v5dwcGiven) model->BSIM4v5dwc = model->BSIM4v5Wint; if (!model->BSIM4v5dlcGiven) model->BSIM4v5dlc = model->BSIM4v5Lint; if (!model->BSIM4v5xlGiven) model->BSIM4v5xl = 0.0; if (!model->BSIM4v5xwGiven) model->BSIM4v5xw = 0.0; if (!model->BSIM4v5dlcigGiven) model->BSIM4v5dlcig = model->BSIM4v5Lint; if (!model->BSIM4v5dwjGiven) model->BSIM4v5dwj = model->BSIM4v5dwc; if (!model->BSIM4v5cfGiven) model->BSIM4v5cf = 2.0 * model->BSIM4v5epsrox * EPS0 / PI * log(1.0 + 0.4e-6 / model->BSIM4v5toxe); if (!model->BSIM4v5xpartGiven) model->BSIM4v5xpart = 0.0; if (!model->BSIM4v5sheetResistanceGiven) model->BSIM4v5sheetResistance = 0.0; if (!model->BSIM4v5SunitAreaJctCapGiven) model->BSIM4v5SunitAreaJctCap = 5.0E-4; if (!model->BSIM4v5DunitAreaJctCapGiven) model->BSIM4v5DunitAreaJctCap = model->BSIM4v5SunitAreaJctCap; if (!model->BSIM4v5SunitLengthSidewallJctCapGiven) model->BSIM4v5SunitLengthSidewallJctCap = 5.0E-10; if (!model->BSIM4v5DunitLengthSidewallJctCapGiven) model->BSIM4v5DunitLengthSidewallJctCap = model->BSIM4v5SunitLengthSidewallJctCap; if (!model->BSIM4v5SunitLengthGateSidewallJctCapGiven) model->BSIM4v5SunitLengthGateSidewallJctCap = model->BSIM4v5SunitLengthSidewallJctCap ; if (!model->BSIM4v5DunitLengthGateSidewallJctCapGiven) model->BSIM4v5DunitLengthGateSidewallJctCap = model->BSIM4v5SunitLengthGateSidewallJctCap; if (!model->BSIM4v5SjctSatCurDensityGiven) model->BSIM4v5SjctSatCurDensity = 1.0E-4; if (!model->BSIM4v5DjctSatCurDensityGiven) model->BSIM4v5DjctSatCurDensity = model->BSIM4v5SjctSatCurDensity; if (!model->BSIM4v5SjctSidewallSatCurDensityGiven) model->BSIM4v5SjctSidewallSatCurDensity = 0.0; if (!model->BSIM4v5DjctSidewallSatCurDensityGiven) model->BSIM4v5DjctSidewallSatCurDensity = model->BSIM4v5SjctSidewallSatCurDensity; if (!model->BSIM4v5SjctGateSidewallSatCurDensityGiven) model->BSIM4v5SjctGateSidewallSatCurDensity = 0.0; if (!model->BSIM4v5DjctGateSidewallSatCurDensityGiven) model->BSIM4v5DjctGateSidewallSatCurDensity = model->BSIM4v5SjctGateSidewallSatCurDensity; if (!model->BSIM4v5SbulkJctPotentialGiven) model->BSIM4v5SbulkJctPotential = 1.0; if (!model->BSIM4v5DbulkJctPotentialGiven) model->BSIM4v5DbulkJctPotential = model->BSIM4v5SbulkJctPotential; if (!model->BSIM4v5SsidewallJctPotentialGiven) model->BSIM4v5SsidewallJctPotential = 1.0; if (!model->BSIM4v5DsidewallJctPotentialGiven) model->BSIM4v5DsidewallJctPotential = model->BSIM4v5SsidewallJctPotential; if (!model->BSIM4v5SGatesidewallJctPotentialGiven) model->BSIM4v5SGatesidewallJctPotential = model->BSIM4v5SsidewallJctPotential; if (!model->BSIM4v5DGatesidewallJctPotentialGiven) model->BSIM4v5DGatesidewallJctPotential = model->BSIM4v5SGatesidewallJctPotential; if (!model->BSIM4v5SbulkJctBotGradingCoeffGiven) model->BSIM4v5SbulkJctBotGradingCoeff = 0.5; if (!model->BSIM4v5DbulkJctBotGradingCoeffGiven) model->BSIM4v5DbulkJctBotGradingCoeff = model->BSIM4v5SbulkJctBotGradingCoeff; if (!model->BSIM4v5SbulkJctSideGradingCoeffGiven) model->BSIM4v5SbulkJctSideGradingCoeff = 0.33; if (!model->BSIM4v5DbulkJctSideGradingCoeffGiven) model->BSIM4v5DbulkJctSideGradingCoeff = model->BSIM4v5SbulkJctSideGradingCoeff; if (!model->BSIM4v5SbulkJctGateSideGradingCoeffGiven) model->BSIM4v5SbulkJctGateSideGradingCoeff = model->BSIM4v5SbulkJctSideGradingCoeff; if (!model->BSIM4v5DbulkJctGateSideGradingCoeffGiven) model->BSIM4v5DbulkJctGateSideGradingCoeff = model->BSIM4v5SbulkJctGateSideGradingCoeff; if (!model->BSIM4v5SjctEmissionCoeffGiven) model->BSIM4v5SjctEmissionCoeff = 1.0; if (!model->BSIM4v5DjctEmissionCoeffGiven) model->BSIM4v5DjctEmissionCoeff = model->BSIM4v5SjctEmissionCoeff; if (!model->BSIM4v5SjctTempExponentGiven) model->BSIM4v5SjctTempExponent = 3.0; if (!model->BSIM4v5DjctTempExponentGiven) model->BSIM4v5DjctTempExponent = model->BSIM4v5SjctTempExponent; if (!model->BSIM4v5jtssGiven) model->BSIM4v5jtss = 0.0; if (!model->BSIM4v5jtsdGiven) model->BSIM4v5jtsd = model->BSIM4v5jtss; if (!model->BSIM4v5jtsswsGiven) model->BSIM4v5jtssws = 0.0; if (!model->BSIM4v5jtsswdGiven) model->BSIM4v5jtsswd = model->BSIM4v5jtssws; if (!model->BSIM4v5jtsswgsGiven) model->BSIM4v5jtsswgs = 0.0; if (!model->BSIM4v5jtsswgdGiven) model->BSIM4v5jtsswgd = model->BSIM4v5jtsswgs; if (!model->BSIM4v5njtsGiven) model->BSIM4v5njts = 20.0; if (!model->BSIM4v5njtsswGiven) model->BSIM4v5njtssw = 20.0; if (!model->BSIM4v5njtsswgGiven) model->BSIM4v5njtsswg = 20.0; if (!model->BSIM4v5xtssGiven) model->BSIM4v5xtss = 0.02; if (!model->BSIM4v5xtsdGiven) model->BSIM4v5xtsd = model->BSIM4v5xtss; if (!model->BSIM4v5xtsswsGiven) model->BSIM4v5xtssws = 0.02; if (!model->BSIM4v5xtsswdGiven) model->BSIM4v5xtsswd = model->BSIM4v5xtssws; if (!model->BSIM4v5xtsswgsGiven) model->BSIM4v5xtsswgs = 0.02; if (!model->BSIM4v5xtsswgdGiven) model->BSIM4v5xtsswgd = model->BSIM4v5xtsswgs; if (!model->BSIM4v5tnjtsGiven) model->BSIM4v5tnjts = 0.0; if (!model->BSIM4v5tnjtsswGiven) model->BSIM4v5tnjtssw = 0.0; if (!model->BSIM4v5tnjtsswgGiven) model->BSIM4v5tnjtsswg = 0.0; if (!model->BSIM4v5vtssGiven) model->BSIM4v5vtss = 10.0; if (!model->BSIM4v5vtsdGiven) model->BSIM4v5vtsd = model->BSIM4v5vtss; if (!model->BSIM4v5vtsswsGiven) model->BSIM4v5vtssws = 10.0; if (!model->BSIM4v5vtsswdGiven) model->BSIM4v5vtsswd = model->BSIM4v5vtssws; if (!model->BSIM4v5vtsswgsGiven) model->BSIM4v5vtsswgs = 10.0; if (!model->BSIM4v5vtsswgdGiven) model->BSIM4v5vtsswgd = model->BSIM4v5vtsswgs; if (!model->BSIM4v5oxideTrapDensityAGiven) { if (model->BSIM4v5type == NMOS) model->BSIM4v5oxideTrapDensityA = 6.25e41; else model->BSIM4v5oxideTrapDensityA= 6.188e40; } if (!model->BSIM4v5oxideTrapDensityBGiven) { if (model->BSIM4v5type == NMOS) model->BSIM4v5oxideTrapDensityB = 3.125e26; else model->BSIM4v5oxideTrapDensityB = 1.5e25; } if (!model->BSIM4v5oxideTrapDensityCGiven) model->BSIM4v5oxideTrapDensityC = 8.75e9; if (!model->BSIM4v5emGiven) model->BSIM4v5em = 4.1e7; /* V/m */ if (!model->BSIM4v5efGiven) model->BSIM4v5ef = 1.0; if (!model->BSIM4v5afGiven) model->BSIM4v5af = 1.0; if (!model->BSIM4v5kfGiven) model->BSIM4v5kf = 0.0; if (!model->BSIM4v5vgsMaxGiven) model->BSIM4v5vgsMax = 1e99; if (!model->BSIM4v5vgdMaxGiven) model->BSIM4v5vgdMax = 1e99; if (!model->BSIM4v5vgbMaxGiven) model->BSIM4v5vgbMax = 1e99; if (!model->BSIM4v5vdsMaxGiven) model->BSIM4v5vdsMax = 1e99; if (!model->BSIM4v5vbsMaxGiven) model->BSIM4v5vbsMax = 1e99; if (!model->BSIM4v5vbdMaxGiven) model->BSIM4v5vbdMax = 1e99; if (!model->BSIM4v5vgsrMaxGiven) model->BSIM4v5vgsrMax = 1e99; if (!model->BSIM4v5vgdrMaxGiven) model->BSIM4v5vgdrMax = 1e99; if (!model->BSIM4v5vgbrMaxGiven) model->BSIM4v5vgbrMax = 1e99; if (!model->BSIM4v5vbsrMaxGiven) model->BSIM4v5vbsrMax = 1e99; if (!model->BSIM4v5vbdrMaxGiven) model->BSIM4v5vbdrMax = 1e99; /* stress effect */ if (!model->BSIM4v5sarefGiven) model->BSIM4v5saref = 1e-6; /* m */ if (!model->BSIM4v5sbrefGiven) model->BSIM4v5sbref = 1e-6; /* m */ if (!model->BSIM4v5wlodGiven) model->BSIM4v5wlod = 0; /* m */ if (!model->BSIM4v5ku0Given) model->BSIM4v5ku0 = 0; /* 1/m */ if (!model->BSIM4v5kvsatGiven) model->BSIM4v5kvsat = 0; if (!model->BSIM4v5kvth0Given) /* m */ model->BSIM4v5kvth0 = 0; if (!model->BSIM4v5tku0Given) model->BSIM4v5tku0 = 0; if (!model->BSIM4v5llodku0Given) model->BSIM4v5llodku0 = 0; if (!model->BSIM4v5wlodku0Given) model->BSIM4v5wlodku0 = 0; if (!model->BSIM4v5llodvthGiven) model->BSIM4v5llodvth = 0; if (!model->BSIM4v5wlodvthGiven) model->BSIM4v5wlodvth = 0; if (!model->BSIM4v5lku0Given) model->BSIM4v5lku0 = 0; if (!model->BSIM4v5wku0Given) model->BSIM4v5wku0 = 0; if (!model->BSIM4v5pku0Given) model->BSIM4v5pku0 = 0; if (!model->BSIM4v5lkvth0Given) model->BSIM4v5lkvth0 = 0; if (!model->BSIM4v5wkvth0Given) model->BSIM4v5wkvth0 = 0; if (!model->BSIM4v5pkvth0Given) model->BSIM4v5pkvth0 = 0; if (!model->BSIM4v5stk2Given) model->BSIM4v5stk2 = 0; if (!model->BSIM4v5lodk2Given) model->BSIM4v5lodk2 = 1.0; if (!model->BSIM4v5steta0Given) model->BSIM4v5steta0 = 0; if (!model->BSIM4v5lodeta0Given) model->BSIM4v5lodeta0 = 1.0; /* Well Proximity Effect */ if (!model->BSIM4v5webGiven) model->BSIM4v5web = 0.0; if (!model->BSIM4v5wecGiven) model->BSIM4v5wec = 0.0; if (!model->BSIM4v5kvth0weGiven) model->BSIM4v5kvth0we = 0.0; if (!model->BSIM4v5k2weGiven) model->BSIM4v5k2we = 0.0; if (!model->BSIM4v5ku0weGiven) model->BSIM4v5ku0we = 0.0; if (!model->BSIM4v5screfGiven) model->BSIM4v5scref = 1.0E-6; /* m */ if (!model->BSIM4v5wpemodGiven) model->BSIM4v5wpemod = 0; else if ((model->BSIM4v5wpemod != 0) && (model->BSIM4v5wpemod != 1)) { model->BSIM4v5wpemod = 0; printf("Warning: wpemod has been set to its default value: 0.\n"); } if (!model->BSIM4v5lkvth0weGiven) model->BSIM4v5lkvth0we = 0; if (!model->BSIM4v5lk2weGiven) model->BSIM4v5lk2we = 0; if (!model->BSIM4v5lku0weGiven) model->BSIM4v5lku0we = 0; if (!model->BSIM4v5wkvth0weGiven) model->BSIM4v5wkvth0we = 0; if (!model->BSIM4v5wk2weGiven) model->BSIM4v5wk2we = 0; if (!model->BSIM4v5wku0weGiven) model->BSIM4v5wku0we = 0; if (!model->BSIM4v5pkvth0weGiven) model->BSIM4v5pkvth0we = 0; if (!model->BSIM4v5pk2weGiven) model->BSIM4v5pk2we = 0; if (!model->BSIM4v5pku0weGiven) model->BSIM4v5pku0we = 0; DMCGeff = model->BSIM4v5dmcg - model->BSIM4v5dmcgt; DMCIeff = model->BSIM4v5dmci; DMDGeff = model->BSIM4v5dmdg - model->BSIM4v5dmcgt; /* * End processing models and begin to loop * through all the instances of the model */ for (here = BSIM4v5instances(model); here != NULL ; here=BSIM4v5nextInstance(here)) { /* allocate a chunk of the state vector */ here->BSIM4v5states = *states; *states += BSIM4v5numStates; /* perform the parameter defaulting */ if (!here->BSIM4v5lGiven) here->BSIM4v5l = 5.0e-6; if (!here->BSIM4v5wGiven) here->BSIM4v5w = 5.0e-6; if (!here->BSIM4v5mGiven) here->BSIM4v5m = 1.0; if (!here->BSIM4v5nfGiven) here->BSIM4v5nf = 1.0; if (!here->BSIM4v5minGiven) here->BSIM4v5min = 0; /* integer */ if (!here->BSIM4v5icVDSGiven) here->BSIM4v5icVDS = 0.0; if (!here->BSIM4v5icVGSGiven) here->BSIM4v5icVGS = 0.0; if (!here->BSIM4v5icVBSGiven) here->BSIM4v5icVBS = 0.0; if (!here->BSIM4v5drainAreaGiven) here->BSIM4v5drainArea = 0.0; if (!here->BSIM4v5drainPerimeterGiven) here->BSIM4v5drainPerimeter = 0.0; if (!here->BSIM4v5drainSquaresGiven) here->BSIM4v5drainSquares = 1.0; if (!here->BSIM4v5sourceAreaGiven) here->BSIM4v5sourceArea = 0.0; if (!here->BSIM4v5sourcePerimeterGiven) here->BSIM4v5sourcePerimeter = 0.0; if (!here->BSIM4v5sourceSquaresGiven) here->BSIM4v5sourceSquares = 1.0; if (!here->BSIM4v5saGiven) here->BSIM4v5sa = 0.0; if (!here->BSIM4v5sbGiven) here->BSIM4v5sb = 0.0; if (!here->BSIM4v5sdGiven) here->BSIM4v5sd = 0.0; if (!here->BSIM4v5rbdbGiven) here->BSIM4v5rbdb = model->BSIM4v5rbdb; /* in ohm */ if (!here->BSIM4v5rbsbGiven) here->BSIM4v5rbsb = model->BSIM4v5rbsb; if (!here->BSIM4v5rbpbGiven) here->BSIM4v5rbpb = model->BSIM4v5rbpb; if (!here->BSIM4v5rbpsGiven) here->BSIM4v5rbps = model->BSIM4v5rbps; if (!here->BSIM4v5rbpdGiven) here->BSIM4v5rbpd = model->BSIM4v5rbpd; if (!here->BSIM4v5delvtoGiven) here->BSIM4v5delvto = 0.0; if (!here->BSIM4v5xgwGiven) here->BSIM4v5xgw = model->BSIM4v5xgw; if (!here->BSIM4v5ngconGiven) here->BSIM4v5ngcon = model->BSIM4v5ngcon; /* Process instance model selectors, some * may override their global counterparts */ if (!here->BSIM4v5rbodyModGiven) here->BSIM4v5rbodyMod = model->BSIM4v5rbodyMod; else if ((here->BSIM4v5rbodyMod != 0) && (here->BSIM4v5rbodyMod != 1) && (here->BSIM4v5rbodyMod != 2)) { here->BSIM4v5rbodyMod = model->BSIM4v5rbodyMod; printf("Warning: rbodyMod has been set to its global value %d.\n", model->BSIM4v5rbodyMod); } if (!here->BSIM4v5rgateModGiven) here->BSIM4v5rgateMod = model->BSIM4v5rgateMod; else if ((here->BSIM4v5rgateMod != 0) && (here->BSIM4v5rgateMod != 1) && (here->BSIM4v5rgateMod != 2) && (here->BSIM4v5rgateMod != 3)) { here->BSIM4v5rgateMod = model->BSIM4v5rgateMod; printf("Warning: rgateMod has been set to its global value %d.\n", model->BSIM4v5rgateMod); } if (!here->BSIM4v5geoModGiven) here->BSIM4v5geoMod = model->BSIM4v5geoMod; if (!here->BSIM4v5rgeoModGiven) here->BSIM4v5rgeoMod = model->BSIM4v5rgeoMod; else if ((here->BSIM4v5rgeoMod != 0) && (here->BSIM4v5rgeoMod != 1)) { here->BSIM4v5rgeoMod = model->BSIM4v5rgeoMod; printf("Warning: rgeoMod has been set to its global value %d.\n", model->BSIM4v5rgeoMod); } if (!here->BSIM4v5trnqsModGiven) here->BSIM4v5trnqsMod = model->BSIM4v5trnqsMod; else if ((here->BSIM4v5trnqsMod != 0) && (here->BSIM4v5trnqsMod != 1)) { here->BSIM4v5trnqsMod = model->BSIM4v5trnqsMod; printf("Warning: trnqsMod has been set to its global value %d.\n", model->BSIM4v5trnqsMod); } if (!here->BSIM4v5acnqsModGiven) here->BSIM4v5acnqsMod = model->BSIM4v5acnqsMod; else if ((here->BSIM4v5acnqsMod != 0) && (here->BSIM4v5acnqsMod != 1)) { here->BSIM4v5acnqsMod = model->BSIM4v5acnqsMod; printf("Warning: acnqsMod has been set to its global value %d.\n", model->BSIM4v5acnqsMod); } /* stress effect */ if (!here->BSIM4v5saGiven) here->BSIM4v5sa = 0.0; if (!here->BSIM4v5sbGiven) here->BSIM4v5sb = 0.0; if (!here->BSIM4v5sdGiven) here->BSIM4v5sd = 2 * model->BSIM4v5dmcg; /* Well Proximity Effect */ if (!here->BSIM4v5scaGiven) here->BSIM4v5sca = 0.0; if (!here->BSIM4v5scbGiven) here->BSIM4v5scb = 0.0; if (!here->BSIM4v5sccGiven) here->BSIM4v5scc = 0.0; if (!here->BSIM4v5scGiven) here->BSIM4v5sc = 0.0; /* m */ /* process drain series resistance */ createNode = 0; if ( (model->BSIM4v5rdsMod != 0) || (model->BSIM4v5tnoiMod != 0 && noiseAnalGiven)) { createNode = 1; } else if (model->BSIM4v5sheetResistance > 0) { if (here->BSIM4v5drainSquaresGiven && here->BSIM4v5drainSquares > 0) { createNode = 1; } else if (!here->BSIM4v5drainSquaresGiven && (here->BSIM4v5rgeoMod != 0)) { BSIM4v5RdseffGeo(here->BSIM4v5nf*here->BSIM4v5m, here->BSIM4v5geoMod, here->BSIM4v5rgeoMod, here->BSIM4v5min, here->BSIM4v5w, model->BSIM4v5sheetResistance, DMCGeff, DMCIeff, DMDGeff, 0, &Rtot); if(Rtot > 0) createNode = 1; } } if ( createNode != 0 ) { if (here->BSIM4v5dNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v5name,"drain"); if(error) return(error); here->BSIM4v5dNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->BSIM4v5dNodePrime = here->BSIM4v5dNode; } /* process source series resistance */ createNode = 0; if ( (model->BSIM4v5rdsMod != 0) || (model->BSIM4v5tnoiMod != 0 && noiseAnalGiven)) { createNode = 1; } else if (model->BSIM4v5sheetResistance > 0) { if (here->BSIM4v5sourceSquaresGiven && here->BSIM4v5sourceSquares > 0) { createNode = 1; } else if (!here->BSIM4v5sourceSquaresGiven && (here->BSIM4v5rgeoMod != 0)) { BSIM4v5RdseffGeo(here->BSIM4v5nf*here->BSIM4v5m, here->BSIM4v5geoMod, here->BSIM4v5rgeoMod, here->BSIM4v5min, here->BSIM4v5w, model->BSIM4v5sheetResistance, DMCGeff, DMCIeff, DMDGeff, 1, &Rtot); if(Rtot > 0) createNode = 1; } } if ( createNode != 0 ) { if (here->BSIM4v5sNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v5name,"source"); if(error) return(error); here->BSIM4v5sNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else here->BSIM4v5sNodePrime = here->BSIM4v5sNode; if (here->BSIM4v5rgateMod > 0) { if (here->BSIM4v5gNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v5name,"gate"); if(error) return(error); here->BSIM4v5gNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,2,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else here->BSIM4v5gNodePrime = here->BSIM4v5gNodeExt; if (here->BSIM4v5rgateMod == 3) { if (here->BSIM4v5gNodeMid == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v5name,"midgate"); if(error) return(error); here->BSIM4v5gNodeMid = tmp->number; } } else here->BSIM4v5gNodeMid = here->BSIM4v5gNodeExt; /* internal body nodes for body resistance model */ if ((here->BSIM4v5rbodyMod ==1) || (here->BSIM4v5rbodyMod ==2)) { if (here->BSIM4v5dbNode == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v5name,"dbody"); if(error) return(error); here->BSIM4v5dbNode = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,4,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } if (here->BSIM4v5bNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v5name,"body"); if(error) return(error); here->BSIM4v5bNodePrime = tmp->number; } if (here->BSIM4v5sbNode == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v5name,"sbody"); if(error) return(error); here->BSIM4v5sbNode = tmp->number; } } else here->BSIM4v5dbNode = here->BSIM4v5bNodePrime = here->BSIM4v5sbNode = here->BSIM4v5bNode; /* NQS node */ if (here->BSIM4v5trnqsMod) { if (here->BSIM4v5qNode == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v5name,"charge"); if(error) return(error); here->BSIM4v5qNode = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,5,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else here->BSIM4v5qNode = 0; /* set Sparse Matrix Pointers * macro to make elements with built-in out-of-memory test */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(BSIM4v5DPbpPtr, BSIM4v5dNodePrime, BSIM4v5bNodePrime); TSTALLOC(BSIM4v5GPbpPtr, BSIM4v5gNodePrime, BSIM4v5bNodePrime); TSTALLOC(BSIM4v5SPbpPtr, BSIM4v5sNodePrime, BSIM4v5bNodePrime); TSTALLOC(BSIM4v5BPdpPtr, BSIM4v5bNodePrime, BSIM4v5dNodePrime); TSTALLOC(BSIM4v5BPgpPtr, BSIM4v5bNodePrime, BSIM4v5gNodePrime); TSTALLOC(BSIM4v5BPspPtr, BSIM4v5bNodePrime, BSIM4v5sNodePrime); TSTALLOC(BSIM4v5BPbpPtr, BSIM4v5bNodePrime, BSIM4v5bNodePrime); TSTALLOC(BSIM4v5DdPtr, BSIM4v5dNode, BSIM4v5dNode); TSTALLOC(BSIM4v5GPgpPtr, BSIM4v5gNodePrime, BSIM4v5gNodePrime); TSTALLOC(BSIM4v5SsPtr, BSIM4v5sNode, BSIM4v5sNode); TSTALLOC(BSIM4v5DPdpPtr, BSIM4v5dNodePrime, BSIM4v5dNodePrime); TSTALLOC(BSIM4v5SPspPtr, BSIM4v5sNodePrime, BSIM4v5sNodePrime); TSTALLOC(BSIM4v5DdpPtr, BSIM4v5dNode, BSIM4v5dNodePrime); TSTALLOC(BSIM4v5GPdpPtr, BSIM4v5gNodePrime, BSIM4v5dNodePrime); TSTALLOC(BSIM4v5GPspPtr, BSIM4v5gNodePrime, BSIM4v5sNodePrime); TSTALLOC(BSIM4v5SspPtr, BSIM4v5sNode, BSIM4v5sNodePrime); TSTALLOC(BSIM4v5DPspPtr, BSIM4v5dNodePrime, BSIM4v5sNodePrime); TSTALLOC(BSIM4v5DPdPtr, BSIM4v5dNodePrime, BSIM4v5dNode); TSTALLOC(BSIM4v5DPgpPtr, BSIM4v5dNodePrime, BSIM4v5gNodePrime); TSTALLOC(BSIM4v5SPgpPtr, BSIM4v5sNodePrime, BSIM4v5gNodePrime); TSTALLOC(BSIM4v5SPsPtr, BSIM4v5sNodePrime, BSIM4v5sNode); TSTALLOC(BSIM4v5SPdpPtr, BSIM4v5sNodePrime, BSIM4v5dNodePrime); TSTALLOC(BSIM4v5QqPtr, BSIM4v5qNode, BSIM4v5qNode); TSTALLOC(BSIM4v5QbpPtr, BSIM4v5qNode, BSIM4v5bNodePrime) ; TSTALLOC(BSIM4v5QdpPtr, BSIM4v5qNode, BSIM4v5dNodePrime); TSTALLOC(BSIM4v5QspPtr, BSIM4v5qNode, BSIM4v5sNodePrime); TSTALLOC(BSIM4v5QgpPtr, BSIM4v5qNode, BSIM4v5gNodePrime); TSTALLOC(BSIM4v5DPqPtr, BSIM4v5dNodePrime, BSIM4v5qNode); TSTALLOC(BSIM4v5SPqPtr, BSIM4v5sNodePrime, BSIM4v5qNode); TSTALLOC(BSIM4v5GPqPtr, BSIM4v5gNodePrime, BSIM4v5qNode); if (here->BSIM4v5rgateMod != 0) { TSTALLOC(BSIM4v5GEgePtr, BSIM4v5gNodeExt, BSIM4v5gNodeExt); TSTALLOC(BSIM4v5GEgpPtr, BSIM4v5gNodeExt, BSIM4v5gNodePrime); TSTALLOC(BSIM4v5GPgePtr, BSIM4v5gNodePrime, BSIM4v5gNodeExt); TSTALLOC(BSIM4v5GEdpPtr, BSIM4v5gNodeExt, BSIM4v5dNodePrime); TSTALLOC(BSIM4v5GEspPtr, BSIM4v5gNodeExt, BSIM4v5sNodePrime); TSTALLOC(BSIM4v5GEbpPtr, BSIM4v5gNodeExt, BSIM4v5bNodePrime); TSTALLOC(BSIM4v5GMdpPtr, BSIM4v5gNodeMid, BSIM4v5dNodePrime); TSTALLOC(BSIM4v5GMgpPtr, BSIM4v5gNodeMid, BSIM4v5gNodePrime); TSTALLOC(BSIM4v5GMgmPtr, BSIM4v5gNodeMid, BSIM4v5gNodeMid); TSTALLOC(BSIM4v5GMgePtr, BSIM4v5gNodeMid, BSIM4v5gNodeExt); TSTALLOC(BSIM4v5GMspPtr, BSIM4v5gNodeMid, BSIM4v5sNodePrime); TSTALLOC(BSIM4v5GMbpPtr, BSIM4v5gNodeMid, BSIM4v5bNodePrime); TSTALLOC(BSIM4v5DPgmPtr, BSIM4v5dNodePrime, BSIM4v5gNodeMid); TSTALLOC(BSIM4v5GPgmPtr, BSIM4v5gNodePrime, BSIM4v5gNodeMid); TSTALLOC(BSIM4v5GEgmPtr, BSIM4v5gNodeExt, BSIM4v5gNodeMid); TSTALLOC(BSIM4v5SPgmPtr, BSIM4v5sNodePrime, BSIM4v5gNodeMid); TSTALLOC(BSIM4v5BPgmPtr, BSIM4v5bNodePrime, BSIM4v5gNodeMid); } if ((here->BSIM4v5rbodyMod ==1) || (here->BSIM4v5rbodyMod ==2)) { TSTALLOC(BSIM4v5DPdbPtr, BSIM4v5dNodePrime, BSIM4v5dbNode); TSTALLOC(BSIM4v5SPsbPtr, BSIM4v5sNodePrime, BSIM4v5sbNode); TSTALLOC(BSIM4v5DBdpPtr, BSIM4v5dbNode, BSIM4v5dNodePrime); TSTALLOC(BSIM4v5DBdbPtr, BSIM4v5dbNode, BSIM4v5dbNode); TSTALLOC(BSIM4v5DBbpPtr, BSIM4v5dbNode, BSIM4v5bNodePrime); TSTALLOC(BSIM4v5DBbPtr, BSIM4v5dbNode, BSIM4v5bNode); TSTALLOC(BSIM4v5BPdbPtr, BSIM4v5bNodePrime, BSIM4v5dbNode); TSTALLOC(BSIM4v5BPbPtr, BSIM4v5bNodePrime, BSIM4v5bNode); TSTALLOC(BSIM4v5BPsbPtr, BSIM4v5bNodePrime, BSIM4v5sbNode); TSTALLOC(BSIM4v5SBspPtr, BSIM4v5sbNode, BSIM4v5sNodePrime); TSTALLOC(BSIM4v5SBbpPtr, BSIM4v5sbNode, BSIM4v5bNodePrime); TSTALLOC(BSIM4v5SBbPtr, BSIM4v5sbNode, BSIM4v5bNode); TSTALLOC(BSIM4v5SBsbPtr, BSIM4v5sbNode, BSIM4v5sbNode); TSTALLOC(BSIM4v5BdbPtr, BSIM4v5bNode, BSIM4v5dbNode); TSTALLOC(BSIM4v5BbpPtr, BSIM4v5bNode, BSIM4v5bNodePrime); TSTALLOC(BSIM4v5BsbPtr, BSIM4v5bNode, BSIM4v5sbNode); TSTALLOC(BSIM4v5BbPtr, BSIM4v5bNode, BSIM4v5bNode); } if (model->BSIM4v5rdsMod) { TSTALLOC(BSIM4v5DgpPtr, BSIM4v5dNode, BSIM4v5gNodePrime); TSTALLOC(BSIM4v5DspPtr, BSIM4v5dNode, BSIM4v5sNodePrime); TSTALLOC(BSIM4v5DbpPtr, BSIM4v5dNode, BSIM4v5bNodePrime); TSTALLOC(BSIM4v5SdpPtr, BSIM4v5sNode, BSIM4v5dNodePrime); TSTALLOC(BSIM4v5SgpPtr, BSIM4v5sNode, BSIM4v5gNodePrime); TSTALLOC(BSIM4v5SbpPtr, BSIM4v5sNode, BSIM4v5bNodePrime); } } } #ifdef USE_OMP InstCount = 0; model = (BSIM4v5model*)inModel; /* loop through all the BSIM4v6 device models to count the number of instances */ for (; model != NULL; model = BSIM4v5nextModel(model)) { /* loop through all the instances of the model */ for (here = BSIM4v5instances(model); here != NULL; here = BSIM4v5nextInstance(here)) { InstCount++; } model->BSIM4v5InstCount = 0; model->BSIM4v5InstanceArray = NULL; } InstArray = TMALLOC(BSIM4v5instance*, InstCount); model = (BSIM4v5model*)inModel; /* store this in the first model only */ model->BSIM4v5InstCount = InstCount; model->BSIM4v5InstanceArray = InstArray; idx = 0; for (; model != NULL; model = BSIM4v5nextModel(model)) { /* loop through all the instances of the model */ for (here = BSIM4v5instances(model); here != NULL; here = BSIM4v5nextInstance(here)) { InstArray[idx] = here; idx++; } } #endif return(OK); } int BSIM4v5unsetup( GENmodel *inModel, CKTcircuit *ckt) { #ifndef HAS_BATCHSIM BSIM4v5model *model; BSIM4v5instance *here; #ifdef USE_OMP model = (BSIM4v5model*)inModel; tfree(model->BSIM4v5InstanceArray); #endif for (model = (BSIM4v5model *)inModel; model != NULL; model = BSIM4v5nextModel(model)) { for (here = BSIM4v5instances(model); here != NULL; here=BSIM4v5nextInstance(here)) { if (here->BSIM4v5qNode > 0) CKTdltNNum(ckt, here->BSIM4v5qNode); here->BSIM4v5qNode = 0; if (here->BSIM4v5sbNode > 0 && here->BSIM4v5sbNode != here->BSIM4v5bNode) CKTdltNNum(ckt, here->BSIM4v5sbNode); here->BSIM4v5sbNode = 0; if (here->BSIM4v5bNodePrime > 0 && here->BSIM4v5bNodePrime != here->BSIM4v5bNode) CKTdltNNum(ckt, here->BSIM4v5bNodePrime); here->BSIM4v5bNodePrime = 0; if (here->BSIM4v5dbNode > 0 && here->BSIM4v5dbNode != here->BSIM4v5bNode) CKTdltNNum(ckt, here->BSIM4v5dbNode); here->BSIM4v5dbNode = 0; if (here->BSIM4v5gNodeMid > 0 && here->BSIM4v5gNodeMid != here->BSIM4v5gNodeExt) CKTdltNNum(ckt, here->BSIM4v5gNodeMid); here->BSIM4v5gNodeMid = 0; if (here->BSIM4v5gNodePrime > 0 && here->BSIM4v5gNodePrime != here->BSIM4v5gNodeExt) CKTdltNNum(ckt, here->BSIM4v5gNodePrime); here->BSIM4v5gNodePrime = 0; if (here->BSIM4v5sNodePrime > 0 && here->BSIM4v5sNodePrime != here->BSIM4v5sNode) CKTdltNNum(ckt, here->BSIM4v5sNodePrime); here->BSIM4v5sNodePrime = 0; if (here->BSIM4v5dNodePrime > 0 && here->BSIM4v5dNodePrime != here->BSIM4v5dNode) CKTdltNNum(ckt, here->BSIM4v5dNodePrime); here->BSIM4v5dNodePrime = 0; } } #endif return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim4v5/b4v5noi.c0000644000175000017500000006541413546075722022120 0ustar carstencarsten/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ /********** * Copyright 2005 Regents of the University of California. All rights reserved. * File: b4noi.c of BSIM4.5.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, 07/29/2005. **********/ #include "ngspice/ngspice.h" #include "bsim4v5def.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" #include "ngspice/const.h" /* * WDL: 1/f noise model has been smoothed out and enhanced with * bulk charge effect as well as physical N* equ. and necessary * conversion into the SI unit system. */ static double BSIM4v5Eval1ovFNoise( double Vds, BSIM4v5model *model, BSIM4v5instance *here, double freq, double temp) { struct bsim4v5SizeDependParam *pParam; double cd, esat, DelClm, EffFreq, N0, Nl, Leff, Leffsq; double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi; pParam = here->pParam; cd = fabs(here->BSIM4v5cd); Leff = pParam->BSIM4v5leff - 2.0 * model->BSIM4v5lintnoi; Leffsq = Leff * Leff; esat = 2.0 * here->BSIM4v5vsattemp / here->BSIM4v5ueff; if(model->BSIM4v5em<=0.0) DelClm = 0.0; /* flicker noise modified -JX */ else { T0 = ((((Vds - here->BSIM4v5Vdseff) / pParam->BSIM4v5litl) + model->BSIM4v5em) / esat); DelClm = pParam->BSIM4v5litl * log (MAX(T0, N_MINLOG)); if (DelClm < 0.0) DelClm = 0.0; /* bugfix */ } EffFreq = pow(freq, model->BSIM4v5ef); T1 = CHARGE * CHARGE * CONSTboltz * cd * temp * here->BSIM4v5ueff; T2 = 1.0e10 * EffFreq * here->BSIM4v5Abulk * model->BSIM4v5coxe * Leffsq; N0 = model->BSIM4v5coxe * here->BSIM4v5Vgsteff / CHARGE; Nl = model->BSIM4v5coxe * here->BSIM4v5Vgsteff * (1.0 - here->BSIM4v5AbovVgst2Vtm * here->BSIM4v5Vdseff) / CHARGE; T3 = model->BSIM4v5oxideTrapDensityA * log(MAX(((N0 + here->BSIM4v5nstar) / (Nl + here->BSIM4v5nstar)), N_MINLOG)); T4 = model->BSIM4v5oxideTrapDensityB * (N0 - Nl); T5 = model->BSIM4v5oxideTrapDensityC * 0.5 * (N0 * N0 - Nl * Nl); T6 = CONSTboltz * temp * cd * cd; T7 = 1.0e10 * EffFreq * Leffsq * pParam->BSIM4v5weff * here->BSIM4v5nf; T8 = model->BSIM4v5oxideTrapDensityA + model->BSIM4v5oxideTrapDensityB * Nl + model->BSIM4v5oxideTrapDensityC * Nl * Nl; T9 = (Nl + here->BSIM4v5nstar) * (Nl + here->BSIM4v5nstar); Ssi = T1 / T2 * (T3 + T4 + T5) + T6 / T7 * DelClm * T8 / T9; return Ssi; } int BSIM4v5noise ( int mode, int operation, GENmodel *inModel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; BSIM4v5model *model = (BSIM4v5model *)inModel; BSIM4v5instance *here; struct bsim4v5SizeDependParam *pParam; double tempOnoise; double tempInoise; double noizDens[BSIM4v5NSRCS]; double lnNdens[BSIM4v5NSRCS]; double T0, T1, T2, T5, T10, T11; double Vds, Ssi, Swi; double tmp=0.0, gdpr, gspr, npart_theta=0.0, npart_beta=0.0, igsquare, bodymode; double m; int i; /* define the names of the noise sources */ static char *BSIM4v5nNames[BSIM4v5NSRCS] = { /* Note that we have to keep the order */ ".rd", /* noise due to rd */ ".rs", /* noise due to rs */ ".rg", /* noise due to rgeltd */ ".rbps", /* noise due to rbps */ ".rbpd", /* noise due to rbpd */ ".rbpb", /* noise due to rbpb */ ".rbsb", /* noise due to rbsb */ ".rbdb", /* noise due to rbdb */ ".id", /* noise due to id */ ".1overf", /* flicker (1/f) noise */ ".igs", /* shot noise due to IGS */ ".igd", /* shot noise due to IGD */ ".igb", /* shot noise due to IGB */ "" /* total transistor noise */ }; for (; model != NULL; model = BSIM4v5nextModel(model)) { for (here = BSIM4v5instances(model); here != NULL; here = BSIM4v5nextInstance(here)) { pParam = here->pParam; switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i = 0; i < BSIM4v5NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise.%s%s", here->BSIM4v5name, BSIM4v5nNames[i]); } break; case INT_NOIZ: for (i = 0; i < BSIM4v5NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total.%s%s", here->BSIM4v5name, BSIM4v5nNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total.%s%s", here->BSIM4v5name, BSIM4v5nNames[i]); } break; } } break; case N_CALC: m = here->BSIM4v5m; switch (mode) { case N_DENS: if (model->BSIM4v5tnoiMod == 0) { if (model->BSIM4v5rdsMod == 0) { gspr = here->BSIM4v5sourceConductance; gdpr = here->BSIM4v5drainConductance; if (here->BSIM4v5grdsw > 0.0) tmp = 1.0 / here->BSIM4v5grdsw; /* tmp used below */ else tmp = 0.0; } else { gspr = here->BSIM4v5gstot; gdpr = here->BSIM4v5gdtot; tmp = 0.0; } } else { T5 = here->BSIM4v5Vgsteff / here->BSIM4v5EsatL; T5 *= T5; npart_beta = model->BSIM4v5rnoia * (1.0 + T5 * model->BSIM4v5tnoia * pParam->BSIM4v5leff); npart_theta = model->BSIM4v5rnoib * (1.0 + T5 * model->BSIM4v5tnoib * pParam->BSIM4v5leff); if (model->BSIM4v5rdsMod == 0) { gspr = here->BSIM4v5sourceConductance; gdpr = here->BSIM4v5drainConductance; } else { gspr = here->BSIM4v5gstot; gdpr = here->BSIM4v5gdtot; } if ((*(ckt->CKTstates[0] + here->BSIM4v5vds)) >= 0.0) gspr = gspr / (1.0 + npart_theta * npart_theta * gspr / here->BSIM4v5IdovVds); /* bugfix */ else gdpr = gdpr / (1.0 + npart_theta * npart_theta * gdpr / here->BSIM4v5IdovVds); } NevalSrc(&noizDens[BSIM4v5RDNOIZ], &lnNdens[BSIM4v5RDNOIZ], ckt, THERMNOISE, here->BSIM4v5dNodePrime, here->BSIM4v5dNode, gdpr * m); NevalSrc(&noizDens[BSIM4v5RSNOIZ], &lnNdens[BSIM4v5RSNOIZ], ckt, THERMNOISE, here->BSIM4v5sNodePrime, here->BSIM4v5sNode, gspr * m); if ((here->BSIM4v5rgateMod == 1) || (here->BSIM4v5rgateMod == 2)) { NevalSrc(&noizDens[BSIM4v5RGNOIZ], &lnNdens[BSIM4v5RGNOIZ], ckt, THERMNOISE, here->BSIM4v5gNodePrime, here->BSIM4v5gNodeExt, here->BSIM4v5grgeltd * m); } else if (here->BSIM4v5rgateMod == 3) { NevalSrc(&noizDens[BSIM4v5RGNOIZ], &lnNdens[BSIM4v5RGNOIZ], ckt, THERMNOISE, here->BSIM4v5gNodeMid, here->BSIM4v5gNodeExt, here->BSIM4v5grgeltd * m); } else { noizDens[BSIM4v5RGNOIZ] = 0.0; lnNdens[BSIM4v5RGNOIZ] = log(MAX(noizDens[BSIM4v5RGNOIZ], N_MINLOG)); } bodymode = 5; if (here->BSIM4v5rbodyMod == 2) { if( ( !model->BSIM4v5rbps0Given) || ( !model->BSIM4v5rbpd0Given) ) bodymode = 1; else if( (!model->BSIM4v5rbsbx0Given && !model->BSIM4v5rbsby0Given) || (!model->BSIM4v5rbdbx0Given && !model->BSIM4v5rbdby0Given) ) bodymode = 3; } if (here->BSIM4v5rbodyMod) { if(bodymode == 5) { NevalSrc(&noizDens[BSIM4v5RBPSNOIZ], &lnNdens[BSIM4v5RBPSNOIZ], ckt, THERMNOISE, here->BSIM4v5bNodePrime, here->BSIM4v5sbNode, here->BSIM4v5grbps * m); NevalSrc(&noizDens[BSIM4v5RBPDNOIZ], &lnNdens[BSIM4v5RBPDNOIZ], ckt, THERMNOISE, here->BSIM4v5bNodePrime, here->BSIM4v5dbNode, here->BSIM4v5grbpd * m); NevalSrc(&noizDens[BSIM4v5RBPBNOIZ], &lnNdens[BSIM4v5RBPBNOIZ], ckt, THERMNOISE, here->BSIM4v5bNodePrime, here->BSIM4v5bNode, here->BSIM4v5grbpb * m); NevalSrc(&noizDens[BSIM4v5RBSBNOIZ], &lnNdens[BSIM4v5RBSBNOIZ], ckt, THERMNOISE, here->BSIM4v5bNode, here->BSIM4v5sbNode, here->BSIM4v5grbsb * m); NevalSrc(&noizDens[BSIM4v5RBDBNOIZ], &lnNdens[BSIM4v5RBDBNOIZ], ckt, THERMNOISE, here->BSIM4v5bNode, here->BSIM4v5dbNode, here->BSIM4v5grbdb * m); } if(bodymode == 3) { NevalSrc(&noizDens[BSIM4v5RBPSNOIZ], &lnNdens[BSIM4v5RBPSNOIZ], ckt, THERMNOISE, here->BSIM4v5bNodePrime, here->BSIM4v5sbNode, here->BSIM4v5grbps * m); NevalSrc(&noizDens[BSIM4v5RBPDNOIZ], &lnNdens[BSIM4v5RBPDNOIZ], ckt, THERMNOISE, here->BSIM4v5bNodePrime, here->BSIM4v5dbNode, here->BSIM4v5grbpd * m); NevalSrc(&noizDens[BSIM4v5RBPBNOIZ], &lnNdens[BSIM4v5RBPBNOIZ], ckt, THERMNOISE, here->BSIM4v5bNodePrime, here->BSIM4v5bNode, here->BSIM4v5grbpb * m); noizDens[BSIM4v5RBSBNOIZ] = noizDens[BSIM4v5RBDBNOIZ] = 0.0; lnNdens[BSIM4v5RBSBNOIZ] = log(MAX(noizDens[BSIM4v5RBSBNOIZ], N_MINLOG)); lnNdens[BSIM4v5RBDBNOIZ] = log(MAX(noizDens[BSIM4v5RBDBNOIZ], N_MINLOG)); } if(bodymode == 1) { NevalSrc(&noizDens[BSIM4v5RBPBNOIZ], &lnNdens[BSIM4v5RBPBNOIZ], ckt, THERMNOISE, here->BSIM4v5bNodePrime, here->BSIM4v5bNode, here->BSIM4v5grbpb * m); noizDens[BSIM4v5RBPSNOIZ] = noizDens[BSIM4v5RBPDNOIZ] = 0.0; noizDens[BSIM4v5RBSBNOIZ] = noizDens[BSIM4v5RBDBNOIZ] = 0.0; lnNdens[BSIM4v5RBPSNOIZ] = log(MAX(noizDens[BSIM4v5RBPSNOIZ], N_MINLOG)); lnNdens[BSIM4v5RBPDNOIZ] = log(MAX(noizDens[BSIM4v5RBPDNOIZ], N_MINLOG)); lnNdens[BSIM4v5RBSBNOIZ] = log(MAX(noizDens[BSIM4v5RBSBNOIZ], N_MINLOG)); lnNdens[BSIM4v5RBDBNOIZ] = log(MAX(noizDens[BSIM4v5RBDBNOIZ], N_MINLOG)); } } else { noizDens[BSIM4v5RBPSNOIZ] = noizDens[BSIM4v5RBPDNOIZ] = 0.0; noizDens[BSIM4v5RBPBNOIZ] = 0.0; noizDens[BSIM4v5RBSBNOIZ] = noizDens[BSIM4v5RBDBNOIZ] = 0.0; lnNdens[BSIM4v5RBPSNOIZ] = log(MAX(noizDens[BSIM4v5RBPSNOIZ], N_MINLOG)); lnNdens[BSIM4v5RBPDNOIZ] = log(MAX(noizDens[BSIM4v5RBPDNOIZ], N_MINLOG)); lnNdens[BSIM4v5RBPBNOIZ] = log(MAX(noizDens[BSIM4v5RBPBNOIZ], N_MINLOG)); lnNdens[BSIM4v5RBSBNOIZ] = log(MAX(noizDens[BSIM4v5RBSBNOIZ], N_MINLOG)); lnNdens[BSIM4v5RBDBNOIZ] = log(MAX(noizDens[BSIM4v5RBDBNOIZ], N_MINLOG)); } switch(model->BSIM4v5tnoiMod) { case 0: T0 = here->BSIM4v5ueff * fabs(here->BSIM4v5qinv); T1 = T0 * tmp + pParam->BSIM4v5leff * pParam->BSIM4v5leff; NevalSrc(&noizDens[BSIM4v5IDNOIZ], &lnNdens[BSIM4v5IDNOIZ], ckt, THERMNOISE, here->BSIM4v5dNodePrime, here->BSIM4v5sNodePrime, m * (T0 / T1) * model->BSIM4v5ntnoi); break; case 1: T0 = here->BSIM4v5gm + here->BSIM4v5gmbs + here->BSIM4v5gds; T0 *= T0; igsquare = npart_theta * npart_theta * T0 / here->BSIM4v5IdovVds; T1 = npart_beta * (here->BSIM4v5gm + here->BSIM4v5gmbs) + here->BSIM4v5gds; T2 = T1 * T1 / here->BSIM4v5IdovVds; NevalSrc(&noizDens[BSIM4v5IDNOIZ], &lnNdens[BSIM4v5IDNOIZ], ckt, THERMNOISE, here->BSIM4v5dNodePrime, here->BSIM4v5sNodePrime, m * (T2 - igsquare)); break; } NevalSrc(&noizDens[BSIM4v5FLNOIZ], NULL, ckt, N_GAIN, here->BSIM4v5dNodePrime, here->BSIM4v5sNodePrime, (double) 0.0); switch(model->BSIM4v5fnoiMod) { case 0: noizDens[BSIM4v5FLNOIZ] *= m * model->BSIM4v5kf * exp(model->BSIM4v5af * log(MAX(fabs(here->BSIM4v5cd), N_MINLOG))) / (pow(data->freq, model->BSIM4v5ef) * pParam->BSIM4v5leff * pParam->BSIM4v5leff * model->BSIM4v5coxe); break; case 1: Vds = *(ckt->CKTstates[0] + here->BSIM4v5vds); if (Vds < 0.0) Vds = -Vds; Ssi = BSIM4v5Eval1ovFNoise(Vds, model, here, data->freq, ckt->CKTtemp); T10 = model->BSIM4v5oxideTrapDensityA * CONSTboltz * ckt->CKTtemp; T11 = pParam->BSIM4v5weff * here->BSIM4v5nf * pParam->BSIM4v5leff * pow(data->freq, model->BSIM4v5ef) * 1.0e10 * here->BSIM4v5nstar * here->BSIM4v5nstar; Swi = T10 / T11 * here->BSIM4v5cd * here->BSIM4v5cd; T1 = Swi + Ssi; if (T1 > 0.0) noizDens[BSIM4v5FLNOIZ] *= m * (Ssi * Swi) / T1; else noizDens[BSIM4v5FLNOIZ] *= 0.0; break; } lnNdens[BSIM4v5FLNOIZ] = log(MAX(noizDens[BSIM4v5FLNOIZ], N_MINLOG)); if(here->BSIM4v5mode >= 0) { /* bugfix */ NevalSrc(&noizDens[BSIM4v5IGSNOIZ], &lnNdens[BSIM4v5IGSNOIZ], ckt, SHOTNOISE, here->BSIM4v5gNodePrime, here->BSIM4v5sNodePrime, m * (here->BSIM4v5Igs + here->BSIM4v5Igcs)); NevalSrc(&noizDens[BSIM4v5IGDNOIZ], &lnNdens[BSIM4v5IGDNOIZ], ckt, SHOTNOISE, here->BSIM4v5gNodePrime, here->BSIM4v5dNodePrime, m * (here->BSIM4v5Igd + here->BSIM4v5Igcd)); } else { NevalSrc(&noizDens[BSIM4v5IGSNOIZ], &lnNdens[BSIM4v5IGSNOIZ], ckt, SHOTNOISE, here->BSIM4v5gNodePrime, here->BSIM4v5sNodePrime, m * (here->BSIM4v5Igs + here->BSIM4v5Igcd)); NevalSrc(&noizDens[BSIM4v5IGDNOIZ], &lnNdens[BSIM4v5IGDNOIZ], ckt, SHOTNOISE, here->BSIM4v5gNodePrime, here->BSIM4v5dNodePrime, m * (here->BSIM4v5Igd + here->BSIM4v5Igcs)); } NevalSrc(&noizDens[BSIM4v5IGBNOIZ], &lnNdens[BSIM4v5IGBNOIZ], ckt, SHOTNOISE, here->BSIM4v5gNodePrime, here->BSIM4v5bNodePrime, m * here->BSIM4v5Igb); noizDens[BSIM4v5TOTNOIZ] = noizDens[BSIM4v5RDNOIZ] + noizDens[BSIM4v5RSNOIZ] + noizDens[BSIM4v5RGNOIZ] + noizDens[BSIM4v5RBPSNOIZ] + noizDens[BSIM4v5RBPDNOIZ] + noizDens[BSIM4v5RBPBNOIZ] + noizDens[BSIM4v5RBSBNOIZ] + noizDens[BSIM4v5RBDBNOIZ] + noizDens[BSIM4v5IDNOIZ] + noizDens[BSIM4v5FLNOIZ] + noizDens[BSIM4v5IGSNOIZ] + noizDens[BSIM4v5IGDNOIZ] + noizDens[BSIM4v5IGBNOIZ]; lnNdens[BSIM4v5TOTNOIZ] = log(MAX(noizDens[BSIM4v5TOTNOIZ], N_MINLOG)); *OnDens += noizDens[BSIM4v5TOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to initialize our "history" variables. */ for (i = 0; i < BSIM4v5NSRCS; i++) { here->BSIM4v5nVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i = 0; i < BSIM4v5NSRCS; i++) { here->BSIM4v5nVar[OUTNOIZ][i] = 0.0; here->BSIM4v5nVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0, we have to integrate. */ for (i = 0; i < BSIM4v5NSRCS; i++) { if (i != BSIM4v5TOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], here->BSIM4v5nVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv, lnNdens[i] + data->lnGainInv, here->BSIM4v5nVar[LNLSTDENS][i] + data->lnGainInv, data); here->BSIM4v5nVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { here->BSIM4v5nVar[OUTNOIZ][i] += tempOnoise; here->BSIM4v5nVar[OUTNOIZ][BSIM4v5TOTNOIZ] += tempOnoise; here->BSIM4v5nVar[INNOIZ][i] += tempInoise; here->BSIM4v5nVar[INNOIZ][BSIM4v5TOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i = 0; i < BSIM4v5NSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i = 0; i < BSIM4v5NSRCS; i++) { data->outpVector[data->outNumber++] = here->BSIM4v5nVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = here->BSIM4v5nVar[INNOIZ][i]; } } break; } break; case N_CLOSE: /* do nothing, the main calling routine will close */ return (OK); break; /* the plots */ } /* switch (operation) */ } /* for here */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v5/b4v5par.c0000644000175000017500000001475513546075722022117 0ustar carstencarsten/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ /********** * Copyright 2004 Regents of the University of California. All rights reserved. * File: b4par.c of BSIM4.5.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "bsim4v5def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/fteext.h" int BSIM4v5param( int param, IFvalue *value, GENinstance *inst, IFvalue *select) { double scale; BSIM4v5instance *here = (BSIM4v5instance*)inst; NG_IGNORE(select); if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; switch(param) { case BSIM4v5_W: here->BSIM4v5w = value->rValue*scale; here->BSIM4v5wGiven = TRUE; break; case BSIM4v5_L: here->BSIM4v5l = value->rValue*scale; here->BSIM4v5lGiven = TRUE; break; case BSIM4v5_M: here->BSIM4v5m = value->rValue; here->BSIM4v5mGiven = TRUE; break; case BSIM4v5_NF: here->BSIM4v5nf = value->rValue; here->BSIM4v5nfGiven = TRUE; break; case BSIM4v5_MIN: here->BSIM4v5min = value->iValue; here->BSIM4v5minGiven = TRUE; break; case BSIM4v5_AS: here->BSIM4v5sourceArea = value->rValue*scale*scale; here->BSIM4v5sourceAreaGiven = TRUE; break; case BSIM4v5_AD: here->BSIM4v5drainArea = value->rValue*scale*scale; here->BSIM4v5drainAreaGiven = TRUE; break; case BSIM4v5_PS: here->BSIM4v5sourcePerimeter = value->rValue*scale; here->BSIM4v5sourcePerimeterGiven = TRUE; break; case BSIM4v5_PD: here->BSIM4v5drainPerimeter = value->rValue*scale; here->BSIM4v5drainPerimeterGiven = TRUE; break; case BSIM4v5_NRS: here->BSIM4v5sourceSquares = value->rValue; here->BSIM4v5sourceSquaresGiven = TRUE; break; case BSIM4v5_NRD: here->BSIM4v5drainSquares = value->rValue; here->BSIM4v5drainSquaresGiven = TRUE; break; case BSIM4v5_OFF: here->BSIM4v5off = value->iValue; break; case BSIM4v5_SA: here->BSIM4v5sa = value->rValue*scale; here->BSIM4v5saGiven = TRUE; break; case BSIM4v5_SB: here->BSIM4v5sb = value->rValue*scale; here->BSIM4v5sbGiven = TRUE; break; case BSIM4v5_SD: here->BSIM4v5sd = value->rValue*scale; here->BSIM4v5sdGiven = TRUE; break; case BSIM4v5_SCA: here->BSIM4v5sca = value->rValue; here->BSIM4v5scaGiven = TRUE; break; case BSIM4v5_SCB: here->BSIM4v5scb = value->rValue; here->BSIM4v5scbGiven = TRUE; break; case BSIM4v5_SCC: here->BSIM4v5scc = value->rValue; here->BSIM4v5sccGiven = TRUE; break; case BSIM4v5_SC: here->BSIM4v5sc = value->rValue*scale; here->BSIM4v5scGiven = TRUE; break; case BSIM4v5_RBSB: here->BSIM4v5rbsb = value->rValue; here->BSIM4v5rbsbGiven = TRUE; break; case BSIM4v5_RBDB: here->BSIM4v5rbdb = value->rValue; here->BSIM4v5rbdbGiven = TRUE; break; case BSIM4v5_RBPB: here->BSIM4v5rbpb = value->rValue; here->BSIM4v5rbpbGiven = TRUE; break; case BSIM4v5_RBPS: here->BSIM4v5rbps = value->rValue; here->BSIM4v5rbpsGiven = TRUE; break; case BSIM4v5_RBPD: here->BSIM4v5rbpd = value->rValue; here->BSIM4v5rbpdGiven = TRUE; break; case BSIM4v5_DELVTO: here->BSIM4v5delvto = value->rValue; here->BSIM4v5delvtoGiven = TRUE; break; case BSIM4v5_XGW: here->BSIM4v5xgw = value->rValue; here->BSIM4v5xgwGiven = TRUE; break; case BSIM4v5_NGCON: here->BSIM4v5ngcon = value->rValue; here->BSIM4v5ngconGiven = TRUE; break; case BSIM4v5_TRNQSMOD: here->BSIM4v5trnqsMod = value->iValue; here->BSIM4v5trnqsModGiven = TRUE; break; case BSIM4v5_ACNQSMOD: here->BSIM4v5acnqsMod = value->iValue; here->BSIM4v5acnqsModGiven = TRUE; break; case BSIM4v5_RBODYMOD: here->BSIM4v5rbodyMod = value->iValue; here->BSIM4v5rbodyModGiven = TRUE; break; case BSIM4v5_RGATEMOD: here->BSIM4v5rgateMod = value->iValue; here->BSIM4v5rgateModGiven = TRUE; break; case BSIM4v5_GEOMOD: here->BSIM4v5geoMod = value->iValue; here->BSIM4v5geoModGiven = TRUE; break; case BSIM4v5_RGEOMOD: here->BSIM4v5rgeoMod = value->iValue; here->BSIM4v5rgeoModGiven = TRUE; break; case BSIM4v5_IC_VDS: here->BSIM4v5icVDS = value->rValue; here->BSIM4v5icVDSGiven = TRUE; break; case BSIM4v5_IC_VGS: here->BSIM4v5icVGS = value->rValue; here->BSIM4v5icVGSGiven = TRUE; break; case BSIM4v5_IC_VBS: here->BSIM4v5icVBS = value->rValue; here->BSIM4v5icVBSGiven = TRUE; break; case BSIM4v5_IC: switch(value->v.numValue) { case 3: here->BSIM4v5icVBS = *(value->v.vec.rVec+2); here->BSIM4v5icVBSGiven = TRUE; case 2: here->BSIM4v5icVGS = *(value->v.vec.rVec+1); here->BSIM4v5icVGSGiven = TRUE; case 1: here->BSIM4v5icVDS = *(value->v.vec.rVec); here->BSIM4v5icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v5/b4v5ld.c0000644000175000017500000064531513546075722021736 0ustar carstencarsten/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ /********** * Copyright 2005 Regents of the University of California. All rights reserved. * File: b4ld.c of BSIM4.5.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 02/06/2004. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4v5def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" /* #define MAX_EXP 2.688117142e+43 #define MIN_EXP 3.720075976e-44 #define EXP_THRESHOLD 100.0 */ #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define EPSSI 1.03594e-10 #define Charge_q 1.60219e-19 #define DELTA_1 0.02 #define DELTA_2 0.02 #define DELTA_3 0.02 #define DELTA_4 0.02 #define MM 3 /* smooth coeff */ #define DEXP(A,B,C) { \ if (A > EXP_THRESHOLD) { \ B = MAX_EXP*(1.0+(A)-EXP_THRESHOLD); \ C = MAX_EXP; \ } else if (A < -EXP_THRESHOLD) { \ B = MIN_EXP; \ C = 0; \ } else { \ B = exp(A); \ C = B; \ } \ } #ifdef USE_OMP int BSIM4v5LoadOMP(BSIM4v5instance *here, CKTcircuit *ckt); void BSIM4v5LoadRhsMat(GENmodel *inModel, CKTcircuit *ckt); #endif int BSIM4v5polyDepletion(double phi, double ngate,double coxe, double Vgs, double *Vgs_eff, double *dVgs_eff_dVg); int BSIM4v5load( GENmodel *inModel, CKTcircuit *ckt) { #ifdef USE_OMP int idx; BSIM4v5model *model = (BSIM4v5model*)inModel; int error = 0; BSIM4v5instance **InstArray; InstArray = model->BSIM4v5InstanceArray; #pragma omp parallel for for (idx = 0; idx < model->BSIM4v5InstCount; idx++) { BSIM4v5instance *here = InstArray[idx]; int local_error = BSIM4v5LoadOMP(here, ckt); if (local_error) error = local_error; } BSIM4v5LoadRhsMat(inModel, ckt); return error; } int BSIM4v5LoadOMP(BSIM4v5instance *here, CKTcircuit *ckt) { BSIM4v5model *model = BSIM4v5modPtr(here); #else BSIM4v5model *model = (BSIM4v5model*)inModel; BSIM4v5instance *here; #endif double ceqgstot, dgstot_dvd, dgstot_dvg, dgstot_dvs, dgstot_dvb; double ceqgdtot, dgdtot_dvd, dgdtot_dvg, dgdtot_dvs, dgdtot_dvb; double gstot, gstotd, gstotg, gstots, gstotb, gspr, Rs, Rd; double gdtot, gdtotd, gdtotg, gdtots, gdtotb, gdpr; double vgs_eff, vgd_eff, dvgs_eff_dvg, dvgd_eff_dvg; double dRs_dvg, dRd_dvg, dRs_dvb, dRd_dvb; double dT0_dvg, dT1_dvb, dT3_dvg, dT3_dvb; double vses, vdes, vdedo, delvses, delvded, delvdes; double Isestot=0.0, cseshat=0.0, Idedtot=0.0, cdedhat=0.0; #ifndef NEWCONV double tol0, tol1, tol2, tol3, tol4, tol5, tol6; #endif double geltd, gcrg, gcrgg, gcrgd, gcrgs, gcrgb, ceqgcrg; double vges, vgms, vgedo, vgmdo, vged, vgmd, delvged, delvgmd; double delvges, delvgms, vgmb; double gcgmgmb=0.0, gcgmdb=0.0, gcgmsb=0.0, gcdgmb, gcsgmb; double gcgmbb=0.0, gcbgmb, qgmb, qgmid=0.0, ceqqgmid; double vbd, vbs, vds, vgb, vgd, vgs, vgdo; #ifndef PREDICTOR double xfact; #endif double vdbs, vdbd, vsbs, vsbdo, vsbd; double delvdbs, delvdbd, delvsbs; double delvbd_jct, delvbs_jct, vbs_jct, vbd_jct; double SourceSatCurrent, DrainSatCurrent; double ag0, qgb, von, cbhat=0.0, VgstNVt, ExpVgst; double ceqqb, ceqqd, ceqqg, ceqqjd=0.0, ceqqjs=0.0, ceq, geq; double cdrain, cdhat=0.0, ceqdrn, ceqbd, ceqbs, ceqjd, ceqjs, gjbd, gjbs; double czbd, czbdsw, czbdswg, czbs, czbssw, czbsswg, evbd, evbs, arg, sarg; double delvbd, delvbs, delvds, delvgd, delvgs; double Vfbeff, dVfbeff_dVg, dVfbeff_dVb, V3, V4; double gcbdb, gcbgb, gcbsb, gcddb, gcdgb, gcdsb, gcgdb, gcggb, gcgsb, gcsdb; double gcgbb, gcdbb, gcsbb, gcbbb; double gcdbdb, gcsbsb; double gcsgb, gcssb, MJD, MJSWD, MJSWGD, MJS, MJSWS, MJSWGS; double qgate=0.0, qbulk=0.0, qdrn=0.0, qsrc, cqgate, cqbody, cqdrn; double Vdb, Vds, Vgs, Vbs, Gmbs, FwdSum, RevSum; double Igidl, Ggidld, Ggidlg, Ggidlb; double Voxacc=0.0, dVoxacc_dVg=0.0, dVoxacc_dVb=0.0; double Voxdepinv=0.0, dVoxdepinv_dVg=0.0, dVoxdepinv_dVd=0.0, dVoxdepinv_dVb=0.0; double VxNVt=0.0, ExpVxNVt, Vaux=0.0, dVaux_dVg=0.0, dVaux_dVd=0.0, dVaux_dVb=0.0; double Igc, dIgc_dVg, dIgc_dVd, dIgc_dVb; double Igcs, dIgcs_dVg, dIgcs_dVd, dIgcs_dVb; double Igcd, dIgcd_dVg, dIgcd_dVd, dIgcd_dVb; double Igs, dIgs_dVg, dIgs_dVs, Igd, dIgd_dVg, dIgd_dVd; double Igbacc, dIgbacc_dVg, dIgbacc_dVb; double Igbinv, dIgbinv_dVg, dIgbinv_dVd, dIgbinv_dVb; double Pigcd, dPigcd_dVg, dPigcd_dVd, dPigcd_dVb; double Istoteq, gIstotg, gIstotd, gIstots, gIstotb; double Idtoteq, gIdtotg, gIdtotd, gIdtots, gIdtotb; double Ibtoteq, gIbtotg, gIbtotd, gIbtots, gIbtotb; double Igtoteq, gIgtotg, gIgtotd, gIgtots, gIgtotb; double Igstot=0.0, cgshat=0.0, Igdtot=0.0, cgdhat=0.0, Igbtot=0.0, cgbhat=0.0; double Vgs_eff, Vfb=0.0, Vth_NarrowW; double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth, dVth_dVb, dVth_dVd; double Vgst, dVgst_dVg, dVgst_dVb, dVgs_eff_dVg, Nvtms, Nvtmd; double Vtm, Vtm0; double n, dn_dVb, dn_dVd, voffcv, noff, dnoff_dVd, dnoff_dVb; double V0, CoxWLcen, QovCox, LINK; double DeltaPhi, dDeltaPhi_dVg, VgDP, dVgDP_dVg; double Cox, Tox, Tcen, dTcen_dVg, dTcen_dVd, dTcen_dVb; double Ccen, Coxeff, dCoxeff_dVd, dCoxeff_dVg, dCoxeff_dVb; double Denomi, dDenomi_dVg, dDenomi_dVd, dDenomi_dVb; double ueff, dueff_dVg, dueff_dVd, dueff_dVb; double Esat, Vdsat; double EsatL, dEsatL_dVg, dEsatL_dVd, dEsatL_dVb; double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, Vasat, dAlphaz_dVg, dAlphaz_dVb; double dVasat_dVg, dVasat_dVb, dVasat_dVd, Va, dVa_dVd, dVa_dVg, dVa_dVb; double Vbseff, dVbseff_dVb, VbseffCV, dVbseffCV_dVb; double Arg1, One_Third_CoxWL, Two_Third_CoxWL, Alphaz, CoxWL; double T0=0.0, dT0_dVg, dT0_dVd, dT0_dVb; double T1, dT1_dVg, dT1_dVd, dT1_dVb; double T2, dT2_dVg, dT2_dVd, dT2_dVb; double T3, dT3_dVg, dT3_dVd, dT3_dVb; double T4, dT4_dVd, dT4_dVb; double T5, dT5_dVg, dT5_dVd, dT5_dVb; double T6, dT6_dVg, dT6_dVd, dT6_dVb; double T7, dT7_dVg, dT7_dVd, dT7_dVb; double T8, dT8_dVg, dT8_dVd, dT8_dVb; double T9, dT9_dVg, dT9_dVd, dT9_dVb; double T10, dT10_dVg, dT10_dVb, dT10_dVd; double T11, T12, T13, T14; double tmp, Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVb; double Cclm, dCclm_dVg, dCclm_dVd, dCclm_dVb; double FP, dFP_dVg, PvagTerm, dPvagTerm_dVg, dPvagTerm_dVd, dPvagTerm_dVb; double VADITS, dVADITS_dVg, dVADITS_dVd; double Lpe_Vb, dDITS_Sft_dVb, dDITS_Sft_dVd; double VACLM, dVACLM_dVg, dVACLM_dVd, dVACLM_dVb; double VADIBL, dVADIBL_dVg, dVADIBL_dVd, dVADIBL_dVb; double Xdep, dXdep_dVb, lt1, dlt1_dVb, ltw, dltw_dVb, Delt_vth, dDelt_vth_dVb; double Theta0, dTheta0_dVb; double TempRatio, tmp1, tmp2, tmp3, tmp4; double DIBL_Sft, dDIBL_Sft_dVd, Lambda, dLambda_dVg; double Idtot, Ibtot, a1, ScalingFactor; double Vgsteff, dVgsteff_dVg, dVgsteff_dVd, dVgsteff_dVb; double Vdseff, dVdseff_dVg, dVdseff_dVd, dVdseff_dVb; double VdseffCV, dVdseffCV_dVg, dVdseffCV_dVd, dVdseffCV_dVb; double diffVds, dAbulk_dVg; double beta, dbeta_dVg, dbeta_dVd, dbeta_dVb; double gche, dgche_dVg, dgche_dVd, dgche_dVb; double fgche1, dfgche1_dVg, dfgche1_dVd, dfgche1_dVb; double fgche2, dfgche2_dVg, dfgche2_dVd, dfgche2_dVb; double Idl, dIdl_dVg, dIdl_dVd, dIdl_dVb; double Idsa, dIdsa_dVg, dIdsa_dVd, dIdsa_dVb; double Ids, Gm, Gds, Gmb, devbs_dvb, devbd_dvb; double Isub, Gbd, Gbg, Gbb; double VASCBE, dVASCBE_dVg, dVASCBE_dVd, dVASCBE_dVb; double CoxeffWovL; double Rds, dRds_dVg, dRds_dVb, WVCox, WVCoxRds; double Vgst2Vtm, VdsatCV; double Leff, Weff, dWeff_dVg, dWeff_dVb; double AbulkCV, dAbulkCV_dVb; double qcheq, qdef, gqdef=0.0, cqdef=0.0, cqcheq=0.0; double gcqdb=0.0, gcqsb=0.0, gcqgb=0.0, gcqbb=0.0; double dxpart, sxpart, ggtg, ggtd, ggts, ggtb; double ddxpart_dVd, ddxpart_dVg, ddxpart_dVb, ddxpart_dVs; double dsxpart_dVd, dsxpart_dVg, dsxpart_dVb, dsxpart_dVs; double gbspsp, gbbdp, gbbsp, gbspg, gbspb, gbspdp; double gbdpdp, gbdpg, gbdpb, gbdpsp; double qgdo, qgso, cgdo, cgso; double Cgg, Cgd, Cgb, Cdg, Cdd, Cds; double Csg, Csd, Css, Csb, Cbg, Cbd, Cbb; double Cgg1, Cgb1, Cgd1, Cbg1, Cbb1, Cbd1, Qac0, Qsub0; double dQac0_dVg, dQac0_dVb, dQsub0_dVg, dQsub0_dVd, dQsub0_dVb; double ggidld, ggidlg, ggidlb, ggislg, ggislb, ggisls; double Igisl, Ggislg, Ggislb, Ggisls; double Nvtmrs, Nvtmrssw, Nvtmrsswg; double vs, Fsevl, dvs_dVg, dvs_dVd, dvs_dVb, dFsevl_dVg, dFsevl_dVd, dFsevl_dVb; double vgdx, vgsx; struct bsim4v5SizeDependParam *pParam; int ByPass, ChargeComputationNeeded, error, Check, Check1, Check2; double m; ScalingFactor = 1.0e-9; ChargeComputationNeeded = ((ckt->CKTmode & (MODEAC | MODETRAN | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) ? 1 : 0; ChargeComputationNeeded = 1; #ifndef USE_OMP for (; model != NULL; model = BSIM4v5nextModel(model)) { for (here = BSIM4v5instances(model); here != NULL; here = BSIM4v5nextInstance(here)) { #endif Check = Check1 = Check2 = 1; ByPass = 0; pParam = here->pParam; if ((ckt->CKTmode & MODEINITSMSIG)) { vds = *(ckt->CKTstate0 + here->BSIM4v5vds); vgs = *(ckt->CKTstate0 + here->BSIM4v5vgs); vbs = *(ckt->CKTstate0 + here->BSIM4v5vbs); vges = *(ckt->CKTstate0 + here->BSIM4v5vges); vgms = *(ckt->CKTstate0 + here->BSIM4v5vgms); vdbs = *(ckt->CKTstate0 + here->BSIM4v5vdbs); vsbs = *(ckt->CKTstate0 + here->BSIM4v5vsbs); vses = *(ckt->CKTstate0 + here->BSIM4v5vses); vdes = *(ckt->CKTstate0 + here->BSIM4v5vdes); qdef = *(ckt->CKTstate0 + here->BSIM4v5qdef); } else if ((ckt->CKTmode & MODEINITTRAN)) { vds = *(ckt->CKTstate1 + here->BSIM4v5vds); vgs = *(ckt->CKTstate1 + here->BSIM4v5vgs); vbs = *(ckt->CKTstate1 + here->BSIM4v5vbs); vges = *(ckt->CKTstate1 + here->BSIM4v5vges); vgms = *(ckt->CKTstate1 + here->BSIM4v5vgms); vdbs = *(ckt->CKTstate1 + here->BSIM4v5vdbs); vsbs = *(ckt->CKTstate1 + here->BSIM4v5vsbs); vses = *(ckt->CKTstate1 + here->BSIM4v5vses); vdes = *(ckt->CKTstate1 + here->BSIM4v5vdes); qdef = *(ckt->CKTstate1 + here->BSIM4v5qdef); } else if ((ckt->CKTmode & MODEINITJCT) && !here->BSIM4v5off) { vds = model->BSIM4v5type * here->BSIM4v5icVDS; vgs = vges = vgms = model->BSIM4v5type * here->BSIM4v5icVGS; vbs = vdbs = vsbs = model->BSIM4v5type * here->BSIM4v5icVBS; if (vds > 0.0) { vdes = vds + 0.01; vses = -0.01; } else if (vds < 0.0) { vdes = vds - 0.01; vses = 0.01; } else vdes = vses = 0.0; qdef = 0.0; if ((vds == 0.0) && (vgs == 0.0) && (vbs == 0.0) && ((ckt->CKTmode & (MODETRAN | MODEAC|MODEDCOP | MODEDCTRANCURVE)) || (!(ckt->CKTmode & MODEUIC)))) { vds = 0.1; vdes = 0.11; vses = -0.01; vgs = vges = vgms = model->BSIM4v5type * here->BSIM4v5vth0 + 0.1; vbs = vdbs = vsbs = 0.0; } } else if ((ckt->CKTmode & (MODEINITJCT | MODEINITFIX)) && (here->BSIM4v5off)) { vds = vgs = vbs = vges = vgms = 0.0; vdbs = vsbs = vdes = vses = qdef = 0.0; } else { #ifndef PREDICTOR if ((ckt->CKTmode & MODEINITPRED)) { xfact = ckt->CKTdelta / ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->BSIM4v5vds) = *(ckt->CKTstate1 + here->BSIM4v5vds); vds = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v5vds)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v5vds))); *(ckt->CKTstate0 + here->BSIM4v5vgs) = *(ckt->CKTstate1 + here->BSIM4v5vgs); vgs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v5vgs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v5vgs))); *(ckt->CKTstate0 + here->BSIM4v5vges) = *(ckt->CKTstate1 + here->BSIM4v5vges); vges = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v5vges)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v5vges))); *(ckt->CKTstate0 + here->BSIM4v5vgms) = *(ckt->CKTstate1 + here->BSIM4v5vgms); vgms = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v5vgms)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v5vgms))); *(ckt->CKTstate0 + here->BSIM4v5vbs) = *(ckt->CKTstate1 + here->BSIM4v5vbs); vbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v5vbs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v5vbs))); *(ckt->CKTstate0 + here->BSIM4v5vbd) = *(ckt->CKTstate0 + here->BSIM4v5vbs) - *(ckt->CKTstate0 + here->BSIM4v5vds); *(ckt->CKTstate0 + here->BSIM4v5vdbs) = *(ckt->CKTstate1 + here->BSIM4v5vdbs); vdbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v5vdbs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v5vdbs))); *(ckt->CKTstate0 + here->BSIM4v5vdbd) = *(ckt->CKTstate0 + here->BSIM4v5vdbs) - *(ckt->CKTstate0 + here->BSIM4v5vds); *(ckt->CKTstate0 + here->BSIM4v5vsbs) = *(ckt->CKTstate1 + here->BSIM4v5vsbs); vsbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v5vsbs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v5vsbs))); *(ckt->CKTstate0 + here->BSIM4v5vses) = *(ckt->CKTstate1 + here->BSIM4v5vses); vses = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v5vses)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v5vses))); *(ckt->CKTstate0 + here->BSIM4v5vdes) = *(ckt->CKTstate1 + here->BSIM4v5vdes); vdes = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v5vdes)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v5vdes))); *(ckt->CKTstate0 + here->BSIM4v5qdef) = *(ckt->CKTstate1 + here->BSIM4v5qdef); qdef = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v5qdef)) -(xfact * (*(ckt->CKTstate2 + here->BSIM4v5qdef))); } else { #endif /* PREDICTOR */ vds = model->BSIM4v5type * (*(ckt->CKTrhsOld + here->BSIM4v5dNodePrime) - *(ckt->CKTrhsOld + here->BSIM4v5sNodePrime)); vgs = model->BSIM4v5type * (*(ckt->CKTrhsOld + here->BSIM4v5gNodePrime) - *(ckt->CKTrhsOld + here->BSIM4v5sNodePrime)); vbs = model->BSIM4v5type * (*(ckt->CKTrhsOld + here->BSIM4v5bNodePrime) - *(ckt->CKTrhsOld + here->BSIM4v5sNodePrime)); vges = model->BSIM4v5type * (*(ckt->CKTrhsOld + here->BSIM4v5gNodeExt) - *(ckt->CKTrhsOld + here->BSIM4v5sNodePrime)); vgms = model->BSIM4v5type * (*(ckt->CKTrhsOld + here->BSIM4v5gNodeMid) - *(ckt->CKTrhsOld + here->BSIM4v5sNodePrime)); vdbs = model->BSIM4v5type * (*(ckt->CKTrhsOld + here->BSIM4v5dbNode) - *(ckt->CKTrhsOld + here->BSIM4v5sNodePrime)); vsbs = model->BSIM4v5type * (*(ckt->CKTrhsOld + here->BSIM4v5sbNode) - *(ckt->CKTrhsOld + here->BSIM4v5sNodePrime)); vses = model->BSIM4v5type * (*(ckt->CKTrhsOld + here->BSIM4v5sNode) - *(ckt->CKTrhsOld + here->BSIM4v5sNodePrime)); vdes = model->BSIM4v5type * (*(ckt->CKTrhsOld + here->BSIM4v5dNode) - *(ckt->CKTrhsOld + here->BSIM4v5sNodePrime)); qdef = model->BSIM4v5type * (*(ckt->CKTrhsOld + here->BSIM4v5qNode)); #ifndef PREDICTOR } #endif /* PREDICTOR */ vgdo = *(ckt->CKTstate0 + here->BSIM4v5vgs) - *(ckt->CKTstate0 + here->BSIM4v5vds); vgedo = *(ckt->CKTstate0 + here->BSIM4v5vges) - *(ckt->CKTstate0 + here->BSIM4v5vds); vgmdo = *(ckt->CKTstate0 + here->BSIM4v5vgms) - *(ckt->CKTstate0 + here->BSIM4v5vds); vbd = vbs - vds; vdbd = vdbs - vds; vgd = vgs - vds; vged = vges - vds; vgmd = vgms - vds; delvbd = vbd - *(ckt->CKTstate0 + here->BSIM4v5vbd); delvdbd = vdbd - *(ckt->CKTstate0 + here->BSIM4v5vdbd); delvgd = vgd - vgdo; delvged = vged - vgedo; delvgmd = vgmd - vgmdo; delvds = vds - *(ckt->CKTstate0 + here->BSIM4v5vds); delvgs = vgs - *(ckt->CKTstate0 + here->BSIM4v5vgs); delvges = vges - *(ckt->CKTstate0 + here->BSIM4v5vges); delvgms = vgms - *(ckt->CKTstate0 + here->BSIM4v5vgms); delvbs = vbs - *(ckt->CKTstate0 + here->BSIM4v5vbs); delvdbs = vdbs - *(ckt->CKTstate0 + here->BSIM4v5vdbs); delvsbs = vsbs - *(ckt->CKTstate0 + here->BSIM4v5vsbs); delvses = vses - (*(ckt->CKTstate0 + here->BSIM4v5vses)); vdedo = *(ckt->CKTstate0 + here->BSIM4v5vdes) - *(ckt->CKTstate0 + here->BSIM4v5vds); delvdes = vdes - *(ckt->CKTstate0 + here->BSIM4v5vdes); delvded = vdes - vds - vdedo; delvbd_jct = (!here->BSIM4v5rbodyMod) ? delvbd : delvdbd; delvbs_jct = (!here->BSIM4v5rbodyMod) ? delvbs : delvsbs; if (here->BSIM4v5mode >= 0) { Idtot = here->BSIM4v5cd + here->BSIM4v5csub - here->BSIM4v5cbd + here->BSIM4v5Igidl; cdhat = Idtot - here->BSIM4v5gbd * delvbd_jct + (here->BSIM4v5gmbs + here->BSIM4v5gbbs + here->BSIM4v5ggidlb) * delvbs + (here->BSIM4v5gm + here->BSIM4v5gbgs + here->BSIM4v5ggidlg) * delvgs + (here->BSIM4v5gds + here->BSIM4v5gbds + here->BSIM4v5ggidld) * delvds; Ibtot = here->BSIM4v5cbs + here->BSIM4v5cbd - here->BSIM4v5Igidl - here->BSIM4v5Igisl - here->BSIM4v5csub; cbhat = Ibtot + here->BSIM4v5gbd * delvbd_jct + here->BSIM4v5gbs * delvbs_jct - (here->BSIM4v5gbbs + here->BSIM4v5ggidlb) * delvbs - (here->BSIM4v5gbgs + here->BSIM4v5ggidlg) * delvgs - (here->BSIM4v5gbds + here->BSIM4v5ggidld - here->BSIM4v5ggisls) * delvds - here->BSIM4v5ggislg * delvgd - here->BSIM4v5ggislb* delvbd; Igstot = here->BSIM4v5Igs + here->BSIM4v5Igcs; cgshat = Igstot + (here->BSIM4v5gIgsg + here->BSIM4v5gIgcsg) * delvgs + here->BSIM4v5gIgcsd * delvds + here->BSIM4v5gIgcsb * delvbs; Igdtot = here->BSIM4v5Igd + here->BSIM4v5Igcd; cgdhat = Igdtot + here->BSIM4v5gIgdg * delvgd + here->BSIM4v5gIgcdg * delvgs + here->BSIM4v5gIgcdd * delvds + here->BSIM4v5gIgcdb * delvbs; Igbtot = here->BSIM4v5Igb; cgbhat = here->BSIM4v5Igb + here->BSIM4v5gIgbg * delvgs + here->BSIM4v5gIgbd * delvds + here->BSIM4v5gIgbb * delvbs; } else { Idtot = here->BSIM4v5cd + here->BSIM4v5cbd - here->BSIM4v5Igidl; /* bugfix */ cdhat = Idtot + here->BSIM4v5gbd * delvbd_jct + here->BSIM4v5gmbs * delvbd + here->BSIM4v5gm * delvgd - (here->BSIM4v5gds + here->BSIM4v5ggidls) * delvds - here->BSIM4v5ggidlg * delvgs - here->BSIM4v5ggidlb * delvbs; Ibtot = here->BSIM4v5cbs + here->BSIM4v5cbd - here->BSIM4v5Igidl - here->BSIM4v5Igisl - here->BSIM4v5csub; cbhat = Ibtot + here->BSIM4v5gbs * delvbs_jct + here->BSIM4v5gbd * delvbd_jct - (here->BSIM4v5gbbs + here->BSIM4v5ggislb) * delvbd - (here->BSIM4v5gbgs + here->BSIM4v5ggislg) * delvgd + (here->BSIM4v5gbds + here->BSIM4v5ggisld - here->BSIM4v5ggidls) * delvds - here->BSIM4v5ggidlg * delvgs - here->BSIM4v5ggidlb * delvbs; Igstot = here->BSIM4v5Igs + here->BSIM4v5Igcd; cgshat = Igstot + here->BSIM4v5gIgsg * delvgs + here->BSIM4v5gIgcdg * delvgd - here->BSIM4v5gIgcdd * delvds + here->BSIM4v5gIgcdb * delvbd; Igdtot = here->BSIM4v5Igd + here->BSIM4v5Igcs; cgdhat = Igdtot + (here->BSIM4v5gIgdg + here->BSIM4v5gIgcsg) * delvgd - here->BSIM4v5gIgcsd * delvds + here->BSIM4v5gIgcsb * delvbd; Igbtot = here->BSIM4v5Igb; cgbhat = here->BSIM4v5Igb + here->BSIM4v5gIgbg * delvgd - here->BSIM4v5gIgbd * delvds + here->BSIM4v5gIgbb * delvbd; } Isestot = here->BSIM4v5gstot * (*(ckt->CKTstate0 + here->BSIM4v5vses)); cseshat = Isestot + here->BSIM4v5gstot * delvses + here->BSIM4v5gstotd * delvds + here->BSIM4v5gstotg * delvgs + here->BSIM4v5gstotb * delvbs; Idedtot = here->BSIM4v5gdtot * vdedo; cdedhat = Idedtot + here->BSIM4v5gdtot * delvded + here->BSIM4v5gdtotd * delvds + here->BSIM4v5gdtotg * delvgs + here->BSIM4v5gdtotb * delvbs; #ifndef NOBYPASS /* Following should be one IF statement, but some C compilers * can't handle that all at once, so we split it into several * successive IF's */ if ((!(ckt->CKTmode & MODEINITPRED)) && (ckt->CKTbypass)) if ((fabs(delvds) < (ckt->CKTreltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0 + here->BSIM4v5vds))) + ckt->CKTvoltTol))) if ((fabs(delvgs) < (ckt->CKTreltol * MAX(fabs(vgs), fabs(*(ckt->CKTstate0 + here->BSIM4v5vgs))) + ckt->CKTvoltTol))) if ((fabs(delvbs) < (ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0 + here->BSIM4v5vbs))) + ckt->CKTvoltTol))) if ((fabs(delvbd) < (ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0 + here->BSIM4v5vbd))) + ckt->CKTvoltTol))) if ((here->BSIM4v5rgateMod == 0) || (here->BSIM4v5rgateMod == 1) || (fabs(delvges) < (ckt->CKTreltol * MAX(fabs(vges), fabs(*(ckt->CKTstate0 + here->BSIM4v5vges))) + ckt->CKTvoltTol))) if ((here->BSIM4v5rgateMod != 3) || (fabs(delvgms) < (ckt->CKTreltol * MAX(fabs(vgms), fabs(*(ckt->CKTstate0 + here->BSIM4v5vgms))) + ckt->CKTvoltTol))) if ((!here->BSIM4v5rbodyMod) || (fabs(delvdbs) < (ckt->CKTreltol * MAX(fabs(vdbs), fabs(*(ckt->CKTstate0 + here->BSIM4v5vdbs))) + ckt->CKTvoltTol))) if ((!here->BSIM4v5rbodyMod) || (fabs(delvdbd) < (ckt->CKTreltol * MAX(fabs(vdbd), fabs(*(ckt->CKTstate0 + here->BSIM4v5vdbd))) + ckt->CKTvoltTol))) if ((!here->BSIM4v5rbodyMod) || (fabs(delvsbs) < (ckt->CKTreltol * MAX(fabs(vsbs), fabs(*(ckt->CKTstate0 + here->BSIM4v5vsbs))) + ckt->CKTvoltTol))) if ((!model->BSIM4v5rdsMod) || (fabs(delvses) < (ckt->CKTreltol * MAX(fabs(vses), fabs(*(ckt->CKTstate0 + here->BSIM4v5vses))) + ckt->CKTvoltTol))) if ((!model->BSIM4v5rdsMod) || (fabs(delvdes) < (ckt->CKTreltol * MAX(fabs(vdes), fabs(*(ckt->CKTstate0 + here->BSIM4v5vdes))) + ckt->CKTvoltTol))) if ((fabs(cdhat - Idtot) < ckt->CKTreltol * MAX(fabs(cdhat), fabs(Idtot)) + ckt->CKTabstol)) if ((fabs(cbhat - Ibtot) < ckt->CKTreltol * MAX(fabs(cbhat), fabs(Ibtot)) + ckt->CKTabstol)) if ((!model->BSIM4v5igcMod) || ((fabs(cgshat - Igstot) < ckt->CKTreltol * MAX(fabs(cgshat), fabs(Igstot)) + ckt->CKTabstol))) if ((!model->BSIM4v5igcMod) || ((fabs(cgdhat - Igdtot) < ckt->CKTreltol * MAX(fabs(cgdhat), fabs(Igdtot)) + ckt->CKTabstol))) if ((!model->BSIM4v5igbMod) || ((fabs(cgbhat - Igbtot) < ckt->CKTreltol * MAX(fabs(cgbhat), fabs(Igbtot)) + ckt->CKTabstol))) if ((!model->BSIM4v5rdsMod) || ((fabs(cseshat - Isestot) < ckt->CKTreltol * MAX(fabs(cseshat), fabs(Isestot)) + ckt->CKTabstol))) if ((!model->BSIM4v5rdsMod) || ((fabs(cdedhat - Idedtot) < ckt->CKTreltol * MAX(fabs(cdedhat), fabs(Idedtot)) + ckt->CKTabstol))) { vds = *(ckt->CKTstate0 + here->BSIM4v5vds); vgs = *(ckt->CKTstate0 + here->BSIM4v5vgs); vbs = *(ckt->CKTstate0 + here->BSIM4v5vbs); vges = *(ckt->CKTstate0 + here->BSIM4v5vges); vgms = *(ckt->CKTstate0 + here->BSIM4v5vgms); vbd = *(ckt->CKTstate0 + here->BSIM4v5vbd); vdbs = *(ckt->CKTstate0 + here->BSIM4v5vdbs); vdbd = *(ckt->CKTstate0 + here->BSIM4v5vdbd); vsbs = *(ckt->CKTstate0 + here->BSIM4v5vsbs); vses = *(ckt->CKTstate0 + here->BSIM4v5vses); vdes = *(ckt->CKTstate0 + here->BSIM4v5vdes); vgd = vgs - vds; vgb = vgs - vbs; vged = vges - vds; vgmd = vgms - vds; vgmb = vgms - vbs; vbs_jct = (!here->BSIM4v5rbodyMod) ? vbs : vsbs; vbd_jct = (!here->BSIM4v5rbodyMod) ? vbd : vdbd; /*** qdef should not be kept fixed even if vgs, vds & vbs has converged **** qdef = *(ckt->CKTstate0 + here->BSIM4v5qdef); ***/ cdrain = here->BSIM4v5cd; if ((ckt->CKTmode & (MODETRAN | MODEAC)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) { ByPass = 1; qgate = here->BSIM4v5qgate; qbulk = here->BSIM4v5qbulk; qdrn = here->BSIM4v5qdrn; cgdo = here->BSIM4v5cgdo; qgdo = here->BSIM4v5qgdo; cgso = here->BSIM4v5cgso; qgso = here->BSIM4v5qgso; goto line755; } else goto line850; } #endif /*NOBYPASS*/ von = here->BSIM4v5von; if (*(ckt->CKTstate0 + here->BSIM4v5vds) >= 0.0) { vgs = DEVfetlim(vgs, *(ckt->CKTstate0 + here->BSIM4v5vgs), von); vds = vgs - vgd; vds = DEVlimvds(vds, *(ckt->CKTstate0 + here->BSIM4v5vds)); vgd = vgs - vds; if (here->BSIM4v5rgateMod == 3) { vges = DEVfetlim(vges, *(ckt->CKTstate0 + here->BSIM4v5vges), von); vgms = DEVfetlim(vgms, *(ckt->CKTstate0 + here->BSIM4v5vgms), von); vged = vges - vds; vgmd = vgms - vds; } else if ((here->BSIM4v5rgateMod == 1) || (here->BSIM4v5rgateMod == 2)) { vges = DEVfetlim(vges, *(ckt->CKTstate0 + here->BSIM4v5vges), von); vged = vges - vds; } if (model->BSIM4v5rdsMod) { vdes = DEVlimvds(vdes, *(ckt->CKTstate0 + here->BSIM4v5vdes)); vses = -DEVlimvds(-vses, -(*(ckt->CKTstate0 + here->BSIM4v5vses))); } } else { vgd = DEVfetlim(vgd, vgdo, von); vds = vgs - vgd; vds = -DEVlimvds(-vds, -(*(ckt->CKTstate0 + here->BSIM4v5vds))); vgs = vgd + vds; if (here->BSIM4v5rgateMod == 3) { vged = DEVfetlim(vged, vgedo, von); vges = vged + vds; vgmd = DEVfetlim(vgmd, vgmdo, von); vgms = vgmd + vds; } if ((here->BSIM4v5rgateMod == 1) || (here->BSIM4v5rgateMod == 2)) { vged = DEVfetlim(vged, vgedo, von); vges = vged + vds; } if (model->BSIM4v5rdsMod) { vdes = -DEVlimvds(-vdes, -(*(ckt->CKTstate0 + here->BSIM4v5vdes))); vses = DEVlimvds(vses, *(ckt->CKTstate0 + here->BSIM4v5vses)); } } if (vds >= 0.0) { vbs = DEVpnjlim(vbs, *(ckt->CKTstate0 + here->BSIM4v5vbs), CONSTvt0, model->BSIM4v5vcrit, &Check); vbd = vbs - vds; if (here->BSIM4v5rbodyMod) { vdbs = DEVpnjlim(vdbs, *(ckt->CKTstate0 + here->BSIM4v5vdbs), CONSTvt0, model->BSIM4v5vcrit, &Check1); vdbd = vdbs - vds; vsbs = DEVpnjlim(vsbs, *(ckt->CKTstate0 + here->BSIM4v5vsbs), CONSTvt0, model->BSIM4v5vcrit, &Check2); if ((Check1 == 0) && (Check2 == 0)) Check = 0; else Check = 1; } } else { vbd = DEVpnjlim(vbd, *(ckt->CKTstate0 + here->BSIM4v5vbd), CONSTvt0, model->BSIM4v5vcrit, &Check); vbs = vbd + vds; if (here->BSIM4v5rbodyMod) { vdbd = DEVpnjlim(vdbd, *(ckt->CKTstate0 + here->BSIM4v5vdbd), CONSTvt0, model->BSIM4v5vcrit, &Check1); vdbs = vdbd + vds; vsbdo = *(ckt->CKTstate0 + here->BSIM4v5vsbs) - *(ckt->CKTstate0 + here->BSIM4v5vds); vsbd = vsbs - vds; vsbd = DEVpnjlim(vsbd, vsbdo, CONSTvt0, model->BSIM4v5vcrit, &Check2); vsbs = vsbd + vds; if ((Check1 == 0) && (Check2 == 0)) Check = 0; else Check = 1; } } } /* Calculate DC currents and their derivatives */ vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; vged = vges - vds; vgmd = vgms - vds; vgmb = vgms - vbs; vdbd = vdbs - vds; vbs_jct = (!here->BSIM4v5rbodyMod) ? vbs : vsbs; vbd_jct = (!here->BSIM4v5rbodyMod) ? vbd : vdbd; /* Source/drain junction diode DC model begins */ Nvtms = model->BSIM4v5vtm * model->BSIM4v5SjctEmissionCoeff; if ((here->BSIM4v5Aseff <= 0.0) && (here->BSIM4v5Pseff <= 0.0)) { SourceSatCurrent = 1.0e-14; } else { SourceSatCurrent = here->BSIM4v5Aseff * model->BSIM4v5SjctTempSatCurDensity + here->BSIM4v5Pseff * model->BSIM4v5SjctSidewallTempSatCurDensity + pParam->BSIM4v5weffCJ * here->BSIM4v5nf * model->BSIM4v5SjctGateSidewallTempSatCurDensity; } if (SourceSatCurrent <= 0.0) { here->BSIM4v5gbs = ckt->CKTgmin; here->BSIM4v5cbs = here->BSIM4v5gbs * vbs_jct; } else { switch(model->BSIM4v5dioMod) { case 0: evbs = exp(vbs_jct / Nvtms); T1 = model->BSIM4v5xjbvs * exp(-(model->BSIM4v5bvs + vbs_jct) / Nvtms); /* WDLiu: Magic T1 in this form; different from BSIM4v5 beta. */ here->BSIM4v5gbs = SourceSatCurrent * (evbs + T1) / Nvtms + ckt->CKTgmin; here->BSIM4v5cbs = SourceSatCurrent * (evbs + here->BSIM4v5XExpBVS - T1 - 1.0) + ckt->CKTgmin * vbs_jct; break; case 1: T2 = vbs_jct / Nvtms; if (T2 < -EXP_THRESHOLD) { here->BSIM4v5gbs = ckt->CKTgmin; here->BSIM4v5cbs = SourceSatCurrent * (MIN_EXP - 1.0) + ckt->CKTgmin * vbs_jct; } else if (vbs_jct <= here->BSIM4v5vjsmFwd) { evbs = exp(T2); here->BSIM4v5gbs = SourceSatCurrent * evbs / Nvtms + ckt->CKTgmin; here->BSIM4v5cbs = SourceSatCurrent * (evbs - 1.0) + ckt->CKTgmin * vbs_jct; } else { T0 = here->BSIM4v5IVjsmFwd / Nvtms; here->BSIM4v5gbs = T0 + ckt->CKTgmin; here->BSIM4v5cbs = here->BSIM4v5IVjsmFwd - SourceSatCurrent + T0 * (vbs_jct - here->BSIM4v5vjsmFwd) + ckt->CKTgmin * vbs_jct; } break; case 2: if (vbs_jct < here->BSIM4v5vjsmRev) { T0 = vbs_jct / Nvtms; if (T0 < -EXP_THRESHOLD) { evbs = MIN_EXP; devbs_dvb = 0.0; } else { evbs = exp(T0); devbs_dvb = evbs / Nvtms; } T1 = evbs - 1.0; T2 = here->BSIM4v5IVjsmRev + here->BSIM4v5SslpRev * (vbs_jct - here->BSIM4v5vjsmRev); here->BSIM4v5gbs = devbs_dvb * T2 + T1 * here->BSIM4v5SslpRev + ckt->CKTgmin; here->BSIM4v5cbs = T1 * T2 + ckt->CKTgmin * vbs_jct; } else if (vbs_jct <= here->BSIM4v5vjsmFwd) { T0 = vbs_jct / Nvtms; if (T0 < -EXP_THRESHOLD) { evbs = MIN_EXP; devbs_dvb = 0.0; } else { evbs = exp(T0); devbs_dvb = evbs / Nvtms; } T1 = (model->BSIM4v5bvs + vbs_jct) / Nvtms; if (T1 > EXP_THRESHOLD) { T2 = MIN_EXP; T3 = 0.0; } else { T2 = exp(-T1); T3 = -T2 /Nvtms; } here->BSIM4v5gbs = SourceSatCurrent * (devbs_dvb - model->BSIM4v5xjbvs * T3) + ckt->CKTgmin; here->BSIM4v5cbs = SourceSatCurrent * (evbs + here->BSIM4v5XExpBVS - 1.0 - model->BSIM4v5xjbvs * T2) + ckt->CKTgmin * vbs_jct; } else { here->BSIM4v5gbs = here->BSIM4v5SslpFwd + ckt->CKTgmin; here->BSIM4v5cbs = here->BSIM4v5IVjsmFwd + here->BSIM4v5SslpFwd * (vbs_jct - here->BSIM4v5vjsmFwd) + ckt->CKTgmin * vbs_jct; } break; default: break; } } Nvtmd = model->BSIM4v5vtm * model->BSIM4v5DjctEmissionCoeff; if ((here->BSIM4v5Adeff <= 0.0) && (here->BSIM4v5Pdeff <= 0.0)) { DrainSatCurrent = 1.0e-14; } else { DrainSatCurrent = here->BSIM4v5Adeff * model->BSIM4v5DjctTempSatCurDensity + here->BSIM4v5Pdeff * model->BSIM4v5DjctSidewallTempSatCurDensity + pParam->BSIM4v5weffCJ * here->BSIM4v5nf * model->BSIM4v5DjctGateSidewallTempSatCurDensity; } if (DrainSatCurrent <= 0.0) { here->BSIM4v5gbd = ckt->CKTgmin; here->BSIM4v5cbd = here->BSIM4v5gbd * vbd_jct; } else { switch(model->BSIM4v5dioMod) { case 0: evbd = exp(vbd_jct / Nvtmd); T1 = model->BSIM4v5xjbvd * exp(-(model->BSIM4v5bvd + vbd_jct) / Nvtmd); /* WDLiu: Magic T1 in this form; different from BSIM4v5 beta. */ here->BSIM4v5gbd = DrainSatCurrent * (evbd + T1) / Nvtmd + ckt->CKTgmin; here->BSIM4v5cbd = DrainSatCurrent * (evbd + here->BSIM4v5XExpBVD - T1 - 1.0) + ckt->CKTgmin * vbd_jct; break; case 1: T2 = vbd_jct / Nvtmd; if (T2 < -EXP_THRESHOLD) { here->BSIM4v5gbd = ckt->CKTgmin; here->BSIM4v5cbd = DrainSatCurrent * (MIN_EXP - 1.0) + ckt->CKTgmin * vbd_jct; } else if (vbd_jct <= here->BSIM4v5vjdmFwd) { evbd = exp(T2); here->BSIM4v5gbd = DrainSatCurrent * evbd / Nvtmd + ckt->CKTgmin; here->BSIM4v5cbd = DrainSatCurrent * (evbd - 1.0) + ckt->CKTgmin * vbd_jct; } else { T0 = here->BSIM4v5IVjdmFwd / Nvtmd; here->BSIM4v5gbd = T0 + ckt->CKTgmin; here->BSIM4v5cbd = here->BSIM4v5IVjdmFwd - DrainSatCurrent + T0 * (vbd_jct - here->BSIM4v5vjdmFwd) + ckt->CKTgmin * vbd_jct; } break; case 2: if (vbd_jct < here->BSIM4v5vjdmRev) { T0 = vbd_jct / Nvtmd; if (T0 < -EXP_THRESHOLD) { evbd = MIN_EXP; devbd_dvb = 0.0; } else { evbd = exp(T0); devbd_dvb = evbd / Nvtmd; } T1 = evbd - 1.0; T2 = here->BSIM4v5IVjdmRev + here->BSIM4v5DslpRev * (vbd_jct - here->BSIM4v5vjdmRev); here->BSIM4v5gbd = devbd_dvb * T2 + T1 * here->BSIM4v5DslpRev + ckt->CKTgmin; here->BSIM4v5cbd = T1 * T2 + ckt->CKTgmin * vbd_jct; } else if (vbd_jct <= here->BSIM4v5vjdmFwd) { T0 = vbd_jct / Nvtmd; if (T0 < -EXP_THRESHOLD) { evbd = MIN_EXP; devbd_dvb = 0.0; } else { evbd = exp(T0); devbd_dvb = evbd / Nvtmd; } T1 = (model->BSIM4v5bvd + vbd_jct) / Nvtmd; if (T1 > EXP_THRESHOLD) { T2 = MIN_EXP; T3 = 0.0; } else { T2 = exp(-T1); T3 = -T2 /Nvtmd; } here->BSIM4v5gbd = DrainSatCurrent * (devbd_dvb - model->BSIM4v5xjbvd * T3) + ckt->CKTgmin; here->BSIM4v5cbd = DrainSatCurrent * (evbd + here->BSIM4v5XExpBVD - 1.0 - model->BSIM4v5xjbvd * T2) + ckt->CKTgmin * vbd_jct; } else { here->BSIM4v5gbd = here->BSIM4v5DslpFwd + ckt->CKTgmin; here->BSIM4v5cbd = here->BSIM4v5IVjdmFwd + here->BSIM4v5DslpFwd * (vbd_jct - here->BSIM4v5vjdmFwd) + ckt->CKTgmin * vbd_jct; } break; default: break; } } /* trap-assisted tunneling and recombination current for reverse bias */ Nvtmrssw = model->BSIM4v5vtm0 * model->BSIM4v5njtsswtemp; Nvtmrsswg = model->BSIM4v5vtm0 * model->BSIM4v5njtsswgtemp; Nvtmrs = model->BSIM4v5vtm0 * model->BSIM4v5njtstemp; if ((model->BSIM4v5vtss - vbs_jct) < (model->BSIM4v5vtss * 1e-3)) { T9 = 1.0e3; T0 = - vbs_jct / Nvtmrs * T9; DEXP(T0, T1, T10); dT1_dVb = T10 / Nvtmrs * T9; } else { T9 = 1.0 / (model->BSIM4v5vtss - vbs_jct); T0 = -vbs_jct / Nvtmrs * model->BSIM4v5vtss * T9; dT0_dVb = model->BSIM4v5vtss / Nvtmrs * (T9 + vbs_jct * T9 * T9) ; DEXP(T0, T1, T10); dT1_dVb = T10 * dT0_dVb; } if ((model->BSIM4v5vtsd - vbd_jct) < (model->BSIM4v5vtsd * 1e-3) ) { T9 = 1.0e3; T0 = -vbd_jct / Nvtmrs * T9; DEXP(T0, T2, T10); dT2_dVb = T10 / Nvtmrs * T9; } else { T9 = 1.0 / (model->BSIM4v5vtsd - vbd_jct); T0 = -vbd_jct / Nvtmrs * model->BSIM4v5vtsd * T9; dT0_dVb = model->BSIM4v5vtsd / Nvtmrs * (T9 + vbd_jct * T9 * T9) ; DEXP(T0, T2, T10); dT2_dVb = T10 * dT0_dVb; } if ((model->BSIM4v5vtssws - vbs_jct) < (model->BSIM4v5vtssws * 1e-3) ) { T9 = 1.0e3; T0 = -vbs_jct / Nvtmrssw * T9; DEXP(T0, T3, T10); dT3_dVb = T10 / Nvtmrssw * T9; } else { T9 = 1.0 / (model->BSIM4v5vtssws - vbs_jct); T0 = -vbs_jct / Nvtmrssw * model->BSIM4v5vtssws * T9; dT0_dVb = model->BSIM4v5vtssws / Nvtmrssw * (T9 + vbs_jct * T9 * T9) ; DEXP(T0, T3, T10); dT3_dVb = T10 * dT0_dVb; } if ((model->BSIM4v5vtsswd - vbd_jct) < (model->BSIM4v5vtsswd * 1e-3) ) { T9 = 1.0e3; T0 = -vbd_jct / Nvtmrssw * T9; DEXP(T0, T4, T10); dT4_dVb = T10 / Nvtmrssw * T9; } else { T9 = 1.0 / (model->BSIM4v5vtsswd - vbd_jct); T0 = -vbd_jct / Nvtmrssw * model->BSIM4v5vtsswd * T9; dT0_dVb = model->BSIM4v5vtsswd / Nvtmrssw * (T9 + vbd_jct * T9 * T9) ; DEXP(T0, T4, T10); dT4_dVb = T10 * dT0_dVb; } if ((model->BSIM4v5vtsswgs - vbs_jct) < (model->BSIM4v5vtsswgs * 1e-3) ) { T9 = 1.0e3; T0 = -vbs_jct / Nvtmrsswg * T9; DEXP(T0, T5, T10); dT5_dVb = T10 / Nvtmrsswg * T9; } else { T9 = 1.0 / (model->BSIM4v5vtsswgs - vbs_jct); T0 = -vbs_jct / Nvtmrsswg * model->BSIM4v5vtsswgs * T9; dT0_dVb = model->BSIM4v5vtsswgs / Nvtmrsswg * (T9 + vbs_jct * T9 * T9) ; DEXP(T0, T5, T10); dT5_dVb = T10 * dT0_dVb; } if ((model->BSIM4v5vtsswgd - vbd_jct) < (model->BSIM4v5vtsswgd * 1e-3) ) { T9 = 1.0e3; T0 = -vbd_jct / Nvtmrsswg * T9; DEXP(T0, T6, T10); dT6_dVb = T10 / Nvtmrsswg * T9; } else { T9 = 1.0 / (model->BSIM4v5vtsswgd - vbd_jct); T0 = -vbd_jct / Nvtmrsswg * model->BSIM4v5vtsswgd * T9; dT0_dVb = model->BSIM4v5vtsswgd / Nvtmrsswg * (T9 + vbd_jct * T9 * T9) ; DEXP(T0, T6, T10); dT6_dVb = T10 * dT0_dVb; } here->BSIM4v5gbs += here->BSIM4v5SjctTempRevSatCur * dT1_dVb + here->BSIM4v5SswTempRevSatCur * dT3_dVb + here->BSIM4v5SswgTempRevSatCur * dT5_dVb; here->BSIM4v5cbs -= here->BSIM4v5SjctTempRevSatCur * (T1 - 1.0) + here->BSIM4v5SswTempRevSatCur * (T3 - 1.0) + here->BSIM4v5SswgTempRevSatCur * (T5 - 1.0); here->BSIM4v5gbd += here->BSIM4v5DjctTempRevSatCur * dT2_dVb + here->BSIM4v5DswTempRevSatCur * dT4_dVb + here->BSIM4v5DswgTempRevSatCur * dT6_dVb; here->BSIM4v5cbd -= here->BSIM4v5DjctTempRevSatCur * (T2 - 1.0) + here->BSIM4v5DswTempRevSatCur * (T4 - 1.0) + here->BSIM4v5DswgTempRevSatCur * (T6 - 1.0); /* End of diode DC model */ if (vds >= 0.0) { here->BSIM4v5mode = 1; Vds = vds; Vgs = vgs; Vbs = vbs; Vdb = vds - vbs; /* WDLiu: for GIDL */ } else { here->BSIM4v5mode = -1; Vds = -vds; Vgs = vgd; Vbs = vbd; Vdb = -vbs; } T0 = Vbs - here->BSIM4v5vbsc - 0.001; T1 = sqrt(T0 * T0 - 0.004 * here->BSIM4v5vbsc); if (T0 >= 0.0) { Vbseff = here->BSIM4v5vbsc + 0.5 * (T0 + T1); dVbseff_dVb = 0.5 * (1.0 + T0 / T1); } else { T2 = -0.002 / (T1 - T0); Vbseff = here->BSIM4v5vbsc * (1.0 + T2); dVbseff_dVb = T2 * here->BSIM4v5vbsc / T1; } /* JX: Correction to forward body bias */ T9 = 0.95 * pParam->BSIM4v5phi; T0 = T9 - Vbseff - 0.001; T1 = sqrt(T0 * T0 + 0.004 * T9); Vbseff = T9 - 0.5 * (T0 + T1); dVbseff_dVb *= 0.5 * (1.0 + T0 / T1); Phis = pParam->BSIM4v5phi - Vbseff; dPhis_dVb = -1.0; sqrtPhis = sqrt(Phis); dsqrtPhis_dVb = -0.5 / sqrtPhis; Xdep = pParam->BSIM4v5Xdep0 * sqrtPhis / pParam->BSIM4v5sqrtPhi; dXdep_dVb = (pParam->BSIM4v5Xdep0 / pParam->BSIM4v5sqrtPhi) * dsqrtPhis_dVb; Leff = pParam->BSIM4v5leff; Vtm = model->BSIM4v5vtm; Vtm0 = model->BSIM4v5vtm0; /* Vth Calculation */ T3 = sqrt(Xdep); V0 = pParam->BSIM4v5vbi - pParam->BSIM4v5phi; T0 = pParam->BSIM4v5dvt2 * Vbseff; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->BSIM4v5dvt2; } else { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->BSIM4v5dvt2 * T4 * T4; } lt1 = model->BSIM4v5factor1 * T3 * T1; dlt1_dVb = model->BSIM4v5factor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * T2); T0 = pParam->BSIM4v5dvt2w * Vbseff; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->BSIM4v5dvt2w; } else { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->BSIM4v5dvt2w * T4 * T4; } ltw = model->BSIM4v5factor1 * T3 * T1; dltw_dVb = model->BSIM4v5factor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * T2); T0 = pParam->BSIM4v5dvt1 * Leff / lt1; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; Theta0 = T1 / T4; dT1_dVb = -T0 * T1 * dlt1_dVb / lt1; dTheta0_dVb = dT1_dVb * (T4 - 2.0 * T1 * (T2 + MIN_EXP)) / T4 / T4; } else { Theta0 = 1.0 / (MAX_EXP - 2.0); /* 3.0 * MIN_EXP omitted */ dTheta0_dVb = 0.0; } here->BSIM4v5thetavth = pParam->BSIM4v5dvt0 * Theta0; Delt_vth = here->BSIM4v5thetavth * V0; dDelt_vth_dVb = pParam->BSIM4v5dvt0 * dTheta0_dVb * V0; T0 = pParam->BSIM4v5dvt1w * pParam->BSIM4v5weff * Leff / ltw; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; T5 = T1 / T4; dT1_dVb = -T0 * T1 * dltw_dVb / ltw; dT5_dVb = dT1_dVb * (T4 - 2.0 * T1 * (T2 + MIN_EXP)) / T4 / T4; } else { T5 = 1.0 / (MAX_EXP - 2.0); /* 3.0 * MIN_EXP omitted */ dT5_dVb = 0.0; } T0 = pParam->BSIM4v5dvt0w * T5; T2 = T0 * V0; dT2_dVb = pParam->BSIM4v5dvt0w * dT5_dVb * V0; TempRatio = ckt->CKTtemp / model->BSIM4v5tnom - 1.0; T0 = sqrt(1.0 + pParam->BSIM4v5lpe0 / Leff); T1 = pParam->BSIM4v5k1ox * (T0 - 1.0) * pParam->BSIM4v5sqrtPhi + (pParam->BSIM4v5kt1 + pParam->BSIM4v5kt1l / Leff + pParam->BSIM4v5kt2 * Vbseff) * TempRatio; Vth_NarrowW = model->BSIM4v5toxe * pParam->BSIM4v5phi / (pParam->BSIM4v5weff + pParam->BSIM4v5w0); T3 = here->BSIM4v5eta0 + pParam->BSIM4v5etab * Vbseff; if (T3 < 1.0e-4) { T9 = 1.0 / (3.0 - 2.0e4 * T3); T3 = (2.0e-4 - T3) * T9; T4 = T9 * T9; } else { T4 = 1.0; } dDIBL_Sft_dVd = T3 * pParam->BSIM4v5theta0vb0; DIBL_Sft = dDIBL_Sft_dVd * Vds; Lpe_Vb = sqrt(1.0 + pParam->BSIM4v5lpeb / Leff); Vth = model->BSIM4v5type * here->BSIM4v5vth0 + (pParam->BSIM4v5k1ox * sqrtPhis - pParam->BSIM4v5k1 * pParam->BSIM4v5sqrtPhi) * Lpe_Vb - here->BSIM4v5k2ox * Vbseff - Delt_vth - T2 + (pParam->BSIM4v5k3 + pParam->BSIM4v5k3b * Vbseff) * Vth_NarrowW + T1 - DIBL_Sft; dVth_dVb = Lpe_Vb * pParam->BSIM4v5k1ox * dsqrtPhis_dVb - here->BSIM4v5k2ox - dDelt_vth_dVb - dT2_dVb + pParam->BSIM4v5k3b * Vth_NarrowW - pParam->BSIM4v5etab * Vds * pParam->BSIM4v5theta0vb0 * T4 + pParam->BSIM4v5kt2 * TempRatio; dVth_dVd = -dDIBL_Sft_dVd; /* Calculate n */ tmp1 = EPSSI / Xdep; here->BSIM4v5nstar = model->BSIM4v5vtm / Charge_q * (model->BSIM4v5coxe + tmp1 + pParam->BSIM4v5cit); tmp2 = pParam->BSIM4v5nfactor * tmp1; tmp3 = pParam->BSIM4v5cdsc + pParam->BSIM4v5cdscb * Vbseff + pParam->BSIM4v5cdscd * Vds; tmp4 = (tmp2 + tmp3 * Theta0 + pParam->BSIM4v5cit) / model->BSIM4v5coxe; if (tmp4 >= -0.5) { n = 1.0 + tmp4; dn_dVb = (-tmp2 / Xdep * dXdep_dVb + tmp3 * dTheta0_dVb + pParam->BSIM4v5cdscb * Theta0) / model->BSIM4v5coxe; dn_dVd = pParam->BSIM4v5cdscd * Theta0 / model->BSIM4v5coxe; } else { T0 = 1.0 / (3.0 + 8.0 * tmp4); n = (1.0 + 3.0 * tmp4) * T0; T0 *= T0; dn_dVb = (-tmp2 / Xdep * dXdep_dVb + tmp3 * dTheta0_dVb + pParam->BSIM4v5cdscb * Theta0) / model->BSIM4v5coxe * T0; dn_dVd = pParam->BSIM4v5cdscd * Theta0 / model->BSIM4v5coxe * T0; } /* Vth correction for Pocket implant */ if (pParam->BSIM4v5dvtp0 > 0.0) { T0 = -pParam->BSIM4v5dvtp1 * Vds; if (T0 < -EXP_THRESHOLD) { T2 = MIN_EXP; dT2_dVd = 0.0; } else { T2 = exp(T0); dT2_dVd = -pParam->BSIM4v5dvtp1 * T2; } T3 = Leff + pParam->BSIM4v5dvtp0 * (1.0 + T2); dT3_dVd = pParam->BSIM4v5dvtp0 * dT2_dVd; if (model->BSIM4v5tempMod < 2) { T4 = Vtm * log(Leff / T3); dT4_dVd = -Vtm * dT3_dVd / T3; } else { T4 = model->BSIM4v5vtm0 * log(Leff / T3); dT4_dVd = -model->BSIM4v5vtm0 * dT3_dVd / T3; } dDITS_Sft_dVd = dn_dVd * T4 + n * dT4_dVd; dDITS_Sft_dVb = T4 * dn_dVb; Vth -= n * T4; dVth_dVd -= dDITS_Sft_dVd; dVth_dVb -= dDITS_Sft_dVb; } here->BSIM4v5von = Vth; /* Poly Gate Si Depletion Effect */ T0 = here->BSIM4v5vfb + pParam->BSIM4v5phi; BSIM4v5polyDepletion(T0, pParam->BSIM4v5ngate, model->BSIM4v5coxe, vgs, &vgs_eff, &dvgs_eff_dvg); BSIM4v5polyDepletion(T0, pParam->BSIM4v5ngate, model->BSIM4v5coxe, vgd, &vgd_eff, &dvgd_eff_dvg); if(here->BSIM4v5mode>0) { Vgs_eff = vgs_eff; dVgs_eff_dVg = dvgs_eff_dvg; } else { Vgs_eff = vgd_eff; dVgs_eff_dVg = dvgd_eff_dvg; } here->BSIM4v5vgs_eff = vgs_eff; here->BSIM4v5vgd_eff = vgd_eff; here->BSIM4v5dvgs_eff_dvg = dvgs_eff_dvg; here->BSIM4v5dvgd_eff_dvg = dvgd_eff_dvg; Vgst = Vgs_eff - Vth; /* Calculate Vgsteff */ T0 = n * Vtm; T1 = pParam->BSIM4v5mstar * Vgst; T2 = T1 / T0; if (T2 > EXP_THRESHOLD) { T10 = T1; dT10_dVg = pParam->BSIM4v5mstar * dVgs_eff_dVg; dT10_dVd = -dVth_dVd * pParam->BSIM4v5mstar; dT10_dVb = -dVth_dVb * pParam->BSIM4v5mstar; } else if (T2 < -EXP_THRESHOLD) { T10 = Vtm * log(1.0 + MIN_EXP); dT10_dVg = 0.0; dT10_dVd = T10 * dn_dVd; dT10_dVb = T10 * dn_dVb; T10 *= n; } else { ExpVgst = exp(T2); T3 = Vtm * log(1.0 + ExpVgst); T10 = n * T3; dT10_dVg = pParam->BSIM4v5mstar * ExpVgst / (1.0 + ExpVgst); dT10_dVb = T3 * dn_dVb - dT10_dVg * (dVth_dVb + Vgst * dn_dVb / n); dT10_dVd = T3 * dn_dVd - dT10_dVg * (dVth_dVd + Vgst * dn_dVd / n); dT10_dVg *= dVgs_eff_dVg; } T1 = pParam->BSIM4v5voffcbn - (1.0 - pParam->BSIM4v5mstar) * Vgst; T2 = T1 / T0; if (T2 < -EXP_THRESHOLD) { T3 = model->BSIM4v5coxe * MIN_EXP / pParam->BSIM4v5cdep0; T9 = pParam->BSIM4v5mstar + T3 * n; dT9_dVg = 0.0; dT9_dVd = dn_dVd * T3; dT9_dVb = dn_dVb * T3; } else if (T2 > EXP_THRESHOLD) { T3 = model->BSIM4v5coxe * MAX_EXP / pParam->BSIM4v5cdep0; T9 = pParam->BSIM4v5mstar + T3 * n; dT9_dVg = 0.0; dT9_dVd = dn_dVd * T3; dT9_dVb = dn_dVb * T3; } else { ExpVgst = exp(T2); T3 = model->BSIM4v5coxe / pParam->BSIM4v5cdep0; T4 = T3 * ExpVgst; T5 = T1 * T4 / T0; T9 = pParam->BSIM4v5mstar + n * T4; dT9_dVg = T3 * (pParam->BSIM4v5mstar - 1.0) * ExpVgst / Vtm; dT9_dVb = T4 * dn_dVb - dT9_dVg * dVth_dVb - T5 * dn_dVb; dT9_dVd = T4 * dn_dVd - dT9_dVg * dVth_dVd - T5 * dn_dVd; dT9_dVg *= dVgs_eff_dVg; } here->BSIM4v5Vgsteff = Vgsteff = T10 / T9; T11 = T9 * T9; dVgsteff_dVg = (T9 * dT10_dVg - T10 * dT9_dVg) / T11; dVgsteff_dVd = (T9 * dT10_dVd - T10 * dT9_dVd) / T11; dVgsteff_dVb = (T9 * dT10_dVb - T10 * dT9_dVb) / T11; /* Calculate Effective Channel Geometry */ T9 = sqrtPhis - pParam->BSIM4v5sqrtPhi; Weff = pParam->BSIM4v5weff - 2.0 * (pParam->BSIM4v5dwg * Vgsteff + pParam->BSIM4v5dwb * T9); dWeff_dVg = -2.0 * pParam->BSIM4v5dwg; dWeff_dVb = -2.0 * pParam->BSIM4v5dwb * dsqrtPhis_dVb; if (Weff < 2.0e-8) /* to avoid the discontinuity problem due to Weff*/ { T0 = 1.0 / (6.0e-8 - 2.0 * Weff); Weff = 2.0e-8 * (4.0e-8 - Weff) * T0; T0 *= T0 * 4.0e-16; dWeff_dVg *= T0; dWeff_dVb *= T0; } if (model->BSIM4v5rdsMod == 1) Rds = dRds_dVg = dRds_dVb = 0.0; else { T0 = 1.0 + pParam->BSIM4v5prwg * Vgsteff; dT0_dVg = -pParam->BSIM4v5prwg / T0 / T0; T1 = pParam->BSIM4v5prwb * T9; dT1_dVb = pParam->BSIM4v5prwb * dsqrtPhis_dVb; T2 = 1.0 / T0 + T1; T3 = T2 + sqrt(T2 * T2 + 0.01); /* 0.01 = 4.0 * 0.05 * 0.05 */ dT3_dVg = 1.0 + T2 / (T3 - T2); dT3_dVb = dT3_dVg * dT1_dVb; dT3_dVg *= dT0_dVg; T4 = pParam->BSIM4v5rds0 * 0.5; Rds = pParam->BSIM4v5rdswmin + T3 * T4; dRds_dVg = T4 * dT3_dVg; dRds_dVb = T4 * dT3_dVb; if (Rds > 0.0) here->BSIM4v5grdsw = 1.0 / Rds; else here->BSIM4v5grdsw = 0.0; } /* Calculate Abulk */ T9 = 0.5 * pParam->BSIM4v5k1ox * Lpe_Vb / sqrtPhis; T1 = T9 + here->BSIM4v5k2ox - pParam->BSIM4v5k3b * Vth_NarrowW; dT1_dVb = -T9 / sqrtPhis * dsqrtPhis_dVb; T9 = sqrt(pParam->BSIM4v5xj * Xdep); tmp1 = Leff + 2.0 * T9; T5 = Leff / tmp1; tmp2 = pParam->BSIM4v5a0 * T5; tmp3 = pParam->BSIM4v5weff + pParam->BSIM4v5b1; tmp4 = pParam->BSIM4v5b0 / tmp3; T2 = tmp2 + tmp4; dT2_dVb = -T9 / tmp1 / Xdep * dXdep_dVb; T6 = T5 * T5; T7 = T5 * T6; Abulk0 = 1.0 + T1 * T2; dAbulk0_dVb = T1 * tmp2 * dT2_dVb + T2 * dT1_dVb; T8 = pParam->BSIM4v5ags * pParam->BSIM4v5a0 * T7; dAbulk_dVg = -T1 * T8; Abulk = Abulk0 + dAbulk_dVg * Vgsteff; dAbulk_dVb = dAbulk0_dVb - T8 * Vgsteff * (dT1_dVb + 3.0 * T1 * dT2_dVb); if (Abulk0 < 0.1) /* added to avoid the problems caused by Abulk0 */ { T9 = 1.0 / (3.0 - 20.0 * Abulk0); Abulk0 = (0.2 - Abulk0) * T9; dAbulk0_dVb *= T9 * T9; } if (Abulk < 0.1) { T9 = 1.0 / (3.0 - 20.0 * Abulk); Abulk = (0.2 - Abulk) * T9; T10 = T9 * T9; dAbulk_dVb *= T10; dAbulk_dVg *= T10; } here->BSIM4v5Abulk = Abulk; T2 = pParam->BSIM4v5keta * Vbseff; if (T2 >= -0.9) { T0 = 1.0 / (1.0 + T2); dT0_dVb = -pParam->BSIM4v5keta * T0 * T0; } else { T1 = 1.0 / (0.8 + T2); T0 = (17.0 + 20.0 * T2) * T1; dT0_dVb = -pParam->BSIM4v5keta * T1 * T1; } dAbulk_dVg *= T0; dAbulk_dVb = dAbulk_dVb * T0 + Abulk * dT0_dVb; dAbulk0_dVb = dAbulk0_dVb * T0 + Abulk0 * dT0_dVb; Abulk *= T0; Abulk0 *= T0; /* Mobility calculation */ if (model->BSIM4v5mobMod == 0) { T0 = Vgsteff + Vth + Vth; T2 = pParam->BSIM4v5ua + pParam->BSIM4v5uc * Vbseff; T3 = T0 / model->BSIM4v5toxe; T6 = pParam->BSIM4v5ud / T3 / T3 * Vth * Vth; T5 = T3 * (T2 + pParam->BSIM4v5ub * T3) + T6; T7 = - 2.0 * T6 / T0; dDenomi_dVg = (T2 + 2.0 * pParam->BSIM4v5ub * T3) / model->BSIM4v5toxe + T7; dDenomi_dVd = dDenomi_dVg * 2.0 * dVth_dVd; dDenomi_dVb = dDenomi_dVg * 2.0 * dVth_dVb + pParam->BSIM4v5uc * T3; } else if (model->BSIM4v5mobMod == 1) { T0 = Vgsteff + Vth + Vth; T2 = 1.0 + pParam->BSIM4v5uc * Vbseff; T3 = T0 / model->BSIM4v5toxe; T4 = T3 * (pParam->BSIM4v5ua + pParam->BSIM4v5ub * T3); T6 = pParam->BSIM4v5ud / T3 / T3 * Vth * Vth; T5 = T4 * T2 + T6; T7 = - 2.0 * T6 / T0; dDenomi_dVg = (pParam->BSIM4v5ua + 2.0 * pParam->BSIM4v5ub * T3) * T2 / model->BSIM4v5toxe + T7; dDenomi_dVd = dDenomi_dVg * 2.0 * dVth_dVd; dDenomi_dVb = dDenomi_dVg * 2.0 * dVth_dVb + pParam->BSIM4v5uc * T4; } else { T0 = (Vgsteff + here->BSIM4v5vtfbphi1) / model->BSIM4v5toxe; T1 = exp(pParam->BSIM4v5eu * log(T0)); dT1_dVg = T1 * pParam->BSIM4v5eu / T0 / model->BSIM4v5toxe; T2 = pParam->BSIM4v5ua + pParam->BSIM4v5uc * Vbseff; T3 = T0 / model->BSIM4v5toxe; T6 = pParam->BSIM4v5ud / T3 / T3 * Vth * Vth; T5 = T1 * T2 + T6; T7 = - 2.0 * T6 / T0; dDenomi_dVg = T2 * dT1_dVg + T7; dDenomi_dVd = 0.0; dDenomi_dVb = T1 * pParam->BSIM4v5uc; } if (T5 >= -0.8) { Denomi = 1.0 + T5; } else { T9 = 1.0 / (7.0 + 10.0 * T5); Denomi = (0.6 + T5) * T9; T9 *= T9; dDenomi_dVg *= T9; dDenomi_dVd *= T9; dDenomi_dVb *= T9; } here->BSIM4v5ueff = ueff = here->BSIM4v5u0temp / Denomi; T9 = -ueff / Denomi; dueff_dVg = T9 * dDenomi_dVg; dueff_dVd = T9 * dDenomi_dVd; dueff_dVb = T9 * dDenomi_dVb; /* Saturation Drain Voltage Vdsat */ WVCox = Weff * here->BSIM4v5vsattemp * model->BSIM4v5coxe; WVCoxRds = WVCox * Rds; Esat = 2.0 * here->BSIM4v5vsattemp / ueff; here->BSIM4v5EsatL = EsatL = Esat * Leff; T0 = -EsatL /ueff; dEsatL_dVg = T0 * dueff_dVg; dEsatL_dVd = T0 * dueff_dVd; dEsatL_dVb = T0 * dueff_dVb; /* Sqrt() */ a1 = pParam->BSIM4v5a1; if (a1 == 0.0) { Lambda = pParam->BSIM4v5a2; dLambda_dVg = 0.0; } else if (a1 > 0.0) { T0 = 1.0 - pParam->BSIM4v5a2; T1 = T0 - pParam->BSIM4v5a1 * Vgsteff - 0.0001; T2 = sqrt(T1 * T1 + 0.0004 * T0); Lambda = pParam->BSIM4v5a2 + T0 - 0.5 * (T1 + T2); dLambda_dVg = 0.5 * pParam->BSIM4v5a1 * (1.0 + T1 / T2); } else { T1 = pParam->BSIM4v5a2 + pParam->BSIM4v5a1 * Vgsteff - 0.0001; T2 = sqrt(T1 * T1 + 0.0004 * pParam->BSIM4v5a2); Lambda = 0.5 * (T1 + T2); dLambda_dVg = 0.5 * pParam->BSIM4v5a1 * (1.0 + T1 / T2); } Vgst2Vtm = Vgsteff + 2.0 * Vtm; if (Rds > 0) { tmp2 = dRds_dVg / Rds + dWeff_dVg / Weff; tmp3 = dRds_dVb / Rds + dWeff_dVb / Weff; } else { tmp2 = dWeff_dVg / Weff; tmp3 = dWeff_dVb / Weff; } if ((Rds == 0.0) && (Lambda == 1.0)) { T0 = 1.0 / (Abulk * EsatL + Vgst2Vtm); tmp1 = 0.0; T1 = T0 * T0; T2 = Vgst2Vtm * T0; T3 = EsatL * Vgst2Vtm; Vdsat = T3 * T0; dT0_dVg = -(Abulk * dEsatL_dVg + EsatL * dAbulk_dVg + 1.0) * T1; dT0_dVd = -(Abulk * dEsatL_dVd) * T1; dT0_dVb = -(Abulk * dEsatL_dVb + dAbulk_dVb * EsatL) * T1; dVdsat_dVg = T3 * dT0_dVg + T2 * dEsatL_dVg + EsatL * T0; dVdsat_dVd = T3 * dT0_dVd + T2 * dEsatL_dVd; dVdsat_dVb = T3 * dT0_dVb + T2 * dEsatL_dVb; } else { tmp1 = dLambda_dVg / (Lambda * Lambda); T9 = Abulk * WVCoxRds; T8 = Abulk * T9; T7 = Vgst2Vtm * T9; T6 = Vgst2Vtm * WVCoxRds; T0 = 2.0 * Abulk * (T9 - 1.0 + 1.0 / Lambda); dT0_dVg = 2.0 * (T8 * tmp2 - Abulk * tmp1 + (2.0 * T9 + 1.0 / Lambda - 1.0) * dAbulk_dVg); dT0_dVb = 2.0 * (T8 * (2.0 / Abulk * dAbulk_dVb + tmp3) + (1.0 / Lambda - 1.0) * dAbulk_dVb); dT0_dVd = 0.0; T1 = Vgst2Vtm * (2.0 / Lambda - 1.0) + Abulk * EsatL + 3.0 * T7; dT1_dVg = (2.0 / Lambda - 1.0) - 2.0 * Vgst2Vtm * tmp1 + Abulk * dEsatL_dVg + EsatL * dAbulk_dVg + 3.0 * (T9 + T7 * tmp2 + T6 * dAbulk_dVg); dT1_dVb = Abulk * dEsatL_dVb + EsatL * dAbulk_dVb + 3.0 * (T6 * dAbulk_dVb + T7 * tmp3); dT1_dVd = Abulk * dEsatL_dVd; T2 = Vgst2Vtm * (EsatL + 2.0 * T6); dT2_dVg = EsatL + Vgst2Vtm * dEsatL_dVg + T6 * (4.0 + 2.0 * Vgst2Vtm * tmp2); dT2_dVb = Vgst2Vtm * (dEsatL_dVb + 2.0 * T6 * tmp3); dT2_dVd = Vgst2Vtm * dEsatL_dVd; T3 = sqrt(T1 * T1 - 2.0 * T0 * T2); Vdsat = (T1 - T3) / T0; dT3_dVg = (T1 * dT1_dVg - 2.0 * (T0 * dT2_dVg + T2 * dT0_dVg)) / T3; dT3_dVd = (T1 * dT1_dVd - 2.0 * (T0 * dT2_dVd + T2 * dT0_dVd)) / T3; dT3_dVb = (T1 * dT1_dVb - 2.0 * (T0 * dT2_dVb + T2 * dT0_dVb)) / T3; dVdsat_dVg = (dT1_dVg - (T1 * dT1_dVg - dT0_dVg * T2 - T0 * dT2_dVg) / T3 - Vdsat * dT0_dVg) / T0; dVdsat_dVb = (dT1_dVb - (T1 * dT1_dVb - dT0_dVb * T2 - T0 * dT2_dVb) / T3 - Vdsat * dT0_dVb) / T0; dVdsat_dVd = (dT1_dVd - (T1 * dT1_dVd - T0 * dT2_dVd) / T3) / T0; } here->BSIM4v5vdsat = Vdsat; /* Calculate Vdseff */ T1 = Vdsat - Vds - pParam->BSIM4v5delta; dT1_dVg = dVdsat_dVg; dT1_dVd = dVdsat_dVd - 1.0; dT1_dVb = dVdsat_dVb; T2 = sqrt(T1 * T1 + 4.0 * pParam->BSIM4v5delta * Vdsat); T0 = T1 / T2; T9 = 2.0 * pParam->BSIM4v5delta; T3 = T9 / T2; dT2_dVg = T0 * dT1_dVg + T3 * dVdsat_dVg; dT2_dVd = T0 * dT1_dVd + T3 * dVdsat_dVd; dT2_dVb = T0 * dT1_dVb + T3 * dVdsat_dVb; if (T1 >= 0.0) { Vdseff = Vdsat - 0.5 * (T1 + T2); dVdseff_dVg = dVdsat_dVg - 0.5 * (dT1_dVg + dT2_dVg); dVdseff_dVd = dVdsat_dVd - 0.5 * (dT1_dVd + dT2_dVd); dVdseff_dVb = dVdsat_dVb - 0.5 * (dT1_dVb + dT2_dVb); } else { T4 = T9 / (T2 - T1); T5 = 1.0 - T4; T6 = Vdsat * T4 / (T2 - T1); Vdseff = Vdsat * T5; dVdseff_dVg = dVdsat_dVg * T5 + T6 * (dT2_dVg - dT1_dVg); dVdseff_dVd = dVdsat_dVd * T5 + T6 * (dT2_dVd - dT1_dVd); dVdseff_dVb = dVdsat_dVb * T5 + T6 * (dT2_dVb - dT1_dVb); } if (Vds == 0.0) { Vdseff = 0.0; dVdseff_dVg = 0.0; dVdseff_dVb = 0.0; } if (Vdseff > Vds) Vdseff = Vds; diffVds = Vds - Vdseff; here->BSIM4v5Vdseff = Vdseff; /* Velocity Overshoot */ if((model->BSIM4v5lambdaGiven) && (model->BSIM4v5lambda > 0.0) ) { T1 = Leff * ueff; T2 = pParam->BSIM4v5lambda / T1; T3 = -T2 / T1 * Leff; dT2_dVd = T3 * dueff_dVd; dT2_dVg = T3 * dueff_dVg; dT2_dVb = T3 * dueff_dVb; T5 = 1.0 / (Esat * pParam->BSIM4v5litl); T4 = -T5 / EsatL; dT5_dVg = dEsatL_dVg * T4; dT5_dVd = dEsatL_dVd * T4; dT5_dVb = dEsatL_dVb * T4; T6 = 1.0 + diffVds * T5; dT6_dVg = dT5_dVg * diffVds - dVdseff_dVg * T5; dT6_dVd = dT5_dVd * diffVds + (1.0 - dVdseff_dVd) * T5; dT6_dVb = dT5_dVb * diffVds - dVdseff_dVb * T5; T7 = 2.0 / (T6 * T6 + 1.0); T8 = 1.0 - T7; T9 = T6 * T7 * T7; dT8_dVg = T9 * dT6_dVg; dT8_dVd = T9 * dT6_dVd; dT8_dVb = T9 * dT6_dVb; T10 = 1.0 + T2 * T8; dT10_dVg = dT2_dVg * T8 + T2 * dT8_dVg; dT10_dVd = dT2_dVd * T8 + T2 * dT8_dVd; dT10_dVb = dT2_dVb * T8 + T2 * dT8_dVb; if(T10 == 1.0) dT10_dVg = dT10_dVd = dT10_dVb = 0.0; dEsatL_dVg *= T10; dEsatL_dVg += EsatL * dT10_dVg; dEsatL_dVd *= T10; dEsatL_dVd += EsatL * dT10_dVd; dEsatL_dVb *= T10; dEsatL_dVb += EsatL * dT10_dVb; EsatL *= T10; here->BSIM4v5EsatL = EsatL; } /* Calculate Vasat */ tmp4 = 1.0 - 0.5 * Abulk * Vdsat / Vgst2Vtm; T9 = WVCoxRds * Vgsteff; T8 = T9 / Vgst2Vtm; T0 = EsatL + Vdsat + 2.0 * T9 * tmp4; T7 = 2.0 * WVCoxRds * tmp4; dT0_dVg = dEsatL_dVg + dVdsat_dVg + T7 * (1.0 + tmp2 * Vgsteff) - T8 * (Abulk * dVdsat_dVg - Abulk * Vdsat / Vgst2Vtm + Vdsat * dAbulk_dVg); dT0_dVb = dEsatL_dVb + dVdsat_dVb + T7 * tmp3 * Vgsteff - T8 * (dAbulk_dVb * Vdsat + Abulk * dVdsat_dVb); dT0_dVd = dEsatL_dVd + dVdsat_dVd - T8 * Abulk * dVdsat_dVd; T9 = WVCoxRds * Abulk; T1 = 2.0 / Lambda - 1.0 + T9; dT1_dVg = -2.0 * tmp1 + WVCoxRds * (Abulk * tmp2 + dAbulk_dVg); dT1_dVb = dAbulk_dVb * WVCoxRds + T9 * tmp3; Vasat = T0 / T1; dVasat_dVg = (dT0_dVg - Vasat * dT1_dVg) / T1; dVasat_dVb = (dT0_dVb - Vasat * dT1_dVb) / T1; dVasat_dVd = dT0_dVd / T1; /* Calculate Idl first */ tmp1 = here->BSIM4v5vtfbphi2; tmp2 = 2.0e8 * model->BSIM4v5toxp; dT0_dVg = 1.0 / tmp2; T0 = (Vgsteff + tmp1) * dT0_dVg; tmp3 = exp(0.7 * log(T0)); T1 = 1.0 + tmp3; T2 = 0.7 * tmp3 / T0; Tcen = 1.9e-9 / T1; dTcen_dVg = -Tcen * T2 * dT0_dVg / T1; Coxeff = EPSSI * model->BSIM4v5coxp / (EPSSI + model->BSIM4v5coxp * Tcen); dCoxeff_dVg = -Coxeff * Coxeff * dTcen_dVg / EPSSI; CoxeffWovL = Coxeff * Weff / Leff; beta = ueff * CoxeffWovL; T3 = ueff / Leff; dbeta_dVg = CoxeffWovL * dueff_dVg + T3 * (Weff * dCoxeff_dVg + Coxeff * dWeff_dVg); dbeta_dVd = CoxeffWovL * dueff_dVd; dbeta_dVb = CoxeffWovL * dueff_dVb + T3 * Coxeff * dWeff_dVb; here->BSIM4v5AbovVgst2Vtm = Abulk / Vgst2Vtm; T0 = 1.0 - 0.5 * Vdseff * here->BSIM4v5AbovVgst2Vtm; dT0_dVg = -0.5 * (Abulk * dVdseff_dVg - Abulk * Vdseff / Vgst2Vtm + Vdseff * dAbulk_dVg) / Vgst2Vtm; dT0_dVd = -0.5 * Abulk * dVdseff_dVd / Vgst2Vtm; dT0_dVb = -0.5 * (Abulk * dVdseff_dVb + dAbulk_dVb * Vdseff) / Vgst2Vtm; fgche1 = Vgsteff * T0; dfgche1_dVg = Vgsteff * dT0_dVg + T0; dfgche1_dVd = Vgsteff * dT0_dVd; dfgche1_dVb = Vgsteff * dT0_dVb; T9 = Vdseff / EsatL; fgche2 = 1.0 + T9; dfgche2_dVg = (dVdseff_dVg - T9 * dEsatL_dVg) / EsatL; dfgche2_dVd = (dVdseff_dVd - T9 * dEsatL_dVd) / EsatL; dfgche2_dVb = (dVdseff_dVb - T9 * dEsatL_dVb) / EsatL; gche = beta * fgche1 / fgche2; dgche_dVg = (beta * dfgche1_dVg + fgche1 * dbeta_dVg - gche * dfgche2_dVg) / fgche2; dgche_dVd = (beta * dfgche1_dVd + fgche1 * dbeta_dVd - gche * dfgche2_dVd) / fgche2; dgche_dVb = (beta * dfgche1_dVb + fgche1 * dbeta_dVb - gche * dfgche2_dVb) / fgche2; T0 = 1.0 + gche * Rds; Idl = gche / T0; T1 = (1.0 - Idl * Rds) / T0; T2 = Idl * Idl; dIdl_dVg = T1 * dgche_dVg - T2 * dRds_dVg; dIdl_dVd = T1 * dgche_dVd; dIdl_dVb = T1 * dgche_dVb - T2 * dRds_dVb; /* Calculate degradation factor due to pocket implant */ if (pParam->BSIM4v5fprout <= 0.0) { FP = 1.0; dFP_dVg = 0.0; } else { T9 = pParam->BSIM4v5fprout * sqrt(Leff) / Vgst2Vtm; FP = 1.0 / (1.0 + T9); dFP_dVg = FP * FP * T9 / Vgst2Vtm; } /* Calculate VACLM */ T8 = pParam->BSIM4v5pvag / EsatL; T9 = T8 * Vgsteff; if (T9 > -0.9) { PvagTerm = 1.0 + T9; dPvagTerm_dVg = T8 * (1.0 - Vgsteff * dEsatL_dVg / EsatL); dPvagTerm_dVb = -T9 * dEsatL_dVb / EsatL; dPvagTerm_dVd = -T9 * dEsatL_dVd / EsatL; } else { T4 = 1.0 / (17.0 + 20.0 * T9); PvagTerm = (0.8 + T9) * T4; T4 *= T4; dPvagTerm_dVg = T8 * (1.0 - Vgsteff * dEsatL_dVg / EsatL) * T4; T9 *= T4 / EsatL; dPvagTerm_dVb = -T9 * dEsatL_dVb; dPvagTerm_dVd = -T9 * dEsatL_dVd; } if ((pParam->BSIM4v5pclm > MIN_EXP) && (diffVds > 1.0e-10)) { T0 = 1.0 + Rds * Idl; dT0_dVg = dRds_dVg * Idl + Rds * dIdl_dVg; dT0_dVd = Rds * dIdl_dVd; dT0_dVb = dRds_dVb * Idl + Rds * dIdl_dVb; T2 = Vdsat / Esat; T1 = Leff + T2; dT1_dVg = (dVdsat_dVg - T2 * dEsatL_dVg / Leff) / Esat; dT1_dVd = (dVdsat_dVd - T2 * dEsatL_dVd / Leff) / Esat; dT1_dVb = (dVdsat_dVb - T2 * dEsatL_dVb / Leff) / Esat; Cclm = FP * PvagTerm * T0 * T1 / (pParam->BSIM4v5pclm * pParam->BSIM4v5litl); dCclm_dVg = Cclm * (dFP_dVg / FP + dPvagTerm_dVg / PvagTerm + dT0_dVg / T0 + dT1_dVg / T1); dCclm_dVb = Cclm * (dPvagTerm_dVb / PvagTerm + dT0_dVb / T0 + dT1_dVb / T1); dCclm_dVd = Cclm * (dPvagTerm_dVd / PvagTerm + dT0_dVd / T0 + dT1_dVd / T1); VACLM = Cclm * diffVds; dVACLM_dVg = dCclm_dVg * diffVds - dVdseff_dVg * Cclm; dVACLM_dVb = dCclm_dVb * diffVds - dVdseff_dVb * Cclm; dVACLM_dVd = dCclm_dVd * diffVds + (1.0 - dVdseff_dVd) * Cclm; } else { VACLM = Cclm = MAX_EXP; dVACLM_dVd = dVACLM_dVg = dVACLM_dVb = 0.0; dCclm_dVd = dCclm_dVg = dCclm_dVb = 0.0; } /* Calculate VADIBL */ if (pParam->BSIM4v5thetaRout > MIN_EXP) { T8 = Abulk * Vdsat; T0 = Vgst2Vtm * T8; dT0_dVg = Vgst2Vtm * Abulk * dVdsat_dVg + T8 + Vgst2Vtm * Vdsat * dAbulk_dVg; dT0_dVb = Vgst2Vtm * (dAbulk_dVb * Vdsat + Abulk * dVdsat_dVb); dT0_dVd = Vgst2Vtm * Abulk * dVdsat_dVd; T1 = Vgst2Vtm + T8; dT1_dVg = 1.0 + Abulk * dVdsat_dVg + Vdsat * dAbulk_dVg; dT1_dVb = Abulk * dVdsat_dVb + dAbulk_dVb * Vdsat; dT1_dVd = Abulk * dVdsat_dVd; T9 = T1 * T1; T2 = pParam->BSIM4v5thetaRout; VADIBL = (Vgst2Vtm - T0 / T1) / T2; dVADIBL_dVg = (1.0 - dT0_dVg / T1 + T0 * dT1_dVg / T9) / T2; dVADIBL_dVb = (-dT0_dVb / T1 + T0 * dT1_dVb / T9) / T2; dVADIBL_dVd = (-dT0_dVd / T1 + T0 * dT1_dVd / T9) / T2; T7 = pParam->BSIM4v5pdiblb * Vbseff; if (T7 >= -0.9) { T3 = 1.0 / (1.0 + T7); VADIBL *= T3; dVADIBL_dVg *= T3; dVADIBL_dVb = (dVADIBL_dVb - VADIBL * pParam->BSIM4v5pdiblb) * T3; dVADIBL_dVd *= T3; } else { T4 = 1.0 / (0.8 + T7); T3 = (17.0 + 20.0 * T7) * T4; dVADIBL_dVg *= T3; dVADIBL_dVb = dVADIBL_dVb * T3 - VADIBL * pParam->BSIM4v5pdiblb * T4 * T4; dVADIBL_dVd *= T3; VADIBL *= T3; } dVADIBL_dVg = dVADIBL_dVg * PvagTerm + VADIBL * dPvagTerm_dVg; dVADIBL_dVb = dVADIBL_dVb * PvagTerm + VADIBL * dPvagTerm_dVb; dVADIBL_dVd = dVADIBL_dVd * PvagTerm + VADIBL * dPvagTerm_dVd; VADIBL *= PvagTerm; } else { VADIBL = MAX_EXP; dVADIBL_dVd = dVADIBL_dVg = dVADIBL_dVb = 0.0; } /* Calculate Va */ Va = Vasat + VACLM; dVa_dVg = dVasat_dVg + dVACLM_dVg; dVa_dVb = dVasat_dVb + dVACLM_dVb; dVa_dVd = dVasat_dVd + dVACLM_dVd; /* Calculate VADITS */ T0 = pParam->BSIM4v5pditsd * Vds; if (T0 > EXP_THRESHOLD) { T1 = MAX_EXP; dT1_dVd = 0; } else { T1 = exp(T0); dT1_dVd = T1 * pParam->BSIM4v5pditsd; } if (pParam->BSIM4v5pdits > MIN_EXP) { T2 = 1.0 + model->BSIM4v5pditsl * Leff; VADITS = (1.0 + T2 * T1) / pParam->BSIM4v5pdits; dVADITS_dVg = VADITS * dFP_dVg; dVADITS_dVd = FP * T2 * dT1_dVd / pParam->BSIM4v5pdits; VADITS *= FP; } else { VADITS = MAX_EXP; dVADITS_dVg = dVADITS_dVd = 0; } /* Calculate VASCBE */ if (pParam->BSIM4v5pscbe2 > 0.0) { if (diffVds > pParam->BSIM4v5pscbe1 * pParam->BSIM4v5litl / EXP_THRESHOLD) { T0 = pParam->BSIM4v5pscbe1 * pParam->BSIM4v5litl / diffVds; VASCBE = Leff * exp(T0) / pParam->BSIM4v5pscbe2; T1 = T0 * VASCBE / diffVds; dVASCBE_dVg = T1 * dVdseff_dVg; dVASCBE_dVd = -T1 * (1.0 - dVdseff_dVd); dVASCBE_dVb = T1 * dVdseff_dVb; } else { VASCBE = MAX_EXP * Leff/pParam->BSIM4v5pscbe2; dVASCBE_dVg = dVASCBE_dVd = dVASCBE_dVb = 0.0; } } else { VASCBE = MAX_EXP; dVASCBE_dVg = dVASCBE_dVd = dVASCBE_dVb = 0.0; } /* Add DIBL to Ids */ T9 = diffVds / VADIBL; T0 = 1.0 + T9; Idsa = Idl * T0; dIdsa_dVg = T0 * dIdl_dVg - Idl * (dVdseff_dVg + T9 * dVADIBL_dVg) / VADIBL; dIdsa_dVd = T0 * dIdl_dVd + Idl * (1.0 - dVdseff_dVd - T9 * dVADIBL_dVd) / VADIBL; dIdsa_dVb = T0 * dIdl_dVb - Idl * (dVdseff_dVb + T9 * dVADIBL_dVb) / VADIBL; /* Add DITS to Ids */ T9 = diffVds / VADITS; T0 = 1.0 + T9; dIdsa_dVg = T0 * dIdsa_dVg - Idsa * (dVdseff_dVg + T9 * dVADITS_dVg) / VADITS; dIdsa_dVd = T0 * dIdsa_dVd + Idsa * (1.0 - dVdseff_dVd - T9 * dVADITS_dVd) / VADITS; dIdsa_dVb = T0 * dIdsa_dVb - Idsa * dVdseff_dVb / VADITS; Idsa *= T0; /* Add CLM to Ids */ T0 = log(Va / Vasat); dT0_dVg = dVa_dVg / Va - dVasat_dVg / Vasat; dT0_dVb = dVa_dVb / Va - dVasat_dVb / Vasat; dT0_dVd = dVa_dVd / Va - dVasat_dVd / Vasat; T1 = T0 / Cclm; T9 = 1.0 + T1; dT9_dVg = (dT0_dVg - T1 * dCclm_dVg) / Cclm; dT9_dVb = (dT0_dVb - T1 * dCclm_dVb) / Cclm; dT9_dVd = (dT0_dVd - T1 * dCclm_dVd) / Cclm; dIdsa_dVg = dIdsa_dVg * T9 + Idsa * dT9_dVg; dIdsa_dVb = dIdsa_dVb * T9 + Idsa * dT9_dVb; dIdsa_dVd = dIdsa_dVd * T9 + Idsa * dT9_dVd; Idsa *= T9; /* Substrate current begins */ tmp = pParam->BSIM4v5alpha0 + pParam->BSIM4v5alpha1 * Leff; if ((tmp <= 0.0) || (pParam->BSIM4v5beta0 <= 0.0)) { Isub = Gbd = Gbb = Gbg = 0.0; } else { T2 = tmp / Leff; if (diffVds > pParam->BSIM4v5beta0 / EXP_THRESHOLD) { T0 = -pParam->BSIM4v5beta0 / diffVds; T1 = T2 * diffVds * exp(T0); T3 = T1 / diffVds * (T0 - 1.0); dT1_dVg = T3 * dVdseff_dVg; dT1_dVd = T3 * (dVdseff_dVd - 1.0); dT1_dVb = T3 * dVdseff_dVb; } else { T3 = T2 * MIN_EXP; T1 = T3 * diffVds; dT1_dVg = -T3 * dVdseff_dVg; dT1_dVd = T3 * (1.0 - dVdseff_dVd); dT1_dVb = -T3 * dVdseff_dVb; } T4 = Idsa * Vdseff; Isub = T1 * T4; Gbg = T1 * (dIdsa_dVg * Vdseff + Idsa * dVdseff_dVg) + T4 * dT1_dVg; Gbd = T1 * (dIdsa_dVd * Vdseff + Idsa * dVdseff_dVd) + T4 * dT1_dVd; Gbb = T1 * (dIdsa_dVb * Vdseff + Idsa * dVdseff_dVb) + T4 * dT1_dVb; Gbd += Gbg * dVgsteff_dVd; Gbb += Gbg * dVgsteff_dVb; Gbg *= dVgsteff_dVg; Gbb *= dVbseff_dVb; } here->BSIM4v5csub = Isub; here->BSIM4v5gbbs = Gbb; here->BSIM4v5gbgs = Gbg; here->BSIM4v5gbds = Gbd; /* Add SCBE to Ids */ T9 = diffVds / VASCBE; T0 = 1.0 + T9; Ids = Idsa * T0; Gm = T0 * dIdsa_dVg - Idsa * (dVdseff_dVg + T9 * dVASCBE_dVg) / VASCBE; Gds = T0 * dIdsa_dVd + Idsa * (1.0 - dVdseff_dVd - T9 * dVASCBE_dVd) / VASCBE; Gmb = T0 * dIdsa_dVb - Idsa * (dVdseff_dVb + T9 * dVASCBE_dVb) / VASCBE; tmp1 = Gds + Gm * dVgsteff_dVd; tmp2 = Gmb + Gm * dVgsteff_dVb; tmp3 = Gm; Gm = (Ids * dVdseff_dVg + Vdseff * tmp3) * dVgsteff_dVg; Gds = Ids * (dVdseff_dVd + dVdseff_dVg * dVgsteff_dVd) + Vdseff * tmp1; Gmb = (Ids * (dVdseff_dVb + dVdseff_dVg * dVgsteff_dVb) + Vdseff * tmp2) * dVbseff_dVb; cdrain = Ids * Vdseff; /* Source End Velocity Limit */ if((model->BSIM4v5vtlGiven) && (model->BSIM4v5vtl > 0.0) ) { T12 = 1.0 / Leff / CoxeffWovL; T11 = T12 / Vgsteff; T10 = -T11 / Vgsteff; vs = cdrain * T11; /* vs */ dvs_dVg = Gm * T11 + cdrain * T10 * dVgsteff_dVg; dvs_dVd = Gds * T11 + cdrain * T10 * dVgsteff_dVd; dvs_dVb = Gmb * T11 + cdrain * T10 * dVgsteff_dVb; T0 = 2 * MM; T1 = vs / (pParam->BSIM4v5vtl * pParam->BSIM4v5tfactor); if(T1 > 0.0) { T2 = 1.0 + exp(T0 * log(T1)); T3 = (T2 - 1.0) * T0 / vs; Fsevl = 1.0 / exp(log(T2)/ T0); dT2_dVg = T3 * dvs_dVg; dT2_dVd = T3 * dvs_dVd; dT2_dVb = T3 * dvs_dVb; T4 = -1.0 / T0 * Fsevl / T2; dFsevl_dVg = T4 * dT2_dVg; dFsevl_dVd = T4 * dT2_dVd; dFsevl_dVb = T4 * dT2_dVb; } else { Fsevl = 1.0; dFsevl_dVg = 0.0; dFsevl_dVd = 0.0; dFsevl_dVb = 0.0; } Gm *=Fsevl; Gm += cdrain * dFsevl_dVg; Gmb *=Fsevl; Gmb += cdrain * dFsevl_dVb; Gds *=Fsevl; Gds += cdrain * dFsevl_dVd; cdrain *= Fsevl; } here->BSIM4v5gds = Gds; here->BSIM4v5gm = Gm; here->BSIM4v5gmbs = Gmb; here->BSIM4v5IdovVds = Ids; if( here->BSIM4v5IdovVds <= 1.0e-9) here->BSIM4v5IdovVds = 1.0e-9; /* Calculate Rg */ if ((here->BSIM4v5rgateMod > 1) || (here->BSIM4v5trnqsMod != 0) || (here->BSIM4v5acnqsMod != 0)) { T9 = pParam->BSIM4v5xrcrg2 * model->BSIM4v5vtm; T0 = T9 * beta; dT0_dVd = (dbeta_dVd + dbeta_dVg * dVgsteff_dVd) * T9; dT0_dVb = (dbeta_dVb + dbeta_dVg * dVgsteff_dVb) * T9; dT0_dVg = dbeta_dVg * T9; here->BSIM4v5gcrg = pParam->BSIM4v5xrcrg1 * ( T0 + Ids); here->BSIM4v5gcrgd = pParam->BSIM4v5xrcrg1 * (dT0_dVd + tmp1); here->BSIM4v5gcrgb = pParam->BSIM4v5xrcrg1 * (dT0_dVb + tmp2) * dVbseff_dVb; here->BSIM4v5gcrgg = pParam->BSIM4v5xrcrg1 * (dT0_dVg + tmp3) * dVgsteff_dVg; if (here->BSIM4v5nf != 1.0) { here->BSIM4v5gcrg *= here->BSIM4v5nf; here->BSIM4v5gcrgg *= here->BSIM4v5nf; here->BSIM4v5gcrgd *= here->BSIM4v5nf; here->BSIM4v5gcrgb *= here->BSIM4v5nf; } if (here->BSIM4v5rgateMod == 2) { T10 = here->BSIM4v5grgeltd * here->BSIM4v5grgeltd; T11 = here->BSIM4v5grgeltd + here->BSIM4v5gcrg; here->BSIM4v5gcrg = here->BSIM4v5grgeltd * here->BSIM4v5gcrg / T11; T12 = T10 / T11 / T11; here->BSIM4v5gcrgg *= T12; here->BSIM4v5gcrgd *= T12; here->BSIM4v5gcrgb *= T12; } here->BSIM4v5gcrgs = -(here->BSIM4v5gcrgg + here->BSIM4v5gcrgd + here->BSIM4v5gcrgb); } /* Calculate bias-dependent external S/D resistance */ if (model->BSIM4v5rdsMod) { /* Rs(V) */ T0 = vgs - pParam->BSIM4v5vfbsd; T1 = sqrt(T0 * T0 + 1.0e-4); vgs_eff = 0.5 * (T0 + T1); dvgs_eff_dvg = vgs_eff / T1; T0 = 1.0 + pParam->BSIM4v5prwg * vgs_eff; dT0_dvg = -pParam->BSIM4v5prwg / T0 / T0 * dvgs_eff_dvg; T1 = -pParam->BSIM4v5prwb * vbs; dT1_dvb = -pParam->BSIM4v5prwb; T2 = 1.0 / T0 + T1; T3 = T2 + sqrt(T2 * T2 + 0.01); dT3_dvg = T3 / (T3 - T2); dT3_dvb = dT3_dvg * dT1_dvb; dT3_dvg *= dT0_dvg; T4 = pParam->BSIM4v5rs0 * 0.5; Rs = pParam->BSIM4v5rswmin + T3 * T4; dRs_dvg = T4 * dT3_dvg; dRs_dvb = T4 * dT3_dvb; T0 = 1.0 + here->BSIM4v5sourceConductance * Rs; here->BSIM4v5gstot = here->BSIM4v5sourceConductance / T0; T0 = -here->BSIM4v5gstot * here->BSIM4v5gstot; dgstot_dvd = 0.0; /* place holder */ dgstot_dvg = T0 * dRs_dvg; dgstot_dvb = T0 * dRs_dvb; dgstot_dvs = -(dgstot_dvg + dgstot_dvb + dgstot_dvd); /* Rd(V) */ T0 = vgd - pParam->BSIM4v5vfbsd; T1 = sqrt(T0 * T0 + 1.0e-4); vgd_eff = 0.5 * (T0 + T1); dvgd_eff_dvg = vgd_eff / T1; T0 = 1.0 + pParam->BSIM4v5prwg * vgd_eff; dT0_dvg = -pParam->BSIM4v5prwg / T0 / T0 * dvgd_eff_dvg; T1 = -pParam->BSIM4v5prwb * vbd; dT1_dvb = -pParam->BSIM4v5prwb; T2 = 1.0 / T0 + T1; T3 = T2 + sqrt(T2 * T2 + 0.01); dT3_dvg = T3 / (T3 - T2); dT3_dvb = dT3_dvg * dT1_dvb; dT3_dvg *= dT0_dvg; T4 = pParam->BSIM4v5rd0 * 0.5; Rd = pParam->BSIM4v5rdwmin + T3 * T4; dRd_dvg = T4 * dT3_dvg; dRd_dvb = T4 * dT3_dvb; T0 = 1.0 + here->BSIM4v5drainConductance * Rd; here->BSIM4v5gdtot = here->BSIM4v5drainConductance / T0; T0 = -here->BSIM4v5gdtot * here->BSIM4v5gdtot; dgdtot_dvs = 0.0; dgdtot_dvg = T0 * dRd_dvg; dgdtot_dvb = T0 * dRd_dvb; dgdtot_dvd = -(dgdtot_dvg + dgdtot_dvb + dgdtot_dvs); here->BSIM4v5gstotd = vses * dgstot_dvd; here->BSIM4v5gstotg = vses * dgstot_dvg; here->BSIM4v5gstots = vses * dgstot_dvs; here->BSIM4v5gstotb = vses * dgstot_dvb; T2 = vdes - vds; here->BSIM4v5gdtotd = T2 * dgdtot_dvd; here->BSIM4v5gdtotg = T2 * dgdtot_dvg; here->BSIM4v5gdtots = T2 * dgdtot_dvs; here->BSIM4v5gdtotb = T2 * dgdtot_dvb; } else /* WDLiu: for bypass */ { here->BSIM4v5gstot = here->BSIM4v5gstotd = here->BSIM4v5gstotg = 0.0; here->BSIM4v5gstots = here->BSIM4v5gstotb = 0.0; here->BSIM4v5gdtot = here->BSIM4v5gdtotd = here->BSIM4v5gdtotg = 0.0; here->BSIM4v5gdtots = here->BSIM4v5gdtotb = 0.0; } /* Calculate GIDL current */ vgs_eff = here->BSIM4v5vgs_eff; dvgs_eff_dvg = here->BSIM4v5dvgs_eff_dvg; T0 = 3.0 * model->BSIM4v5toxe; T1 = (vds - vgs_eff - pParam->BSIM4v5egidl ) / T0; if ((pParam->BSIM4v5agidl <= 0.0) || (pParam->BSIM4v5bgidl <= 0.0) || (T1 <= 0.0) || (pParam->BSIM4v5cgidl <= 0.0) || (vbd > 0.0)) Igidl = Ggidld = Ggidlg = Ggidlb = 0.0; else { dT1_dVd = 1.0 / T0; dT1_dVg = -dvgs_eff_dvg * dT1_dVd; T2 = pParam->BSIM4v5bgidl / T1; if (T2 < 100.0) { Igidl = pParam->BSIM4v5agidl * pParam->BSIM4v5weffCJ * T1 * exp(-T2); T3 = Igidl * (1.0 + T2) / T1; Ggidld = T3 * dT1_dVd; Ggidlg = T3 * dT1_dVg; } else { Igidl = pParam->BSIM4v5agidl * pParam->BSIM4v5weffCJ * 3.720075976e-44; Ggidld = Igidl * dT1_dVd; Ggidlg = Igidl * dT1_dVg; Igidl *= T1; } T4 = vbd * vbd; T5 = -vbd * T4; T6 = pParam->BSIM4v5cgidl + T5; T7 = T5 / T6; T8 = 3.0 * pParam->BSIM4v5cgidl * T4 / T6 / T6; Ggidld = Ggidld * T7 + Igidl * T8; Ggidlg = Ggidlg * T7; Ggidlb = -Igidl * T8; Igidl *= T7; } here->BSIM4v5Igidl = Igidl; here->BSIM4v5ggidld = Ggidld; here->BSIM4v5ggidlg = Ggidlg; here->BSIM4v5ggidlb = Ggidlb; /* Calculate GISL current */ vgd_eff = here->BSIM4v5vgd_eff; dvgd_eff_dvg = here->BSIM4v5dvgd_eff_dvg; T1 = (-vds - vgd_eff - pParam->BSIM4v5egidl ) / T0; if ((pParam->BSIM4v5agidl <= 0.0) || (pParam->BSIM4v5bgidl <= 0.0) || (T1 <= 0.0) || (pParam->BSIM4v5cgidl <= 0.0) || (vbs > 0.0)) Igisl = Ggisls = Ggislg = Ggislb = 0.0; else { dT1_dVd = 1.0 / T0; dT1_dVg = -dvgd_eff_dvg * dT1_dVd; T2 = pParam->BSIM4v5bgidl / T1; if (T2 < 100.0) { Igisl = pParam->BSIM4v5agidl * pParam->BSIM4v5weffCJ * T1 * exp(-T2); T3 = Igisl * (1.0 + T2) / T1; Ggisls = T3 * dT1_dVd; Ggislg = T3 * dT1_dVg; } else { Igisl = pParam->BSIM4v5agidl * pParam->BSIM4v5weffCJ * 3.720075976e-44; Ggisls = Igisl * dT1_dVd; Ggislg = Igisl * dT1_dVg; Igisl *= T1; } T4 = vbs * vbs; T5 = -vbs * T4; T6 = pParam->BSIM4v5cgidl + T5; T7 = T5 / T6; T8 = 3.0 * pParam->BSIM4v5cgidl * T4 / T6 / T6; Ggisls = Ggisls * T7 + Igisl * T8; Ggislg = Ggislg * T7; Ggislb = -Igisl * T8; Igisl *= T7; } here->BSIM4v5Igisl = Igisl; here->BSIM4v5ggisls = Ggisls; here->BSIM4v5ggislg = Ggislg; here->BSIM4v5ggislb = Ggislb; /* Calculate gate tunneling current */ if ((model->BSIM4v5igcMod != 0) || (model->BSIM4v5igbMod != 0)) { Vfb = here->BSIM4v5vfbzb; V3 = Vfb - Vgs_eff + Vbseff - DELTA_3; if (Vfb <= 0.0) T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * Vfb); else T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * Vfb); T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = Vfb - 0.5 * (V3 + T0); dVfbeff_dVg = T1 * dVgs_eff_dVg; dVfbeff_dVb = -T1; /* WDLiu: -No surprise? No. -Good! */ Voxacc = Vfb - Vfbeff; dVoxacc_dVg = -dVfbeff_dVg; dVoxacc_dVb = -dVfbeff_dVb; if (Voxacc < 0.0) /* WDLiu: Avoiding numerical instability. */ Voxacc = dVoxacc_dVg = dVoxacc_dVb = 0.0; T0 = 0.5 * pParam->BSIM4v5k1ox; T3 = Vgs_eff - Vfbeff - Vbseff - Vgsteff; if (pParam->BSIM4v5k1ox == 0.0) Voxdepinv = dVoxdepinv_dVg = dVoxdepinv_dVd = dVoxdepinv_dVb = 0.0; else if (T3 < 0.0) { Voxdepinv = -T3; dVoxdepinv_dVg = -dVgs_eff_dVg + dVfbeff_dVg + dVgsteff_dVg; dVoxdepinv_dVd = dVgsteff_dVd; dVoxdepinv_dVb = dVfbeff_dVb + 1.0 + dVgsteff_dVb; } else { T1 = sqrt(T0 * T0 + T3); T2 = T0 / T1; Voxdepinv = pParam->BSIM4v5k1ox * (T1 - T0); dVoxdepinv_dVg = T2 * (dVgs_eff_dVg - dVfbeff_dVg - dVgsteff_dVg); dVoxdepinv_dVd = -T2 * dVgsteff_dVd; dVoxdepinv_dVb = -T2 * (dVfbeff_dVb + 1.0 + dVgsteff_dVb); } Voxdepinv += Vgsteff; dVoxdepinv_dVg += dVgsteff_dVg; dVoxdepinv_dVd += dVgsteff_dVd; dVoxdepinv_dVb += dVgsteff_dVb; } if(model->BSIM4v5tempMod < 2) tmp = Vtm; else /* model->BSIM4v5tempMod = 2 */ tmp = Vtm0; if (model->BSIM4v5igcMod) { T0 = tmp * pParam->BSIM4v5nigc; if(model->BSIM4v5igcMod == 1) { VxNVt = (Vgs_eff - model->BSIM4v5type * here->BSIM4v5vth0) / T0; if (VxNVt > EXP_THRESHOLD) { Vaux = Vgs_eff - model->BSIM4v5type * here->BSIM4v5vth0; dVaux_dVg = dVgs_eff_dVg; dVaux_dVd = 0.0; dVaux_dVb = 0.0; } } else if (model->BSIM4v5igcMod == 2) { VxNVt = (Vgs_eff - here->BSIM4v5von) / T0; if (VxNVt > EXP_THRESHOLD) { Vaux = Vgs_eff - here->BSIM4v5von; dVaux_dVg = dVgs_eff_dVg; dVaux_dVd = -dVth_dVd; dVaux_dVb = -dVth_dVb; } } if (VxNVt < -EXP_THRESHOLD) { Vaux = T0 * log(1.0 + MIN_EXP); dVaux_dVg = dVaux_dVd = dVaux_dVb = 0.0; } else if ((VxNVt >= -EXP_THRESHOLD) && (VxNVt <= EXP_THRESHOLD)) { ExpVxNVt = exp(VxNVt); Vaux = T0 * log(1.0 + ExpVxNVt); dVaux_dVg = ExpVxNVt / (1.0 + ExpVxNVt); if(model->BSIM4v5igcMod == 1) { dVaux_dVd = 0.0; dVaux_dVb = 0.0; } else if (model->BSIM4v5igcMod == 2) { dVaux_dVd = -dVgs_eff_dVg * dVth_dVd; dVaux_dVb = -dVgs_eff_dVg * dVth_dVb; } dVaux_dVg *= dVgs_eff_dVg; } T2 = Vgs_eff * Vaux; dT2_dVg = dVgs_eff_dVg * Vaux + Vgs_eff * dVaux_dVg; dT2_dVd = Vgs_eff * dVaux_dVd; dT2_dVb = Vgs_eff * dVaux_dVb; T11 = pParam->BSIM4v5Aechvb; T12 = pParam->BSIM4v5Bechvb; T3 = pParam->BSIM4v5aigc * pParam->BSIM4v5cigc - pParam->BSIM4v5bigc; T4 = pParam->BSIM4v5bigc * pParam->BSIM4v5cigc; T5 = T12 * (pParam->BSIM4v5aigc + T3 * Voxdepinv - T4 * Voxdepinv * Voxdepinv); if (T5 > EXP_THRESHOLD) { T6 = MAX_EXP; dT6_dVg = dT6_dVd = dT6_dVb = 0.0; } else if (T5 < -EXP_THRESHOLD) { T6 = MIN_EXP; dT6_dVg = dT6_dVd = dT6_dVb = 0.0; } else { T6 = exp(T5); dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * Voxdepinv); dT6_dVd = dT6_dVg * dVoxdepinv_dVd; dT6_dVb = dT6_dVg * dVoxdepinv_dVb; dT6_dVg *= dVoxdepinv_dVg; } Igc = T11 * T2 * T6; dIgc_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg); dIgc_dVd = T11 * (T2 * dT6_dVd + T6 * dT2_dVd); dIgc_dVb = T11 * (T2 * dT6_dVb + T6 * dT2_dVb); if (model->BSIM4v5pigcdGiven) { Pigcd = pParam->BSIM4v5pigcd; dPigcd_dVg = dPigcd_dVd = dPigcd_dVb = 0.0; } else { T11 = pParam->BSIM4v5Bechvb * model->BSIM4v5toxe; T12 = Vgsteff + 1.0e-20; T13 = T11 / T12 / T12; T14 = -T13 / T12; Pigcd = T13 * (1.0 - 0.5 * Vdseff / T12); dPigcd_dVg = T14 * (2.0 + 0.5 * (dVdseff_dVg - 3.0 * Vdseff / T12)); dPigcd_dVd = 0.5 * T14 * dVdseff_dVd; dPigcd_dVb = 0.5 * T14 * dVdseff_dVb; } T7 = -Pigcd * Vdseff; /* bugfix */ dT7_dVg = -Vdseff * dPigcd_dVg - Pigcd * dVdseff_dVg; dT7_dVd = -Vdseff * dPigcd_dVd - Pigcd * dVdseff_dVd + dT7_dVg * dVgsteff_dVd; dT7_dVb = -Vdseff * dPigcd_dVb - Pigcd * dVdseff_dVb + dT7_dVg * dVgsteff_dVb; dT7_dVg *= dVgsteff_dVg; dT7_dVb *= dVbseff_dVb; T8 = T7 * T7 + 2.0e-4; dT8_dVg = 2.0 * T7; dT8_dVd = dT8_dVg * dT7_dVd; dT8_dVb = dT8_dVg * dT7_dVb; dT8_dVg *= dT7_dVg; if (T7 > EXP_THRESHOLD) { T9 = MAX_EXP; dT9_dVg = dT9_dVd = dT9_dVb = 0.0; } else if (T7 < -EXP_THRESHOLD) { T9 = MIN_EXP; dT9_dVg = dT9_dVd = dT9_dVb = 0.0; } else { T9 = exp(T7); dT9_dVg = T9 * dT7_dVg; dT9_dVd = T9 * dT7_dVd; dT9_dVb = T9 * dT7_dVb; } T0 = T8 * T8; T1 = T9 - 1.0 + 1.0e-4; T10 = (T1 - T7) / T8; dT10_dVg = (dT9_dVg - dT7_dVg - T10 * dT8_dVg) / T8; dT10_dVd = (dT9_dVd - dT7_dVd - T10 * dT8_dVd) / T8; dT10_dVb = (dT9_dVb - dT7_dVb - T10 * dT8_dVb) / T8; Igcs = Igc * T10; dIgcs_dVg = dIgc_dVg * T10 + Igc * dT10_dVg; dIgcs_dVd = dIgc_dVd * T10 + Igc * dT10_dVd; dIgcs_dVb = dIgc_dVb * T10 + Igc * dT10_dVb; T1 = T9 - 1.0 - 1.0e-4; T10 = (T7 * T9 - T1) / T8; dT10_dVg = (dT7_dVg * T9 + (T7 - 1.0) * dT9_dVg - T10 * dT8_dVg) / T8; dT10_dVd = (dT7_dVd * T9 + (T7 - 1.0) * dT9_dVd - T10 * dT8_dVd) / T8; dT10_dVb = (dT7_dVb * T9 + (T7 - 1.0) * dT9_dVb - T10 * dT8_dVb) / T8; Igcd = Igc * T10; dIgcd_dVg = dIgc_dVg * T10 + Igc * dT10_dVg; dIgcd_dVd = dIgc_dVd * T10 + Igc * dT10_dVd; dIgcd_dVb = dIgc_dVb * T10 + Igc * dT10_dVb; here->BSIM4v5Igcs = Igcs; here->BSIM4v5gIgcsg = dIgcs_dVg; here->BSIM4v5gIgcsd = dIgcs_dVd; here->BSIM4v5gIgcsb = dIgcs_dVb * dVbseff_dVb; here->BSIM4v5Igcd = Igcd; here->BSIM4v5gIgcdg = dIgcd_dVg; here->BSIM4v5gIgcdd = dIgcd_dVd; here->BSIM4v5gIgcdb = dIgcd_dVb * dVbseff_dVb; T0 = vgs - (pParam->BSIM4v5vfbsd + pParam->BSIM4v5vfbsdoff); vgs_eff = sqrt(T0 * T0 + 1.0e-4); dvgs_eff_dvg = T0 / vgs_eff; T2 = vgs * vgs_eff; dT2_dVg = vgs * dvgs_eff_dvg + vgs_eff; T11 = pParam->BSIM4v5AechvbEdge; T12 = pParam->BSIM4v5BechvbEdge; T3 = pParam->BSIM4v5aigsd * pParam->BSIM4v5cigsd - pParam->BSIM4v5bigsd; T4 = pParam->BSIM4v5bigsd * pParam->BSIM4v5cigsd; T5 = T12 * (pParam->BSIM4v5aigsd + T3 * vgs_eff - T4 * vgs_eff * vgs_eff); if (T5 > EXP_THRESHOLD) { T6 = MAX_EXP; dT6_dVg = 0.0; } else if (T5 < -EXP_THRESHOLD) { T6 = MIN_EXP; dT6_dVg = 0.0; } else { T6 = exp(T5); dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * vgs_eff) * dvgs_eff_dvg; } Igs = T11 * T2 * T6; dIgs_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg); dIgs_dVs = -dIgs_dVg; T0 = vgd - (pParam->BSIM4v5vfbsd + pParam->BSIM4v5vfbsdoff); vgd_eff = sqrt(T0 * T0 + 1.0e-4); dvgd_eff_dvg = T0 / vgd_eff; T2 = vgd * vgd_eff; dT2_dVg = vgd * dvgd_eff_dvg + vgd_eff; T5 = T12 * (pParam->BSIM4v5aigsd + T3 * vgd_eff - T4 * vgd_eff * vgd_eff); if (T5 > EXP_THRESHOLD) { T6 = MAX_EXP; dT6_dVg = 0.0; } else if (T5 < -EXP_THRESHOLD) { T6 = MIN_EXP; dT6_dVg = 0.0; } else { T6 = exp(T5); dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * vgd_eff) * dvgd_eff_dvg; } Igd = T11 * T2 * T6; dIgd_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg); dIgd_dVd = -dIgd_dVg; here->BSIM4v5Igs = Igs; here->BSIM4v5gIgsg = dIgs_dVg; here->BSIM4v5gIgss = dIgs_dVs; here->BSIM4v5Igd = Igd; here->BSIM4v5gIgdg = dIgd_dVg; here->BSIM4v5gIgdd = dIgd_dVd; } else { here->BSIM4v5Igcs = here->BSIM4v5gIgcsg = here->BSIM4v5gIgcsd = here->BSIM4v5gIgcsb = 0.0; here->BSIM4v5Igcd = here->BSIM4v5gIgcdg = here->BSIM4v5gIgcdd = here->BSIM4v5gIgcdb = 0.0; here->BSIM4v5Igs = here->BSIM4v5gIgsg = here->BSIM4v5gIgss = 0.0; here->BSIM4v5Igd = here->BSIM4v5gIgdg = here->BSIM4v5gIgdd = 0.0; } if (model->BSIM4v5igbMod) { T0 = tmp * pParam->BSIM4v5nigbacc; T1 = -Vgs_eff + Vbseff + Vfb; VxNVt = T1 / T0; if (VxNVt > EXP_THRESHOLD) { Vaux = T1; dVaux_dVg = -dVgs_eff_dVg; dVaux_dVb = 1.0; } else if (VxNVt < -EXP_THRESHOLD) { Vaux = T0 * log(1.0 + MIN_EXP); dVaux_dVg = dVaux_dVb = 0.0; } else { ExpVxNVt = exp(VxNVt); Vaux = T0 * log(1.0 + ExpVxNVt); dVaux_dVb = ExpVxNVt / (1.0 + ExpVxNVt); dVaux_dVg = -dVaux_dVb * dVgs_eff_dVg; } T2 = (Vgs_eff - Vbseff) * Vaux; dT2_dVg = dVgs_eff_dVg * Vaux + (Vgs_eff - Vbseff) * dVaux_dVg; dT2_dVb = -Vaux + (Vgs_eff - Vbseff) * dVaux_dVb; T11 = 4.97232e-7 * pParam->BSIM4v5weff * pParam->BSIM4v5leff * pParam->BSIM4v5ToxRatio; T12 = -7.45669e11 * model->BSIM4v5toxe; T3 = pParam->BSIM4v5aigbacc * pParam->BSIM4v5cigbacc - pParam->BSIM4v5bigbacc; T4 = pParam->BSIM4v5bigbacc * pParam->BSIM4v5cigbacc; T5 = T12 * (pParam->BSIM4v5aigbacc + T3 * Voxacc - T4 * Voxacc * Voxacc); if (T5 > EXP_THRESHOLD) { T6 = MAX_EXP; dT6_dVg = dT6_dVb = 0.0; } else if (T5 < -EXP_THRESHOLD) { T6 = MIN_EXP; dT6_dVg = dT6_dVb = 0.0; } else { T6 = exp(T5); dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * Voxacc); dT6_dVb = dT6_dVg * dVoxacc_dVb; dT6_dVg *= dVoxacc_dVg; } Igbacc = T11 * T2 * T6; dIgbacc_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg); dIgbacc_dVb = T11 * (T2 * dT6_dVb + T6 * dT2_dVb); T0 = tmp * pParam->BSIM4v5nigbinv; T1 = Voxdepinv - pParam->BSIM4v5eigbinv; VxNVt = T1 / T0; if (VxNVt > EXP_THRESHOLD) { Vaux = T1; dVaux_dVg = dVoxdepinv_dVg; dVaux_dVd = dVoxdepinv_dVd; dVaux_dVb = dVoxdepinv_dVb; } else if (VxNVt < -EXP_THRESHOLD) { Vaux = T0 * log(1.0 + MIN_EXP); dVaux_dVg = dVaux_dVd = dVaux_dVb = 0.0; } else { ExpVxNVt = exp(VxNVt); Vaux = T0 * log(1.0 + ExpVxNVt); dVaux_dVg = ExpVxNVt / (1.0 + ExpVxNVt); dVaux_dVd = dVaux_dVg * dVoxdepinv_dVd; dVaux_dVb = dVaux_dVg * dVoxdepinv_dVb; dVaux_dVg *= dVoxdepinv_dVg; } T2 = (Vgs_eff - Vbseff) * Vaux; dT2_dVg = dVgs_eff_dVg * Vaux + (Vgs_eff - Vbseff) * dVaux_dVg; dT2_dVd = (Vgs_eff - Vbseff) * dVaux_dVd; dT2_dVb = -Vaux + (Vgs_eff - Vbseff) * dVaux_dVb; T11 *= 0.75610; T12 *= 1.31724; T3 = pParam->BSIM4v5aigbinv * pParam->BSIM4v5cigbinv - pParam->BSIM4v5bigbinv; T4 = pParam->BSIM4v5bigbinv * pParam->BSIM4v5cigbinv; T5 = T12 * (pParam->BSIM4v5aigbinv + T3 * Voxdepinv - T4 * Voxdepinv * Voxdepinv); if (T5 > EXP_THRESHOLD) { T6 = MAX_EXP; dT6_dVg = dT6_dVd = dT6_dVb = 0.0; } else if (T5 < -EXP_THRESHOLD) { T6 = MIN_EXP; dT6_dVg = dT6_dVd = dT6_dVb = 0.0; } else { T6 = exp(T5); dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * Voxdepinv); dT6_dVd = dT6_dVg * dVoxdepinv_dVd; dT6_dVb = dT6_dVg * dVoxdepinv_dVb; dT6_dVg *= dVoxdepinv_dVg; } Igbinv = T11 * T2 * T6; dIgbinv_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg); dIgbinv_dVd = T11 * (T2 * dT6_dVd + T6 * dT2_dVd); dIgbinv_dVb = T11 * (T2 * dT6_dVb + T6 * dT2_dVb); here->BSIM4v5Igb = Igbinv + Igbacc; here->BSIM4v5gIgbg = dIgbinv_dVg + dIgbacc_dVg; here->BSIM4v5gIgbd = dIgbinv_dVd; here->BSIM4v5gIgbb = (dIgbinv_dVb + dIgbacc_dVb) * dVbseff_dVb; } else { here->BSIM4v5Igb = here->BSIM4v5gIgbg = here->BSIM4v5gIgbd = here->BSIM4v5gIgbs = here->BSIM4v5gIgbb = 0.0; } /* End of Gate current */ if (here->BSIM4v5nf != 1.0) { cdrain *= here->BSIM4v5nf; here->BSIM4v5gds *= here->BSIM4v5nf; here->BSIM4v5gm *= here->BSIM4v5nf; here->BSIM4v5gmbs *= here->BSIM4v5nf; here->BSIM4v5IdovVds *= here->BSIM4v5nf; here->BSIM4v5gbbs *= here->BSIM4v5nf; here->BSIM4v5gbgs *= here->BSIM4v5nf; here->BSIM4v5gbds *= here->BSIM4v5nf; here->BSIM4v5csub *= here->BSIM4v5nf; here->BSIM4v5Igidl *= here->BSIM4v5nf; here->BSIM4v5ggidld *= here->BSIM4v5nf; here->BSIM4v5ggidlg *= here->BSIM4v5nf; here->BSIM4v5ggidlb *= here->BSIM4v5nf; here->BSIM4v5Igisl *= here->BSIM4v5nf; here->BSIM4v5ggisls *= here->BSIM4v5nf; here->BSIM4v5ggislg *= here->BSIM4v5nf; here->BSIM4v5ggislb *= here->BSIM4v5nf; here->BSIM4v5Igcs *= here->BSIM4v5nf; here->BSIM4v5gIgcsg *= here->BSIM4v5nf; here->BSIM4v5gIgcsd *= here->BSIM4v5nf; here->BSIM4v5gIgcsb *= here->BSIM4v5nf; here->BSIM4v5Igcd *= here->BSIM4v5nf; here->BSIM4v5gIgcdg *= here->BSIM4v5nf; here->BSIM4v5gIgcdd *= here->BSIM4v5nf; here->BSIM4v5gIgcdb *= here->BSIM4v5nf; here->BSIM4v5Igs *= here->BSIM4v5nf; here->BSIM4v5gIgsg *= here->BSIM4v5nf; here->BSIM4v5gIgss *= here->BSIM4v5nf; here->BSIM4v5Igd *= here->BSIM4v5nf; here->BSIM4v5gIgdg *= here->BSIM4v5nf; here->BSIM4v5gIgdd *= here->BSIM4v5nf; here->BSIM4v5Igb *= here->BSIM4v5nf; here->BSIM4v5gIgbg *= here->BSIM4v5nf; here->BSIM4v5gIgbd *= here->BSIM4v5nf; here->BSIM4v5gIgbb *= here->BSIM4v5nf; } here->BSIM4v5ggidls = -(here->BSIM4v5ggidld + here->BSIM4v5ggidlg + here->BSIM4v5ggidlb); here->BSIM4v5ggisld = -(here->BSIM4v5ggisls + here->BSIM4v5ggislg + here->BSIM4v5ggislb); here->BSIM4v5gIgbs = -(here->BSIM4v5gIgbg + here->BSIM4v5gIgbd + here->BSIM4v5gIgbb); here->BSIM4v5gIgcss = -(here->BSIM4v5gIgcsg + here->BSIM4v5gIgcsd + here->BSIM4v5gIgcsb); here->BSIM4v5gIgcds = -(here->BSIM4v5gIgcdg + here->BSIM4v5gIgcdd + here->BSIM4v5gIgcdb); here->BSIM4v5cd = cdrain; if (model->BSIM4v5tnoiMod == 0) { Abulk = Abulk0 * pParam->BSIM4v5abulkCVfactor; Vdsat = Vgsteff / Abulk; T0 = Vdsat - Vds - DELTA_4; T1 = sqrt(T0 * T0 + 4.0 * DELTA_4 * Vdsat); if (T0 >= 0.0) Vdseff = Vdsat - 0.5 * (T0 + T1); else { T3 = (DELTA_4 + DELTA_4) / (T1 - T0); T4 = 1.0 - T3; T5 = Vdsat * T3 / (T1 - T0); Vdseff = Vdsat * T4; } if (Vds == 0.0) Vdseff = 0.0; T0 = Abulk * Vdseff; T1 = 12.0 * (Vgsteff - 0.5 * T0 + 1.0e-20); T2 = Vdseff / T1; T3 = T0 * T2; here->BSIM4v5qinv = Coxeff * pParam->BSIM4v5weffCV * here->BSIM4v5nf * pParam->BSIM4v5leffCV * (Vgsteff - 0.5 * T0 + Abulk * T3); } /* * BSIM4v5 C-V begins */ if ((model->BSIM4v5xpart < 0) || (!ChargeComputationNeeded)) { qgate = qdrn = qsrc = qbulk = 0.0; here->BSIM4v5cggb = here->BSIM4v5cgsb = here->BSIM4v5cgdb = 0.0; here->BSIM4v5cdgb = here->BSIM4v5cdsb = here->BSIM4v5cddb = 0.0; here->BSIM4v5cbgb = here->BSIM4v5cbsb = here->BSIM4v5cbdb = 0.0; here->BSIM4v5csgb = here->BSIM4v5cssb = here->BSIM4v5csdb = 0.0; here->BSIM4v5cgbb = here->BSIM4v5csbb = here->BSIM4v5cdbb = here->BSIM4v5cbbb = 0.0; here->BSIM4v5cqdb = here->BSIM4v5cqsb = here->BSIM4v5cqgb = here->BSIM4v5cqbb = 0.0; here->BSIM4v5gtau = 0.0; goto finished; } else if (model->BSIM4v5capMod == 0) { if (Vbseff < 0.0) { Vbseff = Vbs; dVbseff_dVb = 1.0; } else { Vbseff = pParam->BSIM4v5phi - Phis; dVbseff_dVb = -dPhis_dVb; } Vfb = pParam->BSIM4v5vfbcv; Vth = Vfb + pParam->BSIM4v5phi + pParam->BSIM4v5k1ox * sqrtPhis; Vgst = Vgs_eff - Vth; dVth_dVb = pParam->BSIM4v5k1ox * dsqrtPhis_dVb; dVgst_dVb = -dVth_dVb; dVgst_dVg = dVgs_eff_dVg; CoxWL = model->BSIM4v5coxe * pParam->BSIM4v5weffCV * pParam->BSIM4v5leffCV * here->BSIM4v5nf; Arg1 = Vgs_eff - Vbseff - Vfb; if (Arg1 <= 0.0) { qgate = CoxWL * Arg1; qbulk = -qgate; qdrn = 0.0; here->BSIM4v5cggb = CoxWL * dVgs_eff_dVg; here->BSIM4v5cgdb = 0.0; here->BSIM4v5cgsb = CoxWL * (dVbseff_dVb - dVgs_eff_dVg); here->BSIM4v5cdgb = 0.0; here->BSIM4v5cddb = 0.0; here->BSIM4v5cdsb = 0.0; here->BSIM4v5cbgb = -CoxWL * dVgs_eff_dVg; here->BSIM4v5cbdb = 0.0; here->BSIM4v5cbsb = -here->BSIM4v5cgsb; } /* Arg1 <= 0.0, end of accumulation */ else if (Vgst <= 0.0) { T1 = 0.5 * pParam->BSIM4v5k1ox; T2 = sqrt(T1 * T1 + Arg1); qgate = CoxWL * pParam->BSIM4v5k1ox * (T2 - T1); qbulk = -qgate; qdrn = 0.0; T0 = CoxWL * T1 / T2; here->BSIM4v5cggb = T0 * dVgs_eff_dVg; here->BSIM4v5cgdb = 0.0; here->BSIM4v5cgsb = T0 * (dVbseff_dVb - dVgs_eff_dVg); here->BSIM4v5cdgb = 0.0; here->BSIM4v5cddb = 0.0; here->BSIM4v5cdsb = 0.0; here->BSIM4v5cbgb = -here->BSIM4v5cggb; here->BSIM4v5cbdb = 0.0; here->BSIM4v5cbsb = -here->BSIM4v5cgsb; } /* Vgst <= 0.0, end of depletion */ else { One_Third_CoxWL = CoxWL / 3.0; Two_Third_CoxWL = 2.0 * One_Third_CoxWL; AbulkCV = Abulk0 * pParam->BSIM4v5abulkCVfactor; dAbulkCV_dVb = pParam->BSIM4v5abulkCVfactor * dAbulk0_dVb; Vdsat = Vgst / AbulkCV; dVdsat_dVg = dVgs_eff_dVg / AbulkCV; dVdsat_dVb = - (Vdsat * dAbulkCV_dVb + dVth_dVb)/ AbulkCV; if (model->BSIM4v5xpart > 0.5) { /* 0/100 Charge partition model */ if (Vdsat <= Vds) { /* saturation region */ T1 = Vdsat / 3.0; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4v5phi - T1); T2 = -Two_Third_CoxWL * Vgst; qbulk = -(qgate + T2); qdrn = 0.0; here->BSIM4v5cggb = One_Third_CoxWL * (3.0 - dVdsat_dVg) * dVgs_eff_dVg; T2 = -One_Third_CoxWL * dVdsat_dVb; here->BSIM4v5cgsb = -(here->BSIM4v5cggb + T2); here->BSIM4v5cgdb = 0.0; here->BSIM4v5cdgb = 0.0; here->BSIM4v5cddb = 0.0; here->BSIM4v5cdsb = 0.0; here->BSIM4v5cbgb = -(here->BSIM4v5cggb - Two_Third_CoxWL * dVgs_eff_dVg); T3 = -(T2 + Two_Third_CoxWL * dVth_dVb); here->BSIM4v5cbsb = -(here->BSIM4v5cbgb + T3); here->BSIM4v5cbdb = 0.0; } else { /* linear region */ Alphaz = Vgst / Vdsat; T1 = 2.0 * Vdsat - Vds; T2 = Vds / (3.0 * T1); T3 = T2 * Vds; T9 = 0.25 * CoxWL; T4 = T9 * Alphaz; T7 = 2.0 * Vds - T1 - 3.0 * T3; T8 = T3 - T1 - 2.0 * Vds; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4v5phi - 0.5 * (Vds - T3)); T10 = T4 * T8; qdrn = T4 * T7; qbulk = -(qgate + qdrn + T10); T5 = T3 / T1; here->BSIM4v5cggb = CoxWL * (1.0 - T5 * dVdsat_dVg) * dVgs_eff_dVg; T11 = -CoxWL * T5 * dVdsat_dVb; here->BSIM4v5cgdb = CoxWL * (T2 - 0.5 + 0.5 * T5); here->BSIM4v5cgsb = -(here->BSIM4v5cggb + T11 + here->BSIM4v5cgdb); T6 = 1.0 / Vdsat; dAlphaz_dVg = T6 * (1.0 - Alphaz * dVdsat_dVg); dAlphaz_dVb = -T6 * (dVth_dVb + Alphaz * dVdsat_dVb); T7 = T9 * T7; T8 = T9 * T8; T9 = 2.0 * T4 * (1.0 - 3.0 * T5); here->BSIM4v5cdgb = (T7 * dAlphaz_dVg - T9 * dVdsat_dVg) * dVgs_eff_dVg; T12 = T7 * dAlphaz_dVb - T9 * dVdsat_dVb; here->BSIM4v5cddb = T4 * (3.0 - 6.0 * T2 - 3.0 * T5); here->BSIM4v5cdsb = -(here->BSIM4v5cdgb + T12 + here->BSIM4v5cddb); T9 = 2.0 * T4 * (1.0 + T5); T10 = (T8 * dAlphaz_dVg - T9 * dVdsat_dVg) * dVgs_eff_dVg; T11 = T8 * dAlphaz_dVb - T9 * dVdsat_dVb; T12 = T4 * (2.0 * T2 + T5 - 1.0); T0 = -(T10 + T11 + T12); here->BSIM4v5cbgb = -(here->BSIM4v5cggb + here->BSIM4v5cdgb + T10); here->BSIM4v5cbdb = -(here->BSIM4v5cgdb + here->BSIM4v5cddb + T12); here->BSIM4v5cbsb = -(here->BSIM4v5cgsb + here->BSIM4v5cdsb + T0); } } else if (model->BSIM4v5xpart < 0.5) { /* 40/60 Charge partition model */ if (Vds >= Vdsat) { /* saturation region */ T1 = Vdsat / 3.0; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4v5phi - T1); T2 = -Two_Third_CoxWL * Vgst; qbulk = -(qgate + T2); qdrn = 0.4 * T2; here->BSIM4v5cggb = One_Third_CoxWL * (3.0 - dVdsat_dVg) * dVgs_eff_dVg; T2 = -One_Third_CoxWL * dVdsat_dVb; here->BSIM4v5cgsb = -(here->BSIM4v5cggb + T2); here->BSIM4v5cgdb = 0.0; T3 = 0.4 * Two_Third_CoxWL; here->BSIM4v5cdgb = -T3 * dVgs_eff_dVg; here->BSIM4v5cddb = 0.0; T4 = T3 * dVth_dVb; here->BSIM4v5cdsb = -(T4 + here->BSIM4v5cdgb); here->BSIM4v5cbgb = -(here->BSIM4v5cggb - Two_Third_CoxWL * dVgs_eff_dVg); T3 = -(T2 + Two_Third_CoxWL * dVth_dVb); here->BSIM4v5cbsb = -(here->BSIM4v5cbgb + T3); here->BSIM4v5cbdb = 0.0; } else { /* linear region */ Alphaz = Vgst / Vdsat; T1 = 2.0 * Vdsat - Vds; T2 = Vds / (3.0 * T1); T3 = T2 * Vds; T9 = 0.25 * CoxWL; T4 = T9 * Alphaz; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4v5phi - 0.5 * (Vds - T3)); T5 = T3 / T1; here->BSIM4v5cggb = CoxWL * (1.0 - T5 * dVdsat_dVg) * dVgs_eff_dVg; tmp = -CoxWL * T5 * dVdsat_dVb; here->BSIM4v5cgdb = CoxWL * (T2 - 0.5 + 0.5 * T5); here->BSIM4v5cgsb = -(here->BSIM4v5cggb + here->BSIM4v5cgdb + tmp); T6 = 1.0 / Vdsat; dAlphaz_dVg = T6 * (1.0 - Alphaz * dVdsat_dVg); dAlphaz_dVb = -T6 * (dVth_dVb + Alphaz * dVdsat_dVb); T6 = 8.0 * Vdsat * Vdsat - 6.0 * Vdsat * Vds + 1.2 * Vds * Vds; T8 = T2 / T1; T7 = Vds - T1 - T8 * T6; qdrn = T4 * T7; T7 *= T9; tmp = T8 / T1; tmp1 = T4 * (2.0 - 4.0 * tmp * T6 + T8 * (16.0 * Vdsat - 6.0 * Vds)); here->BSIM4v5cdgb = (T7 * dAlphaz_dVg - tmp1 * dVdsat_dVg) * dVgs_eff_dVg; T10 = T7 * dAlphaz_dVb - tmp1 * dVdsat_dVb; here->BSIM4v5cddb = T4 * (2.0 - (1.0 / (3.0 * T1 * T1) + 2.0 * tmp) * T6 + T8 * (6.0 * Vdsat - 2.4 * Vds)); here->BSIM4v5cdsb = -(here->BSIM4v5cdgb + T10 + here->BSIM4v5cddb); T7 = 2.0 * (T1 + T3); qbulk = -(qgate - T4 * T7); T7 *= T9; T0 = 4.0 * T4 * (1.0 - T5); T12 = (-T7 * dAlphaz_dVg - here->BSIM4v5cdgb - T0 * dVdsat_dVg) * dVgs_eff_dVg; T11 = -T7 * dAlphaz_dVb - T10 - T0 * dVdsat_dVb; T10 = -4.0 * T4 * (T2 - 0.5 + 0.5 * T5) - here->BSIM4v5cddb; tmp = -(T10 + T11 + T12); here->BSIM4v5cbgb = -(here->BSIM4v5cggb + here->BSIM4v5cdgb + T12); here->BSIM4v5cbdb = -(here->BSIM4v5cgdb + here->BSIM4v5cddb + T10); here->BSIM4v5cbsb = -(here->BSIM4v5cgsb + here->BSIM4v5cdsb + tmp); } } else { /* 50/50 partitioning */ if (Vds >= Vdsat) { /* saturation region */ T1 = Vdsat / 3.0; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4v5phi - T1); T2 = -Two_Third_CoxWL * Vgst; qbulk = -(qgate + T2); qdrn = 0.5 * T2; here->BSIM4v5cggb = One_Third_CoxWL * (3.0 - dVdsat_dVg) * dVgs_eff_dVg; T2 = -One_Third_CoxWL * dVdsat_dVb; here->BSIM4v5cgsb = -(here->BSIM4v5cggb + T2); here->BSIM4v5cgdb = 0.0; here->BSIM4v5cdgb = -One_Third_CoxWL * dVgs_eff_dVg; here->BSIM4v5cddb = 0.0; T4 = One_Third_CoxWL * dVth_dVb; here->BSIM4v5cdsb = -(T4 + here->BSIM4v5cdgb); here->BSIM4v5cbgb = -(here->BSIM4v5cggb - Two_Third_CoxWL * dVgs_eff_dVg); T3 = -(T2 + Two_Third_CoxWL * dVth_dVb); here->BSIM4v5cbsb = -(here->BSIM4v5cbgb + T3); here->BSIM4v5cbdb = 0.0; } else { /* linear region */ Alphaz = Vgst / Vdsat; T1 = 2.0 * Vdsat - Vds; T2 = Vds / (3.0 * T1); T3 = T2 * Vds; T9 = 0.25 * CoxWL; T4 = T9 * Alphaz; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4v5phi - 0.5 * (Vds - T3)); T5 = T3 / T1; here->BSIM4v5cggb = CoxWL * (1.0 - T5 * dVdsat_dVg) * dVgs_eff_dVg; tmp = -CoxWL * T5 * dVdsat_dVb; here->BSIM4v5cgdb = CoxWL * (T2 - 0.5 + 0.5 * T5); here->BSIM4v5cgsb = -(here->BSIM4v5cggb + here->BSIM4v5cgdb + tmp); T6 = 1.0 / Vdsat; dAlphaz_dVg = T6 * (1.0 - Alphaz * dVdsat_dVg); dAlphaz_dVb = -T6 * (dVth_dVb + Alphaz * dVdsat_dVb); T7 = T1 + T3; qdrn = -T4 * T7; qbulk = - (qgate + qdrn + qdrn); T7 *= T9; T0 = T4 * (2.0 * T5 - 2.0); here->BSIM4v5cdgb = (T0 * dVdsat_dVg - T7 * dAlphaz_dVg) * dVgs_eff_dVg; T12 = T0 * dVdsat_dVb - T7 * dAlphaz_dVb; here->BSIM4v5cddb = T4 * (1.0 - 2.0 * T2 - T5); here->BSIM4v5cdsb = -(here->BSIM4v5cdgb + T12 + here->BSIM4v5cddb); here->BSIM4v5cbgb = -(here->BSIM4v5cggb + 2.0 * here->BSIM4v5cdgb); here->BSIM4v5cbdb = -(here->BSIM4v5cgdb + 2.0 * here->BSIM4v5cddb); here->BSIM4v5cbsb = -(here->BSIM4v5cgsb + 2.0 * here->BSIM4v5cdsb); } /* end of linear region */ } /* end of 50/50 partition */ } /* end of inversion */ } /* end of capMod=0 */ else { if (Vbseff < 0.0) { VbseffCV = Vbseff; dVbseffCV_dVb = 1.0; } else { VbseffCV = pParam->BSIM4v5phi - Phis; dVbseffCV_dVb = -dPhis_dVb; } CoxWL = model->BSIM4v5coxe * pParam->BSIM4v5weffCV * pParam->BSIM4v5leffCV * here->BSIM4v5nf; /* Seperate VgsteffCV with noff and voffcv */ noff = n * pParam->BSIM4v5noff; dnoff_dVd = pParam->BSIM4v5noff * dn_dVd; dnoff_dVb = pParam->BSIM4v5noff * dn_dVb; T0 = Vtm * noff; voffcv = pParam->BSIM4v5voffcv; VgstNVt = (Vgst - voffcv) / T0; if (VgstNVt > EXP_THRESHOLD) { Vgsteff = Vgst - voffcv; dVgsteff_dVg = dVgs_eff_dVg; dVgsteff_dVd = -dVth_dVd; dVgsteff_dVb = -dVth_dVb; } else if (VgstNVt < -EXP_THRESHOLD) { Vgsteff = T0 * log(1.0 + MIN_EXP); dVgsteff_dVg = 0.0; dVgsteff_dVd = Vgsteff / noff; dVgsteff_dVb = dVgsteff_dVd * dnoff_dVb; dVgsteff_dVd *= dnoff_dVd; } else { ExpVgst = exp(VgstNVt); Vgsteff = T0 * log(1.0 + ExpVgst); dVgsteff_dVg = ExpVgst / (1.0 + ExpVgst); dVgsteff_dVd = -dVgsteff_dVg * (dVth_dVd + (Vgst - voffcv) / noff * dnoff_dVd) + Vgsteff / noff * dnoff_dVd; dVgsteff_dVb = -dVgsteff_dVg * (dVth_dVb + (Vgst - voffcv) / noff * dnoff_dVb) + Vgsteff / noff * dnoff_dVb; dVgsteff_dVg *= dVgs_eff_dVg; } /* End of VgsteffCV */ if (model->BSIM4v5capMod == 1) { Vfb = here->BSIM4v5vfbzb; V3 = Vfb - Vgs_eff + VbseffCV - DELTA_3; if (Vfb <= 0.0) T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * Vfb); else T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * Vfb); T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = Vfb - 0.5 * (V3 + T0); dVfbeff_dVg = T1 * dVgs_eff_dVg; dVfbeff_dVb = -T1 * dVbseffCV_dVb; Qac0 = CoxWL * (Vfbeff - Vfb); dQac0_dVg = CoxWL * dVfbeff_dVg; dQac0_dVb = CoxWL * dVfbeff_dVb; T0 = 0.5 * pParam->BSIM4v5k1ox; T3 = Vgs_eff - Vfbeff - VbseffCV - Vgsteff; if (pParam->BSIM4v5k1ox == 0.0) { T1 = 0.0; T2 = 0.0; } else if (T3 < 0.0) { T1 = T0 + T3 / pParam->BSIM4v5k1ox; T2 = CoxWL; } else { T1 = sqrt(T0 * T0 + T3); T2 = CoxWL * T0 / T1; } Qsub0 = CoxWL * pParam->BSIM4v5k1ox * (T1 - T0); dQsub0_dVg = T2 * (dVgs_eff_dVg - dVfbeff_dVg - dVgsteff_dVg); dQsub0_dVd = -T2 * dVgsteff_dVd; dQsub0_dVb = -T2 * (dVfbeff_dVb + dVbseffCV_dVb + dVgsteff_dVb); AbulkCV = Abulk0 * pParam->BSIM4v5abulkCVfactor; dAbulkCV_dVb = pParam->BSIM4v5abulkCVfactor * dAbulk0_dVb; VdsatCV = Vgsteff / AbulkCV; T0 = VdsatCV - Vds - DELTA_4; dT0_dVg = 1.0 / AbulkCV; dT0_dVb = -VdsatCV * dAbulkCV_dVb / AbulkCV; T1 = sqrt(T0 * T0 + 4.0 * DELTA_4 * VdsatCV); dT1_dVg = (T0 + DELTA_4 + DELTA_4) / T1; dT1_dVd = -T0 / T1; dT1_dVb = dT1_dVg * dT0_dVb; dT1_dVg *= dT0_dVg; if (T0 >= 0.0) { VdseffCV = VdsatCV - 0.5 * (T0 + T1); dVdseffCV_dVg = 0.5 * (dT0_dVg - dT1_dVg); dVdseffCV_dVd = 0.5 * (1.0 - dT1_dVd); dVdseffCV_dVb = 0.5 * (dT0_dVb - dT1_dVb); } else { T3 = (DELTA_4 + DELTA_4) / (T1 - T0); T4 = 1.0 - T3; T5 = VdsatCV * T3 / (T1 - T0); VdseffCV = VdsatCV * T4; dVdseffCV_dVg = dT0_dVg * T4 + T5 * (dT1_dVg - dT0_dVg); dVdseffCV_dVd = T5 * (dT1_dVd + 1.0); dVdseffCV_dVb = dT0_dVb * (1.0 - T5) + T5 * dT1_dVb; } if (Vds == 0.0) { VdseffCV = 0.0; dVdseffCV_dVg = 0.0; dVdseffCV_dVb = 0.0; } T0 = AbulkCV * VdseffCV; T1 = 12.0 * (Vgsteff - 0.5 * T0 + 1.0e-20); T2 = VdseffCV / T1; T3 = T0 * T2; T4 = (1.0 - 12.0 * T2 * T2 * AbulkCV); T5 = (6.0 * T0 * (4.0 * Vgsteff - T0) / (T1 * T1) - 0.5); T6 = 12.0 * T2 * T2 * Vgsteff; qgate = CoxWL * (Vgsteff - 0.5 * VdseffCV + T3); Cgg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); Cgd1 = CoxWL * T5 * dVdseffCV_dVd + Cgg1 * dVgsteff_dVd; Cgb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Cgg1 * dVgsteff_dVb; Cgg1 *= dVgsteff_dVg; T7 = 1.0 - AbulkCV; qbulk = CoxWL * T7 * (0.5 * VdseffCV - T3); T4 = -T7 * (T4 - 1.0); T5 = -T7 * T5; T6 = -(T7 * T6 + (0.5 * VdseffCV - T3)); Cbg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); Cbd1 = CoxWL * T5 * dVdseffCV_dVd + Cbg1 * dVgsteff_dVd; Cbb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Cbg1 * dVgsteff_dVb; Cbg1 *= dVgsteff_dVg; if (model->BSIM4v5xpart > 0.5) { /* 0/100 Charge petition model */ T1 = T1 + T1; qsrc = -CoxWL * (0.5 * Vgsteff + 0.25 * T0 - T0 * T0 / T1); T7 = (4.0 * Vgsteff - T0) / (T1 * T1); T4 = -(0.5 + 24.0 * T0 * T0 / (T1 * T1)); T5 = -(0.25 * AbulkCV - 12.0 * AbulkCV * T0 * T7); T6 = -(0.25 * VdseffCV - 12.0 * T0 * VdseffCV * T7); Csg = CoxWL * (T4 + T5 * dVdseffCV_dVg); Csd = CoxWL * T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd; Csb = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Csg * dVgsteff_dVb; Csg *= dVgsteff_dVg; } else if (model->BSIM4v5xpart < 0.5) { /* 40/60 Charge petition model */ T1 = T1 / 12.0; T2 = 0.5 * CoxWL / (T1 * T1); T3 = Vgsteff * (2.0 * T0 * T0 / 3.0 + Vgsteff * (Vgsteff - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T2 * T3; T7 = 4.0 / 3.0 * Vgsteff * (Vgsteff - T0) + 0.4 * T0 * T0; T4 = -2.0 * qsrc / T1 - T2 * (Vgsteff * (3.0 * Vgsteff - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0); T5 = (qsrc / T1 + T2 * T7) * AbulkCV; T6 = (qsrc / T1 * VdseffCV + T2 * T7 * VdseffCV); Csg = (T4 + T5 * dVdseffCV_dVg); Csd = T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd; Csb = (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Csg * dVgsteff_dVb; Csg *= dVgsteff_dVg; } else { /* 50/50 Charge petition model */ qsrc = -0.5 * (qgate + qbulk); Csg = -0.5 * (Cgg1 + Cbg1); Csb = -0.5 * (Cgb1 + Cbb1); Csd = -0.5 * (Cgd1 + Cbd1); } qgate += Qac0 + Qsub0; qbulk -= (Qac0 + Qsub0); qdrn = -(qgate + qbulk + qsrc); Cgg = dQac0_dVg + dQsub0_dVg + Cgg1; Cgd = dQsub0_dVd + Cgd1; Cgb = dQac0_dVb + dQsub0_dVb + Cgb1; Cbg = Cbg1 - dQac0_dVg - dQsub0_dVg; Cbd = Cbd1 - dQsub0_dVd; Cbb = Cbb1 - dQac0_dVb - dQsub0_dVb; Cgb *= dVbseff_dVb; Cbb *= dVbseff_dVb; Csb *= dVbseff_dVb; here->BSIM4v5cggb = Cgg; here->BSIM4v5cgsb = -(Cgg + Cgd + Cgb); here->BSIM4v5cgdb = Cgd; here->BSIM4v5cdgb = -(Cgg + Cbg + Csg); here->BSIM4v5cdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb + Csg + Csd + Csb); here->BSIM4v5cddb = -(Cgd + Cbd + Csd); here->BSIM4v5cbgb = Cbg; here->BSIM4v5cbsb = -(Cbg + Cbd + Cbb); here->BSIM4v5cbdb = Cbd; } /* Charge-Thickness capMod (CTM) begins */ else if (model->BSIM4v5capMod == 2) { V3 = here->BSIM4v5vfbzb - Vgs_eff + VbseffCV - DELTA_3; if (here->BSIM4v5vfbzb <= 0.0) T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * here->BSIM4v5vfbzb); else T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * here->BSIM4v5vfbzb); T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = here->BSIM4v5vfbzb - 0.5 * (V3 + T0); dVfbeff_dVg = T1 * dVgs_eff_dVg; dVfbeff_dVb = -T1 * dVbseffCV_dVb; Cox = model->BSIM4v5coxp; Tox = 1.0e8 * model->BSIM4v5toxp; T0 = (Vgs_eff - VbseffCV - here->BSIM4v5vfbzb) / Tox; dT0_dVg = dVgs_eff_dVg / Tox; dT0_dVb = -dVbseffCV_dVb / Tox; tmp = T0 * pParam->BSIM4v5acde; if ((-EXP_THRESHOLD < tmp) && (tmp < EXP_THRESHOLD)) { Tcen = pParam->BSIM4v5ldeb * exp(tmp); dTcen_dVg = pParam->BSIM4v5acde * Tcen; dTcen_dVb = dTcen_dVg * dT0_dVb; dTcen_dVg *= dT0_dVg; } else if (tmp <= -EXP_THRESHOLD) { Tcen = pParam->BSIM4v5ldeb * MIN_EXP; dTcen_dVg = dTcen_dVb = 0.0; } else { Tcen = pParam->BSIM4v5ldeb * MAX_EXP; dTcen_dVg = dTcen_dVb = 0.0; } LINK = 1.0e-3 * model->BSIM4v5toxp; V3 = pParam->BSIM4v5ldeb - Tcen - LINK; V4 = sqrt(V3 * V3 + 4.0 * LINK * pParam->BSIM4v5ldeb); Tcen = pParam->BSIM4v5ldeb - 0.5 * (V3 + V4); T1 = 0.5 * (1.0 + V3 / V4); dTcen_dVg *= T1; dTcen_dVb *= T1; Ccen = EPSSI / Tcen; T2 = Cox / (Cox + Ccen); Coxeff = T2 * Ccen; T3 = -Ccen / Tcen; dCoxeff_dVg = T2 * T2 * T3; dCoxeff_dVb = dCoxeff_dVg * dTcen_dVb; dCoxeff_dVg *= dTcen_dVg; CoxWLcen = CoxWL * Coxeff / model->BSIM4v5coxe; Qac0 = CoxWLcen * (Vfbeff - here->BSIM4v5vfbzb); QovCox = Qac0 / Coxeff; dQac0_dVg = CoxWLcen * dVfbeff_dVg + QovCox * dCoxeff_dVg; dQac0_dVb = CoxWLcen * dVfbeff_dVb + QovCox * dCoxeff_dVb; T0 = 0.5 * pParam->BSIM4v5k1ox; T3 = Vgs_eff - Vfbeff - VbseffCV - Vgsteff; if (pParam->BSIM4v5k1ox == 0.0) { T1 = 0.0; T2 = 0.0; } else if (T3 < 0.0) { T1 = T0 + T3 / pParam->BSIM4v5k1ox; T2 = CoxWLcen; } else { T1 = sqrt(T0 * T0 + T3); T2 = CoxWLcen * T0 / T1; } Qsub0 = CoxWLcen * pParam->BSIM4v5k1ox * (T1 - T0); QovCox = Qsub0 / Coxeff; dQsub0_dVg = T2 * (dVgs_eff_dVg - dVfbeff_dVg - dVgsteff_dVg) + QovCox * dCoxeff_dVg; dQsub0_dVd = -T2 * dVgsteff_dVd; dQsub0_dVb = -T2 * (dVfbeff_dVb + dVbseffCV_dVb + dVgsteff_dVb) + QovCox * dCoxeff_dVb; /* Gate-bias dependent delta Phis begins */ if (pParam->BSIM4v5k1ox <= 0.0) { Denomi = 0.25 * pParam->BSIM4v5moin * Vtm; T0 = 0.5 * pParam->BSIM4v5sqrtPhi; } else { Denomi = pParam->BSIM4v5moin * Vtm * pParam->BSIM4v5k1ox * pParam->BSIM4v5k1ox; T0 = pParam->BSIM4v5k1ox * pParam->BSIM4v5sqrtPhi; } T1 = 2.0 * T0 + Vgsteff; DeltaPhi = Vtm * log(1.0 + T1 * Vgsteff / Denomi); dDeltaPhi_dVg = 2.0 * Vtm * (T1 -T0) / (Denomi + T1 * Vgsteff); /* End of delta Phis */ /* VgDP = Vgsteff - DeltaPhi */ T0 = Vgsteff - DeltaPhi - 0.001; dT0_dVg = 1.0 - dDeltaPhi_dVg; T1 = sqrt(T0 * T0 + Vgsteff * 0.004); VgDP = 0.5 * (T0 + T1); dVgDP_dVg = 0.5 * (dT0_dVg + (T0 * dT0_dVg + 0.002) / T1); Tox += Tox; /* WDLiu: Tcen reevaluated below due to different Vgsteff */ T0 = (Vgsteff + here->BSIM4v5vtfbphi2) / Tox; tmp = exp(0.7 * log(T0)); T1 = 1.0 + tmp; T2 = 0.7 * tmp / (T0 * Tox); Tcen = 1.9e-9 / T1; dTcen_dVg = -Tcen * T2 / T1; dTcen_dVd = dTcen_dVg * dVgsteff_dVd; dTcen_dVb = dTcen_dVg * dVgsteff_dVb; dTcen_dVg *= dVgsteff_dVg; Ccen = EPSSI / Tcen; T0 = Cox / (Cox + Ccen); Coxeff = T0 * Ccen; T1 = -Ccen / Tcen; dCoxeff_dVg = T0 * T0 * T1; dCoxeff_dVd = dCoxeff_dVg * dTcen_dVd; dCoxeff_dVb = dCoxeff_dVg * dTcen_dVb; dCoxeff_dVg *= dTcen_dVg; CoxWLcen = CoxWL * Coxeff / model->BSIM4v5coxe; AbulkCV = Abulk0 * pParam->BSIM4v5abulkCVfactor; dAbulkCV_dVb = pParam->BSIM4v5abulkCVfactor * dAbulk0_dVb; VdsatCV = VgDP / AbulkCV; T0 = VdsatCV - Vds - DELTA_4; dT0_dVg = dVgDP_dVg / AbulkCV; dT0_dVb = -VdsatCV * dAbulkCV_dVb / AbulkCV; T1 = sqrt(T0 * T0 + 4.0 * DELTA_4 * VdsatCV); dT1_dVg = (T0 + DELTA_4 + DELTA_4) / T1; dT1_dVd = -T0 / T1; dT1_dVb = dT1_dVg * dT0_dVb; dT1_dVg *= dT0_dVg; if (T0 >= 0.0) { VdseffCV = VdsatCV - 0.5 * (T0 + T1); dVdseffCV_dVg = 0.5 * (dT0_dVg - dT1_dVg); dVdseffCV_dVd = 0.5 * (1.0 - dT1_dVd); dVdseffCV_dVb = 0.5 * (dT0_dVb - dT1_dVb); } else { T3 = (DELTA_4 + DELTA_4) / (T1 - T0); T4 = 1.0 - T3; T5 = VdsatCV * T3 / (T1 - T0); VdseffCV = VdsatCV * T4; dVdseffCV_dVg = dT0_dVg * T4 + T5 * (dT1_dVg - dT0_dVg); dVdseffCV_dVd = T5 * (dT1_dVd + 1.0); dVdseffCV_dVb = dT0_dVb * (1.0 - T5) + T5 * dT1_dVb; } if (Vds == 0.0) { VdseffCV = 0.0; dVdseffCV_dVg = 0.0; dVdseffCV_dVb = 0.0; } T0 = AbulkCV * VdseffCV; T1 = VgDP; T2 = 12.0 * (T1 - 0.5 * T0 + 1.0e-20); T3 = T0 / T2; T4 = 1.0 - 12.0 * T3 * T3; T5 = AbulkCV * (6.0 * T0 * (4.0 * T1 - T0) / (T2 * T2) - 0.5); T6 = T5 * VdseffCV / AbulkCV; qgate = CoxWLcen * (T1 - T0 * (0.5 - T3)); QovCox = qgate / Coxeff; Cgg1 = CoxWLcen * (T4 * dVgDP_dVg + T5 * dVdseffCV_dVg); Cgd1 = CoxWLcen * T5 * dVdseffCV_dVd + Cgg1 * dVgsteff_dVd + QovCox * dCoxeff_dVd; Cgb1 = CoxWLcen * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Cgg1 * dVgsteff_dVb + QovCox * dCoxeff_dVb; Cgg1 = Cgg1 * dVgsteff_dVg + QovCox * dCoxeff_dVg; T7 = 1.0 - AbulkCV; T8 = T2 * T2; T9 = 12.0 * T7 * T0 * T0 / (T8 * AbulkCV); T10 = T9 * dVgDP_dVg; T11 = -T7 * T5 / AbulkCV; T12 = -(T9 * T1 / AbulkCV + VdseffCV * (0.5 - T0 / T2)); qbulk = CoxWLcen * T7 * (0.5 * VdseffCV - T0 * VdseffCV / T2); QovCox = qbulk / Coxeff; Cbg1 = CoxWLcen * (T10 + T11 * dVdseffCV_dVg); Cbd1 = CoxWLcen * T11 * dVdseffCV_dVd + Cbg1 * dVgsteff_dVd + QovCox * dCoxeff_dVd; Cbb1 = CoxWLcen * (T11 * dVdseffCV_dVb + T12 * dAbulkCV_dVb) + Cbg1 * dVgsteff_dVb + QovCox * dCoxeff_dVb; Cbg1 = Cbg1 * dVgsteff_dVg + QovCox * dCoxeff_dVg; if (model->BSIM4v5xpart > 0.5) { /* 0/100 partition */ qsrc = -CoxWLcen * (T1 / 2.0 + T0 / 4.0 - 0.5 * T0 * T0 / T2); QovCox = qsrc / Coxeff; T2 += T2; T3 = T2 * T2; T7 = -(0.25 - 12.0 * T0 * (4.0 * T1 - T0) / T3); T4 = -(0.5 + 24.0 * T0 * T0 / T3) * dVgDP_dVg; T5 = T7 * AbulkCV; T6 = T7 * VdseffCV; Csg = CoxWLcen * (T4 + T5 * dVdseffCV_dVg); Csd = CoxWLcen * T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd + QovCox * dCoxeff_dVd; Csb = CoxWLcen * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Csg * dVgsteff_dVb + QovCox * dCoxeff_dVb; Csg = Csg * dVgsteff_dVg + QovCox * dCoxeff_dVg; } else if (model->BSIM4v5xpart < 0.5) { /* 40/60 partition */ T2 = T2 / 12.0; T3 = 0.5 * CoxWLcen / (T2 * T2); T4 = T1 * (2.0 * T0 * T0 / 3.0 + T1 * (T1 - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T3 * T4; QovCox = qsrc / Coxeff; T8 = 4.0 / 3.0 * T1 * (T1 - T0) + 0.4 * T0 * T0; T5 = -2.0 * qsrc / T2 - T3 * (T1 * (3.0 * T1 - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0); T6 = AbulkCV * (qsrc / T2 + T3 * T8); T7 = T6 * VdseffCV / AbulkCV; Csg = T5 * dVgDP_dVg + T6 * dVdseffCV_dVg; Csd = Csg * dVgsteff_dVd + T6 * dVdseffCV_dVd + QovCox * dCoxeff_dVd; Csb = Csg * dVgsteff_dVb + T6 * dVdseffCV_dVb + T7 * dAbulkCV_dVb + QovCox * dCoxeff_dVb; Csg = Csg * dVgsteff_dVg + QovCox * dCoxeff_dVg; } else { /* 50/50 partition */ qsrc = -0.5 * qgate; Csg = -0.5 * Cgg1; Csd = -0.5 * Cgd1; Csb = -0.5 * Cgb1; } qgate += Qac0 + Qsub0 - qbulk; qbulk -= (Qac0 + Qsub0); qdrn = -(qgate + qbulk + qsrc); Cbg = Cbg1 - dQac0_dVg - dQsub0_dVg; Cbd = Cbd1 - dQsub0_dVd; Cbb = Cbb1 - dQac0_dVb - dQsub0_dVb; Cgg = Cgg1 - Cbg; Cgd = Cgd1 - Cbd; Cgb = Cgb1 - Cbb; Cgb *= dVbseff_dVb; Cbb *= dVbseff_dVb; Csb *= dVbseff_dVb; here->BSIM4v5cggb = Cgg; here->BSIM4v5cgsb = -(Cgg + Cgd + Cgb); here->BSIM4v5cgdb = Cgd; here->BSIM4v5cdgb = -(Cgg + Cbg + Csg); here->BSIM4v5cdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb + Csg + Csd + Csb); here->BSIM4v5cddb = -(Cgd + Cbd + Csd); here->BSIM4v5cbgb = Cbg; here->BSIM4v5cbsb = -(Cbg + Cbd + Cbb); here->BSIM4v5cbdb = Cbd; } /* End of CTM */ } here->BSIM4v5csgb = - here->BSIM4v5cggb - here->BSIM4v5cdgb - here->BSIM4v5cbgb; here->BSIM4v5csdb = - here->BSIM4v5cgdb - here->BSIM4v5cddb - here->BSIM4v5cbdb; here->BSIM4v5cssb = - here->BSIM4v5cgsb - here->BSIM4v5cdsb - here->BSIM4v5cbsb; here->BSIM4v5cgbb = - here->BSIM4v5cgdb - here->BSIM4v5cggb - here->BSIM4v5cgsb; here->BSIM4v5cdbb = - here->BSIM4v5cddb - here->BSIM4v5cdgb - here->BSIM4v5cdsb; here->BSIM4v5cbbb = - here->BSIM4v5cbgb - here->BSIM4v5cbdb - here->BSIM4v5cbsb; here->BSIM4v5csbb = - here->BSIM4v5cgbb - here->BSIM4v5cdbb - here->BSIM4v5cbbb; here->BSIM4v5qgate = qgate; here->BSIM4v5qbulk = qbulk; here->BSIM4v5qdrn = qdrn; here->BSIM4v5qsrc = -(qgate + qbulk + qdrn); /* NQS begins */ if ((here->BSIM4v5trnqsMod) || (here->BSIM4v5acnqsMod)) { here->BSIM4v5qchqs = qcheq = -(qbulk + qgate); here->BSIM4v5cqgb = -(here->BSIM4v5cggb + here->BSIM4v5cbgb); here->BSIM4v5cqdb = -(here->BSIM4v5cgdb + here->BSIM4v5cbdb); here->BSIM4v5cqsb = -(here->BSIM4v5cgsb + here->BSIM4v5cbsb); here->BSIM4v5cqbb = -(here->BSIM4v5cqgb + here->BSIM4v5cqdb + here->BSIM4v5cqsb); CoxWL = model->BSIM4v5coxe * pParam->BSIM4v5weffCV * here->BSIM4v5nf * pParam->BSIM4v5leffCV; T1 = here->BSIM4v5gcrg / CoxWL; /* 1 / tau */ here->BSIM4v5gtau = T1 * ScalingFactor; if (here->BSIM4v5acnqsMod) here->BSIM4v5taunet = 1.0 / T1; *(ckt->CKTstate0 + here->BSIM4v5qcheq) = qcheq; if (ckt->CKTmode & MODEINITTRAN) *(ckt->CKTstate1 + here->BSIM4v5qcheq) = *(ckt->CKTstate0 + here->BSIM4v5qcheq); if (here->BSIM4v5trnqsMod) { error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v5qcheq); if (error) return(error); } } finished: /* Calculate junction C-V */ if (ChargeComputationNeeded) { czbd = model->BSIM4v5DunitAreaTempJctCap * here->BSIM4v5Adeff; /* bug fix */ czbs = model->BSIM4v5SunitAreaTempJctCap * here->BSIM4v5Aseff; czbdsw = model->BSIM4v5DunitLengthSidewallTempJctCap * here->BSIM4v5Pdeff; czbdswg = model->BSIM4v5DunitLengthGateSidewallTempJctCap * pParam->BSIM4v5weffCJ * here->BSIM4v5nf; czbssw = model->BSIM4v5SunitLengthSidewallTempJctCap * here->BSIM4v5Pseff; czbsswg = model->BSIM4v5SunitLengthGateSidewallTempJctCap * pParam->BSIM4v5weffCJ * here->BSIM4v5nf; MJS = model->BSIM4v5SbulkJctBotGradingCoeff; MJSWS = model->BSIM4v5SbulkJctSideGradingCoeff; MJSWGS = model->BSIM4v5SbulkJctGateSideGradingCoeff; MJD = model->BSIM4v5DbulkJctBotGradingCoeff; MJSWD = model->BSIM4v5DbulkJctSideGradingCoeff; MJSWGD = model->BSIM4v5DbulkJctGateSideGradingCoeff; /* Source Bulk Junction */ if (vbs_jct == 0.0) { *(ckt->CKTstate0 + here->BSIM4v5qbs) = 0.0; here->BSIM4v5capbs = czbs + czbssw + czbsswg; } else if (vbs_jct < 0.0) { if (czbs > 0.0) { arg = 1.0 - vbs_jct / model->BSIM4v5PhiBS; if (MJS == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJS * log(arg)); *(ckt->CKTstate0 + here->BSIM4v5qbs) = model->BSIM4v5PhiBS * czbs * (1.0 - arg * sarg) / (1.0 - MJS); here->BSIM4v5capbs = czbs * sarg; } else { *(ckt->CKTstate0 + here->BSIM4v5qbs) = 0.0; here->BSIM4v5capbs = 0.0; } if (czbssw > 0.0) { arg = 1.0 - vbs_jct / model->BSIM4v5PhiBSWS; if (MJSWS == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSWS * log(arg)); *(ckt->CKTstate0 + here->BSIM4v5qbs) += model->BSIM4v5PhiBSWS * czbssw * (1.0 - arg * sarg) / (1.0 - MJSWS); here->BSIM4v5capbs += czbssw * sarg; } if (czbsswg > 0.0) { arg = 1.0 - vbs_jct / model->BSIM4v5PhiBSWGS; if (MJSWGS == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSWGS * log(arg)); *(ckt->CKTstate0 + here->BSIM4v5qbs) += model->BSIM4v5PhiBSWGS * czbsswg * (1.0 - arg * sarg) / (1.0 - MJSWGS); here->BSIM4v5capbs += czbsswg * sarg; } } else { T0 = czbs + czbssw + czbsswg; T1 = vbs_jct * (czbs * MJS / model->BSIM4v5PhiBS + czbssw * MJSWS / model->BSIM4v5PhiBSWS + czbsswg * MJSWGS / model->BSIM4v5PhiBSWGS); *(ckt->CKTstate0 + here->BSIM4v5qbs) = vbs_jct * (T0 + 0.5 * T1); here->BSIM4v5capbs = T0 + T1; } /* Drain Bulk Junction */ if (vbd_jct == 0.0) { *(ckt->CKTstate0 + here->BSIM4v5qbd) = 0.0; here->BSIM4v5capbd = czbd + czbdsw + czbdswg; } else if (vbd_jct < 0.0) { if (czbd > 0.0) { arg = 1.0 - vbd_jct / model->BSIM4v5PhiBD; if (MJD == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJD * log(arg)); *(ckt->CKTstate0 + here->BSIM4v5qbd) = model->BSIM4v5PhiBD* czbd * (1.0 - arg * sarg) / (1.0 - MJD); here->BSIM4v5capbd = czbd * sarg; } else { *(ckt->CKTstate0 + here->BSIM4v5qbd) = 0.0; here->BSIM4v5capbd = 0.0; } if (czbdsw > 0.0) { arg = 1.0 - vbd_jct / model->BSIM4v5PhiBSWD; if (MJSWD == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSWD * log(arg)); *(ckt->CKTstate0 + here->BSIM4v5qbd) += model->BSIM4v5PhiBSWD * czbdsw * (1.0 - arg * sarg) / (1.0 - MJSWD); here->BSIM4v5capbd += czbdsw * sarg; } if (czbdswg > 0.0) { arg = 1.0 - vbd_jct / model->BSIM4v5PhiBSWGD; if (MJSWGD == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSWGD * log(arg)); *(ckt->CKTstate0 + here->BSIM4v5qbd) += model->BSIM4v5PhiBSWGD * czbdswg * (1.0 - arg * sarg) / (1.0 - MJSWGD); here->BSIM4v5capbd += czbdswg * sarg; } } else { T0 = czbd + czbdsw + czbdswg; T1 = vbd_jct * (czbd * MJD / model->BSIM4v5PhiBD + czbdsw * MJSWD / model->BSIM4v5PhiBSWD + czbdswg * MJSWGD / model->BSIM4v5PhiBSWGD); *(ckt->CKTstate0 + here->BSIM4v5qbd) = vbd_jct * (T0 + 0.5 * T1); here->BSIM4v5capbd = T0 + T1; } } /* * check convergence */ if ((here->BSIM4v5off == 0) || (!(ckt->CKTmode & MODEINITFIX))) { if (Check == 1) { ckt->CKTnoncon++; #ifndef NEWCONV } else { if (here->BSIM4v5mode >= 0) { Idtot = here->BSIM4v5cd + here->BSIM4v5csub + here->BSIM4v5Igidl - here->BSIM4v5cbd; } else { Idtot = here->BSIM4v5cd + here->BSIM4v5cbd - here->BSIM4v5Igidl; /* bugfix */ } tol0 = ckt->CKTreltol * MAX(fabs(cdhat), fabs(Idtot)) + ckt->CKTabstol; tol1 = ckt->CKTreltol * MAX(fabs(cseshat), fabs(Isestot)) + ckt->CKTabstol; tol2 = ckt->CKTreltol * MAX(fabs(cdedhat), fabs(Idedtot)) + ckt->CKTabstol; tol3 = ckt->CKTreltol * MAX(fabs(cgshat), fabs(Igstot)) + ckt->CKTabstol; tol4 = ckt->CKTreltol * MAX(fabs(cgdhat), fabs(Igdtot)) + ckt->CKTabstol; tol5 = ckt->CKTreltol * MAX(fabs(cgbhat), fabs(Igbtot)) + ckt->CKTabstol; if ((fabs(cdhat - Idtot) >= tol0) || (fabs(cseshat - Isestot) >= tol1) || (fabs(cdedhat - Idedtot) >= tol2)) { ckt->CKTnoncon++; } else if ((fabs(cgshat - Igstot) >= tol3) || (fabs(cgdhat - Igdtot) >= tol4) || (fabs(cgbhat - Igbtot) >= tol5)) { ckt->CKTnoncon++; } else { Ibtot = here->BSIM4v5cbs + here->BSIM4v5cbd - here->BSIM4v5Igidl - here->BSIM4v5Igisl - here->BSIM4v5csub; tol6 = ckt->CKTreltol * MAX(fabs(cbhat), fabs(Ibtot)) + ckt->CKTabstol; if (fabs(cbhat - Ibtot) > tol6) { ckt->CKTnoncon++; } } #endif /* NEWCONV */ } } *(ckt->CKTstate0 + here->BSIM4v5vds) = vds; *(ckt->CKTstate0 + here->BSIM4v5vgs) = vgs; *(ckt->CKTstate0 + here->BSIM4v5vbs) = vbs; *(ckt->CKTstate0 + here->BSIM4v5vbd) = vbd; *(ckt->CKTstate0 + here->BSIM4v5vges) = vges; *(ckt->CKTstate0 + here->BSIM4v5vgms) = vgms; *(ckt->CKTstate0 + here->BSIM4v5vdbs) = vdbs; *(ckt->CKTstate0 + here->BSIM4v5vdbd) = vdbd; *(ckt->CKTstate0 + here->BSIM4v5vsbs) = vsbs; *(ckt->CKTstate0 + here->BSIM4v5vses) = vses; *(ckt->CKTstate0 + here->BSIM4v5vdes) = vdes; *(ckt->CKTstate0 + here->BSIM4v5qdef) = qdef; if (!ChargeComputationNeeded) goto line850; if (here->BSIM4v5rgateMod == 3) { vgdx = vgmd; vgsx = vgms; } else /* For rgateMod == 0, 1 and 2 */ { vgdx = vgd; vgsx = vgs; } if (model->BSIM4v5capMod == 0) { cgdo = pParam->BSIM4v5cgdo; qgdo = pParam->BSIM4v5cgdo * vgdx; cgso = pParam->BSIM4v5cgso; qgso = pParam->BSIM4v5cgso * vgsx; } else /* For both capMod == 1 and 2 */ { T0 = vgdx + DELTA_1; T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); T3 = pParam->BSIM4v5weffCV * pParam->BSIM4v5cgdl; T4 = sqrt(1.0 - 4.0 * T2 / pParam->BSIM4v5ckappad); cgdo = pParam->BSIM4v5cgdo + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgdo = (pParam->BSIM4v5cgdo + T3) * vgdx - T3 * (T2 + 0.5 * pParam->BSIM4v5ckappad * (T4 - 1.0)); T0 = vgsx + DELTA_1; T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); T3 = pParam->BSIM4v5weffCV * pParam->BSIM4v5cgsl; T4 = sqrt(1.0 - 4.0 * T2 / pParam->BSIM4v5ckappas); cgso = pParam->BSIM4v5cgso + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgso = (pParam->BSIM4v5cgso + T3) * vgsx - T3 * (T2 + 0.5 * pParam->BSIM4v5ckappas * (T4 - 1.0)); } if (here->BSIM4v5nf != 1.0) { cgdo *= here->BSIM4v5nf; cgso *= here->BSIM4v5nf; qgdo *= here->BSIM4v5nf; qgso *= here->BSIM4v5nf; } here->BSIM4v5cgdo = cgdo; here->BSIM4v5qgdo = qgdo; here->BSIM4v5cgso = cgso; here->BSIM4v5qgso = qgso; #ifndef NOBYPASS line755: #endif ag0 = ckt->CKTag[0]; if (here->BSIM4v5mode > 0) { if (here->BSIM4v5trnqsMod == 0) { qdrn -= qgdo; if (here->BSIM4v5rgateMod == 3) { gcgmgmb = (cgdo + cgso + pParam->BSIM4v5cgbo) * ag0; gcgmdb = -cgdo * ag0; gcgmsb = -cgso * ag0; gcgmbb = -pParam->BSIM4v5cgbo * ag0; gcdgmb = gcgmdb; gcsgmb = gcgmsb; gcbgmb = gcgmbb; gcggb = here->BSIM4v5cggb * ag0; gcgdb = here->BSIM4v5cgdb * ag0; gcgsb = here->BSIM4v5cgsb * ag0; gcgbb = -(gcggb + gcgdb + gcgsb); gcdgb = here->BSIM4v5cdgb * ag0; gcsgb = -(here->BSIM4v5cggb + here->BSIM4v5cbgb + here->BSIM4v5cdgb) * ag0; gcbgb = here->BSIM4v5cbgb * ag0; qgmb = pParam->BSIM4v5cgbo * vgmb; qgmid = qgdo + qgso + qgmb; qbulk -= qgmb; qsrc = -(qgate + qgmid + qbulk + qdrn); } else { gcggb = (here->BSIM4v5cggb + cgdo + cgso + pParam->BSIM4v5cgbo ) * ag0; gcgdb = (here->BSIM4v5cgdb - cgdo) * ag0; gcgsb = (here->BSIM4v5cgsb - cgso) * ag0; gcgbb = -(gcggb + gcgdb + gcgsb); gcdgb = (here->BSIM4v5cdgb - cgdo) * ag0; gcsgb = -(here->BSIM4v5cggb + here->BSIM4v5cbgb + here->BSIM4v5cdgb + cgso) * ag0; gcbgb = (here->BSIM4v5cbgb - pParam->BSIM4v5cgbo) * ag0; gcdgmb = gcsgmb = gcbgmb = 0.0; qgb = pParam->BSIM4v5cgbo * vgb; qgate += qgdo + qgso + qgb; qbulk -= qgb; qsrc = -(qgate + qbulk + qdrn); } gcddb = (here->BSIM4v5cddb + here->BSIM4v5capbd + cgdo) * ag0; gcdsb = here->BSIM4v5cdsb * ag0; gcsdb = -(here->BSIM4v5cgdb + here->BSIM4v5cbdb + here->BSIM4v5cddb) * ag0; gcssb = (here->BSIM4v5capbs + cgso - (here->BSIM4v5cgsb + here->BSIM4v5cbsb + here->BSIM4v5cdsb)) * ag0; if (!here->BSIM4v5rbodyMod) { gcdbb = -(gcdgb + gcddb + gcdsb + gcdgmb); gcsbb = -(gcsgb + gcsdb + gcssb + gcsgmb); gcbdb = (here->BSIM4v5cbdb - here->BSIM4v5capbd) * ag0; gcbsb = (here->BSIM4v5cbsb - here->BSIM4v5capbs) * ag0; gcdbdb = 0.0; gcsbsb = 0.0; } else { gcdbb = -(here->BSIM4v5cddb + here->BSIM4v5cdgb + here->BSIM4v5cdsb) * ag0; gcsbb = -(gcsgb + gcsdb + gcssb + gcsgmb) + here->BSIM4v5capbs * ag0; gcbdb = here->BSIM4v5cbdb * ag0; gcbsb = here->BSIM4v5cbsb * ag0; gcdbdb = -here->BSIM4v5capbd * ag0; gcsbsb = -here->BSIM4v5capbs * ag0; } gcbbb = -(gcbdb + gcbgb + gcbsb + gcbgmb); ggtg = ggtd = ggtb = ggts = 0.0; sxpart = 0.6; dxpart = 0.4; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { qcheq = here->BSIM4v5qchqs; CoxWL = model->BSIM4v5coxe * pParam->BSIM4v5weffCV * here->BSIM4v5nf * pParam->BSIM4v5leffCV; T0 = qdef * ScalingFactor / CoxWL; ggtg = here->BSIM4v5gtg = T0 * here->BSIM4v5gcrgg; ggtd = here->BSIM4v5gtd = T0 * here->BSIM4v5gcrgd; ggts = here->BSIM4v5gts = T0 * here->BSIM4v5gcrgs; ggtb = here->BSIM4v5gtb = T0 * here->BSIM4v5gcrgb; gqdef = ScalingFactor * ag0; gcqgb = here->BSIM4v5cqgb * ag0; gcqdb = here->BSIM4v5cqdb * ag0; gcqsb = here->BSIM4v5cqsb * ag0; gcqbb = here->BSIM4v5cqbb * ag0; if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM4v5xpart < 0.5) { dxpart = 0.4; } else if (model->BSIM4v5xpart > 0.5) { dxpart = 0.0; } else { dxpart = 0.5; } ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; } else { dxpart = qdrn / qcheq; Cdd = here->BSIM4v5cddb; Csd = -(here->BSIM4v5cgdb + here->BSIM4v5cddb + here->BSIM4v5cbdb); ddxpart_dVd = (Cdd - dxpart * (Cdd + Csd)) / qcheq; Cdg = here->BSIM4v5cdgb; Csg = -(here->BSIM4v5cggb + here->BSIM4v5cdgb + here->BSIM4v5cbgb); ddxpart_dVg = (Cdg - dxpart * (Cdg + Csg)) / qcheq; Cds = here->BSIM4v5cdsb; Css = -(here->BSIM4v5cgsb + here->BSIM4v5cdsb + here->BSIM4v5cbsb); ddxpart_dVs = (Cds - dxpart * (Cds + Css)) / qcheq; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); } sxpart = 1.0 - dxpart; dsxpart_dVd = -ddxpart_dVd; dsxpart_dVg = -ddxpart_dVg; dsxpart_dVs = -ddxpart_dVs; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); if (here->BSIM4v5rgateMod == 3) { gcgmgmb = (cgdo + cgso + pParam->BSIM4v5cgbo) * ag0; gcgmdb = -cgdo * ag0; gcgmsb = -cgso * ag0; gcgmbb = -pParam->BSIM4v5cgbo * ag0; gcdgmb = gcgmdb; gcsgmb = gcgmsb; gcbgmb = gcgmbb; gcdgb = gcsgb = gcbgb = 0.0; gcggb = gcgdb = gcgsb = gcgbb = 0.0; qgmb = pParam->BSIM4v5cgbo * vgmb; qgmid = qgdo + qgso + qgmb; qgate = 0.0; qbulk = -qgmb; qdrn = -qgdo; qsrc = -(qgmid + qbulk + qdrn); } else { gcggb = (cgdo + cgso + pParam->BSIM4v5cgbo ) * ag0; gcgdb = -cgdo * ag0; gcgsb = -cgso * ag0; gcgbb = -pParam->BSIM4v5cgbo * ag0; gcdgb = gcgdb; gcsgb = gcgsb; gcbgb = gcgbb; gcdgmb = gcsgmb = gcbgmb = 0.0; qgb = pParam->BSIM4v5cgbo * vgb; qgate = qgdo + qgso + qgb; qbulk = -qgb; qdrn = -qgdo; qsrc = -(qgate + qbulk + qdrn); } gcddb = (here->BSIM4v5capbd + cgdo) * ag0; gcdsb = gcsdb = 0.0; gcssb = (here->BSIM4v5capbs + cgso) * ag0; if (!here->BSIM4v5rbodyMod) { gcdbb = -(gcdgb + gcddb + gcdgmb); gcsbb = -(gcsgb + gcssb + gcsgmb); gcbdb = -here->BSIM4v5capbd * ag0; gcbsb = -here->BSIM4v5capbs * ag0; gcdbdb = 0.0; gcsbsb = 0.0; } else { gcdbb = gcsbb = gcbdb = gcbsb = 0.0; gcdbdb = -here->BSIM4v5capbd * ag0; gcsbsb = -here->BSIM4v5capbs * ag0; } gcbbb = -(gcbdb + gcbgb + gcbsb + gcbgmb); } } else { if (here->BSIM4v5trnqsMod == 0) { qsrc = qdrn - qgso; if (here->BSIM4v5rgateMod == 3) { gcgmgmb = (cgdo + cgso + pParam->BSIM4v5cgbo) * ag0; gcgmdb = -cgdo * ag0; gcgmsb = -cgso * ag0; gcgmbb = -pParam->BSIM4v5cgbo * ag0; gcdgmb = gcgmdb; gcsgmb = gcgmsb; gcbgmb = gcgmbb; gcggb = here->BSIM4v5cggb * ag0; gcgdb = here->BSIM4v5cgsb * ag0; gcgsb = here->BSIM4v5cgdb * ag0; gcgbb = -(gcggb + gcgdb + gcgsb); gcdgb = -(here->BSIM4v5cggb + here->BSIM4v5cbgb + here->BSIM4v5cdgb) * ag0; gcsgb = here->BSIM4v5cdgb * ag0; gcbgb = here->BSIM4v5cbgb * ag0; qgmb = pParam->BSIM4v5cgbo * vgmb; qgmid = qgdo + qgso + qgmb; qbulk -= qgmb; qdrn = -(qgate + qgmid + qbulk + qsrc); } else { gcggb = (here->BSIM4v5cggb + cgdo + cgso + pParam->BSIM4v5cgbo ) * ag0; gcgdb = (here->BSIM4v5cgsb - cgdo) * ag0; gcgsb = (here->BSIM4v5cgdb - cgso) * ag0; gcgbb = -(gcggb + gcgdb + gcgsb); gcdgb = -(here->BSIM4v5cggb + here->BSIM4v5cbgb + here->BSIM4v5cdgb + cgdo) * ag0; gcsgb = (here->BSIM4v5cdgb - cgso) * ag0; gcbgb = (here->BSIM4v5cbgb - pParam->BSIM4v5cgbo) * ag0; gcdgmb = gcsgmb = gcbgmb = 0.0; qgb = pParam->BSIM4v5cgbo * vgb; qgate += qgdo + qgso + qgb; qbulk -= qgb; qdrn = -(qgate + qbulk + qsrc); } gcddb = (here->BSIM4v5capbd + cgdo - (here->BSIM4v5cgsb + here->BSIM4v5cbsb + here->BSIM4v5cdsb)) * ag0; gcdsb = -(here->BSIM4v5cgdb + here->BSIM4v5cbdb + here->BSIM4v5cddb) * ag0; gcsdb = here->BSIM4v5cdsb * ag0; gcssb = (here->BSIM4v5cddb + here->BSIM4v5capbs + cgso) * ag0; if (!here->BSIM4v5rbodyMod) { gcdbb = -(gcdgb + gcddb + gcdsb + gcdgmb); gcsbb = -(gcsgb + gcsdb + gcssb + gcsgmb); gcbdb = (here->BSIM4v5cbsb - here->BSIM4v5capbd) * ag0; gcbsb = (here->BSIM4v5cbdb - here->BSIM4v5capbs) * ag0; gcdbdb = 0.0; gcsbsb = 0.0; } else { gcdbb = -(gcdgb + gcddb + gcdsb + gcdgmb) + here->BSIM4v5capbd * ag0; gcsbb = -(here->BSIM4v5cddb + here->BSIM4v5cdgb + here->BSIM4v5cdsb) * ag0; gcbdb = here->BSIM4v5cbsb * ag0; gcbsb = here->BSIM4v5cbdb * ag0; gcdbdb = -here->BSIM4v5capbd * ag0; gcsbsb = -here->BSIM4v5capbs * ag0; } gcbbb = -(gcbgb + gcbdb + gcbsb + gcbgmb); ggtg = ggtd = ggtb = ggts = 0.0; sxpart = 0.4; dxpart = 0.6; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { qcheq = here->BSIM4v5qchqs; CoxWL = model->BSIM4v5coxe * pParam->BSIM4v5weffCV * here->BSIM4v5nf * pParam->BSIM4v5leffCV; T0 = qdef * ScalingFactor / CoxWL; ggtg = here->BSIM4v5gtg = T0 * here->BSIM4v5gcrgg; ggts = here->BSIM4v5gts = T0 * here->BSIM4v5gcrgd; ggtd = here->BSIM4v5gtd = T0 * here->BSIM4v5gcrgs; ggtb = here->BSIM4v5gtb = T0 * here->BSIM4v5gcrgb; gqdef = ScalingFactor * ag0; gcqgb = here->BSIM4v5cqgb * ag0; gcqdb = here->BSIM4v5cqsb * ag0; gcqsb = here->BSIM4v5cqdb * ag0; gcqbb = here->BSIM4v5cqbb * ag0; if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM4v5xpart < 0.5) { sxpart = 0.4; } else if (model->BSIM4v5xpart > 0.5) { sxpart = 0.0; } else { sxpart = 0.5; } dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { sxpart = qdrn / qcheq; Css = here->BSIM4v5cddb; Cds = -(here->BSIM4v5cgdb + here->BSIM4v5cddb + here->BSIM4v5cbdb); dsxpart_dVs = (Css - sxpart * (Css + Cds)) / qcheq; Csg = here->BSIM4v5cdgb; Cdg = -(here->BSIM4v5cggb + here->BSIM4v5cdgb + here->BSIM4v5cbgb); dsxpart_dVg = (Csg - sxpart * (Csg + Cdg)) / qcheq; Csd = here->BSIM4v5cdsb; Cdd = -(here->BSIM4v5cgsb + here->BSIM4v5cdsb + here->BSIM4v5cbsb); dsxpart_dVd = (Csd - sxpart * (Csd + Cdd)) / qcheq; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); } dxpart = 1.0 - sxpart; ddxpart_dVd = -dsxpart_dVd; ddxpart_dVg = -dsxpart_dVg; ddxpart_dVs = -dsxpart_dVs; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); if (here->BSIM4v5rgateMod == 3) { gcgmgmb = (cgdo + cgso + pParam->BSIM4v5cgbo) * ag0; gcgmdb = -cgdo * ag0; gcgmsb = -cgso * ag0; gcgmbb = -pParam->BSIM4v5cgbo * ag0; gcdgmb = gcgmdb; gcsgmb = gcgmsb; gcbgmb = gcgmbb; gcdgb = gcsgb = gcbgb = 0.0; gcggb = gcgdb = gcgsb = gcgbb = 0.0; qgmb = pParam->BSIM4v5cgbo * vgmb; qgmid = qgdo + qgso + qgmb; qgate = 0.0; qbulk = -qgmb; qdrn = -qgdo; qsrc = -qgso; } else { gcggb = (cgdo + cgso + pParam->BSIM4v5cgbo ) * ag0; gcgdb = -cgdo * ag0; gcgsb = -cgso * ag0; gcgbb = -pParam->BSIM4v5cgbo * ag0; gcdgb = gcgdb; gcsgb = gcgsb; gcbgb = gcgbb; gcdgmb = gcsgmb = gcbgmb = 0.0; qgb = pParam->BSIM4v5cgbo * vgb; qgate = qgdo + qgso + qgb; qbulk = -qgb; qdrn = -qgdo; qsrc = -qgso; } gcddb = (here->BSIM4v5capbd + cgdo) * ag0; gcdsb = gcsdb = 0.0; gcssb = (here->BSIM4v5capbs + cgso) * ag0; if (!here->BSIM4v5rbodyMod) { gcdbb = -(gcdgb + gcddb + gcdgmb); gcsbb = -(gcsgb + gcssb + gcsgmb); gcbdb = -here->BSIM4v5capbd * ag0; gcbsb = -here->BSIM4v5capbs * ag0; gcdbdb = 0.0; gcsbsb = 0.0; } else { gcdbb = gcsbb = gcbdb = gcbsb = 0.0; gcdbdb = -here->BSIM4v5capbd * ag0; gcsbsb = -here->BSIM4v5capbs * ag0; } gcbbb = -(gcbdb + gcbgb + gcbsb + gcbgmb); } } if (here->BSIM4v5trnqsMod) { *(ckt->CKTstate0 + here->BSIM4v5qcdump) = qdef * ScalingFactor; if (ckt->CKTmode & MODEINITTRAN) *(ckt->CKTstate1 + here->BSIM4v5qcdump) = *(ckt->CKTstate0 + here->BSIM4v5qcdump); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v5qcdump); if (error) return(error); } if (ByPass) goto line860; *(ckt->CKTstate0 + here->BSIM4v5qg) = qgate; *(ckt->CKTstate0 + here->BSIM4v5qd) = qdrn - *(ckt->CKTstate0 + here->BSIM4v5qbd); *(ckt->CKTstate0 + here->BSIM4v5qs) = qsrc - *(ckt->CKTstate0 + here->BSIM4v5qbs); if (here->BSIM4v5rgateMod == 3) *(ckt->CKTstate0 + here->BSIM4v5qgmid) = qgmid; if (!here->BSIM4v5rbodyMod) { *(ckt->CKTstate0 + here->BSIM4v5qb) = qbulk + *(ckt->CKTstate0 + here->BSIM4v5qbd) + *(ckt->CKTstate0 + here->BSIM4v5qbs); } else *(ckt->CKTstate0 + here->BSIM4v5qb) = qbulk; /* Store small signal parameters */ if (ckt->CKTmode & MODEINITSMSIG) { goto line1000; } if (!ChargeComputationNeeded) goto line850; if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->BSIM4v5qb) = *(ckt->CKTstate0 + here->BSIM4v5qb); *(ckt->CKTstate1 + here->BSIM4v5qg) = *(ckt->CKTstate0 + here->BSIM4v5qg); *(ckt->CKTstate1 + here->BSIM4v5qd) = *(ckt->CKTstate0 + here->BSIM4v5qd); if (here->BSIM4v5rgateMod == 3) *(ckt->CKTstate1 + here->BSIM4v5qgmid) = *(ckt->CKTstate0 + here->BSIM4v5qgmid); if (here->BSIM4v5rbodyMod) { *(ckt->CKTstate1 + here->BSIM4v5qbs) = *(ckt->CKTstate0 + here->BSIM4v5qbs); *(ckt->CKTstate1 + here->BSIM4v5qbd) = *(ckt->CKTstate0 + here->BSIM4v5qbd); } } error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v5qb); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v5qg); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v5qd); if (error) return(error); if (here->BSIM4v5rgateMod == 3) { error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v5qgmid); if (error) return(error); } if (here->BSIM4v5rbodyMod) { error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v5qbs); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v5qbd); if (error) return(error); } goto line860; line850: /* Zero gcap and ceqcap if (!ChargeComputationNeeded) */ ceqqg = ceqqb = ceqqd = 0.0; ceqqjd = ceqqjs = 0.0; cqcheq = cqdef = 0.0; gcdgb = gcddb = gcdsb = gcdbb = 0.0; gcsgb = gcsdb = gcssb = gcsbb = 0.0; gcggb = gcgdb = gcgsb = gcgbb = 0.0; gcbdb = gcbgb = gcbsb = gcbbb = 0.0; gcgmgmb = gcgmdb = gcgmsb = gcgmbb = 0.0; gcdgmb = gcsgmb = gcbgmb = ceqqgmid = 0.0; gcdbdb = gcsbsb = 0.0; gqdef = gcqgb = gcqdb = gcqsb = gcqbb = 0.0; ggtg = ggtd = ggtb = ggts = 0.0; sxpart = (1.0 - (dxpart = (here->BSIM4v5mode > 0) ? 0.4 : 0.6)); ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; if (here->BSIM4v5trnqsMod) { CoxWL = model->BSIM4v5coxe * pParam->BSIM4v5weffCV * here->BSIM4v5nf * pParam->BSIM4v5leffCV; T1 = here->BSIM4v5gcrg / CoxWL; here->BSIM4v5gtau = T1 * ScalingFactor; } else here->BSIM4v5gtau = 0.0; goto line900; line860: /* Calculate equivalent charge current */ cqgate = *(ckt->CKTstate0 + here->BSIM4v5cqg); cqbody = *(ckt->CKTstate0 + here->BSIM4v5cqb); cqdrn = *(ckt->CKTstate0 + here->BSIM4v5cqd); ceqqg = cqgate - gcggb * vgb + gcgdb * vbd + gcgsb * vbs; ceqqd = cqdrn - gcdgb * vgb - gcdgmb * vgmb + (gcddb + gcdbdb) * vbd - gcdbdb * vbd_jct + gcdsb * vbs; ceqqb = cqbody - gcbgb * vgb - gcbgmb * vgmb + gcbdb * vbd + gcbsb * vbs; if (here->BSIM4v5rgateMod == 3) ceqqgmid = *(ckt->CKTstate0 + here->BSIM4v5cqgmid) + gcgmdb * vbd + gcgmsb * vbs - gcgmgmb * vgmb; else ceqqgmid = 0.0; if (here->BSIM4v5rbodyMod) { ceqqjs = *(ckt->CKTstate0 + here->BSIM4v5cqbs) + gcsbsb * vbs_jct; ceqqjd = *(ckt->CKTstate0 + here->BSIM4v5cqbd) + gcdbdb * vbd_jct; } if (here->BSIM4v5trnqsMod) { T0 = ggtg * vgb - ggtd * vbd - ggts * vbs; ceqqg += T0; T1 = qdef * here->BSIM4v5gtau; ceqqd -= dxpart * T0 + T1 * (ddxpart_dVg * vgb - ddxpart_dVd * vbd - ddxpart_dVs * vbs); cqdef = *(ckt->CKTstate0 + here->BSIM4v5cqcdump) - gqdef * qdef; cqcheq = *(ckt->CKTstate0 + here->BSIM4v5cqcheq) - (gcqgb * vgb - gcqdb * vbd - gcqsb * vbs) + T0; } if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->BSIM4v5cqb) = *(ckt->CKTstate0 + here->BSIM4v5cqb); *(ckt->CKTstate1 + here->BSIM4v5cqg) = *(ckt->CKTstate0 + here->BSIM4v5cqg); *(ckt->CKTstate1 + here->BSIM4v5cqd) = *(ckt->CKTstate0 + here->BSIM4v5cqd); if (here->BSIM4v5rgateMod == 3) *(ckt->CKTstate1 + here->BSIM4v5cqgmid) = *(ckt->CKTstate0 + here->BSIM4v5cqgmid); if (here->BSIM4v5rbodyMod) { *(ckt->CKTstate1 + here->BSIM4v5cqbs) = *(ckt->CKTstate0 + here->BSIM4v5cqbs); *(ckt->CKTstate1 + here->BSIM4v5cqbd) = *(ckt->CKTstate0 + here->BSIM4v5cqbd); } } /* * Load current vector */ line900: if (here->BSIM4v5mode >= 0) { Gm = here->BSIM4v5gm; Gmbs = here->BSIM4v5gmbs; FwdSum = Gm + Gmbs; RevSum = 0.0; ceqdrn = model->BSIM4v5type * (cdrain - here->BSIM4v5gds * vds - Gm * vgs - Gmbs * vbs); ceqbd = model->BSIM4v5type * (here->BSIM4v5csub + here->BSIM4v5Igidl - (here->BSIM4v5gbds + here->BSIM4v5ggidld) * vds - (here->BSIM4v5gbgs + here->BSIM4v5ggidlg) * vgs - (here->BSIM4v5gbbs + here->BSIM4v5ggidlb) * vbs); ceqbs = model->BSIM4v5type * (here->BSIM4v5Igisl + here->BSIM4v5ggisls * vds - here->BSIM4v5ggislg * vgd - here->BSIM4v5ggislb * vbd); gbbdp = -(here->BSIM4v5gbds); gbbsp = here->BSIM4v5gbds + here->BSIM4v5gbgs + here->BSIM4v5gbbs; gbdpg = here->BSIM4v5gbgs; gbdpdp = here->BSIM4v5gbds; gbdpb = here->BSIM4v5gbbs; gbdpsp = -(gbdpg + gbdpdp + gbdpb); gbspg = 0.0; gbspdp = 0.0; gbspb = 0.0; gbspsp = 0.0; if (model->BSIM4v5igcMod) { gIstotg = here->BSIM4v5gIgsg + here->BSIM4v5gIgcsg; gIstotd = here->BSIM4v5gIgcsd; gIstots = here->BSIM4v5gIgss + here->BSIM4v5gIgcss; gIstotb = here->BSIM4v5gIgcsb; Istoteq = model->BSIM4v5type * (here->BSIM4v5Igs + here->BSIM4v5Igcs - gIstotg * vgs - here->BSIM4v5gIgcsd * vds - here->BSIM4v5gIgcsb * vbs); gIdtotg = here->BSIM4v5gIgdg + here->BSIM4v5gIgcdg; gIdtotd = here->BSIM4v5gIgdd + here->BSIM4v5gIgcdd; gIdtots = here->BSIM4v5gIgcds; gIdtotb = here->BSIM4v5gIgcdb; Idtoteq = model->BSIM4v5type * (here->BSIM4v5Igd + here->BSIM4v5Igcd - here->BSIM4v5gIgdg * vgd - here->BSIM4v5gIgcdg * vgs - here->BSIM4v5gIgcdd * vds - here->BSIM4v5gIgcdb * vbs); } else { gIstotg = gIstotd = gIstots = gIstotb = Istoteq = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = Idtoteq = 0.0; } if (model->BSIM4v5igbMod) { gIbtotg = here->BSIM4v5gIgbg; gIbtotd = here->BSIM4v5gIgbd; gIbtots = here->BSIM4v5gIgbs; gIbtotb = here->BSIM4v5gIgbb; Ibtoteq = model->BSIM4v5type * (here->BSIM4v5Igb - here->BSIM4v5gIgbg * vgs - here->BSIM4v5gIgbd * vds - here->BSIM4v5gIgbb * vbs); } else gIbtotg = gIbtotd = gIbtots = gIbtotb = Ibtoteq = 0.0; if ((model->BSIM4v5igcMod != 0) || (model->BSIM4v5igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; Igtoteq = Istoteq + Idtoteq + Ibtoteq; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = Igtoteq = 0.0; if (here->BSIM4v5rgateMod == 2) T0 = vges - vgs; else if (here->BSIM4v5rgateMod == 3) T0 = vgms - vgs; if (here->BSIM4v5rgateMod > 1) { gcrgd = here->BSIM4v5gcrgd * T0; gcrgg = here->BSIM4v5gcrgg * T0; gcrgs = here->BSIM4v5gcrgs * T0; gcrgb = here->BSIM4v5gcrgb * T0; ceqgcrg = -(gcrgd * vds + gcrgg * vgs + gcrgb * vbs); gcrgg -= here->BSIM4v5gcrg; gcrg = here->BSIM4v5gcrg; } else ceqgcrg = gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; } else { Gm = -here->BSIM4v5gm; Gmbs = -here->BSIM4v5gmbs; FwdSum = 0.0; RevSum = -(Gm + Gmbs); ceqdrn = -model->BSIM4v5type * (cdrain + here->BSIM4v5gds * vds + Gm * vgd + Gmbs * vbd); ceqbs = model->BSIM4v5type * (here->BSIM4v5csub + here->BSIM4v5Igisl + (here->BSIM4v5gbds + here->BSIM4v5ggisls) * vds - (here->BSIM4v5gbgs + here->BSIM4v5ggislg) * vgd - (here->BSIM4v5gbbs + here->BSIM4v5ggislb) * vbd); ceqbd = model->BSIM4v5type * (here->BSIM4v5Igidl - here->BSIM4v5ggidld * vds - here->BSIM4v5ggidlg * vgs - here->BSIM4v5ggidlb * vbs); gbbsp = -(here->BSIM4v5gbds); gbbdp = here->BSIM4v5gbds + here->BSIM4v5gbgs + here->BSIM4v5gbbs; gbdpg = 0.0; gbdpsp = 0.0; gbdpb = 0.0; gbdpdp = 0.0; gbspg = here->BSIM4v5gbgs; gbspsp = here->BSIM4v5gbds; gbspb = here->BSIM4v5gbbs; gbspdp = -(gbspg + gbspsp + gbspb); if (model->BSIM4v5igcMod) { gIstotg = here->BSIM4v5gIgsg + here->BSIM4v5gIgcdg; gIstotd = here->BSIM4v5gIgcds; gIstots = here->BSIM4v5gIgss + here->BSIM4v5gIgcdd; gIstotb = here->BSIM4v5gIgcdb; Istoteq = model->BSIM4v5type * (here->BSIM4v5Igs + here->BSIM4v5Igcd - here->BSIM4v5gIgsg * vgs - here->BSIM4v5gIgcdg * vgd + here->BSIM4v5gIgcdd * vds - here->BSIM4v5gIgcdb * vbd); gIdtotg = here->BSIM4v5gIgdg + here->BSIM4v5gIgcsg; gIdtotd = here->BSIM4v5gIgdd + here->BSIM4v5gIgcss; gIdtots = here->BSIM4v5gIgcsd; gIdtotb = here->BSIM4v5gIgcsb; Idtoteq = model->BSIM4v5type * (here->BSIM4v5Igd + here->BSIM4v5Igcs - (here->BSIM4v5gIgdg + here->BSIM4v5gIgcsg) * vgd + here->BSIM4v5gIgcsd * vds - here->BSIM4v5gIgcsb * vbd); } else { gIstotg = gIstotd = gIstots = gIstotb = Istoteq = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = Idtoteq = 0.0; } if (model->BSIM4v5igbMod) { gIbtotg = here->BSIM4v5gIgbg; gIbtotd = here->BSIM4v5gIgbs; gIbtots = here->BSIM4v5gIgbd; gIbtotb = here->BSIM4v5gIgbb; Ibtoteq = model->BSIM4v5type * (here->BSIM4v5Igb - here->BSIM4v5gIgbg * vgd + here->BSIM4v5gIgbd * vds - here->BSIM4v5gIgbb * vbd); } else gIbtotg = gIbtotd = gIbtots = gIbtotb = Ibtoteq = 0.0; if ((model->BSIM4v5igcMod != 0) || (model->BSIM4v5igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; Igtoteq = Istoteq + Idtoteq + Ibtoteq; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = Igtoteq = 0.0; if (here->BSIM4v5rgateMod == 2) T0 = vges - vgs; else if (here->BSIM4v5rgateMod == 3) T0 = vgms - vgs; if (here->BSIM4v5rgateMod > 1) { gcrgd = here->BSIM4v5gcrgs * T0; gcrgg = here->BSIM4v5gcrgg * T0; gcrgs = here->BSIM4v5gcrgd * T0; gcrgb = here->BSIM4v5gcrgb * T0; ceqgcrg = -(gcrgg * vgd - gcrgs * vds + gcrgb * vbd); gcrgg -= here->BSIM4v5gcrg; gcrg = here->BSIM4v5gcrg; } else ceqgcrg = gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; } if (model->BSIM4v5rdsMod == 1) { ceqgstot = model->BSIM4v5type * (here->BSIM4v5gstotd * vds + here->BSIM4v5gstotg * vgs + here->BSIM4v5gstotb * vbs); /* WDLiu: ceqgstot flowing away from sNodePrime */ gstot = here->BSIM4v5gstot; gstotd = here->BSIM4v5gstotd; gstotg = here->BSIM4v5gstotg; gstots = here->BSIM4v5gstots - gstot; gstotb = here->BSIM4v5gstotb; ceqgdtot = -model->BSIM4v5type * (here->BSIM4v5gdtotd * vds + here->BSIM4v5gdtotg * vgs + here->BSIM4v5gdtotb * vbs); /* WDLiu: ceqgdtot defined as flowing into dNodePrime */ gdtot = here->BSIM4v5gdtot; gdtotd = here->BSIM4v5gdtotd - gdtot; gdtotg = here->BSIM4v5gdtotg; gdtots = here->BSIM4v5gdtots; gdtotb = here->BSIM4v5gdtotb; } else { gstot = gstotd = gstotg = gstots = gstotb = ceqgstot = 0.0; gdtot = gdtotd = gdtotg = gdtots = gdtotb = ceqgdtot = 0.0; } if (model->BSIM4v5type > 0) { ceqjs = (here->BSIM4v5cbs - here->BSIM4v5gbs * vbs_jct); ceqjd = (here->BSIM4v5cbd - here->BSIM4v5gbd * vbd_jct); } else { ceqjs = -(here->BSIM4v5cbs - here->BSIM4v5gbs * vbs_jct); ceqjd = -(here->BSIM4v5cbd - here->BSIM4v5gbd * vbd_jct); ceqqg = -ceqqg; ceqqd = -ceqqd; ceqqb = -ceqqb; ceqgcrg = -ceqgcrg; if (here->BSIM4v5trnqsMod) { cqdef = -cqdef; cqcheq = -cqcheq; } if (here->BSIM4v5rbodyMod) { ceqqjs = -ceqqjs; ceqqjd = -ceqqjd; } if (here->BSIM4v5rgateMod == 3) ceqqgmid = -ceqqgmid; } /* * Loading RHS */ m = here->BSIM4v5m; #ifdef USE_OMP here->BSIM4v5rhsdPrime = m * (ceqjd - ceqbd + ceqgdtot - ceqdrn - ceqqd + Idtoteq); here->BSIM4v5rhsgPrime = m * (ceqqg - ceqgcrg + Igtoteq); if (here->BSIM4v5rgateMod == 2) here->BSIM4v5rhsgExt = m * ceqgcrg; else if (here->BSIM4v5rgateMod == 3) here->BSIM4v5grhsMid = m * (ceqqgmid + ceqgcrg); if (!here->BSIM4v5rbodyMod) { here->BSIM4v5rhsbPrime = m * (ceqbd + ceqbs - ceqjd - ceqjs - ceqqb + Ibtoteq); here->BSIM4v5rhssPrime = m * (ceqdrn - ceqbs + ceqjs + ceqqg + ceqqb + ceqqd + ceqqgmid - ceqgstot + Istoteq); } else { here->BSIM4v5rhsdb = m * (ceqjd + ceqqjd); here->BSIM4v5rhsbPrime = m * (ceqbd + ceqbs - ceqqb + Ibtoteq); here->BSIM4v5rhssb = m * (ceqjs + ceqqjs); here->BSIM4v5rhssPrime = m * (ceqdrn - ceqbs + ceqjs + ceqqd + ceqqg + ceqqb + ceqqjd + ceqqjs + ceqqgmid - ceqgstot + Istoteq); } if (model->BSIM4v5rdsMod) { here->BSIM4v5rhsd = m * ceqgdtot; here->BSIM4v5rhss = m * ceqgstot; } if (here->BSIM4v5trnqsMod) here->BSIM4v5rhsq = m * (cqcheq - cqdef); #else (*(ckt->CKTrhs + here->BSIM4v5dNodePrime) += m * (ceqjd - ceqbd + ceqgdtot - ceqdrn - ceqqd + Idtoteq)); (*(ckt->CKTrhs + here->BSIM4v5gNodePrime) -= m * (ceqqg - ceqgcrg + Igtoteq)); if (here->BSIM4v5rgateMod == 2) (*(ckt->CKTrhs + here->BSIM4v5gNodeExt) -= m * ceqgcrg); else if (here->BSIM4v5rgateMod == 3) (*(ckt->CKTrhs + here->BSIM4v5gNodeMid) -= m * (ceqqgmid + ceqgcrg)); if (!here->BSIM4v5rbodyMod) { (*(ckt->CKTrhs + here->BSIM4v5bNodePrime) += m * (ceqbd + ceqbs - ceqjd - ceqjs - ceqqb + Ibtoteq)); (*(ckt->CKTrhs + here->BSIM4v5sNodePrime) += m * (ceqdrn - ceqbs + ceqjs + ceqqg + ceqqb + ceqqd + ceqqgmid - ceqgstot + Istoteq)); } else { (*(ckt->CKTrhs + here->BSIM4v5dbNode) -= m * (ceqjd + ceqqjd)); (*(ckt->CKTrhs + here->BSIM4v5bNodePrime) += m * (ceqbd + ceqbs - ceqqb + Ibtoteq)); (*(ckt->CKTrhs + here->BSIM4v5sbNode) -= m * (ceqjs + ceqqjs)); (*(ckt->CKTrhs + here->BSIM4v5sNodePrime) += m * (ceqdrn - ceqbs + ceqjs + ceqqd + ceqqg + ceqqb + ceqqjd + ceqqjs + ceqqgmid - ceqgstot + Istoteq)); } if (model->BSIM4v5rdsMod) { (*(ckt->CKTrhs + here->BSIM4v5dNode) -= m * ceqgdtot); (*(ckt->CKTrhs + here->BSIM4v5sNode) += m * ceqgstot); } if (here->BSIM4v5trnqsMod) *(ckt->CKTrhs + here->BSIM4v5qNode) += m * (cqcheq - cqdef); #endif /* * Loading matrix */ if (!here->BSIM4v5rbodyMod) { gjbd = here->BSIM4v5gbd; gjbs = here->BSIM4v5gbs; } else gjbd = gjbs = 0.0; if (!model->BSIM4v5rdsMod) { gdpr = here->BSIM4v5drainConductance; gspr = here->BSIM4v5sourceConductance; } else gdpr = gspr = 0.0; geltd = here->BSIM4v5grgeltd; T1 = qdef * here->BSIM4v5gtau; #ifdef USE_OMP if (here->BSIM4v5rgateMod == 1) { here->BSIM4v5_1 = m * geltd; here->BSIM4v5_2 = m * geltd; here->BSIM4v5_3 = m * geltd; here->BSIM4v5_4 = m * (gcggb + geltd - ggtg + gIgtotg); here->BSIM4v5_5 = m * (gcgdb - ggtd + gIgtotd); here->BSIM4v5_6 = m * (gcgsb - ggts + gIgtots); here->BSIM4v5_7 = m * (gcgbb - ggtb + gIgtotb); } /* WDLiu: gcrg already subtracted from all gcrgg below */ else if (here->BSIM4v5rgateMod == 2) { here->BSIM4v5_8 = m * gcrg; here->BSIM4v5_9 = m * gcrgg; here->BSIM4v5_10 = m * gcrgd; here->BSIM4v5_11 = m * gcrgs; here->BSIM4v5_12 = m * gcrgb; here->BSIM4v5_13 = m * gcrg; here->BSIM4v5_14 = m * (gcggb - gcrgg - ggtg + gIgtotg); here->BSIM4v5_15 = m * (gcgdb - gcrgd - ggtd + gIgtotd); here->BSIM4v5_16 = m * (gcgsb - gcrgs - ggts + gIgtots); here->BSIM4v5_17 = m * (gcgbb - gcrgb - ggtb + gIgtotb); } else if (here->BSIM4v5rgateMod == 3) { here->BSIM4v5_18 = m * geltd; here->BSIM4v5_19 = m * geltd; here->BSIM4v5_20 = m * geltd; here->BSIM4v5_21 = m * (geltd + gcrg + gcgmgmb); here->BSIM4v5_22 = m * (gcrgd + gcgmdb); here->BSIM4v5_23 = m * gcrgg; here->BSIM4v5_24 = m * (gcrgs + gcgmsb); here->BSIM4v5_25 = m * (gcrgb + gcgmbb); here->BSIM4v5_26 = m * gcdgmb; here->BSIM4v5_27 = m * gcrg; here->BSIM4v5_28 = m * gcsgmb; here->BSIM4v5_29 = m * gcbgmb; here->BSIM4v5_30 = m * (gcggb - gcrgg - ggtg + gIgtotg); here->BSIM4v5_31 = m * (gcgdb - gcrgd - ggtd + gIgtotd); here->BSIM4v5_32 = m * (gcgsb - gcrgs - ggts + gIgtots); here->BSIM4v5_33 = m * (gcgbb - gcrgb - ggtb + gIgtotb); } else { here->BSIM4v5_34 = m * (gcggb - ggtg + gIgtotg); here->BSIM4v5_35 = m * (gcgdb - ggtd + gIgtotd); here->BSIM4v5_36 = m * (gcgsb - ggts + gIgtots); here->BSIM4v5_37 = m * (gcgbb - ggtb + gIgtotb); } if (model->BSIM4v5rdsMod) { here->BSIM4v5_38 = m * gdtotg; here->BSIM4v5_39 = m * gdtots; here->BSIM4v5_40 = m * gdtotb; here->BSIM4v5_41 = m * gstotd; here->BSIM4v5_42 = m * gstotg; here->BSIM4v5_43 = m * gstotb; } here->BSIM4v5_44 = m * (gdpr + here->BSIM4v5gds + here->BSIM4v5gbd + T1 * ddxpart_dVd - gdtotd + RevSum + gcddb + gbdpdp + dxpart * ggtd - gIdtotd); here->BSIM4v5_45 = m * (gdpr + gdtot); here->BSIM4v5_46 = m * (Gm + gcdgb - gdtotg + gbdpg - gIdtotg + dxpart * ggtg + T1 * ddxpart_dVg); here->BSIM4v5_47 = m * (here->BSIM4v5gds + gdtots - dxpart * ggts + gIdtots - T1 * ddxpart_dVs + FwdSum - gcdsb - gbdpsp); here->BSIM4v5_48 = m * (gjbd + gdtotb - Gmbs - gcdbb - gbdpb + gIdtotb - T1 * ddxpart_dVb - dxpart * ggtb); here->BSIM4v5_49 = m * (gdpr - gdtotd); here->BSIM4v5_50 = m * (gdpr + gdtot); here->BSIM4v5_51 = m * (here->BSIM4v5gds + gstotd + RevSum - gcsdb - gbspdp - T1 * dsxpart_dVd - sxpart * ggtd + gIstotd); here->BSIM4v5_52 = m * (gcsgb - Gm - gstotg + gbspg + sxpart * ggtg + T1 * dsxpart_dVg - gIstotg); here->BSIM4v5_53 = m * (gspr + here->BSIM4v5gds + here->BSIM4v5gbs + T1 * dsxpart_dVs - gstots + FwdSum + gcssb + gbspsp + sxpart * ggts - gIstots); here->BSIM4v5_54 = m * (gspr + gstot); here->BSIM4v5_55 = m * (gjbs + gstotb + Gmbs - gcsbb - gbspb - sxpart * ggtb - T1 * dsxpart_dVb + gIstotb); here->BSIM4v5_56 = m * (gspr - gstots); here->BSIM4v5_57 = m * (gspr + gstot); here->BSIM4v5_58 = m * (gcbdb - gjbd + gbbdp - gIbtotd); here->BSIM4v5_59 = m * (gcbgb - here->BSIM4v5gbgs - gIbtotg); here->BSIM4v5_60 = m * (gcbsb - gjbs + gbbsp - gIbtots); here->BSIM4v5_61 = m * (gjbd + gjbs + gcbbb - here->BSIM4v5gbbs - gIbtotb); ggidld = here->BSIM4v5ggidld; ggidlg = here->BSIM4v5ggidlg; ggidlb = here->BSIM4v5ggidlb; ggislg = here->BSIM4v5ggislg; ggisls = here->BSIM4v5ggisls; ggislb = here->BSIM4v5ggislb; /* stamp gidl */ here->BSIM4v5_62 = m * ggidld; here->BSIM4v5_63 = m * ggidlg; here->BSIM4v5_64 = m * (ggidlg + ggidld + ggidlb); here->BSIM4v5_65 = m * ggidlb; here->BSIM4v5_66 = m * ggidld; here->BSIM4v5_67 = m * ggidlg; here->BSIM4v5_68 = m * (ggidlg + ggidld + ggidlb); here->BSIM4v5_69 = m * ggidlb; /* stamp gisl */ here->BSIM4v5_70 = m * (ggisls + ggislg + ggislb); here->BSIM4v5_71 = m * ggislg; here->BSIM4v5_72 = m * ggisls; here->BSIM4v5_73 = m * ggislb; here->BSIM4v5_74 = m * (ggislg + ggisls + ggislb); here->BSIM4v5_75 = m * ggislg; here->BSIM4v5_76 = m * ggisls; here->BSIM4v5_77 = m * ggislb; if (here->BSIM4v5rbodyMod) { here->BSIM4v5_78 = m * (gcdbdb - here->BSIM4v5gbd); here->BSIM4v5_79 = m * (here->BSIM4v5gbs - gcsbsb); here->BSIM4v5_80 = m * (gcdbdb - here->BSIM4v5gbd); here->BSIM4v5_81 = m * (here->BSIM4v5gbd - gcdbdb + here->BSIM4v5grbpd + here->BSIM4v5grbdb); here->BSIM4v5_82 = m * here->BSIM4v5grbpd; here->BSIM4v5_83 = m * here->BSIM4v5grbdb; here->BSIM4v5_84 = m * here->BSIM4v5grbpd; here->BSIM4v5_85 = m * here->BSIM4v5grbpb; here->BSIM4v5_86 = m * here->BSIM4v5grbps; here->BSIM4v5_87 = m * (here->BSIM4v5grbpd + here->BSIM4v5grbps + here->BSIM4v5grbpb); /* WDLiu: (gcbbb - here->BSIM4v5gbbs) already added to BPbpPtr */ here->BSIM4v5_88 = m * (gcsbsb - here->BSIM4v5gbs); here->BSIM4v5_89 = m * here->BSIM4v5grbps; here->BSIM4v5_90 = m * here->BSIM4v5grbsb; here->BSIM4v5_91 = m * (here->BSIM4v5gbs - gcsbsb + here->BSIM4v5grbps + here->BSIM4v5grbsb); here->BSIM4v5_92 = m * here->BSIM4v5grbdb; here->BSIM4v5_93 = m * here->BSIM4v5grbpb; here->BSIM4v5_94 = m * here->BSIM4v5grbsb; here->BSIM4v5_95 = m * (here->BSIM4v5grbsb + here->BSIM4v5grbdb + here->BSIM4v5grbpb); } if (here->BSIM4v5trnqsMod) { here->BSIM4v5_96 = m * (gqdef + here->BSIM4v5gtau); here->BSIM4v5_97 = m * (ggtg - gcqgb); here->BSIM4v5_98 = m * (ggtd - gcqdb); here->BSIM4v5_99 = m * (ggts - gcqsb); here->BSIM4v5_100 = m * (ggtb - gcqbb); here->BSIM4v5_101 = m * dxpart * here->BSIM4v5gtau; here->BSIM4v5_102 = m * sxpart * here->BSIM4v5gtau; here->BSIM4v5_103 = m * here->BSIM4v5gtau; } #else if (here->BSIM4v5rgateMod == 1) { (*(here->BSIM4v5GEgePtr) += m * geltd); (*(here->BSIM4v5GPgePtr) -= m * geltd); (*(here->BSIM4v5GEgpPtr) -= m * geltd); (*(here->BSIM4v5GPgpPtr) += m * (gcggb + geltd - ggtg + gIgtotg)); (*(here->BSIM4v5GPdpPtr) += m * (gcgdb - ggtd + gIgtotd)); (*(here->BSIM4v5GPspPtr) += m * (gcgsb - ggts + gIgtots)); (*(here->BSIM4v5GPbpPtr) += m * (gcgbb - ggtb + gIgtotb)); } /* WDLiu: gcrg already subtracted from all gcrgg below */ else if (here->BSIM4v5rgateMod == 2) { (*(here->BSIM4v5GEgePtr) += m * gcrg); (*(here->BSIM4v5GEgpPtr) += m * gcrgg); (*(here->BSIM4v5GEdpPtr) += m * gcrgd); (*(here->BSIM4v5GEspPtr) += m * gcrgs); (*(here->BSIM4v5GEbpPtr) += m * gcrgb); (*(here->BSIM4v5GPgePtr) -= m * gcrg); (*(here->BSIM4v5GPgpPtr) += m * (gcggb - gcrgg - ggtg + gIgtotg)); (*(here->BSIM4v5GPdpPtr) += m * (gcgdb - gcrgd - ggtd + gIgtotd)); (*(here->BSIM4v5GPspPtr) += m * (gcgsb - gcrgs - ggts + gIgtots)); (*(here->BSIM4v5GPbpPtr) += m * (gcgbb - gcrgb - ggtb + gIgtotb)); } else if (here->BSIM4v5rgateMod == 3) { (*(here->BSIM4v5GEgePtr) += m * geltd); (*(here->BSIM4v5GEgmPtr) -= m * geltd); (*(here->BSIM4v5GMgePtr) -= m * geltd); (*(here->BSIM4v5GMgmPtr) += m * (geltd + gcrg + gcgmgmb)); (*(here->BSIM4v5GMdpPtr) += m * (gcrgd + gcgmdb)); (*(here->BSIM4v5GMgpPtr) += m * gcrgg); (*(here->BSIM4v5GMspPtr) += m * (gcrgs + gcgmsb)); (*(here->BSIM4v5GMbpPtr) += m * (gcrgb + gcgmbb)); (*(here->BSIM4v5DPgmPtr) += m * gcdgmb); (*(here->BSIM4v5GPgmPtr) -= m * gcrg); (*(here->BSIM4v5SPgmPtr) += m * gcsgmb); (*(here->BSIM4v5BPgmPtr) += m * gcbgmb); (*(here->BSIM4v5GPgpPtr) += m * (gcggb - gcrgg - ggtg + gIgtotg)); (*(here->BSIM4v5GPdpPtr) += m * (gcgdb - gcrgd - ggtd + gIgtotd)); (*(here->BSIM4v5GPspPtr) += m * (gcgsb - gcrgs - ggts + gIgtots)); (*(here->BSIM4v5GPbpPtr) += m * (gcgbb - gcrgb - ggtb + gIgtotb)); } else { (*(here->BSIM4v5GPgpPtr) += m * (gcggb - ggtg + gIgtotg)); (*(here->BSIM4v5GPdpPtr) += m * (gcgdb - ggtd + gIgtotd)); (*(here->BSIM4v5GPspPtr) += m * (gcgsb - ggts + gIgtots)); (*(here->BSIM4v5GPbpPtr) += m * (gcgbb - ggtb + gIgtotb)); } if (model->BSIM4v5rdsMod) { (*(here->BSIM4v5DgpPtr) += m * gdtotg); (*(here->BSIM4v5DspPtr) += m * gdtots); (*(here->BSIM4v5DbpPtr) += m * gdtotb); (*(here->BSIM4v5SdpPtr) += m * gstotd); (*(here->BSIM4v5SgpPtr) += m * gstotg); (*(here->BSIM4v5SbpPtr) += m * gstotb); } (*(here->BSIM4v5DPdpPtr) += m * (gdpr + here->BSIM4v5gds + here->BSIM4v5gbd + T1 * ddxpart_dVd - gdtotd + RevSum + gcddb + gbdpdp + dxpart * ggtd - gIdtotd)); (*(here->BSIM4v5DPdPtr) -= m * (gdpr + gdtot)); (*(here->BSIM4v5DPgpPtr) += m * (Gm + gcdgb - gdtotg + gbdpg - gIdtotg + dxpart * ggtg + T1 * ddxpart_dVg)); (*(here->BSIM4v5DPspPtr) -= m * (here->BSIM4v5gds + gdtots - dxpart * ggts + gIdtots - T1 * ddxpart_dVs + FwdSum - gcdsb - gbdpsp)); (*(here->BSIM4v5DPbpPtr) -= m * (gjbd + gdtotb - Gmbs - gcdbb - gbdpb + gIdtotb - T1 * ddxpart_dVb - dxpart * ggtb)); (*(here->BSIM4v5DdpPtr) -= m * (gdpr - gdtotd)); (*(here->BSIM4v5DdPtr) += m * (gdpr + gdtot)); (*(here->BSIM4v5SPdpPtr) -= m * (here->BSIM4v5gds + gstotd + RevSum - gcsdb - gbspdp - T1 * dsxpart_dVd - sxpart * ggtd + gIstotd)); (*(here->BSIM4v5SPgpPtr) += m * (gcsgb - Gm - gstotg + gbspg + sxpart * ggtg + T1 * dsxpart_dVg - gIstotg)); (*(here->BSIM4v5SPspPtr) += m * (gspr + here->BSIM4v5gds + here->BSIM4v5gbs + T1 * dsxpart_dVs - gstots + FwdSum + gcssb + gbspsp + sxpart * ggts - gIstots)); (*(here->BSIM4v5SPsPtr) -= m * (gspr + gstot)); (*(here->BSIM4v5SPbpPtr) -= m * (gjbs + gstotb + Gmbs - gcsbb - gbspb - sxpart * ggtb - T1 * dsxpart_dVb + gIstotb)); (*(here->BSIM4v5SspPtr) -= m * (gspr - gstots)); (*(here->BSIM4v5SsPtr) += m * (gspr + gstot)); (*(here->BSIM4v5BPdpPtr) += m * (gcbdb - gjbd + gbbdp - gIbtotd)); (*(here->BSIM4v5BPgpPtr) += m * (gcbgb - here->BSIM4v5gbgs - gIbtotg)); (*(here->BSIM4v5BPspPtr) += m * (gcbsb - gjbs + gbbsp - gIbtots)); (*(here->BSIM4v5BPbpPtr) += m * (gjbd + gjbs + gcbbb - here->BSIM4v5gbbs - gIbtotb)); ggidld = here->BSIM4v5ggidld; ggidlg = here->BSIM4v5ggidlg; ggidlb = here->BSIM4v5ggidlb; ggislg = here->BSIM4v5ggislg; ggisls = here->BSIM4v5ggisls; ggislb = here->BSIM4v5ggislb; /* stamp gidl */ (*(here->BSIM4v5DPdpPtr) += m * ggidld); (*(here->BSIM4v5DPgpPtr) += m * ggidlg); (*(here->BSIM4v5DPspPtr) -= m * (ggidlg + ggidld + ggidlb)); (*(here->BSIM4v5DPbpPtr) += m * ggidlb); (*(here->BSIM4v5BPdpPtr) -= m * ggidld); (*(here->BSIM4v5BPgpPtr) -= m * ggidlg); (*(here->BSIM4v5BPspPtr) += m * (ggidlg + ggidld + ggidlb)); (*(here->BSIM4v5BPbpPtr) -= m * ggidlb); /* stamp gisl */ (*(here->BSIM4v5SPdpPtr) -= m * (ggisls + ggislg + ggislb)); (*(here->BSIM4v5SPgpPtr) += m * ggislg); (*(here->BSIM4v5SPspPtr) += m * ggisls); (*(here->BSIM4v5SPbpPtr) += m * ggislb); (*(here->BSIM4v5BPdpPtr) += m * (ggislg + ggisls + ggislb)); (*(here->BSIM4v5BPgpPtr) -= m * ggislg); (*(here->BSIM4v5BPspPtr) -= m * ggisls); (*(here->BSIM4v5BPbpPtr) -= m * ggislb); if (here->BSIM4v5rbodyMod) { (*(here->BSIM4v5DPdbPtr) += m * (gcdbdb - here->BSIM4v5gbd)); (*(here->BSIM4v5SPsbPtr) -= m * (here->BSIM4v5gbs - gcsbsb)); (*(here->BSIM4v5DBdpPtr) += m * (gcdbdb - here->BSIM4v5gbd)); (*(here->BSIM4v5DBdbPtr) += m * (here->BSIM4v5gbd - gcdbdb + here->BSIM4v5grbpd + here->BSIM4v5grbdb)); (*(here->BSIM4v5DBbpPtr) -= m * here->BSIM4v5grbpd); (*(here->BSIM4v5DBbPtr) -= m * here->BSIM4v5grbdb); (*(here->BSIM4v5BPdbPtr) -= m * here->BSIM4v5grbpd); (*(here->BSIM4v5BPbPtr) -= m * here->BSIM4v5grbpb); (*(here->BSIM4v5BPsbPtr) -= m * here->BSIM4v5grbps); (*(here->BSIM4v5BPbpPtr) += m * (here->BSIM4v5grbpd + here->BSIM4v5grbps + here->BSIM4v5grbpb)); /* WDLiu: (gcbbb - here->BSIM4v5gbbs) already added to BPbpPtr */ (*(here->BSIM4v5SBspPtr) += m * (gcsbsb - here->BSIM4v5gbs)); (*(here->BSIM4v5SBbpPtr) -= m * here->BSIM4v5grbps); (*(here->BSIM4v5SBbPtr) -= m * here->BSIM4v5grbsb); (*(here->BSIM4v5SBsbPtr) += m * (here->BSIM4v5gbs - gcsbsb + here->BSIM4v5grbps + here->BSIM4v5grbsb)); (*(here->BSIM4v5BdbPtr) -= m * here->BSIM4v5grbdb); (*(here->BSIM4v5BbpPtr) -= m * here->BSIM4v5grbpb); (*(here->BSIM4v5BsbPtr) -= m * here->BSIM4v5grbsb); (*(here->BSIM4v5BbPtr) += m * (here->BSIM4v5grbsb + here->BSIM4v5grbdb + here->BSIM4v5grbpb)); } if (here->BSIM4v5trnqsMod) { (*(here->BSIM4v5QqPtr) += m * (gqdef + here->BSIM4v5gtau)); (*(here->BSIM4v5QgpPtr) += m * (ggtg - gcqgb)); (*(here->BSIM4v5QdpPtr) += m * (ggtd - gcqdb)); (*(here->BSIM4v5QspPtr) += m * (ggts - gcqsb)); (*(here->BSIM4v5QbpPtr) += m * (ggtb - gcqbb)); (*(here->BSIM4v5DPqPtr) += m * dxpart * here->BSIM4v5gtau); (*(here->BSIM4v5SPqPtr) += m * sxpart * here->BSIM4v5gtau); (*(here->BSIM4v5GPqPtr) -= m * here->BSIM4v5gtau); } #endif line1000: ; #ifndef USE_OMP } /* End of MOSFET Instance */ } /* End of Model Instance */ #endif return(OK); } #ifdef USE_OMP void BSIM4v5LoadRhsMat(GENmodel *inModel, CKTcircuit *ckt) { int InstCount, idx; BSIM4v5instance **InstArray; BSIM4v5instance *here; BSIM4v5model *model = (BSIM4v5model*)inModel; InstArray = model->BSIM4v5InstanceArray; InstCount = model->BSIM4v5InstCount; for(idx = 0; idx < InstCount; idx++) { here = InstArray[idx]; model = BSIM4v5modPtr(here); /* Update b for Ax = b */ (*(ckt->CKTrhs + here->BSIM4v5dNodePrime) += here->BSIM4v5rhsdPrime); (*(ckt->CKTrhs + here->BSIM4v5gNodePrime) -= here->BSIM4v5rhsgPrime); if (here->BSIM4v5rgateMod == 2) (*(ckt->CKTrhs + here->BSIM4v5gNodeExt) -= here->BSIM4v5rhsgExt); else if (here->BSIM4v5rgateMod == 3) (*(ckt->CKTrhs + here->BSIM4v5gNodeMid) -= here->BSIM4v5grhsMid); if (!here->BSIM4v5rbodyMod) { (*(ckt->CKTrhs + here->BSIM4v5bNodePrime) += here->BSIM4v5rhsbPrime); (*(ckt->CKTrhs + here->BSIM4v5sNodePrime) += here->BSIM4v5rhssPrime); } else { (*(ckt->CKTrhs + here->BSIM4v5dbNode) -= here->BSIM4v5rhsdb); (*(ckt->CKTrhs + here->BSIM4v5bNodePrime) += here->BSIM4v5rhsbPrime); (*(ckt->CKTrhs + here->BSIM4v5sbNode) -= here->BSIM4v5rhssb); (*(ckt->CKTrhs + here->BSIM4v5sNodePrime) += here->BSIM4v5rhssPrime); } if (model->BSIM4v5rdsMod) { (*(ckt->CKTrhs + here->BSIM4v5dNode) -= here->BSIM4v5rhsd); (*(ckt->CKTrhs + here->BSIM4v5sNode) += here->BSIM4v5rhss); } if (here->BSIM4v5trnqsMod) *(ckt->CKTrhs + here->BSIM4v5qNode) += here->BSIM4v5rhsq; /* Update A for Ax = b */ if (here->BSIM4v5rgateMod == 1) { (*(here->BSIM4v5GEgePtr) += here->BSIM4v5_1); (*(here->BSIM4v5GPgePtr) -= here->BSIM4v5_2); (*(here->BSIM4v5GEgpPtr) -= here->BSIM4v5_3); (*(here->BSIM4v5GPgpPtr) += here->BSIM4v5_4); (*(here->BSIM4v5GPdpPtr) += here->BSIM4v5_5); (*(here->BSIM4v5GPspPtr) += here->BSIM4v5_6); (*(here->BSIM4v5GPbpPtr) += here->BSIM4v5_7); } else if (here->BSIM4v5rgateMod == 2) { (*(here->BSIM4v5GEgePtr) += here->BSIM4v5_8); (*(here->BSIM4v5GEgpPtr) += here->BSIM4v5_9); (*(here->BSIM4v5GEdpPtr) += here->BSIM4v5_10); (*(here->BSIM4v5GEspPtr) += here->BSIM4v5_11); (*(here->BSIM4v5GEbpPtr) += here->BSIM4v5_12); (*(here->BSIM4v5GPgePtr) -= here->BSIM4v5_13); (*(here->BSIM4v5GPgpPtr) += here->BSIM4v5_14); (*(here->BSIM4v5GPdpPtr) += here->BSIM4v5_15); (*(here->BSIM4v5GPspPtr) += here->BSIM4v5_16); (*(here->BSIM4v5GPbpPtr) += here->BSIM4v5_17); } else if (here->BSIM4v5rgateMod == 3) { (*(here->BSIM4v5GEgePtr) += here->BSIM4v5_18); (*(here->BSIM4v5GEgmPtr) -= here->BSIM4v5_19); (*(here->BSIM4v5GMgePtr) -= here->BSIM4v5_20); (*(here->BSIM4v5GMgmPtr) += here->BSIM4v5_21); (*(here->BSIM4v5GMdpPtr) += here->BSIM4v5_22); (*(here->BSIM4v5GMgpPtr) += here->BSIM4v5_23); (*(here->BSIM4v5GMspPtr) += here->BSIM4v5_24); (*(here->BSIM4v5GMbpPtr) += here->BSIM4v5_25); (*(here->BSIM4v5DPgmPtr) += here->BSIM4v5_26); (*(here->BSIM4v5GPgmPtr) -= here->BSIM4v5_27); (*(here->BSIM4v5SPgmPtr) += here->BSIM4v5_28); (*(here->BSIM4v5BPgmPtr) += here->BSIM4v5_29); (*(here->BSIM4v5GPgpPtr) += here->BSIM4v5_30); (*(here->BSIM4v5GPdpPtr) += here->BSIM4v5_31); (*(here->BSIM4v5GPspPtr) += here->BSIM4v5_32); (*(here->BSIM4v5GPbpPtr) += here->BSIM4v5_33); } else { (*(here->BSIM4v5GPgpPtr) += here->BSIM4v5_34); (*(here->BSIM4v5GPdpPtr) += here->BSIM4v5_35); (*(here->BSIM4v5GPspPtr) += here->BSIM4v5_36); (*(here->BSIM4v5GPbpPtr) += here->BSIM4v5_37); } if (model->BSIM4v5rdsMod) { (*(here->BSIM4v5DgpPtr) += here->BSIM4v5_38); (*(here->BSIM4v5DspPtr) += here->BSIM4v5_39); (*(here->BSIM4v5DbpPtr) += here->BSIM4v5_40); (*(here->BSIM4v5SdpPtr) += here->BSIM4v5_41); (*(here->BSIM4v5SgpPtr) += here->BSIM4v5_42); (*(here->BSIM4v5SbpPtr) += here->BSIM4v5_43); } (*(here->BSIM4v5DPdpPtr) += here->BSIM4v5_44); (*(here->BSIM4v5DPdPtr) -= here->BSIM4v5_45); (*(here->BSIM4v5DPgpPtr) += here->BSIM4v5_46); (*(here->BSIM4v5DPspPtr) -= here->BSIM4v5_47); (*(here->BSIM4v5DPbpPtr) -= here->BSIM4v5_48); (*(here->BSIM4v5DdpPtr) -= here->BSIM4v5_49); (*(here->BSIM4v5DdPtr) += here->BSIM4v5_50); (*(here->BSIM4v5SPdpPtr) -= here->BSIM4v5_51); (*(here->BSIM4v5SPgpPtr) += here->BSIM4v5_52); (*(here->BSIM4v5SPspPtr) += here->BSIM4v5_53); (*(here->BSIM4v5SPsPtr) -= here->BSIM4v5_54); (*(here->BSIM4v5SPbpPtr) -= here->BSIM4v5_55); (*(here->BSIM4v5SspPtr) -= here->BSIM4v5_56); (*(here->BSIM4v5SsPtr) += here->BSIM4v5_57); (*(here->BSIM4v5BPdpPtr) += here->BSIM4v5_58); (*(here->BSIM4v5BPgpPtr) += here->BSIM4v5_59); (*(here->BSIM4v5BPspPtr) += here->BSIM4v5_60); (*(here->BSIM4v5BPbpPtr) += here->BSIM4v5_61); /* stamp gidl */ (*(here->BSIM4v5DPdpPtr) += here->BSIM4v5_62); (*(here->BSIM4v5DPgpPtr) += here->BSIM4v5_63); (*(here->BSIM4v5DPspPtr) -= here->BSIM4v5_64); (*(here->BSIM4v5DPbpPtr) += here->BSIM4v5_65); (*(here->BSIM4v5BPdpPtr) -= here->BSIM4v5_66); (*(here->BSIM4v5BPgpPtr) -= here->BSIM4v5_67); (*(here->BSIM4v5BPspPtr) += here->BSIM4v5_68); (*(here->BSIM4v5BPbpPtr) -= here->BSIM4v5_69); /* stamp gisl */ (*(here->BSIM4v5SPdpPtr) -= here->BSIM4v5_70); (*(here->BSIM4v5SPgpPtr) += here->BSIM4v5_71); (*(here->BSIM4v5SPspPtr) += here->BSIM4v5_72); (*(here->BSIM4v5SPbpPtr) += here->BSIM4v5_73); (*(here->BSIM4v5BPdpPtr) += here->BSIM4v5_74); (*(here->BSIM4v5BPgpPtr) -= here->BSIM4v5_75); (*(here->BSIM4v5BPspPtr) -= here->BSIM4v5_76); (*(here->BSIM4v5BPbpPtr) -= here->BSIM4v5_77); if (here->BSIM4v5rbodyMod) { (*(here->BSIM4v5DPdbPtr) += here->BSIM4v5_78); (*(here->BSIM4v5SPsbPtr) -= here->BSIM4v5_79); (*(here->BSIM4v5DBdpPtr) += here->BSIM4v5_80); (*(here->BSIM4v5DBdbPtr) += here->BSIM4v5_81); (*(here->BSIM4v5DBbpPtr) -= here->BSIM4v5_82); (*(here->BSIM4v5DBbPtr) -= here->BSIM4v5_83); (*(here->BSIM4v5BPdbPtr) -= here->BSIM4v5_84); (*(here->BSIM4v5BPbPtr) -= here->BSIM4v5_85); (*(here->BSIM4v5BPsbPtr) -= here->BSIM4v5_86); (*(here->BSIM4v5BPbpPtr) += here->BSIM4v5_87); (*(here->BSIM4v5SBspPtr) += here->BSIM4v5_88); (*(here->BSIM4v5SBbpPtr) -= here->BSIM4v5_89); (*(here->BSIM4v5SBbPtr) -= here->BSIM4v5_90); (*(here->BSIM4v5SBsbPtr) += here->BSIM4v5_91); (*(here->BSIM4v5BdbPtr) -= here->BSIM4v5_92); (*(here->BSIM4v5BbpPtr) -= here->BSIM4v5_93); (*(here->BSIM4v5BsbPtr) -= here->BSIM4v5_94); (*(here->BSIM4v5BbPtr) += here->BSIM4v5_95); } if (here->BSIM4v5trnqsMod) { (*(here->BSIM4v5QqPtr) += here->BSIM4v5_96); (*(here->BSIM4v5QgpPtr) += here->BSIM4v5_97); (*(here->BSIM4v5QdpPtr) += here->BSIM4v5_98); (*(here->BSIM4v5QspPtr) += here->BSIM4v5_99); (*(here->BSIM4v5QbpPtr) += here->BSIM4v5_100); (*(here->BSIM4v5DPqPtr) += here->BSIM4v5_101); (*(here->BSIM4v5SPqPtr) += here->BSIM4v5_102); (*(here->BSIM4v5GPqPtr) -= here->BSIM4v5_103); } } } #endif /* function to compute poly depletion effect */ int BSIM4v5polyDepletion( double phi, double ngate, double coxe, double Vgs, double *Vgs_eff, double *dVgs_eff_dVg) { double T1, T2, T3, T4, T5, T6, T7, T8; /* Poly Gate Si Depletion Effect */ if ((ngate > 1.0e18) && (ngate < 1.0e25) && (Vgs > phi)) { T1 = 1.0e6 * CHARGE * EPSSI * ngate / (coxe * coxe); T8 = Vgs - phi; T4 = sqrt(1.0 + 2.0 * T8 / T1); T2 = 2.0 * T8 / (T4 + 1.0); T3 = 0.5 * T2 * T2 / T1; /* T3 = Vpoly */ T7 = 1.12 - T3 - 0.05; T6 = sqrt(T7 * T7 + 0.224); T5 = 1.12 - 0.5 * (T7 + T6); *Vgs_eff = Vgs - T5; *dVgs_eff_dVg = 1.0 - (0.5 - 0.5 / T4) * (1.0 + T7 / T6); } else { *Vgs_eff = Vgs; *dVgs_eff_dVg = 1.0; } return(0); } tmpk8ny_4pz/src/spicelib/devices/bsim4v5/b4v5pzld.c0000644000175000017500000010412613546075722022276 0ustar carstencarsten/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ /********** * Copyright 2005 Regents of the University of California. All rights reserved. * File: b4pzld.c of BSIM4.5.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 10/05/2001. **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "bsim4v5def.h" #include "ngspice/suffix.h" int BSIM4v5pzLoad( GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { BSIM4v5model *model = (BSIM4v5model*)inModel; BSIM4v5instance *here; double gjbd, gjbs, geltd, gcrg, gcrgg, gcrgd, gcrgs, gcrgb; double xcggb, xcgdb, xcgsb, xcgbb, xcbgb, xcbdb, xcbsb, xcbbb; double xcdgb, xcddb, xcdsb, xcdbb, xcsgb, xcsdb, xcssb, xcsbb; double gds, capbd, capbs, FwdSum, RevSum, Gm, Gmbs; double gstot, gstotd, gstotg, gstots, gstotb, gspr; double gdtot, gdtotd, gdtotg, gdtots, gdtotb, gdpr; double gIstotg, gIstotd, gIstots, gIstotb; double gIdtotg, gIdtotd, gIdtots, gIdtotb; double gIbtotg, gIbtotd, gIbtots, gIbtotb; double gIgtotg, gIgtotd, gIgtots, gIgtotb; double cgso, cgdo, cgbo; double xcdbdb=0.0, xcsbsb=0.0, xcgmgmb=0.0, xcgmdb=0.0, xcgmsb=0.0, xcdgmb=0.0, xcsgmb=0.0; double xcgmbb=0.0, xcbgmb=0.0; double dxpart, sxpart, xgtg, xgtd, xgts, xgtb, xcqgb=0.0, xcqdb=0.0, xcqsb=0.0, xcqbb=0.0; double gbspsp, gbbdp, gbbsp, gbspg, gbspb; double gbspdp, gbdpdp, gbdpg, gbdpb, gbdpsp; double ddxpart_dVd, ddxpart_dVg, ddxpart_dVb, ddxpart_dVs; double dsxpart_dVd, dsxpart_dVg, dsxpart_dVb, dsxpart_dVs; double T0=0.0, T1, CoxWL, qcheq, Cdg, Cdd, Cds, Csg, Csd, Css; double ScalingFactor = 1.0e-9; struct bsim4v5SizeDependParam *pParam; double ggidld, ggidlg, ggidlb, ggislg, ggislb, ggisls; double m; for (; model != NULL; model = BSIM4v5nextModel(model)) { for (here = BSIM4v5instances(model); here!= NULL; here = BSIM4v5nextInstance(here)) { pParam = here->pParam; capbd = here->BSIM4v5capbd; capbs = here->BSIM4v5capbs; cgso = here->BSIM4v5cgso; cgdo = here->BSIM4v5cgdo; cgbo = pParam->BSIM4v5cgbo; if (here->BSIM4v5mode >= 0) { Gm = here->BSIM4v5gm; Gmbs = here->BSIM4v5gmbs; FwdSum = Gm + Gmbs; RevSum = 0.0; gbbdp = -(here->BSIM4v5gbds); gbbsp = here->BSIM4v5gbds + here->BSIM4v5gbgs + here->BSIM4v5gbbs; gbdpg = here->BSIM4v5gbgs; gbdpdp = here->BSIM4v5gbds; gbdpb = here->BSIM4v5gbbs; gbdpsp = -(gbdpg + gbdpdp + gbdpb); gbspdp = 0.0; gbspg = 0.0; gbspb = 0.0; gbspsp = 0.0; if (model->BSIM4v5igcMod) { gIstotg = here->BSIM4v5gIgsg + here->BSIM4v5gIgcsg; gIstotd = here->BSIM4v5gIgcsd; gIstots = here->BSIM4v5gIgss + here->BSIM4v5gIgcss; gIstotb = here->BSIM4v5gIgcsb; gIdtotg = here->BSIM4v5gIgdg + here->BSIM4v5gIgcdg; gIdtotd = here->BSIM4v5gIgdd + here->BSIM4v5gIgcdd; gIdtots = here->BSIM4v5gIgcds; gIdtotb = here->BSIM4v5gIgcdb; } else { gIstotg = gIstotd = gIstots = gIstotb = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = 0.0; } if (model->BSIM4v5igbMod) { gIbtotg = here->BSIM4v5gIgbg; gIbtotd = here->BSIM4v5gIgbd; gIbtots = here->BSIM4v5gIgbs; gIbtotb = here->BSIM4v5gIgbb; } else gIbtotg = gIbtotd = gIbtots = gIbtotb = 0.0; if ((model->BSIM4v5igcMod != 0) || (model->BSIM4v5igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = 0.0; if (here->BSIM4v5rgateMod == 2) T0 = *(ckt->CKTstates[0] + here->BSIM4v5vges) - *(ckt->CKTstates[0] + here->BSIM4v5vgs); else if (here->BSIM4v5rgateMod == 3) T0 = *(ckt->CKTstates[0] + here->BSIM4v5vgms) - *(ckt->CKTstates[0] + here->BSIM4v5vgs); if (here->BSIM4v5rgateMod > 1) { gcrgd = here->BSIM4v5gcrgd * T0; gcrgg = here->BSIM4v5gcrgg * T0; gcrgs = here->BSIM4v5gcrgs * T0; gcrgb = here->BSIM4v5gcrgb * T0; gcrgg -= here->BSIM4v5gcrg; gcrg = here->BSIM4v5gcrg; } else gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; if (here->BSIM4v5acnqsMod == 0) { if (here->BSIM4v5rgateMod == 3) { xcgmgmb = cgdo + cgso + pParam->BSIM4v5cgbo; xcgmdb = -cgdo; xcgmsb = -cgso; xcgmbb = -pParam->BSIM4v5cgbo; xcdgmb = xcgmdb; xcsgmb = xcgmsb; xcbgmb = xcgmbb; xcggb = here->BSIM4v5cggb; xcgdb = here->BSIM4v5cgdb; xcgsb = here->BSIM4v5cgsb; xcgbb = -(xcggb + xcgdb + xcgsb); xcdgb = here->BSIM4v5cdgb; xcsgb = -(here->BSIM4v5cggb + here->BSIM4v5cbgb + here->BSIM4v5cdgb); xcbgb = here->BSIM4v5cbgb; } else { xcggb = here->BSIM4v5cggb + cgdo + cgso + pParam->BSIM4v5cgbo; xcgdb = here->BSIM4v5cgdb - cgdo; xcgsb = here->BSIM4v5cgsb - cgso; xcgbb = -(xcggb + xcgdb + xcgsb); xcdgb = here->BSIM4v5cdgb - cgdo; xcsgb = -(here->BSIM4v5cggb + here->BSIM4v5cbgb + here->BSIM4v5cdgb + cgso); xcbgb = here->BSIM4v5cbgb - pParam->BSIM4v5cgbo; xcdgmb = xcsgmb = xcbgmb = 0.0; } xcddb = here->BSIM4v5cddb + here->BSIM4v5capbd + cgdo; xcdsb = here->BSIM4v5cdsb; xcsdb = -(here->BSIM4v5cgdb + here->BSIM4v5cbdb + here->BSIM4v5cddb); xcssb = here->BSIM4v5capbs + cgso - (here->BSIM4v5cgsb + here->BSIM4v5cbsb + here->BSIM4v5cdsb); if (!here->BSIM4v5rbodyMod) { xcdbb = -(xcdgb + xcddb + xcdsb + xcdgmb); xcsbb = -(xcsgb + xcsdb + xcssb + xcsgmb); xcbdb = here->BSIM4v5cbdb - here->BSIM4v5capbd; xcbsb = here->BSIM4v5cbsb - here->BSIM4v5capbs; xcdbdb = 0.0; } else { xcdbb = -(here->BSIM4v5cddb + here->BSIM4v5cdgb + here->BSIM4v5cdsb); xcsbb = -(xcsgb + xcsdb + xcssb + xcsgmb) + here->BSIM4v5capbs; xcbdb = here->BSIM4v5cbdb; xcbsb = here->BSIM4v5cbsb; xcdbdb = -here->BSIM4v5capbd; xcsbsb = -here->BSIM4v5capbs; } xcbbb = -(xcbdb + xcbgb + xcbsb + xcbgmb); xgtg = xgtd = xgts = xgtb = 0.0; sxpart = 0.6; dxpart = 0.4; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { xcggb = xcgdb = xcgsb = xcgbb = 0.0; xcbgb = xcbdb = xcbsb = xcbbb = 0.0; xcdgb = xcddb = xcdsb = xcdbb = 0.0; xcsgb = xcsdb = xcssb = xcsbb = 0.0; xgtg = here->BSIM4v5gtg; xgtd = here->BSIM4v5gtd; xgts = here->BSIM4v5gts; xgtb = here->BSIM4v5gtb; xcqgb = here->BSIM4v5cqgb; xcqdb = here->BSIM4v5cqdb; xcqsb = here->BSIM4v5cqsb; xcqbb = here->BSIM4v5cqbb; CoxWL = model->BSIM4v5coxe * here->pParam->BSIM4v5weffCV * here->BSIM4v5nf * here->pParam->BSIM4v5leffCV; qcheq = -(here->BSIM4v5qgate + here->BSIM4v5qbulk); if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM4v5xpart < 0.5) { dxpart = 0.4; } else if (model->BSIM4v5xpart > 0.5) { dxpart = 0.0; } else { dxpart = 0.5; } ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; } else { dxpart = here->BSIM4v5qdrn / qcheq; Cdd = here->BSIM4v5cddb; Csd = -(here->BSIM4v5cgdb + here->BSIM4v5cddb + here->BSIM4v5cbdb); ddxpart_dVd = (Cdd - dxpart * (Cdd + Csd)) / qcheq; Cdg = here->BSIM4v5cdgb; Csg = -(here->BSIM4v5cggb + here->BSIM4v5cdgb + here->BSIM4v5cbgb); ddxpart_dVg = (Cdg - dxpart * (Cdg + Csg)) / qcheq; Cds = here->BSIM4v5cdsb; Css = -(here->BSIM4v5cgsb + here->BSIM4v5cdsb + here->BSIM4v5cbsb); ddxpart_dVs = (Cds - dxpart * (Cds + Css)) / qcheq; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); } sxpart = 1.0 - dxpart; dsxpart_dVd = -ddxpart_dVd; dsxpart_dVg = -ddxpart_dVg; dsxpart_dVs = -ddxpart_dVs; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); } } else { Gm = -here->BSIM4v5gm; Gmbs = -here->BSIM4v5gmbs; FwdSum = 0.0; RevSum = -(Gm + Gmbs); gbbsp = -(here->BSIM4v5gbds); gbbdp = here->BSIM4v5gbds + here->BSIM4v5gbgs + here->BSIM4v5gbbs; gbdpg = 0.0; gbdpsp = 0.0; gbdpb = 0.0; gbdpdp = 0.0; gbspg = here->BSIM4v5gbgs; gbspsp = here->BSIM4v5gbds; gbspb = here->BSIM4v5gbbs; gbspdp = -(gbspg + gbspsp + gbspb); if (model->BSIM4v5igcMod) { gIstotg = here->BSIM4v5gIgsg + here->BSIM4v5gIgcdg; gIstotd = here->BSIM4v5gIgcds; gIstots = here->BSIM4v5gIgss + here->BSIM4v5gIgcdd; gIstotb = here->BSIM4v5gIgcdb; gIdtotg = here->BSIM4v5gIgdg + here->BSIM4v5gIgcsg; gIdtotd = here->BSIM4v5gIgdd + here->BSIM4v5gIgcss; gIdtots = here->BSIM4v5gIgcsd; gIdtotb = here->BSIM4v5gIgcsb; } else { gIstotg = gIstotd = gIstots = gIstotb = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = 0.0; } if (model->BSIM4v5igbMod) { gIbtotg = here->BSIM4v5gIgbg; gIbtotd = here->BSIM4v5gIgbs; gIbtots = here->BSIM4v5gIgbd; gIbtotb = here->BSIM4v5gIgbb; } else gIbtotg = gIbtotd = gIbtots = gIbtotb = 0.0; if ((model->BSIM4v5igcMod != 0) || (model->BSIM4v5igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = 0.0; if (here->BSIM4v5rgateMod == 2) T0 = *(ckt->CKTstates[0] + here->BSIM4v5vges) - *(ckt->CKTstates[0] + here->BSIM4v5vgs); else if (here->BSIM4v5rgateMod == 3) T0 = *(ckt->CKTstates[0] + here->BSIM4v5vgms) - *(ckt->CKTstates[0] + here->BSIM4v5vgs); if (here->BSIM4v5rgateMod > 1) { gcrgd = here->BSIM4v5gcrgs * T0; gcrgg = here->BSIM4v5gcrgg * T0; gcrgs = here->BSIM4v5gcrgd * T0; gcrgb = here->BSIM4v5gcrgb * T0; gcrgg -= here->BSIM4v5gcrg; gcrg = here->BSIM4v5gcrg; } else gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; if (here->BSIM4v5acnqsMod == 0) { if (here->BSIM4v5rgateMod == 3) { xcgmgmb = cgdo + cgso + pParam->BSIM4v5cgbo; xcgmdb = -cgdo; xcgmsb = -cgso; xcgmbb = -pParam->BSIM4v5cgbo; xcdgmb = xcgmdb; xcsgmb = xcgmsb; xcbgmb = xcgmbb; xcggb = here->BSIM4v5cggb; xcgdb = here->BSIM4v5cgsb; xcgsb = here->BSIM4v5cgdb; xcgbb = -(xcggb + xcgdb + xcgsb); xcdgb = -(here->BSIM4v5cggb + here->BSIM4v5cbgb + here->BSIM4v5cdgb); xcsgb = here->BSIM4v5cdgb; xcbgb = here->BSIM4v5cbgb; } else { xcggb = here->BSIM4v5cggb + cgdo + cgso + pParam->BSIM4v5cgbo; xcgdb = here->BSIM4v5cgsb - cgdo; xcgsb = here->BSIM4v5cgdb - cgso; xcgbb = -(xcggb + xcgdb + xcgsb); xcdgb = -(here->BSIM4v5cggb + here->BSIM4v5cbgb + here->BSIM4v5cdgb + cgdo); xcsgb = here->BSIM4v5cdgb - cgso; xcbgb = here->BSIM4v5cbgb - pParam->BSIM4v5cgbo; xcdgmb = xcsgmb = xcbgmb = 0.0; } xcddb = here->BSIM4v5capbd + cgdo - (here->BSIM4v5cgsb + here->BSIM4v5cbsb + here->BSIM4v5cdsb); xcdsb = -(here->BSIM4v5cgdb + here->BSIM4v5cbdb + here->BSIM4v5cddb); xcsdb = here->BSIM4v5cdsb; xcssb = here->BSIM4v5cddb + here->BSIM4v5capbs + cgso; if (!here->BSIM4v5rbodyMod) { xcdbb = -(xcdgb + xcddb + xcdsb + xcdgmb); xcsbb = -(xcsgb + xcsdb + xcssb + xcsgmb); xcbdb = here->BSIM4v5cbsb - here->BSIM4v5capbd; xcbsb = here->BSIM4v5cbdb - here->BSIM4v5capbs; xcdbdb = 0.0; } else { xcdbb = -(xcdgb + xcddb + xcdsb + xcdgmb) + here->BSIM4v5capbd; xcsbb = -(here->BSIM4v5cddb + here->BSIM4v5cdgb + here->BSIM4v5cdsb); xcbdb = here->BSIM4v5cbsb; xcbsb = here->BSIM4v5cbdb; xcdbdb = -here->BSIM4v5capbd; xcsbsb = -here->BSIM4v5capbs; } xcbbb = -(xcbgb + xcbdb + xcbsb + xcbgmb); xgtg = xgtd = xgts = xgtb = 0.0; sxpart = 0.4; dxpart = 0.6; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { xcggb = xcgdb = xcgsb = xcgbb = 0.0; xcbgb = xcbdb = xcbsb = xcbbb = 0.0; xcdgb = xcddb = xcdsb = xcdbb = 0.0; xcsgb = xcsdb = xcssb = xcsbb = 0.0; xgtg = here->BSIM4v5gtg; xgtd = here->BSIM4v5gts; xgts = here->BSIM4v5gtd; xgtb = here->BSIM4v5gtb; xcqgb = here->BSIM4v5cqgb; xcqdb = here->BSIM4v5cqsb; xcqsb = here->BSIM4v5cqdb; xcqbb = here->BSIM4v5cqbb; CoxWL = model->BSIM4v5coxe * here->pParam->BSIM4v5weffCV * here->BSIM4v5nf * here->pParam->BSIM4v5leffCV; qcheq = -(here->BSIM4v5qgate + here->BSIM4v5qbulk); if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM4v5xpart < 0.5) { sxpart = 0.4; } else if (model->BSIM4v5xpart > 0.5) { sxpart = 0.0; } else { sxpart = 0.5; } dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { sxpart = here->BSIM4v5qdrn / qcheq; Css = here->BSIM4v5cddb; Cds = -(here->BSIM4v5cgdb + here->BSIM4v5cddb + here->BSIM4v5cbdb); dsxpart_dVs = (Css - sxpart * (Css + Cds)) / qcheq; Csg = here->BSIM4v5cdgb; Cdg = -(here->BSIM4v5cggb + here->BSIM4v5cdgb + here->BSIM4v5cbgb); dsxpart_dVg = (Csg - sxpart * (Csg + Cdg)) / qcheq; Csd = here->BSIM4v5cdsb; Cdd = -(here->BSIM4v5cgsb + here->BSIM4v5cdsb + here->BSIM4v5cbsb); dsxpart_dVd = (Csd - sxpart * (Csd + Cdd)) / qcheq; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); } dxpart = 1.0 - sxpart; ddxpart_dVd = -dsxpart_dVd; ddxpart_dVg = -dsxpart_dVg; ddxpart_dVs = -dsxpart_dVs; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); } } if (model->BSIM4v5rdsMod == 1) { gstot = here->BSIM4v5gstot; gstotd = here->BSIM4v5gstotd; gstotg = here->BSIM4v5gstotg; gstots = here->BSIM4v5gstots - gstot; gstotb = here->BSIM4v5gstotb; gdtot = here->BSIM4v5gdtot; gdtotd = here->BSIM4v5gdtotd - gdtot; gdtotg = here->BSIM4v5gdtotg; gdtots = here->BSIM4v5gdtots; gdtotb = here->BSIM4v5gdtotb; } else { gstot = gstotd = gstotg = gstots = gstotb = 0.0; gdtot = gdtotd = gdtotg = gdtots = gdtotb = 0.0; } T1 = *(ckt->CKTstate0 + here->BSIM4v5qdef) * here->BSIM4v5gtau; gds = here->BSIM4v5gds; /* * Loading PZ matrix */ m = here->BSIM4v5m; if (!model->BSIM4v5rdsMod) { gdpr = here->BSIM4v5drainConductance; gspr = here->BSIM4v5sourceConductance; } else gdpr = gspr = 0.0; if (!here->BSIM4v5rbodyMod) { gjbd = here->BSIM4v5gbd; gjbs = here->BSIM4v5gbs; } else gjbd = gjbs = 0.0; geltd = here->BSIM4v5grgeltd; if (here->BSIM4v5rgateMod == 1) { *(here->BSIM4v5GEgePtr) += m * geltd; *(here->BSIM4v5GPgePtr) -= m * geltd; *(here->BSIM4v5GEgpPtr) -= m * geltd; *(here->BSIM4v5GPgpPtr ) += m * xcggb * s->real; *(here->BSIM4v5GPgpPtr +1) += m * xcggb * s->imag; *(here->BSIM4v5GPgpPtr) += m * (geltd - xgtg + gIgtotg); *(here->BSIM4v5GPdpPtr ) += m * xcgdb * s->real; *(here->BSIM4v5GPdpPtr +1) += m * xcgdb * s->imag; *(here->BSIM4v5GPdpPtr) -= m * (xgtd - gIgtotd); *(here->BSIM4v5GPspPtr ) += m * xcgsb * s->real; *(here->BSIM4v5GPspPtr +1) += m * xcgsb * s->imag; *(here->BSIM4v5GPspPtr) -= m * (xgts - gIgtots); *(here->BSIM4v5GPbpPtr ) += m * xcgbb * s->real; *(here->BSIM4v5GPbpPtr +1) += m * xcgbb * s->imag; *(here->BSIM4v5GPbpPtr) -= m * (xgtb - gIgtotb); } else if (here->BSIM4v5rgateMod == 2) { *(here->BSIM4v5GEgePtr) += m * gcrg; *(here->BSIM4v5GEgpPtr) += m * gcrgg; *(here->BSIM4v5GEdpPtr) += m * gcrgd; *(here->BSIM4v5GEspPtr) += m * gcrgs; *(here->BSIM4v5GEbpPtr) += m * gcrgb; *(here->BSIM4v5GPgePtr) -= m * gcrg; *(here->BSIM4v5GPgpPtr ) += m * xcggb * s->real; *(here->BSIM4v5GPgpPtr +1) += m * xcggb * s->imag; *(here->BSIM4v5GPgpPtr) -= m * (gcrgg + xgtg - gIgtotg); *(here->BSIM4v5GPdpPtr ) += m * xcgdb * s->real; *(here->BSIM4v5GPdpPtr +1) += m * xcgdb * s->imag; *(here->BSIM4v5GPdpPtr) -= m * (gcrgd + xgtd - gIgtotd); *(here->BSIM4v5GPspPtr ) += m * xcgsb * s->real; *(here->BSIM4v5GPspPtr +1) += m * xcgsb * s->imag; *(here->BSIM4v5GPspPtr) -= m * (gcrgs + xgts - gIgtots); *(here->BSIM4v5GPbpPtr ) += m * xcgbb * s->real; *(here->BSIM4v5GPbpPtr +1) += m * xcgbb * s->imag; *(here->BSIM4v5GPbpPtr) -= m * (gcrgb + xgtb - gIgtotb); } else if (here->BSIM4v5rgateMod == 3) { *(here->BSIM4v5GEgePtr) += m * geltd; *(here->BSIM4v5GEgmPtr) -= m * geltd; *(here->BSIM4v5GMgePtr) -= m * geltd; *(here->BSIM4v5GMgmPtr) += m * (geltd + gcrg); *(here->BSIM4v5GMgmPtr ) += m * xcgmgmb * s->real; *(here->BSIM4v5GMgmPtr +1) += m * xcgmgmb * s->imag; *(here->BSIM4v5GMdpPtr) += m * gcrgd; *(here->BSIM4v5GMdpPtr ) += m * xcgmdb * s->real; *(here->BSIM4v5GMdpPtr +1) += m * xcgmdb * s->imag; *(here->BSIM4v5GMgpPtr) += m * gcrgg; *(here->BSIM4v5GMspPtr) += m * gcrgs; *(here->BSIM4v5GMspPtr ) += m * xcgmsb * s->real; *(here->BSIM4v5GMspPtr +1) += m * xcgmsb * s->imag; *(here->BSIM4v5GMbpPtr) += m * gcrgb; *(here->BSIM4v5GMbpPtr ) += m * xcgmbb * s->real; *(here->BSIM4v5GMbpPtr +1) += m * xcgmbb * s->imag; *(here->BSIM4v5DPgmPtr ) += m * xcdgmb * s->real; *(here->BSIM4v5DPgmPtr +1) += m * xcdgmb * s->imag; *(here->BSIM4v5GPgmPtr) -= m * gcrg; *(here->BSIM4v5SPgmPtr ) += m * xcsgmb * s->real; *(here->BSIM4v5SPgmPtr +1) += m * xcsgmb * s->imag; *(here->BSIM4v5BPgmPtr ) += m * xcbgmb * s->real; *(here->BSIM4v5BPgmPtr +1) += m * xcbgmb * s->imag; *(here->BSIM4v5GPgpPtr) -= m * (gcrgg + xgtg - gIgtotg); *(here->BSIM4v5GPgpPtr ) += m * xcggb * s->real; *(here->BSIM4v5GPgpPtr +1) += m * xcggb * s->imag; *(here->BSIM4v5GPdpPtr) -= m * (gcrgd + xgtd - gIgtotd); *(here->BSIM4v5GPdpPtr ) += m * xcgdb * s->real; *(here->BSIM4v5GPdpPtr +1) += m * xcgdb * s->imag; *(here->BSIM4v5GPspPtr) -= m * (gcrgs + xgts - gIgtots); *(here->BSIM4v5GPspPtr ) += m * xcgsb * s->real; *(here->BSIM4v5GPspPtr +1) += m * xcgsb * s->imag; *(here->BSIM4v5GPbpPtr) -= m * (gcrgb + xgtb - gIgtotb); *(here->BSIM4v5GPbpPtr ) += m * xcgbb * s->real; *(here->BSIM4v5GPbpPtr +1) += m * xcgbb * s->imag; } else { *(here->BSIM4v5GPdpPtr ) += m * xcgdb * s->real; *(here->BSIM4v5GPdpPtr +1) += m * xcgdb * s->imag; *(here->BSIM4v5GPdpPtr) -= m * (xgtd - gIgtotd); *(here->BSIM4v5GPgpPtr ) += m * xcggb * s->real; *(here->BSIM4v5GPgpPtr +1) += m * xcggb * s->imag; *(here->BSIM4v5GPgpPtr) -= m * (xgtg - gIgtotg); *(here->BSIM4v5GPspPtr ) += m * xcgsb * s->real; *(here->BSIM4v5GPspPtr +1) += m * xcgsb * s->imag; *(here->BSIM4v5GPspPtr) -= m * (xgts - gIgtots); *(here->BSIM4v5GPbpPtr ) += m * xcgbb * s->real; *(here->BSIM4v5GPbpPtr +1) += m * xcgbb * s->imag; *(here->BSIM4v5GPbpPtr) -= m * (xgtb - gIgtotb); } if (model->BSIM4v5rdsMod) { (*(here->BSIM4v5DgpPtr) += m * gdtotg); (*(here->BSIM4v5DspPtr) += m * gdtots); (*(here->BSIM4v5DbpPtr) += m * gdtotb); (*(here->BSIM4v5SdpPtr) += m * gstotd); (*(here->BSIM4v5SgpPtr) += m * gstotg); (*(here->BSIM4v5SbpPtr) += m * gstotb); } *(here->BSIM4v5DPdpPtr ) += m * xcddb * s->real; *(here->BSIM4v5DPdpPtr +1) += m * xcddb * s->imag; *(here->BSIM4v5DPdpPtr) += m * (gdpr + gds + here->BSIM4v5gbd - gdtotd + RevSum + gbdpdp - gIdtotd + dxpart * xgtd + T1 * ddxpart_dVd); *(here->BSIM4v5DPdPtr) -= m * (gdpr + gdtot); *(here->BSIM4v5DPgpPtr ) += m * xcdgb * s->real; *(here->BSIM4v5DPgpPtr +1) += m * xcdgb * s->imag; *(here->BSIM4v5DPgpPtr) += m * (Gm - gdtotg + gbdpg - gIdtotg + T1 * ddxpart_dVg + dxpart * xgtg); *(here->BSIM4v5DPspPtr ) += m * xcdsb * s->real; *(here->BSIM4v5DPspPtr +1) += m * xcdsb * s->imag; *(here->BSIM4v5DPspPtr) -= m * (gds + FwdSum + gdtots - gbdpsp + gIdtots - T1 * ddxpart_dVs - dxpart * xgts); *(here->BSIM4v5DPbpPtr ) += m * xcdbb * s->real; *(here->BSIM4v5DPbpPtr +1) += m * xcdbb * s->imag; *(here->BSIM4v5DPbpPtr) -= m * (gjbd + gdtotb - Gmbs - gbdpb + gIdtotb - T1 * ddxpart_dVb - dxpart * xgtb); *(here->BSIM4v5DdpPtr) -= m * (gdpr - gdtotd); *(here->BSIM4v5DdPtr) += m * (gdpr + gdtot); *(here->BSIM4v5SPdpPtr ) += m * xcsdb * s->real; *(here->BSIM4v5SPdpPtr +1) += m * xcsdb * s->imag; *(here->BSIM4v5SPdpPtr) -= m * (gds + gstotd + RevSum - gbspdp + gIstotd - T1 * dsxpart_dVd - sxpart * xgtd); *(here->BSIM4v5SPgpPtr ) += m * xcsgb * s->real; *(here->BSIM4v5SPgpPtr +1) += m * xcsgb * s->imag; *(here->BSIM4v5SPgpPtr) -= m * (Gm + gstotg - gbspg + gIstotg - T1 * dsxpart_dVg - sxpart * xgtg); *(here->BSIM4v5SPspPtr ) += m * xcssb * s->real; *(here->BSIM4v5SPspPtr +1) += m * xcssb * s->imag; *(here->BSIM4v5SPspPtr) += m * (gspr + gds + here->BSIM4v5gbs - gIstots - gstots + FwdSum + gbspsp + sxpart * xgts + T1 * dsxpart_dVs); *(here->BSIM4v5SPsPtr) -= m * (gspr + gstot); *(here->BSIM4v5SPbpPtr ) += m * xcsbb * s->real; *(here->BSIM4v5SPbpPtr +1) += m * xcsbb * s->imag; *(here->BSIM4v5SPbpPtr) -= m * (gjbs + gstotb + Gmbs - gbspb + gIstotb - T1 * dsxpart_dVb - sxpart * xgtb); *(here->BSIM4v5SspPtr) -= m * (gspr - gstots); *(here->BSIM4v5SsPtr) += m * (gspr + gstot); *(here->BSIM4v5BPdpPtr ) += m * xcbdb * s->real; *(here->BSIM4v5BPdpPtr +1) += m * xcbdb * s->imag; *(here->BSIM4v5BPdpPtr) -= m * (gjbd - gbbdp + gIbtotd); *(here->BSIM4v5BPgpPtr ) += m * xcbgb * s->real; *(here->BSIM4v5BPgpPtr +1) += m * xcbgb * s->imag; *(here->BSIM4v5BPgpPtr) -= m * (here->BSIM4v5gbgs + gIbtotg); *(here->BSIM4v5BPspPtr ) += m * xcbsb * s->real; *(here->BSIM4v5BPspPtr +1) += m * xcbsb * s->imag; *(here->BSIM4v5BPspPtr) -= m * (gjbs - gbbsp + gIbtots); *(here->BSIM4v5BPbpPtr ) += m * xcbbb * s->real; *(here->BSIM4v5BPbpPtr +1) += m * xcbbb * s->imag; *(here->BSIM4v5BPbpPtr) += m * (gjbd + gjbs - here->BSIM4v5gbbs - gIbtotb); ggidld = here->BSIM4v5ggidld; ggidlg = here->BSIM4v5ggidlg; ggidlb = here->BSIM4v5ggidlb; ggislg = here->BSIM4v5ggislg; ggisls = here->BSIM4v5ggisls; ggislb = here->BSIM4v5ggislb; /* stamp gidl */ (*(here->BSIM4v5DPdpPtr) += m * ggidld); (*(here->BSIM4v5DPgpPtr) += m * ggidlg); (*(here->BSIM4v5DPspPtr) -= m * ((ggidlg + ggidld) + ggidlb)); (*(here->BSIM4v5DPbpPtr) += m * ggidlb); (*(here->BSIM4v5BPdpPtr) -= m * ggidld); (*(here->BSIM4v5BPgpPtr) -= m * ggidlg); (*(here->BSIM4v5BPspPtr) += m * ((ggidlg + ggidld) + ggidlb)); (*(here->BSIM4v5BPbpPtr) -= m * ggidlb); /* stamp gisl */ (*(here->BSIM4v5SPdpPtr) -= m * ((ggisls + ggislg) + ggislb)); (*(here->BSIM4v5SPgpPtr) += m * ggislg); (*(here->BSIM4v5SPspPtr) += m * ggisls); (*(here->BSIM4v5SPbpPtr) += m * ggislb); (*(here->BSIM4v5BPdpPtr) += m * ((ggislg + ggisls) + ggislb)); (*(here->BSIM4v5BPgpPtr) -= m * ggislg); (*(here->BSIM4v5BPspPtr) -= m * ggisls); (*(here->BSIM4v5BPbpPtr) -= m * ggislb); if (here->BSIM4v5rbodyMod) { (*(here->BSIM4v5DPdbPtr ) += m * xcdbdb * s->real); (*(here->BSIM4v5DPdbPtr +1) += m * xcdbdb * s->imag); (*(here->BSIM4v5DPdbPtr) -= m * here->BSIM4v5gbd); (*(here->BSIM4v5SPsbPtr ) += m * xcsbsb * s->real); (*(here->BSIM4v5SPsbPtr +1) += m * xcsbsb * s->imag); (*(here->BSIM4v5SPsbPtr) -= m * here->BSIM4v5gbs); (*(here->BSIM4v5DBdpPtr ) += m * xcdbdb * s->real); (*(here->BSIM4v5DBdpPtr +1) += m * xcdbdb * s->imag); (*(here->BSIM4v5DBdpPtr) -= m * here->BSIM4v5gbd); (*(here->BSIM4v5DBdbPtr ) -= m * xcdbdb * s->real); (*(here->BSIM4v5DBdbPtr +1) -= m * xcdbdb * s->imag); (*(here->BSIM4v5DBdbPtr) += m * (here->BSIM4v5gbd + here->BSIM4v5grbpd + here->BSIM4v5grbdb)); (*(here->BSIM4v5DBbpPtr) -= m * here->BSIM4v5grbpd); (*(here->BSIM4v5DBbPtr) -= m * here->BSIM4v5grbdb); (*(here->BSIM4v5BPdbPtr) -= m * here->BSIM4v5grbpd); (*(here->BSIM4v5BPbPtr) -= m * here->BSIM4v5grbpb); (*(here->BSIM4v5BPsbPtr) -= m * here->BSIM4v5grbps); (*(here->BSIM4v5BPbpPtr) += m * (here->BSIM4v5grbpd + here->BSIM4v5grbps + here->BSIM4v5grbpb)); /* WDL: (-here->BSIM4v5gbbs) already added to BPbpPtr */ (*(here->BSIM4v5SBspPtr ) += m * xcsbsb * s->real); (*(here->BSIM4v5SBspPtr +1) += m * xcsbsb * s->imag); (*(here->BSIM4v5SBspPtr) -= m * here->BSIM4v5gbs); (*(here->BSIM4v5SBbpPtr) -= m * here->BSIM4v5grbps); (*(here->BSIM4v5SBbPtr) -= m * here->BSIM4v5grbsb); (*(here->BSIM4v5SBsbPtr ) -= m * xcsbsb * s->real); (*(here->BSIM4v5SBsbPtr +1) -= m * xcsbsb * s->imag); (*(here->BSIM4v5SBsbPtr) += m * (here->BSIM4v5gbs + here->BSIM4v5grbps + here->BSIM4v5grbsb)); (*(here->BSIM4v5BdbPtr) -= m * here->BSIM4v5grbdb); (*(here->BSIM4v5BbpPtr) -= m * here->BSIM4v5grbpb); (*(here->BSIM4v5BsbPtr) -= m * here->BSIM4v5grbsb); (*(here->BSIM4v5BbPtr) += m * (here->BSIM4v5grbsb + here->BSIM4v5grbdb + here->BSIM4v5grbpb)); } if (here->BSIM4v5acnqsMod) { *(here->BSIM4v5QqPtr ) += m * s->real * ScalingFactor; *(here->BSIM4v5QqPtr +1) += m * s->imag * ScalingFactor; *(here->BSIM4v5QgpPtr ) -= m * xcqgb * s->real; *(here->BSIM4v5QgpPtr +1) -= m * xcqgb * s->imag; *(here->BSIM4v5QdpPtr ) -= m * xcqdb * s->real; *(here->BSIM4v5QdpPtr +1) -= m * xcqdb * s->imag; *(here->BSIM4v5QbpPtr ) -= m * xcqbb * s->real; *(here->BSIM4v5QbpPtr +1) -= m * xcqbb * s->imag; *(here->BSIM4v5QspPtr ) -= m * xcqsb * s->real; *(here->BSIM4v5QspPtr +1) -= m * xcqsb * s->imag; *(here->BSIM4v5GPqPtr) -= m * here->BSIM4v5gtau; *(here->BSIM4v5DPqPtr) += m * dxpart * here->BSIM4v5gtau; *(here->BSIM4v5SPqPtr) += m * sxpart * here->BSIM4v5gtau; *(here->BSIM4v5QqPtr) += m * here->BSIM4v5gtau; *(here->BSIM4v5QgpPtr) += m * xgtg; *(here->BSIM4v5QdpPtr) += m * xgtd; *(here->BSIM4v5QbpPtr) += m * xgtb; *(here->BSIM4v5QspPtr) += m * xgts; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v5/b4v5acld.c0000644000175000017500000007060413546075722022233 0ustar carstencarsten/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ /********** * Copyright 2005 Regents of the University of California. All rights reserved. * File: b4acld.c of BSIM4.5.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 10/05/2001. **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4v5def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4v5acLoad( GENmodel *inModel, CKTcircuit *ckt) { BSIM4v5model *model = (BSIM4v5model*)inModel; BSIM4v5instance *here; double gjbd, gjbs, geltd, gcrg, gcrgg, gcrgd, gcrgs, gcrgb; double xcbgb, xcbdb, xcbsb, xcbbb; double xcggbr, xcgdbr, xcgsbr, xcgbbr, xcggbi, xcgdbi, xcgsbi, xcgbbi; double Cggr, Cgdr, Cgsr, Cgbr, Cggi, Cgdi, Cgsi, Cgbi; double xcddbr, xcdgbr, xcdsbr, xcdbbr, xcsdbr, xcsgbr, xcssbr, xcsbbr; double xcddbi, xcdgbi, xcdsbi, xcdbbi, xcsdbi, xcsgbi, xcssbi, xcsbbi; double xcdbdb, xcsbsb=0.0, xcgmgmb=0.0, xcgmdb=0.0, xcgmsb=0.0, xcdgmb, xcsgmb; double xcgmbb=0.0, xcbgmb; double capbd, capbs, omega; double gstot, gstotd, gstotg, gstots, gstotb, gspr; double gdtot, gdtotd, gdtotg, gdtots, gdtotb, gdpr; double gIstotg, gIstotd, gIstots, gIstotb; double gIdtotg, gIdtotd, gIdtots, gIdtotb; double gIbtotg, gIbtotd, gIbtots, gIbtotb; double gIgtotg, gIgtotd, gIgtots, gIgtotb; double cgso, cgdo, cgbo; double gbspsp, gbbdp, gbbsp, gbspg, gbspb; double gbspdp, gbdpdp, gbdpg, gbdpb, gbdpsp; double T0=0.0, T1, T2, T3; double Csg, Csd, Css; double Cdgr, Cddr, Cdsr, Cdbr, Csgr, Csdr, Cssr, Csbr; double Cdgi, Cddi, Cdsi, Cdbi, Csgi, Csdi, Cssi, Csbi; double gmr, gmi, gmbsr, gmbsi, gdsr, gdsi; double FwdSumr, RevSumr, Gmr, Gmbsr; double FwdSumi, RevSumi, Gmi, Gmbsi; struct bsim4v5SizeDependParam *pParam; double ggidld, ggidlg, ggidlb, ggislg, ggislb, ggisls; double m; omega = ckt->CKTomega; for (; model != NULL; model = BSIM4v5nextModel(model)) { for (here = BSIM4v5instances(model); here!= NULL; here = BSIM4v5nextInstance(here)) { pParam = here->pParam; capbd = here->BSIM4v5capbd; capbs = here->BSIM4v5capbs; cgso = here->BSIM4v5cgso; cgdo = here->BSIM4v5cgdo; cgbo = pParam->BSIM4v5cgbo; Csd = -(here->BSIM4v5cddb + here->BSIM4v5cgdb + here->BSIM4v5cbdb); Csg = -(here->BSIM4v5cdgb + here->BSIM4v5cggb + here->BSIM4v5cbgb); Css = -(here->BSIM4v5cdsb + here->BSIM4v5cgsb + here->BSIM4v5cbsb); if (here->BSIM4v5acnqsMod) { T0 = omega * here->BSIM4v5taunet; T1 = T0 * T0; T2 = 1.0 / (1.0 + T1); T3 = T0 * T2; gmr = here->BSIM4v5gm * T2; gmbsr = here->BSIM4v5gmbs * T2; gdsr = here->BSIM4v5gds * T2; gmi = -here->BSIM4v5gm * T3; gmbsi = -here->BSIM4v5gmbs * T3; gdsi = -here->BSIM4v5gds * T3; Cddr = here->BSIM4v5cddb * T2; Cdgr = here->BSIM4v5cdgb * T2; Cdsr = here->BSIM4v5cdsb * T2; Cdbr = -(Cddr + Cdgr + Cdsr); /* WDLiu: Cxyi mulitplied by jomega below, and actually to be of conductance */ Cddi = here->BSIM4v5cddb * T3 * omega; Cdgi = here->BSIM4v5cdgb * T3 * omega; Cdsi = here->BSIM4v5cdsb * T3 * omega; Cdbi = -(Cddi + Cdgi + Cdsi); Csdr = Csd * T2; Csgr = Csg * T2; Cssr = Css * T2; Csbr = -(Csdr + Csgr + Cssr); Csdi = Csd * T3 * omega; Csgi = Csg * T3 * omega; Cssi = Css * T3 * omega; Csbi = -(Csdi + Csgi + Cssi); Cgdr = -(Cddr + Csdr + here->BSIM4v5cbdb); Cggr = -(Cdgr + Csgr + here->BSIM4v5cbgb); Cgsr = -(Cdsr + Cssr + here->BSIM4v5cbsb); Cgbr = -(Cgdr + Cggr + Cgsr); Cgdi = -(Cddi + Csdi); Cggi = -(Cdgi + Csgi); Cgsi = -(Cdsi + Cssi); Cgbi = -(Cgdi + Cggi + Cgsi); } else /* QS */ { gmr = here->BSIM4v5gm; gmbsr = here->BSIM4v5gmbs; gdsr = here->BSIM4v5gds; gmi = gmbsi = gdsi = 0.0; Cddr = here->BSIM4v5cddb; Cdgr = here->BSIM4v5cdgb; Cdsr = here->BSIM4v5cdsb; Cdbr = -(Cddr + Cdgr + Cdsr); Cddi = Cdgi = Cdsi = Cdbi = 0.0; Csdr = Csd; Csgr = Csg; Cssr = Css; Csbr = -(Csdr + Csgr + Cssr); Csdi = Csgi = Cssi = Csbi = 0.0; Cgdr = here->BSIM4v5cgdb; Cggr = here->BSIM4v5cggb; Cgsr = here->BSIM4v5cgsb; Cgbr = -(Cgdr + Cggr + Cgsr); Cgdi = Cggi = Cgsi = Cgbi = 0.0; } if (here->BSIM4v5mode >= 0) { Gmr = gmr; Gmbsr = gmbsr; FwdSumr = Gmr + Gmbsr; RevSumr = 0.0; Gmi = gmi; Gmbsi = gmbsi; FwdSumi = Gmi + Gmbsi; RevSumi = 0.0; gbbdp = -(here->BSIM4v5gbds); gbbsp = here->BSIM4v5gbds + here->BSIM4v5gbgs + here->BSIM4v5gbbs; gbdpg = here->BSIM4v5gbgs; gbdpdp = here->BSIM4v5gbds; gbdpb = here->BSIM4v5gbbs; gbdpsp = -(gbdpg + gbdpdp + gbdpb); gbspdp = 0.0; gbspg = 0.0; gbspb = 0.0; gbspsp = 0.0; if (model->BSIM4v5igcMod) { gIstotg = here->BSIM4v5gIgsg + here->BSIM4v5gIgcsg; gIstotd = here->BSIM4v5gIgcsd; gIstots = here->BSIM4v5gIgss + here->BSIM4v5gIgcss; gIstotb = here->BSIM4v5gIgcsb; gIdtotg = here->BSIM4v5gIgdg + here->BSIM4v5gIgcdg; gIdtotd = here->BSIM4v5gIgdd + here->BSIM4v5gIgcdd; gIdtots = here->BSIM4v5gIgcds; gIdtotb = here->BSIM4v5gIgcdb; } else { gIstotg = gIstotd = gIstots = gIstotb = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = 0.0; } if (model->BSIM4v5igbMod) { gIbtotg = here->BSIM4v5gIgbg; gIbtotd = here->BSIM4v5gIgbd; gIbtots = here->BSIM4v5gIgbs; gIbtotb = here->BSIM4v5gIgbb; } else gIbtotg = gIbtotd = gIbtots = gIbtotb = 0.0; if ((model->BSIM4v5igcMod != 0) || (model->BSIM4v5igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = 0.0; if (here->BSIM4v5rgateMod == 2) T0 = *(ckt->CKTstates[0] + here->BSIM4v5vges) - *(ckt->CKTstates[0] + here->BSIM4v5vgs); else if (here->BSIM4v5rgateMod == 3) T0 = *(ckt->CKTstates[0] + here->BSIM4v5vgms) - *(ckt->CKTstates[0] + here->BSIM4v5vgs); if (here->BSIM4v5rgateMod > 1) { gcrgd = here->BSIM4v5gcrgd * T0; gcrgg = here->BSIM4v5gcrgg * T0; gcrgs = here->BSIM4v5gcrgs * T0; gcrgb = here->BSIM4v5gcrgb * T0; gcrgg -= here->BSIM4v5gcrg; gcrg = here->BSIM4v5gcrg; } else gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; if (here->BSIM4v5rgateMod == 3) { xcgmgmb = (cgdo + cgso + pParam->BSIM4v5cgbo) * omega; xcgmdb = -cgdo * omega; xcgmsb = -cgso * omega; xcgmbb = -pParam->BSIM4v5cgbo * omega; xcdgmb = xcgmdb; xcsgmb = xcgmsb; xcbgmb = xcgmbb; xcggbr = Cggr * omega; xcgdbr = Cgdr * omega; xcgsbr = Cgsr * omega; xcgbbr = -(xcggbr + xcgdbr + xcgsbr); xcdgbr = Cdgr * omega; xcsgbr = Csgr * omega; xcbgb = here->BSIM4v5cbgb * omega; } else { xcggbr = (Cggr + cgdo + cgso + pParam->BSIM4v5cgbo ) * omega; xcgdbr = (Cgdr - cgdo) * omega; xcgsbr = (Cgsr - cgso) * omega; xcgbbr = -(xcggbr + xcgdbr + xcgsbr); xcdgbr = (Cdgr - cgdo) * omega; xcsgbr = (Csgr - cgso) * omega; xcbgb = (here->BSIM4v5cbgb - pParam->BSIM4v5cgbo) * omega; xcdgmb = xcsgmb = xcbgmb = 0.0; } xcddbr = (Cddr + here->BSIM4v5capbd + cgdo) * omega; xcdsbr = Cdsr * omega; xcsdbr = Csdr * omega; xcssbr = (here->BSIM4v5capbs + cgso + Cssr) * omega; if (!here->BSIM4v5rbodyMod) { xcdbbr = -(xcdgbr + xcddbr + xcdsbr + xcdgmb); xcsbbr = -(xcsgbr + xcsdbr + xcssbr + xcsgmb); xcbdb = (here->BSIM4v5cbdb - here->BSIM4v5capbd) * omega; xcbsb = (here->BSIM4v5cbsb - here->BSIM4v5capbs) * omega; xcdbdb = 0.0; } else { xcdbbr = Cdbr * omega; xcsbbr = -(xcsgbr + xcsdbr + xcssbr + xcsgmb) + here->BSIM4v5capbs * omega; xcbdb = here->BSIM4v5cbdb * omega; xcbsb = here->BSIM4v5cbsb * omega; xcdbdb = -here->BSIM4v5capbd * omega; xcsbsb = -here->BSIM4v5capbs * omega; } xcbbb = -(xcbdb + xcbgb + xcbsb + xcbgmb); xcdgbi = Cdgi; xcsgbi = Csgi; xcddbi = Cddi; xcdsbi = Cdsi; xcsdbi = Csdi; xcssbi = Cssi; xcdbbi = Cdbi; xcsbbi = Csbi; xcggbi = Cggi; xcgdbi = Cgdi; xcgsbi = Cgsi; xcgbbi = Cgbi; } else /* Reverse mode */ { Gmr = -gmr; Gmbsr = -gmbsr; FwdSumr = 0.0; RevSumr = -(Gmr + Gmbsr); Gmi = -gmi; Gmbsi = -gmbsi; FwdSumi = 0.0; RevSumi = -(Gmi + Gmbsi); gbbsp = -(here->BSIM4v5gbds); gbbdp = here->BSIM4v5gbds + here->BSIM4v5gbgs + here->BSIM4v5gbbs; gbdpg = 0.0; gbdpsp = 0.0; gbdpb = 0.0; gbdpdp = 0.0; gbspg = here->BSIM4v5gbgs; gbspsp = here->BSIM4v5gbds; gbspb = here->BSIM4v5gbbs; gbspdp = -(gbspg + gbspsp + gbspb); if (model->BSIM4v5igcMod) { gIstotg = here->BSIM4v5gIgsg + here->BSIM4v5gIgcdg; gIstotd = here->BSIM4v5gIgcds; gIstots = here->BSIM4v5gIgss + here->BSIM4v5gIgcdd; gIstotb = here->BSIM4v5gIgcdb; gIdtotg = here->BSIM4v5gIgdg + here->BSIM4v5gIgcsg; gIdtotd = here->BSIM4v5gIgdd + here->BSIM4v5gIgcss; gIdtots = here->BSIM4v5gIgcsd; gIdtotb = here->BSIM4v5gIgcsb; } else { gIstotg = gIstotd = gIstots = gIstotb = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = 0.0; } if (model->BSIM4v5igbMod) { gIbtotg = here->BSIM4v5gIgbg; gIbtotd = here->BSIM4v5gIgbs; gIbtots = here->BSIM4v5gIgbd; gIbtotb = here->BSIM4v5gIgbb; } else gIbtotg = gIbtotd = gIbtots = gIbtotb = 0.0; if ((model->BSIM4v5igcMod != 0) || (model->BSIM4v5igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = 0.0; if (here->BSIM4v5rgateMod == 2) T0 = *(ckt->CKTstates[0] + here->BSIM4v5vges) - *(ckt->CKTstates[0] + here->BSIM4v5vgs); else if (here->BSIM4v5rgateMod == 3) T0 = *(ckt->CKTstates[0] + here->BSIM4v5vgms) - *(ckt->CKTstates[0] + here->BSIM4v5vgs); if (here->BSIM4v5rgateMod > 1) { gcrgd = here->BSIM4v5gcrgs * T0; gcrgg = here->BSIM4v5gcrgg * T0; gcrgs = here->BSIM4v5gcrgd * T0; gcrgb = here->BSIM4v5gcrgb * T0; gcrgg -= here->BSIM4v5gcrg; gcrg = here->BSIM4v5gcrg; } else gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; if (here->BSIM4v5rgateMod == 3) { xcgmgmb = (cgdo + cgso + pParam->BSIM4v5cgbo) * omega; xcgmdb = -cgdo * omega; xcgmsb = -cgso * omega; xcgmbb = -pParam->BSIM4v5cgbo * omega; xcdgmb = xcgmdb; xcsgmb = xcgmsb; xcbgmb = xcgmbb; xcggbr = Cggr * omega; xcgdbr = Cgsr * omega; xcgsbr = Cgdr * omega; xcgbbr = -(xcggbr + xcgdbr + xcgsbr); xcdgbr = Csgr * omega; xcsgbr = Cdgr * omega; xcbgb = here->BSIM4v5cbgb * omega; } else { xcggbr = (Cggr + cgdo + cgso + pParam->BSIM4v5cgbo ) * omega; xcgdbr = (Cgsr - cgdo) * omega; xcgsbr = (Cgdr - cgso) * omega; xcgbbr = -(xcggbr + xcgdbr + xcgsbr); xcdgbr = (Csgr - cgdo) * omega; xcsgbr = (Cdgr - cgso) * omega; xcbgb = (here->BSIM4v5cbgb - pParam->BSIM4v5cgbo) * omega; xcdgmb = xcsgmb = xcbgmb = 0.0; } xcddbr = (here->BSIM4v5capbd + cgdo + Cssr) * omega; xcdsbr = Csdr * omega; xcsdbr = Cdsr * omega; xcssbr = (Cddr + here->BSIM4v5capbs + cgso) * omega; if (!here->BSIM4v5rbodyMod) { xcdbbr = -(xcdgbr + xcddbr + xcdsbr + xcdgmb); xcsbbr = -(xcsgbr + xcsdbr + xcssbr + xcsgmb); xcbdb = (here->BSIM4v5cbsb - here->BSIM4v5capbd) * omega; xcbsb = (here->BSIM4v5cbdb - here->BSIM4v5capbs) * omega; xcdbdb = 0.0; } else { xcdbbr = -(xcdgbr + xcddbr + xcdsbr + xcdgmb) + here->BSIM4v5capbd * omega; xcsbbr = Cdbr * omega; xcbdb = here->BSIM4v5cbsb * omega; xcbsb = here->BSIM4v5cbdb * omega; xcdbdb = -here->BSIM4v5capbd * omega; xcsbsb = -here->BSIM4v5capbs * omega; } xcbbb = -(xcbgb + xcbdb + xcbsb + xcbgmb); xcdgbi = Csgi; xcsgbi = Cdgi; xcddbi = Cssi; xcdsbi = Csdi; xcsdbi = Cdsi; xcssbi = Cddi; xcdbbi = Csbi; xcsbbi = Cdbi; xcggbi = Cggi; xcgdbi = Cgsi; xcgsbi = Cgdi; xcgbbi = Cgbi; } if (model->BSIM4v5rdsMod == 1) { gstot = here->BSIM4v5gstot; gstotd = here->BSIM4v5gstotd; gstotg = here->BSIM4v5gstotg; gstots = here->BSIM4v5gstots - gstot; gstotb = here->BSIM4v5gstotb; gdtot = here->BSIM4v5gdtot; gdtotd = here->BSIM4v5gdtotd - gdtot; gdtotg = here->BSIM4v5gdtotg; gdtots = here->BSIM4v5gdtots; gdtotb = here->BSIM4v5gdtotb; } else { gstot = gstotd = gstotg = gstots = gstotb = 0.0; gdtot = gdtotd = gdtotg = gdtots = gdtotb = 0.0; } /* * Loading AC matrix */ m = here->BSIM4v5m; if (!model->BSIM4v5rdsMod) { gdpr = here->BSIM4v5drainConductance; gspr = here->BSIM4v5sourceConductance; } else gdpr = gspr = 0.0; if (!here->BSIM4v5rbodyMod) { gjbd = here->BSIM4v5gbd; gjbs = here->BSIM4v5gbs; } else gjbd = gjbs = 0.0; geltd = here->BSIM4v5grgeltd; if (here->BSIM4v5rgateMod == 1) { *(here->BSIM4v5GEgePtr) += m * geltd; *(here->BSIM4v5GPgePtr) -= m * geltd; *(here->BSIM4v5GEgpPtr) -= m * geltd; *(here->BSIM4v5GPgpPtr +1) += m * xcggbr; *(here->BSIM4v5GPgpPtr) += m * (geltd + xcggbi + gIgtotg); *(here->BSIM4v5GPdpPtr +1) += m * xcgdbr; *(here->BSIM4v5GPdpPtr) += m * (xcgdbi + gIgtotd); *(here->BSIM4v5GPspPtr +1) += m * xcgsbr; *(here->BSIM4v5GPspPtr) += m * (xcgsbi + gIgtots); *(here->BSIM4v5GPbpPtr +1) += m * xcgbbr; *(here->BSIM4v5GPbpPtr) += m * (xcgbbi + gIgtotb); } /* WDLiu: gcrg already subtracted from all gcrgg below */ else if (here->BSIM4v5rgateMod == 2) { *(here->BSIM4v5GEgePtr) += m * gcrg; *(here->BSIM4v5GEgpPtr) += m * gcrgg; *(here->BSIM4v5GEdpPtr) += m * gcrgd; *(here->BSIM4v5GEspPtr) += m * gcrgs; *(here->BSIM4v5GEbpPtr) += m * gcrgb; *(here->BSIM4v5GPgePtr) -= m * gcrg; *(here->BSIM4v5GPgpPtr +1) += m * xcggbr; *(here->BSIM4v5GPgpPtr) -= m * (gcrgg - xcggbi - gIgtotg); *(here->BSIM4v5GPdpPtr +1) += m * xcgdbr; *(here->BSIM4v5GPdpPtr) -= m * (gcrgd - xcgdbi - gIgtotd); *(here->BSIM4v5GPspPtr +1) += m * xcgsbr; *(here->BSIM4v5GPspPtr) -= m * (gcrgs - xcgsbi - gIgtots); *(here->BSIM4v5GPbpPtr +1) += m * xcgbbr; *(here->BSIM4v5GPbpPtr) -= m * (gcrgb - xcgbbi - gIgtotb); } else if (here->BSIM4v5rgateMod == 3) { *(here->BSIM4v5GEgePtr) += m * geltd; *(here->BSIM4v5GEgmPtr) -= m * geltd; *(here->BSIM4v5GMgePtr) -= m * geltd; *(here->BSIM4v5GMgmPtr) += m * (geltd + gcrg); *(here->BSIM4v5GMgmPtr +1) += m * xcgmgmb; *(here->BSIM4v5GMdpPtr) += m * gcrgd; *(here->BSIM4v5GMdpPtr +1) += m * xcgmdb; *(here->BSIM4v5GMgpPtr) += m * gcrgg; *(here->BSIM4v5GMspPtr) += m * gcrgs; *(here->BSIM4v5GMspPtr +1) += m * xcgmsb; *(here->BSIM4v5GMbpPtr) += m * gcrgb; *(here->BSIM4v5GMbpPtr +1) += m * xcgmbb; *(here->BSIM4v5DPgmPtr +1) += m * xcdgmb; *(here->BSIM4v5GPgmPtr) -= m * gcrg; *(here->BSIM4v5SPgmPtr +1) += m * xcsgmb; *(here->BSIM4v5BPgmPtr +1) += m * xcbgmb; *(here->BSIM4v5GPgpPtr) -= m * (gcrgg - xcggbi - gIgtotg); *(here->BSIM4v5GPgpPtr +1) += m * xcggbr; *(here->BSIM4v5GPdpPtr) -= m * (gcrgd - xcgdbi - gIgtotd); *(here->BSIM4v5GPdpPtr +1) += m * xcgdbr; *(here->BSIM4v5GPspPtr) -= m * (gcrgs - xcgsbi - gIgtots); *(here->BSIM4v5GPspPtr +1) += m * xcgsbr; *(here->BSIM4v5GPbpPtr) -= m * (gcrgb - xcgbbi - gIgtotb); *(here->BSIM4v5GPbpPtr +1) += m * xcgbbr; } else { *(here->BSIM4v5GPgpPtr +1) += m * xcggbr; *(here->BSIM4v5GPgpPtr) += m * (xcggbi + gIgtotg); *(here->BSIM4v5GPdpPtr +1) += m * xcgdbr; *(here->BSIM4v5GPdpPtr) += m * (xcgdbi + gIgtotd); *(here->BSIM4v5GPspPtr +1) += m * xcgsbr; *(here->BSIM4v5GPspPtr) += m * (xcgsbi + gIgtots); *(here->BSIM4v5GPbpPtr +1) += m * xcgbbr; *(here->BSIM4v5GPbpPtr) += m * (xcgbbi + gIgtotb); } if (model->BSIM4v5rdsMod) { (*(here->BSIM4v5DgpPtr) += m * gdtotg); (*(here->BSIM4v5DspPtr) += m * gdtots); (*(here->BSIM4v5DbpPtr) += m * gdtotb); (*(here->BSIM4v5SdpPtr) += m * gstotd); (*(here->BSIM4v5SgpPtr) += m * gstotg); (*(here->BSIM4v5SbpPtr) += m * gstotb); } *(here->BSIM4v5DPdpPtr +1) += m * (xcddbr + gdsi + RevSumi); *(here->BSIM4v5DPdpPtr) += m * (gdpr + xcddbi + gdsr + here->BSIM4v5gbd - gdtotd + RevSumr + gbdpdp - gIdtotd); *(here->BSIM4v5DPdPtr) -= m * (gdpr + gdtot); *(here->BSIM4v5DPgpPtr +1) += m * (xcdgbr + Gmi); *(here->BSIM4v5DPgpPtr) += m * (Gmr + xcdgbi - gdtotg + gbdpg - gIdtotg); *(here->BSIM4v5DPspPtr +1) += m * (xcdsbr - gdsi - FwdSumi); *(here->BSIM4v5DPspPtr) -= m * (gdsr - xcdsbi + FwdSumr + gdtots - gbdpsp + gIdtots); *(here->BSIM4v5DPbpPtr +1) += m * (xcdbbr + Gmbsi); *(here->BSIM4v5DPbpPtr) -= m * (gjbd + gdtotb - xcdbbi - Gmbsr - gbdpb + gIdtotb); *(here->BSIM4v5DdpPtr) -= m * (gdpr - gdtotd); *(here->BSIM4v5DdPtr) += m * (gdpr + gdtot); *(here->BSIM4v5SPdpPtr +1) += m * (xcsdbr - gdsi - RevSumi); *(here->BSIM4v5SPdpPtr) -= m * (gdsr - xcsdbi + gstotd + RevSumr - gbspdp + gIstotd); *(here->BSIM4v5SPgpPtr +1) += m * (xcsgbr - Gmi); *(here->BSIM4v5SPgpPtr) -= m * (Gmr - xcsgbi + gstotg - gbspg + gIstotg); *(here->BSIM4v5SPspPtr +1) += m * (xcssbr + gdsi + FwdSumi); *(here->BSIM4v5SPspPtr) += m * (gspr + xcssbi + gdsr + here->BSIM4v5gbs - gstots + FwdSumr + gbspsp - gIstots); *(here->BSIM4v5SPsPtr) -= m * (gspr + gstot); *(here->BSIM4v5SPbpPtr +1) += m * (xcsbbr - Gmbsi); *(here->BSIM4v5SPbpPtr) -= m * (gjbs + gstotb - xcsbbi + Gmbsr - gbspb + gIstotb); *(here->BSIM4v5SspPtr) -= m * (gspr - gstots); *(here->BSIM4v5SsPtr) += m * (gspr + gstot); *(here->BSIM4v5BPdpPtr +1) += m * xcbdb; *(here->BSIM4v5BPdpPtr) -= m * (gjbd - gbbdp + gIbtotd); *(here->BSIM4v5BPgpPtr +1) += m * xcbgb; *(here->BSIM4v5BPgpPtr) -= m * (here->BSIM4v5gbgs + gIbtotg); *(here->BSIM4v5BPspPtr +1) += m * xcbsb; *(here->BSIM4v5BPspPtr) -= m * (gjbs - gbbsp + gIbtots); *(here->BSIM4v5BPbpPtr +1) += m * xcbbb; *(here->BSIM4v5BPbpPtr) += m * (gjbd + gjbs - here->BSIM4v5gbbs - gIbtotb); ggidld = here->BSIM4v5ggidld; ggidlg = here->BSIM4v5ggidlg; ggidlb = here->BSIM4v5ggidlb; ggislg = here->BSIM4v5ggislg; ggisls = here->BSIM4v5ggisls; ggislb = here->BSIM4v5ggislb; /* stamp gidl */ (*(here->BSIM4v5DPdpPtr) += m * ggidld); (*(here->BSIM4v5DPgpPtr) += m * ggidlg); (*(here->BSIM4v5DPspPtr) -= m * ((ggidlg + ggidld) + ggidlb)); (*(here->BSIM4v5DPbpPtr) += m * ggidlb); (*(here->BSIM4v5BPdpPtr) -= m * ggidld); (*(here->BSIM4v5BPgpPtr) -= m * ggidlg); (*(here->BSIM4v5BPspPtr) += m * ((ggidlg + ggidld) + ggidlb)); (*(here->BSIM4v5BPbpPtr) -= m * ggidlb); /* stamp gisl */ (*(here->BSIM4v5SPdpPtr) -= m * ((ggisls + ggislg) + ggislb)); (*(here->BSIM4v5SPgpPtr) += m * ggislg); (*(here->BSIM4v5SPspPtr) += m * ggisls); (*(here->BSIM4v5SPbpPtr) += m * ggislb); (*(here->BSIM4v5BPdpPtr) += m * ((ggislg + ggisls) + ggislb)); (*(here->BSIM4v5BPgpPtr) -= m * ggislg); (*(here->BSIM4v5BPspPtr) -= m * ggisls); (*(here->BSIM4v5BPbpPtr) -= m * ggislb); if (here->BSIM4v5rbodyMod) { (*(here->BSIM4v5DPdbPtr +1) += m * xcdbdb); (*(here->BSIM4v5DPdbPtr) -= m * here->BSIM4v5gbd); (*(here->BSIM4v5SPsbPtr +1) += m * xcsbsb); (*(here->BSIM4v5SPsbPtr) -= m * here->BSIM4v5gbs); (*(here->BSIM4v5DBdpPtr +1) += m * xcdbdb); (*(here->BSIM4v5DBdpPtr) -= m * here->BSIM4v5gbd); (*(here->BSIM4v5DBdbPtr +1) -= m * xcdbdb); (*(here->BSIM4v5DBdbPtr) += m * (here->BSIM4v5gbd + here->BSIM4v5grbpd + here->BSIM4v5grbdb)); (*(here->BSIM4v5DBbpPtr) -= m * here->BSIM4v5grbpd); (*(here->BSIM4v5DBbPtr) -= m * here->BSIM4v5grbdb); (*(here->BSIM4v5BPdbPtr) -= m * here->BSIM4v5grbpd); (*(here->BSIM4v5BPbPtr) -= m * here->BSIM4v5grbpb); (*(here->BSIM4v5BPsbPtr) -= m * here->BSIM4v5grbps); (*(here->BSIM4v5BPbpPtr) += m * (here->BSIM4v5grbpd + here->BSIM4v5grbps + here->BSIM4v5grbpb)); /* WDLiu: (-here->BSIM4v5gbbs) already added to BPbpPtr */ (*(here->BSIM4v5SBspPtr +1) += m * xcsbsb); (*(here->BSIM4v5SBspPtr) -= m * here->BSIM4v5gbs); (*(here->BSIM4v5SBbpPtr) -= m * here->BSIM4v5grbps); (*(here->BSIM4v5SBbPtr) -= m * here->BSIM4v5grbsb); (*(here->BSIM4v5SBsbPtr +1) -= m * xcsbsb); (*(here->BSIM4v5SBsbPtr) += m * (here->BSIM4v5gbs + here->BSIM4v5grbps + here->BSIM4v5grbsb)); (*(here->BSIM4v5BdbPtr) -= m * here->BSIM4v5grbdb); (*(here->BSIM4v5BbpPtr) -= m * here->BSIM4v5grbpb); (*(here->BSIM4v5BsbPtr) -= m * here->BSIM4v5grbsb); (*(here->BSIM4v5BbPtr) += m * (here->BSIM4v5grbsb + here->BSIM4v5grbdb + here->BSIM4v5grbpb)); } /* * WDLiu: The internal charge node generated for transient NQS is not needed for * AC NQS. The following is not doing a real job, but we have to keep it; * otherwise a singular AC NQS matrix may occur if the transient NQS is on. * The charge node is isolated from the instance. */ if (here->BSIM4v5trnqsMod) { (*(here->BSIM4v5QqPtr) += m * 1.0); (*(here->BSIM4v5QgpPtr) += 0.0); (*(here->BSIM4v5QdpPtr) += 0.0); (*(here->BSIM4v5QspPtr) += 0.0); (*(here->BSIM4v5QbpPtr) += 0.0); (*(here->BSIM4v5DPqPtr) += 0.0); (*(here->BSIM4v5SPqPtr) += 0.0); (*(here->BSIM4v5GPqPtr) += 0.0); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v5/b4v5cvtest.c0000644000175000017500000002177013546075722022640 0ustar carstencarsten/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ /********** * Copyright 2005 Regents of the University of California. All rights reserved. * File: b4cvtest.c of BSIM4.5.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 05/09/2003. **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4v5def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4v5convTest( GENmodel *inModel, CKTcircuit *ckt) { BSIM4v5model *model = (BSIM4v5model*)inModel; BSIM4v5instance *here; double delvbd, delvbs, delvds, delvgd, delvgs; double delvdbd, delvsbs; double delvbd_jct, delvbs_jct; double vds, vgs, vgd, vgdo, vbs, vbd; double vdbd, vdbs, vsbs; double cbhat, cdhat, Idtot, Ibtot; double vses, vdes, vdedo, delvses, delvded, delvdes; double Isestot, cseshat, Idedtot, cdedhat; double Igstot, cgshat, Igdtot, cgdhat, Igbtot, cgbhat; double tol0, tol1, tol2, tol3, tol4, tol5, tol6; for (; model != NULL; model = BSIM4v5nextModel(model)) { for (here = BSIM4v5instances(model); here != NULL ; here=BSIM4v5nextInstance(here)) { vds = model->BSIM4v5type * (*(ckt->CKTrhsOld + here->BSIM4v5dNodePrime) - *(ckt->CKTrhsOld + here->BSIM4v5sNodePrime)); vgs = model->BSIM4v5type * (*(ckt->CKTrhsOld + here->BSIM4v5gNodePrime) - *(ckt->CKTrhsOld + here->BSIM4v5sNodePrime)); vbs = model->BSIM4v5type * (*(ckt->CKTrhsOld + here->BSIM4v5bNodePrime) - *(ckt->CKTrhsOld + here->BSIM4v5sNodePrime)); vdbs = model->BSIM4v5type * (*(ckt->CKTrhsOld + here->BSIM4v5dbNode) - *(ckt->CKTrhsOld + here->BSIM4v5sNodePrime)); vsbs = model->BSIM4v5type * (*(ckt->CKTrhsOld + here->BSIM4v5sbNode) - *(ckt->CKTrhsOld + here->BSIM4v5sNodePrime)); vses = model->BSIM4v5type * (*(ckt->CKTrhsOld + here->BSIM4v5sNode) - *(ckt->CKTrhsOld + here->BSIM4v5sNodePrime)); vdes = model->BSIM4v5type * (*(ckt->CKTrhsOld + here->BSIM4v5dNode) - *(ckt->CKTrhsOld + here->BSIM4v5sNodePrime)); vgdo = *(ckt->CKTstate0 + here->BSIM4v5vgs) - *(ckt->CKTstate0 + here->BSIM4v5vds); vbd = vbs - vds; vdbd = vdbs - vds; vgd = vgs - vds; delvbd = vbd - *(ckt->CKTstate0 + here->BSIM4v5vbd); delvdbd = vdbd - *(ckt->CKTstate0 + here->BSIM4v5vdbd); delvgd = vgd - vgdo; delvds = vds - *(ckt->CKTstate0 + here->BSIM4v5vds); delvgs = vgs - *(ckt->CKTstate0 + here->BSIM4v5vgs); delvbs = vbs - *(ckt->CKTstate0 + here->BSIM4v5vbs); delvsbs = vsbs - *(ckt->CKTstate0 + here->BSIM4v5vsbs); delvses = vses - (*(ckt->CKTstate0 + here->BSIM4v5vses)); vdedo = *(ckt->CKTstate0 + here->BSIM4v5vdes) - *(ckt->CKTstate0 + here->BSIM4v5vds); delvdes = vdes - *(ckt->CKTstate0 + here->BSIM4v5vdes); delvded = vdes - vds - vdedo; delvbd_jct = (!here->BSIM4v5rbodyMod) ? delvbd : delvdbd; delvbs_jct = (!here->BSIM4v5rbodyMod) ? delvbs : delvsbs; if (here->BSIM4v5mode >= 0) { Idtot = here->BSIM4v5cd + here->BSIM4v5csub - here->BSIM4v5cbd + here->BSIM4v5Igidl; cdhat = Idtot - here->BSIM4v5gbd * delvbd_jct + (here->BSIM4v5gmbs + here->BSIM4v5gbbs + here->BSIM4v5ggidlb) * delvbs + (here->BSIM4v5gm + here->BSIM4v5gbgs + here->BSIM4v5ggidlg) * delvgs + (here->BSIM4v5gds + here->BSIM4v5gbds + here->BSIM4v5ggidld) * delvds; Igstot = here->BSIM4v5Igs + here->BSIM4v5Igcs; cgshat = Igstot + (here->BSIM4v5gIgsg + here->BSIM4v5gIgcsg) * delvgs + here->BSIM4v5gIgcsd * delvds + here->BSIM4v5gIgcsb * delvbs; Igdtot = here->BSIM4v5Igd + here->BSIM4v5Igcd; cgdhat = Igdtot + here->BSIM4v5gIgdg * delvgd + here->BSIM4v5gIgcdg * delvgs + here->BSIM4v5gIgcdd * delvds + here->BSIM4v5gIgcdb * delvbs; Igbtot = here->BSIM4v5Igb; cgbhat = here->BSIM4v5Igb + here->BSIM4v5gIgbg * delvgs + here->BSIM4v5gIgbd * delvds + here->BSIM4v5gIgbb * delvbs; } else { Idtot = here->BSIM4v5cd + here->BSIM4v5cbd - here->BSIM4v5Igidl; /* bugfix */ cdhat = Idtot + here->BSIM4v5gbd * delvbd_jct + here->BSIM4v5gmbs * delvbd + here->BSIM4v5gm * delvgd - (here->BSIM4v5gds + here->BSIM4v5ggidls) * delvds - here->BSIM4v5ggidlg * delvgs - here->BSIM4v5ggidlb * delvbs; Igstot = here->BSIM4v5Igs + here->BSIM4v5Igcd; cgshat = Igstot + here->BSIM4v5gIgsg * delvgs + here->BSIM4v5gIgcdg * delvgd - here->BSIM4v5gIgcdd * delvds + here->BSIM4v5gIgcdb * delvbd; Igdtot = here->BSIM4v5Igd + here->BSIM4v5Igcs; cgdhat = Igdtot + (here->BSIM4v5gIgdg + here->BSIM4v5gIgcsg) * delvgd - here->BSIM4v5gIgcsd * delvds + here->BSIM4v5gIgcsb * delvbd; Igbtot = here->BSIM4v5Igb; cgbhat = here->BSIM4v5Igb + here->BSIM4v5gIgbg * delvgd - here->BSIM4v5gIgbd * delvds + here->BSIM4v5gIgbb * delvbd; } Isestot = here->BSIM4v5gstot * (*(ckt->CKTstate0 + here->BSIM4v5vses)); cseshat = Isestot + here->BSIM4v5gstot * delvses + here->BSIM4v5gstotd * delvds + here->BSIM4v5gstotg * delvgs + here->BSIM4v5gstotb * delvbs; Idedtot = here->BSIM4v5gdtot * vdedo; cdedhat = Idedtot + here->BSIM4v5gdtot * delvded + here->BSIM4v5gdtotd * delvds + here->BSIM4v5gdtotg * delvgs + here->BSIM4v5gdtotb * delvbs; /* * Check convergence */ if ((here->BSIM4v5off == 0) || (!(ckt->CKTmode & MODEINITFIX))) { tol0 = ckt->CKTreltol * MAX(fabs(cdhat), fabs(Idtot)) + ckt->CKTabstol; tol1 = ckt->CKTreltol * MAX(fabs(cseshat), fabs(Isestot)) + ckt->CKTabstol; tol2 = ckt->CKTreltol * MAX(fabs(cdedhat), fabs(Idedtot)) + ckt->CKTabstol; tol3 = ckt->CKTreltol * MAX(fabs(cgshat), fabs(Igstot)) + ckt->CKTabstol; tol4 = ckt->CKTreltol * MAX(fabs(cgdhat), fabs(Igdtot)) + ckt->CKTabstol; tol5 = ckt->CKTreltol * MAX(fabs(cgbhat), fabs(Igbtot)) + ckt->CKTabstol; if ((fabs(cdhat - Idtot) >= tol0) || (fabs(cseshat - Isestot) >= tol1) || (fabs(cdedhat - Idedtot) >= tol2)) { ckt->CKTnoncon++; return(OK); } if ((fabs(cgshat - Igstot) >= tol3) || (fabs(cgdhat - Igdtot) >= tol4) || (fabs(cgbhat - Igbtot) >= tol5)) { ckt->CKTnoncon++; return(OK); } Ibtot = here->BSIM4v5cbs + here->BSIM4v5cbd - here->BSIM4v5Igidl - here->BSIM4v5Igisl - here->BSIM4v5csub; if (here->BSIM4v5mode >= 0) { cbhat = Ibtot + here->BSIM4v5gbd * delvbd_jct + here->BSIM4v5gbs * delvbs_jct - (here->BSIM4v5gbbs + here->BSIM4v5ggidlb) * delvbs - (here->BSIM4v5gbgs + here->BSIM4v5ggidlg) * delvgs - (here->BSIM4v5gbds + here->BSIM4v5ggidld) * delvds - here->BSIM4v5ggislg * delvgd - here->BSIM4v5ggislb* delvbd + here->BSIM4v5ggisls * delvds ; } else { cbhat = Ibtot + here->BSIM4v5gbs * delvbs_jct + here->BSIM4v5gbd * delvbd_jct - (here->BSIM4v5gbbs + here->BSIM4v5ggislb) * delvbd - (here->BSIM4v5gbgs + here->BSIM4v5ggislg) * delvgd + (here->BSIM4v5gbds + here->BSIM4v5ggisld - here->BSIM4v5ggidls) * delvds - here->BSIM4v5ggidlg * delvgs - here->BSIM4v5ggidlb * delvbs; } tol6 = ckt->CKTreltol * MAX(fabs(cbhat), fabs(Ibtot)) + ckt->CKTabstol; if (fabs(cbhat - Ibtot) > tol6) { ckt->CKTnoncon++; return(OK); } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v5/b4v5mask.c0000644000175000017500000023604713546075722022270 0ustar carstencarsten/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ /********** * Copyright 2005 Regents of the University of California. All rights reserved. * File: b4mask.c of BSIM4.5.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "bsim4v5def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4v5mAsk( CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { BSIM4v5model *model = (BSIM4v5model *)inst; NG_IGNORE(ckt); switch(which) { case BSIM4v5_MOD_MOBMOD : value->iValue = model->BSIM4v5mobMod; return(OK); case BSIM4v5_MOD_PARAMCHK : value->iValue = model->BSIM4v5paramChk; return(OK); case BSIM4v5_MOD_BINUNIT : value->iValue = model->BSIM4v5binUnit; return(OK); case BSIM4v5_MOD_CAPMOD : value->iValue = model->BSIM4v5capMod; return(OK); case BSIM4v5_MOD_DIOMOD : value->iValue = model->BSIM4v5dioMod; return(OK); case BSIM4v5_MOD_TRNQSMOD : value->iValue = model->BSIM4v5trnqsMod; return(OK); case BSIM4v5_MOD_ACNQSMOD : value->iValue = model->BSIM4v5acnqsMod; return(OK); case BSIM4v5_MOD_FNOIMOD : value->iValue = model->BSIM4v5fnoiMod; return(OK); case BSIM4v5_MOD_TNOIMOD : value->iValue = model->BSIM4v5tnoiMod; return(OK); case BSIM4v5_MOD_RDSMOD : value->iValue = model->BSIM4v5rdsMod; return(OK); case BSIM4v5_MOD_RBODYMOD : value->iValue = model->BSIM4v5rbodyMod; return(OK); case BSIM4v5_MOD_RGATEMOD : value->iValue = model->BSIM4v5rgateMod; return(OK); case BSIM4v5_MOD_PERMOD : value->iValue = model->BSIM4v5perMod; return(OK); case BSIM4v5_MOD_GEOMOD : value->iValue = model->BSIM4v5geoMod; return(OK); case BSIM4v5_MOD_RGEOMOD : value->iValue = model->BSIM4v5rgeoMod; return(OK); case BSIM4v5_MOD_IGCMOD : value->iValue = model->BSIM4v5igcMod; return(OK); case BSIM4v5_MOD_IGBMOD : value->iValue = model->BSIM4v5igbMod; return(OK); case BSIM4v5_MOD_TEMPMOD : value->iValue = model->BSIM4v5tempMod; return(OK); case BSIM4v5_MOD_VERSION : value->sValue = model->BSIM4v5version; return(OK); case BSIM4v5_MOD_TOXREF : value->rValue = model->BSIM4v5toxref; return(OK); case BSIM4v5_MOD_TOXE : value->rValue = model->BSIM4v5toxe; return(OK); case BSIM4v5_MOD_TOXP : value->rValue = model->BSIM4v5toxp; return(OK); case BSIM4v5_MOD_TOXM : value->rValue = model->BSIM4v5toxm; return(OK); case BSIM4v5_MOD_DTOX : value->rValue = model->BSIM4v5dtox; return(OK); case BSIM4v5_MOD_EPSROX : value->rValue = model->BSIM4v5epsrox; return(OK); case BSIM4v5_MOD_CDSC : value->rValue = model->BSIM4v5cdsc; return(OK); case BSIM4v5_MOD_CDSCB : value->rValue = model->BSIM4v5cdscb; return(OK); case BSIM4v5_MOD_CDSCD : value->rValue = model->BSIM4v5cdscd; return(OK); case BSIM4v5_MOD_CIT : value->rValue = model->BSIM4v5cit; return(OK); case BSIM4v5_MOD_NFACTOR : value->rValue = model->BSIM4v5nfactor; return(OK); case BSIM4v5_MOD_XJ: value->rValue = model->BSIM4v5xj; return(OK); case BSIM4v5_MOD_VSAT: value->rValue = model->BSIM4v5vsat; return(OK); case BSIM4v5_MOD_VTL: value->rValue = model->BSIM4v5vtl; return(OK); case BSIM4v5_MOD_XN: value->rValue = model->BSIM4v5xn; return(OK); case BSIM4v5_MOD_LC: value->rValue = model->BSIM4v5lc; return(OK); case BSIM4v5_MOD_LAMBDA: value->rValue = model->BSIM4v5lambda; return(OK); case BSIM4v5_MOD_AT: value->rValue = model->BSIM4v5at; return(OK); case BSIM4v5_MOD_A0: value->rValue = model->BSIM4v5a0; return(OK); case BSIM4v5_MOD_AGS: value->rValue = model->BSIM4v5ags; return(OK); case BSIM4v5_MOD_A1: value->rValue = model->BSIM4v5a1; return(OK); case BSIM4v5_MOD_A2: value->rValue = model->BSIM4v5a2; return(OK); case BSIM4v5_MOD_KETA: value->rValue = model->BSIM4v5keta; return(OK); case BSIM4v5_MOD_NSUB: value->rValue = model->BSIM4v5nsub; return(OK); case BSIM4v5_MOD_NDEP: value->rValue = model->BSIM4v5ndep; return(OK); case BSIM4v5_MOD_NSD: value->rValue = model->BSIM4v5nsd; return(OK); case BSIM4v5_MOD_NGATE: value->rValue = model->BSIM4v5ngate; return(OK); case BSIM4v5_MOD_GAMMA1: value->rValue = model->BSIM4v5gamma1; return(OK); case BSIM4v5_MOD_GAMMA2: value->rValue = model->BSIM4v5gamma2; return(OK); case BSIM4v5_MOD_VBX: value->rValue = model->BSIM4v5vbx; return(OK); case BSIM4v5_MOD_VBM: value->rValue = model->BSIM4v5vbm; return(OK); case BSIM4v5_MOD_XT: value->rValue = model->BSIM4v5xt; return(OK); case BSIM4v5_MOD_K1: value->rValue = model->BSIM4v5k1; return(OK); case BSIM4v5_MOD_KT1: value->rValue = model->BSIM4v5kt1; return(OK); case BSIM4v5_MOD_KT1L: value->rValue = model->BSIM4v5kt1l; return(OK); case BSIM4v5_MOD_KT2 : value->rValue = model->BSIM4v5kt2; return(OK); case BSIM4v5_MOD_K2 : value->rValue = model->BSIM4v5k2; return(OK); case BSIM4v5_MOD_K3: value->rValue = model->BSIM4v5k3; return(OK); case BSIM4v5_MOD_K3B: value->rValue = model->BSIM4v5k3b; return(OK); case BSIM4v5_MOD_W0: value->rValue = model->BSIM4v5w0; return(OK); case BSIM4v5_MOD_LPE0: value->rValue = model->BSIM4v5lpe0; return(OK); case BSIM4v5_MOD_LPEB: value->rValue = model->BSIM4v5lpeb; return(OK); case BSIM4v5_MOD_DVTP0: value->rValue = model->BSIM4v5dvtp0; return(OK); case BSIM4v5_MOD_DVTP1: value->rValue = model->BSIM4v5dvtp1; return(OK); case BSIM4v5_MOD_DVT0 : value->rValue = model->BSIM4v5dvt0; return(OK); case BSIM4v5_MOD_DVT1 : value->rValue = model->BSIM4v5dvt1; return(OK); case BSIM4v5_MOD_DVT2 : value->rValue = model->BSIM4v5dvt2; return(OK); case BSIM4v5_MOD_DVT0W : value->rValue = model->BSIM4v5dvt0w; return(OK); case BSIM4v5_MOD_DVT1W : value->rValue = model->BSIM4v5dvt1w; return(OK); case BSIM4v5_MOD_DVT2W : value->rValue = model->BSIM4v5dvt2w; return(OK); case BSIM4v5_MOD_DROUT : value->rValue = model->BSIM4v5drout; return(OK); case BSIM4v5_MOD_DSUB : value->rValue = model->BSIM4v5dsub; return(OK); case BSIM4v5_MOD_VTH0: value->rValue = model->BSIM4v5vth0; return(OK); case BSIM4v5_MOD_EU: value->rValue = model->BSIM4v5eu; return(OK); case BSIM4v5_MOD_UA: value->rValue = model->BSIM4v5ua; return(OK); case BSIM4v5_MOD_UA1: value->rValue = model->BSIM4v5ua1; return(OK); case BSIM4v5_MOD_UB: value->rValue = model->BSIM4v5ub; return(OK); case BSIM4v5_MOD_UB1: value->rValue = model->BSIM4v5ub1; return(OK); case BSIM4v5_MOD_UC: value->rValue = model->BSIM4v5uc; return(OK); case BSIM4v5_MOD_UC1: value->rValue = model->BSIM4v5uc1; return(OK); case BSIM4v5_MOD_UD: value->rValue = model->BSIM4v5ud; return(OK); case BSIM4v5_MOD_UD1: value->rValue = model->BSIM4v5ud1; return(OK); case BSIM4v5_MOD_UP: value->rValue = model->BSIM4v5up; return(OK); case BSIM4v5_MOD_LP: value->rValue = model->BSIM4v5lp; return(OK); case BSIM4v5_MOD_U0: value->rValue = model->BSIM4v5u0; return(OK); case BSIM4v5_MOD_UTE: value->rValue = model->BSIM4v5ute; return(OK); case BSIM4v5_MOD_VOFF: value->rValue = model->BSIM4v5voff; return(OK); case BSIM4v5_MOD_TVOFF: value->rValue = model->BSIM4v5tvoff; return(OK); case BSIM4v5_MOD_VFBSDOFF: value->rValue = model->BSIM4v5vfbsdoff; return(OK); case BSIM4v5_MOD_TVFBSDOFF: value->rValue = model->BSIM4v5tvfbsdoff; return(OK); case BSIM4v5_MOD_VOFFL: value->rValue = model->BSIM4v5voffl; return(OK); case BSIM4v5_MOD_MINV: value->rValue = model->BSIM4v5minv; return(OK); case BSIM4v5_MOD_FPROUT: value->rValue = model->BSIM4v5fprout; return(OK); case BSIM4v5_MOD_PDITS: value->rValue = model->BSIM4v5pdits; return(OK); case BSIM4v5_MOD_PDITSD: value->rValue = model->BSIM4v5pditsd; return(OK); case BSIM4v5_MOD_PDITSL: value->rValue = model->BSIM4v5pditsl; return(OK); case BSIM4v5_MOD_DELTA: value->rValue = model->BSIM4v5delta; return(OK); case BSIM4v5_MOD_RDSW: value->rValue = model->BSIM4v5rdsw; return(OK); case BSIM4v5_MOD_RDSWMIN: value->rValue = model->BSIM4v5rdswmin; return(OK); case BSIM4v5_MOD_RDWMIN: value->rValue = model->BSIM4v5rdwmin; return(OK); case BSIM4v5_MOD_RSWMIN: value->rValue = model->BSIM4v5rswmin; return(OK); case BSIM4v5_MOD_RDW: value->rValue = model->BSIM4v5rdw; return(OK); case BSIM4v5_MOD_RSW: value->rValue = model->BSIM4v5rsw; return(OK); case BSIM4v5_MOD_PRWG: value->rValue = model->BSIM4v5prwg; return(OK); case BSIM4v5_MOD_PRWB: value->rValue = model->BSIM4v5prwb; return(OK); case BSIM4v5_MOD_PRT: value->rValue = model->BSIM4v5prt; return(OK); case BSIM4v5_MOD_ETA0: value->rValue = model->BSIM4v5eta0; return(OK); case BSIM4v5_MOD_ETAB: value->rValue = model->BSIM4v5etab; return(OK); case BSIM4v5_MOD_PCLM: value->rValue = model->BSIM4v5pclm; return(OK); case BSIM4v5_MOD_PDIBL1: value->rValue = model->BSIM4v5pdibl1; return(OK); case BSIM4v5_MOD_PDIBL2: value->rValue = model->BSIM4v5pdibl2; return(OK); case BSIM4v5_MOD_PDIBLB: value->rValue = model->BSIM4v5pdiblb; return(OK); case BSIM4v5_MOD_PSCBE1: value->rValue = model->BSIM4v5pscbe1; return(OK); case BSIM4v5_MOD_PSCBE2: value->rValue = model->BSIM4v5pscbe2; return(OK); case BSIM4v5_MOD_PVAG: value->rValue = model->BSIM4v5pvag; return(OK); case BSIM4v5_MOD_WR: value->rValue = model->BSIM4v5wr; return(OK); case BSIM4v5_MOD_DWG: value->rValue = model->BSIM4v5dwg; return(OK); case BSIM4v5_MOD_DWB: value->rValue = model->BSIM4v5dwb; return(OK); case BSIM4v5_MOD_B0: value->rValue = model->BSIM4v5b0; return(OK); case BSIM4v5_MOD_B1: value->rValue = model->BSIM4v5b1; return(OK); case BSIM4v5_MOD_ALPHA0: value->rValue = model->BSIM4v5alpha0; return(OK); case BSIM4v5_MOD_ALPHA1: value->rValue = model->BSIM4v5alpha1; return(OK); case BSIM4v5_MOD_BETA0: value->rValue = model->BSIM4v5beta0; return(OK); case BSIM4v5_MOD_AGIDL: value->rValue = model->BSIM4v5agidl; return(OK); case BSIM4v5_MOD_BGIDL: value->rValue = model->BSIM4v5bgidl; return(OK); case BSIM4v5_MOD_CGIDL: value->rValue = model->BSIM4v5cgidl; return(OK); case BSIM4v5_MOD_EGIDL: value->rValue = model->BSIM4v5egidl; return(OK); case BSIM4v5_MOD_AIGC: value->rValue = model->BSIM4v5aigc; return(OK); case BSIM4v5_MOD_BIGC: value->rValue = model->BSIM4v5bigc; return(OK); case BSIM4v5_MOD_CIGC: value->rValue = model->BSIM4v5cigc; return(OK); case BSIM4v5_MOD_AIGSD: value->rValue = model->BSIM4v5aigsd; return(OK); case BSIM4v5_MOD_BIGSD: value->rValue = model->BSIM4v5bigsd; return(OK); case BSIM4v5_MOD_CIGSD: value->rValue = model->BSIM4v5cigsd; return(OK); case BSIM4v5_MOD_AIGBACC: value->rValue = model->BSIM4v5aigbacc; return(OK); case BSIM4v5_MOD_BIGBACC: value->rValue = model->BSIM4v5bigbacc; return(OK); case BSIM4v5_MOD_CIGBACC: value->rValue = model->BSIM4v5cigbacc; return(OK); case BSIM4v5_MOD_AIGBINV: value->rValue = model->BSIM4v5aigbinv; return(OK); case BSIM4v5_MOD_BIGBINV: value->rValue = model->BSIM4v5bigbinv; return(OK); case BSIM4v5_MOD_CIGBINV: value->rValue = model->BSIM4v5cigbinv; return(OK); case BSIM4v5_MOD_NIGC: value->rValue = model->BSIM4v5nigc; return(OK); case BSIM4v5_MOD_NIGBACC: value->rValue = model->BSIM4v5nigbacc; return(OK); case BSIM4v5_MOD_NIGBINV: value->rValue = model->BSIM4v5nigbinv; return(OK); case BSIM4v5_MOD_NTOX: value->rValue = model->BSIM4v5ntox; return(OK); case BSIM4v5_MOD_EIGBINV: value->rValue = model->BSIM4v5eigbinv; return(OK); case BSIM4v5_MOD_PIGCD: value->rValue = model->BSIM4v5pigcd; return(OK); case BSIM4v5_MOD_POXEDGE: value->rValue = model->BSIM4v5poxedge; return(OK); case BSIM4v5_MOD_PHIN: value->rValue = model->BSIM4v5phin; return(OK); case BSIM4v5_MOD_XRCRG1: value->rValue = model->BSIM4v5xrcrg1; return(OK); case BSIM4v5_MOD_XRCRG2: value->rValue = model->BSIM4v5xrcrg2; return(OK); case BSIM4v5_MOD_TNOIA: value->rValue = model->BSIM4v5tnoia; return(OK); case BSIM4v5_MOD_TNOIB: value->rValue = model->BSIM4v5tnoib; return(OK); case BSIM4v5_MOD_RNOIA: value->rValue = model->BSIM4v5rnoia; return(OK); case BSIM4v5_MOD_RNOIB: value->rValue = model->BSIM4v5rnoib; return(OK); case BSIM4v5_MOD_NTNOI: value->rValue = model->BSIM4v5ntnoi; return(OK); case BSIM4v5_MOD_IJTHDFWD: value->rValue = model->BSIM4v5ijthdfwd; return(OK); case BSIM4v5_MOD_IJTHSFWD: value->rValue = model->BSIM4v5ijthsfwd; return(OK); case BSIM4v5_MOD_IJTHDREV: value->rValue = model->BSIM4v5ijthdrev; return(OK); case BSIM4v5_MOD_IJTHSREV: value->rValue = model->BSIM4v5ijthsrev; return(OK); case BSIM4v5_MOD_XJBVD: value->rValue = model->BSIM4v5xjbvd; return(OK); case BSIM4v5_MOD_XJBVS: value->rValue = model->BSIM4v5xjbvs; return(OK); case BSIM4v5_MOD_BVD: value->rValue = model->BSIM4v5bvd; return(OK); case BSIM4v5_MOD_BVS: value->rValue = model->BSIM4v5bvs; return(OK); case BSIM4v5_MOD_VFB: value->rValue = model->BSIM4v5vfb; return(OK); case BSIM4v5_MOD_JTSS: value->rValue = model->BSIM4v5jtss; return(OK); case BSIM4v5_MOD_JTSD: value->rValue = model->BSIM4v5jtsd; return(OK); case BSIM4v5_MOD_JTSSWS: value->rValue = model->BSIM4v5jtssws; return(OK); case BSIM4v5_MOD_JTSSWD: value->rValue = model->BSIM4v5jtsswd; return(OK); case BSIM4v5_MOD_JTSSWGS: value->rValue = model->BSIM4v5jtsswgs; return(OK); case BSIM4v5_MOD_JTSSWGD: value->rValue = model->BSIM4v5jtsswgd; return(OK); case BSIM4v5_MOD_NJTS: value->rValue = model->BSIM4v5njts; return(OK); case BSIM4v5_MOD_NJTSSW: value->rValue = model->BSIM4v5njtssw; return(OK); case BSIM4v5_MOD_NJTSSWG: value->rValue = model->BSIM4v5njtsswg; return(OK); case BSIM4v5_MOD_XTSS: value->rValue = model->BSIM4v5xtss; return(OK); case BSIM4v5_MOD_XTSD: value->rValue = model->BSIM4v5xtsd; return(OK); case BSIM4v5_MOD_XTSSWS: value->rValue = model->BSIM4v5xtssws; return(OK); case BSIM4v5_MOD_XTSSWD: value->rValue = model->BSIM4v5xtsswd; return(OK); case BSIM4v5_MOD_XTSSWGS: value->rValue = model->BSIM4v5xtsswgs; return(OK); case BSIM4v5_MOD_XTSSWGD: value->rValue = model->BSIM4v5xtsswgd; return(OK); case BSIM4v5_MOD_TNJTS: value->rValue = model->BSIM4v5tnjts; return(OK); case BSIM4v5_MOD_TNJTSSW: value->rValue = model->BSIM4v5tnjtssw; return(OK); case BSIM4v5_MOD_TNJTSSWG: value->rValue = model->BSIM4v5tnjtsswg; return(OK); case BSIM4v5_MOD_VTSS: value->rValue = model->BSIM4v5vtss; return(OK); case BSIM4v5_MOD_VTSD: value->rValue = model->BSIM4v5vtsd; return(OK); case BSIM4v5_MOD_VTSSWS: value->rValue = model->BSIM4v5vtssws; return(OK); case BSIM4v5_MOD_VTSSWD: value->rValue = model->BSIM4v5vtsswd; return(OK); case BSIM4v5_MOD_VTSSWGS: value->rValue = model->BSIM4v5vtsswgs; return(OK); case BSIM4v5_MOD_VTSSWGD: value->rValue = model->BSIM4v5vtsswgd; return(OK); case BSIM4v5_MOD_GBMIN: value->rValue = model->BSIM4v5gbmin; return(OK); case BSIM4v5_MOD_RBDB: value->rValue = model->BSIM4v5rbdb; return(OK); case BSIM4v5_MOD_RBPB: value->rValue = model->BSIM4v5rbpb; return(OK); case BSIM4v5_MOD_RBSB: value->rValue = model->BSIM4v5rbsb; return(OK); case BSIM4v5_MOD_RBPS: value->rValue = model->BSIM4v5rbps; return(OK); case BSIM4v5_MOD_RBPD: value->rValue = model->BSIM4v5rbpd; return(OK); case BSIM4v5_MOD_RBPS0: value->rValue = model->BSIM4v5rbps0; return(OK); case BSIM4v5_MOD_RBPSL: value->rValue = model->BSIM4v5rbpsl; return(OK); case BSIM4v5_MOD_RBPSW: value->rValue = model->BSIM4v5rbpsw; return(OK); case BSIM4v5_MOD_RBPSNF: value->rValue = model->BSIM4v5rbpsnf; return(OK); case BSIM4v5_MOD_RBPD0: value->rValue = model->BSIM4v5rbpd0; return(OK); case BSIM4v5_MOD_RBPDL: value->rValue = model->BSIM4v5rbpdl; return(OK); case BSIM4v5_MOD_RBPDW: value->rValue = model->BSIM4v5rbpdw; return(OK); case BSIM4v5_MOD_RBPDNF: value->rValue = model->BSIM4v5rbpdnf; return(OK); case BSIM4v5_MOD_RBPBX0: value->rValue = model->BSIM4v5rbpbx0; return(OK); case BSIM4v5_MOD_RBPBXL: value->rValue = model->BSIM4v5rbpbxl; return(OK); case BSIM4v5_MOD_RBPBXW: value->rValue = model->BSIM4v5rbpbxw; return(OK); case BSIM4v5_MOD_RBPBXNF: value->rValue = model->BSIM4v5rbpbxnf; return(OK); case BSIM4v5_MOD_RBPBY0: value->rValue = model->BSIM4v5rbpby0; return(OK); case BSIM4v5_MOD_RBPBYL: value->rValue = model->BSIM4v5rbpbyl; return(OK); case BSIM4v5_MOD_RBPBYW: value->rValue = model->BSIM4v5rbpbyw; return(OK); case BSIM4v5_MOD_RBPBYNF: value->rValue = model->BSIM4v5rbpbynf; return(OK); case BSIM4v5_MOD_RBSBX0: value->rValue = model->BSIM4v5rbsbx0; return(OK); case BSIM4v5_MOD_RBSBY0: value->rValue = model->BSIM4v5rbsby0; return(OK); case BSIM4v5_MOD_RBDBX0: value->rValue = model->BSIM4v5rbdbx0; return(OK); case BSIM4v5_MOD_RBDBY0: value->rValue = model->BSIM4v5rbdby0; return(OK); case BSIM4v5_MOD_RBSDBXL: value->rValue = model->BSIM4v5rbsdbxl; return(OK); case BSIM4v5_MOD_RBSDBXW: value->rValue = model->BSIM4v5rbsdbxw; return(OK); case BSIM4v5_MOD_RBSDBXNF: value->rValue = model->BSIM4v5rbsdbxnf; return(OK); case BSIM4v5_MOD_RBSDBYL: value->rValue = model->BSIM4v5rbsdbyl; return(OK); case BSIM4v5_MOD_RBSDBYW: value->rValue = model->BSIM4v5rbsdbyw; return(OK); case BSIM4v5_MOD_RBSDBYNF: value->rValue = model->BSIM4v5rbsdbynf; return(OK); case BSIM4v5_MOD_CGSL: value->rValue = model->BSIM4v5cgsl; return(OK); case BSIM4v5_MOD_CGDL: value->rValue = model->BSIM4v5cgdl; return(OK); case BSIM4v5_MOD_CKAPPAS: value->rValue = model->BSIM4v5ckappas; return(OK); case BSIM4v5_MOD_CKAPPAD: value->rValue = model->BSIM4v5ckappad; return(OK); case BSIM4v5_MOD_CF: value->rValue = model->BSIM4v5cf; return(OK); case BSIM4v5_MOD_CLC: value->rValue = model->BSIM4v5clc; return(OK); case BSIM4v5_MOD_CLE: value->rValue = model->BSIM4v5cle; return(OK); case BSIM4v5_MOD_DWC: value->rValue = model->BSIM4v5dwc; return(OK); case BSIM4v5_MOD_DLC: value->rValue = model->BSIM4v5dlc; return(OK); case BSIM4v5_MOD_XW: value->rValue = model->BSIM4v5xw; return(OK); case BSIM4v5_MOD_XL: value->rValue = model->BSIM4v5xl; return(OK); case BSIM4v5_MOD_DLCIG: value->rValue = model->BSIM4v5dlcig; return(OK); case BSIM4v5_MOD_DWJ: value->rValue = model->BSIM4v5dwj; return(OK); case BSIM4v5_MOD_VFBCV: value->rValue = model->BSIM4v5vfbcv; return(OK); case BSIM4v5_MOD_ACDE: value->rValue = model->BSIM4v5acde; return(OK); case BSIM4v5_MOD_MOIN: value->rValue = model->BSIM4v5moin; return(OK); case BSIM4v5_MOD_NOFF: value->rValue = model->BSIM4v5noff; return(OK); case BSIM4v5_MOD_VOFFCV: value->rValue = model->BSIM4v5voffcv; return(OK); case BSIM4v5_MOD_DMCG: value->rValue = model->BSIM4v5dmcg; return(OK); case BSIM4v5_MOD_DMCI: value->rValue = model->BSIM4v5dmci; return(OK); case BSIM4v5_MOD_DMDG: value->rValue = model->BSIM4v5dmdg; return(OK); case BSIM4v5_MOD_DMCGT: value->rValue = model->BSIM4v5dmcgt; return(OK); case BSIM4v5_MOD_XGW: value->rValue = model->BSIM4v5xgw; return(OK); case BSIM4v5_MOD_XGL: value->rValue = model->BSIM4v5xgl; return(OK); case BSIM4v5_MOD_RSHG: value->rValue = model->BSIM4v5rshg; return(OK); case BSIM4v5_MOD_NGCON: value->rValue = model->BSIM4v5ngcon; return(OK); case BSIM4v5_MOD_TCJ: value->rValue = model->BSIM4v5tcj; return(OK); case BSIM4v5_MOD_TPB: value->rValue = model->BSIM4v5tpb; return(OK); case BSIM4v5_MOD_TCJSW: value->rValue = model->BSIM4v5tcjsw; return(OK); case BSIM4v5_MOD_TPBSW: value->rValue = model->BSIM4v5tpbsw; return(OK); case BSIM4v5_MOD_TCJSWG: value->rValue = model->BSIM4v5tcjswg; return(OK); case BSIM4v5_MOD_TPBSWG: value->rValue = model->BSIM4v5tpbswg; return(OK); /* Length dependence */ case BSIM4v5_MOD_LCDSC : value->rValue = model->BSIM4v5lcdsc; return(OK); case BSIM4v5_MOD_LCDSCB : value->rValue = model->BSIM4v5lcdscb; return(OK); case BSIM4v5_MOD_LCDSCD : value->rValue = model->BSIM4v5lcdscd; return(OK); case BSIM4v5_MOD_LCIT : value->rValue = model->BSIM4v5lcit; return(OK); case BSIM4v5_MOD_LNFACTOR : value->rValue = model->BSIM4v5lnfactor; return(OK); case BSIM4v5_MOD_LXJ: value->rValue = model->BSIM4v5lxj; return(OK); case BSIM4v5_MOD_LVSAT: value->rValue = model->BSIM4v5lvsat; return(OK); case BSIM4v5_MOD_LAT: value->rValue = model->BSIM4v5lat; return(OK); case BSIM4v5_MOD_LA0: value->rValue = model->BSIM4v5la0; return(OK); case BSIM4v5_MOD_LAGS: value->rValue = model->BSIM4v5lags; return(OK); case BSIM4v5_MOD_LA1: value->rValue = model->BSIM4v5la1; return(OK); case BSIM4v5_MOD_LA2: value->rValue = model->BSIM4v5la2; return(OK); case BSIM4v5_MOD_LKETA: value->rValue = model->BSIM4v5lketa; return(OK); case BSIM4v5_MOD_LNSUB: value->rValue = model->BSIM4v5lnsub; return(OK); case BSIM4v5_MOD_LNDEP: value->rValue = model->BSIM4v5lndep; return(OK); case BSIM4v5_MOD_LNSD: value->rValue = model->BSIM4v5lnsd; return(OK); case BSIM4v5_MOD_LNGATE: value->rValue = model->BSIM4v5lngate; return(OK); case BSIM4v5_MOD_LGAMMA1: value->rValue = model->BSIM4v5lgamma1; return(OK); case BSIM4v5_MOD_LGAMMA2: value->rValue = model->BSIM4v5lgamma2; return(OK); case BSIM4v5_MOD_LVBX: value->rValue = model->BSIM4v5lvbx; return(OK); case BSIM4v5_MOD_LVBM: value->rValue = model->BSIM4v5lvbm; return(OK); case BSIM4v5_MOD_LXT: value->rValue = model->BSIM4v5lxt; return(OK); case BSIM4v5_MOD_LK1: value->rValue = model->BSIM4v5lk1; return(OK); case BSIM4v5_MOD_LKT1: value->rValue = model->BSIM4v5lkt1; return(OK); case BSIM4v5_MOD_LKT1L: value->rValue = model->BSIM4v5lkt1l; return(OK); case BSIM4v5_MOD_LKT2 : value->rValue = model->BSIM4v5lkt2; return(OK); case BSIM4v5_MOD_LK2 : value->rValue = model->BSIM4v5lk2; return(OK); case BSIM4v5_MOD_LK3: value->rValue = model->BSIM4v5lk3; return(OK); case BSIM4v5_MOD_LK3B: value->rValue = model->BSIM4v5lk3b; return(OK); case BSIM4v5_MOD_LW0: value->rValue = model->BSIM4v5lw0; return(OK); case BSIM4v5_MOD_LLPE0: value->rValue = model->BSIM4v5llpe0; return(OK); case BSIM4v5_MOD_LLPEB: value->rValue = model->BSIM4v5llpeb; return(OK); case BSIM4v5_MOD_LDVTP0: value->rValue = model->BSIM4v5ldvtp0; return(OK); case BSIM4v5_MOD_LDVTP1: value->rValue = model->BSIM4v5ldvtp1; return(OK); case BSIM4v5_MOD_LDVT0: value->rValue = model->BSIM4v5ldvt0; return(OK); case BSIM4v5_MOD_LDVT1 : value->rValue = model->BSIM4v5ldvt1; return(OK); case BSIM4v5_MOD_LDVT2 : value->rValue = model->BSIM4v5ldvt2; return(OK); case BSIM4v5_MOD_LDVT0W : value->rValue = model->BSIM4v5ldvt0w; return(OK); case BSIM4v5_MOD_LDVT1W : value->rValue = model->BSIM4v5ldvt1w; return(OK); case BSIM4v5_MOD_LDVT2W : value->rValue = model->BSIM4v5ldvt2w; return(OK); case BSIM4v5_MOD_LDROUT : value->rValue = model->BSIM4v5ldrout; return(OK); case BSIM4v5_MOD_LDSUB : value->rValue = model->BSIM4v5ldsub; return(OK); case BSIM4v5_MOD_LVTH0: value->rValue = model->BSIM4v5lvth0; return(OK); case BSIM4v5_MOD_LUA: value->rValue = model->BSIM4v5lua; return(OK); case BSIM4v5_MOD_LUA1: value->rValue = model->BSIM4v5lua1; return(OK); case BSIM4v5_MOD_LUB: value->rValue = model->BSIM4v5lub; return(OK); case BSIM4v5_MOD_LUB1: value->rValue = model->BSIM4v5lub1; return(OK); case BSIM4v5_MOD_LUC: value->rValue = model->BSIM4v5luc; return(OK); case BSIM4v5_MOD_LUC1: value->rValue = model->BSIM4v5luc1; return(OK); case BSIM4v5_MOD_LUD: value->rValue = model->BSIM4v5lud; return(OK); case BSIM4v5_MOD_LUD1: value->rValue = model->BSIM4v5lud1; return(OK); case BSIM4v5_MOD_LUP: value->rValue = model->BSIM4v5lup; return(OK); case BSIM4v5_MOD_LLP: value->rValue = model->BSIM4v5llp; return(OK); case BSIM4v5_MOD_LU0: value->rValue = model->BSIM4v5lu0; return(OK); case BSIM4v5_MOD_LUTE: value->rValue = model->BSIM4v5lute; return(OK); case BSIM4v5_MOD_LVOFF: value->rValue = model->BSIM4v5lvoff; return(OK); case BSIM4v5_MOD_LTVOFF: value->rValue = model->BSIM4v5ltvoff; return(OK); case BSIM4v5_MOD_LMINV: value->rValue = model->BSIM4v5lminv; return(OK); case BSIM4v5_MOD_LFPROUT: value->rValue = model->BSIM4v5lfprout; return(OK); case BSIM4v5_MOD_LPDITS: value->rValue = model->BSIM4v5lpdits; return(OK); case BSIM4v5_MOD_LPDITSD: value->rValue = model->BSIM4v5lpditsd; return(OK); case BSIM4v5_MOD_LDELTA: value->rValue = model->BSIM4v5ldelta; return(OK); case BSIM4v5_MOD_LRDSW: value->rValue = model->BSIM4v5lrdsw; return(OK); case BSIM4v5_MOD_LRDW: value->rValue = model->BSIM4v5lrdw; return(OK); case BSIM4v5_MOD_LRSW: value->rValue = model->BSIM4v5lrsw; return(OK); case BSIM4v5_MOD_LPRWB: value->rValue = model->BSIM4v5lprwb; return(OK); case BSIM4v5_MOD_LPRWG: value->rValue = model->BSIM4v5lprwg; return(OK); case BSIM4v5_MOD_LPRT: value->rValue = model->BSIM4v5lprt; return(OK); case BSIM4v5_MOD_LETA0: value->rValue = model->BSIM4v5leta0; return(OK); case BSIM4v5_MOD_LETAB: value->rValue = model->BSIM4v5letab; return(OK); case BSIM4v5_MOD_LPCLM: value->rValue = model->BSIM4v5lpclm; return(OK); case BSIM4v5_MOD_LPDIBL1: value->rValue = model->BSIM4v5lpdibl1; return(OK); case BSIM4v5_MOD_LPDIBL2: value->rValue = model->BSIM4v5lpdibl2; return(OK); case BSIM4v5_MOD_LPDIBLB: value->rValue = model->BSIM4v5lpdiblb; return(OK); case BSIM4v5_MOD_LPSCBE1: value->rValue = model->BSIM4v5lpscbe1; return(OK); case BSIM4v5_MOD_LPSCBE2: value->rValue = model->BSIM4v5lpscbe2; return(OK); case BSIM4v5_MOD_LPVAG: value->rValue = model->BSIM4v5lpvag; return(OK); case BSIM4v5_MOD_LWR: value->rValue = model->BSIM4v5lwr; return(OK); case BSIM4v5_MOD_LDWG: value->rValue = model->BSIM4v5ldwg; return(OK); case BSIM4v5_MOD_LDWB: value->rValue = model->BSIM4v5ldwb; return(OK); case BSIM4v5_MOD_LB0: value->rValue = model->BSIM4v5lb0; return(OK); case BSIM4v5_MOD_LB1: value->rValue = model->BSIM4v5lb1; return(OK); case BSIM4v5_MOD_LALPHA0: value->rValue = model->BSIM4v5lalpha0; return(OK); case BSIM4v5_MOD_LALPHA1: value->rValue = model->BSIM4v5lalpha1; return(OK); case BSIM4v5_MOD_LBETA0: value->rValue = model->BSIM4v5lbeta0; return(OK); case BSIM4v5_MOD_LAGIDL: value->rValue = model->BSIM4v5lagidl; return(OK); case BSIM4v5_MOD_LBGIDL: value->rValue = model->BSIM4v5lbgidl; return(OK); case BSIM4v5_MOD_LCGIDL: value->rValue = model->BSIM4v5lcgidl; return(OK); case BSIM4v5_MOD_LEGIDL: value->rValue = model->BSIM4v5legidl; return(OK); case BSIM4v5_MOD_LAIGC: value->rValue = model->BSIM4v5laigc; return(OK); case BSIM4v5_MOD_LBIGC: value->rValue = model->BSIM4v5lbigc; return(OK); case BSIM4v5_MOD_LCIGC: value->rValue = model->BSIM4v5lcigc; return(OK); case BSIM4v5_MOD_LAIGSD: value->rValue = model->BSIM4v5laigsd; return(OK); case BSIM4v5_MOD_LBIGSD: value->rValue = model->BSIM4v5lbigsd; return(OK); case BSIM4v5_MOD_LCIGSD: value->rValue = model->BSIM4v5lcigsd; return(OK); case BSIM4v5_MOD_LAIGBACC: value->rValue = model->BSIM4v5laigbacc; return(OK); case BSIM4v5_MOD_LBIGBACC: value->rValue = model->BSIM4v5lbigbacc; return(OK); case BSIM4v5_MOD_LCIGBACC: value->rValue = model->BSIM4v5lcigbacc; return(OK); case BSIM4v5_MOD_LAIGBINV: value->rValue = model->BSIM4v5laigbinv; return(OK); case BSIM4v5_MOD_LBIGBINV: value->rValue = model->BSIM4v5lbigbinv; return(OK); case BSIM4v5_MOD_LCIGBINV: value->rValue = model->BSIM4v5lcigbinv; return(OK); case BSIM4v5_MOD_LNIGC: value->rValue = model->BSIM4v5lnigc; return(OK); case BSIM4v5_MOD_LNIGBACC: value->rValue = model->BSIM4v5lnigbacc; return(OK); case BSIM4v5_MOD_LNIGBINV: value->rValue = model->BSIM4v5lnigbinv; return(OK); case BSIM4v5_MOD_LNTOX: value->rValue = model->BSIM4v5lntox; return(OK); case BSIM4v5_MOD_LEIGBINV: value->rValue = model->BSIM4v5leigbinv; return(OK); case BSIM4v5_MOD_LPIGCD: value->rValue = model->BSIM4v5lpigcd; return(OK); case BSIM4v5_MOD_LPOXEDGE: value->rValue = model->BSIM4v5lpoxedge; return(OK); case BSIM4v5_MOD_LPHIN: value->rValue = model->BSIM4v5lphin; return(OK); case BSIM4v5_MOD_LXRCRG1: value->rValue = model->BSIM4v5lxrcrg1; return(OK); case BSIM4v5_MOD_LXRCRG2: value->rValue = model->BSIM4v5lxrcrg2; return(OK); case BSIM4v5_MOD_LEU: value->rValue = model->BSIM4v5leu; return(OK); case BSIM4v5_MOD_LVFB: value->rValue = model->BSIM4v5lvfb; return(OK); case BSIM4v5_MOD_LCGSL: value->rValue = model->BSIM4v5lcgsl; return(OK); case BSIM4v5_MOD_LCGDL: value->rValue = model->BSIM4v5lcgdl; return(OK); case BSIM4v5_MOD_LCKAPPAS: value->rValue = model->BSIM4v5lckappas; return(OK); case BSIM4v5_MOD_LCKAPPAD: value->rValue = model->BSIM4v5lckappad; return(OK); case BSIM4v5_MOD_LCF: value->rValue = model->BSIM4v5lcf; return(OK); case BSIM4v5_MOD_LCLC: value->rValue = model->BSIM4v5lclc; return(OK); case BSIM4v5_MOD_LCLE: value->rValue = model->BSIM4v5lcle; return(OK); case BSIM4v5_MOD_LVFBCV: value->rValue = model->BSIM4v5lvfbcv; return(OK); case BSIM4v5_MOD_LACDE: value->rValue = model->BSIM4v5lacde; return(OK); case BSIM4v5_MOD_LMOIN: value->rValue = model->BSIM4v5lmoin; return(OK); case BSIM4v5_MOD_LNOFF: value->rValue = model->BSIM4v5lnoff; return(OK); case BSIM4v5_MOD_LVOFFCV: value->rValue = model->BSIM4v5lvoffcv; return(OK); case BSIM4v5_MOD_LVFBSDOFF: value->rValue = model->BSIM4v5lvfbsdoff; return(OK); case BSIM4v5_MOD_LTVFBSDOFF: value->rValue = model->BSIM4v5ltvfbsdoff; return(OK); /* Width dependence */ case BSIM4v5_MOD_WCDSC : value->rValue = model->BSIM4v5wcdsc; return(OK); case BSIM4v5_MOD_WCDSCB : value->rValue = model->BSIM4v5wcdscb; return(OK); case BSIM4v5_MOD_WCDSCD : value->rValue = model->BSIM4v5wcdscd; return(OK); case BSIM4v5_MOD_WCIT : value->rValue = model->BSIM4v5wcit; return(OK); case BSIM4v5_MOD_WNFACTOR : value->rValue = model->BSIM4v5wnfactor; return(OK); case BSIM4v5_MOD_WXJ: value->rValue = model->BSIM4v5wxj; return(OK); case BSIM4v5_MOD_WVSAT: value->rValue = model->BSIM4v5wvsat; return(OK); case BSIM4v5_MOD_WAT: value->rValue = model->BSIM4v5wat; return(OK); case BSIM4v5_MOD_WA0: value->rValue = model->BSIM4v5wa0; return(OK); case BSIM4v5_MOD_WAGS: value->rValue = model->BSIM4v5wags; return(OK); case BSIM4v5_MOD_WA1: value->rValue = model->BSIM4v5wa1; return(OK); case BSIM4v5_MOD_WA2: value->rValue = model->BSIM4v5wa2; return(OK); case BSIM4v5_MOD_WKETA: value->rValue = model->BSIM4v5wketa; return(OK); case BSIM4v5_MOD_WNSUB: value->rValue = model->BSIM4v5wnsub; return(OK); case BSIM4v5_MOD_WNDEP: value->rValue = model->BSIM4v5wndep; return(OK); case BSIM4v5_MOD_WNSD: value->rValue = model->BSIM4v5wnsd; return(OK); case BSIM4v5_MOD_WNGATE: value->rValue = model->BSIM4v5wngate; return(OK); case BSIM4v5_MOD_WGAMMA1: value->rValue = model->BSIM4v5wgamma1; return(OK); case BSIM4v5_MOD_WGAMMA2: value->rValue = model->BSIM4v5wgamma2; return(OK); case BSIM4v5_MOD_WVBX: value->rValue = model->BSIM4v5wvbx; return(OK); case BSIM4v5_MOD_WVBM: value->rValue = model->BSIM4v5wvbm; return(OK); case BSIM4v5_MOD_WXT: value->rValue = model->BSIM4v5wxt; return(OK); case BSIM4v5_MOD_WK1: value->rValue = model->BSIM4v5wk1; return(OK); case BSIM4v5_MOD_WKT1: value->rValue = model->BSIM4v5wkt1; return(OK); case BSIM4v5_MOD_WKT1L: value->rValue = model->BSIM4v5wkt1l; return(OK); case BSIM4v5_MOD_WKT2 : value->rValue = model->BSIM4v5wkt2; return(OK); case BSIM4v5_MOD_WK2 : value->rValue = model->BSIM4v5wk2; return(OK); case BSIM4v5_MOD_WK3: value->rValue = model->BSIM4v5wk3; return(OK); case BSIM4v5_MOD_WK3B: value->rValue = model->BSIM4v5wk3b; return(OK); case BSIM4v5_MOD_WW0: value->rValue = model->BSIM4v5ww0; return(OK); case BSIM4v5_MOD_WLPE0: value->rValue = model->BSIM4v5wlpe0; return(OK); case BSIM4v5_MOD_WDVTP0: value->rValue = model->BSIM4v5wdvtp0; return(OK); case BSIM4v5_MOD_WDVTP1: value->rValue = model->BSIM4v5wdvtp1; return(OK); case BSIM4v5_MOD_WLPEB: value->rValue = model->BSIM4v5wlpeb; return(OK); case BSIM4v5_MOD_WDVT0: value->rValue = model->BSIM4v5wdvt0; return(OK); case BSIM4v5_MOD_WDVT1 : value->rValue = model->BSIM4v5wdvt1; return(OK); case BSIM4v5_MOD_WDVT2 : value->rValue = model->BSIM4v5wdvt2; return(OK); case BSIM4v5_MOD_WDVT0W : value->rValue = model->BSIM4v5wdvt0w; return(OK); case BSIM4v5_MOD_WDVT1W : value->rValue = model->BSIM4v5wdvt1w; return(OK); case BSIM4v5_MOD_WDVT2W : value->rValue = model->BSIM4v5wdvt2w; return(OK); case BSIM4v5_MOD_WDROUT : value->rValue = model->BSIM4v5wdrout; return(OK); case BSIM4v5_MOD_WDSUB : value->rValue = model->BSIM4v5wdsub; return(OK); case BSIM4v5_MOD_WVTH0: value->rValue = model->BSIM4v5wvth0; return(OK); case BSIM4v5_MOD_WUA: value->rValue = model->BSIM4v5wua; return(OK); case BSIM4v5_MOD_WUA1: value->rValue = model->BSIM4v5wua1; return(OK); case BSIM4v5_MOD_WUB: value->rValue = model->BSIM4v5wub; return(OK); case BSIM4v5_MOD_WUB1: value->rValue = model->BSIM4v5wub1; return(OK); case BSIM4v5_MOD_WUC: value->rValue = model->BSIM4v5wuc; return(OK); case BSIM4v5_MOD_WUC1: value->rValue = model->BSIM4v5wuc1; return(OK); case BSIM4v5_MOD_WUD: value->rValue = model->BSIM4v5wud; return(OK); case BSIM4v5_MOD_WUD1: value->rValue = model->BSIM4v5wud1; return(OK); case BSIM4v5_MOD_WUP: value->rValue = model->BSIM4v5wup; return(OK); case BSIM4v5_MOD_WLP: value->rValue = model->BSIM4v5wlp; return(OK); case BSIM4v5_MOD_WU0: value->rValue = model->BSIM4v5wu0; return(OK); case BSIM4v5_MOD_WUTE: value->rValue = model->BSIM4v5wute; return(OK); case BSIM4v5_MOD_WVOFF: value->rValue = model->BSIM4v5wvoff; return(OK); case BSIM4v5_MOD_WTVOFF: value->rValue = model->BSIM4v5wtvoff; return(OK); case BSIM4v5_MOD_WMINV: value->rValue = model->BSIM4v5wminv; return(OK); case BSIM4v5_MOD_WFPROUT: value->rValue = model->BSIM4v5wfprout; return(OK); case BSIM4v5_MOD_WPDITS: value->rValue = model->BSIM4v5wpdits; return(OK); case BSIM4v5_MOD_WPDITSD: value->rValue = model->BSIM4v5wpditsd; return(OK); case BSIM4v5_MOD_WDELTA: value->rValue = model->BSIM4v5wdelta; return(OK); case BSIM4v5_MOD_WRDSW: value->rValue = model->BSIM4v5wrdsw; return(OK); case BSIM4v5_MOD_WRDW: value->rValue = model->BSIM4v5wrdw; return(OK); case BSIM4v5_MOD_WRSW: value->rValue = model->BSIM4v5wrsw; return(OK); case BSIM4v5_MOD_WPRWB: value->rValue = model->BSIM4v5wprwb; return(OK); case BSIM4v5_MOD_WPRWG: value->rValue = model->BSIM4v5wprwg; return(OK); case BSIM4v5_MOD_WPRT: value->rValue = model->BSIM4v5wprt; return(OK); case BSIM4v5_MOD_WETA0: value->rValue = model->BSIM4v5weta0; return(OK); case BSIM4v5_MOD_WETAB: value->rValue = model->BSIM4v5wetab; return(OK); case BSIM4v5_MOD_WPCLM: value->rValue = model->BSIM4v5wpclm; return(OK); case BSIM4v5_MOD_WPDIBL1: value->rValue = model->BSIM4v5wpdibl1; return(OK); case BSIM4v5_MOD_WPDIBL2: value->rValue = model->BSIM4v5wpdibl2; return(OK); case BSIM4v5_MOD_WPDIBLB: value->rValue = model->BSIM4v5wpdiblb; return(OK); case BSIM4v5_MOD_WPSCBE1: value->rValue = model->BSIM4v5wpscbe1; return(OK); case BSIM4v5_MOD_WPSCBE2: value->rValue = model->BSIM4v5wpscbe2; return(OK); case BSIM4v5_MOD_WPVAG: value->rValue = model->BSIM4v5wpvag; return(OK); case BSIM4v5_MOD_WWR: value->rValue = model->BSIM4v5wwr; return(OK); case BSIM4v5_MOD_WDWG: value->rValue = model->BSIM4v5wdwg; return(OK); case BSIM4v5_MOD_WDWB: value->rValue = model->BSIM4v5wdwb; return(OK); case BSIM4v5_MOD_WB0: value->rValue = model->BSIM4v5wb0; return(OK); case BSIM4v5_MOD_WB1: value->rValue = model->BSIM4v5wb1; return(OK); case BSIM4v5_MOD_WALPHA0: value->rValue = model->BSIM4v5walpha0; return(OK); case BSIM4v5_MOD_WALPHA1: value->rValue = model->BSIM4v5walpha1; return(OK); case BSIM4v5_MOD_WBETA0: value->rValue = model->BSIM4v5wbeta0; return(OK); case BSIM4v5_MOD_WAGIDL: value->rValue = model->BSIM4v5wagidl; return(OK); case BSIM4v5_MOD_WBGIDL: value->rValue = model->BSIM4v5wbgidl; return(OK); case BSIM4v5_MOD_WCGIDL: value->rValue = model->BSIM4v5wcgidl; return(OK); case BSIM4v5_MOD_WEGIDL: value->rValue = model->BSIM4v5wegidl; return(OK); case BSIM4v5_MOD_WAIGC: value->rValue = model->BSIM4v5waigc; return(OK); case BSIM4v5_MOD_WBIGC: value->rValue = model->BSIM4v5wbigc; return(OK); case BSIM4v5_MOD_WCIGC: value->rValue = model->BSIM4v5wcigc; return(OK); case BSIM4v5_MOD_WAIGSD: value->rValue = model->BSIM4v5waigsd; return(OK); case BSIM4v5_MOD_WBIGSD: value->rValue = model->BSIM4v5wbigsd; return(OK); case BSIM4v5_MOD_WCIGSD: value->rValue = model->BSIM4v5wcigsd; return(OK); case BSIM4v5_MOD_WAIGBACC: value->rValue = model->BSIM4v5waigbacc; return(OK); case BSIM4v5_MOD_WBIGBACC: value->rValue = model->BSIM4v5wbigbacc; return(OK); case BSIM4v5_MOD_WCIGBACC: value->rValue = model->BSIM4v5wcigbacc; return(OK); case BSIM4v5_MOD_WAIGBINV: value->rValue = model->BSIM4v5waigbinv; return(OK); case BSIM4v5_MOD_WBIGBINV: value->rValue = model->BSIM4v5wbigbinv; return(OK); case BSIM4v5_MOD_WCIGBINV: value->rValue = model->BSIM4v5wcigbinv; return(OK); case BSIM4v5_MOD_WNIGC: value->rValue = model->BSIM4v5wnigc; return(OK); case BSIM4v5_MOD_WNIGBACC: value->rValue = model->BSIM4v5wnigbacc; return(OK); case BSIM4v5_MOD_WNIGBINV: value->rValue = model->BSIM4v5wnigbinv; return(OK); case BSIM4v5_MOD_WNTOX: value->rValue = model->BSIM4v5wntox; return(OK); case BSIM4v5_MOD_WEIGBINV: value->rValue = model->BSIM4v5weigbinv; return(OK); case BSIM4v5_MOD_WPIGCD: value->rValue = model->BSIM4v5wpigcd; return(OK); case BSIM4v5_MOD_WPOXEDGE: value->rValue = model->BSIM4v5wpoxedge; return(OK); case BSIM4v5_MOD_WPHIN: value->rValue = model->BSIM4v5wphin; return(OK); case BSIM4v5_MOD_WXRCRG1: value->rValue = model->BSIM4v5wxrcrg1; return(OK); case BSIM4v5_MOD_WXRCRG2: value->rValue = model->BSIM4v5wxrcrg2; return(OK); case BSIM4v5_MOD_WEU: value->rValue = model->BSIM4v5weu; return(OK); case BSIM4v5_MOD_WVFB: value->rValue = model->BSIM4v5wvfb; return(OK); case BSIM4v5_MOD_WCGSL: value->rValue = model->BSIM4v5wcgsl; return(OK); case BSIM4v5_MOD_WCGDL: value->rValue = model->BSIM4v5wcgdl; return(OK); case BSIM4v5_MOD_WCKAPPAS: value->rValue = model->BSIM4v5wckappas; return(OK); case BSIM4v5_MOD_WCKAPPAD: value->rValue = model->BSIM4v5wckappad; return(OK); case BSIM4v5_MOD_WCF: value->rValue = model->BSIM4v5wcf; return(OK); case BSIM4v5_MOD_WCLC: value->rValue = model->BSIM4v5wclc; return(OK); case BSIM4v5_MOD_WCLE: value->rValue = model->BSIM4v5wcle; return(OK); case BSIM4v5_MOD_WVFBCV: value->rValue = model->BSIM4v5wvfbcv; return(OK); case BSIM4v5_MOD_WACDE: value->rValue = model->BSIM4v5wacde; return(OK); case BSIM4v5_MOD_WMOIN: value->rValue = model->BSIM4v5wmoin; return(OK); case BSIM4v5_MOD_WNOFF: value->rValue = model->BSIM4v5wnoff; return(OK); case BSIM4v5_MOD_WVOFFCV: value->rValue = model->BSIM4v5wvoffcv; return(OK); case BSIM4v5_MOD_WVFBSDOFF: value->rValue = model->BSIM4v5wvfbsdoff; return(OK); case BSIM4v5_MOD_WTVFBSDOFF: value->rValue = model->BSIM4v5wtvfbsdoff; return(OK); /* Cross-term dependence */ case BSIM4v5_MOD_PCDSC : value->rValue = model->BSIM4v5pcdsc; return(OK); case BSIM4v5_MOD_PCDSCB : value->rValue = model->BSIM4v5pcdscb; return(OK); case BSIM4v5_MOD_PCDSCD : value->rValue = model->BSIM4v5pcdscd; return(OK); case BSIM4v5_MOD_PCIT : value->rValue = model->BSIM4v5pcit; return(OK); case BSIM4v5_MOD_PNFACTOR : value->rValue = model->BSIM4v5pnfactor; return(OK); case BSIM4v5_MOD_PXJ: value->rValue = model->BSIM4v5pxj; return(OK); case BSIM4v5_MOD_PVSAT: value->rValue = model->BSIM4v5pvsat; return(OK); case BSIM4v5_MOD_PAT: value->rValue = model->BSIM4v5pat; return(OK); case BSIM4v5_MOD_PA0: value->rValue = model->BSIM4v5pa0; return(OK); case BSIM4v5_MOD_PAGS: value->rValue = model->BSIM4v5pags; return(OK); case BSIM4v5_MOD_PA1: value->rValue = model->BSIM4v5pa1; return(OK); case BSIM4v5_MOD_PA2: value->rValue = model->BSIM4v5pa2; return(OK); case BSIM4v5_MOD_PKETA: value->rValue = model->BSIM4v5pketa; return(OK); case BSIM4v5_MOD_PNSUB: value->rValue = model->BSIM4v5pnsub; return(OK); case BSIM4v5_MOD_PNDEP: value->rValue = model->BSIM4v5pndep; return(OK); case BSIM4v5_MOD_PNSD: value->rValue = model->BSIM4v5pnsd; return(OK); case BSIM4v5_MOD_PNGATE: value->rValue = model->BSIM4v5pngate; return(OK); case BSIM4v5_MOD_PGAMMA1: value->rValue = model->BSIM4v5pgamma1; return(OK); case BSIM4v5_MOD_PGAMMA2: value->rValue = model->BSIM4v5pgamma2; return(OK); case BSIM4v5_MOD_PVBX: value->rValue = model->BSIM4v5pvbx; return(OK); case BSIM4v5_MOD_PVBM: value->rValue = model->BSIM4v5pvbm; return(OK); case BSIM4v5_MOD_PXT: value->rValue = model->BSIM4v5pxt; return(OK); case BSIM4v5_MOD_PK1: value->rValue = model->BSIM4v5pk1; return(OK); case BSIM4v5_MOD_PKT1: value->rValue = model->BSIM4v5pkt1; return(OK); case BSIM4v5_MOD_PKT1L: value->rValue = model->BSIM4v5pkt1l; return(OK); case BSIM4v5_MOD_PKT2 : value->rValue = model->BSIM4v5pkt2; return(OK); case BSIM4v5_MOD_PK2 : value->rValue = model->BSIM4v5pk2; return(OK); case BSIM4v5_MOD_PK3: value->rValue = model->BSIM4v5pk3; return(OK); case BSIM4v5_MOD_PK3B: value->rValue = model->BSIM4v5pk3b; return(OK); case BSIM4v5_MOD_PW0: value->rValue = model->BSIM4v5pw0; return(OK); case BSIM4v5_MOD_PLPE0: value->rValue = model->BSIM4v5plpe0; return(OK); case BSIM4v5_MOD_PLPEB: value->rValue = model->BSIM4v5plpeb; return(OK); case BSIM4v5_MOD_PDVTP0: value->rValue = model->BSIM4v5pdvtp0; return(OK); case BSIM4v5_MOD_PDVTP1: value->rValue = model->BSIM4v5pdvtp1; return(OK); case BSIM4v5_MOD_PDVT0 : value->rValue = model->BSIM4v5pdvt0; return(OK); case BSIM4v5_MOD_PDVT1 : value->rValue = model->BSIM4v5pdvt1; return(OK); case BSIM4v5_MOD_PDVT2 : value->rValue = model->BSIM4v5pdvt2; return(OK); case BSIM4v5_MOD_PDVT0W : value->rValue = model->BSIM4v5pdvt0w; return(OK); case BSIM4v5_MOD_PDVT1W : value->rValue = model->BSIM4v5pdvt1w; return(OK); case BSIM4v5_MOD_PDVT2W : value->rValue = model->BSIM4v5pdvt2w; return(OK); case BSIM4v5_MOD_PDROUT : value->rValue = model->BSIM4v5pdrout; return(OK); case BSIM4v5_MOD_PDSUB : value->rValue = model->BSIM4v5pdsub; return(OK); case BSIM4v5_MOD_PVTH0: value->rValue = model->BSIM4v5pvth0; return(OK); case BSIM4v5_MOD_PUA: value->rValue = model->BSIM4v5pua; return(OK); case BSIM4v5_MOD_PUA1: value->rValue = model->BSIM4v5pua1; return(OK); case BSIM4v5_MOD_PUB: value->rValue = model->BSIM4v5pub; return(OK); case BSIM4v5_MOD_PUB1: value->rValue = model->BSIM4v5pub1; return(OK); case BSIM4v5_MOD_PUC: value->rValue = model->BSIM4v5puc; return(OK); case BSIM4v5_MOD_PUC1: value->rValue = model->BSIM4v5puc1; return(OK); case BSIM4v5_MOD_PUD: value->rValue = model->BSIM4v5pud; return(OK); case BSIM4v5_MOD_PUD1: value->rValue = model->BSIM4v5pud1; return(OK); case BSIM4v5_MOD_PUP: value->rValue = model->BSIM4v5pup; return(OK); case BSIM4v5_MOD_PLP: value->rValue = model->BSIM4v5plp; return(OK); case BSIM4v5_MOD_PU0: value->rValue = model->BSIM4v5pu0; return(OK); case BSIM4v5_MOD_PUTE: value->rValue = model->BSIM4v5pute; return(OK); case BSIM4v5_MOD_PVOFF: value->rValue = model->BSIM4v5pvoff; return(OK); case BSIM4v5_MOD_PTVOFF: value->rValue = model->BSIM4v5ptvoff; return(OK); case BSIM4v5_MOD_PMINV: value->rValue = model->BSIM4v5pminv; return(OK); case BSIM4v5_MOD_PFPROUT: value->rValue = model->BSIM4v5pfprout; return(OK); case BSIM4v5_MOD_PPDITS: value->rValue = model->BSIM4v5ppdits; return(OK); case BSIM4v5_MOD_PPDITSD: value->rValue = model->BSIM4v5ppditsd; return(OK); case BSIM4v5_MOD_PDELTA: value->rValue = model->BSIM4v5pdelta; return(OK); case BSIM4v5_MOD_PRDSW: value->rValue = model->BSIM4v5prdsw; return(OK); case BSIM4v5_MOD_PRDW: value->rValue = model->BSIM4v5prdw; return(OK); case BSIM4v5_MOD_PRSW: value->rValue = model->BSIM4v5prsw; return(OK); case BSIM4v5_MOD_PPRWB: value->rValue = model->BSIM4v5pprwb; return(OK); case BSIM4v5_MOD_PPRWG: value->rValue = model->BSIM4v5pprwg; return(OK); case BSIM4v5_MOD_PPRT: value->rValue = model->BSIM4v5pprt; return(OK); case BSIM4v5_MOD_PETA0: value->rValue = model->BSIM4v5peta0; return(OK); case BSIM4v5_MOD_PETAB: value->rValue = model->BSIM4v5petab; return(OK); case BSIM4v5_MOD_PPCLM: value->rValue = model->BSIM4v5ppclm; return(OK); case BSIM4v5_MOD_PPDIBL1: value->rValue = model->BSIM4v5ppdibl1; return(OK); case BSIM4v5_MOD_PPDIBL2: value->rValue = model->BSIM4v5ppdibl2; return(OK); case BSIM4v5_MOD_PPDIBLB: value->rValue = model->BSIM4v5ppdiblb; return(OK); case BSIM4v5_MOD_PPSCBE1: value->rValue = model->BSIM4v5ppscbe1; return(OK); case BSIM4v5_MOD_PPSCBE2: value->rValue = model->BSIM4v5ppscbe2; return(OK); case BSIM4v5_MOD_PPVAG: value->rValue = model->BSIM4v5ppvag; return(OK); case BSIM4v5_MOD_PWR: value->rValue = model->BSIM4v5pwr; return(OK); case BSIM4v5_MOD_PDWG: value->rValue = model->BSIM4v5pdwg; return(OK); case BSIM4v5_MOD_PDWB: value->rValue = model->BSIM4v5pdwb; return(OK); case BSIM4v5_MOD_PB0: value->rValue = model->BSIM4v5pb0; return(OK); case BSIM4v5_MOD_PB1: value->rValue = model->BSIM4v5pb1; return(OK); case BSIM4v5_MOD_PALPHA0: value->rValue = model->BSIM4v5palpha0; return(OK); case BSIM4v5_MOD_PALPHA1: value->rValue = model->BSIM4v5palpha1; return(OK); case BSIM4v5_MOD_PBETA0: value->rValue = model->BSIM4v5pbeta0; return(OK); case BSIM4v5_MOD_PAGIDL: value->rValue = model->BSIM4v5pagidl; return(OK); case BSIM4v5_MOD_PBGIDL: value->rValue = model->BSIM4v5pbgidl; return(OK); case BSIM4v5_MOD_PCGIDL: value->rValue = model->BSIM4v5pcgidl; return(OK); case BSIM4v5_MOD_PEGIDL: value->rValue = model->BSIM4v5pegidl; return(OK); case BSIM4v5_MOD_PAIGC: value->rValue = model->BSIM4v5paigc; return(OK); case BSIM4v5_MOD_PBIGC: value->rValue = model->BSIM4v5pbigc; return(OK); case BSIM4v5_MOD_PCIGC: value->rValue = model->BSIM4v5pcigc; return(OK); case BSIM4v5_MOD_PAIGSD: value->rValue = model->BSIM4v5paigsd; return(OK); case BSIM4v5_MOD_PBIGSD: value->rValue = model->BSIM4v5pbigsd; return(OK); case BSIM4v5_MOD_PCIGSD: value->rValue = model->BSIM4v5pcigsd; return(OK); case BSIM4v5_MOD_PAIGBACC: value->rValue = model->BSIM4v5paigbacc; return(OK); case BSIM4v5_MOD_PBIGBACC: value->rValue = model->BSIM4v5pbigbacc; return(OK); case BSIM4v5_MOD_PCIGBACC: value->rValue = model->BSIM4v5pcigbacc; return(OK); case BSIM4v5_MOD_PAIGBINV: value->rValue = model->BSIM4v5paigbinv; return(OK); case BSIM4v5_MOD_PBIGBINV: value->rValue = model->BSIM4v5pbigbinv; return(OK); case BSIM4v5_MOD_PCIGBINV: value->rValue = model->BSIM4v5pcigbinv; return(OK); case BSIM4v5_MOD_PNIGC: value->rValue = model->BSIM4v5pnigc; return(OK); case BSIM4v5_MOD_PNIGBACC: value->rValue = model->BSIM4v5pnigbacc; return(OK); case BSIM4v5_MOD_PNIGBINV: value->rValue = model->BSIM4v5pnigbinv; return(OK); case BSIM4v5_MOD_PNTOX: value->rValue = model->BSIM4v5pntox; return(OK); case BSIM4v5_MOD_PEIGBINV: value->rValue = model->BSIM4v5peigbinv; return(OK); case BSIM4v5_MOD_PPIGCD: value->rValue = model->BSIM4v5ppigcd; return(OK); case BSIM4v5_MOD_PPOXEDGE: value->rValue = model->BSIM4v5ppoxedge; return(OK); case BSIM4v5_MOD_PPHIN: value->rValue = model->BSIM4v5pphin; return(OK); case BSIM4v5_MOD_PXRCRG1: value->rValue = model->BSIM4v5pxrcrg1; return(OK); case BSIM4v5_MOD_PXRCRG2: value->rValue = model->BSIM4v5pxrcrg2; return(OK); case BSIM4v5_MOD_PEU: value->rValue = model->BSIM4v5peu; return(OK); case BSIM4v5_MOD_PVFB: value->rValue = model->BSIM4v5pvfb; return(OK); case BSIM4v5_MOD_PCGSL: value->rValue = model->BSIM4v5pcgsl; return(OK); case BSIM4v5_MOD_PCGDL: value->rValue = model->BSIM4v5pcgdl; return(OK); case BSIM4v5_MOD_PCKAPPAS: value->rValue = model->BSIM4v5pckappas; return(OK); case BSIM4v5_MOD_PCKAPPAD: value->rValue = model->BSIM4v5pckappad; return(OK); case BSIM4v5_MOD_PCF: value->rValue = model->BSIM4v5pcf; return(OK); case BSIM4v5_MOD_PCLC: value->rValue = model->BSIM4v5pclc; return(OK); case BSIM4v5_MOD_PCLE: value->rValue = model->BSIM4v5pcle; return(OK); case BSIM4v5_MOD_PVFBCV: value->rValue = model->BSIM4v5pvfbcv; return(OK); case BSIM4v5_MOD_PACDE: value->rValue = model->BSIM4v5pacde; return(OK); case BSIM4v5_MOD_PMOIN: value->rValue = model->BSIM4v5pmoin; return(OK); case BSIM4v5_MOD_PNOFF: value->rValue = model->BSIM4v5pnoff; return(OK); case BSIM4v5_MOD_PVOFFCV: value->rValue = model->BSIM4v5pvoffcv; return(OK); case BSIM4v5_MOD_PVFBSDOFF: value->rValue = model->BSIM4v5pvfbsdoff; return(OK); case BSIM4v5_MOD_PTVFBSDOFF: value->rValue = model->BSIM4v5ptvfbsdoff; return(OK); case BSIM4v5_MOD_TNOM : value->rValue = model->BSIM4v5tnom; return(OK); case BSIM4v5_MOD_CGSO: value->rValue = model->BSIM4v5cgso; return(OK); case BSIM4v5_MOD_CGDO: value->rValue = model->BSIM4v5cgdo; return(OK); case BSIM4v5_MOD_CGBO: value->rValue = model->BSIM4v5cgbo; return(OK); case BSIM4v5_MOD_XPART: value->rValue = model->BSIM4v5xpart; return(OK); case BSIM4v5_MOD_RSH: value->rValue = model->BSIM4v5sheetResistance; return(OK); case BSIM4v5_MOD_JSS: value->rValue = model->BSIM4v5SjctSatCurDensity; return(OK); case BSIM4v5_MOD_JSWS: value->rValue = model->BSIM4v5SjctSidewallSatCurDensity; return(OK); case BSIM4v5_MOD_JSWGS: value->rValue = model->BSIM4v5SjctGateSidewallSatCurDensity; return(OK); case BSIM4v5_MOD_PBS: value->rValue = model->BSIM4v5SbulkJctPotential; return(OK); case BSIM4v5_MOD_MJS: value->rValue = model->BSIM4v5SbulkJctBotGradingCoeff; return(OK); case BSIM4v5_MOD_PBSWS: value->rValue = model->BSIM4v5SsidewallJctPotential; return(OK); case BSIM4v5_MOD_MJSWS: value->rValue = model->BSIM4v5SbulkJctSideGradingCoeff; return(OK); case BSIM4v5_MOD_CJS: value->rValue = model->BSIM4v5SunitAreaJctCap; return(OK); case BSIM4v5_MOD_CJSWS: value->rValue = model->BSIM4v5SunitLengthSidewallJctCap; return(OK); case BSIM4v5_MOD_PBSWGS: value->rValue = model->BSIM4v5SGatesidewallJctPotential; return(OK); case BSIM4v5_MOD_MJSWGS: value->rValue = model->BSIM4v5SbulkJctGateSideGradingCoeff; return(OK); case BSIM4v5_MOD_CJSWGS: value->rValue = model->BSIM4v5SunitLengthGateSidewallJctCap; return(OK); case BSIM4v5_MOD_NJS: value->rValue = model->BSIM4v5SjctEmissionCoeff; return(OK); case BSIM4v5_MOD_XTIS: value->rValue = model->BSIM4v5SjctTempExponent; return(OK); case BSIM4v5_MOD_JSD: value->rValue = model->BSIM4v5DjctSatCurDensity; return(OK); case BSIM4v5_MOD_JSWD: value->rValue = model->BSIM4v5DjctSidewallSatCurDensity; return(OK); case BSIM4v5_MOD_JSWGD: value->rValue = model->BSIM4v5DjctGateSidewallSatCurDensity; return(OK); case BSIM4v5_MOD_PBD: value->rValue = model->BSIM4v5DbulkJctPotential; return(OK); case BSIM4v5_MOD_MJD: value->rValue = model->BSIM4v5DbulkJctBotGradingCoeff; return(OK); case BSIM4v5_MOD_PBSWD: value->rValue = model->BSIM4v5DsidewallJctPotential; return(OK); case BSIM4v5_MOD_MJSWD: value->rValue = model->BSIM4v5DbulkJctSideGradingCoeff; return(OK); case BSIM4v5_MOD_CJD: value->rValue = model->BSIM4v5DunitAreaJctCap; return(OK); case BSIM4v5_MOD_CJSWD: value->rValue = model->BSIM4v5DunitLengthSidewallJctCap; return(OK); case BSIM4v5_MOD_PBSWGD: value->rValue = model->BSIM4v5DGatesidewallJctPotential; return(OK); case BSIM4v5_MOD_MJSWGD: value->rValue = model->BSIM4v5DbulkJctGateSideGradingCoeff; return(OK); case BSIM4v5_MOD_CJSWGD: value->rValue = model->BSIM4v5DunitLengthGateSidewallJctCap; return(OK); case BSIM4v5_MOD_NJD: value->rValue = model->BSIM4v5DjctEmissionCoeff; return(OK); case BSIM4v5_MOD_XTID: value->rValue = model->BSIM4v5DjctTempExponent; return(OK); case BSIM4v5_MOD_LINT: value->rValue = model->BSIM4v5Lint; return(OK); case BSIM4v5_MOD_LL: value->rValue = model->BSIM4v5Ll; return(OK); case BSIM4v5_MOD_LLC: value->rValue = model->BSIM4v5Llc; return(OK); case BSIM4v5_MOD_LLN: value->rValue = model->BSIM4v5Lln; return(OK); case BSIM4v5_MOD_LW: value->rValue = model->BSIM4v5Lw; return(OK); case BSIM4v5_MOD_LWC: value->rValue = model->BSIM4v5Lwc; return(OK); case BSIM4v5_MOD_LWN: value->rValue = model->BSIM4v5Lwn; return(OK); case BSIM4v5_MOD_LWL: value->rValue = model->BSIM4v5Lwl; return(OK); case BSIM4v5_MOD_LWLC: value->rValue = model->BSIM4v5Lwlc; return(OK); case BSIM4v5_MOD_LMIN: value->rValue = model->BSIM4v5Lmin; return(OK); case BSIM4v5_MOD_LMAX: value->rValue = model->BSIM4v5Lmax; return(OK); case BSIM4v5_MOD_WINT: value->rValue = model->BSIM4v5Wint; return(OK); case BSIM4v5_MOD_WL: value->rValue = model->BSIM4v5Wl; return(OK); case BSIM4v5_MOD_WLC: value->rValue = model->BSIM4v5Wlc; return(OK); case BSIM4v5_MOD_WLN: value->rValue = model->BSIM4v5Wln; return(OK); case BSIM4v5_MOD_WW: value->rValue = model->BSIM4v5Ww; return(OK); case BSIM4v5_MOD_WWC: value->rValue = model->BSIM4v5Wwc; return(OK); case BSIM4v5_MOD_WWN: value->rValue = model->BSIM4v5Wwn; return(OK); case BSIM4v5_MOD_WWL: value->rValue = model->BSIM4v5Wwl; return(OK); case BSIM4v5_MOD_WWLC: value->rValue = model->BSIM4v5Wwlc; return(OK); case BSIM4v5_MOD_WMIN: value->rValue = model->BSIM4v5Wmin; return(OK); case BSIM4v5_MOD_WMAX: value->rValue = model->BSIM4v5Wmax; return(OK); /* stress effect */ case BSIM4v5_MOD_SAREF: value->rValue = model->BSIM4v5saref; return(OK); case BSIM4v5_MOD_SBREF: value->rValue = model->BSIM4v5sbref; return(OK); case BSIM4v5_MOD_WLOD: value->rValue = model->BSIM4v5wlod; return(OK); case BSIM4v5_MOD_KU0: value->rValue = model->BSIM4v5ku0; return(OK); case BSIM4v5_MOD_KVSAT: value->rValue = model->BSIM4v5kvsat; return(OK); case BSIM4v5_MOD_KVTH0: value->rValue = model->BSIM4v5kvth0; return(OK); case BSIM4v5_MOD_TKU0: value->rValue = model->BSIM4v5tku0; return(OK); case BSIM4v5_MOD_LLODKU0: value->rValue = model->BSIM4v5llodku0; return(OK); case BSIM4v5_MOD_WLODKU0: value->rValue = model->BSIM4v5wlodku0; return(OK); case BSIM4v5_MOD_LLODVTH: value->rValue = model->BSIM4v5llodvth; return(OK); case BSIM4v5_MOD_WLODVTH: value->rValue = model->BSIM4v5wlodvth; return(OK); case BSIM4v5_MOD_LKU0: value->rValue = model->BSIM4v5lku0; return(OK); case BSIM4v5_MOD_WKU0: value->rValue = model->BSIM4v5wku0; return(OK); case BSIM4v5_MOD_PKU0: value->rValue = model->BSIM4v5pku0; return(OK); case BSIM4v5_MOD_LKVTH0: value->rValue = model->BSIM4v5lkvth0; return(OK); case BSIM4v5_MOD_WKVTH0: value->rValue = model->BSIM4v5wkvth0; return(OK); case BSIM4v5_MOD_PKVTH0: value->rValue = model->BSIM4v5pkvth0; return(OK); case BSIM4v5_MOD_STK2: value->rValue = model->BSIM4v5stk2; return(OK); case BSIM4v5_MOD_LODK2: value->rValue = model->BSIM4v5lodk2; return(OK); case BSIM4v5_MOD_STETA0: value->rValue = model->BSIM4v5steta0; return(OK); case BSIM4v5_MOD_LODETA0: value->rValue = model->BSIM4v5lodeta0; return(OK); /* Well Proximity Effect */ case BSIM4v5_MOD_WEB: value->rValue = model->BSIM4v5web; return(OK); case BSIM4v5_MOD_WEC: value->rValue = model->BSIM4v5wec; return(OK); case BSIM4v5_MOD_KVTH0WE: value->rValue = model->BSIM4v5kvth0we; return(OK); case BSIM4v5_MOD_K2WE: value->rValue = model->BSIM4v5k2we; return(OK); case BSIM4v5_MOD_KU0WE: value->rValue = model->BSIM4v5ku0we; return(OK); case BSIM4v5_MOD_SCREF: value->rValue = model->BSIM4v5scref; return(OK); case BSIM4v5_MOD_WPEMOD: value->rValue = model->BSIM4v5wpemod; return(OK); case BSIM4v5_MOD_LKVTH0WE: value->rValue = model->BSIM4v5lkvth0we; return(OK); case BSIM4v5_MOD_LK2WE: value->rValue = model->BSIM4v5lk2we; return(OK); case BSIM4v5_MOD_LKU0WE: value->rValue = model->BSIM4v5lku0we; return(OK); case BSIM4v5_MOD_WKVTH0WE: value->rValue = model->BSIM4v5wkvth0we; return(OK); case BSIM4v5_MOD_WK2WE: value->rValue = model->BSIM4v5wk2we; return(OK); case BSIM4v5_MOD_WKU0WE: value->rValue = model->BSIM4v5wku0we; return(OK); case BSIM4v5_MOD_PKVTH0WE: value->rValue = model->BSIM4v5pkvth0we; return(OK); case BSIM4v5_MOD_PK2WE: value->rValue = model->BSIM4v5pk2we; return(OK); case BSIM4v5_MOD_PKU0WE: value->rValue = model->BSIM4v5pku0we; return(OK); case BSIM4v5_MOD_NOIA: value->rValue = model->BSIM4v5oxideTrapDensityA; return(OK); case BSIM4v5_MOD_NOIB: value->rValue = model->BSIM4v5oxideTrapDensityB; return(OK); case BSIM4v5_MOD_NOIC: value->rValue = model->BSIM4v5oxideTrapDensityC; return(OK); case BSIM4v5_MOD_EM: value->rValue = model->BSIM4v5em; return(OK); case BSIM4v5_MOD_EF: value->rValue = model->BSIM4v5ef; return(OK); case BSIM4v5_MOD_AF: value->rValue = model->BSIM4v5af; return(OK); case BSIM4v5_MOD_KF: value->rValue = model->BSIM4v5kf; return(OK); case BSIM4v5_MOD_VGS_MAX: value->rValue = model->BSIM4v5vgsMax; return(OK); case BSIM4v5_MOD_VGD_MAX: value->rValue = model->BSIM4v5vgdMax; return(OK); case BSIM4v5_MOD_VGB_MAX: value->rValue = model->BSIM4v5vgbMax; return(OK); case BSIM4v5_MOD_VDS_MAX: value->rValue = model->BSIM4v5vdsMax; return(OK); case BSIM4v5_MOD_VBS_MAX: value->rValue = model->BSIM4v5vbsMax; return(OK); case BSIM4v5_MOD_VBD_MAX: value->rValue = model->BSIM4v5vbdMax; return(OK); case BSIM4v5_MOD_VGSR_MAX: value->rValue = model->BSIM4v5vgsrMax; return(OK); case BSIM4v5_MOD_VGDR_MAX: value->rValue = model->BSIM4v5vgdrMax; return(OK); case BSIM4v5_MOD_VGBR_MAX: value->rValue = model->BSIM4v5vgbrMax; return(OK); case BSIM4v5_MOD_VBSR_MAX: value->rValue = model->BSIM4v5vbsrMax; return(OK); case BSIM4v5_MOD_VBDR_MAX: value->rValue = model->BSIM4v5vbdrMax; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim4v5/b4v5mpar.c0000644000175000017500000033261413546075722022271 0ustar carstencarsten/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ /********** * Copyright 2005 Regents of the University of California. All rights reserved. * File: b4mpar.c of BSIM4.5.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. **********/ #include "ngspice/ngspice.h" #include "bsim4v5def.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/const.h" int BSIM4v5mParam( int param, IFvalue *value, GENmodel *inMod) { BSIM4v5model *mod = (BSIM4v5model*)inMod; switch(param) { case BSIM4v5_MOD_MOBMOD : mod->BSIM4v5mobMod = value->iValue; mod->BSIM4v5mobModGiven = TRUE; break; case BSIM4v5_MOD_BINUNIT : mod->BSIM4v5binUnit = value->iValue; mod->BSIM4v5binUnitGiven = TRUE; break; case BSIM4v5_MOD_PARAMCHK : mod->BSIM4v5paramChk = value->iValue; mod->BSIM4v5paramChkGiven = TRUE; break; case BSIM4v5_MOD_CAPMOD : mod->BSIM4v5capMod = value->iValue; mod->BSIM4v5capModGiven = TRUE; break; case BSIM4v5_MOD_DIOMOD : mod->BSIM4v5dioMod = value->iValue; mod->BSIM4v5dioModGiven = TRUE; break; case BSIM4v5_MOD_RDSMOD : mod->BSIM4v5rdsMod = value->iValue; mod->BSIM4v5rdsModGiven = TRUE; break; case BSIM4v5_MOD_TRNQSMOD : mod->BSIM4v5trnqsMod = value->iValue; mod->BSIM4v5trnqsModGiven = TRUE; break; case BSIM4v5_MOD_ACNQSMOD : mod->BSIM4v5acnqsMod = value->iValue; mod->BSIM4v5acnqsModGiven = TRUE; break; case BSIM4v5_MOD_RBODYMOD : mod->BSIM4v5rbodyMod = value->iValue; mod->BSIM4v5rbodyModGiven = TRUE; break; case BSIM4v5_MOD_RGATEMOD : mod->BSIM4v5rgateMod = value->iValue; mod->BSIM4v5rgateModGiven = TRUE; break; case BSIM4v5_MOD_PERMOD : mod->BSIM4v5perMod = value->iValue; mod->BSIM4v5perModGiven = TRUE; break; case BSIM4v5_MOD_GEOMOD : mod->BSIM4v5geoMod = value->iValue; mod->BSIM4v5geoModGiven = TRUE; break; case BSIM4v5_MOD_RGEOMOD : mod->BSIM4v5rgeoMod = value->iValue; mod->BSIM4v5rgeoModGiven = TRUE; break; case BSIM4v5_MOD_FNOIMOD : mod->BSIM4v5fnoiMod = value->iValue; mod->BSIM4v5fnoiModGiven = TRUE; break; case BSIM4v5_MOD_TNOIMOD : mod->BSIM4v5tnoiMod = value->iValue; mod->BSIM4v5tnoiModGiven = TRUE; break; case BSIM4v5_MOD_IGCMOD : mod->BSIM4v5igcMod = value->iValue; mod->BSIM4v5igcModGiven = TRUE; break; case BSIM4v5_MOD_IGBMOD : mod->BSIM4v5igbMod = value->iValue; mod->BSIM4v5igbModGiven = TRUE; break; case BSIM4v5_MOD_TEMPMOD : mod->BSIM4v5tempMod = value->iValue; mod->BSIM4v5tempModGiven = TRUE; break; case BSIM4v5_MOD_VERSION : mod->BSIM4v5version = value->sValue; mod->BSIM4v5versionGiven = TRUE; break; case BSIM4v5_MOD_TOXREF : mod->BSIM4v5toxref = value->rValue; mod->BSIM4v5toxrefGiven = TRUE; break; case BSIM4v5_MOD_TOXE : mod->BSIM4v5toxe = value->rValue; mod->BSIM4v5toxeGiven = TRUE; break; case BSIM4v5_MOD_TOXP : mod->BSIM4v5toxp = value->rValue; mod->BSIM4v5toxpGiven = TRUE; break; case BSIM4v5_MOD_TOXM : mod->BSIM4v5toxm = value->rValue; mod->BSIM4v5toxmGiven = TRUE; break; case BSIM4v5_MOD_DTOX : mod->BSIM4v5dtox = value->rValue; mod->BSIM4v5dtoxGiven = TRUE; break; case BSIM4v5_MOD_EPSROX : mod->BSIM4v5epsrox = value->rValue; mod->BSIM4v5epsroxGiven = TRUE; break; case BSIM4v5_MOD_CDSC : mod->BSIM4v5cdsc = value->rValue; mod->BSIM4v5cdscGiven = TRUE; break; case BSIM4v5_MOD_CDSCB : mod->BSIM4v5cdscb = value->rValue; mod->BSIM4v5cdscbGiven = TRUE; break; case BSIM4v5_MOD_CDSCD : mod->BSIM4v5cdscd = value->rValue; mod->BSIM4v5cdscdGiven = TRUE; break; case BSIM4v5_MOD_CIT : mod->BSIM4v5cit = value->rValue; mod->BSIM4v5citGiven = TRUE; break; case BSIM4v5_MOD_NFACTOR : mod->BSIM4v5nfactor = value->rValue; mod->BSIM4v5nfactorGiven = TRUE; break; case BSIM4v5_MOD_XJ: mod->BSIM4v5xj = value->rValue; mod->BSIM4v5xjGiven = TRUE; break; case BSIM4v5_MOD_VSAT: mod->BSIM4v5vsat = value->rValue; mod->BSIM4v5vsatGiven = TRUE; break; case BSIM4v5_MOD_A0: mod->BSIM4v5a0 = value->rValue; mod->BSIM4v5a0Given = TRUE; break; case BSIM4v5_MOD_AGS: mod->BSIM4v5ags= value->rValue; mod->BSIM4v5agsGiven = TRUE; break; case BSIM4v5_MOD_A1: mod->BSIM4v5a1 = value->rValue; mod->BSIM4v5a1Given = TRUE; break; case BSIM4v5_MOD_A2: mod->BSIM4v5a2 = value->rValue; mod->BSIM4v5a2Given = TRUE; break; case BSIM4v5_MOD_AT: mod->BSIM4v5at = value->rValue; mod->BSIM4v5atGiven = TRUE; break; case BSIM4v5_MOD_KETA: mod->BSIM4v5keta = value->rValue; mod->BSIM4v5ketaGiven = TRUE; break; case BSIM4v5_MOD_NSUB: mod->BSIM4v5nsub = value->rValue; mod->BSIM4v5nsubGiven = TRUE; break; case BSIM4v5_MOD_NDEP: mod->BSIM4v5ndep = value->rValue; mod->BSIM4v5ndepGiven = TRUE; if (mod->BSIM4v5ndep > 1.0e20) mod->BSIM4v5ndep *= 1.0e-6; break; case BSIM4v5_MOD_NSD: mod->BSIM4v5nsd = value->rValue; mod->BSIM4v5nsdGiven = TRUE; if (mod->BSIM4v5nsd > 1.0e23) mod->BSIM4v5nsd *= 1.0e-6; break; case BSIM4v5_MOD_NGATE: mod->BSIM4v5ngate = value->rValue; mod->BSIM4v5ngateGiven = TRUE; if (mod->BSIM4v5ngate > 1.0e23) mod->BSIM4v5ngate *= 1.0e-6; break; case BSIM4v5_MOD_GAMMA1: mod->BSIM4v5gamma1 = value->rValue; mod->BSIM4v5gamma1Given = TRUE; break; case BSIM4v5_MOD_GAMMA2: mod->BSIM4v5gamma2 = value->rValue; mod->BSIM4v5gamma2Given = TRUE; break; case BSIM4v5_MOD_VBX: mod->BSIM4v5vbx = value->rValue; mod->BSIM4v5vbxGiven = TRUE; break; case BSIM4v5_MOD_VBM: mod->BSIM4v5vbm = value->rValue; mod->BSIM4v5vbmGiven = TRUE; break; case BSIM4v5_MOD_XT: mod->BSIM4v5xt = value->rValue; mod->BSIM4v5xtGiven = TRUE; break; case BSIM4v5_MOD_K1: mod->BSIM4v5k1 = value->rValue; mod->BSIM4v5k1Given = TRUE; break; case BSIM4v5_MOD_KT1: mod->BSIM4v5kt1 = value->rValue; mod->BSIM4v5kt1Given = TRUE; break; case BSIM4v5_MOD_KT1L: mod->BSIM4v5kt1l = value->rValue; mod->BSIM4v5kt1lGiven = TRUE; break; case BSIM4v5_MOD_KT2: mod->BSIM4v5kt2 = value->rValue; mod->BSIM4v5kt2Given = TRUE; break; case BSIM4v5_MOD_K2: mod->BSIM4v5k2 = value->rValue; mod->BSIM4v5k2Given = TRUE; break; case BSIM4v5_MOD_K3: mod->BSIM4v5k3 = value->rValue; mod->BSIM4v5k3Given = TRUE; break; case BSIM4v5_MOD_K3B: mod->BSIM4v5k3b = value->rValue; mod->BSIM4v5k3bGiven = TRUE; break; case BSIM4v5_MOD_LPE0: mod->BSIM4v5lpe0 = value->rValue; mod->BSIM4v5lpe0Given = TRUE; break; case BSIM4v5_MOD_LPEB: mod->BSIM4v5lpeb = value->rValue; mod->BSIM4v5lpebGiven = TRUE; break; case BSIM4v5_MOD_DVTP0: mod->BSIM4v5dvtp0 = value->rValue; mod->BSIM4v5dvtp0Given = TRUE; break; case BSIM4v5_MOD_DVTP1: mod->BSIM4v5dvtp1 = value->rValue; mod->BSIM4v5dvtp1Given = TRUE; break; case BSIM4v5_MOD_W0: mod->BSIM4v5w0 = value->rValue; mod->BSIM4v5w0Given = TRUE; break; case BSIM4v5_MOD_DVT0: mod->BSIM4v5dvt0 = value->rValue; mod->BSIM4v5dvt0Given = TRUE; break; case BSIM4v5_MOD_DVT1: mod->BSIM4v5dvt1 = value->rValue; mod->BSIM4v5dvt1Given = TRUE; break; case BSIM4v5_MOD_DVT2: mod->BSIM4v5dvt2 = value->rValue; mod->BSIM4v5dvt2Given = TRUE; break; case BSIM4v5_MOD_DVT0W: mod->BSIM4v5dvt0w = value->rValue; mod->BSIM4v5dvt0wGiven = TRUE; break; case BSIM4v5_MOD_DVT1W: mod->BSIM4v5dvt1w = value->rValue; mod->BSIM4v5dvt1wGiven = TRUE; break; case BSIM4v5_MOD_DVT2W: mod->BSIM4v5dvt2w = value->rValue; mod->BSIM4v5dvt2wGiven = TRUE; break; case BSIM4v5_MOD_DROUT: mod->BSIM4v5drout = value->rValue; mod->BSIM4v5droutGiven = TRUE; break; case BSIM4v5_MOD_DSUB: mod->BSIM4v5dsub = value->rValue; mod->BSIM4v5dsubGiven = TRUE; break; case BSIM4v5_MOD_VTH0: mod->BSIM4v5vth0 = value->rValue; mod->BSIM4v5vth0Given = TRUE; break; case BSIM4v5_MOD_EU: mod->BSIM4v5eu = value->rValue; mod->BSIM4v5euGiven = TRUE; break; case BSIM4v5_MOD_UA: mod->BSIM4v5ua = value->rValue; mod->BSIM4v5uaGiven = TRUE; break; case BSIM4v5_MOD_UA1: mod->BSIM4v5ua1 = value->rValue; mod->BSIM4v5ua1Given = TRUE; break; case BSIM4v5_MOD_UB: mod->BSIM4v5ub = value->rValue; mod->BSIM4v5ubGiven = TRUE; break; case BSIM4v5_MOD_UB1: mod->BSIM4v5ub1 = value->rValue; mod->BSIM4v5ub1Given = TRUE; break; case BSIM4v5_MOD_UC: mod->BSIM4v5uc = value->rValue; mod->BSIM4v5ucGiven = TRUE; break; case BSIM4v5_MOD_UC1: mod->BSIM4v5uc1 = value->rValue; mod->BSIM4v5uc1Given = TRUE; break; case BSIM4v5_MOD_U0 : mod->BSIM4v5u0 = value->rValue; mod->BSIM4v5u0Given = TRUE; break; case BSIM4v5_MOD_UTE : mod->BSIM4v5ute = value->rValue; mod->BSIM4v5uteGiven = TRUE; break; case BSIM4v5_MOD_UD: mod->BSIM4v5ud = value->rValue; mod->BSIM4v5udGiven = TRUE; break; case BSIM4v5_MOD_UD1: mod->BSIM4v5ud1 = value->rValue; mod->BSIM4v5ud1Given = TRUE; break; case BSIM4v5_MOD_UP: mod->BSIM4v5up = value->rValue; mod->BSIM4v5upGiven = TRUE; break; case BSIM4v5_MOD_LP: mod->BSIM4v5lp = value->rValue; mod->BSIM4v5lpGiven = TRUE; break; case BSIM4v5_MOD_LUD: mod->BSIM4v5lud = value->rValue; mod->BSIM4v5ludGiven = TRUE; break; case BSIM4v5_MOD_LUD1: mod->BSIM4v5lud1 = value->rValue; mod->BSIM4v5lud1Given = TRUE; break; case BSIM4v5_MOD_LUP: mod->BSIM4v5lup = value->rValue; mod->BSIM4v5lupGiven = TRUE; break; case BSIM4v5_MOD_LLP: mod->BSIM4v5llp = value->rValue; mod->BSIM4v5llpGiven = TRUE; break; case BSIM4v5_MOD_WUD: mod->BSIM4v5wud = value->rValue; mod->BSIM4v5wudGiven = TRUE; break; case BSIM4v5_MOD_WUD1: mod->BSIM4v5wud1 = value->rValue; mod->BSIM4v5wud1Given = TRUE; break; case BSIM4v5_MOD_WUP: mod->BSIM4v5wup = value->rValue; mod->BSIM4v5wupGiven = TRUE; break; case BSIM4v5_MOD_WLP: mod->BSIM4v5wlp = value->rValue; mod->BSIM4v5wlpGiven = TRUE; break; case BSIM4v5_MOD_PUD: mod->BSIM4v5pud = value->rValue; mod->BSIM4v5pudGiven = TRUE; break; case BSIM4v5_MOD_PUD1: mod->BSIM4v5pud1 = value->rValue; mod->BSIM4v5pud1Given = TRUE; break; case BSIM4v5_MOD_PUP: mod->BSIM4v5pup = value->rValue; mod->BSIM4v5pupGiven = TRUE; break; case BSIM4v5_MOD_PLP: mod->BSIM4v5plp = value->rValue; mod->BSIM4v5plpGiven = TRUE; break; case BSIM4v5_MOD_VOFF: mod->BSIM4v5voff = value->rValue; mod->BSIM4v5voffGiven = TRUE; break; case BSIM4v5_MOD_TVOFF: mod->BSIM4v5tvoff = value->rValue; mod->BSIM4v5tvoffGiven = TRUE; break; case BSIM4v5_MOD_VOFFL: mod->BSIM4v5voffl = value->rValue; mod->BSIM4v5vofflGiven = TRUE; break; case BSIM4v5_MOD_MINV: mod->BSIM4v5minv = value->rValue; mod->BSIM4v5minvGiven = TRUE; break; case BSIM4v5_MOD_FPROUT: mod->BSIM4v5fprout = value->rValue; mod->BSIM4v5fproutGiven = TRUE; break; case BSIM4v5_MOD_PDITS: mod->BSIM4v5pdits = value->rValue; mod->BSIM4v5pditsGiven = TRUE; break; case BSIM4v5_MOD_PDITSD: mod->BSIM4v5pditsd = value->rValue; mod->BSIM4v5pditsdGiven = TRUE; break; case BSIM4v5_MOD_PDITSL: mod->BSIM4v5pditsl = value->rValue; mod->BSIM4v5pditslGiven = TRUE; break; case BSIM4v5_MOD_DELTA : mod->BSIM4v5delta = value->rValue; mod->BSIM4v5deltaGiven = TRUE; break; case BSIM4v5_MOD_RDSW: mod->BSIM4v5rdsw = value->rValue; mod->BSIM4v5rdswGiven = TRUE; break; case BSIM4v5_MOD_RDSWMIN: mod->BSIM4v5rdswmin = value->rValue; mod->BSIM4v5rdswminGiven = TRUE; break; case BSIM4v5_MOD_RDWMIN: mod->BSIM4v5rdwmin = value->rValue; mod->BSIM4v5rdwminGiven = TRUE; break; case BSIM4v5_MOD_RSWMIN: mod->BSIM4v5rswmin = value->rValue; mod->BSIM4v5rswminGiven = TRUE; break; case BSIM4v5_MOD_RDW: mod->BSIM4v5rdw = value->rValue; mod->BSIM4v5rdwGiven = TRUE; break; case BSIM4v5_MOD_RSW: mod->BSIM4v5rsw = value->rValue; mod->BSIM4v5rswGiven = TRUE; break; case BSIM4v5_MOD_PRWG: mod->BSIM4v5prwg = value->rValue; mod->BSIM4v5prwgGiven = TRUE; break; case BSIM4v5_MOD_PRWB: mod->BSIM4v5prwb = value->rValue; mod->BSIM4v5prwbGiven = TRUE; break; case BSIM4v5_MOD_PRT: mod->BSIM4v5prt = value->rValue; mod->BSIM4v5prtGiven = TRUE; break; case BSIM4v5_MOD_ETA0: mod->BSIM4v5eta0 = value->rValue; mod->BSIM4v5eta0Given = TRUE; break; case BSIM4v5_MOD_ETAB: mod->BSIM4v5etab = value->rValue; mod->BSIM4v5etabGiven = TRUE; break; case BSIM4v5_MOD_PCLM: mod->BSIM4v5pclm = value->rValue; mod->BSIM4v5pclmGiven = TRUE; break; case BSIM4v5_MOD_PDIBL1: mod->BSIM4v5pdibl1 = value->rValue; mod->BSIM4v5pdibl1Given = TRUE; break; case BSIM4v5_MOD_PDIBL2: mod->BSIM4v5pdibl2 = value->rValue; mod->BSIM4v5pdibl2Given = TRUE; break; case BSIM4v5_MOD_PDIBLB: mod->BSIM4v5pdiblb = value->rValue; mod->BSIM4v5pdiblbGiven = TRUE; break; case BSIM4v5_MOD_PSCBE1: mod->BSIM4v5pscbe1 = value->rValue; mod->BSIM4v5pscbe1Given = TRUE; break; case BSIM4v5_MOD_PSCBE2: mod->BSIM4v5pscbe2 = value->rValue; mod->BSIM4v5pscbe2Given = TRUE; break; case BSIM4v5_MOD_PVAG: mod->BSIM4v5pvag = value->rValue; mod->BSIM4v5pvagGiven = TRUE; break; case BSIM4v5_MOD_WR : mod->BSIM4v5wr = value->rValue; mod->BSIM4v5wrGiven = TRUE; break; case BSIM4v5_MOD_DWG : mod->BSIM4v5dwg = value->rValue; mod->BSIM4v5dwgGiven = TRUE; break; case BSIM4v5_MOD_DWB : mod->BSIM4v5dwb = value->rValue; mod->BSIM4v5dwbGiven = TRUE; break; case BSIM4v5_MOD_B0 : mod->BSIM4v5b0 = value->rValue; mod->BSIM4v5b0Given = TRUE; break; case BSIM4v5_MOD_B1 : mod->BSIM4v5b1 = value->rValue; mod->BSIM4v5b1Given = TRUE; break; case BSIM4v5_MOD_ALPHA0 : mod->BSIM4v5alpha0 = value->rValue; mod->BSIM4v5alpha0Given = TRUE; break; case BSIM4v5_MOD_ALPHA1 : mod->BSIM4v5alpha1 = value->rValue; mod->BSIM4v5alpha1Given = TRUE; break; case BSIM4v5_MOD_AGIDL : mod->BSIM4v5agidl = value->rValue; mod->BSIM4v5agidlGiven = TRUE; break; case BSIM4v5_MOD_BGIDL : mod->BSIM4v5bgidl = value->rValue; mod->BSIM4v5bgidlGiven = TRUE; break; case BSIM4v5_MOD_CGIDL : mod->BSIM4v5cgidl = value->rValue; mod->BSIM4v5cgidlGiven = TRUE; break; case BSIM4v5_MOD_PHIN : mod->BSIM4v5phin = value->rValue; mod->BSIM4v5phinGiven = TRUE; break; case BSIM4v5_MOD_EGIDL : mod->BSIM4v5egidl = value->rValue; mod->BSIM4v5egidlGiven = TRUE; break; case BSIM4v5_MOD_AIGC : mod->BSIM4v5aigc = value->rValue; mod->BSIM4v5aigcGiven = TRUE; break; case BSIM4v5_MOD_BIGC : mod->BSIM4v5bigc = value->rValue; mod->BSIM4v5bigcGiven = TRUE; break; case BSIM4v5_MOD_CIGC : mod->BSIM4v5cigc = value->rValue; mod->BSIM4v5cigcGiven = TRUE; break; case BSIM4v5_MOD_AIGSD : mod->BSIM4v5aigsd = value->rValue; mod->BSIM4v5aigsdGiven = TRUE; break; case BSIM4v5_MOD_BIGSD : mod->BSIM4v5bigsd = value->rValue; mod->BSIM4v5bigsdGiven = TRUE; break; case BSIM4v5_MOD_CIGSD : mod->BSIM4v5cigsd = value->rValue; mod->BSIM4v5cigsdGiven = TRUE; break; case BSIM4v5_MOD_AIGBACC : mod->BSIM4v5aigbacc = value->rValue; mod->BSIM4v5aigbaccGiven = TRUE; break; case BSIM4v5_MOD_BIGBACC : mod->BSIM4v5bigbacc = value->rValue; mod->BSIM4v5bigbaccGiven = TRUE; break; case BSIM4v5_MOD_CIGBACC : mod->BSIM4v5cigbacc = value->rValue; mod->BSIM4v5cigbaccGiven = TRUE; break; case BSIM4v5_MOD_AIGBINV : mod->BSIM4v5aigbinv = value->rValue; mod->BSIM4v5aigbinvGiven = TRUE; break; case BSIM4v5_MOD_BIGBINV : mod->BSIM4v5bigbinv = value->rValue; mod->BSIM4v5bigbinvGiven = TRUE; break; case BSIM4v5_MOD_CIGBINV : mod->BSIM4v5cigbinv = value->rValue; mod->BSIM4v5cigbinvGiven = TRUE; break; case BSIM4v5_MOD_NIGC : mod->BSIM4v5nigc = value->rValue; mod->BSIM4v5nigcGiven = TRUE; break; case BSIM4v5_MOD_NIGBINV : mod->BSIM4v5nigbinv = value->rValue; mod->BSIM4v5nigbinvGiven = TRUE; break; case BSIM4v5_MOD_NIGBACC : mod->BSIM4v5nigbacc = value->rValue; mod->BSIM4v5nigbaccGiven = TRUE; break; case BSIM4v5_MOD_NTOX : mod->BSIM4v5ntox = value->rValue; mod->BSIM4v5ntoxGiven = TRUE; break; case BSIM4v5_MOD_EIGBINV : mod->BSIM4v5eigbinv = value->rValue; mod->BSIM4v5eigbinvGiven = TRUE; break; case BSIM4v5_MOD_PIGCD : mod->BSIM4v5pigcd = value->rValue; mod->BSIM4v5pigcdGiven = TRUE; break; case BSIM4v5_MOD_POXEDGE : mod->BSIM4v5poxedge = value->rValue; mod->BSIM4v5poxedgeGiven = TRUE; break; case BSIM4v5_MOD_XRCRG1 : mod->BSIM4v5xrcrg1 = value->rValue; mod->BSIM4v5xrcrg1Given = TRUE; break; case BSIM4v5_MOD_XRCRG2 : mod->BSIM4v5xrcrg2 = value->rValue; mod->BSIM4v5xrcrg2Given = TRUE; break; case BSIM4v5_MOD_LAMBDA : mod->BSIM4v5lambda = value->rValue; mod->BSIM4v5lambdaGiven = TRUE; break; case BSIM4v5_MOD_VTL : mod->BSIM4v5vtl = value->rValue; mod->BSIM4v5vtlGiven = TRUE; break; case BSIM4v5_MOD_XN: mod->BSIM4v5xn = value->rValue; mod->BSIM4v5xnGiven = TRUE; break; case BSIM4v5_MOD_LC: mod->BSIM4v5lc = value->rValue; mod->BSIM4v5lcGiven = TRUE; break; case BSIM4v5_MOD_TNOIA : mod->BSIM4v5tnoia = value->rValue; mod->BSIM4v5tnoiaGiven = TRUE; break; case BSIM4v5_MOD_TNOIB : mod->BSIM4v5tnoib = value->rValue; mod->BSIM4v5tnoibGiven = TRUE; break; case BSIM4v5_MOD_RNOIA : mod->BSIM4v5rnoia = value->rValue; mod->BSIM4v5rnoiaGiven = TRUE; break; case BSIM4v5_MOD_RNOIB : mod->BSIM4v5rnoib = value->rValue; mod->BSIM4v5rnoibGiven = TRUE; break; case BSIM4v5_MOD_NTNOI : mod->BSIM4v5ntnoi = value->rValue; mod->BSIM4v5ntnoiGiven = TRUE; break; case BSIM4v5_MOD_VFBSDOFF: mod->BSIM4v5vfbsdoff = value->rValue; mod->BSIM4v5vfbsdoffGiven = TRUE; break; case BSIM4v5_MOD_TVFBSDOFF: mod->BSIM4v5tvfbsdoff = value->rValue; mod->BSIM4v5tvfbsdoffGiven = TRUE; break; case BSIM4v5_MOD_LINTNOI: mod->BSIM4v5lintnoi = value->rValue; mod->BSIM4v5lintnoiGiven = TRUE; break; /* stress effect */ case BSIM4v5_MOD_SAREF : mod->BSIM4v5saref = value->rValue; mod->BSIM4v5sarefGiven = TRUE; break; case BSIM4v5_MOD_SBREF : mod->BSIM4v5sbref = value->rValue; mod->BSIM4v5sbrefGiven = TRUE; break; case BSIM4v5_MOD_WLOD : mod->BSIM4v5wlod = value->rValue; mod->BSIM4v5wlodGiven = TRUE; break; case BSIM4v5_MOD_KU0 : mod->BSIM4v5ku0 = value->rValue; mod->BSIM4v5ku0Given = TRUE; break; case BSIM4v5_MOD_KVSAT : mod->BSIM4v5kvsat = value->rValue; mod->BSIM4v5kvsatGiven = TRUE; break; case BSIM4v5_MOD_KVTH0 : mod->BSIM4v5kvth0 = value->rValue; mod->BSIM4v5kvth0Given = TRUE; break; case BSIM4v5_MOD_TKU0 : mod->BSIM4v5tku0 = value->rValue; mod->BSIM4v5tku0Given = TRUE; break; case BSIM4v5_MOD_LLODKU0 : mod->BSIM4v5llodku0 = value->rValue; mod->BSIM4v5llodku0Given = TRUE; break; case BSIM4v5_MOD_WLODKU0 : mod->BSIM4v5wlodku0 = value->rValue; mod->BSIM4v5wlodku0Given = TRUE; break; case BSIM4v5_MOD_LLODVTH : mod->BSIM4v5llodvth = value->rValue; mod->BSIM4v5llodvthGiven = TRUE; break; case BSIM4v5_MOD_WLODVTH : mod->BSIM4v5wlodvth = value->rValue; mod->BSIM4v5wlodvthGiven = TRUE; break; case BSIM4v5_MOD_LKU0 : mod->BSIM4v5lku0 = value->rValue; mod->BSIM4v5lku0Given = TRUE; break; case BSIM4v5_MOD_WKU0 : mod->BSIM4v5wku0 = value->rValue; mod->BSIM4v5wku0Given = TRUE; break; case BSIM4v5_MOD_PKU0 : mod->BSIM4v5pku0 = value->rValue; mod->BSIM4v5pku0Given = TRUE; break; case BSIM4v5_MOD_LKVTH0 : mod->BSIM4v5lkvth0 = value->rValue; mod->BSIM4v5lkvth0Given = TRUE; break; case BSIM4v5_MOD_WKVTH0 : mod->BSIM4v5wkvth0 = value->rValue; mod->BSIM4v5wkvth0Given = TRUE; break; case BSIM4v5_MOD_PKVTH0 : mod->BSIM4v5pkvth0 = value->rValue; mod->BSIM4v5pkvth0Given = TRUE; break; case BSIM4v5_MOD_STK2 : mod->BSIM4v5stk2 = value->rValue; mod->BSIM4v5stk2Given = TRUE; break; case BSIM4v5_MOD_LODK2 : mod->BSIM4v5lodk2 = value->rValue; mod->BSIM4v5lodk2Given = TRUE; break; case BSIM4v5_MOD_STETA0 : mod->BSIM4v5steta0 = value->rValue; mod->BSIM4v5steta0Given = TRUE; break; case BSIM4v5_MOD_LODETA0 : mod->BSIM4v5lodeta0 = value->rValue; mod->BSIM4v5lodeta0Given = TRUE; break; case BSIM4v5_MOD_WEB : mod->BSIM4v5web = value->rValue; mod->BSIM4v5webGiven = TRUE; break; case BSIM4v5_MOD_WEC : mod->BSIM4v5wec = value->rValue; mod->BSIM4v5wecGiven = TRUE; break; case BSIM4v5_MOD_KVTH0WE : mod->BSIM4v5kvth0we = value->rValue; mod->BSIM4v5kvth0weGiven = TRUE; break; case BSIM4v5_MOD_K2WE : mod->BSIM4v5k2we = value->rValue; mod->BSIM4v5k2weGiven = TRUE; break; case BSIM4v5_MOD_KU0WE : mod->BSIM4v5ku0we = value->rValue; mod->BSIM4v5ku0weGiven = TRUE; break; case BSIM4v5_MOD_SCREF : mod->BSIM4v5scref = value->rValue; mod->BSIM4v5screfGiven = TRUE; break; case BSIM4v5_MOD_WPEMOD : mod->BSIM4v5wpemod = value->rValue; mod->BSIM4v5wpemodGiven = TRUE; break; case BSIM4v5_MOD_LKVTH0WE : mod->BSIM4v5lkvth0we = value->rValue; mod->BSIM4v5lkvth0weGiven = TRUE; break; case BSIM4v5_MOD_LK2WE : mod->BSIM4v5lk2we = value->rValue; mod->BSIM4v5lk2weGiven = TRUE; break; case BSIM4v5_MOD_LKU0WE : mod->BSIM4v5lku0we = value->rValue; mod->BSIM4v5lku0weGiven = TRUE; break; case BSIM4v5_MOD_WKVTH0WE : mod->BSIM4v5wkvth0we = value->rValue; mod->BSIM4v5wkvth0weGiven = TRUE; break; case BSIM4v5_MOD_WK2WE : mod->BSIM4v5wk2we = value->rValue; mod->BSIM4v5wk2weGiven = TRUE; break; case BSIM4v5_MOD_WKU0WE : mod->BSIM4v5wku0we = value->rValue; mod->BSIM4v5wku0weGiven = TRUE; break; case BSIM4v5_MOD_PKVTH0WE : mod->BSIM4v5pkvth0we = value->rValue; mod->BSIM4v5pkvth0weGiven = TRUE; break; case BSIM4v5_MOD_PK2WE : mod->BSIM4v5pk2we = value->rValue; mod->BSIM4v5pk2weGiven = TRUE; break; case BSIM4v5_MOD_PKU0WE : mod->BSIM4v5pku0we = value->rValue; mod->BSIM4v5pku0weGiven = TRUE; break; case BSIM4v5_MOD_BETA0 : mod->BSIM4v5beta0 = value->rValue; mod->BSIM4v5beta0Given = TRUE; break; case BSIM4v5_MOD_IJTHDFWD : mod->BSIM4v5ijthdfwd = value->rValue; mod->BSIM4v5ijthdfwdGiven = TRUE; break; case BSIM4v5_MOD_IJTHSFWD : mod->BSIM4v5ijthsfwd = value->rValue; mod->BSIM4v5ijthsfwdGiven = TRUE; break; case BSIM4v5_MOD_IJTHDREV : mod->BSIM4v5ijthdrev = value->rValue; mod->BSIM4v5ijthdrevGiven = TRUE; break; case BSIM4v5_MOD_IJTHSREV : mod->BSIM4v5ijthsrev = value->rValue; mod->BSIM4v5ijthsrevGiven = TRUE; break; case BSIM4v5_MOD_XJBVD : mod->BSIM4v5xjbvd = value->rValue; mod->BSIM4v5xjbvdGiven = TRUE; break; case BSIM4v5_MOD_XJBVS : mod->BSIM4v5xjbvs = value->rValue; mod->BSIM4v5xjbvsGiven = TRUE; break; case BSIM4v5_MOD_BVD : mod->BSIM4v5bvd = value->rValue; mod->BSIM4v5bvdGiven = TRUE; break; case BSIM4v5_MOD_BVS : mod->BSIM4v5bvs = value->rValue; mod->BSIM4v5bvsGiven = TRUE; break; /* reverse diode */ case BSIM4v5_MOD_JTSS : mod->BSIM4v5jtss = value->rValue; mod->BSIM4v5jtssGiven = TRUE; break; case BSIM4v5_MOD_JTSD : mod->BSIM4v5jtsd = value->rValue; mod->BSIM4v5jtsdGiven = TRUE; break; case BSIM4v5_MOD_JTSSWS : mod->BSIM4v5jtssws = value->rValue; mod->BSIM4v5jtsswsGiven = TRUE; break; case BSIM4v5_MOD_JTSSWD : mod->BSIM4v5jtsswd = value->rValue; mod->BSIM4v5jtsswdGiven = TRUE; break; case BSIM4v5_MOD_JTSSWGS : mod->BSIM4v5jtsswgs = value->rValue; mod->BSIM4v5jtsswgsGiven = TRUE; break; case BSIM4v5_MOD_JTSSWGD : mod->BSIM4v5jtsswgd = value->rValue; mod->BSIM4v5jtsswgdGiven = TRUE; break; case BSIM4v5_MOD_NJTS : mod->BSIM4v5njts = value->rValue; mod->BSIM4v5njtsGiven = TRUE; break; case BSIM4v5_MOD_NJTSSW : mod->BSIM4v5njtssw = value->rValue; mod->BSIM4v5njtsswGiven = TRUE; break; case BSIM4v5_MOD_NJTSSWG : mod->BSIM4v5njtsswg = value->rValue; mod->BSIM4v5njtsswgGiven = TRUE; break; case BSIM4v5_MOD_XTSS : mod->BSIM4v5xtss = value->rValue; mod->BSIM4v5xtssGiven = TRUE; break; case BSIM4v5_MOD_XTSD : mod->BSIM4v5xtsd = value->rValue; mod->BSIM4v5xtsdGiven = TRUE; break; case BSIM4v5_MOD_XTSSWS : mod->BSIM4v5xtssws = value->rValue; mod->BSIM4v5xtsswsGiven = TRUE; break; case BSIM4v5_MOD_XTSSWD : mod->BSIM4v5xtsswd = value->rValue; mod->BSIM4v5xtsswdGiven = TRUE; break; case BSIM4v5_MOD_XTSSWGS : mod->BSIM4v5xtsswgs = value->rValue; mod->BSIM4v5xtsswgsGiven = TRUE; break; case BSIM4v5_MOD_XTSSWGD : mod->BSIM4v5xtsswgd = value->rValue; mod->BSIM4v5xtsswgdGiven = TRUE; break; case BSIM4v5_MOD_TNJTS : mod->BSIM4v5tnjts = value->rValue; mod->BSIM4v5tnjtsGiven = TRUE; break; case BSIM4v5_MOD_TNJTSSW : mod->BSIM4v5tnjtssw = value->rValue; mod->BSIM4v5tnjtsswGiven = TRUE; break; case BSIM4v5_MOD_TNJTSSWG : mod->BSIM4v5tnjtsswg = value->rValue; mod->BSIM4v5tnjtsswgGiven = TRUE; break; case BSIM4v5_MOD_VTSS : mod->BSIM4v5vtss = value->rValue; mod->BSIM4v5vtssGiven = TRUE; break; case BSIM4v5_MOD_VTSD : mod->BSIM4v5vtsd = value->rValue; mod->BSIM4v5vtsdGiven = TRUE; break; case BSIM4v5_MOD_VTSSWS : mod->BSIM4v5vtssws = value->rValue; mod->BSIM4v5vtsswsGiven = TRUE; break; case BSIM4v5_MOD_VTSSWD : mod->BSIM4v5vtsswd = value->rValue; mod->BSIM4v5vtsswdGiven = TRUE; break; case BSIM4v5_MOD_VTSSWGS : mod->BSIM4v5vtsswgs = value->rValue; mod->BSIM4v5vtsswgsGiven = TRUE; break; case BSIM4v5_MOD_VTSSWGD : mod->BSIM4v5vtsswgd = value->rValue; mod->BSIM4v5vtsswgdGiven = TRUE; break; case BSIM4v5_MOD_VFB : mod->BSIM4v5vfb = value->rValue; mod->BSIM4v5vfbGiven = TRUE; break; case BSIM4v5_MOD_GBMIN : mod->BSIM4v5gbmin = value->rValue; mod->BSIM4v5gbminGiven = TRUE; break; case BSIM4v5_MOD_RBDB : mod->BSIM4v5rbdb = value->rValue; mod->BSIM4v5rbdbGiven = TRUE; break; case BSIM4v5_MOD_RBPB : mod->BSIM4v5rbpb = value->rValue; mod->BSIM4v5rbpbGiven = TRUE; break; case BSIM4v5_MOD_RBSB : mod->BSIM4v5rbsb = value->rValue; mod->BSIM4v5rbsbGiven = TRUE; break; case BSIM4v5_MOD_RBPS : mod->BSIM4v5rbps = value->rValue; mod->BSIM4v5rbpsGiven = TRUE; break; case BSIM4v5_MOD_RBPD : mod->BSIM4v5rbpd = value->rValue; mod->BSIM4v5rbpdGiven = TRUE; break; case BSIM4v5_MOD_RBPS0 : mod->BSIM4v5rbps0 = value->rValue; mod->BSIM4v5rbps0Given = TRUE; break; case BSIM4v5_MOD_RBPSL : mod->BSIM4v5rbpsl = value->rValue; mod->BSIM4v5rbpslGiven = TRUE; break; case BSIM4v5_MOD_RBPSW : mod->BSIM4v5rbpsw = value->rValue; mod->BSIM4v5rbpswGiven = TRUE; break; case BSIM4v5_MOD_RBPSNF : mod->BSIM4v5rbpsnf = value->rValue; mod->BSIM4v5rbpsnfGiven = TRUE; break; case BSIM4v5_MOD_RBPD0 : mod->BSIM4v5rbpd0 = value->rValue; mod->BSIM4v5rbpd0Given = TRUE; break; case BSIM4v5_MOD_RBPDL : mod->BSIM4v5rbpdl = value->rValue; mod->BSIM4v5rbpdlGiven = TRUE; break; case BSIM4v5_MOD_RBPDW : mod->BSIM4v5rbpdw = value->rValue; mod->BSIM4v5rbpdwGiven = TRUE; break; case BSIM4v5_MOD_RBPDNF : mod->BSIM4v5rbpdnf = value->rValue; mod->BSIM4v5rbpdnfGiven = TRUE; break; case BSIM4v5_MOD_RBPBX0 : mod->BSIM4v5rbpbx0 = value->rValue; mod->BSIM4v5rbpbx0Given = TRUE; break; case BSIM4v5_MOD_RBPBXL : mod->BSIM4v5rbpbxl = value->rValue; mod->BSIM4v5rbpbxlGiven = TRUE; break; case BSIM4v5_MOD_RBPBXW : mod->BSIM4v5rbpbxw = value->rValue; mod->BSIM4v5rbpbxwGiven = TRUE; break; case BSIM4v5_MOD_RBPBXNF : mod->BSIM4v5rbpbxnf = value->rValue; mod->BSIM4v5rbpbxnfGiven = TRUE; break; case BSIM4v5_MOD_RBPBY0 : mod->BSIM4v5rbpby0 = value->rValue; mod->BSIM4v5rbpby0Given = TRUE; break; case BSIM4v5_MOD_RBPBYL : mod->BSIM4v5rbpbyl = value->rValue; mod->BSIM4v5rbpbylGiven = TRUE; break; case BSIM4v5_MOD_RBPBYW : mod->BSIM4v5rbpbyw = value->rValue; mod->BSIM4v5rbpbywGiven = TRUE; break; case BSIM4v5_MOD_RBPBYNF : mod->BSIM4v5rbpbynf = value->rValue; mod->BSIM4v5rbpbynfGiven = TRUE; break; case BSIM4v5_MOD_RBSBX0 : mod->BSIM4v5rbsbx0 = value->rValue; mod->BSIM4v5rbsbx0Given = TRUE; break; case BSIM4v5_MOD_RBSBY0 : mod->BSIM4v5rbsby0 = value->rValue; mod->BSIM4v5rbsby0Given = TRUE; break; case BSIM4v5_MOD_RBDBX0 : mod->BSIM4v5rbdbx0 = value->rValue; mod->BSIM4v5rbdbx0Given = TRUE; break; case BSIM4v5_MOD_RBDBY0 : mod->BSIM4v5rbdby0 = value->rValue; mod->BSIM4v5rbdby0Given = TRUE; break; case BSIM4v5_MOD_RBSDBXL : mod->BSIM4v5rbsdbxl = value->rValue; mod->BSIM4v5rbsdbxlGiven = TRUE; break; case BSIM4v5_MOD_RBSDBXW : mod->BSIM4v5rbsdbxw = value->rValue; mod->BSIM4v5rbsdbxwGiven = TRUE; break; case BSIM4v5_MOD_RBSDBXNF : mod->BSIM4v5rbsdbxnf = value->rValue; mod->BSIM4v5rbsdbxnfGiven = TRUE; break; case BSIM4v5_MOD_RBSDBYL : mod->BSIM4v5rbsdbyl = value->rValue; mod->BSIM4v5rbsdbylGiven = TRUE; break; case BSIM4v5_MOD_RBSDBYW : mod->BSIM4v5rbsdbyw = value->rValue; mod->BSIM4v5rbsdbywGiven = TRUE; break; case BSIM4v5_MOD_RBSDBYNF : mod->BSIM4v5rbsdbynf = value->rValue; mod->BSIM4v5rbsdbynfGiven = TRUE; break; case BSIM4v5_MOD_CGSL : mod->BSIM4v5cgsl = value->rValue; mod->BSIM4v5cgslGiven = TRUE; break; case BSIM4v5_MOD_CGDL : mod->BSIM4v5cgdl = value->rValue; mod->BSIM4v5cgdlGiven = TRUE; break; case BSIM4v5_MOD_CKAPPAS : mod->BSIM4v5ckappas = value->rValue; mod->BSIM4v5ckappasGiven = TRUE; break; case BSIM4v5_MOD_CKAPPAD : mod->BSIM4v5ckappad = value->rValue; mod->BSIM4v5ckappadGiven = TRUE; break; case BSIM4v5_MOD_CF : mod->BSIM4v5cf = value->rValue; mod->BSIM4v5cfGiven = TRUE; break; case BSIM4v5_MOD_CLC : mod->BSIM4v5clc = value->rValue; mod->BSIM4v5clcGiven = TRUE; break; case BSIM4v5_MOD_CLE : mod->BSIM4v5cle = value->rValue; mod->BSIM4v5cleGiven = TRUE; break; case BSIM4v5_MOD_DWC : mod->BSIM4v5dwc = value->rValue; mod->BSIM4v5dwcGiven = TRUE; break; case BSIM4v5_MOD_DLC : mod->BSIM4v5dlc = value->rValue; mod->BSIM4v5dlcGiven = TRUE; break; case BSIM4v5_MOD_XW : mod->BSIM4v5xw = value->rValue; mod->BSIM4v5xwGiven = TRUE; break; case BSIM4v5_MOD_XL : mod->BSIM4v5xl = value->rValue; mod->BSIM4v5xlGiven = TRUE; break; case BSIM4v5_MOD_DLCIG : mod->BSIM4v5dlcig = value->rValue; mod->BSIM4v5dlcigGiven = TRUE; break; case BSIM4v5_MOD_DWJ : mod->BSIM4v5dwj = value->rValue; mod->BSIM4v5dwjGiven = TRUE; break; case BSIM4v5_MOD_VFBCV : mod->BSIM4v5vfbcv = value->rValue; mod->BSIM4v5vfbcvGiven = TRUE; break; case BSIM4v5_MOD_ACDE : mod->BSIM4v5acde = value->rValue; mod->BSIM4v5acdeGiven = TRUE; break; case BSIM4v5_MOD_MOIN : mod->BSIM4v5moin = value->rValue; mod->BSIM4v5moinGiven = TRUE; break; case BSIM4v5_MOD_NOFF : mod->BSIM4v5noff = value->rValue; mod->BSIM4v5noffGiven = TRUE; break; case BSIM4v5_MOD_VOFFCV : mod->BSIM4v5voffcv = value->rValue; mod->BSIM4v5voffcvGiven = TRUE; break; case BSIM4v5_MOD_DMCG : mod->BSIM4v5dmcg = value->rValue; mod->BSIM4v5dmcgGiven = TRUE; break; case BSIM4v5_MOD_DMCI : mod->BSIM4v5dmci = value->rValue; mod->BSIM4v5dmciGiven = TRUE; break; case BSIM4v5_MOD_DMDG : mod->BSIM4v5dmdg = value->rValue; mod->BSIM4v5dmdgGiven = TRUE; break; case BSIM4v5_MOD_DMCGT : mod->BSIM4v5dmcgt = value->rValue; mod->BSIM4v5dmcgtGiven = TRUE; break; case BSIM4v5_MOD_XGW : mod->BSIM4v5xgw = value->rValue; mod->BSIM4v5xgwGiven = TRUE; break; case BSIM4v5_MOD_XGL : mod->BSIM4v5xgl = value->rValue; mod->BSIM4v5xglGiven = TRUE; break; case BSIM4v5_MOD_RSHG : mod->BSIM4v5rshg = value->rValue; mod->BSIM4v5rshgGiven = TRUE; break; case BSIM4v5_MOD_NGCON : mod->BSIM4v5ngcon = value->rValue; mod->BSIM4v5ngconGiven = TRUE; break; case BSIM4v5_MOD_TCJ : mod->BSIM4v5tcj = value->rValue; mod->BSIM4v5tcjGiven = TRUE; break; case BSIM4v5_MOD_TPB : mod->BSIM4v5tpb = value->rValue; mod->BSIM4v5tpbGiven = TRUE; break; case BSIM4v5_MOD_TCJSW : mod->BSIM4v5tcjsw = value->rValue; mod->BSIM4v5tcjswGiven = TRUE; break; case BSIM4v5_MOD_TPBSW : mod->BSIM4v5tpbsw = value->rValue; mod->BSIM4v5tpbswGiven = TRUE; break; case BSIM4v5_MOD_TCJSWG : mod->BSIM4v5tcjswg = value->rValue; mod->BSIM4v5tcjswgGiven = TRUE; break; case BSIM4v5_MOD_TPBSWG : mod->BSIM4v5tpbswg = value->rValue; mod->BSIM4v5tpbswgGiven = TRUE; break; /* Length dependence */ case BSIM4v5_MOD_LCDSC : mod->BSIM4v5lcdsc = value->rValue; mod->BSIM4v5lcdscGiven = TRUE; break; case BSIM4v5_MOD_LCDSCB : mod->BSIM4v5lcdscb = value->rValue; mod->BSIM4v5lcdscbGiven = TRUE; break; case BSIM4v5_MOD_LCDSCD : mod->BSIM4v5lcdscd = value->rValue; mod->BSIM4v5lcdscdGiven = TRUE; break; case BSIM4v5_MOD_LCIT : mod->BSIM4v5lcit = value->rValue; mod->BSIM4v5lcitGiven = TRUE; break; case BSIM4v5_MOD_LNFACTOR : mod->BSIM4v5lnfactor = value->rValue; mod->BSIM4v5lnfactorGiven = TRUE; break; case BSIM4v5_MOD_LXJ: mod->BSIM4v5lxj = value->rValue; mod->BSIM4v5lxjGiven = TRUE; break; case BSIM4v5_MOD_LVSAT: mod->BSIM4v5lvsat = value->rValue; mod->BSIM4v5lvsatGiven = TRUE; break; case BSIM4v5_MOD_LA0: mod->BSIM4v5la0 = value->rValue; mod->BSIM4v5la0Given = TRUE; break; case BSIM4v5_MOD_LAGS: mod->BSIM4v5lags = value->rValue; mod->BSIM4v5lagsGiven = TRUE; break; case BSIM4v5_MOD_LA1: mod->BSIM4v5la1 = value->rValue; mod->BSIM4v5la1Given = TRUE; break; case BSIM4v5_MOD_LA2: mod->BSIM4v5la2 = value->rValue; mod->BSIM4v5la2Given = TRUE; break; case BSIM4v5_MOD_LAT: mod->BSIM4v5lat = value->rValue; mod->BSIM4v5latGiven = TRUE; break; case BSIM4v5_MOD_LKETA: mod->BSIM4v5lketa = value->rValue; mod->BSIM4v5lketaGiven = TRUE; break; case BSIM4v5_MOD_LNSUB: mod->BSIM4v5lnsub = value->rValue; mod->BSIM4v5lnsubGiven = TRUE; break; case BSIM4v5_MOD_LNDEP: mod->BSIM4v5lndep = value->rValue; mod->BSIM4v5lndepGiven = TRUE; if (mod->BSIM4v5lndep > 1.0e20) mod->BSIM4v5lndep *= 1.0e-6; break; case BSIM4v5_MOD_LNSD: mod->BSIM4v5lnsd = value->rValue; mod->BSIM4v5lnsdGiven = TRUE; if (mod->BSIM4v5lnsd > 1.0e23) mod->BSIM4v5lnsd *= 1.0e-6; break; case BSIM4v5_MOD_LNGATE: mod->BSIM4v5lngate = value->rValue; mod->BSIM4v5lngateGiven = TRUE; if (mod->BSIM4v5lngate > 1.0e23) mod->BSIM4v5lngate *= 1.0e-6; break; case BSIM4v5_MOD_LGAMMA1: mod->BSIM4v5lgamma1 = value->rValue; mod->BSIM4v5lgamma1Given = TRUE; break; case BSIM4v5_MOD_LGAMMA2: mod->BSIM4v5lgamma2 = value->rValue; mod->BSIM4v5lgamma2Given = TRUE; break; case BSIM4v5_MOD_LVBX: mod->BSIM4v5lvbx = value->rValue; mod->BSIM4v5lvbxGiven = TRUE; break; case BSIM4v5_MOD_LVBM: mod->BSIM4v5lvbm = value->rValue; mod->BSIM4v5lvbmGiven = TRUE; break; case BSIM4v5_MOD_LXT: mod->BSIM4v5lxt = value->rValue; mod->BSIM4v5lxtGiven = TRUE; break; case BSIM4v5_MOD_LK1: mod->BSIM4v5lk1 = value->rValue; mod->BSIM4v5lk1Given = TRUE; break; case BSIM4v5_MOD_LKT1: mod->BSIM4v5lkt1 = value->rValue; mod->BSIM4v5lkt1Given = TRUE; break; case BSIM4v5_MOD_LKT1L: mod->BSIM4v5lkt1l = value->rValue; mod->BSIM4v5lkt1lGiven = TRUE; break; case BSIM4v5_MOD_LKT2: mod->BSIM4v5lkt2 = value->rValue; mod->BSIM4v5lkt2Given = TRUE; break; case BSIM4v5_MOD_LK2: mod->BSIM4v5lk2 = value->rValue; mod->BSIM4v5lk2Given = TRUE; break; case BSIM4v5_MOD_LK3: mod->BSIM4v5lk3 = value->rValue; mod->BSIM4v5lk3Given = TRUE; break; case BSIM4v5_MOD_LK3B: mod->BSIM4v5lk3b = value->rValue; mod->BSIM4v5lk3bGiven = TRUE; break; case BSIM4v5_MOD_LLPE0: mod->BSIM4v5llpe0 = value->rValue; mod->BSIM4v5llpe0Given = TRUE; break; case BSIM4v5_MOD_LLPEB: mod->BSIM4v5llpeb = value->rValue; mod->BSIM4v5llpebGiven = TRUE; break; case BSIM4v5_MOD_LDVTP0: mod->BSIM4v5ldvtp0 = value->rValue; mod->BSIM4v5ldvtp0Given = TRUE; break; case BSIM4v5_MOD_LDVTP1: mod->BSIM4v5ldvtp1 = value->rValue; mod->BSIM4v5ldvtp1Given = TRUE; break; case BSIM4v5_MOD_LW0: mod->BSIM4v5lw0 = value->rValue; mod->BSIM4v5lw0Given = TRUE; break; case BSIM4v5_MOD_LDVT0: mod->BSIM4v5ldvt0 = value->rValue; mod->BSIM4v5ldvt0Given = TRUE; break; case BSIM4v5_MOD_LDVT1: mod->BSIM4v5ldvt1 = value->rValue; mod->BSIM4v5ldvt1Given = TRUE; break; case BSIM4v5_MOD_LDVT2: mod->BSIM4v5ldvt2 = value->rValue; mod->BSIM4v5ldvt2Given = TRUE; break; case BSIM4v5_MOD_LDVT0W: mod->BSIM4v5ldvt0w = value->rValue; mod->BSIM4v5ldvt0wGiven = TRUE; break; case BSIM4v5_MOD_LDVT1W: mod->BSIM4v5ldvt1w = value->rValue; mod->BSIM4v5ldvt1wGiven = TRUE; break; case BSIM4v5_MOD_LDVT2W: mod->BSIM4v5ldvt2w = value->rValue; mod->BSIM4v5ldvt2wGiven = TRUE; break; case BSIM4v5_MOD_LDROUT: mod->BSIM4v5ldrout = value->rValue; mod->BSIM4v5ldroutGiven = TRUE; break; case BSIM4v5_MOD_LDSUB: mod->BSIM4v5ldsub = value->rValue; mod->BSIM4v5ldsubGiven = TRUE; break; case BSIM4v5_MOD_LVTH0: mod->BSIM4v5lvth0 = value->rValue; mod->BSIM4v5lvth0Given = TRUE; break; case BSIM4v5_MOD_LUA: mod->BSIM4v5lua = value->rValue; mod->BSIM4v5luaGiven = TRUE; break; case BSIM4v5_MOD_LUA1: mod->BSIM4v5lua1 = value->rValue; mod->BSIM4v5lua1Given = TRUE; break; case BSIM4v5_MOD_LUB: mod->BSIM4v5lub = value->rValue; mod->BSIM4v5lubGiven = TRUE; break; case BSIM4v5_MOD_LUB1: mod->BSIM4v5lub1 = value->rValue; mod->BSIM4v5lub1Given = TRUE; break; case BSIM4v5_MOD_LUC: mod->BSIM4v5luc = value->rValue; mod->BSIM4v5lucGiven = TRUE; break; case BSIM4v5_MOD_LUC1: mod->BSIM4v5luc1 = value->rValue; mod->BSIM4v5luc1Given = TRUE; break; case BSIM4v5_MOD_LU0 : mod->BSIM4v5lu0 = value->rValue; mod->BSIM4v5lu0Given = TRUE; break; case BSIM4v5_MOD_LUTE : mod->BSIM4v5lute = value->rValue; mod->BSIM4v5luteGiven = TRUE; break; case BSIM4v5_MOD_LVOFF: mod->BSIM4v5lvoff = value->rValue; mod->BSIM4v5lvoffGiven = TRUE; break; case BSIM4v5_MOD_LTVOFF: mod->BSIM4v5ltvoff = value->rValue; mod->BSIM4v5ltvoffGiven = TRUE; break; case BSIM4v5_MOD_LMINV: mod->BSIM4v5lminv = value->rValue; mod->BSIM4v5lminvGiven = TRUE; break; case BSIM4v5_MOD_LFPROUT: mod->BSIM4v5lfprout = value->rValue; mod->BSIM4v5lfproutGiven = TRUE; break; case BSIM4v5_MOD_LPDITS: mod->BSIM4v5lpdits = value->rValue; mod->BSIM4v5lpditsGiven = TRUE; break; case BSIM4v5_MOD_LPDITSD: mod->BSIM4v5lpditsd = value->rValue; mod->BSIM4v5lpditsdGiven = TRUE; break; case BSIM4v5_MOD_LDELTA : mod->BSIM4v5ldelta = value->rValue; mod->BSIM4v5ldeltaGiven = TRUE; break; case BSIM4v5_MOD_LRDSW: mod->BSIM4v5lrdsw = value->rValue; mod->BSIM4v5lrdswGiven = TRUE; break; case BSIM4v5_MOD_LRDW: mod->BSIM4v5lrdw = value->rValue; mod->BSIM4v5lrdwGiven = TRUE; break; case BSIM4v5_MOD_LRSW: mod->BSIM4v5lrsw = value->rValue; mod->BSIM4v5lrswGiven = TRUE; break; case BSIM4v5_MOD_LPRWB: mod->BSIM4v5lprwb = value->rValue; mod->BSIM4v5lprwbGiven = TRUE; break; case BSIM4v5_MOD_LPRWG: mod->BSIM4v5lprwg = value->rValue; mod->BSIM4v5lprwgGiven = TRUE; break; case BSIM4v5_MOD_LPRT: mod->BSIM4v5lprt = value->rValue; mod->BSIM4v5lprtGiven = TRUE; break; case BSIM4v5_MOD_LETA0: mod->BSIM4v5leta0 = value->rValue; mod->BSIM4v5leta0Given = TRUE; break; case BSIM4v5_MOD_LETAB: mod->BSIM4v5letab = value->rValue; mod->BSIM4v5letabGiven = TRUE; break; case BSIM4v5_MOD_LPCLM: mod->BSIM4v5lpclm = value->rValue; mod->BSIM4v5lpclmGiven = TRUE; break; case BSIM4v5_MOD_LPDIBL1: mod->BSIM4v5lpdibl1 = value->rValue; mod->BSIM4v5lpdibl1Given = TRUE; break; case BSIM4v5_MOD_LPDIBL2: mod->BSIM4v5lpdibl2 = value->rValue; mod->BSIM4v5lpdibl2Given = TRUE; break; case BSIM4v5_MOD_LPDIBLB: mod->BSIM4v5lpdiblb = value->rValue; mod->BSIM4v5lpdiblbGiven = TRUE; break; case BSIM4v5_MOD_LPSCBE1: mod->BSIM4v5lpscbe1 = value->rValue; mod->BSIM4v5lpscbe1Given = TRUE; break; case BSIM4v5_MOD_LPSCBE2: mod->BSIM4v5lpscbe2 = value->rValue; mod->BSIM4v5lpscbe2Given = TRUE; break; case BSIM4v5_MOD_LPVAG: mod->BSIM4v5lpvag = value->rValue; mod->BSIM4v5lpvagGiven = TRUE; break; case BSIM4v5_MOD_LWR : mod->BSIM4v5lwr = value->rValue; mod->BSIM4v5lwrGiven = TRUE; break; case BSIM4v5_MOD_LDWG : mod->BSIM4v5ldwg = value->rValue; mod->BSIM4v5ldwgGiven = TRUE; break; case BSIM4v5_MOD_LDWB : mod->BSIM4v5ldwb = value->rValue; mod->BSIM4v5ldwbGiven = TRUE; break; case BSIM4v5_MOD_LB0 : mod->BSIM4v5lb0 = value->rValue; mod->BSIM4v5lb0Given = TRUE; break; case BSIM4v5_MOD_LB1 : mod->BSIM4v5lb1 = value->rValue; mod->BSIM4v5lb1Given = TRUE; break; case BSIM4v5_MOD_LALPHA0 : mod->BSIM4v5lalpha0 = value->rValue; mod->BSIM4v5lalpha0Given = TRUE; break; case BSIM4v5_MOD_LALPHA1 : mod->BSIM4v5lalpha1 = value->rValue; mod->BSIM4v5lalpha1Given = TRUE; break; case BSIM4v5_MOD_LBETA0 : mod->BSIM4v5lbeta0 = value->rValue; mod->BSIM4v5lbeta0Given = TRUE; break; case BSIM4v5_MOD_LAGIDL : mod->BSIM4v5lagidl = value->rValue; mod->BSIM4v5lagidlGiven = TRUE; break; case BSIM4v5_MOD_LBGIDL : mod->BSIM4v5lbgidl = value->rValue; mod->BSIM4v5lbgidlGiven = TRUE; break; case BSIM4v5_MOD_LCGIDL : mod->BSIM4v5lcgidl = value->rValue; mod->BSIM4v5lcgidlGiven = TRUE; break; case BSIM4v5_MOD_LPHIN : mod->BSIM4v5lphin = value->rValue; mod->BSIM4v5lphinGiven = TRUE; break; case BSIM4v5_MOD_LEGIDL : mod->BSIM4v5legidl = value->rValue; mod->BSIM4v5legidlGiven = TRUE; break; case BSIM4v5_MOD_LAIGC : mod->BSIM4v5laigc = value->rValue; mod->BSIM4v5laigcGiven = TRUE; break; case BSIM4v5_MOD_LBIGC : mod->BSIM4v5lbigc = value->rValue; mod->BSIM4v5lbigcGiven = TRUE; break; case BSIM4v5_MOD_LCIGC : mod->BSIM4v5lcigc = value->rValue; mod->BSIM4v5lcigcGiven = TRUE; break; case BSIM4v5_MOD_LAIGSD : mod->BSIM4v5laigsd = value->rValue; mod->BSIM4v5laigsdGiven = TRUE; break; case BSIM4v5_MOD_LBIGSD : mod->BSIM4v5lbigsd = value->rValue; mod->BSIM4v5lbigsdGiven = TRUE; break; case BSIM4v5_MOD_LCIGSD : mod->BSIM4v5lcigsd = value->rValue; mod->BSIM4v5lcigsdGiven = TRUE; break; case BSIM4v5_MOD_LAIGBACC : mod->BSIM4v5laigbacc = value->rValue; mod->BSIM4v5laigbaccGiven = TRUE; break; case BSIM4v5_MOD_LBIGBACC : mod->BSIM4v5lbigbacc = value->rValue; mod->BSIM4v5lbigbaccGiven = TRUE; break; case BSIM4v5_MOD_LCIGBACC : mod->BSIM4v5lcigbacc = value->rValue; mod->BSIM4v5lcigbaccGiven = TRUE; break; case BSIM4v5_MOD_LAIGBINV : mod->BSIM4v5laigbinv = value->rValue; mod->BSIM4v5laigbinvGiven = TRUE; break; case BSIM4v5_MOD_LBIGBINV : mod->BSIM4v5lbigbinv = value->rValue; mod->BSIM4v5lbigbinvGiven = TRUE; break; case BSIM4v5_MOD_LCIGBINV : mod->BSIM4v5lcigbinv = value->rValue; mod->BSIM4v5lcigbinvGiven = TRUE; break; case BSIM4v5_MOD_LNIGC : mod->BSIM4v5lnigc = value->rValue; mod->BSIM4v5lnigcGiven = TRUE; break; case BSIM4v5_MOD_LNIGBINV : mod->BSIM4v5lnigbinv = value->rValue; mod->BSIM4v5lnigbinvGiven = TRUE; break; case BSIM4v5_MOD_LNIGBACC : mod->BSIM4v5lnigbacc = value->rValue; mod->BSIM4v5lnigbaccGiven = TRUE; break; case BSIM4v5_MOD_LNTOX : mod->BSIM4v5lntox = value->rValue; mod->BSIM4v5lntoxGiven = TRUE; break; case BSIM4v5_MOD_LEIGBINV : mod->BSIM4v5leigbinv = value->rValue; mod->BSIM4v5leigbinvGiven = TRUE; break; case BSIM4v5_MOD_LPIGCD : mod->BSIM4v5lpigcd = value->rValue; mod->BSIM4v5lpigcdGiven = TRUE; break; case BSIM4v5_MOD_LPOXEDGE : mod->BSIM4v5lpoxedge = value->rValue; mod->BSIM4v5lpoxedgeGiven = TRUE; break; case BSIM4v5_MOD_LXRCRG1 : mod->BSIM4v5lxrcrg1 = value->rValue; mod->BSIM4v5lxrcrg1Given = TRUE; break; case BSIM4v5_MOD_LXRCRG2 : mod->BSIM4v5lxrcrg2 = value->rValue; mod->BSIM4v5lxrcrg2Given = TRUE; break; case BSIM4v5_MOD_LLAMBDA : mod->BSIM4v5llambda = value->rValue; mod->BSIM4v5llambdaGiven = TRUE; break; case BSIM4v5_MOD_LVTL : mod->BSIM4v5lvtl = value->rValue; mod->BSIM4v5lvtlGiven = TRUE; break; case BSIM4v5_MOD_LXN: mod->BSIM4v5lxn = value->rValue; mod->BSIM4v5lxnGiven = TRUE; break; case BSIM4v5_MOD_LVFBSDOFF: mod->BSIM4v5lvfbsdoff = value->rValue; mod->BSIM4v5lvfbsdoffGiven = TRUE; break; case BSIM4v5_MOD_LTVFBSDOFF: mod->BSIM4v5ltvfbsdoff = value->rValue; mod->BSIM4v5ltvfbsdoffGiven = TRUE; break; case BSIM4v5_MOD_LEU : mod->BSIM4v5leu = value->rValue; mod->BSIM4v5leuGiven = TRUE; break; case BSIM4v5_MOD_LVFB : mod->BSIM4v5lvfb = value->rValue; mod->BSIM4v5lvfbGiven = TRUE; break; case BSIM4v5_MOD_LCGSL : mod->BSIM4v5lcgsl = value->rValue; mod->BSIM4v5lcgslGiven = TRUE; break; case BSIM4v5_MOD_LCGDL : mod->BSIM4v5lcgdl = value->rValue; mod->BSIM4v5lcgdlGiven = TRUE; break; case BSIM4v5_MOD_LCKAPPAS : mod->BSIM4v5lckappas = value->rValue; mod->BSIM4v5lckappasGiven = TRUE; break; case BSIM4v5_MOD_LCKAPPAD : mod->BSIM4v5lckappad = value->rValue; mod->BSIM4v5lckappadGiven = TRUE; break; case BSIM4v5_MOD_LCF : mod->BSIM4v5lcf = value->rValue; mod->BSIM4v5lcfGiven = TRUE; break; case BSIM4v5_MOD_LCLC : mod->BSIM4v5lclc = value->rValue; mod->BSIM4v5lclcGiven = TRUE; break; case BSIM4v5_MOD_LCLE : mod->BSIM4v5lcle = value->rValue; mod->BSIM4v5lcleGiven = TRUE; break; case BSIM4v5_MOD_LVFBCV : mod->BSIM4v5lvfbcv = value->rValue; mod->BSIM4v5lvfbcvGiven = TRUE; break; case BSIM4v5_MOD_LACDE : mod->BSIM4v5lacde = value->rValue; mod->BSIM4v5lacdeGiven = TRUE; break; case BSIM4v5_MOD_LMOIN : mod->BSIM4v5lmoin = value->rValue; mod->BSIM4v5lmoinGiven = TRUE; break; case BSIM4v5_MOD_LNOFF : mod->BSIM4v5lnoff = value->rValue; mod->BSIM4v5lnoffGiven = TRUE; break; case BSIM4v5_MOD_LVOFFCV : mod->BSIM4v5lvoffcv = value->rValue; mod->BSIM4v5lvoffcvGiven = TRUE; break; /* Width dependence */ case BSIM4v5_MOD_WCDSC : mod->BSIM4v5wcdsc = value->rValue; mod->BSIM4v5wcdscGiven = TRUE; break; case BSIM4v5_MOD_WCDSCB : mod->BSIM4v5wcdscb = value->rValue; mod->BSIM4v5wcdscbGiven = TRUE; break; case BSIM4v5_MOD_WCDSCD : mod->BSIM4v5wcdscd = value->rValue; mod->BSIM4v5wcdscdGiven = TRUE; break; case BSIM4v5_MOD_WCIT : mod->BSIM4v5wcit = value->rValue; mod->BSIM4v5wcitGiven = TRUE; break; case BSIM4v5_MOD_WNFACTOR : mod->BSIM4v5wnfactor = value->rValue; mod->BSIM4v5wnfactorGiven = TRUE; break; case BSIM4v5_MOD_WXJ: mod->BSIM4v5wxj = value->rValue; mod->BSIM4v5wxjGiven = TRUE; break; case BSIM4v5_MOD_WVSAT: mod->BSIM4v5wvsat = value->rValue; mod->BSIM4v5wvsatGiven = TRUE; break; case BSIM4v5_MOD_WA0: mod->BSIM4v5wa0 = value->rValue; mod->BSIM4v5wa0Given = TRUE; break; case BSIM4v5_MOD_WAGS: mod->BSIM4v5wags = value->rValue; mod->BSIM4v5wagsGiven = TRUE; break; case BSIM4v5_MOD_WA1: mod->BSIM4v5wa1 = value->rValue; mod->BSIM4v5wa1Given = TRUE; break; case BSIM4v5_MOD_WA2: mod->BSIM4v5wa2 = value->rValue; mod->BSIM4v5wa2Given = TRUE; break; case BSIM4v5_MOD_WAT: mod->BSIM4v5wat = value->rValue; mod->BSIM4v5watGiven = TRUE; break; case BSIM4v5_MOD_WKETA: mod->BSIM4v5wketa = value->rValue; mod->BSIM4v5wketaGiven = TRUE; break; case BSIM4v5_MOD_WNSUB: mod->BSIM4v5wnsub = value->rValue; mod->BSIM4v5wnsubGiven = TRUE; break; case BSIM4v5_MOD_WNDEP: mod->BSIM4v5wndep = value->rValue; mod->BSIM4v5wndepGiven = TRUE; if (mod->BSIM4v5wndep > 1.0e20) mod->BSIM4v5wndep *= 1.0e-6; break; case BSIM4v5_MOD_WNSD: mod->BSIM4v5wnsd = value->rValue; mod->BSIM4v5wnsdGiven = TRUE; if (mod->BSIM4v5wnsd > 1.0e23) mod->BSIM4v5wnsd *= 1.0e-6; break; case BSIM4v5_MOD_WNGATE: mod->BSIM4v5wngate = value->rValue; mod->BSIM4v5wngateGiven = TRUE; if (mod->BSIM4v5wngate > 1.0e23) mod->BSIM4v5wngate *= 1.0e-6; break; case BSIM4v5_MOD_WGAMMA1: mod->BSIM4v5wgamma1 = value->rValue; mod->BSIM4v5wgamma1Given = TRUE; break; case BSIM4v5_MOD_WGAMMA2: mod->BSIM4v5wgamma2 = value->rValue; mod->BSIM4v5wgamma2Given = TRUE; break; case BSIM4v5_MOD_WVBX: mod->BSIM4v5wvbx = value->rValue; mod->BSIM4v5wvbxGiven = TRUE; break; case BSIM4v5_MOD_WVBM: mod->BSIM4v5wvbm = value->rValue; mod->BSIM4v5wvbmGiven = TRUE; break; case BSIM4v5_MOD_WXT: mod->BSIM4v5wxt = value->rValue; mod->BSIM4v5wxtGiven = TRUE; break; case BSIM4v5_MOD_WK1: mod->BSIM4v5wk1 = value->rValue; mod->BSIM4v5wk1Given = TRUE; break; case BSIM4v5_MOD_WKT1: mod->BSIM4v5wkt1 = value->rValue; mod->BSIM4v5wkt1Given = TRUE; break; case BSIM4v5_MOD_WKT1L: mod->BSIM4v5wkt1l = value->rValue; mod->BSIM4v5wkt1lGiven = TRUE; break; case BSIM4v5_MOD_WKT2: mod->BSIM4v5wkt2 = value->rValue; mod->BSIM4v5wkt2Given = TRUE; break; case BSIM4v5_MOD_WK2: mod->BSIM4v5wk2 = value->rValue; mod->BSIM4v5wk2Given = TRUE; break; case BSIM4v5_MOD_WK3: mod->BSIM4v5wk3 = value->rValue; mod->BSIM4v5wk3Given = TRUE; break; case BSIM4v5_MOD_WK3B: mod->BSIM4v5wk3b = value->rValue; mod->BSIM4v5wk3bGiven = TRUE; break; case BSIM4v5_MOD_WLPE0: mod->BSIM4v5wlpe0 = value->rValue; mod->BSIM4v5wlpe0Given = TRUE; break; case BSIM4v5_MOD_WLPEB: mod->BSIM4v5wlpeb = value->rValue; mod->BSIM4v5wlpebGiven = TRUE; break; case BSIM4v5_MOD_WDVTP0: mod->BSIM4v5wdvtp0 = value->rValue; mod->BSIM4v5wdvtp0Given = TRUE; break; case BSIM4v5_MOD_WDVTP1: mod->BSIM4v5wdvtp1 = value->rValue; mod->BSIM4v5wdvtp1Given = TRUE; break; case BSIM4v5_MOD_WW0: mod->BSIM4v5ww0 = value->rValue; mod->BSIM4v5ww0Given = TRUE; break; case BSIM4v5_MOD_WDVT0: mod->BSIM4v5wdvt0 = value->rValue; mod->BSIM4v5wdvt0Given = TRUE; break; case BSIM4v5_MOD_WDVT1: mod->BSIM4v5wdvt1 = value->rValue; mod->BSIM4v5wdvt1Given = TRUE; break; case BSIM4v5_MOD_WDVT2: mod->BSIM4v5wdvt2 = value->rValue; mod->BSIM4v5wdvt2Given = TRUE; break; case BSIM4v5_MOD_WDVT0W: mod->BSIM4v5wdvt0w = value->rValue; mod->BSIM4v5wdvt0wGiven = TRUE; break; case BSIM4v5_MOD_WDVT1W: mod->BSIM4v5wdvt1w = value->rValue; mod->BSIM4v5wdvt1wGiven = TRUE; break; case BSIM4v5_MOD_WDVT2W: mod->BSIM4v5wdvt2w = value->rValue; mod->BSIM4v5wdvt2wGiven = TRUE; break; case BSIM4v5_MOD_WDROUT: mod->BSIM4v5wdrout = value->rValue; mod->BSIM4v5wdroutGiven = TRUE; break; case BSIM4v5_MOD_WDSUB: mod->BSIM4v5wdsub = value->rValue; mod->BSIM4v5wdsubGiven = TRUE; break; case BSIM4v5_MOD_WVTH0: mod->BSIM4v5wvth0 = value->rValue; mod->BSIM4v5wvth0Given = TRUE; break; case BSIM4v5_MOD_WUA: mod->BSIM4v5wua = value->rValue; mod->BSIM4v5wuaGiven = TRUE; break; case BSIM4v5_MOD_WUA1: mod->BSIM4v5wua1 = value->rValue; mod->BSIM4v5wua1Given = TRUE; break; case BSIM4v5_MOD_WUB: mod->BSIM4v5wub = value->rValue; mod->BSIM4v5wubGiven = TRUE; break; case BSIM4v5_MOD_WUB1: mod->BSIM4v5wub1 = value->rValue; mod->BSIM4v5wub1Given = TRUE; break; case BSIM4v5_MOD_WUC: mod->BSIM4v5wuc = value->rValue; mod->BSIM4v5wucGiven = TRUE; break; case BSIM4v5_MOD_WUC1: mod->BSIM4v5wuc1 = value->rValue; mod->BSIM4v5wuc1Given = TRUE; break; case BSIM4v5_MOD_WU0 : mod->BSIM4v5wu0 = value->rValue; mod->BSIM4v5wu0Given = TRUE; break; case BSIM4v5_MOD_WUTE : mod->BSIM4v5wute = value->rValue; mod->BSIM4v5wuteGiven = TRUE; break; case BSIM4v5_MOD_WVOFF: mod->BSIM4v5wvoff = value->rValue; mod->BSIM4v5wvoffGiven = TRUE; break; case BSIM4v5_MOD_WTVOFF: mod->BSIM4v5wtvoff = value->rValue; mod->BSIM4v5wtvoffGiven = TRUE; break; case BSIM4v5_MOD_WMINV: mod->BSIM4v5wminv = value->rValue; mod->BSIM4v5wminvGiven = TRUE; break; case BSIM4v5_MOD_WFPROUT: mod->BSIM4v5wfprout = value->rValue; mod->BSIM4v5wfproutGiven = TRUE; break; case BSIM4v5_MOD_WPDITS: mod->BSIM4v5wpdits = value->rValue; mod->BSIM4v5wpditsGiven = TRUE; break; case BSIM4v5_MOD_WPDITSD: mod->BSIM4v5wpditsd = value->rValue; mod->BSIM4v5wpditsdGiven = TRUE; break; case BSIM4v5_MOD_WDELTA : mod->BSIM4v5wdelta = value->rValue; mod->BSIM4v5wdeltaGiven = TRUE; break; case BSIM4v5_MOD_WRDSW: mod->BSIM4v5wrdsw = value->rValue; mod->BSIM4v5wrdswGiven = TRUE; break; case BSIM4v5_MOD_WRDW: mod->BSIM4v5wrdw = value->rValue; mod->BSIM4v5wrdwGiven = TRUE; break; case BSIM4v5_MOD_WRSW: mod->BSIM4v5wrsw = value->rValue; mod->BSIM4v5wrswGiven = TRUE; break; case BSIM4v5_MOD_WPRWB: mod->BSIM4v5wprwb = value->rValue; mod->BSIM4v5wprwbGiven = TRUE; break; case BSIM4v5_MOD_WPRWG: mod->BSIM4v5wprwg = value->rValue; mod->BSIM4v5wprwgGiven = TRUE; break; case BSIM4v5_MOD_WPRT: mod->BSIM4v5wprt = value->rValue; mod->BSIM4v5wprtGiven = TRUE; break; case BSIM4v5_MOD_WETA0: mod->BSIM4v5weta0 = value->rValue; mod->BSIM4v5weta0Given = TRUE; break; case BSIM4v5_MOD_WETAB: mod->BSIM4v5wetab = value->rValue; mod->BSIM4v5wetabGiven = TRUE; break; case BSIM4v5_MOD_WPCLM: mod->BSIM4v5wpclm = value->rValue; mod->BSIM4v5wpclmGiven = TRUE; break; case BSIM4v5_MOD_WPDIBL1: mod->BSIM4v5wpdibl1 = value->rValue; mod->BSIM4v5wpdibl1Given = TRUE; break; case BSIM4v5_MOD_WPDIBL2: mod->BSIM4v5wpdibl2 = value->rValue; mod->BSIM4v5wpdibl2Given = TRUE; break; case BSIM4v5_MOD_WPDIBLB: mod->BSIM4v5wpdiblb = value->rValue; mod->BSIM4v5wpdiblbGiven = TRUE; break; case BSIM4v5_MOD_WPSCBE1: mod->BSIM4v5wpscbe1 = value->rValue; mod->BSIM4v5wpscbe1Given = TRUE; break; case BSIM4v5_MOD_WPSCBE2: mod->BSIM4v5wpscbe2 = value->rValue; mod->BSIM4v5wpscbe2Given = TRUE; break; case BSIM4v5_MOD_WPVAG: mod->BSIM4v5wpvag = value->rValue; mod->BSIM4v5wpvagGiven = TRUE; break; case BSIM4v5_MOD_WWR : mod->BSIM4v5wwr = value->rValue; mod->BSIM4v5wwrGiven = TRUE; break; case BSIM4v5_MOD_WDWG : mod->BSIM4v5wdwg = value->rValue; mod->BSIM4v5wdwgGiven = TRUE; break; case BSIM4v5_MOD_WDWB : mod->BSIM4v5wdwb = value->rValue; mod->BSIM4v5wdwbGiven = TRUE; break; case BSIM4v5_MOD_WB0 : mod->BSIM4v5wb0 = value->rValue; mod->BSIM4v5wb0Given = TRUE; break; case BSIM4v5_MOD_WB1 : mod->BSIM4v5wb1 = value->rValue; mod->BSIM4v5wb1Given = TRUE; break; case BSIM4v5_MOD_WALPHA0 : mod->BSIM4v5walpha0 = value->rValue; mod->BSIM4v5walpha0Given = TRUE; break; case BSIM4v5_MOD_WALPHA1 : mod->BSIM4v5walpha1 = value->rValue; mod->BSIM4v5walpha1Given = TRUE; break; case BSIM4v5_MOD_WBETA0 : mod->BSIM4v5wbeta0 = value->rValue; mod->BSIM4v5wbeta0Given = TRUE; break; case BSIM4v5_MOD_WAGIDL : mod->BSIM4v5wagidl = value->rValue; mod->BSIM4v5wagidlGiven = TRUE; break; case BSIM4v5_MOD_WBGIDL : mod->BSIM4v5wbgidl = value->rValue; mod->BSIM4v5wbgidlGiven = TRUE; break; case BSIM4v5_MOD_WCGIDL : mod->BSIM4v5wcgidl = value->rValue; mod->BSIM4v5wcgidlGiven = TRUE; break; case BSIM4v5_MOD_WPHIN : mod->BSIM4v5wphin = value->rValue; mod->BSIM4v5wphinGiven = TRUE; break; case BSIM4v5_MOD_WEGIDL : mod->BSIM4v5wegidl = value->rValue; mod->BSIM4v5wegidlGiven = TRUE; break; case BSIM4v5_MOD_WAIGC : mod->BSIM4v5waigc = value->rValue; mod->BSIM4v5waigcGiven = TRUE; break; case BSIM4v5_MOD_WBIGC : mod->BSIM4v5wbigc = value->rValue; mod->BSIM4v5wbigcGiven = TRUE; break; case BSIM4v5_MOD_WCIGC : mod->BSIM4v5wcigc = value->rValue; mod->BSIM4v5wcigcGiven = TRUE; break; case BSIM4v5_MOD_WAIGSD : mod->BSIM4v5waigsd = value->rValue; mod->BSIM4v5waigsdGiven = TRUE; break; case BSIM4v5_MOD_WBIGSD : mod->BSIM4v5wbigsd = value->rValue; mod->BSIM4v5wbigsdGiven = TRUE; break; case BSIM4v5_MOD_WCIGSD : mod->BSIM4v5wcigsd = value->rValue; mod->BSIM4v5wcigsdGiven = TRUE; break; case BSIM4v5_MOD_WAIGBACC : mod->BSIM4v5waigbacc = value->rValue; mod->BSIM4v5waigbaccGiven = TRUE; break; case BSIM4v5_MOD_WBIGBACC : mod->BSIM4v5wbigbacc = value->rValue; mod->BSIM4v5wbigbaccGiven = TRUE; break; case BSIM4v5_MOD_WCIGBACC : mod->BSIM4v5wcigbacc = value->rValue; mod->BSIM4v5wcigbaccGiven = TRUE; break; case BSIM4v5_MOD_WAIGBINV : mod->BSIM4v5waigbinv = value->rValue; mod->BSIM4v5waigbinvGiven = TRUE; break; case BSIM4v5_MOD_WBIGBINV : mod->BSIM4v5wbigbinv = value->rValue; mod->BSIM4v5wbigbinvGiven = TRUE; break; case BSIM4v5_MOD_WCIGBINV : mod->BSIM4v5wcigbinv = value->rValue; mod->BSIM4v5wcigbinvGiven = TRUE; break; case BSIM4v5_MOD_WNIGC : mod->BSIM4v5wnigc = value->rValue; mod->BSIM4v5wnigcGiven = TRUE; break; case BSIM4v5_MOD_WNIGBINV : mod->BSIM4v5wnigbinv = value->rValue; mod->BSIM4v5wnigbinvGiven = TRUE; break; case BSIM4v5_MOD_WNIGBACC : mod->BSIM4v5wnigbacc = value->rValue; mod->BSIM4v5wnigbaccGiven = TRUE; break; case BSIM4v5_MOD_WNTOX : mod->BSIM4v5wntox = value->rValue; mod->BSIM4v5wntoxGiven = TRUE; break; case BSIM4v5_MOD_WEIGBINV : mod->BSIM4v5weigbinv = value->rValue; mod->BSIM4v5weigbinvGiven = TRUE; break; case BSIM4v5_MOD_WPIGCD : mod->BSIM4v5wpigcd = value->rValue; mod->BSIM4v5wpigcdGiven = TRUE; break; case BSIM4v5_MOD_WPOXEDGE : mod->BSIM4v5wpoxedge = value->rValue; mod->BSIM4v5wpoxedgeGiven = TRUE; break; case BSIM4v5_MOD_WXRCRG1 : mod->BSIM4v5wxrcrg1 = value->rValue; mod->BSIM4v5wxrcrg1Given = TRUE; break; case BSIM4v5_MOD_WXRCRG2 : mod->BSIM4v5wxrcrg2 = value->rValue; mod->BSIM4v5wxrcrg2Given = TRUE; break; case BSIM4v5_MOD_WLAMBDA : mod->BSIM4v5wlambda = value->rValue; mod->BSIM4v5wlambdaGiven = TRUE; break; case BSIM4v5_MOD_WVTL : mod->BSIM4v5wvtl = value->rValue; mod->BSIM4v5wvtlGiven = TRUE; break; case BSIM4v5_MOD_WXN: mod->BSIM4v5wxn = value->rValue; mod->BSIM4v5wxnGiven = TRUE; break; case BSIM4v5_MOD_WVFBSDOFF: mod->BSIM4v5wvfbsdoff = value->rValue; mod->BSIM4v5wvfbsdoffGiven = TRUE; break; case BSIM4v5_MOD_WTVFBSDOFF: mod->BSIM4v5wtvfbsdoff = value->rValue; mod->BSIM4v5wtvfbsdoffGiven = TRUE; break; case BSIM4v5_MOD_WEU : mod->BSIM4v5weu = value->rValue; mod->BSIM4v5weuGiven = TRUE; break; case BSIM4v5_MOD_WVFB : mod->BSIM4v5wvfb = value->rValue; mod->BSIM4v5wvfbGiven = TRUE; break; case BSIM4v5_MOD_WCGSL : mod->BSIM4v5wcgsl = value->rValue; mod->BSIM4v5wcgslGiven = TRUE; break; case BSIM4v5_MOD_WCGDL : mod->BSIM4v5wcgdl = value->rValue; mod->BSIM4v5wcgdlGiven = TRUE; break; case BSIM4v5_MOD_WCKAPPAS : mod->BSIM4v5wckappas = value->rValue; mod->BSIM4v5wckappasGiven = TRUE; break; case BSIM4v5_MOD_WCKAPPAD : mod->BSIM4v5wckappad = value->rValue; mod->BSIM4v5wckappadGiven = TRUE; break; case BSIM4v5_MOD_WCF : mod->BSIM4v5wcf = value->rValue; mod->BSIM4v5wcfGiven = TRUE; break; case BSIM4v5_MOD_WCLC : mod->BSIM4v5wclc = value->rValue; mod->BSIM4v5wclcGiven = TRUE; break; case BSIM4v5_MOD_WCLE : mod->BSIM4v5wcle = value->rValue; mod->BSIM4v5wcleGiven = TRUE; break; case BSIM4v5_MOD_WVFBCV : mod->BSIM4v5wvfbcv = value->rValue; mod->BSIM4v5wvfbcvGiven = TRUE; break; case BSIM4v5_MOD_WACDE : mod->BSIM4v5wacde = value->rValue; mod->BSIM4v5wacdeGiven = TRUE; break; case BSIM4v5_MOD_WMOIN : mod->BSIM4v5wmoin = value->rValue; mod->BSIM4v5wmoinGiven = TRUE; break; case BSIM4v5_MOD_WNOFF : mod->BSIM4v5wnoff = value->rValue; mod->BSIM4v5wnoffGiven = TRUE; break; case BSIM4v5_MOD_WVOFFCV : mod->BSIM4v5wvoffcv = value->rValue; mod->BSIM4v5wvoffcvGiven = TRUE; break; /* Cross-term dependence */ case BSIM4v5_MOD_PCDSC : mod->BSIM4v5pcdsc = value->rValue; mod->BSIM4v5pcdscGiven = TRUE; break; case BSIM4v5_MOD_PCDSCB : mod->BSIM4v5pcdscb = value->rValue; mod->BSIM4v5pcdscbGiven = TRUE; break; case BSIM4v5_MOD_PCDSCD : mod->BSIM4v5pcdscd = value->rValue; mod->BSIM4v5pcdscdGiven = TRUE; break; case BSIM4v5_MOD_PCIT : mod->BSIM4v5pcit = value->rValue; mod->BSIM4v5pcitGiven = TRUE; break; case BSIM4v5_MOD_PNFACTOR : mod->BSIM4v5pnfactor = value->rValue; mod->BSIM4v5pnfactorGiven = TRUE; break; case BSIM4v5_MOD_PXJ: mod->BSIM4v5pxj = value->rValue; mod->BSIM4v5pxjGiven = TRUE; break; case BSIM4v5_MOD_PVSAT: mod->BSIM4v5pvsat = value->rValue; mod->BSIM4v5pvsatGiven = TRUE; break; case BSIM4v5_MOD_PA0: mod->BSIM4v5pa0 = value->rValue; mod->BSIM4v5pa0Given = TRUE; break; case BSIM4v5_MOD_PAGS: mod->BSIM4v5pags = value->rValue; mod->BSIM4v5pagsGiven = TRUE; break; case BSIM4v5_MOD_PA1: mod->BSIM4v5pa1 = value->rValue; mod->BSIM4v5pa1Given = TRUE; break; case BSIM4v5_MOD_PA2: mod->BSIM4v5pa2 = value->rValue; mod->BSIM4v5pa2Given = TRUE; break; case BSIM4v5_MOD_PAT: mod->BSIM4v5pat = value->rValue; mod->BSIM4v5patGiven = TRUE; break; case BSIM4v5_MOD_PKETA: mod->BSIM4v5pketa = value->rValue; mod->BSIM4v5pketaGiven = TRUE; break; case BSIM4v5_MOD_PNSUB: mod->BSIM4v5pnsub = value->rValue; mod->BSIM4v5pnsubGiven = TRUE; break; case BSIM4v5_MOD_PNDEP: mod->BSIM4v5pndep = value->rValue; mod->BSIM4v5pndepGiven = TRUE; if (mod->BSIM4v5pndep > 1.0e20) mod->BSIM4v5pndep *= 1.0e-6; break; case BSIM4v5_MOD_PNSD: mod->BSIM4v5pnsd = value->rValue; mod->BSIM4v5pnsdGiven = TRUE; if (mod->BSIM4v5pnsd > 1.0e23) mod->BSIM4v5pnsd *= 1.0e-6; break; case BSIM4v5_MOD_PNGATE: mod->BSIM4v5pngate = value->rValue; mod->BSIM4v5pngateGiven = TRUE; if (mod->BSIM4v5pngate > 1.0e23) mod->BSIM4v5pngate *= 1.0e-6; break; case BSIM4v5_MOD_PGAMMA1: mod->BSIM4v5pgamma1 = value->rValue; mod->BSIM4v5pgamma1Given = TRUE; break; case BSIM4v5_MOD_PGAMMA2: mod->BSIM4v5pgamma2 = value->rValue; mod->BSIM4v5pgamma2Given = TRUE; break; case BSIM4v5_MOD_PVBX: mod->BSIM4v5pvbx = value->rValue; mod->BSIM4v5pvbxGiven = TRUE; break; case BSIM4v5_MOD_PVBM: mod->BSIM4v5pvbm = value->rValue; mod->BSIM4v5pvbmGiven = TRUE; break; case BSIM4v5_MOD_PXT: mod->BSIM4v5pxt = value->rValue; mod->BSIM4v5pxtGiven = TRUE; break; case BSIM4v5_MOD_PK1: mod->BSIM4v5pk1 = value->rValue; mod->BSIM4v5pk1Given = TRUE; break; case BSIM4v5_MOD_PKT1: mod->BSIM4v5pkt1 = value->rValue; mod->BSIM4v5pkt1Given = TRUE; break; case BSIM4v5_MOD_PKT1L: mod->BSIM4v5pkt1l = value->rValue; mod->BSIM4v5pkt1lGiven = TRUE; break; case BSIM4v5_MOD_PKT2: mod->BSIM4v5pkt2 = value->rValue; mod->BSIM4v5pkt2Given = TRUE; break; case BSIM4v5_MOD_PK2: mod->BSIM4v5pk2 = value->rValue; mod->BSIM4v5pk2Given = TRUE; break; case BSIM4v5_MOD_PK3: mod->BSIM4v5pk3 = value->rValue; mod->BSIM4v5pk3Given = TRUE; break; case BSIM4v5_MOD_PK3B: mod->BSIM4v5pk3b = value->rValue; mod->BSIM4v5pk3bGiven = TRUE; break; case BSIM4v5_MOD_PLPE0: mod->BSIM4v5plpe0 = value->rValue; mod->BSIM4v5plpe0Given = TRUE; break; case BSIM4v5_MOD_PLPEB: mod->BSIM4v5plpeb = value->rValue; mod->BSIM4v5plpebGiven = TRUE; break; case BSIM4v5_MOD_PDVTP0: mod->BSIM4v5pdvtp0 = value->rValue; mod->BSIM4v5pdvtp0Given = TRUE; break; case BSIM4v5_MOD_PDVTP1: mod->BSIM4v5pdvtp1 = value->rValue; mod->BSIM4v5pdvtp1Given = TRUE; break; case BSIM4v5_MOD_PW0: mod->BSIM4v5pw0 = value->rValue; mod->BSIM4v5pw0Given = TRUE; break; case BSIM4v5_MOD_PDVT0: mod->BSIM4v5pdvt0 = value->rValue; mod->BSIM4v5pdvt0Given = TRUE; break; case BSIM4v5_MOD_PDVT1: mod->BSIM4v5pdvt1 = value->rValue; mod->BSIM4v5pdvt1Given = TRUE; break; case BSIM4v5_MOD_PDVT2: mod->BSIM4v5pdvt2 = value->rValue; mod->BSIM4v5pdvt2Given = TRUE; break; case BSIM4v5_MOD_PDVT0W: mod->BSIM4v5pdvt0w = value->rValue; mod->BSIM4v5pdvt0wGiven = TRUE; break; case BSIM4v5_MOD_PDVT1W: mod->BSIM4v5pdvt1w = value->rValue; mod->BSIM4v5pdvt1wGiven = TRUE; break; case BSIM4v5_MOD_PDVT2W: mod->BSIM4v5pdvt2w = value->rValue; mod->BSIM4v5pdvt2wGiven = TRUE; break; case BSIM4v5_MOD_PDROUT: mod->BSIM4v5pdrout = value->rValue; mod->BSIM4v5pdroutGiven = TRUE; break; case BSIM4v5_MOD_PDSUB: mod->BSIM4v5pdsub = value->rValue; mod->BSIM4v5pdsubGiven = TRUE; break; case BSIM4v5_MOD_PVTH0: mod->BSIM4v5pvth0 = value->rValue; mod->BSIM4v5pvth0Given = TRUE; break; case BSIM4v5_MOD_PUA: mod->BSIM4v5pua = value->rValue; mod->BSIM4v5puaGiven = TRUE; break; case BSIM4v5_MOD_PUA1: mod->BSIM4v5pua1 = value->rValue; mod->BSIM4v5pua1Given = TRUE; break; case BSIM4v5_MOD_PUB: mod->BSIM4v5pub = value->rValue; mod->BSIM4v5pubGiven = TRUE; break; case BSIM4v5_MOD_PUB1: mod->BSIM4v5pub1 = value->rValue; mod->BSIM4v5pub1Given = TRUE; break; case BSIM4v5_MOD_PUC: mod->BSIM4v5puc = value->rValue; mod->BSIM4v5pucGiven = TRUE; break; case BSIM4v5_MOD_PUC1: mod->BSIM4v5puc1 = value->rValue; mod->BSIM4v5puc1Given = TRUE; break; case BSIM4v5_MOD_PU0 : mod->BSIM4v5pu0 = value->rValue; mod->BSIM4v5pu0Given = TRUE; break; case BSIM4v5_MOD_PUTE : mod->BSIM4v5pute = value->rValue; mod->BSIM4v5puteGiven = TRUE; break; case BSIM4v5_MOD_PVOFF: mod->BSIM4v5pvoff = value->rValue; mod->BSIM4v5pvoffGiven = TRUE; break; case BSIM4v5_MOD_PTVOFF: mod->BSIM4v5ptvoff = value->rValue; mod->BSIM4v5ptvoffGiven = TRUE; break; case BSIM4v5_MOD_PMINV: mod->BSIM4v5pminv = value->rValue; mod->BSIM4v5pminvGiven = TRUE; break; case BSIM4v5_MOD_PFPROUT: mod->BSIM4v5pfprout = value->rValue; mod->BSIM4v5pfproutGiven = TRUE; break; case BSIM4v5_MOD_PPDITS: mod->BSIM4v5ppdits = value->rValue; mod->BSIM4v5ppditsGiven = TRUE; break; case BSIM4v5_MOD_PPDITSD: mod->BSIM4v5ppditsd = value->rValue; mod->BSIM4v5ppditsdGiven = TRUE; break; case BSIM4v5_MOD_PDELTA : mod->BSIM4v5pdelta = value->rValue; mod->BSIM4v5pdeltaGiven = TRUE; break; case BSIM4v5_MOD_PRDSW: mod->BSIM4v5prdsw = value->rValue; mod->BSIM4v5prdswGiven = TRUE; break; case BSIM4v5_MOD_PRDW: mod->BSIM4v5prdw = value->rValue; mod->BSIM4v5prdwGiven = TRUE; break; case BSIM4v5_MOD_PRSW: mod->BSIM4v5prsw = value->rValue; mod->BSIM4v5prswGiven = TRUE; break; case BSIM4v5_MOD_PPRWB: mod->BSIM4v5pprwb = value->rValue; mod->BSIM4v5pprwbGiven = TRUE; break; case BSIM4v5_MOD_PPRWG: mod->BSIM4v5pprwg = value->rValue; mod->BSIM4v5pprwgGiven = TRUE; break; case BSIM4v5_MOD_PPRT: mod->BSIM4v5pprt = value->rValue; mod->BSIM4v5pprtGiven = TRUE; break; case BSIM4v5_MOD_PETA0: mod->BSIM4v5peta0 = value->rValue; mod->BSIM4v5peta0Given = TRUE; break; case BSIM4v5_MOD_PETAB: mod->BSIM4v5petab = value->rValue; mod->BSIM4v5petabGiven = TRUE; break; case BSIM4v5_MOD_PPCLM: mod->BSIM4v5ppclm = value->rValue; mod->BSIM4v5ppclmGiven = TRUE; break; case BSIM4v5_MOD_PPDIBL1: mod->BSIM4v5ppdibl1 = value->rValue; mod->BSIM4v5ppdibl1Given = TRUE; break; case BSIM4v5_MOD_PPDIBL2: mod->BSIM4v5ppdibl2 = value->rValue; mod->BSIM4v5ppdibl2Given = TRUE; break; case BSIM4v5_MOD_PPDIBLB: mod->BSIM4v5ppdiblb = value->rValue; mod->BSIM4v5ppdiblbGiven = TRUE; break; case BSIM4v5_MOD_PPSCBE1: mod->BSIM4v5ppscbe1 = value->rValue; mod->BSIM4v5ppscbe1Given = TRUE; break; case BSIM4v5_MOD_PPSCBE2: mod->BSIM4v5ppscbe2 = value->rValue; mod->BSIM4v5ppscbe2Given = TRUE; break; case BSIM4v5_MOD_PPVAG: mod->BSIM4v5ppvag = value->rValue; mod->BSIM4v5ppvagGiven = TRUE; break; case BSIM4v5_MOD_PWR : mod->BSIM4v5pwr = value->rValue; mod->BSIM4v5pwrGiven = TRUE; break; case BSIM4v5_MOD_PDWG : mod->BSIM4v5pdwg = value->rValue; mod->BSIM4v5pdwgGiven = TRUE; break; case BSIM4v5_MOD_PDWB : mod->BSIM4v5pdwb = value->rValue; mod->BSIM4v5pdwbGiven = TRUE; break; case BSIM4v5_MOD_PB0 : mod->BSIM4v5pb0 = value->rValue; mod->BSIM4v5pb0Given = TRUE; break; case BSIM4v5_MOD_PB1 : mod->BSIM4v5pb1 = value->rValue; mod->BSIM4v5pb1Given = TRUE; break; case BSIM4v5_MOD_PALPHA0 : mod->BSIM4v5palpha0 = value->rValue; mod->BSIM4v5palpha0Given = TRUE; break; case BSIM4v5_MOD_PALPHA1 : mod->BSIM4v5palpha1 = value->rValue; mod->BSIM4v5palpha1Given = TRUE; break; case BSIM4v5_MOD_PBETA0 : mod->BSIM4v5pbeta0 = value->rValue; mod->BSIM4v5pbeta0Given = TRUE; break; case BSIM4v5_MOD_PAGIDL : mod->BSIM4v5pagidl = value->rValue; mod->BSIM4v5pagidlGiven = TRUE; break; case BSIM4v5_MOD_PBGIDL : mod->BSIM4v5pbgidl = value->rValue; mod->BSIM4v5pbgidlGiven = TRUE; break; case BSIM4v5_MOD_PCGIDL : mod->BSIM4v5pcgidl = value->rValue; mod->BSIM4v5pcgidlGiven = TRUE; break; case BSIM4v5_MOD_PPHIN : mod->BSIM4v5pphin = value->rValue; mod->BSIM4v5pphinGiven = TRUE; break; case BSIM4v5_MOD_PEGIDL : mod->BSIM4v5pegidl = value->rValue; mod->BSIM4v5pegidlGiven = TRUE; break; case BSIM4v5_MOD_PAIGC : mod->BSIM4v5paigc = value->rValue; mod->BSIM4v5paigcGiven = TRUE; break; case BSIM4v5_MOD_PBIGC : mod->BSIM4v5pbigc = value->rValue; mod->BSIM4v5pbigcGiven = TRUE; break; case BSIM4v5_MOD_PCIGC : mod->BSIM4v5pcigc = value->rValue; mod->BSIM4v5pcigcGiven = TRUE; break; case BSIM4v5_MOD_PAIGSD : mod->BSIM4v5paigsd = value->rValue; mod->BSIM4v5paigsdGiven = TRUE; break; case BSIM4v5_MOD_PBIGSD : mod->BSIM4v5pbigsd = value->rValue; mod->BSIM4v5pbigsdGiven = TRUE; break; case BSIM4v5_MOD_PCIGSD : mod->BSIM4v5pcigsd = value->rValue; mod->BSIM4v5pcigsdGiven = TRUE; break; case BSIM4v5_MOD_PAIGBACC : mod->BSIM4v5paigbacc = value->rValue; mod->BSIM4v5paigbaccGiven = TRUE; break; case BSIM4v5_MOD_PBIGBACC : mod->BSIM4v5pbigbacc = value->rValue; mod->BSIM4v5pbigbaccGiven = TRUE; break; case BSIM4v5_MOD_PCIGBACC : mod->BSIM4v5pcigbacc = value->rValue; mod->BSIM4v5pcigbaccGiven = TRUE; break; case BSIM4v5_MOD_PAIGBINV : mod->BSIM4v5paigbinv = value->rValue; mod->BSIM4v5paigbinvGiven = TRUE; break; case BSIM4v5_MOD_PBIGBINV : mod->BSIM4v5pbigbinv = value->rValue; mod->BSIM4v5pbigbinvGiven = TRUE; break; case BSIM4v5_MOD_PCIGBINV : mod->BSIM4v5pcigbinv = value->rValue; mod->BSIM4v5pcigbinvGiven = TRUE; break; case BSIM4v5_MOD_PNIGC : mod->BSIM4v5pnigc = value->rValue; mod->BSIM4v5pnigcGiven = TRUE; break; case BSIM4v5_MOD_PNIGBINV : mod->BSIM4v5pnigbinv = value->rValue; mod->BSIM4v5pnigbinvGiven = TRUE; break; case BSIM4v5_MOD_PNIGBACC : mod->BSIM4v5pnigbacc = value->rValue; mod->BSIM4v5pnigbaccGiven = TRUE; break; case BSIM4v5_MOD_PNTOX : mod->BSIM4v5pntox = value->rValue; mod->BSIM4v5pntoxGiven = TRUE; break; case BSIM4v5_MOD_PEIGBINV : mod->BSIM4v5peigbinv = value->rValue; mod->BSIM4v5peigbinvGiven = TRUE; break; case BSIM4v5_MOD_PPIGCD : mod->BSIM4v5ppigcd = value->rValue; mod->BSIM4v5ppigcdGiven = TRUE; break; case BSIM4v5_MOD_PPOXEDGE : mod->BSIM4v5ppoxedge = value->rValue; mod->BSIM4v5ppoxedgeGiven = TRUE; break; case BSIM4v5_MOD_PXRCRG1 : mod->BSIM4v5pxrcrg1 = value->rValue; mod->BSIM4v5pxrcrg1Given = TRUE; break; case BSIM4v5_MOD_PXRCRG2 : mod->BSIM4v5pxrcrg2 = value->rValue; mod->BSIM4v5pxrcrg2Given = TRUE; break; case BSIM4v5_MOD_PLAMBDA : mod->BSIM4v5plambda = value->rValue; mod->BSIM4v5plambdaGiven = TRUE; break; case BSIM4v5_MOD_PVTL : mod->BSIM4v5pvtl = value->rValue; mod->BSIM4v5pvtlGiven = TRUE; break; case BSIM4v5_MOD_PXN: mod->BSIM4v5pxn = value->rValue; mod->BSIM4v5pxnGiven = TRUE; break; case BSIM4v5_MOD_PVFBSDOFF: mod->BSIM4v5pvfbsdoff = value->rValue; mod->BSIM4v5pvfbsdoffGiven = TRUE; break; case BSIM4v5_MOD_PTVFBSDOFF: mod->BSIM4v5ptvfbsdoff = value->rValue; mod->BSIM4v5ptvfbsdoffGiven = TRUE; break; case BSIM4v5_MOD_PEU : mod->BSIM4v5peu = value->rValue; mod->BSIM4v5peuGiven = TRUE; break; case BSIM4v5_MOD_PVFB : mod->BSIM4v5pvfb = value->rValue; mod->BSIM4v5pvfbGiven = TRUE; break; case BSIM4v5_MOD_PCGSL : mod->BSIM4v5pcgsl = value->rValue; mod->BSIM4v5pcgslGiven = TRUE; break; case BSIM4v5_MOD_PCGDL : mod->BSIM4v5pcgdl = value->rValue; mod->BSIM4v5pcgdlGiven = TRUE; break; case BSIM4v5_MOD_PCKAPPAS : mod->BSIM4v5pckappas = value->rValue; mod->BSIM4v5pckappasGiven = TRUE; break; case BSIM4v5_MOD_PCKAPPAD : mod->BSIM4v5pckappad = value->rValue; mod->BSIM4v5pckappadGiven = TRUE; break; case BSIM4v5_MOD_PCF : mod->BSIM4v5pcf = value->rValue; mod->BSIM4v5pcfGiven = TRUE; break; case BSIM4v5_MOD_PCLC : mod->BSIM4v5pclc = value->rValue; mod->BSIM4v5pclcGiven = TRUE; break; case BSIM4v5_MOD_PCLE : mod->BSIM4v5pcle = value->rValue; mod->BSIM4v5pcleGiven = TRUE; break; case BSIM4v5_MOD_PVFBCV : mod->BSIM4v5pvfbcv = value->rValue; mod->BSIM4v5pvfbcvGiven = TRUE; break; case BSIM4v5_MOD_PACDE : mod->BSIM4v5pacde = value->rValue; mod->BSIM4v5pacdeGiven = TRUE; break; case BSIM4v5_MOD_PMOIN : mod->BSIM4v5pmoin = value->rValue; mod->BSIM4v5pmoinGiven = TRUE; break; case BSIM4v5_MOD_PNOFF : mod->BSIM4v5pnoff = value->rValue; mod->BSIM4v5pnoffGiven = TRUE; break; case BSIM4v5_MOD_PVOFFCV : mod->BSIM4v5pvoffcv = value->rValue; mod->BSIM4v5pvoffcvGiven = TRUE; break; case BSIM4v5_MOD_TNOM : mod->BSIM4v5tnom = value->rValue + CONSTCtoK; mod->BSIM4v5tnomGiven = TRUE; break; case BSIM4v5_MOD_CGSO : mod->BSIM4v5cgso = value->rValue; mod->BSIM4v5cgsoGiven = TRUE; break; case BSIM4v5_MOD_CGDO : mod->BSIM4v5cgdo = value->rValue; mod->BSIM4v5cgdoGiven = TRUE; break; case BSIM4v5_MOD_CGBO : mod->BSIM4v5cgbo = value->rValue; mod->BSIM4v5cgboGiven = TRUE; break; case BSIM4v5_MOD_XPART : mod->BSIM4v5xpart = value->rValue; mod->BSIM4v5xpartGiven = TRUE; break; case BSIM4v5_MOD_RSH : mod->BSIM4v5sheetResistance = value->rValue; mod->BSIM4v5sheetResistanceGiven = TRUE; break; case BSIM4v5_MOD_JSS : mod->BSIM4v5SjctSatCurDensity = value->rValue; mod->BSIM4v5SjctSatCurDensityGiven = TRUE; break; case BSIM4v5_MOD_JSWS : mod->BSIM4v5SjctSidewallSatCurDensity = value->rValue; mod->BSIM4v5SjctSidewallSatCurDensityGiven = TRUE; break; case BSIM4v5_MOD_JSWGS : mod->BSIM4v5SjctGateSidewallSatCurDensity = value->rValue; mod->BSIM4v5SjctGateSidewallSatCurDensityGiven = TRUE; break; case BSIM4v5_MOD_PBS : mod->BSIM4v5SbulkJctPotential = value->rValue; mod->BSIM4v5SbulkJctPotentialGiven = TRUE; break; case BSIM4v5_MOD_MJS : mod->BSIM4v5SbulkJctBotGradingCoeff = value->rValue; mod->BSIM4v5SbulkJctBotGradingCoeffGiven = TRUE; break; case BSIM4v5_MOD_PBSWS : mod->BSIM4v5SsidewallJctPotential = value->rValue; mod->BSIM4v5SsidewallJctPotentialGiven = TRUE; break; case BSIM4v5_MOD_MJSWS : mod->BSIM4v5SbulkJctSideGradingCoeff = value->rValue; mod->BSIM4v5SbulkJctSideGradingCoeffGiven = TRUE; break; case BSIM4v5_MOD_CJS : mod->BSIM4v5SunitAreaJctCap = value->rValue; mod->BSIM4v5SunitAreaJctCapGiven = TRUE; break; case BSIM4v5_MOD_CJSWS : mod->BSIM4v5SunitLengthSidewallJctCap = value->rValue; mod->BSIM4v5SunitLengthSidewallJctCapGiven = TRUE; break; case BSIM4v5_MOD_NJS : mod->BSIM4v5SjctEmissionCoeff = value->rValue; mod->BSIM4v5SjctEmissionCoeffGiven = TRUE; break; case BSIM4v5_MOD_PBSWGS : mod->BSIM4v5SGatesidewallJctPotential = value->rValue; mod->BSIM4v5SGatesidewallJctPotentialGiven = TRUE; break; case BSIM4v5_MOD_MJSWGS : mod->BSIM4v5SbulkJctGateSideGradingCoeff = value->rValue; mod->BSIM4v5SbulkJctGateSideGradingCoeffGiven = TRUE; break; case BSIM4v5_MOD_CJSWGS : mod->BSIM4v5SunitLengthGateSidewallJctCap = value->rValue; mod->BSIM4v5SunitLengthGateSidewallJctCapGiven = TRUE; break; case BSIM4v5_MOD_XTIS : mod->BSIM4v5SjctTempExponent = value->rValue; mod->BSIM4v5SjctTempExponentGiven = TRUE; break; case BSIM4v5_MOD_JSD : mod->BSIM4v5DjctSatCurDensity = value->rValue; mod->BSIM4v5DjctSatCurDensityGiven = TRUE; break; case BSIM4v5_MOD_JSWD : mod->BSIM4v5DjctSidewallSatCurDensity = value->rValue; mod->BSIM4v5DjctSidewallSatCurDensityGiven = TRUE; break; case BSIM4v5_MOD_JSWGD : mod->BSIM4v5DjctGateSidewallSatCurDensity = value->rValue; mod->BSIM4v5DjctGateSidewallSatCurDensityGiven = TRUE; break; case BSIM4v5_MOD_PBD : mod->BSIM4v5DbulkJctPotential = value->rValue; mod->BSIM4v5DbulkJctPotentialGiven = TRUE; break; case BSIM4v5_MOD_MJD : mod->BSIM4v5DbulkJctBotGradingCoeff = value->rValue; mod->BSIM4v5DbulkJctBotGradingCoeffGiven = TRUE; break; case BSIM4v5_MOD_PBSWD : mod->BSIM4v5DsidewallJctPotential = value->rValue; mod->BSIM4v5DsidewallJctPotentialGiven = TRUE; break; case BSIM4v5_MOD_MJSWD : mod->BSIM4v5DbulkJctSideGradingCoeff = value->rValue; mod->BSIM4v5DbulkJctSideGradingCoeffGiven = TRUE; break; case BSIM4v5_MOD_CJD : mod->BSIM4v5DunitAreaJctCap = value->rValue; mod->BSIM4v5DunitAreaJctCapGiven = TRUE; break; case BSIM4v5_MOD_CJSWD : mod->BSIM4v5DunitLengthSidewallJctCap = value->rValue; mod->BSIM4v5DunitLengthSidewallJctCapGiven = TRUE; break; case BSIM4v5_MOD_NJD : mod->BSIM4v5DjctEmissionCoeff = value->rValue; mod->BSIM4v5DjctEmissionCoeffGiven = TRUE; break; case BSIM4v5_MOD_PBSWGD : mod->BSIM4v5DGatesidewallJctPotential = value->rValue; mod->BSIM4v5DGatesidewallJctPotentialGiven = TRUE; break; case BSIM4v5_MOD_MJSWGD : mod->BSIM4v5DbulkJctGateSideGradingCoeff = value->rValue; mod->BSIM4v5DbulkJctGateSideGradingCoeffGiven = TRUE; break; case BSIM4v5_MOD_CJSWGD : mod->BSIM4v5DunitLengthGateSidewallJctCap = value->rValue; mod->BSIM4v5DunitLengthGateSidewallJctCapGiven = TRUE; break; case BSIM4v5_MOD_XTID : mod->BSIM4v5DjctTempExponent = value->rValue; mod->BSIM4v5DjctTempExponentGiven = TRUE; break; case BSIM4v5_MOD_LINT : mod->BSIM4v5Lint = value->rValue; mod->BSIM4v5LintGiven = TRUE; break; case BSIM4v5_MOD_LL : mod->BSIM4v5Ll = value->rValue; mod->BSIM4v5LlGiven = TRUE; break; case BSIM4v5_MOD_LLC : mod->BSIM4v5Llc = value->rValue; mod->BSIM4v5LlcGiven = TRUE; break; case BSIM4v5_MOD_LLN : mod->BSIM4v5Lln = value->rValue; mod->BSIM4v5LlnGiven = TRUE; break; case BSIM4v5_MOD_LW : mod->BSIM4v5Lw = value->rValue; mod->BSIM4v5LwGiven = TRUE; break; case BSIM4v5_MOD_LWC : mod->BSIM4v5Lwc = value->rValue; mod->BSIM4v5LwcGiven = TRUE; break; case BSIM4v5_MOD_LWN : mod->BSIM4v5Lwn = value->rValue; mod->BSIM4v5LwnGiven = TRUE; break; case BSIM4v5_MOD_LWL : mod->BSIM4v5Lwl = value->rValue; mod->BSIM4v5LwlGiven = TRUE; break; case BSIM4v5_MOD_LWLC : mod->BSIM4v5Lwlc = value->rValue; mod->BSIM4v5LwlcGiven = TRUE; break; case BSIM4v5_MOD_LMIN : mod->BSIM4v5Lmin = value->rValue; mod->BSIM4v5LminGiven = TRUE; break; case BSIM4v5_MOD_LMAX : mod->BSIM4v5Lmax = value->rValue; mod->BSIM4v5LmaxGiven = TRUE; break; case BSIM4v5_MOD_WINT : mod->BSIM4v5Wint = value->rValue; mod->BSIM4v5WintGiven = TRUE; break; case BSIM4v5_MOD_WL : mod->BSIM4v5Wl = value->rValue; mod->BSIM4v5WlGiven = TRUE; break; case BSIM4v5_MOD_WLC : mod->BSIM4v5Wlc = value->rValue; mod->BSIM4v5WlcGiven = TRUE; break; case BSIM4v5_MOD_WLN : mod->BSIM4v5Wln = value->rValue; mod->BSIM4v5WlnGiven = TRUE; break; case BSIM4v5_MOD_WW : mod->BSIM4v5Ww = value->rValue; mod->BSIM4v5WwGiven = TRUE; break; case BSIM4v5_MOD_WWC : mod->BSIM4v5Wwc = value->rValue; mod->BSIM4v5WwcGiven = TRUE; break; case BSIM4v5_MOD_WWN : mod->BSIM4v5Wwn = value->rValue; mod->BSIM4v5WwnGiven = TRUE; break; case BSIM4v5_MOD_WWL : mod->BSIM4v5Wwl = value->rValue; mod->BSIM4v5WwlGiven = TRUE; break; case BSIM4v5_MOD_WWLC : mod->BSIM4v5Wwlc = value->rValue; mod->BSIM4v5WwlcGiven = TRUE; break; case BSIM4v5_MOD_WMIN : mod->BSIM4v5Wmin = value->rValue; mod->BSIM4v5WminGiven = TRUE; break; case BSIM4v5_MOD_WMAX : mod->BSIM4v5Wmax = value->rValue; mod->BSIM4v5WmaxGiven = TRUE; break; case BSIM4v5_MOD_NOIA : mod->BSIM4v5oxideTrapDensityA = value->rValue; mod->BSIM4v5oxideTrapDensityAGiven = TRUE; break; case BSIM4v5_MOD_NOIB : mod->BSIM4v5oxideTrapDensityB = value->rValue; mod->BSIM4v5oxideTrapDensityBGiven = TRUE; break; case BSIM4v5_MOD_NOIC : mod->BSIM4v5oxideTrapDensityC = value->rValue; mod->BSIM4v5oxideTrapDensityCGiven = TRUE; break; case BSIM4v5_MOD_EM : mod->BSIM4v5em = value->rValue; mod->BSIM4v5emGiven = TRUE; break; case BSIM4v5_MOD_EF : mod->BSIM4v5ef = value->rValue; mod->BSIM4v5efGiven = TRUE; break; case BSIM4v5_MOD_AF : mod->BSIM4v5af = value->rValue; mod->BSIM4v5afGiven = TRUE; break; case BSIM4v5_MOD_KF : mod->BSIM4v5kf = value->rValue; mod->BSIM4v5kfGiven = TRUE; break; case BSIM4v5_MOD_VGS_MAX: mod->BSIM4v5vgsMax = value->rValue; mod->BSIM4v5vgsMaxGiven = TRUE; break; case BSIM4v5_MOD_VGD_MAX: mod->BSIM4v5vgdMax = value->rValue; mod->BSIM4v5vgdMaxGiven = TRUE; break; case BSIM4v5_MOD_VGB_MAX: mod->BSIM4v5vgbMax = value->rValue; mod->BSIM4v5vgbMaxGiven = TRUE; break; case BSIM4v5_MOD_VDS_MAX: mod->BSIM4v5vdsMax = value->rValue; mod->BSIM4v5vdsMaxGiven = TRUE; break; case BSIM4v5_MOD_VBS_MAX: mod->BSIM4v5vbsMax = value->rValue; mod->BSIM4v5vbsMaxGiven = TRUE; break; case BSIM4v5_MOD_VBD_MAX: mod->BSIM4v5vbdMax = value->rValue; mod->BSIM4v5vbdMaxGiven = TRUE; break; case BSIM4v5_MOD_VGSR_MAX: mod->BSIM4v5vgsrMax = value->rValue; mod->BSIM4v5vgsrMaxGiven = TRUE; break; case BSIM4v5_MOD_VGDR_MAX: mod->BSIM4v5vgdrMax = value->rValue; mod->BSIM4v5vgdrMaxGiven = TRUE; break; case BSIM4v5_MOD_VGBR_MAX: mod->BSIM4v5vgbrMax = value->rValue; mod->BSIM4v5vgbrMaxGiven = TRUE; break; case BSIM4v5_MOD_VBSR_MAX: mod->BSIM4v5vbsrMax = value->rValue; mod->BSIM4v5vbsrMaxGiven = TRUE; break; case BSIM4v5_MOD_VBDR_MAX: mod->BSIM4v5vbdrMax = value->rValue; mod->BSIM4v5vbdrMaxGiven = TRUE; break; case BSIM4v5_MOD_NMOS : if(value->iValue) { mod->BSIM4v5type = 1; mod->BSIM4v5typeGiven = TRUE; } break; case BSIM4v5_MOD_PMOS : if(value->iValue) { mod->BSIM4v5type = - 1; mod->BSIM4v5typeGiven = TRUE; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v5/b4v5geo.c0000644000175000017500000003055213546075722022100 0ustar carstencarsten/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ /********** * Copyright 2005 Regents of the University of California. All rights reserved. * File: b4geo.c of BSIM4.5.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Project Director: Prof. Chenming Hu. **********/ #include "ngspice/ngspice.h" #include "bsim4v5def.h" /* * WDLiu: * This subrutine is a special module to process the geometry dependent * parasitics for BSIM4v5, which calculates Ps, Pd, As, Ad, and Rs and Rd * for multi-fingers and varous GEO and RGEO options. */ int BSIM4v5RdsEndIso(double, double, double, double, double, double, int, int, double *); int BSIM4v5RdsEndSha(double, double, double, double, double, double, int, int, double *); static int BSIM4v5NumFingerDiff( double nf, int minSD, double *nuIntD, double *nuEndD, double *nuIntS, double *nuEndS) { int NF; NF = (int)nf; if ((NF%2) != 0) { *nuEndD = *nuEndS = 1.0; *nuIntD = *nuIntS = 2.0 * MAX((nf - 1.0) / 2.0, 0.0); } else { if (minSD == 1) /* minimize # of source */ { *nuEndD = 2.0; *nuIntD = 2.0 * MAX((nf / 2.0 - 1.0), 0.0); *nuEndS = 0.0; *nuIntS = nf; } else { *nuEndD = 0.0; *nuIntD = nf; *nuEndS = 2.0; *nuIntS = 2.0 * MAX((nf / 2.0 - 1.0), 0.0); } } return 0; } int BSIM4v5PAeffGeo( double nf, int geo, int minSD, double Weffcj, double DMCG, double DMCI, double DMDG, double *Ps, double *Pd, double *As, double *Ad) { double T0, T1, T2; double ADiso, ADsha, ADmer, ASiso, ASsha, ASmer; double PDiso, PDsha, PDmer, PSiso, PSsha, PSmer; double nuIntD = 0.0, nuEndD = 0.0, nuIntS = 0.0, nuEndS = 0.0; if (geo < 9) /* For geo = 9 and 10, the numbers of S/D diffusions already known */ BSIM4v5NumFingerDiff(nf, minSD, &nuIntD, &nuEndD, &nuIntS, &nuEndS); T0 = DMCG + DMCI; T1 = DMCG + DMCG; T2 = DMDG + DMDG; PSiso = PDiso = T0 + T0 + Weffcj; PSsha = PDsha = T1; PSmer = PDmer = T2; ASiso = ADiso = T0 * Weffcj; ASsha = ADsha = DMCG * Weffcj; ASmer = ADmer = DMDG * Weffcj; switch(geo) { case 0: *Ps = nuEndS * PSiso + nuIntS * PSsha; *Pd = nuEndD * PDiso + nuIntD * PDsha; *As = nuEndS * ASiso + nuIntS * ASsha; *Ad = nuEndD * ADiso + nuIntD * ADsha; break; case 1: *Ps = nuEndS * PSiso + nuIntS * PSsha; *Pd = (nuEndD + nuIntD) * PDsha; *As = nuEndS * ASiso + nuIntS * ASsha; *Ad = (nuEndD + nuIntD) * ADsha; break; case 2: *Ps = (nuEndS + nuIntS) * PSsha; *Pd = nuEndD * PDiso + nuIntD * PDsha; *As = (nuEndS + nuIntS) * ASsha; *Ad = nuEndD * ADiso + nuIntD * ADsha; break; case 3: *Ps = (nuEndS + nuIntS) * PSsha; *Pd = (nuEndD + nuIntD) * PDsha; *As = (nuEndS + nuIntS) * ASsha; *Ad = (nuEndD + nuIntD) * ADsha; break; case 4: *Ps = nuEndS * PSiso + nuIntS * PSsha; *Pd = nuEndD * PDmer + nuIntD * PDsha; *As = nuEndS * ASiso + nuIntS * ASsha; *Ad = nuEndD * ADmer + nuIntD * ADsha; break; case 5: *Ps = (nuEndS + nuIntS) * PSsha; *Pd = nuEndD * PDmer + nuIntD * PDsha; *As = (nuEndS + nuIntS) * ASsha; *Ad = nuEndD * ADmer + nuIntD * ADsha; break; case 6: *Ps = nuEndS * PSmer + nuIntS * PSsha; *Pd = nuEndD * PDiso + nuIntD * PDsha; *As = nuEndS * ASmer + nuIntS * ASsha; *Ad = nuEndD * ADiso + nuIntD * ADsha; break; case 7: *Ps = nuEndS * PSmer + nuIntS * PSsha; *Pd = (nuEndD + nuIntD) * PDsha; *As = nuEndS * ASmer + nuIntS * ASsha; *Ad = (nuEndD + nuIntD) * ADsha; break; case 8: *Ps = nuEndS * PSmer + nuIntS * PSsha; *Pd = nuEndD * PDmer + nuIntD * PDsha; *As = nuEndS * ASmer + nuIntS * ASsha; *Ad = nuEndD * ADmer + nuIntD * ADsha; break; case 9: /* geo = 9 and 10 happen only when nf = even */ *Ps = PSiso + (nf - 1.0) * PSsha; *Pd = nf * PDsha; *As = ASiso + (nf - 1.0) * ASsha; *Ad = nf * ADsha; break; case 10: *Ps = nf * PSsha; *Pd = PDiso + (nf - 1.0) * PDsha; *As = nf * ASsha; *Ad = ADiso + (nf - 1.0) * ADsha; break; default: printf("Warning: Specified GEO = %d not matched\n", geo); } return 0; } int BSIM4v5RdseffGeo( double nf, int geo, int rgeo, int minSD, double Weffcj, double Rsh, double DMCG, double DMCI, double DMDG, int Type, double *Rtot) { double Rint=0.0, Rend = 0.0; double nuIntD = 0.0, nuEndD = 0.0, nuIntS = 0.0, nuEndS = 0.0; if (geo < 9) /* since geo = 9 and 10 only happen when nf = even */ { BSIM4v5NumFingerDiff(nf, minSD, &nuIntD, &nuEndD, &nuIntS, &nuEndS); /* Internal S/D resistance -- assume shared S or D and all wide contacts */ if (Type == 1) { if (nuIntS == 0.0) Rint = 0.0; else Rint = Rsh * DMCG / ( Weffcj * nuIntS); } else { if (nuIntD == 0.0) Rint = 0.0; else Rint = Rsh * DMCG / ( Weffcj * nuIntD); } } /* End S/D resistance -- geo dependent */ switch(geo) { case 0: if (Type == 1) BSIM4v5RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else BSIM4v5RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 1: if (Type == 1) BSIM4v5RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else BSIM4v5RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 2: if (Type == 1) BSIM4v5RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else BSIM4v5RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 3: if (Type == 1) BSIM4v5RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else BSIM4v5RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 4: if (Type == 1) BSIM4v5RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else Rend = Rsh * DMDG / Weffcj; break; case 5: if (Type == 1) BSIM4v5RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else Rend = Rsh * DMDG / (Weffcj * nuEndD); break; case 6: if (Type == 1) Rend = Rsh * DMDG / Weffcj; else BSIM4v5RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 7: if (Type == 1) Rend = Rsh * DMDG / (Weffcj * nuEndS); else BSIM4v5RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 8: Rend = Rsh * DMDG / Weffcj; break; case 9: /* all wide contacts assumed for geo = 9 and 10 */ if (Type == 1) { Rend = 0.5 * Rsh * DMCG / Weffcj; if (nf == 2.0) Rint = 0.0; else Rint = Rsh * DMCG / (Weffcj * (nf - 2.0)); } else { Rend = 0.0; Rint = Rsh * DMCG / (Weffcj * nf); } break; case 10: if (Type == 1) { Rend = 0.0; Rint = Rsh * DMCG / (Weffcj * nf); } else { Rend = 0.5 * Rsh * DMCG / Weffcj;; if (nf == 2.0) Rint = 0.0; else Rint = Rsh * DMCG / (Weffcj * (nf - 2.0)); } break; default: printf("Warning: Specified GEO = %d not matched\n", geo); } if (Rint <= 0.0) *Rtot = Rend; else if (Rend <= 0.0) *Rtot = Rint; else *Rtot = Rint * Rend / (Rint + Rend); if(*Rtot==0.0) printf("Warning: Zero resistance returned from RdseffGeo\n"); return 0; } int BSIM4v5RdsEndIso( double Weffcj, double Rsh, double DMCG, double DMCI, double DMDG, double nuEnd, int rgeo, int Type, double *Rend) { NG_IGNORE(DMDG); if (Type == 1) { switch(rgeo) { case 1: case 2: case 5: if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * DMCG / (Weffcj * nuEnd); break; case 3: case 4: case 6: if ((DMCG + DMCI) == 0.0) printf("(DMCG + DMCI) can not be equal to zero\n"); if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * Weffcj / (3.0 * nuEnd * (DMCG + DMCI)); break; default: printf("Warning: Specified RGEO = %d not matched\n", rgeo); } } else { switch(rgeo) { case 1: case 3: case 7: if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * DMCG / (Weffcj * nuEnd); break; case 2: case 4: case 8: if ((DMCG + DMCI) == 0.0) printf("(DMCG + DMCI) can not be equal to zero\n"); if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * Weffcj / (3.0 * nuEnd * (DMCG + DMCI)); break; default: printf("Warning: Specified RGEO = %d not matched\n", rgeo); } } return 0; } int BSIM4v5RdsEndSha( double Weffcj, double Rsh, double DMCG, double DMCI, double DMDG, double nuEnd, int rgeo, int Type, double *Rend) { NG_IGNORE(DMCI); NG_IGNORE(DMDG); if (Type == 1) { switch(rgeo) { case 1: case 2: case 5: if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * DMCG / (Weffcj * nuEnd); break; case 3: case 4: case 6: if (DMCG == 0.0) printf("DMCG can not be equal to zero\n"); if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * Weffcj / (6.0 * nuEnd * DMCG); break; default: printf("Warning: Specified RGEO = %d not matched\n", rgeo); } } else { switch(rgeo) { case 1: case 3: case 7: if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * DMCG / (Weffcj * nuEnd); break; case 2: case 4: case 8: if (DMCG == 0.0) printf("DMCG can not be equal to zero\n"); if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * Weffcj / (6.0 * nuEnd * DMCG); break; default: printf("Warning: Specified RGEO = %d not matched\n", rgeo); } } return 0; } tmpk8ny_4pz/src/spicelib/devices/bsim4v5/bsim4v5init.c0000644000175000017500000000335513546075722023003 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "bsim4v5itf.h" #include "bsim4v5ext.h" #include "bsim4v5init.h" SPICEdev BSIM4v5info = { .DEVpublic = { .name = "BSIM4v5", .description = "Berkeley Short Channel IGFET Model-4", .terms = &BSIM4v5nSize, .numNames = &BSIM4v5nSize, .termNames = BSIM4v5names, .numInstanceParms = &BSIM4v5pTSize, .instanceParms = BSIM4v5pTable, .numModelParms = &BSIM4v5mPTSize, .modelParms = BSIM4v5mPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = BSIM4v5param, .DEVmodParam = BSIM4v5mParam, .DEVload = BSIM4v5load, .DEVsetup = BSIM4v5setup, .DEVunsetup = BSIM4v5unsetup, .DEVpzSetup = BSIM4v5setup, .DEVtemperature = BSIM4v5temp, .DEVtrunc = BSIM4v5trunc, .DEVfindBranch = NULL, .DEVacLoad = BSIM4v5acLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = BSIM4v5mDelete, .DEVdelete = NULL, .DEVsetic = BSIM4v5getic, .DEVask = BSIM4v5ask, .DEVmodAsk = BSIM4v5mAsk, .DEVpzLoad = BSIM4v5pzLoad, .DEVconvTest = BSIM4v5convTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = BSIM4v5noise, .DEVsoaCheck = BSIM4v5soaCheck, .DEVinstSize = &BSIM4v5iSize, .DEVmodSize = &BSIM4v5mSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_bsim4v5_info(void) { return &BSIM4v5info; } tmpk8ny_4pz/src/spicelib/devices/bsim4v5/bsim4v5init.h0000644000175000017500000000042613546075722023004 0ustar carstencarsten#ifndef _BSIM4V5INIT_H #define _BSIM4V5INIT_H extern IFparm BSIM4v5pTable[ ]; extern IFparm BSIM4v5mPTable[ ]; extern char *BSIM4v5names[ ]; extern int BSIM4v5pTSize; extern int BSIM4v5mPTSize; extern int BSIM4v5nSize; extern int BSIM4v5iSize; extern int BSIM4v5mSize; #endif tmpk8ny_4pz/src/spicelib/devices/bsim4v5/b4v5getic.c0000644000175000017500000000250413546075722022415 0ustar carstencarsten/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ /********** * Copyright 2005 Regents of the University of California. All rights reserved. * File: b4getic.c of BSIM4.5.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Project Director: Prof. Chenming Hu. **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4v5def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4v5getic( GENmodel *inModel, CKTcircuit *ckt) { BSIM4v5model *model = (BSIM4v5model*)inModel; BSIM4v5instance *here; for (; model ; model = BSIM4v5nextModel(model)) { for (here = BSIM4v5instances(model); here; here = BSIM4v5nextInstance(here)) { if (!here->BSIM4v5icVDSGiven) { here->BSIM4v5icVDS = *(ckt->CKTrhs + here->BSIM4v5dNode) - *(ckt->CKTrhs + here->BSIM4v5sNode); } if (!here->BSIM4v5icVGSGiven) { here->BSIM4v5icVGS = *(ckt->CKTrhs + here->BSIM4v5gNodeExt) - *(ckt->CKTrhs + here->BSIM4v5sNode); } if(!here->BSIM4v5icVBSGiven) { here->BSIM4v5icVBS = *(ckt->CKTrhs + here->BSIM4v5bNode) - *(ckt->CKTrhs + here->BSIM4v5sNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v5/b4v5check.c0000644000175000017500000010272713546075722022407 0ustar carstencarsten/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ /********** * Copyright 2005 Regents of the University of California. All rights reserved. * File: b4check.c of BSIM4.5.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, 07/29/2005. **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4v5def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" int BSIM4v5checkModel( BSIM4v5model *model, BSIM4v5instance *here, CKTcircuit *ckt) { struct bsim4v5SizeDependParam *pParam; int Fatal_Flag = 0; FILE *fplog; if ((fplog = fopen("bsim4v5.out", "w")) != NULL) { pParam = here->pParam; fprintf(fplog, "BSIM4v5: Berkeley Short Channel IGFET Model-4\n"); fprintf(fplog, "Developed by Xuemei (Jane) Xi, Mohan Dunga, Prof. Ali Niknejad and Prof. Chenming Hu in 2003.\n"); fprintf(fplog, "\n"); fprintf(fplog, "++++++++++ BSIM4v5 PARAMETER CHECKING BELOW ++++++++++\n"); if ((strcmp(model->BSIM4v5version, "4.5.0")) && (strncmp(model->BSIM4v5version, "4.50", 4)) && (strncmp(model->BSIM4v5version, "4.5", 3))) { fprintf(fplog, "Warning: This model is BSIM4.5.0; you specified a wrong version number '%s'.\n", model->BSIM4v5version); printf("Warning: This model is BSIM4.5.0; you specified a wrong version number '%s'.\n", model->BSIM4v5version); } fprintf(fplog, "Model = %s\n", model->BSIM4v5modName); if ((here->BSIM4v5rgateMod == 2) || (here->BSIM4v5rgateMod == 3)) { if ((here->BSIM4v5trnqsMod == 1) || (here->BSIM4v5acnqsMod == 1)) { fprintf(fplog, "Warning: You've selected both Rg and charge deficit NQS; select one only.\n"); printf("Warning: You've selected both Rg and charge deficit NQS; select one only.\n"); } } if (model->BSIM4v5toxe <= 0.0) { fprintf(fplog, "Fatal: Toxe = %g is not positive.\n", model->BSIM4v5toxe); printf("Fatal: Toxe = %g is not positive.\n", model->BSIM4v5toxe); Fatal_Flag = 1; } if (model->BSIM4v5toxp <= 0.0) { fprintf(fplog, "Fatal: Toxp = %g is not positive.\n", model->BSIM4v5toxp); printf("Fatal: Toxp = %g is not positive.\n", model->BSIM4v5toxp); Fatal_Flag = 1; } if (model->BSIM4v5toxm <= 0.0) { fprintf(fplog, "Fatal: Toxm = %g is not positive.\n", model->BSIM4v5toxm); printf("Fatal: Toxm = %g is not positive.\n", model->BSIM4v5toxm); Fatal_Flag = 1; } if (model->BSIM4v5toxref <= 0.0) { fprintf(fplog, "Fatal: Toxref = %g is not positive.\n", model->BSIM4v5toxref); printf("Fatal: Toxref = %g is not positive.\n", model->BSIM4v5toxref); Fatal_Flag = 1; } if (pParam->BSIM4v5lpe0 < -pParam->BSIM4v5leff) { fprintf(fplog, "Fatal: Lpe0 = %g is less than -Leff.\n", pParam->BSIM4v5lpe0); printf("Fatal: Lpe0 = %g is less than -Leff.\n", pParam->BSIM4v5lpe0); Fatal_Flag = 1; } if (model->BSIM4v5lintnoi > pParam->BSIM4v5leff/2) { fprintf(fplog, "Fatal: Lintnoi = %g is too large - Leff for noise is negative.\n", model->BSIM4v5lintnoi); printf("Fatal: Lintnoi = %g is too large - Leff for noise is negative.\n", model->BSIM4v5lintnoi); Fatal_Flag = 1; } if (pParam->BSIM4v5lpeb < -pParam->BSIM4v5leff) { fprintf(fplog, "Fatal: Lpeb = %g is less than -Leff.\n", pParam->BSIM4v5lpeb); printf("Fatal: Lpeb = %g is less than -Leff.\n", pParam->BSIM4v5lpeb); Fatal_Flag = 1; } if (pParam->BSIM4v5ndep <= 0.0) { fprintf(fplog, "Fatal: Ndep = %g is not positive.\n", pParam->BSIM4v5ndep); printf("Fatal: Ndep = %g is not positive.\n", pParam->BSIM4v5ndep); Fatal_Flag = 1; } if (pParam->BSIM4v5phi <= 0.0) { fprintf(fplog, "Fatal: Phi = %g is not positive. Please check Phin and Ndep\n", pParam->BSIM4v5phi); fprintf(fplog, " Phin = %g Ndep = %g \n", pParam->BSIM4v5phin, pParam->BSIM4v5ndep); printf("Fatal: Phi = %g is not positive. Please check Phin and Ndep\n", pParam->BSIM4v5phi); printf(" Phin = %g Ndep = %g \n", pParam->BSIM4v5phin, pParam->BSIM4v5ndep); Fatal_Flag = 1; } if (pParam->BSIM4v5nsub <= 0.0) { fprintf(fplog, "Fatal: Nsub = %g is not positive.\n", pParam->BSIM4v5nsub); printf("Fatal: Nsub = %g is not positive.\n", pParam->BSIM4v5nsub); Fatal_Flag = 1; } if (pParam->BSIM4v5ngate < 0.0) { fprintf(fplog, "Fatal: Ngate = %g is not positive.\n", pParam->BSIM4v5ngate); printf("Fatal: Ngate = %g Ngate is not positive.\n", pParam->BSIM4v5ngate); Fatal_Flag = 1; } if (pParam->BSIM4v5ngate > 1.e25) { fprintf(fplog, "Fatal: Ngate = %g is too high.\n", pParam->BSIM4v5ngate); printf("Fatal: Ngate = %g Ngate is too high\n", pParam->BSIM4v5ngate); Fatal_Flag = 1; } if (pParam->BSIM4v5xj <= 0.0) { fprintf(fplog, "Fatal: Xj = %g is not positive.\n", pParam->BSIM4v5xj); printf("Fatal: Xj = %g is not positive.\n", pParam->BSIM4v5xj); Fatal_Flag = 1; } if (pParam->BSIM4v5dvt1 < 0.0) { fprintf(fplog, "Fatal: Dvt1 = %g is negative.\n", pParam->BSIM4v5dvt1); printf("Fatal: Dvt1 = %g is negative.\n", pParam->BSIM4v5dvt1); Fatal_Flag = 1; } if (pParam->BSIM4v5dvt1w < 0.0) { fprintf(fplog, "Fatal: Dvt1w = %g is negative.\n", pParam->BSIM4v5dvt1w); printf("Fatal: Dvt1w = %g is negative.\n", pParam->BSIM4v5dvt1w); Fatal_Flag = 1; } if (pParam->BSIM4v5w0 == -pParam->BSIM4v5weff) { fprintf(fplog, "Fatal: (W0 + Weff) = 0 causing divided-by-zero.\n"); printf("Fatal: (W0 + Weff) = 0 causing divided-by-zero.\n"); Fatal_Flag = 1; } if (pParam->BSIM4v5dsub < 0.0) { fprintf(fplog, "Fatal: Dsub = %g is negative.\n", pParam->BSIM4v5dsub); printf("Fatal: Dsub = %g is negative.\n", pParam->BSIM4v5dsub); Fatal_Flag = 1; } if (pParam->BSIM4v5b1 == -pParam->BSIM4v5weff) { fprintf(fplog, "Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); printf("Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); Fatal_Flag = 1; } if (here->BSIM4v5u0temp <= 0.0) { fprintf(fplog, "Fatal: u0 at current temperature = %g is not positive.\n", here->BSIM4v5u0temp); printf("Fatal: u0 at current temperature = %g is not positive.\n", here->BSIM4v5u0temp); Fatal_Flag = 1; } if (pParam->BSIM4v5delta < 0.0) { fprintf(fplog, "Fatal: Delta = %g is less than zero.\n", pParam->BSIM4v5delta); printf("Fatal: Delta = %g is less than zero.\n", pParam->BSIM4v5delta); Fatal_Flag = 1; } if (here->BSIM4v5vsattemp <= 0.0) { fprintf(fplog, "Fatal: Vsat at current temperature = %g is not positive.\n", here->BSIM4v5vsattemp); printf("Fatal: Vsat at current temperature = %g is not positive.\n", here->BSIM4v5vsattemp); Fatal_Flag = 1; } if (pParam->BSIM4v5pclm <= 0.0) { fprintf(fplog, "Fatal: Pclm = %g is not positive.\n", pParam->BSIM4v5pclm); printf("Fatal: Pclm = %g is not positive.\n", pParam->BSIM4v5pclm); Fatal_Flag = 1; } if (pParam->BSIM4v5drout < 0.0) { fprintf(fplog, "Fatal: Drout = %g is negative.\n", pParam->BSIM4v5drout); printf("Fatal: Drout = %g is negative.\n", pParam->BSIM4v5drout); Fatal_Flag = 1; } if (here->BSIM4v5m <= 0.0) { fprintf(fplog, "Fatal: multiplier = %g is not positive.\n", here->BSIM4v5m); printf("Fatal: multiplier = %g is not positive.\n", here->BSIM4v5m); Fatal_Flag = 1; } if (here->BSIM4v5nf < 1.0) { fprintf(fplog, "Fatal: Number of finger = %g is smaller than one.\n", here->BSIM4v5nf); printf("Fatal: Number of finger = %g is smaller than one.\n", here->BSIM4v5nf); Fatal_Flag = 1; } if((here->BSIM4v5sa > 0.0) && (here->BSIM4v5sb > 0.0) && ((here->BSIM4v5nf == 1.0) || ((here->BSIM4v5nf > 1.0) && (here->BSIM4v5sd > 0.0))) ) { if (model->BSIM4v5saref <= 0.0) { fprintf(fplog, "Fatal: SAref = %g is not positive.\n",model->BSIM4v5saref); printf("Fatal: SAref = %g is not positive.\n",model->BSIM4v5saref); Fatal_Flag = 1; } if (model->BSIM4v5sbref <= 0.0) { fprintf(fplog, "Fatal: SBref = %g is not positive.\n",model->BSIM4v5sbref); printf("Fatal: SBref = %g is not positive.\n",model->BSIM4v5sbref); Fatal_Flag = 1; } } if ((here->BSIM4v5l + model->BSIM4v5xl) <= model->BSIM4v5xgl) { fprintf(fplog, "Fatal: The parameter xgl must be smaller than Ldrawn+XL.\n"); printf("Fatal: The parameter xgl must be smaller than Ldrawn+XL.\n"); Fatal_Flag = 1; } if (here->BSIM4v5ngcon < 1.0) { fprintf(fplog, "Fatal: The parameter ngcon cannot be smaller than one.\n"); printf("Fatal: The parameter ngcon cannot be smaller than one.\n"); Fatal_Flag = 1; } if ((here->BSIM4v5ngcon != 1.0) && (here->BSIM4v5ngcon != 2.0)) { here->BSIM4v5ngcon = 1.0; fprintf(fplog, "Warning: Ngcon must be equal to one or two; reset to 1.0.\n"); printf("Warning: Ngcon must be equal to one or two; reset to 1.0.\n"); } if (model->BSIM4v5gbmin < 1.0e-20) { fprintf(fplog, "Warning: Gbmin = %g is too small.\n", model->BSIM4v5gbmin); printf("Warning: Gbmin = %g is too small.\n", model->BSIM4v5gbmin); } /* Check saturation parameters */ if (pParam->BSIM4v5fprout < 0.0) { fprintf(fplog, "Fatal: fprout = %g is negative.\n", pParam->BSIM4v5fprout); printf("Fatal: fprout = %g is negative.\n", pParam->BSIM4v5fprout); Fatal_Flag = 1; } if (pParam->BSIM4v5pdits < 0.0) { fprintf(fplog, "Fatal: pdits = %g is negative.\n", pParam->BSIM4v5pdits); printf("Fatal: pdits = %g is negative.\n", pParam->BSIM4v5pdits); Fatal_Flag = 1; } if (model->BSIM4v5pditsl < 0.0) { fprintf(fplog, "Fatal: pditsl = %g is negative.\n", model->BSIM4v5pditsl); printf("Fatal: pditsl = %g is negative.\n", model->BSIM4v5pditsl); Fatal_Flag = 1; } /* Check gate current parameters */ if (model->BSIM4v5igbMod) { if (pParam->BSIM4v5nigbinv <= 0.0) { fprintf(fplog, "Fatal: nigbinv = %g is non-positive.\n", pParam->BSIM4v5nigbinv); printf("Fatal: nigbinv = %g is non-positive.\n", pParam->BSIM4v5nigbinv); Fatal_Flag = 1; } if (pParam->BSIM4v5nigbacc <= 0.0) { fprintf(fplog, "Fatal: nigbacc = %g is non-positive.\n", pParam->BSIM4v5nigbacc); printf("Fatal: nigbacc = %g is non-positive.\n", pParam->BSIM4v5nigbacc); Fatal_Flag = 1; } } if (model->BSIM4v5igcMod) { if (pParam->BSIM4v5nigc <= 0.0) { fprintf(fplog, "Fatal: nigc = %g is non-positive.\n", pParam->BSIM4v5nigc); printf("Fatal: nigc = %g is non-positive.\n", pParam->BSIM4v5nigc); Fatal_Flag = 1; } if (pParam->BSIM4v5poxedge <= 0.0) { fprintf(fplog, "Fatal: poxedge = %g is non-positive.\n", pParam->BSIM4v5poxedge); printf("Fatal: poxedge = %g is non-positive.\n", pParam->BSIM4v5poxedge); Fatal_Flag = 1; } if (pParam->BSIM4v5pigcd <= 0.0) { fprintf(fplog, "Fatal: pigcd = %g is non-positive.\n", pParam->BSIM4v5pigcd); printf("Fatal: pigcd = %g is non-positive.\n", pParam->BSIM4v5pigcd); Fatal_Flag = 1; } } /* Check capacitance parameters */ if (pParam->BSIM4v5clc < 0.0) { fprintf(fplog, "Fatal: Clc = %g is negative.\n", pParam->BSIM4v5clc); printf("Fatal: Clc = %g is negative.\n", pParam->BSIM4v5clc); Fatal_Flag = 1; } /* Check overlap capacitance parameters */ if (pParam->BSIM4v5ckappas < 0.02) { fprintf(fplog, "Warning: ckappas = %g is too small. Set to 0.02\n", pParam->BSIM4v5ckappas); printf("Warning: ckappas = %g is too small.\n", pParam->BSIM4v5ckappas); pParam->BSIM4v5ckappas = 0.02; } if (pParam->BSIM4v5ckappad < 0.02) { fprintf(fplog, "Warning: ckappad = %g is too small. Set to 0.02\n", pParam->BSIM4v5ckappad); printf("Warning: ckappad = %g is too small.\n", pParam->BSIM4v5ckappad); pParam->BSIM4v5ckappad = 0.02; } if (model->BSIM4v5vtss < 0.0) { fprintf(fplog, "Fatal: Vtss = %g is negative.\n", model->BSIM4v5vtss); printf("Fatal: Vtss = %g is negative.\n", model->BSIM4v5vtss); Fatal_Flag = 1; } if (model->BSIM4v5vtsd < 0.0) { fprintf(fplog, "Fatal: Vtsd = %g is negative.\n", model->BSIM4v5vtsd); printf("Fatal: Vtsd = %g is negative.\n", model->BSIM4v5vtsd); Fatal_Flag = 1; } if (model->BSIM4v5vtssws < 0.0) { fprintf(fplog, "Fatal: Vtssws = %g is negative.\n", model->BSIM4v5vtssws); printf("Fatal: Vtssws = %g is negative.\n", model->BSIM4v5vtssws); Fatal_Flag = 1; } if (model->BSIM4v5vtsswd < 0.0) { fprintf(fplog, "Fatal: Vtsswd = %g is negative.\n", model->BSIM4v5vtsswd); printf("Fatal: Vtsswd = %g is negative.\n", model->BSIM4v5vtsswd); Fatal_Flag = 1; } if (model->BSIM4v5vtsswgs < 0.0) { fprintf(fplog, "Fatal: Vtsswgs = %g is negative.\n", model->BSIM4v5vtsswgs); printf("Fatal: Vtsswgs = %g is negative.\n", model->BSIM4v5vtsswgs); Fatal_Flag = 1; } if (model->BSIM4v5vtsswgd < 0.0) { fprintf(fplog, "Fatal: Vtsswgd = %g is negative.\n", model->BSIM4v5vtsswgd); printf("Fatal: Vtsswgd = %g is negative.\n", model->BSIM4v5vtsswgd); Fatal_Flag = 1; } if (model->BSIM4v5paramChk ==1) { /* Check L and W parameters */ if (pParam->BSIM4v5leff <= 1.0e-9) { fprintf(fplog, "Warning: Leff = %g <= 1.0e-9. Recommended Leff >= 1e-8 \n", pParam->BSIM4v5leff); printf("Warning: Leff = %g <= 1.0e-9. Recommended Leff >= 1e-8 \n", pParam->BSIM4v5leff); } if (pParam->BSIM4v5leffCV <= 1.0e-9) { fprintf(fplog, "Warning: Leff for CV = %g <= 1.0e-9. Recommended LeffCV >=1e-8 \n", pParam->BSIM4v5leffCV); printf("Warning: Leff for CV = %g <= 1.0e-9. Recommended LeffCV >=1e-8 \n", pParam->BSIM4v5leffCV); } if (pParam->BSIM4v5weff <= 1.0e-9) { fprintf(fplog, "Warning: Weff = %g <= 1.0e-9. Recommended Weff >=1e-7 \n", pParam->BSIM4v5weff); printf("Warning: Weff = %g <= 1.0e-9. Recommended Weff >=1e-7 \n", pParam->BSIM4v5weff); } if (pParam->BSIM4v5weffCV <= 1.0e-9) { fprintf(fplog, "Warning: Weff for CV = %g <= 1.0e-9. Recommended WeffCV >= 1e-7 \n", pParam->BSIM4v5weffCV); printf("Warning: Weff for CV = %g <= 1.0e-9. Recommended WeffCV >= 1e-7 \n", pParam->BSIM4v5weffCV); } /* Check threshold voltage parameters */ if (model->BSIM4v5toxe < 1.0e-10) { fprintf(fplog, "Warning: Toxe = %g is less than 1A. Recommended Toxe >= 5A\n", model->BSIM4v5toxe); printf("Warning: Toxe = %g is less than 1A. Recommended Toxe >= 5A\n", model->BSIM4v5toxe); } if (model->BSIM4v5toxp < 1.0e-10) { fprintf(fplog, "Warning: Toxp = %g is less than 1A. Recommended Toxp >= 5A\n", model->BSIM4v5toxp); printf("Warning: Toxp = %g is less than 1A. Recommended Toxp >= 5A\n", model->BSIM4v5toxp); } if (model->BSIM4v5toxm < 1.0e-10) { fprintf(fplog, "Warning: Toxm = %g is less than 1A. Recommended Toxm >= 5A\n", model->BSIM4v5toxm); printf("Warning: Toxm = %g is less than 1A. Recommended Toxm >= 5A\n", model->BSIM4v5toxm); } if (pParam->BSIM4v5ndep <= 1.0e12) { fprintf(fplog, "Warning: Ndep = %g may be too small.\n", pParam->BSIM4v5ndep); printf("Warning: Ndep = %g may be too small.\n", pParam->BSIM4v5ndep); } else if (pParam->BSIM4v5ndep >= 1.0e21) { fprintf(fplog, "Warning: Ndep = %g may be too large.\n", pParam->BSIM4v5ndep); printf("Warning: Ndep = %g may be too large.\n", pParam->BSIM4v5ndep); } if (pParam->BSIM4v5nsub <= 1.0e14) { fprintf(fplog, "Warning: Nsub = %g may be too small.\n", pParam->BSIM4v5nsub); printf("Warning: Nsub = %g may be too small.\n", pParam->BSIM4v5nsub); } else if (pParam->BSIM4v5nsub >= 1.0e21) { fprintf(fplog, "Warning: Nsub = %g may be too large.\n", pParam->BSIM4v5nsub); printf("Warning: Nsub = %g may be too large.\n", pParam->BSIM4v5nsub); } if ((pParam->BSIM4v5ngate > 0.0) && (pParam->BSIM4v5ngate <= 1.e18)) { fprintf(fplog, "Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->BSIM4v5ngate); printf("Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->BSIM4v5ngate); } if (pParam->BSIM4v5dvt0 < 0.0) { fprintf(fplog, "Warning: Dvt0 = %g is negative.\n", pParam->BSIM4v5dvt0); printf("Warning: Dvt0 = %g is negative.\n", pParam->BSIM4v5dvt0); } if (fabs(1.0e-8 / (pParam->BSIM4v5w0 + pParam->BSIM4v5weff)) > 10.0) { fprintf(fplog, "Warning: (W0 + Weff) may be too small.\n"); printf("Warning: (W0 + Weff) may be too small.\n"); } /* Check subthreshold parameters */ if (pParam->BSIM4v5nfactor < 0.0) { fprintf(fplog, "Warning: Nfactor = %g is negative.\n", pParam->BSIM4v5nfactor); printf("Warning: Nfactor = %g is negative.\n", pParam->BSIM4v5nfactor); } if (pParam->BSIM4v5cdsc < 0.0) { fprintf(fplog, "Warning: Cdsc = %g is negative.\n", pParam->BSIM4v5cdsc); printf("Warning: Cdsc = %g is negative.\n", pParam->BSIM4v5cdsc); } if (pParam->BSIM4v5cdscd < 0.0) { fprintf(fplog, "Warning: Cdscd = %g is negative.\n", pParam->BSIM4v5cdscd); printf("Warning: Cdscd = %g is negative.\n", pParam->BSIM4v5cdscd); } /* Check DIBL parameters */ if (here->BSIM4v5eta0 < 0.0) { fprintf(fplog, "Warning: Eta0 = %g is negative.\n", here->BSIM4v5eta0); printf("Warning: Eta0 = %g is negative.\n", here->BSIM4v5eta0); } /* Check Abulk parameters */ if (fabs(1.0e-8 / (pParam->BSIM4v5b1 + pParam->BSIM4v5weff)) > 10.0) { fprintf(fplog, "Warning: (B1 + Weff) may be too small.\n"); printf("Warning: (B1 + Weff) may be too small.\n"); } /* Check Saturation parameters */ if (pParam->BSIM4v5a2 < 0.01) { fprintf(fplog, "Warning: A2 = %g is too small. Set to 0.01.\n", pParam->BSIM4v5a2); printf("Warning: A2 = %g is too small. Set to 0.01.\n", pParam->BSIM4v5a2); pParam->BSIM4v5a2 = 0.01; } else if (pParam->BSIM4v5a2 > 1.0) { fprintf(fplog, "Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->BSIM4v5a2); printf("Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->BSIM4v5a2); pParam->BSIM4v5a2 = 1.0; pParam->BSIM4v5a1 = 0.0; } if (pParam->BSIM4v5prwg < 0.0) { fprintf(fplog, "Warning: Prwg = %g is negative. Set to zero.\n", pParam->BSIM4v5prwg); printf("Warning: Prwg = %g is negative. Set to zero.\n", pParam->BSIM4v5prwg); pParam->BSIM4v5prwg = 0.0; } if (pParam->BSIM4v5rdsw < 0.0) { fprintf(fplog, "Warning: Rdsw = %g is negative. Set to zero.\n", pParam->BSIM4v5rdsw); printf("Warning: Rdsw = %g is negative. Set to zero.\n", pParam->BSIM4v5rdsw); pParam->BSIM4v5rdsw = 0.0; pParam->BSIM4v5rds0 = 0.0; } if (pParam->BSIM4v5rds0 < 0.0) { fprintf(fplog, "Warning: Rds at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4v5rds0); printf("Warning: Rds at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4v5rds0); pParam->BSIM4v5rds0 = 0.0; } if (pParam->BSIM4v5rdswmin < 0.0) { fprintf(fplog, "Warning: Rdswmin at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4v5rdswmin); printf("Warning: Rdswmin at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4v5rdswmin); pParam->BSIM4v5rdswmin = 0.0; } if (pParam->BSIM4v5pscbe2 <= 0.0) { fprintf(fplog, "Warning: Pscbe2 = %g is not positive.\n", pParam->BSIM4v5pscbe2); printf("Warning: Pscbe2 = %g is not positive.\n", pParam->BSIM4v5pscbe2); } if (pParam->BSIM4v5vsattemp < 1.0e3) { fprintf(fplog, "Warning: Vsat at current temperature = %g may be too small.\n", pParam->BSIM4v5vsattemp); printf("Warning: Vsat at current temperature = %g may be too small.\n", pParam->BSIM4v5vsattemp); } if((model->BSIM4v5lambdaGiven) && (pParam->BSIM4v5lambda > 0.0) ) { if (pParam->BSIM4v5lambda > 1.0e-9) { fprintf(fplog, "Warning: Lambda = %g may be too large.\n", pParam->BSIM4v5lambda); printf("Warning: Lambda = %g may be too large.\n", pParam->BSIM4v5lambda); } } if((model->BSIM4v5vtlGiven) && (pParam->BSIM4v5vtl > 0.0) ) { if (pParam->BSIM4v5vtl < 6.0e4) { fprintf(fplog, "Warning: Thermal velocity vtl = %g may be too small.\n", pParam->BSIM4v5vtl); printf("Warning: Thermal velocity vtl = %g may be too small.\n", pParam->BSIM4v5vtl); } if (pParam->BSIM4v5xn < 3.0) { fprintf(fplog, "Warning: back scattering coeff xn = %g is too small.\n", pParam->BSIM4v5xn); printf("Warning: back scattering coeff xn = %g is too small. Reset to 3.0 \n", pParam->BSIM4v5xn); pParam->BSIM4v5xn = 3.0; } if (model->BSIM4v5lc < 0.0) { fprintf(fplog, "Warning: back scattering coeff lc = %g is too small.\n", model->BSIM4v5lc); printf("Warning: back scattering coeff lc = %g is too small. Reset to 0.0\n", model->BSIM4v5lc); pParam->BSIM4v5lc = 0.0; } } if (pParam->BSIM4v5pdibl1 < 0.0) { fprintf(fplog, "Warning: Pdibl1 = %g is negative.\n", pParam->BSIM4v5pdibl1); printf("Warning: Pdibl1 = %g is negative.\n", pParam->BSIM4v5pdibl1); } if (pParam->BSIM4v5pdibl2 < 0.0) { fprintf(fplog, "Warning: Pdibl2 = %g is negative.\n", pParam->BSIM4v5pdibl2); printf("Warning: Pdibl2 = %g is negative.\n", pParam->BSIM4v5pdibl2); } /* Check stress effect parameters */ if((here->BSIM4v5sa > 0.0) && (here->BSIM4v5sb > 0.0) && ((here->BSIM4v5nf == 1.0) || ((here->BSIM4v5nf > 1.0) && (here->BSIM4v5sd > 0.0))) ) { if (model->BSIM4v5lodk2 <= 0.0) { fprintf(fplog, "Warning: LODK2 = %g is not positive.\n",model->BSIM4v5lodk2); printf("Warning: LODK2 = %g is not positive.\n",model->BSIM4v5lodk2); } if (model->BSIM4v5lodeta0 <= 0.0) { fprintf(fplog, "Warning: LODETA0 = %g is not positive.\n",model->BSIM4v5lodeta0); printf("Warning: LODETA0 = %g is not positive.\n",model->BSIM4v5lodeta0); } } /* Check gate resistance parameters */ if (here->BSIM4v5rgateMod == 1) { if (model->BSIM4v5rshg <= 0.0) printf("Warning: rshg should be positive for rgateMod = 1.\n"); } else if (here->BSIM4v5rgateMod == 2) { if (model->BSIM4v5rshg <= 0.0) printf("Warning: rshg <= 0.0 for rgateMod = 2.\n"); else if (pParam->BSIM4v5xrcrg1 <= 0.0) printf("Warning: xrcrg1 <= 0.0 for rgateMod = 2.\n"); } if (here->BSIM4v5rgateMod == 3) { if (model->BSIM4v5rshg <= 0.0) printf("Warning: rshg should be positive for rgateMod = 3.\n"); else if (pParam->BSIM4v5xrcrg1 <= 0.0) printf("Warning: xrcrg1 should be positive for rgateMod = 3.\n"); } /* Check capacitance parameters */ if (pParam->BSIM4v5noff < 0.1) { fprintf(fplog, "Warning: Noff = %g is too small.\n", pParam->BSIM4v5noff); printf("Warning: Noff = %g is too small.\n", pParam->BSIM4v5noff); } if (pParam->BSIM4v5voffcv < -0.5) { fprintf(fplog, "Warning: Voffcv = %g is too small.\n", pParam->BSIM4v5voffcv); printf("Warning: Voffcv = %g is too small.\n", pParam->BSIM4v5voffcv); } if (pParam->BSIM4v5moin < 5.0) { fprintf(fplog, "Warning: Moin = %g is too small.\n", pParam->BSIM4v5moin); printf("Warning: Moin = %g is too small.\n", pParam->BSIM4v5moin); } if (pParam->BSIM4v5moin > 25.0) { fprintf(fplog, "Warning: Moin = %g is too large.\n", pParam->BSIM4v5moin); printf("Warning: Moin = %g is too large.\n", pParam->BSIM4v5moin); } if(model->BSIM4v5capMod ==2) { if (pParam->BSIM4v5acde < 0.1) { fprintf(fplog, "Warning: Acde = %g is too small.\n", pParam->BSIM4v5acde); printf("Warning: Acde = %g is too small.\n", pParam->BSIM4v5acde); } if (pParam->BSIM4v5acde > 1.6) { fprintf(fplog, "Warning: Acde = %g is too large.\n", pParam->BSIM4v5acde); printf("Warning: Acde = %g is too large.\n", pParam->BSIM4v5acde); } } /* Check overlap capacitance parameters */ if (model->BSIM4v5cgdo < 0.0) { fprintf(fplog, "Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM4v5cgdo); printf("Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM4v5cgdo); model->BSIM4v5cgdo = 0.0; } if (model->BSIM4v5cgso < 0.0) { fprintf(fplog, "Warning: cgso = %g is negative. Set to zero.\n", model->BSIM4v5cgso); printf("Warning: cgso = %g is negative. Set to zero.\n", model->BSIM4v5cgso); model->BSIM4v5cgso = 0.0; } if (model->BSIM4v5cgbo < 0.0) { fprintf(fplog, "Warning: cgbo = %g is negative. Set to zero.\n", model->BSIM4v5cgbo); printf("Warning: cgbo = %g is negative. Set to zero.\n", model->BSIM4v5cgbo); model->BSIM4v5cgbo = 0.0; } if (model->BSIM4v5tnoiMod == 1) { if (model->BSIM4v5tnoia < 0.0) { fprintf(fplog, "Warning: tnoia = %g is negative. Set to zero.\n", model->BSIM4v5tnoia); printf("Warning: tnoia = %g is negative. Set to zero.\n", model->BSIM4v5tnoia); model->BSIM4v5tnoia = 0.0; } if (model->BSIM4v5tnoib < 0.0) { fprintf(fplog, "Warning: tnoib = %g is negative. Set to zero.\n", model->BSIM4v5tnoib); printf("Warning: tnoib = %g is negative. Set to zero.\n", model->BSIM4v5tnoib); model->BSIM4v5tnoib = 0.0; } if (model->BSIM4v5rnoia < 0.0) { fprintf(fplog, "Warning: rnoia = %g is negative. Set to zero.\n", model->BSIM4v5rnoia); printf("Warning: rnoia = %g is negative. Set to zero.\n", model->BSIM4v5rnoia); model->BSIM4v5rnoia = 0.0; } if (model->BSIM4v5rnoib < 0.0) { fprintf(fplog, "Warning: rnoib = %g is negative. Set to zero.\n", model->BSIM4v5rnoib); printf("Warning: rnoib = %g is negative. Set to zero.\n", model->BSIM4v5rnoib); model->BSIM4v5rnoib = 0.0; } } if (model->BSIM4v5SjctEmissionCoeff < 0.0) { fprintf(fplog, "Warning: Njs = %g is negative.\n", model->BSIM4v5SjctEmissionCoeff); printf("Warning: Njs = %g is negative.\n", model->BSIM4v5SjctEmissionCoeff); } if (model->BSIM4v5DjctEmissionCoeff < 0.0) { fprintf(fplog, "Warning: Njd = %g is negative.\n", model->BSIM4v5DjctEmissionCoeff); printf("Warning: Njd = %g is negative.\n", model->BSIM4v5DjctEmissionCoeff); } if (model->BSIM4v5njtstemp < 0.0) { fprintf(fplog, "Warning: Njts = %g is negative at temperature = %g.\n", model->BSIM4v5njtstemp, ckt->CKTtemp); printf("Warning: Njts = %g is negative at temperature = %g.\n", model->BSIM4v5njtstemp, ckt->CKTtemp); } if (model->BSIM4v5njtsswtemp < 0.0) { fprintf(fplog, "Warning: Njtssw = %g is negative at temperature = %g.\n", model->BSIM4v5njtsswtemp, ckt->CKTtemp); printf("Warning: Njtssw = %g is negative at temperature = %g.\n", model->BSIM4v5njtsswtemp, ckt->CKTtemp); } if (model->BSIM4v5njtsswgtemp < 0.0) { fprintf(fplog, "Warning: Njtsswg = %g is negative at temperature = %g.\n", model->BSIM4v5njtsswgtemp, ckt->CKTtemp); printf("Warning: Njtsswg = %g is negative at temperature = %g.\n", model->BSIM4v5njtsswgtemp, ckt->CKTtemp); } if (model->BSIM4v5ntnoi < 0.0) { fprintf(fplog, "Warning: ntnoi = %g is negative. Set to zero.\n", model->BSIM4v5ntnoi); printf("Warning: ntnoi = %g is negative. Set to zero.\n", model->BSIM4v5ntnoi); model->BSIM4v5ntnoi = 0.0; } /* diode model */ if (model->BSIM4v5SbulkJctBotGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJS = %g is too big. Set to 0.99.\n", model->BSIM4v5SbulkJctBotGradingCoeff); printf("Warning: MJS = %g is too big. Set to 0.99.\n", model->BSIM4v5SbulkJctBotGradingCoeff); model->BSIM4v5SbulkJctBotGradingCoeff = 0.99; } if (model->BSIM4v5SbulkJctSideGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJSWS = %g is too big. Set to 0.99.\n", model->BSIM4v5SbulkJctSideGradingCoeff); printf("Warning: MJSWS = %g is too big. Set to 0.99.\n", model->BSIM4v5SbulkJctSideGradingCoeff); model->BSIM4v5SbulkJctSideGradingCoeff = 0.99; } if (model->BSIM4v5SbulkJctGateSideGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJSWGS = %g is too big. Set to 0.99.\n", model->BSIM4v5SbulkJctGateSideGradingCoeff); printf("Warning: MJSWGS = %g is too big. Set to 0.99.\n", model->BSIM4v5SbulkJctGateSideGradingCoeff); model->BSIM4v5SbulkJctGateSideGradingCoeff = 0.99; } if (model->BSIM4v5DbulkJctBotGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJD = %g is too big. Set to 0.99.\n", model->BSIM4v5DbulkJctBotGradingCoeff); printf("Warning: MJD = %g is too big. Set to 0.99.\n", model->BSIM4v5DbulkJctBotGradingCoeff); model->BSIM4v5DbulkJctBotGradingCoeff = 0.99; } if (model->BSIM4v5DbulkJctSideGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJSWD = %g is too big. Set to 0.99.\n", model->BSIM4v5DbulkJctSideGradingCoeff); printf("Warning: MJSWD = %g is too big. Set to 0.99.\n", model->BSIM4v5DbulkJctSideGradingCoeff); model->BSIM4v5DbulkJctSideGradingCoeff = 0.99; } if (model->BSIM4v5DbulkJctGateSideGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJSWGD = %g is too big. Set to 0.99.\n", model->BSIM4v5DbulkJctGateSideGradingCoeff); printf("Warning: MJSWGD = %g is too big. Set to 0.99.\n", model->BSIM4v5DbulkJctGateSideGradingCoeff); model->BSIM4v5DbulkJctGateSideGradingCoeff = 0.99; } if (model->BSIM4v5wpemod == 1) { if (model->BSIM4v5scref <= 0.0) { fprintf(fplog, "Warning: SCREF = %g is not positive. Set to 1e-6.\n", model->BSIM4v5scref); printf("Warning: SCREF = %g is not positive. Set to 1e-6.\n", model->BSIM4v5scref); model->BSIM4v5scref = 1e-6; } if (here->BSIM4v5sca < 0.0) { fprintf(fplog, "Warning: SCA = %g is negative. Set to 0.0.\n", here->BSIM4v5sca); printf("Warning: SCA = %g is negative. Set to 0.0.\n", here->BSIM4v5sca); here->BSIM4v5sca = 0.0; } if (here->BSIM4v5scb < 0.0) { fprintf(fplog, "Warning: SCB = %g is negative. Set to 0.0.\n", here->BSIM4v5scb); printf("Warning: SCB = %g is negative. Set to 0.0.\n", here->BSIM4v5scb); here->BSIM4v5scb = 0.0; } if (here->BSIM4v5scc < 0.0) { fprintf(fplog, "Warning: SCC = %g is negative. Set to 0.0.\n", here->BSIM4v5scc); printf("Warning: SCC = %g is negative. Set to 0.0.\n", here->BSIM4v5scc); here->BSIM4v5scc = 0.0; } if (here->BSIM4v5sc < 0.0) { fprintf(fplog, "Warning: SC = %g is negative. Set to 0.0.\n", here->BSIM4v5sc); printf("Warning: SC = %g is negative. Set to 0.0.\n", here->BSIM4v5sc); here->BSIM4v5sc = 0.0; } } }/* loop for the parameter check for warning messages */ fclose(fplog); } else { fprintf(stderr, "Warning: Can't open log file. Parameter checking skipped.\n"); } return(Fatal_Flag); } tmpk8ny_4pz/src/spicelib/devices/bsim4v5/bsim4v5itf.h0000644000175000017500000000037713546075722022630 0ustar carstencarsten/********** Copyright 2004 Regents of the University of California. All rights reserved. Author: 2000 Weidong Liu. Author: 2001- Xuemei Xi File: bsim4v5itf.h **********/ #ifndef DEV_BSIM4V5 #define DEV_BSIM4V5 SPICEdev *get_bsim4v5_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/bsim4v5/b4v5.c0000644000175000017500000020077213546075722021410 0ustar carstencarsten/**** BSIM4.5.0 Released by Xuemei (Jane) Xi 07/29/2005 ****/ /********** * Copyright 2005 Regents of the University of California. All rights reserved. * File: b4.c of BSIM4.5.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "bsim4v5def.h" #include "ngspice/suffix.h" IFparm BSIM4v5pTable[] = { /* parameters */ IOP( "l", BSIM4v5_L, IF_REAL , "Length"), IOP( "w", BSIM4v5_W, IF_REAL , "Width"), IOP( "m", BSIM4v5_M, IF_REAL , "Separate Parallel multiplier"), IOP( "nf", BSIM4v5_NF, IF_REAL , "Number of fingers"), IOP( "sa", BSIM4v5_SA, IF_REAL , "distance between OD edge to poly of one side "), IOP( "sb", BSIM4v5_SB, IF_REAL , "distance between OD edge to poly of the other side"), IOP( "sd", BSIM4v5_SD, IF_REAL , "distance between neighbour fingers"), IOP( "sca", BSIM4v5_SCA, IF_REAL , "Integral of the first distribution function for scattered well dopant"), IOP( "scb", BSIM4v5_SCB, IF_REAL , "Integral of the second distribution function for scattered well dopant"), IOP( "scc", BSIM4v5_SCC, IF_REAL , "Integral of the third distribution function for scattered well dopant"), IOP( "sc", BSIM4v5_SC, IF_REAL , "Distance to a single well edge "), IOP( "min", BSIM4v5_MIN, IF_INTEGER , "Minimize either D or S"), IOP( "ad", BSIM4v5_AD, IF_REAL , "Drain area"), IOP( "as", BSIM4v5_AS, IF_REAL , "Source area"), IOP( "pd", BSIM4v5_PD, IF_REAL , "Drain perimeter"), IOP( "ps", BSIM4v5_PS, IF_REAL , "Source perimeter"), IOP( "nrd", BSIM4v5_NRD, IF_REAL , "Number of squares in drain"), IOP( "nrs", BSIM4v5_NRS, IF_REAL , "Number of squares in source"), IOP( "off", BSIM4v5_OFF, IF_FLAG , "Device is initially off"), IOP( "rbdb", BSIM4v5_RBDB, IF_REAL , "Body resistance"), IOP( "rbsb", BSIM4v5_RBSB, IF_REAL , "Body resistance"), IOP( "rbpb", BSIM4v5_RBPB, IF_REAL , "Body resistance"), IOP( "rbps", BSIM4v5_RBPS, IF_REAL , "Body resistance"), IOP( "rbpd", BSIM4v5_RBPD, IF_REAL , "Body resistance"), IOP( "delvto", BSIM4v5_DELVTO, IF_REAL , "Zero bias threshold voltage variation"), IOPR( "delvt0", BSIM4v5_DELVTO, IF_REAL , "Zero bias threshold voltage variation"), IOP( "xgw", BSIM4v5_XGW, IF_REAL, "Distance from gate contact center to device edge"), IOP( "ngcon", BSIM4v5_NGCON, IF_REAL, "Number of gate contacts"), IOP( "trnqsmod", BSIM4v5_TRNQSMOD, IF_INTEGER, "Transient NQS model selector"), IOP( "acnqsmod", BSIM4v5_ACNQSMOD, IF_INTEGER, "AC NQS model selector"), IOP( "rbodymod", BSIM4v5_RBODYMOD, IF_INTEGER, "Distributed body R model selector"), IOP( "rgatemod", BSIM4v5_RGATEMOD, IF_INTEGER, "Gate resistance model selector"), IOP( "geomod", BSIM4v5_GEOMOD, IF_INTEGER, "Geometry dependent parasitics model selector"), IOP( "rgeomod", BSIM4v5_RGEOMOD, IF_INTEGER, "S/D resistance and contact model selector"), IP( "ic", BSIM4v5_IC, IF_REALVEC , "Vector of DS,GS,BS initial voltages"), OP( "gmbs", BSIM4v5_GMBS, IF_REAL, "Gmb"), OP( "gm", BSIM4v5_GM, IF_REAL, "Gm"), OP( "gds", BSIM4v5_GDS, IF_REAL, "Gds"), OP( "vdsat", BSIM4v5_VDSAT, IF_REAL, "Vdsat"), OP( "vth", BSIM4v5_VON, IF_REAL, "Vth"), OP( "id", BSIM4v5_CD, IF_REAL, "Ids"), OP( "ibd", BSIM4v5_CBD, IF_REAL, "Ibd"), OP( "ibs", BSIM4v5_CBS, IF_REAL, "Ibs"), OP( "gbd", BSIM4v5_GBD, IF_REAL, "gbd"), OP( "gbs", BSIM4v5_GBS, IF_REAL, "gbs"), OP( "isub", BSIM4v5_CSUB, IF_REAL, "Isub"), OP( "igidl", BSIM4v5_IGIDL, IF_REAL, "Igidl"), OP( "igisl", BSIM4v5_IGISL, IF_REAL, "Igisl"), OP( "igs", BSIM4v5_IGS, IF_REAL, "Igs"), OP( "igd", BSIM4v5_IGD, IF_REAL, "Igd"), OP( "igb", BSIM4v5_IGB, IF_REAL, "Igb"), OP( "igcs", BSIM4v5_IGCS, IF_REAL, "Igcs"), OP( "igcd", BSIM4v5_IGCD, IF_REAL, "Igcd"), OP( "vbs", BSIM4v5_VBS, IF_REAL, "Vbs"), OP( "vgs", BSIM4v5_VGS, IF_REAL, "Vgs"), OP( "vds", BSIM4v5_VDS, IF_REAL, "Vds"), OP( "cgg", BSIM4v5_CGGB, IF_REAL, "Cggb"), OP( "cgs", BSIM4v5_CGSB, IF_REAL, "Cgsb"), OP( "cgd", BSIM4v5_CGDB, IF_REAL, "Cgdb"), OP( "cbg", BSIM4v5_CBGB, IF_REAL, "Cbgb"), OP( "cbd", BSIM4v5_CBDB, IF_REAL, "Cbdb"), OP( "cbs", BSIM4v5_CBSB, IF_REAL, "Cbsb"), OP( "cdg", BSIM4v5_CDGB, IF_REAL, "Cdgb"), OP( "cdd", BSIM4v5_CDDB, IF_REAL, "Cddb"), OP( "cds", BSIM4v5_CDSB, IF_REAL, "Cdsb"), OP( "csg", BSIM4v5_CSGB, IF_REAL, "Csgb"), OP( "csd", BSIM4v5_CSDB, IF_REAL, "Csdb"), OP( "css", BSIM4v5_CSSB, IF_REAL, "Cssb"), OP( "cgb", BSIM4v5_CGBB, IF_REAL, "Cgbb"), OP( "cdb", BSIM4v5_CDBB, IF_REAL, "Cdbb"), OP( "csb", BSIM4v5_CSBB, IF_REAL, "Csbb"), OP( "cbb", BSIM4v5_CBBB, IF_REAL, "Cbbb"), OP( "capbd", BSIM4v5_CAPBD, IF_REAL, "Capbd"), OP( "capbs", BSIM4v5_CAPBS, IF_REAL, "Capbs"), OP( "qg", BSIM4v5_QG, IF_REAL, "Qgate"), OP( "qb", BSIM4v5_QB, IF_REAL, "Qbulk"), OP( "qd", BSIM4v5_QD, IF_REAL, "Qdrain"), OP( "qs", BSIM4v5_QS, IF_REAL, "Qsource"), OP( "qinv", BSIM4v5_QINV, IF_REAL, "Qinversion"), OP( "qdef", BSIM4v5_QDEF, IF_REAL, "Qdef"), OP( "gcrg", BSIM4v5_GCRG, IF_REAL, "Gcrg"), OP( "gtau", BSIM4v5_GTAU, IF_REAL, "Gtau"), }; IFparm BSIM4v5mPTable[] = { /* model parameters */ IOP( "capmod", BSIM4v5_MOD_CAPMOD, IF_INTEGER, "Capacitance model selector"), IOP( "diomod", BSIM4v5_MOD_DIOMOD, IF_INTEGER, "Diode IV model selector"), IOP( "rdsmod", BSIM4v5_MOD_RDSMOD, IF_INTEGER, "Bias-dependent S/D resistance model selector"), IOP( "trnqsmod", BSIM4v5_MOD_TRNQSMOD, IF_INTEGER, "Transient NQS model selector"), IOP( "acnqsmod", BSIM4v5_MOD_ACNQSMOD, IF_INTEGER, "AC NQS model selector"), IOP( "mobmod", BSIM4v5_MOD_MOBMOD, IF_INTEGER, "Mobility model selector"), IOP( "rbodymod", BSIM4v5_MOD_RBODYMOD, IF_INTEGER, "Distributed body R model selector"), IOP( "rgatemod", BSIM4v5_MOD_RGATEMOD, IF_INTEGER, "Gate R model selector"), IOP( "permod", BSIM4v5_MOD_PERMOD, IF_INTEGER, "Pd and Ps model selector"), IOP( "geomod", BSIM4v5_MOD_GEOMOD, IF_INTEGER, "Geometry dependent parasitics model selector"), IOP( "rgeomod", BSIM4v5_MOD_RGEOMOD, IF_INTEGER, "S/D resistance and contact model selector"), IOP( "fnoimod", BSIM4v5_MOD_FNOIMOD, IF_INTEGER, "Flicker noise model selector"), IOP( "tnoimod", BSIM4v5_MOD_TNOIMOD, IF_INTEGER, "Thermal noise model selector"), IOP( "igcmod", BSIM4v5_MOD_IGCMOD, IF_INTEGER, "Gate-to-channel Ig model selector"), IOP( "igbmod", BSIM4v5_MOD_IGBMOD, IF_INTEGER, "Gate-to-body Ig model selector"), IOP( "tempmod", BSIM4v5_MOD_TEMPMOD, IF_INTEGER, "Temperature model selector"), IOP( "paramchk", BSIM4v5_MOD_PARAMCHK, IF_INTEGER, "Model parameter checking selector"), IOP( "binunit", BSIM4v5_MOD_BINUNIT, IF_INTEGER, "Bin unit selector"), IOP( "version", BSIM4v5_MOD_VERSION, IF_STRING, "parameter for model version"), IOP( "toxe", BSIM4v5_MOD_TOXE, IF_REAL, "Electrical gate oxide thickness in meters"), IOP( "toxp", BSIM4v5_MOD_TOXP, IF_REAL, "Physical gate oxide thickness in meters"), IOP( "toxm", BSIM4v5_MOD_TOXM, IF_REAL, "Gate oxide thickness at which parameters are extracted"), IOP( "toxref", BSIM4v5_MOD_TOXREF, IF_REAL, "Target tox value"), IOP( "dtox", BSIM4v5_MOD_DTOX, IF_REAL, "Defined as (toxe - toxp) "), IOP( "epsrox", BSIM4v5_MOD_EPSROX, IF_REAL, "Dielectric constant of the gate oxide relative to vacuum"), IOP( "cdsc", BSIM4v5_MOD_CDSC, IF_REAL, "Drain/Source and channel coupling capacitance"), IOP( "cdscb", BSIM4v5_MOD_CDSCB, IF_REAL, "Body-bias dependence of cdsc"), IOP( "cdscd", BSIM4v5_MOD_CDSCD, IF_REAL, "Drain-bias dependence of cdsc"), IOP( "cit", BSIM4v5_MOD_CIT, IF_REAL, "Interface state capacitance"), IOP( "nfactor", BSIM4v5_MOD_NFACTOR, IF_REAL, "Subthreshold swing Coefficient"), IOP( "xj", BSIM4v5_MOD_XJ, IF_REAL, "Junction depth in meters"), IOP( "vsat", BSIM4v5_MOD_VSAT, IF_REAL, "Saturation velocity at tnom"), IOP( "at", BSIM4v5_MOD_AT, IF_REAL, "Temperature coefficient of vsat"), IOP( "a0", BSIM4v5_MOD_A0, IF_REAL, "Non-uniform depletion width effect coefficient."), IOP( "ags", BSIM4v5_MOD_AGS, IF_REAL, "Gate bias coefficient of Abulk."), IOP( "a1", BSIM4v5_MOD_A1, IF_REAL, "Non-saturation effect coefficient"), IOP( "a2", BSIM4v5_MOD_A2, IF_REAL, "Non-saturation effect coefficient"), IOP( "keta", BSIM4v5_MOD_KETA, IF_REAL, "Body-bias coefficient of non-uniform depletion width effect."), IOP( "nsub", BSIM4v5_MOD_NSUB, IF_REAL, "Substrate doping concentration"), IOP( "ndep", BSIM4v5_MOD_NDEP, IF_REAL, "Channel doping concentration at the depletion edge"), IOP( "nsd", BSIM4v5_MOD_NSD, IF_REAL, "S/D doping concentration"), IOP( "phin", BSIM4v5_MOD_PHIN, IF_REAL, "Adjusting parameter for surface potential due to non-uniform vertical doping"), IOP( "ngate", BSIM4v5_MOD_NGATE, IF_REAL, "Poly-gate doping concentration"), IOP( "gamma1", BSIM4v5_MOD_GAMMA1, IF_REAL, "Vth body coefficient"), IOP( "gamma2", BSIM4v5_MOD_GAMMA2, IF_REAL, "Vth body coefficient"), IOP( "vbx", BSIM4v5_MOD_VBX, IF_REAL, "Vth transition body Voltage"), IOP( "vbm", BSIM4v5_MOD_VBM, IF_REAL, "Maximum body voltage"), IOP( "xt", BSIM4v5_MOD_XT, IF_REAL, "Doping depth"), IOP( "k1", BSIM4v5_MOD_K1, IF_REAL, "Bulk effect coefficient 1"), IOP( "kt1", BSIM4v5_MOD_KT1, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt1l", BSIM4v5_MOD_KT1L, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt2", BSIM4v5_MOD_KT2, IF_REAL, "Body-coefficient of kt1"), IOP( "k2", BSIM4v5_MOD_K2, IF_REAL, "Bulk effect coefficient 2"), IOP( "k3", BSIM4v5_MOD_K3, IF_REAL, "Narrow width effect coefficient"), IOP( "k3b", BSIM4v5_MOD_K3B, IF_REAL, "Body effect coefficient of k3"), IOP( "w0", BSIM4v5_MOD_W0, IF_REAL, "Narrow width effect parameter"), IOP( "dvtp0", BSIM4v5_MOD_DVTP0, IF_REAL, "First parameter for Vth shift due to pocket"), IOP( "dvtp1", BSIM4v5_MOD_DVTP1, IF_REAL, "Second parameter for Vth shift due to pocket"), IOP( "lpe0", BSIM4v5_MOD_LPE0, IF_REAL, "Equivalent length of pocket region at zero bias"), IOP( "lpeb", BSIM4v5_MOD_LPEB, IF_REAL, "Equivalent length of pocket region accounting for body bias"), IOP( "dvt0", BSIM4v5_MOD_DVT0, IF_REAL, "Short channel effect coeff. 0"), IOP( "dvt1", BSIM4v5_MOD_DVT1, IF_REAL, "Short channel effect coeff. 1"), IOP( "dvt2", BSIM4v5_MOD_DVT2, IF_REAL, "Short channel effect coeff. 2"), IOP( "dvt0w", BSIM4v5_MOD_DVT0W, IF_REAL, "Narrow Width coeff. 0"), IOP( "dvt1w", BSIM4v5_MOD_DVT1W, IF_REAL, "Narrow Width effect coeff. 1"), IOP( "dvt2w", BSIM4v5_MOD_DVT2W, IF_REAL, "Narrow Width effect coeff. 2"), IOP( "drout", BSIM4v5_MOD_DROUT, IF_REAL, "DIBL coefficient of output resistance"), IOP( "dsub", BSIM4v5_MOD_DSUB, IF_REAL, "DIBL coefficient in the subthreshold region"), IOP( "vth0", BSIM4v5_MOD_VTH0, IF_REAL,"Threshold voltage"), IOPR("vtho", BSIM4v5_MOD_VTH0, IF_REAL,"Threshold voltage"), IOP( "ua", BSIM4v5_MOD_UA, IF_REAL, "Linear gate dependence of mobility"), IOP( "ua1", BSIM4v5_MOD_UA1, IF_REAL, "Temperature coefficient of ua"), IOP( "ub", BSIM4v5_MOD_UB, IF_REAL, "Quadratic gate dependence of mobility"), IOP( "ub1", BSIM4v5_MOD_UB1, IF_REAL, "Temperature coefficient of ub"), IOP( "uc", BSIM4v5_MOD_UC, IF_REAL, "Body-bias dependence of mobility"), IOP( "uc1", BSIM4v5_MOD_UC1, IF_REAL, "Temperature coefficient of uc"), IOP( "ud", BSIM4v5_MOD_UD, IF_REAL, "Coulomb scattering factor of mobility"), IOP( "ud1", BSIM4v5_MOD_UD1, IF_REAL, "Temperature coefficient of ud"), IOP( "up", BSIM4v5_MOD_UP, IF_REAL, "Channel length linear factor of mobility"), IOP( "lp", BSIM4v5_MOD_LP, IF_REAL, "Channel length exponential factor of mobility"), IOP( "u0", BSIM4v5_MOD_U0, IF_REAL, "Low-field mobility at Tnom"), IOP( "eu", BSIM4v5_MOD_EU, IF_REAL, "Mobility exponent"), IOP( "ute", BSIM4v5_MOD_UTE, IF_REAL, "Temperature coefficient of mobility"), IOP( "voff", BSIM4v5_MOD_VOFF, IF_REAL, "Threshold voltage offset"), IOP( "minv", BSIM4v5_MOD_MINV, IF_REAL, "Fitting parameter for moderate invversion in Vgsteff"), IOP( "voffl", BSIM4v5_MOD_VOFFL, IF_REAL, "Length dependence parameter for Vth offset"), IOP( "tnom", BSIM4v5_MOD_TNOM, IF_REAL, "Parameter measurement temperature"), IOP( "cgso", BSIM4v5_MOD_CGSO, IF_REAL, "Gate-source overlap capacitance per width"), IOP( "cgdo", BSIM4v5_MOD_CGDO, IF_REAL, "Gate-drain overlap capacitance per width"), IOP( "cgbo", BSIM4v5_MOD_CGBO, IF_REAL, "Gate-bulk overlap capacitance per length"), IOP( "xpart", BSIM4v5_MOD_XPART, IF_REAL, "Channel charge partitioning"), IOP( "delta", BSIM4v5_MOD_DELTA, IF_REAL, "Effective Vds parameter"), IOP( "rsh", BSIM4v5_MOD_RSH, IF_REAL, "Source-drain sheet resistance"), IOP( "rdsw", BSIM4v5_MOD_RDSW, IF_REAL, "Source-drain resistance per width"), IOP( "rdswmin", BSIM4v5_MOD_RDSWMIN, IF_REAL, "Source-drain resistance per width at high Vg"), IOP( "rsw", BSIM4v5_MOD_RSW, IF_REAL, "Source resistance per width"), IOP( "rdw", BSIM4v5_MOD_RDW, IF_REAL, "Drain resistance per width"), IOP( "rdwmin", BSIM4v5_MOD_RDWMIN, IF_REAL, "Drain resistance per width at high Vg"), IOP( "rswmin", BSIM4v5_MOD_RSWMIN, IF_REAL, "Source resistance per width at high Vg"), IOP( "prwg", BSIM4v5_MOD_PRWG, IF_REAL, "Gate-bias effect on parasitic resistance "), IOP( "prwb", BSIM4v5_MOD_PRWB, IF_REAL, "Body-effect on parasitic resistance "), IOP( "prt", BSIM4v5_MOD_PRT, IF_REAL, "Temperature coefficient of parasitic resistance "), IOP( "eta0", BSIM4v5_MOD_ETA0, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "etab", BSIM4v5_MOD_ETAB, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "pclm", BSIM4v5_MOD_PCLM, IF_REAL, "Channel length modulation Coefficient"), IOP( "pdiblc1", BSIM4v5_MOD_PDIBL1, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblc2", BSIM4v5_MOD_PDIBL2, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblcb", BSIM4v5_MOD_PDIBLB, IF_REAL, "Body-effect on drain-induced barrier lowering"), IOP( "fprout", BSIM4v5_MOD_FPROUT, IF_REAL, "Rout degradation coefficient for pocket devices"), IOP( "pdits", BSIM4v5_MOD_PDITS, IF_REAL, "Coefficient for drain-induced Vth shifts"), IOP( "pditsl", BSIM4v5_MOD_PDITSL, IF_REAL, "Length dependence of drain-induced Vth shifts"), IOP( "pditsd", BSIM4v5_MOD_PDITSD, IF_REAL, "Vds dependence of drain-induced Vth shifts"), IOP( "pscbe1", BSIM4v5_MOD_PSCBE1, IF_REAL, "Substrate current body-effect coefficient"), IOP( "pscbe2", BSIM4v5_MOD_PSCBE2, IF_REAL, "Substrate current body-effect coefficient"), IOP( "pvag", BSIM4v5_MOD_PVAG, IF_REAL, "Gate dependence of output resistance parameter"), IOP( "jss", BSIM4v5_MOD_JSS, IF_REAL, "Bottom source junction reverse saturation current density"), IOP( "jsws", BSIM4v5_MOD_JSWS, IF_REAL, "Isolation edge sidewall source junction reverse saturation current density"), IOP( "jswgs", BSIM4v5_MOD_JSWGS, IF_REAL, "Gate edge source junction reverse saturation current density"), IOP( "pbs", BSIM4v5_MOD_PBS, IF_REAL, "Source junction built-in potential"), IOP( "njs", BSIM4v5_MOD_NJS, IF_REAL, "Source junction emission coefficient"), IOP( "xtis", BSIM4v5_MOD_XTIS, IF_REAL, "Source junction current temperature exponent"), IOP( "mjs", BSIM4v5_MOD_MJS, IF_REAL, "Source bottom junction capacitance grading coefficient"), IOP( "pbsws", BSIM4v5_MOD_PBSWS, IF_REAL, "Source sidewall junction capacitance built in potential"), IOP( "mjsws", BSIM4v5_MOD_MJSWS, IF_REAL, "Source sidewall junction capacitance grading coefficient"), IOP( "pbswgs", BSIM4v5_MOD_PBSWGS, IF_REAL, "Source (gate side) sidewall junction capacitance built in potential"), IOP( "mjswgs", BSIM4v5_MOD_MJSWGS, IF_REAL, "Source (gate side) sidewall junction capacitance grading coefficient"), IOP( "cjs", BSIM4v5_MOD_CJS, IF_REAL, "Source bottom junction capacitance per unit area"), IOP( "cjsws", BSIM4v5_MOD_CJSWS, IF_REAL, "Source sidewall junction capacitance per unit periphery"), IOP( "cjswgs", BSIM4v5_MOD_CJSWGS, IF_REAL, "Source (gate side) sidewall junction capacitance per unit width"), IOP( "jsd", BSIM4v5_MOD_JSD, IF_REAL, "Bottom drain junction reverse saturation current density"), IOP( "jswd", BSIM4v5_MOD_JSWD, IF_REAL, "Isolation edge sidewall drain junction reverse saturation current density"), IOP( "jswgd", BSIM4v5_MOD_JSWGD, IF_REAL, "Gate edge drain junction reverse saturation current density"), IOP( "pbd", BSIM4v5_MOD_PBD, IF_REAL, "Drain junction built-in potential"), IOP( "njd", BSIM4v5_MOD_NJD, IF_REAL, "Drain junction emission coefficient"), IOP( "xtid", BSIM4v5_MOD_XTID, IF_REAL, "Drainjunction current temperature exponent"), IOP( "mjd", BSIM4v5_MOD_MJD, IF_REAL, "Drain bottom junction capacitance grading coefficient"), IOP( "pbswd", BSIM4v5_MOD_PBSWD, IF_REAL, "Drain sidewall junction capacitance built in potential"), IOP( "mjswd", BSIM4v5_MOD_MJSWD, IF_REAL, "Drain sidewall junction capacitance grading coefficient"), IOP( "pbswgd", BSIM4v5_MOD_PBSWGD, IF_REAL, "Drain (gate side) sidewall junction capacitance built in potential"), IOP( "mjswgd", BSIM4v5_MOD_MJSWGD, IF_REAL, "Drain (gate side) sidewall junction capacitance grading coefficient"), IOP( "cjd", BSIM4v5_MOD_CJD, IF_REAL, "Drain bottom junction capacitance per unit area"), IOP( "cjswd", BSIM4v5_MOD_CJSWD, IF_REAL, "Drain sidewall junction capacitance per unit periphery"), IOP( "cjswgd", BSIM4v5_MOD_CJSWGD, IF_REAL, "Drain (gate side) sidewall junction capacitance per unit width"), IOP( "vfbcv", BSIM4v5_MOD_VFBCV, IF_REAL, "Flat Band Voltage parameter for capmod=0 only"), IOP( "vfb", BSIM4v5_MOD_VFB, IF_REAL, "Flat Band Voltage"), IOP( "tpb", BSIM4v5_MOD_TPB, IF_REAL, "Temperature coefficient of pb"), IOP( "tcj", BSIM4v5_MOD_TCJ, IF_REAL, "Temperature coefficient of cj"), IOP( "tpbsw", BSIM4v5_MOD_TPBSW, IF_REAL, "Temperature coefficient of pbsw"), IOP( "tcjsw", BSIM4v5_MOD_TCJSW, IF_REAL, "Temperature coefficient of cjsw"), IOP( "tpbswg", BSIM4v5_MOD_TPBSWG, IF_REAL, "Temperature coefficient of pbswg"), IOP( "tcjswg", BSIM4v5_MOD_TCJSWG, IF_REAL, "Temperature coefficient of cjswg"), IOP( "acde", BSIM4v5_MOD_ACDE, IF_REAL, "Exponential coefficient for finite charge thickness"), IOP( "moin", BSIM4v5_MOD_MOIN, IF_REAL, "Coefficient for gate-bias dependent surface potential"), IOP( "noff", BSIM4v5_MOD_NOFF, IF_REAL, "C-V turn-on/off parameter"), IOP( "voffcv", BSIM4v5_MOD_VOFFCV, IF_REAL, "C-V lateral-shift parameter"), IOP( "dmcg", BSIM4v5_MOD_DMCG, IF_REAL, "Distance of Mid-Contact to Gate edge"), IOP( "dmci", BSIM4v5_MOD_DMCI, IF_REAL, "Distance of Mid-Contact to Isolation"), IOP( "dmdg", BSIM4v5_MOD_DMDG, IF_REAL, "Distance of Mid-Diffusion to Gate edge"), IOP( "dmcgt", BSIM4v5_MOD_DMCGT, IF_REAL, "Distance of Mid-Contact to Gate edge in Test structures"), IOP( "xgw", BSIM4v5_MOD_XGW, IF_REAL, "Distance from gate contact center to device edge"), IOP( "xgl", BSIM4v5_MOD_XGL, IF_REAL, "Variation in Ldrawn"), IOP( "rshg", BSIM4v5_MOD_RSHG, IF_REAL, "Gate sheet resistance"), IOP( "ngcon", BSIM4v5_MOD_NGCON, IF_REAL, "Number of gate contacts"), IOP( "xrcrg1", BSIM4v5_MOD_XRCRG1, IF_REAL, "First fitting parameter the bias-dependent Rg"), IOP( "xrcrg2", BSIM4v5_MOD_XRCRG2, IF_REAL, "Second fitting parameter the bias-dependent Rg"), IOP( "lambda", BSIM4v5_MOD_LAMBDA, IF_REAL, " Velocity overshoot parameter"), IOP( "vtl", BSIM4v5_MOD_VTL, IF_REAL, " thermal velocity"), IOP( "lc", BSIM4v5_MOD_LC, IF_REAL, " back scattering parameter"), IOP( "xn", BSIM4v5_MOD_XN, IF_REAL, " back scattering parameter"), IOP( "vfbsdoff", BSIM4v5_MOD_VFBSDOFF, IF_REAL, "S/D flatband voltage offset"), IOP( "tvfbsdoff", BSIM4v5_MOD_TVFBSDOFF, IF_REAL, "Temperature parameter for vfbsdoff"), IOP( "tvoff", BSIM4v5_MOD_TVOFF, IF_REAL, "Temperature parameter for voff"), IOP( "lintnoi", BSIM4v5_MOD_LINTNOI, IF_REAL, "lint offset for noise calculation"), IOP( "lint", BSIM4v5_MOD_LINT, IF_REAL, "Length reduction parameter"), IOP( "ll", BSIM4v5_MOD_LL, IF_REAL, "Length reduction parameter"), IOP( "llc", BSIM4v5_MOD_LLC, IF_REAL, "Length reduction parameter for CV"), IOP( "lln", BSIM4v5_MOD_LLN, IF_REAL, "Length reduction parameter"), IOP( "lw", BSIM4v5_MOD_LW, IF_REAL, "Length reduction parameter"), IOP( "lwc", BSIM4v5_MOD_LWC, IF_REAL, "Length reduction parameter for CV"), IOP( "lwn", BSIM4v5_MOD_LWN, IF_REAL, "Length reduction parameter"), IOP( "lwl", BSIM4v5_MOD_LWL, IF_REAL, "Length reduction parameter"), IOP( "lwlc", BSIM4v5_MOD_LWLC, IF_REAL, "Length reduction parameter for CV"), IOP( "lmin", BSIM4v5_MOD_LMIN, IF_REAL, "Minimum length for the model"), IOP( "lmax", BSIM4v5_MOD_LMAX, IF_REAL, "Maximum length for the model"), IOP( "wr", BSIM4v5_MOD_WR, IF_REAL, "Width dependence of rds"), IOP( "wint", BSIM4v5_MOD_WINT, IF_REAL, "Width reduction parameter"), IOP( "dwg", BSIM4v5_MOD_DWG, IF_REAL, "Width reduction parameter"), IOP( "dwb", BSIM4v5_MOD_DWB, IF_REAL, "Width reduction parameter"), IOP( "wl", BSIM4v5_MOD_WL, IF_REAL, "Width reduction parameter"), IOP( "wlc", BSIM4v5_MOD_WLC, IF_REAL, "Width reduction parameter for CV"), IOP( "wln", BSIM4v5_MOD_WLN, IF_REAL, "Width reduction parameter"), IOP( "ww", BSIM4v5_MOD_WW, IF_REAL, "Width reduction parameter"), IOP( "wwc", BSIM4v5_MOD_WWC, IF_REAL, "Width reduction parameter for CV"), IOP( "wwn", BSIM4v5_MOD_WWN, IF_REAL, "Width reduction parameter"), IOP( "wwl", BSIM4v5_MOD_WWL, IF_REAL, "Width reduction parameter"), IOP( "wwlc", BSIM4v5_MOD_WWLC, IF_REAL, "Width reduction parameter for CV"), IOP( "wmin", BSIM4v5_MOD_WMIN, IF_REAL, "Minimum width for the model"), IOP( "wmax", BSIM4v5_MOD_WMAX, IF_REAL, "Maximum width for the model"), IOP( "b0", BSIM4v5_MOD_B0, IF_REAL, "Abulk narrow width parameter"), IOP( "b1", BSIM4v5_MOD_B1, IF_REAL, "Abulk narrow width parameter"), IOP( "cgsl", BSIM4v5_MOD_CGSL, IF_REAL, "New C-V model parameter"), IOP( "cgdl", BSIM4v5_MOD_CGDL, IF_REAL, "New C-V model parameter"), IOP( "ckappas", BSIM4v5_MOD_CKAPPAS, IF_REAL, "S/G overlap C-V parameter "), IOP( "ckappad", BSIM4v5_MOD_CKAPPAD, IF_REAL, "D/G overlap C-V parameter"), IOP( "cf", BSIM4v5_MOD_CF, IF_REAL, "Fringe capacitance parameter"), IOP( "clc", BSIM4v5_MOD_CLC, IF_REAL, "Vdsat parameter for C-V model"), IOP( "cle", BSIM4v5_MOD_CLE, IF_REAL, "Vdsat parameter for C-V model"), IOP( "dwc", BSIM4v5_MOD_DWC, IF_REAL, "Delta W for C-V model"), IOP( "dlc", BSIM4v5_MOD_DLC, IF_REAL, "Delta L for C-V model"), IOP( "xw", BSIM4v5_MOD_XW, IF_REAL, "W offset for channel width due to mask/etch effect"), IOP( "xl", BSIM4v5_MOD_XL, IF_REAL, "L offset for channel length due to mask/etch effect"), IOP( "dlcig", BSIM4v5_MOD_DLCIG, IF_REAL, "Delta L for Ig model"), IOP( "dwj", BSIM4v5_MOD_DWJ, IF_REAL, "Delta W for S/D junctions"), IOP( "alpha0", BSIM4v5_MOD_ALPHA0, IF_REAL, "substrate current model parameter"), IOP( "alpha1", BSIM4v5_MOD_ALPHA1, IF_REAL, "substrate current model parameter"), IOP( "beta0", BSIM4v5_MOD_BETA0, IF_REAL, "substrate current model parameter"), IOP( "agidl", BSIM4v5_MOD_AGIDL, IF_REAL, "Pre-exponential constant for GIDL"), IOP( "bgidl", BSIM4v5_MOD_BGIDL, IF_REAL, "Exponential constant for GIDL"), IOP( "cgidl", BSIM4v5_MOD_CGIDL, IF_REAL, "Parameter for body-bias dependence of GIDL"), IOP( "egidl", BSIM4v5_MOD_EGIDL, IF_REAL, "Fitting parameter for Bandbending"), IOP( "aigc", BSIM4v5_MOD_AIGC, IF_REAL, "Parameter for Igc"), IOP( "bigc", BSIM4v5_MOD_BIGC, IF_REAL, "Parameter for Igc"), IOP( "cigc", BSIM4v5_MOD_CIGC, IF_REAL, "Parameter for Igc"), IOP( "aigsd", BSIM4v5_MOD_AIGSD, IF_REAL, "Parameter for Igs,d"), IOP( "bigsd", BSIM4v5_MOD_BIGSD, IF_REAL, "Parameter for Igs,d"), IOP( "cigsd", BSIM4v5_MOD_CIGSD, IF_REAL, "Parameter for Igs,d"), IOP( "aigbacc", BSIM4v5_MOD_AIGBACC, IF_REAL, "Parameter for Igb"), IOP( "bigbacc", BSIM4v5_MOD_BIGBACC, IF_REAL, "Parameter for Igb"), IOP( "cigbacc", BSIM4v5_MOD_CIGBACC, IF_REAL, "Parameter for Igb"), IOP( "aigbinv", BSIM4v5_MOD_AIGBINV, IF_REAL, "Parameter for Igb"), IOP( "bigbinv", BSIM4v5_MOD_BIGBINV, IF_REAL, "Parameter for Igb"), IOP( "cigbinv", BSIM4v5_MOD_CIGBINV, IF_REAL, "Parameter for Igb"), IOP( "nigc", BSIM4v5_MOD_NIGC, IF_REAL, "Parameter for Igc slope"), IOP( "nigbinv", BSIM4v5_MOD_NIGBINV, IF_REAL, "Parameter for Igbinv slope"), IOP( "nigbacc", BSIM4v5_MOD_NIGBACC, IF_REAL, "Parameter for Igbacc slope"), IOP( "ntox", BSIM4v5_MOD_NTOX, IF_REAL, "Exponent for Tox ratio"), IOP( "eigbinv", BSIM4v5_MOD_EIGBINV, IF_REAL, "Parameter for the Si bandgap for Igbinv"), IOP( "pigcd", BSIM4v5_MOD_PIGCD, IF_REAL, "Parameter for Igc partition"), IOP( "poxedge", BSIM4v5_MOD_POXEDGE, IF_REAL, "Factor for the gate edge Tox"), IOP( "ijthdfwd", BSIM4v5_MOD_IJTHDFWD, IF_REAL, "Forward drain diode forward limiting current"), IOP( "ijthsfwd", BSIM4v5_MOD_IJTHSFWD, IF_REAL, "Forward source diode forward limiting current"), IOP( "ijthdrev", BSIM4v5_MOD_IJTHDREV, IF_REAL, "Reverse drain diode forward limiting current"), IOP( "ijthsrev", BSIM4v5_MOD_IJTHSREV, IF_REAL, "Reverse source diode forward limiting current"), IOP( "xjbvd", BSIM4v5_MOD_XJBVD, IF_REAL, "Fitting parameter for drain diode breakdown current"), IOP( "xjbvs", BSIM4v5_MOD_XJBVS, IF_REAL, "Fitting parameter for source diode breakdown current"), IOP( "bvd", BSIM4v5_MOD_BVD, IF_REAL, "Drain diode breakdown voltage"), IOP( "bvs", BSIM4v5_MOD_BVS, IF_REAL, "Source diode breakdown voltage"), IOP( "jtss", BSIM4v5_MOD_JTSS, IF_REAL, "Source bottom trap-assisted saturation current density"), IOP( "jtsd", BSIM4v5_MOD_JTSD, IF_REAL, "Drain bottom trap-assisted saturation current density"), IOP( "jtssws", BSIM4v5_MOD_JTSSWS, IF_REAL, "Source STI sidewall trap-assisted saturation current density"), IOP( "jtsswd", BSIM4v5_MOD_JTSSWD, IF_REAL, "Drain STI sidewall trap-assisted saturation current density"), IOP( "jtsswgs", BSIM4v5_MOD_JTSSWGS, IF_REAL, "Source gate-edge sidewall trap-assisted saturation current density"), IOP( "jtsswgd", BSIM4v5_MOD_JTSSWGD, IF_REAL, "Drain gate-edge sidewall trap-assisted saturation current density"), IOP( "njts", BSIM4v5_MOD_NJTS, IF_REAL, "Non-ideality factor for bottom junction"), IOP( "njtssw", BSIM4v5_MOD_NJTSSW, IF_REAL, "Non-ideality factor for STI sidewall junction"), IOP( "njtsswg", BSIM4v5_MOD_NJTSSWG, IF_REAL, "Non-ideality factor for gate-edge sidewall junction"), IOP( "xtss", BSIM4v5_MOD_XTSS, IF_REAL, "Power dependence of JTSS on temperature"), IOP( "xtsd", BSIM4v5_MOD_XTSD, IF_REAL, "Power dependence of JTSD on temperature"), IOP( "xtssws", BSIM4v5_MOD_XTSSWS, IF_REAL, "Power dependence of JTSSWS on temperature"), IOP( "xtsswd", BSIM4v5_MOD_XTSSWD, IF_REAL, "Power dependence of JTSSWD on temperature"), IOP( "xtsswgs", BSIM4v5_MOD_XTSSWGS, IF_REAL, "Power dependence of JTSSWGS on temperature"), IOP( "xtsswgd", BSIM4v5_MOD_XTSSWGD, IF_REAL, "Power dependence of JTSSWGD on temperature"), IOP( "tnjts", BSIM4v5_MOD_TNJTS, IF_REAL, "Temperature coefficient for NJTS"), IOP( "tnjtssw", BSIM4v5_MOD_TNJTSSW, IF_REAL, "Temperature coefficient for NJTSSW"), IOP( "tnjtsswg", BSIM4v5_MOD_TNJTSSWG, IF_REAL, "Temperature coefficient for NJTSSWG"), IOP( "vtss", BSIM4v5_MOD_VTSS, IF_REAL, "Source bottom trap-assisted voltage dependent parameter"), IOP( "vtsd", BSIM4v5_MOD_VTSD, IF_REAL, "Drain bottom trap-assisted voltage dependent parameter"), IOP( "vtssws", BSIM4v5_MOD_VTSSWS, IF_REAL, "Source STI sidewall trap-assisted voltage dependent parameter"), IOP( "vtsswd", BSIM4v5_MOD_VTSSWD, IF_REAL, "Drain STI sidewall trap-assisted voltage dependent parameter"), IOP( "vtsswgs", BSIM4v5_MOD_VTSSWGS, IF_REAL, "Source gate-edge sidewall trap-assisted voltage dependent parameter"), IOP( "vtsswgd", BSIM4v5_MOD_VTSSWGD, IF_REAL, "Drain gate-edge sidewall trap-assisted voltage dependent parameter"), IOP( "gbmin", BSIM4v5_MOD_GBMIN, IF_REAL, "Minimum body conductance"), IOP( "rbdb", BSIM4v5_MOD_RBDB, IF_REAL, "Resistance between bNode and dbNode"), IOP( "rbpb", BSIM4v5_MOD_RBPB, IF_REAL, "Resistance between bNodePrime and bNode"), IOP( "rbsb", BSIM4v5_MOD_RBSB, IF_REAL, "Resistance between bNode and sbNode"), IOP( "rbps", BSIM4v5_MOD_RBPS, IF_REAL, "Resistance between bNodePrime and sbNode"), IOP( "rbpd", BSIM4v5_MOD_RBPD, IF_REAL, "Resistance between bNodePrime and bNode"), IOP( "rbps0", BSIM4v5_MOD_RBPS0, IF_REAL , "Body resistance RBPS scaling"), IOP( "rbpsl", BSIM4v5_MOD_RBPSL, IF_REAL , "Body resistance RBPS L scaling"), IOP( "rbpsw", BSIM4v5_MOD_RBPSW, IF_REAL , "Body resistance RBPS W scaling"), IOP( "rbpsnf", BSIM4v5_MOD_RBPSNF, IF_REAL , "Body resistance RBPS NF scaling"), IOP( "rbpd0", BSIM4v5_MOD_RBPD0, IF_REAL , "Body resistance RBPD scaling"), IOP( "rbpdl", BSIM4v5_MOD_RBPDL, IF_REAL , "Body resistance RBPD L scaling"), IOP( "rbpdw", BSIM4v5_MOD_RBPDW, IF_REAL , "Body resistance RBPD W scaling"), IOP( "rbpdnf", BSIM4v5_MOD_RBPDNF, IF_REAL , "Body resistance RBPD NF scaling"), IOP( "rbpbx0", BSIM4v5_MOD_RBPBX0, IF_REAL , "Body resistance RBPBX scaling"), IOP( "rbpbxl", BSIM4v5_MOD_RBPBXL, IF_REAL , "Body resistance RBPBX L scaling"), IOP( "rbpbxw", BSIM4v5_MOD_RBPBXW, IF_REAL , "Body resistance RBPBX W scaling"), IOP( "rbpbxnf", BSIM4v5_MOD_RBPBXNF, IF_REAL , "Body resistance RBPBX NF scaling"), IOP( "rbpby0", BSIM4v5_MOD_RBPBY0, IF_REAL , "Body resistance RBPBY scaling"), IOP( "rbpbyl", BSIM4v5_MOD_RBPBYL, IF_REAL , "Body resistance RBPBY L scaling"), IOP( "rbpbyw", BSIM4v5_MOD_RBPBYW, IF_REAL , "Body resistance RBPBY W scaling"), IOP( "rbpbynf", BSIM4v5_MOD_RBPBYNF, IF_REAL , "Body resistance RBPBY NF scaling"), IOP( "rbsbx0", BSIM4v5_MOD_RBSBX0, IF_REAL , "Body resistance RBSBX scaling"), IOP( "rbsby0", BSIM4v5_MOD_RBSBY0, IF_REAL , "Body resistance RBSBY scaling"), IOP( "rbdbx0", BSIM4v5_MOD_RBDBX0, IF_REAL , "Body resistance RBDBX scaling"), IOP( "rbdby0", BSIM4v5_MOD_RBDBY0, IF_REAL , "Body resistance RBDBY scaling"), IOP( "rbsdbxl", BSIM4v5_MOD_RBSDBXL, IF_REAL , "Body resistance RBSDBX L scaling"), IOP( "rbsdbxw", BSIM4v5_MOD_RBSDBXW, IF_REAL , "Body resistance RBSDBX W scaling"), IOP( "rbsdbxnf", BSIM4v5_MOD_RBSDBXNF, IF_REAL , "Body resistance RBSDBX NF scaling"), IOP( "rbsdbyl", BSIM4v5_MOD_RBSDBYL, IF_REAL , "Body resistance RBSDBY L scaling"), IOP( "rbsdbyw", BSIM4v5_MOD_RBSDBYW, IF_REAL , "Body resistance RBSDBY W scaling"), IOP( "rbsdbynf", BSIM4v5_MOD_RBSDBYNF, IF_REAL , "Body resistance RBSDBY NF scaling"), IOP( "lcdsc", BSIM4v5_MOD_LCDSC, IF_REAL, "Length dependence of cdsc"), IOP( "lcdscb", BSIM4v5_MOD_LCDSCB, IF_REAL, "Length dependence of cdscb"), IOP( "lcdscd", BSIM4v5_MOD_LCDSCD, IF_REAL, "Length dependence of cdscd"), IOP( "lcit", BSIM4v5_MOD_LCIT, IF_REAL, "Length dependence of cit"), IOP( "lnfactor", BSIM4v5_MOD_LNFACTOR, IF_REAL, "Length dependence of nfactor"), IOP( "lxj", BSIM4v5_MOD_LXJ, IF_REAL, "Length dependence of xj"), IOP( "lvsat", BSIM4v5_MOD_LVSAT, IF_REAL, "Length dependence of vsat"), IOP( "lat", BSIM4v5_MOD_LAT, IF_REAL, "Length dependence of at"), IOP( "la0", BSIM4v5_MOD_LA0, IF_REAL, "Length dependence of a0"), IOP( "lags", BSIM4v5_MOD_LAGS, IF_REAL, "Length dependence of ags"), IOP( "la1", BSIM4v5_MOD_LA1, IF_REAL, "Length dependence of a1"), IOP( "la2", BSIM4v5_MOD_LA2, IF_REAL, "Length dependence of a2"), IOP( "lketa", BSIM4v5_MOD_LKETA, IF_REAL, "Length dependence of keta"), IOP( "lnsub", BSIM4v5_MOD_LNSUB, IF_REAL, "Length dependence of nsub"), IOP( "lndep", BSIM4v5_MOD_LNDEP, IF_REAL, "Length dependence of ndep"), IOP( "lnsd", BSIM4v5_MOD_LNSD, IF_REAL, "Length dependence of nsd"), IOP( "lphin", BSIM4v5_MOD_LPHIN, IF_REAL, "Length dependence of phin"), IOP( "lngate", BSIM4v5_MOD_LNGATE, IF_REAL, "Length dependence of ngate"), IOP( "lgamma1", BSIM4v5_MOD_LGAMMA1, IF_REAL, "Length dependence of gamma1"), IOP( "lgamma2", BSIM4v5_MOD_LGAMMA2, IF_REAL, "Length dependence of gamma2"), IOP( "lvbx", BSIM4v5_MOD_LVBX, IF_REAL, "Length dependence of vbx"), IOP( "lvbm", BSIM4v5_MOD_LVBM, IF_REAL, "Length dependence of vbm"), IOP( "lxt", BSIM4v5_MOD_LXT, IF_REAL, "Length dependence of xt"), IOP( "lk1", BSIM4v5_MOD_LK1, IF_REAL, "Length dependence of k1"), IOP( "lkt1", BSIM4v5_MOD_LKT1, IF_REAL, "Length dependence of kt1"), IOP( "lkt1l", BSIM4v5_MOD_LKT1L, IF_REAL, "Length dependence of kt1l"), IOP( "lkt2", BSIM4v5_MOD_LKT2, IF_REAL, "Length dependence of kt2"), IOP( "lk2", BSIM4v5_MOD_LK2, IF_REAL, "Length dependence of k2"), IOP( "lk3", BSIM4v5_MOD_LK3, IF_REAL, "Length dependence of k3"), IOP( "lk3b", BSIM4v5_MOD_LK3B, IF_REAL, "Length dependence of k3b"), IOP( "lw0", BSIM4v5_MOD_LW0, IF_REAL, "Length dependence of w0"), IOP( "ldvtp0", BSIM4v5_MOD_LDVTP0, IF_REAL, "Length dependence of dvtp0"), IOP( "ldvtp1", BSIM4v5_MOD_LDVTP1, IF_REAL, "Length dependence of dvtp1"), IOP( "llpe0", BSIM4v5_MOD_LLPE0, IF_REAL, "Length dependence of lpe0"), IOP( "llpeb", BSIM4v5_MOD_LLPEB, IF_REAL, "Length dependence of lpeb"), IOP( "ldvt0", BSIM4v5_MOD_LDVT0, IF_REAL, "Length dependence of dvt0"), IOP( "ldvt1", BSIM4v5_MOD_LDVT1, IF_REAL, "Length dependence of dvt1"), IOP( "ldvt2", BSIM4v5_MOD_LDVT2, IF_REAL, "Length dependence of dvt2"), IOP( "ldvt0w", BSIM4v5_MOD_LDVT0W, IF_REAL, "Length dependence of dvt0w"), IOP( "ldvt1w", BSIM4v5_MOD_LDVT1W, IF_REAL, "Length dependence of dvt1w"), IOP( "ldvt2w", BSIM4v5_MOD_LDVT2W, IF_REAL, "Length dependence of dvt2w"), IOP( "ldrout", BSIM4v5_MOD_LDROUT, IF_REAL, "Length dependence of drout"), IOP( "ldsub", BSIM4v5_MOD_LDSUB, IF_REAL, "Length dependence of dsub"), IOP( "lvth0", BSIM4v5_MOD_LVTH0, IF_REAL,"Length dependence of vth0"), IOPR("lvtho", BSIM4v5_MOD_LVTH0, IF_REAL,"Length dependence of vtho"), IOP( "lua", BSIM4v5_MOD_LUA, IF_REAL, "Length dependence of ua"), IOP( "lua1", BSIM4v5_MOD_LUA1, IF_REAL, "Length dependence of ua1"), IOP( "lub", BSIM4v5_MOD_LUB, IF_REAL, "Length dependence of ub"), IOP( "lub1", BSIM4v5_MOD_LUB1, IF_REAL, "Length dependence of ub1"), IOP( "luc", BSIM4v5_MOD_LUC, IF_REAL, "Length dependence of uc"), IOP( "luc1", BSIM4v5_MOD_LUC1, IF_REAL, "Length dependence of uc1"), IOP( "lud", BSIM4v5_MOD_LUD, IF_REAL, "Length dependence of ud"), IOP( "lud1", BSIM4v5_MOD_LUD1, IF_REAL, "Length dependence of ud1"), IOP( "lup", BSIM4v5_MOD_LUP, IF_REAL, "Length dependence of up"), IOP( "llp", BSIM4v5_MOD_LLP, IF_REAL, "Length dependence of lp"), IOP( "lu0", BSIM4v5_MOD_LU0, IF_REAL, "Length dependence of u0"), IOP( "lute", BSIM4v5_MOD_LUTE, IF_REAL, "Length dependence of ute"), IOP( "lvoff", BSIM4v5_MOD_LVOFF, IF_REAL, "Length dependence of voff"), IOP( "lminv", BSIM4v5_MOD_LMINV, IF_REAL, "Length dependence of minv"), IOP( "ldelta", BSIM4v5_MOD_LDELTA, IF_REAL, "Length dependence of delta"), IOP( "lrdsw", BSIM4v5_MOD_LRDSW, IF_REAL, "Length dependence of rdsw "), IOP( "lrsw", BSIM4v5_MOD_LRSW, IF_REAL, "Length dependence of rsw"), IOP( "lrdw", BSIM4v5_MOD_LRDW, IF_REAL, "Length dependence of rdw"), IOP( "lprwg", BSIM4v5_MOD_LPRWG, IF_REAL, "Length dependence of prwg "), IOP( "lprwb", BSIM4v5_MOD_LPRWB, IF_REAL, "Length dependence of prwb "), IOP( "lprt", BSIM4v5_MOD_LPRT, IF_REAL, "Length dependence of prt "), IOP( "leta0", BSIM4v5_MOD_LETA0, IF_REAL, "Length dependence of eta0"), IOP( "letab", BSIM4v5_MOD_LETAB, IF_REAL, "Length dependence of etab"), IOP( "lpclm", BSIM4v5_MOD_LPCLM, IF_REAL, "Length dependence of pclm"), IOP( "lpdiblc1", BSIM4v5_MOD_LPDIBL1, IF_REAL, "Length dependence of pdiblc1"), IOP( "lpdiblc2", BSIM4v5_MOD_LPDIBL2, IF_REAL, "Length dependence of pdiblc2"), IOP( "lpdiblcb", BSIM4v5_MOD_LPDIBLB, IF_REAL, "Length dependence of pdiblcb"), IOP( "lfprout", BSIM4v5_MOD_LFPROUT, IF_REAL, "Length dependence of pdiblcb"), IOP( "lpdits", BSIM4v5_MOD_LPDITS, IF_REAL, "Length dependence of pdits"), IOP( "lpditsd", BSIM4v5_MOD_LPDITSD, IF_REAL, "Length dependence of pditsd"), IOP( "lpscbe1", BSIM4v5_MOD_LPSCBE1, IF_REAL, "Length dependence of pscbe1"), IOP( "lpscbe2", BSIM4v5_MOD_LPSCBE2, IF_REAL, "Length dependence of pscbe2"), IOP( "lpvag", BSIM4v5_MOD_LPVAG, IF_REAL, "Length dependence of pvag"), IOP( "lwr", BSIM4v5_MOD_LWR, IF_REAL, "Length dependence of wr"), IOP( "ldwg", BSIM4v5_MOD_LDWG, IF_REAL, "Length dependence of dwg"), IOP( "ldwb", BSIM4v5_MOD_LDWB, IF_REAL, "Length dependence of dwb"), IOP( "lb0", BSIM4v5_MOD_LB0, IF_REAL, "Length dependence of b0"), IOP( "lb1", BSIM4v5_MOD_LB1, IF_REAL, "Length dependence of b1"), IOP( "lcgsl", BSIM4v5_MOD_LCGSL, IF_REAL, "Length dependence of cgsl"), IOP( "lcgdl", BSIM4v5_MOD_LCGDL, IF_REAL, "Length dependence of cgdl"), IOP( "lckappas", BSIM4v5_MOD_LCKAPPAS, IF_REAL, "Length dependence of ckappas"), IOP( "lckappad", BSIM4v5_MOD_LCKAPPAD, IF_REAL, "Length dependence of ckappad"), IOP( "lcf", BSIM4v5_MOD_LCF, IF_REAL, "Length dependence of cf"), IOP( "lclc", BSIM4v5_MOD_LCLC, IF_REAL, "Length dependence of clc"), IOP( "lcle", BSIM4v5_MOD_LCLE, IF_REAL, "Length dependence of cle"), IOP( "lalpha0", BSIM4v5_MOD_LALPHA0, IF_REAL, "Length dependence of alpha0"), IOP( "lalpha1", BSIM4v5_MOD_LALPHA1, IF_REAL, "Length dependence of alpha1"), IOP( "lbeta0", BSIM4v5_MOD_LBETA0, IF_REAL, "Length dependence of beta0"), IOP( "lagidl", BSIM4v5_MOD_LAGIDL, IF_REAL, "Length dependence of agidl"), IOP( "lbgidl", BSIM4v5_MOD_LBGIDL, IF_REAL, "Length dependence of bgidl"), IOP( "lcgidl", BSIM4v5_MOD_LCGIDL, IF_REAL, "Length dependence of cgidl"), IOP( "legidl", BSIM4v5_MOD_LEGIDL, IF_REAL, "Length dependence of egidl"), IOP( "laigc", BSIM4v5_MOD_LAIGC, IF_REAL, "Length dependence of aigc"), IOP( "lbigc", BSIM4v5_MOD_LBIGC, IF_REAL, "Length dependence of bigc"), IOP( "lcigc", BSIM4v5_MOD_LCIGC, IF_REAL, "Length dependence of cigc"), IOP( "laigsd", BSIM4v5_MOD_LAIGSD, IF_REAL, "Length dependence of aigsd"), IOP( "lbigsd", BSIM4v5_MOD_LBIGSD, IF_REAL, "Length dependence of bigsd"), IOP( "lcigsd", BSIM4v5_MOD_LCIGSD, IF_REAL, "Length dependence of cigsd"), IOP( "laigbacc", BSIM4v5_MOD_LAIGBACC, IF_REAL, "Length dependence of aigbacc"), IOP( "lbigbacc", BSIM4v5_MOD_LBIGBACC, IF_REAL, "Length dependence of bigbacc"), IOP( "lcigbacc", BSIM4v5_MOD_LCIGBACC, IF_REAL, "Length dependence of cigbacc"), IOP( "laigbinv", BSIM4v5_MOD_LAIGBINV, IF_REAL, "Length dependence of aigbinv"), IOP( "lbigbinv", BSIM4v5_MOD_LBIGBINV, IF_REAL, "Length dependence of bigbinv"), IOP( "lcigbinv", BSIM4v5_MOD_LCIGBINV, IF_REAL, "Length dependence of cigbinv"), IOP( "lnigc", BSIM4v5_MOD_LNIGC, IF_REAL, "Length dependence of nigc"), IOP( "lnigbinv", BSIM4v5_MOD_LNIGBINV, IF_REAL, "Length dependence of nigbinv"), IOP( "lnigbacc", BSIM4v5_MOD_LNIGBACC, IF_REAL, "Length dependence of nigbacc"), IOP( "lntox", BSIM4v5_MOD_LNTOX, IF_REAL, "Length dependence of ntox"), IOP( "leigbinv", BSIM4v5_MOD_LEIGBINV, IF_REAL, "Length dependence for eigbinv"), IOP( "lpigcd", BSIM4v5_MOD_LPIGCD, IF_REAL, "Length dependence for pigcd"), IOP( "lpoxedge", BSIM4v5_MOD_LPOXEDGE, IF_REAL, "Length dependence for poxedge"), IOP( "lvfbcv", BSIM4v5_MOD_LVFBCV, IF_REAL, "Length dependence of vfbcv"), IOP( "lvfb", BSIM4v5_MOD_LVFB, IF_REAL, "Length dependence of vfb"), IOP( "lacde", BSIM4v5_MOD_LACDE, IF_REAL, "Length dependence of acde"), IOP( "lmoin", BSIM4v5_MOD_LMOIN, IF_REAL, "Length dependence of moin"), IOP( "lnoff", BSIM4v5_MOD_LNOFF, IF_REAL, "Length dependence of noff"), IOP( "lvoffcv", BSIM4v5_MOD_LVOFFCV, IF_REAL, "Length dependence of voffcv"), IOP( "lxrcrg1", BSIM4v5_MOD_LXRCRG1, IF_REAL, "Length dependence of xrcrg1"), IOP( "lxrcrg2", BSIM4v5_MOD_LXRCRG2, IF_REAL, "Length dependence of xrcrg2"), IOP( "llambda", BSIM4v5_MOD_LLAMBDA, IF_REAL, "Length dependence of lambda"), IOP( "lvtl", BSIM4v5_MOD_LVTL, IF_REAL, " Length dependence of vtl"), IOP( "lxn", BSIM4v5_MOD_LXN, IF_REAL, " Length dependence of xn"), IOP( "leu", BSIM4v5_MOD_LEU, IF_REAL, " Length dependence of eu"), IOP( "lvfbsdoff", BSIM4v5_MOD_LVFBSDOFF, IF_REAL, "Length dependence of vfbsdoff"), IOP( "ltvfbsdoff", BSIM4v5_MOD_LTVFBSDOFF, IF_REAL, "Length dependence of tvfbsdoff"), IOP( "ltvoff", BSIM4v5_MOD_LTVOFF, IF_REAL, "Length dependence of tvoff"), IOP( "wcdsc", BSIM4v5_MOD_WCDSC, IF_REAL, "Width dependence of cdsc"), IOP( "wcdscb", BSIM4v5_MOD_WCDSCB, IF_REAL, "Width dependence of cdscb"), IOP( "wcdscd", BSIM4v5_MOD_WCDSCD, IF_REAL, "Width dependence of cdscd"), IOP( "wcit", BSIM4v5_MOD_WCIT, IF_REAL, "Width dependence of cit"), IOP( "wnfactor", BSIM4v5_MOD_WNFACTOR, IF_REAL, "Width dependence of nfactor"), IOP( "wxj", BSIM4v5_MOD_WXJ, IF_REAL, "Width dependence of xj"), IOP( "wvsat", BSIM4v5_MOD_WVSAT, IF_REAL, "Width dependence of vsat"), IOP( "wat", BSIM4v5_MOD_WAT, IF_REAL, "Width dependence of at"), IOP( "wa0", BSIM4v5_MOD_WA0, IF_REAL, "Width dependence of a0"), IOP( "wags", BSIM4v5_MOD_WAGS, IF_REAL, "Width dependence of ags"), IOP( "wa1", BSIM4v5_MOD_WA1, IF_REAL, "Width dependence of a1"), IOP( "wa2", BSIM4v5_MOD_WA2, IF_REAL, "Width dependence of a2"), IOP( "wketa", BSIM4v5_MOD_WKETA, IF_REAL, "Width dependence of keta"), IOP( "wnsub", BSIM4v5_MOD_WNSUB, IF_REAL, "Width dependence of nsub"), IOP( "wndep", BSIM4v5_MOD_WNDEP, IF_REAL, "Width dependence of ndep"), IOP( "wnsd", BSIM4v5_MOD_WNSD, IF_REAL, "Width dependence of nsd"), IOP( "wphin", BSIM4v5_MOD_WPHIN, IF_REAL, "Width dependence of phin"), IOP( "wngate", BSIM4v5_MOD_WNGATE, IF_REAL, "Width dependence of ngate"), IOP( "wgamma1", BSIM4v5_MOD_WGAMMA1, IF_REAL, "Width dependence of gamma1"), IOP( "wgamma2", BSIM4v5_MOD_WGAMMA2, IF_REAL, "Width dependence of gamma2"), IOP( "wvbx", BSIM4v5_MOD_WVBX, IF_REAL, "Width dependence of vbx"), IOP( "wvbm", BSIM4v5_MOD_WVBM, IF_REAL, "Width dependence of vbm"), IOP( "wxt", BSIM4v5_MOD_WXT, IF_REAL, "Width dependence of xt"), IOP( "wk1", BSIM4v5_MOD_WK1, IF_REAL, "Width dependence of k1"), IOP( "wkt1", BSIM4v5_MOD_WKT1, IF_REAL, "Width dependence of kt1"), IOP( "wkt1l", BSIM4v5_MOD_WKT1L, IF_REAL, "Width dependence of kt1l"), IOP( "wkt2", BSIM4v5_MOD_WKT2, IF_REAL, "Width dependence of kt2"), IOP( "wk2", BSIM4v5_MOD_WK2, IF_REAL, "Width dependence of k2"), IOP( "wk3", BSIM4v5_MOD_WK3, IF_REAL, "Width dependence of k3"), IOP( "wk3b", BSIM4v5_MOD_WK3B, IF_REAL, "Width dependence of k3b"), IOP( "ww0", BSIM4v5_MOD_WW0, IF_REAL, "Width dependence of w0"), IOP( "wdvtp0", BSIM4v5_MOD_WDVTP0, IF_REAL, "Width dependence of dvtp0"), IOP( "wdvtp1", BSIM4v5_MOD_WDVTP1, IF_REAL, "Width dependence of dvtp1"), IOP( "wlpe0", BSIM4v5_MOD_WLPE0, IF_REAL, "Width dependence of lpe0"), IOP( "wlpeb", BSIM4v5_MOD_WLPEB, IF_REAL, "Width dependence of lpeb"), IOP( "wdvt0", BSIM4v5_MOD_WDVT0, IF_REAL, "Width dependence of dvt0"), IOP( "wdvt1", BSIM4v5_MOD_WDVT1, IF_REAL, "Width dependence of dvt1"), IOP( "wdvt2", BSIM4v5_MOD_WDVT2, IF_REAL, "Width dependence of dvt2"), IOP( "wdvt0w", BSIM4v5_MOD_WDVT0W, IF_REAL, "Width dependence of dvt0w"), IOP( "wdvt1w", BSIM4v5_MOD_WDVT1W, IF_REAL, "Width dependence of dvt1w"), IOP( "wdvt2w", BSIM4v5_MOD_WDVT2W, IF_REAL, "Width dependence of dvt2w"), IOP( "wdrout", BSIM4v5_MOD_WDROUT, IF_REAL, "Width dependence of drout"), IOP( "wdsub", BSIM4v5_MOD_WDSUB, IF_REAL, "Width dependence of dsub"), IOP( "wvth0", BSIM4v5_MOD_WVTH0, IF_REAL,"Width dependence of vth0"), IOPR("wvtho", BSIM4v5_MOD_WVTH0, IF_REAL,"Width dependence of vtho"), IOP( "wua", BSIM4v5_MOD_WUA, IF_REAL, "Width dependence of ua"), IOP( "wua1", BSIM4v5_MOD_WUA1, IF_REAL, "Width dependence of ua1"), IOP( "wub", BSIM4v5_MOD_WUB, IF_REAL, "Width dependence of ub"), IOP( "wub1", BSIM4v5_MOD_WUB1, IF_REAL, "Width dependence of ub1"), IOP( "wuc", BSIM4v5_MOD_WUC, IF_REAL, "Width dependence of uc"), IOP( "wuc1", BSIM4v5_MOD_WUC1, IF_REAL, "Width dependence of uc1"), IOP( "wud", BSIM4v5_MOD_WUD, IF_REAL, "Width dependence of ud"), IOP( "wud1", BSIM4v5_MOD_WUD1, IF_REAL, "Width dependence of ud1"), IOP( "wup", BSIM4v5_MOD_WUP, IF_REAL, "Width dependence of up"), IOP( "wlp", BSIM4v5_MOD_WLP, IF_REAL, "Width dependence of lp"), IOP( "wu0", BSIM4v5_MOD_WU0, IF_REAL, "Width dependence of u0"), IOP( "wute", BSIM4v5_MOD_WUTE, IF_REAL, "Width dependence of ute"), IOP( "wvoff", BSIM4v5_MOD_WVOFF, IF_REAL, "Width dependence of voff"), IOP( "wminv", BSIM4v5_MOD_WMINV, IF_REAL, "Width dependence of minv"), IOP( "wdelta", BSIM4v5_MOD_WDELTA, IF_REAL, "Width dependence of delta"), IOP( "wrdsw", BSIM4v5_MOD_WRDSW, IF_REAL, "Width dependence of rdsw "), IOP( "wrsw", BSIM4v5_MOD_WRSW, IF_REAL, "Width dependence of rsw"), IOP( "wrdw", BSIM4v5_MOD_WRDW, IF_REAL, "Width dependence of rdw"), IOP( "wprwg", BSIM4v5_MOD_WPRWG, IF_REAL, "Width dependence of prwg "), IOP( "wprwb", BSIM4v5_MOD_WPRWB, IF_REAL, "Width dependence of prwb "), IOP( "wprt", BSIM4v5_MOD_WPRT, IF_REAL, "Width dependence of prt"), IOP( "weta0", BSIM4v5_MOD_WETA0, IF_REAL, "Width dependence of eta0"), IOP( "wetab", BSIM4v5_MOD_WETAB, IF_REAL, "Width dependence of etab"), IOP( "wpclm", BSIM4v5_MOD_WPCLM, IF_REAL, "Width dependence of pclm"), IOP( "wpdiblc1", BSIM4v5_MOD_WPDIBL1, IF_REAL, "Width dependence of pdiblc1"), IOP( "wpdiblc2", BSIM4v5_MOD_WPDIBL2, IF_REAL, "Width dependence of pdiblc2"), IOP( "wpdiblcb", BSIM4v5_MOD_WPDIBLB, IF_REAL, "Width dependence of pdiblcb"), IOP( "wfprout", BSIM4v5_MOD_WFPROUT, IF_REAL, "Width dependence of pdiblcb"), IOP( "wpdits", BSIM4v5_MOD_WPDITS, IF_REAL, "Width dependence of pdits"), IOP( "wpditsd", BSIM4v5_MOD_WPDITSD, IF_REAL, "Width dependence of pditsd"), IOP( "wpscbe1", BSIM4v5_MOD_WPSCBE1, IF_REAL, "Width dependence of pscbe1"), IOP( "wpscbe2", BSIM4v5_MOD_WPSCBE2, IF_REAL, "Width dependence of pscbe2"), IOP( "wpvag", BSIM4v5_MOD_WPVAG, IF_REAL, "Width dependence of pvag"), IOP( "wwr", BSIM4v5_MOD_WWR, IF_REAL, "Width dependence of wr"), IOP( "wdwg", BSIM4v5_MOD_WDWG, IF_REAL, "Width dependence of dwg"), IOP( "wdwb", BSIM4v5_MOD_WDWB, IF_REAL, "Width dependence of dwb"), IOP( "wb0", BSIM4v5_MOD_WB0, IF_REAL, "Width dependence of b0"), IOP( "wb1", BSIM4v5_MOD_WB1, IF_REAL, "Width dependence of b1"), IOP( "wcgsl", BSIM4v5_MOD_WCGSL, IF_REAL, "Width dependence of cgsl"), IOP( "wcgdl", BSIM4v5_MOD_WCGDL, IF_REAL, "Width dependence of cgdl"), IOP( "wckappas", BSIM4v5_MOD_WCKAPPAS, IF_REAL, "Width dependence of ckappas"), IOP( "wckappad", BSIM4v5_MOD_WCKAPPAD, IF_REAL, "Width dependence of ckappad"), IOP( "wcf", BSIM4v5_MOD_WCF, IF_REAL, "Width dependence of cf"), IOP( "wclc", BSIM4v5_MOD_WCLC, IF_REAL, "Width dependence of clc"), IOP( "wcle", BSIM4v5_MOD_WCLE, IF_REAL, "Width dependence of cle"), IOP( "walpha0", BSIM4v5_MOD_WALPHA0, IF_REAL, "Width dependence of alpha0"), IOP( "walpha1", BSIM4v5_MOD_WALPHA1, IF_REAL, "Width dependence of alpha1"), IOP( "wbeta0", BSIM4v5_MOD_WBETA0, IF_REAL, "Width dependence of beta0"), IOP( "wagidl", BSIM4v5_MOD_WAGIDL, IF_REAL, "Width dependence of agidl"), IOP( "wbgidl", BSIM4v5_MOD_WBGIDL, IF_REAL, "Width dependence of bgidl"), IOP( "wcgidl", BSIM4v5_MOD_WCGIDL, IF_REAL, "Width dependence of cgidl"), IOP( "wegidl", BSIM4v5_MOD_WEGIDL, IF_REAL, "Width dependence of egidl"), IOP( "waigc", BSIM4v5_MOD_WAIGC, IF_REAL, "Width dependence of aigc"), IOP( "wbigc", BSIM4v5_MOD_WBIGC, IF_REAL, "Width dependence of bigc"), IOP( "wcigc", BSIM4v5_MOD_WCIGC, IF_REAL, "Width dependence of cigc"), IOP( "waigsd", BSIM4v5_MOD_WAIGSD, IF_REAL, "Width dependence of aigsd"), IOP( "wbigsd", BSIM4v5_MOD_WBIGSD, IF_REAL, "Width dependence of bigsd"), IOP( "wcigsd", BSIM4v5_MOD_WCIGSD, IF_REAL, "Width dependence of cigsd"), IOP( "waigbacc", BSIM4v5_MOD_WAIGBACC, IF_REAL, "Width dependence of aigbacc"), IOP( "wbigbacc", BSIM4v5_MOD_WBIGBACC, IF_REAL, "Width dependence of bigbacc"), IOP( "wcigbacc", BSIM4v5_MOD_WCIGBACC, IF_REAL, "Width dependence of cigbacc"), IOP( "waigbinv", BSIM4v5_MOD_WAIGBINV, IF_REAL, "Width dependence of aigbinv"), IOP( "wbigbinv", BSIM4v5_MOD_WBIGBINV, IF_REAL, "Width dependence of bigbinv"), IOP( "wcigbinv", BSIM4v5_MOD_WCIGBINV, IF_REAL, "Width dependence of cigbinv"), IOP( "wnigc", BSIM4v5_MOD_WNIGC, IF_REAL, "Width dependence of nigc"), IOP( "wnigbinv", BSIM4v5_MOD_WNIGBINV, IF_REAL, "Width dependence of nigbinv"), IOP( "wnigbacc", BSIM4v5_MOD_WNIGBACC, IF_REAL, "Width dependence of nigbacc"), IOP( "wntox", BSIM4v5_MOD_WNTOX, IF_REAL, "Width dependence of ntox"), IOP( "weigbinv", BSIM4v5_MOD_WEIGBINV, IF_REAL, "Width dependence for eigbinv"), IOP( "wpigcd", BSIM4v5_MOD_WPIGCD, IF_REAL, "Width dependence for pigcd"), IOP( "wpoxedge", BSIM4v5_MOD_WPOXEDGE, IF_REAL, "Width dependence for poxedge"), IOP( "wvfbcv", BSIM4v5_MOD_WVFBCV, IF_REAL, "Width dependence of vfbcv"), IOP( "wvfb", BSIM4v5_MOD_WVFB, IF_REAL, "Width dependence of vfb"), IOP( "wacde", BSIM4v5_MOD_WACDE, IF_REAL, "Width dependence of acde"), IOP( "wmoin", BSIM4v5_MOD_WMOIN, IF_REAL, "Width dependence of moin"), IOP( "wnoff", BSIM4v5_MOD_WNOFF, IF_REAL, "Width dependence of noff"), IOP( "wvoffcv", BSIM4v5_MOD_WVOFFCV, IF_REAL, "Width dependence of voffcv"), IOP( "wxrcrg1", BSIM4v5_MOD_WXRCRG1, IF_REAL, "Width dependence of xrcrg1"), IOP( "wxrcrg2", BSIM4v5_MOD_WXRCRG2, IF_REAL, "Width dependence of xrcrg2"), IOP( "wlambda", BSIM4v5_MOD_WLAMBDA, IF_REAL, "Width dependence of lambda"), IOP( "wvtl", BSIM4v5_MOD_WVTL, IF_REAL, "Width dependence of vtl"), IOP( "wxn", BSIM4v5_MOD_WXN, IF_REAL, "Width dependence of xn"), IOP( "weu", BSIM4v5_MOD_WEU, IF_REAL, "Width dependence of eu"), IOP( "wvfbsdoff", BSIM4v5_MOD_WVFBSDOFF, IF_REAL, "Width dependence of vfbsdoff"), IOP( "wtvfbsdoff", BSIM4v5_MOD_WTVFBSDOFF, IF_REAL, "Width dependence of tvfbsdoff"), IOP( "wtvoff", BSIM4v5_MOD_WTVOFF, IF_REAL, "Width dependence of tvoff"), IOP( "pcdsc", BSIM4v5_MOD_PCDSC, IF_REAL, "Cross-term dependence of cdsc"), IOP( "pcdscb", BSIM4v5_MOD_PCDSCB, IF_REAL, "Cross-term dependence of cdscb"), IOP( "pcdscd", BSIM4v5_MOD_PCDSCD, IF_REAL, "Cross-term dependence of cdscd"), IOP( "pcit", BSIM4v5_MOD_PCIT, IF_REAL, "Cross-term dependence of cit"), IOP( "pnfactor", BSIM4v5_MOD_PNFACTOR, IF_REAL, "Cross-term dependence of nfactor"), IOP( "pxj", BSIM4v5_MOD_PXJ, IF_REAL, "Cross-term dependence of xj"), IOP( "pvsat", BSIM4v5_MOD_PVSAT, IF_REAL, "Cross-term dependence of vsat"), IOP( "pat", BSIM4v5_MOD_PAT, IF_REAL, "Cross-term dependence of at"), IOP( "pa0", BSIM4v5_MOD_PA0, IF_REAL, "Cross-term dependence of a0"), IOP( "pags", BSIM4v5_MOD_PAGS, IF_REAL, "Cross-term dependence of ags"), IOP( "pa1", BSIM4v5_MOD_PA1, IF_REAL, "Cross-term dependence of a1"), IOP( "pa2", BSIM4v5_MOD_PA2, IF_REAL, "Cross-term dependence of a2"), IOP( "pketa", BSIM4v5_MOD_PKETA, IF_REAL, "Cross-term dependence of keta"), IOP( "pnsub", BSIM4v5_MOD_PNSUB, IF_REAL, "Cross-term dependence of nsub"), IOP( "pndep", BSIM4v5_MOD_PNDEP, IF_REAL, "Cross-term dependence of ndep"), IOP( "pnsd", BSIM4v5_MOD_PNSD, IF_REAL, "Cross-term dependence of nsd"), IOP( "pphin", BSIM4v5_MOD_PPHIN, IF_REAL, "Cross-term dependence of phin"), IOP( "pngate", BSIM4v5_MOD_PNGATE, IF_REAL, "Cross-term dependence of ngate"), IOP( "pgamma1", BSIM4v5_MOD_PGAMMA1, IF_REAL, "Cross-term dependence of gamma1"), IOP( "pgamma2", BSIM4v5_MOD_PGAMMA2, IF_REAL, "Cross-term dependence of gamma2"), IOP( "pvbx", BSIM4v5_MOD_PVBX, IF_REAL, "Cross-term dependence of vbx"), IOP( "pvbm", BSIM4v5_MOD_PVBM, IF_REAL, "Cross-term dependence of vbm"), IOP( "pxt", BSIM4v5_MOD_PXT, IF_REAL, "Cross-term dependence of xt"), IOP( "pk1", BSIM4v5_MOD_PK1, IF_REAL, "Cross-term dependence of k1"), IOP( "pkt1", BSIM4v5_MOD_PKT1, IF_REAL, "Cross-term dependence of kt1"), IOP( "pkt1l", BSIM4v5_MOD_PKT1L, IF_REAL, "Cross-term dependence of kt1l"), IOP( "pkt2", BSIM4v5_MOD_PKT2, IF_REAL, "Cross-term dependence of kt2"), IOP( "pk2", BSIM4v5_MOD_PK2, IF_REAL, "Cross-term dependence of k2"), IOP( "pk3", BSIM4v5_MOD_PK3, IF_REAL, "Cross-term dependence of k3"), IOP( "pk3b", BSIM4v5_MOD_PK3B, IF_REAL, "Cross-term dependence of k3b"), IOP( "pw0", BSIM4v5_MOD_PW0, IF_REAL, "Cross-term dependence of w0"), IOP( "pdvtp0", BSIM4v5_MOD_PDVTP0, IF_REAL, "Cross-term dependence of dvtp0"), IOP( "pdvtp1", BSIM4v5_MOD_PDVTP1, IF_REAL, "Cross-term dependence of dvtp1"), IOP( "plpe0", BSIM4v5_MOD_PLPE0, IF_REAL, "Cross-term dependence of lpe0"), IOP( "plpeb", BSIM4v5_MOD_PLPEB, IF_REAL, "Cross-term dependence of lpeb"), IOP( "pdvt0", BSIM4v5_MOD_PDVT0, IF_REAL, "Cross-term dependence of dvt0"), IOP( "pdvt1", BSIM4v5_MOD_PDVT1, IF_REAL, "Cross-term dependence of dvt1"), IOP( "pdvt2", BSIM4v5_MOD_PDVT2, IF_REAL, "Cross-term dependence of dvt2"), IOP( "pdvt0w", BSIM4v5_MOD_PDVT0W, IF_REAL, "Cross-term dependence of dvt0w"), IOP( "pdvt1w", BSIM4v5_MOD_PDVT1W, IF_REAL, "Cross-term dependence of dvt1w"), IOP( "pdvt2w", BSIM4v5_MOD_PDVT2W, IF_REAL, "Cross-term dependence of dvt2w"), IOP( "pdrout", BSIM4v5_MOD_PDROUT, IF_REAL, "Cross-term dependence of drout"), IOP( "pdsub", BSIM4v5_MOD_PDSUB, IF_REAL, "Cross-term dependence of dsub"), IOP( "pvth0", BSIM4v5_MOD_PVTH0, IF_REAL,"Cross-term dependence of vth0"), IOPR("pvtho", BSIM4v5_MOD_PVTH0, IF_REAL,"Cross-term dependence of vtho"), IOP( "pua", BSIM4v5_MOD_PUA, IF_REAL, "Cross-term dependence of ua"), IOP( "pua1", BSIM4v5_MOD_PUA1, IF_REAL, "Cross-term dependence of ua1"), IOP( "pub", BSIM4v5_MOD_PUB, IF_REAL, "Cross-term dependence of ub"), IOP( "pub1", BSIM4v5_MOD_PUB1, IF_REAL, "Cross-term dependence of ub1"), IOP( "puc", BSIM4v5_MOD_PUC, IF_REAL, "Cross-term dependence of uc"), IOP( "puc1", BSIM4v5_MOD_PUC1, IF_REAL, "Cross-term dependence of uc1"), IOP( "pud", BSIM4v5_MOD_PUD, IF_REAL, "Cross-term dependence of ud"), IOP( "pud1", BSIM4v5_MOD_PUD1, IF_REAL, "Cross-term dependence of ud1"), IOP( "pup", BSIM4v5_MOD_PUP, IF_REAL, "Cross-term dependence of up"), IOP( "plp", BSIM4v5_MOD_PLP, IF_REAL, "Cross-term dependence of lp"), IOP( "pu0", BSIM4v5_MOD_PU0, IF_REAL, "Cross-term dependence of u0"), IOP( "pute", BSIM4v5_MOD_PUTE, IF_REAL, "Cross-term dependence of ute"), IOP( "pvoff", BSIM4v5_MOD_PVOFF, IF_REAL, "Cross-term dependence of voff"), IOP( "pminv", BSIM4v5_MOD_PMINV, IF_REAL, "Cross-term dependence of minv"), IOP( "pdelta", BSIM4v5_MOD_PDELTA, IF_REAL, "Cross-term dependence of delta"), IOP( "prdsw", BSIM4v5_MOD_PRDSW, IF_REAL, "Cross-term dependence of rdsw "), IOP( "prsw", BSIM4v5_MOD_PRSW, IF_REAL, "Cross-term dependence of rsw"), IOP( "prdw", BSIM4v5_MOD_PRDW, IF_REAL, "Cross-term dependence of rdw"), IOP( "pprwg", BSIM4v5_MOD_PPRWG, IF_REAL, "Cross-term dependence of prwg "), IOP( "pprwb", BSIM4v5_MOD_PPRWB, IF_REAL, "Cross-term dependence of prwb "), IOP( "pprt", BSIM4v5_MOD_PPRT, IF_REAL, "Cross-term dependence of prt "), IOP( "peta0", BSIM4v5_MOD_PETA0, IF_REAL, "Cross-term dependence of eta0"), IOP( "petab", BSIM4v5_MOD_PETAB, IF_REAL, "Cross-term dependence of etab"), IOP( "ppclm", BSIM4v5_MOD_PPCLM, IF_REAL, "Cross-term dependence of pclm"), IOP( "ppdiblc1", BSIM4v5_MOD_PPDIBL1, IF_REAL, "Cross-term dependence of pdiblc1"), IOP( "ppdiblc2", BSIM4v5_MOD_PPDIBL2, IF_REAL, "Cross-term dependence of pdiblc2"), IOP( "ppdiblcb", BSIM4v5_MOD_PPDIBLB, IF_REAL, "Cross-term dependence of pdiblcb"), IOP( "pfprout", BSIM4v5_MOD_PFPROUT, IF_REAL, "Cross-term dependence of pdiblcb"), IOP( "ppdits", BSIM4v5_MOD_PPDITS, IF_REAL, "Cross-term dependence of pdits"), IOP( "ppditsd", BSIM4v5_MOD_PPDITSD, IF_REAL, "Cross-term dependence of pditsd"), IOP( "ppscbe1", BSIM4v5_MOD_PPSCBE1, IF_REAL, "Cross-term dependence of pscbe1"), IOP( "ppscbe2", BSIM4v5_MOD_PPSCBE2, IF_REAL, "Cross-term dependence of pscbe2"), IOP( "ppvag", BSIM4v5_MOD_PPVAG, IF_REAL, "Cross-term dependence of pvag"), IOP( "pwr", BSIM4v5_MOD_PWR, IF_REAL, "Cross-term dependence of wr"), IOP( "pdwg", BSIM4v5_MOD_PDWG, IF_REAL, "Cross-term dependence of dwg"), IOP( "pdwb", BSIM4v5_MOD_PDWB, IF_REAL, "Cross-term dependence of dwb"), IOP( "pb0", BSIM4v5_MOD_PB0, IF_REAL, "Cross-term dependence of b0"), IOP( "pb1", BSIM4v5_MOD_PB1, IF_REAL, "Cross-term dependence of b1"), IOP( "pcgsl", BSIM4v5_MOD_PCGSL, IF_REAL, "Cross-term dependence of cgsl"), IOP( "pcgdl", BSIM4v5_MOD_PCGDL, IF_REAL, "Cross-term dependence of cgdl"), IOP( "pckappas", BSIM4v5_MOD_PCKAPPAS, IF_REAL, "Cross-term dependence of ckappas"), IOP( "pckappad", BSIM4v5_MOD_PCKAPPAD, IF_REAL, "Cross-term dependence of ckappad"), IOP( "pcf", BSIM4v5_MOD_PCF, IF_REAL, "Cross-term dependence of cf"), IOP( "pclc", BSIM4v5_MOD_PCLC, IF_REAL, "Cross-term dependence of clc"), IOP( "pcle", BSIM4v5_MOD_PCLE, IF_REAL, "Cross-term dependence of cle"), IOP( "palpha0", BSIM4v5_MOD_PALPHA0, IF_REAL, "Cross-term dependence of alpha0"), IOP( "palpha1", BSIM4v5_MOD_PALPHA1, IF_REAL, "Cross-term dependence of alpha1"), IOP( "pbeta0", BSIM4v5_MOD_PBETA0, IF_REAL, "Cross-term dependence of beta0"), IOP( "pagidl", BSIM4v5_MOD_PAGIDL, IF_REAL, "Cross-term dependence of agidl"), IOP( "pbgidl", BSIM4v5_MOD_PBGIDL, IF_REAL, "Cross-term dependence of bgidl"), IOP( "pcgidl", BSIM4v5_MOD_PCGIDL, IF_REAL, "Cross-term dependence of cgidl"), IOP( "pegidl", BSIM4v5_MOD_PEGIDL, IF_REAL, "Cross-term dependence of egidl"), IOP( "paigc", BSIM4v5_MOD_PAIGC, IF_REAL, "Cross-term dependence of aigc"), IOP( "pbigc", BSIM4v5_MOD_PBIGC, IF_REAL, "Cross-term dependence of bigc"), IOP( "pcigc", BSIM4v5_MOD_PCIGC, IF_REAL, "Cross-term dependence of cigc"), IOP( "paigsd", BSIM4v5_MOD_PAIGSD, IF_REAL, "Cross-term dependence of aigsd"), IOP( "pbigsd", BSIM4v5_MOD_PBIGSD, IF_REAL, "Cross-term dependence of bigsd"), IOP( "pcigsd", BSIM4v5_MOD_PCIGSD, IF_REAL, "Cross-term dependence of cigsd"), IOP( "paigbacc", BSIM4v5_MOD_PAIGBACC, IF_REAL, "Cross-term dependence of aigbacc"), IOP( "pbigbacc", BSIM4v5_MOD_PBIGBACC, IF_REAL, "Cross-term dependence of bigbacc"), IOP( "pcigbacc", BSIM4v5_MOD_PCIGBACC, IF_REAL, "Cross-term dependence of cigbacc"), IOP( "paigbinv", BSIM4v5_MOD_PAIGBINV, IF_REAL, "Cross-term dependence of aigbinv"), IOP( "pbigbinv", BSIM4v5_MOD_PBIGBINV, IF_REAL, "Cross-term dependence of bigbinv"), IOP( "pcigbinv", BSIM4v5_MOD_PCIGBINV, IF_REAL, "Cross-term dependence of cigbinv"), IOP( "pnigc", BSIM4v5_MOD_PNIGC, IF_REAL, "Cross-term dependence of nigc"), IOP( "pnigbinv", BSIM4v5_MOD_PNIGBINV, IF_REAL, "Cross-term dependence of nigbinv"), IOP( "pnigbacc", BSIM4v5_MOD_PNIGBACC, IF_REAL, "Cross-term dependence of nigbacc"), IOP( "pntox", BSIM4v5_MOD_PNTOX, IF_REAL, "Cross-term dependence of ntox"), IOP( "peigbinv", BSIM4v5_MOD_PEIGBINV, IF_REAL, "Cross-term dependence for eigbinv"), IOP( "ppigcd", BSIM4v5_MOD_PPIGCD, IF_REAL, "Cross-term dependence for pigcd"), IOP( "ppoxedge", BSIM4v5_MOD_PPOXEDGE, IF_REAL, "Cross-term dependence for poxedge"), IOP( "pvfbcv", BSIM4v5_MOD_PVFBCV, IF_REAL, "Cross-term dependence of vfbcv"), IOP( "pvfb", BSIM4v5_MOD_PVFB, IF_REAL, "Cross-term dependence of vfb"), IOP( "pacde", BSIM4v5_MOD_PACDE, IF_REAL, "Cross-term dependence of acde"), IOP( "pmoin", BSIM4v5_MOD_PMOIN, IF_REAL, "Cross-term dependence of moin"), IOP( "pnoff", BSIM4v5_MOD_PNOFF, IF_REAL, "Cross-term dependence of noff"), IOP( "pvoffcv", BSIM4v5_MOD_PVOFFCV, IF_REAL, "Cross-term dependence of voffcv"), IOP( "pxrcrg1", BSIM4v5_MOD_PXRCRG1, IF_REAL, "Cross-term dependence of xrcrg1"), IOP( "pxrcrg2", BSIM4v5_MOD_PXRCRG2, IF_REAL, "Cross-term dependence of xrcrg2"), IOP( "plambda", BSIM4v5_MOD_PLAMBDA, IF_REAL, "Cross-term dependence of lambda"), IOP( "pvtl", BSIM4v5_MOD_PVTL, IF_REAL, "Cross-term dependence of vtl"), IOP( "pxn", BSIM4v5_MOD_PXN, IF_REAL, "Cross-term dependence of xn"), IOP( "peu", BSIM4v5_MOD_PEU, IF_REAL, "Cross-term dependence of eu"), IOP( "pvfbsdoff", BSIM4v5_MOD_PVFBSDOFF, IF_REAL, "Cross-term dependence of vfbsdoff"), IOP( "ptvfbsdoff", BSIM4v5_MOD_PTVFBSDOFF, IF_REAL, "Cross-term dependence of tvfbsdoff"), IOP( "ptvoff", BSIM4v5_MOD_PTVOFF, IF_REAL, "Cross-term dependence of tvoff"), /* stress effect*/ IOP( "saref", BSIM4v5_MOD_SAREF, IF_REAL, "Reference distance between OD edge to poly of one side"), IOP( "sbref", BSIM4v5_MOD_SBREF, IF_REAL, "Reference distance between OD edge to poly of the other side"), IOP( "wlod", BSIM4v5_MOD_WLOD, IF_REAL, "Width parameter for stress effect"), IOP( "ku0", BSIM4v5_MOD_KU0, IF_REAL, "Mobility degradation/enhancement coefficient for LOD"), IOP( "kvsat", BSIM4v5_MOD_KVSAT, IF_REAL, "Saturation velocity degradation/enhancement parameter for LOD"), IOP( "kvth0", BSIM4v5_MOD_KVTH0, IF_REAL, "Threshold degradation/enhancement parameter for LOD"), IOP( "tku0", BSIM4v5_MOD_TKU0, IF_REAL, "Temperature coefficient of KU0"), IOP( "llodku0", BSIM4v5_MOD_LLODKU0, IF_REAL, "Length parameter for u0 LOD effect"), IOP( "wlodku0", BSIM4v5_MOD_WLODKU0, IF_REAL, "Width parameter for u0 LOD effect"), IOP( "llodvth", BSIM4v5_MOD_LLODVTH, IF_REAL, "Length parameter for vth LOD effect"), IOP( "wlodvth", BSIM4v5_MOD_WLODVTH, IF_REAL, "Width parameter for vth LOD effect"), IOP( "lku0", BSIM4v5_MOD_LKU0, IF_REAL, "Length dependence of ku0"), IOP( "wku0", BSIM4v5_MOD_WKU0, IF_REAL, "Width dependence of ku0"), IOP( "pku0", BSIM4v5_MOD_PKU0, IF_REAL, "Cross-term dependence of ku0"), IOP( "lkvth0", BSIM4v5_MOD_LKVTH0, IF_REAL, "Length dependence of kvth0"), IOP( "wkvth0", BSIM4v5_MOD_WKVTH0, IF_REAL, "Width dependence of kvth0"), IOP( "pkvth0", BSIM4v5_MOD_PKVTH0, IF_REAL, "Cross-term dependence of kvth0"), IOP( "stk2", BSIM4v5_MOD_STK2, IF_REAL, "K2 shift factor related to stress effect on vth"), IOP( "lodk2", BSIM4v5_MOD_LODK2, IF_REAL, "K2 shift modification factor for stress effect"), IOP( "steta0", BSIM4v5_MOD_STETA0, IF_REAL, "eta0 shift factor related to stress effect on vth"), IOP( "lodeta0", BSIM4v5_MOD_LODETA0, IF_REAL, "eta0 shift modification factor for stress effect"), /* Well Proximity Effect */ IOP( "web", BSIM4v5_MOD_WEB, IF_REAL, "Coefficient for SCB"), IOP( "wec", BSIM4v5_MOD_WEC, IF_REAL, "Coefficient for SCC"), IOP( "kvth0we", BSIM4v5_MOD_KVTH0WE, IF_REAL, "Threshold shift factor for well proximity effect"), IOP( "k2we", BSIM4v5_MOD_K2WE, IF_REAL, " K2 shift factor for well proximity effect "), IOP( "ku0we", BSIM4v5_MOD_KU0WE, IF_REAL, " Mobility degradation factor for well proximity effect "), IOP( "scref", BSIM4v5_MOD_SCREF, IF_REAL, " Reference distance to calculate SCA, SCB and SCC"), IOP( "wpemod", BSIM4v5_MOD_WPEMOD, IF_REAL, " Flag for WPE model (WPEMOD=1 to activate this model) "), IOP( "lkvth0we", BSIM4v5_MOD_LKVTH0WE, IF_REAL, "Length dependence of kvth0we"), IOP( "lk2we", BSIM4v5_MOD_LK2WE, IF_REAL, " Length dependence of k2we "), IOP( "lku0we", BSIM4v5_MOD_LKU0WE, IF_REAL, " Length dependence of ku0we "), IOP( "wkvth0we", BSIM4v5_MOD_WKVTH0WE, IF_REAL, "Width dependence of kvth0we"), IOP( "wk2we", BSIM4v5_MOD_WK2WE, IF_REAL, " Width dependence of k2we "), IOP( "wku0we", BSIM4v5_MOD_WKU0WE, IF_REAL, " Width dependence of ku0we "), IOP( "pkvth0we", BSIM4v5_MOD_PKVTH0WE, IF_REAL, "Cross-term dependence of kvth0we"), IOP( "pk2we", BSIM4v5_MOD_PK2WE, IF_REAL, " Cross-term dependence of k2we "), IOP( "pku0we", BSIM4v5_MOD_PKU0WE, IF_REAL, " Cross-term dependence of ku0we "), IOP( "noia", BSIM4v5_MOD_NOIA, IF_REAL, "Flicker noise parameter"), IOP( "noib", BSIM4v5_MOD_NOIB, IF_REAL, "Flicker noise parameter"), IOP( "noic", BSIM4v5_MOD_NOIC, IF_REAL, "Flicker noise parameter"), IOP( "tnoia", BSIM4v5_MOD_TNOIA, IF_REAL, "Thermal noise parameter"), IOP( "tnoib", BSIM4v5_MOD_TNOIB, IF_REAL, "Thermal noise parameter"), IOP( "rnoia", BSIM4v5_MOD_RNOIA, IF_REAL, "Thermal noise coefficient"), IOP( "rnoib", BSIM4v5_MOD_RNOIB, IF_REAL, "Thermal noise coefficient"), IOP( "ntnoi", BSIM4v5_MOD_NTNOI, IF_REAL, "Thermal noise parameter"), IOP( "em", BSIM4v5_MOD_EM, IF_REAL, "Flicker noise parameter"), IOP( "ef", BSIM4v5_MOD_EF, IF_REAL, "Flicker noise frequency exponent"), IOP( "af", BSIM4v5_MOD_AF, IF_REAL, "Flicker noise exponent"), IOP( "kf", BSIM4v5_MOD_KF, IF_REAL, "Flicker noise coefficient"), IOP("vgs_max", BSIM4v5_MOD_VGS_MAX, IF_REAL, "maximum voltage G-S branch"), IOP("vgd_max", BSIM4v5_MOD_VGD_MAX, IF_REAL, "maximum voltage G-D branch"), IOP("vgb_max", BSIM4v5_MOD_VGB_MAX, IF_REAL, "maximum voltage G-B branch"), IOP("vds_max", BSIM4v5_MOD_VDS_MAX, IF_REAL, "maximum voltage D-S branch"), IOP("vbs_max", BSIM4v5_MOD_VBS_MAX, IF_REAL, "maximum voltage B-S branch"), IOP("vbd_max", BSIM4v5_MOD_VBD_MAX, IF_REAL, "maximum voltage B-D branch"), IOP("vgsr_max", BSIM4v5_MOD_VGSR_MAX, IF_REAL, "maximum voltage G-S branch"), IOP("vgdr_max", BSIM4v5_MOD_VGDR_MAX, IF_REAL, "maximum voltage G-D branch"), IOP("vgbr_max", BSIM4v5_MOD_VGBR_MAX, IF_REAL, "maximum voltage G-B branch"), IOP("vbsr_max", BSIM4v5_MOD_VBSR_MAX, IF_REAL, "maximum voltage B-S branch"), IOP("vbdr_max", BSIM4v5_MOD_VBDR_MAX, IF_REAL, "maximum voltage B-D branch"), IP( "nmos", BSIM4v5_MOD_NMOS, IF_FLAG, "Flag to indicate NMOS"), IP( "pmos", BSIM4v5_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"), }; char *BSIM4v5names[] = { "Drain", "Gate", "Source", "Bulk", "Charge" }; int BSIM4v5nSize = NUMELEMS(BSIM4v5names); int BSIM4v5pTSize = NUMELEMS(BSIM4v5pTable); int BSIM4v5mPTSize = NUMELEMS(BSIM4v5mPTable); int BSIM4v5iSize = sizeof(BSIM4v5instance); int BSIM4v5mSize = sizeof(BSIM4v5model); tmpk8ny_4pz/src/spicelib/devices/bsim4v5/B4TERMS_OF_USE0000644000175000017500000000255213546075722022563 0ustar carstencarsten The terms under which the software is provided are as the following. Software is distributed as is, completely without warranty or service support. The University of California and its employees are not liable for the condition or performance of the software. The University owns the copyright but shall not be liable for any infringement of copyright or other proprietary rights brought by third parties against the users of the software. The University of California hereby disclaims all implied warranties. The University of California grants the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions: 1. The users agree not to charge for the University of California code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge the UC Berkeley BSIM Research Group that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to obey all U.S. Government restrictions governing redistribution or export of the software. 4. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others. Chenming Hu, and Jane Xuemei Xi April. 2003 tmpk8ny_4pz/src/spicelib/devices/bsim4v5/bsim4v5ext.h0000644000175000017500000000260613546075722022643 0ustar carstencarsten/********** Copyright 2004 Regents of the University of California. All rights reserved. Author: 2000 Weidong Liu Author: 2001- Xuemei Xi File: bsim4v5ext.h **********/ extern int BSIM4v5acLoad(GENmodel *,CKTcircuit*); extern int BSIM4v5ask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*); extern int BSIM4v5convTest(GENmodel *,CKTcircuit*); extern int BSIM4v5getic(GENmodel*,CKTcircuit*); extern int BSIM4v5load(GENmodel*,CKTcircuit*); extern int BSIM4v5mAsk(CKTcircuit*,GENmodel *,int, IFvalue*); extern int BSIM4v5mDelete(GENmodel*); extern int BSIM4v5mParam(int,IFvalue*,GENmodel*); extern void BSIM4v5mosCap(CKTcircuit*, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*); extern int BSIM4v5param(int,IFvalue*,GENinstance*,IFvalue*); extern int BSIM4v5pzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int BSIM4v5setup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int BSIM4v5temp(GENmodel*,CKTcircuit*); extern int BSIM4v5trunc(GENmodel*,CKTcircuit*,double*); extern int BSIM4v5noise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int BSIM4v5unsetup(GENmodel*,CKTcircuit*); extern int BSIM4v5soaCheck(CKTcircuit *, GENmodel *); tmpk8ny_4pz/src/spicelib/devices/bsim3soi_fd/0000755000175000017500000000000013546075722021364 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/bsim3soi_fd/Makefile.am0000644000175000017500000000113213546075722023415 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libbsim3soifd.la libbsim3soifd_la_SOURCES = \ b3soifd.c \ b3soifdacld.c \ b3soifdask.c \ b3soifdcheck.c \ b3soifdcvtest.c \ b3soifdgetic.c \ b3soifdld.c \ b3soifdmask.c \ b3soifdmpar.c \ b3soifdnoi.c \ b3soifdpar.c \ b3soifdpzld.c \ b3soifdset.c \ b3soifdtemp.c \ b3soifdtrunc.c \ b3soifddef.h \ b3soifdext.h \ b3soifdinit.c \ b3soifdinit.h \ b3soifditf.h AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in EXTRA_DIST = BsimTerms_use tmpk8ny_4pz/src/spicelib/devices/bsim3soi_fd/b3soifdcvtest.c0000644000175000017500000000612513546075722024316 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang Modified by Paolo Nenzi 2002 File: b3soifdcvtest.c 98/5/01 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMFD2.1 release */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b3soifddef.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIFDconvTest(GENmodel *inModel, CKTcircuit *ckt) { B3SOIFDmodel *model = (B3SOIFDmodel*)inModel; B3SOIFDinstance *here; double delvbd, delvbs, delvds, delvgd, delvgs, vbd, vbs, vds; double cbd, cbhat, cbs, cd, cdhat, tol, vgd, vgdo, vgs; /* loop through all the B3SOIFD device models */ for (; model != NULL; model = B3SOIFDnextModel(model)) { /* loop through all the instances of the model */ for (here = B3SOIFDinstances(model); here != NULL ; here=B3SOIFDnextInstance(here)) { vbs = model->B3SOIFDtype * (*(ckt->CKTrhsOld+here->B3SOIFDbNode) - *(ckt->CKTrhsOld+here->B3SOIFDsNodePrime)); vgs = model->B3SOIFDtype * (*(ckt->CKTrhsOld+here->B3SOIFDgNode) - *(ckt->CKTrhsOld+here->B3SOIFDsNodePrime)); vds = model->B3SOIFDtype * (*(ckt->CKTrhsOld+here->B3SOIFDdNodePrime) - *(ckt->CKTrhsOld+here->B3SOIFDsNodePrime)); vbd = vbs - vds; vgd = vgs - vds; vgdo = *(ckt->CKTstate0 + here->B3SOIFDvgs) - *(ckt->CKTstate0 + here->B3SOIFDvds); delvbs = vbs - *(ckt->CKTstate0 + here->B3SOIFDvbs); delvbd = vbd - *(ckt->CKTstate0 + here->B3SOIFDvbd); delvgs = vgs - *(ckt->CKTstate0 + here->B3SOIFDvgs); delvds = vds - *(ckt->CKTstate0 + here->B3SOIFDvds); delvgd = vgd-vgdo; cd = here->B3SOIFDcd; if (here->B3SOIFDmode >= 0) { cdhat = cd - here->B3SOIFDgjdb * delvbd + here->B3SOIFDgmbs * delvbs + here->B3SOIFDgm * delvgs + here->B3SOIFDgds * delvds; } else { cdhat = cd - (here->B3SOIFDgjdb - here->B3SOIFDgmbs) * delvbd - here->B3SOIFDgm * delvgd + here->B3SOIFDgds * delvds; } /* * check convergence */ if ((here->B3SOIFDoff == 0) || (!(ckt->CKTmode & MODEINITFIX))) { tol = ckt->CKTreltol * MAX(fabs(cdhat), fabs(cd)) + ckt->CKTabstol; if (fabs(cdhat - cd) >= tol) { ckt->CKTnoncon++; return(OK); } cbs = here->B3SOIFDcjs; cbd = here->B3SOIFDcjd; cbhat = cbs + cbd + here->B3SOIFDgjdb * delvbd + here->B3SOIFDgjsb * delvbs; tol = ckt->CKTreltol * MAX(fabs(cbhat), fabs(cbs + cbd)) + ckt->CKTabstol; if (fabs(cbhat - (cbs + cbd)) > tol) { ckt->CKTnoncon++; return(OK); } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_fd/b3soifdpar.c0000644000175000017500000001041213546075722023562 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang Modified by Paolo Nenzi 2002 File: b3soifdpar.c 98/5/01 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMFD2.1 release */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "b3soifddef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIFDparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { B3SOIFDinstance *here = (B3SOIFDinstance*)inst; NG_IGNORE(select); switch(param) { case B3SOIFD_W: here->B3SOIFDw = value->rValue; here->B3SOIFDwGiven = TRUE; break; case B3SOIFD_L: here->B3SOIFDl = value->rValue; here->B3SOIFDlGiven = TRUE; break; case B3SOIFD_M: here->B3SOIFDm = value->rValue; here->B3SOIFDmGiven = TRUE; break; case B3SOIFD_AS: here->B3SOIFDsourceArea = value->rValue; here->B3SOIFDsourceAreaGiven = TRUE; break; case B3SOIFD_AD: here->B3SOIFDdrainArea = value->rValue; here->B3SOIFDdrainAreaGiven = TRUE; break; case B3SOIFD_PS: here->B3SOIFDsourcePerimeter = value->rValue; here->B3SOIFDsourcePerimeterGiven = TRUE; break; case B3SOIFD_PD: here->B3SOIFDdrainPerimeter = value->rValue; here->B3SOIFDdrainPerimeterGiven = TRUE; break; case B3SOIFD_NRS: here->B3SOIFDsourceSquares = value->rValue; here->B3SOIFDsourceSquaresGiven = TRUE; break; case B3SOIFD_NRD: here->B3SOIFDdrainSquares = value->rValue; here->B3SOIFDdrainSquaresGiven = TRUE; break; case B3SOIFD_OFF: here->B3SOIFDoff = value->iValue; break; case B3SOIFD_IC_VBS: here->B3SOIFDicVBS = value->rValue; here->B3SOIFDicVBSGiven = TRUE; break; case B3SOIFD_IC_VDS: here->B3SOIFDicVDS = value->rValue; here->B3SOIFDicVDSGiven = TRUE; break; case B3SOIFD_IC_VGS: here->B3SOIFDicVGS = value->rValue; here->B3SOIFDicVGSGiven = TRUE; break; case B3SOIFD_IC_VES: here->B3SOIFDicVES = value->rValue; here->B3SOIFDicVESGiven = TRUE; break; case B3SOIFD_IC_VPS: here->B3SOIFDicVPS = value->rValue; here->B3SOIFDicVPSGiven = TRUE; break; case B3SOIFD_BJTOFF: here->B3SOIFDbjtoff = value->iValue; here->B3SOIFDbjtoffGiven= TRUE; break; case B3SOIFD_DEBUG: here->B3SOIFDdebugMod = value->iValue; here->B3SOIFDdebugModGiven= TRUE; break; case B3SOIFD_RTH0: here->B3SOIFDrth0= value->rValue; here->B3SOIFDrth0Given = TRUE; break; case B3SOIFD_CTH0: here->B3SOIFDcth0= value->rValue; here->B3SOIFDcth0Given = TRUE; break; case B3SOIFD_NRB: here->B3SOIFDbodySquares = value->rValue; here->B3SOIFDbodySquaresGiven = TRUE; break; case B3SOIFD_IC: switch(value->v.numValue){ case 5: here->B3SOIFDicVPS = *(value->v.vec.rVec+4); here->B3SOIFDicVPSGiven = TRUE; case 4: here->B3SOIFDicVES = *(value->v.vec.rVec+3); here->B3SOIFDicVESGiven = TRUE; case 3: here->B3SOIFDicVBS = *(value->v.vec.rVec+2); here->B3SOIFDicVBSGiven = TRUE; case 2: here->B3SOIFDicVGS = *(value->v.vec.rVec+1); here->B3SOIFDicVGSGiven = TRUE; case 1: here->B3SOIFDicVDS = *(value->v.vec.rVec); here->B3SOIFDicVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_fd/b3soifdmpar.c0000644000175000017500000016053713546075722023755 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: Weidong Liu and Pin Su Feb 1999 Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soifdmpar.c 98/5/01 Modified by Wei Jin 99/9/27 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMFD2.1 release */ #include "ngspice/ngspice.h" #include "b3soifddef.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIFDmParam(int param, IFvalue *value, GENmodel *inMod) { B3SOIFDmodel *mod = (B3SOIFDmodel*)inMod; switch(param) { case B3SOIFD_MOD_MOBMOD : mod->B3SOIFDmobMod = value->iValue; mod->B3SOIFDmobModGiven = TRUE; break; case B3SOIFD_MOD_BINUNIT : mod->B3SOIFDbinUnit = value->iValue; mod->B3SOIFDbinUnitGiven = TRUE; break; case B3SOIFD_MOD_PARAMCHK : mod->B3SOIFDparamChk = value->iValue; mod->B3SOIFDparamChkGiven = TRUE; break; case B3SOIFD_MOD_CAPMOD : mod->B3SOIFDcapMod = value->iValue; mod->B3SOIFDcapModGiven = TRUE; break; case B3SOIFD_MOD_SHMOD : mod->B3SOIFDshMod = value->iValue; mod->B3SOIFDshModGiven = TRUE; break; case B3SOIFD_MOD_NOIMOD : mod->B3SOIFDnoiMod = value->iValue; mod->B3SOIFDnoiModGiven = TRUE; break; case B3SOIFD_MOD_VERSION : mod->B3SOIFDversion = value->rValue; mod->B3SOIFDversionGiven = TRUE; break; case B3SOIFD_MOD_TOX : mod->B3SOIFDtox = value->rValue; mod->B3SOIFDtoxGiven = TRUE; break; case B3SOIFD_MOD_CDSC : mod->B3SOIFDcdsc = value->rValue; mod->B3SOIFDcdscGiven = TRUE; break; case B3SOIFD_MOD_CDSCB : mod->B3SOIFDcdscb = value->rValue; mod->B3SOIFDcdscbGiven = TRUE; break; case B3SOIFD_MOD_CDSCD : mod->B3SOIFDcdscd = value->rValue; mod->B3SOIFDcdscdGiven = TRUE; break; case B3SOIFD_MOD_CIT : mod->B3SOIFDcit = value->rValue; mod->B3SOIFDcitGiven = TRUE; break; case B3SOIFD_MOD_NFACTOR : mod->B3SOIFDnfactor = value->rValue; mod->B3SOIFDnfactorGiven = TRUE; break; case B3SOIFD_MOD_VSAT: mod->B3SOIFDvsat = value->rValue; mod->B3SOIFDvsatGiven = TRUE; break; case B3SOIFD_MOD_A0: mod->B3SOIFDa0 = value->rValue; mod->B3SOIFDa0Given = TRUE; break; case B3SOIFD_MOD_AGS: mod->B3SOIFDags= value->rValue; mod->B3SOIFDagsGiven = TRUE; break; case B3SOIFD_MOD_A1: mod->B3SOIFDa1 = value->rValue; mod->B3SOIFDa1Given = TRUE; break; case B3SOIFD_MOD_A2: mod->B3SOIFDa2 = value->rValue; mod->B3SOIFDa2Given = TRUE; break; case B3SOIFD_MOD_AT: mod->B3SOIFDat = value->rValue; mod->B3SOIFDatGiven = TRUE; break; case B3SOIFD_MOD_KETA: mod->B3SOIFDketa = value->rValue; mod->B3SOIFDketaGiven = TRUE; break; case B3SOIFD_MOD_NSUB: mod->B3SOIFDnsub = value->rValue; mod->B3SOIFDnsubGiven = TRUE; break; case B3SOIFD_MOD_NPEAK: mod->B3SOIFDnpeak = value->rValue; mod->B3SOIFDnpeakGiven = TRUE; if (mod->B3SOIFDnpeak > 1.0e20) mod->B3SOIFDnpeak *= 1.0e-6; break; case B3SOIFD_MOD_NGATE: mod->B3SOIFDngate = value->rValue; mod->B3SOIFDngateGiven = TRUE; if (mod->B3SOIFDngate > 1.0e23) mod->B3SOIFDngate *= 1.0e-6; break; case B3SOIFD_MOD_GAMMA1: mod->B3SOIFDgamma1 = value->rValue; mod->B3SOIFDgamma1Given = TRUE; break; case B3SOIFD_MOD_GAMMA2: mod->B3SOIFDgamma2 = value->rValue; mod->B3SOIFDgamma2Given = TRUE; break; case B3SOIFD_MOD_VBX: mod->B3SOIFDvbx = value->rValue; mod->B3SOIFDvbxGiven = TRUE; break; case B3SOIFD_MOD_VBM: mod->B3SOIFDvbm = value->rValue; mod->B3SOIFDvbmGiven = TRUE; break; case B3SOIFD_MOD_XT: mod->B3SOIFDxt = value->rValue; mod->B3SOIFDxtGiven = TRUE; break; case B3SOIFD_MOD_K1: mod->B3SOIFDk1 = value->rValue; mod->B3SOIFDk1Given = TRUE; break; case B3SOIFD_MOD_KT1: mod->B3SOIFDkt1 = value->rValue; mod->B3SOIFDkt1Given = TRUE; break; case B3SOIFD_MOD_KT1L: mod->B3SOIFDkt1l = value->rValue; mod->B3SOIFDkt1lGiven = TRUE; break; case B3SOIFD_MOD_KT2: mod->B3SOIFDkt2 = value->rValue; mod->B3SOIFDkt2Given = TRUE; break; case B3SOIFD_MOD_K2: mod->B3SOIFDk2 = value->rValue; mod->B3SOIFDk2Given = TRUE; break; case B3SOIFD_MOD_K3: mod->B3SOIFDk3 = value->rValue; mod->B3SOIFDk3Given = TRUE; break; case B3SOIFD_MOD_K3B: mod->B3SOIFDk3b = value->rValue; mod->B3SOIFDk3bGiven = TRUE; break; case B3SOIFD_MOD_NLX: mod->B3SOIFDnlx = value->rValue; mod->B3SOIFDnlxGiven = TRUE; break; case B3SOIFD_MOD_W0: mod->B3SOIFDw0 = value->rValue; mod->B3SOIFDw0Given = TRUE; break; case B3SOIFD_MOD_DVT0: mod->B3SOIFDdvt0 = value->rValue; mod->B3SOIFDdvt0Given = TRUE; break; case B3SOIFD_MOD_DVT1: mod->B3SOIFDdvt1 = value->rValue; mod->B3SOIFDdvt1Given = TRUE; break; case B3SOIFD_MOD_DVT2: mod->B3SOIFDdvt2 = value->rValue; mod->B3SOIFDdvt2Given = TRUE; break; case B3SOIFD_MOD_DVT0W: mod->B3SOIFDdvt0w = value->rValue; mod->B3SOIFDdvt0wGiven = TRUE; break; case B3SOIFD_MOD_DVT1W: mod->B3SOIFDdvt1w = value->rValue; mod->B3SOIFDdvt1wGiven = TRUE; break; case B3SOIFD_MOD_DVT2W: mod->B3SOIFDdvt2w = value->rValue; mod->B3SOIFDdvt2wGiven = TRUE; break; case B3SOIFD_MOD_DROUT: mod->B3SOIFDdrout = value->rValue; mod->B3SOIFDdroutGiven = TRUE; break; case B3SOIFD_MOD_DSUB: mod->B3SOIFDdsub = value->rValue; mod->B3SOIFDdsubGiven = TRUE; break; case B3SOIFD_MOD_VTH0: mod->B3SOIFDvth0 = value->rValue; mod->B3SOIFDvth0Given = TRUE; break; case B3SOIFD_MOD_UA: mod->B3SOIFDua = value->rValue; mod->B3SOIFDuaGiven = TRUE; break; case B3SOIFD_MOD_UA1: mod->B3SOIFDua1 = value->rValue; mod->B3SOIFDua1Given = TRUE; break; case B3SOIFD_MOD_UB: mod->B3SOIFDub = value->rValue; mod->B3SOIFDubGiven = TRUE; break; case B3SOIFD_MOD_UB1: mod->B3SOIFDub1 = value->rValue; mod->B3SOIFDub1Given = TRUE; break; case B3SOIFD_MOD_UC: mod->B3SOIFDuc = value->rValue; mod->B3SOIFDucGiven = TRUE; break; case B3SOIFD_MOD_UC1: mod->B3SOIFDuc1 = value->rValue; mod->B3SOIFDuc1Given = TRUE; break; case B3SOIFD_MOD_U0 : mod->B3SOIFDu0 = value->rValue; mod->B3SOIFDu0Given = TRUE; break; case B3SOIFD_MOD_UTE : mod->B3SOIFDute = value->rValue; mod->B3SOIFDuteGiven = TRUE; break; case B3SOIFD_MOD_VOFF: mod->B3SOIFDvoff = value->rValue; mod->B3SOIFDvoffGiven = TRUE; break; case B3SOIFD_MOD_DELTA : mod->B3SOIFDdelta = value->rValue; mod->B3SOIFDdeltaGiven = TRUE; break; case B3SOIFD_MOD_RDSW: mod->B3SOIFDrdsw = value->rValue; mod->B3SOIFDrdswGiven = TRUE; break; case B3SOIFD_MOD_PRWG: mod->B3SOIFDprwg = value->rValue; mod->B3SOIFDprwgGiven = TRUE; break; case B3SOIFD_MOD_PRWB: mod->B3SOIFDprwb = value->rValue; mod->B3SOIFDprwbGiven = TRUE; break; case B3SOIFD_MOD_PRT: mod->B3SOIFDprt = value->rValue; mod->B3SOIFDprtGiven = TRUE; break; case B3SOIFD_MOD_ETA0: mod->B3SOIFDeta0 = value->rValue; mod->B3SOIFDeta0Given = TRUE; break; case B3SOIFD_MOD_ETAB: mod->B3SOIFDetab = value->rValue; mod->B3SOIFDetabGiven = TRUE; break; case B3SOIFD_MOD_PCLM: mod->B3SOIFDpclm = value->rValue; mod->B3SOIFDpclmGiven = TRUE; break; case B3SOIFD_MOD_PDIBL1: mod->B3SOIFDpdibl1 = value->rValue; mod->B3SOIFDpdibl1Given = TRUE; break; case B3SOIFD_MOD_PDIBL2: mod->B3SOIFDpdibl2 = value->rValue; mod->B3SOIFDpdibl2Given = TRUE; break; case B3SOIFD_MOD_PDIBLB: mod->B3SOIFDpdiblb = value->rValue; mod->B3SOIFDpdiblbGiven = TRUE; break; case B3SOIFD_MOD_PVAG: mod->B3SOIFDpvag = value->rValue; mod->B3SOIFDpvagGiven = TRUE; break; case B3SOIFD_MOD_WR : mod->B3SOIFDwr = value->rValue; mod->B3SOIFDwrGiven = TRUE; break; case B3SOIFD_MOD_DWG : mod->B3SOIFDdwg = value->rValue; mod->B3SOIFDdwgGiven = TRUE; break; case B3SOIFD_MOD_DWB : mod->B3SOIFDdwb = value->rValue; mod->B3SOIFDdwbGiven = TRUE; break; case B3SOIFD_MOD_B0 : mod->B3SOIFDb0 = value->rValue; mod->B3SOIFDb0Given = TRUE; break; case B3SOIFD_MOD_B1 : mod->B3SOIFDb1 = value->rValue; mod->B3SOIFDb1Given = TRUE; break; case B3SOIFD_MOD_ALPHA0 : mod->B3SOIFDalpha0 = value->rValue; mod->B3SOIFDalpha0Given = TRUE; break; case B3SOIFD_MOD_ALPHA1 : mod->B3SOIFDalpha1 = value->rValue; mod->B3SOIFDalpha1Given = TRUE; break; case B3SOIFD_MOD_BETA0 : mod->B3SOIFDbeta0 = value->rValue; mod->B3SOIFDbeta0Given = TRUE; break; case B3SOIFD_MOD_CGSL : mod->B3SOIFDcgsl = value->rValue; mod->B3SOIFDcgslGiven = TRUE; break; case B3SOIFD_MOD_CGDL : mod->B3SOIFDcgdl = value->rValue; mod->B3SOIFDcgdlGiven = TRUE; break; case B3SOIFD_MOD_CKAPPA : mod->B3SOIFDckappa = value->rValue; mod->B3SOIFDckappaGiven = TRUE; break; case B3SOIFD_MOD_CF : mod->B3SOIFDcf = value->rValue; mod->B3SOIFDcfGiven = TRUE; break; case B3SOIFD_MOD_CLC : mod->B3SOIFDclc = value->rValue; mod->B3SOIFDclcGiven = TRUE; break; case B3SOIFD_MOD_CLE : mod->B3SOIFDcle = value->rValue; mod->B3SOIFDcleGiven = TRUE; break; case B3SOIFD_MOD_DWC : mod->B3SOIFDdwc = value->rValue; mod->B3SOIFDdwcGiven = TRUE; break; case B3SOIFD_MOD_DLC : mod->B3SOIFDdlc = value->rValue; mod->B3SOIFDdlcGiven = TRUE; break; case B3SOIFD_MOD_TBOX : mod->B3SOIFDtbox = value->rValue; mod->B3SOIFDtboxGiven = TRUE; break; case B3SOIFD_MOD_TSI : mod->B3SOIFDtsi = value->rValue; mod->B3SOIFDtsiGiven = TRUE; break; case B3SOIFD_MOD_XJ : mod->B3SOIFDxj = value->rValue; mod->B3SOIFDxjGiven = TRUE; break; case B3SOIFD_MOD_KB1 : mod->B3SOIFDkb1 = value->rValue; mod->B3SOIFDkb1Given = TRUE; break; case B3SOIFD_MOD_KB3 : mod->B3SOIFDkb3 = value->rValue; mod->B3SOIFDkb3Given = TRUE; break; case B3SOIFD_MOD_DVBD0 : mod->B3SOIFDdvbd0 = value->rValue; mod->B3SOIFDdvbd0Given = TRUE; break; case B3SOIFD_MOD_DVBD1 : mod->B3SOIFDdvbd1 = value->rValue; mod->B3SOIFDdvbd1Given = TRUE; break; case B3SOIFD_MOD_DELP : mod->B3SOIFDdelp = value->rValue; mod->B3SOIFDdelpGiven = TRUE; break; case B3SOIFD_MOD_VBSA : mod->B3SOIFDvbsa = value->rValue; mod->B3SOIFDvbsaGiven = TRUE; break; case B3SOIFD_MOD_RBODY : mod->B3SOIFDrbody = value->rValue; mod->B3SOIFDrbodyGiven = TRUE; break; case B3SOIFD_MOD_RBSH : mod->B3SOIFDrbsh = value->rValue; mod->B3SOIFDrbshGiven = TRUE; break; case B3SOIFD_MOD_ADICE0 : mod->B3SOIFDadice0 = value->rValue; mod->B3SOIFDadice0Given = TRUE; break; case B3SOIFD_MOD_ABP : mod->B3SOIFDabp = value->rValue; mod->B3SOIFDabpGiven = TRUE; break; case B3SOIFD_MOD_MXC : mod->B3SOIFDmxc = value->rValue; mod->B3SOIFDmxcGiven = TRUE; break; case B3SOIFD_MOD_RTH0 : mod->B3SOIFDrth0 = value->rValue; mod->B3SOIFDrth0Given = TRUE; break; case B3SOIFD_MOD_CTH0 : mod->B3SOIFDcth0 = value->rValue; mod->B3SOIFDcth0Given = TRUE; break; case B3SOIFD_MOD_AII : mod->B3SOIFDaii = value->rValue; mod->B3SOIFDaiiGiven = TRUE; break; case B3SOIFD_MOD_BII : mod->B3SOIFDbii = value->rValue; mod->B3SOIFDbiiGiven = TRUE; break; case B3SOIFD_MOD_CII : mod->B3SOIFDcii = value->rValue; mod->B3SOIFDciiGiven = TRUE; break; case B3SOIFD_MOD_DII : mod->B3SOIFDdii = value->rValue; mod->B3SOIFDdiiGiven = TRUE; break; case B3SOIFD_MOD_NGIDL : mod->B3SOIFDngidl = value->rValue; mod->B3SOIFDngidlGiven = TRUE; break; case B3SOIFD_MOD_AGIDL : mod->B3SOIFDagidl = value->rValue; mod->B3SOIFDagidlGiven = TRUE; break; case B3SOIFD_MOD_BGIDL : mod->B3SOIFDbgidl = value->rValue; mod->B3SOIFDbgidlGiven = TRUE; break; case B3SOIFD_MOD_NDIODE : mod->B3SOIFDndiode = value->rValue; mod->B3SOIFDndiodeGiven = TRUE; break; case B3SOIFD_MOD_NTUN : mod->B3SOIFDntun = value->rValue; mod->B3SOIFDntunGiven = TRUE; break; case B3SOIFD_MOD_ISBJT : mod->B3SOIFDisbjt = value->rValue; mod->B3SOIFDisbjtGiven = TRUE; break; case B3SOIFD_MOD_ISDIF : mod->B3SOIFDisdif = value->rValue; mod->B3SOIFDisdifGiven = TRUE; break; case B3SOIFD_MOD_ISREC : mod->B3SOIFDisrec = value->rValue; mod->B3SOIFDisrecGiven = TRUE; break; case B3SOIFD_MOD_ISTUN : mod->B3SOIFDistun = value->rValue; mod->B3SOIFDistunGiven = TRUE; break; case B3SOIFD_MOD_XBJT : mod->B3SOIFDxbjt = value->rValue; mod->B3SOIFDxbjtGiven = TRUE; break; case B3SOIFD_MOD_XREC : mod->B3SOIFDxrec = value->rValue; mod->B3SOIFDxrecGiven = TRUE; break; case B3SOIFD_MOD_XTUN : mod->B3SOIFDxtun = value->rValue; mod->B3SOIFDxtunGiven = TRUE; break; case B3SOIFD_MOD_EDL : mod->B3SOIFDedl = value->rValue; mod->B3SOIFDedlGiven = TRUE; break; case B3SOIFD_MOD_KBJT1 : mod->B3SOIFDkbjt1 = value->rValue; mod->B3SOIFDkbjt1Given = TRUE; break; case B3SOIFD_MOD_TT : mod->B3SOIFDtt = value->rValue; mod->B3SOIFDttGiven = TRUE; break; case B3SOIFD_MOD_VSDTH : mod->B3SOIFDvsdth = value->rValue; mod->B3SOIFDvsdthGiven = TRUE; break; case B3SOIFD_MOD_VSDFB : mod->B3SOIFDvsdfb = value->rValue; mod->B3SOIFDvsdfbGiven = TRUE; break; case B3SOIFD_MOD_CSDMIN : mod->B3SOIFDcsdmin = value->rValue; mod->B3SOIFDcsdminGiven = TRUE; break; case B3SOIFD_MOD_ASD : mod->B3SOIFDasd = value->rValue; mod->B3SOIFDasdGiven = TRUE; break; case B3SOIFD_MOD_TNOM : mod->B3SOIFDtnom = value->rValue + 273.15; mod->B3SOIFDtnomGiven = TRUE; break; case B3SOIFD_MOD_CGSO : mod->B3SOIFDcgso = value->rValue; mod->B3SOIFDcgsoGiven = TRUE; break; case B3SOIFD_MOD_CGDO : mod->B3SOIFDcgdo = value->rValue; mod->B3SOIFDcgdoGiven = TRUE; break; case B3SOIFD_MOD_CGEO : mod->B3SOIFDcgeo = value->rValue; mod->B3SOIFDcgeoGiven = TRUE; break; case B3SOIFD_MOD_XPART : mod->B3SOIFDxpart = value->rValue; mod->B3SOIFDxpartGiven = TRUE; break; case B3SOIFD_MOD_RSH : mod->B3SOIFDsheetResistance = value->rValue; mod->B3SOIFDsheetResistanceGiven = TRUE; break; case B3SOIFD_MOD_PBSWG : mod->B3SOIFDGatesidewallJctPotential = value->rValue; mod->B3SOIFDGatesidewallJctPotentialGiven = TRUE; break; case B3SOIFD_MOD_MJSWG : mod->B3SOIFDbodyJctGateSideGradingCoeff = value->rValue; mod->B3SOIFDbodyJctGateSideGradingCoeffGiven = TRUE; break; case B3SOIFD_MOD_CJSWG : mod->B3SOIFDunitLengthGateSidewallJctCap = value->rValue; mod->B3SOIFDunitLengthGateSidewallJctCapGiven = TRUE; break; case B3SOIFD_MOD_CSDESW : mod->B3SOIFDcsdesw = value->rValue; mod->B3SOIFDcsdeswGiven = TRUE; break; case B3SOIFD_MOD_LINT : mod->B3SOIFDLint = value->rValue; mod->B3SOIFDLintGiven = TRUE; break; case B3SOIFD_MOD_LL : mod->B3SOIFDLl = value->rValue; mod->B3SOIFDLlGiven = TRUE; break; case B3SOIFD_MOD_LLN : mod->B3SOIFDLln = value->rValue; mod->B3SOIFDLlnGiven = TRUE; break; case B3SOIFD_MOD_LW : mod->B3SOIFDLw = value->rValue; mod->B3SOIFDLwGiven = TRUE; break; case B3SOIFD_MOD_LWN : mod->B3SOIFDLwn = value->rValue; mod->B3SOIFDLwnGiven = TRUE; break; case B3SOIFD_MOD_LWL : mod->B3SOIFDLwl = value->rValue; mod->B3SOIFDLwlGiven = TRUE; break; case B3SOIFD_MOD_WINT : mod->B3SOIFDWint = value->rValue; mod->B3SOIFDWintGiven = TRUE; break; case B3SOIFD_MOD_WL : mod->B3SOIFDWl = value->rValue; mod->B3SOIFDWlGiven = TRUE; break; case B3SOIFD_MOD_WLN : mod->B3SOIFDWln = value->rValue; mod->B3SOIFDWlnGiven = TRUE; break; case B3SOIFD_MOD_WW : mod->B3SOIFDWw = value->rValue; mod->B3SOIFDWwGiven = TRUE; break; case B3SOIFD_MOD_WWN : mod->B3SOIFDWwn = value->rValue; mod->B3SOIFDWwnGiven = TRUE; break; case B3SOIFD_MOD_WWL : mod->B3SOIFDWwl = value->rValue; mod->B3SOIFDWwlGiven = TRUE; break; case B3SOIFD_MOD_NOIA : mod->B3SOIFDoxideTrapDensityA = value->rValue; mod->B3SOIFDoxideTrapDensityAGiven = TRUE; break; case B3SOIFD_MOD_NOIB : mod->B3SOIFDoxideTrapDensityB = value->rValue; mod->B3SOIFDoxideTrapDensityBGiven = TRUE; break; case B3SOIFD_MOD_NOIC : mod->B3SOIFDoxideTrapDensityC = value->rValue; mod->B3SOIFDoxideTrapDensityCGiven = TRUE; break; case B3SOIFD_MOD_NOIF : mod->B3SOIFDnoif = value->rValue; mod->B3SOIFDnoifGiven = TRUE; break; case B3SOIFD_MOD_EM : mod->B3SOIFDem = value->rValue; mod->B3SOIFDemGiven = TRUE; break; case B3SOIFD_MOD_EF : mod->B3SOIFDef = value->rValue; mod->B3SOIFDefGiven = TRUE; break; case B3SOIFD_MOD_AF : mod->B3SOIFDaf = value->rValue; mod->B3SOIFDafGiven = TRUE; break; case B3SOIFD_MOD_KF : mod->B3SOIFDkf = value->rValue; mod->B3SOIFDkfGiven = TRUE; break; /* Added for binning - START */ /* Length Dependence */ case B3SOIFD_MOD_LNPEAK: mod->B3SOIFDlnpeak = value->rValue; mod->B3SOIFDlnpeakGiven = TRUE; break; case B3SOIFD_MOD_LNSUB: mod->B3SOIFDlnsub = value->rValue; mod->B3SOIFDlnsubGiven = TRUE; break; case B3SOIFD_MOD_LNGATE: mod->B3SOIFDlngate = value->rValue; mod->B3SOIFDlngateGiven = TRUE; break; case B3SOIFD_MOD_LVTH0: mod->B3SOIFDlvth0 = value->rValue; mod->B3SOIFDlvth0Given = TRUE; break; case B3SOIFD_MOD_LK1: mod->B3SOIFDlk1 = value->rValue; mod->B3SOIFDlk1Given = TRUE; break; case B3SOIFD_MOD_LK2: mod->B3SOIFDlk2 = value->rValue; mod->B3SOIFDlk2Given = TRUE; break; case B3SOIFD_MOD_LK3: mod->B3SOIFDlk3 = value->rValue; mod->B3SOIFDlk3Given = TRUE; break; case B3SOIFD_MOD_LK3B: mod->B3SOIFDlk3b = value->rValue; mod->B3SOIFDlk3bGiven = TRUE; break; case B3SOIFD_MOD_LVBSA: mod->B3SOIFDlvbsa = value->rValue; mod->B3SOIFDlvbsaGiven = TRUE; break; case B3SOIFD_MOD_LDELP: mod->B3SOIFDldelp = value->rValue; mod->B3SOIFDldelpGiven = TRUE; break; case B3SOIFD_MOD_LKB1 : mod->B3SOIFDlkb1 = value->rValue; mod->B3SOIFDlkb1Given = TRUE; break; case B3SOIFD_MOD_LKB3 : mod->B3SOIFDlkb3 = value->rValue; mod->B3SOIFDlkb3Given = TRUE; break; case B3SOIFD_MOD_LDVBD0 : mod->B3SOIFDldvbd0 = value->rValue; mod->B3SOIFDldvbd0Given = TRUE; break; case B3SOIFD_MOD_LDVBD1 : mod->B3SOIFDldvbd1 = value->rValue; mod->B3SOIFDldvbd1Given = TRUE; break; case B3SOIFD_MOD_LW0: mod->B3SOIFDlw0 = value->rValue; mod->B3SOIFDlw0Given = TRUE; break; case B3SOIFD_MOD_LNLX: mod->B3SOIFDlnlx = value->rValue; mod->B3SOIFDlnlxGiven = TRUE; break; case B3SOIFD_MOD_LDVT0: mod->B3SOIFDldvt0 = value->rValue; mod->B3SOIFDldvt0Given = TRUE; break; case B3SOIFD_MOD_LDVT1: mod->B3SOIFDldvt1 = value->rValue; mod->B3SOIFDldvt1Given = TRUE; break; case B3SOIFD_MOD_LDVT2: mod->B3SOIFDldvt2 = value->rValue; mod->B3SOIFDldvt2Given = TRUE; break; case B3SOIFD_MOD_LDVT0W: mod->B3SOIFDldvt0w = value->rValue; mod->B3SOIFDldvt0wGiven = TRUE; break; case B3SOIFD_MOD_LDVT1W: mod->B3SOIFDldvt1w = value->rValue; mod->B3SOIFDldvt1wGiven = TRUE; break; case B3SOIFD_MOD_LDVT2W: mod->B3SOIFDldvt2w = value->rValue; mod->B3SOIFDldvt2wGiven = TRUE; break; case B3SOIFD_MOD_LU0 : mod->B3SOIFDlu0 = value->rValue; mod->B3SOIFDlu0Given = TRUE; break; case B3SOIFD_MOD_LUA: mod->B3SOIFDlua = value->rValue; mod->B3SOIFDluaGiven = TRUE; break; case B3SOIFD_MOD_LUB: mod->B3SOIFDlub = value->rValue; mod->B3SOIFDlubGiven = TRUE; break; case B3SOIFD_MOD_LUC: mod->B3SOIFDluc = value->rValue; mod->B3SOIFDlucGiven = TRUE; break; case B3SOIFD_MOD_LVSAT: mod->B3SOIFDlvsat = value->rValue; mod->B3SOIFDlvsatGiven = TRUE; break; case B3SOIFD_MOD_LA0: mod->B3SOIFDla0 = value->rValue; mod->B3SOIFDla0Given = TRUE; break; case B3SOIFD_MOD_LAGS: mod->B3SOIFDlags= value->rValue; mod->B3SOIFDlagsGiven = TRUE; break; case B3SOIFD_MOD_LB0 : mod->B3SOIFDlb0 = value->rValue; mod->B3SOIFDlb0Given = TRUE; break; case B3SOIFD_MOD_LB1 : mod->B3SOIFDlb1 = value->rValue; mod->B3SOIFDlb1Given = TRUE; break; case B3SOIFD_MOD_LKETA: mod->B3SOIFDlketa = value->rValue; mod->B3SOIFDlketaGiven = TRUE; break; case B3SOIFD_MOD_LABP: mod->B3SOIFDlabp = value->rValue; mod->B3SOIFDlabpGiven = TRUE; break; case B3SOIFD_MOD_LMXC: mod->B3SOIFDlmxc = value->rValue; mod->B3SOIFDlmxcGiven = TRUE; break; case B3SOIFD_MOD_LADICE0: mod->B3SOIFDladice0 = value->rValue; mod->B3SOIFDladice0Given = TRUE; break; case B3SOIFD_MOD_LA1: mod->B3SOIFDla1 = value->rValue; mod->B3SOIFDla1Given = TRUE; break; case B3SOIFD_MOD_LA2: mod->B3SOIFDla2 = value->rValue; mod->B3SOIFDla2Given = TRUE; break; case B3SOIFD_MOD_LRDSW: mod->B3SOIFDlrdsw = value->rValue; mod->B3SOIFDlrdswGiven = TRUE; break; case B3SOIFD_MOD_LPRWB: mod->B3SOIFDlprwb = value->rValue; mod->B3SOIFDlprwbGiven = TRUE; break; case B3SOIFD_MOD_LPRWG: mod->B3SOIFDlprwg = value->rValue; mod->B3SOIFDlprwgGiven = TRUE; break; case B3SOIFD_MOD_LWR : mod->B3SOIFDlwr = value->rValue; mod->B3SOIFDlwrGiven = TRUE; break; case B3SOIFD_MOD_LNFACTOR : mod->B3SOIFDlnfactor = value->rValue; mod->B3SOIFDlnfactorGiven = TRUE; break; case B3SOIFD_MOD_LDWG : mod->B3SOIFDldwg = value->rValue; mod->B3SOIFDldwgGiven = TRUE; break; case B3SOIFD_MOD_LDWB : mod->B3SOIFDldwb = value->rValue; mod->B3SOIFDldwbGiven = TRUE; break; case B3SOIFD_MOD_LVOFF: mod->B3SOIFDlvoff = value->rValue; mod->B3SOIFDlvoffGiven = TRUE; break; case B3SOIFD_MOD_LETA0: mod->B3SOIFDleta0 = value->rValue; mod->B3SOIFDleta0Given = TRUE; break; case B3SOIFD_MOD_LETAB: mod->B3SOIFDletab = value->rValue; mod->B3SOIFDletabGiven = TRUE; break; case B3SOIFD_MOD_LDSUB: mod->B3SOIFDldsub = value->rValue; mod->B3SOIFDldsubGiven = TRUE; break; case B3SOIFD_MOD_LCIT : mod->B3SOIFDlcit = value->rValue; mod->B3SOIFDlcitGiven = TRUE; break; case B3SOIFD_MOD_LCDSC : mod->B3SOIFDlcdsc = value->rValue; mod->B3SOIFDlcdscGiven = TRUE; break; case B3SOIFD_MOD_LCDSCB : mod->B3SOIFDlcdscb = value->rValue; mod->B3SOIFDlcdscbGiven = TRUE; break; case B3SOIFD_MOD_LCDSCD : mod->B3SOIFDlcdscd = value->rValue; mod->B3SOIFDlcdscdGiven = TRUE; break; case B3SOIFD_MOD_LPCLM: mod->B3SOIFDlpclm = value->rValue; mod->B3SOIFDlpclmGiven = TRUE; break; case B3SOIFD_MOD_LPDIBL1: mod->B3SOIFDlpdibl1 = value->rValue; mod->B3SOIFDlpdibl1Given = TRUE; break; case B3SOIFD_MOD_LPDIBL2: mod->B3SOIFDlpdibl2 = value->rValue; mod->B3SOIFDlpdibl2Given = TRUE; break; case B3SOIFD_MOD_LPDIBLB: mod->B3SOIFDlpdiblb = value->rValue; mod->B3SOIFDlpdiblbGiven = TRUE; break; case B3SOIFD_MOD_LDROUT: mod->B3SOIFDldrout = value->rValue; mod->B3SOIFDldroutGiven = TRUE; break; case B3SOIFD_MOD_LPVAG: mod->B3SOIFDlpvag = value->rValue; mod->B3SOIFDlpvagGiven = TRUE; break; case B3SOIFD_MOD_LDELTA : mod->B3SOIFDldelta = value->rValue; mod->B3SOIFDldeltaGiven = TRUE; break; case B3SOIFD_MOD_LAII : mod->B3SOIFDlaii = value->rValue; mod->B3SOIFDlaiiGiven = TRUE; break; case B3SOIFD_MOD_LBII : mod->B3SOIFDlbii = value->rValue; mod->B3SOIFDlbiiGiven = TRUE; break; case B3SOIFD_MOD_LCII : mod->B3SOIFDlcii = value->rValue; mod->B3SOIFDlciiGiven = TRUE; break; case B3SOIFD_MOD_LDII : mod->B3SOIFDldii = value->rValue; mod->B3SOIFDldiiGiven = TRUE; break; case B3SOIFD_MOD_LALPHA0 : mod->B3SOIFDlalpha0 = value->rValue; mod->B3SOIFDlalpha0Given = TRUE; break; case B3SOIFD_MOD_LALPHA1 : mod->B3SOIFDlalpha1 = value->rValue; mod->B3SOIFDlalpha1Given = TRUE; break; case B3SOIFD_MOD_LBETA0 : mod->B3SOIFDlbeta0 = value->rValue; mod->B3SOIFDlbeta0Given = TRUE; break; case B3SOIFD_MOD_LAGIDL : mod->B3SOIFDlagidl = value->rValue; mod->B3SOIFDlagidlGiven = TRUE; break; case B3SOIFD_MOD_LBGIDL : mod->B3SOIFDlbgidl = value->rValue; mod->B3SOIFDlbgidlGiven = TRUE; break; case B3SOIFD_MOD_LNGIDL : mod->B3SOIFDlngidl = value->rValue; mod->B3SOIFDlngidlGiven = TRUE; break; case B3SOIFD_MOD_LNTUN : mod->B3SOIFDlntun = value->rValue; mod->B3SOIFDlntunGiven = TRUE; break; case B3SOIFD_MOD_LNDIODE : mod->B3SOIFDlndiode = value->rValue; mod->B3SOIFDlndiodeGiven = TRUE; break; case B3SOIFD_MOD_LISBJT : mod->B3SOIFDlisbjt = value->rValue; mod->B3SOIFDlisbjtGiven = TRUE; break; case B3SOIFD_MOD_LISDIF : mod->B3SOIFDlisdif = value->rValue; mod->B3SOIFDlisdifGiven = TRUE; break; case B3SOIFD_MOD_LISREC : mod->B3SOIFDlisrec = value->rValue; mod->B3SOIFDlisrecGiven = TRUE; break; case B3SOIFD_MOD_LISTUN : mod->B3SOIFDlistun = value->rValue; mod->B3SOIFDlistunGiven = TRUE; break; case B3SOIFD_MOD_LEDL : mod->B3SOIFDledl = value->rValue; mod->B3SOIFDledlGiven = TRUE; break; case B3SOIFD_MOD_LKBJT1 : mod->B3SOIFDlkbjt1 = value->rValue; mod->B3SOIFDlkbjt1Given = TRUE; break; /* CV Model */ case B3SOIFD_MOD_LVSDFB : mod->B3SOIFDlvsdfb = value->rValue; mod->B3SOIFDlvsdfbGiven = TRUE; break; case B3SOIFD_MOD_LVSDTH : mod->B3SOIFDlvsdth = value->rValue; mod->B3SOIFDlvsdthGiven = TRUE; break; /* Width Dependence */ case B3SOIFD_MOD_WNPEAK: mod->B3SOIFDwnpeak = value->rValue; mod->B3SOIFDwnpeakGiven = TRUE; break; case B3SOIFD_MOD_WNSUB: mod->B3SOIFDwnsub = value->rValue; mod->B3SOIFDwnsubGiven = TRUE; break; case B3SOIFD_MOD_WNGATE: mod->B3SOIFDwngate = value->rValue; mod->B3SOIFDwngateGiven = TRUE; break; case B3SOIFD_MOD_WVTH0: mod->B3SOIFDwvth0 = value->rValue; mod->B3SOIFDwvth0Given = TRUE; break; case B3SOIFD_MOD_WK1: mod->B3SOIFDwk1 = value->rValue; mod->B3SOIFDwk1Given = TRUE; break; case B3SOIFD_MOD_WK2: mod->B3SOIFDwk2 = value->rValue; mod->B3SOIFDwk2Given = TRUE; break; case B3SOIFD_MOD_WK3: mod->B3SOIFDwk3 = value->rValue; mod->B3SOIFDwk3Given = TRUE; break; case B3SOIFD_MOD_WK3B: mod->B3SOIFDwk3b = value->rValue; mod->B3SOIFDwk3bGiven = TRUE; break; case B3SOIFD_MOD_WVBSA: mod->B3SOIFDwvbsa = value->rValue; mod->B3SOIFDwvbsaGiven = TRUE; break; case B3SOIFD_MOD_WDELP: mod->B3SOIFDwdelp = value->rValue; mod->B3SOIFDwdelpGiven = TRUE; break; case B3SOIFD_MOD_WKB1 : mod->B3SOIFDwkb1 = value->rValue; mod->B3SOIFDwkb1Given = TRUE; break; case B3SOIFD_MOD_WKB3 : mod->B3SOIFDwkb3 = value->rValue; mod->B3SOIFDwkb3Given = TRUE; break; case B3SOIFD_MOD_WDVBD0 : mod->B3SOIFDwdvbd0 = value->rValue; mod->B3SOIFDwdvbd0Given = TRUE; break; case B3SOIFD_MOD_WDVBD1 : mod->B3SOIFDwdvbd1 = value->rValue; mod->B3SOIFDwdvbd1Given = TRUE; break; case B3SOIFD_MOD_WW0: mod->B3SOIFDww0 = value->rValue; mod->B3SOIFDww0Given = TRUE; break; case B3SOIFD_MOD_WNLX: mod->B3SOIFDwnlx = value->rValue; mod->B3SOIFDwnlxGiven = TRUE; break; case B3SOIFD_MOD_WDVT0: mod->B3SOIFDwdvt0 = value->rValue; mod->B3SOIFDwdvt0Given = TRUE; break; case B3SOIFD_MOD_WDVT1: mod->B3SOIFDwdvt1 = value->rValue; mod->B3SOIFDwdvt1Given = TRUE; break; case B3SOIFD_MOD_WDVT2: mod->B3SOIFDwdvt2 = value->rValue; mod->B3SOIFDwdvt2Given = TRUE; break; case B3SOIFD_MOD_WDVT0W: mod->B3SOIFDwdvt0w = value->rValue; mod->B3SOIFDwdvt0wGiven = TRUE; break; case B3SOIFD_MOD_WDVT1W: mod->B3SOIFDwdvt1w = value->rValue; mod->B3SOIFDwdvt1wGiven = TRUE; break; case B3SOIFD_MOD_WDVT2W: mod->B3SOIFDwdvt2w = value->rValue; mod->B3SOIFDwdvt2wGiven = TRUE; break; case B3SOIFD_MOD_WU0 : mod->B3SOIFDwu0 = value->rValue; mod->B3SOIFDwu0Given = TRUE; break; case B3SOIFD_MOD_WUA: mod->B3SOIFDwua = value->rValue; mod->B3SOIFDwuaGiven = TRUE; break; case B3SOIFD_MOD_WUB: mod->B3SOIFDwub = value->rValue; mod->B3SOIFDwubGiven = TRUE; break; case B3SOIFD_MOD_WUC: mod->B3SOIFDwuc = value->rValue; mod->B3SOIFDwucGiven = TRUE; break; case B3SOIFD_MOD_WVSAT: mod->B3SOIFDwvsat = value->rValue; mod->B3SOIFDwvsatGiven = TRUE; break; case B3SOIFD_MOD_WA0: mod->B3SOIFDwa0 = value->rValue; mod->B3SOIFDwa0Given = TRUE; break; case B3SOIFD_MOD_WAGS: mod->B3SOIFDwags= value->rValue; mod->B3SOIFDwagsGiven = TRUE; break; case B3SOIFD_MOD_WB0 : mod->B3SOIFDwb0 = value->rValue; mod->B3SOIFDwb0Given = TRUE; break; case B3SOIFD_MOD_WB1 : mod->B3SOIFDwb1 = value->rValue; mod->B3SOIFDwb1Given = TRUE; break; case B3SOIFD_MOD_WKETA: mod->B3SOIFDwketa = value->rValue; mod->B3SOIFDwketaGiven = TRUE; break; case B3SOIFD_MOD_WABP: mod->B3SOIFDwabp = value->rValue; mod->B3SOIFDwabpGiven = TRUE; break; case B3SOIFD_MOD_WMXC: mod->B3SOIFDwmxc = value->rValue; mod->B3SOIFDwmxcGiven = TRUE; break; case B3SOIFD_MOD_WADICE0: mod->B3SOIFDwadice0 = value->rValue; mod->B3SOIFDwadice0Given = TRUE; break; case B3SOIFD_MOD_WA1: mod->B3SOIFDwa1 = value->rValue; mod->B3SOIFDwa1Given = TRUE; break; case B3SOIFD_MOD_WA2: mod->B3SOIFDwa2 = value->rValue; mod->B3SOIFDwa2Given = TRUE; break; case B3SOIFD_MOD_WRDSW: mod->B3SOIFDwrdsw = value->rValue; mod->B3SOIFDwrdswGiven = TRUE; break; case B3SOIFD_MOD_WPRWB: mod->B3SOIFDwprwb = value->rValue; mod->B3SOIFDwprwbGiven = TRUE; break; case B3SOIFD_MOD_WPRWG: mod->B3SOIFDwprwg = value->rValue; mod->B3SOIFDwprwgGiven = TRUE; break; case B3SOIFD_MOD_WWR : mod->B3SOIFDwwr = value->rValue; mod->B3SOIFDwwrGiven = TRUE; break; case B3SOIFD_MOD_WNFACTOR : mod->B3SOIFDwnfactor = value->rValue; mod->B3SOIFDwnfactorGiven = TRUE; break; case B3SOIFD_MOD_WDWG : mod->B3SOIFDwdwg = value->rValue; mod->B3SOIFDwdwgGiven = TRUE; break; case B3SOIFD_MOD_WDWB : mod->B3SOIFDwdwb = value->rValue; mod->B3SOIFDwdwbGiven = TRUE; break; case B3SOIFD_MOD_WVOFF: mod->B3SOIFDwvoff = value->rValue; mod->B3SOIFDwvoffGiven = TRUE; break; case B3SOIFD_MOD_WETA0: mod->B3SOIFDweta0 = value->rValue; mod->B3SOIFDweta0Given = TRUE; break; case B3SOIFD_MOD_WETAB: mod->B3SOIFDwetab = value->rValue; mod->B3SOIFDwetabGiven = TRUE; break; case B3SOIFD_MOD_WDSUB: mod->B3SOIFDwdsub = value->rValue; mod->B3SOIFDwdsubGiven = TRUE; break; case B3SOIFD_MOD_WCIT : mod->B3SOIFDwcit = value->rValue; mod->B3SOIFDwcitGiven = TRUE; break; case B3SOIFD_MOD_WCDSC : mod->B3SOIFDwcdsc = value->rValue; mod->B3SOIFDwcdscGiven = TRUE; break; case B3SOIFD_MOD_WCDSCB : mod->B3SOIFDwcdscb = value->rValue; mod->B3SOIFDwcdscbGiven = TRUE; break; case B3SOIFD_MOD_WCDSCD : mod->B3SOIFDwcdscd = value->rValue; mod->B3SOIFDwcdscdGiven = TRUE; break; case B3SOIFD_MOD_WPCLM: mod->B3SOIFDwpclm = value->rValue; mod->B3SOIFDwpclmGiven = TRUE; break; case B3SOIFD_MOD_WPDIBL1: mod->B3SOIFDwpdibl1 = value->rValue; mod->B3SOIFDwpdibl1Given = TRUE; break; case B3SOIFD_MOD_WPDIBL2: mod->B3SOIFDwpdibl2 = value->rValue; mod->B3SOIFDwpdibl2Given = TRUE; break; case B3SOIFD_MOD_WPDIBLB: mod->B3SOIFDwpdiblb = value->rValue; mod->B3SOIFDwpdiblbGiven = TRUE; break; case B3SOIFD_MOD_WDROUT: mod->B3SOIFDwdrout = value->rValue; mod->B3SOIFDwdroutGiven = TRUE; break; case B3SOIFD_MOD_WPVAG: mod->B3SOIFDwpvag = value->rValue; mod->B3SOIFDwpvagGiven = TRUE; break; case B3SOIFD_MOD_WDELTA : mod->B3SOIFDwdelta = value->rValue; mod->B3SOIFDwdeltaGiven = TRUE; break; case B3SOIFD_MOD_WAII : mod->B3SOIFDwaii = value->rValue; mod->B3SOIFDwaiiGiven = TRUE; break; case B3SOIFD_MOD_WBII : mod->B3SOIFDwbii = value->rValue; mod->B3SOIFDwbiiGiven = TRUE; break; case B3SOIFD_MOD_WCII : mod->B3SOIFDwcii = value->rValue; mod->B3SOIFDwciiGiven = TRUE; break; case B3SOIFD_MOD_WDII : mod->B3SOIFDwdii = value->rValue; mod->B3SOIFDwdiiGiven = TRUE; break; case B3SOIFD_MOD_WALPHA0 : mod->B3SOIFDwalpha0 = value->rValue; mod->B3SOIFDwalpha0Given = TRUE; break; case B3SOIFD_MOD_WALPHA1 : mod->B3SOIFDwalpha1 = value->rValue; mod->B3SOIFDwalpha1Given = TRUE; break; case B3SOIFD_MOD_WBETA0 : mod->B3SOIFDwbeta0 = value->rValue; mod->B3SOIFDwbeta0Given = TRUE; break; case B3SOIFD_MOD_WAGIDL : mod->B3SOIFDwagidl = value->rValue; mod->B3SOIFDwagidlGiven = TRUE; break; case B3SOIFD_MOD_WBGIDL : mod->B3SOIFDwbgidl = value->rValue; mod->B3SOIFDwbgidlGiven = TRUE; break; case B3SOIFD_MOD_WNGIDL : mod->B3SOIFDwngidl = value->rValue; mod->B3SOIFDwngidlGiven = TRUE; break; case B3SOIFD_MOD_WNTUN : mod->B3SOIFDwntun = value->rValue; mod->B3SOIFDwntunGiven = TRUE; break; case B3SOIFD_MOD_WNDIODE : mod->B3SOIFDwndiode = value->rValue; mod->B3SOIFDwndiodeGiven = TRUE; break; case B3SOIFD_MOD_WISBJT : mod->B3SOIFDwisbjt = value->rValue; mod->B3SOIFDwisbjtGiven = TRUE; break; case B3SOIFD_MOD_WISDIF : mod->B3SOIFDwisdif = value->rValue; mod->B3SOIFDwisdifGiven = TRUE; break; case B3SOIFD_MOD_WISREC : mod->B3SOIFDwisrec = value->rValue; mod->B3SOIFDwisrecGiven = TRUE; break; case B3SOIFD_MOD_WISTUN : mod->B3SOIFDwistun = value->rValue; mod->B3SOIFDwistunGiven = TRUE; break; case B3SOIFD_MOD_WEDL : mod->B3SOIFDwedl = value->rValue; mod->B3SOIFDwedlGiven = TRUE; break; case B3SOIFD_MOD_WKBJT1 : mod->B3SOIFDwkbjt1 = value->rValue; mod->B3SOIFDwkbjt1Given = TRUE; break; /* CV Model */ case B3SOIFD_MOD_WVSDFB : mod->B3SOIFDwvsdfb = value->rValue; mod->B3SOIFDwvsdfbGiven = TRUE; break; case B3SOIFD_MOD_WVSDTH : mod->B3SOIFDwvsdth = value->rValue; mod->B3SOIFDwvsdthGiven = TRUE; break; /* Cross-term Dependence */ case B3SOIFD_MOD_PNPEAK: mod->B3SOIFDpnpeak = value->rValue; mod->B3SOIFDpnpeakGiven = TRUE; break; case B3SOIFD_MOD_PNSUB: mod->B3SOIFDpnsub = value->rValue; mod->B3SOIFDpnsubGiven = TRUE; break; case B3SOIFD_MOD_PNGATE: mod->B3SOIFDpngate = value->rValue; mod->B3SOIFDpngateGiven = TRUE; break; case B3SOIFD_MOD_PVTH0: mod->B3SOIFDpvth0 = value->rValue; mod->B3SOIFDpvth0Given = TRUE; break; case B3SOIFD_MOD_PK1: mod->B3SOIFDpk1 = value->rValue; mod->B3SOIFDpk1Given = TRUE; break; case B3SOIFD_MOD_PK2: mod->B3SOIFDpk2 = value->rValue; mod->B3SOIFDpk2Given = TRUE; break; case B3SOIFD_MOD_PK3: mod->B3SOIFDpk3 = value->rValue; mod->B3SOIFDpk3Given = TRUE; break; case B3SOIFD_MOD_PK3B: mod->B3SOIFDpk3b = value->rValue; mod->B3SOIFDpk3bGiven = TRUE; break; case B3SOIFD_MOD_PVBSA: mod->B3SOIFDpvbsa = value->rValue; mod->B3SOIFDpvbsaGiven = TRUE; break; case B3SOIFD_MOD_PDELP: mod->B3SOIFDpdelp = value->rValue; mod->B3SOIFDpdelpGiven = TRUE; break; case B3SOIFD_MOD_PKB1 : mod->B3SOIFDpkb1 = value->rValue; mod->B3SOIFDpkb1Given = TRUE; break; case B3SOIFD_MOD_PKB3 : mod->B3SOIFDpkb3 = value->rValue; mod->B3SOIFDpkb3Given = TRUE; break; case B3SOIFD_MOD_PDVBD0 : mod->B3SOIFDpdvbd0 = value->rValue; mod->B3SOIFDpdvbd0Given = TRUE; break; case B3SOIFD_MOD_PDVBD1 : mod->B3SOIFDpdvbd1 = value->rValue; mod->B3SOIFDpdvbd1Given = TRUE; break; case B3SOIFD_MOD_PW0: mod->B3SOIFDpw0 = value->rValue; mod->B3SOIFDpw0Given = TRUE; break; case B3SOIFD_MOD_PNLX: mod->B3SOIFDpnlx = value->rValue; mod->B3SOIFDpnlxGiven = TRUE; break; case B3SOIFD_MOD_PDVT0: mod->B3SOIFDpdvt0 = value->rValue; mod->B3SOIFDpdvt0Given = TRUE; break; case B3SOIFD_MOD_PDVT1: mod->B3SOIFDpdvt1 = value->rValue; mod->B3SOIFDpdvt1Given = TRUE; break; case B3SOIFD_MOD_PDVT2: mod->B3SOIFDpdvt2 = value->rValue; mod->B3SOIFDpdvt2Given = TRUE; break; case B3SOIFD_MOD_PDVT0W: mod->B3SOIFDpdvt0w = value->rValue; mod->B3SOIFDpdvt0wGiven = TRUE; break; case B3SOIFD_MOD_PDVT1W: mod->B3SOIFDpdvt1w = value->rValue; mod->B3SOIFDpdvt1wGiven = TRUE; break; case B3SOIFD_MOD_PDVT2W: mod->B3SOIFDpdvt2w = value->rValue; mod->B3SOIFDpdvt2wGiven = TRUE; break; case B3SOIFD_MOD_PU0 : mod->B3SOIFDpu0 = value->rValue; mod->B3SOIFDpu0Given = TRUE; break; case B3SOIFD_MOD_PUA: mod->B3SOIFDpua = value->rValue; mod->B3SOIFDpuaGiven = TRUE; break; case B3SOIFD_MOD_PUB: mod->B3SOIFDpub = value->rValue; mod->B3SOIFDpubGiven = TRUE; break; case B3SOIFD_MOD_PUC: mod->B3SOIFDpuc = value->rValue; mod->B3SOIFDpucGiven = TRUE; break; case B3SOIFD_MOD_PVSAT: mod->B3SOIFDpvsat = value->rValue; mod->B3SOIFDpvsatGiven = TRUE; break; case B3SOIFD_MOD_PA0: mod->B3SOIFDpa0 = value->rValue; mod->B3SOIFDpa0Given = TRUE; break; case B3SOIFD_MOD_PAGS: mod->B3SOIFDpags= value->rValue; mod->B3SOIFDpagsGiven = TRUE; break; case B3SOIFD_MOD_PB0 : mod->B3SOIFDpb0 = value->rValue; mod->B3SOIFDpb0Given = TRUE; break; case B3SOIFD_MOD_PB1 : mod->B3SOIFDpb1 = value->rValue; mod->B3SOIFDpb1Given = TRUE; break; case B3SOIFD_MOD_PKETA: mod->B3SOIFDpketa = value->rValue; mod->B3SOIFDpketaGiven = TRUE; break; case B3SOIFD_MOD_PABP: mod->B3SOIFDpabp = value->rValue; mod->B3SOIFDpabpGiven = TRUE; break; case B3SOIFD_MOD_PMXC: mod->B3SOIFDpmxc = value->rValue; mod->B3SOIFDpmxcGiven = TRUE; break; case B3SOIFD_MOD_PADICE0: mod->B3SOIFDpadice0 = value->rValue; mod->B3SOIFDpadice0Given = TRUE; break; case B3SOIFD_MOD_PA1: mod->B3SOIFDpa1 = value->rValue; mod->B3SOIFDpa1Given = TRUE; break; case B3SOIFD_MOD_PA2: mod->B3SOIFDpa2 = value->rValue; mod->B3SOIFDpa2Given = TRUE; break; case B3SOIFD_MOD_PRDSW: mod->B3SOIFDprdsw = value->rValue; mod->B3SOIFDprdswGiven = TRUE; break; case B3SOIFD_MOD_PPRWB: mod->B3SOIFDpprwb = value->rValue; mod->B3SOIFDpprwbGiven = TRUE; break; case B3SOIFD_MOD_PPRWG: mod->B3SOIFDpprwg = value->rValue; mod->B3SOIFDpprwgGiven = TRUE; break; case B3SOIFD_MOD_PWR : mod->B3SOIFDpwr = value->rValue; mod->B3SOIFDpwrGiven = TRUE; break; case B3SOIFD_MOD_PNFACTOR : mod->B3SOIFDpnfactor = value->rValue; mod->B3SOIFDpnfactorGiven = TRUE; break; case B3SOIFD_MOD_PDWG : mod->B3SOIFDpdwg = value->rValue; mod->B3SOIFDpdwgGiven = TRUE; break; case B3SOIFD_MOD_PDWB : mod->B3SOIFDpdwb = value->rValue; mod->B3SOIFDpdwbGiven = TRUE; break; case B3SOIFD_MOD_PVOFF: mod->B3SOIFDpvoff = value->rValue; mod->B3SOIFDpvoffGiven = TRUE; break; case B3SOIFD_MOD_PETA0: mod->B3SOIFDpeta0 = value->rValue; mod->B3SOIFDpeta0Given = TRUE; break; case B3SOIFD_MOD_PETAB: mod->B3SOIFDpetab = value->rValue; mod->B3SOIFDpetabGiven = TRUE; break; case B3SOIFD_MOD_PDSUB: mod->B3SOIFDpdsub = value->rValue; mod->B3SOIFDpdsubGiven = TRUE; break; case B3SOIFD_MOD_PCIT : mod->B3SOIFDpcit = value->rValue; mod->B3SOIFDpcitGiven = TRUE; break; case B3SOIFD_MOD_PCDSC : mod->B3SOIFDpcdsc = value->rValue; mod->B3SOIFDpcdscGiven = TRUE; break; case B3SOIFD_MOD_PCDSCB : mod->B3SOIFDpcdscb = value->rValue; mod->B3SOIFDpcdscbGiven = TRUE; break; case B3SOIFD_MOD_PCDSCD : mod->B3SOIFDpcdscd = value->rValue; mod->B3SOIFDpcdscdGiven = TRUE; break; case B3SOIFD_MOD_PPCLM: mod->B3SOIFDppclm = value->rValue; mod->B3SOIFDppclmGiven = TRUE; break; case B3SOIFD_MOD_PPDIBL1: mod->B3SOIFDppdibl1 = value->rValue; mod->B3SOIFDppdibl1Given = TRUE; break; case B3SOIFD_MOD_PPDIBL2: mod->B3SOIFDppdibl2 = value->rValue; mod->B3SOIFDppdibl2Given = TRUE; break; case B3SOIFD_MOD_PPDIBLB: mod->B3SOIFDppdiblb = value->rValue; mod->B3SOIFDppdiblbGiven = TRUE; break; case B3SOIFD_MOD_PDROUT: mod->B3SOIFDpdrout = value->rValue; mod->B3SOIFDpdroutGiven = TRUE; break; case B3SOIFD_MOD_PPVAG: mod->B3SOIFDppvag = value->rValue; mod->B3SOIFDppvagGiven = TRUE; break; case B3SOIFD_MOD_PDELTA : mod->B3SOIFDpdelta = value->rValue; mod->B3SOIFDpdeltaGiven = TRUE; break; case B3SOIFD_MOD_PAII : mod->B3SOIFDpaii = value->rValue; mod->B3SOIFDpaiiGiven = TRUE; break; case B3SOIFD_MOD_PBII : mod->B3SOIFDpbii = value->rValue; mod->B3SOIFDpbiiGiven = TRUE; break; case B3SOIFD_MOD_PCII : mod->B3SOIFDpcii = value->rValue; mod->B3SOIFDpciiGiven = TRUE; break; case B3SOIFD_MOD_PDII : mod->B3SOIFDpdii = value->rValue; mod->B3SOIFDpdiiGiven = TRUE; break; case B3SOIFD_MOD_PALPHA0 : mod->B3SOIFDpalpha0 = value->rValue; mod->B3SOIFDpalpha0Given = TRUE; break; case B3SOIFD_MOD_PALPHA1 : mod->B3SOIFDpalpha1 = value->rValue; mod->B3SOIFDpalpha1Given = TRUE; break; case B3SOIFD_MOD_PBETA0 : mod->B3SOIFDpbeta0 = value->rValue; mod->B3SOIFDpbeta0Given = TRUE; break; case B3SOIFD_MOD_PAGIDL : mod->B3SOIFDpagidl = value->rValue; mod->B3SOIFDpagidlGiven = TRUE; break; case B3SOIFD_MOD_PBGIDL : mod->B3SOIFDpbgidl = value->rValue; mod->B3SOIFDpbgidlGiven = TRUE; break; case B3SOIFD_MOD_PNGIDL : mod->B3SOIFDpngidl = value->rValue; mod->B3SOIFDpngidlGiven = TRUE; break; case B3SOIFD_MOD_PNTUN : mod->B3SOIFDpntun = value->rValue; mod->B3SOIFDpntunGiven = TRUE; break; case B3SOIFD_MOD_PNDIODE : mod->B3SOIFDpndiode = value->rValue; mod->B3SOIFDpndiodeGiven = TRUE; break; case B3SOIFD_MOD_PISBJT : mod->B3SOIFDpisbjt = value->rValue; mod->B3SOIFDpisbjtGiven = TRUE; break; case B3SOIFD_MOD_PISDIF : mod->B3SOIFDpisdif = value->rValue; mod->B3SOIFDpisdifGiven = TRUE; break; case B3SOIFD_MOD_PISREC : mod->B3SOIFDpisrec = value->rValue; mod->B3SOIFDpisrecGiven = TRUE; break; case B3SOIFD_MOD_PISTUN : mod->B3SOIFDpistun = value->rValue; mod->B3SOIFDpistunGiven = TRUE; break; case B3SOIFD_MOD_PEDL : mod->B3SOIFDpedl = value->rValue; mod->B3SOIFDpedlGiven = TRUE; break; case B3SOIFD_MOD_PKBJT1 : mod->B3SOIFDpkbjt1 = value->rValue; mod->B3SOIFDpkbjt1Given = TRUE; break; /* CV Model */ case B3SOIFD_MOD_PVSDFB : mod->B3SOIFDpvsdfb = value->rValue; mod->B3SOIFDpvsdfbGiven = TRUE; break; case B3SOIFD_MOD_PVSDTH : mod->B3SOIFDpvsdth = value->rValue; mod->B3SOIFDpvsdthGiven = TRUE; break; /* Added for binning - END */ case B3SOIFD_MOD_NMOS : if(value->iValue) { mod->B3SOIFDtype = 1; mod->B3SOIFDtypeGiven = TRUE; } break; case B3SOIFD_MOD_PMOS : if(value->iValue) { mod->B3SOIFDtype = - 1; mod->B3SOIFDtypeGiven = TRUE; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_fd/b3soifdtrunc.c0000644000175000017500000000237613546075722024145 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang Modified by Paolo Nenzi 2002 File: b3soifdtrunc.c 98/5/01 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMFD2.1 release */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b3soifddef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIFDtrunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { B3SOIFDmodel *model = (B3SOIFDmodel*)inModel; B3SOIFDinstance *here; #ifdef STEPDEBUG double debugtemp; #endif /* STEPDEBUG */ for (; model != NULL; model = B3SOIFDnextModel(model)) { for (here = B3SOIFDinstances(model); here != NULL; here = B3SOIFDnextInstance(here)) { #ifdef STEPDEBUG debugtemp = *timeStep; #endif /* STEPDEBUG */ CKTterr(here->B3SOIFDqb,ckt,timeStep); CKTterr(here->B3SOIFDqg,ckt,timeStep); CKTterr(here->B3SOIFDqd,ckt,timeStep); #ifdef STEPDEBUG if(debugtemp != *timeStep) { printf("device %s reduces step from %g to %g\n", here->B3SOIFDname,debugtemp,*timeStep); } #endif /* STEPDEBUG */ } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_fd/BsimTerms_use0000644000175000017500000000247313546075722024076 0ustar carstencarstenThe terms under which the software is provided are as the following. Software is distributed as is, completely without warranty or service support. The University of California and its employees are not liable for the condition or performance of the software. The University owns the copyright but shall not be liable for any infringement of copyright or other proprietary rights brought by third parties against the users of the software. The University of California hereby disclaims all implied warranties. The University of California grants the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for the University of California code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge the UC Berkeley BSIM Research Group that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to obey all U.S. Government restrictions governing redistribution or export of the software. 4. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others. tmpk8ny_4pz/src/spicelib/devices/bsim3soi_fd/b3soifdtemp.c0000644000175000017500000012712513546075722023757 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soifdtemp.c 98/5/01 Modified by Pin Su, Wei Jin 99/9/27 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMFD2.1 release */ /* Lmin, Lmax, Wmin, Wmax */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "b3soifddef.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define Kb 1.3806226e-23 #define KboQ 8.617087e-5 /* Kb / q where q = 1.60219e-19 */ #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define PI 3.141592654 #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define Charge_q 1.60219e-19 /* ARGSUSED */ int B3SOIFDtemp(GENmodel *inModel, CKTcircuit *ckt) { B3SOIFDmodel *model = (B3SOIFDmodel*) inModel; B3SOIFDinstance *here; struct b3soifdSizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam=NULL; double tmp, tmp1, tmp2, Eg, Eg0, ni, T0, T1, T2, T3, T4, T5, T6, Ldrn, Wdrn; double Temp, TRatio, Inv_L, Inv_W, Inv_LW, Vtm0, Tnom; double SDphi, SDgamma; int Size_Not_Found; /* loop through all the B3SOIFD device models */ for (; model != NULL; model = B3SOIFDnextModel(model)) { Temp = ckt->CKTtemp; if (model->B3SOIFDGatesidewallJctPotential < 0.1) model->B3SOIFDGatesidewallJctPotential = 0.1; struct b3soifdSizeDependParam *p = model->pSizeDependParamKnot; while (p) { struct b3soifdSizeDependParam *next_p = p->pNext; FREE(p); p = next_p; } model->pSizeDependParamKnot = NULL; pLastKnot = NULL; Tnom = model->B3SOIFDtnom; TRatio = Temp / Tnom; model->B3SOIFDvcrit = CONSTvt0 * log(CONSTvt0 / (CONSTroot2 * 1.0e-14)); model->B3SOIFDfactor1 = sqrt(EPSSI / EPSOX * model->B3SOIFDtox); Vtm0 = KboQ * Tnom; Eg0 = 1.16 - 7.02e-4 * Tnom * Tnom / (Tnom + 1108.0); model->B3SOIFDeg0 = Eg0; model->B3SOIFDvtm = KboQ * Temp; Eg = 1.16 - 7.02e-4 * Temp * Temp / (Temp + 1108.0); /* ni is in cm^-3 */ ni = 1.45e10 * (Temp / 300.15) * sqrt(Temp / 300.15) * exp(21.5565981 - Eg / (2.0 * model->B3SOIFDvtm)); /* loop through all the instances of the model */ /* MCJ: Length and Width not initialized */ for (here = B3SOIFDinstances(model); here != NULL; here = B3SOIFDnextInstance(here)) { here->B3SOIFDrbodyext = here->B3SOIFDbodySquares * model->B3SOIFDrbsh; pSizeDependParamKnot = model->pSizeDependParamKnot; Size_Not_Found = 1; while ((pSizeDependParamKnot != NULL) && Size_Not_Found) { if ((here->B3SOIFDl == pSizeDependParamKnot->Length) && (here->B3SOIFDw == pSizeDependParamKnot->Width) && (here->B3SOIFDrth0 == pSizeDependParamKnot->Rth0) && (here->B3SOIFDcth0 == pSizeDependParamKnot->Cth0)) { Size_Not_Found = 0; here->pParam = pSizeDependParamKnot; } else { pLastKnot = pSizeDependParamKnot; pSizeDependParamKnot = pSizeDependParamKnot->pNext; } } if (Size_Not_Found) { pParam = TMALLOC(struct b3soifdSizeDependParam, 1); if (pLastKnot == NULL) model->pSizeDependParamKnot = pParam; else pLastKnot->pNext = pParam; pParam->pNext = NULL; here->pParam = pParam; Ldrn = here->B3SOIFDl; Wdrn = here->B3SOIFDw; pParam->Length = Ldrn; pParam->Width = Wdrn; pParam->Rth0 = here->B3SOIFDrth0; pParam->Cth0 = here->B3SOIFDcth0; T0 = pow(Ldrn, model->B3SOIFDLln); T1 = pow(Wdrn, model->B3SOIFDLwn); tmp1 = model->B3SOIFDLl / T0 + model->B3SOIFDLw / T1 + model->B3SOIFDLwl / (T0 * T1); pParam->B3SOIFDdl = model->B3SOIFDLint + tmp1; pParam->B3SOIFDdlc = model->B3SOIFDdlc + tmp1; T2 = pow(Ldrn, model->B3SOIFDWln); T3 = pow(Wdrn, model->B3SOIFDWwn); tmp2 = model->B3SOIFDWl / T2 + model->B3SOIFDWw / T3 + model->B3SOIFDWwl / (T2 * T3); pParam->B3SOIFDdw = model->B3SOIFDWint + tmp2; pParam->B3SOIFDdwc = model->B3SOIFDdwc + tmp2; pParam->B3SOIFDleff = here->B3SOIFDl - 2.0 * pParam->B3SOIFDdl; if (pParam->B3SOIFDleff <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "B3SOIFD: mosfet %s, model %s: Effective channel length <= 0", model->B3SOIFDmodName, here->B3SOIFDname); return(E_BADPARM); } pParam->B3SOIFDweff = here->B3SOIFDw - 2.0 * pParam->B3SOIFDdw; if (pParam->B3SOIFDweff <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "B3SOIFD: mosfet %s, model %s: Effective channel width <= 0", model->B3SOIFDmodName, here->B3SOIFDname); return(E_BADPARM); } pParam->B3SOIFDleffCV = here->B3SOIFDl - 2.0 * pParam->B3SOIFDdlc; if (pParam->B3SOIFDleffCV <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "B3SOIFD: mosfet %s, model %s: Effective channel length for C-V <= 0", model->B3SOIFDmodName, here->B3SOIFDname); return(E_BADPARM); } pParam->B3SOIFDweffCV = here->B3SOIFDw - 2.0 * pParam->B3SOIFDdwc; if (pParam->B3SOIFDweffCV <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "B3SOIFD: mosfet %s, model %s: Effective channel width for C-V <= 0", model->B3SOIFDmodName, here->B3SOIFDname); return(E_BADPARM); } /* Not binned - START */ pParam->B3SOIFDat = model->B3SOIFDat; pParam->B3SOIFDgamma1 = model->B3SOIFDgamma1; pParam->B3SOIFDgamma2 = model->B3SOIFDgamma2; pParam->B3SOIFDvbx = model->B3SOIFDvbx; pParam->B3SOIFDvbm = model->B3SOIFDvbm; pParam->B3SOIFDxt = model->B3SOIFDxt; pParam->B3SOIFDkt1 = model->B3SOIFDkt1; pParam->B3SOIFDkt1l = model->B3SOIFDkt1l; pParam->B3SOIFDkt2 = model->B3SOIFDkt2; pParam->B3SOIFDua1 = model->B3SOIFDua1; pParam->B3SOIFDub1 = model->B3SOIFDub1; pParam->B3SOIFDuc1 = model->B3SOIFDuc1; pParam->B3SOIFDute = model->B3SOIFDute; pParam->B3SOIFDprt = model->B3SOIFDprt; /* Not binned - END */ /* CV model */ pParam->B3SOIFDcgsl = model->B3SOIFDcgsl; pParam->B3SOIFDcgdl = model->B3SOIFDcgdl; pParam->B3SOIFDckappa = model->B3SOIFDckappa; pParam->B3SOIFDcf = model->B3SOIFDcf; pParam->B3SOIFDclc = model->B3SOIFDclc; pParam->B3SOIFDcle = model->B3SOIFDcle; pParam->B3SOIFDabulkCVfactor = pow(1.0+(pParam->B3SOIFDclc / pParam->B3SOIFDleff), pParam->B3SOIFDcle); /* Added for binning - START */ if (model->B3SOIFDbinUnit == 1) { Inv_L = 1.0e-6 / pParam->B3SOIFDleff; Inv_W = 1.0e-6 / pParam->B3SOIFDweff; Inv_LW = 1.0e-12 / (pParam->B3SOIFDleff * pParam->B3SOIFDweff); } else { Inv_L = 1.0 / pParam->B3SOIFDleff; Inv_W = 1.0 / pParam->B3SOIFDweff; Inv_LW = 1.0 / (pParam->B3SOIFDleff * pParam->B3SOIFDweff); } pParam->B3SOIFDnpeak = model->B3SOIFDnpeak + model->B3SOIFDlnpeak * Inv_L + model->B3SOIFDwnpeak * Inv_W + model->B3SOIFDpnpeak * Inv_LW; pParam->B3SOIFDnsub = model->B3SOIFDnsub + model->B3SOIFDlnsub * Inv_L + model->B3SOIFDwnsub * Inv_W + model->B3SOIFDpnsub * Inv_LW; pParam->B3SOIFDngate = model->B3SOIFDngate + model->B3SOIFDlngate * Inv_L + model->B3SOIFDwngate * Inv_W + model->B3SOIFDpngate * Inv_LW; pParam->B3SOIFDvth0 = model->B3SOIFDvth0 + model->B3SOIFDlvth0 * Inv_L + model->B3SOIFDwvth0 * Inv_W + model->B3SOIFDpvth0 * Inv_LW; pParam->B3SOIFDk1 = model->B3SOIFDk1 + model->B3SOIFDlk1 * Inv_L + model->B3SOIFDwk1 * Inv_W + model->B3SOIFDpk1 * Inv_LW; pParam->B3SOIFDk2 = model->B3SOIFDk2 + model->B3SOIFDlk2 * Inv_L + model->B3SOIFDwk2 * Inv_W + model->B3SOIFDpk2 * Inv_LW; pParam->B3SOIFDk3 = model->B3SOIFDk3 + model->B3SOIFDlk3 * Inv_L + model->B3SOIFDwk3 * Inv_W + model->B3SOIFDpk3 * Inv_LW; pParam->B3SOIFDk3b = model->B3SOIFDk3b + model->B3SOIFDlk3b * Inv_L + model->B3SOIFDwk3b * Inv_W + model->B3SOIFDpk3b * Inv_LW; pParam->B3SOIFDvbsa = model->B3SOIFDvbsa + model->B3SOIFDlvbsa * Inv_L + model->B3SOIFDwvbsa * Inv_W + model->B3SOIFDpvbsa * Inv_LW; pParam->B3SOIFDdelp = model->B3SOIFDdelp + model->B3SOIFDldelp * Inv_L + model->B3SOIFDwdelp * Inv_W + model->B3SOIFDpdelp * Inv_LW; pParam->B3SOIFDkb1 = model->B3SOIFDkb1 + model->B3SOIFDlkb1 * Inv_L + model->B3SOIFDwkb1 * Inv_W + model->B3SOIFDpkb1 * Inv_LW; pParam->B3SOIFDkb3 = model->B3SOIFDkb3 + model->B3SOIFDlkb3 * Inv_L + model->B3SOIFDwkb3 * Inv_W + model->B3SOIFDpkb3 * Inv_LW; pParam->B3SOIFDdvbd0 = model->B3SOIFDdvbd0 + model->B3SOIFDldvbd0 * Inv_L + model->B3SOIFDwdvbd0 * Inv_W + model->B3SOIFDpdvbd0 * Inv_LW; pParam->B3SOIFDdvbd1 = model->B3SOIFDdvbd1 + model->B3SOIFDldvbd1 * Inv_L + model->B3SOIFDwdvbd1 * Inv_W + model->B3SOIFDpdvbd1 * Inv_LW; pParam->B3SOIFDw0 = model->B3SOIFDw0 + model->B3SOIFDlw0 * Inv_L + model->B3SOIFDww0 * Inv_W + model->B3SOIFDpw0 * Inv_LW; pParam->B3SOIFDnlx = model->B3SOIFDnlx + model->B3SOIFDlnlx * Inv_L + model->B3SOIFDwnlx * Inv_W + model->B3SOIFDpnlx * Inv_LW; pParam->B3SOIFDdvt0 = model->B3SOIFDdvt0 + model->B3SOIFDldvt0 * Inv_L + model->B3SOIFDwdvt0 * Inv_W + model->B3SOIFDpdvt0 * Inv_LW; pParam->B3SOIFDdvt1 = model->B3SOIFDdvt1 + model->B3SOIFDldvt1 * Inv_L + model->B3SOIFDwdvt1 * Inv_W + model->B3SOIFDpdvt1 * Inv_LW; pParam->B3SOIFDdvt2 = model->B3SOIFDdvt2 + model->B3SOIFDldvt2 * Inv_L + model->B3SOIFDwdvt2 * Inv_W + model->B3SOIFDpdvt2 * Inv_LW; pParam->B3SOIFDdvt0w = model->B3SOIFDdvt0w + model->B3SOIFDldvt0w * Inv_L + model->B3SOIFDwdvt0w * Inv_W + model->B3SOIFDpdvt0w * Inv_LW; pParam->B3SOIFDdvt1w = model->B3SOIFDdvt1w + model->B3SOIFDldvt1w * Inv_L + model->B3SOIFDwdvt1w * Inv_W + model->B3SOIFDpdvt1w * Inv_LW; pParam->B3SOIFDdvt2w = model->B3SOIFDdvt2w + model->B3SOIFDldvt2w * Inv_L + model->B3SOIFDwdvt2w * Inv_W + model->B3SOIFDpdvt2w * Inv_LW; pParam->B3SOIFDu0 = model->B3SOIFDu0 + model->B3SOIFDlu0 * Inv_L + model->B3SOIFDwu0 * Inv_W + model->B3SOIFDpu0 * Inv_LW; pParam->B3SOIFDua = model->B3SOIFDua + model->B3SOIFDlua * Inv_L + model->B3SOIFDwua * Inv_W + model->B3SOIFDpua * Inv_LW; pParam->B3SOIFDub = model->B3SOIFDub + model->B3SOIFDlub * Inv_L + model->B3SOIFDwub * Inv_W + model->B3SOIFDpub * Inv_LW; pParam->B3SOIFDuc = model->B3SOIFDuc + model->B3SOIFDluc * Inv_L + model->B3SOIFDwuc * Inv_W + model->B3SOIFDpuc * Inv_LW; pParam->B3SOIFDvsat = model->B3SOIFDvsat + model->B3SOIFDlvsat * Inv_L + model->B3SOIFDwvsat * Inv_W + model->B3SOIFDpvsat * Inv_LW; pParam->B3SOIFDa0 = model->B3SOIFDa0 + model->B3SOIFDla0 * Inv_L + model->B3SOIFDwa0 * Inv_W + model->B3SOIFDpa0 * Inv_LW; pParam->B3SOIFDags = model->B3SOIFDags + model->B3SOIFDlags * Inv_L + model->B3SOIFDwags * Inv_W + model->B3SOIFDpags * Inv_LW; pParam->B3SOIFDb0 = model->B3SOIFDb0 + model->B3SOIFDlb0 * Inv_L + model->B3SOIFDwb0 * Inv_W + model->B3SOIFDpb0 * Inv_LW; pParam->B3SOIFDb1 = model->B3SOIFDb1 + model->B3SOIFDlb1 * Inv_L + model->B3SOIFDwb1 * Inv_W + model->B3SOIFDpb1 * Inv_LW; pParam->B3SOIFDketa = model->B3SOIFDketa + model->B3SOIFDlketa * Inv_L + model->B3SOIFDwketa * Inv_W + model->B3SOIFDpketa * Inv_LW; pParam->B3SOIFDabp = model->B3SOIFDabp + model->B3SOIFDlabp * Inv_L + model->B3SOIFDwabp * Inv_W + model->B3SOIFDpabp * Inv_LW; pParam->B3SOIFDmxc = model->B3SOIFDmxc + model->B3SOIFDlmxc * Inv_L + model->B3SOIFDwmxc * Inv_W + model->B3SOIFDpmxc * Inv_LW; pParam->B3SOIFDadice0 = model->B3SOIFDadice0 + model->B3SOIFDladice0 * Inv_L + model->B3SOIFDwadice0 * Inv_W + model->B3SOIFDpadice0 * Inv_LW; pParam->B3SOIFDa1 = model->B3SOIFDa1 + model->B3SOIFDla1 * Inv_L + model->B3SOIFDwa1 * Inv_W + model->B3SOIFDpa1 * Inv_LW; pParam->B3SOIFDa2 = model->B3SOIFDa2 + model->B3SOIFDla2 * Inv_L + model->B3SOIFDwa2 * Inv_W + model->B3SOIFDpa2 * Inv_LW; pParam->B3SOIFDrdsw = model->B3SOIFDrdsw + model->B3SOIFDlrdsw * Inv_L + model->B3SOIFDwrdsw * Inv_W + model->B3SOIFDprdsw * Inv_LW; pParam->B3SOIFDprwb = model->B3SOIFDprwb + model->B3SOIFDlprwb * Inv_L + model->B3SOIFDwprwb * Inv_W + model->B3SOIFDpprwb * Inv_LW; pParam->B3SOIFDprwg = model->B3SOIFDprwg + model->B3SOIFDlprwg * Inv_L + model->B3SOIFDwprwg * Inv_W + model->B3SOIFDpprwg * Inv_LW; pParam->B3SOIFDwr = model->B3SOIFDwr + model->B3SOIFDlwr * Inv_L + model->B3SOIFDwwr * Inv_W + model->B3SOIFDpwr * Inv_LW; pParam->B3SOIFDnfactor = model->B3SOIFDnfactor + model->B3SOIFDlnfactor * Inv_L + model->B3SOIFDwnfactor * Inv_W + model->B3SOIFDpnfactor * Inv_LW; pParam->B3SOIFDdwg = model->B3SOIFDdwg + model->B3SOIFDldwg * Inv_L + model->B3SOIFDwdwg * Inv_W + model->B3SOIFDpdwg * Inv_LW; pParam->B3SOIFDdwb = model->B3SOIFDdwb + model->B3SOIFDldwb * Inv_L + model->B3SOIFDwdwb * Inv_W + model->B3SOIFDpdwb * Inv_LW; pParam->B3SOIFDvoff = model->B3SOIFDvoff + model->B3SOIFDlvoff * Inv_L + model->B3SOIFDwvoff * Inv_W + model->B3SOIFDpvoff * Inv_LW; pParam->B3SOIFDeta0 = model->B3SOIFDeta0 + model->B3SOIFDleta0 * Inv_L + model->B3SOIFDweta0 * Inv_W + model->B3SOIFDpeta0 * Inv_LW; pParam->B3SOIFDetab = model->B3SOIFDetab + model->B3SOIFDletab * Inv_L + model->B3SOIFDwetab * Inv_W + model->B3SOIFDpetab * Inv_LW; pParam->B3SOIFDdsub = model->B3SOIFDdsub + model->B3SOIFDldsub * Inv_L + model->B3SOIFDwdsub * Inv_W + model->B3SOIFDpdsub * Inv_LW; pParam->B3SOIFDcit = model->B3SOIFDcit + model->B3SOIFDlcit * Inv_L + model->B3SOIFDwcit * Inv_W + model->B3SOIFDpcit * Inv_LW; pParam->B3SOIFDcdsc = model->B3SOIFDcdsc + model->B3SOIFDlcdsc * Inv_L + model->B3SOIFDwcdsc * Inv_W + model->B3SOIFDpcdsc * Inv_LW; pParam->B3SOIFDcdscb = model->B3SOIFDcdscb + model->B3SOIFDlcdscb * Inv_L + model->B3SOIFDwcdscb * Inv_W + model->B3SOIFDpcdscb * Inv_LW; pParam->B3SOIFDcdscd = model->B3SOIFDcdscd + model->B3SOIFDlcdscd * Inv_L + model->B3SOIFDwcdscd * Inv_W + model->B3SOIFDpcdscd * Inv_LW; pParam->B3SOIFDpclm = model->B3SOIFDpclm + model->B3SOIFDlpclm * Inv_L + model->B3SOIFDwpclm * Inv_W + model->B3SOIFDppclm * Inv_LW; pParam->B3SOIFDpdibl1 = model->B3SOIFDpdibl1 + model->B3SOIFDlpdibl1 * Inv_L + model->B3SOIFDwpdibl1 * Inv_W + model->B3SOIFDppdibl1 * Inv_LW; pParam->B3SOIFDpdibl2 = model->B3SOIFDpdibl2 + model->B3SOIFDlpdibl2 * Inv_L + model->B3SOIFDwpdibl2 * Inv_W + model->B3SOIFDppdibl2 * Inv_LW; pParam->B3SOIFDpdiblb = model->B3SOIFDpdiblb + model->B3SOIFDlpdiblb * Inv_L + model->B3SOIFDwpdiblb * Inv_W + model->B3SOIFDppdiblb * Inv_LW; pParam->B3SOIFDdrout = model->B3SOIFDdrout + model->B3SOIFDldrout * Inv_L + model->B3SOIFDwdrout * Inv_W + model->B3SOIFDpdrout * Inv_LW; pParam->B3SOIFDpvag = model->B3SOIFDpvag + model->B3SOIFDlpvag * Inv_L + model->B3SOIFDwpvag * Inv_W + model->B3SOIFDppvag * Inv_LW; pParam->B3SOIFDdelta = model->B3SOIFDdelta + model->B3SOIFDldelta * Inv_L + model->B3SOIFDwdelta * Inv_W + model->B3SOIFDpdelta * Inv_LW; pParam->B3SOIFDaii = model->B3SOIFDaii + model->B3SOIFDlaii * Inv_L + model->B3SOIFDwaii * Inv_W + model->B3SOIFDpaii * Inv_LW; pParam->B3SOIFDbii = model->B3SOIFDbii + model->B3SOIFDlbii * Inv_L + model->B3SOIFDwbii * Inv_W + model->B3SOIFDpbii * Inv_LW; pParam->B3SOIFDcii = model->B3SOIFDcii + model->B3SOIFDlcii * Inv_L + model->B3SOIFDwcii * Inv_W + model->B3SOIFDpcii * Inv_LW; pParam->B3SOIFDdii = model->B3SOIFDdii + model->B3SOIFDldii * Inv_L + model->B3SOIFDwdii * Inv_W + model->B3SOIFDpdii * Inv_LW; pParam->B3SOIFDalpha0 = model->B3SOIFDalpha0 + model->B3SOIFDlalpha0 * Inv_L + model->B3SOIFDwalpha0 * Inv_W + model->B3SOIFDpalpha0 * Inv_LW; pParam->B3SOIFDalpha1 = model->B3SOIFDalpha1 + model->B3SOIFDlalpha1 * Inv_L + model->B3SOIFDwalpha1 * Inv_W + model->B3SOIFDpalpha1 * Inv_LW; pParam->B3SOIFDbeta0 = model->B3SOIFDbeta0 + model->B3SOIFDlbeta0 * Inv_L + model->B3SOIFDwbeta0 * Inv_W + model->B3SOIFDpbeta0 * Inv_LW; pParam->B3SOIFDagidl = model->B3SOIFDagidl + model->B3SOIFDlagidl * Inv_L + model->B3SOIFDwagidl * Inv_W + model->B3SOIFDpagidl * Inv_LW; pParam->B3SOIFDbgidl = model->B3SOIFDbgidl + model->B3SOIFDlbgidl * Inv_L + model->B3SOIFDwbgidl * Inv_W + model->B3SOIFDpbgidl * Inv_LW; pParam->B3SOIFDngidl = model->B3SOIFDngidl + model->B3SOIFDlngidl * Inv_L + model->B3SOIFDwngidl * Inv_W + model->B3SOIFDpngidl * Inv_LW; pParam->B3SOIFDntun = model->B3SOIFDntun + model->B3SOIFDlntun * Inv_L + model->B3SOIFDwntun * Inv_W + model->B3SOIFDpntun * Inv_LW; pParam->B3SOIFDndiode = model->B3SOIFDndiode + model->B3SOIFDlndiode * Inv_L + model->B3SOIFDwndiode * Inv_W + model->B3SOIFDpndiode * Inv_LW; pParam->B3SOIFDisbjt = model->B3SOIFDisbjt + model->B3SOIFDlisbjt * Inv_L + model->B3SOIFDwisbjt * Inv_W + model->B3SOIFDpisbjt * Inv_LW; pParam->B3SOIFDisdif = model->B3SOIFDisdif + model->B3SOIFDlisdif * Inv_L + model->B3SOIFDwisdif * Inv_W + model->B3SOIFDpisdif * Inv_LW; pParam->B3SOIFDisrec = model->B3SOIFDisrec + model->B3SOIFDlisrec * Inv_L + model->B3SOIFDwisrec * Inv_W + model->B3SOIFDpisrec * Inv_LW; pParam->B3SOIFDistun = model->B3SOIFDistun + model->B3SOIFDlistun * Inv_L + model->B3SOIFDwistun * Inv_W + model->B3SOIFDpistun * Inv_LW; pParam->B3SOIFDedl = model->B3SOIFDedl + model->B3SOIFDledl * Inv_L + model->B3SOIFDwedl * Inv_W + model->B3SOIFDpedl * Inv_LW; pParam->B3SOIFDkbjt1 = model->B3SOIFDkbjt1 + model->B3SOIFDlkbjt1 * Inv_L + model->B3SOIFDwkbjt1 * Inv_W + model->B3SOIFDpkbjt1 * Inv_LW; /* CV model */ pParam->B3SOIFDvsdfb = model->B3SOIFDvsdfb + model->B3SOIFDlvsdfb * Inv_L + model->B3SOIFDwvsdfb * Inv_W + model->B3SOIFDpvsdfb * Inv_LW; pParam->B3SOIFDvsdth = model->B3SOIFDvsdth + model->B3SOIFDlvsdth * Inv_L + model->B3SOIFDwvsdth * Inv_W + model->B3SOIFDpvsdth * Inv_LW; /* Added for binning - END */ T0 = (TRatio - 1.0); pParam->B3SOIFDuatemp = pParam->B3SOIFDua; /* save ua, ub, and uc for b3soifdld.c */ pParam->B3SOIFDubtemp = pParam->B3SOIFDub; pParam->B3SOIFDuctemp = pParam->B3SOIFDuc; pParam->B3SOIFDrds0denom = pow(pParam->B3SOIFDweff * 1E6, pParam->B3SOIFDwr); pParam->B3SOIFDrth = here->B3SOIFDrth0 * sqrt(model->B3SOIFDtbox / model->B3SOIFDtsi) / pParam->B3SOIFDweff; pParam->B3SOIFDcth = here->B3SOIFDcth0 * model->B3SOIFDtsi; pParam->B3SOIFDrbody = model->B3SOIFDrbody * pParam->B3SOIFDweff / pParam->B3SOIFDleff; pParam->B3SOIFDua = pParam->B3SOIFDua + pParam->B3SOIFDua1 * T0; pParam->B3SOIFDub = pParam->B3SOIFDub + pParam->B3SOIFDub1 * T0; pParam->B3SOIFDuc = pParam->B3SOIFDuc + pParam->B3SOIFDuc1 * T0; if (pParam->B3SOIFDu0 > 1.0) pParam->B3SOIFDu0 = pParam->B3SOIFDu0 / 1.0e4; pParam->B3SOIFDu0temp = pParam->B3SOIFDu0 * pow(TRatio, pParam->B3SOIFDute); pParam->B3SOIFDvsattemp = pParam->B3SOIFDvsat - pParam->B3SOIFDat * T0; pParam->B3SOIFDrds0 = (pParam->B3SOIFDrdsw + pParam->B3SOIFDprt * T0) / pow(pParam->B3SOIFDweff * 1E6, pParam->B3SOIFDwr); if (B3SOIFDcheckModel(model, here, ckt)) { SPfrontEnd->IFerrorf (ERR_FATAL, "Fatal error(s) detected during B3SOIFDV3 parameter checking for %s in model %s", model->B3SOIFDmodName, here->B3SOIFDname); return(E_BADPARM); } pParam->B3SOIFDcgdo = (model->B3SOIFDcgdo + pParam->B3SOIFDcf) * pParam->B3SOIFDweffCV; pParam->B3SOIFDcgso = (model->B3SOIFDcgso + pParam->B3SOIFDcf) * pParam->B3SOIFDweffCV; pParam->B3SOIFDcgeo = model->B3SOIFDcgeo * pParam->B3SOIFDleffCV; if (!model->B3SOIFDnpeakGiven && model->B3SOIFDgamma1Given) { T0 = pParam->B3SOIFDgamma1 * model->B3SOIFDcox; pParam->B3SOIFDnpeak = 3.021E22 * T0 * T0; } T0 = pow(TRatio, model->B3SOIFDxbjt / pParam->B3SOIFDndiode); T1 = pow(TRatio, model->B3SOIFDxdif / pParam->B3SOIFDndiode); T2 = pow(TRatio, model->B3SOIFDxrec / pParam->B3SOIFDndiode / 2); T4 = -Eg0 / pParam->B3SOIFDndiode / model->B3SOIFDvtm * (1 - TRatio); T5 = exp(T4); T6 = sqrt(T5); pParam->B3SOIFDjbjt = pParam->B3SOIFDisbjt * T0 * T5; pParam->B3SOIFDjdif = pParam->B3SOIFDisdif * T1 * T5; pParam->B3SOIFDjrec = pParam->B3SOIFDisrec * T2 * T6; T0 = pow(TRatio, model->B3SOIFDxtun / pParam->B3SOIFDntun); pParam->B3SOIFDjtun = pParam->B3SOIFDistun * T0 ; if (pParam->B3SOIFDnsub > 0) pParam->B3SOIFDvfbb = -model->B3SOIFDtype * model->B3SOIFDvtm * log(pParam->B3SOIFDnpeak/ pParam->B3SOIFDnsub); else pParam->B3SOIFDvfbb = -model->B3SOIFDtype * model->B3SOIFDvtm * log(-pParam->B3SOIFDnpeak* pParam->B3SOIFDnsub/ni/ni); if (!model->B3SOIFDvsdfbGiven) { if (pParam->B3SOIFDnsub > 0) pParam->B3SOIFDvsdfb = -model->B3SOIFDtype * (model->B3SOIFDvtm*log(1e20 * pParam->B3SOIFDnsub / ni /ni) - 0.3); else if (pParam->B3SOIFDnsub < 0) pParam->B3SOIFDvsdfb = -model->B3SOIFDtype * (model->B3SOIFDvtm*log(-1e20 / pParam->B3SOIFDnsub) + 0.3); } /* Phi & Gamma */ SDphi = 2.0*model->B3SOIFDvtm*log(fabs(pParam->B3SOIFDnsub) / ni); SDgamma = 5.753e-12 * sqrt(fabs(pParam->B3SOIFDnsub)) / model->B3SOIFDcbox; if (!model->B3SOIFDvsdthGiven) { if ( ((pParam->B3SOIFDnsub > 0) && (model->B3SOIFDtype > 0)) || ((pParam->B3SOIFDnsub < 0) && (model->B3SOIFDtype < 0)) ) pParam->B3SOIFDvsdth = pParam->B3SOIFDvsdfb + SDphi + SDgamma * sqrt(SDphi); else pParam->B3SOIFDvsdth = pParam->B3SOIFDvsdfb - SDphi - SDgamma * sqrt(SDphi); } if (!model->B3SOIFDcsdminGiven) { /* Cdmin */ tmp = sqrt(2.0 * EPSSI * SDphi / (Charge_q * fabs(pParam->B3SOIFDnsub) * 1.0e6)); tmp1 = EPSSI / tmp; model->B3SOIFDcsdmin = tmp1 * model->B3SOIFDcbox / (tmp1 + model->B3SOIFDcbox); } T0 = model->B3SOIFDcsdesw * log(1 + model->B3SOIFDtsi / model->B3SOIFDtbox); T1 = here->B3SOIFDsourcePerimeter - pParam->B3SOIFDweff; if (T1 > 0.0) pParam->B3SOIFDcsesw = T0 * T1; else pParam->B3SOIFDcsesw = 0.0; T1 = here->B3SOIFDdrainPerimeter - pParam->B3SOIFDweff; if (T1 > 0.0) pParam->B3SOIFDcdesw = T0 * T1; else pParam->B3SOIFDcdesw = 0.0; pParam->B3SOIFDphi = 2.0 * model->B3SOIFDvtm * log(pParam->B3SOIFDnpeak / ni); pParam->B3SOIFDsqrtPhi = sqrt(pParam->B3SOIFDphi); pParam->B3SOIFDphis3 = pParam->B3SOIFDsqrtPhi * pParam->B3SOIFDphi; pParam->B3SOIFDXdep0 = sqrt(2.0 * EPSSI / (Charge_q * pParam->B3SOIFDnpeak * 1.0e6)) * pParam->B3SOIFDsqrtPhi; pParam->B3SOIFDsqrtXdep0 = sqrt(pParam->B3SOIFDXdep0); pParam->B3SOIFDlitl = sqrt(3.0 * model->B3SOIFDxj * model->B3SOIFDtox); pParam->B3SOIFDvbi = model->B3SOIFDvtm * log(1.0e20 * pParam->B3SOIFDnpeak / (ni * ni)); pParam->B3SOIFDcdep0 = sqrt(Charge_q * EPSSI * pParam->B3SOIFDnpeak * 1.0e6 / 2.0 / pParam->B3SOIFDphi); if (model->B3SOIFDk1Given || model->B3SOIFDk2Given) { if (!model->B3SOIFDk1Given) { fprintf(stdout, "Warning: k1 should be specified with k2.\n"); pParam->B3SOIFDk1 = 0.53; } if (!model->B3SOIFDk2Given) { fprintf(stdout, "Warning: k2 should be specified with k1.\n"); pParam->B3SOIFDk2 = -0.0186; } if (model->B3SOIFDxtGiven) fprintf(stdout, "Warning: xt is ignored because k1 or k2 is given.\n"); if (model->B3SOIFDvbxGiven) fprintf(stdout, "Warning: vbx is ignored because k1 or k2 is given.\n"); if (model->B3SOIFDvbmGiven) fprintf(stdout, "Warning: vbm is ignored because k1 or k2 is given.\n"); if (model->B3SOIFDgamma1Given) fprintf(stdout, "Warning: gamma1 is ignored because k1 or k2 is given.\n"); if (model->B3SOIFDgamma2Given) fprintf(stdout, "Warning: gamma2 is ignored because k1 or k2 is given.\n"); } else { if (!model->B3SOIFDvbxGiven) pParam->B3SOIFDvbx = pParam->B3SOIFDphi - 7.7348e-4 * pParam->B3SOIFDnpeak * pParam->B3SOIFDxt * pParam->B3SOIFDxt; if (pParam->B3SOIFDvbx > 0.0) pParam->B3SOIFDvbx = -pParam->B3SOIFDvbx; if (pParam->B3SOIFDvbm > 0.0) pParam->B3SOIFDvbm = -pParam->B3SOIFDvbm; if (!model->B3SOIFDgamma1Given) pParam->B3SOIFDgamma1 = 5.753e-12 * sqrt(pParam->B3SOIFDnpeak) / model->B3SOIFDcox; if (!model->B3SOIFDgamma2Given) pParam->B3SOIFDgamma2 = 5.753e-12 * sqrt(pParam->B3SOIFDnsub) / model->B3SOIFDcox; T0 = pParam->B3SOIFDgamma1 - pParam->B3SOIFDgamma2; T1 = sqrt(pParam->B3SOIFDphi - pParam->B3SOIFDvbx) - pParam->B3SOIFDsqrtPhi; T2 = sqrt(pParam->B3SOIFDphi * (pParam->B3SOIFDphi - pParam->B3SOIFDvbm)) - pParam->B3SOIFDphi; pParam->B3SOIFDk2 = T0 * T1 / (2.0 * T2 + pParam->B3SOIFDvbm); pParam->B3SOIFDk1 = pParam->B3SOIFDgamma2 - 2.0 * pParam->B3SOIFDk2 * sqrt(pParam->B3SOIFDphi - pParam->B3SOIFDvbm); } if (pParam->B3SOIFDk2 < 0.0) { T0 = 0.5 * pParam->B3SOIFDk1 / pParam->B3SOIFDk2; pParam->B3SOIFDvbsc = 0.9 * (pParam->B3SOIFDphi - T0 * T0); if (pParam->B3SOIFDvbsc > -3.0) pParam->B3SOIFDvbsc = -3.0; else if (pParam->B3SOIFDvbsc < -30.0) pParam->B3SOIFDvbsc = -30.0; } else { pParam->B3SOIFDvbsc = -30.0; } if (pParam->B3SOIFDvbsc > pParam->B3SOIFDvbm) pParam->B3SOIFDvbsc = pParam->B3SOIFDvbm; if (model->B3SOIFDvth0Given) { pParam->B3SOIFDvfb = model->B3SOIFDtype * pParam->B3SOIFDvth0 - pParam->B3SOIFDphi - pParam->B3SOIFDk1 * pParam->B3SOIFDsqrtPhi; } else { pParam->B3SOIFDvfb = -1.0; pParam->B3SOIFDvth0 = model->B3SOIFDtype * (pParam->B3SOIFDvfb + pParam->B3SOIFDphi + pParam->B3SOIFDk1 * pParam->B3SOIFDsqrtPhi); } T1 = sqrt(EPSSI / EPSOX * model->B3SOIFDtox * pParam->B3SOIFDXdep0); T0 = exp(-0.5 * pParam->B3SOIFDdsub * pParam->B3SOIFDleff / T1); pParam->B3SOIFDtheta0vb0 = (T0 + 2.0 * T0 * T0); T0 = exp(-0.5 * pParam->B3SOIFDdrout * pParam->B3SOIFDleff / T1); T2 = (T0 + 2.0 * T0 * T0); pParam->B3SOIFDthetaRout = pParam->B3SOIFDpdibl1 * T2 + pParam->B3SOIFDpdibl2; here->B3SOIFDminIsub = 5.0e-2 * pParam->B3SOIFDweff * model->B3SOIFDtsi * MAX(pParam->B3SOIFDisdif, pParam->B3SOIFDisrec); } here->B3SOIFDcsbox = model->B3SOIFDcbox*here->B3SOIFDsourceArea; here->B3SOIFDcsmin = model->B3SOIFDcsdmin*here->B3SOIFDsourceArea; here->B3SOIFDcdbox = model->B3SOIFDcbox*here->B3SOIFDdrainArea; here->B3SOIFDcdmin = model->B3SOIFDcsdmin*here->B3SOIFDdrainArea; if ( ((pParam->B3SOIFDnsub > 0) && (model->B3SOIFDtype > 0)) || ((pParam->B3SOIFDnsub < 0) && (model->B3SOIFDtype < 0)) ) { T0 = pParam->B3SOIFDvsdth - pParam->B3SOIFDvsdfb; pParam->B3SOIFDsdt1 = pParam->B3SOIFDvsdfb + model->B3SOIFDasd * T0; T1 = here->B3SOIFDcsbox - here->B3SOIFDcsmin; T2 = T1 / T0 / T0; pParam->B3SOIFDst2 = T2 / model->B3SOIFDasd; pParam->B3SOIFDst3 = T2 /( 1 - model->B3SOIFDasd); here->B3SOIFDst4 = T0 * T1 * (1 + model->B3SOIFDasd) / 3 - here->B3SOIFDcsmin * pParam->B3SOIFDvsdfb; T1 = here->B3SOIFDcdbox - here->B3SOIFDcdmin; T2 = T1 / T0 / T0; pParam->B3SOIFDdt2 = T2 / model->B3SOIFDasd; pParam->B3SOIFDdt3 = T2 /( 1 - model->B3SOIFDasd); here->B3SOIFDdt4 = T0 * T1 * (1 + model->B3SOIFDasd) / 3 - here->B3SOIFDcdmin * pParam->B3SOIFDvsdfb; } else { T0 = pParam->B3SOIFDvsdfb - pParam->B3SOIFDvsdth; pParam->B3SOIFDsdt1 = pParam->B3SOIFDvsdth + model->B3SOIFDasd * T0; T1 = here->B3SOIFDcsmin - here->B3SOIFDcsbox; T2 = T1 / T0 / T0; pParam->B3SOIFDst2 = T2 / model->B3SOIFDasd; pParam->B3SOIFDst3 = T2 /( 1 - model->B3SOIFDasd); here->B3SOIFDst4 = T0 * T1 * (1 + model->B3SOIFDasd) / 3 - here->B3SOIFDcsbox * pParam->B3SOIFDvsdth; T1 = here->B3SOIFDcdmin - here->B3SOIFDcdbox; T2 = T1 / T0 / T0; pParam->B3SOIFDdt2 = T2 / model->B3SOIFDasd; pParam->B3SOIFDdt3 = T2 /( 1 - model->B3SOIFDasd); here->B3SOIFDdt4 = T0 * T1 * (1 + model->B3SOIFDasd) / 3 - here->B3SOIFDcdbox * pParam->B3SOIFDvsdth; } here->B3SOIFDphi = pParam->B3SOIFDphi; /* process source/drain series resistance */ here->B3SOIFDdrainConductance = model->B3SOIFDsheetResistance * here->B3SOIFDdrainSquares; if (here->B3SOIFDdrainConductance > 0.0) here->B3SOIFDdrainConductance = 1.0 / here->B3SOIFDdrainConductance; else here->B3SOIFDdrainConductance = 0.0; here->B3SOIFDsourceConductance = model->B3SOIFDsheetResistance * here->B3SOIFDsourceSquares; if (here->B3SOIFDsourceConductance > 0.0) here->B3SOIFDsourceConductance = 1.0 / here->B3SOIFDsourceConductance; else here->B3SOIFDsourceConductance = 0.0; here->B3SOIFDcgso = pParam->B3SOIFDcgso; here->B3SOIFDcgdo = pParam->B3SOIFDcgdo; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_fd/b3soifdinit.h0000644000175000017500000000042313546075722023751 0ustar carstencarsten#ifndef _B3SOIFDINIT_H #define _B3SOIFDINIT_H extern IFparm B3SOIFDpTable[]; extern IFparm B3SOIFDmPTable[]; extern char *B3SOIFDnames[]; extern int B3SOIFDpTSize; extern int B3SOIFDmPTSize; extern int B3SOIFDnSize; extern int B3SOIFDiSize; extern int B3SOIFDmSize; #endif tmpk8ny_4pz/src/spicelib/devices/bsim3soi_fd/b3soifdacld.c0000644000175000017500000004344713546075722023721 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: Weidong Liu and Pin Su Feb 1999 Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang Modified by Pin Su 99/9/27 Modified by Paolo Nenzi 2002 File: b3soifdacld.c 98/5/01 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMFD2.1 release */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b3soifddef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIFDacLoad(GENmodel *inModel, CKTcircuit *ckt) { B3SOIFDmodel *model = (B3SOIFDmodel*)inModel; B3SOIFDinstance *here; int selfheat; double xcggb, xcgdb, xcgsb, xcgeb, xcgT; double xcdgb, xcddb, xcdsb, xcdeb, xcdT; double xcsgb, xcsdb, xcssb, xcseb, xcsT; double xcbgb, xcbdb, xcbsb, xcbeb, xcbT; double xcegb, xcedb, xcesb, xceeb, xceT; double gdpr, gspr, gds; double cggb, cgdb, cgsb, cgeb, cgT; double cdgb, cddb, cdsb, cdeb, cdT; double cbgb, cbdb, cbsb, cbeb, cbT; double cegb, cedb, cesb, ceeb, ceT; double GSoverlapCap, GDoverlapCap, GEoverlapCap, FwdSum, RevSum, Gm, Gmbs, Gme, GmT; double omega; double dxpart, sxpart; double gbbg, gbbdp, gbbb, gbbe, gbbp, gbbsp, gbbT; double gddpg, gddpdp, gddpsp, gddpb, gddpe, gddpT; double gsspg, gsspdp, gsspsp, gsspb, gsspe, gsspT; double gppg, gppdp, gppb, gppe, gppp, gppsp, gppT; double xcTt, cTt, gTtt, gTtg, gTtb, gTte, gTtdp, gTtsp; FILE *fpdebug = NULL; double m; omega = ckt->CKTomega; for (; model != NULL; model = B3SOIFDnextModel(model)) { for (here = B3SOIFDinstances(model); here!= NULL; here = B3SOIFDnextInstance(here)) { selfheat = (model->B3SOIFDshMod == 1) && (here->B3SOIFDrth0 != 0.0); if (here->B3SOIFDdebugMod > 2) { fpdebug = fopen("b3soifdac.log", "a"); fprintf(fpdebug, ".......omega=%.5e\n", omega); } if (here->B3SOIFDmode >= 0) { Gm = here->B3SOIFDgm; Gmbs = here->B3SOIFDgmbs; Gme = here->B3SOIFDgme; GmT = model->B3SOIFDtype * here->B3SOIFDgmT; FwdSum = Gm + Gmbs + Gme; RevSum = 0.0; cbgb = here->B3SOIFDcbgb; cbsb = here->B3SOIFDcbsb; cbdb = here->B3SOIFDcbdb; cbeb = here->B3SOIFDcbeb; cbT = model->B3SOIFDtype * here->B3SOIFDcbT; cegb = here->B3SOIFDcegb; cesb = here->B3SOIFDcesb; cedb = here->B3SOIFDcedb; ceeb = here->B3SOIFDceeb; ceT = model->B3SOIFDtype * here->B3SOIFDceT; cggb = here->B3SOIFDcggb; cgsb = here->B3SOIFDcgsb; cgdb = here->B3SOIFDcgdb; cgeb = here->B3SOIFDcgeb; cgT = model->B3SOIFDtype * here->B3SOIFDcgT; cdgb = here->B3SOIFDcdgb; cdsb = here->B3SOIFDcdsb; cddb = here->B3SOIFDcddb; cdeb = here->B3SOIFDcdeb; cdT = model->B3SOIFDtype * here->B3SOIFDcdT; cTt = here->pParam->B3SOIFDcth; gbbg = -here->B3SOIFDgbgs; gbbdp = -here->B3SOIFDgbds; gbbb = -here->B3SOIFDgbbs; gbbe = -here->B3SOIFDgbes; gbbp = -here->B3SOIFDgbps; gbbT = -model->B3SOIFDtype * here->B3SOIFDgbT; gbbsp = - ( gbbg + gbbdp + gbbb + gbbe + gbbp); gddpg = -here->B3SOIFDgjdg; gddpdp = -here->B3SOIFDgjdd; gddpb = -here->B3SOIFDgjdb; gddpe = -here->B3SOIFDgjde; gddpT = -model->B3SOIFDtype * here->B3SOIFDgjdT; gddpsp = - ( gddpg + gddpdp + gddpb + gddpe); gsspg = -here->B3SOIFDgjsg; gsspdp = -here->B3SOIFDgjsd; gsspb = -here->B3SOIFDgjsb; gsspe = 0.0; gsspT = -model->B3SOIFDtype * here->B3SOIFDgjsT; gsspsp = - (gsspg + gsspdp + gsspb + gsspe); gppg = -here->B3SOIFDgbpgs; gppdp = -here->B3SOIFDgbpds; gppb = -here->B3SOIFDgbpbs; gppe = -here->B3SOIFDgbpes; gppp = -here->B3SOIFDgbpps; gppT = -model->B3SOIFDtype * here->B3SOIFDgbpT; gppsp = - (gppg + gppdp + gppb + gppe + gppp); gTtg = here->B3SOIFDgtempg; gTtb = here->B3SOIFDgtempb; gTte = here->B3SOIFDgtempe; gTtdp = here->B3SOIFDgtempd; gTtt = here->B3SOIFDgtempT; gTtsp = - (gTtg + gTtb + gTte + gTtdp); sxpart = 0.6; dxpart = 0.4; } else { Gm = -here->B3SOIFDgm; Gmbs = -here->B3SOIFDgmbs; Gme = -here->B3SOIFDgme; GmT = -model->B3SOIFDtype * here->B3SOIFDgmT; FwdSum = 0.0; RevSum = -Gm - Gmbs - Gme; cdgb = - (here->B3SOIFDcdgb + here->B3SOIFDcggb + here->B3SOIFDcbgb + here->B3SOIFDcegb); cdsb = - (here->B3SOIFDcddb + here->B3SOIFDcgdb + here->B3SOIFDcbdb + here->B3SOIFDcedb); cddb = - (here->B3SOIFDcdsb + here->B3SOIFDcgsb + here->B3SOIFDcbsb + here->B3SOIFDcesb); cdeb = - (here->B3SOIFDcdeb + here->B3SOIFDcgeb + here->B3SOIFDcbeb + here->B3SOIFDceeb); cdT = - model->B3SOIFDtype * (here->B3SOIFDcgT + here->B3SOIFDcbT + here->B3SOIFDcdT + here->B3SOIFDceT); cegb = here->B3SOIFDcegb; cesb = here->B3SOIFDcedb; cedb = here->B3SOIFDcesb; ceeb = here->B3SOIFDceeb; ceT = model->B3SOIFDtype * here->B3SOIFDceT; cggb = here->B3SOIFDcggb; cgsb = here->B3SOIFDcgdb; cgdb = here->B3SOIFDcgsb; cgeb = here->B3SOIFDcgeb; cgT = model->B3SOIFDtype * here->B3SOIFDcgT; cbgb = here->B3SOIFDcbgb; cbsb = here->B3SOIFDcbdb; cbdb = here->B3SOIFDcbsb; cbeb = here->B3SOIFDcbeb; cbT = model->B3SOIFDtype * here->B3SOIFDcbT; cTt = here->pParam->B3SOIFDcth; gbbg = -here->B3SOIFDgbgs; gbbb = -here->B3SOIFDgbbs; gbbe = -here->B3SOIFDgbes; gbbp = -here->B3SOIFDgbps; gbbsp = -here->B3SOIFDgbds; gbbT = -model->B3SOIFDtype * here->B3SOIFDgbT; gbbdp = - ( gbbg + gbbsp + gbbb + gbbe + gbbp); gddpg = -here->B3SOIFDgjsg; gddpsp = -here->B3SOIFDgjsd; gddpb = -here->B3SOIFDgjsb; gddpe = 0.0; gddpT = -model->B3SOIFDtype * here->B3SOIFDgjsT; gddpdp = - (gddpg + gddpsp + gddpb + gddpe); gsspg = -here->B3SOIFDgjdg; gsspsp = -here->B3SOIFDgjdd; gsspb = -here->B3SOIFDgjdb; gsspe = -here->B3SOIFDgjde; gsspT = -model->B3SOIFDtype * here->B3SOIFDgjdT; gsspdp = - ( gsspg + gsspsp + gsspb + gsspe); gppg = -here->B3SOIFDgbpgs; gppsp = -here->B3SOIFDgbpds; gppb = -here->B3SOIFDgbpbs; gppe = -here->B3SOIFDgbpes; gppp = -here->B3SOIFDgbpps; gppT = -model->B3SOIFDtype * here->B3SOIFDgbpT; gppdp = - (gppg + gppsp + gppb + gppe + gppp); gTtt = here->B3SOIFDgtempT; gTtg = here->B3SOIFDgtempg; gTtb = here->B3SOIFDgtempb; gTte = here->B3SOIFDgtempe; gTtdp = here->B3SOIFDgtempd; gTtsp = - (gTtt + gTtg + gTtb + gTte + gTtdp); gTtg = here->B3SOIFDgtempg; gTtb = here->B3SOIFDgtempb; gTte = here->B3SOIFDgtempe; gTtsp = here->B3SOIFDgtempd; gTtt = here->B3SOIFDgtempT; gTtdp = - (gTtg + gTtb + gTte + gTtsp); sxpart = 0.6; sxpart = 0.4; dxpart = 0.6; } gdpr=here->B3SOIFDdrainConductance; gspr=here->B3SOIFDsourceConductance; gds= here->B3SOIFDgds; GSoverlapCap = here->B3SOIFDcgso; GDoverlapCap = here->B3SOIFDcgdo; GEoverlapCap = here->pParam->B3SOIFDcgeo; xcegb = (cegb - GEoverlapCap) * omega; xcedb = cedb * omega; xcesb = cesb * omega; xceeb = (ceeb + GEoverlapCap) * omega; xceT = ceT * omega; xcggb = (cggb + GDoverlapCap + GSoverlapCap + GEoverlapCap) * omega; xcgdb = (cgdb - GDoverlapCap ) * omega; xcgsb = (cgsb - GSoverlapCap) * omega; xcgeb = (cgeb - GEoverlapCap) * omega; xcgT = cgT * omega; xcdgb = (cdgb - GDoverlapCap) * omega; xcddb = (cddb + GDoverlapCap) * omega; xcdsb = cdsb * omega; xcdeb = cdeb * omega; xcdT = cdT * omega; xcsgb = -(cggb + cbgb + cdgb + cegb + GSoverlapCap) * omega; xcsdb = -(cgdb + cbdb + cddb + cedb) * omega; xcssb = (GSoverlapCap - (cgsb + cbsb + cdsb + cesb)) * omega; xcseb = -(cgeb + cbeb + cdeb + ceeb) * omega; xcsT = -(cgT + cbT + cdT + ceT) * omega; xcbgb = cbgb * omega; xcbdb = cbdb * omega; xcbsb = cbsb * omega; xcbeb = cbeb * omega; xcbT = cbT * omega; xcTt = cTt * omega; m = here->B3SOIFDm; *(here->B3SOIFDEgPtr +1) += m * xcegb; *(here->B3SOIFDEdpPtr +1) += m * xcedb; *(here->B3SOIFDEspPtr +1) += m * xcesb; *(here->B3SOIFDGePtr +1) += m * xcgeb; *(here->B3SOIFDDPePtr +1) += m * xcdeb; *(here->B3SOIFDSPePtr +1) += m * xcseb; *(here->B3SOIFDEePtr +1) += m * xceeb; *(here->B3SOIFDGgPtr +1) += m * xcggb; *(here->B3SOIFDGdpPtr +1) += m * xcgdb; *(here->B3SOIFDGspPtr +1) += m * xcgsb; *(here->B3SOIFDDPgPtr +1) += m * xcdgb; *(here->B3SOIFDDPdpPtr +1) += m * xcddb; *(here->B3SOIFDDPspPtr +1) += m * xcdsb; *(here->B3SOIFDSPgPtr +1) += m * xcsgb; *(here->B3SOIFDSPdpPtr +1) += m * xcsdb; *(here->B3SOIFDSPspPtr +1) += m * xcssb; if (selfheat) { *(here->B3SOIFDTemptempPtr + 1) += m * xcTt; *(here->B3SOIFDDPtempPtr + 1) += m * xcdT; *(here->B3SOIFDSPtempPtr + 1) += m * xcsT; *(here->B3SOIFDBtempPtr + 1) += m * xcbT; *(here->B3SOIFDEtempPtr + 1) += m * xceT; *(here->B3SOIFDGtempPtr + 1) += m * xcgT; } if (here->B3SOIFDdebugMod > 3) { fprintf(fpdebug, "Cbg+Cbs+Cbe = %.5e; Cbd = %.5e;\n", (xcbgb+xcbsb+xcbeb)/omega, xcbdb/omega); fprintf(fpdebug, "gbs = %.5e; gbd = %.5e\n", gbbsp, gbbdp); fprintf(fpdebug, "AC condunctance...\n"); fprintf(fpdebug, "Eg=%.5e; Edp=%.5e; Esp=%.5e;\nEb=%.5e; Ee=%.5e\n", xcegb, xcedb, xcesb, -(xcegb+xcedb+xcesb+xceeb), xceeb); fprintf(fpdebug, "Gg=%.5e; Gdp=%.5e; Gsp=%.5e;\nGb=%.5e; Ge=%.5e\n", xcggb, xcgdb, xcgsb, -(xcggb+xcgdb+xcgsb+xcgeb), xcgeb); fprintf(fpdebug, "Bg=%.5e; Bdp=%.5e; Bsp=%.5e;\nBb=%.5e; Be=%.5e\n", xcbgb, xcbdb, xcbsb, -(xcbgb+xcbdb+xcbsb+xcbeb), xcbeb); fprintf(fpdebug, "DPg=%.5e; DPdp=%.5e; DPsp=%.5e;\nDPb=%.5e; DPe=%.5e\n", xcdgb, xcddb, xcdsb, -(xcdgb+xcddb+xcdsb+xcdeb), xcdeb); fprintf(fpdebug, "SPg=%.5e; SPdp=%.5e; SPsp=%.5e;\nSPb=%.5e; SPe=%.5e\n", xcsgb, xcsdb, xcssb, -(xcsgb+xcsdb+xcssb+xcseb), xcseb); } *(here->B3SOIFDEgPtr) += 0.0; *(here->B3SOIFDEdpPtr) += 0.0; *(here->B3SOIFDEspPtr) += 0.0; *(here->B3SOIFDGePtr) -= 0.0; *(here->B3SOIFDDPePtr) += m * (Gme + gddpe); *(here->B3SOIFDSPePtr) += m * (gsspe - Gme); *(here->B3SOIFDEePtr) += 0.0; *(here->B3SOIFDDPgPtr) += m * (Gm + gddpg); *(here->B3SOIFDDPdpPtr) += m * (gdpr + gds + gddpdp + RevSum); *(here->B3SOIFDDPspPtr) -= m * (gds + FwdSum - gddpsp); *(here->B3SOIFDDPdPtr) -= m * gdpr; *(here->B3SOIFDSPgPtr) -= m * (Gm - gsspg); *(here->B3SOIFDSPdpPtr) -= m * (gds + RevSum - gsspdp); *(here->B3SOIFDSPspPtr) += m * (gspr + gds + FwdSum + gsspsp); *(here->B3SOIFDSPsPtr) -= m * gspr; if (selfheat) { *(here->B3SOIFDDPtempPtr) += m * (GmT + gddpT); *(here->B3SOIFDSPtempPtr) += m * (-GmT + gsspT); *(here->B3SOIFDBtempPtr) += m * gbbT; if (here->B3SOIFDbodyMod == 1) { (*(here->B3SOIFDPtempPtr) += m * gppT); } *(here->B3SOIFDTemptempPtr) += m * (gTtt + 1/here->pParam->B3SOIFDrth); *(here->B3SOIFDTempgPtr) += m * gTtg; *(here->B3SOIFDTempbPtr) += m * gTtb; *(here->B3SOIFDTempePtr) += m * gTte; *(here->B3SOIFDTempdpPtr) += m * gTtdp; *(here->B3SOIFDTempspPtr) += m * gTtsp; } if (here->B3SOIFDdebugMod > 3) { fprintf(fpdebug, "Static condunctance...\n"); fprintf(fpdebug, "Gg=%.5e; Gdp=%.5e; Gsp=%.5e;\nGb=%.5e; Ge=%.5e\n", *(here->B3SOIFDGgPtr), *(here->B3SOIFDGdpPtr), *(here->B3SOIFDGspPtr), *(here->B3SOIFDGbPtr), *(here->B3SOIFDGePtr)); fprintf(fpdebug, "DPg=%.5e; DPdp=%.5e; DPsp=%.5e;\nDPb=%.5e; DPe=%.5e\n", *(here->B3SOIFDDPgPtr), *(here->B3SOIFDDPdpPtr), *(here->B3SOIFDDPspPtr), *(here->B3SOIFDDPbPtr), *(here->B3SOIFDDPePtr)); fprintf(fpdebug, "SPg=%.5e; SPdp=%.5e; SPsp=%.5e;\nSPb=%.5e; SPe=%.5e\n", *(here->B3SOIFDSPgPtr), *(here->B3SOIFDSPdpPtr), *(here->B3SOIFDSPspPtr), *(here->B3SOIFDSPbPtr), *(here->B3SOIFDSPePtr)); fprintf(fpdebug, "Bg=%.5e; Bdp=%.5e; Bsp=%.5e;\nBb=%.5e; Be=%.5e\n", gbbg, gbbdp, gbbsp, gbbb, gbbe); } *(here->B3SOIFDDdPtr) += m * gdpr; *(here->B3SOIFDDdpPtr) -= m * gdpr; *(here->B3SOIFDSsPtr) += m * gspr; *(here->B3SOIFDSspPtr) -= m * gspr; if (here->B3SOIFDbodyMod == 1) { (*(here->B3SOIFDBpPtr) -= m * gppp); (*(here->B3SOIFDPbPtr) += m * gppb); (*(here->B3SOIFDPpPtr) += m * gppp); (*(here->B3SOIFDPgPtr) += m * gppg); (*(here->B3SOIFDPdpPtr) += m * gppdp); (*(here->B3SOIFDPspPtr) += m * gppsp); (*(here->B3SOIFDPePtr) += m * gppe); } if (here->B3SOIFDdebugMod > 1) { *(here->B3SOIFDVbsPtr) += m * 1; *(here->B3SOIFDIdsPtr) += m * 1; *(here->B3SOIFDIcPtr) += m * 1; *(here->B3SOIFDIbsPtr) += m * 1; *(here->B3SOIFDIbdPtr) += m * 1; *(here->B3SOIFDIiiPtr) += m * 1; *(here->B3SOIFDIgidlPtr) += m * 1; *(here->B3SOIFDItunPtr) += m * 1; *(here->B3SOIFDIbpPtr) += m * 1; *(here->B3SOIFDAbeffPtr) += m * 1; *(here->B3SOIFDVbs0effPtr) += m * 1; *(here->B3SOIFDVbseffPtr) += m * 1; *(here->B3SOIFDXcPtr) += m * 1; *(here->B3SOIFDCbgPtr) += m * 1; *(here->B3SOIFDCbbPtr) += m * 1; *(here->B3SOIFDCbdPtr) += m * 1; *(here->B3SOIFDqbPtr) += m * 1; *(here->B3SOIFDQbfPtr) += m * 1; *(here->B3SOIFDQjsPtr) += m * 1; *(here->B3SOIFDQjdPtr) += m * 1; /* clean up last */ *(here->B3SOIFDGmPtr) += m * 1; *(here->B3SOIFDGmbsPtr) += m * 1; *(here->B3SOIFDGdsPtr) += m * 1; *(here->B3SOIFDGmePtr) += m * 1; *(here->B3SOIFDVbs0teffPtr) += m * 1; *(here->B3SOIFDVgsteffPtr) += m * 1; *(here->B3SOIFDCbePtr) += m * 1; *(here->B3SOIFDVthPtr) += m * 1; *(here->B3SOIFDXcsatPtr) += m * 1; *(here->B3SOIFDVdscvPtr) += m * 1; *(here->B3SOIFDVcscvPtr) += m * 1; *(here->B3SOIFDQaccPtr) += m * 1; *(here->B3SOIFDQsub0Ptr) += m * 1; *(here->B3SOIFDQsubs1Ptr) += m * 1; *(here->B3SOIFDQsubs2Ptr) += m * 1; *(here->B3SOIFDqgPtr) += m * 1; *(here->B3SOIFDqdPtr) += m * 1; *(here->B3SOIFDqePtr) += m * 1; *(here->B3SOIFDDum1Ptr) += m * 1; *(here->B3SOIFDDum2Ptr) += m * 1; *(here->B3SOIFDDum3Ptr) += m * 1; *(here->B3SOIFDDum4Ptr) += m * 1; *(here->B3SOIFDDum5Ptr) += m * 1; } if (here->B3SOIFDdebugMod > 2) fclose(fpdebug); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_fd/b3soifdinit.c0000644000175000017500000000330413546075722023745 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "b3soifditf.h" #include "b3soifdinit.h" SPICEdev B3SOIFDinfo = { .DEVpublic = { .name = "B3SOIFD", .description = "Berkeley SOI MOSFET (FD) model version 2.1", .terms = &B3SOIFDnSize, .numNames = &B3SOIFDnSize, .termNames = B3SOIFDnames, .numInstanceParms = &B3SOIFDpTSize, .instanceParms = B3SOIFDpTable, .numModelParms = &B3SOIFDmPTSize, .modelParms = B3SOIFDmPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = B3SOIFDparam, .DEVmodParam = B3SOIFDmParam, .DEVload = B3SOIFDload, .DEVsetup = B3SOIFDsetup, .DEVunsetup = B3SOIFDunsetup, .DEVpzSetup = B3SOIFDsetup, .DEVtemperature = B3SOIFDtemp, .DEVtrunc = B3SOIFDtrunc, .DEVfindBranch = NULL, .DEVacLoad = B3SOIFDacLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = B3SOIFDgetic, .DEVask = B3SOIFDask, .DEVmodAsk = B3SOIFDmAsk, .DEVpzLoad = B3SOIFDpzLoad, .DEVconvTest = B3SOIFDconvTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = B3SOIFDnoise, .DEVsoaCheck = NULL, .DEVinstSize = &B3SOIFDiSize, .DEVmodSize = &B3SOIFDmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_b3soifd_info (void) { return &B3SOIFDinfo; } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_fd/b3soifddef.h0000644000175000017500000017144513546075722023561 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: Weidong Liu and Pin Su Feb 1999 Author: 1998 Samuel Fung Modified by Pin Su, Wei Jin 99/9/27 Modified by Paolo Nenzi 2002 File: b3soifddef.h **********/ #ifndef B3SOIFD #define B3SOIFD #define SOICODE /* #define BULKCODE */ #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" typedef struct sB3SOIFDinstance { struct GENinstance gen; #define B3SOIFDmodPtr(inst) ((struct sB3SOIFDmodel *)((inst)->gen.GENmodPtr)) #define B3SOIFDnextInstance(inst) ((struct sB3SOIFDinstance *)((inst)->gen.GENnextInstance)) #define B3SOIFDname gen.GENname #define B3SOIFDstates gen.GENstate const int B3SOIFDdNode; const int B3SOIFDgNode; const int B3SOIFDsNode; const int B3SOIFDeNode; const int B3SOIFDbNodeExt; const int B3SOIFDtempNodeExt; const int B3SOIFDpNodeExt; int B3SOIFDbNode; int B3SOIFDtempNode; int B3SOIFDpNode; int B3SOIFDdNodePrime; int B3SOIFDsNodePrime; int B3SOIFDvbsNode; /* for Debug */ int B3SOIFDidsNode; int B3SOIFDicNode; int B3SOIFDibsNode; int B3SOIFDibdNode; int B3SOIFDiiiNode; int B3SOIFDigidlNode; int B3SOIFDitunNode; int B3SOIFDibpNode; int B3SOIFDabeffNode; int B3SOIFDvbs0effNode; int B3SOIFDvbseffNode; int B3SOIFDxcNode; int B3SOIFDcbbNode; int B3SOIFDcbdNode; int B3SOIFDcbeNode; int B3SOIFDcbgNode; int B3SOIFDqbNode; int B3SOIFDqbfNode; int B3SOIFDqjsNode; int B3SOIFDqjdNode; /* clean up last */ int B3SOIFDgmNode; int B3SOIFDgmbsNode; int B3SOIFDgdsNode; int B3SOIFDgmeNode; int B3SOIFDqgNode; int B3SOIFDqdNode; int B3SOIFDqeNode; int B3SOIFDiterations; int B3SOIFDvbs0teffNode; int B3SOIFDvthNode; int B3SOIFDvgsteffNode; int B3SOIFDxcsatNode; int B3SOIFDqaccNode; int B3SOIFDqsub0Node; int B3SOIFDqsubs1Node; int B3SOIFDqsubs2Node; int B3SOIFDvcscvNode; int B3SOIFDvdscvNode; int B3SOIFDdum1Node; int B3SOIFDdum2Node; int B3SOIFDdum3Node; int B3SOIFDdum4Node; int B3SOIFDdum5Node; /* end clean up last */ double B3SOIFDphi; double B3SOIFDvtm; double B3SOIFDni; double B3SOIFDueff; double B3SOIFDthetavth; double B3SOIFDvon; double B3SOIFDvbsdio; double B3SOIFDvdsat; double B3SOIFDcgdo; double B3SOIFDcgso; double B3SOIFDcgeo; double B3SOIFDids; double B3SOIFDic; double B3SOIFDibs; double B3SOIFDibd; double B3SOIFDiii; double B3SOIFDigidl; double B3SOIFDitun; double B3SOIFDibp; double B3SOIFDabeff; double B3SOIFDvbs0eff; double B3SOIFDvbseff; double B3SOIFDxc; double B3SOIFDcbg; double B3SOIFDcbb; double B3SOIFDcbd; double B3SOIFDqb; double B3SOIFDqbf; double B3SOIFDqjs; double B3SOIFDqjd; double B3SOIFDminIsub; int B3SOIFDfloat; /* clean up last */ double B3SOIFDdum1; double B3SOIFDdum2; double B3SOIFDdum3; double B3SOIFDdum4; double B3SOIFDdum5; /* end clean up last */ double B3SOIFDl; double B3SOIFDw; double B3SOIFDm; double B3SOIFDdrainArea; double B3SOIFDsourceArea; double B3SOIFDdrainSquares; double B3SOIFDsourceSquares; double B3SOIFDdrainPerimeter; double B3SOIFDsourcePerimeter; double B3SOIFDsourceConductance; double B3SOIFDdrainConductance; double B3SOIFDicVBS; double B3SOIFDicVDS; double B3SOIFDicVGS; double B3SOIFDicVES; double B3SOIFDicVPS; int B3SOIFDbjtoff; int B3SOIFDbodyMod; int B3SOIFDdebugMod; double B3SOIFDrth0; double B3SOIFDcth0; double B3SOIFDbodySquares; double B3SOIFDrbodyext; double B3SOIFDcsbox; double B3SOIFDcdbox; double B3SOIFDcsmin; double B3SOIFDcdmin; double B3SOIFDst4; double B3SOIFDdt4; int B3SOIFDoff; int B3SOIFDmode; /* OP point */ double B3SOIFDqinv; double B3SOIFDcd; double B3SOIFDcjs; double B3SOIFDcjd; double B3SOIFDcbody; double B3SOIFDcbodcon; double B3SOIFDcth; double B3SOIFDcsubstrate; double B3SOIFDgm; double B3SOIFDgme; double B3SOIFDcb; double B3SOIFDcdrain; double B3SOIFDgds; double B3SOIFDgmbs; double B3SOIFDgmT; double B3SOIFDgbbs; double B3SOIFDgbgs; double B3SOIFDgbds; double B3SOIFDgbes; double B3SOIFDgbps; double B3SOIFDgbT; double B3SOIFDgjsd; double B3SOIFDgjsb; double B3SOIFDgjsg; double B3SOIFDgjsT; double B3SOIFDgjdb; double B3SOIFDgjdd; double B3SOIFDgjdg; double B3SOIFDgjde; double B3SOIFDgjdT; double B3SOIFDgbpbs; double B3SOIFDgbpgs; double B3SOIFDgbpds; double B3SOIFDgbpes; double B3SOIFDgbpps; double B3SOIFDgbpT; double B3SOIFDgtempb; double B3SOIFDgtempg; double B3SOIFDgtempd; double B3SOIFDgtempe; double B3SOIFDgtempT; double B3SOIFDcggb; double B3SOIFDcgdb; double B3SOIFDcgsb; double B3SOIFDcgeb; double B3SOIFDcgT; double B3SOIFDcbgb; double B3SOIFDcbdb; double B3SOIFDcbsb; double B3SOIFDcbeb; double B3SOIFDcbT; double B3SOIFDcdgb; double B3SOIFDcddb; double B3SOIFDcdsb; double B3SOIFDcdeb; double B3SOIFDcdT; double B3SOIFDcegb; double B3SOIFDcedb; double B3SOIFDcesb; double B3SOIFDceeb; double B3SOIFDceT; double B3SOIFDqse; double B3SOIFDgcse; double B3SOIFDqde; double B3SOIFDgcde; struct b3soifdSizeDependParam *pParam; unsigned B3SOIFDlGiven :1; unsigned B3SOIFDwGiven :1; unsigned B3SOIFDmGiven :1; unsigned B3SOIFDdrainAreaGiven :1; unsigned B3SOIFDsourceAreaGiven :1; unsigned B3SOIFDdrainSquaresGiven :1; unsigned B3SOIFDsourceSquaresGiven :1; unsigned B3SOIFDdrainPerimeterGiven :1; unsigned B3SOIFDsourcePerimeterGiven :1; unsigned B3SOIFDdNodePrimeSet :1; unsigned B3SOIFDsNodePrimeSet :1; unsigned B3SOIFDicVBSGiven :1; unsigned B3SOIFDicVDSGiven :1; unsigned B3SOIFDicVGSGiven :1; unsigned B3SOIFDicVESGiven :1; unsigned B3SOIFDicVPSGiven :1; unsigned B3SOIFDbjtoffGiven :1; unsigned B3SOIFDdebugModGiven :1; unsigned B3SOIFDrth0Given :1; unsigned B3SOIFDcth0Given :1; unsigned B3SOIFDbodySquaresGiven :1; unsigned B3SOIFDoffGiven :1; double *B3SOIFDEePtr; double *B3SOIFDEbPtr; double *B3SOIFDBePtr; double *B3SOIFDEgPtr; double *B3SOIFDEdpPtr; double *B3SOIFDEspPtr; double *B3SOIFDTemptempPtr; double *B3SOIFDTempdpPtr; double *B3SOIFDTempspPtr; double *B3SOIFDTempgPtr; double *B3SOIFDTempbPtr; double *B3SOIFDTempePtr; double *B3SOIFDGtempPtr; double *B3SOIFDDPtempPtr; double *B3SOIFDSPtempPtr; double *B3SOIFDEtempPtr; double *B3SOIFDBtempPtr; double *B3SOIFDPtempPtr; double *B3SOIFDBpPtr; double *B3SOIFDPbPtr; double *B3SOIFDPpPtr; double *B3SOIFDPgPtr; double *B3SOIFDPdpPtr; double *B3SOIFDPspPtr; double *B3SOIFDPePtr; double *B3SOIFDDPePtr; double *B3SOIFDSPePtr; double *B3SOIFDGePtr; double *B3SOIFDDdPtr; double *B3SOIFDGgPtr; double *B3SOIFDSsPtr; double *B3SOIFDBbPtr; double *B3SOIFDDPdpPtr; double *B3SOIFDSPspPtr; double *B3SOIFDDdpPtr; double *B3SOIFDGbPtr; double *B3SOIFDGdpPtr; double *B3SOIFDGspPtr; double *B3SOIFDSspPtr; double *B3SOIFDBdpPtr; double *B3SOIFDBspPtr; double *B3SOIFDDPspPtr; double *B3SOIFDDPdPtr; double *B3SOIFDBgPtr; double *B3SOIFDDPgPtr; double *B3SOIFDSPgPtr; double *B3SOIFDSPsPtr; double *B3SOIFDDPbPtr; double *B3SOIFDSPbPtr; double *B3SOIFDSPdpPtr; double *B3SOIFDVbsPtr; /* Debug */ double *B3SOIFDIdsPtr; double *B3SOIFDIcPtr; double *B3SOIFDIbsPtr; double *B3SOIFDIbdPtr; double *B3SOIFDIiiPtr; double *B3SOIFDIgidlPtr; double *B3SOIFDItunPtr; double *B3SOIFDIbpPtr; double *B3SOIFDAbeffPtr; double *B3SOIFDVbs0effPtr; double *B3SOIFDVbseffPtr; double *B3SOIFDXcPtr; double *B3SOIFDCbbPtr; double *B3SOIFDCbdPtr; double *B3SOIFDCbgPtr; double *B3SOIFDqbPtr; double *B3SOIFDQbfPtr; double *B3SOIFDQjsPtr; double *B3SOIFDQjdPtr; /* clean up last */ double *B3SOIFDGmPtr; double *B3SOIFDGmbsPtr; double *B3SOIFDGdsPtr; double *B3SOIFDGmePtr; double *B3SOIFDVbs0teffPtr; double *B3SOIFDVthPtr; double *B3SOIFDVgsteffPtr; double *B3SOIFDXcsatPtr; double *B3SOIFDQaccPtr; double *B3SOIFDQsub0Ptr; double *B3SOIFDQsubs1Ptr; double *B3SOIFDQsubs2Ptr; double *B3SOIFDVdscvPtr; double *B3SOIFDVcscvPtr; double *B3SOIFDCbePtr; double *B3SOIFDqgPtr; double *B3SOIFDqdPtr; double *B3SOIFDqePtr; double *B3SOIFDDum1Ptr; double *B3SOIFDDum2Ptr; double *B3SOIFDDum3Ptr; double *B3SOIFDDum4Ptr; double *B3SOIFDDum5Ptr; /* End clean up last */ #define B3SOIFDvbd B3SOIFDstates+ 0 #define B3SOIFDvbs B3SOIFDstates+ 1 #define B3SOIFDvgs B3SOIFDstates+ 2 #define B3SOIFDvds B3SOIFDstates+ 3 #define B3SOIFDves B3SOIFDstates+ 4 #define B3SOIFDvps B3SOIFDstates+ 5 #define B3SOIFDvg B3SOIFDstates+ 6 #define B3SOIFDvd B3SOIFDstates+ 7 #define B3SOIFDvs B3SOIFDstates+ 8 #define B3SOIFDvp B3SOIFDstates+ 9 #define B3SOIFDve B3SOIFDstates+ 10 #define B3SOIFDdeltemp B3SOIFDstates+ 11 #define B3SOIFDqb B3SOIFDstates+ 12 #define B3SOIFDcqb B3SOIFDstates+ 13 #define B3SOIFDqg B3SOIFDstates+ 14 #define B3SOIFDcqg B3SOIFDstates+ 15 #define B3SOIFDqd B3SOIFDstates+ 16 #define B3SOIFDcqd B3SOIFDstates+ 17 #define B3SOIFDqe B3SOIFDstates+ 18 #define B3SOIFDcqe B3SOIFDstates+ 19 #define B3SOIFDqbs B3SOIFDstates+ 20 #define B3SOIFDqbd B3SOIFDstates+ 21 #define B3SOIFDqbe B3SOIFDstates+ 22 #define B3SOIFDqth B3SOIFDstates+ 23 #define B3SOIFDcqth B3SOIFDstates+ 24 #define B3SOIFDnumStates 25 /* indices to the array of B3SOIFD NOISE SOURCES */ #define B3SOIFDRDNOIZ 0 #define B3SOIFDRSNOIZ 1 #define B3SOIFDIDNOIZ 2 #define B3SOIFDFLNOIZ 3 #define B3SOIFDFBNOIZ 4 #define B3SOIFDTOTNOIZ 5 #define B3SOIFDNSRCS 6 /* the number of MOSFET(3) noise sources */ #ifndef NONOISE double B3SOIFDnVar[NSTATVARS][B3SOIFDNSRCS]; #else /* NONOISE */ double **B3SOIFDnVar; #endif /* NONOISE */ } B3SOIFDinstance ; struct b3soifdSizeDependParam { double Width; double Length; double Rth0; double Cth0; double B3SOIFDcdsc; double B3SOIFDcdscb; double B3SOIFDcdscd; double B3SOIFDcit; double B3SOIFDnfactor; double B3SOIFDvsat; double B3SOIFDat; double B3SOIFDa0; double B3SOIFDags; double B3SOIFDa1; double B3SOIFDa2; double B3SOIFDketa; double B3SOIFDnpeak; double B3SOIFDnsub; double B3SOIFDngate; double B3SOIFDgamma1; double B3SOIFDgamma2; double B3SOIFDvbx; double B3SOIFDvbi; double B3SOIFDvbm; double B3SOIFDvbsc; double B3SOIFDxt; double B3SOIFDphi; double B3SOIFDlitl; double B3SOIFDk1; double B3SOIFDkt1; double B3SOIFDkt1l; double B3SOIFDkt2; double B3SOIFDk2; double B3SOIFDk3; double B3SOIFDk3b; double B3SOIFDw0; double B3SOIFDnlx; double B3SOIFDdvt0; double B3SOIFDdvt1; double B3SOIFDdvt2; double B3SOIFDdvt0w; double B3SOIFDdvt1w; double B3SOIFDdvt2w; double B3SOIFDdrout; double B3SOIFDdsub; double B3SOIFDvth0; double B3SOIFDua; double B3SOIFDua1; double B3SOIFDub; double B3SOIFDub1; double B3SOIFDuc; double B3SOIFDuc1; double B3SOIFDu0; double B3SOIFDute; double B3SOIFDvoff; double B3SOIFDvfb; double B3SOIFDuatemp; double B3SOIFDubtemp; double B3SOIFDuctemp; double B3SOIFDrbody; double B3SOIFDrth; double B3SOIFDcth; double B3SOIFDrds0denom; double B3SOIFDvfbb; double B3SOIFDjbjt; double B3SOIFDjdif; double B3SOIFDjrec; double B3SOIFDjtun; double B3SOIFDcsesw; double B3SOIFDcdesw; /* Added */ double B3SOIFDsdt1; double B3SOIFDst2; double B3SOIFDst3; double B3SOIFDdt2; double B3SOIFDdt3; /* Added */ double B3SOIFDdelta; double B3SOIFDrdsw; double B3SOIFDrds0; double B3SOIFDprwg; double B3SOIFDprwb; double B3SOIFDprt; double B3SOIFDeta0; double B3SOIFDetab; double B3SOIFDpclm; double B3SOIFDpdibl1; double B3SOIFDpdibl2; double B3SOIFDpdiblb; double B3SOIFDpvag; double B3SOIFDwr; double B3SOIFDdwg; double B3SOIFDdwb; double B3SOIFDb0; double B3SOIFDb1; double B3SOIFDalpha0; double B3SOIFDalpha1; double B3SOIFDbeta0; /* CV model */ double B3SOIFDcgsl; double B3SOIFDcgdl; double B3SOIFDckappa; double B3SOIFDcf; double B3SOIFDclc; double B3SOIFDcle; /* Added for binning - START0 */ double B3SOIFDvbsa; double B3SOIFDdelp; double B3SOIFDkb1; double B3SOIFDkb3; double B3SOIFDdvbd0; double B3SOIFDdvbd1; double B3SOIFDabp; double B3SOIFDmxc; double B3SOIFDadice0; double B3SOIFDaii; double B3SOIFDbii; double B3SOIFDcii; double B3SOIFDdii; double B3SOIFDagidl; double B3SOIFDbgidl; double B3SOIFDngidl; double B3SOIFDntun; double B3SOIFDndiode; double B3SOIFDisbjt; double B3SOIFDisdif; double B3SOIFDisrec; double B3SOIFDistun; double B3SOIFDedl; double B3SOIFDkbjt1; double B3SOIFDvsdfb; double B3SOIFDvsdth; /* Added for binning - END0 */ /* Pre-calculated constants */ double B3SOIFDdw; double B3SOIFDdl; double B3SOIFDleff; double B3SOIFDweff; double B3SOIFDdwc; double B3SOIFDdlc; double B3SOIFDleffCV; double B3SOIFDweffCV; double B3SOIFDabulkCVfactor; double B3SOIFDcgso; double B3SOIFDcgdo; double B3SOIFDcgeo; double B3SOIFDu0temp; double B3SOIFDvsattemp; double B3SOIFDsqrtPhi; double B3SOIFDphis3; double B3SOIFDXdep0; double B3SOIFDsqrtXdep0; double B3SOIFDtheta0vb0; double B3SOIFDthetaRout; double B3SOIFDcof1; double B3SOIFDcof2; double B3SOIFDcof3; double B3SOIFDcof4; double B3SOIFDcdep0; struct b3soifdSizeDependParam *pNext; }; typedef struct sB3SOIFDmodel { struct GENmodel gen; #define B3SOIFDmodType gen.GENmodType #define B3SOIFDnextModel(inst) ((struct sB3SOIFDmodel *)((inst)->gen.GENnextModel)) #define B3SOIFDinstances(inst) ((B3SOIFDinstance *)((inst)->gen.GENinstances)) #define B3SOIFDmodName gen.GENmodName int B3SOIFDtype; int B3SOIFDmobMod; int B3SOIFDcapMod; int B3SOIFDnoiMod; int B3SOIFDshMod; int B3SOIFDbinUnit; int B3SOIFDparamChk; double B3SOIFDversion; double B3SOIFDtox; double B3SOIFDcdsc; double B3SOIFDcdscb; double B3SOIFDcdscd; double B3SOIFDcit; double B3SOIFDnfactor; double B3SOIFDvsat; double B3SOIFDat; double B3SOIFDa0; double B3SOIFDags; double B3SOIFDa1; double B3SOIFDa2; double B3SOIFDketa; double B3SOIFDnsub; double B3SOIFDnpeak; double B3SOIFDngate; double B3SOIFDgamma1; double B3SOIFDgamma2; double B3SOIFDvbx; double B3SOIFDvbm; double B3SOIFDxt; double B3SOIFDk1; double B3SOIFDkt1; double B3SOIFDkt1l; double B3SOIFDkt2; double B3SOIFDk2; double B3SOIFDk3; double B3SOIFDk3b; double B3SOIFDw0; double B3SOIFDnlx; double B3SOIFDdvt0; double B3SOIFDdvt1; double B3SOIFDdvt2; double B3SOIFDdvt0w; double B3SOIFDdvt1w; double B3SOIFDdvt2w; double B3SOIFDdrout; double B3SOIFDdsub; double B3SOIFDvth0; double B3SOIFDua; double B3SOIFDua1; double B3SOIFDub; double B3SOIFDub1; double B3SOIFDuc; double B3SOIFDuc1; double B3SOIFDu0; double B3SOIFDute; double B3SOIFDvoff; double B3SOIFDdelta; double B3SOIFDrdsw; double B3SOIFDprwg; double B3SOIFDprwb; double B3SOIFDprt; double B3SOIFDeta0; double B3SOIFDetab; double B3SOIFDpclm; double B3SOIFDpdibl1; double B3SOIFDpdibl2; double B3SOIFDpdiblb; double B3SOIFDpvag; double B3SOIFDwr; double B3SOIFDdwg; double B3SOIFDdwb; double B3SOIFDb0; double B3SOIFDb1; double B3SOIFDalpha0; double B3SOIFDalpha1; double B3SOIFDbeta0; double B3SOIFDtbox; double B3SOIFDtsi; double B3SOIFDxj; double B3SOIFDkb1; double B3SOIFDkb3; double B3SOIFDdvbd0; double B3SOIFDdvbd1; double B3SOIFDvbsa; double B3SOIFDdelp; double B3SOIFDrbody; double B3SOIFDrbsh; double B3SOIFDadice0; double B3SOIFDabp; double B3SOIFDmxc; double B3SOIFDrth0; double B3SOIFDcth0; double B3SOIFDaii; double B3SOIFDbii; double B3SOIFDcii; double B3SOIFDdii; double B3SOIFDngidl; double B3SOIFDagidl; double B3SOIFDbgidl; double B3SOIFDndiode; double B3SOIFDntun; double B3SOIFDisbjt; double B3SOIFDisdif; double B3SOIFDisrec; double B3SOIFDistun; double B3SOIFDxbjt; double B3SOIFDxdif; double B3SOIFDxrec; double B3SOIFDxtun; double B3SOIFDedl; double B3SOIFDkbjt1; double B3SOIFDtt; double B3SOIFDvsdfb; double B3SOIFDvsdth; double B3SOIFDcsdmin; double B3SOIFDasd; /* CV model */ double B3SOIFDcgsl; double B3SOIFDcgdl; double B3SOIFDckappa; double B3SOIFDcf; double B3SOIFDclc; double B3SOIFDcle; double B3SOIFDdwc; double B3SOIFDdlc; double B3SOIFDtnom; double B3SOIFDcgso; double B3SOIFDcgdo; double B3SOIFDcgeo; double B3SOIFDxpart; double B3SOIFDcFringOut; double B3SOIFDcFringMax; double B3SOIFDsheetResistance; double B3SOIFDbodyJctGateSideGradingCoeff; double B3SOIFDGatesidewallJctPotential; double B3SOIFDunitLengthGateSidewallJctCap; double B3SOIFDcsdesw; double B3SOIFDLint; double B3SOIFDLl; double B3SOIFDLln; double B3SOIFDLw; double B3SOIFDLwn; double B3SOIFDLwl; double B3SOIFDLmin; double B3SOIFDLmax; double B3SOIFDWint; double B3SOIFDWl; double B3SOIFDWln; double B3SOIFDWw; double B3SOIFDWwn; double B3SOIFDWwl; double B3SOIFDWmin; double B3SOIFDWmax; /* Added for binning - START1 */ /* Length Dependence */ double B3SOIFDlnpeak; double B3SOIFDlnsub; double B3SOIFDlngate; double B3SOIFDlvth0; double B3SOIFDlk1; double B3SOIFDlk2; double B3SOIFDlk3; double B3SOIFDlk3b; double B3SOIFDlvbsa; double B3SOIFDldelp; double B3SOIFDlkb1; double B3SOIFDlkb3; double B3SOIFDldvbd0; double B3SOIFDldvbd1; double B3SOIFDlw0; double B3SOIFDlnlx; double B3SOIFDldvt0; double B3SOIFDldvt1; double B3SOIFDldvt2; double B3SOIFDldvt0w; double B3SOIFDldvt1w; double B3SOIFDldvt2w; double B3SOIFDlu0; double B3SOIFDlua; double B3SOIFDlub; double B3SOIFDluc; double B3SOIFDlvsat; double B3SOIFDla0; double B3SOIFDlags; double B3SOIFDlb0; double B3SOIFDlb1; double B3SOIFDlketa; double B3SOIFDlabp; double B3SOIFDlmxc; double B3SOIFDladice0; double B3SOIFDla1; double B3SOIFDla2; double B3SOIFDlrdsw; double B3SOIFDlprwb; double B3SOIFDlprwg; double B3SOIFDlwr; double B3SOIFDlnfactor; double B3SOIFDldwg; double B3SOIFDldwb; double B3SOIFDlvoff; double B3SOIFDleta0; double B3SOIFDletab; double B3SOIFDldsub; double B3SOIFDlcit; double B3SOIFDlcdsc; double B3SOIFDlcdscb; double B3SOIFDlcdscd; double B3SOIFDlpclm; double B3SOIFDlpdibl1; double B3SOIFDlpdibl2; double B3SOIFDlpdiblb; double B3SOIFDldrout; double B3SOIFDlpvag; double B3SOIFDldelta; double B3SOIFDlaii; double B3SOIFDlbii; double B3SOIFDlcii; double B3SOIFDldii; double B3SOIFDlalpha0; double B3SOIFDlalpha1; double B3SOIFDlbeta0; double B3SOIFDlagidl; double B3SOIFDlbgidl; double B3SOIFDlngidl; double B3SOIFDlntun; double B3SOIFDlndiode; double B3SOIFDlisbjt; double B3SOIFDlisdif; double B3SOIFDlisrec; double B3SOIFDlistun; double B3SOIFDledl; double B3SOIFDlkbjt1; /* CV model */ double B3SOIFDlvsdfb; double B3SOIFDlvsdth; /* Width Dependence */ double B3SOIFDwnpeak; double B3SOIFDwnsub; double B3SOIFDwngate; double B3SOIFDwvth0; double B3SOIFDwk1; double B3SOIFDwk2; double B3SOIFDwk3; double B3SOIFDwk3b; double B3SOIFDwvbsa; double B3SOIFDwdelp; double B3SOIFDwkb1; double B3SOIFDwkb3; double B3SOIFDwdvbd0; double B3SOIFDwdvbd1; double B3SOIFDww0; double B3SOIFDwnlx; double B3SOIFDwdvt0; double B3SOIFDwdvt1; double B3SOIFDwdvt2; double B3SOIFDwdvt0w; double B3SOIFDwdvt1w; double B3SOIFDwdvt2w; double B3SOIFDwu0; double B3SOIFDwua; double B3SOIFDwub; double B3SOIFDwuc; double B3SOIFDwvsat; double B3SOIFDwa0; double B3SOIFDwags; double B3SOIFDwb0; double B3SOIFDwb1; double B3SOIFDwketa; double B3SOIFDwabp; double B3SOIFDwmxc; double B3SOIFDwadice0; double B3SOIFDwa1; double B3SOIFDwa2; double B3SOIFDwrdsw; double B3SOIFDwprwb; double B3SOIFDwprwg; double B3SOIFDwwr; double B3SOIFDwnfactor; double B3SOIFDwdwg; double B3SOIFDwdwb; double B3SOIFDwvoff; double B3SOIFDweta0; double B3SOIFDwetab; double B3SOIFDwdsub; double B3SOIFDwcit; double B3SOIFDwcdsc; double B3SOIFDwcdscb; double B3SOIFDwcdscd; double B3SOIFDwpclm; double B3SOIFDwpdibl1; double B3SOIFDwpdibl2; double B3SOIFDwpdiblb; double B3SOIFDwdrout; double B3SOIFDwpvag; double B3SOIFDwdelta; double B3SOIFDwaii; double B3SOIFDwbii; double B3SOIFDwcii; double B3SOIFDwdii; double B3SOIFDwalpha0; double B3SOIFDwalpha1; double B3SOIFDwbeta0; double B3SOIFDwagidl; double B3SOIFDwbgidl; double B3SOIFDwngidl; double B3SOIFDwntun; double B3SOIFDwndiode; double B3SOIFDwisbjt; double B3SOIFDwisdif; double B3SOIFDwisrec; double B3SOIFDwistun; double B3SOIFDwedl; double B3SOIFDwkbjt1; /* CV model */ double B3SOIFDwvsdfb; double B3SOIFDwvsdth; /* Cross-term Dependence */ double B3SOIFDpnpeak; double B3SOIFDpnsub; double B3SOIFDpngate; double B3SOIFDpvth0; double B3SOIFDpk1; double B3SOIFDpk2; double B3SOIFDpk3; double B3SOIFDpk3b; double B3SOIFDpvbsa; double B3SOIFDpdelp; double B3SOIFDpkb1; double B3SOIFDpkb3; double B3SOIFDpdvbd0; double B3SOIFDpdvbd1; double B3SOIFDpw0; double B3SOIFDpnlx; double B3SOIFDpdvt0; double B3SOIFDpdvt1; double B3SOIFDpdvt2; double B3SOIFDpdvt0w; double B3SOIFDpdvt1w; double B3SOIFDpdvt2w; double B3SOIFDpu0; double B3SOIFDpua; double B3SOIFDpub; double B3SOIFDpuc; double B3SOIFDpvsat; double B3SOIFDpa0; double B3SOIFDpags; double B3SOIFDpb0; double B3SOIFDpb1; double B3SOIFDpketa; double B3SOIFDpabp; double B3SOIFDpmxc; double B3SOIFDpadice0; double B3SOIFDpa1; double B3SOIFDpa2; double B3SOIFDprdsw; double B3SOIFDpprwb; double B3SOIFDpprwg; double B3SOIFDpwr; double B3SOIFDpnfactor; double B3SOIFDpdwg; double B3SOIFDpdwb; double B3SOIFDpvoff; double B3SOIFDpeta0; double B3SOIFDpetab; double B3SOIFDpdsub; double B3SOIFDpcit; double B3SOIFDpcdsc; double B3SOIFDpcdscb; double B3SOIFDpcdscd; double B3SOIFDppclm; double B3SOIFDppdibl1; double B3SOIFDppdibl2; double B3SOIFDppdiblb; double B3SOIFDpdrout; double B3SOIFDppvag; double B3SOIFDpdelta; double B3SOIFDpaii; double B3SOIFDpbii; double B3SOIFDpcii; double B3SOIFDpdii; double B3SOIFDpalpha0; double B3SOIFDpalpha1; double B3SOIFDpbeta0; double B3SOIFDpagidl; double B3SOIFDpbgidl; double B3SOIFDpngidl; double B3SOIFDpntun; double B3SOIFDpndiode; double B3SOIFDpisbjt; double B3SOIFDpisdif; double B3SOIFDpisrec; double B3SOIFDpistun; double B3SOIFDpedl; double B3SOIFDpkbjt1; /* CV model */ double B3SOIFDpvsdfb; double B3SOIFDpvsdth; /* Added for binning - END1 */ /* Pre-calculated constants */ double B3SOIFDcbox; double B3SOIFDcsi; double B3SOIFDcsieff; double B3SOIFDcoxt; double B3SOIFDcboxt; double B3SOIFDcsit; double B3SOIFDnfb; double B3SOIFDadice; double B3SOIFDqsi; double B3SOIFDqsieff; double B3SOIFDeg0; /* MCJ: move to size-dependent param. */ double B3SOIFDvtm; double B3SOIFDcox; double B3SOIFDcof1; double B3SOIFDcof2; double B3SOIFDcof3; double B3SOIFDcof4; double B3SOIFDvcrit; double B3SOIFDfactor1; double B3SOIFDoxideTrapDensityA; double B3SOIFDoxideTrapDensityB; double B3SOIFDoxideTrapDensityC; double B3SOIFDem; double B3SOIFDef; double B3SOIFDaf; double B3SOIFDkf; double B3SOIFDnoif; struct b3soifdSizeDependParam *pSizeDependParamKnot; /* Flags */ unsigned B3SOIFDtboxGiven:1; unsigned B3SOIFDtsiGiven :1; unsigned B3SOIFDxjGiven :1; unsigned B3SOIFDkb1Given :1; unsigned B3SOIFDkb3Given :1; unsigned B3SOIFDdvbd0Given :1; unsigned B3SOIFDdvbd1Given :1; unsigned B3SOIFDvbsaGiven :1; unsigned B3SOIFDdelpGiven :1; unsigned B3SOIFDrbodyGiven :1; unsigned B3SOIFDrbshGiven :1; unsigned B3SOIFDadice0Given :1; unsigned B3SOIFDabpGiven :1; unsigned B3SOIFDmxcGiven :1; unsigned B3SOIFDrth0Given :1; unsigned B3SOIFDcth0Given :1; unsigned B3SOIFDaiiGiven :1; unsigned B3SOIFDbiiGiven :1; unsigned B3SOIFDciiGiven :1; unsigned B3SOIFDdiiGiven :1; unsigned B3SOIFDngidlGiven :1; unsigned B3SOIFDagidlGiven :1; unsigned B3SOIFDbgidlGiven :1; unsigned B3SOIFDndiodeGiven :1; unsigned B3SOIFDntunGiven :1; unsigned B3SOIFDisbjtGiven :1; unsigned B3SOIFDisdifGiven :1; unsigned B3SOIFDisrecGiven :1; unsigned B3SOIFDistunGiven :1; unsigned B3SOIFDxbjtGiven :1; unsigned B3SOIFDxdifGiven :1; unsigned B3SOIFDxrecGiven :1; unsigned B3SOIFDxtunGiven :1; unsigned B3SOIFDedlGiven :1; unsigned B3SOIFDkbjt1Given :1; unsigned B3SOIFDttGiven :1; unsigned B3SOIFDvsdfbGiven :1; unsigned B3SOIFDvsdthGiven :1; unsigned B3SOIFDasdGiven :1; unsigned B3SOIFDcsdminGiven :1; unsigned B3SOIFDmobModGiven :1; unsigned B3SOIFDbinUnitGiven :1; unsigned B3SOIFDcapModGiven :1; unsigned B3SOIFDparamChkGiven :1; unsigned B3SOIFDnoiModGiven :1; unsigned B3SOIFDshModGiven :1; unsigned B3SOIFDtypeGiven :1; unsigned B3SOIFDtoxGiven :1; unsigned B3SOIFDversionGiven :1; unsigned B3SOIFDcdscGiven :1; unsigned B3SOIFDcdscbGiven :1; unsigned B3SOIFDcdscdGiven :1; unsigned B3SOIFDcitGiven :1; unsigned B3SOIFDnfactorGiven :1; unsigned B3SOIFDvsatGiven :1; unsigned B3SOIFDatGiven :1; unsigned B3SOIFDa0Given :1; unsigned B3SOIFDagsGiven :1; unsigned B3SOIFDa1Given :1; unsigned B3SOIFDa2Given :1; unsigned B3SOIFDketaGiven :1; unsigned B3SOIFDnsubGiven :1; unsigned B3SOIFDnpeakGiven :1; unsigned B3SOIFDngateGiven :1; unsigned B3SOIFDgamma1Given :1; unsigned B3SOIFDgamma2Given :1; unsigned B3SOIFDvbxGiven :1; unsigned B3SOIFDvbmGiven :1; unsigned B3SOIFDxtGiven :1; unsigned B3SOIFDk1Given :1; unsigned B3SOIFDkt1Given :1; unsigned B3SOIFDkt1lGiven :1; unsigned B3SOIFDkt2Given :1; unsigned B3SOIFDk2Given :1; unsigned B3SOIFDk3Given :1; unsigned B3SOIFDk3bGiven :1; unsigned B3SOIFDw0Given :1; unsigned B3SOIFDnlxGiven :1; unsigned B3SOIFDdvt0Given :1; unsigned B3SOIFDdvt1Given :1; unsigned B3SOIFDdvt2Given :1; unsigned B3SOIFDdvt0wGiven :1; unsigned B3SOIFDdvt1wGiven :1; unsigned B3SOIFDdvt2wGiven :1; unsigned B3SOIFDdroutGiven :1; unsigned B3SOIFDdsubGiven :1; unsigned B3SOIFDvth0Given :1; unsigned B3SOIFDuaGiven :1; unsigned B3SOIFDua1Given :1; unsigned B3SOIFDubGiven :1; unsigned B3SOIFDub1Given :1; unsigned B3SOIFDucGiven :1; unsigned B3SOIFDuc1Given :1; unsigned B3SOIFDu0Given :1; unsigned B3SOIFDuteGiven :1; unsigned B3SOIFDvoffGiven :1; unsigned B3SOIFDrdswGiven :1; unsigned B3SOIFDprwgGiven :1; unsigned B3SOIFDprwbGiven :1; unsigned B3SOIFDprtGiven :1; unsigned B3SOIFDeta0Given :1; unsigned B3SOIFDetabGiven :1; unsigned B3SOIFDpclmGiven :1; unsigned B3SOIFDpdibl1Given :1; unsigned B3SOIFDpdibl2Given :1; unsigned B3SOIFDpdiblbGiven :1; unsigned B3SOIFDpvagGiven :1; unsigned B3SOIFDdeltaGiven :1; unsigned B3SOIFDwrGiven :1; unsigned B3SOIFDdwgGiven :1; unsigned B3SOIFDdwbGiven :1; unsigned B3SOIFDb0Given :1; unsigned B3SOIFDb1Given :1; unsigned B3SOIFDalpha0Given :1; unsigned B3SOIFDalpha1Given :1; unsigned B3SOIFDbeta0Given :1; /* CV model */ unsigned B3SOIFDcgslGiven :1; unsigned B3SOIFDcgdlGiven :1; unsigned B3SOIFDckappaGiven :1; unsigned B3SOIFDcfGiven :1; unsigned B3SOIFDclcGiven :1; unsigned B3SOIFDcleGiven :1; unsigned B3SOIFDdwcGiven :1; unsigned B3SOIFDdlcGiven :1; /* Added for binning - START2 */ /* Length Dependence */ unsigned B3SOIFDlnpeakGiven :1; unsigned B3SOIFDlnsubGiven :1; unsigned B3SOIFDlngateGiven :1; unsigned B3SOIFDlvth0Given :1; unsigned B3SOIFDlk1Given :1; unsigned B3SOIFDlk2Given :1; unsigned B3SOIFDlk3Given :1; unsigned B3SOIFDlk3bGiven :1; unsigned B3SOIFDlvbsaGiven :1; unsigned B3SOIFDldelpGiven :1; unsigned B3SOIFDlkb1Given :1; unsigned B3SOIFDlkb3Given :1; unsigned B3SOIFDldvbd0Given :1; unsigned B3SOIFDldvbd1Given :1; unsigned B3SOIFDlw0Given :1; unsigned B3SOIFDlnlxGiven :1; unsigned B3SOIFDldvt0Given :1; unsigned B3SOIFDldvt1Given :1; unsigned B3SOIFDldvt2Given :1; unsigned B3SOIFDldvt0wGiven :1; unsigned B3SOIFDldvt1wGiven :1; unsigned B3SOIFDldvt2wGiven :1; unsigned B3SOIFDlu0Given :1; unsigned B3SOIFDluaGiven :1; unsigned B3SOIFDlubGiven :1; unsigned B3SOIFDlucGiven :1; unsigned B3SOIFDlvsatGiven :1; unsigned B3SOIFDla0Given :1; unsigned B3SOIFDlagsGiven :1; unsigned B3SOIFDlb0Given :1; unsigned B3SOIFDlb1Given :1; unsigned B3SOIFDlketaGiven :1; unsigned B3SOIFDlabpGiven :1; unsigned B3SOIFDlmxcGiven :1; unsigned B3SOIFDladice0Given :1; unsigned B3SOIFDla1Given :1; unsigned B3SOIFDla2Given :1; unsigned B3SOIFDlrdswGiven :1; unsigned B3SOIFDlprwbGiven :1; unsigned B3SOIFDlprwgGiven :1; unsigned B3SOIFDlwrGiven :1; unsigned B3SOIFDlnfactorGiven :1; unsigned B3SOIFDldwgGiven :1; unsigned B3SOIFDldwbGiven :1; unsigned B3SOIFDlvoffGiven :1; unsigned B3SOIFDleta0Given :1; unsigned B3SOIFDletabGiven :1; unsigned B3SOIFDldsubGiven :1; unsigned B3SOIFDlcitGiven :1; unsigned B3SOIFDlcdscGiven :1; unsigned B3SOIFDlcdscbGiven :1; unsigned B3SOIFDlcdscdGiven :1; unsigned B3SOIFDlpclmGiven :1; unsigned B3SOIFDlpdibl1Given :1; unsigned B3SOIFDlpdibl2Given :1; unsigned B3SOIFDlpdiblbGiven :1; unsigned B3SOIFDldroutGiven :1; unsigned B3SOIFDlpvagGiven :1; unsigned B3SOIFDldeltaGiven :1; unsigned B3SOIFDlaiiGiven :1; unsigned B3SOIFDlbiiGiven :1; unsigned B3SOIFDlciiGiven :1; unsigned B3SOIFDldiiGiven :1; unsigned B3SOIFDlalpha0Given :1; unsigned B3SOIFDlalpha1Given :1; unsigned B3SOIFDlbeta0Given :1; unsigned B3SOIFDlagidlGiven :1; unsigned B3SOIFDlbgidlGiven :1; unsigned B3SOIFDlngidlGiven :1; unsigned B3SOIFDlntunGiven :1; unsigned B3SOIFDlndiodeGiven :1; unsigned B3SOIFDlisbjtGiven :1; unsigned B3SOIFDlisdifGiven :1; unsigned B3SOIFDlisrecGiven :1; unsigned B3SOIFDlistunGiven :1; unsigned B3SOIFDledlGiven :1; unsigned B3SOIFDlkbjt1Given :1; /* CV model */ unsigned B3SOIFDlvsdfbGiven :1; unsigned B3SOIFDlvsdthGiven :1; /* Width Dependence */ unsigned B3SOIFDwnpeakGiven :1; unsigned B3SOIFDwnsubGiven :1; unsigned B3SOIFDwngateGiven :1; unsigned B3SOIFDwvth0Given :1; unsigned B3SOIFDwk1Given :1; unsigned B3SOIFDwk2Given :1; unsigned B3SOIFDwk3Given :1; unsigned B3SOIFDwk3bGiven :1; unsigned B3SOIFDwvbsaGiven :1; unsigned B3SOIFDwdelpGiven :1; unsigned B3SOIFDwkb1Given :1; unsigned B3SOIFDwkb3Given :1; unsigned B3SOIFDwdvbd0Given :1; unsigned B3SOIFDwdvbd1Given :1; unsigned B3SOIFDww0Given :1; unsigned B3SOIFDwnlxGiven :1; unsigned B3SOIFDwdvt0Given :1; unsigned B3SOIFDwdvt1Given :1; unsigned B3SOIFDwdvt2Given :1; unsigned B3SOIFDwdvt0wGiven :1; unsigned B3SOIFDwdvt1wGiven :1; unsigned B3SOIFDwdvt2wGiven :1; unsigned B3SOIFDwu0Given :1; unsigned B3SOIFDwuaGiven :1; unsigned B3SOIFDwubGiven :1; unsigned B3SOIFDwucGiven :1; unsigned B3SOIFDwvsatGiven :1; unsigned B3SOIFDwa0Given :1; unsigned B3SOIFDwagsGiven :1; unsigned B3SOIFDwb0Given :1; unsigned B3SOIFDwb1Given :1; unsigned B3SOIFDwketaGiven :1; unsigned B3SOIFDwabpGiven :1; unsigned B3SOIFDwmxcGiven :1; unsigned B3SOIFDwadice0Given :1; unsigned B3SOIFDwa1Given :1; unsigned B3SOIFDwa2Given :1; unsigned B3SOIFDwrdswGiven :1; unsigned B3SOIFDwprwbGiven :1; unsigned B3SOIFDwprwgGiven :1; unsigned B3SOIFDwwrGiven :1; unsigned B3SOIFDwnfactorGiven :1; unsigned B3SOIFDwdwgGiven :1; unsigned B3SOIFDwdwbGiven :1; unsigned B3SOIFDwvoffGiven :1; unsigned B3SOIFDweta0Given :1; unsigned B3SOIFDwetabGiven :1; unsigned B3SOIFDwdsubGiven :1; unsigned B3SOIFDwcitGiven :1; unsigned B3SOIFDwcdscGiven :1; unsigned B3SOIFDwcdscbGiven :1; unsigned B3SOIFDwcdscdGiven :1; unsigned B3SOIFDwpclmGiven :1; unsigned B3SOIFDwpdibl1Given :1; unsigned B3SOIFDwpdibl2Given :1; unsigned B3SOIFDwpdiblbGiven :1; unsigned B3SOIFDwdroutGiven :1; unsigned B3SOIFDwpvagGiven :1; unsigned B3SOIFDwdeltaGiven :1; unsigned B3SOIFDwaiiGiven :1; unsigned B3SOIFDwbiiGiven :1; unsigned B3SOIFDwciiGiven :1; unsigned B3SOIFDwdiiGiven :1; unsigned B3SOIFDwalpha0Given :1; unsigned B3SOIFDwalpha1Given :1; unsigned B3SOIFDwbeta0Given :1; unsigned B3SOIFDwagidlGiven :1; unsigned B3SOIFDwbgidlGiven :1; unsigned B3SOIFDwngidlGiven :1; unsigned B3SOIFDwntunGiven :1; unsigned B3SOIFDwndiodeGiven :1; unsigned B3SOIFDwisbjtGiven :1; unsigned B3SOIFDwisdifGiven :1; unsigned B3SOIFDwisrecGiven :1; unsigned B3SOIFDwistunGiven :1; unsigned B3SOIFDwedlGiven :1; unsigned B3SOIFDwkbjt1Given :1; /* CV model */ unsigned B3SOIFDwvsdfbGiven :1; unsigned B3SOIFDwvsdthGiven :1; /* Cross-term Dependence */ unsigned B3SOIFDpnpeakGiven :1; unsigned B3SOIFDpnsubGiven :1; unsigned B3SOIFDpngateGiven :1; unsigned B3SOIFDpvth0Given :1; unsigned B3SOIFDpk1Given :1; unsigned B3SOIFDpk2Given :1; unsigned B3SOIFDpk3Given :1; unsigned B3SOIFDpk3bGiven :1; unsigned B3SOIFDpvbsaGiven :1; unsigned B3SOIFDpdelpGiven :1; unsigned B3SOIFDpkb1Given :1; unsigned B3SOIFDpkb3Given :1; unsigned B3SOIFDpdvbd0Given :1; unsigned B3SOIFDpdvbd1Given :1; unsigned B3SOIFDpw0Given :1; unsigned B3SOIFDpnlxGiven :1; unsigned B3SOIFDpdvt0Given :1; unsigned B3SOIFDpdvt1Given :1; unsigned B3SOIFDpdvt2Given :1; unsigned B3SOIFDpdvt0wGiven :1; unsigned B3SOIFDpdvt1wGiven :1; unsigned B3SOIFDpdvt2wGiven :1; unsigned B3SOIFDpu0Given :1; unsigned B3SOIFDpuaGiven :1; unsigned B3SOIFDpubGiven :1; unsigned B3SOIFDpucGiven :1; unsigned B3SOIFDpvsatGiven :1; unsigned B3SOIFDpa0Given :1; unsigned B3SOIFDpagsGiven :1; unsigned B3SOIFDpb0Given :1; unsigned B3SOIFDpb1Given :1; unsigned B3SOIFDpketaGiven :1; unsigned B3SOIFDpabpGiven :1; unsigned B3SOIFDpmxcGiven :1; unsigned B3SOIFDpadice0Given :1; unsigned B3SOIFDpa1Given :1; unsigned B3SOIFDpa2Given :1; unsigned B3SOIFDprdswGiven :1; unsigned B3SOIFDpprwbGiven :1; unsigned B3SOIFDpprwgGiven :1; unsigned B3SOIFDpwrGiven :1; unsigned B3SOIFDpnfactorGiven :1; unsigned B3SOIFDpdwgGiven :1; unsigned B3SOIFDpdwbGiven :1; unsigned B3SOIFDpvoffGiven :1; unsigned B3SOIFDpeta0Given :1; unsigned B3SOIFDpetabGiven :1; unsigned B3SOIFDpdsubGiven :1; unsigned B3SOIFDpcitGiven :1; unsigned B3SOIFDpcdscGiven :1; unsigned B3SOIFDpcdscbGiven :1; unsigned B3SOIFDpcdscdGiven :1; unsigned B3SOIFDppclmGiven :1; unsigned B3SOIFDppdibl1Given :1; unsigned B3SOIFDppdibl2Given :1; unsigned B3SOIFDppdiblbGiven :1; unsigned B3SOIFDpdroutGiven :1; unsigned B3SOIFDppvagGiven :1; unsigned B3SOIFDpdeltaGiven :1; unsigned B3SOIFDpaiiGiven :1; unsigned B3SOIFDpbiiGiven :1; unsigned B3SOIFDpciiGiven :1; unsigned B3SOIFDpdiiGiven :1; unsigned B3SOIFDpalpha0Given :1; unsigned B3SOIFDpalpha1Given :1; unsigned B3SOIFDpbeta0Given :1; unsigned B3SOIFDpagidlGiven :1; unsigned B3SOIFDpbgidlGiven :1; unsigned B3SOIFDpngidlGiven :1; unsigned B3SOIFDpntunGiven :1; unsigned B3SOIFDpndiodeGiven :1; unsigned B3SOIFDpisbjtGiven :1; unsigned B3SOIFDpisdifGiven :1; unsigned B3SOIFDpisrecGiven :1; unsigned B3SOIFDpistunGiven :1; unsigned B3SOIFDpedlGiven :1; unsigned B3SOIFDpkbjt1Given :1; /* CV model */ unsigned B3SOIFDpvsdfbGiven :1; unsigned B3SOIFDpvsdthGiven :1; /* Added for binning - END2 */ unsigned B3SOIFDuseFringeGiven :1; unsigned B3SOIFDtnomGiven :1; unsigned B3SOIFDcgsoGiven :1; unsigned B3SOIFDcgdoGiven :1; unsigned B3SOIFDcgeoGiven :1; unsigned B3SOIFDxpartGiven :1; unsigned B3SOIFDsheetResistanceGiven :1; unsigned B3SOIFDGatesidewallJctPotentialGiven :1; unsigned B3SOIFDbodyJctGateSideGradingCoeffGiven :1; unsigned B3SOIFDunitLengthGateSidewallJctCapGiven :1; unsigned B3SOIFDcsdeswGiven :1; unsigned B3SOIFDoxideTrapDensityAGiven :1; unsigned B3SOIFDoxideTrapDensityBGiven :1; unsigned B3SOIFDoxideTrapDensityCGiven :1; unsigned B3SOIFDemGiven :1; unsigned B3SOIFDefGiven :1; unsigned B3SOIFDafGiven :1; unsigned B3SOIFDkfGiven :1; unsigned B3SOIFDnoifGiven :1; unsigned B3SOIFDLintGiven :1; unsigned B3SOIFDLlGiven :1; unsigned B3SOIFDLlnGiven :1; unsigned B3SOIFDLwGiven :1; unsigned B3SOIFDLwnGiven :1; unsigned B3SOIFDLwlGiven :1; unsigned B3SOIFDLminGiven :1; unsigned B3SOIFDLmaxGiven :1; unsigned B3SOIFDWintGiven :1; unsigned B3SOIFDWlGiven :1; unsigned B3SOIFDWlnGiven :1; unsigned B3SOIFDWwGiven :1; unsigned B3SOIFDWwnGiven :1; unsigned B3SOIFDWwlGiven :1; unsigned B3SOIFDWminGiven :1; unsigned B3SOIFDWmaxGiven :1; } B3SOIFDmodel; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ /* device parameters */ #define B3SOIFD_W 1 #define B3SOIFD_L 2 #define B3SOIFD_M 22 #define B3SOIFD_AS 3 #define B3SOIFD_AD 4 #define B3SOIFD_PS 5 #define B3SOIFD_PD 6 #define B3SOIFD_NRS 7 #define B3SOIFD_NRD 8 #define B3SOIFD_OFF 9 #define B3SOIFD_IC_VBS 10 #define B3SOIFD_IC_VDS 11 #define B3SOIFD_IC_VGS 12 #define B3SOIFD_IC_VES 13 #define B3SOIFD_IC_VPS 14 #define B3SOIFD_BJTOFF 15 #define B3SOIFD_RTH0 16 #define B3SOIFD_CTH0 17 #define B3SOIFD_NRB 18 #define B3SOIFD_IC 19 #define B3SOIFD_NQSMOD 20 #define B3SOIFD_DEBUG 21 /* model parameters */ #define B3SOIFD_MOD_CAPMOD 101 #define B3SOIFD_MOD_NQSMOD 102 #define B3SOIFD_MOD_MOBMOD 103 #define B3SOIFD_MOD_NOIMOD 104 #define B3SOIFD_MOD_SHMOD 105 #define B3SOIFD_MOD_DDMOD 106 #define B3SOIFD_MOD_TOX 107 #define B3SOIFD_MOD_CDSC 108 #define B3SOIFD_MOD_CDSCB 109 #define B3SOIFD_MOD_CIT 110 #define B3SOIFD_MOD_NFACTOR 111 #define B3SOIFD_MOD_XJ 112 #define B3SOIFD_MOD_VSAT 113 #define B3SOIFD_MOD_AT 114 #define B3SOIFD_MOD_A0 115 #define B3SOIFD_MOD_A1 116 #define B3SOIFD_MOD_A2 117 #define B3SOIFD_MOD_KETA 118 #define B3SOIFD_MOD_NSUB 119 #define B3SOIFD_MOD_NPEAK 120 #define B3SOIFD_MOD_NGATE 121 #define B3SOIFD_MOD_GAMMA1 122 #define B3SOIFD_MOD_GAMMA2 123 #define B3SOIFD_MOD_VBX 124 #define B3SOIFD_MOD_BINUNIT 125 #define B3SOIFD_MOD_VBM 126 #define B3SOIFD_MOD_XT 127 #define B3SOIFD_MOD_K1 129 #define B3SOIFD_MOD_KT1 130 #define B3SOIFD_MOD_KT1L 131 #define B3SOIFD_MOD_K2 132 #define B3SOIFD_MOD_KT2 133 #define B3SOIFD_MOD_K3 134 #define B3SOIFD_MOD_K3B 135 #define B3SOIFD_MOD_W0 136 #define B3SOIFD_MOD_NLX 137 #define B3SOIFD_MOD_DVT0 138 #define B3SOIFD_MOD_DVT1 139 #define B3SOIFD_MOD_DVT2 140 #define B3SOIFD_MOD_DVT0W 141 #define B3SOIFD_MOD_DVT1W 142 #define B3SOIFD_MOD_DVT2W 143 #define B3SOIFD_MOD_DROUT 144 #define B3SOIFD_MOD_DSUB 145 #define B3SOIFD_MOD_VTH0 146 #define B3SOIFD_MOD_UA 147 #define B3SOIFD_MOD_UA1 148 #define B3SOIFD_MOD_UB 149 #define B3SOIFD_MOD_UB1 150 #define B3SOIFD_MOD_UC 151 #define B3SOIFD_MOD_UC1 152 #define B3SOIFD_MOD_U0 153 #define B3SOIFD_MOD_UTE 154 #define B3SOIFD_MOD_VOFF 155 #define B3SOIFD_MOD_DELTA 156 #define B3SOIFD_MOD_RDSW 157 #define B3SOIFD_MOD_PRT 158 #define B3SOIFD_MOD_LDD 159 #define B3SOIFD_MOD_ETA 160 #define B3SOIFD_MOD_ETA0 161 #define B3SOIFD_MOD_ETAB 162 #define B3SOIFD_MOD_PCLM 163 #define B3SOIFD_MOD_PDIBL1 164 #define B3SOIFD_MOD_PDIBL2 165 #define B3SOIFD_MOD_PSCBE1 166 #define B3SOIFD_MOD_PSCBE2 167 #define B3SOIFD_MOD_PVAG 168 #define B3SOIFD_MOD_WR 169 #define B3SOIFD_MOD_DWG 170 #define B3SOIFD_MOD_DWB 171 #define B3SOIFD_MOD_B0 172 #define B3SOIFD_MOD_B1 173 #define B3SOIFD_MOD_ALPHA0 174 #define B3SOIFD_MOD_BETA0 175 #define B3SOIFD_MOD_PDIBLB 178 #define B3SOIFD_MOD_PRWG 179 #define B3SOIFD_MOD_PRWB 180 #define B3SOIFD_MOD_CDSCD 181 #define B3SOIFD_MOD_AGS 182 #define B3SOIFD_MOD_FRINGE 184 #define B3SOIFD_MOD_CGSL 186 #define B3SOIFD_MOD_CGDL 187 #define B3SOIFD_MOD_CKAPPA 188 #define B3SOIFD_MOD_CF 189 #define B3SOIFD_MOD_CLC 190 #define B3SOIFD_MOD_CLE 191 #define B3SOIFD_MOD_PARAMCHK 192 #define B3SOIFD_MOD_VERSION 193 #define B3SOIFD_MOD_TBOX 195 #define B3SOIFD_MOD_TSI 196 #define B3SOIFD_MOD_KB1 197 #define B3SOIFD_MOD_KB3 198 #define B3SOIFD_MOD_DVBD0 199 #define B3SOIFD_MOD_DVBD1 200 #define B3SOIFD_MOD_DELP 201 #define B3SOIFD_MOD_VBSA 202 #define B3SOIFD_MOD_RBODY 204 #define B3SOIFD_MOD_ADICE0 205 #define B3SOIFD_MOD_ABP 206 #define B3SOIFD_MOD_MXC 207 #define B3SOIFD_MOD_RTH0 208 #define B3SOIFD_MOD_CTH0 209 #define B3SOIFD_MOD_AII 210 #define B3SOIFD_MOD_BII 211 #define B3SOIFD_MOD_CII 212 #define B3SOIFD_MOD_DII 213 #define B3SOIFD_MOD_ALPHA1 214 #define B3SOIFD_MOD_NGIDL 215 #define B3SOIFD_MOD_AGIDL 216 #define B3SOIFD_MOD_BGIDL 217 #define B3SOIFD_MOD_NDIODE 218 #define B3SOIFD_MOD_LDIOF 219 #define B3SOIFD_MOD_LDIOR 220 #define B3SOIFD_MOD_NTUN 221 #define B3SOIFD_MOD_ISBJT 222 #define B3SOIFD_MOD_ISDIF 223 #define B3SOIFD_MOD_ISREC 224 #define B3SOIFD_MOD_ISTUN 225 #define B3SOIFD_MOD_XBJT 226 #define B3SOIFD_MOD_XDIF 227 #define B3SOIFD_MOD_XREC 228 #define B3SOIFD_MOD_XTUN 229 #define B3SOIFD_MOD_EDL 230 #define B3SOIFD_MOD_KBJT1 231 #define B3SOIFD_MOD_TT 232 #define B3SOIFD_MOD_VSDTH 233 #define B3SOIFD_MOD_VSDFB 234 #define B3SOIFD_MOD_ASD 235 #define B3SOIFD_MOD_CSDMIN 236 #define B3SOIFD_MOD_RBSH 237 /* Added for binning - START3 */ /* Length dependence */ #define B3SOIFD_MOD_LNPEAK 301 #define B3SOIFD_MOD_LNSUB 302 #define B3SOIFD_MOD_LNGATE 303 #define B3SOIFD_MOD_LVTH0 304 #define B3SOIFD_MOD_LK1 305 #define B3SOIFD_MOD_LK2 306 #define B3SOIFD_MOD_LK3 307 #define B3SOIFD_MOD_LK3B 308 #define B3SOIFD_MOD_LVBSA 309 #define B3SOIFD_MOD_LDELP 310 #define B3SOIFD_MOD_LKB1 311 #define B3SOIFD_MOD_LKB3 312 #define B3SOIFD_MOD_LDVBD0 313 #define B3SOIFD_MOD_LDVBD1 314 #define B3SOIFD_MOD_LW0 315 #define B3SOIFD_MOD_LNLX 316 #define B3SOIFD_MOD_LDVT0 317 #define B3SOIFD_MOD_LDVT1 318 #define B3SOIFD_MOD_LDVT2 319 #define B3SOIFD_MOD_LDVT0W 320 #define B3SOIFD_MOD_LDVT1W 321 #define B3SOIFD_MOD_LDVT2W 322 #define B3SOIFD_MOD_LU0 323 #define B3SOIFD_MOD_LUA 324 #define B3SOIFD_MOD_LUB 325 #define B3SOIFD_MOD_LUC 326 #define B3SOIFD_MOD_LVSAT 327 #define B3SOIFD_MOD_LA0 328 #define B3SOIFD_MOD_LAGS 329 #define B3SOIFD_MOD_LB0 330 #define B3SOIFD_MOD_LB1 331 #define B3SOIFD_MOD_LKETA 332 #define B3SOIFD_MOD_LABP 333 #define B3SOIFD_MOD_LMXC 334 #define B3SOIFD_MOD_LADICE0 335 #define B3SOIFD_MOD_LA1 336 #define B3SOIFD_MOD_LA2 337 #define B3SOIFD_MOD_LRDSW 338 #define B3SOIFD_MOD_LPRWB 339 #define B3SOIFD_MOD_LPRWG 340 #define B3SOIFD_MOD_LWR 341 #define B3SOIFD_MOD_LNFACTOR 342 #define B3SOIFD_MOD_LDWG 343 #define B3SOIFD_MOD_LDWB 344 #define B3SOIFD_MOD_LVOFF 345 #define B3SOIFD_MOD_LETA0 346 #define B3SOIFD_MOD_LETAB 347 #define B3SOIFD_MOD_LDSUB 348 #define B3SOIFD_MOD_LCIT 349 #define B3SOIFD_MOD_LCDSC 350 #define B3SOIFD_MOD_LCDSCB 351 #define B3SOIFD_MOD_LCDSCD 352 #define B3SOIFD_MOD_LPCLM 353 #define B3SOIFD_MOD_LPDIBL1 354 #define B3SOIFD_MOD_LPDIBL2 355 #define B3SOIFD_MOD_LPDIBLB 356 #define B3SOIFD_MOD_LDROUT 357 #define B3SOIFD_MOD_LPVAG 358 #define B3SOIFD_MOD_LDELTA 359 #define B3SOIFD_MOD_LAII 360 #define B3SOIFD_MOD_LBII 361 #define B3SOIFD_MOD_LCII 362 #define B3SOIFD_MOD_LDII 363 #define B3SOIFD_MOD_LALPHA0 364 #define B3SOIFD_MOD_LALPHA1 365 #define B3SOIFD_MOD_LBETA0 366 #define B3SOIFD_MOD_LAGIDL 367 #define B3SOIFD_MOD_LBGIDL 368 #define B3SOIFD_MOD_LNGIDL 369 #define B3SOIFD_MOD_LNTUN 370 #define B3SOIFD_MOD_LNDIODE 371 #define B3SOIFD_MOD_LISBJT 372 #define B3SOIFD_MOD_LISDIF 373 #define B3SOIFD_MOD_LISREC 374 #define B3SOIFD_MOD_LISTUN 375 #define B3SOIFD_MOD_LEDL 376 #define B3SOIFD_MOD_LKBJT1 377 #define B3SOIFD_MOD_LVSDFB 378 #define B3SOIFD_MOD_LVSDTH 379 /* Width dependence */ #define B3SOIFD_MOD_WNPEAK 401 #define B3SOIFD_MOD_WNSUB 402 #define B3SOIFD_MOD_WNGATE 403 #define B3SOIFD_MOD_WVTH0 404 #define B3SOIFD_MOD_WK1 405 #define B3SOIFD_MOD_WK2 406 #define B3SOIFD_MOD_WK3 407 #define B3SOIFD_MOD_WK3B 408 #define B3SOIFD_MOD_WVBSA 409 #define B3SOIFD_MOD_WDELP 410 #define B3SOIFD_MOD_WKB1 411 #define B3SOIFD_MOD_WKB3 412 #define B3SOIFD_MOD_WDVBD0 413 #define B3SOIFD_MOD_WDVBD1 414 #define B3SOIFD_MOD_WW0 415 #define B3SOIFD_MOD_WNLX 416 #define B3SOIFD_MOD_WDVT0 417 #define B3SOIFD_MOD_WDVT1 418 #define B3SOIFD_MOD_WDVT2 419 #define B3SOIFD_MOD_WDVT0W 420 #define B3SOIFD_MOD_WDVT1W 421 #define B3SOIFD_MOD_WDVT2W 422 #define B3SOIFD_MOD_WU0 423 #define B3SOIFD_MOD_WUA 424 #define B3SOIFD_MOD_WUB 425 #define B3SOIFD_MOD_WUC 426 #define B3SOIFD_MOD_WVSAT 427 #define B3SOIFD_MOD_WA0 428 #define B3SOIFD_MOD_WAGS 429 #define B3SOIFD_MOD_WB0 430 #define B3SOIFD_MOD_WB1 431 #define B3SOIFD_MOD_WKETA 432 #define B3SOIFD_MOD_WABP 433 #define B3SOIFD_MOD_WMXC 434 #define B3SOIFD_MOD_WADICE0 435 #define B3SOIFD_MOD_WA1 436 #define B3SOIFD_MOD_WA2 437 #define B3SOIFD_MOD_WRDSW 438 #define B3SOIFD_MOD_WPRWB 439 #define B3SOIFD_MOD_WPRWG 440 #define B3SOIFD_MOD_WWR 441 #define B3SOIFD_MOD_WNFACTOR 442 #define B3SOIFD_MOD_WDWG 443 #define B3SOIFD_MOD_WDWB 444 #define B3SOIFD_MOD_WVOFF 445 #define B3SOIFD_MOD_WETA0 446 #define B3SOIFD_MOD_WETAB 447 #define B3SOIFD_MOD_WDSUB 448 #define B3SOIFD_MOD_WCIT 449 #define B3SOIFD_MOD_WCDSC 450 #define B3SOIFD_MOD_WCDSCB 451 #define B3SOIFD_MOD_WCDSCD 452 #define B3SOIFD_MOD_WPCLM 453 #define B3SOIFD_MOD_WPDIBL1 454 #define B3SOIFD_MOD_WPDIBL2 455 #define B3SOIFD_MOD_WPDIBLB 456 #define B3SOIFD_MOD_WDROUT 457 #define B3SOIFD_MOD_WPVAG 458 #define B3SOIFD_MOD_WDELTA 459 #define B3SOIFD_MOD_WAII 460 #define B3SOIFD_MOD_WBII 461 #define B3SOIFD_MOD_WCII 462 #define B3SOIFD_MOD_WDII 463 #define B3SOIFD_MOD_WALPHA0 464 #define B3SOIFD_MOD_WALPHA1 465 #define B3SOIFD_MOD_WBETA0 466 #define B3SOIFD_MOD_WAGIDL 467 #define B3SOIFD_MOD_WBGIDL 468 #define B3SOIFD_MOD_WNGIDL 469 #define B3SOIFD_MOD_WNTUN 470 #define B3SOIFD_MOD_WNDIODE 471 #define B3SOIFD_MOD_WISBJT 472 #define B3SOIFD_MOD_WISDIF 473 #define B3SOIFD_MOD_WISREC 474 #define B3SOIFD_MOD_WISTUN 475 #define B3SOIFD_MOD_WEDL 476 #define B3SOIFD_MOD_WKBJT1 477 #define B3SOIFD_MOD_WVSDFB 478 #define B3SOIFD_MOD_WVSDTH 479 /* Cross-term dependence */ #define B3SOIFD_MOD_PNPEAK 501 #define B3SOIFD_MOD_PNSUB 502 #define B3SOIFD_MOD_PNGATE 503 #define B3SOIFD_MOD_PVTH0 504 #define B3SOIFD_MOD_PK1 505 #define B3SOIFD_MOD_PK2 506 #define B3SOIFD_MOD_PK3 507 #define B3SOIFD_MOD_PK3B 508 #define B3SOIFD_MOD_PVBSA 509 #define B3SOIFD_MOD_PDELP 510 #define B3SOIFD_MOD_PKB1 511 #define B3SOIFD_MOD_PKB3 512 #define B3SOIFD_MOD_PDVBD0 513 #define B3SOIFD_MOD_PDVBD1 514 #define B3SOIFD_MOD_PW0 515 #define B3SOIFD_MOD_PNLX 516 #define B3SOIFD_MOD_PDVT0 517 #define B3SOIFD_MOD_PDVT1 518 #define B3SOIFD_MOD_PDVT2 519 #define B3SOIFD_MOD_PDVT0W 520 #define B3SOIFD_MOD_PDVT1W 521 #define B3SOIFD_MOD_PDVT2W 522 #define B3SOIFD_MOD_PU0 523 #define B3SOIFD_MOD_PUA 524 #define B3SOIFD_MOD_PUB 525 #define B3SOIFD_MOD_PUC 526 #define B3SOIFD_MOD_PVSAT 527 #define B3SOIFD_MOD_PA0 528 #define B3SOIFD_MOD_PAGS 529 #define B3SOIFD_MOD_PB0 530 #define B3SOIFD_MOD_PB1 531 #define B3SOIFD_MOD_PKETA 532 #define B3SOIFD_MOD_PABP 533 #define B3SOIFD_MOD_PMXC 534 #define B3SOIFD_MOD_PADICE0 535 #define B3SOIFD_MOD_PA1 536 #define B3SOIFD_MOD_PA2 537 #define B3SOIFD_MOD_PRDSW 538 #define B3SOIFD_MOD_PPRWB 539 #define B3SOIFD_MOD_PPRWG 540 #define B3SOIFD_MOD_PWR 541 #define B3SOIFD_MOD_PNFACTOR 542 #define B3SOIFD_MOD_PDWG 543 #define B3SOIFD_MOD_PDWB 544 #define B3SOIFD_MOD_PVOFF 545 #define B3SOIFD_MOD_PETA0 546 #define B3SOIFD_MOD_PETAB 547 #define B3SOIFD_MOD_PDSUB 548 #define B3SOIFD_MOD_PCIT 549 #define B3SOIFD_MOD_PCDSC 550 #define B3SOIFD_MOD_PCDSCB 551 #define B3SOIFD_MOD_PCDSCD 552 #define B3SOIFD_MOD_PPCLM 553 #define B3SOIFD_MOD_PPDIBL1 554 #define B3SOIFD_MOD_PPDIBL2 555 #define B3SOIFD_MOD_PPDIBLB 556 #define B3SOIFD_MOD_PDROUT 557 #define B3SOIFD_MOD_PPVAG 558 #define B3SOIFD_MOD_PDELTA 559 #define B3SOIFD_MOD_PAII 560 #define B3SOIFD_MOD_PBII 561 #define B3SOIFD_MOD_PCII 562 #define B3SOIFD_MOD_PDII 563 #define B3SOIFD_MOD_PALPHA0 564 #define B3SOIFD_MOD_PALPHA1 565 #define B3SOIFD_MOD_PBETA0 566 #define B3SOIFD_MOD_PAGIDL 567 #define B3SOIFD_MOD_PBGIDL 568 #define B3SOIFD_MOD_PNGIDL 569 #define B3SOIFD_MOD_PNTUN 570 #define B3SOIFD_MOD_PNDIODE 571 #define B3SOIFD_MOD_PISBJT 572 #define B3SOIFD_MOD_PISDIF 573 #define B3SOIFD_MOD_PISREC 574 #define B3SOIFD_MOD_PISTUN 575 #define B3SOIFD_MOD_PEDL 576 #define B3SOIFD_MOD_PKBJT1 577 #define B3SOIFD_MOD_PVSDFB 578 #define B3SOIFD_MOD_PVSDTH 579 /* Added for binning - END3 */ #define B3SOIFD_MOD_TNOM 701 #define B3SOIFD_MOD_CGSO 702 #define B3SOIFD_MOD_CGDO 703 #define B3SOIFD_MOD_CGEO 704 #define B3SOIFD_MOD_XPART 705 #define B3SOIFD_MOD_RSH 706 #define B3SOIFD_MOD_NMOS 814 #define B3SOIFD_MOD_PMOS 815 #define B3SOIFD_MOD_NOIA 816 #define B3SOIFD_MOD_NOIB 817 #define B3SOIFD_MOD_NOIC 818 #define B3SOIFD_MOD_LINT 819 #define B3SOIFD_MOD_LL 820 #define B3SOIFD_MOD_LLN 821 #define B3SOIFD_MOD_LW 822 #define B3SOIFD_MOD_LWN 823 #define B3SOIFD_MOD_LWL 824 #define B3SOIFD_MOD_WINT 827 #define B3SOIFD_MOD_WL 828 #define B3SOIFD_MOD_WLN 829 #define B3SOIFD_MOD_WW 830 #define B3SOIFD_MOD_WWN 831 #define B3SOIFD_MOD_WWL 832 #define B3SOIFD_MOD_DWC 835 #define B3SOIFD_MOD_DLC 836 #define B3SOIFD_MOD_EM 837 #define B3SOIFD_MOD_EF 838 #define B3SOIFD_MOD_AF 839 #define B3SOIFD_MOD_KF 840 #define B3SOIFD_MOD_NOIF 841 #define B3SOIFD_MOD_PBSWG 843 #define B3SOIFD_MOD_MJSWG 844 #define B3SOIFD_MOD_CJSWG 845 #define B3SOIFD_MOD_CSDESW 846 /* device questions */ #define B3SOIFD_DNODE 901 #define B3SOIFD_GNODE 902 #define B3SOIFD_SNODE 903 #define B3SOIFD_BNODE 904 #define B3SOIFD_ENODE 905 #define B3SOIFD_DNODEPRIME 906 #define B3SOIFD_SNODEPRIME 907 #define B3SOIFD_VBD 908 #define B3SOIFD_VBS 909 #define B3SOIFD_VGS 910 #define B3SOIFD_VES 911 #define B3SOIFD_VDS 912 #define B3SOIFD_CD 913 #define B3SOIFD_CBS 914 #define B3SOIFD_CBD 915 #define B3SOIFD_GM 916 #define B3SOIFD_GDS 917 #define B3SOIFD_GMBS 918 #define B3SOIFD_GBD 919 #define B3SOIFD_GBS 920 #define B3SOIFD_QB 921 #define B3SOIFD_CQB 922 #define B3SOIFD_QG 923 #define B3SOIFD_CQG 924 #define B3SOIFD_QD 925 #define B3SOIFD_CQD 926 #define B3SOIFD_CGG 927 #define B3SOIFD_CGD 928 #define B3SOIFD_CGS 929 #define B3SOIFD_CBG 930 #define B3SOIFD_CAPBD 931 #define B3SOIFD_CQBD 932 #define B3SOIFD_CAPBS 933 #define B3SOIFD_CQBS 934 #define B3SOIFD_CDG 935 #define B3SOIFD_CDD 936 #define B3SOIFD_CDS 937 #define B3SOIFD_VON 938 #define B3SOIFD_VDSAT 939 #define B3SOIFD_QBS 940 #define B3SOIFD_QBD 941 #define B3SOIFD_SOURCECONDUCT 942 #define B3SOIFD_DRAINCONDUCT 943 #define B3SOIFD_CBDB 944 #define B3SOIFD_CBSB 945 #define B3SOIFD_GMID 946 #include "b3soifdext.h" extern void B3SOIFDevaluate(double,double,double,B3SOIFDinstance*,B3SOIFDmodel*, double*,double*,double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, CKTcircuit*); extern int B3SOIFDdebug(B3SOIFDmodel*, B3SOIFDinstance*, CKTcircuit*, int); extern int B3SOIFDcheckModel(B3SOIFDmodel*, B3SOIFDinstance*, CKTcircuit*); #endif /*B3SOIFD*/ tmpk8ny_4pz/src/spicelib/devices/bsim3soi_fd/b3soifdgetic.c0000644000175000017500000000310713546075722024076 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang Modified by Paolo Nenzi 2002 File: b3soifdgetic.c 98/5/01 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMFD2.1 release */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b3soifddef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIFDgetic(GENmodel *inModel, CKTcircuit *ckt) { B3SOIFDmodel *model = (B3SOIFDmodel*)inModel; B3SOIFDinstance *here; for (; model ; model = B3SOIFDnextModel(model)) { for (here = B3SOIFDinstances(model); here; here = B3SOIFDnextInstance(here)) { if(!here->B3SOIFDicVBSGiven) { here->B3SOIFDicVBS = *(ckt->CKTrhs + here->B3SOIFDbNode) - *(ckt->CKTrhs + here->B3SOIFDsNode); } if (!here->B3SOIFDicVDSGiven) { here->B3SOIFDicVDS = *(ckt->CKTrhs + here->B3SOIFDdNode) - *(ckt->CKTrhs + here->B3SOIFDsNode); } if (!here->B3SOIFDicVGSGiven) { here->B3SOIFDicVGS = *(ckt->CKTrhs + here->B3SOIFDgNode) - *(ckt->CKTrhs + here->B3SOIFDsNode); } if (!here->B3SOIFDicVESGiven) { here->B3SOIFDicVES = *(ckt->CKTrhs + here->B3SOIFDeNode) - *(ckt->CKTrhs + here->B3SOIFDsNode); } if (!here->B3SOIFDicVPSGiven) { here->B3SOIFDicVPS = *(ckt->CKTrhs + here->B3SOIFDpNode) - *(ckt->CKTrhs + here->B3SOIFDsNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_fd/b3soifd.c0000644000175000017500000007667513546075722023106 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: Weidong Liu and Pin Su Feb 1999 Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang Modified by Wei Jin 99/9/27 Modified by Paolo Nenzi 2002 File: b3soifd.c 98/5/01 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMFD2.1 release */ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "b3soifddef.h" #include "ngspice/suffix.h" IFparm B3SOIFDpTable[] = { /* parameters */ IOP( "l", B3SOIFD_L, IF_REAL , "Length"), IOP( "w", B3SOIFD_W, IF_REAL , "Width"), IOP( "m", B3SOIFD_M, IF_REAL , "Parallel Multiplier"), IOP( "ad", B3SOIFD_AD, IF_REAL , "Drain area"), IOP( "as", B3SOIFD_AS, IF_REAL , "Source area"), IOP( "pd", B3SOIFD_PD, IF_REAL , "Drain perimeter"), IOP( "ps", B3SOIFD_PS, IF_REAL , "Source perimeter"), IOP( "nrd", B3SOIFD_NRD, IF_REAL , "Number of squares in drain"), IOP( "nrs", B3SOIFD_NRS, IF_REAL , "Number of squares in source"), IOP( "off", B3SOIFD_OFF, IF_FLAG , "Device is initially off"), IP( "ic", B3SOIFD_IC, IF_REALVEC , "Vector of DS,GS,BS initial voltages"), OP( "gmbs", B3SOIFD_GMBS, IF_REAL, "Gmb"), OP( "gm", B3SOIFD_GM, IF_REAL, "Gm"), OP( "gm/ids", B3SOIFD_GMID, IF_REAL, "Gm/Ids"), OP( "gds", B3SOIFD_GDS, IF_REAL, "Gds"), OP( "vdsat", B3SOIFD_VDSAT, IF_REAL, "Vdsat"), OP( "vth", B3SOIFD_VON, IF_REAL, "Vth"), OP( "ids", B3SOIFD_CD, IF_REAL, "Ids"), OP( "vbs", B3SOIFD_VBS, IF_REAL, "Vbs"), OP( "vgs", B3SOIFD_VGS, IF_REAL, "Vgs"), OP( "vds", B3SOIFD_VDS, IF_REAL, "Vds"), OP( "ves", B3SOIFD_VES, IF_REAL, "Ves"), IOP( "bjtoff", B3SOIFD_BJTOFF, IF_INTEGER, "BJT on/off flag"), IOP( "debug", B3SOIFD_DEBUG, IF_INTEGER, "BJT on/off flag"), IOP( "rth0", B3SOIFD_RTH0, IF_REAL, "Instance Thermal Resistance"), IOP( "cth0", B3SOIFD_CTH0, IF_REAL, "Instance Thermal Capacitance"), IOP( "nrb", B3SOIFD_NRB, IF_REAL, "Number of squares in body"), }; IFparm B3SOIFDmPTable[] = { /* model parameters */ IOP( "capmod", B3SOIFD_MOD_CAPMOD, IF_INTEGER, "Capacitance model selector"), IOP( "mobmod", B3SOIFD_MOD_MOBMOD, IF_INTEGER, "Mobility model selector"), IOP( "noimod", B3SOIFD_MOD_NOIMOD, IF_INTEGER, "Noise model selector"), IOP( "paramchk", B3SOIFD_MOD_PARAMCHK, IF_INTEGER, "Model parameter checking selector"), IOP( "binunit", B3SOIFD_MOD_BINUNIT, IF_INTEGER, "Bin unit selector"), IOP( "version", B3SOIFD_MOD_VERSION, IF_REAL, " parameter for model version"), IOP( "tox", B3SOIFD_MOD_TOX, IF_REAL, "Gate oxide thickness in meters"), IOP( "cdsc", B3SOIFD_MOD_CDSC, IF_REAL, "Drain/Source and channel coupling capacitance"), IOP( "cdscb", B3SOIFD_MOD_CDSCB, IF_REAL, "Body-bias dependence of cdsc"), IOP( "cdscd", B3SOIFD_MOD_CDSCD, IF_REAL, "Drain-bias dependence of cdsc"), IOP( "cit", B3SOIFD_MOD_CIT, IF_REAL, "Interface state capacitance"), IOP( "nfactor", B3SOIFD_MOD_NFACTOR, IF_REAL, "Subthreshold swing Coefficient"), IOP( "vsat", B3SOIFD_MOD_VSAT, IF_REAL, "Saturation velocity at tnom"), IOP( "at", B3SOIFD_MOD_AT, IF_REAL, "Temperature coefficient of vsat"), IOP( "a0", B3SOIFD_MOD_A0, IF_REAL, "Non-uniform depletion width effect coefficient."), IOP( "ags", B3SOIFD_MOD_AGS, IF_REAL, "Gate bias coefficient of Abulk."), IOP( "a1", B3SOIFD_MOD_A1, IF_REAL, "Non-saturation effect coefficient"), IOP( "a2", B3SOIFD_MOD_A2, IF_REAL, "Non-saturation effect coefficient"), IOP( "keta", B3SOIFD_MOD_KETA, IF_REAL, "Body-bias coefficient of non-uniform depletion width effect."), IOP( "nsub", B3SOIFD_MOD_NSUB, IF_REAL, "Substrate doping concentration with polarity"), IOP( "nch", B3SOIFD_MOD_NPEAK, IF_REAL, "Channel doping concentration"), IOP( "ngate", B3SOIFD_MOD_NGATE, IF_REAL, "Poly-gate doping concentration"), IOP( "gamma1", B3SOIFD_MOD_GAMMA1, IF_REAL, "Vth body coefficient"), IOP( "gamma2", B3SOIFD_MOD_GAMMA2, IF_REAL, "Vth body coefficient"), IOP( "vbx", B3SOIFD_MOD_VBX, IF_REAL, "Vth transition body Voltage"), IOP( "vbm", B3SOIFD_MOD_VBM, IF_REAL, "Maximum body voltage"), IOP( "xt", B3SOIFD_MOD_XT, IF_REAL, "Doping depth"), IOP( "k1", B3SOIFD_MOD_K1, IF_REAL, "Bulk effect coefficient 1"), IOP( "kt1", B3SOIFD_MOD_KT1, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt1l", B3SOIFD_MOD_KT1L, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt2", B3SOIFD_MOD_KT2, IF_REAL, "Body-coefficient of kt1"), IOP( "k2", B3SOIFD_MOD_K2, IF_REAL, "Bulk effect coefficient 2"), IOP( "k3", B3SOIFD_MOD_K3, IF_REAL, "Narrow width effect coefficient"), IOP( "k3b", B3SOIFD_MOD_K3B, IF_REAL, "Body effect coefficient of k3"), IOP( "w0", B3SOIFD_MOD_W0, IF_REAL, "Narrow width effect parameter"), IOP( "nlx", B3SOIFD_MOD_NLX, IF_REAL, "Lateral non-uniform doping effect"), IOP( "dvt0", B3SOIFD_MOD_DVT0, IF_REAL, "Short channel effect coeff. 0"), IOP( "dvt1", B3SOIFD_MOD_DVT1, IF_REAL, "Short channel effect coeff. 1"), IOP( "dvt2", B3SOIFD_MOD_DVT2, IF_REAL, "Short channel effect coeff. 2"), IOP( "dvt0w", B3SOIFD_MOD_DVT0W, IF_REAL, "Narrow Width coeff. 0"), IOP( "dvt1w", B3SOIFD_MOD_DVT1W, IF_REAL, "Narrow Width effect coeff. 1"), IOP( "dvt2w", B3SOIFD_MOD_DVT2W, IF_REAL, "Narrow Width effect coeff. 2"), IOP( "drout", B3SOIFD_MOD_DROUT, IF_REAL, "DIBL coefficient of output resistance"), IOP( "dsub", B3SOIFD_MOD_DSUB, IF_REAL, "DIBL coefficient in the subthreshold region"), IOP( "vth0", B3SOIFD_MOD_VTH0, IF_REAL,"Threshold voltage"), IOPR("vtho", B3SOIFD_MOD_VTH0, IF_REAL,"Threshold voltage"), IOP( "ua", B3SOIFD_MOD_UA, IF_REAL, "Linear gate dependence of mobility"), IOP( "ua1", B3SOIFD_MOD_UA1, IF_REAL, "Temperature coefficient of ua"), IOP( "ub", B3SOIFD_MOD_UB, IF_REAL, "Quadratic gate dependence of mobility"), IOP( "ub1", B3SOIFD_MOD_UB1, IF_REAL, "Temperature coefficient of ub"), IOP( "uc", B3SOIFD_MOD_UC, IF_REAL, "Body-bias dependence of mobility"), IOP( "uc1", B3SOIFD_MOD_UC1, IF_REAL, "Temperature coefficient of uc"), IOP( "u0", B3SOIFD_MOD_U0, IF_REAL, "Low-field mobility at Tnom"), IOP( "ute", B3SOIFD_MOD_UTE, IF_REAL, "Temperature coefficient of mobility"), IOP( "voff", B3SOIFD_MOD_VOFF, IF_REAL, "Threshold voltage offset"), IOP( "tnom", B3SOIFD_MOD_TNOM, IF_REAL, "Parameter measurement temperature"), IOP( "cgso", B3SOIFD_MOD_CGSO, IF_REAL, "Gate-source overlap capacitance per width"), IOP( "cgdo", B3SOIFD_MOD_CGDO, IF_REAL, "Gate-drain overlap capacitance per width"), IOP( "cgeo", B3SOIFD_MOD_CGEO, IF_REAL, "Gate-substrate overlap capacitance"), IOP( "xpart", B3SOIFD_MOD_XPART, IF_REAL, "Channel charge partitioning"), IOP( "delta", B3SOIFD_MOD_DELTA, IF_REAL, "Effective Vds parameter"), IOP( "rsh", B3SOIFD_MOD_RSH, IF_REAL, "Source-drain sheet resistance"), IOP( "rdsw", B3SOIFD_MOD_RDSW, IF_REAL, "Source-drain resistance per width"), IOP( "prwg", B3SOIFD_MOD_PRWG, IF_REAL, "Gate-bias effect on parasitic resistance "), IOP( "prwb", B3SOIFD_MOD_PRWB, IF_REAL, "Body-effect on parasitic resistance "), IOP( "prt", B3SOIFD_MOD_PRT, IF_REAL, "Temperature coefficient of parasitic resistance "), IOP( "eta0", B3SOIFD_MOD_ETA0, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "etab", B3SOIFD_MOD_ETAB, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "pclm", B3SOIFD_MOD_PCLM, IF_REAL, "Channel length modulation Coefficient"), IOP( "pdiblc1", B3SOIFD_MOD_PDIBL1, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblc2", B3SOIFD_MOD_PDIBL2, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblcb", B3SOIFD_MOD_PDIBLB, IF_REAL, "Body-effect on drain-induced barrier lowering"), IOP( "pvag", B3SOIFD_MOD_PVAG, IF_REAL, "Gate dependence of output resistance parameter"), IOP( "shmod", B3SOIFD_MOD_SHMOD, IF_INTEGER, "Self heating mode selector"), IOP( "tbox", B3SOIFD_MOD_TBOX, IF_REAL, "Back gate oxide thickness in meters"), IOP( "tsi", B3SOIFD_MOD_TSI, IF_REAL, "Silicon-on-insulator thickness in meters"), IOP( "xj", B3SOIFD_MOD_XJ, IF_REAL, "Junction Depth"), IOP( "kb1", B3SOIFD_MOD_KB1, IF_REAL, "Backgate coupling coefficient at strong inversion"), IOP( "kb3", B3SOIFD_MOD_KB3, IF_REAL, "Backgate coupling coefficient at subthreshold"), IOP( "dvbd0", B3SOIFD_MOD_DVBD0, IF_REAL, "First coefficient of short-channel effect on Vbs0t"), IOP( "dvbd1", B3SOIFD_MOD_DVBD1, IF_REAL, "Second coefficient of short-channel effect on Vbs0t"), IOP( "vbsa", B3SOIFD_MOD_VBSA, IF_REAL, "Vbs0t offset voltage"), IOP( "delp", B3SOIFD_MOD_DELP, IF_REAL, "Offset constant for limiting Vbseff to Phis"), IOP( "rbody", B3SOIFD_MOD_RBODY, IF_REAL, "Intrinsic body contact sheet resistance"), IOP( "rbsh", B3SOIFD_MOD_RBSH, IF_REAL, "Extrinsic body contact sheet resistance"), IOP( "adice0", B3SOIFD_MOD_ADICE0, IF_REAL, "DICE constant for bulk charge effect"), IOP( "abp", B3SOIFD_MOD_ABP, IF_REAL, "Gate bias coefficient for Xcsat calculation"), IOP( "mxc", B3SOIFD_MOD_MXC, IF_REAL, "A smoothing parameter for Xcsat calculation"), IOP( "rth0", B3SOIFD_MOD_RTH0, IF_REAL, "Self-heating thermal resistance"), IOP( "cth0", B3SOIFD_MOD_CTH0, IF_REAL, "Self-heating thermal capacitance"), IOP( "aii", B3SOIFD_MOD_AII, IF_REAL, "1st Vdsatii parameter"), IOP( "bii", B3SOIFD_MOD_BII, IF_REAL, "2nd Vdsatii parameter"), IOP( "cii", B3SOIFD_MOD_CII, IF_REAL, "3rd Vdsatii parameter"), IOP( "dii", B3SOIFD_MOD_DII, IF_REAL, "4th Vdsatii parameter"), IOP( "ngidl", B3SOIFD_MOD_NGIDL, IF_REAL, "GIDL first parameter"), IOP( "agidl", B3SOIFD_MOD_AGIDL, IF_REAL, "GIDL second parameter"), IOP( "bgidl", B3SOIFD_MOD_BGIDL, IF_REAL, "GIDL third parameter"), IOP( "ndiode", B3SOIFD_MOD_NDIODE, IF_REAL, "Diode non-ideality factor"), IOP( "ntun", B3SOIFD_MOD_NTUN, IF_REAL, "Reverse tunneling non-ideality factor"), IOP( "isbjt", B3SOIFD_MOD_ISBJT, IF_REAL, "BJT emitter injection constant"), IOP( "isdif", B3SOIFD_MOD_ISDIF, IF_REAL, "Body to S/D injection constant"), IOP( "isrec", B3SOIFD_MOD_ISREC, IF_REAL, "Recombination in depletion constant"), IOP( "istun", B3SOIFD_MOD_ISTUN, IF_REAL, "Tunneling diode constant"), IOP( "xbjt", B3SOIFD_MOD_XBJT, IF_REAL, "Temperature coefficient for Isbjt"), IOPR( "xdif",B3SOIFD_MOD_XBJT, IF_REAL, "Temperature coefficient for Isdif"), IOP( "xrec", B3SOIFD_MOD_XREC, IF_REAL, "Temperature coefficient for Isrec"), IOP( "xtun", B3SOIFD_MOD_XTUN, IF_REAL, "Temperature coefficient for Istun"), IOP( "edl", B3SOIFD_MOD_EDL, IF_REAL, "Electron diffusion length"), IOP( "kbjt1", B3SOIFD_MOD_KBJT1, IF_REAL, "Vds dependency on BJT base width"), IOP( "tt", B3SOIFD_MOD_TT, IF_REAL, "Diffusion capacitance transit time coefficient"), IOP( "vsdth", B3SOIFD_MOD_VSDTH, IF_REAL, "Source/Drain diffusion threshold voltage"), IOP( "vsdfb", B3SOIFD_MOD_VSDFB, IF_REAL, "Source/Drain diffusion flatband voltage"), IOP( "csdmin", B3SOIFD_MOD_CSDMIN, IF_REAL, "Source/Drain diffusion bottom minimum capacitance"), IOP( "asd", B3SOIFD_MOD_ASD, IF_REAL, "Source/Drain diffusion smoothing parameter"), IOP( "pbswg", B3SOIFD_MOD_PBSWG, IF_REAL, "Source/drain (gate side) sidewall junction capacitance built in potential"), IOP( "mjswg", B3SOIFD_MOD_MJSWG, IF_REAL, "Source/drain (gate side) sidewall junction capacitance grading coefficient"), IOP( "cjswg", B3SOIFD_MOD_CJSWG, IF_REAL, "Source/drain (gate side) sidewall junction capacitance per unit width"), IOP( "csdesw", B3SOIFD_MOD_CSDESW, IF_REAL, "Source/drain sidewall fringing constant"), IOP( "lint", B3SOIFD_MOD_LINT, IF_REAL, "Length reduction parameter"), IOP( "ll", B3SOIFD_MOD_LL, IF_REAL, "Length reduction parameter"), IOP( "lln", B3SOIFD_MOD_LLN, IF_REAL, "Length reduction parameter"), IOP( "lw", B3SOIFD_MOD_LW, IF_REAL, "Length reduction parameter"), IOP( "lwn", B3SOIFD_MOD_LWN, IF_REAL, "Length reduction parameter"), IOP( "lwl", B3SOIFD_MOD_LWL, IF_REAL, "Length reduction parameter"), IOP( "wr", B3SOIFD_MOD_WR, IF_REAL, "Width dependence of rds"), IOP( "wint", B3SOIFD_MOD_WINT, IF_REAL, "Width reduction parameter"), IOP( "dwg", B3SOIFD_MOD_DWG, IF_REAL, "Width reduction parameter"), IOP( "dwb", B3SOIFD_MOD_DWB, IF_REAL, "Width reduction parameter"), IOP( "wl", B3SOIFD_MOD_WL, IF_REAL, "Width reduction parameter"), IOP( "wln", B3SOIFD_MOD_WLN, IF_REAL, "Width reduction parameter"), IOP( "ww", B3SOIFD_MOD_WW, IF_REAL, "Width reduction parameter"), IOP( "wwn", B3SOIFD_MOD_WWN, IF_REAL, "Width reduction parameter"), IOP( "wwl", B3SOIFD_MOD_WWL, IF_REAL, "Width reduction parameter"), IOP( "b0", B3SOIFD_MOD_B0, IF_REAL, "Abulk narrow width parameter"), IOP( "b1", B3SOIFD_MOD_B1, IF_REAL, "Abulk narrow width parameter"), IOP( "cgsl", B3SOIFD_MOD_CGSL, IF_REAL, "New C-V model parameter"), IOP( "cgdl", B3SOIFD_MOD_CGDL, IF_REAL, "New C-V model parameter"), IOP( "ckappa", B3SOIFD_MOD_CKAPPA, IF_REAL, "New C-V model parameter"), IOP( "cf", B3SOIFD_MOD_CF, IF_REAL, "Fringe capacitance parameter"), IOP( "clc", B3SOIFD_MOD_CLC, IF_REAL, "Vdsat parameter for C-V model"), IOP( "cle", B3SOIFD_MOD_CLE, IF_REAL, "Vdsat parameter for C-V model"), IOP( "dwc", B3SOIFD_MOD_DWC, IF_REAL, "Delta W for C-V model"), IOP( "dlc", B3SOIFD_MOD_DLC, IF_REAL, "Delta L for C-V model"), IOP( "alpha0", B3SOIFD_MOD_ALPHA0, IF_REAL, "substrate current model parameter"), IOP( "alpha1", B3SOIFD_MOD_ALPHA1, IF_REAL, "substrate current model parameter"), IOP( "beta0", B3SOIFD_MOD_BETA0, IF_REAL, "substrate current model parameter"), IOP( "noia", B3SOIFD_MOD_NOIA, IF_REAL, "Flicker noise parameter"), IOP( "noib", B3SOIFD_MOD_NOIB, IF_REAL, "Flicker noise parameter"), IOP( "noic", B3SOIFD_MOD_NOIC, IF_REAL, "Flicker noise parameter"), IOP( "em", B3SOIFD_MOD_EM, IF_REAL, "Flicker noise parameter"), IOP( "ef", B3SOIFD_MOD_EF, IF_REAL, "Flicker noise frequency exponent"), IOP( "af", B3SOIFD_MOD_AF, IF_REAL, "Flicker noise exponent"), IOP( "kf", B3SOIFD_MOD_KF, IF_REAL, "Flicker noise coefficient"), IOP( "noif", B3SOIFD_MOD_NOIF, IF_REAL, "Floating body excess noise ideality factor"), /* Added for binning - START */ /* Length Dependence */ IOP( "lnch", B3SOIFD_MOD_LNPEAK, IF_REAL, "Length dependence of nch"), IOP( "lnsub", B3SOIFD_MOD_LNSUB, IF_REAL, "Length dependence of nsub"), IOP( "lngate", B3SOIFD_MOD_LNGATE, IF_REAL, "Length dependence of ngate"), IOP( "lvth0", B3SOIFD_MOD_LVTH0, IF_REAL,"Length dependence of vth0"), IOP( "lk1", B3SOIFD_MOD_LK1, IF_REAL, "Length dependence of k1"), IOP( "lk2", B3SOIFD_MOD_LK2, IF_REAL, "Length dependence of k2"), IOP( "lk3", B3SOIFD_MOD_LK3, IF_REAL, "Length dependence of k3"), IOP( "lk3b", B3SOIFD_MOD_LK3B, IF_REAL, "Length dependence of k3b"), IOP( "lvbsa", B3SOIFD_MOD_LVBSA, IF_REAL, "Length dependence of vbsa"), IOP( "ldelp", B3SOIFD_MOD_LDELP, IF_REAL, "Length dependence of delp"), IOP( "lkb1", B3SOIFD_MOD_LKB1, IF_REAL, "Length dependence of kb1"), IOP( "lkb3", B3SOIFD_MOD_LKB3, IF_REAL, "Length dependence of kb3"), IOP( "ldvbd0", B3SOIFD_MOD_LDVBD0, IF_REAL, "Length dependence of dvbd0"), IOP( "ldvbd1", B3SOIFD_MOD_LDVBD1, IF_REAL, "Length dependence of dvbd1"), IOP( "lw0", B3SOIFD_MOD_LW0, IF_REAL, "Length dependence of w0"), IOP( "lnlx", B3SOIFD_MOD_LNLX, IF_REAL, "Length dependence of nlx"), IOP( "ldvt0", B3SOIFD_MOD_LDVT0, IF_REAL, "Length dependence of dvt0"), IOP( "ldvt1", B3SOIFD_MOD_LDVT1, IF_REAL, "Length dependence of dvt1"), IOP( "ldvt2", B3SOIFD_MOD_LDVT2, IF_REAL, "Length dependence of dvt2"), IOP( "ldvt0w", B3SOIFD_MOD_LDVT0W, IF_REAL, "Length dependence of dvt0w"), IOP( "ldvt1w", B3SOIFD_MOD_LDVT1W, IF_REAL, "Length dependence of dvt1w"), IOP( "ldvt2w", B3SOIFD_MOD_LDVT2W, IF_REAL, "Length dependence of dvt2w"), IOP( "lu0", B3SOIFD_MOD_LU0, IF_REAL, "Length dependence of u0"), IOP( "lua", B3SOIFD_MOD_LUA, IF_REAL, "Length dependence of ua"), IOP( "lub", B3SOIFD_MOD_LUB, IF_REAL, "Length dependence of ub"), IOP( "luc", B3SOIFD_MOD_LUC, IF_REAL, "Length dependence of uc"), IOP( "lvsat", B3SOIFD_MOD_LVSAT, IF_REAL, "Length dependence of vsat"), IOP( "la0", B3SOIFD_MOD_LA0, IF_REAL, "Length dependence of a0"), IOP( "lags", B3SOIFD_MOD_LAGS, IF_REAL, "Length dependence of ags"), IOP( "lb0", B3SOIFD_MOD_LB0, IF_REAL, "Length dependence of b0"), IOP( "lb1", B3SOIFD_MOD_LB1, IF_REAL, "Length dependence of b1"), IOP( "lketa", B3SOIFD_MOD_LKETA, IF_REAL, "Length dependence of keta"), IOP( "labp", B3SOIFD_MOD_LABP, IF_REAL, "Length dependence of abp"), IOP( "lmxc", B3SOIFD_MOD_LMXC, IF_REAL, "Length dependence of mxc"), IOP( "ladice0", B3SOIFD_MOD_LADICE0, IF_REAL, "Length dependence of adice0"), IOP( "la1", B3SOIFD_MOD_LA1, IF_REAL, "Length dependence of a1"), IOP( "la2", B3SOIFD_MOD_LA2, IF_REAL, "Length dependence of a2"), IOP( "lrdsw", B3SOIFD_MOD_LRDSW, IF_REAL, "Length dependence of rdsw "), IOP( "lprwb", B3SOIFD_MOD_LPRWB, IF_REAL, "Length dependence of prwb "), IOP( "lprwg", B3SOIFD_MOD_LPRWG, IF_REAL, "Length dependence of prwg "), IOP( "lwr", B3SOIFD_MOD_LWR, IF_REAL, "Length dependence of wr"), IOP( "lnfactor", B3SOIFD_MOD_LNFACTOR, IF_REAL, "Length dependence of nfactor"), IOP( "ldwg", B3SOIFD_MOD_LDWG, IF_REAL, "Length dependence of dwg"), IOP( "ldwb", B3SOIFD_MOD_LDWB, IF_REAL, "Length dependence of dwb"), IOP( "lvoff", B3SOIFD_MOD_LVOFF, IF_REAL, "Length dependence of voff"), IOP( "leta0", B3SOIFD_MOD_LETA0, IF_REAL, "Length dependence of eta0"), IOP( "letab", B3SOIFD_MOD_LETAB, IF_REAL, "Length dependence of etab"), IOP( "ldsub", B3SOIFD_MOD_LDSUB, IF_REAL, "Length dependence of dsub"), IOP( "lcit", B3SOIFD_MOD_LCIT, IF_REAL, "Length dependence of cit"), IOP( "lcdsc", B3SOIFD_MOD_LCDSC, IF_REAL, "Length dependence of cdsc"), IOP( "lcdscb", B3SOIFD_MOD_LCDSCB, IF_REAL, "Length dependence of cdscb"), IOP( "lcdscd", B3SOIFD_MOD_LCDSCD, IF_REAL, "Length dependence of cdscd"), IOP( "lpclm", B3SOIFD_MOD_LPCLM, IF_REAL, "Length dependence of pclm"), IOP( "lpdiblc1", B3SOIFD_MOD_LPDIBL1, IF_REAL, "Length dependence of pdiblc1"), IOP( "lpdiblc2", B3SOIFD_MOD_LPDIBL2, IF_REAL, "Length dependence of pdiblc2"), IOP( "lpdiblcb", B3SOIFD_MOD_LPDIBLB, IF_REAL, "Length dependence of pdiblcb"), IOP( "ldrout", B3SOIFD_MOD_LDROUT, IF_REAL, "Length dependence of drout"), IOP( "lpvag", B3SOIFD_MOD_LPVAG, IF_REAL, "Length dependence of pvag"), IOP( "ldelta", B3SOIFD_MOD_LDELTA, IF_REAL, "Length dependence of delta"), IOP( "laii", B3SOIFD_MOD_LAII, IF_REAL, "Length dependence of aii"), IOP( "lbii", B3SOIFD_MOD_LBII, IF_REAL, "Length dependence of bii"), IOP( "lcii", B3SOIFD_MOD_LCII, IF_REAL, "Length dependence of cii"), IOP( "ldii", B3SOIFD_MOD_LDII, IF_REAL, "Length dependence of dii"), IOP( "lalpha0", B3SOIFD_MOD_LALPHA0, IF_REAL, "Length dependence of alpha0"), IOP( "lalpha1", B3SOIFD_MOD_LALPHA1, IF_REAL, "Length dependence of alpha1"), IOP( "lbeta0", B3SOIFD_MOD_LBETA0, IF_REAL, "Length dependence of beta0"), IOP( "lagidl", B3SOIFD_MOD_LAGIDL, IF_REAL, "Length dependence of agidl"), IOP( "lbgidl", B3SOIFD_MOD_LBGIDL, IF_REAL, "Length dependence of bgidl"), IOP( "lngidl", B3SOIFD_MOD_LNGIDL, IF_REAL, "Length dependence of ngidl"), IOP( "lntun", B3SOIFD_MOD_LNTUN, IF_REAL, "Length dependence of ntun"), IOP( "lndiode", B3SOIFD_MOD_LNDIODE, IF_REAL, "Length dependence of ndiode"), IOP( "lisbjt", B3SOIFD_MOD_LISBJT, IF_REAL, "Length dependence of isbjt"), IOP( "lisdif", B3SOIFD_MOD_LISDIF, IF_REAL, "Length dependence of isdif"), IOP( "lisrec", B3SOIFD_MOD_LISREC, IF_REAL, "Length dependence of isrec"), IOP( "listun", B3SOIFD_MOD_LISTUN, IF_REAL, "Length dependence of istun"), IOP( "ledl", B3SOIFD_MOD_LEDL, IF_REAL, "Length dependence of edl"), IOP( "lkbjt1", B3SOIFD_MOD_LKBJT1, IF_REAL, "Length dependence of kbjt1"), IOP( "lvsdfb", B3SOIFD_MOD_LVSDFB, IF_REAL, "Length dependence of vsdfb"), IOP( "lvsdth", B3SOIFD_MOD_LVSDTH, IF_REAL, "Length dependence of vsdth"), /* Width Dependence */ IOP( "wnch", B3SOIFD_MOD_WNPEAK, IF_REAL, "Width dependence of nch"), IOP( "wnsub", B3SOIFD_MOD_WNSUB, IF_REAL, "Width dependence of nsub"), IOP( "wngate", B3SOIFD_MOD_WNGATE, IF_REAL, "Width dependence of ngate"), IOP( "wvth0", B3SOIFD_MOD_WVTH0, IF_REAL,"Width dependence of vth0"), IOP( "wk1", B3SOIFD_MOD_WK1, IF_REAL, "Width dependence of k1"), IOP( "wk2", B3SOIFD_MOD_WK2, IF_REAL, "Width dependence of k2"), IOP( "wk3", B3SOIFD_MOD_WK3, IF_REAL, "Width dependence of k3"), IOP( "wk3b", B3SOIFD_MOD_WK3B, IF_REAL, "Width dependence of k3b"), IOP( "wvbsa", B3SOIFD_MOD_WVBSA, IF_REAL, "Width dependence of vbsa"), IOP( "wdelp", B3SOIFD_MOD_WDELP, IF_REAL, "Width dependence of delp"), IOP( "wkb1", B3SOIFD_MOD_WKB1, IF_REAL, "Width dependence of kb1"), IOP( "wkb3", B3SOIFD_MOD_WKB3, IF_REAL, "Width dependence of kb3"), IOP( "wdvbd0", B3SOIFD_MOD_WDVBD0, IF_REAL, "Width dependence of dvbd0"), IOP( "wdvbd1", B3SOIFD_MOD_WDVBD1, IF_REAL, "Width dependence of dvbd1"), IOP( "ww0", B3SOIFD_MOD_WW0, IF_REAL, "Width dependence of w0"), IOP( "wnlx", B3SOIFD_MOD_WNLX, IF_REAL, "Width dependence of nlx"), IOP( "wdvt0", B3SOIFD_MOD_WDVT0, IF_REAL, "Width dependence of dvt0"), IOP( "wdvt1", B3SOIFD_MOD_WDVT1, IF_REAL, "Width dependence of dvt1"), IOP( "wdvt2", B3SOIFD_MOD_WDVT2, IF_REAL, "Width dependence of dvt2"), IOP( "wdvt0w", B3SOIFD_MOD_WDVT0W, IF_REAL, "Width dependence of dvt0w"), IOP( "wdvt1w", B3SOIFD_MOD_WDVT1W, IF_REAL, "Width dependence of dvt1w"), IOP( "wdvt2w", B3SOIFD_MOD_WDVT2W, IF_REAL, "Width dependence of dvt2w"), IOP( "wu0", B3SOIFD_MOD_WU0, IF_REAL, "Width dependence of u0"), IOP( "wua", B3SOIFD_MOD_WUA, IF_REAL, "Width dependence of ua"), IOP( "wub", B3SOIFD_MOD_WUB, IF_REAL, "Width dependence of ub"), IOP( "wuc", B3SOIFD_MOD_WUC, IF_REAL, "Width dependence of uc"), IOP( "wvsat", B3SOIFD_MOD_WVSAT, IF_REAL, "Width dependence of vsat"), IOP( "wa0", B3SOIFD_MOD_WA0, IF_REAL, "Width dependence of a0"), IOP( "wags", B3SOIFD_MOD_WAGS, IF_REAL, "Width dependence of ags"), IOP( "wb0", B3SOIFD_MOD_WB0, IF_REAL, "Width dependence of b0"), IOP( "wb1", B3SOIFD_MOD_WB1, IF_REAL, "Width dependence of b1"), IOP( "wketa", B3SOIFD_MOD_WKETA, IF_REAL, "Width dependence of keta"), IOP( "wabp", B3SOIFD_MOD_WABP, IF_REAL, "Width dependence of abp"), IOP( "wmxc", B3SOIFD_MOD_WMXC, IF_REAL, "Width dependence of mxc"), IOP( "wadice0", B3SOIFD_MOD_WADICE0, IF_REAL, "Width dependence of adice0"), IOP( "wa1", B3SOIFD_MOD_WA1, IF_REAL, "Width dependence of a1"), IOP( "wa2", B3SOIFD_MOD_WA2, IF_REAL, "Width dependence of a2"), IOP( "wrdsw", B3SOIFD_MOD_WRDSW, IF_REAL, "Width dependence of rdsw "), IOP( "wprwb", B3SOIFD_MOD_WPRWB, IF_REAL, "Width dependence of prwb "), IOP( "wprwg", B3SOIFD_MOD_WPRWG, IF_REAL, "Width dependence of prwg "), IOP( "wwr", B3SOIFD_MOD_WWR, IF_REAL, "Width dependence of wr"), IOP( "wnfactor", B3SOIFD_MOD_WNFACTOR, IF_REAL, "Width dependence of nfactor"), IOP( "wdwg", B3SOIFD_MOD_WDWG, IF_REAL, "Width dependence of dwg"), IOP( "wdwb", B3SOIFD_MOD_WDWB, IF_REAL, "Width dependence of dwb"), IOP( "wvoff", B3SOIFD_MOD_WVOFF, IF_REAL, "Width dependence of voff"), IOP( "weta0", B3SOIFD_MOD_WETA0, IF_REAL, "Width dependence of eta0"), IOP( "wetab", B3SOIFD_MOD_WETAB, IF_REAL, "Width dependence of etab"), IOP( "wdsub", B3SOIFD_MOD_WDSUB, IF_REAL, "Width dependence of dsub"), IOP( "wcit", B3SOIFD_MOD_WCIT, IF_REAL, "Width dependence of cit"), IOP( "wcdsc", B3SOIFD_MOD_WCDSC, IF_REAL, "Width dependence of cdsc"), IOP( "wcdscb", B3SOIFD_MOD_WCDSCB, IF_REAL, "Width dependence of cdscb"), IOP( "wcdscd", B3SOIFD_MOD_WCDSCD, IF_REAL, "Width dependence of cdscd"), IOP( "wpclm", B3SOIFD_MOD_WPCLM, IF_REAL, "Width dependence of pclm"), IOP( "wpdiblc1", B3SOIFD_MOD_WPDIBL1, IF_REAL, "Width dependence of pdiblc1"), IOP( "wpdiblc2", B3SOIFD_MOD_WPDIBL2, IF_REAL, "Width dependence of pdiblc2"), IOP( "wpdiblcb", B3SOIFD_MOD_WPDIBLB, IF_REAL, "Width dependence of pdiblcb"), IOP( "wdrout", B3SOIFD_MOD_WDROUT, IF_REAL, "Width dependence of drout"), IOP( "wpvag", B3SOIFD_MOD_WPVAG, IF_REAL, "Width dependence of pvag"), IOP( "wdelta", B3SOIFD_MOD_WDELTA, IF_REAL, "Width dependence of delta"), IOP( "waii", B3SOIFD_MOD_WAII, IF_REAL, "Width dependence of aii"), IOP( "wbii", B3SOIFD_MOD_WBII, IF_REAL, "Width dependence of bii"), IOP( "wcii", B3SOIFD_MOD_WCII, IF_REAL, "Width dependence of cii"), IOP( "wdii", B3SOIFD_MOD_WDII, IF_REAL, "Width dependence of dii"), IOP( "walpha0", B3SOIFD_MOD_WALPHA0, IF_REAL, "Width dependence of alpha0"), IOP( "walpha1", B3SOIFD_MOD_WALPHA1, IF_REAL, "Width dependence of alpha1"), IOP( "wbeta0", B3SOIFD_MOD_WBETA0, IF_REAL, "Width dependence of beta0"), IOP( "wagidl", B3SOIFD_MOD_WAGIDL, IF_REAL, "Width dependence of agidl"), IOP( "wbgidl", B3SOIFD_MOD_WBGIDL, IF_REAL, "Width dependence of bgidl"), IOP( "wngidl", B3SOIFD_MOD_WNGIDL, IF_REAL, "Width dependence of ngidl"), IOP( "wntun", B3SOIFD_MOD_WNTUN, IF_REAL, "Width dependence of ntun"), IOP( "wndiode", B3SOIFD_MOD_WNDIODE, IF_REAL, "Width dependence of ndiode"), IOP( "wisbjt", B3SOIFD_MOD_WISBJT, IF_REAL, "Width dependence of isbjt"), IOP( "wisdif", B3SOIFD_MOD_WISDIF, IF_REAL, "Width dependence of isdif"), IOP( "wisrec", B3SOIFD_MOD_WISREC, IF_REAL, "Width dependence of isrec"), IOP( "wistun", B3SOIFD_MOD_WISTUN, IF_REAL, "Width dependence of istun"), IOP( "wedl", B3SOIFD_MOD_WEDL, IF_REAL, "Width dependence of edl"), IOP( "wkbjt1", B3SOIFD_MOD_WKBJT1, IF_REAL, "Width dependence of kbjt1"), IOP( "wvsdfb", B3SOIFD_MOD_WVSDFB, IF_REAL, "Width dependence of vsdfb"), IOP( "wvsdth", B3SOIFD_MOD_WVSDTH, IF_REAL, "Width dependence of vsdth"), /* Cross-term Dependence */ IOP( "pnch", B3SOIFD_MOD_PNPEAK, IF_REAL, "Cross-term dependence of nch"), IOP( "pnsub", B3SOIFD_MOD_PNSUB, IF_REAL, "Cross-term dependence of nsub"), IOP( "pngate", B3SOIFD_MOD_PNGATE, IF_REAL, "Cross-term dependence of ngate"), IOP( "pvth0", B3SOIFD_MOD_PVTH0, IF_REAL,"Cross-term dependence of vth0"), IOP( "pk1", B3SOIFD_MOD_PK1, IF_REAL, "Cross-term dependence of k1"), IOP( "pk2", B3SOIFD_MOD_PK2, IF_REAL, "Cross-term dependence of k2"), IOP( "pk3", B3SOIFD_MOD_PK3, IF_REAL, "Cross-term dependence of k3"), IOP( "pk3b", B3SOIFD_MOD_PK3B, IF_REAL, "Cross-term dependence of k3b"), IOP( "pvbsa", B3SOIFD_MOD_PVBSA, IF_REAL, "Cross-term dependence of vbsa"), IOP( "pdelp", B3SOIFD_MOD_PDELP, IF_REAL, "Cross-term dependence of delp"), IOP( "pkb1", B3SOIFD_MOD_PKB1, IF_REAL, "Cross-term dependence of kb1"), IOP( "pkb3", B3SOIFD_MOD_PKB3, IF_REAL, "Cross-term dependence of kb3"), IOP( "pdvbd0", B3SOIFD_MOD_PDVBD0, IF_REAL, "Cross-term dependence of dvbd0"), IOP( "pdvbd1", B3SOIFD_MOD_PDVBD1, IF_REAL, "Cross-term dependence of dvbd1"), IOP( "pw0", B3SOIFD_MOD_PW0, IF_REAL, "Cross-term dependence of w0"), IOP( "pnlx", B3SOIFD_MOD_PNLX, IF_REAL, "Cross-term dependence of nlx"), IOP( "pdvt0", B3SOIFD_MOD_PDVT0, IF_REAL, "Cross-term dependence of dvt0"), IOP( "pdvt1", B3SOIFD_MOD_PDVT1, IF_REAL, "Cross-term dependence of dvt1"), IOP( "pdvt2", B3SOIFD_MOD_PDVT2, IF_REAL, "Cross-term dependence of dvt2"), IOP( "pdvt0w", B3SOIFD_MOD_PDVT0W, IF_REAL, "Cross-term dependence of dvt0w"), IOP( "pdvt1w", B3SOIFD_MOD_PDVT1W, IF_REAL, "Cross-term dependence of dvt1w"), IOP( "pdvt2w", B3SOIFD_MOD_PDVT2W, IF_REAL, "Cross-term dependence of dvt2w"), IOP( "pu0", B3SOIFD_MOD_PU0, IF_REAL, "Cross-term dependence of u0"), IOP( "pua", B3SOIFD_MOD_PUA, IF_REAL, "Cross-term dependence of ua"), IOP( "pub", B3SOIFD_MOD_PUB, IF_REAL, "Cross-term dependence of ub"), IOP( "puc", B3SOIFD_MOD_PUC, IF_REAL, "Cross-term dependence of uc"), IOP( "pvsat", B3SOIFD_MOD_PVSAT, IF_REAL, "Cross-term dependence of vsat"), IOP( "pa0", B3SOIFD_MOD_PA0, IF_REAL, "Cross-term dependence of a0"), IOP( "pags", B3SOIFD_MOD_PAGS, IF_REAL, "Cross-term dependence of ags"), IOP( "pb0", B3SOIFD_MOD_PB0, IF_REAL, "Cross-term dependence of b0"), IOP( "pb1", B3SOIFD_MOD_PB1, IF_REAL, "Cross-term dependence of b1"), IOP( "pketa", B3SOIFD_MOD_PKETA, IF_REAL, "Cross-term dependence of keta"), IOP( "pabp", B3SOIFD_MOD_PABP, IF_REAL, "Cross-term dependence of abp"), IOP( "pmxc", B3SOIFD_MOD_PMXC, IF_REAL, "Cross-term dependence of mxc"), IOP( "padice0", B3SOIFD_MOD_PADICE0, IF_REAL, "Cross-term dependence of adice0"), IOP( "pa1", B3SOIFD_MOD_PA1, IF_REAL, "Cross-term dependence of a1"), IOP( "pa2", B3SOIFD_MOD_PA2, IF_REAL, "Cross-term dependence of a2"), IOP( "prdsw", B3SOIFD_MOD_PRDSW, IF_REAL, "Cross-term dependence of rdsw "), IOP( "pprwb", B3SOIFD_MOD_PPRWB, IF_REAL, "Cross-term dependence of prwb "), IOP( "pprwg", B3SOIFD_MOD_PPRWG, IF_REAL, "Cross-term dependence of prwg "), IOP( "pwr", B3SOIFD_MOD_PWR, IF_REAL, "Cross-term dependence of wr"), IOP( "pnfactor", B3SOIFD_MOD_PNFACTOR, IF_REAL, "Cross-term dependence of nfactor"), IOP( "pdwg", B3SOIFD_MOD_PDWG, IF_REAL, "Cross-term dependence of dwg"), IOP( "pdwb", B3SOIFD_MOD_PDWB, IF_REAL, "Cross-term dependence of dwb"), IOP( "pvoff", B3SOIFD_MOD_PVOFF, IF_REAL, "Cross-term dependence of voff"), IOP( "peta0", B3SOIFD_MOD_PETA0, IF_REAL, "Cross-term dependence of eta0"), IOP( "petab", B3SOIFD_MOD_PETAB, IF_REAL, "Cross-term dependence of etab"), IOP( "pdsub", B3SOIFD_MOD_PDSUB, IF_REAL, "Cross-term dependence of dsub"), IOP( "pcit", B3SOIFD_MOD_PCIT, IF_REAL, "Cross-term dependence of cit"), IOP( "pcdsc", B3SOIFD_MOD_PCDSC, IF_REAL, "Cross-term dependence of cdsc"), IOP( "pcdscb", B3SOIFD_MOD_PCDSCB, IF_REAL, "Cross-term dependence of cdscb"), IOP( "pcdscd", B3SOIFD_MOD_PCDSCD, IF_REAL, "Cross-term dependence of cdscd"), IOP( "ppclm", B3SOIFD_MOD_PPCLM, IF_REAL, "Cross-term dependence of pclm"), IOP( "ppdiblc1", B3SOIFD_MOD_PPDIBL1, IF_REAL, "Cross-term dependence of pdiblc1"), IOP( "ppdiblc2", B3SOIFD_MOD_PPDIBL2, IF_REAL, "Cross-term dependence of pdiblc2"), IOP( "ppdiblcb", B3SOIFD_MOD_PPDIBLB, IF_REAL, "Cross-term dependence of pdiblcb"), IOP( "pdrout", B3SOIFD_MOD_PDROUT, IF_REAL, "Cross-term dependence of drout"), IOP( "ppvag", B3SOIFD_MOD_PPVAG, IF_REAL, "Cross-term dependence of pvag"), IOP( "pdelta", B3SOIFD_MOD_PDELTA, IF_REAL, "Cross-term dependence of delta"), IOP( "paii", B3SOIFD_MOD_PAII, IF_REAL, "Cross-term dependence of aii"), IOP( "pbii", B3SOIFD_MOD_PBII, IF_REAL, "Cross-term dependence of bii"), IOP( "pcii", B3SOIFD_MOD_PCII, IF_REAL, "Cross-term dependence of cii"), IOP( "pdii", B3SOIFD_MOD_PDII, IF_REAL, "Cross-term dependence of dii"), IOP( "palpha0", B3SOIFD_MOD_PALPHA0, IF_REAL, "Cross-term dependence of alpha0"), IOP( "palpha1", B3SOIFD_MOD_PALPHA1, IF_REAL, "Cross-term dependence of alpha1"), IOP( "pbeta0", B3SOIFD_MOD_PBETA0, IF_REAL, "Cross-term dependence of beta0"), IOP( "pagidl", B3SOIFD_MOD_PAGIDL, IF_REAL, "Cross-term dependence of agidl"), IOP( "pbgidl", B3SOIFD_MOD_PBGIDL, IF_REAL, "Cross-term dependence of bgidl"), IOP( "pngidl", B3SOIFD_MOD_PNGIDL, IF_REAL, "Cross-term dependence of ngidl"), IOP( "pntun", B3SOIFD_MOD_PNTUN, IF_REAL, "Cross-term dependence of ntun"), IOP( "pndiode", B3SOIFD_MOD_PNDIODE, IF_REAL, "Cross-term dependence of ndiode"), IOP( "pisbjt", B3SOIFD_MOD_PISBJT, IF_REAL, "Cross-term dependence of isbjt"), IOP( "pisdif", B3SOIFD_MOD_PISDIF, IF_REAL, "Cross-term dependence of isdif"), IOP( "pisrec", B3SOIFD_MOD_PISREC, IF_REAL, "Cross-term dependence of isrec"), IOP( "pistun", B3SOIFD_MOD_PISTUN, IF_REAL, "Cross-term dependence of istun"), IOP( "pedl", B3SOIFD_MOD_PEDL, IF_REAL, "Cross-term dependence of edl"), IOP( "pkbjt1", B3SOIFD_MOD_PKBJT1, IF_REAL, "Cross-term dependence of kbjt1"), IOP( "pvsdfb", B3SOIFD_MOD_PVSDFB, IF_REAL, "Cross-term dependence of vsdfb"), IOP( "pvsdth", B3SOIFD_MOD_PVSDTH, IF_REAL, "Cross-term dependence of vsdth"), /* Added for binning - END */ IP( "nmos", B3SOIFD_MOD_NMOS, IF_FLAG, "Flag to indicate NMOS"), IP( "pmos", B3SOIFD_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"), }; char *B3SOIFDnames[] = { "Drain", "Gate", "Source", "Backgate", "", "Body", "Temp", "Charge", }; int B3SOIFDnSize = NUMELEMS(B3SOIFDnames); int B3SOIFDpTSize = NUMELEMS(B3SOIFDpTable); int B3SOIFDmPTSize = NUMELEMS(B3SOIFDmPTable); int B3SOIFDiSize = sizeof(B3SOIFDinstance); int B3SOIFDmSize = sizeof(B3SOIFDmodel); tmpk8ny_4pz/src/spicelib/devices/bsim3soi_fd/b3soifdask.c0000644000175000017500000002001213546075722023553 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang Modified by Paolo Nenzi 2002 File: b3soifdask.c 98/5/01 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMFD2.1 release */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "b3soifddef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIFDask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { B3SOIFDinstance *here = (B3SOIFDinstance*)inst; NG_IGNORE(select); switch(which) { case B3SOIFD_L: value->rValue = here->B3SOIFDl; return(OK); case B3SOIFD_W: value->rValue = here->B3SOIFDw; return(OK); case B3SOIFD_M: value->rValue = here->B3SOIFDm; return(OK); case B3SOIFD_AS: value->rValue = here->B3SOIFDsourceArea; return(OK); case B3SOIFD_AD: value->rValue = here->B3SOIFDdrainArea; return(OK); case B3SOIFD_PS: value->rValue = here->B3SOIFDsourcePerimeter; return(OK); case B3SOIFD_PD: value->rValue = here->B3SOIFDdrainPerimeter; return(OK); case B3SOIFD_NRS: value->rValue = here->B3SOIFDsourceSquares; return(OK); case B3SOIFD_NRD: value->rValue = here->B3SOIFDdrainSquares; return(OK); case B3SOIFD_OFF: value->rValue = here->B3SOIFDoff; return(OK); case B3SOIFD_BJTOFF: value->iValue = here->B3SOIFDbjtoff; return(OK); case B3SOIFD_RTH0: value->rValue = here->B3SOIFDrth0; value->rValue /= here->B3SOIFDm; return(OK); case B3SOIFD_CTH0: value->rValue = here->B3SOIFDcth0; value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_NRB: value->rValue = here->B3SOIFDbodySquares; return(OK); case B3SOIFD_IC_VBS: value->rValue = here->B3SOIFDicVBS; return(OK); case B3SOIFD_IC_VDS: value->rValue = here->B3SOIFDicVDS; return(OK); case B3SOIFD_IC_VGS: value->rValue = here->B3SOIFDicVGS; return(OK); case B3SOIFD_IC_VES: value->rValue = here->B3SOIFDicVES; return(OK); case B3SOIFD_IC_VPS: value->rValue = here->B3SOIFDicVPS; return(OK); case B3SOIFD_DNODE: value->iValue = here->B3SOIFDdNode; return(OK); case B3SOIFD_GNODE: value->iValue = here->B3SOIFDgNode; return(OK); case B3SOIFD_SNODE: value->iValue = here->B3SOIFDsNode; return(OK); case B3SOIFD_BNODE: value->iValue = here->B3SOIFDbNode; return(OK); case B3SOIFD_ENODE: value->iValue = here->B3SOIFDeNode; return(OK); case B3SOIFD_DNODEPRIME: value->iValue = here->B3SOIFDdNodePrime; return(OK); case B3SOIFD_SNODEPRIME: value->iValue = here->B3SOIFDsNodePrime; return(OK); case B3SOIFD_SOURCECONDUCT: value->rValue = here->B3SOIFDsourceConductance; value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_DRAINCONDUCT: value->rValue = here->B3SOIFDdrainConductance; value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_VBD: value->rValue = *(ckt->CKTstate0 + here->B3SOIFDvbd); return(OK); case B3SOIFD_VBS: value->rValue = *(ckt->CKTstate0 + here->B3SOIFDvbs); return(OK); case B3SOIFD_VGS: value->rValue = *(ckt->CKTstate0 + here->B3SOIFDvgs); return(OK); case B3SOIFD_VES: value->rValue = *(ckt->CKTstate0 + here->B3SOIFDves); return(OK); case B3SOIFD_VDS: value->rValue = *(ckt->CKTstate0 + here->B3SOIFDvds); return(OK); case B3SOIFD_CD: value->rValue = here->B3SOIFDcd; value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_CBS: value->rValue = here->B3SOIFDcjs; value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_CBD: value->rValue = here->B3SOIFDcjd; value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_GM: value->rValue = here->B3SOIFDgm; value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_GMID: value->rValue = here->B3SOIFDgm/here->B3SOIFDcd; return(OK); case B3SOIFD_GDS: value->rValue = here->B3SOIFDgds; value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_GMBS: value->rValue = here->B3SOIFDgmbs; value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_GBD: value->rValue = here->B3SOIFDgjdb; value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_GBS: value->rValue = here->B3SOIFDgjsb; value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_QB: value->rValue = *(ckt->CKTstate0 + here->B3SOIFDqb); value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_CQB: value->rValue = *(ckt->CKTstate0 + here->B3SOIFDcqb); value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_QG: value->rValue = *(ckt->CKTstate0 + here->B3SOIFDqg); value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_CQG: value->rValue = *(ckt->CKTstate0 + here->B3SOIFDcqg); value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_QD: value->rValue = *(ckt->CKTstate0 + here->B3SOIFDqd); value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_CQD: value->rValue = *(ckt->CKTstate0 + here->B3SOIFDcqd); value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_CGG: value->rValue = here->B3SOIFDcggb; value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_CGD: value->rValue = here->B3SOIFDcgdb; value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_CGS: value->rValue = here->B3SOIFDcgsb; value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_CDG: value->rValue = here->B3SOIFDcdgb; value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_CDD: value->rValue = here->B3SOIFDcddb; value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_CDS: value->rValue = here->B3SOIFDcdsb; value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_CBG: value->rValue = here->B3SOIFDcbgb; value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_CBDB: value->rValue = here->B3SOIFDcbdb; value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_CBSB: value->rValue = here->B3SOIFDcbsb; value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_VON: value->rValue = here->B3SOIFDvon; return(OK); case B3SOIFD_VDSAT: value->rValue = here->B3SOIFDvdsat; return(OK); case B3SOIFD_QBS: value->rValue = *(ckt->CKTstate0 + here->B3SOIFDqbs); value->rValue *= here->B3SOIFDm; return(OK); case B3SOIFD_QBD: value->rValue = *(ckt->CKTstate0 + here->B3SOIFDqbd); value->rValue *= here->B3SOIFDm; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_fd/b3soifdext.h0000644000175000017500000000246013546075722023611 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung Modified by Paolo Nenzi 2002 File: b3soifdext.h **********/ extern int B3SOIFDacLoad(GENmodel *,CKTcircuit*); extern int B3SOIFDask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*); extern int B3SOIFDconvTest(GENmodel *,CKTcircuit*); extern int B3SOIFDgetic(GENmodel*,CKTcircuit*); extern int B3SOIFDload(GENmodel*,CKTcircuit*); extern int B3SOIFDmAsk(CKTcircuit*,GENmodel *,int, IFvalue*); extern int B3SOIFDmParam(int,IFvalue*,GENmodel*); extern void B3SOIFDmosCap(CKTcircuit*, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*); extern int B3SOIFDparam(int,IFvalue*,GENinstance*,IFvalue*); extern int B3SOIFDpzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int B3SOIFDsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int B3SOIFDtemp(GENmodel*,CKTcircuit*); extern int B3SOIFDtrunc(GENmodel*,CKTcircuit*,double*); extern int B3SOIFDnoise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int B3SOIFDunsetup(GENmodel*,CKTcircuit*); tmpk8ny_4pz/src/spicelib/devices/bsim3soi_fd/b3soifdcheck.c0000644000175000017500000004272213546075722024066 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang Modified by Paolo Nenzi 2002 File: b3soifdcheck.c 98/5/01 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMFD2.1 release */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b3soifddef.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" int B3SOIFDcheckModel(B3SOIFDmodel *model, B3SOIFDinstance *here, CKTcircuit *ckt) { struct b3soifdSizeDependParam *pParam; int Fatal_Flag = 0; FILE *fplog; NG_IGNORE(ckt); if ((fplog = fopen("b3soifdv2check.log", "w")) != NULL) { pParam = here->pParam; fprintf(fplog, "B3SOI (FD) Version 2.1 Parameter Check\n"); fprintf(fplog, "Model = %s\n", model->B3SOIFDmodName); fprintf(fplog, "W = %g, L = %g M = %g\n", here->B3SOIFDw, here->B3SOIFDl, here->B3SOIFDm); if (pParam->B3SOIFDnlx < -pParam->B3SOIFDleff) { fprintf(fplog, "Fatal: Nlx = %g is less than -Leff.\n", pParam->B3SOIFDnlx); printf("Fatal: Nlx = %g is less than -Leff.\n", pParam->B3SOIFDnlx); Fatal_Flag = 1; } if (model->B3SOIFDtox <= 0.0) { fprintf(fplog, "Fatal: Tox = %g is not positive.\n", model->B3SOIFDtox); printf("Fatal: Tox = %g is not positive.\n", model->B3SOIFDtox); Fatal_Flag = 1; } if (model->B3SOIFDtbox <= 0.0) { fprintf(fplog, "Fatal: Tbox = %g is not positive.\n", model->B3SOIFDtbox); printf("Fatal: Tbox = %g is not positive.\n", model->B3SOIFDtbox); Fatal_Flag = 1; } if (pParam->B3SOIFDnpeak <= 0.0) { fprintf(fplog, "Fatal: Nch = %g is not positive.\n", pParam->B3SOIFDnpeak); printf("Fatal: Nch = %g is not positive.\n", pParam->B3SOIFDnpeak); Fatal_Flag = 1; } if (pParam->B3SOIFDngate < 0.0) { fprintf(fplog, "Fatal: Ngate = %g is not positive.\n", pParam->B3SOIFDngate); printf("Fatal: Ngate = %g Ngate is not positive.\n", pParam->B3SOIFDngate); Fatal_Flag = 1; } if (pParam->B3SOIFDngate > 1.e25) { fprintf(fplog, "Fatal: Ngate = %g is too high.\n", pParam->B3SOIFDngate); printf("Fatal: Ngate = %g Ngate is too high\n", pParam->B3SOIFDngate); Fatal_Flag = 1; } if (model->B3SOIFDdvbd1 < 0.0) { fprintf(fplog, "Fatal: Dvbd1 = %g is negative.\n", model->B3SOIFDdvbd1); printf("Fatal: Dvbd1 = %g is negative.\n", model->B3SOIFDdvbd1); Fatal_Flag = 1; } if (pParam->B3SOIFDdvt1 < 0.0) { fprintf(fplog, "Fatal: Dvt1 = %g is negative.\n", pParam->B3SOIFDdvt1); printf("Fatal: Dvt1 = %g is negative.\n", pParam->B3SOIFDdvt1); Fatal_Flag = 1; } if (pParam->B3SOIFDdvt1w < 0.0) { fprintf(fplog, "Fatal: Dvt1w = %g is negative.\n", pParam->B3SOIFDdvt1w); printf("Fatal: Dvt1w = %g is negative.\n", pParam->B3SOIFDdvt1w); Fatal_Flag = 1; } if (pParam->B3SOIFDw0 == -pParam->B3SOIFDweff) { fprintf(fplog, "Fatal: (W0 + Weff) = 0 cauing divided-by-zero.\n"); printf("Fatal: (W0 + Weff) = 0 cauing divided-by-zero.\n"); Fatal_Flag = 1; } if (pParam->B3SOIFDdsub < 0.0) { fprintf(fplog, "Fatal: Dsub = %g is negative.\n", pParam->B3SOIFDdsub); printf("Fatal: Dsub = %g is negative.\n", pParam->B3SOIFDdsub); Fatal_Flag = 1; } if (pParam->B3SOIFDb1 == -pParam->B3SOIFDweff) { fprintf(fplog, "Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); printf("Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); Fatal_Flag = 1; } if (pParam->B3SOIFDu0temp <= 0.0) { fprintf(fplog, "Fatal: u0 at current temperature = %g is not positive.\n", pParam->B3SOIFDu0temp); printf("Fatal: u0 at current temperature = %g is not positive.\n", pParam->B3SOIFDu0temp); Fatal_Flag = 1; } /* Check delta parameter */ if (pParam->B3SOIFDdelta < 0.0) { fprintf(fplog, "Fatal: Delta = %g is less than zero.\n", pParam->B3SOIFDdelta); printf("Fatal: Delta = %g is less than zero.\n", pParam->B3SOIFDdelta); Fatal_Flag = 1; } if (pParam->B3SOIFDvsattemp <= 0.0) { fprintf(fplog, "Fatal: Vsat at current temperature = %g is not positive.\n", pParam->B3SOIFDvsattemp); printf("Fatal: Vsat at current temperature = %g is not positive.\n", pParam->B3SOIFDvsattemp); Fatal_Flag = 1; } /* Check Rout parameters */ if (pParam->B3SOIFDpclm <= 0.0) { fprintf(fplog, "Fatal: Pclm = %g is not positive.\n", pParam->B3SOIFDpclm); printf("Fatal: Pclm = %g is not positive.\n", pParam->B3SOIFDpclm); Fatal_Flag = 1; } if (pParam->B3SOIFDdrout < 0.0) { fprintf(fplog, "Fatal: Drout = %g is negative.\n", pParam->B3SOIFDdrout); printf("Fatal: Drout = %g is negative.\n", pParam->B3SOIFDdrout); Fatal_Flag = 1; } if ( model->B3SOIFDunitLengthGateSidewallJctCap > 0.0) { if (here->B3SOIFDdrainPerimeter < pParam->B3SOIFDweff) { fprintf(fplog, "Warning: Pd = %g is less than W.\n", here->B3SOIFDdrainPerimeter); printf("Warning: Pd = %g is less than W.\n", here->B3SOIFDdrainPerimeter); here->B3SOIFDdrainPerimeter =pParam->B3SOIFDweff; } if (here->B3SOIFDsourcePerimeter < pParam->B3SOIFDweff) { fprintf(fplog, "Warning: Ps = %g is less than W.\n", here->B3SOIFDsourcePerimeter); printf("Warning: Ps = %g is less than W.\n", here->B3SOIFDsourcePerimeter); here->B3SOIFDsourcePerimeter =pParam->B3SOIFDweff; } } /* Check capacitance parameters */ if (pParam->B3SOIFDclc < 0.0) { fprintf(fplog, "Fatal: Clc = %g is negative.\n", pParam->B3SOIFDclc); printf("Fatal: Clc = %g is negative.\n", pParam->B3SOIFDclc); Fatal_Flag = 1; } if (model->B3SOIFDparamChk ==1) { /* Check L and W parameters */ if (pParam->B3SOIFDleff <= 5.0e-8) { fprintf(fplog, "Warning: Leff = %g may be too small.\n", pParam->B3SOIFDleff); printf("Warning: Leff = %g may be too small.\n", pParam->B3SOIFDleff); } if (pParam->B3SOIFDleffCV <= 5.0e-8) { fprintf(fplog, "Warning: Leff for CV = %g may be too small.\n", pParam->B3SOIFDleffCV); printf("Warning: Leff for CV = %g may be too small.\n", pParam->B3SOIFDleffCV); } if (pParam->B3SOIFDweff <= 1.0e-7) { fprintf(fplog, "Warning: Weff = %g may be too small.\n", pParam->B3SOIFDweff); printf("Warning: Weff = %g may be too small.\n", pParam->B3SOIFDweff); } if (pParam->B3SOIFDweffCV <= 1.0e-7) { fprintf(fplog, "Warning: Weff for CV = %g may be too small.\n", pParam->B3SOIFDweffCV); printf("Warning: Weff for CV = %g may be too small.\n", pParam->B3SOIFDweffCV); } /* Check threshold voltage parameters */ if (pParam->B3SOIFDnlx < 0.0) { fprintf(fplog, "Warning: Nlx = %g is negative.\n", pParam->B3SOIFDnlx); printf("Warning: Nlx = %g is negative.\n", pParam->B3SOIFDnlx); } if (model->B3SOIFDtox < 1.0e-9) { fprintf(fplog, "Warning: Tox = %g is less than 10A.\n", model->B3SOIFDtox); printf("Warning: Tox = %g is less than 10A.\n", model->B3SOIFDtox); } if (pParam->B3SOIFDnpeak <= 1.0e15) { fprintf(fplog, "Warning: Nch = %g may be too small.\n", pParam->B3SOIFDnpeak); printf("Warning: Nch = %g may be too small.\n", pParam->B3SOIFDnpeak); } else if (pParam->B3SOIFDnpeak >= 1.0e21) { fprintf(fplog, "Warning: Nch = %g may be too large.\n", pParam->B3SOIFDnpeak); printf("Warning: Nch = %g may be too large.\n", pParam->B3SOIFDnpeak); } if (fabs(pParam->B3SOIFDnsub) >= 1.0e21) { fprintf(fplog, "Warning: Nsub = %g may be too large.\n", pParam->B3SOIFDnsub); printf("Warning: Nsub = %g may be too large.\n", pParam->B3SOIFDnsub); } if ((pParam->B3SOIFDngate > 0.0) && (pParam->B3SOIFDngate <= 1.e18)) { fprintf(fplog, "Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->B3SOIFDngate); printf("Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->B3SOIFDngate); } if (model->B3SOIFDdvbd0 < 0.0) { fprintf(fplog, "Warning: Dvbd0 = %g is negative.\n", model->B3SOIFDdvbd0); printf("Warning: Dvbd0 = %g is negative.\n", model->B3SOIFDdvbd0); } if (pParam->B3SOIFDdvt0 < 0.0) { fprintf(fplog, "Warning: Dvt0 = %g is negative.\n", pParam->B3SOIFDdvt0); printf("Warning: Dvt0 = %g is negative.\n", pParam->B3SOIFDdvt0); } if (fabs(1.0e-6 / (pParam->B3SOIFDw0 + pParam->B3SOIFDweff)) > 10.0) { fprintf(fplog, "Warning: (W0 + Weff) may be too small.\n"); printf("Warning: (W0 + Weff) may be too small.\n"); } /* Check subthreshold parameters */ if (pParam->B3SOIFDnfactor < 0.0) { fprintf(fplog, "Warning: Nfactor = %g is negative.\n", pParam->B3SOIFDnfactor); printf("Warning: Nfactor = %g is negative.\n", pParam->B3SOIFDnfactor); } if (model->B3SOIFDkb3 < 0.0) { fprintf(fplog, "Warning: Kb3 = %g is negative.\n", model->B3SOIFDkb3); printf("Warning: Kb3 = %g is negative.\n", model->B3SOIFDkb3); } if (pParam->B3SOIFDcdsc < 0.0) { fprintf(fplog, "Warning: Cdsc = %g is negative.\n", pParam->B3SOIFDcdsc); printf("Warning: Cdsc = %g is negative.\n", pParam->B3SOIFDcdsc); } if (pParam->B3SOIFDcdscd < 0.0) { fprintf(fplog, "Warning: Cdscd = %g is negative.\n", pParam->B3SOIFDcdscd); printf("Warning: Cdscd = %g is negative.\n", pParam->B3SOIFDcdscd); } /* Check DIBL parameters */ if (pParam->B3SOIFDeta0 < 0.0) { fprintf(fplog, "Warning: Eta0 = %g is negative.\n", pParam->B3SOIFDeta0); printf("Warning: Eta0 = %g is negative.\n", pParam->B3SOIFDeta0); } /* Check Abulk parameters */ if (fabs(1.0e-6 / (pParam->B3SOIFDb1 + pParam->B3SOIFDweff)) > 10.0) { fprintf(fplog, "Warning: (B1 + Weff) may be too small.\n"); printf("Warning: (B1 + Weff) may be too small.\n"); } if (model->B3SOIFDadice0 > 1.0) { fprintf(fplog, "Warning: Adice0 = %g should be smaller than 1.\n", model->B3SOIFDadice0); printf("Warning: Adice0 = %g should be smaller than 1.\n", model->B3SOIFDadice0); } if (model->B3SOIFDabp < 0.2) { fprintf(fplog, "Warning: Abp = %g is too small.\n", model->B3SOIFDabp); printf("Warning: Abp = %g is too small.\n", model->B3SOIFDabp); } if ((model->B3SOIFDmxc < -1.0) || (model->B3SOIFDmxc > 1.0)) { fprintf(fplog, "Warning: Mxc = %g should be within (-1, 1).\n", model->B3SOIFDmxc); printf("Warning: Mxc = %g should be within (-1, 1).\n", model->B3SOIFDmxc); } /* Check Saturation parameters */ if (pParam->B3SOIFDa2 < 0.01) { fprintf(fplog, "Warning: A2 = %g is too small. Set to 0.01.\n", pParam->B3SOIFDa2); printf("Warning: A2 = %g is too small. Set to 0.01.\n", pParam->B3SOIFDa2); pParam->B3SOIFDa2 = 0.01; } else if (pParam->B3SOIFDa2 > 1.0) { fprintf(fplog, "Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->B3SOIFDa2); printf("Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->B3SOIFDa2); pParam->B3SOIFDa2 = 1.0; pParam->B3SOIFDa1 = 0.0; } if (pParam->B3SOIFDrdsw < 0.0) { fprintf(fplog, "Warning: Rdsw = %g is negative. Set to zero.\n", pParam->B3SOIFDrdsw); printf("Warning: Rdsw = %g is negative. Set to zero.\n", pParam->B3SOIFDrdsw); pParam->B3SOIFDrdsw = 0.0; pParam->B3SOIFDrds0 = 0.0; } else if ((pParam->B3SOIFDrds0 > 0.0) && (pParam->B3SOIFDrds0 < 0.001)) { fprintf(fplog, "Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n", pParam->B3SOIFDrds0); printf("Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n", pParam->B3SOIFDrds0); pParam->B3SOIFDrds0 = 0.0; } if (pParam->B3SOIFDvsattemp < 1.0e3) { fprintf(fplog, "Warning: Vsat at current temperature = %g may be too small.\n", pParam->B3SOIFDvsattemp); printf("Warning: Vsat at current temperature = %g may be too small.\n", pParam->B3SOIFDvsattemp); } if (pParam->B3SOIFDpdibl1 < 0.0) { fprintf(fplog, "Warning: Pdibl1 = %g is negative.\n", pParam->B3SOIFDpdibl1); printf("Warning: Pdibl1 = %g is negative.\n", pParam->B3SOIFDpdibl1); } if (pParam->B3SOIFDpdibl2 < 0.0) { fprintf(fplog, "Warning: Pdibl2 = %g is negative.\n", pParam->B3SOIFDpdibl2); printf("Warning: Pdibl2 = %g is negative.\n", pParam->B3SOIFDpdibl2); } /* Check overlap capacitance parameters */ if (model->B3SOIFDcgdo < 0.0) { fprintf(fplog, "Warning: cgdo = %g is negative. Set to zero.\n", model->B3SOIFDcgdo); printf("Warning: cgdo = %g is negative. Set to zero.\n", model->B3SOIFDcgdo); model->B3SOIFDcgdo = 0.0; } if (model->B3SOIFDcgso < 0.0) { fprintf(fplog, "Warning: cgso = %g is negative. Set to zero.\n", model->B3SOIFDcgso); printf("Warning: cgso = %g is negative. Set to zero.\n", model->B3SOIFDcgso); model->B3SOIFDcgso = 0.0; } if (model->B3SOIFDcgeo < 0.0) { fprintf(fplog, "Warning: cgeo = %g is negative. Set to zero.\n", model->B3SOIFDcgeo); printf("Warning: cgeo = %g is negative. Set to zero.\n", model->B3SOIFDcgeo); model->B3SOIFDcgeo = 0.0; } if (model->B3SOIFDntun < 0.0) { fprintf(fplog, "Warning: Ntun = %g is negative.\n", model->B3SOIFDntun); printf("Warning: Ntun = %g is negative.\n", model->B3SOIFDntun); } if (model->B3SOIFDndiode < 0.0) { fprintf(fplog, "Warning: Ndiode = %g is negative.\n", model->B3SOIFDndiode); printf("Warning: Ndiode = %g is negative.\n", model->B3SOIFDndiode); } if (model->B3SOIFDisbjt < 0.0) { fprintf(fplog, "Warning: Isbjt = %g is negative.\n", model->B3SOIFDisbjt); printf("Warning: Isbjt = %g is negative.\n", model->B3SOIFDisbjt); } if (model->B3SOIFDisdif < 0.0) { fprintf(fplog, "Warning: Isdif = %g is negative.\n", model->B3SOIFDisdif); printf("Warning: Isdif = %g is negative.\n", model->B3SOIFDisdif); } if (model->B3SOIFDisrec < 0.0) { fprintf(fplog, "Warning: Isrec = %g is negative.\n", model->B3SOIFDisrec); printf("Warning: Isrec = %g is negative.\n", model->B3SOIFDisrec); } if (model->B3SOIFDistun < 0.0) { fprintf(fplog, "Warning: Istun = %g is negative.\n", model->B3SOIFDistun); printf("Warning: Istun = %g is negative.\n", model->B3SOIFDistun); } if (model->B3SOIFDedl < 0.0) { fprintf(fplog, "Warning: Edl = %g is negative.\n", model->B3SOIFDedl); printf("Warning: Edl = %g is negative.\n", model->B3SOIFDedl); } if (model->B3SOIFDkbjt1 < 0.0) { fprintf(fplog, "Warning: Kbjt1 = %g is negative.\n", model->B3SOIFDkbjt1); printf("Warning: kbjt1 = %g is negative.\n", model->B3SOIFDkbjt1); } if (model->B3SOIFDtt < 0.0) { fprintf(fplog, "Warning: Tt = %g is negative.\n", model->B3SOIFDtt); printf("Warning: Tt = %g is negative.\n", model->B3SOIFDtt); } if (model->B3SOIFDcsdmin < 0.0) { fprintf(fplog, "Warning: Csdmin = %g is negative.\n", model->B3SOIFDcsdmin); printf("Warning: Csdmin = %g is negative.\n", model->B3SOIFDcsdmin); } if (model->B3SOIFDcsdesw < 0.0) { fprintf(fplog, "Warning: Csdesw = %g is negative.\n", model->B3SOIFDcsdesw); printf("Warning: Csdesw = %g is negative.\n", model->B3SOIFDcsdesw); } if ((model->B3SOIFDasd < 0.0) || (model->B3SOIFDmxc > 1.0)) { fprintf(fplog, "Warning: Asd = %g should be within (0, 1).\n", model->B3SOIFDasd); printf("Warning: Asd = %g should be within (0, 1).\n", model->B3SOIFDasd); } if (model->B3SOIFDrth0 < 0.0) { fprintf(fplog, "Warning: Rth0 = %g is negative.\n", model->B3SOIFDrth0); printf("Warning: Rth0 = %g is negative.\n", model->B3SOIFDrth0); } if (model->B3SOIFDcth0 < 0.0) { fprintf(fplog, "Warning: Cth0 = %g is negative.\n", model->B3SOIFDcth0); printf("Warning: Cth0 = %g is negative.\n", model->B3SOIFDcth0); } if (model->B3SOIFDrbody < 0.0) { fprintf(fplog, "Warning: Rbody = %g is negative.\n", model->B3SOIFDrbody); printf("Warning: Rbody = %g is negative.\n", model->B3SOIFDrbody); } if (model->B3SOIFDrbsh < 0.0) { fprintf(fplog, "Warning: Rbsh = %g is negative.\n", model->B3SOIFDrbsh); printf("Warning: Rbsh = %g is negative.\n", model->B3SOIFDrbsh); } if (model->B3SOIFDxj > model->B3SOIFDtsi) { fprintf(fplog, "Warning: Xj = %g is thicker than Tsi = %g.\n", model->B3SOIFDxj, model->B3SOIFDtsi); printf("Warning: Xj = %g is thicker than Tsi = %g.\n", model->B3SOIFDxj, model->B3SOIFDtsi); } if (model->B3SOIFDcapMod < 2) { fprintf(fplog, "Warning: capMod < 2 is not supported by BSIM3SOI.\n"); printf("Warning: Warning: capMod < 2 is not supported by BSIM3SOI.\n"); } if (model->B3SOIFDcii > 2.0) { fprintf(fplog, "Warning: Cii = %g is larger than 2.0.\n", model->B3SOIFDcii); printf("Warning: Cii = %g is larger than 2.0.\n", model->B3SOIFDcii); } if (model->B3SOIFDdii > 1.5) { fprintf(fplog, "Warning: Dii = %g is larger than 1.5.\n", model->B3SOIFDcii); printf("Warning: Dii = %g is too larger than 1.5.\n", model->B3SOIFDcii); } }/* loop for the parameter check for warning messages */ fclose(fplog); } else { fprintf(stderr, "Warning: Can't open log file. Parameter checking skipped.\n"); } return(Fatal_Flag); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_fd/b3soifdnoi.c0000644000175000017500000002755613546075722023606 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: Weidong Liu and Pin Su Feb 1999 Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soifdnoi.c 98/5/01 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMFD2.1 release */ #include "ngspice/ngspice.h" #include "b3soifddef.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" #include "ngspice/const.h" /* jwan */ /* * B3SOIFDnoise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with MOSFET's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the MOSFET's is summed with the variable "OnDens". */ /* Channel thermal and flicker noises are calculated based on the value of model->B3SOIFDnoiMod. If model->B3SOIFDnoiMod = 1, Channel thermal noise = SPICE2 model Flicker noise = SPICE2 model If model->B3SOIFDnoiMod = 2, Channel thermal noise = B3SOIFD model Flicker noise = B3SOIFD model If model->B3SOIFDnoiMod = 3, Channel thermal noise = SPICE2 model Flicker noise = B3SOIFD model If model->B3SOIFDnoiMod = 4, Channel thermal noise = B3SOIFD model Flicker noise = SPICE2 model */ static double B3SOIFDStrongInversionNoiseEval(double vgs, double vds, B3SOIFDmodel *model, B3SOIFDinstance *here, double freq, double temp) { struct b3soifdSizeDependParam *pParam; double cd, esat, DelClm, EffFreq, N0, Nl, Vgst; double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi; pParam = here->pParam; cd = fabs(here->B3SOIFDcd) * here->B3SOIFDm; if (vds > here->B3SOIFDvdsat) { esat = 2.0 * pParam->B3SOIFDvsattemp / here->B3SOIFDueff; T0 = ((((vds - here->B3SOIFDvdsat) / pParam->B3SOIFDlitl) + model->B3SOIFDem) / esat); DelClm = pParam->B3SOIFDlitl * log (MAX(T0, N_MINLOG)); } else DelClm = 0.0; EffFreq = pow(freq, model->B3SOIFDef); T1 = CHARGE * CHARGE * 8.62e-5 * cd * temp * here->B3SOIFDueff; T2 = 1.0e8 * EffFreq * model->B3SOIFDcox * pParam->B3SOIFDleff * pParam->B3SOIFDleff; Vgst = vgs - here->B3SOIFDvon; N0 = model->B3SOIFDcox * Vgst / CHARGE; if (N0 < 0.0) N0 = 0.0; Nl = model->B3SOIFDcox * (Vgst - MIN(vds, here->B3SOIFDvdsat)) / CHARGE; if (Nl < 0.0) Nl = 0.0; T3 = model->B3SOIFDoxideTrapDensityA * log(MAX(((N0 + 2.0e14) / (Nl + 2.0e14)), N_MINLOG)); T4 = model->B3SOIFDoxideTrapDensityB * (N0 - Nl); T5 = model->B3SOIFDoxideTrapDensityC * 0.5 * (N0 * N0 - Nl * Nl); T6 = 8.62e-5 * temp * cd * cd; T7 = 1.0e8 * EffFreq * pParam->B3SOIFDleff * pParam->B3SOIFDleff * pParam->B3SOIFDweff * here->B3SOIFDm; T8 = model->B3SOIFDoxideTrapDensityA + model->B3SOIFDoxideTrapDensityB * Nl + model->B3SOIFDoxideTrapDensityC * Nl * Nl; T9 = (Nl + 2.0e14) * (Nl + 2.0e14); Ssi = T1 / T2 * (T3 + T4 + T5) + T6 / T7 * DelClm * T8 / T9; return Ssi; } int B3SOIFDnoise (int mode, int operation, GENmodel *inModel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; B3SOIFDmodel *model = (B3SOIFDmodel *)inModel; B3SOIFDinstance *here; struct b3soifdSizeDependParam *pParam; double tempOnoise; double tempInoise; double noizDens[B3SOIFDNSRCS]; double lnNdens[B3SOIFDNSRCS]; double vgs, vds, Slimit; double T1, T10, T11; double Ssi, Swi; int i; /* define the names of the noise sources */ static char *B3SOIFDnNames[B3SOIFDNSRCS] = { /* Note that we have to keep the order */ ".rd", /* noise due to rd */ /* consistent with the index definitions */ ".rs", /* noise due to rs */ /* in B3SOIFDdefs.h */ ".id", /* noise due to id */ ".1overf", /* flicker (1/f) noise */ ".fb", /* noise due to floating body */ "" /* total transistor noise */ }; for (; model != NULL; model = B3SOIFDnextModel(model)) { for (here = B3SOIFDinstances(model); here != NULL; here = B3SOIFDnextInstance(here)) { pParam = here->pParam; switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i = 0; i < B3SOIFDNSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise.%s%s", here->B3SOIFDname, B3SOIFDnNames[i]); } break; case INT_NOIZ: for (i = 0; i < B3SOIFDNSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total.%s%s", here->B3SOIFDname, B3SOIFDnNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total.%s%s", here->B3SOIFDname, B3SOIFDnNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: NevalSrc(&noizDens[B3SOIFDRDNOIZ], &lnNdens[B3SOIFDRDNOIZ], ckt, THERMNOISE, here->B3SOIFDdNodePrime, here->B3SOIFDdNode, here->B3SOIFDdrainConductance * here->B3SOIFDm); NevalSrc(&noizDens[B3SOIFDRSNOIZ], &lnNdens[B3SOIFDRSNOIZ], ckt, THERMNOISE, here->B3SOIFDsNodePrime, here->B3SOIFDsNode, here->B3SOIFDsourceConductance * here->B3SOIFDm); switch( model->B3SOIFDnoiMod ) { case 1: case 3: NevalSrc(&noizDens[B3SOIFDIDNOIZ], &lnNdens[B3SOIFDIDNOIZ], ckt, THERMNOISE, here->B3SOIFDdNodePrime, here->B3SOIFDsNodePrime, (2.0 / 3.0 * fabs(here->B3SOIFDm * (here->B3SOIFDgm + here->B3SOIFDgds + here->B3SOIFDgmbs)))); break; case 2: case 4: NevalSrc(&noizDens[B3SOIFDIDNOIZ], &lnNdens[B3SOIFDIDNOIZ], ckt, THERMNOISE, here->B3SOIFDdNodePrime, here->B3SOIFDsNodePrime, (here->B3SOIFDueff * fabs((here->B3SOIFDqinv * here->B3SOIFDm) / (pParam->B3SOIFDleff * pParam->B3SOIFDleff)))); break; } NevalSrc(&noizDens[B3SOIFDFLNOIZ], NULL, ckt, N_GAIN, here->B3SOIFDdNodePrime, here->B3SOIFDsNodePrime, (double) 0.0); switch( model->B3SOIFDnoiMod ) { case 1: case 4: noizDens[B3SOIFDFLNOIZ] *= model->B3SOIFDkf * exp(model->B3SOIFDaf * log(MAX(fabs(here->B3SOIFDcd * here->B3SOIFDm), N_MINLOG))) / (pow(data->freq, model->B3SOIFDef) * pParam->B3SOIFDleff * pParam->B3SOIFDleff * model->B3SOIFDcox); break; case 2: case 3: vgs = *(ckt->CKTstates[0] + here->B3SOIFDvgs); vds = *(ckt->CKTstates[0] + here->B3SOIFDvds); if (vds < 0.0) { vds = -vds; vgs = vgs + vds; } if (vgs >= here->B3SOIFDvon + 0.1) { Ssi = B3SOIFDStrongInversionNoiseEval(vgs, vds, model, here, data->freq, ckt->CKTtemp); noizDens[B3SOIFDFLNOIZ] *= Ssi; } else { pParam = here->pParam; T10 = model->B3SOIFDoxideTrapDensityA * 8.62e-5 * ckt->CKTtemp; T11 = pParam->B3SOIFDweff * here->B3SOIFDm * pParam->B3SOIFDleff * pow(data->freq, model->B3SOIFDef) * 4.0e36; Swi = T10 / T11 * here->B3SOIFDcd * here->B3SOIFDm * here->B3SOIFDcd * here->B3SOIFDm; Slimit = B3SOIFDStrongInversionNoiseEval( here->B3SOIFDvon + 0.1, vds, model, here, data->freq, ckt->CKTtemp); T1 = Swi + Slimit; if (T1 > 0.0) noizDens[B3SOIFDFLNOIZ] *= (Slimit * Swi) / T1; else noizDens[B3SOIFDFLNOIZ] *= 0.0; } break; } lnNdens[B3SOIFDFLNOIZ] = log(MAX(noizDens[B3SOIFDFLNOIZ], N_MINLOG)); /* Low frequency excess noise due to FBE */ noizDens[B3SOIFDFBNOIZ] = 0.0; noizDens[B3SOIFDTOTNOIZ] = noizDens[B3SOIFDRDNOIZ] + noizDens[B3SOIFDRSNOIZ] + noizDens[B3SOIFDIDNOIZ] + noizDens[B3SOIFDFLNOIZ] + noizDens[B3SOIFDFBNOIZ]; lnNdens[B3SOIFDTOTNOIZ] = log(MAX(noizDens[B3SOIFDTOTNOIZ], N_MINLOG)); *OnDens += noizDens[B3SOIFDTOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to initialize our "history" variables. */ for (i = 0; i < B3SOIFDNSRCS; i++) { here->B3SOIFDnVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i = 0; i < B3SOIFDNSRCS; i++) { here->B3SOIFDnVar[OUTNOIZ][i] = 0.0; here->B3SOIFDnVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0, we have to integrate. */ for (i = 0; i < B3SOIFDNSRCS; i++) { if (i != B3SOIFDTOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], here->B3SOIFDnVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv, lnNdens[i] + data->lnGainInv, here->B3SOIFDnVar[LNLSTDENS][i] + data->lnGainInv, data); here->B3SOIFDnVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { here->B3SOIFDnVar[OUTNOIZ][i] += tempOnoise; here->B3SOIFDnVar[OUTNOIZ][B3SOIFDTOTNOIZ] += tempOnoise; here->B3SOIFDnVar[INNOIZ][i] += tempInoise; here->B3SOIFDnVar[INNOIZ][B3SOIFDTOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i = 0; i < B3SOIFDNSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i = 0; i < B3SOIFDNSRCS; i++) { data->outpVector[data->outNumber++] = here->B3SOIFDnVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = here->B3SOIFDnVar[INNOIZ][i]; } } break; } break; case N_CLOSE: /* do nothing, the main calling routine will close */ return (OK); break; /* the plots */ } /* switch (operation) */ } /* for here */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_fd/b3soifdset.c0000644000175000017500000017014213546075722023602 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: Weidong Liu and Pin Su Feb 1999 Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soifdset.c 98/5/01 Modified by Pin Su, Wei Jin 99/9/27 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMFD2.1 release */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "b3soifddef.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define SMOOTHFACTOR 0.1 #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define PI 3.141592654 #define Charge_q 1.60219e-19 #define Meter2Micron 1.0e6 int B3SOIFDsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { B3SOIFDmodel *model = (B3SOIFDmodel*)inModel; B3SOIFDinstance *here; int error; CKTnode *tmp; double tmp1, tmp2; double nfb0, Cboxt; CKTnode *tmpNode; IFuid tmpName; /* loop through all the B3SOIFD device models */ for( ; model != NULL; model = B3SOIFDnextModel(model)) { /* Default value Processing for B3SOIFD MOSFET Models */ if (!model->B3SOIFDtypeGiven) model->B3SOIFDtype = NMOS; if (!model->B3SOIFDmobModGiven) model->B3SOIFDmobMod = 1; if (!model->B3SOIFDbinUnitGiven) model->B3SOIFDbinUnit = 1; if (!model->B3SOIFDparamChkGiven) model->B3SOIFDparamChk = 0; if (!model->B3SOIFDcapModGiven) model->B3SOIFDcapMod = 2; if (!model->B3SOIFDnoiModGiven) model->B3SOIFDnoiMod = 1; if (!model->B3SOIFDshModGiven) model->B3SOIFDshMod = 0; if (!model->B3SOIFDversionGiven) model->B3SOIFDversion = 2.0; if (!model->B3SOIFDtoxGiven) model->B3SOIFDtox = 100.0e-10; model->B3SOIFDcox = 3.453133e-11 / model->B3SOIFDtox; if (!model->B3SOIFDcdscGiven) model->B3SOIFDcdsc = 2.4e-4; /* unit Q/V/m^2 */ if (!model->B3SOIFDcdscbGiven) model->B3SOIFDcdscb = 0.0; /* unit Q/V/m^2 */ if (!model->B3SOIFDcdscdGiven) model->B3SOIFDcdscd = 0.0; /* unit Q/V/m^2 */ if (!model->B3SOIFDcitGiven) model->B3SOIFDcit = 0.0; /* unit Q/V/m^2 */ if (!model->B3SOIFDnfactorGiven) model->B3SOIFDnfactor = 1; if (!model->B3SOIFDvsatGiven) model->B3SOIFDvsat = 8.0e4; /* unit m/s */ if (!model->B3SOIFDatGiven) model->B3SOIFDat = 3.3e4; /* unit m/s */ if (!model->B3SOIFDa0Given) model->B3SOIFDa0 = 1.0; if (!model->B3SOIFDagsGiven) model->B3SOIFDags = 0.0; if (!model->B3SOIFDa1Given) model->B3SOIFDa1 = 0.0; if (!model->B3SOIFDa2Given) model->B3SOIFDa2 = 1.0; if (!model->B3SOIFDketaGiven) model->B3SOIFDketa = -0.6; /* unit / V */ if (!model->B3SOIFDnsubGiven) model->B3SOIFDnsub = 6.0e16; /* unit 1/cm3 */ if (!model->B3SOIFDnpeakGiven) model->B3SOIFDnpeak = 1.7e17; /* unit 1/cm3 */ if (!model->B3SOIFDngateGiven) model->B3SOIFDngate = 0; /* unit 1/cm3 */ if (!model->B3SOIFDvbmGiven) model->B3SOIFDvbm = -3.0; if (!model->B3SOIFDxtGiven) model->B3SOIFDxt = 1.55e-7; if (!model->B3SOIFDkt1Given) model->B3SOIFDkt1 = -0.11; /* unit V */ if (!model->B3SOIFDkt1lGiven) model->B3SOIFDkt1l = 0.0; /* unit V*m */ if (!model->B3SOIFDkt2Given) model->B3SOIFDkt2 = 0.022; /* No unit */ if (!model->B3SOIFDk3Given) model->B3SOIFDk3 = 0.0; if (!model->B3SOIFDk3bGiven) model->B3SOIFDk3b = 0.0; if (!model->B3SOIFDw0Given) model->B3SOIFDw0 = 2.5e-6; if (!model->B3SOIFDnlxGiven) model->B3SOIFDnlx = 1.74e-7; if (!model->B3SOIFDdvt0Given) model->B3SOIFDdvt0 = 2.2; if (!model->B3SOIFDdvt1Given) model->B3SOIFDdvt1 = 0.53; if (!model->B3SOIFDdvt2Given) model->B3SOIFDdvt2 = -0.032; /* unit 1 / V */ if (!model->B3SOIFDdvt0wGiven) model->B3SOIFDdvt0w = 0.0; if (!model->B3SOIFDdvt1wGiven) model->B3SOIFDdvt1w = 5.3e6; if (!model->B3SOIFDdvt2wGiven) model->B3SOIFDdvt2w = -0.032; if (!model->B3SOIFDdroutGiven) model->B3SOIFDdrout = 0.56; if (!model->B3SOIFDdsubGiven) model->B3SOIFDdsub = model->B3SOIFDdrout; if (!model->B3SOIFDvth0Given) model->B3SOIFDvth0 = (model->B3SOIFDtype == NMOS) ? 0.7 : -0.7; if (!model->B3SOIFDuaGiven) model->B3SOIFDua = 2.25e-9; /* unit m/V */ if (!model->B3SOIFDua1Given) model->B3SOIFDua1 = 4.31e-9; /* unit m/V */ if (!model->B3SOIFDubGiven) model->B3SOIFDub = 5.87e-19; /* unit (m/V)**2 */ if (!model->B3SOIFDub1Given) model->B3SOIFDub1 = -7.61e-18; /* unit (m/V)**2 */ if (!model->B3SOIFDucGiven) model->B3SOIFDuc = (model->B3SOIFDmobMod == 3) ? -0.0465 : -0.0465e-9; if (!model->B3SOIFDuc1Given) model->B3SOIFDuc1 = (model->B3SOIFDmobMod == 3) ? -0.056 : -0.056e-9; if (!model->B3SOIFDu0Given) model->B3SOIFDu0 = (model->B3SOIFDtype == NMOS) ? 0.067 : 0.025; if (!model->B3SOIFDuteGiven) model->B3SOIFDute = -1.5; if (!model->B3SOIFDvoffGiven) model->B3SOIFDvoff = -0.08; if (!model->B3SOIFDdeltaGiven) model->B3SOIFDdelta = 0.01; if (!model->B3SOIFDrdswGiven) model->B3SOIFDrdsw = 100; if (!model->B3SOIFDprwgGiven) model->B3SOIFDprwg = 0.0; /* unit 1/V */ if (!model->B3SOIFDprwbGiven) model->B3SOIFDprwb = 0.0; if (!model->B3SOIFDprtGiven) model->B3SOIFDprt = 0.0; if (!model->B3SOIFDeta0Given) model->B3SOIFDeta0 = 0.08; /* no unit */ if (!model->B3SOIFDetabGiven) model->B3SOIFDetab = -0.07; /* unit 1/V */ if (!model->B3SOIFDpclmGiven) model->B3SOIFDpclm = 1.3; /* no unit */ if (!model->B3SOIFDpdibl1Given) model->B3SOIFDpdibl1 = .39; /* no unit */ if (!model->B3SOIFDpdibl2Given) model->B3SOIFDpdibl2 = 0.0086; /* no unit */ if (!model->B3SOIFDpdiblbGiven) model->B3SOIFDpdiblb = 0.0; /* 1/V */ if (!model->B3SOIFDpvagGiven) model->B3SOIFDpvag = 0.0; if (!model->B3SOIFDwrGiven) model->B3SOIFDwr = 1.0; if (!model->B3SOIFDdwgGiven) model->B3SOIFDdwg = 0.0; if (!model->B3SOIFDdwbGiven) model->B3SOIFDdwb = 0.0; if (!model->B3SOIFDb0Given) model->B3SOIFDb0 = 0.0; if (!model->B3SOIFDb1Given) model->B3SOIFDb1 = 0.0; if (!model->B3SOIFDalpha0Given) model->B3SOIFDalpha0 = 0.0; if (!model->B3SOIFDalpha1Given) model->B3SOIFDalpha1 = 1.0; if (!model->B3SOIFDbeta0Given) model->B3SOIFDbeta0 = 30.0; if (!model->B3SOIFDcgslGiven) model->B3SOIFDcgsl = 0.0; if (!model->B3SOIFDcgdlGiven) model->B3SOIFDcgdl = 0.0; if (!model->B3SOIFDckappaGiven) model->B3SOIFDckappa = 0.6; if (!model->B3SOIFDclcGiven) model->B3SOIFDclc = 0.1e-7; if (!model->B3SOIFDcleGiven) model->B3SOIFDcle = 0.0; if (!model->B3SOIFDtboxGiven) model->B3SOIFDtbox = 3e-7; if (!model->B3SOIFDtsiGiven) model->B3SOIFDtsi = 1e-7; if (!model->B3SOIFDxjGiven) model->B3SOIFDxj = model->B3SOIFDtsi; if (!model->B3SOIFDkb1Given) model->B3SOIFDkb1 = 1; if (!model->B3SOIFDkb3Given) model->B3SOIFDkb3 = 1; if (!model->B3SOIFDdvbd0Given) model->B3SOIFDdvbd0 = 0.0; if (!model->B3SOIFDdvbd1Given) model->B3SOIFDdvbd1 = 0.0; if (!model->B3SOIFDvbsaGiven) model->B3SOIFDvbsa = 0.0; if (!model->B3SOIFDdelpGiven) model->B3SOIFDdelp = 0.02; if (!model->B3SOIFDrbodyGiven) model->B3SOIFDrbody = 0.0; if (!model->B3SOIFDrbshGiven) model->B3SOIFDrbsh = 0.0; if (!model->B3SOIFDadice0Given) model->B3SOIFDadice0 = 1; if (!model->B3SOIFDabpGiven) model->B3SOIFDabp = 1; if (!model->B3SOIFDmxcGiven) model->B3SOIFDmxc = -0.9; if (!model->B3SOIFDrth0Given) model->B3SOIFDrth0 = 0; if (!model->B3SOIFDcth0Given) model->B3SOIFDcth0 =0; if (!model->B3SOIFDaiiGiven) model->B3SOIFDaii = 0.0; if (!model->B3SOIFDbiiGiven) model->B3SOIFDbii = 0.0; if (!model->B3SOIFDciiGiven) model->B3SOIFDcii = 0.0; if (!model->B3SOIFDdiiGiven) model->B3SOIFDdii = -1.0; if (!model->B3SOIFDagidlGiven) model->B3SOIFDagidl = 0.0; if (!model->B3SOIFDbgidlGiven) model->B3SOIFDbgidl = 0.0; if (!model->B3SOIFDngidlGiven) model->B3SOIFDngidl = 1.2; if (!model->B3SOIFDndiodeGiven) model->B3SOIFDndiode = 1.0; if (!model->B3SOIFDntunGiven) model->B3SOIFDntun = 10.0; if (!model->B3SOIFDisbjtGiven) model->B3SOIFDisbjt = 1e-6; if (!model->B3SOIFDisdifGiven) model->B3SOIFDisdif = 0.0; if (!model->B3SOIFDisrecGiven) model->B3SOIFDisrec = 1e-5; if (!model->B3SOIFDistunGiven) model->B3SOIFDistun = 0.0; if (!model->B3SOIFDxbjtGiven) model->B3SOIFDxbjt = 2; if (!model->B3SOIFDxdifGiven) model->B3SOIFDxdif = 2; if (!model->B3SOIFDxrecGiven) model->B3SOIFDxrec = 20; if (!model->B3SOIFDxtunGiven) model->B3SOIFDxtun = 0; if (!model->B3SOIFDedlGiven) model->B3SOIFDedl = 2e-6; if (!model->B3SOIFDkbjt1Given) model->B3SOIFDkbjt1 = 0; if (!model->B3SOIFDttGiven) model->B3SOIFDtt = 1e-12; if (!model->B3SOIFDasdGiven) model->B3SOIFDasd = 0.3; /* unit degree celcius */ if (!model->B3SOIFDtnomGiven) model->B3SOIFDtnom = ckt->CKTnomTemp; if (!model->B3SOIFDLintGiven) model->B3SOIFDLint = 0.0; if (!model->B3SOIFDLlGiven) model->B3SOIFDLl = 0.0; if (!model->B3SOIFDLlnGiven) model->B3SOIFDLln = 1.0; if (!model->B3SOIFDLwGiven) model->B3SOIFDLw = 0.0; if (!model->B3SOIFDLwnGiven) model->B3SOIFDLwn = 1.0; if (!model->B3SOIFDLwlGiven) model->B3SOIFDLwl = 0.0; if (!model->B3SOIFDLminGiven) model->B3SOIFDLmin = 0.0; if (!model->B3SOIFDLmaxGiven) model->B3SOIFDLmax = 1.0; if (!model->B3SOIFDWintGiven) model->B3SOIFDWint = 0.0; if (!model->B3SOIFDWlGiven) model->B3SOIFDWl = 0.0; if (!model->B3SOIFDWlnGiven) model->B3SOIFDWln = 1.0; if (!model->B3SOIFDWwGiven) model->B3SOIFDWw = 0.0; if (!model->B3SOIFDWwnGiven) model->B3SOIFDWwn = 1.0; if (!model->B3SOIFDWwlGiven) model->B3SOIFDWwl = 0.0; if (!model->B3SOIFDWminGiven) model->B3SOIFDWmin = 0.0; if (!model->B3SOIFDWmaxGiven) model->B3SOIFDWmax = 1.0; if (!model->B3SOIFDdwcGiven) model->B3SOIFDdwc = model->B3SOIFDWint; if (!model->B3SOIFDdlcGiven) model->B3SOIFDdlc = model->B3SOIFDLint; /* Added for binning - START */ /* Length dependence */ if (!model->B3SOIFDlnpeakGiven) model->B3SOIFDlnpeak = 0.0; if (!model->B3SOIFDlnsubGiven) model->B3SOIFDlnsub = 0.0; if (!model->B3SOIFDlngateGiven) model->B3SOIFDlngate = 0.0; if (!model->B3SOIFDlvth0Given) model->B3SOIFDlvth0 = 0.0; if (!model->B3SOIFDlk1Given) model->B3SOIFDlk1 = 0.0; if (!model->B3SOIFDlk2Given) model->B3SOIFDlk2 = 0.0; if (!model->B3SOIFDlk3Given) model->B3SOIFDlk3 = 0.0; if (!model->B3SOIFDlk3bGiven) model->B3SOIFDlk3b = 0.0; if (!model->B3SOIFDlvbsaGiven) model->B3SOIFDlvbsa = 0.0; if (!model->B3SOIFDldelpGiven) model->B3SOIFDldelp = 0.0; if (!model->B3SOIFDlkb1Given) model->B3SOIFDlkb1 = 0.0; if (!model->B3SOIFDlkb3Given) model->B3SOIFDlkb3 = 1.0; if (!model->B3SOIFDldvbd0Given) model->B3SOIFDldvbd0 = 1.0; if (!model->B3SOIFDldvbd1Given) model->B3SOIFDldvbd1 = 1.0; if (!model->B3SOIFDlw0Given) model->B3SOIFDlw0 = 0.0; if (!model->B3SOIFDlnlxGiven) model->B3SOIFDlnlx = 0.0; if (!model->B3SOIFDldvt0Given) model->B3SOIFDldvt0 = 0.0; if (!model->B3SOIFDldvt1Given) model->B3SOIFDldvt1 = 0.0; if (!model->B3SOIFDldvt2Given) model->B3SOIFDldvt2 = 0.0; if (!model->B3SOIFDldvt0wGiven) model->B3SOIFDldvt0w = 0.0; if (!model->B3SOIFDldvt1wGiven) model->B3SOIFDldvt1w = 0.0; if (!model->B3SOIFDldvt2wGiven) model->B3SOIFDldvt2w = 0.0; if (!model->B3SOIFDlu0Given) model->B3SOIFDlu0 = 0.0; if (!model->B3SOIFDluaGiven) model->B3SOIFDlua = 0.0; if (!model->B3SOIFDlubGiven) model->B3SOIFDlub = 0.0; if (!model->B3SOIFDlucGiven) model->B3SOIFDluc = 0.0; if (!model->B3SOIFDlvsatGiven) model->B3SOIFDlvsat = 0.0; if (!model->B3SOIFDla0Given) model->B3SOIFDla0 = 0.0; if (!model->B3SOIFDlagsGiven) model->B3SOIFDlags = 0.0; if (!model->B3SOIFDlb0Given) model->B3SOIFDlb0 = 0.0; if (!model->B3SOIFDlb1Given) model->B3SOIFDlb1 = 0.0; if (!model->B3SOIFDlketaGiven) model->B3SOIFDlketa = 0.0; if (!model->B3SOIFDlabpGiven) model->B3SOIFDlabp = 0.0; if (!model->B3SOIFDlmxcGiven) model->B3SOIFDlmxc = 0.0; if (!model->B3SOIFDladice0Given) model->B3SOIFDladice0 = 0.0; if (!model->B3SOIFDla1Given) model->B3SOIFDla1 = 0.0; if (!model->B3SOIFDla2Given) model->B3SOIFDla2 = 0.0; if (!model->B3SOIFDlrdswGiven) model->B3SOIFDlrdsw = 0.0; if (!model->B3SOIFDlprwbGiven) model->B3SOIFDlprwb = 0.0; if (!model->B3SOIFDlprwgGiven) model->B3SOIFDlprwg = 0.0; if (!model->B3SOIFDlwrGiven) model->B3SOIFDlwr = 0.0; if (!model->B3SOIFDlnfactorGiven) model->B3SOIFDlnfactor = 0.0; if (!model->B3SOIFDldwgGiven) model->B3SOIFDldwg = 0.0; if (!model->B3SOIFDldwbGiven) model->B3SOIFDldwb = 0.0; if (!model->B3SOIFDlvoffGiven) model->B3SOIFDlvoff = 0.0; if (!model->B3SOIFDleta0Given) model->B3SOIFDleta0 = 0.0; if (!model->B3SOIFDletabGiven) model->B3SOIFDletab = 0.0; if (!model->B3SOIFDldsubGiven) model->B3SOIFDldsub = 0.0; if (!model->B3SOIFDlcitGiven) model->B3SOIFDlcit = 0.0; if (!model->B3SOIFDlcdscGiven) model->B3SOIFDlcdsc = 0.0; if (!model->B3SOIFDlcdscbGiven) model->B3SOIFDlcdscb = 0.0; if (!model->B3SOIFDlcdscdGiven) model->B3SOIFDlcdscd = 0.0; if (!model->B3SOIFDlpclmGiven) model->B3SOIFDlpclm = 0.0; if (!model->B3SOIFDlpdibl1Given) model->B3SOIFDlpdibl1 = 0.0; if (!model->B3SOIFDlpdibl2Given) model->B3SOIFDlpdibl2 = 0.0; if (!model->B3SOIFDlpdiblbGiven) model->B3SOIFDlpdiblb = 0.0; if (!model->B3SOIFDldroutGiven) model->B3SOIFDldrout = 0.0; if (!model->B3SOIFDlpvagGiven) model->B3SOIFDlpvag = 0.0; if (!model->B3SOIFDldeltaGiven) model->B3SOIFDldelta = 0.0; if (!model->B3SOIFDlaiiGiven) model->B3SOIFDlaii = 0.0; if (!model->B3SOIFDlbiiGiven) model->B3SOIFDlbii = 0.0; if (!model->B3SOIFDlciiGiven) model->B3SOIFDlcii = 0.0; if (!model->B3SOIFDldiiGiven) model->B3SOIFDldii = 0.0; if (!model->B3SOIFDlalpha0Given) model->B3SOIFDlalpha0 = 0.0; if (!model->B3SOIFDlalpha1Given) model->B3SOIFDlalpha1 = 0.0; if (!model->B3SOIFDlbeta0Given) model->B3SOIFDlbeta0 = 0.0; if (!model->B3SOIFDlagidlGiven) model->B3SOIFDlagidl = 0.0; if (!model->B3SOIFDlbgidlGiven) model->B3SOIFDlbgidl = 0.0; if (!model->B3SOIFDlngidlGiven) model->B3SOIFDlngidl = 0.0; if (!model->B3SOIFDlntunGiven) model->B3SOIFDlntun = 0.0; if (!model->B3SOIFDlndiodeGiven) model->B3SOIFDlndiode = 0.0; if (!model->B3SOIFDlisbjtGiven) model->B3SOIFDlisbjt = 0.0; if (!model->B3SOIFDlisdifGiven) model->B3SOIFDlisdif = 0.0; if (!model->B3SOIFDlisrecGiven) model->B3SOIFDlisrec = 0.0; if (!model->B3SOIFDlistunGiven) model->B3SOIFDlistun = 0.0; if (!model->B3SOIFDledlGiven) model->B3SOIFDledl = 0.0; if (!model->B3SOIFDlkbjt1Given) model->B3SOIFDlkbjt1 = 0.0; /* CV Model */ if (!model->B3SOIFDlvsdfbGiven) model->B3SOIFDlvsdfb = 0.0; if (!model->B3SOIFDlvsdthGiven) model->B3SOIFDlvsdth = 0.0; /* Width dependence */ if (!model->B3SOIFDwnpeakGiven) model->B3SOIFDwnpeak = 0.0; if (!model->B3SOIFDwnsubGiven) model->B3SOIFDwnsub = 0.0; if (!model->B3SOIFDwngateGiven) model->B3SOIFDwngate = 0.0; if (!model->B3SOIFDwvth0Given) model->B3SOIFDwvth0 = 0.0; if (!model->B3SOIFDwk1Given) model->B3SOIFDwk1 = 0.0; if (!model->B3SOIFDwk2Given) model->B3SOIFDwk2 = 0.0; if (!model->B3SOIFDwk3Given) model->B3SOIFDwk3 = 0.0; if (!model->B3SOIFDwk3bGiven) model->B3SOIFDwk3b = 0.0; if (!model->B3SOIFDwvbsaGiven) model->B3SOIFDwvbsa = 0.0; if (!model->B3SOIFDwdelpGiven) model->B3SOIFDwdelp = 0.0; if (!model->B3SOIFDwkb1Given) model->B3SOIFDwkb1 = 0.0; if (!model->B3SOIFDwkb3Given) model->B3SOIFDwkb3 = 1.0; if (!model->B3SOIFDwdvbd0Given) model->B3SOIFDwdvbd0 = 1.0; if (!model->B3SOIFDwdvbd1Given) model->B3SOIFDwdvbd1 = 1.0; if (!model->B3SOIFDww0Given) model->B3SOIFDww0 = 0.0; if (!model->B3SOIFDwnlxGiven) model->B3SOIFDwnlx = 0.0; if (!model->B3SOIFDwdvt0Given) model->B3SOIFDwdvt0 = 0.0; if (!model->B3SOIFDwdvt1Given) model->B3SOIFDwdvt1 = 0.0; if (!model->B3SOIFDwdvt2Given) model->B3SOIFDwdvt2 = 0.0; if (!model->B3SOIFDwdvt0wGiven) model->B3SOIFDwdvt0w = 0.0; if (!model->B3SOIFDwdvt1wGiven) model->B3SOIFDwdvt1w = 0.0; if (!model->B3SOIFDwdvt2wGiven) model->B3SOIFDwdvt2w = 0.0; if (!model->B3SOIFDwu0Given) model->B3SOIFDwu0 = 0.0; if (!model->B3SOIFDwuaGiven) model->B3SOIFDwua = 0.0; if (!model->B3SOIFDwubGiven) model->B3SOIFDwub = 0.0; if (!model->B3SOIFDwucGiven) model->B3SOIFDwuc = 0.0; if (!model->B3SOIFDwvsatGiven) model->B3SOIFDwvsat = 0.0; if (!model->B3SOIFDwa0Given) model->B3SOIFDwa0 = 0.0; if (!model->B3SOIFDwagsGiven) model->B3SOIFDwags = 0.0; if (!model->B3SOIFDwb0Given) model->B3SOIFDwb0 = 0.0; if (!model->B3SOIFDwb1Given) model->B3SOIFDwb1 = 0.0; if (!model->B3SOIFDwketaGiven) model->B3SOIFDwketa = 0.0; if (!model->B3SOIFDwabpGiven) model->B3SOIFDwabp = 0.0; if (!model->B3SOIFDwmxcGiven) model->B3SOIFDwmxc = 0.0; if (!model->B3SOIFDwadice0Given) model->B3SOIFDwadice0 = 0.0; if (!model->B3SOIFDwa1Given) model->B3SOIFDwa1 = 0.0; if (!model->B3SOIFDwa2Given) model->B3SOIFDwa2 = 0.0; if (!model->B3SOIFDwrdswGiven) model->B3SOIFDwrdsw = 0.0; if (!model->B3SOIFDwprwbGiven) model->B3SOIFDwprwb = 0.0; if (!model->B3SOIFDwprwgGiven) model->B3SOIFDwprwg = 0.0; if (!model->B3SOIFDwwrGiven) model->B3SOIFDwwr = 0.0; if (!model->B3SOIFDwnfactorGiven) model->B3SOIFDwnfactor = 0.0; if (!model->B3SOIFDwdwgGiven) model->B3SOIFDwdwg = 0.0; if (!model->B3SOIFDwdwbGiven) model->B3SOIFDwdwb = 0.0; if (!model->B3SOIFDwvoffGiven) model->B3SOIFDwvoff = 0.0; if (!model->B3SOIFDweta0Given) model->B3SOIFDweta0 = 0.0; if (!model->B3SOIFDwetabGiven) model->B3SOIFDwetab = 0.0; if (!model->B3SOIFDwdsubGiven) model->B3SOIFDwdsub = 0.0; if (!model->B3SOIFDwcitGiven) model->B3SOIFDwcit = 0.0; if (!model->B3SOIFDwcdscGiven) model->B3SOIFDwcdsc = 0.0; if (!model->B3SOIFDwcdscbGiven) model->B3SOIFDwcdscb = 0.0; if (!model->B3SOIFDwcdscdGiven) model->B3SOIFDwcdscd = 0.0; if (!model->B3SOIFDwpclmGiven) model->B3SOIFDwpclm = 0.0; if (!model->B3SOIFDwpdibl1Given) model->B3SOIFDwpdibl1 = 0.0; if (!model->B3SOIFDwpdibl2Given) model->B3SOIFDwpdibl2 = 0.0; if (!model->B3SOIFDwpdiblbGiven) model->B3SOIFDwpdiblb = 0.0; if (!model->B3SOIFDwdroutGiven) model->B3SOIFDwdrout = 0.0; if (!model->B3SOIFDwpvagGiven) model->B3SOIFDwpvag = 0.0; if (!model->B3SOIFDwdeltaGiven) model->B3SOIFDwdelta = 0.0; if (!model->B3SOIFDwaiiGiven) model->B3SOIFDwaii = 0.0; if (!model->B3SOIFDwbiiGiven) model->B3SOIFDwbii = 0.0; if (!model->B3SOIFDwciiGiven) model->B3SOIFDwcii = 0.0; if (!model->B3SOIFDwdiiGiven) model->B3SOIFDwdii = 0.0; if (!model->B3SOIFDwalpha0Given) model->B3SOIFDwalpha0 = 0.0; if (!model->B3SOIFDwalpha1Given) model->B3SOIFDwalpha1 = 0.0; if (!model->B3SOIFDwbeta0Given) model->B3SOIFDwbeta0 = 0.0; if (!model->B3SOIFDwagidlGiven) model->B3SOIFDwagidl = 0.0; if (!model->B3SOIFDwbgidlGiven) model->B3SOIFDwbgidl = 0.0; if (!model->B3SOIFDwngidlGiven) model->B3SOIFDwngidl = 0.0; if (!model->B3SOIFDwntunGiven) model->B3SOIFDwntun = 0.0; if (!model->B3SOIFDwndiodeGiven) model->B3SOIFDwndiode = 0.0; if (!model->B3SOIFDwisbjtGiven) model->B3SOIFDwisbjt = 0.0; if (!model->B3SOIFDwisdifGiven) model->B3SOIFDwisdif = 0.0; if (!model->B3SOIFDwisrecGiven) model->B3SOIFDwisrec = 0.0; if (!model->B3SOIFDwistunGiven) model->B3SOIFDwistun = 0.0; if (!model->B3SOIFDwedlGiven) model->B3SOIFDwedl = 0.0; if (!model->B3SOIFDwkbjt1Given) model->B3SOIFDwkbjt1 = 0.0; /* CV Model */ if (!model->B3SOIFDwvsdfbGiven) model->B3SOIFDwvsdfb = 0.0; if (!model->B3SOIFDwvsdthGiven) model->B3SOIFDwvsdth = 0.0; /* Cross-term dependence */ if (!model->B3SOIFDpnpeakGiven) model->B3SOIFDpnpeak = 0.0; if (!model->B3SOIFDpnsubGiven) model->B3SOIFDpnsub = 0.0; if (!model->B3SOIFDpngateGiven) model->B3SOIFDpngate = 0.0; if (!model->B3SOIFDpvth0Given) model->B3SOIFDpvth0 = 0.0; if (!model->B3SOIFDpk1Given) model->B3SOIFDpk1 = 0.0; if (!model->B3SOIFDpk2Given) model->B3SOIFDpk2 = 0.0; if (!model->B3SOIFDpk3Given) model->B3SOIFDpk3 = 0.0; if (!model->B3SOIFDpk3bGiven) model->B3SOIFDpk3b = 0.0; if (!model->B3SOIFDpvbsaGiven) model->B3SOIFDpvbsa = 0.0; if (!model->B3SOIFDpdelpGiven) model->B3SOIFDpdelp = 0.0; if (!model->B3SOIFDpkb1Given) model->B3SOIFDpkb1 = 0.0; if (!model->B3SOIFDpkb3Given) model->B3SOIFDpkb3 = 1.0; if (!model->B3SOIFDpdvbd0Given) model->B3SOIFDpdvbd0 = 1.0; if (!model->B3SOIFDpdvbd1Given) model->B3SOIFDpdvbd1 = 1.0; if (!model->B3SOIFDpw0Given) model->B3SOIFDpw0 = 0.0; if (!model->B3SOIFDpnlxGiven) model->B3SOIFDpnlx = 0.0; if (!model->B3SOIFDpdvt0Given) model->B3SOIFDpdvt0 = 0.0; if (!model->B3SOIFDpdvt1Given) model->B3SOIFDpdvt1 = 0.0; if (!model->B3SOIFDpdvt2Given) model->B3SOIFDpdvt2 = 0.0; if (!model->B3SOIFDpdvt0wGiven) model->B3SOIFDpdvt0w = 0.0; if (!model->B3SOIFDpdvt1wGiven) model->B3SOIFDpdvt1w = 0.0; if (!model->B3SOIFDpdvt2wGiven) model->B3SOIFDpdvt2w = 0.0; if (!model->B3SOIFDpu0Given) model->B3SOIFDpu0 = 0.0; if (!model->B3SOIFDpuaGiven) model->B3SOIFDpua = 0.0; if (!model->B3SOIFDpubGiven) model->B3SOIFDpub = 0.0; if (!model->B3SOIFDpucGiven) model->B3SOIFDpuc = 0.0; if (!model->B3SOIFDpvsatGiven) model->B3SOIFDpvsat = 0.0; if (!model->B3SOIFDpa0Given) model->B3SOIFDpa0 = 0.0; if (!model->B3SOIFDpagsGiven) model->B3SOIFDpags = 0.0; if (!model->B3SOIFDpb0Given) model->B3SOIFDpb0 = 0.0; if (!model->B3SOIFDpb1Given) model->B3SOIFDpb1 = 0.0; if (!model->B3SOIFDpketaGiven) model->B3SOIFDpketa = 0.0; if (!model->B3SOIFDpabpGiven) model->B3SOIFDpabp = 0.0; if (!model->B3SOIFDpmxcGiven) model->B3SOIFDpmxc = 0.0; if (!model->B3SOIFDpadice0Given) model->B3SOIFDpadice0 = 0.0; if (!model->B3SOIFDpa1Given) model->B3SOIFDpa1 = 0.0; if (!model->B3SOIFDpa2Given) model->B3SOIFDpa2 = 0.0; if (!model->B3SOIFDprdswGiven) model->B3SOIFDprdsw = 0.0; if (!model->B3SOIFDpprwbGiven) model->B3SOIFDpprwb = 0.0; if (!model->B3SOIFDpprwgGiven) model->B3SOIFDpprwg = 0.0; if (!model->B3SOIFDpwrGiven) model->B3SOIFDpwr = 0.0; if (!model->B3SOIFDpnfactorGiven) model->B3SOIFDpnfactor = 0.0; if (!model->B3SOIFDpdwgGiven) model->B3SOIFDpdwg = 0.0; if (!model->B3SOIFDpdwbGiven) model->B3SOIFDpdwb = 0.0; if (!model->B3SOIFDpvoffGiven) model->B3SOIFDpvoff = 0.0; if (!model->B3SOIFDpeta0Given) model->B3SOIFDpeta0 = 0.0; if (!model->B3SOIFDpetabGiven) model->B3SOIFDpetab = 0.0; if (!model->B3SOIFDpdsubGiven) model->B3SOIFDpdsub = 0.0; if (!model->B3SOIFDpcitGiven) model->B3SOIFDpcit = 0.0; if (!model->B3SOIFDpcdscGiven) model->B3SOIFDpcdsc = 0.0; if (!model->B3SOIFDpcdscbGiven) model->B3SOIFDpcdscb = 0.0; if (!model->B3SOIFDpcdscdGiven) model->B3SOIFDpcdscd = 0.0; if (!model->B3SOIFDppclmGiven) model->B3SOIFDppclm = 0.0; if (!model->B3SOIFDppdibl1Given) model->B3SOIFDppdibl1 = 0.0; if (!model->B3SOIFDppdibl2Given) model->B3SOIFDppdibl2 = 0.0; if (!model->B3SOIFDppdiblbGiven) model->B3SOIFDppdiblb = 0.0; if (!model->B3SOIFDpdroutGiven) model->B3SOIFDpdrout = 0.0; if (!model->B3SOIFDppvagGiven) model->B3SOIFDppvag = 0.0; if (!model->B3SOIFDpdeltaGiven) model->B3SOIFDpdelta = 0.0; if (!model->B3SOIFDpaiiGiven) model->B3SOIFDpaii = 0.0; if (!model->B3SOIFDpbiiGiven) model->B3SOIFDpbii = 0.0; if (!model->B3SOIFDpciiGiven) model->B3SOIFDpcii = 0.0; if (!model->B3SOIFDpdiiGiven) model->B3SOIFDpdii = 0.0; if (!model->B3SOIFDpalpha0Given) model->B3SOIFDpalpha0 = 0.0; if (!model->B3SOIFDpalpha1Given) model->B3SOIFDpalpha1 = 0.0; if (!model->B3SOIFDpbeta0Given) model->B3SOIFDpbeta0 = 0.0; if (!model->B3SOIFDpagidlGiven) model->B3SOIFDpagidl = 0.0; if (!model->B3SOIFDpbgidlGiven) model->B3SOIFDpbgidl = 0.0; if (!model->B3SOIFDpngidlGiven) model->B3SOIFDpngidl = 0.0; if (!model->B3SOIFDpntunGiven) model->B3SOIFDpntun = 0.0; if (!model->B3SOIFDpndiodeGiven) model->B3SOIFDpndiode = 0.0; if (!model->B3SOIFDpisbjtGiven) model->B3SOIFDpisbjt = 0.0; if (!model->B3SOIFDpisdifGiven) model->B3SOIFDpisdif = 0.0; if (!model->B3SOIFDpisrecGiven) model->B3SOIFDpisrec = 0.0; if (!model->B3SOIFDpistunGiven) model->B3SOIFDpistun = 0.0; if (!model->B3SOIFDpedlGiven) model->B3SOIFDpedl = 0.0; if (!model->B3SOIFDpkbjt1Given) model->B3SOIFDpkbjt1 = 0.0; /* CV Model */ if (!model->B3SOIFDpvsdfbGiven) model->B3SOIFDpvsdfb = 0.0; if (!model->B3SOIFDpvsdthGiven) model->B3SOIFDpvsdth = 0.0; /* Added for binning - END */ if (!model->B3SOIFDcfGiven) model->B3SOIFDcf = 2.0 * EPSOX / PI * log(1.0 + 0.4e-6 / model->B3SOIFDtox); if (!model->B3SOIFDcgdoGiven) { if (model->B3SOIFDdlcGiven && (model->B3SOIFDdlc > 0.0)) { model->B3SOIFDcgdo = model->B3SOIFDdlc * model->B3SOIFDcox - model->B3SOIFDcgdl ; } else model->B3SOIFDcgdo = 0.6 * model->B3SOIFDxj * model->B3SOIFDcox; } if (!model->B3SOIFDcgsoGiven) { if (model->B3SOIFDdlcGiven && (model->B3SOIFDdlc > 0.0)) { model->B3SOIFDcgso = model->B3SOIFDdlc * model->B3SOIFDcox - model->B3SOIFDcgsl ; } else model->B3SOIFDcgso = 0.6 * model->B3SOIFDxj * model->B3SOIFDcox; } if (!model->B3SOIFDcgeoGiven) { model->B3SOIFDcgeo = 0.0; } if (!model->B3SOIFDxpartGiven) model->B3SOIFDxpart = 0.0; if (!model->B3SOIFDsheetResistanceGiven) model->B3SOIFDsheetResistance = 0.0; if (!model->B3SOIFDcsdeswGiven) model->B3SOIFDcsdesw = 0.0; if (!model->B3SOIFDunitLengthGateSidewallJctCapGiven) model->B3SOIFDunitLengthGateSidewallJctCap = 1e-10; if (!model->B3SOIFDGatesidewallJctPotentialGiven) model->B3SOIFDGatesidewallJctPotential = 0.7; if (!model->B3SOIFDbodyJctGateSideGradingCoeffGiven) model->B3SOIFDbodyJctGateSideGradingCoeff = 0.5; if (!model->B3SOIFDoxideTrapDensityAGiven) { if (model->B3SOIFDtype == NMOS) model->B3SOIFDoxideTrapDensityA = 1e20; else model->B3SOIFDoxideTrapDensityA=9.9e18; } if (!model->B3SOIFDoxideTrapDensityBGiven) { if (model->B3SOIFDtype == NMOS) model->B3SOIFDoxideTrapDensityB = 5e4; else model->B3SOIFDoxideTrapDensityB = 2.4e3; } if (!model->B3SOIFDoxideTrapDensityCGiven) { if (model->B3SOIFDtype == NMOS) model->B3SOIFDoxideTrapDensityC = -1.4e-12; else model->B3SOIFDoxideTrapDensityC = 1.4e-12; } if (!model->B3SOIFDemGiven) model->B3SOIFDem = 4.1e7; /* V/m */ if (!model->B3SOIFDefGiven) model->B3SOIFDef = 1.0; if (!model->B3SOIFDafGiven) model->B3SOIFDaf = 1.0; if (!model->B3SOIFDkfGiven) model->B3SOIFDkf = 0.0; if (!model->B3SOIFDnoifGiven) model->B3SOIFDnoif = 1.0; /* loop through all the instances of the model */ for (here = B3SOIFDinstances(model); here != NULL ; here=B3SOIFDnextInstance(here)) { /* allocate a chunk of the state vector */ here->B3SOIFDstates = *states; *states += B3SOIFDnumStates; /* perform the parameter defaulting */ if (!here->B3SOIFDdrainAreaGiven) here->B3SOIFDdrainArea = 0.0; if (!here->B3SOIFDdrainPerimeterGiven) here->B3SOIFDdrainPerimeter = 0.0; if (!here->B3SOIFDdrainSquaresGiven) here->B3SOIFDdrainSquares = 1.0; if (!here->B3SOIFDicVBSGiven) here->B3SOIFDicVBS = 0; if (!here->B3SOIFDicVDSGiven) here->B3SOIFDicVDS = 0; if (!here->B3SOIFDicVGSGiven) here->B3SOIFDicVGS = 0; if (!here->B3SOIFDicVESGiven) here->B3SOIFDicVES = 0; if (!here->B3SOIFDicVPSGiven) here->B3SOIFDicVPS = 0; if (!here->B3SOIFDbjtoffGiven) here->B3SOIFDbjtoff = 0; if (!here->B3SOIFDdebugModGiven) here->B3SOIFDdebugMod = 0; if (!here->B3SOIFDrth0Given) here->B3SOIFDrth0 = model->B3SOIFDrth0; if (!here->B3SOIFDcth0Given) here->B3SOIFDcth0 = model->B3SOIFDcth0; if (!here->B3SOIFDbodySquaresGiven) here->B3SOIFDbodySquares = 1.0; if (!here->B3SOIFDlGiven) here->B3SOIFDl = 5e-6; if (!here->B3SOIFDsourceAreaGiven) here->B3SOIFDsourceArea = 0; if (!here->B3SOIFDsourcePerimeterGiven) here->B3SOIFDsourcePerimeter = 0; if (!here->B3SOIFDsourceSquaresGiven) here->B3SOIFDsourceSquares = 1; if (!here->B3SOIFDwGiven) here->B3SOIFDw = 5e-6; if (!here->B3SOIFDmGiven) here->B3SOIFDm = 1; if (!here->B3SOIFDoffGiven) here->B3SOIFDoff = 0; /* process drain series resistance */ if ((model->B3SOIFDsheetResistance > 0.0) && (here->B3SOIFDdrainSquares > 0.0 ) && (here->B3SOIFDdNodePrime == 0)) { error = CKTmkVolt(ckt,&tmp,here->B3SOIFDname,"drain"); if(error) return(error); here->B3SOIFDdNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } else { here->B3SOIFDdNodePrime = here->B3SOIFDdNode; } /* process source series resistance */ if ((model->B3SOIFDsheetResistance > 0.0) && (here->B3SOIFDsourceSquares > 0.0 ) && (here->B3SOIFDsNodePrime == 0)) { error = CKTmkVolt(ckt,&tmp,here->B3SOIFDname,"source"); if(error) return(error); here->B3SOIFDsNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } else { here->B3SOIFDsNodePrime = here->B3SOIFDsNode; } /* process effective silicon film thickness */ model->B3SOIFDcbox = 3.453133e-11 / model->B3SOIFDtbox; model->B3SOIFDcsi = 1.03594e-10 / model->B3SOIFDtsi; Cboxt = model->B3SOIFDcbox * model->B3SOIFDcsi / (model->B3SOIFDcbox + model->B3SOIFDcsi); model->B3SOIFDqsi = Charge_q*model->B3SOIFDnpeak*1e6*model->B3SOIFDtsi; /* Tsieff */ tmp1 = 2.0 * EPSSI * model->B3SOIFDvbsa / Charge_q / (1e6*model->B3SOIFDnpeak); tmp2 = model->B3SOIFDtsi * model->B3SOIFDtsi; if (tmp2 < tmp1) { fprintf(stderr, "vbsa = %.3f is too large for this tsi = %.3e and is automatically set to zero\n", model->B3SOIFDvbsa, model->B3SOIFDtsi); model->B3SOIFDcsieff = model->B3SOIFDcsi; model->B3SOIFDqsieff = model->B3SOIFDqsi; } else { tmp1 = sqrt(model->B3SOIFDtsi * model->B3SOIFDtsi - 2.0 * EPSSI * model->B3SOIFDvbsa / Charge_q / (1e6*model->B3SOIFDnpeak)); model->B3SOIFDcsieff = 1.03594e-10 / tmp1; model->B3SOIFDqsieff = Charge_q*model->B3SOIFDnpeak*1e6*tmp1; } model->B3SOIFDcsit = 1/(1/model->B3SOIFDcox + 1/model->B3SOIFDcsieff); model->B3SOIFDcboxt = 1/(1/model->B3SOIFDcbox + 1/model->B3SOIFDcsieff); nfb0 = 1/(1 + model->B3SOIFDcbox / model->B3SOIFDcsit); model->B3SOIFDnfb = model->B3SOIFDkb3 * nfb0; model->B3SOIFDadice = model->B3SOIFDadice0 / ( 1 + Cboxt / model->B3SOIFDcox); here->B3SOIFDfloat = 0; here->B3SOIFDpNode = here->B3SOIFDpNodeExt; here->B3SOIFDbNode = here->B3SOIFDbNodeExt; here->B3SOIFDtempNode = here->B3SOIFDtempNodeExt; if (here->B3SOIFDbNode == -1) /* no internal body node is needed for SPICE iteration */ { here->B3SOIFDbNode = here->B3SOIFDpNode = 0; here->B3SOIFDbodyMod = 0; } else /* body tied */ { if ((model->B3SOIFDrbody == 0.0) && (model->B3SOIFDrbsh == 0.0)) { /* ideal body tie */ here->B3SOIFDbodyMod = 2; /* pNode is not used in this case */ } else { error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Body"); if(error) return(error); here->B3SOIFDbodyMod = 1; here->B3SOIFDpNode = here->B3SOIFDbNode; here->B3SOIFDbNode = tmp->number; } } if ((model->B3SOIFDshMod == 1) && (here->B3SOIFDrth0!=0)) { error = CKTmkVolt(ckt,&tmp,here->B3SOIFDname,"Temp"); if(error) return(error); here->B3SOIFDtempNode = tmp->number; } else { here->B3SOIFDtempNode = 0; } /* here for debugging purpose only */ if ((here->B3SOIFDdebugMod > 1) || (here->B3SOIFDdebugMod == -1)) { /* The real Vbs value */ error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Vbs"); if(error) return(error); here->B3SOIFDvbsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Ids"); if(error) return(error); here->B3SOIFDidsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Ic"); if(error) return(error); here->B3SOIFDicNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Ibs"); if(error) return(error); here->B3SOIFDibsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Ibd"); if(error) return(error); here->B3SOIFDibdNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Iii"); if(error) return(error); here->B3SOIFDiiiNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Igidl"); if(error) return(error); here->B3SOIFDigidlNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Itun"); if(error) return(error); here->B3SOIFDitunNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Ibp"); if(error) return(error); here->B3SOIFDibpNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Abeff"); if(error) return(error); here->B3SOIFDabeffNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Vbs0eff"); if(error) return(error); here->B3SOIFDvbs0effNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Vbseff"); if(error) return(error); here->B3SOIFDvbseffNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Xc"); if(error) return(error); here->B3SOIFDxcNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Cbb"); if(error) return(error); here->B3SOIFDcbbNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Cbd"); if(error) return(error); here->B3SOIFDcbdNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Cbg"); if(error) return(error); here->B3SOIFDcbgNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Qbody"); if(error) return(error); here->B3SOIFDqbNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Qbf"); if(error) return(error); here->B3SOIFDqbfNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Qjs"); if(error) return(error); here->B3SOIFDqjsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Qjd"); if(error) return(error); here->B3SOIFDqjdNode = tmp->number; /* clean up last */ error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Gm"); if(error) return(error); here->B3SOIFDgmNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Gmbs"); if(error) return(error); here->B3SOIFDgmbsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Gds"); if(error) return(error); here->B3SOIFDgdsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Gme"); if(error) return(error); here->B3SOIFDgmeNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Vbs0teff"); if(error) return(error); here->B3SOIFDvbs0teffNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Vth"); if(error) return(error); here->B3SOIFDvthNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Vgsteff"); if(error) return(error); here->B3SOIFDvgsteffNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Xcsat"); if(error) return(error); here->B3SOIFDxcsatNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Qac0"); if(error) return(error); here->B3SOIFDqaccNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Qsub0"); if(error) return(error); here->B3SOIFDqsub0Node = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Qsubs1"); if(error) return(error); here->B3SOIFDqsubs1Node = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Qsubs2"); if(error) return(error); here->B3SOIFDqsubs2Node = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Qsub"); if(error) return(error); here->B3SOIFDqeNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Qdrn"); if(error) return(error); here->B3SOIFDqdNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Qgate"); if(error) return(error); here->B3SOIFDqgNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Vdscv"); if(error) return(error); here->B3SOIFDvdscvNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Vcscv"); if(error) return(error); here->B3SOIFDvcscvNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Cbe"); if(error) return(error); here->B3SOIFDcbeNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Dum1"); if(error) return(error); here->B3SOIFDdum1Node = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Dum2"); if(error) return(error); here->B3SOIFDdum2Node = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Dum3"); if(error) return(error); here->B3SOIFDdum3Node = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Dum4"); if(error) return(error); here->B3SOIFDdum4Node = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Dum5"); if(error) return(error); here->B3SOIFDdum5Node = tmp->number; } /* set Sparse Matrix Pointers */ /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) if ((model->B3SOIFDshMod == 1) && (here->B3SOIFDrth0!=0.0)) { TSTALLOC(B3SOIFDTemptempPtr, B3SOIFDtempNode, B3SOIFDtempNode); TSTALLOC(B3SOIFDTempdpPtr, B3SOIFDtempNode, B3SOIFDdNodePrime); TSTALLOC(B3SOIFDTempspPtr, B3SOIFDtempNode, B3SOIFDsNodePrime); TSTALLOC(B3SOIFDTempgPtr, B3SOIFDtempNode, B3SOIFDgNode); TSTALLOC(B3SOIFDTempbPtr, B3SOIFDtempNode, B3SOIFDbNode); TSTALLOC(B3SOIFDTempePtr, B3SOIFDtempNode, B3SOIFDeNode); TSTALLOC(B3SOIFDGtempPtr, B3SOIFDgNode, B3SOIFDtempNode); TSTALLOC(B3SOIFDDPtempPtr, B3SOIFDdNodePrime, B3SOIFDtempNode); TSTALLOC(B3SOIFDSPtempPtr, B3SOIFDsNodePrime, B3SOIFDtempNode); TSTALLOC(B3SOIFDEtempPtr, B3SOIFDeNode, B3SOIFDtempNode); TSTALLOC(B3SOIFDBtempPtr, B3SOIFDbNode, B3SOIFDtempNode); if (here->B3SOIFDbodyMod == 1) { TSTALLOC(B3SOIFDPtempPtr, B3SOIFDpNode, B3SOIFDtempNode); } } if (here->B3SOIFDbodyMod == 2) { /* Don't create any Jacobian entry for pNode */ } else if (here->B3SOIFDbodyMod == 1) { TSTALLOC(B3SOIFDBpPtr, B3SOIFDbNode, B3SOIFDpNode); TSTALLOC(B3SOIFDPbPtr, B3SOIFDpNode, B3SOIFDbNode); TSTALLOC(B3SOIFDPpPtr, B3SOIFDpNode, B3SOIFDpNode); TSTALLOC(B3SOIFDPgPtr, B3SOIFDpNode, B3SOIFDgNode); TSTALLOC(B3SOIFDPdpPtr, B3SOIFDpNode, B3SOIFDdNodePrime); TSTALLOC(B3SOIFDPspPtr, B3SOIFDpNode, B3SOIFDsNodePrime); TSTALLOC(B3SOIFDPePtr, B3SOIFDpNode, B3SOIFDeNode); } TSTALLOC(B3SOIFDEgPtr, B3SOIFDeNode, B3SOIFDgNode); TSTALLOC(B3SOIFDEdpPtr, B3SOIFDeNode, B3SOIFDdNodePrime); TSTALLOC(B3SOIFDEspPtr, B3SOIFDeNode, B3SOIFDsNodePrime); TSTALLOC(B3SOIFDGePtr, B3SOIFDgNode, B3SOIFDeNode); TSTALLOC(B3SOIFDDPePtr, B3SOIFDdNodePrime, B3SOIFDeNode); TSTALLOC(B3SOIFDSPePtr, B3SOIFDsNodePrime, B3SOIFDeNode); TSTALLOC(B3SOIFDEbPtr, B3SOIFDeNode, B3SOIFDbNode); TSTALLOC(B3SOIFDEePtr, B3SOIFDeNode, B3SOIFDeNode); TSTALLOC(B3SOIFDGgPtr, B3SOIFDgNode, B3SOIFDgNode); TSTALLOC(B3SOIFDGdpPtr, B3SOIFDgNode, B3SOIFDdNodePrime); TSTALLOC(B3SOIFDGspPtr, B3SOIFDgNode, B3SOIFDsNodePrime); TSTALLOC(B3SOIFDDPgPtr, B3SOIFDdNodePrime, B3SOIFDgNode); TSTALLOC(B3SOIFDDPdpPtr, B3SOIFDdNodePrime, B3SOIFDdNodePrime); TSTALLOC(B3SOIFDDPspPtr, B3SOIFDdNodePrime, B3SOIFDsNodePrime); TSTALLOC(B3SOIFDDPdPtr, B3SOIFDdNodePrime, B3SOIFDdNode); TSTALLOC(B3SOIFDSPgPtr, B3SOIFDsNodePrime, B3SOIFDgNode); TSTALLOC(B3SOIFDSPdpPtr, B3SOIFDsNodePrime, B3SOIFDdNodePrime); TSTALLOC(B3SOIFDSPspPtr, B3SOIFDsNodePrime, B3SOIFDsNodePrime); TSTALLOC(B3SOIFDSPsPtr, B3SOIFDsNodePrime, B3SOIFDsNode); TSTALLOC(B3SOIFDDdPtr, B3SOIFDdNode, B3SOIFDdNode); TSTALLOC(B3SOIFDDdpPtr, B3SOIFDdNode, B3SOIFDdNodePrime); TSTALLOC(B3SOIFDSsPtr, B3SOIFDsNode, B3SOIFDsNode); TSTALLOC(B3SOIFDSspPtr, B3SOIFDsNode, B3SOIFDsNodePrime); /* here for debugging purpose only */ if ((here->B3SOIFDdebugMod > 1) || (here->B3SOIFDdebugMod == -1)) { TSTALLOC(B3SOIFDVbsPtr, B3SOIFDvbsNode, B3SOIFDvbsNode) ; TSTALLOC(B3SOIFDIdsPtr, B3SOIFDidsNode, B3SOIFDidsNode); TSTALLOC(B3SOIFDIcPtr, B3SOIFDicNode, B3SOIFDicNode); TSTALLOC(B3SOIFDIbsPtr, B3SOIFDibsNode, B3SOIFDibsNode); TSTALLOC(B3SOIFDIbdPtr, B3SOIFDibdNode, B3SOIFDibdNode); TSTALLOC(B3SOIFDIiiPtr, B3SOIFDiiiNode, B3SOIFDiiiNode); TSTALLOC(B3SOIFDIgidlPtr, B3SOIFDigidlNode, B3SOIFDigidlNode); TSTALLOC(B3SOIFDItunPtr, B3SOIFDitunNode, B3SOIFDitunNode); TSTALLOC(B3SOIFDIbpPtr, B3SOIFDibpNode, B3SOIFDibpNode); TSTALLOC(B3SOIFDAbeffPtr, B3SOIFDabeffNode, B3SOIFDabeffNode); TSTALLOC(B3SOIFDVbs0effPtr, B3SOIFDvbs0effNode, B3SOIFDvbs0effNode); TSTALLOC(B3SOIFDVbseffPtr, B3SOIFDvbseffNode, B3SOIFDvbseffNode); TSTALLOC(B3SOIFDXcPtr, B3SOIFDxcNode, B3SOIFDxcNode); TSTALLOC(B3SOIFDCbbPtr, B3SOIFDcbbNode, B3SOIFDcbbNode); TSTALLOC(B3SOIFDCbdPtr, B3SOIFDcbdNode, B3SOIFDcbdNode); TSTALLOC(B3SOIFDCbgPtr, B3SOIFDcbgNode, B3SOIFDcbgNode); TSTALLOC(B3SOIFDqbPtr, B3SOIFDqbNode, B3SOIFDqbNode); TSTALLOC(B3SOIFDQbfPtr, B3SOIFDqbfNode, B3SOIFDqbfNode); TSTALLOC(B3SOIFDQjsPtr, B3SOIFDqjsNode, B3SOIFDqjsNode); TSTALLOC(B3SOIFDQjdPtr, B3SOIFDqjdNode, B3SOIFDqjdNode); /* clean up last */ TSTALLOC(B3SOIFDGmPtr, B3SOIFDgmNode, B3SOIFDgmNode); TSTALLOC(B3SOIFDGmbsPtr, B3SOIFDgmbsNode, B3SOIFDgmbsNode); TSTALLOC(B3SOIFDGdsPtr, B3SOIFDgdsNode, B3SOIFDgdsNode); TSTALLOC(B3SOIFDGmePtr, B3SOIFDgmeNode, B3SOIFDgmeNode); TSTALLOC(B3SOIFDVbs0teffPtr, B3SOIFDvbs0teffNode, B3SOIFDvbs0teffNode); TSTALLOC(B3SOIFDVthPtr, B3SOIFDvthNode, B3SOIFDvthNode); TSTALLOC(B3SOIFDVgsteffPtr, B3SOIFDvgsteffNode, B3SOIFDvgsteffNode); TSTALLOC(B3SOIFDXcsatPtr, B3SOIFDxcsatNode, B3SOIFDxcsatNode); TSTALLOC(B3SOIFDVcscvPtr, B3SOIFDvcscvNode, B3SOIFDvcscvNode); TSTALLOC(B3SOIFDVdscvPtr, B3SOIFDvdscvNode, B3SOIFDvdscvNode); TSTALLOC(B3SOIFDCbePtr, B3SOIFDcbeNode, B3SOIFDcbeNode); TSTALLOC(B3SOIFDDum1Ptr, B3SOIFDdum1Node, B3SOIFDdum1Node); TSTALLOC(B3SOIFDDum2Ptr, B3SOIFDdum2Node, B3SOIFDdum2Node); TSTALLOC(B3SOIFDDum3Ptr, B3SOIFDdum3Node, B3SOIFDdum3Node); TSTALLOC(B3SOIFDDum4Ptr, B3SOIFDdum4Node, B3SOIFDdum4Node); TSTALLOC(B3SOIFDDum5Ptr, B3SOIFDdum5Node, B3SOIFDdum5Node); TSTALLOC(B3SOIFDQaccPtr, B3SOIFDqaccNode, B3SOIFDqaccNode); TSTALLOC(B3SOIFDQsub0Ptr, B3SOIFDqsub0Node, B3SOIFDqsub0Node); TSTALLOC(B3SOIFDQsubs1Ptr, B3SOIFDqsubs1Node, B3SOIFDqsubs1Node); TSTALLOC(B3SOIFDQsubs2Ptr, B3SOIFDqsubs2Node, B3SOIFDqsubs2Node); TSTALLOC(B3SOIFDqePtr, B3SOIFDqeNode, B3SOIFDqeNode); TSTALLOC(B3SOIFDqdPtr, B3SOIFDqdNode, B3SOIFDqdNode); TSTALLOC(B3SOIFDqgPtr, B3SOIFDqgNode, B3SOIFDqgNode); } } } return(OK); } int B3SOIFDunsetup(GENmodel *inModel, CKTcircuit *ckt) { B3SOIFDmodel *model; B3SOIFDinstance *here; for (model = (B3SOIFDmodel *)inModel; model != NULL; model = B3SOIFDnextModel(model)) { for (here = B3SOIFDinstances(model); here != NULL; here=B3SOIFDnextInstance(here)) { /* here for debugging purpose only */ if (here->B3SOIFDdum5Node > 0) CKTdltNNum(ckt, here->B3SOIFDdum5Node); here->B3SOIFDdum5Node = 0; if (here->B3SOIFDdum4Node > 0) CKTdltNNum(ckt, here->B3SOIFDdum4Node); here->B3SOIFDdum4Node = 0; if (here->B3SOIFDdum3Node > 0) CKTdltNNum(ckt, here->B3SOIFDdum3Node); here->B3SOIFDdum3Node = 0; if (here->B3SOIFDdum2Node > 0) CKTdltNNum(ckt, here->B3SOIFDdum2Node); here->B3SOIFDdum2Node = 0; if (here->B3SOIFDdum1Node > 0) CKTdltNNum(ckt, here->B3SOIFDdum1Node); here->B3SOIFDdum1Node = 0; if (here->B3SOIFDcbeNode > 0) CKTdltNNum(ckt, here->B3SOIFDcbeNode); here->B3SOIFDcbeNode = 0; if (here->B3SOIFDvcscvNode > 0) CKTdltNNum(ckt, here->B3SOIFDvcscvNode); here->B3SOIFDvcscvNode = 0; if (here->B3SOIFDvdscvNode > 0) CKTdltNNum(ckt, here->B3SOIFDvdscvNode); here->B3SOIFDvdscvNode = 0; if (here->B3SOIFDqgNode > 0) CKTdltNNum(ckt, here->B3SOIFDqgNode); here->B3SOIFDqgNode = 0; if (here->B3SOIFDqdNode > 0) CKTdltNNum(ckt, here->B3SOIFDqdNode); here->B3SOIFDqdNode = 0; if (here->B3SOIFDqeNode > 0) CKTdltNNum(ckt, here->B3SOIFDqeNode); here->B3SOIFDqeNode = 0; if (here->B3SOIFDqsubs2Node > 0) CKTdltNNum(ckt, here->B3SOIFDqsubs2Node); here->B3SOIFDqsubs2Node = 0; if (here->B3SOIFDqsubs1Node > 0) CKTdltNNum(ckt, here->B3SOIFDqsubs1Node); here->B3SOIFDqsubs1Node = 0; if (here->B3SOIFDqsub0Node > 0) CKTdltNNum(ckt, here->B3SOIFDqsub0Node); here->B3SOIFDqsub0Node = 0; if (here->B3SOIFDqaccNode > 0) CKTdltNNum(ckt, here->B3SOIFDqaccNode); here->B3SOIFDqaccNode = 0; if (here->B3SOIFDxcsatNode > 0) CKTdltNNum(ckt, here->B3SOIFDxcsatNode); here->B3SOIFDxcsatNode = 0; if (here->B3SOIFDvgsteffNode > 0) CKTdltNNum(ckt, here->B3SOIFDvgsteffNode); here->B3SOIFDvgsteffNode = 0; if (here->B3SOIFDvthNode > 0) CKTdltNNum(ckt, here->B3SOIFDvthNode); here->B3SOIFDvthNode = 0; if (here->B3SOIFDvbs0teffNode > 0) CKTdltNNum(ckt, here->B3SOIFDvbs0teffNode); here->B3SOIFDvbs0teffNode = 0; if (here->B3SOIFDgmeNode > 0) CKTdltNNum(ckt, here->B3SOIFDgmeNode); here->B3SOIFDgmeNode = 0; if (here->B3SOIFDgdsNode > 0) CKTdltNNum(ckt, here->B3SOIFDgdsNode); here->B3SOIFDgdsNode = 0; if (here->B3SOIFDgmbsNode > 0) CKTdltNNum(ckt, here->B3SOIFDgmbsNode); here->B3SOIFDgmbsNode = 0; if (here->B3SOIFDgmNode > 0) CKTdltNNum(ckt, here->B3SOIFDgmNode); here->B3SOIFDgmNode = 0; if (here->B3SOIFDqjdNode > 0) CKTdltNNum(ckt, here->B3SOIFDqjdNode); here->B3SOIFDqjdNode = 0; if (here->B3SOIFDqjsNode > 0) CKTdltNNum(ckt, here->B3SOIFDqjsNode); here->B3SOIFDqjsNode = 0; if (here->B3SOIFDqbfNode > 0) CKTdltNNum(ckt, here->B3SOIFDqbfNode); here->B3SOIFDqbfNode = 0; if (here->B3SOIFDqbNode > 0) CKTdltNNum(ckt, here->B3SOIFDqbNode); here->B3SOIFDqbNode = 0; if (here->B3SOIFDcbgNode > 0) CKTdltNNum(ckt, here->B3SOIFDcbgNode); here->B3SOIFDcbgNode = 0; if (here->B3SOIFDcbdNode > 0) CKTdltNNum(ckt, here->B3SOIFDcbdNode); here->B3SOIFDcbdNode = 0; if (here->B3SOIFDcbbNode > 0) CKTdltNNum(ckt, here->B3SOIFDcbbNode); here->B3SOIFDcbbNode = 0; if (here->B3SOIFDxcNode > 0) CKTdltNNum(ckt, here->B3SOIFDxcNode); here->B3SOIFDxcNode = 0; if (here->B3SOIFDvbseffNode > 0) CKTdltNNum(ckt, here->B3SOIFDvbseffNode); here->B3SOIFDvbseffNode = 0; if (here->B3SOIFDvbs0effNode > 0) CKTdltNNum(ckt, here->B3SOIFDvbs0effNode); here->B3SOIFDvbs0effNode = 0; if (here->B3SOIFDabeffNode > 0) CKTdltNNum(ckt, here->B3SOIFDabeffNode); here->B3SOIFDabeffNode = 0; if (here->B3SOIFDibpNode > 0) CKTdltNNum(ckt, here->B3SOIFDibpNode); here->B3SOIFDibpNode = 0; if (here->B3SOIFDitunNode > 0) CKTdltNNum(ckt, here->B3SOIFDitunNode); here->B3SOIFDitunNode = 0; if (here->B3SOIFDigidlNode > 0) CKTdltNNum(ckt, here->B3SOIFDigidlNode); here->B3SOIFDigidlNode = 0; if (here->B3SOIFDiiiNode > 0) CKTdltNNum(ckt, here->B3SOIFDiiiNode); here->B3SOIFDiiiNode = 0; if (here->B3SOIFDibdNode > 0) CKTdltNNum(ckt, here->B3SOIFDibdNode); here->B3SOIFDibdNode = 0; if (here->B3SOIFDibsNode > 0) CKTdltNNum(ckt, here->B3SOIFDibsNode); here->B3SOIFDibsNode = 0; if (here->B3SOIFDicNode > 0) CKTdltNNum(ckt, here->B3SOIFDicNode); here->B3SOIFDicNode = 0; if (here->B3SOIFDidsNode > 0) CKTdltNNum(ckt, here->B3SOIFDidsNode); here->B3SOIFDidsNode = 0; if (here->B3SOIFDvbsNode > 0) CKTdltNNum(ckt, here->B3SOIFDvbsNode); here->B3SOIFDvbsNode = 0; if (here->B3SOIFDtempNode > 0 && here->B3SOIFDtempNode != here->B3SOIFDtempNodeExt && here->B3SOIFDtempNode != here->B3SOIFDbNodeExt && here->B3SOIFDtempNode != here->B3SOIFDpNodeExt) CKTdltNNum(ckt, here->B3SOIFDtempNode); here->B3SOIFDtempNode = 0; if (here->B3SOIFDbNode > 0 && here->B3SOIFDbNode != here->B3SOIFDbNodeExt && here->B3SOIFDbNode != here->B3SOIFDpNodeExt) CKTdltNNum(ckt, here->B3SOIFDbNode); here->B3SOIFDbNode = 0; here->B3SOIFDpNode = 0; if (here->B3SOIFDsNodePrime > 0 && here->B3SOIFDsNodePrime != here->B3SOIFDsNode) CKTdltNNum(ckt, here->B3SOIFDsNodePrime); here->B3SOIFDsNodePrime = 0; if (here->B3SOIFDdNodePrime > 0 && here->B3SOIFDdNodePrime != here->B3SOIFDdNode) CKTdltNNum(ckt, here->B3SOIFDdNodePrime); here->B3SOIFDdNodePrime = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_fd/b3soifditf.h0000644000175000017500000000040013546075722023563 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung File: b3soifditf.h **********/ #ifndef DEV_B3SOIFD #define DEV_B3SOIFD #include "b3soifdext.h" SPICEdev *get_b3soifd_info (void); #endif tmpk8ny_4pz/src/spicelib/devices/bsim3soi_fd/b3soifdmask.c0000644000175000017500000012105413546075722023740 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: Weidong Liu and Pin Su Feb 1999 Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soifdmask.c 98/5/01 Modified by Wei Jin 99/9/27 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMFD2.1 release */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "b3soifddef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIFDmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { B3SOIFDmodel *model = (B3SOIFDmodel *)inst; NG_IGNORE(ckt); switch(which) { case B3SOIFD_MOD_MOBMOD: value->iValue = model->B3SOIFDmobMod; return(OK); case B3SOIFD_MOD_PARAMCHK: value->iValue = model->B3SOIFDparamChk; return(OK); case B3SOIFD_MOD_BINUNIT: value->iValue = model->B3SOIFDbinUnit; return(OK); case B3SOIFD_MOD_CAPMOD: value->iValue = model->B3SOIFDcapMod; return(OK); case B3SOIFD_MOD_SHMOD: value->iValue = model->B3SOIFDshMod; return(OK); case B3SOIFD_MOD_NOIMOD: value->iValue = model->B3SOIFDnoiMod; return(OK); case B3SOIFD_MOD_VERSION : value->rValue = model->B3SOIFDversion; return(OK); case B3SOIFD_MOD_TOX : value->rValue = model->B3SOIFDtox; return(OK); case B3SOIFD_MOD_CDSC : value->rValue = model->B3SOIFDcdsc; return(OK); case B3SOIFD_MOD_CDSCB : value->rValue = model->B3SOIFDcdscb; return(OK); case B3SOIFD_MOD_CDSCD : value->rValue = model->B3SOIFDcdscd; return(OK); case B3SOIFD_MOD_CIT : value->rValue = model->B3SOIFDcit; return(OK); case B3SOIFD_MOD_NFACTOR : value->rValue = model->B3SOIFDnfactor; return(OK); case B3SOIFD_MOD_VSAT: value->rValue = model->B3SOIFDvsat; return(OK); case B3SOIFD_MOD_AT: value->rValue = model->B3SOIFDat; return(OK); case B3SOIFD_MOD_A0: value->rValue = model->B3SOIFDa0; return(OK); case B3SOIFD_MOD_AGS: value->rValue = model->B3SOIFDags; return(OK); case B3SOIFD_MOD_A1: value->rValue = model->B3SOIFDa1; return(OK); case B3SOIFD_MOD_A2: value->rValue = model->B3SOIFDa2; return(OK); case B3SOIFD_MOD_KETA: value->rValue = model->B3SOIFDketa; return(OK); case B3SOIFD_MOD_NSUB: value->rValue = model->B3SOIFDnsub; return(OK); case B3SOIFD_MOD_NPEAK: value->rValue = model->B3SOIFDnpeak; return(OK); case B3SOIFD_MOD_NGATE: value->rValue = model->B3SOIFDngate; return(OK); case B3SOIFD_MOD_GAMMA1: value->rValue = model->B3SOIFDgamma1; return(OK); case B3SOIFD_MOD_GAMMA2: value->rValue = model->B3SOIFDgamma2; return(OK); case B3SOIFD_MOD_VBX: value->rValue = model->B3SOIFDvbx; return(OK); case B3SOIFD_MOD_VBM: value->rValue = model->B3SOIFDvbm; return(OK); case B3SOIFD_MOD_XT: value->rValue = model->B3SOIFDxt; return(OK); case B3SOIFD_MOD_K1: value->rValue = model->B3SOIFDk1; return(OK); case B3SOIFD_MOD_KT1: value->rValue = model->B3SOIFDkt1; return(OK); case B3SOIFD_MOD_KT1L: value->rValue = model->B3SOIFDkt1l; return(OK); case B3SOIFD_MOD_KT2 : value->rValue = model->B3SOIFDkt2; return(OK); case B3SOIFD_MOD_K2 : value->rValue = model->B3SOIFDk2; return(OK); case B3SOIFD_MOD_K3: value->rValue = model->B3SOIFDk3; return(OK); case B3SOIFD_MOD_K3B: value->rValue = model->B3SOIFDk3b; return(OK); case B3SOIFD_MOD_W0: value->rValue = model->B3SOIFDw0; return(OK); case B3SOIFD_MOD_NLX: value->rValue = model->B3SOIFDnlx; return(OK); case B3SOIFD_MOD_DVT0 : value->rValue = model->B3SOIFDdvt0; return(OK); case B3SOIFD_MOD_DVT1 : value->rValue = model->B3SOIFDdvt1; return(OK); case B3SOIFD_MOD_DVT2 : value->rValue = model->B3SOIFDdvt2; return(OK); case B3SOIFD_MOD_DVT0W : value->rValue = model->B3SOIFDdvt0w; return(OK); case B3SOIFD_MOD_DVT1W : value->rValue = model->B3SOIFDdvt1w; return(OK); case B3SOIFD_MOD_DVT2W : value->rValue = model->B3SOIFDdvt2w; return(OK); case B3SOIFD_MOD_DROUT : value->rValue = model->B3SOIFDdrout; return(OK); case B3SOIFD_MOD_DSUB : value->rValue = model->B3SOIFDdsub; return(OK); case B3SOIFD_MOD_VTH0: value->rValue = model->B3SOIFDvth0; return(OK); case B3SOIFD_MOD_UA: value->rValue = model->B3SOIFDua; return(OK); case B3SOIFD_MOD_UA1: value->rValue = model->B3SOIFDua1; return(OK); case B3SOIFD_MOD_UB: value->rValue = model->B3SOIFDub; return(OK); case B3SOIFD_MOD_UB1: value->rValue = model->B3SOIFDub1; return(OK); case B3SOIFD_MOD_UC: value->rValue = model->B3SOIFDuc; return(OK); case B3SOIFD_MOD_UC1: value->rValue = model->B3SOIFDuc1; return(OK); case B3SOIFD_MOD_U0: value->rValue = model->B3SOIFDu0; return(OK); case B3SOIFD_MOD_UTE: value->rValue = model->B3SOIFDute; return(OK); case B3SOIFD_MOD_VOFF: value->rValue = model->B3SOIFDvoff; return(OK); case B3SOIFD_MOD_DELTA: value->rValue = model->B3SOIFDdelta; return(OK); case B3SOIFD_MOD_RDSW: value->rValue = model->B3SOIFDrdsw; return(OK); case B3SOIFD_MOD_PRWG: value->rValue = model->B3SOIFDprwg; return(OK); case B3SOIFD_MOD_PRWB: value->rValue = model->B3SOIFDprwb; return(OK); case B3SOIFD_MOD_PRT: value->rValue = model->B3SOIFDprt; return(OK); case B3SOIFD_MOD_ETA0: value->rValue = model->B3SOIFDeta0; return(OK); case B3SOIFD_MOD_ETAB: value->rValue = model->B3SOIFDetab; return(OK); case B3SOIFD_MOD_PCLM: value->rValue = model->B3SOIFDpclm; return(OK); case B3SOIFD_MOD_PDIBL1: value->rValue = model->B3SOIFDpdibl1; return(OK); case B3SOIFD_MOD_PDIBL2: value->rValue = model->B3SOIFDpdibl2; return(OK); case B3SOIFD_MOD_PDIBLB: value->rValue = model->B3SOIFDpdiblb; return(OK); case B3SOIFD_MOD_PVAG: value->rValue = model->B3SOIFDpvag; return(OK); case B3SOIFD_MOD_WR: value->rValue = model->B3SOIFDwr; return(OK); case B3SOIFD_MOD_DWG: value->rValue = model->B3SOIFDdwg; return(OK); case B3SOIFD_MOD_DWB: value->rValue = model->B3SOIFDdwb; return(OK); case B3SOIFD_MOD_B0: value->rValue = model->B3SOIFDb0; return(OK); case B3SOIFD_MOD_B1: value->rValue = model->B3SOIFDb1; return(OK); case B3SOIFD_MOD_ALPHA0: value->rValue = model->B3SOIFDalpha0; return(OK); case B3SOIFD_MOD_ALPHA1: value->rValue = model->B3SOIFDalpha1; return(OK); case B3SOIFD_MOD_BETA0: value->rValue = model->B3SOIFDbeta0; return(OK); case B3SOIFD_MOD_CGSL: value->rValue = model->B3SOIFDcgsl; return(OK); case B3SOIFD_MOD_CGDL: value->rValue = model->B3SOIFDcgdl; return(OK); case B3SOIFD_MOD_CKAPPA: value->rValue = model->B3SOIFDckappa; return(OK); case B3SOIFD_MOD_CF: value->rValue = model->B3SOIFDcf; return(OK); case B3SOIFD_MOD_CLC: value->rValue = model->B3SOIFDclc; return(OK); case B3SOIFD_MOD_CLE: value->rValue = model->B3SOIFDcle; return(OK); case B3SOIFD_MOD_DWC: value->rValue = model->B3SOIFDdwc; return(OK); case B3SOIFD_MOD_DLC: value->rValue = model->B3SOIFDdlc; return(OK); case B3SOIFD_MOD_TBOX: value->rValue = model->B3SOIFDtbox; return(OK); case B3SOIFD_MOD_TSI: value->rValue = model->B3SOIFDtsi; return(OK); case B3SOIFD_MOD_KB1: value->rValue = model->B3SOIFDkb1; return(OK); case B3SOIFD_MOD_KB3: value->rValue = model->B3SOIFDkb3; return(OK); case B3SOIFD_MOD_DVBD0: value->rValue = model->B3SOIFDdvbd0; return(OK); case B3SOIFD_MOD_DVBD1: value->rValue = model->B3SOIFDdvbd1; return(OK); case B3SOIFD_MOD_DELP: value->rValue = model->B3SOIFDdelp; return(OK); case B3SOIFD_MOD_VBSA: value->rValue = model->B3SOIFDvbsa; return(OK); case B3SOIFD_MOD_RBODY: value->rValue = model->B3SOIFDrbody; return(OK); case B3SOIFD_MOD_RBSH: value->rValue = model->B3SOIFDrbsh; return(OK); case B3SOIFD_MOD_ADICE0: value->rValue = model->B3SOIFDadice0; return(OK); case B3SOIFD_MOD_ABP: value->rValue = model->B3SOIFDabp; return(OK); case B3SOIFD_MOD_MXC: value->rValue = model->B3SOIFDmxc; return(OK); case B3SOIFD_MOD_RTH0: value->rValue = model->B3SOIFDrth0; return(OK); case B3SOIFD_MOD_CTH0: value->rValue = model->B3SOIFDcth0; return(OK); case B3SOIFD_MOD_AII: value->rValue = model->B3SOIFDaii; return(OK); case B3SOIFD_MOD_BII: value->rValue = model->B3SOIFDbii; return(OK); case B3SOIFD_MOD_CII: value->rValue = model->B3SOIFDcii; return(OK); case B3SOIFD_MOD_DII: value->rValue = model->B3SOIFDdii; return(OK); case B3SOIFD_MOD_NDIODE: value->rValue = model->B3SOIFDndiode; return(OK); case B3SOIFD_MOD_NTUN: value->rValue = model->B3SOIFDntun; return(OK); case B3SOIFD_MOD_ISBJT: value->rValue = model->B3SOIFDisbjt; return(OK); case B3SOIFD_MOD_ISDIF: value->rValue = model->B3SOIFDisdif; return(OK); case B3SOIFD_MOD_ISREC: value->rValue = model->B3SOIFDisrec; return(OK); case B3SOIFD_MOD_ISTUN: value->rValue = model->B3SOIFDistun; return(OK); case B3SOIFD_MOD_XBJT: value->rValue = model->B3SOIFDxbjt; return(OK); case B3SOIFD_MOD_XREC: value->rValue = model->B3SOIFDxrec; return(OK); case B3SOIFD_MOD_XTUN: value->rValue = model->B3SOIFDxtun; return(OK); case B3SOIFD_MOD_EDL: value->rValue = model->B3SOIFDedl; return(OK); case B3SOIFD_MOD_KBJT1: value->rValue = model->B3SOIFDkbjt1; return(OK); case B3SOIFD_MOD_TT: value->rValue = model->B3SOIFDtt; return(OK); case B3SOIFD_MOD_VSDTH: value->rValue = model->B3SOIFDvsdth; return(OK); case B3SOIFD_MOD_VSDFB: value->rValue = model->B3SOIFDvsdfb; return(OK); case B3SOIFD_MOD_CSDMIN: value->rValue = model->B3SOIFDcsdmin; return(OK); case B3SOIFD_MOD_ASD: value->rValue = model->B3SOIFDasd; return(OK); case B3SOIFD_MOD_TNOM : value->rValue = model->B3SOIFDtnom; return(OK); case B3SOIFD_MOD_CGSO: value->rValue = model->B3SOIFDcgso; return(OK); case B3SOIFD_MOD_CGDO: value->rValue = model->B3SOIFDcgdo; return(OK); case B3SOIFD_MOD_CGEO: value->rValue = model->B3SOIFDcgeo; return(OK); case B3SOIFD_MOD_XPART: value->rValue = model->B3SOIFDxpart; return(OK); case B3SOIFD_MOD_RSH: value->rValue = model->B3SOIFDsheetResistance; return(OK); case B3SOIFD_MOD_PBSWG: value->rValue = model->B3SOIFDGatesidewallJctPotential; return(OK); case B3SOIFD_MOD_MJSWG: value->rValue = model->B3SOIFDbodyJctGateSideGradingCoeff; return(OK); case B3SOIFD_MOD_CJSWG: value->rValue = model->B3SOIFDunitLengthGateSidewallJctCap; return(OK); case B3SOIFD_MOD_CSDESW: value->rValue = model->B3SOIFDcsdesw; return(OK); case B3SOIFD_MOD_LINT: value->rValue = model->B3SOIFDLint; return(OK); case B3SOIFD_MOD_LL: value->rValue = model->B3SOIFDLl; return(OK); case B3SOIFD_MOD_LLN: value->rValue = model->B3SOIFDLln; return(OK); case B3SOIFD_MOD_LW: value->rValue = model->B3SOIFDLw; return(OK); case B3SOIFD_MOD_LWN: value->rValue = model->B3SOIFDLwn; return(OK); case B3SOIFD_MOD_LWL: value->rValue = model->B3SOIFDLwl; return(OK); case B3SOIFD_MOD_WINT: value->rValue = model->B3SOIFDWint; return(OK); case B3SOIFD_MOD_WL: value->rValue = model->B3SOIFDWl; return(OK); case B3SOIFD_MOD_WLN: value->rValue = model->B3SOIFDWln; return(OK); case B3SOIFD_MOD_WW: value->rValue = model->B3SOIFDWw; return(OK); case B3SOIFD_MOD_WWN: value->rValue = model->B3SOIFDWwn; return(OK); case B3SOIFD_MOD_WWL: value->rValue = model->B3SOIFDWwl; return(OK); case B3SOIFD_MOD_NOIA: value->rValue = model->B3SOIFDoxideTrapDensityA; return(OK); case B3SOIFD_MOD_NOIB: value->rValue = model->B3SOIFDoxideTrapDensityB; return(OK); case B3SOIFD_MOD_NOIC: value->rValue = model->B3SOIFDoxideTrapDensityC; return(OK); case B3SOIFD_MOD_NOIF: value->rValue = model->B3SOIFDnoif; return(OK); case B3SOIFD_MOD_EM: value->rValue = model->B3SOIFDem; return(OK); case B3SOIFD_MOD_EF: value->rValue = model->B3SOIFDef; return(OK); case B3SOIFD_MOD_AF: value->rValue = model->B3SOIFDaf; return(OK); case B3SOIFD_MOD_KF: value->rValue = model->B3SOIFDkf; return(OK); /* Added for binning - START */ /* Length Dependence */ case B3SOIFD_MOD_LNPEAK: value->rValue = model->B3SOIFDlnpeak; return(OK); case B3SOIFD_MOD_LNSUB: value->rValue = model->B3SOIFDlnsub; return(OK); case B3SOIFD_MOD_LNGATE: value->rValue = model->B3SOIFDlngate; return(OK); case B3SOIFD_MOD_LVTH0: value->rValue = model->B3SOIFDlvth0; return(OK); case B3SOIFD_MOD_LK1: value->rValue = model->B3SOIFDlk1; return(OK); case B3SOIFD_MOD_LK2: value->rValue = model->B3SOIFDlk2; return(OK); case B3SOIFD_MOD_LK3: value->rValue = model->B3SOIFDlk3; return(OK); case B3SOIFD_MOD_LK3B: value->rValue = model->B3SOIFDlk3b; return(OK); case B3SOIFD_MOD_LVBSA: value->rValue = model->B3SOIFDlvbsa; return(OK); case B3SOIFD_MOD_LDELP: value->rValue = model->B3SOIFDldelp; return(OK); case B3SOIFD_MOD_LKB1: value->rValue = model->B3SOIFDlkb1; return(OK); case B3SOIFD_MOD_LKB3: value->rValue = model->B3SOIFDlkb3; return(OK); case B3SOIFD_MOD_LDVBD0: value->rValue = model->B3SOIFDdvbd0; return(OK); case B3SOIFD_MOD_LDVBD1: value->rValue = model->B3SOIFDdvbd1; return(OK); case B3SOIFD_MOD_LW0: value->rValue = model->B3SOIFDlw0; return(OK); case B3SOIFD_MOD_LNLX: value->rValue = model->B3SOIFDlnlx; return(OK); case B3SOIFD_MOD_LDVT0 : value->rValue = model->B3SOIFDldvt0; return(OK); case B3SOIFD_MOD_LDVT1 : value->rValue = model->B3SOIFDldvt1; return(OK); case B3SOIFD_MOD_LDVT2 : value->rValue = model->B3SOIFDldvt2; return(OK); case B3SOIFD_MOD_LDVT0W : value->rValue = model->B3SOIFDldvt0w; return(OK); case B3SOIFD_MOD_LDVT1W : value->rValue = model->B3SOIFDldvt1w; return(OK); case B3SOIFD_MOD_LDVT2W : value->rValue = model->B3SOIFDldvt2w; return(OK); case B3SOIFD_MOD_LU0: value->rValue = model->B3SOIFDlu0; return(OK); case B3SOIFD_MOD_LUA: value->rValue = model->B3SOIFDlua; return(OK); case B3SOIFD_MOD_LUB: value->rValue = model->B3SOIFDlub; return(OK); case B3SOIFD_MOD_LUC: value->rValue = model->B3SOIFDluc; return(OK); case B3SOIFD_MOD_LVSAT: value->rValue = model->B3SOIFDlvsat; return(OK); case B3SOIFD_MOD_LA0: value->rValue = model->B3SOIFDla0; return(OK); case B3SOIFD_MOD_LAGS: value->rValue = model->B3SOIFDlags; return(OK); case B3SOIFD_MOD_LB0: value->rValue = model->B3SOIFDlb0; return(OK); case B3SOIFD_MOD_LB1: value->rValue = model->B3SOIFDlb1; return(OK); case B3SOIFD_MOD_LKETA: value->rValue = model->B3SOIFDlketa; return(OK); case B3SOIFD_MOD_LABP: value->rValue = model->B3SOIFDlabp; return(OK); case B3SOIFD_MOD_LMXC: value->rValue = model->B3SOIFDlmxc; return(OK); case B3SOIFD_MOD_LADICE0: value->rValue = model->B3SOIFDladice0; return(OK); case B3SOIFD_MOD_LA1: value->rValue = model->B3SOIFDla1; return(OK); case B3SOIFD_MOD_LA2: value->rValue = model->B3SOIFDla2; return(OK); case B3SOIFD_MOD_LRDSW: value->rValue = model->B3SOIFDlrdsw; return(OK); case B3SOIFD_MOD_LPRWB: value->rValue = model->B3SOIFDlprwb; return(OK); case B3SOIFD_MOD_LPRWG: value->rValue = model->B3SOIFDlprwg; return(OK); case B3SOIFD_MOD_LWR: value->rValue = model->B3SOIFDlwr; return(OK); case B3SOIFD_MOD_LNFACTOR : value->rValue = model->B3SOIFDlnfactor; return(OK); case B3SOIFD_MOD_LDWG: value->rValue = model->B3SOIFDldwg; return(OK); case B3SOIFD_MOD_LDWB: value->rValue = model->B3SOIFDldwb; return(OK); case B3SOIFD_MOD_LVOFF: value->rValue = model->B3SOIFDlvoff; return(OK); case B3SOIFD_MOD_LETA0: value->rValue = model->B3SOIFDleta0; return(OK); case B3SOIFD_MOD_LETAB: value->rValue = model->B3SOIFDletab; return(OK); case B3SOIFD_MOD_LDSUB : value->rValue = model->B3SOIFDldsub; return(OK); case B3SOIFD_MOD_LCIT : value->rValue = model->B3SOIFDlcit; return(OK); case B3SOIFD_MOD_LCDSC : value->rValue = model->B3SOIFDlcdsc; return(OK); case B3SOIFD_MOD_LCDSCB : value->rValue = model->B3SOIFDlcdscb; return(OK); case B3SOIFD_MOD_LCDSCD : value->rValue = model->B3SOIFDlcdscd; return(OK); case B3SOIFD_MOD_LPCLM: value->rValue = model->B3SOIFDlpclm; return(OK); case B3SOIFD_MOD_LPDIBL1: value->rValue = model->B3SOIFDlpdibl1; return(OK); case B3SOIFD_MOD_LPDIBL2: value->rValue = model->B3SOIFDlpdibl2; return(OK); case B3SOIFD_MOD_LPDIBLB: value->rValue = model->B3SOIFDlpdiblb; return(OK); case B3SOIFD_MOD_LDROUT : value->rValue = model->B3SOIFDldrout; return(OK); case B3SOIFD_MOD_LPVAG: value->rValue = model->B3SOIFDlpvag; return(OK); case B3SOIFD_MOD_LDELTA: value->rValue = model->B3SOIFDldelta; return(OK); case B3SOIFD_MOD_LAII: value->rValue = model->B3SOIFDlaii; return(OK); case B3SOIFD_MOD_LBII: value->rValue = model->B3SOIFDlbii; return(OK); case B3SOIFD_MOD_LCII: value->rValue = model->B3SOIFDlcii; return(OK); case B3SOIFD_MOD_LDII: value->rValue = model->B3SOIFDldii; return(OK); case B3SOIFD_MOD_LALPHA0: value->rValue = model->B3SOIFDlalpha0; return(OK); case B3SOIFD_MOD_LALPHA1: value->rValue = model->B3SOIFDlalpha1; return(OK); case B3SOIFD_MOD_LBETA0: value->rValue = model->B3SOIFDlbeta0; return(OK); case B3SOIFD_MOD_LAGIDL: value->rValue = model->B3SOIFDlagidl; return(OK); case B3SOIFD_MOD_LBGIDL: value->rValue = model->B3SOIFDlbgidl; return(OK); case B3SOIFD_MOD_LNGIDL: value->rValue = model->B3SOIFDlngidl; return(OK); case B3SOIFD_MOD_LNTUN: value->rValue = model->B3SOIFDlntun; return(OK); case B3SOIFD_MOD_LNDIODE: value->rValue = model->B3SOIFDlndiode; return(OK); case B3SOIFD_MOD_LISBJT: value->rValue = model->B3SOIFDlisbjt; return(OK); case B3SOIFD_MOD_LISDIF: value->rValue = model->B3SOIFDlisdif; return(OK); case B3SOIFD_MOD_LISREC: value->rValue = model->B3SOIFDlisrec; return(OK); case B3SOIFD_MOD_LISTUN: value->rValue = model->B3SOIFDlistun; return(OK); case B3SOIFD_MOD_LEDL: value->rValue = model->B3SOIFDledl; return(OK); case B3SOIFD_MOD_LKBJT1: value->rValue = model->B3SOIFDlkbjt1; return(OK); /* CV Model */ case B3SOIFD_MOD_LVSDFB: value->rValue = model->B3SOIFDlvsdfb; return(OK); case B3SOIFD_MOD_LVSDTH: value->rValue = model->B3SOIFDlvsdth; return(OK); /* Width Dependence */ case B3SOIFD_MOD_WNPEAK: value->rValue = model->B3SOIFDwnpeak; return(OK); case B3SOIFD_MOD_WNSUB: value->rValue = model->B3SOIFDwnsub; return(OK); case B3SOIFD_MOD_WNGATE: value->rValue = model->B3SOIFDwngate; return(OK); case B3SOIFD_MOD_WVTH0: value->rValue = model->B3SOIFDwvth0; return(OK); case B3SOIFD_MOD_WK1: value->rValue = model->B3SOIFDwk1; return(OK); case B3SOIFD_MOD_WK2: value->rValue = model->B3SOIFDwk2; return(OK); case B3SOIFD_MOD_WK3: value->rValue = model->B3SOIFDwk3; return(OK); case B3SOIFD_MOD_WK3B: value->rValue = model->B3SOIFDwk3b; return(OK); case B3SOIFD_MOD_WVBSA: value->rValue = model->B3SOIFDwvbsa; return(OK); case B3SOIFD_MOD_WDELP: value->rValue = model->B3SOIFDwdelp; return(OK); case B3SOIFD_MOD_WKB1: value->rValue = model->B3SOIFDwkb1; return(OK); case B3SOIFD_MOD_WKB3: value->rValue = model->B3SOIFDwkb3; return(OK); case B3SOIFD_MOD_WDVBD0: value->rValue = model->B3SOIFDdvbd0; return(OK); case B3SOIFD_MOD_WDVBD1: value->rValue = model->B3SOIFDdvbd1; return(OK); case B3SOIFD_MOD_WW0: value->rValue = model->B3SOIFDww0; return(OK); case B3SOIFD_MOD_WNLX: value->rValue = model->B3SOIFDwnlx; return(OK); case B3SOIFD_MOD_WDVT0 : value->rValue = model->B3SOIFDwdvt0; return(OK); case B3SOIFD_MOD_WDVT1 : value->rValue = model->B3SOIFDwdvt1; return(OK); case B3SOIFD_MOD_WDVT2 : value->rValue = model->B3SOIFDwdvt2; return(OK); case B3SOIFD_MOD_WDVT0W : value->rValue = model->B3SOIFDwdvt0w; return(OK); case B3SOIFD_MOD_WDVT1W : value->rValue = model->B3SOIFDwdvt1w; return(OK); case B3SOIFD_MOD_WDVT2W : value->rValue = model->B3SOIFDwdvt2w; return(OK); case B3SOIFD_MOD_WU0: value->rValue = model->B3SOIFDwu0; return(OK); case B3SOIFD_MOD_WUA: value->rValue = model->B3SOIFDwua; return(OK); case B3SOIFD_MOD_WUB: value->rValue = model->B3SOIFDwub; return(OK); case B3SOIFD_MOD_WUC: value->rValue = model->B3SOIFDwuc; return(OK); case B3SOIFD_MOD_WVSAT: value->rValue = model->B3SOIFDwvsat; return(OK); case B3SOIFD_MOD_WA0: value->rValue = model->B3SOIFDwa0; return(OK); case B3SOIFD_MOD_WAGS: value->rValue = model->B3SOIFDwags; return(OK); case B3SOIFD_MOD_WB0: value->rValue = model->B3SOIFDwb0; return(OK); case B3SOIFD_MOD_WB1: value->rValue = model->B3SOIFDwb1; return(OK); case B3SOIFD_MOD_WKETA: value->rValue = model->B3SOIFDwketa; return(OK); case B3SOIFD_MOD_WABP: value->rValue = model->B3SOIFDwabp; return(OK); case B3SOIFD_MOD_WMXC: value->rValue = model->B3SOIFDwmxc; return(OK); case B3SOIFD_MOD_WADICE0: value->rValue = model->B3SOIFDwadice0; return(OK); case B3SOIFD_MOD_WA1: value->rValue = model->B3SOIFDwa1; return(OK); case B3SOIFD_MOD_WA2: value->rValue = model->B3SOIFDwa2; return(OK); case B3SOIFD_MOD_WRDSW: value->rValue = model->B3SOIFDwrdsw; return(OK); case B3SOIFD_MOD_WPRWB: value->rValue = model->B3SOIFDwprwb; return(OK); case B3SOIFD_MOD_WPRWG: value->rValue = model->B3SOIFDwprwg; return(OK); case B3SOIFD_MOD_WWR: value->rValue = model->B3SOIFDwwr; return(OK); case B3SOIFD_MOD_WNFACTOR : value->rValue = model->B3SOIFDwnfactor; return(OK); case B3SOIFD_MOD_WDWG: value->rValue = model->B3SOIFDwdwg; return(OK); case B3SOIFD_MOD_WDWB: value->rValue = model->B3SOIFDwdwb; return(OK); case B3SOIFD_MOD_WVOFF: value->rValue = model->B3SOIFDwvoff; return(OK); case B3SOIFD_MOD_WETA0: value->rValue = model->B3SOIFDweta0; return(OK); case B3SOIFD_MOD_WETAB: value->rValue = model->B3SOIFDwetab; return(OK); case B3SOIFD_MOD_WDSUB : value->rValue = model->B3SOIFDwdsub; return(OK); case B3SOIFD_MOD_WCIT : value->rValue = model->B3SOIFDwcit; return(OK); case B3SOIFD_MOD_WCDSC : value->rValue = model->B3SOIFDwcdsc; return(OK); case B3SOIFD_MOD_WCDSCB : value->rValue = model->B3SOIFDwcdscb; return(OK); case B3SOIFD_MOD_WCDSCD : value->rValue = model->B3SOIFDwcdscd; return(OK); case B3SOIFD_MOD_WPCLM: value->rValue = model->B3SOIFDwpclm; return(OK); case B3SOIFD_MOD_WPDIBL1: value->rValue = model->B3SOIFDwpdibl1; return(OK); case B3SOIFD_MOD_WPDIBL2: value->rValue = model->B3SOIFDwpdibl2; return(OK); case B3SOIFD_MOD_WPDIBLB: value->rValue = model->B3SOIFDwpdiblb; return(OK); case B3SOIFD_MOD_WDROUT : value->rValue = model->B3SOIFDwdrout; return(OK); case B3SOIFD_MOD_WPVAG: value->rValue = model->B3SOIFDwpvag; return(OK); case B3SOIFD_MOD_WDELTA: value->rValue = model->B3SOIFDwdelta; return(OK); case B3SOIFD_MOD_WAII: value->rValue = model->B3SOIFDwaii; return(OK); case B3SOIFD_MOD_WBII: value->rValue = model->B3SOIFDwbii; return(OK); case B3SOIFD_MOD_WCII: value->rValue = model->B3SOIFDwcii; return(OK); case B3SOIFD_MOD_WDII: value->rValue = model->B3SOIFDwdii; return(OK); case B3SOIFD_MOD_WALPHA0: value->rValue = model->B3SOIFDwalpha0; return(OK); case B3SOIFD_MOD_WALPHA1: value->rValue = model->B3SOIFDwalpha1; return(OK); case B3SOIFD_MOD_WBETA0: value->rValue = model->B3SOIFDwbeta0; return(OK); case B3SOIFD_MOD_WAGIDL: value->rValue = model->B3SOIFDwagidl; return(OK); case B3SOIFD_MOD_WBGIDL: value->rValue = model->B3SOIFDwbgidl; return(OK); case B3SOIFD_MOD_WNGIDL: value->rValue = model->B3SOIFDwngidl; return(OK); case B3SOIFD_MOD_WNTUN: value->rValue = model->B3SOIFDwntun; return(OK); case B3SOIFD_MOD_WNDIODE: value->rValue = model->B3SOIFDwndiode; return(OK); case B3SOIFD_MOD_WISBJT: value->rValue = model->B3SOIFDwisbjt; return(OK); case B3SOIFD_MOD_WISDIF: value->rValue = model->B3SOIFDwisdif; return(OK); case B3SOIFD_MOD_WISREC: value->rValue = model->B3SOIFDwisrec; return(OK); case B3SOIFD_MOD_WISTUN: value->rValue = model->B3SOIFDwistun; return(OK); case B3SOIFD_MOD_WEDL: value->rValue = model->B3SOIFDwedl; return(OK); case B3SOIFD_MOD_WKBJT1: value->rValue = model->B3SOIFDwkbjt1; return(OK); /* CV Model */ case B3SOIFD_MOD_WVSDFB: value->rValue = model->B3SOIFDwvsdfb; return(OK); case B3SOIFD_MOD_WVSDTH: value->rValue = model->B3SOIFDwvsdth; return(OK); /* Cross-term Dependence */ case B3SOIFD_MOD_PNPEAK: value->rValue = model->B3SOIFDpnpeak; return(OK); case B3SOIFD_MOD_PNSUB: value->rValue = model->B3SOIFDpnsub; return(OK); case B3SOIFD_MOD_PNGATE: value->rValue = model->B3SOIFDpngate; return(OK); case B3SOIFD_MOD_PVTH0: value->rValue = model->B3SOIFDpvth0; return(OK); case B3SOIFD_MOD_PK1: value->rValue = model->B3SOIFDpk1; return(OK); case B3SOIFD_MOD_PK2: value->rValue = model->B3SOIFDpk2; return(OK); case B3SOIFD_MOD_PK3: value->rValue = model->B3SOIFDpk3; return(OK); case B3SOIFD_MOD_PK3B: value->rValue = model->B3SOIFDpk3b; return(OK); case B3SOIFD_MOD_PVBSA: value->rValue = model->B3SOIFDpvbsa; return(OK); case B3SOIFD_MOD_PDELP: value->rValue = model->B3SOIFDpdelp; return(OK); case B3SOIFD_MOD_PKB1: value->rValue = model->B3SOIFDpkb1; return(OK); case B3SOIFD_MOD_PKB3: value->rValue = model->B3SOIFDpkb3; return(OK); case B3SOIFD_MOD_PDVBD0: value->rValue = model->B3SOIFDdvbd0; return(OK); case B3SOIFD_MOD_PDVBD1: value->rValue = model->B3SOIFDdvbd1; return(OK); case B3SOIFD_MOD_PW0: value->rValue = model->B3SOIFDpw0; return(OK); case B3SOIFD_MOD_PNLX: value->rValue = model->B3SOIFDpnlx; return(OK); case B3SOIFD_MOD_PDVT0 : value->rValue = model->B3SOIFDpdvt0; return(OK); case B3SOIFD_MOD_PDVT1 : value->rValue = model->B3SOIFDpdvt1; return(OK); case B3SOIFD_MOD_PDVT2 : value->rValue = model->B3SOIFDpdvt2; return(OK); case B3SOIFD_MOD_PDVT0W : value->rValue = model->B3SOIFDpdvt0w; return(OK); case B3SOIFD_MOD_PDVT1W : value->rValue = model->B3SOIFDpdvt1w; return(OK); case B3SOIFD_MOD_PDVT2W : value->rValue = model->B3SOIFDpdvt2w; return(OK); case B3SOIFD_MOD_PU0: value->rValue = model->B3SOIFDpu0; return(OK); case B3SOIFD_MOD_PUA: value->rValue = model->B3SOIFDpua; return(OK); case B3SOIFD_MOD_PUB: value->rValue = model->B3SOIFDpub; return(OK); case B3SOIFD_MOD_PUC: value->rValue = model->B3SOIFDpuc; return(OK); case B3SOIFD_MOD_PVSAT: value->rValue = model->B3SOIFDpvsat; return(OK); case B3SOIFD_MOD_PA0: value->rValue = model->B3SOIFDpa0; return(OK); case B3SOIFD_MOD_PAGS: value->rValue = model->B3SOIFDpags; return(OK); case B3SOIFD_MOD_PB0: value->rValue = model->B3SOIFDpb0; return(OK); case B3SOIFD_MOD_PB1: value->rValue = model->B3SOIFDpb1; return(OK); case B3SOIFD_MOD_PKETA: value->rValue = model->B3SOIFDpketa; return(OK); case B3SOIFD_MOD_PABP: value->rValue = model->B3SOIFDpabp; return(OK); case B3SOIFD_MOD_PMXC: value->rValue = model->B3SOIFDpmxc; return(OK); case B3SOIFD_MOD_PADICE0: value->rValue = model->B3SOIFDpadice0; return(OK); case B3SOIFD_MOD_PA1: value->rValue = model->B3SOIFDpa1; return(OK); case B3SOIFD_MOD_PA2: value->rValue = model->B3SOIFDpa2; return(OK); case B3SOIFD_MOD_PRDSW: value->rValue = model->B3SOIFDprdsw; return(OK); case B3SOIFD_MOD_PPRWB: value->rValue = model->B3SOIFDpprwb; return(OK); case B3SOIFD_MOD_PPRWG: value->rValue = model->B3SOIFDpprwg; return(OK); case B3SOIFD_MOD_PWR: value->rValue = model->B3SOIFDpwr; return(OK); case B3SOIFD_MOD_PNFACTOR : value->rValue = model->B3SOIFDpnfactor; return(OK); case B3SOIFD_MOD_PDWG: value->rValue = model->B3SOIFDpdwg; return(OK); case B3SOIFD_MOD_PDWB: value->rValue = model->B3SOIFDpdwb; return(OK); case B3SOIFD_MOD_PVOFF: value->rValue = model->B3SOIFDpvoff; return(OK); case B3SOIFD_MOD_PETA0: value->rValue = model->B3SOIFDpeta0; return(OK); case B3SOIFD_MOD_PETAB: value->rValue = model->B3SOIFDpetab; return(OK); case B3SOIFD_MOD_PDSUB : value->rValue = model->B3SOIFDpdsub; return(OK); case B3SOIFD_MOD_PCIT : value->rValue = model->B3SOIFDpcit; return(OK); case B3SOIFD_MOD_PCDSC : value->rValue = model->B3SOIFDpcdsc; return(OK); case B3SOIFD_MOD_PCDSCB : value->rValue = model->B3SOIFDpcdscb; return(OK); case B3SOIFD_MOD_PCDSCD : value->rValue = model->B3SOIFDpcdscd; return(OK); case B3SOIFD_MOD_PPCLM: value->rValue = model->B3SOIFDppclm; return(OK); case B3SOIFD_MOD_PPDIBL1: value->rValue = model->B3SOIFDppdibl1; return(OK); case B3SOIFD_MOD_PPDIBL2: value->rValue = model->B3SOIFDppdibl2; return(OK); case B3SOIFD_MOD_PPDIBLB: value->rValue = model->B3SOIFDppdiblb; return(OK); case B3SOIFD_MOD_PDROUT : value->rValue = model->B3SOIFDpdrout; return(OK); case B3SOIFD_MOD_PPVAG: value->rValue = model->B3SOIFDppvag; return(OK); case B3SOIFD_MOD_PDELTA: value->rValue = model->B3SOIFDpdelta; return(OK); case B3SOIFD_MOD_PAII: value->rValue = model->B3SOIFDpaii; return(OK); case B3SOIFD_MOD_PBII: value->rValue = model->B3SOIFDpbii; return(OK); case B3SOIFD_MOD_PCII: value->rValue = model->B3SOIFDpcii; return(OK); case B3SOIFD_MOD_PDII: value->rValue = model->B3SOIFDpdii; return(OK); case B3SOIFD_MOD_PALPHA0: value->rValue = model->B3SOIFDpalpha0; return(OK); case B3SOIFD_MOD_PALPHA1: value->rValue = model->B3SOIFDpalpha1; return(OK); case B3SOIFD_MOD_PBETA0: value->rValue = model->B3SOIFDpbeta0; return(OK); case B3SOIFD_MOD_PAGIDL: value->rValue = model->B3SOIFDpagidl; return(OK); case B3SOIFD_MOD_PBGIDL: value->rValue = model->B3SOIFDpbgidl; return(OK); case B3SOIFD_MOD_PNGIDL: value->rValue = model->B3SOIFDpngidl; return(OK); case B3SOIFD_MOD_PNTUN: value->rValue = model->B3SOIFDpntun; return(OK); case B3SOIFD_MOD_PNDIODE: value->rValue = model->B3SOIFDpndiode; return(OK); case B3SOIFD_MOD_PISBJT: value->rValue = model->B3SOIFDpisbjt; return(OK); case B3SOIFD_MOD_PISDIF: value->rValue = model->B3SOIFDpisdif; return(OK); case B3SOIFD_MOD_PISREC: value->rValue = model->B3SOIFDpisrec; return(OK); case B3SOIFD_MOD_PISTUN: value->rValue = model->B3SOIFDpistun; return(OK); case B3SOIFD_MOD_PEDL: value->rValue = model->B3SOIFDpedl; return(OK); case B3SOIFD_MOD_PKBJT1: value->rValue = model->B3SOIFDpkbjt1; return(OK); /* CV Model */ case B3SOIFD_MOD_PVSDFB: value->rValue = model->B3SOIFDpvsdfb; return(OK); case B3SOIFD_MOD_PVSDTH: value->rValue = model->B3SOIFDpvsdth; return(OK); /* Added for binning - END */ default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_fd/b3soifdld.c0000644000175000017500000041666113546075722023417 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: Weidong Liu and Pin Su Feb 1999 Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang Modified by Pin Su, Wei Jin 99/9/27 Modified by Paolo Nenzi 2002 File: b3soifdld.c 98/5/01 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMFD2.1 release */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b3soifddef.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define Charge_q 1.60219e-19 #define KboQ 8.617087e-5 /* Kb / q */ #define Eg300 1.115 /* energy gap at 300K */ #define DELTA_1 0.02 #define DELTA_2 0.02 #define DELTA_3 0.02 #define DELTA_4 0.02 #define DELT_Vbs0eff 0.02 #define DELT_Vbsmos 0.005 #define DELT_Vbseff 0.005 #define DELT_Xcsat 0.2 #define DELT_Vbs0dio 1e-7 #define DELTA_VFB 0.02 #define DELTA_Vcscv 0.0004 #define DELT_Vbsdio 0.01 #define CONST_2OV3 0.6666666666 #define OFF_Vbsdio 2e-2 #define OFF_Vbs0_dio 2.02e-2 #define QEX_FACT 20 /* B3SOIFDSmartVbs(Vbs, Old, here, check) * Smart Vbs guess. */ static double B3SOIFDSmartVbs(double New, double Old, B3SOIFDinstance *here, CKTcircuit *ckt, int *check) { NG_IGNORE(Old); NG_IGNORE(check); /* only do it for floating body and DC */ if (here->B3SOIFDfloat && (ckt->CKTmode & (MODEDC | MODEDCOP))) { /* Vbs cannot be negative in DC */ if (New < 0.0) New = 0.0; } return(New); } /* B3SOIFDlimit(vnew,vold) * limits the per-iteration change of any absolute voltage value */ static double B3SOIFDlimit(double vnew, double vold, double limit, int *check) { double T0, T1; if (isnan (vnew) || isnan (vold)) { fprintf(stderr, "Alberto says: YOU TURKEY! The limiting function received NaN.\n"); fprintf(stderr, "New prediction returns to 0.0!\n"); vnew = 0.0; *check = 1; } T0 = vnew - vold; T1 = fabs(T0); if (T1 > limit) { if (T0 > 0.0) vnew = vold + limit; else vnew = vold - limit; *check = 1; } return vnew; } int B3SOIFDload(GENmodel *inModel, CKTcircuit *ckt) { B3SOIFDmodel *model = (B3SOIFDmodel*)inModel; B3SOIFDinstance *here; int selfheat; double ag0, qgd, qgs, von, cbhat, VgstNVt, ExpVgst = 0.0; double cdhat, cdreq, ceqbd, ceqbs, ceqqb, ceqqd, ceqqg, ceq, geq; double delvbd, delvbs, delvds, delvgd, delvgs; double Vfbeff, dVfbeff_dVd, dVfbeff_dVb, V3, V4; double gcgdb, gcggb, gcgsb, gcgeb, gcgT; double gcsdb, gcsgb, gcssb, gcseb, gcsT; double gcddb, gcdgb, gcdsb, gcdeb, gcdT; double gcbdb, gcbgb, gcbsb, gcbeb, gcbT; double gcedb, gcegb, gcesb, gceeb, gceT; double gcTt, gTtg, gTtb, gTte, gTtdp, gTtt, gTtsp; double vbd, vbs, vds, vgb, vgd, vgs, vgdo; #ifndef PREDICTOR double xfact; #endif double vg, vd, vs, vp, ve, vb; double Vds, Vgs, Vbs, Gmbs, FwdSum, RevSum; double Vgs_eff, Vfb, dVfb_dVb, dVfb_dVd, dVfb_dT; double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth = 0.0, dVth_dVb; double dVth_dVd, dVth_dT; double Vgst, dVgs_eff_dVg; double n, dn_dVb, Vtm; double ExpArg, V0; double ueff = 0.0, dueff_dVg, dueff_dVd, dueff_dVb, dueff_dT; double Esat, Vdsat = 0.0; double EsatL, dEsatL_dVg, dEsatL_dVd, dEsatL_dVb, dEsatL_dT; double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, dVdsat_dT, Vasat; double dVasat_dVg, dVasat_dVb, dVasat_dVd, dVasat_dT; double Va, dVa_dVd, dVa_dVg, dVa_dVb, dVa_dT; double Vbseff, dVbseff_dVb; double One_Third_CoxWL, Two_Third_CoxWL, CoxWL; double T0, dT0_dVg, dT0_dVd, dT0_dVb, dT0_dVc, dT0_dVe, dT0_dT; double T1, dT1_dVg, dT1_dVd, dT1_dVb, dT1_dVc, dT1_dVe, dT1_dT; double T2, dT2_dVg, dT2_dVd, dT2_dVb, dT2_dVc, dT2_dVe, dT2_dT; double T3, dT3_dVg, dT3_dVd, dT3_dVb, dT3_dVc, dT3_dVe, dT3_dT; double T4, dT4_dVg, dT4_dVd, dT4_dVb, dT4_dVe, dT4_dT; double T5, dT5_dVe; double T6, dT6_dVe, dT6_dT; double T7; double T8; double T9; double T10; double T11; double Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVb; double VACLM, dVACLM_dVg, dVACLM_dVd, dVACLM_dVb, dVACLM_dT; double VADIBL, dVADIBL_dVg, dVADIBL_dVd, dVADIBL_dVb, dVADIBL_dT; double Xdep, dXdep_dVb, lt1, dlt1_dVb, ltw, dltw_dVb; double Delt_vth, dDelt_vth_dVb, dDelt_vth_dT; double Theta0, dTheta0_dVb; double TempRatio, tmp1, tmp2, tmp3, tmp4; double DIBL_Sft, dDIBL_Sft_dVd, Lambda, dLambda_dVg; double a1; double Vgsteff = 0.0, dVgsteff_dVg, dVgsteff_dVd, dVgsteff_dVb; double dVgsteff_dVe, dVgsteff_dT; double Vdseff = 0.0, dVdseff_dVg, dVdseff_dVd, dVdseff_dVb, dVdseff_dT; double VdseffCV, dVdseffCV_dVg, dVdseffCV_dVd, dVdseffCV_dVb; double diffVds; double dAbulk_dVg, dn_dVd ; double beta, dbeta_dVg, dbeta_dVd, dbeta_dVb, dbeta_dT; double gche, dgche_dVg, dgche_dVd, dgche_dVb, dgche_dT; double fgche1, dfgche1_dVg, dfgche1_dVd, dfgche1_dVb, dfgche1_dT; double fgche2, dfgche2_dVg, dfgche2_dVd, dfgche2_dVb, dfgche2_dT; double Idl, dIdl_dVg, dIdl_dVd, dIdl_dVb, dIdl_dT; double Ids = 0.0, Gm, Gds = 0.0, Gmb; double CoxWovL; double Rds, dRds_dVg, dRds_dVb, dRds_dT, WVCox, WVCoxRds; double Vgst2Vtm, dVgst2Vtm_dT, VdsatCV, dVdsatCV_dVg, dVdsatCV_dVb; double Leff, Weff, dWeff_dVg, dWeff_dVb; double AbulkCV, dAbulkCV_dVb; double qgdo, qgso, cgdo, cgso; double dxpart, sxpart; struct b3soifdSizeDependParam *pParam; int ByPass, Check, ChargeComputationNeeded = 0, error; double gbbsp, gbbdp, gbbg, gbbb, gbbe, gbbp, gbbT; double gddpsp, gddpdp, gddpg, gddpb, gddpe, gddpT; double gsspsp, gsspdp, gsspg, gsspb, gsspe, gsspT; double Gbpbs, Gbpgs, Gbpds, Gbpes, Gbpps, GbpT; double ves, ved, veb, vge = 0.0, delves, vedo, delved; double vps, vpd, Vps, delvps; double Vbd, Ves, Vesfb, sqrtXdep, DeltVthtemp, dDeltVthtemp_dT; double Vbp, dVbp_dVp, dVbp_dVb, dVbp_dVg, dVbp_dVd, dVbp_dVe, dVbp_dT; double Vpsdio, dVpsdio_dVg, dVpsdio_dVd, dVpsdio_dVe, dVpsdio_dVp, dVpsdio_dT; double DeltVthw, dDeltVthw_dVb, dDeltVthw_dT; double dVbseff_dVd, dVbseff_dVe, dVbseff_dT; double dVdsat_dVc, dVasat_dVc, dVACLM_dVc, dVADIBL_dVc, dVa_dVc; double dfgche1_dVc, dfgche2_dVc, dgche_dVc, dVdseff_dVc, dIdl_dVc; double Gm0, Gds0, Gmb0, GmT0, Gmc, Gme, GmT, dVbseff_dVg; double dDIBL_Sft_dVb; double diffVdsii ; double Idgidl = 0.0, Gdgidld, Gdgidlg, Isgidl = 0.0, Gsgidlg; double Gjsd, Gjsb, GjsT, Gjdd, Gjdb, GjdT; double Ibp = 0.0, Iii = 0.0, Giid, Giig, Giib, Giie, GiiT, Gcd, Gcb, GcT; double ceqbody, ceqbodcon = 0.0; double gppg = 0.0, gppdp = 0.0, gppb = 0.0, gppe = 0.0; double gppp = 0.0, gppsp = 0.0, gppT; double delTemp, deldelTemp, Temp; double ceqth, ceqqth; double K1; double qjs = 0.0, gcjsbs, gcjsT; double qjd = 0.0, gcjdbs, gcjdds, gcjdT; double qge; double ceqqe; double ni, Eg, Cbox, Nfb, CboxWL; double dVfbeff_dVrg, Cbe = 0.0; double qinv = 0.0, qgate = 0.0, qbody = 0.0, qdrn = 0.0, qsrc, qsub = 0.0; double cqgate, cqbody = 0.0, cqdrn = 0.0, cqsub, cqtemp; double Cgg, Cgd, Cgb, Cge; double Csg, Csd, Csb, Cse, Cbg = 0.0, Cbd = 0.0, Cbb = 0.0; double Cgg1, Cgb1, Cgd1, Csg1, Csd1, Csb1; double Vbs0t = 0.0, dVbs0t_dT ; double Vbs0 = 0.0,dVbs0_dVe, dVbs0_dT; double Vbs0eff = 0.0 ,dVbs0eff_dVg ,dVbs0eff_dVd ,dVbs0eff_dVe, dVbs0eff_dT; double Vbs0teff = 0.0, dVbs0teff_dVg, dVbs0teff_dVd; double dVbs0teff_dVe, dVbs0teff_dT; double dVbsdio_dVg, dVbsdio_dVd, dVbsdio_dVe; double dVbsdio_dVb, dVbsdio_dT; double Vthfd = 0.0,dVthfd_dVd ,dVthfd_dVe, dVthfd_dT; double Vbs0mos = 0.0 ,dVbs0mos_dVe, dVbs0mos_dT; double Vbsmos ,dVbsmos_dVg ,dVbsmos_dVb ,dVbsmos_dVd, dVbsmos_dVe, dVbsmos_dT; double Abeff ,dAbeff_dVg ,dAbeff_dVb, dAbeff_dVc; double Vcs ,dVcs_dVg ,dVcs_dVb ,dVcs_dVd ,dVcs_dVe, dVcs_dT; double Xcsat = 0.0 ,dXcsat_dVg , dXcsat_dVc; double Vdsatii ,dVdsatii_dVg ,dVdsatii_dVd, dVdsatii_dVb, dVdsatii_dT; double Vdseffii ,dVdseffii_dVg ,dVdseffii_dVd, dVdseffii_dVb, dVdseffii_dT; double VcsCV = 0.0; double VdsCV = 0.0, dVdsCV_dVg = 0.0, dVdsCV_dVb = 0.0; double dVdsCV_dVd = 0.0, dVdsCV_dVc = 0.0; double Phisd ,dPhisd_dVg ,dPhisd_dVb ,dPhisd_dVd, dPhisd_dVc; double sqrtPhisd; double Xc = 0.0; double Ic = 0.0; double Ibs = 0.0; double Ibd = 0.0; double Denomi ,dDenomi_dVg ,dDenomi_dVd ,dDenomi_dVb , dDenomi_dT; double Qbf = 0.0; double Qsubs1 = 0.0; double Qsubs2 = 0.0; double Qsub0 = 0.0 ,dQsub0_dVg ,dQsub0_dVb ,dQsub0_dVd ; double Qac0 = 0.0 ,dQac0_dVb ,dQac0_dVd; double Qdep0 ,dQdep0_dVb; double Qe1 = 0.0; double Ce1g ,Ce1b ,Ce1d ,Ce1e, Ce1T; double Ce2g ,Ce2b ,Ce2d ,Ce2e, Ce2T; double Qe2 = 0.0; double dQac0_dVrg, Vbsdio = 0.0, dQsub0_dVrg; /* for self-heating */ double vbi, vfbb, phi, sqrtPhi, Xdep0, jbjt, jdif, jrec, jtun, u0temp, vsattemp; double rds0, ua, ub, uc; double dvbi_dT, dvfbb_dT, djbjt_dT, djdif_dT, djrec_dT, djtun_dT, du0temp_dT; double dvsattemp_dT, drds0_dT, dua_dT, dub_dT, duc_dT, dni_dT, dVtm_dT; double dVfbeff_dT, dQac0_dT, dQsub0_dT, dVdsCV_dT = 0.0, dPhisd_dT; double CbT, CsT, CgT; double Qex, dQex_dVg, dQex_dVb, dQex_dVd, dQex_dVe, dQex_dT; /* clean up last */ FILE *fpdebug = NULL; /* end clean up */ int nandetect; static int nanfound = 0; char nanmessage [12]; double m; for (; model != NULL; model = B3SOIFDnextModel(model)) { for (here = B3SOIFDinstances(model); here != NULL; here = B3SOIFDnextInstance(here)) { Check = 0; ByPass = 0; selfheat = (model->B3SOIFDshMod == 1) && (here->B3SOIFDrth0 != 0.0); pParam = here->pParam; if (here->B3SOIFDdebugMod > 3) { if (model->B3SOIFDtype > 0) fpdebug = fopen("b3soifdn.log", "a"); else fpdebug = fopen("b3soifdp.log", "a"); fprintf(fpdebug, "******* Time : %.5e ******* Device: %s Iteration: %d\n", ckt->CKTtime, here->B3SOIFDname, here->B3SOIFDiterations); } if ((ckt->CKTmode & MODEINITSMSIG)) { vbs = *(ckt->CKTstate0 + here->B3SOIFDvbs); vgs = *(ckt->CKTstate0 + here->B3SOIFDvgs); ves = *(ckt->CKTstate0 + here->B3SOIFDves); vps = *(ckt->CKTstate0 + here->B3SOIFDvps); vds = *(ckt->CKTstate0 + here->B3SOIFDvds); delTemp = *(ckt->CKTstate0 + here->B3SOIFDdeltemp); vg = *(ckt->CKTrhsOld + here->B3SOIFDgNode); vd = *(ckt->CKTrhsOld + here->B3SOIFDdNodePrime); vs = *(ckt->CKTrhsOld + here->B3SOIFDsNodePrime); vp = *(ckt->CKTrhsOld + here->B3SOIFDpNode); ve = *(ckt->CKTrhsOld + here->B3SOIFDeNode); vb = *(ckt->CKTrhsOld + here->B3SOIFDbNode); if (here->B3SOIFDdebugMod > 2) { fprintf(fpdebug, "... INIT SMSIG ...\n"); } if (here->B3SOIFDdebugMod > 0) { fprintf(stderr, "DC op. point converge with %d iterations\n", here->B3SOIFDiterations); } } else if ((ckt->CKTmode & MODEINITTRAN)) { vbs = *(ckt->CKTstate1 + here->B3SOIFDvbs); vgs = *(ckt->CKTstate1 + here->B3SOIFDvgs); ves = *(ckt->CKTstate1 + here->B3SOIFDves); vps = *(ckt->CKTstate1 + here->B3SOIFDvps); vds = *(ckt->CKTstate1 + here->B3SOIFDvds); delTemp = *(ckt->CKTstate1 + here->B3SOIFDdeltemp); vg = *(ckt->CKTrhsOld + here->B3SOIFDgNode); vd = *(ckt->CKTrhsOld + here->B3SOIFDdNodePrime); vs = *(ckt->CKTrhsOld + here->B3SOIFDsNodePrime); vp = *(ckt->CKTrhsOld + here->B3SOIFDpNode); ve = *(ckt->CKTrhsOld + here->B3SOIFDeNode); vb = *(ckt->CKTrhsOld + here->B3SOIFDbNode); if (here->B3SOIFDdebugMod > 2) { fprintf(fpdebug, "... Init Transient ....\n"); } if (here->B3SOIFDdebugMod > 0) { fprintf(stderr, "Transient operation point converge with %d iterations\n", here->B3SOIFDiterations); } here->B3SOIFDiterations = 0; } else if ((ckt->CKTmode & MODEINITJCT) && !here->B3SOIFDoff) { vds = model->B3SOIFDtype * here->B3SOIFDicVDS; vgs = model->B3SOIFDtype * here->B3SOIFDicVGS; ves = model->B3SOIFDtype * here->B3SOIFDicVES; vbs = model->B3SOIFDtype * here->B3SOIFDicVBS; vps = model->B3SOIFDtype * here->B3SOIFDicVPS; vg = vd = vs = vp = ve = 0.0; here->B3SOIFDiterations = 0; /* initialize iteration number */ delTemp = 0.0; here->B3SOIFDphi = pParam->B3SOIFDphi; if (here->B3SOIFDdebugMod > 2) fprintf(fpdebug, "... INIT JCT ...\n"); if ((vds == 0.0) && (vgs == 0.0) && (vbs == 0.0) && ((ckt->CKTmode & (MODETRAN | MODEAC|MODEDCOP | MODEDCTRANCURVE)) || (!(ckt->CKTmode & MODEUIC)))) { vbs = 0.0; vgs = model->B3SOIFDtype*0.1 + pParam->B3SOIFDvth0; vds = 0.0; ves = 0.0; vps = 0.0; } } else if ((ckt->CKTmode & (MODEINITJCT | MODEINITFIX)) && (here->B3SOIFDoff)) { delTemp = vps = vbs = vgs = vds = ves = 0.0; vg = vd = vs = vp = ve = 0.0; here->B3SOIFDiterations = 0; /* initialize iteration number */ } else { #ifndef PREDICTOR if ((ckt->CKTmode & MODEINITPRED)) { xfact = ckt->CKTdelta / ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->B3SOIFDvbs) = *(ckt->CKTstate1 + here->B3SOIFDvbs); vbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B3SOIFDvbs)) - (xfact * (*(ckt->CKTstate2 + here->B3SOIFDvbs))); *(ckt->CKTstate0 + here->B3SOIFDvgs) = *(ckt->CKTstate1 + here->B3SOIFDvgs); vgs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B3SOIFDvgs)) - (xfact * (*(ckt->CKTstate2 + here->B3SOIFDvgs))); *(ckt->CKTstate0 + here->B3SOIFDves) = *(ckt->CKTstate1 + here->B3SOIFDves); ves = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B3SOIFDves)) - (xfact * (*(ckt->CKTstate2 + here->B3SOIFDves))); *(ckt->CKTstate0 + here->B3SOIFDvps) = *(ckt->CKTstate1 + here->B3SOIFDvps); vps = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B3SOIFDvps)) - (xfact * (*(ckt->CKTstate2 + here->B3SOIFDvps))); *(ckt->CKTstate0 + here->B3SOIFDvds) = *(ckt->CKTstate1 + here->B3SOIFDvds); vds = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B3SOIFDvds)) - (xfact * (*(ckt->CKTstate2 + here->B3SOIFDvds))); *(ckt->CKTstate0 + here->B3SOIFDvbd) = *(ckt->CKTstate0 + here->B3SOIFDvbs) - *(ckt->CKTstate0 + here->B3SOIFDvds); *(ckt->CKTstate0 + here->B3SOIFDvg) = *(ckt->CKTstate1 + here->B3SOIFDvg); *(ckt->CKTstate0 + here->B3SOIFDvd) = *(ckt->CKTstate1 + here->B3SOIFDvd); *(ckt->CKTstate0 + here->B3SOIFDvs) = *(ckt->CKTstate1 + here->B3SOIFDvs); *(ckt->CKTstate0 + here->B3SOIFDvp) = *(ckt->CKTstate1 + here->B3SOIFDvp); *(ckt->CKTstate0 + here->B3SOIFDve) = *(ckt->CKTstate1 + here->B3SOIFDve); /* Only predict ve */ ve = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B3SOIFDve)) - (xfact * (*(ckt->CKTstate2 + here->B3SOIFDve))); /* Then update vg, vs, vb, vd, vp base on ve */ vs = ve - model->B3SOIFDtype * ves; vg = model->B3SOIFDtype * vgs + vs; vd = model->B3SOIFDtype * vds + vs; vb = model->B3SOIFDtype * vbs + vs; vp = model->B3SOIFDtype * vps + vs; delTemp = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B3SOIFDdeltemp))-(xfact * (*(ckt->CKTstate2 + here->B3SOIFDdeltemp))); if (selfheat) { here->B3SOIFDphi = 2.0 * here->B3SOIFDvtm * log (pParam->B3SOIFDnpeak / here->B3SOIFDni); } if (here->B3SOIFDdebugMod > 0) { fprintf(stderr, "Time = %.6e converge with %d iterations\n", ckt->CKTtime, here->B3SOIFDiterations); } if (here->B3SOIFDdebugMod > 2) { fprintf(fpdebug, "... PREDICTOR calculation ....\n"); } here->B3SOIFDiterations = 0; } else { #endif /* PREDICTOR */ vg = B3SOIFDlimit(*(ckt->CKTrhsOld + here->B3SOIFDgNode), *(ckt->CKTstate0 + here->B3SOIFDvg), 3.0, &Check); vd = B3SOIFDlimit(*(ckt->CKTrhsOld + here->B3SOIFDdNodePrime), *(ckt->CKTstate0 + here->B3SOIFDvd), 3.0, &Check); vs = B3SOIFDlimit(*(ckt->CKTrhsOld + here->B3SOIFDsNodePrime), *(ckt->CKTstate0 + here->B3SOIFDvs), 3.0, &Check); vp = B3SOIFDlimit(*(ckt->CKTrhsOld + here->B3SOIFDpNode), *(ckt->CKTstate0 + here->B3SOIFDvp), 3.0, &Check); ve = B3SOIFDlimit(*(ckt->CKTrhsOld + here->B3SOIFDeNode), *(ckt->CKTstate0 + here->B3SOIFDve), 3.0, &Check); delTemp = *(ckt->CKTrhsOld + here->B3SOIFDtempNode); vbs = model->B3SOIFDtype * (*(ckt->CKTrhsOld+here->B3SOIFDbNode) - *(ckt->CKTrhsOld+here->B3SOIFDsNodePrime)); vps = model->B3SOIFDtype * (vp - vs); vgs = model->B3SOIFDtype * (vg - vs); ves = model->B3SOIFDtype * (ve - vs); vds = model->B3SOIFDtype * (vd - vs); if (here->B3SOIFDdebugMod > 2) { fprintf(fpdebug, "... DC calculation ....\n"); fprintf(fpdebug, "Vg = %.10f; Vb = %.10f; Vs = %.10f\n", *(ckt->CKTrhsOld + here->B3SOIFDgNode), *(ckt->CKTrhsOld + here->B3SOIFDbNode), *(ckt->CKTrhsOld + here->B3SOIFDsNode)); fprintf(fpdebug, "Vd = %.10f; Vsp = %.10f; Vdp = %.10f\n", *(ckt->CKTrhsOld + here->B3SOIFDdNode), *(ckt->CKTrhsOld + here->B3SOIFDsNodePrime), *(ckt->CKTrhsOld + here->B3SOIFDdNodePrime)); fprintf(fpdebug, "Ve = %.10f; Vp = %.10f; delTemp = %.10f\n", *(ckt->CKTrhsOld + here->B3SOIFDeNode), *(ckt->CKTrhsOld + here->B3SOIFDpNode), *(ckt->CKTrhsOld + here->B3SOIFDtempNode)); } #ifndef PREDICTOR } #endif /* PREDICTOR */ vbd = vbs - vds; vgd = vgs - vds; ved = ves - vds; vgdo = *(ckt->CKTstate0 + here->B3SOIFDvgs) - *(ckt->CKTstate0 + here->B3SOIFDvds); vedo = *(ckt->CKTstate0 + here->B3SOIFDves) - *(ckt->CKTstate0 + here->B3SOIFDvds); delvbs = vbs - *(ckt->CKTstate0 + here->B3SOIFDvbs); delvbd = vbd - *(ckt->CKTstate0 + here->B3SOIFDvbd); delvgs = vgs - *(ckt->CKTstate0 + here->B3SOIFDvgs); delves = ves - *(ckt->CKTstate0 + here->B3SOIFDves); delvps = vps - *(ckt->CKTstate0 + here->B3SOIFDvps); deldelTemp = delTemp - *(ckt->CKTstate0 + here->B3SOIFDdeltemp); delvds = vds - *(ckt->CKTstate0 + here->B3SOIFDvds); delvgd = vgd - vgdo; delved = ved - vedo; if (here->B3SOIFDmode >= 0) { cdhat = here->B3SOIFDcd + (here->B3SOIFDgm-here->B3SOIFDgjdg) * delvgs + (here->B3SOIFDgds - here->B3SOIFDgjdd) * delvds + (here->B3SOIFDgmbs - here->B3SOIFDgjdb) * delvbs + (here->B3SOIFDgme - here->B3SOIFDgjde) * delves + (here->B3SOIFDgmT - here->B3SOIFDgjdT) * deldelTemp; } else { cdhat = here->B3SOIFDcd + (here->B3SOIFDgm-here->B3SOIFDgjdg) * delvgd - (here->B3SOIFDgds - here->B3SOIFDgjdd) * delvds + (here->B3SOIFDgmbs - here->B3SOIFDgjdb) * delvbd + (here->B3SOIFDgme - here->B3SOIFDgjde) * delved + (here->B3SOIFDgmT - here->B3SOIFDgjdT) * deldelTemp; } cbhat = here->B3SOIFDcb + here->B3SOIFDgbgs * delvgs + here->B3SOIFDgbbs * delvbs + here->B3SOIFDgbds * delvds + here->B3SOIFDgbes * delves + here->B3SOIFDgbps * delvps + here->B3SOIFDgbT * deldelTemp; #ifndef NOBYPASS /* following should be one big if connected by && all over * the place, but some C compilers can't handle that, so * we split it up here to let them digest it in stages */ if (here->B3SOIFDdebugMod > 3) { fprintf(fpdebug, "Convergent Criteria : vbs %d vds %d vgs %d ves %d vps %d temp %d\n", ((fabs(delvbs) < (ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->B3SOIFDvbs))) + ckt->CKTvoltTol))) ? 1 : 0, ((fabs(delvds) < (ckt->CKTreltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0+here->B3SOIFDvds))) + ckt->CKTvoltTol))) ? 1 : 0, ((fabs(delvgs) < (ckt->CKTreltol * MAX(fabs(vgs), fabs(*(ckt->CKTstate0+here->B3SOIFDvgs))) + ckt->CKTvoltTol))) ? 1 : 0, ((fabs(delves) < (ckt->CKTreltol * MAX(fabs(ves), fabs(*(ckt->CKTstate0+here->B3SOIFDves))) + ckt->CKTvoltTol))) ? 1 : 0, ((fabs(delvps) < (ckt->CKTreltol * MAX(fabs(vps), fabs(*(ckt->CKTstate0+here->B3SOIFDvps))) + ckt->CKTvoltTol))) ? 1 : 0, ((fabs(deldelTemp) < (ckt->CKTreltol * MAX(fabs(delTemp), fabs(*(ckt->CKTstate0+here->B3SOIFDdeltemp))) + ckt->CKTvoltTol*1e4))) ? 1 : 0); fprintf(fpdebug, "delCd %.4e, delCb %.4e\n", fabs(cdhat - here->B3SOIFDcd) , fabs(cbhat - here->B3SOIFDcb)); } if ((!(ckt->CKTmode & MODEINITPRED)) && (ckt->CKTbypass) && Check == 0) if ((fabs(delvbs) < (ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->B3SOIFDvbs))) + ckt->CKTvoltTol)) ) if ((fabs(delvbd) < (ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0+here->B3SOIFDvbd))) + ckt->CKTvoltTol)) ) if ((fabs(delvgs) < (ckt->CKTreltol * MAX(fabs(vgs), fabs(*(ckt->CKTstate0+here->B3SOIFDvgs))) + ckt->CKTvoltTol))) if ((fabs(delves) < (ckt->CKTreltol * MAX(fabs(ves), fabs(*(ckt->CKTstate0+here->B3SOIFDves))) + ckt->CKTvoltTol))) if ( (here->B3SOIFDbodyMod == 0) || (here->B3SOIFDbodyMod == 2) || (fabs(delvps) < (ckt->CKTreltol * MAX(fabs(vps), fabs(*(ckt->CKTstate0+here->B3SOIFDvps))) + ckt->CKTvoltTol)) ) if ( (here->B3SOIFDtempNode == 0) || (fabs(deldelTemp) < (ckt->CKTreltol * MAX(fabs(delTemp), fabs(*(ckt->CKTstate0+here->B3SOIFDdeltemp))) + ckt->CKTvoltTol*1e4))) if ((fabs(delvds) < (ckt->CKTreltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0+here->B3SOIFDvds))) + ckt->CKTvoltTol))) if ((fabs(cdhat - here->B3SOIFDcd) < ckt->CKTreltol * MAX(fabs(cdhat),fabs(here->B3SOIFDcd)) + ckt->CKTabstol)) if ((fabs(cbhat - here->B3SOIFDcb) < ckt->CKTreltol * MAX(fabs(cbhat),fabs(here->B3SOIFDcb)) + ckt->CKTabstol) ) { /* bypass code */ vbs = *(ckt->CKTstate0 + here->B3SOIFDvbs); vbd = *(ckt->CKTstate0 + here->B3SOIFDvbd); vgs = *(ckt->CKTstate0 + here->B3SOIFDvgs); ves = *(ckt->CKTstate0 + here->B3SOIFDves); vps = *(ckt->CKTstate0 + here->B3SOIFDvps); vds = *(ckt->CKTstate0 + here->B3SOIFDvds); delTemp = *(ckt->CKTstate0 + here->B3SOIFDdeltemp); /* calculate Vds for temperature conductance calculation in bypass (used later when filling Temp node matrix) */ Vds = here->B3SOIFDmode > 0 ? vds : -vds; vgd = vgs - vds; vgb = vgs - vbs; veb = ves - vbs; if (here->B3SOIFDdebugMod > 2) { fprintf(stderr, "Bypass for %s...\n", here->B3SOIFDname); fprintf(fpdebug, "... By pass ....\n"); fprintf(fpdebug, "vgs=%.4f, vds=%.4f, vbs=%.4f, ", vgs, vds, vbs); fprintf(fpdebug, "ves=%.4f, vps=%.4f\n", ves, vps); } if ((ckt->CKTmode & (MODETRAN | MODEAC)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) { ByPass = 1; goto line755; } else { goto line850; } } #endif /*NOBYPASS*/ von = here->B3SOIFDvon; if ((here->B3SOIFDdebugMod > 1) || (here->B3SOIFDdebugMod == -1)) { here->B3SOIFDdum1 = here->B3SOIFDdum2 = here->B3SOIFDdum3 = 0.0; here->B3SOIFDdum4 = here->B3SOIFDdum5 = 0.0; Qac0 = Qsub0 = Qsubs1 = Qsubs2 = Qbf = Qe1 = Qe2 = 0.0; qjs = qjd = Cbg = Cbb = Cbd = Cbe = Xc = qdrn = qgate = 0.0; qbody = qsub = 0.0; } if (here->B3SOIFDdebugMod > 2) { fprintf(fpdebug, "Limited : vgs = %.8f\n", vgs); fprintf(fpdebug, "Limited : vds = %.8f\n", vds); } if (*(ckt->CKTstate0 + here->B3SOIFDvds) >= 0.0) T0 = *(ckt->CKTstate0 + here->B3SOIFDvbs); else T0 = *(ckt->CKTstate0 + here->B3SOIFDvbd); if (here->B3SOIFDdebugMod > 2) fprintf(fpdebug, "Before lim : vbs = %.8f, after = ", T0); if (vds >= 0.0) { vbs = B3SOIFDlimit(vbs, T0, 0.2, &Check); vbs = B3SOIFDSmartVbs(vbs, T0, here, ckt, &Check); vbd = vbs - vds; vb = model->B3SOIFDtype * vbs + vs; if (here->B3SOIFDdebugMod > 2) fprintf(fpdebug, "%.8f\n", vbs); } else { vbd = B3SOIFDlimit(vbd, T0, 0.2, &Check); vbd = B3SOIFDSmartVbs(vbd, T0, here, ckt, &Check); vbs = vbd + vds; vb = model->B3SOIFDtype * vbs + vd; if (here->B3SOIFDdebugMod > 2) fprintf(fpdebug, "%.8f\n", vbd); } delTemp =B3SOIFDlimit(delTemp, *(ckt->CKTstate0 + here->B3SOIFDdeltemp),5.0,&Check); } /* Calculate temperature dependent values for self-heating effect */ Temp = delTemp + ckt->CKTtemp; /* for debugging Temp = ckt->CKTtemp; selfheat = 1; if (here->B3SOIFDname[1] == '2') { Temp += 0.01; } */ TempRatio = Temp / model->B3SOIFDtnom; if (selfheat) { Vtm = KboQ * Temp; T0 = 1108.0 + Temp; T5 = Temp * Temp; Eg = 1.16 - 7.02e-4 * T5 / T0; T1 = ((7.02e-4 * T5) - T0 * (14.04e-4 * Temp)) / T0 / T0; /* T1 = dEg / dT */ T2 = 1.9230584e-4; /* T2 = 1 / 300.15^(3/2) */ T5 = sqrt(Temp); T3 = 1.45e10 * Temp * T5 * T2; T4 = exp(21.5565981 - Eg / (2.0 * Vtm)); ni = T3 * T4; dni_dT = 2.175e10 * T2 * T5 * T4 + T3 * T4 * (-Vtm * T1 + Eg * KboQ) / (2.0 * Vtm * Vtm); T0 = log(1.0e20 * pParam->B3SOIFDnpeak / (ni * ni)); vbi = Vtm * T0; dvbi_dT = KboQ * T0 + Vtm * (-2.0 * dni_dT / ni); if (pParam->B3SOIFDnsub > 0) { T0 = log(pParam->B3SOIFDnpeak / pParam->B3SOIFDnsub); vfbb = -model->B3SOIFDtype * Vtm*T0; dvfbb_dT = -model->B3SOIFDtype * KboQ*T0; } else { T0 = log(-pParam->B3SOIFDnpeak*pParam->B3SOIFDnsub/ni/ni); vfbb = -model->B3SOIFDtype * Vtm*T0; dvfbb_dT = -model->B3SOIFDtype * (KboQ * T0 + Vtm * 2.0 * dni_dT / ni); } /* phi = 2.0 * Vtm * log(pParam->B3SOIFDnpeak / ni); */ phi = here->B3SOIFDphi; sqrtPhi = sqrt(phi); Xdep0 = sqrt(2.0 * EPSSI / (Charge_q * pParam->B3SOIFDnpeak * 1.0e6)) * sqrtPhi; /* Save the values below for phi calculation in B3SOIFDaccept() */ here->B3SOIFDvtm = Vtm; here->B3SOIFDni = ni; /* Use dTx_dVe variables to act as dTx_dT variables */ T8 = 1 / model->B3SOIFDtnom; T7 = model->B3SOIFDxbjt / pParam->B3SOIFDndiode; T0 = pow(TempRatio, T7); dT0_dVe = T7 * pow(TempRatio, T7 - 1.0) * T8; T7 = model->B3SOIFDxdif / pParam->B3SOIFDndiode; T1 = pow(TempRatio, T7); dT1_dVe = T7 * pow(TempRatio, T7 - 1.0) * T8; T7 = model->B3SOIFDxrec / pParam->B3SOIFDndiode / 2.0; T2 = pow(TempRatio, T7); dT2_dVe = T7 * pow(TempRatio, T7 - 1.0) * T8; T3 = TempRatio - 1.0; T4 = Eg300 / pParam->B3SOIFDndiode / Vtm * T3; dT4_dVe = Eg300 / pParam->B3SOIFDndiode / Vtm / Vtm * (Vtm * T8 - T3 * KboQ); T5 = exp(T4); dT5_dVe = dT4_dVe * T5; T6 = sqrt(T5); dT6_dVe = 0.5 / T6 * dT5_dVe; jbjt = pParam->B3SOIFDisbjt * T0 * T5; jdif = pParam->B3SOIFDisdif * T1 * T5; jrec = pParam->B3SOIFDisrec * T2 * T6; djbjt_dT = pParam->B3SOIFDisbjt * (T0 * dT5_dVe + T5 * dT0_dVe); djdif_dT = pParam->B3SOIFDisdif * (T1 * dT5_dVe + T5 * dT1_dVe); djrec_dT = pParam->B3SOIFDisrec * (T2 * dT6_dVe + T6 * dT2_dVe); T7 = model->B3SOIFDxtun / pParam->B3SOIFDntun; T0 = pow(TempRatio, T7); jtun = pParam->B3SOIFDistun * T0; djtun_dT = pParam->B3SOIFDistun * T7 * pow(TempRatio, T7 - 1.0) * T8; u0temp = pParam->B3SOIFDu0 * pow(TempRatio, pParam->B3SOIFDute); du0temp_dT = pParam->B3SOIFDu0 * pParam->B3SOIFDute * pow(TempRatio, pParam->B3SOIFDute - 1.0) * T8; vsattemp = pParam->B3SOIFDvsat - pParam->B3SOIFDat * T3; dvsattemp_dT = -pParam->B3SOIFDat * T8; rds0 = (pParam->B3SOIFDrdsw + pParam->B3SOIFDprt * T3) / pParam->B3SOIFDrds0denom; drds0_dT = pParam->B3SOIFDprt / pParam->B3SOIFDrds0denom * T8; ua = pParam->B3SOIFDuatemp + pParam->B3SOIFDua1 * T3; ub = pParam->B3SOIFDubtemp + pParam->B3SOIFDub1 * T3; uc = pParam->B3SOIFDuctemp + pParam->B3SOIFDuc1 * T3; dua_dT = pParam->B3SOIFDua1 * T8; dub_dT = pParam->B3SOIFDub1 * T8; duc_dT = pParam->B3SOIFDuc1 * T8; } else { vbi = pParam->B3SOIFDvbi; vfbb = pParam->B3SOIFDvfbb; phi = pParam->B3SOIFDphi; sqrtPhi = pParam->B3SOIFDsqrtPhi; Xdep0 = pParam->B3SOIFDXdep0; jbjt = pParam->B3SOIFDjbjt; jdif = pParam->B3SOIFDjdif; jrec = pParam->B3SOIFDjrec; jtun = pParam->B3SOIFDjtun; u0temp = pParam->B3SOIFDu0temp; vsattemp = pParam->B3SOIFDvsattemp; rds0 = pParam->B3SOIFDrds0; ua = pParam->B3SOIFDua; ub = pParam->B3SOIFDub; uc = pParam->B3SOIFDuc; dni_dT = dvbi_dT = dvfbb_dT = djbjt_dT = djdif_dT = 0.0; djrec_dT = djtun_dT = du0temp_dT = dvsattemp_dT = 0.0; drds0_dT = dua_dT = dub_dT = duc_dT = 0.0; } /* TempRatio used for Vth and mobility */ if (selfheat) { TempRatio = Temp / model->B3SOIFDtnom - 1.0; } else { TempRatio = ckt->CKTtemp / model->B3SOIFDtnom - 1.0; } /* determine DC current and derivatives */ vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; ved = ves - vds; veb = ves - vbs; vge = vgs - ves; vpd = vps - vds; if (vds >= 0.0) { /* normal mode */ here->B3SOIFDmode = 1; Vds = vds; Vgs = vgs; Vbs = vbs; Vbd = vbd; Ves = ves; Vps = vps; } else { /* inverse mode */ here->B3SOIFDmode = -1; Vds = -vds; Vgs = vgd; Vbs = vbd; Vbd = vbs; Ves = ved; Vps = vpd; } if (here->B3SOIFDdebugMod > 2) { fprintf(fpdebug, "Vgs=%.4f, Vds=%.4f, Vbs=%.4f, ", Vgs, Vds, Vbs); fprintf(fpdebug, "Ves=%.4f, Vps=%.4f, Temp=%.1f\n", Ves, Vps, Temp); } Vesfb = Ves - vfbb; Cbox = model->B3SOIFDcbox; K1 = pParam->B3SOIFDk1; ChargeComputationNeeded = ((ckt->CKTmode & (MODEAC | MODETRAN | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) ? 1 : 0; if (here->B3SOIFDdebugMod == -1) ChargeComputationNeeded = 1; /* Poly Gate Si Depletion Effect */ T0 = pParam->B3SOIFDvfb + phi; if ((pParam->B3SOIFDngate > 1.e18) && (pParam->B3SOIFDngate < 1.e25) && (Vgs > T0)) /* added to avoid the problem caused by ngate */ { T1 = 1.0e6 * Charge_q * EPSSI * pParam->B3SOIFDngate / (model->B3SOIFDcox * model->B3SOIFDcox); T4 = sqrt(1.0 + 2.0 * (Vgs - T0) / T1); T2 = T1 * (T4 - 1.0); T3 = 0.5 * T2 * T2 / T1; /* T3 = Vpoly */ T7 = 1.12 - T3 - 0.05; T6 = sqrt(T7 * T7 + 0.224); T5 = 1.12 - 0.5 * (T7 + T6); Vgs_eff = Vgs - T5; dVgs_eff_dVg = 1.0 - (0.5 - 0.5 / T4) * (1.0 + T7 / T6); } else { Vgs_eff = Vgs; dVgs_eff_dVg = 1.0; } Leff = pParam->B3SOIFDleff; if (selfheat) { Vtm = KboQ * Temp; dVtm_dT = KboQ; } else { Vtm = model->B3SOIFDvtm; dVtm_dT = 0.0; } V0 = vbi - phi; /* Prepare Vbs0t */ T0 = -pParam->B3SOIFDdvbd1 * pParam->B3SOIFDleff / pParam->B3SOIFDlitl; T1 = pParam->B3SOIFDdvbd0 * (exp(0.5*T0) + 2*exp(T0)); T2 = T1 * (vbi - phi); T3 = 0.5 * model->B3SOIFDqsi / model->B3SOIFDcsi; Vbs0t = phi - T3 + pParam->B3SOIFDvbsa + T2; if (selfheat) dVbs0t_dT = T1 * dvbi_dT; else dVbs0t_dT = 0.0; /* Prepare Vbs0 */ T0 = 1 + model->B3SOIFDcsieff / Cbox; T1 = pParam->B3SOIFDkb1 / T0; T2 = T1 * (Vbs0t - Vesfb); /* T6 is Vbs0 before limiting */ T6 = Vbs0t - T2; dT6_dVe = T1; if (selfheat) dT6_dT = dVbs0t_dT - T1 * (dVbs0t_dT + dvfbb_dT); else dT6_dT = 0.0; /* limit Vbs0 to below phi */ T1 = phi - pParam->B3SOIFDdelp; T2 = T1 - T6 - DELT_Vbseff; T3 = sqrt(T2 * T2 + 4.0 * DELT_Vbseff); Vbs0 = T1 - 0.5 * (T2 + T3); T4 = 0.5 * (1 + T2/T3); dVbs0_dVe = T4 * dT6_dVe; if (selfheat) dVbs0_dT = T4 * dT6_dT; else dVbs0_dT = 0.0; T1 = Vbs0t - Vbs0 - DELT_Vbsmos; T2 = sqrt(T1 * T1 + DELT_Vbsmos * DELT_Vbsmos); T3 = 0.5 * (T1 + T2); T4 = T3 * model->B3SOIFDcsieff / model->B3SOIFDqsieff; Vbs0mos = Vbs0 - 0.5 * T3 * T4; T5 = 0.5 * T4 * (1 + T1 / T2); dVbs0mos_dVe = dVbs0_dVe * (1 + T5); if (selfheat) dVbs0mos_dT = dVbs0_dT - (dVbs0t_dT - dVbs0_dT) * T5; else dVbs0mos_dT = 0.0; /* Prepare Vthfd - treat Vbs0mos as if it were independent variable Vb */ Phis = phi - Vbs0mos; dPhis_dVb = -1; sqrtPhis = sqrt(Phis); dsqrtPhis_dVb = -0.5 / sqrtPhis; Xdep = Xdep0 * sqrtPhis / sqrtPhi; dXdep_dVb = (Xdep0 / sqrtPhi) * dsqrtPhis_dVb; sqrtXdep = sqrt(Xdep); T0 = pParam->B3SOIFDdvt2 * Vbs0mos; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->B3SOIFDdvt2; } else /* Added to avoid any discontinuity problems caused by dvt2*/ { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->B3SOIFDdvt2 * T4 * T4; } lt1 = model->B3SOIFDfactor1 * sqrtXdep * T1; dlt1_dVb = model->B3SOIFDfactor1 * (0.5 / sqrtXdep * T1 * dXdep_dVb + sqrtXdep * T2); T0 = pParam->B3SOIFDdvt2w * Vbs0mos; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->B3SOIFDdvt2w; } else /* Added to avoid any discontinuity problems caused by dvt2w */ { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->B3SOIFDdvt2w * T4 * T4; } ltw= model->B3SOIFDfactor1 * sqrtXdep * T1; dltw_dVb = model->B3SOIFDfactor1 * (0.5 / sqrtXdep * T1 * dXdep_dVb + sqrtXdep * T2); T0 = -0.5 * pParam->B3SOIFDdvt1 * Leff / lt1; if (T0 > -EXP_THRESHOLD) { T1 = exp(T0); dT1_dVb = -T0 / lt1 * T1 * dlt1_dVb; Theta0 = T1 * (1.0 + 2.0 * T1); dTheta0_dVb = (1.0 + 4.0 * T1) * dT1_dVb; } else { T1 = MIN_EXP; Theta0 = T1 * (1.0 + 2.0 * T1); dTheta0_dVb = 0.0; } here->B3SOIFDthetavth = pParam->B3SOIFDdvt0 * Theta0; Delt_vth = here->B3SOIFDthetavth * V0; dDelt_vth_dVb = pParam->B3SOIFDdvt0 * dTheta0_dVb * V0; if (selfheat) dDelt_vth_dT = here->B3SOIFDthetavth * dvbi_dT; else dDelt_vth_dT = 0.0; T0 = -0.5*pParam->B3SOIFDdvt1w * pParam->B3SOIFDweff*Leff/ltw; if (T0 > -EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 * (1.0 + 2.0 * T1); dT1_dVb = -T0 / ltw * T1 * dltw_dVb; dT2_dVb = (1.0 + 4.0 * T1) * dT1_dVb; } else { T1 = MIN_EXP; T2 = T1 * (1.0 + 2.0 * T1); dT2_dVb = 0.0; } T0 = pParam->B3SOIFDdvt0w * T2; DeltVthw = T0 * V0; dDeltVthw_dVb = pParam->B3SOIFDdvt0w * dT2_dVb * V0; if (selfheat) dDeltVthw_dT = T0 * dvbi_dT; else dDeltVthw_dT = 0.0; T0 = sqrt(1.0 + pParam->B3SOIFDnlx / Leff); T1 = (pParam->B3SOIFDkt1 + pParam->B3SOIFDkt1l / Leff + pParam->B3SOIFDkt2 * Vbs0mos); DeltVthtemp = pParam->B3SOIFDk1 * (T0 - 1.0) * sqrtPhi + T1 * TempRatio; if (selfheat) dDeltVthtemp_dT = T1 / model->B3SOIFDtnom; else dDeltVthtemp_dT = 0.0; tmp2 = model->B3SOIFDtox * phi / (pParam->B3SOIFDweff + pParam->B3SOIFDw0); T3 = pParam->B3SOIFDeta0 + pParam->B3SOIFDetab * Vbs0mos; if (T3 < 1.0e-4) /* avoid discontinuity problems caused by etab */ { T9 = 1.0 / (3.0 - 2.0e4 * T3); T3 = (2.0e-4 - T3) * T9; T4 = T9 * T9 * pParam->B3SOIFDetab; dT3_dVb = T4; } else { dT3_dVb = pParam->B3SOIFDetab; } DIBL_Sft = T3 * pParam->B3SOIFDtheta0vb0 * Vds; dDIBL_Sft_dVd = T3 * pParam->B3SOIFDtheta0vb0; dDIBL_Sft_dVb = pParam->B3SOIFDtheta0vb0 * Vds * dT3_dVb; Vthfd = model->B3SOIFDtype * pParam->B3SOIFDvth0 + pParam->B3SOIFDk1 * (sqrtPhis - sqrtPhi) - pParam->B3SOIFDk2 * Vbs0mos-Delt_vth-DeltVthw +(pParam->B3SOIFDk3 +pParam->B3SOIFDk3b * Vbs0mos) * tmp2 + DeltVthtemp - DIBL_Sft; T6 = pParam->B3SOIFDk3b * tmp2 - pParam->B3SOIFDk2 + pParam->B3SOIFDkt2 * TempRatio; dVthfd_dVd = -dDIBL_Sft_dVd; T7 = pParam->B3SOIFDk1 * dsqrtPhis_dVb - dDelt_vth_dVb - dDeltVthw_dVb + T6 - dDIBL_Sft_dVb; dVthfd_dVe = T7 * dVbs0mos_dVe; if (selfheat) dVthfd_dT = dDeltVthtemp_dT - dDelt_vth_dT - dDeltVthw_dT + T7 * dVbs0mos_dT; else dVthfd_dT = 0.0; /* Effective Vbs0 and Vbs0t for all Vgs */ T1 = Vthfd - Vgs_eff - DELT_Vbs0eff; T2 = sqrt(T1 * T1 + DELT_Vbs0eff * DELT_Vbs0eff ); Vbs0teff = Vbs0t - 0.5 * (T1 + T2); dVbs0teff_dVg = 0.5 * (1 + T1/T2) * dVgs_eff_dVg; dVbs0teff_dVd = - 0.5 * (1 + T1 / T2) * dVthfd_dVd; dVbs0teff_dVe = - 0.5 * (1 + T1 / T2) * dVthfd_dVe; if (selfheat) dVbs0teff_dT = dVbs0t_dT - 0.5 * (1 + T1 / T2) * dVthfd_dT; else dVbs0teff_dT = 0.0; /* Calculate nfb */ T3 = 1 / (K1 * K1); T4 = pParam->B3SOIFDkb3 * Cbox / model->B3SOIFDcox; T8 = sqrt(phi - Vbs0mos); T5 = sqrt(1 + 4 * T3 * (phi + K1 * T8 - Vbs0mos)); T6 = 1 + T4 * T5; Nfb = model->B3SOIFDnfb = 1 / T6; T7 = 2 * T3 * T4 * Nfb * Nfb / T5 * (0.5 * K1 / T8 + 1); Vbs0eff = Vbs0 - Nfb * 0.5 * (T1 + T2); dVbs0eff_dVg = Nfb * 0.5 * (1 + T1/T2) * dVgs_eff_dVg; dVbs0eff_dVd = - Nfb * 0.5 * (1 + T1 / T2) * dVthfd_dVd; dVbs0eff_dVe = dVbs0_dVe - Nfb * 0.5 * (1 + T1 / T2) * dVthfd_dVe - T7 * 0.5 * (T1 + T2) * dVbs0mos_dVe; if (selfheat) dVbs0eff_dT = dVbs0_dT - Nfb * 0.5 * (1 + T1 / T2) * dVthfd_dT - T7 * 0.5 * (T1 + T2) * dVbs0mos_dT; else dVbs0eff_dT = 0.0; /* Simple check of Vbs */ /* Prepare Vbsdio */ Vbs = Vbsdio = Vbs0eff; dVbsdio_dVg = dVbs0eff_dVg; dVbsdio_dVd = dVbs0eff_dVd; dVbsdio_dVe = dVbs0eff_dVe; dVbsdio_dT = dVbs0eff_dT; dVbsdio_dVb = 0.0; /* Prepare Vbseff */ T1 = Vbs0teff - Vbsdio - DELT_Vbsmos; T2 = sqrt(T1 * T1 + DELT_Vbsmos * DELT_Vbsmos); T3 = 0.5 * (T1 + T2); T5 = 0.5 * (1 + T1/T2); dT3_dVg = T5 * (dVbs0teff_dVg - dVbsdio_dVg); dT3_dVd = T5 * (dVbs0teff_dVd - dVbsdio_dVd); dT3_dVb = - T5 * dVbsdio_dVb; dT3_dVe = T5 * (dVbs0teff_dVe - dVbsdio_dVe); if (selfheat) dT3_dT = T5 * (dVbs0teff_dT - dVbsdio_dT); else dT3_dT = 0.0; T4 = T3 * model->B3SOIFDcsieff / model->B3SOIFDqsieff; Vbsmos = Vbsdio - 0.5 * T3 * T4; dVbsmos_dVg = dVbsdio_dVg - T4 * dT3_dVg; dVbsmos_dVd = dVbsdio_dVd - T4 * dT3_dVd; dVbsmos_dVb = dVbsdio_dVb - T4 * dT3_dVb; dVbsmos_dVe = dVbsdio_dVe - T4 * dT3_dVe; if (selfheat) dVbsmos_dT = dVbsdio_dT - T4 * dT3_dT; else dVbsmos_dT = 0.0; /* Prepare Vcs */ Vcs = Vbsdio - Vbs0eff; dVcs_dVb = dVbsdio_dVb; dVcs_dVg = dVbsdio_dVg - dVbs0eff_dVg; dVcs_dVd = dVbsdio_dVd - dVbs0eff_dVd; dVcs_dVe = dVbsdio_dVe - dVbs0eff_dVe; dVcs_dT = dVbsdio_dT - dVbs0eff_dT; /* Check Vps */ /* Note : if Vps is less Vbs0eff => non-physical */ T1 = Vps - Vbs0eff + DELT_Vbs0dio; T2 = sqrt(T1 * T1 + DELT_Vbs0dio * DELT_Vbs0dio); T3 = 0.5 * (1 + T1/T2); Vpsdio = Vbs0eff + 0.5 * (T1 + T2); dVpsdio_dVg = (1 - T3) * dVbs0eff_dVg; dVpsdio_dVd = (1 - T3) * dVbs0eff_dVd; dVpsdio_dVe = (1 - T3) * dVbs0eff_dVe; if (selfheat) dVpsdio_dT = (1 - T3) * dVbs0eff_dT; else dVpsdio_dT = 0.0; dVpsdio_dVp = T3; Vbp = Vbsdio - Vpsdio; dVbp_dVb = dVbsdio_dVb; dVbp_dVg = dVbsdio_dVg - dVpsdio_dVg; dVbp_dVd = dVbsdio_dVd - dVpsdio_dVd; dVbp_dVe = dVbsdio_dVe - dVpsdio_dVe; dVbp_dT = dVbsdio_dT - dVpsdio_dT; dVbp_dVp = - dVpsdio_dVp; here->B3SOIFDvbsdio = Vbsdio; here->B3SOIFDvbs0eff = Vbs0eff; T1 = phi - pParam->B3SOIFDdelp; T2 = T1 - Vbsmos - DELT_Vbseff; T3 = sqrt(T2 * T2 + 4.0 * DELT_Vbseff * T1); Vbseff = T1 - 0.5 * (T2 + T3); T4 = 0.5 * (1 + T2/T3); dVbseff_dVg = T4 * dVbsmos_dVg; dVbseff_dVd = T4 * dVbsmos_dVd; dVbseff_dVb = T4 * dVbsmos_dVb; dVbseff_dVe = T4 * dVbsmos_dVe; if (selfheat) dVbseff_dT = T4 * dVbsmos_dT; else dVbseff_dT = 0.0; here->B3SOIFDvbseff = Vbseff; Phis = phi - Vbseff; dPhis_dVb = -1; sqrtPhis = sqrt(Phis); dsqrtPhis_dVb = -0.5 / sqrtPhis ; Xdep = Xdep0 * sqrtPhis / sqrtPhi; dXdep_dVb = (Xdep0 / sqrtPhi) * dsqrtPhis_dVb; /* Vth Calculation */ T3 = sqrt(Xdep); T0 = pParam->B3SOIFDdvt2 * Vbseff; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->B3SOIFDdvt2 ; } else /* Added to avoid any discontinuity problems caused by dvt2 */ { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->B3SOIFDdvt2 * T4 * T4 ; } lt1 = model->B3SOIFDfactor1 * T3 * T1; dlt1_dVb =model->B3SOIFDfactor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * T2); T0 = pParam->B3SOIFDdvt2w * Vbseff; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->B3SOIFDdvt2w ; } else /* Added to avoid any discontinuity problems caused by dvt2w */ { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->B3SOIFDdvt2w * T4 * T4 ; } ltw= model->B3SOIFDfactor1 * T3 * T1; dltw_dVb=model->B3SOIFDfactor1*(0.5 / T3 * T1 * dXdep_dVb + T3 * T2); T0 = -0.5 * pParam->B3SOIFDdvt1 * Leff / lt1; if (T0 > -EXP_THRESHOLD) { T1 = exp(T0); Theta0 = T1 * (1.0 + 2.0 * T1); dT1_dVb = -T0 / lt1 * T1 * dlt1_dVb; dTheta0_dVb = (1.0 + 4.0 * T1) * dT1_dVb; } else { T1 = MIN_EXP; Theta0 = T1 * (1.0 + 2.0 * T1); dTheta0_dVb = 0.0; } here->B3SOIFDthetavth = pParam->B3SOIFDdvt0 * Theta0; Delt_vth = here->B3SOIFDthetavth * V0; dDelt_vth_dVb = pParam->B3SOIFDdvt0 * dTheta0_dVb * V0; if (selfheat) dDelt_vth_dT = here->B3SOIFDthetavth * dvbi_dT; else dDelt_vth_dT = 0.0; T0 = -0.5 * pParam->B3SOIFDdvt1w * pParam->B3SOIFDweff * Leff / ltw; if (T0 > -EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 * (1.0 + 2.0 * T1); dT1_dVb = -T0 / ltw * T1 * dltw_dVb; dT2_dVb = (1.0 + 4.0 * T1) * dT1_dVb; } else { T1 = MIN_EXP; T2 = T1 * (1.0 + 2.0 * T1); dT2_dVb = 0.0; } T0 = pParam->B3SOIFDdvt0w * T2; DeltVthw = T0 * V0; dDeltVthw_dVb = pParam->B3SOIFDdvt0w * dT2_dVb * V0; if (selfheat) dDeltVthw_dT = T0 * dvbi_dT; else dDeltVthw_dT = 0.0; T0 = sqrt(1.0 + pParam->B3SOIFDnlx / Leff); T1 = (pParam->B3SOIFDkt1 + pParam->B3SOIFDkt1l / Leff + pParam->B3SOIFDkt2 * Vbseff); DeltVthtemp = pParam->B3SOIFDk1 * (T0 - 1.0) * sqrtPhi + T1 * TempRatio; if (selfheat) dDeltVthtemp_dT = T1 / model->B3SOIFDtnom; else dDeltVthtemp_dT = 0.0; tmp2 = model->B3SOIFDtox * phi / (pParam->B3SOIFDweff + pParam->B3SOIFDw0); T3 = pParam->B3SOIFDeta0 + pParam->B3SOIFDetab * Vbseff; if (T3 < 1.0e-4) /* avoid discontinuity problems caused by etab */ { T9 = 1.0 / (3.0 - 2.0e4 * T3); T3 = (2.0e-4 - T3) * T9; T4 = T9 * T9 * pParam->B3SOIFDetab; dT3_dVb = T4 ; } else { dT3_dVb = pParam->B3SOIFDetab ; } DIBL_Sft = T3 * pParam->B3SOIFDtheta0vb0 * Vds; dDIBL_Sft_dVd = pParam->B3SOIFDtheta0vb0 * T3; dDIBL_Sft_dVb = pParam->B3SOIFDtheta0vb0 * Vds * dT3_dVb; Vth = model->B3SOIFDtype * pParam->B3SOIFDvth0 + pParam->B3SOIFDk1 * (sqrtPhis - sqrtPhi) - pParam->B3SOIFDk2 * Vbseff- Delt_vth - DeltVthw +(pParam->B3SOIFDk3 + pParam->B3SOIFDk3b * Vbseff) * tmp2 + DeltVthtemp - DIBL_Sft; here->B3SOIFDvon = Vth; T6 = pParam->B3SOIFDk3b * tmp2 - pParam->B3SOIFDk2 + pParam->B3SOIFDkt2 * TempRatio; dVth_dVb = pParam->B3SOIFDk1 * dsqrtPhis_dVb - dDelt_vth_dVb - dDeltVthw_dVb + T6 - dDIBL_Sft_dVb; /* this is actually dVth_dVbseff */ dVth_dVd = -dDIBL_Sft_dVd; if (selfheat) dVth_dT = dDeltVthtemp_dT - dDelt_vth_dT - dDeltVthw_dT; else dVth_dT = 0.0; /* Calculate n */ T2 = pParam->B3SOIFDnfactor * EPSSI / Xdep; dT2_dVb = - T2 / Xdep * dXdep_dVb; T3 = pParam->B3SOIFDcdsc + pParam->B3SOIFDcdscb * Vbseff + pParam->B3SOIFDcdscd * Vds; dT3_dVb = pParam->B3SOIFDcdscb; dT3_dVd = pParam->B3SOIFDcdscd; T4 = (T2 + T3 * Theta0 + pParam->B3SOIFDcit) / model->B3SOIFDcox; dT4_dVb = (dT2_dVb + Theta0 * dT3_dVb + dTheta0_dVb * T3) / model->B3SOIFDcox; dT4_dVd = Theta0 * dT3_dVd / model->B3SOIFDcox; if (T4 >= -0.5) { n = 1.0 + T4; dn_dVb = dT4_dVb; dn_dVd = dT4_dVd; } else /* avoid discontinuity problems caused by T4 */ { T0 = 1.0 / (3.0 + 8.0 * T4); n = (1.0 + 3.0 * T4) * T0; T0 *= T0; dn_dVb = T0 * dT4_dVb; dn_dVd = T0 * dT4_dVd; } /* Effective Vgst (Vgsteff) Calculation */ Vgst = Vgs_eff - Vth; T10 = 2.0 * n * Vtm; VgstNVt = Vgst / T10; ExpArg = (2.0 * pParam->B3SOIFDvoff - Vgst) / T10; /* MCJ: Very small Vgst */ if (VgstNVt > EXP_THRESHOLD) { Vgsteff = Vgst; /* T0 is dVgsteff_dVbseff */ T0 = -dVth_dVb; dVgsteff_dVg = dVgs_eff_dVg + T0 * dVbseff_dVg; dVgsteff_dVd = -dVth_dVd + T0 * dVbseff_dVd; dVgsteff_dVb = T0 * dVbseff_dVb; dVgsteff_dVe = T0 * dVbseff_dVe; if (selfheat) dVgsteff_dT = -dVth_dT + T0 * dVbseff_dT; else dVgsteff_dT = 0.0; } else if (ExpArg > EXP_THRESHOLD) { T0 = (Vgst - pParam->B3SOIFDvoff) / (n * Vtm); ExpVgst = exp(T0); Vgsteff = Vtm * pParam->B3SOIFDcdep0 / model->B3SOIFDcox * ExpVgst; T3 = Vgsteff / (n * Vtm) ; /* T1 is dVgsteff_dVbseff */ T1 = -T3 * (dVth_dVb + T0 * Vtm * dn_dVb); dVgsteff_dVg = T3 * dVgs_eff_dVg + T1 * dVbseff_dVg; dVgsteff_dVd = -T3 * (dVth_dVd + T0 * Vtm * dn_dVd) + T1 * dVbseff_dVd; dVgsteff_dVe = T1 * dVbseff_dVe; dVgsteff_dVb = T1 * dVbseff_dVb; if (selfheat) dVgsteff_dT = -T3 * (dVth_dT + T0 * dVtm_dT * n) + Vgsteff / Temp + T1 * dVbseff_dT; else dVgsteff_dT = 0.0; } else { ExpVgst = exp(VgstNVt); T1 = T10 * log(1.0 + ExpVgst); dT1_dVg = ExpVgst / (1.0 + ExpVgst); dT1_dVb = -dT1_dVg * (dVth_dVb + Vgst / n * dn_dVb) + T1 / n * dn_dVb; dT1_dVd = -dT1_dVg * (dVth_dVd + Vgst / n * dn_dVd) + T1 / n * dn_dVd; T3 = (1.0 / Temp); if (selfheat) dT1_dT = -dT1_dVg * (dVth_dT + Vgst * T3) + T1 * T3; else dT1_dT = 0.0; dT2_dVg = -model->B3SOIFDcox / (Vtm * pParam->B3SOIFDcdep0) * exp(ExpArg); T2 = 1.0 - T10 * dT2_dVg; dT2_dVd = -dT2_dVg * (dVth_dVd - 2.0 * Vtm * ExpArg * dn_dVd) + (T2 - 1.0) / n * dn_dVd; dT2_dVb = -dT2_dVg * (dVth_dVb - 2.0 * Vtm * ExpArg * dn_dVb) + (T2 - 1.0) / n * dn_dVb; if (selfheat) dT2_dT = -dT2_dVg * (dVth_dT - ExpArg * T10 * T3); else dT2_dT = 0.0; Vgsteff = T1 / T2; T3 = T2 * T2; /* T4 is dVgsteff_dVbseff */ T4 = (T2 * dT1_dVb - T1 * dT2_dVb) / T3; dVgsteff_dVb = T4 * dVbseff_dVb; dVgsteff_dVe = T4 * dVbseff_dVe; dVgsteff_dVg = (T2 * dT1_dVg - T1 * dT2_dVg) / T3 * dVgs_eff_dVg + T4 * dVbseff_dVg; dVgsteff_dVd = (T2 * dT1_dVd - T1 * dT2_dVd) / T3 + T4 * dVbseff_dVd; if (selfheat) dVgsteff_dT = (T2 * dT1_dT - T1 * dT2_dT) / T3 + T4 * dVbseff_dT; else dVgsteff_dT = 0.0; } Vgst2Vtm = Vgsteff + 2.0 * Vtm; if (selfheat) dVgst2Vtm_dT = 2.0 * dVtm_dT; else dVgst2Vtm_dT = 0.0; /* Calculate Effective Channel Geometry */ T9 = sqrtPhis - sqrtPhi; Weff = pParam->B3SOIFDweff - 2.0 * (pParam->B3SOIFDdwg * Vgsteff + pParam->B3SOIFDdwb * T9); dWeff_dVg = -2.0 * pParam->B3SOIFDdwg; dWeff_dVb = -2.0 * pParam->B3SOIFDdwb * dsqrtPhis_dVb; if (Weff < 2.0e-8) /* to avoid the discontinuity problem due to Weff*/ { T0 = 1.0 / (6.0e-8 - 2.0 * Weff); Weff = 2.0e-8 * (4.0e-8 - Weff) * T0; T0 *= T0 * 4.0e-16; dWeff_dVg *= T0; dWeff_dVb *= T0; } T0 = pParam->B3SOIFDprwg * Vgsteff + pParam->B3SOIFDprwb * T9; if (T0 >= -0.9) { Rds = rds0 * (1.0 + T0); dRds_dVg = rds0 * pParam->B3SOIFDprwg; dRds_dVb = rds0 * pParam->B3SOIFDprwb * dsqrtPhis_dVb; if (selfheat) dRds_dT = (1.0 + T0) * drds0_dT; else dRds_dT = 0.0; } else /* to avoid the discontinuity problem due to prwg and prwb*/ { T1 = 1.0 / (17.0 + 20.0 * T0); Rds = rds0 * (0.8 + T0) * T1; T1 *= T1; dRds_dVg = rds0 * pParam->B3SOIFDprwg * T1; dRds_dVb = rds0 * pParam->B3SOIFDprwb * dsqrtPhis_dVb * T1; if (selfheat) dRds_dT = (0.8 + T0) * T1 * drds0_dT; else dRds_dT = 0.0; } /* Calculate Abulk */ if (pParam->B3SOIFDa0 == 0.0) { Abulk0 = Abulk = dAbulk0_dVb = dAbulk_dVg = dAbulk_dVb = 0.0; } else { T1 = 0.5 * pParam->B3SOIFDk1 / sqrtPhi; T9 = sqrt(model->B3SOIFDxj * Xdep); tmp1 = Leff + 2.0 * T9; T5 = Leff / tmp1; tmp2 = pParam->B3SOIFDa0 * T5; tmp3 = pParam->B3SOIFDweff + pParam->B3SOIFDb1; tmp4 = pParam->B3SOIFDb0 / tmp3; T2 = tmp2 + tmp4; dT2_dVb = -T9 * tmp2 / tmp1 / Xdep * dXdep_dVb; T6 = T5 * T5; T7 = T5 * T6; Abulk0 = T1 * T2; dAbulk0_dVb = T1 * dT2_dVb; T8 = pParam->B3SOIFDags * pParam->B3SOIFDa0 * T7; dAbulk_dVg = -T1 * T8; Abulk = Abulk0 + dAbulk_dVg * Vgsteff; dAbulk_dVb = dAbulk0_dVb - T8 * Vgsteff * 3.0 * T1 * dT2_dVb / tmp2; } if (Abulk0 < 0.01) { T9 = 1.0 / (3.0 - 200.0 * Abulk0); Abulk0 = (0.02 - Abulk0) * T9; dAbulk0_dVb *= T9 * T9; } if (Abulk < 0.01) { T9 = 1.0 / (3.0 - 200.0 * Abulk); Abulk = (0.02 - Abulk) * T9; dAbulk_dVb *= T9 * T9; } T2 = pParam->B3SOIFDketa * Vbseff; if (T2 >= -0.9) { T0 = 1.0 / (1.0 + T2); dT0_dVb = -pParam->B3SOIFDketa * T0 * T0 ; } else /* added to avoid the problems caused by Keta */ { T1 = 1.0 / (0.8 + T2); T0 = (17.0 + 20.0 * T2) * T1; dT0_dVb = -pParam->B3SOIFDketa * T1 * T1 ; } dAbulk_dVg *= T0; dAbulk_dVb = dAbulk_dVb * T0 + Abulk * dT0_dVb; dAbulk0_dVb = dAbulk0_dVb * T0 + Abulk0 * dT0_dVb; Abulk *= T0; Abulk0 *= T0; Abulk += 1; Abulk0 += 1; /* Prepare Abeff */ T0 = pParam->B3SOIFDabp * Vgst2Vtm; T1 = 1 - Vcs / T0 - DELT_Xcsat; T2 = sqrt(T1 * T1 + DELT_Xcsat * DELT_Xcsat); T3 = 1 - 0.5 * (T1 + T2); T5 = -0.5 * (1 + T1 / T2); dT1_dVg = Vcs / Vgst2Vtm / T0; dT3_dVg = T5 * dT1_dVg; dT1_dVc = - 1 / T0; dT3_dVc = T5 * dT1_dVc; Xcsat = pParam->B3SOIFDmxc * T3 * T3 + (1 - pParam->B3SOIFDmxc)*T3; T4 = 2 * pParam->B3SOIFDmxc * T3 + (1 - pParam->B3SOIFDmxc); dXcsat_dVg = T4 * dT3_dVg; dXcsat_dVc = T4 * dT3_dVc; Abeff = Xcsat * Abulk + (1 - Xcsat) * model->B3SOIFDadice; T0 = Xcsat * dAbulk_dVg + Abulk * dXcsat_dVg; dAbeff_dVg = T0 - model->B3SOIFDadice * dXcsat_dVg; dAbeff_dVb = Xcsat * dAbulk_dVb; dAbeff_dVc = (Abulk - model->B3SOIFDadice) * dXcsat_dVc; here->B3SOIFDabeff = Abeff; /* Mobility calculation */ if (model->B3SOIFDmobMod == 1) { T0 = Vgsteff + Vth + Vth; T2 = ua + uc * Vbseff; T3 = T0 / model->B3SOIFDtox; T5 = T3 * (T2 + ub * T3); dDenomi_dVg = (T2 + 2.0 * ub * T3) / model->B3SOIFDtox; dDenomi_dVd = dDenomi_dVg * 2 * dVth_dVd; dDenomi_dVb = dDenomi_dVg * 2 * dVth_dVb + uc * T3 ; if (selfheat) dDenomi_dT = dDenomi_dVg * 2 * dVth_dT + (dua_dT + Vbseff * duc_dT + dub_dT * T3 ) * T3; else dDenomi_dT = 0.0; } else if (model->B3SOIFDmobMod == 2) { T5 = Vgsteff / model->B3SOIFDtox * (ua + uc * Vbseff + ub * Vgsteff / model->B3SOIFDtox); dDenomi_dVg = (ua + uc * Vbseff + 2.0 * ub * Vgsteff / model->B3SOIFDtox) / model->B3SOIFDtox; dDenomi_dVd = 0.0; dDenomi_dVb = Vgsteff * uc / model->B3SOIFDtox ; if (selfheat) dDenomi_dT = Vgsteff / model->B3SOIFDtox * (dua_dT + Vbseff * duc_dT + dub_dT * Vgsteff / model->B3SOIFDtox); else dDenomi_dT = 0.0; } else /* mobMod == 3 */ { T0 = Vgsteff + Vth + Vth; T2 = 1.0 + uc * Vbseff; T3 = T0 / model->B3SOIFDtox; T4 = T3 * (ua + ub * T3); T5 = T4 * T2; dDenomi_dVg = (ua + 2.0 * ub * T3) * T2 / model->B3SOIFDtox; dDenomi_dVd = dDenomi_dVg * 2.0 * dVth_dVd; dDenomi_dVb = dDenomi_dVg * 2.0 * dVth_dVb + uc * T4 ; if (selfheat) dDenomi_dT = dDenomi_dVg * 2.0 * dVth_dT + (dua_dT + dub_dT * T3) * T3 * T2 + T4 * Vbseff * duc_dT; else dDenomi_dT = 0.0; } if (T5 >= -0.8) { Denomi = 1.0 + T5; } else /* Added to avoid the discontinuity problem caused by ua and ub*/ { T9 = 1.0 / (7.0 + 10.0 * T5); Denomi = (0.6 + T5) * T9; T9 *= T9; dDenomi_dVg *= T9; dDenomi_dVd *= T9; dDenomi_dVb *= T9; if (selfheat) dDenomi_dT *= T9; else dDenomi_dT = 0.0; } here->B3SOIFDueff = ueff = u0temp / Denomi; T9 = -ueff / Denomi; dueff_dVg = T9 * dDenomi_dVg; dueff_dVd = T9 * dDenomi_dVd; dueff_dVb = T9 * dDenomi_dVb; if (selfheat) dueff_dT = T9 * dDenomi_dT + du0temp_dT / Denomi; else dueff_dT = 0.0; /* Saturation Drain Voltage Vdsat */ WVCox = Weff * vsattemp * model->B3SOIFDcox; WVCoxRds = WVCox * Rds; /* dWVCoxRds_dT = WVCox * dRds_dT + Weff * model->B3SOIFDcox * Rds * dvsattemp_dT; */ Esat = 2.0 * vsattemp / ueff; EsatL = Esat * Leff; T0 = -EsatL /ueff; dEsatL_dVg = T0 * dueff_dVg; dEsatL_dVd = T0 * dueff_dVd; dEsatL_dVb = T0 * dueff_dVb; if (selfheat) dEsatL_dT = T0 * dueff_dT + EsatL / vsattemp * dvsattemp_dT; else dEsatL_dT = 0.0; /* Sqrt() */ a1 = pParam->B3SOIFDa1; if (a1 == 0.0) { Lambda = pParam->B3SOIFDa2; dLambda_dVg = 0.0; } else if (a1 > 0.0) /* Added to avoid the discontinuity problem caused by a1 and a2 (Lambda) */ { T0 = 1.0 - pParam->B3SOIFDa2; T1 = T0 - pParam->B3SOIFDa1 * Vgsteff - 0.0001; T2 = sqrt(T1 * T1 + 0.0004 * T0); Lambda = pParam->B3SOIFDa2 + T0 - 0.5 * (T1 + T2); dLambda_dVg = 0.5 * pParam->B3SOIFDa1 * (1.0 + T1 / T2); } else { T1 = pParam->B3SOIFDa2 + pParam->B3SOIFDa1 * Vgsteff - 0.0001; T2 = sqrt(T1 * T1 + 0.0004 * pParam->B3SOIFDa2); Lambda = 0.5 * (T1 + T2); dLambda_dVg = 0.5 * pParam->B3SOIFDa1 * (1.0 + T1 / T2); } if (Rds > 0) { tmp2 = dRds_dVg / Rds + dWeff_dVg / Weff; tmp3 = dRds_dVb / Rds + dWeff_dVb / Weff; } else { tmp2 = dWeff_dVg / Weff; tmp3 = dWeff_dVb / Weff; } if ((Rds == 0.0) && (Lambda == 1.0)) { T0 = 1.0 / (Abeff * EsatL + Vgst2Vtm); tmp1 = 0.0; T1 = T0 * T0; T2 = Vgst2Vtm * T0; T3 = EsatL * Vgst2Vtm; Vdsat = T3 * T0; dT0_dVg = -(Abeff * dEsatL_dVg + EsatL * dAbeff_dVg + 1.0) * T1; dT0_dVd = -(Abeff * dEsatL_dVd) * T1; dT0_dVb = -(Abeff * dEsatL_dVb + EsatL * dAbeff_dVb) * T1; dT0_dVc = 0.0; if (selfheat) dT0_dT = -(Abeff * dEsatL_dT + dVgst2Vtm_dT) * T1; else dT0_dT = 0.0; dVdsat_dVg = T3 * dT0_dVg + T2 * dEsatL_dVg + EsatL * T0; dVdsat_dVd = T3 * dT0_dVd + T2 * dEsatL_dVd; dVdsat_dVb = T3 * dT0_dVb + T2 * dEsatL_dVb; dVdsat_dVc = 0.0; if (selfheat) dVdsat_dT = T3 * dT0_dT + T2 * dEsatL_dT + EsatL * T0 * dVgst2Vtm_dT; else dVdsat_dT = 0.0; } else { tmp1 = dLambda_dVg / (Lambda * Lambda); T9 = Abeff * WVCoxRds; T8 = Abeff * T9; T7 = Vgst2Vtm * T9; T6 = Vgst2Vtm * WVCoxRds; T0 = 2.0 * Abeff * (T9 - 1.0 + 1.0 / Lambda); dT0_dVg = 2.0 * (T8 * tmp2 - Abeff * tmp1 + (2.0 * T9 + 1.0 / Lambda - 1.0) * dAbeff_dVg); /* dT0_dVb = 2.0 * (T8 * tmp3 this is equivalent to one below, but simpler + (2.0 * T9 + 1.0 / Lambda - 1.0) * dAbeff_dVg); */ dT0_dVb = 2.0 * (T8 * (2.0 / Abeff * dAbeff_dVb + tmp3) + (1.0 / Lambda - 1.0) * dAbeff_dVb); dT0_dVd = 0.0; dT0_dVc = 0.0; if (selfheat) { tmp4 = dRds_dT / Rds + dvsattemp_dT / vsattemp; dT0_dT = 2.0 * T8 * tmp4; } else tmp4 = dT0_dT = 0.0; T1 = Vgst2Vtm * (2.0 / Lambda - 1.0) + Abeff * EsatL + 3.0 * T7; dT1_dVg = (2.0 / Lambda - 1.0) - 2.0 * Vgst2Vtm * tmp1 + Abeff * dEsatL_dVg + EsatL * dAbeff_dVg + 3.0 * (T9 + T7 * tmp2 + T6 * dAbeff_dVg); dT1_dVb = Abeff * dEsatL_dVb + EsatL * dAbeff_dVb + 3.0 * (T6 * dAbeff_dVb + T7 * tmp3); dT1_dVd = Abeff * dEsatL_dVd; dT1_dVc = 0.0; if (selfheat) { tmp4 += dVgst2Vtm_dT / Vgst2Vtm; dT1_dT = (2.0 / Lambda - 1.0) * dVgst2Vtm_dT + Abeff * dEsatL_dT + 3.0 * T7 * tmp4; } else dT1_dT = 0.0; T2 = Vgst2Vtm * (EsatL + 2.0 * T6); dT2_dVg = EsatL + Vgst2Vtm * dEsatL_dVg + T6 * (4.0 + 2.0 * Vgst2Vtm * tmp2); dT2_dVb = Vgst2Vtm * (dEsatL_dVb + 2.0 * T6 * tmp3); dT2_dVd = Vgst2Vtm * dEsatL_dVd; if (selfheat) dT2_dT = Vgst2Vtm * dEsatL_dT + EsatL * dVgst2Vtm_dT + 2.0 * T6 * (dVgst2Vtm_dT + Vgst2Vtm * tmp4); else dT2_dT = 0.0; T3 = sqrt(T1 * T1 - 2.0 * T0 * T2); Vdsat = (T1 - T3) / T0; dVdsat_dVg = (dT1_dVg - (T1 * dT1_dVg - dT0_dVg * T2 - T0 * dT2_dVg) / T3 - Vdsat * dT0_dVg) / T0; dVdsat_dVb = (dT1_dVb - (T1 * dT1_dVb - dT0_dVb * T2 - T0 * dT2_dVb) / T3 - Vdsat * dT0_dVb) / T0; dVdsat_dVd = (dT1_dVd - (T1 * dT1_dVd - T0 * dT2_dVd) / T3) / T0; dVdsat_dVc = 0.0; if (selfheat) dVdsat_dT = (dT1_dT - (T1 * dT1_dT - dT0_dT * T2 - T0 * dT2_dT) / T3 - Vdsat * dT0_dT) / T0; else dVdsat_dT = 0.0; } here->B3SOIFDvdsat = Vdsat; /* Vdsatii for impact ionization */ if (pParam->B3SOIFDaii > 0.0) { if (pParam->B3SOIFDcii != 0.0) { T0 = pParam->B3SOIFDcii / sqrt(3.0) + pParam->B3SOIFDdii; /* Hard limit Vds to T0 => T4 i.e. limit T0 to 3.0 */ T1 = Vds - T0 - 0.1; T2 = sqrt(T1 * T1 + 0.4); T3 = T0 + 0.5 * (T1 + T2); dT3_dVd = 0.5 * (1.0 + T1/T2); T4 = T3 - pParam->B3SOIFDdii; T5 = pParam->B3SOIFDcii / T4; T0 = T5 * T5; dT0_dVd = - 2 * T0 / T4 * dT3_dVd; } else { T0 = dT0_dVd = 0.0; } T0 += 1.0; T3 = pParam->B3SOIFDaii + pParam->B3SOIFDbii / Leff; T4 = 1.0 / (T0 * Vgsteff + T3 * EsatL); T5 = -T4 * T4; T6 = Vgsteff * T4; T7 = EsatL * Vgsteff; Vdsatii = T7 * T4; dT4_dVg = T5 * (T0 + T3 * dEsatL_dVg); dT4_dVb = T5 * T3 * dEsatL_dVb; dT4_dVd = T5 * (Vgsteff * dT0_dVd + T3 * dEsatL_dVd); if (selfheat) dT4_dT = T5 * (T3 * dEsatL_dT); else dT4_dT = 0.0; T8 = T4 * Vgsteff; dVdsatii_dVg = T7 * dT4_dVg + T4 * (EsatL + Vgsteff * dEsatL_dVg); dVdsatii_dVb = T7 * dT4_dVb + T8 * dEsatL_dVb; dVdsatii_dVd = T7 * dT4_dVd + T8 * dEsatL_dVd; if (selfheat) dVdsatii_dT = T7 * dT4_dT + T8 * dEsatL_dT; else dVdsatii_dT = 0.0; } else { Vdsatii = Vdsat; dVdsatii_dVg = dVdsat_dVg; dVdsatii_dVb = dVdsat_dVb; dVdsatii_dVd = dVdsat_dVd; dVdsatii_dT = dVdsat_dT; } /* Effective Vds (Vdseff) Calculation */ T1 = Vdsat - Vds - pParam->B3SOIFDdelta; dT1_dVg = dVdsat_dVg; dT1_dVd = dVdsat_dVd - 1.0; dT1_dVb = dVdsat_dVb; dT1_dVc = dVdsat_dVc; dT1_dT = dVdsat_dT; T2 = sqrt(T1 * T1 + 4.0 * pParam->B3SOIFDdelta * Vdsat); T0 = T1 / T2; T3 = 2.0 * pParam->B3SOIFDdelta / T2; dT2_dVg = T0 * dT1_dVg + T3 * dVdsat_dVg; dT2_dVd = T0 * dT1_dVd + T3 * dVdsat_dVd; dT2_dVb = T0 * dT1_dVb + T3 * dVdsat_dVb; dT2_dVc = 0.0; if (selfheat) dT2_dT = T0 * dT1_dT + T3 * dVdsat_dT; else dT2_dT = 0.0; Vdseff = Vdsat - 0.5 * (T1 + T2); dVdseff_dVg = dVdsat_dVg - 0.5 * (dT1_dVg + dT2_dVg); dVdseff_dVd = dVdsat_dVd - 0.5 * (dT1_dVd + dT2_dVd); dVdseff_dVb = dVdsat_dVb - 0.5 * (dT1_dVb + dT2_dVb); dVdseff_dVc = 0.0; if (selfheat) dVdseff_dT = dVdsat_dT - 0.5 * (dT1_dT + dT2_dT); else dVdseff_dT = 0.0; if (Vdseff > Vds) Vdseff = Vds; /* This code is added to fixed the problem caused by computer precision when Vds is very close to Vdseff. */ diffVds = Vds - Vdseff; /* Effective Vdsii for Iii calculation */ T1 = Vdsatii - Vds - pParam->B3SOIFDdelta; T2 = sqrt(T1 * T1 + 4.0 * pParam->B3SOIFDdelta * Vdsatii); T0 = T1 / T2; T3 = 2.0 * pParam->B3SOIFDdelta / T2; T4 = T0 + T3; dT2_dVg = T4 * dVdsatii_dVg; dT2_dVd = T4 * dVdsatii_dVd - T0; dT2_dVb = T4 * dVdsatii_dVb; if (selfheat) dT2_dT = T4*dVdsatii_dT; else dT2_dT = 0.0; Vdseffii = Vdsatii - 0.5 * (T1 + T2); dVdseffii_dVg = 0.5 * (dVdsatii_dVg - dT2_dVg); dVdseffii_dVd = 0.5 * (dVdsatii_dVd - dT2_dVd + 1.0); dVdseffii_dVb = 0.5 * (dVdsatii_dVb - dT2_dVb); if (selfheat) dVdseffii_dT = 0.5 * (dVdsatii_dT - dT2_dT); else dVdseffii_dT = 0.0; diffVdsii = Vds - Vdseffii; /* Calculate VAsat */ tmp4 = 1.0 - 0.5 * Abeff * Vdsat / Vgst2Vtm; T9 = WVCoxRds * Vgsteff; T8 = T9 / Vgst2Vtm; T0 = EsatL + Vdsat + 2.0 * T9 * tmp4; T7 = 2.0 * WVCoxRds * tmp4; dT0_dVg = dEsatL_dVg + dVdsat_dVg + T7 * (1.0 + tmp2 * Vgsteff) - T8 * (Abeff * dVdsat_dVg - Abeff * Vdsat / Vgst2Vtm + Vdsat * dAbeff_dVg); dT0_dVb = dEsatL_dVb + dVdsat_dVb + T7 * tmp3 * Vgsteff - T8 * (dAbeff_dVb * Vdsat + Abeff * dVdsat_dVb); dT0_dVd = dEsatL_dVd + dVdsat_dVd - T8 * Abeff * dVdsat_dVd; dT0_dVc = 0.0; if (selfheat) { tmp4 = dRds_dT / Rds + dvsattemp_dT / vsattemp; dT0_dT = dEsatL_dT + dVdsat_dT + T7 * tmp4 * Vgsteff - T8 * (Abeff * dVdsat_dT - Abeff * Vdsat * dVgst2Vtm_dT / Vgst2Vtm); } else dT0_dT = 0.0; T9 = WVCoxRds * Abeff; T1 = 2.0 / Lambda - 1.0 + T9; dT1_dVg = -2.0 * tmp1 + WVCoxRds * (Abeff * tmp2 + dAbeff_dVg); dT1_dVb = dAbeff_dVb * WVCoxRds + T9 * tmp3; dT1_dVc = 0.0; if (selfheat) dT1_dT = T9 * tmp4; else dT1_dT = 0.0; Vasat = T0 / T1; dVasat_dVg = (dT0_dVg - Vasat * dT1_dVg) / T1; dVasat_dVb = (dT0_dVb - Vasat * dT1_dVb) / T1; dVasat_dVd = dT0_dVd / T1; dVasat_dVc = 0.0; if (selfheat) dVasat_dT = (dT0_dT - Vasat * dT1_dT) / T1; else dVasat_dT = 0.0; /* Calculate VACLM */ if ((pParam->B3SOIFDpclm > 0.0) && (diffVds > 1.0e-10)) { T0 = 1.0 / (pParam->B3SOIFDpclm * Abeff * pParam->B3SOIFDlitl); dT0_dVb = -T0 / Abeff * dAbeff_dVb; dT0_dVg = -T0 / Abeff * dAbeff_dVg; dT0_dVc = 0.0; T2 = Vgsteff / EsatL; T1 = Leff * (Abeff + T2); dT1_dVg = Leff * ((1.0 - T2 * dEsatL_dVg) / EsatL + dAbeff_dVg); dT1_dVb = Leff * (dAbeff_dVb - T2 * dEsatL_dVb / EsatL); dT1_dVd = -T2 * dEsatL_dVd / Esat; dT1_dVc = 0.0; if (selfheat) dT1_dT = -T2 * dEsatL_dT / Esat; else dT1_dT = 0.0; T9 = T0 * T1; VACLM = T9 * diffVds; dVACLM_dVg = T0 * dT1_dVg * diffVds - T9 * dVdseff_dVg + T1 * diffVds * dT0_dVg; dVACLM_dVb = (dT0_dVb * T1 + T0 * dT1_dVb) * diffVds - T9 * dVdseff_dVb; dVACLM_dVd = T0 * dT1_dVd * diffVds + T9 * (1.0 - dVdseff_dVd); dVACLM_dVc = 0.0; if (selfheat) dVACLM_dT = T0 * dT1_dT * diffVds - T9 * dVdseff_dT; else dVACLM_dT = 0.0; } else { VACLM = MAX_EXP; dVACLM_dVd = dVACLM_dVg = dVACLM_dVb = dVACLM_dVc = dVACLM_dT = 0.0; } /* Calculate VADIBL */ if (pParam->B3SOIFDthetaRout > 0.0) { T8 = Abeff * Vdsat; T0 = Vgst2Vtm * T8; T1 = Vgst2Vtm + T8; dT0_dVg = Vgst2Vtm * Abeff * dVdsat_dVg + T8 + Vgst2Vtm * Vdsat * dAbeff_dVg; dT1_dVg = 1.0 + Abeff * dVdsat_dVg + Vdsat * dAbeff_dVg; dT1_dVb = dAbeff_dVb * Vdsat + Abeff * dVdsat_dVb; dT0_dVb = Vgst2Vtm * dT1_dVb; dT1_dVd = Abeff * dVdsat_dVd; dT0_dVd = Vgst2Vtm * dT1_dVd; dT0_dVc = dT1_dVc = 0.0; if (selfheat) { dT0_dT = dVgst2Vtm_dT * T8 + Abeff * Vgst2Vtm * dVdsat_dT; dT1_dT = dVgst2Vtm_dT + Abeff * dVdsat_dT; } else dT0_dT = dT1_dT = 0.0; T9 = T1 * T1; T2 = pParam->B3SOIFDthetaRout; VADIBL = (Vgst2Vtm - T0 / T1) / T2; dVADIBL_dVg = (1.0 - dT0_dVg / T1 + T0 * dT1_dVg / T9) / T2; dVADIBL_dVb = (-dT0_dVb / T1 + T0 * dT1_dVb / T9) / T2; dVADIBL_dVd = (-dT0_dVd / T1 + T0 * dT1_dVd / T9) / T2; dVADIBL_dVc = 0.0; if (selfheat) dVADIBL_dT = (dVgst2Vtm_dT - dT0_dT/T1 + T0*dT1_dT/T9) / T2; else dVADIBL_dT = 0.0; T7 = pParam->B3SOIFDpdiblb * Vbseff; if (T7 >= -0.9) { T3 = 1.0 / (1.0 + T7); VADIBL *= T3; dVADIBL_dVg *= T3; dVADIBL_dVb = (dVADIBL_dVb - VADIBL * pParam->B3SOIFDpdiblb) * T3; dVADIBL_dVd *= T3; dVADIBL_dVc *= T3; if (selfheat) dVADIBL_dT *= T3; else dVADIBL_dT = 0.0; } else /* Added to avoid the discontinuity problem caused by pdiblcb */ { T4 = 1.0 / (0.8 + T7); T3 = (17.0 + 20.0 * T7) * T4; dVADIBL_dVg *= T3; dVADIBL_dVb = dVADIBL_dVb * T3 - VADIBL * pParam->B3SOIFDpdiblb * T4 * T4; dVADIBL_dVd *= T3; dVADIBL_dVc *= T3; if (selfheat) dVADIBL_dT *= T3; else dVADIBL_dT = 0.0; VADIBL *= T3; } } else { VADIBL = MAX_EXP; dVADIBL_dVd = dVADIBL_dVg = dVADIBL_dVb = dVADIBL_dVc = dVADIBL_dT = 0.0; } /* Calculate VA */ T8 = pParam->B3SOIFDpvag / EsatL; T9 = T8 * Vgsteff; if (T9 > -0.9) { T0 = 1.0 + T9; dT0_dVg = T8 * (1.0 - Vgsteff * dEsatL_dVg / EsatL); dT0_dVb = -T9 * dEsatL_dVb / EsatL; dT0_dVd = -T9 * dEsatL_dVd / EsatL; if (selfheat) dT0_dT = -T9 * dEsatL_dT / EsatL; else dT0_dT = 0.0; } else /* Added to avoid the discontinuity problems caused by pvag */ { T1 = 1.0 / (17.0 + 20.0 * T9); T0 = (0.8 + T9) * T1; T1 *= T1; dT0_dVg = T8 * (1.0 - Vgsteff * dEsatL_dVg / EsatL) * T1; T9 *= T1 / EsatL; dT0_dVb = -T9 * dEsatL_dVb; dT0_dVd = -T9 * dEsatL_dVd; if (selfheat) dT0_dT = -T9 * dEsatL_dT; else dT0_dT = 0.0; } tmp1 = VACLM * VACLM; tmp2 = VADIBL * VADIBL; tmp3 = VACLM + VADIBL; T1 = VACLM * VADIBL / tmp3; tmp3 *= tmp3; dT1_dVg = (tmp1 * dVADIBL_dVg + tmp2 * dVACLM_dVg) / tmp3; dT1_dVd = (tmp1 * dVADIBL_dVd + tmp2 * dVACLM_dVd) / tmp3; dT1_dVb = (tmp1 * dVADIBL_dVb + tmp2 * dVACLM_dVb) / tmp3; dT1_dVc = 0.0; if (selfheat) dT1_dT = (tmp1 * dVADIBL_dT + tmp2 * dVACLM_dT ) / tmp3; else dT1_dT = 0.0; Va = Vasat + T0 * T1; dVa_dVg = dVasat_dVg + T1 * dT0_dVg + T0 * dT1_dVg; dVa_dVd = dVasat_dVd + T1 * dT0_dVd + T0 * dT1_dVd; dVa_dVb = dVasat_dVb + T1 * dT0_dVb + T0 * dT1_dVb; dVa_dVc = 0.0; if (selfheat) dVa_dT = dVasat_dT + T1 * dT0_dT + T0 * dT1_dT; else dVa_dT = 0.0; /* Calculate Ids */ CoxWovL = model->B3SOIFDcox * Weff / Leff; beta = ueff * CoxWovL; dbeta_dVg = CoxWovL * dueff_dVg + beta * dWeff_dVg / Weff; dbeta_dVd = CoxWovL * dueff_dVd; dbeta_dVb = CoxWovL * dueff_dVb + beta * dWeff_dVb / Weff; if (selfheat) dbeta_dT = CoxWovL * dueff_dT; else dbeta_dT = 0.0; T0 = 1.0 - 0.5 * Abeff * Vdseff / Vgst2Vtm; dT0_dVg = -0.5 * (Abeff * dVdseff_dVg - Abeff * Vdseff / Vgst2Vtm + Vdseff * dAbeff_dVg) / Vgst2Vtm; dT0_dVd = -0.5 * Abeff * dVdseff_dVd / Vgst2Vtm; dT0_dVb = -0.5 * (Abeff * dVdseff_dVb + dAbeff_dVb * Vdseff) / Vgst2Vtm; dT0_dVc = 0.0; if (selfheat) dT0_dT = -0.5 * (Abeff * dVdseff_dT - Abeff * Vdseff / Vgst2Vtm * dVgst2Vtm_dT) / Vgst2Vtm; else dT0_dT = 0.0; fgche1 = Vgsteff * T0; dfgche1_dVg = Vgsteff * dT0_dVg + T0; dfgche1_dVd = Vgsteff * dT0_dVd; dfgche1_dVb = Vgsteff * dT0_dVb; dfgche1_dVc = 0.0; if (selfheat) dfgche1_dT = Vgsteff * dT0_dT; else dfgche1_dT = 0.0; T9 = Vdseff / EsatL; fgche2 = 1.0 + T9; dfgche2_dVg = (dVdseff_dVg - T9 * dEsatL_dVg) / EsatL; dfgche2_dVd = (dVdseff_dVd - T9 * dEsatL_dVd) / EsatL; dfgche2_dVb = (dVdseff_dVb - T9 * dEsatL_dVb) / EsatL; dfgche2_dVc = 0.0; if (selfheat) dfgche2_dT = (dVdseff_dT - T9 * dEsatL_dT) / EsatL; else dfgche2_dT = 0.0; gche = beta * fgche1 / fgche2; dgche_dVg = (beta * dfgche1_dVg + fgche1 * dbeta_dVg - gche * dfgche2_dVg) / fgche2; dgche_dVd = (beta * dfgche1_dVd + fgche1 * dbeta_dVd - gche * dfgche2_dVd) / fgche2; dgche_dVb = (beta * dfgche1_dVb + fgche1 * dbeta_dVb - gche * dfgche2_dVb) / fgche2; dgche_dVc = 0.0; if (selfheat) dgche_dT = (beta * dfgche1_dT + fgche1 * dbeta_dT - gche * dfgche2_dT) / fgche2; else dgche_dT = 0.0; T0 = 1.0 + gche * Rds; T9 = Vdseff / T0; Idl = gche * T9; /* Whoa, these formulas for the derivatives of Idl are convoluted, but I verified them to be correct */ dIdl_dVg = (gche * dVdseff_dVg + T9 * dgche_dVg) / T0 - Idl * gche / T0 * dRds_dVg ; dIdl_dVd = (gche * dVdseff_dVd + T9 * dgche_dVd) / T0; dIdl_dVb = (gche * dVdseff_dVb + T9 * dgche_dVb - Idl * dRds_dVb * gche) / T0; dIdl_dVc = 0.0; if (selfheat) dIdl_dT = (gche * dVdseff_dT + T9 * dgche_dT - Idl * dRds_dT * gche) / T0; else dIdl_dT = 0.0; T9 = diffVds / Va; T0 = 1.0 + T9; here->B3SOIFDids = Ids = Idl * T0; Gm0 = T0 * dIdl_dVg - Idl * (dVdseff_dVg + T9 * dVa_dVg) / Va; Gds0 = T0 * dIdl_dVd + Idl * (1.0 - dVdseff_dVd - T9 * dVa_dVd) / Va; Gmb0 = T0 * dIdl_dVb - Idl * (dVdseff_dVb + T9 * dVa_dVb) / Va; Gmc = 0.0; if (selfheat) GmT0 = T0 * dIdl_dT - Idl * (dVdseff_dT + T9 * dVa_dT) / Va; else GmT0 = 0.0; /* This includes all dependencies from Vgsteff, Vbseff, Vcs */ Gm = Gm0 * dVgsteff_dVg + Gmb0 * dVbseff_dVg + Gmc * dVcs_dVg; Gmb = Gm0 * dVgsteff_dVb + Gmb0 * dVbseff_dVb + Gmc * dVcs_dVb; Gds = Gm0 * dVgsteff_dVd + Gmb0 * dVbseff_dVd + Gmc * dVcs_dVd + Gds0; Gme = Gm0 * dVgsteff_dVe + Gmb0 * dVbseff_dVe + Gmc * dVcs_dVe; if (selfheat) GmT = Gm0 * dVgsteff_dT + Gmb0 * dVbseff_dT + Gmc * dVcs_dT + GmT0; else GmT = 0.0; /* calculate substrate current Iii */ Giig = Giib = Giid = Giie = GiiT = 0.0; here->B3SOIFDiii = Iii = 0.0; Idgidl = Gdgidld = Gdgidlg = 0.0; Isgidl = Gsgidlg = 0; here->B3SOIFDibs = Ibs = 0.0; here->B3SOIFDibd = Ibd = 0.0; here->B3SOIFDic = Ic = 0.0; Gjsb = Gjsd = GjsT = 0.0; Gjdb = Gjdd = GjdT = 0.0; Gcd = Gcb = GcT = 0.0; here->B3SOIFDibp = Ibp = 0.0; here->B3SOIFDgbpbs = here->B3SOIFDgbpgs = here->B3SOIFDgbpds = 0.0; here->B3SOIFDgbpes = here->B3SOIFDgbpps = here->B3SOIFDgbpT = here->B3SOIFDcbodcon = 0.0; Gbpbs = Gbpgs = Gbpds = Gbpes = Gbpps = GbpT = 0.0; /* Current going out of drainprime node into the drain of device */ /* "node" means the SPICE circuit node */ here->B3SOIFDcdrain = Ids + Ic; here->B3SOIFDcd = Ids + Ic - Ibd + Iii + Idgidl; here->B3SOIFDcb = Ibs + Ibd + Ibp - Iii - Idgidl - Isgidl; here->B3SOIFDgds = Gds + Gcd; here->B3SOIFDgm = Gm; here->B3SOIFDgmbs = Gmb + Gcb; here->B3SOIFDgme = Gme; if (selfheat) here->B3SOIFDgmT = GmT + GcT; else here->B3SOIFDgmT = 0.0; /* note that sign is switched because power flows out of device into the temperature node. Currently ommit self-heating due to bipolar current because it can cause convergence problem*/ here->B3SOIFDgtempg = -Gm * Vds; here->B3SOIFDgtempb = -Gmb * Vds; here->B3SOIFDgtempe = -Gme * Vds; here->B3SOIFDgtempT = -GmT * Vds; here->B3SOIFDgtempd = -Gds * Vds - Ids; here->B3SOIFDcth = - Ids * Vds - model->B3SOIFDtype * (here->B3SOIFDgtempg * Vgs + here->B3SOIFDgtempb * Vbs + here->B3SOIFDgtempe * Ves + here->B3SOIFDgtempd * Vds) - here->B3SOIFDgtempT * delTemp; /* Body current which flows into drainprime node from the drain of device */ here->B3SOIFDgjdb = Gjdb - Giib; here->B3SOIFDgjdd = Gjdd - (Giid + Gdgidld); here->B3SOIFDgjdg = - (Giig + Gdgidlg); here->B3SOIFDgjde = - Giie; if (selfheat) here->B3SOIFDgjdT = GjdT - GiiT; else here->B3SOIFDgjdT = 0.0; here->B3SOIFDcjd = Ibd - Iii - Idgidl - here->B3SOIFDminIsub/2 - (here->B3SOIFDgjdb * Vbs + here->B3SOIFDgjdd * Vds + here->B3SOIFDgjdg * Vgs + here->B3SOIFDgjde * Ves + here->B3SOIFDgjdT * delTemp); /* Body current which flows into sourceprime node from the source of device */ here->B3SOIFDgjsb = Gjsb; here->B3SOIFDgjsd = Gjsd; here->B3SOIFDgjsg = - Gsgidlg; if (selfheat) here->B3SOIFDgjsT = GjsT; else here->B3SOIFDgjsT = 0.0; here->B3SOIFDcjs = Ibs - Isgidl - here->B3SOIFDminIsub/2 - (here->B3SOIFDgjsb * Vbs + here->B3SOIFDgjsd * Vds + here->B3SOIFDgjsg * Vgs + here->B3SOIFDgjsT * delTemp); /* Current flowing into body node */ here->B3SOIFDgbbs = Giib - Gjsb - Gjdb - Gbpbs; here->B3SOIFDgbgs = Giig + Gdgidlg + Gsgidlg - Gbpgs; here->B3SOIFDgbds = Giid + Gdgidld - Gjsd - Gjdd - Gbpds; here->B3SOIFDgbes = Giie - Gbpes; here->B3SOIFDgbps = - Gbpps; if (selfheat) here->B3SOIFDgbT = GiiT - GjsT - GjdT - GbpT; else here->B3SOIFDgbT = 0.0; here->B3SOIFDcbody = Iii + Idgidl + Isgidl - Ibs - Ibd - Ibp + here->B3SOIFDminIsub - (here->B3SOIFDgbbs * Vbs + here->B3SOIFDgbgs * Vgs + here->B3SOIFDgbds * Vds + here->B3SOIFDgbps * Vps + here->B3SOIFDgbes * Ves + here->B3SOIFDgbT * delTemp); /* Calculate Qinv for Noise analysis */ T1 = Vgsteff * (1.0 - 0.5 * Abeff * Vdseff / Vgst2Vtm); here->B3SOIFDqinv = -model->B3SOIFDcox * pParam->B3SOIFDweff * Leff * T1; /* Begin CV (charge) model */ if ((model->B3SOIFDxpart < 0) || (!ChargeComputationNeeded)) { qgate = qdrn = qsrc = qbody = 0.0; here->B3SOIFDcggb = here->B3SOIFDcgsb = here->B3SOIFDcgdb = 0.0; here->B3SOIFDcdgb = here->B3SOIFDcdsb = here->B3SOIFDcddb = 0.0; here->B3SOIFDcbgb = here->B3SOIFDcbsb = here->B3SOIFDcbdb = 0.0; goto finished; } else { CoxWL = model->B3SOIFDcox * pParam->B3SOIFDweffCV * pParam->B3SOIFDleffCV; /* By using this Vgsteff,cv, discontinuity in moderate inversion charges can be avoid. However, in capMod=3, Vdsat from IV is used. The dVdsat_dVg is referred to the IV Vgsteff and therefore induces error in the charges derivatives. Fortunately, Vgsteff,iv and Vgsteff,cv are different only in subthreshold where Qsubs is neglectible. So the errors in derivatives is not a serious problem */ if ((VgstNVt > -EXP_THRESHOLD) && (VgstNVt < EXP_THRESHOLD)) { ExpVgst *= ExpVgst; Vgsteff = n * Vtm * log(1.0 + ExpVgst); T0 = ExpVgst / (1.0 + ExpVgst); T1 = -T0 * (dVth_dVb + Vgst / n * dn_dVb) + Vgsteff / n * dn_dVb; dVgsteff_dVd = -T0 * (dVth_dVd + Vgst / n * dn_dVd) + Vgsteff / n * dn_dVd + T1 * dVbseff_dVd; dVgsteff_dVg = T0 * dVgs_eff_dVg + T1 * dVbseff_dVg; dVgsteff_dVb = T1 * dVbseff_dVb; dVgsteff_dVe = T1 * dVbseff_dVe; if (selfheat) dVgsteff_dT = -T0 * (dVth_dT + Vgst / Temp) + Vgsteff / Temp + T1 * dVbseff_dT; else dVgsteff_dT = 0.0; } Vfb = Vth - phi - pParam->B3SOIFDk1 * sqrtPhis; dVfb_dVb = dVth_dVb - pParam->B3SOIFDk1 * dsqrtPhis_dVb; dVfb_dVd = dVth_dVd; dVfb_dT = dVth_dT; if ((model->B3SOIFDcapMod == 2) || (model->B3SOIFDcapMod == 3)) { /* Necessary because charge behaviour very strange at Vgsteff = 0 */ Vgsteff += 1e-4; /* Something common in capMod 2 and 3 */ V3 = Vfb - Vgs_eff + Vbseff - DELTA_3; if (Vfb <= 0.0) { T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * Vfb); T2 = -DELTA_3 / T0; } else { T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * Vfb); T2 = DELTA_3 / T0; } T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = Vfb - 0.5 * (V3 + T0); dVfbeff_dVd = (1.0 - T1 - T2) * dVfb_dVd; dVfbeff_dVb = (1.0 - T1 - T2) * dVfb_dVb - T1; dVfbeff_dVrg = T1 * dVgs_eff_dVg; if (selfheat) dVfbeff_dT = (1.0 - T1 - T2) * dVfb_dT; else dVfbeff_dT = 0.0; Qac0 = -CoxWL * (Vfbeff - Vfb); dQac0_dVrg = -CoxWL * dVfbeff_dVrg; dQac0_dVd = -CoxWL * (dVfbeff_dVd - dVfb_dVd); dQac0_dVb = -CoxWL * (dVfbeff_dVb - dVfb_dVb); if (selfheat) dQac0_dT = -CoxWL * (dVfbeff_dT - dVfb_dT); else dQac0_dT = 0.0; T0 = 0.5 * K1; T3 = Vgs_eff - Vfbeff - Vbseff - Vgsteff; if (pParam->B3SOIFDk1 == 0.0) { T1 = 0.0; T2 = 0.0; } else if (T3 < 0.0) { T1 = T0 + T3 / pParam->B3SOIFDk1; T2 = CoxWL; } else { T1 = sqrt(T0 * T0 + T3); T2 = CoxWL * T0 / T1; } Qsub0 = CoxWL * K1 * (T0 - T1); dQsub0_dVrg = T2 * (dVfbeff_dVrg - dVgs_eff_dVg); dQsub0_dVg = T2; dQsub0_dVd = T2 * dVfbeff_dVd; dQsub0_dVb = T2 * (dVfbeff_dVb + 1); if (selfheat) dQsub0_dT = T2 * dVfbeff_dT; else dQsub0_dT = 0.0; One_Third_CoxWL = CoxWL / 3.0; Two_Third_CoxWL = 2.0 * One_Third_CoxWL; AbulkCV = Abulk0 * pParam->B3SOIFDabulkCVfactor; dAbulkCV_dVb = pParam->B3SOIFDabulkCVfactor * dAbulk0_dVb; /* This is actually capMod=2 calculation */ VdsatCV = Vgsteff / AbulkCV; dVdsatCV_dVg = 1.0 / AbulkCV; dVdsatCV_dVb = -VdsatCV * dAbulkCV_dVb / AbulkCV; VdsatCV += 1e-5; V4 = VdsatCV - Vds - DELTA_4; T0 = sqrt(V4 * V4 + 4.0 * DELTA_4 * VdsatCV); VdseffCV = VdsatCV - 0.5 * (V4 + T0); T1 = 0.5 * (1.0 + V4 / T0); T2 = DELTA_4 / T0; T3 = (1.0 - T1 - T2) / AbulkCV; dVdseffCV_dVg = T3; dVdseffCV_dVd = T1; dVdseffCV_dVb = -T3 * VdsatCV * dAbulkCV_dVb; if (model->B3SOIFDcapMod == 2) { /* VdsCV Make it compatible with capMod 3 */ VdsCV = VdseffCV; dVdsCV_dVg = dVdseffCV_dVg; dVdsCV_dVd = dVdseffCV_dVd; dVdsCV_dVb = dVdseffCV_dVb; } else if (model->B3SOIFDcapMod == 3) { /* Front gate strong inversion depletion charge */ /* VdssatCV calculation */ T1 = Vgsteff + K1*sqrtPhis + 0.5*K1*K1; T2 = Vgsteff + K1*sqrtPhis + Phis + 0.25*K1*K1; dT1_dVb = K1*dsqrtPhis_dVb; dT2_dVb = dT1_dVb + dPhis_dVb; dT1_dVg = dT2_dVg = 1; /* Note VdsatCV is redefined in capMod = 3 */ VdsatCV = T1 - K1*sqrt(T2); dVdsatCV_dVb = dT1_dVb - K1/2/sqrt(T2)*dT2_dVb; dVdsatCV_dVg = dT1_dVg - K1/2/sqrt(T2)*dT2_dVg; T1 = VdsatCV - Vdsat; dT1_dVg = dVdsatCV_dVg - dVdsat_dVg; dT1_dVb = dVdsatCV_dVb - dVdsat_dVb; dT1_dVd = - dVdsat_dVd; dT1_dVc = - dVdsat_dVc; dT1_dT = - dVdsat_dT; if (!(T1 == 0.0)) { T3 = -0.5 * Vdsat / T1; /* Vdsmax */ T2 = T3 * Vdsat; T4 = T2 + T1 * T3 * T3; /* fmax */ if ((Vdseff > T2) && (T1 < 0)) { VdsCV = T4; T5 = -0.5 / (T1 * T1); dT3_dVg = T5 * (T1 * dVdsat_dVg - Vdsat * dT1_dVg); dT3_dVb = T5 * (T1 * dVdsat_dVb - Vdsat * dT1_dVb); dT3_dVd = T5 * (T1 * dVdsat_dVd - Vdsat * dT1_dVd); dT3_dVc=0.0; if (selfheat) dT3_dT=T5 * (T1 * dVdsat_dT - Vdsat * dT1_dT); else dT3_dT=0.0; dVdsCV_dVd = T3 * dVdsat_dVd + Vdsat * dT3_dVd + T3 * (2 * T1 * dT3_dVd + T3 * dT1_dVd); dVdsCV_dVg = T3 * dVdsat_dVg + Vdsat * dT3_dVg + T3 * (2 * T1 * dT3_dVg + T3 * dT1_dVg); dVdsCV_dVb = T3 * dVdsat_dVb + Vdsat * dT3_dVb + T3 * (2 * T1 * dT3_dVb + T3 * dT1_dVb); dVdsCV_dVc = 0.0; if (selfheat) dVdsCV_dT = T3 * dVdsat_dT + Vdsat * dT3_dT + T3 * (2 * T1 * dT3_dT + T3 * dT1_dT ); else dVdsCV_dT = 0.0; } else { T5 = Vdseff / Vdsat; T6 = T5 * T5; T7 = 2 * T1 * T5 / Vdsat; T8 = T7 / Vdsat; VdsCV = Vdseff + T1 * T6; dVdsCV_dVd = dVdseff_dVd + T8 * ( Vdsat * dVdseff_dVd - Vdseff * dVdsat_dVd) + T6 * dT1_dVd; dVdsCV_dVb = dVdseff_dVb + T8 * ( Vdsat * dVdseff_dVb - Vdseff * dVdsat_dVb) + T6 * dT1_dVb; dVdsCV_dVg = dVdseff_dVg + T8 * ( Vdsat * dVdseff_dVg - Vdseff * dVdsat_dVg) + T6 * dT1_dVg; dVdsCV_dVc = 0.0; if (selfheat) dVdsCV_dT = dVdseff_dT + T8 * ( Vdsat * dVdseff_dT - Vdseff * dVdsat_dT ) + T6 * dT1_dT ; else dVdsCV_dT = 0.0; } } else { VdsCV = Vdseff; dVdsCV_dVb = dVdseff_dVb; dVdsCV_dVd = dVdseff_dVd; dVdsCV_dVg = dVdseff_dVg; dVdsCV_dVc = dVdseff_dVc; dVdsCV_dT = dVdseff_dT; } if (VdsCV < 0.0) VdsCV = 0.0; VdsCV += 1e-4; if (VdsCV > (VdsatCV - 1e-7)) { VdsCV = VdsatCV - 1e-7; } Phisd = Phis + VdsCV; dPhisd_dVb = dPhis_dVb + dVdsCV_dVb; dPhisd_dVd = dVdsCV_dVd; dPhisd_dVg = dVdsCV_dVg; dPhisd_dVc = dVdsCV_dVc; dPhisd_dT = dVdsCV_dT; sqrtPhisd = sqrt(Phisd); /* Qdep0 - Depletion charge at Vgs=Vth */ T10 = CoxWL * K1; Qdep0 = T10 * sqrtPhis; dQdep0_dVb = T10 * dsqrtPhis_dVb; } /* End of if capMod == 3 */ /* Something common in both capMod 2 or 3 */ /* Backgate charge */ CboxWL = pParam->B3SOIFDkb3 * Cbox * pParam->B3SOIFDweffCV * pParam->B3SOIFDleffCV; Cbg = Cbb = Cbd = Cbe = CbT = 0.0; Ce2g = Ce2b = Ce2d = Ce2e = Ce2T = 0.0; Qbf = Qe2 = 0.0; T2 = - 0.5 * model->B3SOIFDcboxt * pParam->B3SOIFDweffCV * pParam->B3SOIFDleffCV; Qe1 = T2 * VdsCV - CboxWL * (Vbs0eff - Vesfb); Ce1g = T2 * (dVdsCV_dVg * dVgsteff_dVg + dVdsCV_dVb * dVbseff_dVg + dVdsCV_dVc * dVcs_dVg) - CboxWL * dVbs0eff_dVg; Ce1d = T2 * (dVdsCV_dVg * dVgsteff_dVd + dVdsCV_dVb * dVbseff_dVd + dVdsCV_dVc * dVcs_dVd + dVdsCV_dVd) - CboxWL * dVbs0eff_dVd; Ce1b = 0.0; Ce1e = T2 * (dVdsCV_dVg * dVgsteff_dVe + dVdsCV_dVb * dVbseff_dVe + dVdsCV_dVc * dVcs_dVe) - CboxWL * (dVbs0eff_dVe - 1.0); if (selfheat) Ce1T = T2 * (dVdsCV_dVg * dVgsteff_dT + dVdsCV_dVb * dVbseff_dT + dVdsCV_dVc * dVcs_dT + dVdsCV_dT) - CboxWL * (dVbs0eff_dT + dvfbb_dT); else Ce1T = 0.0; /* Total inversion charge */ T0 = AbulkCV * VdseffCV; T1 = 12.0 * (Vgsteff - 0.5 * T0 + 1e-20); T2 = VdseffCV / T1; T3 = T0 * T2; T4 = (1.0 - 12.0 * T2 * T2 * AbulkCV); T5 = (6.0 * T0 * (4.0 * Vgsteff - T0) / (T1 * T1) - 0.5); T6 = 12.0 * T2 * T2 * Vgsteff; qinv = CoxWL * (Vgsteff - 0.5 * VdseffCV + T3); Cgg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); Cgd1 = CoxWL * T5 * dVdseffCV_dVd; Cgb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb); /* Inversion charge partitioning into S / D */ if (model->B3SOIFDxpart > 0.5) { /* 0/100 Charge partition model */ T1 = T1 + T1; qsrc = -CoxWL * (0.5 * Vgsteff + 0.25 * T0 - T0 * T0 / T1); T7 = (4.0 * Vgsteff - T0) / (T1 * T1); T4 = -(0.5 + 24.0 * T0 * T0 / (T1 * T1)); T5 = -(0.25 * AbulkCV - 12.0 * AbulkCV * T0 * T7); T6 = -(0.25 * VdseffCV - 12.0 * T0 * VdseffCV * T7); Csg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); Csd1 = CoxWL * T5 * dVdseffCV_dVd; Csb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb); } else if (model->B3SOIFDxpart < 0.5) { /* 40/60 Charge partition model */ T1 = T1 / 12.0; T2 = 0.5 * CoxWL / (T1 * T1); T3 = Vgsteff * (2.0 * T0 * T0 / 3.0 + Vgsteff * (Vgsteff - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T2 * T3; T7 = 4.0 / 3.0 * Vgsteff * (Vgsteff - T0) + 0.4 * T0 * T0; T4 = -2.0 * qsrc / T1 - T2 * (Vgsteff * (3.0 * Vgsteff - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0); T5 = (qsrc / T1 + T2 * T7) * AbulkCV; T6 = (qsrc / T1 * VdseffCV + T2 * T7 * VdseffCV); Csg1 = T4 + T5 * dVdseffCV_dVg; Csd1 = T5 * dVdseffCV_dVd; Csb1 = T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb; } else { /* 50/50 Charge partition model */ qsrc = - 0.5 * qinv; Csg1 = - 0.5 * Cgg1; Csb1 = - 0.5 * Cgb1; Csd1 = - 0.5 * Cgd1; } Csg = Csg1 * dVgsteff_dVg + Csb1 * dVbseff_dVg; Csd = Csd1 + Csg1 * dVgsteff_dVd + Csb1 * dVbseff_dVd; Csb = Csg1 * dVgsteff_dVb + Csb1 * dVbseff_dVb; Cse = Csg1 * dVgsteff_dVe + Csb1 * dVbseff_dVe; if (selfheat) CsT = Csg1 * dVgsteff_dT + Csb1 * dVbseff_dT; else CsT = 0.0; Qex=dQex_dVg=dQex_dVb=dQex_dVd=dQex_dVe=dQex_dT=0.0; qgate = qinv - (Qbf + Qe2); qbody = (Qbf - Qe1 + Qex); qsub = Qe1 + Qe2 - Qex; qdrn = -(qinv + qsrc); Cgg = (Cgg1 * dVgsteff_dVg + Cgb1 * dVbseff_dVg) - Cbg ; Cgd = (Cgd1 + Cgg1 * dVgsteff_dVd + Cgb1 * dVbseff_dVd)-Cbd; Cgb = (Cgb1 * dVbseff_dVb + Cgg1 * dVgsteff_dVb) - Cbb; Cge = (Cgg1 * dVgsteff_dVe + Cgb1 * dVbseff_dVe) - Cbe; if (selfheat) CgT = (Cgg1 * dVgsteff_dT + Cgb1 * dVbseff_dT ) - CbT; else CgT = 0.0; here->B3SOIFDcggb = Cgg - Ce2g; here->B3SOIFDcgsb = - (Cgg + Cgd + Cgb + Cge) + (Ce2g + Ce2d + Ce2b + Ce2e); here->B3SOIFDcgdb = Cgd - Ce2d; here->B3SOIFDcgeb = Cge - Ce2e; here->B3SOIFDcgT = CgT - Ce2T; here->B3SOIFDcbgb = Cbg - Ce1g + dQex_dVg; here->B3SOIFDcbsb = -(Cbg + Cbd + Cbb + Cbe) + (Ce1g + Ce1d + Ce1b + Ce1e) - (dQex_dVg + dQex_dVd + dQex_dVb + dQex_dVe); here->B3SOIFDcbdb = Cbd - Ce1d + dQex_dVd; here->B3SOIFDcbeb = Cbe - Ce1e + dQex_dVe; here->B3SOIFDcbT = CbT - Ce1T + dQex_dT; here->B3SOIFDcegb = Ce1g + Ce2g - dQex_dVg; here->B3SOIFDcesb = -(Ce1g + Ce1d + Ce1b + Ce1e) -(Ce2g + Ce2d + Ce2b + Ce2e) +(dQex_dVg + dQex_dVd + dQex_dVb + dQex_dVe); here->B3SOIFDcedb = Ce1d + Ce2d - dQex_dVd; here->B3SOIFDceeb = Ce1e + Ce2e - dQex_dVe; here->B3SOIFDceT = Ce1T + Ce2T - dQex_dT; here->B3SOIFDcdgb = -(Cgg + Cbg + Csg); here->B3SOIFDcddb = -(Cgd + Cbd + Csd); here->B3SOIFDcdeb = -(Cge + Cbe + Cse); here->B3SOIFDcdT = -(CgT + CbT + CsT); here->B3SOIFDcdsb = (Cgg + Cgd + Cgb + Cge + Cbg + Cbd + Cbb + Cbe + Csg + Csd + Csb + Cse); } /* End of if capMod == 2 or capMod ==3 */ } finished: /* returning Values to Calling Routine */ /* * COMPUTE EQUIVALENT DRAIN CURRENT SOURCE */ if (ChargeComputationNeeded) { qjs = qjd = 0.0; gcjdds = gcjdbs = gcjdT = 0.0; gcjsbs = gcjsT = 0.0; qdrn -= qjd; qbody += (qjs + qjd); qsrc = -(qgate + qbody + qdrn + qsub); /* Update the conductance */ here->B3SOIFDcddb -= gcjdds; here->B3SOIFDcdT -= gcjdT; here->B3SOIFDcdsb += gcjdds + gcjdbs; here->B3SOIFDcbdb += (gcjdds); here->B3SOIFDcbT += (gcjdT + gcjsT); here->B3SOIFDcbsb -= (gcjdds + gcjdbs + gcjsbs); /* Extrinsic Bottom S/D to substrate charge */ T10 = -model->B3SOIFDtype * ves; /* T10 is vse without type conversion */ if ( ((pParam->B3SOIFDnsub > 0) && (model->B3SOIFDtype > 0)) || ((pParam->B3SOIFDnsub < 0) && (model->B3SOIFDtype < 0)) ) { if (T10 < pParam->B3SOIFDvsdfb) { here->B3SOIFDqse = here->B3SOIFDcsbox * (T10 - pParam->B3SOIFDvsdfb); here->B3SOIFDgcse = here->B3SOIFDcsbox; } else if (T10 < pParam->B3SOIFDsdt1) { T0 = T10 - pParam->B3SOIFDvsdfb; T1 = T0 * T0; here->B3SOIFDqse = T0 * (here->B3SOIFDcsbox - pParam->B3SOIFDst2 / 3 * T1) ; here->B3SOIFDgcse = here->B3SOIFDcsbox - pParam->B3SOIFDst2 * T1; } else if (T10 < pParam->B3SOIFDvsdth) { T0 = T10 - pParam->B3SOIFDvsdth; T1 = T0 * T0; here->B3SOIFDqse = here->B3SOIFDcsmin * T10 + here->B3SOIFDst4 + pParam->B3SOIFDst3 / 3 * T0 * T1; here->B3SOIFDgcse = here->B3SOIFDcsmin + pParam->B3SOIFDst3 * T1; } else { here->B3SOIFDqse = here->B3SOIFDcsmin * T10 + here->B3SOIFDst4; here->B3SOIFDgcse = here->B3SOIFDcsmin; } } else { if (T10 < pParam->B3SOIFDvsdth) { here->B3SOIFDqse = here->B3SOIFDcsmin * (T10 - pParam->B3SOIFDvsdth); here->B3SOIFDgcse = here->B3SOIFDcsmin; } else if (T10 < pParam->B3SOIFDsdt1) { T0 = T10 - pParam->B3SOIFDvsdth; T1 = T0 * T0; here->B3SOIFDqse = T0 * (here->B3SOIFDcsmin - pParam->B3SOIFDst2 / 3 * T1) ; here->B3SOIFDgcse = here->B3SOIFDcsmin - pParam->B3SOIFDst2 * T1; } else if (T10 < pParam->B3SOIFDvsdfb) { T0 = T10 - pParam->B3SOIFDvsdfb; T1 = T0 * T0; here->B3SOIFDqse = here->B3SOIFDcsbox * T10 + here->B3SOIFDst4 + pParam->B3SOIFDst3 / 3 * T0 * T1; here->B3SOIFDgcse = here->B3SOIFDcsbox + pParam->B3SOIFDst3 * T1; } else { here->B3SOIFDqse = here->B3SOIFDcsbox * T10 + here->B3SOIFDst4; here->B3SOIFDgcse = here->B3SOIFDcsbox; } } /* T11 is vde without type conversion */ T11 = model->B3SOIFDtype * (vds - ves); if ( ((pParam->B3SOIFDnsub > 0) && (model->B3SOIFDtype > 0)) || ((pParam->B3SOIFDnsub < 0) && (model->B3SOIFDtype < 0)) ) { if (T11 < pParam->B3SOIFDvsdfb) { here->B3SOIFDqde = here->B3SOIFDcdbox * (T11 - pParam->B3SOIFDvsdfb); here->B3SOIFDgcde = here->B3SOIFDcdbox; } else if (T11 < pParam->B3SOIFDsdt1) { T0 = T11 - pParam->B3SOIFDvsdfb; T1 = T0 * T0; here->B3SOIFDqde = T0 * (here->B3SOIFDcdbox - pParam->B3SOIFDdt2 / 3 * T1) ; here->B3SOIFDgcde = here->B3SOIFDcdbox - pParam->B3SOIFDdt2 * T1; } else if (T11 < pParam->B3SOIFDvsdth) { T0 = T11 - pParam->B3SOIFDvsdth; T1 = T0 * T0; here->B3SOIFDqde = here->B3SOIFDcdmin * T11 + here->B3SOIFDdt4 + pParam->B3SOIFDdt3 / 3 * T0 * T1; here->B3SOIFDgcde = here->B3SOIFDcdmin + pParam->B3SOIFDdt3 * T1; } else { here->B3SOIFDqde = here->B3SOIFDcdmin * T11 + here->B3SOIFDdt4; here->B3SOIFDgcde = here->B3SOIFDcdmin; } } else { if (T11 < pParam->B3SOIFDvsdth) { here->B3SOIFDqde = here->B3SOIFDcdmin * (T11 - pParam->B3SOIFDvsdth); here->B3SOIFDgcde = here->B3SOIFDcdmin; } else if (T11 < pParam->B3SOIFDsdt1) { T0 = T11 - pParam->B3SOIFDvsdth; T1 = T0 * T0; here->B3SOIFDqde = T0 * (here->B3SOIFDcdmin - pParam->B3SOIFDdt2 / 3 * T1) ; here->B3SOIFDgcde = here->B3SOIFDcdmin - pParam->B3SOIFDdt2 * T1; } else if (T11 < pParam->B3SOIFDvsdfb) { T0 = T11 - pParam->B3SOIFDvsdfb; T1 = T0 * T0; here->B3SOIFDqde = here->B3SOIFDcdbox * T11 + here->B3SOIFDdt4 + pParam->B3SOIFDdt3 / 3 * T0 * T1; here->B3SOIFDgcde = here->B3SOIFDcdbox + pParam->B3SOIFDdt3 * T1; } else { here->B3SOIFDqde = here->B3SOIFDcdbox * T11 + here->B3SOIFDdt4; here->B3SOIFDgcde = here->B3SOIFDcdbox; } } /* Extrinsic : Sidewall fringing S/D charge */ here->B3SOIFDqse += pParam->B3SOIFDcsesw * T10; here->B3SOIFDgcse += pParam->B3SOIFDcsesw; here->B3SOIFDqde += pParam->B3SOIFDcdesw * T11; here->B3SOIFDgcde += pParam->B3SOIFDcdesw; /* All charge are mutliplied with type at the end, but qse and qde have true polarity => so pre-mutliplied with type */ here->B3SOIFDqse *= model->B3SOIFDtype; here->B3SOIFDqde *= model->B3SOIFDtype; } here->B3SOIFDxc = Xc; here->B3SOIFDcbb = Cbb; here->B3SOIFDcbd = Cbd; here->B3SOIFDcbg = Cbg; here->B3SOIFDqbf = Qbf; here->B3SOIFDqjs = qjs; here->B3SOIFDqjd = qjd; if (here->B3SOIFDdebugMod == -1) ChargeComputationNeeded = 0; /* * check convergence */ if ((here->B3SOIFDoff == 0) || (!(ckt->CKTmode & MODEINITFIX))) { if (Check == 1) { ckt->CKTnoncon++; if (here->B3SOIFDdebugMod > 2) fprintf(fpdebug, "Check is on, noncon=%d\n", ckt->CKTnoncon++); } } *(ckt->CKTstate0 + here->B3SOIFDvg) = vg; *(ckt->CKTstate0 + here->B3SOIFDvd) = vd; *(ckt->CKTstate0 + here->B3SOIFDvs) = vs; *(ckt->CKTstate0 + here->B3SOIFDvp) = vp; *(ckt->CKTstate0 + here->B3SOIFDve) = ve; *(ckt->CKTstate0 + here->B3SOIFDvbs) = vbs; *(ckt->CKTstate0 + here->B3SOIFDvbd) = vbd; *(ckt->CKTstate0 + here->B3SOIFDvgs) = vgs; *(ckt->CKTstate0 + here->B3SOIFDvds) = vds; *(ckt->CKTstate0 + here->B3SOIFDves) = ves; *(ckt->CKTstate0 + here->B3SOIFDvps) = vps; *(ckt->CKTstate0 + here->B3SOIFDdeltemp) = delTemp; /* bulk and channel charge plus overlaps */ if (!ChargeComputationNeeded) goto line850; #ifndef NOBYPASS line755: #endif ag0 = ckt->CKTag[0]; T0 = vgd + DELTA_1; T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); T3 = pParam->B3SOIFDweffCV * pParam->B3SOIFDcgdl; T4 = sqrt(1.0 - 4.0 * T2 / pParam->B3SOIFDckappa); cgdo = pParam->B3SOIFDcgdo + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgdo = (pParam->B3SOIFDcgdo + T3) * vgd - T3 * (T2 + 0.5 * pParam->B3SOIFDckappa * (T4 - 1.0)); T0 = vgs + DELTA_1; T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); T3 = pParam->B3SOIFDweffCV * pParam->B3SOIFDcgsl; T4 = sqrt(1.0 - 4.0 * T2 / pParam->B3SOIFDckappa); cgso = pParam->B3SOIFDcgso + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgso = (pParam->B3SOIFDcgso + T3) * vgs - T3 * (T2 + 0.5 * pParam->B3SOIFDckappa * (T4 - 1.0)); if (here->B3SOIFDmode > 0) { gcdgb = (here->B3SOIFDcdgb - cgdo) * ag0; gcddb = (here->B3SOIFDcddb + cgdo + here->B3SOIFDgcde) * ag0; gcdsb = here->B3SOIFDcdsb * ag0; gcdeb = (here->B3SOIFDcdeb - here->B3SOIFDgcde) * ag0; gcdT = model->B3SOIFDtype * here->B3SOIFDcdT * ag0; gcsgb = -(here->B3SOIFDcggb + here->B3SOIFDcbgb + here->B3SOIFDcdgb + here->B3SOIFDcegb + cgso) * ag0; gcsdb = -(here->B3SOIFDcgdb + here->B3SOIFDcbdb + here->B3SOIFDcddb + here->B3SOIFDcedb) * ag0; gcssb = (cgso + here->B3SOIFDgcse - (here->B3SOIFDcgsb + here->B3SOIFDcbsb + here->B3SOIFDcdsb + here->B3SOIFDcesb)) * ag0; gcseb = -(here->B3SOIFDgcse + here->B3SOIFDcgeb + here->B3SOIFDcbeb + here->B3SOIFDcdeb + here->B3SOIFDceeb) * ag0; gcsT = - model->B3SOIFDtype * (here->B3SOIFDcgT + here->B3SOIFDcbT + here->B3SOIFDcdT + here->B3SOIFDceT) * ag0; gcggb = (here->B3SOIFDcggb + cgdo + cgso + pParam->B3SOIFDcgeo) * ag0; gcgdb = (here->B3SOIFDcgdb - cgdo) * ag0; gcgsb = (here->B3SOIFDcgsb - cgso) * ag0; gcgeb = (here->B3SOIFDcgeb - pParam->B3SOIFDcgeo) * ag0; gcgT = model->B3SOIFDtype * here->B3SOIFDcgT * ag0; gcbgb = here->B3SOIFDcbgb * ag0; gcbdb = here->B3SOIFDcbdb * ag0; gcbsb = here->B3SOIFDcbsb * ag0; gcbeb = here->B3SOIFDcbeb * ag0; gcbT = model->B3SOIFDtype * here->B3SOIFDcbT * ag0; gcegb = (here->B3SOIFDcegb - pParam->B3SOIFDcgeo) * ag0; gcedb = (here->B3SOIFDcedb - here->B3SOIFDgcde) * ag0; gcesb = (here->B3SOIFDcesb - here->B3SOIFDgcse) * ag0; gceeb = (here->B3SOIFDgcse + here->B3SOIFDgcde + here->B3SOIFDceeb + pParam->B3SOIFDcgeo) * ag0; gceT = model->B3SOIFDtype * here->B3SOIFDceT * ag0; gcTt = pParam->B3SOIFDcth * ag0; sxpart = 0.6; dxpart = 0.4; /* Lump the overlap capacitance and S/D parasitics */ qgd = qgdo; qgs = qgso; qge = pParam->B3SOIFDcgeo * vge; qgate += qgd + qgs + qge; qdrn += here->B3SOIFDqde - qgd; qsub -= qge + here->B3SOIFDqse + here->B3SOIFDqde; qsrc = -(qgate + qbody + qdrn + qsub); } else { gcsgb = (here->B3SOIFDcdgb - cgso) * ag0; gcssb = (here->B3SOIFDcddb + cgso + here->B3SOIFDgcse) * ag0; gcsdb = here->B3SOIFDcdsb * ag0; gcseb = (here->B3SOIFDcdeb - here->B3SOIFDgcse) * ag0; gcsT = model->B3SOIFDtype * here->B3SOIFDcdT * ag0; gcdgb = -(here->B3SOIFDcggb + here->B3SOIFDcbgb + here->B3SOIFDcdgb + here->B3SOIFDcegb + cgdo) * ag0; gcdsb = -(here->B3SOIFDcgdb + here->B3SOIFDcbdb + here->B3SOIFDcddb + here->B3SOIFDcedb) * ag0; gcddb = (cgdo + here->B3SOIFDgcde - (here->B3SOIFDcgsb + here->B3SOIFDcbsb + here->B3SOIFDcdsb + here->B3SOIFDcesb)) * ag0; gcdeb = -(here->B3SOIFDgcde + here->B3SOIFDcgeb + here->B3SOIFDcbeb + here->B3SOIFDcdeb + here->B3SOIFDceeb) * ag0; gcdT = - model->B3SOIFDtype * (here->B3SOIFDcgT + here->B3SOIFDcbT + here->B3SOIFDcdT + here->B3SOIFDceT) * ag0; gcggb = (here->B3SOIFDcggb + cgdo + cgso + pParam->B3SOIFDcgeo) * ag0; gcgsb = (here->B3SOIFDcgdb - cgso) * ag0; gcgdb = (here->B3SOIFDcgsb - cgdo) * ag0; gcgeb = (here->B3SOIFDcgeb - pParam->B3SOIFDcgeo) * ag0; gcgT = model->B3SOIFDtype * here->B3SOIFDcgT * ag0; gcbgb = here->B3SOIFDcbgb * ag0; gcbsb = here->B3SOIFDcbdb * ag0; gcbdb = here->B3SOIFDcbsb * ag0; gcbeb = here->B3SOIFDcbeb * ag0; gcbT = model->B3SOIFDtype * here->B3SOIFDcbT * ag0; gcegb = (here->B3SOIFDcegb - pParam->B3SOIFDcgeo) * ag0; gcesb = (here->B3SOIFDcedb - here->B3SOIFDgcse) * ag0; gcedb = (here->B3SOIFDcesb - here->B3SOIFDgcde) * ag0; gceeb = (here->B3SOIFDceeb + pParam->B3SOIFDcgeo + here->B3SOIFDgcse + here->B3SOIFDgcde) * ag0; gceT = model->B3SOIFDtype * here->B3SOIFDceT * ag0; gcTt = pParam->B3SOIFDcth * ag0; dxpart = 0.6; sxpart = 0.4; /* Lump the overlap capacitance */ qgd = qgdo; qgs = qgso; qge = pParam->B3SOIFDcgeo * vge; qgate += qgd + qgs + qge; qsrc = qdrn - qgs + here->B3SOIFDqse; qsub -= qge + here->B3SOIFDqse + here->B3SOIFDqde; qdrn = -(qgate + qbody + qsrc + qsub); } here->B3SOIFDcgdo = cgdo; here->B3SOIFDcgso = cgso; if (ByPass) goto line860; *(ckt->CKTstate0 + here->B3SOIFDqe) = qsub; *(ckt->CKTstate0 + here->B3SOIFDqg) = qgate; *(ckt->CKTstate0 + here->B3SOIFDqd) = qdrn; *(ckt->CKTstate0 + here->B3SOIFDqb) = qbody; if ((model->B3SOIFDshMod == 1) && (here->B3SOIFDrth0!=0.0)) *(ckt->CKTstate0 + here->B3SOIFDqth) = pParam->B3SOIFDcth * delTemp; /* store small signal parameters */ if (ckt->CKTmode & MODEINITSMSIG) { goto line1000; } if (!ChargeComputationNeeded) goto line850; if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->B3SOIFDqb) = *(ckt->CKTstate0 + here->B3SOIFDqb); *(ckt->CKTstate1 + here->B3SOIFDqg) = *(ckt->CKTstate0 + here->B3SOIFDqg); *(ckt->CKTstate1 + here->B3SOIFDqd) = *(ckt->CKTstate0 + here->B3SOIFDqd); *(ckt->CKTstate1 + here->B3SOIFDqe) = *(ckt->CKTstate0 + here->B3SOIFDqe); *(ckt->CKTstate1 + here->B3SOIFDqth) = *(ckt->CKTstate0 + here->B3SOIFDqth); } error = NIintegrate(ckt, &geq, &ceq,0.0,here->B3SOIFDqb); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->B3SOIFDqg); if (error) return(error); error = NIintegrate(ckt,&geq, &ceq, 0.0, here->B3SOIFDqd); if (error) return(error); error = NIintegrate(ckt,&geq, &ceq, 0.0, here->B3SOIFDqe); if (error) return(error); if ((model->B3SOIFDshMod == 1) && (here->B3SOIFDrth0!=0.0)) { error = NIintegrate(ckt, &geq, &ceq, 0.0, here->B3SOIFDqth); if (error) return (error); } goto line860; line850: /* initialize to zero charge conductance and current */ ceqqe = ceqqg = ceqqb = ceqqd = ceqqth= 0.0; gcdgb = gcddb = gcdsb = gcdeb = gcdT = 0.0; gcsgb = gcsdb = gcssb = gcseb = gcsT = 0.0; gcggb = gcgdb = gcgsb = gcgeb = gcgT = 0.0; gcbgb = gcbdb = gcbsb = gcbeb = gcbT = 0.0; gcegb = gcedb = gceeb = gcesb = gceT = 0.0; gcTt = 0.0; sxpart = (1.0 - (dxpart = (here->B3SOIFDmode > 0) ? 0.4 : 0.6)); goto line900; line860: /* evaluate equivalent charge current */ cqgate = *(ckt->CKTstate0 + here->B3SOIFDcqg); cqbody = *(ckt->CKTstate0 + here->B3SOIFDcqb); cqdrn = *(ckt->CKTstate0 + here->B3SOIFDcqd); cqsub = *(ckt->CKTstate0 + here->B3SOIFDcqe); cqtemp = *(ckt->CKTstate0 + here->B3SOIFDcqth); here->B3SOIFDcb += cqbody; here->B3SOIFDcd += cqdrn; ceqqg = cqgate - gcggb * vgb + gcgdb * vbd + gcgsb * vbs - gcgeb * veb - gcgT * delTemp; ceqqb = cqbody - gcbgb * vgb + gcbdb * vbd + gcbsb * vbs - gcbeb * veb - gcbT * delTemp; ceqqd = cqdrn - gcdgb * vgb + gcddb * vbd + gcdsb * vbs - gcdeb * veb - gcdT * delTemp; ceqqe = cqsub - gcegb * vgb + gcedb * vbd + gcesb * vbs - gceeb * veb - gceT * delTemp;; ceqqth = cqtemp - gcTt * delTemp; if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->B3SOIFDcqe) = *(ckt->CKTstate0 + here->B3SOIFDcqe); *(ckt->CKTstate1 + here->B3SOIFDcqb) = *(ckt->CKTstate0 + here->B3SOIFDcqb); *(ckt->CKTstate1 + here->B3SOIFDcqg) = *(ckt->CKTstate0 + here->B3SOIFDcqg); *(ckt->CKTstate1 + here->B3SOIFDcqd) = *(ckt->CKTstate0 + here->B3SOIFDcqd); *(ckt->CKTstate1 + here->B3SOIFDcqth) = *(ckt->CKTstate0 + here->B3SOIFDcqth); } /* * load current vector */ line900: m = here->B3SOIFDm; if (here->B3SOIFDmode >= 0) { Gm = here->B3SOIFDgm; Gmbs = here->B3SOIFDgmbs; Gme = here->B3SOIFDgme; GmT = model->B3SOIFDtype * here->B3SOIFDgmT; FwdSum = Gm + Gmbs + Gme; RevSum = 0.0; cdreq = model->B3SOIFDtype * (here->B3SOIFDcdrain - here->B3SOIFDgds * vds - Gm * vgs - Gmbs * vbs - Gme * ves - GmT * delTemp); /* ceqbs now is compatible with cdreq, ie. going in is +ve */ /* Equivalent current source from the diode */ ceqbs = here->B3SOIFDcjs; ceqbd = here->B3SOIFDcjd; /* Current going in is +ve */ ceqbody = -here->B3SOIFDcbody; ceqth = here->B3SOIFDcth; ceqbodcon = here->B3SOIFDcbodcon; gbbg = -here->B3SOIFDgbgs; gbbdp = -here->B3SOIFDgbds; gbbb = -here->B3SOIFDgbbs; gbbe = -here->B3SOIFDgbes; gbbp = -here->B3SOIFDgbps; gbbT = -model->B3SOIFDtype * here->B3SOIFDgbT; gbbsp = - ( gbbg + gbbdp + gbbb + gbbe + gbbp); gddpg = -here->B3SOIFDgjdg; gddpdp = -here->B3SOIFDgjdd; gddpb = -here->B3SOIFDgjdb; gddpe = -here->B3SOIFDgjde; gddpT = -model->B3SOIFDtype * here->B3SOIFDgjdT; gddpsp = - ( gddpg + gddpdp + gddpb + gddpe); gsspg = -here->B3SOIFDgjsg; gsspdp = -here->B3SOIFDgjsd; gsspb = -here->B3SOIFDgjsb; gsspe = 0.0; gsspT = -model->B3SOIFDtype * here->B3SOIFDgjsT; gsspsp = - (gsspg + gsspdp + gsspb + gsspe); gppg = -here->B3SOIFDgbpgs; gppdp = -here->B3SOIFDgbpds; gppb = -here->B3SOIFDgbpbs; gppe = -here->B3SOIFDgbpes; gppp = -here->B3SOIFDgbpps; gppT = -model->B3SOIFDtype * here->B3SOIFDgbpT; gppsp = - (gppg + gppdp + gppb + gppe + gppp); gTtg = here->B3SOIFDgtempg; gTtb = here->B3SOIFDgtempb; gTte = here->B3SOIFDgtempe; gTtdp = here->B3SOIFDgtempd; gTtt = here->B3SOIFDgtempT; gTtsp = - (gTtg + gTtb + gTte + gTtdp); } else { Gm = -here->B3SOIFDgm; Gmbs = -here->B3SOIFDgmbs; Gme = -here->B3SOIFDgme; GmT = -model->B3SOIFDtype * here->B3SOIFDgmT; FwdSum = 0.0; RevSum = -(Gm + Gmbs + Gme); cdreq = -model->B3SOIFDtype * (here->B3SOIFDcdrain + here->B3SOIFDgds*vds + Gm * vgd + Gmbs * vbd + Gme * (ves - vds) + GmT * delTemp); ceqbs = here->B3SOIFDcjd; ceqbd = here->B3SOIFDcjs; /* Current going in is +ve */ ceqbody = -here->B3SOIFDcbody; ceqth = here->B3SOIFDcth; ceqbodcon = here->B3SOIFDcbodcon; gbbg = -here->B3SOIFDgbgs; gbbb = -here->B3SOIFDgbbs; gbbe = -here->B3SOIFDgbes; gbbp = -here->B3SOIFDgbps; gbbsp = -here->B3SOIFDgbds; gbbT = -model->B3SOIFDtype * here->B3SOIFDgbT; gbbdp = - ( gbbg + gbbsp + gbbb + gbbe + gbbp); gddpg = -here->B3SOIFDgjsg; gddpsp = -here->B3SOIFDgjsd; gddpb = -here->B3SOIFDgjsb; gddpe = 0.0; gddpT = -model->B3SOIFDtype * here->B3SOIFDgjsT; gddpdp = - (gddpg + gddpsp + gddpb + gddpe); gsspg = -here->B3SOIFDgjdg; gsspsp = -here->B3SOIFDgjdd; gsspb = -here->B3SOIFDgjdb; gsspe = -here->B3SOIFDgjde; gsspT = -model->B3SOIFDtype * here->B3SOIFDgjdT; gsspdp = - ( gsspg + gsspsp + gsspb + gsspe); gppg = -here->B3SOIFDgbpgs; gppsp = -here->B3SOIFDgbpds; gppb = -here->B3SOIFDgbpbs; gppe = -here->B3SOIFDgbpes; gppp = -here->B3SOIFDgbpps; gppT = -model->B3SOIFDtype * here->B3SOIFDgbpT; gppdp = - (gppg + gppsp + gppb + gppe + gppp); gTtg = here->B3SOIFDgtempg; gTtb = here->B3SOIFDgtempb; gTte = here->B3SOIFDgtempe; gTtsp = here->B3SOIFDgtempd; gTtt = here->B3SOIFDgtempT; gTtdp = - (gTtg + gTtb + gTte + gTtsp); } if (model->B3SOIFDtype > 0) { ceqqg = ceqqg; ceqqb = ceqqb; ceqqe = ceqqe; ceqqd = ceqqd; } else { ceqbodcon = -ceqbodcon; ceqbody = -ceqbody; ceqbs = -ceqbs; ceqbd = -ceqbd; ceqqg = -ceqqg; ceqqb = -ceqqb; ceqqd = -ceqqd; ceqqe = -ceqqe; } (*(ckt->CKTrhs + here->B3SOIFDgNode) -= m * ceqqg); (*(ckt->CKTrhs + here->B3SOIFDdNodePrime) += m * (ceqbd - cdreq - ceqqd)); (*(ckt->CKTrhs + here->B3SOIFDsNodePrime) += m * (cdreq + ceqbs + ceqqg + ceqqb + ceqqd + ceqqe)); (*(ckt->CKTrhs + here->B3SOIFDeNode) -= m * ceqqe); if (here->B3SOIFDbodyMod == 1) { (*(ckt->CKTrhs + here->B3SOIFDpNode) += m * ceqbodcon); } if (selfheat) { (*(ckt->CKTrhs + here->B3SOIFDtempNode) -= m * (ceqth + ceqqth)); } if ((here->B3SOIFDdebugMod > 1) || (here->B3SOIFDdebugMod == -1)) { *(ckt->CKTrhs + here->B3SOIFDvbsNode) = here->B3SOIFDvbsdio; *(ckt->CKTrhs + here->B3SOIFDidsNode) = here->B3SOIFDids; *(ckt->CKTrhs + here->B3SOIFDicNode) = here->B3SOIFDic; *(ckt->CKTrhs + here->B3SOIFDibsNode) = here->B3SOIFDibs; *(ckt->CKTrhs + here->B3SOIFDibdNode) = here->B3SOIFDibd; *(ckt->CKTrhs + here->B3SOIFDiiiNode) = here->B3SOIFDiii; *(ckt->CKTrhs + here->B3SOIFDigidlNode) = here->B3SOIFDigidl; *(ckt->CKTrhs + here->B3SOIFDitunNode) = here->B3SOIFDitun; *(ckt->CKTrhs + here->B3SOIFDibpNode) = here->B3SOIFDibp; *(ckt->CKTrhs + here->B3SOIFDabeffNode) = here->B3SOIFDabeff; *(ckt->CKTrhs + here->B3SOIFDvbs0effNode) = here->B3SOIFDvbs0eff; *(ckt->CKTrhs + here->B3SOIFDvbseffNode) = here->B3SOIFDvbseff; *(ckt->CKTrhs + here->B3SOIFDxcNode) = here->B3SOIFDxc; *(ckt->CKTrhs + here->B3SOIFDcbbNode) = here->B3SOIFDcbb; *(ckt->CKTrhs + here->B3SOIFDcbdNode) = here->B3SOIFDcbd; *(ckt->CKTrhs + here->B3SOIFDcbgNode) = here->B3SOIFDcbg; *(ckt->CKTrhs + here->B3SOIFDqbfNode) = here->B3SOIFDqbf; *(ckt->CKTrhs + here->B3SOIFDqjsNode) = here->B3SOIFDqjs; *(ckt->CKTrhs + here->B3SOIFDqjdNode) = here->B3SOIFDqjd; /* clean up last */ *(ckt->CKTrhs + here->B3SOIFDgmNode) = Gm; *(ckt->CKTrhs + here->B3SOIFDgmbsNode) = Gmbs; *(ckt->CKTrhs + here->B3SOIFDgdsNode) = Gds; *(ckt->CKTrhs + here->B3SOIFDgmeNode) = Gme; *(ckt->CKTrhs + here->B3SOIFDqdNode) = qdrn; *(ckt->CKTrhs + here->B3SOIFDcbeNode) = Cbe; *(ckt->CKTrhs + here->B3SOIFDvbs0teffNode) = Vbs0teff; *(ckt->CKTrhs + here->B3SOIFDvthNode) = here->B3SOIFDvon; *(ckt->CKTrhs + here->B3SOIFDvgsteffNode) = Vgsteff; *(ckt->CKTrhs + here->B3SOIFDxcsatNode) = Xcsat; *(ckt->CKTrhs + here->B3SOIFDqaccNode) = -Qac0; *(ckt->CKTrhs + here->B3SOIFDqsub0Node) = Qsub0; *(ckt->CKTrhs + here->B3SOIFDqsubs1Node) = Qsubs1; *(ckt->CKTrhs + here->B3SOIFDqsubs2Node) = Qsubs2; *(ckt->CKTrhs + here->B3SOIFDvdscvNode) = VdsCV; *(ckt->CKTrhs + here->B3SOIFDvcscvNode) = VcsCV; *(ckt->CKTrhs + here->B3SOIFDqgNode) = qgate; *(ckt->CKTrhs + here->B3SOIFDqbNode) = qbody; *(ckt->CKTrhs + here->B3SOIFDqeNode) = qsub; *(ckt->CKTrhs + here->B3SOIFDdum1Node) = here->B3SOIFDdum1; *(ckt->CKTrhs + here->B3SOIFDdum2Node) = here->B3SOIFDdum2; *(ckt->CKTrhs + here->B3SOIFDdum3Node) = here->B3SOIFDdum3; *(ckt->CKTrhs + here->B3SOIFDdum4Node) = here->B3SOIFDdum4; *(ckt->CKTrhs + here->B3SOIFDdum5Node) = here->B3SOIFDdum5; /* end clean up last */ } /* * load y matrix */ (*(here->B3SOIFDEgPtr) += m * gcegb); (*(here->B3SOIFDEdpPtr) += m * gcedb); (*(here->B3SOIFDEspPtr) += m * gcesb); (*(here->B3SOIFDGePtr) += m * gcgeb); (*(here->B3SOIFDDPePtr) += m * (Gme + gddpe + gcdeb)); (*(here->B3SOIFDSPePtr) += m * (gsspe - Gme + gcseb)); (*(here->B3SOIFDEePtr) += m * gceeb); (*(here->B3SOIFDGgPtr) += m * (gcggb + ckt->CKTgmin)); (*(here->B3SOIFDGdpPtr) += m * (gcgdb - ckt->CKTgmin)); (*(here->B3SOIFDGspPtr) += m * gcgsb ); (*(here->B3SOIFDDPgPtr) += m * ((Gm + gcdgb) + gddpg - ckt->CKTgmin)); (*(here->B3SOIFDDPdpPtr) += m * ((here->B3SOIFDdrainConductance + here->B3SOIFDgds + gddpdp + RevSum + gcddb) + ckt->CKTgmin)); (*(here->B3SOIFDDPspPtr) -= m * (-gddpsp + here->B3SOIFDgds + FwdSum - gcdsb)); (*(here->B3SOIFDDPdPtr) -= m * here->B3SOIFDdrainConductance); (*(here->B3SOIFDSPgPtr) += m * (gcsgb - Gm + gsspg)); (*(here->B3SOIFDSPdpPtr) -= m * (here->B3SOIFDgds - gsspdp + RevSum - gcsdb)); (*(here->B3SOIFDSPspPtr) += m * (here->B3SOIFDsourceConductance + here->B3SOIFDgds + gsspsp + FwdSum + gcssb)); (*(here->B3SOIFDSPsPtr) -= m * here->B3SOIFDsourceConductance); (*(here->B3SOIFDDdPtr) += m * here->B3SOIFDdrainConductance); (*(here->B3SOIFDDdpPtr) -= m * here->B3SOIFDdrainConductance); (*(here->B3SOIFDSsPtr) += m * here->B3SOIFDsourceConductance); (*(here->B3SOIFDSspPtr) -= m * here->B3SOIFDsourceConductance); if (here->B3SOIFDbodyMod == 1) { (*(here->B3SOIFDBpPtr) -= m * gppp); (*(here->B3SOIFDPbPtr) += m * gppb); (*(here->B3SOIFDPpPtr) += m * gppp); (*(here->B3SOIFDPgPtr) += m * gppg); (*(here->B3SOIFDPdpPtr) += m * gppdp); (*(here->B3SOIFDPspPtr) += m * gppsp); (*(here->B3SOIFDPePtr) += m * gppe); } if (selfheat) { (*(here->B3SOIFDDPtempPtr) += m * (GmT + gddpT + gcdT)); (*(here->B3SOIFDSPtempPtr) += m * (-GmT + gsspT + gcsT)); (*(here->B3SOIFDBtempPtr) += m * (gbbT + gcbT)); (*(here->B3SOIFDEtempPtr) += m * gceT); (*(here->B3SOIFDGtempPtr) += m * gcgT); if (here->B3SOIFDbodyMod == 1) { (*(here->B3SOIFDPtempPtr) += m * gppT); } (*(here->B3SOIFDTemptempPtr) += m * (gTtt + 1/pParam->B3SOIFDrth + gcTt)); (*(here->B3SOIFDTempgPtr) += m * gTtg); (*(here->B3SOIFDTempbPtr) += m * gTtb); (*(here->B3SOIFDTempePtr) += m * gTte); (*(here->B3SOIFDTempdpPtr) += m * gTtdp); (*(here->B3SOIFDTempspPtr) += m * gTtsp); } if ((here->B3SOIFDdebugMod > 1) || (here->B3SOIFDdebugMod == -1)) { *(here->B3SOIFDVbsPtr) += m * 1; *(here->B3SOIFDIdsPtr) += m * 1; *(here->B3SOIFDIcPtr) += m * 1; *(here->B3SOIFDIbsPtr) += m * 1; *(here->B3SOIFDIbdPtr) += m * 1; *(here->B3SOIFDIiiPtr) += m * 1; *(here->B3SOIFDIgidlPtr) += m * 1; *(here->B3SOIFDItunPtr) += m * 1; *(here->B3SOIFDIbpPtr) += m * 1; *(here->B3SOIFDAbeffPtr) += m * 1; *(here->B3SOIFDVbs0effPtr) += m * 1; *(here->B3SOIFDVbseffPtr) += m * 1; *(here->B3SOIFDXcPtr) += m * 1; *(here->B3SOIFDCbgPtr) += m * 1; *(here->B3SOIFDCbbPtr) += m * 1; *(here->B3SOIFDCbdPtr) += m * 1; *(here->B3SOIFDqbPtr) += m * 1; *(here->B3SOIFDQbfPtr) += m * 1; *(here->B3SOIFDQjsPtr) += m * 1; *(here->B3SOIFDQjdPtr) += m * 1; /* clean up last */ *(here->B3SOIFDGmPtr) += m * 1; *(here->B3SOIFDGmbsPtr) += m * 1; *(here->B3SOIFDGdsPtr) += m * 1; *(here->B3SOIFDGmePtr) += m * 1; *(here->B3SOIFDVbs0teffPtr) += m * 1; *(here->B3SOIFDVgsteffPtr) += m * 1; *(here->B3SOIFDCbePtr) += m * 1; *(here->B3SOIFDVthPtr) += m * 1; *(here->B3SOIFDXcsatPtr) += m * 1; *(here->B3SOIFDVdscvPtr) += m * 1; *(here->B3SOIFDVcscvPtr) += m * 1; *(here->B3SOIFDQaccPtr) += m * 1; *(here->B3SOIFDQsub0Ptr) += m * 1; *(here->B3SOIFDQsubs1Ptr) += m * 1; *(here->B3SOIFDQsubs2Ptr) += m * 1; *(here->B3SOIFDqgPtr) += m * 1; *(here->B3SOIFDqdPtr) += m * 1; *(here->B3SOIFDqePtr) += m * 1; *(here->B3SOIFDDum1Ptr) += m * 1; *(here->B3SOIFDDum2Ptr) += m * 1; *(here->B3SOIFDDum3Ptr) += m * 1; *(here->B3SOIFDDum4Ptr) += m * 1; *(here->B3SOIFDDum5Ptr) += m * 1; /* end clean up last */ } line1000: ; /* Here NaN will be detected in any conductance or equivalent current. Note that nandetect is initialized within the "if" statements */ if ((nandetect = isnan (*(here->B3SOIFDGgPtr))) != 0) { strcpy (nanmessage, "GgPtr"); } else if ((nandetect = isnan (*(here->B3SOIFDGdpPtr))) != 0) { strcpy (nanmessage, "GdpPtr"); } else if ((nandetect = isnan (*(here->B3SOIFDGspPtr))) != 0) { strcpy (nanmessage, "GspPtr"); } else if ((nandetect = isnan (*(here->B3SOIFDDPgPtr))) != 0) { strcpy (nanmessage, "DPgPtr"); } else if ((nandetect = isnan (*(here->B3SOIFDDPdpPtr))) != 0) { strcpy (nanmessage, "DPdpPtr"); } else if ((nandetect = isnan (*(here->B3SOIFDDPspPtr))) != 0) { strcpy (nanmessage, "DPspPtr"); } else if ((nandetect = isnan (*(here->B3SOIFDSPgPtr))) != 0) { strcpy (nanmessage, "SPgPtr"); } else if ((nandetect = isnan (*(here->B3SOIFDSPdpPtr))) != 0) { strcpy (nanmessage, "SPdpPtr"); } else if ((nandetect = isnan (*(here->B3SOIFDSPspPtr))) != 0) { strcpy (nanmessage, "SPspPtr"); } else if ((nandetect = isnan (*(here->B3SOIFDEePtr))) != 0) { strcpy (nanmessage, "EePtr"); } /* At this point, nandetect = 0 if none of the conductances checked so far are NaN */ if (nandetect == 0) { if ((nandetect = isnan (*(here->B3SOIFDEgPtr))) != 0) { strcpy (nanmessage, "EgPtr"); } else if ((nandetect = isnan (*(here->B3SOIFDEdpPtr))) != 0) { strcpy (nanmessage, "EdpPtr"); } else if ((nandetect = isnan (*(here->B3SOIFDEspPtr))) != 0) { strcpy (nanmessage, "EspPtr"); } else if ((nandetect = isnan (*(here->B3SOIFDGePtr))) != 0) { strcpy (nanmessage, "GePtr"); } else if ((nandetect = isnan (*(here->B3SOIFDDPePtr))) != 0) { strcpy (nanmessage, "DPePtr"); } else if ((nandetect = isnan (*(here->B3SOIFDSPePtr))) != 0) { strcpy (nanmessage, "SPePtr"); } } /* Now check if self-heating caused NaN if nothing else has so far (check tempnode current also) */ if (selfheat && nandetect == 0) { if ((nandetect = isnan (*(here->B3SOIFDTemptempPtr))) != 0) { strcpy (nanmessage, "TemptempPtr"); } else if ((nandetect = isnan (*(here->B3SOIFDTempgPtr))) != 0) { strcpy (nanmessage, "TempgPtr"); } else if ((nandetect = isnan (*(here->B3SOIFDTempbPtr))) != 0) { strcpy (nanmessage, "TempbPtr"); } else if ((nandetect = isnan (*(here->B3SOIFDTempePtr))) != 0) { strcpy (nanmessage, "TempePtr"); } else if ((nandetect = isnan (*(here->B3SOIFDTempdpPtr))) != 0) { strcpy (nanmessage, "TempdpPtr"); } else if ((nandetect = isnan (*(here->B3SOIFDTempspPtr))) != 0) { strcpy (nanmessage, "TempspPtr"); } else if ((nandetect = isnan (*(here->B3SOIFDGtempPtr))) != 0) { strcpy (nanmessage, "GtempPtr"); } else if ((nandetect = isnan (*(here->B3SOIFDDPtempPtr))) != 0) { strcpy (nanmessage, "DPtempPtr"); } else if ((nandetect = isnan (*(here->B3SOIFDSPtempPtr))) != 0) { strcpy (nanmessage, "SPtempPtr"); } else if ((nandetect = isnan (*(here->B3SOIFDEtempPtr))) != 0) { strcpy (nanmessage, "EtempPtr"); } else if ((nandetect = isnan (*(here->B3SOIFDBtempPtr))) != 0) { strcpy (nanmessage, "BtempPtr"); } else if ((nandetect = isnan (*(ckt->CKTrhs + here->B3SOIFDtempNode))) != 0) { strcpy (nanmessage, "tempNode"); } } /* Lastly, check all equivalent currents (tempnode is checked above */ if (nandetect == 0) { if ((nandetect = isnan (*(ckt->CKTrhs + here->B3SOIFDgNode))) != 0) { strcpy (nanmessage, "gNode"); } else if ((nandetect = isnan (*(ckt->CKTrhs + here->B3SOIFDbNode))) != 0) { strcpy (nanmessage, "bNode"); } else if ((nandetect = isnan (*(ckt->CKTrhs + here->B3SOIFDdNodePrime))) != 0) { strcpy (nanmessage, "dpNode"); } else if ((nandetect = isnan (*(ckt->CKTrhs + here->B3SOIFDsNodePrime))) != 0) { strcpy (nanmessage, "spNode"); } else if ((nandetect = isnan (*(ckt->CKTrhs + here->B3SOIFDeNode))) != 0) { strcpy (nanmessage, "eNode"); } } /* Now print error message if NaN detected. Note that error will only be printed once (the first time it is encountered) each time SPICE is run since nanfound is static variable */ if (nanfound == 0 && nandetect) { fprintf(stderr, "Alberto says: YOU TURKEY! %s is NaN for instance %s at time %g!\n", nanmessage, here->B3SOIFDname, ckt->CKTtime); nanfound = nandetect; fprintf(stderr, " The program exit!\n"); controlled_exit(EXIT_FAILURE); } if (here->B3SOIFDdebugMod > 2) { fprintf(fpdebug, "Ids = %.4e, Ic = %.4e, cqdrn = %.4e, gmin=%.3e\n", Ids, Ic, cqdrn, ckt->CKTgmin); fprintf(fpdebug, "Iii = %.4e, Idgidl = %.4e, Ibs = %.14e\n", Iii, Idgidl, Ibs); fprintf(fpdebug, "Ibd = %.4e, Ibp = %.4e\n", Ibd, Ibp); fprintf(fpdebug, "qbody = %.5e, qbf = %.5e, qbe = %.5e\n", qbody, Qbf, -(Qe1+Qe2)); fprintf(fpdebug, "qbs = %.5e, qbd = %.5e\n", qjs, qjd); fprintf(fpdebug, "qdrn = %.5e, qinv = %.5e\n", qdrn, qinv); /* I am trying to debug the convergence problems here by printing out the entire Jacobian and equivalent current matrix */ if (here->B3SOIFDdebugMod > 4) { fprintf(fpdebug, "Ibtot = %.6e;\t Cbtot = %.6e;\n", Ibs+Ibp+Ibd-Iii-Idgidl-Isgidl, cqbody); fprintf(fpdebug, "ceqg = %.6e;\t ceqb = %.6e;\t ceqdp = %.6e;\t ceqsp = %.6e;\n", *(ckt->CKTrhs + here->B3SOIFDgNode), *(ckt->CKTrhs + here->B3SOIFDbNode), *(ckt->CKTrhs + here->B3SOIFDdNodePrime), *(ckt->CKTrhs + here->B3SOIFDsNodePrime)); fprintf(fpdebug, "ceqe = %.6e;\t ceqp = %.6e;\t ceqth = %.6e;\n", *(ckt->CKTrhs + here->B3SOIFDeNode), *(ckt->CKTrhs + here->B3SOIFDpNode), *(ckt->CKTrhs + here->B3SOIFDtempNode)); fprintf(fpdebug, "Eg = %.5e;\t Edp = %.5e;\t Esp = %.5e;\t Eb = %.5e;\n", *(here->B3SOIFDEgPtr), *(here->B3SOIFDEdpPtr), *(here->B3SOIFDEspPtr), *(here->B3SOIFDEbPtr)); fprintf(fpdebug, "Ee = %.5e;\t Gg = %.5e;\t Gdp = %.5e;\t Gsp = %.5e;\n", *(here->B3SOIFDEePtr), *(here->B3SOIFDGgPtr), *(here->B3SOIFDGdpPtr), *(here->B3SOIFDGspPtr)); fprintf(fpdebug, "Gb = %.5e;\t Ge = %.5e;\t DPg = %.5e;\t DPdp = %.5e;\n", *(here->B3SOIFDGbPtr), *(here->B3SOIFDGePtr), *(here->B3SOIFDDPgPtr), *(here->B3SOIFDDPdpPtr)); fprintf(fpdebug, "DPsp = %.5e;\t DPb = %.5e;\t DPe = %.5e;\t\n", *(here->B3SOIFDDPspPtr), *(here->B3SOIFDDPbPtr), *(here->B3SOIFDDPePtr)); fprintf(fpdebug, "DPd = %.5e;\t SPg = %.5e;\t SPdp = %.5e;\t SPsp = %.5e;\n", *(here->B3SOIFDDPdPtr), *(here->B3SOIFDSPgPtr), *(here->B3SOIFDSPdpPtr), *(here->B3SOIFDSPspPtr)); fprintf(fpdebug, "SPb = %.5e;\t SPe = %.5e;\t SPs = %.5e;\n", *(here->B3SOIFDSPbPtr), *(here->B3SOIFDSPePtr), *(here->B3SOIFDSPsPtr)); fprintf(fpdebug, "Dd = %.5e;\t Ddp = %.5e;\t Ss = %.5e;\t Ssp = %.5e;\n", *(here->B3SOIFDDdPtr), *(here->B3SOIFDDdpPtr), *(here->B3SOIFDSsPtr), *(here->B3SOIFDSspPtr)); fprintf(fpdebug, "Bg = %.5e;\t Bdp = %.5e;\t Bsp = %.5e;\t Bb = %.5e;\n", *(here->B3SOIFDBgPtr), *(here->B3SOIFDBdpPtr), *(here->B3SOIFDBspPtr), *(here->B3SOIFDBbPtr)); fprintf(fpdebug, "Be = %.5e;\t Btot = %.5e;\t DPtot = %.5e;\n", *(here->B3SOIFDBePtr), *(here->B3SOIFDBgPtr) + *(here->B3SOIFDBdpPtr) + *(here->B3SOIFDBspPtr) + *(here->B3SOIFDBbPtr) + *(here->B3SOIFDBePtr), *(here->B3SOIFDDPePtr) + *(here->B3SOIFDDPgPtr) + *(here->B3SOIFDDPdpPtr) + *(here->B3SOIFDDPspPtr) + *(here->B3SOIFDDPbPtr)); if (selfheat) { fprintf (fpdebug, "DPtemp = %.5e;\t SPtemp = %.5e;\t Btemp = %.5e;\n", *(here->B3SOIFDDPtempPtr), *(here->B3SOIFDSPtempPtr), *(here->B3SOIFDBtempPtr)); fprintf (fpdebug, "Gtemp = %.5e;\t Etemp = %.5e;\n", *(here->B3SOIFDGtempPtr), *(here->B3SOIFDEtempPtr)); fprintf (fpdebug, "Tempg = %.5e;\t Tempdp = %.5e;\t Tempsp = %.5e;\t Tempb = %.5e;\n", *(here->B3SOIFDTempgPtr), *(here->B3SOIFDTempdpPtr), *(here->B3SOIFDTempspPtr), *(here->B3SOIFDTempbPtr)); fprintf (fpdebug, "Tempe = %.5e;\t TempT = %.5e;\t Temptot = %.5e;\n", *(here->B3SOIFDTempePtr), *(here->B3SOIFDTemptempPtr), *(here->B3SOIFDTempgPtr) + *(here->B3SOIFDTempdpPtr) + *(here->B3SOIFDTempspPtr)+ *(here->B3SOIFDTempbPtr) + *(here->B3SOIFDTempePtr)); } if (here->B3SOIFDbodyMod == 1) { fprintf(fpdebug, "ceqbodcon=%.5e;\t", ceqbodcon); fprintf(fpdebug, "Bp = %.5e;\t Pb = %.5e;\t Pp = %.5e;\n", -gppp, gppb, gppp); fprintf(fpdebug, "Pg=%.5e;\t Pdp=%.5e;\t Psp=%.5e;\t Pe=%.5e;\n", gppg, gppdp, gppsp, gppe); } } if (here->B3SOIFDdebugMod > 3) { fprintf(fpdebug, "Vth = %.4f, Vbs0eff = %.8f, Vdsat = %.4f\n", Vth, Vbs0eff, Vdsat); fprintf(fpdebug, "ueff = %g, Vgsteff = %.4f, Vdseff = %.4f\n", ueff, Vgsteff, Vdseff); fprintf(fpdebug, "Vthfd = %.4f, Vbs0mos = %.4f, Vbs0 = %.4f\n", Vthfd, Vbs0mos, Vbs0); fprintf(fpdebug, "Vbs0t = %.4f, Vbsdio = %.8f\n", Vbs0t, Vbsdio); } fclose(fpdebug); } here->B3SOIFDiterations++; /* increment the iteration counter */ } /* End of Mosfet Instance */ } /* End of Model Instance */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_fd/b3soifdpzld.c0000644000175000017500000001424513546075722023761 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang Modified by Paolo Nenzi 2002 File: b3soifdpzld.c 98/5/01 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMFD2.1 release */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "b3soifddef.h" #include "ngspice/suffix.h" int B3SOIFDpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { B3SOIFDmodel *model = (B3SOIFDmodel*)inModel; B3SOIFDinstance *here; double xcggb, xcgdb, xcgsb, xcbgb, xcbdb, xcbsb, xcddb, xcssb, xcdgb; double gdpr, gspr, gds, gbd, gbs, capbd = 0.0, capbs = 0.0; double xcsgb, xcdsb, xcsdb; double cggb, cgdb, cgsb, cbgb, cbdb, cbsb, cddb, cdgb, cdsb; double GSoverlapCap, GDoverlapCap, GBoverlapCap = 0.0; double FwdSum, RevSum, Gm, Gmbs; double m; NG_IGNORE(ckt); for (; model != NULL; model = B3SOIFDnextModel(model)) { for (here = B3SOIFDinstances(model); here!= NULL; here = B3SOIFDnextInstance(here)) { if (here->B3SOIFDmode >= 0) { Gm = here->B3SOIFDgm; Gmbs = here->B3SOIFDgmbs; FwdSum = Gm + Gmbs; RevSum = 0.0; cggb = here->B3SOIFDcggb; cgsb = here->B3SOIFDcgsb; cgdb = here->B3SOIFDcgdb; cbgb = here->B3SOIFDcbgb; cbsb = here->B3SOIFDcbsb; cbdb = here->B3SOIFDcbdb; cdgb = here->B3SOIFDcdgb; cdsb = here->B3SOIFDcdsb; cddb = here->B3SOIFDcddb; } else { Gm = -here->B3SOIFDgm; Gmbs = -here->B3SOIFDgmbs; FwdSum = 0.0; RevSum = -Gm - Gmbs; cggb = here->B3SOIFDcggb; cgsb = here->B3SOIFDcgdb; cgdb = here->B3SOIFDcgsb; cbgb = here->B3SOIFDcbgb; cbsb = here->B3SOIFDcbdb; cbdb = here->B3SOIFDcbsb; cdgb = -(here->B3SOIFDcdgb + cggb + cbgb); cdsb = -(here->B3SOIFDcddb + cgsb + cbsb); cddb = -(here->B3SOIFDcdsb + cgdb + cbdb); } gdpr=here->B3SOIFDdrainConductance; gspr=here->B3SOIFDsourceConductance; gds= here->B3SOIFDgds; gbd= here->B3SOIFDgjdb; gbs= here->B3SOIFDgjsb; #ifdef BULKCODE capbd= here->B3SOIFDcapbd; capbs= here->B3SOIFDcapbs; #endif GSoverlapCap = here->B3SOIFDcgso; GDoverlapCap = here->B3SOIFDcgdo; #ifdef BULKCODE GBoverlapCap = here->pParam->B3SOIFDcgbo; #endif xcdgb = (cdgb - GDoverlapCap); xcddb = (cddb + capbd + GDoverlapCap); xcdsb = cdsb; xcsgb = -(cggb + cbgb + cdgb + GSoverlapCap); xcsdb = -(cgdb + cbdb + cddb); xcssb = (capbs + GSoverlapCap - (cgsb+cbsb+cdsb)); xcggb = (cggb + GDoverlapCap + GSoverlapCap + GBoverlapCap); xcgdb = (cgdb - GDoverlapCap); xcgsb = (cgsb - GSoverlapCap); xcbgb = (cbgb - GBoverlapCap); xcbdb = (cbdb - capbd); xcbsb = (cbsb - capbs); m = here->B3SOIFDm; *(here->B3SOIFDGgPtr ) += m * (xcggb * s->real); *(here->B3SOIFDGgPtr +1) += m * (xcggb * s->imag); *(here->B3SOIFDBbPtr ) += m * ((-xcbgb-xcbdb-xcbsb) * s->real); *(here->B3SOIFDBbPtr +1) += m * ((-xcbgb-xcbdb-xcbsb) * s->imag); *(here->B3SOIFDDPdpPtr ) += m * (xcddb * s->real); *(here->B3SOIFDDPdpPtr +1) += m * (xcddb * s->imag); *(here->B3SOIFDSPspPtr ) += m * (xcssb * s->real); *(here->B3SOIFDSPspPtr +1) += m * (xcssb * s->imag); *(here->B3SOIFDGbPtr ) += m * ((-xcggb-xcgdb-xcgsb) * s->real); *(here->B3SOIFDGbPtr +1) += m * ((-xcggb-xcgdb-xcgsb) * s->imag); *(here->B3SOIFDGdpPtr ) += m * (xcgdb * s->real); *(here->B3SOIFDGdpPtr +1) += m * (xcgdb * s->imag); *(here->B3SOIFDGspPtr ) += m * (xcgsb * s->real); *(here->B3SOIFDGspPtr +1) += m * (xcgsb * s->imag); *(here->B3SOIFDBgPtr ) += m * (xcbgb * s->real); *(here->B3SOIFDBgPtr +1) += m * (xcbgb * s->imag); *(here->B3SOIFDBdpPtr ) += m * (xcbdb * s->real); *(here->B3SOIFDBdpPtr +1) += m * (xcbdb * s->imag); *(here->B3SOIFDBspPtr ) += m * (xcbsb * s->real); *(here->B3SOIFDBspPtr +1) += m * (xcbsb * s->imag); *(here->B3SOIFDDPgPtr ) += m * (xcdgb * s->real); *(here->B3SOIFDDPgPtr +1) += m * (xcdgb * s->imag); *(here->B3SOIFDDPbPtr ) += m * ((-xcdgb-xcddb-xcdsb) * s->real); *(here->B3SOIFDDPbPtr +1) += m * ((-xcdgb-xcddb-xcdsb) * s->imag); *(here->B3SOIFDDPspPtr ) += m * (xcdsb * s->real); *(here->B3SOIFDDPspPtr +1) += m * (xcdsb * s->imag); *(here->B3SOIFDSPgPtr ) += m * (xcsgb * s->real); *(here->B3SOIFDSPgPtr +1) += m * (xcsgb * s->imag); *(here->B3SOIFDSPbPtr ) += m * ((-xcsgb-xcsdb-xcssb) * s->real); *(here->B3SOIFDSPbPtr +1) += m * ((-xcsgb-xcsdb-xcssb) * s->imag); *(here->B3SOIFDSPdpPtr ) += m * (xcsdb * s->real); *(here->B3SOIFDSPdpPtr +1) += m * (xcsdb * s->imag); *(here->B3SOIFDDdPtr) += m * gdpr; *(here->B3SOIFDSsPtr) += m * gspr; *(here->B3SOIFDBbPtr) += m * (gbd + gbs); *(here->B3SOIFDDPdpPtr) += m * (gdpr + gds + gbd + RevSum); *(here->B3SOIFDSPspPtr) += m * (gspr + gds + gbs + FwdSum); *(here->B3SOIFDDdpPtr) -= m * gdpr; *(here->B3SOIFDSspPtr) -= m * gspr; *(here->B3SOIFDBdpPtr) -= m * gbd; *(here->B3SOIFDBspPtr) -= m * gbs; *(here->B3SOIFDDPdPtr) -= m * gdpr; *(here->B3SOIFDDPgPtr) += m * Gm; *(here->B3SOIFDDPbPtr) -= m * (gbd - Gmbs); *(here->B3SOIFDDPspPtr) -= m * (gds + FwdSum); *(here->B3SOIFDSPgPtr) -= m * Gm; *(here->B3SOIFDSPsPtr) -= m * gspr; *(here->B3SOIFDSPbPtr) -= m * (gbs + Gmbs); *(here->B3SOIFDSPdpPtr) -= m * (gds + RevSum); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mes/0000755000175000017500000000000013546075722017747 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/mes/mesdefs.h0000644000175000017500000001715613546075722021560 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 S. Hwang **********/ #ifndef MES #define MES #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" #define MESnumStates 13 /* structures used to describe MESFET Transistors */ /* indices to the array of MESFET noise sources */ enum { MESRDNOIZ = 0, MESRSNOIZ, MESIDNOIZ, MESFLNOIZ, MESTOTNOIZ, /* finally, the number of noise sources */ MESNSRCS }; /* information used to describe a single instance */ typedef struct sMESinstance { struct GENinstance gen; #define MESmodPtr(inst) ((struct sMESmodel *)((inst)->gen.GENmodPtr)) #define MESnextInstance(inst) ((struct sMESinstance *)((inst)->gen.GENnextInstance)) #define MESname gen.GENname #define MESstate gen.GENstate const int MESdrainNode; /* number of drain node of mesfet */ const int MESgateNode; /* number of gate node of mesfet */ const int MESsourceNode; /* number of source node of mesfet */ int MESdrainPrimeNode; /* number of internal drain node of mesfet */ int MESsourcePrimeNode; /* number of internal source node of mesfet */ double MESarea; /* area factor for the mesfet */ double MESm; /* Parallel multiplier */ double MESicVDS; /* initial condition voltage D-S*/ double MESicVGS; /* initial condition voltage G-S*/ double *MESdrainDrainPrimePtr; /* pointer to sparse matrix at * (drain,drain prime) */ double *MESgateDrainPrimePtr; /* pointer to sparse matrix at * (gate,drain prime) */ double *MESgateSourcePrimePtr; /* pointer to sparse matrix at * (gate,source prime) */ double *MESsourceSourcePrimePtr; /* pointer to sparse matrix at * (source,source prime) */ double *MESdrainPrimeDrainPtr; /* pointer to sparse matrix at * (drain prime,drain) */ double *MESdrainPrimeGatePtr; /* pointer to sparse matrix at * (drain prime,gate) */ double *MESdrainPrimeSourcePrimePtr; /* pointer to sparse matrix * (drain prime,source prime) */ double *MESsourcePrimeGatePtr; /* pointer to sparse matrix at * (source prime,gate) */ double *MESsourcePrimeSourcePtr; /* pointer to sparse matrix at * (source prime,source) */ double *MESsourcePrimeDrainPrimePtr; /* pointer to sparse matrix * (source prime,drain prime) */ double *MESdrainDrainPtr; /* pointer to sparse matrix at * (drain,drain) */ double *MESgateGatePtr; /* pointer to sparse matrix at * (gate,gate) */ double *MESsourceSourcePtr; /* pointer to sparse matrix at * (source,source) */ double *MESdrainPrimeDrainPrimePtr; /* pointer to sparse matrix * (drain prime,drain prime) */ double *MESsourcePrimeSourcePrimePtr; /* pointer to sparse matrix * (source prime,source prime) */ int MESoff; /* 'off' flag for mesfet */ unsigned MESareaGiven : 1; /* flag to indicate area was specified */ unsigned MESmGiven : 1; /* flag to indicate multiplier specified*/ unsigned MESicVDSGiven : 1; /* initial condition given flag for V D-S*/ unsigned MESicVGSGiven : 1; /* initial condition given flag for V G-S*/ int MESmode; /* * naming convention: * x = vgs * y = vgd * z = vds * cdr = cdrain */ #define MESNDCOEFFS 27 #ifndef NODISTO double MESdCoeffs[MESNDCOEFFS]; #else /* NODISTO */ double *MESdCoeffs; #endif /* NODISTO */ #ifndef CONFIG #define cdr_x MESdCoeffs[0] #define cdr_z MESdCoeffs[1] #define cdr_x2 MESdCoeffs[2] #define cdr_z2 MESdCoeffs[3] #define cdr_xz MESdCoeffs[4] #define cdr_x3 MESdCoeffs[5] #define cdr_z3 MESdCoeffs[6] #define cdr_x2z MESdCoeffs[7] #define cdr_xz2 MESdCoeffs[8] #define ggs3 MESdCoeffs[9] #define ggd3 MESdCoeffs[10] #define ggs2 MESdCoeffs[11] #define ggd2 MESdCoeffs[12] #define qgs_x2 MESdCoeffs[13] #define qgs_y2 MESdCoeffs[14] #define qgs_xy MESdCoeffs[15] #define qgs_x3 MESdCoeffs[16] #define qgs_y3 MESdCoeffs[17] #define qgs_x2y MESdCoeffs[18] #define qgs_xy2 MESdCoeffs[19] #define qgd_x2 MESdCoeffs[20] #define qgd_y2 MESdCoeffs[21] #define qgd_xy MESdCoeffs[22] #define qgd_x3 MESdCoeffs[23] #define qgd_y3 MESdCoeffs[24] #define qgd_x2y MESdCoeffs[25] #define qgd_xy2 MESdCoeffs[26] #endif #ifndef NONOISE double MESnVar[NSTATVARS][MESNSRCS]; #else /* NONOISE */ double **MESnVar; #endif /* NONOISE */ } MESinstance ; #define MESvgs MESstate #define MESvgd MESstate+1 #define MEScg MESstate+2 #define MEScd MESstate+3 #define MEScgd MESstate+4 #define MESgm MESstate+5 #define MESgds MESstate+6 #define MESggs MESstate+7 #define MESggd MESstate+8 #define MESqgs MESstate+9 #define MEScqgs MESstate+10 #define MESqgd MESstate+11 #define MEScqgd MESstate+12 /* per model data */ typedef struct sMESmodel { /* model structure for a mesfet */ struct GENmodel gen; #define MESmodType gen.GENmodType #define MESnextModel(inst) ((struct sMESmodel *)((inst)->gen.GENnextModel)) #define MESinstances(inst) ((MESinstance *)((inst)->gen.GENinstances)) #define MESmodName gen.GENmodName int MEStype; double MESthreshold; double MESalpha; double MESbeta; double MESlModulation; double MESb; double MESdrainResist; double MESsourceResist; double MEScapGS; double MEScapGD; double MESgatePotential; double MESgateSatCurrent; double MESdepletionCapCoeff; double MESfNcoef; double MESfNexp; double MESdrainConduct; double MESsourceConduct; double MESdepletionCap; double MESf1; double MESf2; double MESf3; double MESvcrit; unsigned MESthresholdGiven : 1; unsigned MESalphaGiven : 1; unsigned MESbetaGiven : 1; unsigned MESlModulationGiven : 1; unsigned MESbGiven : 1; unsigned MESdrainResistGiven : 1; unsigned MESsourceResistGiven : 1; unsigned MEScapGSGiven : 1; unsigned MEScapGDGiven : 1; unsigned MESgatePotentialGiven : 1; unsigned MESgateSatCurrentGiven : 1; unsigned MESdepletionCapCoeffGiven : 1; unsigned MESfNcoefGiven : 1; unsigned MESfNexpGiven : 1; } MESmodel; #ifndef NMF #define NMF 1 #define PMF -1 #endif /*NMF*/ /* device parameters */ enum { MES_AREA = 1, MES_IC_VDS, MES_IC_VGS, MES_IC, MES_OFF, MES_CS, MES_POWER, MES_M, }; /* model parameters */ enum { MES_MOD_VTO = 101, MES_MOD_ALPHA, MES_MOD_BETA, MES_MOD_LAMBDA, MES_MOD_B, MES_MOD_RD, MES_MOD_RS, MES_MOD_CGS, MES_MOD_CGD, MES_MOD_PB, MES_MOD_IS, MES_MOD_FC, MES_MOD_NMF, MES_MOD_PMF, MES_MOD_KF, MES_MOD_AF, }; /* device questions */ enum { MES_DRAINNODE = 201, MES_GATENODE, MES_SOURCENODE, MES_DRAINPRIMENODE, MES_SOURCEPRIMENODE, MES_VGS, MES_VGD, MES_CG, MES_CD, MES_CGD, MES_GM, MES_GDS, MES_GGS, MES_GGD, MES_QGS, MES_CQGS, MES_QGD, MES_CQGD, }; /* model questions */ enum { MES_MOD_DRAINCONDUCT = 301, MES_MOD_SOURCECONDUCT, MES_MOD_DEPLETIONCAP, MES_MOD_VCRIT, MES_MOD_TYPE, }; #include "mesext.h" #endif /*MES*/ tmpk8ny_4pz/src/spicelib/devices/mes/mestemp.c0000644000175000017500000000276413546075722021576 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 S. Hwang **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mesdefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int MEStemp(GENmodel *inModel, CKTcircuit *ckt) /* load the mes structure with those pointers needed later * for fast matrix loading */ { MESmodel *model = (MESmodel*)inModel; double xfc, temp; NG_IGNORE(ckt); /* loop through all the diode models */ for( ; model != NULL; model = MESnextModel(model)) { if(model->MESdrainResist != 0) { model->MESdrainConduct = 1/model->MESdrainResist; } else { model->MESdrainConduct = 0; } if(model->MESsourceResist != 0) { model->MESsourceConduct = 1/model->MESsourceResist; } else { model->MESsourceConduct = 0; } model->MESdepletionCap = model->MESdepletionCapCoeff * model->MESgatePotential; xfc = (1 - model->MESdepletionCapCoeff); temp = sqrt(xfc); model->MESf1 = model->MESgatePotential * (1 - temp)/(1-.5); model->MESf2 = temp * temp * temp; model->MESf3 = 1 - model->MESdepletionCapCoeff * (1 + .5); model->MESvcrit = CONSTvt0 * log(CONSTvt0/ (CONSTroot2 * model->MESgateSatCurrent)); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mes/mesnoise.c0000644000175000017500000001303013546075722021732 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Gary W. Ng **********/ #include "ngspice/ngspice.h" #include "mesdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" /* * MESnoise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with MESFET's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the MESFET's is summed with the variable "OnDens". */ int MESnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; MESmodel *firstModel = (MESmodel *) genmodel; MESmodel *model; MESinstance *inst; double tempOnoise; double tempInoise; double noizDens[MESNSRCS]; double lnNdens[MESNSRCS]; int i; /* define the names of the noise sources */ static char *MESnNames[MESNSRCS] = { /* Note that we have to keep the order */ "_rd", /* noise due to rd */ /* consistent with thestrchr definitions */ "_rs", /* noise due to rs */ /* in MESdefs.h */ "_id", /* noise due to id */ "_1overf", /* flicker (1/f) noise */ "" /* total transistor noise */ }; for (model=firstModel; model != NULL; model=MESnextModel(model)) { for (inst=MESinstances(model); inst != NULL; inst=MESnextInstance(inst)) { switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i=0; i < MESNSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_%s%s", inst->MESname, MESnNames[i]); } break; case INT_NOIZ: for (i=0; i < MESNSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total_%s%s", inst->MESname, MESnNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total_%s%s", inst->MESname, MESnNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: NevalSrc(&noizDens[MESRDNOIZ],&lnNdens[MESRDNOIZ], ckt,THERMNOISE,inst->MESdrainPrimeNode,inst->MESdrainNode, model->MESdrainConduct * inst->MESarea * inst->MESm); NevalSrc(&noizDens[MESRSNOIZ],&lnNdens[MESRSNOIZ], ckt,THERMNOISE,inst->MESsourcePrimeNode,inst->MESsourceNode, model->MESsourceConduct * inst->MESarea * inst->MESm); NevalSrc(&noizDens[MESIDNOIZ],&lnNdens[MESIDNOIZ], ckt,THERMNOISE,inst->MESdrainPrimeNode, inst->MESsourcePrimeNode, (2.0/3.0 * inst->MESm * fabs(*(ckt->CKTstate0 + inst->MESgm)))); NevalSrc(&noizDens[MESFLNOIZ], NULL, ckt, N_GAIN,inst->MESdrainPrimeNode, inst->MESsourcePrimeNode, (double)0.0); noizDens[MESFLNOIZ] *= inst->MESm * model->MESfNcoef * exp(model->MESfNexp * log(MAX(fabs(*(ckt->CKTstate0 + inst->MEScd)),N_MINLOG))) / data->freq; lnNdens[MESFLNOIZ] = log(MAX(noizDens[MESFLNOIZ],N_MINLOG)); noizDens[MESTOTNOIZ] = noizDens[MESRDNOIZ] + noizDens[MESRSNOIZ] + noizDens[MESIDNOIZ] + noizDens[MESFLNOIZ]; lnNdens[MESTOTNOIZ] = log(MAX(noizDens[MESTOTNOIZ], N_MINLOG)); *OnDens += noizDens[MESTOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to */ /* initialize our "history" variables */ for (i=0; i < MESNSRCS; i++) { inst->MESnVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i=0; i < MESNSRCS; i++) { inst->MESnVar[OUTNOIZ][i] = 0.0; inst->MESnVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0 (we have to integrate) */ for (i=0; i < MESNSRCS; i++) { if (i != MESTOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], inst->MESnVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv , lnNdens[i] + data->lnGainInv, inst->MESnVar[LNLSTDENS][i] + data->lnGainInv, data); inst->MESnVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { inst->MESnVar[OUTNOIZ][i] += tempOnoise; inst->MESnVar[OUTNOIZ][MESTOTNOIZ] += tempOnoise; inst->MESnVar[INNOIZ][i] += tempInoise; inst->MESnVar[INNOIZ][MESTOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i=0; i < MESNSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i=0; i < MESNSRCS; i++) { data->outpVector[data->outNumber++] = inst->MESnVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = inst->MESnVar[INNOIZ][i]; } } /* if */ break; } /* switch (mode) */ break; case N_CLOSE: return (OK); /* do nothing, the main calling routine will close */ break; /* the plots */ } /* switch (operation) */ } /* for inst */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/mes/Makefile.am0000644000175000017500000000074613546075722022012 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libmes.la libmes_la_SOURCES = \ mes.c \ mesacl.c \ mesask.c \ mesdefs.h \ mesdisto.c \ mesdset.c \ mesext.h \ mesgetic.c \ mesinit.c \ mesinit.h \ mesitf.h \ mesload.c \ mesmask.c \ mesmpar.c \ mesnoise.c \ mesparam.c \ mespzld.c \ messetup.c \ mestemp.c \ mestrunc.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/mes/mesask.c0000644000175000017500000001110213546075722021371 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "mesdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int MESask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { MESinstance *here = (MESinstance*)inst; static char *msg = "Current and power not available in ac analysis"; NG_IGNORE(select); switch(which) { case MES_AREA: value->rValue = here->MESarea; value->rValue *= here->MESm; return (OK); case MES_IC_VDS: value->rValue = here->MESicVDS; return (OK); case MES_IC_VGS: value->rValue = here->MESicVGS; return (OK); case MES_OFF: value->iValue = here->MESoff; return (OK); case MES_DRAINNODE: value->iValue = here->MESdrainNode; return (OK); case MES_GATENODE: value->iValue = here->MESgateNode; return (OK); case MES_SOURCENODE: value->iValue = here->MESsourceNode; return (OK); case MES_DRAINPRIMENODE: value->iValue = here->MESdrainPrimeNode; return (OK); case MES_VGS: value->rValue = *(ckt->CKTstate0 + here->MESvgs); return (OK); case MES_VGD: value->rValue = *(ckt->CKTstate0 + here->MESvgd); return (OK); case MES_CG: value->rValue = *(ckt->CKTstate0 + here->MEScg); value->rValue *= here->MESm; return (OK); case MES_CD: value->rValue = *(ckt->CKTstate0 + here->MEScd); value->rValue *= here->MESm; return (OK); case MES_CGD: value->rValue = *(ckt->CKTstate0 + here->MEScgd); value->rValue *= here->MESm; return (OK); case MES_GM: value->rValue = *(ckt->CKTstate0 + here->MESgm); value->rValue *= here->MESm; return (OK); case MES_GDS: value->rValue = *(ckt->CKTstate0 + here->MESgds); value->rValue *= here->MESm; return (OK); case MES_GGS: value->rValue = *(ckt->CKTstate0 + here->MESggs); value->rValue *= here->MESm; return (OK); case MES_GGD: value->rValue = *(ckt->CKTstate0 + here->MESggd); value->rValue *= here->MESm; return (OK); case MES_QGS: value->rValue = *(ckt->CKTstate0 + here->MESqgs); value->rValue *= here->MESm; return (OK); case MES_CQGS: value->rValue = *(ckt->CKTstate0 + here->MEScqgs); value->rValue *= here->MESm; return (OK); case MES_QGD: value->rValue = *(ckt->CKTstate0 + here->MESqgd); value->rValue *= here->MESm; return (OK); case MES_CQGD: value->rValue = *(ckt->CKTstate0 + here->MEScqgd); value->rValue *= here->MESm; return (OK); case MES_CS : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MESask"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = -*(ckt->CKTstate0 + here->MEScd); value->rValue -= *(ckt->CKTstate0 + here->MEScg); value->rValue *= here->MESm; } return(OK); case MES_POWER : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MESask"; strcpy(errMsg,msg); return(E_ASKPOWER); } else { value->rValue = *(ckt->CKTstate0 + here->MEScd) * *(ckt->CKTrhsOld + here->MESdrainNode); value->rValue += *(ckt->CKTstate0 + here->MEScg) * *(ckt->CKTrhsOld + here->MESgateNode); value->rValue -= (*(ckt->CKTstate0+here->MEScd) + *(ckt->CKTstate0 + here->MEScg)) * *(ckt->CKTrhsOld + here->MESsourceNode); value->rValue *= here->MESm; } return(OK); default: return (E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/mes/mes.c0000644000175000017500000000715113546075722020703 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/devdefs.h" #include "mesdefs.h" #include "ngspice/suffix.h" IFparm MESpTable[] = { /* parameters */ OPU("off", MES_OFF, IF_FLAG ,"Device initially off"), IOPU("area", MES_AREA, IF_REAL ,"Area factor"), IOPUR("m", MES_AREA, IF_REAL ,"Parallel Multiplier"), IOPAU("icvds", MES_IC_VDS, IF_REAL ,"Initial D-S voltage"), IOPAU("icvgs", MES_IC_VGS, IF_REAL ,"Initial G-S voltage"), OPU("dnode", MES_DRAINNODE, IF_INTEGER,"Number of drain node"), OPU("gnode", MES_GATENODE, IF_INTEGER,"Number of gate node"), OPU("snode", MES_SOURCENODE, IF_INTEGER,"Number of source node"), OPU("dprimenode",MES_DRAINPRIMENODE,IF_INTEGER,"Number of internal drain node"), OPU("sprimenode",MES_SOURCEPRIMENODE,IF_INTEGER, "Number of internal source node"), OP("vgs", MES_VGS, IF_REAL,"Gate-Source voltage"), OP("vgd", MES_VGD, IF_REAL,"Gate-Drain voltage"), OP("cg", MES_CG, IF_REAL,"Gate capacitance"), OP("cd", MES_CD, IF_REAL,"Drain capacitance"), OP("cgd", MES_CGD, IF_REAL,"Gate-Drain capacitance"), OP("gm", MES_GM, IF_REAL,"Transconductance"), OP("gds", MES_GDS, IF_REAL,"Drain-Source conductance"), OP("ggs", MES_GGS, IF_REAL,"Gate-Source conductance"), OP("ggd", MES_GGD, IF_REAL,"Gate-Drain conductance"), OP("cqgs", MES_CQGS, IF_REAL,"Capacitance due to gate-source charge storage"), OP("cqgd", MES_CQGD, IF_REAL,"Capacitance due to gate-drain charge storage"), OPU("qgs", MES_QGS, IF_REAL,"Gate-Source charge storage"), OPU("qgd", MES_QGD, IF_REAL,"Gate-Drain charge storage"), OP("is", MES_CS, IF_REAL ,"Source current"), OP("p", MES_POWER, IF_REAL ,"Power dissipated by the mesfet") }; IFparm MESmPTable[] = { /* model parameters */ OP( "type", MES_MOD_TYPE, IF_FLAG,"N-type or P-type MESfet model"), IP( "nmf", MES_MOD_NMF, IF_FLAG,"N type MESfet model"), IP( "pmf", MES_MOD_PMF, IF_FLAG,"P type MESfet model"), IOP( "vt0", MES_MOD_VTO, IF_REAL,"Pinch-off voltage"), IOPR( "vto", MES_MOD_VTO, IF_REAL,"Pinch-off voltage"), IOP( "alpha", MES_MOD_ALPHA, IF_REAL,"Saturation voltage parameter"), IOP( "beta", MES_MOD_BETA, IF_REAL,"Transconductance parameter"), IOP( "lambda", MES_MOD_LAMBDA, IF_REAL,"Channel length modulation parm."), IOP( "b", MES_MOD_B, IF_REAL,"Doping tail extending parameter"), IOP( "rd", MES_MOD_RD, IF_REAL,"Drain ohmic resistance"), OPU( "gd", MES_MOD_DRAINCONDUCT, IF_REAL,"Drain conductance"), IOP( "rs", MES_MOD_RS, IF_REAL,"Source ohmic resistance"), OPU( "gs", MES_MOD_SOURCECONDUCT, IF_REAL,"Source conductance"), IOPA( "cgs", MES_MOD_CGS, IF_REAL,"G-S junction capacitance"), IOPA( "cgd", MES_MOD_CGD, IF_REAL,"G-D junction capacitance"), IOP( "pb", MES_MOD_PB, IF_REAL,"Gate junction potential"), IOP( "is", MES_MOD_IS, IF_REAL,"Junction saturation current"), IOP( "fc", MES_MOD_FC, IF_REAL,"Forward bias junction fit parm."), OP( "depl_cap", MES_MOD_DEPLETIONCAP, IF_REAL,"Depletion capacitance"), OP( "vcrit", MES_MOD_VCRIT, IF_REAL,"Critical voltage"), IOP("kf", MES_MOD_KF, IF_REAL,"Flicker noise coefficient"), IOP("af", MES_MOD_AF, IF_REAL,"Flicker noise exponent") }; char *MESnames[] = { "Drain", "Gate", "Source" }; int MESnSize = NUMELEMS(MESnames); int MESpTSize = NUMELEMS(MESpTable); int MESmPTSize = NUMELEMS(MESmPTable); int MESiSize = sizeof(MESinstance); int MESmSize = sizeof(MESmodel); tmpk8ny_4pz/src/spicelib/devices/mes/mesmpar.c0000644000175000017500000000504113546075722021557 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 S. Hwang **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "mesdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MESmParam(int param, IFvalue *value, GENmodel *inModel) { MESmodel *model = (MESmodel*)inModel; switch(param) { case MES_MOD_VTO: model->MESthresholdGiven = TRUE; model->MESthreshold = value->rValue; break; case MES_MOD_ALPHA: model->MESalphaGiven = TRUE; model->MESalpha = value->rValue; break; case MES_MOD_BETA: model->MESbetaGiven = TRUE; model->MESbeta = value->rValue; break; case MES_MOD_LAMBDA: model->MESlModulationGiven = TRUE; model->MESlModulation = value->rValue; break; case MES_MOD_B: model->MESbGiven = TRUE; model->MESb = value->rValue; break; case MES_MOD_RD: model->MESdrainResistGiven = TRUE; model->MESdrainResist = value->rValue; break; case MES_MOD_RS: model->MESsourceResistGiven = TRUE; model->MESsourceResist = value->rValue; break; case MES_MOD_CGS: model->MEScapGSGiven = TRUE; model->MEScapGS = value->rValue; break; case MES_MOD_CGD: model->MEScapGDGiven = TRUE; model->MEScapGD = value->rValue; break; case MES_MOD_PB: model->MESgatePotentialGiven = TRUE; model->MESgatePotential = value->rValue; break; case MES_MOD_IS: model->MESgateSatCurrentGiven = TRUE; model->MESgateSatCurrent = value->rValue; break; case MES_MOD_FC: model->MESdepletionCapCoeffGiven = TRUE; model->MESdepletionCapCoeff = value->rValue; break; case MES_MOD_NMF: if(value->iValue) { model->MEStype = NMF; } break; case MES_MOD_PMF: if(value->iValue) { model->MEStype = PMF; } break; case MES_MOD_KF: model->MESfNcoefGiven = TRUE; model->MESfNcoef = value->rValue; break; case MES_MOD_AF: model->MESfNexpGiven = TRUE; model->MESfNexp = value->rValue; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mes/mestrunc.c0000644000175000017500000000124013546075722021750 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 S. Hwang **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mesdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MEStrunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { MESmodel *model = (MESmodel*)inModel; MESinstance *here; for( ; model != NULL; model = MESnextModel(model)) { for(here=MESinstances(model);here!=NULL;here = MESnextInstance(here)){ CKTterr(here->MESqgs,ckt,timeStep); CKTterr(here->MESqgd,ckt,timeStep); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mes/mesgetic.c0000644000175000017500000000211313546075722021710 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 S. Hwang **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mesdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MESgetic(GENmodel *inModel, CKTcircuit *ckt) { MESmodel *model = (MESmodel*)inModel; MESinstance *here; /* * grab initial conditions out of rhs array. User specified, so use * external nodes to get values */ for( ; model ; model = MESnextModel(model)) { for(here = MESinstances(model); here ; here = MESnextInstance(here)) { if(!here->MESicVDSGiven) { here->MESicVDS = *(ckt->CKTrhs + here->MESdrainNode) - *(ckt->CKTrhs + here->MESsourceNode); } if(!here->MESicVGSGiven) { here->MESicVGS = *(ckt->CKTrhs + here->MESgateNode) - *(ckt->CKTrhs + here->MESsourceNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mes/mesacl.c0000644000175000017500000000527113546075722021364 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 S. Hwang **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mesdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MESacLoad(GENmodel *inModel, CKTcircuit *ckt) { MESmodel *model = (MESmodel*)inModel; MESinstance *here; double gdpr; double gspr; double gm; double gds; double ggs; double xgs; double ggd; double xgd; double m; for( ; model != NULL; model = MESnextModel(model)) { for( here = MESinstances(model); here != NULL; here = MESnextInstance(here)) { m = here->MESm; gdpr=model->MESdrainConduct * here->MESarea; gspr=model->MESsourceConduct * here->MESarea; gm= *(ckt->CKTstate0 + here->MESgm) ; gds= *(ckt->CKTstate0 + here->MESgds) ; ggs= *(ckt->CKTstate0 + here->MESggs) ; xgs= *(ckt->CKTstate0 + here->MESqgs) * ckt->CKTomega ; ggd= *(ckt->CKTstate0 + here->MESggd) ; xgd= *(ckt->CKTstate0 + here->MESqgd) * ckt->CKTomega ; *(here->MESdrainDrainPtr ) += m * (gdpr); *(here->MESgateGatePtr ) += m * (ggd+ggs); *(here->MESgateGatePtr +1) += m * (xgd+xgs); *(here->MESsourceSourcePtr ) += m * (gspr); *(here->MESdrainPrimeDrainPrimePtr ) += m * (gdpr+gds+ggd); *(here->MESdrainPrimeDrainPrimePtr +1) += m * (xgd); *(here->MESsourcePrimeSourcePrimePtr ) += m * (gspr+gds+gm+ggs); *(here->MESsourcePrimeSourcePrimePtr +1) += m * (xgs); *(here->MESdrainDrainPrimePtr ) -= m * (gdpr); *(here->MESgateDrainPrimePtr ) -= m * (ggd); *(here->MESgateDrainPrimePtr +1) -= m * (xgd); *(here->MESgateSourcePrimePtr ) -= m * (ggs); *(here->MESgateSourcePrimePtr +1) -= m * (xgs); *(here->MESsourceSourcePrimePtr ) -= m * (gspr); *(here->MESdrainPrimeDrainPtr ) -= m * (gdpr); *(here->MESdrainPrimeGatePtr ) += m * (-ggd+gm); *(here->MESdrainPrimeGatePtr +1) -= m * (xgd); *(here->MESdrainPrimeSourcePrimePtr ) += m * (-gds-gm); *(here->MESsourcePrimeGatePtr ) += m * (-ggs-gm); *(here->MESsourcePrimeGatePtr +1) -= m * (xgs); *(here->MESsourcePrimeSourcePtr ) -= m * (gspr); *(here->MESsourcePrimeDrainPrimePtr ) -= m * (gds); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mes/messetup.c0000644000175000017500000001376013546075722021767 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 S. Hwang Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mesdefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MESsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* load the diode structure with those pointers needed later * for fast matrix loading */ { MESmodel *model = (MESmodel*)inModel; MESinstance *here; int error; CKTnode *tmp; /* loop through all the diode models */ for( ; model != NULL; model = MESnextModel(model)) { if( (model->MEStype != NMF) && (model->MEStype != PMF) ) { model->MEStype = NMF; } if(!model->MESthresholdGiven) { model->MESthreshold = -2; } if(!model->MESbetaGiven) { model->MESbeta = 2.5e-3; } if(!model->MESbGiven) { model->MESb = 0.3; } if(!model->MESalphaGiven) { model->MESalpha = 2; } if(!model->MESlModulationGiven) { model->MESlModulation = 0; } if(!model->MESdrainResistGiven) { model->MESdrainResist = 0; } if(!model->MESsourceResistGiven) { model->MESsourceResist = 0; } if(!model->MEScapGSGiven) { model->MEScapGS = 0; } if(!model->MEScapGDGiven) { model->MEScapGD = 0; } if(!model->MESgatePotentialGiven) { model->MESgatePotential = 1; } if(!model->MESgateSatCurrentGiven) { model->MESgateSatCurrent = 1e-14; } if(!model->MESdepletionCapCoeffGiven) { model->MESdepletionCapCoeff = .5; } if(!model->MESfNcoefGiven) { model->MESfNcoef = 0; } if(!model->MESfNexpGiven) { model->MESfNexp = 1; } /* loop through all the instances of the model */ for (here = MESinstances(model); here != NULL ; here=MESnextInstance(here)) { if(!here->MESareaGiven) { here->MESarea = 1.0; } if(!here->MESmGiven) { here->MESm = 1.0; } here->MESstate = *states; *states += MESnumStates; if(model->MESsourceResist != 0) { if(here->MESsourcePrimeNode == 0) { error = CKTmkVolt(ckt,&tmp,here->MESname,"source"); if(error) return(error); here->MESsourcePrimeNode = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->MESsourcePrimeNode = here->MESsourceNode; } if(model->MESdrainResist != 0) { if(here->MESdrainPrimeNode == 0) { error = CKTmkVolt(ckt,&tmp,here->MESname,"drain"); if(error) return(error); here->MESdrainPrimeNode = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->MESdrainPrimeNode = here->MESdrainNode; } /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(MESdrainDrainPrimePtr,MESdrainNode,MESdrainPrimeNode); TSTALLOC(MESgateDrainPrimePtr,MESgateNode,MESdrainPrimeNode); TSTALLOC(MESgateSourcePrimePtr,MESgateNode,MESsourcePrimeNode); TSTALLOC(MESsourceSourcePrimePtr,MESsourceNode,MESsourcePrimeNode); TSTALLOC(MESdrainPrimeDrainPtr,MESdrainPrimeNode,MESdrainNode); TSTALLOC(MESdrainPrimeGatePtr,MESdrainPrimeNode,MESgateNode); TSTALLOC(MESdrainPrimeSourcePrimePtr,MESdrainPrimeNode,MESsourcePrimeNode); TSTALLOC(MESsourcePrimeGatePtr,MESsourcePrimeNode,MESgateNode); TSTALLOC(MESsourcePrimeSourcePtr,MESsourcePrimeNode,MESsourceNode); TSTALLOC(MESsourcePrimeDrainPrimePtr,MESsourcePrimeNode,MESdrainPrimeNode); TSTALLOC(MESdrainDrainPtr,MESdrainNode,MESdrainNode); TSTALLOC(MESgateGatePtr,MESgateNode,MESgateNode); TSTALLOC(MESsourceSourcePtr,MESsourceNode,MESsourceNode); TSTALLOC(MESdrainPrimeDrainPrimePtr,MESdrainPrimeNode,MESdrainPrimeNode); TSTALLOC(MESsourcePrimeSourcePrimePtr,MESsourcePrimeNode,MESsourcePrimeNode); } } return(OK); } int MESunsetup(GENmodel *inModel, CKTcircuit *ckt) { MESmodel *model; MESinstance *here; for (model = (MESmodel *)inModel; model != NULL; model = MESnextModel(model)) { for (here = MESinstances(model); here != NULL; here=MESnextInstance(here)) { if (here->MESdrainPrimeNode > 0 && here->MESdrainPrimeNode != here->MESdrainNode) CKTdltNNum(ckt, here->MESdrainPrimeNode); here->MESdrainPrimeNode = 0; if (here->MESsourcePrimeNode > 0 && here->MESsourcePrimeNode != here->MESsourceNode) CKTdltNNum(ckt, here->MESsourcePrimeNode); here->MESsourcePrimeNode = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/mes/mesext.h0000644000175000017500000000163713546075722021434 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 S. Hwang Modified: 2000 AlansFixes **********/ extern int MESacLoad(GENmodel*,CKTcircuit*); extern int MESask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int MESgetic(GENmodel*,CKTcircuit*); extern int MESload(GENmodel*,CKTcircuit*); extern int MESmAsk(CKTcircuit*,GENmodel*,int,IFvalue*); extern int MESmParam(int,IFvalue*,GENmodel*); extern int MESparam(int,IFvalue*,GENinstance*,IFvalue*); extern int MESpzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int MESsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int MESunsetup(GENmodel*,CKTcircuit*); extern int MEStemp(GENmodel*,CKTcircuit*); extern int MEStrunc(GENmodel*,CKTcircuit*,double*); extern int MESdisto(int,GENmodel*,CKTcircuit*); extern int MESnoise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int MESdSetup(GENmodel*,CKTcircuit*); tmpk8ny_4pz/src/spicelib/devices/mes/mesmask.c0000644000175000017500000000446513546075722021564 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "mesdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int MESmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { MESmodel *here = (MESmodel*)inst; NG_IGNORE(ckt); switch(which) { case MES_MOD_VTO: value->rValue = here->MESthreshold; return (OK); case MES_MOD_ALPHA: value->rValue = here->MESalpha; return (OK); case MES_MOD_BETA: value->rValue = here->MESbeta; return (OK); case MES_MOD_LAMBDA: value->rValue = here->MESlModulation; return (OK); case MES_MOD_B: value->rValue = here->MESb; return (OK); case MES_MOD_RD: value->rValue = here->MESdrainResist; return (OK); case MES_MOD_RS: value->rValue = here->MESsourceResist; return (OK); case MES_MOD_CGS: value->rValue = here->MEScapGS; return (OK); case MES_MOD_CGD: value->rValue = here->MEScapGD; return (OK); case MES_MOD_PB: value->rValue = here->MESgatePotential; return (OK); case MES_MOD_IS: value->rValue = here->MESgateSatCurrent; return (OK); case MES_MOD_FC: value->rValue = here->MESdepletionCapCoeff; return (OK); case MES_MOD_DRAINCONDUCT: value->rValue = here->MESdrainConduct; return (OK); case MES_MOD_SOURCECONDUCT: value->rValue = here->MESsourceConduct; return (OK); case MES_MOD_DEPLETIONCAP: value->rValue = here->MESdepletionCap; return (OK); case MES_MOD_VCRIT: value->rValue = here->MESvcrit; return (OK); case MES_MOD_TYPE: if (here->MEStype == NMF) value->sValue = "nmf"; else value->sValue = "pmf"; return (OK); default: return (E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/mes/mesparam.c0000644000175000017500000000301513546075722021717 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 S. Hwang **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "mesdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int MESparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { MESinstance *here = (MESinstance*)inst; NG_IGNORE(select); switch(param) { case MES_AREA: here->MESarea = value->rValue; here->MESareaGiven = TRUE; break; case MES_M: here->MESm = value->rValue; here->MESmGiven = TRUE; break; case MES_IC_VDS: here->MESicVDS = value->rValue; here->MESicVDSGiven = TRUE; break; case MES_IC_VGS: here->MESicVGS = value->rValue; here->MESicVGSGiven = TRUE; break; case MES_OFF: here->MESoff = value->iValue; break; case MES_IC: switch(value->v.numValue) { case 2: here->MESicVGS = *(value->v.vec.rVec+1); here->MESicVGSGiven = TRUE; case 1: here->MESicVDS = *(value->v.vec.rVec); here->MESicVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mes/mesinit.c0000644000175000017500000000310613546075722021563 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "mesitf.h" #include "mesext.h" #include "mesinit.h" SPICEdev MESinfo = { .DEVpublic = { .name = "MES", .description = "GaAs MESFET model", .terms = &MESnSize, .numNames = &MESnSize, .termNames = MESnames, .numInstanceParms = &MESpTSize, .instanceParms = MESpTable, .numModelParms = &MESmPTSize, .modelParms = MESmPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = MESparam, .DEVmodParam = MESmParam, .DEVload = MESload, .DEVsetup = MESsetup, .DEVunsetup = MESunsetup, .DEVpzSetup = MESsetup, .DEVtemperature = MEStemp, .DEVtrunc = MEStrunc, .DEVfindBranch = NULL, .DEVacLoad = MESacLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = MESgetic, .DEVask = MESask, .DEVmodAsk = MESmAsk, .DEVpzLoad = MESpzLoad, .DEVconvTest = NULL, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = MESdisto, .DEVnoise = MESnoise, .DEVsoaCheck = NULL, .DEVinstSize = &MESiSize, .DEVmodSize = &MESmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_mes_info(void) { return &MESinfo; } tmpk8ny_4pz/src/spicelib/devices/mes/mesdisto.c0000644000175000017500000006652613546075722021761 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mesdefs.h" #include "ngspice/sperror.h" #include "ngspice/distodef.h" #include "ngspice/suffix.h" int MESdisto(int mode,GENmodel *genmodel, CKTcircuit *ckt) /* assuming here that ckt->CKTomega has been initialised to * the correct value */ { MESmodel *model = (MESmodel *) genmodel; DISTOAN* job = (DISTOAN*) ckt->CKTcurJob; DpassStr pass; double r1h1x,i1h1x; double r1h1y,i1h1y; double r1h2x, i1h2x; double r1h2y, i1h2y; double r1hm2x,i1hm2x; double r1hm2y,i1hm2y; double r2h11x,i2h11x; double r2h11y,i2h11y; double r2h1m2x,i2h1m2x; double r2h1m2y,i2h1m2y; double temp, itemp; MESinstance *here; if (mode == D_SETUP) return(MESdSetup(genmodel,ckt)); /* AFN: Oh what a wonderful thing!!! */ if ((mode == D_TWOF1) || (mode == D_THRF1) || (mode == D_F1PF2) || (mode == D_F1MF2) || (mode == D_2F1MF2)) { /* loop through all the MES models */ for( ; model != NULL; model = MESnextModel(model)) { /* loop through all the instances of the model */ for (here = MESinstances(model); here != NULL ; here=MESnextInstance(here)) { /* loading starts here */ switch (mode) { case D_TWOF1: /* x = vgs, y = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MESgateNode)) - *(job->r1H1ptr + (here->MESsourcePrimeNode)); i1h1x = *(job->i1H1ptr + (here->MESgateNode)) - *(job->i1H1ptr + (here->MESsourcePrimeNode)); r1h1y = *(job->r1H1ptr + (here->MESdrainPrimeNode)) - *(job->r1H1ptr + (here->MESsourcePrimeNode)); i1h1y = *(job->i1H1ptr + (here->MESdrainPrimeNode)) - *(job->i1H1ptr + (here->MESsourcePrimeNode)); /* loading starts here */ /* loading cdrain term */ temp = DFn2F1(here->cdr_x2, here->cdr_z2, 0.0, here->cdr_xz, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0); itemp = DFi2F1(here->cdr_x2, here->cdr_z2, 0.0, here->cdr_xz, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0); *(ckt->CKTrhs + (here->MESdrainPrimeNode)) -= temp; *(ckt->CKTirhs + (here->MESdrainPrimeNode)) -= itemp; *(ckt->CKTrhs + (here->MESsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->MESsourcePrimeNode)) += itemp; /* cdrain term over */ /* loading ggs term */ temp = D1n2F1(here->ggs2, r1h1x, i1h1x); itemp = D1i2F1(here->ggs2, r1h1x, i1h1x); *(ckt->CKTrhs + (here->MESgateNode)) -= temp; *(ckt->CKTirhs + (here->MESgateNode)) -= itemp; *(ckt->CKTrhs + (here->MESsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->MESsourcePrimeNode)) += itemp; /* ggs over */ /* loading ggd term */ temp = D1n2F1(here->ggd2, r1h1x - r1h1y, i1h1x - i1h1y); itemp = D1i2F1(here->ggd2, r1h1x - r1h1y, i1h1x - i1h1y); *(ckt->CKTrhs + (here->MESgateNode)) -= temp; *(ckt->CKTirhs + (here->MESgateNode)) -= itemp; *(ckt->CKTrhs + (here->MESdrainPrimeNode)) += temp; *(ckt->CKTirhs + (here->MESdrainPrimeNode)) += itemp; /* ggd over */ /* loading qgs term */ temp = -ckt->CKTomega * DFi2F1(here->qgs_x2, here->qgs_y2, 0.0, here->qgs_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1x - r1h1y, i1h1x - i1h1y, 0.0, 0.0); itemp = ckt->CKTomega* DFn2F1(here->qgs_x2, here->qgs_y2, 0.0, here->qgs_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1x - r1h1y, i1h1x - i1h1y, 0.0, 0.0); *(ckt->CKTrhs + (here->MESgateNode)) -= temp; *(ckt->CKTirhs + (here->MESgateNode)) -= itemp; *(ckt->CKTrhs + (here->MESsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->MESsourcePrimeNode)) += itemp; /* qgs term over */ /* loading qgd term */ temp = -ckt->CKTomega * DFi2F1(here->qgd_x2, here->qgd_y2, 0.0, here->qgd_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1x - r1h1y, i1h1x - i1h1y, 0.0, 0.0); itemp = ckt->CKTomega* DFn2F1(here->qgd_x2, here->qgd_y2, 0.0, here->qgd_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1x - r1h1y, i1h1x - i1h1y, 0.0, 0.0); *(ckt->CKTrhs + (here->MESgateNode)) -= temp; *(ckt->CKTirhs + (here->MESgateNode)) -= itemp; *(ckt->CKTrhs + (here->MESdrainPrimeNode)) += temp; *(ckt->CKTirhs + (here->MESdrainPrimeNode)) += itemp; /* qgd term over */ /* all done */ break; case D_THRF1: /* x = vgs, y = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MESgateNode)) - *(job->r1H1ptr + (here->MESsourcePrimeNode)); i1h1x = *(job->i1H1ptr + (here->MESgateNode)) - *(job->i1H1ptr + (here->MESsourcePrimeNode)); r1h1y = *(job->r1H1ptr + (here->MESdrainPrimeNode)) - *(job->r1H1ptr + (here->MESsourcePrimeNode)); i1h1y = *(job->i1H1ptr + (here->MESdrainPrimeNode)) - *(job->i1H1ptr + (here->MESsourcePrimeNode)); r2h11x = *(job->r2H11ptr + (here->MESgateNode)) - *(job->r2H11ptr + (here->MESsourcePrimeNode)); i2h11x = *(job->i2H11ptr + (here->MESgateNode)) - *(job->i2H11ptr + (here->MESsourcePrimeNode)); r2h11y = *(job->r2H11ptr + (here->MESdrainPrimeNode)) - *(job->r2H11ptr + (here->MESsourcePrimeNode)); i2h11y = *(job->i2H11ptr + (here->MESdrainPrimeNode)) - *(job->i2H11ptr + (here->MESsourcePrimeNode)); /* loading starts here */ /* loading cdrain term */ temp = DFn3F1(here->cdr_x2, here->cdr_z2, 0.0, here->cdr_xz, 0.0, 0.0, here->cdr_x3, here->cdr_z3, 0.0, here->cdr_x2z, 0.0, here->cdr_xz2, 0.0, 0.0, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r2h11x, i2h11x, r2h11y, i2h11y, 0.0, 0.0); itemp = DFi3F1(here->cdr_x2, here->cdr_z2, 0.0, here->cdr_xz, 0.0, 0.0, here->cdr_x3, here->cdr_z3, 0.0, here->cdr_x2z, 0.0, here->cdr_xz2, 0.0, 0.0, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r2h11x, i2h11x, r2h11y, i2h11y, 0.0, 0.0); *(ckt->CKTrhs + (here->MESdrainPrimeNode)) -= temp; *(ckt->CKTirhs + (here->MESdrainPrimeNode)) -= itemp; *(ckt->CKTrhs + (here->MESsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->MESsourcePrimeNode)) += itemp; /* cdrain term over */ /* loading ggs term */ temp = D1n3F1(here->ggs2, here->ggs3, r1h1x, i1h1x, r2h11x, i2h11x); itemp = D1i3F1(here->ggs2, here->ggs3, r1h1x, i1h1x, r2h11x, i2h11x); *(ckt->CKTrhs + (here->MESgateNode)) -= temp; *(ckt->CKTirhs + (here->MESgateNode)) -= itemp; *(ckt->CKTrhs + (here->MESsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->MESsourcePrimeNode)) += itemp; /* ggs over */ /* loading ggd term */ temp = D1n3F1(here->ggd2, here->ggd3, r1h1x - r1h1y, i1h1x - i1h1y, r2h11x - r2h11y, i2h11x - i2h11y); itemp = D1i3F1(here->ggd2, here->ggd3, r1h1x - r1h1y, i1h1x - i1h1y, r2h11x - r2h11y, i2h11x - i2h11y); *(ckt->CKTrhs + (here->MESgateNode)) -= temp; *(ckt->CKTirhs + (here->MESgateNode)) -= itemp; *(ckt->CKTrhs + (here->MESdrainPrimeNode)) += temp; *(ckt->CKTirhs + (here->MESdrainPrimeNode)) += itemp; /* ggd over */ /* loading qgs term */ temp = -ckt->CKTomega* DFi3F1(here->qgs_x2, here->qgs_y2, 0.0, here->qgs_xy, 0.0, 0.0, here->qgs_x3, here->qgs_y3, 0.0, here->qgs_x2y, 0.0, here->qgs_xy2, 0.0, 0.0, 0.0, 0.0, r1h1x, i1h1x, r1h1x - r1h1y, i1h1x - i1h1y, 0.0, 0.0, r2h11x, i2h11x, r2h11x - r2h11y, i2h11x - i2h11y, 0.0, 0.0); itemp =ckt->CKTomega* DFn3F1(here->qgs_x2, here->qgs_y2, 0.0, here->qgs_xy, 0.0, 0.0, here->qgs_x3, here->qgs_y3, 0.0, here->qgs_x2y, 0.0, here->qgs_xy2, 0.0, 0.0, 0.0, 0.0, r1h1x, i1h1x, r1h1x - r1h1y, i1h1x - i1h1y, 0.0, 0.0, r2h11x, i2h11x, r2h11x - r2h11y, i2h11x - i2h11y, 0.0, 0.0); *(ckt->CKTrhs + (here->MESgateNode)) -= temp; *(ckt->CKTirhs + (here->MESgateNode)) -= itemp; *(ckt->CKTrhs + (here->MESsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->MESsourcePrimeNode)) += itemp; /* qgs term over */ /* loading qgd term */ temp = -ckt->CKTomega* DFi3F1(here->qgd_x2, here->qgd_y2, 0.0, here->qgd_xy, 0.0, 0.0, here->qgd_x3, here->qgd_y3, 0.0, here->qgd_x2y, 0.0, here->qgd_xy2, 0.0, 0.0, 0.0, 0.0, r1h1x, i1h1x, r1h1x - r1h1y, i1h1x - i1h1y, 0.0, 0.0, r2h11x, i2h11x, r2h11x - r2h11y, i2h11x - i2h11y, 0.0, 0.0); itemp =ckt->CKTomega* DFn3F1(here->qgd_x2, here->qgd_y2, 0.0, here->qgd_xy, 0.0, 0.0, here->qgd_x3, here->qgd_y3, 0.0, here->qgd_x2y, 0.0, here->qgd_xy2, 0.0, 0.0, 0.0, 0.0, r1h1x, i1h1x, r1h1x - r1h1y, i1h1x - i1h1y, 0.0, 0.0, r2h11x, i2h11x, r2h11x - r2h11y, i2h11x - i2h11y, 0.0, 0.0); *(ckt->CKTrhs + (here->MESgateNode)) -= temp; *(ckt->CKTirhs + (here->MESgateNode)) -= itemp; *(ckt->CKTrhs + (here->MESdrainPrimeNode)) += temp; *(ckt->CKTirhs + (here->MESdrainPrimeNode)) += itemp; /* qgd term over */ /* all done */ break; case D_F1PF2: /* x = vgs, y = vds */ /* getting first order (linear) Volterra transform */ r1h1x = *(job->r1H1ptr + (here->MESgateNode)) - *(job->r1H1ptr + (here->MESsourcePrimeNode)); i1h1x = *(job->i1H1ptr + (here->MESgateNode)) - *(job->i1H1ptr + (here->MESsourcePrimeNode)); r1h1y = *(job->r1H1ptr + (here->MESdrainPrimeNode)) - *(job->r1H1ptr + (here->MESsourcePrimeNode)); i1h1y = *(job->i1H1ptr + (here->MESdrainPrimeNode)) - *(job->i1H1ptr + (here->MESsourcePrimeNode)); r1h2x = *(job->r1H2ptr + (here->MESgateNode)) - *(job->r1H2ptr + (here->MESsourcePrimeNode)); i1h2x = *(job->i1H2ptr + (here->MESgateNode)) - *(job->i1H2ptr + (here->MESsourcePrimeNode)); r1h2y = *(job->r1H2ptr + (here->MESdrainPrimeNode)) - *(job->r1H2ptr + (here->MESsourcePrimeNode)); i1h2y = *(job->i1H2ptr + (here->MESdrainPrimeNode)) - *(job->i1H2ptr + (here->MESsourcePrimeNode)); /* loading starts here */ /* loading cdrain term */ temp = DFnF12(here->cdr_x2, here->cdr_z2, 0.0, here->cdr_xz, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r1h2x, i1h2x, r1h2y, i1h2y, 0.0, 0.0); itemp = DFiF12(here->cdr_x2, here->cdr_z2, 0.0, here->cdr_xz, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r1h2x, i1h2x, r1h2y, i1h2y, 0.0, 0.0); *(ckt->CKTrhs + (here->MESdrainPrimeNode)) -= temp; *(ckt->CKTirhs + (here->MESdrainPrimeNode)) -= itemp; *(ckt->CKTrhs + (here->MESsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->MESsourcePrimeNode)) += itemp; /* cdrain term over */ /* loading ggs term */ temp = D1nF12(here->ggs2, r1h1x, i1h1x, r1h2x, i1h2x); itemp = D1iF12(here->ggs2, r1h1x, i1h1x, r1h2x, i1h2x); *(ckt->CKTrhs + (here->MESgateNode)) -= temp; *(ckt->CKTirhs + (here->MESgateNode)) -= itemp; *(ckt->CKTrhs + (here->MESsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->MESsourcePrimeNode)) += itemp; /* ggs over */ /* loading ggd term */ temp = D1nF12(here->ggd2, r1h1x - r1h1y, i1h1x - i1h1y, r1h2x - r1h2y, i1h2x - i1h2y); itemp = D1iF12(here->ggd2, r1h1x - r1h1y, i1h1x - i1h1y, r1h2x - r1h2y, i1h2x - i1h2y); *(ckt->CKTrhs + (here->MESgateNode)) -= temp; *(ckt->CKTirhs + (here->MESgateNode)) -= itemp; *(ckt->CKTrhs + (here->MESdrainPrimeNode)) += temp; *(ckt->CKTirhs + (here->MESdrainPrimeNode)) += itemp; /* ggd over */ /* loading qgs term */ temp = -ckt->CKTomega* DFiF12(here->qgs_x2, here->qgs_y2, 0.0, here->qgs_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1x - r1h1y, i1h1x - i1h1y, 0.0, 0.0, r1h2x, i1h2x, r1h2x - r1h2y, i1h2x - i1h2y, 0.0, 0.0); itemp =ckt->CKTomega* DFnF12(here->qgs_x2, here->qgs_y2, 0.0, here->qgs_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1x - r1h1y, i1h1x - i1h1y, 0.0, 0.0, r1h2x, i1h2x, r1h2x - r1h2y, i1h2x - i1h2y, 0.0, 0.0); *(ckt->CKTrhs + (here->MESgateNode)) -= temp; *(ckt->CKTirhs + (here->MESgateNode)) -= itemp; *(ckt->CKTrhs + (here->MESsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->MESsourcePrimeNode)) += itemp; /* qgs term over */ /* loading qgd term */ temp = -ckt->CKTomega* DFiF12(here->qgd_x2, here->qgd_y2, 0.0, here->qgd_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1x - r1h1y, i1h1x - i1h1y, 0.0, 0.0, r1h2x, i1h2x, r1h2x - r1h2y, i1h2x - i1h2y, 0.0, 0.0); itemp =ckt->CKTomega* DFnF12(here->qgd_x2, here->qgd_y2, 0.0, here->qgd_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1x - r1h1y, i1h1x - i1h1y, 0.0, 0.0, r1h2x, i1h2x, r1h2x - r1h2y, i1h2x - i1h2y, 0.0, 0.0); *(ckt->CKTrhs + (here->MESgateNode)) -= temp; *(ckt->CKTirhs + (here->MESgateNode)) -= itemp; *(ckt->CKTrhs + (here->MESdrainPrimeNode)) += temp; *(ckt->CKTirhs + (here->MESdrainPrimeNode)) += itemp; /* qgd term over */ /* all done */ break; case D_F1MF2: /* x = vgs, y = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MESgateNode)) - *(job->r1H1ptr + (here->MESsourcePrimeNode)); i1h1x = *(job->i1H1ptr + (here->MESgateNode)) - *(job->i1H1ptr + (here->MESsourcePrimeNode)); r1h1y = *(job->r1H1ptr + (here->MESdrainPrimeNode)) - *(job->r1H1ptr + (here->MESsourcePrimeNode)); i1h1y = *(job->i1H1ptr + (here->MESdrainPrimeNode)) - *(job->i1H1ptr + (here->MESsourcePrimeNode)); r1hm2x = *(job->r1H2ptr + (here->MESgateNode)) - *(job->r1H2ptr + (here->MESsourcePrimeNode)); i1hm2x = -(*(job->i1H2ptr + (here->MESgateNode)) - *(job->i1H2ptr + (here->MESsourcePrimeNode))); r1hm2y = *(job->r1H2ptr + (here->MESdrainPrimeNode)) - *(job->r1H2ptr + (here->MESsourcePrimeNode)); i1hm2y = -(*(job->i1H2ptr + (here->MESdrainPrimeNode)) - *(job->i1H2ptr + (here->MESsourcePrimeNode))); /* loading starts here */ /* loading cdrain term */ temp = DFnF12(here->cdr_x2, here->cdr_z2, 0.0, here->cdr_xz, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r1hm2x, i1hm2x, r1hm2y, i1hm2y, 0.0, 0.0); itemp = DFiF12(here->cdr_x2, here->cdr_z2, 0.0, here->cdr_xz, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r1hm2x, i1hm2x, r1hm2y, i1hm2y, 0.0, 0.0); *(ckt->CKTrhs + (here->MESdrainPrimeNode)) -= temp; *(ckt->CKTirhs + (here->MESdrainPrimeNode)) -= itemp; *(ckt->CKTrhs + (here->MESsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->MESsourcePrimeNode)) += itemp; /* cdrain term over */ /* loading ggs term */ temp = D1nF12(here->ggs2, r1h1x, i1h1x, r1hm2x, i1hm2x); itemp = D1iF12(here->ggs2, r1h1x, i1h1x, r1hm2x, i1hm2x); *(ckt->CKTrhs + (here->MESgateNode)) -= temp; *(ckt->CKTirhs + (here->MESgateNode)) -= itemp; *(ckt->CKTrhs + (here->MESsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->MESsourcePrimeNode)) += itemp; /* ggs over */ /* loading ggd term */ temp = D1nF12(here->ggd2, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y); itemp = D1iF12(here->ggd2, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y); *(ckt->CKTrhs + (here->MESgateNode)) -= temp; *(ckt->CKTirhs + (here->MESgateNode)) -= itemp; *(ckt->CKTrhs + (here->MESdrainPrimeNode)) += temp; *(ckt->CKTirhs + (here->MESdrainPrimeNode)) += itemp; /* ggd over */ /* loading qgs term */ temp = -ckt->CKTomega* DFiF12(here->qgs_x2, here->qgs_y2, 0.0, here->qgs_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1x - r1h1y, i1h1x - i1h1y, 0.0, 0.0, r1hm2x, i1hm2x, r1hm2x - r1hm2y, i1hm2x - i1hm2y, 0.0, 0.0); itemp = ckt->CKTomega* DFnF12(here->qgs_x2, here->qgs_y2, 0.0, here->qgs_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1x - r1h1y, i1h1x - i1h1y, 0.0, 0.0, r1hm2x, i1hm2x, r1hm2x - r1hm2y, i1hm2x - i1hm2y, 0.0, 0.0); *(ckt->CKTrhs + (here->MESgateNode)) -= temp; *(ckt->CKTirhs + (here->MESgateNode)) -= itemp; *(ckt->CKTrhs + (here->MESsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->MESsourcePrimeNode)) += itemp; /* qgs term over */ /* loading qgd term */ temp = -ckt->CKTomega* DFiF12(here->qgd_x2, here->qgd_y2, 0.0, here->qgd_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1x - r1h1y, i1h1x - i1h1y, 0.0, 0.0, r1hm2x, i1hm2x, r1hm2x - r1hm2y, i1hm2x - i1hm2y, 0.0, 0.0); itemp = ckt->CKTomega* DFnF12(here->qgd_x2, here->qgd_y2, 0.0, here->qgd_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1x - r1h1y, i1h1x - i1h1y, 0.0, 0.0, r1hm2x, i1hm2x, r1hm2x - r1hm2y, i1hm2x - i1hm2y, 0.0, 0.0); *(ckt->CKTrhs + (here->MESgateNode)) -= temp; *(ckt->CKTirhs + (here->MESgateNode)) -= itemp; *(ckt->CKTrhs + (here->MESdrainPrimeNode)) += temp; *(ckt->CKTirhs + (here->MESdrainPrimeNode)) += itemp; /* qgd term over */ /* all done */ break; case D_2F1MF2: /* x = vgs, y = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MESgateNode)) - *(job->r1H1ptr + (here->MESsourcePrimeNode)); i1h1x = *(job->i1H1ptr + (here->MESgateNode)) - *(job->i1H1ptr + (here->MESsourcePrimeNode)); r1h1y = *(job->r1H1ptr + (here->MESdrainPrimeNode)) - *(job->r1H1ptr + (here->MESsourcePrimeNode)); i1h1y = *(job->i1H1ptr + (here->MESdrainPrimeNode)) - *(job->i1H1ptr + (here->MESsourcePrimeNode)); r2h11x = *(job->r2H11ptr + (here->MESgateNode)) - *(job->r2H11ptr + (here->MESsourcePrimeNode)); i2h11x = *(job->i2H11ptr + (here->MESgateNode)) - *(job->i2H11ptr + (here->MESsourcePrimeNode)); r2h11y = *(job->r2H11ptr + (here->MESdrainPrimeNode)) - *(job->r2H11ptr + (here->MESsourcePrimeNode)); i2h11y = *(job->i2H11ptr + (here->MESdrainPrimeNode)) - *(job->i2H11ptr + (here->MESsourcePrimeNode)); r1hm2x = *(job->r1H2ptr + (here->MESgateNode)) - *(job->r1H2ptr + (here->MESsourcePrimeNode)); i1hm2x = -(*(job->i1H2ptr + (here->MESgateNode)) - *(job->i1H2ptr + (here->MESsourcePrimeNode))); r1hm2y = *(job->r1H2ptr + (here->MESdrainPrimeNode)) - *(job->r1H2ptr + (here->MESsourcePrimeNode)); i1hm2y = -(*(job->i1H2ptr + (here->MESdrainPrimeNode)) - *(job->i1H2ptr + (here->MESsourcePrimeNode))); r2h1m2x = *(job->r2H1m2ptr + (here->MESgateNode)) - *(job->r2H1m2ptr + (here->MESsourcePrimeNode)); i2h1m2x = *(job->i2H1m2ptr + (here->MESgateNode)) - *(job->i2H1m2ptr + (here->MESsourcePrimeNode)); r2h1m2y = *(job->r2H1m2ptr + (here->MESdrainPrimeNode)) - *(job->r2H1m2ptr + (here->MESsourcePrimeNode)); i2h1m2y = *(job->i2H1m2ptr + (here->MESdrainPrimeNode)) - *(job->i2H1m2ptr + (here->MESsourcePrimeNode)); /* loading starts here */ /* loading cdrain term */ pass.cxx = here->cdr_x2; pass.cyy = here->cdr_z2; pass.czz = 0.0; pass.cxy = here->cdr_xz; pass.cyz = 0.0; pass.cxz = 0.0; pass.cxxx = here->cdr_x3; pass.cyyy = here->cdr_z3; pass.czzz = 0.0; pass.cxxy = here->cdr_x2z; pass.cxxz = 0.0; pass.cxyy = here->cdr_xz2; pass.cyyz = 0.0; pass.cxzz = 0.0; pass.cyzz = 0.0; pass.cxyz = 0.0; pass.r1h1x = r1h1x; pass.i1h1x = i1h1x; pass.r1h1y = r1h1y; pass.i1h1y = i1h1y; pass.r1h1z = 0.0; pass.i1h1z = 0.0; pass.r1h2x = r1hm2x; pass.i1h2x = i1hm2x; pass.r1h2y = r1hm2y; pass.i1h2y = i1hm2y; pass.r1h2z = 0.0; pass.i1h2z = 0.0; pass.r2h11x = r2h11x; pass.i2h11x = i2h11x; pass.r2h11y = r2h11y; pass.i2h11y = i2h11y; pass.r2h11z = 0.0; pass.i2h11z = 0.0; pass.h2f1f2x = r2h1m2x; pass.ih2f1f2x = i2h1m2x; pass.h2f1f2y = r2h1m2y; pass.ih2f1f2y = i2h1m2y; pass.h2f1f2z = 0.0; pass.ih2f1f2z = 0.0; temp = DFn2F12(&pass); itemp = DFi2F12(&pass); *(ckt->CKTrhs + (here->MESdrainPrimeNode)) -= temp; *(ckt->CKTirhs + (here->MESdrainPrimeNode)) -= itemp; *(ckt->CKTrhs + (here->MESsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->MESsourcePrimeNode)) += itemp; /* cdrain term over */ /* loading ggs term */ temp = D1n2F12(here->ggs2, here->ggs3, r1h1x, i1h1x, r1hm2x, i1hm2x, r2h11x, i2h11x, r2h1m2x, i2h1m2x); itemp = D1i2F12(here->ggs2, here->ggs3, r1h1x, i1h1x, r1hm2x, i1hm2x, r2h11x, i2h11x, r2h1m2x, i2h1m2x); *(ckt->CKTrhs + (here->MESgateNode)) -= temp; *(ckt->CKTirhs + (here->MESgateNode)) -= itemp; *(ckt->CKTrhs + (here->MESsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->MESsourcePrimeNode)) += itemp; /* ggs over */ /* loading ggd term */ temp = D1n2F12(here->ggd2, here->ggd3, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y, r2h11x - r2h11y, i2h11x - i2h11y, r2h1m2x - r2h1m2y, i2h1m2x - i2h1m2y); itemp = D1i2F12(here->ggd2, here->ggd3, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y, r2h11x - r2h11y, i2h11x - i2h11y, r2h1m2x - r2h1m2y, i2h1m2x - i2h1m2y); *(ckt->CKTrhs + (here->MESgateNode)) -= temp; *(ckt->CKTirhs + (here->MESgateNode)) -= itemp; *(ckt->CKTrhs + (here->MESdrainPrimeNode)) += temp; *(ckt->CKTirhs + (here->MESdrainPrimeNode)) += itemp; /* ggd over */ /* loading qgs term */ pass.cxx = here->qgs_x2; pass.cyy = here->qgs_y2; pass.czz = 0.0; pass.cxy = here->qgs_xy; pass.cyz = 0.0; pass.cxz = 0.0; pass.cxxx = here->qgs_x3; pass.cyyy = here->qgs_y3; pass.czzz = 0.0; pass.cxxy = here->qgs_x2y; pass.cxxz = 0.0; pass.cxyy = here->qgs_xy2; pass.cyyz = 0.0; pass.cxzz = 0.0; pass.cyzz = 0.0; pass.cxyz = 0.0; pass.r1h1x = r1h1x; pass.i1h1x = i1h1x; pass.r1h1y = r1h1x - r1h1y; pass.i1h1y = i1h1x - i1h1y; pass.r1h1z = 0.0; pass.i1h1z = 0.0; pass.r1h2x = r1hm2x; pass.i1h2x = i1hm2x; pass.r1h2y = r1hm2x - r1hm2y; pass.i1h2y = i1hm2x - i1hm2y; pass.r1h2z = 0.0; pass.i1h2z = 0.0; pass.r2h11x = r2h11x; pass.i2h11x = i2h11x; pass.r2h11y = r2h11x - r2h11y; pass.i2h11y = i2h11x - i2h11y; pass.r2h11z = 0.0; pass.i2h11z = 0.0; pass.h2f1f2x = r2h1m2x; pass.ih2f1f2x = i2h1m2x; pass.h2f1f2y = r2h1m2x - r2h1m2y; pass.ih2f1f2y = i2h1m2x - i2h1m2y; pass.h2f1f2z = 0.0; pass.ih2f1f2z = 0.0; temp = -ckt->CKTomega*DFi2F12(&pass); itemp = ckt->CKTomega*DFn2F12(&pass); *(ckt->CKTrhs + (here->MESgateNode)) -= temp; *(ckt->CKTirhs + (here->MESgateNode)) -= itemp; *(ckt->CKTrhs + (here->MESsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->MESsourcePrimeNode)) += itemp; /* qgs term over */ /* loading qgd term */ pass.cxx = here->qgd_x2; pass.cyy = here->qgd_y2; pass.czz = 0.0; pass.cxy = here->qgd_xy; pass.cyz = 0.0; pass.cxz = 0.0; pass.cxxx = here->qgd_x3; pass.cyyy = here->qgd_y3; pass.czzz = 0.0; pass.cxxy = here->qgd_x2y; pass.cxxz = 0.0; pass.cxyy = here->qgd_xy2; pass.cyyz = 0.0; pass.cxzz = 0.0; pass.cyzz = 0.0; pass.cxyz = 0.0; pass.r1h1x = r1h1x; pass.i1h1x = i1h1x; pass.r1h1y = r1h1x - r1h1y; pass.i1h1y = i1h1x - i1h1y; pass.r1h1z = 0.0; pass.i1h1z = 0.0; pass.r1h2x = r1hm2x; pass.i1h2x = i1hm2x; pass.r1h2y = r1hm2x - r1hm2y; pass.i1h2y = i1hm2x - i1hm2y; pass.r1h2z = 0.0; pass.i1h2z = 0.0; pass.r2h11x = r2h11x; pass.i2h11x = i2h11x; pass.r2h11y = r2h11x - r2h11y; pass.i2h11y = i2h11x - i2h11y; pass.r2h11z = 0.0; pass.i2h11z = 0.0; pass.h2f1f2x = r2h1m2x; pass.ih2f1f2x = i2h1m2x; pass.h2f1f2y = r2h1m2x - r2h1m2y; pass.ih2f1f2y = i2h1m2x - i2h1m2y; pass.h2f1f2z = 0.0; pass.ih2f1f2z = 0.0; temp = -ckt->CKTomega*DFi2F12(&pass); itemp = ckt->CKTomega*DFn2F12(&pass); *(ckt->CKTrhs + (here->MESgateNode)) -= temp; *(ckt->CKTirhs + (here->MESgateNode)) -= itemp; *(ckt->CKTrhs + (here->MESdrainPrimeNode)) += temp; *(ckt->CKTirhs + (here->MESdrainPrimeNode)) += itemp; /* qgd term over */ /* all done */ break; default: ; } } } return(OK); } else return(E_BADPARM); } tmpk8ny_4pz/src/spicelib/devices/mes/mesdset.c0000644000175000017500000002757313546075722021575 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/cktdefs.h" #include "mesdefs.h" #include "ngspice/distodef.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MESdSetup(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current resistance value into the * sparse matrix previously provided */ { MESmodel *model = (MESmodel*)inModel; MESinstance *here; double afact; double beta; double betap; double cdrain; double cg; double cgd; double csat; double czgd; double czgs; double denom; double evgd; double evgs; double gdpr; double gspr; double invdenom; double lfact; double phib; double prod; double vcap; double vcrit; double vds; double vgd; double vgs; double vgst; double vto; double lggd1; double lggd2; double lggd3; double lggs1; double lggs2; double lggs3; Dderivs d_cdrain, d_qgs, d_qgd; Dderivs d_p, d_q, d_r, d_zero; /* loop through all the models */ for( ; model != NULL; model = MESnextModel(model)) { /* loop through all the instances of the model */ for (here = MESinstances(model); here != NULL ; here=MESnextInstance(here)) { /* * dc model parameters */ beta = model->MESbeta * here->MESm * here->MESarea; gdpr = model->MESdrainConduct * here->MESm * here->MESarea; gspr = model->MESsourceConduct * here->MESm * here->MESarea; csat = model->MESgateSatCurrent * here->MESm * here->MESarea; vcrit = model->MESvcrit; vto = model->MESthreshold; /* * initialization */ /* * compute new nonlinear branch voltages */ vgs = model->MEStype* (*(ckt->CKTrhsOld+ here->MESgateNode)- *(ckt->CKTrhsOld+ here->MESsourcePrimeNode)); vgd = model->MEStype* (*(ckt->CKTrhsOld+here->MESgateNode)- *(ckt->CKTrhsOld+ here->MESdrainPrimeNode)); /* * determine dc current and derivatives */ vds = vgs-vgd; if (vgs <= -5*CONSTvt0) { lggs1 = -csat/vgs+ckt->CKTgmin; lggs2=lggs3=0; cg = lggs1*vgs; } else { evgs = exp(vgs/CONSTvt0); lggs1 = csat*evgs/CONSTvt0+ckt->CKTgmin; lggs2 = (lggs1-ckt->CKTgmin)/(CONSTvt0*2); lggs3 = lggs2/(3*CONSTvt0); cg = csat*(evgs-1)+ckt->CKTgmin*vgs; } if (vgd <= -5*CONSTvt0) { lggd1 = -csat/vgd+ckt->CKTgmin; lggd2=lggd3=0; cgd = lggd1*vgd; } else { evgd = exp(vgd/CONSTvt0); lggd1 = csat*evgd/CONSTvt0+ckt->CKTgmin; lggd2 = (lggd1-ckt->CKTgmin)/(CONSTvt0*2); lggd3 = lggd2/(3*CONSTvt0); cgd = csat*(evgd-1)+ckt->CKTgmin*vgd; } cg = cg+cgd; /* * compute drain current and derivitives for normal mode */ /* until now, we were using the real vgs, vgd, and vds */ { /* converting (temporarily) to local vgs, vgd, and vds */ double vgsreal=vgs; double vgdreal=vgd; double vdsreal=vds; Dderivs d_afact, d_lfact; Dderivs d_betap, d_denom, d_invdenom; Dderivs d_prod; Dderivs d_vgst; if (vdsreal < 0.0) { vgs = vgdreal; vgd = vgsreal; vds = -vdsreal; here->MESmode = -1; /* source-drain interchange */ } else here->MESmode = 1; d_p.value = 0.0; d_p.d1_p = 1.0; d_p.d1_q = 0.0; d_p.d1_r = 0.0; d_p.d2_p2 = 0.0; d_p.d2_q2 = 0.0; d_p.d2_r2 = 0.0; d_p.d2_pq = 0.0; d_p.d2_qr = 0.0; d_p.d2_pr = 0.0; d_p.d3_p3 = 0.0; d_p.d3_q3 = 0.0; d_p.d3_r3 = 0.0; d_p.d3_p2r = 0.0; d_p.d3_p2q = 0.0; d_p.d3_q2r = 0.0; d_p.d3_pq2 = 0.0; d_p.d3_pr2 = 0.0; d_p.d3_qr2 = 0.0; d_p.d3_pqr = 0.0; EqualDeriv(&d_q,&d_p); EqualDeriv(&d_r,&d_p); EqualDeriv(&d_zero,&d_p); d_q.d1_p = d_r.d1_p = d_zero.d1_p = 0.0; d_q.d1_q = d_r.d1_r = 1.0; d_p.value = vgs; d_r.value = vds; /* p =vgs; q= nothing in particular ; r = vds */ vgst = vgs-model->MESthreshold; EqualDeriv(&d_vgst,&d_p); d_vgst.value = vgst; /* * normal mode, cutoff region */ if (vgst <= 0) { cdrain = 0; EqualDeriv(&d_cdrain,&d_zero); } else { prod = 1 + model->MESlModulation * vds; TimesDeriv(&d_prod,&d_r,model->MESlModulation); d_prod.value = prod; betap = beta * prod; TimesDeriv(&d_betap,&d_prod,beta); denom = 1 + model->MESb * vgst; TimesDeriv(&d_denom,&d_vgst,model->MESb); d_denom.value = denom; invdenom = 1 / denom; InvDeriv(&d_invdenom,&d_denom); /* * normal mode, saturation region */ cdrain = betap * vgst * vgst * invdenom; MultDeriv(&d_cdrain,&d_betap,&d_vgst); MultDeriv(&d_cdrain,&d_cdrain,&d_vgst); MultDeriv(&d_cdrain,&d_cdrain,&d_invdenom); if (vds < ( 3 / model->MESalpha ) ) { /* * normal mode, linear region */ afact = 1 - model->MESalpha * vds / 3; TimesDeriv(&d_afact,&d_r,-model->MESalpha/3.0); d_afact.value = afact; lfact = 1 - afact * afact * afact; CubeDeriv(&d_lfact,&d_afact); TimesDeriv(&d_lfact,&d_lfact,-1.0); d_lfact.value += 1.0; cdrain = betap*vgst*vgst*invdenom*lfact; MultDeriv(&d_cdrain,&d_betap,&d_vgst); MultDeriv(&d_cdrain,&d_cdrain,&d_vgst); MultDeriv(&d_cdrain,&d_cdrain,&d_invdenom); MultDeriv(&d_cdrain,&d_cdrain,&d_lfact); } } /* converting back to real vgs, vgd, vds */ if (here->MESmode == -1) { vgs = vgsreal; vgd = vgdreal; vds = vdsreal; } } /* * charge storage elements */ { /* code block */ czgs = model->MEScapGS * here->MESm * here->MESarea; czgd = model->MEScapGD * here->MESm * here->MESarea; phib = model->MESgatePotential; vcap = 1 / model->MESalpha; /* * qgga = qggnew(vgs,vgd,phib,vcap,vto,czgs,czgd,&cgsna,&cgdna); */ /* function qggnew - private, used by MESload*/ { double veroot,veff1,veff2,del,vnroot,vnew1,vnew3,vmax,ext; double qroot,par1,cfact,cplus,cminus; Dderivs d_vnroot; Dderivs d_cgsnew, d_cgdnew, d_dummy, d_dummy2; Dderivs d_ext, d_qroot, d_par1, d_cfact, d_cplus, d_cminus; Dderivs d_veroot, d_veff1, d_veff2, d_vnew1, d_vnew3; /* now p=vgs, q=vgd, r= nothing */ d_q.value = vgd; d_p.value = vgs; veroot = sqrt( (vgs - vgd) * (vgs - vgd) + vcap*vcap ); TimesDeriv(&d_veroot,&d_q,-1.0); PlusDeriv(&d_veroot,&d_veroot,&d_p); MultDeriv(&d_veroot,&d_veroot,&d_veroot); d_veroot.value += vcap*vcap; SqrtDeriv(&d_veroot,&d_veroot); veff1 = 0.5 * (vgs + vgd + veroot); PlusDeriv(&d_veff1,&d_veroot,&d_p); PlusDeriv(&d_veff1,&d_veff1,&d_q); TimesDeriv(&d_veff1,&d_veff1,0.5); veff2 = veff1 - veroot; TimesDeriv(&d_veff2,&d_veroot,-1.0); PlusDeriv(&d_veff2,&d_veff2,&d_veff1); del = 0.2;/*const*/ vnroot = sqrt( (veff1 - vto)*(veff1 - vto) + del * del ); EqualDeriv(&d_vnroot,&d_veff1); d_vnroot.value -= vto; MultDeriv(&d_vnroot,&d_vnroot,&d_vnroot); d_vnroot.value += del*del; SqrtDeriv(&d_vnroot,&d_vnroot); vnew1 = 0.5 * (veff1 + vto + vnroot); PlusDeriv(&d_vnew1,&d_veff1,&d_vnroot); d_vnew1.value += vto; TimesDeriv(&d_vnew1,&d_vnew1,0.5); vnew3 = vnew1; EqualDeriv(&d_vnew3,&d_vnew1); vmax = 0.5;/*const*/ if ( vnew1 < vmax ) { ext=0; EqualDeriv(&d_ext,&d_zero); } else { vnew1 = vmax; EqualDeriv(&d_vnew1,&d_zero); d_vnew1.value = vmax; ext = (vnew3 - vmax)/sqrt(1 - vmax/phib); EqualDeriv(&d_ext,&d_vnew3); d_ext.value -= vmax; TimesDeriv(&d_ext,&d_ext,1/sqrt(1 - vmax/phib)); } qroot = sqrt(1 - vnew1/phib); TimesDeriv(&d_qroot,&d_vnew1,-1/phib); d_qroot.value += 1.0; SqrtDeriv(&d_qroot,&d_qroot); /* * qggval = czgs * (2*phib*(1-qroot) + ext) + czgd*veff2; */ par1 = 0.5 * ( 1 + (veff1-vto)/vnroot); EqualDeriv(&d_par1,&d_veff1); d_par1.value -= vto; DivDeriv(&d_par1,&d_par1,&d_vnroot); d_par1.value += 1.0; TimesDeriv(&d_par1,&d_par1,0.5); cfact = (vgs- vgd)/veroot; TimesDeriv(&d_cfact,&d_q,-1.0); PlusDeriv(&d_cfact,&d_cfact,&d_p); DivDeriv(&d_cfact,&d_cfact,&d_veroot); cplus = 0.5 * (1 + cfact); TimesDeriv(&d_cplus,&d_cfact,0.5); d_cplus.value += 0.5; cminus = cplus - cfact; TimesDeriv(&d_cminus,&d_cfact,-0.5); d_cminus.value += 0.5; /* *cgsnew = czgs/qroot*par1*cplus + czgd*cminus; *cgdnew = czgs/qroot*par1*cminus + czgd*cplus; * * assuming qgs = vgs*cgsnew * and qgd = vgd*cgsnew * * This is probably wrong but then so is the a.c. analysis * routine and everything else * */ MultDeriv(&d_dummy,&d_qroot,&d_par1); InvDeriv(&d_dummy,&d_dummy); TimesDeriv(&d_dummy,&d_dummy,czgs); TimesDeriv(&d_cgsnew,&d_cminus,czgd); MultDeriv(&d_dummy2,&d_dummy,&d_cplus); PlusDeriv(&d_cgsnew,&d_cgsnew,&d_dummy2); TimesDeriv(&d_cgdnew,&d_cplus,czgd); MultDeriv(&d_dummy2,&d_dummy,&d_cminus); PlusDeriv(&d_cgdnew,&d_cgdnew,&d_dummy2); MultDeriv(&d_qgs,&d_cgsnew,&d_p); MultDeriv(&d_qgd,&d_cgdnew,&d_q); } } if (here->MESmode == 1) { /* normal mode - no source-drain interchange */ here->cdr_x = d_cdrain.d1_p; here->cdr_z = d_cdrain.d1_r; here->cdr_x2 = d_cdrain.d2_p2; here->cdr_z2 = d_cdrain.d2_r2; here->cdr_xz = d_cdrain.d2_pr; here->cdr_x3 = d_cdrain.d3_p3; here->cdr_z3 = d_cdrain.d3_r3;; here->cdr_x2z = d_cdrain.d3_p2r; here->cdr_xz2 = d_cdrain.d3_pr2; } else { /* * inverse mode - source and drain interchanged */ here->cdr_x = -d_cdrain.d1_p; here->cdr_z = d_cdrain.d1_p + d_cdrain.d1_r; here->cdr_x2 = -d_cdrain.d2_p2; here->cdr_z2 = -(d_cdrain.d2_p2 + d_cdrain.d2_r2 + 2*d_cdrain.d2_pr); here->cdr_xz = d_cdrain.d2_p2 + d_cdrain.d2_pr; here->cdr_x3 = -d_cdrain.d3_p3; here->cdr_z3 = d_cdrain.d3_p3 + d_cdrain.d3_r3 + 3*(d_cdrain.d3_p2r + d_cdrain.d3_pr2 ) ; here->cdr_x2z = d_cdrain.d3_p3 + d_cdrain.d3_p2r; here->cdr_xz2 = -(d_cdrain.d3_p3 + 2*d_cdrain.d3_p2r + d_cdrain.d3_pr2); } /* now to adjust for type and multiply by factors to convert to Taylor coeffs. */ here->cdr_x2 = 0.5*model->MEStype*here->cdr_x2; here->cdr_z2 = 0.5*model->MEStype*here->cdr_z2; here->cdr_xz = model->MEStype*here->cdr_xz; here->cdr_x3 = here->cdr_x3/6.; here->cdr_z3 = here->cdr_z3/6.; here->cdr_x2z = 0.5*here->cdr_x2z; here->cdr_xz2 = 0.5*here->cdr_xz2; here->ggs3 = lggs3; here->ggd3 = lggd3; here->ggs2 = model->MEStype*lggs2; here->ggd2 = model->MEStype*lggd2; here->qgs_x2 = 0.5*model->MEStype*d_qgs.d2_p2; here->qgs_y2 = 0.5*model->MEStype*d_qgs.d2_q2; here->qgs_xy = model->MEStype*d_qgs.d2_pq; here->qgs_x3 = d_qgs.d3_p3/6.; here->qgs_y3 = d_qgs.d3_q3/6.; here->qgs_x2y = 0.5*d_qgs.d3_p2q; here->qgs_xy2 = 0.5*d_qgs.d3_pq2; here->qgd_x2 = 0.5*model->MEStype*d_qgd.d2_p2; here->qgd_y2 = 0.5*model->MEStype*d_qgd.d2_q2; here->qgd_xy = model->MEStype*d_qgd.d2_pq; here->qgd_x3 = d_qgd.d3_p3/6.; here->qgd_y3 = d_qgd.d3_q3/6.; here->qgd_x2y = 0.5*d_qgd.d3_p2q; here->qgd_xy2 = 0.5*d_qgd.d3_pq2; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mes/mesload.c0000644000175000017500000004703013546075722021543 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 S. Hwang Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/cktdefs.h" #include "mesdefs.h" #include "ngspice/const.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* forward declaraction of our helper function */ static double qggnew(double,double,double,double,double,double,double, double*,double*); int MESload(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current resistance value into the * sparse matrix previously provided */ { MESmodel *model = (MESmodel*)inModel; MESinstance *here; double afact; double beta; double betap; double capgd; double capgs; double cd; double cdhat = 0.0; double cdrain; double cdreq; double ceq; double ceqgd; double ceqgs; double cg; double cgd; double cgdna,cgdnb,cgdnc,cgdnd; double cghat = 0.0; double cgsna,cgsnb,cgsnc,cgsnd; double csat; double czgd; double czgs; double delvds; double delvgd; double delvgs; double denom; double evgd; double evgs; double gdpr; double gds; double geq; double ggd; double ggs; double gm; double gspr; double invdenom; double lfact; double phib; double prod; double qgga,qggb,qggc,qggd; double vcap; double vcrit; double vds; double vgd; double vgd1; double vgdt; double vgs; double vgs1; double vgst; double vto; #ifndef PREDICTOR double xfact; #endif double arg; int icheck; int ichk1; int error; double m; /* loop through all the models */ for( ; model != NULL; model = MESnextModel(model)) { /* loop through all the instances of the model */ for (here = MESinstances(model); here != NULL ; here=MESnextInstance(here)) { /* * dc model parameters */ beta = model->MESbeta * here->MESarea; gdpr = model->MESdrainConduct * here->MESarea; gspr = model->MESsourceConduct * here->MESarea; csat = model->MESgateSatCurrent * here->MESarea; vcrit = model->MESvcrit; vto = model->MESthreshold; /* * initialization */ icheck = 1; if( ckt->CKTmode & MODEINITSMSIG) { vgs = *(ckt->CKTstate0 + here->MESvgs); vgd = *(ckt->CKTstate0 + here->MESvgd); } else if (ckt->CKTmode & MODEINITTRAN) { vgs = *(ckt->CKTstate1 + here->MESvgs); vgd = *(ckt->CKTstate1 + here->MESvgd); } else if ( (ckt->CKTmode & MODEINITJCT) && (ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC) ) { vds = model->MEStype*here->MESicVDS; vgs = model->MEStype*here->MESicVGS; vgd = vgs-vds; } else if ( (ckt->CKTmode & MODEINITJCT) && (here->MESoff == 0) ) { vgs = -1; vgd = -1; } else if( (ckt->CKTmode & MODEINITJCT) || ((ckt->CKTmode & MODEINITFIX) && (here->MESoff))) { vgs = 0; vgd = 0; } else { #ifndef PREDICTOR if(ckt->CKTmode & MODEINITPRED) { xfact = ckt->CKTdelta/ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->MESvgs) = *(ckt->CKTstate1 + here->MESvgs); vgs = (1+xfact) * *(ckt->CKTstate1 + here->MESvgs) - xfact * *(ckt->CKTstate2 + here->MESvgs); *(ckt->CKTstate0 + here->MESvgd) = *(ckt->CKTstate1 + here->MESvgd); vgd = (1+xfact)* *(ckt->CKTstate1 + here->MESvgd) - xfact * *(ckt->CKTstate2 + here->MESvgd); *(ckt->CKTstate0 + here->MEScg) = *(ckt->CKTstate1 + here->MEScg); *(ckt->CKTstate0 + here->MEScd) = *(ckt->CKTstate1 + here->MEScd); *(ckt->CKTstate0 + here->MEScgd) = *(ckt->CKTstate1 + here->MEScgd); *(ckt->CKTstate0 + here->MESgm) = *(ckt->CKTstate1 + here->MESgm); *(ckt->CKTstate0 + here->MESgds) = *(ckt->CKTstate1 + here->MESgds); *(ckt->CKTstate0 + here->MESggs) = *(ckt->CKTstate1 + here->MESggs); *(ckt->CKTstate0 + here->MESggd) = *(ckt->CKTstate1 + here->MESggd); } else { #endif /* PREDICTOR */ /* * compute new nonlinear branch voltages */ vgs = model->MEStype* (*(ckt->CKTrhsOld+ here->MESgateNode)- *(ckt->CKTrhsOld+ here->MESsourcePrimeNode)); vgd = model->MEStype* (*(ckt->CKTrhsOld+here->MESgateNode)- *(ckt->CKTrhsOld+ here->MESdrainPrimeNode)); #ifndef PREDICTOR } #endif /* PREDICTOR */ delvgs=vgs - *(ckt->CKTstate0 + here->MESvgs); delvgd=vgd - *(ckt->CKTstate0 + here->MESvgd); delvds=delvgs - delvgd; cghat= *(ckt->CKTstate0 + here->MEScg) + *(ckt->CKTstate0 + here->MESggd)*delvgd + *(ckt->CKTstate0 + here->MESggs)*delvgs; cdhat= *(ckt->CKTstate0 + here->MEScd) + *(ckt->CKTstate0 + here->MESgm)*delvgs + *(ckt->CKTstate0 + here->MESgds)*delvds - *(ckt->CKTstate0 + here->MESggd)*delvgd; /* * bypass if solution has not changed */ if((ckt->CKTbypass) && (!(ckt->CKTmode & MODEINITPRED)) && (fabs(delvgs) < ckt->CKTreltol*MAX(fabs(vgs), fabs(*(ckt->CKTstate0 + here->MESvgs)))+ ckt->CKTvoltTol) ) if ( (fabs(delvgd) < ckt->CKTreltol*MAX(fabs(vgd), fabs(*(ckt->CKTstate0 + here->MESvgd)))+ ckt->CKTvoltTol)) if ( (fabs(cghat-*(ckt->CKTstate0 + here->MEScg)) < ckt->CKTreltol*MAX(fabs(cghat), fabs(*(ckt->CKTstate0 + here->MEScg)))+ ckt->CKTabstol) ) if ( /* hack - expression too big */ (fabs(cdhat-*(ckt->CKTstate0 + here->MEScd)) < ckt->CKTreltol*MAX(fabs(cdhat), fabs(*(ckt->CKTstate0 + here->MEScd)))+ ckt->CKTabstol) ) { /* we can do a bypass */ vgs= *(ckt->CKTstate0 + here->MESvgs); vgd= *(ckt->CKTstate0 + here->MESvgd); vds= vgs-vgd; cg= *(ckt->CKTstate0 + here->MEScg); cd= *(ckt->CKTstate0 + here->MEScd); cgd= *(ckt->CKTstate0 + here->MEScgd); gm= *(ckt->CKTstate0 + here->MESgm); gds= *(ckt->CKTstate0 + here->MESgds); ggs= *(ckt->CKTstate0 + here->MESggs); ggd= *(ckt->CKTstate0 + here->MESggd); goto load; } /* * limit nonlinear branch voltages */ ichk1=1; vgs = DEVpnjlim(vgs,*(ckt->CKTstate0 + here->MESvgs),CONSTvt0, vcrit, &icheck); vgd = DEVpnjlim(vgd,*(ckt->CKTstate0 + here->MESvgd),CONSTvt0, vcrit,&ichk1); if (ichk1 == 1) { icheck=1; } vgs = DEVfetlim(vgs,*(ckt->CKTstate0 + here->MESvgs), model->MESthreshold); vgd = DEVfetlim(vgd,*(ckt->CKTstate0 + here->MESvgd), model->MESthreshold); } /* * determine dc current and derivatives */ vds = vgs-vgd; if (vgs <= -3*CONSTvt0) { arg=3*CONSTvt0/(vgs*CONSTe); arg = arg * arg * arg; cg = -csat*(1+arg)+ckt->CKTgmin*vgs; ggs = csat*3*arg/vgs+ckt->CKTgmin; } else { evgs = exp(vgs/CONSTvt0); ggs = csat*evgs/CONSTvt0+ckt->CKTgmin; cg = csat*(evgs-1)+ckt->CKTgmin*vgs; } if (vgd <= -3*CONSTvt0) { arg=3*CONSTvt0/(vgd*CONSTe); arg = arg * arg * arg; cgd = -csat*(1+arg)+ckt->CKTgmin*vgd; ggd = csat*3*arg/vgd+ckt->CKTgmin; } else { evgd = exp(vgd/CONSTvt0); ggd = csat*evgd/CONSTvt0+ckt->CKTgmin; cgd = csat*(evgd-1)+ckt->CKTgmin*vgd; } cg = cg+cgd; /* * compute drain current and derivitives for normal mode */ if (vds >= 0) { vgst = vgs-model->MESthreshold; /* * normal mode, cutoff region */ if (vgst <= 0) { cdrain = 0; gm = 0; gds = 0; } else { prod = 1 + model->MESlModulation * vds; betap = beta * prod; denom = 1 + model->MESb * vgst; invdenom = 1 / denom; if (vds >= ( 3 / model->MESalpha ) ) { /* * normal mode, saturation region */ cdrain = betap * vgst * vgst * invdenom; gm = betap * vgst * (1 + denom) * invdenom * invdenom; gds = model->MESlModulation * beta * vgst * vgst * invdenom; } else { /* * normal mode, linear region */ afact = 1 - model->MESalpha * vds / 3; lfact = 1 - afact * afact * afact; cdrain = betap * vgst * vgst * invdenom * lfact; gm = betap * vgst * (1 + denom) * invdenom * invdenom * lfact; gds = beta * vgst * vgst * invdenom * (model->MESalpha * afact * afact * prod + lfact * model->MESlModulation); } } } else { /* * compute drain current and derivitives for inverse mode */ vgdt = vgd - model->MESthreshold; if (vgdt <= 0) { /* * inverse mode, cutoff region */ cdrain = 0; gm = 0; gds = 0; } else { /* * inverse mode, saturation region */ prod = 1 - model->MESlModulation * vds; betap = beta * prod; denom = 1 + model->MESb * vgdt; invdenom = 1 / denom; if ( -vds >= ( 3 / model->MESalpha ) ) { cdrain = -betap * vgdt * vgdt * invdenom; gm = -betap * vgdt * (1 + denom) * invdenom * invdenom; gds = model->MESlModulation * beta * vgdt * vgdt * invdenom-gm; } else { /* * inverse mode, linear region */ afact = 1 + model->MESalpha * vds / 3; lfact = 1 - afact * afact * afact; cdrain = -betap * vgdt * vgdt * invdenom * lfact; gm = -betap * vgdt * (1 + denom) * invdenom * invdenom * lfact; gds = beta * vgdt * vgdt * invdenom * (model->MESalpha * afact * afact * prod + lfact * model->MESlModulation)-gm; } } } /* * compute equivalent drain current source */ cd = cdrain - cgd; if ( (ckt->CKTmode & (MODETRAN|MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) ){ /* * charge storage elements */ czgs = model->MEScapGS * here->MESarea; czgd = model->MEScapGD * here->MESarea; phib = model->MESgatePotential; vgs1 = *(ckt->CKTstate1 + here->MESvgs); vgd1 = *(ckt->CKTstate1 + here->MESvgd); vcap = 1 / model->MESalpha; qgga = qggnew(vgs,vgd,phib,vcap,vto,czgs,czgd,&cgsna,&cgdna); qggb = qggnew(vgs1,vgd,phib,vcap,vto,czgs,czgd,&cgsnb,&cgdnb); qggc = qggnew(vgs,vgd1,phib,vcap,vto,czgs,czgd,&cgsnc,&cgdnc); qggd = qggnew(vgs1,vgd1,phib,vcap,vto,czgs,czgd,&cgsnd,&cgdnd); if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->MESqgs) = qgga; *(ckt->CKTstate1 + here->MESqgd) = qgga; } *(ckt->CKTstate0+here->MESqgs) = *(ckt->CKTstate1+here->MESqgs) + 0.5 * (qgga-qggb + qggc-qggd); *(ckt->CKTstate0+here->MESqgd) = *(ckt->CKTstate1+here->MESqgd) + 0.5 * (qgga-qggc + qggb-qggd); capgs = cgsna; capgd = cgdna; /* * store small-signal parameters */ if( (!(ckt->CKTmode & MODETRANOP)) || (!(ckt->CKTmode & MODEUIC)) ) { if(ckt->CKTmode & MODEINITSMSIG) { *(ckt->CKTstate0 + here->MESqgs) = capgs; *(ckt->CKTstate0 + here->MESqgd) = capgd; continue; /*go to 1000*/ } /* * transient analysis */ if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->MESqgs) = *(ckt->CKTstate0 + here->MESqgs); *(ckt->CKTstate1 + here->MESqgd) = *(ckt->CKTstate0 + here->MESqgd); } error = NIintegrate(ckt,&geq,&ceq,capgs,here->MESqgs); if(error) return(error); ggs = ggs + geq; cg = cg + *(ckt->CKTstate0 + here->MEScqgs); error = NIintegrate(ckt,&geq,&ceq,capgd,here->MESqgd); if(error) return(error); ggd = ggd + geq; cg = cg + *(ckt->CKTstate0 + here->MEScqgd); cd = cd - *(ckt->CKTstate0 + here->MEScqgd); cgd = cgd + *(ckt->CKTstate0 + here->MEScqgd); if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->MEScqgs) = *(ckt->CKTstate0 + here->MEScqgs); *(ckt->CKTstate1 + here->MEScqgd) = *(ckt->CKTstate0 + here->MEScqgd); } } } /* * check convergence */ if( (!(ckt->CKTmode & MODEINITFIX)) | (!(ckt->CKTmode & MODEUIC))) { if((icheck == 1) || (fabs(cghat-cg) >= ckt->CKTreltol * MAX(fabs(cghat),fabs(cg))+ckt->CKTabstol) || (fabs(cdhat-cd) > ckt->CKTreltol* MAX(fabs(cdhat),fabs(cd))+ckt->CKTabstol)) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; } } *(ckt->CKTstate0 + here->MESvgs) = vgs; *(ckt->CKTstate0 + here->MESvgd) = vgd; *(ckt->CKTstate0 + here->MEScg) = cg; *(ckt->CKTstate0 + here->MEScd) = cd; *(ckt->CKTstate0 + here->MEScgd) = cgd; *(ckt->CKTstate0 + here->MESgm) = gm; *(ckt->CKTstate0 + here->MESgds) = gds; *(ckt->CKTstate0 + here->MESggs) = ggs; *(ckt->CKTstate0 + here->MESggd) = ggd; /* * load current vector */ load: m = here->MESm; ceqgd=model->MEStype*(cgd-ggd*vgd); ceqgs=model->MEStype*((cg-cgd)-ggs*vgs); cdreq=model->MEStype*((cd+cgd)-gds*vds-gm*vgs); *(ckt->CKTrhs + here->MESgateNode) += m * (-ceqgs-ceqgd); *(ckt->CKTrhs + here->MESdrainPrimeNode) += m * (-cdreq+ceqgd); *(ckt->CKTrhs + here->MESsourcePrimeNode) += m * (cdreq+ceqgs); /* * load y matrix */ *(here->MESdrainDrainPrimePtr) += m * (-gdpr); *(here->MESgateDrainPrimePtr) += m * (-ggd); *(here->MESgateSourcePrimePtr) += m * (-ggs); *(here->MESsourceSourcePrimePtr) += m * (-gspr); *(here->MESdrainPrimeDrainPtr) += m * (-gdpr); *(here->MESdrainPrimeGatePtr) += m * (gm-ggd); *(here->MESdrainPrimeSourcePrimePtr) += m * (-gds-gm); *(here->MESsourcePrimeGatePtr) += m * (-ggs-gm); *(here->MESsourcePrimeSourcePtr) += m * (-gspr); *(here->MESsourcePrimeDrainPrimePtr) += m * (-gds); *(here->MESdrainDrainPtr) += m * (gdpr); *(here->MESgateGatePtr) += m * (ggd+ggs); *(here->MESsourceSourcePtr) += m * (gspr); *(here->MESdrainPrimeDrainPrimePtr) += m * (gdpr+gds+ggd); *(here->MESsourcePrimeSourcePrimePtr) += m * (gspr+gds+gm+ggs); } } return(OK); } /* function qggnew - private, used by MESload*/ static double qggnew( double vgs, double vgd, double phib, double vcap, double vto, double cgs, double cgd, double *cgsnew, double *cgdnew) { double veroot,veff1,veff2,del,vnroot,vnew1,vnew3,vmax,ext; double qroot,qggval,par1,cfact,cplus,cminus; veroot = sqrt( (vgs - vgd) * (vgs - vgd) + vcap*vcap ); veff1 = 0.5 * (vgs + vgd + veroot); veff2 = veff1 - veroot; del = 0.2; vnroot = sqrt( (veff1 - vto)*(veff1 - vto) + del * del ); vnew1 = 0.5 * (veff1 + vto + vnroot); vnew3 = vnew1; vmax = 0.5; if ( vnew1 < vmax ) { ext=0; } else { vnew1 = vmax; ext = (vnew3 - vmax)/sqrt(1 - vmax/phib); } qroot = sqrt(1 - vnew1/phib); qggval = cgs * (2*phib*(1-qroot) + ext) + cgd*veff2; par1 = 0.5 * ( 1 + (veff1-vto)/vnroot); cfact = (vgs- vgd)/veroot; cplus = 0.5 * (1 + cfact); cminus = cplus - cfact; *cgsnew = cgs/qroot*par1*cplus + cgd*cminus; *cgdnew = cgs/qroot*par1*cminus + cgd*cplus; return(qggval); } tmpk8ny_4pz/src/spicelib/devices/mes/mespzld.c0000644000175000017500000000633613546075722021601 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 S. Hwang **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mesdefs.h" #include "ngspice/sperror.h" #include "ngspice/complex.h" #include "ngspice/suffix.h" int MESpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { MESmodel *model = (MESmodel*)inModel; MESinstance *here; double gdpr; double gspr; double gm; double gds; double ggs; double xgs; double ggd; double xgd; double m; for( ; model != NULL; model = MESnextModel(model)) { for( here = MESinstances(model); here != NULL; here = MESnextInstance(here)) { m = here->MESm; gdpr=model->MESdrainConduct * here->MESarea; gspr=model->MESsourceConduct * here->MESarea; gm= *(ckt->CKTstate0 + here->MESgm) ; gds= *(ckt->CKTstate0 + here->MESgds) ; ggs= *(ckt->CKTstate0 + here->MESggs) ; xgs= *(ckt->CKTstate0 + here->MESqgs) ; ggd= *(ckt->CKTstate0 + here->MESggd) ; xgd= *(ckt->CKTstate0 + here->MESqgd) ; *(here->MESdrainDrainPtr ) += m * gdpr; *(here->MESgateGatePtr ) += m * ggd+ggs; *(here->MESgateGatePtr ) += m * (xgd+xgs)*s->real; *(here->MESgateGatePtr +1) += m * (xgd+xgs)*s->imag; *(here->MESsourceSourcePtr ) += m * gspr; *(here->MESdrainPrimeDrainPrimePtr ) += m * gdpr+gds+ggd; *(here->MESdrainPrimeDrainPrimePtr ) += m * xgd*s->real; *(here->MESdrainPrimeDrainPrimePtr +1) += m * xgd*s->imag; *(here->MESsourcePrimeSourcePrimePtr ) += m * gspr+gds+gm+ggs; *(here->MESsourcePrimeSourcePrimePtr ) += m * xgs*s->real; *(here->MESsourcePrimeSourcePrimePtr +1) += m * xgs*s->imag; *(here->MESdrainDrainPrimePtr ) -= m * gdpr; *(here->MESgateDrainPrimePtr ) -= m * ggd; *(here->MESgateDrainPrimePtr ) -= m * xgd*s->real; *(here->MESgateDrainPrimePtr +1) -= m * xgd*s->imag; *(here->MESgateSourcePrimePtr ) -= m * ggs; *(here->MESgateSourcePrimePtr ) -= m * xgs*s->real; *(here->MESgateSourcePrimePtr +1) -= m * xgs*s->imag; *(here->MESsourceSourcePrimePtr ) -= m * gspr; *(here->MESdrainPrimeDrainPtr ) -= m * gdpr; *(here->MESdrainPrimeGatePtr ) += m * (-ggd+gm); *(here->MESdrainPrimeGatePtr ) -= m * xgd*s->real; *(here->MESdrainPrimeGatePtr +1) -= m * xgd*s->imag; *(here->MESdrainPrimeSourcePrimePtr ) += m * (-gds-gm); *(here->MESsourcePrimeGatePtr ) += m * (-ggs-gm); *(here->MESsourcePrimeGatePtr ) -= m * xgs*s->real; *(here->MESsourcePrimeGatePtr +1) -= m * xgs*s->imag; *(here->MESsourcePrimeSourcePtr ) -= m * gspr; *(here->MESsourcePrimeDrainPrimePtr ) -= m * gds; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mes/mesinit.h0000644000175000017500000000035613546075722021574 0ustar carstencarsten#ifndef _MESINIT_H #define _MESINIT_H extern IFparm MESpTable[ ]; extern IFparm MESmPTable[ ]; extern char *MESnames[ ]; extern int MESpTSize; extern int MESmPTSize; extern int MESnSize; extern int MESiSize; extern int MESmSize; #endif tmpk8ny_4pz/src/spicelib/devices/mes/mesitf.h0000644000175000017500000000025513546075722021411 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_MES #define DEV_MES SPICEdev *get_mes_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/bsimsoi/0000755000175000017500000000000013546075722020630 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/bsimsoi/b4soigetic.c0000644000175000017500000000405613546075722023035 0ustar carstencarsten/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/ /********** * Copyright 2010 Regents of the University of California. All rights reserved. * Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang * Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soigetic.c * Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu. * Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu. * File: b4soigetic.c * Modified by Hui Wan, Xuemei Xi 11/30/2005 * Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009 * Modified by Tanvir Morshed 09/22/2009 * Modified by Tanvir Morshed 12/31/2009 **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b4soidef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B4SOIgetic( GENmodel *inModel, CKTcircuit *ckt) { B4SOImodel *model = (B4SOImodel*)inModel; B4SOIinstance *here; for (; model ; model = B4SOInextModel(model)) { for (here = B4SOIinstances(model); here; here = B4SOInextInstance(here)) { if(!here->B4SOIicVBSGiven) { here->B4SOIicVBS = *(ckt->CKTrhs + here->B4SOIbNode) - *(ckt->CKTrhs + here->B4SOIsNode); } if (!here->B4SOIicVDSGiven) { here->B4SOIicVDS = *(ckt->CKTrhs + here->B4SOIdNode) - *(ckt->CKTrhs + here->B4SOIsNode); } if (!here->B4SOIicVGSGiven) { here->B4SOIicVGS = *(ckt->CKTrhs + here->B4SOIgNode) - *(ckt->CKTrhs + here->B4SOIsNode); } if (!here->B4SOIicVESGiven) { here->B4SOIicVES = *(ckt->CKTrhs + here->B4SOIeNode) - *(ckt->CKTrhs + here->B4SOIsNode); } if (!here->B4SOIicVPSGiven) { here->B4SOIicVPS = *(ckt->CKTrhs + here->B4SOIpNode) - *(ckt->CKTrhs + here->B4SOIsNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsimsoi/b4soidef.h0000644000175000017500000040640113546075722022505 0ustar carstencarsten/********** Copyright 2010 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung authors:1999-2004 Pin Su, Hui Wan b3soidef.h Authors:2005- Hui Wan, Jane Xi Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu Authors: 2009- Tanvir Morshed, Ali Niknejad, Chenming Hu Authors: 2010- Tanvir Morshed, Ali Niknejad, Chenming Hu File: b4soidef.h **********/ #ifndef B4SOI #define B4SOI #define SOICODE /* Uncomment the following line to activate debugging variable output */ /* debug1, debug2, debug3, ... */ /* #define B4SOI_DEBUG_OUT */ #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" typedef struct sB4SOIinstance { struct GENinstance gen; #define B4SOImodPtr(inst) ((struct sB4SOImodel *)((inst)->gen.GENmodPtr)) #define B4SOInextInstance(inst) ((struct sB4SOIinstance *)((inst)->gen.GENnextInstance)) #define B4SOIname gen.GENname #define B4SOIstates gen.GENstate const int B4SOIdNode; const int B4SOIgNodeExt; /* v3.1 changed gNode to gNodeExt */ const int B4SOIsNode; const int B4SOIeNode; const int B4SOIpNodeExt; const int B4SOIbNodeExt; const int B4SOItempNodeExt; int B4SOIpNode; int B4SOIbNode; int B4SOItempNode; int B4SOIdNodePrime; int B4SOIsNodePrime; int B4SOIgNode; /* v3.1 */ int B4SOIgNodeMid; /* v3.1 */ int B4SOIdbNode; /* v4.0 */ int B4SOIsbNode; /* v4.0 */ int B4SOIvbsNode; /* for Debug */ int B4SOIidsNode; int B4SOIicNode; int B4SOIibsNode; int B4SOIibdNode; int B4SOIiiiNode; int B4SOIigNode; int B4SOIgiggNode; int B4SOIgigdNode; int B4SOIgigbNode; int B4SOIigidlNode; int B4SOIitunNode; int B4SOIibpNode; int B4SOIcbbNode; int B4SOIcbdNode; int B4SOIcbgNode; int B4SOIqbfNode; int B4SOIqjsNode; int B4SOIqjdNode; double B4SOIphi; double B4SOIvtm; double B4SOIni; double B4SOIueff; double B4SOIthetavth; double B4SOIvon; double B4SOIvdsat; double B4SOIcgdo; double B4SOIcgso; double B4SOIcgeo; double B4SOIids; double B4SOIic; double B4SOIibs; double B4SOIibd; double B4SOIiii; double B4SOIig; double B4SOIgigg; double B4SOIgigd; double B4SOIgigb; double B4SOIgige; /* v3.0 */ /* v3.1 added for RF */ double B4SOIgcrg; double B4SOIgcrgd; double B4SOIgcrgg; double B4SOIgcrgs; double B4SOIgcrgb; /* v3.1 added for end */ double B4SOIInv_ODeff; /* v4.0 */ double B4SOIkvsat; /* v4.0 */ double B4SOIgrbsb; /* v4.0 */ double B4SOIgrbdb; /* v4.0 */ double B4SOIrbsb; /* v4.0 */ double B4SOIrbdb; /* v4.0 */ double B4SOIGGjdb; /* v4.0 */ double B4SOIGGjsb; /* v4.0 */ double B4SOIgbgiigbpb; /* v4.0 */ double B4SOIgiigidlb; /* v4.0 */ double B4SOIgiigidld; /* v4.0 */ double B4SOIdelvto; /* v4.0 */ double B4SOIgstot; /* v4.0 for rdsmod */ double B4SOIgstotd; /* v4.0 for rdsmod */ double B4SOIgstotg; /* v4.0 for rdsmod */ double B4SOIgstots; /* v4.0 for rdsmod */ double B4SOIgstotb; /* v4.0 for rdsmod */ double B4SOIgdtot; /* v4.0 for rdsmod */ double B4SOIgdtotd; /* v4.0 for rdsmod */ double B4SOIgdtotg; /* v4.0 for rdsmod */ double B4SOIgdtots; /* v4.0 for rdsmod */ double B4SOIgdtotb; /* v4.0 for rdsmod */ double B4SOIigp; /* v4.1 for Igb in the AGBCP2 region */ double B4SOIgigpg; /* v4.1 for Igb in the AGBCP2 region */ double B4SOIgigpp; /* v4.1 for Igb in the AGBCP2 region */ double B4SOITempSH; /* v4.2 for portability of SH temp */ double B4SOIigidl; double B4SOIigisl; double B4SOIitun; double B4SOIibp; /* double B4SOIabeff; */ /* v4.2 never used in the code */ double B4SOIvbseff; double B4SOIcbg; double B4SOIcbb; double B4SOIcbd; double B4SOIqb; double B4SOIqbf; double B4SOIqjs; double B4SOIqjd; int B4SOIfloat; /* v3.1 for RF */ double B4SOIgrgeltd; /* v3.1 for RF end */ double B4SOIl; double B4SOIw; double B4SOIm; double B4SOIdrainArea; double B4SOIsourceArea; double B4SOIdrainSquares; double B4SOIsourceSquares; double B4SOIdrainPerimeter; double B4SOIsourcePerimeter; double B4SOIsourceConductance; double B4SOIdrainConductance; /* v4.0 stress effect instance param */ double B4SOIsa; double B4SOIsb; double B4SOIsd; double B4SOIu0temp; double B4SOIvsattemp; double B4SOIvth0; double B4SOIvfb; double B4SOIvfbzb; double B4SOIk2; double B4SOIk2ox; double B4SOIeta0; /* end of v4.0 stress effect instance param */ /*4.1 mobmod=4*/ double B4SOIvtfbphi1; double B4SOIvgsteffvth; double B4SOIicVBS; double B4SOIicVDS; double B4SOIicVGS; double B4SOIicVES; double B4SOIicVPS; int B4SOIbjtoff; int B4SOIbodyMod; int B4SOIdebugMod; double B4SOIrth0; double B4SOIcth0; double B4SOIbodySquares; double B4SOIrbodyext; double B4SOIfrbody; /* v2.0 release */ double B4SOInbc; double B4SOInseg; double B4SOIpdbcp; double B4SOIpsbcp; double B4SOIagbcp; double B4SOIagbcp2; /* v4.1 improvement on BC */ double B4SOIagbcpd; /* v4.0 */ double B4SOIaebcp; double B4SOIvbsusr; int B4SOItnodeout; /* Deleted from pParam and moved to here */ double B4SOIcsesw; double B4SOIcdesw; double B4SOIcsbox; double B4SOIcdbox; double B4SOIcsmin; double B4SOIcdmin; double B4SOIst4; double B4SOIdt4; int B4SOIoff; int B4SOImode; /* v4.0 added */ double B4SOInf; /* v4.0 added end */ /* v3.2 added */ double B4SOInstar; double B4SOIAbulk; /* v3.2 added end */ int B4SOIsoiMod; /* v3.2 */ /* v3.1 for RF */ int B4SOIrgateMod; /* v3.1 for RF end */ /* v4.0 */ int B4SOIrbodyMod; /* v4.0 end */ /* OP point */ double B4SOIqinv; double B4SOIcd; double B4SOIcjs; double B4SOIcjd; double B4SOIcbody; double B4SOIcbs; double B4SOIIgb; /* v2.2 release */ double B4SOIcgate; double B4SOIgigs; double B4SOIgigT; double B4SOIcbodcon; double B4SOIcth; /* double B4SOIcsubstrate; */ /* v4.2 never used in the code */ double B4SOIgm; double B4SOIgme; /* v3.0 */ double B4SOIcb; double B4SOIcdrain; double B4SOIgds; double B4SOIgmbs; double B4SOIgmT; #ifdef B4SOI_DEBUG_OUT double B4SOIdebug1; double B4SOIdebug2; double B4SOIdebug3; #endif double B4SOIgbbs; double B4SOIgbgs; double B4SOIgbds; double B4SOIgbes; /* v3.0 */ double B4SOIgbps; double B4SOIgbT; /* v3.0 */ double B4SOIIgcs; double B4SOIgIgcsg; double B4SOIgIgcsd; double B4SOIgIgcss; double B4SOIgIgcsb; double B4SOIgIgcse; double B4SOIIgcd; double B4SOIgIgcdg; double B4SOIgIgcdd; double B4SOIgIgcds; double B4SOIgIgcdb; double B4SOIgIgcde; double B4SOIIgs; double B4SOIgIgsg; double B4SOIgIgss; double B4SOIIgd; double B4SOIgIgdg; double B4SOIgIgdd; double B4SOIgjsd; double B4SOIgjsb; double B4SOIgjsg; double B4SOIgjsT; double B4SOIgjdb; double B4SOIgjdd; double B4SOIgjdg; double B4SOIgjde; /* v3.0 */ double B4SOIgjdT; double B4SOIgbpbs; double B4SOIgbpps; double B4SOIgbpT; double B4SOIgtempb; double B4SOIgtempg; double B4SOIgtempd; double B4SOIgtempe; /* v3.0 */ double B4SOIgtempT; double B4SOIqgate; double B4SOIqdrn; double B4SOIqsrc; double B4SOIqbulk; double B4SOIcapbd; double B4SOIcapbs; double B4SOIcggb; double B4SOIcgdb; double B4SOIcgsb; double B4SOIcgeb; double B4SOIcgT; double B4SOIcbgb; double B4SOIcbdb; double B4SOIcbsb; double B4SOIcbeb; double B4SOIcbT; double B4SOIcdgb; double B4SOIcddb; double B4SOIcdsb; double B4SOIcdeb; double B4SOIcdT; double B4SOIceeb; double B4SOIceT; double B4SOIqse; double B4SOIgcse; double B4SOIqde; double B4SOIgcde; double B4SOIrds; /* v2.2.3 */ double B4SOIVgsteff; /* v2.2.3 */ double B4SOIVdseff; /* v2.2.3 */ double B4SOIAbovVgst2Vtm; /* v2.2.3 */ /* 4.0 */ double B4SOIidovVds; double B4SOIcjsb; double B4SOIcjdb; /* 4.0 end */ struct b4soiSizeDependParam *pParam; unsigned B4SOIlGiven :1; unsigned B4SOIwGiven :1; unsigned B4SOImGiven :1; unsigned B4SOIdrainAreaGiven :1; unsigned B4SOIsourceAreaGiven :1; unsigned B4SOIdrainSquaresGiven :1; unsigned B4SOIsourceSquaresGiven :1; unsigned B4SOIdrainPerimeterGiven :1; unsigned B4SOIsourcePerimeterGiven :1; unsigned B4SOIdNodePrimeSet :1; unsigned B4SOIsNodePrimeSet :1; unsigned B4SOIsaGiven :1; /* v4.0 for stress */ unsigned B4SOIsbGiven :1; /* v4.0 for stress */ unsigned B4SOIsdGiven :1; /* v4.0 for stress */ unsigned B4SOIrbdbGiven :1; /* v4.0 for rbody network */ unsigned B4SOIrbsbGiven :1; /* v4.0 for rbody network */ unsigned B4SOIicVBSGiven :1; unsigned B4SOIicVDSGiven :1; unsigned B4SOIicVGSGiven :1; unsigned B4SOIicVESGiven :1; unsigned B4SOIicVPSGiven :1; unsigned B4SOIbjtoffGiven :1; unsigned B4SOIdebugModGiven :1; unsigned B4SOIrth0Given :1; unsigned B4SOIcth0Given :1; unsigned B4SOIbodySquaresGiven :1; unsigned B4SOIfrbodyGiven: 1; /* v2.0 release */ unsigned B4SOInbcGiven :1; unsigned B4SOInsegGiven :1; unsigned B4SOIpdbcpGiven :1; unsigned B4SOIpsbcpGiven :1; unsigned B4SOIagbcpGiven :1; unsigned B4SOIagbcp2Given :1; /* v4.1 improvement on BC */ unsigned B4SOIagbcpdGiven :1; /* v4.0 */ unsigned B4SOIaebcpGiven :1; unsigned B4SOIvbsusrGiven :1; unsigned B4SOItnodeoutGiven :1; unsigned B4SOIoffGiven :1; unsigned B4SOIrgateModGiven :1; /* v3.1 */ unsigned B4SOIsoiModGiven :1; /* v3.2 */ /* v4.0 added */ unsigned B4SOInfGiven :1; unsigned B4SOIrbodyModGiven :1; unsigned B4SOIdelvtoGiven :1; /* v4.0 added end */ /* v4.0 */ double *B4SOIDBdpPtr; double *B4SOIDBdbPtr; double *B4SOIDBbPtr; double *B4SOIDPdbPtr; double *B4SOISBspPtr; double *B4SOISBbPtr; double *B4SOISBsbPtr; double *B4SOISPsbPtr; double *B4SOIBsbPtr; double *B4SOIBdbPtr; double *B4SOIDgPtr; /* v4.0 for rdsMod =1 */ double *B4SOIDspPtr; /* v4.0 for rdsMod =1 */ double *B4SOIDbPtr; /* v4.0 for rdsMod =1 */ double *B4SOISdpPtr; /* v4.0 for rdsMod =1 */ double *B4SOISgPtr; /* v4.0 for rdsMod =1 */ double *B4SOISbPtr; /* v4.0 for rdsMod =1 */ /* v4.0 end */ double *B4SOIPgPtr; /* v4.1 for Ig_agbcp2 */ double *B4SOIGpPtr; /* v4.1 for Ig_agbcp2 */ /* v3.1 added for RF */ double *B4SOIGgmPtr; double *B4SOIGgePtr; double *B4SOIGMdpPtr; double *B4SOIGMgPtr; double *B4SOIGMspPtr; double *B4SOIGMgmPtr; double *B4SOIGMgePtr; double *B4SOIGMePtr; double *B4SOIGMbPtr; double *B4SOISPgmPtr; double *B4SOIDPgmPtr; double *B4SOIEgmPtr; double *B4SOIGEdpPtr; double *B4SOIGEgPtr; double *B4SOIGEgmPtr; double *B4SOIGEgePtr; double *B4SOIGEspPtr; double *B4SOIGEbPtr; /* v3.1 added for RF end */ double *B4SOIGePtr; double *B4SOIDPePtr; double *B4SOISPePtr; double *B4SOIEePtr; double *B4SOIEbPtr; double *B4SOIBePtr; double *B4SOIEgPtr; double *B4SOIEdpPtr; double *B4SOIEspPtr; double *B4SOITemptempPtr; double *B4SOITempdpPtr; double *B4SOITempspPtr; double *B4SOITempgPtr; double *B4SOITempbPtr; double *B4SOITempePtr; /* v3.0 */ double *B4SOIGtempPtr; double *B4SOIDPtempPtr; double *B4SOISPtempPtr; double *B4SOIEtempPtr; double *B4SOIBtempPtr; double *B4SOIPtempPtr; double *B4SOIBpPtr; double *B4SOIPbPtr; double *B4SOIPpPtr; double *B4SOIDdPtr; double *B4SOIGgPtr; double *B4SOISsPtr; double *B4SOIBbPtr; double *B4SOIDPdpPtr; double *B4SOISPspPtr; double *B4SOIDdpPtr; double *B4SOIGbPtr; double *B4SOIGdpPtr; double *B4SOIGspPtr; double *B4SOISspPtr; double *B4SOIBdpPtr; double *B4SOIBspPtr; double *B4SOIDPspPtr; double *B4SOIDPdPtr; double *B4SOIBgPtr; double *B4SOIDPgPtr; double *B4SOISPgPtr; double *B4SOISPsPtr; double *B4SOIDPbPtr; double *B4SOISPbPtr; double *B4SOISPdpPtr; double *B4SOIVbsPtr; /* Debug */ double *B4SOIIdsPtr; double *B4SOIIcPtr; double *B4SOIIbsPtr; double *B4SOIIbdPtr; double *B4SOIIiiPtr; double *B4SOIIgPtr; double *B4SOIGiggPtr; double *B4SOIGigdPtr; double *B4SOIGigbPtr; double *B4SOIIgidlPtr; double *B4SOIItunPtr; double *B4SOIIbpPtr; double *B4SOICbbPtr; double *B4SOICbdPtr; double *B4SOICbgPtr; double *B4SOIqbPtr; double *B4SOIQbfPtr; double *B4SOIQjsPtr; double *B4SOIQjdPtr; #ifdef USE_OMP /* per instance storage of results, to update matrix at a later stge */ int B4SOINode_sh; double B4SOINode_1; double B4SOINode_2; double B4SOINode_3; double B4SOINode_4; double B4SOINode_5; double B4SOINode_6; double B4SOINode_7; double B4SOINode_8; double B4SOINode_9; double B4SOINode_10; double B4SOINode_11; double B4SOINode_12; double B4SOINode_13; double B4SOINode_14; double B4SOINode_15; double B4SOI_1; double B4SOI_2; double B4SOI_3; double B4SOI_4; double B4SOI_5; double B4SOI_6; double B4SOI_7; double B4SOI_8; double B4SOI_9; double B4SOI_10; double B4SOI_11; double B4SOI_12; double B4SOI_13; double B4SOI_14; double B4SOI_15; double B4SOI_16; double B4SOI_17; double B4SOI_18; double B4SOI_19; double B4SOI_20; double B4SOI_21; double B4SOI_22; double B4SOI_23; double B4SOI_24; double B4SOI_25; double B4SOI_26; double B4SOI_27; double B4SOI_28; double B4SOI_29; double B4SOI_30; double B4SOI_31; double B4SOI_32; double B4SOI_33; double B4SOI_34; double B4SOI_35; double B4SOI_36; double B4SOI_37; double B4SOI_38; double B4SOI_39; double B4SOI_40; double B4SOI_41; double B4SOI_42; double B4SOI_43; double B4SOI_44; double B4SOI_45; double B4SOI_46; double B4SOI_47; double B4SOI_48; double B4SOI_49; double B4SOI_50; double B4SOI_51; double B4SOI_52; double B4SOI_53; double B4SOI_54; double B4SOI_55; double B4SOI_56; double B4SOI_57; double B4SOI_58; double B4SOI_59; double B4SOI_60; double B4SOI_61; double B4SOI_62; double B4SOI_63; double B4SOI_64; double B4SOI_65; double B4SOI_66; double B4SOI_67; double B4SOI_68; double B4SOI_69; double B4SOI_70; double B4SOI_71; double B4SOI_72; double B4SOI_73; double B4SOI_74; double B4SOI_75; double B4SOI_76; double B4SOI_77; double B4SOI_78; double B4SOI_79; double B4SOI_80; double B4SOI_81; double B4SOI_82; double B4SOI_83; double B4SOI_84; double B4SOI_85; double B4SOI_86; double B4SOI_87; double B4SOI_88; double B4SOI_89; double B4SOI_90; double B4SOI_91; double B4SOI_92; double B4SOI_93; double B4SOI_94; double B4SOI_95; double B4SOI_96; double B4SOI_97; double B4SOI_98; double B4SOI_99; double B4SOI_100; double B4SOI_101; double B4SOI_102; #endif #define B4SOIvbd B4SOIstates+ 0 #define B4SOIvbs B4SOIstates+ 1 #define B4SOIvgs B4SOIstates+ 2 #define B4SOIvds B4SOIstates+ 3 #define B4SOIves B4SOIstates+ 4 #define B4SOIvps B4SOIstates+ 5 #define B4SOIvg B4SOIstates+ 6 #define B4SOIvd B4SOIstates+ 7 #define B4SOIvs B4SOIstates+ 8 #define B4SOIvp B4SOIstates+ 9 #define B4SOIve B4SOIstates+ 10 #define B4SOIdeltemp B4SOIstates+ 11 #define B4SOIqb B4SOIstates+ 12 #define B4SOIcqb B4SOIstates+ 13 #define B4SOIqg B4SOIstates+ 14 #define B4SOIcqg B4SOIstates+ 15 #define B4SOIqd B4SOIstates+ 16 #define B4SOIcqd B4SOIstates+ 17 #define B4SOIqe B4SOIstates+ 18 #define B4SOIcqe B4SOIstates+ 19 #define B4SOIqbs B4SOIstates+ 20 #define B4SOIcqbs B4SOIstates+ 21 /* v4.0 */ #define B4SOIqbd B4SOIstates+ 22 #define B4SOIcqbd B4SOIstates+ 23 /* v4.0 */ #define B4SOIqbe B4SOIstates+ 24 #define B4SOIqth B4SOIstates+ 25 #define B4SOIcqth B4SOIstates+ 26 /* v3.1 added or changed for RF */ #define B4SOIvges B4SOIstates+ 27 #define B4SOIvgms B4SOIstates+ 28 #define B4SOIvgge B4SOIstates+ 29 #define B4SOIvggm B4SOIstates+ 30 /* #define B4SOIcqgmid B4SOIstates+ 31 */ /* Bug # 29 */ /* #define B4SOIqgmid B4SOIstates + 32 */ /* Bug # 29 */ #define B4SOIqgmid B4SOIstates+ 31 /* Bug Fix # 29 Jul09*/ #define B4SOIcqgmid B4SOIstates + 32 /* Bug Fix # 29 Jul09*/ /* v3.1 added or changed for RF end */ /* v4.0 */ #define B4SOIvdbs B4SOIstates + 33 #define B4SOIvdbd B4SOIstates + 34 #define B4SOIvsbs B4SOIstates + 35 #define B4SOIvses B4SOIstates + 36 #define B4SOIvdes B4SOIstates + 37 /* v4.0 end */ #define B4SOInumStates 38 /* indices to the array of B4SOI NOISE SOURCES */ #define B4SOIRDNOIZ 0 #define B4SOIRSNOIZ 1 #define B4SOIRGNOIZ 2 #define B4SOIIDNOIZ 3 #define B4SOIFLNOIZ 4 #define B4SOIFB_IBSNOIZ 5 /* v4.0 */ #define B4SOIFB_IBDNOIZ 6 /* v4.0 */ #define B4SOIIGSNOIZ 7 #define B4SOIIGDNOIZ 8 #define B4SOIIGBNOIZ 9 #define B4SOIRBSBNOIZ 10 /* v4.0 */ #define B4SOIRBDBNOIZ 11 /* v4.0 */ #define B4SOIRBODYNOIZ 12 /* v4.0 */ #define B4SOITOTNOIZ 13 /* v4.0 */ #define B4SOINSRCS 14 /* Number of MOSFET(3) noise sources v3.2 */ #ifndef NONOISE double B4SOInVar[NSTATVARS][B4SOINSRCS]; #else /* NONOISE */ double **B4SOInVar; #endif /* NONOISE */ } B4SOIinstance ; struct b4soiSizeDependParam { double Width; double Length; double Rth0; double Cth0; double B4SOIcdsc; double B4SOIcdscb; double B4SOIcdscd; double B4SOIcit; double B4SOInfactor; double B4SOIvsat; double B4SOIat; double B4SOIa0; double B4SOIags; double B4SOIa1; double B4SOIa2; double B4SOIketa; double B4SOInpeak; double B4SOInsub; double B4SOIngate; double B4SOInsd; double B4SOIgamma1; double B4SOIgamma2; double B4SOIvbx; double B4SOIvbi; double B4SOIvbm; double B4SOIvbsc; double B4SOIxt; double B4SOIphi; double B4SOIlitl; double B4SOIk1; double B4SOIkt1; double B4SOIkt1l; double B4SOIkt2; double B4SOIk2; double B4SOIk3; double B4SOIk3b; double B4SOIw0; double B4SOIlpe0; double B4SOIdvt0; double B4SOIdvt1; double B4SOIdvt2; double B4SOIdvt0w; double B4SOIdvt1w; double B4SOIdvt2w; double B4SOIdrout; double B4SOIdsub; double B4SOIvth0; double B4SOIua; double B4SOIua1; double B4SOIub; double B4SOIub1; double B4SOIuc; double B4SOIuc1; double B4SOIu0; double B4SOIute; /*4.1 high k mobility*/ double B4SOIud; double B4SOIud1; double B4SOIeu; double B4SOIucs; double B4SOIucste; double B4SOIvoff; double B4SOIvfb; double B4SOIuatemp; double B4SOIubtemp; double B4SOIuctemp; double B4SOIrbody; double B4SOIrth; double B4SOIcth; double B4SOIrds0denom; double B4SOIvfbb; double B4SOIjbjts; /* v4.0 */ double B4SOIjbjtd; /* v4.0 */ double B4SOIjdifs; /* v4.0 */ double B4SOIjdifd; /* v4.0 */ double B4SOIjrecs; /* v4.0 */ double B4SOIjrecd; /* v4.0 */ double B4SOIjtuns; /* v4.0 */ double B4SOIjtund; /* v4.0 */ double B4SOIrdw; /* v4.0 for rdsMod = 1 */ double B4SOIrsw; /* v4.0 for rdsMod = 1 */ double B4SOIrdwmin; /* v4.0 for rdsMod = 1 */ double B4SOIrswmin; /* v4.0 for rdsMod = 1 */ double B4SOIrd0; /* v4.0 for rdsMod = 1 */ double B4SOIrs0; /* v4.0 for rdsMod = 1 */ double B4SOIsdt1; double B4SOIst2; double B4SOIst3; double B4SOIdt2; double B4SOIdt3; double B4SOIdelta; double B4SOIrdsw; double B4SOIrds0; double B4SOIprwg; double B4SOIprwb; double B4SOIprt; double B4SOIeta0; double B4SOIetab; double B4SOIpclm; double B4SOIpdibl1; double B4SOIpdibl2; double B4SOIpdiblb; double B4SOIpvag; double B4SOIwr; double B4SOIdwg; double B4SOIdwb; double B4SOIb0; double B4SOIb1; double B4SOIalpha0; double B4SOIbeta0; /* v3.0 */ double B4SOIaigc; double B4SOIbigc; double B4SOIcigc; double B4SOIaigsd; double B4SOIbigsd; double B4SOIcigsd; double B4SOInigc; double B4SOIpigcd; double B4SOIpoxedge; double B4SOIdlcig; /* v3.1 added for RF */ double B4SOIxrcrg1; double B4SOIxrcrg2; /* v3.1 added for RF end */ /* v4.0 */ /* added for stress effect */ double B4SOIku0; double B4SOIkvth0; double B4SOIku0temp; double B4SOIrho_ref; double B4SOIinv_od_ref; /* added for stress effect end */ double NFinger; /* v4.0 end */ /* CV model */ double B4SOIcgsl; double B4SOIcgdl; double B4SOIckappa; double B4SOIcf; double B4SOIclc; double B4SOIcle; /* Added for binning - START0 */ /* v3.1 */ double B4SOIxj; double B4SOIalphaGB1; double B4SOIbetaGB1; double B4SOIalphaGB2; double B4SOIbetaGB2; double B4SOIaigbcp2; /* 4.1 */ double B4SOIbigbcp2; /* 4.1 */ double B4SOIcigbcp2; /* 4.1 */ double B4SOIndif; double B4SOIntrecf; double B4SOIntrecr; double B4SOIxbjt; double B4SOIxdif; double B4SOIxrec; double B4SOIxtun; double B4SOIxdifd; double B4SOIxrecd; double B4SOIxtund; double B4SOIkb1; double B4SOIk1w1; double B4SOIk1w2; double B4SOIketas; double B4SOIfbjtii; /*4.1 Iii model*/ double B4SOIebjtii; double B4SOIcbjtii; double B4SOIvbci; double B4SOIabjtii; double B4SOImbjtii; double B4SOIbeta1; double B4SOIbeta2; double B4SOIvdsatii0; double B4SOIlii; double B4SOIesatii; double B4SOIsii0; double B4SOIsii1; double B4SOIsii2; double B4SOIsiid; double B4SOIagidl; double B4SOIbgidl; double B4SOIcgidl; /* v4.0 */ double B4SOIegidl; double B4SOIrgidl; double B4SOIkgidl; double B4SOIfgidl; double B4SOIagisl; double B4SOIbgisl; double B4SOIcgisl; /* v4.0 */ double B4SOIegisl; double B4SOIrgisl; double B4SOIkgisl; double B4SOIfgisl; double B4SOIntun; /* v4.0 */ double B4SOIntund; /* v4.0 */ double B4SOIndiode; /* v4.0 */ double B4SOIndioded; /* v4.0 */ double B4SOInrecf0; /* v4.0 */ double B4SOInrecf0d; /* v4.0 */ double B4SOInrecr0; /* v4.0 */ double B4SOInrecr0d; /* v4.0 */ double B4SOIisbjt; double B4SOIidbjt; /* v4.0 */ double B4SOIisdif; double B4SOIiddif; /* v4.0 */ double B4SOIisrec; double B4SOIidrec; /* v4.0 */ double B4SOIistun; double B4SOIidtun; /* v4.0 */ double B4SOIvrec0; /* v4.0 */ double B4SOIvrec0d; /* v4.0 */ double B4SOIvtun0; /* v4.0 */ double B4SOIvtun0d; /* v4.0 */ double B4SOInbjt; double B4SOIlbjt0; double B4SOIvabjt; double B4SOIaely; double B4SOIvsdfb; double B4SOIvsdth; double B4SOIdelvt; /* Added by binning - END0 */ /* Pre-calculated constants */ double B4SOIdw; double B4SOIdl; double B4SOIleff; double B4SOIweff; double B4SOIdwc; double B4SOIdlc; double B4SOIleffCV; double B4SOIweffCV; double B4SOIabulkCVfactor; double B4SOIcgso; double B4SOIcgdo; double B4SOIcgeo; double B4SOIu0temp; double B4SOIvsattemp; double B4SOIsqrtPhi; double B4SOIphis3; double B4SOIXdep0; double B4SOIsqrtXdep0; double B4SOItheta0vb0; double B4SOIthetaRout; /* v3.2 */ double B4SOIqsi; /* v2.2 release */ double B4SOIoxideRatio; /* v2.0 release */ double B4SOIk1eff; double B4SOIwdios; double B4SOIwdiod; double B4SOIwdiodCV; double B4SOIwdiosCV; double B4SOIarfabjt; double B4SOIlratio; double B4SOIlratiodif; double B4SOIvearly; double B4SOIahli; /* v4.0 */ double B4SOIahlid; /* v4.0 */ double B4SOIahli0s; /* v4.0 */ double B4SOIahli0d; /* v4.0 */ double B4SOIvfbzb; double B4SOIldeb; double B4SOIacde; double B4SOImoin; double B4SOInoff; /* v3.2 */ double B4SOIleffCVb; double B4SOIleffCVbg; /* double B4SOIcof1; double B4SOIcof2; double B4SOIcof3; double B4SOIcof4; */ /* v4.2 nover used in the code */ double B4SOIcdep0; /* v3.0 */ double B4SOIToxRatio; double B4SOIAechvb; double B4SOIBechvb; double B4SOIToxRatioEdge; double B4SOIAechvbEdges; /* LFW */ double B4SOIAechvbEdged; /* LFW */ double B4SOIBechvbEdge; double B4SOIvfbsd; /* v4.0 */ double B4SOIk1ox; /* v4.0 for Vth */ double B4SOIk2ox; /* v4.0 for Vth */ double B4SOIlpeb; /* v4.0 for Vth */ double B4SOIdvtp0; /* v4.0 for Vth */ double B4SOIdvtp1; /* v4.0 for Vth */ double B4SOIdvtp2; /* v4.1 for Vth */ double B4SOIdvtp3; /* v4.1 for Vth */ double B4SOIdvtp4; /* v4.1 for Vth */ double B4SOIminv; /* v4.0 for Vgsteff */ double B4SOImstar; /* v4.0 for Vgsteff */ double B4SOIfprout; /* v4.0 for DITS in Id */ double B4SOIpdits; /* v4.0 for DITS in Id */ double B4SOIpditsd; /* v4.0 for DITS in Id */ /*4.1*/ double B4SOImstarcv; double B4SOIminvcv; double B4SOIvoffcv; double B4SOIdvtp2factor; struct b4soiSizeDependParam *pNext; }; typedef struct sB4SOImodel { struct GENmodel gen; #define B4SOImodType gen.GENmodType #define B4SOInextModel(inst) ((struct sB4SOImodel *)((inst)->gen.GENnextModel)) #define B4SOIinstances(inst) ((B4SOIinstance *)((inst)->gen.GENinstances)) #define B4SOImodName gen.GENmodName int B4SOItype; int B4SOImobMod; int B4SOIcapMod; int B4SOIfnoiMod; /* v3.2 */ int B4SOItnoiMod; /* v3.2 */ int B4SOIshMod; int B4SOIbinUnit; int B4SOIparamChk; int B4SOImtrlMod; /*4.1*/ int B4SOIvgstcvMod; int B4SOIgidlMod; int B4SOIiiiMod; double B4SOIversion; double B4SOIeot; /*4.1*/ double B4SOIepsrox; double B4SOIepsrsub; double B4SOItoxp; double B4SOIleffeot; double B4SOIweffeot; double B4SOIvddeot; double B4SOItempeot; double B4SOIados; double B4SOIbdos; double B4SOIepsrgate; double B4SOIni0sub; double B4SOIbg0sub; double B4SOItbgasub; double B4SOItbgbsub; double B4SOIphig; double B4SOIeasub; double B4SOItvbci; double B4SOItox; double B4SOItoxm; /* v3.2 */ double B4SOIdtoxcv; /* v2.2.3 */ double B4SOIcdsc; double B4SOIcdscb; double B4SOIcdscd; double B4SOIcit; double B4SOInfactor; double B4SOIvsat; double B4SOIat; double B4SOIa0; double B4SOIags; double B4SOIa1; double B4SOIa2; double B4SOIketa; double B4SOInsub; double B4SOInpeak; double B4SOIngate; double B4SOInsd; double B4SOIlnsd; double B4SOIwnsd; double B4SOIpnsd; double B4SOIgamma1; double B4SOIgamma2; double B4SOIvbx; double B4SOIvbm; double B4SOIxt; double B4SOIk1; double B4SOIkt1; double B4SOIkt1l; double B4SOIkt2; double B4SOIk2; double B4SOIk3; double B4SOIk3b; double B4SOIw0; double B4SOIlpe0; double B4SOIdvt0; double B4SOIdvt1; double B4SOIdvt2; double B4SOIdvt0w; double B4SOIdvt1w; double B4SOIdvt2w; double B4SOIdrout; double B4SOIdsub; double B4SOIvth0; double B4SOIua; double B4SOIua1; double B4SOIub; double B4SOIub1; double B4SOIuc; double B4SOIuc1; double B4SOIu0; double B4SOIute; /*4.1 high k mobility*/ double B4SOIud; double B4SOIlud; double B4SOIwud; double B4SOIpud; double B4SOIud1; double B4SOIlud1; double B4SOIwud1; double B4SOIpud1; double B4SOIeu; double B4SOIleu; double B4SOIweu; double B4SOIpeu; double B4SOIucs; double B4SOIlucs; double B4SOIwucs; double B4SOIpucs; double B4SOIucste; double B4SOIlucste; double B4SOIwucste; double B4SOIpucste; double B4SOIvoff; double B4SOIdelta; double B4SOIrdsw; double B4SOIrdw; /* v4.0 for rdsMod = 1 */ double B4SOIrsw; /* v4.0 for rdsMod = 1 */ double B4SOIrdwmin; /* v4.0 for rdsMod = 1 */ double B4SOIrswmin; /* v4.0 for rdsMod = 1 */ double B4SOIprwg; double B4SOIprwb; double B4SOIprt; double B4SOIeta0; double B4SOIetab; double B4SOIpclm; double B4SOIpdibl1; double B4SOIpdibl2; double B4SOIpdiblb; double B4SOIpvag; double B4SOIwr; double B4SOIdwg; double B4SOIdwb; double B4SOIb0; double B4SOIb1; double B4SOIalpha0; double B4SOItbox; double B4SOItsi; double B4SOIetsi; double B4SOIxj; double B4SOIkb1; double B4SOIrth0; double B4SOIcth0; double B4SOIegidl; double B4SOIcfrcoeff; /* v4.4 */ double B4SOIagidl; double B4SOIbgidl; double B4SOIcgidl; /* v4.0 */ double B4SOIrgidl; double B4SOIkgidl; double B4SOIfgidl; double B4SOIegisl; double B4SOIagisl; double B4SOIbgisl; double B4SOIcgisl; double B4SOIrgisl; double B4SOIkgisl; double B4SOIfgisl; double B4SOIndiode; /* v4.0 */ double B4SOIndioded; /* v4.0 */ double B4SOIistun; double B4SOIidtun; /* v4.0 */ double B4SOIxbjt; double B4SOIxdif; double B4SOIxrec; double B4SOIxtun; double B4SOIxdifd; double B4SOIxrecd; double B4SOIxtund; /* v3.0 */ int B4SOIsoiMod; /* v3.2 bug fix */ double B4SOIvbs0pd; /* v3.2 */ double B4SOIvbs0fd; /* v3.2 */ double B4SOIvbsa; double B4SOInofffd; double B4SOIvofffd; double B4SOIk1b; double B4SOIk2b; double B4SOIdk2b; double B4SOIdvbd0; double B4SOIdvbd1; double B4SOImoinFD; /* v3.0 */ int B4SOIigbMod; int B4SOIigcMod; double B4SOIaigc; double B4SOIbigc; double B4SOIcigc; double B4SOIaigsd; double B4SOIbigsd; double B4SOIcigsd; double B4SOInigc; double B4SOIpigcd; double B4SOIpoxedge; double B4SOIdlcig; /* v3.1 added for RF */ int B4SOIrgateMod; double B4SOIxrcrg1; double B4SOIxrcrg2; double B4SOIrshg; double B4SOIngcon; double B4SOIxgw; double B4SOIxgl; /* v3.1 added for RF end */ /* v3.2 for noise */ double B4SOItnoia; double B4SOItnoib; double B4SOIrnoia; double B4SOIrnoib; double B4SOIntnoi; /* v3.2 for noise end */ /* v4.0 */ int B4SOIrbodyMod; double B4SOIrbdb; double B4SOIrbsb; double B4SOIgbmin; double B4SOIfrbody; int B4SOIrdsMod; /* v4.0 */ /* v4.0 end */ /* v4.1 */ int B4SOIfdMod; double B4SOIvfb; double B4SOIvsce; double B4SOIcdsbs; double B4SOIminvcv; double B4SOIlminvcv; double B4SOIwminvcv; double B4SOIpminvcv; double B4SOIvoffcv; double B4SOIlvoffcv; double B4SOIwvoffcv; double B4SOIpvoffcv; /* added end */ /* v2.2 release */ double B4SOIwth0; double B4SOIrhalo; double B4SOIntox; double B4SOItoxref; double B4SOIebg; double B4SOIvevb; double B4SOIalphaGB1; double B4SOIbetaGB1; double B4SOIvgb1; double B4SOIvecb; double B4SOIalphaGB2; double B4SOIbetaGB2; double B4SOIvgb2; double B4SOIaigbcp2; /* 4.1 */ double B4SOIbigbcp2; /* 4.1 */ double B4SOIcigbcp2; /* 4.1 */ double B4SOItoxqm; double B4SOIvoxh; double B4SOIdeltavox; /* v2.0 release */ double B4SOIk1w1; double B4SOIk1w2; double B4SOIketas; double B4SOIdwbc; double B4SOIbeta0; double B4SOIbeta1; double B4SOIbeta2; double B4SOIvdsatii0; double B4SOItii; double B4SOIlii; double B4SOIsii0; double B4SOIsii1; double B4SOIsii2; double B4SOIsiid; double B4SOIfbjtii; /*4.1 Iii model*/ double B4SOIebjtii; double B4SOIcbjtii; double B4SOIvbci; double B4SOIabjtii; double B4SOImbjtii; double B4SOIesatii; double B4SOIntun; /* v4.0 */ double B4SOIntund; /* v4.0 */ double B4SOInrecf0; /* v4.0 */ double B4SOInrecf0d; /* v4.0 */ double B4SOInrecr0; /* v4.0 */ double B4SOInrecr0d; /* v4.0 */ double B4SOIisbjt; double B4SOIidbjt; /* v4.0 */ double B4SOIisdif; double B4SOIiddif; /* v4.0 */ double B4SOIisrec; double B4SOIidrec; /* v4.0 */ double B4SOIln; double B4SOIvrec0; /* v4.0 */ double B4SOIvrec0d; /* v4.0 */ double B4SOIvtun0; /* v4.0 */ double B4SOIvtun0d; /* v4.0 */ double B4SOInbjt; double B4SOIlbjt0; double B4SOIldif0; double B4SOIvabjt; double B4SOIaely; double B4SOIahli; /* v4.0 */ double B4SOIahlid; /* v4.0 */ double B4SOIrbody; double B4SOIrbsh; double B4SOItt; double B4SOIndif; double B4SOIvsdfb; double B4SOIvsdth; double B4SOIcsdmin; double B4SOIasd; double B4SOIntrecf; double B4SOIntrecr; double B4SOIdlcb; double B4SOIfbody; double B4SOItcjswg; double B4SOItpbswg; double B4SOItcjswgd; double B4SOItpbswgd; double B4SOIacde; double B4SOImoin; double B4SOInoff; /* v3.2 */ double B4SOIdelvt; double B4SOIdlbg; /* CV model */ double B4SOIcgsl; double B4SOIcgdl; double B4SOIckappa; double B4SOIcf; double B4SOIclc; double B4SOIcle; double B4SOIdwc; double B4SOIdlc; double B4SOItnom; double B4SOIcgso; double B4SOIcgdo; double B4SOIcgeo; double B4SOIxpart; /* double B4SOIcFringOut; double B4SOIcFringMax; */ /* v4.2 never used in the code */ double B4SOIsheetResistance; double B4SOIbodyJctGateSideSGradingCoeff; /* v4.0 */ double B4SOIbodyJctGateSideDGradingCoeff; /* v4.0 */ double B4SOIGatesidewallJctSPotential; /* v4.0 */ double B4SOIGatesidewallJctDPotential; /* v4.0 */ double B4SOIunitLengthGateSidewallJctCapS; /* v4.0 */ double B4SOIunitLengthGateSidewallJctCapD; /* v4.0 */ double B4SOIcsdesw; double B4SOILint; double B4SOILl; double B4SOILlc; /* v2.2.3 */ double B4SOILln; double B4SOILw; double B4SOILwc; /* v2.2.3 */ double B4SOILwn; double B4SOILwl; double B4SOILwlc; /* v2.2.3 */ double B4SOILmin; double B4SOILmax; double B4SOIWint; double B4SOIWl; double B4SOIWlc; /* v2.2.3 */ double B4SOIWln; double B4SOIWw; double B4SOIWwc; /* v2.2.3 */ double B4SOIWwn; double B4SOIWwl; double B4SOIWwlc; /* v2.2.3 */ double B4SOIWmin; double B4SOIWmax; /* Added for binning - START1 */ /* Length Dependence */ /* v3.1 */ double B4SOIlxj; double B4SOIlalphaGB1; double B4SOIlbetaGB1; double B4SOIlalphaGB2; double B4SOIlbetaGB2; double B4SOIlaigbcp2; /* 4.1 */ double B4SOIlbigbcp2; /* 4.1 */ double B4SOIlcigbcp2; /* 4.1 */ double B4SOIlndif; double B4SOIlntrecf; double B4SOIlntrecr; double B4SOIlxbjt; double B4SOIlxdif; double B4SOIlxrec; double B4SOIlxtun; double B4SOIlxdifd; double B4SOIlxrecd; double B4SOIlxtund; double B4SOIlcgsl; double B4SOIlcgdl; double B4SOIlckappa; double B4SOIlua1; double B4SOIlub1; double B4SOIluc1; double B4SOIlute; double B4SOIlkt1; double B4SOIlkt1l; double B4SOIlkt2; double B4SOIlat; double B4SOIlprt; /* v3.0 */ double B4SOIlaigc; double B4SOIlbigc; double B4SOIlcigc; double B4SOIlaigsd; double B4SOIlbigsd; double B4SOIlcigsd; double B4SOIlnigc; double B4SOIlpigcd; double B4SOIlpoxedge; double B4SOIlnpeak; double B4SOIlnsub; double B4SOIlngate; double B4SOIlvth0; double B4SOIlvfb; /* v4.1 */ double B4SOIlk1; double B4SOIlk1w1; double B4SOIlk1w2; double B4SOIlk2; double B4SOIlk3; double B4SOIlk3b; double B4SOIlkb1; double B4SOIlw0; double B4SOIllpe0; double B4SOIldvt0; double B4SOIldvt1; double B4SOIldvt2; double B4SOIldvt0w; double B4SOIldvt1w; double B4SOIldvt2w; double B4SOIlu0; double B4SOIlua; double B4SOIlub; double B4SOIluc; double B4SOIlvsat; double B4SOIla0; double B4SOIlags; double B4SOIlb0; double B4SOIlb1; double B4SOIlketa; double B4SOIlketas; double B4SOIla1; double B4SOIla2; double B4SOIlrdsw; double B4SOIlrdw; /* v4.0 for rdsMod = 1 */ double B4SOIlrsw; /* v4.0 for rdsMod = 1 */ double B4SOIlprwb; double B4SOIlprwg; double B4SOIlwr; double B4SOIlnfactor; double B4SOIldwg; double B4SOIldwb; double B4SOIlvoff; double B4SOIleta0; double B4SOIletab; double B4SOIldsub; double B4SOIlcit; double B4SOIlcdsc; double B4SOIlcdscb; double B4SOIlcdscd; double B4SOIlpclm; double B4SOIlpdibl1; double B4SOIlpdibl2; double B4SOIlpdiblb; double B4SOIldrout; double B4SOIlpvag; double B4SOIldelta; double B4SOIlalpha0; double B4SOIlfbjtii; /*4.1 Iii model*/ double B4SOIlebjtii; double B4SOIlcbjtii; double B4SOIlvbci; double B4SOIlabjtii; double B4SOIlmbjtii; double B4SOIlbeta0; double B4SOIlbeta1; double B4SOIlbeta2; double B4SOIlvdsatii0; double B4SOIllii; double B4SOIlesatii; double B4SOIlsii0; double B4SOIlsii1; double B4SOIlsii2; double B4SOIlsiid; double B4SOIlagidl; double B4SOIlbgidl; double B4SOIlcgidl; double B4SOIlegidl; double B4SOIlrgidl; double B4SOIlkgidl; double B4SOIlfgidl; double B4SOIlagisl; double B4SOIlbgisl; double B4SOIlcgisl; double B4SOIlegisl; double B4SOIlrgisl; double B4SOIlkgisl; double B4SOIlfgisl; double B4SOIlntun; /* v4.0 */ double B4SOIlntund; /* v4.0 */ double B4SOIlndiode; /* v4.0 */ double B4SOIlndioded; /* v4.0 */ double B4SOIlnrecf0; /* v4.0 */ double B4SOIlnrecf0d; /* v4.0 */ double B4SOIlnrecr0; /* v4.0 */ double B4SOIlnrecr0d; /* v4.0 */ double B4SOIlisbjt; double B4SOIlidbjt; /* v4.0 */ double B4SOIlisdif; double B4SOIliddif; /* v4.0 */ double B4SOIlisrec; double B4SOIlidrec; /* v4.0 */ double B4SOIlistun; double B4SOIlidtun; /* v4.0 */ double B4SOIlvrec0; /* v4.0 */ double B4SOIlvrec0d; /* v4.0 */ double B4SOIlvtun0; /* v4.0 */ double B4SOIlvtun0d; /* v4.0 */ double B4SOIlnbjt; double B4SOIllbjt0; double B4SOIlvabjt; double B4SOIlaely; double B4SOIlahli; /* v4.0 */ double B4SOIlahlid; /* v4.0 */ /* v3.1 added for RF */ double B4SOIlxrcrg1; double B4SOIlxrcrg2; /* v3.1 added for RF end */ /* CV model */ double B4SOIlvsdfb; double B4SOIlvsdth; double B4SOIldelvt; double B4SOIlacde; double B4SOIlmoin; double B4SOIlnoff; /* v3.2 */ /* Width Dependence */ /* v3.1 */ double B4SOIwxj; double B4SOIwalphaGB1; double B4SOIwbetaGB1; double B4SOIwalphaGB2; double B4SOIwbetaGB2; double B4SOIwaigbcp2; /* 4.1 */ double B4SOIwbigbcp2; /* 4.1 */ double B4SOIwcigbcp2; /* 4.1 */ double B4SOIwndif; double B4SOIwntrecf; double B4SOIwntrecr; double B4SOIwxbjt; double B4SOIwxdif; double B4SOIwxrec; double B4SOIwxtun; double B4SOIwxdifd; double B4SOIwxrecd; double B4SOIwxtund; double B4SOIwcgsl; double B4SOIwcgdl; double B4SOIwckappa; double B4SOIwua1; double B4SOIwub1; double B4SOIwuc1; double B4SOIwute; double B4SOIwkt1; double B4SOIwkt1l; double B4SOIwkt2; double B4SOIwat; double B4SOIwprt; /* v3.0 */ double B4SOIwaigc; double B4SOIwbigc; double B4SOIwcigc; double B4SOIwaigsd; double B4SOIwbigsd; double B4SOIwcigsd; double B4SOIwnigc; double B4SOIwpigcd; double B4SOIwpoxedge; double B4SOIwnpeak; double B4SOIwnsub; double B4SOIwngate; double B4SOIwvth0; double B4SOIwvfb; /* v4.1 */ double B4SOIwk1; double B4SOIwk1w1; double B4SOIwk1w2; double B4SOIwk2; double B4SOIwk3; double B4SOIwk3b; double B4SOIwkb1; double B4SOIww0; double B4SOIwlpe0; double B4SOIwdvt0; double B4SOIwdvt1; double B4SOIwdvt2; double B4SOIwdvt0w; double B4SOIwdvt1w; double B4SOIwdvt2w; double B4SOIwu0; double B4SOIwua; double B4SOIwub; double B4SOIwuc; double B4SOIwvsat; double B4SOIwa0; double B4SOIwags; double B4SOIwb0; double B4SOIwb1; double B4SOIwketa; double B4SOIwketas; double B4SOIwa1; double B4SOIwa2; double B4SOIwrdsw; double B4SOIwrdw; /* v4.0 for rdsMod = 1 */ double B4SOIwrsw; /* v4.0 for rdsMod = 1 */ double B4SOIwprwb; double B4SOIwprwg; double B4SOIwwr; double B4SOIwnfactor; double B4SOIwdwg; double B4SOIwdwb; double B4SOIwvoff; double B4SOIweta0; double B4SOIwetab; double B4SOIwdsub; double B4SOIwcit; double B4SOIwcdsc; double B4SOIwcdscb; double B4SOIwcdscd; double B4SOIwpclm; double B4SOIwpdibl1; double B4SOIwpdibl2; double B4SOIwpdiblb; double B4SOIwdrout; double B4SOIwpvag; double B4SOIwdelta; double B4SOIwalpha0; double B4SOIwfbjtii; /*4.1 Iii model*/ double B4SOIwebjtii; double B4SOIwcbjtii; double B4SOIwvbci; double B4SOIwabjtii; double B4SOIwmbjtii; double B4SOIwbeta0; double B4SOIwbeta1; double B4SOIwbeta2; double B4SOIwvdsatii0; double B4SOIwlii; double B4SOIwesatii; double B4SOIwsii0; double B4SOIwsii1; double B4SOIwsii2; double B4SOIwsiid; double B4SOIwagidl; double B4SOIwbgidl; double B4SOIwcgidl; double B4SOIwegidl; double B4SOIwrgidl; double B4SOIwkgidl; double B4SOIwfgidl; double B4SOIwagisl; double B4SOIwbgisl; double B4SOIwcgisl; double B4SOIwegisl; double B4SOIwrgisl; double B4SOIwkgisl; double B4SOIwfgisl; double B4SOIwntun; /* v4.0 */ double B4SOIwntund; /* v4.0 */ double B4SOIwndiode; /* v4.0 */ double B4SOIwndioded; /* v4.0 */ double B4SOIwnrecf0; /* v4.0 */ double B4SOIwnrecf0d; /* v4.0 */ double B4SOIwnrecr0; /* v4.0 */ double B4SOIwnrecr0d; /* v4.0 */ double B4SOIwisbjt; double B4SOIwidbjt; /* v4.0 */ double B4SOIwisdif; double B4SOIwiddif; /* v4.0 */ double B4SOIwisrec; double B4SOIwidrec; /* v4.0 */ double B4SOIwistun; double B4SOIwidtun; /* v4.0 */ double B4SOIwvrec0; /* v4.0 */ double B4SOIwvrec0d; /* v4.0 */ double B4SOIwvtun0; /* v4.0 */ double B4SOIwvtun0d; /* v4.0 */ double B4SOIwnbjt; double B4SOIwlbjt0; double B4SOIwvabjt; double B4SOIwaely; double B4SOIwahli; /* v4.0 */ double B4SOIwahlid; /* v4.0 */ /* v3.1 added for RF */ double B4SOIwxrcrg1; double B4SOIwxrcrg2; /* v3.1 added for RF end */ /* CV model */ double B4SOIwvsdfb; double B4SOIwvsdth; double B4SOIwdelvt; double B4SOIwacde; double B4SOIwmoin; double B4SOIwnoff; /* v3.2 */ /* Cross-term Dependence */ /* v3.1 */ double B4SOIpxj; double B4SOIpalphaGB1; double B4SOIpbetaGB1; double B4SOIpalphaGB2; double B4SOIpbetaGB2; double B4SOIpaigbcp2; /* 4.1 */ double B4SOIpbigbcp2; /* 4.1 */ double B4SOIpcigbcp2; /* 4.1 */ double B4SOIpndif; double B4SOIpntrecf; double B4SOIpntrecr; double B4SOIpxbjt; double B4SOIpxdif; double B4SOIpxrec; double B4SOIpxtun; double B4SOIpxdifd; double B4SOIpxrecd; double B4SOIpxtund; double B4SOIpcgsl; double B4SOIpcgdl; double B4SOIpckappa; double B4SOIpua1; double B4SOIpub1; double B4SOIpuc1; double B4SOIpute; double B4SOIpkt1; double B4SOIpkt1l; double B4SOIpkt2; double B4SOIpat; double B4SOIpprt; /* v3.0 */ double B4SOIpaigc; double B4SOIpbigc; double B4SOIpcigc; double B4SOIpaigsd; double B4SOIpbigsd; double B4SOIpcigsd; double B4SOIpnigc; double B4SOIppigcd; double B4SOIppoxedge; double B4SOIpnpeak; double B4SOIpnsub; double B4SOIpngate; double B4SOIpvth0; double B4SOIpvfb; /* v4.1 */ double B4SOIpk1; double B4SOIpk1w1; double B4SOIpk1w2; double B4SOIpk2; double B4SOIpk3; double B4SOIpk3b; double B4SOIpkb1; double B4SOIpw0; double B4SOIplpe0; double B4SOIpdvt0; double B4SOIpdvt1; double B4SOIpdvt2; double B4SOIpdvt0w; double B4SOIpdvt1w; double B4SOIpdvt2w; double B4SOIpu0; double B4SOIpua; double B4SOIpub; double B4SOIpuc; double B4SOIpvsat; double B4SOIpa0; double B4SOIpags; double B4SOIpb0; double B4SOIpb1; double B4SOIpketa; double B4SOIpketas; double B4SOIpa1; double B4SOIpa2; double B4SOIprdsw; double B4SOIprdw; /* v4.0 for rdsMod = 1 */ double B4SOIprsw; /* v4.0 for rdsMod = 1 */ double B4SOIpprwb; double B4SOIpprwg; double B4SOIpwr; double B4SOIpnfactor; double B4SOIpdwg; double B4SOIpdwb; double B4SOIpvoff; double B4SOIpeta0; double B4SOIpetab; double B4SOIpdsub; double B4SOIpcit; double B4SOIpcdsc; double B4SOIpcdscb; double B4SOIpcdscd; double B4SOIppclm; double B4SOIppdibl1; double B4SOIppdibl2; double B4SOIppdiblb; double B4SOIpdrout; double B4SOIppvag; double B4SOIpdelta; double B4SOIpalpha0; double B4SOIpfbjtii; /*4.1 Iii model*/ double B4SOIpebjtii; double B4SOIpcbjtii; double B4SOIpvbci; double B4SOIpabjtii; double B4SOIpmbjtii; double B4SOIpbeta0; double B4SOIpbeta1; double B4SOIpbeta2; double B4SOIpvdsatii0; double B4SOIplii; double B4SOIpesatii; double B4SOIpsii0; double B4SOIpsii1; double B4SOIpsii2; double B4SOIpsiid; double B4SOIpagidl; double B4SOIpbgidl; double B4SOIpcgidl; double B4SOIpegidl; double B4SOIprgidl; double B4SOIpkgidl; double B4SOIpfgidl; double B4SOIpagisl; double B4SOIpbgisl; double B4SOIpcgisl; double B4SOIpegisl; double B4SOIprgisl; double B4SOIpkgisl; double B4SOIpfgisl; double B4SOIpntun; /* v4.0 */ double B4SOIpntund; /* v4.0 */ double B4SOIpndiode; /* v4.0 */ double B4SOIpndioded; /* v4.0 */ double B4SOIpnrecf0; /* v4.0 */ double B4SOIpnrecf0d; /* v4.0 */ double B4SOIpnrecr0; /* v4.0 */ double B4SOIpnrecr0d; /* v4.0 */ double B4SOIpisbjt; double B4SOIpidbjt; /* v4.0 */ double B4SOIpisdif; double B4SOIpiddif; /* v4.0 */ double B4SOIpisrec; double B4SOIpidrec; /* v4.0 */ double B4SOIpistun; double B4SOIpidtun; /* v4.0 */ double B4SOIpvrec0; /* v4.0 */ double B4SOIpvrec0d; /* v4.0 */ double B4SOIpvtun0; /* v4.0 */ double B4SOIpvtun0d; /* v4.0 */ double B4SOIpnbjt; double B4SOIplbjt0; double B4SOIpvabjt; double B4SOIpaely; double B4SOIpahli; /* v4.0 */ double B4SOIpahlid; /* v4.0 */ /* v3.1 added for RF */ double B4SOIpxrcrg1; double B4SOIpxrcrg2; /* v3.1 added for RF end */ /* CV model */ double B4SOIpvsdfb; double B4SOIpvsdth; double B4SOIpdelvt; double B4SOIpacde; double B4SOIpmoin; double B4SOIpnoff; /* v3.2 */ /* Added for binning - END1 */ /* Pre-calculated constants */ double B4SOIcbox; double B4SOIcsi; /* double B4SOIcsieff; double B4SOIcoxt; double B4SOInfb; double B4SOIadice */ /* v4.2 never used in the code */ double B4SOIeg0; double B4SOIeg; /* Jun 09*/ /* v4.0 added for stress effect */ double B4SOIsaref; double B4SOIsbref; double B4SOIwlod; double B4SOIku0; double B4SOIkvsat; double B4SOIkvth0; double B4SOItku0; double B4SOIllodku0; double B4SOIwlodku0; double B4SOIllodvth; double B4SOIwlodvth; double B4SOIlku0; double B4SOIwku0; double B4SOIpku0; double B4SOIlkvth0; double B4SOIwkvth0; double B4SOIpkvth0; double B4SOIstk2; double B4SOIlodk2; double B4SOIsteta0; double B4SOIlodeta0; /* v4.0 added for stress effect end */ /* MCJ: move to size-dependent param. */ double B4SOIvtm; double B4SOIcox; /* double B4SOIcof1; double B4SOIcof2; double B4SOIcof3; double B4SOIcof4 */ /* v4.2 never used in the code */ double B4SOIvcrit; double B4SOIfactor1; double B4SOIoxideTrapDensityA; double B4SOIoxideTrapDensityB; double B4SOIoxideTrapDensityC; double B4SOIem; double B4SOIef; double B4SOIaf; double B4SOIkf; double B4SOInoif; double B4SOIbf; /* v4.0 for noise */ double B4SOIw0flk; /* v4.0 for noise */ double B4SOIlpeb; /* v4.0 for Vth */ double B4SOIllpeb; /* v4.0 for Vth */ double B4SOIwlpeb; /* v4.0 for Vth */ double B4SOIplpeb; /* v4.0 for Vth */ double B4SOIdvtp0; /* v4.0 for Vth */ double B4SOIldvtp0; /* v4.0 for Vth */ double B4SOIwdvtp0; /* v4.0 for Vth */ double B4SOIpdvtp0; /* v4.0 for Vth */ double B4SOIdvtp1; /* v4.0 for Vth */ double B4SOIldvtp1; /* v4.0 for Vth */ double B4SOIwdvtp1; /* v4.0 for Vth */ double B4SOIpdvtp1; /* v4.0 for Vth */ double B4SOIdvtp2; /* v4.1 for Vth */ double B4SOIldvtp2; /* v4.1 for Vth */ double B4SOIwdvtp2; /* v4.1 for Vth */ double B4SOIpdvtp2; /* v4.1 for Vth */ double B4SOIdvtp3; /* v4.1 for Vth */ double B4SOIldvtp3; /* v4.1 for Vth */ double B4SOIwdvtp3; /* v4.1 for Vth */ double B4SOIpdvtp3; /* v4.1 for Vth */ double B4SOIdvtp4; /* v4.1 for Vth */ double B4SOIldvtp4; /* v4.1 for Vth */ double B4SOIwdvtp4; /* v4.1 for Vth */ double B4SOIpdvtp4; /* v4.1 for Vth */ double B4SOIminv; /* v4.0 for Vgsteff */ double B4SOIlminv; /* v4.0 for Vgsteff */ double B4SOIwminv; /* v4.0 for Vgsteff */ double B4SOIpminv; /* v4.0 for Vgsteff */ double B4SOIfprout; /* v4.0 for DITS in Id */ double B4SOIlfprout; /* v4.0 for DITS in Id */ double B4SOIwfprout; /* v4.0 for DITS in Id */ double B4SOIpfprout; /* v4.0 for DITS in Id */ double B4SOIpdits; /* v4.0 for DITS in Id */ double B4SOIlpdits; /* v4.0 for DITS in Id */ double B4SOIwpdits; /* v4.0 for DITS in Id */ double B4SOIppdits; /* v4.0 for DITS in Id */ double B4SOIpditsd; /* v4.0 for DITS in Id */ double B4SOIlpditsd; /* v4.0 for DITS in Id */ double B4SOIwpditsd; /* v4.0 for DITS in Id */ double B4SOIppditsd; /* v4.0 for DITS in Id */ double B4SOIpditsl; /* v4.0 for DITS in Id */ /* 4.0 backward compatibility */ double B4SOInlx; double B4SOIlnlx; double B4SOIwnlx; double B4SOIpnlx; unsigned B4SOInlxGiven :1; unsigned B4SOIlnlxGiven :1; unsigned B4SOIwnlxGiven :1; unsigned B4SOIpnlxGiven :1; double B4SOIngidl; double B4SOIlngidl; double B4SOIwngidl; double B4SOIpngidl; unsigned B4SOIngidlGiven :1; unsigned B4SOIlngidlGiven :1; unsigned B4SOIwngidlGiven :1; unsigned B4SOIpngidlGiven :1; double B4SOIvgsMax; double B4SOIvgdMax; double B4SOIvgbMax; double B4SOIvdsMax; double B4SOIvbsMax; double B4SOIvbdMax; double B4SOIvgsrMax; double B4SOIvgdrMax; double B4SOIvgbrMax; double B4SOIvbsrMax; double B4SOIvbdrMax; unsigned B4SOIvgsMaxGiven :1; unsigned B4SOIvgdMaxGiven :1; unsigned B4SOIvgbMaxGiven :1; unsigned B4SOIvdsMaxGiven :1; unsigned B4SOIvbsMaxGiven :1; unsigned B4SOIvbdMaxGiven :1; unsigned B4SOIvgsrMaxGiven :1; unsigned B4SOIvgdrMaxGiven :1; unsigned B4SOIvgbrMaxGiven :1; unsigned B4SOIvbsrMaxGiven :1; unsigned B4SOIvbdrMaxGiven :1; struct b4soiSizeDependParam *pSizeDependParamKnot; #ifdef USE_OMP int B4SOIInstCount; struct sB4SOIinstance **B4SOIInstanceArray; #endif /* Flags */ unsigned B4SOIepsrgateGiven:1; unsigned B4SOIadosGiven :1; unsigned B4SOIbdosGiven :1; unsigned B4SOIleffeotGiven :1; unsigned B4SOIweffeotGiven :1; unsigned B4SOIvddeotGiven :1; unsigned B4SOItempeotGiven :1; unsigned B4SOItoxpGiven :1; unsigned B4SOImtrlModGiven :1; /*4.1*/ unsigned B4SOIvgstcvModGiven :1; unsigned B4SOIgidlModGiven :1; unsigned B4SOIiiiModGiven :1; unsigned B4SOIrdsModGiven :1; /* v4.0 */ unsigned B4SOIrbodyModGiven :1; /* v4.0 */ unsigned B4SOIrgateModGiven :1; /* v3.1 */ /* v3.0 */ unsigned B4SOIsoiModGiven: 1; unsigned B4SOIvbs0pdGiven: 1; /* v3.2 */ unsigned B4SOIvbs0fdGiven: 1; /* v3.2 */ unsigned B4SOIvbsaGiven : 1; unsigned B4SOInofffdGiven: 1; unsigned B4SOIvofffdGiven: 1; unsigned B4SOIk1bGiven: 1; unsigned B4SOIk2bGiven: 1; unsigned B4SOIdk2bGiven: 1; unsigned B4SOIdvbd0Given: 1; unsigned B4SOIdvbd1Given: 1; unsigned B4SOImoinFDGiven: 1; unsigned B4SOItboxGiven:1; unsigned B4SOItsiGiven :1; unsigned B4SOIetsiGiven :1; unsigned B4SOIxjGiven :1; unsigned B4SOIkb1Given :1; unsigned B4SOIrth0Given :1; unsigned B4SOIcth0Given :1; unsigned B4SOIcfrcoeffGiven :1; /* v4.4 */ unsigned B4SOIegidlGiven :1; unsigned B4SOIagidlGiven :1; unsigned B4SOIbgidlGiven :1; unsigned B4SOIcgidlGiven :1; unsigned B4SOIrgidlGiven :1; unsigned B4SOIkgidlGiven :1; unsigned B4SOIfgidlGiven :1; unsigned B4SOIegislGiven :1; unsigned B4SOIagislGiven :1; unsigned B4SOIbgislGiven :1; unsigned B4SOIcgislGiven :1; unsigned B4SOIrgislGiven :1; unsigned B4SOIkgislGiven :1; unsigned B4SOIfgislGiven :1; unsigned B4SOIndiodeGiven :1; /* v4.0 */ unsigned B4SOIndiodedGiven :1; /* v4.0 */ unsigned B4SOIxbjtGiven :1; unsigned B4SOIxdifGiven :1; unsigned B4SOIxrecGiven :1; unsigned B4SOIxtunGiven :1; unsigned B4SOIxdifdGiven :1; unsigned B4SOIxrecdGiven :1; unsigned B4SOIxtundGiven :1; unsigned B4SOIttGiven :1; unsigned B4SOIvsdfbGiven :1; unsigned B4SOIvsdthGiven :1; unsigned B4SOIasdGiven :1; unsigned B4SOIcsdminGiven :1; unsigned B4SOImobModGiven :1; unsigned B4SOIbinUnitGiven :1; unsigned B4SOIcapModGiven :1; unsigned B4SOIparamChkGiven :1; /* unsigned B4SOInoiModGiven :1; v3.2 */ unsigned B4SOIshModGiven :1; unsigned B4SOItypeGiven :1; unsigned B4SOItoxGiven :1; unsigned B4SOItoxmGiven :1; /* v3.2 */ unsigned B4SOIdtoxcvGiven :1; /* v2.2.3 */ unsigned B4SOIversionGiven :1; unsigned B4SOIcdscGiven :1; unsigned B4SOIcdscbGiven :1; unsigned B4SOIcdscdGiven :1; unsigned B4SOIcitGiven :1; unsigned B4SOInfactorGiven :1; unsigned B4SOIvsatGiven :1; unsigned B4SOIatGiven :1; unsigned B4SOIa0Given :1; unsigned B4SOIagsGiven :1; unsigned B4SOIa1Given :1; unsigned B4SOIa2Given :1; unsigned B4SOIketaGiven :1; unsigned B4SOInsubGiven :1; unsigned B4SOInpeakGiven :1; unsigned B4SOIngateGiven :1; unsigned B4SOInsdGiven :1; unsigned B4SOIgamma1Given :1; unsigned B4SOIgamma2Given :1; unsigned B4SOIvbxGiven :1; unsigned B4SOIvbmGiven :1; unsigned B4SOIxtGiven :1; unsigned B4SOIk1Given :1; unsigned B4SOIkt1Given :1; unsigned B4SOIkt1lGiven :1; unsigned B4SOIkt2Given :1; unsigned B4SOIk2Given :1; unsigned B4SOIk3Given :1; unsigned B4SOIk3bGiven :1; unsigned B4SOIw0Given :1; unsigned B4SOIlpe0Given :1; unsigned B4SOIdvt0Given :1; unsigned B4SOIdvt1Given :1; unsigned B4SOIdvt2Given :1; unsigned B4SOIdvt0wGiven :1; unsigned B4SOIdvt1wGiven :1; unsigned B4SOIdvt2wGiven :1; unsigned B4SOIdroutGiven :1; unsigned B4SOIdsubGiven :1; unsigned B4SOIvth0Given :1; unsigned B4SOIuaGiven :1; unsigned B4SOIua1Given :1; unsigned B4SOIubGiven :1; unsigned B4SOIub1Given :1; unsigned B4SOIucGiven :1; unsigned B4SOIuc1Given :1; unsigned B4SOIu0Given :1; unsigned B4SOIuteGiven :1; /*4.1 mobmod=4*/ unsigned B4SOIudGiven :1; unsigned B4SOIludGiven :1; unsigned B4SOIwudGiven :1; unsigned B4SOIpudGiven :1; unsigned B4SOIud1Given :1; unsigned B4SOIlud1Given :1; unsigned B4SOIwud1Given :1; unsigned B4SOIpud1Given :1; unsigned B4SOIeuGiven :1; unsigned B4SOIleuGiven :1; unsigned B4SOIweuGiven :1; unsigned B4SOIpeuGiven :1; unsigned B4SOIucsGiven :1; unsigned B4SOIlucsGiven :1; unsigned B4SOIwucsGiven :1; unsigned B4SOIpucsGiven :1; unsigned B4SOIucsteGiven :1; unsigned B4SOIlucsteGiven:1; unsigned B4SOIwucsteGiven:1; unsigned B4SOIpucsteGiven:1; unsigned B4SOIvoffGiven :1; unsigned B4SOIrdswGiven :1; unsigned B4SOIrdwGiven :1; /* v4.0 for rdsMod = 1 */ unsigned B4SOIrswGiven :1; /* v4.0 for rdsMod = 1 */ unsigned B4SOIrdwminGiven :1; /* v4.0 for rdsMod = 1 */ unsigned B4SOIrswminGiven :1; /* v4.0 for rdsMod = 1 */ unsigned B4SOIprwgGiven :1; unsigned B4SOIprwbGiven :1; unsigned B4SOIprtGiven :1; unsigned B4SOIeta0Given :1; unsigned B4SOIetabGiven :1; unsigned B4SOIpclmGiven :1; unsigned B4SOIpdibl1Given :1; unsigned B4SOIpdibl2Given :1; unsigned B4SOIpdiblbGiven :1; unsigned B4SOIpvagGiven :1; unsigned B4SOIdeltaGiven :1; unsigned B4SOIwrGiven :1; unsigned B4SOIdwgGiven :1; unsigned B4SOIdwbGiven :1; unsigned B4SOIb0Given :1; unsigned B4SOIb1Given :1; unsigned B4SOIalpha0Given :1; /*4.1*/ unsigned B4SOIepsroxGiven :1; unsigned B4SOIeotGiven :1; unsigned B4SOIepsrsubGiven :1; unsigned B4SOIni0subGiven :1; unsigned B4SOIbg0subGiven :1; unsigned B4SOItbgasubGiven:1; unsigned B4SOItbgbsubGiven:1; unsigned B4SOIphigGiven :1; unsigned B4SOIeasubGiven :1; /* v3.1 added for RF */ unsigned B4SOIxrcrg1Given :1; unsigned B4SOIxrcrg2Given :1; unsigned B4SOIrshgGiven :1; unsigned B4SOIngconGiven :1; unsigned B4SOIxgwGiven :1; unsigned B4SOIxglGiven :1; /* v3.1 added for RF end */ /* v3.2 */ unsigned B4SOIfnoiModGiven :1; unsigned B4SOItnoiModGiven :1; unsigned B4SOItnoiaGiven :1; unsigned B4SOItnoibGiven :1; unsigned B4SOIrnoiaGiven :1; unsigned B4SOIrnoibGiven :1; unsigned B4SOIntnoiGiven :1; /* v3.2 end */ /* v4.0 */ unsigned B4SOIvfbGiven :1; unsigned B4SOIgbminGiven :1; unsigned B4SOIrbdbGiven :1; unsigned B4SOIrbsbGiven :1; /* v4.0 end */ /* v4.1 */ unsigned B4SOIfdModGiven :1; unsigned B4SOIvsceGiven :1; unsigned B4SOIcdsbsGiven :1; unsigned B4SOIminvcvGiven :1; unsigned B4SOIlminvcvGiven :1; unsigned B4SOIwminvcvGiven :1; unsigned B4SOIpminvcvGiven :1; unsigned B4SOIvoffcvGiven :1; unsigned B4SOIlvoffcvGiven :1; unsigned B4SOIwvoffcvGiven :1; unsigned B4SOIpvoffcvGiven :1; /* v2.2 release */ unsigned B4SOIwth0Given :1; unsigned B4SOIrhaloGiven :1; unsigned B4SOIntoxGiven :1; unsigned B4SOItoxrefGiven :1; unsigned B4SOIebgGiven :1; unsigned B4SOIvevbGiven :1; unsigned B4SOIalphaGB1Given :1; unsigned B4SOIbetaGB1Given :1; unsigned B4SOIvgb1Given :1; unsigned B4SOIvecbGiven :1; unsigned B4SOIalphaGB2Given :1; unsigned B4SOIbetaGB2Given :1; unsigned B4SOIvgb2Given :1; unsigned B4SOIaigbcp2Given :1; /* 4.1 */ unsigned B4SOIbigbcp2Given :1; /* 4.1 */ unsigned B4SOIcigbcp2Given :1; /* 4.1 */ unsigned B4SOItoxqmGiven :1; unsigned B4SOIigbModGiven :1; /* v3.0 */ unsigned B4SOIvoxhGiven :1; unsigned B4SOIdeltavoxGiven :1; unsigned B4SOIigcModGiven :1; /* v3.0 */ /* v3.0 */ unsigned B4SOIaigcGiven :1; unsigned B4SOIbigcGiven :1; unsigned B4SOIcigcGiven :1; unsigned B4SOIaigsdGiven :1; unsigned B4SOIbigsdGiven :1; unsigned B4SOIcigsdGiven :1; unsigned B4SOInigcGiven :1; unsigned B4SOIpigcdGiven :1; unsigned B4SOIpoxedgeGiven :1; unsigned B4SOIdlcigGiven :1; /* v2.0 release */ unsigned B4SOIk1w1Given :1; unsigned B4SOIk1w2Given :1; unsigned B4SOIketasGiven :1; unsigned B4SOIdwbcGiven :1; unsigned B4SOIbeta0Given :1; unsigned B4SOIbeta1Given :1; unsigned B4SOIbeta2Given :1; unsigned B4SOIvdsatii0Given :1; unsigned B4SOItiiGiven :1; unsigned B4SOItvbciGiven :1; unsigned B4SOIliiGiven :1; unsigned B4SOIsii0Given :1; unsigned B4SOIsii1Given :1; unsigned B4SOIsii2Given :1; unsigned B4SOIsiidGiven :1; unsigned B4SOIfbjtiiGiven :1; /*4.1 Iii model*/ unsigned B4SOIebjtiiGiven :1; unsigned B4SOIcbjtiiGiven :1; unsigned B4SOIvbciGiven :1; unsigned B4SOIabjtiiGiven :1; unsigned B4SOImbjtiiGiven :1; unsigned B4SOIesatiiGiven :1; unsigned B4SOIntunGiven :1; /* v4.0 */ unsigned B4SOIntundGiven :1; /* v4.0 */ unsigned B4SOInrecf0Given :1; /* v4.0 */ unsigned B4SOInrecf0dGiven :1; /* v4.0 */ unsigned B4SOInrecr0Given :1; /* v4.0 */ unsigned B4SOInrecr0dGiven :1; /* v4.0 */ unsigned B4SOIisbjtGiven :1; unsigned B4SOIidbjtGiven :1; /* v4.0 */ unsigned B4SOIisdifGiven :1; unsigned B4SOIiddifGiven :1; /* v4.0 */ unsigned B4SOIisrecGiven :1; unsigned B4SOIidrecGiven :1; /* v4.0 */ unsigned B4SOIistunGiven :1; unsigned B4SOIidtunGiven :1; /* v4.0 */ unsigned B4SOIlnGiven :1; unsigned B4SOIvrec0Given :1; /* v4.0 */ unsigned B4SOIvrec0dGiven :1; /* v4.0 */ unsigned B4SOIvtun0Given :1; /* v4.0 */ unsigned B4SOIvtun0dGiven :1; /* v4.0 */ unsigned B4SOInbjtGiven :1; unsigned B4SOIlbjt0Given :1; unsigned B4SOIldif0Given :1; unsigned B4SOIvabjtGiven :1; unsigned B4SOIaelyGiven :1; unsigned B4SOIahliGiven :1; /* v4.0 */ unsigned B4SOIahlidGiven :1; /* v4.0 */ unsigned B4SOIrbodyGiven :1; unsigned B4SOIrbshGiven :1; unsigned B4SOIndifGiven :1; unsigned B4SOIntrecfGiven :1; unsigned B4SOIntrecrGiven :1; unsigned B4SOIdlcbGiven :1; unsigned B4SOIfbodyGiven :1; unsigned B4SOItcjswgGiven :1; unsigned B4SOItpbswgGiven :1; unsigned B4SOItcjswgdGiven :1; unsigned B4SOItpbswgdGiven :1; unsigned B4SOIacdeGiven :1; unsigned B4SOImoinGiven :1; unsigned B4SOInoffGiven: 1; /* v3.2 */ unsigned B4SOIdelvtGiven :1; unsigned B4SOIdlbgGiven :1; /* CV model */ unsigned B4SOIcgslGiven :1; unsigned B4SOIcgdlGiven :1; unsigned B4SOIckappaGiven :1; unsigned B4SOIcfGiven :1; unsigned B4SOIclcGiven :1; unsigned B4SOIcleGiven :1; unsigned B4SOIdwcGiven :1; unsigned B4SOIdlcGiven :1; /* Added for binning - START2 */ /* Length Dependence */ /* v3.1 */ unsigned B4SOIlxjGiven :1; unsigned B4SOIlalphaGB1Given :1; unsigned B4SOIlbetaGB1Given :1; unsigned B4SOIlalphaGB2Given :1; unsigned B4SOIlbetaGB2Given :1; unsigned B4SOIlaigbcp2Given :1; /* 4.1 */ unsigned B4SOIlbigbcp2Given :1; /* 4.1 */ unsigned B4SOIlcigbcp2Given :1; /* 4.1 */ unsigned B4SOIlndifGiven :1; unsigned B4SOIlntrecfGiven :1; unsigned B4SOIlntrecrGiven :1; unsigned B4SOIlxbjtGiven :1; unsigned B4SOIlxdifGiven :1; unsigned B4SOIlxrecGiven :1; unsigned B4SOIlxtunGiven :1; unsigned B4SOIlxdifdGiven :1; unsigned B4SOIlxrecdGiven :1; unsigned B4SOIlxtundGiven :1; unsigned B4SOIlcgslGiven :1; unsigned B4SOIlcgdlGiven :1; unsigned B4SOIlckappaGiven :1; unsigned B4SOIlua1Given :1; unsigned B4SOIlub1Given :1; unsigned B4SOIluc1Given :1; unsigned B4SOIluteGiven :1; unsigned B4SOIlkt1Given :1; unsigned B4SOIlkt1lGiven :1; unsigned B4SOIlkt2Given :1; unsigned B4SOIlatGiven :1; unsigned B4SOIlprtGiven :1; /* v3.0 */ unsigned B4SOIlaigcGiven :1; unsigned B4SOIlbigcGiven :1; unsigned B4SOIlcigcGiven :1; unsigned B4SOIlaigsdGiven :1; unsigned B4SOIlbigsdGiven :1; unsigned B4SOIlcigsdGiven :1; unsigned B4SOIlnigcGiven :1; unsigned B4SOIlpigcdGiven :1; unsigned B4SOIlpoxedgeGiven :1; unsigned B4SOIlnpeakGiven :1; unsigned B4SOIlnsubGiven :1; unsigned B4SOIlngateGiven :1; unsigned B4SOIlnsdGiven :1; unsigned B4SOIlvth0Given :1; unsigned B4SOIlvfbGiven :1; /* v4.1 */ unsigned B4SOIlk1Given :1; unsigned B4SOIlk1w1Given :1; unsigned B4SOIlk1w2Given :1; unsigned B4SOIlk2Given :1; unsigned B4SOIlk3Given :1; unsigned B4SOIlk3bGiven :1; unsigned B4SOIlkb1Given :1; unsigned B4SOIlw0Given :1; unsigned B4SOIllpe0Given :1; unsigned B4SOIldvt0Given :1; unsigned B4SOIldvt1Given :1; unsigned B4SOIldvt2Given :1; unsigned B4SOIldvt0wGiven :1; unsigned B4SOIldvt1wGiven :1; unsigned B4SOIldvt2wGiven :1; unsigned B4SOIlu0Given :1; unsigned B4SOIluaGiven :1; unsigned B4SOIlubGiven :1; unsigned B4SOIlucGiven :1; unsigned B4SOIlvsatGiven :1; unsigned B4SOIla0Given :1; unsigned B4SOIlagsGiven :1; unsigned B4SOIlb0Given :1; unsigned B4SOIlb1Given :1; unsigned B4SOIlketaGiven :1; unsigned B4SOIlketasGiven :1; unsigned B4SOIla1Given :1; unsigned B4SOIla2Given :1; unsigned B4SOIlrdswGiven :1; unsigned B4SOIlrdwGiven :1; /* v4.0 for rdsMod = 1 */ unsigned B4SOIlrswGiven :1; /* v4.0 for rdsMod = 1 */ unsigned B4SOIlprwbGiven :1; unsigned B4SOIlprwgGiven :1; unsigned B4SOIlwrGiven :1; unsigned B4SOIlnfactorGiven :1; unsigned B4SOIldwgGiven :1; unsigned B4SOIldwbGiven :1; unsigned B4SOIlvoffGiven :1; unsigned B4SOIleta0Given :1; unsigned B4SOIletabGiven :1; unsigned B4SOIldsubGiven :1; unsigned B4SOIlcitGiven :1; unsigned B4SOIlcdscGiven :1; unsigned B4SOIlcdscbGiven :1; unsigned B4SOIlcdscdGiven :1; unsigned B4SOIlpclmGiven :1; unsigned B4SOIlpdibl1Given :1; unsigned B4SOIlpdibl2Given :1; unsigned B4SOIlpdiblbGiven :1; unsigned B4SOIldroutGiven :1; unsigned B4SOIlpvagGiven :1; unsigned B4SOIldeltaGiven :1; unsigned B4SOIlalpha0Given :1; unsigned B4SOIlfbjtiiGiven :1; /*4.1 Iii model*/ unsigned B4SOIlebjtiiGiven :1; unsigned B4SOIlcbjtiiGiven :1; unsigned B4SOIlvbciGiven :1; unsigned B4SOIlabjtiiGiven :1; unsigned B4SOIlmbjtiiGiven :1; unsigned B4SOIlbeta0Given :1; unsigned B4SOIlbeta1Given :1; unsigned B4SOIlbeta2Given :1; unsigned B4SOIlvdsatii0Given :1; unsigned B4SOIlliiGiven :1; unsigned B4SOIlesatiiGiven :1; unsigned B4SOIlsii0Given :1; unsigned B4SOIlsii1Given :1; unsigned B4SOIlsii2Given :1; unsigned B4SOIlsiidGiven :1; unsigned B4SOIlagidlGiven :1; unsigned B4SOIlbgidlGiven :1; unsigned B4SOIlcgidlGiven :1; unsigned B4SOIlegidlGiven :1; unsigned B4SOIlrgidlGiven :1; unsigned B4SOIlkgidlGiven :1; unsigned B4SOIlfgidlGiven :1; unsigned B4SOIlagislGiven :1; unsigned B4SOIlbgislGiven :1; unsigned B4SOIlcgislGiven :1; unsigned B4SOIlegislGiven :1; unsigned B4SOIlrgislGiven :1; unsigned B4SOIlkgislGiven :1; unsigned B4SOIlfgislGiven :1; unsigned B4SOIlntunGiven :1; /* v4.0 */ unsigned B4SOIlntundGiven :1; /* v4.0 */ unsigned B4SOIlndiodeGiven :1; /* v4.0 */ unsigned B4SOIlndiodedGiven :1; /* v4.0 */ unsigned B4SOIlnrecf0Given :1; /* v4.0 */ unsigned B4SOIlnrecf0dGiven :1; /* v4.0 */ unsigned B4SOIlnrecr0Given :1; /* v4.0 */ unsigned B4SOIlnrecr0dGiven :1; /* v4.0 */ unsigned B4SOIlisbjtGiven :1; unsigned B4SOIlidbjtGiven :1; /* v4.0 */ unsigned B4SOIlisdifGiven :1; unsigned B4SOIliddifGiven :1; /* v4.0 */ unsigned B4SOIlisrecGiven :1; unsigned B4SOIlidrecGiven :1; /* v4.0 */ unsigned B4SOIlistunGiven :1; unsigned B4SOIlidtunGiven :1; /* v4.0 */ unsigned B4SOIlvrec0Given :1; /* v4.0 */ unsigned B4SOIlvrec0dGiven :1; /* v4.0 */ unsigned B4SOIlvtun0Given :1; /* v4.0 */ unsigned B4SOIlvtun0dGiven :1; /* v4.0 */ unsigned B4SOIlnbjtGiven :1; unsigned B4SOIllbjt0Given :1; unsigned B4SOIlvabjtGiven :1; unsigned B4SOIlaelyGiven :1; unsigned B4SOIlahliGiven :1; /* v4.0 */ unsigned B4SOIlahlidGiven :1; /* v4.0 */ /* v3.1 added for RF */ unsigned B4SOIlxrcrg1Given :1; unsigned B4SOIlxrcrg2Given :1; /* v3.1 added for RF end */ /* CV model */ unsigned B4SOIlvsdfbGiven :1; unsigned B4SOIlvsdthGiven :1; unsigned B4SOIldelvtGiven :1; unsigned B4SOIlacdeGiven :1; unsigned B4SOIlmoinGiven :1; unsigned B4SOIlnoffGiven :1; /* v3.2 */ /* Width Dependence */ /* v3.1 */ unsigned B4SOIwxjGiven :1; unsigned B4SOIwalphaGB1Given :1; unsigned B4SOIwbetaGB1Given :1; unsigned B4SOIwalphaGB2Given :1; unsigned B4SOIwbetaGB2Given :1; unsigned B4SOIwaigbcp2Given :1; /* 4.1 */ unsigned B4SOIwbigbcp2Given :1; /* 4.1 */ unsigned B4SOIwcigbcp2Given :1; /* 4.1 */ unsigned B4SOIwndifGiven :1; unsigned B4SOIwntrecfGiven :1; unsigned B4SOIwntrecrGiven :1; unsigned B4SOIwxbjtGiven :1; unsigned B4SOIwxdifGiven :1; unsigned B4SOIwxrecGiven :1; unsigned B4SOIwxtunGiven :1; unsigned B4SOIwxdifdGiven :1; unsigned B4SOIwxrecdGiven :1; unsigned B4SOIwxtundGiven :1; unsigned B4SOIwcgslGiven :1; unsigned B4SOIwcgdlGiven :1; unsigned B4SOIwckappaGiven :1; unsigned B4SOIwua1Given :1; unsigned B4SOIwub1Given :1; unsigned B4SOIwuc1Given :1; unsigned B4SOIwuteGiven :1; unsigned B4SOIwkt1Given :1; unsigned B4SOIwkt1lGiven :1; unsigned B4SOIwkt2Given :1; unsigned B4SOIwatGiven :1; unsigned B4SOIwprtGiven :1; /* v3.0 */ unsigned B4SOIwaigcGiven :1; unsigned B4SOIwbigcGiven :1; unsigned B4SOIwcigcGiven :1; unsigned B4SOIwaigsdGiven :1; unsigned B4SOIwbigsdGiven :1; unsigned B4SOIwcigsdGiven :1; unsigned B4SOIwnigcGiven :1; unsigned B4SOIwpigcdGiven :1; unsigned B4SOIwpoxedgeGiven :1; unsigned B4SOIwnpeakGiven :1; unsigned B4SOIwnsubGiven :1; unsigned B4SOIwngateGiven :1; unsigned B4SOIwnsdGiven :1; unsigned B4SOIwvth0Given :1; unsigned B4SOIwvfbGiven :1; /* v4.1 */ unsigned B4SOIwk1Given :1; unsigned B4SOIwk1w1Given :1; unsigned B4SOIwk1w2Given :1; unsigned B4SOIwk2Given :1; unsigned B4SOIwk3Given :1; unsigned B4SOIwk3bGiven :1; unsigned B4SOIwkb1Given :1; unsigned B4SOIww0Given :1; unsigned B4SOIwlpe0Given :1; unsigned B4SOIwdvt0Given :1; unsigned B4SOIwdvt1Given :1; unsigned B4SOIwdvt2Given :1; unsigned B4SOIwdvt0wGiven :1; unsigned B4SOIwdvt1wGiven :1; unsigned B4SOIwdvt2wGiven :1; unsigned B4SOIwu0Given :1; unsigned B4SOIwuaGiven :1; unsigned B4SOIwubGiven :1; unsigned B4SOIwucGiven :1; unsigned B4SOIwvsatGiven :1; unsigned B4SOIwa0Given :1; unsigned B4SOIwagsGiven :1; unsigned B4SOIwb0Given :1; unsigned B4SOIwb1Given :1; unsigned B4SOIwketaGiven :1; unsigned B4SOIwketasGiven :1; unsigned B4SOIwa1Given :1; unsigned B4SOIwa2Given :1; unsigned B4SOIwrdswGiven :1; unsigned B4SOIwrdwGiven :1; /* v4.0 for rdsMod = 1 */ unsigned B4SOIwrswGiven :1; /* v4.0 for rdsMod = 1 */ unsigned B4SOIwprwbGiven :1; unsigned B4SOIwprwgGiven :1; unsigned B4SOIwwrGiven :1; unsigned B4SOIwnfactorGiven :1; unsigned B4SOIwdwgGiven :1; unsigned B4SOIwdwbGiven :1; unsigned B4SOIwvoffGiven :1; unsigned B4SOIweta0Given :1; unsigned B4SOIwetabGiven :1; unsigned B4SOIwdsubGiven :1; unsigned B4SOIwcitGiven :1; unsigned B4SOIwcdscGiven :1; unsigned B4SOIwcdscbGiven :1; unsigned B4SOIwcdscdGiven :1; unsigned B4SOIwpclmGiven :1; unsigned B4SOIwpdibl1Given :1; unsigned B4SOIwpdibl2Given :1; unsigned B4SOIwpdiblbGiven :1; unsigned B4SOIwdroutGiven :1; unsigned B4SOIwpvagGiven :1; unsigned B4SOIwdeltaGiven :1; unsigned B4SOIwalpha0Given :1; unsigned B4SOIwfbjtiiGiven :1; /*4.1 Iii model*/ unsigned B4SOIwebjtiiGiven :1; unsigned B4SOIwcbjtiiGiven :1; unsigned B4SOIwvbciGiven :1; unsigned B4SOIwabjtiiGiven :1; unsigned B4SOIwmbjtiiGiven :1; unsigned B4SOIwbeta0Given :1; unsigned B4SOIwbeta1Given :1; unsigned B4SOIwbeta2Given :1; unsigned B4SOIwvdsatii0Given :1; unsigned B4SOIwliiGiven :1; unsigned B4SOIwesatiiGiven :1; unsigned B4SOIwsii0Given :1; unsigned B4SOIwsii1Given :1; unsigned B4SOIwsii2Given :1; unsigned B4SOIwsiidGiven :1; unsigned B4SOIwagidlGiven :1; unsigned B4SOIwbgidlGiven :1; unsigned B4SOIwcgidlGiven :1; unsigned B4SOIwegidlGiven :1; unsigned B4SOIwrgidlGiven :1; unsigned B4SOIwkgidlGiven :1; unsigned B4SOIwfgidlGiven :1; unsigned B4SOIwagislGiven :1; unsigned B4SOIwbgislGiven :1; unsigned B4SOIwcgislGiven :1; unsigned B4SOIwegislGiven :1; unsigned B4SOIwrgislGiven :1; unsigned B4SOIwkgislGiven :1; unsigned B4SOIwfgislGiven :1; unsigned B4SOIwntunGiven :1; /* v4.0 */ unsigned B4SOIwntundGiven :1; /* v4.0 */ unsigned B4SOIwndiodeGiven :1; /* v4.0 */ unsigned B4SOIwndiodedGiven :1; /* v4.0 */ unsigned B4SOIwnrecf0Given :1; /* v4.0 */ unsigned B4SOIwnrecf0dGiven :1; /* v4.0 */ unsigned B4SOIwnrecr0Given :1; /* v4.0 */ unsigned B4SOIwnrecr0dGiven :1; /* v4.0 */ unsigned B4SOIwisbjtGiven :1; unsigned B4SOIwidbjtGiven :1; /* v4.0 */ unsigned B4SOIwisdifGiven :1; unsigned B4SOIwiddifGiven :1; /* v4.0 */ unsigned B4SOIwisrecGiven :1; unsigned B4SOIwidrecGiven :1; /* v4.0 */ unsigned B4SOIwistunGiven :1; unsigned B4SOIwidtunGiven :1; /* v4.0 */ unsigned B4SOIwvrec0Given :1; /* v4.0 */ unsigned B4SOIwvrec0dGiven :1; /* v4.0 */ unsigned B4SOIwvtun0Given :1; /* v4.0 */ unsigned B4SOIwvtun0dGiven :1; /* v4.0 */ unsigned B4SOIwnbjtGiven :1; unsigned B4SOIwlbjt0Given :1; unsigned B4SOIwvabjtGiven :1; unsigned B4SOIwaelyGiven :1; unsigned B4SOIwahliGiven :1; /* v4.0 */ unsigned B4SOIwahlidGiven :1; /* v4.0 */ /* v3.1 added for RF */ unsigned B4SOIwxrcrg1Given :1; unsigned B4SOIwxrcrg2Given :1; /* v3.1 added for RF end */ /* CV model */ unsigned B4SOIwvsdfbGiven :1; unsigned B4SOIwvsdthGiven :1; unsigned B4SOIwdelvtGiven :1; unsigned B4SOIwacdeGiven :1; unsigned B4SOIwmoinGiven :1; unsigned B4SOIwnoffGiven :1; /* v3.2 */ /* Cross-term Dependence */ /* v3.1 */ unsigned B4SOIpxjGiven :1; unsigned B4SOIpalphaGB1Given :1; unsigned B4SOIpbetaGB1Given :1; unsigned B4SOIpalphaGB2Given :1; unsigned B4SOIpbetaGB2Given :1; unsigned B4SOIpaigbcp2Given :1; /* 4.1 */ unsigned B4SOIpbigbcp2Given :1; /* 4.1 */ unsigned B4SOIpcigbcp2Given :1; /* 4.1 */ unsigned B4SOIpndifGiven :1; unsigned B4SOIpntrecfGiven :1; unsigned B4SOIpntrecrGiven :1; unsigned B4SOIpxbjtGiven :1; unsigned B4SOIpxdifGiven :1; unsigned B4SOIpxrecGiven :1; unsigned B4SOIpxtunGiven :1; unsigned B4SOIpxdifdGiven :1; unsigned B4SOIpxrecdGiven :1; unsigned B4SOIpxtundGiven :1; unsigned B4SOIpcgslGiven :1; unsigned B4SOIpcgdlGiven :1; unsigned B4SOIpckappaGiven :1; unsigned B4SOIpua1Given :1; unsigned B4SOIpub1Given :1; unsigned B4SOIpuc1Given :1; unsigned B4SOIputeGiven :1; unsigned B4SOIpkt1Given :1; unsigned B4SOIpkt1lGiven :1; unsigned B4SOIpkt2Given :1; unsigned B4SOIpatGiven :1; unsigned B4SOIpprtGiven :1; /* v3.0 */ unsigned B4SOIpaigcGiven :1; unsigned B4SOIpbigcGiven :1; unsigned B4SOIpcigcGiven :1; unsigned B4SOIpaigsdGiven :1; unsigned B4SOIpbigsdGiven :1; unsigned B4SOIpcigsdGiven :1; unsigned B4SOIpnigcGiven :1; unsigned B4SOIppigcdGiven :1; unsigned B4SOIppoxedgeGiven :1; unsigned B4SOIpnpeakGiven :1; unsigned B4SOIpnsubGiven :1; unsigned B4SOIpngateGiven :1; unsigned B4SOIpnsdGiven :1; unsigned B4SOIpvth0Given :1; unsigned B4SOIpvfbGiven :1; /* v4.1 */ unsigned B4SOIpk1Given :1; unsigned B4SOIpk1w1Given :1; unsigned B4SOIpk1w2Given :1; unsigned B4SOIpk2Given :1; unsigned B4SOIpk3Given :1; unsigned B4SOIpk3bGiven :1; unsigned B4SOIpkb1Given :1; unsigned B4SOIpw0Given :1; unsigned B4SOIplpe0Given :1; unsigned B4SOIpdvt0Given :1; unsigned B4SOIpdvt1Given :1; unsigned B4SOIpdvt2Given :1; unsigned B4SOIpdvt0wGiven :1; unsigned B4SOIpdvt1wGiven :1; unsigned B4SOIpdvt2wGiven :1; unsigned B4SOIpu0Given :1; unsigned B4SOIpuaGiven :1; unsigned B4SOIpubGiven :1; unsigned B4SOIpucGiven :1; unsigned B4SOIpvsatGiven :1; unsigned B4SOIpa0Given :1; unsigned B4SOIpagsGiven :1; unsigned B4SOIpb0Given :1; unsigned B4SOIpb1Given :1; unsigned B4SOIpketaGiven :1; unsigned B4SOIpketasGiven :1; unsigned B4SOIpa1Given :1; unsigned B4SOIpa2Given :1; unsigned B4SOIprdswGiven :1; unsigned B4SOIprdwGiven :1; /* v4.0 for rdsMod = 1 */ unsigned B4SOIprswGiven :1; /* v4.0 for rdsMod = 1 */ unsigned B4SOIpprwbGiven :1; unsigned B4SOIpprwgGiven :1; unsigned B4SOIpwrGiven :1; unsigned B4SOIpnfactorGiven :1; unsigned B4SOIpdwgGiven :1; unsigned B4SOIpdwbGiven :1; unsigned B4SOIpvoffGiven :1; unsigned B4SOIpeta0Given :1; unsigned B4SOIpetabGiven :1; unsigned B4SOIpdsubGiven :1; unsigned B4SOIpcitGiven :1; unsigned B4SOIpcdscGiven :1; unsigned B4SOIpcdscbGiven :1; unsigned B4SOIpcdscdGiven :1; unsigned B4SOIppclmGiven :1; unsigned B4SOIppdibl1Given :1; unsigned B4SOIppdibl2Given :1; unsigned B4SOIppdiblbGiven :1; unsigned B4SOIpdroutGiven :1; unsigned B4SOIppvagGiven :1; unsigned B4SOIpdeltaGiven :1; unsigned B4SOIpalpha0Given :1; unsigned B4SOIpfbjtiiGiven :1; /*4.1 Iii model*/ unsigned B4SOIpebjtiiGiven :1; unsigned B4SOIpcbjtiiGiven :1; unsigned B4SOIpvbciGiven :1; unsigned B4SOIpabjtiiGiven :1; unsigned B4SOIpmbjtiiGiven :1; unsigned B4SOIpbeta0Given :1; unsigned B4SOIpbeta1Given :1; unsigned B4SOIpbeta2Given :1; unsigned B4SOIpvdsatii0Given :1; unsigned B4SOIpliiGiven :1; unsigned B4SOIpesatiiGiven :1; unsigned B4SOIpsii0Given :1; unsigned B4SOIpsii1Given :1; unsigned B4SOIpsii2Given :1; unsigned B4SOIpsiidGiven :1; unsigned B4SOIpagidlGiven :1; unsigned B4SOIpbgidlGiven :1; unsigned B4SOIpcgidlGiven :1; unsigned B4SOIpegidlGiven :1; unsigned B4SOIprgidlGiven :1; unsigned B4SOIpkgidlGiven :1; unsigned B4SOIpfgidlGiven :1; unsigned B4SOIpagislGiven :1; unsigned B4SOIpbgislGiven :1; unsigned B4SOIpcgislGiven :1; unsigned B4SOIpegislGiven :1; unsigned B4SOIprgislGiven :1; unsigned B4SOIpkgislGiven :1; unsigned B4SOIpfgislGiven :1; unsigned B4SOIpntunGiven :1; /* v4.0 */ unsigned B4SOIpntundGiven :1; /* v4.0 */ unsigned B4SOIpndiodeGiven :1; /* v4.0 */ unsigned B4SOIpndiodedGiven :1; /* v4.0 */ unsigned B4SOIpnrecf0Given :1; /* v4.0 */ unsigned B4SOIpnrecf0dGiven :1; /* v4.0 */ unsigned B4SOIpnrecr0Given :1; /* v4.0 */ unsigned B4SOIpnrecr0dGiven :1; /* v4.0 */ unsigned B4SOIpisbjtGiven :1; unsigned B4SOIpidbjtGiven :1; /* v4.0 */ unsigned B4SOIpisdifGiven :1; unsigned B4SOIpiddifGiven :1; /* v4.0 */ unsigned B4SOIpisrecGiven :1; unsigned B4SOIpidrecGiven :1; /* v4.0 */ unsigned B4SOIpistunGiven :1; unsigned B4SOIpidtunGiven :1; /* v4.0 */ unsigned B4SOIpvrec0Given :1; /* v4.0 */ unsigned B4SOIpvrec0dGiven :1; /* v4.0 */ unsigned B4SOIpvtun0Given :1; /* v4.0 */ unsigned B4SOIpvtun0dGiven :1; /* v4.0 */ unsigned B4SOIpnbjtGiven :1; unsigned B4SOIplbjt0Given :1; unsigned B4SOIpvabjtGiven :1; unsigned B4SOIpaelyGiven :1; unsigned B4SOIpahliGiven :1; /* v4.0 */ unsigned B4SOIpahlidGiven :1; /* v4.0 */ /* v3.1 added for RF */ unsigned B4SOIpxrcrg1Given :1; unsigned B4SOIpxrcrg2Given :1; /* v3.1 added for RF end */ /* CV model */ unsigned B4SOIpvsdfbGiven :1; unsigned B4SOIpvsdthGiven :1; unsigned B4SOIpdelvtGiven :1; unsigned B4SOIpacdeGiven :1; unsigned B4SOIpmoinGiven :1; unsigned B4SOIpnoffGiven :1;/* v3.2 */ /* Added for binning - END2 */ unsigned B4SOIuseFringeGiven :1; unsigned B4SOItnomGiven :1; unsigned B4SOIcgsoGiven :1; unsigned B4SOIcgdoGiven :1; unsigned B4SOIcgeoGiven :1; unsigned B4SOIxpartGiven :1; unsigned B4SOIsheetResistanceGiven :1; unsigned B4SOIGatesidewallJctSPotentialGiven :1; /* v4.0 */ unsigned B4SOIGatesidewallJctDPotentialGiven :1; /* v4.0 */ unsigned B4SOIbodyJctGateSideSGradingCoeffGiven :1; /* v4.0 */ unsigned B4SOIbodyJctGateSideDGradingCoeffGiven :1; /* v4.0 */ unsigned B4SOIunitLengthGateSidewallJctCapSGiven :1; /* v4.0 */ unsigned B4SOIunitLengthGateSidewallJctCapDGiven :1; /* v4.0 */ unsigned B4SOIcsdeswGiven :1; unsigned B4SOIoxideTrapDensityAGiven :1; unsigned B4SOIoxideTrapDensityBGiven :1; unsigned B4SOIoxideTrapDensityCGiven :1; unsigned B4SOIemGiven :1; unsigned B4SOIefGiven :1; unsigned B4SOIafGiven :1; unsigned B4SOIkfGiven :1; unsigned B4SOInoifGiven :1; unsigned B4SOIbfGiven :1; /* v4.0 */ unsigned B4SOIw0flkGiven :1; /* v4.0 */ unsigned B4SOIfrbodyGiven :1; /* v4.0 */ unsigned B4SOILintGiven :1; unsigned B4SOILlGiven :1; unsigned B4SOILlcGiven :1; /* v2.2.3 */ unsigned B4SOILlnGiven :1; unsigned B4SOILwGiven :1; unsigned B4SOILwcGiven :1; /* v2.2.3 */ unsigned B4SOILwnGiven :1; unsigned B4SOILwlGiven :1; unsigned B4SOILwlcGiven :1; /* v2.2.3 */ unsigned B4SOILminGiven :1; unsigned B4SOILmaxGiven :1; unsigned B4SOIWintGiven :1; unsigned B4SOIWlGiven :1; unsigned B4SOIWlcGiven :1; /* v2.2.3 */ unsigned B4SOIWlnGiven :1; unsigned B4SOIWwGiven :1; unsigned B4SOIWwcGiven :1; /* v2.2.3 */ unsigned B4SOIWwnGiven :1; unsigned B4SOIWwlGiven :1; unsigned B4SOIWwlcGiven :1; /* v2.2.3 */ unsigned B4SOIWminGiven :1; unsigned B4SOIWmaxGiven :1; /* added for stress effect */ unsigned B4SOIsarefGiven :1; unsigned B4SOIsbrefGiven :1; unsigned B4SOIwlodGiven :1; unsigned B4SOIku0Given :1; unsigned B4SOIkvsatGiven :1; unsigned B4SOIkvth0Given :1; unsigned B4SOItku0Given :1; unsigned B4SOIllodku0Given :1; unsigned B4SOIwlodku0Given :1; unsigned B4SOIllodvthGiven :1; unsigned B4SOIwlodvthGiven :1; unsigned B4SOIlku0Given :1; unsigned B4SOIwku0Given :1; unsigned B4SOIpku0Given :1; unsigned B4SOIlkvth0Given :1; unsigned B4SOIwkvth0Given :1; unsigned B4SOIpkvth0Given :1; unsigned B4SOIstk2Given :1; unsigned B4SOIlodk2Given :1; unsigned B4SOIsteta0Given :1; unsigned B4SOIlodeta0Given :1; /* v4.0 added for stress effect end */ unsigned B4SOIlpebGiven :1; /* v4.0 for vth */ unsigned B4SOIllpebGiven :1; /* v4.0 for vth */ unsigned B4SOIwlpebGiven :1; /* v4.0 for vth */ unsigned B4SOIplpebGiven :1; /* v4.0 for vth */ unsigned B4SOIdvtp0Given :1; /* v4.0 for vth */ unsigned B4SOIldvtp0Given :1; /* v4.0 for vth */ unsigned B4SOIwdvtp0Given :1; /* v4.0 for vth */ unsigned B4SOIpdvtp0Given :1; /* v4.0 for vth */ unsigned B4SOIdvtp1Given :1; /* v4.0 for vth */ unsigned B4SOIldvtp1Given :1; /* v4.0 for vth */ unsigned B4SOIwdvtp1Given :1; /* v4.0 for vth */ unsigned B4SOIpdvtp1Given :1; /* v4.0 for vth */ unsigned B4SOIdvtp2Given :1; /* v4.1 for vth */ unsigned B4SOIldvtp2Given :1; /* v4.1 for vth */ unsigned B4SOIwdvtp2Given :1; /* v4.1 for vth */ unsigned B4SOIpdvtp2Given :1; /* v4.1 for vth */ unsigned B4SOIdvtp3Given :1; /* v4.1 for vth */ unsigned B4SOIldvtp3Given :1; /* v4.1 for vth */ unsigned B4SOIwdvtp3Given :1; /* v4.1 for vth */ unsigned B4SOIpdvtp3Given :1; /* v4.1 for vth */ unsigned B4SOIdvtp4Given :1; /* v4.1 for vth */ unsigned B4SOIldvtp4Given :1; /* v4.1 for vth */ unsigned B4SOIwdvtp4Given :1; /* v4.1 for vth */ unsigned B4SOIpdvtp4Given :1; /* v4.1 for vth */ unsigned B4SOIminvGiven :1; /* v4.0 for Vgsteff */ unsigned B4SOIlminvGiven :1; /* v4.0 for Vgsteff */ unsigned B4SOIwminvGiven :1; /* v4.0 for Vgsteff */ unsigned B4SOIpminvGiven :1; /* v4.0 for Vgsteff */ unsigned B4SOIfproutGiven :1; /* v4.0 for DITS in ID */ unsigned B4SOIlfproutGiven :1; /* v4.0 for DITS in ID */ unsigned B4SOIwfproutGiven :1; /* v4.0 for DITS in ID */ unsigned B4SOIpfproutGiven :1; /* v4.0 for DITS in ID */ unsigned B4SOIpditsGiven :1; /* v4.0 for DITS in ID */ unsigned B4SOIlpditsGiven :1; /* v4.0 for DITS in ID */ unsigned B4SOIwpditsGiven :1; /* v4.0 for DITS in ID */ unsigned B4SOIppditsGiven :1; /* v4.0 for DITS in ID */ unsigned B4SOIpditsdGiven :1; /* v4.0 for DITS in ID */ unsigned B4SOIlpditsdGiven :1; /* v4.0 for DITS in ID */ unsigned B4SOIwpditsdGiven :1; /* v4.0 for DITS in ID */ unsigned B4SOIppditsdGiven :1; /* v4.0 for DITS in ID */ unsigned B4SOIpditslGiven :1; /* v4.0 for DITS in ID */ } B4SOImodel; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ /* device parameters */ #define B4SOI_W 1 #define B4SOI_L 2 #define B4SOI_M 47 #define B4SOI_AS 3 #define B4SOI_AD 4 #define B4SOI_PS 5 #define B4SOI_PD 6 #define B4SOI_NRS 7 #define B4SOI_NRD 8 #define B4SOI_OFF 9 #define B4SOI_IC_VBS 10 #define B4SOI_IC_VDS 11 #define B4SOI_IC_VGS 12 #define B4SOI_IC_VES 13 #define B4SOI_IC_VPS 14 #define B4SOI_BJTOFF 15 #define B4SOI_RTH0 16 #define B4SOI_CTH0 17 #define B4SOI_NRB 18 #define B4SOI_IC 19 #define B4SOI_NQSMOD 20 #define B4SOI_DEBUG 21 /* v2.0 release */ #define B4SOI_NBC 22 #define B4SOI_NSEG 23 #define B4SOI_PDBCP 24 #define B4SOI_PSBCP 25 #define B4SOI_AGBCP 26 #define B4SOI_AEBCP 27 #define B4SOI_VBSUSR 28 #define B4SOI_TNODEOUT 29 #define B4SOI_FRBODY 30 /* v2.2.2 */ #define B4SOI_RGATEMOD 31 /* v3.1 */ #define B4SOI_SOIMOD 32 /* v3.2 */ #define B4SOI_NF 33 /* v4.0 */ #define B4SOI_RBODYMOD 34 /* v4.0 */ #define B4SOI_RBDB 35 /* v4.0 */ #define B4SOI_RBSB 36 /* v4.0 */ #define B4SOI_CJSB 37 /* v4.0 */ #define B4SOI_CJDB 38 /* v4.0 */ #define B4SOI_SA 41 /* v4.0 */ #define B4SOI_SB 42 /* v4.0 */ #define B4SOI_SD 43 /* v4.0 */ #define B4SOI_DELVTO 44 /* v4.0 */ #define B4SOI_AGBCPD 45 /* v4.0 */ #define B4SOI_AGBCP2 46 /* v4.1 improvement on BC */ /* model parameters */ #define B4SOI_MOD_PFGIDL 65 #define B4SOI_MOD_WFGIDL 66 #define B4SOI_MOD_LFGIDL 67 #define B4SOI_MOD_FGIDL 68 #define B4SOI_MOD_PKGIDL 69 #define B4SOI_MOD_WKGIDL 70 #define B4SOI_MOD_LKGIDL 71 #define B4SOI_MOD_KGIDL 72 #define B4SOI_MOD_PRGIDL 73 #define B4SOI_MOD_WRGIDL 74 #define B4SOI_MOD_LRGIDL 75 #define B4SOI_MOD_RGIDL 76 #define B4SOI_MOD_GIDLMOD 77 #define B4SOI_MOD_PNSD 78 #define B4SOI_MOD_WNSD 79 #define B4SOI_MOD_LNSD 80 #define B4SOI_MOD_NSD 81 #define B4SOI_MOD_PHIG 82 #define B4SOI_MOD_EASUB 83 #define B4SOI_MOD_TBGBSUB 84 #define B4SOI_MOD_TBGASUB 85 #define B4SOI_MOD_BG0SUB 86 #define B4SOI_MOD_NI0SUB 87 #define B4SOI_MOD_EPSRGATE 88 #define B4SOI_MOD_ADOS 89 #define B4SOI_MOD_BDOS 90 #define B4SOI_MOD_LEFFEOT 91 #define B4SOI_MOD_WEFFEOT 92 #define B4SOI_MOD_VDDEOT 93 #define B4SOI_MOD_TEMPEOT 94 #define B4SOI_MOD_TOXP 95 #define B4SOI_MOD_ETSI 96 #define B4SOI_MOD_EOT 97 #define B4SOI_MOD_EPSROX 98 #define B4SOI_MOD_EPSRSUB 99 #define B4SOI_MOD_MTRLMOD 100 /*4.1*/ #define B4SOI_MOD_CAPMOD 101 #define B4SOI_MOD_NQSMOD 102 #define B4SOI_MOD_MOBMOD 103 /*#define B4SOI_MOD_NOIMOD 104 v3.2 */ #define B4SOI_MOD_RDSMOD 104 /* v4.0 */ #define B4SOI_MOD_SHMOD 105 /*#define B4SOI_MOD_DDMOD 106 v4.2 ddmod is not used any more*/ #define B4SOI_MOD_TOX 107 #define B4SOI_MOD_CDSC 108 #define B4SOI_MOD_CDSCB 109 #define B4SOI_MOD_CIT 110 #define B4SOI_MOD_NFACTOR 111 #define B4SOI_MOD_XJ 112 #define B4SOI_MOD_VSAT 113 #define B4SOI_MOD_AT 114 #define B4SOI_MOD_A0 115 #define B4SOI_MOD_A1 116 #define B4SOI_MOD_A2 117 #define B4SOI_MOD_KETA 118 #define B4SOI_MOD_NSUB 119 #define B4SOI_MOD_NPEAK 120 #define B4SOI_MOD_NGATE 121 #define B4SOI_MOD_GAMMA1 122 #define B4SOI_MOD_GAMMA2 123 #define B4SOI_MOD_VBX 124 #define B4SOI_MOD_BINUNIT 125 #define B4SOI_MOD_VBM 126 #define B4SOI_MOD_XT 127 #define B4SOI_MOD_K1 129 #define B4SOI_MOD_KT1 130 #define B4SOI_MOD_KT1L 131 #define B4SOI_MOD_K2 132 #define B4SOI_MOD_KT2 133 #define B4SOI_MOD_K3 134 #define B4SOI_MOD_K3B 135 #define B4SOI_MOD_W0 136 #define B4SOI_MOD_LPE0 137 #define B4SOI_MOD_DVT0 138 #define B4SOI_MOD_DVT1 139 #define B4SOI_MOD_DVT2 140 #define B4SOI_MOD_DVT0W 141 #define B4SOI_MOD_DVT1W 142 #define B4SOI_MOD_DVT2W 143 #define B4SOI_MOD_DROUT 144 #define B4SOI_MOD_DSUB 145 #define B4SOI_MOD_VTH0 146 #define B4SOI_MOD_UA 147 #define B4SOI_MOD_UA1 148 #define B4SOI_MOD_UB 149 #define B4SOI_MOD_UB1 150 #define B4SOI_MOD_UC 151 #define B4SOI_MOD_UC1 152 #define B4SOI_MOD_U0 153 #define B4SOI_MOD_UTE 154 #define B4SOI_MOD_VOFF 155 #define B4SOI_MOD_DELTA 156 #define B4SOI_MOD_RDSW 157 #define B4SOI_MOD_PRT 158 #define B4SOI_MOD_LDD 159 #define B4SOI_MOD_ETA 160 #define B4SOI_MOD_ETA0 161 #define B4SOI_MOD_ETAB 162 #define B4SOI_MOD_PCLM 163 #define B4SOI_MOD_PDIBL1 164 #define B4SOI_MOD_PDIBL2 165 #define B4SOI_MOD_PSCBE1 166 #define B4SOI_MOD_PSCBE2 167 #define B4SOI_MOD_PVAG 168 #define B4SOI_MOD_WR 169 #define B4SOI_MOD_DWG 170 #define B4SOI_MOD_DWB 171 #define B4SOI_MOD_B0 172 #define B4SOI_MOD_B1 173 #define B4SOI_MOD_ALPHA0 174 #define B4SOI_MOD_PDIBLB 178 #define B4SOI_MOD_PRWG 179 #define B4SOI_MOD_PRWB 180 #define B4SOI_MOD_CDSCD 181 #define B4SOI_MOD_AGS 182 #define B4SOI_MOD_FRINGE 184 #define B4SOI_MOD_CGSL 186 #define B4SOI_MOD_CGDL 187 #define B4SOI_MOD_CKAPPA 188 #define B4SOI_MOD_CF 189 #define B4SOI_MOD_CLC 190 #define B4SOI_MOD_CLE 191 #define B4SOI_MOD_PARAMCHK 192 #define B4SOI_MOD_VERSION 193 #define B4SOI_MOD_TBOX 195 #define B4SOI_MOD_TSI 196 #define B4SOI_MOD_KB1 197 #define B4SOI_MOD_KB3 198 #define B4SOI_MOD_DELP 201 #define B4SOI_MOD_RBODY 204 #define B4SOI_MOD_ADICE0 205 #define B4SOI_MOD_ABP 206 #define B4SOI_MOD_MXC 207 #define B4SOI_MOD_RTH0 208 #define B4SOI_MOD_CTH0 209 #define B4SOI_MOD_ALPHA1 214 #define B4SOI_MOD_EGIDL 215 #define B4SOI_MOD_AGIDL 216 #define B4SOI_MOD_BGIDL 217 #define B4SOI_MOD_NDIODES 218 /* v4.0 */ #define B4SOI_MOD_LDIOF 219 #define B4SOI_MOD_LDIOR 220 #define B4SOI_MOD_NTUNS 221 /* v4.0 */ #define B4SOI_MOD_ISBJT 222 #define B4SOI_MOD_ISDIF 223 #define B4SOI_MOD_ISREC 224 #define B4SOI_MOD_ISTUN 225 #define B4SOI_MOD_XBJT 226 #define B4SOI_MOD_TT 232 #define B4SOI_MOD_VSDTH 233 #define B4SOI_MOD_VSDFB 234 #define B4SOI_MOD_ASD 235 #define B4SOI_MOD_CSDMIN 236 #define B4SOI_MOD_RBSH 237 #define B4SOI_MOD_ESATII 238 /* v2.0 release */ #define B4SOI_MOD_K1W1 239 #define B4SOI_MOD_K1W2 240 #define B4SOI_MOD_KETAS 241 #define B4SOI_MOD_DWBC 242 #define B4SOI_MOD_BETA0 243 #define B4SOI_MOD_BETA1 244 #define B4SOI_MOD_BETA2 245 #define B4SOI_MOD_VDSATII0 246 #define B4SOI_MOD_TII 247 #define B4SOI_MOD_LII 248 #define B4SOI_MOD_SII0 249 #define B4SOI_MOD_SII1 250 #define B4SOI_MOD_SII2 251 #define B4SOI_MOD_SIID 252 #define B4SOI_MOD_FBJTII 253 #define B4SOI_MOD_NRECF0S 255 #define B4SOI_MOD_NRECR0S 256 #define B4SOI_MOD_LN 257 #define B4SOI_MOD_VREC0S 258 #define B4SOI_MOD_VTUN0S 259 #define B4SOI_MOD_NBJT 260 #define B4SOI_MOD_LBJT0 261 #define B4SOI_MOD_VABJT 262 #define B4SOI_MOD_AELY 263 #define B4SOI_MOD_AHLIS 264 /* v4.0 */ #define B4SOI_MOD_NTRECF 265 #define B4SOI_MOD_NTRECR 266 #define B4SOI_MOD_DLCB 267 #define B4SOI_MOD_FBODY 268 #define B4SOI_MOD_NDIF 269 #define B4SOI_MOD_ACDE 272 #define B4SOI_MOD_MOIN 273 #define B4SOI_MOD_DELVT 274 #define B4SOI_MOD_DLBG 275 #define B4SOI_MOD_LDIF0 276 /* v2.2 release */ #define B4SOI_MOD_WTH0 277 #define B4SOI_MOD_RHALO 278 #define B4SOI_MOD_NTOX 279 #define B4SOI_MOD_TOXREF 280 #define B4SOI_MOD_EBG 281 #define B4SOI_MOD_VEVB 282 #define B4SOI_MOD_ALPHAGB1 283 #define B4SOI_MOD_BETAGB1 284 #define B4SOI_MOD_VGB1 285 #define B4SOI_MOD_VECB 286 #define B4SOI_MOD_ALPHAGB2 287 #define B4SOI_MOD_BETAGB2 288 #define B4SOI_MOD_VGB2 289 #define B4SOI_MOD_TOXQM 290 #define B4SOI_MOD_IGBMOD 291 /* v3.0 */ #define B4SOI_MOD_VOXH 292 #define B4SOI_MOD_DELTAVOX 293 #define B4SOI_MOD_IGCMOD 294 /* v3.0 */ /* v3.1 added for RF */ #define B4SOI_MOD_RGATEMOD 295 #define B4SOI_MOD_XRCRG1 296 #define B4SOI_MOD_XRCRG2 297 #define B4SOI_MOD_RSHG 298 #define B4SOI_MOD_NGCON 299 /* v3.1 added for RF end */ #define B4SOI_MOD_RBODYMOD 300 /* v4.0 */ /* Added for binning - START3 */ /* Length dependence */ #define B4SOI_MOD_LNPEAK 301 #define B4SOI_MOD_LNSUB 302 #define B4SOI_MOD_LNGATE 303 #define B4SOI_MOD_LVTH0 304 #define B4SOI_MOD_LK1 305 #define B4SOI_MOD_LK1W1 306 #define B4SOI_MOD_LK1W2 307 #define B4SOI_MOD_LK2 308 #define B4SOI_MOD_LK3 309 #define B4SOI_MOD_LK3B 310 #define B4SOI_MOD_LKB1 311 #define B4SOI_MOD_LW0 312 #define B4SOI_MOD_LLPE0 313 #define B4SOI_MOD_LDVT0 314 #define B4SOI_MOD_LDVT1 315 #define B4SOI_MOD_LDVT2 316 #define B4SOI_MOD_LDVT0W 317 #define B4SOI_MOD_LDVT1W 318 #define B4SOI_MOD_LDVT2W 319 #define B4SOI_MOD_LU0 320 #define B4SOI_MOD_LUA 321 #define B4SOI_MOD_LUB 322 #define B4SOI_MOD_LUC 323 #define B4SOI_MOD_LVSAT 324 #define B4SOI_MOD_LA0 325 #define B4SOI_MOD_LAGS 326 #define B4SOI_MOD_LB0 327 #define B4SOI_MOD_LB1 328 #define B4SOI_MOD_LKETA 329 #define B4SOI_MOD_LKETAS 330 #define B4SOI_MOD_LA1 331 #define B4SOI_MOD_LA2 332 #define B4SOI_MOD_LRDSW 333 #define B4SOI_MOD_LPRWB 334 #define B4SOI_MOD_LPRWG 335 #define B4SOI_MOD_LWR 336 #define B4SOI_MOD_LNFACTOR 337 #define B4SOI_MOD_LDWG 338 #define B4SOI_MOD_LDWB 339 #define B4SOI_MOD_LVOFF 340 #define B4SOI_MOD_LETA0 341 #define B4SOI_MOD_LETAB 342 #define B4SOI_MOD_LDSUB 343 #define B4SOI_MOD_LCIT 344 #define B4SOI_MOD_LCDSC 345 #define B4SOI_MOD_LCDSCB 346 #define B4SOI_MOD_LCDSCD 347 #define B4SOI_MOD_LPCLM 348 #define B4SOI_MOD_LPDIBL1 349 #define B4SOI_MOD_LPDIBL2 350 #define B4SOI_MOD_LPDIBLB 351 #define B4SOI_MOD_LDROUT 352 #define B4SOI_MOD_LPVAG 353 #define B4SOI_MOD_LDELTA 354 #define B4SOI_MOD_LALPHA0 355 #define B4SOI_MOD_LFBJTII 356 #define B4SOI_MOD_LBETA0 357 #define B4SOI_MOD_LBETA1 358 #define B4SOI_MOD_LBETA2 359 #define B4SOI_MOD_LVDSATII0 360 #define B4SOI_MOD_LLII 361 #define B4SOI_MOD_LESATII 362 #define B4SOI_MOD_LSII0 363 #define B4SOI_MOD_LSII1 364 #define B4SOI_MOD_LSII2 365 #define B4SOI_MOD_LSIID 366 #define B4SOI_MOD_LAGIDL 367 #define B4SOI_MOD_LBGIDL 368 #define B4SOI_MOD_LEGIDL 369 #define B4SOI_MOD_LNTUNS 370 /* v4.0 */ #define B4SOI_MOD_LNDIODES 371 #define B4SOI_MOD_LNRECF0S 372 #define B4SOI_MOD_LNRECR0S 373 #define B4SOI_MOD_LISBJT 374 #define B4SOI_MOD_LISDIF 375 #define B4SOI_MOD_LISREC 376 #define B4SOI_MOD_LISTUN 377 #define B4SOI_MOD_LVREC0S 378 #define B4SOI_MOD_LVTUN0S 379 #define B4SOI_MOD_LNBJT 380 #define B4SOI_MOD_LLBJT0 381 #define B4SOI_MOD_LVABJT 382 #define B4SOI_MOD_LAELY 383 #define B4SOI_MOD_LAHLIS 384 /* v4.0 */ #define B4SOI_MOD_LVSDFB 385 #define B4SOI_MOD_LVSDTH 386 #define B4SOI_MOD_LDELVT 387 #define B4SOI_MOD_LACDE 388 #define B4SOI_MOD_LMOIN 389 /* v3.1 added for RF */ #define B4SOI_MOD_LXRCRG1 390 #define B4SOI_MOD_LXRCRG2 391 #define B4SOI_MOD_XGW 392 #define B4SOI_MOD_XGL 393 /* v3.1 added for RF end */ #define B4SOI_MOD_CFRCOEFF 394 /* v4.4 */ /* Width dependence */ #define B4SOI_MOD_WNPEAK 401 #define B4SOI_MOD_WNSUB 402 #define B4SOI_MOD_WNGATE 403 #define B4SOI_MOD_WVTH0 404 #define B4SOI_MOD_WK1 405 #define B4SOI_MOD_WK1W1 406 #define B4SOI_MOD_WK1W2 407 #define B4SOI_MOD_WK2 408 #define B4SOI_MOD_WK3 409 #define B4SOI_MOD_WK3B 410 #define B4SOI_MOD_WKB1 411 #define B4SOI_MOD_WW0 412 #define B4SOI_MOD_WLPE0 413 #define B4SOI_MOD_WDVT0 414 #define B4SOI_MOD_WDVT1 415 #define B4SOI_MOD_WDVT2 416 #define B4SOI_MOD_WDVT0W 417 #define B4SOI_MOD_WDVT1W 418 #define B4SOI_MOD_WDVT2W 419 #define B4SOI_MOD_WU0 420 #define B4SOI_MOD_WUA 421 #define B4SOI_MOD_WUB 422 #define B4SOI_MOD_WUC 423 #define B4SOI_MOD_WVSAT 424 #define B4SOI_MOD_WA0 425 #define B4SOI_MOD_WAGS 426 #define B4SOI_MOD_WB0 427 #define B4SOI_MOD_WB1 428 #define B4SOI_MOD_WKETA 429 #define B4SOI_MOD_WKETAS 430 #define B4SOI_MOD_WA1 431 #define B4SOI_MOD_WA2 432 #define B4SOI_MOD_WRDSW 433 #define B4SOI_MOD_WPRWB 434 #define B4SOI_MOD_WPRWG 435 #define B4SOI_MOD_WWR 436 #define B4SOI_MOD_WNFACTOR 437 #define B4SOI_MOD_WDWG 438 #define B4SOI_MOD_WDWB 439 #define B4SOI_MOD_WVOFF 440 #define B4SOI_MOD_WETA0 441 #define B4SOI_MOD_WETAB 442 #define B4SOI_MOD_WDSUB 443 #define B4SOI_MOD_WCIT 444 #define B4SOI_MOD_WCDSC 445 #define B4SOI_MOD_WCDSCB 446 #define B4SOI_MOD_WCDSCD 447 #define B4SOI_MOD_WPCLM 448 #define B4SOI_MOD_WPDIBL1 449 #define B4SOI_MOD_WPDIBL2 450 #define B4SOI_MOD_WPDIBLB 451 #define B4SOI_MOD_WDROUT 452 #define B4SOI_MOD_WPVAG 453 #define B4SOI_MOD_WDELTA 454 #define B4SOI_MOD_WALPHA0 455 #define B4SOI_MOD_WFBJTII 456 #define B4SOI_MOD_WBETA0 457 #define B4SOI_MOD_WBETA1 458 #define B4SOI_MOD_WBETA2 459 #define B4SOI_MOD_WVDSATII0 460 #define B4SOI_MOD_WLII 461 #define B4SOI_MOD_WESATII 462 #define B4SOI_MOD_WSII0 463 #define B4SOI_MOD_WSII1 464 #define B4SOI_MOD_WSII2 465 #define B4SOI_MOD_WSIID 466 #define B4SOI_MOD_WAGIDL 467 #define B4SOI_MOD_WBGIDL 468 #define B4SOI_MOD_WEGIDL 469 #define B4SOI_MOD_WNTUNS 470 /* v4.0 */ #define B4SOI_MOD_WNDIODES 471 #define B4SOI_MOD_WNRECF0S 472 #define B4SOI_MOD_WNRECR0S 473 #define B4SOI_MOD_WISBJT 474 #define B4SOI_MOD_WISDIF 475 #define B4SOI_MOD_WISREC 476 #define B4SOI_MOD_WISTUN 477 #define B4SOI_MOD_WVREC0S 478 #define B4SOI_MOD_WVTUN0S 479 #define B4SOI_MOD_WNBJT 480 #define B4SOI_MOD_WLBJT0 481 #define B4SOI_MOD_WVABJT 482 #define B4SOI_MOD_WAELY 483 #define B4SOI_MOD_WAHLIS 484 /* v4.0 */ #define B4SOI_MOD_WVSDFB 485 #define B4SOI_MOD_WVSDTH 486 #define B4SOI_MOD_WDELVT 487 #define B4SOI_MOD_WACDE 488 #define B4SOI_MOD_WMOIN 489 /* v3.1 added for RF */ #define B4SOI_MOD_WXRCRG1 490 #define B4SOI_MOD_WXRCRG2 491 /* v3.1 added for RF end */ /* Cross-term dependence */ #define B4SOI_MOD_PNPEAK 501 #define B4SOI_MOD_PNSUB 502 #define B4SOI_MOD_PNGATE 503 #define B4SOI_MOD_PVTH0 504 #define B4SOI_MOD_PK1 505 #define B4SOI_MOD_PK1W1 506 #define B4SOI_MOD_PK1W2 507 #define B4SOI_MOD_PK2 508 #define B4SOI_MOD_PK3 509 #define B4SOI_MOD_PK3B 510 #define B4SOI_MOD_PKB1 511 #define B4SOI_MOD_PW0 512 #define B4SOI_MOD_PLPE0 513 #define B4SOI_MOD_PDVT0 514 #define B4SOI_MOD_PDVT1 515 #define B4SOI_MOD_PDVT2 516 #define B4SOI_MOD_PDVT0W 517 #define B4SOI_MOD_PDVT1W 518 #define B4SOI_MOD_PDVT2W 519 #define B4SOI_MOD_PU0 520 #define B4SOI_MOD_PUA 521 #define B4SOI_MOD_PUB 522 #define B4SOI_MOD_PUC 523 #define B4SOI_MOD_PVSAT 524 #define B4SOI_MOD_PA0 525 #define B4SOI_MOD_PAGS 526 #define B4SOI_MOD_PB0 527 #define B4SOI_MOD_PB1 528 #define B4SOI_MOD_PKETA 529 #define B4SOI_MOD_PKETAS 530 #define B4SOI_MOD_PA1 531 #define B4SOI_MOD_PA2 532 #define B4SOI_MOD_PRDSW 533 #define B4SOI_MOD_PPRWB 534 #define B4SOI_MOD_PPRWG 535 #define B4SOI_MOD_PWR 536 #define B4SOI_MOD_PNFACTOR 537 #define B4SOI_MOD_PDWG 538 #define B4SOI_MOD_PDWB 539 #define B4SOI_MOD_PVOFF 540 #define B4SOI_MOD_PETA0 541 #define B4SOI_MOD_PETAB 542 #define B4SOI_MOD_PDSUB 543 #define B4SOI_MOD_PCIT 544 #define B4SOI_MOD_PCDSC 545 #define B4SOI_MOD_PCDSCB 546 #define B4SOI_MOD_PCDSCD 547 #define B4SOI_MOD_PPCLM 548 #define B4SOI_MOD_PPDIBL1 549 #define B4SOI_MOD_PPDIBL2 550 #define B4SOI_MOD_PPDIBLB 551 #define B4SOI_MOD_PDROUT 552 #define B4SOI_MOD_PPVAG 553 #define B4SOI_MOD_PDELTA 554 #define B4SOI_MOD_PALPHA0 555 #define B4SOI_MOD_PFBJTII 556 #define B4SOI_MOD_PBETA0 557 #define B4SOI_MOD_PBETA1 558 #define B4SOI_MOD_PBETA2 559 #define B4SOI_MOD_PVDSATII0 560 #define B4SOI_MOD_PLII 561 #define B4SOI_MOD_PESATII 562 #define B4SOI_MOD_PSII0 563 #define B4SOI_MOD_PSII1 564 #define B4SOI_MOD_PSII2 565 #define B4SOI_MOD_PSIID 566 #define B4SOI_MOD_PAGIDL 567 #define B4SOI_MOD_PBGIDL 568 #define B4SOI_MOD_PEGIDL 569 #define B4SOI_MOD_PNTUNS 570 /* v4.0 */ #define B4SOI_MOD_PNDIODES 571 #define B4SOI_MOD_PNRECF0S 572 #define B4SOI_MOD_PNRECR0S 573 #define B4SOI_MOD_PISBJT 574 #define B4SOI_MOD_PISDIF 575 #define B4SOI_MOD_PISREC 576 #define B4SOI_MOD_PISTUN 577 #define B4SOI_MOD_PVREC0S 578 #define B4SOI_MOD_PVTUN0S 579 #define B4SOI_MOD_PNBJT 580 #define B4SOI_MOD_PLBJT0 581 #define B4SOI_MOD_PVABJT 582 #define B4SOI_MOD_PAELY 583 #define B4SOI_MOD_PAHLIS 584 /* v4.0 */ #define B4SOI_MOD_PVSDFB 585 #define B4SOI_MOD_PVSDTH 586 #define B4SOI_MOD_PDELVT 587 #define B4SOI_MOD_PACDE 588 #define B4SOI_MOD_PMOIN 589 #define B4SOI_MOD_PXRCRG1 590 /* v3.1 for RF */ #define B4SOI_MOD_PXRCRG2 591 /* v3.1 for RF */ #define B4SOI_MOD_EM 592 /* v3.2 for noise */ #define B4SOI_MOD_EF 593 /* v3.2 for noise */ #define B4SOI_MOD_AF 594 /* v3.2 for noise */ #define B4SOI_MOD_KF 595 /* v3.2 for noise */ #define B4SOI_MOD_NOIF 596 /* v3.2 for noise */ #define B4SOI_MOD_BF 597 /* v4.0 for noise */ #define B4SOI_MOD_W0FLK 598 /* v4.0 for noise */ #define B4SOI_MOD_FRBODY 599 /* v4.0 for Rbody */ #define B4SOI_MOD_CGIDL 600 /* v4.0 for gidl */ #define B4SOI_MOD_LCGIDL 601 /* v4.0 for gidl */ #define B4SOI_MOD_WCGIDL 602 /* v4.0 for gidl */ #define B4SOI_MOD_PCGIDL 603 /* v4.0 for gidl */ #define B4SOI_MOD_LPEB 604 /* v4.0 for Vth */ #define B4SOI_MOD_LLPEB 605 /* v4.0 for Vth */ #define B4SOI_MOD_WLPEB 606 /* v4.0 for Vth */ #define B4SOI_MOD_PLPEB 607 /* v4.0 for Vth */ #define B4SOI_MOD_DVTP0 608 /* v4.0 for Vth */ #define B4SOI_MOD_LDVTP0 609 /* v4.0 for Vth */ #define B4SOI_MOD_WDVTP0 610 /* v4.0 for Vth */ #define B4SOI_MOD_PDVTP0 611 /* v4.0 for Vth */ #define B4SOI_MOD_DVTP1 612 /* v4.0 for Vth */ #define B4SOI_MOD_LDVTP1 613 /* v4.0 for Vth */ #define B4SOI_MOD_WDVTP1 614 /* v4.0 for Vth */ #define B4SOI_MOD_PDVTP1 615 /* v4.0 for Vth */ #define B4SOI_MOD_MINV 616 /* v4.0 for Vgsteff */ #define B4SOI_MOD_LMINV 617 /* v4.0 for Vgsteff */ #define B4SOI_MOD_WMINV 618 /* v4.0 for Vgsteff */ #define B4SOI_MOD_PMINV 619 /* v4.0 for Vgsteff */ #define B4SOI_MOD_FPROUT 620 /* v4.0 for DITS in Id */ #define B4SOI_MOD_LFPROUT 621 /* v4.0 for DITS in Id */ #define B4SOI_MOD_WFPROUT 622 /* v4.0 for DITS in Id */ #define B4SOI_MOD_PFPROUT 623 /* v4.0 for DITS in Id */ #define B4SOI_MOD_PDITS 624 /* v4.0 for DITS in Id */ #define B4SOI_MOD_LPDITS 625 /* v4.0 for DITS in Id */ #define B4SOI_MOD_WPDITS 626 /* v4.0 for DITS in Id */ #define B4SOI_MOD_PPDITS 627 /* v4.0 for DITS in Id */ #define B4SOI_MOD_PDITSD 628 /* v4.0 for DITS in Id */ #define B4SOI_MOD_LPDITSD 629 /* v4.0 for DITS in Id */ #define B4SOI_MOD_WPDITSD 630 /* v4.0 for DITS in Id */ #define B4SOI_MOD_PPDITSD 631 /* v4.0 for DITS in Id */ #define B4SOI_MOD_PDITSL 632 /* v4.0 for DITS in Id */ #define B4SOI_MOD_NDIODED 633 /* v4.0 */ #define B4SOI_MOD_LNDIODED 634 /* v4.0 */ #define B4SOI_MOD_WNDIODED 635 /* v4.0 */ #define B4SOI_MOD_PNDIODED 636 /* v4.0 */ #define B4SOI_MOD_IDDIF 637 /* v4.0 */ #define B4SOI_MOD_LIDDIF 638 /* v4.0 */ #define B4SOI_MOD_WIDDIF 639 /* v4.0 */ #define B4SOI_MOD_PIDDIF 640 /* v4.0 */ #define B4SOI_MOD_IDBJT 641 /* v4.0 */ #define B4SOI_MOD_LIDBJT 642 /* v4.0 */ #define B4SOI_MOD_WIDBJT 643 /* v4.0 */ #define B4SOI_MOD_PIDBJT 644 /* v4.0 */ #define B4SOI_MOD_IDREC 645 /* v4.0 */ #define B4SOI_MOD_LIDREC 646 /* v4.0 */ #define B4SOI_MOD_WIDREC 647 /* v4.0 */ #define B4SOI_MOD_PIDREC 648 /* v4.0 */ #define B4SOI_MOD_IDTUN 649 /* v4.0 */ #define B4SOI_MOD_LIDTUN 650 /* v4.0 */ #define B4SOI_MOD_WIDTUN 651 /* v4.0 */ #define B4SOI_MOD_PIDTUN 652 /* v4.0 */ #define B4SOI_MOD_NRECF0D 653 /* v4.0 */ #define B4SOI_MOD_LNRECF0D 654 /* v4.0 */ #define B4SOI_MOD_WNRECF0D 655 /* v4.0 */ #define B4SOI_MOD_PNRECF0D 656 /* v4.0 */ #define B4SOI_MOD_NRECR0D 657 /* v4.0 */ #define B4SOI_MOD_LNRECR0D 658 /* v4.0 */ #define B4SOI_MOD_WNRECR0D 659 /* v4.0 */ #define B4SOI_MOD_PNRECR0D 660 /* v4.0 */ #define B4SOI_MOD_VREC0D 661 /* v4.0 */ #define B4SOI_MOD_LVREC0D 662 /* v4.0 */ #define B4SOI_MOD_WVREC0D 663 /* v4.0 */ #define B4SOI_MOD_PVREC0D 664 /* v4.0 */ #define B4SOI_MOD_VTUN0D 665 /* v4.0 */ #define B4SOI_MOD_LVTUN0D 666 /* v4.0 */ #define B4SOI_MOD_WVTUN0D 667 /* v4.0 */ #define B4SOI_MOD_PVTUN0D 668 /* v4.0 */ #define B4SOI_MOD_NTUND 669 /* v4.0 */ #define B4SOI_MOD_LNTUND 670 /* v4.0 */ #define B4SOI_MOD_WNTUND 671 /* v4.0 */ #define B4SOI_MOD_PNTUND 672 /* v4.0 */ #define B4SOI_MOD_RDW 673 /* v4.0 for rdsMod =1 */ #define B4SOI_MOD_LRDW 674 /* v4.0 for rdsMod =1 */ #define B4SOI_MOD_WRDW 675 /* v4.0 for rdsMod =1 */ #define B4SOI_MOD_PRDW 676 /* v4.0 for rdsMod =1 */ #define B4SOI_MOD_RSW 677 /* v4.0 for rdsMod =1 */ #define B4SOI_MOD_LRSW 678 /* v4.0 for rdsMod =1 */ #define B4SOI_MOD_WRSW 679 /* v4.0 for rdsMod =1 */ #define B4SOI_MOD_PRSW 680 /* v4.0 for rdsMod =1 */ #define B4SOI_MOD_RDWMIN 681 /* v4.0 for rdsMod =1 */ #define B4SOI_MOD_RSWMIN 682 /* v4.0 for rdsMod =1 */ #define B4SOI_MOD_AHLID 683 /* v4.0 */ #define B4SOI_MOD_LAHLID 684 /* v4.0 */ #define B4SOI_MOD_WAHLID 685 /* v4.0 */ #define B4SOI_MOD_PAHLID 686 /* v4.0 */ #define B4SOI_MOD_DVTP2 687 /* v4.1 for Vth */ #define B4SOI_MOD_LDVTP2 688 /* v4.1 for Vth */ #define B4SOI_MOD_WDVTP2 689 /* v4.1 for Vth */ #define B4SOI_MOD_PDVTP2 690 /* v4.1 for Vth */ #define B4SOI_MOD_DVTP3 691 /* v4.1 for Vth */ #define B4SOI_MOD_LDVTP3 692 /* v4.1 for Vth */ #define B4SOI_MOD_WDVTP3 693 /* v4.1 for Vth */ #define B4SOI_MOD_PDVTP3 694 /* v4.1 for Vth */ #define B4SOI_MOD_DVTP4 695 /* v4.1 for Vth */ #define B4SOI_MOD_LDVTP4 696 /* v4.1 for Vth */ #define B4SOI_MOD_WDVTP4 697 /* v4.1 for Vth */ #define B4SOI_MOD_PDVTP4 698 /* v4.1 for Vth */ #define B4SOI_MOD_AIGBCP2 10001 /* v4.1 for Ig in AGBCP2 Region */ #define B4SOI_MOD_LAIGBCP2 10002 /* v4.1 for Ig in AGBCP2 Region */ #define B4SOI_MOD_WAIGBCP2 10003 /* v4.1 for Ig in AGBCP2 Region */ #define B4SOI_MOD_PAIGBCP2 10004 /* v4.1 for Ig in AGBCP2 Region */ #define B4SOI_MOD_BIGBCP2 10005 /* v4.1 for Ig in AGBCP2 Region */ #define B4SOI_MOD_LBIGBCP2 10006 /* v4.1 for Ig in AGBCP2 Region */ #define B4SOI_MOD_WBIGBCP2 10007 /* v4.1 for Ig in AGBCP2 Region */ #define B4SOI_MOD_PBIGBCP2 10008 /* v4.1 for Ig in AGBCP2 Region */ #define B4SOI_MOD_CIGBCP2 10009 /* v4.1 for Ig in AGBCP2 Region */ #define B4SOI_MOD_LCIGBCP2 10010 /* v4.1 for Ig in AGBCP2 Region */ #define B4SOI_MOD_WCIGBCP2 10011 /* v4.1 for Ig in AGBCP2 Region */ #define B4SOI_MOD_PCIGBCP2 10012 /* v4.1 for Ig in AGBCP2 Region */ /* Added for binning - END3 */ #define B4SOI_MOD_TNOM 701 #define B4SOI_MOD_CGSO 702 #define B4SOI_MOD_CGDO 703 #define B4SOI_MOD_CGEO 704 #define B4SOI_MOD_XPART 705 #define B4SOI_MOD_RSH 706 #define B4SOI_MOD_NMOS 814 #define B4SOI_MOD_PMOS 815 #define B4SOI_MOD_NOIA 816 #define B4SOI_MOD_NOIB 817 #define B4SOI_MOD_NOIC 818 #define B4SOI_MOD_LINT 819 #define B4SOI_MOD_LL 820 #define B4SOI_MOD_LLN 821 #define B4SOI_MOD_LW 822 #define B4SOI_MOD_LWN 823 #define B4SOI_MOD_LWL 824 #define B4SOI_MOD_WINT 827 #define B4SOI_MOD_WL 828 #define B4SOI_MOD_WLN 829 #define B4SOI_MOD_WW 830 #define B4SOI_MOD_WWN 831 #define B4SOI_MOD_WWL 832 /* v2.2.3 */ #define B4SOI_MOD_LWLC 841 #define B4SOI_MOD_LLC 842 #define B4SOI_MOD_LWC 843 #define B4SOI_MOD_WWLC 844 #define B4SOI_MOD_WLC 845 #define B4SOI_MOD_WWC 846 #define B4SOI_MOD_DTOXCV 847 #define B4SOI_MOD_DWC 848 #define B4SOI_MOD_DLC 849 #define B4SOI_MOD_PBSWGS 860 /* v4.0 */ #define B4SOI_MOD_MJSWGS 861 /* v4.0 */ #define B4SOI_MOD_CJSWGS 862 /* v4.0 */ #define B4SOI_MOD_CSDESW 863 #define B4SOI_MOD_XDIFS 870 #define B4SOI_MOD_XRECS 871 #define B4SOI_MOD_XTUNS 872 #define B4SOI_MOD_XDIFD 873 #define B4SOI_MOD_XRECD 874 #define B4SOI_MOD_XTUND 875 #define B4SOI_MOD_LXDIFS 876 #define B4SOI_MOD_LXRECS 877 #define B4SOI_MOD_LXTUNS 878 #define B4SOI_MOD_LXDIFD 879 #define B4SOI_MOD_LXRECD 880 #define B4SOI_MOD_LXTUND 881 #define B4SOI_MOD_WXDIFS 882 #define B4SOI_MOD_WXRECS 883 #define B4SOI_MOD_WXTUNS 884 #define B4SOI_MOD_WXDIFD 885 #define B4SOI_MOD_WXRECD 886 #define B4SOI_MOD_WXTUND 887 #define B4SOI_MOD_PXDIFS 888 #define B4SOI_MOD_PXRECS 889 #define B4SOI_MOD_PXTUNS 890 #define B4SOI_MOD_PXDIFD 891 #define B4SOI_MOD_PXRECD 892 #define B4SOI_MOD_PXTUND 893 #define B4SOI_MOD_TCJSWGS 894 #define B4SOI_MOD_TPBSWGS 895 #define B4SOI_MOD_TCJSWGD 896 #define B4SOI_MOD_TPBSWGD 897 /* device questions */ #define B4SOI_DNODE 901 #define B4SOI_GNODE 902 #define B4SOI_SNODE 903 #define B4SOI_BNODE 904 #define B4SOI_ENODE 905 #define B4SOI_DNODEPRIME 906 #define B4SOI_SNODEPRIME 907 #define B4SOI_VBD 908 #define B4SOI_VBS 909 #define B4SOI_VGS 910 #define B4SOI_VES 911 #define B4SOI_VDS 912 #define B4SOI_CD 913 #define B4SOI_CBS 914 #define B4SOI_CBD 915 #define B4SOI_GM 916 #define B4SOI_GDS 917 #define B4SOI_GMBS 918 #define B4SOI_GBD 919 #define B4SOI_GBS 920 #define B4SOI_QB 921 #define B4SOI_CQB 922 #define B4SOI_QG 923 #define B4SOI_CQG 924 #define B4SOI_QD 925 #define B4SOI_CQD 926 #define B4SOI_CGG 927 #define B4SOI_CGD 928 #define B4SOI_CGS 929 #define B4SOI_CBG 930 #define B4SOI_CAPBD 931 #define B4SOI_CQBD 932 #define B4SOI_CAPBS 933 #define B4SOI_CQBS 934 #define B4SOI_CDG 935 #define B4SOI_CDD 936 #define B4SOI_CDS 937 #define B4SOI_VON 938 #define B4SOI_VDSAT 939 #define B4SOI_QBS 940 #define B4SOI_QBD 941 #define B4SOI_SOURCECONDUCT 942 #define B4SOI_DRAINCONDUCT 943 #define B4SOI_CBDB 944 #define B4SOI_CBSB 945 #define B4SOI_GMID 946 #define B4SOI_QS 955 /* For debugging only */ #define B4SOI_DEBUG1 956 #define B4SOI_DEBUG2 957 #define B4SOI_DEBUG3 958 /* End debugging */ /* v3.1 added for RF */ #define B4SOI_GNODEEXT 947 #define B4SOI_GNODEMID 948 /* v3.1 added for RF end */ /* v4.0 */ #define B4SOI_DBNODE 949 #define B4SOI_SBNODE 950 /* v4.0 end */ /*4.1 mobmod=4*/ /*#define B4SOI_VGSTEFFVTH 3300*/ /*#define B4SOI_VTFBPHI1 3301*/ /*#define B4SOI_EG 3350*/ #define B4SOI_MOD_UD 3400 #define B4SOI_MOD_LUD 3401 #define B4SOI_MOD_WUD 3402 #define B4SOI_MOD_PUD 3403 #define B4SOI_MOD_UD1 3404 #define B4SOI_MOD_LUD1 3405 #define B4SOI_MOD_WUD1 3406 #define B4SOI_MOD_PUD1 3407 #define B4SOI_MOD_EU 3500 #define B4SOI_MOD_LEU 3501 #define B4SOI_MOD_WEU 3502 #define B4SOI_MOD_PEU 3503 #define B4SOI_MOD_UCS 3504 #define B4SOI_MOD_LUCS 3505 #define B4SOI_MOD_WUCS 3506 #define B4SOI_MOD_PUCS 3507 #define B4SOI_MOD_UCSTE 3508 #define B4SOI_MOD_LUCSTE 3509 #define B4SOI_MOD_WUCSTE 3510 #define B4SOI_MOD_PUCSTE 3511 /*4.1 Iii model*/ #define B4SOI_MOD_IIIMOD 4000 #define B4SOI_MOD_TVBCI 4001 #define B4SOI_MOD_EBJTII 4002 #define B4SOI_MOD_CBJTII 4003 #define B4SOI_MOD_VBCI 4004 #define B4SOI_MOD_ABJTII 4005 #define B4SOI_MOD_MBJTII 4006 #define B4SOI_MOD_LEBJTII 4007 #define B4SOI_MOD_LCBJTII 4008 #define B4SOI_MOD_LVBCI 4009 #define B4SOI_MOD_LABJTII 4010 #define B4SOI_MOD_LMBJTII 4011 #define B4SOI_MOD_WEBJTII 4012 #define B4SOI_MOD_WCBJTII 4013 #define B4SOI_MOD_WVBCI 4014 #define B4SOI_MOD_WABJTII 4015 #define B4SOI_MOD_WMBJTII 4016 #define B4SOI_MOD_PEBJTII 4017 #define B4SOI_MOD_PCBJTII 4018 #define B4SOI_MOD_PVBCI 4019 #define B4SOI_MOD_PABJTII 4020 #define B4SOI_MOD_PMBJTII 4021 #define B4SOI_MOD_EGISL 2500 #define B4SOI_MOD_AGISL 2501 #define B4SOI_MOD_BGISL 2502 #define B4SOI_MOD_CGISL 2503 #define B4SOI_MOD_RGISL 2504 #define B4SOI_MOD_KGISL 2505 #define B4SOI_MOD_FGISL 2506 #define B4SOI_MOD_LEGISL 2507 #define B4SOI_MOD_WEGISL 2508 #define B4SOI_MOD_PEGISL 2509 #define B4SOI_MOD_LAGISL 2510 #define B4SOI_MOD_WAGISL 2511 #define B4SOI_MOD_PAGISL 2512 #define B4SOI_MOD_LBGISL 2513 #define B4SOI_MOD_WBGISL 2514 #define B4SOI_MOD_PBGISL 2515 #define B4SOI_MOD_LCGISL 2516 #define B4SOI_MOD_WCGISL 2517 #define B4SOI_MOD_PCGISL 2518 #define B4SOI_MOD_LRGISL 2519 #define B4SOI_MOD_WRGISL 2520 #define B4SOI_MOD_PRGISL 2521 #define B4SOI_MOD_LKGISL 2522 #define B4SOI_MOD_WKGISL 2523 #define B4SOI_MOD_PKGISL 2524 #define B4SOI_MOD_LFGISL 2525 #define B4SOI_MOD_WFGISL 2526 #define B4SOI_MOD_PFGISL 2527 #define B4SOI_IGISL 3001 #define B4SOI_IBS 3002 #define B4SOI_IBD 3003 #define B4SOI_ISUB 3004 #define B4SOI_IGIDL 3005 #define B4SOI_IGS 3006 #define B4SOI_IGD 3007 #define B4SOI_IGB 3008 #define B4SOI_IGCS 3009 #define B4SOI_IGCD 3010 /* v3.2 */ #define B4SOI_MOD_TNOIA 951 #define B4SOI_MOD_TNOIB 952 #define B4SOI_MOD_RNOIA 953 #define B4SOI_MOD_RNOIB 954 #define B4SOI_MOD_NTNOI 955 #define B4SOI_MOD_FNOIMOD 956 #define B4SOI_MOD_TNOIMOD 957 #define B4SOI_MOD_NOFF 958 #define B4SOI_MOD_LNOFF 959 #define B4SOI_MOD_WNOFF 960 #define B4SOI_MOD_PNOFF 961 #define B4SOI_MOD_TOXM 962 #define B4SOI_MOD_VBS0PD 963 #define B4SOI_MOD_VBS0FD 964 /* v3.2 */ /* v4.0 added for stress */ #define B4SOI_MOD_SAREF 965 #define B4SOI_MOD_SBREF 966 #define B4SOI_MOD_KU0 967 #define B4SOI_MOD_KVSAT 968 #define B4SOI_MOD_TKU0 969 #define B4SOI_MOD_LLODKU0 970 #define B4SOI_MOD_WLODKU0 971 #define B4SOI_MOD_LLODVTH 972 #define B4SOI_MOD_WLODVTH 973 #define B4SOI_MOD_LKU0 974 #define B4SOI_MOD_WKU0 975 #define B4SOI_MOD_PKU0 976 #define B4SOI_MOD_KVTH0 977 #define B4SOI_MOD_LKVTH0 978 #define B4SOI_MOD_WKVTH0 979 #define B4SOI_MOD_PKVTH0 980 #define B4SOI_MOD_WLOD 981 #define B4SOI_MOD_STK2 982 #define B4SOI_MOD_LODK2 983 #define B4SOI_MOD_STETA0 984 #define B4SOI_MOD_LODETA0 985 /* v4.0 added for stress end */ #define B4SOI_MOD_GBMIN 986 /* v4.0 */ #define B4SOI_MOD_RBDB 987 /* v4.0 */ #define B4SOI_MOD_RBSB 988 /* v4.0 */ #define B4SOI_MOD_MJSWGD 989 /* v4.0 */ #define B4SOI_MOD_CJSWGD 990 /* v4.0 */ #define B4SOI_MOD_PBSWGD 991 /* v4.0 */ /*4.1*/ #define B4SOI_MOD_VFB 1201 /* v4.1 */ #define B4SOI_MOD_LVFB 1202 /* v4.1 */ #define B4SOI_MOD_WVFB 1203 /* v4.1 */ #define B4SOI_MOD_PVFB 1204 /* v4.1 */ #define B4SOI_MOD_FDMOD 1221 #define B4SOI_MOD_VSCE 1222 #define B4SOI_MOD_CDSBS 1223 #define B4SOI_MOD_VGSTCVMOD 1224 #define B4SOI_MOD_MINVCV 1225 #define B4SOI_MOD_LMINVCV 1226 #define B4SOI_MOD_WMINVCV 1227 #define B4SOI_MOD_PMINVCV 1228 #define B4SOI_MOD_VOFFCV 1229 #define B4SOI_MOD_LVOFFCV 1230 #define B4SOI_MOD_WVOFFCV 1231 #define B4SOI_MOD_PVOFFCV 1232 /* v3.0 */ #define B4SOI_MOD_SOIMOD 1001 #define B4SOI_MOD_VBSA 1002 #define B4SOI_MOD_NOFFFD 1003 #define B4SOI_MOD_VOFFFD 1004 #define B4SOI_MOD_K1B 1005 #define B4SOI_MOD_K2B 1006 #define B4SOI_MOD_DK2B 1007 #define B4SOI_MOD_DVBD0 1008 #define B4SOI_MOD_DVBD1 1009 #define B4SOI_MOD_MOINFD 1010 /* v3.0 */ #define B4SOI_MOD_AIGC 1021 #define B4SOI_MOD_BIGC 1022 #define B4SOI_MOD_CIGC 1023 #define B4SOI_MOD_AIGSD 1024 #define B4SOI_MOD_BIGSD 1025 #define B4SOI_MOD_CIGSD 1026 #define B4SOI_MOD_NIGC 1027 #define B4SOI_MOD_PIGCD 1028 #define B4SOI_MOD_POXEDGE 1029 #define B4SOI_MOD_DLCIG 1030 #define B4SOI_MOD_LAIGC 1031 #define B4SOI_MOD_LBIGC 1032 #define B4SOI_MOD_LCIGC 1033 #define B4SOI_MOD_LAIGSD 1034 #define B4SOI_MOD_LBIGSD 1035 #define B4SOI_MOD_LCIGSD 1036 #define B4SOI_MOD_LNIGC 1037 #define B4SOI_MOD_LPIGCD 1038 #define B4SOI_MOD_LPOXEDGE 1039 #define B4SOI_MOD_WAIGC 1041 #define B4SOI_MOD_WBIGC 1042 #define B4SOI_MOD_WCIGC 1043 #define B4SOI_MOD_WAIGSD 1044 #define B4SOI_MOD_WBIGSD 1045 #define B4SOI_MOD_WCIGSD 1046 #define B4SOI_MOD_WNIGC 1047 #define B4SOI_MOD_WPIGCD 1048 #define B4SOI_MOD_WPOXEDGE 1049 #define B4SOI_MOD_PAIGC 1051 #define B4SOI_MOD_PBIGC 1052 #define B4SOI_MOD_PCIGC 1053 #define B4SOI_MOD_PAIGSD 1054 #define B4SOI_MOD_PBIGSD 1055 #define B4SOI_MOD_PCIGSD 1056 #define B4SOI_MOD_PNIGC 1057 #define B4SOI_MOD_PPIGCD 1058 #define B4SOI_MOD_PPOXEDGE 1059 /* v3.1 */ #define B4SOI_MOD_LXJ 1061 #define B4SOI_MOD_LALPHAGB1 1062 #define B4SOI_MOD_LALPHAGB2 1063 #define B4SOI_MOD_LBETAGB1 1064 #define B4SOI_MOD_LBETAGB2 1065 #define B4SOI_MOD_LNDIF 1066 #define B4SOI_MOD_LNTRECF 1067 #define B4SOI_MOD_LNTRECR 1068 #define B4SOI_MOD_LXBJT 1069 #define B4SOI_MOD_LCGDL 1073 #define B4SOI_MOD_LCGSL 1074 #define B4SOI_MOD_LCKAPPA 1075 #define B4SOI_MOD_LUTE 1078 #define B4SOI_MOD_LKT1 1079 #define B4SOI_MOD_LKT2 1080 #define B4SOI_MOD_LKT1L 1081 #define B4SOI_MOD_LUA1 1082 #define B4SOI_MOD_LUB1 1083 #define B4SOI_MOD_LUC1 1084 #define B4SOI_MOD_LAT 1085 #define B4SOI_MOD_LPRT 1086 #define B4SOI_MOD_WXJ 1091 #define B4SOI_MOD_WALPHAGB1 1092 #define B4SOI_MOD_WALPHAGB2 1093 #define B4SOI_MOD_WBETAGB1 1094 #define B4SOI_MOD_WBETAGB2 1095 #define B4SOI_MOD_WNDIF 1096 #define B4SOI_MOD_WNTRECF 1097 #define B4SOI_MOD_WNTRECR 1098 #define B4SOI_MOD_WXBJT 1099 #define B4SOI_MOD_WCGDL 2003 #define B4SOI_MOD_WCGSL 2004 #define B4SOI_MOD_WCKAPPA 2005 #define B4SOI_MOD_WUTE 2008 #define B4SOI_MOD_WKT1 2009 #define B4SOI_MOD_WKT2 2010 #define B4SOI_MOD_WKT1L 2011 #define B4SOI_MOD_WUA1 2012 #define B4SOI_MOD_WUB1 2013 #define B4SOI_MOD_WUC1 2014 #define B4SOI_MOD_WAT 2015 #define B4SOI_MOD_WPRT 2016 #define B4SOI_MOD_PXJ 2021 #define B4SOI_MOD_PALPHAGB1 2022 #define B4SOI_MOD_PALPHAGB2 2023 #define B4SOI_MOD_PBETAGB1 2024 #define B4SOI_MOD_PBETAGB2 2025 #define B4SOI_MOD_PNDIF 2026 #define B4SOI_MOD_PNTRECF 2027 #define B4SOI_MOD_PNTRECR 2028 #define B4SOI_MOD_PXBJT 2029 #define B4SOI_MOD_PCGDL 2033 #define B4SOI_MOD_PCGSL 2034 #define B4SOI_MOD_PCKAPPA 2035 #define B4SOI_MOD_PUTE 2038 #define B4SOI_MOD_PKT1 2039 #define B4SOI_MOD_PKT2 2040 #define B4SOI_MOD_PKT1L 2041 #define B4SOI_MOD_PUA1 2042 #define B4SOI_MOD_PUB1 2043 #define B4SOI_MOD_PUC1 2044 #define B4SOI_MOD_PAT 2045 #define B4SOI_MOD_PPRT 2046 /* 4.0 backward compatibility */ #define B4SOI_MOD_NGIDL 2100 #define B4SOI_MOD_LNGIDL 2101 #define B4SOI_MOD_WNGIDL 2102 #define B4SOI_MOD_PNGIDL 2103 #define B4SOI_MOD_NLX 2104 #define B4SOI_MOD_LNLX 2105 #define B4SOI_MOD_WNLX 2106 #define B4SOI_MOD_PNLX 2107 #define B4SOI_MOD_VGS_MAX 2201 #define B4SOI_MOD_VGD_MAX 2202 #define B4SOI_MOD_VGB_MAX 2203 #define B4SOI_MOD_VDS_MAX 2204 #define B4SOI_MOD_VBS_MAX 2205 #define B4SOI_MOD_VBD_MAX 2206 #define B4SOI_MOD_VGSR_MAX 2207 #define B4SOI_MOD_VGDR_MAX 2208 #define B4SOI_MOD_VGBR_MAX 2209 #define B4SOI_MOD_VBSR_MAX 2210 #define B4SOI_MOD_VBDR_MAX 2211 #include "b4soiext.h" extern void B4SOIevaluate(double,double,double,B4SOIinstance*,B4SOImodel*, double*,double*,double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, CKTcircuit*); extern int B4SOIdebug(B4SOImodel*, B4SOIinstance*, CKTcircuit*, int); extern int B4SOIcheckModel(B4SOImodel*, B4SOIinstance*, CKTcircuit*); #endif /*B4SOI*/ tmpk8ny_4pz/src/spicelib/devices/bsimsoi/Makefile.am0000644000175000017500000000160313546075722022664 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libbsim4soi.la libbsim4soi_la_SOURCES = \ b4soi.c \ b4soiacld.c \ b4soiask.c \ b4soicheck.c \ b4soicvtest.c \ b4soigetic.c \ b4soild.c \ b4soimask.c \ b4soimdel.c \ b4soimpar.c \ b4soinoi.c \ b4soipar.c \ b4soipzld.c \ b4soiset.c \ b4soisoachk.c \ b4soitemp.c \ b4soitrunc.c \ b4soidef.h \ b4soiext.h \ b4soiinit.c \ b4soiinit.h \ b4soiitf.h AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in EXTRA_DIST = BsimTerms_use tmpk8ny_4pz/src/spicelib/devices/bsimsoi/b4soitrunc.c0000644000175000017500000000316113546075722023071 0ustar carstencarsten/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/ /********** * Copyright 2010 Regents of the University of California. All rights reserved. * Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang * Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soitrunc.c * Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu. * Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu. * File: b4soitrunc.c * Modified by Hui Wan, Xuemei Xi 11/30/2005 * Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009 * Modified by Tanvir Morshed 09/22/2009 * Modified by Tanvir Morshed 12/31/2009 **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b4soidef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B4SOItrunc( GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { register B4SOImodel *model = (B4SOImodel*)inModel; register B4SOIinstance *here; #ifdef STEPDEBUG double debugtemp; #endif /* STEPDEBUG */ for (; model != NULL; model = B4SOInextModel(model)) { for (here = B4SOIinstances(model); here != NULL; here = B4SOInextInstance(here)) { #ifdef STEPDEBUG debugtemp = *timeStep; #endif /* STEPDEBUG */ CKTterr(here->B4SOIqb,ckt,timeStep); CKTterr(here->B4SOIqg,ckt,timeStep); CKTterr(here->B4SOIqd,ckt,timeStep); #ifdef STEPDEBUG if(debugtemp != *timeStep) { printf("device %s reduces step from %g to %g\n", here->B4SOIname,debugtemp,*timeStep); } #endif /* STEPDEBUG */ } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsimsoi/b4soinoi.c0000644000175000017500000007752413546075722022541 0ustar carstencarsten/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/ /********** * Copyright 2010 Regents of the University of California. All rights reserved. * Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang * Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soinoi.c * Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu. * Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu. * File: b4soinoi.c * Modified by Hui Wan, Xuemei Xi 11/30/2005 * Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009 * Modified by Tanvir Morshed 09/22/2009 * Modified by Tanvir Morshed 12/31/2009 **********/ #include "ngspice/ngspice.h" #include "b4soidef.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" #include "ngspice/const.h" /* jwan */ /* * B4SOInoise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with MOSFET's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the MOSFET's is summed with the variable "OnDens". */ /* Channel thermal and flicker noises are calculated based on the value of model->B4SOItnoiMod and model->B4SOIfnoiMod If model->B4SOItnoiMod = 0, Channel thermal noise = Charge based model If model->B4SOItnoiMod = 1, Channel thermal noise = Holistic noise model If model->B4SOItnoiMod = 2, Channel thermal noise = SPICE2 model If model->B4SOIfnoiMod = 0, Flicker noise = Simple model If model->B4SOIfnoiMod = 1, Flicker noise = Unified model */ static double B4SOIEval1ovFNoise( double vds, B4SOImodel *model, B4SOIinstance *here, double freq, double temp) { struct b4soiSizeDependParam *pParam; double cd, esat, DelClm, EffFreq, N0, Nl; double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi; pParam = here->pParam; cd = fabs(here->B4SOIcd); esat = 2.0 * here->B4SOIvsattemp / here->B4SOIueff; /* v2.2.3 bug fix */ if(model->B4SOIem<=0.0) DelClm = 0.0; else { T0 = ((((vds - here->B4SOIVdseff) / pParam->B4SOIlitl) + model->B4SOIem) / esat); DelClm = pParam->B4SOIlitl * log (MAX(T0, N_MINLOG)); } EffFreq = pow(freq, model->B4SOIef); T1 = CHARGE * CHARGE * CONSTboltz * cd * temp * here->B4SOIueff; T2 = 1.0e10 * EffFreq * here->B4SOIAbulk * model->B4SOIcox * pParam->B4SOIleff * pParam->B4SOIleff; /* v2.2.3 bug fix */ N0 = model->B4SOIcox * here->B4SOIVgsteff / CHARGE; Nl = model->B4SOIcox * here->B4SOIVgsteff * (1.0 - here->B4SOIAbovVgst2Vtm * here->B4SOIVdseff) / CHARGE; T3 = model->B4SOIoxideTrapDensityA * log(MAX(((N0 + here->B4SOInstar) / (Nl + here->B4SOInstar)), N_MINLOG)); T4 = model->B4SOIoxideTrapDensityB * (N0 - Nl); T5 = model->B4SOIoxideTrapDensityC * 0.5 * (N0 * N0 - Nl * Nl); T6 = CONSTboltz * temp * cd * cd; T7 = 1.0e10 * EffFreq * pParam->B4SOIleff * pParam->B4SOIleff * pParam->B4SOIweff * here->B4SOInf; T8 = model->B4SOIoxideTrapDensityA + model->B4SOIoxideTrapDensityB * Nl + model->B4SOIoxideTrapDensityC * Nl * Nl; T9 = (Nl + here->B4SOInstar) * (Nl + here->B4SOInstar); Ssi = T1 / T2 * (T3 + T4 + T5) + T6 / T7 * DelClm * T8 / T9; return Ssi; } int B4SOInoise ( int mode, int operation, GENmodel *inModel, CKTcircuit *ckt, Ndata *data, double *OnDens) { register B4SOImodel *model = (B4SOImodel *)inModel; register B4SOIinstance *here; struct b4soiSizeDependParam *pParam; double tempOnoise; double tempInoise; double noizDens[B4SOINSRCS]; double lnNdens[B4SOINSRCS]; double vgs, vds; double T0, T1, T2, T5, T10, T11; double Ssi, Swi; /* v3.2 */ double npart_theta, npart_beta, igsquare, esat; /* v3.2 end */ double gspr, gdpr; double tempRatioSH, Vdseffovcd; /* v4.2 bugfix */ int i; double m; /* define the names of the noise sources */ static char *B4SOInNames[B4SOINSRCS] = { /* Note that we have to keep the order */ ".rd", /* noise due to rd */ /* consistent with the index definitions */ ".rs", /* noise due to rs */ /* in B4SOIdefs.h */ ".rg", /* noise due to rgeltd, v3.2 */ ".id", /* noise due to id */ ".1overf", /* flicker (1/f) noise */ ".fb_ibs", /* noise due to floating body by ibs */ ".fb_ibd", /* noise due to floating body by ibd */ ".igs", /* shot noise due to IGS, v3.2 */ ".igd", /* shot noise due to IGD, v3.2 */ ".igb", /* shot noise due to IGB, v3.2 */ ".rbsb", /* noise due to rbsb v4.0 */ ".rbdb", /* noise due to rbdb v4.0 */ ".rbody", /* noise due to body contact v4.0 */ "" /* total transistor noise */ }; for (; model != NULL; model = B4SOInextModel(model)) { for (here = B4SOIinstances(model); here != NULL; here = B4SOInextInstance(here)) { m = here->B4SOIm; pParam = here->pParam; switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (((NOISEAN*)ckt->CKTcurJob)->NStpsSm != 0) { switch (mode) { case N_DENS: for (i = 0; i < B4SOINSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise.%s%s", here->B4SOIname, B4SOInNames[i]); } break; case INT_NOIZ: for (i = 0; i < B4SOINSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total.%s%s", here->B4SOIname, B4SOInNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total.%s%s", here->B4SOIname, B4SOInNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: /*v4.2 implementing SH temp */ if ((model->B4SOIshMod == 1) && (here->B4SOIrth0 != 0.0)) tempRatioSH = here->B4SOITempSH / ckt->CKTtemp; else tempRatioSH = 1.0; /*v4.2 implementing limit on Vdseffovcd*/ if (here->B4SOIcd != 0) { Vdseffovcd = here->B4SOIVdseff / here->B4SOIcd; if (Vdseffovcd >= 1.0e9) Vdseffovcd = 1.0e9 ; } else Vdseffovcd = 1.0e9; /* if (model->B4SOItnoiMod == 0) *//* v4.0 */ /* v4.2 bugfix: consider tnoiMod = 2*/ if (model->B4SOItnoiMod != 1) { if (model->B4SOIrdsMod == 0) { gspr = here->B4SOIsourceConductance; gdpr = here->B4SOIdrainConductance; } else { gspr = here->B4SOIgstot; gdpr = here->B4SOIgdtot; } } else { esat = 2.0 * here->B4SOIvsattemp / here->B4SOIueff; T5 = here->B4SOIVgsteff / esat / pParam->B4SOIleff; T5 *= T5; npart_beta = model->B4SOIrnoia * (1.0 + T5 * model->B4SOItnoia * pParam->B4SOIleff); npart_theta = model->B4SOIrnoib * (1.0 + T5 * model->B4SOItnoib * pParam->B4SOIleff); /* v4.2 bugfix: implement bugfix from bsim4.6.2 */ if(npart_theta > 0.9) npart_theta = 0.9; if(npart_theta > 0.9 * npart_beta) npart_theta = 0.9 * npart_beta; if (model->B4SOIrdsMod == 0) { gspr = here->B4SOIsourceConductance; gdpr = here->B4SOIdrainConductance; } else { gspr = here->B4SOIgstot; gdpr = here->B4SOIgdtot; } if ( (*(ckt->CKTstates[0] + here->B4SOIvds)) >= 0.0 ) gspr = gspr * (1.0 + npart_theta * npart_theta * gspr / here->B4SOIidovVds); else gdpr = gdpr * (1.0 + npart_theta * npart_theta * gdpr / here->B4SOIidovVds); } NevalSrc(&noizDens[B4SOIRDNOIZ], &lnNdens[B4SOIRDNOIZ], ckt, THERMNOISE, here->B4SOIdNodePrime, here->B4SOIdNode, gdpr * tempRatioSH * m); /* v4.2 self-heating temp */ NevalSrc(&noizDens[B4SOIRSNOIZ], &lnNdens[B4SOIRSNOIZ], ckt, THERMNOISE, here->B4SOIsNodePrime, here->B4SOIsNode, gspr * tempRatioSH * m); /* v4.2 self-heating temp */ /* v4.2 bugfix: implement correct thermal noise model (bsim4.6.0)*/ /* if ((here->B4SOIrgateMod == 1) || (here->B4SOIrgateMod == 2)) */ if (here->B4SOIrgateMod == 1) { NevalSrc(&noizDens[B4SOIRGNOIZ], &lnNdens[B4SOIRGNOIZ], ckt, THERMNOISE, here->B4SOIgNode, here->B4SOIgNodeExt, here->B4SOIgrgeltd * tempRatioSH * m); /* v4.2 self-heating temp */ } else if (here->B4SOIrgateMod == 2) /*v4.2*/ { T0 = 1.0 + here->B4SOIgrgeltd/here->B4SOIgcrg; T1 = T0 * T0; NevalSrc(&noizDens[B4SOIRGNOIZ], &lnNdens[B4SOIRGNOIZ], ckt, THERMNOISE, here->B4SOIgNode, here->B4SOIgNodeExt, here->B4SOIgrgeltd/T1 * tempRatioSH * m); /*v4.2*/ } else if (here->B4SOIrgateMod == 3) { NevalSrc(&noizDens[B4SOIRGNOIZ], &lnNdens[B4SOIRGNOIZ], ckt, THERMNOISE, here->B4SOIgNodeMid, here->B4SOIgNodeExt, here->B4SOIgrgeltd * tempRatioSH * m); /* v4.2 self-heating temp */ } else { noizDens[B4SOIRGNOIZ] = 0.0; lnNdens[B4SOIRGNOIZ] = log(MAX(noizDens[B4SOIRGNOIZ], N_MINLOG)); } if (here->B4SOIrbodyMod) { NevalSrc(&noizDens[B4SOIRBSBNOIZ], &lnNdens[B4SOIRBSBNOIZ], ckt, THERMNOISE, here->B4SOIbNode, here->B4SOIsbNode, here->B4SOIgrbsb * m); NevalSrc(&noizDens[B4SOIRBDBNOIZ], &lnNdens[B4SOIRBDBNOIZ], ckt, THERMNOISE, here->B4SOIbNode, here->B4SOIdbNode, here->B4SOIgrbdb * tempRatioSH * m); /* v4.2 self-heating temp */ } else { noizDens[B4SOIRBSBNOIZ] = 0.0; noizDens[B4SOIRBDBNOIZ] = 0.0; lnNdens[B4SOIRBSBNOIZ] = log(MAX(noizDens[B4SOIRBSBNOIZ], N_MINLOG)); lnNdens[B4SOIRBDBNOIZ] = log(MAX(noizDens[B4SOIRBDBNOIZ], N_MINLOG)); } if (here->B4SOIbodyMod == 1) { NevalSrc(&noizDens[B4SOIRBODYNOIZ], &lnNdens[B4SOIRBODYNOIZ], ckt, THERMNOISE, here->B4SOIbNode, here->B4SOIpNode, tempRatioSH / (here->B4SOIrbodyext + /* v4.2 self-heating temp */ pParam->B4SOIrbody) * m); } else { noizDens[B4SOIRBODYNOIZ] = 0.0; lnNdens[B4SOIRBODYNOIZ] = log(MAX(noizDens[B4SOIRBODYNOIZ], N_MINLOG)); } switch( model->B4SOItnoiMod ) { case 0: NevalSrc(&noizDens[B4SOIIDNOIZ], &lnNdens[B4SOIIDNOIZ], ckt, THERMNOISE, here->B4SOIdNodePrime, here->B4SOIsNodePrime, (here->B4SOIueff * fabs(here->B4SOIqinv / (pParam->B4SOIleff * pParam->B4SOIleff + here->B4SOIueff*fabs (here->B4SOIqinv) * here->B4SOIrds))) * tempRatioSH /* v4.2 self-heating temp */ * model->B4SOIntnoi * m ); break; /* v2.2.3 bug fix */ case 1: T0 = here->B4SOIgm + here->B4SOIgmbs + here->B4SOIgds; T0 *= T0; esat = 2.0 * here->B4SOIvsattemp / here->B4SOIueff; T5 = here->B4SOIVgsteff / esat / pParam->B4SOIleff; T5 *= T5; npart_beta = model->B4SOIrnoia * (1.0 + T5 * model->B4SOItnoia * pParam->B4SOIleff); npart_theta = model->B4SOIrnoib * (1.0 + T5 * model->B4SOItnoib * pParam->B4SOIleff); /*igsquare = npart_theta * npart_theta * T0 * here->B4SOIVdseff / here->B4SOIcd; v4.2 implementing limit on Vdseffovcd*/ igsquare = npart_theta * npart_theta * T0 * Vdseffovcd; T1 = npart_beta * (here->B4SOIgm + here->B4SOIgmbs) + here->B4SOIgds; /*T2 = T1 * T1 * here->B4SOIVdseff / here->B4SOIcd; v4.2 implementing limit on Vdseffovcd*/ T2 = T1 * T1 * Vdseffovcd; NevalSrc(&noizDens[B4SOIIDNOIZ], &lnNdens[B4SOIIDNOIZ], ckt, THERMNOISE, here->B4SOIdNodePrime, here->B4SOIsNodePrime, /* (T2 - igsquare)); */ (T2 - igsquare) * tempRatioSH * m); /* v4.2 self-heating temp */ break; case 2: NevalSrc(&noizDens[B4SOIIDNOIZ], &lnNdens[B4SOIIDNOIZ], ckt, THERMNOISE, here->B4SOIdNodePrime, here->B4SOIsNodePrime, model->B4SOIntnoi * tempRatioSH * /* v4.2 self-heating temp */ (2.0 / 3.0 * fabs(here->B4SOIgm + here->B4SOIgds + here->B4SOIgmbs)) * m); break; } NevalSrc(&noizDens[B4SOIFLNOIZ], (double*) NULL, ckt, N_GAIN, here->B4SOIdNodePrime, here->B4SOIsNodePrime, (double) 0.0); switch( model->B4SOIfnoiMod ) { case 0: if (model->B4SOIw0flk > 0) { /* v4.0 */ noizDens[B4SOIFLNOIZ] *= m * here->B4SOInf * pParam->B4SOIweff/model->B4SOIw0flk * model->B4SOIkf * exp(model->B4SOIaf * log(MAX(fabs(here->B4SOIcd / pParam->B4SOIweff / here->B4SOInf * model->B4SOIw0flk), N_MINLOG))) / (pow(data->freq, model->B4SOIef) * pow(pParam->B4SOIleff, model->B4SOIbf) * model->B4SOIcox); break; } else { noizDens[B4SOIFLNOIZ] *= m * model->B4SOIkf * exp(model->B4SOIaf * log(MAX(fabs(here->B4SOIcd), N_MINLOG))) / (pow(data->freq, model->B4SOIef) * pow(pParam->B4SOIleff, model->B4SOIbf) * model->B4SOIcox); break; } case 1: vgs = *(ckt->CKTstates[0] + here->B4SOIvgs); vds = *(ckt->CKTstates[0] + here->B4SOIvds); if (vds < 0.0) { vds = -vds; vgs = vgs + vds; } /*v4.2 implementing SH temp */ if ((model->B4SOIshMod == 1) && (here->B4SOIrth0 != 0.0)) Ssi = B4SOIEval1ovFNoise(vds, model, here, data->freq, here->B4SOITempSH); else Ssi = B4SOIEval1ovFNoise(vds, model, here, data->freq, ckt->CKTtemp); /*v4.2 implementing SH temp */ /*v4.2 implementing SH temp */ if ((model->B4SOIshMod == 1) && (here->B4SOIrth0 != 0.0)) T10 = model->B4SOIoxideTrapDensityA * CONSTboltz * here->B4SOITempSH; else T10 = model->B4SOIoxideTrapDensityA * CONSTboltz * ckt->CKTtemp; /*v4.2 implementing SH temp */ T11 = pParam->B4SOIweff * here->B4SOInf * pParam->B4SOIleff * pow(data->freq, model->B4SOIef) * 1.0e10 * here->B4SOInstar * here->B4SOInstar ; Swi = T10 / T11 * here->B4SOIcd * here->B4SOIcd; T1 = Swi + Ssi; if (T1 > 0.0) noizDens[B4SOIFLNOIZ] *= m * (Ssi * Swi) / T1; else noizDens[B4SOIFLNOIZ] *= 0.0; break; } lnNdens[B4SOIFLNOIZ] = log(MAX(noizDens[B4SOIFLNOIZ], N_MINLOG)); /* v3.2 for gate tunneling shot noise */ NevalSrc(&noizDens[B4SOIIGSNOIZ], &lnNdens[B4SOIIGSNOIZ], ckt, SHOTNOISE, here->B4SOIgNode, here->B4SOIsNodePrime, (here->B4SOIIgs + here->B4SOIIgcs) * m); NevalSrc(&noizDens[B4SOIIGDNOIZ], &lnNdens[B4SOIIGDNOIZ], ckt, SHOTNOISE, here->B4SOIgNode, here->B4SOIdNodePrime, (here->B4SOIIgd + here->B4SOIIgcd) * m); NevalSrc(&noizDens[B4SOIIGBNOIZ], &lnNdens[B4SOIIGBNOIZ], ckt, SHOTNOISE, here->B4SOIgNode, here->B4SOIbNode, here->B4SOIig * m); /* v3.2 for gate tunneling shot noise end */ /* Low frequency excess noise due to FBE */ /* NevalSrc(&noizDens[B4SOIFBNOIZ], &lnNdens[B4SOIFBNOIZ], ckt, SHOTNOISE, here->B4SOIsNodePrime, here->B4SOIbNode, 2.0 * model->B4SOInoif * here->B4SOIibs); */ /* v4.0 */ NevalSrc(&noizDens[B4SOIFB_IBSNOIZ], &lnNdens[B4SOIFB_IBSNOIZ], ckt, SHOTNOISE, here->B4SOIsNodePrime, here->B4SOIbNode, model->B4SOInoif * here->B4SOIibs * m); /* NevalSrc(&noizDens[B4SOIFB_IBDNOIZ], &lnNdens[B4SOIFB_IBDNOIZ], ckt, SHOTNOISE, here->B4SOIdNodePrime, here->B4SOIbNode, model->B4SOInoif * fabs(here->B4SOIibd)); */ /*v4.2*/ NevalSrc(&noizDens[B4SOIFB_IBDNOIZ], &lnNdens[B4SOIFB_IBDNOIZ], ckt, SHOTNOISE, here->B4SOIdNodePrime, here->B4SOIbNode, model->B4SOInoif * (here->B4SOIibd) * m); /*v4.2 extra fabs()removed */ noizDens[B4SOITOTNOIZ] = noizDens[B4SOIRDNOIZ] + noizDens[B4SOIRSNOIZ] + noizDens[B4SOIRGNOIZ] + noizDens[B4SOIIDNOIZ] + noizDens[B4SOIFLNOIZ] /* + noizDens[B4SOIFBNOIZ] */ + noizDens[B4SOIFB_IBSNOIZ] + noizDens[B4SOIFB_IBDNOIZ] + noizDens[B4SOIIGSNOIZ] + noizDens[B4SOIIGDNOIZ] + noizDens[B4SOIIGBNOIZ] + noizDens[B4SOIRBSBNOIZ] + noizDens[B4SOIRBDBNOIZ] + noizDens[B4SOIRBODYNOIZ]; lnNdens[B4SOITOTNOIZ] = log(MAX(noizDens[B4SOITOTNOIZ], N_MINLOG)); *OnDens += noizDens[B4SOITOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to initialize our "history" variables. */ for (i = 0; i < B4SOINSRCS; i++) { here->B4SOInVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == ((NOISEAN*) ckt->CKTcurJob)->NstartFreq) { for (i = 0; i < B4SOINSRCS; i++) { here->B4SOInVar[OUTNOIZ][i] = 0.0; here->B4SOInVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0, we have to integrate. */ for (i = 0; i < B4SOINSRCS; i++) { if (i != B4SOITOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], here->B4SOInVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv, lnNdens[i] + data->lnGainInv, here->B4SOInVar[LNLSTDENS][i] + data->lnGainInv, data); here->B4SOInVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (((NOISEAN*) ckt->CKTcurJob)->NStpsSm != 0) { here->B4SOInVar[OUTNOIZ][i] += tempOnoise; here->B4SOInVar[OUTNOIZ][B4SOITOTNOIZ] += tempOnoise; here->B4SOInVar[INNOIZ][i] += tempInoise; here->B4SOInVar[INNOIZ][B4SOITOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i = 0; i < B4SOINSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (((NOISEAN*)ckt->CKTcurJob)->NStpsSm != 0) { for (i = 0; i < B4SOINSRCS; i++) { data->outpVector[data->outNumber++] = here->B4SOInVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = here->B4SOInVar[INNOIZ][i]; } } break; } break; case N_CLOSE: /* do nothing, the main calling routine will close */ return (OK); break; /* the plots */ } /* switch (operation) */ } /* for here */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsimsoi/b4soiacld.c0000644000175000017500000010010613546075722022636 0ustar carstencarsten/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/ /********** * Copyright 2010 Regents of the University of California. All rights reserved. * Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang * Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soiacld.c * Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu. * Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu. * Authors: 2010- Tanvir Morshed, Ali Niknejad, Chenming Hu. * File: b4soiacld.c * Modified by Hui Wan, Xuemei Xi 11/30/2005 * Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009 * Modified by Tanvir Morshed 09/22/2009 **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b4soidef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B4SOIacLoad( GENmodel *inModel, CKTcircuit *ckt) { register B4SOImodel *model = (B4SOImodel*)inModel; register B4SOIinstance *here; register int selfheat; double xcggb, xcgdb, xcgsb, xcgeb, xcgT; double xcdgb, xcddb, xcdsb, xcdeb, xcdT; double xcsgb, xcsdb, xcssb, xcseb, xcsT; double xcbgb, xcbdb, xcbsb, xcbeb, xcbT; double xcegb, xceeb, xceT; double gdpr, gspr, gds; double cggb, cgdb, cgsb, cgT; double cdgb, cddb, cdsb, cdeb, cdT; double cbgb, cbdb, cbsb, cbeb, cbT; double ceeb, ceT; double GSoverlapCap, GDoverlapCap, GEoverlapCap, FwdSum, RevSum, Gm, Gmbs, GmT; double omega; double dxpart, sxpart; double gbbg, gbbdp, gbbb, gbbp, gbbsp, gbbT; double gddpg, gddpdp, gddpsp, gddpb, gddpT; double gsspg, gsspdp, gsspsp, gsspb, gsspT; double gppb, gppp; double xcTt, cTt, gTtt, gTtg, gTtb, gTtdp, gTtsp; double EDextrinsicCap, ESextrinsicCap; double xcedb, xcesb; /* v3.0 */ double Gme, gddpe, gsspe, gbbe, gTte; /* v3.1 added variables for RF */ double T0=0.0; double gcrgd, gcrgg, gcrgs, gcrgb, gcrg; double xcgmgmb, xcgmdb, xcgmsb, xcgmeb, xcdgmb, xcsgmb, xcegmb; double geltd; double gigg, gigd, gigs, gigb, gige, gigT; double gigpg, gigpp; /* v3.1.1 bug fix */ double gIstotg, gIstotd, gIstotb, gIstots; double gIdtotg, gIdtotd, gIdtotb, gIdtots; double gIgtotg, gIgtotd, gIgtotb, gIgtots; /* v4.0 */ double xcdbb, xcsbb, xcdbdb, xcsbsb, xcjdbdp, xcjsbsp; double gstot, gstotd, gstotg, gstots, gstotb; double gdtot, gdtotd, gdtotg, gdtots, gdtotb; double m; omega = ckt->CKTomega; for (; model != NULL; model = B4SOInextModel(model)) { for (here = B4SOIinstances(model); here!= NULL; here = B4SOInextInstance(here)) { selfheat = (model->B4SOIshMod == 1) && (here->B4SOIrth0 != 0.0); if (here->B4SOImode >= 0) { Gm = here->B4SOIgm; Gmbs = here->B4SOIgmbs; /* v3.0 */ Gme = here->B4SOIgme; GmT = model->B4SOItype * here->B4SOIgmT; FwdSum = Gm + Gmbs + Gme; /* v3.0 */ RevSum = 0.0; cbgb = here->B4SOIcbgb; cbsb = here->B4SOIcbsb; cbdb = here->B4SOIcbdb; cbeb = here->B4SOIcbeb; cbT = model->B4SOItype * here->B4SOIcbT; ceeb = here->B4SOIceeb; ceT = model->B4SOItype * here->B4SOIceT; cggb = here->B4SOIcggb; cgsb = here->B4SOIcgsb; cgdb = here->B4SOIcgdb; cgT = model->B4SOItype * here->B4SOIcgT; cdgb = here->B4SOIcdgb; cdsb = here->B4SOIcdsb; cddb = here->B4SOIcddb; cdeb = here->B4SOIcdeb; cdT = model->B4SOItype * here->B4SOIcdT; cTt = here->pParam->B4SOIcth; /* v3.1 bug fix */ gigg = here->B4SOIgigg; gigb = here->B4SOIgigb; gige = here->B4SOIgige; gigs = here->B4SOIgigs; gigd = here->B4SOIgigd; gigT = model->B4SOItype * here->B4SOIgigT; /* v4.1 */ gigpg = here->B4SOIgigpg; gigpp = here->B4SOIgigpp; gbbg = -here->B4SOIgbgs; gbbdp = -here->B4SOIgbds; gbbb = -here->B4SOIgbbs; gbbp = -here->B4SOIgbps; gbbT = -model->B4SOItype * here->B4SOIgbT; gbbe = -here->B4SOIgbes; if (here->B4SOIrbodyMod) { /* v4.0 */ gbbdp = -here->B4SOIgiigidld; gbbb = -here->B4SOIgbgiigbpb; } gbbsp = - ( gbbg + gbbdp + gbbb + gbbp + gbbe); gddpg = -here->B4SOIgjdg; gddpdp = -here->B4SOIgjdd; if (!here->B4SOIrbodyMod) /* v4.0 */ gddpb = -here->B4SOIgjdb; else gddpb = here->B4SOIgiigidlb; gddpT = -model->B4SOItype * here->B4SOIgjdT; /* v3.0 */ gddpe = -here->B4SOIgjde; gddpsp = - ( gddpg + gddpdp + gddpb + gddpe); gsspg = -here->B4SOIgjsg; gsspdp = -here->B4SOIgjsd; if (!here->B4SOIrbodyMod) /* v4.0 */ gsspb = -here->B4SOIgjsb; else gsspb = 0.0; gsspT = -model->B4SOItype * here->B4SOIgjsT; gsspe = 0.0; gsspsp = - (gsspg + gsspdp + gsspb + gsspe); gppb = -here->B4SOIgbpbs; gppp = -here->B4SOIgbpps; gTtg = here->B4SOIgtempg; gTtb = here->B4SOIgtempb; gTtdp = here->B4SOIgtempd; gTtt = here->B4SOIgtempT; /* v3.0 */ gTte = here->B4SOIgtempe; gTtsp = - (gTtg + gTtb + gTtdp + gTte); /* v3.1.1 bug fix */ if (model->B4SOIigcMod) { gIstotg = here->B4SOIgIgsg + here->B4SOIgIgcsg; gIstotd = here->B4SOIgIgcsd; gIstots = here->B4SOIgIgss + here->B4SOIgIgcss; gIstotb = here->B4SOIgIgcsb; gIdtotg = here->B4SOIgIgdg + here->B4SOIgIgcdg; gIdtotd = here->B4SOIgIgdd + here->B4SOIgIgcdd; gIdtots = here->B4SOIgIgcds; gIdtotb = here->B4SOIgIgcdb; gIgtotg = gIstotg + gIdtotg; gIgtotd = gIstotd + gIdtotd; gIgtots = gIstots + gIdtots; gIgtotb = gIstotb + gIdtotb; } else { gIstotg = gIstotd = gIstots = gIstotb = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = 0.0; gIgtotg = gIgtotd = gIgtots = gIgtotb = 0.0; } sxpart = 0.6; dxpart = 0.4; /* v3.1 for RF */ if (here->B4SOIrgateMod == 2) T0 = *(ckt->CKTstates[0] + here->B4SOIvges) - *(ckt->CKTstates[0] + here->B4SOIvgs); else if (here->B4SOIrgateMod == 3) T0 = *(ckt->CKTstates[0] + here->B4SOIvgms) - *(ckt->CKTstates[0] + here->B4SOIvgs); if (here->B4SOIrgateMod > 1) { gcrgd = here->B4SOIgcrgd * T0; gcrgg = here->B4SOIgcrgg * T0; gcrgs = here->B4SOIgcrgs * T0; gcrgb = here->B4SOIgcrgb * T0; gcrgg -= here->B4SOIgcrg; gcrg = here->B4SOIgcrg; } else gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; /* v3.1 for RF end*/ } else { Gm = -here->B4SOIgm; Gmbs = -here->B4SOIgmbs; /* v3.0 */ Gme = -here->B4SOIgme; GmT = -model->B4SOItype * here->B4SOIgmT; FwdSum = 0.0; RevSum = -Gm - Gmbs - Gme; /* v3.0 */ cdgb = - (here->B4SOIcdgb + here->B4SOIcggb + here->B4SOIcbgb); cdsb = - (here->B4SOIcddb + here->B4SOIcgdb + here->B4SOIcbdb); cddb = - (here->B4SOIcdsb + here->B4SOIcgsb + here->B4SOIcbsb); cdeb = - (here->B4SOIcdeb + here->B4SOIcbeb + here->B4SOIceeb); cdT = - model->B4SOItype * (here->B4SOIcgT + here->B4SOIcbT + here->B4SOIcdT + here->B4SOIceT); ceeb = here->B4SOIceeb; ceT = model->B4SOItype * here->B4SOIceT; cggb = here->B4SOIcggb; cgsb = here->B4SOIcgdb; cgdb = here->B4SOIcgsb; cgT = model->B4SOItype * here->B4SOIcgT; cbgb = here->B4SOIcbgb; cbsb = here->B4SOIcbdb; cbdb = here->B4SOIcbsb; cbeb = here->B4SOIcbeb; cbT = model->B4SOItype * here->B4SOIcbT; cTt = here->pParam->B4SOIcth; /* v3.1 bug fix */ gigg = here->B4SOIgigg; gigb = here->B4SOIgigb; gige = here->B4SOIgige; gigs = here->B4SOIgigd; /* v3.1.1 bug fix */ gigd = here->B4SOIgigs; /* v3.1.1 bug fix */ gigT = model->B4SOItype * here->B4SOIgigT; gigpg = here->B4SOIgigpg;/* bugfix_snps for setting gigpg gigpp*/ gigpp = here->B4SOIgigpp; gbbg = -here->B4SOIgbgs; gbbb = -here->B4SOIgbbs; gbbp = -here->B4SOIgbps; gbbsp = -here->B4SOIgbds; gbbT = -model->B4SOItype * here->B4SOIgbT; /* v3.0 */ gbbe = -here->B4SOIgbes; if (here->B4SOIrbodyMod) { /* v4.0 */ gbbsp = -here->B4SOIgiigidld; gbbb = -here->B4SOIgbgiigbpb; } gbbdp = - ( gbbg + gbbsp + gbbb + gbbp + gbbe); gddpg = -here->B4SOIgjsg; gddpsp = -here->B4SOIgjsd; if (!here->B4SOIrbodyMod) /* v4.0 */ gddpb = -here->B4SOIgjsb; else gddpb = 0.0; gddpT = -model->B4SOItype * here->B4SOIgjsT; /* v3.0 */ gddpe = 0.0; gddpdp = - (gddpg + gddpsp + gddpb + gddpe ); gsspg = -here->B4SOIgjdg; gsspsp = -here->B4SOIgjdd; if (!here->B4SOIrbodyMod) /* v4.0 */ gsspb = -here->B4SOIgjdb; else gsspb = here->B4SOIgiigidlb; gsspT = -model->B4SOItype * here->B4SOIgjdT; /* v3.0 */ gsspe = -here->B4SOIgjde; gsspdp = - ( gsspg + gsspsp + gsspb + gsspe ); gppb = -here->B4SOIgbpbs; gppp = -here->B4SOIgbpps; gTtg = here->B4SOIgtempg; gTtb = here->B4SOIgtempb; gTtsp = here->B4SOIgtempd; gTtt = here->B4SOIgtempT; /* v3.0 */ gTte = here->B4SOIgtempe; gTtdp = - (gTtg + gTtb + gTtsp + gTte); /* v3.1.1 bug fix */ if (model->B4SOIigcMod) { gIstotg = here->B4SOIgIgsg + here->B4SOIgIgcdg; gIstotd = here->B4SOIgIgcds; gIstots = here->B4SOIgIgss + here->B4SOIgIgcdd; gIstotb = here->B4SOIgIgcdb; gIdtotg = here->B4SOIgIgdg + here->B4SOIgIgcsg; gIdtotd = here->B4SOIgIgdd + here->B4SOIgIgcss; gIdtots = here->B4SOIgIgcsd; gIdtotb = here->B4SOIgIgcsb; gIgtotg = gIstotg + gIdtotg; gIgtotd = gIstotd + gIdtotd; gIgtots = gIstots + gIdtots; gIgtotb = gIstotb + gIdtotb; } else { gIstotg = gIstotd = gIstots = gIstotb = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = 0.0; gIgtotg = gIgtotd = gIgtots = gIgtotb = 0.0; } sxpart = 0.4; dxpart = 0.6; /* v3.1 for RF */ if (here->B4SOIrgateMod == 2) T0 = *(ckt->CKTstates[0] + here->B4SOIvges) - *(ckt->CKTstates[0] + here->B4SOIvgs); else if (here->B4SOIrgateMod == 3) T0 = *(ckt->CKTstates[0] + here->B4SOIvgms) - *(ckt->CKTstates[0] + here->B4SOIvgs); if (here->B4SOIrgateMod > 1) { gcrgd = here->B4SOIgcrgs * T0; gcrgg = here->B4SOIgcrgg * T0; gcrgs = here->B4SOIgcrgd * T0; gcrgb = here->B4SOIgcrgb * T0; gcrgg -= here->B4SOIgcrg; gcrg = here->B4SOIgcrg; } else gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; /* v3.1 RF end*/ } if (!model->B4SOIrdsMod) { gdpr=here->B4SOIdrainConductance; gspr=here->B4SOIsourceConductance; } else gdpr = gspr = 0.0; gds= here->B4SOIgds; GSoverlapCap = here->B4SOIcgso; GDoverlapCap = here->B4SOIcgdo; GEoverlapCap = here->pParam->B4SOIcgeo; EDextrinsicCap = here->B4SOIgcde; ESextrinsicCap = here->B4SOIgcse; /* v3.1 added for RF */ if (here->B4SOIrgateMod == 3) { xcgmgmb = (GDoverlapCap + GSoverlapCap + GEoverlapCap ) * omega; xcgmdb = -GDoverlapCap * omega; xcgmsb = -GSoverlapCap * omega; xcgmeb = -GEoverlapCap * omega; xcdgmb = xcgmdb; xcsgmb = xcgmsb; xcegmb = xcgmeb; xcedb = -EDextrinsicCap * omega; xcdeb = (cdeb - EDextrinsicCap) * omega; xcddb = (cddb + GDoverlapCap + EDextrinsicCap) * omega; xceeb = (ceeb + GEoverlapCap + EDextrinsicCap + ESextrinsicCap) * omega; xcesb = -ESextrinsicCap * omega; xcssb = (GSoverlapCap + ESextrinsicCap - (cgsb + cbsb + cdsb)) * omega; xcseb = -(cbeb + cdeb + ceeb + ESextrinsicCap) * omega; xcegb = 0; /* v3.1 change for RF */ xceT = ceT * omega; xcggb = here->B4SOIcggb * omega; xcgdb = cgdb * omega; xcgsb = cgsb * omega; xcgeb = 0; xcgT = cgT * omega; xcdgb = cdgb * omega; xcdsb = cdsb * omega; xcdT = cdT * omega; xcsgb = -(cggb + cbgb + cdgb) * omega; xcsdb = -(cgdb + cbdb + cddb) * omega; xcsT = -(cgT + cbT + cdT + ceT) * omega; xcbgb = cbgb * omega; xcbdb = cbdb * omega; xcbsb = cbsb * omega; xcbeb = cbeb * omega; xcbT = cbT * omega; xcTt = cTt * omega; } else { xcedb = -EDextrinsicCap * omega; xcdeb = (cdeb - EDextrinsicCap) * omega; xcddb = (cddb + GDoverlapCap + EDextrinsicCap) * omega; xceeb = (ceeb + GEoverlapCap + EDextrinsicCap + ESextrinsicCap) * omega; xcesb = -ESextrinsicCap * omega; xcssb = (GSoverlapCap + ESextrinsicCap - (cgsb + cbsb + cdsb)) * omega; xcseb = -(cbeb + cdeb + ceeb + ESextrinsicCap) * omega; xcegb = (- GEoverlapCap) * omega; xceT = ceT * omega; xcggb = (cggb + GDoverlapCap + GSoverlapCap + GEoverlapCap) * omega; xcgdb = (cgdb - GDoverlapCap ) * omega; xcgsb = (cgsb - GSoverlapCap) * omega; xcgeb = (- GEoverlapCap) * omega; xcgT = cgT * omega; xcdgb = (cdgb - GDoverlapCap) * omega; xcdsb = cdsb * omega; xcdT = cdT * omega; xcsgb = -(cggb + cbgb + cdgb + GSoverlapCap) * omega; xcsdb = -(cgdb + cbdb + cddb) * omega; xcsT = -(cgT + cbT + cdT + ceT) * omega; xcbgb = cbgb * omega; xcbdb = cbdb * omega; xcbsb = cbsb * omega; xcbeb = cbeb * omega; xcbT = cbT * omega; xcTt = cTt * omega; /* v3.1 */ xcdgmb = xcsgmb = xcegmb = 0.0; xcgmgmb = xcgmdb = xcgmsb = xcgmeb =0.0; } if (here->B4SOImode >= 0) { /* v4.0 */ if (!here->B4SOIrbodyMod) { xcjdbdp = xcjsbsp = 0.0; xcdbb = -(xcdgb + xcddb + xcdsb + xcdgmb + xcdeb); xcsbb = -(xcsgb + xcsdb + xcssb + xcsgmb + xcseb); xcdbdb = 0.0; xcsbsb = 0.0; xcbdb = here->B4SOIcbdb * omega; xcbsb = here->B4SOIcbsb * omega; } else { xcjdbdp = here->B4SOIcjdb * omega; xcjsbsp = here->B4SOIcjsb * omega; xcdbb = -(xcdgb + xcddb + xcdsb + xcdgmb + xcdeb) + xcjdbdp; xcsbb = -(xcsgb + xcsdb + xcssb + xcsgmb + xcseb) + xcjsbsp; xcdbdb = -here->B4SOIcjdb * omega; xcsbsb = -here->B4SOIcjsb * omega; xcbdb = here->B4SOIcbdb * omega - xcdbdb; xcbsb = here->B4SOIcbsb * omega - xcsbsb; } } else { if (!here->B4SOIrbodyMod) { xcjdbdp = xcjsbsp = 0.0; xcdbb = -(xcdgb + xcddb + xcdsb + xcdgmb + xcdeb); xcsbb = -(xcsgb + xcsdb + xcssb + xcsgmb + xcseb); xcdbdb = 0.0; xcsbsb = 0.0; xcbdb = here->B4SOIcbsb * omega; xcbsb = here->B4SOIcbdb * omega; } else { xcjdbdp = here->B4SOIcjsb * omega; xcjsbsp = here->B4SOIcjdb * omega; xcdbb = -(xcdgb + xcddb + xcdsb + xcdgmb + xcdeb) + xcjdbdp; xcsbb = -(xcsgb + xcsdb + xcssb + xcsgmb + xcseb) + xcjsbsp; xcdbdb = -here->B4SOIcjsb * omega; xcsbsb = -here->B4SOIcjdb * omega; xcbdb = here->B4SOIcbsb * omega - xcdbdb; xcbsb = here->B4SOIcbdb * omega - xcsbsb; } } if (model->B4SOIrdsMod == 1) { gstot = here->B4SOIgstot; gstotd = here->B4SOIgstotd; gstotg = here->B4SOIgstotg; gstots = here->B4SOIgstots - gstot; gstotb = here->B4SOIgstotb; gdtot = here->B4SOIgdtot; gdtotd = here->B4SOIgdtotd - gdtot; gdtotg = here->B4SOIgdtotg; gdtots = here->B4SOIgdtots; gdtotb = here->B4SOIgdtotb; } else { gstot = gstotd = gstotg = gstots = gstotb = 0.0; gdtot = gdtotd = gdtotg = gdtots = gdtotb = 0.0; } m = here->B4SOIm; /* v3.1 for RF */ geltd = here->B4SOIgrgeltd; if (here->B4SOIrgateMod == 1) { *(here->B4SOIGEgePtr) += m * geltd; *(here->B4SOIGgePtr) -= m * geltd; *(here->B4SOIGEgPtr) -= m * geltd; *(here->B4SOIGgPtr) += m * (geltd + gigg + gIgtotg); /* v3.1.1 bug fix */ *(here->B4SOIGdpPtr) += m * (gigd + gIgtotd); /* v3.1.1 bug fix */ *(here->B4SOIGspPtr) += m * (gigs + gIgtots); /* v3.1.1 bug fix */ if (here->B4SOIsoiMod != 2) /* v3.2 */ *(here->B4SOIGbPtr) -= m * (-gigb - gIgtotb); /* v3.1.1 bug fix */ } else if (here->B4SOIrgateMod == 2) { *(here->B4SOIGEgePtr) += m * gcrg; *(here->B4SOIGEgPtr) += m * gcrgg; *(here->B4SOIGEdpPtr) += m * gcrgd; *(here->B4SOIGEspPtr) += m * gcrgs; if (here->B4SOIsoiMod != 2) /* v3.2 */ *(here->B4SOIGEbPtr) += m * gcrgb; *(here->B4SOIGgePtr) -= m * gcrg; *(here->B4SOIGgPtr) -= m * (gcrgg - gigg - gIgtotg); /* v3.1.1 bug fix */ *(here->B4SOIGdpPtr) -= m * (gcrgd - gigd - gIgtotd); /* v3.1.1 bug fix */ *(here->B4SOIGspPtr) -= m * (gcrgs - gigs - gIgtots); /* v3.1.1 bug fix */ if (here->B4SOIsoiMod != 2) /* v3.2 */ *(here->B4SOIGbPtr) -= m * (gcrgb - gigb - gIgtotb); /* v3.1.1 bug fix */ } else if (here->B4SOIrgateMod == 3) { *(here->B4SOIGEgePtr) += m * geltd; *(here->B4SOIGEgmPtr) -= m * geltd; *(here->B4SOIGMgePtr) -= m * geltd; *(here->B4SOIGMgmPtr) += m * (geltd + gcrg); *(here->B4SOIGMgmPtr +1) += m * xcgmgmb; *(here->B4SOIGMdpPtr) += m * gcrgd; *(here->B4SOIGMdpPtr +1) += m * xcgmdb; *(here->B4SOIGMgPtr) += m * gcrgg; *(here->B4SOIGMspPtr) += m * gcrgs; *(here->B4SOIGMspPtr +1) += m * xcgmsb; if (here->B4SOIsoiMod != 2) /* v3.2 */ *(here->B4SOIGMbPtr) += m * gcrgb; *(here->B4SOIGMePtr +1) += m * xcgmeb; *(here->B4SOIDPgmPtr +1) += m * xcdgmb; *(here->B4SOIGgmPtr) -= m * gcrg; *(here->B4SOISPgmPtr +1) += m * xcsgmb; *(here->B4SOIEgmPtr +1) += m * xcegmb; *(here->B4SOIGgPtr) -= m * (gcrgg - gigg - gIgtotg); /* v3.1.1 bug fix */ *(here->B4SOIGdpPtr) -= m * (gcrgd - gigd - gIgtotd); /* v3.1.1 bug fix */ *(here->B4SOIGspPtr) -= m * (gcrgs - gigs - gIgtots); /* v3.1.1 bug fix */ if (here->B4SOIsoiMod != 2) /* v3.2 */ *(here->B4SOIGbPtr) -= m * (gcrgb - gigb - gIgtotb); /* v3.1.1 bug fix */ } else { *(here->B4SOIGgPtr) += m * (gigg + gIgtotg); /* v3.1.1 bug fix */ *(here->B4SOIGdpPtr) += m * (gigd + gIgtotd); /* v3.1.1 bug fix */ *(here->B4SOIGspPtr) += m * (gigs + gIgtots); /* v3.1.1 bug fix */ if (here->B4SOIsoiMod != 2) /* v3.2 */ *(here->B4SOIGbPtr) += m * (gigb + gIgtotb); /* v3.1.1 bug fix */ } /* v3.1 for RF end*/ if (model->B4SOIrdsMod) { (*(here->B4SOIDgPtr) += m * gdtotg); (*(here->B4SOIDspPtr) += m * gdtots); (*(here->B4SOISdpPtr) += m * gstotd); (*(here->B4SOISgPtr) += m * gstotg); if (here->B4SOIsoiMod != 2) { (*(here->B4SOIDbPtr) += m * gdtotb); (*(here->B4SOISbPtr) += m * gstotb); } } *(here->B4SOIEdpPtr +1) += m * xcedb; *(here->B4SOIEspPtr +1) += m * xcesb; *(here->B4SOIDPePtr +1) += m * xcdeb; *(here->B4SOISPePtr +1) += m * xcseb; *(here->B4SOIEgPtr +1) += m * xcegb; *(here->B4SOIGePtr +1) += m * xcgeb; *(here->B4SOIEePtr +1) += m * xceeb; *(here->B4SOIGgPtr +1) += m * xcggb; *(here->B4SOIGdpPtr +1) += m * xcgdb; *(here->B4SOIGspPtr +1) += m * xcgsb; *(here->B4SOIDPgPtr +1) += m * xcdgb; *(here->B4SOIDPdpPtr +1) += m * xcddb; *(here->B4SOIDPspPtr +1) += m * xcdsb; *(here->B4SOISPgPtr +1) += m * xcsgb; *(here->B4SOISPdpPtr +1) += m * xcsdb; *(here->B4SOISPspPtr +1) += m * xcssb; /* v3.1 */ if (here->B4SOIsoiMod != 2) /* v3.2 */ { *(here->B4SOIBePtr +1) += m * xcbeb; *(here->B4SOIBgPtr +1) += m * xcbgb; *(here->B4SOIBdpPtr +1) += m * xcbdb; *(here->B4SOIBspPtr +1) += m * xcbsb; *(here->B4SOIEbPtr +1) -= m * (xcegb + xceeb + xcedb + xcesb); *(here->B4SOIGbPtr +1) -= m * (xcggb + xcgdb + xcgsb + xcgeb); /* *(here->B4SOIDPbPtr +1) -= xcdgb + xcddb + xcdsb + xcdeb; + xcdgmb; */ *(here->B4SOIDPbPtr +1) -= m * -xcdbb; /* v4.0 */ /* *(here->B4SOISPbPtr +1) -= xcsgb + xcsdb + xcssb + xcseb + xcsgmb; */ *(here->B4SOISPbPtr +1) -= m * -xcsbb; /* v4.0 */ *(here->B4SOIBbPtr +1) -= m * (xcbgb + xcbdb + xcbsb + xcbeb); } /* v3.1 */ if (selfheat) { *(here->B4SOITemptempPtr + 1) += m * xcTt; *(here->B4SOIDPtempPtr + 1) += m * xcdT; *(here->B4SOISPtempPtr + 1) += m * xcsT; *(here->B4SOIBtempPtr + 1) += m * xcbT; *(here->B4SOIEtempPtr + 1) += m * xceT; *(here->B4SOIGtempPtr + 1) += m * xcgT; } /* v3.0 */ if (here->B4SOIsoiMod != 0) /* v3.2 */ { *(here->B4SOIDPePtr) += m * (Gme + gddpe); *(here->B4SOISPePtr) += m * (gsspe - Gme); if (here->B4SOIsoiMod != 2) /* v3.2 */ { *(here->B4SOIGePtr) += m * gige; *(here->B4SOIBePtr) -= m * gige; } } *(here->B4SOIEePtr) += 0.0; *(here->B4SOIDPgPtr) += m * (Gm + gddpg - gIdtotg -gdtotg); /* v4.0 */ *(here->B4SOIDPdpPtr) += m * (gdpr + gds + gddpdp + RevSum - gIdtotd - gdtotd); /* v4.0 */ *(here->B4SOIDPspPtr) -= m * (gds + FwdSum - gddpsp + gIdtots + gdtots); /* v4.0 */ *(here->B4SOIDPdPtr) -= m * (gdpr + gdtot); *(here->B4SOISPgPtr) -= m * (Gm - gsspg + gIstotg + gstotg); /* v4.0 */ *(here->B4SOISPdpPtr) -= m * (gds + RevSum - gsspdp + gIstotd + gstotd); /* v4.0 */ *(here->B4SOISPspPtr) += m * (gspr + gds + FwdSum + gsspsp - gIstots - gstots); /* v4.0 */ *(here->B4SOISPsPtr) -= m * (gspr + gstot); /* v3.1 */ if (here->B4SOIsoiMod != 2) /* v3.2 */ { *(here->B4SOIBePtr) += m * gbbe; /* v3.0 */ *(here->B4SOIBgPtr) += m * (gbbg - gigg); /* v3.1 bug fix */ *(here->B4SOIBdpPtr) += m * (gbbdp - gigd); /* v3.1 bug fix */ *(here->B4SOIBspPtr) += m * (gbbsp - gigs); /* v3.1 bug fix */ *(here->B4SOIBbPtr) += m * (gbbb - gigb); /* v3.1 bug fix */ *(here->B4SOISPbPtr) -= m * (Gmbs - gsspb + gIstotb + gstotb); /* v4.0 */ *(here->B4SOIDPbPtr) -= m * ((-gddpb - Gmbs) + gIdtotb + gdtotb); /* v4.0 */ } /* v3.1 */ if (selfheat) { *(here->B4SOIDPtempPtr) += m * (GmT + gddpT); *(here->B4SOISPtempPtr) += m * (-GmT + gsspT); *(here->B4SOIBtempPtr) += m * (gbbT - gigT); /* v3.1 bug fix */ *(here->B4SOIGtempPtr) += m * gigT; /* v3.1 bug fix */ *(here->B4SOITemptempPtr) += m * (gTtt + 1/here->pParam->B4SOIrth); *(here->B4SOITempgPtr) += m * gTtg; *(here->B4SOITempbPtr) += m * gTtb; *(here->B4SOITempdpPtr) += m * gTtdp; *(here->B4SOITempspPtr) += m * gTtsp; /* v3.0 */ if (here->B4SOIsoiMod != 0) /* v3.2 */ *(here->B4SOITempePtr) += m * gTte; } *(here->B4SOIDdPtr) += m * (gdpr + gdtot); *(here->B4SOIDdpPtr) -= m * (gdpr - gdtotd); *(here->B4SOISsPtr) += m * (gspr + gstot); *(here->B4SOISspPtr) -= m * (gspr -gstots); if (here->B4SOIbodyMod == 1) { (*(here->B4SOIBpPtr) -= m * gppp); (*(here->B4SOIPbPtr) += m * gppb); (*(here->B4SOIPpPtr) += m * gppp); } /* v4.1 Ig_agbcp2 stamping */ (*(here->B4SOIGgPtr) += gigpg); if (here->B4SOIbodyMod == 1) { (*(here->B4SOIPpPtr) -= m * gigpp); (*(here->B4SOIPgPtr) -= m * gigpg); (*(here->B4SOIGpPtr) += m * gigpp); } else if(here->B4SOIbodyMod == 2) { (*(here->B4SOIBbPtr) -= m * gigpp); (*(here->B4SOIBgPtr) -= m * gigpg); (*(here->B4SOIGbPtr) += m * gigpp); } /* v4.0 */ if (here->B4SOIrbodyMod) { (*(here->B4SOIDPdbPtr + 1) -= m * xcjdbdp); (*(here->B4SOIDPdbPtr) -= m * here->B4SOIGGjdb); (*(here->B4SOISPsbPtr + 1) -= m * xcjsbsp); (*(here->B4SOISPsbPtr) -= m * here->B4SOIGGjsb); (*(here->B4SOIDBdpPtr + 1) -= m * xcjdbdp); (*(here->B4SOIDBdpPtr) -= m * here->B4SOIGGjdb); (*(here->B4SOIDBdbPtr + 1) += m * xcjdbdp); (*(here->B4SOIDBdbPtr) += m * (here->B4SOIGGjdb + here->B4SOIgrbdb)); (*(here->B4SOIDBbPtr) -= m * here->B4SOIgrbdb); (*(here->B4SOISBbPtr) -= m * here->B4SOIgrbsb); (*(here->B4SOISBspPtr + 1) -= m * xcjsbsp); (*(here->B4SOISBspPtr) -= m * here->B4SOIGGjsb); (*(here->B4SOISBsbPtr + 1) += m * xcjsbsp); (*(here->B4SOISBsbPtr) += m * (here->B4SOIGGjsb + here->B4SOIgrbsb)); (*(here->B4SOIBdbPtr) -= m * here->B4SOIgrbdb); (*(here->B4SOIBsbPtr) -= m * here->B4SOIgrbsb); (*(here->B4SOIBbPtr) += m * (here->B4SOIgrbsb + here->B4SOIgrbdb)); } if (here->B4SOIdebugMod != 0) { *(here->B4SOIVbsPtr) += 1; *(here->B4SOIIdsPtr) += 1; *(here->B4SOIIcPtr) += 1; *(here->B4SOIIbsPtr) += 1; *(here->B4SOIIbdPtr) += 1; *(here->B4SOIIiiPtr) += 1; *(here->B4SOIIgidlPtr) += 1; *(here->B4SOIItunPtr) += 1; *(here->B4SOIIbpPtr) += 1; *(here->B4SOICbgPtr) += 1; *(here->B4SOICbbPtr) += 1; *(here->B4SOICbdPtr) += 1; *(here->B4SOIQbfPtr) += 1; *(here->B4SOIQjsPtr) += 1; *(here->B4SOIQjdPtr) += 1; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsimsoi/b4soicvtest.c0000644000175000017500000000721313546075722023250 0ustar carstencarsten/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/ /********** * Copyright 2010 Regents of the University of California. All rights reserved. * Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang * Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soicvtest.c * Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu. * Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu. * File: b4soicvtest.c * Modified by Hui Wan, Xuemei Xi 11/30/2005 * Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009 * Modified by Tanvir Morshed 09/22/2009 * Modified by Tanvir Morshed 12/31/2009 **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b4soidef.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B4SOIconvTest( GENmodel *inModel, CKTcircuit *ckt) { register B4SOImodel *model = (B4SOImodel*)inModel; register B4SOIinstance *here; double delvbd, delvbs, delvds, delvgd, delvgs, vbd, vbs, vds; double cbd, cbhat, cbs, cd, cdhat, tol, vgd, vgdo, vgs; /* loop through all the B4SOI device models */ for (; model != NULL; model = B4SOInextModel(model)) { /* loop through all the instances of the model */ for (here = B4SOIinstances(model); here != NULL ; here=B4SOInextInstance(here)) { vbs = model->B4SOItype * (*(ckt->CKTrhsOld+here->B4SOIbNode) - *(ckt->CKTrhsOld+here->B4SOIsNodePrime)); vgs = model->B4SOItype * (*(ckt->CKTrhsOld+here->B4SOIgNode) - *(ckt->CKTrhsOld+here->B4SOIsNodePrime)); vds = model->B4SOItype * (*(ckt->CKTrhsOld+here->B4SOIdNodePrime) - *(ckt->CKTrhsOld+here->B4SOIsNodePrime)); vbd = vbs - vds; vgd = vgs - vds; vgdo = *(ckt->CKTstate0 + here->B4SOIvgs) - *(ckt->CKTstate0 + here->B4SOIvds); delvbs = vbs - *(ckt->CKTstate0 + here->B4SOIvbs); delvbd = vbd - *(ckt->CKTstate0 + here->B4SOIvbd); delvgs = vgs - *(ckt->CKTstate0 + here->B4SOIvgs); delvds = vds - *(ckt->CKTstate0 + here->B4SOIvds); delvgd = vgd-vgdo; cd = here->B4SOIcd; if (here->B4SOImode >= 0) { cdhat = cd - here->B4SOIgjdb * delvbd + here->B4SOIgmbs * delvbs + here->B4SOIgm * delvgs + here->B4SOIgds * delvds; } else { cdhat = cd - (here->B4SOIgjdb - here->B4SOIgmbs) * delvbd - here->B4SOIgm * delvgd + here->B4SOIgds * delvds; } /* * check convergence */ if ((here->B4SOIoff == 0) || (!(ckt->CKTmode & MODEINITFIX))) { tol = ckt->CKTreltol * MAX(fabs(cdhat), fabs(cd)) + ckt->CKTabstol; if (fabs(cdhat - cd) >= tol) { ckt->CKTnoncon++; return(OK); } cbs = here->B4SOIcjs; cbd = here->B4SOIcjd; cbhat = cbs + cbd + here->B4SOIgjdb * delvbd + here->B4SOIgjsb * delvbs; tol = ckt->CKTreltol * MAX(fabs(cbhat), fabs(cbs + cbd)) + ckt->CKTabstol; if (fabs(cbhat - (cbs + cbd)) > tol) { ckt->CKTnoncon++; return(OK); } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsimsoi/BsimTerms_use0000644000175000017500000000245113546075722023336 0ustar carstencarstenThe terms under which the software is provided are as the following. Software is distributed as is, completely without warranty or service support. The University of California and its employees are not liable for the condition or performance of the software. The University owns the copyright but shall not be liable for any infringement of copyright or other proprietary rights brought by third parties against the users of the software. The University of California hereby disclaims all implied warranties. The University of California grants the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for the University of California code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge the UC Berkeley BSIM Research Group that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to obey all U.S. Government restrictions governing redistribution or export of the software. 4. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others. tmpk8ny_4pz/src/spicelib/devices/bsimsoi/b4soicheck.c0000644000175000017500000012510113546075722023012 0ustar carstencarsten/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/ /********** * Copyright 2010 Regents of the University of California. All rights reserved. * Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang * Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soicheck.c * Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu. * Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu. * Authors: 2010- Tanvir Morshed, Ali Niknejad, Chenming Hu. * File: b4soicheck.c * Modified by Hui Wan, Xuemei Xi 11/30/2005 * Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009 * Modified by Tanvir Morshed 09/22/2009 * Modified by Tanvir Morshed 12/31/2009 * Modified by Tanvir Morshed 12/16/2010 **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b4soidef.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" int B4SOIcheckModel( B4SOImodel *model, B4SOIinstance *here, CKTcircuit *ckt) { struct b4soiSizeDependParam *pParam; int Fatal_Flag = 0; FILE *fplog; NG_IGNORE(ckt); if ((fplog = fopen("b4soiv1check.log", "w")) != NULL) { pParam = here->pParam; fprintf(fplog, "B4SOIV3 Parameter Check\n"); fprintf(fplog, "Model = %s\n", model->B4SOImodName); fprintf(fplog, "W = %g, L = %g\n", here->B4SOIw, here->B4SOIl); if (pParam->B4SOIlpe0 < -pParam->B4SOIleff) { fprintf(fplog, "Fatal: Lpe0 = %g is less than -Leff.\n", pParam->B4SOIlpe0); printf("Fatal: Lpe0 = %g is less than -Leff.\n", pParam->B4SOIlpe0); Fatal_Flag = 1; } if((here->B4SOIsa > 0.0) && (here->B4SOIsb > 0.0) && ((here->B4SOInf == 1.0) || ((here->B4SOInf > 1.0) && (here->B4SOIsd > 0.0))) ) { if (model->B4SOIsaref <= 0.0) { fprintf(fplog, "Fatal: SAref = %g is not positive.\n", model->B4SOIsaref); printf("Fatal: SAref = %g is not positive.\n", model->B4SOIsaref); Fatal_Flag = 1; } if (model->B4SOIsbref <= 0.0) { fprintf(fplog, "Fatal: SBref = %g is not positive.\n", model->B4SOIsbref); printf("Fatal: SBref = %g is not positive.\n", model->B4SOIsbref); Fatal_Flag = 1; } } if (pParam->B4SOIlpeb < -pParam->B4SOIleff) /* v4.0 for Vth */ { fprintf(fplog, "Fatal: Lpeb = %g is less than -Leff.\n", pParam->B4SOIlpeb); printf("Fatal: Lpeb = %g is less than -Leff.\n", pParam->B4SOIlpeb); Fatal_Flag = 1; } if (pParam->B4SOIfprout < 0.0) /* v4.0 for DITS */ { fprintf(fplog, "Fatal: fprout = %g is negative.\n", pParam->B4SOIfprout); printf("Fatal: fprout = %g is negative.\n", pParam->B4SOIfprout); Fatal_Flag = 1; } if (pParam->B4SOIpdits < 0.0) /* v4.0 for DITS */ { fprintf(fplog, "Fatal: pdits = %g is negative.\n", pParam->B4SOIpdits); printf("Fatal: pdits = %g is negative.\n", pParam->B4SOIpdits); Fatal_Flag = 1; } if (model->B4SOIpditsl < 0.0) /* v4.0 for DITS */ { fprintf(fplog, "Fatal: pditsl = %g is negative.\n", model->B4SOIpditsl); printf("Fatal: pditsl = %g is negative.\n", model->B4SOIpditsl); Fatal_Flag = 1; } if (model->B4SOItox <= 0.0) { fprintf(fplog, "Fatal: Tox = %g is not positive.\n", model->B4SOItox); printf("Fatal: Tox = %g is not positive.\n", model->B4SOItox); Fatal_Flag = 1; } if (model->B4SOIleffeot <= 0.0) { fprintf(fplog, "Fatal: leffeot = %g is not positive.\n", model->B4SOIleffeot); printf("Fatal: Leffeot = %g is not positive.\n", model->B4SOIleffeot); Fatal_Flag = 1; } if (model->B4SOIweffeot <= 0.0) { fprintf(fplog, "Fatal: weffeot = %g is not positive.\n", model->B4SOIweffeot); printf("Fatal: Weffeot = %g is not positive.\n", model->B4SOIweffeot); Fatal_Flag = 1; } if (model->B4SOItoxp <= 0.0) { fprintf(fplog, "Fatal: Toxp = %g is not positive.\n", model->B4SOItoxp); printf("Fatal: Toxp = %g is not positive.\n", model->B4SOItoxp); Fatal_Flag = 1; } if (model->B4SOIepsrgate < 0.0) { fprintf(fplog, "Fatal: Epsrgate = %g is not positive.\n", model->B4SOIepsrgate); printf("Fatal: Epsrgate = %g is not positive.\n", model->B4SOIepsrgate); Fatal_Flag = 1; } if (model->B4SOItoxm <= 0.0) { fprintf(fplog, "Fatal: Toxm = %g is not positive.\n", model->B4SOItoxm); printf("Fatal: Toxm = %g is not positive.\n", model->B4SOItoxm); Fatal_Flag = 1; } /* v3.2 */ if (here->B4SOInf < 1.0) { fprintf(fplog, "Fatal: Number of finger = %g is smaller than one.\n", here->B4SOInf); printf("Fatal: Number of finger = %g is smaller than one.\n", here->B4SOInf); Fatal_Flag = 1; } /* v2.2.3 */ if (model->B4SOItox - model->B4SOIdtoxcv <= 0.0) { fprintf(fplog, "Fatal: Tox - dtoxcv = %g is not positive.\n", model->B4SOItox - model->B4SOIdtoxcv); printf("Fatal: Tox - dtoxcv = %g is not positive.\n", model->B4SOItox - model->B4SOIdtoxcv); Fatal_Flag = 1; } if (model->B4SOItbox <= 0.0) { fprintf(fplog, "Fatal: Tbox = %g is not positive.\n", model->B4SOItbox); printf("Fatal: Tbox = %g is not positive.\n", model->B4SOItbox); Fatal_Flag = 1; } if (pParam->B4SOInpeak <= 0.0) { fprintf(fplog, "Fatal: Nch = %g is not positive.\n", pParam->B4SOInpeak); printf("Fatal: Nch = %g is not positive.\n", pParam->B4SOInpeak); Fatal_Flag = 1; } if (pParam->B4SOIngate < 0.0) { fprintf(fplog, "Fatal: Ngate = %g is not positive.\n", pParam->B4SOIngate); printf("Fatal: Ngate = %g Ngate is not positive.\n", pParam->B4SOIngate); Fatal_Flag = 1; } if (pParam->B4SOIngate > 1.e25) { fprintf(fplog, "Fatal: Ngate = %g is too high.\n", pParam->B4SOIngate); printf("Fatal: Ngate = %g Ngate is too high\n", pParam->B4SOIngate); Fatal_Flag = 1; } if (pParam->B4SOIdvt1 < 0.0) { fprintf(fplog, "Fatal: Dvt1 = %g is negative.\n", pParam->B4SOIdvt1); printf("Fatal: Dvt1 = %g is negative.\n", pParam->B4SOIdvt1); Fatal_Flag = 1; } if (pParam->B4SOIdvt1w < 0.0) { fprintf(fplog, "Fatal: Dvt1w = %g is negative.\n", pParam->B4SOIdvt1w); printf("Fatal: Dvt1w = %g is negative.\n", pParam->B4SOIdvt1w); Fatal_Flag = 1; } if (pParam->B4SOIw0 == -pParam->B4SOIweff) { fprintf(fplog, "Fatal: (W0 + Weff) = 0 cauing divided-by-zero.\n"); printf("Fatal: (W0 + Weff) = 0 cauing divided-by-zero.\n"); Fatal_Flag = 1; } if (pParam->B4SOIdsub < 0.0) { fprintf(fplog, "Fatal: Dsub = %g is negative.\n", pParam->B4SOIdsub); printf("Fatal: Dsub = %g is negative.\n", pParam->B4SOIdsub); Fatal_Flag = 1; } if (pParam->B4SOIb1 == -pParam->B4SOIweff) { fprintf(fplog, "Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); printf("Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); Fatal_Flag = 1; } if (pParam->B4SOIu0temp <= 0.0) { fprintf(fplog, "Fatal: u0 at current temperature = %g is not positive.\n", pParam->B4SOIu0temp); printf("Fatal: u0 at current temperature = %g is not positive.\n", pParam->B4SOIu0temp); Fatal_Flag = 1; } /* Check delta parameter */ if (pParam->B4SOIdelta < 0.0) { fprintf(fplog, "Fatal: Delta = %g is less than zero.\n", pParam->B4SOIdelta); printf("Fatal: Delta = %g is less than zero.\n", pParam->B4SOIdelta); Fatal_Flag = 1; } if (pParam->B4SOIvsattemp <= 0.0) { fprintf(fplog, "Fatal: Vsat at current temperature = %g is not positive.\n", pParam->B4SOIvsattemp); printf("Fatal: Vsat at current temperature = %g is not positive.\n", pParam->B4SOIvsattemp); Fatal_Flag = 1; } /* Check Rout parameters */ if (pParam->B4SOIpclm <= 0.0) { fprintf(fplog, "Fatal: Pclm = %g is not positive.\n", pParam->B4SOIpclm); printf("Fatal: Pclm = %g is not positive.\n", pParam->B4SOIpclm); Fatal_Flag = 1; } if (pParam->B4SOIdrout < 0.0) { fprintf(fplog, "Fatal: Drout = %g is negative.\n", pParam->B4SOIdrout); printf("Fatal: Drout = %g is negative.\n", pParam->B4SOIdrout); Fatal_Flag = 1; } if ( model->B4SOIunitLengthGateSidewallJctCapD > 0.0) /* v4.0 */ { if (here->B4SOIdrainPerimeter < pParam->B4SOIweff) { fprintf(fplog, "Warning: Pd = %g is less than W.\n", here->B4SOIdrainPerimeter); printf("Warning: Pd = %g is less than W.\n", here->B4SOIdrainPerimeter); here->B4SOIdrainPerimeter =pParam->B4SOIweff; } } if ( model->B4SOIunitLengthGateSidewallJctCapS > 0.0) /* v4.0 */ { if (here->B4SOIsourcePerimeter < pParam->B4SOIweff) { fprintf(fplog, "Warning: Ps = %g is less than W.\n", here->B4SOIsourcePerimeter); printf("Warning: Ps = %g is less than W.\n", here->B4SOIsourcePerimeter); here->B4SOIsourcePerimeter =pParam->B4SOIweff; } } /* Check capacitance parameters */ if (pParam->B4SOIclc < 0.0) { fprintf(fplog, "Fatal: Clc = %g is negative.\n", pParam->B4SOIclc); printf("Fatal: Clc = %g is negative.\n", pParam->B4SOIclc); Fatal_Flag = 1; } /* v3.2 */ if (pParam->B4SOInoff < 0.1) { fprintf(fplog, "Warning: Noff = %g is too small.\n", pParam->B4SOInoff); printf("Warning: Noff = %g is too small.\n", pParam->B4SOInoff); } if (pParam->B4SOInoff > 4.0) { fprintf(fplog, "Warning: Noff = %g is too large.\n", pParam->B4SOInoff); printf("Warning: Noff = %g is too large.\n", pParam->B4SOInoff); } /* added for stress */ /* Check stress effect parameters */ if( (here->B4SOIsa > 0.0) && (here->B4SOIsb > 0.0) && ((here->B4SOInf == 1.0) || ((here->B4SOInf > 1.0) && (here->B4SOIsd > 0.0))) ) { if (model->B4SOIlodk2 <= 0.0) { fprintf(fplog, "Warning: LODK2 = %g is not positive.\n",model->B4SOIlodk2); printf("Warning: LODK2 = %g is not positive.\n",model->B4SOIlodk2); } if (model->B4SOIlodeta0 <= 0.0) { fprintf(fplog, "Warning: LODETA0 = %g is not positive.\n",model->B4SOIlodeta0); printf("Warning: LODETA0 = %g is not positive.\n",model->B4SOIlodeta0); } } /* added for stress end */ /* v2.2.3 */ if (pParam->B4SOImoin < 5.0) { fprintf(fplog, "Warning: Moin = %g is too small.\n", pParam->B4SOImoin); printf("Warning: Moin = %g is too small.\n", pParam->B4SOImoin); } if (pParam->B4SOImoin > 25.0) { fprintf(fplog, "Warning: Moin = %g is too large.\n", pParam->B4SOImoin); printf("Warning: Moin = %g is too large.\n", pParam->B4SOImoin); } /* v3.0 */ if (model->B4SOImoinFD < 5.0) { fprintf(fplog, "Warning: MoinFD = %g is too small.\n", model->B4SOImoinFD); printf("Warning: MoinFD = %g is too small.\n", model->B4SOImoinFD); } if (model->B4SOIcapMod == 3) { if (pParam->B4SOIacde < 0.1) /* v3.1.1 */ { fprintf (fplog, "Warning: Acde = %g is too small.\n", pParam->B4SOIacde); printf ("Warning: Acde = %g is too small.\n", pParam->B4SOIacde); } if (pParam->B4SOIacde > 1.6) { fprintf (fplog, "Warning: Acde = %g is too large.\n", pParam->B4SOIacde); printf ("Warning: Acde = %g is too large.\n", pParam->B4SOIacde); } } /* v4.2 always perform Fatal checks */ if (pParam->B4SOInigc <= 0.0) { fprintf(fplog, "Fatal: nigc = %g is non-positive.\n", pParam->B4SOInigc); printf("Fatal: nigc = %g is non-positive.\n", pParam->B4SOInigc); Fatal_Flag = 1; } if (pParam->B4SOIpoxedge <= 0.0) { fprintf(fplog, "Fatal: poxedge = %g is non-positive.\n", pParam->B4SOIpoxedge); printf("Fatal: poxedge = %g is non-positive.\n", pParam->B4SOIpoxedge); Fatal_Flag = 1; } if (pParam->B4SOIpigcd <= 0.0) { fprintf(fplog, "Fatal: pigcd = %g is non-positive.\n", pParam->B4SOIpigcd); printf("Fatal: pigcd = %g is non-positive.\n", pParam->B4SOIpigcd); Fatal_Flag = 1; } if (model->B4SOItoxref < 0.0) { fprintf(fplog, "Warning: TOXREF = %g is negative.\n", model->B4SOItoxref); printf("Warning: Toxref = %g is negative.\n", model->B4SOItoxref); Fatal_Flag = 1; } if (model->B4SOItoxqm <= 0.0) { fprintf(fplog, "Fatal: Toxqm = %g is not positive.\n", model->B4SOItoxqm); printf("Fatal: Toxqm = %g is not positive.\n", model->B4SOItoxqm); Fatal_Flag = 1; } if (model->B4SOIdeltavox <= 0.0) { fprintf(fplog, "Fatal: Deltavox = %g is not positive.\n", model->B4SOIdeltavox); printf("Fatal: Deltavox = %g is not positive.\n", model->B4SOIdeltavox); } /* v4.4 Tanvir */ if (pParam->B4SOIrdsw < 0.0) { fprintf(fplog, "Warning: Rdsw = %g is negative. Set to zero.\n", pParam->B4SOIrdsw); printf("Warning: Rdsw = %g is negative. Set to zero.\n", pParam->B4SOIrdsw); pParam->B4SOIrdsw = 0.0; pParam->B4SOIrds0 = 0.0; } else if (pParam->B4SOIrds0 < 0.001) { fprintf(fplog, "Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n", pParam->B4SOIrds0); printf("Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n", pParam->B4SOIrds0); pParam->B4SOIrds0 = 0.0; } /* v4.4 */ if ((model->B4SOIcfrcoeff < 1.0)||(model->B4SOIcfrcoeff > 2.0)) { fprintf(fplog, "Warning: CfrCoeff = %g is out of range.\n", model->B4SOIcfrcoeff); printf("Warning: CfrCoeff = %g is outside valid range [1,2], set to 1.\n", model->B4SOIcfrcoeff); model->B4SOIcfrcoeff = 1; } /* v4.4 */ if (model->B4SOIparamChk ==1) { /* Check L and W parameters */ if (pParam->B4SOIleff <= 5.0e-8) { fprintf(fplog, "Warning: Leff = %g may be too small.\n", pParam->B4SOIleff); printf("Warning: Leff = %g may be too small.\n", pParam->B4SOIleff); } if (pParam->B4SOIleffCV <= 5.0e-8) { fprintf(fplog, "Warning: Leff for CV = %g may be too small.\n", pParam->B4SOIleffCV); printf("Warning: Leff for CV = %g may be too small.\n", pParam->B4SOIleffCV); } if (pParam->B4SOIweff <= 1.0e-7) { fprintf(fplog, "Warning: Weff = %g may be too small.\n", pParam->B4SOIweff); printf("Warning: Weff = %g may be too small.\n", pParam->B4SOIweff); } if (pParam->B4SOIweffCV <= 1.0e-7) { fprintf(fplog, "Warning: Weff for CV = %g may be too small.\n", pParam->B4SOIweffCV); printf("Warning: Weff for CV = %g may be too small.\n", pParam->B4SOIweffCV); } /* Check threshold voltage parameters */ if (pParam->B4SOIlpe0 < 0.0) { fprintf(fplog, "Warning: Lpe0 = %g is negative.\n", pParam->B4SOIlpe0); printf("Warning: Lpe0 = %g is negative.\n", pParam->B4SOIlpe0); } if (model->B4SOItox < 1.0e-9) { fprintf(fplog, "Warning: Tox = %g is less than 10A.\n", model->B4SOItox); printf("Warning: Tox = %g is less than 10A.\n", model->B4SOItox); } if (pParam->B4SOInpeak <= 1.0e15) { fprintf(fplog, "Warning: Nch = %g may be too small.\n", pParam->B4SOInpeak); printf("Warning: Nch = %g may be too small.\n", pParam->B4SOInpeak); } else if (pParam->B4SOInpeak >= 1.0e21) { fprintf(fplog, "Warning: Nch = %g may be too large.\n", pParam->B4SOInpeak); printf("Warning: Nch = %g may be too large.\n", pParam->B4SOInpeak); } if (fabs(pParam->B4SOInsub) >= 1.0e21) { fprintf(fplog, "Warning: Nsub = %g may be too large.\n", pParam->B4SOInsub); printf("Warning: Nsub = %g may be too large.\n", pParam->B4SOInsub); } if ((pParam->B4SOIngate > 0.0) && (pParam->B4SOIngate <= 1.e18)) { fprintf(fplog, "Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->B4SOIngate); printf("Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->B4SOIngate); } if (pParam->B4SOIdvt0 < 0.0) { fprintf(fplog, "Warning: Dvt0 = %g is negative.\n", pParam->B4SOIdvt0); printf("Warning: Dvt0 = %g is negative.\n", pParam->B4SOIdvt0); } if (fabs(1.0e-6 / (pParam->B4SOIw0 + pParam->B4SOIweff)) > 10.0) { fprintf(fplog, "Warning: (W0 + Weff) may be too small.\n"); printf("Warning: (W0 + Weff) may be too small.\n"); } /* Check Nsd, Ngate and Npeak parameters*/ /* Bug Fix # 22 Jul09*/ if (model->B4SOInsd > 1.0e23) { fprintf(fplog, "Warning: Nsd = %g is too large, should be specified in cm^-3.\n", model->B4SOInsd); printf("Warning: Nsd = %g is too large, should be specified in cm^-3.\n", model->B4SOInsd); } if (model->B4SOIngate > 1.0e23) { fprintf(fplog, "Warning: Ngate = %g is too large, should be specified in cm^-3.\n", model->B4SOIngate); printf("Warning: Ngate = %g is too large, should be specified in cm^-3.\n", model->B4SOIngate); } if (model->B4SOInpeak > 1.0e20) { fprintf(fplog, "Warning: Npeak = %g is too large, should be less than 1.0e20, specified in cm^-3.\n", model->B4SOInpeak); printf("Warning: Npeak = %g is too large, should be less than 1.0e20, specified in cm^-3.\n", model->B4SOInpeak); } /* Check subthreshold parameters */ if (pParam->B4SOInfactor < 0.0) { fprintf(fplog, "Warning: Nfactor = %g is negative.\n", pParam->B4SOInfactor); printf("Warning: Nfactor = %g is negative.\n", pParam->B4SOInfactor); } if (pParam->B4SOIcdsc < 0.0) { fprintf(fplog, "Warning: Cdsc = %g is negative.\n", pParam->B4SOIcdsc); printf("Warning: Cdsc = %g is negative.\n", pParam->B4SOIcdsc); } if (pParam->B4SOIcdscd < 0.0) { fprintf(fplog, "Warning: Cdscd = %g is negative.\n", pParam->B4SOIcdscd); printf("Warning: Cdscd = %g is negative.\n", pParam->B4SOIcdscd); } /* Check DIBL parameters */ if (pParam->B4SOIeta0 < 0.0) { fprintf(fplog, "Warning: Eta0 = %g is negative.\n", pParam->B4SOIeta0); printf("Warning: Eta0 = %g is negative.\n", pParam->B4SOIeta0); } /* Check Abulk parameters */ if (fabs(1.0e-6 / (pParam->B4SOIb1 + pParam->B4SOIweff)) > 10.0) { fprintf(fplog, "Warning: (B1 + Weff) may be too small.\n"); printf("Warning: (B1 + Weff) may be too small.\n"); } /* Check Saturation parameters */ if (pParam->B4SOIa2 < 0.01) { fprintf(fplog, "Warning: A2 = %g is too small. Set to 0.01.\n", pParam->B4SOIa2); printf("Warning: A2 = %g is too small. Set to 0.01.\n", pParam->B4SOIa2); pParam->B4SOIa2 = 0.01; } else if (pParam->B4SOIa2 > 1.0) { fprintf(fplog, "Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->B4SOIa2); printf("Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->B4SOIa2); pParam->B4SOIa2 = 1.0; pParam->B4SOIa1 = 0.0; } /* if (pParam->B4SOIrdsw < 0.0) { fprintf(fplog, "Warning: Rdsw = %g is negative. Set to zero.\n", pParam->B4SOIrdsw); printf("Warning: Rdsw = %g is negative. Set to zero.\n", pParam->B4SOIrdsw); pParam->B4SOIrdsw = 0.0; pParam->B4SOIrds0 = 0.0; } else if (pParam->B4SOIrds0 < 0.001) { fprintf(fplog, "Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n", pParam->B4SOIrds0); printf("Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n", pParam->B4SOIrds0); pParam->B4SOIrds0 = 0.0; } v4.4 */ if (pParam->B4SOIvsattemp < 1.0e3) { fprintf(fplog, "Warning: Vsat at current temperature = %g may be too small.\n", pParam->B4SOIvsattemp); printf("Warning: Vsat at current temperature = %g may be too small.\n", pParam->B4SOIvsattemp); } if (pParam->B4SOIpdibl1 < 0.0) { fprintf(fplog, "Warning: Pdibl1 = %g is negative.\n", pParam->B4SOIpdibl1); printf("Warning: Pdibl1 = %g is negative.\n", pParam->B4SOIpdibl1); } if (pParam->B4SOIpdibl2 < 0.0) { fprintf(fplog, "Warning: Pdibl2 = %g is negative.\n", pParam->B4SOIpdibl2); printf("Warning: Pdibl2 = %g is negative.\n", pParam->B4SOIpdibl2); } /* Check overlap capacitance parameters */ if (model->B4SOIcgdo < 0.0) { fprintf(fplog, "Warning: cgdo = %g is negative. Set to zero.\n", model->B4SOIcgdo); printf("Warning: cgdo = %g is negative. Set to zero.\n", model->B4SOIcgdo); model->B4SOIcgdo = 0.0; } if (model->B4SOIcgso < 0.0) { fprintf(fplog, "Warning: cgso = %g is negative. Set to zero.\n", model->B4SOIcgso); printf("Warning: cgso = %g is negative. Set to zero.\n", model->B4SOIcgso); model->B4SOIcgso = 0.0; } if (model->B4SOIcgeo < 0.0) { fprintf(fplog, "Warning: cgeo = %g is negative. Set to zero.\n", model->B4SOIcgeo); printf("Warning: cgeo = %g is negative. Set to zero.\n", model->B4SOIcgeo); model->B4SOIcgeo = 0.0; } if (model->B4SOIntun < 0.0) { fprintf(fplog, "Warning: Ntuns = %g is negative.\n", model->B4SOIntun); printf("Warning: Ntuns = %g is negative.\n", model->B4SOIntun); } if (model->B4SOIntund < 0.0) { fprintf(fplog, "Warning: Ntund = %g is negative.\n", model->B4SOIntund); printf("Warning: Ntund = %g is negative.\n", model->B4SOIntund); } if (model->B4SOIndiode < 0.0) { fprintf(fplog, "Warning: Ndiode = %g is negative.\n", model->B4SOIndiode); printf("Warning: Ndiode = %g is negative.\n", model->B4SOIndiode); } if (model->B4SOIndioded < 0.0) { fprintf(fplog, "Warning: Ndioded = %g is negative.\n", model->B4SOIndioded); printf("Warning: Ndioded = %g is negative.\n", model->B4SOIndioded); } if (model->B4SOIisbjt < 0.0) { fprintf(fplog, "Warning: Isbjt = %g is negative.\n", model->B4SOIisbjt); printf("Warning: Isbjt = %g is negative.\n", model->B4SOIisbjt); } if (model->B4SOIidbjt < 0.0) { fprintf(fplog, "Warning: Idbjt = %g is negative.\n", model->B4SOIidbjt); printf("Warning: Idbjt = %g is negative.\n", model->B4SOIidbjt); } if (model->B4SOIisdif < 0.0) { fprintf(fplog, "Warning: Isdif = %g is negative.\n", model->B4SOIisdif); printf("Warning: Isdif = %g is negative.\n", model->B4SOIisdif); } if (model->B4SOIiddif < 0.0) { fprintf(fplog, "Warning: Iddif = %g is negative.\n", model->B4SOIiddif); printf("Warning: Iddif = %g is negative.\n", model->B4SOIiddif); } if (model->B4SOIisrec < 0.0) { fprintf(fplog, "Warning: Isrec = %g is negative.\n", model->B4SOIisrec); printf("Warning: Isrec = %g is negative.\n", model->B4SOIisrec); } if (model->B4SOIidrec < 0.0) { fprintf(fplog, "Warning: Idrec = %g is negative.\n", model->B4SOIidrec); printf("Warning: Idrec = %g is negative.\n", model->B4SOIidrec); } if (model->B4SOIistun < 0.0) { fprintf(fplog, "Warning: Istun = %g is negative.\n", model->B4SOIistun); printf("Warning: Istun = %g is negative.\n", model->B4SOIistun); } if (model->B4SOIidtun < 0.0) { fprintf(fplog, "Warning: Idtun = %g is negative.\n", model->B4SOIidtun); printf("Warning: Idtun = %g is negative.\n", model->B4SOIidtun); } if (model->B4SOItt < 0.0) { fprintf(fplog, "Warning: Tt = %g is negative.\n", model->B4SOItt); printf("Warning: Tt = %g is negative.\n", model->B4SOItt); } if (model->B4SOIcsdmin < 0.0) { fprintf(fplog, "Warning: Csdmin = %g is negative.\n", model->B4SOIcsdmin); printf("Warning: Csdmin = %g is negative.\n", model->B4SOIcsdmin); } if (model->B4SOIcsdesw < 0.0) { fprintf(fplog, "Warning: Csdesw = %g is negative.\n", model->B4SOIcsdesw); printf("Warning: Csdesw = %g is negative.\n", model->B4SOIcsdesw); } if (model->B4SOIasd < 0.0) { fprintf(fplog, "Warning: Asd = %g should be within (0, 1).\n", model->B4SOIasd); printf("Warning: Asd = %g should be within (0, 1).\n", model->B4SOIasd); } if (model->B4SOIrth0 < 0.0) { fprintf(fplog, "Warning: Rth0 = %g is negative.\n", model->B4SOIrth0); printf("Warning: Rth0 = %g is negative.\n", model->B4SOIrth0); } if (model->B4SOIcth0 < 0.0) { fprintf(fplog, "Warning: Cth0 = %g is negative.\n", model->B4SOIcth0); printf("Warning: Cth0 = %g is negative.\n", model->B4SOIcth0); } if (model->B4SOIrbody < 0.0) { fprintf(fplog, "Warning: Rbody = %g is negative.\n", model->B4SOIrbody); printf("Warning: Rbody = %g is negative.\n", model->B4SOIrbody); } if (model->B4SOIrbsh < 0.0) { fprintf(fplog, "Warning: Rbsh = %g is negative.\n", model->B4SOIrbsh); printf("Warning: Rbsh = %g is negative.\n", model->B4SOIrbsh); } /* v2.2 release */ if (model->B4SOIwth0 < 0.0) { fprintf(fplog, "Warning: WTH0 = %g is negative.\n", model->B4SOIwth0); printf("Warning: Wth0 = %g is negative.\n", model->B4SOIwth0); } if (model->B4SOIrhalo < 0.0) { fprintf(fplog, "Warning: RHALO = %g is negative.\n", model->B4SOIrhalo); printf("Warning: Rhalo = %g is negative.\n", model->B4SOIrhalo); } if (model->B4SOIntox < 0.0) { fprintf(fplog, "Warning: NTOX = %g is negative.\n", model->B4SOIntox); printf("Warning: Ntox = %g is negative.\n", model->B4SOIntox); } if (model->B4SOIebg < 0.0) { fprintf(fplog, "Warning: EBG = %g is negative.\n", model->B4SOIebg); printf("Warning: Ebg = %g is negative.\n", model->B4SOIebg); } if (model->B4SOIvevb < 0.0) { fprintf(fplog, "Warning: VEVB = %g is negative.\n", model->B4SOIvevb); printf("Warning: Vevb = %g is negative.\n", model->B4SOIvevb); } if (pParam->B4SOIalphaGB1 < 0.0) { fprintf(fplog, "Warning: ALPHAGB1 = %g is negative.\n", pParam->B4SOIalphaGB1); printf("Warning: AlphaGB1 = %g is negative.\n", pParam->B4SOIalphaGB1); } if (pParam->B4SOIbetaGB1 < 0.0) { fprintf(fplog, "Warning: BETAGB1 = %g is negative.\n", pParam->B4SOIbetaGB1); printf("Warning: BetaGB1 = %g is negative.\n", pParam->B4SOIbetaGB1); } if (model->B4SOIvgb1 < 0.0) { fprintf(fplog, "Warning: VGB1 = %g is negative.\n", model->B4SOIvgb1); printf("Warning: Vgb1 = %g is negative.\n", model->B4SOIvgb1); } if (model->B4SOIvecb < 0.0) { fprintf(fplog, "Warning: VECB = %g is negative.\n", model->B4SOIvecb); printf("Warning: Vecb = %g is negative.\n", model->B4SOIvecb); } if (pParam->B4SOIalphaGB2 < 0.0) { fprintf(fplog, "Warning: ALPHAGB2 = %g is negative.\n", pParam->B4SOIalphaGB2); printf("Warning: AlphaGB2 = %g is negative.\n", pParam->B4SOIalphaGB2); } if (pParam->B4SOIbetaGB2 < 0.0) { fprintf(fplog, "Warning: BETAGB2 = %g is negative.\n", pParam->B4SOIbetaGB2); printf("Warning: BetaGB2 = %g is negative.\n", pParam->B4SOIbetaGB2); } if (model->B4SOIvgb2 < 0.0) { fprintf(fplog, "Warning: VGB2 = %g is negative.\n", model->B4SOIvgb2); printf("Warning: Vgb2 = %g is negative.\n", model->B4SOIvgb2); } if (model->B4SOIvoxh < 0.0) { fprintf(fplog, "Warning: Voxh = %g is negative.\n", model->B4SOIvoxh); printf("Warning: Voxh = %g is negative.\n", model->B4SOIvoxh); } /* v2.0 release */ if (model->B4SOIk1w1 < 0.0) { fprintf(fplog, "Warning: K1W1 = %g is negative.\n", model->B4SOIk1w1); printf("Warning: K1w1 = %g is negative.\n", model->B4SOIk1w1); } if (model->B4SOIk1w2 < 0.0) { fprintf(fplog, "Warning: K1W2 = %g is negative.\n", model->B4SOIk1w2); printf("Warning: K1w2 = %g is negative.\n", model->B4SOIk1w2); } if (model->B4SOIketas < 0.0) { fprintf(fplog, "Warning: KETAS = %g is negative.\n", model->B4SOIketas); printf("Warning: Ketas = %g is negative.\n", model->B4SOIketas); } if (model->B4SOIdwbc < 0.0) { fprintf(fplog, "Warning: DWBC = %g is negative.\n", model->B4SOIdwbc); printf("Warning: Dwbc = %g is negative.\n", model->B4SOIdwbc); } if (model->B4SOIbeta0 < 0.0) { fprintf(fplog, "Warning: BETA0 = %g is negative.\n", model->B4SOIbeta0); printf("Warning: Beta0 = %g is negative.\n", model->B4SOIbeta0); } if (model->B4SOIbeta1 < 0.0) { fprintf(fplog, "Warning: BETA1 = %g is negative.\n", model->B4SOIbeta1); printf("Warning: Beta1 = %g is negative.\n", model->B4SOIbeta1); } if (model->B4SOIbeta2 < 0.0) { fprintf(fplog, "Warning: BETA2 = %g is negative.\n", model->B4SOIbeta2); printf("Warning: Beta2 = %g is negative.\n", model->B4SOIbeta2); } if (model->B4SOItii < 0.0) { fprintf(fplog, "Warning: TII = %g is negative.\n", model->B4SOItii); printf("Warning: Tii = %g is negative.\n", model->B4SOItii); } if (model->B4SOIlii < 0.0) { fprintf(fplog, "Warning: LII = %g is negative.\n", model->B4SOIlii); printf("Warning: Lii = %g is negative.\n", model->B4SOIlii); } if (model->B4SOIsii1 < 0.0) { fprintf(fplog, "Warning: SII1 = %g is negative.\n", model->B4SOIsii1); printf("Warning: Sii1 = %g is negative.\n", model->B4SOIsii1); } if (model->B4SOIsii2 < 0.0) { fprintf(fplog, "Warning: SII2 = %g is negative.\n", model->B4SOIsii2); printf("Warning: Sii2 = %g is negative.\n", model->B4SOIsii1); } if (model->B4SOIsiid < 0.0) { fprintf(fplog, "Warning: SIID = %g is negative.\n", model->B4SOIsiid); printf("Warning: Siid = %g is negative.\n", model->B4SOIsiid); } if (model->B4SOIfbjtii < 0.0) { fprintf(fplog, "Warning: FBJTII = %g is negative.\n", model->B4SOIfbjtii); printf("Warning: fbjtii = %g is negative.\n", model->B4SOIfbjtii); } if (model->B4SOIvrec0 < 0.0) /* v4.0 */ { fprintf(fplog, "Warning: VREC0S = %g is negative.\n", model->B4SOIvrec0); printf("Warning: Vrec0s = %g is negative.\n", model->B4SOIvrec0); } if (model->B4SOIvrec0d < 0.0) /* v4.0 */ { fprintf(fplog, "Warning: VREC0D = %g is negative.\n", model->B4SOIvrec0d); printf("Warning: Vrec0d = %g is negative.\n", model->B4SOIvrec0d); } if (model->B4SOIvtun0 < 0.0) /* v4.0 */ { fprintf(fplog, "Warning: VTUN0S = %g is negative.\n", model->B4SOIvtun0); printf("Warning: Vtun0s = %g is negative.\n", model->B4SOIvtun0); } if (model->B4SOIvtun0d < 0.0) /* v4.0 */ { fprintf(fplog, "Warning: VTUN0D = %g is negative.\n", model->B4SOIvtun0d); printf("Warning: Vtun0d = %g is negative.\n", model->B4SOIvtun0d); } if (model->B4SOInbjt < 0.0) { fprintf(fplog, "Warning: NBJT = %g is negative.\n", model->B4SOInbjt); printf("Warning: Nbjt = %g is negative.\n", model->B4SOInbjt); } if (model->B4SOIaely < 0.0) { fprintf(fplog, "Warning: AELY = %g is negative.\n", model->B4SOIaely); printf("Warning: Aely = %g is negative.\n", model->B4SOIaely); } if (model->B4SOIahli < 0.0) { fprintf(fplog, "Warning: AHLIS = %g is negative.\n", model->B4SOIahli); printf("Warning: Ahlis = %g is negative.\n", model->B4SOIahli); } if (model->B4SOIahlid < 0.0) { fprintf(fplog, "Warning: AHLID = %g is negative.\n", model->B4SOIahlid); printf("Warning: Ahlid = %g is negative.\n", model->B4SOIahlid); } if (model->B4SOIrbody < 0.0) { fprintf(fplog, "Warning: RBODY = %g is negative.\n", model->B4SOIrbody); printf("Warning: Rbody = %g is negative.\n", model->B4SOIrbody); } if (model->B4SOIrbsh < 0.0) { fprintf(fplog, "Warning: RBSH = %g is negative.\n", model->B4SOIrbsh); printf("Warning: Rbsh = %g is negative.\n", model->B4SOIrbsh); } /* if (pParam->B4SOIntrecf < 0.0) { fprintf(fplog, "Warning: NTRECF = %g is negative.\n", pParam->B4SOIntrecf); printf("Warning: Ntrecf = %g is negative.\n", pParam->B4SOIntrecf); } if (pParam->B4SOIntrecr < 0.0) { fprintf(fplog, "Warning: NTRECR = %g is negative.\n", pParam->B4SOIntrecr); printf("Warning: Ntrecr = %g is negative.\n", pParam->B4SOIntrecr); } v4.2 bugfix: QA Test uses negative temp co-efficients*/ /* v3.0 bug fix */ /* if (model->B4SOIndif < 0.0) { fprintf(fplog, "Warning: NDIF = %g is negative.\n", model->B4SOIndif); printf("Warning: Ndif = %g is negative.\n", model->B4SOIndif); } */ /* if (model->B4SOItcjswg < 0.0) { fprintf(fplog, "Warning: TCJSWGS = %g is negative.\n", model->B4SOItcjswg); printf("Warning: Tcjswg = %g is negative.\n", model->B4SOItcjswg); } if (model->B4SOItpbswg < 0.0) { fprintf(fplog, "Warning: TPBSWGS = %g is negative.\n", model->B4SOItpbswg); printf("Warning: Tpbswg = %g is negative.\n", model->B4SOItpbswg); } if (model->B4SOItcjswgd < 0.0) { fprintf(fplog, "Warning: TCJSWGD = %g is negative.\n", model->B4SOItcjswgd); printf("Warning: Tcjswgd = %g is negative.\n", model->B4SOItcjswgd); } if (model->B4SOItpbswgd < 0.0) { fprintf(fplog, "Warning: TPBSWGD = %g is negative.\n", model->B4SOItpbswgd); printf("Warning: Tpbswgd = %g is negative.\n", model->B4SOItpbswgd); } v4.2 bugfix: QA Test uses negative temp co-efficients*/ if ((model->B4SOIacde < 0.1) || (model->B4SOIacde > 1.6)) { fprintf(fplog, "Warning: ACDE = %g is out of range.\n", model->B4SOIacde); printf("Warning: Acde = %g is out of range.\n", model->B4SOIacde); } if ((model->B4SOImoin < 5.0)||(model->B4SOImoin > 25.0)) { fprintf(fplog, "Warning: MOIN = %g is out of range.\n", model->B4SOImoin); printf("Warning: Moin = %g is out of range.\n", model->B4SOImoin); } if (model->B4SOIdlbg < 0.0) { fprintf(fplog, "Warning: DLBG = %g is negative.\n", model->B4SOIdlbg); printf("Warning: dlbg = %g is negative.\n", model->B4SOIdlbg); } if (model->B4SOIagidl < 0.0) { fprintf(fplog, "Warning: AGIDL = %g is negative.\n", model->B4SOIagidl); printf("Warning: Agidl = %g is negative.\n", model->B4SOIagidl); } if (model->B4SOIbgidl < 0.0) { fprintf(fplog, "Warning: BGIDL = %g is negative.\n", model->B4SOIbgidl); printf("Warning: Bgidl = %g is negative.\n", model->B4SOIbgidl); } if (fabs(model->B4SOIcgidl) < 1e-9) { fprintf(fplog, "Warning: CGIDL = %g is smaller than 1e-9.\n", model->B4SOIcgidl); printf("Warning: Cgidl = %g is smaller than 1e-9.\n", model->B4SOIcgidl); } if (model->B4SOIegidl < 0.0) { fprintf(fplog, "Warning: EGIDL = %g is negative.\n", model->B4SOIegidl); printf("Warning: Egidl = %g is negative.\n", model->B4SOIegidl); } if (model->B4SOIagisl < 0.0) { fprintf(fplog, "Warning: AGISL = %g is negative.\n", model->B4SOIagisl); printf("Warning: Agidl = %g is negative.\n", model->B4SOIagidl); } if (model->B4SOIbgisl < 0.0) { fprintf(fplog, "Warning: BGISL = %g is negative.\n", model->B4SOIbgisl); printf("Warning: Bgisl = %g is negative.\n", model->B4SOIbgisl); } if (fabs(model->B4SOIcgisl) < 1e-9) { fprintf(fplog, "Warning: CGISL = %g is smaller than 1e-9.\n", model->B4SOIcgisl); printf("Warning: Cgisl = %g is smaller than 1e-9.\n", model->B4SOIcgisl); } if (model->B4SOIegisl < 0.0) { fprintf(fplog, "Warning: EGISL = %g is negative.\n", model->B4SOIegisl); printf("Warning: Egisl = %g is negative.\n", model->B4SOIegisl); } if (model->B4SOIesatii < 0.0) { fprintf(fplog, "Warning: Esatii = %g should be within positive.\n", model->B4SOIesatii); printf("Warning: Esatii = %g should be within (0, 1).\n", model->B4SOIesatii); } if (!model->B4SOIvgstcvModGiven) { fprintf(fplog, "Warning: The default vgstcvMod is changed in v4.2 from '0' to '1'.\n"); printf("Warning: The default vgstcvMod is changed in v4.2 from '0' to '1'.\n"); } if (pParam->B4SOIxj > model->B4SOItsi) { fprintf(fplog, "Warning: Xj = %g is thicker than Tsi = %g.\n", pParam->B4SOIxj, model->B4SOItsi); printf("Warning: Xj = %g is thicker than Tsi = %g.\n", pParam->B4SOIxj, model->B4SOItsi); } if (model->B4SOIcapMod < 2) { fprintf(fplog, "Warning: capMod < 2 is not supported by BSIM3SOI.\n"); printf("Warning: Warning: capMod < 2 is not supported by BSIM3SOI.\n"); } if (model->B4SOIcapMod > 3) { fprintf(fplog, "Warning: capMod > 3 is not supported by BSIMSOI4.2.\n"); printf("Warning: Warning: capMod > 3 is not supported by BSIMSOI4.2.\n"); } }/* loop for the parameter check for warning messages */ fclose(fplog); } else { fprintf(stderr, "Warning: Can't open log file. Parameter checking skipped.\n"); } return(Fatal_Flag); } tmpk8ny_4pz/src/spicelib/devices/bsimsoi/b4soiask.c0000644000175000017500000002745513546075722022530 0ustar carstencarsten/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/ /********** * Copyright 2010 Regents of the University of California. All rights reserved. * Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang * Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soiask.c * Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu. * Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu. * File: b4soiask.c * Modified by Hui Wan, Xuemei Xi 11/30/2005 * Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009 * Modified by Tanvir Morshed 09/22/2009 * Modified by Tanvir Morshed 12/31/2009 **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "b4soidef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B4SOIask( CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { B4SOIinstance *here = (B4SOIinstance*)inst; NG_IGNORE(select); switch(which) { case B4SOI_L: value->rValue = here->B4SOIl; return(OK); case B4SOI_W: value->rValue = here->B4SOIw; return(OK); case B4SOI_M: value->rValue = here->B4SOIm; return(OK); case B4SOI_AS: value->rValue = here->B4SOIsourceArea; return(OK); case B4SOI_AD: value->rValue = here->B4SOIdrainArea; return(OK); case B4SOI_PS: value->rValue = here->B4SOIsourcePerimeter; return(OK); case B4SOI_PD: value->rValue = here->B4SOIdrainPerimeter; return(OK); case B4SOI_NRS: value->rValue = here->B4SOIsourceSquares; return(OK); case B4SOI_NRD: value->rValue = here->B4SOIdrainSquares; return(OK); case B4SOI_OFF: value->iValue = here->B4SOIoff; return(OK); case B4SOI_BJTOFF: value->iValue = here->B4SOIbjtoff; return(OK); case B4SOI_RTH0: value->rValue = here->B4SOIrth0; return(OK); case B4SOI_CTH0: value->rValue = here->B4SOIcth0; return(OK); case B4SOI_NRB: value->rValue = here->B4SOIbodySquares; return(OK); case B4SOI_FRBODY: value->rValue = here->B4SOIfrbody; return(OK); case B4SOI_QB: value->rValue = here->B4SOIqbulk; return(OK); case B4SOI_QD: value->rValue = here->B4SOIqdrn; return(OK); case B4SOI_QS: value->rValue = here->B4SOIqsrc; return(OK); case B4SOI_CGG: value->rValue = here->B4SOIcggb; return(OK); case B4SOI_CGD: value->rValue = here->B4SOIcgdb; return(OK); case B4SOI_CGS: value->rValue = here->B4SOIcgsb; return(OK); case B4SOI_CDG: value->rValue = here->B4SOIcdgb; return(OK); case B4SOI_CDD: value->rValue = here->B4SOIcddb; return(OK); case B4SOI_CDS: value->rValue = here->B4SOIcdsb; return(OK); case B4SOI_CBG: value->rValue = here->B4SOIcbgb; return(OK); case B4SOI_CBD: value->rValue = here->B4SOIcbdb; return(OK); case B4SOI_CBS: value->rValue = here->B4SOIcbsb; return(OK); case B4SOI_CAPBD: value->rValue = here->B4SOIcapbd; return(OK); case B4SOI_CAPBS: value->rValue = here->B4SOIcapbs; return(OK); /* v4.0 */ case B4SOI_RBSB: value->rValue = here->B4SOIrbsb; return(OK); case B4SOI_RBDB: value->rValue = here->B4SOIrbdb; return(OK); case B4SOI_CJSB: value->rValue = here->B4SOIcjsb; return(OK); case B4SOI_CJDB: value->rValue = here->B4SOIcjdb; return(OK); case B4SOI_SA: value->rValue = here->B4SOIsa ; return(OK); case B4SOI_SB: value->rValue = here->B4SOIsb ; return(OK); case B4SOI_SD: value->rValue = here->B4SOIsd ; return(OK); case B4SOI_RBODYMOD: value->iValue = here->B4SOIrbodyMod; return(OK); case B4SOI_NF: value->rValue = here->B4SOInf; return(OK); case B4SOI_DELVTO: value->rValue = here->B4SOIdelvto; return(OK); /* v4.0 end */ /* v3.2 */ case B4SOI_SOIMOD: value->iValue = here->B4SOIsoiMod; return(OK); /* v3.1 added rgate */ case B4SOI_RGATEMOD: value->iValue = here->B4SOIrgateMod; return(OK); /* v3.1 added rgate end */ /* v2.0 release */ case B4SOI_NBC: value->rValue = here->B4SOInbc; return(OK); case B4SOI_NSEG: value->rValue = here->B4SOInseg; return(OK); case B4SOI_PDBCP: value->rValue = here->B4SOIpdbcp; return(OK); case B4SOI_PSBCP: value->rValue = here->B4SOIpsbcp; return(OK); case B4SOI_AGBCP: value->rValue = here->B4SOIagbcp; return(OK); case B4SOI_AGBCP2: value->rValue = here->B4SOIagbcp2; return(OK); /* v4.1 for BC improvement */ case B4SOI_AGBCPD: /* v4.0 */ value->rValue = here->B4SOIagbcpd; return(OK); case B4SOI_AEBCP: value->rValue = here->B4SOIaebcp; return(OK); case B4SOI_VBSUSR: value->rValue = here->B4SOIvbsusr; return(OK); case B4SOI_TNODEOUT: value->iValue = here->B4SOItnodeout; return(OK); case B4SOI_IC_VBS: value->rValue = here->B4SOIicVBS; return(OK); case B4SOI_IC_VDS: value->rValue = here->B4SOIicVDS; return(OK); case B4SOI_IC_VGS: value->rValue = here->B4SOIicVGS; return(OK); case B4SOI_IC_VES: value->rValue = here->B4SOIicVES; return(OK); case B4SOI_IC_VPS: value->rValue = here->B4SOIicVPS; return(OK); case B4SOI_DNODE: value->iValue = here->B4SOIdNode; return(OK); case B4SOI_GNODE: value->iValue = here->B4SOIgNode; return(OK); case B4SOI_SNODE: value->iValue = here->B4SOIsNode; return(OK); case B4SOI_BNODE: value->iValue = here->B4SOIbNode; return(OK); case B4SOI_ENODE: value->iValue = here->B4SOIeNode; return(OK); case B4SOI_DNODEPRIME: value->iValue = here->B4SOIdNodePrime; return(OK); case B4SOI_SNODEPRIME: value->iValue = here->B4SOIsNodePrime; return(OK); /* v3.1 added for RF */ case B4SOI_GNODEEXT: value->iValue = here->B4SOIgNodeExt; return(OK); case B4SOI_GNODEMID: value->iValue = here->B4SOIgNodeMid; return(OK); /* added for RF end*/ case B4SOI_SOURCECONDUCT: value->rValue = here->B4SOIsourceConductance; value->rValue *= here->B4SOIm; return(OK); case B4SOI_DRAINCONDUCT: value->rValue = here->B4SOIdrainConductance; value->rValue *= here->B4SOIm; return(OK); case B4SOI_VBD: value->rValue = *(ckt->CKTstate0 + here->B4SOIvbd); return(OK); case B4SOI_VBS: value->rValue = *(ckt->CKTstate0 + here->B4SOIvbs); return(OK); case B4SOI_VGS: value->rValue = *(ckt->CKTstate0 + here->B4SOIvgs); return(OK); case B4SOI_VES: value->rValue = *(ckt->CKTstate0 + here->B4SOIves); return(OK); case B4SOI_VDS: value->rValue = *(ckt->CKTstate0 + here->B4SOIvds); return(OK); case B4SOI_CD: value->rValue = here->B4SOIcdrain; value->rValue *= here->B4SOIm; return(OK); case B4SOI_IBS: value->rValue = here->B4SOIibs; value->rValue *= here->B4SOIm; return(OK); case B4SOI_IBD: value->rValue = here->B4SOIibd; value->rValue *= here->B4SOIm; return(OK); case B4SOI_ISUB: value->rValue = here->B4SOIiii; value->rValue *= here->B4SOIm; return(OK); case B4SOI_IGIDL: value->rValue = here->B4SOIigidl; return(OK); case B4SOI_IGISL: value->rValue = here->B4SOIigisl; return(OK); case B4SOI_IGS: value->rValue = here->B4SOIIgs; value->rValue *= here->B4SOIm; return(OK); case B4SOI_IGD: value->rValue = here->B4SOIIgd; value->rValue *= here->B4SOIm; return(OK); case B4SOI_IGB: value->rValue = here->B4SOIIgb; value->rValue *= here->B4SOIm; return(OK); case B4SOI_IGCS: value->rValue = here->B4SOIIgcs; value->rValue *= here->B4SOIm; return(OK); case B4SOI_IGCD: value->rValue = here->B4SOIIgcd; value->rValue *= here->B4SOIm; return(OK); case B4SOI_GM: value->rValue = here->B4SOIgm; value->rValue *= here->B4SOIm; return(OK); case B4SOI_GMID: value->rValue = here->B4SOIgm/here->B4SOIcd; return(OK); case B4SOI_GDS: value->rValue = here->B4SOIgds; value->rValue *= here->B4SOIm; return(OK); case B4SOI_GMBS: value->rValue = here->B4SOIgmbs; value->rValue *= here->B4SOIm; return(OK); case B4SOI_GBD: value->rValue = here->B4SOIgjdb; value->rValue *= here->B4SOIm; return(OK); case B4SOI_GBS: value->rValue = here->B4SOIgjsb; value->rValue *= here->B4SOIm; return(OK); case B4SOI_CQB: value->rValue = *(ckt->CKTstate0 + here->B4SOIcqb); return(OK); case B4SOI_CQG: value->rValue = *(ckt->CKTstate0 + here->B4SOIcqg); return(OK); case B4SOI_CQD: value->rValue = *(ckt->CKTstate0 + here->B4SOIcqd); return(OK); case B4SOI_CBDB: value->rValue = here->B4SOIcbdb; value->rValue *= here->B4SOIm; return(OK); case B4SOI_CBSB: value->rValue = here->B4SOIcbsb; value->rValue *= here->B4SOIm; return(OK); case B4SOI_VON: value->rValue = here->B4SOIvon; value->rValue *= here->B4SOIm; return(OK); case B4SOI_VDSAT: value->rValue = here->B4SOIvdsat; value->rValue *= here->B4SOIm; return(OK); case B4SOI_QBS: value->rValue = *(ckt->CKTstate0 + here->B4SOIqbs); return(OK); case B4SOI_QBD: value->rValue = *(ckt->CKTstate0 + here->B4SOIqbd); return(OK); #ifdef B4SOI_DEBUG_OUT case B4SOI_DEBUG1: value->rValue = here->B4SOIdebug1; return(OK); case B4SOI_DEBUG2: value->rValue = here->B4SOIdebug2; return(OK); case B4SOI_DEBUG3: value->rValue = here->B4SOIdebug3; return(OK); #endif default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsimsoi/b4soitemp.c0000644000175000017500000025530213546075722022711 0ustar carstencarsten/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/ /********** * Copyright 2010 Regents of the University of California. All rights reserved. * Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang * Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soitemp.c * Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu. * Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu. * File: b4soitemp.c * Modified by Hui Wan, Xuemei Xi 11/30/2005 * Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009 * Modified by Tanvir Morshed 09/22/2009 * Modified by Tanvir Morshed 12/31/2009 * Modified by Tanvir Morshed 05/14/2010 * Modified by Tanvir Morshed 12/16/2010 **********/ /* Lmin, Lmax, Wmin, Wmax */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "b4soidef.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define Kb 1.3806226e-23 #define KboQ 8.617087e-5 /* Kb / q where q = 1.60219e-19 */ #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define EPS0 8.85418e-12 #define PI 3.141592654 #define Charge_q 1.60219e-19 #define Eg300 1.115 /* energy gap at 300K */ #define MAX_EXPL 2.688117142e+43 #define MIN_EXPL 3.720075976e-44 #define EXPL_THRESHOLD 100.0 #define DELTA 1.0E-9 #define DEXP(A,B) { \ if (A > EXPL_THRESHOLD) { \ B = MAX_EXPL*(1.0+(A)-EXPL_THRESHOLD); \ } else if (A < -EXPL_THRESHOLD) { \ B = MIN_EXPL; \ } else { \ B = exp(A); \ } \ } int B4SOItemp( GENmodel *inModel, CKTcircuit *ckt) { register B4SOImodel *model = (B4SOImodel*) inModel; register B4SOIinstance *here; struct b4soiSizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam=NULL; double tmp, tmp1, tmp2, Eg, Eg0, ni, T0, T1, T2, T3, T4, T5, T6; double Ldrn=0.0, Wdrn; double Temp, TempRatio, Inv_L, Inv_W, Inv_LW, Vtm0, Tnom; double SDphi, SDgamma; double Inv_saref, Inv_sbref, Inv_sa, Inv_sb, rho, dvth0_lod; double W_tmp, Inv_ODeff, OD_offset, dk2_lod, deta0_lod, kvsat; int Size_Not_Found, i; double PowWeffWr, T10; /*v4.0 */ double Vtm0eot, Vtmeot,vbieot,phieot,sqrtphieot,vddeot; double Vgs_eff,Vgsteff, V0, Vth,Vgst; double lt1,ltw; double TempRatioMinus1; double n, VgstNVt, ExpArg, sqrtPhisExt,ExpVgst,Vgst2Vtm,vtfbphi2eot; double DIBL_Sft,Lpe_Vb,DITS_Sft,DeltVthtemp, DITS_Sft2; double Theta0,Delt_vth,DeltVthw; double niter,toxpf,toxpi, Tcen; double n0; double eggdep, agbc2n, agbc2p, bgbc2n, bgbc2p, sqrt2qeps; /* v4.3.1 bugfix for mtrlMod=1 -Tanvir */ /* v2.0 release */ double tmp3, T7; /*4.1*/ double epsrox, toxe, epssub; /* loop through all the B4SOI device models */ for (; model != NULL; model = B4SOInextModel(model)) { Temp = ckt->CKTtemp; if (model->B4SOIGatesidewallJctSPotential < 0.1) /* v4.0 */ model->B4SOIGatesidewallJctSPotential = 0.1; if (model->B4SOIGatesidewallJctDPotential < 0.1) /* v4.0 */ model->B4SOIGatesidewallJctDPotential = 0.1; struct b4soiSizeDependParam *p = model->pSizeDependParamKnot; while (p) { struct b4soiSizeDependParam *next_p = p->pNext; FREE(p); p = next_p; } model->pSizeDependParamKnot = NULL; pLastKnot = NULL; Tnom = model->B4SOItnom; TempRatio = Temp / Tnom; if(model->B4SOImtrlMod) { epsrox = 3.9; toxe = model->B4SOIeot; epssub = EPS0 * model->B4SOIepsrsub; sqrt2qeps = sqrt(2.0 * 1.0e6 * Charge_q * epssub); /* bugfix 4.3.1 */ /* bugfix v4.3.1 following constants should be replaced with model params -Tanvir */ agbc2n = 3.42537e-7; agbc2p = 4.97232e-7; bgbc2n = 1.16645e12; bgbc2p = 7.45669e11; eggdep = 1.12; } else { epsrox = model->B4SOIepsrox; toxe = model->B4SOItox; epssub = EPSSI; sqrt2qeps = 5.753e-12; /* constant from v4.3.0 and earlier */ /* bugfix v4.3.1 following constants are valid for mtrlMod=0 -Tanvir */ agbc2n = 3.42537e-7; agbc2p = 4.97232e-7; bgbc2n = 1.16645e12; bgbc2p = 7.45669e11; eggdep = 1.12; } /*model->B4SOIcox = epsrox * EPS0 / toxe;*/ model->B4SOIvcrit = CONSTvt0 * log(CONSTvt0 / (CONSTroot2 * 1.0e-14)); if(model->B4SOImtrlMod == 0) model->B4SOIfactor1 = sqrt(EPSSI / EPSOX * model->B4SOItox); else model->B4SOIfactor1 = sqrt(epssub / (epsrox*EPS0) * toxe);/*4.1*/ if (model->B4SOImtrlMod==0) { Vtm0 = KboQ * Tnom; Eg0 = 1.16 - 7.02e-4 * Tnom * Tnom / (Tnom + 1108.0); model->B4SOIeg0 = Eg0; model->B4SOIvtm = KboQ * Temp; Eg = 1.16 - 7.02e-4 * Temp * Temp / (Temp + 1108.0); model->B4SOIeg = Eg; /* Bug fix #11 Jun 09 Eg is evaluated at Temp, not Tnom. To be used if no selfheat */ /* ni is in cm^-3 */ ni = 1.45e10 * (Temp / 300.15) * sqrt(Temp / 300.15) * exp(21.5565981 - Eg / (2.0 * model->B4SOIvtm)); } else { Vtm0 = KboQ * Tnom; Eg0 = model->B4SOIbg0sub - model->B4SOItbgasub * Tnom * Tnom / (Tnom + model->B4SOItbgbsub); model->B4SOIeg0 = Eg0; model->B4SOIvtm = KboQ * Temp; Eg = model->B4SOIbg0sub - model->B4SOItbgasub * Temp * Temp / (Temp + model->B4SOItbgbsub); model->B4SOIeg = Eg; /* Bug fix #11 Jun 09 Eg is evaluated at Temp, not Tnom. To be used if no selfheat */ ni = model->B4SOIni0sub * (Temp / Tnom) * sqrt(Temp / Tnom) * exp(Eg0/(2.0*Vtm0) - Eg / (2.0 * model->B4SOIvtm)); } /* loop through all the instances of the model */ /* MCJ: Length and Width not initialized */ for (here = B4SOIinstances(model); here != NULL; here = B4SOInextInstance(here)) { here->B4SOIrbodyext = here->B4SOIbodySquares * model->B4SOIrbsh; pSizeDependParamKnot = model->pSizeDependParamKnot; Size_Not_Found = 1; while ((pSizeDependParamKnot != NULL) && Size_Not_Found) { if ((here->B4SOIl == pSizeDependParamKnot->Length) && (here->B4SOIw == pSizeDependParamKnot->Width) && (here->B4SOIrth0 == pSizeDependParamKnot->Rth0) && (here->B4SOIcth0 == pSizeDependParamKnot->Cth0) && (here->B4SOInf == pSizeDependParamKnot->NFinger)) /*4.0*/ { Size_Not_Found = 0; here->pParam = pSizeDependParamKnot; pParam = here->pParam; /* v2.2.3 bug fix */ } else { pLastKnot = pSizeDependParamKnot; pSizeDependParamKnot = pSizeDependParamKnot->pNext; } } if (Size_Not_Found) { pParam = (struct b4soiSizeDependParam *)tmalloc( sizeof(struct b4soiSizeDependParam)); if (pLastKnot == NULL) model->pSizeDependParamKnot = pParam; else pLastKnot->pNext = pParam; pParam->pNext = NULL; here->pParam = pParam; Ldrn = here->B4SOIl; Wdrn = here->B4SOIw / here->B4SOInf; /* v4.0 */ pParam->Length = here->B4SOIl; pParam->Width = here->B4SOIw; pParam->NFinger = here->B4SOInf; /* v4.0 */ pParam->Rth0 = here->B4SOIrth0; pParam->Cth0 = here->B4SOIcth0; T0 = pow(Ldrn, model->B4SOILln); T1 = pow(Wdrn, model->B4SOILwn); tmp1 = model->B4SOILl / T0 + model->B4SOILw / T1 + model->B4SOILwl / (T0 * T1); pParam->B4SOIdl = model->B4SOILint + tmp1; /* v2.2.3 */ tmp1 = model->B4SOILlc / T0 + model->B4SOILwc / T1 + model->B4SOILwlc / (T0 * T1); pParam->B4SOIdlc = model->B4SOIdlc + tmp1; /* v3.0 */ pParam->B4SOIdlcig = model->B4SOIdlcig + tmp1; T2 = pow(Ldrn, model->B4SOIWln); T3 = pow(Wdrn, model->B4SOIWwn); tmp2 = model->B4SOIWl / T2 + model->B4SOIWw / T3 + model->B4SOIWwl / (T2 * T3); pParam->B4SOIdw = model->B4SOIWint + tmp2; /* v2.2.3 */ tmp2 = model->B4SOIWlc / T2 + model->B4SOIWwc / T3 + model->B4SOIWwlc / (T2 * T3); pParam->B4SOIdwc = model->B4SOIdwc + tmp2; pParam->B4SOIleff = here->B4SOIl - 2.0 * pParam->B4SOIdl; if (pParam->B4SOIleff <= 0.0) { SPfrontEnd->IFerrorf(ERR_FATAL, "B4SOI: mosfet %s, model %s: Effective channel length <= 0", model->B4SOImodName, here->B4SOIname); return(E_BADPARM); } pParam->B4SOIweff = here->B4SOIw / here->B4SOInf /* v4.0 */ - here->B4SOInbc * model->B4SOIdwbc - (2.0 - here->B4SOInbc) * pParam->B4SOIdw; if (pParam->B4SOIweff <= 0.0) { SPfrontEnd->IFerrorf(ERR_FATAL, "B4SOI: mosfet %s, model %s: Effective channel width <= 0", model->B4SOImodName, here->B4SOIname); return(E_BADPARM); } pParam->B4SOIwdiod = pParam->B4SOIweff / here->B4SOInseg + here->B4SOIpdbcp; pParam->B4SOIwdios = pParam->B4SOIweff / here->B4SOInseg + here->B4SOIpsbcp; pParam->B4SOIleffCV = here->B4SOIl - 2.0 * pParam->B4SOIdlc; if (pParam->B4SOIleffCV <= 0.0) { SPfrontEnd->IFerrorf(ERR_FATAL, "B4SOI: mosfet %s, model %s: Effective channel length for C-V <= 0", model->B4SOImodName, here->B4SOIname); return(E_BADPARM); } pParam->B4SOIweffCV = here->B4SOIw /here->B4SOInf /* v4.0 */ - here->B4SOInbc * model->B4SOIdwbc - (2.0 - here->B4SOInbc) * pParam->B4SOIdwc; if (pParam->B4SOIweffCV <= 0.0) { SPfrontEnd->IFerrorf(ERR_FATAL, "B4SOI: mosfet %s, model %s: Effective channel width for C-V <= 0", model->B4SOImodName, here->B4SOIname); return(E_BADPARM); } pParam->B4SOIwdiodCV = pParam->B4SOIweffCV / here->B4SOInseg + here->B4SOIpdbcp; pParam->B4SOIwdiosCV = pParam->B4SOIweffCV / here->B4SOInseg + here->B4SOIpsbcp; pParam->B4SOIleffCVb = here->B4SOIl - 2.0 * pParam->B4SOIdlc - model->B4SOIdlcb; if (pParam->B4SOIleffCVb <= 0.0) { SPfrontEnd->IFerrorf(ERR_FATAL, "B4SOI: mosfet %s, model %s: Effective channel length for C-V (body) <= 0", model->B4SOImodName, here->B4SOIname); return(E_BADPARM); } pParam->B4SOIleffCVbg = pParam->B4SOIleffCVb + 2 * model->B4SOIdlbg; if (pParam->B4SOIleffCVbg <= 0.0) { SPfrontEnd->IFerrorf(ERR_FATAL, "B4SOI: mosfet %s, model %s: Effective channel length for C-V (backgate) <= 0", model->B4SOImodName, here->B4SOIname); return(E_BADPARM); } /* Not binned - START */ pParam->B4SOIgamma1 = model->B4SOIgamma1; pParam->B4SOIgamma2 = model->B4SOIgamma2; pParam->B4SOIvbx = model->B4SOIvbx; pParam->B4SOIvbm = model->B4SOIvbm; pParam->B4SOIxt = model->B4SOIxt; /* Not binned - END */ /* CV model */ pParam->B4SOIcf = model->B4SOIcf; pParam->B4SOIclc = model->B4SOIclc; pParam->B4SOIcle = model->B4SOIcle; pParam->B4SOIabulkCVfactor = 1.0 + pow((pParam->B4SOIclc / pParam->B4SOIleff), pParam->B4SOIcle); /* Added for binning - START */ if (model->B4SOIbinUnit == 1) { Inv_L = 1.0e-6 / pParam->B4SOIleff; Inv_W = 1.0e-6 / pParam->B4SOIweff; Inv_LW = 1.0e-12 / (pParam->B4SOIleff * pParam->B4SOIweff); } else { Inv_L = 1.0 / pParam->B4SOIleff; Inv_W = 1.0 / pParam->B4SOIweff; Inv_LW = 1.0 / (pParam->B4SOIleff * pParam->B4SOIweff); } pParam->B4SOInpeak = model->B4SOInpeak + model->B4SOIlnpeak * Inv_L + model->B4SOIwnpeak * Inv_W + model->B4SOIpnpeak * Inv_LW; pParam->B4SOInsub = model->B4SOInsub + model->B4SOIlnsub * Inv_L + model->B4SOIwnsub * Inv_W + model->B4SOIpnsub * Inv_LW; pParam->B4SOIngate = model->B4SOIngate + model->B4SOIlngate * Inv_L + model->B4SOIwngate * Inv_W + model->B4SOIpngate * Inv_LW; /*4.1*/ pParam->B4SOInsd = model->B4SOInsd + model->B4SOIlnsd * Inv_L + model->B4SOIwnsd * Inv_W + model->B4SOIpnsd * Inv_LW; pParam->B4SOIvth0 = model->B4SOIvth0 + model->B4SOIlvth0 * Inv_L + model->B4SOIwvth0 * Inv_W + model->B4SOIpvth0 * Inv_LW; pParam->B4SOIvfb = model->B4SOIvfb + model->B4SOIlvfb * Inv_L + model->B4SOIwvfb * Inv_W + model->B4SOIpvfb * Inv_LW; /* v4.1 */ pParam->B4SOIk1 = model->B4SOIk1 + model->B4SOIlk1 * Inv_L + model->B4SOIwk1 * Inv_W + model->B4SOIpk1 * Inv_LW; pParam->B4SOIk2 = model->B4SOIk2 + model->B4SOIlk2 * Inv_L + model->B4SOIwk2 * Inv_W + model->B4SOIpk2 * Inv_LW; pParam->B4SOIk1w1 = model->B4SOIk1w1 + model->B4SOIlk1w1 * Inv_L + model->B4SOIwk1w1 * Inv_W + model->B4SOIpk1w1 * Inv_LW; pParam->B4SOIk1w2 = model->B4SOIk1w2 + model->B4SOIlk1w2 * Inv_L + model->B4SOIwk1w2 * Inv_W + model->B4SOIpk1w2 * Inv_LW; pParam->B4SOIk3 = model->B4SOIk3 + model->B4SOIlk3 * Inv_L + model->B4SOIwk3 * Inv_W + model->B4SOIpk3 * Inv_LW; pParam->B4SOIk3b = model->B4SOIk3b + model->B4SOIlk3b * Inv_L + model->B4SOIwk3b * Inv_W + model->B4SOIpk3b * Inv_LW; pParam->B4SOIkb1 = model->B4SOIkb1 + model->B4SOIlkb1 * Inv_L + model->B4SOIwkb1 * Inv_W + model->B4SOIpkb1 * Inv_LW; pParam->B4SOIw0 = model->B4SOIw0 + model->B4SOIlw0 * Inv_L + model->B4SOIww0 * Inv_W + model->B4SOIpw0 * Inv_LW; pParam->B4SOIlpe0 = model->B4SOIlpe0 + model->B4SOIllpe0 * Inv_L + model->B4SOIwlpe0 * Inv_W + model->B4SOIplpe0 * Inv_LW; pParam->B4SOIlpeb = model->B4SOIlpeb + model->B4SOIllpeb * Inv_L + model->B4SOIwlpeb * Inv_W + model->B4SOIplpeb * Inv_LW; /* v4.0 */ pParam->B4SOIdvt0 = model->B4SOIdvt0 + model->B4SOIldvt0 * Inv_L + model->B4SOIwdvt0 * Inv_W + model->B4SOIpdvt0 * Inv_LW; pParam->B4SOIdvt1 = model->B4SOIdvt1 + model->B4SOIldvt1 * Inv_L + model->B4SOIwdvt1 * Inv_W + model->B4SOIpdvt1 * Inv_LW; pParam->B4SOIdvt2 = model->B4SOIdvt2 + model->B4SOIldvt2 * Inv_L + model->B4SOIwdvt2 * Inv_W + model->B4SOIpdvt2 * Inv_LW; pParam->B4SOIdvt0w = model->B4SOIdvt0w + model->B4SOIldvt0w * Inv_L + model->B4SOIwdvt0w * Inv_W + model->B4SOIpdvt0w * Inv_LW; pParam->B4SOIdvt1w = model->B4SOIdvt1w + model->B4SOIldvt1w * Inv_L + model->B4SOIwdvt1w * Inv_W + model->B4SOIpdvt1w * Inv_LW; pParam->B4SOIdvt2w = model->B4SOIdvt2w + model->B4SOIldvt2w * Inv_L + model->B4SOIwdvt2w * Inv_W + model->B4SOIpdvt2w * Inv_LW; pParam->B4SOIu0 = model->B4SOIu0 + model->B4SOIlu0 * Inv_L + model->B4SOIwu0 * Inv_W + model->B4SOIpu0 * Inv_LW; pParam->B4SOIua = model->B4SOIua + model->B4SOIlua * Inv_L + model->B4SOIwua * Inv_W + model->B4SOIpua * Inv_LW; pParam->B4SOIub = model->B4SOIub + model->B4SOIlub * Inv_L + model->B4SOIwub * Inv_W + model->B4SOIpub * Inv_LW; pParam->B4SOIuc = model->B4SOIuc + model->B4SOIluc * Inv_L + model->B4SOIwuc * Inv_W + model->B4SOIpuc * Inv_LW; pParam->B4SOIvsat = model->B4SOIvsat + model->B4SOIlvsat * Inv_L + model->B4SOIwvsat * Inv_W + model->B4SOIpvsat * Inv_LW; pParam->B4SOIa0 = model->B4SOIa0 + model->B4SOIla0 * Inv_L + model->B4SOIwa0 * Inv_W + model->B4SOIpa0 * Inv_LW; pParam->B4SOIags = model->B4SOIags + model->B4SOIlags * Inv_L + model->B4SOIwags * Inv_W + model->B4SOIpags * Inv_LW; pParam->B4SOIb0 = model->B4SOIb0 + model->B4SOIlb0 * Inv_L + model->B4SOIwb0 * Inv_W + model->B4SOIpb0 * Inv_LW; pParam->B4SOIb1 = model->B4SOIb1 + model->B4SOIlb1 * Inv_L + model->B4SOIwb1 * Inv_W + model->B4SOIpb1 * Inv_LW; pParam->B4SOIketa = model->B4SOIketa + model->B4SOIlketa * Inv_L + model->B4SOIwketa * Inv_W + model->B4SOIpketa * Inv_LW; pParam->B4SOIketas = model->B4SOIketas + model->B4SOIlketas * Inv_L + model->B4SOIwketas * Inv_W + model->B4SOIpketas * Inv_LW; pParam->B4SOIa1 = model->B4SOIa1 + model->B4SOIla1 * Inv_L + model->B4SOIwa1 * Inv_W + model->B4SOIpa1 * Inv_LW; pParam->B4SOIa2 = model->B4SOIa2 + model->B4SOIla2 * Inv_L + model->B4SOIwa2 * Inv_W + model->B4SOIpa2 * Inv_LW; pParam->B4SOIrdsw = model->B4SOIrdsw + model->B4SOIlrdsw * Inv_L + model->B4SOIwrdsw * Inv_W + model->B4SOIprdsw * Inv_LW; pParam->B4SOIrsw = model->B4SOIrsw /* v4.0 */ + model->B4SOIlrsw * Inv_L + model->B4SOIwrsw * Inv_W + model->B4SOIprsw * Inv_LW; pParam->B4SOIrdw = model->B4SOIrdw /* v4.0 */ + model->B4SOIlrdw * Inv_L + model->B4SOIwrdw * Inv_W + model->B4SOIprdw * Inv_LW; pParam->B4SOIprwb = model->B4SOIprwb + model->B4SOIlprwb * Inv_L + model->B4SOIwprwb * Inv_W + model->B4SOIpprwb * Inv_LW; pParam->B4SOIprwg = model->B4SOIprwg + model->B4SOIlprwg * Inv_L + model->B4SOIwprwg * Inv_W + model->B4SOIpprwg * Inv_LW; pParam->B4SOIwr = model->B4SOIwr + model->B4SOIlwr * Inv_L + model->B4SOIwwr * Inv_W + model->B4SOIpwr * Inv_LW; pParam->B4SOInfactor = model->B4SOInfactor + model->B4SOIlnfactor * Inv_L + model->B4SOIwnfactor * Inv_W + model->B4SOIpnfactor * Inv_LW; pParam->B4SOIdwg = model->B4SOIdwg + model->B4SOIldwg * Inv_L + model->B4SOIwdwg * Inv_W + model->B4SOIpdwg * Inv_LW; pParam->B4SOIdwb = model->B4SOIdwb + model->B4SOIldwb * Inv_L + model->B4SOIwdwb * Inv_W + model->B4SOIpdwb * Inv_LW; pParam->B4SOIvoff = model->B4SOIvoff + model->B4SOIlvoff * Inv_L + model->B4SOIwvoff * Inv_W + model->B4SOIpvoff * Inv_LW; pParam->B4SOIeta0 = model->B4SOIeta0 + model->B4SOIleta0 * Inv_L + model->B4SOIweta0 * Inv_W + model->B4SOIpeta0 * Inv_LW; pParam->B4SOIetab = model->B4SOIetab + model->B4SOIletab * Inv_L + model->B4SOIwetab * Inv_W + model->B4SOIpetab * Inv_LW; pParam->B4SOIdsub = model->B4SOIdsub + model->B4SOIldsub * Inv_L + model->B4SOIwdsub * Inv_W + model->B4SOIpdsub * Inv_LW; pParam->B4SOIcit = model->B4SOIcit + model->B4SOIlcit * Inv_L + model->B4SOIwcit * Inv_W + model->B4SOIpcit * Inv_LW; pParam->B4SOIcdsc = model->B4SOIcdsc + model->B4SOIlcdsc * Inv_L + model->B4SOIwcdsc * Inv_W + model->B4SOIpcdsc * Inv_LW; pParam->B4SOIcdscb = model->B4SOIcdscb + model->B4SOIlcdscb * Inv_L + model->B4SOIwcdscb * Inv_W + model->B4SOIpcdscb * Inv_LW; pParam->B4SOIcdscd = model->B4SOIcdscd + model->B4SOIlcdscd * Inv_L + model->B4SOIwcdscd * Inv_W + model->B4SOIpcdscd * Inv_LW; pParam->B4SOIpclm = model->B4SOIpclm + model->B4SOIlpclm * Inv_L + model->B4SOIwpclm * Inv_W + model->B4SOIppclm * Inv_LW; pParam->B4SOIpdibl1 = model->B4SOIpdibl1 + model->B4SOIlpdibl1 * Inv_L + model->B4SOIwpdibl1 * Inv_W + model->B4SOIppdibl1 * Inv_LW; pParam->B4SOIpdibl2 = model->B4SOIpdibl2 + model->B4SOIlpdibl2 * Inv_L + model->B4SOIwpdibl2 * Inv_W + model->B4SOIppdibl2 * Inv_LW; pParam->B4SOIpdiblb = model->B4SOIpdiblb + model->B4SOIlpdiblb * Inv_L + model->B4SOIwpdiblb * Inv_W + model->B4SOIppdiblb * Inv_LW; pParam->B4SOIdrout = model->B4SOIdrout + model->B4SOIldrout * Inv_L + model->B4SOIwdrout * Inv_W + model->B4SOIpdrout * Inv_LW; pParam->B4SOIpvag = model->B4SOIpvag + model->B4SOIlpvag * Inv_L + model->B4SOIwpvag * Inv_W + model->B4SOIppvag * Inv_LW; pParam->B4SOIdelta = model->B4SOIdelta + model->B4SOIldelta * Inv_L + model->B4SOIwdelta * Inv_W + model->B4SOIpdelta * Inv_LW; pParam->B4SOIalpha0 = model->B4SOIalpha0 + model->B4SOIlalpha0 * Inv_L + model->B4SOIwalpha0 * Inv_W + model->B4SOIpalpha0 * Inv_LW; pParam->B4SOIfbjtii = model->B4SOIfbjtii + model->B4SOIlfbjtii * Inv_L + model->B4SOIwfbjtii * Inv_W + model->B4SOIpfbjtii * Inv_LW; /*4.1 Iii model*/ pParam->B4SOIebjtii = model->B4SOIebjtii + model->B4SOIlebjtii * Inv_L + model->B4SOIwebjtii * Inv_W + model->B4SOIpebjtii * Inv_LW; pParam->B4SOIcbjtii = model->B4SOIcbjtii + model->B4SOIlcbjtii * Inv_L + model->B4SOIwcbjtii * Inv_W + model->B4SOIpcbjtii * Inv_LW; pParam->B4SOIvbci = model->B4SOIvbci + model->B4SOIlvbci * Inv_L + model->B4SOIwvbci * Inv_W + model->B4SOIpvbci * Inv_LW; pParam->B4SOIabjtii = model->B4SOIabjtii + model->B4SOIlabjtii * Inv_L + model->B4SOIwabjtii * Inv_W + model->B4SOIpabjtii * Inv_LW; pParam->B4SOImbjtii = model->B4SOImbjtii + model->B4SOIlmbjtii * Inv_L + model->B4SOIwmbjtii * Inv_W + model->B4SOIpmbjtii * Inv_LW; pParam->B4SOIbeta0 = model->B4SOIbeta0 + model->B4SOIlbeta0 * Inv_L + model->B4SOIwbeta0 * Inv_W + model->B4SOIpbeta0 * Inv_LW; pParam->B4SOIbeta1 = model->B4SOIbeta1 + model->B4SOIlbeta1 * Inv_L + model->B4SOIwbeta1 * Inv_W + model->B4SOIpbeta1 * Inv_LW; pParam->B4SOIbeta2 = model->B4SOIbeta2 + model->B4SOIlbeta2 * Inv_L + model->B4SOIwbeta2 * Inv_W + model->B4SOIpbeta2 * Inv_LW; pParam->B4SOIvdsatii0 = model->B4SOIvdsatii0 + model->B4SOIlvdsatii0 * Inv_L + model->B4SOIwvdsatii0 * Inv_W + model->B4SOIpvdsatii0 * Inv_LW; pParam->B4SOIlii = model->B4SOIlii + model->B4SOIllii * Inv_L + model->B4SOIwlii * Inv_W + model->B4SOIplii * Inv_LW; pParam->B4SOIesatii = model->B4SOIesatii + model->B4SOIlesatii * Inv_L + model->B4SOIwesatii * Inv_W + model->B4SOIpesatii * Inv_LW; pParam->B4SOIsii0 = model->B4SOIsii0 + model->B4SOIlsii0 * Inv_L + model->B4SOIwsii0 * Inv_W + model->B4SOIpsii0 * Inv_LW; pParam->B4SOIsii1 = model->B4SOIsii1 + model->B4SOIlsii1 * Inv_L + model->B4SOIwsii1 * Inv_W + model->B4SOIpsii1 * Inv_LW; pParam->B4SOIsii2 = model->B4SOIsii2 + model->B4SOIlsii2 * Inv_L + model->B4SOIwsii2 * Inv_W + model->B4SOIpsii2 * Inv_LW; pParam->B4SOIsiid = model->B4SOIsiid + model->B4SOIlsiid * Inv_L + model->B4SOIwsiid * Inv_W + model->B4SOIpsiid * Inv_LW; pParam->B4SOIagidl = model->B4SOIagidl + model->B4SOIlagidl * Inv_L + model->B4SOIwagidl * Inv_W + model->B4SOIpagidl * Inv_LW; pParam->B4SOIbgidl = model->B4SOIbgidl + model->B4SOIlbgidl * Inv_L + model->B4SOIwbgidl * Inv_W + model->B4SOIpbgidl * Inv_LW; pParam->B4SOIcgidl = model->B4SOIcgidl + model->B4SOIlcgidl * Inv_L + model->B4SOIwcgidl * Inv_W + model->B4SOIpcgidl * Inv_LW; pParam->B4SOIegidl = model->B4SOIegidl + model->B4SOIlegidl * Inv_L + model->B4SOIwegidl * Inv_W + model->B4SOIpegidl * Inv_LW; pParam->B4SOIrgidl = model->B4SOIrgidl + model->B4SOIlrgidl * Inv_L + model->B4SOIwrgidl * Inv_W + model->B4SOIprgidl * Inv_LW; pParam->B4SOIkgidl = model->B4SOIkgidl + model->B4SOIlkgidl * Inv_L + model->B4SOIwkgidl * Inv_W + model->B4SOIpkgidl * Inv_LW; pParam->B4SOIfgidl = model->B4SOIfgidl + model->B4SOIlfgidl * Inv_L + model->B4SOIwfgidl * Inv_W + model->B4SOIpfgidl * Inv_LW; pParam->B4SOIagisl = model->B4SOIagisl + model->B4SOIlagisl * Inv_L + model->B4SOIwagisl * Inv_W + model->B4SOIpagisl * Inv_LW; pParam->B4SOIbgisl = model->B4SOIbgisl + model->B4SOIlbgisl * Inv_L + model->B4SOIwbgisl * Inv_W + model->B4SOIpbgisl * Inv_LW; pParam->B4SOIcgisl = model->B4SOIcgisl + model->B4SOIlcgisl * Inv_L + model->B4SOIwcgisl * Inv_W + model->B4SOIpcgisl * Inv_LW; pParam->B4SOIegisl = model->B4SOIegisl + model->B4SOIlegisl * Inv_L + model->B4SOIwegisl * Inv_W + model->B4SOIpegisl * Inv_LW; pParam->B4SOIrgisl = model->B4SOIrgisl + model->B4SOIlrgisl * Inv_L + model->B4SOIwrgisl * Inv_W + model->B4SOIprgisl * Inv_LW; pParam->B4SOIkgisl = model->B4SOIkgisl + model->B4SOIlkgisl * Inv_L + model->B4SOIwkgisl * Inv_W + model->B4SOIpkgisl * Inv_LW; pParam->B4SOIfgisl = model->B4SOIfgisl + model->B4SOIlfgisl * Inv_L + model->B4SOIwfgisl * Inv_W + model->B4SOIpfgisl * Inv_LW; pParam->B4SOIntun = model->B4SOIntun /* v4.0 */ + model->B4SOIlntun * Inv_L + model->B4SOIwntun * Inv_W + model->B4SOIpntun * Inv_LW; pParam->B4SOIntund = model->B4SOIntund /* v4.0 */ + model->B4SOIlntund * Inv_L + model->B4SOIwntund * Inv_W + model->B4SOIpntund * Inv_LW; pParam->B4SOIndiode = model->B4SOIndiode /* v4.0 */ + model->B4SOIlndiode * Inv_L + model->B4SOIwndiode * Inv_W + model->B4SOIpndiode * Inv_LW; pParam->B4SOIndioded = model->B4SOIndioded /* v4.0 */ + model->B4SOIlndioded * Inv_L + model->B4SOIwndioded * Inv_W + model->B4SOIpndioded * Inv_LW; pParam->B4SOInrecf0 = model->B4SOInrecf0 /* v4.0 */ + model->B4SOIlnrecf0 * Inv_L + model->B4SOIwnrecf0 * Inv_W + model->B4SOIpnrecf0 * Inv_LW; pParam->B4SOInrecf0d = model->B4SOInrecf0d /* v4.0 */ + model->B4SOIlnrecf0d * Inv_L + model->B4SOIwnrecf0d * Inv_W + model->B4SOIpnrecf0d * Inv_LW; pParam->B4SOInrecr0 = model->B4SOInrecr0 /* v4.0 */ + model->B4SOIlnrecr0 * Inv_L + model->B4SOIwnrecr0 * Inv_W + model->B4SOIpnrecr0 * Inv_LW; pParam->B4SOInrecr0d = model->B4SOInrecr0d /* v4.0 */ + model->B4SOIlnrecr0d * Inv_L + model->B4SOIwnrecr0d * Inv_W + model->B4SOIpnrecr0d * Inv_LW; pParam->B4SOIisbjt = model->B4SOIisbjt + model->B4SOIlisbjt * Inv_L + model->B4SOIwisbjt * Inv_W + model->B4SOIpisbjt * Inv_LW; pParam->B4SOIidbjt = model->B4SOIidbjt + model->B4SOIlidbjt * Inv_L + model->B4SOIwidbjt * Inv_W + model->B4SOIpidbjt * Inv_LW; pParam->B4SOIisdif = model->B4SOIisdif + model->B4SOIlisdif * Inv_L + model->B4SOIwisdif * Inv_W + model->B4SOIpisdif * Inv_LW; pParam->B4SOIiddif = model->B4SOIiddif + model->B4SOIliddif * Inv_L + model->B4SOIwiddif * Inv_W + model->B4SOIpiddif * Inv_LW; pParam->B4SOIisrec = model->B4SOIisrec + model->B4SOIlisrec * Inv_L + model->B4SOIwisrec * Inv_W + model->B4SOIpisrec * Inv_LW; pParam->B4SOIistun = model->B4SOIistun + model->B4SOIlistun * Inv_L + model->B4SOIwistun * Inv_W + model->B4SOIpistun * Inv_LW; pParam->B4SOIidrec = model->B4SOIidrec + model->B4SOIlidrec * Inv_L + model->B4SOIwidrec * Inv_W + model->B4SOIpidrec * Inv_LW; pParam->B4SOIidtun = model->B4SOIidtun + model->B4SOIlidtun * Inv_L + model->B4SOIwidtun * Inv_W + model->B4SOIpidtun * Inv_LW; pParam->B4SOIvrec0 = model->B4SOIvrec0 /* v4.0 */ + model->B4SOIlvrec0 * Inv_L + model->B4SOIwvrec0 * Inv_W + model->B4SOIpvrec0 * Inv_LW; pParam->B4SOIvrec0d = model->B4SOIvrec0d /* v4.0 */ + model->B4SOIlvrec0d * Inv_L + model->B4SOIwvrec0d * Inv_W + model->B4SOIpvrec0d * Inv_LW; pParam->B4SOIvtun0 = model->B4SOIvtun0 /* v4.0 */ + model->B4SOIlvtun0 * Inv_L + model->B4SOIwvtun0 * Inv_W + model->B4SOIpvtun0 * Inv_LW; pParam->B4SOIvtun0d = model->B4SOIvtun0d /* v4.0 */ + model->B4SOIlvtun0d * Inv_L + model->B4SOIwvtun0d * Inv_W + model->B4SOIpvtun0d * Inv_LW; pParam->B4SOInbjt = model->B4SOInbjt + model->B4SOIlnbjt * Inv_L + model->B4SOIwnbjt * Inv_W + model->B4SOIpnbjt * Inv_LW; pParam->B4SOIlbjt0 = model->B4SOIlbjt0 + model->B4SOIllbjt0 * Inv_L + model->B4SOIwlbjt0 * Inv_W + model->B4SOIplbjt0 * Inv_LW; pParam->B4SOIvabjt = model->B4SOIvabjt + model->B4SOIlvabjt * Inv_L + model->B4SOIwvabjt * Inv_W + model->B4SOIpvabjt * Inv_LW; pParam->B4SOIaely = model->B4SOIaely + model->B4SOIlaely * Inv_L + model->B4SOIwaely * Inv_W + model->B4SOIpaely * Inv_LW; pParam->B4SOIahli = model->B4SOIahli /* v4.0 */ + model->B4SOIlahli * Inv_L + model->B4SOIwahli * Inv_W + model->B4SOIpahli * Inv_LW; pParam->B4SOIahlid = model->B4SOIahlid /* v4.0 */ + model->B4SOIlahlid * Inv_L + model->B4SOIwahlid * Inv_W + model->B4SOIpahlid * Inv_LW; /* v3.1 */ pParam->B4SOIxj = model->B4SOIxj + model->B4SOIlxj * Inv_L + model->B4SOIwxj * Inv_W + model->B4SOIpxj * Inv_LW; pParam->B4SOIalphaGB1 = model->B4SOIalphaGB1 + model->B4SOIlalphaGB1 * Inv_L + model->B4SOIwalphaGB1 * Inv_W + model->B4SOIpalphaGB1 * Inv_LW; pParam->B4SOIalphaGB2 = model->B4SOIalphaGB2 + model->B4SOIlalphaGB2 * Inv_L + model->B4SOIwalphaGB2 * Inv_W + model->B4SOIpalphaGB2 * Inv_LW; pParam->B4SOIbetaGB1 = model->B4SOIbetaGB1 + model->B4SOIlbetaGB1* Inv_L + model->B4SOIwbetaGB1 * Inv_W + model->B4SOIpbetaGB1 * Inv_LW; pParam->B4SOIbetaGB2 = model->B4SOIbetaGB2 + model->B4SOIlbetaGB2 * Inv_L + model->B4SOIwbetaGB2 * Inv_W + model->B4SOIpbetaGB2 * Inv_LW; pParam->B4SOIndif = model->B4SOIndif + model->B4SOIlndif * Inv_L + model->B4SOIwndif * Inv_W + model->B4SOIpndif * Inv_LW; pParam->B4SOIntrecf = model->B4SOIntrecf + model->B4SOIlntrecf* Inv_L + model->B4SOIwntrecf * Inv_W + model->B4SOIpntrecf * Inv_LW; pParam->B4SOIntrecr = model->B4SOIntrecr + model->B4SOIlntrecr * Inv_L + model->B4SOIwntrecr * Inv_W + model->B4SOIpntrecr * Inv_LW; pParam->B4SOIxbjt = model->B4SOIxbjt + model->B4SOIlxbjt * Inv_L + model->B4SOIwxbjt * Inv_W + model->B4SOIpxbjt * Inv_LW; pParam->B4SOIxdif = model->B4SOIxdif + model->B4SOIlxdif* Inv_L + model->B4SOIwxdif * Inv_W + model->B4SOIpxdif * Inv_LW; pParam->B4SOIxrec = model->B4SOIxrec + model->B4SOIlxrec * Inv_L + model->B4SOIwxrec * Inv_W + model->B4SOIpxrec * Inv_LW; pParam->B4SOIxtun = model->B4SOIxtun + model->B4SOIlxtun * Inv_L + model->B4SOIwxtun * Inv_W + model->B4SOIpxtun * Inv_LW; pParam->B4SOIxdifd = model->B4SOIxdifd + model->B4SOIlxdifd* Inv_L + model->B4SOIwxdifd * Inv_W + model->B4SOIpxdifd * Inv_LW; pParam->B4SOIxrecd = model->B4SOIxrecd + model->B4SOIlxrecd * Inv_L + model->B4SOIwxrecd * Inv_W + model->B4SOIpxrecd * Inv_LW; pParam->B4SOIxtund = model->B4SOIxtund + model->B4SOIlxtund * Inv_L + model->B4SOIwxtund * Inv_W + model->B4SOIpxtund * Inv_LW; pParam->B4SOIcgdl = model->B4SOIcgdl + model->B4SOIlcgdl * Inv_L + model->B4SOIwcgdl * Inv_W + model->B4SOIpcgdl * Inv_LW; pParam->B4SOIcgsl = model->B4SOIcgsl + model->B4SOIlcgsl * Inv_L + model->B4SOIwcgsl * Inv_W + model->B4SOIpcgsl * Inv_LW; pParam->B4SOIckappa = model->B4SOIckappa + model->B4SOIlckappa * Inv_L + model->B4SOIwckappa * Inv_W + model->B4SOIpckappa * Inv_LW; pParam->B4SOIute = model->B4SOIute + model->B4SOIlute * Inv_L + model->B4SOIwute * Inv_W + model->B4SOIpute * Inv_LW; /*4.1 mobmod=4*/ pParam->B4SOIud = model->B4SOIud /* + model->B4SOIud * Inv_L*//*Bug #15 Jun 09*/ + model->B4SOIlud * Inv_L /*Fix*/ + model->B4SOIwud * Inv_W + model->B4SOIpud * Inv_LW; pParam->B4SOIud1 = model->B4SOIud1 + model->B4SOIlud1 * Inv_L + model->B4SOIwud1 * Inv_W + model->B4SOIpud1 * Inv_LW; pParam->B4SOIeu = model->B4SOIeu + model->B4SOIleu * Inv_L + model->B4SOIweu * Inv_W + model->B4SOIpeu * Inv_LW; pParam->B4SOIucs = model->B4SOIucs + model->B4SOIlucs * Inv_L + model->B4SOIwucs * Inv_W + model->B4SOIpucs * Inv_LW; pParam->B4SOIucste = model->B4SOIucste + model->B4SOIlucste * Inv_L + model->B4SOIwucste * Inv_W + model->B4SOIpucste * Inv_LW; pParam->B4SOIkt1 = model->B4SOIkt1 + model->B4SOIlkt1 * Inv_L + model->B4SOIwkt1 * Inv_W + model->B4SOIpkt1 * Inv_LW; pParam->B4SOIkt2 = model->B4SOIkt2 + model->B4SOIlkt2 * Inv_L + model->B4SOIwkt2 * Inv_W + model->B4SOIpkt2 * Inv_LW; pParam->B4SOIkt1l = model->B4SOIkt1l + model->B4SOIlkt1l * Inv_L + model->B4SOIwkt1l * Inv_W + model->B4SOIpkt1l * Inv_LW; pParam->B4SOIua1 = model->B4SOIua1 + model->B4SOIlua1 * Inv_L + model->B4SOIwua1 * Inv_W + model->B4SOIpua1 * Inv_LW; pParam->B4SOIub1 = model->B4SOIub1 + model->B4SOIlub1* Inv_L + model->B4SOIwub1 * Inv_W + model->B4SOIpub1 * Inv_LW; pParam->B4SOIuc1 = model->B4SOIuc1 + model->B4SOIluc1 * Inv_L + model->B4SOIwuc1 * Inv_W + model->B4SOIpuc1 * Inv_LW; pParam->B4SOIat = model->B4SOIat + model->B4SOIlat * Inv_L + model->B4SOIwat * Inv_W + model->B4SOIpat * Inv_LW; pParam->B4SOIprt = model->B4SOIprt + model->B4SOIlprt * Inv_L + model->B4SOIwprt * Inv_W + model->B4SOIpprt * Inv_LW; /* v3.0 */ pParam->B4SOInigc = model->B4SOInigc + model->B4SOIlnigc * Inv_L + model->B4SOIwnigc * Inv_W + model->B4SOIpnigc * Inv_LW; pParam->B4SOIaigc = model->B4SOIaigc + model->B4SOIlaigc * Inv_L + model->B4SOIwaigc * Inv_W + model->B4SOIpaigc * Inv_LW; pParam->B4SOIbigc = model->B4SOIbigc + model->B4SOIlbigc * Inv_L + model->B4SOIwbigc * Inv_W + model->B4SOIpbigc * Inv_LW; pParam->B4SOIcigc = model->B4SOIcigc + model->B4SOIlcigc * Inv_L + model->B4SOIwcigc * Inv_W + model->B4SOIpcigc * Inv_LW; pParam->B4SOIaigsd = model->B4SOIaigsd + model->B4SOIlaigsd * Inv_L + model->B4SOIwaigsd * Inv_W + model->B4SOIpaigsd * Inv_LW; pParam->B4SOIbigsd = model->B4SOIbigsd + model->B4SOIlbigsd * Inv_L + model->B4SOIwbigsd * Inv_W + model->B4SOIpbigsd * Inv_LW; pParam->B4SOIcigsd = model->B4SOIcigsd + model->B4SOIlcigsd * Inv_L + model->B4SOIwcigsd * Inv_W + model->B4SOIpcigsd * Inv_LW; pParam->B4SOIpigcd = model->B4SOIpigcd + model->B4SOIlpigcd * Inv_L + model->B4SOIwpigcd * Inv_W + model->B4SOIppigcd * Inv_LW; pParam->B4SOIpoxedge = model->B4SOIpoxedge + model->B4SOIlpoxedge * Inv_L + model->B4SOIwpoxedge * Inv_W + model->B4SOIppoxedge * Inv_LW; /* v3.0 */ /* v3.1 added for RF */ pParam->B4SOIxrcrg1 = model->B4SOIxrcrg1 + model->B4SOIlxrcrg1 * Inv_L + model->B4SOIwxrcrg1 * Inv_W + model->B4SOIpxrcrg1 * Inv_LW; pParam->B4SOIxrcrg2 = model->B4SOIxrcrg2 + model->B4SOIlxrcrg2 * Inv_L + model->B4SOIwxrcrg2 * Inv_W + model->B4SOIpxrcrg2 * Inv_LW; /* v3.1 added for RF end */ /* CV model */ pParam->B4SOIvsdfb = model->B4SOIvsdfb + model->B4SOIlvsdfb * Inv_L + model->B4SOIwvsdfb * Inv_W + model->B4SOIpvsdfb * Inv_LW; pParam->B4SOIvsdth = model->B4SOIvsdth + model->B4SOIlvsdth * Inv_L + model->B4SOIwvsdth * Inv_W + model->B4SOIpvsdth * Inv_LW; pParam->B4SOIdelvt = model->B4SOIdelvt + model->B4SOIldelvt * Inv_L + model->B4SOIwdelvt * Inv_W + model->B4SOIpdelvt * Inv_LW; pParam->B4SOIacde = model->B4SOIacde + model->B4SOIlacde * Inv_L + model->B4SOIwacde * Inv_W + model->B4SOIpacde * Inv_LW; pParam->B4SOIacde = pParam->B4SOIacde * pow((pParam->B4SOInpeak / 2.0e16), -0.25); /* v3.2 bug fix */ pParam->B4SOImoin = model->B4SOImoin + model->B4SOIlmoin * Inv_L + model->B4SOIwmoin * Inv_W + model->B4SOIpmoin * Inv_LW; pParam->B4SOInoff = model->B4SOInoff + model->B4SOIlnoff * Inv_L + model->B4SOIwnoff * Inv_W + model->B4SOIpnoff * Inv_LW; /* v3.2 */ pParam->B4SOIdvtp0 = model->B4SOIdvtp0 + model->B4SOIldvtp0 * Inv_L + model->B4SOIwdvtp0 * Inv_W + model->B4SOIpdvtp0 * Inv_LW; /* v4.0 */ pParam->B4SOIdvtp1 = model->B4SOIdvtp1 + model->B4SOIldvtp1 * Inv_L + model->B4SOIwdvtp1 * Inv_W + model->B4SOIpdvtp1 * Inv_LW; /* v4.0 */ pParam->B4SOIdvtp2 = model->B4SOIdvtp2 + model->B4SOIldvtp2 * Inv_L + model->B4SOIwdvtp2 * Inv_W + model->B4SOIpdvtp2 * Inv_LW; /* v4.1 */ pParam->B4SOIdvtp3 = model->B4SOIdvtp3 + model->B4SOIldvtp3 * Inv_L + model->B4SOIwdvtp3 * Inv_W + model->B4SOIpdvtp3 * Inv_LW; /* v4.1 */ pParam->B4SOIdvtp4 = model->B4SOIdvtp4 + model->B4SOIldvtp4 * Inv_L + model->B4SOIwdvtp4 * Inv_W + model->B4SOIpdvtp4 * Inv_LW; /* v4.1 */ pParam->B4SOIminv = model->B4SOIminv + model->B4SOIlminv * Inv_L + model->B4SOIwminv * Inv_W + model->B4SOIpminv * Inv_LW; /* v4.0 */ pParam->B4SOIminvcv = model->B4SOIminvcv + model->B4SOIlminvcv * Inv_L + model->B4SOIwminvcv * Inv_W + model->B4SOIpminvcv * Inv_LW; /* v4.1 */ pParam->B4SOIvoffcv = model->B4SOIvoffcv /*Bug fix # 16 Jun09*/ + model->B4SOIlvoffcv * Inv_L + model->B4SOIwvoffcv * Inv_W + model->B4SOIpvoffcv * Inv_LW; pParam->B4SOIfprout = model->B4SOIfprout + model->B4SOIlfprout * Inv_L + model->B4SOIwfprout * Inv_W + model->B4SOIpfprout * Inv_LW; /* v4.0 */ pParam->B4SOIpdits = model->B4SOIpdits + model->B4SOIlpdits * Inv_L + model->B4SOIwpdits * Inv_W + model->B4SOIppdits * Inv_LW; /* v4.0 */ pParam->B4SOIpditsd = model->B4SOIpditsd + model->B4SOIlpditsd * Inv_L + model->B4SOIwpditsd * Inv_W + model->B4SOIppditsd * Inv_LW; /* v4.0 */ pParam->B4SOIaigbcp2 = model->B4SOIaigbcp2 + model->B4SOIlaigbcp2 * Inv_L + model->B4SOIwaigbcp2 * Inv_W + model->B4SOIpaigbcp2 * Inv_LW; /* v4.0 */ pParam->B4SOIbigbcp2 = model->B4SOIbigbcp2 + model->B4SOIlbigbcp2 * Inv_L + model->B4SOIwbigbcp2 * Inv_W + model->B4SOIpbigbcp2 * Inv_LW; /* v4.0 */ pParam->B4SOIcigbcp2 = model->B4SOIcigbcp2 + model->B4SOIlcigbcp2 * Inv_L + model->B4SOIwcigbcp2 * Inv_W + model->B4SOIpcigbcp2 * Inv_LW; /* v4.0 */ /* Added for binning - END */ /* v4.0 add mstar for Vgsteff */ pParam->B4SOImstar = 0.5 + atan(pParam->B4SOIminv) / PI; if (model->B4SOIvgstcvMod == 0) printf("vgstcvMod = 0, users are suggested to use vgstcvMod = 1 or 2.\n"); /* v4.1 add mstarcv for Vgsteffcv */ pParam->B4SOImstarcv = 0.5 + atan(pParam->B4SOIminvcv) / PI; T0 = (TempRatio - 1.0); pParam->B4SOIuatemp = pParam->B4SOIua; /* save ua, ub, and uc for b4soild.c */ pParam->B4SOIubtemp = pParam->B4SOIub; pParam->B4SOIuctemp = pParam->B4SOIuc; pParam->B4SOIrds0denom = pow(pParam->B4SOIweff * 1E6, pParam->B4SOIwr); /* v2.2 release */ pParam->B4SOIrth = here->B4SOIrth0 / (pParam->B4SOIweff + model->B4SOIwth0) * here->B4SOInseg / here->B4SOInf; /* bugfix_snps nf*/ pParam->B4SOIcth = here->B4SOIcth0 * (pParam->B4SOIweff + model->B4SOIwth0) / here->B4SOInseg * here->B4SOInf; /* bugfix_snps nf*/ /* v2.2.2 adding layout-dependent Frbody multiplier */ /* pParam->B4SOIrbody = here->B4SOIfrbody *model->B4SOIrbody * model->B4SOIrhalo / (2 * model->B4SOIrbody + model->B4SOIrhalo * pParam->B4SOIleff) * pParam->B4SOIweff / here->B4SOInseg / here->B4SOInf */ /* v4.0 *//*;*/ if (model->B4SOIrbody == 0) /* Bug Fix # 27 added to avoid NaN (0/0) in QA*/ pParam->B4SOIrbody = 0; else pParam->B4SOIrbody = here->B4SOIfrbody *model->B4SOIrbody * model->B4SOIrhalo / (2 * model->B4SOIrbody + model->B4SOIrhalo * pParam->B4SOIleff) * pParam->B4SOIweff / here->B4SOInseg/ here->B4SOInf; /* v4.0 */ pParam->B4SOIoxideRatio = pow(model->B4SOItoxref /model->B4SOItoxqm, model->B4SOIntox) /model->B4SOItoxqm/model->B4SOItoxqm; /* v2.2 release */ pParam->B4SOIua = pParam->B4SOIua + pParam->B4SOIua1 * T0; pParam->B4SOIub = pParam->B4SOIub + pParam->B4SOIub1 * T0; pParam->B4SOIuc = pParam->B4SOIuc + pParam->B4SOIuc1 * T0; if (pParam->B4SOIu0 > 1.0) pParam->B4SOIu0 = pParam->B4SOIu0 / 1.0e4; pParam->B4SOIu0temp = pParam->B4SOIu0 * pow(TempRatio, pParam->B4SOIute); pParam->B4SOIvsattemp = pParam->B4SOIvsat - pParam->B4SOIat * T0; pParam->B4SOIrds0 = (pParam->B4SOIrdsw + pParam->B4SOIprt * T0) / pow(pParam->B4SOIweff * 1E6, pParam->B4SOIwr); if(model->B4SOIrdsMod) { /* v4.0 */ PowWeffWr = pParam->B4SOIrds0denom * here->B4SOInf; T10 = pParam->B4SOIprt * T0; /* External Rd(V) */ T1 = pParam->B4SOIrdw + T10; T2 = model->B4SOIrdwmin + T10; if (T1 < 0.0) { T1 = 0.0; printf("Warning: Rdw at current temperature is negative; set to 0.\n"); } if (T2 < 0.0) { T2 = 0.0; printf("Warning: Rdwmin at current temperature is negative; set to 0.\n"); } pParam->B4SOIrd0 = T1 / PowWeffWr; pParam->B4SOIrdwmin = T2 / PowWeffWr; /* External Rs(V) */ T3 = pParam->B4SOIrsw + T10; T4 = model->B4SOIrswmin + T10; if (T3 < 0.0) { T3 = 0.0; printf("Warning: Rsw at current temperature is negative; set to 0.\n"); } if (T4 < 0.0) { T4 = 0.0; printf("Warning: Rswmin at current temperature is negative; set to 0.\n"); } pParam->B4SOIrs0 = T3 / PowWeffWr; pParam->B4SOIrswmin = T4 / PowWeffWr; } if (B4SOIcheckModel(model, here, ckt)) { SPfrontEnd->IFerrorf (ERR_FATAL, "Fatal error(s) detected during B4SOIV3 parameter checking for %s in model %s", model->B4SOImodName, here->B4SOIname); return(E_BADPARM); } pParam->B4SOIcgdo = (model->B4SOIcgdo + pParam->B4SOIcf) * pParam->B4SOIwdiodCV; pParam->B4SOIcgso = (model->B4SOIcgso + pParam->B4SOIcf) * pParam->B4SOIwdiosCV; pParam->B4SOIcgeo = model->B4SOIcgeo * pParam->B4SOIleffCV * here->B4SOInf; /* v4.0 */ if (!model->B4SOInpeakGiven && model->B4SOIgamma1Given) { T0 = pParam->B4SOIgamma1 * model->B4SOIcox; pParam->B4SOInpeak = 3.021E22 * T0 * T0; } T4 = Eg300 / model->B4SOIvtm * (TempRatio - 1.0); /* source side */ T7 = pParam->B4SOIxbjt * T4 / pParam->B4SOIndiode; DEXP(T7, T0); T7 = pParam->B4SOIxdif * T4 / pParam->B4SOIndiode; DEXP(T7, T1); T7 = pParam->B4SOIxrec * T4 / pParam->B4SOInrecf0; DEXP(T7, T2); pParam->B4SOIahli0s = pParam->B4SOIahli * T0; pParam->B4SOIjbjts = pParam->B4SOIisbjt * T0; pParam->B4SOIjdifs = pParam->B4SOIisdif * T1; pParam->B4SOIjrecs = pParam->B4SOIisrec * T2; T7 = pParam->B4SOIxtun * (TempRatio - 1); DEXP(T7, T0); pParam->B4SOIjtuns = pParam->B4SOIistun * T0; /* drain side */ /* pParam->B4SOIjtund = pParam->B4SOIidtun * T0; */ /*v4.2 redundant */ T7 = pParam->B4SOIxbjt * T4 / pParam->B4SOIndioded; DEXP(T7, T0); T7 = pParam->B4SOIxdifd * T4 / pParam->B4SOIndioded; DEXP(T7, T1); T7 = pParam->B4SOIxrecd * T4 / pParam->B4SOInrecf0d; DEXP(T7, T2); pParam->B4SOIahli0d = pParam->B4SOIahlid * T0; pParam->B4SOIjbjtd = pParam->B4SOIidbjt * T0; pParam->B4SOIjdifd = pParam->B4SOIiddif * T1; pParam->B4SOIjrecd = pParam->B4SOIidrec * T2; T7 = pParam->B4SOIxtund * (TempRatio - 1); DEXP(T7, T0); pParam->B4SOIjtund = pParam->B4SOIidtun * T0; if (pParam->B4SOInsub > 0) pParam->B4SOIvfbb = -model->B4SOItype * model->B4SOIvtm * log(pParam->B4SOInpeak/ pParam->B4SOInsub); else pParam->B4SOIvfbb = -model->B4SOItype * model->B4SOIvtm * log(-pParam->B4SOInpeak* pParam->B4SOInsub/ni/ni); if (!model->B4SOIvsdfbGiven) { if (pParam->B4SOInsub > 0) pParam->B4SOIvsdfb = -model->B4SOItype * (model->B4SOIvtm*log(1e20 * pParam->B4SOInsub / ni /ni) - 0.3); else if (pParam->B4SOInsub < 0) pParam->B4SOIvsdfb = -model->B4SOItype * (model->B4SOIvtm*log(-1e20 / pParam->B4SOInsub) + 0.3); } /* Phi & Gamma */ SDphi = 2.0*model->B4SOIvtm*log(fabs(pParam->B4SOInsub) / ni); SDgamma = sqrt2qeps * sqrt(fabs(pParam->B4SOInsub)) / model->B4SOIcbox; /* bugfix v4.3.1*/ if (!model->B4SOIvsdthGiven) { if ( ((pParam->B4SOInsub > 0) && (model->B4SOItype > 0)) || ((pParam->B4SOInsub < 0) && (model->B4SOItype < 0)) ) pParam->B4SOIvsdth = pParam->B4SOIvsdfb + SDphi + SDgamma * sqrt(SDphi); else pParam->B4SOIvsdth = pParam->B4SOIvsdfb - SDphi - SDgamma * sqrt(SDphi); } if (!model->B4SOIcsdminGiven) { /* Cdmin */ tmp = sqrt(2.0 * epssub * SDphi / (Charge_q * fabs(pParam->B4SOInsub) * 1.0e6)); tmp1 = epssub / tmp; model->B4SOIcsdmin = tmp1 * model->B4SOIcbox / (tmp1 + model->B4SOIcbox); } pParam->B4SOIphi = 2.0 * model->B4SOIvtm * log(pParam->B4SOInpeak / ni); pParam->B4SOIsqrtPhi = sqrt(pParam->B4SOIphi); pParam->B4SOIphis3 = pParam->B4SOIsqrtPhi * pParam->B4SOIphi; pParam->B4SOIXdep0 = sqrt(2.0 * epssub / (Charge_q * pParam->B4SOInpeak * 1.0e6)) * pParam->B4SOIsqrtPhi; pParam->B4SOIsqrtXdep0 = sqrt(pParam->B4SOIXdep0); /*4.1*/ if (model->B4SOImtrlMod==0) pParam->B4SOIlitl = sqrt(3.0 *3.9/epsrox* pParam->B4SOIxj * model->B4SOItox); else /* pParam->B4SOIlitl = sqrt(epssub * pParam->B4SOIxj * model->B4SOItox/(epsrox*EPS0)); */ /* Bug fix # 13 Jun 09 'not reported by vendors'*/ pParam->B4SOIlitl = sqrt(epssub * pParam->B4SOIxj * toxe/(epsrox*EPS0)); /* fix */ pParam->B4SOIvbi = model->B4SOIvtm * log(1.0e20 * pParam->B4SOInpeak / (ni * ni)); pParam->B4SOIcdep0 = sqrt(Charge_q * epssub * pParam->B4SOInpeak * 1.0e6 / 2.0 / pParam->B4SOIphi); /* v3.0 */ /*4.1 */ if (model->B4SOImtrlMod ==0) { if (pParam->B4SOIngate > 0.0) { pParam->B4SOIvfbsd = Vtm0 * log(pParam->B4SOIngate / 1.0e20); } else pParam->B4SOIvfbsd = 0.0; } else { T0 = Vtm0 * log(pParam->B4SOInsd/ni); T1 = 0.5 * Eg0; if(T0 > T1) T0 = T1; T2 = model->B4SOIeasub + T1 - model->B4SOItype * T0; pParam->B4SOIvfbsd = model->B4SOIphig - T2; } pParam->B4SOIToxRatio = exp(model->B4SOIntox * log(model->B4SOItoxref /model->B4SOItoxqm)) /model->B4SOItoxqm /model->B4SOItoxqm; pParam->B4SOIToxRatioEdge = exp(model->B4SOIntox * log(model->B4SOItoxref / (model->B4SOItoxqm * pParam->B4SOIpoxedge))) / model->B4SOItoxqm / model->B4SOItoxqm / pParam->B4SOIpoxedge / pParam->B4SOIpoxedge; /* pParam->B4SOIAechvb = (model->B4SOItype == NMOS) ? 4.97232e-7 : 3.42537e-7; pParam->B4SOIBechvb = (model->B4SOItype == NMOS) ? 7.45669e11 : 1.16645e12; */ pParam->B4SOIAechvb = (model->B4SOItype == NMOS) ? agbc2p : agbc2n; /* bugfix 4.3.1 -Tanvir */ pParam->B4SOIBechvb = (model->B4SOItype == NMOS) ? bgbc2p : bgbc2n; /* bugfix v4.3.1 -Tanvir */ // The edge should have a contribution from psbcp & pdbcp. Need s & d terms. // There is no NF correction because psbcp & pdbcp are "per finger" in manual. pParam->B4SOIAechvbEdges = pParam->B4SOIAechvb * (pParam->B4SOIweff/here->B4SOInseg + here->B4SOIpsbcp) * pParam->B4SOIdlcig * pParam->B4SOIToxRatioEdge; /* v3.1 bug fix */ pParam->B4SOIAechvbEdged = pParam->B4SOIAechvb * (pParam->B4SOIweff/here->B4SOInseg + here->B4SOIpdbcp) * pParam->B4SOIdlcig * pParam->B4SOIToxRatioEdge; /* v3.1 bug fix */ pParam->B4SOIBechvbEdge = -pParam->B4SOIBechvb * model->B4SOItoxqm * pParam->B4SOIpoxedge; /* pParam->B4SOIAechvb *= pParam->B4SOIweff/here->B4SOInseg */ /* * pParam->B4SOIleff */ /* * pParam->B4SOIToxRatio */ /* + here->B4SOIagbcpd; v4.0 */ pParam->B4SOIAechvb *= (pParam->B4SOIweff/here->B4SOInseg * pParam->B4SOIleff + here->B4SOIagbcpd/here->B4SOInf) /* LFW */ * pParam->B4SOIToxRatio; /* From Geoffrey Coram 10/22/09 */ pParam->B4SOIBechvb *= -model->B4SOItoxqm; /* v3.0 */ if (model->B4SOIk1Given || model->B4SOIk2Given) { if (!model->B4SOIk1Given) { fprintf(stdout, "Warning: k1 should be specified with k2.\n"); pParam->B4SOIk1 = 0.53; } if (!model->B4SOIk2Given) { fprintf(stdout, "Warning: k2 should be specified with k1.\n"); pParam->B4SOIk2 = -0.0186; } if (model->B4SOIxtGiven) fprintf(stdout, "Warning: xt is ignored because k1 or k2 is given.\n"); if (model->B4SOIvbxGiven) fprintf(stdout, "Warning: vbx is ignored because k1 or k2 is given.\n"); if (model->B4SOIvbmGiven) fprintf(stdout, "Warning: vbm is ignored because k1 or k2 is given.\n"); if (model->B4SOIgamma1Given) fprintf(stdout, "Warning: gamma1 is ignored because k1 or k2 is given.\n"); if (model->B4SOIgamma2Given) fprintf(stdout, "Warning: gamma2 is ignored because k1 or k2 is given.\n"); } else { if (!model->B4SOIvbxGiven){ if (model->B4SOImtrlMod) T0 = Charge_q / 2.0 / epssub * 1.0e6; else T0 = 7.7348e-4; pParam->B4SOIvbx = pParam->B4SOIphi - T0 * pParam->B4SOInpeak * pParam->B4SOIxt * pParam->B4SOIxt;} /* bugfix 4.3.1 */ if (pParam->B4SOIvbx > 0.0) pParam->B4SOIvbx = -pParam->B4SOIvbx; if (pParam->B4SOIvbm > 0.0) pParam->B4SOIvbm = -pParam->B4SOIvbm; if (!model->B4SOIgamma1Given) pParam->B4SOIgamma1 = sqrt2qeps * sqrt(pParam->B4SOInpeak) / model->B4SOIcox; /* bugfix 4.3.1 */ if (!model->B4SOIgamma2Given) pParam->B4SOIgamma2 = sqrt2qeps * sqrt(pParam->B4SOInsub) / model->B4SOIcox; /* bugfix 4.3.1 */ T0 = pParam->B4SOIgamma1 - pParam->B4SOIgamma2; T1 = sqrt(pParam->B4SOIphi - pParam->B4SOIvbx) - pParam->B4SOIsqrtPhi; T2 = sqrt(pParam->B4SOIphi * (pParam->B4SOIphi - pParam->B4SOIvbm)) - pParam->B4SOIphi; pParam->B4SOIk2 = T0 * T1 / (2.0 * T2 + pParam->B4SOIvbm); pParam->B4SOIk1 = pParam->B4SOIgamma2 - 2.0 * pParam->B4SOIk2 * sqrt(pParam->B4SOIphi - pParam->B4SOIvbm); } /*if (pParam->B4SOIk2 < 0.0) { T0 = 0.5 * pParam->B4SOIk1 / pParam->B4SOIk2; pParam->B4SOIvbsc = 0.9 * (pParam->B4SOIphi - T0 * T0); if (pParam->B4SOIvbsc > -3.0) pParam->B4SOIvbsc = -3.0; else if (pParam->B4SOIvbsc < -30.0) pParam->B4SOIvbsc = -30.0; } else { pParam->B4SOIvbsc = -30.0; } if (pParam->B4SOIvbsc > pParam->B4SOIvbm) pParam->B4SOIvbsc = pParam->B4SOIvbm; */ /* v4.2 never used in code */ if ((T0 = pParam->B4SOIweff + pParam->B4SOIk1w2) < 1e-8) T0 = 1e-8; pParam->B4SOIk1eff = pParam->B4SOIk1 * (1 + pParam->B4SOIk1w1/T0); /*4.0 if (model->B4SOIvth0Given) { pParam->B4SOIvfb = model->B4SOItype * pParam->B4SOIvth0 - pParam->B4SOIphi - pParam->B4SOIk1eff * pParam->B4SOIsqrtPhi; } else { pParam->B4SOIvfb = -1.0; pParam->B4SOIvth0 = model->B4SOItype * (pParam->B4SOIvfb + pParam->B4SOIphi + pParam->B4SOIk1eff * pParam->B4SOIsqrtPhi); } */ /* v4.1 */ if (!model->B4SOIvfbGiven) { if (model->B4SOIvth0Given) { pParam->B4SOIvfb = model->B4SOItype * pParam->B4SOIvth0 - pParam->B4SOIphi - pParam->B4SOIk1eff * pParam->B4SOIsqrtPhi; } else { pParam->B4SOIvfb = -1.0; } } if (!model->B4SOIvth0Given) { pParam->B4SOIvth0 = model->B4SOItype * (pParam->B4SOIvfb + pParam->B4SOIphi + pParam->B4SOIk1eff * pParam->B4SOIsqrtPhi); } /* v4.0 */ pParam->B4SOIk1ox = pParam->B4SOIk1eff * model->B4SOItox / model->B4SOItoxm; if(model->B4SOImtrlMod == 0) T1 = sqrt(EPSSI / EPSOX * model->B4SOItox * pParam->B4SOIXdep0); else T1 = sqrt(epssub / (epsrox*EPS0) * model->B4SOItox * pParam->B4SOIXdep0); T0 = exp(-0.5 * pParam->B4SOIdsub * pParam->B4SOIleff / T1); pParam->B4SOItheta0vb0 = (T0 + 2.0 * T0 * T0); T0 = exp(-0.5 * pParam->B4SOIdrout * pParam->B4SOIleff / T1); T2 = (T0 + 2.0 * T0 * T0); pParam->B4SOIthetaRout = pParam->B4SOIpdibl1 * T2 + pParam->B4SOIpdibl2; /* New DITS term (added in 4.1) */ pParam->B4SOIdvtp2factor = pParam->B4SOIdvtp2 / exp(pParam->B4SOIdvtp3 * log(pParam->B4SOIleff)); /* stress effect */ if (model->B4SOIwlod < 0.0) { fprintf(stderr, "Warning: WLOD = %g is less than 0. Set to 0.0\n",model->B4SOIwlod); model->B4SOIwlod = 0.0; } T0 = pow(Ldrn, model->B4SOIllodku0); W_tmp = Wdrn + model->B4SOIwlod; T1 = pow(W_tmp, model->B4SOIwlodku0); tmp1 = model->B4SOIlku0 / T0 + model->B4SOIwku0 / T1 + model->B4SOIpku0 / (T0 * T1); pParam->B4SOIku0 = 1.0 + tmp1; T0 = pow(Ldrn, model->B4SOIllodvth); T1 = pow(W_tmp, model->B4SOIwlodvth); tmp1 = model->B4SOIlkvth0 / T0 + model->B4SOIwkvth0 / T1 + model->B4SOIpkvth0 / (T0 * T1); pParam->B4SOIkvth0 = 1.0 + tmp1; pParam->B4SOIkvth0 = sqrt( pParam->B4SOIkvth0 * pParam->B4SOIkvth0 + DELTA); /*T0 = (TRatio - 1.0);*/ T0 = (TempRatio - 1.0); /* bug fix v4.1 */ pParam->B4SOIku0temp = pParam->B4SOIku0 * (1.0 + model->B4SOItku0 * T0) + DELTA; Inv_saref = 1.0 / (model->B4SOIsaref + 0.5 * Ldrn); Inv_sbref = 1.0 / (model->B4SOIsbref + 0.5 * Ldrn); pParam->B4SOIinv_od_ref = Inv_saref + Inv_sbref; pParam->B4SOIrho_ref = model->B4SOIku0 / pParam->B4SOIku0temp * pParam->B4SOIinv_od_ref; /* stress effect end */ } /* v4.0 stress effect */ /* Bug Fix # 17 Jul09 Code 1484-1560 is moved up from lines 1884-1958 of old version*/ /* v4.0 stress effect */ if( (here->B4SOIsa > 0.0) && (here->B4SOIsb > 0.0) && ( (here->B4SOInf == 1.0) || ((here->B4SOInf > 1.0) && (here->B4SOIsd > 0.0)) ) ) { Inv_sa = 0; Inv_sb = 0; if (model->B4SOIkvsat < -1.0 ) { fprintf(stderr, "Warning: KVSAT = %g is too small; Reset to -1.0.\n",model->B4SOIkvsat); here->B4SOIkvsat = kvsat = -1.0; } else if (model->B4SOIkvsat > 1.0) { fprintf(stderr, "Warning: KVSAT = %g is too big; Reset to 1.0.\n",model->B4SOIkvsat); here->B4SOIkvsat = kvsat = 1.0; } else here->B4SOIkvsat = model->B4SOIkvsat; for(i = 0; i < here->B4SOInf; i++) { T0 = 1.0 / here->B4SOInf / (here->B4SOIsa + 0.5*Ldrn + i * (here->B4SOIsd +Ldrn)); T1 = 1.0 / here->B4SOInf / (here->B4SOIsb + 0.5*Ldrn + i * (here->B4SOIsd +Ldrn)); Inv_sa += T0; Inv_sb += T1; } Inv_ODeff = Inv_sa + Inv_sb; here->B4SOIInv_ODeff = Inv_ODeff; rho = model->B4SOIku0 / pParam->B4SOIku0temp * Inv_ODeff; T0 = (1.0 + rho)/(1.0 + pParam->B4SOIrho_ref); here->B4SOIu0temp = pParam->B4SOIu0temp * T0; T1 = (1.0 + here->B4SOIkvsat * rho)/(1.0 + here->B4SOIkvsat * pParam->B4SOIrho_ref);/*self-heating bug fix*/ here->B4SOIvsattemp = pParam->B4SOIvsattemp * T1; OD_offset = Inv_ODeff - pParam->B4SOIinv_od_ref; dvth0_lod = model->B4SOIkvth0 / pParam->B4SOIkvth0 * OD_offset; dk2_lod = model->B4SOIstk2 / pow(pParam->B4SOIkvth0, model->B4SOIlodk2) * OD_offset; deta0_lod = model->B4SOIsteta0 / pow(pParam->B4SOIkvth0, model->B4SOIlodeta0) * OD_offset; here->B4SOIvth0 = pParam->B4SOIvth0 + dvth0_lod; here->B4SOIk2 = pParam->B4SOIk2 + dk2_lod; here->B4SOIeta0 = pParam->B4SOIeta0 + deta0_lod; } else { here->B4SOIu0temp = pParam->B4SOIu0temp; here->B4SOIvth0 = pParam->B4SOIvth0; here->B4SOIvsattemp = pParam->B4SOIvsattemp; here->B4SOIk2 = pParam->B4SOIk2; here->B4SOIeta0 = pParam->B4SOIeta0; here->B4SOIInv_ODeff = 0; pParam->B4SOIinv_od_ref = 0; /*Stress bug fix*/ here->B4SOIkvsat = 0; /*Stress bug fix*/ } /* v4.0 stress effect end */ here->B4SOIk2ox = here->B4SOIk2 * model->B4SOItox / model->B4SOItoxm; /* v4.0 */ here->B4SOIvth0 += here->B4SOIdelvto; /* v4.0 */ here->B4SOIvfb = pParam->B4SOIvfb + model->B4SOItype * here->B4SOIdelvto; /* Bug Fix # 17 Jul09 Code 1479-1545 is moved up from lines 1884-1950 of old version, 1954-2035 in this version*/ here->B4SOIcsbox = model->B4SOIcbox*here->B4SOIsourceArea; here->B4SOIcsmin = model->B4SOIcsdmin*here->B4SOIsourceArea; here->B4SOIcdbox = model->B4SOIcbox*here->B4SOIdrainArea; here->B4SOIcdmin = model->B4SOIcsdmin*here->B4SOIdrainArea; if ( ((pParam->B4SOInsub > 0) && (model->B4SOItype > 0)) || ((pParam->B4SOInsub < 0) && (model->B4SOItype < 0)) ) { T0 = pParam->B4SOIvsdth - pParam->B4SOIvsdfb; pParam->B4SOIsdt1 = pParam->B4SOIvsdfb + model->B4SOIasd * T0; T1 = here->B4SOIcsbox - here->B4SOIcsmin; T2 = T1 / T0 / T0; pParam->B4SOIst2 = T2 / model->B4SOIasd; pParam->B4SOIst3 = T2 /( 1 - model->B4SOIasd); here->B4SOIst4 = T0 * T1 * (1 + model->B4SOIasd) / 3 - here->B4SOIcsmin * pParam->B4SOIvsdfb; T1 = here->B4SOIcdbox - here->B4SOIcdmin; T2 = T1 / T0 / T0; pParam->B4SOIdt2 = T2 / model->B4SOIasd; pParam->B4SOIdt3 = T2 /( 1 - model->B4SOIasd); here->B4SOIdt4 = T0 * T1 * (1 + model->B4SOIasd) / 3 - here->B4SOIcdmin * pParam->B4SOIvsdfb; } else { T0 = pParam->B4SOIvsdfb - pParam->B4SOIvsdth; pParam->B4SOIsdt1 = pParam->B4SOIvsdth + model->B4SOIasd * T0; T1 = here->B4SOIcsmin - here->B4SOIcsbox; T2 = T1 / T0 / T0; pParam->B4SOIst2 = T2 / model->B4SOIasd; pParam->B4SOIst3 = T2 /( 1 - model->B4SOIasd); here->B4SOIst4 = T0 * T1 * (1 + model->B4SOIasd) / 3 - here->B4SOIcsbox * pParam->B4SOIvsdth; T1 = here->B4SOIcdmin - here->B4SOIcdbox; T2 = T1 / T0 / T0; pParam->B4SOIdt2 = T2 / model->B4SOIasd; pParam->B4SOIdt3 = T2 /( 1 - model->B4SOIasd); here->B4SOIdt4 = T0 * T1 * (1 + model->B4SOIasd) / 3 - here->B4SOIcdbox * pParam->B4SOIvsdth; } /* v2.2.2 bug fix */ T0 = model->B4SOIcsdesw * log(model->B4SOIcfrcoeff * (1 + model->B4SOItsi / model->B4SOItbox)); /* v4.4 */ T1 = here->B4SOIsourcePerimeter - here->B4SOIw; if (T1 > 0.0) here->B4SOIcsesw = T0 * T1; else here->B4SOIcsesw = 0.0; T1 = here->B4SOIdrainPerimeter - here->B4SOIw; if (T1 > 0.0) here->B4SOIcdesw = T0 * T1; else here->B4SOIcdesw = 0.0; here->B4SOIphi = pParam->B4SOIphi; /* process source/drain series resistance */ here->B4SOIdrainConductance = model->B4SOIsheetResistance * here->B4SOIdrainSquares; if (here->B4SOIdrainConductance > 0.0) here->B4SOIdrainConductance = 1.0 / here->B4SOIdrainConductance; else here->B4SOIdrainConductance = 0.0; here->B4SOIsourceConductance = model->B4SOIsheetResistance * here->B4SOIsourceSquares; if (here->B4SOIsourceConductance > 0.0) here->B4SOIsourceConductance = 1.0 / here->B4SOIsourceConductance; else here->B4SOIsourceConductance = 0.0; here->B4SOIcgso = pParam->B4SOIcgso; here->B4SOIcgdo = pParam->B4SOIcgdo; /* v2.0 release */ if (model->B4SOIln < 1e-15) model->B4SOIln = 1e-15; T0 = -0.5 * pParam->B4SOIleff * pParam->B4SOIleff / model->B4SOIln / model->B4SOIln; DEXP(T0,T1); pParam->B4SOIarfabjt = T1; T0 = pParam->B4SOIlbjt0 * (1.0 / pParam->B4SOIleff + 1.0 / model->B4SOIln); pParam->B4SOIlratio = pow(T0,pParam->B4SOInbjt); pParam->B4SOIlratiodif = 1.0 + model->B4SOIldif0 * pow(T0,pParam->B4SOIndif); if ((pParam->B4SOIvearly = pParam->B4SOIvabjt + pParam->B4SOIaely * pParam->B4SOIleff) < 1) pParam->B4SOIvearly = 1; /*4.1 toxp calculation*/ if(model->B4SOImtrlMod==0) { model->B4SOItoxp = model->B4SOItox - model->B4SOIdtoxcv; } else { /* Calculate TOXP from EOT */ /* Calculate Vgs_eff @ Vgs = VDD with Poly Depletion Effect */ Vtm0eot = KboQ * model->B4SOItempeot; Vtmeot = Vtm0eot; vbieot = Vtm0eot * log(1.0e20 * pParam->B4SOInpeak / (ni * ni)); phieot = 2.0 * Vtm0eot * log(pParam->B4SOInpeak / ni); sqrtphieot = sqrt(phieot); tmp2 = here->B4SOIvfb + phieot; vddeot = model->B4SOItype * model->B4SOIvddeot; T0 = model->B4SOIepsrgate * EPS0; if ((pParam->B4SOIngate > 1.0e18) && (pParam->B4SOIngate < 1.0e25) && (vddeot > tmp2) && (T0!=0)) { T1 = 1.0e6 * Charge_q * epssub * pParam->B4SOIngate / (model->B4SOIcox * model->B4SOIcox); T4 = sqrt(1.0 + 2.0 * (vddeot - T0) / T1); T2 = T1 * (T4 - 1.0); T3 = 0.5 * T2 * T2 / T1; /* T3 = Vpoly */ /* T7 = 1.12 - T3 - 0.05; */ T7 = eggdep - T3 - 0.05; /* bugfix v4.3.1 -Tanvir */ T6 = sqrt(T7 * T7 + 0.224); /* T5 = 1.12 - 0.5 * (T7 + T6); */ T5 = eggdep - 0.5 * (T7 + T6); /* bugfix v4.3.1 -Tanvir */ Vgs_eff = vddeot - T5; } else { Vgs_eff = vddeot; } /* Calculate Vth @ Vds=Vbs=0 */ V0 = vbieot - phieot; T3 = sqrt(pParam->B4SOIXdep0); lt1 = model->B4SOIfactor1 * T3; ltw= model->B4SOIfactor1 * T3 ; T0 = -0.5 * pParam->B4SOIdvt1 * model->B4SOIleffeot / lt1; if (T0 > -EXPL_THRESHOLD) { T1 = exp(T0); Theta0 = T1 * (1.0 + 2.0 * T1); } else { T1 = MIN_EXPL; Theta0 = T1 * (1.0 + 2.0 * T1); } /* Calculate n */ T2 = pParam->B4SOInfactor * epssub / pParam->B4SOIXdep0; T3 = pParam->B4SOIcdsc ; T4 = (T2 + T3 * Theta0 + pParam->B4SOIcit) / model->B4SOIcox; if (T4 >= -0.5) { n = 1.0 + T4; } else /* avoid discontinuity problems caused by T4 */ { T0 = 1.0 / (3.0 + 8.0 * T4); n = (1.0 + 3.0 * T4) * T0; } /* v4.0 DITS */ if (pParam->B4SOIdvtp0 > 0.0) { T2 = 1; /* Bug fix #1 Jun 09 Shorter implementation of same code */ /* T0 = 0.0; T2 = exp(T0); if (T0 < -EXPL_THRESHOLD) { T2 = MIN_EXPL; } else { T2 = exp(T0); } end */ T3 = model->B4SOIleffeot + pParam->B4SOIdvtp0 * (1.0 + T2); T4 = Vtmeot * log(model->B4SOIleffeot / T3); DITS_Sft = n * T4; } else { DITS_Sft=0.0; } here->B4SOIthetavth = pParam->B4SOIdvt0 * Theta0; Delt_vth = here->B4SOIthetavth * V0; T0 = -0.5 * pParam->B4SOIdvt1w * model->B4SOIweffeot * model->B4SOIleffeot / ltw; if (T0 > -EXPL_THRESHOLD) { T1 = exp(T0); T2 = T1 * (1.0 + 2.0 * T1); } else { T1 = MIN_EXPL; T2 = T1 * (1.0 + 2.0 * T1); } T0 = pParam->B4SOIdvt0w * T2; DeltVthw = T0 * V0; TempRatioMinus1 = model->B4SOItempeot / model->B4SOItnom - 1.0; T0 = sqrt(1.0 + pParam->B4SOIlpe0 / model->B4SOIleffeot); T1 = (pParam->B4SOIkt1 + pParam->B4SOIkt1l / model->B4SOIleffeot); DeltVthtemp = pParam->B4SOIk1ox * (T0 - 1.0) * sqrtphieot + T1 * TempRatioMinus1; /* v4.0 */ tmp2 = toxe * phieot / (model->B4SOIweffeot + pParam->B4SOIw0); DIBL_Sft = 0.0; DITS_Sft2 = 0.0; Lpe_Vb = sqrt(1.0 + pParam->B4SOIlpeb / model->B4SOIleffeot); sqrtPhisExt = sqrtphieot; Vth = model->B4SOItype * here->B4SOIvth0 + (pParam->B4SOIk1ox * sqrtPhisExt - pParam->B4SOIk1eff * sqrtphieot) * Lpe_Vb - Delt_vth - DeltVthw +pParam->B4SOIk3 * tmp2 + DeltVthtemp - DIBL_Sft -DITS_Sft - DITS_Sft2; Vgst = Vgs_eff - Vth; T10 = n * Vtmeot; /* v4.0 */ VgstNVt = pParam->B4SOImstar * Vgst / T10; /* v4.0 */ ExpArg = (pParam->B4SOIvoff - (1- pParam->B4SOImstar) * Vgst) / T10; /* v4.0 */ /* MCJ: Very small Vgst */ if (VgstNVt > EXPL_THRESHOLD) { Vgsteff = Vgst; /* T0 is dVgsteff_dVbseff */ } else if (ExpArg > EXPL_THRESHOLD) { T0 = (Vgst - pParam->B4SOIvoff) / (n * Vtmeot); ExpVgst = exp(T0); Vgsteff = Vtmeot * pParam->B4SOIcdep0 / model->B4SOIcox * ExpVgst; } else { ExpVgst = exp(VgstNVt); T1 = T10 * log(1.0 + ExpVgst); T3 = (1.0 / model->B4SOItempeot); T4 = -model->B4SOIcox / (Vtm0eot * pParam->B4SOIcdep0) * exp(ExpArg) * (1 - pParam->B4SOImstar); T2 = pParam->B4SOImstar - T10 * T4 / (1.0 - pParam->B4SOImstar); Vgsteff = T1 / T2; } Vgst2Vtm = Vgsteff + 2.0 * Vtmeot; /* calculating Toxp */ T3 = model->B4SOItype * here->B4SOIvth0 - here->B4SOIvfb - phieot; vtfbphi2eot = 4.0 * T3; if (vtfbphi2eot < 0.0) vtfbphi2eot = 0.0; niter = 0; toxpf = toxe; do { toxpi = toxpf; tmp2 = 2.0e8 * toxpf; T0 = (Vgsteff + vtfbphi2eot) / tmp2; T1 = 1.0 + exp(model->B4SOIbdos * 0.7 * log(T0)); Tcen = model->B4SOIados * 1.9e-9 / T1; toxpf = toxe - epsrox/model->B4SOIepsrsub * Tcen; niter++; } while ((niter<=4)&&(ABS(toxpf-toxpi)>1e-12)); model->B4SOItoxp = toxpf; /*model->B4SOIcoxp = epsrox * EPS0 / model->B4SOItoxp;*/ }/*End of Toxp*/ /* vfbzb calculation for capMod 3 */ tmp = sqrt(pParam->B4SOIXdep0); tmp1 = pParam->B4SOIvbi - pParam->B4SOIphi; tmp2 = model->B4SOIfactor1 * tmp; T0 = -0.5 * pParam->B4SOIdvt1w * pParam->B4SOIweff * pParam->B4SOIleff / tmp2; if (T0 > -EXPL_THRESHOLD) { T1 = exp(T0); T2 = T1 * (1.0 + 2.0 * T1); } else { T1 = MIN_EXPL; T2 = T1 * (1.0 + 2.0 * T1); } T0 = pParam->B4SOIdvt0w * T2; T2 = T0 * tmp1; T0 = -0.5 * pParam->B4SOIdvt1 * pParam->B4SOIleff / tmp2; if (T0 > -EXPL_THRESHOLD) { T1 = exp(T0); T3 = T1 * (1.0 + 2.0 * T1); } else { T1 = MIN_EXPL; T3 = T1 * (1.0 + 2.0 * T1); } T3 = pParam->B4SOIdvt0 * T3 * tmp1; /* v2.2.3 */ /*4.1*/ /* T4 = (model->B4SOItox - model->B4SOIdtoxcv) * pParam->B4SOIphi / (pParam->B4SOIweff + pParam->B4SOIw0); */ T4 = model->B4SOItoxp * pParam->B4SOIphi / (pParam->B4SOIweff + pParam->B4SOIw0); T0 = sqrt(1.0 + pParam->B4SOIlpe0 / pParam->B4SOIleff); /*v4.0*/ T5 = pParam->B4SOIk1ox * (T0 - 1.0) * pParam->B4SOIsqrtPhi + (pParam->B4SOIkt1 + pParam->B4SOIkt1l / pParam->B4SOIleff) * (TempRatio - 1.0); /* v4.0 */ tmp3 = model->B4SOItype * pParam->B4SOIvth0 - T2 - T3 + pParam->B4SOIk3 * T4 + T5; pParam->B4SOIvfbzb = tmp3 - pParam->B4SOIphi - pParam->B4SOIk1 * pParam->B4SOIsqrtPhi; /* End of vfbzb */ /* v3.2 */ pParam->B4SOIqsi = Charge_q * model->B4SOInpeak * (1.0 + pParam->B4SOIlpe0 / pParam->B4SOIleff) * 1e6 * model->B4SOItsi; /* v3.1 added for RF */ here->B4SOIgrgeltd = model->B4SOIrshg * (model->B4SOIxgw + pParam->B4SOIweff / here->B4SOInseg / 3.0 / model->B4SOIngcon) / (model->B4SOIngcon * here->B4SOInf * (here->B4SOIl - model->B4SOIxgl)); if (here->B4SOIgrgeltd > 0.0) here->B4SOIgrgeltd = 1.0 / here->B4SOIgrgeltd; else { here->B4SOIgrgeltd = 1.0e3; /* mho */ if (here->B4SOIrgateMod !=0) printf("Warning: The gate conductance reset to 1.0e3 mho.\n"); } /* v3.1 added for RF end */ /* v4.0 rbodyMod */ if (here->B4SOIrbodyMod) { if (here->B4SOIrbdb < 1.0e-3) here->B4SOIgrbdb = 1.0e3; /* in mho */ else here->B4SOIgrbdb = model->B4SOIgbmin + 1.0 / here->B4SOIrbdb; if (here->B4SOIrbsb < 1.0e-3) here->B4SOIgrbsb = 1.0e3; else here->B4SOIgrbsb = model->B4SOIgbmin + 1.0 / here->B4SOIrbsb; } /* v4.0 rbodyMod end */ /* Bug Fix # 17 Jul09 Stress effect code (lines: 1954-2020) is moved up to lines 1479-1545*/ here->B4SOIvfbzb = pParam->B4SOIvfbzb + model->B4SOItype * here->B4SOIdelvto; pParam->B4SOIldeb = sqrt(epssub * Vtm0 / (Charge_q * pParam->B4SOInpeak * 1.0e6)) / 3.0; /*For high k mobility*/ T1 = model->B4SOItype * here->B4SOIvth0 - here->B4SOIvfb - pParam->B4SOIphi; T2 = T1 + T1; T3 = 2.5 * T1; here->B4SOIvtfbphi1 = (model->B4SOItype == NMOS) ? T2 : T3; if (here->B4SOIvtfbphi1 < 0.0) here->B4SOIvtfbphi1 = 0.0; /*Calculate VgsteffVth for mobMod=4*/ if(model->B4SOImobMod == 4) { /*Calculate n @ Vbs=Vds=0*/ /*V0 = pParam->B4SOIvbi - pParam->B4SOIphi; */ /* v4.2 never used in code */ lt1 = model->B4SOIfactor1* pParam->B4SOIsqrtXdep0; /* ltw = lt1; */ /* v4.2 never used in code */ T0 = pParam->B4SOIdvt1 * pParam->B4SOIleff / lt1; if (T0 < EXPL_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXPL; Theta0 = T1 / T4; } else Theta0 = 1.0 / (MAX_EXPL - 2.0); tmp1 = epssub / pParam->B4SOIXdep0; /*here->B4SOInstar = model->B4SOIvtm / Charge_q * (model->B4SOIcox + tmp1 + pParam->B4SOIcit); */ /* v4.2 never used in code */ tmp2 = pParam->B4SOInfactor * tmp1; tmp3 = (tmp2 + pParam->B4SOIcdsc * Theta0 + pParam->B4SOIcit) / model->B4SOIcox; if (tmp3 >= -0.5) n0 = 1.0 + tmp3; else { T0 = 1.0 / (3.0 + 8.0 * tmp3); n0 = (1.0 + 3.0 * tmp3) * T0; } T0 = n0 * Vtm0; T1 = pParam->B4SOIvoff; T2 = T1/T0; if (T2 < -EXPL_THRESHOLD) { T3 = model->B4SOIcox * MIN_EXPL / pParam->B4SOIcdep0; T4 = pParam->B4SOImstar + T3 * n0; } else if (T2 > EXPL_THRESHOLD) { T3 = model->B4SOIcox * MAX_EXPL / pParam->B4SOIcdep0; T4 = pParam->B4SOImstar + T3 * n0; } else { T3 = exp(T2)* model->B4SOIcox / pParam->B4SOIcdep0; T4 = pParam->B4SOImstar + T3 * n0; } here->B4SOIvgsteffvth = T0 * log(2.0)/T4; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsimsoi/b4soiitf.h0000644000175000017500000000072213546075722022525 0ustar carstencarsten/********** Copyright 2010 Regents of the University of California. All rights reserved. Author: 2005 Hui Wan (based on Samuel Fung's b3soiitf.h) Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu. Authors: 2009- Tanvir Morshed, Ali Niknejad, Chenming Hu. Authors: 2010- Tanvir Morshed, Ali Niknejad, Chenming Hu. File: b4soiitf.h **********/ #ifndef DEV_B4SOI #define DEV_B4SOI #include "b4soiext.h" SPICEdev *get_b4soi_info (void); #endif tmpk8ny_4pz/src/spicelib/devices/bsimsoi/b4soiinit.c0000644000175000017500000000323013546075722022676 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "b4soiitf.h" #include "b4soiinit.h" SPICEdev B4SOIinfo = { .DEVpublic = { .name = "B4SOI", .description = "Berkeley SOI MOSFET model version 4.4.0", .terms = &B4SOInSize, .numNames = &B4SOInSize, .termNames = B4SOInames, .numInstanceParms = &B4SOIpTSize, .instanceParms = B4SOIpTable, .numModelParms = &B4SOImPTSize, .modelParms = B4SOImPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = B4SOIparam, .DEVmodParam = B4SOImParam, .DEVload = B4SOIload, .DEVsetup = B4SOIsetup, .DEVunsetup = B4SOIunsetup, .DEVpzSetup = B4SOIsetup, .DEVtemperature = B4SOItemp, .DEVtrunc = B4SOItrunc, .DEVfindBranch = NULL, .DEVacLoad = B4SOIacLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = B4SOImDelete, .DEVdelete = NULL, .DEVsetic = B4SOIgetic, .DEVask = B4SOIask, .DEVmodAsk = B4SOImAsk, .DEVpzLoad = B4SOIpzLoad, .DEVconvTest = B4SOIconvTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = B4SOInoise, .DEVsoaCheck = B4SOIsoaCheck, .DEVinstSize = &B4SOIiSize, .DEVmodSize = &B4SOImSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_b4soi_info (void) { return &B4SOIinfo; } tmpk8ny_4pz/src/spicelib/devices/bsimsoi/b4soimpar.c0000644000175000017500000040263313546075722022704 0ustar carstencarsten/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/ /********** * Copyright 2010 Regents of the University of California. All rights reserved. * Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang * Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soimpar.c * Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu. * Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu. * Authors: 2010- Tanvir Morshed, Ali Niknejad, Chenming Hu. * File: b4soimpar.c * Modified by Hui Wan, Xuemei Xi 11/30/2005 * Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009 * Modified by Tanvir Morshed 09/22/2009 * Modified by Tanvir Morshed 12/31/2009 * Modified by Tanvir Morshed 12/16/2010 **********/ #include "ngspice/ngspice.h" #include "b4soidef.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B4SOImParam( int param, IFvalue *value, GENmodel *inMod) { B4SOImodel *mod = (B4SOImodel*)inMod; switch(param) { case B4SOI_MOD_MOBMOD : mod->B4SOImobMod = value->iValue; mod->B4SOImobModGiven = TRUE; break; case B4SOI_MOD_BINUNIT : mod->B4SOIbinUnit = value->iValue; mod->B4SOIbinUnitGiven = TRUE; break; case B4SOI_MOD_PARAMCHK : mod->B4SOIparamChk = value->iValue; mod->B4SOIparamChkGiven = TRUE; break; case B4SOI_MOD_CAPMOD : mod->B4SOIcapMod = value->iValue; mod->B4SOIcapModGiven = TRUE; break; case B4SOI_MOD_SHMOD : mod->B4SOIshMod = value->iValue; mod->B4SOIshModGiven = TRUE; break; /* case B4SOI_MOD_NOIMOD : mod->B4SOInoiMod = value->iValue; mod->B4SOInoiModGiven = TRUE; break; v3.2 */ case B4SOI_MOD_VERSION : mod->B4SOIversion = value->rValue; mod->B4SOIversionGiven = TRUE; break; case B4SOI_MOD_MTRLMOD : mod->B4SOImtrlMod = value->iValue; mod->B4SOImtrlModGiven = TRUE; break; case B4SOI_MOD_VGSTCVMOD : mod->B4SOIvgstcvMod = value->iValue; mod->B4SOIvgstcvModGiven = TRUE; break; case B4SOI_MOD_GIDLMOD : mod->B4SOIgidlMod = value->iValue; mod->B4SOIgidlModGiven = TRUE; break; case B4SOI_MOD_IIIMOD : mod->B4SOIiiiMod = value->iValue; mod->B4SOIiiiModGiven = TRUE; break; case B4SOI_MOD_TOX : mod->B4SOItox = value->rValue; mod->B4SOItoxGiven = TRUE; break; case B4SOI_MOD_TOXP : mod->B4SOItoxp = value->rValue; mod->B4SOItoxpGiven = TRUE; break; case B4SOI_MOD_LEFFEOT : mod->B4SOIleffeot = value->rValue; mod->B4SOIleffeotGiven = TRUE; break; case B4SOI_MOD_WEFFEOT : mod->B4SOIweffeot = value->rValue; mod->B4SOIweffeotGiven = TRUE; break; case B4SOI_MOD_VDDEOT : mod->B4SOIvddeot = value->rValue; mod->B4SOIvddeotGiven = TRUE; break; case B4SOI_MOD_TEMPEOT : mod->B4SOItempeot = value->rValue; mod->B4SOItempeotGiven = TRUE; break; case B4SOI_MOD_ADOS : mod->B4SOIados = value->rValue; mod->B4SOIadosGiven = TRUE; break; case B4SOI_MOD_BDOS : mod->B4SOIbdos = value->rValue; mod->B4SOIbdosGiven = TRUE; break; case B4SOI_MOD_EPSRGATE: mod->B4SOIepsrgate = value->rValue; mod->B4SOIepsrgateGiven = TRUE; break; case B4SOI_MOD_PHIG: mod->B4SOIphig = value->rValue; mod->B4SOIphigGiven = TRUE; break; case B4SOI_MOD_EASUB: mod->B4SOIeasub = value->rValue; mod->B4SOIeasubGiven = TRUE; break; case B4SOI_MOD_TOXM : mod->B4SOItoxm = value->rValue; mod->B4SOItoxmGiven = TRUE; break; /* v3.2 */ /*4.1 */ case B4SOI_MOD_EOT : mod->B4SOIeot = value->rValue; mod->B4SOIeotGiven = TRUE; break; case B4SOI_MOD_EPSROX : mod->B4SOIepsrox = value->rValue; mod->B4SOIepsroxGiven = TRUE; break; case B4SOI_MOD_EPSRSUB: mod->B4SOIepsrsub = value->rValue; mod->B4SOIepsrsubGiven = TRUE; break; case B4SOI_MOD_NI0SUB: mod->B4SOIni0sub = value->rValue; mod->B4SOIni0subGiven = TRUE; break; case B4SOI_MOD_BG0SUB: mod->B4SOIbg0sub = value->rValue; mod->B4SOIbg0subGiven = TRUE; break; case B4SOI_MOD_TBGASUB: mod->B4SOItbgasub = value->rValue; mod->B4SOItbgasubGiven = TRUE; break; case B4SOI_MOD_TBGBSUB: mod->B4SOItbgbsub = value->rValue; mod->B4SOItbgbsubGiven = TRUE; break; /* v2.2.3 */ case B4SOI_MOD_DTOXCV : mod->B4SOIdtoxcv = value->rValue; mod->B4SOIdtoxcvGiven = TRUE; break; case B4SOI_MOD_CDSC : mod->B4SOIcdsc = value->rValue; mod->B4SOIcdscGiven = TRUE; break; case B4SOI_MOD_CDSCB : mod->B4SOIcdscb = value->rValue; mod->B4SOIcdscbGiven = TRUE; break; case B4SOI_MOD_CDSCD : mod->B4SOIcdscd = value->rValue; mod->B4SOIcdscdGiven = TRUE; break; case B4SOI_MOD_CIT : mod->B4SOIcit = value->rValue; mod->B4SOIcitGiven = TRUE; break; case B4SOI_MOD_NFACTOR : mod->B4SOInfactor = value->rValue; mod->B4SOInfactorGiven = TRUE; break; case B4SOI_MOD_VSAT: mod->B4SOIvsat = value->rValue; mod->B4SOIvsatGiven = TRUE; break; case B4SOI_MOD_A0: mod->B4SOIa0 = value->rValue; mod->B4SOIa0Given = TRUE; break; case B4SOI_MOD_AGS: mod->B4SOIags= value->rValue; mod->B4SOIagsGiven = TRUE; break; case B4SOI_MOD_A1: mod->B4SOIa1 = value->rValue; mod->B4SOIa1Given = TRUE; break; case B4SOI_MOD_A2: mod->B4SOIa2 = value->rValue; mod->B4SOIa2Given = TRUE; break; case B4SOI_MOD_AT: mod->B4SOIat = value->rValue; mod->B4SOIatGiven = TRUE; break; case B4SOI_MOD_KETA: mod->B4SOIketa = value->rValue; mod->B4SOIketaGiven = TRUE; break; case B4SOI_MOD_NSUB: mod->B4SOInsub = value->rValue; mod->B4SOInsubGiven = TRUE; break; case B4SOI_MOD_NPEAK: mod->B4SOInpeak = value->rValue; mod->B4SOInpeakGiven = TRUE; /* Bug # 22 Jul09 Proper limiting conditions are specified in the B4SOIcheck.c file*/ /* if (mod->B4SOInpeak > 1.0e20) mod->B4SOInpeak *= 1.0e-6; */ break; case B4SOI_MOD_NSD: mod->B4SOInsd = value->rValue; mod->B4SOInsdGiven = TRUE; /* if (mod->B4SOInsd > 1.0e23) mod->B4SOInsd *= 1.0e-6; */ /* Bug # 22 Jul09 Proper limiting conditions are specified in the B4SOIcheck.c file*/ break; case B4SOI_MOD_NGATE: mod->B4SOIngate = value->rValue; mod->B4SOIngateGiven = TRUE; /* if (mod->B4SOIngate > 1.0e23) mod->B4SOIngate *= 1.0e-6; */ /* Bug # 22 Jul09 Proper limiting conditions are specified in the B4SOIcheck.c file*/ break; case B4SOI_MOD_GAMMA1: mod->B4SOIgamma1 = value->rValue; mod->B4SOIgamma1Given = TRUE; break; case B4SOI_MOD_GAMMA2: mod->B4SOIgamma2 = value->rValue; mod->B4SOIgamma2Given = TRUE; break; case B4SOI_MOD_VBX: mod->B4SOIvbx = value->rValue; mod->B4SOIvbxGiven = TRUE; break; case B4SOI_MOD_VBM: mod->B4SOIvbm = value->rValue; mod->B4SOIvbmGiven = TRUE; break; case B4SOI_MOD_XT: mod->B4SOIxt = value->rValue; mod->B4SOIxtGiven = TRUE; break; case B4SOI_MOD_K1: mod->B4SOIk1 = value->rValue; mod->B4SOIk1Given = TRUE; break; case B4SOI_MOD_KT1: mod->B4SOIkt1 = value->rValue; mod->B4SOIkt1Given = TRUE; break; case B4SOI_MOD_KT1L: mod->B4SOIkt1l = value->rValue; mod->B4SOIkt1lGiven = TRUE; break; case B4SOI_MOD_KT2: mod->B4SOIkt2 = value->rValue; mod->B4SOIkt2Given = TRUE; break; case B4SOI_MOD_K2: mod->B4SOIk2 = value->rValue; mod->B4SOIk2Given = TRUE; break; case B4SOI_MOD_K3: mod->B4SOIk3 = value->rValue; mod->B4SOIk3Given = TRUE; break; case B4SOI_MOD_K3B: mod->B4SOIk3b = value->rValue; mod->B4SOIk3bGiven = TRUE; break; case B4SOI_MOD_LPE0: mod->B4SOIlpe0 = value->rValue; mod->B4SOIlpe0Given = TRUE; break; case B4SOI_MOD_LPEB: /* v4.0 for Vth */ mod->B4SOIlpeb = value->rValue; mod->B4SOIlpebGiven = TRUE; break; case B4SOI_MOD_W0: mod->B4SOIw0 = value->rValue; mod->B4SOIw0Given = TRUE; break; case B4SOI_MOD_DVT0: mod->B4SOIdvt0 = value->rValue; mod->B4SOIdvt0Given = TRUE; break; case B4SOI_MOD_DVT1: mod->B4SOIdvt1 = value->rValue; mod->B4SOIdvt1Given = TRUE; break; case B4SOI_MOD_DVT2: mod->B4SOIdvt2 = value->rValue; mod->B4SOIdvt2Given = TRUE; break; case B4SOI_MOD_DVT0W: mod->B4SOIdvt0w = value->rValue; mod->B4SOIdvt0wGiven = TRUE; break; case B4SOI_MOD_DVT1W: mod->B4SOIdvt1w = value->rValue; mod->B4SOIdvt1wGiven = TRUE; break; case B4SOI_MOD_DVT2W: mod->B4SOIdvt2w = value->rValue; mod->B4SOIdvt2wGiven = TRUE; break; case B4SOI_MOD_DROUT: mod->B4SOIdrout = value->rValue; mod->B4SOIdroutGiven = TRUE; break; case B4SOI_MOD_DSUB: mod->B4SOIdsub = value->rValue; mod->B4SOIdsubGiven = TRUE; break; case B4SOI_MOD_VTH0: mod->B4SOIvth0 = value->rValue; mod->B4SOIvth0Given = TRUE; break; case B4SOI_MOD_VFB: mod->B4SOIvfb = value->rValue; mod->B4SOIvfbGiven = TRUE; break; /* v4.1 */ case B4SOI_MOD_UA: mod->B4SOIua = value->rValue; mod->B4SOIuaGiven = TRUE; break; case B4SOI_MOD_UA1: mod->B4SOIua1 = value->rValue; mod->B4SOIua1Given = TRUE; break; case B4SOI_MOD_UB: mod->B4SOIub = value->rValue; mod->B4SOIubGiven = TRUE; break; case B4SOI_MOD_UB1: mod->B4SOIub1 = value->rValue; mod->B4SOIub1Given = TRUE; break; case B4SOI_MOD_UC: mod->B4SOIuc = value->rValue; mod->B4SOIucGiven = TRUE; break; case B4SOI_MOD_UC1: mod->B4SOIuc1 = value->rValue; mod->B4SOIuc1Given = TRUE; break; case B4SOI_MOD_U0 : mod->B4SOIu0 = value->rValue; mod->B4SOIu0Given = TRUE; break; case B4SOI_MOD_UTE : mod->B4SOIute = value->rValue; mod->B4SOIuteGiven = TRUE; break; /*4.1 mobmod=4*/ case B4SOI_MOD_UD: mod->B4SOIud = value->rValue; mod->B4SOIudGiven = TRUE; break; case B4SOI_MOD_LUD: mod->B4SOIlud = value->rValue; mod->B4SOIludGiven = TRUE; break; case B4SOI_MOD_WUD: mod->B4SOIwud = value->rValue; mod->B4SOIwudGiven = TRUE; break; case B4SOI_MOD_PUD: mod->B4SOIpud = value->rValue; mod->B4SOIpudGiven = TRUE; break; case B4SOI_MOD_UD1: mod->B4SOIud1 = value->rValue; mod->B4SOIud1Given = TRUE; break; case B4SOI_MOD_LUD1: mod->B4SOIlud1 = value->rValue; mod->B4SOIlud1Given = TRUE; break; case B4SOI_MOD_WUD1: mod->B4SOIwud1 = value->rValue; mod->B4SOIwud1Given = TRUE; break; case B4SOI_MOD_PUD1: mod->B4SOIpud1 = value->rValue; mod->B4SOIpud1Given = TRUE; break; case B4SOI_MOD_EU: mod->B4SOIeu = value->rValue; mod->B4SOIeuGiven = TRUE; break; case B4SOI_MOD_LEU: mod->B4SOIleu = value->rValue; mod->B4SOIleuGiven = TRUE; break; case B4SOI_MOD_WEU: mod->B4SOIweu = value->rValue; mod->B4SOIweuGiven = TRUE; break; case B4SOI_MOD_PEU: mod->B4SOIpeu = value->rValue; mod->B4SOIpeuGiven = TRUE; break; case B4SOI_MOD_UCS: mod->B4SOIucs = value->rValue; mod->B4SOIucsGiven = TRUE; break; case B4SOI_MOD_LUCS: mod->B4SOIlucs = value->rValue; mod->B4SOIlucsGiven = TRUE; break; case B4SOI_MOD_WUCS: mod->B4SOIwucs = value->rValue; mod->B4SOIwucsGiven = TRUE; break; case B4SOI_MOD_PUCS: mod->B4SOIpucs = value->rValue; mod->B4SOIpucsGiven = TRUE; break; /* Bug fix # 31 Jul09 */ case B4SOI_MOD_UCSTE: mod->B4SOIucste = value->rValue; mod->B4SOIucsteGiven = TRUE; break; case B4SOI_MOD_LUCSTE: mod->B4SOIlucste = value->rValue; mod->B4SOIlucsteGiven = TRUE; break; case B4SOI_MOD_WUCSTE: mod->B4SOIwucste = value->rValue; mod->B4SOIwucsteGiven = TRUE; break; case B4SOI_MOD_PUCSTE: mod->B4SOIpucste = value->rValue; mod->B4SOIpucsteGiven = TRUE; break; case B4SOI_MOD_VOFF: mod->B4SOIvoff = value->rValue; mod->B4SOIvoffGiven = TRUE; break; case B4SOI_MOD_DELTA : mod->B4SOIdelta = value->rValue; mod->B4SOIdeltaGiven = TRUE; break; case B4SOI_MOD_RDSW: mod->B4SOIrdsw = value->rValue; mod->B4SOIrdswGiven = TRUE; break; case B4SOI_MOD_RSW: mod->B4SOIrsw = value->rValue; mod->B4SOIrswGiven = TRUE; break; case B4SOI_MOD_RDW: mod->B4SOIrdw = value->rValue; mod->B4SOIrdwGiven = TRUE; break; case B4SOI_MOD_RSWMIN: mod->B4SOIrswmin = value->rValue; mod->B4SOIrswminGiven = TRUE; break; case B4SOI_MOD_RDWMIN: mod->B4SOIrdwmin = value->rValue; mod->B4SOIrdwminGiven = TRUE; break; case B4SOI_MOD_PRWG: mod->B4SOIprwg = value->rValue; mod->B4SOIprwgGiven = TRUE; break; case B4SOI_MOD_PRWB: mod->B4SOIprwb = value->rValue; mod->B4SOIprwbGiven = TRUE; break; case B4SOI_MOD_PRT: mod->B4SOIprt = value->rValue; mod->B4SOIprtGiven = TRUE; break; case B4SOI_MOD_ETA0: mod->B4SOIeta0 = value->rValue; mod->B4SOIeta0Given = TRUE; break; case B4SOI_MOD_ETAB: mod->B4SOIetab = value->rValue; mod->B4SOIetabGiven = TRUE; break; case B4SOI_MOD_PCLM: mod->B4SOIpclm = value->rValue; mod->B4SOIpclmGiven = TRUE; break; case B4SOI_MOD_PDIBL1: mod->B4SOIpdibl1 = value->rValue; mod->B4SOIpdibl1Given = TRUE; break; case B4SOI_MOD_PDIBL2: mod->B4SOIpdibl2 = value->rValue; mod->B4SOIpdibl2Given = TRUE; break; case B4SOI_MOD_PDIBLB: mod->B4SOIpdiblb = value->rValue; mod->B4SOIpdiblbGiven = TRUE; break; case B4SOI_MOD_PVAG: mod->B4SOIpvag = value->rValue; mod->B4SOIpvagGiven = TRUE; break; case B4SOI_MOD_WR : mod->B4SOIwr = value->rValue; mod->B4SOIwrGiven = TRUE; break; case B4SOI_MOD_DWG : mod->B4SOIdwg = value->rValue; mod->B4SOIdwgGiven = TRUE; break; case B4SOI_MOD_DWB : mod->B4SOIdwb = value->rValue; mod->B4SOIdwbGiven = TRUE; break; case B4SOI_MOD_B0 : mod->B4SOIb0 = value->rValue; mod->B4SOIb0Given = TRUE; break; case B4SOI_MOD_B1 : mod->B4SOIb1 = value->rValue; mod->B4SOIb1Given = TRUE; break; case B4SOI_MOD_ALPHA0 : mod->B4SOIalpha0 = value->rValue; mod->B4SOIalpha0Given = TRUE; break; case B4SOI_MOD_CGSL : mod->B4SOIcgsl = value->rValue; mod->B4SOIcgslGiven = TRUE; break; case B4SOI_MOD_CGDL : mod->B4SOIcgdl = value->rValue; mod->B4SOIcgdlGiven = TRUE; break; case B4SOI_MOD_CKAPPA : mod->B4SOIckappa = value->rValue; mod->B4SOIckappaGiven = TRUE; break; case B4SOI_MOD_CF : mod->B4SOIcf = value->rValue; mod->B4SOIcfGiven = TRUE; break; case B4SOI_MOD_CLC : mod->B4SOIclc = value->rValue; mod->B4SOIclcGiven = TRUE; break; case B4SOI_MOD_CLE : mod->B4SOIcle = value->rValue; mod->B4SOIcleGiven = TRUE; break; case B4SOI_MOD_DWC : mod->B4SOIdwc = value->rValue; mod->B4SOIdwcGiven = TRUE; break; case B4SOI_MOD_DLC : mod->B4SOIdlc = value->rValue; mod->B4SOIdlcGiven = TRUE; break; case B4SOI_MOD_TBOX : mod->B4SOItbox = value->rValue; mod->B4SOItboxGiven = TRUE; break; case B4SOI_MOD_TSI : mod->B4SOItsi = value->rValue; mod->B4SOItsiGiven = TRUE; break; case B4SOI_MOD_ETSI : mod->B4SOIetsi = value->rValue; mod->B4SOIetsiGiven = TRUE; break; case B4SOI_MOD_XJ : mod->B4SOIxj = value->rValue; mod->B4SOIxjGiven = TRUE; break; case B4SOI_MOD_RBODY : mod->B4SOIrbody = value->rValue; mod->B4SOIrbodyGiven = TRUE; break; case B4SOI_MOD_RBSH : mod->B4SOIrbsh = value->rValue; mod->B4SOIrbshGiven = TRUE; break; case B4SOI_MOD_RTH0 : mod->B4SOIrth0 = value->rValue; mod->B4SOIrth0Given = TRUE; break; case B4SOI_MOD_CTH0 : mod->B4SOIcth0 = value->rValue; mod->B4SOIcth0Given = TRUE; break; case B4SOI_MOD_CFRCOEFF : /* v4.4 */ mod->B4SOIcfrcoeff = value->rValue; mod->B4SOIcfrcoeffGiven = TRUE; break; case B4SOI_MOD_EGIDL : mod->B4SOIegidl = value->rValue; mod->B4SOIegidlGiven = TRUE; break; case B4SOI_MOD_AGIDL : mod->B4SOIagidl = value->rValue; mod->B4SOIagidlGiven = TRUE; break; case B4SOI_MOD_BGIDL : mod->B4SOIbgidl = value->rValue; mod->B4SOIbgidlGiven = TRUE; break; case B4SOI_MOD_CGIDL : mod->B4SOIcgidl = value->rValue; mod->B4SOIcgidlGiven = TRUE; break; case B4SOI_MOD_RGIDL : mod->B4SOIrgidl = value->rValue; mod->B4SOIrgidlGiven = TRUE; break; case B4SOI_MOD_KGIDL : mod->B4SOIkgidl = value->rValue; mod->B4SOIkgidlGiven = TRUE; break; case B4SOI_MOD_FGIDL : mod->B4SOIfgidl = value->rValue; mod->B4SOIfgidlGiven = TRUE; break; case B4SOI_MOD_EGISL : mod->B4SOIegisl = value->rValue; mod->B4SOIegislGiven = TRUE; break; case B4SOI_MOD_AGISL : mod->B4SOIagisl = value->rValue; mod->B4SOIagislGiven = TRUE; break; case B4SOI_MOD_BGISL : mod->B4SOIbgisl = value->rValue; mod->B4SOIbgislGiven = TRUE; break; case B4SOI_MOD_CGISL : mod->B4SOIcgisl = value->rValue; mod->B4SOIcgislGiven = TRUE; break; case B4SOI_MOD_RGISL : mod->B4SOIrgisl = value->rValue; mod->B4SOIrgislGiven = TRUE; break; case B4SOI_MOD_KGISL : mod->B4SOIkgisl = value->rValue; mod->B4SOIkgislGiven = TRUE; break; case B4SOI_MOD_FGISL : mod->B4SOIfgisl = value->rValue; mod->B4SOIfgislGiven = TRUE; break; case B4SOI_MOD_FDMOD : /* mod->B4SOIfdMod = value->rValue; v4.2 */ mod->B4SOIfdMod = value->iValue; mod->B4SOIfdModGiven = TRUE; break; case B4SOI_MOD_VSCE : mod->B4SOIvsce = value->rValue; mod->B4SOIvsceGiven = TRUE; break; case B4SOI_MOD_CDSBS : mod->B4SOIcdsbs = value->rValue; mod->B4SOIcdsbsGiven = TRUE; break; case B4SOI_MOD_MINVCV: mod->B4SOIminvcv = value->rValue; mod->B4SOIminvcvGiven = TRUE; break; case B4SOI_MOD_LMINVCV: mod->B4SOIlminvcv = value->rValue; mod->B4SOIlminvcvGiven = TRUE; break; case B4SOI_MOD_WMINVCV: mod->B4SOIwminvcv = value->rValue; mod->B4SOIwminvcvGiven = TRUE; break; case B4SOI_MOD_PMINVCV: mod->B4SOIpminvcv = value->rValue; mod->B4SOIpminvcvGiven = TRUE; break; case B4SOI_MOD_VOFFCV: mod->B4SOIvoffcv = value->rValue; mod->B4SOIvoffcvGiven = TRUE; break; case B4SOI_MOD_LVOFFCV: mod->B4SOIlvoffcv = value->rValue; mod->B4SOIlvoffcvGiven = TRUE; break; case B4SOI_MOD_WVOFFCV: mod->B4SOIwvoffcv = value->rValue; mod->B4SOIwvoffcvGiven = TRUE; break; case B4SOI_MOD_PVOFFCV: mod->B4SOIpvoffcv = value->rValue; mod->B4SOIpvoffcvGiven = TRUE; break; case B4SOI_MOD_NDIODES : /* v4.0 */ mod->B4SOIndiode = value->rValue; mod->B4SOIndiodeGiven = TRUE; break; case B4SOI_MOD_NDIODED : /* v4.0 */ mod->B4SOIndioded = value->rValue; mod->B4SOIndiodedGiven = TRUE; break; case B4SOI_MOD_XBJT : mod->B4SOIxbjt = value->rValue; mod->B4SOIxbjtGiven = TRUE; break; case B4SOI_MOD_XDIFS : mod->B4SOIxdif = value->rValue; mod->B4SOIxdifGiven = TRUE; break; case B4SOI_MOD_XRECS : mod->B4SOIxrec = value->rValue; mod->B4SOIxrecGiven = TRUE; break; case B4SOI_MOD_XTUNS : mod->B4SOIxtun = value->rValue; mod->B4SOIxtunGiven = TRUE; break; case B4SOI_MOD_XDIFD : mod->B4SOIxdifd = value->rValue; mod->B4SOIxdifdGiven = TRUE; break; case B4SOI_MOD_XRECD : mod->B4SOIxrecd = value->rValue; mod->B4SOIxrecdGiven = TRUE; break; case B4SOI_MOD_XTUND : mod->B4SOIxtund = value->rValue; mod->B4SOIxtundGiven = TRUE; break; case B4SOI_MOD_TT : mod->B4SOItt = value->rValue; mod->B4SOIttGiven = TRUE; break; case B4SOI_MOD_VSDTH : mod->B4SOIvsdth = value->rValue; mod->B4SOIvsdthGiven = TRUE; break; case B4SOI_MOD_VSDFB : mod->B4SOIvsdfb = value->rValue; mod->B4SOIvsdfbGiven = TRUE; break; case B4SOI_MOD_CSDMIN : mod->B4SOIcsdmin = value->rValue; mod->B4SOIcsdminGiven = TRUE; break; case B4SOI_MOD_ASD : mod->B4SOIasd = value->rValue; mod->B4SOIasdGiven = TRUE; break; case B4SOI_MOD_TNOM : mod->B4SOItnom = value->rValue + 273.15; mod->B4SOItnomGiven = TRUE; break; case B4SOI_MOD_CGSO : mod->B4SOIcgso = value->rValue; mod->B4SOIcgsoGiven = TRUE; break; case B4SOI_MOD_CGDO : mod->B4SOIcgdo = value->rValue; mod->B4SOIcgdoGiven = TRUE; break; case B4SOI_MOD_CGEO : mod->B4SOIcgeo = value->rValue; mod->B4SOIcgeoGiven = TRUE; break; case B4SOI_MOD_XPART : mod->B4SOIxpart = value->rValue; mod->B4SOIxpartGiven = TRUE; break; case B4SOI_MOD_RSH : mod->B4SOIsheetResistance = value->rValue; mod->B4SOIsheetResistanceGiven = TRUE; break; case B4SOI_MOD_PBSWGS : /* v4.0 */ mod->B4SOIGatesidewallJctSPotential = value->rValue; mod->B4SOIGatesidewallJctSPotentialGiven = TRUE; break; case B4SOI_MOD_PBSWGD : /* v4.0 */ mod->B4SOIGatesidewallJctDPotential = value->rValue; mod->B4SOIGatesidewallJctDPotentialGiven = TRUE; break; case B4SOI_MOD_MJSWGS : /* v4.0 */ mod->B4SOIbodyJctGateSideSGradingCoeff = value->rValue; mod->B4SOIbodyJctGateSideSGradingCoeffGiven = TRUE; break; case B4SOI_MOD_MJSWGD : /* v4.0 */ mod->B4SOIbodyJctGateSideDGradingCoeff = value->rValue; mod->B4SOIbodyJctGateSideDGradingCoeffGiven = TRUE; break; case B4SOI_MOD_CJSWGS : /* v4.0 */ mod->B4SOIunitLengthGateSidewallJctCapS = value->rValue; mod->B4SOIunitLengthGateSidewallJctCapSGiven = TRUE; break; case B4SOI_MOD_CJSWGD : /* v4.0 */ mod->B4SOIunitLengthGateSidewallJctCapD = value->rValue; mod->B4SOIunitLengthGateSidewallJctCapDGiven = TRUE; break; case B4SOI_MOD_CSDESW : mod->B4SOIcsdesw = value->rValue; mod->B4SOIcsdeswGiven = TRUE; break; case B4SOI_MOD_LINT : mod->B4SOILint = value->rValue; mod->B4SOILintGiven = TRUE; break; case B4SOI_MOD_LL : mod->B4SOILl = value->rValue; mod->B4SOILlGiven = TRUE; break; /* v2.2.3 */ case B4SOI_MOD_LLC : mod->B4SOILlc = value->rValue; mod->B4SOILlcGiven = TRUE; break; case B4SOI_MOD_LLN : mod->B4SOILln = value->rValue; mod->B4SOILlnGiven = TRUE; break; case B4SOI_MOD_LW : mod->B4SOILw = value->rValue; mod->B4SOILwGiven = TRUE; break; /* v2.2.3 */ case B4SOI_MOD_LWC : mod->B4SOILwc = value->rValue; mod->B4SOILwcGiven = TRUE; break; case B4SOI_MOD_LWN : mod->B4SOILwn = value->rValue; mod->B4SOILwnGiven = TRUE; break; case B4SOI_MOD_LWL : mod->B4SOILwl = value->rValue; mod->B4SOILwlGiven = TRUE; break; /* v2.2.3 */ case B4SOI_MOD_LWLC : mod->B4SOILwlc = value->rValue; mod->B4SOILwlcGiven = TRUE; break; case B4SOI_MOD_WINT : mod->B4SOIWint = value->rValue; mod->B4SOIWintGiven = TRUE; break; case B4SOI_MOD_WL : mod->B4SOIWl = value->rValue; mod->B4SOIWlGiven = TRUE; break; /* v2.2.3 */ case B4SOI_MOD_WLC : mod->B4SOIWlc = value->rValue; mod->B4SOIWlcGiven = TRUE; break; case B4SOI_MOD_WLN : mod->B4SOIWln = value->rValue; mod->B4SOIWlnGiven = TRUE; break; case B4SOI_MOD_WW : mod->B4SOIWw = value->rValue; mod->B4SOIWwGiven = TRUE; break; /* v2.2.3 */ case B4SOI_MOD_WWC : mod->B4SOIWwc = value->rValue; mod->B4SOIWwcGiven = TRUE; break; case B4SOI_MOD_WWN : mod->B4SOIWwn = value->rValue; mod->B4SOIWwnGiven = TRUE; break; case B4SOI_MOD_WWL : mod->B4SOIWwl = value->rValue; mod->B4SOIWwlGiven = TRUE; break; /* v2.2.3 */ case B4SOI_MOD_WWLC : mod->B4SOIWwlc = value->rValue; mod->B4SOIWwlcGiven = TRUE; break; case B4SOI_MOD_NOIA : mod->B4SOIoxideTrapDensityA = value->rValue; mod->B4SOIoxideTrapDensityAGiven = TRUE; break; case B4SOI_MOD_NOIB : mod->B4SOIoxideTrapDensityB = value->rValue; mod->B4SOIoxideTrapDensityBGiven = TRUE; break; case B4SOI_MOD_NOIC : mod->B4SOIoxideTrapDensityC = value->rValue; mod->B4SOIoxideTrapDensityCGiven = TRUE; break; case B4SOI_MOD_NOIF : mod->B4SOInoif = value->rValue; mod->B4SOInoifGiven = TRUE; break; case B4SOI_MOD_EM : mod->B4SOIem = value->rValue; mod->B4SOIemGiven = TRUE; break; case B4SOI_MOD_EF : mod->B4SOIef = value->rValue; mod->B4SOIefGiven = TRUE; break; case B4SOI_MOD_AF : mod->B4SOIaf = value->rValue; mod->B4SOIafGiven = TRUE; break; case B4SOI_MOD_KF : mod->B4SOIkf = value->rValue; mod->B4SOIkfGiven = TRUE; break; case B4SOI_MOD_BF : mod->B4SOIbf = value->rValue; mod->B4SOIbfGiven = TRUE; break; case B4SOI_MOD_W0FLK : mod->B4SOIw0flk = value->rValue; mod->B4SOIw0flkGiven = TRUE; break; /* v3.0 */ case B4SOI_MOD_SOIMOD: mod->B4SOIsoiMod = value->iValue; mod->B4SOIsoiModGiven = TRUE; break; /* v3.2 bug fix */ case B4SOI_MOD_VBS0PD: mod->B4SOIvbs0pd = value->rValue; mod->B4SOIvbs0pdGiven = TRUE; break; /* v3.2 */ case B4SOI_MOD_VBS0FD: mod->B4SOIvbs0fd = value->rValue; mod->B4SOIvbs0fdGiven = TRUE; break; /* v3.2 */ case B4SOI_MOD_VBSA: mod->B4SOIvbsa = value->rValue; mod->B4SOIvbsaGiven = TRUE; break; case B4SOI_MOD_NOFFFD : mod->B4SOInofffd = value->rValue; mod->B4SOInofffdGiven = TRUE; break; case B4SOI_MOD_VOFFFD: mod->B4SOIvofffd = value->rValue; mod->B4SOIvofffdGiven = TRUE; break; case B4SOI_MOD_K1B: mod->B4SOIk1b = value->rValue; mod->B4SOIk1bGiven = TRUE; break; case B4SOI_MOD_K2B: mod->B4SOIk2b = value->rValue; mod->B4SOIk2bGiven = TRUE; break; case B4SOI_MOD_DK2B: mod->B4SOIdk2b = value->rValue; mod->B4SOIdk2bGiven = TRUE; break; case B4SOI_MOD_DVBD0: mod->B4SOIdvbd0 = value->rValue; mod->B4SOIdvbd0Given = TRUE; break; case B4SOI_MOD_DVBD1: mod->B4SOIdvbd1 = value->rValue; mod->B4SOIdvbd1Given = TRUE; break; case B4SOI_MOD_MOINFD: mod->B4SOImoinFD = value->rValue; mod->B4SOImoinFDGiven = TRUE; break; /* v2.2 release */ case B4SOI_MOD_WTH0 : mod->B4SOIwth0 = value->rValue; mod->B4SOIwth0Given = TRUE; break; case B4SOI_MOD_RHALO : mod->B4SOIrhalo = value->rValue; mod->B4SOIrhaloGiven = TRUE; break; case B4SOI_MOD_NTOX : mod->B4SOIntox = value->rValue; mod->B4SOIntoxGiven = TRUE; break; case B4SOI_MOD_TOXREF : mod->B4SOItoxref = value->rValue; mod->B4SOItoxrefGiven = TRUE; break; case B4SOI_MOD_EBG : mod->B4SOIebg = value->rValue; mod->B4SOIebgGiven = TRUE; break; case B4SOI_MOD_VEVB : mod->B4SOIvevb = value->rValue; mod->B4SOIvevbGiven = TRUE; break; case B4SOI_MOD_ALPHAGB1 : mod->B4SOIalphaGB1 = value->rValue; mod->B4SOIalphaGB1Given = TRUE; break; case B4SOI_MOD_BETAGB1 : mod->B4SOIbetaGB1 = value->rValue; mod->B4SOIbetaGB1Given = TRUE; break; case B4SOI_MOD_VGB1 : mod->B4SOIvgb1 = value->rValue; mod->B4SOIvgb1Given = TRUE; break; case B4SOI_MOD_VECB : mod->B4SOIvecb = value->rValue; mod->B4SOIvecbGiven = TRUE; break; case B4SOI_MOD_ALPHAGB2 : mod->B4SOIalphaGB2 = value->rValue; mod->B4SOIalphaGB2Given = TRUE; break; case B4SOI_MOD_BETAGB2 : mod->B4SOIbetaGB2 = value->rValue; mod->B4SOIbetaGB2Given = TRUE; break; case B4SOI_MOD_VGB2 : mod->B4SOIvgb2 = value->rValue; mod->B4SOIvgb2Given = TRUE; break; case B4SOI_MOD_AIGBCP2 : mod->B4SOIaigbcp2 = value->rValue; mod->B4SOIaigbcp2Given = TRUE; break; case B4SOI_MOD_BIGBCP2 : mod->B4SOIbigbcp2 = value->rValue; mod->B4SOIbigbcp2Given = TRUE; break; case B4SOI_MOD_CIGBCP2 : mod->B4SOIcigbcp2 = value->rValue; mod->B4SOIcigbcp2Given = TRUE; break; case B4SOI_MOD_TOXQM : mod->B4SOItoxqm = value->rValue; mod->B4SOItoxqmGiven = TRUE; break; case B4SOI_MOD_VOXH : mod->B4SOIvoxh = value->rValue; mod->B4SOIvoxhGiven = TRUE; break; case B4SOI_MOD_DELTAVOX : mod->B4SOIdeltavox = value->rValue; mod->B4SOIdeltavoxGiven = TRUE; break; /* v3.0 */ case B4SOI_MOD_IGBMOD : mod->B4SOIigbMod = value->iValue; mod->B4SOIigbModGiven = TRUE; break; case B4SOI_MOD_IGCMOD : mod->B4SOIigcMod = value->iValue; mod->B4SOIigcModGiven = TRUE; break; case B4SOI_MOD_AIGC : mod->B4SOIaigc = value->rValue; mod->B4SOIaigcGiven = TRUE; break; case B4SOI_MOD_BIGC : mod->B4SOIbigc = value->rValue; mod->B4SOIbigcGiven = TRUE; break; case B4SOI_MOD_CIGC : mod->B4SOIcigc = value->rValue; mod->B4SOIcigcGiven = TRUE; break; case B4SOI_MOD_AIGSD : mod->B4SOIaigsd = value->rValue; mod->B4SOIaigsdGiven = TRUE; break; case B4SOI_MOD_BIGSD : mod->B4SOIbigsd = value->rValue; mod->B4SOIbigsdGiven = TRUE; break; case B4SOI_MOD_CIGSD : mod->B4SOIcigsd = value->rValue; mod->B4SOIcigsdGiven = TRUE; break; case B4SOI_MOD_NIGC : mod->B4SOInigc = value->rValue; mod->B4SOInigcGiven = TRUE; break; case B4SOI_MOD_PIGCD : mod->B4SOIpigcd = value->rValue; mod->B4SOIpigcdGiven = TRUE; break; case B4SOI_MOD_POXEDGE : mod->B4SOIpoxedge = value->rValue; mod->B4SOIpoxedgeGiven = TRUE; break; case B4SOI_MOD_DLCIG : mod->B4SOIdlcig = value->rValue; mod->B4SOIdlcigGiven = TRUE; break; /* v3.1 added for RF */ case B4SOI_MOD_RGATEMOD : mod->B4SOIrgateMod = value->iValue; mod->B4SOIrgateModGiven = TRUE; break; case B4SOI_MOD_XRCRG1 : mod->B4SOIxrcrg1 = value->rValue; mod->B4SOIxrcrg1Given = TRUE; break; case B4SOI_MOD_XRCRG2 : mod->B4SOIxrcrg2 = value->rValue; mod->B4SOIxrcrg2Given = TRUE; break; case B4SOI_MOD_RSHG : mod->B4SOIrshg = value->rValue; mod->B4SOIrshgGiven = TRUE; break; case B4SOI_MOD_NGCON : mod->B4SOIngcon = value->rValue; mod->B4SOIngconGiven = TRUE; break; case B4SOI_MOD_XGW : mod->B4SOIxgw = value->rValue; mod->B4SOIxgwGiven = TRUE; break; case B4SOI_MOD_XGL : mod->B4SOIxgl = value->rValue; mod->B4SOIxglGiven = TRUE; break; /* v3.1 added RF end */ /* v4.0 */ case B4SOI_MOD_RDSMOD : mod->B4SOIrdsMod = value->iValue; mod->B4SOIrdsModGiven = TRUE; break; case B4SOI_MOD_GBMIN : mod->B4SOIgbmin = value->rValue; mod->B4SOIgbminGiven = TRUE; break; case B4SOI_MOD_RBODYMOD : mod->B4SOIrbodyMod = value->iValue; mod->B4SOIrbodyModGiven = TRUE; break; case B4SOI_MOD_RBDB : mod->B4SOIrbdb = value->rValue; mod->B4SOIrbdbGiven = TRUE; break; /* Bug fix # 31 Jul 09 */ case B4SOI_MOD_RBSB : mod->B4SOIrbsb = value->rValue; mod->B4SOIrbsbGiven = TRUE; break; case B4SOI_MOD_FRBODY : mod->B4SOIfrbody = value->rValue; mod->B4SOIfrbodyGiven = TRUE; break; case B4SOI_MOD_DVTP0: mod->B4SOIdvtp0 = value->rValue; mod->B4SOIdvtp0Given = TRUE; break; case B4SOI_MOD_DVTP1: mod->B4SOIdvtp1 = value->rValue; mod->B4SOIdvtp1Given = TRUE; break; case B4SOI_MOD_DVTP2: mod->B4SOIdvtp2 = value->rValue; mod->B4SOIdvtp2Given = TRUE; break; case B4SOI_MOD_DVTP3: mod->B4SOIdvtp3 = value->rValue; mod->B4SOIdvtp3Given = TRUE; break; case B4SOI_MOD_DVTP4: mod->B4SOIdvtp4 = value->rValue; mod->B4SOIdvtp4Given = TRUE; break; case B4SOI_MOD_LDVTP0: mod->B4SOIldvtp0 = value->rValue; mod->B4SOIldvtp0Given = TRUE; break; case B4SOI_MOD_LDVTP1: mod->B4SOIldvtp1 = value->rValue; mod->B4SOIldvtp1Given = TRUE; break; case B4SOI_MOD_LDVTP2: mod->B4SOIldvtp2 = value->rValue; mod->B4SOIldvtp2Given = TRUE; break; case B4SOI_MOD_LDVTP3: mod->B4SOIldvtp3 = value->rValue; mod->B4SOIldvtp3Given = TRUE; break; case B4SOI_MOD_LDVTP4: mod->B4SOIldvtp4 = value->rValue; mod->B4SOIldvtp4Given = TRUE; break; case B4SOI_MOD_WDVTP0: mod->B4SOIwdvtp0 = value->rValue; mod->B4SOIwdvtp0Given = TRUE; break; case B4SOI_MOD_WDVTP1: mod->B4SOIwdvtp1 = value->rValue; mod->B4SOIwdvtp1Given = TRUE; break; case B4SOI_MOD_WDVTP2: mod->B4SOIwdvtp2 = value->rValue; mod->B4SOIwdvtp2Given = TRUE; break; case B4SOI_MOD_WDVTP3: mod->B4SOIwdvtp3 = value->rValue; mod->B4SOIwdvtp3Given = TRUE; break; case B4SOI_MOD_WDVTP4: mod->B4SOIwdvtp4 = value->rValue; mod->B4SOIwdvtp4Given = TRUE; break; case B4SOI_MOD_PDVTP0: mod->B4SOIpdvtp0 = value->rValue; mod->B4SOIpdvtp0Given = TRUE; break; case B4SOI_MOD_PDVTP1: mod->B4SOIpdvtp1 = value->rValue; mod->B4SOIpdvtp1Given = TRUE; break; case B4SOI_MOD_PDVTP2: mod->B4SOIpdvtp2 = value->rValue; mod->B4SOIpdvtp2Given = TRUE; break; case B4SOI_MOD_PDVTP3: mod->B4SOIpdvtp3 = value->rValue; mod->B4SOIpdvtp3Given = TRUE; break; case B4SOI_MOD_PDVTP4: mod->B4SOIpdvtp4 = value->rValue; mod->B4SOIpdvtp4Given = TRUE; break; case B4SOI_MOD_MINV: mod->B4SOIminv = value->rValue; mod->B4SOIminvGiven = TRUE; break; case B4SOI_MOD_LMINV: mod->B4SOIlminv = value->rValue; mod->B4SOIlminvGiven = TRUE; break; case B4SOI_MOD_WMINV: mod->B4SOIwminv = value->rValue; mod->B4SOIwminvGiven = TRUE; break; case B4SOI_MOD_PMINV: mod->B4SOIpminv = value->rValue; mod->B4SOIpminvGiven = TRUE; break; case B4SOI_MOD_FPROUT: mod->B4SOIfprout = value->rValue; mod->B4SOIfproutGiven = TRUE; break; case B4SOI_MOD_PDITS: mod->B4SOIpdits = value->rValue; mod->B4SOIpditsGiven = TRUE; break; case B4SOI_MOD_PDITSD: mod->B4SOIpditsd = value->rValue; mod->B4SOIpditsdGiven = TRUE; break; case B4SOI_MOD_PDITSL: mod->B4SOIpditsl = value->rValue; mod->B4SOIpditslGiven = TRUE; break; case B4SOI_MOD_LFPROUT: mod->B4SOIlfprout = value->rValue; mod->B4SOIlfproutGiven = TRUE; break; case B4SOI_MOD_LPDITS: mod->B4SOIlpdits = value->rValue; mod->B4SOIlpditsGiven = TRUE; break; case B4SOI_MOD_LPDITSD: mod->B4SOIlpditsd = value->rValue; mod->B4SOIlpditsdGiven = TRUE; break; case B4SOI_MOD_WFPROUT: mod->B4SOIwfprout = value->rValue; mod->B4SOIwfproutGiven = TRUE; break; case B4SOI_MOD_WPDITS: mod->B4SOIwpdits = value->rValue; mod->B4SOIwpditsGiven = TRUE; break; case B4SOI_MOD_WPDITSD: mod->B4SOIwpditsd = value->rValue; mod->B4SOIwpditsdGiven = TRUE; break; case B4SOI_MOD_PFPROUT: mod->B4SOIpfprout = value->rValue; mod->B4SOIpfproutGiven = TRUE; break; case B4SOI_MOD_PPDITS: mod->B4SOIppdits = value->rValue; mod->B4SOIppditsGiven = TRUE; break; case B4SOI_MOD_PPDITSD: mod->B4SOIppditsd = value->rValue; mod->B4SOIppditsdGiven = TRUE; break; /* v4.0 */ /* v4.0 stress effect */ case B4SOI_MOD_SAREF : mod->B4SOIsaref = value->rValue; mod->B4SOIsarefGiven = TRUE; break; case B4SOI_MOD_SBREF : mod->B4SOIsbref = value->rValue; mod->B4SOIsbrefGiven = TRUE; break; case B4SOI_MOD_WLOD : mod->B4SOIwlod = value->rValue; mod->B4SOIwlodGiven = TRUE; break; case B4SOI_MOD_KU0 : mod->B4SOIku0 = value->rValue; mod->B4SOIku0Given = TRUE; break; case B4SOI_MOD_KVSAT : mod->B4SOIkvsat = value->rValue; mod->B4SOIkvsatGiven = TRUE; break; case B4SOI_MOD_KVTH0 : mod->B4SOIkvth0 = value->rValue; mod->B4SOIkvth0Given = TRUE; break; case B4SOI_MOD_TKU0 : mod->B4SOItku0 = value->rValue; mod->B4SOItku0Given = TRUE; break; case B4SOI_MOD_LLODKU0 : mod->B4SOIllodku0 = value->rValue; mod->B4SOIllodku0Given = TRUE; break; case B4SOI_MOD_WLODKU0 : mod->B4SOIwlodku0 = value->rValue; mod->B4SOIwlodku0Given = TRUE; break; case B4SOI_MOD_LLODVTH : mod->B4SOIllodvth = value->rValue; mod->B4SOIllodvthGiven = TRUE; break; case B4SOI_MOD_WLODVTH : mod->B4SOIwlodvth = value->rValue; mod->B4SOIwlodvthGiven = TRUE; break; case B4SOI_MOD_LKU0 : mod->B4SOIlku0 = value->rValue; mod->B4SOIlku0Given = TRUE; break; case B4SOI_MOD_WKU0 : mod->B4SOIwku0 = value->rValue; mod->B4SOIwku0Given = TRUE; break; case B4SOI_MOD_PKU0 : mod->B4SOIpku0 = value->rValue; mod->B4SOIpku0Given = TRUE; break; case B4SOI_MOD_LKVTH0 : mod->B4SOIlkvth0 = value->rValue; mod->B4SOIlkvth0Given = TRUE; break; case B4SOI_MOD_WKVTH0 : mod->B4SOIwkvth0 = value->rValue; mod->B4SOIwkvth0Given = TRUE; break; case B4SOI_MOD_PKVTH0 : mod->B4SOIpkvth0 = value->rValue; mod->B4SOIpkvth0Given = TRUE; break; case B4SOI_MOD_STK2 : mod->B4SOIstk2 = value->rValue; mod->B4SOIstk2Given = TRUE; break; case B4SOI_MOD_LODK2 : mod->B4SOIlodk2 = value->rValue; mod->B4SOIlodk2Given = TRUE; break; /* Bug fix # 31 Jul 09*/ case B4SOI_MOD_STETA0 : mod->B4SOIsteta0 = value->rValue; mod->B4SOIsteta0Given = TRUE; break; case B4SOI_MOD_LODETA0 : mod->B4SOIlodeta0 = value->rValue; mod->B4SOIlodeta0Given = TRUE; break; /* v4.0 stress effect end */ /* v3.2 */ case B4SOI_MOD_FNOIMOD : mod->B4SOIfnoiMod = value->iValue; mod->B4SOIfnoiModGiven = TRUE; break; case B4SOI_MOD_TNOIMOD : mod->B4SOItnoiMod = value->iValue; mod->B4SOItnoiModGiven = TRUE; break; case B4SOI_MOD_TNOIA : mod->B4SOItnoia = value->rValue; mod->B4SOItnoiaGiven = TRUE; break; case B4SOI_MOD_TNOIB : mod->B4SOItnoib = value->rValue; mod->B4SOItnoibGiven = TRUE; break; case B4SOI_MOD_RNOIA : mod->B4SOIrnoia = value->rValue; mod->B4SOIrnoiaGiven = TRUE; break; case B4SOI_MOD_RNOIB : mod->B4SOIrnoib = value->rValue; mod->B4SOIrnoibGiven = TRUE; break; case B4SOI_MOD_NTNOI : mod->B4SOIntnoi = value->rValue; mod->B4SOIntnoiGiven = TRUE; break; /* v3.2 end */ /* v2.0 release */ case B4SOI_MOD_K1W1 : mod->B4SOIk1w1 = value->rValue; mod->B4SOIk1w1Given = TRUE; break; case B4SOI_MOD_K1W2 : mod->B4SOIk1w2 = value->rValue; mod->B4SOIk1w2Given = TRUE; break; case B4SOI_MOD_KETAS : mod->B4SOIketas = value->rValue; mod->B4SOIketasGiven = TRUE; break; case B4SOI_MOD_DWBC : mod->B4SOIdwbc = value->rValue; mod->B4SOIdwbcGiven = TRUE; break; case B4SOI_MOD_BETA0 : mod->B4SOIbeta0 = value->rValue; mod->B4SOIbeta0Given = TRUE; break; case B4SOI_MOD_BETA1 : mod->B4SOIbeta1 = value->rValue; mod->B4SOIbeta1Given = TRUE; break; case B4SOI_MOD_BETA2 : mod->B4SOIbeta2 = value->rValue; mod->B4SOIbeta2Given = TRUE; break; case B4SOI_MOD_VDSATII0 : mod->B4SOIvdsatii0 = value->rValue; mod->B4SOIvdsatii0Given = TRUE; break; case B4SOI_MOD_TII : mod->B4SOItii = value->rValue; mod->B4SOItiiGiven = TRUE; break; case B4SOI_MOD_TVBCI : mod->B4SOItvbci = value->rValue; mod->B4SOItvbciGiven = TRUE; break; case B4SOI_MOD_LII : mod->B4SOIlii = value->rValue; mod->B4SOIliiGiven = TRUE; break; case B4SOI_MOD_SII0 : mod->B4SOIsii0 = value->rValue; mod->B4SOIsii0Given = TRUE; break; case B4SOI_MOD_SII1 : mod->B4SOIsii1 = value->rValue; mod->B4SOIsii1Given = TRUE; break; case B4SOI_MOD_SII2 : mod->B4SOIsii2 = value->rValue; mod->B4SOIsii2Given = TRUE; break; case B4SOI_MOD_SIID : mod->B4SOIsiid = value->rValue; mod->B4SOIsiidGiven = TRUE; break; case B4SOI_MOD_FBJTII : mod->B4SOIfbjtii = value->rValue; mod->B4SOIfbjtiiGiven = TRUE; break; /*4.1 Iii model*/ case B4SOI_MOD_EBJTII : mod->B4SOIebjtii = value->rValue; mod->B4SOIebjtiiGiven = TRUE; break; case B4SOI_MOD_CBJTII : mod->B4SOIcbjtii = value->rValue; mod->B4SOIcbjtiiGiven = TRUE; break; case B4SOI_MOD_VBCI : mod->B4SOIvbci = value->rValue; mod->B4SOIvbciGiven = TRUE; break; case B4SOI_MOD_ABJTII : mod->B4SOIabjtii = value->rValue; mod->B4SOIabjtiiGiven = TRUE; break; case B4SOI_MOD_MBJTII : mod->B4SOImbjtii = value->rValue; mod->B4SOImbjtiiGiven = TRUE; break; case B4SOI_MOD_ESATII : mod->B4SOIesatii = value->rValue; mod->B4SOIesatiiGiven = TRUE; break; case B4SOI_MOD_NTUNS : /* v4.0 */ mod->B4SOIntun = value->rValue; mod->B4SOIntunGiven = TRUE; break; case B4SOI_MOD_NTUND : /* v4.0 */ mod->B4SOIntund = value->rValue; mod->B4SOIntundGiven = TRUE; break; case B4SOI_MOD_NRECF0S : /* v4.0 */ mod->B4SOInrecf0 = value->rValue; mod->B4SOInrecf0Given = TRUE; break; case B4SOI_MOD_NRECF0D : /* v4.0 */ mod->B4SOInrecf0d = value->rValue; mod->B4SOInrecf0dGiven = TRUE; break; case B4SOI_MOD_NRECR0S : /* v4.0 */ mod->B4SOInrecr0 = value->rValue; mod->B4SOInrecr0Given = TRUE; break; case B4SOI_MOD_NRECR0D : /* v4.0 */ mod->B4SOInrecr0d = value->rValue; mod->B4SOInrecr0dGiven = TRUE; break; case B4SOI_MOD_ISBJT : mod->B4SOIisbjt = value->rValue; mod->B4SOIisbjtGiven = TRUE; break; case B4SOI_MOD_IDBJT : /* v4.0 */ mod->B4SOIidbjt = value->rValue; mod->B4SOIidbjtGiven = TRUE; break; case B4SOI_MOD_ISDIF : mod->B4SOIisdif = value->rValue; mod->B4SOIisdifGiven = TRUE; break; case B4SOI_MOD_IDDIF : /* v4.0 */ mod->B4SOIiddif = value->rValue; mod->B4SOIiddifGiven = TRUE; break; case B4SOI_MOD_ISREC : mod->B4SOIisrec = value->rValue; mod->B4SOIisrecGiven = TRUE; break; case B4SOI_MOD_IDREC : /* v4.0 */ mod->B4SOIidrec = value->rValue; mod->B4SOIidrecGiven = TRUE; break; case B4SOI_MOD_ISTUN : mod->B4SOIistun = value->rValue; mod->B4SOIistunGiven = TRUE; break; case B4SOI_MOD_IDTUN : /* v4.0 */ mod->B4SOIidtun = value->rValue; mod->B4SOIidtunGiven = TRUE; break; case B4SOI_MOD_LN : mod->B4SOIln = value->rValue; mod->B4SOIlnGiven = TRUE; break; case B4SOI_MOD_VREC0S : /* v4.0 */ mod->B4SOIvrec0 = value->rValue; mod->B4SOIvrec0Given = TRUE; break; case B4SOI_MOD_VREC0D : /* v4.0 */ mod->B4SOIvrec0d = value->rValue; mod->B4SOIvrec0dGiven = TRUE; break; case B4SOI_MOD_VTUN0S : /* v4.0 */ mod->B4SOIvtun0 = value->rValue; mod->B4SOIvtun0Given = TRUE; break; case B4SOI_MOD_VTUN0D : /* v4.0 */ mod->B4SOIvtun0d = value->rValue; mod->B4SOIvtun0dGiven = TRUE; break; case B4SOI_MOD_NBJT : mod->B4SOInbjt = value->rValue; mod->B4SOInbjtGiven = TRUE; break; case B4SOI_MOD_LBJT0 : mod->B4SOIlbjt0 = value->rValue; mod->B4SOIlbjt0Given = TRUE; break; case B4SOI_MOD_LDIF0 : mod->B4SOIldif0 = value->rValue; mod->B4SOIldif0Given = TRUE; break; case B4SOI_MOD_VABJT : mod->B4SOIvabjt = value->rValue; mod->B4SOIvabjtGiven = TRUE; break; case B4SOI_MOD_AELY : mod->B4SOIaely = value->rValue; mod->B4SOIaelyGiven = TRUE; break; case B4SOI_MOD_AHLIS : /* v4.0 */ mod->B4SOIahli = value->rValue; mod->B4SOIahliGiven = TRUE; break; case B4SOI_MOD_AHLID : /* v4.0 */ mod->B4SOIahlid = value->rValue; mod->B4SOIahlidGiven = TRUE; break; case B4SOI_MOD_NDIF : mod->B4SOIndif = value->rValue; mod->B4SOIndifGiven = TRUE; break; case B4SOI_MOD_NTRECF : mod->B4SOIntrecf = value->rValue; mod->B4SOIntrecfGiven = TRUE; break; case B4SOI_MOD_NTRECR : mod->B4SOIntrecr = value->rValue; mod->B4SOIntrecrGiven = TRUE; break; case B4SOI_MOD_DLCB : mod->B4SOIdlcb = value->rValue; mod->B4SOIdlcbGiven = TRUE; break; case B4SOI_MOD_FBODY : mod->B4SOIfbody = value->rValue; mod->B4SOIfbodyGiven = TRUE; break; case B4SOI_MOD_TCJSWGS : mod->B4SOItcjswg = value->rValue; mod->B4SOItcjswgGiven = TRUE; break; case B4SOI_MOD_TPBSWGS : mod->B4SOItpbswg = value->rValue; mod->B4SOItpbswgGiven = TRUE; break; case B4SOI_MOD_TCJSWGD : mod->B4SOItcjswgd = value->rValue; mod->B4SOItcjswgdGiven = TRUE; break; case B4SOI_MOD_TPBSWGD : mod->B4SOItpbswgd = value->rValue; mod->B4SOItpbswgdGiven = TRUE; break; case B4SOI_MOD_ACDE : mod->B4SOIacde = value->rValue; mod->B4SOIacdeGiven = TRUE; break; case B4SOI_MOD_MOIN : mod->B4SOImoin = value->rValue; mod->B4SOImoinGiven = TRUE; break; case B4SOI_MOD_NOFF : mod->B4SOInoff = value->rValue; mod->B4SOInoffGiven = TRUE; break; /* v3.2 */ case B4SOI_MOD_DELVT : mod->B4SOIdelvt = value->rValue; mod->B4SOIdelvtGiven = TRUE; break; case B4SOI_MOD_KB1 : mod->B4SOIkb1 = value->rValue; mod->B4SOIkb1Given = TRUE; break; case B4SOI_MOD_DLBG : mod->B4SOIdlbg = value->rValue; mod->B4SOIdlbgGiven = TRUE; break; /* Added for binning - START */ /* Length Dependence */ /* v3.1 */ case B4SOI_MOD_LXJ : mod->B4SOIlxj = value->rValue; mod->B4SOIlxjGiven = TRUE; break; case B4SOI_MOD_LALPHAGB1 : mod->B4SOIlalphaGB1 = value->rValue; mod->B4SOIlalphaGB1Given = TRUE; break; case B4SOI_MOD_LALPHAGB2 : mod->B4SOIlalphaGB2 = value->rValue; mod->B4SOIlalphaGB2Given = TRUE; break; case B4SOI_MOD_LBETAGB1 : mod->B4SOIlbetaGB1 = value->rValue; mod->B4SOIlbetaGB1Given = TRUE; break; case B4SOI_MOD_LBETAGB2 : mod->B4SOIlbetaGB2 = value->rValue; mod->B4SOIlbetaGB2Given = TRUE; break; case B4SOI_MOD_LAIGBCP2 : mod->B4SOIlaigbcp2 = value->rValue; mod->B4SOIlaigbcp2Given = TRUE; break; case B4SOI_MOD_LBIGBCP2 : mod->B4SOIlbigbcp2 = value->rValue; mod->B4SOIlbigbcp2Given = TRUE; break; case B4SOI_MOD_LCIGBCP2 : mod->B4SOIlcigbcp2 = value->rValue; mod->B4SOIlcigbcp2Given = TRUE; break; case B4SOI_MOD_LNDIF : mod->B4SOIlndif = value->rValue; mod->B4SOIlndifGiven = TRUE; break; case B4SOI_MOD_LNTRECF : mod->B4SOIlntrecf = value->rValue; mod->B4SOIlntrecfGiven = TRUE; break; case B4SOI_MOD_LNTRECR : mod->B4SOIlntrecr = value->rValue; mod->B4SOIlntrecrGiven = TRUE; break; case B4SOI_MOD_LXBJT : mod->B4SOIlxbjt = value->rValue; mod->B4SOIlxbjtGiven = TRUE; break; case B4SOI_MOD_LXDIFS : mod->B4SOIlxdif = value->rValue; mod->B4SOIlxdifGiven = TRUE; break; case B4SOI_MOD_LXRECS : mod->B4SOIlxrec = value->rValue; mod->B4SOIlxrecGiven = TRUE; break; case B4SOI_MOD_LXTUNS : mod->B4SOIlxtun = value->rValue; mod->B4SOIlxtunGiven = TRUE; break; case B4SOI_MOD_LXDIFD : mod->B4SOIlxdifd = value->rValue; mod->B4SOIlxdifdGiven = TRUE; break; case B4SOI_MOD_LXRECD : mod->B4SOIlxrecd = value->rValue; mod->B4SOIlxrecdGiven = TRUE; break; case B4SOI_MOD_LXTUND : mod->B4SOIlxtund = value->rValue; mod->B4SOIlxtundGiven = TRUE; break; case B4SOI_MOD_LCGDL : mod->B4SOIlcgdl = value->rValue; mod->B4SOIlcgdlGiven = TRUE; break; case B4SOI_MOD_LCGSL : mod->B4SOIlcgsl = value->rValue; mod->B4SOIlcgslGiven = TRUE; break; case B4SOI_MOD_LCKAPPA : mod->B4SOIlckappa = value->rValue; mod->B4SOIlckappaGiven = TRUE; break; case B4SOI_MOD_LUTE : mod->B4SOIlute = value->rValue; mod->B4SOIluteGiven = TRUE; break; case B4SOI_MOD_LKT1 : mod->B4SOIlkt1 = value->rValue; mod->B4SOIlkt1Given = TRUE; break; case B4SOI_MOD_LKT2 : mod->B4SOIlkt2 = value->rValue; mod->B4SOIlkt2Given = TRUE; break; case B4SOI_MOD_LKT1L : mod->B4SOIlkt1l = value->rValue; mod->B4SOIlkt1lGiven = TRUE; break; case B4SOI_MOD_LUA1 : mod->B4SOIlua1 = value->rValue; mod->B4SOIlua1Given = TRUE; break; case B4SOI_MOD_LUB1 : mod->B4SOIlub1 = value->rValue; mod->B4SOIlub1Given = TRUE; break; case B4SOI_MOD_LUC1 : mod->B4SOIluc1 = value->rValue; mod->B4SOIluc1Given = TRUE; break; case B4SOI_MOD_LAT : mod->B4SOIlat = value->rValue; mod->B4SOIlatGiven = TRUE; break; case B4SOI_MOD_LPRT : mod->B4SOIlprt = value->rValue; mod->B4SOIlprtGiven = TRUE; break; /* v3.0 */ case B4SOI_MOD_LAIGC : mod->B4SOIlaigc = value->rValue; mod->B4SOIlaigcGiven = TRUE; break; case B4SOI_MOD_LBIGC : mod->B4SOIlbigc = value->rValue; mod->B4SOIlbigcGiven = TRUE; break; case B4SOI_MOD_LCIGC : mod->B4SOIlcigc = value->rValue; mod->B4SOIlcigcGiven = TRUE; break; case B4SOI_MOD_LAIGSD : mod->B4SOIlaigsd = value->rValue; mod->B4SOIlaigsdGiven = TRUE; break; case B4SOI_MOD_LBIGSD : mod->B4SOIlbigsd = value->rValue; mod->B4SOIlbigsdGiven = TRUE; break; case B4SOI_MOD_LCIGSD : mod->B4SOIlcigsd = value->rValue; mod->B4SOIlcigsdGiven = TRUE; break; case B4SOI_MOD_LNIGC : mod->B4SOIlnigc = value->rValue; mod->B4SOIlnigcGiven = TRUE; break; case B4SOI_MOD_LPIGCD : mod->B4SOIlpigcd = value->rValue; mod->B4SOIlpigcdGiven = TRUE; break; case B4SOI_MOD_LPOXEDGE : mod->B4SOIlpoxedge = value->rValue; mod->B4SOIlpoxedgeGiven = TRUE; break; case B4SOI_MOD_LNPEAK: mod->B4SOIlnpeak = value->rValue; mod->B4SOIlnpeakGiven = TRUE; break; case B4SOI_MOD_LNSUB: mod->B4SOIlnsub = value->rValue; mod->B4SOIlnsubGiven = TRUE; break; case B4SOI_MOD_LNGATE: mod->B4SOIlngate = value->rValue; mod->B4SOIlngateGiven = TRUE; break; case B4SOI_MOD_LNSD: mod->B4SOIlnsd = value->rValue; mod->B4SOIlnsdGiven = TRUE; break; case B4SOI_MOD_LVTH0: mod->B4SOIlvth0 = value->rValue; mod->B4SOIlvth0Given = TRUE; break; case B4SOI_MOD_LVFB: mod->B4SOIlvfb = value->rValue; mod->B4SOIlvfbGiven = TRUE; break; /* v4.1 */ case B4SOI_MOD_LK1: mod->B4SOIlk1 = value->rValue; mod->B4SOIlk1Given = TRUE; break; case B4SOI_MOD_LK1W1: mod->B4SOIlk1w1 = value->rValue; mod->B4SOIlk1w1Given = TRUE; break; case B4SOI_MOD_LK1W2: mod->B4SOIlk1w2 = value->rValue; mod->B4SOIlk1w2Given = TRUE; break; case B4SOI_MOD_LK2: mod->B4SOIlk2 = value->rValue; mod->B4SOIlk2Given = TRUE; break; case B4SOI_MOD_LK3: mod->B4SOIlk3 = value->rValue; mod->B4SOIlk3Given = TRUE; break; case B4SOI_MOD_LK3B: mod->B4SOIlk3b = value->rValue; mod->B4SOIlk3bGiven = TRUE; break; case B4SOI_MOD_LKB1 : mod->B4SOIlkb1 = value->rValue; mod->B4SOIlkb1Given = TRUE; break; case B4SOI_MOD_LW0: mod->B4SOIlw0 = value->rValue; mod->B4SOIlw0Given = TRUE; break; case B4SOI_MOD_LLPE0: mod->B4SOIllpe0 = value->rValue; mod->B4SOIllpe0Given = TRUE; break; case B4SOI_MOD_LLPEB: /* v4.0 for Vth */ mod->B4SOIllpeb = value->rValue; mod->B4SOIllpebGiven = TRUE; break; case B4SOI_MOD_LDVT0: mod->B4SOIldvt0 = value->rValue; mod->B4SOIldvt0Given = TRUE; break; case B4SOI_MOD_LDVT1: mod->B4SOIldvt1 = value->rValue; mod->B4SOIldvt1Given = TRUE; break; case B4SOI_MOD_LDVT2: mod->B4SOIldvt2 = value->rValue; mod->B4SOIldvt2Given = TRUE; break; case B4SOI_MOD_LDVT0W: mod->B4SOIldvt0w = value->rValue; mod->B4SOIldvt0wGiven = TRUE; break; case B4SOI_MOD_LDVT1W: mod->B4SOIldvt1w = value->rValue; mod->B4SOIldvt1wGiven = TRUE; break; case B4SOI_MOD_LDVT2W: mod->B4SOIldvt2w = value->rValue; mod->B4SOIldvt2wGiven = TRUE; break; case B4SOI_MOD_LU0 : mod->B4SOIlu0 = value->rValue; mod->B4SOIlu0Given = TRUE; break; case B4SOI_MOD_LUA: mod->B4SOIlua = value->rValue; mod->B4SOIluaGiven = TRUE; break; case B4SOI_MOD_LUB: mod->B4SOIlub = value->rValue; mod->B4SOIlubGiven = TRUE; break; case B4SOI_MOD_LUC: mod->B4SOIluc = value->rValue; mod->B4SOIlucGiven = TRUE; break; case B4SOI_MOD_LVSAT: mod->B4SOIlvsat = value->rValue; mod->B4SOIlvsatGiven = TRUE; break; case B4SOI_MOD_LA0: mod->B4SOIla0 = value->rValue; mod->B4SOIla0Given = TRUE; break; case B4SOI_MOD_LAGS: mod->B4SOIlags= value->rValue; mod->B4SOIlagsGiven = TRUE; break; case B4SOI_MOD_LB0 : mod->B4SOIlb0 = value->rValue; mod->B4SOIlb0Given = TRUE; break; case B4SOI_MOD_LB1 : mod->B4SOIlb1 = value->rValue; mod->B4SOIlb1Given = TRUE; break; case B4SOI_MOD_LKETA: mod->B4SOIlketa = value->rValue; mod->B4SOIlketaGiven = TRUE; break; case B4SOI_MOD_LKETAS: mod->B4SOIlketas = value->rValue; mod->B4SOIlketasGiven = TRUE; break; case B4SOI_MOD_LA1: mod->B4SOIla1 = value->rValue; mod->B4SOIla1Given = TRUE; break; case B4SOI_MOD_LA2: mod->B4SOIla2 = value->rValue; mod->B4SOIla2Given = TRUE; break; case B4SOI_MOD_LRDSW: mod->B4SOIlrdsw = value->rValue; mod->B4SOIlrdswGiven = TRUE; break; case B4SOI_MOD_LRSW: mod->B4SOIlrsw = value->rValue; mod->B4SOIlrswGiven = TRUE; break; case B4SOI_MOD_LRDW: mod->B4SOIlrdw = value->rValue; mod->B4SOIlrdwGiven = TRUE; break; case B4SOI_MOD_LPRWB: mod->B4SOIlprwb = value->rValue; mod->B4SOIlprwbGiven = TRUE; break; case B4SOI_MOD_LPRWG: mod->B4SOIlprwg = value->rValue; mod->B4SOIlprwgGiven = TRUE; break; case B4SOI_MOD_LWR : mod->B4SOIlwr = value->rValue; mod->B4SOIlwrGiven = TRUE; break; case B4SOI_MOD_LNFACTOR : mod->B4SOIlnfactor = value->rValue; mod->B4SOIlnfactorGiven = TRUE; break; case B4SOI_MOD_LDWG : mod->B4SOIldwg = value->rValue; mod->B4SOIldwgGiven = TRUE; break; case B4SOI_MOD_LDWB : mod->B4SOIldwb = value->rValue; mod->B4SOIldwbGiven = TRUE; break; case B4SOI_MOD_LVOFF: mod->B4SOIlvoff = value->rValue; mod->B4SOIlvoffGiven = TRUE; break; case B4SOI_MOD_LETA0: mod->B4SOIleta0 = value->rValue; mod->B4SOIleta0Given = TRUE; break; case B4SOI_MOD_LETAB: mod->B4SOIletab = value->rValue; mod->B4SOIletabGiven = TRUE; break; case B4SOI_MOD_LDSUB: mod->B4SOIldsub = value->rValue; mod->B4SOIldsubGiven = TRUE; break; case B4SOI_MOD_LCIT : mod->B4SOIlcit = value->rValue; mod->B4SOIlcitGiven = TRUE; break; case B4SOI_MOD_LCDSC : mod->B4SOIlcdsc = value->rValue; mod->B4SOIlcdscGiven = TRUE; break; case B4SOI_MOD_LCDSCB : mod->B4SOIlcdscb = value->rValue; mod->B4SOIlcdscbGiven = TRUE; break; case B4SOI_MOD_LCDSCD : mod->B4SOIlcdscd = value->rValue; mod->B4SOIlcdscdGiven = TRUE; break; case B4SOI_MOD_LPCLM: mod->B4SOIlpclm = value->rValue; mod->B4SOIlpclmGiven = TRUE; break; case B4SOI_MOD_LPDIBL1: mod->B4SOIlpdibl1 = value->rValue; mod->B4SOIlpdibl1Given = TRUE; break; case B4SOI_MOD_LPDIBL2: mod->B4SOIlpdibl2 = value->rValue; mod->B4SOIlpdibl2Given = TRUE; break; case B4SOI_MOD_LPDIBLB: mod->B4SOIlpdiblb = value->rValue; mod->B4SOIlpdiblbGiven = TRUE; break; case B4SOI_MOD_LDROUT: mod->B4SOIldrout = value->rValue; mod->B4SOIldroutGiven = TRUE; break; case B4SOI_MOD_LPVAG: mod->B4SOIlpvag = value->rValue; mod->B4SOIlpvagGiven = TRUE; break; case B4SOI_MOD_LDELTA : mod->B4SOIldelta = value->rValue; mod->B4SOIldeltaGiven = TRUE; break; case B4SOI_MOD_LALPHA0 : mod->B4SOIlalpha0 = value->rValue; mod->B4SOIlalpha0Given = TRUE; break; case B4SOI_MOD_LFBJTII : mod->B4SOIlfbjtii = value->rValue; mod->B4SOIlfbjtiiGiven = TRUE; break; /*4.1 Iii model*/ case B4SOI_MOD_LEBJTII : mod->B4SOIlebjtii = value->rValue; mod->B4SOIlebjtiiGiven = TRUE; break; case B4SOI_MOD_LCBJTII : mod->B4SOIlcbjtii = value->rValue; mod->B4SOIlcbjtiiGiven = TRUE; break; case B4SOI_MOD_LVBCI : mod->B4SOIlvbci = value->rValue; mod->B4SOIlvbciGiven = TRUE; break; case B4SOI_MOD_LABJTII : mod->B4SOIlabjtii = value->rValue; mod->B4SOIlabjtiiGiven = TRUE; break; case B4SOI_MOD_LMBJTII : mod->B4SOIlmbjtii = value->rValue; mod->B4SOIlmbjtiiGiven = TRUE; break; case B4SOI_MOD_LBETA0 : mod->B4SOIlbeta0 = value->rValue; mod->B4SOIlbeta0Given = TRUE; break; case B4SOI_MOD_LBETA1 : mod->B4SOIlbeta1 = value->rValue; mod->B4SOIlbeta1Given = TRUE; break; case B4SOI_MOD_LBETA2 : mod->B4SOIlbeta2 = value->rValue; mod->B4SOIlbeta2Given = TRUE; break; case B4SOI_MOD_LVDSATII0 : mod->B4SOIlvdsatii0 = value->rValue; mod->B4SOIlvdsatii0Given = TRUE; break; case B4SOI_MOD_LLII : mod->B4SOIllii = value->rValue; mod->B4SOIlliiGiven = TRUE; break; case B4SOI_MOD_LESATII : mod->B4SOIlesatii = value->rValue; mod->B4SOIlesatiiGiven = TRUE; break; case B4SOI_MOD_LSII0 : mod->B4SOIlsii0 = value->rValue; mod->B4SOIlsii0Given = TRUE; break; case B4SOI_MOD_LSII1 : mod->B4SOIlsii1 = value->rValue; mod->B4SOIlsii1Given = TRUE; break; case B4SOI_MOD_LSII2 : mod->B4SOIlsii2 = value->rValue; mod->B4SOIlsii2Given = TRUE; break; case B4SOI_MOD_LSIID : mod->B4SOIlsiid = value->rValue; mod->B4SOIlsiidGiven = TRUE; break; case B4SOI_MOD_LAGIDL : mod->B4SOIlagidl = value->rValue; mod->B4SOIlagidlGiven = TRUE; break; case B4SOI_MOD_LBGIDL : mod->B4SOIlbgidl = value->rValue; mod->B4SOIlbgidlGiven = TRUE; break; case B4SOI_MOD_LCGIDL : mod->B4SOIlcgidl = value->rValue; mod->B4SOIlcgidlGiven = TRUE; break; case B4SOI_MOD_LEGIDL : mod->B4SOIlegidl = value->rValue; mod->B4SOIlegidlGiven = TRUE; break; case B4SOI_MOD_LRGIDL : mod->B4SOIlrgidl = value->rValue; mod->B4SOIlrgidlGiven = TRUE; break; case B4SOI_MOD_LKGIDL : mod->B4SOIlkgidl = value->rValue; mod->B4SOIlkgidlGiven = TRUE; break; case B4SOI_MOD_LFGIDL : mod->B4SOIlfgidl = value->rValue; mod->B4SOIlfgidlGiven = TRUE; break; case B4SOI_MOD_LAGISL : mod->B4SOIlagisl = value->rValue; mod->B4SOIlagislGiven = TRUE; break; case B4SOI_MOD_LBGISL : mod->B4SOIlbgisl = value->rValue; mod->B4SOIlbgislGiven = TRUE; break; case B4SOI_MOD_LCGISL : mod->B4SOIlcgisl = value->rValue; mod->B4SOIlcgislGiven = TRUE; break; case B4SOI_MOD_LEGISL : mod->B4SOIlegisl = value->rValue; mod->B4SOIlegislGiven = TRUE; break; case B4SOI_MOD_LRGISL : mod->B4SOIlrgisl = value->rValue; mod->B4SOIlrgislGiven = TRUE; break; case B4SOI_MOD_LKGISL : mod->B4SOIlkgisl = value->rValue; mod->B4SOIlkgislGiven = TRUE; break; case B4SOI_MOD_LFGISL : mod->B4SOIlfgisl = value->rValue; mod->B4SOIlfgislGiven = TRUE; break; case B4SOI_MOD_LNTUNS : /* v4.0 */ mod->B4SOIlntun = value->rValue; mod->B4SOIlntunGiven = TRUE; break; case B4SOI_MOD_LNTUND : /* v4.0 */ mod->B4SOIlntund = value->rValue; mod->B4SOIlntundGiven = TRUE; break; case B4SOI_MOD_LNDIODES : /* v4.0 */ mod->B4SOIlndiode = value->rValue; mod->B4SOIlndiodeGiven = TRUE; break; case B4SOI_MOD_LNDIODED : /* v4.0 */ mod->B4SOIlndioded = value->rValue; mod->B4SOIlndiodedGiven = TRUE; break; case B4SOI_MOD_LNRECF0S : /* v4.0 */ mod->B4SOIlnrecf0 = value->rValue; mod->B4SOIlnrecf0Given = TRUE; break; case B4SOI_MOD_LNRECF0D : /* v4.0 */ mod->B4SOIlnrecf0d = value->rValue; mod->B4SOIlnrecf0dGiven = TRUE; break; case B4SOI_MOD_LNRECR0S : /* v4.0 */ mod->B4SOIlnrecr0 = value->rValue; mod->B4SOIlnrecr0Given = TRUE; break; case B4SOI_MOD_LNRECR0D : /* v4.0 */ mod->B4SOIlnrecr0d = value->rValue; mod->B4SOIlnrecr0dGiven = TRUE; break; case B4SOI_MOD_LISBJT : mod->B4SOIlisbjt = value->rValue; mod->B4SOIlisbjtGiven = TRUE; break; case B4SOI_MOD_LIDBJT : /* v4.0 */ mod->B4SOIlidbjt = value->rValue; mod->B4SOIlidbjtGiven = TRUE; break; case B4SOI_MOD_LISDIF : mod->B4SOIlisdif = value->rValue; mod->B4SOIlisdifGiven = TRUE; break; case B4SOI_MOD_LIDDIF : /* v4.0 */ mod->B4SOIliddif = value->rValue; mod->B4SOIliddifGiven = TRUE; break; case B4SOI_MOD_LISREC : mod->B4SOIlisrec = value->rValue; mod->B4SOIlisrecGiven = TRUE; break; case B4SOI_MOD_LIDREC : /* v4.0 */ mod->B4SOIlidrec = value->rValue; mod->B4SOIlidrecGiven = TRUE; break; case B4SOI_MOD_LISTUN : mod->B4SOIlistun = value->rValue; mod->B4SOIlistunGiven = TRUE; break; case B4SOI_MOD_LIDTUN : /* v4.0 */ mod->B4SOIlidtun = value->rValue; mod->B4SOIlidtunGiven = TRUE; break; case B4SOI_MOD_LVREC0S : /* v4.0 */ mod->B4SOIlvrec0 = value->rValue; mod->B4SOIlvrec0Given = TRUE; break; case B4SOI_MOD_LVREC0D : /* v4.0 */ mod->B4SOIlvrec0d = value->rValue; mod->B4SOIlvrec0dGiven = TRUE; break; case B4SOI_MOD_LVTUN0S : /* v4.0 */ mod->B4SOIlvtun0 = value->rValue; mod->B4SOIlvtun0Given = TRUE; break; case B4SOI_MOD_LVTUN0D : /* v4.0 */ mod->B4SOIlvtun0d = value->rValue; mod->B4SOIlvtun0dGiven = TRUE; break; case B4SOI_MOD_LNBJT : mod->B4SOIlnbjt = value->rValue; mod->B4SOIlnbjtGiven = TRUE; break; case B4SOI_MOD_LLBJT0 : mod->B4SOIllbjt0 = value->rValue; mod->B4SOIllbjt0Given = TRUE; break; case B4SOI_MOD_LVABJT : mod->B4SOIlvabjt = value->rValue; mod->B4SOIlvabjtGiven = TRUE; break; case B4SOI_MOD_LAELY : mod->B4SOIlaely = value->rValue; mod->B4SOIlaelyGiven = TRUE; break; case B4SOI_MOD_LAHLIS : /* v4.0 */ mod->B4SOIlahli = value->rValue; mod->B4SOIlahliGiven = TRUE; break; case B4SOI_MOD_LAHLID : /* v4.0 */ mod->B4SOIlahlid = value->rValue; mod->B4SOIlahlidGiven = TRUE; break; /* v3.1 for RF */ case B4SOI_MOD_LXRCRG1 : mod->B4SOIlxrcrg1 = value->rValue; mod->B4SOIlxrcrg1Given = TRUE; break; case B4SOI_MOD_LXRCRG2 : mod->B4SOIlxrcrg2 = value->rValue; mod->B4SOIlxrcrg2Given = TRUE; break; /* v3.1 for RF end */ /* CV Model */ case B4SOI_MOD_LVSDFB : mod->B4SOIlvsdfb = value->rValue; mod->B4SOIlvsdfbGiven = TRUE; break; case B4SOI_MOD_LVSDTH : mod->B4SOIlvsdth = value->rValue; mod->B4SOIlvsdthGiven = TRUE; break; case B4SOI_MOD_LDELVT : mod->B4SOIldelvt = value->rValue; mod->B4SOIldelvtGiven = TRUE; break; case B4SOI_MOD_LACDE : mod->B4SOIlacde = value->rValue; mod->B4SOIlacdeGiven = TRUE; break; case B4SOI_MOD_LMOIN : mod->B4SOIlmoin = value->rValue; mod->B4SOIlmoinGiven = TRUE; break; case B4SOI_MOD_LNOFF : mod->B4SOIlnoff = value->rValue; mod->B4SOIlnoffGiven = TRUE; break; /* v3.2 */ /* Width Dependence */ /* v3.1 */ case B4SOI_MOD_WXJ : mod->B4SOIwxj = value->rValue; mod->B4SOIwxjGiven = TRUE; break; case B4SOI_MOD_WALPHAGB1 : mod->B4SOIwalphaGB1 = value->rValue; mod->B4SOIwalphaGB1Given = TRUE; break; case B4SOI_MOD_WALPHAGB2 : mod->B4SOIwalphaGB2 = value->rValue; mod->B4SOIwalphaGB2Given = TRUE; break; case B4SOI_MOD_WBETAGB1 : mod->B4SOIwbetaGB1 = value->rValue; mod->B4SOIwbetaGB1Given = TRUE; break; case B4SOI_MOD_WBETAGB2 : mod->B4SOIwbetaGB2 = value->rValue; mod->B4SOIwbetaGB2Given = TRUE; break; case B4SOI_MOD_WAIGBCP2 : mod->B4SOIwaigbcp2 = value->rValue; mod->B4SOIwaigbcp2Given = TRUE; break; case B4SOI_MOD_WBIGBCP2 : mod->B4SOIwbigbcp2 = value->rValue; mod->B4SOIwbigbcp2Given = TRUE; break; case B4SOI_MOD_WCIGBCP2 : mod->B4SOIwcigbcp2 = value->rValue; mod->B4SOIwcigbcp2Given = TRUE; break; case B4SOI_MOD_WNDIF : mod->B4SOIwndif = value->rValue; mod->B4SOIwndifGiven = TRUE; break; case B4SOI_MOD_WNTRECF : mod->B4SOIwntrecf = value->rValue; mod->B4SOIwntrecfGiven = TRUE; break; case B4SOI_MOD_WNTRECR : mod->B4SOIwntrecr = value->rValue; mod->B4SOIwntrecrGiven = TRUE; break; case B4SOI_MOD_WXBJT : mod->B4SOIwxbjt = value->rValue; mod->B4SOIwxbjtGiven = TRUE; break; case B4SOI_MOD_WXDIFS : mod->B4SOIwxdif = value->rValue; mod->B4SOIwxdifGiven = TRUE; break; case B4SOI_MOD_WXRECS : mod->B4SOIwxrec = value->rValue; mod->B4SOIwxrecGiven = TRUE; break; case B4SOI_MOD_WXTUNS : mod->B4SOIwxtun = value->rValue; mod->B4SOIwxtunGiven = TRUE; break; case B4SOI_MOD_WXDIFD : mod->B4SOIwxdifd = value->rValue; mod->B4SOIwxdifdGiven = TRUE; break; case B4SOI_MOD_WXRECD : mod->B4SOIwxrecd = value->rValue; mod->B4SOIwxrecdGiven = TRUE; break; case B4SOI_MOD_WXTUND : mod->B4SOIwxtund = value->rValue; mod->B4SOIwxtundGiven = TRUE; break; case B4SOI_MOD_WCGDL : mod->B4SOIwcgdl = value->rValue; mod->B4SOIwcgdlGiven = TRUE; break; case B4SOI_MOD_WCGSL : mod->B4SOIwcgsl = value->rValue; mod->B4SOIwcgslGiven = TRUE; break; case B4SOI_MOD_WCKAPPA : mod->B4SOIwckappa = value->rValue; mod->B4SOIwckappaGiven = TRUE; break; case B4SOI_MOD_WUTE : mod->B4SOIwute = value->rValue; mod->B4SOIwuteGiven = TRUE; break; case B4SOI_MOD_WKT1 : mod->B4SOIwkt1 = value->rValue; mod->B4SOIwkt1Given = TRUE; break; case B4SOI_MOD_WKT2 : mod->B4SOIwkt2 = value->rValue; mod->B4SOIwkt2Given = TRUE; break; case B4SOI_MOD_WKT1L : mod->B4SOIwkt1l = value->rValue; mod->B4SOIwkt1lGiven = TRUE; break; case B4SOI_MOD_WUA1 : mod->B4SOIwua1 = value->rValue; mod->B4SOIwua1Given = TRUE; break; case B4SOI_MOD_WUB1 : mod->B4SOIwub1 = value->rValue; mod->B4SOIwub1Given = TRUE; break; case B4SOI_MOD_WUC1 : mod->B4SOIwuc1 = value->rValue; mod->B4SOIwuc1Given = TRUE; break; case B4SOI_MOD_WAT : mod->B4SOIwat = value->rValue; mod->B4SOIwatGiven = TRUE; break; case B4SOI_MOD_WPRT : mod->B4SOIwprt = value->rValue; mod->B4SOIwprtGiven = TRUE; break; /* v3.0 */ case B4SOI_MOD_WAIGC : mod->B4SOIwaigc = value->rValue; mod->B4SOIwaigcGiven = TRUE; break; case B4SOI_MOD_WBIGC : mod->B4SOIwbigc = value->rValue; mod->B4SOIwbigcGiven = TRUE; break; case B4SOI_MOD_WCIGC : mod->B4SOIwcigc = value->rValue; mod->B4SOIwcigcGiven = TRUE; break; case B4SOI_MOD_WAIGSD : mod->B4SOIwaigsd = value->rValue; mod->B4SOIwaigsdGiven = TRUE; break; case B4SOI_MOD_WBIGSD : mod->B4SOIwbigsd = value->rValue; mod->B4SOIwbigsdGiven = TRUE; break; case B4SOI_MOD_WCIGSD : mod->B4SOIwcigsd = value->rValue; mod->B4SOIwcigsdGiven = TRUE; break; case B4SOI_MOD_WNIGC : mod->B4SOIwnigc = value->rValue; mod->B4SOIwnigcGiven = TRUE; break; case B4SOI_MOD_WPIGCD : mod->B4SOIwpigcd = value->rValue; mod->B4SOIwpigcdGiven = TRUE; break; case B4SOI_MOD_WPOXEDGE : mod->B4SOIwpoxedge = value->rValue; mod->B4SOIwpoxedgeGiven = TRUE; break; case B4SOI_MOD_WNPEAK: mod->B4SOIwnpeak = value->rValue; mod->B4SOIwnpeakGiven = TRUE; break; case B4SOI_MOD_WNSUB: mod->B4SOIwnsub = value->rValue; mod->B4SOIwnsubGiven = TRUE; break; case B4SOI_MOD_WNGATE: mod->B4SOIwngate = value->rValue; mod->B4SOIwngateGiven = TRUE; break; case B4SOI_MOD_WNSD: mod->B4SOIwnsd = value->rValue; mod->B4SOIwnsdGiven = TRUE; break; case B4SOI_MOD_WVTH0: mod->B4SOIwvth0 = value->rValue; mod->B4SOIwvth0Given = TRUE; break; case B4SOI_MOD_WVFB: mod->B4SOIwvfb = value->rValue; mod->B4SOIwvfbGiven = TRUE; break; /* v4.1 */ case B4SOI_MOD_WK1: mod->B4SOIwk1 = value->rValue; mod->B4SOIwk1Given = TRUE; break; case B4SOI_MOD_WK1W1: mod->B4SOIwk1w1 = value->rValue; mod->B4SOIwk1w1Given = TRUE; break; case B4SOI_MOD_WK1W2: mod->B4SOIwk1w2 = value->rValue; mod->B4SOIwk1w2Given = TRUE; break; case B4SOI_MOD_WK2: mod->B4SOIwk2 = value->rValue; mod->B4SOIwk2Given = TRUE; break; case B4SOI_MOD_WK3: mod->B4SOIwk3 = value->rValue; mod->B4SOIwk3Given = TRUE; break; case B4SOI_MOD_WK3B: mod->B4SOIwk3b = value->rValue; mod->B4SOIwk3bGiven = TRUE; break; case B4SOI_MOD_WKB1 : mod->B4SOIwkb1 = value->rValue; mod->B4SOIwkb1Given = TRUE; break; case B4SOI_MOD_WW0: mod->B4SOIww0 = value->rValue; mod->B4SOIww0Given = TRUE; break; case B4SOI_MOD_WLPE0: mod->B4SOIwlpe0 = value->rValue; mod->B4SOIwlpe0Given = TRUE; break; case B4SOI_MOD_WLPEB: /* v4.0 for Vth */ mod->B4SOIwlpeb = value->rValue; mod->B4SOIwlpebGiven = TRUE; break; case B4SOI_MOD_WDVT0: mod->B4SOIwdvt0 = value->rValue; mod->B4SOIwdvt0Given = TRUE; break; case B4SOI_MOD_WDVT1: mod->B4SOIwdvt1 = value->rValue; mod->B4SOIwdvt1Given = TRUE; break; case B4SOI_MOD_WDVT2: mod->B4SOIwdvt2 = value->rValue; mod->B4SOIwdvt2Given = TRUE; break; case B4SOI_MOD_WDVT0W: mod->B4SOIwdvt0w = value->rValue; mod->B4SOIwdvt0wGiven = TRUE; break; case B4SOI_MOD_WDVT1W: mod->B4SOIwdvt1w = value->rValue; mod->B4SOIwdvt1wGiven = TRUE; break; case B4SOI_MOD_WDVT2W: mod->B4SOIwdvt2w = value->rValue; mod->B4SOIwdvt2wGiven = TRUE; break; case B4SOI_MOD_WU0 : mod->B4SOIwu0 = value->rValue; mod->B4SOIwu0Given = TRUE; break; case B4SOI_MOD_WUA: mod->B4SOIwua = value->rValue; mod->B4SOIwuaGiven = TRUE; break; case B4SOI_MOD_WUB: mod->B4SOIwub = value->rValue; mod->B4SOIwubGiven = TRUE; break; case B4SOI_MOD_WUC: mod->B4SOIwuc = value->rValue; mod->B4SOIwucGiven = TRUE; break; case B4SOI_MOD_WVSAT: mod->B4SOIwvsat = value->rValue; mod->B4SOIwvsatGiven = TRUE; break; case B4SOI_MOD_WA0: mod->B4SOIwa0 = value->rValue; mod->B4SOIwa0Given = TRUE; break; case B4SOI_MOD_WAGS: mod->B4SOIwags= value->rValue; mod->B4SOIwagsGiven = TRUE; break; case B4SOI_MOD_WB0 : mod->B4SOIwb0 = value->rValue; mod->B4SOIwb0Given = TRUE; break; case B4SOI_MOD_WB1 : mod->B4SOIwb1 = value->rValue; mod->B4SOIwb1Given = TRUE; break; case B4SOI_MOD_WKETA: mod->B4SOIwketa = value->rValue; mod->B4SOIwketaGiven = TRUE; break; case B4SOI_MOD_WKETAS: mod->B4SOIwketas = value->rValue; mod->B4SOIwketasGiven = TRUE; break; case B4SOI_MOD_WA1: mod->B4SOIwa1 = value->rValue; mod->B4SOIwa1Given = TRUE; break; case B4SOI_MOD_WA2: mod->B4SOIwa2 = value->rValue; mod->B4SOIwa2Given = TRUE; break; case B4SOI_MOD_WRDSW: mod->B4SOIwrdsw = value->rValue; mod->B4SOIwrdswGiven = TRUE; break; case B4SOI_MOD_WRSW: mod->B4SOIwrsw = value->rValue; mod->B4SOIwrswGiven = TRUE; break; case B4SOI_MOD_WRDW: mod->B4SOIwrdw = value->rValue; mod->B4SOIwrdwGiven = TRUE; break; case B4SOI_MOD_WPRWB: mod->B4SOIwprwb = value->rValue; mod->B4SOIwprwbGiven = TRUE; break; case B4SOI_MOD_WPRWG: mod->B4SOIwprwg = value->rValue; mod->B4SOIwprwgGiven = TRUE; break; case B4SOI_MOD_WWR : mod->B4SOIwwr = value->rValue; mod->B4SOIwwrGiven = TRUE; break; case B4SOI_MOD_WNFACTOR : mod->B4SOIwnfactor = value->rValue; mod->B4SOIwnfactorGiven = TRUE; break; case B4SOI_MOD_WDWG : mod->B4SOIwdwg = value->rValue; mod->B4SOIwdwgGiven = TRUE; break; case B4SOI_MOD_WDWB : mod->B4SOIwdwb = value->rValue; mod->B4SOIwdwbGiven = TRUE; break; case B4SOI_MOD_WVOFF: mod->B4SOIwvoff = value->rValue; mod->B4SOIwvoffGiven = TRUE; break; case B4SOI_MOD_WETA0: mod->B4SOIweta0 = value->rValue; mod->B4SOIweta0Given = TRUE; break; case B4SOI_MOD_WETAB: mod->B4SOIwetab = value->rValue; mod->B4SOIwetabGiven = TRUE; break; case B4SOI_MOD_WDSUB: mod->B4SOIwdsub = value->rValue; mod->B4SOIwdsubGiven = TRUE; break; case B4SOI_MOD_WCIT : mod->B4SOIwcit = value->rValue; mod->B4SOIwcitGiven = TRUE; break; case B4SOI_MOD_WCDSC : mod->B4SOIwcdsc = value->rValue; mod->B4SOIwcdscGiven = TRUE; break; case B4SOI_MOD_WCDSCB : mod->B4SOIwcdscb = value->rValue; mod->B4SOIwcdscbGiven = TRUE; break; case B4SOI_MOD_WCDSCD : mod->B4SOIwcdscd = value->rValue; mod->B4SOIwcdscdGiven = TRUE; break; case B4SOI_MOD_WPCLM: mod->B4SOIwpclm = value->rValue; mod->B4SOIwpclmGiven = TRUE; break; case B4SOI_MOD_WPDIBL1: mod->B4SOIwpdibl1 = value->rValue; mod->B4SOIwpdibl1Given = TRUE; break; case B4SOI_MOD_WPDIBL2: mod->B4SOIwpdibl2 = value->rValue; mod->B4SOIwpdibl2Given = TRUE; break; case B4SOI_MOD_WPDIBLB: mod->B4SOIwpdiblb = value->rValue; mod->B4SOIwpdiblbGiven = TRUE; break; case B4SOI_MOD_WDROUT: mod->B4SOIwdrout = value->rValue; mod->B4SOIwdroutGiven = TRUE; break; case B4SOI_MOD_WPVAG: mod->B4SOIwpvag = value->rValue; mod->B4SOIwpvagGiven = TRUE; break; case B4SOI_MOD_WDELTA : mod->B4SOIwdelta = value->rValue; mod->B4SOIwdeltaGiven = TRUE; break; case B4SOI_MOD_WALPHA0 : mod->B4SOIwalpha0 = value->rValue; mod->B4SOIwalpha0Given = TRUE; break; case B4SOI_MOD_WFBJTII : mod->B4SOIwfbjtii = value->rValue; mod->B4SOIwfbjtiiGiven = TRUE; break; /*4.1 Iii model*/ case B4SOI_MOD_WEBJTII : mod->B4SOIwebjtii = value->rValue; mod->B4SOIwebjtiiGiven = TRUE; break; case B4SOI_MOD_WCBJTII : mod->B4SOIwcbjtii = value->rValue; mod->B4SOIwcbjtiiGiven = TRUE; break; case B4SOI_MOD_WVBCI : mod->B4SOIwvbci = value->rValue; mod->B4SOIwvbciGiven = TRUE; break; case B4SOI_MOD_WABJTII : mod->B4SOIwabjtii = value->rValue; mod->B4SOIwabjtiiGiven = TRUE; break; case B4SOI_MOD_WMBJTII : mod->B4SOIwmbjtii = value->rValue; mod->B4SOIwmbjtiiGiven = TRUE; break; case B4SOI_MOD_WBETA0 : mod->B4SOIwbeta0 = value->rValue; mod->B4SOIwbeta0Given = TRUE; break; case B4SOI_MOD_WBETA1 : mod->B4SOIwbeta1 = value->rValue; mod->B4SOIwbeta1Given = TRUE; break; case B4SOI_MOD_WBETA2 : mod->B4SOIwbeta2 = value->rValue; mod->B4SOIwbeta2Given = TRUE; break; case B4SOI_MOD_WVDSATII0 : mod->B4SOIwvdsatii0 = value->rValue; mod->B4SOIwvdsatii0Given = TRUE; break; case B4SOI_MOD_WLII : mod->B4SOIwlii = value->rValue; mod->B4SOIwliiGiven = TRUE; break; case B4SOI_MOD_WESATII : mod->B4SOIwesatii = value->rValue; mod->B4SOIwesatiiGiven = TRUE; break; case B4SOI_MOD_WSII0 : mod->B4SOIwsii0 = value->rValue; mod->B4SOIwsii0Given = TRUE; break; case B4SOI_MOD_WSII1 : mod->B4SOIwsii1 = value->rValue; mod->B4SOIwsii1Given = TRUE; break; case B4SOI_MOD_WSII2 : mod->B4SOIwsii2 = value->rValue; mod->B4SOIwsii2Given = TRUE; break; case B4SOI_MOD_WSIID : mod->B4SOIwsiid = value->rValue; mod->B4SOIwsiidGiven = TRUE; break; case B4SOI_MOD_WAGIDL : mod->B4SOIwagidl = value->rValue; mod->B4SOIwagidlGiven = TRUE; break; case B4SOI_MOD_WBGIDL : mod->B4SOIwbgidl = value->rValue; mod->B4SOIwbgidlGiven = TRUE; break; case B4SOI_MOD_WCGIDL : mod->B4SOIwcgidl = value->rValue; mod->B4SOIwcgidlGiven = TRUE; break; case B4SOI_MOD_WEGIDL : mod->B4SOIwegidl = value->rValue; mod->B4SOIwegidlGiven = TRUE; break; case B4SOI_MOD_WRGIDL : mod->B4SOIwrgidl = value->rValue; mod->B4SOIwrgidlGiven = TRUE; break; case B4SOI_MOD_WKGIDL : mod->B4SOIwkgidl = value->rValue; mod->B4SOIwkgidlGiven = TRUE; break; case B4SOI_MOD_WFGIDL : mod->B4SOIwfgidl = value->rValue; mod->B4SOIwfgidlGiven = TRUE; break; case B4SOI_MOD_WAGISL : mod->B4SOIwagisl = value->rValue; mod->B4SOIwagislGiven = TRUE; break; case B4SOI_MOD_WBGISL : mod->B4SOIwbgisl = value->rValue; mod->B4SOIwbgislGiven = TRUE; break; case B4SOI_MOD_WCGISL : mod->B4SOIwcgisl = value->rValue; mod->B4SOIwcgislGiven = TRUE; break; case B4SOI_MOD_WEGISL : mod->B4SOIwegisl = value->rValue; mod->B4SOIwegislGiven = TRUE; break; case B4SOI_MOD_WRGISL : mod->B4SOIwrgisl = value->rValue; mod->B4SOIwrgislGiven = TRUE; break; case B4SOI_MOD_WKGISL : mod->B4SOIwkgisl = value->rValue; mod->B4SOIwkgislGiven = TRUE; break; case B4SOI_MOD_WFGISL : mod->B4SOIwfgisl = value->rValue; mod->B4SOIwfgislGiven = TRUE; break; case B4SOI_MOD_WNTUNS : /* v4.0 */ mod->B4SOIwntun = value->rValue; mod->B4SOIwntunGiven = TRUE; break; case B4SOI_MOD_WNTUND : /* v4.0 */ mod->B4SOIwntund = value->rValue; mod->B4SOIwntundGiven = TRUE; break; case B4SOI_MOD_WNDIODES : /* v4.0 */ mod->B4SOIwndiode = value->rValue; mod->B4SOIwndiodeGiven = TRUE; break; case B4SOI_MOD_WNDIODED : /* v4.0 */ mod->B4SOIwndioded = value->rValue; mod->B4SOIwndiodedGiven = TRUE; break; case B4SOI_MOD_WNRECF0S : /* v4.0 */ mod->B4SOIwnrecf0 = value->rValue; mod->B4SOIwnrecf0Given = TRUE; break; case B4SOI_MOD_WNRECF0D : /* v4.0 */ mod->B4SOIwnrecf0d = value->rValue; mod->B4SOIwnrecf0dGiven = TRUE; break; case B4SOI_MOD_WNRECR0S : /* v4.0 */ mod->B4SOIwnrecr0 = value->rValue; mod->B4SOIwnrecr0Given = TRUE; break; case B4SOI_MOD_WNRECR0D : /* v4.0 */ mod->B4SOIwnrecr0d = value->rValue; mod->B4SOIwnrecr0dGiven = TRUE; break; case B4SOI_MOD_WISBJT : mod->B4SOIwisbjt = value->rValue; mod->B4SOIwisbjtGiven = TRUE; break; case B4SOI_MOD_WIDBJT : /* v4.0 */ mod->B4SOIwidbjt = value->rValue; mod->B4SOIwidbjtGiven = TRUE; break; case B4SOI_MOD_WISDIF : mod->B4SOIwisdif = value->rValue; mod->B4SOIwisdifGiven = TRUE; break; case B4SOI_MOD_WIDDIF : /* v4.0 */ mod->B4SOIwiddif = value->rValue; mod->B4SOIwiddifGiven = TRUE; break; case B4SOI_MOD_WISREC : mod->B4SOIwisrec = value->rValue; mod->B4SOIwisrecGiven = TRUE; break; case B4SOI_MOD_WIDREC : /* v4.0 */ mod->B4SOIwidrec = value->rValue; mod->B4SOIwidrecGiven = TRUE; break; case B4SOI_MOD_WISTUN : mod->B4SOIwistun = value->rValue; mod->B4SOIwistunGiven = TRUE; break; case B4SOI_MOD_WIDTUN : /* v4.0 */ mod->B4SOIwidtun = value->rValue; mod->B4SOIwidtunGiven = TRUE; break; case B4SOI_MOD_WVREC0S : /* v4.0 */ mod->B4SOIwvrec0 = value->rValue; mod->B4SOIwvrec0Given = TRUE; break; case B4SOI_MOD_WVREC0D : /* v4.0 */ mod->B4SOIwvrec0d = value->rValue; mod->B4SOIwvrec0dGiven = TRUE; break; case B4SOI_MOD_WVTUN0S : /* v4.0 */ mod->B4SOIwvtun0 = value->rValue; mod->B4SOIwvtun0Given = TRUE; break; case B4SOI_MOD_WVTUN0D : /* v4.0 */ mod->B4SOIwvtun0d = value->rValue; mod->B4SOIwvtun0dGiven = TRUE; break; case B4SOI_MOD_WNBJT : mod->B4SOIwnbjt = value->rValue; mod->B4SOIwnbjtGiven = TRUE; break; case B4SOI_MOD_WLBJT0 : mod->B4SOIwlbjt0 = value->rValue; mod->B4SOIwlbjt0Given = TRUE; break; case B4SOI_MOD_WVABJT : mod->B4SOIwvabjt = value->rValue; mod->B4SOIwvabjtGiven = TRUE; break; case B4SOI_MOD_WAELY : mod->B4SOIwaely = value->rValue; mod->B4SOIwaelyGiven = TRUE; break; case B4SOI_MOD_WAHLIS : /* v4.0 */ mod->B4SOIwahli = value->rValue; mod->B4SOIwahliGiven = TRUE; break; case B4SOI_MOD_WAHLID : /* v4.0 */ mod->B4SOIwahlid = value->rValue; mod->B4SOIwahlidGiven = TRUE; break; /* v3.1 for RF */ case B4SOI_MOD_WXRCRG1 : mod->B4SOIwxrcrg1 = value->rValue; mod->B4SOIwxrcrg1Given = TRUE; break; case B4SOI_MOD_WXRCRG2 : mod->B4SOIwxrcrg2 = value->rValue; mod->B4SOIwxrcrg2Given = TRUE; break; /* v3.1 for RF end */ /* CV Model */ case B4SOI_MOD_WVSDFB : mod->B4SOIwvsdfb = value->rValue; mod->B4SOIwvsdfbGiven = TRUE; break; case B4SOI_MOD_WVSDTH : mod->B4SOIwvsdth = value->rValue; mod->B4SOIwvsdthGiven = TRUE; break; case B4SOI_MOD_WDELVT : mod->B4SOIwdelvt = value->rValue; mod->B4SOIwdelvtGiven = TRUE; break; case B4SOI_MOD_WACDE : mod->B4SOIwacde = value->rValue; mod->B4SOIwacdeGiven = TRUE; break; case B4SOI_MOD_WMOIN : mod->B4SOIwmoin = value->rValue; mod->B4SOIwmoinGiven = TRUE; break; case B4SOI_MOD_WNOFF : mod->B4SOIwnoff = value->rValue; mod->B4SOIwnoffGiven = TRUE; break; /* v3.2 */ /* Cross-term Dependence */ /* v3.1 */ case B4SOI_MOD_PXJ : mod->B4SOIpxj = value->rValue; mod->B4SOIpxjGiven = TRUE; break; case B4SOI_MOD_PALPHAGB1 : mod->B4SOIpalphaGB1 = value->rValue; mod->B4SOIpalphaGB1Given = TRUE; break; case B4SOI_MOD_PALPHAGB2 : mod->B4SOIpalphaGB2 = value->rValue; mod->B4SOIpalphaGB2Given = TRUE; break; case B4SOI_MOD_PBETAGB1 : mod->B4SOIpbetaGB1 = value->rValue; mod->B4SOIpbetaGB1Given = TRUE; break; case B4SOI_MOD_PBETAGB2 : mod->B4SOIpbetaGB2 = value->rValue; mod->B4SOIpbetaGB2Given = TRUE; break; case B4SOI_MOD_PAIGBCP2 : mod->B4SOIpaigbcp2 = value->rValue; mod->B4SOIpaigbcp2Given = TRUE; break; case B4SOI_MOD_PBIGBCP2 : mod->B4SOIpbigbcp2 = value->rValue; mod->B4SOIpbigbcp2Given = TRUE; break; case B4SOI_MOD_PCIGBCP2 : mod->B4SOIpcigbcp2 = value->rValue; mod->B4SOIpcigbcp2Given = TRUE; break; case B4SOI_MOD_PNDIF : mod->B4SOIpndif = value->rValue; mod->B4SOIpndifGiven = TRUE; break; case B4SOI_MOD_PNTRECF : mod->B4SOIpntrecf = value->rValue; mod->B4SOIpntrecfGiven = TRUE; break; case B4SOI_MOD_PNTRECR : mod->B4SOIpntrecr = value->rValue; mod->B4SOIpntrecrGiven = TRUE; break; case B4SOI_MOD_PXBJT : mod->B4SOIpxbjt = value->rValue; mod->B4SOIpxbjtGiven = TRUE; break; case B4SOI_MOD_PXDIFS : mod->B4SOIpxdif = value->rValue; mod->B4SOIpxdifGiven = TRUE; break; case B4SOI_MOD_PXRECS : mod->B4SOIpxrec = value->rValue; mod->B4SOIpxrecGiven = TRUE; break; case B4SOI_MOD_PXTUNS : mod->B4SOIpxtun = value->rValue; mod->B4SOIpxtunGiven = TRUE; break; case B4SOI_MOD_PXDIFD : mod->B4SOIpxdifd = value->rValue; mod->B4SOIpxdifdGiven = TRUE; break; case B4SOI_MOD_PXRECD : mod->B4SOIpxrecd = value->rValue; mod->B4SOIpxrecdGiven = TRUE; break; case B4SOI_MOD_PXTUND : mod->B4SOIpxtund = value->rValue; mod->B4SOIpxtundGiven = TRUE; break; case B4SOI_MOD_PCGDL : mod->B4SOIpcgdl = value->rValue; mod->B4SOIpcgdlGiven = TRUE; break; case B4SOI_MOD_PCGSL : mod->B4SOIpcgsl = value->rValue; mod->B4SOIpcgslGiven = TRUE; break; case B4SOI_MOD_PCKAPPA : mod->B4SOIpckappa = value->rValue; mod->B4SOIpckappaGiven = TRUE; break; case B4SOI_MOD_PUTE : mod->B4SOIpute = value->rValue; mod->B4SOIputeGiven = TRUE; break; case B4SOI_MOD_PKT1 : mod->B4SOIpkt1 = value->rValue; mod->B4SOIpkt1Given = TRUE; break; case B4SOI_MOD_PKT2 : mod->B4SOIpkt2 = value->rValue; mod->B4SOIpkt2Given = TRUE; break; case B4SOI_MOD_PKT1L : mod->B4SOIpkt1l = value->rValue; mod->B4SOIpkt1lGiven = TRUE; break; case B4SOI_MOD_PUA1 : mod->B4SOIpua1 = value->rValue; mod->B4SOIpua1Given = TRUE; break; case B4SOI_MOD_PUB1 : mod->B4SOIpub1 = value->rValue; mod->B4SOIpub1Given = TRUE; break; case B4SOI_MOD_PUC1 : mod->B4SOIpuc1 = value->rValue; mod->B4SOIpuc1Given = TRUE; break; case B4SOI_MOD_PAT : mod->B4SOIpat = value->rValue; mod->B4SOIpatGiven = TRUE; break; case B4SOI_MOD_PPRT : mod->B4SOIpprt = value->rValue; mod->B4SOIpprtGiven = TRUE; break; /* v3.0 */ case B4SOI_MOD_PAIGC : mod->B4SOIpaigc = value->rValue; mod->B4SOIpaigcGiven = TRUE; break; case B4SOI_MOD_PBIGC : mod->B4SOIpbigc = value->rValue; mod->B4SOIpbigcGiven = TRUE; break; case B4SOI_MOD_PCIGC : mod->B4SOIpcigc = value->rValue; mod->B4SOIpcigcGiven = TRUE; break; case B4SOI_MOD_PAIGSD : mod->B4SOIpaigsd = value->rValue; mod->B4SOIpaigsdGiven = TRUE; break; case B4SOI_MOD_PBIGSD : mod->B4SOIpbigsd = value->rValue; mod->B4SOIpbigsdGiven = TRUE; break; case B4SOI_MOD_PCIGSD : mod->B4SOIpcigsd = value->rValue; mod->B4SOIpcigsdGiven = TRUE; break; case B4SOI_MOD_PNIGC : mod->B4SOIpnigc = value->rValue; mod->B4SOIpnigcGiven = TRUE; break; case B4SOI_MOD_PPIGCD : mod->B4SOIppigcd = value->rValue; mod->B4SOIppigcdGiven = TRUE; break; case B4SOI_MOD_PPOXEDGE : mod->B4SOIppoxedge = value->rValue; mod->B4SOIppoxedgeGiven = TRUE; break; case B4SOI_MOD_PNPEAK: mod->B4SOIpnpeak = value->rValue; mod->B4SOIpnpeakGiven = TRUE; break; case B4SOI_MOD_PNSUB: mod->B4SOIpnsub = value->rValue; mod->B4SOIpnsubGiven = TRUE; break; case B4SOI_MOD_PNGATE: mod->B4SOIpngate = value->rValue; mod->B4SOIpngateGiven = TRUE; break; case B4SOI_MOD_PNSD: mod->B4SOIpnsd = value->rValue; mod->B4SOIpnsdGiven = TRUE; break; case B4SOI_MOD_PVTH0: mod->B4SOIpvth0 = value->rValue; mod->B4SOIpvth0Given = TRUE; break; case B4SOI_MOD_PVFB: mod->B4SOIpvfb = value->rValue; mod->B4SOIpvfbGiven = TRUE; break; /* v4.1 */ case B4SOI_MOD_PK1: mod->B4SOIpk1 = value->rValue; mod->B4SOIpk1Given = TRUE; break; case B4SOI_MOD_PK1W1: mod->B4SOIpk1w1 = value->rValue; mod->B4SOIpk1w1Given = TRUE; break; case B4SOI_MOD_PK1W2: mod->B4SOIpk1w2 = value->rValue; mod->B4SOIpk1w2Given = TRUE; break; case B4SOI_MOD_PK2: mod->B4SOIpk2 = value->rValue; mod->B4SOIpk2Given = TRUE; break; case B4SOI_MOD_PK3: mod->B4SOIpk3 = value->rValue; mod->B4SOIpk3Given = TRUE; break; case B4SOI_MOD_PK3B: mod->B4SOIpk3b = value->rValue; mod->B4SOIpk3bGiven = TRUE; break; case B4SOI_MOD_PKB1 : mod->B4SOIpkb1 = value->rValue; mod->B4SOIpkb1Given = TRUE; break; case B4SOI_MOD_PW0: mod->B4SOIpw0 = value->rValue; mod->B4SOIpw0Given = TRUE; break; case B4SOI_MOD_PLPE0: mod->B4SOIplpe0 = value->rValue; mod->B4SOIplpe0Given = TRUE; break; case B4SOI_MOD_PLPEB: /* v4.0 for Vth */ mod->B4SOIplpeb = value->rValue; mod->B4SOIplpebGiven = TRUE; break; case B4SOI_MOD_PDVT0: mod->B4SOIpdvt0 = value->rValue; mod->B4SOIpdvt0Given = TRUE; break; case B4SOI_MOD_PDVT1: mod->B4SOIpdvt1 = value->rValue; mod->B4SOIpdvt1Given = TRUE; break; case B4SOI_MOD_PDVT2: mod->B4SOIpdvt2 = value->rValue; mod->B4SOIpdvt2Given = TRUE; break; case B4SOI_MOD_PDVT0W: mod->B4SOIpdvt0w = value->rValue; mod->B4SOIpdvt0wGiven = TRUE; break; case B4SOI_MOD_PDVT1W: mod->B4SOIpdvt1w = value->rValue; mod->B4SOIpdvt1wGiven = TRUE; break; case B4SOI_MOD_PDVT2W: mod->B4SOIpdvt2w = value->rValue; mod->B4SOIpdvt2wGiven = TRUE; break; case B4SOI_MOD_PU0 : mod->B4SOIpu0 = value->rValue; mod->B4SOIpu0Given = TRUE; break; case B4SOI_MOD_PUA: mod->B4SOIpua = value->rValue; mod->B4SOIpuaGiven = TRUE; break; case B4SOI_MOD_PUB: mod->B4SOIpub = value->rValue; mod->B4SOIpubGiven = TRUE; break; case B4SOI_MOD_PUC: mod->B4SOIpuc = value->rValue; mod->B4SOIpucGiven = TRUE; break; case B4SOI_MOD_PVSAT: mod->B4SOIpvsat = value->rValue; mod->B4SOIpvsatGiven = TRUE; break; case B4SOI_MOD_PA0: mod->B4SOIpa0 = value->rValue; mod->B4SOIpa0Given = TRUE; break; case B4SOI_MOD_PAGS: mod->B4SOIpags= value->rValue; mod->B4SOIpagsGiven = TRUE; break; case B4SOI_MOD_PB0 : mod->B4SOIpb0 = value->rValue; mod->B4SOIpb0Given = TRUE; break; case B4SOI_MOD_PB1 : mod->B4SOIpb1 = value->rValue; mod->B4SOIpb1Given = TRUE; break; case B4SOI_MOD_PKETA: mod->B4SOIpketa = value->rValue; mod->B4SOIpketaGiven = TRUE; break; case B4SOI_MOD_PKETAS: mod->B4SOIpketas = value->rValue; mod->B4SOIpketasGiven = TRUE; break; case B4SOI_MOD_PA1: mod->B4SOIpa1 = value->rValue; mod->B4SOIpa1Given = TRUE; break; case B4SOI_MOD_PA2: mod->B4SOIpa2 = value->rValue; mod->B4SOIpa2Given = TRUE; break; case B4SOI_MOD_PRDSW: mod->B4SOIprdsw = value->rValue; mod->B4SOIprdswGiven = TRUE; break; case B4SOI_MOD_PRSW: mod->B4SOIprsw = value->rValue; mod->B4SOIprswGiven = TRUE; break; case B4SOI_MOD_PRDW: mod->B4SOIprdw = value->rValue; mod->B4SOIprdwGiven = TRUE; break; case B4SOI_MOD_PPRWB: mod->B4SOIpprwb = value->rValue; mod->B4SOIpprwbGiven = TRUE; break; case B4SOI_MOD_PPRWG: mod->B4SOIpprwg = value->rValue; mod->B4SOIpprwgGiven = TRUE; break; case B4SOI_MOD_PWR : mod->B4SOIpwr = value->rValue; mod->B4SOIpwrGiven = TRUE; break; case B4SOI_MOD_PNFACTOR : mod->B4SOIpnfactor = value->rValue; mod->B4SOIpnfactorGiven = TRUE; break; case B4SOI_MOD_PDWG : mod->B4SOIpdwg = value->rValue; mod->B4SOIpdwgGiven = TRUE; break; case B4SOI_MOD_PDWB : mod->B4SOIpdwb = value->rValue; mod->B4SOIpdwbGiven = TRUE; break; case B4SOI_MOD_PVOFF: mod->B4SOIpvoff = value->rValue; mod->B4SOIpvoffGiven = TRUE; break; case B4SOI_MOD_PETA0: mod->B4SOIpeta0 = value->rValue; mod->B4SOIpeta0Given = TRUE; break; case B4SOI_MOD_PETAB: mod->B4SOIpetab = value->rValue; mod->B4SOIpetabGiven = TRUE; break; case B4SOI_MOD_PDSUB: mod->B4SOIpdsub = value->rValue; mod->B4SOIpdsubGiven = TRUE; break; case B4SOI_MOD_PCIT : mod->B4SOIpcit = value->rValue; mod->B4SOIpcitGiven = TRUE; break; case B4SOI_MOD_PCDSC : mod->B4SOIpcdsc = value->rValue; mod->B4SOIpcdscGiven = TRUE; break; case B4SOI_MOD_PCDSCB : mod->B4SOIpcdscb = value->rValue; mod->B4SOIpcdscbGiven = TRUE; break; case B4SOI_MOD_PCDSCD : mod->B4SOIpcdscd = value->rValue; mod->B4SOIpcdscdGiven = TRUE; break; case B4SOI_MOD_PPCLM: mod->B4SOIppclm = value->rValue; mod->B4SOIppclmGiven = TRUE; break; case B4SOI_MOD_PPDIBL1: mod->B4SOIppdibl1 = value->rValue; mod->B4SOIppdibl1Given = TRUE; break; case B4SOI_MOD_PPDIBL2: mod->B4SOIppdibl2 = value->rValue; mod->B4SOIppdibl2Given = TRUE; break; case B4SOI_MOD_PPDIBLB: mod->B4SOIppdiblb = value->rValue; mod->B4SOIppdiblbGiven = TRUE; break; case B4SOI_MOD_PDROUT: mod->B4SOIpdrout = value->rValue; mod->B4SOIpdroutGiven = TRUE; break; case B4SOI_MOD_PPVAG: mod->B4SOIppvag = value->rValue; mod->B4SOIppvagGiven = TRUE; break; case B4SOI_MOD_PDELTA : mod->B4SOIpdelta = value->rValue; mod->B4SOIpdeltaGiven = TRUE; break; case B4SOI_MOD_PALPHA0 : mod->B4SOIpalpha0 = value->rValue; mod->B4SOIpalpha0Given = TRUE; break; case B4SOI_MOD_PFBJTII : mod->B4SOIpfbjtii = value->rValue; mod->B4SOIpfbjtiiGiven = TRUE; break; /*4.1 Iii model*/ case B4SOI_MOD_PEBJTII : mod->B4SOIpebjtii = value->rValue; mod->B4SOIpebjtiiGiven = TRUE; break; case B4SOI_MOD_PCBJTII : mod->B4SOIpcbjtii = value->rValue; mod->B4SOIpcbjtiiGiven = TRUE; break; case B4SOI_MOD_PVBCI : mod->B4SOIpvbci = value->rValue; mod->B4SOIpvbciGiven = TRUE; break; case B4SOI_MOD_PABJTII : mod->B4SOIpabjtii = value->rValue; mod->B4SOIpabjtiiGiven = TRUE; break; case B4SOI_MOD_PMBJTII : mod->B4SOIpmbjtii = value->rValue; mod->B4SOIpmbjtiiGiven = TRUE; break; case B4SOI_MOD_PBETA0 : mod->B4SOIpbeta0 = value->rValue; mod->B4SOIpbeta0Given = TRUE; break; case B4SOI_MOD_PBETA1 : mod->B4SOIpbeta1 = value->rValue; mod->B4SOIpbeta1Given = TRUE; break; case B4SOI_MOD_PBETA2 : mod->B4SOIpbeta2 = value->rValue; mod->B4SOIpbeta2Given = TRUE; break; case B4SOI_MOD_PVDSATII0 : mod->B4SOIpvdsatii0 = value->rValue; mod->B4SOIpvdsatii0Given = TRUE; break; case B4SOI_MOD_PLII : mod->B4SOIplii = value->rValue; mod->B4SOIpliiGiven = TRUE; break; case B4SOI_MOD_PESATII : mod->B4SOIpesatii = value->rValue; mod->B4SOIpesatiiGiven = TRUE; break; case B4SOI_MOD_PSII0 : mod->B4SOIpsii0 = value->rValue; mod->B4SOIpsii0Given = TRUE; break; case B4SOI_MOD_PSII1 : mod->B4SOIpsii1 = value->rValue; mod->B4SOIpsii1Given = TRUE; break; case B4SOI_MOD_PSII2 : mod->B4SOIpsii2 = value->rValue; mod->B4SOIpsii2Given = TRUE; break; case B4SOI_MOD_PSIID : mod->B4SOIpsiid = value->rValue; mod->B4SOIpsiidGiven = TRUE; break; case B4SOI_MOD_PAGIDL : mod->B4SOIpagidl = value->rValue; mod->B4SOIpagidlGiven = TRUE; break; case B4SOI_MOD_PBGIDL : mod->B4SOIpbgidl = value->rValue; mod->B4SOIpbgidlGiven = TRUE; break; case B4SOI_MOD_PCGIDL : mod->B4SOIpcgidl = value->rValue; mod->B4SOIpcgidlGiven = TRUE; break; case B4SOI_MOD_PEGIDL : mod->B4SOIpegidl = value->rValue; mod->B4SOIpegidlGiven = TRUE; break; case B4SOI_MOD_PRGIDL : mod->B4SOIprgidl = value->rValue; mod->B4SOIprgidlGiven = TRUE; break; case B4SOI_MOD_PKGIDL : mod->B4SOIpkgidl = value->rValue; mod->B4SOIpkgidlGiven = TRUE; break; case B4SOI_MOD_PFGIDL : mod->B4SOIpfgidl = value->rValue; mod->B4SOIpfgidlGiven = TRUE; break; case B4SOI_MOD_PAGISL : mod->B4SOIpagisl = value->rValue; mod->B4SOIpagislGiven = TRUE; break; case B4SOI_MOD_PBGISL : mod->B4SOIpbgisl = value->rValue; mod->B4SOIpbgislGiven = TRUE; break; case B4SOI_MOD_PCGISL : mod->B4SOIpcgisl = value->rValue; mod->B4SOIpcgislGiven = TRUE; break; case B4SOI_MOD_PEGISL : mod->B4SOIpegisl = value->rValue; mod->B4SOIpegislGiven = TRUE; break; case B4SOI_MOD_PRGISL : mod->B4SOIprgisl = value->rValue; mod->B4SOIprgislGiven = TRUE; break; case B4SOI_MOD_PKGISL : mod->B4SOIpkgisl = value->rValue; mod->B4SOIpkgislGiven = TRUE; break; case B4SOI_MOD_PFGISL : mod->B4SOIpfgisl = value->rValue; mod->B4SOIpfgislGiven = TRUE; break; case B4SOI_MOD_PNTUNS : /* v4.0 */ mod->B4SOIpntun = value->rValue; mod->B4SOIpntunGiven = TRUE; break; case B4SOI_MOD_PNTUND : /* v4.0 */ mod->B4SOIpntund = value->rValue; mod->B4SOIpntundGiven = TRUE; break; case B4SOI_MOD_PNDIODES : /* v4.0 */ mod->B4SOIpndiode = value->rValue; mod->B4SOIpndiodeGiven = TRUE; break; case B4SOI_MOD_PNDIODED : /* v4.0 */ mod->B4SOIpndioded = value->rValue; mod->B4SOIpndiodedGiven = TRUE; break; case B4SOI_MOD_PNRECF0S : /* v4.0 */ mod->B4SOIpnrecf0 = value->rValue; mod->B4SOIpnrecf0Given = TRUE; break; case B4SOI_MOD_PNRECF0D : /* v4.0 */ mod->B4SOIpnrecf0d = value->rValue; mod->B4SOIpnrecf0dGiven = TRUE; break; case B4SOI_MOD_PNRECR0S : /* v4.0 */ mod->B4SOIpnrecr0 = value->rValue; mod->B4SOIpnrecr0Given = TRUE; break; case B4SOI_MOD_PNRECR0D : /* v4.0 */ mod->B4SOIpnrecr0d = value->rValue; mod->B4SOIpnrecr0dGiven = TRUE; break; case B4SOI_MOD_PISBJT : mod->B4SOIpisbjt = value->rValue; mod->B4SOIpisbjtGiven = TRUE; break; case B4SOI_MOD_PIDBJT : /* v4.0 */ mod->B4SOIpidbjt = value->rValue; mod->B4SOIpidbjtGiven = TRUE; break; case B4SOI_MOD_PISDIF : mod->B4SOIpisdif = value->rValue; mod->B4SOIpisdifGiven = TRUE; break; case B4SOI_MOD_PIDDIF : /* v4.0 */ mod->B4SOIpiddif = value->rValue; mod->B4SOIpiddifGiven = TRUE; break; case B4SOI_MOD_PISREC : mod->B4SOIpisrec = value->rValue; mod->B4SOIpisrecGiven = TRUE; break; case B4SOI_MOD_PIDREC : /* v4.0 */ mod->B4SOIpidrec = value->rValue; mod->B4SOIpidrecGiven = TRUE; break; case B4SOI_MOD_PISTUN : mod->B4SOIpistun = value->rValue; mod->B4SOIpistunGiven = TRUE; break; case B4SOI_MOD_PIDTUN : /* v4.0 */ mod->B4SOIpidtun = value->rValue; mod->B4SOIpidtunGiven = TRUE; break; case B4SOI_MOD_PVREC0S : /* v4.0 */ mod->B4SOIpvrec0 = value->rValue; mod->B4SOIpvrec0Given = TRUE; break; case B4SOI_MOD_PVREC0D : /* v4.0 */ mod->B4SOIpvrec0d = value->rValue; mod->B4SOIpvrec0dGiven = TRUE; break; case B4SOI_MOD_PVTUN0S : /* v4.0 */ mod->B4SOIpvtun0 = value->rValue; mod->B4SOIpvtun0Given = TRUE; break; case B4SOI_MOD_PVTUN0D : /* v4.0 */ mod->B4SOIpvtun0d = value->rValue; mod->B4SOIpvtun0dGiven = TRUE; break; case B4SOI_MOD_PNBJT : mod->B4SOIpnbjt = value->rValue; mod->B4SOIpnbjtGiven = TRUE; break; case B4SOI_MOD_PLBJT0 : mod->B4SOIplbjt0 = value->rValue; mod->B4SOIplbjt0Given = TRUE; break; case B4SOI_MOD_PVABJT : mod->B4SOIpvabjt = value->rValue; mod->B4SOIpvabjtGiven = TRUE; break; case B4SOI_MOD_PAELY : mod->B4SOIpaely = value->rValue; mod->B4SOIpaelyGiven = TRUE; break; case B4SOI_MOD_PAHLIS : /* v4.0 */ mod->B4SOIpahli = value->rValue; mod->B4SOIpahliGiven = TRUE; break; case B4SOI_MOD_PAHLID : /* v4.0 */ mod->B4SOIpahlid = value->rValue; mod->B4SOIpahlidGiven = TRUE; break; /* v3.1 for RF */ case B4SOI_MOD_PXRCRG1 : mod->B4SOIpxrcrg1 = value->rValue; mod->B4SOIpxrcrg1Given = TRUE; break; case B4SOI_MOD_PXRCRG2 : mod->B4SOIpxrcrg2 = value->rValue; mod->B4SOIpxrcrg2Given = TRUE; break; /* v3.1 for RF end */ /* CV Model */ case B4SOI_MOD_PVSDFB : mod->B4SOIpvsdfb = value->rValue; mod->B4SOIpvsdfbGiven = TRUE; break; case B4SOI_MOD_PVSDTH : mod->B4SOIpvsdth = value->rValue; mod->B4SOIpvsdthGiven = TRUE; break; case B4SOI_MOD_PDELVT : mod->B4SOIpdelvt = value->rValue; mod->B4SOIpdelvtGiven = TRUE; break; case B4SOI_MOD_PACDE : mod->B4SOIpacde = value->rValue; mod->B4SOIpacdeGiven = TRUE; break; case B4SOI_MOD_PMOIN : mod->B4SOIpmoin = value->rValue; mod->B4SOIpmoinGiven = TRUE; break; case B4SOI_MOD_PNOFF : mod->B4SOIpnoff = value->rValue; mod->B4SOIpnoffGiven = TRUE; break; /* v3.2 */ /* Added for binning - END */ /* 4.0 backward compatibility */ case B4SOI_MOD_NLX: mod->B4SOInlx = value->rValue; mod->B4SOInlxGiven = TRUE; break; case B4SOI_MOD_LNLX: mod->B4SOIlnlx = value->rValue; mod->B4SOIlnlxGiven = TRUE; break; case B4SOI_MOD_WNLX: mod->B4SOIwnlx = value->rValue; mod->B4SOIwnlxGiven = TRUE; break; case B4SOI_MOD_PNLX: mod->B4SOIpnlx = value->rValue; mod->B4SOIpnlxGiven = TRUE; break; case B4SOI_MOD_NGIDL: mod->B4SOIngidl = value->rValue; mod->B4SOIngidlGiven = TRUE; break; case B4SOI_MOD_LNGIDL: mod->B4SOIlngidl = value->rValue; mod->B4SOIlngidlGiven = TRUE; break; case B4SOI_MOD_WNGIDL: mod->B4SOIwngidl = value->rValue; mod->B4SOIwngidlGiven = TRUE; break; case B4SOI_MOD_PNGIDL: mod->B4SOIpngidl = value->rValue; mod->B4SOIpngidlGiven = TRUE; break; case B4SOI_MOD_VGS_MAX: mod->B4SOIvgsMax = value->rValue; mod->B4SOIvgsMaxGiven = TRUE; break; case B4SOI_MOD_VGD_MAX: mod->B4SOIvgdMax = value->rValue; mod->B4SOIvgdMaxGiven = TRUE; break; case B4SOI_MOD_VGB_MAX: mod->B4SOIvgbMax = value->rValue; mod->B4SOIvgbMaxGiven = TRUE; break; case B4SOI_MOD_VDS_MAX: mod->B4SOIvdsMax = value->rValue; mod->B4SOIvdsMaxGiven = TRUE; break; case B4SOI_MOD_VBS_MAX: mod->B4SOIvbsMax = value->rValue; mod->B4SOIvbsMaxGiven = TRUE; break; case B4SOI_MOD_VBD_MAX: mod->B4SOIvbdMax = value->rValue; mod->B4SOIvbdMaxGiven = TRUE; break; case B4SOI_MOD_VGSR_MAX: mod->B4SOIvgsrMax = value->rValue; mod->B4SOIvgsrMaxGiven = TRUE; break; case B4SOI_MOD_VGDR_MAX: mod->B4SOIvgdrMax = value->rValue; mod->B4SOIvgdrMaxGiven = TRUE; break; case B4SOI_MOD_VGBR_MAX: mod->B4SOIvgbrMax = value->rValue; mod->B4SOIvgbrMaxGiven = TRUE; break; case B4SOI_MOD_VBSR_MAX: mod->B4SOIvbsrMax = value->rValue; mod->B4SOIvbsrMaxGiven = TRUE; break; case B4SOI_MOD_VBDR_MAX: mod->B4SOIvbdrMax = value->rValue; mod->B4SOIvbdrMaxGiven = TRUE; break; case B4SOI_MOD_NMOS : if(value->iValue) { mod->B4SOItype = 1; mod->B4SOItypeGiven = TRUE; } break; case B4SOI_MOD_PMOS : if(value->iValue) { mod->B4SOItype = - 1; mod->B4SOItypeGiven = TRUE; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsimsoi/b4soimask.c0000644000175000017500000027373213546075722022706 0ustar carstencarsten/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/ /********** * Copyright 2010 Regents of the University of California. All rights reserved. * Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang * Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soimask.c * Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu. * Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu. * File: b4soimask.c * Modified by Hui Wan, Xuemei Xi 11/30/2005 * Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009 * Modified by Tanvir Morshed 09/22/2009 * Modified by Tanvir Morshed 12/31/2009 * Modified by Tanvir Morshed 12/16/2010 **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "b4soidef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B4SOImAsk( CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { B4SOImodel *model = (B4SOImodel *)inst; NG_IGNORE(ckt); switch(which) { case B4SOI_MOD_MOBMOD: value->iValue = model->B4SOImobMod; return(OK); case B4SOI_MOD_PARAMCHK: value->iValue = model->B4SOIparamChk; return(OK); case B4SOI_MOD_BINUNIT: value->iValue = model->B4SOIbinUnit; return(OK); case B4SOI_MOD_CAPMOD: value->iValue = model->B4SOIcapMod; return(OK); case B4SOI_MOD_SHMOD: value->iValue = model->B4SOIshMod; return(OK); /* case B4SOI_MOD_NOIMOD: value->iValue = model->B4SOInoiMod; return(OK); v3.2 */ case B4SOI_MOD_VERSION : value->rValue = model->B4SOIversion; return(OK); case B4SOI_MOD_TOX : value->rValue = model->B4SOItox; return(OK); case B4SOI_MOD_TOXP : value->rValue = model->B4SOItoxp; return(OK); case B4SOI_MOD_LEFFEOT : value->rValue = model->B4SOIleffeot; return(OK); case B4SOI_MOD_WEFFEOT : value->rValue = model->B4SOIweffeot; return(OK); case B4SOI_MOD_VDDEOT : value->rValue = model->B4SOIvddeot; return(OK); case B4SOI_MOD_TEMPEOT : value->rValue = model->B4SOItempeot; return(OK); case B4SOI_MOD_ADOS : value->rValue = model->B4SOIados; return(OK); case B4SOI_MOD_BDOS : value->rValue = model->B4SOIbdos; return(OK); case B4SOI_MOD_EPSRGATE: value->rValue = model->B4SOIepsrgate; return(OK); case B4SOI_MOD_PHIG: value->rValue = model->B4SOIphig; return(OK); case B4SOI_MOD_EASUB: value->rValue = model->B4SOIeasub; return(OK); case B4SOI_MOD_TOXM : value->rValue = model->B4SOItoxm; return(OK); /* v3.2 */ /*4.1*/ case B4SOI_MOD_EOT : value->rValue = model->B4SOIeot; return(OK); case B4SOI_MOD_EPSROX : value->rValue = model->B4SOIepsrox; return(OK); case B4SOI_MOD_EPSRSUB: value->rValue = model->B4SOIepsrsub; return(OK); case B4SOI_MOD_NI0SUB: value->rValue = model->B4SOIni0sub; return(OK); case B4SOI_MOD_BG0SUB: value->rValue = model->B4SOIbg0sub; return(OK); case B4SOI_MOD_TBGASUB: value->rValue = model->B4SOItbgasub; return(OK); case B4SOI_MOD_TBGBSUB: value->rValue = model->B4SOItbgbsub; return(OK); /* v2.2.3 */ case B4SOI_MOD_DTOXCV : value->rValue = model->B4SOIdtoxcv; return(OK); case B4SOI_MOD_CDSC : value->rValue = model->B4SOIcdsc; return(OK); case B4SOI_MOD_CDSCB : value->rValue = model->B4SOIcdscb; return(OK); case B4SOI_MOD_CDSCD : value->rValue = model->B4SOIcdscd; return(OK); case B4SOI_MOD_CIT : value->rValue = model->B4SOIcit; return(OK); case B4SOI_MOD_NFACTOR : value->rValue = model->B4SOInfactor; return(OK); case B4SOI_MOD_VSAT: value->rValue = model->B4SOIvsat; return(OK); case B4SOI_MOD_AT: value->rValue = model->B4SOIat; return(OK); case B4SOI_MOD_A0: value->rValue = model->B4SOIa0; return(OK); case B4SOI_MOD_AGS: value->rValue = model->B4SOIags; return(OK); case B4SOI_MOD_A1: value->rValue = model->B4SOIa1; return(OK); case B4SOI_MOD_A2: value->rValue = model->B4SOIa2; return(OK); case B4SOI_MOD_KETA: value->rValue = model->B4SOIketa; return(OK); case B4SOI_MOD_NSUB: value->rValue = model->B4SOInsub; return(OK); case B4SOI_MOD_NPEAK: value->rValue = model->B4SOInpeak; return(OK); case B4SOI_MOD_NGATE: value->rValue = model->B4SOIngate; return(OK); case B4SOI_MOD_NSD: value->rValue = model->B4SOInsd; return(OK); case B4SOI_MOD_GAMMA1: value->rValue = model->B4SOIgamma1; return(OK); case B4SOI_MOD_GAMMA2: value->rValue = model->B4SOIgamma2; return(OK); case B4SOI_MOD_VBX: value->rValue = model->B4SOIvbx; return(OK); case B4SOI_MOD_VBM: value->rValue = model->B4SOIvbm; return(OK); case B4SOI_MOD_XT: value->rValue = model->B4SOIxt; return(OK); case B4SOI_MOD_K1: value->rValue = model->B4SOIk1; return(OK); case B4SOI_MOD_KT1: value->rValue = model->B4SOIkt1; return(OK); case B4SOI_MOD_KT1L: value->rValue = model->B4SOIkt1l; return(OK); case B4SOI_MOD_KT2 : value->rValue = model->B4SOIkt2; return(OK); case B4SOI_MOD_K2 : value->rValue = model->B4SOIk2; return(OK); case B4SOI_MOD_K3: value->rValue = model->B4SOIk3; return(OK); case B4SOI_MOD_K3B: value->rValue = model->B4SOIk3b; return(OK); case B4SOI_MOD_W0: value->rValue = model->B4SOIw0; return(OK); case B4SOI_MOD_LPE0: value->rValue = model->B4SOIlpe0; return(OK); case B4SOI_MOD_LPEB: /* v4.0 for Vth */ value->rValue = model->B4SOIlpeb; return(OK); case B4SOI_MOD_DVT0 : value->rValue = model->B4SOIdvt0; return(OK); case B4SOI_MOD_DVT1 : value->rValue = model->B4SOIdvt1; return(OK); case B4SOI_MOD_DVT2 : value->rValue = model->B4SOIdvt2; return(OK); case B4SOI_MOD_DVT0W : value->rValue = model->B4SOIdvt0w; return(OK); case B4SOI_MOD_DVT1W : value->rValue = model->B4SOIdvt1w; return(OK); case B4SOI_MOD_DVT2W : value->rValue = model->B4SOIdvt2w; return(OK); case B4SOI_MOD_DROUT : value->rValue = model->B4SOIdrout; return(OK); case B4SOI_MOD_DSUB : value->rValue = model->B4SOIdsub; return(OK); case B4SOI_MOD_VTH0: value->rValue = model->B4SOIvth0; return(OK); case B4SOI_MOD_VFB: value->rValue = model->B4SOIvfb; return(OK); /* v4.1 */ case B4SOI_MOD_UA: value->rValue = model->B4SOIua; return(OK); case B4SOI_MOD_UA1: value->rValue = model->B4SOIua1; return(OK); case B4SOI_MOD_UB: value->rValue = model->B4SOIub; return(OK); case B4SOI_MOD_UB1: value->rValue = model->B4SOIub1; return(OK); case B4SOI_MOD_UC: value->rValue = model->B4SOIuc; return(OK); case B4SOI_MOD_UC1: value->rValue = model->B4SOIuc1; return(OK); case B4SOI_MOD_U0: value->rValue = model->B4SOIu0; return(OK); case B4SOI_MOD_UTE: value->rValue = model->B4SOIute; return(OK); /*4.1 mobmod=4*/ case B4SOI_MOD_UD: value->rValue = model->B4SOIud; return(OK); case B4SOI_MOD_LUD: value->rValue = model->B4SOIlud; return(OK); case B4SOI_MOD_WUD: value->rValue = model->B4SOIwud; return(OK); case B4SOI_MOD_PUD: value->rValue = model->B4SOIpud; return(OK); case B4SOI_MOD_UD1: value->rValue = model->B4SOIud1; return(OK); case B4SOI_MOD_LUD1: value->rValue = model->B4SOIlud1; return(OK); case B4SOI_MOD_WUD1: value->rValue = model->B4SOIwud1; return(OK); case B4SOI_MOD_PUD1: value->rValue = model->B4SOIpud1; return(OK); case B4SOI_MOD_EU: value->rValue = model->B4SOIeu; return(OK); case B4SOI_MOD_LEU: value->rValue = model->B4SOIleu; return(OK); case B4SOI_MOD_WEU: value->rValue = model->B4SOIweu; return(OK); case B4SOI_MOD_PEU: value->rValue = model->B4SOIpeu; return(OK); case B4SOI_MOD_UCS: value->rValue = model->B4SOIucs; return(OK); case B4SOI_MOD_LUCS: value->rValue = model->B4SOIlucs; return(OK); case B4SOI_MOD_WUCS: value->rValue = model->B4SOIwucs; return(OK); case B4SOI_MOD_PUCS: value->rValue = model->B4SOIpucs; return(OK); case B4SOI_MOD_UCSTE: value->rValue = model->B4SOIucste; return(OK); case B4SOI_MOD_LUCSTE: value->rValue = model->B4SOIlucste; return(OK); case B4SOI_MOD_WUCSTE: value->rValue = model->B4SOIwucste; return(OK); case B4SOI_MOD_PUCSTE: value->rValue = model->B4SOIpucste; return(OK); case B4SOI_MOD_VOFF: value->rValue = model->B4SOIvoff; return(OK); case B4SOI_MOD_DELTA: value->rValue = model->B4SOIdelta; return(OK); case B4SOI_MOD_RDSW: value->rValue = model->B4SOIrdsw; return(OK); case B4SOI_MOD_RDWMIN: value->rValue = model->B4SOIrdwmin; return(OK); case B4SOI_MOD_RSWMIN: value->rValue = model->B4SOIrswmin; return(OK); case B4SOI_MOD_RDW: value->rValue = model->B4SOIrdw; return(OK); case B4SOI_MOD_RSW: value->rValue = model->B4SOIrsw; return(OK); case B4SOI_MOD_PRWG: value->rValue = model->B4SOIprwg; return(OK); case B4SOI_MOD_PRWB: value->rValue = model->B4SOIprwb; return(OK); case B4SOI_MOD_PRT: value->rValue = model->B4SOIprt; return(OK); case B4SOI_MOD_ETA0: value->rValue = model->B4SOIeta0; return(OK); case B4SOI_MOD_ETAB: value->rValue = model->B4SOIetab; return(OK); case B4SOI_MOD_PCLM: value->rValue = model->B4SOIpclm; return(OK); case B4SOI_MOD_PDIBL1: value->rValue = model->B4SOIpdibl1; return(OK); case B4SOI_MOD_PDIBL2: value->rValue = model->B4SOIpdibl2; return(OK); case B4SOI_MOD_PDIBLB: value->rValue = model->B4SOIpdiblb; return(OK); case B4SOI_MOD_PVAG: value->rValue = model->B4SOIpvag; return(OK); case B4SOI_MOD_WR: value->rValue = model->B4SOIwr; return(OK); case B4SOI_MOD_DWG: value->rValue = model->B4SOIdwg; return(OK); case B4SOI_MOD_DWB: value->rValue = model->B4SOIdwb; return(OK); case B4SOI_MOD_B0: value->rValue = model->B4SOIb0; return(OK); case B4SOI_MOD_B1: value->rValue = model->B4SOIb1; return(OK); case B4SOI_MOD_ALPHA0: value->rValue = model->B4SOIalpha0; return(OK); case B4SOI_MOD_CGSL: value->rValue = model->B4SOIcgsl; return(OK); case B4SOI_MOD_CGDL: value->rValue = model->B4SOIcgdl; return(OK); case B4SOI_MOD_CKAPPA: value->rValue = model->B4SOIckappa; return(OK); case B4SOI_MOD_CF: value->rValue = model->B4SOIcf; return(OK); case B4SOI_MOD_CLC: value->rValue = model->B4SOIclc; return(OK); case B4SOI_MOD_CLE: value->rValue = model->B4SOIcle; return(OK); case B4SOI_MOD_DWC: value->rValue = model->B4SOIdwc; return(OK); case B4SOI_MOD_DLC: value->rValue = model->B4SOIdlc; return(OK); case B4SOI_MOD_TBOX: value->rValue = model->B4SOItbox; return(OK); case B4SOI_MOD_TSI: value->rValue = model->B4SOItsi; return(OK); case B4SOI_MOD_ETSI: value->rValue = model->B4SOIetsi; return(OK); case B4SOI_MOD_RTH0: value->rValue = model->B4SOIrth0; return(OK); case B4SOI_MOD_CTH0: value->rValue = model->B4SOIcth0; return(OK); case B4SOI_MOD_NDIODES: /* v4.0 */ value->rValue = model->B4SOIndiode; return(OK); case B4SOI_MOD_NDIODED: /* v4.0 */ value->rValue = model->B4SOIndioded; return(OK); case B4SOI_MOD_XBJT: value->rValue = model->B4SOIxbjt; return(OK); case B4SOI_MOD_XDIFS: value->rValue = model->B4SOIxdif; return(OK); case B4SOI_MOD_XRECS: value->rValue = model->B4SOIxrec; return(OK); case B4SOI_MOD_XTUNS: value->rValue = model->B4SOIxtun; return(OK); case B4SOI_MOD_XDIFD: value->rValue = model->B4SOIxdifd; return(OK); case B4SOI_MOD_XRECD: value->rValue = model->B4SOIxrecd; return(OK); case B4SOI_MOD_XTUND: value->rValue = model->B4SOIxtund; return(OK); case B4SOI_MOD_TT: value->rValue = model->B4SOItt; return(OK); case B4SOI_MOD_VSDTH: value->rValue = model->B4SOIvsdth; return(OK); case B4SOI_MOD_VSDFB: value->rValue = model->B4SOIvsdfb; return(OK); case B4SOI_MOD_CSDMIN: value->rValue = model->B4SOIcsdmin; return(OK); case B4SOI_MOD_ASD: value->rValue = model->B4SOIasd; return(OK); case B4SOI_MOD_TNOM : value->rValue = model->B4SOItnom; return(OK); case B4SOI_MOD_CGSO: value->rValue = model->B4SOIcgso; return(OK); case B4SOI_MOD_CGDO: value->rValue = model->B4SOIcgdo; return(OK); case B4SOI_MOD_CGEO: value->rValue = model->B4SOIcgeo; return(OK); case B4SOI_MOD_XPART: value->rValue = model->B4SOIxpart; return(OK); case B4SOI_MOD_RSH: value->rValue = model->B4SOIsheetResistance; return(OK); case B4SOI_MOD_PBSWGS: /* v4.0 */ value->rValue = model->B4SOIGatesidewallJctSPotential; return(OK); case B4SOI_MOD_PBSWGD: /* v4.0 */ value->rValue = model->B4SOIGatesidewallJctDPotential; return(OK); case B4SOI_MOD_MJSWGS: /* v4.0 */ value->rValue = model->B4SOIbodyJctGateSideSGradingCoeff; return(OK); case B4SOI_MOD_MJSWGD: /* v4.0 */ value->rValue = model->B4SOIbodyJctGateSideDGradingCoeff; return(OK); case B4SOI_MOD_CJSWGS: /* v4.0 */ value->rValue = model->B4SOIunitLengthGateSidewallJctCapS; return(OK); case B4SOI_MOD_CJSWGD: /* v4.0 */ value->rValue = model->B4SOIunitLengthGateSidewallJctCapD; return(OK); case B4SOI_MOD_CSDESW: value->rValue = model->B4SOIcsdesw; return(OK); case B4SOI_MOD_LINT: value->rValue = model->B4SOILint; return(OK); case B4SOI_MOD_LL: value->rValue = model->B4SOILl; return(OK); /* v2.2.3 */ case B4SOI_MOD_LLC: value->rValue = model->B4SOILlc; return(OK); case B4SOI_MOD_LLN: value->rValue = model->B4SOILln; return(OK); case B4SOI_MOD_LW: value->rValue = model->B4SOILw; return(OK); /* v2.2.3 */ case B4SOI_MOD_LWC: value->rValue = model->B4SOILwc; return(OK); case B4SOI_MOD_LWN: value->rValue = model->B4SOILwn; return(OK); case B4SOI_MOD_LWL: value->rValue = model->B4SOILwl; return(OK); /* v2.2.3 */ case B4SOI_MOD_LWLC: value->rValue = model->B4SOILwlc; return(OK); case B4SOI_MOD_WINT: value->rValue = model->B4SOIWint; return(OK); case B4SOI_MOD_WL: value->rValue = model->B4SOIWl; return(OK); /* v2.2.3 */ case B4SOI_MOD_WLC: value->rValue = model->B4SOIWlc; return(OK); case B4SOI_MOD_WLN: value->rValue = model->B4SOIWln; return(OK); case B4SOI_MOD_WW: value->rValue = model->B4SOIWw; return(OK); /* v2.2.3 */ case B4SOI_MOD_WWC: value->rValue = model->B4SOIWwc; return(OK); case B4SOI_MOD_WWN: value->rValue = model->B4SOIWwn; return(OK); case B4SOI_MOD_WWL: value->rValue = model->B4SOIWwl; return(OK); /* v2.2.3 */ case B4SOI_MOD_WWLC: value->rValue = model->B4SOIWwlc; return(OK); /* stress effect */ case B4SOI_MOD_SAREF: value->rValue = model->B4SOIsaref; return(OK); case B4SOI_MOD_SBREF: value->rValue = model->B4SOIsbref; return(OK); case B4SOI_MOD_WLOD: value->rValue = model->B4SOIwlod; return(OK); case B4SOI_MOD_KU0: value->rValue = model->B4SOIku0; return(OK); case B4SOI_MOD_KVSAT: value->rValue = model->B4SOIkvsat; return(OK); case B4SOI_MOD_KVTH0: value->rValue = model->B4SOIkvth0; return(OK); case B4SOI_MOD_TKU0: value->rValue = model->B4SOItku0; return(OK); case B4SOI_MOD_LLODKU0: value->rValue = model->B4SOIllodku0; return(OK); case B4SOI_MOD_WLODKU0: value->rValue = model->B4SOIwlodku0; return(OK); case B4SOI_MOD_LLODVTH: value->rValue = model->B4SOIllodvth; return(OK); case B4SOI_MOD_WLODVTH: value->rValue = model->B4SOIwlodvth; return(OK); case B4SOI_MOD_LKU0: value->rValue = model->B4SOIlku0; return(OK); case B4SOI_MOD_WKU0: value->rValue = model->B4SOIwku0; return(OK); case B4SOI_MOD_PKU0: value->rValue = model->B4SOIpku0; return(OK); case B4SOI_MOD_LKVTH0: value->rValue = model->B4SOIlkvth0; return(OK); case B4SOI_MOD_WKVTH0: value->rValue = model->B4SOIwkvth0; return(OK); case B4SOI_MOD_PKVTH0: value->rValue = model->B4SOIpkvth0; return(OK); case B4SOI_MOD_STK2: value->rValue = model->B4SOIstk2; return(OK); case B4SOI_MOD_LODK2: value->rValue = model->B4SOIlodk2; return(OK); case B4SOI_MOD_STETA0: value->rValue = model->B4SOIsteta0; return(OK); case B4SOI_MOD_LODETA0: value->rValue = model->B4SOIlodeta0; return(OK); /* added for stress end */ case B4SOI_MOD_NOIA: value->rValue = model->B4SOIoxideTrapDensityA; return(OK); case B4SOI_MOD_NOIB: value->rValue = model->B4SOIoxideTrapDensityB; return(OK); case B4SOI_MOD_NOIC: value->rValue = model->B4SOIoxideTrapDensityC; return(OK); case B4SOI_MOD_NOIF: value->rValue = model->B4SOInoif; return(OK); case B4SOI_MOD_EM: value->rValue = model->B4SOIem; return(OK); case B4SOI_MOD_EF: value->rValue = model->B4SOIef; return(OK); case B4SOI_MOD_AF: value->rValue = model->B4SOIaf; return(OK); case B4SOI_MOD_KF: value->rValue = model->B4SOIkf; return(OK); case B4SOI_MOD_BF: value->rValue = model->B4SOIbf; return(OK); case B4SOI_MOD_W0FLK: value->rValue = model->B4SOIw0flk; return(OK); /* v2.0 release */ case B4SOI_MOD_K1W1: value->rValue = model->B4SOIk1w1; return(OK); case B4SOI_MOD_K1W2: value->rValue = model->B4SOIk1w2; return(OK); case B4SOI_MOD_KETAS: value->rValue = model->B4SOIketas; return(OK); case B4SOI_MOD_DWBC: value->rValue = model->B4SOIdwbc; return(OK); case B4SOI_MOD_BETA0: value->rValue = model->B4SOIbeta0; return(OK); case B4SOI_MOD_BETA1: value->rValue = model->B4SOIbeta1; return(OK); case B4SOI_MOD_BETA2: value->rValue = model->B4SOIbeta2; return(OK); case B4SOI_MOD_VDSATII0: value->rValue = model->B4SOIvdsatii0; return(OK); case B4SOI_MOD_TII: value->rValue = model->B4SOItii; return(OK); /*4.1 Iii model*/ case B4SOI_MOD_TVBCI: value->rValue = model->B4SOItvbci; return(OK); case B4SOI_MOD_LII: value->rValue = model->B4SOIlii; return(OK); case B4SOI_MOD_SII0: value->rValue = model->B4SOIsii0; return(OK); case B4SOI_MOD_SII1: value->rValue = model->B4SOIsii1; return(OK); case B4SOI_MOD_SII2: value->rValue = model->B4SOIsii2; return(OK); case B4SOI_MOD_SIID: value->rValue = model->B4SOIsiid; return(OK); case B4SOI_MOD_FBJTII: value->rValue = model->B4SOIfbjtii; return(OK); /*4.1 Iii model*/ case B4SOI_MOD_EBJTII: value->rValue = model->B4SOIebjtii; return(OK); case B4SOI_MOD_CBJTII: value->rValue = model->B4SOIcbjtii; return(OK); case B4SOI_MOD_VBCI: value->rValue = model->B4SOIvbci; return(OK); case B4SOI_MOD_ABJTII: value->rValue = model->B4SOIabjtii; return(OK); case B4SOI_MOD_MBJTII: value->rValue = model->B4SOImbjtii; return(OK); case B4SOI_MOD_ESATII: value->rValue = model->B4SOIesatii; return(OK); case B4SOI_MOD_NTUNS: /* v4.0 */ value->rValue = model->B4SOIntun; return(OK); case B4SOI_MOD_NTUND: /* v4.0 */ value->rValue = model->B4SOIntund; return(OK); case B4SOI_MOD_NRECF0S: /* v4.0 */ value->rValue = model->B4SOInrecf0; return(OK); case B4SOI_MOD_NRECF0D: /* v4.0 */ value->rValue = model->B4SOInrecf0d; return(OK); case B4SOI_MOD_NRECR0S: /* v4.0 */ value->rValue = model->B4SOInrecr0; return(OK); case B4SOI_MOD_NRECR0D: /* v4.0 */ value->rValue = model->B4SOInrecr0d; return(OK); case B4SOI_MOD_ISBJT: value->rValue = model->B4SOIisbjt; return(OK); case B4SOI_MOD_IDBJT: /* v4.0 */ value->rValue = model->B4SOIidbjt; return(OK); case B4SOI_MOD_ISDIF: value->rValue = model->B4SOIisdif; return(OK); case B4SOI_MOD_IDDIF: /* v4.0 */ value->rValue = model->B4SOIiddif; return(OK); case B4SOI_MOD_ISREC: value->rValue = model->B4SOIisrec; return(OK); case B4SOI_MOD_IDREC: /* v4.0 */ value->rValue = model->B4SOIidrec; return(OK); case B4SOI_MOD_ISTUN: value->rValue = model->B4SOIistun; return(OK); case B4SOI_MOD_IDTUN: /* v4.0 */ value->rValue = model->B4SOIidtun; return(OK); case B4SOI_MOD_LN: value->rValue = model->B4SOIln; return(OK); case B4SOI_MOD_VREC0S: /* v4.0 */ value->rValue = model->B4SOIvrec0; return(OK); case B4SOI_MOD_VREC0D: /* v4.0 */ value->rValue = model->B4SOIvrec0d; return(OK); case B4SOI_MOD_VTUN0S: /* v4.0 */ value->rValue = model->B4SOIvtun0; return(OK); case B4SOI_MOD_VTUN0D: /* v4.0 */ value->rValue = model->B4SOIvtun0d; return(OK); case B4SOI_MOD_NBJT: value->rValue = model->B4SOInbjt; return(OK); case B4SOI_MOD_LBJT0: value->rValue = model->B4SOIlbjt0; return(OK); case B4SOI_MOD_LDIF0: value->rValue = model->B4SOIldif0; return(OK); case B4SOI_MOD_VABJT: value->rValue = model->B4SOIvabjt; return(OK); case B4SOI_MOD_AELY: value->rValue = model->B4SOIaely; return(OK); case B4SOI_MOD_AHLIS: /* v4.0 */ value->rValue = model->B4SOIahli; return(OK); case B4SOI_MOD_AHLID: /* v4.0 */ value->rValue = model->B4SOIahlid; return(OK); case B4SOI_MOD_RBODY: value->rValue = model->B4SOIrbody; return(OK); case B4SOI_MOD_RBSH: value->rValue = model->B4SOIrbsh; return(OK); case B4SOI_MOD_NTRECF: value->rValue = model->B4SOIntrecf; return(OK); case B4SOI_MOD_NTRECR: value->rValue = model->B4SOIntrecr; return(OK); case B4SOI_MOD_NDIF: value->rValue = model->B4SOIndif; return(OK); case B4SOI_MOD_DLCB: value->rValue = model->B4SOIdlcb; return(OK); case B4SOI_MOD_FBODY: value->rValue = model->B4SOIfbody; return(OK); case B4SOI_MOD_TCJSWGS: value->rValue = model->B4SOItcjswg; return(OK); case B4SOI_MOD_TPBSWGS: value->rValue = model->B4SOItpbswg; return(OK); case B4SOI_MOD_TCJSWGD: value->rValue = model->B4SOItcjswgd; return(OK); case B4SOI_MOD_TPBSWGD: value->rValue = model->B4SOItpbswgd; return(OK); case B4SOI_MOD_ACDE: value->rValue = model->B4SOIacde; return(OK); case B4SOI_MOD_MOIN: value->rValue = model->B4SOImoin; return(OK); case B4SOI_MOD_NOFF: value->rValue = model->B4SOInoff; return(OK); /* v3.2 */ case B4SOI_MOD_DELVT: value->rValue = model->B4SOIdelvt; return(OK); case B4SOI_MOD_KB1: value->rValue = model->B4SOIkb1; return(OK); case B4SOI_MOD_DLBG: value->rValue = model->B4SOIdlbg; return(OK); /* v4.4 */ case B4SOI_MOD_CFRCOEFF: value->rValue = model->B4SOIcfrcoeff; return(OK); case B4SOI_MOD_EGIDL: value->rValue = model->B4SOIegidl; return(OK); case B4SOI_MOD_AGIDL: value->rValue = model->B4SOIagidl; return(OK); case B4SOI_MOD_BGIDL: value->rValue = model->B4SOIbgidl; return(OK); case B4SOI_MOD_CGIDL: value->rValue = model->B4SOIcgidl; return(OK); case B4SOI_MOD_RGIDL: value->rValue = model->B4SOIrgidl; return(OK); case B4SOI_MOD_KGIDL: value->rValue = model->B4SOIkgidl; return(OK); case B4SOI_MOD_FGIDL: value->rValue = model->B4SOIfgidl; return(OK); case B4SOI_MOD_EGISL: value->rValue = model->B4SOIegisl; return(OK); case B4SOI_MOD_AGISL: value->rValue = model->B4SOIagisl; return(OK); case B4SOI_MOD_BGISL: value->rValue = model->B4SOIbgisl; return(OK); case B4SOI_MOD_CGISL: value->rValue = model->B4SOIcgisl; return(OK); case B4SOI_MOD_RGISL: value->rValue = model->B4SOIrgisl; return(OK); case B4SOI_MOD_KGISL: value->rValue = model->B4SOIkgisl; return(OK); case B4SOI_MOD_FGISL: value->rValue = model->B4SOIfgisl; return(OK); case B4SOI_MOD_FDMOD: value->rValue = model->B4SOIfdMod; return(OK); case B4SOI_MOD_VSCE: value->rValue = model->B4SOIvsce; return(OK); case B4SOI_MOD_CDSBS: value->rValue = model->B4SOIcdsbs; return(OK); case B4SOI_MOD_MINVCV: value->rValue = model->B4SOIminvcv; return(OK); case B4SOI_MOD_LMINVCV: value->rValue = model->B4SOIlminvcv; return(OK); case B4SOI_MOD_WMINVCV: value->rValue = model->B4SOIwminvcv; return(OK); case B4SOI_MOD_PMINVCV: value->rValue = model->B4SOIpminvcv; return(OK); case B4SOI_MOD_VOFFCV: value->rValue = model->B4SOIvoffcv; return(OK); case B4SOI_MOD_LVOFFCV: value->rValue = model->B4SOIlvoffcv; return(OK); case B4SOI_MOD_WVOFFCV: value->rValue = model->B4SOIwvoffcv; return(OK); case B4SOI_MOD_PVOFFCV: value->rValue = model->B4SOIpvoffcv; return(OK); /* v3.0 */ case B4SOI_MOD_SOIMOD: value->iValue = model->B4SOIsoiMod; return(OK); /* v3.2 bug fix */ case B4SOI_MOD_VBS0PD: value->rValue = model->B4SOIvbs0pd; return(OK); /* v3.2 */ case B4SOI_MOD_VBS0FD: value->rValue = model->B4SOIvbs0fd; return(OK); /* v3.2 */ case B4SOI_MOD_VBSA: value->rValue = model->B4SOIvbsa; return(OK); case B4SOI_MOD_NOFFFD: value->rValue = model->B4SOInofffd; return(OK); case B4SOI_MOD_VOFFFD: value->rValue = model->B4SOIvofffd; return(OK); case B4SOI_MOD_K1B: value->rValue = model->B4SOIk1b; return(OK); case B4SOI_MOD_K2B: value->rValue = model->B4SOIk2b; return(OK); case B4SOI_MOD_DK2B: value->rValue = model->B4SOIdk2b; return(OK); case B4SOI_MOD_DVBD0: value->rValue = model->B4SOIdvbd0; return(OK); case B4SOI_MOD_DVBD1: value->rValue = model->B4SOIdvbd1; return(OK); case B4SOI_MOD_MOINFD: value->rValue = model->B4SOImoinFD; return(OK); /* v2.2 release */ case B4SOI_MOD_WTH0: value->rValue = model->B4SOIwth0; return(OK); case B4SOI_MOD_RHALO: value->rValue = model->B4SOIrhalo; return(OK); case B4SOI_MOD_NTOX: value->rValue = model->B4SOIntox; return(OK); case B4SOI_MOD_TOXREF: value->rValue = model->B4SOItoxref; return(OK); case B4SOI_MOD_EBG: value->rValue = model->B4SOIebg; return(OK); case B4SOI_MOD_VEVB: value->rValue = model->B4SOIvevb; return(OK); case B4SOI_MOD_ALPHAGB1: value->rValue = model->B4SOIalphaGB1; return(OK); case B4SOI_MOD_BETAGB1: value->rValue = model->B4SOIbetaGB1; return(OK); case B4SOI_MOD_VGB1: value->rValue = model->B4SOIvgb1; return(OK); case B4SOI_MOD_VECB: value->rValue = model->B4SOIvecb; return(OK); case B4SOI_MOD_ALPHAGB2: value->rValue = model->B4SOIalphaGB2; return(OK); case B4SOI_MOD_BETAGB2: value->rValue = model->B4SOIbetaGB2; return(OK); case B4SOI_MOD_VGB2: value->rValue = model->B4SOIvgb2; return(OK); case B4SOI_MOD_AIGBCP2: value->rValue = model->B4SOIaigbcp2; return(OK); case B4SOI_MOD_BIGBCP2: value->rValue = model->B4SOIbigbcp2; return(OK); case B4SOI_MOD_CIGBCP2: value->rValue = model->B4SOIcigbcp2; return(OK); case B4SOI_MOD_TOXQM: value->rValue = model->B4SOItoxqm; return(OK); case B4SOI_MOD_VOXH: value->rValue = model->B4SOIvoxh; return(OK); case B4SOI_MOD_DELTAVOX: value->rValue = model->B4SOIdeltavox; return(OK); /* v4.0 */ case B4SOI_MOD_RDSMOD : value->iValue = model->B4SOIrdsMod; return(OK); case B4SOI_MOD_RBODYMOD : value->iValue = model->B4SOIrbodyMod; return(OK); case B4SOI_MOD_GBMIN: value->rValue = model->B4SOIgbmin; return(OK); case B4SOI_MOD_RBDB: value->rValue = model->B4SOIrbdb; return(OK); case B4SOI_MOD_RBSB: value->rValue = model->B4SOIrbsb; return(OK); case B4SOI_MOD_FRBODY: value->rValue = model->B4SOIfrbody; return(OK); case B4SOI_MOD_DVTP0: value->rValue = model->B4SOIdvtp0; return(OK); case B4SOI_MOD_DVTP1: value->rValue = model->B4SOIdvtp1; return(OK); case B4SOI_MOD_DVTP2: value->rValue = model->B4SOIdvtp2; return(OK); case B4SOI_MOD_DVTP3: value->rValue = model->B4SOIdvtp3; return(OK); case B4SOI_MOD_DVTP4: value->rValue = model->B4SOIdvtp4; return(OK); case B4SOI_MOD_LDVTP0: value->rValue = model->B4SOIldvtp0; return(OK); case B4SOI_MOD_LDVTP1: value->rValue = model->B4SOIldvtp1; return(OK); case B4SOI_MOD_LDVTP2: value->rValue = model->B4SOIldvtp2; return(OK); case B4SOI_MOD_LDVTP3: value->rValue = model->B4SOIldvtp3; return(OK); case B4SOI_MOD_LDVTP4: value->rValue = model->B4SOIldvtp4; return(OK); case B4SOI_MOD_WDVTP0: value->rValue = model->B4SOIwdvtp0; return(OK); case B4SOI_MOD_WDVTP1: value->rValue = model->B4SOIwdvtp1; return(OK); case B4SOI_MOD_WDVTP2: value->rValue = model->B4SOIwdvtp2; return(OK); case B4SOI_MOD_WDVTP3: value->rValue = model->B4SOIwdvtp3; return(OK); case B4SOI_MOD_WDVTP4: value->rValue = model->B4SOIwdvtp4; return(OK); case B4SOI_MOD_PDVTP0: value->rValue = model->B4SOIpdvtp0; return(OK); case B4SOI_MOD_PDVTP1: value->rValue = model->B4SOIpdvtp1; return(OK); case B4SOI_MOD_PDVTP2: value->rValue = model->B4SOIpdvtp2; return(OK); case B4SOI_MOD_PDVTP3: value->rValue = model->B4SOIpdvtp3; return(OK); case B4SOI_MOD_PDVTP4: value->rValue = model->B4SOIpdvtp4; return(OK); case B4SOI_MOD_MINV: value->rValue = model->B4SOIminv; return(OK); case B4SOI_MOD_LMINV: value->rValue = model->B4SOIlminv; return(OK); case B4SOI_MOD_WMINV: value->rValue = model->B4SOIwminv; return(OK); case B4SOI_MOD_PMINV: value->rValue = model->B4SOIpminv; return(OK); case B4SOI_MOD_FPROUT: value->rValue = model->B4SOIfprout; return(OK); case B4SOI_MOD_PDITS: value->rValue = model->B4SOIpdits; return(OK); case B4SOI_MOD_PDITSD: value->rValue = model->B4SOIpditsd; return(OK); case B4SOI_MOD_PDITSL: value->rValue = model->B4SOIpditsl; return(OK); case B4SOI_MOD_LFPROUT: value->rValue = model->B4SOIlfprout; return(OK); case B4SOI_MOD_LPDITS: value->rValue = model->B4SOIlpdits; return(OK); case B4SOI_MOD_LPDITSD: value->rValue = model->B4SOIlpditsd; return(OK); case B4SOI_MOD_WFPROUT: value->rValue = model->B4SOIwfprout; return(OK); case B4SOI_MOD_WPDITS: value->rValue = model->B4SOIwpdits; return(OK); case B4SOI_MOD_WPDITSD: value->rValue = model->B4SOIwpditsd; return(OK); case B4SOI_MOD_PFPROUT: value->rValue = model->B4SOIpfprout; return(OK); case B4SOI_MOD_PPDITS: value->rValue = model->B4SOIppdits; return(OK); case B4SOI_MOD_PPDITSD: value->rValue = model->B4SOIppditsd; return(OK); /* v4.0 end */ /* v3.2 */ case B4SOI_MOD_FNOIMOD : value->iValue = model->B4SOIfnoiMod; return(OK); case B4SOI_MOD_TNOIMOD : value->iValue = model->B4SOItnoiMod; return(OK); case B4SOI_MOD_TNOIA: value->rValue = model->B4SOItnoia; return(OK); case B4SOI_MOD_TNOIB: value->rValue = model->B4SOItnoib; return(OK); case B4SOI_MOD_RNOIA: value->rValue = model->B4SOIrnoia; return(OK); case B4SOI_MOD_RNOIB: value->rValue = model->B4SOIrnoib; return(OK); case B4SOI_MOD_NTNOI: value->rValue = model->B4SOIntnoi; return(OK); /* v3.2 */ /* v3.1 added for RF */ case B4SOI_MOD_RGATEMOD : value->iValue = model->B4SOIrgateMod; return(OK); case B4SOI_MOD_XRCRG1: value->rValue = model->B4SOIxrcrg1; return(OK); case B4SOI_MOD_XRCRG2: value->rValue = model->B4SOIxrcrg2; return(OK); case B4SOI_MOD_RSHG: value->rValue = model->B4SOIrshg; return(OK); case B4SOI_MOD_NGCON: value->rValue = model->B4SOIngcon; return(OK); case B4SOI_MOD_XGW: value->rValue = model->B4SOIxgw; return(OK); case B4SOI_MOD_XGL: value->rValue = model->B4SOIxgl; return(OK); /* v3.1 added for RF end */ /*4.1*/ case B4SOI_MOD_MTRLMOD : value->iValue = model->B4SOImtrlMod; return(OK); case B4SOI_MOD_VGSTCVMOD: value->iValue = model->B4SOIvgstcvMod; return(OK); case B4SOI_MOD_GIDLMOD : value->iValue = model->B4SOIgidlMod; return(OK); case B4SOI_MOD_IIIMOD : value->iValue = model->B4SOIiiiMod; return(OK); /* v3.0 */ case B4SOI_MOD_IGBMOD: value->iValue = model->B4SOIigbMod; return(OK); case B4SOI_MOD_IGCMOD: value->iValue = model->B4SOIigcMod; return(OK); case B4SOI_MOD_AIGC: value->rValue = model->B4SOIaigc; return(OK); case B4SOI_MOD_BIGC: value->rValue = model->B4SOIbigc; return(OK); case B4SOI_MOD_CIGC: value->rValue = model->B4SOIcigc; return(OK); case B4SOI_MOD_AIGSD: value->rValue = model->B4SOIaigsd; return(OK); case B4SOI_MOD_BIGSD: value->rValue = model->B4SOIbigsd; return(OK); case B4SOI_MOD_CIGSD: value->rValue = model->B4SOIcigsd; return(OK); case B4SOI_MOD_NIGC: value->rValue = model->B4SOInigc; return(OK); case B4SOI_MOD_PIGCD: value->rValue = model->B4SOIpigcd; return(OK); case B4SOI_MOD_POXEDGE: value->rValue = model->B4SOIpoxedge; return(OK); case B4SOI_MOD_DLCIG: value->rValue = model->B4SOIdlcig; return(OK); /* Added for binning - START */ /* Length Dependence */ /* v3.1 */ case B4SOI_MOD_LXJ: value->rValue = model->B4SOIlxj; return(OK); case B4SOI_MOD_LALPHAGB1: value->rValue = model->B4SOIlalphaGB1; return(OK); case B4SOI_MOD_LALPHAGB2: value->rValue = model->B4SOIlalphaGB2; return(OK); case B4SOI_MOD_LBETAGB1: value->rValue = model->B4SOIlbetaGB1; return(OK); case B4SOI_MOD_LBETAGB2: value->rValue = model->B4SOIlbetaGB2; return(OK); case B4SOI_MOD_LAIGBCP2: value->rValue = model->B4SOIlaigbcp2; return(OK); case B4SOI_MOD_LBIGBCP2: value->rValue = model->B4SOIlbigbcp2; return(OK); case B4SOI_MOD_LCIGBCP2: value->rValue = model->B4SOIlcigbcp2; return(OK); case B4SOI_MOD_LNDIF: value->rValue = model->B4SOIlndif; return(OK); case B4SOI_MOD_LNTRECF: value->rValue = model->B4SOIlntrecf; return(OK); case B4SOI_MOD_LNTRECR: value->rValue = model->B4SOIlntrecr; return(OK); case B4SOI_MOD_LXBJT: value->rValue = model->B4SOIlxbjt; return(OK); case B4SOI_MOD_LXDIFS: value->rValue = model->B4SOIlxdif; return(OK); case B4SOI_MOD_LXRECS: value->rValue = model->B4SOIlxrec; return(OK); case B4SOI_MOD_LXTUNS: value->rValue = model->B4SOIlxtun; return(OK); case B4SOI_MOD_LXDIFD: value->rValue = model->B4SOIlxdifd; return(OK); case B4SOI_MOD_LXRECD: value->rValue = model->B4SOIlxrecd; return(OK); case B4SOI_MOD_LXTUND: value->rValue = model->B4SOIlxtund; return(OK); case B4SOI_MOD_LCGDL: value->rValue = model->B4SOIlcgdl; return(OK); case B4SOI_MOD_LCGSL: value->rValue = model->B4SOIlcgsl; return(OK); case B4SOI_MOD_LCKAPPA: value->rValue = model->B4SOIlckappa; return(OK); case B4SOI_MOD_LUTE: value->rValue = model->B4SOIlute; return(OK); case B4SOI_MOD_LKT1: value->rValue = model->B4SOIlkt1; return(OK); case B4SOI_MOD_LKT2: value->rValue = model->B4SOIlkt2; return(OK); case B4SOI_MOD_LKT1L: value->rValue = model->B4SOIlkt1l; return(OK); case B4SOI_MOD_LUA1: value->rValue = model->B4SOIlua1; return(OK); case B4SOI_MOD_LUB1: value->rValue = model->B4SOIlub1; return(OK); case B4SOI_MOD_LUC1: value->rValue = model->B4SOIluc1; return(OK); case B4SOI_MOD_LAT: value->rValue = model->B4SOIlat; return(OK); case B4SOI_MOD_LPRT: value->rValue = model->B4SOIlprt; return(OK); /* v3.0 */ case B4SOI_MOD_LAIGC: value->rValue = model->B4SOIlaigc; return(OK); case B4SOI_MOD_LBIGC: value->rValue = model->B4SOIlbigc; return(OK); case B4SOI_MOD_LCIGC: value->rValue = model->B4SOIlcigc; return(OK); case B4SOI_MOD_LAIGSD: value->rValue = model->B4SOIlaigsd; return(OK); case B4SOI_MOD_LBIGSD: value->rValue = model->B4SOIlbigsd; return(OK); case B4SOI_MOD_LCIGSD: value->rValue = model->B4SOIlcigsd; return(OK); case B4SOI_MOD_LNIGC: value->rValue = model->B4SOIlnigc; return(OK); case B4SOI_MOD_LPIGCD: value->rValue = model->B4SOIlpigcd; return(OK); case B4SOI_MOD_LPOXEDGE: value->rValue = model->B4SOIlpoxedge; return(OK); case B4SOI_MOD_LNPEAK: value->rValue = model->B4SOIlnpeak; return(OK); case B4SOI_MOD_LNSUB: value->rValue = model->B4SOIlnsub; return(OK); case B4SOI_MOD_LNGATE: value->rValue = model->B4SOIlngate; return(OK); case B4SOI_MOD_LNSD: value->rValue = model->B4SOIlnsd; return(OK); case B4SOI_MOD_LVTH0: value->rValue = model->B4SOIlvth0; return(OK); case B4SOI_MOD_LVFB: value->rValue = model->B4SOIlvfb; return(OK); /* v4.1 */ case B4SOI_MOD_LK1: value->rValue = model->B4SOIlk1; return(OK); case B4SOI_MOD_LK1W1: value->rValue = model->B4SOIlk1w1; return(OK); case B4SOI_MOD_LK1W2: value->rValue = model->B4SOIlk1w2; return(OK); case B4SOI_MOD_LK2: value->rValue = model->B4SOIlk2; return(OK); case B4SOI_MOD_LK3: value->rValue = model->B4SOIlk3; return(OK); case B4SOI_MOD_LK3B: value->rValue = model->B4SOIlk3b; return(OK); case B4SOI_MOD_LKB1: value->rValue = model->B4SOIlkb1; return(OK); case B4SOI_MOD_LW0: value->rValue = model->B4SOIlw0; return(OK); case B4SOI_MOD_LLPE0: value->rValue = model->B4SOIllpe0; return(OK); case B4SOI_MOD_LLPEB: /* v4.0 for Vth */ value->rValue = model->B4SOIllpeb; return(OK); case B4SOI_MOD_LDVT0 : value->rValue = model->B4SOIldvt0; return(OK); case B4SOI_MOD_LDVT1 : value->rValue = model->B4SOIldvt1; return(OK); case B4SOI_MOD_LDVT2 : value->rValue = model->B4SOIldvt2; return(OK); case B4SOI_MOD_LDVT0W : value->rValue = model->B4SOIldvt0w; return(OK); case B4SOI_MOD_LDVT1W : value->rValue = model->B4SOIldvt1w; return(OK); case B4SOI_MOD_LDVT2W : value->rValue = model->B4SOIldvt2w; return(OK); case B4SOI_MOD_LU0: value->rValue = model->B4SOIlu0; return(OK); case B4SOI_MOD_LUA: value->rValue = model->B4SOIlua; return(OK); case B4SOI_MOD_LUB: value->rValue = model->B4SOIlub; return(OK); case B4SOI_MOD_LUC: value->rValue = model->B4SOIluc; return(OK); case B4SOI_MOD_LVSAT: value->rValue = model->B4SOIlvsat; return(OK); case B4SOI_MOD_LA0: value->rValue = model->B4SOIla0; return(OK); case B4SOI_MOD_LAGS: value->rValue = model->B4SOIlags; return(OK); case B4SOI_MOD_LB0: value->rValue = model->B4SOIlb0; return(OK); case B4SOI_MOD_LB1: value->rValue = model->B4SOIlb1; return(OK); case B4SOI_MOD_LKETA: value->rValue = model->B4SOIlketa; return(OK); case B4SOI_MOD_LKETAS: value->rValue = model->B4SOIlketas; return(OK); case B4SOI_MOD_LA1: value->rValue = model->B4SOIla1; return(OK); case B4SOI_MOD_LA2: value->rValue = model->B4SOIla2; return(OK); case B4SOI_MOD_LRDSW: value->rValue = model->B4SOIlrdsw; return(OK); case B4SOI_MOD_LRDW: value->rValue = model->B4SOIlrdw; return(OK); case B4SOI_MOD_LRSW: value->rValue = model->B4SOIlrsw; return(OK); case B4SOI_MOD_LPRWB: value->rValue = model->B4SOIlprwb; return(OK); case B4SOI_MOD_LPRWG: value->rValue = model->B4SOIlprwg; return(OK); case B4SOI_MOD_LWR: value->rValue = model->B4SOIlwr; return(OK); case B4SOI_MOD_LNFACTOR : value->rValue = model->B4SOIlnfactor; return(OK); case B4SOI_MOD_LDWG: value->rValue = model->B4SOIldwg; return(OK); case B4SOI_MOD_LDWB: value->rValue = model->B4SOIldwb; return(OK); case B4SOI_MOD_LVOFF: value->rValue = model->B4SOIlvoff; return(OK); case B4SOI_MOD_LETA0: value->rValue = model->B4SOIleta0; return(OK); case B4SOI_MOD_LETAB: value->rValue = model->B4SOIletab; return(OK); case B4SOI_MOD_LDSUB : value->rValue = model->B4SOIldsub; return(OK); case B4SOI_MOD_LCIT : value->rValue = model->B4SOIlcit; return(OK); case B4SOI_MOD_LCDSC : value->rValue = model->B4SOIlcdsc; return(OK); case B4SOI_MOD_LCDSCB : value->rValue = model->B4SOIlcdscb; return(OK); case B4SOI_MOD_LCDSCD : value->rValue = model->B4SOIlcdscd; return(OK); case B4SOI_MOD_LPCLM: value->rValue = model->B4SOIlpclm; return(OK); case B4SOI_MOD_LPDIBL1: value->rValue = model->B4SOIlpdibl1; return(OK); case B4SOI_MOD_LPDIBL2: value->rValue = model->B4SOIlpdibl2; return(OK); case B4SOI_MOD_LPDIBLB: value->rValue = model->B4SOIlpdiblb; return(OK); case B4SOI_MOD_LDROUT : value->rValue = model->B4SOIldrout; return(OK); case B4SOI_MOD_LPVAG: value->rValue = model->B4SOIlpvag; return(OK); case B4SOI_MOD_LDELTA: value->rValue = model->B4SOIldelta; return(OK); case B4SOI_MOD_LALPHA0: value->rValue = model->B4SOIlalpha0; return(OK); case B4SOI_MOD_LFBJTII: value->rValue = model->B4SOIlfbjtii; return(OK); /*4.1 Iii model*/ case B4SOI_MOD_LEBJTII: value->rValue = model->B4SOIlebjtii; return(OK); case B4SOI_MOD_LCBJTII: value->rValue = model->B4SOIlcbjtii; return(OK); case B4SOI_MOD_LVBCI: value->rValue = model->B4SOIlvbci; return(OK); case B4SOI_MOD_LABJTII: value->rValue = model->B4SOIlabjtii; return(OK); case B4SOI_MOD_LMBJTII: value->rValue = model->B4SOIlmbjtii; return(OK); case B4SOI_MOD_LBETA0: value->rValue = model->B4SOIlbeta0; return(OK); case B4SOI_MOD_LBETA1: value->rValue = model->B4SOIlbeta1; return(OK); case B4SOI_MOD_LBETA2: value->rValue = model->B4SOIlbeta2; return(OK); case B4SOI_MOD_LVDSATII0: value->rValue = model->B4SOIlvdsatii0; return(OK); case B4SOI_MOD_LLII: value->rValue = model->B4SOIllii; return(OK); case B4SOI_MOD_LESATII: value->rValue = model->B4SOIlesatii; return(OK); case B4SOI_MOD_LSII0: value->rValue = model->B4SOIlsii0; return(OK); case B4SOI_MOD_LSII1: value->rValue = model->B4SOIlsii1; return(OK); case B4SOI_MOD_LSII2: value->rValue = model->B4SOIlsii2; return(OK); case B4SOI_MOD_LSIID: value->rValue = model->B4SOIlsiid; return(OK); case B4SOI_MOD_LAGIDL: value->rValue = model->B4SOIlagidl; return(OK); case B4SOI_MOD_LBGIDL: value->rValue = model->B4SOIlbgidl; return(OK); case B4SOI_MOD_LCGIDL: value->rValue = model->B4SOIlcgidl; return(OK); case B4SOI_MOD_LEGIDL: value->rValue = model->B4SOIlegidl; return(OK); case B4SOI_MOD_LRGIDL: value->rValue = model->B4SOIlrgidl; return(OK); case B4SOI_MOD_LKGIDL: value->rValue = model->B4SOIlkgidl; return(OK); case B4SOI_MOD_LFGIDL: value->rValue = model->B4SOIlfgidl; return(OK); case B4SOI_MOD_LAGISL: value->rValue = model->B4SOIlagisl; return(OK); case B4SOI_MOD_LBGISL: value->rValue = model->B4SOIlbgisl; return(OK); case B4SOI_MOD_LCGISL: value->rValue = model->B4SOIlcgisl; return(OK); case B4SOI_MOD_LEGISL: value->rValue = model->B4SOIlegisl; return(OK); case B4SOI_MOD_LRGISL: value->rValue = model->B4SOIlrgisl; return(OK); case B4SOI_MOD_LKGISL: value->rValue = model->B4SOIlkgisl; return(OK); case B4SOI_MOD_LFGISL: value->rValue = model->B4SOIlfgisl; return(OK); case B4SOI_MOD_LNTUNS: /* v4.0 */ value->rValue = model->B4SOIlntun; return(OK); case B4SOI_MOD_LNTUND: /* v4.0 */ value->rValue = model->B4SOIlntund; return(OK); case B4SOI_MOD_LNDIODES: /* v4.0 */ value->rValue = model->B4SOIlndiode; return(OK); case B4SOI_MOD_LNDIODED: /* v4.0 */ value->rValue = model->B4SOIlndioded; return(OK); case B4SOI_MOD_LNRECF0S: /* v4.0 */ value->rValue = model->B4SOIlnrecf0; return(OK); case B4SOI_MOD_LNRECF0D: /* v4.0 */ value->rValue = model->B4SOIlnrecf0d; return(OK); case B4SOI_MOD_LNRECR0S: /* v4.0 */ value->rValue = model->B4SOIlnrecr0; return(OK); case B4SOI_MOD_LNRECR0D: /* v4.0 */ value->rValue = model->B4SOIlnrecr0d; return(OK); case B4SOI_MOD_LISBJT: value->rValue = model->B4SOIlisbjt; return(OK); case B4SOI_MOD_LIDBJT: /* v4.0 */ value->rValue = model->B4SOIlidbjt; return(OK); case B4SOI_MOD_LISDIF: value->rValue = model->B4SOIlisdif; return(OK); case B4SOI_MOD_LIDDIF: /* v4.0 */ value->rValue = model->B4SOIliddif; return(OK); case B4SOI_MOD_LISREC: value->rValue = model->B4SOIlisrec; return(OK); case B4SOI_MOD_LIDREC: /* v4.0 */ value->rValue = model->B4SOIlidrec; return(OK); case B4SOI_MOD_LISTUN: value->rValue = model->B4SOIlistun; return(OK); case B4SOI_MOD_LIDTUN: /* v4.0 */ value->rValue = model->B4SOIlidtun; return(OK); case B4SOI_MOD_LVREC0S: /* v4.0 */ value->rValue = model->B4SOIlvrec0; return(OK); case B4SOI_MOD_LVREC0D: /* v4.0 */ value->rValue = model->B4SOIlvrec0d; return(OK); case B4SOI_MOD_LVTUN0S: /* v4.0 */ value->rValue = model->B4SOIlvtun0; return(OK); case B4SOI_MOD_LVTUN0D: /* v4.0 */ value->rValue = model->B4SOIlvtun0d; return(OK); case B4SOI_MOD_LNBJT: value->rValue = model->B4SOIlnbjt; return(OK); case B4SOI_MOD_LLBJT0: value->rValue = model->B4SOIllbjt0; return(OK); case B4SOI_MOD_LVABJT: value->rValue = model->B4SOIlvabjt; return(OK); case B4SOI_MOD_LAELY: value->rValue = model->B4SOIlaely; return(OK); case B4SOI_MOD_LAHLIS: /* v4.0 */ value->rValue = model->B4SOIlahli; return(OK); case B4SOI_MOD_LAHLID: /* v4.0 */ value->rValue = model->B4SOIlahlid; return(OK); /* CV Model */ case B4SOI_MOD_LVSDFB: value->rValue = model->B4SOIlvsdfb; return(OK); case B4SOI_MOD_LVSDTH: value->rValue = model->B4SOIlvsdth; return(OK); case B4SOI_MOD_LDELVT: value->rValue = model->B4SOIldelvt; return(OK); case B4SOI_MOD_LACDE: value->rValue = model->B4SOIlacde; return(OK); case B4SOI_MOD_LMOIN: value->rValue = model->B4SOIlmoin; return(OK); case B4SOI_MOD_LNOFF: value->rValue = model->B4SOIlnoff; return(OK); /* v3.2 */ /* Width Dependence */ /* v3.1 */ case B4SOI_MOD_WXJ: value->rValue = model->B4SOIwxj; return(OK); case B4SOI_MOD_WALPHAGB1: value->rValue = model->B4SOIwalphaGB1; return(OK); case B4SOI_MOD_WALPHAGB2: value->rValue = model->B4SOIwalphaGB2; return(OK); case B4SOI_MOD_WBETAGB1: value->rValue = model->B4SOIwbetaGB1; return(OK); case B4SOI_MOD_WBETAGB2: value->rValue = model->B4SOIwbetaGB2; return(OK); case B4SOI_MOD_WAIGBCP2: value->rValue = model->B4SOIwaigbcp2; return(OK); case B4SOI_MOD_WBIGBCP2: value->rValue = model->B4SOIwbigbcp2; return(OK); case B4SOI_MOD_WCIGBCP2: value->rValue = model->B4SOIwcigbcp2; return(OK); case B4SOI_MOD_WNDIF: value->rValue = model->B4SOIwndif; return(OK); case B4SOI_MOD_WNTRECF: value->rValue = model->B4SOIwntrecf; return(OK); case B4SOI_MOD_WNTRECR: value->rValue = model->B4SOIwntrecr; return(OK); case B4SOI_MOD_WXBJT: value->rValue = model->B4SOIwxbjt; return(OK); case B4SOI_MOD_WXDIFS: value->rValue = model->B4SOIwxdif; return(OK); case B4SOI_MOD_WXRECS: value->rValue = model->B4SOIwxrec; return(OK); case B4SOI_MOD_WXTUNS: value->rValue = model->B4SOIwxtun; return(OK); case B4SOI_MOD_WXDIFD: value->rValue = model->B4SOIwxdifd; return(OK); case B4SOI_MOD_WXRECD: value->rValue = model->B4SOIwxrecd; return(OK); case B4SOI_MOD_WXTUND: value->rValue = model->B4SOIwxtund; return(OK); case B4SOI_MOD_WCGDL: value->rValue = model->B4SOIwcgdl; return(OK); case B4SOI_MOD_WCGSL: value->rValue = model->B4SOIwcgsl; return(OK); case B4SOI_MOD_WCKAPPA: value->rValue = model->B4SOIwckappa; return(OK); case B4SOI_MOD_WUTE: value->rValue = model->B4SOIwute; return(OK); case B4SOI_MOD_WKT1: value->rValue = model->B4SOIwkt1; return(OK); case B4SOI_MOD_WKT2: value->rValue = model->B4SOIwkt2; return(OK); case B4SOI_MOD_WKT1L: value->rValue = model->B4SOIwkt1l; return(OK); case B4SOI_MOD_WUA1: value->rValue = model->B4SOIwua1; return(OK); case B4SOI_MOD_WUB1: value->rValue = model->B4SOIwub1; return(OK); case B4SOI_MOD_WUC1: value->rValue = model->B4SOIwuc1; return(OK); case B4SOI_MOD_WAT: value->rValue = model->B4SOIwat; return(OK); case B4SOI_MOD_WPRT: value->rValue = model->B4SOIwprt; return(OK); /* v3.0 */ case B4SOI_MOD_WAIGC: value->rValue = model->B4SOIwaigc; return(OK); case B4SOI_MOD_WBIGC: value->rValue = model->B4SOIwbigc; return(OK); case B4SOI_MOD_WCIGC: value->rValue = model->B4SOIwcigc; return(OK); case B4SOI_MOD_WAIGSD: value->rValue = model->B4SOIwaigsd; return(OK); case B4SOI_MOD_WBIGSD: value->rValue = model->B4SOIwbigsd; return(OK); case B4SOI_MOD_WCIGSD: value->rValue = model->B4SOIwcigsd; return(OK); case B4SOI_MOD_WNIGC: value->rValue = model->B4SOIwnigc; return(OK); case B4SOI_MOD_WPIGCD: value->rValue = model->B4SOIwpigcd; return(OK); case B4SOI_MOD_WPOXEDGE: value->rValue = model->B4SOIwpoxedge; return(OK); case B4SOI_MOD_WNPEAK: value->rValue = model->B4SOIwnpeak; return(OK); case B4SOI_MOD_WNSUB: value->rValue = model->B4SOIwnsub; return(OK); case B4SOI_MOD_WNGATE: value->rValue = model->B4SOIwngate; return(OK); case B4SOI_MOD_WNSD: value->rValue = model->B4SOIwnsd; return(OK); case B4SOI_MOD_WVTH0: value->rValue = model->B4SOIwvth0; return(OK); case B4SOI_MOD_WVFB: value->rValue = model->B4SOIwvfb; return(OK); /* v4.1 */ case B4SOI_MOD_WK1: value->rValue = model->B4SOIwk1; return(OK); case B4SOI_MOD_WK1W1: value->rValue = model->B4SOIwk1w1; return(OK); case B4SOI_MOD_WK1W2: value->rValue = model->B4SOIwk1w2; return(OK); case B4SOI_MOD_WK2: value->rValue = model->B4SOIwk2; return(OK); case B4SOI_MOD_WK3: value->rValue = model->B4SOIwk3; return(OK); case B4SOI_MOD_WK3B: value->rValue = model->B4SOIwk3b; return(OK); case B4SOI_MOD_WKB1: value->rValue = model->B4SOIwkb1; return(OK); case B4SOI_MOD_WW0: value->rValue = model->B4SOIww0; return(OK); case B4SOI_MOD_WLPE0: value->rValue = model->B4SOIwlpe0; return(OK); case B4SOI_MOD_WLPEB: /* v4.0 for Vth */ value->rValue = model->B4SOIwlpeb; return(OK); case B4SOI_MOD_WDVT0 : value->rValue = model->B4SOIwdvt0; return(OK); case B4SOI_MOD_WDVT1 : value->rValue = model->B4SOIwdvt1; return(OK); case B4SOI_MOD_WDVT2 : value->rValue = model->B4SOIwdvt2; return(OK); case B4SOI_MOD_WDVT0W : value->rValue = model->B4SOIwdvt0w; return(OK); case B4SOI_MOD_WDVT1W : value->rValue = model->B4SOIwdvt1w; return(OK); case B4SOI_MOD_WDVT2W : value->rValue = model->B4SOIwdvt2w; return(OK); case B4SOI_MOD_WU0: value->rValue = model->B4SOIwu0; return(OK); case B4SOI_MOD_WUA: value->rValue = model->B4SOIwua; return(OK); case B4SOI_MOD_WUB: value->rValue = model->B4SOIwub; return(OK); case B4SOI_MOD_WUC: value->rValue = model->B4SOIwuc; return(OK); case B4SOI_MOD_WVSAT: value->rValue = model->B4SOIwvsat; return(OK); case B4SOI_MOD_WA0: value->rValue = model->B4SOIwa0; return(OK); case B4SOI_MOD_WAGS: value->rValue = model->B4SOIwags; return(OK); case B4SOI_MOD_WB0: value->rValue = model->B4SOIwb0; return(OK); case B4SOI_MOD_WB1: value->rValue = model->B4SOIwb1; return(OK); case B4SOI_MOD_WKETA: value->rValue = model->B4SOIwketa; return(OK); case B4SOI_MOD_WKETAS: value->rValue = model->B4SOIwketas; return(OK); case B4SOI_MOD_WA1: value->rValue = model->B4SOIwa1; return(OK); case B4SOI_MOD_WA2: value->rValue = model->B4SOIwa2; return(OK); case B4SOI_MOD_WRDSW: value->rValue = model->B4SOIwrdsw; return(OK); case B4SOI_MOD_WRDW: value->rValue = model->B4SOIwrdw; return(OK); case B4SOI_MOD_WRSW: value->rValue = model->B4SOIwrsw; return(OK); case B4SOI_MOD_WPRWB: value->rValue = model->B4SOIwprwb; return(OK); case B4SOI_MOD_WPRWG: value->rValue = model->B4SOIwprwg; return(OK); case B4SOI_MOD_WWR: value->rValue = model->B4SOIwwr; return(OK); case B4SOI_MOD_WNFACTOR : value->rValue = model->B4SOIwnfactor; return(OK); case B4SOI_MOD_WDWG: value->rValue = model->B4SOIwdwg; return(OK); case B4SOI_MOD_WDWB: value->rValue = model->B4SOIwdwb; return(OK); case B4SOI_MOD_WVOFF: value->rValue = model->B4SOIwvoff; return(OK); case B4SOI_MOD_WETA0: value->rValue = model->B4SOIweta0; return(OK); case B4SOI_MOD_WETAB: value->rValue = model->B4SOIwetab; return(OK); case B4SOI_MOD_WDSUB : value->rValue = model->B4SOIwdsub; return(OK); case B4SOI_MOD_WCIT : value->rValue = model->B4SOIwcit; return(OK); case B4SOI_MOD_WCDSC : value->rValue = model->B4SOIwcdsc; return(OK); case B4SOI_MOD_WCDSCB : value->rValue = model->B4SOIwcdscb; return(OK); case B4SOI_MOD_WCDSCD : value->rValue = model->B4SOIwcdscd; return(OK); case B4SOI_MOD_WPCLM: value->rValue = model->B4SOIwpclm; return(OK); case B4SOI_MOD_WPDIBL1: value->rValue = model->B4SOIwpdibl1; return(OK); case B4SOI_MOD_WPDIBL2: value->rValue = model->B4SOIwpdibl2; return(OK); case B4SOI_MOD_WPDIBLB: value->rValue = model->B4SOIwpdiblb; return(OK); case B4SOI_MOD_WDROUT : value->rValue = model->B4SOIwdrout; return(OK); case B4SOI_MOD_WPVAG: value->rValue = model->B4SOIwpvag; return(OK); case B4SOI_MOD_WDELTA: value->rValue = model->B4SOIwdelta; return(OK); case B4SOI_MOD_WALPHA0: value->rValue = model->B4SOIwalpha0; return(OK); case B4SOI_MOD_WFBJTII: value->rValue = model->B4SOIwfbjtii; return(OK); /*4.1 Iii model*/ case B4SOI_MOD_WEBJTII: value->rValue = model->B4SOIwebjtii; return(OK); case B4SOI_MOD_WCBJTII: value->rValue = model->B4SOIwcbjtii; return(OK); case B4SOI_MOD_WVBCI: value->rValue = model->B4SOIwvbci; return(OK); case B4SOI_MOD_WABJTII: value->rValue = model->B4SOIwabjtii; return(OK); case B4SOI_MOD_WMBJTII: value->rValue = model->B4SOIwmbjtii; return(OK); case B4SOI_MOD_WBETA0: value->rValue = model->B4SOIwbeta0; return(OK); case B4SOI_MOD_WBETA1: value->rValue = model->B4SOIwbeta1; return(OK); case B4SOI_MOD_WBETA2: value->rValue = model->B4SOIwbeta2; return(OK); case B4SOI_MOD_WVDSATII0: value->rValue = model->B4SOIwvdsatii0; return(OK); case B4SOI_MOD_WLII: value->rValue = model->B4SOIwlii; return(OK); case B4SOI_MOD_WESATII: value->rValue = model->B4SOIwesatii; return(OK); case B4SOI_MOD_WSII0: value->rValue = model->B4SOIwsii0; return(OK); case B4SOI_MOD_WSII1: value->rValue = model->B4SOIwsii1; return(OK); case B4SOI_MOD_WSII2: value->rValue = model->B4SOIwsii2; return(OK); case B4SOI_MOD_WSIID: value->rValue = model->B4SOIwsiid; return(OK); case B4SOI_MOD_WAGIDL: value->rValue = model->B4SOIwagidl; return(OK); case B4SOI_MOD_WBGIDL: value->rValue = model->B4SOIwbgidl; return(OK); case B4SOI_MOD_WCGIDL: value->rValue = model->B4SOIwcgidl; return(OK); case B4SOI_MOD_WEGIDL: value->rValue = model->B4SOIwegidl; return(OK); case B4SOI_MOD_WRGIDL: value->rValue = model->B4SOIwrgidl; return(OK); case B4SOI_MOD_WKGIDL: value->rValue = model->B4SOIwkgidl; return(OK); case B4SOI_MOD_WFGIDL: value->rValue = model->B4SOIwfgidl; return(OK); case B4SOI_MOD_WAGISL: value->rValue = model->B4SOIwagisl; return(OK); case B4SOI_MOD_WBGISL: value->rValue = model->B4SOIwbgisl; return(OK); case B4SOI_MOD_WCGISL: value->rValue = model->B4SOIwcgisl; return(OK); case B4SOI_MOD_WEGISL: value->rValue = model->B4SOIwegisl; return(OK); case B4SOI_MOD_WRGISL: value->rValue = model->B4SOIwrgisl; return(OK); case B4SOI_MOD_WKGISL: value->rValue = model->B4SOIwkgisl; return(OK); case B4SOI_MOD_WFGISL: value->rValue = model->B4SOIwfgisl; return(OK); case B4SOI_MOD_WNTUNS: /* v4.0 */ value->rValue = model->B4SOIwntun; return(OK); case B4SOI_MOD_WNTUND: /* v4.0 */ value->rValue = model->B4SOIwntund; return(OK); case B4SOI_MOD_WNDIODES: /* v4.0 */ value->rValue = model->B4SOIwndiode; return(OK); case B4SOI_MOD_WNDIODED: /* v4.0 */ value->rValue = model->B4SOIwndioded; return(OK); case B4SOI_MOD_WNRECF0S: /* v4.0 */ value->rValue = model->B4SOIwnrecf0; return(OK); case B4SOI_MOD_WNRECF0D: /* v4.0 */ value->rValue = model->B4SOIwnrecf0d; return(OK); case B4SOI_MOD_WNRECR0S: /* v4.0 */ value->rValue = model->B4SOIwnrecr0; return(OK); case B4SOI_MOD_WNRECR0D: /* v4.0 */ value->rValue = model->B4SOIwnrecr0d; return(OK); case B4SOI_MOD_WISBJT: value->rValue = model->B4SOIwisbjt; return(OK); case B4SOI_MOD_WIDBJT: /* v4.0 */ value->rValue = model->B4SOIwidbjt; return(OK); case B4SOI_MOD_WISDIF: value->rValue = model->B4SOIwisdif; return(OK); case B4SOI_MOD_WIDDIF: /* v4.0 */ value->rValue = model->B4SOIwiddif; return(OK); case B4SOI_MOD_WISREC: value->rValue = model->B4SOIwisrec; return(OK); case B4SOI_MOD_WIDREC: /* v4.0 */ value->rValue = model->B4SOIwidrec; return(OK); case B4SOI_MOD_WISTUN: value->rValue = model->B4SOIwistun; return(OK); case B4SOI_MOD_WIDTUN: /* v4.0 */ value->rValue = model->B4SOIwidtun; return(OK); case B4SOI_MOD_WVREC0S: /* v4.0 */ value->rValue = model->B4SOIwvrec0; return(OK); case B4SOI_MOD_WVREC0D: /* v4.0 */ value->rValue = model->B4SOIwvrec0d; return(OK); case B4SOI_MOD_WVTUN0S: /* v4.0 */ value->rValue = model->B4SOIwvtun0; return(OK); case B4SOI_MOD_WVTUN0D: /* v4.0 */ value->rValue = model->B4SOIwvtun0d; return(OK); case B4SOI_MOD_WNBJT: value->rValue = model->B4SOIwnbjt; return(OK); case B4SOI_MOD_WLBJT0: value->rValue = model->B4SOIwlbjt0; return(OK); case B4SOI_MOD_WVABJT: value->rValue = model->B4SOIwvabjt; return(OK); case B4SOI_MOD_WAELY: value->rValue = model->B4SOIwaely; return(OK); case B4SOI_MOD_WAHLIS: /* v4.0 */ value->rValue = model->B4SOIwahli; return(OK); case B4SOI_MOD_WAHLID: /* v4.0 */ value->rValue = model->B4SOIwahlid; return(OK); /* CV Model */ case B4SOI_MOD_WVSDFB: value->rValue = model->B4SOIwvsdfb; return(OK); case B4SOI_MOD_WVSDTH: value->rValue = model->B4SOIwvsdth; return(OK); case B4SOI_MOD_WDELVT: value->rValue = model->B4SOIwdelvt; return(OK); case B4SOI_MOD_WACDE: value->rValue = model->B4SOIwacde; return(OK); case B4SOI_MOD_WMOIN: value->rValue = model->B4SOIwmoin; return(OK); case B4SOI_MOD_WNOFF: value->rValue = model->B4SOIwnoff; return(OK); /* v3.2 */ /* Cross-term Dependence */ /* v3.1 */ case B4SOI_MOD_PXJ: value->rValue = model->B4SOIpxj; return(OK); case B4SOI_MOD_PALPHAGB1: value->rValue = model->B4SOIpalphaGB1; return(OK); case B4SOI_MOD_PALPHAGB2: value->rValue = model->B4SOIpalphaGB2; return(OK); case B4SOI_MOD_PBETAGB1: value->rValue = model->B4SOIpbetaGB1; return(OK); case B4SOI_MOD_PBETAGB2: value->rValue = model->B4SOIpbetaGB2; return(OK); case B4SOI_MOD_PAIGBCP2: value->rValue = model->B4SOIpaigbcp2; return(OK); case B4SOI_MOD_PBIGBCP2: value->rValue = model->B4SOIpbigbcp2; return(OK); case B4SOI_MOD_PCIGBCP2: value->rValue = model->B4SOIpcigbcp2; return(OK); case B4SOI_MOD_PNDIF: value->rValue = model->B4SOIpndif; return(OK); case B4SOI_MOD_PNTRECF: value->rValue = model->B4SOIpntrecf; return(OK); case B4SOI_MOD_PNTRECR: value->rValue = model->B4SOIpntrecr; return(OK); case B4SOI_MOD_PXBJT: value->rValue = model->B4SOIpxbjt; return(OK); case B4SOI_MOD_PXDIFS: value->rValue = model->B4SOIpxdif; return(OK); case B4SOI_MOD_PXRECS: value->rValue = model->B4SOIpxrec; return(OK); case B4SOI_MOD_PXTUNS: value->rValue = model->B4SOIpxtun; return(OK); case B4SOI_MOD_PXDIFD: value->rValue = model->B4SOIpxdifd; return(OK); case B4SOI_MOD_PXRECD: value->rValue = model->B4SOIpxrecd; return(OK); case B4SOI_MOD_PXTUND: value->rValue = model->B4SOIpxtund; return(OK); case B4SOI_MOD_PCGDL: value->rValue = model->B4SOIpcgdl; return(OK); case B4SOI_MOD_PCGSL: value->rValue = model->B4SOIpcgsl; return(OK); case B4SOI_MOD_PCKAPPA: value->rValue = model->B4SOIpckappa; return(OK); case B4SOI_MOD_PUTE: value->rValue = model->B4SOIpute; return(OK); case B4SOI_MOD_PKT1: value->rValue = model->B4SOIpkt1; return(OK); case B4SOI_MOD_PKT2: value->rValue = model->B4SOIpkt2; return(OK); case B4SOI_MOD_PKT1L: value->rValue = model->B4SOIpkt1l; return(OK); case B4SOI_MOD_PUA1: value->rValue = model->B4SOIpua1; return(OK); case B4SOI_MOD_PUB1: value->rValue = model->B4SOIpub1; return(OK); case B4SOI_MOD_PUC1: value->rValue = model->B4SOIpuc1; return(OK); case B4SOI_MOD_PAT: value->rValue = model->B4SOIpat; return(OK); case B4SOI_MOD_PPRT: value->rValue = model->B4SOIpprt; return(OK); /* v3.0 */ case B4SOI_MOD_PAIGC: value->rValue = model->B4SOIpaigc; return(OK); case B4SOI_MOD_PBIGC: value->rValue = model->B4SOIpbigc; return(OK); case B4SOI_MOD_PCIGC: value->rValue = model->B4SOIpcigc; return(OK); case B4SOI_MOD_PAIGSD: value->rValue = model->B4SOIpaigsd; return(OK); case B4SOI_MOD_PBIGSD: value->rValue = model->B4SOIpbigsd; return(OK); case B4SOI_MOD_PCIGSD: value->rValue = model->B4SOIpcigsd; return(OK); case B4SOI_MOD_PNIGC: value->rValue = model->B4SOIpnigc; return(OK); case B4SOI_MOD_PPIGCD: value->rValue = model->B4SOIppigcd; return(OK); case B4SOI_MOD_PPOXEDGE: value->rValue = model->B4SOIppoxedge; return(OK); case B4SOI_MOD_PNPEAK: value->rValue = model->B4SOIpnpeak; return(OK); case B4SOI_MOD_PNSUB: value->rValue = model->B4SOIpnsub; return(OK); case B4SOI_MOD_PNGATE: value->rValue = model->B4SOIpngate; return(OK); case B4SOI_MOD_PNSD: value->rValue = model->B4SOIpnsd; return(OK); case B4SOI_MOD_PVTH0: value->rValue = model->B4SOIpvth0; return(OK); case B4SOI_MOD_PVFB: value->rValue = model->B4SOIpvfb; return(OK); /* v4.1 */ case B4SOI_MOD_PK1: value->rValue = model->B4SOIpk1; return(OK); case B4SOI_MOD_PK1W1: value->rValue = model->B4SOIpk1w1; return(OK); case B4SOI_MOD_PK1W2: value->rValue = model->B4SOIpk1w2; return(OK); case B4SOI_MOD_PK2: value->rValue = model->B4SOIpk2; return(OK); case B4SOI_MOD_PK3: value->rValue = model->B4SOIpk3; return(OK); case B4SOI_MOD_PK3B: value->rValue = model->B4SOIpk3b; return(OK); case B4SOI_MOD_PKB1: value->rValue = model->B4SOIpkb1; return(OK); case B4SOI_MOD_PW0: value->rValue = model->B4SOIpw0; return(OK); case B4SOI_MOD_PLPE0: value->rValue = model->B4SOIplpe0; return(OK); case B4SOI_MOD_PLPEB: /* v4.0 for Vth */ value->rValue = model->B4SOIplpeb; return(OK); case B4SOI_MOD_PDVT0 : value->rValue = model->B4SOIpdvt0; return(OK); case B4SOI_MOD_PDVT1 : value->rValue = model->B4SOIpdvt1; return(OK); case B4SOI_MOD_PDVT2 : value->rValue = model->B4SOIpdvt2; return(OK); case B4SOI_MOD_PDVT0W : value->rValue = model->B4SOIpdvt0w; return(OK); case B4SOI_MOD_PDVT1W : value->rValue = model->B4SOIpdvt1w; return(OK); case B4SOI_MOD_PDVT2W : value->rValue = model->B4SOIpdvt2w; return(OK); case B4SOI_MOD_PU0: value->rValue = model->B4SOIpu0; return(OK); case B4SOI_MOD_PUA: value->rValue = model->B4SOIpua; return(OK); case B4SOI_MOD_PUB: value->rValue = model->B4SOIpub; return(OK); case B4SOI_MOD_PUC: value->rValue = model->B4SOIpuc; return(OK); case B4SOI_MOD_PVSAT: value->rValue = model->B4SOIpvsat; return(OK); case B4SOI_MOD_PA0: value->rValue = model->B4SOIpa0; return(OK); case B4SOI_MOD_PAGS: value->rValue = model->B4SOIpags; return(OK); case B4SOI_MOD_PB0: value->rValue = model->B4SOIpb0; return(OK); case B4SOI_MOD_PB1: value->rValue = model->B4SOIpb1; return(OK); case B4SOI_MOD_PKETA: value->rValue = model->B4SOIpketa; return(OK); case B4SOI_MOD_PKETAS: value->rValue = model->B4SOIpketas; return(OK); case B4SOI_MOD_PA1: value->rValue = model->B4SOIpa1; return(OK); case B4SOI_MOD_PA2: value->rValue = model->B4SOIpa2; return(OK); case B4SOI_MOD_PRDSW: value->rValue = model->B4SOIprdsw; return(OK); case B4SOI_MOD_PRDW: value->rValue = model->B4SOIprdw; return(OK); case B4SOI_MOD_PRSW: value->rValue = model->B4SOIprsw; return(OK); case B4SOI_MOD_PPRWB: value->rValue = model->B4SOIpprwb; return(OK); case B4SOI_MOD_PPRWG: value->rValue = model->B4SOIpprwg; return(OK); case B4SOI_MOD_PWR: value->rValue = model->B4SOIpwr; return(OK); case B4SOI_MOD_PNFACTOR : value->rValue = model->B4SOIpnfactor; return(OK); case B4SOI_MOD_PDWG: value->rValue = model->B4SOIpdwg; return(OK); case B4SOI_MOD_PDWB: value->rValue = model->B4SOIpdwb; return(OK); case B4SOI_MOD_PVOFF: value->rValue = model->B4SOIpvoff; return(OK); case B4SOI_MOD_PETA0: value->rValue = model->B4SOIpeta0; return(OK); case B4SOI_MOD_PETAB: value->rValue = model->B4SOIpetab; return(OK); case B4SOI_MOD_PDSUB : value->rValue = model->B4SOIpdsub; return(OK); case B4SOI_MOD_PCIT : value->rValue = model->B4SOIpcit; return(OK); case B4SOI_MOD_PCDSC : value->rValue = model->B4SOIpcdsc; return(OK); case B4SOI_MOD_PCDSCB : value->rValue = model->B4SOIpcdscb; return(OK); case B4SOI_MOD_PCDSCD : value->rValue = model->B4SOIpcdscd; return(OK); case B4SOI_MOD_PPCLM: value->rValue = model->B4SOIppclm; return(OK); case B4SOI_MOD_PPDIBL1: value->rValue = model->B4SOIppdibl1; return(OK); case B4SOI_MOD_PPDIBL2: value->rValue = model->B4SOIppdibl2; return(OK); case B4SOI_MOD_PPDIBLB: value->rValue = model->B4SOIppdiblb; return(OK); case B4SOI_MOD_PDROUT : value->rValue = model->B4SOIpdrout; return(OK); case B4SOI_MOD_PPVAG: value->rValue = model->B4SOIppvag; return(OK); case B4SOI_MOD_PDELTA: value->rValue = model->B4SOIpdelta; return(OK); case B4SOI_MOD_PALPHA0: value->rValue = model->B4SOIpalpha0; return(OK); case B4SOI_MOD_PFBJTII: value->rValue = model->B4SOIpfbjtii; return(OK); /*4.1 Iii model*/ case B4SOI_MOD_PEBJTII: value->rValue = model->B4SOIpebjtii; return(OK); case B4SOI_MOD_PCBJTII: value->rValue = model->B4SOIpcbjtii; return(OK); case B4SOI_MOD_PVBCI: value->rValue = model->B4SOIpvbci; return(OK); case B4SOI_MOD_PABJTII: value->rValue = model->B4SOIpabjtii; return(OK); case B4SOI_MOD_PMBJTII: value->rValue = model->B4SOIpmbjtii; return(OK); case B4SOI_MOD_PBETA0: value->rValue = model->B4SOIpbeta0; return(OK); case B4SOI_MOD_PBETA1: value->rValue = model->B4SOIpbeta1; return(OK); case B4SOI_MOD_PBETA2: value->rValue = model->B4SOIpbeta2; return(OK); case B4SOI_MOD_PVDSATII0: value->rValue = model->B4SOIpvdsatii0; return(OK); case B4SOI_MOD_PLII: value->rValue = model->B4SOIplii; return(OK); case B4SOI_MOD_PESATII: value->rValue = model->B4SOIpesatii; return(OK); case B4SOI_MOD_PSII0: value->rValue = model->B4SOIpsii0; return(OK); case B4SOI_MOD_PSII1: value->rValue = model->B4SOIpsii1; return(OK); case B4SOI_MOD_PSII2: value->rValue = model->B4SOIpsii2; return(OK); case B4SOI_MOD_PSIID: value->rValue = model->B4SOIpsiid; return(OK); case B4SOI_MOD_PAGIDL: value->rValue = model->B4SOIpagidl; return(OK); case B4SOI_MOD_PBGIDL: value->rValue = model->B4SOIpbgidl; return(OK); case B4SOI_MOD_PCGIDL: value->rValue = model->B4SOIpcgidl; return(OK); case B4SOI_MOD_PEGIDL: value->rValue = model->B4SOIpegidl; return(OK); case B4SOI_MOD_PRGIDL: value->rValue = model->B4SOIprgidl; return(OK); case B4SOI_MOD_PKGIDL: value->rValue = model->B4SOIpkgidl; return(OK); case B4SOI_MOD_PFGIDL: value->rValue = model->B4SOIpfgidl; return(OK); case B4SOI_MOD_PAGISL: value->rValue = model->B4SOIpagisl; return(OK); case B4SOI_MOD_PBGISL: value->rValue = model->B4SOIpbgisl; return(OK); case B4SOI_MOD_PCGISL: value->rValue = model->B4SOIpcgisl; return(OK); case B4SOI_MOD_PEGISL: value->rValue = model->B4SOIpegisl; return(OK); case B4SOI_MOD_PRGISL: value->rValue = model->B4SOIprgisl; return(OK); case B4SOI_MOD_PKGISL: value->rValue = model->B4SOIpkgisl; return(OK); case B4SOI_MOD_PFGISL: value->rValue = model->B4SOIpfgisl; return(OK); case B4SOI_MOD_PNTUNS: /* v4.0 */ value->rValue = model->B4SOIpntun; return(OK); case B4SOI_MOD_PNTUND: /* v4.0 */ value->rValue = model->B4SOIpntund; return(OK); case B4SOI_MOD_PNDIODES: /* v4.0 */ value->rValue = model->B4SOIpndiode; return(OK); case B4SOI_MOD_PNDIODED: /* v4.0 */ value->rValue = model->B4SOIpndioded; return(OK); case B4SOI_MOD_PNRECF0S: /* v4.0 */ value->rValue = model->B4SOIpnrecf0; return(OK); case B4SOI_MOD_PNRECF0D: /* v4.0 */ value->rValue = model->B4SOIpnrecf0d; return(OK); case B4SOI_MOD_PNRECR0S: /* v4.0 */ value->rValue = model->B4SOIpnrecr0; return(OK); case B4SOI_MOD_PNRECR0D: /* v4.0 */ value->rValue = model->B4SOIpnrecr0d; return(OK); case B4SOI_MOD_PISBJT: value->rValue = model->B4SOIpisbjt; return(OK); case B4SOI_MOD_PIDBJT: /* v4.0 */ value->rValue = model->B4SOIpidbjt; return(OK); case B4SOI_MOD_PISDIF: value->rValue = model->B4SOIpisdif; return(OK); case B4SOI_MOD_PIDDIF: /* v4.0 */ value->rValue = model->B4SOIpiddif; return(OK); case B4SOI_MOD_PISREC: value->rValue = model->B4SOIpisrec; return(OK); case B4SOI_MOD_PIDREC: /* v4.0 */ value->rValue = model->B4SOIpidrec; return(OK); case B4SOI_MOD_PISTUN: value->rValue = model->B4SOIpistun; return(OK); case B4SOI_MOD_PIDTUN: /* v4.0 */ value->rValue = model->B4SOIpidtun; return(OK); case B4SOI_MOD_PVREC0S: /* v4.0 */ value->rValue = model->B4SOIpvrec0; return(OK); case B4SOI_MOD_PVREC0D: /* v4.0 */ value->rValue = model->B4SOIpvrec0d; return(OK); case B4SOI_MOD_PVTUN0S: /* v4.0 */ value->rValue = model->B4SOIpvtun0; return(OK); case B4SOI_MOD_PVTUN0D: /* v4.0 */ value->rValue = model->B4SOIpvtun0d; return(OK); case B4SOI_MOD_PNBJT: value->rValue = model->B4SOIpnbjt; return(OK); case B4SOI_MOD_PLBJT0: value->rValue = model->B4SOIplbjt0; return(OK); case B4SOI_MOD_PVABJT: value->rValue = model->B4SOIpvabjt; return(OK); case B4SOI_MOD_PAELY: value->rValue = model->B4SOIpaely; return(OK); case B4SOI_MOD_PAHLIS: /* v4.0 */ value->rValue = model->B4SOIpahli; return(OK); case B4SOI_MOD_PAHLID: /* v4.0 */ value->rValue = model->B4SOIpahlid; return(OK); /* CV Model */ case B4SOI_MOD_PVSDFB: value->rValue = model->B4SOIpvsdfb; return(OK); case B4SOI_MOD_PVSDTH: value->rValue = model->B4SOIpvsdth; return(OK); case B4SOI_MOD_PDELVT: value->rValue = model->B4SOIpdelvt; return(OK); case B4SOI_MOD_PACDE: value->rValue = model->B4SOIpacde; return(OK); case B4SOI_MOD_PMOIN: value->rValue = model->B4SOIpmoin; return(OK); case B4SOI_MOD_PNOFF: value->rValue = model->B4SOIpnoff; return(OK); /* v3.2 */ /* Added for binning - END */ case B4SOI_MOD_VGS_MAX: value->rValue = model->B4SOIvgsMax; return(OK); case B4SOI_MOD_VGD_MAX: value->rValue = model->B4SOIvgdMax; return(OK); case B4SOI_MOD_VGB_MAX: value->rValue = model->B4SOIvgbMax; return(OK); case B4SOI_MOD_VDS_MAX: value->rValue = model->B4SOIvdsMax; return(OK); case B4SOI_MOD_VBS_MAX: value->rValue = model->B4SOIvbsMax; return(OK); case B4SOI_MOD_VBD_MAX: value->rValue = model->B4SOIvbdMax; return(OK); case B4SOI_MOD_VGSR_MAX: value->rValue = model->B4SOIvgsrMax; return(OK); case B4SOI_MOD_VGDR_MAX: value->rValue = model->B4SOIvgdrMax; return(OK); case B4SOI_MOD_VGBR_MAX: value->rValue = model->B4SOIvgbrMax; return(OK); case B4SOI_MOD_VBSR_MAX: value->rValue = model->B4SOIvbsrMax; return(OK); case B4SOI_MOD_VBDR_MAX: value->rValue = model->B4SOIvbdrMax; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsimsoi/b4soiext.h0000644000175000017500000000304513546075722022544 0ustar carstencarsten/********** Copyright 2010 Regents of the University of California. All rights reserved. Author: 2005 Hui Wan (based on Samuel Fung's b3soiext.h) Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu. Authors: 2009- Tanvir Morshed, Ali Niknejad, Chenming Hu. Authors: 2010- Tanvir Morshed, Ali Niknejad, Chenming Hu. File: b4soiext.h **********/ extern int B4SOIacLoad(GENmodel *,CKTcircuit*); extern int B4SOIask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*); extern int B4SOIconvTest(GENmodel *,CKTcircuit*); extern int B4SOIgetic(GENmodel*,CKTcircuit*); extern int B4SOIload(GENmodel*,CKTcircuit*); extern int B4SOImAsk(CKTcircuit*,GENmodel *,int, IFvalue*); extern int B4SOImDelete(GENmodel*); extern int B4SOImParam(int,IFvalue*,GENmodel*); extern void B4SOImosCap(CKTcircuit*, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*); extern int B4SOIparam(int,IFvalue*,GENinstance*,IFvalue*); extern int B4SOIpzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int B4SOIsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int B4SOItemp(GENmodel*,CKTcircuit*); extern int B4SOItrunc(GENmodel*,CKTcircuit*,double*); extern int B4SOInoise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int B4SOIunsetup(GENmodel*,CKTcircuit*); extern int B4SOIsoaCheck(CKTcircuit *, GENmodel *); tmpk8ny_4pz/src/spicelib/devices/bsimsoi/b4soipar.c0000644000175000017500000001743713546075722022533 0ustar carstencarsten/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/ /********** * Copyright 2010 Regents of the University of California. All rights reserved. * Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang * Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soipar.c * Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu. * Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu. * File: b4soipar.c * Modified by Hui Wan, Xuemei Xi 11/30/2005 * Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009 * Modified by Tanvir Morshed 09/22/2009 * Modified by Tanvir Morshed 12/31/2009 **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "b4soidef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/fteext.h" int B4SOIparam( int param, IFvalue *value, GENinstance *inst, IFvalue *select) { double scale; B4SOIinstance *here = (B4SOIinstance*)inst; NG_IGNORE(select); if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; switch(param) { case B4SOI_W: here->B4SOIw = value->rValue * scale; here->B4SOIwGiven = TRUE; break; case B4SOI_L: here->B4SOIl = value->rValue * scale; here->B4SOIlGiven = TRUE; break; case B4SOI_M: here->B4SOIm = value->rValue; here->B4SOImGiven = TRUE; break; case B4SOI_AS: here->B4SOIsourceArea = value->rValue * scale * scale; here->B4SOIsourceAreaGiven = TRUE; break; case B4SOI_AD: here->B4SOIdrainArea = value->rValue * scale * scale; here->B4SOIdrainAreaGiven = TRUE; break; case B4SOI_PS: here->B4SOIsourcePerimeter = value->rValue * scale; here->B4SOIsourcePerimeterGiven = TRUE; break; case B4SOI_PD: here->B4SOIdrainPerimeter = value->rValue * scale; here->B4SOIdrainPerimeterGiven = TRUE; break; case B4SOI_NRS: here->B4SOIsourceSquares = value->rValue; here->B4SOIsourceSquaresGiven = TRUE; break; case B4SOI_NRD: here->B4SOIdrainSquares = value->rValue; here->B4SOIdrainSquaresGiven = TRUE; break; case B4SOI_OFF: here->B4SOIoff = value->iValue; here->B4SOIoffGiven = TRUE; break; case B4SOI_IC_VBS: here->B4SOIicVBS = value->rValue; here->B4SOIicVBSGiven = TRUE; break; case B4SOI_IC_VDS: here->B4SOIicVDS = value->rValue; here->B4SOIicVDSGiven = TRUE; break; case B4SOI_IC_VGS: here->B4SOIicVGS = value->rValue; here->B4SOIicVGSGiven = TRUE; break; case B4SOI_IC_VES: here->B4SOIicVES = value->rValue; here->B4SOIicVESGiven = TRUE; break; case B4SOI_IC_VPS: here->B4SOIicVPS = value->rValue; here->B4SOIicVPSGiven = TRUE; break; case B4SOI_BJTOFF: here->B4SOIbjtoff = value->iValue; here->B4SOIbjtoffGiven= TRUE; break; case B4SOI_DEBUG: here->B4SOIdebugMod = value->iValue; here->B4SOIdebugModGiven= TRUE; break; case B4SOI_RTH0: here->B4SOIrth0= value->rValue; here->B4SOIrth0Given = TRUE; break; case B4SOI_CTH0: here->B4SOIcth0= value->rValue; here->B4SOIcth0Given = TRUE; break; case B4SOI_NRB: here->B4SOIbodySquares = value->rValue; here->B4SOIbodySquaresGiven = TRUE; break; case B4SOI_FRBODY: here->B4SOIfrbody = value->rValue; here->B4SOIfrbodyGiven = TRUE; break; /* v4.0 added */ case B4SOI_RBSB: here->B4SOIrbsb = value->rValue; here->B4SOIrbsbGiven = TRUE; break; case B4SOI_RBDB: here->B4SOIrbdb = value->rValue; here->B4SOIrbdbGiven = TRUE; break; case B4SOI_SA: here->B4SOIsa = value->rValue; here->B4SOIsaGiven = TRUE; break; case B4SOI_SB: here->B4SOIsb = value->rValue; here->B4SOIsbGiven = TRUE; break; case B4SOI_SD: here->B4SOIsd = value->rValue; here->B4SOIsdGiven = TRUE; break; case B4SOI_RBODYMOD: here->B4SOIrbodyMod = value->iValue; here->B4SOIrbodyModGiven = TRUE; break; case B4SOI_NF: here->B4SOInf = value->rValue; here->B4SOInfGiven = TRUE; break; case B4SOI_DELVTO: here->B4SOIdelvto = value->rValue; here->B4SOIdelvtoGiven = TRUE; break; /* v4.0 added end */ case B4SOI_SOIMOD: here->B4SOIsoiMod = value->iValue; here->B4SOIsoiModGiven = TRUE; break; /* v3.2 */ /* v3.1 added rgate */ case B4SOI_RGATEMOD: here->B4SOIrgateMod = value->iValue; here->B4SOIrgateModGiven = TRUE; break; /* v3.1 added rgate end */ /* v2.0 release */ case B4SOI_NBC: here->B4SOInbc = value->rValue; here->B4SOInbcGiven = TRUE; break; case B4SOI_NSEG: here->B4SOInseg = value->rValue; here->B4SOInsegGiven = TRUE; break; case B4SOI_PDBCP: here->B4SOIpdbcp = value->rValue; here->B4SOIpdbcpGiven = TRUE; break; case B4SOI_PSBCP: here->B4SOIpsbcp = value->rValue; here->B4SOIpsbcpGiven = TRUE; break; case B4SOI_AGBCP: here->B4SOIagbcp = value->rValue; here->B4SOIagbcpGiven = TRUE; break; case B4SOI_AGBCP2: here->B4SOIagbcp2 = value->rValue; here->B4SOIagbcp2Given = TRUE; break; /* v4.1 */ case B4SOI_AGBCPD: here->B4SOIagbcpd = value->rValue; here->B4SOIagbcpdGiven = TRUE; break; case B4SOI_AEBCP: here->B4SOIaebcp = value->rValue; here->B4SOIaebcpGiven = TRUE; break; case B4SOI_VBSUSR: here->B4SOIvbsusr = value->rValue; here->B4SOIvbsusrGiven = TRUE; break; case B4SOI_TNODEOUT: here->B4SOItnodeout = value->iValue; here->B4SOItnodeoutGiven = TRUE; break; case B4SOI_IC: switch(value->v.numValue){ case 5: here->B4SOIicVPS = *(value->v.vec.rVec+4); here->B4SOIicVPSGiven = TRUE; break; /* v4.2 bugfix */ case 4: here->B4SOIicVES = *(value->v.vec.rVec+3); here->B4SOIicVESGiven = TRUE; break; /* v4.2 bugfix */ case 3: here->B4SOIicVBS = *(value->v.vec.rVec+2); here->B4SOIicVBSGiven = TRUE; break; /* v4.2 bugfix */ case 2: here->B4SOIicVGS = *(value->v.vec.rVec+1); here->B4SOIicVGSGiven = TRUE; break; /* v4.2 bugfix */ case 1: here->B4SOIicVDS = *(value->v.vec.rVec); here->B4SOIicVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsimsoi/b4soiinit.h0000644000175000017500000000037713546075722022714 0ustar carstencarsten#ifndef _B4SOIINIT_H #define _B4SOIINIT_H extern IFparm B4SOIpTable[]; extern IFparm B4SOImPTable[]; extern char *B4SOInames[]; extern int B4SOIpTSize; extern int B4SOImPTSize; extern int B4SOInSize; extern int B4SOIiSize; extern int B4SOImSize; #endif tmpk8ny_4pz/src/spicelib/devices/bsimsoi/b4soild.c0000644000175000017500000205426613546075722022353 0ustar carstencarsten/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/ /********** * Copyright 2010 Regents of the University of California. All rights reserved. * Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang * Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soild.c * Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu. * Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu. * File: b4soild.c * Modified by Hui Wan, Xuemei Xi 11/30/2005 * Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009 * Modified by Tanvir Morshed 09/22/2009 * Modified by Tanvir Morshed 12/31/2009 * Modified by Larry Wagner, Calvin Bittner, Geoffrey Coram, Tanvir Morshed 05/14/2010 * Modified by Larry Wagner, Calvin Bittner, 5 fixes. 08/04/2010 * Modified by Larry Wagner, Calvin Bittner, FD derivatives fixes. 08/25/2010 **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b4soidef.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" #define EPS0 8.85418e-12 /*4.1*/ #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define Charge_q 1.60219e-19 #define KboQ 8.617087e-5 /* Kb / q */ #define Eg300 1.115 /* energy gap at 300K */ #define DELTA 1.0E-9 /* v4.0 */ #define DELTA_1 0.02 #define DELTA_2 0.02 #define DELTA_3 0.02 /* Original is 0.02, for matching IBM model, change to 0.08 */ #define DELTA_3_SOI 0.08 #define DELTA_4 0.02 #define DELT_Vbseff 0.005 #define DELTA_VFB 0.02 #define OFF_Vbsitf 0.02 /* v3.1*/ #define CONST_2OV3 0.6666666666 #define MAX_EXPL 2.688117142e+43 #define MIN_EXPL 3.720075976e-44 #define EXPL_THRESHOLD 100.0 #define DEXP(A,B,C) { \ if (A > EXPL_THRESHOLD) { \ B = MAX_EXPL*(1.0+(A)-EXPL_THRESHOLD); \ C = MAX_EXPL; \ } else if (A < -EXPL_THRESHOLD) { \ B = MIN_EXPL; \ C = 0; \ } else { \ B = exp(A); \ C = B; \ } \ } #define FLOG(A) fabs(A) + 1e-14 #ifdef USE_OMP int B4SOILoadOMP(B4SOIinstance *here, CKTcircuit *ckt); void B4SOILoadRhsMat(GENmodel *inModel, CKTcircuit *ckt); #endif /* B4SOIlimit(vnew,vold) * limits the per-iteration change of any absolute voltage value */ static double B4SOIlimit( double vnew, double vold, double limit, int *check) { double T0, T1; if (isnan (vnew) || isnan (vold)) { fprintf(stderr, "Alberto says: YOU TURKEY! The limiting function received NaN.\n"); fprintf(stderr, "New prediction returns to 0.0!\n"); vnew = 0.0; *check = 1; } T0 = vnew - vold; T1 = fabs(T0); if (T1 > limit) { if (T0 > 0.0) vnew = vold + limit; else vnew = vold - limit; *check = 1; } return vnew; } int B4SOIload( GENmodel *inModel, CKTcircuit *ckt) { #ifdef USE_OMP int idx; B4SOImodel *model = (B4SOImodel*)inModel; int error = 0; B4SOIinstance **InstArray; InstArray = model->B4SOIInstanceArray; #pragma omp parallel for for (idx = 0; idx < model->B4SOIInstCount; idx++) { B4SOIinstance *here = InstArray[idx]; int local_error = B4SOILoadOMP(here, ckt); if (local_error) error = local_error; } B4SOILoadRhsMat(inModel, ckt); return error; } int B4SOILoadOMP(B4SOIinstance *here, CKTcircuit *ckt) { B4SOImodel *model = B4SOImodPtr(here); #else register B4SOImodel *model = (B4SOImodel*)inModel; register B4SOIinstance *here; #endif register int selfheat; double Gmin; double dVgstNVt_dT, dVgstNVt2_dT; /* LFW_FD */ double ag0, qgd, qgs, von, cbhat, VgstNVt, ExpVgst, dExpVgst_dT; /* enhanced line Wagner */ /* LFW_FD next 4 lines */ double dVgstNVt_dVg, dVgstNVt_dVd, dVgstNVt_dVb, dVgstNVt_dVe; double dExpVgst_dVg, dExpVgst_dVd, dExpVgst_dVb, dExpVgst_dVe, dVgstNVt2_dVg; double dVgstNVt2_dVd, dVgstNVt2_dVb, dVgstNVt2_dVe, dExpArg2_dVd, dExpArg2_dVb, dExpArg2_dVe; double dExpVgst2_dVg, dExpVgst2_dVd, dExpVgst2_dVb, dExpVgst2_dVe; double cdhat, cdreq, ceqbd, ceqbs, ceqqb, ceqqd, ceqqg, ceq, geq; double arg; double delvbd, delvbs, delvds, delvgd, delvgs; double Vfbeff, dVfbeff_dVg, dVfbeff_dVd, dVfbeff_dVe, dVfbeff_dVb, V3, V4; double PhiBSWG, MJSWG; double gcgdb, gcggb, gcgsb, gcgeb, gcgT; double gcsdb, gcsgb, gcssb, gcseb, gcsT; double gcddb, gcdgb, gcdsb, gcdeb, gcdT; double gcbdb, gcbgb, gcbsb, gcbeb, gcbT; double gcedb, gcegb, gcesb, gceeb, gceT; double gcTt, gTtg, gTtb, gTtdp, gTtt, gTtsp; double vbd, vbs, vds, vgb, vgd, vgs, vgdo; #ifndef PREDICTOR double xfact; #endif double vg, vd, vs, vp, ve, vb; double Vds, Vgs, Vbs, Gmbs, FwdSum, RevSum; double Vgs_eff, Vfb, dVfb_dVb, dVfb_dVd, dVfb_dVg, dVfb_dVe, dVfb_dT; double Phis, sqrtPhis, dsqrtPhis_dVd, dsqrtPhis_dVe, dsqrtPhis_dVb, dsqrtPhis_dVg; double Vth, dVth_dVb, dVth_dVd, dVth_dVg, dVth_dVe, dVth_dT; double Vgst, dVgst_dVg, dVgst_dVd, dVgst_dVb, dVgst_dVe, dVgst_dT, dVgs_eff_dVg, dVgs_eff_dT; double n, dn_dVb, dn_dVe, dn_dVg, Vtm; double ExpArg, dExpArg_dVg, dExpArg_dVd, dExpArg_dVb, dExpArg_dVe, dExpArg_dT, dExpArg2_dVg, dExpArg2_dT, V0; double ueff, dueff_dVg, dueff_dVd, dueff_dVb, dueff_dVe, dueff_dT; double Esat, Vdsat; double EsatL, dEsatL_dVg, dEsatL_dVd, dEsatL_dVb, dEsatL_dVe, dEsatL_dT; double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, dVdsat_dVe, dVdsat_dT, Vasat; double dVasat_dVg, dVasat_dVb, dVasat_dVd, dVasat_dVe, dVasat_dT; double Va, dVa_dVd, dVa_dVg, dVa_dVb, dVa_dVe, dVa_dT; double Vbseff, dVbseff_dVb; double CoxWL; double T0=0.0, dT0_dVg, dT0_dVd, dT0_dVe, dT0_dVb, dT0_dT; double T1, dT1_dVg, dT1_dVd, dT1_dVb, dT1_dT; double T2, dT2_dVg, dT2_dVd, dT2_dVb, dT2_dT, dT2_dVp; double T3, dT3_dVg, dT3_dVd, dT3_dVe, dT3_dVb, dT3_dT; double T4, dT4_dVe, dT4_dVg, dT4_dVd, dT4_dVb, dT4_dT; double T5, dT5_dVg, dT5_dVd, dT5_dVb, dT5_dT; double T6, dT6_dVg, dT6_dVd, dT6_dVe, dT6_dVb, dT6_dT, dT6_dVp; double T7, dT7_dVg, dT7_dVb, dT7_dVd, dT7_dVe; double T8, dT8_dVd; double T9, dT9_dVd; double T10, dT10_dVb, dT10_dVd; double T11, T12; /* LFW_FD 2 new lines */ double dT02_dVg, dT02_dVd, dT02_dVb, dT02_dVe, dT12_dVg, dT12_dVd, dT12_dVb, dT12_dVe; double dT22_dVg, dT22_dVd, dT22_dVb, dT22_dVe; double dTL0_dT, TL1, dTL1_dT, TL2, dTL2_dT, TL3, dTL3_dT, TL4, dTL4_dT, dTL5_dT; /* new line Wagner */ /* LFW_FD 1 new line */ double dTL1_dVg, dTL1_dVd, dTL1_dVb, dTL1_dVe; double dTL6_dT, dTL7_dT, dTL8_dT, dTL9_dT; /* new line Wagner */ double tmp, Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVg, dAbulk0_dVb, dAbulk0_dVd, dAbulk0_dVe; double dAbulk_dT, dAbulk0_dT, dAbulkCV_dT; /* new line Wagner */ double VACLM, dVACLM_dVg, dVACLM_dVd, dVACLM_dVb, dVACLM_dVe, dVACLM_dT; double VADIBL, dVADIBL_dVg, dVADIBL_dVd, dVADIBL_dVb, dVADIBL_dVe, dVADIBL_dT; double Xdep, dXdep_dVd, dXdep_dVe, dXdep_dVb, dXdep_dVg; double lt1, dlt1_dVd, dlt1_dVe, dlt1_dVb, dlt1_dVg; double ltw, dltw_dVd, dltw_dVe, dltw_dVb, dltw_dVg; double Delt_vth, dDelt_vth_dVd, dDelt_vth_dVe, dDelt_vth_dVb, dDelt_vth_dVg, dDelt_vth_dT; double Theta0, dTheta0_dVd, dTheta0_dVe, dTheta0_dVb, dTheta0_dVg; double TempRatio, tmp1, tmp2, tmp3, tmp4; double DIBL_Sft, dDIBL_Sft_dVd, Lambda, dLambda_dVg, dLambda_dVb, dLambda_dVd, dLambda_dVe; double dLambda_dT; /* new line Wagner */ double a1; double Vgsteff, dVgsteff_dVg, dVgsteff_dVd, dVgsteff_dVb, dVgsteff_dT; double Vdseff, dVdseff_dVg, dVdseff_dVd, dVdseff_dVb, dVdseff_dVe, dVdseff_dT; double VdseffCV, dVdseffCV_dVg, dVdseffCV_dVd, dVdseffCV_dVb, dVdseffCV_dVe; double dVdseffCV_dT; /* new line Wagner */ double diffVds; double dAbulk_dVg, dAbulk_dVd, dAbulk_dVe, dn_dVd ; double beta, dbeta_dVg, dbeta_dVd, dbeta_dVb, dbeta_dVe, dbeta_dT; double gche, dgche_dVg, dgche_dVd, dgche_dVb, dgche_dVe, dgche_dT; double fgche1, dfgche1_dVg, dfgche1_dVd, dfgche1_dVb, dfgche1_dVe, dfgche1_dT; double fgche2, dfgche2_dVg, dfgche2_dVd, dfgche2_dVb, dfgche2_dVe, dfgche2_dT; double Idl, dIdl_dVg, dIdl_dVd, dIdl_dVb, dIdl_dVe, dIdl_dT; double Ids, Gm, Gds, Gmb, dIds_dVg, dIds_dVb, dIds_dVd, dIds_dVe, dIds_dT; double CoxWovL; double Rds, dRds_dVg, dRds_dVb, dRds_dVd, dRds_dVe, dRds_dT, WVCox, WVCoxRds, dWVCoxRds_dT; double dWVCoxRds_dVg, dWVCoxRds_dVb, dWVCoxRds_dVd, dWVCoxRds_dVe; double Vgst2Vtm, dVgst2Vtm_dT, VdsatCV, dVdsatCV_dVg, dVdsatCV_dVd, dVdsatCV_dVb, dVdsatCV_dVe, dVdsatCV_dT; double Leff, Weff, dWeff_dVg, dWeff_dVb, dWeff_dVd, dWeff_dVe, dWeff_dT; double AbulkCV, dAbulkCV_dVg, dAbulkCV_dVb, dAbulkCV_dVd, dAbulkCV_dVe; double qgdo, qgso, cgdo, cgso; double dxpart, sxpart; struct b4soiSizeDependParam *pParam; int ByPass, Check, ChargeComputationNeeded=0, error; double gbbsp, gbbdp, gbbg, gbbb, gbbp, gbbT; double gddpsp, gddpdp, gddpg, gddpb, gddpT; double gsspsp, gsspdp, gsspg, gsspb, gsspT; double Gbpbs=0.0, Gbpps; double ves, ved, veb, vge=0.0, delves, vedo, delved; double vps, vpd, Vps, delvps; double Vbd, Ves, Vesfb; double DeltVthtemp, dDeltVthtemp_dVd, dDeltVthtemp_dVe, dDeltVthtemp_dVb, dDeltVthtemp_dVg, dDeltVthtemp_dT; double Vbp, dVbp_dVb; double DeltVthw, dDeltVthw_dVd, dDeltVthw_dVe, dDeltVthw_dVb, dDeltVthw_dVg, dDeltVthw_dT; double Gm0, Gds0, Gmb0, Gme0, GmT0, GmT; double dDIBL_Sft_dVg, dDIBL_Sft_dVe, dDIBL_Sft_dVb; double Igidl, Ggidld=0.0, Ggidlg, Ggidlb=0.0, Ggidlt; /* enhanced line Wagner */ double Igisl, Ggisls=0.0, Ggislg, Ggislb=0.0, Ggislt; /* enhanced line Wagner */ double Gjsd, Gjsb=0.0, GjsT, Gjdd, Gjdb=0.0, GjdT; double Ibp, Iii, Giid=0.0, Giig, Giib=0.0, GiiT, Gcd, Gcb, GcT, ceqbody, ceqbodcon; double gppb, gppp; double delTemp, deldelTemp, Temp; double ceqth, ceqqth; double K1; double qjs=0.0, gcjsbs=0.0, gcjsT; double qjd=0.0, gcjdbs=0.0, gcjdT; double qge; double ceqqe; double ni, Eg, Cbox, CboxWL; double dEg_dT; /* new line Wagner */ double cjsbs; double dVfbeff_dVrg; double qinv, qgate=0.0, qbody=0.0, qdrn=0.0, qsrc, qsub=0.0, cqgate, cqbody, cqdrn, cqsub, cqtemp; double qgate1; /* new line Wagner */ double Cgg, Cgd, Cgb, Cge; double Csg, Csd, Csb, Cse, Cbg, Cbd, Cbb, Cbe; double Cgg1, Cgb1, Cgd1, Cge1, Cbg1, Cbb1, Cbd1, Cbe1, Csg1, Csd1, Csb1, Cse1; double Vdsatii; double Ibs1 ,dIbs1_dVb ,dIbs1_dT; double Ibs2 ,dIbs2_dVb ,dIbs2_dT; double Ibs3 ,dIbs3_dVb ,dIbs3_dVd, dIbs3_dT; double Ibs4 ,dIbs4_dVb ,dIbs4_dT; double Ibd1 ,dIbd1_dVb ,dIbd1_dVd ,dIbd1_dT; double Ibd2 ,dIbd2_dVb ,dIbd2_dVd ,dIbd2_dT; double Ibd3 ,dIbd3_dVb ,dIbd3_dVd ,dIbd3_dT; double Ibd4 ,dIbd4_dVb ,dIbd4_dVd ,dIbd4_dT; double WTsi, NVtm1, NVtm2; double Ic ,dIc_dVb ,dIc_dVd; double Ibs; double Ibd; double Denomi ,dDenomi_dVg, dDenomi_dVd, dDenomi_dVb, dDenomi_dVe, dDenomi_dT; double Qsub0 ,dQsub0_dVg ,dQsub0_dVb ,dQsub0_dVd, dQsub0_dVe ; double dqgate_dT, dqgate2_dT, dqbulk_dT, dqsrc_dT, dqdrn_dT, dqbody_dT, dqsub_dT; /* new line Wagner */ double Qac0 ,dQac0_dVb ,dQac0_dVd; double Qe1 , dQe1_dVb, dQe1_dVe, dQe1_dT; double Ce1b ,Ce1e, Ce1T; double dQac0_dVrg, dQsub0_dVrg; /* for self-heating */ double vbi, vfbb, phi, sqrtPhi, Xdep0, u0temp, vsattemp; double jdifs, jdifd, djdifs_dT, djdifd_dT; double jbjts, jbjtd, djbjts_dT, djbjtd_dT; double jrecs, jrecd, djrecs_dT, djrecd_dT; double jtuns, jtund, djtuns_dT, djtund_dT; double rds0=0.0, ua, ub, uc; double dvbi_dT, dvfbb_dT, du0temp_dT; double dvsattemp_dT, drds0_dT=0.0, dua_dT, dub_dT, duc_dT, dni_dT, dVtm_dT; double dVfbeff_dT, dQac0_dT, dQsub0_dT; double CbT, CsT, CgT; double CdT; /* new line Wagner */ double rho, rho_ref, ku0temp; /* v4.0 */ double drho_dT, drho_ref_dT, dku0temp_dT; /* v4.0 */ /* v2.0 release */ double Vbsh, dVbsh_dVb; double sqrtPhisExt, dsqrtPhisExt_dVd, dsqrtPhisExt_dVe, dsqrtPhisExt_dVb, dsqrtPhisExt_dVg; double T13, T14; double dT14_dT; /* new line Wagner */ double dT11_dVb, dT11_dVd, dT11_dVe, dT13_dVb, dT13_dVd, dT13_dVe, dT14_dVb, dT14_dVd, dT14_dVe, dT13_dVg, dT14_dVg; double Vdsatii0, dVdsatii0_dT; double VgsStep, dVgsStep_dT, Ratio, dRatio_dVg, dRatio_dVb, dRatio_dVd, dRatio_dT, dTempRatio_dT; double Vdiff, dVdiff_dVg, dVdiff_dVb, dVdiff_dVd, dVdiff_dT; double dNVtm1_dT; double NVtmf, NVtmr, dNVtmf_dT, dNVtmr_dT; double TempRatioMinus1; double Ahlis, dAhlis_dT, Ahlid, dAhlid_dT ; double WsTsi, WdTsi; double dPhiBSWG_dT, dcjsbs_dT, darg_dT, ddT3_dVb_dT; double dT7_dT, dT0_dT7, dT1_dT7, dT2_dT7; double CoxWLb, CoxWLcenb; double ExpVbsNVtm, dExpVbsNVtm_dVb, dExpVbsNVtm_dT; double ExpVbdNVtm, dExpVbdNVtm_dVb, dExpVbdNVtm_dVd, dExpVbdNVtm_dT; double Ien, dIen_dT, Iendif, dIendif_dT; double Ibsdif, dIbsdif_dVb, dIbsdif_dT; double Ibddif, dIbddif_dVb, dIbddif_dT; double Ehlis, dEhlis_dVb, dEhlis_dT; double EhlisFactor, dEhlisFactor_dVb, dEhlisFactor_dT; double Ehlid, dEhlid_dVb, dEhlid_dVd, dEhlid_dT; double EhlidFactor, dEhlidFactor_dVb, dEhlidFactor_dT; double E2ndFactor, dE2ndFactor_dVb, dE2ndFactor_dVd, dE2ndFactor_dT; double dT10_dT, dT11_dT, dT13_dT, DioMax; /* LFW_FD enhance line */ double cjdbs, dcjdbs_dT; double wdios, wdiod; /* for capMod3 */ double Cox, Tox, Tcen, dTcen_dVg, dTcen_dVb, LINK, Ccen, Coxeff, dCoxeff_dVg, dCoxeff_dVb; double CoxWLcen, QovCox, dQac0_dVg, dQac0_dVe, DeltaPhi, dDeltaPhi_dVg, dDeltaPhi_dT; double dDeltaPhi_dVd, dDeltaPhi_dVb, dDeltaPhi_dVe; double dTcen_dVd, dTcen_dVe, dTcen_dT, dCoxeff_dVd, dCoxeff_dT, dCoxWLcenb_dT, qinoi, qbulk, qbulk1; double dCoxeff_dVe; double T3zb, lt1zb, ltwzb, Theta0zb; double Delt_vthzb, dDelt_vthzb_dT; double DeltVthwzb, dDeltVthwzb_dT; double DeltVthtempzb, dDeltVthtempzb_dT; double Vthzb, dVthzb_dT, Vfbzb, dVfbzb_dT; /* v3.2 */ double noff, dnoff_dVg, dnoff_dVd, dnoff_dVb, dnoff_dVe; double dnoff_dT; /* new line Wagner */ double vgmb; /* v3.1 added for RF */ double geltd, gcrg, gcrgg, gcrgd, gcrgs, gcrgb, ceqgcrg; double vges, vgms, vgedo, vgmdo, vged, vgmd, delvged, delvgmd; double delvges, delvgms, vgme; double gcgmgmb=0.0, gcgmdb, gcgmsb, gcdgmb, gcsgmb; double gcgmeb, gcegmb, qgme, qgmid=0.0, ceqqgmid; double gcgbb; double vgge, vggm; /* v3.0 */ double Igc, dIgc_dVg, dIgc_dVd, dIgc_dVe, dIgc_dVb, Igs, dIgs_dVg, dIgs_dVs, Igd, dIgd_dVg, dIgd_dVd; double Igcs, dIgcs_dVg, dIgcs_dVd, dIgcs_dVb, dIgcs_dVe, Igcd, dIgcd_dVg, dIgcd_dVd, dIgcd_dVb, dIgcd_dVe; double dIgc_dT, dIgcs_dT, dIgcd_dT; /* new line Wagner */ double vgs_eff, dvgs_eff_dvg, vgd_eff, dvgd_eff_dvg; double VxNVt, ExpVxNVt; double dVxNVt_dT; /* new line Wagner */ double gIstotg, gIstotd, gIstotb, gIstots, Istoteq; double gIdtotg, gIdtotd, gIdtotb, gIdtots, Idtoteq; double gIgtotg, gIgtotd, gIgtotb, gIgtots, Igtoteq; /* v3.0 */ double Vbsitf, dVbsitf_dVg, dVbsitf_dVd, dVbsitf_dVb, dVbsitf_dVe, dVbsitf_dT, dVbs_dVb; double dVbs_dVg, dVbs_dVd, dVbs_dVe, dVbs_dT; double dIgb1_dVe, Giie, dRatio_dVe, dVdiff_dVe; double dT1_dVe, dT5_dVe, dIgb_dVe, dVox_dVe, dVoxdepinv_dVe, dVaux_dVe; double Gme, gTte, gbbe, gddpe, gsspe; double Vbs0, dVbs0_dVg, dVbs0_dVd, dVbs0_dVe, dVbs0_dT; double Vbs0mos, dVbs0mos_dVe, dVbs0mos_dT; double Vbsmos, dVbsmos_dVg, dVbsmos_dVd, dVbsmos_dVb, dVbsmos_dVe, dVbsmos_dT; double PhiON, dPhiON_dVg, dPhiON_dVd, dPhiON_dVe, dPhiON_dT; double PhiFD, dPhiFD_dVg, dPhiFD_dVd, dPhiFD_dVe, dPhiFD_dT; double Vbs0t, dVbs0t_dVg, dVbs0t_dVd, dVbs0t_dVe, dVbs0t_dT; double VthFD, dVthFD_dVd, dVthFD_dVb, dVthFD_dVe, dVthFD_dT; double VtgsFD, ExpVtgsFD, VgstFD, ExpVgstFD; double VtgseffFD, dVtgseffFD_dVd, dVtgseffFD_dVg, dVtgseffFD_dVe, dVtgseffFD_dT; double VgsteffFD, dVgsteffFD_dVd, dVgsteffFD_dVg, dVgsteffFD_dVe, dVgsteffFD_dT; double dT2_dVe, dVbsh_dVg, dVbsh_dVd, dVbsh_dVe, dVbsh_dT; double dVgsteff_dVe, dVbseff_dVg, dVbseff_dVd, dVbseff_dVe, dVbseff_dT; /* v2.2 release */ double Vgb, dVgb_dVg, dVgb_dVd, dVgb_dVe, dVgb_dVb, Vox, dVox_dVg, dVox_dVd, dVox_dVb; double OxideRatio, Vaux, dVaux_dVg, dVaux_dVd, dVaux_dVb; double Igb, dIgb_dVg, dIgb_dVd, dIgb_dVb; double ceqgate; double dT0_dVox, Voxeff, dVoxeff_dVox; double dVox_dT, dVaux_dT, dIgb_dT; double Voxacc, dVoxacc_dVg, dVoxacc_dVd, dVoxacc_dVe, dVoxacc_dVb, dVoxacc_dT; double Voxdepinv, dVoxdepinv_dVg, dVoxdepinv_dVb, dVoxdepinv_dVd, dVoxdepinv_dT; double Igb1, dIgb1_dVg, dIgb1_dVd, dIgb1_dVb, dIgb1_dT; double Igb2, dIgb2_dVg, dIgb2_dVd, dIgb2_dVb, dIgb2_dVe, dIgb2_dT; double gigs, gigd, gigb, gigg, gigT, gige; /* LFW_FD enhance line */ double gigpg, gigpp; /* v4.0 */ double IdlovVdseff, dIdlovVdseff_dVg, dIdlovVdseff_dVd, dIdlovVdseff_dVb; double vdbs, vsbs, vdbd=0.0, vsbd, vsbdo, vbs_jct, vbd_jct; double Vsbs, Vdbd, Vdbs; double delvdbd, delvsbs, delvdbs, delvbd_jct, delvbs_jct; double gcdbdb, gcsbsb, gcsbb, gcdbb; double ceqqjd=0.0, ceqqjs=0.0; double Lpe_Vb; /* v4.0 for Vth */ double DITS_Sft, DITS_Sft2, dDITS_Sft_dVb, dDITS_Sft_dVd, dDITS_Sft2_dVd, dDITS_Sft_dT; double FP, dFP_dT, dFP_dVg, dFP_dVb, dFP_dVd, dFP_dVe; double VADITS, dVADITS_dVg, dVADITS_dVd, dVADITS_dVb, dVADITS_dVe, dVADITS_dT; /* for DITS */ double Iii_Igidl, Giigidl_b, Giigidl_d, Giigidl_g, Giigidl_e, Giigidl_T; double gjsdb; double Idbdp=0.0, Isbsp=0.0, cdbdp, csbsp, gcjdbdp, gcjsbsp, GGjdb, GGjsb; double vdes, vses, vdedo, delvdes, delvses, delvded, Isestot, cseshat, Idedtot, cdedhat; double PowWeffWr, rd0=0.0, rs0=0.0, rdwmin=0.0, rswmin=0.0, drs0_dT=0.0, drd0_dT=0.0, drswmin_dT=0.0, drdwmin_dT=0.0, Rd, dRd_dVg, dRd_dVb, dRd_dT, Rs, dRs_dVg, dRs_dVb, dRs_dT; double dgstot_dvd, dgstot_dvg, dgstot_dvs, dgstot_dvb, dgstot_dve, dgstot_dT; double dgdtot_dvd, dgdtot_dvg, dgdtot_dvs, dgdtot_dvb, dgdtot_dve, dgdtot_dT; double gstot, gstotd, gstotg, gstots, gstotb, ceqgstot; double gdtot, gdtotd, gdtotg, gdtots, gdtotb, ceqgdtot; double gdpr, gspr; /*4.1*/ double toxe, epsrox, epssub, epsgate; double Tnom, Eg0, Vtm0; double Vbci, Idsmosfet, Iiibjt; double dVbci_dT, dIiibjt_dVd, dIiibjt_dVb, dIiibjt_dT; double VgsteffVth, dT11_dVg; /* v4.1 */ /* Jun 09 */ double toxe_mob ; /* Jun 09 */ double dTheta0_dT, dn_dT, dsqrtPhisExt_dT, dT3zb_dT, dltwzb_dT, dlt1zb_dT, dTheta0zb_dT, dvth0_dT, dDIBL_Sft_dT,dtmp2_dT; /* v4.2 temp deriv */ double Vgd, Vgd_eff, dVgd_eff_dVg, dVgd_eff_dT; /* enhanced line Wagner */ double dVbs0mos_dVd; double Ig_agbcp2, dIg_agbcp2_dVg, dIg_agbcp2_dVp, dIg_agbcp2_dT; double vgp_eff, vgp=0.0, dvgp_eff_dvg, dvgp_eff_dvp, dvgp_eff_dT; /* improved body contact charge model */ double CoxWL2, CoxWLb2; double ExpVgst2, Vgsteff2, VgstNVt2, ExpArg2; double dVgsteff2_dVd, dVgsteff2_dVg, dVgsteff2_dVb, dVgsteff2_dVe, dVgsteff2_dT; double T02; double Qac02, dQac02_dVrg, dQac02_dVd, dQac02_dVg, dQac02_dVb, dQac02_dVe, dQac02_dT; double Vgs_eff2, dVgs_eff2_dVg; double Vfbzb2, dVfbzb2_dT; double Vfb2, dVfb2_dVg, dVfb2_dVd, dVfb2_dVb, dVfb2_dVe, dVfb2_dT; double Vfbeff2, dVfbeff2_dVd, dVfbeff2_dVrg, dVfbeff2_dVg, dVfbeff2_dVb, dVfbeff2_dVe, dVfbeff2_dT; double Qsub02, dQsub02_dVg, dQsub02_dVrg, dQsub02_dVd, dQsub02_dVb, dQsub02_dVe, dQsub02_dT; double VdsatCV2, dVdsatCV2_dVg, dVdsatCV2_dVb, dVdsatCV2_dVd, dVdsatCV2_dVe, dVdsatCV2_dT; double VdseffCV2, dVdseffCV2_dVg, dVdseffCV2_dVd, dVdseffCV2_dVb, dVdseffCV2_dVe, dVdseffCV2_dT; double Cbg12, Cbd12, Cbb12, Cbe12; double Cgg12, Cgd12, Cgb12, Cge12; double Csg12, Csd12, Csb12, Cse12; double Tcen2, dTcen2_dVg, dTcen2_dVd, dTcen2_dVb, dTcen2_dVe, dTcen2_dT; double Ccen2; double Coxeff2, dCoxeff2_dVg, dCoxeff2_dVd, dCoxeff2_dVb, dCoxeff2_dVe, dCoxeff2_dT; double CoxWLcenb2, dCoxWLcenb2_dT; double QovCox2; double DeltaPhi2, dDeltaPhi2_dVg, dDeltaPhi2_dVd, dDeltaPhi2_dVb, dDeltaPhi2_dVe; double dDeltaPhi2_dT; /* new line Wagner */ double CoxWLcen2; double T22, T52; double qsrc2, qbulk2; double dqsrc2_dT, dqbulk2_dT; /* new line Wagner */ double Csg2, Csd2, Csb2, Cse2; double DELTA_3_SOI2; double dphi_dT,dsqrtPhi_dT,dXdep0_dT,cdep0,theta0vb0,dtheta0vb0_dT; double thetaRout,dthetaRout_dT,dcdep0_dT; double dPhis_dT,dsqrtPhis_dT,dXdep_dT,dlt1_dT,dltw_dT; double agidl, bgidl, cgidl, egidl, rgidl, kgidl, fgidl; double agisl, bgisl, cgisl, egisl, rgisl, kgisl, fgisl; double ucs, ud; /* Bugfix # 21 Jul09*/ double ndiode, ndioded; /* v4.2 bugfix */ double nrecf0s, nrecf0d, nrecr0s, nrecr0d, vrec0s, vrec0d, ntuns, ntund, vtun0s,vtun0d;/*bugfix for junction DC swapping */ double eggbcp2, eggdep, agb1, bgb1, agb2, bgb2, agbc2n, agbc2p, bgbc2n, bgbc2p, Vtm00; /* v4.3.1 bugfix for mtrlMod=1 -Tanvir */ double m; #ifndef USE_OMP for (; model != NULL; model = B4SOInextModel(model)) { for (here = B4SOIinstances(model); here != NULL; here = B4SOInextInstance(here)) { #endif Check = 0; ByPass = 0; selfheat = (model->B4SOIshMod == 1) && (here->B4SOIrth0 != 0.0); pParam = here->pParam; if ((ckt->CKTmode & MODEINITSMSIG)) { vs = *(ckt->CKTrhsOld + here->B4SOIsNodePrime); if (!here->B4SOIvbsusrGiven) { vbs = *(ckt->CKTstate0 + here->B4SOIvbs); vb = *(ckt->CKTrhsOld + here->B4SOIbNode); } else { vbs = here->B4SOIvbsusr; vb = here->B4SOIvbsusr + vs; } vgs = *(ckt->CKTstate0 + here->B4SOIvgs); ves = *(ckt->CKTstate0 + here->B4SOIves); vps = *(ckt->CKTstate0 + here->B4SOIvps); vds = *(ckt->CKTstate0 + here->B4SOIvds); delTemp = *(ckt->CKTstate0 + here->B4SOIdeltemp); /* v4.0 */ vdbs = *(ckt->CKTstate0 + here->B4SOIvdbs); /* v4.0 for rbody */ vdbd = *(ckt->CKTstate0 + here->B4SOIvdbd); /* v4.0 for rbody */ vsbs = *(ckt->CKTstate0 + here->B4SOIvsbs); /* v4.0 for rbody */ vses = *(ckt->CKTstate0 + here->B4SOIvses); /* v4.0 for rdsmod*/ vdes = *(ckt->CKTstate0 + here->B4SOIvdes); /* v4.0 for rdsmod*/ /* v4.0 end */ vg = *(ckt->CKTrhsOld + here->B4SOIgNode); vd = *(ckt->CKTrhsOld + here->B4SOIdNodePrime); vp = *(ckt->CKTrhsOld + here->B4SOIpNode); ve = *(ckt->CKTrhsOld + here->B4SOIeNode); /* v3.1 added for RF */ vgge = *(ckt->CKTrhsOld + here->B4SOIgNodeExt); vggm = *(ckt->CKTrhsOld + here->B4SOIgNodeMid); vges = *(ckt->CKTstate0 + here->B4SOIvges); vgms = *(ckt->CKTstate0 + here->B4SOIvgms); /* v3.1 added for RF end*/ } else if ((ckt->CKTmode & MODEINITTRAN)) { vs = *(ckt->CKTrhsOld + here->B4SOIsNodePrime); if (!here->B4SOIvbsusrGiven) { vbs = *(ckt->CKTstate1 + here->B4SOIvbs); vb = *(ckt->CKTrhsOld + here->B4SOIbNode); } else { vbs = here->B4SOIvbsusr; vb = here->B4SOIvbsusr + vs; } vgs = *(ckt->CKTstate1 + here->B4SOIvgs); ves = *(ckt->CKTstate1 + here->B4SOIves); vps = *(ckt->CKTstate1 + here->B4SOIvps); vds = *(ckt->CKTstate1 + here->B4SOIvds); delTemp = *(ckt->CKTstate1 + here->B4SOIdeltemp); /* v4.0 */ vdbs = *(ckt->CKTstate1 + here->B4SOIvdbs); /* v4.0 for rbody */ vsbs = *(ckt->CKTstate1 + here->B4SOIvsbs); /* v4.0 for rbody */ vses = *(ckt->CKTstate1 + here->B4SOIvses); /* v4.0 for rdsmod */ vdes = *(ckt->CKTstate1 + here->B4SOIvdes); /* v4.0 for rdsmod */ /* v4.0 end */ vg = *(ckt->CKTrhsOld + here->B4SOIgNode); vd = *(ckt->CKTrhsOld + here->B4SOIdNodePrime); vp = *(ckt->CKTrhsOld + here->B4SOIpNode); ve = *(ckt->CKTrhsOld + here->B4SOIeNode); /* v3.1 added for RF */ vgge = *(ckt->CKTrhsOld + here->B4SOIgNodeExt); vggm = *(ckt->CKTrhsOld + here->B4SOIgNodeMid); vges = *(ckt->CKTstate1 + here->B4SOIvges); vgms = *(ckt->CKTstate1 + here->B4SOIvgms); /* v3.1 added for RF end*/ } else if ((ckt->CKTmode & MODEINITJCT) && !here->B4SOIoff) { vds = model->B4SOItype * here->B4SOIicVDS; vgs = model->B4SOItype * here->B4SOIicVGS; ves = model->B4SOItype * here->B4SOIicVES; vbs = model->B4SOItype * here->B4SOIicVBS; vps = model->B4SOItype * here->B4SOIicVPS; vdbs = vsbs = vbs; /* v4.0 */ vg = vd = vs = vp = ve = 0.0; /* v3.1 added for RF */ vges = vgms = vgs; vgge = vggm =0.0; /* v3.1 added for RF end*/ if (vds > 0.0) /* v4.0 */ { vdes = vds + 0.01; vses = -0.01; } else if (vds < 0.0) { vdes = vds - 0.01; vses = 0.01; } else vdes = vses = 0.0; delTemp = 0.0; here->B4SOIphi = pParam->B4SOIphi; if ((vds == 0.0) && (vgs == 0.0) && (vbs == 0.0) && ((ckt->CKTmode & (MODETRAN | MODEAC|MODEDCOP | MODEDCTRANCURVE)) || (!(ckt->CKTmode & MODEUIC)))) { /* vgs = model->B4SOItype*0.1 + here->B4SOIvth0; */ vgs = model->B4SOItype * here->B4SOIvth0 + 0.1; /* v4.0 */ vds = 0.0; ves = 0.0; vps = 0.0; vges = vgms = vgs; /* v3.1 */ vbs = vdbs = vsbs = 0.0; /* v4.0 */ vdes = 0.01; /* v4.0 for rdsmod */ vses = -0.01; /* v4.0 for rdsmod */ } } else if ((ckt->CKTmode & (MODEINITJCT | MODEINITFIX)) && (here->B4SOIoff)) { delTemp = vps = vbs = vgs = vds = ves = 0.0; vg = vd = vs = vp = ve = 0.0; vgge = vggm = 0.0; /* v3.1 */ vges = vgms =0.0; /* v3.1 */ vdbs = vsbs = vdes = vses = 0.0; /* v4.0 */ } else { #ifndef PREDICTOR if ((ckt->CKTmode & MODEINITPRED)) { xfact = ckt->CKTdelta / ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->B4SOIvbs) = *(ckt->CKTstate1 + here->B4SOIvbs); vbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B4SOIvbs)) - (xfact * (*(ckt->CKTstate2 + here->B4SOIvbs))); *(ckt->CKTstate0 + here->B4SOIvgs) = *(ckt->CKTstate1 + here->B4SOIvgs); vgs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B4SOIvgs)) - (xfact * (*(ckt->CKTstate2 + here->B4SOIvgs))); *(ckt->CKTstate0 + here->B4SOIves) = *(ckt->CKTstate1 + here->B4SOIves); ves = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B4SOIves)) - (xfact * (*(ckt->CKTstate2 + here->B4SOIves))); *(ckt->CKTstate0 + here->B4SOIvps) = *(ckt->CKTstate1 + here->B4SOIvps); vps = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B4SOIvps)) - (xfact * (*(ckt->CKTstate2 + here->B4SOIvps))); *(ckt->CKTstate0 + here->B4SOIvds) = *(ckt->CKTstate1 + here->B4SOIvds); vds = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B4SOIvds)) - (xfact * (*(ckt->CKTstate2 + here->B4SOIvds))); *(ckt->CKTstate0 + here->B4SOIvbd) = *(ckt->CKTstate0 + here->B4SOIvbs) - *(ckt->CKTstate0 + here->B4SOIvds); /* v4.0 */ *(ckt->CKTstate0 + here->B4SOIvdbs) = *(ckt->CKTstate1 + here->B4SOIvdbs); vdbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B4SOIvdbs)) - (xfact * (*(ckt->CKTstate2 + here->B4SOIvdbs))); *(ckt->CKTstate0 + here->B4SOIvdbd) = *(ckt->CKTstate0 + here->B4SOIvdbs) - *(ckt->CKTstate0 + here->B4SOIvds); *(ckt->CKTstate0 + here->B4SOIvsbs) = *(ckt->CKTstate1 + here->B4SOIvsbs); vsbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B4SOIvsbs)) - (xfact * (*(ckt->CKTstate2 + here->B4SOIvsbs))); *(ckt->CKTstate0 + here->B4SOIvses) = *(ckt->CKTstate1 + here->B4SOIvses); vses = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B4SOIvses)) - (xfact * (*(ckt->CKTstate2 + here->B4SOIvses))); *(ckt->CKTstate0 + here->B4SOIvdes) = *(ckt->CKTstate1 + here->B4SOIvdes); vdes = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B4SOIvdes)) - (xfact * (*(ckt->CKTstate2 + here->B4SOIvdes))); /* v4.0 end */ *(ckt->CKTstate0 + here->B4SOIvg) = *(ckt->CKTstate1 + here->B4SOIvg); *(ckt->CKTstate0 + here->B4SOIvd) = *(ckt->CKTstate1 + here->B4SOIvd); *(ckt->CKTstate0 + here->B4SOIvs) = *(ckt->CKTstate1 + here->B4SOIvs); *(ckt->CKTstate0 + here->B4SOIvp) = *(ckt->CKTstate1 + here->B4SOIvp); *(ckt->CKTstate0 + here->B4SOIve) = *(ckt->CKTstate1 + here->B4SOIve); /* v3.1 added for RF */ *(ckt->CKTstate0 + here->B4SOIvgge) = *(ckt->CKTstate1 + here->B4SOIvgge); *(ckt->CKTstate0 + here->B4SOIvggm) = *(ckt->CKTstate1 + here->B4SOIvggm); *(ckt->CKTstate0 + here->B4SOIvges) = *(ckt->CKTstate1 + here->B4SOIvges); vges = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B4SOIvges)) - (xfact * (*(ckt->CKTstate2 + here->B4SOIvges))); *(ckt->CKTstate0 + here->B4SOIvgms) = *(ckt->CKTstate1 + here->B4SOIvgms); vgms = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B4SOIvgms)) - (xfact * (*(ckt->CKTstate2 + here->B4SOIvgms))); /* v3.1 added for RF end */ /* Only predict ve */ ve = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B4SOIve)) - (xfact * (*(ckt->CKTstate2 + here->B4SOIve))); /* Then update vg, vs, vb, vd, vp base on ve */ vs = ve - model->B4SOItype * ves; vg = model->B4SOItype * vgs + vs; vd = model->B4SOItype * vds + vs; vb = model->B4SOItype * vbs + vs; vp = model->B4SOItype * vps + vs; vgge = model->B4SOItype * vges + vs; /* v3.1 */ vggm = model->B4SOItype * vgms + vs; /* v3.1 */ delTemp = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B4SOIdeltemp))-(xfact * (*(ckt->CKTstate2 + here->B4SOIdeltemp))); /* v2.2.3 bug fix */ *(ckt->CKTstate0 + here->B4SOIdeltemp) = *(ckt->CKTstate1 + here->B4SOIdeltemp); /* if (selfheat) { here->B4SOIphi = 2.0 * here->B4SOIvtm * log(pParam->B4SOInpeak / here->B4SOIni); } v4.2 bugfix never used in the code */ } else { #endif /* PREDICTOR */ vg = B4SOIlimit(*(ckt->CKTrhsOld + here->B4SOIgNode), *(ckt->CKTstate0 + here->B4SOIvg), 3.0, &Check); vd = B4SOIlimit(*(ckt->CKTrhsOld + here->B4SOIdNodePrime), *(ckt->CKTstate0 + here->B4SOIvd), 3.0, &Check); vs = B4SOIlimit(*(ckt->CKTrhsOld + here->B4SOIsNodePrime), *(ckt->CKTstate0 + here->B4SOIvs), 3.0, &Check); vp = B4SOIlimit(*(ckt->CKTrhsOld + here->B4SOIpNode), *(ckt->CKTstate0 + here->B4SOIvp), 3.0, &Check); ve = B4SOIlimit(*(ckt->CKTrhsOld + here->B4SOIeNode), *(ckt->CKTstate0 + here->B4SOIve), 3.0, &Check); /* v3.1 added for RF */ vgge = B4SOIlimit(*(ckt->CKTrhsOld + here->B4SOIgNodeExt), *(ckt->CKTstate0 + here->B4SOIvgge), 3.0, &Check); vggm = B4SOIlimit(*(ckt->CKTrhsOld + here->B4SOIgNodeMid), *(ckt->CKTstate0 + here->B4SOIvggm), 3.0, &Check); /* v3.1 added for RF end */ delTemp = *(ckt->CKTrhsOld + here->B4SOItempNode); vbs = model->B4SOItype * (*(ckt->CKTrhsOld+here->B4SOIbNode) - *(ckt->CKTrhsOld+here->B4SOIsNodePrime)); vps = model->B4SOItype * (vp - vs); vgs = model->B4SOItype * (vg - vs); ves = model->B4SOItype * (ve - vs); vds = model->B4SOItype * (vd - vs); vges = model->B4SOItype * (vgge - vs); /* v3.1 */ vgms = model->B4SOItype * (vggm - vs); /* v3.1 */ /* v4.0 */ vdbs = model->B4SOItype * (*(ckt->CKTrhsOld + here->B4SOIdbNode) - *(ckt->CKTrhsOld + here->B4SOIsNodePrime)); vsbs = model->B4SOItype * (*(ckt->CKTrhsOld + here->B4SOIsbNode) - *(ckt->CKTrhsOld + here->B4SOIsNodePrime)); vses = model->B4SOItype * (*(ckt->CKTrhsOld + here->B4SOIsNode) - *(ckt->CKTrhsOld + here->B4SOIsNodePrime)); vdes = model->B4SOItype * (*(ckt->CKTrhsOld + here->B4SOIdNode) - *(ckt->CKTrhsOld + here->B4SOIsNodePrime)); /* v4.0 end */ #ifndef PREDICTOR } #endif /* PREDICTOR */ vbd = vbs - vds; vdbd = vdbs - vds; /* v4.0 */ vgd = vgs - vds; ved = ves - vds; vgdo = *(ckt->CKTstate0 + here->B4SOIvgs) - *(ckt->CKTstate0 + here->B4SOIvds); vedo = *(ckt->CKTstate0 + here->B4SOIves) - *(ckt->CKTstate0 + here->B4SOIvds); /* v3.1 for RF */ vgedo = *(ckt->CKTstate0 + here->B4SOIvges) - *(ckt->CKTstate0 + here->B4SOIvds); vgmdo = *(ckt->CKTstate0 + here->B4SOIvgms) - *(ckt->CKTstate0 + here->B4SOIvds); vged = vges - vds; vgmd = vgms - vds; delvged = vged - vgedo; delvgmd = vgmd - vgmdo; /* v3.1 for RF end*/ delvbs = vbs - *(ckt->CKTstate0 + here->B4SOIvbs); delvbd = vbd - *(ckt->CKTstate0 + here->B4SOIvbd); delvgs = vgs - *(ckt->CKTstate0 + here->B4SOIvgs); delves = ves - *(ckt->CKTstate0 + here->B4SOIves); delvps = vps - *(ckt->CKTstate0 + here->B4SOIvps); deldelTemp = delTemp - *(ckt->CKTstate0 + here->B4SOIdeltemp); delvds = vds - *(ckt->CKTstate0 + here->B4SOIvds); delvgd = vgd - vgdo; delved = ved - vedo; delvges = vges - *(ckt->CKTstate0 + here->B4SOIvges); /* v3.1 */ delvgms = vgms - *(ckt->CKTstate0 + here->B4SOIvgms); /* v3.1 */ delvdbd = vdbd - *(ckt->CKTstate0 + here->B4SOIvdbd); /* v4.0 */ delvdbs = vdbs - *(ckt->CKTstate0 + here->B4SOIvdbs); /* v4.0 */ delvsbs = vsbs - *(ckt->CKTstate0 + here->B4SOIvsbs); /* v4.0 */ delvbd_jct = (!here->B4SOIrbodyMod) ? delvbd : delvdbd; /*v4.0*/ delvbs_jct = (!here->B4SOIrbodyMod) ? delvbs : delvsbs; /*v4.0*/ delvses = vses - *(ckt->CKTstate0 + here->B4SOIvses);/*v4.0*/ vdedo = *(ckt->CKTstate0 + here->B4SOIvdes) - *(ckt->CKTstate0 + here->B4SOIvds); /* v4.0 */ delvdes = vdes - *(ckt->CKTstate0 + here->B4SOIvdes); /* v4.0 */ delvded = vdes - vds - vdedo; /* v4.0 */ if (here->B4SOImode >= 0) { cdhat = here->B4SOIcd + (here->B4SOIgm-here->B4SOIgjdg) * delvgs + (here->B4SOIgds - here->B4SOIgjdd) * delvds + (here->B4SOIgmbs * delvbs - here->B4SOIgjdb * delvbs_jct ) /* v4.0 */ + (here->B4SOIgme - here->B4SOIgjde) * delves + (here->B4SOIgmT - here->B4SOIgjdT) * deldelTemp; /* v3.0 */ } else { cdhat = here->B4SOIcd + (here->B4SOIgm-here->B4SOIgjdg) * delvgd - (here->B4SOIgds - here->B4SOIgjdd) * delvds + (here->B4SOIgmbs * delvbd - here->B4SOIgjdb * delvbd_jct ) /*v4.0 */ + (here->B4SOIgme - here->B4SOIgjde) * delved + (here->B4SOIgmT - here->B4SOIgjdT) * deldelTemp; /* v3.0 */ } cbhat = here->B4SOIcb + here->B4SOIgbgs * delvgs + here->B4SOIgbbs * delvbs + here->B4SOIgbds * delvds + here->B4SOIgbes * delves + here->B4SOIgbps * delvps + here->B4SOIgbT * deldelTemp; /* v3.0 */ Isestot = here->B4SOIgstot * (*(ckt->CKTstate0 + here->B4SOIvses)); cseshat = Isestot + here->B4SOIgstot * delvses + here->B4SOIgstotd * delvds + here->B4SOIgstotg * delvgs + here->B4SOIgstotb * delvbs; Idedtot = here->B4SOIgdtot * vdedo; cdedhat = Idedtot + here->B4SOIgdtot * delvded + here->B4SOIgdtotd * delvds + here->B4SOIgdtotg * delvgs + here->B4SOIgdtotb * delvbs; #ifndef NOBYPASS /* following should be one big if connected by && all over * the place, but some C compilers can't handle that, so * we split it up here to let them digest it in stages */ if ((!(ckt->CKTmode & MODEINITPRED)) && (ckt->CKTbypass) && Check == 0) if ((here->B4SOIsoiMod == 2) || /* v3.2 */ (fabs(delvbs) < (ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->B4SOIvbs))) + ckt->CKTvoltTol)) ) if ((here->B4SOIsoiMod == 2) || /* v3.2 */ (fabs(delvbd) < (ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0+here->B4SOIvbd))) + ckt->CKTvoltTol)) ) if ((fabs(delvgs) < (ckt->CKTreltol * MAX(fabs(vgs), fabs(*(ckt->CKTstate0+here->B4SOIvgs))) + ckt->CKTvoltTol))) if ((fabs(delves) < (ckt->CKTreltol * MAX(fabs(ves), fabs(*(ckt->CKTstate0+here->B4SOIves))) + ckt->CKTvoltTol))) if ( (here->B4SOIbodyMod == 0) || (here->B4SOIbodyMod == 2) || (fabs(delvps) < (ckt->CKTreltol * MAX(fabs(vps), fabs(*(ckt->CKTstate0+here->B4SOIvps))) + ckt->CKTvoltTol)) ) if ( (here->B4SOItempNode == 0) || (fabs(deldelTemp) < (ckt->CKTreltol * MAX(fabs(delTemp), fabs(*(ckt->CKTstate0+here->B4SOIdeltemp))) + ckt->CKTvoltTol*1e4))) /* v3.1 added for RF */ if ((here->B4SOIrgateMod == 0) || (here->B4SOIrgateMod == 1) || (fabs(delvges) < (ckt->CKTreltol * MAX(fabs(vges), fabs(*(ckt->CKTstate0 + here->B4SOIvges))) + ckt->CKTvoltTol))) if ((here->B4SOIrgateMod != 3) || (fabs(delvgms) < (ckt->CKTreltol * MAX(fabs(vgms), fabs(*(ckt->CKTstate0 + here->B4SOIvgms))) + ckt->CKTvoltTol))) /* v3.1 added for RF end */ /* v4.0 */ if ((!here->B4SOIrbodyMod) || (fabs(delvdbs) < (ckt->CKTreltol * MAX(fabs(vdbs), fabs(*(ckt->CKTstate0 + here->B4SOIvdbs))) + ckt->CKTvoltTol))) if ((!here->B4SOIrbodyMod) || (fabs(delvdbd) < (ckt->CKTreltol * MAX(fabs(vdbd), fabs(*(ckt->CKTstate0 + here->B4SOIvdbd))) + ckt->CKTvoltTol))) if ((!here->B4SOIrbodyMod) || (fabs(delvsbs) < (ckt->CKTreltol * MAX(fabs(vsbs), fabs(*(ckt->CKTstate0 + here->B4SOIvsbs))) + ckt->CKTvoltTol))) if ((!model->B4SOIrdsMod) || (fabs(delvses) < (ckt->CKTreltol * MAX(fabs(vses), fabs(*(ckt->CKTstate0 + here->B4SOIvses))) + ckt->CKTvoltTol))) if ((!model->B4SOIrdsMod) || (fabs(delvdes) < (ckt->CKTreltol * MAX(fabs(vdes), fabs(*(ckt->CKTstate0 + here->B4SOIvdes))) + ckt->CKTvoltTol))) if ((!model->B4SOIrdsMod) || ((fabs(cseshat - Isestot) < ckt->CKTreltol * MAX(fabs(cseshat), fabs(Isestot)) + ckt->CKTabstol))) if ((!model->B4SOIrdsMod) || ((fabs(cdedhat - Idedtot) < ckt->CKTreltol * MAX(fabs(cdedhat), fabs(Idedtot)) + ckt->CKTabstol))) /* v4.0 end */ if ((fabs(delvds) < (ckt->CKTreltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0+here->B4SOIvds))) + ckt->CKTvoltTol))) if ((fabs(cdhat - here->B4SOIcd) < ckt->CKTreltol * MAX(fabs(cdhat),fabs(here->B4SOIcd)) + ckt->CKTabstol)) if ((here->B4SOIsoiMod == 2) || /* v3.2 */ (fabs(cbhat - here->B4SOIcb) < ckt->CKTreltol * MAX(fabs(cbhat),fabs(here->B4SOIcb)) + ckt->CKTabstol) ) { /* bypass code */ vbs = *(ckt->CKTstate0 + here->B4SOIvbs); vbd = *(ckt->CKTstate0 + here->B4SOIvbd); vgs = *(ckt->CKTstate0 + here->B4SOIvgs); ves = *(ckt->CKTstate0 + here->B4SOIves); vps = *(ckt->CKTstate0 + here->B4SOIvps); vds = *(ckt->CKTstate0 + here->B4SOIvds); /* v3.1 added for RF */ vges = *(ckt->CKTstate0 + here->B4SOIvges); vgms = *(ckt->CKTstate0 + here->B4SOIvgms); vged = vges - vds; vgmd = vgms - vds; vgme = vgms - ves; /* v3.1 added for RF end */ vgmb = vgms - vbs; /* v3.2 bug fix */ /* v4.0 */ vdbs = *(ckt->CKTstate0 + here->B4SOIvdbs); vdbd = *(ckt->CKTstate0 + here->B4SOIvdbd); vsbs = *(ckt->CKTstate0 + here->B4SOIvsbs); vbs_jct = (!here->B4SOIrbodyMod) ? vbs : vsbs; vbd_jct = (!here->B4SOIrbodyMod) ? vbd : vdbd; vses = *(ckt->CKTstate0 + here->B4SOIvses); vdes = *(ckt->CKTstate0 + here->B4SOIvdes); /* v4.0 end */ delTemp = *(ckt->CKTstate0 + here->B4SOIdeltemp); /* calculate Vds for temperature conductance calculation in bypass (used later when filling Temp node matrix) */ Vds = here->B4SOImode > 0 ? vds : -vds; vgd = vgs - vds; vgb = vgs - vbs; veb = ves - vbs; if ((ckt->CKTmode & (MODETRAN | MODEAC)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) { ByPass = 1; goto line755; } else { goto line850; } } #endif /*NOBYPASS*/ von = here->B4SOIvon; if (*(ckt->CKTstate0 + here->B4SOIvds) >= 0.0) { T0 = *(ckt->CKTstate0 + here->B4SOIvbs); /* v3.1 added for RF */ if (here->B4SOIrgateMod == 3) { vged = vges - vds; vgmd = vgms - vds; } else if ((here->B4SOIrgateMod == 1) || (here->B4SOIrgateMod == 2)) { vged = vges - vds; } /* v3.1 added for RF end*/ } else { T0 = *(ckt->CKTstate0 + here->B4SOIvbd); /* added for RF */ if (here->B4SOIrgateMod == 3) { vges = vged + vds; vgms = vgmd + vds; } if ((here->B4SOIrgateMod == 1) || (here->B4SOIrgateMod == 2)) { vges = vged + vds; } /* added for RF end*/ } if (vds >= 0.0) { vbs = B4SOIlimit(vbs, T0, 0.2, &Check); vbd = vbs - vds; vb = model->B4SOItype * vbs + vs; if (here->B4SOIrbodyMod) /* v4.0 */ { vdbs = B4SOIlimit(vdbs, *(ckt->CKTstate0 + here->B4SOIvdbs), 0.2, &Check); vdbd = vdbs - vds; vsbs = B4SOIlimit(vsbs, *(ckt->CKTstate0 + here->B4SOIvsbs), 0.2, &Check); } } else { vbd = B4SOIlimit(vbd, T0, 0.2, &Check); vbs = vbd + vds; vb = model->B4SOItype * vbs + vd; /* v4.0 */ if (here->B4SOIrbodyMod) { vdbd = B4SOIlimit(vdbd, *(ckt->CKTstate0 + here->B4SOIvdbd), 0.2, &Check); vdbs = vdbd + vds; vsbdo = *(ckt->CKTstate0 + here->B4SOIvsbs) - *(ckt->CKTstate0 + here->B4SOIvds); vsbd = vsbs - vds; vsbd = B4SOIlimit(vsbd, vsbdo, 0.2, &Check); vsbs = vsbd + vds; } /* v4.0 end */ } delTemp =B4SOIlimit(delTemp, *(ckt->CKTstate0 + here->B4SOIdeltemp),5.0,&Check); } if(model->B4SOImtrlMod) { epsrox = 3.9; toxe = model->B4SOIeot; epssub = EPS0 * model->B4SOIepsrsub; /* bugfix following constants should be replaced with model params -Tanvir */ eggbcp2 = 1.12; eggdep = 1.12; agb1 = 3.7622e-7; bgb1 = -3.1051e10; agb2 = 4.9758e-7; bgb2 = -2.357e10; agbc2n = 3.42537e-7; agbc2p = 4.97232e-7; bgbc2n = 1.16645e12; bgbc2p = 7.45669e11; } else { epsrox = model->B4SOIepsrox; toxe = model->B4SOItox; epssub = EPSSI; /* bugfix v4.3.1 following constants are valid for mtrlMod=0 -Tanvir */ eggbcp2 = 1.12; eggdep = 1.12; agb1 = 3.7622e-7; bgb1 = -3.1051e10; agb2 = 4.9758e-7; bgb2 = -2.357e10; agbc2n = 3.42537e-7; agbc2p = 4.97232e-7; bgbc2n = 1.16645e12; bgbc2p = 7.45669e11; } /* Calculate temperature dependent values for self-heating effect */ Temp = delTemp + ckt->CKTtemp; dTempRatio_dT = 1 / model->B4SOItnom; TempRatio = Temp * dTempRatio_dT; here->B4SOITempSH = Temp; /*v4.2 added for portability of SH Temp */ dEg_dT = 0.0; /* new line Wagner */ Vtm00= 0.026; /* v4.3.1 Vtm00 replaces hardcoded 0.026 -Tanvir */ if (selfheat) { if(model->B4SOImtrlMod==0) { Vtm = KboQ * Temp; T0 = 1108.0 + Temp; T5 = Temp * Temp; Eg = 1.16 - 7.02e-4 * T5 / T0; dEg_dT = T1 = ((7.02e-4 * T5) - T0 * (14.04e-4 * Temp)) / T0 / T0; /* enhanced line Wagner */ /* T1 = dEg / dT */ T2 = 1.9230584e-4; /* T2 = 1 / 300.15^(3/2) */ T5 = sqrt(Temp); T3 = 1.45e10 * Temp * T5 * T2; T4 = exp(21.5565981 - Eg / (2.0 * Vtm)); ni = T3 * T4; dni_dT = 2.175e10 * T2 * T5 * T4 + T3 * T4 * (-Vtm * T1 + Eg * KboQ) / (2.0 * Vtm * Vtm); T0 = log(1.0e20 * pParam->B4SOInpeak / (ni * ni)); vbi = Vtm * T0; dvbi_dT = KboQ * T0 + Vtm * (-2.0 * dni_dT / ni); } else { Tnom = model->B4SOItnom; Vtm = KboQ * Temp; Vtm0= KboQ * Tnom; Eg0 = model->B4SOIeg0; T0 = model->B4SOItbgbsub + Temp; T5 = Temp * Temp; Eg = model->B4SOIbg0sub - model->B4SOItbgasub * Temp * Temp / (Temp + model->B4SOItbgbsub); dEg_dT = T1 = ((model->B4SOItbgasub * T5) - T0 * (2.0*model->B4SOItbgasub * Temp)) / T0 / T0; /* enhanced line Wagner */ /* T1 = dEg / dT */ T2 = 1/sqrt(Tnom*Tnom*Tnom); T5 = sqrt(Temp); T3 = model->B4SOIni0sub * Temp * T5 * T2; T4 = exp(Eg0/(2.0*Vtm0) - Eg / (2.0 * Vtm)); ni = T3 * T4; dni_dT=1.5*model->B4SOIni0sub*T5*T2*T4+ T3*T4*(-Vtm * T1 + Eg * KboQ) / (2.0 * Vtm * Vtm); T0 = log(1.0e20 * pParam->B4SOInpeak / (ni * ni)); vbi = Vtm * T0; dvbi_dT = KboQ * T0 + Vtm * (-2.0 * dni_dT / ni); } if (pParam->B4SOInsub > 0) { T0 = log(pParam->B4SOInpeak / pParam->B4SOInsub); vfbb = -model->B4SOItype * Vtm * T0; dvfbb_dT = -model->B4SOItype * KboQ * T0; } else { T0 = log(-pParam->B4SOInpeak * pParam->B4SOInsub / ni / ni); vfbb = -model->B4SOItype * Vtm * T0; dvfbb_dT = -model->B4SOItype * (KboQ * T0 - Vtm * 2.0 * dni_dT / ni); } /* V4.0 changed phi */ phi = 2.0 * Vtm * log(pParam->B4SOInpeak / ni); /* phi = here->B4SOIphi; */ sqrtPhi = sqrt(phi); Xdep0 = sqrt(2.0 * epssub / (Charge_q * pParam->B4SOInpeak * 1.0e6)) * sqrtPhi; /* v4.1 SH bug fix */ /* dphi_dT = phi / Vtm * KboQ; v4.2 Temp Derivative bug fix */ dphi_dT = phi / Vtm * KboQ - 2.0 * Vtm * dni_dT / ni; dsqrtPhi_dT = 0.5 / sqrtPhi * dphi_dT; dXdep0_dT = Xdep0 / sqrtPhi * dsqrtPhi_dT; /* cdep0 = sqrt(Charge_q * EPSSI * pParam->B4SOInpeak * 1.0e6 / 2.0) / sqrtPhi; */ /* Bug fix #2 Jun 09 Body type is generalized for mtrlMod 1*/ cdep0 = sqrt(Charge_q * epssub /* Fix */ * pParam->B4SOInpeak * 1.0e6 / 2.0) / sqrtPhi; /* fix LHS name - Wagner */ /*dcep0_dT = cdep0 * sqrtPhi * (-1.0) / phi * dsqrtPhi_dT; */ dcdep0_dT = cdep0 * sqrtPhi * (-1.0) / phi * dsqrtPhi_dT; /* T1 = sqrt(EPSSI / (model->B4SOIepsrox * EPSOX / 3.9) Bug fix #3 Jun 09 Body type is generalized for mtrlMod 1*/ /* * model->B4SOItox * Xdep0); */ T1 = sqrt(epssub / (epsrox * EPS0) /* Fix */ * toxe * Xdep0); dT1_dT = 0.5 * T1 / Xdep0 * dXdep0_dT; T0 = exp(-0.5 * pParam->B4SOIdsub * pParam->B4SOIleff / T1); dT0_dT = T0 * 0.5 * pParam->B4SOIdsub * pParam->B4SOIleff / T1 / T1 * dT1_dT; theta0vb0 = (T0 + 2.0 * T0 * T0); dtheta0vb0_dT = (1.0 + 4.0 * T0) * dT0_dT; T0 = exp(-0.5 * pParam->B4SOIdrout * pParam->B4SOIleff / T1); dT0_dT = T0 * 0.5 * pParam->B4SOIdrout * pParam->B4SOIleff / T1 / T1 * dT1_dT; T2 = (T0 + 2.0 * T0 * T0); thetaRout = pParam->B4SOIpdibl1 * T2 + pParam->B4SOIpdibl2; dthetaRout_dT = pParam->B4SOIpdibl1 * (1.0 + 4.0 * T0) * dT0_dT; /* Save the values below for phi calculation in B4SOIaccept() */ here->B4SOIvtm = Vtm; /* here->B4SOIni = ni; v4.2 bugfix never used in the code */ T3 = TempRatio - 1.0; T8 = 1/ model->B4SOItnom; T4 = Eg300 / Vtm * T3; dT4_dT = Eg300 / Vtm / Vtm * (Vtm * T8 - T3 * KboQ); T7 = pParam->B4SOIxbjt * T4 / pParam->B4SOIndiode; dT7_dT = pParam->B4SOIxbjt * dT4_dT / pParam->B4SOIndiode; DEXP(T7, T0, dT0_dT7); dT0_dT = dT0_dT7 * dT7_dT; if (pParam->B4SOIxbjt == pParam->B4SOIxdif) { T1 = T0; dT1_dT = dT0_dT; } else { T7 = pParam->B4SOIxdif * T4 / pParam->B4SOIndiode; dT7_dT = pParam->B4SOIxdif * dT4_dT / pParam->B4SOIndiode; DEXP(T7, T1, dT1_dT7); dT1_dT = dT1_dT7 * dT7_dT; } T7 = pParam->B4SOIxrec * T4 / pParam->B4SOInrecf0; dT7_dT = pParam->B4SOIxrec * dT4_dT / pParam->B4SOInrecf0; DEXP(T7, T2, dT2_dT7); dT2_dT = dT2_dT7 * dT7_dT; /* high level injection */ Ahlis = pParam->B4SOIahli * T0; dAhlis_dT = pParam->B4SOIahli * dT0_dT; jbjts = pParam->B4SOIisbjt * T0; jdifs = pParam->B4SOIisdif * T1; jrecs = pParam->B4SOIisrec * T2; djbjts_dT = pParam->B4SOIisbjt * dT0_dT; djdifs_dT = pParam->B4SOIisdif * dT1_dT; djrecs_dT = pParam->B4SOIisrec * dT2_dT; T7 = pParam->B4SOIxtun * T3; dT7_dT = pParam->B4SOIxtun * T8; DEXP(T7, T0, dT0_dT7); dT0_dT = dT0_dT7 * dT7_dT; jtuns = pParam->B4SOIistun * T0; djtuns_dT = pParam->B4SOIistun * dT0_dT; /* drain side */ T7 = pParam->B4SOIxbjt * T4 / pParam->B4SOIndioded; dT7_dT = pParam->B4SOIxbjt * dT4_dT / pParam->B4SOIndioded; DEXP(T7, T0, dT0_dT7); dT0_dT = dT0_dT7 * dT7_dT; if (pParam->B4SOIxbjt == pParam->B4SOIxdifd) { T1 = T0; dT1_dT = dT0_dT; } else { T7 = pParam->B4SOIxdifd * T4 / pParam->B4SOIndioded; dT7_dT = pParam->B4SOIxdifd * dT4_dT / pParam->B4SOIndioded; DEXP(T7, T1, dT1_dT7); dT1_dT = dT1_dT7 * dT7_dT; } T7 = pParam->B4SOIxrecd * T4 / pParam->B4SOInrecf0d; dT7_dT = pParam->B4SOIxrecd * dT4_dT / pParam->B4SOInrecf0d; DEXP(T7, T2, dT2_dT7); dT2_dT = dT2_dT7 * dT7_dT; /* high level injection */ Ahlid = pParam->B4SOIahlid * T0; dAhlid_dT = pParam->B4SOIahlid * dT0_dT; jbjtd = pParam->B4SOIidbjt * T0; jdifd = pParam->B4SOIiddif * T1; jrecd = pParam->B4SOIidrec * T2; djbjtd_dT = pParam->B4SOIidbjt * dT0_dT; djdifd_dT = pParam->B4SOIiddif * dT1_dT; djrecd_dT = pParam->B4SOIidrec * dT2_dT; T7 = pParam->B4SOIxtund * T3; dT7_dT = pParam->B4SOIxtund * T8; DEXP(T7, T0, dT0_dT7); dT0_dT = dT0_dT7 * dT7_dT; jtund = pParam->B4SOIidtun * T0; djtund_dT = pParam->B4SOIidtun * dT0_dT; u0temp = pParam->B4SOIu0 * pow(TempRatio, pParam->B4SOIute); du0temp_dT = pParam->B4SOIu0 * pParam->B4SOIute * pow(TempRatio, pParam->B4SOIute - 1.0) * T8; ku0temp = pParam->B4SOIku0 * (1.0 /* + model->B4SOItku0 * TempRatio) + DELTA; v4.2 bugfix */ + model->B4SOItku0 * T3) + DELTA; dku0temp_dT = pParam->B4SOIku0 * model->B4SOItku0 * T8; T2 = ku0temp * ku0temp; T7 = model->B4SOIku0 * pParam->B4SOIinv_od_ref; rho_ref = T7 / ku0temp; drho_ref_dT = -T7 / T2 * dku0temp_dT; T4 = model->B4SOIku0 * here->B4SOIInv_ODeff; rho = T4 / ku0temp; drho_dT = -T4 / T2 * dku0temp_dT; T2 = (1.0 + rho); T7 = (1.0 + rho_ref); T0 = T2 / T7; dT0_dT = (drho_dT * T7 - drho_ref_dT * T2 ) / T7 / T7; du0temp_dT = T0 * du0temp_dT + u0temp * dT0_dT; u0temp *= T0; vsattemp = pParam->B4SOIvsat - pParam->B4SOIat * T3; dvsattemp_dT = -pParam->B4SOIat * T8; T2 = (1.0 + here->B4SOIkvsat * rho); T7 = (1.0 + here->B4SOIkvsat * rho_ref); T0 = T2 / T7; dT0_dT = (here->B4SOIkvsat * drho_dT * T7 - here->B4SOIkvsat * drho_ref_dT * T2) / T7 / T7; dvsattemp_dT = dvsattemp_dT * T0 + vsattemp * dT0_dT; vsattemp *= T0; here->B4SOIvsattemp = vsattemp; if (!model->B4SOIrdsMod) { rds0 = (pParam->B4SOIrdsw + pParam->B4SOIprt * T3) / pParam->B4SOIrds0denom; drds0_dT = pParam->B4SOIprt / pParam->B4SOIrds0denom * T8; } else { /* v4.0 */ PowWeffWr = pParam->B4SOIrds0denom * here->B4SOInf; T10 = pParam->B4SOIprt * T3; /* External Rd(V) */ T1 = pParam->B4SOIrdw + T10; T2 = model->B4SOIrdwmin + T10; rd0 = T1 / PowWeffWr; rdwmin = T2 / PowWeffWr; drd0_dT = pParam->B4SOIprt / PowWeffWr * T8; drdwmin_dT = drd0_dT; /* External Rs(V) */ T7 = pParam->B4SOIrsw + T10; T4 = model->B4SOIrswmin + T10; rs0 = T7 / PowWeffWr; rswmin = T4 / PowWeffWr; drs0_dT = drswmin_dT = drd0_dT; } ua = pParam->B4SOIuatemp + pParam->B4SOIua1 * T3; ub = pParam->B4SOIubtemp + pParam->B4SOIub1 * T3; uc = pParam->B4SOIuctemp + pParam->B4SOIuc1 * T3; dua_dT = pParam->B4SOIua1 * T8; dub_dT = pParam->B4SOIub1 * T8; duc_dT = pParam->B4SOIuc1 * T8; } else { vbi = pParam->B4SOIvbi; vfbb = pParam->B4SOIvfbb; phi = pParam->B4SOIphi; sqrtPhi = pParam->B4SOIsqrtPhi; Xdep0 = pParam->B4SOIXdep0; /* Eg = model->B4SOIeg0; */ /* Bug fix #11 Jun 09 'Eg is evaluated at Temp, not Tnom' */ Eg = model->B4SOIeg; /* 'model->B4SOIeg' computed in b4soitemp.c */ /* v4.1 */ /* Since selfheat=0, using Eg from b4soitemp.c*/ cdep0 = pParam->B4SOIcdep0; theta0vb0 = pParam->B4SOItheta0vb0; thetaRout = pParam->B4SOIthetaRout; jbjts = pParam->B4SOIjbjts; /* v4.0 */ jbjtd = pParam->B4SOIjbjtd; jdifs = pParam->B4SOIjdifs; jdifd = pParam->B4SOIjdifd; jrecs = pParam->B4SOIjrecs; jrecd = pParam->B4SOIjrecd; jtuns = pParam->B4SOIjtuns; jtund = pParam->B4SOIjtund; /* v2.2.2 bug fix */ Ahlis = pParam->B4SOIahli0s; Ahlid = pParam->B4SOIahli0d; u0temp = here->B4SOIu0temp; vsattemp = here->B4SOIvsattemp; ua = pParam->B4SOIua; ub = pParam->B4SOIub; uc = pParam->B4SOIuc; dni_dT = dvbi_dT = dvfbb_dT = 0.0; djbjts_dT = djdifs_dT = djrecs_dT = djtuns_dT = 0.0; djbjtd_dT = djdifd_dT = djrecd_dT = djtund_dT = 0.0; du0temp_dT = dvsattemp_dT = 0.0; dua_dT = dub_dT = duc_dT = 0.0; /* v4.1 */ dphi_dT = dsqrtPhi_dT = dXdep0_dT = 0.0; dcdep0_dT = dtheta0vb0_dT = dthetaRout_dT = 0.0; if (!model->B4SOIrdsMod) { rds0 = pParam->B4SOIrds0; drds0_dT = 0.0; } else { rd0 = pParam->B4SOIrd0; rs0 = pParam->B4SOIrs0; rdwmin = pParam->B4SOIrdwmin; rswmin = pParam->B4SOIrswmin; drd0_dT = drs0_dT = drdwmin_dT = drswmin_dT = 0.0; } dAhlis_dT = dAhlid_dT = 0; } /* TempRatio used for Vth and mobility */ if (selfheat) { TempRatioMinus1 = Temp / model->B4SOItnom - 1.0; } else { TempRatioMinus1 = ckt->CKTtemp / model->B4SOItnom - 1.0; } /* determine DC current and derivatives */ vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; ved = ves - vds; veb = ves - vbs; vge = vgs - ves; vpd = vps - vds; vgp = vgs - vps; /* v3.1 added for RF */ vged = vges - vds; vgmd = vgms - vds; vgme = vgms - ves; /* v3.1 added for RF end */ vgmb = vgms - vbs; /* v3.2 bug fix */ agidl = pParam->B4SOIagidl; bgidl = pParam->B4SOIbgidl; cgidl = pParam->B4SOIcgidl; egidl = pParam->B4SOIegidl; rgidl = pParam->B4SOIrgidl; kgidl = pParam->B4SOIkgidl; fgidl = pParam->B4SOIfgidl; agisl = pParam->B4SOIagisl; bgisl = pParam->B4SOIbgisl; cgisl = pParam->B4SOIcgisl; egisl = pParam->B4SOIegisl; rgisl = pParam->B4SOIrgisl; kgisl = pParam->B4SOIkgisl; fgisl = pParam->B4SOIfgisl; if (vds >= 0.0) { /* normal mode */ here->B4SOImode = 1; Vds = vds; Vgs = vgs; Vbs = vbs; Vbd = vbd; Ves = ves; Vps = vps; Vsbs = vsbs; /* v4.0 */ Vdbs = vdbs; /* v4.0 */ Vdbd = Vdbs - Vds; /* v4.0 */ Vgd = vgd; /* v4.1 */ wdios = pParam->B4SOIwdios; wdiod = pParam->B4SOIwdiod; ndiode = pParam->B4SOIndiode; /* v4.2 bugfix*/ ndioded = pParam->B4SOIndioded; /* v4.2 bugfix*/ nrecf0s = pParam->B4SOInrecf0; /* bugfix_snps start for junction DC part*/ nrecf0d = pParam->B4SOInrecf0d; nrecr0s = pParam->B4SOInrecr0; nrecr0d = pParam->B4SOInrecr0d; vrec0s = pParam->B4SOIvrec0; vrec0d = pParam->B4SOIvrec0d; ntuns = pParam->B4SOIntun; ntund = pParam->B4SOIntund; vtun0s = pParam->B4SOIvtun0; vtun0d = pParam->B4SOIvtun0d; /* bugfix_snps end for junction DC part*/ } else { /* inverse mode */ here->B4SOImode = -1; Vds = -vds; Vgs = vgd; Vbs = vbd; Vbd = vbs; Ves = ved; Vps = vpd; Vsbs = vdbd; /* v4.0 */ Vdbd = vsbs; /* v4.0 */ Vdbs = Vdbd + Vds; /* v4.0 */ Vgd = vgs; /* v4.1 */ wdios = pParam->B4SOIwdiod; wdiod = pParam->B4SOIwdios; ndiode = pParam->B4SOIndioded; /* v4.2 bugfix*/ ndioded = pParam->B4SOIndiode; /* v4.2 bugfix*/ nrecf0s = pParam->B4SOInrecf0d; /* bugfix_snps start for junction DC part*/ nrecf0d = pParam->B4SOInrecf0; nrecr0s = pParam->B4SOInrecr0d; nrecr0d = pParam->B4SOInrecr0; vrec0s = pParam->B4SOIvrec0d; vrec0d = pParam->B4SOIvrec0; ntuns = pParam->B4SOIntund; ntund = pParam->B4SOIntun; vtun0s = pParam->B4SOIvtun0d; vtun0d = pParam->B4SOIvtun0; /* bugfix_snps end for junction DC part*/ } if( vds < 0.0) {/*Diode current*/ T0 = jbjts; T1 = djbjts_dT; jbjts = jbjtd; djbjts_dT = djbjtd_dT; jbjtd = T0; djbjtd_dT = T1; T0 = jdifs; T1 = djdifs_dT; jdifs = jdifd; djdifs_dT = djdifd_dT; jdifd = T0; djdifd_dT = T1; T0 = jrecs; T1 = djrecs_dT; jrecs = jrecd; djrecs_dT = djrecd_dT; jrecd = T0; djrecd_dT = T1; T0 = jtuns; T1 = djtuns_dT; jtuns = jtund; djtuns_dT = djtund_dT; jtund = T0; djtund_dT = T1; /*GISL/GIDL*/ T0 = agidl; agidl = agisl; agisl = T0; T0 = bgidl; bgidl = bgisl; bgisl = T0; T0 = cgidl; cgidl = cgisl; cgisl = T0; T0 = egidl; egidl = egisl; egisl = T0; T0 = rgidl; rgidl = rgisl; rgisl = T0; T0 = kgidl; kgidl = kgisl; kgisl = T0; T0 = fgidl; fgidl = fgisl; fgisl = T0; T0 = Ahlis; /* bugfix_snps */ Ahlis = Ahlid; /* bugfix_snps */ Ahlid = T0; /* bugfix_snps */ T0 = dAhlis_dT; /* bugfix_snps */ dAhlis_dT = dAhlid_dT; /* bugfix_snps */ dAhlid_dT = T0; /* bugfix_snps */ } vbs_jct = (!here->B4SOIrbodyMod) ? Vbs : Vsbs; /* v4.0 */ vbd_jct = (!here->B4SOIrbodyMod) ? Vbd : Vdbd; /* v4.0 */ Vesfb = Ves - vfbb; Cbox = model->B4SOIcbox; K1 = pParam->B4SOIk1eff; ChargeComputationNeeded = ((ckt->CKTmode & (MODEAC | MODETRAN | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) ? 1 : 0; if (here->B4SOIdebugMod <0) ChargeComputationNeeded = 1; #ifdef B4SOI_DEBUG_OUT ChargeComputationNeeded = 1; here->B4SOIdebug1 = 0.0; here->B4SOIdebug2 = 0.0; here->B4SOIdebug3 = 0.0; #endif /* Poly Gate Si Depletion Effect */ T0 = here->B4SOIvfb + phi; if (model->B4SOImtrlMod==0) epsgate = epssub; else epsgate = model->B4SOIepsrgate * EPS0; if ((pParam->B4SOIngate > 1.e18) && (pParam->B4SOIngate < 1.e25) && (Vgs > T0)&& (epsgate!=0)) /* added to avoid the problem caused by ngate */ { T1 = 1.0e6 * Charge_q * epsgate * pParam->B4SOIngate / (model->B4SOIcox * model->B4SOIcox); T4 = sqrt(1.0 + 2.0 * (Vgs - T0) / T1); T2 = T1 * (T4 - 1.0); T3 = 0.5 * T2 * T2 / T1; /* T3 = Vpoly */ /* T7 = 1.12 - T3 - 0.05; */ T7 = eggdep - T3 - 0.05; /* bugfix: v4.3.1 -Tanvir */ T6 = sqrt(T7 * T7 + 0.224); /* T5 = 1.12 - 0.5 * (T7 + T6); */ T5 = eggdep - 0.5 * (T7 + T6); /* bugfix: v4.3.1 -Tanvir */ Vgs_eff = Vgs - T5; dVgs_eff_dVg = 1.0 - (0.5 - 0.5 / T4) * (1.0 + T7 / T6); /* 7 new lines Wagner */ if (selfheat) { dTL2_dT = - dphi_dT / T4; dTL3_dT = T2 * dTL2_dT / T1; dTL6_dT = - T7 * dTL3_dT / T6; dVgs_eff_dT = 0.5 * (dTL6_dT - dTL3_dT); } else dVgs_eff_dT = 0.0; } else { Vgs_eff = Vgs; dVgs_eff_dVg = 1.0; dVgs_eff_dT = 0.0; /* new line Wagner */ } if ((pParam->B4SOIngate > 1.e18) && (pParam->B4SOIngate < 1.e25)/* Bug fix # 25/26 Vgd_eff defined */ && (Vgd > T0)&& (epsgate!=0)) /* added to avoid the problem caused by ngate */ { T1 = 1.0e6 * Charge_q * epsgate * pParam->B4SOIngate / (model->B4SOIcox * model->B4SOIcox); T4 = sqrt(1.0 + 2.0 * (Vgd - T0) / T1); T2 = T1 * (T4 - 1.0); T3 = 0.5 * T2 * T2 / T1; /* T3 = Vpoly */ /* T7 = 1.12 - T3 - 0.05; */ T7 = eggdep - T3 - 0.05; /* bugfix: v4.3.1 -Tanvir */ T6 = sqrt(T7 * T7 + 0.224); /* T5 = 1.12 - 0.5 * (T7 + T6); */ T5 = eggdep - 0.5 * (T7 + T6); /* bugfix: v4.3.1 -Tanvir */ Vgd_eff = Vgd - T5; dVgd_eff_dVg = 1.0 - (0.5 - 0.5 / T4) * (1.0 + T7 / T6); /* 7 new lines Wagner */ if (selfheat) { dTL2_dT = - dphi_dT / T4; dTL3_dT = T2 * dTL2_dT / T1; dTL6_dT = - T7 * dTL3_dT / T6; dVgd_eff_dT = 0.5 * (dTL6_dT - dTL3_dT); } else dVgd_eff_dT = 0.0; } else { Vgd_eff = Vgd; dVgd_eff_dVg = 1.0; dVgd_eff_dT = 0.0; /* new line Wagner */ } /* if( here->B4SOImode != 1){ T1=Vgs_eff; Vgs_eff=Vgd_eff; Vgd_eff=T1; T2=dVgs_eff_dVg; dVgs_eff_dVg=dVgd_eff_dVg; dVgd_eff_dVg=T2; } */ /* v4.1 for improved BT charge model, no poly depletion */ Vgs_eff2 = Vgs; dVgs_eff2_dVg = 1.0; /* end v4.1 for improved BT charge model */ Leff = pParam->B4SOIleff; if (selfheat) { Vtm = KboQ * Temp; dVtm_dT = KboQ; } else { Vtm = model->B4SOIvtm; dVtm_dT = 0.0; } V0 = vbi - phi; /* begin of v3.0 block addition */ /* B/S built-in potential lowering calculation */ if (here->B4SOIsoiMod == 0) /* BSIMPD */ /* v3.2 */ { Vbsmos = Vbs; dVbsmos_dVg = 0.0; dVbsmos_dVd = 0.0; dVbsmos_dVb = 1.0; dVbsmos_dVe = 0.0; /* LFW_FD 5 new lines */ dVbs_dVg = 0.0; dVbs_dVd = 0.0; dVbs_dVb = 1.0; dVbs_dVe = 0.0; dVbs_dT = 0.0; dVbsmos_dT = 0.0; Vbp = Vbs - Vps; dVbp_dVb = 1; } else /* soiMod = 1 or 2: adding FD module on top of BSIMPD */ { /* prepare Vbs0 & Vbs0mos for VthFD calculation */ if (model->B4SOIfdMod == 0) /* v4.0 */ { T0 = -model->B4SOIdvbd1 * pParam->B4SOIleff / pParam->B4SOIlitl; T1 = model->B4SOIdvbd0 * (exp(0.5*T0) + 2*exp(T0)); T2 = T1 * (vbi - phi); T3 = 0.5 * pParam->B4SOIqsi / model->B4SOIcsi; /* v3.2 */ Vbs0t = phi - T3 + model->B4SOIvbsa + T2; dVbs0t_dVd = 0.0; dVbs0_dVd = 0.0; if (selfheat) /* dVbs0t_dT = T1 * dvbi_dT; */ dVbs0t_dT = (1.0 - T1) * dphi_dT + T1 * dvbi_dT; /* LFW_FD new line */ else dVbs0t_dT = 0.0; T0 = 1 + model->B4SOIcsi / Cbox; T3 = -model->B4SOIdk2b * pParam->B4SOIleff / pParam->B4SOIlitl; T5 = model->B4SOIk2b * (exp(0.5*T3) + 2*exp(T3)); T1 = (model->B4SOIk1b - T5) / T0; T2 = T1 * Vesfb; T4 = 1.0/(1 + Cbox / model->B4SOIcsi); Vbs0 = T4 * Vbs0t + T2; dVbs0_dVe = T1; dVbs0_dVd = 0.0; /* flexilint */ if (selfheat) dVbs0_dT = T4 * dVbs0t_dT - T1 * dvfbb_dT; else dVbs0_dT = 0.0; } else { T0 = 1.0/(model->B4SOIcsi + Cbox + model->B4SOIcdsbs); T1 = -model->B4SOIdvbd1 * pParam->B4SOIleff / pParam->B4SOIlitl; T2 = model->B4SOIdvbd0 * (exp(0.5*T1) + 2*exp(T1)); T3 = T2 * (Vds + model->B4SOIvsce); T4 = 0.5 * pParam->B4SOIqsi / model->B4SOIcsi; T5 = model->B4SOIcsi * T0 * (phi - T4 + model->B4SOIvbsa); T6 = model->B4SOIcdsbs * T0 * T3; Vbs0t = T5 + T6; dVbs0t_dVd = model->B4SOIcdsbs * T0 * T2; if (selfheat) /* dVbs0t_dT = 0.0; LFW_FD changed line */ dVbs0t_dT = model->B4SOIcsi * T0 * dphi_dT; else dVbs0t_dT = 0.0; T7 = Cbox * T0 * Vesfb; Vbs0 = Vbs0t + T7; dVbs0_dVe = Cbox * T0; dVbs0_dVd = dVbs0t_dVd; if (selfheat) dVbs0_dT = dVbs0t_dT - Cbox * T0 * dvfbb_dT; else dVbs0_dT = 0.0; } /* zero field body potential cal. */ T1 = Vbs0t - Vbs0 - 0.005; T2 = sqrt(T1 * T1 + (2.5e-5)); T3 = 0.5 * (T1 + T2); T4 = T3 * model->B4SOIcsi / pParam->B4SOIqsi; /* v3.2 */ Vbs0mos = Vbs0 - 0.5 * T3 * T4; T5 = 0.5 * T4 * (1 + T1 / T2); dVbs0mos_dVe = dVbs0_dVe * (1 + T5); /* dVbs0mos_dVd = dVbs0_dVd + T5 * (dVbs0t_dVd - dVbs0_dVd); LFW_FD */ dVbs0mos_dVd = dVbs0_dVd * (1 + T5) - T5 * dVbs0t_dVd; if (selfheat) dVbs0mos_dT = dVbs0_dT * (1 + T5) - T5 * dVbs0t_dT; else dVbs0mos_dT = 0.0; /* set the upperbound of Vbs0mos to be phi for square root calc. */ T1 = phi - 0.02; T2 = T1 - Vbs0mos - 0.005; T3 = sqrt(T2 * T2 + 4.0 * 0.005); Vbs0mos = T1 - 0.5 * (T2 + T3); T4 = 0.5 * (1 + T2 / T3); dVbs0mos_dVe = T4 * dVbs0mos_dVe; dVbs0mos_dVd = T4 * dVbs0mos_dVd; /* v4.1 */ if (selfheat) /* dVbs0mos_dT = T4 * dVbs0mos_dT; */ dVbs0mos_dT = dphi_dT - T4 * (dphi_dT - dVbs0mos_dT); /* v4.1 */ else dVbs0mos_dT = 0.0; /* VthFD calculation */ Phis = phi - Vbs0mos; /* dPhis_dVb = -1; LFW_FD not used */ sqrtPhis = sqrt(Phis); dsqrtPhis_dVb = -0.5 / sqrtPhis; Xdep = Xdep0 * sqrtPhis / sqrtPhi; dXdep_dVb = (Xdep0 / sqrtPhi) * dsqrtPhis_dVb; /* v4.2 bugfix temp deriv */ if (selfheat) { dPhis_dT = dphi_dT - dVbs0mos_dT; dsqrtPhis_dT = 0.5 / sqrtPhis * dPhis_dT; dXdep_dT = dXdep0_dT * sqrtPhis / sqrtPhi + Xdep0 * (dsqrtPhis_dT * sqrtPhi - sqrtPhis * dsqrtPhi_dT) / phi; } else { dPhis_dT = 0.0; dsqrtPhis_dT = 0.0; dXdep_dT = 0.0; }/* v4.2 bugfix temp deriv */ T3 = sqrt(Xdep); T0 = pParam->B4SOIdvt2 * Vbs0mos; dT3_dT = 1.0 / (2.0 * T3) * dXdep_dT; /* v4.2 bugfix temp deriv */ dT0_dT = pParam->B4SOIdvt2 * dVbs0mos_dT; /* v4.2 bugfix temp deriv */ if (T0 >= - 0.5) { T1 = 1.0 + T0; dT1_dT = dT0_dT; /* v4.2 bugfix temp deriv */ T2 = pParam->B4SOIdvt2 ; } else /* Added to avoid any discontinuity problems caused by dvt2 */ { T4 = 1.0 / (3.0 + 8.0 * T0); /* T1 = (1.0 + 3.0 * T0) * T4; */ /* v4.2 bugfix temp deriv */ T5 = 1.0 + 3.0 * T0; /* v4.2 bugfix temp deriv */ T1 = T4 * T5; /* v4.2 bugfix temp deriv */ T2 = pParam->B4SOIdvt2 * T4 * T4 ; dT1_dT = T4 * (3.0 - 8.0 * T5 * T4) * dT0_dT; /* v4.2 bugfix temp deriv */ } lt1 = model->B4SOIfactor1 * T3 * T1; dlt1_dVb =model->B4SOIfactor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * T2); dlt1_dT = model->B4SOIfactor1 * ( dT3_dT * T1+ T3 * dT1_dT); /* v4.2 bugfix temp deriv */ T0 = pParam->B4SOIdvt2w * Vbs0mos; dT0_dT = pParam->B4SOIdvt2w * dVbs0mos_dT; /* v4.2 bugfix temp deriv */ if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->B4SOIdvt2w ; dT1_dT = dT0_dT; /* v4.2 bugfix temp deriv */ } else /* Added to avoid any discontinuity problems caused by dvt2w */ { T4 = 1.0 / (3.0 + 8.0 * T0); /* T1 = (1.0 + 3.0 * T0) * T4; */ /* v4.2 bugfix temp deriv */ T5 = 1.0 + 3.0 * T0; /* v4.2 bugfix temp deriv */ T1 = T4 * T5; /* v4.2 bugfix temp deriv */ T2 = pParam->B4SOIdvt2w * T4 * T4 ; dT1_dT=T4*(3.0-8.0*T5*T4)*dT0_dT ; /* v4.2 bugfix temp deriv */ } ltw= model->B4SOIfactor1 * T3 * T1; dltw_dVb=model->B4SOIfactor1*(0.5 / T3 * T1 * dXdep_dVb + T3 * T2); dltw_dT=model->B4SOIfactor1 *( dT3_dT * T1+ T3 *dT1_dT);/* v4.2 bugfix temp deriv */ T0 = -0.5 * pParam->B4SOIdvt1 * Leff / lt1; if (T0 > -EXPL_THRESHOLD) { T1 = exp(T0); Theta0 = T1 * (1.0 + 2.0 * T1); dT1_dVb = -T0 / lt1 * T1 * dlt1_dVb; dTheta0_dVb = (1.0 + 4.0 * T1) * dT1_dVb; dT1_dT = -T0 / lt1 * T1 * dlt1_dT; /* v4.2 bugfix temp deriv */ dTheta0_dT = (1.0 + 4.0 * T1) * dT1_dT; /* v4.2 bugfix temp deriv */ } else { T1 = MIN_EXPL; Theta0 = T1 * (1.0 + 2.0 * T1); dTheta0_dVb = 0.0; dTheta0_dT = 0; /* v4.2 bugfix temp deriv */ } T2 = pParam->B4SOInfactor * epssub / Xdep; dT2_dVb = - T2 / Xdep * dXdep_dVb; dT2_dT = - T2 / Xdep * dXdep_dT; /* v4.2 bugfix temp deriv */ /* T3 = pParam->B4SOIcdsc + pParam->B4SOIcdscb * Vbseff + pParam->B4SOIcdscd * Vds;*/ /* v4.1 */ T3 = pParam->B4SOIcdsc + pParam->B4SOIcdscb * Vbs0mos + pParam->B4SOIcdscd * Vds; dT3_dVb = pParam->B4SOIcdscb; dT3_dVd = pParam->B4SOIcdscd; T4 = (T2 + T3 * Theta0 + pParam->B4SOIcit) / model->B4SOIcox; dT4_dVb = (dT2_dVb + Theta0 * dT3_dVb + dTheta0_dVb * T3) / model->B4SOIcox; dT4_dVd = Theta0 * dT3_dVd / model->B4SOIcox; dT4_dT = (dT2_dT + T3 * dTheta0_dT + pParam->B4SOIcdscb * dVbs0mos_dT * Theta0) / model->B4SOIcox; /* v4.2 bugfix temp deriv */ if (T4 >= -0.5) { n = 1.0 + T4; dn_dVb = dT4_dVb; dn_dVd = dT4_dVd; dn_dT = dT4_dT; /* v4.2 bugfix temp deriv */ } else { /* avoid discontinuity problems caused by T4 */ T0 = 1.0 / (3.0 + 8.0 * T4); /*n = (1.0 + 3.0 * T4) * T0;*/ /* v4.2 bugfix temp deriv */ T5 = 1.0 + 3.0 * T4; /* v4.2 bugfix temp deriv */ n = T0 * T5;/* v4.2 bugfix temp deriv */ T0 *= T0; dn_dVb = T0 * dT4_dVb; dn_dVd = T0 * dT4_dVd; dn_dT = T0 * (3.0 - 8.0 * T5 * T0) * dT4_dT; /* v4.2 bugfix temp deriv */ } if (pParam->B4SOIdvtp0 > 0.0) { /* v4.0 */ T0 = -pParam->B4SOIdvtp1 * Vds; if (T0 < -EXPL_THRESHOLD) { T2 = MIN_EXPL; dT2_dVd = 0.0; } else { T2 = exp(T0); dT2_dVd = -pParam->B4SOIdvtp1 * T2; } T3 = Leff + pParam->B4SOIdvtp0 * (1.0 + T2); dT3_dVd = pParam->B4SOIdvtp0 * dT2_dVd; T4 = Vtm * log(Leff / T3); dT4_dVd = -Vtm * dT3_dVd / T3; DITS_Sft = n * T4; dDITS_Sft_dVd = dn_dVd * T4 + n * dT4_dVd; dDITS_Sft_dVb = T4 * dn_dVb; if (selfheat) { /* dDITS_Sft_dT = n * KboQ * log(Leff / T3); *//* v4.2 bugfix temp deriv */ dDITS_Sft_dT = n * KboQ * log(Leff / T3) + dn_dT * T4; /* v4.2 bugfix temp deriv */ } else dDITS_Sft_dT = 0.0; } else { DITS_Sft = dDITS_Sft_dVd = dDITS_Sft_dVb = 0.0; dDITS_Sft_dT = 0.0; } here->B4SOIthetavth = pParam->B4SOIdvt0 * Theta0; Delt_vth = here->B4SOIthetavth * V0; dDelt_vth_dVb = pParam->B4SOIdvt0 * dTheta0_dVb * V0; if (selfheat) /*dDelt_vth_dT = here->B4SOIthetavth * dvbi_dT;*/ /*dDelt_vth_dT = here->B4SOIthetavth * (dvbi_dT - dphi_dT); */ dDelt_vth_dT = pParam->B4SOIdvt0 * (dTheta0_dT * V0 + Theta0 * (dvbi_dT - dphi_dT)); /* v4.2 bugfix temp deriv */ else dDelt_vth_dT = 0.0; T0 = -0.5 * pParam->B4SOIdvt1w * pParam->B4SOIweff * Leff / ltw; if (T0 > -EXPL_THRESHOLD) { T1 = exp(T0); T2 = T1 * (1.0 + 2.0 * T1); dT1_dVb = -T0 / ltw * T1 * dltw_dVb; dT2_dVb = (1.0 + 4.0 * T1) * dT1_dVb; dT2_dT = -(1.0 + 4.0 * T1) * T1 * T0/ltw * dltw_dT; } else { T1 = MIN_EXPL; T2 = T1 * (1.0 + 2.0 * T1); dT2_dVb = 0.0; dT2_dT = 0; } T0 = pParam->B4SOIdvt0w * T2; DeltVthw = T0 * V0; dDeltVthw_dVb = pParam->B4SOIdvt0w * dT2_dVb * V0; if (selfheat) /* dDeltVthw_dT = T0 * dvbi_dT; */ /* dDeltVthw_dT = T0 * (dvbi_dT - dphi_dT); v4.1 */ /* v4.2 bugfix temp deriv */ dDeltVthw_dT = T0 * (dvbi_dT - dphi_dT) + pParam->B4SOIdvt0w * dT2_dT * V0; /* v4.2 bugfix temp deriv */ else dDeltVthw_dT = 0.0; T0 = sqrt(1.0 + pParam->B4SOIlpe0 / Leff); T1 = (pParam->B4SOIkt1 + pParam->B4SOIkt1l / Leff + pParam->B4SOIkt2 * Vbs0mos); /* v4.0 */ /* DeltVthtemp = pParam->B4SOIk1eff * (T0 - 1.0) * sqrtPhi + T1 * TempRatioMinus1; */ DeltVthtemp = pParam->B4SOIk1ox * (T0 - 1.0) * sqrtPhi + T1 * TempRatioMinus1; /* v4.0 end */ if (selfheat) /* dDeltVthtemp_dT = T1 / model->B4SOItnom; */ /* dDeltVthtemp_dT = pParam->B4SOIk1ox * (T0 - 1.0) * dsqrtPhi_dT + T1 / model->B4SOItnom; v4.1 */ /* v4.2 bugfix temp deriv */ dDeltVthtemp_dT = pParam->B4SOIk1ox * (T0 - 1.0) * dsqrtPhi_dT + T1 / model-> B4SOItnom+ pParam->B4SOIkt2 * dVbs0mos_dT* TempRatioMinus1;/* v4.2 bugfix temp deriv */ else dDeltVthtemp_dT = 0.0; tmp2 = toxe * phi / (pParam->B4SOIweff + pParam->B4SOIw0); dtmp2_dT = toxe * dphi_dT / (pParam->B4SOIweff + pParam->B4SOIw0); /* v4.2 bugfix temp deriv */ T3 = here->B4SOIeta0 + pParam->B4SOIetab * Vbs0mos;/*v4.0*/ dT3_dT = pParam->B4SOIetab * dVbs0mos_dT; /*v4.2 temp deriv*/ if (T3 < 1.0e-4) /* avoid discontinuity problems caused by etab */ { T9 = 1.0 / (3.0 - 2.0e4 * T3); T5 = (2.0e-4 - T3); /*v4.2 temp deriv*/ T3 = T5 * T9; /*(2.0e-4 - T3) * T9;*/ /*v4.2 temp deriv*/ T4 = T9 * T9 * pParam->B4SOIetab; dT3_dVb = T4 ; dT3_dT = (2.0e4 * T5 * T9 * T9 - T9) * dT3_dT; /*v4.2 temp deriv*/ } else { dT3_dVb = pParam->B4SOIetab ; } /* DIBL_Sft = T3 * pParam->B4SOItheta0vb0 * Vds; dDIBL_Sft_dVd = pParam->B4SOItheta0vb0 * T3; dDIBL_Sft_dVb = pParam->B4SOItheta0vb0 * Vds * dT3_dVb; */ /* v4.2 bug fix */ DIBL_Sft = T3 * theta0vb0 * Vds; dDIBL_Sft_dVd = theta0vb0 * T3; dDIBL_Sft_dVb = theta0vb0 * Vds * dT3_dVb; dDIBL_Sft_dT = Vds * (dT3_dT * theta0vb0 + T3 * dtheta0vb0_dT); /* v4.2 bug fix */ Lpe_Vb = sqrt(1.0 + pParam->B4SOIlpeb / Leff); /* 4.1 */ T0 = exp(2.0 * pParam->B4SOIdvtp4 * Vds); DITS_Sft2 = pParam->B4SOIdvtp2factor * (T0-1) / (T0+1); dDITS_Sft2_dVd = pParam->B4SOIdvtp2factor * pParam->B4SOIdvtp4 * 4.0 * T0 / ((T0+1) * (T0+1)); VthFD = model->B4SOItype * here->B4SOIvth0 + (pParam->B4SOIk1ox * sqrtPhis - pParam->B4SOIk1eff * sqrtPhi) * Lpe_Vb - here->B4SOIk2ox * Vbs0mos- Delt_vth - DeltVthw + (pParam->B4SOIk3 + pParam->B4SOIk3b * Vbs0mos) * tmp2 + DeltVthtemp - DIBL_Sft - DITS_Sft - DITS_Sft2; T6 = pParam->B4SOIk3b * tmp2 - here->B4SOIk2ox + pParam->B4SOIkt2 * TempRatioMinus1; dVthFD_dVb = Lpe_Vb * pParam->B4SOIk1ox * dsqrtPhis_dVb - dDelt_vth_dVb - dDeltVthw_dVb + T6 - dDIBL_Sft_dVb - dDITS_Sft_dVb; /* v4.0 */ /* this is actually dVth_dVbs0mos */ dVthFD_dVe = dVthFD_dVb * dVbs0mos_dVe; /* dVthFD_dVd = -dDIBL_Sft_dVd -dDITS_Sft_dVd; */ /* v4.0 */ dVthFD_dVd = dVthFD_dVb * dVbs0mos_dVd - dDIBL_Sft_dVd - dDITS_Sft_dVd - dDITS_Sft2_dVd; /* v4.1 */ if (selfheat) /* dVthFD_dT = dDeltVthtemp_dT - dDelt_vth_dT - dDeltVthw_dT + dVthFD_dVb * dVbs0mos_dT - dDITS_Sft_dT ; */ /* dVthFD_dT = dDeltVthtemp_dT - dDelt_vth_dT - dDeltVthw_dT + dVthFD_dVb * dVbs0mos_dT - dDITS_Sft_dT + Lpe_Vb * ( pParam->B4SOIk1ox * 0.5 / sqrtPhis * dphi_dT - pParam->B4SOIk1eff * dsqrtPhi_dT); v4.1 */ /* LFW_FD fixed expression */ dVthFD_dT = (pParam->B4SOIk1ox * dsqrtPhis_dT - pParam->B4SOIk1eff * dsqrtPhi_dT) * Lpe_Vb - here->B4SOIk2ox * dVbs0mos_dT - dDelt_vth_dT - dDeltVthw_dT + pParam->B4SOIk3b * dVbs0mos_dT * tmp2 + (pParam->B4SOIk3 + pParam->B4SOIk3b * Vbs0mos) * dtmp2_dT + dDeltVthtemp_dT - dDIBL_Sft_dT - dDITS_Sft_dT; else dVthFD_dT = 0.0; /* VtgseffFD calculation for PhiFD */ VtgsFD = VthFD - Vgs_eff; T10 = model->B4SOInofffd * Vtm; DEXP( ((VtgsFD - model->B4SOIvofffd)/ T10), ExpVtgsFD, T0); VtgseffFD = T10 * log(1.0 + ExpVtgsFD); T0 /= (1.0 + ExpVtgsFD); dVtgseffFD_dVd = T0 * dVthFD_dVd; dVtgseffFD_dVg = -T0 * dVgs_eff_dVg; dVtgseffFD_dVe = T0 * dVthFD_dVe; if (selfheat) /* fix below 1st line of expression - Wagner */ /*dVtgseffFD_dT = T0 * (dVthFD_dT - (VtgsFD - model->B4SOIvofffd)/Temp) */ dVtgseffFD_dT = T0 * (dVthFD_dT - dVgs_eff_dT - (VtgsFD - model->B4SOIvofffd)/Temp) + VtgseffFD/Temp; else dVtgseffFD_dT = 0.0; /* surface potential modeling at strong inversion: PhiON */ VgstFD = Vgs_eff - VthFD; DEXP( ((VgstFD - model->B4SOIvofffd)/ T10), ExpVgstFD, T0); VgsteffFD = T10 * log(1.0 + ExpVgstFD); T0 /= (1.0 + ExpVgstFD); dVgsteffFD_dVd = -T0 * dVthFD_dVd; dVgsteffFD_dVg = T0 * dVgs_eff_dVg; dVgsteffFD_dVe = -T0 * dVthFD_dVe; if (selfheat) /* fix below 1st line of expression - Wagner */ /*dVgsteffFD_dT = T0 * (-dVthFD_dT */ dVgsteffFD_dT = T0 * (dVgs_eff_dT - dVthFD_dT - (VgstFD - model->B4SOIvofffd)/Temp) + VgsteffFD/Temp; else dVgsteffFD_dT = 0.0; /* T1 = model->B4SOImoinFD*pParam->B4SOIk1eff*Vtm*Vtm; */ T1 = model->B4SOImoinFD*pParam->B4SOIk1ox*Vtm*Vtm; if (selfheat) dT1_dT = 2*T1/Temp; else dT1_dT=0.0; T2 = VgsteffFD+ 2*pParam->B4SOIk1eff*sqrt(phi); dT2_dVg = dVgsteffFD_dVg; dT2_dVd = dVgsteffFD_dVd; dT2_dVe = dVgsteffFD_dVe; /* if (selfheat) dT2_dT = dVgsteffFD_dT; */ if (selfheat) dT2_dT = dVgsteffFD_dT + 2*pParam->B4SOIk1eff*dsqrtPhi_dT; /* v4.1 */ else dT2_dT = 0.0; T0 = 1+ VgsteffFD * T2 / T1; dT0_dVg = (VgsteffFD * dT2_dVg + T2 * dVgsteffFD_dVg) / T1; dT0_dVd = (VgsteffFD * dT2_dVd + T2 * dVgsteffFD_dVd) / T1; dT0_dVe = (VgsteffFD * dT2_dVe + T2 * dVgsteffFD_dVe) / T1; if (selfheat) dT0_dT = (VgsteffFD * (dT2_dT - T2/T1 * dT1_dT) + T2 * dVgsteffFD_dT) / T1; else dT0_dT = 0.0; PhiON = phi + Vtm* log(T0) ; dPhiON_dVg = Vtm* dT0_dVg/T0 ; dPhiON_dVd = Vtm* dT0_dVd/T0 ; dPhiON_dVe = Vtm* dT0_dVe/T0 ; if (selfheat) dPhiON_dT = dphi_dT + Vtm* dT0_dT/T0 + (PhiON-phi)/Temp ; /* v4.1 */ else dPhiON_dT = 0.0; /* surface potential from subthreshold to inversion: PhiFD */ T0 = model->B4SOIcox / (model->B4SOIcox + 1.0/(1.0/model->B4SOIcsi + 1.0/Cbox)); PhiFD = PhiON - T0 * VtgseffFD; dPhiFD_dVg = dPhiON_dVg - T0 * dVtgseffFD_dVg; dPhiFD_dVd = dPhiON_dVd - T0 * dVtgseffFD_dVd; dPhiFD_dVe = dPhiON_dVe - T0 * dVtgseffFD_dVe; if (selfheat) dPhiFD_dT = dPhiON_dT - T0 * dVtgseffFD_dT; else dPhiFD_dT = 0; /* built-in potential lowering: Vbs0 */ if (model->B4SOIfdMod == 0) /* v4.0 */ { T0 = -model->B4SOIdvbd1 * pParam->B4SOIleff / pParam->B4SOIlitl; T1 = model->B4SOIdvbd0 * (exp(0.5*T0) + 2*exp(T0)); T2 = T1 * (vbi - phi); T3 = 0.5 * pParam->B4SOIqsi / model->B4SOIcsi; /* v3.2 */ Vbs0t = PhiFD - T3 + model->B4SOIvbsa + T2; dVbs0t_dVg = dPhiFD_dVg; dVbs0t_dVd = dPhiFD_dVd; dVbs0t_dVe = dPhiFD_dVe; if (selfheat) dVbs0t_dT = dPhiFD_dT + T1 * (dvbi_dT - dphi_dT); /* v4.1 */ else dVbs0t_dT = 0; T0 = 1 + model->B4SOIcsi / Cbox; T3 = -model->B4SOIdk2b * pParam->B4SOIleff / pParam->B4SOIlitl; T5 = model->B4SOIk2b * (exp(0.5*T3) + 2*exp(T3)); T1 = (model->B4SOIk1b - T5) / T0; T2 = T1 * Vesfb; T0 = 1.0/(1 + Cbox / model->B4SOIcsi); Vbs0 = T0 * Vbs0t + T2; dVbs0_dVg = T0 * dVbs0t_dVg; dVbs0_dVd = T0 * dVbs0t_dVd; dVbs0_dVe = T0 * dVbs0t_dVe + T1; if (selfheat) dVbs0_dT = T0 * dVbs0t_dT - T1 * dvfbb_dT; else dVbs0_dT = 0.0; } else /* v4.1 */ { T0 = 1.0/(model->B4SOIcsi + Cbox + model->B4SOIcdsbs); T1 = -model->B4SOIdvbd1 * pParam->B4SOIleff / pParam->B4SOIlitl; T2 = model->B4SOIdvbd0 * (exp(0.5*T1) + 2*exp(T1)); T3 = T2 * (Vds + model->B4SOIvsce); T4 = 0.5 * pParam->B4SOIqsi / model->B4SOIcsi; T5 = model->B4SOIcsi * T0 * (PhiFD - T4 + model->B4SOIvbsa); T6 = model->B4SOIcdsbs * T0 * T3; Vbs0t = T5 + T6; T8 = model->B4SOIcsi * T0; dVbs0t_dVg = T8 * dPhiFD_dVg; dVbs0t_dVd = T8 * dPhiFD_dVd + model->B4SOIcdsbs * T0 * T2; dVbs0t_dVe = T8 * dPhiFD_dVe; if (selfheat) dVbs0t_dT = T8 * dPhiFD_dT; else dVbs0t_dT = 0.0; T7 = Cbox * T0 * Vesfb; Vbs0 = Vbs0t + T7; dVbs0_dVg = dVbs0t_dVg; dVbs0_dVe = dVbs0t_dVe + Cbox * T0; dVbs0_dVd = dVbs0t_dVd; if (selfheat) dVbs0_dT = dVbs0t_dT - Cbox * T0 * dvfbb_dT; else dVbs0_dT = 0.0; } /* set lowerbound of Vbs (from SPICE) to Vbs0: Vbsitf (Vbs at back interface) */ if (here->B4SOIsoiMod == 2) /* v3.2 */ /* v3.1 ideal FD: Vbsitf is pinned at Vbs0 */ { Vbs = Vbsitf = Vbs0 + OFF_Vbsitf; dVbsitf_dVg = dVbs0_dVg; dVbsitf_dVd = dVbs0_dVd; dVbsitf_dVe = dVbs0_dVe; /*dVbsitf_dVb = 0.0; */ /*if (selfheat) dVbsitf_dT = dVbs0_dT; */ /*else dVbsitf_dT = 0; */ /* LFW_FD fix */ dVbs_dVg = dVbsitf_dVg; dVbs_dVd = dVbsitf_dVd; dVbs_dVb = dVbsitf_dVb = 0.0; dVbs_dVe = dVbsitf_dVe; if (selfheat) {dVbsitf_dT = dVbs0_dT; dVbs_dT = dVbsitf_dT;} else {dVbsitf_dT = 0; dVbs_dT = 0;} } else /* soiMod = 1 */ { T1 = Vbs - (Vbs0 + OFF_Vbsitf) - 0.01; T2 = sqrt(T1*T1 + 0.0001); T3 = 0.5 * (1 + T1/T2); Vbsitf = (Vbs0 + OFF_Vbsitf) + 0.5 * (T1 + T2); dVbsitf_dVg = (1 - T3) * dVbs0_dVg; dVbsitf_dVd = (1 - T3) * dVbs0_dVd; dVbsitf_dVe = (1 - T3) * dVbs0_dVe; dVbsitf_dVb = T3 ; /* LFW_FD 7 new lines */ /* Note that Vbs has not been redefined */ /* dVbs_dVb = dVbsitf_dVb; */ dVbs_dVg = 0.0; dVbs_dVd = 0.0; dVbs_dVb = 1.0; dVbs_dVe = 0.0; dVbs_dT = 0.0; if (selfheat) dVbsitf_dT = (1 - T3) * dVbs0_dT; else dVbsitf_dT = 0.0; } /* Based on Vbsitf, calculate zero-field body potential for MOS: Vbsmos */ T1 = Vbs0t - Vbsitf - 0.005; T2 = sqrt(T1 * T1 + (2.5e-5)); T3 = 0.5 * (T1 + T2); T4 = T3 * model->B4SOIcsi / pParam->B4SOIqsi; /* v3.2 */ Vbsmos = Vbsitf - 0.5 * T3 * T4; T5 = 0.5 * T4 * (1 + T1 / T2); dVbsmos_dVg = dVbsitf_dVg * (1 + T5) - T5 * dVbs0t_dVg; dVbsmos_dVd = dVbsitf_dVd * (1 + T5) - T5 * dVbs0t_dVd; dVbsmos_dVb = dVbsitf_dVb * (1 + T5); dVbsmos_dVe = dVbsitf_dVe * (1 + T5) - T5 * dVbs0t_dVe; if (selfheat) dVbsmos_dT = dVbsitf_dT * (1 + T5) - T5 * dVbs0t_dT; else dVbsmos_dT = 0.0; /* Vbsmos should be used in MOS after some limiting (Vbseff) */ Vbp = Vbs - Vps; dVbp_dVb = 1; } /* end of v3.0 block edition */ /* v3.0 modification */ /* T2 is Vbsmos limited above Vbsc=-5 */ T0 = Vbsmos + 5 - 0.001; T1 = sqrt(T0 * T0 - 0.004 * (-5)); T2 = (-5) + 0.5 * (T0 + T1); dT2_dVb = (0.5 * (1.0 + T0 / T1)) * dVbsmos_dVb; dT2_dVg = (0.5 * (1.0 + T0 / T1)) * dVbsmos_dVg; dT2_dVd = (0.5 * (1.0 + T0 / T1)) * dVbsmos_dVd; dT2_dVe = (0.5 * (1.0 + T0 / T1)) * dVbsmos_dVe; if (selfheat) dT2_dT = (0.5 * (1.0 + T0 / T1)) * dVbsmos_dT; else dT2_dT = 0.0; /* Vbsh is T2 limited below 1.5 */ T0 = 1.5; T1 = T0 - T2 - 0.002; T3 = sqrt(T1 * T1 + 0.008 * T0); Vbsh = T0 - 0.5 * (T1 + T3); dVbsh_dVb = 0.5 * (1.0 + T1 / T3) * dT2_dVb; dVbsh_dVg = 0.5 * (1.0 + T1 / T3) * dT2_dVg; dVbsh_dVd = 0.5 * (1.0 + T1 / T3) * dT2_dVd; dVbsh_dVe = 0.5 * (1.0 + T1 / T3) * dT2_dVe; if (selfheat) dVbsh_dT = 0.5 * (1.0 + T1 / T3) * dT2_dT; else dVbsh_dT = 0.0; /* Vbseff is Vbsh limited to 0.95*phi */ T0 = 0.95 * phi; T1 = T0 - Vbsh - 0.002; T2 = sqrt(T1 * T1 + 0.008 * T0); Vbseff = T0 - 0.5 * (T1 + T2); dVbseff_dVb = 0.5 * (1.0 + T1 / T2) * dVbsh_dVb; dVbseff_dVg = 0.5 * (1.0 + T1 / T2) * dVbsh_dVg; dVbseff_dVd = 0.5 * (1.0 + T1 / T2) * dVbsh_dVd; dVbseff_dVe = 0.5 * (1.0 + T1 / T2) * dVbsh_dVe; /* if (selfheat) dVbseff_dT = 0.5 * (1.0 + T1 / T2) * dVbsh_dT; */ if (selfheat) { dT0_dT = 0.95 * dphi_dT; dT1_dT = dT0_dT - dVbsh_dT; dVbseff_dT = dT0_dT - 0.5 * (1.0 + T1 / T2) * dT1_dT - 0.002 * dT0_dT / T2; } /* v4.1 */ else dVbseff_dT = 0.0; here->B4SOIvbseff = Vbseff; /* SPICE sol. */ /* end of v3.0 modification */ /* Below all the variables refer to Vbseff */ /* LFW_FD comment out next 6 lines */ /*if (dVbseff_dVb < 1e-20) { */ /* dVbseff_dVb = 1e-20; */ /* dVbsh_dVb *= 1e20; */ /*} */ /*else */ /* dVbsh_dVb /= dVbseff_dVb; */ /*=======================================================================*/ /* Some derivatives were originally taken w.r.t. Vbseff, and named *_dVb */ /* Later in the code, they were corrected by multiplying or dividing */ /* by dVbseff_dVb. */ /* Now, all derivatives labeled *_dVb are taken w.r.t. Vbs */ /* The correction factor "dVbseff_dVb" has been removed where it is */ /* no longer needed. */ /*=======================================================================*/ Phis = phi - Vbseff; /* dPhis_dVb = -1; LFW_FD not uesed */ sqrtPhis = sqrt(Phis); /*dsqrtPhis_dVb = -0.5 / sqrtPhis; */ /* LFW_FD fix/add 4 lines */ dsqrtPhis_dVg = -0.5 * dVbseff_dVg / sqrtPhis; dsqrtPhis_dVd = -0.5 * dVbseff_dVd / sqrtPhis; dsqrtPhis_dVb = -0.5 * dVbseff_dVb / sqrtPhis; dsqrtPhis_dVe = -0.5 * dVbseff_dVe / sqrtPhis; Xdep = Xdep0 * sqrtPhis / sqrtPhi; /*dXdep_dVb = (Xdep0 / sqrtPhi) * dsqrtPhis_dVb; */ /* LFW_FD fix/add 4 lines */ dXdep_dVg = Xdep0 * dsqrtPhis_dVg / sqrtPhi; dXdep_dVd = Xdep0 * dsqrtPhis_dVd / sqrtPhi; dXdep_dVb = Xdep0 * dsqrtPhis_dVb / sqrtPhi; dXdep_dVe = Xdep0 * dsqrtPhis_dVe / sqrtPhi; /* v4.1 */ if (selfheat) { dPhis_dT = dphi_dT - dVbseff_dT; dsqrtPhis_dT = 0.5 / sqrtPhis * dPhis_dT; /* dXdep_dT = dXdep0_dT * sqrtPhis / sqrtPhi + (dsqrtPhis_dT * sqrtPhi - sqrtPhis * dsqrtPhi_dT) / phi; v4.2 Temp Deriv bugfix */ dXdep_dT = dXdep0_dT * sqrtPhis / sqrtPhi + Xdep0 * (dsqrtPhis_dT * sqrtPhi - sqrtPhis * dsqrtPhi_dT) / phi; } else { dPhis_dT = 0.0; dsqrtPhis_dT = 0.0; dXdep_dT = 0.0; } /* end v4.1 */ /* Calculate nstar v3.2 */ /* here->B4SOInstar = model->B4SOIvtm / Charge_q * */ here->B4SOInstar = Vtm / Charge_q * (model->B4SOIcox + epssub / Xdep + pParam->B4SOIcit); /* Vth Calculation */ T3 = sqrt(Xdep); T0 = pParam->B4SOIdvt2 * Vbseff; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->B4SOIdvt2 ; } else /* Added to avoid any discontinuity problems caused by dvt2 */ { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->B4SOIdvt2 * T4 * T4 ; } lt1 = model->B4SOIfactor1 * T3 * T1; /* dlt1_dVb =model->B4SOIfactor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * T2); */ /* LFW_FD fix/add 4 lines */ dlt1_dVg = model->B4SOIfactor1 * (T3 * T2 * dVbseff_dVg + 0.5 * T1 * dXdep_dVg / T3); dlt1_dVd = model->B4SOIfactor1 * (T3 * T2 * dVbseff_dVd + 0.5 * T1 * dXdep_dVd / T3); dlt1_dVb = model->B4SOIfactor1 * (T3 * T2 * dVbseff_dVb + 0.5 * T1 * dXdep_dVb / T3); dlt1_dVe = model->B4SOIfactor1 * (T3 * T2 * dVbseff_dVe + 0.5 * T1 * dXdep_dVe / T3); /* fix below expression Wagner */ /*if (selfheat) dlt1_dT = model->B4SOIfactor1 * T1 * 0.5 / T3 * dXdep_dT;*/ if (selfheat) dlt1_dT = model->B4SOIfactor1 * (T1 * 0.5 / T3 * dXdep_dT + T3 * pParam->B4SOIdvt2 * dVbseff_dT); else dlt1_dT = 0.0; /* v4.1 */ T0 = pParam->B4SOIdvt2w * Vbseff; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->B4SOIdvt2w ; } else /* Added to avoid any discontinuity problems caused by dvt2w */ { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->B4SOIdvt2w * T4 * T4 ; } ltw= model->B4SOIfactor1 * T3 * T1; /* dltw_dVb=model->B4SOIfactor1*(0.5 / T3 * T1 * dXdep_dVb + T3 * T2); */ /* LFW_FD fix/add 4 lines */ dltw_dVg = model->B4SOIfactor1 * (T3 * T2 * dVbseff_dVg + 0.5 * T1 * dXdep_dVg / T3); dltw_dVd = model->B4SOIfactor1 * (T3 * T2 * dVbseff_dVd + 0.5 * T1 * dXdep_dVd / T3); dltw_dVb = model->B4SOIfactor1 * (T3 * T2 * dVbseff_dVb + 0.5 * T1 * dXdep_dVb / T3); dltw_dVe = model->B4SOIfactor1 * (T3 * T2 * dVbseff_dVe + 0.5 * T1 * dXdep_dVe / T3); /* fix next expression Wagner */ /*if (selfheat) dltw_dT = model->B4SOIfactor1 * T1 * 0.5 / T3 * dXdep_dT; */ if (selfheat) dltw_dT = model->B4SOIfactor1 * (T1 * 0.5 / T3 * dXdep_dT + T3 * pParam->B4SOIdvt2w * dVbseff_dT); else dltw_dT = 0.0; /* v4.1 */ T0 = -0.5 * pParam->B4SOIdvt1 * Leff / lt1; if (T0 > -EXPL_THRESHOLD) { T1 = exp(T0); Theta0 = T1 * (1.0 + 2.0 * T1); /*dT1_dVb = -T0 / lt1 * T1 * dlt1_dVb; */ /*dTheta0_dVb = (1.0 + 4.0 * T1) * dT1_dVb; */ /*dT1_dT = -T0 / lt1 * T1 * dlt1_dT; v4.2 bugfix temp deriv */ /*dTheta0_dT = (1.0 + 4.0 * T1) * dT1_dT; v4.2 bugfix temp deriv */ /* LFW_FD fix 5 derivatives */ dTheta0_dVg = -(1.0 + 4.0 * T1) * T1 * T0 * dlt1_dVg / lt1; dTheta0_dVd = -(1.0 + 4.0 * T1) * T1 * T0 * dlt1_dVd / lt1; dTheta0_dVb = -(1.0 + 4.0 * T1) * T1 * T0 * dlt1_dVb / lt1; dTheta0_dVe = -(1.0 + 4.0 * T1) * T1 * T0 * dlt1_dVe / lt1; dTheta0_dT = -(1.0 + 4.0 * T1) * T1 * T0 * dlt1_dT / lt1; } else { T1 = MIN_EXPL; Theta0 = T1 * (1.0 + 2.0 * T1); /* LFW_FD fix 5 derivatives */ dTheta0_dVg = 0.0; dTheta0_dVd = 0.0; dTheta0_dVb = 0.0; dTheta0_dVe = 0.0; dTheta0_dT = 0; /* v4.2 bugfix temp deriv */ } /* Calculate n */ T2 = pParam->B4SOInfactor * epssub / Xdep; /* LFW_FD add 3 derivatives */ dT2_dVg = - T2 / Xdep * dXdep_dVg; dT2_dVd = - T2 / Xdep * dXdep_dVd; dT2_dVb = - T2 / Xdep * dXdep_dVb; dT2_dVe = - T2 / Xdep * dXdep_dVe; dT2_dT = - T2 / Xdep * dXdep_dT; /* v4.2 bugfix temp deriv */ T3 = pParam->B4SOIcdsc + pParam->B4SOIcdscb * Vbseff + pParam->B4SOIcdscd * Vds; /* LFW_FD add/fix 5 derivatives */ dT3_dVg = pParam->B4SOIcdscb * dVbseff_dVg; dT3_dVd = pParam->B4SOIcdscb * dVbseff_dVd + pParam->B4SOIcdscd; dT3_dVb = pParam->B4SOIcdscb * dVbseff_dVb; dT3_dVe = pParam->B4SOIcdscb * dVbseff_dVe; dT3_dT = pParam->B4SOIcdscb * dVbseff_dT; /* LFW */ T4 = (T2 + T3 * Theta0 + pParam->B4SOIcit) / model->B4SOIcox; /* LFW_FD add/fix 5 derivatives */ dT4_dVg = (dT2_dVg + T3 * dTheta0_dVg + Theta0 * dT3_dVg) / model->B4SOIcox; dT4_dVd = (dT2_dVd + T3 * dTheta0_dVd + Theta0 * dT3_dVd) / model->B4SOIcox; dT4_dVb = (dT2_dVb + T3 * dTheta0_dVb + Theta0 * dT3_dVb) / model->B4SOIcox; dT4_dVe = (dT2_dVe + T3 * dTheta0_dVe + Theta0 * dT3_dVe) / model->B4SOIcox; dT4_dT = (dT2_dT + dTheta0_dT* T3 + Theta0*dT3_dT)/ model->B4SOIcox; /* LFW */ if (T4 >= -0.5) { n = 1.0 + T4; dn_dVg = dT4_dVg; dn_dVb = dT4_dVb; dn_dVd = dT4_dVd; dn_dVe = dT4_dVe; dn_dT = dT4_dT; /* v4.2 bugfix temp deriv */ } else /* avoid discontinuity problems caused by T4 */ { T0 = 1.0 / (3.0 + 8.0 * T4); /* n = (1.0 + 3.0 * T4) * T0; */ /* v4.2 bugfix temp deriv */ T5 = 1.0 + 3.0 * T4; /* v4.2 bugfix temp deriv */ n = T0 * T5; /* v4.2 bugfix temp deriv */ dn_dT = T0 * (3.0 - 8.0 * T5 * T0) * dT4_dT; /* Wagner - moved line up from 3 lines below */ T0 *= T0; dn_dVg = T0 * dT4_dVg; dn_dVb = T0 * dT4_dVb; dn_dVd = T0 * dT4_dVd; dn_dVe = T0 * dT4_dVe; } /* v4.0 DITS */ if (pParam->B4SOIdvtp0 > 0.0) { T0 = -pParam->B4SOIdvtp1 * Vds; if (T0 < -EXPL_THRESHOLD) { T2 = MIN_EXPL; dT2_dVd = 0.0; } else { T2 = exp(T0); dT2_dVd = -pParam->B4SOIdvtp1 * T2; } T3 = Leff + pParam->B4SOIdvtp0 * (1.0 + T2); dT3_dVd = pParam->B4SOIdvtp0 * dT2_dVd; T4 = Vtm * log(Leff / T3); dT4_dVd = -Vtm * dT3_dVd / T3; DITS_Sft = n * T4; dDITS_Sft_dVd = dn_dVd * T4 + n * dT4_dVd; dDITS_Sft_dVb = T4 * dn_dVb; if (selfheat) { /* dDITS_Sft_dT = n * KboQ * log(Leff / T3); */ /* v4.2 bugfix temp deriv */ dDITS_Sft_dT = n * KboQ * log(Leff / T3) + dn_dT * T4; /* v4.2 bugfix temp deriv */ } else dDITS_Sft_dT = 0.0; } else { DITS_Sft = dDITS_Sft_dVd = dDITS_Sft_dVb = 0.0; dDITS_Sft_dT = 0.0; } here->B4SOIthetavth = pParam->B4SOIdvt0 * Theta0; Delt_vth = here->B4SOIthetavth * V0; /* LFW_FD add/fix 4 derivatives */ dDelt_vth_dVg = pParam->B4SOIdvt0 * dTheta0_dVg * V0; dDelt_vth_dVd = pParam->B4SOIdvt0 * dTheta0_dVd * V0; dDelt_vth_dVb = pParam->B4SOIdvt0 * dTheta0_dVb * V0; dDelt_vth_dVe = pParam->B4SOIdvt0 * dTheta0_dVe * V0; if (selfheat) /* dDelt_vth_dT = here->B4SOIthetavth * dvbi_dT; */ /* v4.2 bugfix temp deriv */ dDelt_vth_dT = pParam->B4SOIdvt0 * (dTheta0_dT * V0 + Theta0 * (dvbi_dT - dphi_dT)); /* v4.2 bugfix temp deriv */ else dDelt_vth_dT = 0.0; T0 = -0.5 * pParam->B4SOIdvt1w * pParam->B4SOIweff * Leff / ltw; if (T0 > -EXPL_THRESHOLD) { T1 = exp(T0); T2 = T1 * (1.0 + 2.0 * T1); /*dT1_dVb = -T0 / ltw * T1 * dltw_dVb; */ /*dT2_dVb = (1.0 + 4.0 * T1) * dT1_dVb; */ /*dT1_dT = -T0 / ltw * T1 * dltw_dT; v4.2 bugfix temp deriv */ /*dT2_dT = (1.0 + 4.0 * T1) * dT1_dT; v4.2 bugfix temp deriv */ /* LFW_FD add/fix 5 derivatives */ dT2_dVg = -(1.0 + 4.0 * T1) * T1 * T0 * dltw_dVg / ltw; dT2_dVd = -(1.0 + 4.0 * T1) * T1 * T0 * dltw_dVd / ltw; dT2_dVb = -(1.0 + 4.0 * T1) * T1 * T0 * dltw_dVb / ltw; dT2_dVe = -(1.0 + 4.0 * T1) * T1 * T0 * dltw_dVe / ltw; dT2_dT = -(1.0 + 4.0 * T1) * T1 * T0 * dltw_dT / ltw; } else { T1 = MIN_EXPL; T2 = T1 * (1.0 + 2.0 * T1); /* LFW_FD add/fix 5 derivatives */ dT2_dVg = 0.0; dT2_dVd = 0.0; dT2_dVb = 0.0; dT2_dVe = 0.0; dT2_dT = 0.0; } T0 = pParam->B4SOIdvt0w * T2; DeltVthw = T0 * V0; /* LFW_FD add/fix 5 derivatives */ dDeltVthw_dVg = pParam->B4SOIdvt0w * dT2_dVg * V0; dDeltVthw_dVd = pParam->B4SOIdvt0w * dT2_dVd * V0; dDeltVthw_dVb = pParam->B4SOIdvt0w * dT2_dVb * V0; dDeltVthw_dVe = pParam->B4SOIdvt0w * dT2_dVe * V0; if (selfheat) dDeltVthw_dT = T0 * (dvbi_dT - dphi_dT) + pParam->B4SOIdvt0w * dT2_dT * V0; else dDeltVthw_dT = 0.0; T0 = sqrt(1.0 + pParam->B4SOIlpe0 / Leff); T1 = (pParam->B4SOIkt1 + pParam->B4SOIkt1l / Leff + pParam->B4SOIkt2 * Vbseff); DeltVthtemp = pParam->B4SOIk1ox * (T0 - 1.0) * sqrtPhi + T1 * TempRatioMinus1; /* v4.0 */ /* LFW_FD add/fix 5 derivatives */ dDeltVthtemp_dVg = TempRatioMinus1 * pParam->B4SOIkt2 * dVbseff_dVg; dDeltVthtemp_dVd = TempRatioMinus1 * pParam->B4SOIkt2 * dVbseff_dVd; dDeltVthtemp_dVb = TempRatioMinus1 * pParam->B4SOIkt2 * dVbseff_dVb; dDeltVthtemp_dVe = TempRatioMinus1 * pParam->B4SOIkt2 * dVbseff_dVe; if (selfheat) dDeltVthtemp_dT = pParam->B4SOIk1ox * (T0 - 1.0) * dsqrtPhi_dT + T1 / model-> B4SOItnom + pParam->B4SOIkt2 * TempRatioMinus1 * dVbseff_dT; else dDeltVthtemp_dT = 0.0; tmp2 = toxe * phi / (pParam->B4SOIweff + pParam->B4SOIw0); dtmp2_dT = toxe * dphi_dT / (pParam->B4SOIweff + pParam->B4SOIw0); /* v4.2 bugfix temp deriv */ T3 = here->B4SOIeta0 + pParam->B4SOIetab * Vbseff; if (T3 < 1.0e-4) /* avoid discontinuity problems caused by etab */ { T9 = 1.0 / (3.0 - 2.0e4 * T3); T3 = (2.0e-4 - T3) * T9; T4 = T9 * T9 * pParam->B4SOIetab; /* LFW_FD add/fix 4 derivatives */ dT3_dVg = T4 * dVbseff_dVg; dT3_dVd = T4 * dVbseff_dVd; dT3_dVb = T4 * dVbseff_dVb; dT3_dVe = T4 * dVbseff_dVe; } else { /* LFW_FD add/fix 4 derivatives */ dT3_dVg = pParam->B4SOIetab * dVbseff_dVg; dT3_dVd = pParam->B4SOIetab * dVbseff_dVd; dT3_dVb = pParam->B4SOIetab * dVbseff_dVb; dT3_dVe = pParam->B4SOIetab * dVbseff_dVe; } /* DIBL_Sft = T3 * pParam->B4SOItheta0vb0 * Vds; dDIBL_Sft_dVd = pParam->B4SOItheta0vb0 * T3; dDIBL_Sft_dVb = pParam->B4SOItheta0vb0 * Vds * dT3_dVb; v4.2 bugfix */ DIBL_Sft = T3 * theta0vb0 * Vds; /* LFW_FD add/fix 4 derivatives */ dDIBL_Sft_dVg = theta0vb0 * Vds * dT3_dVg; dDIBL_Sft_dVd = theta0vb0 * (Vds * dT3_dVd + T3) ; dDIBL_Sft_dVb = theta0vb0 * Vds * dT3_dVb; dDIBL_Sft_dVe = theta0vb0 * Vds * dT3_dVe; dDIBL_Sft_dT = T3 * Vds * dtheta0vb0_dT + pParam->B4SOIetab * dVbseff_dT * theta0vb0 * Vds; Lpe_Vb = sqrt(1.0 + pParam->B4SOIlpeb / Leff); T9 = 2.2361 / sqrtPhi; sqrtPhisExt = sqrtPhis - T9 * (Vbsh - Vbseff); /* LFW_FD add/fix 4 derivatives */ dsqrtPhisExt_dVg = dsqrtPhis_dVg - T9 * (dVbsh_dVg - dVbseff_dVg); dsqrtPhisExt_dVd = dsqrtPhis_dVd - T9 * (dVbsh_dVd - dVbseff_dVd); dsqrtPhisExt_dVb = dsqrtPhis_dVb - T9 * (dVbsh_dVb - dVbseff_dVb); dsqrtPhisExt_dVe = dsqrtPhis_dVe - T9 * (dVbsh_dVe - dVbseff_dVe); dsqrtPhisExt_dT = dsqrtPhis_dT - T9 * (dVbsh_dT - dVbseff_dT) + 2.2361 * dsqrtPhi_dT * (Vbsh - Vbseff) / phi; /* v4.2 bugfix temp deriv */ /* 4.1 */ T0 = exp(2.0 * pParam->B4SOIdvtp4 * Vds); DITS_Sft2 = pParam->B4SOIdvtp2factor * (T0-1) / (T0+1); dDITS_Sft2_dVd = pParam->B4SOIdvtp2factor * pParam->B4SOIdvtp4 * 4.0 * T0 / ((T0+1) * (T0+1)); Vth = model->B4SOItype * here->B4SOIvth0 + (pParam->B4SOIk1ox * sqrtPhisExt - pParam->B4SOIk1eff * sqrtPhi) * Lpe_Vb - here->B4SOIk2ox * Vbseff- Delt_vth - DeltVthw +(pParam->B4SOIk3 + pParam->B4SOIk3b * Vbseff) * tmp2 + DeltVthtemp - DIBL_Sft - DITS_Sft - DITS_Sft2; /* LFW_FD add/fix 2 derivatives */ dVth_dVg = pParam->B4SOIk1ox * dsqrtPhisExt_dVg * Lpe_Vb - here->B4SOIk2ox * dVbseff_dVg - dDelt_vth_dVg - dDeltVthw_dVg + pParam->B4SOIk3b * dVbseff_dVg * tmp2 + dDeltVthtemp_dVg - dDIBL_Sft_dVg; /* LFW_FD fix line */ dvth0_dT=0; here->B4SOIvon = Vth; T6 = pParam->B4SOIk3b * tmp2 - here->B4SOIk2ox + pParam->B4SOIkt2 * TempRatioMinus1; /* LFW_FD add/fix 4 derivatives */ /* this is actually dVth_dVbseff */ dVth_dVb = pParam->B4SOIk1ox * dsqrtPhisExt_dVb * Lpe_Vb - here->B4SOIk2ox * dVbseff_dVb - dDelt_vth_dVb - dDeltVthw_dVb + pParam->B4SOIk3b * dVbseff_dVb * tmp2 + dDeltVthtemp_dVb - dDIBL_Sft_dVb - dDITS_Sft_dVb; dVth_dVd = pParam->B4SOIk1ox * dsqrtPhisExt_dVd * Lpe_Vb - here->B4SOIk2ox * dVbseff_dVd - dDelt_vth_dVd - dDeltVthw_dVd + pParam->B4SOIk3b * dVbseff_dVd * tmp2 + dDeltVthtemp_dVd - dDIBL_Sft_dVd - dDITS_Sft_dVd - dDITS_Sft2_dVd; dVth_dVe = pParam->B4SOIk1ox * dsqrtPhisExt_dVe * Lpe_Vb - here->B4SOIk2ox * dVbseff_dVe - dDelt_vth_dVe - dDeltVthw_dVe + pParam->B4SOIk3b * dVbseff_dVe * tmp2 + dDeltVthtemp_dVe - dDIBL_Sft_dVe; /* LFW_FD fix line */ if (selfheat) /* dVth_dT = dDeltVthtemp_dT - dDelt_vth_dT - dDeltVthw_dT - dDITS_Sft_dT; */ dVth_dT = dDeltVthtemp_dT - dDelt_vth_dT - dDeltVthw_dT +(pParam->B4SOIk1ox * dsqrtPhisExt_dT- pParam->B4SOIk1eff * dsqrtPhi_dT) * Lpe_Vb - here->B4SOIk2ox*dVbseff_dT + pParam->B4SOIk3b*tmp2*dVbseff_dT + (pParam->B4SOIk3 + pParam->B4SOIk3b * Vbseff)*dtmp2_dT + model->B4SOItype * dvth0_dT - dDIBL_Sft_dT - dDITS_Sft_dT; /* v4.2 temp deriv */ else dVth_dT = 0.0; /* dVthzb_dT calculation */ if ((model->B4SOIcapMod == 3) && (selfheat == 1)) { T3zb = sqrt(Xdep0); ltwzb = lt1zb = model->B4SOIfactor1 * T3zb; dT3zb_dT = 1.0 / (2.0 * T3zb) * dXdep0_dT; /* v4.2 bugfix temp deriv */ dltwzb_dT = dlt1zb_dT = model->B4SOIfactor1 * dT3zb_dT; /* v4.2 bugfix temp deriv */ T0 = -0.5 * pParam->B4SOIdvt1 * Leff / lt1zb; if (T0 > -EXPL_THRESHOLD) { T1 = exp(T0); Theta0zb = T1 * (1.0 + 2.0 * T1); dT0_dT = -(T0 / lt1zb) * dlt1zb_dT; /* v4.2 bugfix temp deriv */ dT1_dT = T1 * dT0_dT; /* v4.2 bugfix temp deriv */ dTheta0zb_dT = (1.0 + 4.0 * T1) * dT1_dT; /* v4.2 bugfix temp deriv */ } else { T1 = MIN_EXPL; Theta0zb = T1 * (1.0 + 2.0 * T1); dTheta0zb_dT=0; /* v4.2 bugfix temp deriv */ } Delt_vthzb = pParam->B4SOIdvt0 * Theta0zb * V0; /* dDelt_vthzb_dT = pParam->B4SOIdvt0 * Theta0zb * dvbi_dT; */ /* v4.2 bugfix temp deriv */ dDelt_vthzb_dT = pParam->B4SOIdvt0 *( Theta0zb * (dvbi_dT - dphi_dT) + dTheta0zb_dT *V0); /* v4.2 bugfix temp deriv */ T0 = -0.5 * pParam->B4SOIdvt1w * pParam->B4SOIweff * Leff / ltwzb; if (T0 > -EXPL_THRESHOLD) { T1 = exp(T0); T2 = T1 * (1.0 + 2.0 * T1); dT0_dT = -(T0 / ltwzb) * dltwzb_dT; /* v4.2 bugfix temp deriv */ dT1_dT = T1 * dT0_dT; /* v4.2 bugfix temp deriv */ dT2_dT = (1.0 + 4.0 * T1) * dT1_dT; /* v4.2 bugfix temp deriv */ } else { T1 = MIN_EXPL; T2 = T1 * (1.0 + 2.0 * T1); dT2_dT=0; /* v4.2 bugfix temp deriv */ } T0 = pParam->B4SOIdvt0w * T2; dT0_dT= pParam->B4SOIdvt0w * dT2_dT; /* v4.2 bugfix temp deriv */ DeltVthwzb = T0 * V0; /* dDeltVthwzb_dT = T0 * dvbi_dT; *//* v4.2 bugfix temp deriv */ dDeltVthwzb_dT = ( T0 * (dvbi_dT - dphi_dT)+ dT0_dT *V0); /* v4.2 bugfix temp deriv */ T0 = sqrt(1.0 + pParam->B4SOIlpe0 / Leff); T1 = (pParam->B4SOIkt1 + pParam->B4SOIkt1l / Leff); DeltVthtempzb = pParam->B4SOIk1ox * (T0 - 1.0) * sqrtPhi + T1 * TempRatioMinus1; dDeltVthtempzb_dT = pParam->B4SOIk1ox * (T0 - 1.0) * dsqrtPhi_dT + T1 / model->B4SOItnom; /* v4.2 bugfix temp deriv */ Vthzb = model->B4SOItype * here->B4SOIvth0 - Delt_vthzb - DeltVthwzb + pParam->B4SOIk3 * tmp2 + DeltVthtempzb; dVthzb_dT = model->B4SOItype * dvth0_dT - dDelt_vthzb_dT - dDeltVthwzb_dT + pParam->B4SOIk3 * dtmp2_dT + dDeltVthtempzb_dT; /* v4.2 bugfix temp deriv */ /* Vthzb2 = Vthzb + 1.12; v4.1 */ /* v4.2 never used */ } else /* LFW_FD */ Vthzb = dVthzb_dT = 0.0; /* LFW_FD flexilint */ /* Effective Vgst (Vgsteff) Calculation */ Vgst = Vgs_eff - Vth; dVgst_dVg = dVgs_eff_dVg - dVth_dVg; /* LFW_FD fix derivative */ dVgst_dVd = -dVth_dVd; dVgst_dVb = -dVth_dVb; dVgst_dVe = -dVth_dVe; /* LFW_FD new line */ if (selfheat) { dVgst_dT = dVgs_eff_dT - dVth_dT; } else dVgst_dT = 0.0; T10 = n * Vtm; /* v4.0 */ VgstNVt = pParam->B4SOImstar * Vgst / T10; /* v4.0 */ /* LFW_FD add/fix 4 derivatives */ dVgstNVt_dVg = (pParam->B4SOImstar * dVgst_dVg - VgstNVt * dn_dVg * Vtm) / T10; dVgstNVt_dVd = (pParam->B4SOImstar * dVgst_dVd - VgstNVt * dn_dVd * Vtm) / T10; dVgstNVt_dVb = (pParam->B4SOImstar * dVgst_dVb - VgstNVt * dn_dVb * Vtm) / T10; dVgstNVt_dVe = (pParam->B4SOImstar * dVgst_dVe - VgstNVt * dn_dVe * Vtm) / T10; ExpArg = (pParam->B4SOIvoff - (1- pParam->B4SOImstar) * Vgst)/T10; /* LFW_FD */ /* LFW_FD add/fix 4 derivatives */ dExpArg_dVg = (-(1- pParam->B4SOImstar) * dVgst_dVg - ExpArg * dn_dVg * Vtm) / T10; dExpArg_dVd = (-(1- pParam->B4SOImstar) * dVgst_dVd - ExpArg * dn_dVd * Vtm) / T10; dExpArg_dVb = (-(1- pParam->B4SOImstar) * dVgst_dVb - ExpArg * dn_dVb * Vtm) / T10; dExpArg_dVe = (-(1- pParam->B4SOImstar) * dVgst_dVe - ExpArg * dn_dVe * Vtm) / T10; if (selfheat) { dT10_dT = n * dVtm_dT + dn_dT * Vtm; dVgstNVt_dT = -(-pParam->B4SOImstar*dVgst_dT + VgstNVt*dT10_dT)/T10; dExpArg_dT = -(1- pParam->B4SOImstar)*dVgst_dT/T10 -ExpArg*dT10_dT/T10; } else { dT10_dT = 0.0; dVgstNVt_dT = 0.0; dExpArg_dT = 0.0; } /* LFW_FD new line */ dExpVgst_dVg = dExpVgst_dVd = dExpVgst_dVb = dExpVgst_dVe = dExpVgst_dT = 0.0; /* MCJ: Very small Vgst */ if (VgstNVt > EXPL_THRESHOLD) { ExpVgst = 1.0; /* LFW_FD flexilint */ Vgsteff = Vgst; /* T0 is dVgsteff_dVbseff */ T0 = -dVth_dVb; /* LFW_FD add/fix 5 derivatives */ dVgsteff_dVg = dVgst_dVg; dVgsteff_dVd = dVgst_dVd; dVgsteff_dVb = dVgst_dVb; dVgsteff_dVe = dVgst_dVe; if (selfheat) dVgsteff_dT = dVgst_dT ; /* LFW */ else dVgsteff_dT = 0.0; } else if (ExpArg > EXPL_THRESHOLD) { T0 = (Vgst - pParam->B4SOIvoff) / (n * Vtm); ExpVgst = exp(T0); /* LFW_FD add/fix 4 derivatives */ dExpVgst_dVg = (dVgst_dVg - T0 * dn_dVg * Vtm) /(n * Vtm); dExpVgst_dVd = (dVgst_dVd - T0 * dn_dVd * Vtm) /(n * Vtm); dExpVgst_dVb = (dVgst_dVb - T0 * dn_dVb * Vtm) /(n * Vtm); dExpVgst_dVe = (dVgst_dVe - T0 * dn_dVe * Vtm) /(n * Vtm); /*Vgsteff = Vtm * pParam->B4SOIcdep0 / model->B4SOIcox * ExpVgst; *//*v4.2 bug fix */ Vgsteff = Vtm * cdep0 / model->B4SOIcox * ExpVgst; /* v4.2 bug fix */ T3 = Vgsteff / (n * Vtm) ; /* T1 is dVgsteff_dVbseff */ /*T1 = -T3 * (dVth_dVb + T0 * Vtm * dn_dVb);*/ /* LFW_FD fix T1 and 4 derivatives */ T1 = -T3 * ( T0 * Vtm * dn_dVb); dVgsteff_dVg = Vtm * cdep0 / model->B4SOIcox * dExpVgst_dVg; dVgsteff_dVd = Vtm * cdep0 / model->B4SOIcox * dExpVgst_dVd; dVgsteff_dVb = Vtm * cdep0 / model->B4SOIcox * dExpVgst_dVb; dVgsteff_dVe = Vtm * cdep0 / model->B4SOIcox * dExpVgst_dVe; /* enhance next if-then-else block - Wagner*/ if (selfheat) { /* dVgsteff_dT = -T3 * (dVth_dT + T0 * dVtm_dT * n) + Vgsteff / Temp+ T1 * dVbseff_dT; v3.0 */ /* v4.2 temp deriv*/ dVgsteff_dT = -T3 * (-dVgst_dT + T0 * dVtm_dT * n + Vtm * dn_dT) + Vgsteff / Temp+ T1 * dVbseff_dT; /*v4.2 temp deriv*/ dTL0_dT = (dVgst_dT - T0 * (dn_dT * Vtm + n * dVtm_dT)) / (n * Vtm); dExpVgst_dT = ExpVgst * dTL0_dT; dVgsteff_dT = Vgsteff * (dVtm_dT/Vtm + dcdep0_dT/cdep0 + dExpVgst_dT/ExpVgst); } else { dExpVgst_dT = 0.0; dVgsteff_dT = 0.0; } } else { ExpVgst = exp(VgstNVt); /* LFW_FD add/fix 4 derivatives */ dExpVgst_dVg = ExpVgst * dVgstNVt_dVg; dExpVgst_dVd = ExpVgst * dVgstNVt_dVd; dExpVgst_dVb = ExpVgst * dVgstNVt_dVb; dExpVgst_dVe = ExpVgst * dVgstNVt_dVe; /* 4 new lines Wagner */ if (selfheat) dExpVgst_dT = ExpVgst * dVgstNVt_dT; else dExpVgst_dT = 0.0; T1 = T10 * log(1.0 + ExpVgst); /* LFW_FD add/fix 4 derivatives */ dT1_dVg = T10 * dExpVgst_dVg / (1.0 + ExpVgst) + T1 * dn_dVg / n; dT1_dVd = T10 * dExpVgst_dVd / (1.0 + ExpVgst) + T1 * dn_dVd / n; dT1_dVb = T10 * dExpVgst_dVb / (1.0 + ExpVgst) + T1 * dn_dVb / n; dT1_dVe = T10 * dExpVgst_dVe / (1.0 + ExpVgst) + T1 * dn_dVe / n; /*T3 = (1.0 / Temp); */ T3 = (1.0 / Temp + dn_dT / n); /* v4.2 temp deriv */ if (selfheat) /* fix below expression Wagner */ /*dT1_dT = -dT1_dVg * (dVth_dT + Vgst * T3) + T1 * T3;*/ dT1_dT = dT10_dT*log(1.0 + ExpVgst) + T10 * dExpVgst_dT / (1.0 + ExpVgst); else dT1_dT = 0.0; /*dT2_dVg = -model->B4SOIcox / (Vtm * pParam->B4SOIcdep0) * exp(ExpArg) * (1 - pParam->B4SOImstar);*/ /*v4.2 bug fix*/ dT2_dVg = -model->B4SOIcox / (Vtm * cdep0) * exp(ExpArg) * (1 - pParam->B4SOImstar); /*v4.2 bug fix*/ T2 = pParam->B4SOImstar - T10 * dT2_dVg / (1.0 - pParam->B4SOImstar); /* LFW_FD fix all 5 T2 derivatives */ TL1 = dT2_dVg; dTL1_dVg = TL1 * dExpArg_dVg; dTL1_dVd = TL1 * dExpArg_dVd; dTL1_dVb = TL1 * dExpArg_dVb; dTL1_dVe = TL1 * dExpArg_dVe; dT2_dVg = -(dn_dVg * Vtm * TL1 + T10 * dTL1_dVg) / (1.0 - pParam->B4SOImstar); dT2_dVd = -(dn_dVd * Vtm * TL1 + T10 * dTL1_dVd) / (1.0 - pParam->B4SOImstar); dT2_dVb = -(dn_dVb * Vtm * TL1 + T10 * dTL1_dVb) / (1.0 - pParam->B4SOImstar); dT2_dVe = -(dn_dVe * Vtm * TL1 + T10 * dTL1_dVe) / (1.0 - pParam->B4SOImstar); if (selfheat) dT2_dT = -(dT10_dT * TL1 +T10*TL1*(-dVtm_dT/Vtm-dcdep0_dT/cdep0+dExpArg_dT) )/(1.0 - pParam->B4SOImstar); else dT2_dT = 0.0; Vgsteff = T1 / T2; T3 = T2 * T2; /* T4 is dVgsteff_dVbseff */ T4 = (T2 * dT1_dVb - T1 * dT2_dVb) / T3; /* LFW_FD fix 4 derivatives */ dVgsteff_dVg = (T2 * dT1_dVg - T1 * dT2_dVg) / T3; dVgsteff_dVd = (T2 * dT1_dVd - T1 * dT2_dVd) / T3; dVgsteff_dVb = (T2 * dT1_dVb - T1 * dT2_dVb) / T3; dVgsteff_dVe = (T2 * dT1_dVe - T1 * dT2_dVe) / T3; if (selfheat) dVgsteff_dT = (T2 * dT1_dT - T1 * dT2_dT) / T3; else dVgsteff_dT = 0.0; } Vgst2Vtm = Vgsteff + 2.0 * Vtm; if (selfheat) dVgst2Vtm_dT = dVgsteff_dT + 2.0 * dVtm_dT; /* v3.1.1 bug fix */ else dVgst2Vtm_dT = 0.0; here->B4SOIVgsteff = Vgsteff; /* v2.2.3 bug fix */ /* v4.0 F-factor (degradation factor due to pocket implant) */ if (pParam->B4SOIfprout <= 0.0) { FP = 1.0; /* LFW_FD enhance line */ dFP_dVg = dFP_dVb = dFP_dVd = dFP_dVe = dFP_dT = 0.0; } else { T9 = pParam->B4SOIfprout * sqrt(Leff) / Vgst2Vtm; FP = 1.0 / (1.0 + T9); /* LFW_FD fix/add 5 derivatives */ dFP_dVg = FP * FP * T9 / Vgst2Vtm * dVgsteff_dVg; dFP_dVb = FP * FP * T9 / Vgst2Vtm * dVgsteff_dVb; dFP_dVd = FP * FP * T9 / Vgst2Vtm * dVgsteff_dVd; dFP_dVe = FP * FP * T9 / Vgst2Vtm * dVgsteff_dVe; if (selfheat) dFP_dT = FP * T9 * dVgst2Vtm_dT / (1.0 + T9) / Vgst2Vtm; else dFP_dT = 0.0; } /* Calculate Effective Channel Geometry */ T9 = sqrtPhis - sqrtPhi; Weff = pParam->B4SOIweff - (2.0 - here->B4SOInbc) * (pParam->B4SOIdwg * Vgsteff + pParam->B4SOIdwb * T9); /* LFW_FD fix/add 4 derivatives */ dWeff_dVg = -(2.0 - here->B4SOInbc) * (pParam->B4SOIdwg * dVgsteff_dVg + pParam->B4SOIdwb * dsqrtPhis_dVg); dWeff_dVb = -(2.0 - here->B4SOInbc) * (pParam->B4SOIdwg * dVgsteff_dVb + pParam->B4SOIdwb * dsqrtPhis_dVb); dWeff_dVd = -(2.0 - here->B4SOInbc) * (pParam->B4SOIdwg * dVgsteff_dVd + pParam->B4SOIdwb * dsqrtPhis_dVd); dWeff_dVe = -(2.0 - here->B4SOInbc) * (pParam->B4SOIdwg * dVgsteff_dVe + pParam->B4SOIdwb * dsqrtPhis_dVe); /* New - next 5 lines - Wagner */ if (selfheat) dWeff_dT = -(2.0 - here->B4SOInbc) * (pParam->B4SOIdwg * dVgsteff_dT + pParam->B4SOIdwb*(dsqrtPhis_dT - dsqrtPhi_dT)); else dWeff_dT = 0.0; if (Weff < 2.0e-8) /* to avoid the discontinuity problem due to Weff*/ { T0 = 1.0 / (6.0e-8 - 2.0 * Weff); Weff = 2.0e-8 * (4.0e-8 - Weff) * T0; T0 *= T0 * 4.0e-16; dWeff_dVg *= T0; dWeff_dVb *= T0; /* LFW_FD add 2 derivatives */ dWeff_dVd *= T0; dWeff_dVe *= T0; dWeff_dT *= T0; /* new line - Wagner */ } if (model->B4SOIrdsMod == 1) /* v4.0 */ /* LFW_FD enhance line */ Rds = dRds_dVg = dRds_dVb = dRds_dVd = dRds_dVe = dRds_dT = 0.0; else { T0 = pParam->B4SOIprwg * Vgsteff + pParam->B4SOIprwb * T9; /* LFW_FD add 4 derivatives */ dT0_dVg = pParam->B4SOIprwg * dVgsteff_dVg + pParam->B4SOIprwb * dsqrtPhis_dVg; dT0_dVb = pParam->B4SOIprwg * dVgsteff_dVb + pParam->B4SOIprwb * dsqrtPhis_dVb; dT0_dVd = pParam->B4SOIprwg * dVgsteff_dVd + pParam->B4SOIprwb * dsqrtPhis_dVd; dT0_dVe = pParam->B4SOIprwg * dVgsteff_dVe + pParam->B4SOIprwb * dsqrtPhis_dVe; dT0_dT = pParam->B4SOIprwg*dVgsteff_dT + pParam->B4SOIprwb*(dsqrtPhis_dT - dsqrtPhi_dT); /* new expression Wagner */ if (T0 >= -0.9) { Rds = rds0 * (1.0 + T0); /* LFW_FD add/fix 4 derivatives */ dRds_dVg = rds0 * dT0_dVg; dRds_dVb = rds0 * dT0_dVb; dRds_dVd = rds0 * dT0_dVd; dRds_dVe = rds0 * dT0_dVe; if (selfheat && (Rds!=0.0)) /*fix below expression Wagner */ /*dRds_dT = (1.0 + T0) * drds0_dT;*/ dRds_dT = (1.0 + T0) * drds0_dT + rds0 * dT0_dT; else dRds_dT = 0.0; } else /* to avoid the discontinuity problem due to prwg and prwb*/ { T1 = 1.0 / (17.0 + 20.0 * T0); Rds = rds0 * (0.8 + T0) * T1; /* LFW_FD add/fix 4 derivatives */ dRds_dVg = (rds0*T1- 20*Rds*T1) * dT0_dVg; dRds_dVb = (rds0*T1- 20*Rds*T1) * dT0_dVb; dRds_dVd = (rds0*T1- 20*Rds*T1) * dT0_dVd; dRds_dVe = (rds0*T1- 20*Rds*T1) * dT0_dVe; if (selfheat && (Rds!=0.0)) /*fix below expression Wagner */ /*dRds_dT = (0.8 + T0) * T1 * drds0_dT;*/ dRds_dT = (0.8 + T0) * T1 * drds0_dT + (rds0*T1- 20*Rds*T1) * dT0_dT; else dRds_dT = 0.0; } /* here->B4SOIrds = Rds; v2.2.3 bug fix */ /* v4.2 bugfix # 39 */ } here->B4SOIrds = Rds / here->B4SOInf; /* LFW_FD fix */ /* Calculate Abulk */ if (pParam->B4SOIa0 == 0.0) { Abulk0 = Abulk = 1.0; /* LFW_FD expand next 3 lines */ dAbulk_dVg = dAbulk_dVb = dAbulk_dVd = dAbulk_dVe = 0.0; dAbulk0_dVg = dAbulk0_dVb = dAbulk0_dVd = dAbulk0_dVe = 0.0; dAbulk0_dT = dAbulk_dT = 0.0; } else { T10 = pParam->B4SOIketa * Vbsh; if (T10 >= -0.9) { T11 = 1.0 / (1.0 + T10); /* LFW_FD add/fix 5 derivatives */ dT11_dVg = -pParam->B4SOIketa * T11 * T11 * dVbsh_dVg; dT11_dVb = -pParam->B4SOIketa * T11 * T11 * dVbsh_dVb; dT11_dVd = -pParam->B4SOIketa * T11 * T11 * dVbsh_dVd; dT11_dVe = -pParam->B4SOIketa * T11 * T11 * dVbsh_dVe; dT11_dT = -pParam->B4SOIketa * T11 * T11 * dVbsh_dT; } else { /* added to avoid the problems caused by Keta */ T12 = 1.0 / (0.8 + T10); T11 = (17.0 + 20.0 * T10) * T12; /* LFW_FD add/fix 5 derivatives */ dT11_dVg = (20.0-T11) * T12 * pParam->B4SOIketa * dVbsh_dVg; dT11_dVb = (20.0-T11) * T12 * pParam->B4SOIketa * dVbsh_dVb; dT11_dVd = (20.0-T11) * T12 * pParam->B4SOIketa * dVbsh_dVd; dT11_dVe = (20.0-T11) * T12 * pParam->B4SOIketa * dVbsh_dVe; dT11_dT = (20.0-T11) * T12 * pParam->B4SOIketa * dVbsh_dT; } /* v3.0 bug fix */ T10 = phi + pParam->B4SOIketas; T13 = (Vbsh * T11) / T10; /* LFW_FD add/fix 5 derivatives */ dT13_dVg = (Vbsh * dT11_dVg + T11 * dVbsh_dVg) / T10; dT13_dVb = (Vbsh * dT11_dVb + T11 * dVbsh_dVb) / T10; dT13_dVd = (Vbsh * dT11_dVd + T11 * dVbsh_dVd) / T10; dT13_dVe = (Vbsh * dT11_dVe + T11 * dVbsh_dVe) / T10; dT13_dT = (dVbsh_dT * T11 + Vbsh * dT11_dT - T13 * dphi_dT) / T10; /* limit 1/sqrt(1-T13) to 6, starting at T13=0.96 */ if (T13 < 0.96) { T14 = 1 / sqrt(1-T13); T10 = 0.5 * T14 / (1-T13); /* LFW_FD add/fix 5 derivatives */ dT14_dVg = T10 * dT13_dVg; dT14_dVb = T10 * dT13_dVb; dT14_dVd = T10 * dT13_dVd; dT14_dVe = T10 * dT13_dVe; dT14_dT = T10 * dT13_dT; } else { /* IBM tweak */ T11 = 1.0 / (1.0 - 1.0593220339*T13); T14 = (6.0169491525 - 6.3559322034 * T13) * T11; /* T10 = 0.0179546 * T11 * T11; never used - Wagner */ /* LFW_FD add/fix 5 derivatives */ dT14_dVg = (T14 * 1.0593220339 - 6.3559322034) * T11 * dT13_dVg; dT14_dVb = (T14 * 1.0593220339 - 6.3559322034) * T11 * dT13_dVb; dT14_dVd = (T14 * 1.0593220339 - 6.3559322034) * T11 * dT13_dVd; dT14_dVe = (T14 * 1.0593220339 - 6.3559322034) * T11 * dT13_dVe; dT14_dT = (T14 * 1.0593220339 - 6.3559322034) * T11 * dT13_dT; } /* v3.0 bug fix */ /* T10 = 0.5 * pParam->B4SOIk1eff / sqrt(phi + pParam->B4SOIketas); */ T10 = 0.5 * pParam->B4SOIk1ox * Lpe_Vb / sqrt(phi + pParam->B4SOIketas); /* v4.0 */ T1 = T10 * T14; /* LFW_FD add/fix 4 derivatives */ dT1_dVg = T10 * dT14_dVg; dT1_dVb = T10 * dT14_dVb; dT1_dVd = T10 * dT14_dVd; dT1_dVe = T10 * dT14_dVe; T9 = sqrt(pParam->B4SOIxj * Xdep); tmp1 = Leff + 2.0 * T9; T5 = Leff / tmp1; tmp2 = pParam->B4SOIa0 * T5; tmp3 = pParam->B4SOIweff + pParam->B4SOIb1; tmp4 = pParam->B4SOIb0 / tmp3; T2 = tmp2 + tmp4; /* LFW_FD add/fix 4 derivatives */ dT2_dVg = -tmp2 / tmp1 * pParam->B4SOIxj * dXdep_dVg / T9; dT2_dVb = -tmp2 / tmp1 * pParam->B4SOIxj * dXdep_dVb / T9; dT2_dVd = -tmp2 / tmp1 * pParam->B4SOIxj * dXdep_dVd / T9; dT2_dVe = -tmp2 / tmp1 * pParam->B4SOIxj * dXdep_dVe / T9; T6 = T5 * T5; T7 = T5 * T6; /* LFW_FD add 4 derivatives */ dT7_dVg = -3.0 * T7 / tmp1 * pParam->B4SOIxj * dXdep_dVg / T9; dT7_dVb = -3.0 * T7 / tmp1 * pParam->B4SOIxj * dXdep_dVb / T9; dT7_dVd = -3.0 * T7 / tmp1 * pParam->B4SOIxj * dXdep_dVd / T9; dT7_dVe = -3.0 * T7 / tmp1 * pParam->B4SOIxj * dXdep_dVe / T9; Abulk0 = 1 + T1 * T2; /* LFW_FD add/fix 4 derivatives */ dAbulk0_dVg = T1 * dT2_dVg + T2 * dT1_dVg; dAbulk0_dVb = T1 * dT2_dVb + T2 * dT1_dVb; dAbulk0_dVd = T1 * dT2_dVd + T2 * dT1_dVd; dAbulk0_dVe = T1 * dT2_dVe + T2 * dT1_dVe; T8 = pParam->B4SOIags * pParam->B4SOIa0 * T7; dAbulk_dVg = -T1 * T8; Abulk = Abulk0 + dAbulk_dVg * Vgsteff; /* LFW_FD add/fix 4 derivatives */ dAbulk_dVg = dAbulk0_dVg + dAbulk_dVg * dVgsteff_dVg - (T1 * pParam->B4SOIags * pParam->B4SOIa0 * dT7_dVg + T8 * dT1_dVg) * Vgsteff; dAbulk_dVb = dAbulk0_dVb - T1 * T8 * dVgsteff_dVb - (T1 * pParam->B4SOIags * pParam->B4SOIa0 * dT7_dVb + T8 * dT1_dVb) * Vgsteff; dAbulk_dVd = dAbulk0_dVd - T1 * T8 * dVgsteff_dVd - (T1 * pParam->B4SOIags * pParam->B4SOIa0 * dT7_dVd + T8 * dT1_dVd) * Vgsteff; dAbulk_dVe = dAbulk0_dVe - T1 * T8 * dVgsteff_dVe - (T1 * pParam->B4SOIags * pParam->B4SOIa0 * dT7_dVe + T8 * dT1_dVe) * Vgsteff; /* 21 new lines Wagner */ /* need temperature derivs of Abulk & Abulk0 */ TL2 = phi + pParam->B4SOIketas; dTL1_dT = -0.5*T10/TL2*dphi_dT; /* TL2 = T14; not used - Wagner */ dTL3_dT = (0.5*pParam->B4SOIxj/T9)*dXdep_dT; dTL4_dT = -2*tmp2*dTL3_dT/tmp1; /* dTL5_dT = -T13*dphi_dT/(phi + pParam->B4SOIketas); not used - Wagner */ /* dTL6_dT = 0.5*T14*dTL5_dT/(1-T13); not used - Wagner */ /* fix line below - Wagner */ /* dTL7_dT = T10*dTL6_dT + T14*dTL1_dT; */ dTL7_dT = T10*dT14_dT + T14*dTL1_dT; dTL8_dT = -pParam->B4SOIags*pParam->B4SOIa0*6*T7*dTL3_dT/tmp1; dTL9_dT = -dTL7_dT*T8 - T1*dTL8_dT; if (selfheat) { dAbulk0_dT = T1*dTL4_dT + T2*dTL7_dT; dAbulk_dT = dAbulk0_dT + dTL9_dT*Vgsteff + dAbulk_dVg*dVgsteff_dT; } else { dAbulk0_dT = 0.0; dAbulk_dT = 0.0; } } if (Abulk0 < 0.01) { T9 = 1.0 / (3.0 - 200.0 * Abulk0); Abulk0 = (0.02 - Abulk0) * T9; /* fix line below - Wagner */ /* dAbulk0_dVb *= T9 * T9; */ T10 = (200.0 * Abulk0 - 1.0) * T9; /* LFW_FD add/fix 5 derivatives */ dAbulk0_dVg *= T10; dAbulk0_dVb *= T10; dAbulk0_dVd *= T10; dAbulk0_dVe *= T10; dAbulk0_dT *= T10; } if (Abulk < 0.01) { T9 = 1.0 / (3.0 - 200.0 * Abulk); Abulk = (0.02 - Abulk) * T9; /* fix line below - Wagner */ /* dAbulk_dVb *= T9 * T9; */ /* T10 = T9 * T9; 3.2 bug fix */ T10 = (200.0 * Abulk - 1.0) * T9; /* LFW_FD add/fix 5 derivatives */ dAbulk_dVg *= T10; /* 3.2 bug fix */ dAbulk_dVb *= T10; /* 3.2 bug fix */ dAbulk_dVd *= T10; /* 3.2 bug fix */ dAbulk_dVe *= T10; dAbulk_dT *= T10; } here->B4SOIAbulk = Abulk; /*v3.2 for noise */ /* Mobility calculation */ if (model->B4SOImtrlMod) { /* extend "then" block Wagner */ /*T14 = 2.0 * model->B4SOItype *(model->B4SOIphig - model->B4SOIeasub - 0.5 * Eg + 0.45); toxe_mob = model->B4SOIeot * model->B4SOIepsrsub / 3.9;} Bug fix #4 Jun 09 implementing Eeff correctly*/ T14 = 2.0 * model->B4SOItype *(model->B4SOIphig - model->B4SOIeasub - 0.5 * Eg + 0.45); toxe_mob = model->B4SOIeot * model->B4SOIepsrsub / 3.9; /* Bug fix #4 Jun 09 implementing Eeff correctly*/ /* 3 new lines Wagner */ if (selfheat) dT14_dT = - model->B4SOItype * dEg_dT; else dT14_dT = 0.0;} else { T14 = 0.0; /* extend "else" block Wagner */ /*toxe_mob = model->B4SOItox;}*/ toxe_mob = model->B4SOItox; dT14_dT = 0.0;} /* new line Wagner */ if (model->B4SOImobMod == 1) { T0 = Vgsteff + Vth + Vth - T14; T2 = ua + uc * Vbseff; T3 = T0 / toxe_mob; /* Bug fix #4 Jun 09 implementing Eeff correctly*/ T5 = T3 * (T2 + ub * T3); /* LFW_FD fix 5 derivatives */ dDenomi_dVg = (T2 + 2.0 * ub * T3) / toxe_mob * (dVgsteff_dVg + 2 * dVth_dVg) + T3 * uc * dVbseff_dVg; dDenomi_dVb = (T2 + 2.0 * ub * T3) / toxe_mob * (dVgsteff_dVb + 2 * dVth_dVb) + T3 * uc * dVbseff_dVb; dDenomi_dVd = (T2 + 2.0 * ub * T3) / toxe_mob * (dVgsteff_dVd + 2 * dVth_dVd) + T3 * uc * dVbseff_dVd; dDenomi_dVe = (T2 + 2.0 * ub * T3) / toxe_mob * (dVgsteff_dVe + 2 * dVth_dVe) + T3 * uc * dVbseff_dVe; if (selfheat) dDenomi_dT = (T2 + 2.0 * ub * T3) / toxe_mob * (2 * dVth_dT + dVgsteff_dT - dT14_dT) + (dua_dT + Vbseff * duc_dT + uc * dVbseff_dT + dub_dT * T3 ) * T3; else dDenomi_dT = 0.0; } else if (model->B4SOImobMod == 2) /* Bug fix #5 Jun 09 implementing Eeff correctly*/ { T5 = (Vgsteff -T14)/ toxe * (ua /* MobMod=2 does not use Eeff */ + uc * Vbseff + ub * (Vgsteff -T14) /* 'toxe' keeps code consistent with BSIMSOI4.1 Manual*/ / toxe); /* LFW_FD fix 5 derivatives */ dDenomi_dVg = (ua + uc * Vbseff + 2.0 * ub * (Vgsteff -T14) / toxe) / toxe * dVgsteff_dVg + (Vgsteff -T14) /toxe * uc * dVbseff_dVg; dDenomi_dVb = (ua + uc * Vbseff + 2.0 * ub * (Vgsteff -T14) / toxe) / toxe * dVgsteff_dVb + (Vgsteff -T14) /toxe * uc * dVbseff_dVb; dDenomi_dVd = (ua + uc * Vbseff + 2.0 * ub * (Vgsteff -T14) / toxe) / toxe * dVgsteff_dVd + (Vgsteff -T14) /toxe * uc * dVbseff_dVd; dDenomi_dVe = (ua + uc * Vbseff + 2.0 * ub * (Vgsteff -T14) / toxe) / toxe * dVgsteff_dVe + (Vgsteff -T14) / toxe * uc * dVbseff_dVe; if (selfheat) dDenomi_dT = (ua + uc * Vbseff + 2.0 * ub * (Vgsteff -T14) / toxe) / toxe * (dVgsteff_dT-dT14_dT) + (Vgsteff -T14)/ toxe * (dua_dT + Vbseff * duc_dT + uc * dVbseff_dT + dub_dT * (Vgsteff -T14)/ toxe); else dDenomi_dT = 0.0; } else if (model->B4SOImobMod == 3) /* mobMod == 3 */ { T0 = Vgsteff + Vth + Vth - T14; T2 = 1.0 + uc * Vbseff; T3 = T0 / toxe_mob; /* Bug fix #4 Jun 09 implementing Eeff correctly*/ T4 = T3 * (ua + ub * T3); T5 = T4 * T2; /* LFW_FD fix 5 derivatives */ dDenomi_dVg = (ua + 2.0 * ub * T3) * T2 * (dVgsteff_dVg + 2 * dVth_dVg) / toxe_mob + T4 * uc * dVbseff_dVg; dDenomi_dVb = (ua + 2.0 * ub * T3) * T2 * (dVgsteff_dVb + 2 * dVth_dVb) / toxe_mob + T4 * uc * dVbseff_dVb; dDenomi_dVd = (ua + 2.0 * ub * T3) * T2 * (dVgsteff_dVd + 2 * dVth_dVd) / toxe_mob + T4 * uc * dVbseff_dVd; dDenomi_dVe = (ua + 2.0 * ub * T3) * T2 * (dVgsteff_dVe + 2 * dVth_dVe) / toxe_mob + T4 * uc * dVbseff_dVe; if (selfheat) dDenomi_dT = (ua + 2.0 * ub * T3) * T2 * (dVgsteff_dT + 2 * dVth_dT) / toxe_mob + (dua_dT + dub_dT * T3) * T3 * T2 + T4 * (Vbseff * duc_dT + uc * dVbseff_dT); else dDenomi_dT = 0.0; } else /* mobMod == 4 */ { /*universal mobility*/ T0 = (Vgsteff + here->B4SOIvtfbphi1)* 1.0e-8 / toxe/6.0; T1 = exp(pParam->B4SOIeu * log(T0)); /* MobMod=4 does not use Eeff */ /* using 'toxe' keeps code consistent with BSIM4 formulation */ /* LFW_FD add/fix 5 derivatives */ dT1_dVg = T1 * pParam->B4SOIeu * 1.0e-8/ T0 / toxe/6.0 * dVgsteff_dVg; dT1_dVb = T1 * pParam->B4SOIeu * 1.0e-8/ T0 / toxe/6.0 * dVgsteff_dVb; dT1_dVd = T1 * pParam->B4SOIeu * 1.0e-8/ T0 / toxe/6.0 * dVgsteff_dVd; dT1_dVe = T1 * pParam->B4SOIeu * 1.0e-8/ T0 / toxe/6.0 * dVgsteff_dVe; dT1_dT = T1 * pParam->B4SOIeu * 1.0e-8/ T0 / toxe/6.0 * dVgsteff_dT; /*T2 = pParam->B4SOIua + pParam->B4SOIuc * Vbseff; */ /* v4.2 bugfix # 35 */ T2 = ua + uc * Vbseff; /*Coulombic*/ /* pParam->B4SOIucs = pParam->B4SOIucs * pow(TempRatio, pParam->B4SOIucste); Bug# 21 Jul09*/ /* pParam->B4SOIud = pParam->B4SOIud * pow(TempRatio, pParam->B4SOIud1) ; Bug# 21 Jul09 */ ucs = pParam->B4SOIucs * pow(TempRatio, pParam->B4SOIucste); ud = pParam->B4SOIud * pow(TempRatio, pParam->B4SOIud1) ; VgsteffVth = here->B4SOIvgsteffvth; /*T10 = exp(pParam->B4SOIucs * log(0.5 + 0.5 * Vgsteff/VgsteffVth));*/ /* T10 = exp(pParam->B4SOIucs * log(1.0 + Vgsteff/VgsteffVth)); Bug# 21 Jul09 */ /* T11 = pParam->B4SOIud/T10; Bug# 21 Jul09 */ T10 = exp(ucs * log(1.0 + Vgsteff/VgsteffVth)); /* Bug Fix # 21 Jul09*/ T11 = ud/T10; /* Bug Fix # 21 Jul09*/ /*dT11_dVg = - 0.5 * pParam->B4SOIucs * T11 /(0.5 + 0.5*Vgsteff/VgsteffVth)/VgsteffVth;*/ /* dT11_dVg = (pParam->B4SOIucs - 1.0)*pParam->B4SOIud/(VgsteffVth* exp((pParam->B4SOIucs-1.0) * log(1.0 + Vgsteff/VgsteffVth))); Bug# 21 Jul09*/ /* LFW_FD add/fix 5 derivatives */ dT11_dVg = - ud * ucs * exp(-(ucs+1.0) * log(1.0 + Vgsteff/VgsteffVth)) * dVgsteff_dVg / VgsteffVth; dT11_dVb = - ud * ucs * exp(-(ucs+1.0) * log(1.0 + Vgsteff/VgsteffVth)) * dVgsteff_dVb / VgsteffVth; dT11_dVd = - ud * ucs * exp(-(ucs+1.0) * log(1.0 + Vgsteff/VgsteffVth)) * dVgsteff_dVd / VgsteffVth; dT11_dVe = - ud * ucs * exp(-(ucs+1.0) * log(1.0 + Vgsteff/VgsteffVth)) * dVgsteff_dVe / VgsteffVth; dT11_dT = - ud * ucs * exp(-(ucs+1.0) * log(1.0 + Vgsteff/VgsteffVth)) * dVgsteff_dT / VgsteffVth; T5 = T1 * T2 + T11; /* LFW_FD add/fix 5 derivatives */ dDenomi_dVg = T2 * dT1_dVg + T1 * uc * dVbseff_dVg + dT11_dVg; dDenomi_dVb = T2 * dT1_dVb + T1 * uc * dVbseff_dVb + dT11_dVb; dDenomi_dVd = T2 * dT1_dVd + T1 * uc * dVbseff_dVd + dT11_dVd; dDenomi_dVe = T2 * dT1_dVe + T1 * uc * dVbseff_dVe + dT11_dVe; if (selfheat) dDenomi_dT = T2 * dT1_dT + T1 * (dua_dT + Vbseff * duc_dT + uc * dVbseff_dT) + dT11_dT; else dDenomi_dT = 0.0; } if (T5 >= -0.8) { Denomi = 1.0 + T5; } else /* Added to avoid the discontinuity problem caused by ua and ub*/ { T9 = 1.0 / (7.0 + 10.0 * T5); Denomi = (0.6 + T5) * T9; T9 *= T9; dDenomi_dVg *= T9; dDenomi_dVd *= T9; dDenomi_dVb *= T9; dDenomi_dVe *= T9; /* LFW_FD new line */ if (selfheat) dDenomi_dT *= T9; else dDenomi_dT = 0.0; } here->B4SOIueff = ueff = u0temp / Denomi; T9 = -ueff / Denomi; dueff_dVg = T9 * dDenomi_dVg; dueff_dVd = T9 * dDenomi_dVd; dueff_dVb = T9 * dDenomi_dVb; dueff_dVe = T9 * dDenomi_dVe; /* LFW_FD new line */ if (selfheat) dueff_dT = T9 * dDenomi_dT + du0temp_dT / Denomi; else dueff_dT = 0.0; /* Saturation Drain Voltage Vdsat */ WVCox = Weff * vsattemp * model->B4SOIcox; WVCoxRds = WVCox * Rds; /* LFW_FD add 4 derivatives */ dWVCoxRds_dVg = WVCox * dRds_dVg + Rds * vsattemp * model->B4SOIcox * dWeff_dVg; dWVCoxRds_dVb = WVCox * dRds_dVb + Rds * vsattemp * model->B4SOIcox * dWeff_dVb; dWVCoxRds_dVd = WVCox * dRds_dVd + Rds * vsattemp * model->B4SOIcox * dWeff_dVd; dWVCoxRds_dVe = WVCox * dRds_dVe + Rds * vsattemp * model->B4SOIcox * dWeff_dVe; /* 5 lines new - Wagner */ if (selfheat) dWVCoxRds_dT = model->B4SOIcox * Rds * (vsattemp * dWeff_dT + Weff * dvsattemp_dT) + WVCox * dRds_dT; else dWVCoxRds_dT = 0; /* dWVCoxRds_dT = WVCox * dRds_dT + Weff * model->B4SOIcox * Rds * dvsattemp_dT; */ Esat = 2.0 * vsattemp / ueff; EsatL = Esat * Leff; T0 = -EsatL /ueff; dEsatL_dVg = T0 * dueff_dVg; dEsatL_dVd = T0 * dueff_dVd; dEsatL_dVb = T0 * dueff_dVb; dEsatL_dVe = T0 * dueff_dVe; /* LFW_FD new line */ if (selfheat) dEsatL_dT = T0 * dueff_dT + EsatL / vsattemp * dvsattemp_dT; else dEsatL_dT = 0.0; /* Sqrt() */ a1 = pParam->B4SOIa1; if (a1 == 0.0) { Lambda = pParam->B4SOIa2; /* LFW_FD add/fix 5 derivatives */ dLambda_dVg = 0.0; dLambda_dVb = 0.0; dLambda_dVd = 0.0; dLambda_dVe = 0.0; dLambda_dT = 0.0; } else if (a1 > 0.0) /* Added to avoid the discontinuity problem caused by a1 and a2 (Lambda) */ { T0 = 1.0 - pParam->B4SOIa2; T1 = T0 - pParam->B4SOIa1 * Vgsteff - 0.0001; T2 = sqrt(T1 * T1 + 0.0004 * T0); Lambda = pParam->B4SOIa2 + T0 - 0.5 * (T1 + T2); /* LFW_FD add/fix 5 derivatives */ dLambda_dVg = 0.5 * pParam->B4SOIa1 * (1.0 + T1 / T2) * dVgsteff_dVg; dLambda_dVb = 0.5 * pParam->B4SOIa1 * (1.0 + T1 / T2) * dVgsteff_dVb; dLambda_dVd = 0.5 * pParam->B4SOIa1 * (1.0 + T1 / T2) * dVgsteff_dVd; dLambda_dVe = 0.5 * pParam->B4SOIa1 * (1.0 + T1 / T2) * dVgsteff_dVe; if (selfheat) { dT1_dT = - pParam->B4SOIa1 * dVgsteff_dT; dT2_dT = T1 * dT1_dT / T2; dLambda_dT = -0.5 * (dT1_dT + dT2_dT); } else dLambda_dT = 0.0; } else { T1 = pParam->B4SOIa2 + pParam->B4SOIa1 * Vgsteff - 0.0001; T2 = sqrt(T1 * T1 + 0.0004 * pParam->B4SOIa2); Lambda = 0.5 * (T1 + T2); /* LFW_FD add/fix 5 derivatives */ dLambda_dVg = 0.5 * pParam->B4SOIa1 * (1.0 + T1 / T2) * dVgsteff_dVg; dLambda_dVb = 0.5 * pParam->B4SOIa1 * (1.0 + T1 / T2) * dVgsteff_dVb; dLambda_dVd = 0.5 * pParam->B4SOIa1 * (1.0 + T1 / T2) * dVgsteff_dVd; dLambda_dVe = 0.5 * pParam->B4SOIa1 * (1.0 + T1 / T2) * dVgsteff_dVe; if (selfheat) { dT1_dT = pParam->B4SOIa1 * dVgsteff_dT; dT2_dT = T1 * dT1_dT / T2; dLambda_dT = 0.5 * (dT1_dT + dT2_dT); } else dLambda_dT = 0.0; } here->B4SOIAbovVgst2Vtm = Abulk /Vgst2Vtm; /* v2.2.3 bug fix */ if (Rds > 0) { tmp2 = dRds_dVg / Rds + dWeff_dVg / Weff; tmp3 = dRds_dVb / Rds + dWeff_dVb / Weff; } else { tmp2 = dWeff_dVg / Weff; tmp3 = dWeff_dVb / Weff; } if ((Rds == 0.0) && (Lambda == 1.0)) { T0 = 1.0 / (Abulk * EsatL + Vgst2Vtm); tmp1 = 0.0; T1 = T0 * T0; T2 = Vgst2Vtm * T0; T3 = EsatL * Vgst2Vtm; Vdsat = T3 * T0; /* LFW_FD add/fix 5 derivatives */ dT0_dVg = -(Abulk * dEsatL_dVg + EsatL * dAbulk_dVg + dVgsteff_dVg) * T1; dT0_dVd = -(Abulk * dEsatL_dVd + EsatL * dAbulk_dVd + dVgsteff_dVd) * T1; dT0_dVb = -(Abulk * dEsatL_dVb + EsatL * dAbulk_dVb + dVgsteff_dVb) * T1; dT0_dVe = -(Abulk * dEsatL_dVe + EsatL * dAbulk_dVe + dVgsteff_dVe) * T1; if (selfheat) dT0_dT = -(Abulk * dEsatL_dT + dVgst2Vtm_dT) * T1; else dT0_dT = 0.0; /* LFW_FD add/fix 5 derivatives */ dVdsat_dVg = T3 * dT0_dVg + T2 * dEsatL_dVg + EsatL * T0 *dVgsteff_dVg; dVdsat_dVb = T3 * dT0_dVb + T2 * dEsatL_dVb + EsatL * T0 *dVgsteff_dVb; dVdsat_dVd = T3 * dT0_dVd + T2 * dEsatL_dVd + EsatL * T0 *dVgsteff_dVd; dVdsat_dVe = T3 * dT0_dVe + T2 * dEsatL_dVe + EsatL * T0 *dVgsteff_dVe; if (selfheat) dVdsat_dT = T3 * dT0_dT + T2 * dEsatL_dT + EsatL * T0 * dVgst2Vtm_dT; else dVdsat_dT = 0.0; } else { tmp1 = dLambda_dVg / (Lambda * Lambda); T9 = Abulk * WVCoxRds; T8 = Abulk * T9; T7 = Vgst2Vtm * T9; T6 = Vgst2Vtm * WVCoxRds; T0 = 2.0 * Abulk * (T9 - 1.0 + 1.0 / Lambda); /* LFW_FD add/fix 4 derivatives */ dT0_dVg = 2.0 * ((2.0 * Abulk * WVCoxRds - 1.0 + 1.0 / Lambda) * dAbulk_dVg + Abulk * Abulk * dWVCoxRds_dVg - Abulk * dLambda_dVg / (Lambda * Lambda)); dT0_dVb = 2.0 * ((2.0 * Abulk * WVCoxRds - 1.0 + 1.0 / Lambda) * dAbulk_dVb + Abulk * Abulk * dWVCoxRds_dVb - Abulk * dLambda_dVb / (Lambda * Lambda)); dT0_dVd = 2.0 * ((2.0 * Abulk * WVCoxRds - 1.0 + 1.0 / Lambda) * dAbulk_dVd + Abulk * Abulk * dWVCoxRds_dVd - Abulk * dLambda_dVd / (Lambda * Lambda)); dT0_dVe = 2.0 * ((2.0 * Abulk * WVCoxRds - 1.0 + 1.0 / Lambda) * dAbulk_dVe + Abulk * Abulk * dWVCoxRds_dVe - Abulk * dLambda_dVe / (Lambda * Lambda)); if (selfheat) { if (Rds!=0.0) tmp4 = dRds_dT / Rds + dvsattemp_dT / vsattemp; else tmp4 = dvsattemp_dT / vsattemp; /*fix below expression Wagner */ /*dT0_dT = 2.0 * T8 * tmp4; */ /*dT0_dT = 2.0 * T8 * tmp4 */ /* + 2.0 * dAbulk_dT * (T9-1.0+1.0/Lambda) */ /* + 2.0 * Abulk * (WVCoxRds*dAbulk_dT-dLambda_dT/(Lambda*Lambda)); */ /*fix again below expression Wagner */ dT0_dT = 2.0 * dAbulk_dT * (T9-1.0+1.0/Lambda) + 2.0 * Abulk * (WVCoxRds*dAbulk_dT+Abulk*dWVCoxRds_dT-dLambda_dT/(Lambda*Lambda)); } else tmp4 = dT0_dT = 0.0; T1 = Vgst2Vtm * (2.0 / Lambda - 1.0) + Abulk * EsatL + 3.0 * T7; /* LFW_FD add/fix 4 derivatives */ dT1_dVg = (2.0 / Lambda - 1.0) * dVgsteff_dVg - 2.0 * Vgst2Vtm * dLambda_dVg / (Lambda * Lambda) + EsatL * dAbulk_dVg + Abulk * dEsatL_dVg + 3.0 * (dVgsteff_dVg * Abulk * WVCoxRds + Vgst2Vtm * dAbulk_dVg * WVCoxRds + Vgst2Vtm * Abulk * dWVCoxRds_dVg); dT1_dVb = (2.0 / Lambda - 1.0) * dVgsteff_dVb - 2.0 * Vgst2Vtm * dLambda_dVb / (Lambda * Lambda) + EsatL * dAbulk_dVb + Abulk * dEsatL_dVb + 3.0 * (dVgsteff_dVb * Abulk * WVCoxRds + Vgst2Vtm * dAbulk_dVb * WVCoxRds + Vgst2Vtm * Abulk * dWVCoxRds_dVb); dT1_dVd = (2.0 / Lambda - 1.0) * dVgsteff_dVd - 2.0 * Vgst2Vtm * dLambda_dVd / (Lambda * Lambda) + EsatL * dAbulk_dVd + Abulk * dEsatL_dVd + 3.0 * (dVgsteff_dVd * Abulk * WVCoxRds + Vgst2Vtm * dAbulk_dVd * WVCoxRds + Vgst2Vtm * Abulk * dWVCoxRds_dVd); dT1_dVe = (2.0 / Lambda - 1.0) * dVgsteff_dVe - 2.0 * Vgst2Vtm * dLambda_dVe / (Lambda * Lambda) + EsatL * dAbulk_dVe + Abulk * dEsatL_dVe + 3.0 * (dVgsteff_dVe * Abulk * WVCoxRds + Vgst2Vtm * dAbulk_dVe * WVCoxRds + Vgst2Vtm * Abulk * dWVCoxRds_dVe); /* fix below "if" expresssion - Wagner */ /*if (selfheat) { tmp4 += dVgst2Vtm_dT / Vgst2Vtm; dT1_dT = (2.0 / Lambda - 1.0) * dVgst2Vtm_dT + Abulk * dEsatL_dT + 3.0 * T7 * tmp4; } else dT1_dT = 0.0; */ if (selfheat) dT1_dT = (2.0 / Lambda - 1.0) * dVgst2Vtm_dT - Vgst2Vtm * 2 * dLambda_dT / (Lambda*Lambda) + dAbulk_dT * EsatL + Abulk * dEsatL_dT + 3.0 * Vgst2Vtm * dAbulk_dT * WVCoxRds + 3.0 * dVgst2Vtm_dT * Abulk * WVCoxRds + 3.0 * T7 * tmp4; else dT1_dT = 0.0; T2 = Vgst2Vtm * (EsatL + 2.0 * T6); /* LFW_FD add/fix 4 derivatives */ dT2_dVg = dVgsteff_dVg * (EsatL + 4.0 * T6) + Vgst2Vtm * (dEsatL_dVg + 2 * Vgst2Vtm * dWVCoxRds_dVg); dT2_dVb = dVgsteff_dVb * (EsatL + 4.0 * T6) + Vgst2Vtm * (dEsatL_dVb + 2 * Vgst2Vtm * dWVCoxRds_dVb); dT2_dVd = dVgsteff_dVd * (EsatL + 4.0 * T6) + Vgst2Vtm * (dEsatL_dVd + 2 * Vgst2Vtm * dWVCoxRds_dVd); dT2_dVe = dVgsteff_dVe * (EsatL + 4.0 * T6) + Vgst2Vtm * (dEsatL_dVe + 2 * Vgst2Vtm * dWVCoxRds_dVe); if (selfheat) /* fix below expression - Wagner */ /*dT2_dT = Vgst2Vtm * dEsatL_dT + EsatL * dVgst2Vtm_dT + 2.0 * T6 * (dVgst2Vtm_dT + Vgst2Vtm * tmp4); */ dT2_dT = dVgst2Vtm_dT * (EsatL + 2.0 * T6) + Vgst2Vtm * (dEsatL_dT + 2.0 * T6 * tmp4 + 2.0 * dVgst2Vtm_dT * WVCoxRds); else dT2_dT = 0.0; T3 = sqrt(T1 * T1 - 2.0 * T0 * T2); Vdsat = (T1 - T3) / T0; dVdsat_dVg = (dT1_dVg - (T1 * dT1_dVg - dT0_dVg * T2 - T0 * dT2_dVg) / T3 - Vdsat * dT0_dVg) / T0; dVdsat_dVb = (dT1_dVb - (T1 * dT1_dVb - dT0_dVb * T2 - T0 * dT2_dVb) / T3 - Vdsat * dT0_dVb) / T0; /* LFW_FD add/fix 2 derivatives */ dVdsat_dVd = (dT1_dVd - (T1 * dT1_dVd - dT0_dVd * T2 - T0 * dT2_dVd) / T3 - Vdsat * dT0_dVd) / T0; dVdsat_dVe = (dT1_dVe - (T1 * dT1_dVe - dT0_dVe * T2 - T0 * dT2_dVe) / T3 - Vdsat * dT0_dVe) / T0; if (selfheat) dVdsat_dT = (dT1_dT - (T1 * dT1_dT - dT0_dT * T2 - T0 * dT2_dT) / T3 - Vdsat * dT0_dT) / T0; else dVdsat_dT = 0.0; } here->B4SOIvdsat = Vdsat; /* Effective Vds (Vdseff) Calculation */ T1 = Vdsat - Vds - pParam->B4SOIdelta; dT1_dVg = dVdsat_dVg; dT1_dVd = dVdsat_dVd - 1.0; dT1_dVb = dVdsat_dVb; dT1_dVe = dVdsat_dVe; /* LFW_FD new line */ dT1_dT = dVdsat_dT; T2 = sqrt(T1 * T1 + 4.0 * pParam->B4SOIdelta * Vdsat); T0 = T1 / T2; T3 = 2.0 * pParam->B4SOIdelta / T2; dT2_dVg = T0 * dT1_dVg + T3 * dVdsat_dVg; dT2_dVd = T0 * dT1_dVd + T3 * dVdsat_dVd; dT2_dVb = T0 * dT1_dVb + T3 * dVdsat_dVb; dT2_dVe = T0 * dT1_dVe + T3 * dVdsat_dVe; /* LFW_FD new line */ if (selfheat) dT2_dT = T0 * dT1_dT + T3 * dVdsat_dT; else dT2_dT = 0.0; Vdseff = Vdsat - 0.5 * (T1 + T2); dVdseff_dVg = dVdsat_dVg - 0.5 * (dT1_dVg + dT2_dVg); dVdseff_dVd = dVdsat_dVd - 0.5 * (dT1_dVd + dT2_dVd); dVdseff_dVb = dVdsat_dVb - 0.5 * (dT1_dVb + dT2_dVb); dVdseff_dVe = dVdsat_dVe - 0.5 * (dT1_dVe + dT2_dVe); /* LFW_FD new line */ if (selfheat) dVdseff_dT = dVdsat_dT - 0.5 * (dT1_dT + dT2_dT); else dVdseff_dT = 0.0; if (Vdseff > Vds) Vdseff = Vds; /* This code is added to fixed the problem caused by computer precision when Vds is very close to Vdseff. */ diffVds = Vds - Vdseff; here->B4SOIVdseff = Vdseff; /* v2.2.3 bug fix */ /* Calculate VAsat */ tmp4 = 1.0 - 0.5 * Abulk * Vdsat / Vgst2Vtm; T9 = WVCoxRds * Vgsteff; T8 = T9 / Vgst2Vtm; T0 = EsatL + Vdsat + 2.0 * T9 * tmp4; T7 = 2.0 * WVCoxRds * tmp4; /* LFW_FD fix/add 4 derivatives */ dT0_dVg = dEsatL_dVg + dVdsat_dVg + 2.0 * (tmp4 * (WVCoxRds * dVgsteff_dVg + dWVCoxRds_dVg * Vgsteff) - T9 * (0.5 * (Abulk * dVdsat_dVg + dAbulk_dVg * Vdsat - Abulk * Vdsat * dVgsteff_dVg / Vgst2Vtm) / Vgst2Vtm)); dT0_dVb = dEsatL_dVb + dVdsat_dVb + 2.0 * (tmp4 * (WVCoxRds * dVgsteff_dVb + dWVCoxRds_dVb * Vgsteff) - T9 * (0.5 * (Abulk * dVdsat_dVb + dAbulk_dVb * Vdsat - Abulk * Vdsat * dVgsteff_dVb / Vgst2Vtm) / Vgst2Vtm)); dT0_dVd = dEsatL_dVd + dVdsat_dVd + 2.0 * (tmp4 * (WVCoxRds * dVgsteff_dVd + dWVCoxRds_dVd * Vgsteff) - T9 * (0.5 * (Abulk * dVdsat_dVd + dAbulk_dVd * Vdsat - Abulk * Vdsat * dVgsteff_dVd / Vgst2Vtm) / Vgst2Vtm)); dT0_dVe = dEsatL_dVe + dVdsat_dVe + 2.0 * (tmp4 * (WVCoxRds * dVgsteff_dVe + dWVCoxRds_dVe * Vgsteff) - T9 * (0.5 * (Abulk * dVdsat_dVe + dAbulk_dVe * Vdsat - Abulk * Vdsat * dVgsteff_dVe / Vgst2Vtm) / Vgst2Vtm)); if (selfheat) { if (Rds!=0.0) tmp4 = dRds_dT / Rds + dvsattemp_dT / vsattemp; else tmp4 = dvsattemp_dT / vsattemp; /* fix below expression - Wagner */ /*dT0_dT = dEsatL_dT + dVdsat_dT + T7 * tmp4 * Vgsteff - T8 * (Abulk * dVdsat_dT - Abulk * Vdsat * dVgst2Vtm_dT / Vgst2Vtm); */ dT0_dT = dEsatL_dT + dVdsat_dT + T7 * (dVgsteff_dT + Vgsteff * tmp4) - T9 * (dAbulk_dT * Vdsat + Abulk * dVdsat_dT - Abulk * Vdsat * dVgst2Vtm_dT / Vgst2Vtm) / Vgst2Vtm; } else dT0_dT = 0.0; T9 = WVCoxRds * Abulk; T1 = 2.0 / Lambda - 1.0 + T9; /* LFW_FD fix/add 4 derivatives */ dT1_dVg = -2.0 * dLambda_dVg / (Lambda * Lambda) + WVCoxRds * dAbulk_dVg + dWVCoxRds_dVg * Abulk; dT1_dVb = -2.0 * dLambda_dVb / (Lambda * Lambda) + WVCoxRds * dAbulk_dVb + dWVCoxRds_dVb * Abulk; dT1_dVd = -2.0 * dLambda_dVd / (Lambda * Lambda) + WVCoxRds * dAbulk_dVd + dWVCoxRds_dVd * Abulk; dT1_dVe = -2.0 * dLambda_dVe / (Lambda * Lambda) + WVCoxRds * dAbulk_dVe + dWVCoxRds_dVe * Abulk; if (selfheat) /* fix below expression - Wagner */ /*dT1_dT = T9 * tmp4;*/ dT1_dT = - 2.0 * dLambda_dT / (Lambda*Lambda) /* + T9 * tmp4 + WVCoxRds * dAbulk_dT; fix again */ + WVCoxRds * dAbulk_dT + dWVCoxRds_dT * Abulk; else dT1_dT = 0.0; Vasat = T0 / T1; dVasat_dVg = (dT0_dVg - Vasat * dT1_dVg) / T1; dVasat_dVb = (dT0_dVb - Vasat * dT1_dVb) / T1; /* LFW_FD fix/add 2 derivatives */ dVasat_dVd = (dT0_dVd - Vasat * dT1_dVd) / T1; dVasat_dVe = (dT0_dVe - Vasat * dT1_dVe) / T1; if (selfheat) dVasat_dT = (dT0_dT - Vasat * dT1_dT) / T1; else dVasat_dT = 0.0; /* Calculate VACLM */ if ((pParam->B4SOIpclm > 0.0) && (diffVds > 1.0e-10)) { T0 = 1.0 / (pParam->B4SOIpclm * Abulk * pParam->B4SOIlitl); dT0_dVb = -T0 / Abulk * dAbulk_dVb; dT0_dVg = -T0 / Abulk * dAbulk_dVg; /* LFW_FD add 2 derivatives */ dT0_dVd = -T0 / Abulk * dAbulk_dVd; dT0_dVe = -T0 / Abulk * dAbulk_dVe; T2 = Vgsteff / EsatL; T1 = Leff * (Abulk + T2); /* LFW_FD add/fix 4 derivatives */ dT1_dVg = Leff * (dAbulk_dVg + (dVgsteff_dVg - T2 * dEsatL_dVg) / EsatL); dT1_dVb = Leff * (dAbulk_dVb + (dVgsteff_dVb - T2 * dEsatL_dVb) / EsatL); dT1_dVd = Leff * (dAbulk_dVd + (dVgsteff_dVd - T2 * dEsatL_dVd) / EsatL); dT1_dVe = Leff * (dAbulk_dVe + (dVgsteff_dVe - T2 * dEsatL_dVe) / EsatL); /* fix below expression - Wagner */ /*if (selfheat) dT1_dT = -T2 * dEsatL_dT / Esat; */ if (selfheat) dT1_dT = Leff * (dAbulk_dT + (dVgsteff_dT - T2 * dEsatL_dT) / EsatL); else dT1_dT = 0.0; T9 = T0 * T1; VACLM = T9 * diffVds; dVACLM_dVg = T0 * dT1_dVg * diffVds - T9 * dVdseff_dVg + T1 * diffVds * dT0_dVg; dVACLM_dVb = (dT0_dVb * T1 + T0 * dT1_dVb) * diffVds - T9 * dVdseff_dVb; /* LFW_FD add/fix 2 derivatives */ dVACLM_dVd = (dT0_dVd * T1 + T0 * dT1_dVd) * diffVds + T9 * (1.0 - dVdseff_dVd); dVACLM_dVe = (dT0_dVe * T1 + T0 * dT1_dVe) * diffVds - T9 * dVdseff_dVe; if (selfheat) /* fix below expression - Wagner */ /*dVACLM_dT = T0 * dT1_dT * diffVds - T9 * dVdseff_dT;*/ dVACLM_dT = - T9 * dVdseff_dT + diffVds * (T0 * dT1_dT - T1 * T0 * dAbulk_dT / Abulk); else dVACLM_dT = 0.0; } else { VACLM = MAX_EXPL; dVACLM_dVd = dVACLM_dVg = dVACLM_dVb = dVACLM_dVe = dVACLM_dT = 0.0; /* LFW_FD expand line */ } /* Calculate VADIBL */ /* if (pParam->B4SOIthetaRout > 0.0) */ /* v4.2 bugfix # 36 */ if (thetaRout > 0.0) { T8 = Abulk * Vdsat; T0 = Vgst2Vtm * T8; T1 = Vgst2Vtm + T8; /* LFW_FD fix/add 4 derivatives */ dT0_dVg = T8 * dVgsteff_dVg + Vgst2Vtm * (Abulk * dVdsat_dVg + dAbulk_dVg * Vdsat); dT0_dVb = T8 * dVgsteff_dVb + Vgst2Vtm * (Abulk * dVdsat_dVb + dAbulk_dVb * Vdsat); dT0_dVd = T8 * dVgsteff_dVd + Vgst2Vtm * (Abulk * dVdsat_dVd + dAbulk_dVd * Vdsat); dT0_dVe = T8 * dVgsteff_dVe + Vgst2Vtm * (Abulk * dVdsat_dVe + dAbulk_dVe * Vdsat); /* LFW_FD fix/add 4 derivatives */ dT1_dVg = dVgsteff_dVg + Abulk * dVdsat_dVg + dAbulk_dVg * Vdsat; dT1_dVb = dVgsteff_dVb + Abulk * dVdsat_dVb + dAbulk_dVb * Vdsat; dT1_dVd = dVgsteff_dVd + Abulk * dVdsat_dVd + dAbulk_dVd * Vdsat; dT1_dVe = dVgsteff_dVe + Abulk * dVdsat_dVe + dAbulk_dVe * Vdsat; if (selfheat) { /* fix below expression - Wagner */ /*dT0_dT = dVgst2Vtm_dT * T8 + Abulk * Vgst2Vtm * dVdsat_dT;*/ dT0_dT = dVgst2Vtm_dT * T8 + Vgst2Vtm * dAbulk_dT * Vdsat + Vgst2Vtm * Abulk * dVdsat_dT; /* fix below expression - Wagner */ /*dT1_dT = dVgst2Vtm_dT + Abulk * dVdsat_dT;*/ dT1_dT = dVgst2Vtm_dT + dAbulk_dT * Vdsat + Abulk * dVdsat_dT; } else dT0_dT = dT1_dT = 0.0; T9 = T1 * T1; /*T2 = pParam->B4SOIthetaRout; */ /* v4.2 bugfix # 36 */ T2 = thetaRout; VADIBL = (Vgst2Vtm - T0 / T1) / T2; /* LFW_FD fix/add 4 derivatives */ dVADIBL_dVg = (dVgsteff_dVg - (dT0_dVg - T0 * dT1_dVg /T1 )/T1) / T2; dVADIBL_dVb = (dVgsteff_dVb - (dT0_dVb - T0 * dT1_dVb /T1 )/T1) / T2; dVADIBL_dVd = (dVgsteff_dVd - (dT0_dVd - T0 * dT1_dVd /T1 )/T1) / T2; dVADIBL_dVe = (dVgsteff_dVe - (dT0_dVe - T0 * dT1_dVe /T1 )/T1) / T2; if (selfheat) /*fix below expression Wagner */ /*dVADIBL_dT = (dVgst2Vtm_dT - dT0_dT/T1 + T0*dT1_dT/T9) / T2;*/ dVADIBL_dT = (dVgst2Vtm_dT - dT0_dT/T1 + T0*dT1_dT/T9) / T2 - VADIBL * dthetaRout_dT / T2; else dVADIBL_dT = 0.0; T7 = pParam->B4SOIpdiblb * Vbseff; if (T7 >= -0.9) { T3 = 1.0 / (1.0 + T7); VADIBL *= T3; /* LFW_FD fix/add 4 derivatives */ dVADIBL_dVg = (dVADIBL_dVg - VADIBL * pParam->B4SOIpdiblb * dVbseff_dVg) * T3; dVADIBL_dVb = (dVADIBL_dVb - VADIBL * pParam->B4SOIpdiblb * dVbseff_dVb) * T3; dVADIBL_dVd = (dVADIBL_dVd - VADIBL * pParam->B4SOIpdiblb * dVbseff_dVd) * T3; dVADIBL_dVe = (dVADIBL_dVe - VADIBL * pParam->B4SOIpdiblb * dVbseff_dVe) * T3; /*fix below expression Wagner */ /*if (selfheat) dVADIBL_dT *= T3;*/ if (selfheat) dVADIBL_dT = T3 * dVADIBL_dT - VADIBL*pParam->B4SOIpdiblb*dVbseff_dT/(1.0+T7); else dVADIBL_dT = 0.0; } else /* Added to avoid the discontinuity problem caused by pdiblcb */ { T4 = 1.0 / (0.8 + T7); T3 = (17.0 + 20.0 * T7) * T4; /* LFW_FD fix/add 4 derivatives */ dVADIBL_dVg = dVADIBL_dVg * T3 + VADIBL * (20.0 - T3) * T4 * pParam->B4SOIpdiblb * dVbseff_dVg; dVADIBL_dVb = dVADIBL_dVb * T3 + VADIBL * (20.0 - T3) * T4 * pParam->B4SOIpdiblb * dVbseff_dVb; dVADIBL_dVd = dVADIBL_dVd * T3 + VADIBL * (20.0 - T3) * T4 * pParam->B4SOIpdiblb * dVbseff_dVd; dVADIBL_dVe = dVADIBL_dVe * T3 + VADIBL * (20.0 - T3) * T4 * pParam->B4SOIpdiblb * dVbseff_dVe; /*fix below expression Wagner */ /*if (selfheat) dVADIBL_dT *= T3;*/ if (selfheat) dVADIBL_dT = T3 * dVADIBL_dT + VADIBL * (20.0*T4 - T3/(0.8 + T7)) * pParam->B4SOIpdiblb*dVbseff_dT; else dVADIBL_dT = 0.0; VADIBL *= T3; } } else { VADIBL = MAX_EXPL; dVADIBL_dVd = dVADIBL_dVg = dVADIBL_dVb = dVADIBL_dVe = dVADIBL_dT = 0.0; /* LFW_FD enhance line */ } /* v4.0 DITS */ T0 = pParam->B4SOIpditsd * Vds; if (T0 > EXPL_THRESHOLD) { T1 = MAX_EXPL; dT1_dVd = 0; } else { T1 = exp(T0); dT1_dVd = T1 * pParam->B4SOIpditsd; } if (pParam->B4SOIpdits > MIN_EXPL) { T2 = 1.0 + model->B4SOIpditsl * Leff; VADITS = (1.0 + T2 * T1) / pParam->B4SOIpdits; dVADITS_dVg = VADITS * dFP_dVg; /* LFW_FD fix/add 3 derivatives */ dVADITS_dVd = VADITS * dFP_dVd + FP * T2 * dT1_dVd / pParam->B4SOIpdits; dVADITS_dVb = VADITS * dFP_dVb; dVADITS_dVe = VADITS * dFP_dVe; VADITS *= FP; if (selfheat) dVADITS_dT = VADITS * dFP_dT / FP; else dVADITS_dT = 0.0; } else { VADITS = MAX_EXPL; dVADITS_dVg = dVADITS_dVd = dVADITS_dVb = dVADITS_dVe = dVADITS_dT = 0; /* LFW_FD enhance line */ } /* Calculate VA */ T8 = pParam->B4SOIpvag / EsatL; T9 = T8 * Vgsteff; if (T9 > -0.9) { T0 = 1.0 + T9; /* LFW_FD fix/add 4 derivatives */ dT0_dVg = T8 * dVgsteff_dVg - T9 * dEsatL_dVg / EsatL; dT0_dVb = T8 * dVgsteff_dVb - T9 * dEsatL_dVb / EsatL; dT0_dVd = T8 * dVgsteff_dVd - T9 * dEsatL_dVd / EsatL; dT0_dVe = T8 * dVgsteff_dVe - T9 * dEsatL_dVe / EsatL; if (selfheat) /* fix below expression - Wagner */ /*dT0_dT = -T9 * dEsatL_dT / EsatL;*/ dT0_dT = T8 * dVgsteff_dT - T9 * dEsatL_dT / EsatL; else dT0_dT = 0.0; } else /* Added to avoid the discontinuity problems caused by pvag */ { TL1 = T1 = 1.0 / (17.0 + 20.0 * T9); /* change LHS name - Wagner */ T0 = (0.8 + T9) * T1; T1 *= T1; T9 *= T1 / EsatL; /* LFW_FD fix/add 4 derivatives */ dT0_dVg = (1.0 - 20.0 * T0) * TL1 * (T8 * dVgsteff_dVg - T9 * dEsatL_dVg / EsatL); dT0_dVb = (1.0 - 20.0 * T0) * TL1 * (T8 * dVgsteff_dVb - T9 * dEsatL_dVb / EsatL); dT0_dVd = (1.0 - 20.0 * T0) * TL1 * (T8 * dVgsteff_dVd - T9 * dEsatL_dVd / EsatL); dT0_dVe = (1.0 - 20.0 * T0) * TL1 * (T8 * dVgsteff_dVe - T9 * dEsatL_dVe / EsatL); if (selfheat) /* fix below expression - Wagner */ /*dT0_dT = -T9 * dEsatL_dT;*/ dT0_dT = TL1 * (1.0 - 20.0 * T0) * (T8 * dVgsteff_dT - T8 * Vgsteff * dEsatL_dT / EsatL); else dT0_dT = 0.0; } tmp1 = VACLM * VACLM; tmp2 = VADIBL * VADIBL; tmp3 = VACLM + VADIBL; T1 = VACLM * VADIBL / tmp3; tmp3 *= tmp3; dT1_dVg = (tmp1 * dVADIBL_dVg + tmp2 * dVACLM_dVg) / tmp3; dT1_dVd = (tmp1 * dVADIBL_dVd + tmp2 * dVACLM_dVd) / tmp3; dT1_dVb = (tmp1 * dVADIBL_dVb + tmp2 * dVACLM_dVb) / tmp3; dT1_dVe = (tmp1 * dVADIBL_dVe + tmp2 * dVACLM_dVe) / tmp3; /* LFW_FD new line */ if (selfheat) /*fix below expression - Wagner */ /*dT1_dT = (tmp1 * dVADIBL_dT + tmp2 * dVACLM_dT ) / tmp3;*/ dT1_dT = (dVACLM_dT * VADIBL + VACLM * dVADIBL_dT - T1 * (dVACLM_dT + dVADIBL_dT))/ (VACLM + VADIBL); else dT1_dT = 0.0; /* v4.0 adding DITS */ tmp1 = T1 * T1; tmp2 = VADITS * VADITS; tmp3 = T1 + VADITS; T2 = T1 * VADITS / tmp3; tmp3 *= tmp3; dT2_dVg = (tmp1 * dVADITS_dVg + tmp2 * dT1_dVg) / tmp3; dT2_dVd = (tmp1 * dVADITS_dVd + tmp2 * dT1_dVd) / tmp3; /* LFW_FD fix/add 2 derivatives */ dT2_dVb = (tmp1 * dVADITS_dVb + tmp2 * dT1_dVb) / tmp3; dT2_dVe = (tmp1 * dVADITS_dVe + tmp2 * dT1_dVe) / tmp3; if (selfheat) /*fix below expression - Wagner */ /*dT2_dT = (tmp1 * dVADITS_dT + tmp2 * dT1_dT ) / tmp3;*/ dT2_dT = (dT1_dT * VADITS + T1 * dVADITS_dT - T2 * (dT1_dT + dVADITS_dT))/(T1 + VADITS); else dT2_dT = 0.0; /* Va = Vasat + T0 * T1; dVa_dVg = dVasat_dVg + T1 * dT0_dVg + T0 * dT1_dVg; dVa_dVd = dVasat_dVd + T1 * dT0_dVd + T0 * dT1_dVd; dVa_dVb = dVasat_dVb + T1 * dT0_dVb + T0 * dT1_dVb; if (selfheat) dVa_dT = dVasat_dT + T1 * dT0_dT + T0 * dT1_dT; else dVa_dT = 0.0; */ /* v4.0 */ Va = Vasat + T0 * T2; dVa_dVg = dVasat_dVg + T2 * dT0_dVg + T0 * dT2_dVg; dVa_dVd = dVasat_dVd + T2 * dT0_dVd + T0 * dT2_dVd; dVa_dVb = dVasat_dVb + T2 * dT0_dVb + T0 * dT2_dVb; dVa_dVe = dVasat_dVe + T2 * dT0_dVe + T0 * dT2_dVe; /* LFW_FD new line */ if (selfheat) dVa_dT = dVasat_dT + T2 * dT0_dT + T0 * dT2_dT; else dVa_dT = 0.0; /* Calculate Ids */ CoxWovL = model->B4SOIcox * Weff / Leff; beta = ueff * CoxWovL; dbeta_dVg = CoxWovL * dueff_dVg + beta * dWeff_dVg / Weff ; /* LFW_FD fix/add 3 derivatives */ dbeta_dVd = CoxWovL * dueff_dVd + beta * dWeff_dVd / Weff ; dbeta_dVb = CoxWovL * dueff_dVb + beta * dWeff_dVb / Weff ; dbeta_dVe = CoxWovL * dueff_dVe + beta * dWeff_dVe / Weff ; /* fix below if expresssion - Wagner */ /*if (selfheat) dbeta_dT = CoxWovL * dueff_dT; */ if (selfheat) dbeta_dT = CoxWovL * dueff_dT + beta * dWeff_dT / Weff ; else dbeta_dT = 0.0; T0 = 1.0 - 0.5 * Abulk * Vdseff / Vgst2Vtm; /* LFW_FD fix/add 4 derivatives */ dT0_dVg = -0.5 * (Abulk * dVdseff_dVg + dAbulk_dVg * Vdseff -Abulk * Vdseff * dVgsteff_dVg / Vgst2Vtm) / Vgst2Vtm; dT0_dVb = -0.5 * (Abulk * dVdseff_dVb + dAbulk_dVb * Vdseff -Abulk * Vdseff * dVgsteff_dVb / Vgst2Vtm) / Vgst2Vtm; dT0_dVd = -0.5 * (Abulk * dVdseff_dVd + dAbulk_dVd * Vdseff -Abulk * Vdseff * dVgsteff_dVd / Vgst2Vtm) / Vgst2Vtm; dT0_dVe = -0.5 * (Abulk * dVdseff_dVe + dAbulk_dVe * Vdseff -Abulk * Vdseff * dVgsteff_dVe / Vgst2Vtm) / Vgst2Vtm; if (selfheat) /* fix first line of below expression - Wagner */ /*dT0_dT = -0.5 * (Abulk * dVdseff_dT */ dT0_dT = -0.5 * (Abulk * dVdseff_dT + dAbulk_dT * Vdseff - Abulk * Vdseff / Vgst2Vtm * dVgst2Vtm_dT) / Vgst2Vtm; else dT0_dT = 0.0; fgche1 = Vgsteff * T0; /* LFW_FD fix/add 4 derivatives */ dfgche1_dVg = Vgsteff * dT0_dVg + dVgsteff_dVg * T0; dfgche1_dVb = Vgsteff * dT0_dVb + dVgsteff_dVb * T0; dfgche1_dVd = Vgsteff * dT0_dVd + dVgsteff_dVd * T0; dfgche1_dVe = Vgsteff * dT0_dVe + dVgsteff_dVe * T0; /* fix below expression - Wagner */ /*if (selfheat) dfgche1_dT = Vgsteff * dT0_dT;*/ if (selfheat) dfgche1_dT = Vgsteff * dT0_dT + T0 * dVgsteff_dT; else dfgche1_dT = 0.0; T9 = Vdseff / EsatL; fgche2 = 1.0 + T9; dfgche2_dVg = (dVdseff_dVg - T9 * dEsatL_dVg) / EsatL; dfgche2_dVd = (dVdseff_dVd - T9 * dEsatL_dVd) / EsatL; dfgche2_dVb = (dVdseff_dVb - T9 * dEsatL_dVb) / EsatL; dfgche2_dVe = (dVdseff_dVe - T9 * dEsatL_dVe) / EsatL; /* LFW_FD new line */ if (selfheat) dfgche2_dT = (dVdseff_dT - T9 * dEsatL_dT) / EsatL; else dfgche2_dT = 0.0; gche = beta * fgche1 / fgche2; dgche_dVg = (beta * dfgche1_dVg + fgche1 * dbeta_dVg - gche * dfgche2_dVg) / fgche2; dgche_dVd = (beta * dfgche1_dVd + fgche1 * dbeta_dVd - gche * dfgche2_dVd) / fgche2; dgche_dVb = (beta * dfgche1_dVb + fgche1 * dbeta_dVb - gche * dfgche2_dVb) / fgche2; /* LFW_FD add 1 derivative */ dgche_dVe = (beta * dfgche1_dVe + fgche1 * dbeta_dVe - gche * dfgche2_dVe) / fgche2; if (selfheat) dgche_dT = (beta * dfgche1_dT + fgche1 * dbeta_dT - gche * dfgche2_dT) / fgche2; else dgche_dT = 0.0; T0 = 1.0 + gche * Rds; T9 = Vdseff / T0; Idl = gche * T9; IdlovVdseff = gche / T0; /* Whoa, these formulas for the derivatives of Idl are convoluted, but I verified them to be correct */ dIdl_dVg = (gche * dVdseff_dVg + T9 * dgche_dVg) / T0 - Idl * gche / T0 * dRds_dVg ; /* LFW_FD fix/add 3 derivatives */ dIdl_dVd = (gche * dVdseff_dVd + T9 * dgche_dVd - Idl * dRds_dVd * gche) / T0; dIdl_dVb = (gche * dVdseff_dVb + T9 * dgche_dVb - Idl * dRds_dVb * gche) / T0; dIdl_dVe = (gche * dVdseff_dVe + T9 * dgche_dVe - Idl * dRds_dVe * gche) / T0; if (selfheat) dIdl_dT = (gche * dVdseff_dT + T9 * dgche_dT - Idl * dRds_dT * gche) / T0; else dIdl_dT = 0.0; T9 = diffVds / Va; T0 = 1.0 + T9; here->B4SOIids = Ids = Idl * T0 / here->B4SOInseg; /* LFW_FD add 4 derivatives */ dIds_dVg = (dIdl_dVg * T0 - Idl * (dVdseff_dVg + T9 * dVa_dVg) / Va)/ here->B4SOInseg; dIds_dVb = (dIdl_dVb * T0 - Idl * (dVdseff_dVb + T9 * dVa_dVb) / Va)/ here->B4SOInseg; dIds_dVd = (dIdl_dVd * T0 + Idl * (1.0 - dVdseff_dVd - T9 * dVa_dVd) / Va)/ here->B4SOInseg; dIds_dVe = (dIdl_dVe * T0 - Idl * (dVdseff_dVe + T9 * dVa_dVe) / Va)/ here->B4SOInseg; /* 5 new lines Wagner */ if (selfheat) dIds_dT = dIdl_dT * T0 / here->B4SOInseg + Idl * (-dVdseff_dT/Va -diffVds/Va/Va*dVa_dT) / here->B4SOInseg; else dIds_dT = 0.0; here->B4SOIidovVds = IdlovVdseff * T0 / here->B4SOInseg; /* v4.0 bug fix */ /* IdovVds = IdlovVdseff * T0 / here->B4SOInseg; LFW_FD not needed */ Gm0 = T0 * dIdl_dVg - Idl * (dVdseff_dVg + T9 * dVa_dVg) / Va; Gds0 = T0 * dIdl_dVd + Idl * (1.0 - dVdseff_dVd - T9 * dVa_dVd) / Va; Gmb0 = T0 * dIdl_dVb - Idl * (dVdseff_dVb + T9 * dVa_dVb) / Va; Gme0 = dIdl_dVe * T0 - Idl * (dVdseff_dVe + T9 * dVa_dVe) / Va; /* LFW_FD new line */ /*Gmc = 0.0; LFW_FD not used */ if (selfheat) GmT0 = T0 * dIdl_dT - Idl * (dVdseff_dT + T9 * dVa_dT) / Va; else GmT0 = 0.0; /* This includes all dependencies from Vgsteff, Vbseff */ /*Gm = (Gm0 * dVgsteff_dVg+ Gmb0 * dVbseff_dVg) / here->B4SOInseg; v3.0 */ /*Gmb = (Gm0 * dVgsteff_dVb + Gmb0 * dVbseff_dVb) / here->B4SOInseg; */ /*Gds = (Gm0 * dVgsteff_dVd+ Gmb0 * dVbseff_dVd + Gds0) / here->B4SOInseg; v3.0 */ /*Gme = (Gm0 * dVgsteff_dVe + Gmb0 * dVbseff_dVe) / here->B4SOInseg; v3.0 */ /* LFW_FD fix 4 derivatives */ Gm = dIds_dVg; Gmb = dIds_dVb; Gds = dIds_dVd; Gme = dIds_dVe; if (selfheat) /* fix below expression Wagner */ /* GmT = (Gm0 * dVgsteff_dT + Gmb0 * dVbseff_dT + GmT0) / here->B4SOInseg; v3.0 */ GmT = dIds_dT; else GmT = 0.0; /* LFW_FD flexilint inits */ Ibsdif = dIbsdif_dVb = dIbsdif_dT = 0; Ibddif = dIbddif_dVb = dIbddif_dT = 0; Ibs1 = dIbs1_dVb = dIbs1_dT = Ibd1 = dIbd1_dVb = dIbd1_dVd = dIbd1_dT = 0; Ibs2 = dIbs2_dVb = dIbs2_dT = Ibd2 = dIbd2_dVb = dIbd2_dVd = dIbd2_dT = 0; Ibs3 = dIbs3_dVb = dIbs3_dT = Ibd3 = dIbd3_dVb = dIbd3_dVd = dIbd3_dT = 0; Ibs4 = dIbs4_dVb = dIbs4_dT = Ibd4 = dIbd4_dVb = dIbd4_dVd = dIbd4_dT = 0; Igisl = Ggisls = Ggislg = Ggislb = 0.0; dIc_dVd = dIc_dVb = 0.0; /* v3.1 */ if (here->B4SOIsoiMod != 2) /* v3.2 */ { /* calculate GISL/GIDL current */ /*4.1*/ if(model->B4SOImtrlMod == 0) T0 = 3.0 * 3.9 / epsrox * toxe; else T0 = model->B4SOIepsrsub * toxe / epsrox; if (model->B4SOIgidlMod==0) { /*fix next if-then-else block Wagner */ if (model->B4SOImtrlMod==0) { /* T1 = (- Vds - Vgs_eff - egisl) / T0; *//* Bug # 25 Jul09*/ T1 = (- Vds - Vgd_eff - egisl) / T0; dTL1_dT = -dVgd_eff_dT / T0; } else { /* T1 = (- Vds - Vgs_eff - egisl+pParam->B4SOIvfbsd) / T0; */ T1 = (- Vds - Vgd_eff - egisl + pParam->B4SOIvfbsd) / T0; dTL1_dT = -dVgd_eff_dT / T0; } /* GISL */ if ((agisl <= 0.0) || (bgisl <= 0.0) || (T1 <= 0.0) || /*(cgisl < 0.0) || (Vbd > 0.0) ) */ /* v4.2 Bug # 24 Jul09*/ (cgisl < 0.0) || (Vbs > 0.0) ) Igisl = Ggisls = Ggislg = Ggislb = Ggislt = 0.0; /* enhanced line Wagner */ else { dT1_dVd = 1 / T0; /* dT1_dVg = - dT1_dVd * dVgs_eff_dVg; *//* Bug fix # 25 Jul09 */ dT1_dVg = - dT1_dVd * dVgd_eff_dVg; T2 = bgisl / T1; if (T2 < EXPL_THRESHOLD) { Igisl = wdios * agisl * T1 * exp(-T2); T3 = Igisl / T1 * (T2 + 1); Ggisls = T3 * dT1_dVd; /* Ggisls = T3 * dT1_dVg; */ /* Bug # 28 Jul09*/ Ggislg = T3 * dT1_dVg; /* 3 new lines Wagner */ if (selfheat) Ggislt = T3 * dTL1_dT; else Ggislt = 0.0; } else { T3 = wdios * agisl * MIN_EXPL; Igisl = T3 * T1 ; Ggisls = T3 * dT1_dVd; Ggislg = T3 * dT1_dVg; /* 3 new lines Wagner */ if (selfheat) Ggislt = T3 * dTL1_dT; else Ggislt = 0.0; } if(cgisl >= MIN_EXPL) { T4 = Vbs * Vbs; T5 = -Vbs * T4; T6 = cgisl + T5; T7 = T5 / T6; T8 = 3.0 * cgisl * T4 / T6 / T6; Ggisls = Ggisls * T7 + Igisl * T8; Ggislg = Ggislg * T7; Ggislb = -Igisl * T8; /* 3 new lines Wagner */ if (selfheat) Ggislt = Ggislt * T7; else Ggislt = 0.0; Igisl *= T7; } else Ggislb = 0.0; } here->B4SOIigisl = Igisl; /* End of GISL */ /* enhance next if-then-else block Wagner */ if (model->B4SOImtrlMod==0) { T1 = (Vds - Vgs_eff - egidl) / T0; dTL1_dT = -dVgs_eff_dT / T0; } else { T1 = (Vds - Vgs_eff - egidl+pParam->B4SOIvfbsd) / T0; dTL1_dT = -dVgs_eff_dT / T0; } /* GIDL */ if ((agidl <= 0.0) || (bgidl <= 0.0) || (T1 <= 0.0) || (cgidl < 0.0) || (Vbd > 0.0) ) Igidl = Ggidld = Ggidlg = Ggidlb = Ggidlt = 0.0; /* enhanced line Wagner */ else { dT1_dVd = 1 / T0; dT1_dVg = - dT1_dVd * dVgs_eff_dVg; T2 = bgidl / T1; if (T2 < EXPL_THRESHOLD) { Igidl = wdiod * agidl * T1 * exp(-T2); T3 = Igidl / T1 * (T2 + 1); Ggidld = T3 * dT1_dVd; Ggidlg = T3 * dT1_dVg; /* 3 new lines Wagner */ if (selfheat) Ggidlt = T3 * dTL1_dT; else Ggidlt = 0.0; } else { T3 = wdiod * agidl * MIN_EXPL; Igidl = T3 * T1 ; Ggidld = T3 * dT1_dVd; Ggidlg = T3 * dT1_dVg; /* 3 new lines Wagner */ if (selfheat) Ggidlt = T3 * dTL1_dT; else Ggidlt = 0.0; } if(cgidl >= MIN_EXPL) { T4 = Vbd * Vbd; T5 = -Vbd * T4; T6 = cgidl + T5; T7 = T5 / T6; T8 = 3.0 * cgidl * T4 / T6 / T6; Ggidld = Ggidld * T7 + Igidl * T8; Ggidlg = Ggidlg * T7; Ggidlb = -Igidl * T8; /* 3 new lines Wagner */ if (selfheat) Ggidlt = Ggidlt * T7; else Ggidlt = 0.0; Igidl *= T7; } else Ggidlb = 0.0; } here->B4SOIigidl = Igidl; /* End of GIDL*/ } else { /* enhance next if-then-else block Wagner */ if (model->B4SOImtrlMod==0) { /* T1 = (-Vds - rgisl*Vgs_eff - pParam->B4SOIegisl) / T0;*/ T1 = (-Vds - rgisl*Vgd_eff - egisl) / T0; /* Bug # 26 Jul09*/ dTL1_dT = -rgisl * dVgd_eff_dT / T0; } else { /* T1 = (-Vds - rgisl*Vgs_eff - pParam->B4SOIegisl+pParam->B4SOIvfbsd) / T0; */ T1 = (-Vds - rgisl*Vgd_eff - egisl + pParam->B4SOIvfbsd) / T0; /* Bug # 26 Jul09*/ dTL1_dT = -rgisl * dVgd_eff_dT / T0; } /* GISL */ if ((agisl <= 0.0) || (bgisl <= 0.0) || (T1 <= 0.0) || (cgisl < 0.0) ) Igisl = Ggisls = Ggislg = Ggislb = Ggislt = 0.0; /* enhanced line Wagner */ else { dT1_dVd = 1 / T0; /* dT1_dVg = - rgisl*dT1_dVd * dVgs_eff_dVg;*//*Bug fix #26*/ dT1_dVg = - rgisl*dT1_dVd * dVgd_eff_dVg; T2 = bgisl / T1; if (T2 < EXPL_THRESHOLD) { Igisl = wdios * agisl * T1 * exp(-T2); T3 = Igisl / T1 * (T2 + 1); Ggisls = T3 * dT1_dVd; Ggislg = T3 * dT1_dVg; /* 3 new lines Wagner */ if (selfheat) Ggislt = T3 * dTL1_dT; else Ggislt = 0.0; } else { T3 = wdios * agisl * MIN_EXPL; Igisl = T3 * T1 ; Ggisls = T3 * dT1_dVd; Ggislg = T3 * dT1_dVg; /* 3 new lines Wagner */ if (selfheat) Ggislt = T3 * dTL1_dT; else Ggislt = 0.0; } T4 = Vbs - fgisl; /*if (T4==0) T5 =1; else T5 = kgisl/T4; T6 = exp(T5); if (T6B4SOIigisl = Igisl; /* End of GISL */ /* enhance next if-then-else block Wagner */ if (model->B4SOImtrlMod==0) { /*T1 = (Vds - rgidl*Vgs_eff - pParam->B4SOIegidl) / T0; *//* v4.2 bugfix #26 */ T1 = (Vds - rgidl*Vgs_eff - egidl) / T0; dTL1_dT = -rgidl * dVgs_eff_dT / T0; } else { /*T1 = (Vds - rgidl*Vgs_eff - pParam->B4SOIegidl+pParam->B4SOIvfbsd) / T0;*/ /* v4.2 bugfix #26 */ T1 = (Vds - rgidl * Vgs_eff - egidl + pParam->B4SOIvfbsd) / T0; dTL1_dT = -rgidl * dVgs_eff_dT / T0; } /* GIDL */ if ((agidl <= 0.0) || (bgidl <= 0.0) || (T1 <= 0.0) || (cgidl < 0.0) ) Igidl = Ggidld = Ggidlg = Ggidlb = Ggidlt = 0.0; /* enhanced line Wagner */ else { dT1_dVd = 1 / T0; dT1_dVg = - rgidl*dT1_dVd * dVgs_eff_dVg; T2 = bgidl / T1; if (T2 < EXPL_THRESHOLD) { Igidl = wdiod * agidl * T1 * exp(-T2); T3 = Igidl / T1 * (T2 + 1); Ggidld = T3 * dT1_dVd; Ggidlg = T3 * dT1_dVg; /* 3 new lines Wagner */ if (selfheat) Ggidlt = T3 * dTL1_dT; else Ggidlt = 0.0; } else { T3 = wdiod * agidl * MIN_EXPL; Igidl = T3 * T1 ; Ggidld = T3 * dT1_dVd; Ggidlg = T3 * dT1_dVg; /* 3 new lines Wagner */ if (selfheat) Ggidlt = T3 * dTL1_dT; else Ggidlt = 0.0; } T4 = Vbd - fgidl; /*if (T4==0) T5 =1; else T5 = kgidl/T4; T6 = exp(T5); if (T6B4SOIigidl = Igidl; /* End of GIDL */ } /* calculate diode and BJT current */ WsTsi = wdios * model->B4SOItsi; WdTsi = wdiod * model->B4SOItsi; /* NVtm1 = Vtm * pParam->B4SOIndiode; v4.2 bugfix */ NVtm1 = Vtm * ndiode; if (selfheat) /*dNVtm1_dT = pParam->B4SOIndiode * dVtm_dT; v4.2 bugfix */ dNVtm1_dT = ndiode * dVtm_dT; else dNVtm1_dT = 0; T0 = vbs_jct / NVtm1; /* v4.0 */ dT0_dVb = 1.0 / NVtm1; if (selfheat) dT0_dT = -vbs_jct / NVtm1 / NVtm1 * dNVtm1_dT; else dT0_dT = 0; DEXP(T0, ExpVbsNVtm, T1); dExpVbsNVtm_dVb = T1 * dT0_dVb; if (selfheat) dExpVbsNVtm_dT = T1 * dT0_dT; else dExpVbsNVtm_dT = 0; /* NVtm1 = Vtm * pParam->B4SOIndioded; v4.2 bugfix */ NVtm1 = Vtm * ndioded; /* v4.0 drain side */ if (selfheat) /*dNVtm1_dT = pParam->B4SOIndioded* dVtm_dT; v4.2 bugfix */ dNVtm1_dT = ndioded * dVtm_dT; else dNVtm1_dT = 0; T0 = vbd_jct / NVtm1; /* v4.0 */ dT0_dVb = 1.0 / NVtm1; dT0_dVd = -dT0_dVb; if (selfheat) dT0_dT = -vbd_jct / NVtm1 / NVtm1 * dNVtm1_dT; else dT0_dT = 0; DEXP(T0, ExpVbdNVtm, T1); dExpVbdNVtm_dVb = T1 * dT0_dVb; dExpVbdNVtm_dVd = -dExpVbdNVtm_dVb; if (selfheat) dExpVbdNVtm_dT = T1 * dT0_dT; else dExpVbdNVtm_dT = 0; /* Ibs1: diffusion current */ if (jdifs == 0) { Ibs1 = dIbs1_dVb = dIbs1_dT = 0; } else { T0 = WsTsi * jdifs; if (selfheat) dT0_dT = WsTsi * djdifs_dT; else dT0_dT = 0; Ibs1 = T0 * (ExpVbsNVtm - 1); dIbs1_dVb = T0 * dExpVbsNVtm_dVb; if (selfheat) dIbs1_dT = T0 * dExpVbsNVtm_dT + (ExpVbsNVtm - 1) * dT0_dT; else dIbs1_dT = 0; } /* Ibd1: diffusion current */ if (jdifd == 0) { Ibd1 = dIbd1_dVb = dIbd1_dVd = dIbd1_dT = 0; } else { T0 = WdTsi * jdifd; if (selfheat) dT0_dT = WdTsi * djdifd_dT; else dT0_dT = 0; Ibd1 = T0 * (ExpVbdNVtm - 1); dIbd1_dVb = T0 * dExpVbdNVtm_dVb; dIbd1_dVd = -dIbd1_dVb; if (selfheat) dIbd1_dT = T0 * dExpVbdNVtm_dT + (ExpVbdNVtm -1) * dT0_dT; else dIbd1_dT = 0; } /* Ibs2:recombination/trap-assisted tunneling current */ if (jrecs == 0) { Ibs2 = dIbs2_dVb = dIbs2_dT = 0; } else { /* forward bias */ /* NVtmf = 0.026 * nrecf0s bugfix_snps for DC swapping * (1 + pParam->B4SOIntrecf * (TempRatio - 1)); NVtmr = 0.026 * nrecr0s bugfix_snps for DC swapping * (1 + pParam->B4SOIntrecr * (TempRatio - 1)); */ NVtmf = Vtm00 * nrecf0s /* bugfix_snps for DC swapping*/ * (1 + pParam->B4SOIntrecf * (TempRatio - 1)); /* v4.3.1 -Tanvir */ NVtmr = Vtm00 * nrecr0s /* bugfix_snps for DC swapping*/ * (1 + pParam->B4SOIntrecr * (TempRatio - 1)); /* v4.3.1 -Tanvir */ if (selfheat) { /* dNVtmf_dT = nrecf0s * 0.026 bugfix_snps for DC swapping * pParam->B4SOIntrecf * dTempRatio_dT; dNVtmr_dT = nrecr0s * 0.026 bugfix_snps for DC swapping * pParam->B4SOIntrecr * dTempRatio_dT; */ dNVtmf_dT = nrecf0s * Vtm00 /* bugfix_snps for DC swapping*/ * pParam->B4SOIntrecf * dTempRatio_dT; /* v4.3.1 -Tanvir */ dNVtmr_dT = nrecr0s * Vtm00 /* bugfix_snps for DC swapping*/ * pParam->B4SOIntrecr * dTempRatio_dT; /* v4.3.1 -Tanvir */ } else dNVtmf_dT = dNVtmr_dT = 0; T0 = vbs_jct / NVtmf; /* v4.0 */ DEXP(T0,T10,T2); T4 = 1 / NVtmf; dT10_dVb = T4 * T2; if (selfheat) dT10_dT = - T4 * T2 * vbs_jct / NVtmf * dNVtmf_dT ; else dT10_dT = 0.0; /* reverse bias */ if ((vrec0s- vbs_jct) < 1e-3) { /* bugfix_snps for DC swapping*/ /* v2.2.3 bug fix */ T1 = 1e3; T0 = -vbs_jct / NVtmr * vrec0s * T1; /* bugfix_snps for DC swapping*/ T11 = -exp(T0); dT11_dVb = dT11_dT = 0; } else { T1 = 1 / (vrec0s - vbs_jct); /* bugfix_snps for DC swapping*/ T0 = -vbs_jct / NVtmr * vrec0s * T1; /* bugfix_snps for DC swapping*/ dT0_dVb = -vrec0s / NVtmr * /* bugfix_snps for DC swapping*/ (T1 + vbs_jct * T1 * T1) ; if (selfheat) dT0_dT = -T0 / NVtmr * dNVtmr_dT; else dT0_dT = 0; DEXP(T0, T11, T2); T11 = -T11; dT11_dVb = -T2 * dT0_dVb; if (selfheat) dT11_dT = -T2 * dT0_dT; else dT11_dT = 0; } T3 = WsTsi * jrecs; Ibs2 = T3 * (T10 + T11); dIbs2_dVb = T3 * (dT10_dVb + dT11_dVb); if (selfheat) dIbs2_dT = T3 * (dT10_dT + dT11_dT) + WsTsi * (T10 + T11) * djrecs_dT; else dIbs2_dT = 0; } if (jrecd == 0) { Ibd2 = dIbd2_dVb = dIbd2_dVd = dIbd2_dT = 0; } else { /*NVtmf = 0.026 * nrecf0d bugfix_snps for DC swapping * (1 + pParam->B4SOIntrecf * (TempRatio - 1)); NVtmr = 0.026 * nrecr0d bugfix_snps for DC swapping * (1 + pParam->B4SOIntrecr * (TempRatio - 1)); */ NVtmf = Vtm00 * nrecf0d /* bugfix_snps for DC swapping*/ * (1 + pParam->B4SOIntrecf * (TempRatio - 1)); /* v4.3.1 -Tanvir */ NVtmr = Vtm00 * nrecr0d /* bugfix_snps for DC swapping*/ * (1 + pParam->B4SOIntrecr * (TempRatio - 1)); /* v4.3.1 -Tanvir */ if (selfheat) { /* dNVtmf_dT = nrecf0d * 0.026 bugfix_snps for DC swapping * pParam->B4SOIntrecf * dTempRatio_dT; dNVtmr_dT = nrecr0d * 0.026 * pParam->B4SOIntrecr * dTempRatio_dT; bugfix_snps for DC swapping */ dNVtmf_dT = nrecf0d * Vtm00 /*bugfix_snps for DC swapping*/ * pParam->B4SOIntrecf * dTempRatio_dT; /* v4.3.1 -Tanvir */ dNVtmr_dT = nrecr0d * Vtm00 /* v4.3.1 -Tanvir */ * pParam->B4SOIntrecr * dTempRatio_dT; /* bugfix_snps for DC swapping*/ } else dNVtmf_dT = dNVtmr_dT = 0; T0 = vbd_jct / NVtmf; DEXP(T0,T10,T2); T4 = 1 / NVtmf; dT10_dVb = T4 * T2; if (selfheat) dT10_dT = - T4 * T2 * vbd_jct / NVtmf * dNVtmf_dT ; else dT10_dT = 0.0; if ((vrec0d - vbd_jct) < 1e-3) { /* bugfix_snps for DC swapping*/ /* v2.2.3 bug fix */ T1 = 1e3; T0 = -vbd_jct / NVtmr * vrec0d * T1; /* bugfix_snps for DC swapping*/ T11 = -exp(T0); dT11_dVb = dT11_dT = 0; } else { T1 = 1 / (vrec0d - vbd_jct); /* bugfix_snps for DC swapping*/ T0 = -vbd_jct / NVtmr * vrec0d * T1; /* bugfix_snps for DC swapping*/ dT0_dVb = -vrec0d / NVtmr /* bugfix_snps for DC swapping*/ * (T1 + vbd_jct * T1 * T1) ; if (selfheat) dT0_dT = -T0 / NVtmr * dNVtmr_dT; else dT0_dT = 0; DEXP(T0, T11, T2); T11 = - T11; dT11_dVb = -T2 * dT0_dVb; if (selfheat) dT11_dT = -T2 * dT0_dT; else dT11_dT = 0; } T3 = WdTsi * jrecd; Ibd2 = T3 * (T10 + T11); dIbd2_dVb = T3 * (dT10_dVb + dT11_dVb); dIbd2_dVd = -dIbd2_dVb; if (selfheat) dIbd2_dT = T3 * (dT10_dT + dT11_dT) + WdTsi * (T10 + T11) * djrecd_dT; else dIbd2_dT = 0; } /* Ibs3/Ibd3: recombination current in neutral body */ WTsi = pParam->B4SOIweff / here->B4SOInseg * model->B4SOItsi; if (jbjts == 0.0 && jbjtd == 0.0) { Ibs3 = dIbs3_dVb = dIbs3_dVd = dIbs3_dT = 0.0; Ibd3 = dIbd3_dVb = dIbd3_dVd = dIbd3_dT = 0.0; Ibsdif = dIbsdif_dVb = dIbsdif_dT = 0; /*Ibddif = dIbddif_dVb = dIbddif_dT = 0; v4.2 */ Ibddif = dIbddif_dVb = dIbddif_dT = 0; here->B4SOIic = Ic = Gcd = Gcb = GcT = 0.0; } else { Ien = WTsi * jbjts * pParam->B4SOIlratio; if (selfheat) dIen_dT = WTsi * djbjts_dT * pParam->B4SOIlratio; else dIen_dT = 0; /* high level injection of source side */ if ((Ehlis = Ahlis * (ExpVbsNVtm - 1)) < 1e-5) { Ehlis = dEhlis_dVb = dEhlis_dT = 0; EhlisFactor = 1; dEhlisFactor_dVb = dEhlisFactor_dT = 0; } else { dEhlis_dVb = Ahlis * dExpVbsNVtm_dVb; if (selfheat) dEhlis_dT = Ahlis * dExpVbsNVtm_dT + (ExpVbsNVtm - 1) * dAhlis_dT; else dEhlis_dT = 0; EhlisFactor = 1.0 / sqrt(1 + Ehlis); T0 = -0.5 * EhlisFactor / (1 + Ehlis); dEhlisFactor_dVb = T0 * dEhlis_dVb; if (selfheat) dEhlisFactor_dT = T0 * dEhlis_dT; else dEhlisFactor_dT = 0; } /* high level injection of drain side */ if ((Ehlid = Ahlid * (ExpVbdNVtm - 1)) < 1e-5) { Ehlid = dEhlid_dVb = dEhlid_dVd = dEhlid_dT = 0; EhlidFactor = 1; dEhlidFactor_dVb = dEhlidFactor_dT = 0; /* LFW_FD flexilint */ } else { dEhlid_dVb = Ahlid * dExpVbdNVtm_dVb; dEhlid_dVd = -dEhlid_dVb; if (selfheat) dEhlid_dT = Ahlid * dExpVbdNVtm_dT + (ExpVbdNVtm - 1) * dAhlid_dT; else dEhlid_dT = 0; EhlidFactor = 1.0 / sqrt(1 + Ehlid); T0 = -0.5 * EhlidFactor / (1 + Ehlid); dEhlidFactor_dVb = T0 * dEhlid_dVb; if (selfheat) dEhlidFactor_dT = T0 * dEhlid_dT; else dEhlidFactor_dT = 0; } /* v3.1.1 bug fix for Ibjt(L) discontinuity */ T0 = 1 - pParam->B4SOIarfabjt; T1 = T0 * Ien; if (selfheat) dT1_dT = T0 * dIen_dT; else dT1_dT = 0; Ibs3 = T1 * (ExpVbsNVtm - 1) * EhlisFactor; dIbs3_dVb = T1 * (dExpVbsNVtm_dVb * EhlisFactor + (ExpVbsNVtm - 1) * dEhlisFactor_dVb); dIbs3_dVd = 0; if (selfheat) dIbs3_dT = dT1_dT * (ExpVbsNVtm - 1) * EhlisFactor + T1 * (dExpVbsNVtm_dT * EhlisFactor + (ExpVbsNVtm - 1) * dEhlisFactor_dT); else dIbs3_dT = 0.0; Ien = WTsi * jbjtd * pParam->B4SOIlratio; if (selfheat) dIen_dT = WTsi * djbjtd_dT * pParam->B4SOIlratio; else dIen_dT = 0; T1 = T0 * Ien; if (selfheat) dT1_dT = T0 * dIen_dT; else dT1_dT = 0; Ibd3 = T1 * (ExpVbdNVtm - 1) * EhlidFactor; dIbd3_dVb = T1 * (dExpVbdNVtm_dVb * EhlidFactor + (ExpVbdNVtm - 1) * dEhlidFactor_dVb); dIbd3_dVd = -dIbd3_dVb; if (selfheat) dIbd3_dT = dT1_dT * (ExpVbdNVtm - 1) * EhlidFactor + T1 * (dExpVbdNVtm_dT * EhlidFactor + (ExpVbdNVtm - 1) * dEhlidFactor_dT); else dIbd3_dT = 0.0; /* effective diffusion current for capacitance calcu. */ Iendif = WTsi * jbjts * pParam->B4SOIlratiodif; if (selfheat) dIendif_dT = WTsi * djbjts_dT * pParam->B4SOIlratiodif; else dIendif_dT = 0; Ibsdif = Iendif * (ExpVbsNVtm - 1) * EhlisFactor; dIbsdif_dVb = Iendif * (dExpVbsNVtm_dVb * EhlisFactor + (ExpVbsNVtm - 1) * dEhlisFactor_dVb); if (selfheat) dIbsdif_dT = dIendif_dT * (ExpVbsNVtm - 1) * EhlisFactor + Iendif * (dExpVbsNVtm_dT * EhlisFactor + (ExpVbsNVtm - 1) * dEhlisFactor_dT); else dIbsdif_dT = 0; Iendif = WTsi * jbjtd * pParam->B4SOIlratiodif; if (selfheat) dIendif_dT = WTsi * djbjtd_dT * pParam->B4SOIlratiodif; else dIendif_dT = 0; Ibddif = Iendif * (ExpVbdNVtm - 1) * EhlidFactor; dIbddif_dVb = Iendif * (dExpVbdNVtm_dVb * EhlidFactor + (ExpVbdNVtm - 1) * dEhlidFactor_dVb); /*dIbddif_dVd = -dIbddif_dVb; v4.2 */ if (selfheat) dIbddif_dT = dIendif_dT * (ExpVbdNVtm - 1) * EhlidFactor + Iendif * (dExpVbdNVtm_dT * EhlidFactor + (ExpVbdNVtm - 1) * dEhlidFactor_dT); else dIbddif_dT = 0; /* Ic: Bjt collector current */ if ((here->B4SOIbjtoff == 1) || (Vds == 0.0)) { here->B4SOIic = Ic = Gcd = Gcb = GcT = 0.0; dIc_dVb = dIc_dVd = 0.0; /*bugfix_snps for setting zero */ } else { /* second order effects */ /* T0 = 1 + (Vbs + Vbd) / pParam->B4SOIvearly; v4.3 bugfix */ T0 = 1 + (vbs_jct + vbd_jct) / pParam->B4SOIvearly; dT0_dVb = 2.0 / pParam->B4SOIvearly; dT0_dVd = -1.0 / pParam->B4SOIvearly; T1 = Ehlis + Ehlid; dT1_dVb = dEhlis_dVb + dEhlid_dVb; dT1_dVd = dEhlid_dVd; if (selfheat) dT1_dT = dEhlis_dT + dEhlid_dT; else dT1_dT = 0; T3 = sqrt(T0 * T0 + 4 * T1); dT3_dVb = 0.5 / T3 * (2 * T0 * dT0_dVb + 4 * dT1_dVb); dT3_dVd = 0.5 / T3 * (2 * T0 * dT0_dVd + 4 * dT1_dVd); if (selfheat) dT3_dT = 2 * dT1_dT / T3; else dT3_dT = 0; T2 = (T0 + T3) / 2.0; dT2_dVb = (dT0_dVb + dT3_dVb) / 2.0; dT2_dVd = (dT0_dVd + dT3_dVd) / 2.0; if (selfheat) dT2_dT = dT3_dT /2.0; else dT2_dT = 0; if (T2 < .1) { E2ndFactor = 10.0; dE2ndFactor_dVb = dE2ndFactor_dVd = dE2ndFactor_dT = 0; } else { E2ndFactor = 1.0 / T2; dE2ndFactor_dVb = -E2ndFactor / T2 * dT2_dVb; dE2ndFactor_dVd = -E2ndFactor / T2 * dT2_dVd; if (selfheat) dE2ndFactor_dT = -E2ndFactor / T2 * dT2_dT; else dE2ndFactor_dT = 0; } T0 = pParam->B4SOIarfabjt * Ien; /* here Ien refers to the drain side to simplify the code */ if (selfheat) dT0_dT = pParam->B4SOIarfabjt * dIen_dT; else dT0_dT = 0; here->B4SOIic = Ic = T0 * (ExpVbsNVtm - ExpVbdNVtm) * E2ndFactor; Gcb = dIc_dVb = T0 * ((dExpVbsNVtm_dVb - dExpVbdNVtm_dVb) * E2ndFactor + (ExpVbsNVtm - ExpVbdNVtm) * dE2ndFactor_dVb); Gcd = dIc_dVd = T0 * (-dExpVbdNVtm_dVd * E2ndFactor + (ExpVbsNVtm - ExpVbdNVtm) * dE2ndFactor_dVd); if (selfheat) GcT = T0 * (dExpVbsNVtm_dT - dExpVbdNVtm_dT) * E2ndFactor + dT0_dT * (ExpVbsNVtm - ExpVbdNVtm) * E2ndFactor + T0 * (ExpVbsNVtm - ExpVbdNVtm) * dE2ndFactor_dT; else GcT = 0; } } /* Ibs4/Ibd4 : tunneling */ if (jtuns == 0 && jtund == 0) { Ibs4 = Ibd4 = dIbs4_dVb = dIbs4_dT = dIbd4_dVb = dIbd4_dVd = dIbd4_dT = 0; } else { /* NVtm2 = 0.026 * ntuns; */ /* bugfix_snps for junction DC swapping*/ NVtm2 = Vtm00 * ntuns; /* bugfix_snps for junction DC swapping*/ /* v4.3.1 -Tanvir */ if ((vtun0s - vbs_jct) < 1e-3) /* bugfix_snps for junction DC swapping*/ { /* v2.2.3 bug fix */ T1=1e3; T0 = -vbs_jct / NVtm2 * vtun0s * T1; /* bugfix_snps for junction DC swapping*/ T1 = exp(T0); T3 = WsTsi * jtuns; Ibs4 = T3 * (1- T1); /*dIbs4_dVb = dIbs4_dT = 0; */ dIbs4_dVb = 0.0; if (selfheat) dIbs4_dT = (1 - T1) * WsTsi * djtuns_dT; else dIbs4_dT = 0; } else { T1 = 1 / (vtun0s - vbs_jct); /*bugfix for junction DC swapping*/ T0 = -vbs_jct / NVtm2 * vtun0s * T1; /*bugfix for junction DC swapping*/ dT0_dVb = -vtun0s / NVtm2 * (T1 + vbs_jct * T1 * T1) ; /*bugfix for junction DC swapping*/ DEXP(T0, T1, T2); T3 = WsTsi * jtuns; Ibs4 = T3 * (1- T1); dIbs4_dVb = -T3 * T2 * dT0_dVb; if (selfheat) dIbs4_dT = (1 - T1) * WsTsi * djtuns_dT; else dIbs4_dT = 0; } /*NVtm2 = 0.026 * ntund;*/ /* bugfix_snps for junction DC swapping*/ NVtm2 = Vtm00 * ntund; /* v4.3.1 -Tanvir */ if ((vtun0d - vbd_jct) < 1e-3) { /* bugfix_snps for junction DC swapping*/ /* v2.2.3 bug fix */ T1=1e3; T0 = -vbd_jct / NVtm2 * vtun0d * T1; /* bugfix_snps for junction DC swapping*/ T1 = exp(T0); T3 = WdTsi * jtund; Ibd4 = T3 * (1- T1); /*dIbd4_dVb = dIbd4_dT = 0;*/ dIbd4_dVb = 0; dIbd4_dVd = 0; if (selfheat) /* dIbs4_dT = (1 - T1) * WsTsi * djtuns_dT; Bug fix #8 Jun 09 'typo's corrected for Drain side */ /* else dIbs4_dT = 0; */ dIbd4_dT = (1 - T1) * WdTsi * djtund_dT; /* Fix */ else dIbd4_dT = 0; } else { T1 = 1 / (vtun0d - vbd_jct); /* bugfix_snps for junction DC swapping*/ T0 = -vbd_jct / NVtm2 * vtun0d * T1; /* bugfix_snps for junction DC swapping*/ dT0_dVb = -vtun0d / NVtm2 * (T1 + vbd_jct * T1 * T1) ; /* bugfix_snps for junction DC swapping*/ DEXP(T0, T1, T2); T3 = WdTsi * jtund; Ibd4 = T3 * (1- T1); dIbd4_dVb = -T3 * T2 * dT0_dVb; dIbd4_dVd = -dIbd4_dVb; if (selfheat) dIbd4_dT = (1 - T1) * WdTsi * djtund_dT; else dIbd4_dT = 0; } } here->B4SOIitun = - Ibd3 - Ibd4; Ibs = Ibs1 + Ibs2 + Ibs3 + Ibs4; Ibd = Ibd1 + Ibd2 + Ibd3 + Ibd4; Gjsb = dIbs1_dVb + dIbs2_dVb + dIbs3_dVb + dIbs4_dVb; Gjsd = dIbs3_dVd; if (selfheat) GjsT = dIbs1_dT + dIbs2_dT + dIbs3_dT + dIbs4_dT; else GjsT = 0.0; Gjdb = dIbd1_dVb + dIbd2_dVb + dIbd3_dVb + dIbd4_dVb; Gjdd = dIbd1_dVd + dIbd2_dVd + dIbd3_dVd + dIbd4_dVd; if (selfheat) GjdT = dIbd1_dT + dIbd2_dT + dIbd3_dT + dIbd4_dT; else GjdT = 0.0; } else /* v3.1 soiMod=2: ideal FD */ { here->B4SOIigidl= Igidl = Ggidld = Ggidlg = Ggidlb = Ggidlt = 0.0; /* LFW_FD inits */ here->B4SOIigisl= Igisl /* Bug fix #9 Jun 09 Code added to set Igisl components to zero */ = Ggisls = Ggislg = Ggislb = Ggislt = 0.0; /* This is an appx solution */ here->B4SOIitun = 0; Ibs = 0; Ibd = 0; Gjsb = 0.0; Gjdb = 0.0; Gjsd = 0.0; Gjdd = 0.0; /* here->B4SOIigidl= Igidl */ /* = Ggidld = Ggidlg = Ggidlb = Ggidlt = 0.0; LFW_FD enhance line */ /* here->B4SOIigisl= Igisl Bug fix #9 Jun 09 Code added to set Igisl components to zero */ /* = Ggisls = Ggislg = Ggislb = Ggislt = 0.0; This is an appx solution - LFW_FD enhance line */ /* Final code will comply with BSIM MG in future releases */ /* here->B4SOIitun = 0; */ /* LFW_FD next 21 lines; fix Ibs, Ibd, and derivatives Gjs* and Gjd* */ /* Ibs = 0; */ /* Ibd = 0; */ /* Add Gmin since body node is floating - LFW - DIDN'T Converge */ /* Connect to electrical source, since source is BSIM reference */ /* Also option to connect to both source and drain */ /* if (here->B4SOImode == 1) */ /* { */ /* Ibs = 1.0e-18 * vbs; */ /* Ibd = 1.0e-18 * vbd; */ /* } */ /* else */ /* { */ /* Ibs = 1.0e-18 * vbd; */ /* Ibd = 1.0e-18 * vbs; */ /* } */ /* Gjsb = 1.0e-18; */ /* Gjdb = 1.0e-18; */ /* Gjsd = 0.0; */ /* Gjdd = -1.0e-18; */ GjsT = 0; GjdT = 0; here->B4SOIic = Ic = Gcd = Gcb = GcT = 0.0; } if (here->B4SOImode > 0) { here->B4SOIibs = Ibs; here->B4SOIibd = Ibd; } else { here->B4SOIibd = Ibs; here->B4SOIibs = Ibd; } /* LFW_FD 12 new lines per flexilint */ Vfb = 0.0; Voxacc = dVoxacc_dVg = dVoxacc_dVd = dVoxacc_dVb = dVoxacc_dVe = 0.0; Voxdepinv = dVoxdepinv_dVg = dVoxdepinv_dVd = dVoxdepinv_dVb = dVoxdepinv_dT= dVoxdepinv_dVe = 0.0; Vgb = Vgs_eff - Vbs; /* flexilint - moved from below if stmt */ dVgb_dVg = dVgs_eff_dVg - dVbs_dVg; dVgb_dVd = - dVbs_dVd; dVgb_dVe = - dVbs_dVe; dVgb_dVb = - dVbs_dVb; dVoxacc_dT = 0.0; dVfb_dT = 0.0; /* v3.0: gate-tunneling */ if ((model->B4SOIigbMod != 0) || (model->B4SOIigcMod != 0)) { /* Calculate Vox first */ Vfb = model->B4SOItype * here->B4SOIvth0 /* v4.0 */ - phi - pParam->B4SOIk1eff * sqrtPhi; dVfb_dT = - dphi_dT - pParam->B4SOIk1eff*dsqrtPhi_dT; /* new line Wagner */ T3 = Vfb - Vgs_eff + Vbs - DELTA_3; /* LFW_FD add/fix 5 derivatives */ dT3_dVg = -dVgs_eff_dVg + dVbs_dVg; dT3_dVd = dVbs_dVd; dT3_dVe = dVbs_dVe; dT3_dVb = dVbs_dVb; dTL3_dT = dVfb_dT - dVgs_eff_dT + dVbs_dT; if (Vfb <= 0.0) { T0 = sqrt(T3 * T3 - 4.0 * DELTA_3 * Vfb); dT0_dVg = 1.0/(2.0 * T0) * 2.0*T3 * dT3_dVg; dT0_dVb = 0.5*(1.0/T0) * 2.0*T3 * dT3_dVb; /* LFW_FD add 2 derivatives */ dT0_dVd = T3 * dT3_dVd / T0; dT0_dVe = T3 * dT3_dVe / T0; dTL0_dT = (T3 * dTL3_dT - 2.0 * DELTA_3 * dVfb_dT) / T0; /* new line Wagner */ TL1 = -1.0; /* new line Wagner */ } else { T0 = sqrt(T3 * T3 + 4.0 * DELTA_3 * Vfb); dT0_dVg = 1.0/(2.0 * T0) * 2.0*T3 * dT3_dVg; dT0_dVb = 0.5*(1.0/T0) * 2.0*T3 * dT3_dVb; /* LFW_FD add 2 derivatives */ dT0_dVd = T3 * dT3_dVd / T0; dT0_dVe = T3 * dT3_dVe / T0; dTL0_dT = (T3 * dTL3_dT + 2.0 * DELTA_3 * dVfb_dT) / T0; /* new line Wagner */ TL1 = 1.0; /* new line Wagner */ } Vfbeff = Vfb - 0.5 * (T3 + T0); dVfbeff_dVg = -0.5 * (dT3_dVg + dT0_dVg); dVfbeff_dVb = -0.5 * (dT3_dVb + dT0_dVb); /* LFW_FD add 2 derivatives */ dVfbeff_dVd = -0.5 * (dT3_dVd + dT0_dVd); dVfbeff_dVe = -0.5 * (dT3_dVe + dT0_dVe); /* 2 new lines - Wagner */ if (selfheat) dVfbeff_dT = dVfb_dT - 0.5 * (dTL3_dT + dTL0_dT); else dVfbeff_dT = 0.0; Voxacc = Vfb - Vfbeff; dVoxacc_dVg = -dVfbeff_dVg; /* LFW_FD add/fix 2 derivatives */ dVoxacc_dVd = -dVfbeff_dVd; dVoxacc_dVe = -dVfbeff_dVe; dVoxacc_dVb = -dVfbeff_dVb; if (Voxacc < 0.0) Voxacc = dVoxacc_dVg = dVoxacc_dVb = dVoxacc_dVd = dVoxacc_dVe = 0.0; /* LFW_FD enhance line */ /* 2 new lines Wagner */ if (selfheat) dVoxacc_dT = dVfb_dT - dVfbeff_dT; else dVoxacc_dT = 0.0; T0 = Vgs_eff - Vgsteff - Vfbeff - Vbseff; /* LFW_FD add/fix 4 derivatives */ dT0_dVg = dVgs_eff_dVg - dVgsteff_dVg - dVfbeff_dVg - dVbseff_dVg; /* v3.0 */ dT0_dVd = -dVgsteff_dVd - dVbseff_dVd - dVfbeff_dVd; dT0_dVb = -dVgsteff_dVb - dVbseff_dVb - dVfbeff_dVb; dT0_dVe = -dVgsteff_dVe - dVbseff_dVe - dVfbeff_dVe; dVoxdepinv_dT = 0.0; /* flexilint */ if (selfheat) /* fix below expression Wagner */ /*dT0_dT = -dVgsteff_dT - dVbseff_dT; v3.0 */ dT0_dT = dVgs_eff_dT - dVgsteff_dT - dVfbeff_dT - dVbseff_dT; /* v3.0 */ if (pParam->B4SOIk1ox == 0.0) /* v4.0 */ { Voxdepinv = dVoxdepinv_dVg = dVoxdepinv_dVd = dVoxdepinv_dVb = dVoxdepinv_dT = 0.0; } else { if (T0 < 0.0) { T1 = T0/pParam->B4SOIk1ox; dT1_dVg = dT0_dVg/pParam->B4SOIk1ox; dT1_dVd = dT0_dVd/pParam->B4SOIk1ox; dT1_dVb = dT0_dVb/pParam->B4SOIk1ox; dT1_dVe = dT0_dVe/pParam->B4SOIk1ox; /* v3.0 */ if (selfheat) dT1_dT = dT0_dT/pParam->B4SOIk1ox; else dT1_dT = 0.0; /* new line Wagner */ } else { T1 = pParam->B4SOIk1ox/2*(-1 + sqrt(1 + 4*T0/pParam->B4SOIk1ox/pParam->B4SOIk1ox)); T2 = pParam->B4SOIk1ox/2 * 0.5/sqrt(1 + 4*T0/pParam->B4SOIk1ox/pParam->B4SOIk1ox) * 4/pParam->B4SOIk1ox/pParam->B4SOIk1ox; dT1_dVg = T2 * dT0_dVg; dT1_dVd = T2 * dT0_dVd; dT1_dVb = T2 * dT0_dVb; dT1_dVe = T2 * dT0_dVe; /* v3.0 */ if (selfheat) dT1_dT = T2 * dT0_dT; else dT1_dT = 0.0; /* new line Wagner */ } Voxdepinv = Vgs_eff - (T1*T1 + Vbs) - Vfb; /* LFW_FD add/fix 5 derivatives */ dVoxdepinv_dVg = dVgs_eff_dVg - (2.0*T1*dT1_dVg) - dVbs_dVg; dVoxdepinv_dVd = -(2.0*T1*dT1_dVd) - dVbs_dVd; dVoxdepinv_dVb = -(2.0*T1*dT1_dVb) - dVbs_dVb; dVoxdepinv_dVe = -(2.0*T1*dT1_dVe) - dVbs_dVe; if (selfheat) dVoxdepinv_dT = dVgs_eff_dT -(2.0*T1*dT1_dT) - dVbs_dT - dVfb_dT; else dVoxdepinv_dT = 0.0; } } /* gate-channel tunneling component */ /* LFW_FD next 6 lines - flexilint inits */ Igd = dIgd_dVg = dIgd_dVd = 0.0; Igcd = dIgcd_dVg = dIgcd_dVd = dIgcd_dVb = dIgcd_dVe = 0.0; Igs = dIgs_dVg = dIgs_dVs = 0.0; Igcs = dIgcs_dVg = dIgcs_dVd = dIgcs_dVb = dIgcs_dVe = 0.0; ExpVxNVt = 0.0; dIgcd_dT = dIgcs_dT = 0.0; if (model->B4SOIigcMod) { T0 = Vtm * pParam->B4SOInigc; /* 2 new lines Wagner */ if (selfheat) dT0_dT = pParam->B4SOInigc * dVtm_dT; else dT0_dT = 0.0; VxNVt = (Vgs_eff - model->B4SOItype * here->B4SOIvth0) / T0; /* Vth instead of Vth0 may be used */ /* 2 new lines Wagner */ if (selfheat) dVxNVt_dT = (dVgs_eff_dT - VxNVt * dT0_dT) /T0; else dVxNVt_dT = 0.0; if (VxNVt > EXPL_THRESHOLD) { Vaux = Vgs_eff - model->B4SOItype * here->B4SOIvth0; dVaux_dVg = dVgs_eff_dVg; dVaux_dVd = 0.0; dVaux_dVb = 0.0; /* 3 new lines Wagner */ if (selfheat) dVaux_dT = dVgs_eff_dT; else dVaux_dT = 0.0; } else if (VxNVt < -EXPL_THRESHOLD) { Vaux = T0 * log(1.0 + MIN_EXPL); dVaux_dVg = dVaux_dVd = dVaux_dVb = 0.0; /* 3 new lines Wagner */ if (selfheat) dVaux_dT = dT0_dT * log(1.0 + MIN_EXPL); else dVaux_dT = 0.0; } else { ExpVxNVt = exp(VxNVt); Vaux = T0 * log(1.0 + ExpVxNVt); dVaux_dVg = ExpVxNVt / (1.0 + ExpVxNVt); dVaux_dVd = -dVaux_dVg * 0.0; dVaux_dVb = -dVaux_dVg * 0.0; dVaux_dVg *= dVgs_eff_dVg; /* Wagner New fix (moved from below into else block */ if (selfheat) dVaux_dT = dT0_dT*log(1.0+ExpVxNVt) + T0*ExpVxNVt*dVxNVt_dT/(1.0+ExpVxNVt); else dVaux_dT = 0.0; } T2 = Vgs_eff * Vaux; dT2_dVg = dVgs_eff_dVg * Vaux + Vgs_eff * dVaux_dVg; dT2_dVd = Vgs_eff * dVaux_dVd; dT2_dVb = Vgs_eff * dVaux_dVb; /* 2 new lines Wagner */ if (selfheat) dT2_dT = dVgs_eff_dT * Vaux + Vgs_eff * dVaux_dT; else dT2_dT = 0.0; T11 = pParam->B4SOIAechvb; T12 = pParam->B4SOIBechvb; T3 = pParam->B4SOIaigc * pParam->B4SOIcigc - pParam->B4SOIbigc; T4 = pParam->B4SOIbigc * pParam->B4SOIcigc; T5 = T12 * (pParam->B4SOIaigc + T3 * Voxdepinv - T4 * Voxdepinv * Voxdepinv); /* LFW_FD fix derivative */ if (selfheat) dT5_dT = T12 * (T3 - 2 * T4 * Voxdepinv) * dVoxdepinv_dT; else dT5_dT = 0.0; if (T5 > EXPL_THRESHOLD) { T6 = MAX_EXPL; dT6_dVg = dT6_dVd = dT6_dVb = dT6_dVe = dT6_dT = 0.0; /* LFW_FD enhance line */ } else if (T5 < -EXPL_THRESHOLD) { T6 = MIN_EXPL; dT6_dVg = dT6_dVd = dT6_dVb = dT6_dVe = dT6_dT = 0.0; /* LFW_FD enhance line */ } else { T6 = exp(T5); dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * Voxdepinv); dT6_dVd = dT6_dVg * dVoxdepinv_dVd; dT6_dVe = dT6_dVg * dVoxdepinv_dVe; /* LFW_FD new line */ dT6_dVb = dT6_dVg * dVoxdepinv_dVb; dT6_dVg *= dVoxdepinv_dVg; /* LFW_FD fix - move from below into this else block */ if (selfheat) dT6_dT = T6 * dT5_dT; else dT6_dT = 0.0; } Igc = T11 * T2 * T6; dIgc_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg); dIgc_dVd = T11 * (T2 * dT6_dVd + T6 * dT2_dVd); dIgc_dVe = T11 * (T2 * dT6_dVe); /* LFW_FD new line */ dIgc_dVb = T11 * (T2 * dT6_dVb + T6 * dT2_dVb); /* 3 new lines Wagner */ if (selfheat) dIgc_dT = T11 * T2 * dT6_dT + T11 * dT2_dT * T6; else dIgc_dT = 0.0; T7 = -pParam->B4SOIpigcd * Vds; T8 = T7 * T7 + 2.0e-4; dT8_dVd = -2.0 * pParam->B4SOIpigcd * T7; if (T7 > EXPL_THRESHOLD) { T9 = MAX_EXPL; dT9_dVd = 0.0; } else if (T7 < -EXPL_THRESHOLD) { T9 = MIN_EXPL; dT9_dVd = 0.0; } else { T9 = exp(T7); dT9_dVd = -T9 * pParam->B4SOIpigcd; } T0 = T8 * T8; T1 = T9 - 1.0 + 1.0e-4; T10 = (T1 - T7) / T8; dT10_dVd = ((pParam->B4SOIpigcd + dT9_dVd) * T8 - (T1 - T7) * dT8_dVd) / T0; Igcs = Igc * T10; dIgcs_dVg = dIgc_dVg * T10; dIgcs_dVd = dIgc_dVd * T10 + Igc * dT10_dVd; dIgcs_dVb = dIgc_dVb * T10; dIgcs_dVe = dIgc_dVe * T10; /* LFW_FD new line */ /* 3 new lines Wagner */ if (selfheat) dIgcs_dT = dIgc_dT * T10; else dIgcs_dT = 0.0; T1 = T9 - 1.0 - 1.0e-4; T10 = (T7 * T9 - T1) / T8; dT10_dVd = (-pParam->B4SOIpigcd * T9 + (T7 - 1.0) * dT9_dVd - T10 * dT8_dVd) / T8; Igcd = Igc * T10; dIgcd_dVg = dIgc_dVg * T10; dIgcd_dVd = dIgc_dVd * T10 + Igc * dT10_dVd; dIgcd_dVb = dIgc_dVb * T10; dIgcd_dVe = dIgc_dVe * T10; /* LFW_FD new line */ /* 3 new lines Wagner */ if (selfheat) dIgcd_dT = dIgc_dT * T10; else dIgcd_dT = 0.0; here->B4SOIIgcs = Igcs; here->B4SOIgIgcsg = dIgcs_dVg; here->B4SOIgIgcsd = dIgcs_dVd; /* fix below expression Wagner */ /*here->B4SOIgIgcsb = dIgcs_dVb * dVbseff_dVb;*/ here->B4SOIgIgcsb = dIgcs_dVb; here->B4SOIgIgcse = dIgcs_dVe; /* LFW_FD new line */ here->B4SOIIgcd = Igcd; here->B4SOIgIgcdg = dIgcd_dVg; here->B4SOIgIgcdd = dIgcd_dVd; /* fix below expression Wagner */ /*here->B4SOIgIgcdb = dIgcd_dVb * dVbseff_dVb;*/ here->B4SOIgIgcdb = dIgcd_dVb; here->B4SOIgIgcde = dIgcd_dVe; /* LFW_FD new line */ T0 = vgs - pParam->B4SOIvfbsd; vgs_eff = sqrt(T0 * T0 + 1.0e-4); dvgs_eff_dvg = T0 / vgs_eff; T2 = vgs * vgs_eff; dT2_dVg = vgs * dvgs_eff_dvg + vgs_eff; /* T11 = pParam->B4SOIAechvbEdge; */ T13 = pParam->B4SOIAechvbEdges; T14 = pParam->B4SOIAechvbEdged; T12 = pParam->B4SOIBechvbEdge; T3 = pParam->B4SOIaigsd * pParam->B4SOIcigsd - pParam->B4SOIbigsd; T4 = pParam->B4SOIbigsd * pParam->B4SOIcigsd; T5 = T12 * (pParam->B4SOIaigsd + T3 * vgs_eff - T4 * vgs_eff * vgs_eff); if (T5 > EXPL_THRESHOLD) { T6 = MAX_EXPL; dT6_dVg = 0.0; } else if (T5 < -EXPL_THRESHOLD) { T6 = MIN_EXPL; dT6_dVg = 0.0; } else { T6 = exp(T5); dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * vgs_eff) * dvgs_eff_dvg; } /* Igs = T11 * T2 * T6; */ Igs = T13 * T2 * T6; dIgs_dVg = T13 * (T2 * dT6_dVg + T6 * dT2_dVg); dIgs_dVs = -dIgs_dVg; T0 = vgd - pParam->B4SOIvfbsd; vgd_eff = sqrt(T0 * T0 + 1.0e-4); dvgd_eff_dvg = T0 / vgd_eff; T2 = vgd * vgd_eff; dT2_dVg = vgd * dvgd_eff_dvg + vgd_eff; T5 = T12 * (pParam->B4SOIaigsd + T3 * vgd_eff - T4 * vgd_eff * vgd_eff); if (T5 > EXPL_THRESHOLD) { T6 = MAX_EXPL; dT6_dVg = 0.0; } else if (T5 < -EXPL_THRESHOLD) { T6 = MIN_EXPL; dT6_dVg = 0.0; } else { T6 = exp(T5); dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * vgd_eff) * dvgd_eff_dvg; } /* Igd = T11 * T2 * T6; */ Igd = T14 * T2 * T6; dIgd_dVg = T14 * (T2 * dT6_dVg + T6 * dT2_dVg); dIgd_dVd = -dIgd_dVg; here->B4SOIIgs = Igs; here->B4SOIgIgsg = dIgs_dVg; here->B4SOIgIgss = dIgs_dVs; here->B4SOIIgd = Igd; here->B4SOIgIgdg = dIgd_dVg; here->B4SOIgIgdd = dIgd_dVd; } else { here->B4SOIIgcs = here->B4SOIgIgcsg = here->B4SOIgIgcsd = here->B4SOIgIgcsb = 0.0; here->B4SOIIgcd = here->B4SOIgIgcdg = here->B4SOIgIgcdd = here->B4SOIgIgcdb = 0.0; here->B4SOIIgs = here->B4SOIgIgsg = here->B4SOIgIgss = 0.0; here->B4SOIIgd = here->B4SOIgIgdg = here->B4SOIgIgdd = 0.0; } here->B4SOIgIgcss = -(here->B4SOIgIgcsg + here->B4SOIgIgcsd + here->B4SOIgIgcsb + here->B4SOIgIgcse); /* LFW_FD fix line */ here->B4SOIgIgcds = -(here->B4SOIgIgcdg + here->B4SOIgIgcdd + here->B4SOIgIgcdb + here->B4SOIgIgcde); /* LFW_FD fix line */ Vfb2 = dVox_dT = 0.0; /* gate-body tunneling component */ if ((model->B4SOIigbMod!= 0) && (here->B4SOIsoiMod != 2)) /* v3.2 */ /* v3.1: the Igb calculation is skipped for the ideal FD mode */ { OxideRatio = pParam->B4SOIoxideRatio; Vox = Voxdepinv; /* Voxeff is Vox limited below Voxh */ T0 = model->B4SOIvoxh; T1 = T0 - Vox - model->B4SOIdeltavox; T3 = sqrt(T1 * T1 + 4*model->B4SOIdeltavox * T0); Voxeff = T0 - 0.5 * (T1 + T3); dVoxeff_dVox = 0.5 * (1.0 + T1 / T3); Vox = Voxeff; dVox_dVg = dVoxdepinv_dVg * dVoxeff_dVox; dVox_dVd = dVoxdepinv_dVd * dVoxeff_dVox; dVox_dVb = dVoxdepinv_dVb * dVoxeff_dVox; dVox_dVe = dVoxdepinv_dVe * dVoxeff_dVox; /* v3.0 */ if (selfheat) /* v4.2 Bug # 23 Jul09 */ dVox_dT = dVoxdepinv_dT * dVoxeff_dVox; T0 = (Vox - model->B4SOIebg)/model->B4SOIvevb; if (selfheat) dT0_dT = dVox_dT /model->B4SOIvevb; DEXP(T0, T1, T2); /* T1=exp(T0), T2=dT1_dT0 */ if (selfheat) dT1_dT = T2 * dT0_dT; Vaux = model->B4SOIvevb * log(1 + T1); dVaux_dVg = T2 / (1 + T1) * dVox_dVg; dVaux_dVd = T2 / (1 + T1) * dVox_dVd; dVaux_dVb = T2 / (1 + T1) * dVox_dVb; dVaux_dVe = T2 / (1 + T1) * dVox_dVe; /* v3.0 */ if (selfheat) dVaux_dT = T2 / (1 + T1) * dVox_dT; /* LFW_FD fix line */ else dVaux_dT = 0.0; if (model->B4SOIvgb1 != 0) { T0 = 1 - Vox / model->B4SOIvgb1; dT0_dVox = -1.0/model->B4SOIvgb1; if (selfheat) dT0_dT = -dVox_dT / model->B4SOIvgb1; } else { T0 = 1; dT0_dVox = dT0_dT = 0.0; } if (T0 < 0.01) { T0 = 0.01; dT0_dVox = dT0_dT = 0.0; } /* v2.2.3 bug fix */ /* T1 = (Leff * Weff / here->B4SOInseg + here->B4SOIagbcpd/here->B4SOInf) * 3.7622e-7 * OxideRatio; T2 = -3.1051e10 * model->B4SOItoxqm; */ T1 = (Leff * Weff / here->B4SOInseg + here->B4SOIagbcpd/here->B4SOInf) * agb1 * OxideRatio; /* bugfix v4.3.1 -Tanvir */ T2 = bgb1 * model->B4SOItoxqm; /* bugfix v4.3.1 -Tanvir */ T3 = pParam->B4SOIalphaGB1; T4 = pParam->B4SOIbetaGB1; T6 = T2*(T3 - T4 * Vox) / T0; if (selfheat) dT6_dT = -T2 * T4 * dVox_dT / T0 - T6/T0 * dT0_dT; else dT6_dT = 0.0; /* flexilint */ DEXP(T6, T5, T7); /* T5=exp(T6), T7=dT5_dT6 */ dT5_dVg = -T7 * dVox_dVg * T2 / T0 * (T4 + (T3 - T4 * Vox) / T0 * dT0_dVox); dT5_dVd = -T7 * dVox_dVd * T2 / T0 * (T4 + (T3 - T4 * Vox) / T0 * dT0_dVox); dT5_dVb = -T7 * dVox_dVb * T2 / T0 * (T4 + (T3 - T4 * Vox) / T0 * dT0_dVox); dT5_dVe = -T7 * dVox_dVe * T2 / T0 * (T4 + (T3 - T4 * Vox) / T0 * dT0_dVox); /* v3.0 */ if (selfheat) dT5_dT = T7 * dT6_dT; else dT5_dT = 0.0; /* flexilint */ Igb1 = T1 * Vgb * Vaux * T5; /* LFW_FD fix 5 derivatives */ dIgb1_dVg = T1 * (Vgb*Vaux*dT5_dVg + dVgb_dVg*Vaux*T5 + Vgb*T5*dVaux_dVg) + Vgb * Vaux * T5 * Leff * dWeff_dVg * agb1 * OxideRatio / here->B4SOInseg; dIgb1_dVd = T1 * (Vgb*Vaux*dT5_dVd + Vgb*T5*dVaux_dVd + dVgb_dVd*Vaux*T5); dIgb1_dVb = T1 * (Vgb*Vaux*dT5_dVb + dVgb_dVb*Vaux*T5 + Vgb*T5*dVaux_dVb) + Vgb * Vaux * T5 * Leff * dWeff_dVb * agb1 * OxideRatio / here->B4SOInseg; dIgb1_dVe = T1 * (Vgb*Vaux*dT5_dVe + Vgb*T5*dVaux_dVe + dVgb_dVe*Vaux*T5); if (selfheat) dIgb1_dT = T1 * Vgb * (Vaux*dT5_dT + T5*dVaux_dT) + Vgb * Vaux * T5 * Leff * dWeff_dT * agb1 * OxideRatio / here->B4SOInseg + T1 * dVgs_eff_dT * Vaux * T5; else dIgb1_dT = 0.0; Vox = Voxacc; /* Voxeff is Vox limited below Voxh */ T0 = model->B4SOIvoxh; T1 = T0 - Vox - model->B4SOIdeltavox; T3 = sqrt(T1 * T1 + 4*model->B4SOIdeltavox * T0); Voxeff = T0 - 0.5 * (T1 + T3); dVoxeff_dVox = 0.5 * (1.0 + T1 / T3); Vox = Voxeff; dVox_dVg = dVoxacc_dVg * dVoxeff_dVox; dVox_dVd = dVoxacc_dVd * dVoxeff_dVox; dVox_dVe = dVoxacc_dVe * dVoxeff_dVox; /* LFW_FD new line */ dVox_dVb = dVoxacc_dVb * dVoxeff_dVox; /* fix below expression Wagner */ /*dVox_dT = 0;*/ dVox_dT = dVoxeff_dVox * dVoxacc_dT; T0 = (-Vgb+(Vfb))/model->B4SOIvecb; /* fix below expression Wagner */ /*if (selfheat) dT0_dT = 0;*/ if (selfheat) dT0_dT = dVfb_dT/model->B4SOIvecb; else dT0_dT = 0; DEXP(T0, T1, T2); /* T1=exp(T0), T2=dT1_dT0 */ /* fix below expression - Wagner */ /*if (selfheat) dT1_dT = 0;*/ if (selfheat) dT1_dT = T2 * dT0_dT; else dT1_dT = 0; Vaux = model->B4SOIvecb* log(1 + T1); /* LFW_FD fix/add 4 derivatives */ dVaux_dVg = - T2 / (1 + T1) * dVgb_dVg; dVaux_dVd = - T2 / (1 + T1) * dVgb_dVd; dVaux_dVe = - T2 / (1 + T1) * dVgb_dVe; dVaux_dVb = - T2 / (1 + T1) * dVgb_dVb; /* fix below expression - Wagner */ /*if (selfheat) dVaux_dT = 0;*/ if (selfheat) dVaux_dT = model->B4SOIvecb * dT1_dT / (1 + T1); else dVaux_dT = 0.0; if (model->B4SOIvgb2 != 0) { T0 = 1 - Vox / model->B4SOIvgb2; dT0_dVox = -1.0/model->B4SOIvgb2; if (selfheat) dT0_dT = -dVox_dT / model->B4SOIvgb2; } else { T0 = 1; dT0_dVox = dT0_dT =0.0; } if (T0 < 0.01) { T0 = 0.01; dT0_dVox = dT0_dT =0.0; } /* v2.2.3 bug fix */ /* T1 = (Leff * Weff / here->B4SOInseg + here->B4SOIagbcpd/here->B4SOInf) * 4.9758e-7 * OxideRatio; T2 = -2.357e10 * model->B4SOItoxqm; */ T1 = (Leff * Weff / here->B4SOInseg + here->B4SOIagbcpd/here->B4SOInf) * agb2 * OxideRatio; /* bugfix v4.3.1 -Tanvir */ T2 = bgb2 * model->B4SOItoxqm; /* bugfix v4.3.1 -Tanvir */ T3 = pParam->B4SOIalphaGB2; T4 = pParam->B4SOIbetaGB2; T6 = T2*(T3 - T4 * Vox) / T0; if (selfheat) dT6_dT = -T2 * T4 * dVox_dT / T0 - T6/T0 * dT0_dT; else dT6_dT = 0.0; /* flexilint */ DEXP(T6, T5, T7); /* T5=exp(T6), T7=dT5_dT6 */ dT5_dVg = -T7 * dVox_dVg * T2 / T0 * (T4 + (T3 - T4 * Vox) / T0 * dT0_dVox); dT5_dVd = -T7 * dVox_dVd * T2 / T0 * (T4 + (T3 - T4 * Vox) / T0 * dT0_dVox); dT5_dVb = -T7 * dVox_dVb * T2 / T0 * (T4 + (T3 - T4 * Vox) / T0 * dT0_dVox); dT5_dVe = -T7 * dVox_dVe * T2 / T0 * (T4 + (T3 - T4 * Vox) / T0 * dT0_dVox); /* LFW_FD new line */ if (selfheat) dT5_dT = T7 * dT6_dT; else dT5_dT = 0.0; /* flexilint */ Igb2 = T1 * Vgb * Vaux * T5; /* LFW_FD fix 5 derivatives */ dIgb2_dVg = T1 * (Vgb*Vaux*dT5_dVg + dVgb_dVg*Vaux*T5 + Vgb*T5*dVaux_dVg) + Vgb * Vaux * T5 * Leff * dWeff_dVg *agb2 * OxideRatio / here->B4SOInseg; dIgb2_dVd = T1 * (Vgb*Vaux*dT5_dVd + dVgb_dVd*Vaux*T5 + Vgb*T5*dVaux_dVd); dIgb2_dVb = T1 * (Vgb*Vaux*dT5_dVb + dVgb_dVb*Vaux*T5 + Vgb*T5*dVaux_dVb) + Vgb * Vaux * T5 * Leff * dWeff_dVb * agb2 * OxideRatio / here->B4SOInseg; dIgb2_dVe = T1 * (Vgb*Vaux*dT5_dVe + dVgb_dVe*Vaux*T5 + Vgb*T5*dVaux_dVe); if (selfheat) dIgb2_dT = T1 * Vgb * (Vaux*dT5_dT + T5*dVaux_dT) + Vgb * Vaux * T5 * Leff * dWeff_dT * agb2 * OxideRatio / here->B4SOInseg + T1 * dVgs_eff_dT * Vaux * T5; else dIgb2_dT = 0.0; /* Igb1 dominates in inversion region, while Igb2 dominates in accumulation */ /* v2.2.3 bug fix for residue at low Vgb */ if (Vgb >= 0) { Igb = Igb1; dIgb_dVg = dIgb1_dVg; dIgb_dVd = dIgb1_dVd; dIgb_dVb = dIgb1_dVb; dIgb_dVe = dIgb1_dVe; /* v3.0 */ dIgb_dT = dIgb1_dT; } else { Igb = Igb2; dIgb_dVg = dIgb2_dVg; dIgb_dVd = dIgb2_dVd; dIgb_dVb = dIgb2_dVb; dIgb_dVe = dIgb2_dVe; /* LFW_FD fix line */ dIgb_dT = dIgb2_dT; } /*Vfb2 = Vfb + 1.12; Bug fix #18 Jul09*/ Vfb2 = Vfb + eggbcp2; /* bugfix 4.3.1 -Tanvir */ } else { Igb = 0.0; dIgb_dVg = 0.0; dIgb_dVd = 0.0; dIgb_dVb = 0.0; dIgb_dVe = 0.0; /* v3.0 */ dIgb_dT = 0.0; } here->B4SOIig = Igb; here->B4SOIgigg = dIgb_dVg; here->B4SOIgigd = dIgb_dVd; here->B4SOIgigb = dIgb_dVb; here->B4SOIgige = dIgb_dVe; /* v3.0 */ here->B4SOIgigs = -(dIgb_dVg + dIgb_dVd + dIgb_dVb + dIgb_dVe); /* v3.0 */ here->B4SOIgigT = dIgb_dT; /* v4.1 */ /* gate tunneling component in the AGBCP2 region */ /* Vfb2 = Vfb + 1.12; Bug fix #18 Jul09 Code moved to 4370 where Vfb definition is valid*/ if ((model->B4SOIigbMod!= 0) && (here->B4SOIsoiMod != 2) && (here->B4SOIbodyMod != 0) && (here->B4SOIagbcp2 > 0) && (vgp < Vfb2)) /* v4.1: the Igb2_agbcp2 calculation is skipped for the ideal FD mode or if there is no "p" node */ { /* Vfb, Vfb2 are taken as constants in derivative calculation for simplicity */ T0 = vgp - Vfb2; T1 = sqrt(T0 * T0 + 1.0e-4); vgp_eff = 0.5 * (-T0 + T1 - 1.0e-2); dvgp_eff_dvg = 0.5 * (-1.0 + T0 / T1); dvgp_eff_dvp = -dvgp_eff_dvg; dvgp_eff_dT = 0.5 * (1.0 - T0 / T1) * dVfb_dT; /* LFW_FD new line */ /* T11=A* T12=B* */ /*T11 = (model->B4SOItype == NMOS) ? 3.42537e-7 : 4.97232e-7; T12 = (model->B4SOItype == NMOS) ? 1.16645e12 : 7.45669e11; */ T11 = (model->B4SOItype == NMOS) ? agbc2n : agbc2p; /* bugfix 4.3.1 -Tanvir */ T12 = (model->B4SOItype == NMOS) ? bgbc2n : bgbc2p; /* bugfix 4.3.1 -Tanvir */ T2 = vgp * vgp_eff; dT2_dVg = vgp * dvgp_eff_dvg + vgp_eff; dT2_dVp = vgp * dvgp_eff_dvp - vgp_eff; dT2_dT = vgp * dvgp_eff_dT; /* LFW_FD new line */ T3 = pParam->B4SOIaigbcp2 * pParam->B4SOIcigbcp2 - pParam->B4SOIbigbcp2; T4 = pParam->B4SOIbigbcp2 * pParam->B4SOIcigbcp2; T5 = (-T12) * model->B4SOItoxqm * (pParam->B4SOIaigbcp2 + T3 * vgp_eff - T4 * vgp_eff * vgp_eff); if (T5 > EXPL_THRESHOLD) { T6 = MAX_EXPL; dT6_dVg = 0.0; dT6_dVp = 0.0; dT6_dT = 0.0; /* LFW_FD new line */ } else if (T5 < -EXPL_THRESHOLD) { T6 = MIN_EXPL; dT6_dVg = 0.0; dT6_dVp = 0.0; dT6_dT = 0.0; /* LFW_FD new line */ } else { T6 = exp(T5); T7 = T6 * (-T12) * model->B4SOItoxqm * (T3 - 2.0 * T4 * vgp_eff); dT6_dVg = T7 * dvgp_eff_dvg; dT6_dVp = T7 * dvgp_eff_dvg; dT6_dT = T7 * dvgp_eff_dT; /* LFW_FD new line */ } T11 = T11 * here->B4SOIagbcp2 * pParam->B4SOIoxideRatio; Ig_agbcp2 = T11 * T2 * T6; dIg_agbcp2_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg); dIg_agbcp2_dVp = -dIg_agbcp2_dVg; dIg_agbcp2_dT = T11 * (T2 * dT6_dT + T6 * dT2_dT); /* LFW_FD new line */ } else { Ig_agbcp2 = 0.0; dIg_agbcp2_dVg = 0.0; dIg_agbcp2_dVp = 0.0; dIg_agbcp2_dT = 0.0; /* LFW_FD new line */ } here->B4SOIigp = Ig_agbcp2; here->B4SOIgigpg = dIg_agbcp2_dVg; here->B4SOIgigpp = dIg_agbcp2_dVp; /* end of gate-body tunneling */ /* end of v3.0 gate-tunneling */ /* v3.1 */ if (here->B4SOIsoiMod != 2) /* v3.2 */ { Idsmosfet = 0.0; Ratio = dRatio_dVg = dRatio_dVd = dRatio_dVb = dRatio_dVe = dRatio_dT = 0.0; if (model->B4SOIiiiMod == 0 ) { /* calculate substrate current Iii */ if (pParam->B4SOIalpha0 <= 0.0) { Giig = Giib = Giid = GiiT = 0.0; Giie = 0; /* v3.0 */ here->B4SOIiii = Iii = Idsmosfet = dIiibjt_dVb = dIiibjt_dVd = dIiibjt_dT = 0.0; } else { Vdsatii0 = pParam->B4SOIvdsatii0 * (1 + model->B4SOItii * (TempRatio-1.0)) - pParam->B4SOIlii / Leff; if (selfheat) dVdsatii0_dT = pParam->B4SOIvdsatii0 * model->B4SOItii * dTempRatio_dT; else dVdsatii0_dT = 0; /* Calculate VgsStep */ T0 = pParam->B4SOIesatii * Leff; /* v3.0 bug fix: T0 is dimentionless (i.e., scaled by 1V) */ T1 = pParam->B4SOIsii0 * T0 / (1.0 + T0); T0 = 1 / (1 + pParam->B4SOIsii1 * Vgsteff); if (selfheat) dT0_dT = - pParam->B4SOIsii1 * T0 * T0 *dVgsteff_dT; else dT0_dT = 0; T3 = T0 + pParam->B4SOIsii2; T4 = Vgst * pParam->B4SOIsii1 * T0 * T0; T2 = Vgst * T3; dT2_dVg = T3 * (dVgst_dVg - dVth_dVb * dVbseff_dVg) - T4 * dVgsteff_dVg; /* v3.0 */ dT2_dVb = T3 * dVgst_dVb * dVbseff_dVb - T4 * dVgsteff_dVb; dT2_dVe = T3 * dVgst_dVb * dVbseff_dVe - T4 * dVgsteff_dVe; /* v3.0 */ dT2_dVd = T3 * (dVgst_dVd - dVth_dVb * dVbseff_dVd) - T4 * dVgsteff_dVd; /* v3.0 */ if (selfheat) /* fix below expression Wagner */ /*dT2_dT = -(dVth_dT + dVth_dVb * dVbseff_dT) * T3 + Vgst * dT0_dT; v3.0 */ dT2_dT = (dVgst_dT ) * T3 + Vgst * dT0_dT; /* v3.0 */ else dT2_dT = 0; T3 = 1 / (1 + pParam->B4SOIsiid * Vds); dT3_dVd = - pParam->B4SOIsiid * T3 * T3; VgsStep = T1 * T2 * T3; if (selfheat) dVgsStep_dT = T1 * T3 * dT2_dT; else dVgsStep_dT = 0; Vdsatii = Vdsatii0 + VgsStep; Vdiff = Vds - Vdsatii; dVdiff_dVg = - T1 * T3 * dT2_dVg; dVdiff_dVb = - T1 * T3 * dT2_dVb; dVdiff_dVe = - T1 * T3 * dT2_dVe; /* v3.0 */ dVdiff_dVd = 1.0 - T1 * (T3 * dT2_dVd + T2 * dT3_dVd); if (selfheat) dVdiff_dT = -(dVdsatii0_dT + dVgsStep_dT); else dVdiff_dT = 0; T0 = pParam->B4SOIbeta2 + pParam->B4SOIbeta1 * Vdiff + pParam->B4SOIbeta0 * Vdiff * Vdiff; if (T0 < 1e-5) { T0 = 1e-5; dT0_dVg = dT0_dVd = dT0_dVb = dT0_dT = 0.0; dT0_dVe = 0; /* v3.0 */ } else { T1 = pParam->B4SOIbeta1 + 2 * pParam->B4SOIbeta0 * Vdiff; dT0_dVg = T1 * dVdiff_dVg; dT0_dVb = T1 * dVdiff_dVb; dT0_dVd = T1 * dVdiff_dVd; dT0_dVe = T1 * dVdiff_dVe; /* v3.0 */ if (selfheat) dT0_dT = T1 * dVdiff_dT; else dT0_dT = 0; } if ((T0 < Vdiff / EXPL_THRESHOLD) && (Vdiff > 0.0)) { Ratio = pParam->B4SOIalpha0 * MAX_EXPL; dRatio_dVg = dRatio_dVb = dRatio_dVd = dRatio_dT = 0.0; dRatio_dVe = 0; /* v3.0 */ } else if ((T0 < -Vdiff / EXPL_THRESHOLD) && (Vdiff < 0.0)) { Ratio = pParam->B4SOIalpha0 * MIN_EXPL; dRatio_dVg = dRatio_dVb = dRatio_dVd = dRatio_dT = 0.0; dRatio_dVe = 0; /* v3.0 */ } else { Ratio = pParam->B4SOIalpha0 * exp(Vdiff / T0); T1 = Ratio / T0 / T0; dRatio_dVg = T1 * (T0 * dVdiff_dVg - Vdiff * dT0_dVg); dRatio_dVb = T1 * (T0 * dVdiff_dVb - Vdiff * dT0_dVb); dRatio_dVd = T1 * (T0 * dVdiff_dVd - Vdiff * dT0_dVd); /* v3.0 */ dRatio_dVe = T1 * (T0 * dVdiff_dVe - Vdiff * dT0_dVe); if (selfheat) dRatio_dT = T1 * (T0 * dVdiff_dT - Vdiff * dT0_dT); else dRatio_dT = 0; } /* Avoid too high ratio */ if (Ratio > 10.0) { Ratio = 10.0; dRatio_dVg = dRatio_dVb = dRatio_dVd = dRatio_dT = 0.0; dRatio_dVe = 0; /* v3.0 */ } T0 = Ids + pParam->B4SOIfbjtii * Ic; here->B4SOIiii = Iii = Ratio * T0; Giig = Ratio * Gm + T0 * dRatio_dVg; Giib = Ratio * (Gmb + pParam->B4SOIfbjtii * Gcb) + T0 * dRatio_dVb; Giid = Ratio * (Gds + pParam->B4SOIfbjtii * Gcd) + T0 * dRatio_dVd; /* v3.0 */ Giie = Ratio * Gme + T0 * dRatio_dVe; if (selfheat) GiiT = Ratio * (GmT + pParam->B4SOIfbjtii * GcT) + T0 * dRatio_dT; else GiiT = 0.0; } } else /*new Iii model*/ { /*Idsmosfet part*/ if (pParam->B4SOIalpha0 <= 0.0) { /* Giig = Giib = Giid = GiiT = 0.0; */ Giie = 0; /* v3.0 */ /* here->B4SOIiii = Iii = 0.0; v4.2 bugfix #38 */ /* Idsmosfet = 0.0; v4.2 bugfix #38 */ /*dIiibjt_dVb = 0.0; v4.2 bugfix #38 */ /*dIiibjt_dVd = 0.0; */ /*dIiibjt_dT = 0.0; */ Ratio = 0; /* v4.2 bugfix # 38 */ } else { Vdsatii0 = pParam->B4SOIvdsatii0 * (1 + model->B4SOItii * (TempRatio-1.0)) - pParam->B4SOIlii / Leff; if (selfheat) dVdsatii0_dT = pParam->B4SOIvdsatii0 * model->B4SOItii * dTempRatio_dT; else dVdsatii0_dT = 0; /* Calculate VgsStep */ T0 = pParam->B4SOIesatii * Leff; /* v3.0 bug fix: T0 is dimensionless (i.e., scaled by 1V) */ T1 = pParam->B4SOIsii0 * T0 / (1.0 + T0); T0 = 1 / (1 + pParam->B4SOIsii1 * Vgsteff); if (selfheat) dT0_dT = - pParam->B4SOIsii1 * T0 * T0 *dVgsteff_dT; else dT0_dT = 0; T3 = T0 + pParam->B4SOIsii2; T4 = Vgst * pParam->B4SOIsii1 * T0 * T0; T2 = Vgst * T3; dT2_dVg = T3 * (dVgst_dVg - dVth_dVb * dVbseff_dVg) - T4 * dVgsteff_dVg; /* v3.0 */ dT2_dVb = T3 * dVgst_dVb * dVbseff_dVb - T4 * dVgsteff_dVb; dT2_dVe = T3 * dVgst_dVb * dVbseff_dVe - T4 * dVgsteff_dVe; /* v3.0 */ dT2_dVd = T3 * (dVgst_dVd - dVth_dVb * dVbseff_dVd) - T4 * dVgsteff_dVd; /* v3.0 */ if (selfheat) /* fix below expression Wagner */ /*dT2_dT = -(dVth_dT + dVth_dVb * dVbseff_dT) * T3 + Vgst * dT0_dT; v3.0 */ dT2_dT = (dVgst_dT ) * T3 + Vgst * dT0_dT; /* v3.0 */ else dT2_dT = 0; T3 = 1 / (1 + pParam->B4SOIsiid * Vds); dT3_dVd = - pParam->B4SOIsiid * T3 * T3; VgsStep = T1 * T2 * T3; if (selfheat) dVgsStep_dT = T1 * T3 * dT2_dT; else dVgsStep_dT = 0; Vdsatii = Vdsatii0 + VgsStep; Vdiff = Vds - Vdsatii; dVdiff_dVg = - T1 * T3 * dT2_dVg; dVdiff_dVb = - T1 * T3 * dT2_dVb; dVdiff_dVe = - T1 * T3 * dT2_dVe; /* v3.0 */ dVdiff_dVd = 1.0 - T1 * (T3 * dT2_dVd + T2 * dT3_dVd); if (selfheat) dVdiff_dT = -(dVdsatii0_dT + dVgsStep_dT); else dVdiff_dT = 0; T0 = pParam->B4SOIbeta2 + pParam->B4SOIbeta1 * Vdiff + pParam->B4SOIbeta0 * Vdiff * Vdiff; if (T0 < 1e-5) { T0 = 1e-5; dT0_dVg = dT0_dVd = dT0_dVb = dT0_dT = 0.0; dT0_dVe = 0; /* v3.0 */ } else { T1 = pParam->B4SOIbeta1 + 2 * pParam->B4SOIbeta0 * Vdiff; dT0_dVg = T1 * dVdiff_dVg; dT0_dVb = T1 * dVdiff_dVb; dT0_dVd = T1 * dVdiff_dVd; dT0_dVe = T1 * dVdiff_dVe; /* v3.0 */ if (selfheat) dT0_dT = T1 * dVdiff_dT; else dT0_dT = 0; } if ((T0 < Vdiff / EXPL_THRESHOLD) && (Vdiff > 0.0)) { Ratio = pParam->B4SOIalpha0 * MAX_EXPL; dRatio_dVg = dRatio_dVb = dRatio_dVd = dRatio_dT = 0.0; dRatio_dVe = 0; /* v3.0 */ } else if ((T0 < -Vdiff / EXPL_THRESHOLD) && (Vdiff < 0.0)) { Ratio = pParam->B4SOIalpha0 * MIN_EXPL; dRatio_dVg = dRatio_dVb = dRatio_dVd = dRatio_dT = 0.0; dRatio_dVe = 0; /* v3.0 */ } else { Ratio = pParam->B4SOIalpha0 * exp(Vdiff / T0); T1 = Ratio / T0 / T0; dRatio_dVg = T1 * (T0 * dVdiff_dVg - Vdiff * dT0_dVg); dRatio_dVb = T1 * (T0 * dVdiff_dVb - Vdiff * dT0_dVb); dRatio_dVd = T1 * (T0 * dVdiff_dVd - Vdiff * dT0_dVd); /* v3.0 */ dRatio_dVe = T1 * (T0 * dVdiff_dVe - Vdiff * dT0_dVe); if (selfheat) dRatio_dT = T1 * (T0 * dVdiff_dT - Vdiff * dT0_dT); else dRatio_dT = 0; } /* Avoid too high ratio */ if (Ratio > 10.0) { Ratio = 10.0; dRatio_dVg = dRatio_dVb = dRatio_dVd = dRatio_dT = 0.0; dRatio_dVe = 0; /* v3.0 */ } T0 = Ids; Idsmosfet = Ratio * T0; } /*New BJT part*/ T0 = (pParam->B4SOIcbjtii + pParam->B4SOIebjtii * Leff)/Leff; Vbci= pParam->B4SOIvbci*(1.0+model->B4SOItvbci*(TempRatio-1.0)); /*T1 = Vbci - (Vbs - Vds); v4.3 bugfix*/ T1 = Vbci - (vbs_jct - Vds); T2 = pParam->B4SOImbjtii -1.0; /* if(T1 == 0.0) T3 =1.0; else T3 = -pParam->B4SOIabjtii * pow(T1,T2); */ if(T1<=0.0) T3 = 0.0; else T3 = -pParam->B4SOIabjtii * pow(T1,T2); if (T3> EXPL_THRESHOLD) T4 = MAX_EXPL; else if (T3 < -EXPL_THRESHOLD) T4 = MIN_EXPL; else T4 = exp(T3); if (T1==0.0) {if(T3> EXPL_THRESHOLD) { dT4_dVd = 0.0; dT4_dVb = 0.0; } else if (T3 < -EXPL_THRESHOLD) { dT4_dVd = 0.0; dT4_dVb = 0.0; } else { dT4_dVd = - T4 * pParam->B4SOIabjtii* T2 ; dT4_dVb = T4 * pParam->B4SOIabjtii* T2 ; } } else { if(T3> EXPL_THRESHOLD) { dT4_dVd = 0.0; dT4_dVb = 0.0; } else if (T3 < -EXPL_THRESHOLD) { dT4_dVd = 0.0; dT4_dVb = 0.0; } else {T5 = T2-1.0; if (T1<=0.0) { dT4_dVd = 0.0; dT4_dVb = 0.0; } else { dT4_dVd = - T4 * pParam->B4SOIabjtii* T2 * pow(T1,T5); dT4_dVb = T4 * pParam->B4SOIabjtii* T2 * pow(T1,T5); } } } Iiibjt = T0 * Ic * T1 * T4; if (selfheat) {T5= T2-1.0; dVbci_dT = pParam->B4SOIvbci * model->B4SOItvbci *model->B4SOItnom; if(T1<=0.0) dT4_dT = 0.0; else dT4_dT = -T4 * pParam->B4SOIabjtii* T2 * pow(T1,T5)*dVbci_dT; dIiibjt_dT = T0 * Ic * T4 * dVbci_dT + T0 *Ic *T1 * dT4_dT + T0 * GcT *T1 * T4; /* Samuel Mertens */ } else { dVbci_dT = 0.0; dT4_dT =0.0; dIiibjt_dT = 0.0; } /* Xue fix 10/29/2009 */ dIiibjt_dVd = T0 * Ic *T4 + T0 *Ic *T1*dT4_dVd + T0 * dIc_dVd * T1 * T4; dIiibjt_dVb = -T0 * Ic *T4 + T0*Ic*T1*dT4_dVb + T0 * dIc_dVb * T1 * T4; /*Total Iii*/ T0 = Ids; here->B4SOIiii = Iii = Idsmosfet + Iiibjt; Giig = Ratio * Gm + T0 * dRatio_dVg; Giib = Ratio * Gmb + T0 * dRatio_dVb + dIiibjt_dVb; Giid = Ratio * Gds + T0 * dRatio_dVd + dIiibjt_dVd; Giie = Ratio * Gme + T0 * dRatio_dVe; if (selfheat) GiiT = Ratio * GmT + T0 * dRatio_dT + dIiibjt_dT ; else GiiT = 0.0; } /* Current through body resistor */ /* Current going out is +ve */ if ((here->B4SOIbodyMod == 0) || (here->B4SOIbodyMod == 2)) { Ibp = Gbpbs = Gbpps = 0.0; } else { /* here->B4SOIbodyMod == 1 */ if (pParam->B4SOIrbody < 1e-3) /* 3.2 bug fix */ { if (here->B4SOIrbodyext <= 1e-3) /* 3.2 bug fix */ T0 = 1.0 / 1e-3; /* 3.2 bug fix */ else T0 = 1.0 / here->B4SOIrbodyext; Ibp = Vbp * T0; Gbpbs = T0 * dVbp_dVb; Gbpps = -T0 * dVbp_dVb; } else { Gbpbs = 1.0 / (pParam->B4SOIrbody + here->B4SOIrbodyext); Ibp = Vbp * Gbpbs; Gbpps = - Gbpbs; } } here->B4SOIibp = Ibp; here->B4SOIgbpbs = Gbpbs; here->B4SOIgbpps = Gbpps; here->B4SOIgbpT = 0.0; here->B4SOIcbodcon = (Ibp - (Gbpbs * Vbs + Gbpps * Vps)); } else /* v3.1 soiMod=2: ideal FD */ { Giig = Giib = Giid = Giie = GiiT = 0.0; here->B4SOIiii = Iii = 0.0; here->B4SOIibp = Ibp = 0.0; here->B4SOIgbpbs = 0.0; here->B4SOIgbpps = here->B4SOIgbpT = here->B4SOIcbodcon = 0.0; Gbpbs = Gbpps = 0.0; } /* v3.1 */ /* Current going out of drainprime node into the drain of device */ /* "node" means the SPICE circuit node */ here->B4SOIcdrain = Ids + Ic; here->B4SOIcd = Ids + Ic - Ibd + Iii + Igidl; here->B4SOIcb = Ibs + Ibd + Ibp / here->B4SOInf - Iii - Igidl - Igisl - Igb; /* v4.2 bug fix # 27*/ here->B4SOIgds = Gds + Gcd; here->B4SOIgm = Gm; here->B4SOIgmbs = Gmb + Gcb; /* v3.0 */ here->B4SOIgme = Gme; /* v3.1 for RF */ /* Calculate Rg */ if (here->B4SOIrgateMod >1) { T9 = pParam->B4SOIxrcrg2 * model->B4SOIvtm; T0 = T9 *beta; dT0_dVd = (dbeta_dVd + dbeta_dVg * dVgsteff_dVd) * T9; dT0_dVb = (dbeta_dVb + dbeta_dVg * dVgsteff_dVb) * T9; dT0_dVg = dbeta_dVg * T9; T1 = 1 + gche * Rds; T2 = 1 / T1; here->B4SOIgcrg = pParam->B4SOIxrcrg1 * (T0 + here->B4SOIidovVds); dIdlovVdseff_dVg = (T2 * dgche_dVg - IdlovVdseff * gche * dRds_dVg) / T1; dIdlovVdseff_dVd = T2 * dgche_dVd / T1; dIdlovVdseff_dVb = (T2 * dgche_dVb - IdlovVdseff * gche * dRds_dVb) / T1; T9 = diffVds / Va; T3 = 1.0 + T9; T4 = T3 * dIdlovVdseff_dVg - IdlovVdseff * (dVdseff_dVg + T9 * dVa_dVg) / Va; T5 = T3 * dIdlovVdseff_dVd + IdlovVdseff * (1.0 - dVdseff_dVd - T9 * dVa_dVd) / Va; T6 = T3 * dIdlovVdseff_dVb - IdlovVdseff * (dVdseff_dVb + T9 * dVa_dVb) / Va; tmp1 = (T4 * dVgsteff_dVd + T6 * dVbseff_dVd + T5) / here->B4SOInseg; tmp2 = (T4 * dVgsteff_dVg + T6 * dVbseff_dVg) / here->B4SOInseg; tmp3 = (T4 * dVgsteff_dVb + T6 * dVbseff_dVb) / here->B4SOInseg; here->B4SOIgcrgd = pParam->B4SOIxrcrg1 * (dT0_dVd +tmp1); here->B4SOIgcrgg = pParam->B4SOIxrcrg1 * (dT0_dVg * dVgsteff_dVg + tmp2); here->B4SOIgcrgb = pParam->B4SOIxrcrg1 * (dT0_dVb * dVbseff_dVb + tmp3); if (here->B4SOInf != 1.0) { here->B4SOIgcrg *= here->B4SOInf; here->B4SOIgcrgg *= here->B4SOInf; here->B4SOIgcrgd *= here->B4SOInf; here->B4SOIgcrgb *= here->B4SOInf; } if (here->B4SOIrgateMod == 2) { T10 = here->B4SOIgrgeltd * here->B4SOIgrgeltd; T11 = here->B4SOIgrgeltd + here->B4SOIgcrg; here->B4SOIgcrg = here->B4SOIgrgeltd * here->B4SOIgcrg / T11; T12 = T10 / T11 /T11; here->B4SOIgcrgg *= T12; here->B4SOIgcrgd *= T12; here->B4SOIgcrgb *= T12; } here->B4SOIgcrgs = -(here->B4SOIgcrgg + here->B4SOIgcrgd + here->B4SOIgcrgb); } /* v3.1 added Rg for RF end */ /* v4.0 Calculate bias-dependent external S/D resistance */ Rs = Rd = 0.0; /* flexilint */ if (model->B4SOIrdsMod) { /* Rs(V) */ T0 = vgs - pParam->B4SOIvfbsd; T1 = sqrt(T0 * T0 + 1.0e-4); vgs_eff = 0.5 * (T0 + T1); dvgs_eff_dvg = vgs_eff / T1; T0 = 1.0 + pParam->B4SOIprwg * vgs_eff; dT0_dVg = -pParam->B4SOIprwg / T0 / T0 * dvgs_eff_dvg; T1 = -pParam->B4SOIprwb * vbs; dT1_dVb = -pParam->B4SOIprwb; T2 = 1.0 / T0 + T1; T3 = T2 + sqrt(T2 * T2 + 0.01); dT3_dVg = T3 / (T3 - T2); dT3_dVb = dT3_dVg * dT1_dVb; dT3_dVg *= dT0_dVg; T4 = rs0 * 0.5; Rs = rswmin + T3 * T4; dRs_dVg = T4 * dT3_dVg; dRs_dVb = T4 * dT3_dVb; T0 = 1.0 + here->B4SOIsourceConductance * Rs; here->B4SOIgstot = here->B4SOIsourceConductance / T0; T0 = -here->B4SOIgstot * here->B4SOIgstot; dgstot_dvd = 0.0; /* place holder */ dgstot_dve = 0.0; /* place holder */ dgstot_dvg = T0 * dRs_dVg; dgstot_dvb = T0 * dRs_dVb; dgstot_dvs = -(dgstot_dvg + dgstot_dvb + dgstot_dvd + dgstot_dve); if (selfheat) { dRs_dT = drswmin_dT + T3 * 0.5 * drs0_dT; dgstot_dT = T0 * dRs_dT; } else dRs_dT = dgstot_dT = 0.0; /* Rd(V) */ T0 = vgd - pParam->B4SOIvfbsd; T1 = sqrt(T0 * T0 + 1.0e-4); vgd_eff = 0.5 * (T0 + T1); dvgd_eff_dvg = vgd_eff / T1; T0 = 1.0 + pParam->B4SOIprwg * vgd_eff; dT0_dVg = -pParam->B4SOIprwg / T0 / T0 * dvgd_eff_dvg; T1 = -pParam->B4SOIprwb * vbd; dT1_dVb = -pParam->B4SOIprwb; T2 = 1.0 / T0 + T1; T3 = T2 + sqrt(T2 * T2 + 0.01); dT3_dVg = T3 / (T3 - T2); dT3_dVb = dT3_dVg * dT1_dVb; dT3_dVg *= dT0_dVg; /*T4 = pParam->B4SOIrd0 * 0.5;*/ /* v4.2 bugfix # 37 */ /*Rd = pParam->B4SOIrdwmin + T3 * T4;*/ /* v4.2 bugfix # 37 */ T4 = rd0 * 0.5; Rd = rdwmin + T3 * T4; dRd_dVg = T4 * dT3_dVg; dRd_dVb = T4 * dT3_dVb; T0 = 1.0 + here->B4SOIdrainConductance * Rd; here->B4SOIgdtot = here->B4SOIdrainConductance / T0; T0 = -here->B4SOIgdtot * here->B4SOIgdtot; dgdtot_dvs = 0.0; dgdtot_dve = 0.0; dgdtot_dvg = T0 * dRd_dVg; dgdtot_dvb = T0 * dRd_dVb; dgdtot_dvd = -(dgdtot_dvg + dgdtot_dvb + dgdtot_dvs + dgdtot_dve); if (selfheat) { dRd_dT = drdwmin_dT + T3 * 0.5 * drd0_dT; dgdtot_dT = T0 * dRd_dT; } else dRd_dT = dgdtot_dT = 0.0; here->B4SOIgstotd = vses * dgstot_dvd; here->B4SOIgstotg = vses * dgstot_dvg; here->B4SOIgstots = vses * dgstot_dvs; here->B4SOIgstotb = vses * dgstot_dvb; T2 = vdes - vds; here->B4SOIgdtotd = T2 * dgdtot_dvd; here->B4SOIgdtotg = T2 * dgdtot_dvg; here->B4SOIgdtots = T2 * dgdtot_dvs; here->B4SOIgdtotb = T2 * dgdtot_dvb; } else { here->B4SOIgstot = here->B4SOIgstotd = here->B4SOIgstotg = here->B4SOIgstots = here->B4SOIgstotb = 0.0; here->B4SOIgdtot = here->B4SOIgdtotd = here->B4SOIgdtotg = here->B4SOIgdtots = here->B4SOIgdtotb = 0.0; } if (selfheat) here->B4SOIgmT = GmT + GcT; else here->B4SOIgmT = 0.0; /* note that sign is switched because power flows out of device into the temperature node. Currently omit self-heating due to bipolar current because it can cause convergence problem*/ here->B4SOIgtempg = -model->B4SOItype*Gm * Vds; here->B4SOIgtempb = -model->B4SOItype*Gmb * Vds; /* v3.0 */ here->B4SOIgtempe = -model->B4SOItype*Gme * Vds; here->B4SOIgtempT = -GmT * Vds; here->B4SOIgtempd = -model->B4SOItype* (Gds * Vds + Ids); here->B4SOIcth = - Ids * Vds - model->B4SOItype * (here->B4SOIgtempg * Vgs + here->B4SOIgtempb * Vbs + here->B4SOIgtempe * Ves + here->B4SOIgtempd * Vds) - here->B4SOIgtempT * delTemp; /* v3.0 */ /* Body current which flows into drainprime node from the drain of device */ here->B4SOIgjdb = Gjdb - Giib -Ggidlb - Ggislb; /* v4.0 */ here->B4SOIgjdd = Gjdd - (Giid + Ggidld); here->B4SOIgjdg = - (Giig + Ggidlg + Ggislg); here->B4SOIgjde = - Giie; if (selfheat) here->B4SOIgjdT = GjdT - GiiT; else here->B4SOIgjdT = 0.0; here->B4SOIcjd = Ibd - Iii - Igidl - (here->B4SOIgjdb * Vbs + here->B4SOIgjdd * Vds + here->B4SOIgjdg * Vgs + here->B4SOIgjde * Ves + here->B4SOIgjdT * delTemp); /* v3.0 */ if (!here->B4SOIrbodyMod) { Giigidl_b = Giigidl_d = Giigidl_g = Giigidl_e = Giigidl_T = Iii_Igidl = 0.0; } else { here->B4SOIgiigidlb = Giib + Ggidlb + Ggislb; here->B4SOIgiigidld = Giid + Ggidld; Giigidl_b = - Giib -Ggidlb - Ggislb; Giigidl_d = - Giid -Ggidld; Giigidl_g = - Giig -Ggidlg - Ggislg; Giigidl_e = - Giie; if (selfheat) Giigidl_T = -GiiT; else GiiT = Giigidl_T = 0.0; /*Idbdp = Ibd - ( Gjdb * vbs_jct + Gjdd * Vds + GjdT * delTemp); v4.2 bugfix */ Idbdp = Ibd - ( Gjdb * vbd_jct + Gjdd * Vds + GjdT * delTemp); /* Iii_Igidl = - Iii - Igidl + Giigidl_b * Vbs + Giigidl_d * Vds + Giigidl_g * Vgs + Giigidl_e * Ves + Giigidl_T * delTemp ; */ } /* Body current which flows into sourceprime node from the source of device */ here->B4SOIgjsg = 0.0; here->B4SOIgjsd = Gjsd; here->B4SOIgjsb = Gjsb; /* v4.0 */ if (selfheat) here->B4SOIgjsT = GjsT; else here->B4SOIgjsT = 0.0; here->B4SOIcjs = Ibs - Igisl -( here->B4SOIgjsb * Vbs + here->B4SOIgjsd * Vds + here->B4SOIgjsg * Vgs + here->B4SOIgjsT * delTemp); if (here->B4SOIrbodyMod) { Isbsp = Ibs - ( Gjsb * vbs_jct + Gjsd * Vds + GjsT * delTemp ); } /* Current flowing into body node */ here->B4SOIgbbs = Giib - Gjsb - Gjdb - Gbpbs / here->B4SOInf; /* v4.2 bug fix #27 */ here->B4SOIgbgs = Giig + Ggidlg + Ggislg; here->B4SOIgbds = Giid + Ggidld + Ggisls - Gjsd - Gjdd; here->B4SOIgbes = Giie; here->B4SOIgbps = - Gbpps / here->B4SOInf; /* v4.2 bug fix #27 */ if (selfheat) here->B4SOIgbT = GiiT - GjsT - GjdT; else here->B4SOIgbT = 0.0; if (!here->B4SOIrbodyMod) { here->B4SOIcbody = Iii + Igidl + Igisl - Ibs - Ibd - Ibp / here->B4SOInf + Igb /* v4.2 bug fix #27 */ - ( (here->B4SOIgbbs + dIgb_dVb) * Vbs + (here->B4SOIgbgs + dIgb_dVg) * Vgs + (here->B4SOIgbds + dIgb_dVd) * Vds + here->B4SOIgbps * Vps + (here->B4SOIgbes + dIgb_dVe) * Ves + (here->B4SOIgbT + dIgb_dT) * delTemp); } if (here->B4SOIrbodyMod) { here->B4SOIgbgiigbpb = Giib - Gbpbs / here->B4SOInf; /* v4.3 bug fix */ here->B4SOIcbody = Iii + Igidl + Igisl - Ibp / here->B4SOInf + Igb /* v4.2 bug fix #27 */ - ( (Giib - Gbpbs / here->B4SOInf + dIgb_dVb) * Vbs /* v4.2 bug fix #27 */ + (here->B4SOIgbgs + dIgb_dVg) * Vgs + (Giid + Ggidld + dIgb_dVd) * Vds + here->B4SOIgbps * Vps + (here->B4SOIgbes + dIgb_dVe) * Ves + (GiiT + dIgb_dT) * delTemp ); } here->B4SOIcgate = Igb - (dIgb_dVb * Vbs + dIgb_dVe * Ves + dIgb_dVg * Vgs + dIgb_dVd * Vds + dIgb_dT * delTemp); /* v3.0 */ /* Calculate Qinv for Noise analysis */ T1 = Vgsteff * (1.0 - 0.5 * Abulk * Vdseff / Vgst2Vtm); here->B4SOIqinv = -model->B4SOIcox * pParam->B4SOIweff * here->B4SOInf * Leff * T1; /* v4.0 */ if (here->B4SOInf != 1) { here->B4SOIcdrain *= here->B4SOInf; here->B4SOIcd *= here->B4SOInf; here->B4SOIcb *= here->B4SOInf; /* Fix NF problem with tnoimod=1 - LFW */ here->B4SOIidovVds *= here->B4SOInf; here->B4SOIgds *= here->B4SOInf; here->B4SOIgm *= here->B4SOInf; here->B4SOIgmbs *= here->B4SOInf; here->B4SOIgme *= here->B4SOInf; /* Xue fix 10/29/2009 */ /* here->B4SOIgmT *= here->B4SOInf; *added in line 5424 */ here->B4SOIcbody *= here->B4SOInf; here->B4SOIcgate *= here->B4SOInf; here->B4SOIIgcs *= here->B4SOInf; here->B4SOIgIgcsg *= here->B4SOInf; here->B4SOIgIgcsd *= here->B4SOInf; here->B4SOIgIgcsb *= here->B4SOInf; here->B4SOIgIgcse *= here->B4SOInf; /* LFW_FD new line */ here->B4SOIIgcd *= here->B4SOInf; here->B4SOIgIgcdg *= here->B4SOInf; here->B4SOIgIgcdd *= here->B4SOInf; here->B4SOIgIgcdb *= here->B4SOInf; here->B4SOIgIgcde *= here->B4SOInf; /* LFW_FD new line */ here->B4SOIIgs *= here->B4SOInf; here->B4SOIgIgsg *= here->B4SOInf; here->B4SOIgIgss *= here->B4SOInf; here->B4SOIIgd *= here->B4SOInf; here->B4SOIgIgdg *= here->B4SOInf; here->B4SOIgIgdd *= here->B4SOInf; here->B4SOIig *= here->B4SOInf; here->B4SOIgigg *= here->B4SOInf; here->B4SOIgigd *= here->B4SOInf; here->B4SOIgigb *= here->B4SOInf; here->B4SOIgige *= here->B4SOInf; here->B4SOIgigT *= here->B4SOInf; here->B4SOIcjs *= here->B4SOInf; here->B4SOIcjd *= here->B4SOInf; here->B4SOIibs *= here->B4SOInf; here->B4SOIibd *= here->B4SOInf; Idbdp *= here->B4SOInf; /*v4.2 bug fix Idbdp needs update as Ibd for nf!=1*/ Isbsp *= here->B4SOInf; /*v4.2 bug fix Isbsp needs update as Ibd for nf!=1*/ here->B4SOIgbbs *= here->B4SOInf; here->B4SOIgbgs *= here->B4SOInf; here->B4SOIgbds *= here->B4SOInf; here->B4SOIgbes *= here->B4SOInf; here->B4SOIgbps *= here->B4SOInf; here->B4SOIgbT *= here->B4SOInf; here->B4SOIigidl *= here->B4SOInf; here->B4SOIigisl *= here->B4SOInf; /* bugfix_snps NF*/ here->B4SOIgjdb *= here->B4SOInf; here->B4SOIgjdd *= here->B4SOInf; here->B4SOIgjdg *= here->B4SOInf; here->B4SOIgjde *= here->B4SOInf; here->B4SOIgjdT *= here->B4SOInf; here->B4SOIgjsb *= here->B4SOInf; here->B4SOIgjsd *= here->B4SOInf; here->B4SOIgjsg *= here->B4SOInf; here->B4SOIgjsT *= here->B4SOInf; here->B4SOIcth *= here->B4SOInf; here->B4SOIgmT *= here->B4SOInf; here->B4SOIgtempg *= here->B4SOInf; here->B4SOIgtempb *= here->B4SOInf; here->B4SOIgtempe *= here->B4SOInf; here->B4SOIgtempT *= here->B4SOInf; here->B4SOIgtempd *= here->B4SOInf; here->B4SOIiii *= here->B4SOInf; /* bugfix NF ends */ } here->B4SOIgigs = -(here->B4SOIgigg + here->B4SOIgigd + here->B4SOIgigb + here->B4SOIgige); /* LFW_FD fix 2 derivatives */ here->B4SOIgIgcss = -(here->B4SOIgIgcsg + here->B4SOIgIgcsd + here->B4SOIgIgcsb + here->B4SOIgIgcse); here->B4SOIgIgcds = -(here->B4SOIgIgcdg + here->B4SOIgIgcdd + here->B4SOIgIgcdb + here->B4SOIgIgcde); /* Begin CV (charge) model */ /* LFW_FD 9 new lines - flexilint */ Cbb = Cbd = Cbg = 0.0; Qsub0 = Qac0 = 0.0; qjs = qjd = 0.0; CboxWL = 0.0; Qe1 = dQe1_dVb = dQe1_dVe = dQe1_dT = 0; Vfbeff2=dVfbeff2_dVd=dVfbeff2_dVrg=dVfbeff2_dVg=dVfbeff2_dVb=dVfbeff2_dVe=dVfbeff2_dT=0.0; VdseffCV2 = dVdseffCV2_dVg = dVdseffCV2_dVd = dVdseffCV2_dVb = dVdseffCV2_dVe = 0.0; Vgsteff2 = 0.0; dVgsteff2_dVd=dVgsteff2_dVg=dVgsteff2_dVb=dVgsteff2_dVe=dVgsteff2_dT=0.0; if ((model->B4SOIxpart < 0) || (!ChargeComputationNeeded)) { qgate = qdrn = qsrc = qbody = qsub = 0.0; /* v2.2.3 bug fix */ Qsub0=Qac0=Cbb=Cbg=Cbd=0; /* Bugfix #19 Jul09*/ here->B4SOIcggb = here->B4SOIcgsb = here->B4SOIcgdb = 0.0; here->B4SOIcdgb = here->B4SOIcdsb = here->B4SOIcddb = 0.0; here->B4SOIcbgb = here->B4SOIcbsb = here->B4SOIcbdb = 0.0; goto finished; } else { qgate = qdrn = qsrc = qbody = qsub = 0.0; /* flexilint */ CoxWL = model->B4SOIcox * (pParam->B4SOIweffCV / here->B4SOInseg * here->B4SOInf /* v4.0 */ * pParam->B4SOIleffCV + here->B4SOIagbcp); CoxWLb = model->B4SOIfbody * model->B4SOIcox * (pParam->B4SOIweffCV / here->B4SOInseg * here->B4SOInf /* v4.0 */ * pParam->B4SOIleffCVb + here->B4SOIagbcp); /* v4.1 for improved BT charge model */ CoxWL2 = model->B4SOIcox * here->B4SOIagbcp2; CoxWLb2 = model->B4SOIfbody * model->B4SOIcox * here->B4SOIagbcp2; /* end v4.1 */ /* v3.2 Seperate VgsteffCV with noff */ noff = n * pParam->B4SOInoff; dnoff_dVg = pParam->B4SOInoff * dn_dVg; /* LFW_FD new line */ dnoff_dVd = pParam->B4SOInoff * dn_dVd; dnoff_dVb = pParam->B4SOInoff * dn_dVb; dnoff_dVe = pParam->B4SOInoff * dn_dVe; /* LFW_FD new line */ dnoff_dT = pParam->B4SOInoff * dn_dT; /* new line Wagner */ if (model->B4SOIvgstcvMod == 0) { if ((VgstNVt > -EXPL_THRESHOLD) && (VgstNVt < EXPL_THRESHOLD)) { TL1 = ExpVgst; /* LFW_FD new line */ ExpVgst *= ExpVgst; ExpVgst *= exp( -(pParam->B4SOIdelvt / (noff * Vtm))); /* LFW_FD 4 new derivatives */ dExpVgst_dVg = 2.0 * TL1 * dExpVgst_dVg * exp( -pParam->B4SOIdelvt / (noff * Vtm)) + ExpVgst * pParam->B4SOIdelvt * dnoff_dVg / (noff * noff * Vtm); dExpVgst_dVd = 2.0 * TL1 * dExpVgst_dVd * exp( -pParam->B4SOIdelvt / (noff * Vtm)) + ExpVgst * pParam->B4SOIdelvt * dnoff_dVd / (noff * noff * Vtm); dExpVgst_dVb = 2.0 * TL1 * dExpVgst_dVb * exp( -pParam->B4SOIdelvt / (noff * Vtm)) + ExpVgst * pParam->B4SOIdelvt * dnoff_dVb / (noff * noff * Vtm); dExpVgst_dVe = 2.0 * TL1 * dExpVgst_dVe * exp( -pParam->B4SOIdelvt / (noff * Vtm)) + ExpVgst * pParam->B4SOIdelvt * dnoff_dVe / (noff * noff * Vtm); Vgsteff = noff * Vtm * log(1.0 + ExpVgst); /* LFW_FD 4 fix derivatives */ dVgsteff_dVg = Vgsteff * dnoff_dVg / noff + noff * Vtm * dExpVgst_dVg / (1.0 + ExpVgst); dVgsteff_dVd = Vgsteff * dnoff_dVd / noff + noff * Vtm * dExpVgst_dVd / (1.0 + ExpVgst); dVgsteff_dVb = Vgsteff * dnoff_dVb / noff + noff * Vtm * dExpVgst_dVb / (1.0 + ExpVgst); dVgsteff_dVe = Vgsteff * dnoff_dVe / noff + noff * Vtm * dExpVgst_dVe / (1.0 + ExpVgst); T0 = ExpVgst / (1.0 + ExpVgst); T2 = 2.0 * pParam->B4SOImstar * pParam->B4SOInoff; /* LFW_FD new line */ T1 = -T0 * (T2*dVth_dVb + (T2*Vgst-pParam->B4SOIdelvt) / noff * dnoff_dVb) + Vgsteff / noff * dnoff_dVb; /* LFW_FD fix line */ /* LFW_FD fix _dT derivatives */ if (selfheat) { dExpVgst_dT = 2.0 * TL1 * dExpVgst_dT * exp( -pParam->B4SOIdelvt / (noff * Vtm)) + ExpVgst * pParam->B4SOIdelvt * (dVtm_dT / Vtm + dnoff_dT / noff) / (noff * Vtm); dVgsteff_dT = Vgsteff * (dnoff_dT / noff + dVtm_dT / Vtm) + noff * Vtm * dExpVgst_dT / (1.0 + ExpVgst); } else dVgsteff_dT = 0.0; /* v4.1 */ if (here->B4SOIagbcp2 > 0) { /* ExpVgst2 = ExpVgst * exp(-1.12 / noff / Vtm); */ ExpVgst2 = ExpVgst * exp(-eggbcp2 / noff / Vtm); /* bugfix 4.3.1 -Tanvir */ /* LFW_FD add 4 derivatives */ dExpVgst2_dVg = dExpVgst_dVg * exp(-eggbcp2 / noff / Vtm) + ExpVgst2 * eggbcp2 * dnoff_dVg / (noff * noff * Vtm); dExpVgst2_dVd = dExpVgst_dVd * exp(-eggbcp2 / noff / Vtm) + ExpVgst2 * eggbcp2 * dnoff_dVd / (noff * noff * Vtm); dExpVgst2_dVb = dExpVgst_dVb * exp(-eggbcp2 / noff / Vtm) + ExpVgst2 * eggbcp2 * dnoff_dVb / (noff * noff * Vtm); dExpVgst2_dVe = dExpVgst_dVe * exp(-eggbcp2 / noff / Vtm) + ExpVgst2 * eggbcp2 * dnoff_dVe / (noff * noff * Vtm); Vgsteff2 = noff * Vtm * log(1.0 + ExpVgst2); /* LFW_FD fix 4 derivatives */ dVgsteff2_dVg = Vgsteff2 * dnoff_dVg / noff + noff * Vtm * dExpVgst2_dVg / (1.0 + ExpVgst2); dVgsteff2_dVd = Vgsteff2 * dnoff_dVd / noff + noff * Vtm * dExpVgst2_dVd / (1.0 + ExpVgst2); dVgsteff2_dVb = Vgsteff2 * dnoff_dVb / noff + noff * Vtm * dExpVgst2_dVb / (1.0 + ExpVgst2); dVgsteff2_dVe = Vgsteff2 * dnoff_dVe / noff + noff * Vtm * dExpVgst2_dVe / (1.0 + ExpVgst2); T02 = ExpVgst2 / (1.0 + ExpVgst2); /* T12 = -T02 * (dVth_dVb + (Vgst-1.12-pParam->B4SOIdelvt) / noff * dnoff_dVb) + Vgsteff2 / noff * dnoff_dVb; */ T12 = -T02 * (dVth_dVb + (Vgst-eggbcp2-pParam->B4SOIdelvt) / noff * dnoff_dVb) + Vgsteff2 / noff * dnoff_dVb; /* bugfix 4.3.1 -Tanvir */ if (selfheat) /*fix below expression Wagner */ /*dVgsteff2_dT = -T02 * (dVth_dT+dVth_dVb*dVbseff_dT */ /* dVgsteff2_dT = -T02 * (-dVgst_dT + (Vgst - 1.12 - pParam->B4SOIdelvt) / Temp) + Vgsteff2 / Temp; */ /* bugfix 4.3.1 -Tanvir */ dVgsteff2_dT = -T02 * (-dVgst_dT + (Vgst - eggbcp2 - pParam->B4SOIdelvt) / Temp) + Vgsteff2 / Temp; else dVgsteff2_dT = 0.0; } } } else if (model->B4SOIvgstcvMod == 1) { ExpVgst = exp(VgstNVt/(pParam->B4SOImstar * pParam->B4SOInoff)); ExpVgst *= exp( -(pParam->B4SOIdelvt / (noff * Vtm))); /* LFW_FD add 4 derivatives */ dExpVgst_dVg = ExpVgst * (dVgstNVt_dVg/(pParam->B4SOImstar * pParam->B4SOInoff) + pParam->B4SOIdelvt * dnoff_dVg / (noff * noff * Vtm)); dExpVgst_dVd = ExpVgst * (dVgstNVt_dVd/(pParam->B4SOImstar * pParam->B4SOInoff) + pParam->B4SOIdelvt * dnoff_dVd / (noff * noff * Vtm)); dExpVgst_dVb = ExpVgst * (dVgstNVt_dVb/(pParam->B4SOImstar * pParam->B4SOInoff) + pParam->B4SOIdelvt * dnoff_dVb / (noff * noff * Vtm)); dExpVgst_dVe = ExpVgst * (dVgstNVt_dVe/(pParam->B4SOImstar * pParam->B4SOInoff) + pParam->B4SOIdelvt * dnoff_dVe / (noff * noff * Vtm)); Vgsteff = noff * Vtm * log(1.0 + ExpVgst); /* LFW_FD fix 4 derivatives */ dVgsteff_dVg = Vgsteff * dnoff_dVg / noff + noff * Vtm * dExpVgst_dVg / (1.0 + ExpVgst); dVgsteff_dVd = Vgsteff * dnoff_dVd / noff + noff * Vtm * dExpVgst_dVd / (1.0 + ExpVgst); dVgsteff_dVb = Vgsteff * dnoff_dVb / noff + noff * Vtm * dExpVgst_dVb / (1.0 + ExpVgst); dVgsteff_dVe = Vgsteff * dnoff_dVe / noff + noff * Vtm * dExpVgst_dVe / (1.0 + ExpVgst); T0 = ExpVgst / (1.0 + ExpVgst); T1 = -T0 * (dVth_dVb + (Vgst-pParam->B4SOIdelvt) / noff * dnoff_dVb) + Vgsteff / noff * dnoff_dVb; if (selfheat) /*fix below expression Wagner */ /*dVgsteff_dT = -T0 * (dVth_dT+dVth_dVb*dVbseff_dT */ dVgsteff_dT = -T0 * (-dVgst_dT + (Vgst - pParam->B4SOIdelvt) / Temp) + Vgsteff / Temp; else dVgsteff_dT = 0.0; /* v4.1 */ if (here->B4SOIagbcp2 > 0) { /* ExpVgst2 = ExpVgst * exp(-1.12 / noff / Vtm); */ ExpVgst2 = ExpVgst * exp(-eggbcp2 / noff / Vtm); /* bugfix 4.3.1 -Tanvir */ /* LFW_FD add 4 derivatives */ dExpVgst2_dVg = dExpVgst_dVg * exp(-eggbcp2 / noff / Vtm) + ExpVgst2 * eggbcp2 * dnoff_dVg / (noff * noff * Vtm); dExpVgst2_dVd = dExpVgst_dVd * exp(-eggbcp2 / noff / Vtm) + ExpVgst2 * eggbcp2 * dnoff_dVd / (noff * noff * Vtm); dExpVgst2_dVb = dExpVgst_dVb * exp(-eggbcp2 / noff / Vtm) + ExpVgst2 * eggbcp2 * dnoff_dVb / (noff * noff * Vtm); dExpVgst2_dVe = dExpVgst_dVe * exp(-eggbcp2 / noff / Vtm) + ExpVgst2 * eggbcp2 * dnoff_dVe / (noff * noff * Vtm); Vgsteff2 = noff * Vtm * log(1.0 + ExpVgst2); /* LFW_FD fix 4 derivatives */ dVgsteff2_dVg = Vgsteff2 * dnoff_dVg / noff + noff * Vtm * dExpVgst2_dVg / (1.0 + ExpVgst2); dVgsteff2_dVd = Vgsteff2 * dnoff_dVd / noff + noff * Vtm * dExpVgst2_dVd / (1.0 + ExpVgst2); dVgsteff2_dVb = Vgsteff2 * dnoff_dVb / noff + noff * Vtm * dExpVgst2_dVb / (1.0 + ExpVgst2); dVgsteff2_dVe = Vgsteff2 * dnoff_dVe / noff + noff * Vtm * dExpVgst2_dVe / (1.0 + ExpVgst2); T02 = ExpVgst2 / (1.0 + ExpVgst2); /* T12 = -T02 * (dVth_dVb + (Vgst-1.12-pParam->B4SOIdelvt) / noff * dnoff_dVb) + Vgsteff2 / noff * dnoff_dVb; */ T12 = -T02 * (dVth_dVb + (Vgst-eggbcp2-pParam->B4SOIdelvt) / noff * dnoff_dVb) + Vgsteff2 / noff * dnoff_dVb; /* bugfix 4.3.1 -Tanvir */ dVgsteff2_dVb = T12 * dVbseff_dVb; dVgsteff2_dVe = T12 * dVbseff_dVe; if (selfheat) /*fix below expression Wagner */ /*dVgsteff2_dT = -T02 * (dVth_dT+dVth_dVb*dVbseff_dT */ /* dVgsteff2_dT = -T02 * (-dVgst_dT + (Vgst - 1.12 - pParam->B4SOIdelvt) / Temp) + Vgsteff2 / Temp; */ dVgsteff2_dT = -T02 * (-dVgst_dT + (Vgst - eggbcp2 - pParam->B4SOIdelvt) / Temp) + Vgsteff2 / Temp; /* bugfix 4.3.1 -Tanvir */ else dVgsteff2_dT = 0.0; } } else { T10 = noff * Vtm; VgstNVt = pParam->B4SOImstarcv * (Vgst - pParam->B4SOIdelvt) / T10; /* LFW_FD add 4 derivatives */ dVgstNVt_dVg = (pParam->B4SOImstarcv * dVgst_dVg - VgstNVt * dnoff_dVg * Vtm) / T10; dVgstNVt_dVd = (pParam->B4SOImstarcv * dVgst_dVd - VgstNVt * dnoff_dVd * Vtm) / T10; dVgstNVt_dVb = (pParam->B4SOImstarcv * dVgst_dVb - VgstNVt * dnoff_dVb * Vtm) / T10; dVgstNVt_dVe = (pParam->B4SOImstarcv * dVgst_dVe - VgstNVt * dnoff_dVe * Vtm) / T10; ExpArg = (pParam->B4SOIvoffcv - (1- pParam->B4SOImstarcv) * (Vgst - pParam->B4SOIdelvt))/ T10; /* LFW_FD add 4 derivatives */ dExpArg_dVg = (-(1- pParam->B4SOImstarcv) * dVgst_dVg - ExpArg * dnoff_dVg * Vtm) / T10; dExpArg_dVd = (-(1- pParam->B4SOImstarcv) * dVgst_dVd - ExpArg * dnoff_dVd * Vtm) / T10; dExpArg_dVb = (-(1- pParam->B4SOImstarcv) * dVgst_dVb - ExpArg * dnoff_dVb * Vtm) / T10; dExpArg_dVe = (-(1- pParam->B4SOImstarcv) * dVgst_dVe - ExpArg * dnoff_dVe * Vtm) / T10; /* 11 lines new Wagner */ if (selfheat) { dT10_dT = noff * dVtm_dT + dnoff_dT * Vtm; /* fix below expression Wagner */ /*dVgstNVt_dT = -(pParam->B4SOImstarcv*dVth_dT + VgstNVt*dT10_dT)/T10; */ dVgstNVt_dT = -(-pParam->B4SOImstarcv*dVgst_dT + VgstNVt*dT10_dT)/T10; /* fix below expression Wagner */ dExpArg_dT = -(1- pParam->B4SOImstarcv)*dVgst_dT/T10 -ExpArg*dT10_dT/T10; } else { dT10_dT = 0.0; dVgstNVt_dT = 0.0; dExpArg_dT = 0.0; } /* MCJ: Very small Vgst */ if (VgstNVt > EXPL_THRESHOLD) { Vgsteff = Vgst - pParam->B4SOIdelvt; /* T0 is dVgsteff_dVbseff */ T0 = -dVth_dVb; /* LFW_FD fix 4 derivatives */ dVgsteff_dVg = dVgst_dVg; dVgsteff_dVd = dVgst_dVd; dVgsteff_dVb = dVgst_dVb; dVgsteff_dVe = dVgst_dVe; if (selfheat) /*fix below expression Wagner */ /*dVgsteff_dT = -dVth_dT + T0 * dVbseff_dT; */ dVgsteff_dT = dVgst_dT; else dVgsteff_dT = 0.0; } else if (ExpArg > EXPL_THRESHOLD) { T0 = (Vgst - pParam->B4SOIdelvt - pParam->B4SOIvoffcv) / (noff * Vtm); ExpVgst = exp(T0); /* LFW_FD add 4 derivatives */ dExpVgst_dVg = (dVgst_dVg - T0 * dnoff_dVg * Vtm) /(noff * Vtm); dExpVgst_dVd = (dVgst_dVd - T0 * dnoff_dVd * Vtm) /(noff * Vtm); dExpVgst_dVb = (dVgst_dVb - T0 * dnoff_dVb * Vtm) /(noff * Vtm); dExpVgst_dVe = (dVgst_dVe - T0 * dnoff_dVe * Vtm) /(noff * Vtm); /*Vgsteff = Vtm * pParam->B4SOIcdep0 / model->B4SOIcox * ExpVgst;*/ /*v4.2 bug fix*/ Vgsteff = Vtm * cdep0 / model->B4SOIcox * ExpVgst; /* v4.2 bug fix */ T3 = Vgsteff / (noff * Vtm) ; /* T1 is dVgsteff_dVbseff */ /* T1 = -T3 * (dVth_dVb + T0 * Vtm * dnoff_dVb); */ T1 = -T3 * ( T0 * Vtm * dnoff_dVb); /* LFW_FD fixed line */ /* LFW_FD fix 4 derivatives */ dVgsteff_dVg = Vtm * cdep0 / model->B4SOIcox * dExpVgst_dVg; dVgsteff_dVd = Vtm * cdep0 / model->B4SOIcox * dExpVgst_dVd; dVgsteff_dVb = Vtm * cdep0 / model->B4SOIcox * dExpVgst_dVb; dVgsteff_dVe = Vtm * cdep0 / model->B4SOIcox * dExpVgst_dVe; if (selfheat) /*fix below expression Wagner */ /*dVgsteff_dT = -T3 * (dVth_dT + T0 * dVtm_dT * noff) + Vgsteff / Temp+ T1 * dVbseff_dT;*/ dVgsteff_dT = -T3 * (-dVgst_dT + T0 * dVtm_dT * noff + Vtm * dnoff_dT) + Vgsteff / Temp; else dVgsteff_dT = 0.0; } else { ExpVgst = exp(VgstNVt); /* LFW_FD add 4 derivatives */ dExpVgst_dVg = ExpVgst * dVgstNVt_dVg; dExpVgst_dVd = ExpVgst * dVgstNVt_dVd; dExpVgst_dVb = ExpVgst * dVgstNVt_dVb; dExpVgst_dVe = ExpVgst * dVgstNVt_dVe; T1 = T10 * log(1.0 + ExpVgst); /* LFW_FD fix 4 derivatives */ dT1_dVg = T10 * dExpVgst_dVg / (1.0 + ExpVgst) + T1 * dnoff_dVg / noff; dT1_dVd = T10 * dExpVgst_dVd / (1.0 + ExpVgst) + T1 * dnoff_dVd / noff; dT1_dVb = T10 * dExpVgst_dVb / (1.0 + ExpVgst) + T1 * dnoff_dVb / noff; dT1_dVe = T10 * dExpVgst_dVe / (1.0 + ExpVgst) + T1 * dnoff_dVe / noff; /*fix below expression Wagner */ /*T3 = (1.0 / Temp); */ T3 = (1.0 / Temp + dnoff_dT / noff); if (selfheat) /*fix below expression Wagner */ /*dT1_dT = -dT1_dVg * (dVth_dT + (Vgst-pParam->B4SOIdelvt) * T3) + T1 * T3;*/ dT1_dT = dT10_dT * log(1.0 + ExpVgst) + T10 * ExpVgst / (1.0 + ExpVgst) * dVgstNVt_dT; else dT1_dT = 0.0; /* dT2_dVg = -model->B4SOIcox / (Vtm * pParam->B4SOIcdep0) */ /* * exp(ExpArg) * (1 - pParam->B4SOImstarcv); v4.2 bug fix */ dT2_dVg = -model->B4SOIcox / (Vtm * cdep0) * exp(ExpArg) * (1 - pParam->B4SOImstarcv); /* v4.2 bug fix */ T2 = pParam->B4SOImstarcv - T10 * dT2_dVg / (1.0 - pParam->B4SOImstarcv); /* LFW_FD 5 new lines */ TL1 = dT2_dVg; dTL1_dVg = TL1 * dExpArg_dVg; dTL1_dVd = TL1 * dExpArg_dVd; dTL1_dVb = TL1 * dExpArg_dVb; dTL1_dVe = TL1 * dExpArg_dVe; /* LFW_FD fix/add 5 derivatives */ dT2_dVg = -(dnoff_dVg * Vtm * TL1 + T10 * dTL1_dVg) / (1.0 - pParam->B4SOImstarcv); dT2_dVd = -(dnoff_dVd * Vtm * TL1 + T10 * dTL1_dVd) / (1.0 - pParam->B4SOImstarcv); dT2_dVb = -(dnoff_dVb * Vtm * TL1 + T10 * dTL1_dVb) / (1.0 - pParam->B4SOImstarcv); dT2_dVe = -(dnoff_dVe * Vtm * TL1 + T10 * dTL1_dVe) / (1.0 - pParam->B4SOImstarcv); if (selfheat) dT2_dT = -(dT10_dT*TL1 +T10*TL1*(-dVtm_dT/Vtm-dcdep0_dT/cdep0+dExpArg_dT) )/(1.0 - pParam->B4SOImstarcv); else dT2_dT = 0.0; Vgsteff = T1 / T2; T3 = T2 * T2; /* T4 is dVgsteff_dVbseff */ T4 = (T2 * dT1_dVb - T1 * dT2_dVb) / T3; /* LFW_FD fix 4 derivatives */ dVgsteff_dVg = (T2 * dT1_dVg - T1 * dT2_dVg) / T3; dVgsteff_dVd = (T2 * dT1_dVd - T1 * dT2_dVd) / T3; dVgsteff_dVb = (T2 * dT1_dVb - T1 * dT2_dVb) / T3; dVgsteff_dVe = (T2 * dT1_dVe - T1 * dT2_dVe) / T3; if (selfheat) /*fix below expression Wagner */ /*dVgsteff_dT = (T2 * dT1_dT - T1 * dT2_dT) / T3+ T4 * dVbseff_dT; */ dVgsteff_dT = (T2 * dT1_dT - T1 * dT2_dT) / T3; else dVgsteff_dT = 0.0; } if (here->B4SOIagbcp2 > 0) { /* VgstNVt2 = pParam->B4SOImstarcv * (Vgst - pParam->B4SOIdelvt - 1.12) / T10; */ VgstNVt2 = pParam->B4SOImstarcv * (Vgst - pParam->B4SOIdelvt - eggbcp2) / T10; /* bugfix 4.3.1 -Tanvir */ /* LFW_FD add 4 derivatives */ dVgstNVt2_dVg = (pParam->B4SOImstarcv * dVgst_dVg - VgstNVt2 * dnoff_dVg * Vtm) / T10; dVgstNVt2_dVd = (pParam->B4SOImstarcv * dVgst_dVd - VgstNVt2 * dnoff_dVd * Vtm) / T10; dVgstNVt2_dVb = (pParam->B4SOImstarcv * dVgst_dVb - VgstNVt2 * dnoff_dVb * Vtm) / T10; dVgstNVt2_dVe = (pParam->B4SOImstarcv * dVgst_dVe - VgstNVt2 * dnoff_dVe * Vtm) / T10; /* ExpArg2 = (pParam->B4SOIvoffcv - (1- pParam->B4SOImstarcv) * (Vgst - pParam->B4SOIdelvt - 1.12))/ T10; */ ExpArg2 = (pParam->B4SOIvoffcv - (1- pParam->B4SOImstarcv) * (Vgst - pParam->B4SOIdelvt - eggbcp2))/ T10; /* bugfix 4.3.1 -Tanvir */ /* LFW_FD add 4 derivatives */ dExpArg2_dVg = (-(1- pParam->B4SOImstarcv) * dVgst_dVg - ExpArg2 * dnoff_dVg * Vtm) / T10; dExpArg2_dVd = (-(1- pParam->B4SOImstarcv) * dVgst_dVd - ExpArg2 * dnoff_dVd * Vtm) / T10; dExpArg2_dVb = (-(1- pParam->B4SOImstarcv) * dVgst_dVb - ExpArg2 * dnoff_dVb * Vtm) / T10; dExpArg2_dVe = (-(1- pParam->B4SOImstarcv) * dVgst_dVe - ExpArg2 * dnoff_dVe * Vtm) / T10; /* 11 new lines Wagner */ if (selfheat) { /*fix below expression Wagner */ /*dVgstNVt2_dT = -(pParam->B4SOImstarcv*dVth_dT + VgstNVt2*dT10_dT)/T10;*/ dVgstNVt2_dT = -(-pParam->B4SOImstarcv*dVgst_dT + VgstNVt2*dT10_dT)/T10; /*fix 1st line of below expression Wagner */ /*dExpArg2_dT = (1- pParam->B4SOImstarcv)*dVth_dT/T10 */ dExpArg2_dT = -(1- pParam->B4SOImstarcv)*dVgst_dT/T10 -ExpArg2*dT10_dT/T10; } else { dT10_dT = 0.0; dVgstNVt_dT = 0.0; dExpArg_dT = 0.0; dExpArg2_dT = 0.0; } /* MCJ: Very small Vgst */ if (VgstNVt2 > EXPL_THRESHOLD) { /* Vgsteff2 = Vgst - pParam->B4SOIdelvt - 1.12; */ Vgsteff2 = Vgst - pParam->B4SOIdelvt - eggbcp2; /* bugfix 4.3.1 -Tanvir */ T0 = -dVth_dVb; /* LFW_FD fix 4 derivatives */ dVgsteff2_dVg = dVgst_dVg; dVgsteff2_dVd = dVgst_dVd; dVgsteff2_dVb = dVgst_dVb; dVgsteff2_dVe = dVgst_dVe; if (selfheat) /*fix below expression Wagner */ /*dVgsteff2_dT = -dVth_dT + T0 * dVbseff_dT;*/ dVgsteff2_dT = dVgst_dT; else dVgsteff2_dT = 0.0; } else if (ExpArg2 > EXPL_THRESHOLD) { /* T0 = (Vgst - pParam->B4SOIdelvt - pParam->B4SOIvoffcv - 1.12) / (noff * Vtm); ExpVgst2 = exp(T0); */ T0 = (Vgst - pParam->B4SOIdelvt - pParam->B4SOIvoffcv - eggbcp2) / (noff * Vtm); ExpVgst2 = exp(T0); /* bugfix 4.3.1 -Tanvir */ /*Vgsteff2 = Vtm * pParam->B4SOIcdep0 / model->B4SOIcox * ExpVgst*/ Vgsteff2 = Vtm * cdep0 / model->B4SOIcox * ExpVgst2; /*v4.2 bug fix */ T3 = Vgsteff2 / (noff * Vtm) ; /* T1 is dVgsteff2_dVbseff */ T1 = -T3 * (dVth_dVb + T0 * Vtm * dnoff_dVb); /* LFW_FD fix 4 derivatives */ dVgsteff2_dVg = Vgsteff2 * (dVgst_dVg / Vtm - T0 * dnoff_dVg) / noff; dVgsteff2_dVd = Vgsteff2 * (dVgst_dVd / Vtm - T0 * dnoff_dVd) / noff; dVgsteff2_dVb = Vgsteff2 * (dVgst_dVb / Vtm - T0 * dnoff_dVb) / noff; dVgsteff2_dVe = Vgsteff2 * (dVgst_dVe / Vtm - T0 * dnoff_dVe) / noff; if (selfheat) /* fix 1st line in below expression Wagner */ /*dVgsteff2_dT = -T3 * (dVth_dT + T0 * dVtm_dT * noff) */ dVgsteff2_dT = -T3 * (-dVgst_dT + T0 * dVtm_dT * noff) + Vgsteff2 / Temp+ T1 * dVbseff_dT; else dVgsteff2_dT = 0.0; } else { ExpVgst2 = exp(VgstNVt2); T1 = T10 * log(1.0 + ExpVgst2); /* LFW_FD fix 4 derivatives */ dT1_dVg = dnoff_dVg * T1 / noff + T10 * ExpVgst2 * dVgstNVt2_dVg / (1.0 + ExpVgst2); dT1_dVd = dnoff_dVg * T1 / noff + T10 * ExpVgst2 * dVgstNVt2_dVd / (1.0 + ExpVgst2); dT1_dVb = dnoff_dVg * T1 / noff + T10 * ExpVgst2 * dVgstNVt2_dVb / (1.0 + ExpVgst2); dT1_dVe = dnoff_dVg * T1 / noff + T10 * ExpVgst2 * dVgstNVt2_dVe / (1.0 + ExpVgst2); /*fix below expression Wagner */ /*T3 = (1.0 / Temp); */ T3 = (1.0 / Temp + dnoff_dT / noff); if (selfheat) /*fix below expression */ /*dT1_dT = -dT1_dVg * (dVth_dT + (Vgst - pParam->B4SOIdelvt - 1.12) * T3) + T1 * T3;*/ /* dT1_dT = -dT1_dVg * (-dVgst_dT + (Vgst-pParam->B4SOIdelvt-1.12) * T3) + T1 * T3; */ dT1_dT = -dT1_dVg * (-dVgst_dT + (Vgst-pParam->B4SOIdelvt-eggbcp2) * T3) + T1 * T3; /* bugfix 4.3.1 -Tanvir */ else dT1_dT = 0.0; /* dT2_dVg = -model->B4SOIcox / (Vtm * pParam->B4SOIcdep0) * exp(ExpArg2) * (1 - pParam->B4SOImstarcv);*/ dT2_dVg = -model->B4SOIcox / (Vtm * cdep0) * exp(ExpArg2) * (1 - pParam->B4SOImstarcv); /*v4.2 bug fix */ T2 = pParam->B4SOImstarcv - T10 * dT2_dVg / (1.0 - pParam->B4SOImstarcv); /* LFW_FD next 5 lines new */ TL1 = dT2_dVg; dTL1_dVg = TL1 * dExpArg2_dVg; dTL1_dVd = TL1 * dExpArg2_dVd; dTL1_dVb = TL1 * dExpArg2_dVb; dTL1_dVe = TL1 * dExpArg2_dVe; /* LFW_FD fix next 5 derivatives */ dT2_dVg = -(dnoff_dVg * Vtm * TL1 + T10 * dTL1_dVg) / (1.0 - pParam->B4SOImstarcv); dT2_dVd = -(dnoff_dVg * Vtm * TL1 + T10 * dTL1_dVd) / (1.0 - pParam->B4SOImstarcv); dT2_dVb = -(dnoff_dVg * Vtm * TL1 + T10 * dTL1_dVb) / (1.0 - pParam->B4SOImstarcv); dT2_dVe = -(dnoff_dVg * Vtm * TL1 + T10 * dTL1_dVe) / (1.0 - pParam->B4SOImstarcv); if (selfheat) dT2_dT = -(dT10_dT*TL1 +T10*TL1*(-dVtm_dT/Vtm-dcdep0_dT/cdep0+dExpArg2_dT) )/(1.0 - pParam->B4SOImstarcv); else dT2_dT = 0.0; Vgsteff2 = T1 / T2; T3 = T2 * T2; /* T4 is dVgsteff2_dVbseff */ T4 = (T2 * dT1_dVb - T1 * dT2_dVb) / T3; /* LFW_FD fix next 4 derivatives */ dVgsteff2_dVg = (T2 * dT1_dVg - T1 * dT2_dVg) / T3; dVgsteff2_dVd = (T2 * dT1_dVd - T1 * dT2_dVd) / T3; dVgsteff2_dVb = (T2 * dT1_dVb - T1 * dT2_dVb) / T3; dVgsteff2_dVe = (T2 * dT1_dVe - T1 * dT2_dVe) / T3; if (selfheat) /*fix below expression Wagner */ /*dVgsteff2_dT = (T2 * dT1_dT - T1 * dT2_dT) / T3+ T4 * dVbseff_dT; */ dVgsteff2_dT = (T2 * dT1_dT - T1 * dT2_dT) / T3; else dVgsteff2_dT = 0.0; } } } /* v3.2 */ /* v3.2 */ /* LFW_FD flexilint initializations next 9 lines */ Qsub02 = dQsub02_dVrg = dQsub02_dVg = dQsub02_dVd = dQsub02_dVb = dQsub02_dVe = dQsub02_dT = 0.0; Qac02 = dQac02_dVrg = dQac02_dVg = dQac02_dVd = dQac02_dVb = dQac02_dVe = dQac02_dT = 0.0; dqsrc_dT = 0.0; dVdseffCV2_dT = 0; T02 = dT02_dVg = dT02_dVd = dT02_dVb = dT02_dVe = 0.0; T12 = dT12_dVg = dT12_dVd = dT12_dVb = dT12_dVe = 0.0; T22 = dT22_dVg = dT22_dVd = dT22_dVb = dT22_dVe = 0.0; if (model->B4SOIcapMod == 2) { /* v3.1 */ if (here->B4SOIsoiMod == 2) /* v3.2 */ /* ideal FD */ { /* LFW_FD flexilint initializations next 4 lines */ Qac0 = dQac0_dVrg = dQac0_dVg = dQac0_dVd = dQac0_dVb = dQac0_dVe = dQac0_dT = 0.0; dQac02_dVrg = dQac02_dVg = dQac02_dVd = dQac02_dVb = dQac02_dVe = dQac02_dT = 0.0; Qsub0 = dQsub0_dVrg = dQsub0_dVg = dQsub0_dVd = dQsub0_dVb = dQsub0_dVe = dQsub0_dT = 0.0; dQsub02_dVrg = dQsub02_dVg = dQsub02_dVd = dQsub02_dVb = dQsub02_dVe = dQsub02_dT = 0.0; } else /* soiMod = 0 or 1 */ { Vfb = Vth - phi - pParam->B4SOIk1eff * sqrtPhis + pParam->B4SOIdelvt; dVfb_dVb = dVth_dVb - pParam->B4SOIk1eff * dsqrtPhis_dVb; /* LFW_FD fix/add next 3 derivatives */ dVfb_dVd = dVth_dVd - pParam->B4SOIk1eff * dsqrtPhis_dVd; dVfb_dVg = dVth_dVg - pParam->B4SOIk1eff * dsqrtPhis_dVg; dVfb_dVe = dVth_dVe - pParam->B4SOIk1eff * dsqrtPhis_dVe; /*fix below expression Wagner */ /*dVfb_dT = dVth_dT; */ dVfb_dT = dVth_dT - dphi_dT - pParam->B4SOIk1eff*dsqrtPhis_dT; V3 = Vfb - Vgs_eff + Vbseff - DELTA_3_SOI; if (Vfb <= 0.0) { T0 = sqrt(V3 * V3 - 4.0 * DELTA_3_SOI * Vfb); T2 = -DELTA_3_SOI / T0; } else { T0 = sqrt(V3 * V3 + 4.0 * DELTA_3_SOI * Vfb); T2 = DELTA_3_SOI / T0; } T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = Vfb - 0.5 * (V3 + T0); /* LFW_FD fix/add next 4 derivatives */ dVfbeff_dVd = (1.0 - T1 - T2) * dVfb_dVd - T1 * dVbseff_dVd; dVfbeff_dVb = (1.0 - T1 - T2) * dVfb_dVb - T1 * dVbseff_dVb; dVfbeff_dVg = (1.0 - T1 - T2) * dVfb_dVg - T1 * (dVbseff_dVg - dVgs_eff_dVg); dVfbeff_dVe = (1.0 - T1 - T2) * dVfb_dVe - T1 * dVbseff_dVe; dVfbeff_dVrg = T1 * dVgs_eff_dVg; /*fix below expression Wagner */ /*if (selfheat) dVfbeff_dT = (1.0 - T1 - T2) * dVfb_dT; - T1*dVbseff_dT; */ if (selfheat) dVfbeff_dT = (1.0 - T1 - T2) * dVfb_dT + T1*(dVgs_eff_dT-dVbseff_dT); else dVfbeff_dT = 0.0; Qac0 = CoxWLb * (Vfbeff - Vfb); dQac0_dVrg = CoxWLb * dVfbeff_dVrg; dQac0_dVd = CoxWLb * (dVfbeff_dVd - dVfb_dVd); dQac0_dVb = CoxWLb * (dVfbeff_dVb - dVfb_dVb); /* LFW_FD add next 2 derivatives */ dQac0_dVg = CoxWLb * (dVfbeff_dVg - dVfb_dVg); dQac0_dVe = CoxWLb * (dVfbeff_dVe - dVfb_dVe); if (selfheat) dQac0_dT = CoxWLb * (dVfbeff_dT - dVfb_dT); else dQac0_dT = 0.0; /* v4.1 */ if ((here->B4SOIsoiMod != 2) && /* Bug fix #10 Jun 09 'opposite type Q/C evaluated only if bodymod=1' Jun 09 */ ( here->B4SOIbodyMod != 0) && here->B4SOIagbcp2 > 0) { /* Vfb2 = Vfb + 1.12; */ Vfb2 = Vfb + eggbcp2; /* bugfix 4.3.1 -Tanvir */ dVfb2_dVb = dVfb_dVb; dVfb2_dVd = dVfb_dVd; /* LFW_FD add next 2 derivatives */ dVfb2_dVg = dVfb_dVg; dVfb2_dVe = dVfb_dVe; dVfb2_dT = dVfb_dT; DELTA_3_SOI2 = DELTA_3_SOI; V3 = Vfb2 - Vgs_eff2 + Vbseff - DELTA_3_SOI2; if (Vfb2 <= 0.0) { T0 = sqrt(V3 * V3 - 100.0 * DELTA_3_SOI2 * Vfb2); T2 = -25.0 * DELTA_3_SOI2 / T0; } else { T0 = sqrt(V3 * V3 + 100.0 * DELTA_3_SOI2 * Vfb2); T2 = 25.0 * DELTA_3_SOI2 / T0; } T1 = 0.5 * (1.0 + V3 / T0); Vfbeff2 = Vfb2 - 0.5 * (V3 + T0); /* LFW_FD fix/add next 4 derivatives */ dVfbeff2_dVg = (1.0 - T2) * dVfb2_dVg - T1 * (dVfb2_dVg - dVgs_eff2_dVg + dVbseff_dVg); dVfbeff2_dVd = (1.0 - T2) * dVfb2_dVd - T1 * (dVfb2_dVd + dVbseff_dVd); dVfbeff2_dVb = (1.0 - T2) * dVfb2_dVb - T1 * (dVfb2_dVb + dVbseff_dVb); dVfbeff2_dVe = (1.0 - T2) * dVfb2_dVe - T1 * (dVfb2_dVe + dVbseff_dVe); dVfbeff2_dVrg = T1 * dVgs_eff2_dVg; /*fix below expression Wagner */ /*if (selfheat) dVfbeff2_dT = (1.0 - T1 - T2) * dVfb2_dT; */ if (selfheat) dVfbeff2_dT = (1.0 - T1 - T2) * dVfb2_dT - T1*dVfbeff2_dT; else dVfbeff2_dT = 0.0; Qac0 += CoxWLb2 * (Vfbeff2 - Vfb2); dQac02_dVrg = CoxWLb2 * dVfbeff2_dVrg; dQac02_dVd = CoxWLb2 * (dVfbeff2_dVd - dVfb2_dVd); dQac02_dVb = CoxWLb2 * (dVfbeff2_dVb - dVfb2_dVb); /* LFW_FD add next 2 derivatives */ dQac02_dVg = CoxWLb2 * (dVfbeff2_dVg - dVfb2_dVg); dQac02_dVe = CoxWLb2 * (dVfbeff2_dVe - dVfb2_dVe); if (selfheat) dQac02_dT = CoxWLb2 * (dVfbeff2_dT - dVfb2_dT); else dQac02_dT = 0.0; dQac0_dT += dQac02_dT; /* new line Wagner */ } /* end v4.1 */ T0 = 0.5 * pParam->B4SOIk1ox; T3 = Vgs_eff - Vfbeff - Vbseff - Vgsteff; if (pParam->B4SOIk1ox == 0.0) { T1 = 0.0; T2 = 0.0; } else if (T3 < 0.0) { T1 = T0 + T3 / pParam->B4SOIk1ox; T2 = CoxWLb; } else { T1 = sqrt(T0 * T0 + T3); T2 = CoxWLb * T0 / T1; } Qsub0 = CoxWLb * pParam->B4SOIk1ox * (T1 - T0); /* 4.1 bug fix */ dQsub0_dVrg = T2 * (dVgs_eff_dVg - dVfbeff_dVrg); /* LFW_FD fix/add next 4 derivatives */ dQsub0_dVd = -T2 * (dVfbeff_dVd + dVbseff_dVd + dVgsteff_dVd); dQsub0_dVg = T2 * (dVgs_eff_dVg - dVfbeff_dVg - dVbseff_dVg - dVgsteff_dVg); dQsub0_dVb = -T2 * (dVfbeff_dVb + dVbseff_dVb + dVgsteff_dVb); dQsub0_dVe = -T2 * (dVfbeff_dVe + dVbseff_dVe + dVgsteff_dVe); /*fix below expression Wagner */ /*if (selfheat) dQsub0_dT = -T2 * dVfbeff_dT; */ if (selfheat) dQsub0_dT = -T2 * (-dVgs_eff_dT + dVfbeff_dT + dVbseff_dT + dVgsteff_dT); else dQsub0_dT = 0.0; /* v4.1 */ if ((here->B4SOIsoiMod != 2) && /* Bug fix #10 Jun 09 'opposite type Q/C evaluated only if bodymod=1' */ (here->B4SOIbodyMod != 0) && here->B4SOIagbcp2 > 0) { T3 = Vgs_eff2- Vfbeff2 - Vbseff - Vgsteff2; if (T3 < 0.0) { T1 = T0 + T3 / pParam->B4SOIk1ox; T2 = CoxWLb2; } else { T1 = sqrt(T0 * T0 + T3); T2 = CoxWLb2 * T0 / T1; } Qsub0 += CoxWLb2 * pParam->B4SOIk1ox * (T1 - T0); dQsub02_dVrg = T2 * (dVgs_eff2_dVg - dVfbeff2_dVrg); /* LFW_FD fix/add next 4 derivatives */ dQsub02_dVg = T2 * (dVgs_eff2_dVg - dVfbeff2_dVg - dVbseff_dVg - dVgsteff2_dVg); dQsub02_dVd = -T2 * ( dVfbeff2_dVd + dVbseff_dVd + dVgsteff2_dVd); dQsub02_dVb = -T2 * ( dVfbeff2_dVb + dVbseff_dVb + dVgsteff2_dVb); dQsub02_dVe = -T2 * ( dVfbeff2_dVe + dVbseff_dVe + dVgsteff2_dVe); /*fix below expression Wagner */ /*if (selfheat) dQsub02_dT = -T2 * dVfbeff2_dT; */ if (selfheat) dQsub02_dT = -T2 * (dVfbeff2_dT + dVbseff_dT + dVgsteff2_dT); else dQsub02_dT = 0.0; dQsub0_dT += dQsub02_dT; /* new line Wagner */ } } /* v3.1 */ AbulkCV = Abulk0 * pParam->B4SOIabulkCVfactor; /* LFW_FD add next 3 derivatives */ dAbulkCV_dVg = pParam->B4SOIabulkCVfactor * dAbulk0_dVg; dAbulkCV_dVd = pParam->B4SOIabulkCVfactor * dAbulk0_dVd; dAbulkCV_dVe = pParam->B4SOIabulkCVfactor * dAbulk0_dVe; dAbulkCV_dVb = pParam->B4SOIabulkCVfactor * dAbulk0_dVb; dAbulkCV_dT = dAbulk0_dT * pParam->B4SOIabulkCVfactor; /* new line Wagner */ VdsatCV = Vgsteff / AbulkCV; /* LFW_FD fix/add next 4 derivatives */ dVdsatCV_dVg = (dVgsteff_dVg -VdsatCV * dAbulkCV_dVg) / AbulkCV; dVdsatCV_dVd = (dVgsteff_dVd -VdsatCV * dAbulkCV_dVd) / AbulkCV; dVdsatCV_dVb = (dVgsteff_dVb -VdsatCV * dAbulkCV_dVb) / AbulkCV; dVdsatCV_dVe = (dVgsteff_dVe -VdsatCV * dAbulkCV_dVe) / AbulkCV; V4 = VdsatCV - Vds - DELTA_4; T0 = sqrt(V4 * V4 + 4.0 * DELTA_4 * VdsatCV); VdseffCV = VdsatCV - 0.5 * (V4 + T0); T1 = 0.5 * (1.0 + V4 / T0); T2 = DELTA_4 / T0; T3 = (1.0 - T1 - T2) / AbulkCV; /* LFW_FD fix/add next 4 derivatives */ dVdseffCV_dVg = ( 1.0 - T1 - T2) * dVdsatCV_dVg; dVdseffCV_dVd = ( 1.0 - T1 - T2) * dVdsatCV_dVd + T1; dVdseffCV_dVb = ( 1.0 - T1 - T2) * dVdsatCV_dVb; dVdseffCV_dVe = ( 1.0 - T1 - T2) * dVdsatCV_dVe; /* 10 new lines Wagner */ if (selfheat) { dVdsatCV_dT = dVgsteff_dT/AbulkCV -VdsatCV*dAbulkCV_dT/AbulkCV; dTL1_dT = (V4 + 2.0 * DELTA_4) * dVdsatCV_dT / T0; dVdseffCV_dT = 0.5*dVdsatCV_dT - 0.5*dTL1_dT; } else { dVdsatCV_dT = 0; dVdseffCV_dT = 0; } /* v4.1 */ if (here->B4SOIagbcp2 > 0) { VdsatCV2 = Vgsteff2 / AbulkCV; /* LFW_FD fix/add next 4 derivatives */ dVdsatCV2_dVg = (dVgsteff2_dVg - VdsatCV2 * dAbulkCV_dVg) / AbulkCV; dVdsatCV2_dVd = (dVgsteff2_dVd - VdsatCV2 * dAbulkCV_dVd) / AbulkCV; dVdsatCV2_dVb = (dVgsteff2_dVb - VdsatCV2 * dAbulkCV_dVb) / AbulkCV; dVdsatCV2_dVe = (dVgsteff2_dVe - VdsatCV2 * dAbulkCV_dVe) / AbulkCV; V4 = VdsatCV2 - Vds - DELTA_4; T0 = sqrt(V4 * V4 + 4.0 * DELTA_4 * VdsatCV2); VdseffCV2 = VdsatCV2 - 0.5 * (V4 + T0); T1 = 0.5 * (1.0 + V4 / T0); T2 = DELTA_4 / T0; T3 = (1.0 - T1 - T2) / AbulkCV; /* LFW_FD fix/add next 4 derivatives */ dVdseffCV2_dVg = (1.0 - T1 - T2 ) * dVdsatCV2_dVg; dVdseffCV2_dVd = (1.0 - T1 - T2 ) * dVdsatCV2_dVd + T1; dVdseffCV2_dVb = (1.0 - T1 - T2 ) * dVdsatCV2_dVb; dVdseffCV2_dVe = (1.0 - T1 - T2 ) * dVdsatCV2_dVe; /* 10 new lines Wagner */ if (selfheat) { dVdsatCV2_dT = dVgsteff2_dT/AbulkCV -VdsatCV2*dAbulkCV_dT/AbulkCV; dTL1_dT = (V4 + 2.0 * DELTA_4) * dVdsatCV2_dT / T0; dVdseffCV2_dT = 0.5*dVdsatCV2_dT - 0.5*dTL1_dT; } else { dVdsatCV2_dT = 0; dVdseffCV2_dT = 0; } } /* end v4.1 */ /* v3.1 */ Cbg12 = Cbd12 = Cbb12 = Cbe12 = 0; /* LFW_FD flexilint */ dqbulk_dT = 0; /* new line Wagner */ if (here->B4SOIsoiMod == 2) /* v3.2 */ /* ideal FD */ { qbulk = Cbg1 = Cbd1 = Cbb1 = Cbe1 = 0; /* LFW_FD enhance 2 lines */ Cbg12 = Cbd12 = Cbb12 = Cbe12 = 0; /* v4.1 */ } else { T0 = AbulkCV * VdseffCV; T1 = 12.0 * (Vgsteff - 0.5 * T0 + 1e-20); T2 = VdseffCV / T1; T3 = T0 * T2; T4 = (1.0 - 12.0 * T2 * T2 * AbulkCV); T5 = (6.0 * T0 * (4.0 * Vgsteff- T0) / (T1 * T1) - 0.5); T6 = 12.0 * T2 * T2 * Vgsteff; T7 = 1.0 - AbulkCV; qbulk = CoxWLb * T7 * (0.5 * VdseffCV - T3); T4 = -T7 * (T4 - 1.0); T5 = -T7 * T5; T6 = -(T7 * T6 + (0.5 * VdseffCV - T3)); /* LFW_FD fix next 3 lines with next 20 lines */ /* Cbg1 = CoxWLb * (T4 + T5 * dVdseffCV_dVg); */ /* Cbd1 = CoxWLb * T5 * dVdseffCV_dVd ; */ /* Cbb1 = CoxWLb * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb);*/ dT0_dVg = AbulkCV * dVdseffCV_dVg + dAbulkCV_dVg * VdseffCV; dT0_dVd = AbulkCV * dVdseffCV_dVd + dAbulkCV_dVd * VdseffCV; dT0_dVb = AbulkCV * dVdseffCV_dVb + dAbulkCV_dVb * VdseffCV; dT0_dVe = AbulkCV * dVdseffCV_dVe + dAbulkCV_dVe * VdseffCV; dT1_dVg = 12.0 * (dVgsteff_dVg - 0.5 * dT0_dVg); dT1_dVd = 12.0 * (dVgsteff_dVd - 0.5 * dT0_dVd); dT1_dVb = 12.0 * (dVgsteff_dVb - 0.5 * dT0_dVb); dT1_dVe = 12.0 * (dVgsteff_dVe - 0.5 * dT0_dVe); Cbg1 = CoxWLb * (T7 * (0.5 - T0 / T1) * dVdseffCV_dVg - T7 * VdseffCV * ((dT0_dVg - T0 * dT1_dVg / T1) / T1) - dAbulkCV_dVg * (0.5 * VdseffCV - T3) ); Cbd1 = CoxWLb * (T7 * (0.5 - T0 / T1) * dVdseffCV_dVd - T7 * VdseffCV * ((dT0_dVd - T0 * dT1_dVd / T1) / T1) - dAbulkCV_dVd * (0.5 * VdseffCV - T3) ); Cbb1 = CoxWLb * (T7 * (0.5 - T0 / T1) * dVdseffCV_dVb - T7 * VdseffCV * ((dT0_dVb - T0 * dT1_dVb / T1) / T1) - dAbulkCV_dVb * (0.5 * VdseffCV - T3) ); Cbe1 = CoxWLb * (T7 * (0.5 - T0 / T1) * dVdseffCV_dVe - T7 * VdseffCV * ((dT0_dVe - T0 * dT1_dVe / T1) / T1) - dAbulkCV_dVe * (0.5 * VdseffCV - T3) ); /* 10 new lines Wagner */ if (selfheat) { dTL1_dT = AbulkCV * dVdseffCV_dT + dAbulkCV_dT * VdseffCV; dTL2_dT = 12.0 * (dVgsteff_dT -0.5 * dTL1_dT); dTL3_dT = (dVdseffCV_dT - T2 * dTL2_dT) / T1; dTL4_dT = T0 * dTL3_dT + dTL1_dT * T2; dqbulk_dT = CoxWLb * (-dAbulk_dT * (0.5 * VdseffCV - T3) + T7 * (0.5 * dVdseffCV_dT - dTL4_dT)); } else dqbulk_dT = 0; /* v4.1 */ if ((here->B4SOIsoiMod != 2) && /* Bug fix #10 Jun 09 'opposite type Q/C evaluated only if bodymod=1' */ (here->B4SOIbodyMod != 0) && here->B4SOIagbcp2 > 0) { T0 = AbulkCV * VdseffCV2; T1 = 12.0 * (Vgsteff2 - 0.5 * T0 + 1e-20); T2 = VdseffCV2 / T1; T3 = T0 * T2; T4 = (1.0 - 12.0 * T2 * T2 * AbulkCV); T5 = (6.0 * T0 * (4.0 * Vgsteff2 - T0) / (T1 * T1) - 0.5); T6 = 12.0 * T2 * T2 * Vgsteff2; T7 = 1.0 - AbulkCV; qbulk += CoxWLb2 * T7 * (0.5 * VdseffCV2 - T3); T4 = -T7 * (T4 - 1.0); T5 = -T7 * T5; T6 = -(T7 * T6 + (0.5 * VdseffCV2 - T3)); /* LFW_FD fix next 3 lines with next 20 lines */ /* Cbg12 = CoxWLb2 * (T4 + T5 * dVdseffCV2_dVg);*/ /* Cbd12 = CoxWLb2 * T5 * dVdseffCV2_dVd ; */ /* Cbb12 = CoxWLb2 * (T5 * dVdseffCV2_dVb + T6 * dAbulkCV_dVb);*/ dT0_dVg = AbulkCV * dVdseffCV2_dVg + dAbulkCV_dVg * VdseffCV2; dT0_dVd = AbulkCV * dVdseffCV2_dVd + dAbulkCV_dVd * VdseffCV2; dT0_dVb = AbulkCV * dVdseffCV2_dVb + dAbulkCV_dVb * VdseffCV2; dT0_dVe = AbulkCV * dVdseffCV2_dVe + dAbulkCV_dVe * VdseffCV2; dT1_dVg = 12.0 * (dVgsteff2_dVg - 0.5 * dT0_dVg); dT1_dVd = 12.0 * (dVgsteff2_dVd - 0.5 * dT0_dVd); dT1_dVb = 12.0 * (dVgsteff2_dVb - 0.5 * dT0_dVb); dT1_dVe = 12.0 * (dVgsteff2_dVe - 0.5 * dT0_dVe); Cbg12 = CoxWLb2 * (T7 * (0.5 - T0 / T1) * dVdseffCV2_dVg - T7 * VdseffCV2 * ((dT0_dVg - T0 * dT1_dVg / T1) / T1) - dAbulkCV_dVg * (0.5 * VdseffCV2 - T3) ); Cbd12 = CoxWLb2 * (T7 * (0.5 - T0 / T1) * dVdseffCV2_dVd - T7 * VdseffCV2 * ((dT0_dVd - T0 * dT1_dVd / T1) / T1) - dAbulkCV_dVd * (0.5 * VdseffCV2 - T3) ); Cbb12 = CoxWLb2 * (T7 * (0.5 - T0 / T1) * dVdseffCV2_dVb - T7 * VdseffCV2 * ((dT0_dVb - T0 * dT1_dVb / T1) / T1) - dAbulkCV_dVb * (0.5 * VdseffCV2 - T3) ); Cbe12 = CoxWLb2 * (T7 * (0.5 - T0 / T1) * dVdseffCV2_dVe - T7 * VdseffCV2 * ((dT0_dVe - T0 * dT1_dVe / T1) / T1) - dAbulkCV_dVe * (0.5 * VdseffCV2 - T3) ); /* 10 new lines Wagner */ if (selfheat) { dTL1_dT = AbulkCV * dVdseffCV2_dT + dAbulkCV_dT * VdseffCV2; dTL2_dT = 12.0 * (dVgsteff2_dT -0.5 * dTL1_dT); dTL3_dT = (dVdseffCV2_dT - T2 * dTL2_dT) / T1; dTL4_dT = T0 * dTL3_dT + dTL1_dT * T2; dqbulk_dT += CoxWLb2 * (-dAbulk_dT * (0.5 * VdseffCV2 - T3) + T7 * (0.5 * dVdseffCV2_dT - dTL4_dT)); } else dqbulk_dT += 0; } /* end v4.1 */ } /* v3.1 */ /* Total inversion charge */ T0 = AbulkCV * VdseffCV; T1 = 12.0 * (Vgsteff - 0.5 * T0 + 1e-20); /* T2 = VdseffCV / T1; */ T2 = T0 / T1; T3 = T0 * T2; /* T4 = (1.0 - 12.0 * T2 * T2 * AbulkCV); T5 = (6.0 * T0 * (4.0 * Vgsteff - T0) / (T1 * T1) - 0.5); T6 = 12.0 * T2 * T2 * Vgsteff; */ T4 = (1.0 - 12.0 * T2 * T2);/*bug fix */ T7 = T2 * (2.0 + 6.0 * T2) - 0.5; /*bug fix */ T5 = T7 * AbulkCV; T6 = T7 * VdseffCV; /* qinv = CoxWL * (Vgsteff - 0.5 * VdseffCV + T3); */ qgate = qinv = CoxWL * (Vgsteff - 0.5 * T0 + T3); /* enhanced line Wagner */ here->B4SOIqinv = -qinv; /* for noise v3.2 */ /* LFW_FD fix next 3 lines with next 20 lines */ /* Cgg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); */ /* Cgd1 = CoxWL * T5 * dVdseffCV_dVd; */ /* Cgb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb);*/ dT0_dVg = dAbulkCV_dVg * VdseffCV + AbulkCV * dVdseffCV_dVg; dT0_dVd = dAbulkCV_dVd * VdseffCV + AbulkCV * dVdseffCV_dVd; dT0_dVb = dAbulkCV_dVb * VdseffCV + AbulkCV * dVdseffCV_dVb; dT0_dVe = dAbulkCV_dVe * VdseffCV + AbulkCV * dVdseffCV_dVe; dT1_dVg = 12.0 * (dVgsteff_dVg - 0.5 * dT0_dVg); dT1_dVd = 12.0 * (dVgsteff_dVd - 0.5 * dT0_dVd); dT1_dVb = 12.0 * (dVgsteff_dVb - 0.5 * dT0_dVb); dT1_dVe = 12.0 * (dVgsteff_dVe - 0.5 * dT0_dVe); dT2_dVg = (dT0_dVg - T2 * dT1_dVg) / T1; dT2_dVd = (dT0_dVd - T2 * dT1_dVd) / T1; dT2_dVb = (dT0_dVb - T2 * dT1_dVb) / T1; dT2_dVe = (dT0_dVe - T2 * dT1_dVe) / T1; dT3_dVg = dT0_dVg * T2 + T0 * dT2_dVg; dT3_dVd = dT0_dVd * T2 + T0 * dT2_dVd; dT3_dVb = dT0_dVb * T2 + T0 * dT2_dVb; dT3_dVe = dT0_dVe * T2 + T0 * dT2_dVe; Cgg1 = CoxWL * (dVgsteff_dVg - 0.5 * dT0_dVg + dT3_dVg); Cgd1 = CoxWL * (dVgsteff_dVd - 0.5 * dT0_dVd + dT3_dVd); Cgb1 = CoxWL * (dVgsteff_dVb - 0.5 * dT0_dVb + dT3_dVb); Cge1 = CoxWL * (dVgsteff_dVe - 0.5 * dT0_dVe + dT3_dVe); /* 7 new lines Wagner */ if (selfheat) { dTL1_dT = AbulkCV * dVdseffCV_dT + dAbulkCV_dT * VdseffCV; dTL2_dT = 12 * (dVgsteff_dT - 0.5*dTL1_dT); dTL3_dT = (2 * T0 * dTL1_dT - T3 * dTL2_dT) / T1; dqgate_dT = CoxWL * (dVgsteff_dT - 0.5* dTL1_dT + dTL3_dT); } else dqgate_dT = 0; /* v4.1 */ /* LFW_FD 2 new lines per flexilint */ T12 = T02 = Cgg12 = Cgd12 = Cgb12 = Cge12 = 0.0; Csg12 = Csd12 = Csb12 = Cse12 = 0.0; dqsrc2_dT = 0; /* new line Wagner */ if ((here->B4SOIsoiMod != 2) && /* Bug fix #10 Jun 09 'opposite type Q/C evaluated only if bodymod=1' */ (here->B4SOIbodyMod != 0) && here->B4SOIagbcp2 > 0) { T02 = AbulkCV * VdseffCV2; T12 = 12.0 * (Vgsteff2 - 0.5 * T02 + 1e-20); T2 = T02 / T12; T3 = T02 * T2; T4 = (1.0 - 12.0 * T2 * T2); T7 = T2 * (2.0 + 6.0 * T2) - 0.5; T5 = T7 * AbulkCV; T6 = T7 * VdseffCV2; qinv += CoxWL2 * (Vgsteff2 - 0.5 * T02 + T3); qgate = qinv; /* new line Wagner */ here->B4SOIqinv = -qinv; /* LFW_FD fix next 3 lines with next 20 lines */ /* Cgg12 = CoxWL2 * (T4 + T5 * dVdseffCV2_dVg); */ /* Cgd12 = CoxWL2 * T5 * dVdseffCV2_dVd; */ /* Cgb12 = CoxWL2 * (T5 * dVdseffCV2_dVb + T6 * dAbulkCV_dVb);*/ dT02_dVg = dAbulkCV_dVg * VdseffCV2 + AbulkCV * dVdseffCV2_dVg; dT02_dVd = dAbulkCV_dVd * VdseffCV2 + AbulkCV * dVdseffCV2_dVd; dT02_dVb = dAbulkCV_dVb * VdseffCV2 + AbulkCV * dVdseffCV2_dVb; dT02_dVe = dAbulkCV_dVe * VdseffCV2 + AbulkCV * dVdseffCV2_dVe; dT12_dVg = 12.0 * (dVgsteff2_dVg - 0.5 * dT02_dVg); dT12_dVd = 12.0 * (dVgsteff2_dVd - 0.5 * dT02_dVd); dT12_dVb = 12.0 * (dVgsteff2_dVb - 0.5 * dT02_dVb); dT12_dVe = 12.0 * (dVgsteff2_dVe - 0.5 * dT02_dVe); dT2_dVg = (dT02_dVg - T2 * dT12_dVg) / T12; dT2_dVd = (dT02_dVd - T2 * dT12_dVd) / T12; dT2_dVb = (dT02_dVb - T2 * dT12_dVb) / T12; dT2_dVe = (dT02_dVe - T2 * dT12_dVe) / T12; dT3_dVg = dT02_dVg * T2 + T02 * dT2_dVg; dT3_dVd = dT02_dVd * T2 + T02 * dT2_dVd; dT3_dVb = dT02_dVb * T2 + T02 * dT2_dVb; dT3_dVe = dT02_dVe * T2 + T02 * dT2_dVe; Cgg12 = CoxWL2 * (dVgsteff2_dVg - 0.5 * dT02_dVg + dT3_dVg); Cgd12 = CoxWL2 * (dVgsteff2_dVd - 0.5 * dT02_dVd + dT3_dVd); Cgb12 = CoxWL2 * (dVgsteff2_dVb - 0.5 * dT02_dVb + dT3_dVb); Cge12 = CoxWL2 * (dVgsteff2_dVe - 0.5 * dT02_dVe + dT3_dVe); /* 8 new lines Wagner */ if (selfheat) { dTL1_dT = AbulkCV * dVdseffCV2_dT + dAbulkCV_dT * VdseffCV2; dTL2_dT = 12 * (dVgsteff2_dT - 0.5*dTL1_dT); dTL3_dT = (2 * T02 * dTL1_dT - T3 * dTL2_dT) / T12; dqgate2_dT = CoxWL2 * (dVgsteff2_dT - 0.5* dTL1_dT + dTL3_dT); dqgate_dT += dqgate2_dT; } else dqgate_dT = 0; } /* end v4.1 */ /* Inversion charge partitioning into S / D */ if (model->B4SOIxpart > 0.5) { /* 0/100 Charge partition model */ T1 = T1 + T1; qsrc = -CoxWL * (0.5 * Vgsteff + 0.25 * T0 - T0 * T0 / T1); T7 = (4.0 * Vgsteff - T0) / (T1 * T1); T4 = -(0.5 + 24.0 * T0 * T0 / (T1 * T1)); T5 = -(0.25 * AbulkCV - 12.0 * AbulkCV * T0 * T7); T6 = -(0.25 * VdseffCV - 12.0 * T0 * VdseffCV * T7); /* LFW_FD fix next 3 lines with next 12 lines */ /* Csg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); */ /* Csd1 = CoxWL * T5 * dVdseffCV_dVd; */ /* Csb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb);*/ dT1_dVg = 2.0 * dT1_dVg; dT1_dVd = 2.0 * dT1_dVd; dT1_dVb = 2.0 * dT1_dVb; dT1_dVe = 2.0 * dT1_dVe; Csg1 = -CoxWL * (0.5 * dVgsteff_dVg + 0.25 * dT0_dVg - 2.0 * T0 * dT0_dVg / T1 + T0 * T0 * dT1_dVg / (T1 * T1)); Csd1 = -CoxWL * (0.5 * dVgsteff_dVd + 0.25 * dT0_dVd - 2.0 * T0 * dT0_dVd / T1 + T0 * T0 * dT1_dVd / (T1 * T1)); Csb1 = -CoxWL * (0.5 * dVgsteff_dVb + 0.25 * dT0_dVb - 2.0 * T0 * dT0_dVb / T1 + T0 * T0 * dT1_dVb / (T1 * T1)); Cse1 = -CoxWL * (0.5 * dVgsteff_dVe + 0.25 * dT0_dVe - 2.0 * T0 * dT0_dVe / T1 + T0 * T0 * dT1_dVe / (T1 * T1)); /* 8 new lines Wagner */ if (selfheat) { dTL1_dT = AbulkCV * dVdseffCV_dT + dAbulkCV_dT * VdseffCV; dTL2_dT = 24 * (dVgsteff_dT - 0.5*dTL1_dT); dqsrc_dT = -CoxWL*(0.5*dVgsteff_dT + 0.25*dTL1_dT - 2*T0*dTL1_dT/T1 + + T0*T0*dTL2_dT/(T1*T1) ); } else dqsrc_dT = 0; /* v4.1 */ if ((here->B4SOIsoiMod != 2) && /* Bug fix #10 Jun 09 'opposite type Q/C evaluated only if bodymod=1' */ (here->B4SOIbodyMod != 0) && here->B4SOIagbcp2 > 0) { T12 = T12 + T12; /*fix below expression Wagner */ /*qsrc += -CoxWL2 * (0.5 * Vgsteff2 + 0.25 * T02 - T02 * T02 / T12); */ qsrc2 = -CoxWL2 * (0.5 * Vgsteff2 + 0.25 * T02 - T02 * T02 / T12); T7 = (4.0 * Vgsteff2 - T02) / (T12 * T12); T4 = -(0.5 + 24.0 * T02 * T02 / (T12 * T12)); T5 = -(0.25 * AbulkCV - 12.0 * AbulkCV * T02 * T7); T6 = -(0.25 * VdseffCV2 - 12.0 * T02 * VdseffCV2 * T7); /* LFW_FD fix next 3 lines with next 12 lines */ /* Csg12 = CoxWL2 * (T4 + T5 * dVdseffCV2_dVg); */ /* Csd12 = CoxWL2 * T5 * dVdseffCV2_dVd; */ /* Csb12 = CoxWL2 * (T5 * dVdseffCV2_dVb + T6 * dAbulkCV_dVb);*/ dT12_dVg = 2.0 * dT12_dVg; dT12_dVd = 2.0 * dT12_dVd; dT12_dVb = 2.0 * dT12_dVb; dT12_dVe = 2.0 * dT12_dVe; Csg12 = -CoxWL2 * (0.5 * dVgsteff2_dVg + 0.25 * dT02_dVg - 2.0 * T02 * dT02_dVg / T12 + T02 * T02 * dT12_dVg / (T12 * T12)); Csd12 = -CoxWL2 * (0.5 * dVgsteff2_dVd + 0.25 * dT02_dVd - 2.0 * T02 * dT02_dVd / T12 + T02 * T02 * dT12_dVd / (T12 * T12)); Csb12 = -CoxWL2 * (0.5 * dVgsteff2_dVb + 0.25 * dT02_dVb - 2.0 * T02 * dT02_dVb / T12 + T02 * T02 * dT12_dVb / (T12 * T12)); Cse12 = -CoxWL2 * (0.5 * dVgsteff2_dVe + 0.25 * dT02_dVe - 2.0 * T02 * dT02_dVe / T12 + T02 * T02 * dT12_dVe / (T12 * T12)); /* 11 new lines Wagner */ if (selfheat) { dTL1_dT = AbulkCV * dVdseffCV2_dT + dAbulkCV_dT * VdseffCV2; dTL2_dT = 24 * (dVgsteff2_dT - 0.5*dTL1_dT); dqsrc2_dT = -CoxWL2*(0.5*dVgsteff2_dT + 0.25*dTL1_dT - 2*T02*dTL1_dT/T12 + + T02*T02*dTL2_dT/(T12*T12) ); } else dqsrc2_dT = 0; qsrc += qsrc2; dqsrc_dT += dqsrc2_dT; } /* end v4.1 */ } else if (model->B4SOIxpart < 0.5) { /* 40/60 Charge partition model */ T1 = T1 / 12.0; T2 = 0.5 * CoxWL / (T1 * T1); T3 = Vgsteff * (2.0 * T0 * T0 / 3.0 + Vgsteff * (Vgsteff - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T2 * T3; /* LFW_FD add next 28 lines of code */ dT1_dVg = dVgsteff_dVg - 0.5 * dT0_dVg; dT1_dVd = dVgsteff_dVd - 0.5 * dT0_dVd; dT1_dVb = dVgsteff_dVb - 0.5 * dT0_dVb; dT1_dVe = dVgsteff_dVe - 0.5 * dT0_dVe; dT2_dVg = - 2.0 * T2 * dT1_dVg / T1; dT2_dVd = - 2.0 * T2 * dT1_dVd / T1; dT2_dVb = - 2.0 * T2 * dT1_dVb / T1; dT2_dVe = - 2.0 * T2 * dT1_dVe / T1; dT3_dVg = dVgsteff_dVg * (2.0 * T0 * T0 / 3.0 + Vgsteff * (Vgsteff - 4.0 * T0 / 3.0)) + Vgsteff * (4.0 * T0 *dT0_dVg /3 + dVgsteff_dVg * (Vgsteff - 4.0 * T0 / 3.0) + Vgsteff * (dVgsteff_dVg -4.0 * dT0_dVg / 3.0)) - 2.0 * T0 * T0 * dT0_dVg / 5.0; dT3_dVd = dVgsteff_dVd * (2.0 * T0 * T0 / 3.0 + Vgsteff * (Vgsteff - 4.0 * T0 / 3.0)) + Vgsteff * (4.0 * T0 *dT0_dVd /3 + dVgsteff_dVd * (Vgsteff - 4.0 * T0 / 3.0) + Vgsteff * (dVgsteff_dVd -4.0 * dT0_dVd / 3.0)) - 2.0 * T0 * T0 * dT0_dVd / 5.0; dT3_dVb = dVgsteff_dVb * (2.0 * T0 * T0 / 3.0 + Vgsteff * (Vgsteff - 4.0 * T0 / 3.0)) + Vgsteff * (4.0 * T0 *dT0_dVb /3 + dVgsteff_dVb * (Vgsteff - 4.0 * T0 / 3.0) + Vgsteff * (dVgsteff_dVb -4.0 * dT0_dVb / 3.0)) - 2.0 * T0 * T0 * dT0_dVb / 5.0; dT3_dVe = dVgsteff_dVe * (2.0 * T0 * T0 / 3.0 + Vgsteff * (Vgsteff - 4.0 * T0 / 3.0)) + Vgsteff * (4.0 * T0 *dT0_dVe /3 + dVgsteff_dVe * (Vgsteff - 4.0 * T0 / 3.0) + Vgsteff * (dVgsteff_dVe -4.0 * dT0_dVe / 3.0)) - 2.0 * T0 * T0 * dT0_dVe / 5.0; Csg1 = - T2 * dT3_dVg - dT2_dVg * T3; Csd1 = - T2 * dT3_dVd - dT2_dVd * T3; Csb1 = - T2 * dT3_dVb - dT2_dVb * T3; Cse1 = - T2 * dT3_dVe - dT2_dVe * T3; /* 13 new lines Wagner */ if (selfheat) { dTL1_dT = AbulkCV * dVdseffCV_dT + dAbulkCV_dT * VdseffCV; dTL2_dT = (dVgsteff_dT - 0.5*dTL1_dT); dTL3_dT = - CoxWL * dTL2_dT / (T1 * T1 * T1); dTL4_dT = dVgsteff_dT * (2.0 * T0 * T0 / 3.0 + Vgsteff * (Vgsteff - 4.0 * T0 / 3.0) ) + Vgsteff * (4.0 * T0 * dTL1_dT /3.0 + dVgsteff_dT * (Vgsteff - 4.0 * T0 / 3.0) + Vgsteff * (dVgsteff_dT -4.0 * dTL1_dT / 3.0) ) - 2.0 * T0 * T0 * dTL1_dT / 5.0; dqsrc_dT = -T2*dTL4_dT - dTL3_dT*T3; } else dqsrc_dT = 0; /* LFW_FD delete next 10 lines of code */ /* T7 = 4.0 / 3.0 * Vgsteff * (Vgsteff - T0) */ /* + 0.4 * T0 * T0; */ /* T4 = -2.0 * qsrc / T1 - T2 * (Vgsteff * (3.0 */ /* * Vgsteff - 8.0 * T0 / 3.0) */ /* + 2.0 * T0 * T0 / 3.0); */ /* T5 = (qsrc / T1 + T2 * T7) * AbulkCV; */ /* T6 = (qsrc / T1 * VdseffCV + T2 * T7 * VdseffCV);*/ /* Csg1 = T4 + T5 * dVdseffCV_dVg; */ /* Csd1 = T5 * dVdseffCV_dVd; */ /* Csb1 = T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb; */ /* v4.1 */ if ((here->B4SOIsoiMod != 2) && /* Bug fix #10 Jun 09 'opposite type Q/C evaluated only if bodymod=1' */ (here->B4SOIbodyMod != 0) && here->B4SOIagbcp2 >0) { T12 = T12 /12.0; T2 = 0.5 * CoxWL2 / (T12 * T12); T3 = Vgsteff2 * (2.0 * T02 * T02 / 3.0 + Vgsteff2 * (Vgsteff2 - 4.0 * T02 / 3.0)) - 2.0 * T02 * T02 * T02 / 15.0; qsrc2 = -T2 * T3; T7 = 4.0 / 3.0 * Vgsteff2 * (Vgsteff2 - T02) + 0.4 * T02 * T02; T4 = -2.0 * qsrc2 / T12 - T2 * (Vgsteff2 * (3.0 * Vgsteff2 - 8.0 * T02 / 3.0) + 2.0 * T02 * T02 / 3.0); T5 = (qsrc2 / T12 + T2 * T7) * AbulkCV; T6 = (qsrc2 / T12 * VdseffCV2 + T2 * T7 * VdseffCV2); /* LFW_FD fix next 3 lines with next 28 lines */ /* Csg12 = T4 + T5 * dVdseffCV2_dVg; */ /* Csd12 = T5 * dVdseffCV2_dVd; */ /* Csb12 = T5 * dVdseffCV2_dVb + T6 * dAbulkCV_dVb;*/ dT12_dVg = dVgsteff2_dVg - 0.5 * dT02_dVg; dT12_dVd = dVgsteff2_dVd - 0.5 * dT02_dVd; dT12_dVb = dVgsteff2_dVb - 0.5 * dT02_dVb; dT12_dVe = dVgsteff2_dVe - 0.5 * dT02_dVe; dT2_dVg = - 2.0 * T2 * dT12_dVg / T12; dT2_dVd = - 2.0 * T2 * dT12_dVd / T12; dT2_dVb = - 2.0 * T2 * dT12_dVb / T12; dT2_dVe = - 2.0 * T2 * dT12_dVe / T12; dT3_dVg = dVgsteff2_dVg * (2.0 * T02 * T02 / 3.0 + Vgsteff2 * (Vgsteff2 - 4.0 * T02 / 3.0)) + Vgsteff2 * (4.0 * T02 *dT02_dVg /3 + dVgsteff2_dVg * (Vgsteff2 - 4.0 * T02 / 3.0) + Vgsteff2 * (dVgsteff2_dVg -4.0 * dT02_dVg / 3.0)) - 2.0 * T02 * T02 * dT02_dVg / 5.0; dT3_dVd = dVgsteff2_dVd * (2.0 * T02 * T02 / 3.0 + Vgsteff2 * (Vgsteff2 - 4.0 * T02 / 3.0)) + Vgsteff2 * (4.0 * T02 *dT02_dVd /3 + dVgsteff2_dVd * (Vgsteff2 - 4.0 * T02 / 3.0) + Vgsteff2 * (dVgsteff2_dVd -4.0 * dT02_dVd / 3.0)) - 2.0 * T02 * T02 * dT02_dVd / 5.0; dT3_dVb = dVgsteff2_dVb * (2.0 * T02 * T02 / 3.0 + Vgsteff2 * (Vgsteff2 - 4.0 * T02 / 3.0)) + Vgsteff2 * (4.0 * T02 *dT02_dVb /3 + dVgsteff2_dVb * (Vgsteff2 - 4.0 * T02 / 3.0) + Vgsteff2 * (dVgsteff2_dVb -4.0 * dT02_dVb / 3.0)) - 2.0 * T02 * T02 * dT02_dVb / 5.0; dT3_dVe = dVgsteff2_dVe * (2.0 * T02 * T02 / 3.0 + Vgsteff2 * (Vgsteff2 - 4.0 * T02 / 3.0)) + Vgsteff2 * (4.0 * T02 *dT02_dVe /3 + dVgsteff2_dVe * (Vgsteff2 - 4.0 * T02 / 3.0) + Vgsteff2 * (dVgsteff2_dVe -4.0 * dT02_dVe / 3.0)) - 2.0 * T02 * T02 * dT02_dVe / 5.0; Csg12 = - T2 * dT3_dVg - dT2_dVg * T3; Csd12 = - T2 * dT3_dVd - dT2_dVd * T3; Csb12 = - T2 * dT3_dVb - dT2_dVb * T3; Cse12 = - T2 * dT3_dVe - dT2_dVe * T3; /* 13 new lines Wagner */ if (selfheat) { dTL1_dT = AbulkCV * dVdseffCV2_dT + dAbulkCV_dT * VdseffCV2; dTL2_dT = (dVgsteff2_dT - 0.5*dTL1_dT); dTL3_dT = - CoxWL2 * dTL2_dT / (T12 * T12 * T12); dTL4_dT = dVgsteff2_dT * (2.0 * T02 * T02 / 3.0 + Vgsteff2 * (Vgsteff2 - 4.0 * T02 / 3.0) ) + Vgsteff2 * (4.0 * T02 * dTL1_dT /3.0 + dVgsteff2_dT * (Vgsteff2 - 4.0 * T02 / 3.0) + Vgsteff2 * (dVgsteff2_dT -4.0 * dTL1_dT / 3.0) ) - 2.0 * T02 * T02 * dTL1_dT /5.0; dqsrc2_dT = -T2*dTL4_dT - dTL3_dT*T3; } else dqsrc2_dT = 0; qsrc += qsrc2; dqsrc_dT += dqsrc2_dT; /* new line Wagner */ } /* end v4.1 */ } else { /* 50/50 Charge partition model */ qsrc = - 0.5 * (qinv + qbulk); Csg1 = - 0.5 * (Cgg1 + Cbg1); Csb1 = - 0.5 * (Cgb1 + Cbb1); Csd1 = - 0.5 * (Cgd1 + Cbd1); Cse1 = - 0.5 * (Cge1 + Cbe1); /* LFW_FD new line */ /* v4.1 */ if ((here->B4SOIsoiMod != 2) && /* Bug fix #10 Jun 09 'opposite type Q/C evaluated only if bodymod=1' */ (here->B4SOIbodyMod != 0) && here->B4SOIagbcp2 >0) { Csg12 = -0.5 * (Cgg12 + Cbg12); Csb12 = -0.5 * (Cgb12 + Cbb12); Csd12 = -0.5 * (Cgd12 + Cbd12); Cse12 = -0.5 * (Cge12 + Cbe12); /* LFW_FD new line */ } dqsrc_dT = -0.5 * (dqgate_dT + dqbulk_dT); /* new line Wagner */ /* end v4.1 */ } /* Backgate charge */ /* v3.1 */ if (here->B4SOIsoiMod == 2) /* v3.2 */ /* ideal FD */ { Qe1 = dQe1_dVb = dQe1_dVe = Ce1T = dQe1_dT = 0; /* enhanced line Wagner */ } else /* soiMod = 0 or 1 */ { CboxWL = pParam->B4SOIkb1 * model->B4SOIfbody * Cbox * (pParam->B4SOIweffCV / here->B4SOInseg * here->B4SOInf /* bugfix_snps nf*/ * pParam->B4SOIleffCVbg + here->B4SOIaebcp); Qe1 = CboxWL * (Vesfb - Vbs); dQe1_dVb = -CboxWL; dQe1_dVe = CboxWL; if (selfheat) Ce1T = dQe1_dT = -CboxWL * dvfbb_dT; /* enhanced line Wagner */ else dQe1_dT = 0; } /* v3.1 */ qgate = qinv + Qac0 + Qsub0; /* LFW_FD commentary only; next 2 lines */ /* Correct definition of qgate below. Not used because it changes CMC defined model.*/ /* qgate = qinv + Qac0 + Qsub0 - qbulk;*/ qbody = (qbulk - Qac0 - Qsub0 - Qe1); qsub = Qe1; qdrn = -(qgate + qsrc + qbody + qsub); /* 4 new lines Wagner */ dqgate_dT = dqgate_dT + dQac0_dT + dQsub0_dT; dqbody_dT = (dqbulk_dT - dQac0_dT - dQsub0_dT - dQe1_dT); dqsub_dT = dQe1_dT; dqdrn_dT = -(dqgate_dT + dqsrc_dT + dqbody_dT + dqsub_dT); /* This transform all the dependency on Vgsteff, Vbseff into real ones */ Ce1b = dQe1_dVb; Ce1e = dQe1_dVe; /* LFW_FD fix/add next 4 lines */ Csg = Csg1; Csd = Csd1; Csb = Csb1; Cse = Cse1; /*fix expression below Wagner */ /*if (selfheat) CsT = Csg1 * dVgsteff_dT;*/ if (selfheat) CsT = dqsrc_dT; else CsT = 0.0; /* LFW_FD fix/add next 4 lines */ Cgg = Cgg1 + dQsub0_dVg + dQac0_dVg; Cgd = Cgd1 + dQsub0_dVd + dQac0_dVd; Cgb = Cgb1 + dQsub0_dVb + dQac0_dVb; Cge = Cge1 + dQsub0_dVe + dQac0_dVe; /* LFW_FD commentary only; next 5 lines */ /* Use these with correct definition of qgate above */ /* Cgg = Cgg1 + dQsub0_dVg + dQac0_dVg - Cbg1; */ /* Cgd = Cgd1 + dQsub0_dVd + dQac0_dVd - Cbd1; */ /* Cgb = Cgb1 + dQsub0_dVb + dQac0_dVb - Cbb1; */ /* Cge = Cge1 + dQsub0_dVe + dQac0_dVe - Cbe1; */ if (selfheat) /*fix expression below Wagner */ /*CgT = (Cgg1 + dQsub0_dVg) * dVgsteff_dT + dQac0_dT + dQsub0_dT;*/ CgT = dqgate_dT; else CgT = 0.0; /* LFW_FD fix/add next 4 lines */ Cbg = Cbg1 - dQac0_dVg - dQsub0_dVg; Cbd = Cbd1 - dQac0_dVd - dQsub0_dVd; Cbb = Cbb1 - dQac0_dVb - dQsub0_dVb - Ce1b; Cbe = Cbe1 - dQac0_dVe - dQsub0_dVe - Ce1e; if (selfheat) /*fix expression below Wagner */ /*CbT = (Cbg1 - dQsub0_dVg) * dVgsteff_dT - dQac0_dT - dQsub0_dT - dQe1_dT;*/ CbT = dqbody_dT; else CbT = 0.0; /* v4.1 */ if ((here->B4SOIsoiMod != 2) && /* Bug fix #10 Jun 09 'opposite type Q/C evaluated only if bodymod=1' */ (here->B4SOIbodyMod != 0) && here->B4SOIagbcp2 >0) { /* LFW_FD fixed next 12 lines */ Csg += Csg12; Csd += Csd12; Csb += Csb12; Cse += Cse12; Cgg += Cgg12 + dQsub02_dVg + dQac02_dVg; Cgd += Cgd12 + dQsub02_dVd + dQac02_dVd; Cgb += Cgb12 + dQsub02_dVb + dQac02_dVb; Cge += Cge12 + dQsub02_dVe + dQac02_dVe; Cbg += Cbg12 - dQac02_dVg - dQsub02_dVg; Cbd += Cbd12 - dQac02_dVd - dQsub02_dVd; Cbb += Cbb12 - dQac02_dVb - dQsub02_dVb; Cbe += Cbe12 - dQac02_dVe - dQsub02_dVe; } /* end v4.1 */ here->B4SOIcggb = Cgg ; here->B4SOIcgsb = - (Cgg + Cgd + Cgb + Cge); /* LFW_FD fixed line */ here->B4SOIcgdb = Cgd; here->B4SOIcgeb = Cge; /* LFW_FD new line */ here->B4SOIcgT = CgT; here->B4SOIcbgb = Cbg; here->B4SOIcbsb = -(Cbg + Cbd + Cbb + Cbe); /* LFW_FD fixed line */ here->B4SOIcbdb = Cbd; here->B4SOIcbeb = Cbe; /* LFW_FD fixed line */ here->B4SOIcbT = CbT; here->B4SOIceeb = Ce1e ; here->B4SOIceT = dQe1_dT; here->B4SOIcdgb = -(Cgg + Cbg + Csg); here->B4SOIcddb = -(Cgd + Cbd + Csd); here->B4SOIcdeb = -(Cge + Cse + Cbe) - Ce1e; /* LFW_FD fixed line */ here->B4SOIcdT = -(CgT + CbT + CsT) - dQe1_dT; here->B4SOIcdsb = Cgg + Cgd + Cgb + Cge /* LFW_FD fixed expression */ + Cbg + Cbd + Cbb + Cbe + Ce1e + Csg + Csd + Csb + Cse + Ce1b; } /* End of if capMod == 2 */ else if (model->B4SOIcapMod == 3) { /* dVgsteff_dVb /= dVbseff_dVb; LFW_FD comment out line */ if(model->B4SOImtrlMod == 0) Cox = 3.453133e-11 / model->B4SOItoxp; else Cox = epsrox * EPS0 / model->B4SOItoxp; CoxWL *= toxe/ model->B4SOItoxp; CoxWLb *= model->B4SOItox/ model->B4SOItoxp; Tox=1.0e8*model->B4SOItoxp; /* v4.1 */ if (here->B4SOIagbcp2 > 0) { /* dVgsteff2_dVb /= dVbseff_dVb; LFW_FD comment out line */ CoxWL2 *= model->B4SOItox / model->B4SOItoxp; CoxWLb2 *= model->B4SOItox/ model->B4SOItoxp; } /* end v4.1 */ /* v3.1 */ /* LFW_FD flexilint inits next 7 lines */ Vfbzb = pParam->B4SOIvfbzb + pParam->B4SOIdelvt; dVfbzb_dT = 0.0; Vfbzb2 = dVfbzb2_dT = 0.0; Tcen2 = dTcen2_dVg = dTcen2_dVd = dTcen2_dVb = dTcen2_dVe = dTcen2_dT = 0.0; Coxeff2 = dCoxeff2_dVg = dCoxeff2_dVd = dCoxeff2_dVb = dCoxeff2_dVe = dCoxeff2_dT = 0.0; CoxWLcenb2= dCoxWLcenb2_dT= 0.0; dDeltaPhi2_dT = 0.0; if (here->B4SOIsoiMod == 2) /* v3.2 */ /* ideal FD */ { /* LFW_FD enhance next 4 lines */ Qac0 = dQac0_dVg = dQac0_dVb = dQac0_dVd = dQac0_dVe = dQac0_dT = 0.0; dQac02_dVg = dQac02_dVb = dQac02_dVd = dQac02_dVe = dQac02_dT = 0.0; Qsub0 = dQsub0_dVg = dQsub0_dVd = dQsub0_dVb = dQsub0_dVe = dQsub0_dT = 0.0; dQsub02_dVg = dQsub02_dVd = dQsub02_dVb = dQsub02_dVe = dQsub02_dT = 0.0; Vfbzb = dVfbzb_dT = 0; /* v4.2 bug fix # 20 */ } else /* soiMod = 0 or 1 */ { if (selfheat) { Vfbzb = Vthzb - phi - pParam->B4SOIk1eff * sqrtPhi + pParam->B4SOIdelvt; /*fix expression below Wagner */ /*dVfbzb_dT = dVthzb_dT;*/ dVfbzb_dT = dVthzb_dT - dphi_dT - pParam->B4SOIk1eff*dsqrtPhi_dT; } else { Vfbzb = here->B4SOIvfbzb + pParam->B4SOIdelvt; dVfbzb_dT = 0; } V3 = Vfbzb - Vgs_eff + Vbseff - DELTA_3; if (Vfbzb <= 0.0) { T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * Vfbzb); T2 = -DELTA_3 / T0; /* dTL0_dT = (V3 * dTL3_dT - 2.0 * DELTA_3 * dVfbzb_dT) / T0; LFW_FD delete line */ } else { T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * Vfbzb); T2 = DELTA_3 / T0; } T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = Vfbzb - 0.5 * (V3 + T0); /* LFW_FD fix/add next 4 lines */ dVfbeff_dVg = T1 * (dVgs_eff_dVg - dVbseff_dVg); dVfbeff_dVd = T1 * ( - dVbseff_dVd); dVfbeff_dVb = T1 * ( - dVbseff_dVb); dVfbeff_dVe = T1 * ( - dVbseff_dVe); /*fix expression below Wagner */ /*if (selfheat) dVfbeff_dT = (1.0 - T1 - T2) * dVfbzb_dT; - T1*dVbseff_dT; */ if (selfheat) dVfbeff_dT = (1.0 - T1 - T2) * dVfbzb_dT + T1*(dVgs_eff_dT - dVbseff_dT); else dVfbeff_dT = 0.0; /* v4.1 */ if (here->B4SOIagbcp2 >0) { /* Vfbzb2 = Vfbzb + 1.12; */ Vfbzb2 = Vfbzb + eggbcp2; /* bugfix v4.3.1 -Tanvir */ if (selfheat) dVfbzb2_dT = dVfbzb_dT; else dVfbzb2_dT = 0; V3 = Vfbzb2 - Vgs_eff2 + Vbseff - DELTA_3; if (Vfbzb2 <= 0.0) /* Bug fix #12 Jun 09 Vfbzb changed to Vfbzb2 */ { T0 = sqrt(V3 * V3 - 100.0 * DELTA_3 * Vfbzb2); /* Value of 100 instead of 4 is used to make transition smooth*/ T2 = -25.0 * DELTA_3 / T0; /* p+/p has same smoothness as n+/p with 100, 4 makes it too steep*/ } else { T0 = sqrt(V3 * V3 + 100.0 * DELTA_3 * Vfbzb2); T2 = 25.0 * DELTA_3 / T0; } T1 = 0.5 * (1.0 + V3 / T0); Vfbeff2 = Vfbzb2 - 0.5 * (V3 + T0); /* LFW_FD fix/add next 4 lines */ dVfbeff2_dVg = T1 * (dVgs_eff2_dVg - dVbseff_dVg); dVfbeff2_dVd = T1 * ( - dVbseff_dVd); dVfbeff2_dVb = T1 * ( - dVbseff_dVb); dVfbeff2_dVe = T1 * ( - dVbseff_dVe); /*fix expression below Wagner */ /*if (selfheat) dVfbeff2_dT = (1.0 - T1 - T2) * dVfbzb2_dT;*/ if (selfheat) dVfbeff2_dT = (1.0 - T1 - T2) * dVfbzb2_dT - T1*dVbseff_dT; else dVfbeff2_dT = 0.0; } /* end v4.1 */ T0 = (Vgs_eff - Vbseff - Vfbzb) / Tox; /* LFW_FD fix/add next 4 lines */ dT0_dVg = (dVgs_eff_dVg - dVbseff_dVg) /Tox; dT0_dVd = - dVbseff_dVd /Tox; dT0_dVb = - dVbseff_dVb /Tox; dT0_dVe = - dVbseff_dVe /Tox; tmp = T0 * pParam->B4SOIacde; if ((-EXPL_THRESHOLD < tmp) && (tmp < EXPL_THRESHOLD)) { Tcen = pParam->B4SOIldeb * exp(tmp); /* LFW_FD fix/add next 5 lines */ TL1 = pParam->B4SOIacde * Tcen; dTcen_dVg = TL1 * dT0_dVg; dTcen_dVd = TL1 * dT0_dVd; dTcen_dVb = TL1 * dT0_dVb; dTcen_dVe = TL1 * dT0_dVe; if (selfheat) /* fix below expression Wagner */ /*dTcen_dT = -Tcen * pParam->B4SOIacde * dVfbzb_dT / Tox; */ dTcen_dT = Tcen * pParam->B4SOIacde * (dVgs_eff_dT-dVbseff_dT-dVfbzb_dT) / Tox; else dTcen_dT = 0; } else if (tmp <= -EXPL_THRESHOLD) { Tcen = pParam->B4SOIldeb * MIN_EXPL; dTcen_dVg = dTcen_dVb = dTcen_dVd = dTcen_dVe = dTcen_dT = 0.0; /* LFW_FD enhance line */ } else { Tcen = pParam->B4SOIldeb * MAX_EXPL; dTcen_dVg = dTcen_dVb = dTcen_dVd = dTcen_dVe = dTcen_dT = 0.0; /* LFW_FD enhance line */ } /*LINK = 1.0e-3 * (toxe - model->B4SOIdtoxcv); v2.2.3 */ LINK = 1.0e-3 * model->B4SOItoxp; V3 = pParam->B4SOIldeb - Tcen - LINK; V4 = sqrt(V3 * V3 + 4.0 * LINK * pParam->B4SOIldeb); Tcen = pParam->B4SOIldeb - 0.5 * (V3 + V4); T1 = 0.5 * (1.0 + V3 / V4); /* v4.1 small Tcen can introduce numerical issue */ if (Tcen < 1e-15) { Tcen = 1e-15; T1 = 0; } /* end */ dTcen_dVg *= T1; dTcen_dVb *= T1; dTcen_dVd *= T1; /* LFW_FD new line */ dTcen_dVe *= T1; /* LFW_FD new line */ if (selfheat) dTcen_dT *= T1; else dTcen_dT = 0; /* v4.1 */ if (here->B4SOIagbcp2 > 0) { T0 = (Vgs_eff2 - Vbseff - Vfbzb2) / Tox; /* LFW_FD fix/add next 4 lines */ dT0_dVg = (dVgs_eff2_dVg - dVbseff_dVg) / Tox; dT0_dVd = -dVbseff_dVd / Tox; dT0_dVb = -dVbseff_dVb / Tox; dT0_dVe = -dVbseff_dVe / Tox; tmp = T0 * pParam->B4SOIacde; if ((-EXPL_THRESHOLD < tmp) && (tmp < EXPL_THRESHOLD)) { Tcen2 = pParam->B4SOIldeb * exp(tmp); /* LFW_FD fix/add next 4 lines */ dTcen2_dVg = pParam->B4SOIacde * Tcen2 * dT0_dVg; dTcen2_dVd = pParam->B4SOIacde * Tcen2 * dT0_dVd; dTcen2_dVb = pParam->B4SOIacde * Tcen2 * dT0_dVb; dTcen2_dVe = pParam->B4SOIacde * Tcen2 * dT0_dVe; if (selfheat) dTcen2_dT = -Tcen2 * pParam->B4SOIacde * dVfbzb2_dT / Tox; else dTcen2_dT = 0; } else if (tmp <= -EXPL_THRESHOLD) { Tcen2 = pParam->B4SOIldeb * MIN_EXPL; dTcen2_dVg = dTcen2_dVd = dTcen2_dVb = dTcen2_dVe = dTcen2_dT = 0.0; /* LFW_FD enhance line */ } else { Tcen2 = pParam->B4SOIldeb * MAX_EXPL; dTcen2_dVg = dTcen2_dVd = dTcen2_dVb = dTcen2_dVe = dTcen2_dT = 0.0; /* LFW_FD enhance line */ } V3 = pParam->B4SOIldeb - Tcen2 - LINK; V4 = sqrt(V3 * V3 + 4.0 * LINK * pParam->B4SOIldeb); Tcen2 = pParam->B4SOIldeb - 0.5 * (V3 + V4); T1 = 0.5 * (1.0 + V3 / V4); if (Tcen2 < 1e-15) { Tcen2 = 1e-15; T1 = 0; } dTcen2_dVg *= T1; dTcen2_dVb *= T1; dTcen2_dVd *= T1; /* LFW_FD new line */ dTcen2_dVe *= T1; /* LFW_FD new line */ if (selfheat) dTcen2_dT *= T1; else dTcen2_dT = 0; } /* end v4.1 */ Ccen = epssub / Tcen; T2 = Cox / (Cox + Ccen); Coxeff = T2 * Ccen; T3 = -Ccen / Tcen; /* LFW_FD fix/add next 5 lines */ TL1 = T2 * T2 * T3; dCoxeff_dVg = TL1 * dTcen_dVg; dCoxeff_dVd = TL1 * dTcen_dVd; dCoxeff_dVb = TL1 * dTcen_dVb; dCoxeff_dVe = TL1 * dTcen_dVe; if (selfheat) /*fix expression below Wagner */ /*dCoxeff_dT = T3 * dTcen_dT * (T2 - Coxeff / (Cox + Ccen));*/ dCoxeff_dT = - Coxeff * T2 * dTcen_dT / Tcen; else dCoxeff_dT = 0; /* v4.1 */ if ((here->B4SOIsoiMod != 2) && /* Bug fix #10 Jun 09 'opposite type Q/C evaluated only if bodymod=1' */ (here->B4SOIbodyMod != 0) && here->B4SOIagbcp2 > 0) { /* Ccen2 = EPSSI / Tcen2; */ /* Bug Fix # 30 Jul09 EPSSI changed to epssub */ Ccen2 = epssub / Tcen2; T2 = Cox / (Cox + Ccen2); Coxeff2 = T2 * Ccen2; T3 = -Ccen2 / Tcen2; /* LFW_FD fix/add next 5 lines */ TL1 = T2 * T2 * T3; dCoxeff2_dVg = TL1 * dTcen2_dVg; dCoxeff2_dVd = TL1 * dTcen2_dVd; dCoxeff2_dVb = TL1 * dTcen2_dVb; dCoxeff2_dVe = TL1 * dTcen2_dVe; if (selfheat) /*fix expression below Wagner */ /*dCoxeff2_dT = T3 * dTcen2_dT * (T2 - Coxeff2 / (Cox + Ccen2));*/ dCoxeff2_dT = - Coxeff2 * T2 * dTcen2_dT / Tcen2; else dCoxeff2_dT = 0; } /* end v4.1 */ CoxWLcenb = CoxWLb * Coxeff / Cox; if (selfheat) dCoxWLcenb_dT = CoxWLb * dCoxeff_dT / Cox; else dCoxWLcenb_dT = 0; /* v4.1 */ if (here->B4SOIagbcp2 > 0) { CoxWLcenb2 = CoxWLb2 * Coxeff2 / Cox; if (selfheat) dCoxWLcenb2_dT = CoxWLb2 * dCoxeff2_dT / Cox; else dCoxWLcenb2_dT = 0; } /* end v4.1 */ Qac0 = CoxWLcenb * (Vfbeff - Vfbzb); QovCox = Qac0 / Coxeff; /* LFW_FD fix/add next 4 lines */ dQac0_dVg = CoxWLcenb * dVfbeff_dVg + QovCox * dCoxeff_dVg; dQac0_dVb = CoxWLcenb * dVfbeff_dVb + QovCox * dCoxeff_dVb; dQac0_dVd = CoxWLcenb * dVfbeff_dVd + QovCox * dCoxeff_dVd; dQac0_dVe = CoxWLcenb * dVfbeff_dVe + QovCox * dCoxeff_dVe; if (selfheat) dQac0_dT = CoxWLcenb * (dVfbeff_dT - dVfbzb_dT) + dCoxWLcenb_dT * (Vfbeff - Vfbzb); else dQac0_dT = 0.0; /* v4.1 */ if ((here->B4SOIsoiMod != 2) && /* Bug fix #10 Jun 09 'opposite type Q/C evaluated only if bodymod=1' */ (here->B4SOIbodyMod != 0) && here->B4SOIagbcp2 > 0) { Qac02 = CoxWLcenb2 * (Vfbeff2 - Vfbzb2); QovCox2 = Qac02 / Coxeff2; /* LFW_FD fix/add next 4 lines */ dQac02_dVg = CoxWLcenb2 * dVfbeff2_dVg + QovCox2 * dCoxeff2_dVg; dQac02_dVd = CoxWLcenb2 * dVfbeff2_dVd + QovCox2 * dCoxeff2_dVd; dQac02_dVb = CoxWLcenb2 * dVfbeff2_dVb + QovCox2 * dCoxeff2_dVb; dQac02_dVe = CoxWLcenb2 * dVfbeff2_dVe + QovCox2 * dCoxeff2_dVe; if (selfheat) dQac02_dT = CoxWLcenb2 * (dVfbeff2_dT - dVfbzb2_dT) + dCoxWLcenb2_dT * (Vfbeff2 - Vfbzb2); else dQac02_dT = 0.0; Qac0 += Qac02; dQac0_dT += dQac02_dT; /* new line Wagner */ } /* end v4.1 */ T0 = 0.5 * pParam->B4SOIk1ox; T3 = Vgs_eff - Vfbeff - Vbseff - Vgsteff; if (pParam->B4SOIk1ox == 0.0) { T1 = 0.0; T2 = 0.0; } else if (T3 < 0.0) { T1 = T0 + T3 / pParam->B4SOIk1ox; T2 = CoxWLcenb; } else { T1 = sqrt(T0 * T0 + T3); T2 = CoxWLcenb * T0 / T1; } Qsub0 = CoxWLcenb * pParam->B4SOIk1ox * (T1 - T0); QovCox = Qsub0 / Coxeff; /* LFW_FD fix/add next 4 lines */ dQsub0_dVg = T2 * (dVgs_eff_dVg - dVfbeff_dVg - dVbseff_dVg - dVgsteff_dVg) + QovCox * dCoxeff_dVg; dQsub0_dVd = -T2 * (dVfbeff_dVd + dVbseff_dVd + dVgsteff_dVd) + QovCox * dCoxeff_dVd; dQsub0_dVb = -T2 * (dVfbeff_dVb + dVbseff_dVb + dVgsteff_dVb) + QovCox * dCoxeff_dVb; dQsub0_dVe = -T2 * (dVfbeff_dVe + dVbseff_dVe + dVgsteff_dVe) + QovCox * dCoxeff_dVe; if (selfheat) /*fix 1st line of expression below Wagner */ /*dQsub0_dT = -T2 * (dVfbeff_dT + dVgsteff_dT)*/ dQsub0_dT = T2 * (dVgs_eff_dT - dVfbeff_dT - dVbseff_dT - dVgsteff_dT) + dCoxWLcenb_dT * pParam->B4SOIk1ox * (T1 - T0); else dQsub0_dT = 0.0; /* v4.1 */ if ((here->B4SOIsoiMod != 2) && /* Bug fix #10 Jun 09 'opposite type Q/C evaluated only if bodymod=1' */ (here->B4SOIbodyMod != 0) && here->B4SOIagbcp2 > 0) { T3 = Vgs_eff2 - Vfbeff2 - Vbseff - Vgsteff2; if (pParam->B4SOIk1ox == 0.0) { T1 = 0.0; T2 = 0.0; } else if (T3 < 0.0) { T1 = T0 + T3 / pParam->B4SOIk1ox; T2 = CoxWLcenb2; } else { T1 = sqrt(T0 * T0 + T3); T2 = CoxWLcenb2 * T0 / T1; } Qsub02 = CoxWLcenb2 * pParam->B4SOIk1ox * (T1 - T0); QovCox2 = Qsub02 / Coxeff2; /* LFW_FD fix/add next 4 lines */ dQsub02_dVg = T2 * (dVgs_eff2_dVg - dVfbeff2_dVg - dVbseff_dVg - dVgsteff2_dVg) + QovCox2 * dCoxeff2_dVg; dQsub02_dVd = -T2 * (dVfbeff2_dVd + dVbseff_dVd + dVgsteff2_dVd) + QovCox2 * dCoxeff2_dVd; dQsub02_dVb = -T2 * (dVfbeff2_dVb + dVbseff_dVb + dVgsteff2_dVb) + QovCox2 * dCoxeff2_dVb; dQsub02_dVe = -T2 * (dVfbeff2_dVe + dVbseff_dVe + dVgsteff2_dVe) + QovCox2 * dCoxeff2_dVe; if (selfheat) dQsub02_dT = -T2 * (dVfbeff2_dT + dVgsteff2_dT) + dCoxWLcenb2_dT * pParam->B4SOIk1ox * (T1 - T0); else dQsub02_dT = 0.0; Qsub0 += Qsub02; dQsub0_dT += dQsub02_dT; /* new line Wagner */ } /* end v4.1 */ } /* v3.1 */ /* Gate-bias dependent delta Phis begins */ if (pParam->B4SOIk1ox <= 0.0) { Denomi = 0.25 * pParam->B4SOImoin * Vtm; T0 = 0.5 * pParam->B4SOIsqrtPhi; } else { Denomi = pParam->B4SOImoin * Vtm * pParam->B4SOIk1ox * pParam->B4SOIk1ox; T0 = pParam->B4SOIk1ox * pParam->B4SOIsqrtPhi; } T1 = 2.0 * T0 + Vgsteff; DeltaPhi = Vtm * log(1.0 + T1 * Vgsteff / Denomi); /* LFW_FD fix/add next 5 lines */ dDeltaPhi_dVg = 2.0 * Vtm * (T1 -T0) / (Denomi + T1 * Vgsteff) * dVgsteff_dVg; dDeltaPhi_dVd = 2.0 * Vtm * (T1 -T0) / (Denomi + T1 * Vgsteff) * dVgsteff_dVd; dDeltaPhi_dVb = 2.0 * Vtm * (T1 -T0) / (Denomi + T1 * Vgsteff) * dVgsteff_dVb; dDeltaPhi_dVe = 2.0 * Vtm * (T1 -T0) / (Denomi + T1 * Vgsteff) * dVgsteff_dVe; DeltaPhi2 = dDeltaPhi2_dVg = dDeltaPhi2_dVd = dDeltaPhi2_dVb = dDeltaPhi2_dVe = 0.0; /* flexilint */ /* 7 new lines Wagner */ if (selfheat) { TL1 = 1.0 + T1 * Vgsteff / Denomi; dTL1_dT = (2*(T0+Vgsteff)*dVgsteff_dT/Denomi) - (T1 * Vgsteff / (Denomi*Vtm))*dVtm_dT; dDeltaPhi_dT = dVtm_dT * log(TL1) + (Vtm/TL1)*dTL1_dT; } else dDeltaPhi_dT = 0.0; /* v4.1 */ if (here->B4SOIagbcp2 > 0) { T1 = 2.0 * T0 + Vgsteff2; DeltaPhi2 = Vtm * log(1.0 + T1 * Vgsteff2 / Denomi); /* LFW_FD fix/add next 4 lines */ dDeltaPhi2_dVg = 2.0 * Vtm * (T1 -T0) / (Denomi + T1 * Vgsteff2) * dVgsteff2_dVg; dDeltaPhi2_dVd = 2.0 * Vtm * (T1 -T0) / (Denomi + T1 * Vgsteff2) * dVgsteff2_dVd; dDeltaPhi2_dVb = 2.0 * Vtm * (T1 -T0) / (Denomi + T1 * Vgsteff2) * dVgsteff2_dVb; dDeltaPhi2_dVe = 2.0 * Vtm * (T1 -T0) / (Denomi + T1 * Vgsteff2) * dVgsteff2_dVe; /* 7 new lines Wagner */ if (selfheat) { TL1 = 1.0 + T1 * Vgsteff2 / Denomi; dTL1_dT = (2*(T0+Vgsteff2)*dVgsteff2_dT/Denomi) - (T1 * Vgsteff2 / (Denomi*Vtm))*dVtm_dT; dDeltaPhi2_dT = dVtm_dT * log(TL1) + (Vtm/TL1)*dTL1_dT; } else dDeltaPhi2_dT = 0.0; } /* end v4.1 */ /* End of delta Phis */ /* v3.1.1 bug fix for discontinuity */ T3 = 4.0 * (Vth - Vfbzb - phi); T2 = sqrt(T3*T3 + 0.0001); T5 = 0.5 * (1 + T3/T2); T4 = 0.5 * (T3 + T2); Tox += Tox; T0 = (Vgsteff + T4) / Tox; tmp = exp(0.7 * log(T0)); T1 = 1.0 + tmp; T2 = 0.7 * tmp / (T0 * Tox); Tcen = 1.9e-9 / T1; /* LFW_FD fix/add next 5 lines */ TL1 = dTcen_dVg = -Tcen * T2 / T1; dTcen_dVg = TL1 * (T5 * 4.0 * dVth_dVg + dVgsteff_dVg); dTcen_dVd = TL1 * (T5 * 4.0 * dVth_dVd + dVgsteff_dVd); dTcen_dVb = TL1 * (T5 * 4.0 * dVth_dVb + dVgsteff_dVb); dTcen_dVe = TL1 * (T5 * 4.0 * dVth_dVe + dVgsteff_dVe); if (selfheat) /*fix below expression Wagner */ /*dTcen_dT = -Tcen * T2 / T1 * (T5 * 4.0 * (dVth_dT - dVfbzb_dT) + dVgsteff_dT);*/ dTcen_dT = -Tcen * T2 / T1 * (T5 * 4.0 * (dVth_dT - dVfbzb_dT - dphi_dT) + dVgsteff_dT); else dTcen_dT = 0; Ccen = epssub / Tcen; T0 = Cox / (Cox + Ccen); Coxeff = T0 * Ccen; T1 = -Ccen / Tcen; /* LFW_FD fix/add next 5 lines */ TL1 = dCoxeff_dVg = T0 * T0 * T1; dCoxeff_dVg = TL1 * dTcen_dVg; dCoxeff_dVd = TL1 * dTcen_dVd; dCoxeff_dVb = TL1 * dTcen_dVb; dCoxeff_dVe = TL1 * dTcen_dVe; if (selfheat) /*dCoxeff_dT = T1 * dTcen_dT * (T0 - Coxeff / (Cox + Ccen));*/ dCoxeff_dT = TL1 * dTcen_dT; /* LFW_FD fix line */ else dCoxeff_dT = 0; CoxWLcen = CoxWL * Coxeff / Cox; CoxWLcenb = CoxWLb * Coxeff / Cox; /* 3 new lines Wagner*/ if (selfheat) dCoxWLcenb_dT = CoxWLb * dCoxeff_dT / Cox; else dCoxWLcenb_dT = 0; /* v4.1 */ CoxWLcen2 = 0.0; /* flexilint */ if ((here->B4SOIsoiMod != 2) && /* Bug fix #10 Jun 09 'opposite type Q/C evaluated only if bodymod=1' */ (here->B4SOIbodyMod != 0) && here->B4SOIagbcp2 > 0) { /* T3 = 4.0 * (Vth + 1.12 - Vfbzb2 - phi); */ T3 = 4.0 * (Vth + eggbcp2 - Vfbzb2 - phi); /* bugfix v4.3.1 -Tanvir */ T2 = sqrt(T3*T3 + 0.0001); T5 = 0.5 * (1 + T3/T2); T4 = 0.5 * (T3 + T2); /* Tox += Tox; */ T0 = (Vgsteff2 + T4) / Tox; tmp = exp(0.7 * log(T0)); T1 = 1.0 + tmp; T2 = 0.7 * tmp / (T0 * Tox); Tcen2 = 1.9e-9 / T1; /* LFW_FD fix/add next 5 lines */ TL1 = dTcen2_dVg = -Tcen2 * T2 / T1; dTcen2_dVg = TL1 * (T5 * 4.0 * dVth_dVg + dVgsteff2_dVg); dTcen2_dVd = TL1 * (T5 * 4.0 * dVth_dVd + dVgsteff2_dVd); dTcen2_dVb = TL1 * (T5 * 4.0 * dVth_dVb + dVgsteff2_dVb); dTcen2_dVe = TL1 * (T5 * 4.0 * dVth_dVe + dVgsteff2_dVe); if (selfheat) /*fix below expression Wagner */ /*dTcen2_dT = -Tcen2 * T2 / T1 * (T5 * 4.0 * (dVth_dT - dVfbzb2_dT) + dVgsteff2_dT); */ dTcen2_dT = -Tcen2 * T2 / T1 * (T5 * 4.0 * (dVth_dT - dVfbzb2_dT - dphi_dT) + dVgsteff2_dT); else dTcen2_dT = 0; /*Ccen2 = EPSSI / Tcen2;*//*Bug Fix # 30 Jul09*/ Ccen2 = epssub/ Tcen2; T0 = Cox / (Cox + Ccen2); Coxeff2 = T0 * Ccen2; T1 = -Ccen2 / Tcen2; /* LFW_FD fix/add next 5 lines */ TL1 = dCoxeff2_dVg = T0 * T0 * T1; dCoxeff2_dVg = TL1 * dTcen2_dVg; dCoxeff2_dVd = TL1 * dTcen2_dVd; dCoxeff2_dVb = TL1 * dTcen2_dVb; dCoxeff2_dVe = TL1 * dTcen2_dVe; if (selfheat) dCoxeff2_dT = T1 * dTcen2_dT * (T0 - Coxeff2 / (Cox + Ccen2)); else dCoxeff2_dT = 0; CoxWLcen2 = CoxWL2 * Coxeff2 / Cox; CoxWLcenb2 = CoxWLb2 * Coxeff2 / Cox; /* 3 new lines Wagner */ if (selfheat) dCoxWLcenb2_dT = CoxWLb2 * dCoxeff2_dT / Cox; else dCoxWLcenb2_dT = 0; } /* end v4.1 */ AbulkCV = Abulk0 * pParam->B4SOIabulkCVfactor; /* LFW_FD fix/add next 4 lines */ dAbulkCV_dVg = pParam->B4SOIabulkCVfactor * dAbulk0_dVg; dAbulkCV_dVb = pParam->B4SOIabulkCVfactor * dAbulk0_dVb; dAbulkCV_dVd = pParam->B4SOIabulkCVfactor * dAbulk0_dVd; dAbulkCV_dVe = pParam->B4SOIabulkCVfactor * dAbulk0_dVe; /* 3 new lines Wagner */ if (selfheat) dAbulkCV_dT = dAbulk0_dT * pParam->B4SOIabulkCVfactor; else dAbulkCV_dT = 0; VdsatCV = (Vgsteff - DeltaPhi) / AbulkCV; /* LFW_FD add next 4 lines */ dVdsatCV_dVg = (dVgsteff_dVg - dDeltaPhi_dVg - VdsatCV * dAbulkCV_dVg) / AbulkCV; dVdsatCV_dVd = (dVgsteff_dVd - dDeltaPhi_dVd - VdsatCV * dAbulkCV_dVd) / AbulkCV; dVdsatCV_dVb = (dVgsteff_dVb - dDeltaPhi_dVb - VdsatCV * dAbulkCV_dVb) / AbulkCV; dVdsatCV_dVe = (dVgsteff_dVe - dDeltaPhi_dVe - VdsatCV * dAbulkCV_dVe) / AbulkCV; V4 = VdsatCV - Vds - DELTA_4; T0 = sqrt(V4 * V4 + 4.0 * DELTA_4 * VdsatCV); VdseffCV = VdsatCV - 0.5 * (V4 + T0); T1 = 0.5 * (1.0 + V4 / T0); T2 = DELTA_4 / T0; T3 = (1.0 - T1 - T2) / AbulkCV; T4 = T3 * ( 1.0 - dDeltaPhi_dVg); /* LFW_FD fix/add next 4 lines */ dVdseffCV_dVg = (1.0 - T1 - T2) * dVdsatCV_dVg; dVdseffCV_dVd = (1.0 - T1 - T2) * dVdsatCV_dVd + T1; dVdseffCV_dVb = (1.0 - T1 - T2) * dVdsatCV_dVb; dVdseffCV_dVe = (1.0 - T1 - T2) * dVdsatCV_dVe; /* 10 new lines Wagner */ if (selfheat) { dVdsatCV_dT = (dVgsteff_dT-dDeltaPhi_dT)/AbulkCV -VdsatCV*dAbulkCV_dT/AbulkCV; dTL1_dT = (V4 + 2.0 * DELTA_4) * dVdsatCV_dT / T0; dVdseffCV_dT = 0.5*dVdsatCV_dT - 0.5*dTL1_dT; } else { dVdsatCV_dT = 0; dVdseffCV_dT = 0; } T0 = AbulkCV * VdseffCV; T1 = Vgsteff - DeltaPhi; T2 = 12.0 * (T1 - 0.5 * T0 + 1.0e-20); T3 = T0 / T2; T4 = 1.0 - 12.0 * T3 * T3; T5 = AbulkCV * (6.0 * T0 * (4.0 * T1 - T0) / (T2 * T2) - 0.5); T6 = T5 * VdseffCV / AbulkCV; /* LFW_FD add next 16 lines */ dT0_dVg = dAbulkCV_dVg * VdseffCV + AbulkCV * dVdseffCV_dVg; dT0_dVd = dAbulkCV_dVd * VdseffCV + AbulkCV * dVdseffCV_dVd; dT0_dVb = dAbulkCV_dVb * VdseffCV + AbulkCV * dVdseffCV_dVb; dT0_dVe = dAbulkCV_dVe * VdseffCV + AbulkCV * dVdseffCV_dVe; dT1_dVg = dVgsteff_dVg - dDeltaPhi_dVg; dT1_dVd = dVgsteff_dVd - dDeltaPhi_dVd; dT1_dVb = dVgsteff_dVb - dDeltaPhi_dVb; dT1_dVe = dVgsteff_dVe - dDeltaPhi_dVe; dT2_dVg = 12.0 * (dT1_dVg - 0.5 * dT0_dVg); dT2_dVd = 12.0 * (dT1_dVd - 0.5 * dT0_dVd); dT2_dVb = 12.0 * (dT1_dVb - 0.5 * dT0_dVb); dT2_dVe = 12.0 * (dT1_dVe - 0.5 * dT0_dVe); dT3_dVg = (dT0_dVg - T3 * dT2_dVg) / T2; dT3_dVd = (dT0_dVd - T3 * dT2_dVd) / T2; dT3_dVb = (dT0_dVb - T3 * dT2_dVb) / T2; dT3_dVe = (dT0_dVe - T3 * dT2_dVe) / T2; qgate1 = qinv = qgate = qinoi = CoxWLcen * (T1 - T0 * (0.5 - T3)); /* enhanced line Wagner */ QovCox = qgate / Coxeff; /* LFW_FD fix/add next 4 lines */ Cgg1 = CoxWLcen * (dT1_dVg - dT0_dVg * (0.5 - T3) + T0 * dT3_dVg) + QovCox * dCoxeff_dVg; Cgd1 = CoxWLcen * (dT1_dVd - dT0_dVd * (0.5 - T3) + T0 * dT3_dVd) + QovCox * dCoxeff_dVd; Cgb1 = CoxWLcen * (dT1_dVb - dT0_dVb * (0.5 - T3) + T0 * dT3_dVb) + QovCox * dCoxeff_dVb; Cge1 = CoxWLcen * (dT1_dVe - dT0_dVe * (0.5 - T3) + T0 * dT3_dVe) + QovCox * dCoxeff_dVe; /* 10 new lines Wagner */ if (selfheat) { dTL1_dT = AbulkCV * dVdseffCV_dT + dAbulkCV_dT * VdseffCV; dTL2_dT = 12 * (dVgsteff_dT - dDeltaPhi_dT - 0.5*dTL1_dT); dTL3_dT = dTL1_dT/T2 - (T3/T2)*dTL2_dT; dqgate_dT = (qgate * dCoxeff_dT / Coxeff) + CoxWLcen * (dVgsteff_dT - dDeltaPhi_dT - dTL1_dT*(0.5-T3) + T0*dTL3_dT); } else dqgate_dT = 0; /* LFW_FD 2 new lines per flexilint */ T02 = T12 = T22 = T52 = 0.0; /* flexilint */ Cgg12 = Cgd12 = Cgb12 = Cge12 = 0.0; /* v4.1 */ if ((here->B4SOIsoiMod != 2) && /* Bug fix #10 Jun 09 'opposite type Q/C evaluated only if bodymod=1' */ (here->B4SOIbodyMod != 0) && here->B4SOIagbcp2 > 0) { VdsatCV2 = (Vgsteff2 - DeltaPhi2) / AbulkCV; /* LFW_FD add next 4 lines */ dVdsatCV2_dVg = (dVgsteff2_dVg - dDeltaPhi2_dVg - VdsatCV2 * dAbulkCV_dVg) / AbulkCV; dVdsatCV2_dVd = (dVgsteff2_dVd - dDeltaPhi2_dVd - VdsatCV2 * dAbulkCV_dVd) / AbulkCV; dVdsatCV2_dVb = (dVgsteff2_dVb - dDeltaPhi2_dVb - VdsatCV2 * dAbulkCV_dVb) / AbulkCV; dVdsatCV2_dVe = (dVgsteff2_dVe - dDeltaPhi2_dVe - VdsatCV2 * dAbulkCV_dVe) / AbulkCV; V4 = VdsatCV2 - Vds - DELTA_4; T02 = sqrt(V4 * V4 + 4.0 * DELTA_4 * VdsatCV2); VdseffCV2 = VdsatCV2 - 0.5 * (V4 + T02); T12 = 0.5 * (1.0 + V4 / T02); T22 = DELTA_4 / T02; T3 = (1.0 - T12 - T22) / AbulkCV; T4 = T3 * ( 1.0 - dDeltaPhi2_dVg); /* LFW_FD fix/add next 4 lines */ dVdseffCV2_dVg = (1.0 - T12 - T22) * dVdsatCV2_dVg; dVdseffCV2_dVd = (1.0 - T12 - T22) * dVdsatCV2_dVd + T12; dVdseffCV2_dVb = (1.0 - T12 - T22) * dVdsatCV2_dVb; dVdseffCV2_dVe = (1.0 - T12 - T22) * dVdsatCV2_dVe; /* 10 new lines Wagner */ if (selfheat) { dVdsatCV2_dT = (dVgsteff2_dT-dDeltaPhi2_dT)/AbulkCV -VdsatCV2*dAbulkCV_dT/AbulkCV; dTL1_dT = (V4 + 2.0 * DELTA_4) * dVdsatCV2_dT / T02; dVdseffCV2_dT = 0.5*dVdsatCV2_dT - 0.5*dTL1_dT; } else { dVdsatCV2_dT = 0; dVdseffCV2_dT = 0; } T02 = AbulkCV * VdseffCV2; T12 = Vgsteff2 - DeltaPhi2; T22 = 12.0 * (T12 - 0.5 * T02 + 1.0e-20); T3 = T02 / T22; T4 = 1.0 - 12.0 * T3 * T3; T52 = AbulkCV * (6.0 * T02 * (4.0 * T12 - T02) / (T22 * T22) - 0.5); T6 = T52 * VdseffCV2 / AbulkCV; /* LFW_FD add next 16 lines */ dT02_dVg = dAbulkCV_dVg * VdseffCV2 + AbulkCV * dVdseffCV2_dVg; dT02_dVd = dAbulkCV_dVd * VdseffCV2 + AbulkCV * dVdseffCV2_dVd; dT02_dVb = dAbulkCV_dVb * VdseffCV2 + AbulkCV * dVdseffCV2_dVb; dT02_dVe = dAbulkCV_dVe * VdseffCV2 + AbulkCV * dVdseffCV2_dVe; dT12_dVg = dVgsteff2_dVg - dDeltaPhi2_dVg; dT12_dVd = dVgsteff2_dVd - dDeltaPhi2_dVd; dT12_dVb = dVgsteff2_dVb - dDeltaPhi2_dVb; dT12_dVe = dVgsteff2_dVe - dDeltaPhi2_dVe; dT22_dVg = 12.0 * (dT12_dVg - 0.5 * dT02_dVg); dT22_dVd = 12.0 * (dT12_dVd - 0.5 * dT02_dVd); dT22_dVb = 12.0 * (dT12_dVb - 0.5 * dT02_dVb); dT22_dVe = 12.0 * (dT12_dVe - 0.5 * dT02_dVe); dT3_dVg = (dT02_dVg - T3 * dT22_dVg) / T22; dT3_dVd = (dT02_dVd - T3 * dT22_dVd) / T22; dT3_dVb = (dT02_dVb - T3 * dT22_dVb) / T22; dT3_dVe = (dT02_dVe - T3 * dT22_dVe) / T22; T7 = CoxWLcen2 * (T12 - T02 * (0.5 - T3)); qinv += T7; qgate = qinoi = qinv; QovCox2 = T7 / Coxeff2; /* LFW_FD fix/add next 4 lines */ Cgg12 = CoxWLcen2 * (dT12_dVg - dT02_dVg * (0.5 - T3) + T02 * dT3_dVg) + QovCox2 * dCoxeff2_dVg; Cgd12 = CoxWLcen2 * (dT12_dVd - dT02_dVd * (0.5 - T3) + T02 * dT3_dVd) + QovCox2 * dCoxeff2_dVd; Cgb12 = CoxWLcen2 * (dT12_dVb - dT02_dVb * (0.5 - T3) + T02 * dT3_dVb) + QovCox2 * dCoxeff2_dVb; Cge12 = CoxWLcen2 * (dT12_dVe - dT02_dVe * (0.5 - T3) + T02 * dT3_dVe) + QovCox2 * dCoxeff2_dVe; /* 11 new lines Wagner */ if (selfheat) { dTL1_dT = AbulkCV * dVdseffCV2_dT + dAbulkCV_dT * VdseffCV2; dTL2_dT = 12 * (dVgsteff2_dT - dDeltaPhi2_dT - 0.5*dTL1_dT); dTL3_dT = dTL1_dT/T22 - (T3/T22)*dTL2_dT; dqgate2_dT = (T7 * dCoxeff2_dT / Coxeff2) + CoxWLcen2 * (dVgsteff2_dT - dDeltaPhi2_dT - dTL1_dT*(0.5-T3) + T02*dTL3_dT); dqgate_dT += dqgate2_dT; } else dqgate_dT += 0; } /* end v4.1 */ /* v3.1 */ /* LFW_FD 2 new lines - flexilint */ Csg2 = Cbg12 = Cbd12 = Cbb12 = Cbe12 = 0; dqbulk_dT = 0; if (here->B4SOIsoiMod == 2) /* v3.2 */ /* ideal FD */ { qbulk = Cbg1 = Cbd1 = Cbb1 = Cbe1 = dqbulk_dT = 0; /* LFW_FD enhance line */ } else /* soiMod = 0 or 1 */ { T7 = 1.0 - AbulkCV; T8 = T2 * T2; T9 = 12.0 * T7 * T0 * T0 / (T8 * AbulkCV); T10 = T9 * (1.0 - dDeltaPhi_dVg); T11 = -T7 * T5 / AbulkCV; T12 = -(T9 * T1 / AbulkCV + VdseffCV * (0.5 - T0 / T2)); qbulk1 = qbulk = CoxWLcenb * T7 * (0.5 * VdseffCV - T0 * VdseffCV / T2); /* enhanced line Wagner */ QovCox = qbulk / Coxeff; /* LFW_FD fix/add next 4 derivatives */ Cbg1 = CoxWLcenb * T7 * (0.5 - T0 / T2) * dVdseffCV_dVg - CoxWLcenb * T7 * VdseffCV * ((dT0_dVg -T0 * dT2_dVg / T2) /T2) - CoxWLcenb * VdseffCV * (0.5 - T0 / T2) * dAbulkCV_dVg + QovCox * dCoxeff_dVg; Cbb1 = CoxWLcenb * T7 * (0.5 - T0 / T2) * dVdseffCV_dVb - CoxWLcenb * T7 * VdseffCV * ((dT0_dVb -T0 * dT2_dVb / T2) /T2) - CoxWLcenb * VdseffCV * (0.5 - T0 / T2) * dAbulkCV_dVb + QovCox * dCoxeff_dVb; Cbd1 = CoxWLcenb * T7 * (0.5 - T0 / T2) * dVdseffCV_dVd - CoxWLcenb * T7 * VdseffCV * ((dT0_dVd -T0 * dT2_dVd / T2) /T2) - CoxWLcenb * VdseffCV * (0.5 - T0 / T2) * dAbulkCV_dVd + QovCox * dCoxeff_dVd; Cbe1 = CoxWLcenb * T7 * (0.5 - T0 / T2) * dVdseffCV_dVe - CoxWLcenb * T7 * VdseffCV * ((dT0_dVe -T0 * dT2_dVe / T2) /T2) - CoxWLcenb * VdseffCV * (0.5 - T0 / T2) * dAbulkCV_dVe + QovCox * dCoxeff_dVe; /* 12 new lines Wagner */ if (selfheat) { dTL1_dT = AbulkCV * dVdseffCV_dT + dAbulkCV_dT * VdseffCV; dTL2_dT = 12 * (dVgsteff_dT - dDeltaPhi_dT - 0.5*dTL1_dT); TL3 = T0/T2; dTL3_dT = dTL1_dT/T2 - (TL3/T2)*dTL2_dT; TL4 = (0.5 * VdseffCV - T0 * VdseffCV / T2); dTL4_dT = (0.5 - T0/T2)*dVdseffCV_dT - VdseffCV*dTL3_dT; dqbulk_dT = dCoxWLcenb_dT * T7 * TL4 - CoxWLcenb * dAbulkCV_dT * TL4 + CoxWLcenb * T7 * dTL4_dT; } else dqbulk_dT = 0; /* v4.1 */ if ((here->B4SOIsoiMod != 2) && /* Bug fix #10 Jun 09 'opposite type Q/C evaluated only if bodymod=1' */ (here->B4SOIbodyMod != 0) && here->B4SOIagbcp2 > 0) { T8 = T22 * T22; T9 = 12.0 * T7 * T02 * T02 / (T8 * AbulkCV); T10 = T9 * (1.0 - dDeltaPhi2_dVg); T11 = -T7 * T52 / AbulkCV; T12 = -(T9 * (Vgsteff2 - DeltaPhi2) / AbulkCV + VdseffCV2 * (0.5 - T02 / T22)); qbulk2 = CoxWLcenb2 * T7 * (0.5 * VdseffCV2 - T02 * VdseffCV2 / T22); QovCox2 = qbulk2 / Coxeff2; /* LFW_FD fix/add next 4 derivatives */ Cbg12 = CoxWLcenb2 * T7 * (0.5 - T02 / T22) * dVdseffCV2_dVg - CoxWLcenb2 * T7 * VdseffCV2 * ((dT02_dVg -T02 * dT22_dVg / T22) /T22) - CoxWLcenb2 * VdseffCV2 * (0.5 - T02 / T22) * dAbulkCV_dVg + QovCox2 * dCoxeff2_dVg; Cbb12 = CoxWLcenb2 * T7 * (0.5 - T02 / T22) * dVdseffCV2_dVb - CoxWLcenb2 * T7 * VdseffCV2 * ((dT02_dVb -T02 * dT22_dVb / T22) /T22) - CoxWLcenb2 * VdseffCV2 * (0.5 - T02 / T22) * dAbulkCV_dVb + QovCox2 * dCoxeff2_dVb; Cbd12 = CoxWLcenb2 * T7 * (0.5 - T02 / T22) * dVdseffCV2_dVd - CoxWLcenb2 * T7 * VdseffCV2 * ((dT02_dVd -T02 * dT22_dVd / T22) /T22) - CoxWLcenb2 * VdseffCV2 * (0.5 - T02 / T22) * dAbulkCV_dVd + QovCox2 * dCoxeff2_dVd; Cbe12 = CoxWLcenb2 * T7 * (0.5 - T02 / T22) * dVdseffCV2_dVe - CoxWLcenb2 * T7 * VdseffCV2 * ((dT02_dVe -T02 * dT22_dVe / T22) /T22) - CoxWLcenb2 * VdseffCV2 * (0.5 - T02 / T22) * dAbulkCV_dVe + QovCox2 * dCoxeff2_dVe; /* 12 new lines Wagner */ if (selfheat) { dTL1_dT = AbulkCV * dVdseffCV2_dT + dAbulkCV_dT * VdseffCV2; dTL2_dT = 12 * (dVgsteff2_dT - dDeltaPhi2_dT - 0.5*dTL1_dT); TL3 = T02/T22; dTL3_dT = dTL1_dT/T22 - (TL3/T22)*dTL2_dT; TL4 = (0.5 * VdseffCV2 - T02 * VdseffCV2 / T22); dTL4_dT = (0.5 - T02/T22)*dVdseffCV2_dT - VdseffCV2*dTL3_dT; dqbulk2_dT = dCoxWLcenb2_dT * T7 * TL4 - CoxWLcenb2 * dAbulkCV_dT * TL4 + CoxWLcenb2 * T7 * dTL4_dT; } else dqbulk2_dT = 0; qbulk += qbulk2; dqbulk_dT += dqbulk2_dT; /* new line Wagner */ } /* end v4.1 */ } /* v3.1 */ Csg2 = Csd2 = Csb2 = Cse2 = 0.0; /* LFW_FD enhance line */ dqsrc2_dT = 0; /* new line Wagner */ if (model->B4SOIxpart > 0.5) { /* 0/100 partition */ qsrc = -CoxWLcen * (T1 / 2.0 + T0 / 4.0 - 0.5 * T0 * T0 / T2); /* 9 new lines Wagner */ if (selfheat) { dTL1_dT = AbulkCV * dVdseffCV_dT + dAbulkCV_dT * VdseffCV; dTL5_dT = dVgsteff_dT - dDeltaPhi_dT; dTL2_dT = 12 * (dVgsteff_dT - dDeltaPhi_dT - 0.5*dTL1_dT); dqsrc_dT = qsrc*dCoxeff_dT/Coxeff -CoxWLcen*(dTL5_dT/2.0 + dTL1_dT/4.0 - T0*dTL1_dT/T2 + 0.5*T0*T0*dTL2_dT/(T2*T2) ); } else dqsrc_dT = 0; QovCox = qsrc / Coxeff; T2 += T2; T3 = T2 * T2; T7 = -(0.25 - 12.0 * T0 * (4.0 * T1 - T0) / T3); T4 = -(0.5 + 24.0 * T0 * T0 / T3) * (1.0 - dDeltaPhi_dVg); T5 = T7 * AbulkCV; T6 = T7 * VdseffCV; /* LFW_FD fix/add next 4 derivatives */ Csg = QovCox * dCoxeff_dVg - CoxWLcen * (dT1_dVg / 2.0 + dT0_dVg / 4.0 - 2.0 * T0 * dT0_dVg / T2 + 2.0 * T0 * T0 * dT2_dVg / (T2 * T2)); Csd = QovCox * dCoxeff_dVd - CoxWLcen * (dT1_dVd / 2.0 + dT0_dVd / 4.0 - 2.0 * T0 * dT0_dVd / T2 + 2.0 * T0 * T0 * dT2_dVd / (T2 * T2)); Csb = QovCox * dCoxeff_dVb - CoxWLcen * (dT1_dVb / 2.0 + dT0_dVb / 4.0 - 2.0 * T0 * dT0_dVb / T2 + 2.0 * T0 * T0 * dT2_dVb / (T2 * T2)); Cse = QovCox * dCoxeff_dVe - CoxWLcen * (dT1_dVe / 2.0 + dT0_dVe / 4.0 - 2.0 * T0 * dT0_dVe / T2 + 2.0 * T0 * T0 * dT2_dVe / (T2 * T2)); /* v4.1 */ if ((here->B4SOIsoiMod != 2) && /* Bug fix #10 Jun 09 'opposite type Q/C evaluated only if bodymod=1' */ (here->B4SOIbodyMod != 0) && here->B4SOIagbcp2 > 0) { T12 = Vgsteff2 - DeltaPhi2; /* must restore for derivatives below*/ qsrc2 = -CoxWLcen2 * ( (Vgsteff2 - DeltaPhi2) / 2.0 + T02 / 4.0 - 0.5 * T02 * T02 / T22); /* CJB LFW */ /* 9 new lines Wagner */ if (selfheat) { dTL1_dT = AbulkCV * dVdseffCV2_dT + dAbulkCV_dT * VdseffCV2; dTL5_dT = dVgsteff2_dT - dDeltaPhi2_dT; dTL2_dT = 12 * (dVgsteff2_dT - dDeltaPhi2_dT - 0.5*dTL1_dT); dqsrc2_dT = qsrc2*dCoxeff2_dT/Coxeff2 -CoxWLcen2*(dTL5_dT/2.0 + dTL1_dT/4.0 - T02*dTL1_dT/T22 + 0.5*T02*T02*dTL2_dT/(T22*T22) ); } else dqsrc2_dT = 0; QovCox2 = qsrc2 / Coxeff2; T22 += T22; T3 = T22 * T22; T7 = -(0.25 - 12.0 * T02 * (4.0 * T12 - T02) / T3); T4 = -(0.5 + 24.0 * T02 * T02 / T3) * (1.0 - dDeltaPhi2_dVg); T5 = T7 * AbulkCV; T6 = T7 * VdseffCV2; /* LFW_FD fix/add next 4 derivatives */ Csg2 = QovCox2 * dCoxeff2_dVg - CoxWLcen2 * (dT12_dVg / 2.0 + dT02_dVg / 4.0 - 2.0 * T02 * dT02_dVg / T22 + 2.0 * T02 * T02 * dT22_dVg / (T22 * T22)); Csd2 = QovCox2 * dCoxeff2_dVd - CoxWLcen2 * (dT12_dVd / 2.0 + dT02_dVd / 4.0 - 2.0 * T02 * dT02_dVd / T22 + 2.0 * T02 * T02 * dT22_dVd / (T22 * T22)); Csb2 = QovCox2 * dCoxeff2_dVb - CoxWLcen2 * (dT12_dVb / 2.0 + dT02_dVb / 4.0 - 2.0 * T02 * dT02_dVb / T22 + 2.0 * T02 * T02 * dT22_dVb / (T22 * T22)); Cse2 = QovCox2 * dCoxeff2_dVe - CoxWLcen2 * (dT12_dVe / 2.0 + dT02_dVe / 4.0 - 2.0 * T02 * dT02_dVe / T22 + 2.0 * T02 * T02 * dT22_dVe / (T22 * T22)); qsrc += qsrc2; dqsrc_dT += dqsrc2_dT; /* new line Wagner */ } /* end v4.1 */ } else if (model->B4SOIxpart < 0.5) { /* 40/60 partition */ T2 = T2 / 12.0; T3 = 0.5 * CoxWLcen / (T2 * T2); T4 = T1 * (2.0 * T0 * T0 / 3.0 + T1 * (T1 - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T3 * T4; QovCox = qsrc / Coxeff; T8 = 4.0 / 3.0 * T1 * (T1 - T0) + 0.4 * T0 * T0; T5 = -2.0 * qsrc / T2 - T3 * (T1 * (3.0 * T1 - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0); T6 = AbulkCV * (qsrc / T2 + T3 * T8); T7 = T6 * VdseffCV / AbulkCV; /* LFW_FD add next 32 lines */ dT2_dVg = dT2_dVg / 12.0; dT2_dVd = dT2_dVd / 12.0; dT2_dVb = dT2_dVb / 12.0; dT2_dVe = dT2_dVe / 12.0; dT3_dVg = T3 * dCoxeff_dVg / Coxeff - 2.0 * T3 * T2 * dT2_dVg / (T2 * T2); dT3_dVd = T3 * dCoxeff_dVd / Coxeff - 2.0 * T3 * T2 * dT2_dVd / (T2 * T2); dT3_dVb = T3 * dCoxeff_dVb / Coxeff - 2.0 * T3 * T2 * dT2_dVb / (T2 * T2); dT3_dVe = T3 * dCoxeff_dVe / Coxeff - 2.0 * T3 * T2 * dT2_dVe / (T2 * T2); dT4_dVg = dT1_dVg * (2.0 * T0 * T0 / 3.0 + T1 * (T1 - 4.0 * T0 / 3.0)) + T1 * (4.0 * T0 * dT0_dVg / 3.0 + dT1_dVg * (T1 - 4.0 * T0 / 3.0) + T1 * (dT1_dVg - 4.0 * dT0_dVg /3.0)) - 2.0 * T0 * T0 * dT0_dVg / 5.0; dT4_dVd = dT1_dVd * (2.0 * T0 * T0 / 3.0 + T1 * (T1 - 4.0 * T0 / 3.0)) + T1 * (4.0 * T0 * dT0_dVd / 3.0 + dT1_dVd * (T1 - 4.0 * T0 / 3.0) + T1 * (dT1_dVd - 4.0 * dT0_dVd /3.0)) - 2.0 * T0 * T0 * dT0_dVd / 5.0; dT4_dVb = dT1_dVb * (2.0 * T0 * T0 / 3.0 + T1 * (T1 - 4.0 * T0 / 3.0)) + T1 * (4.0 * T0 * dT0_dVb / 3.0 + dT1_dVb * (T1 - 4.0 * T0 / 3.0) + T1 * (dT1_dVb - 4.0 * dT0_dVb /3.0)) - 2.0 * T0 * T0 * dT0_dVb / 5.0; dT4_dVe = dT1_dVe * (2.0 * T0 * T0 / 3.0 + T1 * (T1 - 4.0 * T0 / 3.0)) + T1 * (4.0 * T0 * dT0_dVe / 3.0 + dT1_dVe * (T1 - 4.0 * T0 / 3.0) + T1 * (dT1_dVe - 4.0 * dT0_dVe /3.0)) - 2.0 * T0 * T0 * dT0_dVe / 5.0; /* LFW_FD fix/add next 4 derivatives */ Csg = -(dT3_dVg * T4 + T3 * dT4_dVg); Csd = -(dT3_dVd * T4 + T3 * dT4_dVd); Csb = -(dT3_dVb * T4 + T3 * dT4_dVb); Cse = -(dT3_dVe * T4 + T3 * dT4_dVe); /* 13 new lines Wagner */ if (selfheat) { dTL1_dT = AbulkCV * dVdseffCV_dT + dAbulkCV_dT * VdseffCV; dTL5_dT = dVgsteff_dT - dDeltaPhi_dT; dTL2_dT = (dVgsteff_dT - dDeltaPhi_dT - 0.5*dTL1_dT); dTL3_dT = - 2*T3*dTL2_dT/T2 + T3*dCoxeff_dT/Coxeff; dTL4_dT = dTL5_dT * (2.0*T0*T0/3.0 + T1*(T1-4.0*T0/3.0)) + T1 * (4.0*T0*dTL1_dT/3.0 + dTL5_dT*(T1-4.0*T0/3.0) + T1*(dTL5_dT-4.0*dTL1_dT/3.0) ) - 2.0*T0*T0*dTL1_dT/5.0; dqsrc_dT = -T3*dTL4_dT - dTL3_dT*T4; } else dqsrc_dT += 0; /* v4.1 */ if ((here->B4SOIsoiMod != 2) && /* Bug fix #10 Jun 09 'opposite type Q/C evaluated only if bodymod=1' */ (here->B4SOIbodyMod != 0) && here->B4SOIagbcp2 > 0) { T12 = Vgsteff2 - DeltaPhi2; /* must restore for derivatives below*/ T22 = T22 / 12.0; T3 = 0.5 * CoxWLcen2 / (T22 * T22); T4 = T12 * (2.0 * T02 * T02 / 3.0 + T12 * (T12 - 4.0 * T02 / 3.0)) - 2.0 * T02 * T02 * T02 / 15.0; qsrc2 = -T3 * T4; QovCox2 = qsrc2 / Coxeff2; T8 = 4.0 / 3.0 * T12 * (T12 - T02) + 0.4 * T02 * T02; T5 = -2.0 * qsrc2 / T22 - T3 * (T12 * (3.0 * T12 - 8.0 * T02 / 3.0) + 2.0 * T02 * T02 / 3.0); T6 = AbulkCV * (qsrc2 / T22 + T3 * T8); T7 = T6 * VdseffCV2 / AbulkCV; /* LFW_FD add next 32 lines */ dT22_dVg = dT22_dVg / 12.0; dT22_dVd = dT22_dVd / 12.0; dT22_dVb = dT22_dVb / 12.0; dT22_dVe = dT22_dVe / 12.0; dT3_dVg = T3 * dCoxeff2_dVg / Coxeff2 - 2.0 * T3 * T22 * dT22_dVg / (T22 * T22); dT3_dVd = T3 * dCoxeff2_dVd / Coxeff2 - 2.0 * T3 * T22 * dT22_dVd / (T22 * T22); dT3_dVb = T3 * dCoxeff2_dVb / Coxeff2 - 2.0 * T3 * T22 * dT22_dVb / (T22 * T22); dT3_dVe = T3 * dCoxeff2_dVe / Coxeff2 - 2.0 * T3 * T22 * dT22_dVe / (T22 * T22); dT4_dVg = dT12_dVg * (2.0 * T02 * T02 / 3.0 + T12 * (T12 - 4.0 * T02 / 3.0)) + T12 * (4.0 * T02 * dT02_dVg / 3.0 + dT12_dVg * (T12 - 4.0 * T02 / 3.0) + T12 * (dT12_dVg - 4.0 * dT02_dVg /3.0)) - 2.0 * T02 * T02 * dT02_dVg / 5.0; dT4_dVd = dT12_dVd * (2.0 * T02 * T02 / 3.0 + T12 * (T12 - 4.0 * T02 / 3.0)) + T12 * (4.0 * T02 * dT02_dVd / 3.0 + dT12_dVd * (T12 - 4.0 * T02 / 3.0) + T12 * (dT12_dVd - 4.0 * dT02_dVd /3.0)) - 2.0 * T02 * T02 * dT02_dVd / 5.0; dT4_dVb = dT12_dVb * (2.0 * T02 * T02 / 3.0 + T12 * (T12 - 4.0 * T02 / 3.0)) + T12 * (4.0 * T02 * dT02_dVb / 3.0 + dT12_dVb * (T12 - 4.0 * T02 / 3.0) + T12 * (dT12_dVb - 4.0 * dT02_dVb /3.0)) - 2.0 * T02 * T02 * dT02_dVb / 5.0; dT4_dVe = dT12_dVe * (2.0 * T02 * T02 / 3.0 + T12 * (T12 - 4.0 * T02 / 3.0)) + T12 * (4.0 * T02 * dT02_dVe / 3.0 + dT12_dVe * (T12 - 4.0 * T02 / 3.0) + T12 * (dT12_dVe - 4.0 * dT02_dVe /3.0)) - 2.0 * T02 * T02 * dT02_dVe / 5.0; /* LFW_FD fix/add next 4 derivatives */ Csg2 = -(dT3_dVg * T4 + T3 * dT4_dVg); Csd2 = -(dT3_dVd * T4 + T3 * dT4_dVd); Csb2 = -(dT3_dVb * T4 + T3 * dT4_dVb); Cse2 = -(dT3_dVe * T4 + T3 * dT4_dVe); /* 14 new lines Wagner */ if (selfheat) { dTL1_dT = AbulkCV * dVdseffCV2_dT + dAbulkCV_dT * VdseffCV2; dTL5_dT = dVgsteff2_dT - dDeltaPhi2_dT; dTL2_dT = (dVgsteff2_dT - dDeltaPhi2_dT - 0.5*dTL1_dT); dTL3_dT = - 2*T3*dTL2_dT/T22 + T3*dCoxeff2_dT/Coxeff2; dTL4_dT = dTL5_dT * (2.0*T02*T02/3.0 + T12*(T12-4.0*T02/3.0)) + T12 * (4.0*T02*dTL1_dT/3.0 + dTL5_dT*(T12-4.0*T02/3.0) + T12*(dTL5_dT-4.0*dTL1_dT/3.0) ) - 2.0*T02*T02*dTL1_dT/5.0; dqsrc2_dT = -T3*dTL4_dT - dTL3_dT*T4; } else dqsrc_dT += 0; qsrc += qsrc2; dqsrc_dT += dqsrc2_dT; /* new line Wagner */ } /* end v4.1 */ } else { /* 50/50 partition */ qsrc = -0.5 * qgate; Csg = -0.5 * Cgg1; Csd = -0.5 * Cgd1; Csb = -0.5 * Cgb1; Cse = -0.5 * Cge1; /* LFW_FD new line */ /* v4.1 */ if ((here->B4SOIsoiMod != 2) && /* Bug fix #10 Jun 09 'opposite type Q/C evaluated only if bodymod=1' */ (here->B4SOIbodyMod != 0) && here->B4SOIagbcp2 > 0) { /* LFW_FD fix/add next 4 lines */ Csg2 = -0.5 * Cgg12; Csd2 = -0.5 * Cgd12; Csb2 = -0.5 * Cgb12; Cse2 = -0.5 * Cge12; } dqsrc_dT = -0.5 * dqgate_dT; /* new line Wagner */ /* end v4.1 */ } /* Backgate charge */ /* v3.1 */ if (here->B4SOIsoiMod == 2) /* v3.2 */ /* ideal FD */ { Qe1 = Ce1b = Ce1e = Ce1T = dQe1_dT = 0; } else /* soiMod = 0 or 1 */ { CboxWL = pParam->B4SOIkb1 * model->B4SOIfbody * Cbox * (pParam->B4SOIweffCV / here->B4SOInseg * here->B4SOInf /* bugfix_snps nf*/ * pParam->B4SOIleffCVbg + here->B4SOIaebcp); Qe1 = CboxWL * (Vesfb - Vbs); Ce1b = dQe1_dVb = -CboxWL; Ce1e = dQe1_dVe = CboxWL; if (selfheat) Ce1T = dQe1_dT = -CboxWL * dvfbb_dT; else Ce1T = dQe1_dT = 0.0; } /* v3.1 */ qgate += Qac0 + Qsub0 - qbulk; qbody = qbulk - Qac0 - Qsub0 - Qe1; qsub = Qe1; qdrn = -(qgate + qbody + qsub + qsrc); /* 8 new lines Wagner */ dqgate_dT += dQac0_dT + dQsub0_dT - dqbulk_dT; dqbody_dT = dqbulk_dT - dQac0_dT - dQsub0_dT - dQe1_dT; dqsub_dT = dQe1_dT; dqdrn_dT = -(dqgate_dT + dqbody_dT + dqsub_dT + dqsrc_dT); CgT = dqgate_dT; CbT = dqbody_dT; CsT = dqsrc_dT; CdT = dqdrn_dT; Cbg = Cbg1 - dQac0_dVg - dQsub0_dVg; /* LFW_FD fix/add next 3 lines */ Cbd = Cbd1 - dQac0_dVd - dQsub0_dVd; Cbb = Cbb1 - dQac0_dVb - dQsub0_dVb - Ce1b; Cbe = Cbe1 - dQac0_dVe - dQsub0_dVe - Ce1e; Cgg = Cgg1 - Cbg; Cgd = Cgd1 - Cbd; /* LFW_FD fix/add next 2 lines */ Cgb = Cgb1 - Cbb - Ce1b; Cge = Cge1 - Cbe - Ce1e; /* comment out next 4 lines Wagner */ /*if (selfheat) CgT = Cgg1 * dVgsteff_dT + dQac0_dT + dQsub0_dT; else CgT = 0.0;*/ /*Cgb *= dVbseff_dVb; */ /*Cbb *= dVbseff_dVb; */ /*Csb *= dVbseff_dVb; */ /* comment out next 2 lines Wagner */ /*if (selfheat) CsT = Csg * dVgsteff_dT; else CsT = 0.0;*/ /* v4.1 */ if ((here->B4SOIsoiMod != 2) && /* Bug fix #10 Jun 09 'opposite type Q/C evaluated only if bodymod=1' */ (here->B4SOIbodyMod != 0) && here->B4SOIagbcp2 > 0) { /* LFW_FD fix next 12 lines */ Cbg += Cbg12 - dQac02_dVg - dQsub02_dVg; Cbd += Cbd12 - dQac02_dVd - dQsub02_dVd; Cbb += Cbb12 - dQac02_dVb - dQsub02_dVb; Cbe += Cbe12 - dQac02_dVe - dQsub02_dVe; Cgg = Cgg1 + Cgg12 - Cbg; Cgd = Cgd1 + Cgd12 - Cbd; Cgb = Cgb1 + Cgb12 - Cbb - Ce1b; Cge = Cge1 + Cge12 - Cbe - Ce1e; Csg += Csg2; Csd += Csd2; Csb += Csb2; Cse += Cse2; } /* end v4.1 */ here->B4SOIcggb = Cgg; here->B4SOIcgsb = -(Cgg + Cgd + Cgb + Cge); /* LFW_FD fix line */ here->B4SOIcgdb = Cgd; here->B4SOIcgeb = Cge; /* LFW_FD fix line */ here->B4SOIcgT = CgT; here->B4SOIcbgb = Cbg; here->B4SOIcbsb = -(Cbg + Cbd + Cbb + Cbe); /* LFW_FD fix line */ here->B4SOIcbdb = Cbd; here->B4SOIcbeb = Cbe; /* LFW_FD fix line */ here->B4SOIcbT = CbT; here->B4SOIceT = Ce1T; here->B4SOIceeb = Ce1e ; here->B4SOIcdgb = -(Cgg + Cbg + Csg); here->B4SOIcddb = -(Cgd + Cbd + Csd); here->B4SOIcdeb = -(Cge + Cse + Cbe) - Ce1e; /* LFW_FD fix line */ here->B4SOIcdT = -(CgT+CbT+CsT) - Ce1T; here->B4SOIcdsb = Cgg + Cgd + Cgb + Cge /* LFW_FD fix expression */ + Cbg + Cbd + Cbb + Cbe + Ce1e + Csg + Csd + Csb + Cse + Ce1b; here->B4SOIqinv = -qinoi; } /* End of if capMod ==3 */ else { /* v4.0 */ Qsub0 = Qac0 = 0.0; qgate = qdrn = qsrc = qbody = qsub = 0.0; Cbg = Cbd = Cbb = 0.0; here->B4SOIcggb = here->B4SOIcgsb = here->B4SOIcgdb = 0.0; here->B4SOIcdgb = here->B4SOIcdsb = here->B4SOIcddb = 0.0; here->B4SOIcbgb = here->B4SOIcbsb = here->B4SOIcbdb = 0.0; } } here->B4SOIqgate = qgate; here->B4SOIqdrn = qdrn; here->B4SOIqbulk = qbody; here->B4SOIqsrc = qsrc; finished: /* returning Values to Calling Routine */ /* * COMPUTE EQUIVALENT DRAIN CURRENT SOURCE */ /* flexilint inits */ gcjdbs = gcjdT = 0.0; gcjsbs = gcjsT = 0.0; if (ChargeComputationNeeded) { /* Intrinsic S/D junction charge */ /* v3.1 */ if (here->B4SOIsoiMod == 2) /* v3.2 */ /* ideal FD */ { qjs = qjd = 0.0; /*gcjdds = gcjdbs = gcjdT = 0.0; v4.2 */ gcjdbs = gcjdT = 0.0; gcjsbs = gcjsT = 0.0; here->B4SOIcjsb = here->B4SOIcjdb = 0.0 /*v4.0*/; } else /* soiMod = 0 or 1 */ { PhiBSWG = model->B4SOIGatesidewallJctSPotential; dPhiBSWG_dT = -model->B4SOItpbswg; PhiBSWG += dPhiBSWG_dT * (Temp - model->B4SOItnom); MJSWG = model->B4SOIbodyJctGateSideSGradingCoeff; cjsbs = model->B4SOIunitLengthGateSidewallJctCapS * pParam->B4SOIwdiosCV * model->B4SOItsi * here->B4SOInf / 1e-7; /* bugfix_snps nf*/ dcjsbs_dT = cjsbs * model->B4SOItcjswg; cjsbs += dcjsbs_dT * (Temp - model->B4SOItnom); cjdbs = model->B4SOIunitLengthGateSidewallJctCapD * pParam->B4SOIwdiodCV * model->B4SOItsi * here->B4SOInf / 1e-7; /* bugfix_snps nf*/ dcjdbs_dT = cjdbs * model->B4SOItcjswgd; cjdbs += dcjdbs_dT * (Temp - model->B4SOItnom); DioMax = 0.9 * (PhiBSWG); /* arg = 1.0 - (Vbs > DioMax ? DioMax : Vbs) / PhiBSWG; */ /* Bug fix #6 Vbs evaluated taking consideration of Rbody Mode*/ if (here->B4SOIrbodyMod) arg = 1.0 - (vsbs > DioMax ? DioMax : vsbs) / PhiBSWG; /* Bug fix #6 */ else arg = 1.0 - (vbs > DioMax ? DioMax : vbs) / PhiBSWG; /* Bug fix #6 */ if (selfheat) darg_dT = (1 - arg) / PhiBSWG * dPhiBSWG_dT; else darg_dT = 1.0; /* flexilint */ if (MJSWG == 0.5) { dT3_dVb = 1.0 / sqrt(arg); if (selfheat) ddT3_dVb_dT = -0.5 * dT3_dVb / arg * darg_dT; else ddT3_dVb_dT = 1.0; /* flexilint */ } else { dT3_dVb = exp(-MJSWG * log(arg)); if (selfheat) ddT3_dVb_dT = -MJSWG * dT3_dVb / arg * darg_dT; else ddT3_dVb_dT = 1.0; /* flexilint */ } T3 = (1.0 - arg * dT3_dVb) * PhiBSWG / (1.0 - MJSWG); if (selfheat) dT3_dT = (1.0 - arg * dT3_dVb) * dPhiBSWG_dT / (1.0 - MJSWG) - (arg * ddT3_dVb_dT + darg_dT * dT3_dVb) * PhiBSWG / (1.0 - MJSWG); else dT3_dT = 1.0; /* flexilint */ /* if (vbs > DioMax) T3 += dT3_dVb * (vbs - DioMax); */ /* Bug fix #6 Vbs evaluated taking consideration of Rbody Mode*/ if (here->B4SOIrbodyMod) { if (vsbs > DioMax) /* Bug fix #6 */ T3 += dT3_dVb * (vsbs - DioMax); } else { if (vbs > DioMax) /* Bug fix #6 */ T3 += dT3_dVb * (vbs - DioMax); } if (here->B4SOImode > 0) { qjs = cjsbs * T3 + model->B4SOItt * Ibsdif * here->B4SOInf; gcjsbs = cjsbs * dT3_dVb + model->B4SOItt * dIbsdif_dVb * here->B4SOInf; /* 3 new lines */ if (selfheat) gcjsT = model->B4SOItt * dIbsdif_dT * here->B4SOInf + dcjsbs_dT * T3 + dT3_dT * cjsbs; else gcjsT = 0.0; } else { qjs = cjsbs * T3 + model->B4SOItt * Ibddif * here->B4SOInf; gcjsbs = cjsbs * dT3_dVb + model->B4SOItt * dIbddif_dVb * here->B4SOInf; /* 3 new lines */ if (selfheat) gcjsT = model->B4SOItt * dIbddif_dT * here->B4SOInf + dcjsbs_dT * T3 + dT3_dT * cjsbs; else gcjsT = 0.0; } /* comment out next 3 lines Wagner */ /*if (selfheat) gcjsT = model->B4SOItt * dIbsdif_dT * here->B4SOInf + dcjsbs_dT * T3 + dT3_dT * cjsbs; else gcjsT = 0.0; */ PhiBSWG = model->B4SOIGatesidewallJctDPotential; dPhiBSWG_dT = -model->B4SOItpbswgd; PhiBSWG += dPhiBSWG_dT * (Temp - model->B4SOItnom); MJSWG = model->B4SOIbodyJctGateSideDGradingCoeff; DioMax = 0.9 * (PhiBSWG); /* arg = 1.0 - (vbd > DioMax ? DioMax : vbd) / PhiBSWG; */ /* Bug fix #6 Vbd evaluated taking consideration of Rbody Mode*/ if (here->B4SOIrbodyMod) arg = 1.0 - (vdbd > DioMax ? DioMax : vdbd) / PhiBSWG; /* Bug Fix #6 */ else arg = 1.0 - (vbd > DioMax ? DioMax : vbd) / PhiBSWG; /* Bug Fix #6 */ if (selfheat) darg_dT = (1 - arg) / PhiBSWG * dPhiBSWG_dT; else darg_dT = 1.0; /* flexilint */ if (MJSWG == 0.5) { dT3_dVb = 1.0 / sqrt(arg); if (selfheat) ddT3_dVb_dT = -0.5 * dT3_dVb / arg * darg_dT; else ddT3_dVb_dT = 1.0; /* flexilint */ } else { dT3_dVb = exp(-MJSWG * log(arg)); if (selfheat) ddT3_dVb_dT = -MJSWG * dT3_dVb / arg * darg_dT; else ddT3_dVb_dT = 1.0; /* flexilint */ } T3 = (1.0 - arg * dT3_dVb) * PhiBSWG / (1.0 - MJSWG); if (selfheat) dT3_dT = (1.0 - arg * dT3_dVb) * dPhiBSWG_dT / (1.0 - MJSWG) - (arg * ddT3_dVb_dT + darg_dT * dT3_dVb) * PhiBSWG / (1.0 - MJSWG); else dT3_dT = 1.0; /* flexilint */ /* if (vbd > DioMax) T3 += dT3_dVb * (vbd - DioMax); */ /* Bug fix #6 Vbd evaluated taking consideration of Rbody Mode*/ if (here->B4SOIrbodyMod) { if (vdbd > DioMax) /* Bug fix #6 */ T3 += dT3_dVb * (vdbd - DioMax); } else { if (vbd > DioMax) /* Bug fix #6 */ T3 += dT3_dVb * (vbd - DioMax); } dT3_dVd = -dT3_dVb; if (here->B4SOImode > 0) { qjd = cjdbs * T3 + model->B4SOItt * Ibddif * here->B4SOInf; gcjdbs = cjdbs * dT3_dVb + model->B4SOItt * dIbddif_dVb * here->B4SOInf; /* 3 new lines Wagner */ if (selfheat) gcjdT = model->B4SOItt * dIbddif_dT * here->B4SOInf + dcjdbs_dT * T3 + dT3_dT * cjdbs; else gcjdT = 0.0; } else { qjd = cjdbs * T3 + model->B4SOItt * Ibsdif * here->B4SOInf; gcjdbs = cjdbs * dT3_dVb + model->B4SOItt * dIbsdif_dVb * here->B4SOInf; /* 3 new lines Wagner */ if (selfheat) gcjdT = model->B4SOItt * dIbsdif_dT * here->B4SOInf + dcjdbs_dT * T3 + dT3_dT * cjdbs; else gcjdT = 0.0; } /*gcjdds = cjdbs * dT3_dVd + model->B4SOItt * dIbddif_dVd; v4.2 */ /* comment out next 3 lines Wagner */ /*if (selfheat) gcjdT = model->B4SOItt * dIbddif_dT * here->B4SOInf + dcjdbs_dT * T3 + dT3_dT * cjdbs; else gcjdT = 0.0;*/ } /* v3.1 */ /* v4.0 */ /* qdrn -= qjd; qbody += (qjs + qjd); qsrc = -(qgate + qbody + qdrn + qsub); */ /* Update the conductance */ /* v4.2 bugfix: qjs/qjd computed using unswapped voltages; however, total capacitances are swapped below note that gcjdds = -gcjdbs always, so (gcjdds + gcjdbs) == 0 here->B4SOIcddb -= gcjdds; here->B4SOIcdT -= gcjdT; here->B4SOIcdsb += gcjdds + gcjdbs; here->B4SOIcbdb += (gcjdds); here->B4SOIcbT += (gcjdT + gcjsT); here->B4SOIcbsb -= (gcjdds + gcjdbs + gcjsbs); here->B4SOIcjsb = (gcjdds + gcjdbs + gcjsbs); here->B4SOIcjdb = -gcjdds; */ here->B4SOIcbT += (gcjdT + gcjsT); if (here->B4SOImode > 0) { here->B4SOIcddb += gcjdbs; here->B4SOIcdT -= gcjdT; here->B4SOIcbdb -= (gcjdbs); here->B4SOIcbsb -= (gcjsbs); here->B4SOIcjsb = gcjsbs; here->B4SOIcjdb = gcjdbs; } else { here->B4SOIcddb += gcjsbs; here->B4SOIcdT -= gcjsT; here->B4SOIcbdb -= (gcjsbs); here->B4SOIcbsb -= (gcjdbs); here->B4SOIcjsb = gcjdbs; here->B4SOIcjdb = gcjsbs; } /* Extrinsic Bottom S/D to substrate charge */ T10 = -model->B4SOItype * ves; /* T10 is vse without type conversion */ T11 = model->B4SOItype * (vds - ves); /* T11 is vde without type conversion */ if (model->B4SOIcsdmin != 0.0) { if ( ((pParam->B4SOInsub > 0) && (model->B4SOItype > 0)) || ((pParam->B4SOInsub < 0) && (model->B4SOItype < 0)) ) { if (T10 < pParam->B4SOIvsdfb) { here->B4SOIqse = here->B4SOIcsbox * (T10 - pParam->B4SOIvsdfb); here->B4SOIgcse = here->B4SOIcsbox; } else if (T10 < pParam->B4SOIsdt1) { T0 = T10 - pParam->B4SOIvsdfb; T1 = T0 * T0; here->B4SOIqse = T0 * (here->B4SOIcsbox - pParam->B4SOIst2 / 3 * T1) ; here->B4SOIgcse = here->B4SOIcsbox - pParam->B4SOIst2 * T1; } else if (T10 < pParam->B4SOIvsdth) { T0 = T10 - pParam->B4SOIvsdth; T1 = T0 * T0; here->B4SOIqse = here->B4SOIcsmin * T10 + here->B4SOIst4 + pParam->B4SOIst3 / 3 * T0 * T1; here->B4SOIgcse = here->B4SOIcsmin + pParam->B4SOIst3 * T1; } else { here->B4SOIqse = here->B4SOIcsmin * T10 + here->B4SOIst4; here->B4SOIgcse = here->B4SOIcsmin; } } else { if (T10 < pParam->B4SOIvsdth) { here->B4SOIqse = here->B4SOIcsmin * (T10 - pParam->B4SOIvsdth); here->B4SOIgcse = here->B4SOIcsmin; } else if (T10 < pParam->B4SOIsdt1) { T0 = T10 - pParam->B4SOIvsdth; T1 = T0 * T0; here->B4SOIqse = T0 * (here->B4SOIcsmin - pParam->B4SOIst2 / 3 * T1) ; here->B4SOIgcse = here->B4SOIcsmin - pParam->B4SOIst2 * T1; } else if (T10 < pParam->B4SOIvsdfb) { T0 = T10 - pParam->B4SOIvsdfb; T1 = T0 * T0; here->B4SOIqse = here->B4SOIcsbox * T10 + here->B4SOIst4 + pParam->B4SOIst3 / 3 * T0 * T1; here->B4SOIgcse = here->B4SOIcsbox + pParam->B4SOIst3 * T1; } else { here->B4SOIqse = here->B4SOIcsbox * T10 + here->B4SOIst4; here->B4SOIgcse = here->B4SOIcsbox; } } if ( ((pParam->B4SOInsub > 0) && (model->B4SOItype > 0)) || ((pParam->B4SOInsub < 0) && (model->B4SOItype < 0)) ) { if (T11 < pParam->B4SOIvsdfb) { here->B4SOIqde = here->B4SOIcdbox * (T11 - pParam->B4SOIvsdfb); here->B4SOIgcde = here->B4SOIcdbox; } else if (T11 < pParam->B4SOIsdt1) { T0 = T11 - pParam->B4SOIvsdfb; T1 = T0 * T0; here->B4SOIqde = T0 * (here->B4SOIcdbox - pParam->B4SOIdt2 / 3 * T1) ; here->B4SOIgcde = here->B4SOIcdbox - pParam->B4SOIdt2 * T1; } else if (T11 < pParam->B4SOIvsdth) { T0 = T11 - pParam->B4SOIvsdth; T1 = T0 * T0; here->B4SOIqde = here->B4SOIcdmin * T11 + here->B4SOIdt4 + pParam->B4SOIdt3 / 3 * T0 * T1; here->B4SOIgcde = here->B4SOIcdmin + pParam->B4SOIdt3 * T1; } else { here->B4SOIqde = here->B4SOIcdmin * T11 + here->B4SOIdt4; here->B4SOIgcde = here->B4SOIcdmin; } } else { if (T11 < pParam->B4SOIvsdth) { here->B4SOIqde = here->B4SOIcdmin * (T11 - pParam->B4SOIvsdth); here->B4SOIgcde = here->B4SOIcdmin; } else if (T11 < pParam->B4SOIsdt1) { T0 = T11 - pParam->B4SOIvsdth; T1 = T0 * T0; here->B4SOIqde = T0 * (here->B4SOIcdmin - pParam->B4SOIdt2 / 3 * T1) ; here->B4SOIgcde = here->B4SOIcdmin - pParam->B4SOIdt2 * T1; } else if (T11 < pParam->B4SOIvsdfb) { T0 = T11 - pParam->B4SOIvsdfb; T1 = T0 * T0; here->B4SOIqde = here->B4SOIcdbox * T11 + here->B4SOIdt4 + pParam->B4SOIdt3 / 3 * T0 * T1; here->B4SOIgcde = here->B4SOIcdbox + pParam->B4SOIdt3 * T1; } else { here->B4SOIqde = here->B4SOIcdbox * T11 + here->B4SOIdt4; here->B4SOIgcde = here->B4SOIcdbox; } } } else { here->B4SOIqse = here->B4SOIcsbox * T10; here->B4SOIgcse = here->B4SOIcsbox; here->B4SOIqde = here->B4SOIcdbox * T11; here->B4SOIgcde = here->B4SOIcdbox; } /* Extrinsic : Sidewall fringing S/D charge */ here->B4SOIqse += here->B4SOIcsesw * T10; here->B4SOIgcse += here->B4SOIcsesw; here->B4SOIqde += here->B4SOIcdesw * T11; here->B4SOIgcde += here->B4SOIcdesw; /* All charge are multiplied with type at the end, but qse and qde have true polarity => so pre-multiplied with type */ here->B4SOIqse *= model->B4SOItype; here->B4SOIqde *= model->B4SOItype; } else { /* v4.0 */ qjs = qjd = 0.0; here->B4SOIqse = here->B4SOIqde = 0.0; here->B4SOIgcse = here->B4SOIgcde = 0.0; } here->B4SOIcbb = Cbb; here->B4SOIcbd = Cbd; here->B4SOIcbg = Cbg; here->B4SOIqbf = -Qsub0 - Qac0; here->B4SOIqjs = qjs; here->B4SOIqjd = qjd; *(ckt->CKTstate0 + here->B4SOIqbs) = qjs; /* v4.0 */ *(ckt->CKTstate0 + here->B4SOIqbd) = qjd; /* v4.0 */ /* * check convergence */ if ((here->B4SOIoff == 0) || (!(ckt->CKTmode & MODEINITFIX))) { if (Check == 1) { ckt->CKTnoncon++; #ifndef NEWCONV } else { tol = ckt->CKTreltol * MAX(fabs(cdhat), fabs(here->B4SOIcd)) + ckt->CKTabstol; if (fabs(cdhat - here->B4SOIcd) >= tol) { ckt->CKTnoncon++; } else { tol = ckt->CKTreltol * MAX(fabs(cbhat), fabs(here->B4SOIcbs + here->B4SOIcbd)) + ckt->CKTabstol; if (fabs(cbhat - (here->B4SOIcbs + here->B4SOIcbd)) > tol) { ckt->CKTnoncon++; } } #endif /* NEWCONV */ } } *(ckt->CKTstate0 + here->B4SOIvg) = vg; *(ckt->CKTstate0 + here->B4SOIvd) = vd; *(ckt->CKTstate0 + here->B4SOIvs) = vs; *(ckt->CKTstate0 + here->B4SOIvp) = vp; *(ckt->CKTstate0 + here->B4SOIve) = ve; *(ckt->CKTstate0 + here->B4SOIvbs) = vbs; *(ckt->CKTstate0 + here->B4SOIvbd) = vbd; *(ckt->CKTstate0 + here->B4SOIvgs) = vgs; *(ckt->CKTstate0 + here->B4SOIvds) = vds; *(ckt->CKTstate0 + here->B4SOIves) = ves; *(ckt->CKTstate0 + here->B4SOIvps) = vps; *(ckt->CKTstate0 + here->B4SOIdeltemp) = delTemp; /* v3.1 added for RF */ *(ckt->CKTstate0 + here->B4SOIvgge) = vgge; *(ckt->CKTstate0 + here->B4SOIvggm) = vggm; *(ckt->CKTstate0 + here->B4SOIvges) = vges; *(ckt->CKTstate0 + here->B4SOIvgms) = vgms; /* v3.1 added for RF end*/ *(ckt->CKTstate0 + here->B4SOIvdbs) = vdbs; /* v4.0 */ *(ckt->CKTstate0 + here->B4SOIvdbd) = vdbd; /* v4.0 */ *(ckt->CKTstate0 + here->B4SOIvsbs) = vsbs; /* v4.0 */ *(ckt->CKTstate0 + here->B4SOIvses) = vses; *(ckt->CKTstate0 + here->B4SOIvdes) = vdes; /* bulk and channel charge plus overlaps */ if (!ChargeComputationNeeded) goto line850; line755: ag0 = ckt->CKTag[0]; T0 = vgd + DELTA_1; if (here->B4SOIrgateMod == 3) T0 = vgmd + DELTA_1; /* v3.2 bug fix */ T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); /* v2.2.3 bug fix */ T3 = pParam->B4SOIwdiodCV * pParam->B4SOIcgdl; /* v3.1 bug fix */ T4 = sqrt(1.0 - 4.0 * T2 / pParam->B4SOIckappa); cgdo = pParam->B4SOIcgdo + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgdo = (pParam->B4SOIcgdo + T3) * vgd - T3 * (T2 + 0.5 * pParam->B4SOIckappa * (T4 - 1.0)); if (here->B4SOIrgateMod == 3) { qgdo = (pParam->B4SOIcgdo + T3) * vgmd - T3 * (T2 + 0.5 * pParam->B4SOIckappa * (T4 - 1.0)); } /* v3.2 bug fix */ T0 = vgs + DELTA_1; if (here->B4SOIrgateMod == 3) T0 = vgms + DELTA_1; /* v3.2 bug fix */ T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); /* v2.2.3 bug fix */ T3 = pParam->B4SOIwdiosCV * pParam->B4SOIcgsl; /* v3.1 bug fix */ T4 = sqrt(1.0 - 4.0 * T2 / pParam->B4SOIckappa); cgso = pParam->B4SOIcgso + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgso = (pParam->B4SOIcgso + T3) * vgs - T3 * (T2 + 0.5 * pParam->B4SOIckappa * (T4 - 1.0)); if (here->B4SOIrgateMod == 3) { qgso = (pParam->B4SOIcgso + T3) * vgms - T3 * (T2 + 0.5 * pParam->B4SOIckappa * (T4 - 1.0)); } /* v3.2 bug fix */ if (here->B4SOInf != 1.0) { cgdo *= here->B4SOInf; cgso *= here->B4SOInf; qgdo *= here->B4SOInf; qgso *= here->B4SOInf; } /* here->B4SOIcgdo = cgdo; here->B4SOIcgso = cgso; */ if (here->B4SOIdebugMod < 0) goto line850; if (here->B4SOImode > 0) { /* v3.1 added for RF */ if (here->B4SOIrgateMod == 3) { gcgmgmb = (cgdo + cgso + pParam->B4SOIcgeo) * ag0; gcgmdb = -cgdo * ag0; gcgmsb = -cgso * ag0; gcgmeb = -pParam->B4SOIcgeo * ag0; gcdgmb = gcgmdb; gcsgmb = gcgmsb; gcegmb = gcgmeb; gcggb = here->B4SOIcggb * ag0; gcgdb = here->B4SOIcgdb * ag0; gcgsb = here->B4SOIcgsb * ag0; gcgeb = here->B4SOIcgeb * ag0; /* fix line */ gcgbb = -(gcggb + gcgdb + gcgsb + gcgeb); gcdgb = here->B4SOIcdgb * ag0; gcegb = gcgeb; /*v3.1 added*/ gcsgb = -(here->B4SOIcggb + here->B4SOIcbgb + here->B4SOIcdgb) * ag0 - gcegb; gcbgb = here->B4SOIcbgb * ag0; qgd = qgdo; qgs = qgso; qge = 0; /* v3.1 change */ qgme = pParam->B4SOIcgeo * vgme; qgmid = qgdo + qgso + qgme; qdrn += here->B4SOIqde - qgd; qsub -= qgme + here->B4SOIqse + here->B4SOIqde; qsrc = -(qgate + qgmid + qbody + qdrn + qsub) - qjs; qdrn -= qjd; if (!here->B4SOIrbodyMod) qbody += qjd + qjs; } else { gcggb = (here->B4SOIcggb + cgdo + cgso + pParam->B4SOIcgeo) * ag0; gcgdb = (here->B4SOIcgdb - cgdo) * ag0; gcgsb = (here->B4SOIcgsb - cgso) * ag0; gcgeb = (here->B4SOIcgeb - pParam->B4SOIcgeo) *ag0; /* LFW_FD fix line */ gcgbb = -(gcggb + gcgdb + gcgsb + gcgeb); gcegb = (- pParam->B4SOIcgeo) * ag0; gcdgb = (here->B4SOIcdgb - cgdo) * ag0; gcsgb = -(here->B4SOIcggb + here->B4SOIcbgb + here->B4SOIcdgb + cgso) * ag0; gcbgb = here->B4SOIcbgb * ag0; gcdgmb = gcsgmb = gcegmb = 0.0; gcgmdb = gcgmsb = gcgmeb = 0.0; /* Lump the overlap capacitance and S/D parasitics */ qgd = qgdo; qgs = qgso; qge = pParam->B4SOIcgeo * vge; qgate += qgd + qgs + qge; qdrn += here->B4SOIqde - qgd; qsub -= qge + here->B4SOIqse + here->B4SOIqde; qsrc = -(qgate + qbody + qdrn + qsub) - qjs; qdrn -= qjd; if (!here->B4SOIrbodyMod) qbody += qjd + qjs; } gcddb = (here->B4SOIcddb + cgdo + here->B4SOIgcde) * ag0; gcdsb = here->B4SOIcdsb * ag0; gcdeb = (here->B4SOIcdeb - here->B4SOIgcde) * ag0; /*fix below expression Wagner */ /*gcdT = model->B4SOItype * here->B4SOIcdT * ag0;*/ gcdT = here->B4SOIcdT * ag0; gcsdb = -(here->B4SOIcgdb + here->B4SOIcbdb + here->B4SOIcddb) * ag0; gcssb = (cgso + here->B4SOIgcse - (here->B4SOIcgsb + here->B4SOIcbsb + here->B4SOIcdsb)) * ag0; gcseb = -(here->B4SOIgcse + here->B4SOIcbeb + here->B4SOIcdeb + here->B4SOIcgeb + here->B4SOIceeb) * ag0; /* LFW_FD fix line */ /*fix below expression Wagner */ /*gcsT = - model->B4SOItype * (here->B4SOIcgT */ gcsT = - (here->B4SOIcgT + here->B4SOIcbT + here->B4SOIcdT + here->B4SOIceT) * ag0; /*fix below expression Wagner */ /*gcgT = model->B4SOItype * here->B4SOIcgT * ag0;*/ gcgT = here->B4SOIcgT * ag0; /* gcbdb = here->B4SOIcbdb * ag0; gcbsb = here->B4SOIcbsb * ag0; */ gcbeb = here->B4SOIcbeb * ag0; gcbT = model->B4SOItype * here->B4SOIcbT * ag0; /* v4.0 */ if (!here->B4SOIrbodyMod) { gcjdbdp = gcjsbsp = 0.0; gcdbb = -(gcdgb + gcddb + gcdsb + gcdgmb + gcdeb); gcsbb = -(gcsgb + gcsdb + gcssb + gcsgmb + gcseb); gcdbdb = gcsbsb = 0.0; gcbdb = here->B4SOIcbdb * ag0; gcbsb = here->B4SOIcbsb * ag0; here->B4SOIGGjdb = GGjdb = 0.0; here->B4SOIGGjsb = GGjsb = 0.0; } else { gcjdbdp = gcjdbs * ag0; gcjsbsp = gcjsbs * ag0; gcdbb = -(gcdgb + gcddb + gcdsb + gcdgmb + gcdeb) + gcjdbdp; gcsbb = -(gcsgb + gcsdb + gcssb + gcsgmb + gcseb) + gcjsbsp; /* v4.2 optimization: gcjdds + gcjdbs = 0 gcdbdb = gcjdds * ag0; gcsbsb = -(gcjdds + gcjdbs + gcjsbs) * ag0; */ gcdbdb = -gcjdbs * ag0; gcsbsb = -gcjsbs * ag0; gcbdb = here->B4SOIcbdb * ag0 - gcdbdb; gcbsb = here->B4SOIcbsb * ag0 - gcsbsb; here->B4SOIGGjdb = GGjdb = Gjdb; here->B4SOIGGjsb = GGjsb = Gjsb; } /* v4.0 end */ gcedb = (- here->B4SOIgcde) * ag0; gcesb = (- here->B4SOIgcse) * ag0; gceeb = (here->B4SOIgcse + here->B4SOIgcde + here->B4SOIceeb + pParam->B4SOIcgeo) * ag0; gceT = model->B4SOItype * here->B4SOIceT * ag0; gcTt = pParam->B4SOIcth * ag0; sxpart = 0.6; dxpart = 0.4; /* v3.1 moved the following original code ahead */ /* Lump the overlap capacitance and S/D parasitics */ /* qgd = qgdo; qgs = qgso; qge = pParam->B4SOIcgeo * vge; qgate += qgd + qgs + qge; qdrn += here->B4SOIqde - qgd; qsub -= qge + here->B4SOIqse + here->B4SOIqde; qsrc = -(qgate + qbody + qdrn + qsub); */ /* v3.1 end */ } else { if (here->B4SOIrgateMod == 3) { gcgmgmb = (cgdo + cgso + pParam->B4SOIcgeo) * ag0; gcgmdb = -cgdo * ag0; gcgmsb = -cgso * ag0; gcgmeb = -pParam->B4SOIcgeo * ag0; gcdgmb = gcgmdb; gcsgmb = gcgmsb; gcegmb = gcgmeb; gcggb = here->B4SOIcggb * ag0; gcgsb = here->B4SOIcgdb * ag0; gcgdb = here->B4SOIcgsb * ag0; gcgeb = here->B4SOIcgeb * ag0; /* LFW_FD fix line */ gcgbb = -(gcggb + gcgdb + gcgsb + gcgeb); /* v3.1 added gcgeb */ gcsgb = here->B4SOIcdgb * ag0; gcegb = gcgeb; /* v3.1 added */ gcdgb = -(here->B4SOIcggb + here->B4SOIcbgb + here->B4SOIcdgb) * ag0 - gcegb; /*v3.1 added gcegb*/ gcbgb = here->B4SOIcbgb * ag0; qgd = qgdo; qgs = qgso; qge = 0; /* v3.1 */ qgme = pParam->B4SOIcgeo * vgme; qgmid = qgdo + qgso + qgme; qgate += qge; qbody -= 0; qsrc = qdrn - qgs + here->B4SOIqse; qsub -= qgme + here->B4SOIqse + here->B4SOIqde; qdrn = -(qgate + qgmid + qbody + qsrc + qsub) -qjd; qsrc -= qjs; if (!here->B4SOIrbodyMod) qbody += qjs + qjd; } else { gcggb = (here->B4SOIcggb + cgdo + cgso + pParam->B4SOIcgeo) * ag0; gcgdb = (here->B4SOIcgsb - cgdo) * ag0; gcgsb = (here->B4SOIcgdb - cgso) * ag0; gcgeb = (here->B4SOIcgeb - pParam->B4SOIcgeo) * ag0; /* LFW_FD fix line */ gcgbb = -(gcggb + gcgdb + gcgsb + gcgeb); /*added gcgbb*/ gcegb = (- pParam->B4SOIcgeo) * ag0; /* LFW_FD fix line */ gcsgb = (here->B4SOIcdgb - cgso) * ag0; gcdgb = -(here->B4SOIcggb + here->B4SOIcbgb + here->B4SOIcdgb + cgdo) * ag0; gcbgb = here->B4SOIcbgb * ag0; gcdgmb = gcsgmb = gcegmb = 0.0; gcgmdb = gcgmsb = gcgmeb = 0.0; /* Lump the overlap capacitance and S/D parasitics */ qgd = qgdo; qgs = qgso; qge = pParam->B4SOIcgeo * vge; qgate += qgd + qgs + qge; qsrc = qdrn - qgs + here->B4SOIqse; qsub -= qge + here->B4SOIqse + here->B4SOIqde; qdrn = -(qgate + qbody + qsrc + qsub) - qjd; qsrc -= qjs; if (!here->B4SOIrbodyMod) qbody += qjs + qjd; } gcssb = (here->B4SOIcddb + cgso + here->B4SOIgcse) * ag0; gcsdb = here->B4SOIcdsb * ag0; gcseb = (here->B4SOIcdeb - here->B4SOIgcse) * ag0; /*fix below expression Wagner */ /*gcsT = model->B4SOItype * here->B4SOIcdT * ag0;*/ gcsT = here->B4SOIcdT * ag0; gcdsb = -(here->B4SOIcgdb + here->B4SOIcbdb + here->B4SOIcddb) * ag0; gcddb = (cgdo + here->B4SOIgcde - (here->B4SOIcgsb + here->B4SOIcbsb + here->B4SOIcdsb)) * ag0; gcdeb = -(here->B4SOIgcde + here->B4SOIcbeb + here->B4SOIcdeb + here->B4SOIcgeb + here->B4SOIceeb) * ag0; /* LFW_FD fix line */ /*fix below expression Wagner */ /*gcdT = - model->B4SOItype * (here->B4SOIcgT */ gcdT = - (here->B4SOIcgT + here->B4SOIcbT + here->B4SOIcdT + here->B4SOIceT) * ag0; /*fix below expression Wagner */ /*gcgT = model->B4SOItype * here->B4SOIcgT * ag0;*/ gcgT = here->B4SOIcgT * ag0; gcbeb = here->B4SOIcbeb * ag0; gcbT = model->B4SOItype * here->B4SOIcbT * ag0; /* v4.0 gcbsb = here->B4SOIcbdb * ag0; gcbdb = here->B4SOIcbsb * ag0; */ /* v4.0 */ if (!here->B4SOIrbodyMod) { gcjdbdp = gcjsbsp = 0.0; gcdbb = -(gcdgb + gcddb + gcdsb + gcdgmb + gcdeb); gcsbb = -(gcsgb + gcsdb + gcssb + gcsgmb + gcseb); gcdbdb = gcsbsb = 0.0; gcbdb = here->B4SOIcbsb * ag0; gcbsb = here->B4SOIcbdb * ag0; here->B4SOIGGjdb = GGjdb = 0.0; here->B4SOIGGjsb = GGjsb = 0.0; } else { /* v4.2 bugfix; qjd/qjs are not swapped gcjdbdp = gcjsbs * ag0; gcjsbsp = gcjdbs * ag0; */ gcjdbdp = gcjdbs * ag0; gcjsbsp = gcjsbs * ag0; gcdbb = -(gcdgb + gcddb + gcdsb + gcdgmb + gcdeb) + gcjdbdp; gcsbb = -(gcsgb + gcsdb + gcssb + gcsgmb + gcseb) + gcjsbsp; /* v4.2 bugfix; qjd/qjs are not swapped gcsbsb = gcjdds * ag0; gcdbdb = -(gcjdds + gcjdbs + gcjsbs) * ag0; */ gcsbsb = -gcjdbs * ag0; gcdbdb = -gcjsbs * ag0; gcbdb = here->B4SOIcbsb * ag0 - gcdbdb; gcbsb = here->B4SOIcbdb * ag0 - gcsbsb; here->B4SOIGGjdb = GGjdb = Gjsb; here->B4SOIGGjsb = GGjsb = Gjdb; } /* v4.0 end */ /* gcegb = (-pParam->B4SOIcgeo) * ag0; V3.2 bug fix */ gcesb = (- here->B4SOIgcse) * ag0; gcedb = (- here->B4SOIgcde) * ag0; gceeb = (here->B4SOIceeb + pParam->B4SOIcgeo + here->B4SOIgcse + here->B4SOIgcde) * ag0; gceT = model->B4SOItype * here->B4SOIceT * ag0; gcTt = pParam->B4SOIcth * ag0; dxpart = 0.6; sxpart = 0.4; /* v3.1 moved the following code ahead */ /* Lump the overlap capacitance */ /* qgd = qgdo; qgs = qgso; qge = pParam->B4SOIcgeo * vge; qgate += qgd + qgs + qge; qsrc = qdrn - qgs + here->B4SOIqse; qsub -= qge + here->B4SOIqse + here->B4SOIqde; qdrn = -(qgate + qbody + qsrc + qsub); */ /* v3.1 end */ } here->B4SOIcgdo = cgdo; here->B4SOIcgso = cgso; if (ByPass) goto line860; *(ckt->CKTstate0 + here->B4SOIqe) = qsub; *(ckt->CKTstate0 + here->B4SOIqg) = qgate; *(ckt->CKTstate0 + here->B4SOIqd) = qdrn; *(ckt->CKTstate0 + here->B4SOIqb) = qbody; if ((model->B4SOIshMod == 1) && (here->B4SOIrth0!=0.0)) *(ckt->CKTstate0 + here->B4SOIqth) = pParam->B4SOIcth * delTemp; if (here->B4SOIrgateMod == 3) /* 3.1 bug fix */ *(ckt->CKTstate0 + here->B4SOIqgmid) = qgmid; /* store small signal parameters */ if (ckt->CKTmode & MODEINITSMSIG) { goto line1000; } if (!ChargeComputationNeeded) goto line850; if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->B4SOIqb) = *(ckt->CKTstate0 + here->B4SOIqb); *(ckt->CKTstate1 + here->B4SOIqg) = *(ckt->CKTstate0 + here->B4SOIqg); *(ckt->CKTstate1 + here->B4SOIqd) = *(ckt->CKTstate0 + here->B4SOIqd); *(ckt->CKTstate1 + here->B4SOIqe) = *(ckt->CKTstate0 + here->B4SOIqe); *(ckt->CKTstate1 + here->B4SOIqth) = *(ckt->CKTstate0 + here->B4SOIqth); if (here->B4SOIrgateMod == 3) *(ckt->CKTstate1 + here->B4SOIqgmid) = *(ckt->CKTstate0 + here->B4SOIqgmid); if (here->B4SOIrbodyMod) /* v4.0 */ { *(ckt->CKTstate1 + here->B4SOIqbs) = *(ckt->CKTstate0 + here->B4SOIqbs); *(ckt->CKTstate1 + here->B4SOIqbd) = *(ckt->CKTstate0 + here->B4SOIqbd); } } error = NIintegrate(ckt, &geq, &ceq,0.0,here->B4SOIqb); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->B4SOIqg); if (error) return(error); error = NIintegrate(ckt,&geq, &ceq, 0.0, here->B4SOIqd); if (error) return(error); error = NIintegrate(ckt,&geq, &ceq, 0.0, here->B4SOIqe); if (error) return(error); if ((model->B4SOIshMod == 1) && (here->B4SOIrth0!=0.0)) { error = NIintegrate(ckt, &geq, &ceq, 0.0, here->B4SOIqth); if (error) return (error); } if (here->B4SOIrgateMod == 3) { error = NIintegrate(ckt, &geq, &ceq, 0.0, here->B4SOIqgmid); if (error) return(error); } /*3.1 bug fix*/ if (here->B4SOIrbodyMod) /* v4.0 */ { error = NIintegrate(ckt, &geq, &ceq, 0.0, here->B4SOIqbs); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->B4SOIqbd); if (error) return(error); } goto line860; line850: /* initialize to zero charge conductance and current */ ceqqe = ceqqg = ceqqb = ceqqd = ceqqth= 0.0; gcdgb = gcddb = gcdsb = gcdeb = gcdT = 0.0; gcsgb = gcsdb = gcssb = gcseb = gcsT = 0.0; gcggb = gcgdb = gcgsb = gcgeb = gcgT = 0.0; gcbgb = gcbdb = gcbsb = gcbeb = gcbT = 0.0; gcegb = gcedb = gceeb = gcesb = gceT = 0.0; gcTt = 0.0; /* v3.1 added for RF */ gcgmgmb = gcgmdb = gcgmsb = gcgmeb = 0.0; gcdgmb = gcsgmb = gcegmb = ceqqgmid = 0.0; gcgbb = gcsbb = gcdbb = 0.0; /* v3.1 added for RF end */ gcdbdb = gcsbsb = gcjdbdp = gcjsbsp = 0.0; /* v4.0 */ ceqqjd = ceqqjs = 0.0; /* v4.0 */ GGjdb = GGjsb = 0.0; /* v4.0 */ sxpart = (1.0 - (dxpart = (here->B4SOImode > 0) ? 0.4 : 0.6)); goto line900; line860: /* evaluate equivalent charge current */ cqgate = *(ckt->CKTstate0 + here->B4SOIcqg); cqbody = *(ckt->CKTstate0 + here->B4SOIcqb); cqdrn = *(ckt->CKTstate0 + here->B4SOIcqd); cqsub = *(ckt->CKTstate0 + here->B4SOIcqe); cqtemp = *(ckt->CKTstate0 + here->B4SOIcqth); here->B4SOIcb += cqbody; here->B4SOIcd += cqdrn; ceqqg = cqgate - gcggb * vgb + gcgdb * vbd + gcgsb * vbs - gcgeb * veb - gcgT * delTemp; ceqqb = cqbody - gcbgb * vgb + gcbdb * vbd + gcbsb * vbs - gcbeb * veb - gcbT * delTemp; /* v3.2 bug fix */ ceqqd = cqdrn - gcdgb * vgb + (gcddb + gcdbdb) * vbd + gcdsb * vbs - gcdeb * veb - gcdT * delTemp - gcdbdb * vbd_jct - gcdgmb * vgmb;/* v4.0 */ ceqqe = cqsub - gcegb * vgb + gcedb * vbd + gcesb * vbs - gceeb * veb - gceT * delTemp - gcegmb * vgmb; /* 3.2 bug fix */ ceqqth = cqtemp - gcTt * delTemp; /* v3.1 added for RF */ if (here->B4SOIrgateMod == 3) ceqqgmid = *(ckt->CKTstate0 + here->B4SOIcqgmid) + gcgmdb * vbd + gcgmsb * vbs - gcgmgmb * vgmb;/* 3.2 bug fix */ else ceqqgmid = 0.0; /* v3.1 added for RF end */ if (here->B4SOIrbodyMod) /* v4.0 */ { ceqqjs = *(ckt->CKTstate0 + here->B4SOIcqbs) + gcsbsb * vbs_jct; ceqqjd = *(ckt->CKTstate0 + here->B4SOIcqbd) + gcdbdb * vbd_jct; } if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->B4SOIcqe) = *(ckt->CKTstate0 + here->B4SOIcqe); *(ckt->CKTstate1 + here->B4SOIcqb) = *(ckt->CKTstate0 + here->B4SOIcqb); *(ckt->CKTstate1 + here->B4SOIcqg) = *(ckt->CKTstate0 + here->B4SOIcqg); *(ckt->CKTstate1 + here->B4SOIcqd) = *(ckt->CKTstate0 + here->B4SOIcqd); *(ckt->CKTstate1 + here->B4SOIcqth) = *(ckt->CKTstate0 + here->B4SOIcqth); if (here->B4SOIrgateMod == 3) /* v3.1 */ *(ckt->CKTstate1 + here->B4SOIcqgmid) = *(ckt->CKTstate0 + here->B4SOIcqgmid); if (here->B4SOIrbodyMod) /* v4.0 */ { *(ckt->CKTstate1 + here->B4SOIcqbs) = *(ckt->CKTstate0 + here->B4SOIcqbs); *(ckt->CKTstate1 + here->B4SOIcqbd) = *(ckt->CKTstate0 + here->B4SOIcqbd); } } /* * load current vector */ line900: if (here->B4SOImode >= 0) { Gm = here->B4SOIgm; Gmbs = here->B4SOIgmbs; /* v3.0 */ Gme = here->B4SOIgme; GmT = model->B4SOItype * here->B4SOIgmT; FwdSum = Gm + Gmbs + Gme; /* v3.0 */ RevSum = 0.0; /* v2.2.2 bug fix */ cdreq = model->B4SOItype * (here->B4SOIcdrain - here->B4SOIgds * vds - Gm * vgs - Gmbs * vbs - Gme * ves) - GmT * delTemp; /* v3.0 */ /* ceqbs now is compatible with cdreq, ie. going in is +ve */ /* Equivalent current source from the diode */ ceqbs = here->B4SOIcjs; ceqbd = here->B4SOIcjd; cdbdp = Idbdp; csbsp = Isbsp; /* Current going in is +ve */ ceqbody = -here->B4SOIcbody; ceqgate = here->B4SOIcgate; gigg = here->B4SOIgigg; gigb = here->B4SOIgigb; gige = here->B4SOIgige; /* v3.0 */ gigs = here->B4SOIgigs; gigd = here->B4SOIgigd; gigT = model->B4SOItype * here->B4SOIgigT; ceqth = here->B4SOIcth; ceqbodcon = here->B4SOIcbodcon; /* v4.1 */ gigpg = here->B4SOIgigpg; gigpp = here->B4SOIgigpp; ceqgate += (here->B4SOIigp - gigpg * vgp); if(here->B4SOIbodyMod == 1) ceqbodcon += (here->B4SOIigp - gigpg * vgp); else if(here->B4SOIbodyMod == 2) ceqbody -= (here->B4SOIigp - gigpg * vgp); gbbg = -here->B4SOIgbgs; gbbdp = -here->B4SOIgbds; gbbb = -here->B4SOIgbbs; gbbp = -here->B4SOIgbps; gbbT = -model->B4SOItype * here->B4SOIgbT; /* v3.0 */ gbbe = -here->B4SOIgbes; if (here->B4SOIrbodyMod) { /* v4.0 */ gbbdp = -Giid - Ggidld - Ggisls; gbbb = -Giib + Gbpbs; gjsdb = Gjsb + Gjdb; } gbbsp = - ( gbbg + gbbdp + gbbb + gbbp + gbbe); gddpg = -here->B4SOIgjdg; gddpdp = -here->B4SOIgjdd; if (!here->B4SOIrbodyMod) /* v4.0 */ gddpb = -here->B4SOIgjdb; else gddpb = Giib + Ggidlb + Ggislb; gddpT = -model->B4SOItype * here->B4SOIgjdT; /* v3.0 */ gddpe = -here->B4SOIgjde; gddpsp = - ( gddpg + gddpdp + gddpb + gddpe); gsspg = -here->B4SOIgjsg; gsspdp = -here->B4SOIgjsd; if (!here->B4SOIrbodyMod) gsspb = -here->B4SOIgjsb; else gsspb = 0.0; gsspT = -model->B4SOItype * here->B4SOIgjsT; /* v3.0 */ gsspe = 0.0; gsspsp = - (gsspg + gsspdp + gsspb + gsspe); gppb = -here->B4SOIgbpbs; gppp = -here->B4SOIgbpps; gTtg = here->B4SOIgtempg; gTtb = here->B4SOIgtempb; gTtdp = here->B4SOIgtempd; gTtt = here->B4SOIgtempT; /* v3.0 */ gTte = here->B4SOIgtempe; gTtsp = - (gTtg + gTtb + gTtdp + gTte); /* v3.0 */ if (model->B4SOIigcMod) { gIstotg = here->B4SOIgIgsg + here->B4SOIgIgcsg; gIstotd = here->B4SOIgIgcsd; gIstots = here->B4SOIgIgss + here->B4SOIgIgcss; gIstotb = here->B4SOIgIgcsb; Istoteq = model->B4SOItype * (here->B4SOIIgs + here->B4SOIIgcs - gIstotg * vgs - here->B4SOIgIgcsd * vds - here->B4SOIgIgcsb * vbs); gIdtotg = here->B4SOIgIgdg + here->B4SOIgIgcdg; gIdtotd = here->B4SOIgIgdd + here->B4SOIgIgcdd; gIdtots = here->B4SOIgIgcds; gIdtotb = here->B4SOIgIgcdb; Idtoteq = model->B4SOItype * (here->B4SOIIgd + here->B4SOIIgcd - here->B4SOIgIgdg * vgd - here->B4SOIgIgcdg * vgs - here->B4SOIgIgcdd * vds - here->B4SOIgIgcdb * vbs); gIgtotg = gIstotg + gIdtotg; gIgtotd = gIstotd + gIdtotd; gIgtots = gIstots + gIdtots; gIgtotb = gIstotb + gIdtotb; Igtoteq = Istoteq + Idtoteq; } else { gIstotg = gIstotd = gIstots = gIstotb = Istoteq = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = Idtoteq = 0.0; gIgtotg = gIgtotd = gIgtots = gIgtotb = Igtoteq = 0.0; } /* v3.1 added for RF */ if (here->B4SOIrgateMod == 2) T0 = vges - vgs; else if (here->B4SOIrgateMod == 3) T0 = vgms - vgs; if (here->B4SOIrgateMod > 1) { gcrgd = here->B4SOIgcrgd * T0; gcrgg = here->B4SOIgcrgg * T0; gcrgs = here->B4SOIgcrgs * T0; gcrgb = here->B4SOIgcrgb * T0; ceqgcrg = -(gcrgd * vds + gcrgg * vgs + gcrgb * vbs); gcrgg -= here->B4SOIgcrg; gcrg = here->B4SOIgcrg; } else ceqgcrg = gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; /* v3.1 added for RF end */ } /* end of soimode>=0 */ else { Gm = -here->B4SOIgm; Gmbs = -here->B4SOIgmbs; /* v3.0 */ Gme = -here->B4SOIgme; GmT = -model->B4SOItype * here->B4SOIgmT; FwdSum = 0.0; RevSum = -(Gm + Gmbs + Gme); /* v3.0 */ /* v3.1 bug fix */ cdreq = -model->B4SOItype * (here->B4SOIcdrain + here->B4SOIgds*vds + Gm * vgd + Gmbs * vbd + Gme * (ves - vds)) - GmT * delTemp; ceqbs = here->B4SOIcjd; ceqbd = here->B4SOIcjs; csbsp = Idbdp; cdbdp = Isbsp; /* Current going in is +ve */ ceqbody = -here->B4SOIcbody; ceqgate = here->B4SOIcgate; gigg = here->B4SOIgigg; gigb = here->B4SOIgigb; gige = here->B4SOIgige; /* v3.0 */ gigs = here->B4SOIgigd; gigd = here->B4SOIgigs; gigT = model->B4SOItype * here->B4SOIgigT; ceqth = here->B4SOIcth; ceqbodcon = here->B4SOIcbodcon; /* v4.1 */ gigpg = here->B4SOIgigpg; gigpp = here->B4SOIgigpp; ceqgate += (here->B4SOIigp - gigpg * vgp); if(here->B4SOIbodyMod == 1) ceqbodcon += (here->B4SOIigp - gigpg * vgp); else if(here->B4SOIbodyMod == 2) ceqbody -= (here->B4SOIigp - gigpg * vgp); gbbg = -here->B4SOIgbgs; gbbb = -here->B4SOIgbbs; gbbp = -here->B4SOIgbps; gbbsp = -here->B4SOIgbds; gbbT = -model->B4SOItype * here->B4SOIgbT; /* v3.0 */ gbbe = -here->B4SOIgbes; if (here->B4SOIrbodyMod) { /* v4.0 */ gbbsp = -Giid - Ggidld - Ggisls; gbbb = -Giib + Gbpbs; gjsdb = Gjsb + Gjdb; } gbbdp = - ( gbbg + gbbsp + gbbb + gbbp + gbbe); gddpg = -here->B4SOIgjsg; gddpsp = -here->B4SOIgjsd; if (!here->B4SOIrbodyMod) gddpb = -here->B4SOIgjsb; else gddpb = 0.0; gddpT = -model->B4SOItype * here->B4SOIgjsT; /* v3.0 */ gddpe = 0.0; gddpdp = - (gddpg + gddpsp + gddpb + gddpe); gsspg = -here->B4SOIgjdg; gsspsp = -here->B4SOIgjdd; if (!here->B4SOIrbodyMod) gsspb = -here->B4SOIgjdb; else gsspb = Giib + Ggidlb + Ggislb; gsspT = -model->B4SOItype * here->B4SOIgjdT; /* v3.0 */ gsspe = -here->B4SOIgjde; gsspdp = - ( gsspg + gsspsp + gsspb + gsspe); gppb = -here->B4SOIgbpbs; gppp = -here->B4SOIgbpps; gTtg = here->B4SOIgtempg; gTtb = here->B4SOIgtempb; gTtsp = here->B4SOIgtempd; gTtt = here->B4SOIgtempT; /* v3.0 */ gTte = here->B4SOIgtempe; gTtdp = - (gTtg + gTtb + gTtsp + gTte); /* v3.0 */ if (model->B4SOIigcMod) { gIstotg = here->B4SOIgIgsg + here->B4SOIgIgcdg; gIstotd = here->B4SOIgIgcds; gIstots = here->B4SOIgIgss + here->B4SOIgIgcdd; gIstotb = here->B4SOIgIgcdb; Istoteq = model->B4SOItype * (here->B4SOIIgs + here->B4SOIIgcd - here->B4SOIgIgsg * vgs - here->B4SOIgIgcdg * vgd + here->B4SOIgIgcdd * vds - here->B4SOIgIgcdb * vbd); gIdtotg = here->B4SOIgIgdg + here->B4SOIgIgcsg; gIdtotd = here->B4SOIgIgdd + here->B4SOIgIgcss; gIdtots = here->B4SOIgIgcsd; gIdtotb = here->B4SOIgIgcsb; Idtoteq = model->B4SOItype * (here->B4SOIIgd + here->B4SOIIgcs - (here->B4SOIgIgdg + here->B4SOIgIgcsg) * vgd + here->B4SOIgIgcsd * vds - here->B4SOIgIgcsb * vbd); gIgtotg = gIstotg + gIdtotg; gIgtotd = gIstotd + gIdtotd; gIgtots = gIstots + gIdtots; gIgtotb = gIstotb + gIdtotb; Igtoteq = Istoteq + Idtoteq; } else { gIstotg = gIstotd = gIstots = gIstotb = Istoteq = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = Idtoteq = 0.0; gIgtotg = gIgtotd = gIgtots = gIgtotb = Igtoteq = 0.0; } /* v3.1 added for RF */ if (here->B4SOIrgateMod == 2) T0 = vges - vgs; else if (here->B4SOIrgateMod == 3) T0 = vgms - vgs; if (here->B4SOIrgateMod > 1) { gcrgd = here->B4SOIgcrgs * T0; gcrgg = here->B4SOIgcrgg * T0; gcrgs = here->B4SOIgcrgd * T0; gcrgb = here->B4SOIgcrgb * T0; ceqgcrg = -(gcrgg * vgd - gcrgs * vds + gcrgb * vbd); gcrgg -= here->B4SOIgcrg; gcrg = here->B4SOIgcrg; } else ceqgcrg = gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; /* v3.1 added for RF end */ } /* end of soimod<0 */ if (model->B4SOIrdsMod == 1) { ceqgstot = model->B4SOItype * (here->B4SOIgstotd * vds + here->B4SOIgstotg * vgs + here->B4SOIgstotb * vbs); /* ceqgstot flowing away from sNodePrime */ gstot = here->B4SOIgstot; gstotd = here->B4SOIgstotd; gstotg = here->B4SOIgstotg; gstots = here->B4SOIgstots - gstot; gstotb = here->B4SOIgstotb; ceqgdtot = -model->B4SOItype * (here->B4SOIgdtotd * vds + here->B4SOIgdtotg * vgs + here->B4SOIgdtotb * vbs); /* ceqgdtot defined as flowing into dNodePrime */ gdtot = here->B4SOIgdtot; gdtotd = here->B4SOIgdtotd - gdtot; gdtotg = here->B4SOIgdtotg; gdtots = here->B4SOIgdtots; gdtotb = here->B4SOIgdtotb; } else { gstot = gstotd = gstotg = gstots = gstotb = ceqgstot = 0.0; gdtot = gdtotd = gdtotg = gdtots = gdtotb = ceqgdtot = 0.0; } if (model->B4SOItype > 0) { ceqqg = ceqqg; ceqqb = ceqqb; ceqqe = ceqqe; ceqqd = ceqqd; } else { ceqbodcon = -ceqbodcon; ceqbody = -ceqbody; ceqgate = -ceqgate; ceqbs = -ceqbs; ceqbd = -ceqbd; ceqqg = -ceqqg; ceqqb = -ceqqb; ceqqd = -ceqqd; ceqqe = -ceqqe; cdbdp = - cdbdp; /* v4.0 */ csbsp = - csbsp; /* v4.0 */ ceqgcrg = -ceqgcrg; /* v3.1 */ if (here->B4SOIrgateMod == 3) ceqqgmid = -ceqqgmid; if (here->B4SOIrbodyMod) /* v4.0 */ { ceqqjs = -ceqqjs; ceqqjd = -ceqqjd; } } m = here->B4SOIm; /* v3.1 */ #ifndef USE_OMP /* v3.1 added ceqgcrg for RF */ (*(ckt->CKTrhs + here->B4SOIgNode) -= m * ((ceqgate + ceqqg) + Igtoteq - ceqgcrg)); /* v3.1 added ceqgcrg for RF end */ (*(ckt->CKTrhs + here->B4SOIdNodePrime) += m * ((ceqbd - cdreq - ceqqd) + Idtoteq /* v4.0 */ + ceqgdtot)); if (!here->B4SOIrbodyMod) { (*(ckt->CKTrhs + here->B4SOIsNodePrime) += m * ((cdreq + ceqbs + ceqqg + ceqqb + ceqqd + ceqqe) + Istoteq + ceqqgmid - ceqgstot)); /* v4.0 */ } else { /* v4.0 */ (*(ckt->CKTrhs + here->B4SOIsNodePrime) += m * ((cdreq + ceqbs + ceqqg + ceqqb + ceqqd + ceqqe) + Istoteq + ceqqgmid + ceqqjd + ceqqjs - ceqgstot)); } (*(ckt->CKTrhs + here->B4SOIeNode) -= m * ceqqe); if (here->B4SOIrgateMod == 2) (*(ckt->CKTrhs + here->B4SOIgNodeExt) -= m * ceqgcrg); else if (here->B4SOIrgateMod == 3) (*(ckt->CKTrhs + here->B4SOIgNodeMid) -= m * (ceqqgmid + ceqgcrg)); if (here->B4SOIbodyMod == 1) { (*(ckt->CKTrhs + here->B4SOIpNode) += m * ceqbodcon); } if ( here->B4SOIsoiMod != 2 ) {if (!here->B4SOIrbodyMod) (*(ckt->CKTrhs + here->B4SOIbNode) -= m * (ceqbody + ceqqb)); else /* v4.0 */ { (*(ckt->CKTrhs + here->B4SOIdbNode) -= m * (cdbdp + ceqqjd)); (*(ckt->CKTrhs + here->B4SOIbNode) -= m * (ceqbody + ceqqb)); (*(ckt->CKTrhs + here->B4SOIsbNode) -= m * (csbsp + ceqqjs)); } } if (selfheat) { (*(ckt->CKTrhs + here->B4SOItempNode) -= m * (ceqth + ceqqth)); } if (model->B4SOIrdsMod) { (*(ckt->CKTrhs + here->B4SOIdNode) -= m * ceqgdtot); (*(ckt->CKTrhs + here->B4SOIsNode) += m * ceqgstot); } #else /* OpenMP parallelization: Temporary storage of right hand side values into instance storage space. Update to matrix will be done by function B4SOILoadRhsMat() only when all instances have their values stored. */ /* v3.1 added ceqgcrg for RF */ here->B4SOINode_1 = m * ((ceqgate + ceqqg) + Igtoteq - ceqgcrg); /* v3.1 added ceqgcrg for RF end */ here->B4SOINode_2 = m * ((ceqbd - cdreq - ceqqd) + Idtoteq /* v4.0 */ + ceqgdtot); if (!here->B4SOIrbodyMod) { here->B4SOINode_3 = m * ((cdreq + ceqbs + ceqqg + ceqqb + ceqqd + ceqqe) + Istoteq + ceqqgmid - ceqgstot); /* v4.0 */ } else { /* v4.0 */ here->B4SOINode_4 = m * ((cdreq + ceqbs + ceqqg + ceqqb + ceqqd + ceqqe) + Istoteq + ceqqgmid + ceqqjd + ceqqjs - ceqgstot); } here->B4SOINode_5 = m * ceqqe; if (here->B4SOIrgateMod == 2) here->B4SOINode_6 = m * ceqgcrg; else if (here->B4SOIrgateMod == 3) here->B4SOINode_7 = m * (ceqqgmid + ceqgcrg); if (here->B4SOIbodyMod == 1) { here->B4SOINode_8 = m * ceqbodcon; } if ( here->B4SOIsoiMod != 2 ) {if (!here->B4SOIrbodyMod) here->B4SOINode_9 = m * (ceqbody + ceqqb); else /* v4.0 */ { here->B4SOINode_10 = m * (cdbdp + ceqqjd); here->B4SOINode_11 = m * (ceqbody + ceqqb); here->B4SOINode_12 = m * (csbsp + ceqqjs); } } here->B4SOINode_sh = selfheat; if (selfheat) { here->B4SOINode_13 = m * (ceqth + ceqqth); } if (model->B4SOIrdsMod) { here->B4SOINode_14 = m * ceqgdtot; here->B4SOINode_15 = m * ceqgstot; } #endif if (here->B4SOIdebugMod != 0) { *(ckt->CKTrhs + here->B4SOIvbsNode) = here->B4SOIvbseff; *(ckt->CKTrhs + here->B4SOIidsNode) = FLOG(here->B4SOIids); *(ckt->CKTrhs + here->B4SOIicNode) = FLOG(here->B4SOIic); *(ckt->CKTrhs + here->B4SOIibsNode) = FLOG(here->B4SOIibs); *(ckt->CKTrhs + here->B4SOIibdNode) = FLOG(here->B4SOIibd); *(ckt->CKTrhs + here->B4SOIiiiNode) = FLOG(here->B4SOIiii); *(ckt->CKTrhs + here->B4SOIigNode) = here->B4SOIig; *(ckt->CKTrhs + here->B4SOIgiggNode) = here->B4SOIgigg; *(ckt->CKTrhs + here->B4SOIgigdNode) = here->B4SOIgigd; *(ckt->CKTrhs + here->B4SOIgigbNode) = here->B4SOIgigb; *(ckt->CKTrhs + here->B4SOIigidlNode) = here->B4SOIigidl; *(ckt->CKTrhs + here->B4SOIitunNode) = here->B4SOIitun; *(ckt->CKTrhs + here->B4SOIibpNode) = here->B4SOIibp; *(ckt->CKTrhs + here->B4SOIcbbNode) = here->B4SOIcbb; *(ckt->CKTrhs + here->B4SOIcbdNode) = here->B4SOIcbd; *(ckt->CKTrhs + here->B4SOIcbgNode) = here->B4SOIcbg; *(ckt->CKTrhs + here->B4SOIqbfNode) = here->B4SOIqbf; *(ckt->CKTrhs + here->B4SOIqjsNode) = here->B4SOIqjs; *(ckt->CKTrhs + here->B4SOIqjdNode) = here->B4SOIqjd; } if (!model->B4SOIrdsMod) { gdpr = here->B4SOIdrainConductance; gspr = here->B4SOIsourceConductance; } else gdpr = gspr = 0.0; /* v4.0 */ /* * load y matrix */ Gmin = ckt->CKTgmin * 1e-6; /* v3.1 added for RF */ geltd = here->B4SOIgrgeltd; #ifndef USE_OMP if (here->B4SOIrgateMod == 1) { *(here->B4SOIGEgePtr) += m * geltd; *(here->B4SOIGgePtr) -= m * geltd; *(here->B4SOIGEgPtr) -= m * geltd; } else if (here->B4SOIrgateMod == 2) { *(here->B4SOIGEgePtr) += m * gcrg; *(here->B4SOIGEgPtr) += m * gcrgg; *(here->B4SOIGEdpPtr) += m * gcrgd; *(here->B4SOIGEspPtr) += m * gcrgs; *(here->B4SOIGgePtr) -= m * gcrg; if (here->B4SOIsoiMod !=2) /* v3.2 */ *(here->B4SOIGEbPtr) += m * gcrgb; } else if (here->B4SOIrgateMod == 3) { *(here->B4SOIGEgePtr) += m * geltd; *(here->B4SOIGEgmPtr) -= m * geltd; *(here->B4SOIGMgePtr) -= m * geltd; *(here->B4SOIGMgmPtr) += m * (geltd + gcrg + gcgmgmb); *(here->B4SOIGMdpPtr) += m * (gcrgd + gcgmdb); *(here->B4SOIGMgPtr) += m * gcrgg; *(here->B4SOIGMspPtr) += m * (gcrgs + gcgmsb); *(here->B4SOIGMePtr) += m * gcgmeb; if (here->B4SOIsoiMod !=2) /* v3.2 */ *(here->B4SOIGMbPtr) += m * gcrgb; *(here->B4SOIDPgmPtr) += m * gcdgmb; *(here->B4SOIGgmPtr) -= m * gcrg; *(here->B4SOISPgmPtr) += m * gcsgmb; *(here->B4SOIEgmPtr) += m * gcegmb; } /* v3.1 added for RF end*/ /* v3.0 */ if (here->B4SOIsoiMod != 0) /* v3.2 */ { (*(here->B4SOIDPePtr) += m * (Gme + gddpe)); (*(here->B4SOISPePtr) += m * (gsspe - Gme)); if (here->B4SOIsoiMod != 2) /* v3.2 */ { *(here->B4SOIGePtr) += m * gige; *(here->B4SOIBePtr) -= m * gige; } } *(here->B4SOIEdpPtr) += m * gcedb; *(here->B4SOIEspPtr) += m * gcesb; *(here->B4SOIDPePtr) += m * gcdeb; *(here->B4SOISPePtr) += m * gcseb; *(here->B4SOIEgPtr) += m * gcegb; *(here->B4SOIGePtr) += m * gcgeb; /* v3.1 */ if (here->B4SOIsoiMod != 2) /* v3.2 */ { (*(here->B4SOIEbPtr) -= m * (gcegb + gcedb + gcesb + gceeb + gcegmb)); /* 3.2 bug fix */ /* v3.1 changed GbPtr for RF */ if ((here->B4SOIrgateMod == 0) || (here->B4SOIrgateMod == 1)) (*(here->B4SOIGbPtr) -= m * (-gigb + gcggb + gcgdb + gcgsb + gcgeb - gIgtotb)); else /* v3.1 for rgateMod = 2 or 3 */ *(here->B4SOIGbPtr) += m * (gigb + gcgbb +gIgtotb - gcrgb); (*(here->B4SOIDPbPtr) -= m * (-gddpb - Gmbs - gcdbb + gdtotb + gIdtotb )); /* v4.0 */ /* (*(here->B4SOIDPbPtr) -= (-gddpb - Gmbs + gcdgb + gcddb + gcdeb + gcdsb) + gcdgmb + gIdtotb ); */ (*(here->B4SOISPbPtr) -= m * (-gsspb + Gmbs - gcsbb + gstotb + Gmin + gIstotb)); /* v4.0 */ /* (*(here->B4SOISPbPtr) -= (-gsspb + Gmbs + gcsgb + gcsdb + gcseb + gcssb) + gcsgmb + Gmin + gIstotb); */ (*(here->B4SOIBePtr) += m * (gbbe + gcbeb)); /* v3.0 */ (*(here->B4SOIBgPtr) += m * (-gigg + gcbgb + gbbg)); (*(here->B4SOIBdpPtr) += m * (-gigd + gcbdb + gbbdp )); (*(here->B4SOIBspPtr) += m * (gcbsb + gbbsp - Gmin - gigs)); /* if (!here->B4SOIrbodyMod) */ (*(here->B4SOIBbPtr) += m * (-gigb + gbbb - gcbgb - gcbdb - gcbsb - gcbeb + Gmin)) ; /* else (*(here->B4SOIBbPtr) += -gigb - (Giib - Gbpbs) - gcbgb - gcbdb - gcbsb - gcbeb + Gmin) ; */ /* v4.0 */ if (here->B4SOIrbodyMod) { (*(here->B4SOIDPdbPtr) += m * (-gcjdbdp - GGjdb)); (*(here->B4SOISPsbPtr) += m * (-gcjsbsp - GGjsb)); (*(here->B4SOIDBdpPtr) += m * (-gcjdbdp - GGjdb)); (*(here->B4SOIDBdbPtr) += m * (gcjdbdp + GGjdb + here->B4SOIgrbdb)); (*(here->B4SOIDBbPtr) -= m * here->B4SOIgrbdb); (*(here->B4SOISBspPtr) += m * (-gcjsbsp - GGjsb)); (*(here->B4SOISBbPtr) -= m * here->B4SOIgrbsb); (*(here->B4SOISBsbPtr) += m * (gcjsbsp + GGjsb + here->B4SOIgrbsb)); (*(here->B4SOIBdbPtr) -= m * here->B4SOIgrbdb); (*(here->B4SOIBsbPtr) -= m * here->B4SOIgrbsb); (*(here->B4SOIBbPtr) += m * (here->B4SOIgrbsb + here->B4SOIgrbdb)); } if (model->B4SOIrdsMod) { (*(here->B4SOIDbPtr) += m * gdtotb); (*(here->B4SOISbPtr) += m * gstotb); } } /* v3.1 */ if (model->B4SOIrdsMod) { (*(here->B4SOIDgPtr) += m * gdtotg); (*(here->B4SOIDspPtr) += m * gdtots); (*(here->B4SOISdpPtr) += m * gstotd); (*(here->B4SOISgPtr) += m * gstotg); } (*(here->B4SOIEePtr) += m * gceeb); if (here->B4SOIrgateMod == 0) { (*(here->B4SOIGgPtr) += m * (gigg + gcggb + Gmin + gIgtotg)); (*(here->B4SOIGdpPtr) += m * (gigd + gcgdb - Gmin + gIgtotd)); (*(here->B4SOIGspPtr) += m * (gcgsb + gigs + gIgtots)); } else if (here->B4SOIrgateMod == 1) /* v3.1 for RF */ { *(here->B4SOIGgPtr) += m * (gigg + gcggb + Gmin + gIgtotg + geltd); *(here->B4SOIGdpPtr) += m * (gigd + gcgdb - Gmin + gIgtotd); *(here->B4SOIGspPtr) += m * (gcgsb + gigs + gIgtots); } else /* v3.1 for RF rgateMod == 2 or 3 */ { *(here->B4SOIGgPtr) += m * (gigg + gcggb + Gmin + gIgtotg - gcrgg); *(here->B4SOIGdpPtr) += m * (gigd + gcgdb - Gmin + gIgtotd - gcrgd); *(here->B4SOIGspPtr) += m * (gcgsb + gigs + gIgtots - gcrgs); } (*(here->B4SOIDPgPtr) += m * ((Gm + gcdgb) + gddpg - Gmin - gIdtotg - gdtotg)); /* v4.0 */ (*(here->B4SOIDPdpPtr) += m * ((gdpr + here->B4SOIgds + gddpdp + RevSum + gcddb) + Gmin - gIdtotd - gdtotd)); /* v4.0 */ (*(here->B4SOIDPspPtr) -= m * ((-gddpsp + here->B4SOIgds + FwdSum - gcdsb) + gIdtots + gdtots)); (*(here->B4SOIDPdPtr) -= m * (gdpr + gdtot)); (*(here->B4SOISPgPtr) += m * (gcsgb - Gm + gsspg - gIstotg - gstotg)); /* v4.0 */ (*(here->B4SOISPdpPtr) -= m * ((here->B4SOIgds - gsspdp + RevSum - gcsdb + gIstotd) + gstotd)); /* v4.0 */ (*(here->B4SOISPspPtr) += m * ((gspr - gstots + here->B4SOIgds + gsspsp + FwdSum + gcssb) + Gmin - gIstots)); /* v4.0 */ (*(here->B4SOISPsPtr) -= m * (gspr + gstot)); (*(here->B4SOIDdPtr) += m * (gdpr + gdtot)); (*(here->B4SOIDdpPtr) -= m * (gdpr - gdtotd)); (*(here->B4SOISsPtr) += m * (gspr + gstot)); (*(here->B4SOISspPtr) -= m * (gspr - gstots)); if (here->B4SOIbodyMod == 1) { (*(here->B4SOIBpPtr) -= m * gppp); (*(here->B4SOIPbPtr) += m * gppb); (*(here->B4SOIPpPtr) += m * gppp); } /* v4.1 Ig_agbcp2 stamping */ (*(here->B4SOIGgPtr) += m * gigpg); if (here->B4SOIbodyMod == 1) { (*(here->B4SOIPpPtr) -= m * gigpp); (*(here->B4SOIPgPtr) -= m * gigpg); (*(here->B4SOIGpPtr) += m * gigpp); } else if(here->B4SOIbodyMod == 2) { (*(here->B4SOIBbPtr) -= m * gigpp); (*(here->B4SOIBgPtr) -= m * gigpg); (*(here->B4SOIGbPtr) += m * gigpp); } if (selfheat) { (*(here->B4SOIDPtempPtr) += m * (GmT + gddpT + gcdT)); (*(here->B4SOISPtempPtr) += m * (-GmT + gsspT + gcsT)); (*(here->B4SOIBtempPtr) += m * (gbbT + gcbT - gigT)); (*(here->B4SOIEtempPtr) += m * gceT); (*(here->B4SOIGtempPtr) += m * (gcgT + gigT)); (*(here->B4SOITemptempPtr) += m * (gTtt + 1/pParam->B4SOIrth + gcTt)); (*(here->B4SOITempgPtr) += m * gTtg); (*(here->B4SOITempbPtr) += m * gTtb); (*(here->B4SOITempdpPtr) += m * gTtdp); (*(here->B4SOITempspPtr) += m * gTtsp); /* v3.0 */ if (here->B4SOIsoiMod != 0) /* v3.2 */ (*(here->B4SOITempePtr) += m * gTte); } #else /* OpenMP parallelization: Temporary storage of matrix values into instance storage space. Update to matrix will be done by function B4SOILoadRhsMat() only when all instances have their values stored. */ if (here->B4SOIrgateMod == 1) { here->B4SOI_1 = m * geltd; here->B4SOI_2 = m * geltd; here->B4SOI_3 = m * geltd; } else if (here->B4SOIrgateMod == 2) { here->B4SOI_4 = m * gcrg; here->B4SOI_5 = m * gcrgg; here->B4SOI_6 = m * gcrgd; here->B4SOI_7 = m * gcrgs; here->B4SOI_8 = m * gcrg; if (here->B4SOIsoiMod !=2) /* v3.2 */ here->B4SOI_9 = m * gcrgb; } else if (here->B4SOIrgateMod == 3) { here->B4SOI_10 = m * geltd; here->B4SOI_11 = m * geltd; here->B4SOI_12 = m * geltd; here->B4SOI_13 = m * (geltd + gcrg + gcgmgmb); here->B4SOI_14 = m * (gcrgd + gcgmdb); here->B4SOI_15 = m * gcrgg; here->B4SOI_16 = m * (gcrgs + gcgmsb); here->B4SOI_17 = m * gcgmeb; if (here->B4SOIsoiMod !=2) /* v3.2 */ here->B4SOI_18 = m * gcrgb; here->B4SOI_19 = m * gcdgmb; here->B4SOI_20 = m * gcrg; here->B4SOI_21 = m * gcsgmb; here->B4SOI_22 = m * gcegmb; } /* v3.1 added for RF end*/ /* v3.0 */ if (here->B4SOIsoiMod != 0) /* v3.2 */ { here->B4SOI_23 = m * (Gme + gddpe); here->B4SOI_24 = m * (gsspe - Gme); if (here->B4SOIsoiMod != 2) /* v3.2 */ { here->B4SOI_25 = m * gige; here->B4SOI_26 = m * gige; } } here->B4SOI_27 = m * gcedb; here->B4SOI_28 = m * gcesb; here->B4SOI_29 = m * gcdeb; here->B4SOI_30 = m * gcseb; here->B4SOI_31 = m * gcegb; here->B4SOI_32 = m * gcgeb; /* v3.1 */ if (here->B4SOIsoiMod != 2) /* v3.2 */ { here->B4SOI_33 = m * (gcegb + gcedb + gcesb + gceeb + gcegmb); /* 3.2 bug fix */ /* v3.1 changed GbPtr for RF */ if ((here->B4SOIrgateMod == 0) || (here->B4SOIrgateMod == 1)) (here->B4SOI_34 = m * (-gigb + gcggb + gcgdb + gcgsb + gcgeb - gIgtotb)); else /* v3.1 for rgateMod = 2 or 3 */ here->B4SOI_35 = m * (gigb + gcgbb +gIgtotb - gcrgb); here->B4SOI_36 = m * (-gddpb - Gmbs - gcdbb + gdtotb + gIdtotb ); /* v4.0 */ /* (*(here->B4SOIDPbPtr) -= (-gddpb - Gmbs + gcdgb + gcddb + gcdeb + gcdsb) + gcdgmb + gIdtotb ); */ (here->B4SOI_37 = m * (-gsspb + Gmbs - gcsbb + gstotb + Gmin + gIstotb)); /* v4.0 */ /* (*(here->B4SOISPbPtr) -= (-gsspb + Gmbs + gcsgb + gcsdb + gcseb + gcssb) + gcsgmb + Gmin + gIstotb); */ (here->B4SOI_38 = m * (gbbe + gcbeb)); /* v3.0 */ (here->B4SOI_39 = m * (-gigg + gcbgb + gbbg)); (here->B4SOI_40 = m * (-gigd + gcbdb + gbbdp)); (here->B4SOI_41 = m * (gcbsb + gbbsp - Gmin - gigs)); /* if (!here->B4SOIrbodyMod) */ (here->B4SOI_42 = m * (-gigb + gbbb - gcbgb - gcbdb - gcbsb - gcbeb + Gmin)); /* else (*(here->B4SOIBbPtr) += -gigb - (Giib - Gbpbs) - gcbgb - gcbdb - gcbsb - gcbeb + Gmin) ; */ /* v4.0 */ if (here->B4SOIrbodyMod) { (here->B4SOI_43 = m * (-gcjdbdp - GGjdb)); (here->B4SOI_44 = m * (-gcjsbsp - GGjsb)); (here->B4SOI_45 = m * (-gcjdbdp - GGjdb)); (here->B4SOI_46 = m * (gcjdbdp + GGjdb + here->B4SOIgrbdb)); (here->B4SOI_47 = m * here->B4SOIgrbdb); (here->B4SOI_48 = m * (-gcjsbsp - GGjsb)); (here->B4SOI_49 = m * here->B4SOIgrbsb); (here->B4SOI_50 = m * (gcjsbsp + GGjsb + here->B4SOIgrbsb)); (here->B4SOI_51 = m * here->B4SOIgrbdb); (here->B4SOI_52 = m * here->B4SOIgrbsb); (here->B4SOI_53 = m * (here->B4SOIgrbsb + here->B4SOIgrbdb)); } if (model->B4SOIrdsMod) { (here->B4SOI_54 = m * gdtotb); (here->B4SOI_55 = m * gstotb); } } /* v3.1 */ if (model->B4SOIrdsMod) { (here->B4SOI_56 = m * gdtotg); (here->B4SOI_57 = m * gdtots); (here->B4SOI_58 = m * gstotd); (here->B4SOI_59 = m * gstotg); } (here->B4SOI_60 = m * gceeb); if (here->B4SOIrgateMod == 0) { (here->B4SOI_61 = m * (gigg + gcggb + Gmin + gIgtotg)); (here->B4SOI_62 =m * ( gigd + gcgdb - Gmin + gIgtotd)); (here->B4SOI_63 = m * (gcgsb + gigs + gIgtots)); } else if (here->B4SOIrgateMod == 1) /* v3.1 for RF */ { here->B4SOI_64 = m * (gigg + gcggb + Gmin + gIgtotg + geltd); here->B4SOI_65 = m * (gigd + gcgdb - Gmin + gIgtotd); here->B4SOI_66 = m * (gcgsb + gigs + gIgtots); } else /* v3.1 for RF rgateMod == 2 or 3 */ { here->B4SOI_67 = m * (gigg + gcggb + Gmin + gIgtotg - gcrgg); here->B4SOI_68 = m * (gigd + gcgdb - Gmin + gIgtotd - gcrgd); here->B4SOI_69 = m * (gcgsb + gigs + gIgtots - gcrgs); } (here->B4SOI_70 = m * ((Gm + gcdgb) + gddpg - Gmin - gIdtotg - gdtotg)); /* v4.0 */ (here->B4SOI_71 = m * ((gdpr + here->B4SOIgds + gddpdp + RevSum + gcddb) + Gmin - gIdtotd - gdtotd)); /* v4.0 */ (here->B4SOI_72 = m * ((-gddpsp + here->B4SOIgds + FwdSum - gcdsb) + gIdtots + gdtots)); (here->B4SOI_73 = m * (gdpr + gdtot)); (here->B4SOI_74 = m * (gcsgb - Gm + gsspg - gIstotg - gstotg)); /* v4.0 */ (here->B4SOI_75 = m * ((here->B4SOIgds - gsspdp + RevSum - gcsdb + gIstotd) + gstotd)); /* v4.0 */ (here->B4SOI_76 = m * ((gspr - gstots + here->B4SOIgds + gsspsp + FwdSum + gcssb) + Gmin - gIstots)); /* v4.0 */ (here->B4SOI_77 = m * (gspr + gstot)); (here->B4SOI_78 = m * (gdpr + gdtot)); (here->B4SOI_79 = m * (gdpr - gdtotd)); (here->B4SOI_80 = m * (gspr + gstot)); (here->B4SOI_81 = m * (gspr - gstots)); if (here->B4SOIbodyMod == 1) { (here->B4SOI_82 = m * gppp); (here->B4SOI_83 = m * gppb); (here->B4SOI_84 = m * gppp); } /* v4.1 Ig_agbcp2 stamping */ (here->B4SOI_85 = m * gigpg); /* FIXME m or not m ?? h_vogt */ if (here->B4SOIbodyMod == 1) { (here->B4SOI_86 = m * gigpp); (here->B4SOI_87 = m * gigpg); (here->B4SOI_88 = m * gigpp); } else if(here->B4SOIbodyMod == 2) { (here->B4SOI_89 = m * gigpp); (here->B4SOI_90 = m * gigpg); (here->B4SOI_91 = m * gigpp); } if (selfheat) { (here->B4SOI_92 = m * (GmT + gddpT + gcdT)); (here->B4SOI_93 = m * (-GmT + gsspT + gcsT)); (here->B4SOI_94 = m * (gbbT + gcbT - gigT)); (here->B4SOI_95 = m * gceT); (here->B4SOI_96 = m * (gcgT + gigT)); (here->B4SOI_97 = m * (gTtt + 1/pParam->B4SOIrth + gcTt)); (here->B4SOI_98 = m * gTtg); (here->B4SOI_99 = m * gTtb); (here->B4SOI_100 = m * gTtdp); (here->B4SOI_101 = m * gTtsp); /* v3.0 */ if (here->B4SOIsoiMod != 0) /* v3.2 */ (here->B4SOI_102 = m * gTte); } #endif if (here->B4SOIdebugMod != 0) { *(here->B4SOIVbsPtr) += 1; *(here->B4SOIIdsPtr) += 1; *(here->B4SOIIcPtr) += 1; *(here->B4SOIIbsPtr) += 1; *(here->B4SOIIbdPtr) += 1; *(here->B4SOIIiiPtr) += 1; *(here->B4SOIIgPtr) += 1; *(here->B4SOIGiggPtr) += 1; *(here->B4SOIGigdPtr) += 1; *(here->B4SOIGigbPtr) += 1; *(here->B4SOIIgidlPtr) += 1; *(here->B4SOIItunPtr) += 1; *(here->B4SOIIbpPtr) += 1; *(here->B4SOICbgPtr) += 1; *(here->B4SOICbbPtr) += 1; *(here->B4SOICbdPtr) += 1; *(here->B4SOIQbfPtr) += 1; *(here->B4SOIQjsPtr) += 1; *(here->B4SOIQjdPtr) += 1; } line1000: ; #ifndef USE_OMP } /* End of Mosfet Instance */ } /* End of Model Instance */ #endif return(OK); } #ifdef USE_OMP /* OpenMP parallelization: Update of right hand side and matrix values from instance temporary storage. Update to matrix will be done only when all instances of this model have their values calculated and stored. Thus there is no further synchronisation required.*/ void B4SOILoadRhsMat(GENmodel *inModel, CKTcircuit *ckt) { int InstCount, idx; B4SOIinstance **InstArray; B4SOIinstance *here; B4SOImodel *model = (B4SOImodel*)inModel; InstArray = model->B4SOIInstanceArray; InstCount = model->B4SOIInstCount; for(idx = 0; idx < InstCount; idx++) { here = InstArray[idx]; model = B4SOImodPtr(here); /* Update b for Ax = b */ /* v3.1 */ /* v3.1 added ceqgcrg for RF */ (*(ckt->CKTrhs + here->B4SOIgNode) -= here->B4SOINode_1); /* v3.1 added ceqgcrg for RF end */ (*(ckt->CKTrhs + here->B4SOIdNodePrime) += here->B4SOINode_2); if (!here->B4SOIrbodyMod) { (*(ckt->CKTrhs + here->B4SOIsNodePrime) += here->B4SOINode_3); /* v4.0 */ } else { /* v4.0 */ (*(ckt->CKTrhs + here->B4SOIsNodePrime) += here->B4SOINode_4); } (*(ckt->CKTrhs + here->B4SOIeNode) -= here->B4SOINode_5); if (here->B4SOIrgateMod == 2) (*(ckt->CKTrhs + here->B4SOIgNodeExt) -= here->B4SOINode_6); else if (here->B4SOIrgateMod == 3) (*(ckt->CKTrhs + here->B4SOIgNodeMid) -= here->B4SOINode_7); if (here->B4SOIbodyMod == 1) { (*(ckt->CKTrhs + here->B4SOIpNode) += here->B4SOINode_8); } if ( here->B4SOIsoiMod != 2 ) {if (!here->B4SOIrbodyMod) (*(ckt->CKTrhs + here->B4SOIbNode) -= here->B4SOINode_9); else /* v4.0 */ { (*(ckt->CKTrhs + here->B4SOIdbNode) -= here->B4SOINode_10); (*(ckt->CKTrhs + here->B4SOIbNode) -= here->B4SOINode_11); (*(ckt->CKTrhs + here->B4SOIsbNode) -= here->B4SOINode_12); } } if (here->B4SOINode_sh) { (*(ckt->CKTrhs + here->B4SOItempNode) -= here->B4SOINode_13); } if (model->B4SOIrdsMod) { (*(ckt->CKTrhs + here->B4SOIdNode) -= here->B4SOINode_14); (*(ckt->CKTrhs + here->B4SOIsNode) += here->B4SOINode_15); } if (here->B4SOIdebugMod != 0) { *(ckt->CKTrhs + here->B4SOIvbsNode) = here->B4SOIvbseff; *(ckt->CKTrhs + here->B4SOIidsNode) = FLOG(here->B4SOIids); *(ckt->CKTrhs + here->B4SOIicNode) = FLOG(here->B4SOIic); *(ckt->CKTrhs + here->B4SOIibsNode) = FLOG(here->B4SOIibs); *(ckt->CKTrhs + here->B4SOIibdNode) = FLOG(here->B4SOIibd); *(ckt->CKTrhs + here->B4SOIiiiNode) = FLOG(here->B4SOIiii); *(ckt->CKTrhs + here->B4SOIigNode) = here->B4SOIig; *(ckt->CKTrhs + here->B4SOIgiggNode) = here->B4SOIgigg; *(ckt->CKTrhs + here->B4SOIgigdNode) = here->B4SOIgigd; *(ckt->CKTrhs + here->B4SOIgigbNode) = here->B4SOIgigb; *(ckt->CKTrhs + here->B4SOIigidlNode) = here->B4SOIigidl; *(ckt->CKTrhs + here->B4SOIitunNode) = here->B4SOIitun; *(ckt->CKTrhs + here->B4SOIibpNode) = here->B4SOIibp; *(ckt->CKTrhs + here->B4SOIcbbNode) = here->B4SOIcbb; *(ckt->CKTrhs + here->B4SOIcbdNode) = here->B4SOIcbd; *(ckt->CKTrhs + here->B4SOIcbgNode) = here->B4SOIcbg; *(ckt->CKTrhs + here->B4SOIqbfNode) = here->B4SOIqbf; *(ckt->CKTrhs + here->B4SOIqjsNode) = here->B4SOIqjs; *(ckt->CKTrhs + here->B4SOIqjdNode) = here->B4SOIqjd; } if (here->B4SOIrgateMod == 1) { *(here->B4SOIGEgePtr) += here->B4SOI_1; *(here->B4SOIGgePtr) -= here->B4SOI_2; *(here->B4SOIGEgPtr) -= here->B4SOI_3; } else if (here->B4SOIrgateMod == 2) { *(here->B4SOIGEgePtr) += here->B4SOI_4; *(here->B4SOIGEgPtr) += here->B4SOI_5; *(here->B4SOIGEdpPtr) += here->B4SOI_6; *(here->B4SOIGEspPtr) += here->B4SOI_7; *(here->B4SOIGgePtr) -= here->B4SOI_8; if (here->B4SOIsoiMod !=2) /* v3.2 */ *(here->B4SOIGEbPtr) += here->B4SOI_9; } else if (here->B4SOIrgateMod == 3) { *(here->B4SOIGEgePtr) += here->B4SOI_10; *(here->B4SOIGEgmPtr) -= here->B4SOI_11; *(here->B4SOIGMgePtr) -= here->B4SOI_12; *(here->B4SOIGMgmPtr) += here->B4SOI_13; *(here->B4SOIGMdpPtr) += here->B4SOI_14; *(here->B4SOIGMgPtr) += here->B4SOI_15; *(here->B4SOIGMspPtr) += here->B4SOI_16; *(here->B4SOIGMePtr) += here->B4SOI_17; if (here->B4SOIsoiMod !=2) /* v3.2 */ *(here->B4SOIGMbPtr) += here->B4SOI_18; *(here->B4SOIDPgmPtr) += here->B4SOI_19; *(here->B4SOIGgmPtr) -= here->B4SOI_20; *(here->B4SOISPgmPtr) += here->B4SOI_21; *(here->B4SOIEgmPtr) += here->B4SOI_22; } /* v3.1 added for RF end*/ /* v3.0 */ if (here->B4SOIsoiMod != 0) /* v3.2 */ { (*(here->B4SOIDPePtr) += here->B4SOI_23); (*(here->B4SOISPePtr) += here->B4SOI_24); if (here->B4SOIsoiMod != 2) /* v3.2 */ { *(here->B4SOIGePtr) += here->B4SOI_25; *(here->B4SOIBePtr) -= here->B4SOI_26; } } *(here->B4SOIEdpPtr) += here->B4SOI_27; *(here->B4SOIEspPtr) += here->B4SOI_28; *(here->B4SOIDPePtr) += here->B4SOI_29; *(here->B4SOISPePtr) += here->B4SOI_30; *(here->B4SOIEgPtr) += here->B4SOI_31; *(here->B4SOIGePtr) += here->B4SOI_32; /* v3.1 */ if (here->B4SOIsoiMod != 2) /* v3.2 */ { (*(here->B4SOIEbPtr) -= here->B4SOI_33); /* 3.2 bug fix */ /* v3.1 changed GbPtr for RF */ if ((here->B4SOIrgateMod == 0) || (here->B4SOIrgateMod == 1)) (*(here->B4SOIGbPtr) -= here->B4SOI_34); else /* v3.1 for rgateMod = 2 or 3 */ *(here->B4SOIGbPtr) += here->B4SOI_35; (*(here->B4SOIDPbPtr) -= here->B4SOI_36); /* v4.0 */ /* (*(here->B4SOIDPbPtr) -= (-gddpb - Gmbs + gcdgb + gcddb + gcdeb + gcdsb) + gcdgmb + gIdtotb ); */ (*(here->B4SOISPbPtr) -= here->B4SOI_37); /* v4.0 */ /* (*(here->B4SOISPbPtr) -= (-gsspb + Gmbs + gcsgb + gcsdb + gcseb + gcssb) + gcsgmb + Gmin + gIstotb); */ (*(here->B4SOIBePtr) += here->B4SOI_38); /* v3.0 */ (*(here->B4SOIBgPtr) += here->B4SOI_39); (*(here->B4SOIBdpPtr) += here->B4SOI_40); (*(here->B4SOIBspPtr) += here->B4SOI_41); /* if (!here->B4SOIrbodyMod) */ (*(here->B4SOIBbPtr) += here->B4SOI_42); /* else (*(here->B4SOIBbPtr) += -gigb - (Giib - Gbpbs) - gcbgb - gcbdb - gcbsb - gcbeb + Gmin) ; */ /* v4.0 */ if (here->B4SOIrbodyMod) { (*(here->B4SOIDPdbPtr) += here->B4SOI_43); (*(here->B4SOISPsbPtr) += here->B4SOI_44); (*(here->B4SOIDBdpPtr) += here->B4SOI_45); (*(here->B4SOIDBdbPtr) += here->B4SOI_46); (*(here->B4SOIDBbPtr) -= here->B4SOI_47); (*(here->B4SOISBspPtr) += here->B4SOI_48); (*(here->B4SOISBbPtr) -= here->B4SOI_49); (*(here->B4SOISBsbPtr) += here->B4SOI_50); (*(here->B4SOIBdbPtr) -= here->B4SOI_51); (*(here->B4SOIBsbPtr) -= here->B4SOI_52); (*(here->B4SOIBbPtr) += here->B4SOI_53); } if (model->B4SOIrdsMod) { (*(here->B4SOIDbPtr) += here->B4SOI_54); (*(here->B4SOISbPtr) += here->B4SOI_55); } } /* v3.1 */ if (model->B4SOIrdsMod) { (*(here->B4SOIDgPtr) += here->B4SOI_56); (*(here->B4SOIDspPtr) += here->B4SOI_57); (*(here->B4SOISdpPtr) += here->B4SOI_58); (*(here->B4SOISgPtr) += here->B4SOI_59); } (*(here->B4SOIEePtr) += here->B4SOI_60); if (here->B4SOIrgateMod == 0) { (*(here->B4SOIGgPtr) += here->B4SOI_61); (*(here->B4SOIGdpPtr) += here->B4SOI_62); (*(here->B4SOIGspPtr) += here->B4SOI_63); } else if (here->B4SOIrgateMod == 1) /* v3.1 for RF */ { *(here->B4SOIGgPtr) += here->B4SOI_64; *(here->B4SOIGdpPtr) += here->B4SOI_65; *(here->B4SOIGspPtr) += here->B4SOI_66; } else /* v3.1 for RF rgateMod == 2 or 3 */ { *(here->B4SOIGgPtr) += here->B4SOI_67; *(here->B4SOIGdpPtr) += here->B4SOI_68; *(here->B4SOIGspPtr) += here->B4SOI_69; } (*(here->B4SOIDPgPtr) += here->B4SOI_70); /* v4.0 */ (*(here->B4SOIDPdpPtr) += here->B4SOI_71); /* v4.0 */ (*(here->B4SOIDPspPtr) -= here->B4SOI_72); (*(here->B4SOIDPdPtr) -= here->B4SOI_73); (*(here->B4SOISPgPtr) += here->B4SOI_74); /* v4.0 */ (*(here->B4SOISPdpPtr) -= here->B4SOI_75); /* v4.0 */ (*(here->B4SOISPspPtr) += here->B4SOI_76); /* v4.0 */ (*(here->B4SOISPsPtr) -= here->B4SOI_77); (*(here->B4SOIDdPtr) += here->B4SOI_78); (*(here->B4SOIDdpPtr) -= here->B4SOI_79); (*(here->B4SOISsPtr) += here->B4SOI_80); (*(here->B4SOISspPtr) -= here->B4SOI_81); if (here->B4SOIbodyMod == 1) { (*(here->B4SOIBpPtr) -= here->B4SOI_82); (*(here->B4SOIPbPtr) += here->B4SOI_83); (*(here->B4SOIPpPtr) += here->B4SOI_84); } /* v4.1 Ig_agbcp2 stamping */ (*(here->B4SOIGgPtr) += here->B4SOI_85); /* FIXME m or not m ?? h_vogt */ if (here->B4SOIbodyMod == 1) { (*(here->B4SOIPpPtr) -= here->B4SOI_86); (*(here->B4SOIPgPtr) -= here->B4SOI_87); (*(here->B4SOIGpPtr) += here->B4SOI_88); } else if(here->B4SOIbodyMod == 2) { (*(here->B4SOIBbPtr) -= here->B4SOI_89); (*(here->B4SOIBgPtr) -= here->B4SOI_90); (*(here->B4SOIGbPtr) += here->B4SOI_91); } if (here->B4SOINode_sh) /* selfheat */ { (*(here->B4SOIDPtempPtr) += here->B4SOI_92); (*(here->B4SOISPtempPtr) += here->B4SOI_93); (*(here->B4SOIBtempPtr) += here->B4SOI_94); (*(here->B4SOIEtempPtr) +=here->B4SOI_95); (*(here->B4SOIGtempPtr) += here->B4SOI_96); (*(here->B4SOITemptempPtr) += here->B4SOI_97); (*(here->B4SOITempgPtr) += here->B4SOI_98); (*(here->B4SOITempbPtr) += here->B4SOI_99); (*(here->B4SOITempdpPtr) += here->B4SOI_100); (*(here->B4SOITempspPtr) += here->B4SOI_101); /* v3.0 */ if (here->B4SOIsoiMod != 0) /* v3.2 */ (*(here->B4SOITempePtr) += here->B4SOI_102); } if (here->B4SOIdebugMod != 0) { *(here->B4SOIVbsPtr) += 1; *(here->B4SOIIdsPtr) += 1; *(here->B4SOIIcPtr) += 1; *(here->B4SOIIbsPtr) += 1; *(here->B4SOIIbdPtr) += 1; *(here->B4SOIIiiPtr) += 1; *(here->B4SOIIgPtr) += 1; *(here->B4SOIGiggPtr) += 1; *(here->B4SOIGigdPtr) += 1; *(here->B4SOIGigbPtr) += 1; *(here->B4SOIIgidlPtr) += 1; *(here->B4SOIItunPtr) += 1; *(here->B4SOIIbpPtr) += 1; *(here->B4SOICbgPtr) += 1; *(here->B4SOICbbPtr) += 1; *(here->B4SOICbdPtr) += 1; *(here->B4SOIQbfPtr) += 1; *(here->B4SOIQjsPtr) += 1; *(here->B4SOIQjdPtr) += 1; } } } #endif tmpk8ny_4pz/src/spicelib/devices/bsimsoi/b4soi.c0000644000175000017500000023122613546075722022022 0ustar carstencarsten/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/ /********** * Copyright 2010 Regents of the University of California. All rights reserved. * Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang * Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soi.c * Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu. * Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu. * Authors: 2010- Tanvir Morshed, Ali Niknejad, Chenming Hu. * File: b4soi.c * Modified by Hui Wan, Xuemei Xi 11/30/2005 * Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009 * Modified by Tanvir Morshed 09/22/2009 * Modified by Tanvir Morshed 12/31/2009 * Modified by Tanvir Morshed 12/16/2010 **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "b4soidef.h" #include "ngspice/suffix.h" IFparm B4SOIpTable[] = { /* parameters */ IOP( "l", B4SOI_L, IF_REAL , "Length"), IOP( "w", B4SOI_W, IF_REAL , "Width"), IOP( "m", B4SOI_M, IF_REAL , "Parallel Multiplier"), IOP( "nf", B4SOI_NF, IF_REAL , "Number of fingers"), IOP( "sa", B4SOI_SA, IF_REAL , "distance between OD edge to poly of one side "), IOP( "sb", B4SOI_SB, IF_REAL , "distance between OD edge to poly of the other side"), IOP( "sd", B4SOI_SD, IF_REAL , "distance between neighbour fingers"), IOP( "ad", B4SOI_AD, IF_REAL , "Drain area"), IOP( "as", B4SOI_AS, IF_REAL , "Source area"), IOP( "pd", B4SOI_PD, IF_REAL , "Drain perimeter"), IOP( "ps", B4SOI_PS, IF_REAL , "Source perimeter"), IOP( "nrd", B4SOI_NRD, IF_REAL , "Number of squares in drain"), IOP( "nrs", B4SOI_NRS, IF_REAL , "Number of squares in source"), IOP( "off", B4SOI_OFF, IF_FLAG , "Device is initially off"), IP( "ic", B4SOI_IC, IF_REALVEC , "Vector of DS,GS,BS initial voltages"), OP( "gmbs", B4SOI_GMBS, IF_REAL, "Gmb"), OP( "gm", B4SOI_GM, IF_REAL, "Gm"), OP( "gmids", B4SOI_GMID, IF_REAL, "Gm/Ids"), OP( "gds", B4SOI_GDS, IF_REAL, "Gds"), OP( "vdsat", B4SOI_VDSAT, IF_REAL, "Vdsat"), OP( "vth", B4SOI_VON, IF_REAL, "Vth"), OP( "ids", B4SOI_CD, IF_REAL, "Ids"), OP( "vbs", B4SOI_VBS, IF_REAL, "Vbs"), OP( "vgs", B4SOI_VGS, IF_REAL, "Vgs"), OP( "vds", B4SOI_VDS, IF_REAL, "Vds"), OP( "ves", B4SOI_VES, IF_REAL, "Ves"), OP( "ibd", B4SOI_IBD, IF_REAL, "Ibd"), OP( "ibs", B4SOI_IBS, IF_REAL, "Ibs"), OP( "isub", B4SOI_ISUB, IF_REAL, "Isub"), OP( "igidl", B4SOI_IGIDL, IF_REAL, "Igidl"), OP( "igisl", B4SOI_IGISL, IF_REAL, "Igisl"), OP( "igs", B4SOI_IGS, IF_REAL, "Igs"), OP( "igd", B4SOI_IGD, IF_REAL, "Igd"), OP( "igb", B4SOI_IGB, IF_REAL, "Igb"), OP( "igcs", B4SOI_IGCS, IF_REAL, "Igcs"), OP( "igcd", B4SOI_IGCD, IF_REAL, "Igcd"), OP( "cgg", B4SOI_CGG, IF_REAL, "Cggb"), OP( "cgs", B4SOI_CGS, IF_REAL, "Cgsb"), OP( "cgd", B4SOI_CGD, IF_REAL, "Cgdb"), OP( "cbg", B4SOI_CBG, IF_REAL, "Cbgb"), OP( "cbd", B4SOI_CBD, IF_REAL, "Cbdb"), OP( "cbs", B4SOI_CBS, IF_REAL, "Cbsb"), OP( "cdg", B4SOI_CDG, IF_REAL, "Cdgb"), OP( "cdd", B4SOI_CDD, IF_REAL, "Cddb"), OP( "cds", B4SOI_CDS, IF_REAL, "Cdsb"), OP( "capbd", B4SOI_CAPBD, IF_REAL, "Capbd"), OP( "capbs", B4SOI_CAPBS, IF_REAL, "Capbs"), OP( "qg", B4SOI_QG, IF_REAL, "Qgate"), OP( "qb", B4SOI_QB, IF_REAL, "Qbulk"), OP( "qd", B4SOI_QD, IF_REAL, "Qdrain"), OP( "qs", B4SOI_QS, IF_REAL, "Qsource"), #ifdef B4SOI_DEBUG_OUT OP( "debug1", B4SOI_DEBUG1, IF_REAL, "DebugOut1"), OP( "debug2", B4SOI_DEBUG2, IF_REAL, "DebugOut2"), OP( "debug3", B4SOI_DEBUG3, IF_REAL, "DebugOut3"), #endif IOP( "bjtoff", B4SOI_BJTOFF, IF_INTEGER, "BJT on/off flag"), IOP( "debug", B4SOI_DEBUG, IF_INTEGER, "DEBUG on/off flag"), IOP( "rth0", B4SOI_RTH0, IF_REAL, "Instance Thermal Resistance"), IOP( "cth0", B4SOI_CTH0, IF_REAL, "Instance Thermal Capacitance"), IOP( "nrb", B4SOI_NRB, IF_REAL, "Number of squares in body"), IOP( "frbody", B4SOI_FRBODY, IF_REAL, "layout dependent body-resistance coefficient"), /* v4.0 */ IOP( "rbdb", B4SOI_RBDB, IF_REAL , "Body resistance"), IOP( "rbsb", B4SOI_RBSB, IF_REAL , "Body resistance"), IOP( "delvto", B4SOI_DELVTO, IF_REAL, "Zero bias threshold voltage variation"), IOPR( "delvt0", B4SOI_DELVTO, IF_REAL, "Zero bias threshold voltage variation"), /* v4.0 end */ IOP( "soimod", B4SOI_SOIMOD, IF_INTEGER, "Instance model selector for PD/FD operation"), /* v3.2 */ /* v2.0 release */ IOP( "nbc", B4SOI_NBC, IF_REAL, "Number of body contact isolation edge"), IOP( "nseg", B4SOI_NSEG, IF_REAL, "Number segments for width partitioning"), IOP( "pdbcp", B4SOI_PDBCP, IF_REAL, "Perimeter length for bc parasitics at drain side"), IOP( "psbcp", B4SOI_PSBCP, IF_REAL, "Perimeter length for bc parasitics at source side"), IOP( "agbcp", B4SOI_AGBCP, IF_REAL, "Gate to body overlap area for bc parasitics"), IOP( "agbcp2", B4SOI_AGBCP2, IF_REAL, "Parasitic Gate to body overlap area for bc parasitics"), /* v4.1 improvement on BC */ IOP( "agbcpd", B4SOI_AGBCPD, IF_REAL, "Gate to body overlap area for bc parasitics in DC"), IOP( "aebcp", B4SOI_AEBCP, IF_REAL, "Substrate to body overlap area for bc prasitics"), IOP( "vbsusr", B4SOI_VBSUSR, IF_REAL, "Vbs specified by user"), IOP( "tnodeout", B4SOI_TNODEOUT, IF_FLAG, "Flag indicating external temp node"), /*v3.1 added rgatemod */ IOP( "rgatemod", B4SOI_RGATEMOD, IF_INTEGER, "Gate resistance model selector"), /*v3.1 added rgatemod */ IOP( "rbodymod", B4SOI_RBODYMOD, IF_INTEGER, "Body R model selector"),/* v4.0 */ }; IFparm B4SOImPTable[] = { /* model parameters */ /*4.1*/ IOP( "mtrlmod", B4SOI_MOD_MTRLMOD, IF_INTEGER, "parameter for non-silicon substrate or metal gate selector"), IOP( "vgstcvmod", B4SOI_MOD_VGSTCVMOD, IF_INTEGER, "Improved VgsteffCV selector"), IOP( "gidlmod", B4SOI_MOD_GIDLMOD, IF_INTEGER, "parameter for GIDL selector"), IOP( "iiimod", B4SOI_MOD_IIIMOD, IF_INTEGER, "parameter for III selector"), IOP( "eot", B4SOI_MOD_EOT, IF_REAL, "Effective SiO2 thickness"), IOP( "epsrox", B4SOI_MOD_EPSROX, IF_REAL, "Dielectric constant of the gate oxide relative to vacuum"), IOP( "epsrsub", B4SOI_MOD_EPSRSUB, IF_REAL, "Dielectric constant of substrate relative to vacuum"), IOP( "ni0sub", B4SOI_MOD_NI0SUB, IF_REAL, "Intrinsic carrier concentration of substrate at Tnom"), IOP( "bg0sub", B4SOI_MOD_BG0SUB, IF_REAL, "Band-gap of substrate at T=0K"), IOP( "tbgasub", B4SOI_MOD_TBGASUB, IF_REAL, "First parameter of band-gap change due to temperature"), IOP( "tbgbsub", B4SOI_MOD_TBGBSUB, IF_REAL, "Second parameter of band-gap change due to temperature"), IOP( "phig", B4SOI_MOD_PHIG, IF_REAL, "Work function of gate"), IOP( "easub",B4SOI_MOD_EASUB, IF_REAL, "Electron affinity of substrate"), IOP( "leffeot", B4SOI_MOD_LEFFEOT, IF_REAL, "Effective length for extraction of EOT"), IOP( "weffeot", B4SOI_MOD_WEFFEOT, IF_REAL, "Effective width for extraction of EOT"), IOP( "vddeot", B4SOI_MOD_VDDEOT, IF_REAL, "Voltage for extraction of EOT"), IOP( "tempeot", B4SOI_MOD_TEMPEOT, IF_REAL, " Temperature for extraction of EOT"), IOP( "ados", B4SOI_MOD_ADOS, IF_REAL, "Charge centroid parameter"), IOP( "bdos", B4SOI_MOD_BDOS, IF_REAL, "Charge centroid parameter"), IOP( "epsrgate", B4SOI_MOD_EPSRGATE, IF_REAL, "Dielectric constant of gate relative to vacuum"), IOP( "capmod", B4SOI_MOD_CAPMOD, IF_INTEGER, "Capacitance model selector"), IOP( "mobmod", B4SOI_MOD_MOBMOD, IF_INTEGER, "Mobility model selector"), /*IOP( "noimod", B4SOI_MOD_NOIMOD, IF_INTEGER, "Noise model selector"), v3.2 */ IOP( "paramchk", B4SOI_MOD_PARAMCHK, IF_INTEGER, "Model parameter checking selector"), IOP( "binunit", B4SOI_MOD_BINUNIT, IF_INTEGER, "Bin unit selector"), IOP( "version", B4SOI_MOD_VERSION, IF_REAL, " parameter for model version"), IOP( "tox", B4SOI_MOD_TOX, IF_REAL, "Gate oxide thickness in meters"), IOP( "toxp", B4SOI_MOD_TOXP, IF_REAL, " Physical gate oxide thickness"), IOP( "toxm", B4SOI_MOD_TOXM, IF_REAL, "Gate oxide thickness used in extraction"), /* v3.2 */ IOP( "dtoxcv", B4SOI_MOD_DTOXCV, IF_REAL, "Delta oxide thickness in meters in CapMod3"), /* v2.2.3 */ IOP( "cdsc", B4SOI_MOD_CDSC, IF_REAL, "Drain/Source and channel coupling capacitance"), IOP( "cdscb", B4SOI_MOD_CDSCB, IF_REAL, "Body-bias dependence of cdsc"), IOP( "cdscd", B4SOI_MOD_CDSCD, IF_REAL, "Drain-bias dependence of cdsc"), IOP( "cit", B4SOI_MOD_CIT, IF_REAL, "Interface state capacitance"), IOP( "nfactor", B4SOI_MOD_NFACTOR, IF_REAL, "Subthreshold swing Coefficient"), IOP( "vsat", B4SOI_MOD_VSAT, IF_REAL, "Saturation velocity at tnom"), IOP( "at", B4SOI_MOD_AT, IF_REAL, "Temperature coefficient of vsat"), IOP( "a0", B4SOI_MOD_A0, IF_REAL, "Non-uniform depletion width effect coefficient."), IOP( "ags", B4SOI_MOD_AGS, IF_REAL, "Gate bias coefficient of Abulk."), IOP( "a1", B4SOI_MOD_A1, IF_REAL, "Non-saturation effect coefficient"), IOP( "a2", B4SOI_MOD_A2, IF_REAL, "Non-saturation effect coefficient"), IOP( "keta", B4SOI_MOD_KETA, IF_REAL, "Body-bias coefficient of non-uniform depletion width effect."), IOP( "nsub", B4SOI_MOD_NSUB, IF_REAL, "Substrate doping concentration with polarity"), IOP( "nch", B4SOI_MOD_NPEAK, IF_REAL, "Channel doping concentration"), IOP( "ngate", B4SOI_MOD_NGATE, IF_REAL, "Poly-gate doping concentration"), IOP( "nsd", B4SOI_MOD_NSD, IF_REAL, "S/D doping concentration"), IOP( "gamma1", B4SOI_MOD_GAMMA1, IF_REAL, "Vth body coefficient"), IOP( "gamma2", B4SOI_MOD_GAMMA2, IF_REAL, "Vth body coefficient"), IOP( "vbx", B4SOI_MOD_VBX, IF_REAL, "Vth transition body Voltage"), IOP( "vbm", B4SOI_MOD_VBM, IF_REAL, "Maximum body voltage"), IOP( "xt", B4SOI_MOD_XT, IF_REAL, "Doping depth"), IOP( "k1", B4SOI_MOD_K1, IF_REAL, "Bulk effect coefficient 1"), IOP( "kt1", B4SOI_MOD_KT1, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt1l", B4SOI_MOD_KT1L, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt2", B4SOI_MOD_KT2, IF_REAL, "Body-coefficient of kt1"), IOP( "k2", B4SOI_MOD_K2, IF_REAL, "Bulk effect coefficient 2"), IOP( "k3", B4SOI_MOD_K3, IF_REAL, "Narrow width effect coefficient"), IOP( "k3b", B4SOI_MOD_K3B, IF_REAL, "Body effect coefficient of k3"), IOP( "w0", B4SOI_MOD_W0, IF_REAL, "Narrow width effect parameter"), IOP( "lpe0", B4SOI_MOD_LPE0, IF_REAL, "Lateral non-uniform doping effect"), IOP( "lpeb", B4SOI_MOD_LPEB, IF_REAL, "Lateral non-uniform doping effect for body bias"), IOP( "dvt0", B4SOI_MOD_DVT0, IF_REAL, "Short channel effect coeff. 0"), IOP( "dvt1", B4SOI_MOD_DVT1, IF_REAL, "Short channel effect coeff. 1"), IOP( "dvt2", B4SOI_MOD_DVT2, IF_REAL, "Short channel effect coeff. 2"), IOP( "dvt0w", B4SOI_MOD_DVT0W, IF_REAL, "Narrow Width coeff. 0"), IOP( "dvt1w", B4SOI_MOD_DVT1W, IF_REAL, "Narrow Width effect coeff. 1"), IOP( "dvt2w", B4SOI_MOD_DVT2W, IF_REAL, "Narrow Width effect coeff. 2"), IOP( "drout", B4SOI_MOD_DROUT, IF_REAL, "DIBL coefficient of output resistance"), IOP( "dsub", B4SOI_MOD_DSUB, IF_REAL, "DIBL coefficient in the subthreshold region"), IOP( "vth0", B4SOI_MOD_VTH0, IF_REAL,"Threshold voltage"), IOPR("vtho", B4SOI_MOD_VTH0, IF_REAL,"Threshold voltage"), IOP( "vfb", B4SOI_MOD_VFB, IF_REAL, "Flat Band Voltage"), /* v4.1 */ IOP( "ua", B4SOI_MOD_UA, IF_REAL, "Linear gate dependence of mobility"), IOP( "ua1", B4SOI_MOD_UA1, IF_REAL, "Temperature coefficient of ua"), IOP( "ub", B4SOI_MOD_UB, IF_REAL, "Quadratic gate dependence of mobility"), IOP( "ub1", B4SOI_MOD_UB1, IF_REAL, "Temperature coefficient of ub"), IOP( "uc", B4SOI_MOD_UC, IF_REAL, "Body-bias dependence of mobility"), IOP( "uc1", B4SOI_MOD_UC1, IF_REAL, "Temperature coefficient of uc"), IOP( "u0", B4SOI_MOD_U0, IF_REAL, "Low-field mobility at Tnom"), IOP( "eu", B4SOI_MOD_EU, IF_REAL, "Mobility exponent"), IOP( "ute", B4SOI_MOD_UTE, IF_REAL, "Temperature coefficient of mobility"), IOP( "ucs", B4SOI_MOD_UCS, IF_REAL, "Mobility exponent"), IOP( "ucste", B4SOI_MOD_UCSTE, IF_REAL, " Temperature coefficient of UCS"), IOP( "ud", B4SOI_MOD_UD, IF_REAL, "Coulomb scattering factor of mobility"), IOP( "ud1", B4SOI_MOD_UD1, IF_REAL, "Temperature coefficient of ud"), IOP( "voff", B4SOI_MOD_VOFF, IF_REAL, "Threshold voltage offset"), IOP( "tnom", B4SOI_MOD_TNOM, IF_REAL, "Parameter measurement temperature"), IOP( "cgso", B4SOI_MOD_CGSO, IF_REAL, "Gate-source overlap capacitance per width"), IOP( "cgdo", B4SOI_MOD_CGDO, IF_REAL, "Gate-drain overlap capacitance per width"), IOP( "xpart", B4SOI_MOD_XPART, IF_REAL, "Channel charge partitioning"), IOP( "delta", B4SOI_MOD_DELTA, IF_REAL, "Effective Vds parameter"), IOP( "rsh", B4SOI_MOD_RSH, IF_REAL, "Source-drain sheet resistance"), IOP( "rdsw", B4SOI_MOD_RDSW, IF_REAL, "Source-drain resistance per width"), IOP( "rsw", B4SOI_MOD_RSW, IF_REAL, "Source resistance per width"), /* v4.0 */ IOP( "rdw", B4SOI_MOD_RDW, IF_REAL, "Drain resistance per width"), /* v4.0 */ IOP( "rswmin", B4SOI_MOD_RSWMIN, IF_REAL, "Source resistance per width at high Vg"), IOP( "rdwmin", B4SOI_MOD_RDWMIN, IF_REAL, "Drain resistance per width at hight Vg"), IOP( "prwg", B4SOI_MOD_PRWG, IF_REAL, "Gate-bias effect on parasitic resistance "), IOP( "prwb", B4SOI_MOD_PRWB, IF_REAL, "Body-effect on parasitic resistance "), IOP( "prt", B4SOI_MOD_PRT, IF_REAL, "Temperature coefficient of parasitic resistance "), IOP( "eta0", B4SOI_MOD_ETA0, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "etab", B4SOI_MOD_ETAB, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "pclm", B4SOI_MOD_PCLM, IF_REAL, "Channel length modulation Coefficient"), IOP( "pdiblc1", B4SOI_MOD_PDIBL1, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblc2", B4SOI_MOD_PDIBL2, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblcb", B4SOI_MOD_PDIBLB, IF_REAL, "Body-effect on drain-induced barrier lowering"), IOP( "pvag", B4SOI_MOD_PVAG, IF_REAL, "Gate dependence of output resistance parameter"), IOP( "shmod", B4SOI_MOD_SHMOD, IF_INTEGER, "Self heating mode selector"), /* IOP( "ddmod", B4SOI_MOD_DDMOD, IF_INTEGER, "Dynamic depletion mode selector"), */ /*v4.2 soiMod = 1 now has the functionality */ IOP( "tbox", B4SOI_MOD_TBOX, IF_REAL, "Back gate oxide thickness in meters"), IOP( "tsi", B4SOI_MOD_TSI, IF_REAL, "Silicon-on-insulator thickness in meters"), IOP( "etsi", B4SOI_MOD_ETSI, IF_REAL, "Effective Silicon-on-insulator thickness in meters"), IOP( "xj", B4SOI_MOD_XJ, IF_REAL, "Junction Depth"), IOP( "rth0", B4SOI_MOD_RTH0, IF_REAL, "Self-heating thermal resistance"), IOP( "cth0", B4SOI_MOD_CTH0, IF_REAL, "Self-heating thermal capacitance"), IOP( "cfrcoeff", B4SOI_MOD_CFRCOEFF, IF_REAL, "Fringe Cap parameter"), /* v4.4 */ IOP( "egidl", B4SOI_MOD_EGIDL, IF_REAL, "GIDL first parameter"), IOP( "agidl", B4SOI_MOD_AGIDL, IF_REAL, "GIDL second parameter"), IOP( "bgidl", B4SOI_MOD_BGIDL, IF_REAL, "GIDL third parameter"), IOP( "cgidl", B4SOI_MOD_CGIDL, IF_REAL, "GIDL vb parameter"), IOP( "rgidl", B4SOI_MOD_RGIDL, IF_REAL, "GIDL vg parameter"), IOP( "kgidl", B4SOI_MOD_KGIDL, IF_REAL, "GIDL vb parameter"), IOP( "fgidl", B4SOI_MOD_FGIDL, IF_REAL, "GIDL vb parameter"), IOP( "egisl", B4SOI_MOD_EGISL, IF_REAL, "GISL first parameter"), IOP( "agisl", B4SOI_MOD_AGISL, IF_REAL, "GISL second parameter"), IOP( "bgisl", B4SOI_MOD_BGISL, IF_REAL, "GISL third parameter"), IOP( "cgisl", B4SOI_MOD_CGISL, IF_REAL, "GISL vb parameter"), IOP( "rgisl", B4SOI_MOD_RGISL, IF_REAL, "GISL vg parameter"), IOP( "kgisl", B4SOI_MOD_KGISL, IF_REAL, "GISL vb parameter"), IOP( "fgisl", B4SOI_MOD_FGISL, IF_REAL, "GISL vb parameter"), IOP( "ndiode", B4SOI_MOD_NDIODES, IF_REAL,"Diode non-ideality factor"),/*v4.0*/ IOP( "ndioded", B4SOI_MOD_NDIODED, IF_REAL,"Diode non-ideality factor"),/*v4.0*/ IOP( "xbjt", B4SOI_MOD_XBJT, IF_REAL, "Temperature coefficient for Isbjt"), IOP( "xdif", B4SOI_MOD_XDIFS, IF_REAL, "Temperature coefficient for Isdif"), IOP( "xrec", B4SOI_MOD_XRECS, IF_REAL, "Temperature coefficient for Isrec"), IOP( "xtun", B4SOI_MOD_XTUNS, IF_REAL, "Temperature coefficient for Istun"), IOP( "xdifd", B4SOI_MOD_XDIFD, IF_REAL, "Temperature coefficient for Iddif"), IOP( "xrecd", B4SOI_MOD_XRECD, IF_REAL, "Temperature coefficient for Idrec"), IOP( "xtund", B4SOI_MOD_XTUND, IF_REAL, "Temperature coefficient for Idtun"), IOP( "pbswg", B4SOI_MOD_PBSWGS, IF_REAL, "Source(gate side) sidewall junction capacitance built in potential"), /* v4.0 */ IOP( "pbswgd", B4SOI_MOD_PBSWGD, IF_REAL, "Drain(gate side) sidewall junction capacitance built in potential"), /* v4.0 */ IOP( "mjswg", B4SOI_MOD_MJSWGS, IF_REAL, "Source (gate side) sidewall junction capacitance grading coefficient"), /* v4.0 */ IOP( "mjswgd", B4SOI_MOD_MJSWGD, IF_REAL, "Drain (gate side) sidewall junction capacitance grading coefficient"), /* v4.0 */ IOP( "cjswg", B4SOI_MOD_CJSWGS, IF_REAL, "Source(gate side) sidewall junction capacitance per unit width"), /* v4.0 */ IOP( "cjswgd", B4SOI_MOD_CJSWGD, IF_REAL, "Drain (gate side) sidewall junction capacitance per unit width"), /* v4.0 */ IOP( "lint", B4SOI_MOD_LINT, IF_REAL, "Length reduction parameter"), IOP( "ll", B4SOI_MOD_LL, IF_REAL, "Length reduction parameter"), IOP( "llc", B4SOI_MOD_LLC, IF_REAL, "Length reduction parameter"), /* v2.2.3 */ IOP( "lln", B4SOI_MOD_LLN, IF_REAL, "Length reduction parameter"), IOP( "lw", B4SOI_MOD_LW, IF_REAL, "Length reduction parameter"), IOP( "lwc", B4SOI_MOD_LWC, IF_REAL, "Length reduction parameter"), /* v2.2.3 */ IOP( "lwn", B4SOI_MOD_LWN, IF_REAL, "Length reduction parameter"), IOP( "lwl", B4SOI_MOD_LWL, IF_REAL, "Length reduction parameter"), IOP( "lwlc", B4SOI_MOD_LWLC, IF_REAL, "Length reduction parameter"), /* v2.2.3 */ IOP( "wr", B4SOI_MOD_WR, IF_REAL, "Width dependence of rds"), IOP( "wint", B4SOI_MOD_WINT, IF_REAL, "Width reduction parameter"), IOP( "dwg", B4SOI_MOD_DWG, IF_REAL, "Width reduction parameter"), IOP( "dwb", B4SOI_MOD_DWB, IF_REAL, "Width reduction parameter"), IOP( "wl", B4SOI_MOD_WL, IF_REAL, "Width reduction parameter"), IOP( "wlc", B4SOI_MOD_WLC, IF_REAL, "Width reduction parameter"), /* v2.2.3 */ IOP( "wln", B4SOI_MOD_WLN, IF_REAL, "Width reduction parameter"), IOP( "ww", B4SOI_MOD_WW, IF_REAL, "Width reduction parameter"), IOP( "wwc", B4SOI_MOD_WWC, IF_REAL, "Width reduction parameter"), /* v2.2.3 */ IOP( "wwn", B4SOI_MOD_WWN, IF_REAL, "Width reduction parameter"), IOP( "wwl", B4SOI_MOD_WWL, IF_REAL, "Width reduction parameter"), IOP( "wwlc", B4SOI_MOD_WWLC, IF_REAL, "Width reduction parameter"), /* v2.2.3 */ IOP( "b0", B4SOI_MOD_B0, IF_REAL, "Abulk narrow width parameter"), IOP( "b1", B4SOI_MOD_B1, IF_REAL, "Abulk narrow width parameter"), IOP( "cgsl", B4SOI_MOD_CGSL, IF_REAL, "New C-V model parameter"), IOP( "cgdl", B4SOI_MOD_CGDL, IF_REAL, "New C-V model parameter"), IOP( "ckappa", B4SOI_MOD_CKAPPA, IF_REAL, "New C-V model parameter"), IOP( "cf", B4SOI_MOD_CF, IF_REAL, "Fringe capacitance parameter"), IOP( "clc", B4SOI_MOD_CLC, IF_REAL, "Vdsat parameter for C-V model"), IOP( "cle", B4SOI_MOD_CLE, IF_REAL, "Vdsat parameter for C-V model"), IOP( "dwc", B4SOI_MOD_DWC, IF_REAL, "Delta W for C-V model"), IOP( "dlc", B4SOI_MOD_DLC, IF_REAL, "Delta L for C-V model"), IOP( "alpha0", B4SOI_MOD_ALPHA0, IF_REAL, "substrate current model parameter"), IOP( "noia", B4SOI_MOD_NOIA, IF_REAL, "Flicker noise parameter"), IOP( "noib", B4SOI_MOD_NOIB, IF_REAL, "Flicker noise parameter"), IOP( "noic", B4SOI_MOD_NOIC, IF_REAL, "Flicker noise parameter"), /* v3.2 */ IOP( "fnoimod", B4SOI_MOD_FNOIMOD, IF_INTEGER, "Flicker noise model selector"), IOP( "tnoimod", B4SOI_MOD_TNOIMOD, IF_INTEGER, "Thermal noise model selector"), IOP( "tnoia", B4SOI_MOD_TNOIA, IF_REAL, "Thermal noise parameter"), IOP( "tnoib", B4SOI_MOD_TNOIB, IF_REAL, "Thermal noise parameter"), IOP( "rnoia", B4SOI_MOD_RNOIA, IF_REAL, "Thermal noise coefficient"), IOP( "rnoib", B4SOI_MOD_RNOIB, IF_REAL, "Thermal noise coefficient"), IOP( "ntnoi", B4SOI_MOD_NTNOI, IF_REAL, "Thermal noise parameter"), /* v3.2 */ /* v4.0 stress effect*/ IOP( "saref", B4SOI_MOD_SAREF, IF_REAL, "Reference distance between OD edge to poly of one side"), IOP( "sbref", B4SOI_MOD_SBREF, IF_REAL, "Reference distance between OD edge to poly of the other side"), IOP( "wlod", B4SOI_MOD_WLOD, IF_REAL, "Width parameter for stress effect"), IOP( "ku0", B4SOI_MOD_KU0, IF_REAL, "Mobility degradation/enhancement coefficient for LOD"), IOP( "kvsat", B4SOI_MOD_KVSAT, IF_REAL, "Saturation velocity degradation/enhancement parameter for LOD"), IOP( "kvth0", B4SOI_MOD_KVTH0, IF_REAL, "Threshold degradation/enhancement parameter for LOD"), IOP( "tku0", B4SOI_MOD_TKU0, IF_REAL, "Temperature coefficient of KU0"), IOP( "llodku0", B4SOI_MOD_LLODKU0, IF_REAL, "Length parameter for u0 LOD effect"), IOP( "wlodku0", B4SOI_MOD_WLODKU0, IF_REAL, "Width parameter for u0 LOD effect"), IOP( "llodvth", B4SOI_MOD_LLODVTH, IF_REAL, "Length parameter for vth LOD effect"), IOP( "wlodvth", B4SOI_MOD_WLODVTH, IF_REAL, "Width parameter for vth LOD effect"), IOP( "lku0", B4SOI_MOD_LKU0, IF_REAL, "Length dependence of ku0"), IOP( "wku0", B4SOI_MOD_WKU0, IF_REAL, "Width dependence of ku0"), IOP( "pku0", B4SOI_MOD_PKU0, IF_REAL, "Cross-term dependence of ku0"), IOP( "lkvth0", B4SOI_MOD_LKVTH0, IF_REAL, "Length dependence of kvth0"), IOP( "wkvth0", B4SOI_MOD_WKVTH0, IF_REAL, "Width dependence of kvth0"), IOP( "pkvth0", B4SOI_MOD_PKVTH0, IF_REAL, "Cross-term dependence of kvth0"), IOP( "stk2", B4SOI_MOD_STK2, IF_REAL, "K2 shift factor related to stress effect on vth"), IOP( "lodk2", B4SOI_MOD_LODK2, IF_REAL, "K2 shift modification factor for stress effect"), IOP( "steta0", B4SOI_MOD_STETA0, IF_REAL, "eta0 shift factor related to stress effect on vth"), IOP( "lodeta0", B4SOI_MOD_LODETA0, IF_REAL, "eta0 shift modification factor for stress effect"), /* v4.0 stress effect end */ /* v4.0 */ IOP( "gbmin", B4SOI_MOD_GBMIN, IF_REAL, "Minimum body conductance"), IOP( "rbdb", B4SOI_MOD_RBDB, IF_REAL, "Resistance between bNode and dbNode"), IOP( "rbsb", B4SOI_MOD_RBSB, IF_REAL, "Resistance between bNode and sbNode"), IOP( "bf", B4SOI_MOD_BF, IF_REAL, "Flicker noise length dependence exponent"), IOP( "w0flk", B4SOI_MOD_W0FLK, IF_REAL, "Flicker noise width dependence"), IOP( "frbody", B4SOI_MOD_FRBODY,IF_REAL, "Layout dependent rbody multiplier "), IOP( "dvtp0", B4SOI_MOD_DVTP0, IF_REAL, "First parameter for Vth shift due to pocket"), IOP( "ldvtp0", B4SOI_MOD_LDVTP0, IF_REAL, "Length dependence of dvtp0"), IOP( "wdvtp0", B4SOI_MOD_WDVTP0, IF_REAL, "Width dependence of dvtp0"), IOP( "pdvtp0", B4SOI_MOD_PDVTP0, IF_REAL, "Cross-term dependence of dvtp0"), IOP( "dvtp1", B4SOI_MOD_DVTP1, IF_REAL, "Second parameter for Vth shift due to pocket"), IOP( "ldvtp1", B4SOI_MOD_LDVTP1, IF_REAL, "Length dependence of dvtp1"), IOP( "wdvtp1", B4SOI_MOD_WDVTP1, IF_REAL, "Width dependence of dvtp1"), IOP( "pdvtp1", B4SOI_MOD_PDVTP1, IF_REAL, "Cross-term dependence of dvtp1"), IOP( "dvtp2", B4SOI_MOD_DVTP2, IF_REAL, "Third parameter for Vth shift due to pocket"), IOP( "ldvtp2", B4SOI_MOD_LDVTP2, IF_REAL, "Length dependence of dvtp2"), IOP( "wdvtp2", B4SOI_MOD_WDVTP2, IF_REAL, "Width dependence of dvtp2"), IOP( "pdvtp2", B4SOI_MOD_PDVTP2, IF_REAL, "Cross-term dependence of dvtp2"), IOP( "dvtp3", B4SOI_MOD_DVTP3, IF_REAL, "Third parameter for Vth shift due to pocket"), IOP( "ldvtp3", B4SOI_MOD_LDVTP3, IF_REAL, "Length dependence of dvtp3"), IOP( "wdvtp3", B4SOI_MOD_WDVTP3, IF_REAL, "Width dependence of dvtp3"), IOP( "pdvtp3", B4SOI_MOD_PDVTP3, IF_REAL, "Cross-term dependence of dvtp3"), IOP( "dvtp4", B4SOI_MOD_DVTP4, IF_REAL, "Forth parameter for Vth shift due to pocket"), IOP( "ldvtp4", B4SOI_MOD_LDVTP4, IF_REAL, "Length dependence of dvtp4"), IOP( "wdvtp4", B4SOI_MOD_WDVTP4, IF_REAL, "Width dependence of dvtp4"), IOP( "pdvtp4", B4SOI_MOD_PDVTP4, IF_REAL, "Cross-term dependence of dvtp4"), IOP( "minv", B4SOI_MOD_MINV, IF_REAL, "For moderate invversion in Vgsteff"), IOP( "lminv", B4SOI_MOD_LMINV, IF_REAL, "Length dependence of minv"), IOP( "wminv", B4SOI_MOD_WMINV, IF_REAL, "width dependence of minv"), IOP( "pminv", B4SOI_MOD_PMINV, IF_REAL, "Cross-term dependence of minv"), IOP( "pdits", B4SOI_MOD_PDITS, IF_REAL, "Coefficient for drain-induced Vth shifts"), IOP( "pditsl", B4SOI_MOD_PDITSL, IF_REAL, "Length dependence of drain-induced Vth shifts"), IOP( "pditsd", B4SOI_MOD_PDITSD, IF_REAL, "Vds dependence of drain-induced Vth shifts"), IOP( "fprout", B4SOI_MOD_FPROUT, IF_REAL, "Rout degradation coefficient for pocket devices"), IOP( "lfprout", B4SOI_MOD_LFPROUT, IF_REAL, "Length dependence of pdiblcb"), IOP( "lpdits", B4SOI_MOD_LPDITS, IF_REAL, "Length dependence of pdits"), IOP( "lpditsd", B4SOI_MOD_LPDITSD, IF_REAL, "Length dependence of pditsd"), IOP( "wfprout", B4SOI_MOD_WFPROUT, IF_REAL, "Width dependence of pdiblcb"), IOP( "wpdits", B4SOI_MOD_WPDITS, IF_REAL, "Width dependence of pdits"), IOP( "wpditsd", B4SOI_MOD_WPDITSD, IF_REAL, "Width dependence of pditsd"), IOP( "pfprout", B4SOI_MOD_PFPROUT, IF_REAL, "Cross-term dependence of pdiblcb"), IOP( "ppdits", B4SOI_MOD_PPDITS, IF_REAL, "Cross-term dependence of pdits"), IOP( "ppditsd", B4SOI_MOD_PPDITSD, IF_REAL, "Cross-term dependence of pditsd"), /* v4.0 */ IOP( "em", B4SOI_MOD_EM, IF_REAL, "Flicker noise parameter"), IOP( "ef", B4SOI_MOD_EF, IF_REAL, "Flicker noise frequency exponent"), IOP( "af", B4SOI_MOD_AF, IF_REAL, "Flicker noise exponent"), IOP( "kf", B4SOI_MOD_KF, IF_REAL, "Flicker noise coefficient"), IOP( "noif", B4SOI_MOD_NOIF, IF_REAL, "Floating body excess noise ideality factor"), /* v2.0 release */ IOP( "k1w1", B4SOI_MOD_K1W1, IF_REAL, "First Body effect width dependent parameter"), IOP( "k1w2", B4SOI_MOD_K1W2, IF_REAL, "Second Boby effect width dependent parameter"), IOP( "ketas", B4SOI_MOD_KETAS, IF_REAL, "Surface potential adjustment for bulk charge effect"), IOP( "dwbc", B4SOI_MOD_DWBC, IF_REAL, "Width offset for body contact isolation edge"), IOP( "beta0", B4SOI_MOD_BETA0, IF_REAL, "First Vds dependent parameter of impact ionizition current"), IOP( "beta1", B4SOI_MOD_BETA1, IF_REAL, "Second Vds dependent parameter of impact ionizition current"), IOP( "beta2", B4SOI_MOD_BETA2, IF_REAL, "Third Vds dependent parameter of impact ionizition current"), IOP( "vdsatii0", B4SOI_MOD_VDSATII0, IF_REAL, "Nominal drain saturation voltage at threshold for impact ionizition current"), IOP( "tii", B4SOI_MOD_TII, IF_REAL, "Temperature dependent parameter for impact ionizition"), IOP( "lii", B4SOI_MOD_LII, IF_REAL, "Channel length dependent parameter at threshold for impact ionizition current"), IOP( "sii0", B4SOI_MOD_SII0, IF_REAL, "First Vgs dependent parameter for impact ionizition current"), IOP( "sii1", B4SOI_MOD_SII1, IF_REAL, "Second Vgs dependent parameter for impact ionizition current"), IOP( "sii2", B4SOI_MOD_SII2, IF_REAL, "Third Vgs dependent parameter for impact ionizition current"), IOP( "siid", B4SOI_MOD_SIID, IF_REAL, "Vds dependent parameter of drain saturation voltage for impact ionizition current"), IOP( "fbjtii", B4SOI_MOD_FBJTII, IF_REAL, "Fraction of bipolar current affecting the impact ionization"), /*4.1*/ IOP( "ebjtii", B4SOI_MOD_EBJTII, IF_REAL, "Impact ionization parameter for BJT part"), IOP( "cbjtii", B4SOI_MOD_CBJTII, IF_REAL, "Length scaling parameter for II BJT part"), IOP( "vbci", B4SOI_MOD_VBCI, IF_REAL, "Internal B-C built-in potential"), IOP( "abjtii", B4SOI_MOD_ABJTII, IF_REAL, "Exponent factor for avalanche current"), IOP( "mbjtii", B4SOI_MOD_MBJTII, IF_REAL, "Internal B-C grading coefficient"), IOP( "tvbci", B4SOI_MOD_TVBCI, IF_REAL, "Temperature coefficient for VBCI"), IOP( "esatii", B4SOI_MOD_ESATII, IF_REAL, "Saturation electric field for impact ionization"), IOP( "ntun", B4SOI_MOD_NTUNS, IF_REAL,"Reverse tunneling non-ideality factor"), IOP( "ntund", B4SOI_MOD_NTUND, IF_REAL,"Reverse tunneling non-ideality factor"), IOP( "nrecf0", B4SOI_MOD_NRECF0S, IF_REAL, "Recombination non-ideality factor at forward bias"), IOP( "nrecf0d", B4SOI_MOD_NRECF0D, IF_REAL, "Recombination non-ideality factor at forward bias"), IOP( "nrecr0", B4SOI_MOD_NRECR0S, IF_REAL, "Recombination non-ideality factor at reversed bias"), IOP( "nrecr0d", B4SOI_MOD_NRECR0D, IF_REAL, "Recombination non-ideality factor at reversed bias"), IOP( "isbjt", B4SOI_MOD_ISBJT, IF_REAL, "BJT injection saturation current"), IOP( "idbjt", B4SOI_MOD_IDBJT, IF_REAL, "BJT injection saturation current"), IOP( "isdif", B4SOI_MOD_ISDIF, IF_REAL, "Body to source/drain injection saturation current"), IOP( "iddif", B4SOI_MOD_IDDIF, IF_REAL, "Body to source/drain injection saturation current"), /* v4.0 */ IOP( "isrec", B4SOI_MOD_ISREC, IF_REAL, "Recombination in depletion saturation current"), IOP( "idrec", B4SOI_MOD_IDREC, IF_REAL, "Recombination in depletion saturation current"), IOP( "istun", B4SOI_MOD_ISTUN, IF_REAL, "Reverse tunneling saturation current"), IOP( "idtun", B4SOI_MOD_IDTUN, IF_REAL, "Reverse tunneling saturation current"), IOP( "ln", B4SOI_MOD_LN, IF_REAL, "Electron/hole diffusion length"), IOP( "vrec0", B4SOI_MOD_VREC0S, IF_REAL, "Voltage dependent parameter for recombination current"), IOP( "vrec0d", B4SOI_MOD_VREC0D, IF_REAL, "Voltage dependent parameter for recombination current"), IOP( "vtun0", B4SOI_MOD_VTUN0S, IF_REAL, "Voltage dependent parameter for tunneling current"), IOP( "vtun0d", B4SOI_MOD_VTUN0D, IF_REAL, "Voltage dependent parameter for tunneling current"), IOP( "nbjt", B4SOI_MOD_NBJT, IF_REAL, "Power coefficient of channel length dependency for bipolar current"), IOP( "lbjt0", B4SOI_MOD_LBJT0, IF_REAL, "Refferenc channel length for bipolar cuurent"), IOP( "ldif0", B4SOI_MOD_LDIF0, IF_REAL, "Channel-length dependency coefficient of diffusion cap"), IOP( "vabjt", B4SOI_MOD_VABJT, IF_REAL, "Early voltage for bipolar current"), IOP( "aely", B4SOI_MOD_AELY, IF_REAL, "Channel length dependency of early voltage for bipolar cuurent"), IOP( "ahli", B4SOI_MOD_AHLIS, IF_REAL, "High level injection parameter for bipolar current"), /* v4.0 */ IOP( "ahlid", B4SOI_MOD_AHLID, IF_REAL, "High level injection parameter for bipolar current"), /* v4.0 */ IOP( "rbody", B4SOI_MOD_RBODY, IF_REAL, "Intrinsic body contact sheet resistance"), IOP( "rbsh", B4SOI_MOD_RBSH, IF_REAL, "Extrinsic body contact sheet resistance"), IOP( "cgeo", B4SOI_MOD_CGEO, IF_REAL, "Gate substrate overlap capacitance per unit channel length"), IOP( "tt", B4SOI_MOD_TT, IF_REAL, "Diffusion capacitance transit time coefficient"), IOP( "ndif", B4SOI_MOD_NDIF, IF_REAL, "Power coefficient of channel length dependency for diffusion capacitance"), IOP( "vsdfb", B4SOI_MOD_VSDFB, IF_REAL, "Source/drain bottom diffusion capacitance flatband voltage"), IOP( "vsdth", B4SOI_MOD_VSDTH, IF_REAL, "Source/drain bottom diffusion capacitance threshold voltage"), IOP( "csdmin", B4SOI_MOD_CSDMIN, IF_REAL, "Source/drain bottom diffusion minimum capacitance"), IOP( "asd", B4SOI_MOD_ASD, IF_REAL, "Source/drain bottom diffusion smoothing parameter"), IOP( "csdesw", B4SOI_MOD_CSDESW, IF_REAL, "Source/drain sidewall fringing capacitance per unit length"), IOP( "ntrecf", B4SOI_MOD_NTRECF, IF_REAL, "Temperature coefficient for Nrecf"), IOP( "ntrecr", B4SOI_MOD_NTRECR, IF_REAL, "Temperature coefficient for Nrecr"), IOP( "dlcb", B4SOI_MOD_DLCB, IF_REAL, "Length offset fitting parameter for body charge"), IOP( "fbody", B4SOI_MOD_FBODY, IF_REAL, "Scaling factor for body charge"), IOP( "tcjswg", B4SOI_MOD_TCJSWGS, IF_REAL, "Temperature coefficient of Cjswgs"), IOP( "tpbswg", B4SOI_MOD_TPBSWGS, IF_REAL, "Temperature coefficient of Pbswgs"), IOP( "tcjswgd", B4SOI_MOD_TCJSWGD, IF_REAL, "Temperature coefficient of Cjswgd"), IOP( "tpbswgd", B4SOI_MOD_TPBSWGD, IF_REAL, "Temperature coefficient of Pbswgd"), IOP( "acde", B4SOI_MOD_ACDE, IF_REAL, "Exponential coefficient for charge thickness in capMod=3 for accumulation and depletion regions"), IOP( "moin", B4SOI_MOD_MOIN, IF_REAL, "Coefficient for the gate-bias dependent surface potential"), IOP( "noff", B4SOI_MOD_NOFF, IF_REAL, "C-V turn-on/off parameter"), /* v3.2 */ IOP( "delvt", B4SOI_MOD_DELVT, IF_REAL, "Threshold voltage adjust for CV"), IOP( "kb1", B4SOI_MOD_KB1, IF_REAL, "Scaling factor for backgate charge"), IOP( "dlbg", B4SOI_MOD_DLBG, IF_REAL, "Length offset fitting parameter for backgate charge"), /* v2.2 release */ IOP( "igmod", B4SOI_MOD_IGBMOD, IF_INTEGER, "gate-body tunneling current model selector"), /* v3.1.1 */ IOPR("igbmod", B4SOI_MOD_IGBMOD, IF_INTEGER, "gate-body tunneling current model selector"), /* v3.0 */ IOP( "igcmod", B4SOI_MOD_IGCMOD, IF_INTEGER, "gate-channel tunneling current model selector"), /* v3.0 */ IOP( "toxqm", B4SOI_MOD_TOXQM, IF_REAL, "effective oxide thickness considering quantum effect"), IOP( "wth0", B4SOI_MOD_WTH0, IF_REAL, "Minimum width for thermal resistance calculation"), IOP( "rhalo", B4SOI_MOD_RHALO, IF_REAL, "body halo sheet resistance"), IOP( "ntox", B4SOI_MOD_NTOX, IF_REAL, "power term of gate current"), IOP( "toxref", B4SOI_MOD_TOXREF, IF_REAL, "target oxide thickness"), IOP( "ebg", B4SOI_MOD_EBG, IF_REAL, "effective bandgap in gate current calcula."), IOP( "vevb", B4SOI_MOD_VEVB, IF_REAL, "Vaux parameter for valence-band electron tunneling"), IOP( "alphagb1", B4SOI_MOD_ALPHAGB1, IF_REAL, "First Vox dependent parameter for gate current in inversion"), IOP( "betagb1", B4SOI_MOD_BETAGB1, IF_REAL, "Second Vox dependent parameter for gate current in inversion"), IOP( "vgb1", B4SOI_MOD_VGB1, IF_REAL, "Third Vox dependent parameter for gate current in inversion"), IOP( "vecb", B4SOI_MOD_VECB, IF_REAL, "Vaux parameter for conduction-band electron tunneling"), IOP( "alphagb2", B4SOI_MOD_ALPHAGB2, IF_REAL, "First Vox dependent parameter for gate current in accumulation"), IOP( "betagb2", B4SOI_MOD_BETAGB2, IF_REAL, "Second Vox dependent parameter for gate current in accumulation"), IOP( "vgb2", B4SOI_MOD_VGB2, IF_REAL, "Third Vox dependent parameter for gate current in accumulation"), IOP( "aigbcp2", B4SOI_MOD_AIGBCP2, IF_REAL, "First Vgp dependent parameter for gate current in accumulation in AGBCP2 region"), IOP( "bigbcp2", B4SOI_MOD_BIGBCP2, IF_REAL, "Second Vgp dependent parameter for gate current in accumulation in AGBCP2 region"), IOP( "cigbcp2", B4SOI_MOD_CIGBCP2, IF_REAL, "Third Vgp dependent parameter for gate current in accumulation in AGBCP2 region"), IOP( "voxh", B4SOI_MOD_VOXH, IF_REAL, "the limit of Vox in gate current calculation"), IOP( "deltavox", B4SOI_MOD_DELTAVOX, IF_REAL, "the smoothing parameter in the Vox smoothing function"), /* v3.0 */ IOP( "aigc", B4SOI_MOD_AIGC, IF_REAL, "Parameter for Igc"), IOP( "bigc", B4SOI_MOD_BIGC, IF_REAL, "Parameter for Igc"), IOP( "cigc", B4SOI_MOD_CIGC, IF_REAL, "Parameter for Igc"), IOP( "aigsd", B4SOI_MOD_AIGSD, IF_REAL, "Parameter for Igs,d"), IOP( "bigsd", B4SOI_MOD_BIGSD, IF_REAL, "Parameter for Igs,d"), IOP( "cigsd", B4SOI_MOD_CIGSD, IF_REAL, "Parameter for Igs,d"), IOP( "nigc", B4SOI_MOD_NIGC, IF_REAL, "Parameter for Igc slope"), IOP( "pigcd", B4SOI_MOD_PIGCD, IF_REAL, "Parameter for Igc partition"), IOP( "poxedge", B4SOI_MOD_POXEDGE, IF_REAL, "Factor for the gate edge Tox"), IOP( "dlcig", B4SOI_MOD_DLCIG, IF_REAL, "Delta L for Ig model"), /* v3.0 */ IOP( "soimod", B4SOI_MOD_SOIMOD, IF_INTEGER, "model selector for SOI technology"), /* v3.2 bug fix */ IOP( "vbs0pd", B4SOI_MOD_VBS0PD, IF_REAL, "Upper bound of built-in potential lowering for PD operation"), /* v3.2 */ IOP( "vbs0fd", B4SOI_MOD_VBS0FD, IF_REAL, "Lower bound of built-in potential lowering for FD operation"), /* v3.2 */ IOP( "vbsa", B4SOI_MOD_VBSA, IF_REAL, "Vbs0t offset voltage"), IOP( "nofffd", B4SOI_MOD_NOFFFD,IF_REAL, "smoothing parameter in FD module"), IOP( "vofffd", B4SOI_MOD_VOFFFD,IF_REAL, "smoothing parameter in FD module"), IOP( "k1b", B4SOI_MOD_K1B, IF_REAL, "first backgate body effect parameter"), IOP( "k2b", B4SOI_MOD_K2B, IF_REAL, "second backgate body effect parameter for short channel effect"), IOP( "dk2b", B4SOI_MOD_DK2B, IF_REAL, "third backgate body effect parameter for short channel effect"), IOP( "dvbd0", B4SOI_MOD_DVBD0, IF_REAL, "first short-channel effect parameter in FD module"), IOP( "dvbd1", B4SOI_MOD_DVBD1, IF_REAL, "second short-channel effect parameter in FD module"), IOP( "moinfd", B4SOI_MOD_MOINFD, IF_REAL, "Coefficient for the gate-bias dependent surface potential in FD"), /* v3.0 */ /* v3.1 added for RF */ IOP( "rgatemod", B4SOI_MOD_RGATEMOD, IF_INTEGER, "Gate R model selector"), IOP("xrcrg1", B4SOI_MOD_XRCRG1, IF_REAL, "First fitting parameter the bias-dependent Rg"), IOP("xrcrg2", B4SOI_MOD_XRCRG2, IF_REAL, "Second fitting parameter the bias-dependent Rg"), IOP("rshg", B4SOI_MOD_RSHG, IF_REAL, "Gate sheet resistance"), IOP("ngcon", B4SOI_MOD_NGCON, IF_REAL, "Number of gate contacts"), IOP( "xgw", B4SOI_MOD_XGW, IF_REAL, "Distance from gate contact center to device edge"), IOP( "xgl", B4SOI_MOD_XGL, IF_REAL, "Variation in Ldrawn"), /* v3.1 added for RF end */ /* 4.0 */ IOP( "rbodymod", B4SOI_MOD_RBODYMOD, IF_INTEGER, "Body R model selector"), /* 4.0 */ IOP( "rdsmod", B4SOI_MOD_RDSMOD, IF_INTEGER, "Bias-dependent S/D resistance model selector"), /* v4.0 */ /* v4.1 */ IOP( "fdmod", B4SOI_MOD_FDMOD, IF_INTEGER, "Improved dVbi model selector"), IOP( "vsce", B4SOI_MOD_VSCE, IF_REAL, "SCE parameter for improved dVbi model"), IOP( "cdsbs", B4SOI_MOD_CDSBS, IF_REAL, "coupling from Vd to Vbs for improved dVbi model"), IOP( "minvcv", B4SOI_MOD_MINVCV, IF_REAL, "For moderate invversion in VgsteffCV"), IOP( "lminvcv", B4SOI_MOD_LMINVCV, IF_REAL, "Length dependence of minvcv"), IOP( "wminvcv", B4SOI_MOD_WMINVCV, IF_REAL, "width dependence of minvcv"), IOP( "pminvcv", B4SOI_MOD_PMINVCV, IF_REAL, "Cross-term dependence of minvcv"), IOP( "voffcv", B4SOI_MOD_VOFFCV, IF_REAL, "CV Threshold voltage offset"), IOP( "lvoffcv", B4SOI_MOD_LVOFFCV, IF_REAL, "Length dependence of voffcv"), IOP( "wvoffcv", B4SOI_MOD_WVOFFCV, IF_REAL, "Width dependence of voffcv"), IOP( "pvoffcv", B4SOI_MOD_PVOFFCV, IF_REAL, "Cross-term dependence of voffcv"), /* Added for binning - START */ /* Length Dependence */ /* v3.1 */ IOP( "lxj", B4SOI_MOD_LXJ, IF_REAL, "Length dependence of xj"), IOP( "lalphagb1", B4SOI_MOD_LALPHAGB1, IF_REAL, "Length dependence of alphagb1"), IOP( "lbetagb1", B4SOI_MOD_LBETAGB1, IF_REAL, "Length dependence of betagb1"), IOP( "lalphagb2", B4SOI_MOD_LALPHAGB2, IF_REAL, "Length dependence of alphagb2"), IOP( "lbetagb2", B4SOI_MOD_LBETAGB2, IF_REAL, "Length dependence of betagb2"), IOP( "laigbcp2", B4SOI_MOD_LAIGBCP2, IF_REAL, "Length dependence of aigbcp2"), IOP( "lbigbcp2", B4SOI_MOD_LBIGBCP2, IF_REAL, "Length dependence of bigbcp2"), IOP( "lcigbcp2", B4SOI_MOD_LCIGBCP2, IF_REAL, "Length dependence of cigbcp2"), IOP( "lcgsl", B4SOI_MOD_LCGSL, IF_REAL, "Length dependence of cgsl"), IOP( "lcgdl", B4SOI_MOD_LCGDL, IF_REAL, "Length dependence of cgdl"), IOP( "lckappa", B4SOI_MOD_LCKAPPA, IF_REAL, "Length dependence of ckappa"), IOP( "lndif", B4SOI_MOD_LNDIF, IF_REAL, "Length dependence of ndif"), IOP( "lute", B4SOI_MOD_LUTE, IF_REAL, "Length dependence of ute"), IOP( "lkt1", B4SOI_MOD_LKT1, IF_REAL, "Length dependence of kt1"), IOP( "lkt1l", B4SOI_MOD_LKT1L, IF_REAL, "Length dependence of kt1l"), IOP( "lkt2", B4SOI_MOD_LKT2, IF_REAL, "Length dependence of kt2"), IOP( "lua1", B4SOI_MOD_LUA1, IF_REAL, "Length dependence of ua1"), IOP( "lub1", B4SOI_MOD_LUB1, IF_REAL, "Length dependence of ub1"), IOP( "luc1", B4SOI_MOD_LUC1, IF_REAL, "Length dependence of uc1"), IOP( "lat", B4SOI_MOD_LAT, IF_REAL, "Length dependence of at"), IOP( "lprt", B4SOI_MOD_LPRT, IF_REAL, "Length dependence of prt "), IOP( "lntrecf", B4SOI_MOD_LNTRECF, IF_REAL, "Length dependence of ntrecf"), IOP( "lntrecr", B4SOI_MOD_LNTRECR, IF_REAL, "Length dependence of ntrecr"), IOP( "lxbjt", B4SOI_MOD_LXBJT, IF_REAL, "Length dependence of xbjt"), IOP( "lxdif", B4SOI_MOD_LXDIFS, IF_REAL, "Length dependence of xdif"), IOP( "lxrec", B4SOI_MOD_LXRECS, IF_REAL, "Length dependence of xrec"), IOP( "lxtun", B4SOI_MOD_LXTUNS, IF_REAL, "Length dependence of xtun"), IOP( "lxdifd", B4SOI_MOD_LXDIFD, IF_REAL, "Length dependence of xdifd"), IOP( "lxrecd", B4SOI_MOD_LXRECD, IF_REAL, "Length dependence of xrecd"), IOP( "lxtund", B4SOI_MOD_LXTUND, IF_REAL, "Length dependence of xtund"), /* v3.0 */ IOP( "laigc", B4SOI_MOD_LAIGC, IF_REAL, "Length dependence of aigc"), IOP( "lbigc", B4SOI_MOD_LBIGC, IF_REAL, "Length dependence of bigc"), IOP( "lcigc", B4SOI_MOD_LCIGC, IF_REAL, "Length dependence of cigc"), IOP( "laigsd", B4SOI_MOD_LAIGSD, IF_REAL, "Length dependence of aigsd"), IOP( "lbigsd", B4SOI_MOD_LBIGSD, IF_REAL, "Length dependence of bigsd"), IOP( "lcigsd", B4SOI_MOD_LCIGSD, IF_REAL, "Length dependence of cigsd"), IOP( "lnigc", B4SOI_MOD_LNIGC, IF_REAL, "Length dependence of nigc"), IOP( "lpigcd", B4SOI_MOD_LPIGCD, IF_REAL, "Length dependence for pigcd"), IOP( "lpoxedge", B4SOI_MOD_LPOXEDGE, IF_REAL, "Length dependence for poxedge"), IOP( "lnch", B4SOI_MOD_LNPEAK, IF_REAL, "Length dependence of nch"), IOP( "lnsub", B4SOI_MOD_LNSUB, IF_REAL, "Length dependence of nsub"), IOP( "lngate", B4SOI_MOD_LNGATE, IF_REAL, "Length dependence of ngate"), IOP( "lnsd", B4SOI_MOD_LNSD, IF_REAL, "Length dependence of nsd"), IOP( "lvth0", B4SOI_MOD_LVTH0, IF_REAL,"Length dependence of vth0"), IOP( "lvfb", B4SOI_MOD_LVFB, IF_REAL, "Length dependence of vfb"), /* v4.1 */ IOP( "lk1", B4SOI_MOD_LK1, IF_REAL, "Length dependence of k1"), IOP( "lk1w1", B4SOI_MOD_LK1W1, IF_REAL, "Length dependence of k1w1"), IOP( "lk1w2", B4SOI_MOD_LK1W2, IF_REAL, "Length dependence of k1w2"), IOP( "lk2", B4SOI_MOD_LK2, IF_REAL, "Length dependence of k2"), IOP( "lk3", B4SOI_MOD_LK3, IF_REAL, "Length dependence of k3"), IOP( "lk3b", B4SOI_MOD_LK3B, IF_REAL, "Length dependence of k3b"), IOP( "lkb1", B4SOI_MOD_LKB1, IF_REAL, "Length dependence of kb1"), IOP( "lw0", B4SOI_MOD_LW0, IF_REAL, "Length dependence of w0"), IOP( "llpe0", B4SOI_MOD_LLPE0, IF_REAL, "Length dependence of lpe0"), IOP( "llpeb", B4SOI_MOD_LLPEB, IF_REAL, "Length dependence of lpeb"), IOP( "ldvt0", B4SOI_MOD_LDVT0, IF_REAL, "Length dependence of dvt0"), IOP( "ldvt1", B4SOI_MOD_LDVT1, IF_REAL, "Length dependence of dvt1"), IOP( "ldvt2", B4SOI_MOD_LDVT2, IF_REAL, "Length dependence of dvt2"), IOP( "ldvt0w", B4SOI_MOD_LDVT0W, IF_REAL, "Length dependence of dvt0w"), IOP( "ldvt1w", B4SOI_MOD_LDVT1W, IF_REAL, "Length dependence of dvt1w"), IOP( "ldvt2w", B4SOI_MOD_LDVT2W, IF_REAL, "Length dependence of dvt2w"), IOP( "lu0", B4SOI_MOD_LU0, IF_REAL, "Length dependence of u0"), IOP( "leu", B4SOI_MOD_LEU, IF_REAL, " Length dependence of eu"), IOP( "lua", B4SOI_MOD_LUA, IF_REAL, "Length dependence of ua"), IOP( "lub", B4SOI_MOD_LUB, IF_REAL, "Length dependence of ub"), IOP( "luc", B4SOI_MOD_LUC, IF_REAL, "Length dependence of uc"), IOP( "lud", B4SOI_MOD_LUD, IF_REAL, "Length dependence of ud"), /* Bug fix # 32 Jul 09 */ IOP( "lud1", B4SOI_MOD_LUD1, IF_REAL, "Length dependence of ud1"), /* Bug fix # 32 Jul 09 */ IOP( "lucste", B4SOI_MOD_LUCSTE, IF_REAL, "Length dependence of ucste"), IOP( "lucs", B4SOI_MOD_LUCS, IF_REAL, "Length dependence of lucs"), IOP( "lvsat", B4SOI_MOD_LVSAT, IF_REAL, "Length dependence of vsat"), IOP( "la0", B4SOI_MOD_LA0, IF_REAL, "Length dependence of a0"), IOP( "lags", B4SOI_MOD_LAGS, IF_REAL, "Length dependence of ags"), IOP( "lb0", B4SOI_MOD_LB0, IF_REAL, "Length dependence of b0"), IOP( "lb1", B4SOI_MOD_LB1, IF_REAL, "Length dependence of b1"), IOP( "lketa", B4SOI_MOD_LKETA, IF_REAL, "Length dependence of keta"), IOP( "lketas", B4SOI_MOD_LKETAS, IF_REAL, "Length dependence of ketas"), IOP( "la1", B4SOI_MOD_LA1, IF_REAL, "Length dependence of a1"), IOP( "la2", B4SOI_MOD_LA2, IF_REAL, "Length dependence of a2"), IOP( "lrdsw", B4SOI_MOD_LRDSW, IF_REAL, "Length dependence of rdsw "), IOP( "lrsw", B4SOI_MOD_LRSW, IF_REAL, "Length dependence of rsw"), /* v4.0 */ IOP( "lrdw", B4SOI_MOD_LRDW, IF_REAL, "Length dependence of rdw"), /* v4.0 */ IOP( "lprwb", B4SOI_MOD_LPRWB, IF_REAL, "Length dependence of prwb "), IOP( "lprwg", B4SOI_MOD_LPRWG, IF_REAL, "Length dependence of prwg "), IOP( "lwr", B4SOI_MOD_LWR, IF_REAL, "Length dependence of wr"), IOP( "lnfactor", B4SOI_MOD_LNFACTOR, IF_REAL, "Length dependence of nfactor"), IOP( "ldwg", B4SOI_MOD_LDWG, IF_REAL, "Length dependence of dwg"), IOP( "ldwb", B4SOI_MOD_LDWB, IF_REAL, "Length dependence of dwb"), IOP( "lvoff", B4SOI_MOD_LVOFF, IF_REAL, "Length dependence of voff"), IOP( "leta0", B4SOI_MOD_LETA0, IF_REAL, "Length dependence of eta0"), IOP( "letab", B4SOI_MOD_LETAB, IF_REAL, "Length dependence of etab"), IOP( "ldsub", B4SOI_MOD_LDSUB, IF_REAL, "Length dependence of dsub"), IOP( "lcit", B4SOI_MOD_LCIT, IF_REAL, "Length dependence of cit"), IOP( "lcdsc", B4SOI_MOD_LCDSC, IF_REAL, "Length dependence of cdsc"), IOP( "lcdscb", B4SOI_MOD_LCDSCB, IF_REAL, "Length dependence of cdscb"), IOP( "lcdscd", B4SOI_MOD_LCDSCD, IF_REAL, "Length dependence of cdscd"), IOP( "lpclm", B4SOI_MOD_LPCLM, IF_REAL, "Length dependence of pclm"), IOP( "lpdiblc1", B4SOI_MOD_LPDIBL1, IF_REAL, "Length dependence of pdiblc1"), IOP( "lpdiblc2", B4SOI_MOD_LPDIBL2, IF_REAL, "Length dependence of pdiblc2"), IOP( "lpdiblcb", B4SOI_MOD_LPDIBLB, IF_REAL, "Length dependence of pdiblcb"), IOP( "ldrout", B4SOI_MOD_LDROUT, IF_REAL, "Length dependence of drout"), IOP( "lpvag", B4SOI_MOD_LPVAG, IF_REAL, "Length dependence of pvag"), IOP( "ldelta", B4SOI_MOD_LDELTA, IF_REAL, "Length dependence of delta"), IOP( "lalpha0", B4SOI_MOD_LALPHA0, IF_REAL, "Length dependence of alpha0"), IOP( "lfbjtii", B4SOI_MOD_LFBJTII, IF_REAL, "Length dependence of fbjtii"), IOP( "labjtii", B4SOI_MOD_LABJTII, IF_REAL, "Length dependence of abjtii"), /*Bug fix # 32 Jul 09*/ IOP( "lcbjtii", B4SOI_MOD_LCBJTII, IF_REAL, "Length dependence of cbjtii"), /*Bug fix # 32 Jul 09*/ IOP( "lebjtii", B4SOI_MOD_LEBJTII, IF_REAL, "Length dependence of ebjtii"), /*Bug fix # 32 Jul 09*/ IOP( "lmbjtii", B4SOI_MOD_LMBJTII, IF_REAL, "Length dependence of mbjtii"), /*Bug fix # 32 Jul 09*/ IOP( "lvbci", B4SOI_MOD_LVBCI, IF_REAL, "Length dependence of vbci"), /*Bug fix # 32 Jul 09*/ IOP( "lbeta0", B4SOI_MOD_LBETA0, IF_REAL, "Length dependence of beta0"), IOP( "lbeta1", B4SOI_MOD_LBETA1, IF_REAL, "Length dependence of beta1"), IOP( "lbeta2", B4SOI_MOD_LBETA2, IF_REAL, "Length dependence of beta2"), IOP( "lvdsatii0", B4SOI_MOD_LVDSATII0, IF_REAL, "Length dependence of vdsatii0"), IOP( "llii", B4SOI_MOD_LLII, IF_REAL, "Length dependence of lii"), IOP( "lesatii", B4SOI_MOD_LESATII, IF_REAL, "Length dependence of esatii"), IOP( "lsii0", B4SOI_MOD_LSII0, IF_REAL, "Length dependence of sii0"), IOP( "lsii1", B4SOI_MOD_LSII1, IF_REAL, "Length dependence of sii1"), IOP( "lsii2", B4SOI_MOD_LSII2, IF_REAL, "Length dependence of sii2"), IOP( "lsiid", B4SOI_MOD_LSIID, IF_REAL, "Length dependence of siid"), IOP( "lagidl", B4SOI_MOD_LAGIDL, IF_REAL, "Length dependence of agidl"), IOP( "lbgidl", B4SOI_MOD_LBGIDL, IF_REAL, "Length dependence of bgidl"), IOP( "lcgidl", B4SOI_MOD_LCGIDL, IF_REAL, "Length dependence of cgidl"), IOP( "legidl", B4SOI_MOD_LEGIDL, IF_REAL, "Length dependence of egidl"), IOP( "lrgidl", B4SOI_MOD_LRGIDL, IF_REAL, "Length dependence of rgidl"), IOP( "lkgidl", B4SOI_MOD_LKGIDL, IF_REAL, "Length dependence of kgidl"), IOP( "lfgidl", B4SOI_MOD_LFGIDL, IF_REAL, "Length dependence of fgidl"), IOP( "lagisl", B4SOI_MOD_LAGISL, IF_REAL, "Length dependence of agisl"), IOP( "lbgisl", B4SOI_MOD_LBGISL, IF_REAL, "Length dependence of bgisl"), IOP( "lcgisl", B4SOI_MOD_LCGISL, IF_REAL, "Length dependence of cgisl"), IOP( "legisl", B4SOI_MOD_LEGISL, IF_REAL, "Length dependence of egisl"), IOP( "lrgisl", B4SOI_MOD_LRGISL, IF_REAL, "Length dependence of rgisl"), IOP( "lkgisl", B4SOI_MOD_LKGISL, IF_REAL, "Length dependence of kgisl"), IOP( "lfgisl", B4SOI_MOD_LFGISL, IF_REAL, "Length dependence of fgisl"), IOP( "lntun", B4SOI_MOD_LNTUNS, IF_REAL, "Length dependence of ntun"), IOP( "lntund", B4SOI_MOD_LNTUND, IF_REAL, "Length dependence of ntund"), IOP( "lndiode", B4SOI_MOD_LNDIODES, IF_REAL, "Length dependence of ndiode"), IOP( "lndioded", B4SOI_MOD_LNDIODED, IF_REAL, "Length dependence of ndioded"), IOP( "lnrecf0", B4SOI_MOD_LNRECF0S, IF_REAL, "Length dependence of nrecf0"), IOP( "lnrecf0d", B4SOI_MOD_LNRECF0D, IF_REAL, "Length dependence of nrecf0d"), IOP( "lnrecr0", B4SOI_MOD_LNRECR0S, IF_REAL, "Length dependence of nrecr0"), IOP( "lnrecr0d", B4SOI_MOD_LNRECR0D, IF_REAL, "Length dependence of nrecr0d"), IOP( "lisbjt", B4SOI_MOD_LISBJT, IF_REAL, "Length dependence of isbjt"), IOP( "lidbjt", B4SOI_MOD_LIDBJT, IF_REAL, "Length dependence of idbjt"), IOP( "lisdif", B4SOI_MOD_LISDIF, IF_REAL, "Length dependence of isdif"), IOP( "liddif", B4SOI_MOD_LIDDIF, IF_REAL, "Length dependence of iddif"), IOP( "lisrec", B4SOI_MOD_LISREC, IF_REAL, "Length dependence of isrec"), IOP( "lidrec", B4SOI_MOD_LIDREC, IF_REAL, "Length dependence of idrec"), IOP( "listun", B4SOI_MOD_LISTUN, IF_REAL, "Length dependence of istun"), IOP( "lidtun", B4SOI_MOD_LIDTUN, IF_REAL, "Length dependence of idtun"), IOP( "lvrec0", B4SOI_MOD_LVREC0S, IF_REAL, "Length dependence of vrec0"), IOP( "lvrec0d", B4SOI_MOD_LVREC0D, IF_REAL, "Length dependence of vrec0d"), IOP( "lvtun0", B4SOI_MOD_LVTUN0S, IF_REAL, "Length dependence of vtun0"), IOP( "lvtun0d", B4SOI_MOD_LVTUN0D, IF_REAL, "Length dependence of vtun0d"), IOP( "lnbjt", B4SOI_MOD_LNBJT, IF_REAL, "Length dependence of nbjt"), IOP( "llbjt0", B4SOI_MOD_LLBJT0, IF_REAL, "Length dependence of lbjt0"), IOP( "lvabjt", B4SOI_MOD_LVABJT, IF_REAL, "Length dependence of vabjt"), IOP( "laely", B4SOI_MOD_LAELY, IF_REAL, "Length dependence of aely"), IOP( "lahli", B4SOI_MOD_LAHLIS, IF_REAL, "Length dependence of ahli"),/*v4.0*/ IOP( "lahlid", B4SOI_MOD_LAHLID, IF_REAL, "Length dependence of ahlid"),/*v4.0*/ IOP( "lvsdfb", B4SOI_MOD_LVSDFB, IF_REAL, "Length dependence of vsdfb"), IOP( "lvsdth", B4SOI_MOD_LVSDTH, IF_REAL, "Length dependence of vsdth"), IOP( "ldelvt", B4SOI_MOD_LDELVT, IF_REAL, "Length dependence of delvt"), IOP( "lacde", B4SOI_MOD_LACDE, IF_REAL, "Length dependence of acde"), IOP( "lmoin", B4SOI_MOD_LMOIN, IF_REAL, "Length dependence of moin"), IOP( "lnoff", B4SOI_MOD_LNOFF, IF_REAL, "Length dependence of noff"), /* v3.2 */ /* v3.1 added for RF */ IOP("lxrcrg1", B4SOI_MOD_LXRCRG1, IF_REAL, "Length dependence of xrcrg1"), IOP("lxrcrg2", B4SOI_MOD_LXRCRG2, IF_REAL, "Length dependence of xrcrg2"), /* v3.1 added for RF end*/ /* Width Dependence */ /* v3.1 */ IOP( "wxj", B4SOI_MOD_WXJ, IF_REAL, "Width dependence of xj"), IOP( "walphagb1", B4SOI_MOD_WALPHAGB1, IF_REAL, "Width dependence of alphagb1"), IOP( "wbetagb1", B4SOI_MOD_WBETAGB1, IF_REAL, "Width dependence of betagb1"), IOP( "walphagb2", B4SOI_MOD_WALPHAGB2, IF_REAL, "Width dependence of alphagb2"), IOP( "wbetagb2", B4SOI_MOD_WBETAGB2, IF_REAL, "Width dependence of betagb2"), IOP( "waigbcp2", B4SOI_MOD_WAIGBCP2, IF_REAL, "Width dependence of aigbcp2"), IOP( "wbigbcp2", B4SOI_MOD_WBIGBCP2, IF_REAL, "Width dependence of bigbcp2"), IOP( "wcigbcp2", B4SOI_MOD_WCIGBCP2, IF_REAL, "Width dependence of cigbcp2"), IOP( "wcgsl", B4SOI_MOD_WCGSL, IF_REAL, "Width dependence of cgsl"), IOP( "wcgdl", B4SOI_MOD_WCGDL, IF_REAL, "Width dependence of cgdl"), IOP( "wckappa", B4SOI_MOD_WCKAPPA, IF_REAL, "Width dependence of ckappa"), IOP( "wndif", B4SOI_MOD_WNDIF, IF_REAL, "Width dependence of ndif"), IOP( "wute", B4SOI_MOD_WUTE, IF_REAL, "Width dependence of ute"), IOP( "wkt1", B4SOI_MOD_WKT1, IF_REAL, "Width dependence of kt1"), IOP( "wkt1l", B4SOI_MOD_WKT1L, IF_REAL, "Width dependence of kt1l"), IOP( "wkt2", B4SOI_MOD_WKT2, IF_REAL, "Width dependence of kt2"), IOP( "wua1", B4SOI_MOD_WUA1, IF_REAL, "Width dependence of ua1"), IOP( "wub1", B4SOI_MOD_WUB1, IF_REAL, "Width dependence of ub1"), IOP( "wuc1", B4SOI_MOD_WUC1, IF_REAL, "Width dependence of uc1"), IOP( "wat", B4SOI_MOD_WAT, IF_REAL, "Width dependence of at"), IOP( "wprt", B4SOI_MOD_WPRT, IF_REAL, "Width dependence of prt "), IOP( "wntrecf", B4SOI_MOD_WNTRECF, IF_REAL, "Width dependence of ntrecf"), IOP( "wntrecr", B4SOI_MOD_WNTRECR, IF_REAL, "Width dependence of ntrecr"), IOP( "wxbjt", B4SOI_MOD_WXBJT, IF_REAL, "Width dependence of xbjt"), IOP( "wxdif", B4SOI_MOD_WXDIFS, IF_REAL, "Width dependence of xdif"), IOP( "wxrec", B4SOI_MOD_WXRECS, IF_REAL, "Width dependence of xrec"), IOP( "wxtun", B4SOI_MOD_WXTUNS, IF_REAL, "Width dependence of xtun"), IOP( "wxdifd", B4SOI_MOD_WXDIFD, IF_REAL, "Width dependence of xdifd"), IOP( "wxrecd", B4SOI_MOD_WXRECD, IF_REAL, "Width dependence of xrecd"), IOP( "wxtund", B4SOI_MOD_WXTUND, IF_REAL, "Width dependence of xtund"), /* v3.0 */ IOP( "waigc", B4SOI_MOD_WAIGC, IF_REAL, "Width dependence of aigc"), IOP( "wbigc", B4SOI_MOD_WBIGC, IF_REAL, "Width dependence of bigc"), IOP( "wcigc", B4SOI_MOD_WCIGC, IF_REAL, "Width dependence of cigc"), IOP( "waigsd", B4SOI_MOD_WAIGSD, IF_REAL, "Width dependence of aigsd"), IOP( "wbigsd", B4SOI_MOD_WBIGSD, IF_REAL, "Width dependence of bigsd"), IOP( "wcigsd", B4SOI_MOD_WCIGSD, IF_REAL, "Width dependence of cigsd"), IOP( "wnigc", B4SOI_MOD_WNIGC, IF_REAL, "Width dependence of nigc"), IOP( "wpigcd", B4SOI_MOD_WPIGCD, IF_REAL, "Width dependence for pigcd"), IOP( "wpoxedge", B4SOI_MOD_WPOXEDGE, IF_REAL, "Width dependence for poxedge"), IOP( "wnch", B4SOI_MOD_WNPEAK, IF_REAL, "Width dependence of nch"), IOP( "wnsub", B4SOI_MOD_WNSUB, IF_REAL, "Width dependence of nsub"), IOP( "wngate", B4SOI_MOD_WNGATE, IF_REAL, "Width dependence of ngate"), IOP( "wnsd", B4SOI_MOD_WNSD, IF_REAL, "Width dependence of nsd"), IOP( "wvth0", B4SOI_MOD_WVTH0, IF_REAL,"Width dependence of vth0"), IOP( "wvfb", B4SOI_MOD_WVFB, IF_REAL, "Width dependence of vfb"), /* v4.1 */ IOP( "wk1", B4SOI_MOD_WK1, IF_REAL, "Width dependence of k1"), IOP( "wk1w1", B4SOI_MOD_WK1W1, IF_REAL, "Width dependence of k1w1"), IOP( "wk1w2", B4SOI_MOD_WK1W2, IF_REAL, "Width dependence of k1w2"), IOP( "wk2", B4SOI_MOD_WK2, IF_REAL, "Width dependence of k2"), IOP( "wk3", B4SOI_MOD_WK3, IF_REAL, "Width dependence of k3"), IOP( "wk3b", B4SOI_MOD_WK3B, IF_REAL, "Width dependence of k3b"), IOP( "wkb1", B4SOI_MOD_WKB1, IF_REAL, "Width dependence of kb1"), IOP( "ww0", B4SOI_MOD_WW0, IF_REAL, "Width dependence of w0"), IOP( "wlpe0", B4SOI_MOD_WLPE0, IF_REAL, "Width dependence of lpe0"), IOP( "wlpeb", B4SOI_MOD_WLPEB, IF_REAL, "Width dependence of lpeb"), IOP( "wdvt0", B4SOI_MOD_WDVT0, IF_REAL, "Width dependence of dvt0"), IOP( "wdvt1", B4SOI_MOD_WDVT1, IF_REAL, "Width dependence of dvt1"), IOP( "wdvt2", B4SOI_MOD_WDVT2, IF_REAL, "Width dependence of dvt2"), IOP( "wdvt0w", B4SOI_MOD_WDVT0W, IF_REAL, "Width dependence of dvt0w"), IOP( "wdvt1w", B4SOI_MOD_WDVT1W, IF_REAL, "Width dependence of dvt1w"), IOP( "wdvt2w", B4SOI_MOD_WDVT2W, IF_REAL, "Width dependence of dvt2w"), IOP( "wu0", B4SOI_MOD_WU0, IF_REAL, "Width dependence of u0"), IOP( "weu", B4SOI_MOD_WEU, IF_REAL, "Width dependence of eu"), IOP( "wua", B4SOI_MOD_WUA, IF_REAL, "Width dependence of ua"), IOP( "wub", B4SOI_MOD_WUB, IF_REAL, "Width dependence of ub"), IOP( "wuc", B4SOI_MOD_WUC, IF_REAL, "Width dependence of uc"), IOP( "wud", B4SOI_MOD_WUD, IF_REAL, "Width dependence of ud"), /* Bug fix # 32 Jul 09 */ IOP( "wud1", B4SOI_MOD_WUD1, IF_REAL, "Width dependence of ud1"), /* Bug fix # 32 Jul 09 */ IOP( "wucste", B4SOI_MOD_WUCSTE, IF_REAL, "Width dependence of ucste"), IOP( "wucs", B4SOI_MOD_WUCS, IF_REAL, "Width dependence of ucs"), IOP( "wvsat", B4SOI_MOD_WVSAT, IF_REAL, "Width dependence of vsat"), IOP( "wa0", B4SOI_MOD_WA0, IF_REAL, "Width dependence of a0"), IOP( "wags", B4SOI_MOD_WAGS, IF_REAL, "Width dependence of ags"), IOP( "wb0", B4SOI_MOD_WB0, IF_REAL, "Width dependence of b0"), IOP( "wb1", B4SOI_MOD_WB1, IF_REAL, "Width dependence of b1"), IOP( "wketa", B4SOI_MOD_WKETA, IF_REAL, "Width dependence of keta"), IOP( "wketas", B4SOI_MOD_WKETAS, IF_REAL, "Width dependence of ketas"), IOP( "wa1", B4SOI_MOD_WA1, IF_REAL, "Width dependence of a1"), IOP( "wa2", B4SOI_MOD_WA2, IF_REAL, "Width dependence of a2"), IOP( "wrdsw", B4SOI_MOD_WRDSW, IF_REAL, "Width dependence of rdsw "), IOP( "wrsw", B4SOI_MOD_WRSW, IF_REAL, "Width dependence of rsw"), /* v4.0 */ IOP( "wrdw", B4SOI_MOD_WRDW, IF_REAL, "Width dependence of rdw"), /* v4.0 */ IOP( "wprwb", B4SOI_MOD_WPRWB, IF_REAL, "Width dependence of prwb "), IOP( "wprwg", B4SOI_MOD_WPRWG, IF_REAL, "Width dependence of prwg "), IOP( "wwr", B4SOI_MOD_WWR, IF_REAL, "Width dependence of wr"), IOP( "wnfactor", B4SOI_MOD_WNFACTOR, IF_REAL, "Width dependence of nfactor"), IOP( "wdwg", B4SOI_MOD_WDWG, IF_REAL, "Width dependence of dwg"), IOP( "wdwb", B4SOI_MOD_WDWB, IF_REAL, "Width dependence of dwb"), IOP( "wvoff", B4SOI_MOD_WVOFF, IF_REAL, "Width dependence of voff"), IOP( "weta0", B4SOI_MOD_WETA0, IF_REAL, "Width dependence of eta0"), IOP( "wetab", B4SOI_MOD_WETAB, IF_REAL, "Width dependence of etab"), IOP( "wdsub", B4SOI_MOD_WDSUB, IF_REAL, "Width dependence of dsub"), IOP( "wcit", B4SOI_MOD_WCIT, IF_REAL, "Width dependence of cit"), IOP( "wcdsc", B4SOI_MOD_WCDSC, IF_REAL, "Width dependence of cdsc"), IOP( "wcdscb", B4SOI_MOD_WCDSCB, IF_REAL, "Width dependence of cdscb"), IOP( "wcdscd", B4SOI_MOD_WCDSCD, IF_REAL, "Width dependence of cdscd"), IOP( "wpclm", B4SOI_MOD_WPCLM, IF_REAL, "Width dependence of pclm"), IOP( "wpdiblc1", B4SOI_MOD_WPDIBL1, IF_REAL, "Width dependence of pdiblc1"), IOP( "wpdiblc2", B4SOI_MOD_WPDIBL2, IF_REAL, "Width dependence of pdiblc2"), IOP( "wpdiblcb", B4SOI_MOD_WPDIBLB, IF_REAL, "Width dependence of pdiblcb"), IOP( "wdrout", B4SOI_MOD_WDROUT, IF_REAL, "Width dependence of drout"), IOP( "wpvag", B4SOI_MOD_WPVAG, IF_REAL, "Width dependence of pvag"), IOP( "wdelta", B4SOI_MOD_WDELTA, IF_REAL, "Width dependence of delta"), IOP( "walpha0", B4SOI_MOD_WALPHA0, IF_REAL, "Width dependence of alpha0"), IOP( "wfbjtii", B4SOI_MOD_WFBJTII, IF_REAL, "Width dependence of fbjtii"), IOP( "wabjtii", B4SOI_MOD_WABJTII, IF_REAL, "Width dependence of abjtii"), /*Bug fix # 32 Jul 09 */ IOP( "wcbjtii", B4SOI_MOD_WCBJTII, IF_REAL, "Width dependence of cbjtii"), /*Bug fix # 32 Jul 09 */ IOP( "webjtii", B4SOI_MOD_WEBJTII, IF_REAL, "Width dependence of ebjtii"), /*Bug fix # 32 Jul 09 */ IOP( "wmbjtii", B4SOI_MOD_WMBJTII, IF_REAL, "Width dependence of mbjtii"), /*Bug fix # 32 Jul 09 */ IOP( "wvbci", B4SOI_MOD_WVBCI, IF_REAL, "Width dependence of vbci"), /*Bug fix # 32 Jul 09*/ IOP( "wbeta0", B4SOI_MOD_WBETA0, IF_REAL, "Width dependence of beta0"), IOP( "wbeta1", B4SOI_MOD_WBETA1, IF_REAL, "Width dependence of beta1"), IOP( "wbeta2", B4SOI_MOD_WBETA2, IF_REAL, "Width dependence of beta2"), IOP( "wvdsatii0", B4SOI_MOD_WVDSATII0, IF_REAL, "Width dependence of vdsatii0"), IOP( "wlii", B4SOI_MOD_WLII, IF_REAL, "Width dependence of lii"), IOP( "wesatii", B4SOI_MOD_WESATII, IF_REAL, "Width dependence of esatii"), IOP( "wsii0", B4SOI_MOD_WSII0, IF_REAL, "Width dependence of sii0"), IOP( "wsii1", B4SOI_MOD_WSII1, IF_REAL, "Width dependence of sii1"), IOP( "wsii2", B4SOI_MOD_WSII2, IF_REAL, "Width dependence of sii2"), IOP( "wsiid", B4SOI_MOD_WSIID, IF_REAL, "Width dependence of siid"), IOP( "wagidl", B4SOI_MOD_WAGIDL, IF_REAL, "Width dependence of agidl"), IOP( "wbgidl", B4SOI_MOD_WBGIDL, IF_REAL, "Width dependence of bgidl"), IOP( "wcgidl", B4SOI_MOD_WCGIDL, IF_REAL, "Width dependence of cgidl"), IOP( "wegidl", B4SOI_MOD_WEGIDL, IF_REAL, "Width dependence of egidl"), IOP( "wrgidl", B4SOI_MOD_WRGIDL, IF_REAL, "Width dependence of rgidl"), IOP( "wkgidl", B4SOI_MOD_WKGIDL, IF_REAL, "Width dependence of kgidl"), IOP( "wfgidl", B4SOI_MOD_WFGIDL, IF_REAL, "Width dependence of fgidl"), IOP( "wagisl", B4SOI_MOD_WAGISL, IF_REAL, "Width dependence of agisl"), IOP( "wbgisl", B4SOI_MOD_WBGISL, IF_REAL, "Width dependence of bgisl"), IOP( "wcgisl", B4SOI_MOD_WCGISL, IF_REAL, "Width dependence of cgisl"), IOP( "wegisl", B4SOI_MOD_WEGISL, IF_REAL, "Width dependence of egisl"), IOP( "wrgisl", B4SOI_MOD_WRGISL, IF_REAL, "Width dependence of rgisl"), IOP( "wkgisl", B4SOI_MOD_WKGISL, IF_REAL, "Width dependence of kgisl"), IOP( "wfgisl", B4SOI_MOD_WFGISL, IF_REAL, "Width dependence of fgisl"), IOP( "wntun", B4SOI_MOD_WNTUNS, IF_REAL, "Width dependence of ntun"), IOP( "wntund", B4SOI_MOD_WNTUND, IF_REAL, "Width dependence of ntund"), IOP( "wndiode", B4SOI_MOD_WNDIODES, IF_REAL, "Width dependence of ndiode"), IOP( "wndioded", B4SOI_MOD_WNDIODED, IF_REAL, "Width dependence of ndioded"), IOP( "wnrecf0", B4SOI_MOD_WNRECF0S, IF_REAL, "Width dependence of nrecf0"), IOP( "wnrecf0d", B4SOI_MOD_WNRECF0D, IF_REAL, "Width dependence of nrecf0d"), IOP( "wnrecr0", B4SOI_MOD_WNRECR0S, IF_REAL, "Width dependence of nrecr0"), IOP( "wnrecr0d", B4SOI_MOD_WNRECR0D, IF_REAL, "Width dependence of nrecr0d"), IOP( "wisbjt", B4SOI_MOD_WISBJT, IF_REAL, "Width dependence of isbjt"), IOP( "widbjt", B4SOI_MOD_WIDBJT, IF_REAL, "Width dependence of idbjt"), IOP( "wisdif", B4SOI_MOD_WISDIF, IF_REAL, "Width dependence of isdif"), IOP( "widdif", B4SOI_MOD_WIDDIF, IF_REAL, "Width dependence of iddif"), IOP( "wisrec", B4SOI_MOD_WISREC, IF_REAL, "Width dependence of isrec"), IOP( "widrec", B4SOI_MOD_WIDREC, IF_REAL, "Width dependence of idrec"), IOP( "wistun", B4SOI_MOD_WISTUN, IF_REAL, "Width dependence of istun"), IOP( "widtun", B4SOI_MOD_WIDTUN, IF_REAL, "Width dependence of idtun"), IOP( "wvrec0", B4SOI_MOD_WVREC0S, IF_REAL, "Width dependence of vrec0"), IOP( "wvrec0d", B4SOI_MOD_WVREC0D, IF_REAL, "Width dependence of vrec0d"), IOP( "wvtun0", B4SOI_MOD_WVTUN0S, IF_REAL, "Width dependence of vtun0"), IOP( "wvtun0d", B4SOI_MOD_WVTUN0D, IF_REAL, "Width dependence of vtun0d"), IOP( "wnbjt", B4SOI_MOD_WNBJT, IF_REAL, "Width dependence of nbjt"), IOP( "wlbjt0", B4SOI_MOD_WLBJT0, IF_REAL, "Width dependence of lbjt0"), IOP( "wvabjt", B4SOI_MOD_WVABJT, IF_REAL, "Width dependence of vabjt"), IOP( "waely", B4SOI_MOD_WAELY, IF_REAL, "Width dependence of aely"), IOP( "wahli", B4SOI_MOD_WAHLIS,IF_REAL, "Width dependence of ahli"),/* v4.0 */ IOP( "wahlid", B4SOI_MOD_WAHLID,IF_REAL, "Width dependence of ahlid"),/* v4.0 */ IOP( "wvsdfb", B4SOI_MOD_WVSDFB, IF_REAL, "Width dependence of vsdfb"), IOP( "wvsdth", B4SOI_MOD_WVSDTH, IF_REAL, "Width dependence of vsdth"), IOP( "wdelvt", B4SOI_MOD_WDELVT, IF_REAL, "Width dependence of delvt"), IOP( "wacde", B4SOI_MOD_WACDE, IF_REAL, "Width dependence of acde"), IOP( "wmoin", B4SOI_MOD_WMOIN, IF_REAL, "Width dependence of moin"), IOP( "wnoff", B4SOI_MOD_WNOFF, IF_REAL, "Width dependence of noff"), /* v3.2 */ /* v3.1 added for RF */ IOP("wxrcrg1", B4SOI_MOD_WXRCRG1, IF_REAL, "Width dependence of xrcrg1"), /* IOP("Wxrcrg2", B4SOI_MOD_WXRCRG2, IF_REAL, "Width dependence of xrcrg2") *//*Bug fix # 32 Jul 09 */ IOP("wxrcrg2", B4SOI_MOD_WXRCRG2, IF_REAL, "Width dependence of xrcrg2"), /* added for RF model end*/ /* Cross-term Dependence */ /* v3.1 */ IOP( "pxj", B4SOI_MOD_PXJ, IF_REAL, "Cross-term dependence of xj"), IOP( "palphagb1", B4SOI_MOD_PALPHAGB1, IF_REAL, "Cross-term dependence of alphagb1"), IOP( "pbetagb1", B4SOI_MOD_PBETAGB1, IF_REAL, "Cross-term dependence of betagb1"), IOP( "palphagb2", B4SOI_MOD_PALPHAGB2, IF_REAL, "Cross-term dependence of alphagb2"), IOP( "pbetagb2", B4SOI_MOD_PBETAGB2, IF_REAL, "Cross-term dependence of betagb2"), IOP( "paigbcp2", B4SOI_MOD_PAIGBCP2, IF_REAL, "Cross-term dependence of aigbcp2"), IOP( "pbigbcp2", B4SOI_MOD_PBIGBCP2, IF_REAL, "Cross-term dependence of bigbcp2"), IOP( "pcigbcp2", B4SOI_MOD_PCIGBCP2, IF_REAL, "Cross-term dependence of cigbcp2"), IOP( "pcgsl", B4SOI_MOD_PCGSL, IF_REAL, "Cross-term dependence of cgsl"), IOP( "pcgdl", B4SOI_MOD_PCGDL, IF_REAL, "Cross-term dependence of cgdl"), IOP( "pckappa", B4SOI_MOD_PCKAPPA, IF_REAL, "Cross-term dependence of ckappa"), IOP( "pndif", B4SOI_MOD_PNDIF, IF_REAL, "Cross-term dependence of ndif"), IOP( "pute", B4SOI_MOD_PUTE, IF_REAL, "Cross-term dependence of ute"), IOP( "pkt1", B4SOI_MOD_PKT1, IF_REAL, "Cross-term dependence of kt1"), IOP( "pkt1l", B4SOI_MOD_PKT1L, IF_REAL, "Cross-term dependence of kt1l"), IOP( "pkt2", B4SOI_MOD_PKT2, IF_REAL, "Cross-term dependence of kt2"), IOP( "pua1", B4SOI_MOD_PUA1, IF_REAL, "Cross-term dependence of ua1"), IOP( "pub1", B4SOI_MOD_PUB1, IF_REAL, "Cross-term dependence of ub1"), IOP( "puc1", B4SOI_MOD_PUC1, IF_REAL, "Cross-term dependence of uc1"), IOP( "pat", B4SOI_MOD_PAT, IF_REAL, "Cross-term dependence of at"), IOP( "pprt", B4SOI_MOD_PPRT, IF_REAL, "Cross-term dependence of prt "), IOP( "pntrecf", B4SOI_MOD_PNTRECF, IF_REAL, "Cross-term dependence of ntrecf"), IOP( "pntrecr", B4SOI_MOD_PNTRECR, IF_REAL, "Cross-term dependence of ntrecr"), IOP( "pxbjt", B4SOI_MOD_PXBJT, IF_REAL, "Cross-term dependence of xbjt"), IOP( "pxdif", B4SOI_MOD_PXDIFS, IF_REAL, "Cross-term dependence of xdif"), IOP( "pxrec", B4SOI_MOD_PXRECS, IF_REAL, "Cross-term dependence of xrec"), IOP( "pxtun", B4SOI_MOD_PXTUNS, IF_REAL, "Cross-term dependence of xtun"), IOP( "pxdifd", B4SOI_MOD_PXDIFD, IF_REAL, "Cross-term dependence of xdifd"), IOP( "pxrecd", B4SOI_MOD_PXRECD, IF_REAL, "Cross-term dependence of xrecd"), IOP( "pxtund", B4SOI_MOD_PXTUND, IF_REAL, "Cross-term dependence of xtund"), /* v3.0 */ IOP( "paigc", B4SOI_MOD_PAIGC, IF_REAL, "Cross-term dependence of aigc"), IOP( "pbigc", B4SOI_MOD_PBIGC, IF_REAL, "Cross-term dependence of bigc"), IOP( "pcigc", B4SOI_MOD_PCIGC, IF_REAL, "Cross-term dependence of cigc"), IOP( "paigsd", B4SOI_MOD_PAIGSD, IF_REAL, "Cross-term dependence of aigsd"), IOP( "pbigsd", B4SOI_MOD_PBIGSD, IF_REAL, "Cross-term dependence of bigsd"), IOP( "pcigsd", B4SOI_MOD_PCIGSD, IF_REAL, "Cross-term dependence of cigsd"), IOP( "pnigc", B4SOI_MOD_PNIGC, IF_REAL, "Cross-term dependence of nigc"), IOP( "ppigcd", B4SOI_MOD_PPIGCD, IF_REAL, "Cross-term dependence for pigcd"), IOP( "ppoxedge", B4SOI_MOD_PPOXEDGE, IF_REAL, "Cross-term dependence for poxedge"), IOP( "pnch", B4SOI_MOD_PNPEAK, IF_REAL, "Cross-term dependence of nch"), IOP( "pnsub", B4SOI_MOD_PNSUB, IF_REAL, "Cross-term dependence of nsub"), IOP( "pnsd", B4SOI_MOD_PNSD, IF_REAL, "Cross-term dependence of nsd"), IOP( "pngate", B4SOI_MOD_PNGATE, IF_REAL, "Cross-term dependence of ngate"), IOP( "pvth0", B4SOI_MOD_PVTH0, IF_REAL,"Cross-term dependence of vth0"), IOP( "pvfb", B4SOI_MOD_PVFB, IF_REAL, "Cross-term dependence of vfb"), /* v4.1 */ IOP( "pk1", B4SOI_MOD_PK1, IF_REAL, "Cross-term dependence of k1"), IOP( "pk1w1", B4SOI_MOD_PK1W1, IF_REAL, "Cross-term dependence of k1w1"), IOP( "pk1w2", B4SOI_MOD_PK1W2, IF_REAL, "Cross-term dependence of k1w2"), IOP( "pk2", B4SOI_MOD_PK2, IF_REAL, "Cross-term dependence of k2"), IOP( "pk3", B4SOI_MOD_PK3, IF_REAL, "Cross-term dependence of k3"), IOP( "pk3b", B4SOI_MOD_PK3B, IF_REAL, "Cross-term dependence of k3b"), IOP( "pkb1", B4SOI_MOD_PKB1, IF_REAL, "Cross-term dependence of kb1"), IOP( "pw0", B4SOI_MOD_PW0, IF_REAL, "Cross-term dependence of w0"), IOP( "plpe0", B4SOI_MOD_PLPE0, IF_REAL, "Cross-term dependence of lpe0"), IOP( "plpeb", B4SOI_MOD_PLPEB, IF_REAL, "Cross-term dependence of lpeb"), IOP( "pdvt0", B4SOI_MOD_PDVT0, IF_REAL, "Cross-term dependence of dvt0"), IOP( "pdvt1", B4SOI_MOD_PDVT1, IF_REAL, "Cross-term dependence of dvt1"), IOP( "pdvt2", B4SOI_MOD_PDVT2, IF_REAL, "Cross-term dependence of dvt2"), IOP( "pdvt0w", B4SOI_MOD_PDVT0W, IF_REAL, "Cross-term dependence of dvt0w"), IOP( "pdvt1w", B4SOI_MOD_PDVT1W, IF_REAL, "Cross-term dependence of dvt1w"), IOP( "pdvt2w", B4SOI_MOD_PDVT2W, IF_REAL, "Cross-term dependence of dvt2w"), IOP( "pu0", B4SOI_MOD_PU0, IF_REAL, "Cross-term dependence of u0"), IOP( "peu", B4SOI_MOD_PEU, IF_REAL, "Cross-term dependence of eu"), IOP( "pua", B4SOI_MOD_PUA, IF_REAL, "Cross-term dependence of ua"), IOP( "pub", B4SOI_MOD_PUB, IF_REAL, "Cross-term dependence of ub"), IOP( "puc", B4SOI_MOD_PUC, IF_REAL, "Cross-term dependence of uc"), IOP( "pud", B4SOI_MOD_PUD, IF_REAL, "Cross-term dependence of ud"), /*Bug fix # 32 Jul 09 */ IOP( "pud1", B4SOI_MOD_PUD1, IF_REAL, "Cross-term dependence of ud1"), /*Bug fix # 32 Jul 09 */ IOP( "pucste", B4SOI_MOD_PUCSTE, IF_REAL, "Cross-term dependence of ucste"), IOP( "pucs", B4SOI_MOD_PUCS, IF_REAL, "Cross-term dependence of ucs"), IOP( "pvsat", B4SOI_MOD_PVSAT, IF_REAL, "Cross-term dependence of vsat"), IOP( "pa0", B4SOI_MOD_PA0, IF_REAL, "Cross-term dependence of a0"), IOP( "pags", B4SOI_MOD_PAGS, IF_REAL, "Cross-term dependence of ags"), IOP( "pb0", B4SOI_MOD_PB0, IF_REAL, "Cross-term dependence of b0"), IOP( "pb1", B4SOI_MOD_PB1, IF_REAL, "Cross-term dependence of b1"), IOP( "pketa", B4SOI_MOD_PKETA, IF_REAL, "Cross-term dependence of keta"), IOP( "pketas", B4SOI_MOD_PKETAS, IF_REAL, "Cross-term dependence of ketas"), IOP( "pa1", B4SOI_MOD_PA1, IF_REAL, "Cross-term dependence of a1"), IOP( "pa2", B4SOI_MOD_PA2, IF_REAL, "Cross-term dependence of a2"), IOP( "prdsw", B4SOI_MOD_PRDSW, IF_REAL, "Cross-term dependence of rdsw "), IOP( "prsw", B4SOI_MOD_PRSW, IF_REAL, "Cross-term dependence of rsw "),/*v4.0*/ IOP( "prdw", B4SOI_MOD_PRDW, IF_REAL, "Cross-term dependence of rdw "),/*v4.0*/ IOP( "pprwb", B4SOI_MOD_PPRWB, IF_REAL, "Cross-term dependence of prwb "), IOP( "pprwg", B4SOI_MOD_PPRWG, IF_REAL, "Cross-term dependence of prwg "), IOP( "pwr", B4SOI_MOD_PWR, IF_REAL, "Cross-term dependence of wr"), IOP( "pnfactor", B4SOI_MOD_PNFACTOR, IF_REAL, "Cross-term dependence of nfactor"), IOP( "pdwg", B4SOI_MOD_PDWG, IF_REAL, "Cross-term dependence of dwg"), IOP( "pdwb", B4SOI_MOD_PDWB, IF_REAL, "Cross-term dependence of dwb"), IOP( "pvoff", B4SOI_MOD_PVOFF, IF_REAL, "Cross-term dependence of voff"), IOP( "peta0", B4SOI_MOD_PETA0, IF_REAL, "Cross-term dependence of eta0"), IOP( "petab", B4SOI_MOD_PETAB, IF_REAL, "Cross-term dependence of etab"), IOP( "pdsub", B4SOI_MOD_PDSUB, IF_REAL, "Cross-term dependence of dsub"), IOP( "pcit", B4SOI_MOD_PCIT, IF_REAL, "Cross-term dependence of cit"), IOP( "pcdsc", B4SOI_MOD_PCDSC, IF_REAL, "Cross-term dependence of cdsc"), IOP( "pcdscb", B4SOI_MOD_PCDSCB, IF_REAL, "Cross-term dependence of cdscb"), IOP( "pcdscd", B4SOI_MOD_PCDSCD, IF_REAL, "Cross-term dependence of cdscd"), IOP( "ppclm", B4SOI_MOD_PPCLM, IF_REAL, "Cross-term dependence of pclm"), IOP( "ppdiblc1", B4SOI_MOD_PPDIBL1, IF_REAL, "Cross-term dependence of pdiblc1"), IOP( "ppdiblc2", B4SOI_MOD_PPDIBL2, IF_REAL, "Cross-term dependence of pdiblc2"), IOP( "ppdiblcb", B4SOI_MOD_PPDIBLB, IF_REAL, "Cross-term dependence of pdiblcb"), IOP( "pdrout", B4SOI_MOD_PDROUT, IF_REAL, "Cross-term dependence of drout"), IOP( "ppvag", B4SOI_MOD_PPVAG, IF_REAL, "Cross-term dependence of pvag"), IOP( "pdelta", B4SOI_MOD_PDELTA, IF_REAL, "Cross-term dependence of delta"), IOP( "palpha0", B4SOI_MOD_PALPHA0, IF_REAL, "Cross-term dependence of alpha0"), IOP( "pfbjtii", B4SOI_MOD_PFBJTII, IF_REAL, "Cross-term dependence of fbjtii"), IOP( "pabjtii", B4SOI_MOD_PABJTII, IF_REAL, "Cross-term dependence of abjtii"), /* Bug fix # 32 Jul 09 */ IOP( "pcbjtii", B4SOI_MOD_PCBJTII, IF_REAL, "Cross-term dependence of cbjtii"), /* Bug fix # 32 Jul 09 */ IOP( "pebjtii", B4SOI_MOD_PEBJTII, IF_REAL, "Cross-term dependence of ebjtii"), /* Bug fix # 32 Jul 09 */ IOP( "pmbjtii", B4SOI_MOD_PMBJTII, IF_REAL, "Cross-term dependence of mbjtii"), /* Bug fix # 32 Jul 09 */ IOP( "pvbci", B4SOI_MOD_PVBCI, IF_REAL, "Cross-term dependence of vbci"), /* Bug fix # 32 Jul 09 */ IOP( "pbeta0", B4SOI_MOD_PBETA0, IF_REAL, "Cross-term dependence of beta0"), IOP( "pbeta1", B4SOI_MOD_PBETA1, IF_REAL, "Cross-term dependence of beta1"), IOP( "pbeta2", B4SOI_MOD_PBETA2, IF_REAL, "Cross-term dependence of beta2"), IOP( "pvdsatii0", B4SOI_MOD_PVDSATII0, IF_REAL, "Cross-term dependence of vdsatii0"), IOP( "plii", B4SOI_MOD_PLII, IF_REAL, "Cross-term dependence of lii"), IOP( "pesatii", B4SOI_MOD_PESATII, IF_REAL, "Cross-term dependence of esatii"), IOP( "psii0", B4SOI_MOD_PSII0, IF_REAL, "Cross-term dependence of sii0"), IOP( "psii1", B4SOI_MOD_PSII1, IF_REAL, "Cross-term dependence of sii1"), IOP( "psii2", B4SOI_MOD_PSII2, IF_REAL, "Cross-term dependence of sii2"), IOP( "psiid", B4SOI_MOD_PSIID, IF_REAL, "Cross-term dependence of siid"), IOP( "pagidl", B4SOI_MOD_PAGIDL, IF_REAL, "Cross-term dependence of agidl"), IOP( "pbgidl", B4SOI_MOD_PBGIDL, IF_REAL, "Cross-term dependence of bgidl"), IOP( "pcgidl", B4SOI_MOD_PCGIDL, IF_REAL, "Cross-term dependence of cgidl"), IOP( "pegidl", B4SOI_MOD_PEGIDL, IF_REAL, "Cross-term dependence of egidl"), IOP( "prgidl", B4SOI_MOD_PRGIDL, IF_REAL, "Cross-term dependence of rgidl"), IOP( "pkgidl", B4SOI_MOD_PKGIDL, IF_REAL, "Cross-term dependence of kgidl"), IOP( "pfgidl", B4SOI_MOD_PFGIDL, IF_REAL, "Cross-term dependence of fgidl"), IOP( "pagisl", B4SOI_MOD_PAGISL, IF_REAL, "Cross-term dependence of agisl"), IOP( "pbgisl", B4SOI_MOD_PBGISL, IF_REAL, "Cross-term dependence of bgisl"), IOP( "pcgisl", B4SOI_MOD_PCGISL, IF_REAL, "Cross-term dependence of cgisl"), IOP( "pegisl", B4SOI_MOD_PEGISL, IF_REAL, "Cross-term dependence of egisl"), IOP( "prgisl", B4SOI_MOD_PRGISL, IF_REAL, "Cross-term dependence of rgisl"), IOP( "pkgisl", B4SOI_MOD_PKGISL, IF_REAL, "Cross-term dependence of kgisl"), IOP( "pfgisl", B4SOI_MOD_PFGISL, IF_REAL, "Cross-term dependence of fgisl"), IOP( "pntun", B4SOI_MOD_PNTUNS, IF_REAL, "Cross-term dependence of ntun"), IOP( "pntund", B4SOI_MOD_PNTUND, IF_REAL, "Cross-term dependence of ntund"), IOP( "pndiode", B4SOI_MOD_PNDIODES, IF_REAL,"Cross-term dependence of ndiode"), IOP( "pndioded", B4SOI_MOD_PNDIODED, IF_REAL,"Cross-term dependence of ndiode"), IOP( "pnrecf0", B4SOI_MOD_PNRECF0S, IF_REAL,"Cross-term dependence of nrecf0"), IOP( "pnrecf0d", B4SOI_MOD_PNRECF0D, IF_REAL,"Cross-term dependence of nrecf0"), IOP( "pnrecr0", B4SOI_MOD_PNRECR0S, IF_REAL,"Cross-term dependence of nrecr0"), IOP( "pnrecr0d", B4SOI_MOD_PNRECR0D, IF_REAL,"Cross-term dependence of nrecr0"), IOP( "pisbjt", B4SOI_MOD_PISBJT, IF_REAL, "Cross-term dependence of isbjt"), IOP( "pidbjt", B4SOI_MOD_PIDBJT, IF_REAL, "Cross-term dependence of idbjt"), IOP( "pisdif", B4SOI_MOD_PISDIF, IF_REAL, "Cross-term dependence of isdif"), IOP( "piddif", B4SOI_MOD_PIDDIF, IF_REAL, "Cross-term dependence of iddif"), IOP( "pisrec", B4SOI_MOD_PISREC, IF_REAL, "Cross-term dependence of isrec"), IOP( "pidrec", B4SOI_MOD_PIDREC, IF_REAL, "Cross-term dependence of idrec"), IOP( "pistun", B4SOI_MOD_PISTUN, IF_REAL, "Cross-term dependence of istun"), IOP( "pidtun", B4SOI_MOD_PIDTUN, IF_REAL, "Cross-term dependence of idtun"), IOP( "pvrec0", B4SOI_MOD_PVREC0S, IF_REAL, "Cross-term dependence of vrec0"), IOP( "pvrec0d", B4SOI_MOD_PVREC0D, IF_REAL, "Cross-term dependence of vrec0d"), IOP( "pvtun0", B4SOI_MOD_PVTUN0S, IF_REAL, "Cross-term dependence of vtun0"), IOP( "pvtun0d", B4SOI_MOD_PVTUN0D, IF_REAL, "Cross-term dependence of vtun0d"), IOP( "pnbjt", B4SOI_MOD_PNBJT, IF_REAL, "Cross-term dependence of nbjt"), IOP( "plbjt0", B4SOI_MOD_PLBJT0, IF_REAL, "Cross-term dependence of lbjt0"), IOP( "pvabjt", B4SOI_MOD_PVABJT, IF_REAL, "Cross-term dependence of vabjt"), IOP( "paely", B4SOI_MOD_PAELY, IF_REAL, "Cross-term dependence of aely"), IOP( "pahli",B4SOI_MOD_PAHLIS,IF_REAL, "X-term dependence of ahli"),/* v4.0 */ IOP( "pahlid",B4SOI_MOD_PAHLID,IF_REAL, "X-term dependence of ahlid"),/* v4.0 */ IOP( "pvsdfb", B4SOI_MOD_PVSDFB, IF_REAL, "Cross-term dependence of vsdfb"), IOP( "pvsdth", B4SOI_MOD_PVSDTH, IF_REAL, "Cross-term dependence of vsdth"), IOP( "pdelvt", B4SOI_MOD_PDELVT, IF_REAL, "Cross-term dependence of delvt"), IOP( "pacde", B4SOI_MOD_PACDE, IF_REAL, "Cross-term dependence of acde"), IOP( "pmoin", B4SOI_MOD_PMOIN, IF_REAL, "Cross-term dependence of moin"), IOP( "pnoff", B4SOI_MOD_PNOFF, IF_REAL, "Cross-term dependence of noff"), /* v3.2 */ /* v3.1 added for RF */ IOP("pxrcrg1", B4SOI_MOD_PXRCRG1, IF_REAL, "Cross-term dependence of xrcrg1"), IOP("pxrcrg2", B4SOI_MOD_PXRCRG2, IF_REAL, "Cross-term dependence of xrcrg2"), /* v3.1 added for RF end */ /* v4.0 backward compatibility */ IOP( "nlx", B4SOI_MOD_NLX, IF_REAL, "Lateral non-uniform doping effect"), IOP( "lnlx", B4SOI_MOD_LNLX, IF_REAL, "Length dependence of nlx"), IOP( "wnlx", B4SOI_MOD_WNLX, IF_REAL, "Width dependence of nlx"), IOP( "pnlx", B4SOI_MOD_PNLX, IF_REAL, "Cross-term dependence of nlx"), IOP( "ngidl", B4SOI_MOD_NGIDL, IF_REAL, "GIDL first parameter"), IOP( "lngidl", B4SOI_MOD_LNGIDL, IF_REAL, "Length dependence of ngidl"), IOP( "wngidl", B4SOI_MOD_WNGIDL, IF_REAL, "Width dependence of ngidl"), IOP( "pngidl", B4SOI_MOD_PNGIDL, IF_REAL, "Cross-term dependence of ngidl"), /* Added for binning - END */ IOP("vgs_max", B4SOI_MOD_VGS_MAX, IF_REAL, "maximum voltage G-S branch"), IOP("vgd_max", B4SOI_MOD_VGD_MAX, IF_REAL, "maximum voltage G-D branch"), IOP("vgb_max", B4SOI_MOD_VGB_MAX, IF_REAL, "maximum voltage G-B branch"), IOP("vds_max", B4SOI_MOD_VDS_MAX, IF_REAL, "maximum voltage D-S branch"), IOP("vbs_max", B4SOI_MOD_VBS_MAX, IF_REAL, "maximum voltage B-S branch"), IOP("vbd_max", B4SOI_MOD_VBD_MAX, IF_REAL, "maximum voltage B-D branch"), IOP("vgsr_max", B4SOI_MOD_VGSR_MAX, IF_REAL, "maximum voltage G-S branch"), IOP("vgdr_max", B4SOI_MOD_VGDR_MAX, IF_REAL, "maximum voltage G-D branch"), IOP("vgbr_max", B4SOI_MOD_VGBR_MAX, IF_REAL, "maximum voltage G-B branch"), IOP("vbsr_max", B4SOI_MOD_VBSR_MAX, IF_REAL, "maximum voltage B-S branch"), IOP("vbdr_max", B4SOI_MOD_VBDR_MAX, IF_REAL, "maximum voltage B-D branch"), IP( "nmos", B4SOI_MOD_NMOS, IF_FLAG, "Flag to indicate NMOS"), IP( "pmos", B4SOI_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"), }; char *B4SOInames[] = { "Drain", "Gate", "Source", "Backgate", "", "Body", "Temp", "Charge", }; int B4SOInSize = NUMELEMS(B4SOInames); int B4SOIpTSize = NUMELEMS(B4SOIpTable); int B4SOImPTSize = NUMELEMS(B4SOImPTable); int B4SOIiSize = sizeof(B4SOIinstance); int B4SOImSize = sizeof(B4SOImodel); tmpk8ny_4pz/src/spicelib/devices/bsimsoi/b4soipzld.c0000644000175000017500000001462213546075722022713 0ustar carstencarsten/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/ /********** * Copyright 2010 Regents of the University of California. All rights reserved. * Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang * Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soipzld.c * Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu. * Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu. * File: b4soipzld.c * Modified by Hui Wan, Xuemei Xi 11/30/2005 * Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009 * Modified by Tanvir Morshed 09/22/2009 * Modified by Tanvir Morshed 12/31/2009 **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "b4soidef.h" #include "ngspice/suffix.h" int B4SOIpzLoad( GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { register B4SOImodel *model = (B4SOImodel*)inModel; register B4SOIinstance *here; double xcggb, xcgdb, xcgsb, xcbgb, xcbdb, xcbsb, xcddb, xcssb, xcdgb; double gdpr, gspr, gds, gbd, gbs, capbd=0.0, capbs=0.0, xcsgb, xcdsb, xcsdb; double cggb, cgdb, cgsb, cbgb, cbdb, cbsb, cddb, cdgb, cdsb; double GSoverlapCap, GDoverlapCap, GBoverlapCap=0.0; double FwdSum, RevSum, Gm, Gmbs; double m; NG_IGNORE(ckt); for (; model != NULL; model = B4SOInextModel(model)) { for (here = B4SOIinstances(model); here!= NULL; here = B4SOInextInstance(here)) { if (here->B4SOImode >= 0) { Gm = here->B4SOIgm; Gmbs = here->B4SOIgmbs; FwdSum = Gm + Gmbs; RevSum = 0.0; cggb = here->B4SOIcggb; cgsb = here->B4SOIcgsb; cgdb = here->B4SOIcgdb; cbgb = here->B4SOIcbgb; cbsb = here->B4SOIcbsb; cbdb = here->B4SOIcbdb; cdgb = here->B4SOIcdgb; cdsb = here->B4SOIcdsb; cddb = here->B4SOIcddb; } else { Gm = -here->B4SOIgm; Gmbs = -here->B4SOIgmbs; FwdSum = 0.0; RevSum = -Gm - Gmbs; cggb = here->B4SOIcggb; cgsb = here->B4SOIcgdb; cgdb = here->B4SOIcgsb; cbgb = here->B4SOIcbgb; cbsb = here->B4SOIcbdb; cbdb = here->B4SOIcbsb; cdgb = -(here->B4SOIcdgb + cggb + cbgb); cdsb = -(here->B4SOIcddb + cgsb + cbsb); cddb = -(here->B4SOIcdsb + cgdb + cbdb); } gdpr=here->B4SOIdrainConductance; gspr=here->B4SOIsourceConductance; gds= here->B4SOIgds; gbd= here->B4SOIgjdb; gbs= here->B4SOIgjsb; #ifdef BULKCODE capbd= here->B4SOIcapbd; capbs= here->B4SOIcapbs; #endif GSoverlapCap = here->B4SOIcgso; GDoverlapCap = here->B4SOIcgdo; #ifdef BULKCODE GBoverlapCap = here->pParam->B4SOIcgbo; #endif xcdgb = (cdgb - GDoverlapCap); xcddb = (cddb + capbd + GDoverlapCap); xcdsb = cdsb; xcsgb = -(cggb + cbgb + cdgb + GSoverlapCap); xcsdb = -(cgdb + cbdb + cddb); xcssb = (capbs + GSoverlapCap - (cgsb+cbsb+cdsb)); xcggb = (cggb + GDoverlapCap + GSoverlapCap + GBoverlapCap); xcgdb = (cgdb - GDoverlapCap); xcgsb = (cgsb - GSoverlapCap); xcbgb = (cbgb - GBoverlapCap); xcbdb = (cbdb - capbd); xcbsb = (cbsb - capbs); m = here->B4SOIm; *(here->B4SOIGgPtr ) += m * xcggb * s->real; *(here->B4SOIGgPtr +1) += m * xcggb * s->imag; *(here->B4SOIBbPtr ) += m * (-xcbgb-xcbdb-xcbsb) * s->real; *(here->B4SOIBbPtr +1) += m * (-xcbgb-xcbdb-xcbsb) * s->imag; *(here->B4SOIDPdpPtr ) += m * xcddb * s->real; *(here->B4SOIDPdpPtr +1) += m * xcddb * s->imag; *(here->B4SOISPspPtr ) += m * xcssb * s->real; *(here->B4SOISPspPtr +1) += m * xcssb * s->imag; *(here->B4SOIGbPtr ) += m * (-xcggb-xcgdb-xcgsb) * s->real; *(here->B4SOIGbPtr +1) += m * (-xcggb-xcgdb-xcgsb) * s->imag; *(here->B4SOIGdpPtr ) += m * xcgdb * s->real; *(here->B4SOIGdpPtr +1) += m * xcgdb * s->imag; *(here->B4SOIGspPtr ) += m * xcgsb * s->real; *(here->B4SOIGspPtr +1) += m * xcgsb * s->imag; *(here->B4SOIBgPtr ) += m * xcbgb * s->real; *(here->B4SOIBgPtr +1) += m * xcbgb * s->imag; *(here->B4SOIBdpPtr ) += m * xcbdb * s->real; *(here->B4SOIBdpPtr +1) += m * xcbdb * s->imag; *(here->B4SOIBspPtr ) += m * xcbsb * s->real; *(here->B4SOIBspPtr +1) += m * xcbsb * s->imag; *(here->B4SOIDPgPtr ) += m * xcdgb * s->real; *(here->B4SOIDPgPtr +1) += m * xcdgb * s->imag; *(here->B4SOIDPbPtr ) += m * (-xcdgb-xcddb-xcdsb) * s->real; *(here->B4SOIDPbPtr +1) += m * (-xcdgb-xcddb-xcdsb) * s->imag; *(here->B4SOIDPspPtr ) += m * xcdsb * s->real; *(here->B4SOIDPspPtr +1) += m * xcdsb * s->imag; *(here->B4SOISPgPtr ) += m * xcsgb * s->real; *(here->B4SOISPgPtr +1) += m * xcsgb * s->imag; *(here->B4SOISPbPtr ) += m * (-xcsgb-xcsdb-xcssb) * s->real; *(here->B4SOISPbPtr +1) += m * (-xcsgb-xcsdb-xcssb) * s->imag; *(here->B4SOISPdpPtr ) += m * xcsdb * s->real; *(here->B4SOISPdpPtr +1) += m * xcsdb * s->imag; *(here->B4SOIDdPtr) += m * gdpr; *(here->B4SOISsPtr) += m * gspr; *(here->B4SOIBbPtr) += m * (gbd+gbs); *(here->B4SOIDPdpPtr) += m * (gdpr+gds+gbd+RevSum); *(here->B4SOISPspPtr) += m * (gspr+gds+gbs+FwdSum); *(here->B4SOIDdpPtr) -= m * gdpr; *(here->B4SOISspPtr) -= m * gspr; *(here->B4SOIBdpPtr) -= m * gbd; *(here->B4SOIBspPtr) -= m * gbs; *(here->B4SOIDPdPtr) -= m * gdpr; *(here->B4SOIDPgPtr) += m * Gm; *(here->B4SOIDPbPtr) -= m * (gbd - Gmbs); *(here->B4SOIDPspPtr) -= m * (gds + FwdSum); *(here->B4SOISPgPtr) -= m * Gm; *(here->B4SOISPsPtr) -= m * gspr; *(here->B4SOISPbPtr) -= m * (gbs + Gmbs); *(here->B4SOISPdpPtr) -= m * (gds + RevSum); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsimsoi/b4soisoachk.c0000644000175000017500000003612313546075722023212 0ustar carstencarsten/********** Copyright 2013 Dietmar Warning. All rights reserved. Author: 2013 Dietmar Warning **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b4soidef.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/cpdefs.h" int B4SOIsoaCheck(CKTcircuit *ckt, GENmodel *inModel) { B4SOImodel *model = (B4SOImodel *) inModel; B4SOIinstance *here; double vgs, vgd, vgb, vds, vbs, vbd; /* actual mos voltages */ int maxwarns; static int warns_vgs = 0, warns_vgd = 0, warns_vgb = 0, warns_vds = 0, warns_vbs = 0, warns_vbd = 0; if (!ckt) { warns_vgs = 0; warns_vgd = 0; warns_vgb = 0; warns_vds = 0; warns_vbs = 0; warns_vbd = 0; return OK; } maxwarns = ckt->CKTsoaMaxWarns; for (; model; model = B4SOInextModel(model)) { for (here = B4SOIinstances(model); here; here = B4SOInextInstance(here)) { vgs = ckt->CKTrhsOld [here->B4SOIgNode] - ckt->CKTrhsOld [here->B4SOIsNodePrime]; vgd = ckt->CKTrhsOld [here->B4SOIgNode] - ckt->CKTrhsOld [here->B4SOIdNodePrime]; vgb = ckt->CKTrhsOld [here->B4SOIgNode] - ckt->CKTrhsOld [here->B4SOIbNode]; vds = ckt->CKTrhsOld [here->B4SOIdNodePrime] - ckt->CKTrhsOld [here->B4SOIsNodePrime]; vbs = ckt->CKTrhsOld [here->B4SOIbNode] - ckt->CKTrhsOld [here->B4SOIsNodePrime]; vbd = ckt->CKTrhsOld [here->B4SOIbNode] - ckt->CKTrhsOld [here->B4SOIdNodePrime]; if (!model->B4SOIvgsrMaxGiven) { if (fabs(vgs) > model->B4SOIvgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->B4SOIvgsMax); warns_vgs++; } if (!model->B4SOIvgbMaxGiven) { if (fabs(vgb) > model->B4SOIvgsMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgs_max=%g\n", vgb, model->B4SOIvgsMax); warns_vgb++; } } else { if (fabs(vgb) > model->B4SOIvgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->B4SOIvgbMax); warns_vgb++; } } } else { if (model->B4SOItype > 0) { if (vgs > model->B4SOIvgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->B4SOIvgsMax); warns_vgs++; } if (-1*vgs > model->B4SOIvgsrMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgsr_max=%g\n", vgs, model->B4SOIvgsrMax); warns_vgs++; } } else { if (vgs > model->B4SOIvgsrMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgsr_max=%g\n", vgs, model->B4SOIvgsrMax); warns_vgs++; } if (-1*vgs > model->B4SOIvgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->B4SOIvgsMax); warns_vgs++; } } } if (!model->B4SOIvgdrMaxGiven) { if (fabs(vgd) > model->B4SOIvgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->B4SOIvgdMax); warns_vgd++; } } else { if (model->B4SOItype > 0) { if (vgd > model->B4SOIvgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->B4SOIvgdMax); warns_vgd++; } if (-1*vgd > model->B4SOIvgdrMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgdr_max=%g\n", vgd, model->B4SOIvgdrMax); warns_vgd++; } } else { if (vgd > model->B4SOIvgdrMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgdr_max=%g\n", vgd, model->B4SOIvgdrMax); warns_vgd++; } if (-1*vgd > model->B4SOIvgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->B4SOIvgdMax); warns_vgd++; } } } if (fabs(vds) > model->B4SOIvdsMax) if (warns_vds < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vds=%g has exceeded Vds_max=%g\n", vds, model->B4SOIvdsMax); warns_vds++; } if (!model->B4SOIvgbrMaxGiven) { if (fabs(vgb) > model->B4SOIvgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->B4SOIvgbMax); warns_vgb++; } } else { if (model->B4SOItype > 0) { if (vgb > model->B4SOIvgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->B4SOIvgbMax); warns_vgb++; } if (-1*vgb > model->B4SOIvgbrMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgbr_max=%g\n", vgb, model->B4SOIvgbrMax); warns_vgb++; } } else { if (vgb > model->B4SOIvgbrMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgbr_max=%g\n", vgb, model->B4SOIvgbrMax); warns_vgb++; } if (-1*vgb > model->B4SOIvgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->B4SOIvgbMax); warns_vgb++; } } } if (!model->B4SOIvbsrMaxGiven) { if (!model->B4SOIvbsMaxGiven) { if (fabs(vbs) > model->B4SOIvbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->B4SOIvbdMax); warns_vbs++; } } else { if (fabs(vbs) > model->B4SOIvbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->B4SOIvbsMax); warns_vbs++; } } } else { if (!model->B4SOIvbsMaxGiven) { if (model->B4SOItype > 0) { if (vbs > model->B4SOIvbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->B4SOIvbdMax); warns_vbs++; } if (-1*vbs > model->B4SOIvbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->B4SOIvbsrMax); warns_vbs++; } } else { if (vbs > model->B4SOIvbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->B4SOIvbsrMax); warns_vbs++; } if (-1*vbs > model->B4SOIvbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->B4SOIvbdMax); warns_vbs++; } } } else { if (model->B4SOItype > 0) { if (vbs > model->B4SOIvbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->B4SOIvbsMax); warns_vbs++; } if (-1*vbs > model->B4SOIvbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->B4SOIvbsrMax); warns_vbs++; } } else { if (vbs > model->B4SOIvbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->B4SOIvbsrMax); warns_vbs++; } if (-1*vbs > model->B4SOIvbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->B4SOIvbsMax); warns_vbs++; } } } } if (!model->B4SOIvbdrMaxGiven) { if (fabs(vbd) > model->B4SOIvbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->B4SOIvbdMax); warns_vbd++; } } else { if (model->B4SOItype > 0) { if (vbd > model->B4SOIvbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->B4SOIvbdMax); warns_vbd++; } if (-1*vbd > model->B4SOIvbdrMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbdr_max=%g\n", vbd, model->B4SOIvbdrMax); warns_vbd++; } } else { if (vbd > model->B4SOIvbdrMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbdr_max=%g\n", vbd, model->B4SOIvbdrMax); warns_vbd++; } if (-1*vbd > model->B4SOIvbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->B4SOIvbdMax); warns_vbd++; } } } } } return OK; } tmpk8ny_4pz/src/spicelib/devices/bsimsoi/b4soiset.c0000644000175000017500000033417513546075722022545 0ustar carstencarsten/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/ /********** * Copyright 2010 Regents of the University of California. All rights reserved. * Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang * Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soiset.c * Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu. * Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu. * Authors: 2009- Tanvir Morshed, Ali Niknejad, Chenming Hu. * File: b4soiset.c * Modified by Hui Wan, Xuemei Xi 11/30/2005 * Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009 * Modified by Tanvir Morshed 09/22/2009 * Modified by Tanvir Morshed 12/31/2009 * Modified by Tanvir Morshed 04/27/2010 * Modified by Tanvir Morshed 12/16/2010 **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "b4soidef.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define SMOOTHFACTOR 0.1 #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define PI 3.141592654 #define Charge_q 1.60219e-19 #define Meter2Micron 1.0e6 #define EPS0 8.85418e-12 double epsrox, toxe, epssub; double NchMax; /* v4.4 */ int B4SOIsetup( SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { register B4SOImodel *model = (B4SOImodel*)inModel; register B4SOIinstance *here; int error; CKTnode *tmp; double Cboxt; /* v3.2 */ double Vbs0t, Qsi; #ifdef USE_OMP int idx, InstCount; B4SOIinstance **InstArray; #endif /* loop through all the B4SOI device models */ for( ; model != NULL; model = B4SOInextModel(model)) { /* Default value Processing for B4SOI MOSFET Models */ if (!model->B4SOItypeGiven) model->B4SOItype = NMOS; if (!model->B4SOImobModGiven) model->B4SOImobMod = 1; if (!model->B4SOIbinUnitGiven) model->B4SOIbinUnit = 1; if (!model->B4SOIparamChkGiven) model->B4SOIparamChk = 0; if (!model->B4SOIcapModGiven) model->B4SOIcapMod = 2; if (!model->B4SOIiiiModGiven) /* Bug fix #7 Jun 09 'iiimod' with default value added */ model->B4SOIiiiMod = 0; if (!model->B4SOImtrlModGiven) model->B4SOImtrlMod = 0; /*4.1*/ if (!model->B4SOIvgstcvModGiven) /*model->B4SOIvgstcvMod = 0; v4.2 Bugfix */ model->B4SOIvgstcvMod = 1; if (!model->B4SOIgidlModGiven) model->B4SOIgidlMod = 0; if (!model->B4SOIeotGiven) model->B4SOIeot = 100.0e-10; if (!model->B4SOIepsroxGiven) model->B4SOIepsrox = 3.9; if (!model->B4SOIepsrsubGiven) model->B4SOIepsrsub = 11.7; if (!model->B4SOIni0subGiven) model->B4SOIni0sub = 1.45e10; /* unit 1/cm3 */ if (!model->B4SOIbg0subGiven) model->B4SOIbg0sub = 1.16; /* unit eV */ if (!model->B4SOItbgasubGiven) model->B4SOItbgasub = 7.02e-4; if (!model->B4SOItbgbsubGiven) model->B4SOItbgbsub = 1108.0; if (!model->B4SOIleffeotGiven) model->B4SOIleffeot = 1.0; if (!model->B4SOIweffeotGiven) model->B4SOIweffeot = 10.0; if (!model->B4SOIvddeotGiven) model->B4SOIvddeot = (model->B4SOItype == NMOS) ? 1.5 : -1.5; if (!model->B4SOItempeotGiven) model->B4SOItempeot = 300.15; if (!model->B4SOIadosGiven) model->B4SOIados = 1.0; if (!model->B4SOIbdosGiven) model->B4SOIbdos = 1.0; if (!model->B4SOIepsrgateGiven) model->B4SOIepsrgate = 11.7; if (!model->B4SOIphigGiven) model->B4SOIphig = 4.05; if (!model->B4SOIeasubGiven) model->B4SOIeasub = 4.05; /* if (!model->B4SOInoiModGiven) model->B4SOInoiMod = 1; v3.2 */ if (!model->B4SOIshModGiven) model->B4SOIshMod = 0; if (!model->B4SOIversionGiven) model->B4SOIversion = 4.4; if (!model->B4SOItoxGiven) model->B4SOItox = 100.0e-10; /*model->B4SOIcox = 3.453133e-11 / model->B4SOItox;*/ if(model->B4SOImtrlMod) { epsrox = 3.9; toxe = model->B4SOIeot; epssub = EPS0 * model->B4SOIepsrsub; /*model->B4SOIcox = 3.453133e-11 / model->B4SOItox;*/ model->B4SOIcox = epsrox * EPS0 / toxe; } else { epsrox = model->B4SOIepsrox; toxe = model->B4SOItox; epssub = EPSSI; /*model->B4SOIcox = epsrox * EPS0 / toxe;*/ model->B4SOIcox = 3.453133e-11 / model->B4SOItox; } if (!model->B4SOItoxpGiven) model->B4SOItoxp = model->B4SOItox; if (!model->B4SOItoxmGiven) model->B4SOItoxm = model->B4SOItox; /* v3.2 */ /* v3.2 */ if (!model->B4SOIsoiModGiven) model->B4SOIsoiMod = 0; else if ((model->B4SOIsoiMod != 0) && (model->B4SOIsoiMod != 1) && (model->B4SOIsoiMod != 2) && (model->B4SOIsoiMod != 3)) { model->B4SOIsoiMod = 0; printf("Warning: soiMod has been set to its default value: 0.\n"); } /* v3.1 added for RF */ if (!model->B4SOIrgateModGiven) model->B4SOIrgateMod = 0; else if ((model->B4SOIrgateMod != 0) && (model->B4SOIrgateMod != 1) && (model->B4SOIrgateMod != 2) && (model->B4SOIrgateMod != 3)) { model->B4SOIrgateMod = 0; printf("Warning: rgateMod has been set to its default value: 0.\n"); } /* v3.1 added for RF end */ /* v3.2 for noise */ if (!model->B4SOIfnoiModGiven) model->B4SOIfnoiMod = 1; else if ((model->B4SOIfnoiMod != 0) && (model->B4SOIfnoiMod != 1)) { model->B4SOIfnoiMod = 1; printf("Waring: fnoiMod has been set to default value:1.\n"); } if (!model->B4SOItnoiModGiven) model->B4SOItnoiMod = 0; else if ((model->B4SOItnoiMod != 0) && (model->B4SOItnoiMod != 1)&& (model->B4SOItnoiMod != 2)) { model->B4SOItnoiMod = 0; printf("Waring: tnoiMod has been set to default value:0.\n"); } if (!model->B4SOItnoiaGiven) model->B4SOItnoia = 1.5; if (!model->B4SOItnoibGiven) model->B4SOItnoib = 3.5; if (!model->B4SOIrnoiaGiven) model->B4SOIrnoia = 0.577; if (!model->B4SOIrnoibGiven) model->B4SOIrnoib = 0.37; if (!model->B4SOIntnoiGiven) model->B4SOIntnoi = 1.0; /* v3.2 for noise end */ /* v4.0 */ if (!model->B4SOIrdsModGiven) model->B4SOIrdsMod = 0; else if ((model->B4SOIrdsMod != 0) && (model->B4SOIrdsMod != 1)) { model->B4SOIrdsMod = 0; printf("Warning: rdsMod has been set to its default value: 0.\n"); } if (!model->B4SOIrbodyModGiven) model->B4SOIrbodyMod = 0; else if ((model->B4SOIrbodyMod != 0) && (model->B4SOIrbodyMod != 1)) { model->B4SOIrbodyMod = 0; printf("Warning: rbodyMod has been set to its default value: 0.\n"); } if (!model->B4SOIgbminGiven) model->B4SOIgbmin = 1.0e-12; /* in mho */ if (!model->B4SOIrbdbGiven) model->B4SOIrbdb = 50.0; /* in ohm */ if (!model->B4SOIrbsbGiven) model->B4SOIrbsb = 50.0; /* in ohm */ /* v4.0 end */ /* v2.2.3 */ if (!model->B4SOIdtoxcvGiven) model->B4SOIdtoxcv = 0.0; if (!model->B4SOIcdscGiven) model->B4SOIcdsc = 2.4e-4; /* unit Q/V/m^2 */ if (!model->B4SOIcdscbGiven) model->B4SOIcdscb = 0.0; /* unit Q/V/m^2 */ if (!model->B4SOIcdscdGiven) model->B4SOIcdscd = 0.0; /* unit Q/V/m^2 */ if (!model->B4SOIcitGiven) model->B4SOIcit = 0.0; /* unit Q/V/m^2 */ if (!model->B4SOInfactorGiven) model->B4SOInfactor = 1; if (!model->B4SOIvsatGiven) model->B4SOIvsat = 8.0e4; /* unit m/s */ if (!model->B4SOIatGiven) model->B4SOIat = 3.3e4; /* unit m/s */ if (!model->B4SOIa0Given) model->B4SOIa0 = 1.0; if (!model->B4SOIagsGiven) model->B4SOIags = 0.0; if (!model->B4SOIa1Given) model->B4SOIa1 = 0.0; if (!model->B4SOIa2Given) model->B4SOIa2 = 1.0; if (!model->B4SOIketaGiven) model->B4SOIketa = -0.6; /* unit / V */ if (!model->B4SOInsubGiven) model->B4SOInsub = 6.0e16; /* unit 1/cm3 */ if (!model->B4SOInpeakGiven) model->B4SOInpeak = 1.7e17; /* unit 1/cm3 */ if (!model->B4SOIngateGiven) model->B4SOIngate = 0; /* unit 1/cm3 */ if (!model->B4SOInsdGiven) model->B4SOInsd = 1.0e20; if (!model->B4SOIvbmGiven) model->B4SOIvbm = -3.0; if (!model->B4SOIxtGiven) model->B4SOIxt = 1.55e-7; if (!model->B4SOIkt1Given) model->B4SOIkt1 = -0.11; /* unit V */ if (!model->B4SOIkt1lGiven) model->B4SOIkt1l = 0.0; /* unit V*m */ if (!model->B4SOIkt2Given) model->B4SOIkt2 = 0.022; /* No unit */ if (!model->B4SOIk3Given) model->B4SOIk3 = 0.0; if (!model->B4SOIk3bGiven) model->B4SOIk3b = 0.0; if (!model->B4SOIw0Given) model->B4SOIw0 = 2.5e-6; if (!model->B4SOIlpebGiven) model->B4SOIlpeb = 0.0; if (!model->B4SOIdvt0Given) model->B4SOIdvt0 = 2.2; if (!model->B4SOIdvt1Given) model->B4SOIdvt1 = 0.53; if (!model->B4SOIdvt2Given) model->B4SOIdvt2 = -0.032; /* unit 1 / V */ if (!model->B4SOIdvt0wGiven) model->B4SOIdvt0w = 0.0; if (!model->B4SOIdvt1wGiven) model->B4SOIdvt1w = 5.3e6; if (!model->B4SOIdvt2wGiven) model->B4SOIdvt2w = -0.032; if (!model->B4SOIdroutGiven) model->B4SOIdrout = 0.56; if (!model->B4SOIdsubGiven) model->B4SOIdsub = model->B4SOIdrout; if (!model->B4SOIvth0Given) model->B4SOIvth0 = (model->B4SOItype == NMOS) ? 0.7 : -0.7; if (!model->B4SOIvfbGiven) model->B4SOIvfb = -1.0; /* v4.1 */ if (!model->B4SOIuaGiven) model->B4SOIua = 2.25e-9; /* unit m/V */ if (!model->B4SOIua1Given) model->B4SOIua1 = 4.31e-9; /* unit m/V */ if (!model->B4SOIubGiven) model->B4SOIub = 5.87e-19; /* unit (m/V)**2 */ if (!model->B4SOIub1Given) model->B4SOIub1 = -7.61e-18; /* unit (m/V)**2 */ if (!model->B4SOIucGiven) model->B4SOIuc = (model->B4SOImobMod == 3) ? -0.0465 : -0.0465e-9; if (!model->B4SOIuc1Given) model->B4SOIuc1 = (model->B4SOImobMod == 3) ? -0.056 : -0.056e-9; if (!model->B4SOIu0Given) model->B4SOIu0 = (model->B4SOItype == NMOS) ? 0.067 : 0.025; if (!model->B4SOIuteGiven) model->B4SOIute = -1.5; /*4.1 mobmod =4 */ if (!model->B4SOIudGiven) model->B4SOIud = 0.0; if (!model->B4SOIludGiven) model->B4SOIlud = 0.0; if (!model->B4SOIwudGiven) model->B4SOIwud = 0.0; if (!model->B4SOIpudGiven) /* model->B4SOIpud1 = 0.0; */ /*Bug fix # 33 Jul 09 */ model->B4SOIpud = 0.0; if (!model->B4SOIud1Given) model->B4SOIud1 = 0.0; if (!model->B4SOIlud1Given) model->B4SOIlud1 = 0.0; if (!model->B4SOIwud1Given) model->B4SOIwud1 = 0.0; if (!model->B4SOIpud1Given) model->B4SOIpud1 = 0.0; if (!model->B4SOIeuGiven) model->B4SOIeu = (model->B4SOItype == NMOS) ? 1.67 : 1.0; if (!model->B4SOIleuGiven) model->B4SOIleu = 0.0; if (!model->B4SOIweuGiven) model->B4SOIweu = 0.0; if (!model->B4SOIpeuGiven) model->B4SOIpeu = 0.0; if (!model->B4SOIucsGiven) model->B4SOIucs = (model->B4SOItype == NMOS) ? 1.67 : 1.0; if (!model->B4SOIlucsGiven) model->B4SOIlucs =0.0; if (!model->B4SOIwucsGiven) model->B4SOIwucs =0.0; if (!model->B4SOIpucsGiven) model->B4SOIpucs =0.0; if (!model->B4SOIucsteGiven) model->B4SOIucste = -4.775e-3; if (!model->B4SOIlucsteGiven) model->B4SOIlucste = 0.0; if (!model->B4SOIwucsteGiven) model->B4SOIwucste = 0.0; if (!model->B4SOIpucsteGiven) model->B4SOIpucste = 0.0; if (!model->B4SOIvoffGiven) model->B4SOIvoff = -0.08; if (!model->B4SOIdeltaGiven) model->B4SOIdelta = 0.01; if (!model->B4SOIrdswGiven) model->B4SOIrdsw = 100; if (!model->B4SOIrswGiven) /* v4.0 */ model->B4SOIrsw = 50; if (!model->B4SOIrdwGiven) /* v4.0 */ model->B4SOIrdw = 50; if (!model->B4SOIrswminGiven) /* v4.0 */ model->B4SOIrswmin = 0.0; if (!model->B4SOIrdwminGiven) /* v4.0 */ model->B4SOIrdwmin = 0.0; if (!model->B4SOIprwgGiven) model->B4SOIprwg = 0.0; /* unit 1/V */ if (!model->B4SOIprwbGiven) model->B4SOIprwb = 0.0; if (!model->B4SOIprtGiven) model->B4SOIprt = 0.0; if (!model->B4SOIeta0Given) model->B4SOIeta0 = 0.08; /* no unit */ if (!model->B4SOIetabGiven) model->B4SOIetab = -0.07; /* unit 1/V */ if (!model->B4SOIpclmGiven) model->B4SOIpclm = 1.3; /* no unit */ if (!model->B4SOIpdibl1Given) model->B4SOIpdibl1 = .39; /* no unit */ if (!model->B4SOIpdibl2Given) model->B4SOIpdibl2 = 0.0086; /* no unit */ if (!model->B4SOIpdiblbGiven) model->B4SOIpdiblb = 0.0; /* 1/V */ if (!model->B4SOIpvagGiven) model->B4SOIpvag = 0.0; if (!model->B4SOIwrGiven) model->B4SOIwr = 1.0; if (!model->B4SOIdwgGiven) model->B4SOIdwg = 0.0; if (!model->B4SOIdwbGiven) model->B4SOIdwb = 0.0; if (!model->B4SOIb0Given) model->B4SOIb0 = 0.0; if (!model->B4SOIb1Given) model->B4SOIb1 = 0.0; if (!model->B4SOIalpha0Given) model->B4SOIalpha0 = 0.0; if (!model->B4SOIcgslGiven) model->B4SOIcgsl = 0.0; if (!model->B4SOIcgdlGiven) model->B4SOIcgdl = 0.0; if (!model->B4SOIckappaGiven) model->B4SOIckappa = 0.6; if (!model->B4SOIclcGiven) model->B4SOIclc = 0.1e-7; if (!model->B4SOIcleGiven) model->B4SOIcle = 0.0; if (!model->B4SOItboxGiven) model->B4SOItbox = 3e-7; if (!model->B4SOItsiGiven) model->B4SOItsi = 1e-7; if (!model->B4SOIetsiGiven) model->B4SOIetsi = 1e-7; if (!model->B4SOIxjGiven) model->B4SOIxj = model->B4SOItsi; if (!model->B4SOIrbodyGiven) model->B4SOIrbody = 0.0; if (!model->B4SOIrbshGiven) model->B4SOIrbsh = 0.0; if (!model->B4SOIrth0Given) model->B4SOIrth0 = 0; /* v3.0 bug fix */ if (!model->B4SOIcth0Given) model->B4SOIcth0 = 1e-5; if (!model->B4SOIcfrcoeffGiven) /* v4.4 */ model->B4SOIcfrcoeff = 1.0; if (!model->B4SOIagidlGiven) model->B4SOIagidl = 0.0; if (!model->B4SOIbgidlGiven) model->B4SOIbgidl = 2.3e9; /* v4.0 */ if (!model->B4SOIcgidlGiven) /* v4.0 */ model->B4SOIcgidl = 0.5; /* v4.2 default value changed from 0 to 0.5 */ if (!model->B4SOIrgidlGiven) /* v4.1 */ model->B4SOIrgidl = 1.0; if (!model->B4SOIkgidlGiven) /* v4.1 */ model->B4SOIkgidl = 0.0; if (!model->B4SOIfgidlGiven) /* v4.1 */ model->B4SOIfgidl = 0.0; if (!model->B4SOIagislGiven) model->B4SOIagisl = model->B4SOIagidl; if (!model->B4SOIbgislGiven) model->B4SOIbgisl = model->B4SOIbgidl; /* v4.0 */ if (!model->B4SOIcgislGiven) /* v4.0 */ model->B4SOIcgisl = model->B4SOIcgidl; if (!model->B4SOIrgislGiven) /* v4.1 */ model->B4SOIrgisl = model->B4SOIrgidl; if (!model->B4SOIkgislGiven) /* v4.1 */ model->B4SOIkgisl = model->B4SOIkgidl; if (!model->B4SOIfgislGiven) /* v4.1 */ model->B4SOIfgisl = model->B4SOIfgidl; if (!model->B4SOIndiodeGiven) /* v4.0 */ model->B4SOIndiode = 1.0; if (!model->B4SOIndiodedGiven) /* v4.0 */ model->B4SOIndioded = model->B4SOIndiode; if (!model->B4SOIntunGiven) /* v4.0 */ model->B4SOIntun = 10.0; if (!model->B4SOIntundGiven) /* v4.0 */ model->B4SOIntund = model->B4SOIntun; if (!model->B4SOInrecf0Given) model->B4SOInrecf0 = 2.0; if (!model->B4SOInrecf0dGiven) model->B4SOInrecf0d = model->B4SOInrecf0; if (!model->B4SOInrecr0Given) model->B4SOInrecr0 = 10.0; if (!model->B4SOInrecr0dGiven) model->B4SOInrecr0d = model->B4SOInrecr0; if (!model->B4SOIisbjtGiven) model->B4SOIisbjt = 1e-6; if (!model->B4SOIidbjtGiven) model->B4SOIidbjt = model->B4SOIisbjt; if (!model->B4SOIisdifGiven) model->B4SOIisdif = 0.0; if (!model->B4SOIiddifGiven) model->B4SOIiddif = model->B4SOIisdif; /* v4.0 */ if (!model->B4SOIisrecGiven) model->B4SOIisrec = 1e-5; if (!model->B4SOIidrecGiven) model->B4SOIidrec = model->B4SOIisrec; if (!model->B4SOIistunGiven) model->B4SOIistun = 0.0; if (!model->B4SOIidtunGiven) model->B4SOIidtun = model->B4SOIistun; if (!model->B4SOIxbjtGiven) model->B4SOIxbjt = 1.0; if (!model->B4SOIxdifGiven) model->B4SOIxdif = model->B4SOIxbjt; if (!model->B4SOIxdifdGiven) model->B4SOIxdifd = model->B4SOIxdif; if (!model->B4SOIxrecGiven) model->B4SOIxrec = 1.0; if (!model->B4SOIxrecdGiven) model->B4SOIxrecd = model->B4SOIxrec; if (!model->B4SOIxtunGiven) model->B4SOIxtun = 0.0; if (!model->B4SOIxtundGiven) model->B4SOIxtund = model->B4SOIxtun; if (!model->B4SOIttGiven) model->B4SOItt = 1e-12; if (!model->B4SOIasdGiven) model->B4SOIasd = 0.3; /* 4.0 backward compatibility */ if (!model->B4SOIlpe0Given) { if(!model->B4SOInlxGiven) model->B4SOIlpe0 = 1.74e-7; else model->B4SOIlpe0 = model->B4SOInlx; } if(model->B4SOIlpe0Given && model->B4SOInlxGiven) printf("Warning: both lpe0 and nlx are given. Lpe0 value is taken \n"); if (!model->B4SOIllpe0Given) { if(!model->B4SOIlnlxGiven) model->B4SOIllpe0 = 0.0; else model->B4SOIllpe0 = model->B4SOIlnlx; } if(model->B4SOIllpe0Given && model->B4SOIlnlxGiven) printf("Warning: both llpe0 and lnlx are given. Llpe0 value is taken \n"); if (!model->B4SOIwlpe0Given) { if(!model->B4SOIwnlxGiven) model->B4SOIwlpe0 = 0.0; else model->B4SOIwlpe0 = model->B4SOIwnlx; } if(model->B4SOIwlpe0Given && model->B4SOIwnlxGiven) printf("Warning: both wlpe0 and wnlx are given. Wlpe0 value is taken \n"); if (!model->B4SOIplpe0Given) { if(!model->B4SOIpnlxGiven) model->B4SOIplpe0 = 0.0; else model->B4SOIplpe0 = model->B4SOIpnlx; } if(model->B4SOIplpe0Given && model->B4SOIpnlxGiven) printf("Warning: both plpe0 and pnlx are given. Plpe0 value is taken \n"); if (!model->B4SOIegidlGiven) { if(!model->B4SOIngidlGiven) model->B4SOIegidl = 1.2; else model->B4SOIegidl = model->B4SOIngidl; } if(model->B4SOIegidlGiven && model->B4SOIngidlGiven) printf("Warning: both egidl and ngidl are given. Egidl value is taken \n"); if (!model->B4SOIlegidlGiven) { if(!model->B4SOIlngidlGiven) model->B4SOIlegidl = 0.0; else model->B4SOIlegidl = model->B4SOIlngidl; } if(model->B4SOIlegidlGiven && model->B4SOIlngidlGiven) printf("Warning: both legidl and lngidl are given. Legidl value is taken \n"); if (!model->B4SOIwegidlGiven) { if(!model->B4SOIwngidlGiven) model->B4SOIwegidl = 0.0; else model->B4SOIwegidl = model->B4SOIwngidl; } if(model->B4SOIwegidlGiven && model->B4SOIwngidlGiven) printf("Warning: both wegidl and wngidl are given. Wegidl value is taken \n"); if (!model->B4SOIpegidlGiven) { if(!model->B4SOIpngidlGiven) model->B4SOIpegidl = 0.0; else model->B4SOIpegidl = model->B4SOIpngidl; } if(model->B4SOIpegidlGiven && model->B4SOIpngidlGiven) printf("Warning: both pegidl and pngidl are given. Pegidl value is taken \n"); if (!model->B4SOIegislGiven) { model->B4SOIegisl = model->B4SOIegidl; } if (!model->B4SOIlegislGiven) { model->B4SOIlegisl = model->B4SOIlegidl; } if (!model->B4SOIwegislGiven) { model->B4SOIwegisl = model->B4SOIwegidl; } if (!model->B4SOIpegislGiven) { model->B4SOIpegisl = model->B4SOIpegidl; } /* unit degree celcius */ if (!model->B4SOItnomGiven) model->B4SOItnom = ckt->CKTnomTemp; if (!model->B4SOILintGiven) model->B4SOILint = 0.0; if (!model->B4SOILlGiven) model->B4SOILl = 0.0; if (!model->B4SOILlcGiven) model->B4SOILlc = 0.0; /* v2.2.3 */ if (!model->B4SOILlnGiven) model->B4SOILln = 1.0; if (!model->B4SOILwGiven) model->B4SOILw = 0.0; if (!model->B4SOILwcGiven) model->B4SOILwc = 0.0; /* v2.2.3 */ if (!model->B4SOILwnGiven) model->B4SOILwn = 1.0; if (!model->B4SOILwlGiven) model->B4SOILwl = 0.0; if (!model->B4SOILwlcGiven) model->B4SOILwlc = 0.0; /* v2.2.3 */ if (!model->B4SOILminGiven) model->B4SOILmin = 0.0; if (!model->B4SOILmaxGiven) model->B4SOILmax = 1.0; if (!model->B4SOIWintGiven) model->B4SOIWint = 0.0; if (!model->B4SOIWlGiven) model->B4SOIWl = 0.0; if (!model->B4SOIWlcGiven) model->B4SOIWlc = 0.0; /* v2.2.3 */ if (!model->B4SOIWlnGiven) model->B4SOIWln = 1.0; if (!model->B4SOIWwGiven) model->B4SOIWw = 0.0; if (!model->B4SOIWwcGiven) model->B4SOIWwc = 0.0; /* v2.2.3 */ if (!model->B4SOIWwnGiven) model->B4SOIWwn = 1.0; if (!model->B4SOIWwlGiven) model->B4SOIWwl = 0.0; if (!model->B4SOIWwlcGiven) model->B4SOIWwlc = 0.0; /* v2.2.3 */ if (!model->B4SOIWminGiven) model->B4SOIWmin = 0.0; if (!model->B4SOIWmaxGiven) model->B4SOIWmax = 1.0; if (!model->B4SOIdwcGiven) model->B4SOIdwc = model->B4SOIWint; if (!model->B4SOIdlcGiven) model->B4SOIdlc = model->B4SOILint; if (!model->B4SOIdlcigGiven) model->B4SOIdlcig = model->B4SOILint; /* v3.0 */ /* v3.0 */ if (!model->B4SOIvbs0pdGiven) model->B4SOIvbs0pd = 0.0; /* v3.2 */ if (!model->B4SOIvbs0fdGiven) model->B4SOIvbs0fd = 0.5; /* v3.2 */ if (!model->B4SOIvbsaGiven) model->B4SOIvbsa = 0.0; if (!model->B4SOInofffdGiven) model->B4SOInofffd = 1.0; if (!model->B4SOIvofffdGiven) model->B4SOIvofffd = 0.0; if (!model->B4SOIk1bGiven) model->B4SOIk1b = 1.0; if (!model->B4SOIk2bGiven) model->B4SOIk2b = 0.0; if (!model->B4SOIdk2bGiven) model->B4SOIdk2b = 0.0; if (!model->B4SOIdvbd0Given) model->B4SOIdvbd0 = 0.0; if (!model->B4SOIdvbd1Given) model->B4SOIdvbd1 = 0.0; if (!model->B4SOImoinFDGiven) model->B4SOImoinFD = 1e3; /* v3.1 added for RF */ if (!model->B4SOIxrcrg1Given) model->B4SOIxrcrg1 =12.0; if (!model->B4SOIxrcrg2Given) model->B4SOIxrcrg2 =1.0; if (!model->B4SOIrshgGiven) model->B4SOIrshg =0.1; if (!model->B4SOIngconGiven) model->B4SOIngcon =1.0; if (!model->B4SOIxgwGiven) model->B4SOIxgw = 0.0; if (!model->B4SOIxglGiven) model->B4SOIxgl = 0.0; /* v3.1 added for RF end */ /* v2.2 release */ if (!model->B4SOIwth0Given) model->B4SOIwth0 = 0.0; if (!model->B4SOIrhaloGiven) model->B4SOIrhalo = 1e15; if (!model->B4SOIntoxGiven) model->B4SOIntox = 1; if (!model->B4SOItoxrefGiven) model->B4SOItoxref = 2.5e-9; if (!model->B4SOIebgGiven) model->B4SOIebg = 1.2; if (!model->B4SOIvevbGiven) model->B4SOIvevb = 0.075; if (!model->B4SOIalphaGB1Given) model->B4SOIalphaGB1 = 0.35; if (!model->B4SOIbetaGB1Given) model->B4SOIbetaGB1 = 0.03; if (!model->B4SOIvgb1Given) model->B4SOIvgb1 = 300; if (!model->B4SOIalphaGB2Given) model->B4SOIalphaGB2 = 0.43; if (!model->B4SOIbetaGB2Given) model->B4SOIbetaGB2 = 0.05; if (!model->B4SOIvecbGiven) model->B4SOIvecb = 0.026; if (!model->B4SOIvgb2Given) model->B4SOIvgb2 = 17; if (!model->B4SOIaigbcp2Given) model->B4SOIaigbcp2 = 0.043; if (!model->B4SOIbigbcp2Given) model->B4SOIbigbcp2 = 0.0054; if (!model->B4SOIcigbcp2Given) model->B4SOIcigbcp2 = 0.0075; if (!model->B4SOItoxqmGiven) model->B4SOItoxqm = model->B4SOItox; if (!model->B4SOIvoxhGiven) model->B4SOIvoxh = 5.0; if (!model->B4SOIdeltavoxGiven) model->B4SOIdeltavox = 0.005; /* v3.0 */ if (!model->B4SOIigbModGiven) model->B4SOIigbMod = 0; if (!model->B4SOIigcModGiven) model->B4SOIigcMod = 0; if (!model->B4SOInigcGiven) model->B4SOInigc = 1.0; if (!model->B4SOIaigcGiven) model->B4SOIaigc = (model->B4SOItype == NMOS) ? 0.43 : 0.31; if (!model->B4SOIbigcGiven) model->B4SOIbigc = (model->B4SOItype == NMOS) ? 0.054 : 0.024; if (!model->B4SOIcigcGiven) model->B4SOIcigc = (model->B4SOItype == NMOS) ? 0.075 : 0.03; if (!model->B4SOIaigsdGiven) model->B4SOIaigsd = (model->B4SOItype == NMOS) ? 0.43 : 0.31; if (!model->B4SOIbigsdGiven) model->B4SOIbigsd = (model->B4SOItype == NMOS) ? 0.054 : 0.024; if (!model->B4SOIcigsdGiven) model->B4SOIcigsd = (model->B4SOItype == NMOS) ? 0.075 : 0.03; if (!model->B4SOIpigcdGiven) model->B4SOIpigcd = 1.0; if (!model->B4SOIpoxedgeGiven) model->B4SOIpoxedge = 1.0; /* v2.0 release */ if (!model->B4SOIk1w1Given) model->B4SOIk1w1 = 0.0; if (!model->B4SOIk1w2Given) model->B4SOIk1w2 = 0.0; if (!model->B4SOIketasGiven) model->B4SOIketas = 0.0; if (!model->B4SOIdwbcGiven) model->B4SOIdwbc = 0.0; if (!model->B4SOIbeta0Given) model->B4SOIbeta0 = 0.0; if (!model->B4SOIbeta1Given) model->B4SOIbeta1 = 0.0; if (!model->B4SOIbeta2Given) model->B4SOIbeta2 = 0.1; if (!model->B4SOIvdsatii0Given) model->B4SOIvdsatii0 = 0.9; if (!model->B4SOItiiGiven) model->B4SOItii = 0.0; if (!model->B4SOIliiGiven) model->B4SOIlii = 0.0; if (!model->B4SOIsii0Given) model->B4SOIsii0 = 0.5; if (!model->B4SOIsii1Given) model->B4SOIsii1 = 0.1; if (!model->B4SOIsii2Given) model->B4SOIsii2 = 0.0; if (!model->B4SOIsiidGiven) model->B4SOIsiid = 0.0; if (!model->B4SOIfbjtiiGiven) model->B4SOIfbjtii = 0.0; /*4.1 Iii model*/ if (!model->B4SOIebjtiiGiven) model->B4SOIebjtii = 0.0; if (!model->B4SOIcbjtiiGiven) model->B4SOIcbjtii = 0.0; if (!model->B4SOIvbciGiven) model->B4SOIvbci = 0.0; if (!model->B4SOItvbciGiven) model->B4SOItvbci = 0.0; if (!model->B4SOIabjtiiGiven) model->B4SOIabjtii = 0.0; if (!model->B4SOImbjtiiGiven) model->B4SOImbjtii = 0.4; if (!model->B4SOIesatiiGiven) model->B4SOIesatii = 1e7; if (!model->B4SOIlnGiven) model->B4SOIln = 2e-6; if (!model->B4SOIvrec0Given) /* v4.0 */ model->B4SOIvrec0 = 0; if (!model->B4SOIvrec0dGiven) /* v4.0 */ model->B4SOIvrec0d = model->B4SOIvrec0; if (!model->B4SOIvtun0Given) /* v4.0 */ model->B4SOIvtun0 = 0; if (!model->B4SOIvtun0dGiven) /* v4.0 */ model->B4SOIvtun0d = model->B4SOIvtun0; if (!model->B4SOInbjtGiven) model->B4SOInbjt = 1.0; if (!model->B4SOIlbjt0Given) model->B4SOIlbjt0 = 0.20e-6; if (!model->B4SOIldif0Given) model->B4SOIldif0 = 1.0; if (!model->B4SOIvabjtGiven) model->B4SOIvabjt = 10.0; if (!model->B4SOIaelyGiven) model->B4SOIaely = 0; if (!model->B4SOIahliGiven) /* v4.0 */ model->B4SOIahli = 0; if (!model->B4SOIahlidGiven) /* v4.0 */ model->B4SOIahlid = model->B4SOIahli; if (!model->B4SOIrbodyGiven) model->B4SOIrbody = 0.0; if (!model->B4SOIrbshGiven) model->B4SOIrbsh = 0.0; if (!model->B4SOIntrecfGiven) model->B4SOIntrecf = 0.0; if (!model->B4SOIntrecrGiven) model->B4SOIntrecr = 0.0; if (!model->B4SOIndifGiven) model->B4SOIndif = -1.0; if (!model->B4SOIdlcbGiven) model->B4SOIdlcb = 0.0; if (!model->B4SOIfbodyGiven) model->B4SOIfbody = 1.0; if (!model->B4SOItcjswgGiven) model->B4SOItcjswg = 0.0; if (!model->B4SOItpbswgGiven) model->B4SOItpbswg = 0.0; if (!model->B4SOItcjswgdGiven) model->B4SOItcjswgd = model->B4SOItcjswg; if (!model->B4SOItpbswgdGiven) model->B4SOItpbswgd = model->B4SOItpbswg; if (!model->B4SOIacdeGiven) model->B4SOIacde = 1.0; if (!model->B4SOImoinGiven) model->B4SOImoin = 15.0; if (!model->B4SOInoffGiven) model->B4SOInoff = 1.0; /* v3.2 */ if (!model->B4SOIdelvtGiven) model->B4SOIdelvt = 0.0; if (!model->B4SOIkb1Given) model->B4SOIkb1 = 1.0; if (!model->B4SOIdlbgGiven) model->B4SOIdlbg = 0.0; /* Added for binning - START */ /* Length dependence */ /* v3.1 */ if (!model->B4SOIlxjGiven) model->B4SOIlxj = 0.0; if (!model->B4SOIlalphaGB1Given) model->B4SOIlalphaGB1 = 0.0; if (!model->B4SOIlalphaGB2Given) model->B4SOIlalphaGB2 = 0.0; if (!model->B4SOIlbetaGB1Given) model->B4SOIlbetaGB1 = 0.0; if (!model->B4SOIlbetaGB2Given) model->B4SOIlbetaGB2 = 0.0; if (!model->B4SOIlaigbcp2Given) model->B4SOIlaigbcp2 = 0.0; if (!model->B4SOIlbigbcp2Given) model->B4SOIlbigbcp2 = 0.0; if (!model->B4SOIlcigbcp2Given) model->B4SOIlcigbcp2 = 0.0; if (!model->B4SOIlndifGiven) model->B4SOIlndif = 0.0; if (!model->B4SOIlntrecfGiven) model->B4SOIlntrecf = 0.0; if (!model->B4SOIlntrecrGiven) model->B4SOIlntrecr = 0.0; if (!model->B4SOIlxbjtGiven) model->B4SOIlxbjt = 0.0; if (!model->B4SOIlxdifGiven) model->B4SOIlxdif = 0.0; if (!model->B4SOIlxrecGiven) model->B4SOIlxrec = 0.0; if (!model->B4SOIlxtunGiven) model->B4SOIlxtun = 0.0; if (!model->B4SOIlxdifdGiven) model->B4SOIlxdifd = model->B4SOIlxdif; if (!model->B4SOIlxrecdGiven) model->B4SOIlxrecd = model->B4SOIlxrec; if (!model->B4SOIlxtundGiven) model->B4SOIlxtund = model->B4SOIlxtun; if (!model->B4SOIlcgdlGiven) model->B4SOIlcgdl = 0.0; if (!model->B4SOIlcgslGiven) model->B4SOIlcgsl = 0.0; if (!model->B4SOIlckappaGiven) model->B4SOIlckappa = 0.0; if (!model->B4SOIluteGiven) model->B4SOIlute = 0.0; if (!model->B4SOIlkt1Given) model->B4SOIlkt1 = 0.0; if (!model->B4SOIlkt2Given) model->B4SOIlkt2 = 0.0; if (!model->B4SOIlkt1lGiven) model->B4SOIlkt1l = 0.0; if (!model->B4SOIlua1Given) model->B4SOIlua1 = 0.0; if (!model->B4SOIlub1Given) model->B4SOIlub1 = 0.0; if (!model->B4SOIluc1Given) model->B4SOIluc1 = 0.0; if (!model->B4SOIlatGiven) model->B4SOIlat = 0.0; if (!model->B4SOIlprtGiven) model->B4SOIlprt = 0.0; /* v3.0 */ if (!model->B4SOIlnigcGiven) model->B4SOIlnigc = 0.0; if (!model->B4SOIlpigcdGiven) model->B4SOIlpigcd = 0.0; if (!model->B4SOIlpoxedgeGiven) model->B4SOIlpoxedge = 0.0; if (!model->B4SOIlaigcGiven) model->B4SOIlaigc = 0.0; if (!model->B4SOIlbigcGiven) model->B4SOIlbigc = 0.0; if (!model->B4SOIlcigcGiven) model->B4SOIlcigc = 0.0; if (!model->B4SOIlaigsdGiven) model->B4SOIlaigsd = 0.0; if (!model->B4SOIlbigsdGiven) model->B4SOIlbigsd = 0.0; if (!model->B4SOIlcigsdGiven) model->B4SOIlcigsd = 0.0; if (!model->B4SOIlnpeakGiven) model->B4SOIlnpeak = 0.0; if (!model->B4SOIlnsubGiven) model->B4SOIlnsub = 0.0; if (!model->B4SOIlngateGiven) model->B4SOIlngate = 0.0; if (!model->B4SOIlnsdGiven) model->B4SOIlnsd = 0.0; if (!model->B4SOIlvth0Given) model->B4SOIlvth0 = 0.0; if (!model->B4SOIlvfbGiven) model->B4SOIlvfb = 0.0; /* v4.1 */ if (!model->B4SOIlk1Given) model->B4SOIlk1 = 0.0; if (!model->B4SOIlk1w1Given) model->B4SOIlk1w1 = 0.0; if (!model->B4SOIlk1w2Given) model->B4SOIlk1w2 = 0.0; if (!model->B4SOIlk2Given) model->B4SOIlk2 = 0.0; if (!model->B4SOIlk3Given) model->B4SOIlk3 = 0.0; if (!model->B4SOIlk3bGiven) model->B4SOIlk3b = 0.0; if (!model->B4SOIlkb1Given) model->B4SOIlkb1 = 0.0; if (!model->B4SOIlw0Given) model->B4SOIlw0 = 0.0; if (!model->B4SOIllpebGiven) model->B4SOIllpeb = 0.0; if (!model->B4SOIldvt0Given) model->B4SOIldvt0 = 0.0; if (!model->B4SOIldvt1Given) model->B4SOIldvt1 = 0.0; if (!model->B4SOIldvt2Given) model->B4SOIldvt2 = 0.0; if (!model->B4SOIldvt0wGiven) model->B4SOIldvt0w = 0.0; if (!model->B4SOIldvt1wGiven) model->B4SOIldvt1w = 0.0; if (!model->B4SOIldvt2wGiven) model->B4SOIldvt2w = 0.0; if (!model->B4SOIlu0Given) model->B4SOIlu0 = 0.0; if (!model->B4SOIluaGiven) model->B4SOIlua = 0.0; if (!model->B4SOIlubGiven) model->B4SOIlub = 0.0; if (!model->B4SOIlucGiven) model->B4SOIluc = 0.0; if (!model->B4SOIlvsatGiven) model->B4SOIlvsat = 0.0; if (!model->B4SOIla0Given) model->B4SOIla0 = 0.0; if (!model->B4SOIlagsGiven) model->B4SOIlags = 0.0; if (!model->B4SOIlb0Given) model->B4SOIlb0 = 0.0; if (!model->B4SOIlb1Given) model->B4SOIlb1 = 0.0; if (!model->B4SOIlketaGiven) model->B4SOIlketa = 0.0; if (!model->B4SOIlketasGiven) model->B4SOIlketas = 0.0; if (!model->B4SOIla1Given) model->B4SOIla1 = 0.0; if (!model->B4SOIla2Given) model->B4SOIla2 = 0.0; if (!model->B4SOIlrdswGiven) model->B4SOIlrdsw = 0.0; if (!model->B4SOIlrswGiven) /* v4.0 */ model->B4SOIlrsw = 0.0; if (!model->B4SOIlrdwGiven) /* v4.0 */ model->B4SOIlrdw = 0.0; if (!model->B4SOIlprwbGiven) model->B4SOIlprwb = 0.0; if (!model->B4SOIlprwgGiven) model->B4SOIlprwg = 0.0; if (!model->B4SOIlwrGiven) model->B4SOIlwr = 0.0; if (!model->B4SOIlnfactorGiven) model->B4SOIlnfactor = 0.0; if (!model->B4SOIldwgGiven) model->B4SOIldwg = 0.0; if (!model->B4SOIldwbGiven) model->B4SOIldwb = 0.0; if (!model->B4SOIlvoffGiven) model->B4SOIlvoff = 0.0; if (!model->B4SOIleta0Given) model->B4SOIleta0 = 0.0; if (!model->B4SOIletabGiven) model->B4SOIletab = 0.0; if (!model->B4SOIldsubGiven) model->B4SOIldsub = 0.0; if (!model->B4SOIlcitGiven) model->B4SOIlcit = 0.0; if (!model->B4SOIlcdscGiven) model->B4SOIlcdsc = 0.0; if (!model->B4SOIlcdscbGiven) model->B4SOIlcdscb = 0.0; if (!model->B4SOIlcdscdGiven) model->B4SOIlcdscd = 0.0; if (!model->B4SOIlpclmGiven) model->B4SOIlpclm = 0.0; if (!model->B4SOIlpdibl1Given) model->B4SOIlpdibl1 = 0.0; if (!model->B4SOIlpdibl2Given) model->B4SOIlpdibl2 = 0.0; if (!model->B4SOIlpdiblbGiven) model->B4SOIlpdiblb = 0.0; if (!model->B4SOIldroutGiven) model->B4SOIldrout = 0.0; if (!model->B4SOIlpvagGiven) model->B4SOIlpvag = 0.0; if (!model->B4SOIldeltaGiven) model->B4SOIldelta = 0.0; if (!model->B4SOIlalpha0Given) model->B4SOIlalpha0 = 0.0; if (!model->B4SOIlfbjtiiGiven) model->B4SOIlfbjtii = 0.0; /*4.1 Iii model*/ if (!model->B4SOIlebjtiiGiven) model->B4SOIlebjtii = 0.0; if (!model->B4SOIlcbjtiiGiven) model->B4SOIlcbjtii = 0.0; if (!model->B4SOIlvbciGiven) model->B4SOIlvbci = 0.0; if (!model->B4SOIlabjtiiGiven) model->B4SOIlabjtii = 0.0; if (!model->B4SOIlmbjtiiGiven) model->B4SOIlmbjtii = 0.0; if (!model->B4SOIlbeta0Given) model->B4SOIlbeta0 = 0.0; if (!model->B4SOIlbeta1Given) model->B4SOIlbeta1 = 0.0; if (!model->B4SOIlbeta2Given) model->B4SOIlbeta2 = 0.0; if (!model->B4SOIlvdsatii0Given) model->B4SOIlvdsatii0 = 0.0; if (!model->B4SOIlliiGiven) model->B4SOIllii = 0.0; if (!model->B4SOIlesatiiGiven) model->B4SOIlesatii = 0.0; if (!model->B4SOIlsii0Given) model->B4SOIlsii0 = 0.0; if (!model->B4SOIlsii1Given) model->B4SOIlsii1 = 0.0; if (!model->B4SOIlsii2Given) model->B4SOIlsii2 = 0.0; if (!model->B4SOIlsiidGiven) model->B4SOIlsiid = 0.0; if (!model->B4SOIlagidlGiven) model->B4SOIlagidl = 0.0; if (!model->B4SOIlbgidlGiven) model->B4SOIlbgidl = 0.0; if (!model->B4SOIlcgidlGiven) model->B4SOIlcgidl = 0.0; if (!model->B4SOIlrgidlGiven) model->B4SOIlrgidl = 0.0; if (!model->B4SOIlkgidlGiven) model->B4SOIlkgidl = 0.0; if (!model->B4SOIlfgidlGiven) model->B4SOIlfgidl = 0.0; if (!model->B4SOIlagislGiven) model->B4SOIlagisl = 0.0; if (!model->B4SOIlbgislGiven) model->B4SOIlbgisl = 0.0; if (!model->B4SOIlcgislGiven) model->B4SOIlcgisl = 0.0; if (!model->B4SOIlrgislGiven) model->B4SOIlrgisl = 0.0; if (!model->B4SOIlkgislGiven) model->B4SOIlkgisl = 0.0; if (!model->B4SOIlfgislGiven) model->B4SOIlfgisl = 0.0; if (!model->B4SOIlntunGiven) /* v4.0 */ model->B4SOIlntun = 0.0; if (!model->B4SOIlntundGiven) /* v4.0 */ model->B4SOIlntund = model->B4SOIlntun; if (!model->B4SOIlndiodeGiven) /* v4.0 */ model->B4SOIlndiode = 0.0; if (!model->B4SOIlndiodedGiven) /* v4.0 */ model->B4SOIlndioded = model->B4SOIlndiode; if (!model->B4SOIlnrecf0Given) /* v4.0 */ model->B4SOIlnrecf0 = 0.0; if (!model->B4SOIlnrecf0dGiven) /* v4.0 */ model->B4SOIlnrecf0d = model->B4SOIlnrecf0; if (!model->B4SOIlnrecr0Given) /* v4.0 */ model->B4SOIlnrecr0 = 0.0; if (!model->B4SOIlnrecr0dGiven) /* v4.0 */ model->B4SOIlnrecr0d = model->B4SOIlnrecr0; if (!model->B4SOIlisbjtGiven) model->B4SOIlisbjt = 0.0; if (!model->B4SOIlidbjtGiven) model->B4SOIlidbjt = model->B4SOIlisbjt; if (!model->B4SOIlisdifGiven) model->B4SOIlisdif = 0.0; if (!model->B4SOIliddifGiven) model->B4SOIliddif = model->B4SOIlisdif; /* v4.0 */ if (!model->B4SOIlisrecGiven) model->B4SOIlisrec = 0.0; if (!model->B4SOIlidrecGiven) model->B4SOIlidrec = model->B4SOIlisrec; if (!model->B4SOIlistunGiven) model->B4SOIlistun = 0.0; if (!model->B4SOIlidtunGiven) model->B4SOIlidtun = model->B4SOIlistun; if (!model->B4SOIlvrec0Given) /* v4.0 */ model->B4SOIlvrec0 = 0; if (!model->B4SOIlvrec0dGiven) /* v4.0 */ model->B4SOIlvrec0d = model->B4SOIlvrec0; if (!model->B4SOIlvtun0Given) /* v4.0 */ model->B4SOIlvtun0 = 0; if (!model->B4SOIlvtun0dGiven) /* v4.0 */ model->B4SOIlvtun0d = model->B4SOIlvtun0; if (!model->B4SOIlnbjtGiven) model->B4SOIlnbjt = 0.0; if (!model->B4SOIllbjt0Given) model->B4SOIllbjt0 = 0.0; if (!model->B4SOIlvabjtGiven) model->B4SOIlvabjt = 0.0; if (!model->B4SOIlaelyGiven) model->B4SOIlaely = 0.0; if (!model->B4SOIlahliGiven) /* v4.0 */ model->B4SOIlahli = 0.0; if (!model->B4SOIlahlidGiven) /* v4.0 */ model->B4SOIlahlid = model->B4SOIlahli; /* CV Model */ if (!model->B4SOIlvsdfbGiven) model->B4SOIlvsdfb = 0.0; if (!model->B4SOIlvsdthGiven) model->B4SOIlvsdth = 0.0; if (!model->B4SOIldelvtGiven) model->B4SOIldelvt = 0.0; if (!model->B4SOIlacdeGiven) model->B4SOIlacde = 0.0; if (!model->B4SOIlmoinGiven) model->B4SOIlmoin = 0.0; if (!model->B4SOIlnoffGiven) model->B4SOIlnoff = 0.0; /* v3.2 */ /* v3.1 added for RF */ if (!model->B4SOIlxrcrg1Given) model->B4SOIlxrcrg1 =0.0; if (!model->B4SOIlxrcrg2Given) model->B4SOIlxrcrg2 =0.0; /* v3.1 added for RF end */ /* Width dependence */ /* v3.1 */ if (!model->B4SOIwxjGiven) model->B4SOIwxj = 0.0; if (!model->B4SOIwalphaGB1Given) model->B4SOIwalphaGB1 = 0.0; if (!model->B4SOIwalphaGB2Given) model->B4SOIwalphaGB2 = 0.0; if (!model->B4SOIwbetaGB1Given) model->B4SOIwbetaGB1 = 0.0; if (!model->B4SOIwbetaGB2Given) model->B4SOIwbetaGB2 = 0.0; if (!model->B4SOIwaigbcp2Given) model->B4SOIwaigbcp2 = 0.0; if (!model->B4SOIwbigbcp2Given) model->B4SOIwbigbcp2 = 0.0; if (!model->B4SOIwcigbcp2Given) model->B4SOIwcigbcp2 = 0.0; if (!model->B4SOIwndifGiven) model->B4SOIwndif = 0.0; if (!model->B4SOIwntrecfGiven) model->B4SOIwntrecf = 0.0; if (!model->B4SOIwntrecrGiven) model->B4SOIwntrecr = 0.0; if (!model->B4SOIwxbjtGiven) model->B4SOIwxbjt = 0.0; if (!model->B4SOIwxdifGiven) model->B4SOIwxdif = 0.0; if (!model->B4SOIwxrecGiven) model->B4SOIwxrec = 0.0; if (!model->B4SOIwxtunGiven) model->B4SOIwxtun = 0.0; if (!model->B4SOIwxdifdGiven) model->B4SOIwxdifd = model->B4SOIwxdif; if (!model->B4SOIwxrecdGiven) model->B4SOIwxrecd = model->B4SOIwxrec; if (!model->B4SOIwxtundGiven) model->B4SOIwxtund = model->B4SOIwxtun; if (!model->B4SOIwcgdlGiven) model->B4SOIwcgdl = 0.0; if (!model->B4SOIwcgslGiven) model->B4SOIwcgsl = 0.0; if (!model->B4SOIwckappaGiven) model->B4SOIwckappa = 0.0; if (!model->B4SOIwuteGiven) model->B4SOIwute = 0.0; if (!model->B4SOIwkt1Given) model->B4SOIwkt1 = 0.0; if (!model->B4SOIwkt2Given) model->B4SOIwkt2 = 0.0; if (!model->B4SOIwkt1lGiven) model->B4SOIwkt1l = 0.0; if (!model->B4SOIwua1Given) model->B4SOIwua1 = 0.0; if (!model->B4SOIwub1Given) model->B4SOIwub1 = 0.0; if (!model->B4SOIwuc1Given) model->B4SOIwuc1 = 0.0; if (!model->B4SOIwatGiven) model->B4SOIwat = 0.0; if (!model->B4SOIwprtGiven) model->B4SOIwprt = 0.0; /* v3.0 */ if (!model->B4SOIwnigcGiven) model->B4SOIwnigc = 0.0; if (!model->B4SOIwpigcdGiven) model->B4SOIwpigcd = 0.0; if (!model->B4SOIwpoxedgeGiven) model->B4SOIwpoxedge = 0.0; if (!model->B4SOIwaigcGiven) model->B4SOIwaigc = 0.0; if (!model->B4SOIwbigcGiven) model->B4SOIwbigc = 0.0; if (!model->B4SOIwcigcGiven) model->B4SOIwcigc = 0.0; if (!model->B4SOIwaigsdGiven) model->B4SOIwaigsd = 0.0; if (!model->B4SOIwbigsdGiven) model->B4SOIwbigsd = 0.0; if (!model->B4SOIwcigsdGiven) model->B4SOIwcigsd = 0.0; if (!model->B4SOIwnpeakGiven) model->B4SOIwnpeak = 0.0; if (!model->B4SOIwnsubGiven) model->B4SOIwnsub = 0.0; if (!model->B4SOIwngateGiven) model->B4SOIwngate = 0.0; if (!model->B4SOIwnsdGiven) model->B4SOIwnsd = 0.0; if (!model->B4SOIwvth0Given) model->B4SOIwvth0 = 0.0; if (!model->B4SOIwvfbGiven) model->B4SOIwvfb = 0.0; /* v4.1 */ if (!model->B4SOIwk1Given) model->B4SOIwk1 = 0.0; if (!model->B4SOIwk1w1Given) model->B4SOIwk1w1 = 0.0; if (!model->B4SOIwk1w2Given) model->B4SOIwk1w2 = 0.0; if (!model->B4SOIwk2Given) model->B4SOIwk2 = 0.0; if (!model->B4SOIwk3Given) model->B4SOIwk3 = 0.0; if (!model->B4SOIwk3bGiven) model->B4SOIwk3b = 0.0; if (!model->B4SOIwkb1Given) model->B4SOIwkb1 = 0.0; if (!model->B4SOIww0Given) model->B4SOIww0 = 0.0; if (!model->B4SOIwlpebGiven) model->B4SOIwlpeb = 0.0; if (!model->B4SOIwdvt0Given) model->B4SOIwdvt0 = 0.0; if (!model->B4SOIwdvt1Given) model->B4SOIwdvt1 = 0.0; if (!model->B4SOIwdvt2Given) model->B4SOIwdvt2 = 0.0; if (!model->B4SOIwdvt0wGiven) model->B4SOIwdvt0w = 0.0; if (!model->B4SOIwdvt1wGiven) model->B4SOIwdvt1w = 0.0; if (!model->B4SOIwdvt2wGiven) model->B4SOIwdvt2w = 0.0; if (!model->B4SOIwu0Given) model->B4SOIwu0 = 0.0; if (!model->B4SOIwuaGiven) model->B4SOIwua = 0.0; if (!model->B4SOIwubGiven) model->B4SOIwub = 0.0; if (!model->B4SOIwucGiven) model->B4SOIwuc = 0.0; if (!model->B4SOIwvsatGiven) model->B4SOIwvsat = 0.0; if (!model->B4SOIwa0Given) model->B4SOIwa0 = 0.0; if (!model->B4SOIwagsGiven) model->B4SOIwags = 0.0; if (!model->B4SOIwb0Given) model->B4SOIwb0 = 0.0; if (!model->B4SOIwb1Given) model->B4SOIwb1 = 0.0; if (!model->B4SOIwketaGiven) model->B4SOIwketa = 0.0; if (!model->B4SOIwketasGiven) model->B4SOIwketas = 0.0; if (!model->B4SOIwa1Given) model->B4SOIwa1 = 0.0; if (!model->B4SOIwa2Given) model->B4SOIwa2 = 0.0; if (!model->B4SOIwrdswGiven) model->B4SOIwrdsw = 0.0; if (!model->B4SOIwrswGiven) /* v4.0 */ model->B4SOIwrsw = 0.0; if (!model->B4SOIwrdwGiven) /* v4.0 */ model->B4SOIwrdw = 0.0; if (!model->B4SOIwprwbGiven) model->B4SOIwprwb = 0.0; if (!model->B4SOIwprwgGiven) model->B4SOIwprwg = 0.0; if (!model->B4SOIwwrGiven) model->B4SOIwwr = 0.0; if (!model->B4SOIwnfactorGiven) model->B4SOIwnfactor = 0.0; if (!model->B4SOIwdwgGiven) model->B4SOIwdwg = 0.0; if (!model->B4SOIwdwbGiven) model->B4SOIwdwb = 0.0; if (!model->B4SOIwvoffGiven) model->B4SOIwvoff = 0.0; if (!model->B4SOIweta0Given) model->B4SOIweta0 = 0.0; if (!model->B4SOIwetabGiven) model->B4SOIwetab = 0.0; if (!model->B4SOIwdsubGiven) model->B4SOIwdsub = 0.0; if (!model->B4SOIwcitGiven) model->B4SOIwcit = 0.0; if (!model->B4SOIwcdscGiven) model->B4SOIwcdsc = 0.0; if (!model->B4SOIwcdscbGiven) model->B4SOIwcdscb = 0.0; if (!model->B4SOIwcdscdGiven) model->B4SOIwcdscd = 0.0; if (!model->B4SOIwpclmGiven) model->B4SOIwpclm = 0.0; if (!model->B4SOIwpdibl1Given) model->B4SOIwpdibl1 = 0.0; if (!model->B4SOIwpdibl2Given) model->B4SOIwpdibl2 = 0.0; if (!model->B4SOIwpdiblbGiven) model->B4SOIwpdiblb = 0.0; if (!model->B4SOIwdroutGiven) model->B4SOIwdrout = 0.0; if (!model->B4SOIwpvagGiven) model->B4SOIwpvag = 0.0; if (!model->B4SOIwdeltaGiven) model->B4SOIwdelta = 0.0; if (!model->B4SOIwalpha0Given) model->B4SOIwalpha0 = 0.0; if (!model->B4SOIwfbjtiiGiven) model->B4SOIwfbjtii = 0.0; /*4.1 Iii model*/ if (!model->B4SOIwebjtiiGiven) model->B4SOIwebjtii = 0.0; if (!model->B4SOIwcbjtiiGiven) model->B4SOIwcbjtii = 0.0; if (!model->B4SOIwvbciGiven) model->B4SOIwvbci = 0.0; if (!model->B4SOIwabjtiiGiven) model->B4SOIwabjtii = 0.0; if (!model->B4SOIwmbjtiiGiven) model->B4SOIwmbjtii = 0.0; if (!model->B4SOIwbeta0Given) model->B4SOIwbeta0 = 0.0; if (!model->B4SOIwbeta1Given) model->B4SOIwbeta1 = 0.0; if (!model->B4SOIwbeta2Given) model->B4SOIwbeta2 = 0.0; if (!model->B4SOIwvdsatii0Given) model->B4SOIwvdsatii0 = 0.0; if (!model->B4SOIwliiGiven) model->B4SOIwlii = 0.0; if (!model->B4SOIwesatiiGiven) model->B4SOIwesatii = 0.0; if (!model->B4SOIwsii0Given) model->B4SOIwsii0 = 0.0; if (!model->B4SOIwsii1Given) model->B4SOIwsii1 = 0.0; if (!model->B4SOIwsii2Given) model->B4SOIwsii2 = 0.0; if (!model->B4SOIwsiidGiven) model->B4SOIwsiid = 0.0; if (!model->B4SOIwagidlGiven) model->B4SOIwagidl = 0.0; if (!model->B4SOIwbgidlGiven) model->B4SOIwbgidl = 0.0; if (!model->B4SOIwcgidlGiven) model->B4SOIwcgidl = 0.0; if (!model->B4SOIwrgidlGiven) model->B4SOIwrgidl = 0.0; if (!model->B4SOIwkgidlGiven) model->B4SOIwkgidl = 0.0; if (!model->B4SOIwfgidlGiven) model->B4SOIwfgidl = 0.0; if (!model->B4SOIwagislGiven) model->B4SOIwagisl = 0.0; if (!model->B4SOIwbgislGiven) model->B4SOIwbgisl = 0.0; if (!model->B4SOIwcgislGiven) model->B4SOIwcgisl = 0.0; if (!model->B4SOIwrgislGiven) model->B4SOIwrgisl = 0.0; if (!model->B4SOIwkgislGiven) model->B4SOIwkgisl = 0.0; if (!model->B4SOIwfgislGiven) model->B4SOIwfgisl = 0.0; if (!model->B4SOIwntunGiven) /* v4.0 */ model->B4SOIwntun = 0.0; if (!model->B4SOIwntundGiven) /* v4.0 */ model->B4SOIwntund = model->B4SOIwntun; if (!model->B4SOIwndiodeGiven) /* v4.0 */ model->B4SOIwndiode = 0.0; if (!model->B4SOIwndiodedGiven) /* v4.0 */ model->B4SOIwndioded = model->B4SOIwndiode; if (!model->B4SOIwnrecf0Given) /* v4.0 */ model->B4SOIwnrecf0 = 0.0; if (!model->B4SOIwnrecf0dGiven) /* v4.0 */ model->B4SOIwnrecf0d = model->B4SOIwnrecf0; if (!model->B4SOIwnrecr0Given) /* v4.0 */ model->B4SOIwnrecr0 = 0.0; if (!model->B4SOIwnrecr0dGiven) /* v4.0 */ model->B4SOIwnrecr0d = model->B4SOIwnrecr0; if (!model->B4SOIwisbjtGiven) model->B4SOIwisbjt = 0.0; if (!model->B4SOIwidbjtGiven) model->B4SOIwidbjt = model->B4SOIwisbjt; if (!model->B4SOIwisdifGiven) model->B4SOIwisdif = 0.0; if (!model->B4SOIwiddifGiven) model->B4SOIwiddif = model->B4SOIwisdif; /* v4.0 */ if (!model->B4SOIwisrecGiven) model->B4SOIwisrec = 0.0; if (!model->B4SOIwidrecGiven) model->B4SOIwidrec = model->B4SOIwisrec; if (!model->B4SOIwistunGiven) model->B4SOIwistun = 0.0; if (!model->B4SOIwidtunGiven) model->B4SOIwidtun = model->B4SOIwistun; if (!model->B4SOIwvrec0Given) /* v4.0 */ model->B4SOIwvrec0 = 0; if (!model->B4SOIwvrec0dGiven) /* v4.0 */ model->B4SOIwvrec0d = model->B4SOIwvrec0; if (!model->B4SOIwvtun0Given) /* v4.0 */ model->B4SOIwvtun0 = 0; if (!model->B4SOIwvtun0dGiven) /* v4.0 */ model->B4SOIwvtun0d = model->B4SOIwvtun0; if (!model->B4SOIwnbjtGiven) model->B4SOIwnbjt = 0.0; if (!model->B4SOIwlbjt0Given) model->B4SOIwlbjt0 = 0.0; if (!model->B4SOIwvabjtGiven) model->B4SOIwvabjt = 0.0; if (!model->B4SOIwaelyGiven) model->B4SOIwaely = 0.0; if (!model->B4SOIwahliGiven) /* v4.0 */ model->B4SOIwahli = 0.0; if (!model->B4SOIwahlidGiven) /* v4.0 */ model->B4SOIwahlid = model->B4SOIwahli; /* v3.1 added for RF */ if (!model->B4SOIwxrcrg1Given) model->B4SOIwxrcrg1 =0.0; if (!model->B4SOIwxrcrg2Given) model->B4SOIwxrcrg2 =0.0; /* v3.1 added for RF end */ /* CV Model */ if (!model->B4SOIwvsdfbGiven) model->B4SOIwvsdfb = 0.0; if (!model->B4SOIwvsdthGiven) model->B4SOIwvsdth = 0.0; if (!model->B4SOIwdelvtGiven) model->B4SOIwdelvt = 0.0; if (!model->B4SOIwacdeGiven) model->B4SOIwacde = 0.0; if (!model->B4SOIwmoinGiven) model->B4SOIwmoin = 0.0; if (!model->B4SOIwnoffGiven) model->B4SOIwnoff = 0.0; /* v3.2 */ /* Cross-term dependence */ /* v3.1 */ if (!model->B4SOIpxjGiven) model->B4SOIpxj = 0.0; if (!model->B4SOIpalphaGB1Given) model->B4SOIpalphaGB1 = 0.0; if (!model->B4SOIpalphaGB2Given) model->B4SOIpalphaGB2 = 0.0; if (!model->B4SOIpbetaGB1Given) model->B4SOIpbetaGB1 = 0.0; if (!model->B4SOIpbetaGB2Given) model->B4SOIpbetaGB2 = 0.0; if (!model->B4SOIpaigbcp2Given) model->B4SOIpaigbcp2 = 0.0; if (!model->B4SOIpbigbcp2Given) model->B4SOIpbigbcp2 = 0.0; if (!model->B4SOIpcigbcp2Given) model->B4SOIpcigbcp2 = 0.0; if (!model->B4SOIpndifGiven) model->B4SOIpndif = 0.0; if (!model->B4SOIpntrecfGiven) model->B4SOIpntrecf = 0.0; if (!model->B4SOIpntrecrGiven) model->B4SOIpntrecr = 0.0; if (!model->B4SOIpxbjtGiven) model->B4SOIpxbjt = 0.0; if (!model->B4SOIpxdifGiven) model->B4SOIpxdif = 0.0; if (!model->B4SOIpxrecGiven) model->B4SOIpxrec = 0.0; if (!model->B4SOIpxtunGiven) model->B4SOIpxtun = 0.0; if (!model->B4SOIpxdifdGiven) model->B4SOIpxdifd = model->B4SOIpxdif; if (!model->B4SOIpxrecdGiven) model->B4SOIpxrecd = model->B4SOIpxrec; if (!model->B4SOIpxtundGiven) model->B4SOIpxtund = model->B4SOIpxtun; if (!model->B4SOIpcgdlGiven) model->B4SOIpcgdl = 0.0; if (!model->B4SOIpcgslGiven) model->B4SOIpcgsl = 0.0; if (!model->B4SOIpckappaGiven) model->B4SOIpckappa = 0.0; if (!model->B4SOIputeGiven) model->B4SOIpute = 0.0; if (!model->B4SOIpkt1Given) model->B4SOIpkt1 = 0.0; if (!model->B4SOIpkt2Given) model->B4SOIpkt2 = 0.0; if (!model->B4SOIpkt1lGiven) model->B4SOIpkt1l = 0.0; if (!model->B4SOIpua1Given) model->B4SOIpua1 = 0.0; if (!model->B4SOIpub1Given) model->B4SOIpub1 = 0.0; if (!model->B4SOIpuc1Given) model->B4SOIpuc1 = 0.0; if (!model->B4SOIpatGiven) model->B4SOIpat = 0.0; if (!model->B4SOIpprtGiven) model->B4SOIpprt = 0.0; /* v3.0 */ if (!model->B4SOIpnigcGiven) model->B4SOIpnigc = 0.0; if (!model->B4SOIppigcdGiven) model->B4SOIppigcd = 0.0; if (!model->B4SOIppoxedgeGiven) model->B4SOIppoxedge = 0.0; if (!model->B4SOIpaigcGiven) model->B4SOIpaigc = 0.0; if (!model->B4SOIpbigcGiven) model->B4SOIpbigc = 0.0; if (!model->B4SOIpcigcGiven) model->B4SOIpcigc = 0.0; if (!model->B4SOIpaigsdGiven) model->B4SOIpaigsd = 0.0; if (!model->B4SOIpbigsdGiven) model->B4SOIpbigsd = 0.0; if (!model->B4SOIpcigsdGiven) model->B4SOIpcigsd = 0.0; if (!model->B4SOIpnpeakGiven) model->B4SOIpnpeak = 0.0; if (!model->B4SOIpnsubGiven) model->B4SOIpnsub = 0.0; if (!model->B4SOIpngateGiven) model->B4SOIpngate = 0.0; if (!model->B4SOIpnsdGiven) model->B4SOIpnsd = 0.0; if (!model->B4SOIpvth0Given) model->B4SOIpvth0 = 0.0; if (!model->B4SOIpvfbGiven) model->B4SOIpvfb = 0.0; /* v4.1 */ if (!model->B4SOIpk1Given) model->B4SOIpk1 = 0.0; if (!model->B4SOIpk1w1Given) model->B4SOIpk1w1 = 0.0; if (!model->B4SOIpk1w2Given) model->B4SOIpk1w2 = 0.0; if (!model->B4SOIpk2Given) model->B4SOIpk2 = 0.0; if (!model->B4SOIpk3Given) model->B4SOIpk3 = 0.0; if (!model->B4SOIpk3bGiven) model->B4SOIpk3b = 0.0; if (!model->B4SOIpkb1Given) model->B4SOIpkb1 = 0.0; if (!model->B4SOIpw0Given) model->B4SOIpw0 = 0.0; if (!model->B4SOIplpebGiven) model->B4SOIplpeb = 0.0; if (!model->B4SOIpdvt0Given) model->B4SOIpdvt0 = 0.0; if (!model->B4SOIpdvt1Given) model->B4SOIpdvt1 = 0.0; if (!model->B4SOIpdvt2Given) model->B4SOIpdvt2 = 0.0; if (!model->B4SOIpdvt0wGiven) model->B4SOIpdvt0w = 0.0; if (!model->B4SOIpdvt1wGiven) model->B4SOIpdvt1w = 0.0; if (!model->B4SOIpdvt2wGiven) model->B4SOIpdvt2w = 0.0; if (!model->B4SOIpu0Given) model->B4SOIpu0 = 0.0; if (!model->B4SOIpuaGiven) model->B4SOIpua = 0.0; if (!model->B4SOIpubGiven) model->B4SOIpub = 0.0; if (!model->B4SOIpucGiven) model->B4SOIpuc = 0.0; if (!model->B4SOIpvsatGiven) model->B4SOIpvsat = 0.0; if (!model->B4SOIpa0Given) model->B4SOIpa0 = 0.0; if (!model->B4SOIpagsGiven) model->B4SOIpags = 0.0; if (!model->B4SOIpb0Given) model->B4SOIpb0 = 0.0; if (!model->B4SOIpb1Given) model->B4SOIpb1 = 0.0; if (!model->B4SOIpketaGiven) model->B4SOIpketa = 0.0; if (!model->B4SOIpketasGiven) model->B4SOIpketas = 0.0; if (!model->B4SOIpa1Given) model->B4SOIpa1 = 0.0; if (!model->B4SOIpa2Given) model->B4SOIpa2 = 0.0; if (!model->B4SOIprdswGiven) model->B4SOIprdsw = 0.0; if (!model->B4SOIprswGiven) /* v4.0 */ model->B4SOIprsw = 0.0; if (!model->B4SOIprdwGiven) /* v4.0 */ model->B4SOIprdw = 0.0; if (!model->B4SOIpprwbGiven) model->B4SOIpprwb = 0.0; if (!model->B4SOIpprwgGiven) model->B4SOIpprwg = 0.0; if (!model->B4SOIpwrGiven) model->B4SOIpwr = 0.0; if (!model->B4SOIpnfactorGiven) model->B4SOIpnfactor = 0.0; if (!model->B4SOIpdwgGiven) model->B4SOIpdwg = 0.0; if (!model->B4SOIpdwbGiven) model->B4SOIpdwb = 0.0; if (!model->B4SOIpvoffGiven) model->B4SOIpvoff = 0.0; if (!model->B4SOIpeta0Given) model->B4SOIpeta0 = 0.0; if (!model->B4SOIpetabGiven) model->B4SOIpetab = 0.0; if (!model->B4SOIpdsubGiven) model->B4SOIpdsub = 0.0; if (!model->B4SOIpcitGiven) model->B4SOIpcit = 0.0; if (!model->B4SOIpcdscGiven) model->B4SOIpcdsc = 0.0; if (!model->B4SOIpcdscbGiven) model->B4SOIpcdscb = 0.0; if (!model->B4SOIpcdscdGiven) model->B4SOIpcdscd = 0.0; if (!model->B4SOIppclmGiven) model->B4SOIppclm = 0.0; if (!model->B4SOIppdibl1Given) model->B4SOIppdibl1 = 0.0; if (!model->B4SOIppdibl2Given) model->B4SOIppdibl2 = 0.0; if (!model->B4SOIppdiblbGiven) model->B4SOIppdiblb = 0.0; if (!model->B4SOIpdroutGiven) model->B4SOIpdrout = 0.0; if (!model->B4SOIppvagGiven) model->B4SOIppvag = 0.0; if (!model->B4SOIpdeltaGiven) model->B4SOIpdelta = 0.0; if (!model->B4SOIpalpha0Given) model->B4SOIpalpha0 = 0.0; if (!model->B4SOIpfbjtiiGiven) model->B4SOIpfbjtii = 0.0; /*4.1 Iii model*/ if (!model->B4SOIpebjtiiGiven) model->B4SOIpebjtii = 0.0; if (!model->B4SOIpcbjtiiGiven) model->B4SOIpcbjtii = 0.0; if (!model->B4SOIpvbciGiven) model->B4SOIpvbci = 0.0; if (!model->B4SOIpabjtiiGiven) model->B4SOIpabjtii = 0.0; if (!model->B4SOIpmbjtiiGiven) model->B4SOIpmbjtii = 0.0; if (!model->B4SOIpbeta0Given) model->B4SOIpbeta0 = 0.0; if (!model->B4SOIpbeta1Given) model->B4SOIpbeta1 = 0.0; if (!model->B4SOIpbeta2Given) model->B4SOIpbeta2 = 0.0; if (!model->B4SOIpvdsatii0Given) model->B4SOIpvdsatii0 = 0.0; if (!model->B4SOIpliiGiven) model->B4SOIplii = 0.0; if (!model->B4SOIpesatiiGiven) model->B4SOIpesatii = 0.0; if (!model->B4SOIpsii0Given) model->B4SOIpsii0 = 0.0; if (!model->B4SOIpsii1Given) model->B4SOIpsii1 = 0.0; if (!model->B4SOIpsii2Given) model->B4SOIpsii2 = 0.0; if (!model->B4SOIpsiidGiven) model->B4SOIpsiid = 0.0; if (!model->B4SOIpagidlGiven) model->B4SOIpagidl = 0.0; if (!model->B4SOIpbgidlGiven) model->B4SOIpbgidl = 0.0; if (!model->B4SOIpcgidlGiven) model->B4SOIpcgidl = 0.0; if (!model->B4SOIprgidlGiven) model->B4SOIprgidl = 0.0; if (!model->B4SOIpkgidlGiven) model->B4SOIpkgidl = 0.0; if (!model->B4SOIpfgidlGiven) model->B4SOIpfgidl = 0.0; if (!model->B4SOIpagislGiven) model->B4SOIpagisl = 0.0; if (!model->B4SOIpbgislGiven) model->B4SOIpbgisl = 0.0; if (!model->B4SOIpcgislGiven) model->B4SOIpcgisl = 0.0; if (!model->B4SOIprgislGiven) model->B4SOIprgisl = 0.0; if (!model->B4SOIpkgislGiven) model->B4SOIpkgisl = 0.0; if (!model->B4SOIpfgislGiven) model->B4SOIpfgisl = 0.0; if (!model->B4SOIpntunGiven) /* v4.0 */ model->B4SOIpntun = 0.0; if (!model->B4SOIpntundGiven) /* v4.0 */ model->B4SOIpntund = model->B4SOIpntun; if (!model->B4SOIpndiodeGiven) /* v4.0 */ model->B4SOIpndiode = 0.0; if (!model->B4SOIpndiodedGiven) /* v4.0 */ model->B4SOIpndioded = model->B4SOIpndiode; if (!model->B4SOIpnrecf0Given) /* v4.0 */ model->B4SOIpnrecf0 = 0.0; if (!model->B4SOIpnrecf0dGiven) /* v4.0 */ model->B4SOIpnrecf0d = model->B4SOIpnrecf0; if (!model->B4SOIpnrecr0Given) /* v4.0 */ model->B4SOIpnrecr0 = 0.0; if (!model->B4SOIpnrecr0dGiven) /* v4.0 */ model->B4SOIpnrecr0d = model->B4SOIpnrecr0; if (!model->B4SOIpisbjtGiven) model->B4SOIpisbjt = 0.0; if (!model->B4SOIpidbjtGiven) model->B4SOIpidbjt = model->B4SOIpisbjt; if (!model->B4SOIpisdifGiven) model->B4SOIpisdif = 0.0; if (!model->B4SOIpiddifGiven) model->B4SOIpiddif = model->B4SOIpisdif; /* v4.0 */ if (!model->B4SOIpisrecGiven) model->B4SOIpisrec = 0.0; if (!model->B4SOIpidrecGiven) model->B4SOIpidrec = model->B4SOIpisrec; if (!model->B4SOIpistunGiven) model->B4SOIpistun = 0.0; if (!model->B4SOIpidtunGiven) model->B4SOIpidtun = model->B4SOIpistun; if (!model->B4SOIpvrec0Given) /* v4.0 */ model->B4SOIpvrec0 = 0.0; if (!model->B4SOIpvrec0dGiven) /* v4.0 */ model->B4SOIpvrec0d = model->B4SOIpvrec0; if (!model->B4SOIpvtun0Given) /* v4.0 */ model->B4SOIpvtun0 = 0.0; if (!model->B4SOIpvtun0dGiven) /* v4.0 */ model->B4SOIpvtun0d = model->B4SOIpvtun0; if (!model->B4SOIpnbjtGiven) model->B4SOIpnbjt = 0.0; if (!model->B4SOIplbjt0Given) model->B4SOIplbjt0 = 0.0; if (!model->B4SOIpvabjtGiven) model->B4SOIpvabjt = 0.0; if (!model->B4SOIpaelyGiven) model->B4SOIpaely = 0.0; if (!model->B4SOIpahliGiven) /* v4.0 */ model->B4SOIpahli = 0.0; if (!model->B4SOIpahlidGiven) /* v4.0 */ model->B4SOIpahlid = model->B4SOIpahli; /* v3.1 for RF */ if (!model->B4SOIpxrcrg1Given) model->B4SOIpxrcrg1 =0.0; if (!model->B4SOIpxrcrg2Given) model->B4SOIpxrcrg2 =0.0; /* v3.1 for RF end */ /* CV Model */ if (!model->B4SOIpvsdfbGiven) model->B4SOIpvsdfb = 0.0; if (!model->B4SOIpvsdthGiven) model->B4SOIpvsdth = 0.0; if (!model->B4SOIpdelvtGiven) model->B4SOIpdelvt = 0.0; if (!model->B4SOIpacdeGiven) model->B4SOIpacde = 0.0; if (!model->B4SOIpmoinGiven) model->B4SOIpmoin = 0.0; if (!model->B4SOIpnoffGiven) model->B4SOIpnoff = 0.0; /* v3.2 */ /* Added for binning - END */ if (!model->B4SOIcfGiven) model->B4SOIcf = 2.0 * EPSOX / PI * log(1.0 + 0.4e-6 / model->B4SOItox); if (!model->B4SOIcgdoGiven) { if (model->B4SOIdlcGiven && (model->B4SOIdlc > 0.0)) { model->B4SOIcgdo = model->B4SOIdlc * model->B4SOIcox - model->B4SOIcgdl ; } else model->B4SOIcgdo = 0.6 * model->B4SOIxj * model->B4SOIcox; } if (!model->B4SOIcgsoGiven) { if (model->B4SOIdlcGiven && (model->B4SOIdlc > 0.0)) { model->B4SOIcgso = model->B4SOIdlc * model->B4SOIcox - model->B4SOIcgsl ; } else model->B4SOIcgso = 0.6 * model->B4SOIxj * model->B4SOIcox; } if (!model->B4SOIcgeoGiven) { model->B4SOIcgeo = 0.0; } if (!model->B4SOIxpartGiven) model->B4SOIxpart = 0.0; if (!model->B4SOIsheetResistanceGiven) model->B4SOIsheetResistance = 0.0; if (!model->B4SOIcsdeswGiven) model->B4SOIcsdesw = 0.0; if (!model->B4SOIunitLengthGateSidewallJctCapSGiven) /* v4.0 */ model->B4SOIunitLengthGateSidewallJctCapS = 1e-10; if (!model->B4SOIunitLengthGateSidewallJctCapDGiven) /* v4.0 */ model->B4SOIunitLengthGateSidewallJctCapD = model->B4SOIunitLengthGateSidewallJctCapS; if (!model->B4SOIGatesidewallJctSPotentialGiven) /* v4.0 */ model->B4SOIGatesidewallJctSPotential = 0.7; if (!model->B4SOIGatesidewallJctDPotentialGiven) /* v4.0 */ model->B4SOIGatesidewallJctDPotential = model->B4SOIGatesidewallJctSPotential; if (!model->B4SOIbodyJctGateSideSGradingCoeffGiven) /* v4.0 */ model->B4SOIbodyJctGateSideSGradingCoeff = 0.5; if (!model->B4SOIbodyJctGateSideDGradingCoeffGiven) /* v4.0 */ model->B4SOIbodyJctGateSideDGradingCoeff = model->B4SOIbodyJctGateSideSGradingCoeff; if (!model->B4SOIoxideTrapDensityAGiven) { if (model->B4SOItype == NMOS) model->B4SOIoxideTrapDensityA = 6.25e41; else model->B4SOIoxideTrapDensityA=6.188e40; } if (!model->B4SOIoxideTrapDensityBGiven) { if (model->B4SOItype == NMOS) model->B4SOIoxideTrapDensityB = 3.125e26; else model->B4SOIoxideTrapDensityB = 1.5e25; } if (!model->B4SOIoxideTrapDensityCGiven) model->B4SOIoxideTrapDensityC = 8.75e9; if (!model->B4SOIemGiven) model->B4SOIem = 4.1e7; /* V/m */ if (!model->B4SOIefGiven) model->B4SOIef = 1.0; if (!model->B4SOIafGiven) model->B4SOIaf = 1.0; if (!model->B4SOIkfGiven) model->B4SOIkf = 0.0; if (!model->B4SOInoifGiven) model->B4SOInoif = 1.0; if (!model->B4SOIbfGiven) /* v4.0 */ model->B4SOIbf = 2.0; if (!model->B4SOIw0flkGiven) /* v4.0 */ model->B4SOIw0flk = 10.0e-6; if (!model->B4SOIfrbodyGiven) /* v4.0 */ model->B4SOIfrbody = 1; if (!model->B4SOIdvtp0Given) /* v4.0 for Vth */ model->B4SOIdvtp0 = 0.0; if (!model->B4SOIdvtp1Given) /* v4.0 for Vth */ model->B4SOIdvtp1 = 0.0; if (!model->B4SOIdvtp2Given) /* v4.1 for Vth */ model->B4SOIdvtp2 = 0.0; if (!model->B4SOIdvtp3Given) /* v4.1 for Vth */ model->B4SOIdvtp3 = 0.0; if (!model->B4SOIdvtp4Given) /* v4.1 for Vth */ model->B4SOIdvtp4 = 0.0; if (!model->B4SOIldvtp0Given) /* v4.0 for Vth */ model->B4SOIldvtp0 = 0.0; if (!model->B4SOIldvtp1Given) /* v4.0 for Vth */ model->B4SOIldvtp1 = 0.0; if (!model->B4SOIldvtp2Given) /* v4.1 for Vth */ model->B4SOIldvtp2 = 0.0; if (!model->B4SOIldvtp3Given) /* v4.1 for Vth */ model->B4SOIldvtp3 = 0.0; if (!model->B4SOIldvtp4Given) /* v4.1 for Vth */ model->B4SOIldvtp4 = 0.0; if (!model->B4SOIwdvtp0Given) /* v4.0 for Vth */ model->B4SOIwdvtp0 = 0.0; if (!model->B4SOIwdvtp1Given) /* v4.0 for Vth */ model->B4SOIwdvtp1 = 0.0; if (!model->B4SOIwdvtp2Given) /* v4.1 for Vth */ model->B4SOIwdvtp2 = 0.0; if (!model->B4SOIwdvtp3Given) /* v4.1 for Vth */ model->B4SOIwdvtp3 = 0.0; if (!model->B4SOIwdvtp4Given) /* v4.1 for Vth */ model->B4SOIwdvtp4 = 0.0; if (!model->B4SOIpdvtp0Given) /* v4.0 for Vth */ model->B4SOIpdvtp0 = 0.0; if (!model->B4SOIpdvtp1Given) /* v4.0 for Vth */ model->B4SOIpdvtp1 = 0.0; if (!model->B4SOIpdvtp2Given) /* v4.1 for Vth */ model->B4SOIpdvtp2 = 0.0; if (!model->B4SOIpdvtp3Given) /* v4.1 for Vth */ model->B4SOIpdvtp3 = 0.0; if (!model->B4SOIpdvtp4Given) /* v4.1 for Vth */ model->B4SOIpdvtp4 = 0.0; if (!model->B4SOIminvGiven) /* v4.0 for Vgsteff */ model->B4SOIminv = 0.0; if (!model->B4SOIlminvGiven) /* v4.0 for Vgsteff */ model->B4SOIlminv = 0.0; if (!model->B4SOIwminvGiven) /* v4.0 for Vgsteff */ model->B4SOIwminv = 0.0; if (!model->B4SOIpminvGiven) /* v4.0 for Vgsteff */ model->B4SOIpminv = 0.0; if (!model->B4SOIfproutGiven) /* v4.0 for DITS in Id */ model->B4SOIfprout = 0.0; if (!model->B4SOIpditsGiven) model->B4SOIpdits = 1e-20; if (!model->B4SOIpditsdGiven) model->B4SOIpditsd = 0.0; if (!model->B4SOIpditslGiven) model->B4SOIpditsl = 0.0; if (!model->B4SOIlfproutGiven) model->B4SOIlfprout = 0.0; if (!model->B4SOIlpditsGiven) model->B4SOIlpdits = 0.0; if (!model->B4SOIlpditsdGiven) model->B4SOIlpditsd = 0.0; if (!model->B4SOIwfproutGiven) model->B4SOIwfprout = 0.0; if (!model->B4SOIwpditsGiven) model->B4SOIwpdits = 0.0; if (!model->B4SOIwpditsdGiven) model->B4SOIwpditsd = 0.0; if (!model->B4SOIpfproutGiven) model->B4SOIpfprout = 0.0; if (!model->B4SOIppditsGiven) model->B4SOIppdits = 0.0; if (!model->B4SOIppditsdGiven) model->B4SOIppditsd = 0.0; /* v4.0 stress effect */ if (!model->B4SOIsarefGiven) model->B4SOIsaref = 1e-6; /* m */ if (!model->B4SOIsbrefGiven) model->B4SOIsbref = 1e-6; /* m */ if (!model->B4SOIwlodGiven) model->B4SOIwlod = 0; /* m */ if (!model->B4SOIku0Given) model->B4SOIku0 = 0; /* 1/m */ if (!model->B4SOIkvsatGiven) model->B4SOIkvsat = 0; if (!model->B4SOIkvth0Given) /* m */ model->B4SOIkvth0 = 0; if (!model->B4SOItku0Given) model->B4SOItku0 = 0; if (!model->B4SOIllodku0Given) model->B4SOIllodku0 = 0; if (!model->B4SOIwlodku0Given) model->B4SOIwlodku0 = 0; if (!model->B4SOIllodvthGiven) model->B4SOIllodvth = 0; if (!model->B4SOIwlodvthGiven) model->B4SOIwlodvth = 0; if (!model->B4SOIlku0Given) model->B4SOIlku0 = 0; if (!model->B4SOIwku0Given) model->B4SOIwku0 = 0; if (!model->B4SOIpku0Given) model->B4SOIpku0 = 0; if (!model->B4SOIlkvth0Given) model->B4SOIlkvth0 = 0; if (!model->B4SOIwkvth0Given) model->B4SOIwkvth0 = 0; if (!model->B4SOIpkvth0Given) model->B4SOIpkvth0 = 0; if (!model->B4SOIstk2Given) model->B4SOIstk2 = 0; if (!model->B4SOIlodk2Given) model->B4SOIlodk2 = 1.0; if (!model->B4SOIsteta0Given) model->B4SOIsteta0 = 0; if (!model->B4SOIlodeta0Given) model->B4SOIlodeta0 = 1.0; /* stress effect end */ if (!model->B4SOIvgsMaxGiven) model->B4SOIvgsMax = 1e99; if (!model->B4SOIvgdMaxGiven) model->B4SOIvgdMax = 1e99; if (!model->B4SOIvgbMaxGiven) model->B4SOIvgbMax = 1e99; if (!model->B4SOIvdsMaxGiven) model->B4SOIvdsMax = 1e99; if (!model->B4SOIvbsMaxGiven) model->B4SOIvbsMax = 1e99; if (!model->B4SOIvbdMaxGiven) model->B4SOIvbdMax = 1e99; if (!model->B4SOIvgsrMaxGiven) model->B4SOIvgsrMax = 1e99; if (!model->B4SOIvgdrMaxGiven) model->B4SOIvgdrMax = 1e99; if (!model->B4SOIvgbrMaxGiven) model->B4SOIvgbrMax = 1e99; if (!model->B4SOIvbsrMaxGiven) model->B4SOIvbsrMax = 1e99; if (!model->B4SOIvbdrMaxGiven) model->B4SOIvbdrMax = 1e99; if (!model->B4SOIfdModGiven) model->B4SOIfdMod = 0; if (!model->B4SOIvsceGiven) model->B4SOIvsce = 0.0; if (!model->B4SOIcdsbsGiven) model->B4SOIcdsbs = 0.0; if (!model->B4SOIminvcvGiven) /* v4.1 for Vgsteffcv */ model->B4SOIminvcv = 0.0; if (!model->B4SOIlminvcvGiven) /* v4.1 for Vgsteffcv */ model->B4SOIlminvcv = 0.0; if (!model->B4SOIwminvcvGiven) /* v4.1 for Vgsteffcv */ model->B4SOIwminvcv = 0.0; if (!model->B4SOIpminvcvGiven) /* v4.1 for Vgsteffcv */ model->B4SOIpminvcv = 0.0; if (!model->B4SOIvoffcvGiven) /*model->B4SOIvoffcv = -0.08; v4.2 */ model->B4SOIvoffcv = 0.0; if (!model->B4SOIlvoffcvGiven) model->B4SOIlvoffcv = 0.0; if (!model->B4SOIwvoffcvGiven) model->B4SOIwvoffcv = 0.0; if (!model->B4SOIpvoffcvGiven) model->B4SOIpvoffcv = 0.0; /* loop through all the instances of the model */ for (here = B4SOIinstances(model); here != NULL ; here=B4SOInextInstance(here)) { /* allocate a chunk of the state vector */ here->B4SOIstates = *states; *states += B4SOInumStates; /* perform the parameter defaulting */ if (!here->B4SOIdrainAreaGiven) here->B4SOIdrainArea = 0.0; if (!here->B4SOIdrainPerimeterGiven) here->B4SOIdrainPerimeter = 0.0; if (!here->B4SOIdrainSquaresGiven) here->B4SOIdrainSquares = 1.0; if (!here->B4SOIicVBSGiven) here->B4SOIicVBS = 0; if (!here->B4SOIicVDSGiven) here->B4SOIicVDS = 0; if (!here->B4SOIicVGSGiven) here->B4SOIicVGS = 0; if (!here->B4SOIicVESGiven) here->B4SOIicVES = 0; if (!here->B4SOIicVPSGiven) here->B4SOIicVPS = 0; if (!here->B4SOIbjtoffGiven) here->B4SOIbjtoff = 0; if (!here->B4SOIdebugModGiven) here->B4SOIdebugMod = 0; if (!here->B4SOIrth0Given) here->B4SOIrth0 = model->B4SOIrth0; if (!here->B4SOIcth0Given) here->B4SOIcth0 = model->B4SOIcth0; if (!here->B4SOIbodySquaresGiven) here->B4SOIbodySquares = 1.0; if (!here->B4SOIfrbodyGiven) here->B4SOIfrbody = model->B4SOIfrbody; /* v4.0 */ if (!here->B4SOIlGiven) here->B4SOIl = 5e-6; if (!here->B4SOIsourceAreaGiven) here->B4SOIsourceArea = 0; if (!here->B4SOIsourcePerimeterGiven) here->B4SOIsourcePerimeter = 0; if (!here->B4SOIsourceSquaresGiven) here->B4SOIsourceSquares = 1; if (!here->B4SOIwGiven) here->B4SOIw = 5e-6; if (!here->B4SOImGiven) here->B4SOIm = 1; /* v2.0 release */ if (!here->B4SOInbcGiven) here->B4SOInbc = 0; if (!here->B4SOInsegGiven) here->B4SOInseg = 1; if (!here->B4SOIpdbcpGiven) here->B4SOIpdbcp = 0; if (!here->B4SOIpsbcpGiven) here->B4SOIpsbcp = 0; if (!here->B4SOIagbcpGiven) here->B4SOIagbcp = 0; if (!here->B4SOIagbcp2Given) here->B4SOIagbcp2 = 0; /* v4.1 */ if (!here->B4SOIagbcpdGiven) here->B4SOIagbcpd = here->B4SOIagbcp; if (!here->B4SOIaebcpGiven) here->B4SOIaebcp = 0; if (!here->B4SOIoffGiven) here->B4SOIoff = 0; /* process drain series resistance */ if ( ((model->B4SOIsheetResistance > 0.0) && (here->B4SOIdrainSquares > 0.0 ) && (here->B4SOIdNodePrime == 0)) ) { error = CKTmkVolt(ckt,&tmp,here->B4SOIname,"drain"); if(error) return(error); here->B4SOIdNodePrime = tmp->number; } else { here->B4SOIdNodePrime = here->B4SOIdNode; } /* process source series resistance */ if ( ((model->B4SOIsheetResistance > 0.0) && (here->B4SOIsourceSquares > 0.0 ) && (here->B4SOIsNodePrime == 0)) ) { error = CKTmkVolt(ckt,&tmp,here->B4SOIname,"source"); if(error) return(error); here->B4SOIsNodePrime = tmp->number; } else { here->B4SOIsNodePrime = here->B4SOIsNode; } /* v4.4 -- Check of TsiMax for SOIMOD = 2 */ if (model->B4SOIsoiMod == 2){ if (model->B4SOImtrlMod){ NchMax = (model->B4SOIbg0sub - 0.1) / Charge_q * 2.0e-6 * epssub / (model->B4SOIetsi * model->B4SOIetsi); if (model->B4SOInpeak > NchMax ){ printf("Warning: SOIMOD=2 can not support given Nch=%g cm^-3 and Etsi=%g m. \n ", model->B4SOInpeak, model->B4SOIetsi); printf("Exceeds maximum allowed band bending of (Eg-0.1)eV. \n"); printf("Nch is set to %g cm^-3. \n",NchMax); model->B4SOInpeak = NchMax; } } else { NchMax = (1.12 - 0.1) / Charge_q * 2.0e-6 * epssub / (model->B4SOItsi * model->B4SOItsi); if (model->B4SOInpeak > NchMax ) { printf("Warning: SOIMOD=2 can not support given Nch=%g cm^-3 and Tsi=%g m. \n", model->B4SOInpeak, model->B4SOItsi); printf("Exceeds maximum allowed band bending of (Eg-0.1)eV. \n"); printf("Nch is set to %g cm^-3. \n",NchMax); model->B4SOInpeak = NchMax; } } } /* process effective silicon film thickness */ model->B4SOIcbox = 3.453133e-11 / model->B4SOItbox; if(model->B4SOImtrlMod) { model->B4SOIcsi = 1.03594e-10 / model->B4SOIetsi; } else { model->B4SOIcsi = 1.03594e-10 / model->B4SOItsi; } Cboxt = model->B4SOIcbox * model->B4SOIcsi / (model->B4SOIcbox + model->B4SOIcsi); /* v3.2 */ if(model->B4SOImtrlMod) { Qsi = Charge_q * model->B4SOInpeak * (1.0 + model->B4SOIlpe0 / here->B4SOIl) * 1e6 * model->B4SOIetsi; } else { Qsi = Charge_q * model->B4SOInpeak * (1.0 + model->B4SOIlpe0 / here->B4SOIl) * 1e6 * model->B4SOItsi; } Vbs0t = 0.8 - 0.5 * Qsi / model->B4SOIcsi + model->B4SOIvbsa; if (!here->B4SOIsoiModGiven) here->B4SOIsoiMod = model->B4SOIsoiMod; else if ((here->B4SOIsoiMod != 0) && (here->B4SOIsoiMod != 1) && (here->B4SOIsoiMod != 2) && (here->B4SOIsoiMod != 3)) { here->B4SOIsoiMod = model->B4SOIsoiMod; printf("Warning: soiMod has been set to its global value %d.\n", model->B4SOIsoiMod); } if (here->B4SOIsoiMod == 3) { /* auto selection */ if (Vbs0t > model->B4SOIvbs0fd) here->B4SOIsoiMod = 2; /* ideal FD mode */ else { if (Vbs0t < model->B4SOIvbs0pd) here->B4SOIsoiMod = 0; /* BSIMPD */ else here->B4SOIsoiMod = 1; } } here->B4SOIpNode = here->B4SOIpNodeExt; here->B4SOIbNode = here->B4SOIbNodeExt; here->B4SOItempNode = here->B4SOItempNodeExt; here->B4SOIfloat = 0; if (here->B4SOIsoiMod == 2) /* v3.2 */ { here->B4SOIbNode = here->B4SOIpNode = 0; here->B4SOIbodyMod = 0; } /* For ideal FD, body contact is disabled and no body node */ else { if (here->B4SOIpNode == -1) { /* floating body case -- 4-node */ error = CKTmkVolt(ckt,&tmp,here->B4SOIname,"Body"); if (error) return(error); here->B4SOIbNode = tmp->number; here->B4SOIpNode = 0; here->B4SOIfloat = 1; here->B4SOIbodyMod = 0; } else /* the 5th Node has been assigned */ { if (!here->B4SOItnodeoutGiven) { /* if t-node not assigned */ if (here->B4SOIbNode == -1) { /* 5-node body tie, bNode has not been assigned */ if ((model->B4SOIrbody == 0.0) && (model->B4SOIrbsh == 0.0)) { /* ideal body tie, pNode is not used */ here->B4SOIbNode = here->B4SOIpNode; here->B4SOIbodyMod = 2; } else { /* nonideal body tie */ error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Body"); if (error) return(error); here->B4SOIbNode = tmp->number; here->B4SOIbodyMod = 1; } } else { /* 6-node body tie, bNode has been assigned */ if ((model->B4SOIrbody == 0.0) && (model->B4SOIrbsh == 0.0)) { printf("\n Warning: model parameter rbody=0!\n"); model->B4SOIrbody = 1e0; here->B4SOIbodyMod = 1; } else { /* nonideal body tie */ here->B4SOIbodyMod = 1; } } } else { /* t-node assigned */ if (here->B4SOIbNode == -1) { /* 4 nodes & t-node, floating body */ error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Body"); if (error) return(error); here->B4SOIbNode = tmp->number; here->B4SOItempNode = here->B4SOIpNode; here->B4SOIpNode = 0; here->B4SOIfloat = 1; here->B4SOIbodyMod = 0; } else { /* 5 or 6 nodes & t-node, body-contact device */ if (here->B4SOItempNode == -1) { /* 5 nodes & tnode */ if ((model->B4SOIrbody == 0.0) && (model->B4SOIrbsh == 0.0)) { /* ideal body tie, pNode is not used */ here->B4SOItempNode = here->B4SOIbNode; here->B4SOIbNode = here->B4SOIpNode; here->B4SOIbodyMod = 2; } else { /* nonideal body tie */ here->B4SOItempNode = here->B4SOIbNode; error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Body"); if (error) return(error); here->B4SOIbNode = tmp->number; here->B4SOIbodyMod = 1; } } else { /* 6 nodes & t-node */ if ((model->B4SOIrbody == 0.0) && (model->B4SOIrbsh == 0.0)) { printf("\n Warning: model parameter rbody=0!\n"); model->B4SOIrbody = 1e0; here->B4SOIbodyMod = 1; } else { /* nonideal body tie */ here->B4SOIbodyMod = 1; } } } } } } if ((model->B4SOIshMod == 1) && (here->B4SOIrth0!=0)) { if (here->B4SOItempNode == -1) { error = CKTmkVolt(ckt,&tmp,here->B4SOIname,"Temp"); if (error) return(error); here->B4SOItempNode = tmp->number; } } else { here->B4SOItempNode = 0; } /* v3.1 added for RF */ if (!here->B4SOIrgateModGiven) here->B4SOIrgateMod = model->B4SOIrgateMod; else if ((here->B4SOIrgateMod != 0) && (here->B4SOIrgateMod != 1) && (here->B4SOIrgateMod != 2) && (here->B4SOIrgateMod != 3)) { here->B4SOIrgateMod = model->B4SOIrgateMod; printf("Warning: rgateMod has been set to its global value %d.\n", model->B4SOIrgateMod); } if (here->B4SOIrgateMod > 0) { error = CKTmkVolt(ckt,&tmp,here->B4SOIname,"gate"); if(error) return(error); here->B4SOIgNode = tmp->number; if (here->B4SOIrgateMod == 1) { if (model->B4SOIrshg <= 0.0) printf("Warning: rshg should be positive for rgateMod = 1.\n"); } else if (here->B4SOIrgateMod == 2) { if (model->B4SOIrshg <= 0.0) printf("Warning: rshg <= 0.0 for rgateMod = 2!!!\n"); else if (model->B4SOIxrcrg1 <= 0.0) printf("Warning: xrcrg1 <= 0.0 for rgateMod = 2!!!\n"); } } else { here->B4SOIgNode = here->B4SOIgNodeExt; } if (here->B4SOIrgateMod == 3) { error = CKTmkVolt(ckt,&tmp,here->B4SOIname,"midgate"); if(error) return(error); here->B4SOIgNodeMid = tmp->number; if (model->B4SOIrshg <= 0.0) printf("Warning: rshg should be positive for rgateMod = 3.\n"); else if (model->B4SOIxrcrg1 <= 0.0) printf("Warning: xrcrg1 should be positive for rgateMod = 3. \n"); } else here->B4SOIgNodeMid = here->B4SOIgNodeExt; /* v3.1 added for RF end */ /* v4.0 */ if (!here->B4SOIrbodyModGiven) here->B4SOIrbodyMod = model->B4SOIrbodyMod; else if ((here->B4SOIrbodyMod != 0) && (here->B4SOIrbodyMod != 1)) { here->B4SOIrbodyMod = model->B4SOIrbodyMod; printf("Warning: rbodyMod has been set to its global value %d. \n", model->B4SOIrbodyMod); } if (here->B4SOIrbodyMod ==1 && here->B4SOIsoiMod == 2) /* v4.0 */ here->B4SOIrbodyMod = 0; if (here->B4SOIrbodyMod == 1) { if (here->B4SOIdbNode == 0) { error = CKTmkVolt(ckt,&tmp,here->B4SOIname,"dbody"); if(error) return(error); here->B4SOIdbNode = tmp->number; } if (here->B4SOIsbNode == 0) { error = CKTmkVolt(ckt,&tmp,here->B4SOIname,"sbody"); if(error) return(error); here->B4SOIsbNode = tmp->number; } } else here->B4SOIdbNode = here->B4SOIsbNode = here->B4SOIbNode; /* v4.0 end */ /* v4.0 added */ if (!here->B4SOIsaGiven) /* stress */ here->B4SOIsa = 0.0; if (!here->B4SOIsbGiven) here->B4SOIsb = 0.0; if (!here->B4SOIsdGiven) here->B4SOIsd = 0.0; if (!here->B4SOInfGiven) here->B4SOInf = 1.0; if (!here->B4SOIrbdbGiven) here->B4SOIrbdb = model->B4SOIrbdb; /* in ohm */ if (!here->B4SOIrbsbGiven) here->B4SOIrbsb = model->B4SOIrbsb; if (!here->B4SOIdelvtoGiven) here->B4SOIdelvto = 0.0; /* v4.0 added end */ /* here for debugging purpose only */ if (here->B4SOIdebugMod != 0) { /* The real Vbs value */ error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Vbs"); if(error) return(error); here->B4SOIvbsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Ids"); if(error) return(error); here->B4SOIidsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Ic"); if(error) return(error); here->B4SOIicNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Ibs"); if(error) return(error); here->B4SOIibsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Ibd"); if(error) return(error); here->B4SOIibdNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Iii"); if(error) return(error); here->B4SOIiiiNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Ig"); if(error) return(error); here->B4SOIigNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Gigg"); if(error) return(error); here->B4SOIgiggNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Gigd"); if(error) return(error); here->B4SOIgigdNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Gigb"); if(error) return(error); here->B4SOIgigbNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Igidl"); if(error) return(error); here->B4SOIigidlNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Itun"); if(error) return(error); here->B4SOIitunNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Ibp"); if(error) return(error); here->B4SOIibpNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Cbb"); if(error) return(error); here->B4SOIcbbNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Cbd"); if(error) return(error); here->B4SOIcbdNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Cbg"); if(error) return(error); here->B4SOIcbgNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Qbf"); if(error) return(error); here->B4SOIqbfNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Qjs"); if(error) return(error); here->B4SOIqjsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Qjd"); if(error) return(error); here->B4SOIqjdNode = tmp->number; } /* set Sparse Matrix Pointers */ /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NULL){\ return(E_NOMEM);\ } } while(0) if ((model->B4SOIshMod == 1) && (here->B4SOIrth0!=0.0)) { TSTALLOC(B4SOITemptempPtr, B4SOItempNode, B4SOItempNode); TSTALLOC(B4SOITempdpPtr, B4SOItempNode, B4SOIdNodePrime); TSTALLOC(B4SOITempspPtr, B4SOItempNode, B4SOIsNodePrime); TSTALLOC(B4SOITempgPtr, B4SOItempNode, B4SOIgNode); TSTALLOC(B4SOITempbPtr, B4SOItempNode, B4SOIbNode); TSTALLOC(B4SOIGtempPtr, B4SOIgNode, B4SOItempNode); TSTALLOC(B4SOIDPtempPtr, B4SOIdNodePrime, B4SOItempNode); TSTALLOC(B4SOISPtempPtr, B4SOIsNodePrime, B4SOItempNode); TSTALLOC(B4SOIEtempPtr, B4SOIeNode, B4SOItempNode); TSTALLOC(B4SOIBtempPtr, B4SOIbNode, B4SOItempNode); if (here->B4SOIbodyMod == 1) { TSTALLOC(B4SOIPtempPtr, B4SOIpNode, B4SOItempNode); } /* v3.0 */ if (here->B4SOIsoiMod != 0) { /* v3.2 */ TSTALLOC(B4SOITempePtr, B4SOItempNode, B4SOIeNode); } } if (here->B4SOIbodyMod == 2) { /* Don't create any Jacobian entry for pNode */ } else if (here->B4SOIbodyMod == 1) { TSTALLOC(B4SOIBpPtr, B4SOIbNode, B4SOIpNode); TSTALLOC(B4SOIPbPtr, B4SOIpNode, B4SOIbNode); TSTALLOC(B4SOIPpPtr, B4SOIpNode, B4SOIpNode); /* 4.1 for Igb2_agbcp2 */ TSTALLOC(B4SOIPgPtr , B4SOIpNode, B4SOIgNode); TSTALLOC(B4SOIGpPtr , B4SOIgNode, B4SOIpNode); } /* v3.1 added for RF */ if (here->B4SOIrgateMod != 0) { TSTALLOC(B4SOIGEgePtr, B4SOIgNodeExt, B4SOIgNodeExt); TSTALLOC(B4SOIGEgPtr, B4SOIgNodeExt, B4SOIgNode); TSTALLOC(B4SOIGgePtr, B4SOIgNode, B4SOIgNodeExt); TSTALLOC(B4SOIGEdpPtr, B4SOIgNodeExt, B4SOIdNodePrime); TSTALLOC(B4SOIGEspPtr, B4SOIgNodeExt, B4SOIsNodePrime); if (here->B4SOIsoiMod !=2) /* v3.2 */ TSTALLOC(B4SOIGEbPtr, B4SOIgNodeExt, B4SOIbNode); TSTALLOC(B4SOIGMdpPtr, B4SOIgNodeMid, B4SOIdNodePrime); TSTALLOC(B4SOIGMgPtr, B4SOIgNodeMid, B4SOIgNode); TSTALLOC(B4SOIGMgmPtr, B4SOIgNodeMid, B4SOIgNodeMid); TSTALLOC(B4SOIGMgePtr, B4SOIgNodeMid, B4SOIgNodeExt); TSTALLOC(B4SOIGMspPtr, B4SOIgNodeMid, B4SOIsNodePrime); if (here->B4SOIsoiMod !=2) /* v3.2 */ TSTALLOC(B4SOIGMbPtr, B4SOIgNodeMid, B4SOIbNode); TSTALLOC(B4SOIGMePtr, B4SOIgNodeMid, B4SOIeNode); TSTALLOC(B4SOIDPgmPtr, B4SOIdNodePrime, B4SOIgNodeMid); TSTALLOC(B4SOIGgmPtr, B4SOIgNode, B4SOIgNodeMid); TSTALLOC(B4SOIGEgmPtr, B4SOIgNodeExt, B4SOIgNodeMid); TSTALLOC(B4SOISPgmPtr, B4SOIsNodePrime, B4SOIgNodeMid); TSTALLOC(B4SOIEgmPtr, B4SOIeNode, B4SOIgNodeMid); } /* v3.1 added for RF end */ /* v3.1 */ if (here->B4SOIsoiMod != 2) /* v3.2 */ { TSTALLOC(B4SOIEbPtr, B4SOIeNode, B4SOIbNode); TSTALLOC(B4SOIGbPtr, B4SOIgNode, B4SOIbNode); TSTALLOC(B4SOIDPbPtr, B4SOIdNodePrime, B4SOIbNode); TSTALLOC(B4SOISPbPtr, B4SOIsNodePrime, B4SOIbNode); TSTALLOC(B4SOIBePtr, B4SOIbNode, B4SOIeNode); TSTALLOC(B4SOIBgPtr, B4SOIbNode, B4SOIgNode); TSTALLOC(B4SOIBdpPtr, B4SOIbNode, B4SOIdNodePrime); TSTALLOC(B4SOIBspPtr, B4SOIbNode, B4SOIsNodePrime); TSTALLOC(B4SOIBbPtr, B4SOIbNode, B4SOIbNode); } /* v3.1 */ TSTALLOC(B4SOIEgPtr, B4SOIeNode, B4SOIgNode); TSTALLOC(B4SOIEdpPtr, B4SOIeNode, B4SOIdNodePrime); TSTALLOC(B4SOIEspPtr, B4SOIeNode, B4SOIsNodePrime); TSTALLOC(B4SOIGePtr, B4SOIgNode, B4SOIeNode); TSTALLOC(B4SOIDPePtr, B4SOIdNodePrime, B4SOIeNode); TSTALLOC(B4SOISPePtr, B4SOIsNodePrime, B4SOIeNode); TSTALLOC(B4SOIEePtr, B4SOIeNode, B4SOIeNode); TSTALLOC(B4SOIGgPtr, B4SOIgNode, B4SOIgNode); TSTALLOC(B4SOIGdpPtr, B4SOIgNode, B4SOIdNodePrime); TSTALLOC(B4SOIGspPtr, B4SOIgNode, B4SOIsNodePrime); TSTALLOC(B4SOIDPgPtr, B4SOIdNodePrime, B4SOIgNode); TSTALLOC(B4SOIDPdpPtr, B4SOIdNodePrime, B4SOIdNodePrime); TSTALLOC(B4SOIDPspPtr, B4SOIdNodePrime, B4SOIsNodePrime); TSTALLOC(B4SOIDPdPtr, B4SOIdNodePrime, B4SOIdNode); TSTALLOC(B4SOISPgPtr, B4SOIsNodePrime, B4SOIgNode); TSTALLOC(B4SOISPdpPtr, B4SOIsNodePrime, B4SOIdNodePrime); TSTALLOC(B4SOISPspPtr, B4SOIsNodePrime, B4SOIsNodePrime); TSTALLOC(B4SOISPsPtr, B4SOIsNodePrime, B4SOIsNode); TSTALLOC(B4SOIDdPtr, B4SOIdNode, B4SOIdNode); TSTALLOC(B4SOIDdpPtr, B4SOIdNode, B4SOIdNodePrime); TSTALLOC(B4SOISsPtr, B4SOIsNode, B4SOIsNode); TSTALLOC(B4SOISspPtr, B4SOIsNode, B4SOIsNodePrime); /* v4.0 */ if (here->B4SOIrbodyMod == 1) { TSTALLOC(B4SOIDPdbPtr, B4SOIdNodePrime, B4SOIdbNode); TSTALLOC(B4SOISPsbPtr, B4SOIsNodePrime, B4SOIsbNode); TSTALLOC(B4SOIDBdpPtr, B4SOIdbNode, B4SOIdNodePrime); TSTALLOC(B4SOIDBdbPtr, B4SOIdbNode, B4SOIdbNode); TSTALLOC(B4SOIDBbPtr, B4SOIdbNode, B4SOIbNode); TSTALLOC(B4SOISBspPtr, B4SOIsbNode, B4SOIsNodePrime); TSTALLOC(B4SOISBsbPtr, B4SOIsbNode, B4SOIsbNode); TSTALLOC(B4SOISBbPtr, B4SOIsbNode, B4SOIbNode); TSTALLOC(B4SOIBdbPtr, B4SOIbNode, B4SOIdbNode); TSTALLOC(B4SOIBsbPtr, B4SOIbNode, B4SOIsbNode); } if (model->B4SOIrdsMod) { TSTALLOC(B4SOIDgPtr, B4SOIdNode, B4SOIgNode); TSTALLOC(B4SOIDspPtr, B4SOIdNode, B4SOIsNodePrime); TSTALLOC(B4SOISdpPtr, B4SOIsNode, B4SOIdNodePrime); TSTALLOC(B4SOISgPtr, B4SOIsNode, B4SOIgNode); if (model->B4SOIsoiMod != 2) { TSTALLOC(B4SOIDbPtr, B4SOIdNode, B4SOIbNode); TSTALLOC(B4SOISbPtr, B4SOIsNode, B4SOIbNode); } } /* v4.0 end*/ /* here for debugging purpose only */ if (here->B4SOIdebugMod != 0) { TSTALLOC(B4SOIVbsPtr, B4SOIvbsNode, B4SOIvbsNode); TSTALLOC(B4SOIIdsPtr, B4SOIidsNode, B4SOIidsNode); TSTALLOC(B4SOIIcPtr, B4SOIicNode, B4SOIicNode); TSTALLOC(B4SOIIbsPtr, B4SOIibsNode, B4SOIibsNode); TSTALLOC(B4SOIIbdPtr, B4SOIibdNode, B4SOIibdNode); TSTALLOC(B4SOIIiiPtr, B4SOIiiiNode, B4SOIiiiNode); TSTALLOC(B4SOIIgPtr, B4SOIigNode, B4SOIigNode); TSTALLOC(B4SOIGiggPtr, B4SOIgiggNode, B4SOIgiggNode); TSTALLOC(B4SOIGigdPtr, B4SOIgigdNode, B4SOIgigdNode); TSTALLOC(B4SOIGigbPtr, B4SOIgigbNode, B4SOIgigbNode); TSTALLOC(B4SOIIgidlPtr, B4SOIigidlNode, B4SOIigidlNode); TSTALLOC(B4SOIItunPtr, B4SOIitunNode, B4SOIitunNode); TSTALLOC(B4SOIIbpPtr, B4SOIibpNode, B4SOIibpNode); TSTALLOC(B4SOICbbPtr, B4SOIcbbNode, B4SOIcbbNode); TSTALLOC(B4SOICbdPtr, B4SOIcbdNode, B4SOIcbdNode); TSTALLOC(B4SOICbgPtr, B4SOIcbgNode, B4SOIcbgNode); TSTALLOC(B4SOIQbfPtr, B4SOIqbfNode, B4SOIqbfNode); TSTALLOC(B4SOIQjsPtr, B4SOIqjsNode, B4SOIqjsNode); TSTALLOC(B4SOIQjdPtr, B4SOIqjdNode, B4SOIqjdNode); } } } #ifdef USE_OMP InstCount = 0; model = (B4SOImodel*)inModel; /* loop through all the B4SOI device models to count the number of instances */ for( ; model != NULL; model = B4SOInextModel(model)) { /* loop through all the instances of the model */ for (here = B4SOIinstances(model); here != NULL ; here=B4SOInextInstance(here)) { InstCount++; } model->B4SOIInstCount = 0; model->B4SOIInstanceArray = NULL; } InstArray = TMALLOC(B4SOIinstance*, InstCount); model = (B4SOImodel*)inModel; /* store this in the first model only */ model->B4SOIInstCount = InstCount; model->B4SOIInstanceArray = InstArray; idx = 0; for( ; model != NULL; model = B4SOInextModel(model)) { /* loop through all the instances of the model */ for (here = B4SOIinstances(model); here != NULL ; here=B4SOInextInstance(here)) { InstArray[idx] = here; idx++; } } #endif return(OK); } int B4SOIunsetup( GENmodel *inModel, CKTcircuit *ckt) { #ifndef HAS_BATCHSIM B4SOImodel *model; B4SOIinstance *here; #ifdef USE_OMP model = (B4SOImodel*)inModel; tfree(model->B4SOIInstanceArray); #endif for (model = (B4SOImodel *)inModel; model != NULL; model = B4SOInextModel(model)) { for (here = B4SOIinstances(model); here != NULL; here=B4SOInextInstance(here)) { /* here for debugging purpose only */ if (here->B4SOIqjdNode > 0) CKTdltNNum(ckt, here->B4SOIqjdNode); here->B4SOIqjdNode = 0; if (here->B4SOIqjsNode > 0) CKTdltNNum(ckt, here->B4SOIqjsNode); here->B4SOIqjsNode = 0; if (here->B4SOIqbfNode > 0) CKTdltNNum(ckt, here->B4SOIqbfNode); here->B4SOIqbfNode = 0; if (here->B4SOIcbgNode > 0) CKTdltNNum(ckt, here->B4SOIcbgNode); here->B4SOIcbgNode = 0; if (here->B4SOIcbdNode > 0) CKTdltNNum(ckt, here->B4SOIcbdNode); here->B4SOIcbdNode = 0; if (here->B4SOIcbbNode > 0) CKTdltNNum(ckt, here->B4SOIcbbNode); here->B4SOIcbbNode = 0; if (here->B4SOIibpNode > 0) CKTdltNNum(ckt, here->B4SOIibpNode); here->B4SOIibpNode = 0; if (here->B4SOIitunNode > 0) CKTdltNNum(ckt, here->B4SOIitunNode); here->B4SOIitunNode = 0; if (here->B4SOIigidlNode > 0) CKTdltNNum(ckt, here->B4SOIigidlNode); here->B4SOIigidlNode = 0; if (here->B4SOIgigbNode > 0) CKTdltNNum(ckt, here->B4SOIgigbNode); here->B4SOIgigbNode = 0; if (here->B4SOIgigdNode > 0) CKTdltNNum(ckt, here->B4SOIgigdNode); here->B4SOIgigdNode = 0; if (here->B4SOIgiggNode > 0) CKTdltNNum(ckt, here->B4SOIgiggNode); here->B4SOIgiggNode = 0; if (here->B4SOIigNode > 0) CKTdltNNum(ckt, here->B4SOIigNode); here->B4SOIigNode = 0; if (here->B4SOIiiiNode > 0) CKTdltNNum(ckt, here->B4SOIiiiNode); here->B4SOIiiiNode = 0; if (here->B4SOIibdNode > 0) CKTdltNNum(ckt, here->B4SOIibdNode); here->B4SOIibdNode = 0; if (here->B4SOIibsNode > 0) CKTdltNNum(ckt, here->B4SOIibsNode); here->B4SOIibsNode = 0; if (here->B4SOIicNode > 0) CKTdltNNum(ckt, here->B4SOIicNode); here->B4SOIicNode = 0; if (here->B4SOIidsNode > 0) CKTdltNNum(ckt, here->B4SOIidsNode); here->B4SOIidsNode = 0; if (here->B4SOIvbsNode > 0) CKTdltNNum(ckt, here->B4SOIvbsNode); here->B4SOIvbsNode = 0; if (here->B4SOIsbNode > 0 && here->B4SOIsbNode != here->B4SOIbNode) CKTdltNNum(ckt, here->B4SOIsbNode); here->B4SOIsbNode = 0; if (here->B4SOIdbNode > 0 && here->B4SOIdbNode != here->B4SOIbNode) CKTdltNNum(ckt, here->B4SOIdbNode); here->B4SOIdbNode = 0; if (here->B4SOIgNodeMid > 0 && here->B4SOIgNodeMid != here->B4SOIgNodeExt) CKTdltNNum(ckt, here->B4SOIgNodeMid); here->B4SOIgNodeMid = 0; if (here->B4SOIgNode > 0 && here->B4SOIgNode != here->B4SOIgNodeExt) CKTdltNNum(ckt, here->B4SOIgNode); here->B4SOIgNode = 0; if (here->B4SOItempNode > 0 && here->B4SOItempNode != here->B4SOItempNodeExt && here->B4SOItempNode != here->B4SOIbNodeExt && here->B4SOItempNode != here->B4SOIpNodeExt) CKTdltNNum(ckt, here->B4SOItempNode); here->B4SOItempNode = 0; if (here->B4SOIbNode > 0 && here->B4SOIbNode != here->B4SOIbNodeExt && here->B4SOIbNode != here->B4SOIpNodeExt) CKTdltNNum(ckt, here->B4SOIbNode); here->B4SOIbNode = 0; here->B4SOIpNode = 0; if (here->B4SOIsNodePrime > 0 && here->B4SOIsNodePrime != here->B4SOIsNode) CKTdltNNum(ckt, here->B4SOIsNodePrime); here->B4SOIsNodePrime = 0; if (here->B4SOIdNodePrime > 0 && here->B4SOIdNodePrime != here->B4SOIdNode) CKTdltNNum(ckt, here->B4SOIdNodePrime); here->B4SOIdNodePrime = 0; } } #endif return OK; } tmpk8ny_4pz/src/spicelib/devices/bsimsoi/b4soimdel.c0000644000175000017500000000166013546075722022661 0ustar carstencarsten/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/ /********** * Copyright 2010 Regents of the University of California. All rights reserved. * Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang * Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soimdel.c * Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu. * Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu. * File: b4soimdel.c * Modified by Hui Wan, Xuemei Xi 11/30/2005 * Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009 * Modified by Tanvir Morshed 09/22/2009 * Modified by Tanvir Morshed 12/31/2009 **********/ #include "ngspice/ngspice.h" #include "b4soidef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B4SOImDelete(GENmodel *gen_model) { NG_IGNORE(gen_model); #ifdef USE_OMP B4SOImodel *model = (B4SOImodel *) gen_model; FREE(model->B4SOIInstanceArray); #endif return OK; } tmpk8ny_4pz/src/spicelib/devices/urc/0000755000175000017500000000000013546075722017754 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/urc/Makefile.am0000644000175000017500000000055613546075722022016 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = liburc.la liburc_la_SOURCES = \ urc.c \ urcask.c \ urcdefs.h \ urcext.h \ urcinit.c \ urcinit.h \ urcitf.h \ urcmask.c \ urcmpar.c \ urcparam.c \ urcsetup.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/urc/urcinit.c0000644000175000017500000000303413546075722021575 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "urcitf.h" #include "urcext.h" #include "urcinit.h" SPICEdev URCinfo = { .DEVpublic = { .name = "URC", .description = "Uniform R.C. line", .terms = &URCnSize, .numNames = &URCnSize, .termNames = URCnames, .numInstanceParms = &URCpTSize, .instanceParms = URCpTable, .numModelParms = &URCmPTSize, .modelParms = URCmPTable, .flags = 0, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = URCparam, .DEVmodParam = URCmParam, .DEVload = NULL, .DEVsetup = URCsetup, .DEVunsetup = URCunsetup, .DEVpzSetup = URCsetup, .DEVtemperature = NULL, .DEVtrunc = NULL, .DEVfindBranch = NULL, .DEVacLoad = NULL, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = NULL, .DEVask = URCask, .DEVmodAsk = URCmAsk, .DEVpzLoad = NULL, .DEVconvTest = NULL, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &URCiSize, .DEVmodSize = &URCmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_urc_info(void) { return &URCinfo; } tmpk8ny_4pz/src/spicelib/devices/urc/urcmpar.c0000644000175000017500000000262313546075722021574 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "urcdefs.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int URCmParam(int param, IFvalue *value, GENmodel *inModel) { URCmodel *model = (URCmodel *)inModel; switch(param) { case URC_MOD_K: model->URCk = value->rValue; model->URCkGiven = TRUE; break; case URC_MOD_FMAX: model->URCfmax = value->rValue; model->URCfmaxGiven = TRUE; break; case URC_MOD_RPERL: model->URCrPerL = value->rValue; model->URCrPerLGiven = TRUE; break; case URC_MOD_CPERL: model->URCcPerL = value->rValue; model->URCcPerLGiven = TRUE; break; case URC_MOD_ISPERL: model->URCisPerL = value->rValue; model->URCisPerLGiven = TRUE; break; case URC_MOD_RSPERL: model->URCrsPerL = value->rValue; model->URCrsPerLGiven = TRUE; break; case URC_MOD_URC: /* no operation - already know we are a URC, but this makes*/ /* spice-2 like parsers happy */ break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/urc/urcdefs.h0000644000175000017500000000514613546075722021566 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #ifndef URC #define URC #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" /* * structures used to describe uniform RC lines */ /* information needed for each instance */ typedef struct sURCinstance { struct GENinstance gen; #define URCmodPtr(inst) ((struct sURCmodel *)((inst)->gen.GENmodPtr)) #define URCnextInstance(inst) ((struct sURCinstance *)((inst)->gen.GENnextInstance)) #define URCname gen.GENname #define URCstate gen.GENstate const int URCposNode; /* number of positive node of URC */ const int URCnegNode; /* number of negative node of URC */ const int URCgndNode; /* number of the "ground" node of the URC */ double URClength; /* length of line */ int URClumps; /* number of lumps in line */ unsigned URClenGiven : 1; /* flag to indicate length was specified */ unsigned URClumpsGiven : 1; /* flag to indicate lumps was specified */ } URCinstance ; /* per model data */ typedef struct sURCmodel { /* model structure for a resistor */ struct GENmodel gen; #define URCmodType gen.GENmodType #define URCnextModel(inst) ((struct sURCmodel *)((inst)->gen.GENnextModel)) #define URCinstances(inst) ((URCinstance *)((inst)->gen.GENinstances)) #define URCmodName gen.GENmodName double URCk; /* propagation constant for URC */ double URCfmax; /* max frequence of interest */ double URCrPerL; /* resistance per unit length */ double URCcPerL; /* capacitance per unit length */ double URCisPerL; /* diode saturation current per unit length */ double URCrsPerL; /* diode resistance per unit length */ unsigned URCkGiven : 1; /* flag to indicate k was specified */ unsigned URCfmaxGiven : 1; /* flag to indicate fmax was specified */ unsigned URCrPerLGiven : 1; /* flag to indicate rPerL was specified */ unsigned URCcPerLGiven : 1; /* flag to indicate cPerL was specified */ unsigned URCisPerLGiven : 1; /* flag to indicate isPerL was specified */ unsigned URCrsPerLGiven : 1; /* flag to indicate rsPerL was specified */ } URCmodel; /* device parameters */ enum { URC_LEN = 1, URC_LUMPS, URC_POS_NODE, URC_NEG_NODE, URC_GND_NODE, }; /* model parameters */ enum { URC_MOD_K = 101, URC_MOD_FMAX, URC_MOD_RPERL, URC_MOD_CPERL, URC_MOD_ISPERL, URC_MOD_RSPERL, URC_MOD_URC, }; /* device questions */ /* model questions */ #include "urcext.h" #endif /*URC*/ tmpk8ny_4pz/src/spicelib/devices/urc/urc.c0000644000175000017500000000257013546075722020715 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "urcdefs.h" #include "ngspice/suffix.h" IFparm URCpTable[] = { /* parameters */ IOPU( "l", URC_LEN, IF_REAL, "Length of transmission line"), IOPU( "n", URC_LUMPS, IF_INTEGER, "Number of lumps"), OPU( "pos_node",URC_POS_NODE,IF_INTEGER,"Positive node of URC"), OPU( "neg_node",URC_NEG_NODE,IF_INTEGER,"Negative node of URC"), OPU( "gnd", URC_GND_NODE,IF_INTEGER,"Ground node of URC") }; IFparm URCmPTable[] = { /* model parameters */ IOP( "k", URC_MOD_K, IF_REAL, "Propagation constant"), IOPA( "fmax", URC_MOD_FMAX, IF_REAL, "Maximum frequency of interest"), IOP( "rperl", URC_MOD_RPERL, IF_REAL, "Resistance per unit length"), IOPA( "cperl", URC_MOD_CPERL, IF_REAL, "Capacitance per unit length"), IOP( "isperl", URC_MOD_ISPERL, IF_REAL, "Saturation current per length"), IOP( "rsperl", URC_MOD_RSPERL, IF_REAL, "Diode resistance per length"), IP( "urc", URC_MOD_URC, IF_FLAG, "Uniform R.C. line model") }; char *URCnames[] = { "P1", "P2", "Ref" }; int URCnSize = NUMELEMS(URCnames); int URCpTSize = NUMELEMS(URCpTable); int URCmPTSize = NUMELEMS(URCmPTable); int URCiSize = sizeof(URCinstance); int URCmSize = sizeof(URCmodel); tmpk8ny_4pz/src/spicelib/devices/urc/urcext.h0000644000175000017500000000077613546075722021451 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #ifndef _URCEXT_H #define _URCEXT_H extern int URCask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int URCmAsk(CKTcircuit*,GENmodel*,int,IFvalue*); extern int URCmParam(int,IFvalue*,GENmodel*); extern int URCparam(int,IFvalue*,GENinstance*,IFvalue*); extern int URCsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int URCunsetup(GENmodel*,CKTcircuit*); #endif tmpk8ny_4pz/src/spicelib/devices/urc/urcparam.c0000644000175000017500000000141713546075722021735 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "urcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int URCparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { URCinstance *here = (URCinstance *)inst; NG_IGNORE(select); switch(param) { case URC_LEN: here->URClength = value->rValue; here->URClenGiven = TRUE; break; case URC_LUMPS: here->URClumps = value->iValue; here->URClumpsGiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/urc/urcinit.h0000644000175000017500000000035613546075722021606 0ustar carstencarsten#ifndef _URCINIT_H #define _URCINIT_H extern IFparm URCpTable[ ]; extern IFparm URCmPTable[ ]; extern char *URCnames[ ]; extern int URCpTSize; extern int URCmPTSize; extern int URCnSize; extern int URCiSize; extern int URCmSize; #endif tmpk8ny_4pz/src/spicelib/devices/urc/urcask.c0000644000175000017500000000230113546075722021404 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ /* */ /* * This routine gives access to the internal device parameters * of Uniform distributed RC lines */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "urcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int URCask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { URCinstance *here = (URCinstance *)inst; NG_IGNORE(select); NG_IGNORE(ckt); switch(which) { case URC_POS_NODE: value->iValue = here->URCposNode; return (OK); case URC_NEG_NODE: value->iValue = here->URCnegNode; return (OK); case URC_GND_NODE: value->iValue = here->URCgndNode; return (OK); case URC_LEN: value->rValue = here->URClength; return (OK); case URC_LUMPS: value->iValue = here->URClumps; return (OK); default: return (E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/urc/urcsetup.c0000644000175000017500000002670713546075722022006 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "urcdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int URCsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *state) /* create the resistors/capacitors used to model the URC */ { URCmodel *model = (URCmodel *)inModel; URCinstance *here; int rtype; int ctype; int dtype; CKTnode * lowl; CKTnode * lowr; CKTnode * hil; CKTnode * hir; char *nameelt; char *namehi; CKTnode *nodehi; CKTnode *nodelo; char *namelo; double r; double c; IFvalue ptemp; double p; double r0; double c0; double i0; double r1; double c1; double i1; double rd; double wnorm; double prop; int i; GENinstance *fast; GENmodel *modfast; /* capacitor or diode model */ GENmodel *rmodfast; /* resistor model */ int error; IFuid dioUid; IFuid resUid; IFuid capUid; IFuid eltUid; NG_IGNORE(state); NG_IGNORE(matrix); rtype = CKTtypelook("Resistor"); ctype = CKTtypelook("Capacitor"); dtype = CKTtypelook("Diode"); /* loop through all the URC models */ for( ; model != NULL; model = URCnextModel(model)) { if(!model->URCkGiven) model->URCk = 1.5; if(!model->URCfmaxGiven) model->URCfmax = 1e9; if(!model->URCrPerLGiven) model->URCrPerL = 1000; if(!model->URCcPerLGiven) model->URCcPerL = 1e-12; /* may need to put in limits: k>=1.1, freq <=1e9, rperl >=.1 */ /* loop through all the instances of the model */ for (here = URCinstances(model); here != NULL ; here=URCnextInstance(here)) { p = model->URCk; r0 = here->URClength * model->URCrPerL; c0 = here->URClength * model->URCcPerL; i0 = here->URClength * model->URCisPerL; if(!here->URClumpsGiven) { wnorm = model->URCfmax * r0 * c0 * 2.0 * M_PI; here->URClumps=(int)MAX(3.0,log(wnorm*(((p-1)/p)*((p-1)/p)))/log(p)); if(wnorm <35) here->URClumps=3; /* may want to limit lumps to <= 100 or something like that */ } r1 = (r0*(p-1))/((2*(pow(p,(double)here->URClumps)))-2); c1 = (c0 * (p-1))/((pow(p,(double)(here->URClumps-1)))*(p+1)-2); i1 = (i0 * (p-1))/((pow(p,(double)(here->URClumps-1)))*(p+1)-2); rd = here->URClength * here->URClumps * model->URCrsPerL; /* may want to check that c1 > 0 */ prop=1; if(model->URCisPerLGiven) { error = SPfrontEnd->IFnewUid (ckt, &dioUid, here->URCname, "diodemod", UID_MODEL, NULL); if(error) return(error); modfast = NULL; error = CKTmodCrt(ckt,dtype,&modfast, dioUid); if(error) return(error); ptemp.rValue = c1; error= CKTpModName("cjo",&ptemp,ckt,dtype,dioUid,&modfast); if(error) return(error); ptemp.rValue = rd; error = CKTpModName("rs",&ptemp,ckt,dtype,dioUid,&modfast); if(error) return(error); ptemp.rValue = i1; error = CKTpModName("is",&ptemp,ckt,dtype,dioUid,&modfast); if(error) return(error); } else { error = SPfrontEnd->IFnewUid (ckt, &capUid, here->URCname, "capmod", UID_MODEL, NULL); if(error) return(error); modfast = NULL; error = CKTmodCrt(ckt,ctype,&modfast, capUid); if(error) return(error); } error = SPfrontEnd->IFnewUid (ckt, &resUid, here->URCname, "resmod", UID_MODEL, NULL); if(error) return(error); rmodfast = NULL; error = CKTmodCrt(ckt,rtype,&rmodfast,resUid); if(error) return(error); lowl = CKTnum2nod(ckt,here->URCposNode); hir = CKTnum2nod(ckt,here->URCnegNode); for(i=1;i<=here->URClumps;i++) { namehi = tprintf("hi%d", i); error = CKTmkVolt(ckt, &nodehi, here->URCname, namehi); if(error) return(error); hil = nodehi; if(i==here->URClumps) { lowr = hil; } else { namelo = tprintf("lo%d", i); error = CKTmkVolt(ckt, &nodelo, here->URCname, namelo); if(error) return(error); lowr = nodelo; } r = prop*r1; c = prop*c1; nameelt = tprintf("rlo%d", i); error = SPfrontEnd->IFnewUid (ckt, &eltUid, here->URCname, nameelt, UID_INSTANCE, NULL); if(error) return(error); error = CKTcrtElt(ckt,rmodfast, &fast,eltUid); if(error) return(error); error = CKTbindNode(ckt,fast,1,lowl); if(error) return(error); error = CKTbindNode(ckt,fast,2,lowr); if(error) return(error); ptemp.rValue = r; error = CKTpName("resistance",&ptemp,ckt,rtype,nameelt,&fast); if(error) return(error); nameelt = tprintf("rhi%d", i); error = SPfrontEnd->IFnewUid (ckt, &eltUid, here->URCname, nameelt, UID_INSTANCE, NULL); if(error) return(error); error = CKTcrtElt(ckt,rmodfast, &fast,eltUid); if(error) return(error); error = CKTbindNode(ckt,fast,1,hil); if(error) return(error); error = CKTbindNode(ckt,fast,2,hir); if(error) return(error); ptemp.rValue = r; error = CKTpName("resistance",&ptemp,ckt,rtype,nameelt,&fast); if(error) return(error); if(model->URCisPerLGiven) { /* use diode */ nameelt = tprintf("dlo%d", i); error = SPfrontEnd->IFnewUid (ckt, &eltUid, here->URCname,nameelt,UID_INSTANCE, NULL); if(error) return(error); error = CKTcrtElt(ckt,modfast, &fast, eltUid); if(error) return(error); error = CKTbindNode(ckt,fast,1,lowr); if(error) return(error); error = CKTbindNode(ckt,fast,2, CKTnum2nod(ckt, here->URCgndNode)); if(error) return(error); ptemp.rValue = prop; error = CKTpName("area",&ptemp,ckt,dtype,nameelt,&fast); if(error) return(error); } else { /* use simple capacitor */ nameelt = tprintf("clo%d", i); error = SPfrontEnd->IFnewUid (ckt, &eltUid, here->URCname ,nameelt, UID_INSTANCE, NULL); if(error) return(error); error = CKTcrtElt(ckt,modfast, &fast, eltUid); if(error) return(error); error = CKTbindNode(ckt,fast,1,lowr); if(error) return(error); error = CKTbindNode(ckt,fast,2, CKTnum2nod(ckt, here->URCgndNode)); if(error) return(error); ptemp.rValue = c; error = CKTpName("capacitance",&ptemp,ckt,ctype,nameelt, &fast); if(error) return(error); } if(i!=here->URClumps){ if(model->URCisPerLGiven) { /* use diode */ nameelt = tprintf("dhi%d", i); error = SPfrontEnd->IFnewUid (ckt, &eltUid, here->URCname,nameelt,UID_INSTANCE, NULL); if(error) return(error); error = CKTcrtElt(ckt,modfast, &fast,eltUid); if(error) return(error); error = CKTbindNode(ckt,fast,1,hil); if(error) return(error); error = CKTbindNode(ckt,fast,2, CKTnum2nod(ckt, here->URCgndNode)); if(error) return(error); ptemp.rValue = prop; error=CKTpName("area",&ptemp,ckt,dtype,nameelt,&fast); if(error) return(error); } else { /* use simple capacitor */ nameelt = tprintf("chi%d", i); error = SPfrontEnd->IFnewUid (ckt, &eltUid, here->URCname,nameelt,UID_INSTANCE, NULL); if(error) return(error); error = CKTcrtElt(ckt,modfast, &fast,eltUid); if(error) return(error); error = CKTbindNode(ckt,fast,1,hil); if(error) return(error); error = CKTbindNode(ckt,fast,2, CKTnum2nod(ckt, here->URCgndNode)); if(error) return(error); ptemp.rValue = c; error =CKTpName("capacitance",&ptemp,ckt,ctype,nameelt, &fast); if(error) return(error); } } prop *= p; lowl = lowr; hir = hil; } } } return(OK); } int URCunsetup(GENmodel *inModel, CKTcircuit *ckt) { IFuid varUid; int error; URCinstance *here; URCmodel *model = (URCmodel *) inModel; GENinstance *in; GENmodel *modfast; /* Delete models, devices, and intermediate nodes; */ for ( ; model; model = URCnextModel(model)) { for (here = URCinstances(model); here; here = URCnextInstance(here)) { if(model->URCisPerLGiven) { /* Diodes */ error = SPfrontEnd->IFnewUid (ckt, &varUid, here->URCname, "diodemod", UID_MODEL, NULL); } else { /* Capacitors */ error = SPfrontEnd->IFnewUid (ckt, &varUid, here->URCname, "capmod", UID_MODEL, NULL); } if (error && error != E_EXISTS) return error; modfast = CKTfndMod(ckt, varUid); if (!modfast) return E_NOMOD; for (in = modfast->GENinstances; in; in = in->GENnextInstance) CKTdltNNum(ckt, GENnode(in)[0]); CKTdltMod(ckt, modfast); /* Does the elements too */ /* Resistors */ error = SPfrontEnd->IFnewUid (ckt, &varUid, here->URCname, "resmod", UID_MODEL, NULL); if (error && error != E_EXISTS) return error; modfast = CKTfndMod(ckt, varUid); if (!modfast) return E_NOMOD; CKTdltMod(ckt, modfast); } } return OK; } tmpk8ny_4pz/src/spicelib/devices/urc/urcitf.h0000644000175000017500000000026413546075722021423 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_URC #define DEV_URC extern SPICEdev *get_urc_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/urc/urcmask.c0000644000175000017500000000236013546075722021566 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ /* */ /* * This routine gives access to the internal model parameters * of Uniform distributed RC lines */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "urcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int URCmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { URCmodel *here = (URCmodel *)inst; NG_IGNORE(ckt); switch(which) { case URC_MOD_K: value->rValue = here->URCk; return (OK); case URC_MOD_FMAX: value->rValue = here->URCfmax; return (OK); case URC_MOD_RPERL: value->rValue = here->URCrPerL; return (OK); case URC_MOD_CPERL: value->rValue = here->URCcPerL; return (OK); case URC_MOD_ISPERL: value->rValue = here->URCisPerL; return (OK); case URC_MOD_RSPERL: value->rValue = here->URCrsPerL; return (OK); default: return (E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/numd2/0000755000175000017500000000000013546075722020210 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/numd2/numd2ext.h0000644000175000017500000000163513546075722022134 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Karti Mayaram **********/ #ifndef NUMD2EXT_H #define NUMD2EXT_H extern int NUMD2acLoad(GENmodel *, CKTcircuit *); extern int NUMD2ask(CKTcircuit *, GENinstance *, int, IFvalue *, IFvalue *); extern int NUMD2delete(GENinstance *); extern int NUMD2getic(GENmodel *, CKTcircuit *); extern int NUMD2load(GENmodel *, CKTcircuit *); extern int NUMD2mParam(int, IFvalue *, GENmodel *); extern int NUMD2param(int, IFvalue *, GENinstance *, IFvalue *); extern int NUMD2pzLoad(GENmodel *, CKTcircuit *, SPcomplex *); extern int NUMD2setup(SMPmatrix *, GENmodel *, CKTcircuit *, int *); extern int NUMD2temp(GENmodel *, CKTcircuit *); extern int NUMD2trunc(GENmodel *, CKTcircuit *, double *); extern void NUMD2dump(GENmodel *, CKTcircuit *); extern void NUMD2acct(GENmodel *, CKTcircuit *, FILE *); #endif /* NUMD2EXT_H */ tmpk8ny_4pz/src/spicelib/devices/numd2/numd2itf.h0000644000175000017500000000027313546075722022113 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_NUMD2 #define DEV_NUMD2 extern SPICEdev *get_numd2_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/numd2/Makefile.am0000644000175000017500000000072213546075722022245 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libnumd2.la libnumd2_la_SOURCES = \ nud2.c \ nud2acld.c \ nud2ask.c \ numd2def.h \ nud2del.c \ nud2dump.c \ numd2ext.h \ numd2init.c \ numd2init.h \ numd2itf.h \ nud2load.c \ nud2mpar.c \ nud2parm.c \ nud2pzld.c \ nud2set.c \ nud2temp.c \ nud2trun.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/numd2/nud2parm.c0000644000175000017500000000215613546075722022110 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "numd2def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int NUMD2param(int param, IFvalue *value, GENinstance *inInst, IFvalue *select) { NUMD2instance *inst = (NUMD2instance *) inInst; NG_IGNORE(select); switch (param) { case NUMD2_WIDTH: inst->NUMD2width = value->rValue; inst->NUMD2widthGiven = TRUE; break; case NUMD2_AREA: inst->NUMD2area = value->rValue; inst->NUMD2areaGiven = TRUE; break; case NUMD2_OFF: inst->NUMD2off = TRUE; break; case NUMD2_IC_FILE: inst->NUMD2icFile = value->sValue; inst->NUMD2icFileGiven = TRUE; break; case NUMD2_PRINT: inst->NUMD2print = value->iValue; inst->NUMD2printGiven = TRUE; break; case NUMD2_TEMP: inst->NUMD2temp = value->rValue + CONSTCtoK; inst->NUMD2tempGiven = TRUE; break; default: return (E_BADPARM); } return (OK); } tmpk8ny_4pz/src/spicelib/devices/numd2/numd2init.h0000644000175000017500000000040213546075722022266 0ustar carstencarsten#ifndef _NUMD2INIT_H #define _NUMD2INIT_H extern IFparm NUMD2pTable[ ]; extern IFparm NUMD2mPTable[ ]; extern char *NUMD2names[ ]; extern int NUMD2pTSize; extern int NUMD2mPTSize; extern int NUMD2nSize; extern int NUMD2iSize; extern int NUMD2mSize; #endif tmpk8ny_4pz/src/spicelib/devices/numd2/nud2trun.c0000644000175000017500000000257713546075722022150 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "numd2def.h" #include "ngspice/sperror.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/suffix.h" #include "ngspice/cidersupt.h" int NUMD2trunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { register NUMD2model *model = (NUMD2model *) inModel; register NUMD2instance *inst; double deltaNew; double deltaNorm[7]; double startTime; int i; for (i = 0; i <= ckt->CKTmaxOrder; i++) { deltaNorm[i] = ckt->CKTdeltaOld[i] / TNorm; } for (; model != NULL; model = NUMD2nextModel(model)) { OneCarrier = model->NUMD2methods->METHoneCarrier; model->NUMD2pInfo->order = ckt->CKTorder; model->NUMD2pInfo->delta = deltaNorm; model->NUMD2pInfo->lteCoeff = computeLTECoeff(model->NUMD2pInfo); for (inst = NUMD2instances(model); inst != NULL; inst = NUMD2nextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); deltaNew = TWOtrunc(inst->NUMD2pDevice, model->NUMD2pInfo, ckt->CKTdelta); *timeStep = MIN(*timeStep, deltaNew); inst->NUMD2pDevice->pStats->totalTime[STAT_TRAN] += SPfrontEnd->IFseconds() - startTime; } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/numd2/nud2.c0000644000175000017500000000425713546075722021234 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "numd2def.h" #include "ngspice/suffix.h" /* * This file defines the 2d Numerical Diode data structures that are * available to the next level(s) up the calling hierarchy */ IFparm NUMD2pTable[] = { /* parameters */ IP("off", NUMD2_OFF, IF_FLAG, "Initially off"), IP("ic.file", NUMD2_IC_FILE, IF_STRING, "Initial condition file"), IOP("w", NUMD2_WIDTH, IF_REAL, "Width factor"), IOP("area", NUMD2_AREA, IF_REAL, "Area factor"), IP("save", NUMD2_PRINT, IF_INTEGER, "Save solutions"), IPR("print", NUMD2_PRINT, IF_INTEGER, "Print solutions"), OP("vd", NUMD2_VD, IF_REAL, "Voltage"), OPR("voltage", NUMD2_VD, IF_REAL, "Voltage"), OP("id", NUMD2_ID, IF_REAL, "Current"), OPR("current", NUMD2_ID, IF_REAL, "Current"), OP("g11", NUMD2_G11, IF_REAL, "Conductance"), OPR("conductance", NUMD2_G11, IF_REAL, "Conductance"), OP("c11", NUMD2_C11, IF_REAL, "Capacitance"), OPR("capacitance", NUMD2_C11, IF_REAL, "Capacitance"), OP("y11", NUMD2_Y11, IF_COMPLEX, "Admittance"), OPU("g12", NUMD2_G12, IF_REAL, "Conductance"), OPU("c12", NUMD2_C12, IF_REAL, "Capacitance"), OPU("y12", NUMD2_Y12, IF_COMPLEX, "Admittance"), OPU("g21", NUMD2_G21, IF_REAL, "Conductance"), OPU("c21", NUMD2_C21, IF_REAL, "Capacitance"), OPU("y21", NUMD2_Y21, IF_COMPLEX, "Admittance"), OPU("g22", NUMD2_G22, IF_REAL, "Conductance"), OPU("c22", NUMD2_C22, IF_REAL, "Capacitance"), OPU("y22", NUMD2_Y22, IF_COMPLEX, "Admittance"), IOP("temp", NUMD2_TEMP, IF_REAL, "Instance Temperature") }; IFparm NUMD2mPTable[] = { /* model parameters */ /* numerical-device models no longer have parameters */ /* one is left behind to keep the table from being empty */ IP("numd", NUMD2_MOD_NUMD, IF_FLAG, "Numerical 2d-Diode Model") }; char *NUMD2names[] = { "Anode", "Cathode" }; int NUMD2nSize = NUMELEMS(NUMD2names); int NUMD2pTSize = NUMELEMS(NUMD2pTable); int NUMD2mPTSize = NUMELEMS(NUMD2mPTable); int NUMD2iSize = sizeof(NUMD2instance); int NUMD2mSize = sizeof(NUMD2model); tmpk8ny_4pz/src/spicelib/devices/numd2/numd2init.c0000644000175000017500000000320613546075722022266 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "numd2itf.h" #include "numd2ext.h" #include "numd2init.h" SPICEdev NUMD2info = { .DEVpublic = { .name = "NUMD2", .description = "2D Numerical Junction Diode model", .terms = &NUMD2nSize, .numNames = &NUMD2nSize, .termNames = NUMD2names, .numInstanceParms = &NUMD2pTSize, .instanceParms = NUMD2pTable, .numModelParms = &NUMD2mPTSize, .modelParms = NUMD2mPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = NUMD2param, .DEVmodParam = NUMD2mParam, .DEVload = NUMD2load, .DEVsetup = NUMD2setup, .DEVunsetup = NULL, .DEVpzSetup = NUMD2setup, .DEVtemperature = NUMD2temp, .DEVtrunc = NUMD2trunc, .DEVfindBranch = NULL, .DEVacLoad = NUMD2acLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NUMD2delete, .DEVsetic = NULL, .DEVask = NUMD2ask, .DEVmodAsk = NULL, .DEVpzLoad = NUMD2pzLoad, .DEVconvTest = NULL, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &NUMD2iSize, .DEVmodSize = &NUMD2mSize, #ifdef CIDER .DEVdump = NUMD2dump, .DEVacct = NUMD2acct, #endif }; SPICEdev * get_numd2_info(void) { return &NUMD2info; } tmpk8ny_4pz/src/spicelib/devices/numd2/nud2del.c0000644000175000017500000000077513546075722021722 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "numd2def.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int NUMD2delete(GENinstance *gen_inst) { NUMD2instance *inst = (NUMD2instance *) gen_inst; TWOdestroy(inst->NUMD2pDevice); return OK; } tmpk8ny_4pz/src/spicelib/devices/numd2/nud2acld.c0000644000175000017500000000472513546075722022060 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * Function to load the COMPLEX circuit matrix using the small signal * parameters saved during a previous DC operating point analysis. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "numd2def.h" #include "ngspice/sperror.h" #include "ngspice/complex.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/cidersupt.h" #include "ngspice/numglobs.h" #include "ngspice/suffix.h" int NUMD2acLoad(GENmodel *inModel, CKTcircuit *ckt) { register NUMD2model *model = (NUMD2model *) inModel; register NUMD2instance *inst; SPcomplex y; double startTime; /* loop through all the diode models */ for (; model != NULL; model = NUMD2nextModel(model)) { FieldDepMobility = model->NUMD2models->MODLfieldDepMobility; TransDepMobility = model->NUMD2models->MODLtransDepMobility; SurfaceMobility = model->NUMD2models->MODLsurfaceMobility; Srh = model->NUMD2models->MODLsrh; Auger = model->NUMD2models->MODLauger; AvalancheGen = model->NUMD2models->MODLavalancheGen; OneCarrier = model->NUMD2methods->METHoneCarrier; AcAnalysisMethod = model->NUMD2methods->METHacAnalysisMethod; MobDeriv = model->NUMD2methods->METHmobDeriv; TWOacDebug = model->NUMD2outputs->OUTPacDebug; for (inst = NUMD2instances(model); inst != NULL; inst = NUMD2nextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); /* Get Temp.-Dep. Global Parameters */ GLOBgetGlobals(&(inst->NUMD2globals)); model->NUMD2methods->METHacAnalysisMethod = NUMD2admittance(inst->NUMD2pDevice, ckt->CKTomega, &y); *(inst->NUMD2posPosPtr) += y.real; *(inst->NUMD2posPosPtr + 1) += y.imag; *(inst->NUMD2negNegPtr) += y.real; *(inst->NUMD2negNegPtr + 1) += y.imag; *(inst->NUMD2negPosPtr) -= y.real; *(inst->NUMD2negPosPtr + 1) -= y.imag; *(inst->NUMD2posNegPtr) -= y.real; *(inst->NUMD2posNegPtr + 1) -= y.imag; if (ckt->CKTomega != 0.0) { inst->NUMD2c11 = y.imag / ckt->CKTomega; } else { inst->NUMD2c11 = 0.0; /* XXX What else can be done?! */ } inst->NUMD2y11r = y.real; inst->NUMD2y11i = y.imag; inst->NUMD2smSigAvail = TRUE; inst->NUMD2pDevice->pStats->totalTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/numd2/nud2dump.c0000644000175000017500000001033613546075722022115 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ /* * This is a simple routine to dump the internal device states. It produces * states for .OP, .DC, & .TRAN simulations. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "numd2def.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" /* Forward Declarations */ static void NUMD2putHeader(FILE *, CKTcircuit *, NUMD2instance *); /* State Counter */ static int state_numOP = 0; static int state_numDC = 0; static int state_numTR = 0; void NUMD2dump(GENmodel *inModel, CKTcircuit *ckt) { register NUMD2model *model = (NUMD2model *) inModel; register NUMD2instance *inst; OUTPcard *output; FILE *fpState; char fileName[BSIZE_SP]; char description[BSIZE_SP]; char *prefix; int *state_num; int anyOutput = 0; if (ckt->CKTmode & MODEDCOP) { prefix = "OP"; state_num = &state_numOP; sprintf(description, "..."); } else if (ckt->CKTmode & MODEDCTRANCURVE) { prefix = "DC"; state_num = &state_numDC; sprintf(description, "sweep = % e", ckt->CKTtime); } else if (ckt->CKTmode & MODETRAN) { prefix = "TR"; state_num = &state_numTR; sprintf(description, "time = % e", ckt->CKTtime); } else { /* Not a recognized CKT mode. */ return; } for (; model != NULL; model = NUMD2nextModel(model)) { output = model->NUMD2outputs; for (inst = NUMD2instances(model); inst != NULL; inst = NUMD2nextInstance(inst)) { if (inst->NUMD2printGiven) { if ((ckt->CKTmode & MODETRAN) && ((ckt->CKTstat->STATaccepted - 1) % inst->NUMD2print != 0)) { continue; } anyOutput = 1; sprintf(fileName, "%s%s.%d.%s", output->OUTProotFile, prefix, *state_num, inst->NUMD2name); if ((fpState = fopen(fileName, "wb")) == NULL) { perror(fileName); } else { NUMD2putHeader(fpState, ckt, inst); TWOprnSolution(fpState, inst->NUMD2pDevice, model->NUMD2outputs); fclose(fpState); LOGmakeEntry(fileName, description); } } } } if (anyOutput) { (*state_num)++; } } #define NUMD2numOutputs 4 static void NUMD2putHeader(FILE *file, CKTcircuit *ckt, NUMD2instance *inst) { char *reference; double refVal = 0.0; int numVars = NUMD2numOutputs; if (ckt->CKTmode & MODEDCOP) { reference = NULL; } else if (ckt->CKTmode & MODEDCTRANCURVE) { reference = "sweep"; refVal = ckt->CKTtime; numVars++; } else if (ckt->CKTmode & MODETRAN) { reference = "time"; refVal = ckt->CKTtime; numVars++; } else { reference = NULL; } fprintf(file, "Title: Device %s external state\n", inst->NUMD2name); fprintf(file, "Plotname: Device Operating Point\n"); fprintf(file, "Command: deftype v conductance S\n"); fprintf(file, "Flags: real\n"); fprintf(file, "No. Variables: %d\n", numVars); fprintf(file, "No. Points: 1\n"); numVars = 0; fprintf(file, "Variables:\n"); if (reference) { fprintf(file, "\t%d %s unknown\n", numVars++, reference); } fprintf(file, "\t%d v12 voltage\n", numVars++); fprintf(file, "\t%d i1 current\n", numVars++); fprintf(file, "\t%d i2 current\n", numVars++); fprintf(file, "\t%d g11 conductance\n", numVars++); fprintf(file, "Values:\n0"); if (reference) { fprintf(file, "\t% e\n", refVal); } fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NUMD2voltage)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NUMD2id)); fprintf(file, "\t% e\n", - *(ckt->CKTstate0 + inst->NUMD2id)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NUMD2conduct)); } void NUMD2acct(GENmodel *inModel, CKTcircuit *ckt, FILE *file) { register NUMD2model *model = (NUMD2model *) inModel; register NUMD2instance *inst; OUTPcard *output; NG_IGNORE(ckt); for (; model != NULL; model = NUMD2nextModel(model)) { output = model->NUMD2outputs; for (inst = NUMD2instances(model); inst != NULL; inst = NUMD2nextInstance(inst)) { if (output->OUTPstats) { TWOmemStats(file, inst->NUMD2pDevice); TWOcpuStats(file, inst->NUMD2pDevice); } } } } tmpk8ny_4pz/src/spicelib/devices/numd2/nud2load.c0000644000175000017500000003031013546075722022061 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * This is the function called each iteration to evaluate the 2d numerical * Diodes in the circuit and load them into the matrix as appropriate */ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/cktdefs.h" #include "numd2def.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" /* Forward declarations */ int NUMD2initSmSig(NUMD2instance *); int NUMD2load(GENmodel *inModel, CKTcircuit *ckt) { register NUMD2model *model = (NUMD2model *) inModel; register NUMD2instance *inst; register TWOdevice *pDevice; double startTime, startTime2, totalTime, totalTime2; double id; double idhat = 0.0; double ideq; double gd; double xfact; double tol; /* temporary for tolerance calculations */ double vd; /* current diode voltage */ double delVd; int Check; double deltaNorm[7]; int devConverged = FALSE; int i; int numDevNonCon; int deviceType; int doInitSolve; int doVoltPred; char *initStateName; /* loop through all the diode models */ for (; model != NULL; model = NUMD2nextModel(model)) { FieldDepMobility = model->NUMD2models->MODLfieldDepMobility; TransDepMobility = model->NUMD2models->MODLtransDepMobility; SurfaceMobility = model->NUMD2models->MODLsurfaceMobility; Srh = model->NUMD2models->MODLsrh; Auger = model->NUMD2models->MODLauger; AvalancheGen = model->NUMD2models->MODLavalancheGen; OneCarrier = model->NUMD2methods->METHoneCarrier; MobDeriv = model->NUMD2methods->METHmobDeriv; MaxIterations = model->NUMD2methods->METHitLim; TWOdcDebug = model->NUMD2outputs->OUTPdcDebug; TWOtranDebug = model->NUMD2outputs->OUTPtranDebug; TWOacDebug = model->NUMD2outputs->OUTPacDebug; deviceType = model->NUMD2options->OPTNdeviceType; doVoltPred = model->NUMD2methods->METHvoltPred; if (ckt->CKTmode & MODEINITPRED) { /* compute normalized deltas and predictor coeff */ if (!(ckt->CKTmode & MODEDCTRANCURVE)) { model->NUMD2pInfo->order = ckt->CKTorder; model->NUMD2pInfo->method = ckt->CKTintegrateMethod; for (i = 0; i <= ckt->CKTmaxOrder; i++) { deltaNorm[i] = ckt->CKTdeltaOld[i] / TNorm; } computeIntegCoeff(ckt->CKTintegrateMethod, ckt->CKTorder, model->NUMD2pInfo->intCoeff, deltaNorm); computePredCoeff(ckt->CKTintegrateMethod, ckt->CKTorder, model->NUMD2pInfo->predCoeff, deltaNorm); } } else if (ckt->CKTmode & MODEINITTRAN) { model->NUMD2pInfo->order = ckt->CKTorder; /* model->NUMD2pInfo->method = GEAR; */ model->NUMD2pInfo->method = ckt->CKTintegrateMethod; for (i = 0; i <= ckt->CKTmaxOrder; i++) { deltaNorm[i] = ckt->CKTdeltaOld[i] / TNorm; } computeIntegCoeff(ckt->CKTintegrateMethod, ckt->CKTorder, model->NUMD2pInfo->intCoeff, deltaNorm); } /* loop through all the instances of the model */ for (inst = NUMD2instances(model); inst != NULL; inst = NUMD2nextInstance(inst)) { pDevice = inst->NUMD2pDevice; totalTime = 0.0; startTime = SPfrontEnd->IFseconds(); /* Get Temp.-Dep. Global Parameters */ GLOBgetGlobals(&(inst->NUMD2globals)); pDevice->devStates = ckt->CKTstates; /* * initialization */ Check = 1; doInitSolve = FALSE; initStateName = NULL; if (ckt->CKTmode & MODEINITSMSIG) { vd = *(ckt->CKTstate0 + inst->NUMD2voltage); delVd = 0.0; NUMD2setBCs(pDevice, vd); } else if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate0 + inst->NUMD2voltage) = *(ckt->CKTstate1 + inst->NUMD2voltage); vd = *(ckt->CKTstate1 + inst->NUMD2voltage); TWOsaveState(pDevice); delVd = 0.0; } else if ((ckt->CKTmode & MODEINITJCT) && (ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) { doInitSolve = TRUE; initStateName = inst->NUMD2icFile; vd = 0.0; delVd = vd; } else if ((ckt->CKTmode & MODEINITJCT) && inst->NUMD2off) { doInitSolve = TRUE; vd = 0.0; delVd = vd; } else if (ckt->CKTmode & MODEINITJCT) { doInitSolve = TRUE; initStateName = inst->NUMD2icFile; if (deviceType == OPTN_DIODE) { vd = inst->NUMD2type * 0.6; } else if (deviceType == OPTN_MOSCAP) { vd = inst->NUMD2type * 0.8; } else { vd = 0.0; } delVd = vd; } else if (ckt->CKTmode & MODEINITFIX && inst->NUMD2off) { vd = 0.0; delVd = vd; } else { if (ckt->CKTmode & MODEINITPRED) { *(ckt->CKTstate0 + inst->NUMD2voltage) = *(ckt->CKTstate1 + inst->NUMD2voltage); *(ckt->CKTstate0 + inst->NUMD2id) = *(ckt->CKTstate1 + inst->NUMD2id); *(ckt->CKTstate0 + inst->NUMD2conduct) = *(ckt->CKTstate1 + inst->NUMD2conduct); if (!(ckt->CKTmode & MODEDCTRANCURVE)) { /* no linear prediction on device voltages */ vd = *(ckt->CKTstate1 + inst->NUMD2voltage); TWOpredict(pDevice, model->NUMD2pInfo); } else { if (doVoltPred) { /* linear prediction */ xfact=ckt->CKTdelta/ckt->CKTdeltaOld[1]; vd = (1+xfact) * (*(ckt->CKTstate1 + inst->NUMD2voltage)) - (xfact) * (*(ckt->CKTstate2 + inst->NUMD2voltage)); } else { vd = *(ckt->CKTstate1 + inst->NUMD2voltage); } } } else { vd = *(ckt->CKTrhsOld + inst->NUMD2posNode) - *(ckt->CKTrhsOld + inst->NUMD2negNode); } delVd = vd - *(ckt->CKTstate0 + inst->NUMD2voltage); idhat = *(ckt->CKTstate0 + inst->NUMD2id) + *(ckt->CKTstate0 + inst->NUMD2conduct) * delVd; /* * bypass if solution has not changed */ if ((ckt->CKTbypass) && pDevice->converged && !(ckt->CKTmode & MODEINITPRED)) { tol = ckt->CKTvoltTol + ckt->CKTreltol * MAX(fabs(vd), fabs(*(ckt->CKTstate0 + inst->NUMD2voltage))); if (fabs(delVd) < tol) { tol = ckt->CKTreltol * MAX(fabs(idhat), fabs(*(ckt->CKTstate0 + inst->NUMD2id))) + ckt->CKTabstol; if (fabs(idhat - *(ckt->CKTstate0 + inst->NUMD2id)) < tol) { vd = *(ckt->CKTstate0 + inst->NUMD2voltage); id = *(ckt->CKTstate0 + inst->NUMD2id); gd = *(ckt->CKTstate0 + inst->NUMD2conduct); goto load; } } } /* * limit new junction voltage */ if (deviceType == OPTN_DIODE) { vd = inst->NUMD2type * limitJunctionVoltage( inst->NUMD2type * vd, inst->NUMD2type * *(ckt->CKTstate0 + inst->NUMD2voltage), &Check); } else if (deviceType == OPTN_MOSCAP) { vd = inst->NUMD2type * limitVgb( inst->NUMD2type * vd, inst->NUMD2type * *(ckt->CKTstate0 + inst->NUMD2voltage), &Check); } else { vd = inst->NUMD2type * limitResistorVoltage( inst->NUMD2type * vd, inst->NUMD2type * *(ckt->CKTstate0 + inst->NUMD2voltage), &Check); } delVd = vd - *(ckt->CKTstate0 + inst->NUMD2voltage); NUMD2setBCs(pDevice, vd - delVd); } if (doInitSolve) { if (TWOdcDebug) { printVoltages(stdout, model->NUMD2modName, inst->NUMD2name, deviceType, 1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); } startTime2 = SPfrontEnd->IFseconds(); TWOequilSolve(pDevice); totalTime2 = SPfrontEnd->IFseconds() - startTime2; pDevice->pStats->totalTime[STAT_SETUP] += totalTime2; pDevice->pStats->totalTime[STAT_DC] -= totalTime2; TWObiasSolve(pDevice, MaxIterations, FALSE, NULL); *(ckt->CKTstate0 + inst->NUMD2voltage) = 0.0; if (initStateName != NULL) { if (TWOreadState(pDevice, initStateName, 1, &vd, NULL, NULL ) < 0) { fprintf(stderr, "NUMD2load: trouble reading state-file %s\n", initStateName); } else { *(ckt->CKTstate0 + inst->NUMD2voltage) = vd; NUMD2setBCs(pDevice, vd); delVd = 0.0; } } } /* * compute dc current and derivitives */ /* use the routines for numerical simulation */ if (ckt->CKTmode & (MODEDCOP | MODETRANOP | MODEDCTRANCURVE | MODEINITSMSIG)) { numDevNonCon = 0; inst->NUMD2c11 = inst->NUMD2y11r = inst->NUMD2y11i = 0.0; inst->NUMD2smSigAvail = FALSE; devNonCon: NUMD2project(pDevice, delVd); if (TWOdcDebug) { printVoltages(stdout, model->NUMD2modName, inst->NUMD2name, deviceType, 1, vd, delVd, 0.0, 0.0, 0.0, 0.0); } TWObiasSolve(pDevice, MaxIterations, FALSE, model->NUMD2pInfo); devConverged = pDevice->converged; if (devConverged && finite(pDevice->rhsNorm)) { /* extract the current and conductance information */ NUMD2current(pDevice, FALSE, NULL, &id); NUMD2conductance(pDevice, FALSE, NULL, &gd); } else { /* do voltage step backtracking */ /* restore the boundary nodes to the previous value */ NUMD2setBCs(pDevice, vd - delVd); TWOstoreInitialGuess(pDevice); TWOresetJacobian(pDevice); delVd *= 0.5; vd = delVd + *(ckt->CKTstate0 + inst->NUMD2voltage); numDevNonCon++; Check = 1; if (numDevNonCon > 10) { printVoltages(stderr, model->NUMD2modName, inst->NUMD2name, deviceType, 1, vd, delVd, 0.0, 0.0, 0.0, 0.0); fprintf(stderr, "*** Non-convergence during load ***\n"); totalTime += SPfrontEnd->IFseconds() - startTime; pDevice->pStats->totalTime[STAT_DC] += totalTime; ckt->CKTtroubleElt = (GENinstance *) inst; return (E_BADMATRIX); } else { goto devNonCon; } } } if ( (ckt->CKTmode & (MODETRAN | MODEAC | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) { /* * store small-signal parameters */ if ((!(ckt->CKTmode & MODETRANOP)) || (!(ckt->CKTmode & MODEUIC))) { if (ckt->CKTmode & MODEINITSMSIG) { totalTime = SPfrontEnd->IFseconds() - startTime; pDevice->pStats->totalTime[STAT_DC] += totalTime; startTime2 = SPfrontEnd->IFseconds(); NUMD2initSmSig(inst); pDevice->pStats->totalTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime2; continue; } else { inst->NUMD2smSigAvail = FALSE; } /* * transient analysis */ if (ckt->CKTmode & MODEINITPRED) { NUMD2setBCs(pDevice, vd); TWOstoreInitialGuess(pDevice); } else { NUMD2update(pDevice, delVd, TRUE); } if (TWOtranDebug) { printVoltages(stdout, model->NUMD2modName, inst->NUMD2name, deviceType, 1, vd, delVd, 0.0, 0.0, 0.0, 0.0); } TWObiasSolve(pDevice, 0, TRUE, model->NUMD2pInfo); if (!finite(pDevice->rhsNorm)) { totalTime += SPfrontEnd->IFseconds() - startTime; pDevice->pStats->totalTime[STAT_TRAN] += totalTime; ckt->CKTtroubleElt = (GENinstance *) inst; return (E_BADMATRIX); } devConverged = TWOdeviceConverged(pDevice); pDevice->converged = devConverged; /* extract the current and conductance information */ NUMD2current(pDevice, TRUE, model->NUMD2pInfo->intCoeff, &id); NUMD2conductance(pDevice, TRUE, model->NUMD2pInfo->intCoeff, &gd); } } /* * check convergence */ if ((!(ckt->CKTmode & MODEINITFIX)) || (!(inst->NUMD2off))) { if (Check == 1 || !devConverged) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) inst; } else { tol = ckt->CKTreltol * MAX(fabs(idhat), fabs(id)) + ckt->CKTabstol; if (fabs(idhat - id) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) inst; } } } *(ckt->CKTstate0 + inst->NUMD2voltage) = vd; *(ckt->CKTstate0 + inst->NUMD2id) = id; *(ckt->CKTstate0 + inst->NUMD2conduct) = gd; load: /* * load current vector */ ideq = id - gd * vd; *(ckt->CKTrhs + inst->NUMD2negNode) += ideq; *(ckt->CKTrhs + inst->NUMD2posNode) -= ideq; /* * load matrix */ *(inst->NUMD2posPosPtr) += gd; *(inst->NUMD2negNegPtr) += gd; *(inst->NUMD2negPosPtr) -= gd; *(inst->NUMD2posNegPtr) -= gd; totalTime += SPfrontEnd->IFseconds() - startTime; if (ckt->CKTmode & MODETRAN) { pDevice->pStats->totalTime[STAT_TRAN] += totalTime; } else { pDevice->pStats->totalTime[STAT_DC] += totalTime; } } } return (OK); } int NUMD2initSmSig(NUMD2instance *inst) { SPcomplex yd; double omega = NUMD2modPtr(inst)->NUMD2methods->METHomega; AcAnalysisMethod = SOR_ONLY; (void) NUMD2admittance(inst->NUMD2pDevice, omega, &yd); inst->NUMD2c11 = yd.imag / omega; inst->NUMD2y11r = yd.real; inst->NUMD2y11i = yd.imag; inst->NUMD2smSigAvail = TRUE; return (OK); } tmpk8ny_4pz/src/spicelib/devices/numd2/nud2mpar.c0000644000175000017500000000134113546075722022103 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * This routine sets model parameters for NUMD2s in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "numd2def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int NUMD2mParam(int param, IFvalue *value, GENmodel *inModel) { NG_IGNORE(value); NG_IGNORE(inModel); switch (param) { case NUMD2_MOD_NUMD: /* no action - already know it is a 2d-numerical diode, but this */ /* makes life easier for spice-2 like parsers */ break; default: return (E_BADPARM); } return (OK); } tmpk8ny_4pz/src/spicelib/devices/numd2/nud2set.c0000644000175000017500000002035213546075722021742 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "numd2def.h" #include "ngspice/numconst.h" #include "ngspice/numenum.h" #include "ngspice/meshext.h" #include "ngspice/sperror.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/cidersupt.h" #include "ngspice/ciderinp.h" #include "ngspice/suffix.h" #define TSCALLOC(var, size, type)\ if (size && (var =(type *)calloc(1, (unsigned)(size)*sizeof(type))) == NULL) {\ return(E_NOMEM);\ } int NUMD2setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* * load the structure with those pointers needed later for fast matrix * loading */ { register NUMD2model *model = (NUMD2model *) inModel; register NUMD2instance *inst; METHcard *methods; MODLcard *models; OPTNcard *options; OUTPcard *outputs; int error, xIndex; int xMeshSize, yMeshSize; TWOdevice *pDevice; TWOcoord *xCoordList = NULL; TWOcoord *yCoordList = NULL; TWOdomain *domainList = NULL; TWOelectrode *electrodeList = NULL; TWOmaterial *pM, *pMaterial = NULL, *materialList = NULL; DOPprofile *profileList = NULL; DOPtable *dopTableList = NULL; double startTime; /* loop through all the models */ for (; model != NULL; model = NUMD2nextModel(model)) { if (!model->NUMD2pInfo) { TSCALLOC(model->NUMD2pInfo, 1, TWOtranInfo); } methods = model->NUMD2methods; if (!methods) { TSCALLOC(methods, 1, METHcard); model->NUMD2methods = methods; } models = model->NUMD2models; if (!models) { TSCALLOC(models, 1, MODLcard); model->NUMD2models = models; } options = model->NUMD2options; if (!options) { TSCALLOC(options, 1, OPTNcard); model->NUMD2options = options; } outputs = model->NUMD2outputs; if (!outputs) { TSCALLOC(outputs, 1, OUTPcard); model->NUMD2outputs = outputs; } if (!methods->METHvoltPredGiven) { methods->METHvoltPred = FALSE; } if (!methods->METHmobDerivGiven) { methods->METHmobDeriv = TRUE; } if (!methods->METHoneCarrierGiven) { methods->METHoneCarrier = FALSE; } if (!methods->METHacAnalysisMethodGiven) { methods->METHacAnalysisMethod = SOR; } if (!methods->METHdabstolGiven) { methods->METHdabstol = DABSTOL2D; } if (!methods->METHdreltolGiven) { methods->METHdreltol = ckt->CKTreltol; } if (!methods->METHitLimGiven) { methods->METHitLim = 50; } if (!methods->METHomegaGiven || methods->METHomega <= 0.0) { methods->METHomega = 2.0 * M_PI /* radians/sec */ ; } if (!options->OPTNdefaGiven || options->OPTNdefa <= 0.0) { options->OPTNdefa = 1.0e4 /* cm^2 */ ; } if (!options->OPTNdeflGiven || options->OPTNdefl <= 0.0) { options->OPTNdefl = 1.0e2 /* cm */ ; } if (!options->OPTNdefwGiven && options->OPTNdefaGiven) { options->OPTNdefw = options->OPTNdefa / options->OPTNdefl; } else if (!options->OPTNdefwGiven || options->OPTNdefw <= 0.0) { options->OPTNdefw = 1.0e2 /* cm */ ; } if (!options->OPTNdeviceTypeGiven) { options->OPTNdeviceType = OPTN_DIODE; } if (!options->OPTNicFileGiven) { options->OPTNicFile = NULL; options->OPTNunique = FALSE; /* Can't form a unique name. */ } if (!options->OPTNuniqueGiven) { options->OPTNunique = FALSE; } OneCarrier = methods->METHoneCarrier; /* Set up the rest of the card lists */ if ((error = MODLsetup(model->NUMD2models)) != 0) return (error); BandGapNarrowing = models->MODLbandGapNarrowing; ConcDepLifetime = models->MODLconcDepLifetime; TempDepMobility = models->MODLtempDepMobility; ConcDepMobility = models->MODLconcDepMobility; SurfaceMobility = models->MODLsurfaceMobility; if ((error = OUTPsetup(model->NUMD2outputs)) != 0) return (error); if ((error = MATLsetup(model->NUMD2materials, &materialList)) != 0) return (error); if ((error = MOBsetup(model->NUMD2mobility, materialList)) != 0) return (error); if ((error = MESHsetup('x', model->NUMD2xMeshes, &xCoordList, &xMeshSize)) != 0) return (error); if ((error = MESHsetup('y', model->NUMD2yMeshes, &yCoordList, &yMeshSize)) != 0) return (error); if ((error = DOMNsetup(model->NUMD2domains, &domainList, xCoordList, yCoordList, materialList)) != 0) return (error); if ((error = BDRYsetup(model->NUMD2boundaries, xCoordList, yCoordList, domainList)) != 0) return (error); if ((error = ELCTsetup(model->NUMD2electrodes, &electrodeList, xCoordList, yCoordList)) != 0) return (error); /* Make sure electrodes are OK. */ checkElectrodes(electrodeList, 2); /* NUMD2 has 4 electrodes */ if ((error = CONTsetup(model->NUMD2contacts, electrodeList)) != 0) return (error); if ((error = DOPsetup(model->NUMD2dopings, &profileList, &dopTableList, xCoordList, yCoordList)) != 0) return (error); model->NUMD2matlInfo = materialList; model->NUMD2profiles = profileList; model->NUMD2dopTables = dopTableList; /* loop through all the instances of the model */ for (inst = NUMD2instances(model); inst != NULL; inst = NUMD2nextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); if (!inst->NUMD2printGiven) { inst->NUMD2print = 0; } else if (inst->NUMD2print <= 0) { inst->NUMD2print = 1; } if (!inst->NUMD2icFileGiven) { if (options->OPTNunique) { inst->NUMD2icFile = tprintf("%s.%s", options->OPTNicFile, inst->NUMD2name); } else if (options->OPTNicFile != NULL) { inst->NUMD2icFile = tprintf("%s", options->OPTNicFile); } else { inst->NUMD2icFile = NULL; } } inst->NUMD2state = *states; *states += NUMD2numStates; if (!inst->NUMD2pDevice) { /* Assign the mesh and profile info to each instance. */ TSCALLOC(pDevice, 1, TWOdevice); TSCALLOC(pDevice->pStats, 1, TWOstats); pDevice->name = inst->NUMD2name; pDevice->solverType = SLV_NONE; pDevice->numXNodes = xMeshSize; pDevice->numYNodes = yMeshSize; pDevice->xScale = MESHmkArray(xCoordList, xMeshSize); pDevice->yScale = MESHmkArray(yCoordList, yMeshSize); pDevice->abstol = methods->METHdabstol; pDevice->reltol = methods->METHdreltol; TSCALLOC(pDevice->elemArray, pDevice->numXNodes, TWOelem **); for (xIndex = 1; xIndex < pDevice->numXNodes; xIndex++) { TSCALLOC(pDevice->elemArray[xIndex], pDevice->numYNodes, TWOelem *); } /* Create a copy of material data that can change with temperature. */ pDevice->pMaterials = NULL; for (pM = materialList; pM != NULL; pM = pM->next) { if (pDevice->pMaterials == NULL) { TSCALLOC(pMaterial, 1, TWOmaterial); pDevice->pMaterials = pMaterial; } else { TSCALLOC(pMaterial->next, 1, TWOmaterial); pMaterial = pMaterial->next; } /* Copy everything, then fix the incorrect pointer. */ memcpy(pMaterial, pM, sizeof(TWOmaterial)); pMaterial->next = NULL; } /* Generate the mesh structure for the device. */ TWObuildMesh(pDevice, domainList, electrodeList, pDevice->pMaterials); /* Store the device info in the instance. */ inst->NUMD2pDevice = pDevice; } /* Now update the state pointers. */ TWOgetStatePointers(inst->NUMD2pDevice, states); /* Wipe out statistics from previous runs (if any). */ memset(inst->NUMD2pDevice->pStats, 0, sizeof(TWOstats)); inst->NUMD2pDevice->pStats->totalTime[STAT_SETUP] += SPfrontEnd->IFseconds() - startTime; /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if ((inst->ptr = SMPmakeElt(matrix, inst->first, inst->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(NUMD2posPosPtr, NUMD2posNode, NUMD2posNode); TSTALLOC(NUMD2negNegPtr, NUMD2negNode, NUMD2negNode); TSTALLOC(NUMD2negPosPtr, NUMD2negNode, NUMD2posNode); TSTALLOC(NUMD2posNegPtr, NUMD2posNode, NUMD2negNode); } /* Clean up lists */ killCoordInfo(xCoordList); killCoordInfo(yCoordList); killDomainInfo(domainList); killElectrodeInfo(electrodeList); } return (OK); } tmpk8ny_4pz/src/spicelib/devices/numd2/numd2def.h0000644000175000017500000001100713546075722022064 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors: 1987 Karti Mayaram, 1991 David Gates **********/ #ifndef NUMD2_H #define NUMD2_H /* data structures used to describe 2D numerical diodes */ /* circuit level includes */ #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" /* device level includes */ #include "ngspice/twomesh.h" #include "ngspice/twodev.h" #include "ngspice/profile.h" #include "ngspice/numglobs.h" #include "ngspice/carddefs.h" /* information needed per instance */ typedef struct sNUMD2instance { struct GENinstance gen; #define NUMD2modPtr(inst) ((struct sNUMD2model *)((inst)->gen.GENmodPtr)) #define NUMD2nextInstance(inst) ((struct sNUMD2instance *)((inst)->gen.GENnextInstance)) #define NUMD2name gen.GENname #define NUMD2state gen.GENstate #define NUMD2voltage NUMD2state #define NUMD2id NUMD2state+1 #define NUMD2conduct NUMD2state+2 #define NUMD2numStates 3 const int NUMD2posNode; /* number of positive node of diode */ const int NUMD2negNode; /* number of negative node of diode */ TWOdevice *NUMD2pDevice; GLOBvalues NUMD2globals; /* Temp.-Dep. Global Parameters */ int NUMD2type; /* device type pn or np */ double NUMD2width; /* width factor for the diode */ double NUMD2area; /* area factor for the diode */ double NUMD2temp; /* instance temperature */ double NUMD2c11; /* small-signal capacitance */ double NUMD2y11r; /* small-signal admittance, real part */ double NUMD2y11i; /* small-signal admittance, imag part */ int NUMD2print; /* number of timesteps after which print * internal */ char *NUMD2icFile; /* Name of initial condition file */ double *NUMD2negPosPtr; /* pointer to sparse matrix at * (negative,positive) */ double *NUMD2posNegPtr; /* pointer to sparse matrix at * (positive,negative) */ double *NUMD2posPosPtr; /* pointer to sparse matrix at * (positive,positive) */ double *NUMD2negNegPtr; /* pointer to sparse matrix at * (negative,negative) */ int NUMD2off; /* 'off' flag for diode */ unsigned NUMD2smSigAvail:1; /* flag to indicate small-signal done */ unsigned NUMD2widthGiven:1; /* flag to indicate width was specified */ unsigned NUMD2areaGiven:1; /* flag to indicate area was specified */ unsigned NUMD2icFileGiven:1; /* flag to indicate init. cond. file given */ unsigned NUMD2tempGiven:1; /* flag to indicate temp was specified */ unsigned NUMD2printGiven:1; /* flag to indicate if print was specified */ } NUMD2instance; /* per model data */ typedef struct sNUMD2model { /* model structure for a diode */ struct GENmodel gen; #define NUMD2modType gen.GENmodType #define NUMD2nextModel(inst) ((struct sNUMD2model *)((inst)->gen.GENnextModel)) #define NUMD2instances(inst) ((NUMD2instance *)((inst)->gen.GENinstances)) #define NUMD2modName gen.GENmodName MESHcard *NUMD2xMeshes; /* list of xmesh cards */ MESHcard *NUMD2yMeshes; /* list of ymesh cards */ DOMNcard *NUMD2domains; /* list of domain cards */ BDRYcard *NUMD2boundaries; /* list of boundary cards */ DOPcard *NUMD2dopings; /* list of doping cards */ ELCTcard *NUMD2electrodes; /* list of electrode cards */ CONTcard *NUMD2contacts; /* list of contact cards */ MODLcard *NUMD2models; /* list of model cards */ MATLcard *NUMD2materials; /* list of material cards */ MOBcard *NUMD2mobility; /* list of mobility cards */ METHcard *NUMD2methods; /* list of method cards */ OPTNcard *NUMD2options; /* list of option cards */ OUTPcard *NUMD2outputs; /* list of output cards */ TWOtranInfo *NUMD2pInfo; /* transient analysis information */ DOPprofile *NUMD2profiles; /* expanded list of doping profiles */ DOPtable *NUMD2dopTables; /* list of tables used by profiles */ TWOmaterial *NUMD2matlInfo; /* list of material info structures */ } NUMD2model; /* type of 2D diode */ #define PN 1 #define NP -1 /* device parameters */ #define NUMD2_WIDTH 1 #define NUMD2_AREA 2 #define NUMD2_IC_FILE 3 #define NUMD2_OFF 4 #define NUMD2_PRINT 5 #define NUMD2_TEMP 6 #define NUMD2_VD 7 #define NUMD2_ID 8 #define NUMD2_G11 9 #define NUMD2_C11 10 #define NUMD2_Y11 11 #define NUMD2_G12 12 #define NUMD2_C12 13 #define NUMD2_Y12 14 #define NUMD2_G21 15 #define NUMD2_C21 16 #define NUMD2_Y21 17 #define NUMD2_G22 18 #define NUMD2_C22 19 #define NUMD2_Y22 20 /* model parameters */ /* NOTE: all true model parameters have been moved to IFcardInfo structures */ #define NUMD2_MOD_NUMD 101 /* device questions */ /* model questions */ #include "numd2ext.h" #endif /* NUMD2_H */ tmpk8ny_4pz/src/spicelib/devices/numd2/nud2temp.c0000644000175000017500000000706113546075722022116 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1992 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "numd2def.h" #include "ngspice/numenum.h" #include "ngspice/carddefs.h" #include "ngspice/sperror.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" int NUMD2temp(GENmodel *inModel, CKTcircuit *ckt) /* * perform the temperature update */ { register NUMD2model *model = (NUMD2model *) inModel; register NUMD2instance *inst; METHcard *methods; MODLcard *models; OPTNcard *options; OUTPcard *outputs; TWOmaterial *pM, *pMaterial, *pNextMaterial; double startTime; /* loop through all the models */ for (; model != NULL; model = NUMD2nextModel(model)) { methods = model->NUMD2methods; models = model->NUMD2models; options = model->NUMD2options; outputs = model->NUMD2outputs; if (!options->OPTNtnomGiven) { options->OPTNtnom = ckt->CKTnomTemp; } for (pM = model->NUMD2matlInfo; pM != NULL; pM = pM->next) { pM->tnom = options->OPTNtnom; } BandGapNarrowing = models->MODLbandGapNarrowing; ConcDepLifetime = models->MODLconcDepLifetime; TempDepMobility = models->MODLtempDepMobility; ConcDepMobility = models->MODLconcDepMobility; SurfaceMobility = models->MODLsurfaceMobility; MatchingMobility = models->MODLmatchingMobility; OneCarrier = methods->METHoneCarrier; for (inst = NUMD2instances(model); inst != NULL; inst = NUMD2nextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); if (!inst->NUMD2tempGiven) { inst->NUMD2temp = ckt->CKTtemp; } if (!inst->NUMD2areaGiven || inst->NUMD2area <= 0.0) { inst->NUMD2area = 1.0; } if (!inst->NUMD2widthGiven || inst->NUMD2width <= 0.0) { inst->NUMD2width = 1.0; } inst->NUMD2pDevice->width = inst->NUMD2area * inst->NUMD2width * options->OPTNdefw; /* Compute and save globals for this instance. */ GLOBcomputeGlobals(&(inst->NUMD2globals), inst->NUMD2temp); /* Calculate new sets of material parameters. */ pM = model->NUMD2matlInfo; pMaterial = inst->NUMD2pDevice->pMaterials; for (; pM != NULL; pM = pM->next, pMaterial = pMaterial->next) { /* Copy everything, then fix the incorrect pointer. */ pNextMaterial = pMaterial->next; memcpy(pMaterial, pM, sizeof(TWOmaterial)); pMaterial->next = pNextMaterial; /* Now do the temperature dependence. */ MATLtempDep(pMaterial, pMaterial->tnom); if (outputs->OUTPmaterial) { printMaterialInfo(pMaterial); } } /* Assign doping to the mesh. */ TWOsetDoping(inst->NUMD2pDevice, model->NUMD2profiles, model->NUMD2dopTables); /* Assign physical parameters to the mesh. */ TWOsetup(inst->NUMD2pDevice); /* Assign boundary condition parameters. */ TWOsetBCparams(inst->NUMD2pDevice, model->NUMD2boundaries); /* Normalize everything. */ TWOnormalize(inst->NUMD2pDevice); /* Find the device's type. */ if (inst->NUMD2pDevice->pFirstContact->pNodes[0]->netConc < 0.0) { inst->NUMD2type = PN; if (OneCarrier) { methods->METHoneCarrier = P_TYPE; } } else { inst->NUMD2type = NP; if (OneCarrier) { methods->METHoneCarrier = N_TYPE; } } inst->NUMD2pDevice->pStats->totalTime[STAT_SETUP] += SPfrontEnd->IFseconds() - startTime; } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/numd2/nud2pzld.c0000644000175000017500000000400513546075722022115 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "numd2def.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" int NUMD2pzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { register NUMD2model *model = (NUMD2model *) inModel; register NUMD2instance *inst; SPcomplex y; double startTime; NG_IGNORE(ckt); /* loop through all the diode models */ for (; model != NULL; model = NUMD2nextModel(model)) { FieldDepMobility = model->NUMD2models->MODLfieldDepMobility; TransDepMobility = model->NUMD2models->MODLtransDepMobility; SurfaceMobility = model->NUMD2models->MODLsurfaceMobility; Srh = model->NUMD2models->MODLsrh; Auger = model->NUMD2models->MODLauger; AvalancheGen = model->NUMD2models->MODLavalancheGen; OneCarrier = model->NUMD2methods->METHoneCarrier; AcAnalysisMethod = model->NUMD2methods->METHacAnalysisMethod; MobDeriv = model->NUMD2methods->METHmobDeriv; TWOacDebug = model->NUMD2outputs->OUTPacDebug; for (inst = NUMD2instances(model); inst != NULL; inst = NUMD2nextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); /* Get Temp.-Dep. Global Parameters */ GLOBgetGlobals(&(inst->NUMD2globals)); NUMD2ys(inst->NUMD2pDevice, s, &y); *(inst->NUMD2posPosPtr) += y.real; *(inst->NUMD2posPosPtr + 1) += y.imag; *(inst->NUMD2negNegPtr) += y.real; *(inst->NUMD2negNegPtr + 1) += y.imag; *(inst->NUMD2negPosPtr) -= y.real; *(inst->NUMD2negPosPtr + 1) -= y.imag; *(inst->NUMD2posNegPtr) -= y.real; *(inst->NUMD2posNegPtr + 1) -= y.imag; inst->NUMD2pDevice->pStats->totalTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/numd2/nud2ask.c0000644000175000017500000000611613546075722021727 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "numd2def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* Check out this one */ extern int NUMD2initSmSig(NUMD2instance *); /* ARGSUSED */ int NUMD2ask(CKTcircuit *ckt, GENinstance *inInst, int which, IFvalue *value, IFvalue *select) { NUMD2instance *inst = (NUMD2instance *) inInst; NG_IGNORE(select); switch (which) { case NUMD2_WIDTH: value->rValue = inst->NUMD2width; return (OK); case NUMD2_AREA: value->rValue = inst->NUMD2area; break; case NUMD2_TEMP: value->rValue = inst->NUMD2temp - CONSTCtoK; return (OK); case NUMD2_VD: value->rValue = *(ckt->CKTstate0 + inst->NUMD2voltage); return (OK); case NUMD2_ID: value->rValue = *(ckt->CKTstate0 + inst->NUMD2id); return (OK); case NUMD2_G11: value->rValue = *(ckt->CKTstate0 + inst->NUMD2conduct); return (OK); case NUMD2_G12: value->rValue = -*(ckt->CKTstate0 + inst->NUMD2conduct); return (OK); case NUMD2_G21: value->rValue = -*(ckt->CKTstate0 + inst->NUMD2conduct); return (OK); case NUMD2_G22: value->rValue = *(ckt->CKTstate0 + inst->NUMD2conduct); return (OK); case NUMD2_C11: if (!inst->NUMD2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMD2initSmSig(inst); } value->rValue = inst->NUMD2c11; return (OK); case NUMD2_C12: if (!inst->NUMD2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMD2initSmSig(inst); } value->rValue = -inst->NUMD2c11; return (OK); case NUMD2_C21: if (!inst->NUMD2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMD2initSmSig(inst); } value->rValue = -inst->NUMD2c11; return (OK); case NUMD2_C22: if (!inst->NUMD2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMD2initSmSig(inst); } value->rValue = inst->NUMD2c11; return (OK); case NUMD2_Y11: if (!inst->NUMD2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMD2initSmSig(inst); } value->cValue.real = inst->NUMD2y11r; value->cValue.imag = inst->NUMD2y11i; return (OK); case NUMD2_Y12: if (!inst->NUMD2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMD2initSmSig(inst); } value->cValue.real = -inst->NUMD2y11r; value->cValue.imag = -inst->NUMD2y11i; return (OK); case NUMD2_Y21: if (!inst->NUMD2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMD2initSmSig(inst); } value->cValue.real = -inst->NUMD2y11r; value->cValue.imag = -inst->NUMD2y11i; return (OK); case NUMD2_Y22: if (!inst->NUMD2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMD2initSmSig(inst); } value->cValue.real = inst->NUMD2y11r; value->cValue.imag = inst->NUMD2y11i; return (OK); default: return (E_BADPARM); } /* NOTREACHED */ return (E_BADPARM); } tmpk8ny_4pz/src/spicelib/devices/bsim3/0000755000175000017500000000000013546075722020200 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/bsim3/bsim3init.h0000644000175000017500000000040213546075722022246 0ustar carstencarsten#ifndef _BSIM3INIT_H #define _BSIM3INIT_H extern IFparm BSIM3pTable[ ]; extern IFparm BSIM3mPTable[ ]; extern char *BSIM3names[ ]; extern int BSIM3pTSize; extern int BSIM3mPTSize; extern int BSIM3nSize; extern int BSIM3iSize; extern int BSIM3mSize; #endif tmpk8ny_4pz/src/spicelib/devices/bsim3/bsim3def.h0000644000175000017500000015403613546075722022056 0ustar carstencarsten/********** Copyright 2004 Regents of the University of California. All rights reserved. Author: 1995 Min-Chie Jeng and Mansun Chan. Author: 1997-1999 Weidong Liu. Author: 2001- Xuemei Xi **** OpenMP support for ngspice by Holger Vogt 06/28/2010 **** File: bsim3def.h **********/ #ifndef BSIM3 #define BSIM3 #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" typedef struct sBSIM3instance { struct GENinstance gen; #define BSIM3modPtr(inst) ((struct sBSIM3model *)((inst)->gen.GENmodPtr)) #define BSIM3nextInstance(inst) ((struct sBSIM3instance *)((inst)->gen.GENnextInstance)) #define BSIM3name gen.GENname #define BSIM3states gen.GENstate const int BSIM3dNode; const int BSIM3gNode; const int BSIM3sNode; const int BSIM3bNode; int BSIM3dNodePrime; int BSIM3sNodePrime; int BSIM3qNode; /* MCJ */ /* MCJ */ double BSIM3ueff; double BSIM3thetavth; double BSIM3von; double BSIM3vdsat; double BSIM3cgdo; double BSIM3cgso; double BSIM3vjsm; double BSIM3IsEvjsm; double BSIM3vjdm; double BSIM3IsEvjdm; double BSIM3l; double BSIM3w; double BSIM3m; double BSIM3drainArea; double BSIM3sourceArea; double BSIM3drainSquares; double BSIM3sourceSquares; double BSIM3drainPerimeter; double BSIM3sourcePerimeter; double BSIM3sourceConductance; double BSIM3drainConductance; double BSIM3delvto; double BSIM3mulu0; double BSIM3vth0; double BSIM3vfb; double BSIM3vfbzb; double BSIM3u0temp; double BSIM3tconst; double BSIM3icVBS; double BSIM3icVDS; double BSIM3icVGS; int BSIM3off; int BSIM3mode; int BSIM3nqsMod; int BSIM3acnqsMod; int BSIM3geo; /* OP point */ double BSIM3qinv; double BSIM3cd; double BSIM3cbs; double BSIM3cbd; double BSIM3csub; double BSIM3gm; double BSIM3gds; double BSIM3gmbs; double BSIM3gbd; double BSIM3gbs; double BSIM3gbbs; double BSIM3gbgs; double BSIM3gbds; double BSIM3cggb; double BSIM3cgdb; double BSIM3cgsb; double BSIM3cbgb; double BSIM3cbdb; double BSIM3cbsb; double BSIM3cdgb; double BSIM3cddb; double BSIM3cdsb; double BSIM3capbd; double BSIM3capbs; double BSIM3cqgb; double BSIM3cqdb; double BSIM3cqsb; double BSIM3cqbb; double BSIM3qgate; double BSIM3qbulk; double BSIM3qdrn; double BSIM3gtau; double BSIM3gtg; double BSIM3gtd; double BSIM3gts; double BSIM3gtb; double BSIM3rds; /* Noise bugfix */ double BSIM3Vgsteff; double BSIM3Vdseff; double BSIM3Abulk; double BSIM3AbovVgst2Vtm; double BSIM3taunet; struct bsim3SizeDependParam *pParam; unsigned BSIM3lGiven :1; unsigned BSIM3wGiven :1; unsigned BSIM3mGiven :1; unsigned BSIM3drainAreaGiven :1; unsigned BSIM3sourceAreaGiven :1; unsigned BSIM3drainSquaresGiven :1; unsigned BSIM3sourceSquaresGiven :1; unsigned BSIM3drainPerimeterGiven :1; unsigned BSIM3sourcePerimeterGiven :1; unsigned BSIM3delvtoGiven :1; unsigned BSIM3mulu0Given :1; unsigned BSIM3dNodePrimeSet :1; unsigned BSIM3sNodePrimeSet :1; unsigned BSIM3icVBSGiven :1; unsigned BSIM3icVDSGiven :1; unsigned BSIM3icVGSGiven :1; unsigned BSIM3nqsModGiven :1; unsigned BSIM3acnqsModGiven :1; unsigned BSIM3geoGiven :1; double *BSIM3DdPtr; double *BSIM3GgPtr; double *BSIM3SsPtr; double *BSIM3BbPtr; double *BSIM3DPdpPtr; double *BSIM3SPspPtr; double *BSIM3DdpPtr; double *BSIM3GbPtr; double *BSIM3GdpPtr; double *BSIM3GspPtr; double *BSIM3SspPtr; double *BSIM3BdpPtr; double *BSIM3BspPtr; double *BSIM3DPspPtr; double *BSIM3DPdPtr; double *BSIM3BgPtr; double *BSIM3DPgPtr; double *BSIM3SPgPtr; double *BSIM3SPsPtr; double *BSIM3DPbPtr; double *BSIM3SPbPtr; double *BSIM3SPdpPtr; double *BSIM3QqPtr; double *BSIM3QdpPtr; double *BSIM3QgPtr; double *BSIM3QspPtr; double *BSIM3QbPtr; double *BSIM3DPqPtr; double *BSIM3GqPtr; double *BSIM3SPqPtr; double *BSIM3BqPtr; #ifdef USE_OMP /* per instance storage of results, to update matrix at a later stge */ double BSIM3rhsG; double BSIM3rhsB; double BSIM3rhsD; double BSIM3rhsS; double BSIM3rhsQ; double BSIM3DdPt; double BSIM3GgPt; double BSIM3SsPt; double BSIM3BbPt; double BSIM3DPdpPt; double BSIM3SPspPt; double BSIM3DdpPt; double BSIM3GbPt; double BSIM3GdpPt; double BSIM3GspPt; double BSIM3SspPt; double BSIM3BdpPt; double BSIM3BspPt; double BSIM3DPspPt; double BSIM3DPdPt; double BSIM3BgPt; double BSIM3DPgPt; double BSIM3SPgPt; double BSIM3SPsPt; double BSIM3DPbPt; double BSIM3SPbPt; double BSIM3SPdpPt; double BSIM3QqPt; double BSIM3QdpPt; double BSIM3QgPt; double BSIM3QspPt; double BSIM3QbPt; double BSIM3DPqPt; double BSIM3GqPt; double BSIM3SPqPt; double BSIM3BqPt; #endif #define BSIM3vbd BSIM3states+ 0 #define BSIM3vbs BSIM3states+ 1 #define BSIM3vgs BSIM3states+ 2 #define BSIM3vds BSIM3states+ 3 #define BSIM3qb BSIM3states+ 4 #define BSIM3cqb BSIM3states+ 5 #define BSIM3qg BSIM3states+ 6 #define BSIM3cqg BSIM3states+ 7 #define BSIM3qd BSIM3states+ 8 #define BSIM3cqd BSIM3states+ 9 #define BSIM3qbs BSIM3states+ 10 #define BSIM3qbd BSIM3states+ 11 #define BSIM3qcheq BSIM3states+ 12 #define BSIM3cqcheq BSIM3states+ 13 #define BSIM3qcdump BSIM3states+ 14 #define BSIM3cqcdump BSIM3states+ 15 #define BSIM3qdef BSIM3states+ 16 #define BSIM3numStates 17 /* indices to the array of BSIM3 NOISE SOURCES */ #define BSIM3RDNOIZ 0 #define BSIM3RSNOIZ 1 #define BSIM3IDNOIZ 2 #define BSIM3FLNOIZ 3 #define BSIM3TOTNOIZ 4 #define BSIM3NSRCS 5 /* the number of BSIM3 MOSFET noise sources */ #ifndef NONOISE double BSIM3nVar[NSTATVARS][BSIM3NSRCS]; #else /* NONOISE */ double **BSIM3nVar; #endif /* NONOISE */ } BSIM3instance ; struct bsim3SizeDependParam { double Width; double Length; double BSIM3cdsc; double BSIM3cdscb; double BSIM3cdscd; double BSIM3cit; double BSIM3nfactor; double BSIM3xj; double BSIM3vsat; double BSIM3at; double BSIM3a0; double BSIM3ags; double BSIM3a1; double BSIM3a2; double BSIM3keta; double BSIM3nsub; double BSIM3npeak; double BSIM3ngate; double BSIM3gamma1; double BSIM3gamma2; double BSIM3vbx; double BSIM3vbi; double BSIM3vbm; double BSIM3vbsc; double BSIM3xt; double BSIM3phi; double BSIM3litl; double BSIM3k1; double BSIM3kt1; double BSIM3kt1l; double BSIM3kt2; double BSIM3k2; double BSIM3k3; double BSIM3k3b; double BSIM3w0; double BSIM3nlx; double BSIM3dvt0; double BSIM3dvt1; double BSIM3dvt2; double BSIM3dvt0w; double BSIM3dvt1w; double BSIM3dvt2w; double BSIM3drout; double BSIM3dsub; double BSIM3vth0; double BSIM3ua; double BSIM3ua1; double BSIM3ub; double BSIM3ub1; double BSIM3uc; double BSIM3uc1; double BSIM3u0; double BSIM3ute; double BSIM3voff; double BSIM3vfb; double BSIM3delta; double BSIM3rdsw; double BSIM3rds0; double BSIM3prwg; double BSIM3prwb; double BSIM3prt; double BSIM3eta0; double BSIM3etab; double BSIM3pclm; double BSIM3pdibl1; double BSIM3pdibl2; double BSIM3pdiblb; double BSIM3pscbe1; double BSIM3pscbe2; double BSIM3pvag; double BSIM3wr; double BSIM3dwg; double BSIM3dwb; double BSIM3b0; double BSIM3b1; double BSIM3alpha0; double BSIM3alpha1; double BSIM3beta0; /* CV model */ double BSIM3elm; double BSIM3cgsl; double BSIM3cgdl; double BSIM3ckappa; double BSIM3cf; double BSIM3clc; double BSIM3cle; double BSIM3vfbcv; double BSIM3noff; double BSIM3voffcv; double BSIM3acde; double BSIM3moin; /* Pre-calculated constants */ double BSIM3dw; double BSIM3dl; double BSIM3leff; double BSIM3weff; double BSIM3dwc; double BSIM3dlc; double BSIM3leffCV; double BSIM3weffCV; double BSIM3abulkCVfactor; double BSIM3cgso; double BSIM3cgdo; double BSIM3cgbo; double BSIM3tconst; double BSIM3u0temp; double BSIM3vsattemp; double BSIM3sqrtPhi; double BSIM3phis3; double BSIM3Xdep0; double BSIM3sqrtXdep0; double BSIM3theta0vb0; double BSIM3thetaRout; double BSIM3cof1; double BSIM3cof2; double BSIM3cof3; double BSIM3cof4; double BSIM3cdep0; double BSIM3vfbzb; double BSIM3ldeb; double BSIM3k1ox; double BSIM3k2ox; struct bsim3SizeDependParam *pNext; }; typedef struct sBSIM3model { struct GENmodel gen; #define BSIM3modType gen.GENmodType #define BSIM3nextModel(inst) ((struct sBSIM3model *)((inst)->gen.GENnextModel)) #define BSIM3instances(inst) ((BSIM3instance *)((inst)->gen.GENinstances)) #define BSIM3modName gen.GENmodName int BSIM3type; int BSIM3mobMod; int BSIM3capMod; int BSIM3acmMod; int BSIM3calcacm; int BSIM3noiMod; int BSIM3nqsMod; int BSIM3acnqsMod; int BSIM3binUnit; int BSIM3paramChk; char *BSIM3version; double BSIM3tox; double BSIM3toxm; double BSIM3cdsc; double BSIM3cdscb; double BSIM3cdscd; double BSIM3cit; double BSIM3nfactor; double BSIM3xj; double BSIM3vsat; double BSIM3at; double BSIM3a0; double BSIM3ags; double BSIM3a1; double BSIM3a2; double BSIM3keta; double BSIM3nsub; double BSIM3npeak; double BSIM3ngate; double BSIM3gamma1; double BSIM3gamma2; double BSIM3vbx; double BSIM3vbm; double BSIM3xt; double BSIM3k1; double BSIM3kt1; double BSIM3kt1l; double BSIM3kt2; double BSIM3k2; double BSIM3k3; double BSIM3k3b; double BSIM3w0; double BSIM3nlx; double BSIM3dvt0; double BSIM3dvt1; double BSIM3dvt2; double BSIM3dvt0w; double BSIM3dvt1w; double BSIM3dvt2w; double BSIM3drout; double BSIM3dsub; double BSIM3vth0; double BSIM3ua; double BSIM3ua1; double BSIM3ub; double BSIM3ub1; double BSIM3uc; double BSIM3uc1; double BSIM3u0; double BSIM3ute; double BSIM3voff; double BSIM3delta; double BSIM3rdsw; double BSIM3prwg; double BSIM3prwb; double BSIM3prt; double BSIM3eta0; double BSIM3etab; double BSIM3pclm; double BSIM3pdibl1; double BSIM3pdibl2; double BSIM3pdiblb; double BSIM3pscbe1; double BSIM3pscbe2; double BSIM3pvag; double BSIM3wr; double BSIM3dwg; double BSIM3dwb; double BSIM3b0; double BSIM3b1; double BSIM3alpha0; double BSIM3alpha1; double BSIM3beta0; double BSIM3ijth; double BSIM3vfb; /* CV model */ double BSIM3elm; double BSIM3cgsl; double BSIM3cgdl; double BSIM3ckappa; double BSIM3cf; double BSIM3vfbcv; double BSIM3clc; double BSIM3cle; double BSIM3dwc; double BSIM3dlc; double BSIM3noff; double BSIM3voffcv; double BSIM3acde; double BSIM3moin; double BSIM3tcj; double BSIM3tcjsw; double BSIM3tcjswg; double BSIM3tpb; double BSIM3tpbsw; double BSIM3tpbswg; /* ACM model */ double BSIM3xl; double BSIM3xw; double BSIM3hdif; double BSIM3ldif; double BSIM3ld; double BSIM3rd; double BSIM3rs; double BSIM3rdc; double BSIM3rsc; double BSIM3wmlt; /* Length Dependence */ double BSIM3lcdsc; double BSIM3lcdscb; double BSIM3lcdscd; double BSIM3lcit; double BSIM3lnfactor; double BSIM3lxj; double BSIM3lvsat; double BSIM3lat; double BSIM3la0; double BSIM3lags; double BSIM3la1; double BSIM3la2; double BSIM3lketa; double BSIM3lnsub; double BSIM3lnpeak; double BSIM3lngate; double BSIM3lgamma1; double BSIM3lgamma2; double BSIM3lvbx; double BSIM3lvbm; double BSIM3lxt; double BSIM3lk1; double BSIM3lkt1; double BSIM3lkt1l; double BSIM3lkt2; double BSIM3lk2; double BSIM3lk3; double BSIM3lk3b; double BSIM3lw0; double BSIM3lnlx; double BSIM3ldvt0; double BSIM3ldvt1; double BSIM3ldvt2; double BSIM3ldvt0w; double BSIM3ldvt1w; double BSIM3ldvt2w; double BSIM3ldrout; double BSIM3ldsub; double BSIM3lvth0; double BSIM3lua; double BSIM3lua1; double BSIM3lub; double BSIM3lub1; double BSIM3luc; double BSIM3luc1; double BSIM3lu0; double BSIM3lute; double BSIM3lvoff; double BSIM3ldelta; double BSIM3lrdsw; double BSIM3lprwg; double BSIM3lprwb; double BSIM3lprt; double BSIM3leta0; double BSIM3letab; double BSIM3lpclm; double BSIM3lpdibl1; double BSIM3lpdibl2; double BSIM3lpdiblb; double BSIM3lpscbe1; double BSIM3lpscbe2; double BSIM3lpvag; double BSIM3lwr; double BSIM3ldwg; double BSIM3ldwb; double BSIM3lb0; double BSIM3lb1; double BSIM3lalpha0; double BSIM3lalpha1; double BSIM3lbeta0; double BSIM3lvfb; /* CV model */ double BSIM3lelm; double BSIM3lcgsl; double BSIM3lcgdl; double BSIM3lckappa; double BSIM3lcf; double BSIM3lclc; double BSIM3lcle; double BSIM3lvfbcv; double BSIM3lnoff; double BSIM3lvoffcv; double BSIM3lacde; double BSIM3lmoin; /* Width Dependence */ double BSIM3wcdsc; double BSIM3wcdscb; double BSIM3wcdscd; double BSIM3wcit; double BSIM3wnfactor; double BSIM3wxj; double BSIM3wvsat; double BSIM3wat; double BSIM3wa0; double BSIM3wags; double BSIM3wa1; double BSIM3wa2; double BSIM3wketa; double BSIM3wnsub; double BSIM3wnpeak; double BSIM3wngate; double BSIM3wgamma1; double BSIM3wgamma2; double BSIM3wvbx; double BSIM3wvbm; double BSIM3wxt; double BSIM3wk1; double BSIM3wkt1; double BSIM3wkt1l; double BSIM3wkt2; double BSIM3wk2; double BSIM3wk3; double BSIM3wk3b; double BSIM3ww0; double BSIM3wnlx; double BSIM3wdvt0; double BSIM3wdvt1; double BSIM3wdvt2; double BSIM3wdvt0w; double BSIM3wdvt1w; double BSIM3wdvt2w; double BSIM3wdrout; double BSIM3wdsub; double BSIM3wvth0; double BSIM3wua; double BSIM3wua1; double BSIM3wub; double BSIM3wub1; double BSIM3wuc; double BSIM3wuc1; double BSIM3wu0; double BSIM3wute; double BSIM3wvoff; double BSIM3wdelta; double BSIM3wrdsw; double BSIM3wprwg; double BSIM3wprwb; double BSIM3wprt; double BSIM3weta0; double BSIM3wetab; double BSIM3wpclm; double BSIM3wpdibl1; double BSIM3wpdibl2; double BSIM3wpdiblb; double BSIM3wpscbe1; double BSIM3wpscbe2; double BSIM3wpvag; double BSIM3wwr; double BSIM3wdwg; double BSIM3wdwb; double BSIM3wb0; double BSIM3wb1; double BSIM3walpha0; double BSIM3walpha1; double BSIM3wbeta0; double BSIM3wvfb; /* CV model */ double BSIM3welm; double BSIM3wcgsl; double BSIM3wcgdl; double BSIM3wckappa; double BSIM3wcf; double BSIM3wclc; double BSIM3wcle; double BSIM3wvfbcv; double BSIM3wnoff; double BSIM3wvoffcv; double BSIM3wacde; double BSIM3wmoin; /* Cross-term Dependence */ double BSIM3pcdsc; double BSIM3pcdscb; double BSIM3pcdscd; double BSIM3pcit; double BSIM3pnfactor; double BSIM3pxj; double BSIM3pvsat; double BSIM3pat; double BSIM3pa0; double BSIM3pags; double BSIM3pa1; double BSIM3pa2; double BSIM3pketa; double BSIM3pnsub; double BSIM3pnpeak; double BSIM3pngate; double BSIM3pgamma1; double BSIM3pgamma2; double BSIM3pvbx; double BSIM3pvbm; double BSIM3pxt; double BSIM3pk1; double BSIM3pkt1; double BSIM3pkt1l; double BSIM3pkt2; double BSIM3pk2; double BSIM3pk3; double BSIM3pk3b; double BSIM3pw0; double BSIM3pnlx; double BSIM3pdvt0; double BSIM3pdvt1; double BSIM3pdvt2; double BSIM3pdvt0w; double BSIM3pdvt1w; double BSIM3pdvt2w; double BSIM3pdrout; double BSIM3pdsub; double BSIM3pvth0; double BSIM3pua; double BSIM3pua1; double BSIM3pub; double BSIM3pub1; double BSIM3puc; double BSIM3puc1; double BSIM3pu0; double BSIM3pute; double BSIM3pvoff; double BSIM3pdelta; double BSIM3prdsw; double BSIM3pprwg; double BSIM3pprwb; double BSIM3pprt; double BSIM3peta0; double BSIM3petab; double BSIM3ppclm; double BSIM3ppdibl1; double BSIM3ppdibl2; double BSIM3ppdiblb; double BSIM3ppscbe1; double BSIM3ppscbe2; double BSIM3ppvag; double BSIM3pwr; double BSIM3pdwg; double BSIM3pdwb; double BSIM3pb0; double BSIM3pb1; double BSIM3palpha0; double BSIM3palpha1; double BSIM3pbeta0; double BSIM3pvfb; /* CV model */ double BSIM3pelm; double BSIM3pcgsl; double BSIM3pcgdl; double BSIM3pckappa; double BSIM3pcf; double BSIM3pclc; double BSIM3pcle; double BSIM3pvfbcv; double BSIM3pnoff; double BSIM3pvoffcv; double BSIM3pacde; double BSIM3pmoin; double BSIM3tnom; double BSIM3cgso; double BSIM3cgdo; double BSIM3cgbo; double BSIM3xpart; double BSIM3cFringOut; double BSIM3cFringMax; double BSIM3sheetResistance; double BSIM3jctSatCurDensity; double BSIM3jctSidewallSatCurDensity; double BSIM3bulkJctPotential; double BSIM3bulkJctBotGradingCoeff; double BSIM3bulkJctSideGradingCoeff; double BSIM3bulkJctGateSideGradingCoeff; double BSIM3sidewallJctPotential; double BSIM3GatesidewallJctPotential; double BSIM3unitAreaJctCap; double BSIM3unitLengthSidewallJctCap; double BSIM3unitLengthGateSidewallJctCap; double BSIM3jctEmissionCoeff; double BSIM3jctTempExponent; double BSIM3Lint; double BSIM3Ll; double BSIM3Llc; double BSIM3Lln; double BSIM3Lw; double BSIM3Lwc; double BSIM3Lwn; double BSIM3Lwl; double BSIM3Lwlc; double BSIM3Lmin; double BSIM3Lmax; double BSIM3Wint; double BSIM3Wl; double BSIM3Wlc; double BSIM3Wln; double BSIM3Ww; double BSIM3Wwc; double BSIM3Wwn; double BSIM3Wwl; double BSIM3Wwlc; double BSIM3Wmin; double BSIM3Wmax; /* Pre-calculated constants */ /* MCJ: move to size-dependent param. */ double BSIM3vtm; double BSIM3cox; double BSIM3cof1; double BSIM3cof2; double BSIM3cof3; double BSIM3cof4; double BSIM3vcrit; double BSIM3factor1; double BSIM3PhiB; double BSIM3PhiBSW; double BSIM3PhiBSWG; double BSIM3jctTempSatCurDensity; double BSIM3jctSidewallTempSatCurDensity; double BSIM3unitAreaTempJctCap; double BSIM3unitLengthSidewallTempJctCap; double BSIM3unitLengthGateSidewallTempJctCap; double BSIM3oxideTrapDensityA; double BSIM3oxideTrapDensityB; double BSIM3oxideTrapDensityC; double BSIM3em; double BSIM3ef; double BSIM3af; double BSIM3kf; double BSIM3lintnoi; /* lint offset for noise calculation */ double BSIM3vgsMax; double BSIM3vgdMax; double BSIM3vgbMax; double BSIM3vdsMax; double BSIM3vbsMax; double BSIM3vbdMax; double BSIM3vgsrMax; double BSIM3vgdrMax; double BSIM3vgbrMax; double BSIM3vbsrMax; double BSIM3vbdrMax; struct bsim3SizeDependParam *pSizeDependParamKnot; #ifdef USE_OMP int BSIM3InstCount; struct sBSIM3instance **BSIM3InstanceArray; #endif /* Flags */ unsigned BSIM3mobModGiven :1; unsigned BSIM3binUnitGiven :1; unsigned BSIM3capModGiven :1; unsigned BSIM3acmModGiven :1; unsigned BSIM3calcacmGiven :1; unsigned BSIM3paramChkGiven :1; unsigned BSIM3noiModGiven :1; unsigned BSIM3nqsModGiven :1; unsigned BSIM3acnqsModGiven :1; unsigned BSIM3typeGiven :1; unsigned BSIM3toxGiven :1; unsigned BSIM3versionGiven :1; unsigned BSIM3toxmGiven :1; unsigned BSIM3cdscGiven :1; unsigned BSIM3cdscbGiven :1; unsigned BSIM3cdscdGiven :1; unsigned BSIM3citGiven :1; unsigned BSIM3nfactorGiven :1; unsigned BSIM3xjGiven :1; unsigned BSIM3vsatGiven :1; unsigned BSIM3atGiven :1; unsigned BSIM3a0Given :1; unsigned BSIM3agsGiven :1; unsigned BSIM3a1Given :1; unsigned BSIM3a2Given :1; unsigned BSIM3ketaGiven :1; unsigned BSIM3nsubGiven :1; unsigned BSIM3npeakGiven :1; unsigned BSIM3ngateGiven :1; unsigned BSIM3gamma1Given :1; unsigned BSIM3gamma2Given :1; unsigned BSIM3vbxGiven :1; unsigned BSIM3vbmGiven :1; unsigned BSIM3xtGiven :1; unsigned BSIM3k1Given :1; unsigned BSIM3kt1Given :1; unsigned BSIM3kt1lGiven :1; unsigned BSIM3kt2Given :1; unsigned BSIM3k2Given :1; unsigned BSIM3k3Given :1; unsigned BSIM3k3bGiven :1; unsigned BSIM3w0Given :1; unsigned BSIM3nlxGiven :1; unsigned BSIM3dvt0Given :1; unsigned BSIM3dvt1Given :1; unsigned BSIM3dvt2Given :1; unsigned BSIM3dvt0wGiven :1; unsigned BSIM3dvt1wGiven :1; unsigned BSIM3dvt2wGiven :1; unsigned BSIM3droutGiven :1; unsigned BSIM3dsubGiven :1; unsigned BSIM3vth0Given :1; unsigned BSIM3uaGiven :1; unsigned BSIM3ua1Given :1; unsigned BSIM3ubGiven :1; unsigned BSIM3ub1Given :1; unsigned BSIM3ucGiven :1; unsigned BSIM3uc1Given :1; unsigned BSIM3u0Given :1; unsigned BSIM3uteGiven :1; unsigned BSIM3voffGiven :1; unsigned BSIM3rdswGiven :1; unsigned BSIM3prwgGiven :1; unsigned BSIM3prwbGiven :1; unsigned BSIM3prtGiven :1; unsigned BSIM3eta0Given :1; unsigned BSIM3etabGiven :1; unsigned BSIM3pclmGiven :1; unsigned BSIM3pdibl1Given :1; unsigned BSIM3pdibl2Given :1; unsigned BSIM3pdiblbGiven :1; unsigned BSIM3pscbe1Given :1; unsigned BSIM3pscbe2Given :1; unsigned BSIM3pvagGiven :1; unsigned BSIM3deltaGiven :1; unsigned BSIM3wrGiven :1; unsigned BSIM3dwgGiven :1; unsigned BSIM3dwbGiven :1; unsigned BSIM3b0Given :1; unsigned BSIM3b1Given :1; unsigned BSIM3alpha0Given :1; unsigned BSIM3alpha1Given :1; unsigned BSIM3beta0Given :1; unsigned BSIM3ijthGiven :1; unsigned BSIM3vfbGiven :1; /* CV model */ unsigned BSIM3elmGiven :1; unsigned BSIM3cgslGiven :1; unsigned BSIM3cgdlGiven :1; unsigned BSIM3ckappaGiven :1; unsigned BSIM3cfGiven :1; unsigned BSIM3vfbcvGiven :1; unsigned BSIM3clcGiven :1; unsigned BSIM3cleGiven :1; unsigned BSIM3dwcGiven :1; unsigned BSIM3dlcGiven :1; unsigned BSIM3noffGiven :1; unsigned BSIM3voffcvGiven :1; unsigned BSIM3acdeGiven :1; unsigned BSIM3moinGiven :1; unsigned BSIM3tcjGiven :1; unsigned BSIM3tcjswGiven :1; unsigned BSIM3tcjswgGiven :1; unsigned BSIM3tpbGiven :1; unsigned BSIM3tpbswGiven :1; unsigned BSIM3tpbswgGiven :1; /* ACM model */ unsigned BSIM3xlGiven :1; unsigned BSIM3xwGiven :1; unsigned BSIM3hdifGiven :1; unsigned BSIM3ldifGiven :1; unsigned BSIM3ldGiven :1; unsigned BSIM3rdGiven :1; unsigned BSIM3rsGiven :1; unsigned BSIM3rdcGiven :1; unsigned BSIM3rscGiven :1; unsigned BSIM3wmltGiven :1; /* Length dependence */ unsigned BSIM3lcdscGiven :1; unsigned BSIM3lcdscbGiven :1; unsigned BSIM3lcdscdGiven :1; unsigned BSIM3lcitGiven :1; unsigned BSIM3lnfactorGiven :1; unsigned BSIM3lxjGiven :1; unsigned BSIM3lvsatGiven :1; unsigned BSIM3latGiven :1; unsigned BSIM3la0Given :1; unsigned BSIM3lagsGiven :1; unsigned BSIM3la1Given :1; unsigned BSIM3la2Given :1; unsigned BSIM3lketaGiven :1; unsigned BSIM3lnsubGiven :1; unsigned BSIM3lnpeakGiven :1; unsigned BSIM3lngateGiven :1; unsigned BSIM3lgamma1Given :1; unsigned BSIM3lgamma2Given :1; unsigned BSIM3lvbxGiven :1; unsigned BSIM3lvbmGiven :1; unsigned BSIM3lxtGiven :1; unsigned BSIM3lk1Given :1; unsigned BSIM3lkt1Given :1; unsigned BSIM3lkt1lGiven :1; unsigned BSIM3lkt2Given :1; unsigned BSIM3lk2Given :1; unsigned BSIM3lk3Given :1; unsigned BSIM3lk3bGiven :1; unsigned BSIM3lw0Given :1; unsigned BSIM3lnlxGiven :1; unsigned BSIM3ldvt0Given :1; unsigned BSIM3ldvt1Given :1; unsigned BSIM3ldvt2Given :1; unsigned BSIM3ldvt0wGiven :1; unsigned BSIM3ldvt1wGiven :1; unsigned BSIM3ldvt2wGiven :1; unsigned BSIM3ldroutGiven :1; unsigned BSIM3ldsubGiven :1; unsigned BSIM3lvth0Given :1; unsigned BSIM3luaGiven :1; unsigned BSIM3lua1Given :1; unsigned BSIM3lubGiven :1; unsigned BSIM3lub1Given :1; unsigned BSIM3lucGiven :1; unsigned BSIM3luc1Given :1; unsigned BSIM3lu0Given :1; unsigned BSIM3luteGiven :1; unsigned BSIM3lvoffGiven :1; unsigned BSIM3lrdswGiven :1; unsigned BSIM3lprwgGiven :1; unsigned BSIM3lprwbGiven :1; unsigned BSIM3lprtGiven :1; unsigned BSIM3leta0Given :1; unsigned BSIM3letabGiven :1; unsigned BSIM3lpclmGiven :1; unsigned BSIM3lpdibl1Given :1; unsigned BSIM3lpdibl2Given :1; unsigned BSIM3lpdiblbGiven :1; unsigned BSIM3lpscbe1Given :1; unsigned BSIM3lpscbe2Given :1; unsigned BSIM3lpvagGiven :1; unsigned BSIM3ldeltaGiven :1; unsigned BSIM3lwrGiven :1; unsigned BSIM3ldwgGiven :1; unsigned BSIM3ldwbGiven :1; unsigned BSIM3lb0Given :1; unsigned BSIM3lb1Given :1; unsigned BSIM3lalpha0Given :1; unsigned BSIM3lalpha1Given :1; unsigned BSIM3lbeta0Given :1; unsigned BSIM3lvfbGiven :1; /* CV model */ unsigned BSIM3lelmGiven :1; unsigned BSIM3lcgslGiven :1; unsigned BSIM3lcgdlGiven :1; unsigned BSIM3lckappaGiven :1; unsigned BSIM3lcfGiven :1; unsigned BSIM3lclcGiven :1; unsigned BSIM3lcleGiven :1; unsigned BSIM3lvfbcvGiven :1; unsigned BSIM3lnoffGiven :1; unsigned BSIM3lvoffcvGiven :1; unsigned BSIM3lacdeGiven :1; unsigned BSIM3lmoinGiven :1; /* Width dependence */ unsigned BSIM3wcdscGiven :1; unsigned BSIM3wcdscbGiven :1; unsigned BSIM3wcdscdGiven :1; unsigned BSIM3wcitGiven :1; unsigned BSIM3wnfactorGiven :1; unsigned BSIM3wxjGiven :1; unsigned BSIM3wvsatGiven :1; unsigned BSIM3watGiven :1; unsigned BSIM3wa0Given :1; unsigned BSIM3wagsGiven :1; unsigned BSIM3wa1Given :1; unsigned BSIM3wa2Given :1; unsigned BSIM3wketaGiven :1; unsigned BSIM3wnsubGiven :1; unsigned BSIM3wnpeakGiven :1; unsigned BSIM3wngateGiven :1; unsigned BSIM3wgamma1Given :1; unsigned BSIM3wgamma2Given :1; unsigned BSIM3wvbxGiven :1; unsigned BSIM3wvbmGiven :1; unsigned BSIM3wxtGiven :1; unsigned BSIM3wk1Given :1; unsigned BSIM3wkt1Given :1; unsigned BSIM3wkt1lGiven :1; unsigned BSIM3wkt2Given :1; unsigned BSIM3wk2Given :1; unsigned BSIM3wk3Given :1; unsigned BSIM3wk3bGiven :1; unsigned BSIM3ww0Given :1; unsigned BSIM3wnlxGiven :1; unsigned BSIM3wdvt0Given :1; unsigned BSIM3wdvt1Given :1; unsigned BSIM3wdvt2Given :1; unsigned BSIM3wdvt0wGiven :1; unsigned BSIM3wdvt1wGiven :1; unsigned BSIM3wdvt2wGiven :1; unsigned BSIM3wdroutGiven :1; unsigned BSIM3wdsubGiven :1; unsigned BSIM3wvth0Given :1; unsigned BSIM3wuaGiven :1; unsigned BSIM3wua1Given :1; unsigned BSIM3wubGiven :1; unsigned BSIM3wub1Given :1; unsigned BSIM3wucGiven :1; unsigned BSIM3wuc1Given :1; unsigned BSIM3wu0Given :1; unsigned BSIM3wuteGiven :1; unsigned BSIM3wvoffGiven :1; unsigned BSIM3wrdswGiven :1; unsigned BSIM3wprwgGiven :1; unsigned BSIM3wprwbGiven :1; unsigned BSIM3wprtGiven :1; unsigned BSIM3weta0Given :1; unsigned BSIM3wetabGiven :1; unsigned BSIM3wpclmGiven :1; unsigned BSIM3wpdibl1Given :1; unsigned BSIM3wpdibl2Given :1; unsigned BSIM3wpdiblbGiven :1; unsigned BSIM3wpscbe1Given :1; unsigned BSIM3wpscbe2Given :1; unsigned BSIM3wpvagGiven :1; unsigned BSIM3wdeltaGiven :1; unsigned BSIM3wwrGiven :1; unsigned BSIM3wdwgGiven :1; unsigned BSIM3wdwbGiven :1; unsigned BSIM3wb0Given :1; unsigned BSIM3wb1Given :1; unsigned BSIM3walpha0Given :1; unsigned BSIM3walpha1Given :1; unsigned BSIM3wbeta0Given :1; unsigned BSIM3wvfbGiven :1; /* CV model */ unsigned BSIM3welmGiven :1; unsigned BSIM3wcgslGiven :1; unsigned BSIM3wcgdlGiven :1; unsigned BSIM3wckappaGiven :1; unsigned BSIM3wcfGiven :1; unsigned BSIM3wclcGiven :1; unsigned BSIM3wcleGiven :1; unsigned BSIM3wvfbcvGiven :1; unsigned BSIM3wnoffGiven :1; unsigned BSIM3wvoffcvGiven :1; unsigned BSIM3wacdeGiven :1; unsigned BSIM3wmoinGiven :1; /* Cross-term dependence */ unsigned BSIM3pcdscGiven :1; unsigned BSIM3pcdscbGiven :1; unsigned BSIM3pcdscdGiven :1; unsigned BSIM3pcitGiven :1; unsigned BSIM3pnfactorGiven :1; unsigned BSIM3pxjGiven :1; unsigned BSIM3pvsatGiven :1; unsigned BSIM3patGiven :1; unsigned BSIM3pa0Given :1; unsigned BSIM3pagsGiven :1; unsigned BSIM3pa1Given :1; unsigned BSIM3pa2Given :1; unsigned BSIM3pketaGiven :1; unsigned BSIM3pnsubGiven :1; unsigned BSIM3pnpeakGiven :1; unsigned BSIM3pngateGiven :1; unsigned BSIM3pgamma1Given :1; unsigned BSIM3pgamma2Given :1; unsigned BSIM3pvbxGiven :1; unsigned BSIM3pvbmGiven :1; unsigned BSIM3pxtGiven :1; unsigned BSIM3pk1Given :1; unsigned BSIM3pkt1Given :1; unsigned BSIM3pkt1lGiven :1; unsigned BSIM3pkt2Given :1; unsigned BSIM3pk2Given :1; unsigned BSIM3pk3Given :1; unsigned BSIM3pk3bGiven :1; unsigned BSIM3pw0Given :1; unsigned BSIM3pnlxGiven :1; unsigned BSIM3pdvt0Given :1; unsigned BSIM3pdvt1Given :1; unsigned BSIM3pdvt2Given :1; unsigned BSIM3pdvt0wGiven :1; unsigned BSIM3pdvt1wGiven :1; unsigned BSIM3pdvt2wGiven :1; unsigned BSIM3pdroutGiven :1; unsigned BSIM3pdsubGiven :1; unsigned BSIM3pvth0Given :1; unsigned BSIM3puaGiven :1; unsigned BSIM3pua1Given :1; unsigned BSIM3pubGiven :1; unsigned BSIM3pub1Given :1; unsigned BSIM3pucGiven :1; unsigned BSIM3puc1Given :1; unsigned BSIM3pu0Given :1; unsigned BSIM3puteGiven :1; unsigned BSIM3pvoffGiven :1; unsigned BSIM3prdswGiven :1; unsigned BSIM3pprwgGiven :1; unsigned BSIM3pprwbGiven :1; unsigned BSIM3pprtGiven :1; unsigned BSIM3peta0Given :1; unsigned BSIM3petabGiven :1; unsigned BSIM3ppclmGiven :1; unsigned BSIM3ppdibl1Given :1; unsigned BSIM3ppdibl2Given :1; unsigned BSIM3ppdiblbGiven :1; unsigned BSIM3ppscbe1Given :1; unsigned BSIM3ppscbe2Given :1; unsigned BSIM3ppvagGiven :1; unsigned BSIM3pdeltaGiven :1; unsigned BSIM3pwrGiven :1; unsigned BSIM3pdwgGiven :1; unsigned BSIM3pdwbGiven :1; unsigned BSIM3pb0Given :1; unsigned BSIM3pb1Given :1; unsigned BSIM3palpha0Given :1; unsigned BSIM3palpha1Given :1; unsigned BSIM3pbeta0Given :1; unsigned BSIM3pvfbGiven :1; /* CV model */ unsigned BSIM3pelmGiven :1; unsigned BSIM3pcgslGiven :1; unsigned BSIM3pcgdlGiven :1; unsigned BSIM3pckappaGiven :1; unsigned BSIM3pcfGiven :1; unsigned BSIM3pclcGiven :1; unsigned BSIM3pcleGiven :1; unsigned BSIM3pvfbcvGiven :1; unsigned BSIM3pnoffGiven :1; unsigned BSIM3pvoffcvGiven :1; unsigned BSIM3pacdeGiven :1; unsigned BSIM3pmoinGiven :1; unsigned BSIM3useFringeGiven :1; unsigned BSIM3tnomGiven :1; unsigned BSIM3cgsoGiven :1; unsigned BSIM3cgdoGiven :1; unsigned BSIM3cgboGiven :1; unsigned BSIM3xpartGiven :1; unsigned BSIM3sheetResistanceGiven :1; unsigned BSIM3jctSatCurDensityGiven :1; unsigned BSIM3jctSidewallSatCurDensityGiven :1; unsigned BSIM3bulkJctPotentialGiven :1; unsigned BSIM3bulkJctBotGradingCoeffGiven :1; unsigned BSIM3sidewallJctPotentialGiven :1; unsigned BSIM3GatesidewallJctPotentialGiven :1; unsigned BSIM3bulkJctSideGradingCoeffGiven :1; unsigned BSIM3unitAreaJctCapGiven :1; unsigned BSIM3unitLengthSidewallJctCapGiven :1; unsigned BSIM3bulkJctGateSideGradingCoeffGiven :1; unsigned BSIM3unitLengthGateSidewallJctCapGiven :1; unsigned BSIM3jctEmissionCoeffGiven :1; unsigned BSIM3jctTempExponentGiven :1; unsigned BSIM3oxideTrapDensityAGiven :1; unsigned BSIM3oxideTrapDensityBGiven :1; unsigned BSIM3oxideTrapDensityCGiven :1; unsigned BSIM3emGiven :1; unsigned BSIM3efGiven :1; unsigned BSIM3afGiven :1; unsigned BSIM3kfGiven :1; unsigned BSIM3lintnoiGiven :1; unsigned BSIM3vgsMaxGiven :1; unsigned BSIM3vgdMaxGiven :1; unsigned BSIM3vgbMaxGiven :1; unsigned BSIM3vdsMaxGiven :1; unsigned BSIM3vbsMaxGiven :1; unsigned BSIM3vbdMaxGiven :1; unsigned BSIM3vgsrMaxGiven :1; unsigned BSIM3vgdrMaxGiven :1; unsigned BSIM3vgbrMaxGiven :1; unsigned BSIM3vbsrMaxGiven :1; unsigned BSIM3vbdrMaxGiven :1; unsigned BSIM3LintGiven :1; unsigned BSIM3LlGiven :1; unsigned BSIM3LlcGiven :1; unsigned BSIM3LlnGiven :1; unsigned BSIM3LwGiven :1; unsigned BSIM3LwcGiven :1; unsigned BSIM3LwnGiven :1; unsigned BSIM3LwlGiven :1; unsigned BSIM3LwlcGiven :1; unsigned BSIM3LminGiven :1; unsigned BSIM3LmaxGiven :1; unsigned BSIM3WintGiven :1; unsigned BSIM3WlGiven :1; unsigned BSIM3WlcGiven :1; unsigned BSIM3WlnGiven :1; unsigned BSIM3WwGiven :1; unsigned BSIM3WwcGiven :1; unsigned BSIM3WwnGiven :1; unsigned BSIM3WwlGiven :1; unsigned BSIM3WwlcGiven :1; unsigned BSIM3WminGiven :1; unsigned BSIM3WmaxGiven :1; } BSIM3model; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ /* device parameters */ #define BSIM3_W 1 #define BSIM3_L 2 #define BSIM3_AS 3 #define BSIM3_AD 4 #define BSIM3_PS 5 #define BSIM3_PD 6 #define BSIM3_NRS 7 #define BSIM3_NRD 8 #define BSIM3_OFF 9 #define BSIM3_IC_VBS 10 #define BSIM3_IC_VDS 11 #define BSIM3_IC_VGS 12 #define BSIM3_IC 13 #define BSIM3_NQSMOD 14 #define BSIM3_ACNQSMOD 15 #define BSIM3_M 16 #define BSIM3_DELVTO 17 #define BSIM3_MULU0 18 #define BSIM3_GEO 19 /* model parameters */ #define BSIM3_MOD_CAPMOD 100 #define BSIM3_MOD_ACMMOD 101 #define BSIM3_MOD_CALCACM 102 #define BSIM3_MOD_MOBMOD 103 #define BSIM3_MOD_NOIMOD 104 #define BSIM3_MOD_TOX 105 #define BSIM3_MOD_CDSC 106 #define BSIM3_MOD_CDSCB 107 #define BSIM3_MOD_CIT 108 #define BSIM3_MOD_NFACTOR 109 #define BSIM3_MOD_XJ 110 #define BSIM3_MOD_VSAT 111 #define BSIM3_MOD_AT 112 #define BSIM3_MOD_A0 113 #define BSIM3_MOD_A1 114 #define BSIM3_MOD_A2 115 #define BSIM3_MOD_KETA 116 #define BSIM3_MOD_NSUB 117 #define BSIM3_MOD_NPEAK 118 #define BSIM3_MOD_NGATE 120 #define BSIM3_MOD_GAMMA1 121 #define BSIM3_MOD_GAMMA2 122 #define BSIM3_MOD_VBX 123 #define BSIM3_MOD_BINUNIT 124 #define BSIM3_MOD_VBM 125 #define BSIM3_MOD_XT 126 #define BSIM3_MOD_K1 129 #define BSIM3_MOD_KT1 130 #define BSIM3_MOD_KT1L 131 #define BSIM3_MOD_K2 132 #define BSIM3_MOD_KT2 133 #define BSIM3_MOD_K3 134 #define BSIM3_MOD_K3B 135 #define BSIM3_MOD_W0 136 #define BSIM3_MOD_NLX 137 #define BSIM3_MOD_DVT0 138 #define BSIM3_MOD_DVT1 139 #define BSIM3_MOD_DVT2 140 #define BSIM3_MOD_DVT0W 141 #define BSIM3_MOD_DVT1W 142 #define BSIM3_MOD_DVT2W 143 #define BSIM3_MOD_DROUT 144 #define BSIM3_MOD_DSUB 145 #define BSIM3_MOD_VTH0 146 #define BSIM3_MOD_UA 147 #define BSIM3_MOD_UA1 148 #define BSIM3_MOD_UB 149 #define BSIM3_MOD_UB1 150 #define BSIM3_MOD_UC 151 #define BSIM3_MOD_UC1 152 #define BSIM3_MOD_U0 153 #define BSIM3_MOD_UTE 154 #define BSIM3_MOD_VOFF 155 #define BSIM3_MOD_DELTA 156 #define BSIM3_MOD_RDSW 157 #define BSIM3_MOD_PRT 158 #define BSIM3_MOD_LDD 159 #define BSIM3_MOD_ETA 160 #define BSIM3_MOD_ETA0 161 #define BSIM3_MOD_ETAB 162 #define BSIM3_MOD_PCLM 163 #define BSIM3_MOD_PDIBL1 164 #define BSIM3_MOD_PDIBL2 165 #define BSIM3_MOD_PSCBE1 166 #define BSIM3_MOD_PSCBE2 167 #define BSIM3_MOD_PVAG 168 #define BSIM3_MOD_WR 169 #define BSIM3_MOD_DWG 170 #define BSIM3_MOD_DWB 171 #define BSIM3_MOD_B0 172 #define BSIM3_MOD_B1 173 #define BSIM3_MOD_ALPHA0 174 #define BSIM3_MOD_BETA0 175 #define BSIM3_MOD_PDIBLB 178 #define BSIM3_MOD_PRWG 179 #define BSIM3_MOD_PRWB 180 #define BSIM3_MOD_CDSCD 181 #define BSIM3_MOD_AGS 182 #define BSIM3_MOD_FRINGE 184 #define BSIM3_MOD_ELM 185 #define BSIM3_MOD_CGSL 186 #define BSIM3_MOD_CGDL 187 #define BSIM3_MOD_CKAPPA 188 #define BSIM3_MOD_CF 189 #define BSIM3_MOD_CLC 190 #define BSIM3_MOD_CLE 191 #define BSIM3_MOD_PARAMCHK 192 #define BSIM3_MOD_VERSION 193 #define BSIM3_MOD_VFBCV 194 #define BSIM3_MOD_ACDE 195 #define BSIM3_MOD_MOIN 196 #define BSIM3_MOD_NOFF 197 #define BSIM3_MOD_IJTH 198 #define BSIM3_MOD_ALPHA1 199 #define BSIM3_MOD_VFB 200 #define BSIM3_MOD_TOXM 201 #define BSIM3_MOD_TCJ 202 #define BSIM3_MOD_TCJSW 203 #define BSIM3_MOD_TCJSWG 204 #define BSIM3_MOD_TPB 205 #define BSIM3_MOD_TPBSW 206 #define BSIM3_MOD_TPBSWG 207 #define BSIM3_MOD_VOFFCV 208 #define BSIM3_MOD_LINTNOI 209 #define BSIM3_MOD_NQSMOD 210 #define BSIM3_MOD_ACNQSMOD 211 /* Length dependence */ #define BSIM3_MOD_LCDSC 251 #define BSIM3_MOD_LCDSCB 252 #define BSIM3_MOD_LCIT 253 #define BSIM3_MOD_LNFACTOR 254 #define BSIM3_MOD_LXJ 255 #define BSIM3_MOD_LVSAT 256 #define BSIM3_MOD_LAT 257 #define BSIM3_MOD_LA0 258 #define BSIM3_MOD_LA1 259 #define BSIM3_MOD_LA2 260 #define BSIM3_MOD_LKETA 261 #define BSIM3_MOD_LNSUB 262 #define BSIM3_MOD_LNPEAK 263 #define BSIM3_MOD_LNGATE 265 #define BSIM3_MOD_LGAMMA1 266 #define BSIM3_MOD_LGAMMA2 267 #define BSIM3_MOD_LVBX 268 #define BSIM3_MOD_LVBM 270 #define BSIM3_MOD_LXT 272 #define BSIM3_MOD_LK1 275 #define BSIM3_MOD_LKT1 276 #define BSIM3_MOD_LKT1L 277 #define BSIM3_MOD_LK2 278 #define BSIM3_MOD_LKT2 279 #define BSIM3_MOD_LK3 280 #define BSIM3_MOD_LK3B 281 #define BSIM3_MOD_LW0 282 #define BSIM3_MOD_LNLX 283 #define BSIM3_MOD_LDVT0 284 #define BSIM3_MOD_LDVT1 285 #define BSIM3_MOD_LDVT2 286 #define BSIM3_MOD_LDVT0W 287 #define BSIM3_MOD_LDVT1W 288 #define BSIM3_MOD_LDVT2W 289 #define BSIM3_MOD_LDROUT 290 #define BSIM3_MOD_LDSUB 291 #define BSIM3_MOD_LVTH0 292 #define BSIM3_MOD_LUA 293 #define BSIM3_MOD_LUA1 294 #define BSIM3_MOD_LUB 295 #define BSIM3_MOD_LUB1 296 #define BSIM3_MOD_LUC 297 #define BSIM3_MOD_LUC1 298 #define BSIM3_MOD_LU0 299 #define BSIM3_MOD_LUTE 300 #define BSIM3_MOD_LVOFF 301 #define BSIM3_MOD_LDELTA 302 #define BSIM3_MOD_LRDSW 303 #define BSIM3_MOD_LPRT 304 #define BSIM3_MOD_LLDD 305 #define BSIM3_MOD_LETA 306 #define BSIM3_MOD_LETA0 307 #define BSIM3_MOD_LETAB 308 #define BSIM3_MOD_LPCLM 309 #define BSIM3_MOD_LPDIBL1 310 #define BSIM3_MOD_LPDIBL2 311 #define BSIM3_MOD_LPSCBE1 312 #define BSIM3_MOD_LPSCBE2 313 #define BSIM3_MOD_LPVAG 314 #define BSIM3_MOD_LWR 315 #define BSIM3_MOD_LDWG 316 #define BSIM3_MOD_LDWB 317 #define BSIM3_MOD_LB0 318 #define BSIM3_MOD_LB1 319 #define BSIM3_MOD_LALPHA0 320 #define BSIM3_MOD_LBETA0 321 #define BSIM3_MOD_LPDIBLB 324 #define BSIM3_MOD_LPRWG 325 #define BSIM3_MOD_LPRWB 326 #define BSIM3_MOD_LCDSCD 327 #define BSIM3_MOD_LAGS 328 #define BSIM3_MOD_LFRINGE 331 #define BSIM3_MOD_LELM 332 #define BSIM3_MOD_LCGSL 333 #define BSIM3_MOD_LCGDL 334 #define BSIM3_MOD_LCKAPPA 335 #define BSIM3_MOD_LCF 336 #define BSIM3_MOD_LCLC 337 #define BSIM3_MOD_LCLE 338 #define BSIM3_MOD_LVFBCV 339 #define BSIM3_MOD_LACDE 340 #define BSIM3_MOD_LMOIN 341 #define BSIM3_MOD_LNOFF 342 #define BSIM3_MOD_LALPHA1 344 #define BSIM3_MOD_LVFB 345 #define BSIM3_MOD_LVOFFCV 346 /* Width dependence */ #define BSIM3_MOD_WCDSC 381 #define BSIM3_MOD_WCDSCB 382 #define BSIM3_MOD_WCIT 383 #define BSIM3_MOD_WNFACTOR 384 #define BSIM3_MOD_WXJ 385 #define BSIM3_MOD_WVSAT 386 #define BSIM3_MOD_WAT 387 #define BSIM3_MOD_WA0 388 #define BSIM3_MOD_WA1 389 #define BSIM3_MOD_WA2 390 #define BSIM3_MOD_WKETA 391 #define BSIM3_MOD_WNSUB 392 #define BSIM3_MOD_WNPEAK 393 #define BSIM3_MOD_WNGATE 395 #define BSIM3_MOD_WGAMMA1 396 #define BSIM3_MOD_WGAMMA2 397 #define BSIM3_MOD_WVBX 398 #define BSIM3_MOD_WVBM 400 #define BSIM3_MOD_WXT 402 #define BSIM3_MOD_WK1 405 #define BSIM3_MOD_WKT1 406 #define BSIM3_MOD_WKT1L 407 #define BSIM3_MOD_WK2 408 #define BSIM3_MOD_WKT2 409 #define BSIM3_MOD_WK3 410 #define BSIM3_MOD_WK3B 411 #define BSIM3_MOD_WW0 412 #define BSIM3_MOD_WNLX 413 #define BSIM3_MOD_WDVT0 414 #define BSIM3_MOD_WDVT1 415 #define BSIM3_MOD_WDVT2 416 #define BSIM3_MOD_WDVT0W 417 #define BSIM3_MOD_WDVT1W 418 #define BSIM3_MOD_WDVT2W 419 #define BSIM3_MOD_WDROUT 420 #define BSIM3_MOD_WDSUB 421 #define BSIM3_MOD_WVTH0 422 #define BSIM3_MOD_WUA 423 #define BSIM3_MOD_WUA1 424 #define BSIM3_MOD_WUB 425 #define BSIM3_MOD_WUB1 426 #define BSIM3_MOD_WUC 427 #define BSIM3_MOD_WUC1 428 #define BSIM3_MOD_WU0 429 #define BSIM3_MOD_WUTE 430 #define BSIM3_MOD_WVOFF 431 #define BSIM3_MOD_WDELTA 432 #define BSIM3_MOD_WRDSW 433 #define BSIM3_MOD_WPRT 434 #define BSIM3_MOD_WLDD 435 #define BSIM3_MOD_WETA 436 #define BSIM3_MOD_WETA0 437 #define BSIM3_MOD_WETAB 438 #define BSIM3_MOD_WPCLM 439 #define BSIM3_MOD_WPDIBL1 440 #define BSIM3_MOD_WPDIBL2 441 #define BSIM3_MOD_WPSCBE1 442 #define BSIM3_MOD_WPSCBE2 443 #define BSIM3_MOD_WPVAG 444 #define BSIM3_MOD_WWR 445 #define BSIM3_MOD_WDWG 446 #define BSIM3_MOD_WDWB 447 #define BSIM3_MOD_WB0 448 #define BSIM3_MOD_WB1 449 #define BSIM3_MOD_WALPHA0 450 #define BSIM3_MOD_WBETA0 451 #define BSIM3_MOD_WPDIBLB 454 #define BSIM3_MOD_WPRWG 455 #define BSIM3_MOD_WPRWB 456 #define BSIM3_MOD_WCDSCD 457 #define BSIM3_MOD_WAGS 458 #define BSIM3_MOD_WFRINGE 461 #define BSIM3_MOD_WELM 462 #define BSIM3_MOD_WCGSL 463 #define BSIM3_MOD_WCGDL 464 #define BSIM3_MOD_WCKAPPA 465 #define BSIM3_MOD_WCF 466 #define BSIM3_MOD_WCLC 467 #define BSIM3_MOD_WCLE 468 #define BSIM3_MOD_WVFBCV 469 #define BSIM3_MOD_WACDE 470 #define BSIM3_MOD_WMOIN 471 #define BSIM3_MOD_WNOFF 472 #define BSIM3_MOD_WALPHA1 474 #define BSIM3_MOD_WVFB 475 #define BSIM3_MOD_WVOFFCV 476 /* Cross-term dependence */ #define BSIM3_MOD_PCDSC 511 #define BSIM3_MOD_PCDSCB 512 #define BSIM3_MOD_PCIT 513 #define BSIM3_MOD_PNFACTOR 514 #define BSIM3_MOD_PXJ 515 #define BSIM3_MOD_PVSAT 516 #define BSIM3_MOD_PAT 517 #define BSIM3_MOD_PA0 518 #define BSIM3_MOD_PA1 519 #define BSIM3_MOD_PA2 520 #define BSIM3_MOD_PKETA 521 #define BSIM3_MOD_PNSUB 522 #define BSIM3_MOD_PNPEAK 523 #define BSIM3_MOD_PNGATE 525 #define BSIM3_MOD_PGAMMA1 526 #define BSIM3_MOD_PGAMMA2 527 #define BSIM3_MOD_PVBX 528 #define BSIM3_MOD_PVBM 530 #define BSIM3_MOD_PXT 532 #define BSIM3_MOD_PK1 535 #define BSIM3_MOD_PKT1 536 #define BSIM3_MOD_PKT1L 537 #define BSIM3_MOD_PK2 538 #define BSIM3_MOD_PKT2 539 #define BSIM3_MOD_PK3 540 #define BSIM3_MOD_PK3B 541 #define BSIM3_MOD_PW0 542 #define BSIM3_MOD_PNLX 543 #define BSIM3_MOD_PDVT0 544 #define BSIM3_MOD_PDVT1 545 #define BSIM3_MOD_PDVT2 546 #define BSIM3_MOD_PDVT0W 547 #define BSIM3_MOD_PDVT1W 548 #define BSIM3_MOD_PDVT2W 549 #define BSIM3_MOD_PDROUT 550 #define BSIM3_MOD_PDSUB 551 #define BSIM3_MOD_PVTH0 552 #define BSIM3_MOD_PUA 553 #define BSIM3_MOD_PUA1 554 #define BSIM3_MOD_PUB 555 #define BSIM3_MOD_PUB1 556 #define BSIM3_MOD_PUC 557 #define BSIM3_MOD_PUC1 558 #define BSIM3_MOD_PU0 559 #define BSIM3_MOD_PUTE 560 #define BSIM3_MOD_PVOFF 561 #define BSIM3_MOD_PDELTA 562 #define BSIM3_MOD_PRDSW 563 #define BSIM3_MOD_PPRT 564 #define BSIM3_MOD_PLDD 565 #define BSIM3_MOD_PETA 566 #define BSIM3_MOD_PETA0 567 #define BSIM3_MOD_PETAB 568 #define BSIM3_MOD_PPCLM 569 #define BSIM3_MOD_PPDIBL1 570 #define BSIM3_MOD_PPDIBL2 571 #define BSIM3_MOD_PPSCBE1 572 #define BSIM3_MOD_PPSCBE2 573 #define BSIM3_MOD_PPVAG 574 #define BSIM3_MOD_PWR 575 #define BSIM3_MOD_PDWG 576 #define BSIM3_MOD_PDWB 577 #define BSIM3_MOD_PB0 578 #define BSIM3_MOD_PB1 579 #define BSIM3_MOD_PALPHA0 580 #define BSIM3_MOD_PBETA0 581 #define BSIM3_MOD_PPDIBLB 584 #define BSIM3_MOD_PPRWG 585 #define BSIM3_MOD_PPRWB 586 #define BSIM3_MOD_PCDSCD 587 #define BSIM3_MOD_PAGS 588 #define BSIM3_MOD_PFRINGE 591 #define BSIM3_MOD_PELM 592 #define BSIM3_MOD_PCGSL 593 #define BSIM3_MOD_PCGDL 594 #define BSIM3_MOD_PCKAPPA 595 #define BSIM3_MOD_PCF 596 #define BSIM3_MOD_PCLC 597 #define BSIM3_MOD_PCLE 598 #define BSIM3_MOD_PVFBCV 599 #define BSIM3_MOD_PACDE 600 #define BSIM3_MOD_PMOIN 601 #define BSIM3_MOD_PNOFF 602 #define BSIM3_MOD_PALPHA1 604 #define BSIM3_MOD_PVFB 605 #define BSIM3_MOD_PVOFFCV 606 #define BSIM3_MOD_TNOM 651 #define BSIM3_MOD_CGSO 652 #define BSIM3_MOD_CGDO 653 #define BSIM3_MOD_CGBO 654 #define BSIM3_MOD_XPART 655 #define BSIM3_MOD_RSH 656 #define BSIM3_MOD_JS 657 #define BSIM3_MOD_PB 658 #define BSIM3_MOD_MJ 659 #define BSIM3_MOD_PBSW 660 #define BSIM3_MOD_MJSW 661 #define BSIM3_MOD_CJ 662 #define BSIM3_MOD_CJSW 663 #define BSIM3_MOD_NMOS 664 #define BSIM3_MOD_PMOS 665 #define BSIM3_MOD_NOIA 666 #define BSIM3_MOD_NOIB 667 #define BSIM3_MOD_NOIC 668 #define BSIM3_MOD_LINT 669 #define BSIM3_MOD_LL 670 #define BSIM3_MOD_LLN 671 #define BSIM3_MOD_LW 672 #define BSIM3_MOD_LWN 673 #define BSIM3_MOD_LWL 674 #define BSIM3_MOD_LMIN 675 #define BSIM3_MOD_LMAX 676 #define BSIM3_MOD_WINT 677 #define BSIM3_MOD_WL 678 #define BSIM3_MOD_WLN 679 #define BSIM3_MOD_WW 680 #define BSIM3_MOD_WWN 681 #define BSIM3_MOD_WWL 682 #define BSIM3_MOD_WMIN 683 #define BSIM3_MOD_WMAX 684 #define BSIM3_MOD_DWC 685 #define BSIM3_MOD_DLC 686 #define BSIM3_MOD_EM 687 #define BSIM3_MOD_EF 688 #define BSIM3_MOD_AF 689 #define BSIM3_MOD_KF 690 #define BSIM3_MOD_NJ 691 #define BSIM3_MOD_XTI 692 #define BSIM3_MOD_PBSWG 693 #define BSIM3_MOD_MJSWG 694 #define BSIM3_MOD_CJSWG 695 #define BSIM3_MOD_JSW 696 #define BSIM3_MOD_LLC 697 #define BSIM3_MOD_LWC 698 #define BSIM3_MOD_LWLC 699 #define BSIM3_MOD_WLC 700 #define BSIM3_MOD_WWC 701 #define BSIM3_MOD_WWLC 702 /* ACM parameters */ #define BSIM3_MOD_XL 703 #define BSIM3_MOD_XW 704 #define BSIM3_MOD_HDIF 711 #define BSIM3_MOD_LDIF 712 #define BSIM3_MOD_LD 713 #define BSIM3_MOD_RD 714 #define BSIM3_MOD_RS 715 #define BSIM3_MOD_RDC 716 #define BSIM3_MOD_RSC 717 #define BSIM3_MOD_WMLT 718 /* device questions */ #define BSIM3_DNODE 751 #define BSIM3_GNODE 752 #define BSIM3_SNODE 753 #define BSIM3_BNODE 754 #define BSIM3_DNODEPRIME 755 #define BSIM3_SNODEPRIME 756 #define BSIM3_VBD 757 #define BSIM3_VBS 758 #define BSIM3_VGS 759 #define BSIM3_VDS 760 #define BSIM3_CD 761 #define BSIM3_CBS 762 #define BSIM3_CBD 763 #define BSIM3_GM 764 #define BSIM3_GDS 765 #define BSIM3_GMBS 766 #define BSIM3_GBD 767 #define BSIM3_GBS 768 #define BSIM3_QB 769 #define BSIM3_CQB 770 #define BSIM3_QG 771 #define BSIM3_CQG 772 #define BSIM3_QD 773 #define BSIM3_CQD 774 #define BSIM3_CGG 775 #define BSIM3_CGD 776 #define BSIM3_CGS 777 #define BSIM3_CBG 778 #define BSIM3_CAPBD 779 #define BSIM3_CQBD 780 #define BSIM3_CAPBS 781 #define BSIM3_CQBS 782 #define BSIM3_CDG 783 #define BSIM3_CDD 784 #define BSIM3_CDS 785 #define BSIM3_VON 786 #define BSIM3_VDSAT 787 #define BSIM3_QBS 788 #define BSIM3_QBD 789 #define BSIM3_SOURCECONDUCT 790 #define BSIM3_DRAINCONDUCT 791 #define BSIM3_CBDB 792 #define BSIM3_CBSB 793 #define BSIM3_MOD_VGS_MAX 801 #define BSIM3_MOD_VGD_MAX 802 #define BSIM3_MOD_VGB_MAX 803 #define BSIM3_MOD_VDS_MAX 804 #define BSIM3_MOD_VBS_MAX 805 #define BSIM3_MOD_VBD_MAX 806 #define BSIM3_MOD_VGSR_MAX 807 #define BSIM3_MOD_VGDR_MAX 808 #define BSIM3_MOD_VGBR_MAX 809 #define BSIM3_MOD_VBSR_MAX 810 #define BSIM3_MOD_VBDR_MAX 811 #include "bsim3ext.h" extern void BSIM3evaluate(double,double,double,BSIM3instance*,BSIM3model*, double*,double*,double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, CKTcircuit*); extern int BSIM3debug(BSIM3model*, BSIM3instance*, CKTcircuit*, int); extern int BSIM3checkModel(BSIM3model*, BSIM3instance*, CKTcircuit*); #endif /*BSIM3*/ tmpk8ny_4pz/src/spicelib/devices/bsim3/b3ask.c0000644000175000017500000001726313546075722021360 0ustar carstencarsten/**** BSIM3v3.3.0, Released by Xuemei Xi 07/29/2005 ****/ /********** * Copyright 2004 Regents of the University of California. All rights reserved. * File: b3ask.c of BSIM3v3.3.0 * Author: 1995 Min-Chie Jeng and Mansun Chan * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "bsim3def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3ask( CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { BSIM3instance *here = (BSIM3instance*)inst; NG_IGNORE(select); switch(which) { case BSIM3_L: value->rValue = here->BSIM3l; return(OK); case BSIM3_W: value->rValue = here->BSIM3w; return(OK); case BSIM3_M: value->rValue = here->BSIM3m; return(OK); case BSIM3_AS: value->rValue = here->BSIM3sourceArea; return(OK); case BSIM3_AD: value->rValue = here->BSIM3drainArea; return(OK); case BSIM3_PS: value->rValue = here->BSIM3sourcePerimeter; return(OK); case BSIM3_PD: value->rValue = here->BSIM3drainPerimeter; return(OK); case BSIM3_NRS: value->rValue = here->BSIM3sourceSquares; return(OK); case BSIM3_NRD: value->rValue = here->BSIM3drainSquares; return(OK); case BSIM3_OFF: value->rValue = here->BSIM3off; return(OK); case BSIM3_NQSMOD: value->iValue = here->BSIM3nqsMod; return(OK); case BSIM3_ACNQSMOD: value->iValue = here->BSIM3acnqsMod; return(OK); case BSIM3_GEO: value->iValue = here->BSIM3geo; return(OK); case BSIM3_DELVTO: value->rValue = here->BSIM3delvto; return(OK); case BSIM3_MULU0: value->rValue = here->BSIM3mulu0; return(OK); case BSIM3_IC_VBS: value->rValue = here->BSIM3icVBS; return(OK); case BSIM3_IC_VDS: value->rValue = here->BSIM3icVDS; return(OK); case BSIM3_IC_VGS: value->rValue = here->BSIM3icVGS; return(OK); case BSIM3_DNODE: value->iValue = here->BSIM3dNode; return(OK); case BSIM3_GNODE: value->iValue = here->BSIM3gNode; return(OK); case BSIM3_SNODE: value->iValue = here->BSIM3sNode; return(OK); case BSIM3_BNODE: value->iValue = here->BSIM3bNode; return(OK); case BSIM3_DNODEPRIME: value->iValue = here->BSIM3dNodePrime; return(OK); case BSIM3_SNODEPRIME: value->iValue = here->BSIM3sNodePrime; return(OK); case BSIM3_SOURCECONDUCT: value->rValue = here->BSIM3sourceConductance; value->rValue *= here->BSIM3m; return(OK); case BSIM3_DRAINCONDUCT: value->rValue = here->BSIM3drainConductance; value->rValue *= here->BSIM3m; return(OK); case BSIM3_VBD: value->rValue = *(ckt->CKTstate0 + here->BSIM3vbd); return(OK); case BSIM3_VBS: value->rValue = *(ckt->CKTstate0 + here->BSIM3vbs); return(OK); case BSIM3_VGS: value->rValue = *(ckt->CKTstate0 + here->BSIM3vgs); return(OK); case BSIM3_VDS: value->rValue = *(ckt->CKTstate0 + here->BSIM3vds); return(OK); case BSIM3_CD: value->rValue = here->BSIM3cd; value->rValue *= here->BSIM3m; return(OK); case BSIM3_CBS: value->rValue = here->BSIM3cbs; value->rValue *= here->BSIM3m; return(OK); case BSIM3_CBD: value->rValue = here->BSIM3cbd; value->rValue *= here->BSIM3m; return(OK); case BSIM3_GM: value->rValue = here->BSIM3gm; value->rValue *= here->BSIM3m; return(OK); case BSIM3_GDS: value->rValue = here->BSIM3gds; value->rValue *= here->BSIM3m; return(OK); case BSIM3_GMBS: value->rValue = here->BSIM3gmbs; value->rValue *= here->BSIM3m; return(OK); case BSIM3_GBD: value->rValue = here->BSIM3gbd; value->rValue *= here->BSIM3m; return(OK); case BSIM3_GBS: value->rValue = here->BSIM3gbs; value->rValue *= here->BSIM3m; return(OK); case BSIM3_QB: value->rValue = *(ckt->CKTstate0 + here->BSIM3qb); value->rValue *= here->BSIM3m; return(OK); case BSIM3_CQB: value->rValue = *(ckt->CKTstate0 + here->BSIM3cqb); value->rValue *= here->BSIM3m; return(OK); case BSIM3_QG: value->rValue = *(ckt->CKTstate0 + here->BSIM3qg); value->rValue *= here->BSIM3m; return(OK); case BSIM3_CQG: value->rValue = *(ckt->CKTstate0 + here->BSIM3cqg); value->rValue *= here->BSIM3m; return(OK); case BSIM3_QD: value->rValue = *(ckt->CKTstate0 + here->BSIM3qd); value->rValue *= here->BSIM3m; return(OK); case BSIM3_CQD: value->rValue = *(ckt->CKTstate0 + here->BSIM3cqd); value->rValue *= here->BSIM3m; return(OK); case BSIM3_CGG: value->rValue = here->BSIM3cggb; value->rValue *= here->BSIM3m; return(OK); case BSIM3_CGD: value->rValue = here->BSIM3cgdb; value->rValue *= here->BSIM3m; return(OK); case BSIM3_CGS: value->rValue = here->BSIM3cgsb; value->rValue *= here->BSIM3m; return(OK); case BSIM3_CDG: value->rValue = here->BSIM3cdgb; value->rValue *= here->BSIM3m; return(OK); case BSIM3_CDD: value->rValue = here->BSIM3cddb; value->rValue *= here->BSIM3m; return(OK); case BSIM3_CDS: value->rValue = here->BSIM3cdsb; value->rValue *= here->BSIM3m; return(OK); case BSIM3_CBG: value->rValue = here->BSIM3cbgb; value->rValue *= here->BSIM3m; return(OK); case BSIM3_CBDB: value->rValue = here->BSIM3cbdb; value->rValue *= here->BSIM3m; return(OK); case BSIM3_CBSB: value->rValue = here->BSIM3cbsb; value->rValue *= here->BSIM3m; return(OK); case BSIM3_CAPBD: value->rValue = here->BSIM3capbd; value->rValue *= here->BSIM3m; return(OK); case BSIM3_CAPBS: value->rValue = here->BSIM3capbs; value->rValue *= here->BSIM3m; return(OK); case BSIM3_VON: value->rValue = here->BSIM3von; return(OK); case BSIM3_VDSAT: value->rValue = here->BSIM3vdsat; return(OK); case BSIM3_QBS: value->rValue = *(ckt->CKTstate0 + here->BSIM3qbs); value->rValue *= here->BSIM3m; return(OK); case BSIM3_QBD: value->rValue = *(ckt->CKTstate0 + here->BSIM3qbd); value->rValue *= here->BSIM3m; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim3/b3ld.c0000644000175000017500000040734413546075722021204 0ustar carstencarsten/**** BSIM3v3.3.0, Released by Xuemei Xi 07/29/2005 ****/ /**** OpenMP support for ngspice by Holger Vogt 06/28/2010 ****/ /********** * Copyright 2004 Regents of the University of California. All rights reserved. * File: b3ld.c of BSIM3v3.3.0 * Author: 1991 JianHui Huang and Min-Chie Jeng. * Modified by Mansun Chan (1995). * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi * Modified by Xuemei Xi, 10/05, 12/21, 2001. * Modified by Xuemei Xi, 07/29/2005. **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define Charge_q 1.60219e-19 #define DELTA_1 0.02 #define DELTA_2 0.02 #define DELTA_3 0.02 #define DELTA_4 0.02 #ifdef USE_OMP int BSIM3LoadOMP(BSIM3instance *here, CKTcircuit *ckt); void BSIM3LoadRhsMat(GENmodel *inModel, CKTcircuit *ckt); #endif int BSIM3load( GENmodel *inModel, CKTcircuit *ckt) { #ifdef USE_OMP int idx; BSIM3model *model = (BSIM3model*)inModel; int error = 0; BSIM3instance **InstArray; InstArray = model->BSIM3InstanceArray; #pragma omp parallel for for (idx = 0; idx < model->BSIM3InstCount; idx++) { BSIM3instance *here = InstArray[idx]; int local_error = BSIM3LoadOMP(here, ckt); if (local_error) error = local_error; } BSIM3LoadRhsMat(inModel, ckt); return error; } int BSIM3LoadOMP(BSIM3instance *here, CKTcircuit *ckt) { BSIM3model *model = BSIM3modPtr(here); #else BSIM3model *model = (BSIM3model*)inModel; BSIM3instance *here; #endif double SourceSatCurrent, DrainSatCurrent; double ag0, qgd, qgs, qgb, von, cbhat, VgstNVt, ExpVgst; double cdrain, cdhat, cdreq, ceqbd, ceqbs, ceqqb, ceqqd, ceqqg, ceq, geq; double czbd, czbdsw, czbdswg, czbs, czbssw, czbsswg, evbd, evbs, arg, sarg; double delvbd, delvbs, delvds, delvgd, delvgs; double Vfbeff, dVfbeff_dVg, dVfbeff_dVb, V3, V4; double gcbdb, gcbgb, gcbsb, gcddb, gcdgb, gcdsb, gcgdb, gcggb, gcgsb, gcsdb; #ifndef NEWCONV double tol; #endif double gcsgb, gcssb, MJ, MJSW, MJSWG; double vbd, vbs, vds, vgb, vgd, vgs, vgdo; #ifndef PREDICTOR double xfact; #endif double qgate=0.0, qbulk=0.0, qdrn=0.0, qsrc, qinoi, cqgate, cqbulk, cqdrn; double Vds, Vgs, Vbs, Gmbs, FwdSum, RevSum; double Vgs_eff, Vfb; double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth, dVth_dVb, dVth_dVd; double Vgst, dVgst_dVg, dVgst_dVb, dVgs_eff_dVg, Nvtm; double Vtm; double n, dn_dVb, dn_dVd, voffcv, noff, dnoff_dVd, dnoff_dVb; double ExpArg, V0, CoxWLcen, QovCox, LINK; double DeltaPhi, dDeltaPhi_dVg, VgDP, dVgDP_dVg; double Cox, Tox, Tcen, dTcen_dVg, dTcen_dVd, dTcen_dVb; double Ccen, Coxeff, dCoxeff_dVg, dCoxeff_dVd, dCoxeff_dVb; double Denomi, dDenomi_dVg, dDenomi_dVd, dDenomi_dVb; double ueff, dueff_dVg, dueff_dVd, dueff_dVb; double Esat, Vdsat; double EsatL, dEsatL_dVg, dEsatL_dVd, dEsatL_dVb; double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, Vasat, dAlphaz_dVg, dAlphaz_dVb; double dVasat_dVg, dVasat_dVb, dVasat_dVd, Va, dVa_dVd, dVa_dVg, dVa_dVb; double Vbseff, dVbseff_dVb, VbseffCV, dVbseffCV_dVb; double Arg1, One_Third_CoxWL, Two_Third_CoxWL, Alphaz, CoxWL; double T0, dT0_dVg, dT0_dVd, dT0_dVb; double T1, dT1_dVg, dT1_dVd, dT1_dVb; double T2, dT2_dVg, dT2_dVd, dT2_dVb; double T3, dT3_dVg, dT3_dVd, dT3_dVb; double T4; double T5; double T6; double T7; double T8; double T9; double T10; double T11, T12; double tmp, Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVb; double VACLM, dVACLM_dVg, dVACLM_dVd, dVACLM_dVb; double VADIBL, dVADIBL_dVg, dVADIBL_dVd, dVADIBL_dVb; double Xdep, dXdep_dVb, lt1, dlt1_dVb, ltw, dltw_dVb, Delt_vth, dDelt_vth_dVb; double Theta0, dTheta0_dVb; double TempRatio, tmp1, tmp2, tmp3, tmp4; double DIBL_Sft, dDIBL_Sft_dVd, Lambda, dLambda_dVg; double Idtot, Ibtot; #ifndef NOBYPASS double tempv; #endif double a1, ScalingFactor; double Vgsteff, dVgsteff_dVg, dVgsteff_dVd, dVgsteff_dVb; double Vdseff, dVdseff_dVg, dVdseff_dVd, dVdseff_dVb; double VdseffCV, dVdseffCV_dVg, dVdseffCV_dVd, dVdseffCV_dVb; double diffVds, dAbulk_dVg; double beta, dbeta_dVg, dbeta_dVd, dbeta_dVb; double gche, dgche_dVg, dgche_dVd, dgche_dVb; double fgche1, dfgche1_dVg, dfgche1_dVd, dfgche1_dVb; double fgche2, dfgche2_dVg, dfgche2_dVd, dfgche2_dVb; double Idl, dIdl_dVg, dIdl_dVd, dIdl_dVb; double Idsa, dIdsa_dVg, dIdsa_dVd, dIdsa_dVb; double Ids, Gm, Gds, Gmb; double Isub, Gbd, Gbg, Gbb; double VASCBE, dVASCBE_dVg, dVASCBE_dVd, dVASCBE_dVb; double CoxWovL; double Rds, dRds_dVg, dRds_dVb, WVCox, WVCoxRds; double Vgst2Vtm, VdsatCV, dVdsatCV_dVg, dVdsatCV_dVb; double Leff, Weff, dWeff_dVg, dWeff_dVb; double AbulkCV, dAbulkCV_dVb; double qgdo, qgso, cgdo, cgso; double qcheq=0.0, qdef, gqdef=0.0, cqdef, cqcheq, gtau_diff, gtau_drift; double gcqdb=0.0,gcqsb=0.0,gcqgb=0.0,gcqbb=0.0; double dxpart, sxpart, ggtg, ggtd, ggts, ggtb; double ddxpart_dVd, ddxpart_dVg, ddxpart_dVb, ddxpart_dVs; double dsxpart_dVd, dsxpart_dVg, dsxpart_dVb, dsxpart_dVs; double gbspsp, gbbdp, gbbsp, gbspg, gbspb, gbspdp; double gbdpdp, gbdpg, gbdpb, gbdpsp; double Cgg, Cgd, Cgb, Cdg, Cdd, Cds; double Csg, Csd, Css, Csb, Cbg, Cbd, Cbb; double Cgg1, Cgb1, Cgd1, Cbg1, Cbb1, Cbd1, Qac0, Qsub0; double dQac0_dVg, dQac0_dVb, dQsub0_dVg, dQsub0_dVd, dQsub0_dVb; double m; struct bsim3SizeDependParam *pParam; int ByPass, Check, ChargeComputationNeeded, error; /* double junk[50]; */ ScalingFactor = 1.0e-9; ChargeComputationNeeded = ((ckt->CKTmode & (MODEDCTRANCURVE | MODEAC | MODETRAN | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) ? 1 : 0; #ifndef USE_OMP for (; model != NULL; model = BSIM3nextModel(model)) { for (here = BSIM3instances(model); here != NULL; here = BSIM3nextInstance(here)) { #endif Check = 1; ByPass = 0; pParam = here->pParam; if ((ckt->CKTmode & MODEINITSMSIG)) { vbs = *(ckt->CKTstate0 + here->BSIM3vbs); vgs = *(ckt->CKTstate0 + here->BSIM3vgs); vds = *(ckt->CKTstate0 + here->BSIM3vds); qdef = *(ckt->CKTstate0 + here->BSIM3qdef); } else if ((ckt->CKTmode & MODEINITTRAN)) { vbs = *(ckt->CKTstate1 + here->BSIM3vbs); vgs = *(ckt->CKTstate1 + here->BSIM3vgs); vds = *(ckt->CKTstate1 + here->BSIM3vds); qdef = *(ckt->CKTstate1 + here->BSIM3qdef); } else if ((ckt->CKTmode & MODEINITJCT) && !here->BSIM3off) { vds = model->BSIM3type * here->BSIM3icVDS; vgs = model->BSIM3type * here->BSIM3icVGS; vbs = model->BSIM3type * here->BSIM3icVBS; qdef = 0.0; if ((vds == 0.0) && (vgs == 0.0) && (vbs == 0.0) && ((ckt->CKTmode & (MODETRAN | MODEAC|MODEDCOP | MODEDCTRANCURVE)) || (!(ckt->CKTmode & MODEUIC)))) { vbs = 0.0; vgs = model->BSIM3type * here->BSIM3vth0 + 0.1; vds = 0.1; } } else if ((ckt->CKTmode & (MODEINITJCT | MODEINITFIX)) && (here->BSIM3off)) { qdef = vbs = vgs = vds = 0.0; } else { #ifndef PREDICTOR if ((ckt->CKTmode & MODEINITPRED)) { xfact = ckt->CKTdelta / ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->BSIM3vbs) = *(ckt->CKTstate1 + here->BSIM3vbs); vbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM3vbs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM3vbs))); *(ckt->CKTstate0 + here->BSIM3vgs) = *(ckt->CKTstate1 + here->BSIM3vgs); vgs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM3vgs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM3vgs))); *(ckt->CKTstate0 + here->BSIM3vds) = *(ckt->CKTstate1 + here->BSIM3vds); vds = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM3vds)) - (xfact * (*(ckt->CKTstate2 + here->BSIM3vds))); *(ckt->CKTstate0 + here->BSIM3vbd) = *(ckt->CKTstate0 + here->BSIM3vbs) - *(ckt->CKTstate0 + here->BSIM3vds); *(ckt->CKTstate0 + here->BSIM3qdef) = *(ckt->CKTstate1 + here->BSIM3qdef); qdef = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM3qdef)) -(xfact * (*(ckt->CKTstate2 + here->BSIM3qdef))); } else { #endif /* PREDICTOR */ vbs = model->BSIM3type * (*(ckt->CKTrhsOld + here->BSIM3bNode) - *(ckt->CKTrhsOld + here->BSIM3sNodePrime)); vgs = model->BSIM3type * (*(ckt->CKTrhsOld + here->BSIM3gNode) - *(ckt->CKTrhsOld + here->BSIM3sNodePrime)); vds = model->BSIM3type * (*(ckt->CKTrhsOld + here->BSIM3dNodePrime) - *(ckt->CKTrhsOld + here->BSIM3sNodePrime)); qdef = model->BSIM3type * (*(ckt->CKTrhsOld + here->BSIM3qNode)); #ifndef PREDICTOR } #endif /* PREDICTOR */ vbd = vbs - vds; vgd = vgs - vds; vgdo = *(ckt->CKTstate0 + here->BSIM3vgs) - *(ckt->CKTstate0 + here->BSIM3vds); delvbs = vbs - *(ckt->CKTstate0 + here->BSIM3vbs); delvbd = vbd - *(ckt->CKTstate0 + here->BSIM3vbd); delvgs = vgs - *(ckt->CKTstate0 + here->BSIM3vgs); delvds = vds - *(ckt->CKTstate0 + here->BSIM3vds); delvgd = vgd - vgdo; if (here->BSIM3mode >= 0) { Idtot = here->BSIM3cd + here->BSIM3csub - here->BSIM3cbd; cdhat = Idtot - here->BSIM3gbd * delvbd + (here->BSIM3gmbs + here->BSIM3gbbs) * delvbs + (here->BSIM3gm + here->BSIM3gbgs) * delvgs + (here->BSIM3gds + here->BSIM3gbds) * delvds; Ibtot = here->BSIM3cbs + here->BSIM3cbd - here->BSIM3csub; cbhat = Ibtot + here->BSIM3gbd * delvbd + (here->BSIM3gbs - here->BSIM3gbbs) * delvbs - here->BSIM3gbgs * delvgs - here->BSIM3gbds * delvds; } else { Idtot = here->BSIM3cd - here->BSIM3cbd; cdhat = Idtot - (here->BSIM3gbd - here->BSIM3gmbs) * delvbd + here->BSIM3gm * delvgd - here->BSIM3gds * delvds; Ibtot = here->BSIM3cbs + here->BSIM3cbd - here->BSIM3csub; cbhat = Ibtot + here->BSIM3gbs * delvbs + (here->BSIM3gbd - here->BSIM3gbbs) * delvbd - here->BSIM3gbgs * delvgd + here->BSIM3gbds * delvds; } #ifndef NOBYPASS /* following should be one big if connected by && all over * the place, but some C compilers can't handle that, so * we split it up here to let them digest it in stages */ if ((!(ckt->CKTmode & MODEINITPRED)) && (ckt->CKTbypass)) if ((fabs(delvbs) < (ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->BSIM3vbs))) + ckt->CKTvoltTol))) if ((fabs(delvbd) < (ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0+here->BSIM3vbd))) + ckt->CKTvoltTol))) if ((fabs(delvgs) < (ckt->CKTreltol * MAX(fabs(vgs), fabs(*(ckt->CKTstate0+here->BSIM3vgs))) + ckt->CKTvoltTol))) if ((fabs(delvds) < (ckt->CKTreltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0+here->BSIM3vds))) + ckt->CKTvoltTol))) if ((fabs(cdhat - Idtot) < ckt->CKTreltol * MAX(fabs(cdhat),fabs(Idtot)) + ckt->CKTabstol)) { tempv = MAX(fabs(cbhat),fabs(Ibtot)) + ckt->CKTabstol; if ((fabs(cbhat - Ibtot)) < ckt->CKTreltol * tempv) { /* bypass code */ vbs = *(ckt->CKTstate0 + here->BSIM3vbs); vbd = *(ckt->CKTstate0 + here->BSIM3vbd); vgs = *(ckt->CKTstate0 + here->BSIM3vgs); vds = *(ckt->CKTstate0 + here->BSIM3vds); qdef = *(ckt->CKTstate0 + here->BSIM3qdef); vgd = vgs - vds; vgb = vgs - vbs; cdrain = here->BSIM3cd; if ((ckt->CKTmode & (MODETRAN | MODEAC)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) { ByPass = 1; qgate = here->BSIM3qgate; qbulk = here->BSIM3qbulk; qdrn = here->BSIM3qdrn; goto line755; } else { goto line850; } } } #endif /*NOBYPASS*/ von = here->BSIM3von; if (*(ckt->CKTstate0 + here->BSIM3vds) >= 0.0) { vgs = DEVfetlim(vgs, *(ckt->CKTstate0+here->BSIM3vgs), von); vds = vgs - vgd; vds = DEVlimvds(vds, *(ckt->CKTstate0 + here->BSIM3vds)); vgd = vgs - vds; } else { vgd = DEVfetlim(vgd, vgdo, von); vds = vgs - vgd; vds = -DEVlimvds(-vds, -(*(ckt->CKTstate0+here->BSIM3vds))); vgs = vgd + vds; } if (vds >= 0.0) { vbs = DEVpnjlim(vbs, *(ckt->CKTstate0 + here->BSIM3vbs), CONSTvt0, model->BSIM3vcrit, &Check); vbd = vbs - vds; } else { vbd = DEVpnjlim(vbd, *(ckt->CKTstate0 + here->BSIM3vbd), CONSTvt0, model->BSIM3vcrit, &Check); vbs = vbd + vds; } } /* determine DC current and derivatives */ vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; /* Source/drain junction diode DC model begins */ Nvtm = model->BSIM3vtm * model->BSIM3jctEmissionCoeff; /* acm model */ if (model->BSIM3acmMod == 0) { if ((here->BSIM3sourceArea <= 0.0) && (here->BSIM3sourcePerimeter <= 0.0)) { SourceSatCurrent = 1.0e-14; } else { SourceSatCurrent = here->BSIM3sourceArea * model->BSIM3jctTempSatCurDensity + here->BSIM3sourcePerimeter * model->BSIM3jctSidewallTempSatCurDensity; } if ((here->BSIM3drainArea <= 0.0) && (here->BSIM3drainPerimeter <= 0.0)) { DrainSatCurrent = 1.0e-14; } else { DrainSatCurrent = here->BSIM3drainArea * model->BSIM3jctTempSatCurDensity + here->BSIM3drainPerimeter * model->BSIM3jctSidewallTempSatCurDensity; } } else { error = ACM_saturationCurrents( model->BSIM3acmMod, model->BSIM3calcacm, here->BSIM3geo, model->BSIM3hdif, model->BSIM3wmlt, here->BSIM3w, model->BSIM3xw, model->BSIM3jctTempSatCurDensity, model->BSIM3jctSidewallTempSatCurDensity, here->BSIM3drainAreaGiven, here->BSIM3drainArea, here->BSIM3drainPerimeterGiven, here->BSIM3drainPerimeter, here->BSIM3sourceAreaGiven, here->BSIM3sourceArea, here->BSIM3sourcePerimeterGiven, here->BSIM3sourcePerimeter, &DrainSatCurrent, &SourceSatCurrent ); if (error) return(error); } if (SourceSatCurrent <= 0.0) { here->BSIM3gbs = ckt->CKTgmin; here->BSIM3cbs = here->BSIM3gbs * vbs; } else { if (model->BSIM3ijth == 0.0) { evbs = exp(vbs / Nvtm); here->BSIM3gbs = SourceSatCurrent * evbs / Nvtm + ckt->CKTgmin; here->BSIM3cbs = SourceSatCurrent * (evbs - 1.0) + ckt->CKTgmin * vbs; } else { if (vbs < here->BSIM3vjsm) { evbs = exp(vbs / Nvtm); here->BSIM3gbs = SourceSatCurrent * evbs / Nvtm + ckt->CKTgmin; here->BSIM3cbs = SourceSatCurrent * (evbs - 1.0) + ckt->CKTgmin * vbs; } else { T0 = here->BSIM3IsEvjsm / Nvtm; here->BSIM3gbs = T0 + ckt->CKTgmin; here->BSIM3cbs = here->BSIM3IsEvjsm - SourceSatCurrent + T0 * (vbs - here->BSIM3vjsm) + ckt->CKTgmin * vbs; } } } if (DrainSatCurrent <= 0.0) { here->BSIM3gbd = ckt->CKTgmin; here->BSIM3cbd = here->BSIM3gbd * vbd; } else { if (model->BSIM3ijth == 0.0) { evbd = exp(vbd / Nvtm); here->BSIM3gbd = DrainSatCurrent * evbd / Nvtm + ckt->CKTgmin; here->BSIM3cbd = DrainSatCurrent * (evbd - 1.0) + ckt->CKTgmin * vbd; } else { if (vbd < here->BSIM3vjdm) { evbd = exp(vbd / Nvtm); here->BSIM3gbd = DrainSatCurrent * evbd / Nvtm + ckt->CKTgmin; here->BSIM3cbd = DrainSatCurrent * (evbd - 1.0) + ckt->CKTgmin * vbd; } else { T0 = here->BSIM3IsEvjdm / Nvtm; here->BSIM3gbd = T0 + ckt->CKTgmin; here->BSIM3cbd = here->BSIM3IsEvjdm - DrainSatCurrent + T0 * (vbd - here->BSIM3vjdm) + ckt->CKTgmin * vbd; } } } /* End of diode DC model */ if (vds >= 0.0) { /* normal mode */ here->BSIM3mode = 1; Vds = vds; Vgs = vgs; Vbs = vbs; } else { /* inverse mode */ here->BSIM3mode = -1; Vds = -vds; Vgs = vgd; Vbs = vbd; } T0 = Vbs - pParam->BSIM3vbsc - 0.001; T1 = sqrt(T0 * T0 - 0.004 * pParam->BSIM3vbsc); Vbseff = pParam->BSIM3vbsc + 0.5 * (T0 + T1); dVbseff_dVb = 0.5 * (1.0 + T0 / T1); if (Vbseff < Vbs) { Vbseff = Vbs; } if (Vbseff > 0.0) { T0 = pParam->BSIM3phi / (pParam->BSIM3phi + Vbseff); Phis = pParam->BSIM3phi * T0; dPhis_dVb = -T0 * T0; sqrtPhis = pParam->BSIM3phis3 / (pParam->BSIM3phi + 0.5 * Vbseff); dsqrtPhis_dVb = -0.5 * sqrtPhis * sqrtPhis / pParam->BSIM3phis3; } else { Phis = pParam->BSIM3phi - Vbseff; dPhis_dVb = -1.0; sqrtPhis = sqrt(Phis); dsqrtPhis_dVb = -0.5 / sqrtPhis; } Xdep = pParam->BSIM3Xdep0 * sqrtPhis / pParam->BSIM3sqrtPhi; dXdep_dVb = (pParam->BSIM3Xdep0 / pParam->BSIM3sqrtPhi) * dsqrtPhis_dVb; Leff = pParam->BSIM3leff; Vtm = model->BSIM3vtm; /* Vth Calculation */ T3 = sqrt(Xdep); V0 = pParam->BSIM3vbi - pParam->BSIM3phi; T0 = pParam->BSIM3dvt2 * Vbseff; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->BSIM3dvt2; } else /* Added to avoid any discontinuity problems caused by dvt2 */ { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->BSIM3dvt2 * T4 * T4; } lt1 = model->BSIM3factor1 * T3 * T1; dlt1_dVb = model->BSIM3factor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * T2); T0 = pParam->BSIM3dvt2w * Vbseff; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->BSIM3dvt2w; } else /* Added to avoid any discontinuity problems caused by dvt2w */ { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->BSIM3dvt2w * T4 * T4; } ltw = model->BSIM3factor1 * T3 * T1; dltw_dVb = model->BSIM3factor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * T2); T0 = -0.5 * pParam->BSIM3dvt1 * Leff / lt1; if (T0 > -EXP_THRESHOLD) { T1 = exp(T0); Theta0 = T1 * (1.0 + 2.0 * T1); dT1_dVb = -T0 / lt1 * T1 * dlt1_dVb; dTheta0_dVb = (1.0 + 4.0 * T1) * dT1_dVb; } else { T1 = MIN_EXP; Theta0 = T1 * (1.0 + 2.0 * T1); dTheta0_dVb = 0.0; } here->BSIM3thetavth = pParam->BSIM3dvt0 * Theta0; Delt_vth = here->BSIM3thetavth * V0; dDelt_vth_dVb = pParam->BSIM3dvt0 * dTheta0_dVb * V0; T0 = -0.5 * pParam->BSIM3dvt1w * pParam->BSIM3weff * Leff / ltw; if (T0 > -EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 * (1.0 + 2.0 * T1); dT1_dVb = -T0 / ltw * T1 * dltw_dVb; dT2_dVb = (1.0 + 4.0 * T1) * dT1_dVb; } else { T1 = MIN_EXP; T2 = T1 * (1.0 + 2.0 * T1); dT2_dVb = 0.0; } T0 = pParam->BSIM3dvt0w * T2; T2 = T0 * V0; dT2_dVb = pParam->BSIM3dvt0w * dT2_dVb * V0; TempRatio = ckt->CKTtemp / model->BSIM3tnom - 1.0; T0 = sqrt(1.0 + pParam->BSIM3nlx / Leff); T1 = pParam->BSIM3k1ox * (T0 - 1.0) * pParam->BSIM3sqrtPhi + (pParam->BSIM3kt1 + pParam->BSIM3kt1l / Leff + pParam->BSIM3kt2 * Vbseff) * TempRatio; tmp2 = model->BSIM3tox * pParam->BSIM3phi / (pParam->BSIM3weff + pParam->BSIM3w0); T3 = pParam->BSIM3eta0 + pParam->BSIM3etab * Vbseff; if (T3 < 1.0e-4) /* avoid discontinuity problems caused by etab */ { T9 = 1.0 / (3.0 - 2.0e4 * T3); T3 = (2.0e-4 - T3) * T9; T4 = T9 * T9; } else { T4 = 1.0; } dDIBL_Sft_dVd = T3 * pParam->BSIM3theta0vb0; DIBL_Sft = dDIBL_Sft_dVd * Vds; Vth = model->BSIM3type * here->BSIM3vth0 - pParam->BSIM3k1 * pParam->BSIM3sqrtPhi + pParam->BSIM3k1ox * sqrtPhis - pParam->BSIM3k2ox * Vbseff - Delt_vth - T2 + (pParam->BSIM3k3 + pParam->BSIM3k3b * Vbseff) * tmp2 + T1 - DIBL_Sft; here->BSIM3von = Vth; dVth_dVb = pParam->BSIM3k1ox * dsqrtPhis_dVb - pParam->BSIM3k2ox - dDelt_vth_dVb - dT2_dVb + pParam->BSIM3k3b * tmp2 - pParam->BSIM3etab * Vds * pParam->BSIM3theta0vb0 * T4 + pParam->BSIM3kt2 * TempRatio; dVth_dVd = -dDIBL_Sft_dVd; /* Calculate n */ tmp2 = pParam->BSIM3nfactor * EPSSI / Xdep; tmp3 = pParam->BSIM3cdsc + pParam->BSIM3cdscb * Vbseff + pParam->BSIM3cdscd * Vds; tmp4 = (tmp2 + tmp3 * Theta0 + pParam->BSIM3cit) / model->BSIM3cox; if (tmp4 >= -0.5) { n = 1.0 + tmp4; dn_dVb = (-tmp2 / Xdep * dXdep_dVb + tmp3 * dTheta0_dVb + pParam->BSIM3cdscb * Theta0) / model->BSIM3cox; dn_dVd = pParam->BSIM3cdscd * Theta0 / model->BSIM3cox; } else /* avoid discontinuity problems caused by tmp4 */ { T0 = 1.0 / (3.0 + 8.0 * tmp4); n = (1.0 + 3.0 * tmp4) * T0; T0 *= T0; dn_dVb = (-tmp2 / Xdep * dXdep_dVb + tmp3 * dTheta0_dVb + pParam->BSIM3cdscb * Theta0) / model->BSIM3cox * T0; dn_dVd = pParam->BSIM3cdscd * Theta0 / model->BSIM3cox * T0; } /* Poly Gate Si Depletion Effect */ T0 = here->BSIM3vfb + pParam->BSIM3phi; if ((pParam->BSIM3ngate > 1.e18) && (pParam->BSIM3ngate < 1.e25) && (Vgs > T0)) /* added to avoid the problem caused by ngate */ { T1 = 1.0e6 * Charge_q * EPSSI * pParam->BSIM3ngate / (model->BSIM3cox * model->BSIM3cox); T4 = sqrt(1.0 + 2.0 * (Vgs - T0) / T1); T2 = T1 * (T4 - 1.0); T3 = 0.5 * T2 * T2 / T1; /* T3 = Vpoly */ T7 = 1.12 - T3 - 0.05; T6 = sqrt(T7 * T7 + 0.224); T5 = 1.12 - 0.5 * (T7 + T6); Vgs_eff = Vgs - T5; dVgs_eff_dVg = 1.0 - (0.5 - 0.5 / T4) * (1.0 + T7 / T6); } else { Vgs_eff = Vgs; dVgs_eff_dVg = 1.0; } Vgst = Vgs_eff - Vth; /* Effective Vgst (Vgsteff) Calculation */ T10 = 2.0 * n * Vtm; VgstNVt = Vgst / T10; ExpArg = (2.0 * pParam->BSIM3voff - Vgst) / T10; /* MCJ: Very small Vgst */ if (VgstNVt > EXP_THRESHOLD) { Vgsteff = Vgst; dVgsteff_dVg = dVgs_eff_dVg; dVgsteff_dVd = -dVth_dVd; dVgsteff_dVb = -dVth_dVb; } else if (ExpArg > EXP_THRESHOLD) { T0 = (Vgst - pParam->BSIM3voff) / (n * Vtm); ExpVgst = exp(T0); Vgsteff = Vtm * pParam->BSIM3cdep0 / model->BSIM3cox * ExpVgst; dVgsteff_dVg = Vgsteff / (n * Vtm); dVgsteff_dVd = -dVgsteff_dVg * (dVth_dVd + T0 * Vtm * dn_dVd); dVgsteff_dVb = -dVgsteff_dVg * (dVth_dVb + T0 * Vtm * dn_dVb); dVgsteff_dVg *= dVgs_eff_dVg; } else { ExpVgst = exp(VgstNVt); T1 = T10 * log(1.0 + ExpVgst); dT1_dVg = ExpVgst / (1.0 + ExpVgst); dT1_dVb = -dT1_dVg * (dVth_dVb + Vgst / n * dn_dVb) + T1 / n * dn_dVb; dT1_dVd = -dT1_dVg * (dVth_dVd + Vgst / n * dn_dVd) + T1 / n * dn_dVd; dT2_dVg = -model->BSIM3cox / (Vtm * pParam->BSIM3cdep0) * exp(ExpArg); T2 = 1.0 - T10 * dT2_dVg; dT2_dVd = -dT2_dVg * (dVth_dVd - 2.0 * Vtm * ExpArg * dn_dVd) + (T2 - 1.0) / n * dn_dVd; dT2_dVb = -dT2_dVg * (dVth_dVb - 2.0 * Vtm * ExpArg * dn_dVb) + (T2 - 1.0) / n * dn_dVb; Vgsteff = T1 / T2; T3 = T2 * T2; dVgsteff_dVg = (T2 * dT1_dVg - T1 * dT2_dVg) / T3 * dVgs_eff_dVg; dVgsteff_dVd = (T2 * dT1_dVd - T1 * dT2_dVd) / T3; dVgsteff_dVb = (T2 * dT1_dVb - T1 * dT2_dVb) / T3; } here->BSIM3Vgsteff = Vgsteff; /* Calculate Effective Channel Geometry */ T9 = sqrtPhis - pParam->BSIM3sqrtPhi; Weff = pParam->BSIM3weff - 2.0 * (pParam->BSIM3dwg * Vgsteff + pParam->BSIM3dwb * T9); dWeff_dVg = -2.0 * pParam->BSIM3dwg; dWeff_dVb = -2.0 * pParam->BSIM3dwb * dsqrtPhis_dVb; if (Weff < 2.0e-8) /* to avoid the discontinuity problem due to Weff*/ { T0 = 1.0 / (6.0e-8 - 2.0 * Weff); Weff = 2.0e-8 * (4.0e-8 - Weff) * T0; T0 *= T0 * 4.0e-16; dWeff_dVg *= T0; dWeff_dVb *= T0; } T0 = pParam->BSIM3prwg * Vgsteff + pParam->BSIM3prwb * T9; if (T0 >= -0.9) { Rds = pParam->BSIM3rds0 * (1.0 + T0); dRds_dVg = pParam->BSIM3rds0 * pParam->BSIM3prwg; dRds_dVb = pParam->BSIM3rds0 * pParam->BSIM3prwb * dsqrtPhis_dVb; } else /* to avoid the discontinuity problem due to prwg and prwb*/ { T1 = 1.0 / (17.0 + 20.0 * T0); Rds = pParam->BSIM3rds0 * (0.8 + T0) * T1; T1 *= T1; dRds_dVg = pParam->BSIM3rds0 * pParam->BSIM3prwg * T1; dRds_dVb = pParam->BSIM3rds0 * pParam->BSIM3prwb * dsqrtPhis_dVb * T1; } here->BSIM3rds = Rds; /* Noise Bugfix */ /* Calculate Abulk */ T1 = 0.5 * pParam->BSIM3k1ox / sqrtPhis; dT1_dVb = -T1 / sqrtPhis * dsqrtPhis_dVb; T9 = sqrt(pParam->BSIM3xj * Xdep); tmp1 = Leff + 2.0 * T9; T5 = Leff / tmp1; tmp2 = pParam->BSIM3a0 * T5; tmp3 = pParam->BSIM3weff + pParam->BSIM3b1; tmp4 = pParam->BSIM3b0 / tmp3; T2 = tmp2 + tmp4; dT2_dVb = -T9 / tmp1 / Xdep * dXdep_dVb; T6 = T5 * T5; T7 = T5 * T6; Abulk0 = 1.0 + T1 * T2; dAbulk0_dVb = T1 * tmp2 * dT2_dVb + T2 * dT1_dVb; T8 = pParam->BSIM3ags * pParam->BSIM3a0 * T7; dAbulk_dVg = -T1 * T8; Abulk = Abulk0 + dAbulk_dVg * Vgsteff; dAbulk_dVb = dAbulk0_dVb - T8 * Vgsteff * (dT1_dVb + 3.0 * T1 * dT2_dVb); if (Abulk0 < 0.1) /* added to avoid the problems caused by Abulk0 */ { T9 = 1.0 / (3.0 - 20.0 * Abulk0); Abulk0 = (0.2 - Abulk0) * T9; dAbulk0_dVb *= T9 * T9; } if (Abulk < 0.1) /* added to avoid the problems caused by Abulk */ { T9 = 1.0 / (3.0 - 20.0 * Abulk); Abulk = (0.2 - Abulk) * T9; T10 = T9 * T9; dAbulk_dVb *= T10; dAbulk_dVg *= T10; } here->BSIM3Abulk = Abulk; T2 = pParam->BSIM3keta * Vbseff; if (T2 >= -0.9) { T0 = 1.0 / (1.0 + T2); dT0_dVb = -pParam->BSIM3keta * T0 * T0; } else /* added to avoid the problems caused by Keta */ { T1 = 1.0 / (0.8 + T2); T0 = (17.0 + 20.0 * T2) * T1; dT0_dVb = -pParam->BSIM3keta * T1 * T1; } dAbulk_dVg *= T0; dAbulk_dVb = dAbulk_dVb * T0 + Abulk * dT0_dVb; dAbulk0_dVb = dAbulk0_dVb * T0 + Abulk0 * dT0_dVb; Abulk *= T0; Abulk0 *= T0; /* Mobility calculation */ if (model->BSIM3mobMod == 1) { T0 = Vgsteff + Vth + Vth; T2 = pParam->BSIM3ua + pParam->BSIM3uc * Vbseff; T3 = T0 / model->BSIM3tox; T5 = T3 * (T2 + pParam->BSIM3ub * T3); dDenomi_dVg = (T2 + 2.0 * pParam->BSIM3ub * T3) / model->BSIM3tox; dDenomi_dVd = dDenomi_dVg * 2.0 * dVth_dVd; dDenomi_dVb = dDenomi_dVg * 2.0 * dVth_dVb + pParam->BSIM3uc * T3; } else if (model->BSIM3mobMod == 2) { T5 = Vgsteff / model->BSIM3tox * (pParam->BSIM3ua + pParam->BSIM3uc * Vbseff + pParam->BSIM3ub * Vgsteff / model->BSIM3tox); dDenomi_dVg = (pParam->BSIM3ua + pParam->BSIM3uc * Vbseff + 2.0 * pParam->BSIM3ub * Vgsteff / model->BSIM3tox) / model->BSIM3tox; dDenomi_dVd = 0.0; dDenomi_dVb = Vgsteff * pParam->BSIM3uc / model->BSIM3tox; } else { T0 = Vgsteff + Vth + Vth; T2 = 1.0 + pParam->BSIM3uc * Vbseff; T3 = T0 / model->BSIM3tox; T4 = T3 * (pParam->BSIM3ua + pParam->BSIM3ub * T3); T5 = T4 * T2; dDenomi_dVg = (pParam->BSIM3ua + 2.0 * pParam->BSIM3ub * T3) * T2 / model->BSIM3tox; dDenomi_dVd = dDenomi_dVg * 2.0 * dVth_dVd; dDenomi_dVb = dDenomi_dVg * 2.0 * dVth_dVb + pParam->BSIM3uc * T4; } if (T5 >= -0.8) { Denomi = 1.0 + T5; } else /* Added to avoid the discontinuity problem caused by ua and ub*/ { T9 = 1.0 / (7.0 + 10.0 * T5); Denomi = (0.6 + T5) * T9; T9 *= T9; dDenomi_dVg *= T9; dDenomi_dVd *= T9; dDenomi_dVb *= T9; } here->BSIM3ueff = ueff = here->BSIM3u0temp / Denomi; T9 = -ueff / Denomi; dueff_dVg = T9 * dDenomi_dVg; dueff_dVd = T9 * dDenomi_dVd; dueff_dVb = T9 * dDenomi_dVb; /* Saturation Drain Voltage Vdsat */ WVCox = Weff * pParam->BSIM3vsattemp * model->BSIM3cox; WVCoxRds = WVCox * Rds; Esat = 2.0 * pParam->BSIM3vsattemp / ueff; EsatL = Esat * Leff; T0 = -EsatL /ueff; dEsatL_dVg = T0 * dueff_dVg; dEsatL_dVd = T0 * dueff_dVd; dEsatL_dVb = T0 * dueff_dVb; /* Sqrt() */ a1 = pParam->BSIM3a1; if (a1 == 0.0) { Lambda = pParam->BSIM3a2; dLambda_dVg = 0.0; } else if (a1 > 0.0) /* Added to avoid the discontinuity problem caused by a1 and a2 (Lambda) */ { T0 = 1.0 - pParam->BSIM3a2; T1 = T0 - pParam->BSIM3a1 * Vgsteff - 0.0001; T2 = sqrt(T1 * T1 + 0.0004 * T0); Lambda = pParam->BSIM3a2 + T0 - 0.5 * (T1 + T2); dLambda_dVg = 0.5 * pParam->BSIM3a1 * (1.0 + T1 / T2); } else { T1 = pParam->BSIM3a2 + pParam->BSIM3a1 * Vgsteff - 0.0001; T2 = sqrt(T1 * T1 + 0.0004 * pParam->BSIM3a2); Lambda = 0.5 * (T1 + T2); dLambda_dVg = 0.5 * pParam->BSIM3a1 * (1.0 + T1 / T2); } Vgst2Vtm = Vgsteff + 2.0 * Vtm; here->BSIM3AbovVgst2Vtm = Abulk / Vgst2Vtm; if (Rds > 0) { tmp2 = dRds_dVg / Rds + dWeff_dVg / Weff; tmp3 = dRds_dVb / Rds + dWeff_dVb / Weff; } else { tmp2 = dWeff_dVg / Weff; tmp3 = dWeff_dVb / Weff; } if ((Rds == 0.0) && (Lambda == 1.0)) { T0 = 1.0 / (Abulk * EsatL + Vgst2Vtm); tmp1 = 0.0; T1 = T0 * T0; T2 = Vgst2Vtm * T0; T3 = EsatL * Vgst2Vtm; Vdsat = T3 * T0; dT0_dVg = -(Abulk * dEsatL_dVg + EsatL * dAbulk_dVg + 1.0) * T1; dT0_dVd = -(Abulk * dEsatL_dVd) * T1; dT0_dVb = -(Abulk * dEsatL_dVb + dAbulk_dVb * EsatL) * T1; dVdsat_dVg = T3 * dT0_dVg + T2 * dEsatL_dVg + EsatL * T0; dVdsat_dVd = T3 * dT0_dVd + T2 * dEsatL_dVd; dVdsat_dVb = T3 * dT0_dVb + T2 * dEsatL_dVb; } else { tmp1 = dLambda_dVg / (Lambda * Lambda); T9 = Abulk * WVCoxRds; T8 = Abulk * T9; T7 = Vgst2Vtm * T9; T6 = Vgst2Vtm * WVCoxRds; T0 = 2.0 * Abulk * (T9 - 1.0 + 1.0 / Lambda); dT0_dVg = 2.0 * (T8 * tmp2 - Abulk * tmp1 + (2.0 * T9 + 1.0 / Lambda - 1.0) * dAbulk_dVg); dT0_dVb = 2.0 * (T8 * (2.0 / Abulk * dAbulk_dVb + tmp3) + (1.0 / Lambda - 1.0) * dAbulk_dVb); dT0_dVd = 0.0; T1 = Vgst2Vtm * (2.0 / Lambda - 1.0) + Abulk * EsatL + 3.0 * T7; dT1_dVg = (2.0 / Lambda - 1.0) - 2.0 * Vgst2Vtm * tmp1 + Abulk * dEsatL_dVg + EsatL * dAbulk_dVg + 3.0 * (T9 + T7 * tmp2 + T6 * dAbulk_dVg); dT1_dVb = Abulk * dEsatL_dVb + EsatL * dAbulk_dVb + 3.0 * (T6 * dAbulk_dVb + T7 * tmp3); dT1_dVd = Abulk * dEsatL_dVd; T2 = Vgst2Vtm * (EsatL + 2.0 * T6); dT2_dVg = EsatL + Vgst2Vtm * dEsatL_dVg + T6 * (4.0 + 2.0 * Vgst2Vtm * tmp2); dT2_dVb = Vgst2Vtm * (dEsatL_dVb + 2.0 * T6 * tmp3); dT2_dVd = Vgst2Vtm * dEsatL_dVd; T3 = sqrt(T1 * T1 - 2.0 * T0 * T2); Vdsat = (T1 - T3) / T0; dT3_dVg = (T1 * dT1_dVg - 2.0 * (T0 * dT2_dVg + T2 * dT0_dVg)) / T3; dT3_dVd = (T1 * dT1_dVd - 2.0 * (T0 * dT2_dVd + T2 * dT0_dVd)) / T3; dT3_dVb = (T1 * dT1_dVb - 2.0 * (T0 * dT2_dVb + T2 * dT0_dVb)) / T3; dVdsat_dVg = (dT1_dVg - (T1 * dT1_dVg - dT0_dVg * T2 - T0 * dT2_dVg) / T3 - Vdsat * dT0_dVg) / T0; dVdsat_dVb = (dT1_dVb - (T1 * dT1_dVb - dT0_dVb * T2 - T0 * dT2_dVb) / T3 - Vdsat * dT0_dVb) / T0; dVdsat_dVd = (dT1_dVd - (T1 * dT1_dVd - T0 * dT2_dVd) / T3) / T0; } here->BSIM3vdsat = Vdsat; /* Effective Vds (Vdseff) Calculation */ T1 = Vdsat - Vds - pParam->BSIM3delta; dT1_dVg = dVdsat_dVg; dT1_dVd = dVdsat_dVd - 1.0; dT1_dVb = dVdsat_dVb; T2 = sqrt(T1 * T1 + 4.0 * pParam->BSIM3delta * Vdsat); T0 = T1 / T2; T3 = 2.0 * pParam->BSIM3delta / T2; dT2_dVg = T0 * dT1_dVg + T3 * dVdsat_dVg; dT2_dVd = T0 * dT1_dVd + T3 * dVdsat_dVd; dT2_dVb = T0 * dT1_dVb + T3 * dVdsat_dVb; Vdseff = Vdsat - 0.5 * (T1 + T2); dVdseff_dVg = dVdsat_dVg - 0.5 * (dT1_dVg + dT2_dVg); dVdseff_dVd = dVdsat_dVd - 0.5 * (dT1_dVd + dT2_dVd); dVdseff_dVb = dVdsat_dVb - 0.5 * (dT1_dVb + dT2_dVb); /* Added to eliminate non-zero Vdseff at Vds=0.0 */ if (Vds == 0.0) { Vdseff = 0.0; dVdseff_dVg = 0.0; dVdseff_dVb = 0.0; } /* Calculate VAsat */ tmp4 = 1.0 - 0.5 * Abulk * Vdsat / Vgst2Vtm; T9 = WVCoxRds * Vgsteff; T8 = T9 / Vgst2Vtm; T0 = EsatL + Vdsat + 2.0 * T9 * tmp4; T7 = 2.0 * WVCoxRds * tmp4; dT0_dVg = dEsatL_dVg + dVdsat_dVg + T7 * (1.0 + tmp2 * Vgsteff) - T8 * (Abulk * dVdsat_dVg - Abulk * Vdsat / Vgst2Vtm + Vdsat * dAbulk_dVg); dT0_dVb = dEsatL_dVb + dVdsat_dVb + T7 * tmp3 * Vgsteff - T8 * (dAbulk_dVb * Vdsat + Abulk * dVdsat_dVb); dT0_dVd = dEsatL_dVd + dVdsat_dVd - T8 * Abulk * dVdsat_dVd; T9 = WVCoxRds * Abulk; T1 = 2.0 / Lambda - 1.0 + T9; dT1_dVg = -2.0 * tmp1 + WVCoxRds * (Abulk * tmp2 + dAbulk_dVg); dT1_dVb = dAbulk_dVb * WVCoxRds + T9 * tmp3; Vasat = T0 / T1; dVasat_dVg = (dT0_dVg - Vasat * dT1_dVg) / T1; dVasat_dVb = (dT0_dVb - Vasat * dT1_dVb) / T1; dVasat_dVd = dT0_dVd / T1; if (Vdseff > Vds) Vdseff = Vds; diffVds = Vds - Vdseff; here->BSIM3Vdseff = Vdseff; /* Calculate VACLM */ if ((pParam->BSIM3pclm > 0.0) && (diffVds > 1.0e-10)) { T0 = 1.0 / (pParam->BSIM3pclm * Abulk * pParam->BSIM3litl); dT0_dVb = -T0 / Abulk * dAbulk_dVb; dT0_dVg = -T0 / Abulk * dAbulk_dVg; T2 = Vgsteff / EsatL; T1 = Leff * (Abulk + T2); dT1_dVg = Leff * ((1.0 - T2 * dEsatL_dVg) / EsatL + dAbulk_dVg); dT1_dVb = Leff * (dAbulk_dVb - T2 * dEsatL_dVb / EsatL); dT1_dVd = -T2 * dEsatL_dVd / Esat; T9 = T0 * T1; VACLM = T9 * diffVds; dVACLM_dVg = T0 * dT1_dVg * diffVds - T9 * dVdseff_dVg + T1 * diffVds * dT0_dVg; dVACLM_dVb = (dT0_dVb * T1 + T0 * dT1_dVb) * diffVds - T9 * dVdseff_dVb; dVACLM_dVd = T0 * dT1_dVd * diffVds + T9 * (1.0 - dVdseff_dVd); } else { VACLM = MAX_EXP; dVACLM_dVd = dVACLM_dVg = dVACLM_dVb = 0.0; } /* Calculate VADIBL */ if (pParam->BSIM3thetaRout > 0.0) { T8 = Abulk * Vdsat; T0 = Vgst2Vtm * T8; dT0_dVg = Vgst2Vtm * Abulk * dVdsat_dVg + T8 + Vgst2Vtm * Vdsat * dAbulk_dVg; dT0_dVb = Vgst2Vtm * (dAbulk_dVb * Vdsat + Abulk * dVdsat_dVb); dT0_dVd = Vgst2Vtm * Abulk * dVdsat_dVd; T1 = Vgst2Vtm + T8; dT1_dVg = 1.0 + Abulk * dVdsat_dVg + Vdsat * dAbulk_dVg; dT1_dVb = Abulk * dVdsat_dVb + dAbulk_dVb * Vdsat; dT1_dVd = Abulk * dVdsat_dVd; T9 = T1 * T1; T2 = pParam->BSIM3thetaRout; VADIBL = (Vgst2Vtm - T0 / T1) / T2; dVADIBL_dVg = (1.0 - dT0_dVg / T1 + T0 * dT1_dVg / T9) / T2; dVADIBL_dVb = (-dT0_dVb / T1 + T0 * dT1_dVb / T9) / T2; dVADIBL_dVd = (-dT0_dVd / T1 + T0 * dT1_dVd / T9) / T2; T7 = pParam->BSIM3pdiblb * Vbseff; if (T7 >= -0.9) { T3 = 1.0 / (1.0 + T7); VADIBL *= T3; dVADIBL_dVg *= T3; dVADIBL_dVb = (dVADIBL_dVb - VADIBL * pParam->BSIM3pdiblb) * T3; dVADIBL_dVd *= T3; } else /* Added to avoid the discontinuity problem caused by pdiblcb */ { T4 = 1.0 / (0.8 + T7); T3 = (17.0 + 20.0 * T7) * T4; dVADIBL_dVg *= T3; dVADIBL_dVb = dVADIBL_dVb * T3 - VADIBL * pParam->BSIM3pdiblb * T4 * T4; dVADIBL_dVd *= T3; VADIBL *= T3; } } else { VADIBL = MAX_EXP; dVADIBL_dVd = dVADIBL_dVg = dVADIBL_dVb = 0.0; } /* Calculate VA */ T8 = pParam->BSIM3pvag / EsatL; T9 = T8 * Vgsteff; if (T9 > -0.9) { T0 = 1.0 + T9; dT0_dVg = T8 * (1.0 - Vgsteff * dEsatL_dVg / EsatL); dT0_dVb = -T9 * dEsatL_dVb / EsatL; dT0_dVd = -T9 * dEsatL_dVd / EsatL; } else /* Added to avoid the discontinuity problems caused by pvag */ { T1 = 1.0 / (17.0 + 20.0 * T9); T0 = (0.8 + T9) * T1; T1 *= T1; dT0_dVg = T8 * (1.0 - Vgsteff * dEsatL_dVg / EsatL) * T1; T9 *= T1 / EsatL; dT0_dVb = -T9 * dEsatL_dVb; dT0_dVd = -T9 * dEsatL_dVd; } tmp1 = VACLM * VACLM; tmp2 = VADIBL * VADIBL; tmp3 = VACLM + VADIBL; T1 = VACLM * VADIBL / tmp3; tmp3 *= tmp3; dT1_dVg = (tmp1 * dVADIBL_dVg + tmp2 * dVACLM_dVg) / tmp3; dT1_dVd = (tmp1 * dVADIBL_dVd + tmp2 * dVACLM_dVd) / tmp3; dT1_dVb = (tmp1 * dVADIBL_dVb + tmp2 * dVACLM_dVb) / tmp3; Va = Vasat + T0 * T1; dVa_dVg = dVasat_dVg + T1 * dT0_dVg + T0 * dT1_dVg; dVa_dVd = dVasat_dVd + T1 * dT0_dVd + T0 * dT1_dVd; dVa_dVb = dVasat_dVb + T1 * dT0_dVb + T0 * dT1_dVb; /* Calculate VASCBE */ if (pParam->BSIM3pscbe2 > 0.0) { if (diffVds > pParam->BSIM3pscbe1 * pParam->BSIM3litl / EXP_THRESHOLD) { T0 = pParam->BSIM3pscbe1 * pParam->BSIM3litl / diffVds; VASCBE = Leff * exp(T0) / pParam->BSIM3pscbe2; T1 = T0 * VASCBE / diffVds; dVASCBE_dVg = T1 * dVdseff_dVg; dVASCBE_dVd = -T1 * (1.0 - dVdseff_dVd); dVASCBE_dVb = T1 * dVdseff_dVb; } else { VASCBE = MAX_EXP * Leff/pParam->BSIM3pscbe2; dVASCBE_dVg = dVASCBE_dVd = dVASCBE_dVb = 0.0; } } else { VASCBE = MAX_EXP; dVASCBE_dVg = dVASCBE_dVd = dVASCBE_dVb = 0.0; } /* Calculate Ids */ CoxWovL = model->BSIM3cox * Weff / Leff; beta = ueff * CoxWovL; dbeta_dVg = CoxWovL * dueff_dVg + beta * dWeff_dVg / Weff; dbeta_dVd = CoxWovL * dueff_dVd; dbeta_dVb = CoxWovL * dueff_dVb + beta * dWeff_dVb / Weff; T0 = 1.0 - 0.5 * Abulk * Vdseff / Vgst2Vtm; dT0_dVg = -0.5 * (Abulk * dVdseff_dVg - Abulk * Vdseff / Vgst2Vtm + Vdseff * dAbulk_dVg) / Vgst2Vtm; dT0_dVd = -0.5 * Abulk * dVdseff_dVd / Vgst2Vtm; dT0_dVb = -0.5 * (Abulk * dVdseff_dVb + dAbulk_dVb * Vdseff) / Vgst2Vtm; fgche1 = Vgsteff * T0; dfgche1_dVg = Vgsteff * dT0_dVg + T0; dfgche1_dVd = Vgsteff * dT0_dVd; dfgche1_dVb = Vgsteff * dT0_dVb; T9 = Vdseff / EsatL; fgche2 = 1.0 + T9; dfgche2_dVg = (dVdseff_dVg - T9 * dEsatL_dVg) / EsatL; dfgche2_dVd = (dVdseff_dVd - T9 * dEsatL_dVd) / EsatL; dfgche2_dVb = (dVdseff_dVb - T9 * dEsatL_dVb) / EsatL; gche = beta * fgche1 / fgche2; dgche_dVg = (beta * dfgche1_dVg + fgche1 * dbeta_dVg - gche * dfgche2_dVg) / fgche2; dgche_dVd = (beta * dfgche1_dVd + fgche1 * dbeta_dVd - gche * dfgche2_dVd) / fgche2; dgche_dVb = (beta * dfgche1_dVb + fgche1 * dbeta_dVb - gche * dfgche2_dVb) / fgche2; T0 = 1.0 + gche * Rds; T9 = Vdseff / T0; Idl = gche * T9; dIdl_dVg = (gche * dVdseff_dVg + T9 * dgche_dVg) / T0 - Idl * gche / T0 * dRds_dVg ; dIdl_dVd = (gche * dVdseff_dVd + T9 * dgche_dVd) / T0; dIdl_dVb = (gche * dVdseff_dVb + T9 * dgche_dVb - Idl * dRds_dVb * gche) / T0; T9 = diffVds / Va; T0 = 1.0 + T9; Idsa = Idl * T0; dIdsa_dVg = T0 * dIdl_dVg - Idl * (dVdseff_dVg + T9 * dVa_dVg) / Va; dIdsa_dVd = T0 * dIdl_dVd + Idl * (1.0 - dVdseff_dVd - T9 * dVa_dVd) / Va; dIdsa_dVb = T0 * dIdl_dVb - Idl * (dVdseff_dVb + T9 * dVa_dVb) / Va; T9 = diffVds / VASCBE; T0 = 1.0 + T9; Ids = Idsa * T0; Gm = T0 * dIdsa_dVg - Idsa * (dVdseff_dVg + T9 * dVASCBE_dVg) / VASCBE; Gds = T0 * dIdsa_dVd + Idsa * (1.0 - dVdseff_dVd - T9 * dVASCBE_dVd) / VASCBE; Gmb = T0 * dIdsa_dVb - Idsa * (dVdseff_dVb + T9 * dVASCBE_dVb) / VASCBE; Gds += Gm * dVgsteff_dVd; Gmb += Gm * dVgsteff_dVb; Gm *= dVgsteff_dVg; Gmb *= dVbseff_dVb; /* Substrate current begins */ tmp = pParam->BSIM3alpha0 + pParam->BSIM3alpha1 * Leff; if ((tmp <= 0.0) || (pParam->BSIM3beta0 <= 0.0)) { Isub = Gbd = Gbb = Gbg = 0.0; } else { T2 = tmp / Leff; if (diffVds > pParam->BSIM3beta0 / EXP_THRESHOLD) { T0 = -pParam->BSIM3beta0 / diffVds; T1 = T2 * diffVds * exp(T0); T3 = T1 / diffVds * (T0 - 1.0); dT1_dVg = T3 * dVdseff_dVg; dT1_dVd = T3 * (dVdseff_dVd - 1.0); dT1_dVb = T3 * dVdseff_dVb; } else { T3 = T2 * MIN_EXP; T1 = T3 * diffVds; dT1_dVg = -T3 * dVdseff_dVg; dT1_dVd = T3 * (1.0 - dVdseff_dVd); dT1_dVb = -T3 * dVdseff_dVb; } Isub = T1 * Idsa; Gbg = T1 * dIdsa_dVg + Idsa * dT1_dVg; Gbd = T1 * dIdsa_dVd + Idsa * dT1_dVd; Gbb = T1 * dIdsa_dVb + Idsa * dT1_dVb; Gbd += Gbg * dVgsteff_dVd; Gbb += Gbg * dVgsteff_dVb; Gbg *= dVgsteff_dVg; Gbb *= dVbseff_dVb; /* bug fixing */ } cdrain = Ids; here->BSIM3gds = Gds; here->BSIM3gm = Gm; here->BSIM3gmbs = Gmb; here->BSIM3gbbs = Gbb; here->BSIM3gbgs = Gbg; here->BSIM3gbds = Gbd; here->BSIM3csub = Isub; /* BSIM3 thermal noise Qinv calculated from all capMod * 0, 1, 2 & 3 stored in here->BSIM3qinv 1/1998 */ if ((model->BSIM3xpart < 0) || (!ChargeComputationNeeded)) { qgate = qdrn = qsrc = qbulk = 0.0; here->BSIM3cggb = here->BSIM3cgsb = here->BSIM3cgdb = 0.0; here->BSIM3cdgb = here->BSIM3cdsb = here->BSIM3cddb = 0.0; here->BSIM3cbgb = here->BSIM3cbsb = here->BSIM3cbdb = 0.0; here->BSIM3cqdb = here->BSIM3cqsb = here->BSIM3cqgb = here->BSIM3cqbb = 0.0; here->BSIM3gtau = 0.0; goto finished; } else if (model->BSIM3capMod == 0) { if (Vbseff < 0.0) { Vbseff = Vbs; dVbseff_dVb = 1.0; } else { Vbseff = pParam->BSIM3phi - Phis; dVbseff_dVb = -dPhis_dVb; } Vfb = pParam->BSIM3vfbcv; Vth = Vfb + pParam->BSIM3phi + pParam->BSIM3k1ox * sqrtPhis; Vgst = Vgs_eff - Vth; dVth_dVb = pParam->BSIM3k1ox * dsqrtPhis_dVb; dVgst_dVb = -dVth_dVb; dVgst_dVg = dVgs_eff_dVg; CoxWL = model->BSIM3cox * pParam->BSIM3weffCV * pParam->BSIM3leffCV; Arg1 = Vgs_eff - Vbseff - Vfb; if (Arg1 <= 0.0) { qgate = CoxWL * Arg1; qbulk = -qgate; qdrn = 0.0; here->BSIM3cggb = CoxWL * dVgs_eff_dVg; here->BSIM3cgdb = 0.0; here->BSIM3cgsb = CoxWL * (dVbseff_dVb - dVgs_eff_dVg); here->BSIM3cdgb = 0.0; here->BSIM3cddb = 0.0; here->BSIM3cdsb = 0.0; here->BSIM3cbgb = -CoxWL * dVgs_eff_dVg; here->BSIM3cbdb = 0.0; here->BSIM3cbsb = -here->BSIM3cgsb; here->BSIM3qinv = 0.0; } else if (Vgst <= 0.0) { T1 = 0.5 * pParam->BSIM3k1ox; T2 = sqrt(T1 * T1 + Arg1); qgate = CoxWL * pParam->BSIM3k1ox * (T2 - T1); qbulk = -qgate; qdrn = 0.0; T0 = CoxWL * T1 / T2; here->BSIM3cggb = T0 * dVgs_eff_dVg; here->BSIM3cgdb = 0.0; here->BSIM3cgsb = T0 * (dVbseff_dVb - dVgs_eff_dVg); here->BSIM3cdgb = 0.0; here->BSIM3cddb = 0.0; here->BSIM3cdsb = 0.0; here->BSIM3cbgb = -here->BSIM3cggb; here->BSIM3cbdb = 0.0; here->BSIM3cbsb = -here->BSIM3cgsb; here->BSIM3qinv = 0.0; } else { One_Third_CoxWL = CoxWL / 3.0; Two_Third_CoxWL = 2.0 * One_Third_CoxWL; AbulkCV = Abulk0 * pParam->BSIM3abulkCVfactor; dAbulkCV_dVb = pParam->BSIM3abulkCVfactor * dAbulk0_dVb; Vdsat = Vgst / AbulkCV; dVdsat_dVg = dVgs_eff_dVg / AbulkCV; dVdsat_dVb = - (Vdsat * dAbulkCV_dVb + dVth_dVb)/ AbulkCV; if (model->BSIM3xpart > 0.5) { /* 0/100 Charge partition model */ if (Vdsat <= Vds) { /* saturation region */ T1 = Vdsat / 3.0; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM3phi - T1); T2 = -Two_Third_CoxWL * Vgst; qbulk = -(qgate + T2); qdrn = 0.0; here->BSIM3cggb = One_Third_CoxWL * (3.0 - dVdsat_dVg) * dVgs_eff_dVg; T2 = -One_Third_CoxWL * dVdsat_dVb; here->BSIM3cgsb = -(here->BSIM3cggb + T2); here->BSIM3cgdb = 0.0; here->BSIM3cdgb = 0.0; here->BSIM3cddb = 0.0; here->BSIM3cdsb = 0.0; here->BSIM3cbgb = -(here->BSIM3cggb - Two_Third_CoxWL * dVgs_eff_dVg); T3 = -(T2 + Two_Third_CoxWL * dVth_dVb); here->BSIM3cbsb = -(here->BSIM3cbgb + T3); here->BSIM3cbdb = 0.0; here->BSIM3qinv = -(qgate + qbulk); } else { /* linear region */ Alphaz = Vgst / Vdsat; T1 = 2.0 * Vdsat - Vds; T2 = Vds / (3.0 * T1); T3 = T2 * Vds; T9 = 0.25 * CoxWL; T4 = T9 * Alphaz; T7 = 2.0 * Vds - T1 - 3.0 * T3; T8 = T3 - T1 - 2.0 * Vds; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM3phi - 0.5 * (Vds - T3)); T10 = T4 * T8; qdrn = T4 * T7; qbulk = -(qgate + qdrn + T10); T5 = T3 / T1; here->BSIM3cggb = CoxWL * (1.0 - T5 * dVdsat_dVg) * dVgs_eff_dVg; T11 = -CoxWL * T5 * dVdsat_dVb; here->BSIM3cgdb = CoxWL * (T2 - 0.5 + 0.5 * T5); here->BSIM3cgsb = -(here->BSIM3cggb + T11 + here->BSIM3cgdb); T6 = 1.0 / Vdsat; dAlphaz_dVg = T6 * (1.0 - Alphaz * dVdsat_dVg); dAlphaz_dVb = -T6 * (dVth_dVb + Alphaz * dVdsat_dVb); T7 = T9 * T7; T8 = T9 * T8; T9 = 2.0 * T4 * (1.0 - 3.0 * T5); here->BSIM3cdgb = (T7 * dAlphaz_dVg - T9 * dVdsat_dVg) * dVgs_eff_dVg; T12 = T7 * dAlphaz_dVb - T9 * dVdsat_dVb; here->BSIM3cddb = T4 * (3.0 - 6.0 * T2 - 3.0 * T5); here->BSIM3cdsb = -(here->BSIM3cdgb + T12 + here->BSIM3cddb); T9 = 2.0 * T4 * (1.0 + T5); T10 = (T8 * dAlphaz_dVg - T9 * dVdsat_dVg) * dVgs_eff_dVg; T11 = T8 * dAlphaz_dVb - T9 * dVdsat_dVb; T12 = T4 * (2.0 * T2 + T5 - 1.0); T0 = -(T10 + T11 + T12); here->BSIM3cbgb = -(here->BSIM3cggb + here->BSIM3cdgb + T10); here->BSIM3cbdb = -(here->BSIM3cgdb + here->BSIM3cddb + T12); here->BSIM3cbsb = -(here->BSIM3cgsb + here->BSIM3cdsb + T0); here->BSIM3qinv = -(qgate + qbulk); } } else if (model->BSIM3xpart < 0.5) { /* 40/60 Charge partition model */ if (Vds >= Vdsat) { /* saturation region */ T1 = Vdsat / 3.0; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM3phi - T1); T2 = -Two_Third_CoxWL * Vgst; qbulk = -(qgate + T2); qdrn = 0.4 * T2; here->BSIM3cggb = One_Third_CoxWL * (3.0 - dVdsat_dVg) * dVgs_eff_dVg; T2 = -One_Third_CoxWL * dVdsat_dVb; here->BSIM3cgsb = -(here->BSIM3cggb + T2); here->BSIM3cgdb = 0.0; T3 = 0.4 * Two_Third_CoxWL; here->BSIM3cdgb = -T3 * dVgs_eff_dVg; here->BSIM3cddb = 0.0; T4 = T3 * dVth_dVb; here->BSIM3cdsb = -(T4 + here->BSIM3cdgb); here->BSIM3cbgb = -(here->BSIM3cggb - Two_Third_CoxWL * dVgs_eff_dVg); T3 = -(T2 + Two_Third_CoxWL * dVth_dVb); here->BSIM3cbsb = -(here->BSIM3cbgb + T3); here->BSIM3cbdb = 0.0; here->BSIM3qinv = -(qgate + qbulk); } else { /* linear region */ Alphaz = Vgst / Vdsat; T1 = 2.0 * Vdsat - Vds; T2 = Vds / (3.0 * T1); T3 = T2 * Vds; T9 = 0.25 * CoxWL; T4 = T9 * Alphaz; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM3phi - 0.5 * (Vds - T3)); T5 = T3 / T1; here->BSIM3cggb = CoxWL * (1.0 - T5 * dVdsat_dVg) * dVgs_eff_dVg; tmp = -CoxWL * T5 * dVdsat_dVb; here->BSIM3cgdb = CoxWL * (T2 - 0.5 + 0.5 * T5); here->BSIM3cgsb = -(here->BSIM3cggb + here->BSIM3cgdb + tmp); T6 = 1.0 / Vdsat; dAlphaz_dVg = T6 * (1.0 - Alphaz * dVdsat_dVg); dAlphaz_dVb = -T6 * (dVth_dVb + Alphaz * dVdsat_dVb); T6 = 8.0 * Vdsat * Vdsat - 6.0 * Vdsat * Vds + 1.2 * Vds * Vds; T8 = T2 / T1; T7 = Vds - T1 - T8 * T6; qdrn = T4 * T7; T7 *= T9; tmp = T8 / T1; tmp1 = T4 * (2.0 - 4.0 * tmp * T6 + T8 * (16.0 * Vdsat - 6.0 * Vds)); here->BSIM3cdgb = (T7 * dAlphaz_dVg - tmp1 * dVdsat_dVg) * dVgs_eff_dVg; T10 = T7 * dAlphaz_dVb - tmp1 * dVdsat_dVb; here->BSIM3cddb = T4 * (2.0 - (1.0 / (3.0 * T1 * T1) + 2.0 * tmp) * T6 + T8 * (6.0 * Vdsat - 2.4 * Vds)); here->BSIM3cdsb = -(here->BSIM3cdgb + T10 + here->BSIM3cddb); T7 = 2.0 * (T1 + T3); qbulk = -(qgate - T4 * T7); T7 *= T9; T0 = 4.0 * T4 * (1.0 - T5); T12 = (-T7 * dAlphaz_dVg - here->BSIM3cdgb - T0 * dVdsat_dVg) * dVgs_eff_dVg; T11 = -T7 * dAlphaz_dVb - T10 - T0 * dVdsat_dVb; T10 = -4.0 * T4 * (T2 - 0.5 + 0.5 * T5) - here->BSIM3cddb; tmp = -(T10 + T11 + T12); here->BSIM3cbgb = -(here->BSIM3cggb + here->BSIM3cdgb + T12); here->BSIM3cbdb = -(here->BSIM3cgdb + here->BSIM3cddb + T10); /* bug fix */ here->BSIM3cbsb = -(here->BSIM3cgsb + here->BSIM3cdsb + tmp); here->BSIM3qinv = -(qgate + qbulk); } } else { /* 50/50 partitioning */ if (Vds >= Vdsat) { /* saturation region */ T1 = Vdsat / 3.0; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM3phi - T1); T2 = -Two_Third_CoxWL * Vgst; qbulk = -(qgate + T2); qdrn = 0.5 * T2; here->BSIM3cggb = One_Third_CoxWL * (3.0 - dVdsat_dVg) * dVgs_eff_dVg; T2 = -One_Third_CoxWL * dVdsat_dVb; here->BSIM3cgsb = -(here->BSIM3cggb + T2); here->BSIM3cgdb = 0.0; here->BSIM3cdgb = -One_Third_CoxWL * dVgs_eff_dVg; here->BSIM3cddb = 0.0; T4 = One_Third_CoxWL * dVth_dVb; here->BSIM3cdsb = -(T4 + here->BSIM3cdgb); here->BSIM3cbgb = -(here->BSIM3cggb - Two_Third_CoxWL * dVgs_eff_dVg); T3 = -(T2 + Two_Third_CoxWL * dVth_dVb); here->BSIM3cbsb = -(here->BSIM3cbgb + T3); here->BSIM3cbdb = 0.0; here->BSIM3qinv = -(qgate + qbulk); } else { /* linear region */ Alphaz = Vgst / Vdsat; T1 = 2.0 * Vdsat - Vds; T2 = Vds / (3.0 * T1); T3 = T2 * Vds; T9 = 0.25 * CoxWL; T4 = T9 * Alphaz; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM3phi - 0.5 * (Vds - T3)); T5 = T3 / T1; here->BSIM3cggb = CoxWL * (1.0 - T5 * dVdsat_dVg) * dVgs_eff_dVg; tmp = -CoxWL * T5 * dVdsat_dVb; here->BSIM3cgdb = CoxWL * (T2 - 0.5 + 0.5 * T5); here->BSIM3cgsb = -(here->BSIM3cggb + here->BSIM3cgdb + tmp); T6 = 1.0 / Vdsat; dAlphaz_dVg = T6 * (1.0 - Alphaz * dVdsat_dVg); dAlphaz_dVb = -T6 * (dVth_dVb + Alphaz * dVdsat_dVb); T7 = T1 + T3; qdrn = -T4 * T7; qbulk = - (qgate + qdrn + qdrn); T7 *= T9; T0 = T4 * (2.0 * T5 - 2.0); here->BSIM3cdgb = (T0 * dVdsat_dVg - T7 * dAlphaz_dVg) * dVgs_eff_dVg; T12 = T0 * dVdsat_dVb - T7 * dAlphaz_dVb; here->BSIM3cddb = T4 * (1.0 - 2.0 * T2 - T5); here->BSIM3cdsb = -(here->BSIM3cdgb + T12 + here->BSIM3cddb); here->BSIM3cbgb = -(here->BSIM3cggb + 2.0 * here->BSIM3cdgb); here->BSIM3cbdb = -(here->BSIM3cgdb + 2.0 * here->BSIM3cddb); here->BSIM3cbsb = -(here->BSIM3cgsb + 2.0 * here->BSIM3cdsb); here->BSIM3qinv = -(qgate + qbulk); } } } } else { if (Vbseff < 0.0) { VbseffCV = Vbseff; dVbseffCV_dVb = 1.0; } else { VbseffCV = pParam->BSIM3phi - Phis; dVbseffCV_dVb = -dPhis_dVb; } CoxWL = model->BSIM3cox * pParam->BSIM3weffCV * pParam->BSIM3leffCV; /* Seperate VgsteffCV with noff and voffcv */ noff = n * pParam->BSIM3noff; dnoff_dVd = pParam->BSIM3noff * dn_dVd; dnoff_dVb = pParam->BSIM3noff * dn_dVb; T0 = Vtm * noff; voffcv = pParam->BSIM3voffcv; VgstNVt = (Vgst - voffcv) / T0; if (VgstNVt > EXP_THRESHOLD) { Vgsteff = Vgst - voffcv; dVgsteff_dVg = dVgs_eff_dVg; dVgsteff_dVd = -dVth_dVd; dVgsteff_dVb = -dVth_dVb; } else if (VgstNVt < -EXP_THRESHOLD) { Vgsteff = T0 * log(1.0 + MIN_EXP); dVgsteff_dVg = 0.0; dVgsteff_dVd = Vgsteff / noff; dVgsteff_dVb = dVgsteff_dVd * dnoff_dVb; dVgsteff_dVd *= dnoff_dVd; } else { ExpVgst = exp(VgstNVt); Vgsteff = T0 * log(1.0 + ExpVgst); dVgsteff_dVg = ExpVgst / (1.0 + ExpVgst); dVgsteff_dVd = -dVgsteff_dVg * (dVth_dVd + (Vgst - voffcv) / noff * dnoff_dVd) + Vgsteff / noff * dnoff_dVd; dVgsteff_dVb = -dVgsteff_dVg * (dVth_dVb + (Vgst - voffcv) / noff * dnoff_dVb) + Vgsteff / noff * dnoff_dVb; dVgsteff_dVg *= dVgs_eff_dVg; } /* End of VgsteffCV */ if (model->BSIM3capMod == 1) { Vfb = here->BSIM3vfbzb; Arg1 = Vgs_eff - VbseffCV - Vfb - Vgsteff; if (Arg1 <= 0.0) { qgate = CoxWL * Arg1; Cgg = CoxWL * (dVgs_eff_dVg - dVgsteff_dVg); Cgd = -CoxWL * dVgsteff_dVd; Cgb = -CoxWL * (dVbseffCV_dVb + dVgsteff_dVb); } else { T0 = 0.5 * pParam->BSIM3k1ox; T1 = sqrt(T0 * T0 + Arg1); T2 = CoxWL * T0 / T1; qgate = CoxWL * pParam->BSIM3k1ox * (T1 - T0); Cgg = T2 * (dVgs_eff_dVg - dVgsteff_dVg); Cgd = -T2 * dVgsteff_dVd; Cgb = -T2 * (dVbseffCV_dVb + dVgsteff_dVb); } qbulk = -qgate; Cbg = -Cgg; Cbd = -Cgd; Cbb = -Cgb; One_Third_CoxWL = CoxWL / 3.0; Two_Third_CoxWL = 2.0 * One_Third_CoxWL; AbulkCV = Abulk0 * pParam->BSIM3abulkCVfactor; dAbulkCV_dVb = pParam->BSIM3abulkCVfactor * dAbulk0_dVb; VdsatCV = Vgsteff / AbulkCV; if (VdsatCV < Vds) { dVdsatCV_dVg = 1.0 / AbulkCV; dVdsatCV_dVb = -VdsatCV * dAbulkCV_dVb / AbulkCV; T0 = Vgsteff - VdsatCV / 3.0; dT0_dVg = 1.0 - dVdsatCV_dVg / 3.0; dT0_dVb = -dVdsatCV_dVb / 3.0; qgate += CoxWL * T0; Cgg1 = CoxWL * dT0_dVg; Cgb1 = CoxWL * dT0_dVb + Cgg1 * dVgsteff_dVb; Cgd1 = Cgg1 * dVgsteff_dVd; Cgg1 *= dVgsteff_dVg; Cgg += Cgg1; Cgb += Cgb1; Cgd += Cgd1; T0 = VdsatCV - Vgsteff; dT0_dVg = dVdsatCV_dVg - 1.0; dT0_dVb = dVdsatCV_dVb; qbulk += One_Third_CoxWL * T0; Cbg1 = One_Third_CoxWL * dT0_dVg; Cbb1 = One_Third_CoxWL * dT0_dVb + Cbg1 * dVgsteff_dVb; Cbd1 = Cbg1 * dVgsteff_dVd; Cbg1 *= dVgsteff_dVg; Cbg += Cbg1; Cbb += Cbb1; Cbd += Cbd1; if (model->BSIM3xpart > 0.5) T0 = -Two_Third_CoxWL; else if (model->BSIM3xpart < 0.5) T0 = -0.4 * CoxWL; else T0 = -One_Third_CoxWL; qsrc = T0 * Vgsteff; Csg = T0 * dVgsteff_dVg; Csb = T0 * dVgsteff_dVb; Csd = T0 * dVgsteff_dVd; Cgb *= dVbseff_dVb; Cbb *= dVbseff_dVb; Csb *= dVbseff_dVb; } else { T0 = AbulkCV * Vds; T1 = 12.0 * (Vgsteff - 0.5 * T0 + 1.e-20); T2 = Vds / T1; T3 = T0 * T2; dT3_dVg = -12.0 * T2 * T2 * AbulkCV; dT3_dVd = 6.0 * T0 * (4.0 * Vgsteff - T0) / T1 / T1 - 0.5; dT3_dVb = 12.0 * T2 * T2 * dAbulkCV_dVb * Vgsteff; qgate += CoxWL * (Vgsteff - 0.5 * Vds + T3); Cgg1 = CoxWL * (1.0 + dT3_dVg); Cgb1 = CoxWL * dT3_dVb + Cgg1 * dVgsteff_dVb; Cgd1 = CoxWL * dT3_dVd + Cgg1 * dVgsteff_dVd; Cgg1 *= dVgsteff_dVg; Cgg += Cgg1; Cgb += Cgb1; Cgd += Cgd1; qbulk += CoxWL * (1.0 - AbulkCV) * (0.5 * Vds - T3); Cbg1 = -CoxWL * ((1.0 - AbulkCV) * dT3_dVg); Cbb1 = -CoxWL * ((1.0 - AbulkCV) * dT3_dVb + (0.5 * Vds - T3) * dAbulkCV_dVb) + Cbg1 * dVgsteff_dVb; Cbd1 = -CoxWL * (1.0 - AbulkCV) * dT3_dVd + Cbg1 * dVgsteff_dVd; Cbg1 *= dVgsteff_dVg; Cbg += Cbg1; Cbb += Cbb1; Cbd += Cbd1; if (model->BSIM3xpart > 0.5) { /* 0/100 Charge petition model */ T1 = T1 + T1; qsrc = -CoxWL * (0.5 * Vgsteff + 0.25 * T0 - T0 * T0 / T1); Csg = -CoxWL * (0.5 + 24.0 * T0 * Vds / T1 / T1 * AbulkCV); Csb = -CoxWL * (0.25 * Vds * dAbulkCV_dVb - 12.0 * T0 * Vds / T1 / T1 * (4.0 * Vgsteff - T0) * dAbulkCV_dVb) + Csg * dVgsteff_dVb; Csd = -CoxWL * (0.25 * AbulkCV - 12.0 * AbulkCV * T0 / T1 / T1 * (4.0 * Vgsteff - T0)) + Csg * dVgsteff_dVd; Csg *= dVgsteff_dVg; } else if (model->BSIM3xpart < 0.5) { /* 40/60 Charge petition model */ T1 = T1 / 12.0; T2 = 0.5 * CoxWL / (T1 * T1); T3 = Vgsteff * (2.0 * T0 * T0 / 3.0 + Vgsteff * (Vgsteff - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T2 * T3; T4 = 4.0 / 3.0 * Vgsteff * (Vgsteff - T0) + 0.4 * T0 * T0; Csg = -2.0 * qsrc / T1 - T2 * (Vgsteff * (3.0 * Vgsteff - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0); Csb = (qsrc / T1 * Vds + T2 * T4 * Vds) * dAbulkCV_dVb + Csg * dVgsteff_dVb; Csd = (qsrc / T1 + T2 * T4) * AbulkCV + Csg * dVgsteff_dVd; Csg *= dVgsteff_dVg; } else { /* 50/50 Charge petition model */ qsrc = -0.5 * (qgate + qbulk); Csg = -0.5 * (Cgg1 + Cbg1); Csb = -0.5 * (Cgb1 + Cbb1); Csd = -0.5 * (Cgd1 + Cbd1); } Cgb *= dVbseff_dVb; Cbb *= dVbseff_dVb; Csb *= dVbseff_dVb; } qdrn = -(qgate + qbulk + qsrc); here->BSIM3cggb = Cgg; here->BSIM3cgsb = -(Cgg + Cgd + Cgb); here->BSIM3cgdb = Cgd; here->BSIM3cdgb = -(Cgg + Cbg + Csg); here->BSIM3cdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb + Csg + Csd + Csb); here->BSIM3cddb = -(Cgd + Cbd + Csd); here->BSIM3cbgb = Cbg; here->BSIM3cbsb = -(Cbg + Cbd + Cbb); here->BSIM3cbdb = Cbd; here->BSIM3qinv = -(qgate + qbulk); } else if (model->BSIM3capMod == 2) { Vfb = here->BSIM3vfbzb; V3 = Vfb - Vgs_eff + VbseffCV - DELTA_3; if (Vfb <= 0.0) { T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * Vfb); T2 = -DELTA_3 / T0; } else { T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * Vfb); T2 = DELTA_3 / T0; } T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = Vfb - 0.5 * (V3 + T0); dVfbeff_dVg = T1 * dVgs_eff_dVg; dVfbeff_dVb = -T1 * dVbseffCV_dVb; Qac0 = CoxWL * (Vfbeff - Vfb); dQac0_dVg = CoxWL * dVfbeff_dVg; dQac0_dVb = CoxWL * dVfbeff_dVb; T0 = 0.5 * pParam->BSIM3k1ox; T3 = Vgs_eff - Vfbeff - VbseffCV - Vgsteff; if (pParam->BSIM3k1ox == 0.0) { T1 = 0.0; T2 = 0.0; } else if (T3 < 0.0) { T1 = T0 + T3 / pParam->BSIM3k1ox; T2 = CoxWL; } else { T1 = sqrt(T0 * T0 + T3); T2 = CoxWL * T0 / T1; } Qsub0 = CoxWL * pParam->BSIM3k1ox * (T1 - T0); dQsub0_dVg = T2 * (dVgs_eff_dVg - dVfbeff_dVg - dVgsteff_dVg); dQsub0_dVd = -T2 * dVgsteff_dVd; dQsub0_dVb = -T2 * (dVfbeff_dVb + dVbseffCV_dVb + dVgsteff_dVb); AbulkCV = Abulk0 * pParam->BSIM3abulkCVfactor; dAbulkCV_dVb = pParam->BSIM3abulkCVfactor * dAbulk0_dVb; VdsatCV = Vgsteff / AbulkCV; V4 = VdsatCV - Vds - DELTA_4; T0 = sqrt(V4 * V4 + 4.0 * DELTA_4 * VdsatCV); VdseffCV = VdsatCV - 0.5 * (V4 + T0); T1 = 0.5 * (1.0 + V4 / T0); T2 = DELTA_4 / T0; T3 = (1.0 - T1 - T2) / AbulkCV; dVdseffCV_dVg = T3; dVdseffCV_dVd = T1; dVdseffCV_dVb = -T3 * VdsatCV * dAbulkCV_dVb; /* Added to eliminate non-zero VdseffCV at Vds=0.0 */ if (Vds == 0.0) { VdseffCV = 0.0; dVdseffCV_dVg = 0.0; dVdseffCV_dVb = 0.0; } T0 = AbulkCV * VdseffCV; T1 = 12.0 * (Vgsteff - 0.5 * T0 + 1e-20); T2 = VdseffCV / T1; T3 = T0 * T2; T4 = (1.0 - 12.0 * T2 * T2 * AbulkCV); T5 = (6.0 * T0 * (4.0 * Vgsteff - T0) / (T1 * T1) - 0.5); T6 = 12.0 * T2 * T2 * Vgsteff; qinoi = -CoxWL * (Vgsteff - 0.5 * T0 + AbulkCV * T3); qgate = CoxWL * (Vgsteff - 0.5 * VdseffCV + T3); Cgg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); Cgd1 = CoxWL * T5 * dVdseffCV_dVd + Cgg1 * dVgsteff_dVd; Cgb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Cgg1 * dVgsteff_dVb; Cgg1 *= dVgsteff_dVg; T7 = 1.0 - AbulkCV; qbulk = CoxWL * T7 * (0.5 * VdseffCV - T3); T4 = -T7 * (T4 - 1.0); T5 = -T7 * T5; T6 = -(T7 * T6 + (0.5 * VdseffCV - T3)); Cbg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); Cbd1 = CoxWL * T5 * dVdseffCV_dVd + Cbg1 * dVgsteff_dVd; Cbb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Cbg1 * dVgsteff_dVb; Cbg1 *= dVgsteff_dVg; if (model->BSIM3xpart > 0.5) { /* 0/100 Charge petition model */ T1 = T1 + T1; qsrc = -CoxWL * (0.5 * Vgsteff + 0.25 * T0 - T0 * T0 / T1); T7 = (4.0 * Vgsteff - T0) / (T1 * T1); T4 = -(0.5 + 24.0 * T0 * T0 / (T1 * T1)); T5 = -(0.25 * AbulkCV - 12.0 * AbulkCV * T0 * T7); T6 = -(0.25 * VdseffCV - 12.0 * T0 * VdseffCV * T7); Csg = CoxWL * (T4 + T5 * dVdseffCV_dVg); Csd = CoxWL * T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd; Csb = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Csg * dVgsteff_dVb; Csg *= dVgsteff_dVg; } else if (model->BSIM3xpart < 0.5) { /* 40/60 Charge petition model */ T1 = T1 / 12.0; T2 = 0.5 * CoxWL / (T1 * T1); T3 = Vgsteff * (2.0 * T0 * T0 / 3.0 + Vgsteff * (Vgsteff - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T2 * T3; T7 = 4.0 / 3.0 * Vgsteff * (Vgsteff - T0) + 0.4 * T0 * T0; T4 = -2.0 * qsrc / T1 - T2 * (Vgsteff * (3.0 * Vgsteff - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0); T5 = (qsrc / T1 + T2 * T7) * AbulkCV; T6 = (qsrc / T1 * VdseffCV + T2 * T7 * VdseffCV); Csg = (T4 + T5 * dVdseffCV_dVg); Csd = T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd; Csb = (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Csg * dVgsteff_dVb; Csg *= dVgsteff_dVg; } else { /* 50/50 Charge petition model */ qsrc = -0.5 * (qgate + qbulk); Csg = -0.5 * (Cgg1 + Cbg1); Csb = -0.5 * (Cgb1 + Cbb1); Csd = -0.5 * (Cgd1 + Cbd1); } qgate += Qac0 + Qsub0; qbulk -= (Qac0 + Qsub0); qdrn = -(qgate + qbulk + qsrc); Cgg = dQac0_dVg + dQsub0_dVg + Cgg1; Cgd = dQsub0_dVd + Cgd1; Cgb = dQac0_dVb + dQsub0_dVb + Cgb1; Cbg = Cbg1 - dQac0_dVg - dQsub0_dVg; Cbd = Cbd1 - dQsub0_dVd; Cbb = Cbb1 - dQac0_dVb - dQsub0_dVb; Cgb *= dVbseff_dVb; Cbb *= dVbseff_dVb; Csb *= dVbseff_dVb; here->BSIM3cggb = Cgg; here->BSIM3cgsb = -(Cgg + Cgd + Cgb); here->BSIM3cgdb = Cgd; here->BSIM3cdgb = -(Cgg + Cbg + Csg); here->BSIM3cdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb + Csg + Csd + Csb); here->BSIM3cddb = -(Cgd + Cbd + Csd); here->BSIM3cbgb = Cbg; here->BSIM3cbsb = -(Cbg + Cbd + Cbb); here->BSIM3cbdb = Cbd; here->BSIM3qinv = qinoi; } /* New Charge-Thickness capMod (CTM) begins */ else if (model->BSIM3capMod == 3) { V3 = here->BSIM3vfbzb - Vgs_eff + VbseffCV - DELTA_3; if (here->BSIM3vfbzb <= 0.0) { T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * here->BSIM3vfbzb); T2 = -DELTA_3 / T0; } else { T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * here->BSIM3vfbzb); T2 = DELTA_3 / T0; } T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = here->BSIM3vfbzb - 0.5 * (V3 + T0); dVfbeff_dVg = T1 * dVgs_eff_dVg; dVfbeff_dVb = -T1 * dVbseffCV_dVb; Cox = model->BSIM3cox; Tox = 1.0e8 * model->BSIM3tox; T0 = (Vgs_eff - VbseffCV - here->BSIM3vfbzb) / Tox; dT0_dVg = dVgs_eff_dVg / Tox; dT0_dVb = -dVbseffCV_dVb / Tox; tmp = T0 * pParam->BSIM3acde; if ((-EXP_THRESHOLD < tmp) && (tmp < EXP_THRESHOLD)) { Tcen = pParam->BSIM3ldeb * exp(tmp); dTcen_dVg = pParam->BSIM3acde * Tcen; dTcen_dVb = dTcen_dVg * dT0_dVb; dTcen_dVg *= dT0_dVg; } else if (tmp <= -EXP_THRESHOLD) { Tcen = pParam->BSIM3ldeb * MIN_EXP; dTcen_dVg = dTcen_dVb = 0.0; } else { Tcen = pParam->BSIM3ldeb * MAX_EXP; dTcen_dVg = dTcen_dVb = 0.0; } LINK = 1.0e-3 * model->BSIM3tox; V3 = pParam->BSIM3ldeb - Tcen - LINK; V4 = sqrt(V3 * V3 + 4.0 * LINK * pParam->BSIM3ldeb); Tcen = pParam->BSIM3ldeb - 0.5 * (V3 + V4); T1 = 0.5 * (1.0 + V3 / V4); dTcen_dVg *= T1; dTcen_dVb *= T1; Ccen = EPSSI / Tcen; T2 = Cox / (Cox + Ccen); Coxeff = T2 * Ccen; T3 = -Ccen / Tcen; dCoxeff_dVg = T2 * T2 * T3; dCoxeff_dVb = dCoxeff_dVg * dTcen_dVb; dCoxeff_dVg *= dTcen_dVg; CoxWLcen = CoxWL * Coxeff / Cox; Qac0 = CoxWLcen * (Vfbeff - here->BSIM3vfbzb); QovCox = Qac0 / Coxeff; dQac0_dVg = CoxWLcen * dVfbeff_dVg + QovCox * dCoxeff_dVg; dQac0_dVb = CoxWLcen * dVfbeff_dVb + QovCox * dCoxeff_dVb; T0 = 0.5 * pParam->BSIM3k1ox; T3 = Vgs_eff - Vfbeff - VbseffCV - Vgsteff; if (pParam->BSIM3k1ox == 0.0) { T1 = 0.0; T2 = 0.0; } else if (T3 < 0.0) { T1 = T0 + T3 / pParam->BSIM3k1ox; T2 = CoxWLcen; } else { T1 = sqrt(T0 * T0 + T3); T2 = CoxWLcen * T0 / T1; } Qsub0 = CoxWLcen * pParam->BSIM3k1ox * (T1 - T0); QovCox = Qsub0 / Coxeff; dQsub0_dVg = T2 * (dVgs_eff_dVg - dVfbeff_dVg - dVgsteff_dVg) + QovCox * dCoxeff_dVg; dQsub0_dVd = -T2 * dVgsteff_dVd; dQsub0_dVb = -T2 * (dVfbeff_dVb + dVbseffCV_dVb + dVgsteff_dVb) + QovCox * dCoxeff_dVb; /* Gate-bias dependent delta Phis begins */ if (pParam->BSIM3k1ox <= 0.0) { Denomi = 0.25 * pParam->BSIM3moin * Vtm; T0 = 0.5 * pParam->BSIM3sqrtPhi; } else { Denomi = pParam->BSIM3moin * Vtm * pParam->BSIM3k1ox * pParam->BSIM3k1ox; T0 = pParam->BSIM3k1ox * pParam->BSIM3sqrtPhi; } T1 = 2.0 * T0 + Vgsteff; DeltaPhi = Vtm * log(1.0 + T1 * Vgsteff / Denomi); dDeltaPhi_dVg = 2.0 * Vtm * (T1 -T0) / (Denomi + T1 * Vgsteff); /* End of delta Phis */ /* VgDP = Vgsteff - DeltaPhi */ T0 = Vgsteff - DeltaPhi - 0.001; dT0_dVg = 1.0 - dDeltaPhi_dVg; T1 = sqrt(T0 * T0 + Vgsteff * 0.004); VgDP = 0.5 * (T0 + T1); dVgDP_dVg = 0.5 * (dT0_dVg + (T0 * dT0_dVg + 0.002) / T1); T3 = 4.0 * (Vth - here->BSIM3vfbzb - pParam->BSIM3phi); Tox += Tox; if (T3 >= 0.0) { T0 = (Vgsteff + T3) / Tox; dT0_dVd = (dVgsteff_dVd + 4.0 * dVth_dVd) / Tox; dT0_dVb = (dVgsteff_dVb + 4.0 * dVth_dVb) / Tox; } else { T0 = (Vgsteff + 1.0e-20) / Tox; dT0_dVd = dVgsteff_dVd / Tox; dT0_dVb = dVgsteff_dVb / Tox; } tmp = exp(0.7 * log(T0)); T1 = 1.0 + tmp; T2 = 0.7 * tmp / (T0 * Tox); Tcen = 1.9e-9 / T1; dTcen_dVg = -1.9e-9 * T2 / T1 /T1; dTcen_dVd = Tox * dTcen_dVg; dTcen_dVb = dTcen_dVd * dT0_dVb; dTcen_dVd *= dT0_dVd; dTcen_dVg *= dVgsteff_dVg; Ccen = EPSSI / Tcen; T0 = Cox / (Cox + Ccen); Coxeff = T0 * Ccen; T1 = -Ccen / Tcen; dCoxeff_dVg = T0 * T0 * T1; dCoxeff_dVd = dCoxeff_dVg * dTcen_dVd; dCoxeff_dVb = dCoxeff_dVg * dTcen_dVb; dCoxeff_dVg *= dTcen_dVg; CoxWLcen = CoxWL * Coxeff / Cox; AbulkCV = Abulk0 * pParam->BSIM3abulkCVfactor; dAbulkCV_dVb = pParam->BSIM3abulkCVfactor * dAbulk0_dVb; VdsatCV = VgDP / AbulkCV; T0 = VdsatCV - Vds - DELTA_4; dT0_dVg = dVgDP_dVg / AbulkCV; dT0_dVb = -VdsatCV * dAbulkCV_dVb / AbulkCV; T1 = sqrt(T0 * T0 + 4.0 * DELTA_4 * VdsatCV); dT1_dVg = (T0 + DELTA_4 + DELTA_4) / T1; dT1_dVd = -T0 / T1; dT1_dVb = dT1_dVg * dT0_dVb; dT1_dVg *= dT0_dVg; if (T0 >= 0.0) { VdseffCV = VdsatCV - 0.5 * (T0 + T1); dVdseffCV_dVg = 0.5 * (dT0_dVg - dT1_dVg); dVdseffCV_dVd = 0.5 * (1.0 - dT1_dVd); dVdseffCV_dVb = 0.5 * (dT0_dVb - dT1_dVb); } else { T3 = (DELTA_4 + DELTA_4) / (T1 - T0); T4 = 1.0 - T3; T5 = VdsatCV * T3 / (T1 - T0); VdseffCV = VdsatCV * T4; dVdseffCV_dVg = dT0_dVg * T4 + T5 * (dT1_dVg - dT0_dVg); dVdseffCV_dVd = T5 * (dT1_dVd + 1.0); dVdseffCV_dVb = dT0_dVb * (1.0 - T5) + T5 * dT1_dVb; } /* Added to eliminate non-zero VdseffCV at Vds=0.0 */ if (Vds == 0.0) { VdseffCV = 0.0; dVdseffCV_dVg = 0.0; dVdseffCV_dVb = 0.0; } T0 = AbulkCV * VdseffCV; T1 = VgDP; T2 = 12.0 * (T1 - 0.5 * T0 + 1.0e-20); T3 = T0 / T2; T4 = 1.0 - 12.0 * T3 * T3; T5 = AbulkCV * (6.0 * T0 * (4.0 * T1 - T0) / (T2 * T2) - 0.5); T6 = T5 * VdseffCV / AbulkCV; qgate = qinoi = CoxWLcen * (T1 - T0 * (0.5 - T3)); QovCox = qgate / Coxeff; Cgg1 = CoxWLcen * (T4 * dVgDP_dVg + T5 * dVdseffCV_dVg); Cgd1 = CoxWLcen * T5 * dVdseffCV_dVd + Cgg1 * dVgsteff_dVd + QovCox * dCoxeff_dVd; Cgb1 = CoxWLcen * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Cgg1 * dVgsteff_dVb + QovCox * dCoxeff_dVb; Cgg1 = Cgg1 * dVgsteff_dVg + QovCox * dCoxeff_dVg; T7 = 1.0 - AbulkCV; T8 = T2 * T2; T9 = 12.0 * T7 * T0 * T0 / (T8 * AbulkCV); T10 = T9 * dVgDP_dVg; T11 = -T7 * T5 / AbulkCV; T12 = -(T9 * T1 / AbulkCV + VdseffCV * (0.5 - T0 / T2)); qbulk = CoxWLcen * T7 * (0.5 * VdseffCV - T0 * VdseffCV / T2); QovCox = qbulk / Coxeff; Cbg1 = CoxWLcen * (T10 + T11 * dVdseffCV_dVg); Cbd1 = CoxWLcen * T11 * dVdseffCV_dVd + Cbg1 * dVgsteff_dVd + QovCox * dCoxeff_dVd; Cbb1 = CoxWLcen * (T11 * dVdseffCV_dVb + T12 * dAbulkCV_dVb) + Cbg1 * dVgsteff_dVb + QovCox * dCoxeff_dVb; Cbg1 = Cbg1 * dVgsteff_dVg + QovCox * dCoxeff_dVg; if (model->BSIM3xpart > 0.5) { /* 0/100 partition */ qsrc = -CoxWLcen * (T1 / 2.0 + T0 / 4.0 - 0.5 * T0 * T0 / T2); QovCox = qsrc / Coxeff; T2 += T2; T3 = T2 * T2; T7 = -(0.25 - 12.0 * T0 * (4.0 * T1 - T0) / T3); T4 = -(0.5 + 24.0 * T0 * T0 / T3) * dVgDP_dVg; T5 = T7 * AbulkCV; T6 = T7 * VdseffCV; Csg = CoxWLcen * (T4 + T5 * dVdseffCV_dVg); Csd = CoxWLcen * T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd + QovCox * dCoxeff_dVd; Csb = CoxWLcen * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Csg * dVgsteff_dVb + QovCox * dCoxeff_dVb; Csg = Csg * dVgsteff_dVg + QovCox * dCoxeff_dVg; } else if (model->BSIM3xpart < 0.5) { /* 40/60 partition */ T2 = T2 / 12.0; T3 = 0.5 * CoxWLcen / (T2 * T2); T4 = T1 * (2.0 * T0 * T0 / 3.0 + T1 * (T1 - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T3 * T4; QovCox = qsrc / Coxeff; T8 = 4.0 / 3.0 * T1 * (T1 - T0) + 0.4 * T0 * T0; T5 = -2.0 * qsrc / T2 - T3 * (T1 * (3.0 * T1 - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0); T6 = AbulkCV * (qsrc / T2 + T3 * T8); T7 = T6 * VdseffCV / AbulkCV; Csg = T5 * dVgDP_dVg + T6 * dVdseffCV_dVg; Csd = Csg * dVgsteff_dVd + T6 * dVdseffCV_dVd + QovCox * dCoxeff_dVd; Csb = Csg * dVgsteff_dVb + T6 * dVdseffCV_dVb + T7 * dAbulkCV_dVb + QovCox * dCoxeff_dVb; Csg = Csg * dVgsteff_dVg + QovCox * dCoxeff_dVg; } else { /* 50/50 partition */ qsrc = -0.5 * qgate; Csg = -0.5 * Cgg1; Csd = -0.5 * Cgd1; Csb = -0.5 * Cgb1; } qgate += Qac0 + Qsub0 - qbulk; qbulk -= (Qac0 + Qsub0); qdrn = -(qgate + qbulk + qsrc); Cbg = Cbg1 - dQac0_dVg - dQsub0_dVg; Cbd = Cbd1 - dQsub0_dVd; Cbb = Cbb1 - dQac0_dVb - dQsub0_dVb; Cgg = Cgg1 - Cbg; Cgd = Cgd1 - Cbd; Cgb = Cgb1 - Cbb; Cgb *= dVbseff_dVb; Cbb *= dVbseff_dVb; Csb *= dVbseff_dVb; here->BSIM3cggb = Cgg; here->BSIM3cgsb = -(Cgg + Cgd + Cgb); here->BSIM3cgdb = Cgd; here->BSIM3cdgb = -(Cgg + Cbg + Csg); here->BSIM3cdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb + Csg + Csd + Csb); here->BSIM3cddb = -(Cgd + Cbd + Csd); here->BSIM3cbgb = Cbg; here->BSIM3cbsb = -(Cbg + Cbd + Cbb); here->BSIM3cbdb = Cbd; here->BSIM3qinv = -qinoi; } /* End of CTM */ } finished: /* Returning Values to Calling Routine */ /* * COMPUTE EQUIVALENT DRAIN CURRENT SOURCE */ here->BSIM3qgate = qgate; here->BSIM3qbulk = qbulk; here->BSIM3qdrn = qdrn; here->BSIM3cd = cdrain; if (ChargeComputationNeeded) { /* charge storage elements * bulk-drain and bulk-source depletion capacitances * czbd : zero bias drain junction capacitance * czbs : zero bias source junction capacitance * czbdsw: zero bias drain junction sidewall capacitance along field oxide * czbssw: zero bias source junction sidewall capacitance along field oxide * czbdswg: zero bias drain junction sidewall capacitance along gate side * czbsswg: zero bias source junction sidewall capacitance along gate side */ if (model->BSIM3acmMod == 0) { czbd = model->BSIM3unitAreaTempJctCap * here->BSIM3drainArea; /*bug fix */ czbs = model->BSIM3unitAreaTempJctCap * here->BSIM3sourceArea; if (here->BSIM3drainPerimeter < pParam->BSIM3weff) { czbdswg = model->BSIM3unitLengthGateSidewallTempJctCap * here->BSIM3drainPerimeter; czbdsw = 0.0; } else { czbdsw = model->BSIM3unitLengthSidewallTempJctCap * (here->BSIM3drainPerimeter - pParam->BSIM3weff); czbdswg = model->BSIM3unitLengthGateSidewallTempJctCap * pParam->BSIM3weff; } if (here->BSIM3sourcePerimeter < pParam->BSIM3weff) { czbssw = 0.0; czbsswg = model->BSIM3unitLengthGateSidewallTempJctCap * here->BSIM3sourcePerimeter; } else { czbssw = model->BSIM3unitLengthSidewallTempJctCap * (here->BSIM3sourcePerimeter - pParam->BSIM3weff); czbsswg = model->BSIM3unitLengthGateSidewallTempJctCap * pParam->BSIM3weff; } } else { error = ACM_junctionCapacitances( model->BSIM3acmMod, model->BSIM3calcacm, here->BSIM3geo, model->BSIM3hdif, model->BSIM3wmlt, here->BSIM3w, model->BSIM3xw, here->BSIM3drainAreaGiven, here->BSIM3drainArea, here->BSIM3drainPerimeterGiven, here->BSIM3drainPerimeter, here->BSIM3sourceAreaGiven, here->BSIM3sourceArea, here->BSIM3sourcePerimeterGiven, here->BSIM3sourcePerimeter, model->BSIM3unitAreaTempJctCap, model->BSIM3unitLengthSidewallTempJctCap, model->BSIM3unitLengthGateSidewallJctCap, &czbd, &czbdsw, &czbdswg, &czbs, &czbssw, &czbsswg ); if (error) return(error); } MJ = model->BSIM3bulkJctBotGradingCoeff; MJSW = model->BSIM3bulkJctSideGradingCoeff; MJSWG = model->BSIM3bulkJctGateSideGradingCoeff; /* Source Bulk Junction */ if (vbs == 0.0) { *(ckt->CKTstate0 + here->BSIM3qbs) = 0.0; here->BSIM3capbs = czbs + czbssw + czbsswg; } else if (vbs < 0.0) { if (czbs > 0.0) { arg = 1.0 - vbs / model->BSIM3PhiB; if (MJ == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJ * log(arg)); *(ckt->CKTstate0 + here->BSIM3qbs) = model->BSIM3PhiB * czbs * (1.0 - arg * sarg) / (1.0 - MJ); here->BSIM3capbs = czbs * sarg; } else { *(ckt->CKTstate0 + here->BSIM3qbs) = 0.0; here->BSIM3capbs = 0.0; } if (czbssw > 0.0) { arg = 1.0 - vbs / model->BSIM3PhiBSW; if (MJSW == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSW * log(arg)); *(ckt->CKTstate0 + here->BSIM3qbs) += model->BSIM3PhiBSW * czbssw * (1.0 - arg * sarg) / (1.0 - MJSW); here->BSIM3capbs += czbssw * sarg; } if (czbsswg > 0.0) { arg = 1.0 - vbs / model->BSIM3PhiBSWG; if (MJSWG == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSWG * log(arg)); *(ckt->CKTstate0 + here->BSIM3qbs) += model->BSIM3PhiBSWG * czbsswg * (1.0 - arg * sarg) / (1.0 - MJSWG); here->BSIM3capbs += czbsswg * sarg; } } else { T0 = czbs + czbssw + czbsswg; T1 = vbs * (czbs * MJ / model->BSIM3PhiB + czbssw * MJSW / model->BSIM3PhiBSW + czbsswg * MJSWG / model->BSIM3PhiBSWG); *(ckt->CKTstate0 + here->BSIM3qbs) = vbs * (T0 + 0.5 * T1); here->BSIM3capbs = T0 + T1; } /* Drain Bulk Junction */ if (vbd == 0.0) { *(ckt->CKTstate0 + here->BSIM3qbd) = 0.0; here->BSIM3capbd = czbd + czbdsw + czbdswg; } else if (vbd < 0.0) { if (czbd > 0.0) { arg = 1.0 - vbd / model->BSIM3PhiB; if (MJ == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJ * log(arg)); *(ckt->CKTstate0 + here->BSIM3qbd) = model->BSIM3PhiB * czbd * (1.0 - arg * sarg) / (1.0 - MJ); here->BSIM3capbd = czbd * sarg; } else { *(ckt->CKTstate0 + here->BSIM3qbd) = 0.0; here->BSIM3capbd = 0.0; } if (czbdsw > 0.0) { arg = 1.0 - vbd / model->BSIM3PhiBSW; if (MJSW == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSW * log(arg)); *(ckt->CKTstate0 + here->BSIM3qbd) += model->BSIM3PhiBSW * czbdsw * (1.0 - arg * sarg) / (1.0 - MJSW); here->BSIM3capbd += czbdsw * sarg; } if (czbdswg > 0.0) { arg = 1.0 - vbd / model->BSIM3PhiBSWG; if (MJSWG == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSWG * log(arg)); *(ckt->CKTstate0 + here->BSIM3qbd) += model->BSIM3PhiBSWG * czbdswg * (1.0 - arg * sarg) / (1.0 - MJSWG); here->BSIM3capbd += czbdswg * sarg; } } else { T0 = czbd + czbdsw + czbdswg; T1 = vbd * (czbd * MJ / model->BSIM3PhiB + czbdsw * MJSW / model->BSIM3PhiBSW + czbdswg * MJSWG / model->BSIM3PhiBSWG); *(ckt->CKTstate0 + here->BSIM3qbd) = vbd * (T0 + 0.5 * T1); here->BSIM3capbd = T0 + T1; } } /* * check convergence */ if ((here->BSIM3off == 0) || (!(ckt->CKTmode & MODEINITFIX))) { if (Check == 1) { ckt->CKTnoncon++; #ifndef NEWCONV } else { if (here->BSIM3mode >= 0) { Idtot = here->BSIM3cd + here->BSIM3csub - here->BSIM3cbd; } else { Idtot = here->BSIM3cd - here->BSIM3cbd; } tol = ckt->CKTreltol * MAX(fabs(cdhat), fabs(Idtot)) + ckt->CKTabstol; if (fabs(cdhat - Idtot) >= tol) { ckt->CKTnoncon++; } else { Ibtot = here->BSIM3cbs + here->BSIM3cbd - here->BSIM3csub; tol = ckt->CKTreltol * MAX(fabs(cbhat), fabs(Ibtot)) + ckt->CKTabstol; if (fabs(cbhat - Ibtot) > tol) { ckt->CKTnoncon++; } } #endif /* NEWCONV */ } } *(ckt->CKTstate0 + here->BSIM3vbs) = vbs; *(ckt->CKTstate0 + here->BSIM3vbd) = vbd; *(ckt->CKTstate0 + here->BSIM3vgs) = vgs; *(ckt->CKTstate0 + here->BSIM3vds) = vds; *(ckt->CKTstate0 + here->BSIM3qdef) = qdef; /* bulk and channel charge plus overlaps */ if (!ChargeComputationNeeded) goto line850; #ifndef NOBYPASS line755: #endif /* NQS begins */ if ((here->BSIM3nqsMod) || (here->BSIM3acnqsMod)) { qcheq = -(qbulk + qgate); here->BSIM3cqgb = -(here->BSIM3cggb + here->BSIM3cbgb); here->BSIM3cqdb = -(here->BSIM3cgdb + here->BSIM3cbdb); here->BSIM3cqsb = -(here->BSIM3cgsb + here->BSIM3cbsb); here->BSIM3cqbb = -(here->BSIM3cqgb + here->BSIM3cqdb + here->BSIM3cqsb); gtau_drift = fabs(here->BSIM3tconst * qcheq) * ScalingFactor; T0 = pParam->BSIM3leffCV * pParam->BSIM3leffCV; gtau_diff = 16.0 * here->BSIM3u0temp * model->BSIM3vtm / T0 * ScalingFactor; here->BSIM3gtau = gtau_drift + gtau_diff; if (here->BSIM3acnqsMod) here->BSIM3taunet = ScalingFactor / here->BSIM3gtau; } if (model->BSIM3capMod == 0) /* code merge -JX */ { cgdo = pParam->BSIM3cgdo; qgdo = pParam->BSIM3cgdo * vgd; cgso = pParam->BSIM3cgso; qgso = pParam->BSIM3cgso * vgs; } else if (model->BSIM3capMod == 1) { if (vgd < 0.0) { T1 = sqrt(1.0 - 4.0 * vgd / pParam->BSIM3ckappa); cgdo = pParam->BSIM3cgdo + pParam->BSIM3weffCV * pParam->BSIM3cgdl / T1; qgdo = pParam->BSIM3cgdo * vgd - pParam->BSIM3weffCV * 0.5 * pParam->BSIM3cgdl * pParam->BSIM3ckappa * (T1 - 1.0); } else { cgdo = pParam->BSIM3cgdo + pParam->BSIM3weffCV * pParam->BSIM3cgdl; qgdo = (pParam->BSIM3weffCV * pParam->BSIM3cgdl + pParam->BSIM3cgdo) * vgd; } if (vgs < 0.0) { T1 = sqrt(1.0 - 4.0 * vgs / pParam->BSIM3ckappa); cgso = pParam->BSIM3cgso + pParam->BSIM3weffCV * pParam->BSIM3cgsl / T1; qgso = pParam->BSIM3cgso * vgs - pParam->BSIM3weffCV * 0.5 * pParam->BSIM3cgsl * pParam->BSIM3ckappa * (T1 - 1.0); } else { cgso = pParam->BSIM3cgso + pParam->BSIM3weffCV * pParam->BSIM3cgsl; qgso = (pParam->BSIM3weffCV * pParam->BSIM3cgsl + pParam->BSIM3cgso) * vgs; } } else { T0 = vgd + DELTA_1; T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); T3 = pParam->BSIM3weffCV * pParam->BSIM3cgdl; T4 = sqrt(1.0 - 4.0 * T2 / pParam->BSIM3ckappa); cgdo = pParam->BSIM3cgdo + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgdo = (pParam->BSIM3cgdo + T3) * vgd - T3 * (T2 + 0.5 * pParam->BSIM3ckappa * (T4 - 1.0)); T0 = vgs + DELTA_1; T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); T3 = pParam->BSIM3weffCV * pParam->BSIM3cgsl; T4 = sqrt(1.0 - 4.0 * T2 / pParam->BSIM3ckappa); cgso = pParam->BSIM3cgso + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgso = (pParam->BSIM3cgso + T3) * vgs - T3 * (T2 + 0.5 * pParam->BSIM3ckappa * (T4 - 1.0)); } here->BSIM3cgdo = cgdo; here->BSIM3cgso = cgso; ag0 = ckt->CKTag[0]; if (here->BSIM3mode > 0) { if (here->BSIM3nqsMod == 0) { gcggb = (here->BSIM3cggb + cgdo + cgso + pParam->BSIM3cgbo ) * ag0; gcgdb = (here->BSIM3cgdb - cgdo) * ag0; gcgsb = (here->BSIM3cgsb - cgso) * ag0; gcdgb = (here->BSIM3cdgb - cgdo) * ag0; gcddb = (here->BSIM3cddb + here->BSIM3capbd + cgdo) * ag0; gcdsb = here->BSIM3cdsb * ag0; gcsgb = -(here->BSIM3cggb + here->BSIM3cbgb + here->BSIM3cdgb + cgso) * ag0; gcsdb = -(here->BSIM3cgdb + here->BSIM3cbdb + here->BSIM3cddb) * ag0; gcssb = (here->BSIM3capbs + cgso - (here->BSIM3cgsb + here->BSIM3cbsb + here->BSIM3cdsb)) * ag0; gcbgb = (here->BSIM3cbgb - pParam->BSIM3cgbo) * ag0; gcbdb = (here->BSIM3cbdb - here->BSIM3capbd) * ag0; gcbsb = (here->BSIM3cbsb - here->BSIM3capbs) * ag0; qgd = qgdo; qgs = qgso; qgb = pParam->BSIM3cgbo * vgb; qgate += qgd + qgs + qgb; qbulk -= qgb; qdrn -= qgd; qsrc = -(qgate + qbulk + qdrn); ggtg = ggtd = ggtb = ggts = 0.0; sxpart = 0.6; dxpart = 0.4; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { if (qcheq > 0.0) T0 = here->BSIM3tconst * qdef * ScalingFactor; else T0 = -here->BSIM3tconst * qdef * ScalingFactor; ggtg = here->BSIM3gtg = T0 * here->BSIM3cqgb; ggtd = here->BSIM3gtd = T0 * here->BSIM3cqdb; ggts = here->BSIM3gts = T0 * here->BSIM3cqsb; ggtb = here->BSIM3gtb = T0 * here->BSIM3cqbb; gqdef = ScalingFactor * ag0; gcqgb = here->BSIM3cqgb * ag0; gcqdb = here->BSIM3cqdb * ag0; gcqsb = here->BSIM3cqsb * ag0; gcqbb = here->BSIM3cqbb * ag0; gcggb = (cgdo + cgso + pParam->BSIM3cgbo ) * ag0; gcgdb = -cgdo * ag0; gcgsb = -cgso * ag0; gcdgb = -cgdo * ag0; gcddb = (here->BSIM3capbd + cgdo) * ag0; gcdsb = 0.0; gcsgb = -cgso * ag0; gcsdb = 0.0; gcssb = (here->BSIM3capbs + cgso) * ag0; gcbgb = -pParam->BSIM3cgbo * ag0; gcbdb = -here->BSIM3capbd * ag0; gcbsb = -here->BSIM3capbs * ag0; CoxWL = model->BSIM3cox * pParam->BSIM3weffCV * pParam->BSIM3leffCV; if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM3xpart < 0.5) { dxpart = 0.4; } else if (model->BSIM3xpart > 0.5) { dxpart = 0.0; } else { dxpart = 0.5; } ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; } else { dxpart = qdrn / qcheq; Cdd = here->BSIM3cddb; Csd = -(here->BSIM3cgdb + here->BSIM3cddb + here->BSIM3cbdb); ddxpart_dVd = (Cdd - dxpart * (Cdd + Csd)) / qcheq; Cdg = here->BSIM3cdgb; Csg = -(here->BSIM3cggb + here->BSIM3cdgb + here->BSIM3cbgb); ddxpart_dVg = (Cdg - dxpart * (Cdg + Csg)) / qcheq; Cds = here->BSIM3cdsb; Css = -(here->BSIM3cgsb + here->BSIM3cdsb + here->BSIM3cbsb); ddxpart_dVs = (Cds - dxpart * (Cds + Css)) / qcheq; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); } sxpart = 1.0 - dxpart; dsxpart_dVd = -ddxpart_dVd; dsxpart_dVg = -ddxpart_dVg; dsxpart_dVs = -ddxpart_dVs; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); qgd = qgdo; qgs = qgso; qgb = pParam->BSIM3cgbo * vgb; qgate = qgd + qgs + qgb; qbulk = -qgb; qdrn = -qgd; qsrc = -(qgate + qbulk + qdrn); } } else { if (here->BSIM3nqsMod == 0) { gcggb = (here->BSIM3cggb + cgdo + cgso + pParam->BSIM3cgbo ) * ag0; gcgdb = (here->BSIM3cgsb - cgdo) * ag0; gcgsb = (here->BSIM3cgdb - cgso) * ag0; gcdgb = -(here->BSIM3cggb + here->BSIM3cbgb + here->BSIM3cdgb + cgdo) * ag0; gcddb = (here->BSIM3capbd + cgdo - (here->BSIM3cgsb + here->BSIM3cbsb + here->BSIM3cdsb)) * ag0; gcdsb = -(here->BSIM3cgdb + here->BSIM3cbdb + here->BSIM3cddb) * ag0; gcsgb = (here->BSIM3cdgb - cgso) * ag0; gcsdb = here->BSIM3cdsb * ag0; gcssb = (here->BSIM3cddb + here->BSIM3capbs + cgso) * ag0; gcbgb = (here->BSIM3cbgb - pParam->BSIM3cgbo) * ag0; gcbdb = (here->BSIM3cbsb - here->BSIM3capbd) * ag0; gcbsb = (here->BSIM3cbdb - here->BSIM3capbs) * ag0; qgd = qgdo; qgs = qgso; qgb = pParam->BSIM3cgbo * vgb; qgate += qgd + qgs + qgb; qbulk -= qgb; qsrc = qdrn - qgs; qdrn = -(qgate + qbulk + qsrc); ggtg = ggtd = ggtb = ggts = 0.0; sxpart = 0.4; dxpart = 0.6; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { if (qcheq > 0.0) T0 = here->BSIM3tconst * qdef * ScalingFactor; else T0 = -here->BSIM3tconst * qdef * ScalingFactor; ggtg = here->BSIM3gtg = T0 * here->BSIM3cqgb; ggts = here->BSIM3gtd = T0 * here->BSIM3cqdb; ggtd = here->BSIM3gts = T0 * here->BSIM3cqsb; ggtb = here->BSIM3gtb = T0 * here->BSIM3cqbb; gqdef = ScalingFactor * ag0; gcqgb = here->BSIM3cqgb * ag0; gcqdb = here->BSIM3cqsb * ag0; gcqsb = here->BSIM3cqdb * ag0; gcqbb = here->BSIM3cqbb * ag0; gcggb = (cgdo + cgso + pParam->BSIM3cgbo) * ag0; gcgdb = -cgdo * ag0; gcgsb = -cgso * ag0; gcdgb = -cgdo * ag0; gcddb = (here->BSIM3capbd + cgdo) * ag0; gcdsb = 0.0; gcsgb = -cgso * ag0; gcsdb = 0.0; gcssb = (here->BSIM3capbs + cgso) * ag0; gcbgb = -pParam->BSIM3cgbo * ag0; gcbdb = -here->BSIM3capbd * ag0; gcbsb = -here->BSIM3capbs * ag0; CoxWL = model->BSIM3cox * pParam->BSIM3weffCV * pParam->BSIM3leffCV; if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM3xpart < 0.5) { sxpart = 0.4; } else if (model->BSIM3xpart > 0.5) { sxpart = 0.0; } else { sxpart = 0.5; } dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { sxpart = qdrn / qcheq; Css = here->BSIM3cddb; Cds = -(here->BSIM3cgdb + here->BSIM3cddb + here->BSIM3cbdb); dsxpart_dVs = (Css - sxpart * (Css + Cds)) / qcheq; Csg = here->BSIM3cdgb; Cdg = -(here->BSIM3cggb + here->BSIM3cdgb + here->BSIM3cbgb); dsxpart_dVg = (Csg - sxpart * (Csg + Cdg)) / qcheq; Csd = here->BSIM3cdsb; Cdd = -(here->BSIM3cgsb + here->BSIM3cdsb + here->BSIM3cbsb); dsxpart_dVd = (Csd - sxpart * (Csd + Cdd)) / qcheq; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); } dxpart = 1.0 - sxpart; ddxpart_dVd = -dsxpart_dVd; ddxpart_dVg = -dsxpart_dVg; ddxpart_dVs = -dsxpart_dVs; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); qgd = qgdo; qgs = qgso; qgb = pParam->BSIM3cgbo * vgb; qgate = qgd + qgs + qgb; qbulk = -qgb; qsrc = -qgs; qdrn = -(qgate + qbulk + qsrc); } } cqdef = cqcheq = 0.0; if (ByPass) goto line860; *(ckt->CKTstate0 + here->BSIM3qg) = qgate; *(ckt->CKTstate0 + here->BSIM3qd) = qdrn - *(ckt->CKTstate0 + here->BSIM3qbd); *(ckt->CKTstate0 + here->BSIM3qb) = qbulk + *(ckt->CKTstate0 + here->BSIM3qbd) + *(ckt->CKTstate0 + here->BSIM3qbs); if (here->BSIM3nqsMod) { *(ckt->CKTstate0 + here->BSIM3qcdump) = qdef * ScalingFactor; *(ckt->CKTstate0 + here->BSIM3qcheq) = qcheq; } /* store small signal parameters */ if (ckt->CKTmode & MODEINITSMSIG) { goto line1000; } if (!ChargeComputationNeeded) goto line850; if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->BSIM3qb) = *(ckt->CKTstate0 + here->BSIM3qb); *(ckt->CKTstate1 + here->BSIM3qg) = *(ckt->CKTstate0 + here->BSIM3qg); *(ckt->CKTstate1 + here->BSIM3qd) = *(ckt->CKTstate0 + here->BSIM3qd); if (here->BSIM3nqsMod) { *(ckt->CKTstate1 + here->BSIM3qcheq) = *(ckt->CKTstate0 + here->BSIM3qcheq); *(ckt->CKTstate1 + here->BSIM3qcdump) = *(ckt->CKTstate0 + here->BSIM3qcdump); } } error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM3qb); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM3qg); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM3qd); if (error) return(error); if (here->BSIM3nqsMod) { error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM3qcdump); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM3qcheq); if (error) return(error); } goto line860; line850: /* initialize to zero charge conductance and current */ ceqqg = ceqqb = ceqqd = 0.0; cqcheq = cqdef = 0.0; gcdgb = gcddb = gcdsb = 0.0; gcsgb = gcsdb = gcssb = 0.0; gcggb = gcgdb = gcgsb = 0.0; gcbgb = gcbdb = gcbsb = 0.0; gqdef = gcqgb = gcqdb = gcqsb = gcqbb = 0.0; ggtg = ggtd = ggtb = ggts = 0.0; sxpart = (1.0 - (dxpart = (here->BSIM3mode > 0) ? 0.4 : 0.6)); ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; if (here->BSIM3nqsMod) here->BSIM3gtau = 16.0 * here->BSIM3u0temp * model->BSIM3vtm / pParam->BSIM3leffCV / pParam->BSIM3leffCV * ScalingFactor; else here->BSIM3gtau = 0.0; goto line900; line860: /* evaluate equivalent charge current */ cqgate = *(ckt->CKTstate0 + here->BSIM3cqg); cqbulk = *(ckt->CKTstate0 + here->BSIM3cqb); cqdrn = *(ckt->CKTstate0 + here->BSIM3cqd); ceqqg = cqgate - gcggb * vgb + gcgdb * vbd + gcgsb * vbs; ceqqb = cqbulk - gcbgb * vgb + gcbdb * vbd + gcbsb * vbs; ceqqd = cqdrn - gcdgb * vgb + gcddb * vbd + gcdsb * vbs; if (here->BSIM3nqsMod) { T0 = ggtg * vgb - ggtd * vbd - ggts * vbs; ceqqg += T0; T1 = qdef * here->BSIM3gtau; ceqqd -= dxpart * T0 + T1 * (ddxpart_dVg * vgb - ddxpart_dVd * vbd - ddxpart_dVs * vbs); cqdef = *(ckt->CKTstate0 + here->BSIM3cqcdump) - gqdef * qdef; cqcheq = *(ckt->CKTstate0 + here->BSIM3cqcheq) - (gcqgb * vgb - gcqdb * vbd - gcqsb * vbs) + T0; } if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->BSIM3cqb) = *(ckt->CKTstate0 + here->BSIM3cqb); *(ckt->CKTstate1 + here->BSIM3cqg) = *(ckt->CKTstate0 + here->BSIM3cqg); *(ckt->CKTstate1 + here->BSIM3cqd) = *(ckt->CKTstate0 + here->BSIM3cqd); if (here->BSIM3nqsMod) { *(ckt->CKTstate1 + here->BSIM3cqcheq) = *(ckt->CKTstate0 + here->BSIM3cqcheq); *(ckt->CKTstate1 + here->BSIM3cqcdump) = *(ckt->CKTstate0 + here->BSIM3cqcdump); } } /* * load current vector */ line900: if (here->BSIM3mode >= 0) { Gm = here->BSIM3gm; Gmbs = here->BSIM3gmbs; FwdSum = Gm + Gmbs; RevSum = 0.0; cdreq = model->BSIM3type * (cdrain - here->BSIM3gds * vds - Gm * vgs - Gmbs * vbs); ceqbd = -model->BSIM3type * (here->BSIM3csub - here->BSIM3gbds * vds - here->BSIM3gbgs * vgs - here->BSIM3gbbs * vbs); ceqbs = 0.0; gbbdp = -here->BSIM3gbds; gbbsp = (here->BSIM3gbds + here->BSIM3gbgs + here->BSIM3gbbs); gbdpg = here->BSIM3gbgs; gbdpdp = here->BSIM3gbds; gbdpb = here->BSIM3gbbs; gbdpsp = -(gbdpg + gbdpdp + gbdpb); gbspg = 0.0; gbspdp = 0.0; gbspb = 0.0; gbspsp = 0.0; } else { Gm = -here->BSIM3gm; Gmbs = -here->BSIM3gmbs; FwdSum = 0.0; RevSum = -(Gm + Gmbs); cdreq = -model->BSIM3type * (cdrain + here->BSIM3gds * vds + Gm * vgd + Gmbs * vbd); ceqbs = -model->BSIM3type * (here->BSIM3csub + here->BSIM3gbds * vds - here->BSIM3gbgs * vgd - here->BSIM3gbbs * vbd); ceqbd = 0.0; gbbsp = -here->BSIM3gbds; gbbdp = (here->BSIM3gbds + here->BSIM3gbgs + here->BSIM3gbbs); gbdpg = 0.0; gbdpsp = 0.0; gbdpb = 0.0; gbdpdp = 0.0; gbspg = here->BSIM3gbgs; gbspsp = here->BSIM3gbds; gbspb = here->BSIM3gbbs; gbspdp = -(gbspg + gbspsp + gbspb); } if (model->BSIM3type > 0) { ceqbs += (here->BSIM3cbs - here->BSIM3gbs * vbs); ceqbd += (here->BSIM3cbd - here->BSIM3gbd * vbd); /* ceqqg = ceqqg; ceqqb = ceqqb; ceqqd = ceqqd; cqdef = cqdef; cqcheq = cqcheq; */ } else { ceqbs -= (here->BSIM3cbs - here->BSIM3gbs * vbs); ceqbd -= (here->BSIM3cbd - here->BSIM3gbd * vbd); ceqqg = -ceqqg; ceqqb = -ceqqb; ceqqd = -ceqqd; cqdef = -cqdef; cqcheq = -cqcheq; } m = here->BSIM3m; #ifdef USE_OMP here->BSIM3rhsG = m * ceqqg; here->BSIM3rhsB = m * (ceqbs + ceqbd + ceqqb); here->BSIM3rhsD = m * (ceqbd - cdreq - ceqqd); here->BSIM3rhsS = m * (cdreq + ceqbs + ceqqg + ceqqb + ceqqd); if (here->BSIM3nqsMod) here->BSIM3rhsQ = m * (cqcheq - cqdef); #else (*(ckt->CKTrhs + here->BSIM3gNode) -= m * ceqqg); (*(ckt->CKTrhs + here->BSIM3bNode) -= m * (ceqbs + ceqbd + ceqqb)); (*(ckt->CKTrhs + here->BSIM3dNodePrime) += m * (ceqbd - cdreq - ceqqd)); (*(ckt->CKTrhs + here->BSIM3sNodePrime) += m * (cdreq + ceqbs + ceqqg + ceqqb + ceqqd)); if (here->BSIM3nqsMod) *(ckt->CKTrhs + here->BSIM3qNode) += m * (cqcheq - cqdef); #endif /* * load y matrix */ T1 = qdef * here->BSIM3gtau; #ifdef USE_OMP here->BSIM3DdPt = m * here->BSIM3drainConductance; here->BSIM3GgPt = m * (gcggb - ggtg); here->BSIM3SsPt = m * here->BSIM3sourceConductance; here->BSIM3BbPt = m * (here->BSIM3gbd + here->BSIM3gbs - gcbgb - gcbdb - gcbsb - here->BSIM3gbbs); here->BSIM3DPdpPt = m * (here->BSIM3drainConductance + here->BSIM3gds + here->BSIM3gbd + RevSum + gcddb + dxpart * ggtd + T1 * ddxpart_dVd + gbdpdp); here->BSIM3SPspPt = m * (here->BSIM3sourceConductance + here->BSIM3gds + here->BSIM3gbs + FwdSum + gcssb + sxpart * ggts + T1 * dsxpart_dVs + gbspsp); here->BSIM3DdpPt = m * here->BSIM3drainConductance; here->BSIM3GbPt = m * (gcggb + gcgdb + gcgsb + ggtb); here->BSIM3GdpPt = m * (gcgdb - ggtd); here->BSIM3GspPt = m * (gcgsb - ggts); here->BSIM3SspPt = m * here->BSIM3sourceConductance; here->BSIM3BgPt = m * (gcbgb - here->BSIM3gbgs); here->BSIM3BdpPt = m * (gcbdb - here->BSIM3gbd + gbbdp); here->BSIM3BspPt = m * (gcbsb - here->BSIM3gbs + gbbsp); here->BSIM3DPdPt = m * here->BSIM3drainConductance; here->BSIM3DPgPt = m * (Gm + gcdgb + dxpart * ggtg + T1 * ddxpart_dVg + gbdpg); here->BSIM3DPbPt = m * (here->BSIM3gbd - Gmbs + gcdgb + gcddb + gcdsb - dxpart * ggtb - T1 * ddxpart_dVb - gbdpb); here->BSIM3DPspPt = m * (here->BSIM3gds + FwdSum - gcdsb - dxpart * ggts - T1 * ddxpart_dVs - gbdpsp); here->BSIM3SPgPt = m * (gcsgb - Gm + sxpart * ggtg + T1 * dsxpart_dVg + gbspg); here->BSIM3SPsPt = m * here->BSIM3sourceConductance; here->BSIM3SPbPt = m * (here->BSIM3gbs + Gmbs + gcsgb + gcsdb + gcssb - sxpart * ggtb - T1 * dsxpart_dVb - gbspb); here->BSIM3SPdpPt = m * (here->BSIM3gds + RevSum - gcsdb - sxpart * ggtd - T1 * dsxpart_dVd - gbspdp); if (here->BSIM3nqsMod) { here->BSIM3QqPt = m * (gqdef + here->BSIM3gtau); here->BSIM3DPqPt = m * (dxpart * here->BSIM3gtau); here->BSIM3SPqPt = m * (sxpart * here->BSIM3gtau); here->BSIM3GqPt = m * here->BSIM3gtau; here->BSIM3QgPt = m * (ggtg - gcqgb); here->BSIM3QdpPt = m * (ggtd - gcqdb); here->BSIM3QspPt = m * (ggts - gcqsb); here->BSIM3QbPt = m * (ggtb - gcqbb); } #else (*(here->BSIM3DdPtr) += m * here->BSIM3drainConductance); (*(here->BSIM3GgPtr) += m * (gcggb - ggtg)); (*(here->BSIM3SsPtr) += m * here->BSIM3sourceConductance); (*(here->BSIM3BbPtr) += m * (here->BSIM3gbd + here->BSIM3gbs - gcbgb - gcbdb - gcbsb - here->BSIM3gbbs)); (*(here->BSIM3DPdpPtr) += m * (here->BSIM3drainConductance + here->BSIM3gds + here->BSIM3gbd + RevSum + gcddb + dxpart * ggtd + T1 * ddxpart_dVd + gbdpdp)); (*(here->BSIM3SPspPtr) += m * (here->BSIM3sourceConductance + here->BSIM3gds + here->BSIM3gbs + FwdSum + gcssb + sxpart * ggts + T1 * dsxpart_dVs + gbspsp)); (*(here->BSIM3DdpPtr) -= m * here->BSIM3drainConductance); (*(here->BSIM3GbPtr) -= m * (gcggb + gcgdb + gcgsb + ggtb)); (*(here->BSIM3GdpPtr) += m * (gcgdb - ggtd)); (*(here->BSIM3GspPtr) += m * (gcgsb - ggts)); (*(here->BSIM3SspPtr) -= m * here->BSIM3sourceConductance); (*(here->BSIM3BgPtr) += m * (gcbgb - here->BSIM3gbgs)); (*(here->BSIM3BdpPtr) += m * (gcbdb - here->BSIM3gbd + gbbdp)); (*(here->BSIM3BspPtr) += m * (gcbsb - here->BSIM3gbs + gbbsp)); (*(here->BSIM3DPdPtr) -= m * here->BSIM3drainConductance); (*(here->BSIM3DPgPtr) += m * (Gm + gcdgb + dxpart * ggtg + T1 * ddxpart_dVg + gbdpg)); (*(here->BSIM3DPbPtr) -= m * (here->BSIM3gbd - Gmbs + gcdgb + gcddb + gcdsb - dxpart * ggtb - T1 * ddxpart_dVb - gbdpb)); (*(here->BSIM3DPspPtr) -= m * (here->BSIM3gds + FwdSum - gcdsb - dxpart * ggts - T1 * ddxpart_dVs - gbdpsp)); (*(here->BSIM3SPgPtr) += m * (gcsgb - Gm + sxpart * ggtg + T1 * dsxpart_dVg + gbspg)); (*(here->BSIM3SPsPtr) -= m * here->BSIM3sourceConductance); (*(here->BSIM3SPbPtr) -= m * (here->BSIM3gbs + Gmbs + gcsgb + gcsdb + gcssb - sxpart * ggtb - T1 * dsxpart_dVb - gbspb)); (*(here->BSIM3SPdpPtr) -= m * (here->BSIM3gds + RevSum - gcsdb - sxpart * ggtd - T1 * dsxpart_dVd - gbspdp)); if (here->BSIM3nqsMod) { *(here->BSIM3QqPtr) += m * (gqdef + here->BSIM3gtau); *(here->BSIM3DPqPtr) += m * (dxpart * here->BSIM3gtau); *(here->BSIM3SPqPtr) += m * (sxpart * here->BSIM3gtau); *(here->BSIM3GqPtr) -= m * here->BSIM3gtau; *(here->BSIM3QgPtr) += m * (ggtg - gcqgb); *(here->BSIM3QdpPtr) += m * (ggtd - gcqdb); *(here->BSIM3QspPtr) += m * (ggts - gcqsb); *(here->BSIM3QbPtr) += m * (ggtb - gcqbb); } #endif line1000: ; #ifndef USE_OMP } /* End of Mosfet Instance */ } /* End of Model Instance */ #endif return(OK); } #ifdef USE_OMP void BSIM3LoadRhsMat(GENmodel *inModel, CKTcircuit *ckt) { int InstCount, idx; BSIM3instance **InstArray; BSIM3instance *here; BSIM3model *model = (BSIM3model*)inModel; InstArray = model->BSIM3InstanceArray; InstCount = model->BSIM3InstCount; for(idx = 0; idx < InstCount; idx++) { here = InstArray[idx]; model = BSIM3modPtr(here); /* Update b for Ax = b */ (*(ckt->CKTrhs + here->BSIM3gNode) -= here->BSIM3rhsG); (*(ckt->CKTrhs + here->BSIM3bNode) -= here->BSIM3rhsB); (*(ckt->CKTrhs + here->BSIM3dNodePrime) += here->BSIM3rhsD); (*(ckt->CKTrhs + here->BSIM3sNodePrime) += here->BSIM3rhsS); if (here->BSIM3nqsMod) (*(ckt->CKTrhs + here->BSIM3qNode) += here->BSIM3rhsQ); /* Update A for Ax = b */ (*(here->BSIM3DdPtr) += here->BSIM3DdPt); (*(here->BSIM3GgPtr) += here->BSIM3GgPt); (*(here->BSIM3SsPtr) += here->BSIM3SsPt); (*(here->BSIM3BbPtr) += here->BSIM3BbPt); (*(here->BSIM3DPdpPtr) += here->BSIM3DPdpPt); (*(here->BSIM3SPspPtr) += here->BSIM3SPspPt); (*(here->BSIM3DdpPtr) -= here->BSIM3DdpPt); (*(here->BSIM3GbPtr) -= here->BSIM3GbPt); (*(here->BSIM3GdpPtr) += here->BSIM3GdpPt); (*(here->BSIM3GspPtr) += here->BSIM3GspPt); (*(here->BSIM3SspPtr) -= here->BSIM3SspPt); (*(here->BSIM3BgPtr) += here->BSIM3BgPt); (*(here->BSIM3BdpPtr) += here->BSIM3BdpPt); (*(here->BSIM3BspPtr) += here->BSIM3BspPt); (*(here->BSIM3DPdPtr) -= here->BSIM3DPdPt); (*(here->BSIM3DPgPtr) += here->BSIM3DPgPt); (*(here->BSIM3DPbPtr) -= here->BSIM3DPbPt); (*(here->BSIM3DPspPtr) -= here->BSIM3DPspPt); (*(here->BSIM3SPgPtr) += here->BSIM3SPgPt); (*(here->BSIM3SPsPtr) -= here->BSIM3SPsPt); (*(here->BSIM3SPbPtr) -= here->BSIM3SPbPt); (*(here->BSIM3SPdpPtr) -= here->BSIM3SPdpPt); if (here->BSIM3nqsMod) { *(here->BSIM3QqPtr) += here->BSIM3QqPt; *(here->BSIM3DPqPtr) += here->BSIM3DPqPt; *(here->BSIM3SPqPtr) += here->BSIM3SPqPt; *(here->BSIM3GqPtr) -= here->BSIM3GqPt; *(here->BSIM3QgPtr) += here->BSIM3QgPt; *(here->BSIM3QdpPtr) += here->BSIM3QdpPt; *(here->BSIM3QspPtr) += here->BSIM3QspPt; *(here->BSIM3QbPtr) += here->BSIM3QbPt; } } } #endif tmpk8ny_4pz/src/spicelib/devices/bsim3/bsim3init.c0000644000175000017500000000326513546075722022253 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "bsim3itf.h" #include "bsim3ext.h" #include "bsim3init.h" SPICEdev BSIM3info = { .DEVpublic = { .name = "BSIM3", .description = "Berkeley Short Channel IGFET Model Version-3", .terms = &BSIM3nSize, .numNames = &BSIM3nSize, .termNames = BSIM3names, .numInstanceParms = &BSIM3pTSize, .instanceParms = BSIM3pTable, .numModelParms = &BSIM3mPTSize, .modelParms = BSIM3mPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = BSIM3param, .DEVmodParam = BSIM3mParam, .DEVload = BSIM3load, .DEVsetup = BSIM3setup, .DEVunsetup = BSIM3unsetup, .DEVpzSetup = BSIM3setup, .DEVtemperature = BSIM3temp, .DEVtrunc = BSIM3trunc, .DEVfindBranch = NULL, .DEVacLoad = BSIM3acLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = BSIM3mDelete, .DEVdelete = NULL, .DEVsetic = BSIM3getic, .DEVask = BSIM3ask, .DEVmodAsk = BSIM3mAsk, .DEVpzLoad = BSIM3pzLoad, .DEVconvTest = BSIM3convTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = BSIM3noise, .DEVsoaCheck = BSIM3soaCheck, .DEVinstSize = &BSIM3iSize, .DEVmodSize = &BSIM3mSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_bsim3_info(void) { return &BSIM3info; } tmpk8ny_4pz/src/spicelib/devices/bsim3/B3TERMS_OF_USE0000644000175000017500000000247513546075722022312 0ustar carstencarsten The terms under which the software is provided are as the following. Software is distributed as is, completely without warranty or service support. The University of California and its employees are not liable for the condition or performance of the software. The University owns the copyright but shall not be liable for any infringement of copyright or other proprietary rights brought by third parties against the users of the software. The University of California hereby disclaims all implied warranties. The University of California grants the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions: 1. The users agree not to charge for the University of California code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge the UC Berkeley BSIM Research Group that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to obey all U.S. Government restrictions governing redistribution or export of the software. 4. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others. tmpk8ny_4pz/src/spicelib/devices/bsim3/Makefile.am0000644000175000017500000000103413546075722022232 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libbsim3.la libbsim3_la_SOURCES = \ b3.c \ b3acld.c \ b3ask.c \ b3check.c \ b3cvtest.c \ b3getic.c \ b3ld.c \ b3mask.c \ b3mdel.c \ b3mpar.c \ b3noi.c \ b3par.c \ b3pzld.c \ b3set.c \ b3soachk.c \ b3temp.c \ b3trunc.c \ bsim3def.h \ bsim3ext.h \ bsim3init.c \ bsim3init.h \ bsim3itf.h AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in EXTRA_DIST = B3TERMS_OF_USE tmpk8ny_4pz/src/spicelib/devices/bsim3/b3set.c0000644000175000017500000012621713546075722021375 0ustar carstencarsten/**** BSIM3v3.3.0, Released by Xuemei Xi 07/29/2005 ****/ /**** OpenMP support for ngspice by Holger Vogt 06/28/2010 ****/ /********** * Copyright 2004 Regents of the University of California. All rights reserved. * File: b3set.c of BSIM3v3.3.0 * Author: 1995 Min-Chie Jeng and Mansun Chan. * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "bsim3def.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define SMOOTHFACTOR 0.1 #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define PI 3.141592654 #define Charge_q 1.60219e-19 #define Meter2Micron 1.0e6 int BSIM3setup( SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { BSIM3model *model = (BSIM3model*)inModel; BSIM3instance *here; int error; CKTnode *tmp; CKTnode *tmpNode; IFuid tmpName; #ifdef USE_OMP int idx, InstCount; BSIM3instance **InstArray; #endif /* loop through all the BSIM3 device models */ for( ; model != NULL; model = BSIM3nextModel(model)) { /* Default value Processing for BSIM3 MOSFET Models */ if (!model->BSIM3typeGiven) model->BSIM3type = NMOS; if (!model->BSIM3mobModGiven) model->BSIM3mobMod = 1; if (!model->BSIM3binUnitGiven) model->BSIM3binUnit = 1; if (!model->BSIM3paramChkGiven) model->BSIM3paramChk = 0; if (!model->BSIM3capModGiven) model->BSIM3capMod = 3; if (!model->BSIM3acmModGiven) model->BSIM3acmMod = 0; if (!model->BSIM3calcacmGiven) model->BSIM3calcacm = 0; if (!model->BSIM3noiModGiven) model->BSIM3noiMod = 1; if (!model->BSIM3nqsModGiven) model->BSIM3nqsMod = 0; else if ((model->BSIM3nqsMod != 0) && (model->BSIM3nqsMod != 1)) { model->BSIM3nqsMod = 0; printf("Warning: nqsMod has been set to its default value: 0.\n"); } if (!model->BSIM3acnqsModGiven) model->BSIM3acnqsMod = 0; else if ((model->BSIM3acnqsMod != 0) && (model->BSIM3acnqsMod != 1)) { model->BSIM3acnqsMod = 0; printf("Warning: acnqsMod has been set to its default value: 0.\n"); } if (!model->BSIM3versionGiven) model->BSIM3version = copy("3.3.0"); if (!model->BSIM3toxGiven) model->BSIM3tox = 150.0e-10; model->BSIM3cox = 3.453133e-11 / model->BSIM3tox; if (!model->BSIM3toxmGiven) model->BSIM3toxm = model->BSIM3tox; if (!model->BSIM3cdscGiven) model->BSIM3cdsc = 2.4e-4; /* unit Q/V/m^2 */ if (!model->BSIM3cdscbGiven) model->BSIM3cdscb = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3cdscdGiven) model->BSIM3cdscd = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3citGiven) model->BSIM3cit = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3nfactorGiven) model->BSIM3nfactor = 1; if (!model->BSIM3xjGiven) model->BSIM3xj = .15e-6; if (!model->BSIM3vsatGiven) model->BSIM3vsat = 8.0e4; /* unit m/s */ if (!model->BSIM3atGiven) model->BSIM3at = 3.3e4; /* unit m/s */ if (!model->BSIM3a0Given) model->BSIM3a0 = 1.0; if (!model->BSIM3agsGiven) model->BSIM3ags = 0.0; if (!model->BSIM3a1Given) model->BSIM3a1 = 0.0; if (!model->BSIM3a2Given) model->BSIM3a2 = 1.0; if (!model->BSIM3ketaGiven) model->BSIM3keta = -0.047; /* unit / V */ if (!model->BSIM3nsubGiven) model->BSIM3nsub = 6.0e16; /* unit 1/cm3 */ if (!model->BSIM3npeakGiven) model->BSIM3npeak = 1.7e17; /* unit 1/cm3 */ if (!model->BSIM3ngateGiven) model->BSIM3ngate = 0; /* unit 1/cm3 */ if (!model->BSIM3vbmGiven) model->BSIM3vbm = -3.0; if (!model->BSIM3xtGiven) model->BSIM3xt = 1.55e-7; if (!model->BSIM3kt1Given) model->BSIM3kt1 = -0.11; /* unit V */ if (!model->BSIM3kt1lGiven) model->BSIM3kt1l = 0.0; /* unit V*m */ if (!model->BSIM3kt2Given) model->BSIM3kt2 = 0.022; /* No unit */ if (!model->BSIM3k3Given) model->BSIM3k3 = 80.0; if (!model->BSIM3k3bGiven) model->BSIM3k3b = 0.0; if (!model->BSIM3w0Given) model->BSIM3w0 = 2.5e-6; if (!model->BSIM3nlxGiven) model->BSIM3nlx = 1.74e-7; if (!model->BSIM3dvt0Given) model->BSIM3dvt0 = 2.2; if (!model->BSIM3dvt1Given) model->BSIM3dvt1 = 0.53; if (!model->BSIM3dvt2Given) model->BSIM3dvt2 = -0.032; /* unit 1 / V */ if (!model->BSIM3dvt0wGiven) model->BSIM3dvt0w = 0.0; if (!model->BSIM3dvt1wGiven) model->BSIM3dvt1w = 5.3e6; if (!model->BSIM3dvt2wGiven) model->BSIM3dvt2w = -0.032; if (!model->BSIM3droutGiven) model->BSIM3drout = 0.56; if (!model->BSIM3dsubGiven) model->BSIM3dsub = model->BSIM3drout; if (!model->BSIM3vth0Given) model->BSIM3vth0 = (model->BSIM3type == NMOS) ? 0.7 : -0.7; if (!model->BSIM3uaGiven) model->BSIM3ua = 2.25e-9; /* unit m/V */ if (!model->BSIM3ua1Given) model->BSIM3ua1 = 4.31e-9; /* unit m/V */ if (!model->BSIM3ubGiven) model->BSIM3ub = 5.87e-19; /* unit (m/V)**2 */ if (!model->BSIM3ub1Given) model->BSIM3ub1 = -7.61e-18; /* unit (m/V)**2 */ if (!model->BSIM3ucGiven) model->BSIM3uc = (model->BSIM3mobMod == 3) ? -0.0465 : -0.0465e-9; if (!model->BSIM3uc1Given) model->BSIM3uc1 = (model->BSIM3mobMod == 3) ? -0.056 : -0.056e-9; if (!model->BSIM3u0Given) model->BSIM3u0 = (model->BSIM3type == NMOS) ? 0.067 : 0.025; if (!model->BSIM3uteGiven) model->BSIM3ute = -1.5; if (!model->BSIM3voffGiven) model->BSIM3voff = -0.08; if (!model->BSIM3deltaGiven) model->BSIM3delta = 0.01; if (!model->BSIM3rdswGiven) model->BSIM3rdsw = 0; if (!model->BSIM3prwgGiven) model->BSIM3prwg = 0.0; /* unit 1/V */ if (!model->BSIM3prwbGiven) model->BSIM3prwb = 0.0; if (!model->BSIM3prtGiven) model->BSIM3prt = 0.0; if (!model->BSIM3eta0Given) model->BSIM3eta0 = 0.08; /* no unit */ if (!model->BSIM3etabGiven) model->BSIM3etab = -0.07; /* unit 1/V */ if (!model->BSIM3pclmGiven) model->BSIM3pclm = 1.3; /* no unit */ if (!model->BSIM3pdibl1Given) model->BSIM3pdibl1 = .39; /* no unit */ if (!model->BSIM3pdibl2Given) model->BSIM3pdibl2 = 0.0086; /* no unit */ if (!model->BSIM3pdiblbGiven) model->BSIM3pdiblb = 0.0; /* 1/V */ if (!model->BSIM3pscbe1Given) model->BSIM3pscbe1 = 4.24e8; if (!model->BSIM3pscbe2Given) model->BSIM3pscbe2 = 1.0e-5; if (!model->BSIM3pvagGiven) model->BSIM3pvag = 0.0; if (!model->BSIM3wrGiven) model->BSIM3wr = 1.0; if (!model->BSIM3dwgGiven) model->BSIM3dwg = 0.0; if (!model->BSIM3dwbGiven) model->BSIM3dwb = 0.0; if (!model->BSIM3b0Given) model->BSIM3b0 = 0.0; if (!model->BSIM3b1Given) model->BSIM3b1 = 0.0; if (!model->BSIM3alpha0Given) model->BSIM3alpha0 = 0.0; if (!model->BSIM3alpha1Given) model->BSIM3alpha1 = 0.0; if (!model->BSIM3beta0Given) model->BSIM3beta0 = 30.0; if (!model->BSIM3ijthGiven) model->BSIM3ijth = 0.1; /* unit A */ if (!model->BSIM3elmGiven) model->BSIM3elm = 5.0; if (!model->BSIM3cgslGiven) model->BSIM3cgsl = 0.0; if (!model->BSIM3cgdlGiven) model->BSIM3cgdl = 0.0; if (!model->BSIM3ckappaGiven) model->BSIM3ckappa = 0.6; if (!model->BSIM3clcGiven) model->BSIM3clc = 0.1e-6; if (!model->BSIM3cleGiven) model->BSIM3cle = 0.6; if (!model->BSIM3vfbcvGiven) model->BSIM3vfbcv = -1.0; if (!model->BSIM3acdeGiven) model->BSIM3acde = 1.0; if (!model->BSIM3moinGiven) model->BSIM3moin = 15.0; if (!model->BSIM3noffGiven) model->BSIM3noff = 1.0; if (!model->BSIM3voffcvGiven) model->BSIM3voffcv = 0.0; if (!model->BSIM3tcjGiven) model->BSIM3tcj = 0.0; if (!model->BSIM3tpbGiven) model->BSIM3tpb = 0.0; if (!model->BSIM3tcjswGiven) model->BSIM3tcjsw = 0.0; if (!model->BSIM3tpbswGiven) model->BSIM3tpbsw = 0.0; if (!model->BSIM3tcjswgGiven) model->BSIM3tcjswg = 0.0; if (!model->BSIM3tpbswgGiven) model->BSIM3tpbswg = 0.0; /* ACM model */ if (!model->BSIM3hdifGiven) model->BSIM3hdif = 0.0; if (!model->BSIM3ldifGiven) model->BSIM3ldif = 0.0; if (!model->BSIM3ldGiven) model->BSIM3ld = 0.0; if (!model->BSIM3rdGiven) model->BSIM3rd = 0.0; if (!model->BSIM3rsGiven) model->BSIM3rs = 0.0; if (!model->BSIM3rdcGiven) model->BSIM3rdc = 0.0; if (!model->BSIM3rscGiven) model->BSIM3rsc = 0.0; if (!model->BSIM3wmltGiven) model->BSIM3wmlt = 1.0; /* Length dependence */ if (!model->BSIM3lcdscGiven) model->BSIM3lcdsc = 0.0; if (!model->BSIM3lcdscbGiven) model->BSIM3lcdscb = 0.0; if (!model->BSIM3lcdscdGiven) model->BSIM3lcdscd = 0.0; if (!model->BSIM3lcitGiven) model->BSIM3lcit = 0.0; if (!model->BSIM3lnfactorGiven) model->BSIM3lnfactor = 0.0; if (!model->BSIM3lxjGiven) model->BSIM3lxj = 0.0; if (!model->BSIM3lvsatGiven) model->BSIM3lvsat = 0.0; if (!model->BSIM3latGiven) model->BSIM3lat = 0.0; if (!model->BSIM3la0Given) model->BSIM3la0 = 0.0; if (!model->BSIM3lagsGiven) model->BSIM3lags = 0.0; if (!model->BSIM3la1Given) model->BSIM3la1 = 0.0; if (!model->BSIM3la2Given) model->BSIM3la2 = 0.0; if (!model->BSIM3lketaGiven) model->BSIM3lketa = 0.0; if (!model->BSIM3lnsubGiven) model->BSIM3lnsub = 0.0; if (!model->BSIM3lnpeakGiven) model->BSIM3lnpeak = 0.0; if (!model->BSIM3lngateGiven) model->BSIM3lngate = 0.0; if (!model->BSIM3lvbmGiven) model->BSIM3lvbm = 0.0; if (!model->BSIM3lxtGiven) model->BSIM3lxt = 0.0; if (!model->BSIM3lkt1Given) model->BSIM3lkt1 = 0.0; if (!model->BSIM3lkt1lGiven) model->BSIM3lkt1l = 0.0; if (!model->BSIM3lkt2Given) model->BSIM3lkt2 = 0.0; if (!model->BSIM3lk3Given) model->BSIM3lk3 = 0.0; if (!model->BSIM3lk3bGiven) model->BSIM3lk3b = 0.0; if (!model->BSIM3lw0Given) model->BSIM3lw0 = 0.0; if (!model->BSIM3lnlxGiven) model->BSIM3lnlx = 0.0; if (!model->BSIM3ldvt0Given) model->BSIM3ldvt0 = 0.0; if (!model->BSIM3ldvt1Given) model->BSIM3ldvt1 = 0.0; if (!model->BSIM3ldvt2Given) model->BSIM3ldvt2 = 0.0; if (!model->BSIM3ldvt0wGiven) model->BSIM3ldvt0w = 0.0; if (!model->BSIM3ldvt1wGiven) model->BSIM3ldvt1w = 0.0; if (!model->BSIM3ldvt2wGiven) model->BSIM3ldvt2w = 0.0; if (!model->BSIM3ldroutGiven) model->BSIM3ldrout = 0.0; if (!model->BSIM3ldsubGiven) model->BSIM3ldsub = 0.0; if (!model->BSIM3lvth0Given) model->BSIM3lvth0 = 0.0; if (!model->BSIM3luaGiven) model->BSIM3lua = 0.0; if (!model->BSIM3lua1Given) model->BSIM3lua1 = 0.0; if (!model->BSIM3lubGiven) model->BSIM3lub = 0.0; if (!model->BSIM3lub1Given) model->BSIM3lub1 = 0.0; if (!model->BSIM3lucGiven) model->BSIM3luc = 0.0; if (!model->BSIM3luc1Given) model->BSIM3luc1 = 0.0; if (!model->BSIM3lu0Given) model->BSIM3lu0 = 0.0; if (!model->BSIM3luteGiven) model->BSIM3lute = 0.0; if (!model->BSIM3lvoffGiven) model->BSIM3lvoff = 0.0; if (!model->BSIM3ldeltaGiven) model->BSIM3ldelta = 0.0; if (!model->BSIM3lrdswGiven) model->BSIM3lrdsw = 0.0; if (!model->BSIM3lprwbGiven) model->BSIM3lprwb = 0.0; if (!model->BSIM3lprwgGiven) model->BSIM3lprwg = 0.0; if (!model->BSIM3lprtGiven) model->BSIM3lprt = 0.0; if (!model->BSIM3leta0Given) model->BSIM3leta0 = 0.0; if (!model->BSIM3letabGiven) model->BSIM3letab = -0.0; if (!model->BSIM3lpclmGiven) model->BSIM3lpclm = 0.0; if (!model->BSIM3lpdibl1Given) model->BSIM3lpdibl1 = 0.0; if (!model->BSIM3lpdibl2Given) model->BSIM3lpdibl2 = 0.0; if (!model->BSIM3lpdiblbGiven) model->BSIM3lpdiblb = 0.0; if (!model->BSIM3lpscbe1Given) model->BSIM3lpscbe1 = 0.0; if (!model->BSIM3lpscbe2Given) model->BSIM3lpscbe2 = 0.0; if (!model->BSIM3lpvagGiven) model->BSIM3lpvag = 0.0; if (!model->BSIM3lwrGiven) model->BSIM3lwr = 0.0; if (!model->BSIM3ldwgGiven) model->BSIM3ldwg = 0.0; if (!model->BSIM3ldwbGiven) model->BSIM3ldwb = 0.0; if (!model->BSIM3lb0Given) model->BSIM3lb0 = 0.0; if (!model->BSIM3lb1Given) model->BSIM3lb1 = 0.0; if (!model->BSIM3lalpha0Given) model->BSIM3lalpha0 = 0.0; if (!model->BSIM3lalpha1Given) model->BSIM3lalpha1 = 0.0; if (!model->BSIM3lbeta0Given) model->BSIM3lbeta0 = 0.0; if (!model->BSIM3lvfbGiven) model->BSIM3lvfb = 0.0; if (!model->BSIM3lelmGiven) model->BSIM3lelm = 0.0; if (!model->BSIM3lcgslGiven) model->BSIM3lcgsl = 0.0; if (!model->BSIM3lcgdlGiven) model->BSIM3lcgdl = 0.0; if (!model->BSIM3lckappaGiven) model->BSIM3lckappa = 0.0; if (!model->BSIM3lclcGiven) model->BSIM3lclc = 0.0; if (!model->BSIM3lcleGiven) model->BSIM3lcle = 0.0; if (!model->BSIM3lcfGiven) model->BSIM3lcf = 0.0; if (!model->BSIM3lvfbcvGiven) model->BSIM3lvfbcv = 0.0; if (!model->BSIM3lacdeGiven) model->BSIM3lacde = 0.0; if (!model->BSIM3lmoinGiven) model->BSIM3lmoin = 0.0; if (!model->BSIM3lnoffGiven) model->BSIM3lnoff = 0.0; if (!model->BSIM3lvoffcvGiven) model->BSIM3lvoffcv = 0.0; /* Width dependence */ if (!model->BSIM3wcdscGiven) model->BSIM3wcdsc = 0.0; if (!model->BSIM3wcdscbGiven) model->BSIM3wcdscb = 0.0; if (!model->BSIM3wcdscdGiven) model->BSIM3wcdscd = 0.0; if (!model->BSIM3wcitGiven) model->BSIM3wcit = 0.0; if (!model->BSIM3wnfactorGiven) model->BSIM3wnfactor = 0.0; if (!model->BSIM3wxjGiven) model->BSIM3wxj = 0.0; if (!model->BSIM3wvsatGiven) model->BSIM3wvsat = 0.0; if (!model->BSIM3watGiven) model->BSIM3wat = 0.0; if (!model->BSIM3wa0Given) model->BSIM3wa0 = 0.0; if (!model->BSIM3wagsGiven) model->BSIM3wags = 0.0; if (!model->BSIM3wa1Given) model->BSIM3wa1 = 0.0; if (!model->BSIM3wa2Given) model->BSIM3wa2 = 0.0; if (!model->BSIM3wketaGiven) model->BSIM3wketa = 0.0; if (!model->BSIM3wnsubGiven) model->BSIM3wnsub = 0.0; if (!model->BSIM3wnpeakGiven) model->BSIM3wnpeak = 0.0; if (!model->BSIM3wngateGiven) model->BSIM3wngate = 0.0; if (!model->BSIM3wvbmGiven) model->BSIM3wvbm = 0.0; if (!model->BSIM3wxtGiven) model->BSIM3wxt = 0.0; if (!model->BSIM3wkt1Given) model->BSIM3wkt1 = 0.0; if (!model->BSIM3wkt1lGiven) model->BSIM3wkt1l = 0.0; if (!model->BSIM3wkt2Given) model->BSIM3wkt2 = 0.0; if (!model->BSIM3wk3Given) model->BSIM3wk3 = 0.0; if (!model->BSIM3wk3bGiven) model->BSIM3wk3b = 0.0; if (!model->BSIM3ww0Given) model->BSIM3ww0 = 0.0; if (!model->BSIM3wnlxGiven) model->BSIM3wnlx = 0.0; if (!model->BSIM3wdvt0Given) model->BSIM3wdvt0 = 0.0; if (!model->BSIM3wdvt1Given) model->BSIM3wdvt1 = 0.0; if (!model->BSIM3wdvt2Given) model->BSIM3wdvt2 = 0.0; if (!model->BSIM3wdvt0wGiven) model->BSIM3wdvt0w = 0.0; if (!model->BSIM3wdvt1wGiven) model->BSIM3wdvt1w = 0.0; if (!model->BSIM3wdvt2wGiven) model->BSIM3wdvt2w = 0.0; if (!model->BSIM3wdroutGiven) model->BSIM3wdrout = 0.0; if (!model->BSIM3wdsubGiven) model->BSIM3wdsub = 0.0; if (!model->BSIM3wvth0Given) model->BSIM3wvth0 = 0.0; if (!model->BSIM3wuaGiven) model->BSIM3wua = 0.0; if (!model->BSIM3wua1Given) model->BSIM3wua1 = 0.0; if (!model->BSIM3wubGiven) model->BSIM3wub = 0.0; if (!model->BSIM3wub1Given) model->BSIM3wub1 = 0.0; if (!model->BSIM3wucGiven) model->BSIM3wuc = 0.0; if (!model->BSIM3wuc1Given) model->BSIM3wuc1 = 0.0; if (!model->BSIM3wu0Given) model->BSIM3wu0 = 0.0; if (!model->BSIM3wuteGiven) model->BSIM3wute = 0.0; if (!model->BSIM3wvoffGiven) model->BSIM3wvoff = 0.0; if (!model->BSIM3wdeltaGiven) model->BSIM3wdelta = 0.0; if (!model->BSIM3wrdswGiven) model->BSIM3wrdsw = 0.0; if (!model->BSIM3wprwbGiven) model->BSIM3wprwb = 0.0; if (!model->BSIM3wprwgGiven) model->BSIM3wprwg = 0.0; if (!model->BSIM3wprtGiven) model->BSIM3wprt = 0.0; if (!model->BSIM3weta0Given) model->BSIM3weta0 = 0.0; if (!model->BSIM3wetabGiven) model->BSIM3wetab = 0.0; if (!model->BSIM3wpclmGiven) model->BSIM3wpclm = 0.0; if (!model->BSIM3wpdibl1Given) model->BSIM3wpdibl1 = 0.0; if (!model->BSIM3wpdibl2Given) model->BSIM3wpdibl2 = 0.0; if (!model->BSIM3wpdiblbGiven) model->BSIM3wpdiblb = 0.0; if (!model->BSIM3wpscbe1Given) model->BSIM3wpscbe1 = 0.0; if (!model->BSIM3wpscbe2Given) model->BSIM3wpscbe2 = 0.0; if (!model->BSIM3wpvagGiven) model->BSIM3wpvag = 0.0; if (!model->BSIM3wwrGiven) model->BSIM3wwr = 0.0; if (!model->BSIM3wdwgGiven) model->BSIM3wdwg = 0.0; if (!model->BSIM3wdwbGiven) model->BSIM3wdwb = 0.0; if (!model->BSIM3wb0Given) model->BSIM3wb0 = 0.0; if (!model->BSIM3wb1Given) model->BSIM3wb1 = 0.0; if (!model->BSIM3walpha0Given) model->BSIM3walpha0 = 0.0; if (!model->BSIM3walpha1Given) model->BSIM3walpha1 = 0.0; if (!model->BSIM3wbeta0Given) model->BSIM3wbeta0 = 0.0; if (!model->BSIM3wvfbGiven) model->BSIM3wvfb = 0.0; if (!model->BSIM3welmGiven) model->BSIM3welm = 0.0; if (!model->BSIM3wcgslGiven) model->BSIM3wcgsl = 0.0; if (!model->BSIM3wcgdlGiven) model->BSIM3wcgdl = 0.0; if (!model->BSIM3wckappaGiven) model->BSIM3wckappa = 0.0; if (!model->BSIM3wcfGiven) model->BSIM3wcf = 0.0; if (!model->BSIM3wclcGiven) model->BSIM3wclc = 0.0; if (!model->BSIM3wcleGiven) model->BSIM3wcle = 0.0; if (!model->BSIM3wvfbcvGiven) model->BSIM3wvfbcv = 0.0; if (!model->BSIM3wacdeGiven) model->BSIM3wacde = 0.0; if (!model->BSIM3wmoinGiven) model->BSIM3wmoin = 0.0; if (!model->BSIM3wnoffGiven) model->BSIM3wnoff = 0.0; if (!model->BSIM3wvoffcvGiven) model->BSIM3wvoffcv = 0.0; /* Cross-term dependence */ if (!model->BSIM3pcdscGiven) model->BSIM3pcdsc = 0.0; if (!model->BSIM3pcdscbGiven) model->BSIM3pcdscb = 0.0; if (!model->BSIM3pcdscdGiven) model->BSIM3pcdscd = 0.0; if (!model->BSIM3pcitGiven) model->BSIM3pcit = 0.0; if (!model->BSIM3pnfactorGiven) model->BSIM3pnfactor = 0.0; if (!model->BSIM3pxjGiven) model->BSIM3pxj = 0.0; if (!model->BSIM3pvsatGiven) model->BSIM3pvsat = 0.0; if (!model->BSIM3patGiven) model->BSIM3pat = 0.0; if (!model->BSIM3pa0Given) model->BSIM3pa0 = 0.0; if (!model->BSIM3pagsGiven) model->BSIM3pags = 0.0; if (!model->BSIM3pa1Given) model->BSIM3pa1 = 0.0; if (!model->BSIM3pa2Given) model->BSIM3pa2 = 0.0; if (!model->BSIM3pketaGiven) model->BSIM3pketa = 0.0; if (!model->BSIM3pnsubGiven) model->BSIM3pnsub = 0.0; if (!model->BSIM3pnpeakGiven) model->BSIM3pnpeak = 0.0; if (!model->BSIM3pngateGiven) model->BSIM3pngate = 0.0; if (!model->BSIM3pvbmGiven) model->BSIM3pvbm = 0.0; if (!model->BSIM3pxtGiven) model->BSIM3pxt = 0.0; if (!model->BSIM3pkt1Given) model->BSIM3pkt1 = 0.0; if (!model->BSIM3pkt1lGiven) model->BSIM3pkt1l = 0.0; if (!model->BSIM3pkt2Given) model->BSIM3pkt2 = 0.0; if (!model->BSIM3pk3Given) model->BSIM3pk3 = 0.0; if (!model->BSIM3pk3bGiven) model->BSIM3pk3b = 0.0; if (!model->BSIM3pw0Given) model->BSIM3pw0 = 0.0; if (!model->BSIM3pnlxGiven) model->BSIM3pnlx = 0.0; if (!model->BSIM3pdvt0Given) model->BSIM3pdvt0 = 0.0; if (!model->BSIM3pdvt1Given) model->BSIM3pdvt1 = 0.0; if (!model->BSIM3pdvt2Given) model->BSIM3pdvt2 = 0.0; if (!model->BSIM3pdvt0wGiven) model->BSIM3pdvt0w = 0.0; if (!model->BSIM3pdvt1wGiven) model->BSIM3pdvt1w = 0.0; if (!model->BSIM3pdvt2wGiven) model->BSIM3pdvt2w = 0.0; if (!model->BSIM3pdroutGiven) model->BSIM3pdrout = 0.0; if (!model->BSIM3pdsubGiven) model->BSIM3pdsub = 0.0; if (!model->BSIM3pvth0Given) model->BSIM3pvth0 = 0.0; if (!model->BSIM3puaGiven) model->BSIM3pua = 0.0; if (!model->BSIM3pua1Given) model->BSIM3pua1 = 0.0; if (!model->BSIM3pubGiven) model->BSIM3pub = 0.0; if (!model->BSIM3pub1Given) model->BSIM3pub1 = 0.0; if (!model->BSIM3pucGiven) model->BSIM3puc = 0.0; if (!model->BSIM3puc1Given) model->BSIM3puc1 = 0.0; if (!model->BSIM3pu0Given) model->BSIM3pu0 = 0.0; if (!model->BSIM3puteGiven) model->BSIM3pute = 0.0; if (!model->BSIM3pvoffGiven) model->BSIM3pvoff = 0.0; if (!model->BSIM3pdeltaGiven) model->BSIM3pdelta = 0.0; if (!model->BSIM3prdswGiven) model->BSIM3prdsw = 0.0; if (!model->BSIM3pprwbGiven) model->BSIM3pprwb = 0.0; if (!model->BSIM3pprwgGiven) model->BSIM3pprwg = 0.0; if (!model->BSIM3pprtGiven) model->BSIM3pprt = 0.0; if (!model->BSIM3peta0Given) model->BSIM3peta0 = 0.0; if (!model->BSIM3petabGiven) model->BSIM3petab = 0.0; if (!model->BSIM3ppclmGiven) model->BSIM3ppclm = 0.0; if (!model->BSIM3ppdibl1Given) model->BSIM3ppdibl1 = 0.0; if (!model->BSIM3ppdibl2Given) model->BSIM3ppdibl2 = 0.0; if (!model->BSIM3ppdiblbGiven) model->BSIM3ppdiblb = 0.0; if (!model->BSIM3ppscbe1Given) model->BSIM3ppscbe1 = 0.0; if (!model->BSIM3ppscbe2Given) model->BSIM3ppscbe2 = 0.0; if (!model->BSIM3ppvagGiven) model->BSIM3ppvag = 0.0; if (!model->BSIM3pwrGiven) model->BSIM3pwr = 0.0; if (!model->BSIM3pdwgGiven) model->BSIM3pdwg = 0.0; if (!model->BSIM3pdwbGiven) model->BSIM3pdwb = 0.0; if (!model->BSIM3pb0Given) model->BSIM3pb0 = 0.0; if (!model->BSIM3pb1Given) model->BSIM3pb1 = 0.0; if (!model->BSIM3palpha0Given) model->BSIM3palpha0 = 0.0; if (!model->BSIM3palpha1Given) model->BSIM3palpha1 = 0.0; if (!model->BSIM3pbeta0Given) model->BSIM3pbeta0 = 0.0; if (!model->BSIM3pvfbGiven) model->BSIM3pvfb = 0.0; if (!model->BSIM3pelmGiven) model->BSIM3pelm = 0.0; if (!model->BSIM3pcgslGiven) model->BSIM3pcgsl = 0.0; if (!model->BSIM3pcgdlGiven) model->BSIM3pcgdl = 0.0; if (!model->BSIM3pckappaGiven) model->BSIM3pckappa = 0.0; if (!model->BSIM3pcfGiven) model->BSIM3pcf = 0.0; if (!model->BSIM3pclcGiven) model->BSIM3pclc = 0.0; if (!model->BSIM3pcleGiven) model->BSIM3pcle = 0.0; if (!model->BSIM3pvfbcvGiven) model->BSIM3pvfbcv = 0.0; if (!model->BSIM3pacdeGiven) model->BSIM3pacde = 0.0; if (!model->BSIM3pmoinGiven) model->BSIM3pmoin = 0.0; if (!model->BSIM3pnoffGiven) model->BSIM3pnoff = 0.0; if (!model->BSIM3pvoffcvGiven) model->BSIM3pvoffcv = 0.0; /* unit degree celcius */ if (!model->BSIM3tnomGiven) model->BSIM3tnom = ckt->CKTnomTemp; /* else model->BSIM3tnom = model->BSIM3tnom + 273.15; we make this transform in b3mpar.c in the first run */ if (!model->BSIM3lintnoiGiven) model->BSIM3lintnoi = 0.0; /* unit m */ if (!model->BSIM3LintGiven) model->BSIM3Lint = 0.0; if (!model->BSIM3LlGiven) model->BSIM3Ll = 0.0; if (!model->BSIM3LlcGiven) model->BSIM3Llc = model->BSIM3Ll; if (!model->BSIM3LlnGiven) model->BSIM3Lln = 1.0; if (!model->BSIM3LwGiven) model->BSIM3Lw = 0.0; if (!model->BSIM3LwcGiven) model->BSIM3Lwc = model->BSIM3Lw; if (!model->BSIM3LwnGiven) model->BSIM3Lwn = 1.0; if (!model->BSIM3LwlGiven) model->BSIM3Lwl = 0.0; if (!model->BSIM3LwlcGiven) model->BSIM3Lwlc = model->BSIM3Lwl; if (!model->BSIM3LminGiven) model->BSIM3Lmin = 0.0; if (!model->BSIM3LmaxGiven) model->BSIM3Lmax = 1.0; if (!model->BSIM3WintGiven) model->BSIM3Wint = 0.0; if (!model->BSIM3WlGiven) model->BSIM3Wl = 0.0; if (!model->BSIM3WlcGiven) model->BSIM3Wlc = model->BSIM3Wl; if (!model->BSIM3WlnGiven) model->BSIM3Wln = 1.0; if (!model->BSIM3WwGiven) model->BSIM3Ww = 0.0; if (!model->BSIM3WwcGiven) model->BSIM3Wwc = model->BSIM3Ww; if (!model->BSIM3WwnGiven) model->BSIM3Wwn = 1.0; if (!model->BSIM3WwlGiven) model->BSIM3Wwl = 0.0; if (!model->BSIM3WwlcGiven) model->BSIM3Wwlc = model->BSIM3Wwl; if (!model->BSIM3WminGiven) model->BSIM3Wmin = 0.0; if (!model->BSIM3WmaxGiven) model->BSIM3Wmax = 1.0; if (!model->BSIM3dwcGiven) model->BSIM3dwc = model->BSIM3Wint; if (!model->BSIM3dlcGiven) model->BSIM3dlc = model->BSIM3Lint; if (!model->BSIM3xlGiven) model->BSIM3xl = 0.0; if (!model->BSIM3xwGiven) model->BSIM3xw = 0.0; if (!model->BSIM3cfGiven) model->BSIM3cf = 2.0 * EPSOX / PI * log(1.0 + 0.4e-6 / model->BSIM3tox); if (!model->BSIM3cgdoGiven) { if (model->BSIM3dlcGiven && (model->BSIM3dlc > 0.0)) { model->BSIM3cgdo = model->BSIM3dlc * model->BSIM3cox - model->BSIM3cgdl ; } else model->BSIM3cgdo = 0.6 * model->BSIM3xj * model->BSIM3cox; } if (!model->BSIM3cgsoGiven) { if (model->BSIM3dlcGiven && (model->BSIM3dlc > 0.0)) { model->BSIM3cgso = model->BSIM3dlc * model->BSIM3cox - model->BSIM3cgsl ; } else model->BSIM3cgso = 0.6 * model->BSIM3xj * model->BSIM3cox; } if (!model->BSIM3cgboGiven) { model->BSIM3cgbo = 2.0 * model->BSIM3dwc * model->BSIM3cox; } if (!model->BSIM3xpartGiven) model->BSIM3xpart = 0.0; if (!model->BSIM3sheetResistanceGiven) model->BSIM3sheetResistance = 0.0; if (!model->BSIM3unitAreaJctCapGiven) model->BSIM3unitAreaJctCap = 5.0E-4; if (!model->BSIM3unitLengthSidewallJctCapGiven) model->BSIM3unitLengthSidewallJctCap = 5.0E-10; if (!model->BSIM3unitLengthGateSidewallJctCapGiven) model->BSIM3unitLengthGateSidewallJctCap = model->BSIM3unitLengthSidewallJctCap ; if (!model->BSIM3jctSatCurDensityGiven) model->BSIM3jctSatCurDensity = 1.0E-4; if (!model->BSIM3jctSidewallSatCurDensityGiven) model->BSIM3jctSidewallSatCurDensity = 0.0; if (!model->BSIM3bulkJctPotentialGiven) model->BSIM3bulkJctPotential = 1.0; if (!model->BSIM3sidewallJctPotentialGiven) model->BSIM3sidewallJctPotential = 1.0; if (!model->BSIM3GatesidewallJctPotentialGiven) model->BSIM3GatesidewallJctPotential = model->BSIM3sidewallJctPotential; if (!model->BSIM3bulkJctBotGradingCoeffGiven) model->BSIM3bulkJctBotGradingCoeff = 0.5; if (!model->BSIM3bulkJctSideGradingCoeffGiven) model->BSIM3bulkJctSideGradingCoeff = 0.33; if (!model->BSIM3bulkJctGateSideGradingCoeffGiven) model->BSIM3bulkJctGateSideGradingCoeff = model->BSIM3bulkJctSideGradingCoeff; if (!model->BSIM3jctEmissionCoeffGiven) model->BSIM3jctEmissionCoeff = 1.0; if (!model->BSIM3jctTempExponentGiven) model->BSIM3jctTempExponent = 3.0; if (!model->BSIM3oxideTrapDensityAGiven) { if (model->BSIM3type == NMOS) model->BSIM3oxideTrapDensityA = 1e20; else model->BSIM3oxideTrapDensityA=9.9e18; } if (!model->BSIM3oxideTrapDensityBGiven) { if (model->BSIM3type == NMOS) model->BSIM3oxideTrapDensityB = 5e4; else model->BSIM3oxideTrapDensityB = 2.4e3; } if (!model->BSIM3oxideTrapDensityCGiven) { if (model->BSIM3type == NMOS) model->BSIM3oxideTrapDensityC = -1.4e-12; else model->BSIM3oxideTrapDensityC = 1.4e-12; } if (!model->BSIM3emGiven) model->BSIM3em = 4.1e7; /* V/m */ if (!model->BSIM3efGiven) model->BSIM3ef = 1.0; if (!model->BSIM3afGiven) model->BSIM3af = 1.0; if (!model->BSIM3kfGiven) model->BSIM3kf = 0.0; if (!model->BSIM3vgsMaxGiven) model->BSIM3vgsMax = 1e99; if (!model->BSIM3vgdMaxGiven) model->BSIM3vgdMax = 1e99; if (!model->BSIM3vgbMaxGiven) model->BSIM3vgbMax = 1e99; if (!model->BSIM3vdsMaxGiven) model->BSIM3vdsMax = 1e99; if (!model->BSIM3vbsMaxGiven) model->BSIM3vbsMax = 1e99; if (!model->BSIM3vbdMaxGiven) model->BSIM3vbdMax = 1e99; if (!model->BSIM3vgsrMaxGiven) model->BSIM3vgsrMax = 1e99; if (!model->BSIM3vgdrMaxGiven) model->BSIM3vgdrMax = 1e99; if (!model->BSIM3vgbrMaxGiven) model->BSIM3vgbrMax = 1e99; if (!model->BSIM3vbsrMaxGiven) model->BSIM3vbsrMax = 1e99; if (!model->BSIM3vbdrMaxGiven) model->BSIM3vbdrMax = 1e99; /* loop through all the instances of the model */ for (here = BSIM3instances(model); here != NULL ; here=BSIM3nextInstance(here)) { /* allocate a chunk of the state vector */ here->BSIM3states = *states; *states += BSIM3numStates; /* perform the parameter defaulting */ if (!here->BSIM3drainAreaGiven) here->BSIM3drainArea = 0.0; if (!here->BSIM3drainPerimeterGiven) here->BSIM3drainPerimeter = 0.0; if (!here->BSIM3drainSquaresGiven) { if (model->BSIM3acmMod == 0) here->BSIM3drainSquares = 1.0; else here->BSIM3drainSquares = 0.0; } if (!here->BSIM3delvtoGiven) here->BSIM3delvto = 0.0; if (!here->BSIM3mulu0Given) here->BSIM3mulu0 = 1.0; if (!here->BSIM3icVBSGiven) here->BSIM3icVBS = 0.0; if (!here->BSIM3icVDSGiven) here->BSIM3icVDS = 0.0; if (!here->BSIM3icVGSGiven) here->BSIM3icVGS = 0.0; if (!here->BSIM3lGiven) here->BSIM3l = 5.0e-6; if (!here->BSIM3sourceAreaGiven) here->BSIM3sourceArea = 0.0; if (!here->BSIM3sourcePerimeterGiven) here->BSIM3sourcePerimeter = 0.0; if (!here->BSIM3sourceSquaresGiven) { if (model->BSIM3acmMod == 0) here->BSIM3sourceSquares = 1.0; else here->BSIM3sourceSquares = 0.0; } if (!here->BSIM3wGiven) here->BSIM3w = 5.0e-6; if (!here->BSIM3nqsModGiven) here->BSIM3nqsMod = model->BSIM3nqsMod; else if ((here->BSIM3nqsMod != 0) && (here->BSIM3nqsMod != 1)) { here->BSIM3nqsMod = model->BSIM3nqsMod; printf("Warning: nqsMod has been set to its global value %d.\n", model->BSIM3nqsMod); } if (!here->BSIM3acnqsModGiven) here->BSIM3acnqsMod = model->BSIM3acnqsMod; else if ((here->BSIM3acnqsMod != 0) && (here->BSIM3acnqsMod != 1)) { here->BSIM3acnqsMod = model->BSIM3acnqsMod; printf("Warning: acnqsMod has been set to its global value %d.\n", model->BSIM3acnqsMod); } if (!here->BSIM3geoGiven) here->BSIM3geo = 0; if (!here->BSIM3mGiven) here->BSIM3m = 1; /* process source/drain series resistance */ /* ACM model */ double drainResistance, sourceResistance; if (model->BSIM3acmMod == 0) { drainResistance = model->BSIM3sheetResistance * here->BSIM3drainSquares; sourceResistance = model->BSIM3sheetResistance * here->BSIM3sourceSquares; } else /* ACM > 0 */ { error = ACM_SourceDrainResistances( model->BSIM3acmMod, model->BSIM3ld, model->BSIM3ldif, model->BSIM3hdif, model->BSIM3wmlt, here->BSIM3w, model->BSIM3xw, model->BSIM3sheetResistance, here->BSIM3drainSquaresGiven, model->BSIM3rd, model->BSIM3rdc, here->BSIM3drainSquares, here->BSIM3sourceSquaresGiven, model->BSIM3rs, model->BSIM3rsc, here->BSIM3sourceSquares, &drainResistance, &sourceResistance ); if (error) return(error); } /* process drain series resistance */ if (drainResistance != 0.0) { if(here->BSIM3dNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM3name,"drain"); if(error) return(error); here->BSIM3dNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->BSIM3dNodePrime = here->BSIM3dNode; } /* process source series resistance */ if (sourceResistance != 0.0) { if(here->BSIM3sNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM3name,"source"); if(error) return(error); here->BSIM3sNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->BSIM3sNodePrime = here->BSIM3sNode; } /* internal charge node */ if (here->BSIM3nqsMod) { if (here->BSIM3qNode == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM3name,"charge"); if(error) return(error); here->BSIM3qNode = tmp->number; } } else { here->BSIM3qNode = 0; } /* set Sparse Matrix Pointers */ /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(BSIM3DdPtr, BSIM3dNode, BSIM3dNode); TSTALLOC(BSIM3GgPtr, BSIM3gNode, BSIM3gNode); TSTALLOC(BSIM3SsPtr, BSIM3sNode, BSIM3sNode); TSTALLOC(BSIM3BbPtr, BSIM3bNode, BSIM3bNode); TSTALLOC(BSIM3DPdpPtr, BSIM3dNodePrime, BSIM3dNodePrime); TSTALLOC(BSIM3SPspPtr, BSIM3sNodePrime, BSIM3sNodePrime); TSTALLOC(BSIM3DdpPtr, BSIM3dNode, BSIM3dNodePrime); TSTALLOC(BSIM3GbPtr, BSIM3gNode, BSIM3bNode); TSTALLOC(BSIM3GdpPtr, BSIM3gNode, BSIM3dNodePrime); TSTALLOC(BSIM3GspPtr, BSIM3gNode, BSIM3sNodePrime); TSTALLOC(BSIM3SspPtr, BSIM3sNode, BSIM3sNodePrime); TSTALLOC(BSIM3BdpPtr, BSIM3bNode, BSIM3dNodePrime); TSTALLOC(BSIM3BspPtr, BSIM3bNode, BSIM3sNodePrime); TSTALLOC(BSIM3DPspPtr, BSIM3dNodePrime, BSIM3sNodePrime); TSTALLOC(BSIM3DPdPtr, BSIM3dNodePrime, BSIM3dNode); TSTALLOC(BSIM3BgPtr, BSIM3bNode, BSIM3gNode); TSTALLOC(BSIM3DPgPtr, BSIM3dNodePrime, BSIM3gNode); TSTALLOC(BSIM3SPgPtr, BSIM3sNodePrime, BSIM3gNode); TSTALLOC(BSIM3SPsPtr, BSIM3sNodePrime, BSIM3sNode); TSTALLOC(BSIM3DPbPtr, BSIM3dNodePrime, BSIM3bNode); TSTALLOC(BSIM3SPbPtr, BSIM3sNodePrime, BSIM3bNode); TSTALLOC(BSIM3SPdpPtr, BSIM3sNodePrime, BSIM3dNodePrime); TSTALLOC(BSIM3QqPtr, BSIM3qNode, BSIM3qNode); TSTALLOC(BSIM3QdpPtr, BSIM3qNode, BSIM3dNodePrime); TSTALLOC(BSIM3QspPtr, BSIM3qNode, BSIM3sNodePrime); TSTALLOC(BSIM3QgPtr, BSIM3qNode, BSIM3gNode); TSTALLOC(BSIM3QbPtr, BSIM3qNode, BSIM3bNode); TSTALLOC(BSIM3DPqPtr, BSIM3dNodePrime, BSIM3qNode); TSTALLOC(BSIM3SPqPtr, BSIM3sNodePrime, BSIM3qNode); TSTALLOC(BSIM3GqPtr, BSIM3gNode, BSIM3qNode); TSTALLOC(BSIM3BqPtr, BSIM3bNode, BSIM3qNode); } } #ifdef USE_OMP InstCount = 0; model = (BSIM3model*)inModel; /* loop through all the BSIM3 device models to count the number of instances */ for( ; model != NULL; model = BSIM3nextModel(model)) { /* loop through all the instances of the model */ for (here = BSIM3instances(model); here != NULL ; here=BSIM3nextInstance(here)) { InstCount++; } model->BSIM3InstCount = 0; model->BSIM3InstanceArray = NULL; } InstArray = TMALLOC(BSIM3instance*, InstCount); model = (BSIM3model*)inModel; /* store this in the first model only */ model->BSIM3InstCount = InstCount; model->BSIM3InstanceArray = InstArray; idx = 0; for( ; model != NULL; model = BSIM3nextModel(model)) { /* loop through all the instances of the model */ for (here = BSIM3instances(model); here != NULL ; here=BSIM3nextInstance(here)) { InstArray[idx] = here; idx++; } } #endif return(OK); } int BSIM3unsetup( GENmodel *inModel, CKTcircuit *ckt) { BSIM3model *model; BSIM3instance *here; #ifdef USE_OMP model = (BSIM3model*)inModel; tfree(model->BSIM3InstanceArray); #endif for (model = (BSIM3model *)inModel; model != NULL; model = BSIM3nextModel(model)) { for (here = BSIM3instances(model); here != NULL; here=BSIM3nextInstance(here)) { if (here->BSIM3qNode > 0) CKTdltNNum(ckt, here->BSIM3qNode); here->BSIM3qNode = 0; if (here->BSIM3sNodePrime > 0 && here->BSIM3sNodePrime != here->BSIM3sNode) CKTdltNNum(ckt, here->BSIM3sNodePrime); here->BSIM3sNodePrime = 0; if (here->BSIM3dNodePrime > 0 && here->BSIM3dNodePrime != here->BSIM3dNode) CKTdltNNum(ckt, here->BSIM3dNodePrime); here->BSIM3dNodePrime = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim3/b3temp.c0000644000175000017500000013211613546075722021542 0ustar carstencarsten/**** BSIM3v3.3.0, Released by Xuemei Xi 07/29/2005 ****/ /********** * Copyright 2004 Regents of the University of California. All rights reserved. * File: b3temp.c of BSIM3v3.3.0 * Author: 1995 Min-Chie Jeng and Mansun Chan. * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi **********/ /* Lmin, Lmax, Wmin, Wmax */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "bsim3def.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" #define Kb 1.3806226e-23 #define KboQ 8.617087e-5 /* Kb / q where q = 1.60219e-19 */ #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define PI 3.141592654 #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define Charge_q 1.60219e-19 /* ARGSUSED */ int BSIM3temp( GENmodel *inModel, CKTcircuit *ckt) { BSIM3model *model = (BSIM3model*) inModel; BSIM3instance *here; struct bsim3SizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam=NULL; double tmp, tmp1, tmp2, tmp3, Eg, Eg0, ni, T0, T1, T2, T3, T4, T5, Ldrn, Wdrn; double delTemp, Temp, TRatio, Inv_L, Inv_W, Inv_LW, Vtm0, Tnom; double Nvtm, SourceSatCurrent, DrainSatCurrent; int Size_Not_Found, error; /* loop through all the BSIM3 device models */ for (; model != NULL; model = BSIM3nextModel(model)) { Temp = ckt->CKTtemp; if (model->BSIM3bulkJctPotential < 0.1) { model->BSIM3bulkJctPotential = 0.1; fprintf(stderr, "Given pb is less than 0.1. Pb is set to 0.1.\n"); } if (model->BSIM3sidewallJctPotential < 0.1) { model->BSIM3sidewallJctPotential = 0.1; fprintf(stderr, "Given pbsw is less than 0.1. Pbsw is set to 0.1.\n"); } if (model->BSIM3GatesidewallJctPotential < 0.1) { model->BSIM3GatesidewallJctPotential = 0.1; fprintf(stderr, "Given pbswg is less than 0.1. Pbswg is set to 0.1.\n"); } struct bsim3SizeDependParam *p = model->pSizeDependParamKnot; while (p) { struct bsim3SizeDependParam *next_p = p->pNext; FREE(p); p = next_p; } model->pSizeDependParamKnot = NULL; pLastKnot = NULL; Tnom = model->BSIM3tnom; TRatio = Temp / Tnom; model->BSIM3vcrit = CONSTvt0 * log(CONSTvt0 / (CONSTroot2 * 1.0e-14)); model->BSIM3factor1 = sqrt(EPSSI / EPSOX * model->BSIM3tox); Vtm0 = KboQ * Tnom; Eg0 = 1.16 - 7.02e-4 * Tnom * Tnom / (Tnom + 1108.0); ni = 1.45e10 * (Tnom / 300.15) * sqrt(Tnom / 300.15) * exp(21.5565981 - Eg0 / (2.0 * Vtm0)); model->BSIM3vtm = KboQ * Temp; Eg = 1.16 - 7.02e-4 * Temp * Temp / (Temp + 1108.0); if (Temp != Tnom) { T0 = Eg0 / Vtm0 - Eg / model->BSIM3vtm + model->BSIM3jctTempExponent * log(Temp / Tnom); T1 = exp(T0 / model->BSIM3jctEmissionCoeff); model->BSIM3jctTempSatCurDensity = model->BSIM3jctSatCurDensity * T1; model->BSIM3jctSidewallTempSatCurDensity = model->BSIM3jctSidewallSatCurDensity * T1; } else { model->BSIM3jctTempSatCurDensity = model->BSIM3jctSatCurDensity; model->BSIM3jctSidewallTempSatCurDensity = model->BSIM3jctSidewallSatCurDensity; } if (model->BSIM3jctTempSatCurDensity < 0.0) model->BSIM3jctTempSatCurDensity = 0.0; if (model->BSIM3jctSidewallTempSatCurDensity < 0.0) model->BSIM3jctSidewallTempSatCurDensity = 0.0; /* Temperature dependence of D/B and S/B diode capacitance begins */ delTemp = ckt->CKTtemp - model->BSIM3tnom; T0 = model->BSIM3tcj * delTemp; if (T0 >= -1.0) { model->BSIM3unitAreaTempJctCap = model->BSIM3unitAreaJctCap * (1.0 + T0); } else if (model->BSIM3unitAreaJctCap > 0.0) { model->BSIM3unitAreaTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cj to be negative. Cj is clamped to zero.\n"); } T0 = model->BSIM3tcjsw * delTemp; if (T0 >= -1.0) { model->BSIM3unitLengthSidewallTempJctCap = model->BSIM3unitLengthSidewallJctCap * (1.0 + T0); } else if (model->BSIM3unitLengthSidewallJctCap > 0.0) { model->BSIM3unitLengthSidewallTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjsw to be negative. Cjsw is clamped to zero.\n"); } T0 = model->BSIM3tcjswg * delTemp; if (T0 >= -1.0) { model->BSIM3unitLengthGateSidewallTempJctCap = model->BSIM3unitLengthGateSidewallJctCap * (1.0 + T0); } else if (model->BSIM3unitLengthGateSidewallJctCap > 0.0) { model->BSIM3unitLengthGateSidewallTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjswg to be negative. Cjswg is clamped to zero.\n"); } model->BSIM3PhiB = model->BSIM3bulkJctPotential - model->BSIM3tpb * delTemp; if (model->BSIM3PhiB < 0.01) { model->BSIM3PhiB = 0.01; fprintf(stderr, "Temperature effect has caused pb to be less than 0.01. Pb is clamped to 0.01.\n"); } model->BSIM3PhiBSW = model->BSIM3sidewallJctPotential - model->BSIM3tpbsw * delTemp; if (model->BSIM3PhiBSW <= 0.01) { model->BSIM3PhiBSW = 0.01; fprintf(stderr, "Temperature effect has caused pbsw to be less than 0.01. Pbsw is clamped to 0.01.\n"); } model->BSIM3PhiBSWG = model->BSIM3GatesidewallJctPotential - model->BSIM3tpbswg * delTemp; if (model->BSIM3PhiBSWG <= 0.01) { model->BSIM3PhiBSWG = 0.01; fprintf(stderr, "Temperature effect has caused pbswg to be less than 0.01. Pbswg is clamped to 0.01.\n"); } /* End of junction capacitance */ /* loop through all the instances of the model */ /* MCJ: Length and Width not initialized */ for (here = BSIM3instances(model); here != NULL; here = BSIM3nextInstance(here)) { pSizeDependParamKnot = model->pSizeDependParamKnot; Size_Not_Found = 1; while ((pSizeDependParamKnot != NULL) && Size_Not_Found) { if ((here->BSIM3l == pSizeDependParamKnot->Length) && (here->BSIM3w == pSizeDependParamKnot->Width)) { Size_Not_Found = 0; here->pParam = pSizeDependParamKnot; pParam = here->pParam; /*bug-fix */ } else { pLastKnot = pSizeDependParamKnot; pSizeDependParamKnot = pSizeDependParamKnot->pNext; } } if (Size_Not_Found) { pParam = TMALLOC(struct bsim3SizeDependParam, 1); if (pLastKnot == NULL) model->pSizeDependParamKnot = pParam; else pLastKnot->pNext = pParam; pParam->pNext = NULL; here->pParam = pParam; Ldrn = here->BSIM3l; Wdrn = here->BSIM3w; pParam->Length = Ldrn; pParam->Width = Wdrn; T0 = pow(Ldrn, model->BSIM3Lln); T1 = pow(Wdrn, model->BSIM3Lwn); tmp1 = model->BSIM3Ll / T0 + model->BSIM3Lw / T1 + model->BSIM3Lwl / (T0 * T1); pParam->BSIM3dl = model->BSIM3Lint + tmp1; tmp2 = model->BSIM3Llc / T0 + model->BSIM3Lwc / T1 + model->BSIM3Lwlc / (T0 * T1); pParam->BSIM3dlc = model->BSIM3dlc + tmp2; T2 = pow(Ldrn, model->BSIM3Wln); T3 = pow(Wdrn, model->BSIM3Wwn); tmp1 = model->BSIM3Wl / T2 + model->BSIM3Ww / T3 + model->BSIM3Wwl / (T2 * T3); pParam->BSIM3dw = model->BSIM3Wint + tmp1; tmp2 = model->BSIM3Wlc / T2 + model->BSIM3Wwc / T3 + model->BSIM3Wwlc / (T2 * T3); pParam->BSIM3dwc = model->BSIM3dwc + tmp2; pParam->BSIM3leff = here->BSIM3l + model->BSIM3xl - 2.0 * pParam->BSIM3dl; if (pParam->BSIM3leff <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM3: mosfet %s, model %s: Effective channel length <= 0", model->BSIM3modName, here->BSIM3name); return(E_BADPARM); } pParam->BSIM3weff = here->BSIM3w + model->BSIM3xw - 2.0 * pParam->BSIM3dw; if (pParam->BSIM3weff <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM3: mosfet %s, model %s: Effective channel width <= 0", model->BSIM3modName, here->BSIM3name); return(E_BADPARM); } pParam->BSIM3leffCV = here->BSIM3l + model->BSIM3xl - 2.0 * pParam->BSIM3dlc; if (pParam->BSIM3leffCV <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM3: mosfet %s, model %s: Effective channel length for C-V <= 0", model->BSIM3modName, here->BSIM3name); return(E_BADPARM); } pParam->BSIM3weffCV = here->BSIM3w + model->BSIM3xw - 2.0 * pParam->BSIM3dwc; if (pParam->BSIM3weffCV <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM3: mosfet %s, model %s: Effective channel width for C-V <= 0", model->BSIM3modName, here->BSIM3name); return(E_BADPARM); } if (model->BSIM3binUnit == 1) { Inv_L = 1.0e-6 / pParam->BSIM3leff; Inv_W = 1.0e-6 / pParam->BSIM3weff; Inv_LW = 1.0e-12 / (pParam->BSIM3leff * pParam->BSIM3weff); } else { Inv_L = 1.0 / pParam->BSIM3leff; Inv_W = 1.0 / pParam->BSIM3weff; Inv_LW = 1.0 / (pParam->BSIM3leff * pParam->BSIM3weff); } pParam->BSIM3cdsc = model->BSIM3cdsc + model->BSIM3lcdsc * Inv_L + model->BSIM3wcdsc * Inv_W + model->BSIM3pcdsc * Inv_LW; pParam->BSIM3cdscb = model->BSIM3cdscb + model->BSIM3lcdscb * Inv_L + model->BSIM3wcdscb * Inv_W + model->BSIM3pcdscb * Inv_LW; pParam->BSIM3cdscd = model->BSIM3cdscd + model->BSIM3lcdscd * Inv_L + model->BSIM3wcdscd * Inv_W + model->BSIM3pcdscd * Inv_LW; pParam->BSIM3cit = model->BSIM3cit + model->BSIM3lcit * Inv_L + model->BSIM3wcit * Inv_W + model->BSIM3pcit * Inv_LW; pParam->BSIM3nfactor = model->BSIM3nfactor + model->BSIM3lnfactor * Inv_L + model->BSIM3wnfactor * Inv_W + model->BSIM3pnfactor * Inv_LW; pParam->BSIM3xj = model->BSIM3xj + model->BSIM3lxj * Inv_L + model->BSIM3wxj * Inv_W + model->BSIM3pxj * Inv_LW; pParam->BSIM3vsat = model->BSIM3vsat + model->BSIM3lvsat * Inv_L + model->BSIM3wvsat * Inv_W + model->BSIM3pvsat * Inv_LW; pParam->BSIM3at = model->BSIM3at + model->BSIM3lat * Inv_L + model->BSIM3wat * Inv_W + model->BSIM3pat * Inv_LW; pParam->BSIM3a0 = model->BSIM3a0 + model->BSIM3la0 * Inv_L + model->BSIM3wa0 * Inv_W + model->BSIM3pa0 * Inv_LW; pParam->BSIM3ags = model->BSIM3ags + model->BSIM3lags * Inv_L + model->BSIM3wags * Inv_W + model->BSIM3pags * Inv_LW; pParam->BSIM3a1 = model->BSIM3a1 + model->BSIM3la1 * Inv_L + model->BSIM3wa1 * Inv_W + model->BSIM3pa1 * Inv_LW; pParam->BSIM3a2 = model->BSIM3a2 + model->BSIM3la2 * Inv_L + model->BSIM3wa2 * Inv_W + model->BSIM3pa2 * Inv_LW; pParam->BSIM3keta = model->BSIM3keta + model->BSIM3lketa * Inv_L + model->BSIM3wketa * Inv_W + model->BSIM3pketa * Inv_LW; pParam->BSIM3nsub = model->BSIM3nsub + model->BSIM3lnsub * Inv_L + model->BSIM3wnsub * Inv_W + model->BSIM3pnsub * Inv_LW; pParam->BSIM3npeak = model->BSIM3npeak + model->BSIM3lnpeak * Inv_L + model->BSIM3wnpeak * Inv_W + model->BSIM3pnpeak * Inv_LW; pParam->BSIM3ngate = model->BSIM3ngate + model->BSIM3lngate * Inv_L + model->BSIM3wngate * Inv_W + model->BSIM3pngate * Inv_LW; pParam->BSIM3gamma1 = model->BSIM3gamma1 + model->BSIM3lgamma1 * Inv_L + model->BSIM3wgamma1 * Inv_W + model->BSIM3pgamma1 * Inv_LW; pParam->BSIM3gamma2 = model->BSIM3gamma2 + model->BSIM3lgamma2 * Inv_L + model->BSIM3wgamma2 * Inv_W + model->BSIM3pgamma2 * Inv_LW; pParam->BSIM3vbx = model->BSIM3vbx + model->BSIM3lvbx * Inv_L + model->BSIM3wvbx * Inv_W + model->BSIM3pvbx * Inv_LW; pParam->BSIM3vbm = model->BSIM3vbm + model->BSIM3lvbm * Inv_L + model->BSIM3wvbm * Inv_W + model->BSIM3pvbm * Inv_LW; pParam->BSIM3xt = model->BSIM3xt + model->BSIM3lxt * Inv_L + model->BSIM3wxt * Inv_W + model->BSIM3pxt * Inv_LW; pParam->BSIM3vfb = model->BSIM3vfb + model->BSIM3lvfb * Inv_L + model->BSIM3wvfb * Inv_W + model->BSIM3pvfb * Inv_LW; pParam->BSIM3k1 = model->BSIM3k1 + model->BSIM3lk1 * Inv_L + model->BSIM3wk1 * Inv_W + model->BSIM3pk1 * Inv_LW; pParam->BSIM3kt1 = model->BSIM3kt1 + model->BSIM3lkt1 * Inv_L + model->BSIM3wkt1 * Inv_W + model->BSIM3pkt1 * Inv_LW; pParam->BSIM3kt1l = model->BSIM3kt1l + model->BSIM3lkt1l * Inv_L + model->BSIM3wkt1l * Inv_W + model->BSIM3pkt1l * Inv_LW; pParam->BSIM3k2 = model->BSIM3k2 + model->BSIM3lk2 * Inv_L + model->BSIM3wk2 * Inv_W + model->BSIM3pk2 * Inv_LW; pParam->BSIM3kt2 = model->BSIM3kt2 + model->BSIM3lkt2 * Inv_L + model->BSIM3wkt2 * Inv_W + model->BSIM3pkt2 * Inv_LW; pParam->BSIM3k3 = model->BSIM3k3 + model->BSIM3lk3 * Inv_L + model->BSIM3wk3 * Inv_W + model->BSIM3pk3 * Inv_LW; pParam->BSIM3k3b = model->BSIM3k3b + model->BSIM3lk3b * Inv_L + model->BSIM3wk3b * Inv_W + model->BSIM3pk3b * Inv_LW; pParam->BSIM3w0 = model->BSIM3w0 + model->BSIM3lw0 * Inv_L + model->BSIM3ww0 * Inv_W + model->BSIM3pw0 * Inv_LW; pParam->BSIM3nlx = model->BSIM3nlx + model->BSIM3lnlx * Inv_L + model->BSIM3wnlx * Inv_W + model->BSIM3pnlx * Inv_LW; pParam->BSIM3dvt0 = model->BSIM3dvt0 + model->BSIM3ldvt0 * Inv_L + model->BSIM3wdvt0 * Inv_W + model->BSIM3pdvt0 * Inv_LW; pParam->BSIM3dvt1 = model->BSIM3dvt1 + model->BSIM3ldvt1 * Inv_L + model->BSIM3wdvt1 * Inv_W + model->BSIM3pdvt1 * Inv_LW; pParam->BSIM3dvt2 = model->BSIM3dvt2 + model->BSIM3ldvt2 * Inv_L + model->BSIM3wdvt2 * Inv_W + model->BSIM3pdvt2 * Inv_LW; pParam->BSIM3dvt0w = model->BSIM3dvt0w + model->BSIM3ldvt0w * Inv_L + model->BSIM3wdvt0w * Inv_W + model->BSIM3pdvt0w * Inv_LW; pParam->BSIM3dvt1w = model->BSIM3dvt1w + model->BSIM3ldvt1w * Inv_L + model->BSIM3wdvt1w * Inv_W + model->BSIM3pdvt1w * Inv_LW; pParam->BSIM3dvt2w = model->BSIM3dvt2w + model->BSIM3ldvt2w * Inv_L + model->BSIM3wdvt2w * Inv_W + model->BSIM3pdvt2w * Inv_LW; pParam->BSIM3drout = model->BSIM3drout + model->BSIM3ldrout * Inv_L + model->BSIM3wdrout * Inv_W + model->BSIM3pdrout * Inv_LW; pParam->BSIM3dsub = model->BSIM3dsub + model->BSIM3ldsub * Inv_L + model->BSIM3wdsub * Inv_W + model->BSIM3pdsub * Inv_LW; pParam->BSIM3vth0 = model->BSIM3vth0 + model->BSIM3lvth0 * Inv_L + model->BSIM3wvth0 * Inv_W + model->BSIM3pvth0 * Inv_LW; pParam->BSIM3ua = model->BSIM3ua + model->BSIM3lua * Inv_L + model->BSIM3wua * Inv_W + model->BSIM3pua * Inv_LW; pParam->BSIM3ua1 = model->BSIM3ua1 + model->BSIM3lua1 * Inv_L + model->BSIM3wua1 * Inv_W + model->BSIM3pua1 * Inv_LW; pParam->BSIM3ub = model->BSIM3ub + model->BSIM3lub * Inv_L + model->BSIM3wub * Inv_W + model->BSIM3pub * Inv_LW; pParam->BSIM3ub1 = model->BSIM3ub1 + model->BSIM3lub1 * Inv_L + model->BSIM3wub1 * Inv_W + model->BSIM3pub1 * Inv_LW; pParam->BSIM3uc = model->BSIM3uc + model->BSIM3luc * Inv_L + model->BSIM3wuc * Inv_W + model->BSIM3puc * Inv_LW; pParam->BSIM3uc1 = model->BSIM3uc1 + model->BSIM3luc1 * Inv_L + model->BSIM3wuc1 * Inv_W + model->BSIM3puc1 * Inv_LW; pParam->BSIM3u0 = model->BSIM3u0 + model->BSIM3lu0 * Inv_L + model->BSIM3wu0 * Inv_W + model->BSIM3pu0 * Inv_LW; pParam->BSIM3ute = model->BSIM3ute + model->BSIM3lute * Inv_L + model->BSIM3wute * Inv_W + model->BSIM3pute * Inv_LW; pParam->BSIM3voff = model->BSIM3voff + model->BSIM3lvoff * Inv_L + model->BSIM3wvoff * Inv_W + model->BSIM3pvoff * Inv_LW; pParam->BSIM3delta = model->BSIM3delta + model->BSIM3ldelta * Inv_L + model->BSIM3wdelta * Inv_W + model->BSIM3pdelta * Inv_LW; pParam->BSIM3rdsw = model->BSIM3rdsw + model->BSIM3lrdsw * Inv_L + model->BSIM3wrdsw * Inv_W + model->BSIM3prdsw * Inv_LW; pParam->BSIM3prwg = model->BSIM3prwg + model->BSIM3lprwg * Inv_L + model->BSIM3wprwg * Inv_W + model->BSIM3pprwg * Inv_LW; pParam->BSIM3prwb = model->BSIM3prwb + model->BSIM3lprwb * Inv_L + model->BSIM3wprwb * Inv_W + model->BSIM3pprwb * Inv_LW; pParam->BSIM3prt = model->BSIM3prt + model->BSIM3lprt * Inv_L + model->BSIM3wprt * Inv_W + model->BSIM3pprt * Inv_LW; pParam->BSIM3eta0 = model->BSIM3eta0 + model->BSIM3leta0 * Inv_L + model->BSIM3weta0 * Inv_W + model->BSIM3peta0 * Inv_LW; pParam->BSIM3etab = model->BSIM3etab + model->BSIM3letab * Inv_L + model->BSIM3wetab * Inv_W + model->BSIM3petab * Inv_LW; pParam->BSIM3pclm = model->BSIM3pclm + model->BSIM3lpclm * Inv_L + model->BSIM3wpclm * Inv_W + model->BSIM3ppclm * Inv_LW; pParam->BSIM3pdibl1 = model->BSIM3pdibl1 + model->BSIM3lpdibl1 * Inv_L + model->BSIM3wpdibl1 * Inv_W + model->BSIM3ppdibl1 * Inv_LW; pParam->BSIM3pdibl2 = model->BSIM3pdibl2 + model->BSIM3lpdibl2 * Inv_L + model->BSIM3wpdibl2 * Inv_W + model->BSIM3ppdibl2 * Inv_LW; pParam->BSIM3pdiblb = model->BSIM3pdiblb + model->BSIM3lpdiblb * Inv_L + model->BSIM3wpdiblb * Inv_W + model->BSIM3ppdiblb * Inv_LW; pParam->BSIM3pscbe1 = model->BSIM3pscbe1 + model->BSIM3lpscbe1 * Inv_L + model->BSIM3wpscbe1 * Inv_W + model->BSIM3ppscbe1 * Inv_LW; pParam->BSIM3pscbe2 = model->BSIM3pscbe2 + model->BSIM3lpscbe2 * Inv_L + model->BSIM3wpscbe2 * Inv_W + model->BSIM3ppscbe2 * Inv_LW; pParam->BSIM3pvag = model->BSIM3pvag + model->BSIM3lpvag * Inv_L + model->BSIM3wpvag * Inv_W + model->BSIM3ppvag * Inv_LW; pParam->BSIM3wr = model->BSIM3wr + model->BSIM3lwr * Inv_L + model->BSIM3wwr * Inv_W + model->BSIM3pwr * Inv_LW; pParam->BSIM3dwg = model->BSIM3dwg + model->BSIM3ldwg * Inv_L + model->BSIM3wdwg * Inv_W + model->BSIM3pdwg * Inv_LW; pParam->BSIM3dwb = model->BSIM3dwb + model->BSIM3ldwb * Inv_L + model->BSIM3wdwb * Inv_W + model->BSIM3pdwb * Inv_LW; pParam->BSIM3b0 = model->BSIM3b0 + model->BSIM3lb0 * Inv_L + model->BSIM3wb0 * Inv_W + model->BSIM3pb0 * Inv_LW; pParam->BSIM3b1 = model->BSIM3b1 + model->BSIM3lb1 * Inv_L + model->BSIM3wb1 * Inv_W + model->BSIM3pb1 * Inv_LW; pParam->BSIM3alpha0 = model->BSIM3alpha0 + model->BSIM3lalpha0 * Inv_L + model->BSIM3walpha0 * Inv_W + model->BSIM3palpha0 * Inv_LW; pParam->BSIM3alpha1 = model->BSIM3alpha1 + model->BSIM3lalpha1 * Inv_L + model->BSIM3walpha1 * Inv_W + model->BSIM3palpha1 * Inv_LW; pParam->BSIM3beta0 = model->BSIM3beta0 + model->BSIM3lbeta0 * Inv_L + model->BSIM3wbeta0 * Inv_W + model->BSIM3pbeta0 * Inv_LW; /* CV model */ pParam->BSIM3elm = model->BSIM3elm + model->BSIM3lelm * Inv_L + model->BSIM3welm * Inv_W + model->BSIM3pelm * Inv_LW; pParam->BSIM3cgsl = model->BSIM3cgsl + model->BSIM3lcgsl * Inv_L + model->BSIM3wcgsl * Inv_W + model->BSIM3pcgsl * Inv_LW; pParam->BSIM3cgdl = model->BSIM3cgdl + model->BSIM3lcgdl * Inv_L + model->BSIM3wcgdl * Inv_W + model->BSIM3pcgdl * Inv_LW; pParam->BSIM3ckappa = model->BSIM3ckappa + model->BSIM3lckappa * Inv_L + model->BSIM3wckappa * Inv_W + model->BSIM3pckappa * Inv_LW; pParam->BSIM3cf = model->BSIM3cf + model->BSIM3lcf * Inv_L + model->BSIM3wcf * Inv_W + model->BSIM3pcf * Inv_LW; pParam->BSIM3clc = model->BSIM3clc + model->BSIM3lclc * Inv_L + model->BSIM3wclc * Inv_W + model->BSIM3pclc * Inv_LW; pParam->BSIM3cle = model->BSIM3cle + model->BSIM3lcle * Inv_L + model->BSIM3wcle * Inv_W + model->BSIM3pcle * Inv_LW; pParam->BSIM3vfbcv = model->BSIM3vfbcv + model->BSIM3lvfbcv * Inv_L + model->BSIM3wvfbcv * Inv_W + model->BSIM3pvfbcv * Inv_LW; pParam->BSIM3acde = model->BSIM3acde + model->BSIM3lacde * Inv_L + model->BSIM3wacde * Inv_W + model->BSIM3pacde * Inv_LW; pParam->BSIM3moin = model->BSIM3moin + model->BSIM3lmoin * Inv_L + model->BSIM3wmoin * Inv_W + model->BSIM3pmoin * Inv_LW; pParam->BSIM3noff = model->BSIM3noff + model->BSIM3lnoff * Inv_L + model->BSIM3wnoff * Inv_W + model->BSIM3pnoff * Inv_LW; pParam->BSIM3voffcv = model->BSIM3voffcv + model->BSIM3lvoffcv * Inv_L + model->BSIM3wvoffcv * Inv_W + model->BSIM3pvoffcv * Inv_LW; pParam->BSIM3abulkCVfactor = 1.0 + pow((pParam->BSIM3clc / pParam->BSIM3leffCV), pParam->BSIM3cle); T0 = (TRatio - 1.0); pParam->BSIM3ua = pParam->BSIM3ua + pParam->BSIM3ua1 * T0; pParam->BSIM3ub = pParam->BSIM3ub + pParam->BSIM3ub1 * T0; pParam->BSIM3uc = pParam->BSIM3uc + pParam->BSIM3uc1 * T0; if (pParam->BSIM3u0 > 1.0) pParam->BSIM3u0 = pParam->BSIM3u0 / 1.0e4; pParam->BSIM3u0temp = pParam->BSIM3u0 * pow(TRatio, pParam->BSIM3ute); pParam->BSIM3vsattemp = pParam->BSIM3vsat - pParam->BSIM3at * T0; pParam->BSIM3rds0 = (pParam->BSIM3rdsw + pParam->BSIM3prt * T0) / pow(pParam->BSIM3weff * 1E6, pParam->BSIM3wr); if (BSIM3checkModel(model, here, ckt)) { SPfrontEnd->IFerrorf (ERR_FATAL, "Fatal error(s) detected during BSIM3V3.3 parameter checking for %s in model %s", model->BSIM3modName, here->BSIM3name); return(E_BADPARM); } pParam->BSIM3cgdo = (model->BSIM3cgdo + pParam->BSIM3cf) * pParam->BSIM3weffCV; pParam->BSIM3cgso = (model->BSIM3cgso + pParam->BSIM3cf) * pParam->BSIM3weffCV; pParam->BSIM3cgbo = model->BSIM3cgbo * pParam->BSIM3leffCV; T0 = pParam->BSIM3leffCV * pParam->BSIM3leffCV; pParam->BSIM3tconst = pParam->BSIM3u0temp * pParam->BSIM3elm / (model->BSIM3cox * pParam->BSIM3weffCV * pParam->BSIM3leffCV * T0); if (!model->BSIM3npeakGiven && model->BSIM3gamma1Given) { T0 = pParam->BSIM3gamma1 * model->BSIM3cox; pParam->BSIM3npeak = 3.021E22 * T0 * T0; } pParam->BSIM3phi = 2.0 * Vtm0 * log(pParam->BSIM3npeak / ni); pParam->BSIM3sqrtPhi = sqrt(pParam->BSIM3phi); pParam->BSIM3phis3 = pParam->BSIM3sqrtPhi * pParam->BSIM3phi; pParam->BSIM3Xdep0 = sqrt(2.0 * EPSSI / (Charge_q * pParam->BSIM3npeak * 1.0e6)) * pParam->BSIM3sqrtPhi; pParam->BSIM3sqrtXdep0 = sqrt(pParam->BSIM3Xdep0); pParam->BSIM3litl = sqrt(3.0 * pParam->BSIM3xj * model->BSIM3tox); pParam->BSIM3vbi = Vtm0 * log(1.0e20 * pParam->BSIM3npeak / (ni * ni)); pParam->BSIM3cdep0 = sqrt(Charge_q * EPSSI * pParam->BSIM3npeak * 1.0e6 / 2.0 / pParam->BSIM3phi); pParam->BSIM3ldeb = sqrt(EPSSI * Vtm0 / (Charge_q * pParam->BSIM3npeak * 1.0e6)) / 3.0; pParam->BSIM3acde *= pow((pParam->BSIM3npeak / 2.0e16), -0.25); if (model->BSIM3k1Given || model->BSIM3k2Given) { if (!model->BSIM3k1Given) { if ((!ckt->CKTcurJob) || (ckt->CKTcurJob->JOBtype < 9)) /* don't print in sensitivity */ fprintf(stdout, "Warning: k1 should be specified with k2.\n"); pParam->BSIM3k1 = 0.53; } if (!model->BSIM3k2Given) { if ((!ckt->CKTcurJob) || (ckt->CKTcurJob->JOBtype < 9)) /* don't print in sensitivity */ fprintf(stdout, "Warning: k2 should be specified with k1.\n"); pParam->BSIM3k2 = -0.0186; } if ((!ckt->CKTcurJob) || (ckt->CKTcurJob->JOBtype < 9)) { /* don't print in sensitivity */ if (model->BSIM3nsubGiven) fprintf(stdout, "Warning: nsub is ignored because k1 or k2 is given.\n"); if (model->BSIM3xtGiven) fprintf(stdout, "Warning: xt is ignored because k1 or k2 is given.\n"); if (model->BSIM3vbxGiven) fprintf(stdout, "Warning: vbx is ignored because k1 or k2 is given.\n"); if (model->BSIM3gamma1Given) fprintf(stdout, "Warning: gamma1 is ignored because k1 or k2 is given.\n"); if (model->BSIM3gamma2Given) fprintf(stdout, "Warning: gamma2 is ignored because k1 or k2 is given.\n"); } } else { if (!model->BSIM3vbxGiven) pParam->BSIM3vbx = pParam->BSIM3phi - 7.7348e-4 * pParam->BSIM3npeak * pParam->BSIM3xt * pParam->BSIM3xt; if (pParam->BSIM3vbx > 0.0) pParam->BSIM3vbx = -pParam->BSIM3vbx; if (pParam->BSIM3vbm > 0.0) pParam->BSIM3vbm = -pParam->BSIM3vbm; if (!model->BSIM3gamma1Given) pParam->BSIM3gamma1 = 5.753e-12 * sqrt(pParam->BSIM3npeak) / model->BSIM3cox; if (!model->BSIM3gamma2Given) pParam->BSIM3gamma2 = 5.753e-12 * sqrt(pParam->BSIM3nsub) / model->BSIM3cox; T0 = pParam->BSIM3gamma1 - pParam->BSIM3gamma2; T1 = sqrt(pParam->BSIM3phi - pParam->BSIM3vbx) - pParam->BSIM3sqrtPhi; T2 = sqrt(pParam->BSIM3phi * (pParam->BSIM3phi - pParam->BSIM3vbm)) - pParam->BSIM3phi; pParam->BSIM3k2 = T0 * T1 / (2.0 * T2 + pParam->BSIM3vbm); pParam->BSIM3k1 = pParam->BSIM3gamma2 - 2.0 * pParam->BSIM3k2 * sqrt(pParam->BSIM3phi - pParam->BSIM3vbm); } if (pParam->BSIM3k2 < 0.0) { T0 = 0.5 * pParam->BSIM3k1 / pParam->BSIM3k2; pParam->BSIM3vbsc = 0.9 * (pParam->BSIM3phi - T0 * T0); if (pParam->BSIM3vbsc > -3.0) pParam->BSIM3vbsc = -3.0; else if (pParam->BSIM3vbsc < -30.0) pParam->BSIM3vbsc = -30.0; } else { pParam->BSIM3vbsc = -30.0; } if (pParam->BSIM3vbsc > pParam->BSIM3vbm) pParam->BSIM3vbsc = pParam->BSIM3vbm; if (!model->BSIM3vfbGiven) { if (model->BSIM3vth0Given) { pParam->BSIM3vfb = model->BSIM3type * pParam->BSIM3vth0 - pParam->BSIM3phi - pParam->BSIM3k1 * pParam->BSIM3sqrtPhi; } else { pParam->BSIM3vfb = -1.0; } } if (!model->BSIM3vth0Given) { pParam->BSIM3vth0 = model->BSIM3type * (pParam->BSIM3vfb + pParam->BSIM3phi + pParam->BSIM3k1 * pParam->BSIM3sqrtPhi); } pParam->BSIM3k1ox = pParam->BSIM3k1 * model->BSIM3tox / model->BSIM3toxm; pParam->BSIM3k2ox = pParam->BSIM3k2 * model->BSIM3tox / model->BSIM3toxm; T1 = sqrt(EPSSI / EPSOX * model->BSIM3tox * pParam->BSIM3Xdep0); T0 = exp(-0.5 * pParam->BSIM3dsub * pParam->BSIM3leff / T1); pParam->BSIM3theta0vb0 = (T0 + 2.0 * T0 * T0); T0 = exp(-0.5 * pParam->BSIM3drout * pParam->BSIM3leff / T1); T2 = (T0 + 2.0 * T0 * T0); pParam->BSIM3thetaRout = pParam->BSIM3pdibl1 * T2 + pParam->BSIM3pdibl2; tmp = sqrt(pParam->BSIM3Xdep0); tmp1 = pParam->BSIM3vbi - pParam->BSIM3phi; tmp2 = model->BSIM3factor1 * tmp; T0 = -0.5 * pParam->BSIM3dvt1w * pParam->BSIM3weff * pParam->BSIM3leff / tmp2; if (T0 > -EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 * (1.0 + 2.0 * T1); } else { T1 = MIN_EXP; T2 = T1 * (1.0 + 2.0 * T1); } T0 = pParam->BSIM3dvt0w * T2; T2 = T0 * tmp1; T0 = -0.5 * pParam->BSIM3dvt1 * pParam->BSIM3leff / tmp2; if (T0 > -EXP_THRESHOLD) { T1 = exp(T0); T3 = T1 * (1.0 + 2.0 * T1); } else { T1 = MIN_EXP; T3 = T1 * (1.0 + 2.0 * T1); } T3 = pParam->BSIM3dvt0 * T3 * tmp1; T4 = model->BSIM3tox * pParam->BSIM3phi / (pParam->BSIM3weff + pParam->BSIM3w0); T0 = sqrt(1.0 + pParam->BSIM3nlx / pParam->BSIM3leff); T5 = pParam->BSIM3k1ox * (T0 - 1.0) * pParam->BSIM3sqrtPhi + (pParam->BSIM3kt1 + pParam->BSIM3kt1l / pParam->BSIM3leff) * (TRatio - 1.0); tmp3 = model->BSIM3type * pParam->BSIM3vth0 - T2 - T3 + pParam->BSIM3k3 * T4 + T5; pParam->BSIM3vfbzb = tmp3 - pParam->BSIM3phi - pParam->BSIM3k1 * pParam->BSIM3sqrtPhi; /* End of vfbzb */ } /* adding delvto */ here->BSIM3vth0 = pParam->BSIM3vth0 + here->BSIM3delvto; here->BSIM3vfb = pParam->BSIM3vfb + model->BSIM3type * here->BSIM3delvto; here->BSIM3vfbzb = pParam->BSIM3vfbzb + model->BSIM3type * here->BSIM3delvto; /* low field mobility multiplier */ here->BSIM3u0temp = pParam->BSIM3u0temp * here->BSIM3mulu0; here->BSIM3tconst = here->BSIM3u0temp * pParam->BSIM3elm / (model->BSIM3cox * pParam->BSIM3weffCV * pParam->BSIM3leffCV * T0); /* process source/drain series resistance */ /* ACM model */ double drainResistance, sourceResistance; if (model->BSIM3acmMod == 0) { drainResistance = model->BSIM3sheetResistance * here->BSIM3drainSquares; sourceResistance = model->BSIM3sheetResistance * here->BSIM3sourceSquares; } else /* ACM > 0 */ { error = ACM_SourceDrainResistances( model->BSIM3acmMod, model->BSIM3ld, model->BSIM3ldif, model->BSIM3hdif, model->BSIM3wmlt, here->BSIM3w, model->BSIM3xw, model->BSIM3sheetResistance, here->BSIM3drainSquaresGiven, model->BSIM3rd, model->BSIM3rdc, here->BSIM3drainSquares, here->BSIM3sourceSquaresGiven, model->BSIM3rs, model->BSIM3rsc, here->BSIM3sourceSquares, &drainResistance, &sourceResistance ); if (error) return(error); } if (drainResistance > 0.0) here->BSIM3drainConductance = 1.0 / drainResistance; else here->BSIM3drainConductance = 0.0; if (sourceResistance > 0.0) here->BSIM3sourceConductance = 1.0 / sourceResistance; else here->BSIM3sourceConductance = 0.0; here->BSIM3cgso = pParam->BSIM3cgso; here->BSIM3cgdo = pParam->BSIM3cgdo; Nvtm = model->BSIM3vtm * model->BSIM3jctEmissionCoeff; if ((here->BSIM3sourceArea <= 0.0) && (here->BSIM3sourcePerimeter <= 0.0)) { SourceSatCurrent = 1.0e-14; } else { SourceSatCurrent = here->BSIM3sourceArea * model->BSIM3jctTempSatCurDensity + here->BSIM3sourcePerimeter * model->BSIM3jctSidewallTempSatCurDensity; } if ((SourceSatCurrent > 0.0) && (model->BSIM3ijth > 0.0)) { here->BSIM3vjsm = Nvtm * log(model->BSIM3ijth / SourceSatCurrent + 1.0); here->BSIM3IsEvjsm = SourceSatCurrent * exp(here->BSIM3vjsm / Nvtm); } if ((here->BSIM3drainArea <= 0.0) && (here->BSIM3drainPerimeter <= 0.0)) { DrainSatCurrent = 1.0e-14; } else { DrainSatCurrent = here->BSIM3drainArea * model->BSIM3jctTempSatCurDensity + here->BSIM3drainPerimeter * model->BSIM3jctSidewallTempSatCurDensity; } if ((DrainSatCurrent > 0.0) && (model->BSIM3ijth > 0.0)) { here->BSIM3vjdm = Nvtm * log(model->BSIM3ijth / DrainSatCurrent + 1.0); here->BSIM3IsEvjdm = DrainSatCurrent * exp(here->BSIM3vjdm / Nvtm); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3/b3acld.c0000644000175000017500000004170613546075722021504 0ustar carstencarsten/**** BSIM3v3.3.0 beta, Released by Xuemei Xi 07/29/2005 ****/ /********** * Copyright 2004 Regents of the University of California. All rights reserved. * File: b3acld.c of BSIM3v3.3.0 * Author: 1995 Min-Chie Jeng and Mansun Chan * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3acLoad( GENmodel *inModel, CKTcircuit *ckt) { BSIM3model *model = (BSIM3model*)inModel; BSIM3instance *here; double xcggb, xcgdb, xcgsb, xcbgb, xcbdb, xcbsb, xcddb, xcssb, xcdgb; double gdpr, gspr, gds, gbd, gbs, capbd, capbs, xcsgb, xcdsb, xcsdb; double cggb, cgdb, cgsb, cbgb, cbdb, cbsb, cddb, cdgb, cdsb, omega; double GSoverlapCap, GDoverlapCap, GBoverlapCap, FwdSum, RevSum, Gm, Gmbs; double dxpart, sxpart, xgtg, xgtd, xgts, xgtb, xcqgb=0.0, xcqdb=0.0, xcqsb=0.0, xcqbb=0.0; double gbspsp, gbbdp, gbbsp, gbspg, gbspb; double gbspdp, gbdpdp, gbdpg, gbdpb, gbdpsp; double ddxpart_dVd, ddxpart_dVg, ddxpart_dVb, ddxpart_dVs; double dsxpart_dVd, dsxpart_dVg, dsxpart_dVb, dsxpart_dVs; double T1, CoxWL, qcheq, Cdg, Cdd, Cds, Csg, Csd, Css; double ScalingFactor = 1.0e-9; /* For ACNQSMOD */ double T0, T2, T3, gmr, gmbsr, gmi, gmbsi, gdsi; double Cddr, Cdgr, Cdsr, Csdr, Csgr, Cssr, Cgdr, Cggr, Cgsr; double Cddi, Cdgi, Cdsi, Cdbi, Csdi, Csgi, Cssi, Csbi; double Cgdi, Cggi, Cgsi, Cgbi, Gmi, Gmbsi, FwdSumi, RevSumi; double xcdgbi, xcsgbi, xcddbi, xcdsbi, xcsdbi, xcssbi, xcdbbi; double xcsbbi, xcggbi, xcgdbi, xcgsbi, xcgbbi; double m; omega = ckt->CKTomega; for (; model != NULL; model = BSIM3nextModel(model)) { for (here = BSIM3instances(model); here!= NULL; here = BSIM3nextInstance(here)) { Csd = -(here->BSIM3cddb + here->BSIM3cgdb + here->BSIM3cbdb); Csg = -(here->BSIM3cdgb + here->BSIM3cggb + here->BSIM3cbgb); Css = -(here->BSIM3cdsb + here->BSIM3cgsb + here->BSIM3cbsb); if (here->BSIM3acnqsMod) { T0 = omega * here->BSIM3taunet; T1 = T0 * T0; T2 = 1.0 / (1.0 + T1); T3 = T0 * T2; gmr = here->BSIM3gm * T2; gmbsr = here->BSIM3gmbs * T2; gds = here->BSIM3gds * T2; gmi = -here->BSIM3gm * T3; gmbsi = -here->BSIM3gmbs * T3; gdsi = -here->BSIM3gds * T3; Cddr = here->BSIM3cddb * T2; Cdgr = here->BSIM3cdgb * T2; Cdsr = here->BSIM3cdsb * T2; Cddi = here->BSIM3cddb * T3 * omega; Cdgi = here->BSIM3cdgb * T3 * omega; Cdsi = here->BSIM3cdsb * T3 * omega; Cdbi = -(Cddi + Cdgi + Cdsi); Csdr = Csd * T2; Csgr = Csg * T2; Cssr = Css * T2; Csdi = Csd * T3 * omega; Csgi = Csg * T3 * omega; Cssi = Css * T3 * omega; Csbi = -(Csdi + Csgi + Cssi); Cgdr = -(Cddr + Csdr + here->BSIM3cbdb); Cggr = -(Cdgr + Csgr + here->BSIM3cbgb); Cgsr = -(Cdsr + Cssr + here->BSIM3cbsb); Cgdi = -(Cddi + Csdi); Cggi = -(Cdgi + Csgi); Cgsi = -(Cdsi + Cssi); Cgbi = -(Cgdi + Cggi + Cgsi); } else /* QS */ { gmr = here->BSIM3gm; gmbsr = here->BSIM3gmbs; gds = here->BSIM3gds; gmi = gmbsi = gdsi = 0.0; Cddr = here->BSIM3cddb; Cdgr = here->BSIM3cdgb; Cdsr = here->BSIM3cdsb; Cddi = Cdgi = Cdsi = Cdbi = 0.0; Csdr = Csd; Csgr = Csg; Cssr = Css; Csdi = Csgi = Cssi = Csbi = 0.0; Cgdr = here->BSIM3cgdb; Cggr = here->BSIM3cggb; Cgsr = here->BSIM3cgsb; Cgdi = Cggi = Cgsi = Cgbi = 0.0; } if (here->BSIM3mode >= 0) { Gm = gmr; Gmbs = gmbsr; FwdSum = Gm + Gmbs; RevSum = 0.0; Gmi = gmi; Gmbsi = gmbsi; FwdSumi = Gmi + Gmbsi; RevSumi = 0.0; gbbdp = -here->BSIM3gbds; gbbsp = here->BSIM3gbds + here->BSIM3gbgs + here->BSIM3gbbs; gbdpg = here->BSIM3gbgs; gbdpb = here->BSIM3gbbs; gbdpdp = here->BSIM3gbds; gbdpsp = -(gbdpg + gbdpb + gbdpdp); gbspdp = 0.0; gbspg = 0.0; gbspb = 0.0; gbspsp = 0.0; if (here->BSIM3nqsMod == 0 || here->BSIM3acnqsMod == 1) { cggb = Cggr; cgsb = Cgsr; cgdb = Cgdr; cbgb = here->BSIM3cbgb; cbsb = here->BSIM3cbsb; cbdb = here->BSIM3cbdb; cdgb = Cdgr; cdsb = Cdsr; cddb = Cddr; xgtg = xgtd = xgts = xgtb = 0.0; sxpart = 0.6; dxpart = 0.4; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { cggb = cgdb = cgsb = 0.0; cbgb = cbdb = cbsb = 0.0; cdgb = cddb = cdsb = 0.0; xgtg = here->BSIM3gtg; xgtd = here->BSIM3gtd; xgts = here->BSIM3gts; xgtb = here->BSIM3gtb; xcqgb = here->BSIM3cqgb * omega; xcqdb = here->BSIM3cqdb * omega; xcqsb = here->BSIM3cqsb * omega; xcqbb = here->BSIM3cqbb * omega; CoxWL = model->BSIM3cox * here->pParam->BSIM3weffCV * here->pParam->BSIM3leffCV; qcheq = -(here->BSIM3qgate + here->BSIM3qbulk); if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM3xpart < 0.5) { dxpart = 0.4; } else if (model->BSIM3xpart > 0.5) { dxpart = 0.0; } else { dxpart = 0.5; } ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; } else { dxpart = here->BSIM3qdrn / qcheq; Cdd = here->BSIM3cddb; Csd = -(here->BSIM3cgdb + here->BSIM3cddb + here->BSIM3cbdb); ddxpart_dVd = (Cdd - dxpart * (Cdd + Csd)) / qcheq; Cdg = here->BSIM3cdgb; Csg = -(here->BSIM3cggb + here->BSIM3cdgb + here->BSIM3cbgb); ddxpart_dVg = (Cdg - dxpart * (Cdg + Csg)) / qcheq; Cds = here->BSIM3cdsb; Css = -(here->BSIM3cgsb + here->BSIM3cdsb + here->BSIM3cbsb); ddxpart_dVs = (Cds - dxpart * (Cds + Css)) / qcheq; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); } sxpart = 1.0 - dxpart; dsxpart_dVd = -ddxpart_dVd; dsxpart_dVg = -ddxpart_dVg; dsxpart_dVs = -ddxpart_dVs; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); } xcdgbi = Cdgi; xcsgbi = Csgi; xcddbi = Cddi; xcdsbi = Cdsi; xcsdbi = Csdi; xcssbi = Cssi; xcdbbi = Cdbi; xcsbbi = Csbi; xcggbi = Cggi; xcgdbi = Cgdi; xcgsbi = Cgsi; xcgbbi = Cgbi; } else { Gm = -gmr; Gmbs = -gmbsr; FwdSum = 0.0; RevSum = -(Gm + Gmbs); Gmi = -gmi; Gmbsi = -gmbsi; FwdSumi = 0.0; RevSumi = -(Gmi + Gmbsi); gbbsp = -here->BSIM3gbds; gbbdp = here->BSIM3gbds + here->BSIM3gbgs + here->BSIM3gbbs; gbdpg = 0.0; gbdpsp = 0.0; gbdpb = 0.0; gbdpdp = 0.0; gbspg = here->BSIM3gbgs; gbspsp = here->BSIM3gbds; gbspb = here->BSIM3gbbs; gbspdp = -(gbspg + gbspsp + gbspb); if (here->BSIM3nqsMod == 0 || here->BSIM3acnqsMod == 1) { cggb = Cggr; cgsb = Cgdr; cgdb = Cgsr; cbgb = here->BSIM3cbgb; cbsb = here->BSIM3cbdb; cbdb = here->BSIM3cbsb; cdgb = -(Cdgr + cggb + cbgb); cdsb = -(Cddr + cgsb + cbsb); cddb = -(Cdsr + cgdb + cbdb); xgtg = xgtd = xgts = xgtb = 0.0; sxpart = 0.4; dxpart = 0.6; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { cggb = cgdb = cgsb = 0.0; cbgb = cbdb = cbsb = 0.0; cdgb = cddb = cdsb = 0.0; xgtg = here->BSIM3gtg; xgtd = here->BSIM3gts; xgts = here->BSIM3gtd; xgtb = here->BSIM3gtb; xcqgb = here->BSIM3cqgb * omega; xcqdb = here->BSIM3cqsb * omega; xcqsb = here->BSIM3cqdb * omega; xcqbb = here->BSIM3cqbb * omega; CoxWL = model->BSIM3cox * here->pParam->BSIM3weffCV * here->pParam->BSIM3leffCV; qcheq = -(here->BSIM3qgate + here->BSIM3qbulk); if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM3xpart < 0.5) { sxpart = 0.4; } else if (model->BSIM3xpart > 0.5) { sxpart = 0.0; } else { sxpart = 0.5; } dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { sxpart = here->BSIM3qdrn / qcheq; Css = here->BSIM3cddb; Cds = -(here->BSIM3cgdb + here->BSIM3cddb + here->BSIM3cbdb); dsxpart_dVs = (Css - sxpart * (Css + Cds)) / qcheq; Csg = here->BSIM3cdgb; Cdg = -(here->BSIM3cggb + here->BSIM3cdgb + here->BSIM3cbgb); dsxpart_dVg = (Csg - sxpart * (Csg + Cdg)) / qcheq; Csd = here->BSIM3cdsb; Cdd = -(here->BSIM3cgsb + here->BSIM3cdsb + here->BSIM3cbsb); dsxpart_dVd = (Csd - sxpart * (Csd + Cdd)) / qcheq; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); } dxpart = 1.0 - sxpart; ddxpart_dVd = -dsxpart_dVd; ddxpart_dVg = -dsxpart_dVg; ddxpart_dVs = -dsxpart_dVs; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); } xcdgbi = Csgi; xcsgbi = Cdgi; xcddbi = Cssi; xcdsbi = Csdi; xcsdbi = Cdsi; xcssbi = Cddi; xcdbbi = Csbi; xcsbbi = Cdbi; xcggbi = Cggi; xcgdbi = Cgsi; xcgsbi = Cgdi; xcgbbi = Cgbi; } T1 = *(ckt->CKTstate0 + here->BSIM3qdef) * here->BSIM3gtau; gdpr = here->BSIM3drainConductance; gspr = here->BSIM3sourceConductance; gbd = here->BSIM3gbd; gbs = here->BSIM3gbs; capbd = here->BSIM3capbd; capbs = here->BSIM3capbs; GSoverlapCap = here->BSIM3cgso; GDoverlapCap = here->BSIM3cgdo; GBoverlapCap = here->pParam->BSIM3cgbo; xcdgb = (cdgb - GDoverlapCap) * omega; xcddb = (cddb + capbd + GDoverlapCap) * omega; xcdsb = cdsb * omega; xcsgb = -(cggb + cbgb + cdgb + GSoverlapCap) * omega; xcsdb = -(cgdb + cbdb + cddb) * omega; xcssb = (capbs + GSoverlapCap - (cgsb + cbsb + cdsb)) * omega; xcggb = (cggb + GDoverlapCap + GSoverlapCap + GBoverlapCap) * omega; xcgdb = (cgdb - GDoverlapCap ) * omega; xcgsb = (cgsb - GSoverlapCap) * omega; xcbgb = (cbgb - GBoverlapCap) * omega; xcbdb = (cbdb - capbd ) * omega; xcbsb = (cbsb - capbs ) * omega; m = here->BSIM3m; *(here->BSIM3GgPtr +1) += m * xcggb; *(here->BSIM3BbPtr +1) -= m * (xcbgb + xcbdb + xcbsb); *(here->BSIM3DPdpPtr +1) += m * (xcddb + gdsi + RevSumi); *(here->BSIM3SPspPtr +1) += m * (xcssb + gdsi + FwdSumi); *(here->BSIM3GbPtr +1) -= m * (xcggb + xcgdb + xcgsb); *(here->BSIM3GdpPtr +1) += m * xcgdb; *(here->BSIM3GspPtr +1) += m * xcgsb; *(here->BSIM3BgPtr +1) += m * xcbgb; *(here->BSIM3BdpPtr +1) += m * xcbdb; *(here->BSIM3BspPtr +1) += m * xcbsb; *(here->BSIM3DPgPtr +1) += m * (xcdgb + Gmi); *(here->BSIM3DPbPtr +1) -= m * (xcdgb + xcddb + xcdsb + Gmbsi); *(here->BSIM3DPspPtr +1) += m * (xcdsb - gdsi - FwdSumi); *(here->BSIM3SPgPtr +1) += m * (xcsgb - Gmi); *(here->BSIM3SPbPtr +1) -= m * (xcsgb + xcsdb + xcssb - Gmbsi); *(here->BSIM3SPdpPtr +1) += m * (xcsdb - gdsi - RevSumi); *(here->BSIM3DdPtr) += m * gdpr; *(here->BSIM3SsPtr) += m * gspr; *(here->BSIM3BbPtr) += m * (gbd + gbs - here->BSIM3gbbs); *(here->BSIM3DPdpPtr) += m * (gdpr + gds + gbd + RevSum + xcddbi + dxpart * xgtd + T1 * ddxpart_dVd + gbdpdp); *(here->BSIM3SPspPtr) += m * (gspr + gds + gbs + FwdSum + xcssbi + sxpart * xgts + T1 * dsxpart_dVs + gbspsp); *(here->BSIM3DdpPtr) -= m * gdpr; *(here->BSIM3SspPtr) -= m * gspr; *(here->BSIM3BgPtr) -= m * here->BSIM3gbgs; *(here->BSIM3BdpPtr) -= m * (gbd - gbbdp); *(here->BSIM3BspPtr) -= m * (gbs - gbbsp); *(here->BSIM3DPdPtr) -= m * gdpr; *(here->BSIM3DPgPtr) += m * (Gm + dxpart * xgtg + T1 * ddxpart_dVg + gbdpg + xcdgbi); *(here->BSIM3DPbPtr) -= m * (gbd - Gmbs - dxpart * xgtb - T1 * ddxpart_dVb - gbdpb - xcdbbi); *(here->BSIM3DPspPtr) -= m * (gds + FwdSum - dxpart * xgts - T1 * ddxpart_dVs - gbdpsp - xcdsbi); *(here->BSIM3SPgPtr) -= m * (Gm - sxpart * xgtg - T1 * dsxpart_dVg - gbspg - xcsgbi); *(here->BSIM3SPsPtr) -= m * gspr; *(here->BSIM3SPbPtr) -= m * (gbs + Gmbs - sxpart * xgtb - T1 * dsxpart_dVb - gbspb - xcsbbi); *(here->BSIM3SPdpPtr) -= m * (gds + RevSum - sxpart * xgtd - T1 * dsxpart_dVd - gbspdp - xcsdbi); *(here->BSIM3GgPtr) -= m * (xgtg - xcggbi); *(here->BSIM3GbPtr) -= m * (xgtb - xcgbbi); *(here->BSIM3GdpPtr) -= m * (xgtd - xcgdbi); *(here->BSIM3GspPtr) -= m * (xgts - xcgsbi); if (here->BSIM3nqsMod) { if (here->BSIM3acnqsMod) { (*(here->BSIM3QqPtr) += m * 1.0); (*(here->BSIM3QgPtr) += 0.0); (*(here->BSIM3QdpPtr) += 0.0); (*(here->BSIM3QspPtr) += 0.0); (*(here->BSIM3QbPtr) += 0.0); (*(here->BSIM3DPqPtr) += 0.0); (*(here->BSIM3SPqPtr) += 0.0); (*(here->BSIM3GqPtr) += 0.0); } else { *(here->BSIM3QqPtr +1) += m * omega * ScalingFactor; *(here->BSIM3QgPtr +1) -= m * xcqgb; *(here->BSIM3QdpPtr +1) -= m * xcqdb; *(here->BSIM3QspPtr +1) -= m * xcqsb; *(here->BSIM3QbPtr +1) -= m * xcqbb; *(here->BSIM3QqPtr) += m * here->BSIM3gtau; *(here->BSIM3DPqPtr) += m * dxpart * here->BSIM3gtau; *(here->BSIM3SPqPtr) += m * sxpart * here->BSIM3gtau; *(here->BSIM3GqPtr) -= m * here->BSIM3gtau; *(here->BSIM3QgPtr) += m * xgtg; *(here->BSIM3QdpPtr) += m * xgtd; *(here->BSIM3QspPtr) += m * xgts; *(here->BSIM3QbPtr) += m * xgtb; } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3/b3check.c0000644000175000017500000004437513546075722021663 0ustar carstencarsten/**** BSIM3v3.3.0, Released by Xuemei Xi 07/29/2005 ****/ /********** * Copyright 2004 Regents of the University of California. All rights reserved. * File: b3check.c of BSIM3v3.3.0 * Author: 1995 Min-Chie Jeng * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi. * Modified by Xuemei Xi, 10/05, 12/14, 2001. * Modified by Xuemei Xi, 07/29/2005. **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" int BSIM3checkModel( BSIM3model *model, BSIM3instance *here, CKTcircuit *ckt) { struct bsim3SizeDependParam *pParam; int Fatal_Flag = 0; FILE *fplog; NG_IGNORE(ckt); if ((fplog = fopen("b3v33check.log", "w")) != NULL) { pParam = here->pParam; fprintf(fplog, "BSIM3v3.3.0 Parameter Checking.\n"); if ((strncmp(model->BSIM3version, "3.3.0", 5)) && (strncmp(model->BSIM3version, "3.30", 4)) && (strncmp(model->BSIM3version, "3.3", 3))) { fprintf(fplog, "Warning: This model is BSIM3v3.3.0; you specified a wrong version number.\n"); printf("Warning: This model is BSIM3v3.3.0; you specified a wrong version number.\n"); } fprintf(fplog, "Model = %s\n", model->BSIM3modName); if (pParam->BSIM3nlx < -pParam->BSIM3leff) { fprintf(fplog, "Fatal: Nlx = %g is less than -Leff.\n", pParam->BSIM3nlx); printf("Fatal: Nlx = %g is less than -Leff.\n", pParam->BSIM3nlx); Fatal_Flag = 1; } if (model->BSIM3tox <= 0.0) { fprintf(fplog, "Fatal: Tox = %g is not positive.\n", model->BSIM3tox); printf("Fatal: Tox = %g is not positive.\n", model->BSIM3tox); Fatal_Flag = 1; } if (model->BSIM3toxm <= 0.0) { fprintf(fplog, "Fatal: Toxm = %g is not positive.\n", model->BSIM3toxm); printf("Fatal: Toxm = %g is not positive.\n", model->BSIM3toxm); Fatal_Flag = 1; } if (model->BSIM3lintnoi > pParam->BSIM3leff/2) { fprintf(fplog, "Fatal: Lintnoi = %g is too large - Leff for noise is negative.\n", model->BSIM3lintnoi); printf("Fatal: Lintnoi = %g is too large - Leff for noise is negative.\n", model->BSIM3lintnoi); Fatal_Flag = 1; } if (pParam->BSIM3npeak <= 0.0) { fprintf(fplog, "Fatal: Nch = %g is not positive.\n", pParam->BSIM3npeak); printf("Fatal: Nch = %g is not positive.\n", pParam->BSIM3npeak); Fatal_Flag = 1; } if (pParam->BSIM3nsub <= 0.0) { fprintf(fplog, "Fatal: Nsub = %g is not positive.\n", pParam->BSIM3nsub); printf("Fatal: Nsub = %g is not positive.\n", pParam->BSIM3nsub); Fatal_Flag = 1; } if (pParam->BSIM3ngate < 0.0) { fprintf(fplog, "Fatal: Ngate = %g is not positive.\n", pParam->BSIM3ngate); printf("Fatal: Ngate = %g Ngate is not positive.\n", pParam->BSIM3ngate); Fatal_Flag = 1; } if (pParam->BSIM3ngate > 1.e25) { fprintf(fplog, "Fatal: Ngate = %g is too high.\n", pParam->BSIM3ngate); printf("Fatal: Ngate = %g Ngate is too high\n", pParam->BSIM3ngate); Fatal_Flag = 1; } if (pParam->BSIM3xj <= 0.0) { fprintf(fplog, "Fatal: Xj = %g is not positive.\n", pParam->BSIM3xj); printf("Fatal: Xj = %g is not positive.\n", pParam->BSIM3xj); Fatal_Flag = 1; } if (pParam->BSIM3dvt1 < 0.0) { fprintf(fplog, "Fatal: Dvt1 = %g is negative.\n", pParam->BSIM3dvt1); printf("Fatal: Dvt1 = %g is negative.\n", pParam->BSIM3dvt1); Fatal_Flag = 1; } if (pParam->BSIM3dvt1w < 0.0) { fprintf(fplog, "Fatal: Dvt1w = %g is negative.\n", pParam->BSIM3dvt1w); printf("Fatal: Dvt1w = %g is negative.\n", pParam->BSIM3dvt1w); Fatal_Flag = 1; } if (pParam->BSIM3w0 == -pParam->BSIM3weff) { fprintf(fplog, "Fatal: (W0 + Weff) = 0 causing divided-by-zero.\n"); printf("Fatal: (W0 + Weff) = 0 causing divided-by-zero.\n"); Fatal_Flag = 1; } if (pParam->BSIM3dsub < 0.0) { fprintf(fplog, "Fatal: Dsub = %g is negative.\n", pParam->BSIM3dsub); printf("Fatal: Dsub = %g is negative.\n", pParam->BSIM3dsub); Fatal_Flag = 1; } if (pParam->BSIM3b1 == -pParam->BSIM3weff) { fprintf(fplog, "Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); printf("Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); Fatal_Flag = 1; } if (pParam->BSIM3u0temp <= 0.0) { fprintf(fplog, "Fatal: u0 at current temperature = %g is not positive.\n", pParam->BSIM3u0temp); printf("Fatal: u0 at current temperature = %g is not positive.\n", pParam->BSIM3u0temp); Fatal_Flag = 1; } /* Check delta parameter */ if (pParam->BSIM3delta < 0.0) { fprintf(fplog, "Fatal: Delta = %g is less than zero.\n", pParam->BSIM3delta); printf("Fatal: Delta = %g is less than zero.\n", pParam->BSIM3delta); Fatal_Flag = 1; } if (pParam->BSIM3vsattemp <= 0.0) { fprintf(fplog, "Fatal: Vsat at current temperature = %g is not positive.\n", pParam->BSIM3vsattemp); printf("Fatal: Vsat at current temperature = %g is not positive.\n", pParam->BSIM3vsattemp); Fatal_Flag = 1; } /* Check Rout parameters */ if (pParam->BSIM3pclm <= 0.0) { fprintf(fplog, "Fatal: Pclm = %g is not positive.\n", pParam->BSIM3pclm); printf("Fatal: Pclm = %g is not positive.\n", pParam->BSIM3pclm); Fatal_Flag = 1; } if (pParam->BSIM3drout < 0.0) { fprintf(fplog, "Fatal: Drout = %g is negative.\n", pParam->BSIM3drout); printf("Fatal: Drout = %g is negative.\n", pParam->BSIM3drout); Fatal_Flag = 1; } if (pParam->BSIM3pscbe2 <= 0.0) { fprintf(fplog, "Warning: Pscbe2 = %g is not positive.\n", pParam->BSIM3pscbe2); printf("Warning: Pscbe2 = %g is not positive.\n", pParam->BSIM3pscbe2); } /* ACM model */ if (model->BSIM3acmMod == 0) { if (model->BSIM3unitLengthSidewallJctCap > 0.0 || model->BSIM3unitLengthGateSidewallJctCap > 0.0) { if (here->BSIM3drainPerimeter < pParam->BSIM3weff) { fprintf(fplog, "Warning: Pd = %g is less than W.\n", here->BSIM3drainPerimeter); printf("Warning: Pd = %g is less than W.\n", here->BSIM3drainPerimeter); } if (here->BSIM3sourcePerimeter < pParam->BSIM3weff) { fprintf(fplog, "Warning: Ps = %g is less than W.\n", here->BSIM3sourcePerimeter); printf("Warning: Ps = %g is less than W.\n", here->BSIM3sourcePerimeter); } } } if ((model->BSIM3calcacm > 0) && (model->BSIM3acmMod != 12)) { fprintf(fplog, "Warning: CALCACM = %d is wrong. Set back to 0.\n", model->BSIM3calcacm); printf("Warning: CALCACM = %d is wrong. Set back to 0.\n", model->BSIM3calcacm); model->BSIM3calcacm = 0; } if (pParam->BSIM3noff < 0.1) { fprintf(fplog, "Warning: Noff = %g is too small.\n", pParam->BSIM3noff); printf("Warning: Noff = %g is too small.\n", pParam->BSIM3noff); } if (pParam->BSIM3noff > 4.0) { fprintf(fplog, "Warning: Noff = %g is too large.\n", pParam->BSIM3noff); printf("Warning: Noff = %g is too large.\n", pParam->BSIM3noff); } if (pParam->BSIM3voffcv < -0.5) { fprintf(fplog, "Warning: Voffcv = %g is too small.\n", pParam->BSIM3voffcv); printf("Warning: Voffcv = %g is too small.\n", pParam->BSIM3voffcv); } if (pParam->BSIM3voffcv > 0.5) { fprintf(fplog, "Warning: Voffcv = %g is too large.\n", pParam->BSIM3voffcv); printf("Warning: Voffcv = %g is too large.\n", pParam->BSIM3voffcv); } if (model->BSIM3ijth < 0.0) { fprintf(fplog, "Fatal: Ijth = %g cannot be negative.\n", model->BSIM3ijth); printf("Fatal: Ijth = %g cannot be negative.\n", model->BSIM3ijth); Fatal_Flag = 1; } /* Check capacitance parameters */ if (pParam->BSIM3clc < 0.0) { fprintf(fplog, "Fatal: Clc = %g is negative.\n", pParam->BSIM3clc); printf("Fatal: Clc = %g is negative.\n", pParam->BSIM3clc); Fatal_Flag = 1; } if (pParam->BSIM3moin < 5.0) { fprintf(fplog, "Warning: Moin = %g is too small.\n", pParam->BSIM3moin); printf("Warning: Moin = %g is too small.\n", pParam->BSIM3moin); } if (pParam->BSIM3moin > 25.0) { fprintf(fplog, "Warning: Moin = %g is too large.\n", pParam->BSIM3moin); printf("Warning: Moin = %g is too large.\n", pParam->BSIM3moin); } if(model->BSIM3capMod ==3) { if (pParam->BSIM3acde < 0.4) { fprintf(fplog, "Warning: Acde = %g is too small.\n", pParam->BSIM3acde); printf("Warning: Acde = %g is too small.\n", pParam->BSIM3acde); } if (pParam->BSIM3acde > 1.6) { fprintf(fplog, "Warning: Acde = %g is too large.\n", pParam->BSIM3acde); printf("Warning: Acde = %g is too large.\n", pParam->BSIM3acde); } } if (model->BSIM3paramChk ==1) { /* Check L and W parameters */ if (pParam->BSIM3leff <= 5.0e-8) { fprintf(fplog, "Warning: Leff = %g may be too small.\n", pParam->BSIM3leff); printf("Warning: Leff = %g may be too small.\n", pParam->BSIM3leff); } if (pParam->BSIM3leffCV <= 5.0e-8) { fprintf(fplog, "Warning: Leff for CV = %g may be too small.\n", pParam->BSIM3leffCV); printf("Warning: Leff for CV = %g may be too small.\n", pParam->BSIM3leffCV); } if (pParam->BSIM3weff <= 1.0e-7) { fprintf(fplog, "Warning: Weff = %g may be too small.\n", pParam->BSIM3weff); printf("Warning: Weff = %g may be too small.\n", pParam->BSIM3weff); } if (pParam->BSIM3weffCV <= 1.0e-7) { fprintf(fplog, "Warning: Weff for CV = %g may be too small.\n", pParam->BSIM3weffCV); printf("Warning: Weff for CV = %g may be too small.\n", pParam->BSIM3weffCV); } /* Check threshold voltage parameters */ if (pParam->BSIM3nlx < 0.0) { fprintf(fplog, "Warning: Nlx = %g is negative.\n", pParam->BSIM3nlx); printf("Warning: Nlx = %g is negative.\n", pParam->BSIM3nlx); } if (model->BSIM3tox < 1.0e-9) { fprintf(fplog, "Warning: Tox = %g is less than 10A.\n", model->BSIM3tox); printf("Warning: Tox = %g is less than 10A.\n", model->BSIM3tox); } if (pParam->BSIM3npeak <= 1.0e15) { fprintf(fplog, "Warning: Nch = %g may be too small.\n", pParam->BSIM3npeak); printf("Warning: Nch = %g may be too small.\n", pParam->BSIM3npeak); } else if (pParam->BSIM3npeak >= 1.0e21) { fprintf(fplog, "Warning: Nch = %g may be too large.\n", pParam->BSIM3npeak); printf("Warning: Nch = %g may be too large.\n", pParam->BSIM3npeak); } if (pParam->BSIM3nsub <= 1.0e14) { fprintf(fplog, "Warning: Nsub = %g may be too small.\n", pParam->BSIM3nsub); printf("Warning: Nsub = %g may be too small.\n", pParam->BSIM3nsub); } else if (pParam->BSIM3nsub >= 1.0e21) { fprintf(fplog, "Warning: Nsub = %g may be too large.\n", pParam->BSIM3nsub); printf("Warning: Nsub = %g may be too large.\n", pParam->BSIM3nsub); } if ((pParam->BSIM3ngate > 0.0) && (pParam->BSIM3ngate <= 1.e18)) { fprintf(fplog, "Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->BSIM3ngate); printf("Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->BSIM3ngate); } if (pParam->BSIM3dvt0 < 0.0) { fprintf(fplog, "Warning: Dvt0 = %g is negative.\n", pParam->BSIM3dvt0); printf("Warning: Dvt0 = %g is negative.\n", pParam->BSIM3dvt0); } if (fabs(1.0e-6 / (pParam->BSIM3w0 + pParam->BSIM3weff)) > 10.0) { fprintf(fplog, "Warning: (W0 + Weff) may be too small.\n"); printf("Warning: (W0 + Weff) may be too small.\n"); } /* Check subthreshold parameters */ if (pParam->BSIM3nfactor < 0.0) { fprintf(fplog, "Warning: Nfactor = %g is negative.\n", pParam->BSIM3nfactor); printf("Warning: Nfactor = %g is negative.\n", pParam->BSIM3nfactor); } if (pParam->BSIM3cdsc < 0.0) { fprintf(fplog, "Warning: Cdsc = %g is negative.\n", pParam->BSIM3cdsc); printf("Warning: Cdsc = %g is negative.\n", pParam->BSIM3cdsc); } if (pParam->BSIM3cdscd < 0.0) { fprintf(fplog, "Warning: Cdscd = %g is negative.\n", pParam->BSIM3cdscd); printf("Warning: Cdscd = %g is negative.\n", pParam->BSIM3cdscd); } /* Check DIBL parameters */ if (pParam->BSIM3eta0 < 0.0) { fprintf(fplog, "Warning: Eta0 = %g is negative.\n", pParam->BSIM3eta0); printf("Warning: Eta0 = %g is negative.\n", pParam->BSIM3eta0); } /* Check Abulk parameters */ if (fabs(1.0e-6 / (pParam->BSIM3b1 + pParam->BSIM3weff)) > 10.0) { fprintf(fplog, "Warning: (B1 + Weff) may be too small.\n"); printf("Warning: (B1 + Weff) may be too small.\n"); } /* Check Saturation parameters */ if (pParam->BSIM3a2 < 0.01) { fprintf(fplog, "Warning: A2 = %g is too small. Set to 0.01.\n", pParam->BSIM3a2); printf("Warning: A2 = %g is too small. Set to 0.01.\n", pParam->BSIM3a2); pParam->BSIM3a2 = 0.01; } else if (pParam->BSIM3a2 > 1.0) { fprintf(fplog, "Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->BSIM3a2); printf("Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->BSIM3a2); pParam->BSIM3a2 = 1.0; pParam->BSIM3a1 = 0.0; } if (pParam->BSIM3rdsw < 0.0) { fprintf(fplog, "Warning: Rdsw = %g is negative. Set to zero.\n", pParam->BSIM3rdsw); printf("Warning: Rdsw = %g is negative. Set to zero.\n", pParam->BSIM3rdsw); pParam->BSIM3rdsw = 0.0; pParam->BSIM3rds0 = 0.0; } if (pParam->BSIM3rds0 < 0.0) { fprintf(fplog, "Warning: Rds at current temperature = %g is negative. Set to zero.\n", pParam->BSIM3rds0); printf("Warning: Rds at current temperature = %g is negative. Set to zero.\n", pParam->BSIM3rds0); pParam->BSIM3rds0 = 0.0; } if (pParam->BSIM3vsattemp < 1.0e3) { fprintf(fplog, "Warning: Vsat at current temperature = %g may be too small.\n", pParam->BSIM3vsattemp); printf("Warning: Vsat at current temperature = %g may be too small.\n", pParam->BSIM3vsattemp); } if (pParam->BSIM3pdibl1 < 0.0) { fprintf(fplog, "Warning: Pdibl1 = %g is negative.\n", pParam->BSIM3pdibl1); printf("Warning: Pdibl1 = %g is negative.\n", pParam->BSIM3pdibl1); } if (pParam->BSIM3pdibl2 < 0.0) { fprintf(fplog, "Warning: Pdibl2 = %g is negative.\n", pParam->BSIM3pdibl2); printf("Warning: Pdibl2 = %g is negative.\n", pParam->BSIM3pdibl2); } /* Check overlap capacitance parameters */ if (model->BSIM3cgdo < 0.0) { fprintf(fplog, "Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM3cgdo); printf("Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM3cgdo); model->BSIM3cgdo = 0.0; } if (model->BSIM3cgso < 0.0) { fprintf(fplog, "Warning: cgso = %g is negative. Set to zero.\n", model->BSIM3cgso); printf("Warning: cgso = %g is negative. Set to zero.\n", model->BSIM3cgso); model->BSIM3cgso = 0.0; } if (model->BSIM3cgbo < 0.0) { fprintf(fplog, "Warning: cgbo = %g is negative. Set to zero.\n", model->BSIM3cgbo); printf("Warning: cgbo = %g is negative. Set to zero.\n", model->BSIM3cgbo); model->BSIM3cgbo = 0.0; } }/* loop for the parameter check for warning messages */ fclose(fplog); } else { fprintf(stderr, "Warning: Can't open log file. Parameter checking skipped.\n"); } return(Fatal_Flag); } tmpk8ny_4pz/src/spicelib/devices/bsim3/b3mdel.c0000644000175000017500000000152613546075722021516 0ustar carstencarsten/**** BSIM3v3.3.0, Released by Xuemei Xi 07/29/2005 ****/ /********** * Copyright 2004 Regents of the University of California. All rights reserved. * File: b3mdel.c of BSIM3v3.3.0 * Author: 1995 Min-Chie Jeng and Mansun Chan. * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi **********/ #include "ngspice/ngspice.h" #include "bsim3def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3mDelete(GENmodel *gen_model) { BSIM3model *model = (BSIM3model*) gen_model; #ifdef USE_OMP FREE(model->BSIM3InstanceArray); #endif struct bsim3SizeDependParam *p = model->pSizeDependParamKnot; while (p) { struct bsim3SizeDependParam *next_p = p->pNext; FREE(p); p = next_p; } /* model->BSIM3modName to be freed in INPtabEnd() */ FREE(model->BSIM3version); return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim3/b3mpar.c0000644000175000017500000016641513546075722021545 0ustar carstencarsten/**** BSIM3v3.3.0, Released by Xuemei Xi 07/29/2005 ****/ /********** * Copyright 2004 Regents of the University of California. All rights reserved. * File: b3mpar.c of BSIM3v3.3.0 * Author: 1995 Min-Chie Jeng and Mansun Chan. * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi **********/ #include "ngspice/ngspice.h" #include "bsim3def.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3mParam( int param, IFvalue *value, GENmodel *inMod) { BSIM3model *mod = (BSIM3model*)inMod; switch(param) { case BSIM3_MOD_MOBMOD : mod->BSIM3mobMod = value->iValue; mod->BSIM3mobModGiven = TRUE; break; case BSIM3_MOD_BINUNIT : mod->BSIM3binUnit = value->iValue; mod->BSIM3binUnitGiven = TRUE; break; case BSIM3_MOD_PARAMCHK : mod->BSIM3paramChk = value->iValue; mod->BSIM3paramChkGiven = TRUE; break; case BSIM3_MOD_CAPMOD : mod->BSIM3capMod = value->iValue; mod->BSIM3capModGiven = TRUE; break; case BSIM3_MOD_ACMMOD: mod->BSIM3acmMod = value->iValue; mod->BSIM3acmModGiven = TRUE; break; case BSIM3_MOD_CALCACM: mod->BSIM3calcacm = value->iValue; mod->BSIM3calcacmGiven = TRUE; break; case BSIM3_MOD_NOIMOD : mod->BSIM3noiMod = value->iValue; mod->BSIM3noiModGiven = TRUE; break; case BSIM3_MOD_NQSMOD : mod->BSIM3nqsMod = value->iValue; mod->BSIM3nqsModGiven = TRUE; break; case BSIM3_MOD_ACNQSMOD : mod->BSIM3acnqsMod = value->iValue; mod->BSIM3acnqsModGiven = TRUE; break; case BSIM3_MOD_VERSION : mod->BSIM3version = value->sValue; mod->BSIM3versionGiven = TRUE; break; case BSIM3_MOD_TOX : mod->BSIM3tox = value->rValue; mod->BSIM3toxGiven = TRUE; break; case BSIM3_MOD_TOXM : mod->BSIM3toxm = value->rValue; mod->BSIM3toxmGiven = TRUE; break; case BSIM3_MOD_CDSC : mod->BSIM3cdsc = value->rValue; mod->BSIM3cdscGiven = TRUE; break; case BSIM3_MOD_CDSCB : mod->BSIM3cdscb = value->rValue; mod->BSIM3cdscbGiven = TRUE; break; case BSIM3_MOD_CDSCD : mod->BSIM3cdscd = value->rValue; mod->BSIM3cdscdGiven = TRUE; break; case BSIM3_MOD_CIT : mod->BSIM3cit = value->rValue; mod->BSIM3citGiven = TRUE; break; case BSIM3_MOD_NFACTOR : mod->BSIM3nfactor = value->rValue; mod->BSIM3nfactorGiven = TRUE; break; case BSIM3_MOD_XJ: mod->BSIM3xj = value->rValue; mod->BSIM3xjGiven = TRUE; break; case BSIM3_MOD_VSAT: mod->BSIM3vsat = value->rValue; mod->BSIM3vsatGiven = TRUE; break; case BSIM3_MOD_A0: mod->BSIM3a0 = value->rValue; mod->BSIM3a0Given = TRUE; break; case BSIM3_MOD_AGS: mod->BSIM3ags= value->rValue; mod->BSIM3agsGiven = TRUE; break; case BSIM3_MOD_A1: mod->BSIM3a1 = value->rValue; mod->BSIM3a1Given = TRUE; break; case BSIM3_MOD_A2: mod->BSIM3a2 = value->rValue; mod->BSIM3a2Given = TRUE; break; case BSIM3_MOD_AT: mod->BSIM3at = value->rValue; mod->BSIM3atGiven = TRUE; break; case BSIM3_MOD_KETA: mod->BSIM3keta = value->rValue; mod->BSIM3ketaGiven = TRUE; break; case BSIM3_MOD_NSUB: mod->BSIM3nsub = value->rValue; mod->BSIM3nsubGiven = TRUE; break; case BSIM3_MOD_NPEAK: mod->BSIM3npeak = value->rValue; mod->BSIM3npeakGiven = TRUE; if (mod->BSIM3npeak > 1.0e20) mod->BSIM3npeak *= 1.0e-6; break; case BSIM3_MOD_NGATE: mod->BSIM3ngate = value->rValue; mod->BSIM3ngateGiven = TRUE; if (mod->BSIM3ngate > 1.0e23) mod->BSIM3ngate *= 1.0e-6; break; case BSIM3_MOD_GAMMA1: mod->BSIM3gamma1 = value->rValue; mod->BSIM3gamma1Given = TRUE; break; case BSIM3_MOD_GAMMA2: mod->BSIM3gamma2 = value->rValue; mod->BSIM3gamma2Given = TRUE; break; case BSIM3_MOD_VBX: mod->BSIM3vbx = value->rValue; mod->BSIM3vbxGiven = TRUE; break; case BSIM3_MOD_VBM: mod->BSIM3vbm = value->rValue; mod->BSIM3vbmGiven = TRUE; break; case BSIM3_MOD_XT: mod->BSIM3xt = value->rValue; mod->BSIM3xtGiven = TRUE; break; case BSIM3_MOD_K1: mod->BSIM3k1 = value->rValue; mod->BSIM3k1Given = TRUE; break; case BSIM3_MOD_KT1: mod->BSIM3kt1 = value->rValue; mod->BSIM3kt1Given = TRUE; break; case BSIM3_MOD_KT1L: mod->BSIM3kt1l = value->rValue; mod->BSIM3kt1lGiven = TRUE; break; case BSIM3_MOD_KT2: mod->BSIM3kt2 = value->rValue; mod->BSIM3kt2Given = TRUE; break; case BSIM3_MOD_K2: mod->BSIM3k2 = value->rValue; mod->BSIM3k2Given = TRUE; break; case BSIM3_MOD_K3: mod->BSIM3k3 = value->rValue; mod->BSIM3k3Given = TRUE; break; case BSIM3_MOD_K3B: mod->BSIM3k3b = value->rValue; mod->BSIM3k3bGiven = TRUE; break; case BSIM3_MOD_NLX: mod->BSIM3nlx = value->rValue; mod->BSIM3nlxGiven = TRUE; break; case BSIM3_MOD_W0: mod->BSIM3w0 = value->rValue; mod->BSIM3w0Given = TRUE; break; case BSIM3_MOD_DVT0: mod->BSIM3dvt0 = value->rValue; mod->BSIM3dvt0Given = TRUE; break; case BSIM3_MOD_DVT1: mod->BSIM3dvt1 = value->rValue; mod->BSIM3dvt1Given = TRUE; break; case BSIM3_MOD_DVT2: mod->BSIM3dvt2 = value->rValue; mod->BSIM3dvt2Given = TRUE; break; case BSIM3_MOD_DVT0W: mod->BSIM3dvt0w = value->rValue; mod->BSIM3dvt0wGiven = TRUE; break; case BSIM3_MOD_DVT1W: mod->BSIM3dvt1w = value->rValue; mod->BSIM3dvt1wGiven = TRUE; break; case BSIM3_MOD_DVT2W: mod->BSIM3dvt2w = value->rValue; mod->BSIM3dvt2wGiven = TRUE; break; case BSIM3_MOD_DROUT: mod->BSIM3drout = value->rValue; mod->BSIM3droutGiven = TRUE; break; case BSIM3_MOD_DSUB: mod->BSIM3dsub = value->rValue; mod->BSIM3dsubGiven = TRUE; break; case BSIM3_MOD_VTH0: mod->BSIM3vth0 = value->rValue; mod->BSIM3vth0Given = TRUE; break; case BSIM3_MOD_UA: mod->BSIM3ua = value->rValue; mod->BSIM3uaGiven = TRUE; break; case BSIM3_MOD_UA1: mod->BSIM3ua1 = value->rValue; mod->BSIM3ua1Given = TRUE; break; case BSIM3_MOD_UB: mod->BSIM3ub = value->rValue; mod->BSIM3ubGiven = TRUE; break; case BSIM3_MOD_UB1: mod->BSIM3ub1 = value->rValue; mod->BSIM3ub1Given = TRUE; break; case BSIM3_MOD_UC: mod->BSIM3uc = value->rValue; mod->BSIM3ucGiven = TRUE; break; case BSIM3_MOD_UC1: mod->BSIM3uc1 = value->rValue; mod->BSIM3uc1Given = TRUE; break; case BSIM3_MOD_U0 : mod->BSIM3u0 = value->rValue; mod->BSIM3u0Given = TRUE; break; case BSIM3_MOD_UTE : mod->BSIM3ute = value->rValue; mod->BSIM3uteGiven = TRUE; break; case BSIM3_MOD_VOFF: mod->BSIM3voff = value->rValue; mod->BSIM3voffGiven = TRUE; break; case BSIM3_MOD_DELTA : mod->BSIM3delta = value->rValue; mod->BSIM3deltaGiven = TRUE; break; case BSIM3_MOD_RDSW: mod->BSIM3rdsw = value->rValue; mod->BSIM3rdswGiven = TRUE; break; case BSIM3_MOD_PRWG: mod->BSIM3prwg = value->rValue; mod->BSIM3prwgGiven = TRUE; break; case BSIM3_MOD_PRWB: mod->BSIM3prwb = value->rValue; mod->BSIM3prwbGiven = TRUE; break; case BSIM3_MOD_PRT: mod->BSIM3prt = value->rValue; mod->BSIM3prtGiven = TRUE; break; case BSIM3_MOD_ETA0: mod->BSIM3eta0 = value->rValue; mod->BSIM3eta0Given = TRUE; break; case BSIM3_MOD_ETAB: mod->BSIM3etab = value->rValue; mod->BSIM3etabGiven = TRUE; break; case BSIM3_MOD_PCLM: mod->BSIM3pclm = value->rValue; mod->BSIM3pclmGiven = TRUE; break; case BSIM3_MOD_PDIBL1: mod->BSIM3pdibl1 = value->rValue; mod->BSIM3pdibl1Given = TRUE; break; case BSIM3_MOD_PDIBL2: mod->BSIM3pdibl2 = value->rValue; mod->BSIM3pdibl2Given = TRUE; break; case BSIM3_MOD_PDIBLB: mod->BSIM3pdiblb = value->rValue; mod->BSIM3pdiblbGiven = TRUE; break; case BSIM3_MOD_PSCBE1: mod->BSIM3pscbe1 = value->rValue; mod->BSIM3pscbe1Given = TRUE; break; case BSIM3_MOD_PSCBE2: mod->BSIM3pscbe2 = value->rValue; mod->BSIM3pscbe2Given = TRUE; break; case BSIM3_MOD_PVAG: mod->BSIM3pvag = value->rValue; mod->BSIM3pvagGiven = TRUE; break; case BSIM3_MOD_WR : mod->BSIM3wr = value->rValue; mod->BSIM3wrGiven = TRUE; break; case BSIM3_MOD_DWG : mod->BSIM3dwg = value->rValue; mod->BSIM3dwgGiven = TRUE; break; case BSIM3_MOD_DWB : mod->BSIM3dwb = value->rValue; mod->BSIM3dwbGiven = TRUE; break; case BSIM3_MOD_B0 : mod->BSIM3b0 = value->rValue; mod->BSIM3b0Given = TRUE; break; case BSIM3_MOD_B1 : mod->BSIM3b1 = value->rValue; mod->BSIM3b1Given = TRUE; break; case BSIM3_MOD_ALPHA0 : mod->BSIM3alpha0 = value->rValue; mod->BSIM3alpha0Given = TRUE; break; case BSIM3_MOD_ALPHA1 : mod->BSIM3alpha1 = value->rValue; mod->BSIM3alpha1Given = TRUE; break; case BSIM3_MOD_BETA0 : mod->BSIM3beta0 = value->rValue; mod->BSIM3beta0Given = TRUE; break; case BSIM3_MOD_IJTH : mod->BSIM3ijth = value->rValue; mod->BSIM3ijthGiven = TRUE; break; case BSIM3_MOD_VFB : mod->BSIM3vfb = value->rValue; mod->BSIM3vfbGiven = TRUE; break; case BSIM3_MOD_ELM : mod->BSIM3elm = value->rValue; mod->BSIM3elmGiven = TRUE; break; case BSIM3_MOD_CGSL : mod->BSIM3cgsl = value->rValue; mod->BSIM3cgslGiven = TRUE; break; case BSIM3_MOD_CGDL : mod->BSIM3cgdl = value->rValue; mod->BSIM3cgdlGiven = TRUE; break; case BSIM3_MOD_CKAPPA : mod->BSIM3ckappa = value->rValue; mod->BSIM3ckappaGiven = TRUE; break; case BSIM3_MOD_CF : mod->BSIM3cf = value->rValue; mod->BSIM3cfGiven = TRUE; break; case BSIM3_MOD_CLC : mod->BSIM3clc = value->rValue; mod->BSIM3clcGiven = TRUE; break; case BSIM3_MOD_CLE : mod->BSIM3cle = value->rValue; mod->BSIM3cleGiven = TRUE; break; case BSIM3_MOD_DWC : mod->BSIM3dwc = value->rValue; mod->BSIM3dwcGiven = TRUE; break; case BSIM3_MOD_DLC : mod->BSIM3dlc = value->rValue; mod->BSIM3dlcGiven = TRUE; break; case BSIM3_MOD_VFBCV : mod->BSIM3vfbcv = value->rValue; mod->BSIM3vfbcvGiven = TRUE; break; case BSIM3_MOD_ACDE : mod->BSIM3acde = value->rValue; mod->BSIM3acdeGiven = TRUE; break; case BSIM3_MOD_MOIN : mod->BSIM3moin = value->rValue; mod->BSIM3moinGiven = TRUE; break; case BSIM3_MOD_NOFF : mod->BSIM3noff = value->rValue; mod->BSIM3noffGiven = TRUE; break; case BSIM3_MOD_VOFFCV : mod->BSIM3voffcv = value->rValue; mod->BSIM3voffcvGiven = TRUE; break; case BSIM3_MOD_TCJ : mod->BSIM3tcj = value->rValue; mod->BSIM3tcjGiven = TRUE; break; case BSIM3_MOD_TPB : mod->BSIM3tpb = value->rValue; mod->BSIM3tpbGiven = TRUE; break; case BSIM3_MOD_TCJSW : mod->BSIM3tcjsw = value->rValue; mod->BSIM3tcjswGiven = TRUE; break; case BSIM3_MOD_TPBSW : mod->BSIM3tpbsw = value->rValue; mod->BSIM3tpbswGiven = TRUE; break; case BSIM3_MOD_TCJSWG : mod->BSIM3tcjswg = value->rValue; mod->BSIM3tcjswgGiven = TRUE; break; case BSIM3_MOD_TPBSWG : mod->BSIM3tpbswg = value->rValue; mod->BSIM3tpbswgGiven = TRUE; break; /* acm model */ case BSIM3_MOD_HDIF: mod->BSIM3hdif = value->rValue; mod->BSIM3hdifGiven = TRUE; break; case BSIM3_MOD_LDIF: mod->BSIM3ldif = value->rValue; mod->BSIM3ldifGiven = TRUE; break; case BSIM3_MOD_LD: mod->BSIM3ld = value->rValue; mod->BSIM3ldGiven = TRUE; break; case BSIM3_MOD_RD: mod->BSIM3rd = value->rValue; mod->BSIM3rdGiven = TRUE; break; case BSIM3_MOD_RS: mod->BSIM3rs = value->rValue; mod->BSIM3rsGiven = TRUE; break; case BSIM3_MOD_RDC: mod->BSIM3rdc = value->rValue; mod->BSIM3rdcGiven = TRUE; break; case BSIM3_MOD_RSC: mod->BSIM3rsc = value->rValue; mod->BSIM3rscGiven = TRUE; break; case BSIM3_MOD_WMLT: mod->BSIM3wmlt = value->rValue; mod->BSIM3wmltGiven = TRUE; break; /* Length dependence */ case BSIM3_MOD_LCDSC : mod->BSIM3lcdsc = value->rValue; mod->BSIM3lcdscGiven = TRUE; break; case BSIM3_MOD_LCDSCB : mod->BSIM3lcdscb = value->rValue; mod->BSIM3lcdscbGiven = TRUE; break; case BSIM3_MOD_LCDSCD : mod->BSIM3lcdscd = value->rValue; mod->BSIM3lcdscdGiven = TRUE; break; case BSIM3_MOD_LCIT : mod->BSIM3lcit = value->rValue; mod->BSIM3lcitGiven = TRUE; break; case BSIM3_MOD_LNFACTOR : mod->BSIM3lnfactor = value->rValue; mod->BSIM3lnfactorGiven = TRUE; break; case BSIM3_MOD_LXJ: mod->BSIM3lxj = value->rValue; mod->BSIM3lxjGiven = TRUE; break; case BSIM3_MOD_LVSAT: mod->BSIM3lvsat = value->rValue; mod->BSIM3lvsatGiven = TRUE; break; case BSIM3_MOD_LA0: mod->BSIM3la0 = value->rValue; mod->BSIM3la0Given = TRUE; break; case BSIM3_MOD_LAGS: mod->BSIM3lags = value->rValue; mod->BSIM3lagsGiven = TRUE; break; case BSIM3_MOD_LA1: mod->BSIM3la1 = value->rValue; mod->BSIM3la1Given = TRUE; break; case BSIM3_MOD_LA2: mod->BSIM3la2 = value->rValue; mod->BSIM3la2Given = TRUE; break; case BSIM3_MOD_LAT: mod->BSIM3lat = value->rValue; mod->BSIM3latGiven = TRUE; break; case BSIM3_MOD_LKETA: mod->BSIM3lketa = value->rValue; mod->BSIM3lketaGiven = TRUE; break; case BSIM3_MOD_LNSUB: mod->BSIM3lnsub = value->rValue; mod->BSIM3lnsubGiven = TRUE; break; case BSIM3_MOD_LNPEAK: mod->BSIM3lnpeak = value->rValue; mod->BSIM3lnpeakGiven = TRUE; if (mod->BSIM3lnpeak > 1.0e20) mod->BSIM3lnpeak *= 1.0e-6; break; case BSIM3_MOD_LNGATE: mod->BSIM3lngate = value->rValue; mod->BSIM3lngateGiven = TRUE; if (mod->BSIM3lngate > 1.0e23) mod->BSIM3lngate *= 1.0e-6; break; case BSIM3_MOD_LGAMMA1: mod->BSIM3lgamma1 = value->rValue; mod->BSIM3lgamma1Given = TRUE; break; case BSIM3_MOD_LGAMMA2: mod->BSIM3lgamma2 = value->rValue; mod->BSIM3lgamma2Given = TRUE; break; case BSIM3_MOD_LVBX: mod->BSIM3lvbx = value->rValue; mod->BSIM3lvbxGiven = TRUE; break; case BSIM3_MOD_LVBM: mod->BSIM3lvbm = value->rValue; mod->BSIM3lvbmGiven = TRUE; break; case BSIM3_MOD_LXT: mod->BSIM3lxt = value->rValue; mod->BSIM3lxtGiven = TRUE; break; case BSIM3_MOD_LK1: mod->BSIM3lk1 = value->rValue; mod->BSIM3lk1Given = TRUE; break; case BSIM3_MOD_LKT1: mod->BSIM3lkt1 = value->rValue; mod->BSIM3lkt1Given = TRUE; break; case BSIM3_MOD_LKT1L: mod->BSIM3lkt1l = value->rValue; mod->BSIM3lkt1lGiven = TRUE; break; case BSIM3_MOD_LKT2: mod->BSIM3lkt2 = value->rValue; mod->BSIM3lkt2Given = TRUE; break; case BSIM3_MOD_LK2: mod->BSIM3lk2 = value->rValue; mod->BSIM3lk2Given = TRUE; break; case BSIM3_MOD_LK3: mod->BSIM3lk3 = value->rValue; mod->BSIM3lk3Given = TRUE; break; case BSIM3_MOD_LK3B: mod->BSIM3lk3b = value->rValue; mod->BSIM3lk3bGiven = TRUE; break; case BSIM3_MOD_LNLX: mod->BSIM3lnlx = value->rValue; mod->BSIM3lnlxGiven = TRUE; break; case BSIM3_MOD_LW0: mod->BSIM3lw0 = value->rValue; mod->BSIM3lw0Given = TRUE; break; case BSIM3_MOD_LDVT0: mod->BSIM3ldvt0 = value->rValue; mod->BSIM3ldvt0Given = TRUE; break; case BSIM3_MOD_LDVT1: mod->BSIM3ldvt1 = value->rValue; mod->BSIM3ldvt1Given = TRUE; break; case BSIM3_MOD_LDVT2: mod->BSIM3ldvt2 = value->rValue; mod->BSIM3ldvt2Given = TRUE; break; case BSIM3_MOD_LDVT0W: mod->BSIM3ldvt0w = value->rValue; mod->BSIM3ldvt0wGiven = TRUE; break; case BSIM3_MOD_LDVT1W: mod->BSIM3ldvt1w = value->rValue; mod->BSIM3ldvt1wGiven = TRUE; break; case BSIM3_MOD_LDVT2W: mod->BSIM3ldvt2w = value->rValue; mod->BSIM3ldvt2wGiven = TRUE; break; case BSIM3_MOD_LDROUT: mod->BSIM3ldrout = value->rValue; mod->BSIM3ldroutGiven = TRUE; break; case BSIM3_MOD_LDSUB: mod->BSIM3ldsub = value->rValue; mod->BSIM3ldsubGiven = TRUE; break; case BSIM3_MOD_LVTH0: mod->BSIM3lvth0 = value->rValue; mod->BSIM3lvth0Given = TRUE; break; case BSIM3_MOD_LUA: mod->BSIM3lua = value->rValue; mod->BSIM3luaGiven = TRUE; break; case BSIM3_MOD_LUA1: mod->BSIM3lua1 = value->rValue; mod->BSIM3lua1Given = TRUE; break; case BSIM3_MOD_LUB: mod->BSIM3lub = value->rValue; mod->BSIM3lubGiven = TRUE; break; case BSIM3_MOD_LUB1: mod->BSIM3lub1 = value->rValue; mod->BSIM3lub1Given = TRUE; break; case BSIM3_MOD_LUC: mod->BSIM3luc = value->rValue; mod->BSIM3lucGiven = TRUE; break; case BSIM3_MOD_LUC1: mod->BSIM3luc1 = value->rValue; mod->BSIM3luc1Given = TRUE; break; case BSIM3_MOD_LU0 : mod->BSIM3lu0 = value->rValue; mod->BSIM3lu0Given = TRUE; break; case BSIM3_MOD_LUTE : mod->BSIM3lute = value->rValue; mod->BSIM3luteGiven = TRUE; break; case BSIM3_MOD_LVOFF: mod->BSIM3lvoff = value->rValue; mod->BSIM3lvoffGiven = TRUE; break; case BSIM3_MOD_LDELTA : mod->BSIM3ldelta = value->rValue; mod->BSIM3ldeltaGiven = TRUE; break; case BSIM3_MOD_LRDSW: mod->BSIM3lrdsw = value->rValue; mod->BSIM3lrdswGiven = TRUE; break; case BSIM3_MOD_LPRWB: mod->BSIM3lprwb = value->rValue; mod->BSIM3lprwbGiven = TRUE; break; case BSIM3_MOD_LPRWG: mod->BSIM3lprwg = value->rValue; mod->BSIM3lprwgGiven = TRUE; break; case BSIM3_MOD_LPRT: mod->BSIM3lprt = value->rValue; mod->BSIM3lprtGiven = TRUE; break; case BSIM3_MOD_LETA0: mod->BSIM3leta0 = value->rValue; mod->BSIM3leta0Given = TRUE; break; case BSIM3_MOD_LETAB: mod->BSIM3letab = value->rValue; mod->BSIM3letabGiven = TRUE; break; case BSIM3_MOD_LPCLM: mod->BSIM3lpclm = value->rValue; mod->BSIM3lpclmGiven = TRUE; break; case BSIM3_MOD_LPDIBL1: mod->BSIM3lpdibl1 = value->rValue; mod->BSIM3lpdibl1Given = TRUE; break; case BSIM3_MOD_LPDIBL2: mod->BSIM3lpdibl2 = value->rValue; mod->BSIM3lpdibl2Given = TRUE; break; case BSIM3_MOD_LPDIBLB: mod->BSIM3lpdiblb = value->rValue; mod->BSIM3lpdiblbGiven = TRUE; break; case BSIM3_MOD_LPSCBE1: mod->BSIM3lpscbe1 = value->rValue; mod->BSIM3lpscbe1Given = TRUE; break; case BSIM3_MOD_LPSCBE2: mod->BSIM3lpscbe2 = value->rValue; mod->BSIM3lpscbe2Given = TRUE; break; case BSIM3_MOD_LPVAG: mod->BSIM3lpvag = value->rValue; mod->BSIM3lpvagGiven = TRUE; break; case BSIM3_MOD_LWR : mod->BSIM3lwr = value->rValue; mod->BSIM3lwrGiven = TRUE; break; case BSIM3_MOD_LDWG : mod->BSIM3ldwg = value->rValue; mod->BSIM3ldwgGiven = TRUE; break; case BSIM3_MOD_LDWB : mod->BSIM3ldwb = value->rValue; mod->BSIM3ldwbGiven = TRUE; break; case BSIM3_MOD_LB0 : mod->BSIM3lb0 = value->rValue; mod->BSIM3lb0Given = TRUE; break; case BSIM3_MOD_LB1 : mod->BSIM3lb1 = value->rValue; mod->BSIM3lb1Given = TRUE; break; case BSIM3_MOD_LALPHA0 : mod->BSIM3lalpha0 = value->rValue; mod->BSIM3lalpha0Given = TRUE; break; case BSIM3_MOD_LALPHA1 : mod->BSIM3lalpha1 = value->rValue; mod->BSIM3lalpha1Given = TRUE; break; case BSIM3_MOD_LBETA0 : mod->BSIM3lbeta0 = value->rValue; mod->BSIM3lbeta0Given = TRUE; break; case BSIM3_MOD_LVFB : mod->BSIM3lvfb = value->rValue; mod->BSIM3lvfbGiven = TRUE; break; case BSIM3_MOD_LELM : mod->BSIM3lelm = value->rValue; mod->BSIM3lelmGiven = TRUE; break; case BSIM3_MOD_LCGSL : mod->BSIM3lcgsl = value->rValue; mod->BSIM3lcgslGiven = TRUE; break; case BSIM3_MOD_LCGDL : mod->BSIM3lcgdl = value->rValue; mod->BSIM3lcgdlGiven = TRUE; break; case BSIM3_MOD_LCKAPPA : mod->BSIM3lckappa = value->rValue; mod->BSIM3lckappaGiven = TRUE; break; case BSIM3_MOD_LCF : mod->BSIM3lcf = value->rValue; mod->BSIM3lcfGiven = TRUE; break; case BSIM3_MOD_LCLC : mod->BSIM3lclc = value->rValue; mod->BSIM3lclcGiven = TRUE; break; case BSIM3_MOD_LCLE : mod->BSIM3lcle = value->rValue; mod->BSIM3lcleGiven = TRUE; break; case BSIM3_MOD_LVFBCV : mod->BSIM3lvfbcv = value->rValue; mod->BSIM3lvfbcvGiven = TRUE; break; case BSIM3_MOD_LACDE : mod->BSIM3lacde = value->rValue; mod->BSIM3lacdeGiven = TRUE; break; case BSIM3_MOD_LMOIN : mod->BSIM3lmoin = value->rValue; mod->BSIM3lmoinGiven = TRUE; break; case BSIM3_MOD_LNOFF : mod->BSIM3lnoff = value->rValue; mod->BSIM3lnoffGiven = TRUE; break; case BSIM3_MOD_LVOFFCV : mod->BSIM3lvoffcv = value->rValue; mod->BSIM3lvoffcvGiven = TRUE; break; /* Width dependence */ case BSIM3_MOD_WCDSC : mod->BSIM3wcdsc = value->rValue; mod->BSIM3wcdscGiven = TRUE; break; case BSIM3_MOD_WCDSCB : mod->BSIM3wcdscb = value->rValue; mod->BSIM3wcdscbGiven = TRUE; break; case BSIM3_MOD_WCDSCD : mod->BSIM3wcdscd = value->rValue; mod->BSIM3wcdscdGiven = TRUE; break; case BSIM3_MOD_WCIT : mod->BSIM3wcit = value->rValue; mod->BSIM3wcitGiven = TRUE; break; case BSIM3_MOD_WNFACTOR : mod->BSIM3wnfactor = value->rValue; mod->BSIM3wnfactorGiven = TRUE; break; case BSIM3_MOD_WXJ: mod->BSIM3wxj = value->rValue; mod->BSIM3wxjGiven = TRUE; break; case BSIM3_MOD_WVSAT: mod->BSIM3wvsat = value->rValue; mod->BSIM3wvsatGiven = TRUE; break; case BSIM3_MOD_WA0: mod->BSIM3wa0 = value->rValue; mod->BSIM3wa0Given = TRUE; break; case BSIM3_MOD_WAGS: mod->BSIM3wags = value->rValue; mod->BSIM3wagsGiven = TRUE; break; case BSIM3_MOD_WA1: mod->BSIM3wa1 = value->rValue; mod->BSIM3wa1Given = TRUE; break; case BSIM3_MOD_WA2: mod->BSIM3wa2 = value->rValue; mod->BSIM3wa2Given = TRUE; break; case BSIM3_MOD_WAT: mod->BSIM3wat = value->rValue; mod->BSIM3watGiven = TRUE; break; case BSIM3_MOD_WKETA: mod->BSIM3wketa = value->rValue; mod->BSIM3wketaGiven = TRUE; break; case BSIM3_MOD_WNSUB: mod->BSIM3wnsub = value->rValue; mod->BSIM3wnsubGiven = TRUE; break; case BSIM3_MOD_WNPEAK: mod->BSIM3wnpeak = value->rValue; mod->BSIM3wnpeakGiven = TRUE; if (mod->BSIM3wnpeak > 1.0e20) mod->BSIM3wnpeak *= 1.0e-6; break; case BSIM3_MOD_WNGATE: mod->BSIM3wngate = value->rValue; mod->BSIM3wngateGiven = TRUE; if (mod->BSIM3wngate > 1.0e23) mod->BSIM3wngate *= 1.0e-6; break; case BSIM3_MOD_WGAMMA1: mod->BSIM3wgamma1 = value->rValue; mod->BSIM3wgamma1Given = TRUE; break; case BSIM3_MOD_WGAMMA2: mod->BSIM3wgamma2 = value->rValue; mod->BSIM3wgamma2Given = TRUE; break; case BSIM3_MOD_WVBX: mod->BSIM3wvbx = value->rValue; mod->BSIM3wvbxGiven = TRUE; break; case BSIM3_MOD_WVBM: mod->BSIM3wvbm = value->rValue; mod->BSIM3wvbmGiven = TRUE; break; case BSIM3_MOD_WXT: mod->BSIM3wxt = value->rValue; mod->BSIM3wxtGiven = TRUE; break; case BSIM3_MOD_WK1: mod->BSIM3wk1 = value->rValue; mod->BSIM3wk1Given = TRUE; break; case BSIM3_MOD_WKT1: mod->BSIM3wkt1 = value->rValue; mod->BSIM3wkt1Given = TRUE; break; case BSIM3_MOD_WKT1L: mod->BSIM3wkt1l = value->rValue; mod->BSIM3wkt1lGiven = TRUE; break; case BSIM3_MOD_WKT2: mod->BSIM3wkt2 = value->rValue; mod->BSIM3wkt2Given = TRUE; break; case BSIM3_MOD_WK2: mod->BSIM3wk2 = value->rValue; mod->BSIM3wk2Given = TRUE; break; case BSIM3_MOD_WK3: mod->BSIM3wk3 = value->rValue; mod->BSIM3wk3Given = TRUE; break; case BSIM3_MOD_WK3B: mod->BSIM3wk3b = value->rValue; mod->BSIM3wk3bGiven = TRUE; break; case BSIM3_MOD_WNLX: mod->BSIM3wnlx = value->rValue; mod->BSIM3wnlxGiven = TRUE; break; case BSIM3_MOD_WW0: mod->BSIM3ww0 = value->rValue; mod->BSIM3ww0Given = TRUE; break; case BSIM3_MOD_WDVT0: mod->BSIM3wdvt0 = value->rValue; mod->BSIM3wdvt0Given = TRUE; break; case BSIM3_MOD_WDVT1: mod->BSIM3wdvt1 = value->rValue; mod->BSIM3wdvt1Given = TRUE; break; case BSIM3_MOD_WDVT2: mod->BSIM3wdvt2 = value->rValue; mod->BSIM3wdvt2Given = TRUE; break; case BSIM3_MOD_WDVT0W: mod->BSIM3wdvt0w = value->rValue; mod->BSIM3wdvt0wGiven = TRUE; break; case BSIM3_MOD_WDVT1W: mod->BSIM3wdvt1w = value->rValue; mod->BSIM3wdvt1wGiven = TRUE; break; case BSIM3_MOD_WDVT2W: mod->BSIM3wdvt2w = value->rValue; mod->BSIM3wdvt2wGiven = TRUE; break; case BSIM3_MOD_WDROUT: mod->BSIM3wdrout = value->rValue; mod->BSIM3wdroutGiven = TRUE; break; case BSIM3_MOD_WDSUB: mod->BSIM3wdsub = value->rValue; mod->BSIM3wdsubGiven = TRUE; break; case BSIM3_MOD_WVTH0: mod->BSIM3wvth0 = value->rValue; mod->BSIM3wvth0Given = TRUE; break; case BSIM3_MOD_WUA: mod->BSIM3wua = value->rValue; mod->BSIM3wuaGiven = TRUE; break; case BSIM3_MOD_WUA1: mod->BSIM3wua1 = value->rValue; mod->BSIM3wua1Given = TRUE; break; case BSIM3_MOD_WUB: mod->BSIM3wub = value->rValue; mod->BSIM3wubGiven = TRUE; break; case BSIM3_MOD_WUB1: mod->BSIM3wub1 = value->rValue; mod->BSIM3wub1Given = TRUE; break; case BSIM3_MOD_WUC: mod->BSIM3wuc = value->rValue; mod->BSIM3wucGiven = TRUE; break; case BSIM3_MOD_WUC1: mod->BSIM3wuc1 = value->rValue; mod->BSIM3wuc1Given = TRUE; break; case BSIM3_MOD_WU0 : mod->BSIM3wu0 = value->rValue; mod->BSIM3wu0Given = TRUE; break; case BSIM3_MOD_WUTE : mod->BSIM3wute = value->rValue; mod->BSIM3wuteGiven = TRUE; break; case BSIM3_MOD_WVOFF: mod->BSIM3wvoff = value->rValue; mod->BSIM3wvoffGiven = TRUE; break; case BSIM3_MOD_WDELTA : mod->BSIM3wdelta = value->rValue; mod->BSIM3wdeltaGiven = TRUE; break; case BSIM3_MOD_WRDSW: mod->BSIM3wrdsw = value->rValue; mod->BSIM3wrdswGiven = TRUE; break; case BSIM3_MOD_WPRWB: mod->BSIM3wprwb = value->rValue; mod->BSIM3wprwbGiven = TRUE; break; case BSIM3_MOD_WPRWG: mod->BSIM3wprwg = value->rValue; mod->BSIM3wprwgGiven = TRUE; break; case BSIM3_MOD_WPRT: mod->BSIM3wprt = value->rValue; mod->BSIM3wprtGiven = TRUE; break; case BSIM3_MOD_WETA0: mod->BSIM3weta0 = value->rValue; mod->BSIM3weta0Given = TRUE; break; case BSIM3_MOD_WETAB: mod->BSIM3wetab = value->rValue; mod->BSIM3wetabGiven = TRUE; break; case BSIM3_MOD_WPCLM: mod->BSIM3wpclm = value->rValue; mod->BSIM3wpclmGiven = TRUE; break; case BSIM3_MOD_WPDIBL1: mod->BSIM3wpdibl1 = value->rValue; mod->BSIM3wpdibl1Given = TRUE; break; case BSIM3_MOD_WPDIBL2: mod->BSIM3wpdibl2 = value->rValue; mod->BSIM3wpdibl2Given = TRUE; break; case BSIM3_MOD_WPDIBLB: mod->BSIM3wpdiblb = value->rValue; mod->BSIM3wpdiblbGiven = TRUE; break; case BSIM3_MOD_WPSCBE1: mod->BSIM3wpscbe1 = value->rValue; mod->BSIM3wpscbe1Given = TRUE; break; case BSIM3_MOD_WPSCBE2: mod->BSIM3wpscbe2 = value->rValue; mod->BSIM3wpscbe2Given = TRUE; break; case BSIM3_MOD_WPVAG: mod->BSIM3wpvag = value->rValue; mod->BSIM3wpvagGiven = TRUE; break; case BSIM3_MOD_WWR : mod->BSIM3wwr = value->rValue; mod->BSIM3wwrGiven = TRUE; break; case BSIM3_MOD_WDWG : mod->BSIM3wdwg = value->rValue; mod->BSIM3wdwgGiven = TRUE; break; case BSIM3_MOD_WDWB : mod->BSIM3wdwb = value->rValue; mod->BSIM3wdwbGiven = TRUE; break; case BSIM3_MOD_WB0 : mod->BSIM3wb0 = value->rValue; mod->BSIM3wb0Given = TRUE; break; case BSIM3_MOD_WB1 : mod->BSIM3wb1 = value->rValue; mod->BSIM3wb1Given = TRUE; break; case BSIM3_MOD_WALPHA0 : mod->BSIM3walpha0 = value->rValue; mod->BSIM3walpha0Given = TRUE; break; case BSIM3_MOD_WALPHA1 : mod->BSIM3walpha1 = value->rValue; mod->BSIM3walpha1Given = TRUE; break; case BSIM3_MOD_WBETA0 : mod->BSIM3wbeta0 = value->rValue; mod->BSIM3wbeta0Given = TRUE; break; case BSIM3_MOD_WVFB : mod->BSIM3wvfb = value->rValue; mod->BSIM3wvfbGiven = TRUE; break; case BSIM3_MOD_WELM : mod->BSIM3welm = value->rValue; mod->BSIM3welmGiven = TRUE; break; case BSIM3_MOD_WCGSL : mod->BSIM3wcgsl = value->rValue; mod->BSIM3wcgslGiven = TRUE; break; case BSIM3_MOD_WCGDL : mod->BSIM3wcgdl = value->rValue; mod->BSIM3wcgdlGiven = TRUE; break; case BSIM3_MOD_WCKAPPA : mod->BSIM3wckappa = value->rValue; mod->BSIM3wckappaGiven = TRUE; break; case BSIM3_MOD_WCF : mod->BSIM3wcf = value->rValue; mod->BSIM3wcfGiven = TRUE; break; case BSIM3_MOD_WCLC : mod->BSIM3wclc = value->rValue; mod->BSIM3wclcGiven = TRUE; break; case BSIM3_MOD_WCLE : mod->BSIM3wcle = value->rValue; mod->BSIM3wcleGiven = TRUE; break; case BSIM3_MOD_WVFBCV : mod->BSIM3wvfbcv = value->rValue; mod->BSIM3wvfbcvGiven = TRUE; break; case BSIM3_MOD_WACDE : mod->BSIM3wacde = value->rValue; mod->BSIM3wacdeGiven = TRUE; break; case BSIM3_MOD_WMOIN : mod->BSIM3wmoin = value->rValue; mod->BSIM3wmoinGiven = TRUE; break; case BSIM3_MOD_WNOFF : mod->BSIM3wnoff = value->rValue; mod->BSIM3wnoffGiven = TRUE; break; case BSIM3_MOD_WVOFFCV : mod->BSIM3wvoffcv = value->rValue; mod->BSIM3wvoffcvGiven = TRUE; break; /* Cross-term dependence */ case BSIM3_MOD_PCDSC : mod->BSIM3pcdsc = value->rValue; mod->BSIM3pcdscGiven = TRUE; break; case BSIM3_MOD_PCDSCB : mod->BSIM3pcdscb = value->rValue; mod->BSIM3pcdscbGiven = TRUE; break; case BSIM3_MOD_PCDSCD : mod->BSIM3pcdscd = value->rValue; mod->BSIM3pcdscdGiven = TRUE; break; case BSIM3_MOD_PCIT : mod->BSIM3pcit = value->rValue; mod->BSIM3pcitGiven = TRUE; break; case BSIM3_MOD_PNFACTOR : mod->BSIM3pnfactor = value->rValue; mod->BSIM3pnfactorGiven = TRUE; break; case BSIM3_MOD_PXJ: mod->BSIM3pxj = value->rValue; mod->BSIM3pxjGiven = TRUE; break; case BSIM3_MOD_PVSAT: mod->BSIM3pvsat = value->rValue; mod->BSIM3pvsatGiven = TRUE; break; case BSIM3_MOD_PA0: mod->BSIM3pa0 = value->rValue; mod->BSIM3pa0Given = TRUE; break; case BSIM3_MOD_PAGS: mod->BSIM3pags = value->rValue; mod->BSIM3pagsGiven = TRUE; break; case BSIM3_MOD_PA1: mod->BSIM3pa1 = value->rValue; mod->BSIM3pa1Given = TRUE; break; case BSIM3_MOD_PA2: mod->BSIM3pa2 = value->rValue; mod->BSIM3pa2Given = TRUE; break; case BSIM3_MOD_PAT: mod->BSIM3pat = value->rValue; mod->BSIM3patGiven = TRUE; break; case BSIM3_MOD_PKETA: mod->BSIM3pketa = value->rValue; mod->BSIM3pketaGiven = TRUE; break; case BSIM3_MOD_PNSUB: mod->BSIM3pnsub = value->rValue; mod->BSIM3pnsubGiven = TRUE; break; case BSIM3_MOD_PNPEAK: mod->BSIM3pnpeak = value->rValue; mod->BSIM3pnpeakGiven = TRUE; if (mod->BSIM3pnpeak > 1.0e20) mod->BSIM3pnpeak *= 1.0e-6; break; case BSIM3_MOD_PNGATE: mod->BSIM3pngate = value->rValue; mod->BSIM3pngateGiven = TRUE; if (mod->BSIM3pngate > 1.0e23) mod->BSIM3pngate *= 1.0e-6; break; case BSIM3_MOD_PGAMMA1: mod->BSIM3pgamma1 = value->rValue; mod->BSIM3pgamma1Given = TRUE; break; case BSIM3_MOD_PGAMMA2: mod->BSIM3pgamma2 = value->rValue; mod->BSIM3pgamma2Given = TRUE; break; case BSIM3_MOD_PVBX: mod->BSIM3pvbx = value->rValue; mod->BSIM3pvbxGiven = TRUE; break; case BSIM3_MOD_PVBM: mod->BSIM3pvbm = value->rValue; mod->BSIM3pvbmGiven = TRUE; break; case BSIM3_MOD_PXT: mod->BSIM3pxt = value->rValue; mod->BSIM3pxtGiven = TRUE; break; case BSIM3_MOD_PK1: mod->BSIM3pk1 = value->rValue; mod->BSIM3pk1Given = TRUE; break; case BSIM3_MOD_PKT1: mod->BSIM3pkt1 = value->rValue; mod->BSIM3pkt1Given = TRUE; break; case BSIM3_MOD_PKT1L: mod->BSIM3pkt1l = value->rValue; mod->BSIM3pkt1lGiven = TRUE; break; case BSIM3_MOD_PKT2: mod->BSIM3pkt2 = value->rValue; mod->BSIM3pkt2Given = TRUE; break; case BSIM3_MOD_PK2: mod->BSIM3pk2 = value->rValue; mod->BSIM3pk2Given = TRUE; break; case BSIM3_MOD_PK3: mod->BSIM3pk3 = value->rValue; mod->BSIM3pk3Given = TRUE; break; case BSIM3_MOD_PK3B: mod->BSIM3pk3b = value->rValue; mod->BSIM3pk3bGiven = TRUE; break; case BSIM3_MOD_PNLX: mod->BSIM3pnlx = value->rValue; mod->BSIM3pnlxGiven = TRUE; break; case BSIM3_MOD_PW0: mod->BSIM3pw0 = value->rValue; mod->BSIM3pw0Given = TRUE; break; case BSIM3_MOD_PDVT0: mod->BSIM3pdvt0 = value->rValue; mod->BSIM3pdvt0Given = TRUE; break; case BSIM3_MOD_PDVT1: mod->BSIM3pdvt1 = value->rValue; mod->BSIM3pdvt1Given = TRUE; break; case BSIM3_MOD_PDVT2: mod->BSIM3pdvt2 = value->rValue; mod->BSIM3pdvt2Given = TRUE; break; case BSIM3_MOD_PDVT0W: mod->BSIM3pdvt0w = value->rValue; mod->BSIM3pdvt0wGiven = TRUE; break; case BSIM3_MOD_PDVT1W: mod->BSIM3pdvt1w = value->rValue; mod->BSIM3pdvt1wGiven = TRUE; break; case BSIM3_MOD_PDVT2W: mod->BSIM3pdvt2w = value->rValue; mod->BSIM3pdvt2wGiven = TRUE; break; case BSIM3_MOD_PDROUT: mod->BSIM3pdrout = value->rValue; mod->BSIM3pdroutGiven = TRUE; break; case BSIM3_MOD_PDSUB: mod->BSIM3pdsub = value->rValue; mod->BSIM3pdsubGiven = TRUE; break; case BSIM3_MOD_PVTH0: mod->BSIM3pvth0 = value->rValue; mod->BSIM3pvth0Given = TRUE; break; case BSIM3_MOD_PUA: mod->BSIM3pua = value->rValue; mod->BSIM3puaGiven = TRUE; break; case BSIM3_MOD_PUA1: mod->BSIM3pua1 = value->rValue; mod->BSIM3pua1Given = TRUE; break; case BSIM3_MOD_PUB: mod->BSIM3pub = value->rValue; mod->BSIM3pubGiven = TRUE; break; case BSIM3_MOD_PUB1: mod->BSIM3pub1 = value->rValue; mod->BSIM3pub1Given = TRUE; break; case BSIM3_MOD_PUC: mod->BSIM3puc = value->rValue; mod->BSIM3pucGiven = TRUE; break; case BSIM3_MOD_PUC1: mod->BSIM3puc1 = value->rValue; mod->BSIM3puc1Given = TRUE; break; case BSIM3_MOD_PU0 : mod->BSIM3pu0 = value->rValue; mod->BSIM3pu0Given = TRUE; break; case BSIM3_MOD_PUTE : mod->BSIM3pute = value->rValue; mod->BSIM3puteGiven = TRUE; break; case BSIM3_MOD_PVOFF: mod->BSIM3pvoff = value->rValue; mod->BSIM3pvoffGiven = TRUE; break; case BSIM3_MOD_PDELTA : mod->BSIM3pdelta = value->rValue; mod->BSIM3pdeltaGiven = TRUE; break; case BSIM3_MOD_PRDSW: mod->BSIM3prdsw = value->rValue; mod->BSIM3prdswGiven = TRUE; break; case BSIM3_MOD_PPRWB: mod->BSIM3pprwb = value->rValue; mod->BSIM3pprwbGiven = TRUE; break; case BSIM3_MOD_PPRWG: mod->BSIM3pprwg = value->rValue; mod->BSIM3pprwgGiven = TRUE; break; case BSIM3_MOD_PPRT: mod->BSIM3pprt = value->rValue; mod->BSIM3pprtGiven = TRUE; break; case BSIM3_MOD_PETA0: mod->BSIM3peta0 = value->rValue; mod->BSIM3peta0Given = TRUE; break; case BSIM3_MOD_PETAB: mod->BSIM3petab = value->rValue; mod->BSIM3petabGiven = TRUE; break; case BSIM3_MOD_PPCLM: mod->BSIM3ppclm = value->rValue; mod->BSIM3ppclmGiven = TRUE; break; case BSIM3_MOD_PPDIBL1: mod->BSIM3ppdibl1 = value->rValue; mod->BSIM3ppdibl1Given = TRUE; break; case BSIM3_MOD_PPDIBL2: mod->BSIM3ppdibl2 = value->rValue; mod->BSIM3ppdibl2Given = TRUE; break; case BSIM3_MOD_PPDIBLB: mod->BSIM3ppdiblb = value->rValue; mod->BSIM3ppdiblbGiven = TRUE; break; case BSIM3_MOD_PPSCBE1: mod->BSIM3ppscbe1 = value->rValue; mod->BSIM3ppscbe1Given = TRUE; break; case BSIM3_MOD_PPSCBE2: mod->BSIM3ppscbe2 = value->rValue; mod->BSIM3ppscbe2Given = TRUE; break; case BSIM3_MOD_PPVAG: mod->BSIM3ppvag = value->rValue; mod->BSIM3ppvagGiven = TRUE; break; case BSIM3_MOD_PWR : mod->BSIM3pwr = value->rValue; mod->BSIM3pwrGiven = TRUE; break; case BSIM3_MOD_PDWG : mod->BSIM3pdwg = value->rValue; mod->BSIM3pdwgGiven = TRUE; break; case BSIM3_MOD_PDWB : mod->BSIM3pdwb = value->rValue; mod->BSIM3pdwbGiven = TRUE; break; case BSIM3_MOD_PB0 : mod->BSIM3pb0 = value->rValue; mod->BSIM3pb0Given = TRUE; break; case BSIM3_MOD_PB1 : mod->BSIM3pb1 = value->rValue; mod->BSIM3pb1Given = TRUE; break; case BSIM3_MOD_PALPHA0 : mod->BSIM3palpha0 = value->rValue; mod->BSIM3palpha0Given = TRUE; break; case BSIM3_MOD_PALPHA1 : mod->BSIM3palpha1 = value->rValue; mod->BSIM3palpha1Given = TRUE; break; case BSIM3_MOD_PBETA0 : mod->BSIM3pbeta0 = value->rValue; mod->BSIM3pbeta0Given = TRUE; break; case BSIM3_MOD_PVFB : mod->BSIM3pvfb = value->rValue; mod->BSIM3pvfbGiven = TRUE; break; case BSIM3_MOD_PELM : mod->BSIM3pelm = value->rValue; mod->BSIM3pelmGiven = TRUE; break; case BSIM3_MOD_PCGSL : mod->BSIM3pcgsl = value->rValue; mod->BSIM3pcgslGiven = TRUE; break; case BSIM3_MOD_PCGDL : mod->BSIM3pcgdl = value->rValue; mod->BSIM3pcgdlGiven = TRUE; break; case BSIM3_MOD_PCKAPPA : mod->BSIM3pckappa = value->rValue; mod->BSIM3pckappaGiven = TRUE; break; case BSIM3_MOD_PCF : mod->BSIM3pcf = value->rValue; mod->BSIM3pcfGiven = TRUE; break; case BSIM3_MOD_PCLC : mod->BSIM3pclc = value->rValue; mod->BSIM3pclcGiven = TRUE; break; case BSIM3_MOD_PCLE : mod->BSIM3pcle = value->rValue; mod->BSIM3pcleGiven = TRUE; break; case BSIM3_MOD_PVFBCV : mod->BSIM3pvfbcv = value->rValue; mod->BSIM3pvfbcvGiven = TRUE; break; case BSIM3_MOD_PACDE : mod->BSIM3pacde = value->rValue; mod->BSIM3pacdeGiven = TRUE; break; case BSIM3_MOD_PMOIN : mod->BSIM3pmoin = value->rValue; mod->BSIM3pmoinGiven = TRUE; break; case BSIM3_MOD_PNOFF : mod->BSIM3pnoff = value->rValue; mod->BSIM3pnoffGiven = TRUE; break; case BSIM3_MOD_PVOFFCV : mod->BSIM3pvoffcv = value->rValue; mod->BSIM3pvoffcvGiven = TRUE; break; case BSIM3_MOD_TNOM : mod->BSIM3tnom = value->rValue + CONSTCtoK; mod->BSIM3tnomGiven = TRUE; break; case BSIM3_MOD_CGSO : mod->BSIM3cgso = value->rValue; mod->BSIM3cgsoGiven = TRUE; break; case BSIM3_MOD_CGDO : mod->BSIM3cgdo = value->rValue; mod->BSIM3cgdoGiven = TRUE; break; case BSIM3_MOD_CGBO : mod->BSIM3cgbo = value->rValue; mod->BSIM3cgboGiven = TRUE; break; case BSIM3_MOD_XPART : mod->BSIM3xpart = value->rValue; mod->BSIM3xpartGiven = TRUE; break; case BSIM3_MOD_RSH : mod->BSIM3sheetResistance = value->rValue; mod->BSIM3sheetResistanceGiven = TRUE; break; case BSIM3_MOD_JS : mod->BSIM3jctSatCurDensity = value->rValue; mod->BSIM3jctSatCurDensityGiven = TRUE; break; case BSIM3_MOD_JSW : mod->BSIM3jctSidewallSatCurDensity = value->rValue; mod->BSIM3jctSidewallSatCurDensityGiven = TRUE; break; case BSIM3_MOD_PB : mod->BSIM3bulkJctPotential = value->rValue; mod->BSIM3bulkJctPotentialGiven = TRUE; break; case BSIM3_MOD_MJ : mod->BSIM3bulkJctBotGradingCoeff = value->rValue; mod->BSIM3bulkJctBotGradingCoeffGiven = TRUE; break; case BSIM3_MOD_PBSW : mod->BSIM3sidewallJctPotential = value->rValue; mod->BSIM3sidewallJctPotentialGiven = TRUE; break; case BSIM3_MOD_MJSW : mod->BSIM3bulkJctSideGradingCoeff = value->rValue; mod->BSIM3bulkJctSideGradingCoeffGiven = TRUE; break; case BSIM3_MOD_CJ : mod->BSIM3unitAreaJctCap = value->rValue; mod->BSIM3unitAreaJctCapGiven = TRUE; break; case BSIM3_MOD_CJSW : mod->BSIM3unitLengthSidewallJctCap = value->rValue; mod->BSIM3unitLengthSidewallJctCapGiven = TRUE; break; case BSIM3_MOD_NJ : mod->BSIM3jctEmissionCoeff = value->rValue; mod->BSIM3jctEmissionCoeffGiven = TRUE; break; case BSIM3_MOD_PBSWG : mod->BSIM3GatesidewallJctPotential = value->rValue; mod->BSIM3GatesidewallJctPotentialGiven = TRUE; break; case BSIM3_MOD_MJSWG : mod->BSIM3bulkJctGateSideGradingCoeff = value->rValue; mod->BSIM3bulkJctGateSideGradingCoeffGiven = TRUE; break; case BSIM3_MOD_CJSWG : mod->BSIM3unitLengthGateSidewallJctCap = value->rValue; mod->BSIM3unitLengthGateSidewallJctCapGiven = TRUE; break; case BSIM3_MOD_XTI : mod->BSIM3jctTempExponent = value->rValue; mod->BSIM3jctTempExponentGiven = TRUE; break; case BSIM3_MOD_LINTNOI: mod->BSIM3lintnoi = value->rValue; mod->BSIM3lintnoiGiven = TRUE; break; case BSIM3_MOD_LINT : mod->BSIM3Lint = value->rValue; mod->BSIM3LintGiven = TRUE; break; case BSIM3_MOD_LL : mod->BSIM3Ll = value->rValue; mod->BSIM3LlGiven = TRUE; break; case BSIM3_MOD_LLC : mod->BSIM3Llc = value->rValue; mod->BSIM3LlcGiven = TRUE; break; case BSIM3_MOD_LLN : mod->BSIM3Lln = value->rValue; mod->BSIM3LlnGiven = TRUE; break; case BSIM3_MOD_LW : mod->BSIM3Lw = value->rValue; mod->BSIM3LwGiven = TRUE; break; case BSIM3_MOD_LWC : mod->BSIM3Lwc = value->rValue; mod->BSIM3LwcGiven = TRUE; break; case BSIM3_MOD_LWN : mod->BSIM3Lwn = value->rValue; mod->BSIM3LwnGiven = TRUE; break; case BSIM3_MOD_LWL : mod->BSIM3Lwl = value->rValue; mod->BSIM3LwlGiven = TRUE; break; case BSIM3_MOD_LWLC : mod->BSIM3Lwlc = value->rValue; mod->BSIM3LwlcGiven = TRUE; break; case BSIM3_MOD_LMIN : mod->BSIM3Lmin = value->rValue; mod->BSIM3LminGiven = TRUE; break; case BSIM3_MOD_LMAX : mod->BSIM3Lmax = value->rValue; mod->BSIM3LmaxGiven = TRUE; break; case BSIM3_MOD_WINT : mod->BSIM3Wint = value->rValue; mod->BSIM3WintGiven = TRUE; break; case BSIM3_MOD_WL : mod->BSIM3Wl = value->rValue; mod->BSIM3WlGiven = TRUE; break; case BSIM3_MOD_WLC : mod->BSIM3Wlc = value->rValue; mod->BSIM3WlcGiven = TRUE; break; case BSIM3_MOD_WLN : mod->BSIM3Wln = value->rValue; mod->BSIM3WlnGiven = TRUE; break; case BSIM3_MOD_WW : mod->BSIM3Ww = value->rValue; mod->BSIM3WwGiven = TRUE; break; case BSIM3_MOD_WWC : mod->BSIM3Wwc = value->rValue; mod->BSIM3WwcGiven = TRUE; break; case BSIM3_MOD_WWN : mod->BSIM3Wwn = value->rValue; mod->BSIM3WwnGiven = TRUE; break; case BSIM3_MOD_WWL : mod->BSIM3Wwl = value->rValue; mod->BSIM3WwlGiven = TRUE; break; case BSIM3_MOD_WWLC : mod->BSIM3Wwlc = value->rValue; mod->BSIM3WwlcGiven = TRUE; break; case BSIM3_MOD_WMIN : mod->BSIM3Wmin = value->rValue; mod->BSIM3WminGiven = TRUE; break; case BSIM3_MOD_WMAX : mod->BSIM3Wmax = value->rValue; mod->BSIM3WmaxGiven = TRUE; break; case BSIM3_MOD_XL: mod->BSIM3xl = value->rValue; mod->BSIM3xlGiven = TRUE; break; case BSIM3_MOD_XW: mod->BSIM3xw = value->rValue; mod->BSIM3xwGiven = TRUE; break; case BSIM3_MOD_NOIA : mod->BSIM3oxideTrapDensityA = value->rValue; mod->BSIM3oxideTrapDensityAGiven = TRUE; break; case BSIM3_MOD_NOIB : mod->BSIM3oxideTrapDensityB = value->rValue; mod->BSIM3oxideTrapDensityBGiven = TRUE; break; case BSIM3_MOD_NOIC : mod->BSIM3oxideTrapDensityC = value->rValue; mod->BSIM3oxideTrapDensityCGiven = TRUE; break; case BSIM3_MOD_EM : mod->BSIM3em = value->rValue; mod->BSIM3emGiven = TRUE; break; case BSIM3_MOD_EF : mod->BSIM3ef = value->rValue; mod->BSIM3efGiven = TRUE; break; case BSIM3_MOD_AF : mod->BSIM3af = value->rValue; mod->BSIM3afGiven = TRUE; break; case BSIM3_MOD_KF : mod->BSIM3kf = value->rValue; mod->BSIM3kfGiven = TRUE; break; case BSIM3_MOD_VGS_MAX: mod->BSIM3vgsMax = value->rValue; mod->BSIM3vgsMaxGiven = TRUE; break; case BSIM3_MOD_VGD_MAX: mod->BSIM3vgdMax = value->rValue; mod->BSIM3vgdMaxGiven = TRUE; break; case BSIM3_MOD_VGB_MAX: mod->BSIM3vgbMax = value->rValue; mod->BSIM3vgbMaxGiven = TRUE; break; case BSIM3_MOD_VDS_MAX: mod->BSIM3vdsMax = value->rValue; mod->BSIM3vdsMaxGiven = TRUE; break; case BSIM3_MOD_VBS_MAX: mod->BSIM3vbsMax = value->rValue; mod->BSIM3vbsMaxGiven = TRUE; break; case BSIM3_MOD_VBD_MAX: mod->BSIM3vbdMax = value->rValue; mod->BSIM3vbdMaxGiven = TRUE; break; case BSIM3_MOD_VGSR_MAX: mod->BSIM3vgsrMax = value->rValue; mod->BSIM3vgsrMaxGiven = TRUE; break; case BSIM3_MOD_VGDR_MAX: mod->BSIM3vgdrMax = value->rValue; mod->BSIM3vgdrMaxGiven = TRUE; break; case BSIM3_MOD_VGBR_MAX: mod->BSIM3vgbrMax = value->rValue; mod->BSIM3vgbrMaxGiven = TRUE; break; case BSIM3_MOD_VBSR_MAX: mod->BSIM3vbsrMax = value->rValue; mod->BSIM3vbsrMaxGiven = TRUE; break; case BSIM3_MOD_VBDR_MAX: mod->BSIM3vbdrMax = value->rValue; mod->BSIM3vbdrMaxGiven = TRUE; break; case BSIM3_MOD_NMOS : if(value->iValue) { mod->BSIM3type = 1; mod->BSIM3typeGiven = TRUE; } break; case BSIM3_MOD_PMOS : if(value->iValue) { mod->BSIM3type = - 1; mod->BSIM3typeGiven = TRUE; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3/b3trunc.c0000644000175000017500000000236713546075722021734 0ustar carstencarsten/**** BSIM3v3.3.0, Released by Xuemei Xi 07/29/2005 ****/ /********** * Copyright 2004 Regents of the University of California. All rights reserved. * File: b3trunc.c of BSIM3v3.3.0 * Author: 1995 Min-Chie Jeng and Mansun Chan. * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3trunc( GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { BSIM3model *model = (BSIM3model*)inModel; BSIM3instance *here; #ifdef STEPDEBUG double debugtemp; #endif /* STEPDEBUG */ for (; model != NULL; model = BSIM3nextModel(model)) { for (here = BSIM3instances(model); here != NULL; here = BSIM3nextInstance(here)) { #ifdef STEPDEBUG debugtemp = *timeStep; #endif /* STEPDEBUG */ CKTterr(here->BSIM3qb,ckt,timeStep); CKTterr(here->BSIM3qg,ckt,timeStep); CKTterr(here->BSIM3qd,ckt,timeStep); #ifdef STEPDEBUG if(debugtemp != *timeStep) { printf("device %s reduces step from %g to %g\n", here->BSIM3name,debugtemp,*timeStep); } #endif /* STEPDEBUG */ } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3/b3soachk.c0000644000175000017500000003612413546075722022047 0ustar carstencarsten/********** Copyright 2013 Dietmar Warning. All rights reserved. Author: 2013 Dietmar Warning **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3def.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/cpdefs.h" int BSIM3soaCheck(CKTcircuit *ckt, GENmodel *inModel) { BSIM3model *model = (BSIM3model *) inModel; BSIM3instance *here; double vgs, vgd, vgb, vds, vbs, vbd; /* actual mos voltages */ int maxwarns; static int warns_vgs = 0, warns_vgd = 0, warns_vgb = 0, warns_vds = 0, warns_vbs = 0, warns_vbd = 0; if (!ckt) { warns_vgs = 0; warns_vgd = 0; warns_vgb = 0; warns_vds = 0; warns_vbs = 0; warns_vbd = 0; return OK; } maxwarns = ckt->CKTsoaMaxWarns; for (; model; model = BSIM3nextModel(model)) { for (here = BSIM3instances(model); here; here = BSIM3nextInstance(here)) { vgs = ckt->CKTrhsOld [here->BSIM3gNode] - ckt->CKTrhsOld [here->BSIM3sNodePrime]; vgd = ckt->CKTrhsOld [here->BSIM3gNode] - ckt->CKTrhsOld [here->BSIM3dNodePrime]; vgb = ckt->CKTrhsOld [here->BSIM3gNode] - ckt->CKTrhsOld [here->BSIM3bNode]; vds = ckt->CKTrhsOld [here->BSIM3dNodePrime] - ckt->CKTrhsOld [here->BSIM3sNodePrime]; vbs = ckt->CKTrhsOld [here->BSIM3bNode] - ckt->CKTrhsOld [here->BSIM3sNodePrime]; vbd = ckt->CKTrhsOld [here->BSIM3bNode] - ckt->CKTrhsOld [here->BSIM3dNodePrime]; if (!model->BSIM3vgsrMaxGiven) { if (fabs(vgs) > model->BSIM3vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->BSIM3vgsMax); warns_vgs++; } if (!model->BSIM3vgbMaxGiven) { if (fabs(vgb) > model->BSIM3vgsMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgs_max=%g\n", vgb, model->BSIM3vgsMax); warns_vgb++; } } else { if (fabs(vgb) > model->BSIM3vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM3vgbMax); warns_vgb++; } } } else { if (model->BSIM3type > 0) { if (vgs > model->BSIM3vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->BSIM3vgsMax); warns_vgs++; } if (-1*vgs > model->BSIM3vgsrMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgsr_max=%g\n", vgs, model->BSIM3vgsrMax); warns_vgs++; } } else { if (vgs > model->BSIM3vgsrMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgsr_max=%g\n", vgs, model->BSIM3vgsrMax); warns_vgs++; } if (-1*vgs > model->BSIM3vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->BSIM3vgsMax); warns_vgs++; } } } if (!model->BSIM3vgdrMaxGiven) { if (fabs(vgd) > model->BSIM3vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->BSIM3vgdMax); warns_vgd++; } } else { if (model->BSIM3type > 0) { if (vgd > model->BSIM3vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->BSIM3vgdMax); warns_vgd++; } if (-1*vgd > model->BSIM3vgdrMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgdr_max=%g\n", vgd, model->BSIM3vgdrMax); warns_vgd++; } } else { if (vgd > model->BSIM3vgdrMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgdr_max=%g\n", vgd, model->BSIM3vgdrMax); warns_vgd++; } if (-1*vgd > model->BSIM3vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->BSIM3vgdMax); warns_vgd++; } } } if (fabs(vds) > model->BSIM3vdsMax) if (warns_vds < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vds=%g has exceeded Vds_max=%g\n", vds, model->BSIM3vdsMax); warns_vds++; } if (!model->BSIM3vgbrMaxGiven) { if (fabs(vgb) > model->BSIM3vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM3vgbMax); warns_vgb++; } } else { if (model->BSIM3type > 0) { if (vgb > model->BSIM3vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM3vgbMax); warns_vgb++; } if (-1*vgb > model->BSIM3vgbrMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgbr_max=%g\n", vgb, model->BSIM3vgbrMax); warns_vgb++; } } else { if (vgb > model->BSIM3vgbrMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgbr_max=%g\n", vgb, model->BSIM3vgbrMax); warns_vgb++; } if (-1*vgb > model->BSIM3vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM3vgbMax); warns_vgb++; } } } if (!model->BSIM3vbsrMaxGiven) { if (!model->BSIM3vbsMaxGiven) { if (fabs(vbs) > model->BSIM3vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->BSIM3vbdMax); warns_vbs++; } } else { if (fabs(vbs) > model->BSIM3vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->BSIM3vbsMax); warns_vbs++; } } } else { if (!model->BSIM3vbsMaxGiven) { if (model->BSIM3type > 0) { if (vbs > model->BSIM3vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->BSIM3vbdMax); warns_vbs++; } if (-1*vbs > model->BSIM3vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM3vbsrMax); warns_vbs++; } } else { if (vbs > model->BSIM3vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM3vbsrMax); warns_vbs++; } if (-1*vbs > model->BSIM3vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->BSIM3vbdMax); warns_vbs++; } } } else { if (model->BSIM3type > 0) { if (vbs > model->BSIM3vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->BSIM3vbsMax); warns_vbs++; } if (-1*vbs > model->BSIM3vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM3vbsrMax); warns_vbs++; } } else { if (vbs > model->BSIM3vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM3vbsrMax); warns_vbs++; } if (-1*vbs > model->BSIM3vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->BSIM3vbsMax); warns_vbs++; } } } } if (!model->BSIM3vbdrMaxGiven) { if (fabs(vbd) > model->BSIM3vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->BSIM3vbdMax); warns_vbd++; } } else { if (model->BSIM3type > 0) { if (vbd > model->BSIM3vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->BSIM3vbdMax); warns_vbd++; } if (-1*vbd > model->BSIM3vbdrMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbdr_max=%g\n", vbd, model->BSIM3vbdrMax); warns_vbd++; } } else { if (vbd > model->BSIM3vbdrMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbdr_max=%g\n", vbd, model->BSIM3vbdrMax); warns_vbd++; } if (-1*vbd > model->BSIM3vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->BSIM3vbdMax); warns_vbd++; } } } } } return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim3/ChangeLog0000644000175000017500000000012413546075722021747 0ustar carstencarsten1999-09-06 Arno Peters * b3ld.c: Removed unused variable. tmpk8ny_4pz/src/spicelib/devices/bsim3/b3noi.c0000644000175000017500000002762213546075722021367 0ustar carstencarsten/**** BSIM3v3.3.0, Released by Xuemei Xi 07/29/2005 ****/ /********** * Copyright 2004 Regents of the University of California. All rights reserved. * File: b3noi.c of BSIM3v3.3.0 * Author: 1995 Gary W. Ng and Min-Chie Jeng. * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi * Modified by Xuemei Xi, 10/05/2001. **********/ #include "ngspice/ngspice.h" #include "bsim3def.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" #include "ngspice/const.h" /* jwan */ /* * BSIM3noise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with MOSFET's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the MOSFET's is summed with the variable "OnDens". */ /* Channel thermal and flicker noises are calculated based on the value of model->BSIM3noiMod. If model->BSIM3noiMod = 1, Channel thermal noise = SPICE2 model Flicker noise = SPICE2 model If model->BSIM3noiMod = 2, Channel thermal noise = BSIM3 model Flicker noise = BSIM3 model If model->BSIM3noiMod = 3, Channel thermal noise = SPICE2 model Flicker noise = BSIM3 model If model->BSIM3noiMod = 4, Channel thermal noise = BSIM3 model Flicker noise = SPICE2 model If model->BSIM3noiMod = 5, Channel thermal noise = SPICE2 model with linear/sat fix Flicker noise = SPICE2 model If model->BSIM3noiMod = 6, Channel thermal noise = SPICE2 model with linear/sat fix Flicker noise = BSIM3 model */ /* * JX: 1/f noise model is smoothed out 12/18/01. */ static double StrongInversionNoiseEval( double Vds, BSIM3model *model, BSIM3instance *here, double freq, double temp) { struct bsim3SizeDependParam *pParam; double cd, esat, DelClm, EffFreq, N0, Nl, Leff, Leffsq; double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi; pParam = here->pParam; cd = fabs(here->BSIM3cd); Leff = pParam->BSIM3leff - 2.0 * model->BSIM3lintnoi; Leffsq = Leff * Leff; esat = 2.0 * pParam->BSIM3vsattemp / here->BSIM3ueff; if(model->BSIM3em<=0.0) DelClm = 0.0; else { T0 = ((((Vds - here->BSIM3Vdseff) / pParam->BSIM3litl) + model->BSIM3em) / esat); DelClm = pParam->BSIM3litl * log (MAX(T0, N_MINLOG)); if (DelClm < 0.0) DelClm = 0.0; /* bugfix */ } EffFreq = pow(freq, model->BSIM3ef); T1 = CHARGE * CHARGE * 8.62e-5 * cd * temp * here->BSIM3ueff; T2 = 1.0e8 * EffFreq * here->BSIM3Abulk * model->BSIM3cox * Leffsq; N0 = model->BSIM3cox * here->BSIM3Vgsteff / CHARGE; Nl = model->BSIM3cox * here->BSIM3Vgsteff * (1.0 - here->BSIM3AbovVgst2Vtm * here->BSIM3Vdseff) / CHARGE; T3 = model->BSIM3oxideTrapDensityA * log(MAX(((N0 + 2.0e14) / (Nl + 2.0e14)), N_MINLOG)); T4 = model->BSIM3oxideTrapDensityB * (N0 - Nl); T5 = model->BSIM3oxideTrapDensityC * 0.5 * (N0 * N0 - Nl * Nl); T6 = 8.62e-5 * temp * cd * cd; T7 = 1.0e8 * EffFreq * Leffsq * pParam->BSIM3weff; T8 = model->BSIM3oxideTrapDensityA + model->BSIM3oxideTrapDensityB * Nl + model->BSIM3oxideTrapDensityC * Nl * Nl; T9 = (Nl + 2.0e14) * (Nl + 2.0e14); Ssi = T1 / T2 * (T3 + T4 + T5) + T6 / T7 * DelClm * T8 / T9; return Ssi; } int BSIM3noise ( int mode, int operation, GENmodel *inModel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; BSIM3model *model = (BSIM3model *)inModel; BSIM3instance *here; struct bsim3SizeDependParam *pParam; double tempOnoise; double tempInoise; double noizDens[BSIM3NSRCS]; double lnNdens[BSIM3NSRCS]; double vds; double T1, T10, T11; double Ssi, Swi; double m; int i; /* define the names of the noise sources */ static char *BSIM3nNames[BSIM3NSRCS] = { /* Note that we have to keep the order */ ".rd", /* noise due to rd */ /* consistent with the index definitions */ ".rs", /* noise due to rs */ /* in BSIM3defs.h */ ".id", /* noise due to id */ ".1overf", /* flicker (1/f) noise */ "" /* total transistor noise */ }; for (; model != NULL; model = BSIM3nextModel(model)) { for (here = BSIM3instances(model); here != NULL; here = BSIM3nextInstance(here)) { pParam = here->pParam; switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i = 0; i < BSIM3NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise.%s%s", here->BSIM3name, BSIM3nNames[i]); } break; case INT_NOIZ: for (i = 0; i < BSIM3NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total.%s%s", here->BSIM3name, BSIM3nNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total.%s%s", here->BSIM3name, BSIM3nNames[i]); } break; } } break; case N_CALC: m = here->BSIM3m; switch (mode) { case N_DENS: NevalSrc(&noizDens[BSIM3RDNOIZ], &lnNdens[BSIM3RDNOIZ], ckt, THERMNOISE, here->BSIM3dNodePrime, here->BSIM3dNode, here->BSIM3drainConductance * m); NevalSrc(&noizDens[BSIM3RSNOIZ], &lnNdens[BSIM3RSNOIZ], ckt, THERMNOISE, here->BSIM3sNodePrime, here->BSIM3sNode, here->BSIM3sourceConductance * m); switch( model->BSIM3noiMod ) { case 1: case 3: NevalSrc(&noizDens[BSIM3IDNOIZ], &lnNdens[BSIM3IDNOIZ], ckt, THERMNOISE, here->BSIM3dNodePrime, here->BSIM3sNodePrime, 2.0 * fabs(here->BSIM3gm + here->BSIM3gds + here->BSIM3gmbs) / 3.0 * m); break; case 5: case 6: vds = MIN(*(ckt->CKTstates[0] + here->BSIM3vds), here->BSIM3vdsat); NevalSrc(&noizDens[BSIM3IDNOIZ], &lnNdens[BSIM3IDNOIZ], ckt, THERMNOISE, here->BSIM3dNodePrime, here->BSIM3sNodePrime, (3.0 - vds / here->BSIM3vdsat) * fabs(here->BSIM3gm + here->BSIM3gds + here->BSIM3gmbs) / 3.0 * m); break; case 2: case 4: NevalSrc(&noizDens[BSIM3IDNOIZ], &lnNdens[BSIM3IDNOIZ], ckt, THERMNOISE, here->BSIM3dNodePrime, here->BSIM3sNodePrime, (m * here->BSIM3ueff * fabs(here->BSIM3qinv) / (pParam->BSIM3leff * pParam->BSIM3leff + here->BSIM3ueff *fabs(here->BSIM3qinv) * here->BSIM3rds))); /* bugfix */ break; } NevalSrc(&noizDens[BSIM3FLNOIZ], NULL, ckt, N_GAIN, here->BSIM3dNodePrime, here->BSIM3sNodePrime, (double) 0.0); switch( model->BSIM3noiMod ) { case 1: case 4: case 5: noizDens[BSIM3FLNOIZ] *= m * model->BSIM3kf * exp(model->BSIM3af * log(MAX(fabs(here->BSIM3cd), N_MINLOG))) / (pow(data->freq, model->BSIM3ef) * pParam->BSIM3leff * pParam->BSIM3leff * model->BSIM3cox); break; case 2: case 3: case 6: vds = *(ckt->CKTstates[0] + here->BSIM3vds); if (vds < 0.0) { vds = -vds; } Ssi = StrongInversionNoiseEval(vds, model, here, data->freq, ckt->CKTtemp); T10 = model->BSIM3oxideTrapDensityA * 8.62e-5 * ckt->CKTtemp; T11 = pParam->BSIM3weff * pParam->BSIM3leff * pow(data->freq, model->BSIM3ef) * 4.0e36; Swi = T10 / T11 * here->BSIM3cd * here->BSIM3cd; T1 = Swi + Ssi; if (T1 > 0.0) noizDens[BSIM3FLNOIZ] *= m * (Ssi * Swi) / T1; else noizDens[BSIM3FLNOIZ] *= 0.0; break; } lnNdens[BSIM3FLNOIZ] = log(MAX(noizDens[BSIM3FLNOIZ], N_MINLOG)); noizDens[BSIM3TOTNOIZ] = noizDens[BSIM3RDNOIZ] + noizDens[BSIM3RSNOIZ] + noizDens[BSIM3IDNOIZ] + noizDens[BSIM3FLNOIZ]; lnNdens[BSIM3TOTNOIZ] = log(MAX(noizDens[BSIM3TOTNOIZ], N_MINLOG)); *OnDens += noizDens[BSIM3TOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to initialize our "history" variables. */ for (i = 0; i < BSIM3NSRCS; i++) { here->BSIM3nVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i = 0; i < BSIM3NSRCS; i++) { here->BSIM3nVar[OUTNOIZ][i] = 0.0; here->BSIM3nVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0, we have to integrate. */ for (i = 0; i < BSIM3NSRCS; i++) { if (i != BSIM3TOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], here->BSIM3nVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv, lnNdens[i] + data->lnGainInv, here->BSIM3nVar[LNLSTDENS][i] + data->lnGainInv, data); here->BSIM3nVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { here->BSIM3nVar[OUTNOIZ][i] += tempOnoise; here->BSIM3nVar[OUTNOIZ][BSIM3TOTNOIZ] += tempOnoise; here->BSIM3nVar[INNOIZ][i] += tempInoise; here->BSIM3nVar[INNOIZ][BSIM3TOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i = 0; i < BSIM3NSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i = 0; i < BSIM3NSRCS; i++) { data->outpVector[data->outNumber++] = here->BSIM3nVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = here->BSIM3nVar[INNOIZ][i]; } } break; } break; case N_CLOSE: /* do nothing, the main calling routine will close */ return (OK); break; /* the plots */ } /* switch (operation) */ } /* for here */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3/bsim3itf.h0000644000175000017500000000036313546075722022073 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: 1991 JianHui Huang and Min-Chie Jeng. File: bsim3itf.h **********/ #ifndef DEV_BSIM3 #define DEV_BSIM3 SPICEdev *get_bsim3_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/bsim3/bsim3ext.h0000644000175000017500000000263613546075722022116 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1991 JianHui Huang and Min-Chie Jeng. Modified by Yuhua Cheng to use BSIM3v3 in Spice3f5 (Jan. 1997) File: bsim3ext.h **********/ extern int BSIM3acLoad(GENmodel *,CKTcircuit*); extern int BSIM3ask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*); extern int BSIM3convTest(GENmodel *,CKTcircuit*); extern int BSIM3getic(GENmodel*,CKTcircuit*); extern int BSIM3load(GENmodel*,CKTcircuit*); extern int BSIM3mAsk(CKTcircuit*,GENmodel *,int, IFvalue*); extern int BSIM3mDelete(GENmodel*); extern int BSIM3mParam(int,IFvalue*,GENmodel*); extern void BSIM3mosCap(CKTcircuit*, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*); extern int BSIM3param(int,IFvalue*,GENinstance*,IFvalue*); extern int BSIM3pzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int BSIM3setup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int BSIM3temp(GENmodel*,CKTcircuit*); extern int BSIM3trunc(GENmodel*,CKTcircuit*,double*); extern int BSIM3noise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int BSIM3unsetup(GENmodel*,CKTcircuit*); extern int BSIM3soaCheck(CKTcircuit *, GENmodel *); tmpk8ny_4pz/src/spicelib/devices/bsim3/b3getic.c0000644000175000017500000000232613546075722021667 0ustar carstencarsten/**** BSIM3v3.3.0, Released by Xuemei Xi 07/29/2005 ****/ /********** * Copyright 2004 Regents of the University of California. All rights reserved. * File: b3getic.c of BSIM3v3.3.0 * Author: 1995 Min-Chie Jeng and Mansun Chan. * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3getic( GENmodel *inModel, CKTcircuit *ckt) { BSIM3model *model = (BSIM3model*)inModel; BSIM3instance *here; for (; model ; model = BSIM3nextModel(model)) { for (here = BSIM3instances(model); here; here = BSIM3nextInstance(here)) { if (!here->BSIM3icVBSGiven) { here->BSIM3icVBS = *(ckt->CKTrhs + here->BSIM3bNode) - *(ckt->CKTrhs + here->BSIM3sNode); } if (!here->BSIM3icVDSGiven) { here->BSIM3icVDS = *(ckt->CKTrhs + here->BSIM3dNode) - *(ckt->CKTrhs + here->BSIM3sNode); } if (!here->BSIM3icVGSGiven) { here->BSIM3icVGS = *(ckt->CKTrhs + here->BSIM3gNode) - *(ckt->CKTrhs + here->BSIM3sNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3/b3.c0000644000175000017500000010335413546075722020656 0ustar carstencarsten/**** BSIM3v3.3.0 beta, Released by Xuemei Xi 07/29/2005 ****/ /********** * Copyright 2004 Regents of the University of California. All rights reserved. * File: b3.c of BSIM3v3.3.0 * Author: 1995 Min-Chie Jeng and Mansun Chan * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "bsim3def.h" #include "ngspice/suffix.h" IFparm BSIM3pTable[] = { /* parameters */ IOP( "l", BSIM3_L, IF_REAL , "Length"), IOP( "w", BSIM3_W, IF_REAL , "Width"), IOP( "m", BSIM3_M, IF_REAL , "Parallel multiplier"), IOP( "ad", BSIM3_AD, IF_REAL , "Drain area"), IOP( "as", BSIM3_AS, IF_REAL , "Source area"), IOP( "pd", BSIM3_PD, IF_REAL , "Drain perimeter"), IOP( "ps", BSIM3_PS, IF_REAL , "Source perimeter"), IOP( "nrd", BSIM3_NRD, IF_REAL , "Number of squares in drain"), IOP( "nrs", BSIM3_NRS, IF_REAL , "Number of squares in source"), IOP( "off", BSIM3_OFF, IF_FLAG , "Device is initially off"), IOP( "nqsmod", BSIM3_NQSMOD, IF_INTEGER, "Non-quasi-static model selector"), IOP( "acnqsmod", BSIM3_ACNQSMOD, IF_INTEGER, "AC NQS model selector"), IOP( "geo", BSIM3_GEO, IF_INTEGER, "ACM model drain/source connection"), IOP( "delvto", BSIM3_DELVTO, IF_REAL, "Zero bias threshold voltage variation"), IOP( "mulu0", BSIM3_MULU0, IF_REAL, "Low field mobility multiplier"), IP( "ic", BSIM3_IC, IF_REALVEC , "Vector of DS,GS,BS initial voltages"), OP( "gmbs", BSIM3_GMBS, IF_REAL, "Gmb"), OP( "gm", BSIM3_GM, IF_REAL, "Gm"), OP( "gds", BSIM3_GDS, IF_REAL, "Gds"), OP( "vdsat", BSIM3_VDSAT, IF_REAL, "Vdsat"), OP( "vth", BSIM3_VON, IF_REAL, "Vth"), OP( "id", BSIM3_CD, IF_REAL, "Ids"), OP( "vbs", BSIM3_VBS, IF_REAL, "Vbs"), OP( "vgs", BSIM3_VGS, IF_REAL, "Vgs"), OP( "vds", BSIM3_VDS, IF_REAL, "Vds"), OP( "ibd", BSIM3_CBD, IF_REAL, "Ibd"), /* newly added from here */ OP( "ibs", BSIM3_CBS, IF_REAL, "Ibs"), OP( "gbd", BSIM3_GBD, IF_REAL, "gbd"), OP( "gbs", BSIM3_GBS, IF_REAL, "gbs"), OP( "qb", BSIM3_QB, IF_REAL, "Qbulk"), OP( "cqb", BSIM3_CQB, IF_REAL, "CQbulk"), OP( "qg", BSIM3_QG, IF_REAL, "Qgate"), OP( "cqg", BSIM3_CQG, IF_REAL, "CQgate"), OP( "qd", BSIM3_QD, IF_REAL, "Qdrain"), OP( "cqd", BSIM3_CQD, IF_REAL, "CQdrain"), OP( "cgg", BSIM3_CGG, IF_REAL, "Cggb"), OP( "cgd", BSIM3_CGD, IF_REAL, "Cgdb"), OP( "cgs", BSIM3_CGS, IF_REAL, "Cgsb"), OP( "cdg", BSIM3_CDG, IF_REAL, "Cdgb"), OP( "cdd", BSIM3_CDD, IF_REAL, "Cddb"), OP( "cds", BSIM3_CDS, IF_REAL, "Cdsb"), OP( "cbg", BSIM3_CBG, IF_REAL, "Cbgb"), OP( "cbd", BSIM3_CBDB, IF_REAL, "Cbdb"), OP( "cbs", BSIM3_CBSB, IF_REAL, "Cbsb"), OP( "capbd", BSIM3_CAPBD, IF_REAL, "Capbd"), OP( "capbs", BSIM3_CAPBS, IF_REAL, "Capbs"), }; IFparm BSIM3mPTable[] = { /* model parameters */ IOP( "capmod", BSIM3_MOD_CAPMOD, IF_INTEGER, "Capacitance model selector"), IOP( "mobmod", BSIM3_MOD_MOBMOD, IF_INTEGER, "Mobility model selector"), IOP( "noimod", BSIM3_MOD_NOIMOD, IF_INTEGER, "Noise model selector"), IOP( "nqsmod", BSIM3_MOD_NQSMOD, IF_INTEGER, "Non-quasi-static model selector"), IOP( "acnqsmod", BSIM3_MOD_ACNQSMOD, IF_INTEGER, "AC NQS model selector"), IOP( "acm", BSIM3_MOD_ACMMOD, IF_INTEGER, "Area calculation method selector"), IOP( "calcacm", BSIM3_MOD_CALCACM, IF_INTEGER, "Area calculation method ACM=12"), IOP( "paramchk", BSIM3_MOD_PARAMCHK, IF_INTEGER, "Model parameter checking selector"), IOP( "binunit", BSIM3_MOD_BINUNIT, IF_INTEGER, "Bin unit selector"), IOP( "version", BSIM3_MOD_VERSION, IF_STRING, " parameter for model version"), IOP( "tox", BSIM3_MOD_TOX, IF_REAL, "Gate oxide thickness in meters"), IOP( "toxm", BSIM3_MOD_TOXM, IF_REAL, "Gate oxide thickness used in extraction"), IOP( "cdsc", BSIM3_MOD_CDSC, IF_REAL, "Drain/Source and channel coupling capacitance"), IOP( "cdscb", BSIM3_MOD_CDSCB, IF_REAL, "Body-bias dependence of cdsc"), IOP( "cdscd", BSIM3_MOD_CDSCD, IF_REAL, "Drain-bias dependence of cdsc"), IOP( "cit", BSIM3_MOD_CIT, IF_REAL, "Interface state capacitance"), IOP( "nfactor", BSIM3_MOD_NFACTOR, IF_REAL, "Subthreshold swing Coefficient"), IOP( "xj", BSIM3_MOD_XJ, IF_REAL, "Junction depth in meters"), IOP( "vsat", BSIM3_MOD_VSAT, IF_REAL, "Saturation velocity at tnom"), IOP( "at", BSIM3_MOD_AT, IF_REAL, "Temperature coefficient of vsat"), IOP( "a0", BSIM3_MOD_A0, IF_REAL, "Non-uniform depletion width effect coefficient."), IOP( "ags", BSIM3_MOD_AGS, IF_REAL, "Gate bias coefficient of Abulk."), IOP( "a1", BSIM3_MOD_A1, IF_REAL, "Non-saturation effect coefficient"), IOP( "a2", BSIM3_MOD_A2, IF_REAL, "Non-saturation effect coefficient"), IOP( "keta", BSIM3_MOD_KETA, IF_REAL, "Body-bias coefficient of non-uniform depletion width effect."), IOP( "nsub", BSIM3_MOD_NSUB, IF_REAL, "Substrate doping concentration"), IOP( "nch", BSIM3_MOD_NPEAK, IF_REAL, "Channel doping concentration"), IOP( "ngate", BSIM3_MOD_NGATE, IF_REAL, "Poly-gate doping concentration"), IOP( "gamma1", BSIM3_MOD_GAMMA1, IF_REAL, "Vth body coefficient"), IOP( "gamma2", BSIM3_MOD_GAMMA2, IF_REAL, "Vth body coefficient"), IOP( "vbx", BSIM3_MOD_VBX, IF_REAL, "Vth transition body Voltage"), IOP( "vbm", BSIM3_MOD_VBM, IF_REAL, "Maximum body voltage"), IOP( "xt", BSIM3_MOD_XT, IF_REAL, "Doping depth"), IOP( "k1", BSIM3_MOD_K1, IF_REAL, "Bulk effect coefficient 1"), IOP( "kt1", BSIM3_MOD_KT1, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt1l", BSIM3_MOD_KT1L, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt2", BSIM3_MOD_KT2, IF_REAL, "Body-coefficient of kt1"), IOP( "k2", BSIM3_MOD_K2, IF_REAL, "Bulk effect coefficient 2"), IOP( "k3", BSIM3_MOD_K3, IF_REAL, "Narrow width effect coefficient"), IOP( "k3b", BSIM3_MOD_K3B, IF_REAL, "Body effect coefficient of k3"), IOP( "w0", BSIM3_MOD_W0, IF_REAL, "Narrow width effect parameter"), IOP( "nlx", BSIM3_MOD_NLX, IF_REAL, "Lateral non-uniform doping effect"), IOP( "dvt0", BSIM3_MOD_DVT0, IF_REAL, "Short channel effect coeff. 0"), IOP( "dvt1", BSIM3_MOD_DVT1, IF_REAL, "Short channel effect coeff. 1"), IOP( "dvt2", BSIM3_MOD_DVT2, IF_REAL, "Short channel effect coeff. 2"), IOP( "dvt0w", BSIM3_MOD_DVT0W, IF_REAL, "Narrow Width coeff. 0"), IOP( "dvt1w", BSIM3_MOD_DVT1W, IF_REAL, "Narrow Width effect coeff. 1"), IOP( "dvt2w", BSIM3_MOD_DVT2W, IF_REAL, "Narrow Width effect coeff. 2"), IOP( "drout", BSIM3_MOD_DROUT, IF_REAL, "DIBL coefficient of output resistance"), IOP( "dsub", BSIM3_MOD_DSUB, IF_REAL, "DIBL coefficient in the subthreshold region"), IOP( "vth0", BSIM3_MOD_VTH0, IF_REAL,"Threshold voltage"), IOPR("vtho", BSIM3_MOD_VTH0, IF_REAL,"Threshold voltage"), IOP( "ua", BSIM3_MOD_UA, IF_REAL, "Linear gate dependence of mobility"), IOP( "ua1", BSIM3_MOD_UA1, IF_REAL, "Temperature coefficient of ua"), IOP( "ub", BSIM3_MOD_UB, IF_REAL, "Quadratic gate dependence of mobility"), IOP( "ub1", BSIM3_MOD_UB1, IF_REAL, "Temperature coefficient of ub"), IOP( "uc", BSIM3_MOD_UC, IF_REAL, "Body-bias dependence of mobility"), IOP( "uc1", BSIM3_MOD_UC1, IF_REAL, "Temperature coefficient of uc"), IOP( "u0", BSIM3_MOD_U0, IF_REAL, "Low-field mobility at Tnom"), IOP( "ute", BSIM3_MOD_UTE, IF_REAL, "Temperature coefficient of mobility"), IOP( "voff", BSIM3_MOD_VOFF, IF_REAL, "Threshold voltage offset"), IOP( "tnom", BSIM3_MOD_TNOM, IF_REAL, "Parameter measurement temperature"), IOP( "cgso", BSIM3_MOD_CGSO, IF_REAL, "Gate-source overlap capacitance per width"), IOP( "cgdo", BSIM3_MOD_CGDO, IF_REAL, "Gate-drain overlap capacitance per width"), IOP( "cgbo", BSIM3_MOD_CGBO, IF_REAL, "Gate-bulk overlap capacitance per length"), IOP( "xpart", BSIM3_MOD_XPART, IF_REAL, "Channel charge partitioning"), IOP( "elm", BSIM3_MOD_ELM, IF_REAL, "Non-quasi-static Elmore Constant Parameter"), IOP( "delta", BSIM3_MOD_DELTA, IF_REAL, "Effective Vds parameter"), IOP( "rsh", BSIM3_MOD_RSH, IF_REAL, "Source-drain sheet resistance"), IOP( "rdsw", BSIM3_MOD_RDSW, IF_REAL, "Source-drain resistance per width"), IOP( "prwg", BSIM3_MOD_PRWG, IF_REAL, "Gate-bias effect on parasitic resistance "), IOP( "prwb", BSIM3_MOD_PRWB, IF_REAL, "Body-effect on parasitic resistance "), IOP( "prt", BSIM3_MOD_PRT, IF_REAL, "Temperature coefficient of parasitic resistance "), IOP( "eta0", BSIM3_MOD_ETA0, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "etab", BSIM3_MOD_ETAB, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "pclm", BSIM3_MOD_PCLM, IF_REAL, "Channel length modulation Coefficient"), IOP( "pdiblc1", BSIM3_MOD_PDIBL1, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblc2", BSIM3_MOD_PDIBL2, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblcb", BSIM3_MOD_PDIBLB, IF_REAL, "Body-effect on drain-induced barrier lowering"), IOP( "pscbe1", BSIM3_MOD_PSCBE1, IF_REAL, "Substrate current body-effect coefficient"), IOP( "pscbe2", BSIM3_MOD_PSCBE2, IF_REAL, "Substrate current body-effect coefficient"), IOP( "pvag", BSIM3_MOD_PVAG, IF_REAL, "Gate dependence of output resistance parameter"), IOP( "js", BSIM3_MOD_JS, IF_REAL, "Source/drain junction reverse saturation current density"), IOP( "jsw", BSIM3_MOD_JSW, IF_REAL, "Sidewall junction reverse saturation current density"), IOP( "pb", BSIM3_MOD_PB, IF_REAL, "Source/drain junction built-in potential"), IOP( "nj", BSIM3_MOD_NJ, IF_REAL, "Source/drain junction emission coefficient"), IOP( "xti", BSIM3_MOD_XTI, IF_REAL, "Junction current temperature exponent"), IOP( "mj", BSIM3_MOD_MJ, IF_REAL, "Source/drain bottom junction capacitance grading coefficient"), IOP( "pbsw", BSIM3_MOD_PBSW, IF_REAL, "Source/drain sidewall junction capacitance built in potential"), IOP( "mjsw", BSIM3_MOD_MJSW, IF_REAL, "Source/drain sidewall junction capacitance grading coefficient"), IOP( "pbswg", BSIM3_MOD_PBSWG, IF_REAL, "Source/drain (gate side) sidewall junction capacitance built in potential"), IOP( "mjswg", BSIM3_MOD_MJSWG, IF_REAL, "Source/drain (gate side) sidewall junction capacitance grading coefficient"), IOP( "cj", BSIM3_MOD_CJ, IF_REAL, "Source/drain bottom junction capacitance per unit area"), IOP( "vfbcv", BSIM3_MOD_VFBCV, IF_REAL, "Flat Band Voltage parameter for capmod=0 only"), IOP( "vfb", BSIM3_MOD_VFB, IF_REAL, "Flat Band Voltage"), IOP( "cjsw", BSIM3_MOD_CJSW, IF_REAL, "Source/drain sidewall junction capacitance per unit periphery"), IOP( "cjswg", BSIM3_MOD_CJSWG, IF_REAL, "Source/drain (gate side) sidewall junction capacitance per unit width"), IOP( "tpb", BSIM3_MOD_TPB, IF_REAL, "Temperature coefficient of pb"), IOP( "tcj", BSIM3_MOD_TCJ, IF_REAL, "Temperature coefficient of cj"), IOP( "tpbsw", BSIM3_MOD_TPBSW, IF_REAL, "Temperature coefficient of pbsw"), IOP( "tcjsw", BSIM3_MOD_TCJSW, IF_REAL, "Temperature coefficient of cjsw"), IOP( "tpbswg", BSIM3_MOD_TPBSWG, IF_REAL, "Temperature coefficient of pbswg"), IOP( "tcjswg", BSIM3_MOD_TCJSWG, IF_REAL, "Temperature coefficient of cjswg"), IOP( "acde", BSIM3_MOD_ACDE, IF_REAL, "Exponential coefficient for finite charge thickness"), IOP( "moin", BSIM3_MOD_MOIN, IF_REAL, "Coefficient for gate-bias dependent surface potential"), IOP( "noff", BSIM3_MOD_NOFF, IF_REAL, "C-V turn-on/off parameter"), IOP( "voffcv", BSIM3_MOD_VOFFCV, IF_REAL, "C-V lateral-shift parameter"), IOP( "lintnoi", BSIM3_MOD_LINTNOI, IF_REAL, "lint offset for noise calculation"), IOP( "lint", BSIM3_MOD_LINT, IF_REAL, "Length reduction parameter"), IOP( "ll", BSIM3_MOD_LL, IF_REAL, "Length reduction parameter"), IOP( "llc", BSIM3_MOD_LLC, IF_REAL, "Length reduction parameter for CV"), IOP( "lln", BSIM3_MOD_LLN, IF_REAL, "Length reduction parameter"), IOP( "lw", BSIM3_MOD_LW, IF_REAL, "Length reduction parameter"), IOP( "lwc", BSIM3_MOD_LWC, IF_REAL, "Length reduction parameter for CV"), IOP( "lwn", BSIM3_MOD_LWN, IF_REAL, "Length reduction parameter"), IOP( "lwl", BSIM3_MOD_LWL, IF_REAL, "Length reduction parameter"), IOP( "lwlc", BSIM3_MOD_LWLC, IF_REAL, "Length reduction parameter for CV"), IOP( "lmin", BSIM3_MOD_LMIN, IF_REAL, "Minimum length for the model"), IOP( "lmax", BSIM3_MOD_LMAX, IF_REAL, "Maximum length for the model"), IOP( "xl", BSIM3_MOD_XL, IF_REAL, "Length correction parameter"), IOP( "xw", BSIM3_MOD_XW, IF_REAL, "Width correction parameter"), IOP( "wr", BSIM3_MOD_WR, IF_REAL, "Width dependence of rds"), IOP( "wint", BSIM3_MOD_WINT, IF_REAL, "Width reduction parameter"), IOP( "dwg", BSIM3_MOD_DWG, IF_REAL, "Width reduction parameter"), IOP( "dwb", BSIM3_MOD_DWB, IF_REAL, "Width reduction parameter"), IOP( "wl", BSIM3_MOD_WL, IF_REAL, "Width reduction parameter"), IOP( "wlc", BSIM3_MOD_WLC, IF_REAL, "Width reduction parameter for CV"), IOP( "wln", BSIM3_MOD_WLN, IF_REAL, "Width reduction parameter"), IOP( "ww", BSIM3_MOD_WW, IF_REAL, "Width reduction parameter"), IOP( "wwc", BSIM3_MOD_WWC, IF_REAL, "Width reduction parameter for CV"), IOP( "wwn", BSIM3_MOD_WWN, IF_REAL, "Width reduction parameter"), IOP( "wwl", BSIM3_MOD_WWL, IF_REAL, "Width reduction parameter"), IOP( "wwlc", BSIM3_MOD_WWLC, IF_REAL, "Width reduction parameter for CV"), IOP( "wmin", BSIM3_MOD_WMIN, IF_REAL, "Minimum width for the model"), IOP( "wmax", BSIM3_MOD_WMAX, IF_REAL, "Maximum width for the model"), IOP( "b0", BSIM3_MOD_B0, IF_REAL, "Abulk narrow width parameter"), IOP( "b1", BSIM3_MOD_B1, IF_REAL, "Abulk narrow width parameter"), IOP( "cgsl", BSIM3_MOD_CGSL, IF_REAL, "New C-V model parameter"), IOP( "cgdl", BSIM3_MOD_CGDL, IF_REAL, "New C-V model parameter"), IOP( "ckappa", BSIM3_MOD_CKAPPA, IF_REAL, "New C-V model parameter"), IOP( "cf", BSIM3_MOD_CF, IF_REAL, "Fringe capacitance parameter"), IOP( "clc", BSIM3_MOD_CLC, IF_REAL, "Vdsat parameter for C-V model"), IOP( "cle", BSIM3_MOD_CLE, IF_REAL, "Vdsat parameter for C-V model"), IOP( "dwc", BSIM3_MOD_DWC, IF_REAL, "Delta W for C-V model"), IOP( "dlc", BSIM3_MOD_DLC, IF_REAL, "Delta L for C-V model"), IOP( "hdif", BSIM3_MOD_HDIF, IF_REAL, "ACM Parameter: Distance Gate - contact"), IOP( "ldif", BSIM3_MOD_LDIF, IF_REAL, "ACM Parameter: Length of LDD Gate-Source/Drain"), IOP( "ld", BSIM3_MOD_LD, IF_REAL, "ACM Parameter: Length of LDD under Gate"), IOP( "rd", BSIM3_MOD_RD, IF_REAL, "ACM Parameter: Resistance of LDD drain side"), IOP( "rs", BSIM3_MOD_RS, IF_REAL, "ACM Parameter: Resistance of LDD source side"), IOP( "rdc", BSIM3_MOD_RDC, IF_REAL, "ACM Parameter: Resistance contact drain side"), IOP( "rsc", BSIM3_MOD_RSC, IF_REAL, "ACM Parameter: Resistance contact source side"), IOP( "wmlt", BSIM3_MOD_WMLT, IF_REAL, "ACM Parameter: Width shrink factor"), IOP( "alpha0", BSIM3_MOD_ALPHA0, IF_REAL, "substrate current model parameter"), IOP( "alpha1", BSIM3_MOD_ALPHA1, IF_REAL, "substrate current model parameter"), IOP( "beta0", BSIM3_MOD_BETA0, IF_REAL, "substrate current model parameter"), IOP( "ijth", BSIM3_MOD_IJTH, IF_REAL, "Diode limiting current"), IOP( "lcdsc", BSIM3_MOD_LCDSC, IF_REAL, "Length dependence of cdsc"), IOP( "lcdscb", BSIM3_MOD_LCDSCB, IF_REAL, "Length dependence of cdscb"), IOP( "lcdscd", BSIM3_MOD_LCDSCD, IF_REAL, "Length dependence of cdscd"), IOP( "lcit", BSIM3_MOD_LCIT, IF_REAL, "Length dependence of cit"), IOP( "lnfactor", BSIM3_MOD_LNFACTOR, IF_REAL, "Length dependence of nfactor"), IOP( "lxj", BSIM3_MOD_LXJ, IF_REAL, "Length dependence of xj"), IOP( "lvsat", BSIM3_MOD_LVSAT, IF_REAL, "Length dependence of vsat"), IOP( "lat", BSIM3_MOD_LAT, IF_REAL, "Length dependence of at"), IOP( "la0", BSIM3_MOD_LA0, IF_REAL, "Length dependence of a0"), IOP( "lags", BSIM3_MOD_LAGS, IF_REAL, "Length dependence of ags"), IOP( "la1", BSIM3_MOD_LA1, IF_REAL, "Length dependence of a1"), IOP( "la2", BSIM3_MOD_LA2, IF_REAL, "Length dependence of a2"), IOP( "lketa", BSIM3_MOD_LKETA, IF_REAL, "Length dependence of keta"), IOP( "lnsub", BSIM3_MOD_LNSUB, IF_REAL, "Length dependence of nsub"), IOP( "lnch", BSIM3_MOD_LNPEAK, IF_REAL, "Length dependence of nch"), IOP( "lngate", BSIM3_MOD_LNGATE, IF_REAL, "Length dependence of ngate"), IOP( "lgamma1", BSIM3_MOD_LGAMMA1, IF_REAL, "Length dependence of gamma1"), IOP( "lgamma2", BSIM3_MOD_LGAMMA2, IF_REAL, "Length dependence of gamma2"), IOP( "lvbx", BSIM3_MOD_LVBX, IF_REAL, "Length dependence of vbx"), IOP( "lvbm", BSIM3_MOD_LVBM, IF_REAL, "Length dependence of vbm"), IOP( "lxt", BSIM3_MOD_LXT, IF_REAL, "Length dependence of xt"), IOP( "lk1", BSIM3_MOD_LK1, IF_REAL, "Length dependence of k1"), IOP( "lkt1", BSIM3_MOD_LKT1, IF_REAL, "Length dependence of kt1"), IOP( "lkt1l", BSIM3_MOD_LKT1L, IF_REAL, "Length dependence of kt1l"), IOP( "lkt2", BSIM3_MOD_LKT2, IF_REAL, "Length dependence of kt2"), IOP( "lk2", BSIM3_MOD_LK2, IF_REAL, "Length dependence of k2"), IOP( "lk3", BSIM3_MOD_LK3, IF_REAL, "Length dependence of k3"), IOP( "lk3b", BSIM3_MOD_LK3B, IF_REAL, "Length dependence of k3b"), IOP( "lw0", BSIM3_MOD_LW0, IF_REAL, "Length dependence of w0"), IOP( "lnlx", BSIM3_MOD_LNLX, IF_REAL, "Length dependence of nlx"), IOP( "ldvt0", BSIM3_MOD_LDVT0, IF_REAL, "Length dependence of dvt0"), IOP( "ldvt1", BSIM3_MOD_LDVT1, IF_REAL, "Length dependence of dvt1"), IOP( "ldvt2", BSIM3_MOD_LDVT2, IF_REAL, "Length dependence of dvt2"), IOP( "ldvt0w", BSIM3_MOD_LDVT0W, IF_REAL, "Length dependence of dvt0w"), IOP( "ldvt1w", BSIM3_MOD_LDVT1W, IF_REAL, "Length dependence of dvt1w"), IOP( "ldvt2w", BSIM3_MOD_LDVT2W, IF_REAL, "Length dependence of dvt2w"), IOP( "ldrout", BSIM3_MOD_LDROUT, IF_REAL, "Length dependence of drout"), IOP( "ldsub", BSIM3_MOD_LDSUB, IF_REAL, "Length dependence of dsub"), IOP( "lvth0", BSIM3_MOD_LVTH0, IF_REAL,"Length dependence of vth0"), IOPR("lvtho", BSIM3_MOD_LVTH0, IF_REAL,"Length dependence of vtho"), IOP( "lua", BSIM3_MOD_LUA, IF_REAL, "Length dependence of ua"), IOP( "lua1", BSIM3_MOD_LUA1, IF_REAL, "Length dependence of ua1"), IOP( "lub", BSIM3_MOD_LUB, IF_REAL, "Length dependence of ub"), IOP( "lub1", BSIM3_MOD_LUB1, IF_REAL, "Length dependence of ub1"), IOP( "luc", BSIM3_MOD_LUC, IF_REAL, "Length dependence of uc"), IOP( "luc1", BSIM3_MOD_LUC1, IF_REAL, "Length dependence of uc1"), IOP( "lu0", BSIM3_MOD_LU0, IF_REAL, "Length dependence of u0"), IOP( "lute", BSIM3_MOD_LUTE, IF_REAL, "Length dependence of ute"), IOP( "lvoff", BSIM3_MOD_LVOFF, IF_REAL, "Length dependence of voff"), IOP( "lelm", BSIM3_MOD_LELM, IF_REAL, "Length dependence of elm"), IOP( "ldelta", BSIM3_MOD_LDELTA, IF_REAL, "Length dependence of delta"), IOP( "lrdsw", BSIM3_MOD_LRDSW, IF_REAL, "Length dependence of rdsw "), IOP( "lprwg", BSIM3_MOD_LPRWG, IF_REAL, "Length dependence of prwg "), IOP( "lprwb", BSIM3_MOD_LPRWB, IF_REAL, "Length dependence of prwb "), IOP( "lprt", BSIM3_MOD_LPRT, IF_REAL, "Length dependence of prt "), IOP( "leta0", BSIM3_MOD_LETA0, IF_REAL, "Length dependence of eta0"), IOP( "letab", BSIM3_MOD_LETAB, IF_REAL, "Length dependence of etab"), IOP( "lpclm", BSIM3_MOD_LPCLM, IF_REAL, "Length dependence of pclm"), IOP( "lpdiblc1", BSIM3_MOD_LPDIBL1, IF_REAL, "Length dependence of pdiblc1"), IOP( "lpdiblc2", BSIM3_MOD_LPDIBL2, IF_REAL, "Length dependence of pdiblc2"), IOP( "lpdiblcb", BSIM3_MOD_LPDIBLB, IF_REAL, "Length dependence of pdiblcb"), IOP( "lpscbe1", BSIM3_MOD_LPSCBE1, IF_REAL, "Length dependence of pscbe1"), IOP( "lpscbe2", BSIM3_MOD_LPSCBE2, IF_REAL, "Length dependence of pscbe2"), IOP( "lpvag", BSIM3_MOD_LPVAG, IF_REAL, "Length dependence of pvag"), IOP( "lwr", BSIM3_MOD_LWR, IF_REAL, "Length dependence of wr"), IOP( "ldwg", BSIM3_MOD_LDWG, IF_REAL, "Length dependence of dwg"), IOP( "ldwb", BSIM3_MOD_LDWB, IF_REAL, "Length dependence of dwb"), IOP( "lb0", BSIM3_MOD_LB0, IF_REAL, "Length dependence of b0"), IOP( "lb1", BSIM3_MOD_LB1, IF_REAL, "Length dependence of b1"), IOP( "lcgsl", BSIM3_MOD_LCGSL, IF_REAL, "Length dependence of cgsl"), IOP( "lcgdl", BSIM3_MOD_LCGDL, IF_REAL, "Length dependence of cgdl"), IOP( "lckappa", BSIM3_MOD_LCKAPPA, IF_REAL, "Length dependence of ckappa"), IOP( "lcf", BSIM3_MOD_LCF, IF_REAL, "Length dependence of cf"), IOP( "lclc", BSIM3_MOD_LCLC, IF_REAL, "Length dependence of clc"), IOP( "lcle", BSIM3_MOD_LCLE, IF_REAL, "Length dependence of cle"), IOP( "lalpha0", BSIM3_MOD_LALPHA0, IF_REAL, "Length dependence of alpha0"), IOP( "lalpha1", BSIM3_MOD_LALPHA1, IF_REAL, "Length dependence of alpha1"), IOP( "lbeta0", BSIM3_MOD_LBETA0, IF_REAL, "Length dependence of beta0"), IOP( "lvfbcv", BSIM3_MOD_LVFBCV, IF_REAL, "Length dependence of vfbcv"), IOP( "lvfb", BSIM3_MOD_LVFB, IF_REAL, "Length dependence of vfb"), IOP( "lacde", BSIM3_MOD_LACDE, IF_REAL, "Length dependence of acde"), IOP( "lmoin", BSIM3_MOD_LMOIN, IF_REAL, "Length dependence of moin"), IOP( "lnoff", BSIM3_MOD_LNOFF, IF_REAL, "Length dependence of noff"), IOP( "lvoffcv", BSIM3_MOD_LVOFFCV, IF_REAL, "Length dependence of voffcv"), IOP( "wcdsc", BSIM3_MOD_WCDSC, IF_REAL, "Width dependence of cdsc"), IOP( "wcdscb", BSIM3_MOD_WCDSCB, IF_REAL, "Width dependence of cdscb"), IOP( "wcdscd", BSIM3_MOD_WCDSCD, IF_REAL, "Width dependence of cdscd"), IOP( "wcit", BSIM3_MOD_WCIT, IF_REAL, "Width dependence of cit"), IOP( "wnfactor", BSIM3_MOD_WNFACTOR, IF_REAL, "Width dependence of nfactor"), IOP( "wxj", BSIM3_MOD_WXJ, IF_REAL, "Width dependence of xj"), IOP( "wvsat", BSIM3_MOD_WVSAT, IF_REAL, "Width dependence of vsat"), IOP( "wat", BSIM3_MOD_WAT, IF_REAL, "Width dependence of at"), IOP( "wa0", BSIM3_MOD_WA0, IF_REAL, "Width dependence of a0"), IOP( "wags", BSIM3_MOD_WAGS, IF_REAL, "Width dependence of ags"), IOP( "wa1", BSIM3_MOD_WA1, IF_REAL, "Width dependence of a1"), IOP( "wa2", BSIM3_MOD_WA2, IF_REAL, "Width dependence of a2"), IOP( "wketa", BSIM3_MOD_WKETA, IF_REAL, "Width dependence of keta"), IOP( "wnsub", BSIM3_MOD_WNSUB, IF_REAL, "Width dependence of nsub"), IOP( "wnch", BSIM3_MOD_WNPEAK, IF_REAL, "Width dependence of nch"), IOP( "wngate", BSIM3_MOD_WNGATE, IF_REAL, "Width dependence of ngate"), IOP( "wgamma1", BSIM3_MOD_WGAMMA1, IF_REAL, "Width dependence of gamma1"), IOP( "wgamma2", BSIM3_MOD_WGAMMA2, IF_REAL, "Width dependence of gamma2"), IOP( "wvbx", BSIM3_MOD_WVBX, IF_REAL, "Width dependence of vbx"), IOP( "wvbm", BSIM3_MOD_WVBM, IF_REAL, "Width dependence of vbm"), IOP( "wxt", BSIM3_MOD_WXT, IF_REAL, "Width dependence of xt"), IOP( "wk1", BSIM3_MOD_WK1, IF_REAL, "Width dependence of k1"), IOP( "wkt1", BSIM3_MOD_WKT1, IF_REAL, "Width dependence of kt1"), IOP( "wkt1l", BSIM3_MOD_WKT1L, IF_REAL, "Width dependence of kt1l"), IOP( "wkt2", BSIM3_MOD_WKT2, IF_REAL, "Width dependence of kt2"), IOP( "wk2", BSIM3_MOD_WK2, IF_REAL, "Width dependence of k2"), IOP( "wk3", BSIM3_MOD_WK3, IF_REAL, "Width dependence of k3"), IOP( "wk3b", BSIM3_MOD_WK3B, IF_REAL, "Width dependence of k3b"), IOP( "ww0", BSIM3_MOD_WW0, IF_REAL, "Width dependence of w0"), IOP( "wnlx", BSIM3_MOD_WNLX, IF_REAL, "Width dependence of nlx"), IOP( "wdvt0", BSIM3_MOD_WDVT0, IF_REAL, "Width dependence of dvt0"), IOP( "wdvt1", BSIM3_MOD_WDVT1, IF_REAL, "Width dependence of dvt1"), IOP( "wdvt2", BSIM3_MOD_WDVT2, IF_REAL, "Width dependence of dvt2"), IOP( "wdvt0w", BSIM3_MOD_WDVT0W, IF_REAL, "Width dependence of dvt0w"), IOP( "wdvt1w", BSIM3_MOD_WDVT1W, IF_REAL, "Width dependence of dvt1w"), IOP( "wdvt2w", BSIM3_MOD_WDVT2W, IF_REAL, "Width dependence of dvt2w"), IOP( "wdrout", BSIM3_MOD_WDROUT, IF_REAL, "Width dependence of drout"), IOP( "wdsub", BSIM3_MOD_WDSUB, IF_REAL, "Width dependence of dsub"), IOP( "wvth0", BSIM3_MOD_WVTH0, IF_REAL,"Width dependence of vth0"), IOPR("wvtho", BSIM3_MOD_WVTH0, IF_REAL,"Width dependence of vtho"), IOP( "wua", BSIM3_MOD_WUA, IF_REAL, "Width dependence of ua"), IOP( "wua1", BSIM3_MOD_WUA1, IF_REAL, "Width dependence of ua1"), IOP( "wub", BSIM3_MOD_WUB, IF_REAL, "Width dependence of ub"), IOP( "wub1", BSIM3_MOD_WUB1, IF_REAL, "Width dependence of ub1"), IOP( "wuc", BSIM3_MOD_WUC, IF_REAL, "Width dependence of uc"), IOP( "wuc1", BSIM3_MOD_WUC1, IF_REAL, "Width dependence of uc1"), IOP( "wu0", BSIM3_MOD_WU0, IF_REAL, "Width dependence of u0"), IOP( "wute", BSIM3_MOD_WUTE, IF_REAL, "Width dependence of ute"), IOP( "wvoff", BSIM3_MOD_WVOFF, IF_REAL, "Width dependence of voff"), IOP( "welm", BSIM3_MOD_WELM, IF_REAL, "Width dependence of elm"), IOP( "wdelta", BSIM3_MOD_WDELTA, IF_REAL, "Width dependence of delta"), IOP( "wrdsw", BSIM3_MOD_WRDSW, IF_REAL, "Width dependence of rdsw "), IOP( "wprwg", BSIM3_MOD_WPRWG, IF_REAL, "Width dependence of prwg "), IOP( "wprwb", BSIM3_MOD_WPRWB, IF_REAL, "Width dependence of prwb "), IOP( "wprt", BSIM3_MOD_WPRT, IF_REAL, "Width dependence of prt"), IOP( "weta0", BSIM3_MOD_WETA0, IF_REAL, "Width dependence of eta0"), IOP( "wetab", BSIM3_MOD_WETAB, IF_REAL, "Width dependence of etab"), IOP( "wpclm", BSIM3_MOD_WPCLM, IF_REAL, "Width dependence of pclm"), IOP( "wpdiblc1", BSIM3_MOD_WPDIBL1, IF_REAL, "Width dependence of pdiblc1"), IOP( "wpdiblc2", BSIM3_MOD_WPDIBL2, IF_REAL, "Width dependence of pdiblc2"), IOP( "wpdiblcb", BSIM3_MOD_WPDIBLB, IF_REAL, "Width dependence of pdiblcb"), IOP( "wpscbe1", BSIM3_MOD_WPSCBE1, IF_REAL, "Width dependence of pscbe1"), IOP( "wpscbe2", BSIM3_MOD_WPSCBE2, IF_REAL, "Width dependence of pscbe2"), IOP( "wpvag", BSIM3_MOD_WPVAG, IF_REAL, "Width dependence of pvag"), IOP( "wwr", BSIM3_MOD_WWR, IF_REAL, "Width dependence of wr"), IOP( "wdwg", BSIM3_MOD_WDWG, IF_REAL, "Width dependence of dwg"), IOP( "wdwb", BSIM3_MOD_WDWB, IF_REAL, "Width dependence of dwb"), IOP( "wb0", BSIM3_MOD_WB0, IF_REAL, "Width dependence of b0"), IOP( "wb1", BSIM3_MOD_WB1, IF_REAL, "Width dependence of b1"), IOP( "wcgsl", BSIM3_MOD_WCGSL, IF_REAL, "Width dependence of cgsl"), IOP( "wcgdl", BSIM3_MOD_WCGDL, IF_REAL, "Width dependence of cgdl"), IOP( "wckappa", BSIM3_MOD_WCKAPPA, IF_REAL, "Width dependence of ckappa"), IOP( "wcf", BSIM3_MOD_WCF, IF_REAL, "Width dependence of cf"), IOP( "wclc", BSIM3_MOD_WCLC, IF_REAL, "Width dependence of clc"), IOP( "wcle", BSIM3_MOD_WCLE, IF_REAL, "Width dependence of cle"), IOP( "walpha0", BSIM3_MOD_WALPHA0, IF_REAL, "Width dependence of alpha0"), IOP( "walpha1", BSIM3_MOD_WALPHA1, IF_REAL, "Width dependence of alpha1"), IOP( "wbeta0", BSIM3_MOD_WBETA0, IF_REAL, "Width dependence of beta0"), IOP( "wvfbcv", BSIM3_MOD_WVFBCV, IF_REAL, "Width dependence of vfbcv"), IOP( "wvfb", BSIM3_MOD_WVFB, IF_REAL, "Width dependence of vfb"), IOP( "wacde", BSIM3_MOD_WACDE, IF_REAL, "Width dependence of acde"), IOP( "wmoin", BSIM3_MOD_WMOIN, IF_REAL, "Width dependence of moin"), IOP( "wnoff", BSIM3_MOD_WNOFF, IF_REAL, "Width dependence of noff"), IOP( "wvoffcv", BSIM3_MOD_WVOFFCV, IF_REAL, "Width dependence of voffcv"), IOP( "pcdsc", BSIM3_MOD_PCDSC, IF_REAL, "Cross-term dependence of cdsc"), IOP( "pcdscb", BSIM3_MOD_PCDSCB, IF_REAL, "Cross-term dependence of cdscb"), IOP( "pcdscd", BSIM3_MOD_PCDSCD, IF_REAL, "Cross-term dependence of cdscd"), IOP( "pcit", BSIM3_MOD_PCIT, IF_REAL, "Cross-term dependence of cit"), IOP( "pnfactor", BSIM3_MOD_PNFACTOR, IF_REAL, "Cross-term dependence of nfactor"), IOP( "pxj", BSIM3_MOD_PXJ, IF_REAL, "Cross-term dependence of xj"), IOP( "pvsat", BSIM3_MOD_PVSAT, IF_REAL, "Cross-term dependence of vsat"), IOP( "pat", BSIM3_MOD_PAT, IF_REAL, "Cross-term dependence of at"), IOP( "pa0", BSIM3_MOD_PA0, IF_REAL, "Cross-term dependence of a0"), IOP( "pags", BSIM3_MOD_PAGS, IF_REAL, "Cross-term dependence of ags"), IOP( "pa1", BSIM3_MOD_PA1, IF_REAL, "Cross-term dependence of a1"), IOP( "pa2", BSIM3_MOD_PA2, IF_REAL, "Cross-term dependence of a2"), IOP( "pketa", BSIM3_MOD_PKETA, IF_REAL, "Cross-term dependence of keta"), IOP( "pnsub", BSIM3_MOD_PNSUB, IF_REAL, "Cross-term dependence of nsub"), IOP( "pnch", BSIM3_MOD_PNPEAK, IF_REAL, "Cross-term dependence of nch"), IOP( "pngate", BSIM3_MOD_PNGATE, IF_REAL, "Cross-term dependence of ngate"), IOP( "pgamma1", BSIM3_MOD_PGAMMA1, IF_REAL, "Cross-term dependence of gamma1"), IOP( "pgamma2", BSIM3_MOD_PGAMMA2, IF_REAL, "Cross-term dependence of gamma2"), IOP( "pvbx", BSIM3_MOD_PVBX, IF_REAL, "Cross-term dependence of vbx"), IOP( "pvbm", BSIM3_MOD_PVBM, IF_REAL, "Cross-term dependence of vbm"), IOP( "pxt", BSIM3_MOD_PXT, IF_REAL, "Cross-term dependence of xt"), IOP( "pk1", BSIM3_MOD_PK1, IF_REAL, "Cross-term dependence of k1"), IOP( "pkt1", BSIM3_MOD_PKT1, IF_REAL, "Cross-term dependence of kt1"), IOP( "pkt1l", BSIM3_MOD_PKT1L, IF_REAL, "Cross-term dependence of kt1l"), IOP( "pkt2", BSIM3_MOD_PKT2, IF_REAL, "Cross-term dependence of kt2"), IOP( "pk2", BSIM3_MOD_PK2, IF_REAL, "Cross-term dependence of k2"), IOP( "pk3", BSIM3_MOD_PK3, IF_REAL, "Cross-term dependence of k3"), IOP( "pk3b", BSIM3_MOD_PK3B, IF_REAL, "Cross-term dependence of k3b"), IOP( "pw0", BSIM3_MOD_PW0, IF_REAL, "Cross-term dependence of w0"), IOP( "pnlx", BSIM3_MOD_PNLX, IF_REAL, "Cross-term dependence of nlx"), IOP( "pdvt0", BSIM3_MOD_PDVT0, IF_REAL, "Cross-term dependence of dvt0"), IOP( "pdvt1", BSIM3_MOD_PDVT1, IF_REAL, "Cross-term dependence of dvt1"), IOP( "pdvt2", BSIM3_MOD_PDVT2, IF_REAL, "Cross-term dependence of dvt2"), IOP( "pdvt0w", BSIM3_MOD_PDVT0W, IF_REAL, "Cross-term dependence of dvt0w"), IOP( "pdvt1w", BSIM3_MOD_PDVT1W, IF_REAL, "Cross-term dependence of dvt1w"), IOP( "pdvt2w", BSIM3_MOD_PDVT2W, IF_REAL, "Cross-term dependence of dvt2w"), IOP( "pdrout", BSIM3_MOD_PDROUT, IF_REAL, "Cross-term dependence of drout"), IOP( "pdsub", BSIM3_MOD_PDSUB, IF_REAL, "Cross-term dependence of dsub"), IOP( "pvth0", BSIM3_MOD_PVTH0, IF_REAL,"Cross-term dependence of vth0"), IOPR("pvtho", BSIM3_MOD_PVTH0, IF_REAL,"Cross-term dependence of vtho"), IOP( "pua", BSIM3_MOD_PUA, IF_REAL, "Cross-term dependence of ua"), IOP( "pua1", BSIM3_MOD_PUA1, IF_REAL, "Cross-term dependence of ua1"), IOP( "pub", BSIM3_MOD_PUB, IF_REAL, "Cross-term dependence of ub"), IOP( "pub1", BSIM3_MOD_PUB1, IF_REAL, "Cross-term dependence of ub1"), IOP( "puc", BSIM3_MOD_PUC, IF_REAL, "Cross-term dependence of uc"), IOP( "puc1", BSIM3_MOD_PUC1, IF_REAL, "Cross-term dependence of uc1"), IOP( "pu0", BSIM3_MOD_PU0, IF_REAL, "Cross-term dependence of u0"), IOP( "pute", BSIM3_MOD_PUTE, IF_REAL, "Cross-term dependence of ute"), IOP( "pvoff", BSIM3_MOD_PVOFF, IF_REAL, "Cross-term dependence of voff"), IOP( "pelm", BSIM3_MOD_PELM, IF_REAL, "Cross-term dependence of elm"), IOP( "pdelta", BSIM3_MOD_PDELTA, IF_REAL, "Cross-term dependence of delta"), IOP( "prdsw", BSIM3_MOD_PRDSW, IF_REAL, "Cross-term dependence of rdsw "), IOP( "pprwg", BSIM3_MOD_PPRWG, IF_REAL, "Cross-term dependence of prwg "), IOP( "pprwb", BSIM3_MOD_PPRWB, IF_REAL, "Cross-term dependence of prwb "), IOP( "pprt", BSIM3_MOD_PPRT, IF_REAL, "Cross-term dependence of prt "), IOP( "peta0", BSIM3_MOD_PETA0, IF_REAL, "Cross-term dependence of eta0"), IOP( "petab", BSIM3_MOD_PETAB, IF_REAL, "Cross-term dependence of etab"), IOP( "ppclm", BSIM3_MOD_PPCLM, IF_REAL, "Cross-term dependence of pclm"), IOP( "ppdiblc1", BSIM3_MOD_PPDIBL1, IF_REAL, "Cross-term dependence of pdiblc1"), IOP( "ppdiblc2", BSIM3_MOD_PPDIBL2, IF_REAL, "Cross-term dependence of pdiblc2"), IOP( "ppdiblcb", BSIM3_MOD_PPDIBLB, IF_REAL, "Cross-term dependence of pdiblcb"), IOP( "ppscbe1", BSIM3_MOD_PPSCBE1, IF_REAL, "Cross-term dependence of pscbe1"), IOP( "ppscbe2", BSIM3_MOD_PPSCBE2, IF_REAL, "Cross-term dependence of pscbe2"), IOP( "ppvag", BSIM3_MOD_PPVAG, IF_REAL, "Cross-term dependence of pvag"), IOP( "pwr", BSIM3_MOD_PWR, IF_REAL, "Cross-term dependence of wr"), IOP( "pdwg", BSIM3_MOD_PDWG, IF_REAL, "Cross-term dependence of dwg"), IOP( "pdwb", BSIM3_MOD_PDWB, IF_REAL, "Cross-term dependence of dwb"), IOP( "pb0", BSIM3_MOD_PB0, IF_REAL, "Cross-term dependence of b0"), IOP( "pb1", BSIM3_MOD_PB1, IF_REAL, "Cross-term dependence of b1"), IOP( "pcgsl", BSIM3_MOD_PCGSL, IF_REAL, "Cross-term dependence of cgsl"), IOP( "pcgdl", BSIM3_MOD_PCGDL, IF_REAL, "Cross-term dependence of cgdl"), IOP( "pckappa", BSIM3_MOD_PCKAPPA, IF_REAL, "Cross-term dependence of ckappa"), IOP( "pcf", BSIM3_MOD_PCF, IF_REAL, "Cross-term dependence of cf"), IOP( "pclc", BSIM3_MOD_PCLC, IF_REAL, "Cross-term dependence of clc"), IOP( "pcle", BSIM3_MOD_PCLE, IF_REAL, "Cross-term dependence of cle"), IOP( "palpha0", BSIM3_MOD_PALPHA0, IF_REAL, "Cross-term dependence of alpha0"), IOP( "palpha1", BSIM3_MOD_PALPHA1, IF_REAL, "Cross-term dependence of alpha1"), IOP( "pbeta0", BSIM3_MOD_PBETA0, IF_REAL, "Cross-term dependence of beta0"), IOP( "pvfbcv", BSIM3_MOD_PVFBCV, IF_REAL, "Cross-term dependence of vfbcv"), IOP( "pvfb", BSIM3_MOD_PVFB, IF_REAL, "Cross-term dependence of vfb"), IOP( "pacde", BSIM3_MOD_PACDE, IF_REAL, "Cross-term dependence of acde"), IOP( "pmoin", BSIM3_MOD_PMOIN, IF_REAL, "Cross-term dependence of moin"), IOP( "pnoff", BSIM3_MOD_PNOFF, IF_REAL, "Cross-term dependence of noff"), IOP( "pvoffcv", BSIM3_MOD_PVOFFCV, IF_REAL, "Cross-term dependence of voffcv"), IOP( "noia", BSIM3_MOD_NOIA, IF_REAL, "Flicker noise parameter"), IOP( "noib", BSIM3_MOD_NOIB, IF_REAL, "Flicker noise parameter"), IOP( "noic", BSIM3_MOD_NOIC, IF_REAL, "Flicker noise parameter"), IOP( "em", BSIM3_MOD_EM, IF_REAL, "Flicker noise parameter"), IOP( "ef", BSIM3_MOD_EF, IF_REAL, "Flicker noise frequency exponent"), IOP( "af", BSIM3_MOD_AF, IF_REAL, "Flicker noise exponent"), IOP( "kf", BSIM3_MOD_KF, IF_REAL, "Flicker noise coefficient"), IOP("vgs_max", BSIM3_MOD_VGS_MAX, IF_REAL, "maximum voltage G-S branch"), IOP("vgd_max", BSIM3_MOD_VGD_MAX, IF_REAL, "maximum voltage G-D branch"), IOP("vgb_max", BSIM3_MOD_VGB_MAX, IF_REAL, "maximum voltage G-B branch"), IOP("vds_max", BSIM3_MOD_VDS_MAX, IF_REAL, "maximum voltage D-S branch"), IOP("vbs_max", BSIM3_MOD_VBS_MAX, IF_REAL, "maximum voltage B-S branch"), IOP("vbd_max", BSIM3_MOD_VBD_MAX, IF_REAL, "maximum voltage B-D branch"), IOP("vgsr_max", BSIM3_MOD_VGSR_MAX, IF_REAL, "maximum voltage G-S branch"), IOP("vgdr_max", BSIM3_MOD_VGDR_MAX, IF_REAL, "maximum voltage G-D branch"), IOP("vgbr_max", BSIM3_MOD_VGBR_MAX, IF_REAL, "maximum voltage G-B branch"), IOP("vbsr_max", BSIM3_MOD_VBSR_MAX, IF_REAL, "maximum voltage B-S branch"), IOP("vbdr_max", BSIM3_MOD_VBDR_MAX, IF_REAL, "maximum voltage B-D branch"), IP( "nmos", BSIM3_MOD_NMOS, IF_FLAG, "Flag to indicate NMOS"), IP( "pmos", BSIM3_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"), }; char *BSIM3names[] = { "Drain", "Gate", "Source", "Bulk", "Charge" }; int BSIM3nSize = NUMELEMS(BSIM3names); int BSIM3pTSize = NUMELEMS(BSIM3pTable); int BSIM3mPTSize = NUMELEMS(BSIM3mPTable); int BSIM3iSize = sizeof(BSIM3instance); int BSIM3mSize = sizeof(BSIM3model); tmpk8ny_4pz/src/spicelib/devices/bsim3/b3cvtest.c0000644000175000017500000000703713546075722022110 0ustar carstencarsten/**** BSIM3v3.3.0, Released by Xuemei Xi 07/29/2005 ****/ /********** * Copyright 2004 Regents of the University of California. All rights reserved. * File: b3cvtest.c of BSIM3v3.3.0 * Author: 1995 Min-Chie Jeng and Mansun Chan * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3convTest( GENmodel *inModel, CKTcircuit *ckt) { BSIM3model *model = (BSIM3model*)inModel; BSIM3instance *here; double delvbd, delvbs, delvds, delvgd, delvgs, vbd, vbs, vds; double cbd, cbhat, cbs, cd, cdhat, tol, vgd, vgdo, vgs; /* loop through all the BSIM3 device models */ for (; model != NULL; model = BSIM3nextModel(model)) { /* loop through all the instances of the model */ for (here = BSIM3instances(model); here != NULL ; here=BSIM3nextInstance(here)) { vbs = model->BSIM3type * (*(ckt->CKTrhsOld+here->BSIM3bNode) - *(ckt->CKTrhsOld+here->BSIM3sNodePrime)); vgs = model->BSIM3type * (*(ckt->CKTrhsOld+here->BSIM3gNode) - *(ckt->CKTrhsOld+here->BSIM3sNodePrime)); vds = model->BSIM3type * (*(ckt->CKTrhsOld+here->BSIM3dNodePrime) - *(ckt->CKTrhsOld+here->BSIM3sNodePrime)); vbd = vbs - vds; vgd = vgs - vds; vgdo = *(ckt->CKTstate0 + here->BSIM3vgs) - *(ckt->CKTstate0 + here->BSIM3vds); delvbs = vbs - *(ckt->CKTstate0 + here->BSIM3vbs); delvbd = vbd - *(ckt->CKTstate0 + here->BSIM3vbd); delvgs = vgs - *(ckt->CKTstate0 + here->BSIM3vgs); delvds = vds - *(ckt->CKTstate0 + here->BSIM3vds); delvgd = vgd-vgdo; cd = here->BSIM3cd - here->BSIM3cbd; if (here->BSIM3mode >= 0) { cd += here->BSIM3csub; cdhat = cd - here->BSIM3gbd * delvbd + (here->BSIM3gmbs + here->BSIM3gbbs) * delvbs + (here->BSIM3gm + here->BSIM3gbgs) * delvgs + (here->BSIM3gds + here->BSIM3gbds) * delvds; } else { cdhat = cd + (here->BSIM3gmbs - here->BSIM3gbd) * delvbd + here->BSIM3gm * delvgd - here->BSIM3gds * delvds; } /* * check convergence */ if ((here->BSIM3off == 0) || (!(ckt->CKTmode & MODEINITFIX))) { tol = ckt->CKTreltol * MAX(fabs(cdhat), fabs(cd)) + ckt->CKTabstol; if (fabs(cdhat - cd) >= tol) { ckt->CKTnoncon++; return(OK); } cbs = here->BSIM3cbs; cbd = here->BSIM3cbd; if (here->BSIM3mode >= 0) { cbhat = cbs + cbd - here->BSIM3csub + here->BSIM3gbd * delvbd + (here->BSIM3gbs - here->BSIM3gbbs) * delvbs - here->BSIM3gbgs * delvgs - here->BSIM3gbds * delvds; } else { cbhat = cbs + cbd - here->BSIM3csub + here->BSIM3gbs * delvbs + (here->BSIM3gbd - here->BSIM3gbbs) * delvbd - here->BSIM3gbgs * delvgd + here->BSIM3gbds * delvds; } tol = ckt->CKTreltol * MAX(fabs(cbhat), fabs(cbs + cbd - here->BSIM3csub)) + ckt->CKTabstol; if (fabs(cbhat - (cbs + cbd - here->BSIM3csub)) > tol) { ckt->CKTnoncon++; return(OK); } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3/b3pzld.c0000644000175000017500000003434113546075722021547 0ustar carstencarsten/**** BSIM3v3.3.0, Released by Xuemei Xi 07/29/2005 ****/ /********** * Copyright 2004 Regents of the University of California. All rights reserved. * File: b3pzld.c of BSIM3v3.3.0 * Author: 1995 Min-Chie Jeng and Mansun Chan. * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "bsim3def.h" #include "ngspice/suffix.h" int BSIM3pzLoad( GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { BSIM3model *model = (BSIM3model*)inModel; BSIM3instance *here; double xcggb, xcgdb, xcgsb, xcgbb, xcbgb, xcbdb, xcbsb, xcbbb; double xcdgb, xcddb, xcdsb, xcdbb, xcsgb, xcsdb, xcssb, xcsbb; double gdpr, gspr, gds, gbd, gbs, capbd, capbs, FwdSum, RevSum, Gm, Gmbs; double cggb, cgdb, cgsb, cbgb, cbdb, cbsb, cddb, cdgb, cdsb; double GSoverlapCap, GDoverlapCap, GBoverlapCap; double dxpart, sxpart, xgtg, xgtd, xgts, xgtb, xcqgb=0.0, xcqdb=0.0, xcqsb=0.0, xcqbb=0.0; double gbspsp, gbbdp, gbbsp, gbspg, gbspb; double gbspdp, gbdpdp, gbdpg, gbdpb, gbdpsp; double ddxpart_dVd, ddxpart_dVg, ddxpart_dVb, ddxpart_dVs; double dsxpart_dVd, dsxpart_dVg, dsxpart_dVb, dsxpart_dVs; double T1, CoxWL, qcheq, Cdg, Cdd, Cds, Csg, Csd, Css; double ScalingFactor = 1.0e-9; double m; for (; model != NULL; model = BSIM3nextModel(model)) { for (here = BSIM3instances(model); here!= NULL; here = BSIM3nextInstance(here)) { if (here->BSIM3mode >= 0) { Gm = here->BSIM3gm; Gmbs = here->BSIM3gmbs; FwdSum = Gm + Gmbs; RevSum = 0.0; gbbdp = -here->BSIM3gbds; gbbsp = here->BSIM3gbds + here->BSIM3gbgs + here->BSIM3gbbs; gbdpg = here->BSIM3gbgs; gbdpdp = here->BSIM3gbds; gbdpb = here->BSIM3gbbs; gbdpsp = -(gbdpg + gbdpdp + gbdpb); gbspg = 0.0; gbspdp = 0.0; gbspb = 0.0; gbspsp = 0.0; if (here->BSIM3nqsMod == 0 && here->BSIM3acnqsMod == 0) { cggb = here->BSIM3cggb; cgsb = here->BSIM3cgsb; cgdb = here->BSIM3cgdb; cbgb = here->BSIM3cbgb; cbsb = here->BSIM3cbsb; cbdb = here->BSIM3cbdb; cdgb = here->BSIM3cdgb; cdsb = here->BSIM3cdsb; cddb = here->BSIM3cddb; xgtg = xgtd = xgts = xgtb = 0.0; sxpart = 0.6; dxpart = 0.4; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { cggb = cgdb = cgsb = 0.0; cbgb = cbdb = cbsb = 0.0; cdgb = cddb = cdsb = 0.0; xgtg = here->BSIM3gtg; xgtd = here->BSIM3gtd; xgts = here->BSIM3gts; xgtb = here->BSIM3gtb; xcqgb = here->BSIM3cqgb; xcqdb = here->BSIM3cqdb; xcqsb = here->BSIM3cqsb; xcqbb = here->BSIM3cqbb; CoxWL = model->BSIM3cox * here->pParam->BSIM3weffCV * here->pParam->BSIM3leffCV; qcheq = -(here->BSIM3qgate + here->BSIM3qbulk); if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM3xpart < 0.5) { dxpart = 0.4; } else if (model->BSIM3xpart > 0.5) { dxpart = 0.0; } else { dxpart = 0.5; } ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; } else { dxpart = here->BSIM3qdrn / qcheq; Cdd = here->BSIM3cddb; Csd = -(here->BSIM3cgdb + here->BSIM3cddb + here->BSIM3cbdb); ddxpart_dVd = (Cdd - dxpart * (Cdd + Csd)) / qcheq; Cdg = here->BSIM3cdgb; Csg = -(here->BSIM3cggb + here->BSIM3cdgb + here->BSIM3cbgb); ddxpart_dVg = (Cdg - dxpart * (Cdg + Csg)) / qcheq; Cds = here->BSIM3cdsb; Css = -(here->BSIM3cgsb + here->BSIM3cdsb + here->BSIM3cbsb); ddxpart_dVs = (Cds - dxpart * (Cds + Css)) / qcheq; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); } sxpart = 1.0 - dxpart; dsxpart_dVd = -ddxpart_dVd; dsxpart_dVg = -ddxpart_dVg; dsxpart_dVs = -ddxpart_dVs; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); } } else { Gm = -here->BSIM3gm; Gmbs = -here->BSIM3gmbs; FwdSum = 0.0; RevSum = -(Gm + Gmbs); gbbsp = -here->BSIM3gbds; gbbdp = here->BSIM3gbds + here->BSIM3gbgs + here->BSIM3gbbs; gbdpg = 0.0; gbdpsp = 0.0; gbdpb = 0.0; gbdpdp = 0.0; gbspg = here->BSIM3gbgs; gbspsp = here->BSIM3gbds; gbspb = here->BSIM3gbbs; gbspdp = -(gbspg + gbspsp + gbspb); if (here->BSIM3nqsMod == 0 && here->BSIM3acnqsMod == 0) { cggb = here->BSIM3cggb; cgsb = here->BSIM3cgdb; cgdb = here->BSIM3cgsb; cbgb = here->BSIM3cbgb; cbsb = here->BSIM3cbdb; cbdb = here->BSIM3cbsb; cdgb = -(here->BSIM3cdgb + cggb + cbgb); cdsb = -(here->BSIM3cddb + cgsb + cbsb); cddb = -(here->BSIM3cdsb + cgdb + cbdb); xgtg = xgtd = xgts = xgtb = 0.0; sxpart = 0.4; dxpart = 0.6; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { cggb = cgdb = cgsb = 0.0; cbgb = cbdb = cbsb = 0.0; cdgb = cddb = cdsb = 0.0; xgtg = here->BSIM3gtg; xgtd = here->BSIM3gts; xgts = here->BSIM3gtd; xgtb = here->BSIM3gtb; xcqgb = here->BSIM3cqgb; xcqdb = here->BSIM3cqsb; xcqsb = here->BSIM3cqdb; xcqbb = here->BSIM3cqbb; CoxWL = model->BSIM3cox * here->pParam->BSIM3weffCV * here->pParam->BSIM3leffCV; qcheq = -(here->BSIM3qgate + here->BSIM3qbulk); if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM3xpart < 0.5) { sxpart = 0.4; } else if (model->BSIM3xpart > 0.5) { sxpart = 0.0; } else { sxpart = 0.5; } dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { sxpart = here->BSIM3qdrn / qcheq; Css = here->BSIM3cddb; Cds = -(here->BSIM3cgdb + here->BSIM3cddb + here->BSIM3cbdb); dsxpart_dVs = (Css - sxpart * (Css + Cds)) / qcheq; Csg = here->BSIM3cdgb; Cdg = -(here->BSIM3cggb + here->BSIM3cdgb + here->BSIM3cbgb); dsxpart_dVg = (Csg - sxpart * (Csg + Cdg)) / qcheq; Csd = here->BSIM3cdsb; Cdd = -(here->BSIM3cgsb + here->BSIM3cdsb + here->BSIM3cbsb); dsxpart_dVd = (Csd - sxpart * (Csd + Cdd)) / qcheq; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); } dxpart = 1.0 - sxpart; ddxpart_dVd = -dsxpart_dVd; ddxpart_dVg = -dsxpart_dVg; ddxpart_dVs = -dsxpart_dVs; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); } } T1 = *(ckt->CKTstate0 + here->BSIM3qdef) * here->BSIM3gtau; gdpr = here->BSIM3drainConductance; gspr = here->BSIM3sourceConductance; gds = here->BSIM3gds; gbd = here->BSIM3gbd; gbs = here->BSIM3gbs; capbd = here->BSIM3capbd; capbs = here->BSIM3capbs; GSoverlapCap = here->BSIM3cgso; GDoverlapCap = here->BSIM3cgdo; GBoverlapCap = here->pParam->BSIM3cgbo; xcdgb = (cdgb - GDoverlapCap); xcddb = (cddb + capbd + GDoverlapCap); xcdsb = cdsb; xcdbb = -(xcdgb + xcddb + xcdsb); xcsgb = -(cggb + cbgb + cdgb + GSoverlapCap); xcsdb = -(cgdb + cbdb + cddb); xcssb = (capbs + GSoverlapCap - (cgsb + cbsb + cdsb)); xcsbb = -(xcsgb + xcsdb + xcssb); xcggb = (cggb + GDoverlapCap + GSoverlapCap + GBoverlapCap); xcgdb = (cgdb - GDoverlapCap); xcgsb = (cgsb - GSoverlapCap); xcgbb = -(xcggb + xcgdb + xcgsb); xcbgb = (cbgb - GBoverlapCap); xcbdb = (cbdb - capbd); xcbsb = (cbsb - capbs); xcbbb = -(xcbgb + xcbdb + xcbsb); m = here->BSIM3m; *(here->BSIM3GgPtr ) += m * (xcggb * s->real); *(here->BSIM3GgPtr +1) += m * (xcggb * s->imag); *(here->BSIM3BbPtr ) += m * (xcbbb * s->real); *(here->BSIM3BbPtr +1) += m * (xcbbb * s->imag); *(here->BSIM3DPdpPtr ) += m * (xcddb * s->real); *(here->BSIM3DPdpPtr +1) += m * (xcddb * s->imag); *(here->BSIM3SPspPtr ) += m * (xcssb * s->real); *(here->BSIM3SPspPtr +1) += m * (xcssb * s->imag); *(here->BSIM3GbPtr ) += m * (xcgbb * s->real); *(here->BSIM3GbPtr +1) += m * (xcgbb * s->imag); *(here->BSIM3GdpPtr ) += m * (xcgdb * s->real); *(here->BSIM3GdpPtr +1) += m * (xcgdb * s->imag); *(here->BSIM3GspPtr ) += m * (xcgsb * s->real); *(here->BSIM3GspPtr +1) += m * (xcgsb * s->imag); *(here->BSIM3BgPtr ) += m * (xcbgb * s->real); *(here->BSIM3BgPtr +1) += m * (xcbgb * s->imag); *(here->BSIM3BdpPtr ) += m * (xcbdb * s->real); *(here->BSIM3BdpPtr +1) += m * (xcbdb * s->imag); *(here->BSIM3BspPtr ) += m * (xcbsb * s->real); *(here->BSIM3BspPtr +1) += m * (xcbsb * s->imag); *(here->BSIM3DPgPtr ) += m * (xcdgb * s->real); *(here->BSIM3DPgPtr +1) += m * (xcdgb * s->imag); *(here->BSIM3DPbPtr ) += m * (xcdbb * s->real); *(here->BSIM3DPbPtr +1) += m * (xcdbb * s->imag); *(here->BSIM3DPspPtr ) += m * (xcdsb * s->real); *(here->BSIM3DPspPtr +1) += m * (xcdsb * s->imag); *(here->BSIM3SPgPtr ) += m * (xcsgb * s->real); *(here->BSIM3SPgPtr +1) += m * (xcsgb * s->imag); *(here->BSIM3SPbPtr ) += m * (xcsbb * s->real); *(here->BSIM3SPbPtr +1) += m * (xcsbb * s->imag); *(here->BSIM3SPdpPtr ) += m * (xcsdb * s->real); *(here->BSIM3SPdpPtr +1) += m * (xcsdb * s->imag); *(here->BSIM3DdPtr) += m * gdpr; *(here->BSIM3DdpPtr) -= m * gdpr; *(here->BSIM3DPdPtr) -= m * gdpr; *(here->BSIM3SsPtr) += m * gspr; *(here->BSIM3SspPtr) -= m * gspr; *(here->BSIM3SPsPtr) -= m * gspr; *(here->BSIM3BgPtr) -= m * here->BSIM3gbgs; *(here->BSIM3BbPtr) += m * (gbd + gbs - here->BSIM3gbbs); *(here->BSIM3BdpPtr) -= m * (gbd - gbbdp); *(here->BSIM3BspPtr) -= m * (gbs - gbbsp); *(here->BSIM3DPgPtr) += m * (Gm + dxpart * xgtg + T1 * ddxpart_dVg + gbdpg); *(here->BSIM3DPdpPtr) += m * (gdpr + gds + gbd + RevSum + dxpart * xgtd + T1 * ddxpart_dVd + gbdpdp); *(here->BSIM3DPspPtr) -= m * (gds + FwdSum - dxpart * xgts - T1 * ddxpart_dVs - gbdpsp); *(here->BSIM3DPbPtr) -= m * (gbd - Gmbs - dxpart * xgtb - T1 * ddxpart_dVb - gbdpb); *(here->BSIM3SPgPtr) -= m * (Gm - sxpart * xgtg - T1 * dsxpart_dVg - gbspg); *(here->BSIM3SPspPtr) += m * (gspr + gds + gbs + FwdSum + sxpart * xgts + T1 * dsxpart_dVs + gbspsp); *(here->BSIM3SPbPtr) -= m * (gbs + Gmbs - sxpart * xgtb - T1 * dsxpart_dVb - gbspb); *(here->BSIM3SPdpPtr) -= m * (gds + RevSum - sxpart * xgtd - T1 * dsxpart_dVd - gbspdp); *(here->BSIM3GgPtr) -= m * xgtg; *(here->BSIM3GbPtr) -= m * xgtb; *(here->BSIM3GdpPtr) -= m * xgtd; *(here->BSIM3GspPtr) -= m * xgts; if (here->BSIM3nqsMod || here->BSIM3acnqsMod) { *(here->BSIM3QqPtr ) += m * (s->real * ScalingFactor); *(here->BSIM3QqPtr +1) += m * (s->imag * ScalingFactor); *(here->BSIM3QgPtr ) -= m * (xcqgb * s->real); *(here->BSIM3QgPtr +1) -= m * (xcqgb * s->imag); *(here->BSIM3QdpPtr ) -= m * (xcqdb * s->real); *(here->BSIM3QdpPtr +1) -= m * (xcqdb * s->imag); *(here->BSIM3QbPtr ) -= m * (xcqbb * s->real); *(here->BSIM3QbPtr +1) -= m * (xcqbb * s->imag); *(here->BSIM3QspPtr ) -= m * (xcqsb * s->real); *(here->BSIM3QspPtr +1) -= m * (xcqsb * s->imag); *(here->BSIM3GqPtr) -= m * (here->BSIM3gtau); *(here->BSIM3DPqPtr) += m * (dxpart * here->BSIM3gtau); *(here->BSIM3SPqPtr) += m * (sxpart * here->BSIM3gtau); *(here->BSIM3QqPtr) += m * (here->BSIM3gtau); *(here->BSIM3QgPtr) += m * xgtg; *(here->BSIM3QdpPtr) += m * xgtd; *(here->BSIM3QbPtr) += m * xgtb; *(here->BSIM3QspPtr) += m * xgts; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3/b3mask.c0000644000175000017500000012717413546075722021540 0ustar carstencarsten/**** BSIM3v3.3.0, Released by Xuemei Xi 07/29/2005 ****/ /********** * Copyright 2004 Regents of the University of California. All rights reserved. * File: b3mask.c of BSIM3v3.3.0 * Author: 1995 Min-Chie Jeng and Mansun Chan. * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "bsim3def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3mAsk( CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { BSIM3model *model = (BSIM3model *)inst; NG_IGNORE(ckt); switch(which) { case BSIM3_MOD_MOBMOD: value->iValue = model->BSIM3mobMod; return(OK); case BSIM3_MOD_PARAMCHK: value->iValue = model->BSIM3paramChk; return(OK); case BSIM3_MOD_BINUNIT: value->iValue = model->BSIM3binUnit; return(OK); case BSIM3_MOD_CAPMOD: value->iValue = model->BSIM3capMod; return(OK); case BSIM3_MOD_NOIMOD: value->iValue = model->BSIM3noiMod; return(OK); case BSIM3_MOD_NQSMOD: value->iValue = model->BSIM3nqsMod; return(OK); case BSIM3_MOD_ACNQSMOD: value->iValue = model->BSIM3acnqsMod; return(OK); case BSIM3_MOD_ACMMOD: value->iValue = model->BSIM3acmMod; return(OK); case BSIM3_MOD_CALCACM: value->iValue = model->BSIM3calcacm; return(OK); case BSIM3_MOD_VERSION : value->sValue = model->BSIM3version; return(OK); case BSIM3_MOD_TOX : value->rValue = model->BSIM3tox; return(OK); case BSIM3_MOD_TOXM : value->rValue = model->BSIM3toxm; return(OK); case BSIM3_MOD_CDSC : value->rValue = model->BSIM3cdsc; return(OK); case BSIM3_MOD_CDSCB : value->rValue = model->BSIM3cdscb; return(OK); case BSIM3_MOD_CDSCD : value->rValue = model->BSIM3cdscd; return(OK); case BSIM3_MOD_CIT : value->rValue = model->BSIM3cit; return(OK); case BSIM3_MOD_NFACTOR : value->rValue = model->BSIM3nfactor; return(OK); case BSIM3_MOD_XJ: value->rValue = model->BSIM3xj; return(OK); case BSIM3_MOD_VSAT: value->rValue = model->BSIM3vsat; return(OK); case BSIM3_MOD_AT: value->rValue = model->BSIM3at; return(OK); case BSIM3_MOD_A0: value->rValue = model->BSIM3a0; return(OK); case BSIM3_MOD_AGS: value->rValue = model->BSIM3ags; return(OK); case BSIM3_MOD_A1: value->rValue = model->BSIM3a1; return(OK); case BSIM3_MOD_A2: value->rValue = model->BSIM3a2; return(OK); case BSIM3_MOD_KETA: value->rValue = model->BSIM3keta; return(OK); case BSIM3_MOD_NSUB: value->rValue = model->BSIM3nsub; return(OK); case BSIM3_MOD_NPEAK: value->rValue = model->BSIM3npeak; return(OK); case BSIM3_MOD_NGATE: value->rValue = model->BSIM3ngate; return(OK); case BSIM3_MOD_GAMMA1: value->rValue = model->BSIM3gamma1; return(OK); case BSIM3_MOD_GAMMA2: value->rValue = model->BSIM3gamma2; return(OK); case BSIM3_MOD_VBX: value->rValue = model->BSIM3vbx; return(OK); case BSIM3_MOD_VBM: value->rValue = model->BSIM3vbm; return(OK); case BSIM3_MOD_XT: value->rValue = model->BSIM3xt; return(OK); case BSIM3_MOD_K1: value->rValue = model->BSIM3k1; return(OK); case BSIM3_MOD_KT1: value->rValue = model->BSIM3kt1; return(OK); case BSIM3_MOD_KT1L: value->rValue = model->BSIM3kt1l; return(OK); case BSIM3_MOD_KT2 : value->rValue = model->BSIM3kt2; return(OK); case BSIM3_MOD_K2 : value->rValue = model->BSIM3k2; return(OK); case BSIM3_MOD_K3: value->rValue = model->BSIM3k3; return(OK); case BSIM3_MOD_K3B: value->rValue = model->BSIM3k3b; return(OK); case BSIM3_MOD_W0: value->rValue = model->BSIM3w0; return(OK); case BSIM3_MOD_NLX: value->rValue = model->BSIM3nlx; return(OK); case BSIM3_MOD_DVT0 : value->rValue = model->BSIM3dvt0; return(OK); case BSIM3_MOD_DVT1 : value->rValue = model->BSIM3dvt1; return(OK); case BSIM3_MOD_DVT2 : value->rValue = model->BSIM3dvt2; return(OK); case BSIM3_MOD_DVT0W : value->rValue = model->BSIM3dvt0w; return(OK); case BSIM3_MOD_DVT1W : value->rValue = model->BSIM3dvt1w; return(OK); case BSIM3_MOD_DVT2W : value->rValue = model->BSIM3dvt2w; return(OK); case BSIM3_MOD_DROUT : value->rValue = model->BSIM3drout; return(OK); case BSIM3_MOD_DSUB : value->rValue = model->BSIM3dsub; return(OK); case BSIM3_MOD_VTH0: value->rValue = model->BSIM3vth0; return(OK); case BSIM3_MOD_UA: value->rValue = model->BSIM3ua; return(OK); case BSIM3_MOD_UA1: value->rValue = model->BSIM3ua1; return(OK); case BSIM3_MOD_UB: value->rValue = model->BSIM3ub; return(OK); case BSIM3_MOD_UB1: value->rValue = model->BSIM3ub1; return(OK); case BSIM3_MOD_UC: value->rValue = model->BSIM3uc; return(OK); case BSIM3_MOD_UC1: value->rValue = model->BSIM3uc1; return(OK); case BSIM3_MOD_U0: value->rValue = model->BSIM3u0; return(OK); case BSIM3_MOD_UTE: value->rValue = model->BSIM3ute; return(OK); case BSIM3_MOD_VOFF: value->rValue = model->BSIM3voff; return(OK); case BSIM3_MOD_DELTA: value->rValue = model->BSIM3delta; return(OK); case BSIM3_MOD_RDSW: value->rValue = model->BSIM3rdsw; return(OK); case BSIM3_MOD_PRWG: value->rValue = model->BSIM3prwg; return(OK); case BSIM3_MOD_PRWB: value->rValue = model->BSIM3prwb; return(OK); case BSIM3_MOD_PRT: value->rValue = model->BSIM3prt; return(OK); case BSIM3_MOD_ETA0: value->rValue = model->BSIM3eta0; return(OK); case BSIM3_MOD_ETAB: value->rValue = model->BSIM3etab; return(OK); case BSIM3_MOD_PCLM: value->rValue = model->BSIM3pclm; return(OK); case BSIM3_MOD_PDIBL1: value->rValue = model->BSIM3pdibl1; return(OK); case BSIM3_MOD_PDIBL2: value->rValue = model->BSIM3pdibl2; return(OK); case BSIM3_MOD_PDIBLB: value->rValue = model->BSIM3pdiblb; return(OK); case BSIM3_MOD_PSCBE1: value->rValue = model->BSIM3pscbe1; return(OK); case BSIM3_MOD_PSCBE2: value->rValue = model->BSIM3pscbe2; return(OK); case BSIM3_MOD_PVAG: value->rValue = model->BSIM3pvag; return(OK); case BSIM3_MOD_WR: value->rValue = model->BSIM3wr; return(OK); case BSIM3_MOD_DWG: value->rValue = model->BSIM3dwg; return(OK); case BSIM3_MOD_DWB: value->rValue = model->BSIM3dwb; return(OK); case BSIM3_MOD_B0: value->rValue = model->BSIM3b0; return(OK); case BSIM3_MOD_B1: value->rValue = model->BSIM3b1; return(OK); case BSIM3_MOD_ALPHA0: value->rValue = model->BSIM3alpha0; return(OK); case BSIM3_MOD_ALPHA1: value->rValue = model->BSIM3alpha1; return(OK); case BSIM3_MOD_BETA0: value->rValue = model->BSIM3beta0; return(OK); case BSIM3_MOD_IJTH: value->rValue = model->BSIM3ijth; return(OK); case BSIM3_MOD_VFB: value->rValue = model->BSIM3vfb; return(OK); case BSIM3_MOD_ELM: value->rValue = model->BSIM3elm; return(OK); case BSIM3_MOD_CGSL: value->rValue = model->BSIM3cgsl; return(OK); case BSIM3_MOD_CGDL: value->rValue = model->BSIM3cgdl; return(OK); case BSIM3_MOD_CKAPPA: value->rValue = model->BSIM3ckappa; return(OK); case BSIM3_MOD_CF: value->rValue = model->BSIM3cf; return(OK); case BSIM3_MOD_CLC: value->rValue = model->BSIM3clc; return(OK); case BSIM3_MOD_CLE: value->rValue = model->BSIM3cle; return(OK); case BSIM3_MOD_DWC: value->rValue = model->BSIM3dwc; return(OK); case BSIM3_MOD_DLC: value->rValue = model->BSIM3dlc; return(OK); case BSIM3_MOD_VFBCV: value->rValue = model->BSIM3vfbcv; return(OK); case BSIM3_MOD_ACDE: value->rValue = model->BSIM3acde; return(OK); case BSIM3_MOD_MOIN: value->rValue = model->BSIM3moin; return(OK); case BSIM3_MOD_NOFF: value->rValue = model->BSIM3noff; return(OK); case BSIM3_MOD_VOFFCV: value->rValue = model->BSIM3voffcv; return(OK); case BSIM3_MOD_TCJ: value->rValue = model->BSIM3tcj; return(OK); case BSIM3_MOD_TPB: value->rValue = model->BSIM3tpb; return(OK); case BSIM3_MOD_TCJSW: value->rValue = model->BSIM3tcjsw; return(OK); case BSIM3_MOD_TPBSW: value->rValue = model->BSIM3tpbsw; return(OK); case BSIM3_MOD_TCJSWG: value->rValue = model->BSIM3tcjswg; return(OK); case BSIM3_MOD_TPBSWG: value->rValue = model->BSIM3tpbswg; return(OK); /* ACM model */ case BSIM3_MOD_HDIF: value->rValue = model->BSIM3hdif; return(OK); case BSIM3_MOD_LDIF: value->rValue = model->BSIM3ldif; return(OK); case BSIM3_MOD_LD: value->rValue = model->BSIM3ld; return(OK); case BSIM3_MOD_RD: value->rValue = model->BSIM3rd; return(OK); case BSIM3_MOD_RS: value->rValue = model->BSIM3rs; return(OK); case BSIM3_MOD_RDC: value->rValue = model->BSIM3rdc; return(OK); case BSIM3_MOD_RSC: value->rValue = model->BSIM3rsc; return(OK); case BSIM3_MOD_WMLT: value->rValue = model->BSIM3wmlt; return(OK); /* Length dependence */ case BSIM3_MOD_LCDSC : value->rValue = model->BSIM3lcdsc; return(OK); case BSIM3_MOD_LCDSCB : value->rValue = model->BSIM3lcdscb; return(OK); case BSIM3_MOD_LCDSCD : value->rValue = model->BSIM3lcdscd; return(OK); case BSIM3_MOD_LCIT : value->rValue = model->BSIM3lcit; return(OK); case BSIM3_MOD_LNFACTOR : value->rValue = model->BSIM3lnfactor; return(OK); case BSIM3_MOD_LXJ: value->rValue = model->BSIM3lxj; return(OK); case BSIM3_MOD_LVSAT: value->rValue = model->BSIM3lvsat; return(OK); case BSIM3_MOD_LAT: value->rValue = model->BSIM3lat; return(OK); case BSIM3_MOD_LA0: value->rValue = model->BSIM3la0; return(OK); case BSIM3_MOD_LAGS: value->rValue = model->BSIM3lags; return(OK); case BSIM3_MOD_LA1: value->rValue = model->BSIM3la1; return(OK); case BSIM3_MOD_LA2: value->rValue = model->BSIM3la2; return(OK); case BSIM3_MOD_LKETA: value->rValue = model->BSIM3lketa; return(OK); case BSIM3_MOD_LNSUB: value->rValue = model->BSIM3lnsub; return(OK); case BSIM3_MOD_LNPEAK: value->rValue = model->BSIM3lnpeak; return(OK); case BSIM3_MOD_LNGATE: value->rValue = model->BSIM3lngate; return(OK); case BSIM3_MOD_LGAMMA1: value->rValue = model->BSIM3lgamma1; return(OK); case BSIM3_MOD_LGAMMA2: value->rValue = model->BSIM3lgamma2; return(OK); case BSIM3_MOD_LVBX: value->rValue = model->BSIM3lvbx; return(OK); case BSIM3_MOD_LVBM: value->rValue = model->BSIM3lvbm; return(OK); case BSIM3_MOD_LXT: value->rValue = model->BSIM3lxt; return(OK); case BSIM3_MOD_LK1: value->rValue = model->BSIM3lk1; return(OK); case BSIM3_MOD_LKT1: value->rValue = model->BSIM3lkt1; return(OK); case BSIM3_MOD_LKT1L: value->rValue = model->BSIM3lkt1l; return(OK); case BSIM3_MOD_LKT2 : value->rValue = model->BSIM3lkt2; return(OK); case BSIM3_MOD_LK2 : value->rValue = model->BSIM3lk2; return(OK); case BSIM3_MOD_LK3: value->rValue = model->BSIM3lk3; return(OK); case BSIM3_MOD_LK3B: value->rValue = model->BSIM3lk3b; return(OK); case BSIM3_MOD_LW0: value->rValue = model->BSIM3lw0; return(OK); case BSIM3_MOD_LNLX: value->rValue = model->BSIM3lnlx; return(OK); case BSIM3_MOD_LDVT0: value->rValue = model->BSIM3ldvt0; return(OK); case BSIM3_MOD_LDVT1 : value->rValue = model->BSIM3ldvt1; return(OK); case BSIM3_MOD_LDVT2 : value->rValue = model->BSIM3ldvt2; return(OK); case BSIM3_MOD_LDVT0W : value->rValue = model->BSIM3ldvt0w; return(OK); case BSIM3_MOD_LDVT1W : value->rValue = model->BSIM3ldvt1w; return(OK); case BSIM3_MOD_LDVT2W : value->rValue = model->BSIM3ldvt2w; return(OK); case BSIM3_MOD_LDROUT : value->rValue = model->BSIM3ldrout; return(OK); case BSIM3_MOD_LDSUB : value->rValue = model->BSIM3ldsub; return(OK); case BSIM3_MOD_LVTH0: value->rValue = model->BSIM3lvth0; return(OK); case BSIM3_MOD_LUA: value->rValue = model->BSIM3lua; return(OK); case BSIM3_MOD_LUA1: value->rValue = model->BSIM3lua1; return(OK); case BSIM3_MOD_LUB: value->rValue = model->BSIM3lub; return(OK); case BSIM3_MOD_LUB1: value->rValue = model->BSIM3lub1; return(OK); case BSIM3_MOD_LUC: value->rValue = model->BSIM3luc; return(OK); case BSIM3_MOD_LUC1: value->rValue = model->BSIM3luc1; return(OK); case BSIM3_MOD_LU0: value->rValue = model->BSIM3lu0; return(OK); case BSIM3_MOD_LUTE: value->rValue = model->BSIM3lute; return(OK); case BSIM3_MOD_LVOFF: value->rValue = model->BSIM3lvoff; return(OK); case BSIM3_MOD_LDELTA: value->rValue = model->BSIM3ldelta; return(OK); case BSIM3_MOD_LRDSW: value->rValue = model->BSIM3lrdsw; return(OK); case BSIM3_MOD_LPRWB: value->rValue = model->BSIM3lprwb; return(OK); case BSIM3_MOD_LPRWG: value->rValue = model->BSIM3lprwg; return(OK); case BSIM3_MOD_LPRT: value->rValue = model->BSIM3lprt; return(OK); case BSIM3_MOD_LETA0: value->rValue = model->BSIM3leta0; return(OK); case BSIM3_MOD_LETAB: value->rValue = model->BSIM3letab; return(OK); case BSIM3_MOD_LPCLM: value->rValue = model->BSIM3lpclm; return(OK); case BSIM3_MOD_LPDIBL1: value->rValue = model->BSIM3lpdibl1; return(OK); case BSIM3_MOD_LPDIBL2: value->rValue = model->BSIM3lpdibl2; return(OK); case BSIM3_MOD_LPDIBLB: value->rValue = model->BSIM3lpdiblb; return(OK); case BSIM3_MOD_LPSCBE1: value->rValue = model->BSIM3lpscbe1; return(OK); case BSIM3_MOD_LPSCBE2: value->rValue = model->BSIM3lpscbe2; return(OK); case BSIM3_MOD_LPVAG: value->rValue = model->BSIM3lpvag; return(OK); case BSIM3_MOD_LWR: value->rValue = model->BSIM3lwr; return(OK); case BSIM3_MOD_LDWG: value->rValue = model->BSIM3ldwg; return(OK); case BSIM3_MOD_LDWB: value->rValue = model->BSIM3ldwb; return(OK); case BSIM3_MOD_LB0: value->rValue = model->BSIM3lb0; return(OK); case BSIM3_MOD_LB1: value->rValue = model->BSIM3lb1; return(OK); case BSIM3_MOD_LALPHA0: value->rValue = model->BSIM3lalpha0; return(OK); case BSIM3_MOD_LALPHA1: value->rValue = model->BSIM3lalpha1; return(OK); case BSIM3_MOD_LBETA0: value->rValue = model->BSIM3lbeta0; return(OK); case BSIM3_MOD_LVFB: value->rValue = model->BSIM3lvfb; return(OK); case BSIM3_MOD_LELM: value->rValue = model->BSIM3lelm; return(OK); case BSIM3_MOD_LCGSL: value->rValue = model->BSIM3lcgsl; return(OK); case BSIM3_MOD_LCGDL: value->rValue = model->BSIM3lcgdl; return(OK); case BSIM3_MOD_LCKAPPA: value->rValue = model->BSIM3lckappa; return(OK); case BSIM3_MOD_LCF: value->rValue = model->BSIM3lcf; return(OK); case BSIM3_MOD_LCLC: value->rValue = model->BSIM3lclc; return(OK); case BSIM3_MOD_LCLE: value->rValue = model->BSIM3lcle; return(OK); case BSIM3_MOD_LVFBCV: value->rValue = model->BSIM3lvfbcv; return(OK); case BSIM3_MOD_LACDE: value->rValue = model->BSIM3lacde; return(OK); case BSIM3_MOD_LMOIN: value->rValue = model->BSIM3lmoin; return(OK); case BSIM3_MOD_LNOFF: value->rValue = model->BSIM3lnoff; return(OK); case BSIM3_MOD_LVOFFCV: value->rValue = model->BSIM3lvoffcv; return(OK); /* Width dependence */ case BSIM3_MOD_WCDSC : value->rValue = model->BSIM3wcdsc; return(OK); case BSIM3_MOD_WCDSCB : value->rValue = model->BSIM3wcdscb; return(OK); case BSIM3_MOD_WCDSCD : value->rValue = model->BSIM3wcdscd; return(OK); case BSIM3_MOD_WCIT : value->rValue = model->BSIM3wcit; return(OK); case BSIM3_MOD_WNFACTOR : value->rValue = model->BSIM3wnfactor; return(OK); case BSIM3_MOD_WXJ: value->rValue = model->BSIM3wxj; return(OK); case BSIM3_MOD_WVSAT: value->rValue = model->BSIM3wvsat; return(OK); case BSIM3_MOD_WAT: value->rValue = model->BSIM3wat; return(OK); case BSIM3_MOD_WA0: value->rValue = model->BSIM3wa0; return(OK); case BSIM3_MOD_WAGS: value->rValue = model->BSIM3wags; return(OK); case BSIM3_MOD_WA1: value->rValue = model->BSIM3wa1; return(OK); case BSIM3_MOD_WA2: value->rValue = model->BSIM3wa2; return(OK); case BSIM3_MOD_WKETA: value->rValue = model->BSIM3wketa; return(OK); case BSIM3_MOD_WNSUB: value->rValue = model->BSIM3wnsub; return(OK); case BSIM3_MOD_WNPEAK: value->rValue = model->BSIM3wnpeak; return(OK); case BSIM3_MOD_WNGATE: value->rValue = model->BSIM3wngate; return(OK); case BSIM3_MOD_WGAMMA1: value->rValue = model->BSIM3wgamma1; return(OK); case BSIM3_MOD_WGAMMA2: value->rValue = model->BSIM3wgamma2; return(OK); case BSIM3_MOD_WVBX: value->rValue = model->BSIM3wvbx; return(OK); case BSIM3_MOD_WVBM: value->rValue = model->BSIM3wvbm; return(OK); case BSIM3_MOD_WXT: value->rValue = model->BSIM3wxt; return(OK); case BSIM3_MOD_WK1: value->rValue = model->BSIM3wk1; return(OK); case BSIM3_MOD_WKT1: value->rValue = model->BSIM3wkt1; return(OK); case BSIM3_MOD_WKT1L: value->rValue = model->BSIM3wkt1l; return(OK); case BSIM3_MOD_WKT2 : value->rValue = model->BSIM3wkt2; return(OK); case BSIM3_MOD_WK2 : value->rValue = model->BSIM3wk2; return(OK); case BSIM3_MOD_WK3: value->rValue = model->BSIM3wk3; return(OK); case BSIM3_MOD_WK3B: value->rValue = model->BSIM3wk3b; return(OK); case BSIM3_MOD_WW0: value->rValue = model->BSIM3ww0; return(OK); case BSIM3_MOD_WNLX: value->rValue = model->BSIM3wnlx; return(OK); case BSIM3_MOD_WDVT0: value->rValue = model->BSIM3wdvt0; return(OK); case BSIM3_MOD_WDVT1 : value->rValue = model->BSIM3wdvt1; return(OK); case BSIM3_MOD_WDVT2 : value->rValue = model->BSIM3wdvt2; return(OK); case BSIM3_MOD_WDVT0W : value->rValue = model->BSIM3wdvt0w; return(OK); case BSIM3_MOD_WDVT1W : value->rValue = model->BSIM3wdvt1w; return(OK); case BSIM3_MOD_WDVT2W : value->rValue = model->BSIM3wdvt2w; return(OK); case BSIM3_MOD_WDROUT : value->rValue = model->BSIM3wdrout; return(OK); case BSIM3_MOD_WDSUB : value->rValue = model->BSIM3wdsub; return(OK); case BSIM3_MOD_WVTH0: value->rValue = model->BSIM3wvth0; return(OK); case BSIM3_MOD_WUA: value->rValue = model->BSIM3wua; return(OK); case BSIM3_MOD_WUA1: value->rValue = model->BSIM3wua1; return(OK); case BSIM3_MOD_WUB: value->rValue = model->BSIM3wub; return(OK); case BSIM3_MOD_WUB1: value->rValue = model->BSIM3wub1; return(OK); case BSIM3_MOD_WUC: value->rValue = model->BSIM3wuc; return(OK); case BSIM3_MOD_WUC1: value->rValue = model->BSIM3wuc1; return(OK); case BSIM3_MOD_WU0: value->rValue = model->BSIM3wu0; return(OK); case BSIM3_MOD_WUTE: value->rValue = model->BSIM3wute; return(OK); case BSIM3_MOD_WVOFF: value->rValue = model->BSIM3wvoff; return(OK); case BSIM3_MOD_WDELTA: value->rValue = model->BSIM3wdelta; return(OK); case BSIM3_MOD_WRDSW: value->rValue = model->BSIM3wrdsw; return(OK); case BSIM3_MOD_WPRWB: value->rValue = model->BSIM3wprwb; return(OK); case BSIM3_MOD_WPRWG: value->rValue = model->BSIM3wprwg; return(OK); case BSIM3_MOD_WPRT: value->rValue = model->BSIM3wprt; return(OK); case BSIM3_MOD_WETA0: value->rValue = model->BSIM3weta0; return(OK); case BSIM3_MOD_WETAB: value->rValue = model->BSIM3wetab; return(OK); case BSIM3_MOD_WPCLM: value->rValue = model->BSIM3wpclm; return(OK); case BSIM3_MOD_WPDIBL1: value->rValue = model->BSIM3wpdibl1; return(OK); case BSIM3_MOD_WPDIBL2: value->rValue = model->BSIM3wpdibl2; return(OK); case BSIM3_MOD_WPDIBLB: value->rValue = model->BSIM3wpdiblb; return(OK); case BSIM3_MOD_WPSCBE1: value->rValue = model->BSIM3wpscbe1; return(OK); case BSIM3_MOD_WPSCBE2: value->rValue = model->BSIM3wpscbe2; return(OK); case BSIM3_MOD_WPVAG: value->rValue = model->BSIM3wpvag; return(OK); case BSIM3_MOD_WWR: value->rValue = model->BSIM3wwr; return(OK); case BSIM3_MOD_WDWG: value->rValue = model->BSIM3wdwg; return(OK); case BSIM3_MOD_WDWB: value->rValue = model->BSIM3wdwb; return(OK); case BSIM3_MOD_WB0: value->rValue = model->BSIM3wb0; return(OK); case BSIM3_MOD_WB1: value->rValue = model->BSIM3wb1; return(OK); case BSIM3_MOD_WALPHA0: value->rValue = model->BSIM3walpha0; return(OK); case BSIM3_MOD_WALPHA1: value->rValue = model->BSIM3walpha1; return(OK); case BSIM3_MOD_WBETA0: value->rValue = model->BSIM3wbeta0; return(OK); case BSIM3_MOD_WVFB: value->rValue = model->BSIM3wvfb; return(OK); case BSIM3_MOD_WELM: value->rValue = model->BSIM3welm; return(OK); case BSIM3_MOD_WCGSL: value->rValue = model->BSIM3wcgsl; return(OK); case BSIM3_MOD_WCGDL: value->rValue = model->BSIM3wcgdl; return(OK); case BSIM3_MOD_WCKAPPA: value->rValue = model->BSIM3wckappa; return(OK); case BSIM3_MOD_WCF: value->rValue = model->BSIM3wcf; return(OK); case BSIM3_MOD_WCLC: value->rValue = model->BSIM3wclc; return(OK); case BSIM3_MOD_WCLE: value->rValue = model->BSIM3wcle; return(OK); case BSIM3_MOD_WVFBCV: value->rValue = model->BSIM3wvfbcv; return(OK); case BSIM3_MOD_WACDE: value->rValue = model->BSIM3wacde; return(OK); case BSIM3_MOD_WMOIN: value->rValue = model->BSIM3wmoin; return(OK); case BSIM3_MOD_WNOFF: value->rValue = model->BSIM3wnoff; return(OK); case BSIM3_MOD_WVOFFCV: value->rValue = model->BSIM3wvoffcv; return(OK); /* Cross-term dependence */ case BSIM3_MOD_PCDSC : value->rValue = model->BSIM3pcdsc; return(OK); case BSIM3_MOD_PCDSCB : value->rValue = model->BSIM3pcdscb; return(OK); case BSIM3_MOD_PCDSCD : value->rValue = model->BSIM3pcdscd; return(OK); case BSIM3_MOD_PCIT : value->rValue = model->BSIM3pcit; return(OK); case BSIM3_MOD_PNFACTOR : value->rValue = model->BSIM3pnfactor; return(OK); case BSIM3_MOD_PXJ: value->rValue = model->BSIM3pxj; return(OK); case BSIM3_MOD_PVSAT: value->rValue = model->BSIM3pvsat; return(OK); case BSIM3_MOD_PAT: value->rValue = model->BSIM3pat; return(OK); case BSIM3_MOD_PA0: value->rValue = model->BSIM3pa0; return(OK); case BSIM3_MOD_PAGS: value->rValue = model->BSIM3pags; return(OK); case BSIM3_MOD_PA1: value->rValue = model->BSIM3pa1; return(OK); case BSIM3_MOD_PA2: value->rValue = model->BSIM3pa2; return(OK); case BSIM3_MOD_PKETA: value->rValue = model->BSIM3pketa; return(OK); case BSIM3_MOD_PNSUB: value->rValue = model->BSIM3pnsub; return(OK); case BSIM3_MOD_PNPEAK: value->rValue = model->BSIM3pnpeak; return(OK); case BSIM3_MOD_PNGATE: value->rValue = model->BSIM3pngate; return(OK); case BSIM3_MOD_PGAMMA1: value->rValue = model->BSIM3pgamma1; return(OK); case BSIM3_MOD_PGAMMA2: value->rValue = model->BSIM3pgamma2; return(OK); case BSIM3_MOD_PVBX: value->rValue = model->BSIM3pvbx; return(OK); case BSIM3_MOD_PVBM: value->rValue = model->BSIM3pvbm; return(OK); case BSIM3_MOD_PXT: value->rValue = model->BSIM3pxt; return(OK); case BSIM3_MOD_PK1: value->rValue = model->BSIM3pk1; return(OK); case BSIM3_MOD_PKT1: value->rValue = model->BSIM3pkt1; return(OK); case BSIM3_MOD_PKT1L: value->rValue = model->BSIM3pkt1l; return(OK); case BSIM3_MOD_PKT2 : value->rValue = model->BSIM3pkt2; return(OK); case BSIM3_MOD_PK2 : value->rValue = model->BSIM3pk2; return(OK); case BSIM3_MOD_PK3: value->rValue = model->BSIM3pk3; return(OK); case BSIM3_MOD_PK3B: value->rValue = model->BSIM3pk3b; return(OK); case BSIM3_MOD_PW0: value->rValue = model->BSIM3pw0; return(OK); case BSIM3_MOD_PNLX: value->rValue = model->BSIM3pnlx; return(OK); case BSIM3_MOD_PDVT0 : value->rValue = model->BSIM3pdvt0; return(OK); case BSIM3_MOD_PDVT1 : value->rValue = model->BSIM3pdvt1; return(OK); case BSIM3_MOD_PDVT2 : value->rValue = model->BSIM3pdvt2; return(OK); case BSIM3_MOD_PDVT0W : value->rValue = model->BSIM3pdvt0w; return(OK); case BSIM3_MOD_PDVT1W : value->rValue = model->BSIM3pdvt1w; return(OK); case BSIM3_MOD_PDVT2W : value->rValue = model->BSIM3pdvt2w; return(OK); case BSIM3_MOD_PDROUT : value->rValue = model->BSIM3pdrout; return(OK); case BSIM3_MOD_PDSUB : value->rValue = model->BSIM3pdsub; return(OK); case BSIM3_MOD_PVTH0: value->rValue = model->BSIM3pvth0; return(OK); case BSIM3_MOD_PUA: value->rValue = model->BSIM3pua; return(OK); case BSIM3_MOD_PUA1: value->rValue = model->BSIM3pua1; return(OK); case BSIM3_MOD_PUB: value->rValue = model->BSIM3pub; return(OK); case BSIM3_MOD_PUB1: value->rValue = model->BSIM3pub1; return(OK); case BSIM3_MOD_PUC: value->rValue = model->BSIM3puc; return(OK); case BSIM3_MOD_PUC1: value->rValue = model->BSIM3puc1; return(OK); case BSIM3_MOD_PU0: value->rValue = model->BSIM3pu0; return(OK); case BSIM3_MOD_PUTE: value->rValue = model->BSIM3pute; return(OK); case BSIM3_MOD_PVOFF: value->rValue = model->BSIM3pvoff; return(OK); case BSIM3_MOD_PDELTA: value->rValue = model->BSIM3pdelta; return(OK); case BSIM3_MOD_PRDSW: value->rValue = model->BSIM3prdsw; return(OK); case BSIM3_MOD_PPRWB: value->rValue = model->BSIM3pprwb; return(OK); case BSIM3_MOD_PPRWG: value->rValue = model->BSIM3pprwg; return(OK); case BSIM3_MOD_PPRT: value->rValue = model->BSIM3pprt; return(OK); case BSIM3_MOD_PETA0: value->rValue = model->BSIM3peta0; return(OK); case BSIM3_MOD_PETAB: value->rValue = model->BSIM3petab; return(OK); case BSIM3_MOD_PPCLM: value->rValue = model->BSIM3ppclm; return(OK); case BSIM3_MOD_PPDIBL1: value->rValue = model->BSIM3ppdibl1; return(OK); case BSIM3_MOD_PPDIBL2: value->rValue = model->BSIM3ppdibl2; return(OK); case BSIM3_MOD_PPDIBLB: value->rValue = model->BSIM3ppdiblb; return(OK); case BSIM3_MOD_PPSCBE1: value->rValue = model->BSIM3ppscbe1; return(OK); case BSIM3_MOD_PPSCBE2: value->rValue = model->BSIM3ppscbe2; return(OK); case BSIM3_MOD_PPVAG: value->rValue = model->BSIM3ppvag; return(OK); case BSIM3_MOD_PWR: value->rValue = model->BSIM3pwr; return(OK); case BSIM3_MOD_PDWG: value->rValue = model->BSIM3pdwg; return(OK); case BSIM3_MOD_PDWB: value->rValue = model->BSIM3pdwb; return(OK); case BSIM3_MOD_PB0: value->rValue = model->BSIM3pb0; return(OK); case BSIM3_MOD_PB1: value->rValue = model->BSIM3pb1; return(OK); case BSIM3_MOD_PALPHA0: value->rValue = model->BSIM3palpha0; return(OK); case BSIM3_MOD_PALPHA1: value->rValue = model->BSIM3palpha1; return(OK); case BSIM3_MOD_PBETA0: value->rValue = model->BSIM3pbeta0; return(OK); case BSIM3_MOD_PVFB: value->rValue = model->BSIM3pvfb; return(OK); case BSIM3_MOD_PELM: value->rValue = model->BSIM3pelm; return(OK); case BSIM3_MOD_PCGSL: value->rValue = model->BSIM3pcgsl; return(OK); case BSIM3_MOD_PCGDL: value->rValue = model->BSIM3pcgdl; return(OK); case BSIM3_MOD_PCKAPPA: value->rValue = model->BSIM3pckappa; return(OK); case BSIM3_MOD_PCF: value->rValue = model->BSIM3pcf; return(OK); case BSIM3_MOD_PCLC: value->rValue = model->BSIM3pclc; return(OK); case BSIM3_MOD_PCLE: value->rValue = model->BSIM3pcle; return(OK); case BSIM3_MOD_PVFBCV: value->rValue = model->BSIM3pvfbcv; return(OK); case BSIM3_MOD_PACDE: value->rValue = model->BSIM3pacde; return(OK); case BSIM3_MOD_PMOIN: value->rValue = model->BSIM3pmoin; return(OK); case BSIM3_MOD_PNOFF: value->rValue = model->BSIM3pnoff; return(OK); case BSIM3_MOD_PVOFFCV: value->rValue = model->BSIM3pvoffcv; return(OK); case BSIM3_MOD_TNOM : value->rValue = model->BSIM3tnom; return(OK); case BSIM3_MOD_CGSO: value->rValue = model->BSIM3cgso; return(OK); case BSIM3_MOD_CGDO: value->rValue = model->BSIM3cgdo; return(OK); case BSIM3_MOD_CGBO: value->rValue = model->BSIM3cgbo; return(OK); case BSIM3_MOD_XPART: value->rValue = model->BSIM3xpart; return(OK); case BSIM3_MOD_RSH: value->rValue = model->BSIM3sheetResistance; return(OK); case BSIM3_MOD_JS: value->rValue = model->BSIM3jctSatCurDensity; return(OK); case BSIM3_MOD_JSW: value->rValue = model->BSIM3jctSidewallSatCurDensity; return(OK); case BSIM3_MOD_PB: value->rValue = model->BSIM3bulkJctPotential; return(OK); case BSIM3_MOD_MJ: value->rValue = model->BSIM3bulkJctBotGradingCoeff; return(OK); case BSIM3_MOD_PBSW: value->rValue = model->BSIM3sidewallJctPotential; return(OK); case BSIM3_MOD_MJSW: value->rValue = model->BSIM3bulkJctSideGradingCoeff; return(OK); case BSIM3_MOD_CJ: value->rValue = model->BSIM3unitAreaJctCap; return(OK); case BSIM3_MOD_CJSW: value->rValue = model->BSIM3unitLengthSidewallJctCap; return(OK); case BSIM3_MOD_PBSWG: value->rValue = model->BSIM3GatesidewallJctPotential; return(OK); case BSIM3_MOD_MJSWG: value->rValue = model->BSIM3bulkJctGateSideGradingCoeff; return(OK); case BSIM3_MOD_CJSWG: value->rValue = model->BSIM3unitLengthGateSidewallJctCap; return(OK); case BSIM3_MOD_NJ: value->rValue = model->BSIM3jctEmissionCoeff; return(OK); case BSIM3_MOD_XTI: value->rValue = model->BSIM3jctTempExponent; return(OK); case BSIM3_MOD_LINTNOI: value->rValue = model->BSIM3lintnoi; return(OK); case BSIM3_MOD_LINT: value->rValue = model->BSIM3Lint; return(OK); case BSIM3_MOD_LL: value->rValue = model->BSIM3Ll; return(OK); case BSIM3_MOD_LLC: value->rValue = model->BSIM3Llc; return(OK); case BSIM3_MOD_LLN: value->rValue = model->BSIM3Lln; return(OK); case BSIM3_MOD_LW: value->rValue = model->BSIM3Lw; return(OK); case BSIM3_MOD_LWC: value->rValue = model->BSIM3Lwc; return(OK); case BSIM3_MOD_LWN: value->rValue = model->BSIM3Lwn; return(OK); case BSIM3_MOD_LWL: value->rValue = model->BSIM3Lwl; return(OK); case BSIM3_MOD_LWLC: value->rValue = model->BSIM3Lwlc; return(OK); case BSIM3_MOD_LMIN: value->rValue = model->BSIM3Lmin; return(OK); case BSIM3_MOD_LMAX: value->rValue = model->BSIM3Lmax; return(OK); case BSIM3_MOD_WINT: value->rValue = model->BSIM3Wint; return(OK); case BSIM3_MOD_WL: value->rValue = model->BSIM3Wl; return(OK); case BSIM3_MOD_WLC: value->rValue = model->BSIM3Wlc; return(OK); case BSIM3_MOD_WLN: value->rValue = model->BSIM3Wln; return(OK); case BSIM3_MOD_WW: value->rValue = model->BSIM3Ww; return(OK); case BSIM3_MOD_WWC: value->rValue = model->BSIM3Wwc; return(OK); case BSIM3_MOD_WWN: value->rValue = model->BSIM3Wwn; return(OK); case BSIM3_MOD_WWL: value->rValue = model->BSIM3Wwl; return(OK); case BSIM3_MOD_WWLC: value->rValue = model->BSIM3Wwlc; return(OK); case BSIM3_MOD_WMIN: value->rValue = model->BSIM3Wmin; return(OK); case BSIM3_MOD_WMAX: value->rValue = model->BSIM3Wmax; return(OK); case BSIM3_MOD_XL: value->rValue = model->BSIM3xl; return(OK); case BSIM3_MOD_XW: value->rValue = model->BSIM3xw; return(OK); case BSIM3_MOD_NOIA: value->rValue = model->BSIM3oxideTrapDensityA; return(OK); case BSIM3_MOD_NOIB: value->rValue = model->BSIM3oxideTrapDensityB; return(OK); case BSIM3_MOD_NOIC: value->rValue = model->BSIM3oxideTrapDensityC; return(OK); case BSIM3_MOD_EM: value->rValue = model->BSIM3em; return(OK); case BSIM3_MOD_EF: value->rValue = model->BSIM3ef; return(OK); case BSIM3_MOD_AF: value->rValue = model->BSIM3af; return(OK); case BSIM3_MOD_KF: value->rValue = model->BSIM3kf; return(OK); case BSIM3_MOD_VGS_MAX: value->rValue = model->BSIM3vgsMax; return(OK); case BSIM3_MOD_VGD_MAX: value->rValue = model->BSIM3vgdMax; return(OK); case BSIM3_MOD_VGB_MAX: value->rValue = model->BSIM3vgbMax; return(OK); case BSIM3_MOD_VDS_MAX: value->rValue = model->BSIM3vdsMax; return(OK); case BSIM3_MOD_VBS_MAX: value->rValue = model->BSIM3vbsMax; return(OK); case BSIM3_MOD_VBD_MAX: value->rValue = model->BSIM3vbdMax; return(OK); case BSIM3_MOD_VGSR_MAX: value->rValue = model->BSIM3vgsrMax; return(OK); case BSIM3_MOD_VGDR_MAX: value->rValue = model->BSIM3vgdrMax; return(OK); case BSIM3_MOD_VGBR_MAX: value->rValue = model->BSIM3vgbrMax; return(OK); case BSIM3_MOD_VBSR_MAX: value->rValue = model->BSIM3vbsrMax; return(OK); case BSIM3_MOD_VBDR_MAX: value->rValue = model->BSIM3vbdrMax; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim3/b3par.c0000644000175000017500000000740013546075722021354 0ustar carstencarsten/**** BSIM3v3.3.0, Released by Xuemei Xi 07/29/2005 ****/ /********** * Copyright 2004 Regents of the University of California. All rights reserved. * File: b3par.c of BSIM3v3.3.0 * Author: 1995 Min-Chie Jeng and Mansun Chan * Author: 1997-1999 Weidong Liu. * Author: 2001 Xuemei Xi **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "bsim3def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/fteext.h" int BSIM3param ( int param, IFvalue *value, GENinstance *inst, IFvalue *select) { double scale; BSIM3instance *here = (BSIM3instance*)inst; NG_IGNORE(select); if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; switch(param) { case BSIM3_W: here->BSIM3w = value->rValue*scale; here->BSIM3wGiven = TRUE; break; case BSIM3_L: here->BSIM3l = value->rValue*scale; here->BSIM3lGiven = TRUE; break; case BSIM3_M: here->BSIM3m = value->rValue; here->BSIM3mGiven = TRUE; break; case BSIM3_AS: here->BSIM3sourceArea = value->rValue*scale*scale; here->BSIM3sourceAreaGiven = TRUE; break; case BSIM3_AD: here->BSIM3drainArea = value->rValue*scale*scale; here->BSIM3drainAreaGiven = TRUE; break; case BSIM3_PS: here->BSIM3sourcePerimeter = value->rValue*scale; here->BSIM3sourcePerimeterGiven = TRUE; break; case BSIM3_PD: here->BSIM3drainPerimeter = value->rValue*scale; here->BSIM3drainPerimeterGiven = TRUE; break; case BSIM3_NRS: here->BSIM3sourceSquares = value->rValue; here->BSIM3sourceSquaresGiven = TRUE; break; case BSIM3_NRD: here->BSIM3drainSquares = value->rValue; here->BSIM3drainSquaresGiven = TRUE; break; case BSIM3_OFF: here->BSIM3off = value->iValue; break; case BSIM3_IC_VBS: here->BSIM3icVBS = value->rValue; here->BSIM3icVBSGiven = TRUE; break; case BSIM3_IC_VDS: here->BSIM3icVDS = value->rValue; here->BSIM3icVDSGiven = TRUE; break; case BSIM3_IC_VGS: here->BSIM3icVGS = value->rValue; here->BSIM3icVGSGiven = TRUE; break; case BSIM3_NQSMOD: here->BSIM3nqsMod = value->iValue; here->BSIM3nqsModGiven = TRUE; break; case BSIM3_ACNQSMOD: here->BSIM3acnqsMod = value->iValue; here->BSIM3acnqsModGiven = TRUE; break; case BSIM3_GEO: here->BSIM3geo = value->iValue; here->BSIM3geoGiven = TRUE; break; case BSIM3_DELVTO: here->BSIM3delvto = value->rValue; here->BSIM3delvtoGiven = TRUE; break; case BSIM3_MULU0: here->BSIM3mulu0 = value->rValue; here->BSIM3mulu0Given = TRUE; break; case BSIM3_IC: switch(value->v.numValue){ case 3: here->BSIM3icVBS = *(value->v.vec.rVec+2); here->BSIM3icVBSGiven = TRUE; case 2: here->BSIM3icVGS = *(value->v.vec.rVec+1); here->BSIM3icVGSGiven = TRUE; case 1: here->BSIM3icVDS = *(value->v.vec.rVec); here->BSIM3icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/limit.c0000644000175000017500000001321313546075722020445 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/devdefs.h" /* limiting routines for junction voltages */ double DvRevMax = 0.5, DvFwdMax = 50.0e-3; double limitResistorVoltage( double vnew, double vold, int *icheck ) { double vlim, vinc; if( vnew > vold ) { vinc = 0.5; vlim = vold + vinc; if( vnew < vlim ) { *icheck = 0; return( vnew ); } else { *icheck = 1; return( vlim ); } } else if ( vnew < vold ) { vinc = 0.5; vlim = vold - vinc; if( vnew > vlim ) { *icheck = 0; return( vnew ); } else { *icheck = 1; return( vlim ); } } else { /* vnew == vold */ *icheck = 0; return( vnew ); } /* NOTREACHED */ } double limitJunctionVoltage( double vnew, double vold, int *icheck ) { double vlim, vinc; if( vold >= 0.0 ) { if( vnew > vold ) { if( vold > 0.65 ) vinc = DvFwdMax; else vinc = 2.0 * DvFwdMax; vlim = vold + vinc; if( vnew < vlim ) { *icheck = 0; return( vnew ); } else { *icheck = 1; return( vlim ); } } else if ( vnew == vold ) { *icheck = 0; return ( vnew ); } else { /* vnew is less than vold */ /* case 1: vnew is positive */ /* case 2: vnew is negative, ensure it goes thru zero */ if( vnew < 0.0 && vold <= 0.05 && vold > 0.0) { /* limit to zero when vnew < 0.0 and vold |= 0.0 */ *icheck = 1; return( 0.0 ); } vinc = 2.0 * DvFwdMax; vlim = vold - vinc; if( vlim > vnew ) { *icheck = 1; return( vlim ); } else { *icheck = 0; return( vnew ); } } } else { if( vnew < vold ) { vlim = vold - DvRevMax; if ( vlim > vnew ) { *icheck = 1; return( vlim ); } else { *icheck = 0; return( vnew ); } } else { /* vnew > vold. check if vnew less than 0.0 */ if( vnew < 0.0 ) { vlim = vold + 1.0; if( vnew < vlim ) { *icheck = 0; return( vnew ); } else { *icheck = 1; return( vlim ); } } else { vlim = vold + 2.0 * DvRevMax; *icheck = 1; if( vlim > 0.0 ) return( 0.0 ); else return( vlim ); } } } } double limitVbe( double vnew, double vold, int *icheck ) { double vlim, vinc; if( vold >= 0.0 ) { if( vnew > vold ) { if( vold > 0.9 ) /* deep high-level injection conditions */ vinc = 0.01; else if( vold > 0.85 ) vinc = 0.025; else if( vold > 0.65 ) vinc = 0.05; else vinc = 0.10; vlim = vold + vinc; if( vnew < vlim ) { *icheck = 0; return( vnew ); } else { *icheck = 1; return( vlim ); } } else if ( vnew == vold ) { *icheck = 0; return ( vnew ); } else { /* vnew is less than vold */ /* case 1: vnew is positive */ /* case 2: vnew is negative, ensure it goes thru zero */ if( vnew < 0.0 && vold <= 0.05 && vold > 0.0) { /* limit to zero when vnew < 0.0 and vold |= 0.0 */ *icheck = 1; return( 0.0 ); } vinc = 0.1; vlim = vold - vinc; if( vlim > vnew ) { *icheck = 1; return( vlim ); } else { *icheck = 0; return( vnew ); } } } else { if( vnew < vold ) { vlim = vold - 0.1; /* XXX Originally 0.1 */ if ( vlim > vnew ) { *icheck = 1; return( vlim ); } else { *icheck = 0; return( vnew ); } } else { /* vnew > vold. check if vnew less than 0.0 */ if( vnew < 0.0 ) { vlim = vold + 1.0; if( vnew < vlim ) { *icheck = 0; return( vnew ); } else { *icheck = 1; return( vlim ); } } else { vlim = vold + 1.0; *icheck = 1; if( vlim > 0.0 ) return( 0.0 ); else return( vlim ); } } } } double limitVce( double vnew, double vold, int *icheck ) { double vlim; if( vold >= 0.0 ) { if( vnew > vold ) { vlim = vold + 1.0; if( vnew < vlim ) { *icheck = 0; return( vnew ); } else { *icheck = 1; return( vlim ); } } else { vlim = vold - 0.5; /* XXX Originally 0.2 */ if( vlim > vnew ) { *icheck = 1; return( vlim ); } else { *icheck = 0; return( vnew ); } } } else { if( vnew < vold ) { vlim = vold - 1.0; if ( vlim > vnew ) { *icheck = 1; return( vlim ); } else { *icheck = 0; return( vnew ); } } else { /* vnew > vold. check if vnew less than 0.0 */ if( vnew < 0.0 ) { vlim = vold + 1.0; if( vnew < vlim ) { *icheck = 0; return( vnew ); } else { *icheck = 1; return( vlim ); } } else { vlim = vold + 1.0; *icheck = 1; if( vlim > 0.0 ) return( 0.0 ); else return( vlim ); } } } } double limitVgb( double vnew, double vold, int *icheck ) { double vlim; if( vold >= 0.0 ) { if( vnew > vold ) { vlim = vold + 1.0; if( vnew < vlim ) { *icheck = 0; return( vnew ); } else { *icheck = 1; return( vlim ); } } else { vlim = vold - 0.2; if( vlim > vnew ) { *icheck = 1; return( vlim ); } else { *icheck = 0; return( vnew ); } } } else { if( vnew < vold ) { vlim = vold - 1.0; if ( vlim > vnew ) { *icheck = 1; return( vlim ); } else { *icheck = 0; return( vnew ); } } else { /* vnew > vold. check if vnew less than 0.0 */ if( vnew < 0.0 ) { vlim = vold + 1.0; if( vnew < vlim ) { *icheck = 0; return( vnew ); } else { *icheck = 1; return( vlim ); } } else { vlim = vold + 1.0; *icheck = 1; if( vlim > 0.0 ) return( 0.0 ); else return( vlim ); } } } } tmpk8ny_4pz/src/spicelib/devices/cktask.c0000644000175000017500000000153213546075722020610 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* CKTask * * Ask questions about a specified device. */ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "dev.h" #include "ngspice/fteext.h" int CKTask(CKTcircuit *ckt, GENinstance *instance, int which, IFvalue *value, IFvalue *selector) { int type = instance->GENmodPtr->GENmodType; int error; DEVices = devices(); if(DEVices[type]->DEVask) { error = DEVices[type]->DEVask(ckt, instance, which, value, selector); } else { error = E_BADPARM; } if (error && ft_stricterror) { fprintf(stderr, "\nError: %s\n", errMsg); controlled_exit(EXIT_BAD); } return(error); } tmpk8ny_4pz/src/spicelib/devices/ltra/0000755000175000017500000000000013546075722020125 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/ltra/ltrainit.h0000644000175000017500000000037013546075722022124 0ustar carstencarsten#ifndef _LTRAINIT_H #define _LTRAINIT_H extern IFparm LTRApTable[ ]; extern IFparm LTRAmPTable[ ]; extern char *LTRAnames[ ]; extern int LTRApTSize; extern int LTRAmPTSize; extern int LTRAnSize; extern int LTRAiSize; extern int LTRAmSize; #endif tmpk8ny_4pz/src/spicelib/devices/ltra/ltraext.h0000644000175000017500000000424413546075722021765 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1990 Jaijeet S. Roychowdhury Modified: 2000 AlansFixes **********/ extern int LTRAaccept(CKTcircuit*,GENmodel*); extern int LTRAask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int LTRAacLoad(GENmodel*,CKTcircuit*); extern int LTRAload(GENmodel*,CKTcircuit*); extern int LTRAmAsk(CKTcircuit*,GENmodel*,int,IFvalue*); extern int LTRAparam(int,IFvalue*,GENinstance*,IFvalue*); extern int LTRAmParam(int,IFvalue*,GENmodel*); extern int LTRAsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int LTRAunsetup(GENmodel*,CKTcircuit*); extern int LTRAtemp(GENmodel*,CKTcircuit*); extern int LTRAtrunc(GENmodel*,CKTcircuit*,double*); extern int LTRAlinInterp(double,double,double,double*,double*); extern int LTRAquadInterp(double,double,double,double,double*,double*,double*); /* extern double LTRAcoeffSetup(double*,int,double,double,double*,double,double*,int,int*); extern double LTRAtCoeffSetup(double*,int,double,double*,double,double*,double,double*,int,int*); extern double LTRAdivDiffs(double*,double*,double,double,double*,int); */ extern double LTRArlcH1dashFunc(double,double,double,double); extern double LTRArlcH2Func(double,double,double,double); extern double LTRArlcH3dashFunc(double,double,double,double); extern double LTRArlcH1dashTwiceIntFunc(double,double); extern double LTRArlcH3dashIntFunc(double,double,double); extern double LTRArcH1dashTwiceIntFunc(double,double); extern double LTRArcH2TwiceIntFunc(double,double); extern double LTRArcH3dashTwiceIntFunc(double,double,double); extern double LTRAlteCalculate(CKTcircuit*,GENmodel*,GENinstance*,double); /* extern double LTRAh1dashCoeffSetup(double*,int,double,double,double*,int,int*); extern double LTRAh3dashCoeffSetup(double*,int,double,double,double,double*,int,int*); */ extern void LTRArcCoeffsSetup(double*,double*,double*,double*,double*,double*,int,double,double,double,double*,int,double); extern void LTRArlcCoeffsSetup(double*,double*,double*,double*,double*,double*,int,double,double,double,double,double*,int,double,int*); extern int LTRAstraightLineCheck(double,double,double,double,double,double,double,double); tmpk8ny_4pz/src/spicelib/devices/ltra/ltraset.c0000644000175000017500000001730013546075722021750 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1990 Jaijeet S. Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "ltradefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int LTRAsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *state) /* * load the transmission line structure with those pointers needed later for * fast matrix loading */ { LTRAmodel *model = (LTRAmodel *) inModel; LTRAinstance *here; int error; CKTnode *tmp; NG_IGNORE(state); /* loop through all the transmission line models */ for (; model != NULL; model = LTRAnextModel(model)) { if (!model->LTRAnlGiven) { model->LTRAnl = .25; } if (!model->LTRAfGiven) { model->LTRAf = 1e9; } if (!model->LTRAreltolGiven) { model->LTRAreltol = 1; } if (!model->LTRAabstolGiven) { model->LTRAabstol = 1; } if (!model->LTRAresistGiven) { SPfrontEnd->IFerrorf (ERR_WARNING, "%s: lossy line series resistance not given, assumed zero", model->LTRAmodName); model->LTRAresist = 0.0; /* return(E_BADPARM); */ } if (model->LTRAstLineReltol == 0.0) model->LTRAstLineReltol = ckt->CKTreltol; if (model->LTRAstLineAbstol == 0.0) model->LTRAstLineAbstol = ckt->CKTabstol; /* LTRAchopReltol and LTRAchopAbstol default zero */ if ((model->LTRAhowToInterp != LTRA_MOD_LININTERP) && (model->LTRAhowToInterp != LTRA_MOD_QUADINTERP) && (model->LTRAhowToInterp != LTRA_MOD_MIXEDINTERP)) { /* * SPfrontEnd->IFerrorf (ERR_FATAL, "%s: have to specify one of * lininterp, quadinterp or mixedinterp", model->LTRAmodName); * return(E_BADPARM); */ if (ckt->CKTtryToCompact) { model->LTRAhowToInterp = LTRA_MOD_LININTERP; SPfrontEnd->IFerrorf (ERR_WARNING, "%s: using linear interpolation because trytocompact option specified", model->LTRAmodName); } else { model->LTRAhowToInterp = LTRA_MOD_QUADINTERP; } } if ((model->LTRAstepLimit != LTRA_MOD_NOSTEPLIMIT)) model->LTRAstepLimit = LTRA_MOD_STEPLIMIT; if ((model->LTRAlteConType != LTRA_MOD_FULLCONTROL) && (model->LTRAlteConType != LTRA_MOD_HALFCONTROL)) model->LTRAlteConType = LTRA_MOD_NOCONTROL; if (!model->LTRAconductGiven) { /* * SPfrontEnd->IFerrorf (ERR_WARNING, "%s: lossy line parallel * conductance not given, assumed zero", model->LTRAmodName); */ model->LTRAconduct = 0.0; /* return(E_BADPARM); */ } if (!model->LTRAinductGiven) { SPfrontEnd->IFerrorf (ERR_WARNING, "%s: lossy line series inductance not given, assumed zero", model->LTRAmodName); model->LTRAinduct = 0.0; /* return(E_BADPARM); */ } if (!model->LTRAcapacGiven) { SPfrontEnd->IFerrorf (ERR_FATAL, "%s: lossy line parallel capacitance not given, assumed zero", model->LTRAmodName); model->LTRAcapac = 0.0; /* return(E_BADPARM); */ } if (!model->LTRAlengthGiven) { SPfrontEnd->IFerrorf (ERR_FATAL, "%s: lossy line length must be given", model->LTRAmodName); return (E_BADPARM); } if ((model->LTRAresist == 0) && (model->LTRAconduct == 0) && (model->LTRAcapac != 0) && (model->LTRAinduct != 0)) { model->LTRAspecialCase = LTRA_MOD_LC; #ifdef LTRADEBUG SPfrontEnd->IFerrorf (ERR_INFO, "%s: lossless line", model->LTRAmodName); #endif } if ((model->LTRAresist != 0) && (model->LTRAconduct == 0) && (model->LTRAcapac != 0) && (model->LTRAinduct != 0)) { model->LTRAspecialCase = LTRA_MOD_RLC; #ifdef LTRADEBUG SPfrontEnd->IFerrorf (ERR_INFO, "%s: RLC line", model->LTRAmodName); #endif } if ((model->LTRAresist != 0) && (model->LTRAconduct == 0) && (model->LTRAcapac != 0) && (model->LTRAinduct == 0)) { model->LTRAspecialCase = LTRA_MOD_RC; #ifdef LTRADEBUG SPfrontEnd->IFerrorf (ERR_INFO, "%s: RC line", model->LTRAmodName); #endif } if ((model->LTRAresist != 0) && (model->LTRAconduct == 0) && (model->LTRAcapac == 0) && (model->LTRAinduct != 0)) { model->LTRAspecialCase = LTRA_MOD_RL; SPfrontEnd->IFerrorf (ERR_FATAL, "%s: RL line not supported yet", model->LTRAmodName); return (E_BADPARM); #ifdef LTRADEBUG #endif } if ((model->LTRAresist != 0) && (model->LTRAconduct != 0) && (model->LTRAcapac == 0) && (model->LTRAinduct == 0)) { model->LTRAspecialCase = LTRA_MOD_RG; #ifdef LTRADEBUG SPfrontEnd->IFerrorf (ERR_INFO, "%s: RG line", model->LTRAmodName); #endif } if ((model->LTRAconduct != 0) && ((model->LTRAcapac != 0) || (model->LTRAinduct != 0))) { model->LTRAspecialCase = LTRA_MOD_LTRA; SPfrontEnd->IFerrorf (ERR_FATAL, "%s: Nonzero G (except RG) line not supported yet", model->LTRAmodName); return (E_BADPARM); #ifdef LTRADEBUG #endif } if ((model->LTRAresist == 0.0 ? 0 : 1) + (model->LTRAconduct == 0.0 ? 0 : 1) + (model->LTRAinduct == 0.0 ? 0 : 1) + (model->LTRAcapac == 0.0 ? 0 : 1) <= 1) { SPfrontEnd->IFerrorf (ERR_FATAL, "%s: At least two of R,L,G,C must be specified and nonzero", model->LTRAmodName); return (E_BADPARM); } /* loop through all the instances of the model */ for (here = LTRAinstances(model); here != NULL; here = LTRAnextInstance(here)) { if (here->LTRAbrEq1 == 0) { error = CKTmkVolt(ckt, &tmp, here->LTRAname, "i1"); if (error) return (error); here->LTRAbrEq1 = tmp->number; } if (here->LTRAbrEq2 == 0) { error = CKTmkVolt(ckt, &tmp, here->LTRAname, "i2"); if (error) return (error); here->LTRAbrEq2 = tmp->number; } /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(LTRAibr1Pos1Ptr, LTRAbrEq1, LTRAposNode1); TSTALLOC(LTRAibr1Neg1Ptr, LTRAbrEq1, LTRAnegNode1); TSTALLOC(LTRAibr1Pos2Ptr, LTRAbrEq1, LTRAposNode2); TSTALLOC(LTRAibr1Neg2Ptr, LTRAbrEq1, LTRAnegNode2); TSTALLOC(LTRAibr1Ibr1Ptr, LTRAbrEq1, LTRAbrEq1); TSTALLOC(LTRAibr1Ibr2Ptr, LTRAbrEq1, LTRAbrEq2); TSTALLOC(LTRAibr2Pos1Ptr, LTRAbrEq2, LTRAposNode1); TSTALLOC(LTRAibr2Neg1Ptr, LTRAbrEq2, LTRAnegNode1); TSTALLOC(LTRAibr2Pos2Ptr, LTRAbrEq2, LTRAposNode2); TSTALLOC(LTRAibr2Neg2Ptr, LTRAbrEq2, LTRAnegNode2); TSTALLOC(LTRAibr2Ibr1Ptr, LTRAbrEq2, LTRAbrEq1); TSTALLOC(LTRAibr2Ibr2Ptr, LTRAbrEq2, LTRAbrEq2); TSTALLOC(LTRApos1Ibr1Ptr, LTRAposNode1, LTRAbrEq1); TSTALLOC(LTRAneg1Ibr1Ptr, LTRAnegNode1, LTRAbrEq1); TSTALLOC(LTRApos2Ibr2Ptr, LTRAposNode2, LTRAbrEq2); TSTALLOC(LTRAneg2Ibr2Ptr, LTRAnegNode2, LTRAbrEq2); /* * the following are done so that SMPpreOrder does not screw up on * occasion - for example, when one end of the lossy line is hanging */ TSTALLOC(LTRApos1Pos1Ptr, LTRAposNode1, LTRAposNode1); TSTALLOC(LTRAneg1Neg1Ptr, LTRAnegNode1, LTRAnegNode1); TSTALLOC(LTRApos2Pos2Ptr, LTRAposNode2, LTRAposNode2); TSTALLOC(LTRAneg2Neg2Ptr, LTRAnegNode2, LTRAnegNode2); } } return (OK); } int LTRAunsetup(GENmodel *inModel, CKTcircuit *ckt) { LTRAmodel *model; LTRAinstance *here; for (model = (LTRAmodel *) inModel; model != NULL; model = LTRAnextModel(model)) { for (here = LTRAinstances(model); here != NULL; here = LTRAnextInstance(here)) { if (here->LTRAbrEq2 > 0) CKTdltNNum(ckt, here->LTRAbrEq2); here->LTRAbrEq2 = 0; if (here->LTRAbrEq1 > 0) CKTdltNNum(ckt, here->LTRAbrEq1); here->LTRAbrEq1 = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/ltra/Makefile.am0000644000175000017500000000071313546075722022162 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libltra.la libltra_la_SOURCES = \ ltra.c \ ltraacct.c \ ltraacld.c \ ltraask.c \ ltradefs.h \ ltraext.h \ ltrainit.c \ ltrainit.h \ ltraitf.h \ ltraload.c \ ltramask.c \ ltramisc.c \ ltrampar.c \ ltrapar.c \ ltraset.c \ ltratemp.c \ ltratrun.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/ltra/ltramask.c0000644000175000017500000000507213546075722022113 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1990 Jaijeet S. Roychowdhury **********/ /* * This routine sets model parameters for LTRA lines in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ltradefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int LTRAmAsk(CKTcircuit *ckt, GENmodel *inModel, int param, IFvalue *value) { LTRAmodel *mods = (LTRAmodel *) inModel; NG_IGNORE(ckt); switch (param) { case LTRA_MOD_LTRA: value->iValue = 1; break; case LTRA_MOD_RELTOL: value->rValue = mods->LTRAreltol; break; case LTRA_MOD_ABSTOL: value->rValue = mods->LTRAabstol; break; case LTRA_MOD_STLINEREL: value->rValue = mods->LTRAstLineReltol; break; case LTRA_MOD_STLINEABS: value->rValue = mods->LTRAstLineAbstol; break; case LTRA_MOD_CHOPREL: value->rValue = mods->LTRAchopReltol; break; case LTRA_MOD_CHOPABS: value->rValue = mods->LTRAchopAbstol; break; case LTRA_MOD_TRUNCNR: value->iValue = mods->LTRAtruncNR; break; case LTRA_MOD_TRUNCDONTCUT: value->iValue = mods->LTRAtruncDontCut; break; case LTRA_MOD_R: value->rValue = mods->LTRAresist; break; case LTRA_MOD_L: value->rValue = mods->LTRAinduct; break; case LTRA_MOD_G: value->rValue = mods->LTRAconduct; break; case LTRA_MOD_C: value->rValue = mods->LTRAcapac; break; case LTRA_MOD_LEN: value->rValue = mods->LTRAlength; break; case LTRA_MOD_NL: value->rValue = mods->LTRAnl; break; case LTRA_MOD_FREQ: value->rValue = mods->LTRAf; break; case LTRA_MOD_FULLCONTROL: value->iValue = mods->LTRAlteConType; break; case LTRA_MOD_HALFCONTROL: value->iValue = mods->LTRAlteConType; break; case LTRA_MOD_NOCONTROL: value->iValue = mods->LTRAlteConType; break; case LTRA_MOD_PRINT: value->iValue = mods->LTRAprintFlag; break; case LTRA_MOD_NOPRINT: mods->LTRAprintFlag = FALSE; break; /* * case LTRA_MOD_RONLY: mods->LTRArOnly= TRUE; break; */ case LTRA_MOD_STEPLIMIT: value->iValue = mods->LTRAstepLimit; break; case LTRA_MOD_NOSTEPLIMIT: value->iValue = mods->LTRAstepLimit; break; case LTRA_MOD_LININTERP: value->iValue = mods->LTRAhowToInterp; break; case LTRA_MOD_QUADINTERP: value->iValue = mods->LTRAhowToInterp; break; case LTRA_MOD_MIXEDINTERP: value->iValue = mods->LTRAhowToInterp; break; default: return (E_BADPARM); } return (OK); } tmpk8ny_4pz/src/spicelib/devices/ltra/ltrapar.c0000644000175000017500000000241113546075722021734 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1990 Jaijeet S. Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ltradefs.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int LTRAparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { LTRAinstance *here = (LTRAinstance *) inst; NG_IGNORE(select); switch (param) { case LTRA_V1: here->LTRAinitVolt1 = value->rValue; here->LTRAicV1Given = TRUE; break; case LTRA_I1: here->LTRAinitCur1 = value->rValue; here->LTRAicC1Given = TRUE; break; case LTRA_V2: here->LTRAinitVolt2 = value->rValue; here->LTRAicV2Given = TRUE; break; case LTRA_I2: here->LTRAinitCur2 = value->rValue; here->LTRAicC2Given = TRUE; break; case LTRA_IC: switch (value->v.numValue) { case 4: here->LTRAinitCur2 = *(value->v.vec.rVec + 3); case 3: here->LTRAinitVolt2 = *(value->v.vec.rVec + 2); case 2: here->LTRAinitCur1 = *(value->v.vec.rVec + 1); case 1: here->LTRAinitVolt1 = *(value->v.vec.rVec); break; default: return (E_BADPARM); } break; default: return (E_BADPARM); } return (OK); } tmpk8ny_4pz/src/spicelib/devices/ltra/ltrainit.c0000644000175000017500000000312213546075722022115 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "ltraitf.h" #include "ltraext.h" #include "ltrainit.h" SPICEdev LTRAinfo = { .DEVpublic = { .name = "LTRA", .description = "Lossy transmission line", .terms = <RAnSize, .numNames = <RAnSize, .termNames = LTRAnames, .numInstanceParms = <RApTSize, .instanceParms = LTRApTable, .numModelParms = <RAmPTSize, .modelParms = LTRAmPTable, .flags = 0, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = LTRAparam, .DEVmodParam = LTRAmParam, .DEVload = LTRAload, .DEVsetup = LTRAsetup, .DEVunsetup = LTRAunsetup, .DEVpzSetup = LTRAsetup, .DEVtemperature = LTRAtemp, .DEVtrunc = LTRAtrunc, .DEVfindBranch = NULL, .DEVacLoad = LTRAacLoad, .DEVaccept = LTRAaccept, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = NULL, .DEVask = LTRAask, .DEVmodAsk = LTRAmAsk, .DEVpzLoad = NULL, .DEVconvTest = NULL, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = <RAiSize, .DEVmodSize = <RAmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_ltra_info(void) { return <RAinfo; } tmpk8ny_4pz/src/spicelib/devices/ltra/ltratemp.c0000644000175000017500000001120413546075722022117 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1990 Jaijeet S. Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "ltradefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int LTRAtemp(GENmodel *inModel, CKTcircuit *ckt) /* * pre-process parameters for later use */ { LTRAmodel *model = (LTRAmodel *) inModel; LTRAinstance *here; NG_IGNORE(ckt); /* loop through all the transmission line models */ for (; model != NULL; model = LTRAnextModel(model)) { /* * if(!model->LTRAtdGiven) { model->LTRAtd = model->LTRAnl/model->LTRAf; * } */ switch (model->LTRAspecialCase) { case LTRA_MOD_LC: model->LTRAimped = sqrt(model->LTRAinduct / model->LTRAcapac); model->LTRAadmit = 1 / model->LTRAimped; model->LTRAtd = sqrt(model->LTRAinduct * model->LTRAcapac) * model->LTRAlength; model->LTRAattenuation = 1.0; break; case LTRA_MOD_RLC: model->LTRAimped = sqrt(model->LTRAinduct / model->LTRAcapac); model->LTRAadmit = 1 / model->LTRAimped; model->LTRAtd = sqrt(model->LTRAinduct * model->LTRAcapac) * model->LTRAlength; model->LTRAalpha = 0.5 * (model->LTRAresist / model->LTRAinduct /* - model->LTRAconduct/model->LTRAcapac */ ); model->LTRAbeta = model->LTRAalpha; /* * 0.5*(model->LTRAresist/model->LTRAinduct + * model->LTRAconduct/model->LTRAcapac); */ model->LTRAattenuation = exp(-model->LTRAbeta * model->LTRAtd); if (model->LTRAalpha > 0.0) { model->LTRAintH1dash = /* * sqrt(model->LTRAconduct/model->LTRAresist)/ model->LTRAadmit */ -1.0; model->LTRAintH2 = /* * exp(-model->LTRAlength*sqrt(model->LTRAconduct* * model->LTRAresist)) */ 1.0 - model->LTRAattenuation; model->LTRAintH3dash = /* (model->LTRAintH1dash+1.0)* (model->LTRAintH2+model->LTRAattenuation) */ - model->LTRAattenuation; } else if (model->LTRAalpha == 0.0) { model->LTRAintH1dash = model->LTRAintH2 = model->LTRAintH3dash = 0.0; } else { #ifdef LTRADEBUG fprintf(stdout, "LTRAtemp: error: alpha < 0.0\n"); #endif } /* * model->LTRAh1dashValues = NULL; model->LTRAh2Values = * NULL; model->LTRAh3dashValues = NULL; * * model->LTRAh1dashOthVals = NULL; model->LTRAh2OthVals = * NULL; model->LTRAh3dashOthVals = NULL; */ model->LTRAh1dashCoeffs = NULL; model->LTRAh2Coeffs = NULL; model->LTRAh3dashCoeffs = NULL; if (!model->LTRAtruncDontCut) { double xbig, xsmall, xmid, y1big, y1small, y1mid; double y2big, y2small, y2mid; int done = 0, maxiter = 50, iters = 0; xbig = model->LTRAtd + /* ckt->CKTmaxStep */ 9 * model->LTRAtd; /* hack! ckt is not yet initialised... */ xsmall = model->LTRAtd; xmid = 0.5 * (xbig + xsmall); y1small = LTRArlcH2Func(xsmall, model->LTRAtd, model->LTRAalpha, model->LTRAbeta); y2small = LTRArlcH3dashFunc(xsmall, model->LTRAtd, model->LTRAbeta, model->LTRAbeta); iters = 0; for (;;) { iters++; y1big = LTRArlcH2Func(xbig, model->LTRAtd, model->LTRAalpha, model->LTRAbeta); y1mid = LTRArlcH2Func(xmid, model->LTRAtd, model->LTRAalpha, model->LTRAbeta); y2big = LTRArlcH3dashFunc(xbig, model->LTRAtd, model->LTRAbeta, model->LTRAbeta); y2mid = LTRArlcH3dashFunc(xmid, model->LTRAtd, model->LTRAbeta, model->LTRAbeta); done = LTRAstraightLineCheck(xbig, y1big, xmid, y1mid, xsmall, y1small, model->LTRAstLineReltol, model->LTRAstLineAbstol) + LTRAstraightLineCheck(xbig, y1big, xmid, y1mid, xsmall, y1small, model->LTRAstLineReltol, model->LTRAstLineAbstol); if ((done == 2) || (iters > maxiter)) break; xbig = xmid; xmid = 0.5 * (xbig + xsmall); } model->LTRAmaxSafeStep = xbig - model->LTRAtd; } break; case LTRA_MOD_RC: model->LTRAcByR = model->LTRAcapac / model->LTRAresist; model->LTRArclsqr = model->LTRAresist * model->LTRAcapac * model->LTRAlength * model->LTRAlength; model->LTRAintH1dash = 0.0; model->LTRAintH2 = 1.0; model->LTRAintH3dash = 0.0; model->LTRAh1dashCoeffs = NULL; model->LTRAh2Coeffs = NULL; model->LTRAh3dashCoeffs = NULL; break; case LTRA_MOD_RG: break; default: return (E_BADPARM); } /* loop through all the instances of the model */ for (here = LTRAinstances(model); here != NULL; here = LTRAnextInstance(here)) { here->LTRAv1 = NULL; here->LTRAi1 = NULL; here->LTRAv2 = NULL; here->LTRAi2 = NULL; } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/ltra/ltradefs.h0000644000175000017500000002360213546075722022105 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1990 Jaijeet S. Roychowdhury **********/ #ifndef LTRA #define LTRA #undef LTRALTEINFO #undef LTRADEBUG #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" /* structures used to describe lossy transmission liness */ /* information used to describe a single instance */ typedef struct sLTRAinstance { struct GENinstance gen; #define LTRAmodPtr(inst) ((struct sLTRAmodel *)((inst)->gen.GENmodPtr)) #define LTRAnextInstance(inst) ((struct sLTRAinstance *)((inst)->gen.GENnextInstance)) #define LTRAname gen.GENname #define LTRAstate gen.GENstate const int LTRAposNode1; /* number of positive node of end 1 of t. line */ const int LTRAnegNode1; /* number of negative node of end 1 of t. line */ const int LTRAposNode2; /* number of positive node of end 2 of t. line */ const int LTRAnegNode2; /* number of negative node of end 2 of t. line */ int LTRAbrEq1; /* number of branch equation for end 1 of t. line */ int LTRAbrEq2; /* number of branch equation for end 2 of t. line */ double LTRAinput1; /* accumulated excitation for port 1 */ double LTRAinput2; /* accumulated excitation for port 2 */ double LTRAinitVolt1; /* initial condition: voltage on port 1 */ double LTRAinitCur1; /* initial condition: current at port 1 */ double LTRAinitVolt2; /* initial condition: voltage on port 2 */ double LTRAinitCur2; /* initial condition: current at port 2 */ double *LTRAv1; /* past values of v1 */ double *LTRAi1; /* past values of i1 */ double *LTRAv2; /* past values of v2 */ double *LTRAi2; /* past values of i2 */ int LTRAinstListSize; /* size of above lists */ double *LTRAibr1Ibr1Ptr; /* pointer to sparse matrix */ double *LTRAibr1Ibr2Ptr; /* pointer to sparse matrix */ double *LTRAibr1Pos1Ptr; /* pointer to sparse matrix */ double *LTRAibr1Neg1Ptr; /* pointer to sparse matrix */ double *LTRAibr1Pos2Ptr; /* pointer to sparse matrix */ double *LTRAibr1Neg2Ptr; /* pointer to sparse matrix */ double *LTRAibr2Ibr1Ptr; /* pointer to sparse matrix */ double *LTRAibr2Ibr2Ptr; /* pointer to sparse matrix */ double *LTRAibr2Pos1Ptr; /* pointer to sparse matrix */ double *LTRAibr2Neg1Ptr; /* pointer to sparse matrix */ double *LTRAibr2Pos2Ptr; /* pointer to sparse matrix */ double *LTRAibr2Neg2Ptr; /* pointer to sparse matrix */ double *LTRAneg1Ibr1Ptr; /* pointer to sparse matrix */ double *LTRAneg2Ibr2Ptr; /* pointer to sparse matrix */ double *LTRApos1Ibr1Ptr; /* pointer to sparse matrix */ double *LTRApos2Ibr2Ptr; /* pointer to sparse matrix */ double *LTRApos1Pos1Ptr; /* pointer to sparse matrix */ double *LTRAneg1Neg1Ptr; /* pointer to sparse matrix */ double *LTRApos2Pos2Ptr; /* pointer to sparse matrix */ double *LTRAneg2Neg2Ptr; /* pointer to sparse matrix */ unsigned LTRAicV1Given : 1; /* flag to ind. init. voltage at port 1 given */ unsigned LTRAicC1Given : 1; /* flag to ind. init. current at port 1 given */ unsigned LTRAicV2Given : 1; /* flag to ind. init. voltage at port 2 given */ unsigned LTRAicC2Given : 1; /* flag to ind. init. current at port 2 given */ } LTRAinstance ; /* per model data */ typedef struct sLTRAmodel { /* model structure for a transmission lines */ struct GENmodel gen; #define LTRAmodType gen.GENmodType #define LTRAnextModel(inst) ((struct sLTRAmodel *)((inst)->gen.GENnextModel)) #define LTRAinstances(inst) ((LTRAinstance *)((inst)->gen.GENinstances)) #define LTRAmodName gen.GENmodName double LTRAh1dashFirstVal; /* first needed value of h1dasg at current timepoint */ double LTRAh2FirstVal; /* first needed value of h2 at current timepoint */ double LTRAh3dashFirstVal; /* first needed value of h3dash at current timepoint */ #if 0 double *LTRAh1dashValues; /* values of h1dash for all previous times */ double *LTRAh2Values; /* values of h2 for all previous times */ double *LTRAh3dashValues; /* values of h3dash for all previous times */ double LTRAh2FirstOthVal; /* needed for LTE calc; but their values */ double LTRAh3dashFirstOthVal; /*may depend on the current timepoint*/ double *LTRAh1dashOthVals; /* these lists of other values are */ double *LTRAh2OthVals; /* needed for truncation error */ double *LTRAh3dashOthVals; /* calculation */ #endif /* the OthVals do not depend on the current * timepoint; hence they are set up in LTRAaccept.c. * They are used in LTRAtrunc.c */ double LTRAh1dashFirstCoeff; /* first needed coeff of h1dash for the current timepoint */ double LTRAh2FirstCoeff; /* first needed coeff of h2 for the current timepoint */ double LTRAh3dashFirstCoeff; /* first needed coeff of h3dash for the current timepoint */ double *LTRAh1dashCoeffs; /* list of other coefficients for h1dash */ double *LTRAh2Coeffs; /* list of other coefficients for h2 */ double *LTRAh3dashCoeffs; /* list of other coefficients for h3dash */ int LTRAmodelListSize; /* size of above lists */ double LTRAconduct; /* conductance G - input */ double LTRAresist; /* resistance R - input */ double LTRAinduct; /* inductance L - input */ double LTRAcapac; /* capacitance C - input */ double LTRAlength; /* length l - input */ double LTRAtd; /* propagation delay T - calculated*/ double LTRAimped; /* impedance Z - calculated*/ double LTRAadmit; /* admittance Y - calculated*/ double LTRAalpha; /* alpha - calculated */ double LTRAbeta; /* beta - calculated */ double LTRAattenuation; /* e^(-beta T) - calculated */ double LTRAcByR; /* C/R - for the RC line - calculated */ double LTRArclsqr; /* RCl^2 - for the RC line - calculated */ double LTRAintH1dash;/* \int_0^\inf h'_1(\tau) d \tau - calculated*/ double LTRAintH2;/* \int_0^\inf h_2(\tau) d \tau - calculated*/ double LTRAintH3dash;/* \int_0^\inf h'_3(\tau) d \tau - calculated*/ double LTRAnl; /* normalized length - historical significance only*/ double LTRAf; /* frequency at which nl is measured - historical significance only*/ double LTRAcoshlrootGR; /* cosh(l*sqrt(G*R)), used for DC anal */ double LTRArRsLrGRorG; /* sqrt(R)*sinh(l*sqrt(G*R))/sqrt(G) */ double LTRArGsLrGRorR; /* sqrt(G)*sinh(l*sqrt(G*R))/sqrt(R) */ /*int LTRAh1dashIndex;*/ /* index for h1dash that points to the latest nonzero coefficient in the list */ /*int LTRAh2Index;*/ /* ditto for h2 */ /*int LTRAh3dashIndex;*/ /* ditto for h3dash */ int LTRAauxIndex; /* auxiliary index for h2 and h3dash */ double LTRAstLineReltol; /* separate reltol for checking st. lines */ double LTRAchopReltol; /* separate reltol for truncation of impulse responses*/ double LTRAstLineAbstol; /* separate abstol for checking st. lines */ double LTRAchopAbstol; /* separate abstol for truncation of impulse responses */ unsigned LTRAreltolGiven:1; /* flag to ind. relative deriv. tol. given */ unsigned LTRAabstolGiven:1; /* flag to ind. absolute deriv. tol. given */ unsigned LTRAtruncNR:1; /* flag to ind. use N-R iterations for calculating step in LTRAtrunc */ unsigned LTRAtruncDontCut:1; /* flag to ind. don't bother about errors in impulse response calculations due to large steps*/ double LTRAmaxSafeStep; /* maximum safe step for impulse response calculations */ unsigned LTRAresistGiven : 1; /* flag to indicate R was specified */ unsigned LTRAconductGiven : 1; /* flag to indicate G was specified */ unsigned LTRAinductGiven : 1; /* flag to indicate L was specified */ unsigned LTRAcapacGiven : 1; /* flag to indicate C was specified */ unsigned LTRAlengthGiven : 1; /* flag to indicate length was specified */ unsigned LTRAnlGiven : 1; /* flag to indicate norm length was specified */ int LTRAlteConType; /* indicates whether full control, half control or no control */ int LTRAhowToInterp; /* indicates how to interpolate for delayed timepoint */ unsigned LTRAprintFlag: 1; /* flag to indicate whether debugging output should be printed */ /*unsigned LTRArOnly: 1;*/ /* flag to indicate G=0, use known Bessel integrals for accuracy and speed */ int LTRAstepLimit; /* flag to indicate that the timestep should always be limited to 0.8*LTRAtd */ unsigned LTRAfGiven : 1; /* flag to indicate freq was specified */ double LTRAabstol; /* absolute deriv. tol. for breakpoint setting */ double LTRAreltol; /* relative deriv. tol. for breakpoint setting */ int LTRAspecialCase; /* what kind of model (RC, RLC, RL, ...) */ } LTRAmodel; /* device parameters */ enum { LTRA_MOD_LTRA = 0, LTRA_MOD_R, LTRA_MOD_L, LTRA_MOD_G, LTRA_MOD_C, LTRA_MOD_LEN, LTRA_V1, LTRA_I1, LTRA_V2, LTRA_I2, LTRA_IC, LTRA_MOD_RELTOL, LTRA_MOD_ABSTOL, LTRA_POS_NODE1, LTRA_NEG_NODE1, LTRA_POS_NODE2, LTRA_NEG_NODE2, LTRA_INPUT1, LTRA_INPUT2, LTRA_DELAY, LTRA_BR_EQ1, LTRA_BR_EQ2, LTRA_MOD_NL, LTRA_MOD_FREQ, LTRA_MOD_Z0, LTRA_MOD_TD, LTRA_MOD_FULLCONTROL, LTRA_MOD_HALFCONTROL, LTRA_MOD_NOCONTROL, LTRA_MOD_PRINT, LTRA_MOD_NOPRINT, }; /* #define LTRA_MOD_RONLY 31 */ enum { LTRA_MOD_STEPLIMIT = 32, LTRA_MOD_NOSTEPLIMIT, LTRA_MOD_LININTERP, LTRA_MOD_QUADINTERP, LTRA_MOD_MIXEDINTERP, LTRA_MOD_RLC, LTRA_MOD_RC, LTRA_MOD_RG, LTRA_MOD_LC, LTRA_MOD_RL, LTRA_MOD_STLINEREL, LTRA_MOD_STLINEABS, LTRA_MOD_CHOPREL, LTRA_MOD_CHOPABS, LTRA_MOD_TRUNCNR, LTRA_MOD_TRUNCDONTCUT, }; /* model parameters */ /* device questions */ /* model questions */ #include "ltraext.h" #endif /*LTRA*/ tmpk8ny_4pz/src/spicelib/devices/ltra/ltratrun.c0000644000175000017500000001347313546075722022154 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1990 Jaijeet S. Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ltradefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int LTRAtrunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { LTRAmodel *model = (LTRAmodel *) inModel; LTRAinstance *here; double i1, i2, i3, i4; double i5, i6, d1, d2, d3, d4; double tmp; double tolerance; double current_lte=0.0; int maxiter = 2, iterations = 0; double x, y, change, deriv, deriv_delta; /* loop through all the transmission line models */ for (; model != NULL; model = LTRAnextModel(model)) { /* loop through all the instances of the model */ for (here = LTRAinstances(model); here != NULL; here = LTRAnextInstance(here)) { switch (model->LTRAspecialCase) { case LTRA_MOD_LC: case LTRA_MOD_RLC: if (model->LTRAstepLimit == LTRA_MOD_STEPLIMIT) { tmp = model->LTRAtd; *timeStep = MIN(*timeStep, tmp); } else { i1 = ((*(ckt->CKTrhsOld + here->LTRAposNode2) - *(ckt->CKTrhsOld + here->LTRAnegNode2)) * model->LTRAadmit + *(ckt->CKTrhsOld + here->LTRAbrEq2)) * model->LTRAattenuation; i2 = (*(here->LTRAv2 + ckt->CKTtimeIndex) * model->LTRAadmit + *(here->LTRAi2 + ckt->CKTtimeIndex)) * model->LTRAattenuation; i3 = (*(here->LTRAv2 + ckt->CKTtimeIndex - 1) * model->LTRAadmit + *(here->LTRAi2 + ckt->CKTtimeIndex - 1)) * model->LTRAattenuation; i4 = ((*(ckt->CKTrhsOld + here->LTRAposNode1) - *(ckt->CKTrhsOld + here->LTRAnegNode1)) * model->LTRAadmit + *(ckt->CKTrhsOld + here->LTRAbrEq1)) * model->LTRAattenuation; i5 = (*(here->LTRAv1 + ckt->CKTtimeIndex) * model->LTRAadmit + *(here->LTRAi1 + ckt->CKTtimeIndex)) * model->LTRAattenuation; i6 = (*(here->LTRAv1 + ckt->CKTtimeIndex - 1) * model->LTRAadmit + *(here->LTRAi1 + ckt->CKTtimeIndex - 1)) * model->LTRAattenuation; /* * d1 = (i1-i2)/ckt->CKTdeltaOld[1]; d2 = * (i2-i3)/ckt->CKTdeltaOld[2]; d3 = (i4-i5)/ckt->CKTdeltaOld[1]; * d4 = (i5-i6)/ckt->CKTdeltaOld[2]; */ d1 = (i1 - i2) / (ckt->CKTtime - *(ckt->CKTtimePoints + ckt->CKTtimeIndex)); d2 = (i2 - i3) / (*(ckt->CKTtimePoints + ckt->CKTtimeIndex) - *(ckt->CKTtimePoints + ckt->CKTtimeIndex - 1)); d3 = (i4 - i5) / (ckt->CKTtime - *(ckt->CKTtimePoints + ckt->CKTtimeIndex)); d4 = (i5 - i6) / (*(ckt->CKTtimePoints + ckt->CKTtimeIndex) - *(ckt->CKTtimePoints + ckt->CKTtimeIndex - 1)); if ((fabs(d1 - d2) >= model->LTRAreltol * MAX(fabs(d1), fabs(d2)) + model->LTRAabstol) || (fabs(d3 - d4) >= model->LTRAreltol * MAX(fabs(d3), fabs(d4)) + model->LTRAabstol)) { /* derivitive changing - need to schedule after delay */ /* the PREVIOUS point was the breakpoint */ /* the previous timepoint plus the delay */ /* * tmp = *(ckt->CKTtimePoints + ckt->CKTtimeIndex) + * model->LTRAtd; the work of a confused mind minus current time * tmp -= ckt->CKTtime; */ tmp = model->LTRAtd; *timeStep = MIN(*timeStep, tmp); } } break; case LTRA_MOD_RC: case LTRA_MOD_RG: break; default: return (E_BADPARM); } /* * the above was for the parts of the equations that resemble the * lossless equations. Now we need to estimate the local truncation * error in each of the three convolution equations, and if possible * adjust the timestep so that all of them remain within some bound. * Unfortunately, the expression for the LTE in a convolution operation * is complicated and costly to evaluate; in addition, no explicit * inverse exists. * * So what we do here (for the moment) is check to see the current error * is acceptable. If so, the timestep is not changed. If not, then an * estimate is made for the new timestep using a few iterations of the * newton-raphson method. * * modification: we change the timestep to half its previous value */ if ((model->LTRAspecialCase == LTRA_MOD_RLC) && (!model->LTRAtruncDontCut)) { *timeStep = MIN(*timeStep, model->LTRAmaxSafeStep); } if (model->LTRAlteConType != LTRA_MOD_NOCONTROL) { switch (model->LTRAspecialCase) { case LTRA_MOD_RLC: case LTRA_MOD_RC: tolerance = ckt->CKTtrtol * (ckt->CKTreltol * ( fabs(here->LTRAinput1) + fabs(here->LTRAinput2)) + ckt->CKTabstol); current_lte = LTRAlteCalculate(ckt, (GENmodel *) model, (GENinstance *) here, ckt->CKTtime); if (current_lte >= tolerance) { if (model->LTRAtruncNR) { x = ckt->CKTtime; y = current_lte; for (;;) { deriv_delta = 0.01 * (x - *(ckt->CKTtimePoints + ckt->CKTtimeIndex)); #ifdef LTRADEBUG if (deriv_delta <= 0.0) fprintf(stdout, "LTRAtrunc: error: timestep is now less than zero\n"); #endif deriv = LTRAlteCalculate(ckt, (GENmodel *) model, (GENinstance *) here, x + deriv_delta) - y; deriv /= deriv_delta; change = (tolerance - y) / deriv; x += change; if (maxiter == 0) { if (fabs(change) <= fabs(deriv_delta)) break; } else { iterations++; if (iterations >= maxiter) break; } y = LTRAlteCalculate(ckt, (GENmodel *) model, (GENinstance *) here, x); } tmp = x - *(ckt->CKTtimePoints + ckt->CKTtimeIndex); *timeStep = MIN(*timeStep, tmp); } else *timeStep *= 0.5; } break; case LTRA_MOD_RG: case LTRA_MOD_LC: break; default: return (E_BADPARM); } } } #ifdef LTRADEBUG if (*timeStep >= model->LTRAtd) { fprintf(stdout, "LTRAtrunc: Warning: Timestep bigger than delay of line %s\n", model->LTRAmodName); fflush(stdout); } #endif } return (OK); } tmpk8ny_4pz/src/spicelib/devices/ltra/ltrampar.c0000644000175000017500000000550013546075722022113 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1990 Jaijeet S. Roychowdhury **********/ /* * This routine sets model parameters for LTRA lines in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ltradefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int LTRAmParam(int param, IFvalue *value, GENmodel *inModel) { LTRAmodel *mods = (LTRAmodel *) inModel; switch (param) { case LTRA_MOD_LTRA: break; case LTRA_MOD_RELTOL: mods->LTRAreltol = value->rValue; mods->LTRAreltolGiven = TRUE; break; case LTRA_MOD_ABSTOL: mods->LTRAabstol = value->rValue; mods->LTRAabstolGiven = TRUE; break; case LTRA_MOD_STLINEREL: mods->LTRAstLineReltol = value->rValue; break; case LTRA_MOD_STLINEABS: mods->LTRAstLineAbstol = value->rValue; break; case LTRA_MOD_CHOPREL: mods->LTRAchopReltol = value->rValue; break; case LTRA_MOD_CHOPABS: mods->LTRAchopAbstol = value->rValue; break; case LTRA_MOD_TRUNCNR: mods->LTRAtruncNR = TRUE; break; case LTRA_MOD_TRUNCDONTCUT: mods->LTRAtruncDontCut = TRUE; break; case LTRA_MOD_R: mods->LTRAresist = value->rValue; mods->LTRAresistGiven = TRUE; break; case LTRA_MOD_L: mods->LTRAinduct = value->rValue; mods->LTRAinductGiven = TRUE; break; case LTRA_MOD_G: mods->LTRAconduct = value->rValue; mods->LTRAconductGiven = TRUE; break; case LTRA_MOD_C: mods->LTRAcapac = value->rValue; mods->LTRAcapacGiven = TRUE; break; case LTRA_MOD_LEN: mods->LTRAlength = value->rValue; mods->LTRAlengthGiven = TRUE; break; case LTRA_MOD_NL: mods->LTRAnl = value->rValue; mods->LTRAnlGiven = TRUE; break; case LTRA_MOD_FREQ: mods->LTRAf = value->rValue; mods->LTRAfGiven = TRUE; break; case LTRA_MOD_FULLCONTROL: mods->LTRAlteConType = LTRA_MOD_FULLCONTROL; break; case LTRA_MOD_HALFCONTROL: mods->LTRAlteConType = LTRA_MOD_HALFCONTROL; break; case LTRA_MOD_NOCONTROL: mods->LTRAlteConType = LTRA_MOD_NOCONTROL; break; case LTRA_MOD_PRINT: mods->LTRAprintFlag = TRUE; break; case LTRA_MOD_NOPRINT: mods->LTRAprintFlag = FALSE; break; /* * case LTRA_MOD_RONLY: mods->LTRArOnly= TRUE; break; */ case LTRA_MOD_STEPLIMIT: mods->LTRAstepLimit = LTRA_MOD_STEPLIMIT; break; case LTRA_MOD_NOSTEPLIMIT: mods->LTRAstepLimit = LTRA_MOD_NOSTEPLIMIT; break; case LTRA_MOD_LININTERP: mods->LTRAhowToInterp = LTRA_MOD_LININTERP; break; case LTRA_MOD_QUADINTERP: mods->LTRAhowToInterp = LTRA_MOD_QUADINTERP; break; case LTRA_MOD_MIXEDINTERP: mods->LTRAhowToInterp = LTRA_MOD_MIXEDINTERP; break; default: return (E_BADPARM); } return (OK); } tmpk8ny_4pz/src/spicelib/devices/ltra/ltramisc.c0000644000175000017500000014545013546075722022120 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1990 Jaijeet S. Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ltradefs.h" #include "ngspice/suffix.h" /* * Miscellaneous functions to do with lossy lines */ /* * LTRAquadInterp - quadratic interpolation function t = timepoint where * value wanted t1, t2, t3 are three timepoints where the value is known c1, * c2, c3 are set to the proper coefficients by the function the interpolated * value is c1*v1 + c2*v2 + c3*v3; this should be done in the calling * program; (v1,v2,v3 are the known values at t1,t2,t3) */ int LTRAquadInterp(double t, double t1, double t2, double t3, double *c1, double *c2, double *c3) { double f1, f2, f3; if (t == t1) { *c1 = 1.0; *c2 = 0.0; *c3 = 0.0; return (0); } if (t == t2) { *c1 = 0.0; *c2 = 1.0; *c3 = 0.0; return (0); } if (t == t3) { *c1 = 0.0; *c2 = 0.0; *c3 = 1.0; return (0); } if ((t2 - t1) == 0 || (t3 - t2) == 0 || (t1 - t3) == 0) return (1); f1 = (t - t2) * (t - t3); f2 = (t - t1) * (t - t3); f3 = (t - t1) * (t - t2); if ((t2 - t1) == 0) { /* should never happen, but don't want to * divide by zero, EVER... */ f1 = 0; f2 = 0; } else { f1 /= (t1 - t2); f2 /= (t2 - t1); } if ((t3 - t2) == 0) { /* should never happen, but don't want to * divide by zero, EVER... */ f2 = 0; f3 = 0; } else { f2 /= (t2 - t3); f3 /= (t2 - t3); } if ((t3 - t1) == 0) { /* should never happen, but don't want to * divide by zero, EVER... */ f1 = 0; f2 = 0; } else { f1 /= (t1 - t3); f3 /= (t1 - t3); } *c1 = f1; *c2 = f2; *c3 = f3; return (0); } /* linear interpolation */ int LTRAlinInterp(double t, double t1, double t2, double *c1, double *c2) { double temp; if (t1 == t2) return (1); if (t == t1) { *c1 = 1.0; *c2 = 0.0; return (0); } if (t == t2) { *c1 = 0.0; *c2 = 1.0; return (0); } temp = (t - t1) / (t2 - t1); *c2 = temp; *c1 = 1 - temp; return (0); } /* * intlinfunc returns \int_lolimit^hilimit h(\tau) d \tau, where h(\tau) is * assumed to be linear, with values lovalue and hivalue \tau = t1 and t2 * respectively this is used only locally */ static double intlinfunc(double lolimit, double hilimit, double lovalue, double hivalue, double t1, double t2) { double width, m; width = t2 - t1; if (width == 0.0) return (0.0); m = (hivalue - lovalue) / width; return ((hilimit - lolimit) * lovalue + 0.5 * m * ((hilimit - t1) * (hilimit - t1) - (lolimit - t1) * (lolimit - t1))); } /* * twiceintlinfunc returns \int_lolimit^hilimit \int_otherlolimit^\tau * h(\tau') d \tau' d \tau , where h(\tau') is assumed to be linear, with * values lovalue and hivalue \tau = t1 and t2 respectively this is used only * locally */ static double twiceintlinfunc(double lolimit, double hilimit, double otherlolimit, double lovalue, double hivalue, double t1, double t2) { double width, m, dummy; double temp1, temp2, temp3; width = t2 - t1; if (width == 0.0) return (0.0); m = (hivalue - lovalue) / width; temp1 = hilimit - t1; temp2 = lolimit - t1; temp3 = otherlolimit - t1; dummy = lovalue * ((hilimit - otherlolimit) * (hilimit - otherlolimit) - (lolimit - otherlolimit) * (lolimit - otherlolimit)); dummy += m * ((temp1 * temp1 * temp1 - temp2 * temp2 * temp2) / 3.0 - temp3 * temp3 * (hilimit - lolimit)); return (dummy * 0.5); } /* * thriceintlinfunc returns \int_lolimit^hilimit \int_secondlolimit^\tau * \int_thirdlolimit^\tau' h(\tau'') d \tau'' d \tau' d \tau , where * h(\tau'') is assumed to be linear, with values lovalue and hivalue \tau = * t1 and t2 respectively this is used only locally */ static double thriceintlinfunc(double lolimit, double hilimit, double secondlolimit, double thirdlolimit, double lovalue, double hivalue, double t1, double t2) { double width, m, dummy; double temp1, temp2, temp3, temp4; double temp5, temp6, temp7, temp8, temp9, temp10; width = t2 - t1; if (width == 0.0) return (0.0); m = (hivalue - lovalue) / width; temp1 = hilimit - t1; temp2 = lolimit - t1; temp3 = secondlolimit - t1; temp4 = thirdlolimit - t1; temp5 = hilimit - thirdlolimit; temp6 = lolimit - thirdlolimit; temp7 = secondlolimit - thirdlolimit; temp8 = hilimit - lolimit; temp9 = hilimit - secondlolimit; temp10 = lolimit - secondlolimit; dummy = lovalue * ((temp5 * temp5 * temp5 - temp6 * temp6 * temp6) / 3 - temp7 * temp5 * temp8); dummy += m * (((temp1 * temp1 * temp1 * temp1 - temp2 * temp2 * temp2 * temp2) * 0.25 - temp3 * temp3 * temp3 * temp8) / 3 - temp4 * temp4 * 0.5 * (temp9 * temp9 - temp10 * temp10)); return (dummy * 0.5); } /* * These are from the book Numerical Recipes in C * */ static double bessI0(double x) { double ax, ans; double y; if ((ax = fabs(x)) < 3.75) { y = x / 3.75; y *= y; ans = 1.0 + y * (3.5156229 + y * (3.0899424 + y * (1.2067492 + y * (0.2659732 + y * (0.360768e-1 + y * 0.45813e-2))))); } else { y = 3.75 / ax; ans = (exp(ax) / sqrt(ax)) * (0.39894228 + y * (0.1328592e-1 + y * (0.225319e-2 + y * (-0.157565e-2 + y * (0.916281e-2 + y * (-0.2057706e-1 + y * (0.2635537e-1 + y * (-0.1647633e-1 + y * 0.392377e-2)))))))); } return (ans); } static double bessI1(double x) { double ax, ans; double y; if ((ax = fabs(x)) < 3.75) { y = x / 3.75; y *= y; ans = ax * (0.5 + y * (0.87890594 + y * (0.51498869 + y * (0.15084934 + y * (0.2658733e-1 + y * (0.301532e-2 + y * 0.32411e-3)))))); } else { y = 3.75 / ax; ans = 0.2282967e-1 + y * (-0.2895312e-1 + y * (0.1787654e-1 - y * 0.420059e-2)); ans = 0.39894228 + y * (-0.3988024e-1 + y * (-0.362018e-2 + y * (0.163801e-2 + y * (-0.1031555e-1 + y * ans)))); ans *= (exp(ax) / sqrt(ax)); } return (x < 0.0 ? -ans : ans); } static double bessI1xOverX(double x) { double ax, ans; double y; if ((ax = fabs(x)) < 3.75) { y = x / 3.75; y *= y; ans = 0.5 + y * (0.87890594 + y * (0.51498869 + y * (0.15084934 + y * (0.2658733e-1 + y * (0.301532e-2 + y * 0.32411e-3))))); } else { y = 3.75 / ax; ans = 0.2282967e-1 + y * (-0.2895312e-1 + y * (0.1787654e-1 - y * 0.420059e-2)); ans = 0.39894228 + y * (-0.3988024e-1 + y * (-0.362018e-2 + y * (0.163801e-2 + y * (-0.1031555e-1 + y * ans)))); ans *= (exp(ax) / (ax * sqrt(ax))); } return (ans); } /* LTRArlcH1dashFunc - the first impulse response function */ double LTRArlcH1dashFunc(double time, double T, double alpha, double beta) { double besselarg, exparg, returnval; /* T is not used in this function */ NG_IGNORE(T); /* * result = alpha * e^{- beta*time} * {I_1(alpha*time) - I_0(alpha*time)} */ if (alpha == 0.0) return (0.0); exparg = -beta * time; besselarg = alpha * time; returnval = (bessI1(besselarg) - bessI0(besselarg)) * alpha * exp(exparg); return (returnval); } double LTRArlcH2Func(double time, double T, double alpha, double beta) { double besselarg, exparg, returnval; /* * result = 0, time < T = (alpha*T*e^{-beta*time})/sqrt(t^2 - T^2) * * I_1(alpha*sqrt(t^2 - T^2)), time >= T */ if (alpha == 0.0) return (0.0); if (time < T) return (0.0); if (time != T) { besselarg = alpha * sqrt(time * time - T * T); } else { besselarg = 0.0; } exparg = -beta * time; returnval = alpha * alpha * T * exp(exparg) * bessI1xOverX(besselarg); return (returnval); } double LTRArlcH3dashFunc(double time, double T, double alpha, double beta) { double exparg, besselarg, returnval; /* * result = 0, time < T = alpha*e^{-beta*time}*(t/sqrt(t^2-T^2)* * I_1(alpha*sqrt(t^2-T^2)) - I_0(alpha*sqrt(t^2-T^2))) */ if (alpha == 0.0) return (0.0); if (time < T) return (0.0); exparg = -beta * time; if (time != T) { besselarg = alpha * sqrt(time * time - T * T); } else { besselarg = 0.0; } returnval = alpha * time * bessI1xOverX(besselarg) - bessI0(besselarg); returnval *= alpha * exp(exparg); return (returnval); } /* * LTRArlcH1dashTwiceIntFunc - twice repeated integral of h1dash for the * special case of G = 0 */ double LTRArlcH1dashTwiceIntFunc(double time, double beta) { double arg, returnval; /* * result = time * e^{- beta*time} * {I_0(beta*time) + I_1(beta*time)} - * time */ if (beta == 0.0) return (time); arg = beta * time; if (arg == 0.0) return (0.0); returnval = (bessI1(arg) + bessI0(arg)) * time * exp(-arg) - time; return (returnval); } /* * LTRArlcH3dashIntFunc - twice repeated integral of h1dash for the special * case of G = 0 */ double LTRArlcH3dashIntFunc(double time, double T, double beta) { double exparg, besselarg; double returnval; if (time <= T) return (0.0); if (beta == 0.0) return (0.0); exparg = -beta * time; besselarg = beta * sqrt(time * time - T * T); returnval = exp(exparg) * bessI0(besselarg) - exp(-beta * T); return (returnval); } double LTRArcH1dashTwiceIntFunc(double time, double cbyr) { return (sqrt(4 * cbyr * time / M_PI)); } double LTRArcH2TwiceIntFunc(double time, double rclsqr) { double temp; if (time != 0.0) { temp = rclsqr / (4 * time); return ((time + rclsqr * 0.5) * erfc(sqrt(temp)) - sqrt(time * rclsqr / M_PI) * exp(-temp)); } else { return (0.0); } } double LTRArcH3dashTwiceIntFunc(double time, double cbyr, double rclsqr) { double temp; if (time != 0.0) { temp = rclsqr / (4 * time); temp = 2 * sqrt(time / M_PI) * exp(-temp) - sqrt(rclsqr) * erfc(sqrt(temp)); return (sqrt(cbyr) * temp); } else { return (0.0); } } /* * LTRArcCoeffsSetup sets up the all coefficient lists for the special case * where L=G=0 */ void LTRArcCoeffsSetup(double *h1dashfirstcoeff, double *h2firstcoeff, double *h3dashfirstcoeff, double *h1dashcoeffs, double *h2coeffs, double *h3dashcoeffs, int listsize, double cbyr, double rclsqr, double curtime, double *timelist, int timeindex, double reltol) { double delta1, delta2; double h1dummy1, h1dummy2; double h2dummy1, h2dummy2; double h3dummy1, h3dummy2; double lolimit1, lolimit2, hilimit1, hilimit2; double h1lovalue1, h1lovalue2, h1hivalue1, h1hivalue2; double h2lovalue1, h2lovalue2, h2hivalue1, h2hivalue2; double h3lovalue1, h3lovalue2, h3hivalue1, h3hivalue2; double temp, temp2, temp3, temp4, temp5; double h1relval, h2relval, h3relval; int doh1 = 1, doh2 = 1, doh3 = 1; int i, auxindex; NG_IGNORE(listsize); /* coefflists should already have been allocated to the necessary size */ #ifdef LTRAdebug if (listsize <= timeindex) { printf("LTRAcoeffSetup: not enough space in coefflist\n"); } #endif auxindex = timeindex; /* the first coefficients */ delta1 = curtime - *(timelist + auxindex); lolimit1 = 0.0; hilimit1 = delta1; h1lovalue1 = 0.0; h1hivalue1 = /* LTRArcH1dashTwiceIntFunc(hilimit1,cbyr); */ sqrt(4 * cbyr * hilimit1 / M_PI); h1dummy1 = h1hivalue1 / delta1; *h1dashfirstcoeff = h1dummy1; h1relval = fabs(h1dummy1 * reltol); temp = rclsqr / (4 * hilimit1); temp2 = (temp >= 100.0 ? 0.0 : erfc(sqrt(temp))); temp3 = exp(-temp); temp4 = sqrt(rclsqr); temp5 = sqrt(cbyr); h2lovalue1 = 0.0; h2hivalue1 = /* LTRArcH2TwiceIntFunc(hilimit1,rclsqr); */ (hilimit1 != 0.0 ? (hilimit1 + rclsqr * 0.5) * temp2 - sqrt(hilimit1 * rclsqr / M_PI) * temp3 : 0.0); h2dummy1 = h2hivalue1 / delta1; *h2firstcoeff = h2dummy1; h2relval = fabs(h2dummy1 * reltol); h3lovalue1 = 0.0; h3hivalue1 = /* LTRArcH3dashTwiceIntFunc(hilimit1,cbyr,rcls * qr); */ (hilimit1 != 0.0 ? temp = 2 * sqrt(hilimit1 / M_PI) * temp3 - temp4 * temp2, (temp5 * temp) : 0.0); h3dummy1 = h3hivalue1 / delta1; *h3dashfirstcoeff = h3dummy1; h3relval = fabs(h3dummy1 * reltol); /* the coefficients for the rest of the timepoints */ for (i = auxindex; i > 0; i--) { delta2 = delta1; /* previous delta1 */ lolimit2 = lolimit1; /* previous lolimit1 */ hilimit2 = hilimit1; /* previous hilimit1 */ delta1 = *(timelist + i) - *(timelist + i - 1); lolimit1 = hilimit2; hilimit1 = curtime - *(timelist + i - 1); if (doh1) { h1lovalue2 = h1lovalue1; /* previous lovalue1 */ h1hivalue2 = h1hivalue1; /* previous hivalue1 */ h1dummy2 = h1dummy1; /* previous dummy1 */ h1lovalue1 = h1hivalue2; h1hivalue1 = /* LTRArcH1dashTwiceIntFunc(hilimit1,cbyr); */ sqrt(4 * cbyr * hilimit1 / M_PI); h1dummy1 = (h1hivalue1 - h1lovalue1) / delta1; *(h1dashcoeffs + i) = h1dummy1 - h1dummy2; if (fabs(*(h1dashcoeffs + i)) < h1relval) doh1 = 0; } else *(h1dashcoeffs + i) = 0.0; if (doh2 || doh3) { temp = rclsqr / (4 * hilimit1); temp2 = (temp >= 100.0 ? 0.0 : erfc(sqrt(temp))); temp3 = exp(-temp); } if (doh2) { h2lovalue2 = h2lovalue1; /* previous lovalue1 */ h2hivalue2 = h2hivalue1; /* previous hivalue1 */ h2dummy2 = h2dummy1; /* previous dummy1 */ h2lovalue1 = h2hivalue2; h2hivalue1 = /* LTRArcH2TwiceIntFunc(hilimit1,rclsqr); */ (hilimit1 != 0.0 ? (hilimit1 + rclsqr * 0.5) * temp2 - sqrt(hilimit1 * rclsqr / M_PI) * temp3 : 0.0); h2dummy1 = (h2hivalue1 - h2lovalue1) / delta1; *(h2coeffs + i) = h2dummy1 - h2dummy2; if (fabs(*(h2coeffs + i)) < h2relval) doh2 = 0; } else *(h2coeffs + i) = 0.0; if (doh3) { h3lovalue2 = h3lovalue1; /* previous lovalue1 */ h3hivalue2 = h3hivalue1; /* previous hivalue1 */ h3dummy2 = h3dummy1; /* previous dummy1 */ h3lovalue1 = h3hivalue2; h3hivalue1 = /* LTRArcH3dashTwiceIntFunc(hilimit1,cbyr,rcls * qr); */ (hilimit1 != 0.0 ? temp = 2 * sqrt(hilimit1 / M_PI) * temp3 - temp4 * temp2, (temp5 * temp) : 0.0); h3dummy1 = (h3hivalue1 - h3lovalue1) / delta1; *(h3dashcoeffs + i) = h3dummy1 - h3dummy2; if (fabs(*(h3dashcoeffs + i)) < h3relval) doh3 = 0; } else *(h3dashcoeffs + i) = 0.0; } } void LTRArlcCoeffsSetup(double *h1dashfirstcoeff, double *h2firstcoeff, double *h3dashfirstcoeff, double *h1dashcoeffs, double *h2coeffs, double *h3dashcoeffs, int listsize, double T, double alpha, double beta, double curtime, double *timelist, int timeindex, double reltol, int *auxindexptr) { unsigned exact; double lolimit1, lolimit2 = 0.0, hilimit1, hilimit2 = 0.0; double delta1, delta2; double h1dummy1, h1dummy2; double h1lovalue1, h1lovalue2, h1hivalue1, h1hivalue2; double h2dummy1 = 0.0, h2dummy2; double h2lovalue1 = 0.0, h2lovalue2, h2hivalue1 = 0.0, h2hivalue2; double h3dummy1 = 0.0, h3dummy2; double h3lovalue1 = 0.0, h3lovalue2, h3hivalue1 = 0.0, h3hivalue2; double exparg, besselarg = 0.0, expterm, bessi1overxterm, bessi0term; double expbetaTterm = 0.0, alphasqTterm = 0.0; double h1relval, h2relval = 0.0, h3relval = 0.0; int doh1 = 1, doh2 = 1, doh3 = 1; int i, auxindex; NG_IGNORE(listsize); /* coefflists should already have been allocated to the necessary size */ #ifdef LTRAdebug if (listsize <= timeindex) { printf("LTRArlcCoeffsSetup: not enough space in coefflist\n"); } #endif /* * we assume a piecewise linear function, and we calculate the coefficients * using this assumption in the integration of the function */ if (T == 0.0) { auxindex = timeindex; } else { if (curtime - T <= 0.0) { auxindex = 0; } else { exact = 0; for (i = timeindex; i >= 0; i--) { if (curtime - *(timelist + i) == T) { exact = 1; break; } if (curtime - *(timelist + i) > T) break; } #ifdef LTRADEBUG if ((i < 0) || ((i == 0) && (exact == 1))) printf("LTRAcoeffSetup: i <= 0: some mistake!\n"); #endif if (exact == 1) { auxindex = i - 1; } else { auxindex = i; } } } /* the first coefficient */ if (auxindex != 0) { lolimit1 = T; hilimit1 = curtime - *(timelist + auxindex); delta1 = hilimit1 - lolimit1; h2lovalue1 = LTRArlcH2Func(T, T, alpha, beta); besselarg = (hilimit1 > T) ? alpha * sqrt(hilimit1 * hilimit1 - T * T) : 0.0; exparg = -beta * hilimit1; expterm = exp(exparg); bessi1overxterm = bessI1xOverX(besselarg); alphasqTterm = alpha * alpha * T; h2hivalue1 = /* LTRArlcH2Func(hilimit1,T,alpha,beta); */ ((alpha == 0.0) || (hilimit1 < T)) ? 0.0 : alphasqTterm * expterm * bessi1overxterm; h2dummy1 = twiceintlinfunc(lolimit1, hilimit1, lolimit1, h2lovalue1, h2hivalue1, lolimit1, hilimit1) / delta1; *h2firstcoeff = h2dummy1; h2relval = fabs(reltol * h2dummy1); h3lovalue1 = 0.0; /* E3dash should be consistent with this */ bessi0term = bessI0(besselarg); expbetaTterm = exp(-beta * T); h3hivalue1 = /* LTRArlcH3dashIntFunc(hilimit1,T,beta); */ ((hilimit1 <= T) || (beta == 0.0)) ? 0.0 : expterm * bessi0term - expbetaTterm; h3dummy1 = intlinfunc(lolimit1, hilimit1, h3lovalue1, h3hivalue1, lolimit1, hilimit1) / delta1; *h3dashfirstcoeff = h3dummy1; h3relval = fabs(h3dummy1 * reltol); } else { *h2firstcoeff = *h3dashfirstcoeff = 0.0; } lolimit1 = 0.0; hilimit1 = curtime - *(timelist + timeindex); delta1 = hilimit1 - lolimit1; exparg = -beta * hilimit1; expterm = exp(exparg); h1lovalue1 = 0.0; h1hivalue1 = /* LTRArlcH1dashTwiceIntFunc(hilimit1,beta); */ (beta == 0.0) ? hilimit1 : ((hilimit1 == 0.0) ? 0.0 : (bessI1(-exparg) + bessI0(-exparg)) * hilimit1 * expterm - hilimit1); h1dummy1 = h1hivalue1 / delta1; *h1dashfirstcoeff = h1dummy1; h1relval = fabs(h1dummy1 * reltol); /* the coefficients for the rest of the timepoints */ for (i = timeindex; i > 0; i--) { if (doh1 || doh2 || doh3) { lolimit2 = lolimit1; /* previous lolimit1 */ hilimit2 = hilimit1; /* previous hilimit1 */ delta2 = delta1; /* previous delta1 */ lolimit1 = hilimit2; hilimit1 = curtime - *(timelist + i - 1); delta1 = *(timelist + i) - *(timelist + i - 1); exparg = -beta * hilimit1; expterm = exp(exparg); } if (doh1) { h1lovalue2 = h1lovalue1; /* previous lovalue1 */ h1hivalue2 = h1hivalue1; /* previous hivalue1 */ h1dummy2 = h1dummy1; /* previous dummy1 */ h1lovalue1 = h1hivalue2; h1hivalue1 = /* LTRArlcH1dashTwiceIntFunc(hilimit1,beta); */ (beta == 0.0) ? hilimit1 : ((hilimit1 == 0.0) ? 0.0 : (bessI1(-exparg) + bessI0(-exparg)) * hilimit1 * expterm - hilimit1); h1dummy1 = (h1hivalue1 - h1lovalue1) / delta1; *(h1dashcoeffs + i) = h1dummy1 - h1dummy2; if (fabs(*(h1dashcoeffs + i)) <= h1relval) doh1 = 0; } else *(h1dashcoeffs + i) = 0.0; if (i <= auxindex) { /* * if (i == auxindex) { lolimit2 = T; delta2 = hilimit2 - lolimit2; } */ if (doh2 || doh3) besselarg = (hilimit1 > T) ? alpha * sqrt(hilimit1 * hilimit1 - T * T) : 0.0; if (doh2) { h2lovalue2 = h2lovalue1;/* previous lovalue1 */ h2hivalue2 = h2hivalue1;/* previous hivalue1 */ h2dummy2 = h2dummy1; /* previous dummy1 */ h2lovalue1 = h2hivalue2; bessi1overxterm = bessI1xOverX(besselarg); h2hivalue1 = /* LTRArlcH2Func(hilimit1,T,alpha,beta); */ ((alpha == 0.0) || (hilimit1 < T)) ? 0.0 : alphasqTterm * expterm * bessi1overxterm; h2dummy1 = twiceintlinfunc(lolimit1, hilimit1, lolimit1, h2lovalue1, h2hivalue1, lolimit1, hilimit1) / delta1; *(h2coeffs + i) = h2dummy1 - h2dummy2 + intlinfunc(lolimit2, hilimit2, h2lovalue2, h2hivalue2, lolimit2, hilimit2); if (fabs(*(h2coeffs + i)) <= h2relval) doh2 = 0; } else *(h2coeffs + i) = 0.0; if (doh3) { h3lovalue2 = h3lovalue1;/* previous lovalue1 */ h3hivalue2 = h3hivalue1;/* previous hivalue1 */ h3dummy2 = h3dummy1; /* previous dummy1 */ h3lovalue1 = h3hivalue2; bessi0term = bessI0(besselarg); h3hivalue1 = /* LTRArlcH3dashIntFunc(hilimit1,T,beta); */ ((hilimit1 <= T) || (beta == 0.0)) ? 0.0 : expterm * bessi0term - expbetaTterm; h3dummy1 = intlinfunc(lolimit1, hilimit1, h3lovalue1, h3hivalue1, lolimit1, hilimit1) / delta1; *(h3dashcoeffs + i) = h3dummy1 - h3dummy2; if (fabs(*(h3dashcoeffs + i)) <= h3relval) doh3 = 0; } else *(h3dashcoeffs + i) = 0.0; } } *auxindexptr = auxindex; } /* * LTRAstraightLineCheck - takes the co-ordinates of three points, finds the * area of the triangle enclosed by these points and compares this area with * the area of the quadrilateral formed by the line between the first point * and the third point, the perpendiculars from the first and third points to * the x-axis, and the x-axis. If within reltol, then it returns 1, else 0. * The purpose of this function is to determine if three points lie * acceptably close to a straight line. This area criterion is used because * it is related to integrals and convolution */ int LTRAstraightLineCheck(double x1, double y1, double x2, double y2, double x3, double y3, double reltol, double abstol) { /* * double asqr, bsqr, csqr, c, c1sqr; double htsqr; */ double TRarea, QUADarea1, QUADarea2, QUADarea3, area; /* * asqr = (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1); bsqr = (x3-x2)*(x3-x2) + * (y3-y2)*(y3-y2); csqr = (x3-x1)*(x3-x1) + (y3-y1)*(y3-y1); c = * sqrt(csqr); c1sqr = (asqr - bsqr + csqr)/(2*c); c1sqr *= c1sqr; htsqr = * asqr - c1sqr; TRarea = c*sqrt(htsqr)*0.5; */ /* * this should work if y1,y2,y3 all have the same sign and x1,x2,x3 are in * increasing order */ QUADarea1 = (fabs(y2) + fabs(y1)) * 0.5 * fabs(x2 - x1); QUADarea2 = (fabs(y3) + fabs(y2)) * 0.5 * fabs(x3 - x2); QUADarea3 = (fabs(y3) + fabs(y1)) * 0.5 * fabs(x3 - x1); TRarea = fabs(QUADarea3 - QUADarea1 - QUADarea2); area = QUADarea1 + QUADarea2; if (area * reltol + abstol > TRarea) return (1); else return (0); } /* * i is thestrchr of the latest value, a,b,c values correspond to values at * t_{i-2}, t{i-1} and t_i */ #define SECONDDERIV(i,a,b,c) (oof = (i==ckt->CKTtimeIndex+1?curtime:\ *(ckt->CKTtimePoints+i)),\ (( c - b )/(oof-*(ckt->CKTtimePoints+i-1)) -\ ( b - a )/(*(ckt->CKTtimePoints+i-1)-\ *(ckt->CKTtimePoints+i-2)))/(oof - \ *(ckt->CKTtimePoints+i-2))) /* * LTRAlteCalculate - returns sum of the absolute values of the total local * truncation error of the 2 equations for the LTRAline */ double LTRAlteCalculate(CKTcircuit *ckt, GENmodel *genmodel, GENinstance *geninstance, double curtime) { LTRAmodel *model = (LTRAmodel *) genmodel; LTRAinstance *instance = (LTRAinstance *) geninstance; double h1dashTfirstCoeff; double h2TfirstCoeff = 0.0; double h3dashTfirstCoeff = 0.0; double dashdash; double oof; double hilimit1, lolimit1, hivalue1, lovalue1, f1i, g1i; double eq1LTE = 0.0, eq2LTE = 0.0; int auxindex = 0, tdover, i, exact; switch (model->LTRAspecialCase) { case LTRA_MOD_LC: case LTRA_MOD_RG: return (0.0); break; case LTRA_MOD_RLC: if (curtime > model->LTRAtd) { tdover = 1; exact = 0; for (i = ckt->CKTtimeIndex; i >= 0; i--) { if (curtime - *(ckt->CKTtimePoints + i) == model->LTRAtd) { exact = 1; break; } if (curtime - *(ckt->CKTtimePoints + i) > model->LTRAtd) break; } #ifdef LTRADEBUG if ((i < 0) || ((i == 0) && (exact == 1))) printf("LTRAlteCalculate: i <= 0: some mistake!\n"); #endif if (exact == 1) { auxindex = i - 1; } else { auxindex = i; } } else { tdover = 0; } hilimit1 = curtime - *(ckt->CKTtimePoints + ckt->CKTtimeIndex); lolimit1 = 0.0; hivalue1 = LTRArlcH1dashTwiceIntFunc(hilimit1, model->LTRAbeta); lovalue1 = 0.0; f1i = hivalue1; g1i = intlinfunc(lolimit1, hilimit1, lovalue1, hivalue1, lolimit1, hilimit1); h1dashTfirstCoeff = 0.5 * f1i * (curtime - *(ckt->CKTtimePoints + ckt->CKTtimeIndex)) - g1i; if (tdover) { hilimit1 = curtime - *(ckt->CKTtimePoints + auxindex); lolimit1 = *(ckt->CKTtimePoints + ckt->CKTtimeIndex) - *(ckt->CKTtimePoints + auxindex); lolimit1 = MAX(model->LTRAtd, lolimit1); /* * are the following really doing the operations in the write-up? */ hivalue1 = LTRArlcH2Func(hilimit1, model->LTRAtd, model->LTRAalpha, model->LTRAbeta); lovalue1 = LTRArlcH2Func(lolimit1, model->LTRAtd, model->LTRAalpha, model->LTRAbeta); f1i = twiceintlinfunc(lolimit1, hilimit1, lolimit1, lovalue1, hivalue1, lolimit1, hilimit1); g1i = thriceintlinfunc(lolimit1, hilimit1, lolimit1, lolimit1, lovalue1, hivalue1, lolimit1, hilimit1); h2TfirstCoeff = 0.5 * f1i * (curtime - model->LTRAtd - *(ckt->CKTtimePoints + auxindex)) - g1i; hivalue1 = LTRArlcH3dashIntFunc(hilimit1, model->LTRAtd, model->LTRAbeta); lovalue1 = LTRArlcH3dashIntFunc(lolimit1, model->LTRAtd, model->LTRAbeta); f1i = intlinfunc(lolimit1, hilimit1, lovalue1, hivalue1, lolimit1, hilimit1); g1i = twiceintlinfunc(lolimit1, hilimit1, lolimit1, lovalue1, hivalue1, lolimit1, hilimit1); h3dashTfirstCoeff = 0.5 * f1i * (curtime - model->LTRAtd - *(ckt->CKTtimePoints + auxindex)) - g1i; } /* LTEs for convolution with v1 */ /* get divided differences for v1 (2nd derivative estimates) */ /* * no need to subtract operating point values because taking differences * anyway */ dashdash = SECONDDERIV(ckt->CKTtimeIndex + 1, *(instance->LTRAv1 + ckt->CKTtimeIndex - 1), *(instance->LTRAv1 + ckt->CKTtimeIndex), *(ckt->CKTrhsOld + instance->LTRAposNode1) - *(ckt->CKTrhsOld + instance->LTRAnegNode1)); eq1LTE += model->LTRAadmit * fabs(dashdash * h1dashTfirstCoeff); /* * not bothering to interpolate since everything is approximate anyway */ if (tdover) { dashdash = SECONDDERIV(auxindex + 1, *(instance->LTRAv1 + auxindex - 1), *(instance->LTRAv1 + auxindex), *(instance->LTRAv1 + auxindex + 1)); eq2LTE += model->LTRAadmit * fabs(dashdash * h3dashTfirstCoeff); } /* end LTEs for convolution with v1 */ /* LTEs for convolution with v2 */ /* get divided differences for v2 (2nd derivative estimates) */ dashdash = SECONDDERIV(ckt->CKTtimeIndex + 1, *(instance->LTRAv2 + ckt->CKTtimeIndex - 1), *(instance->LTRAv2 + ckt->CKTtimeIndex), *(ckt->CKTrhsOld + instance->LTRAposNode2) - *(ckt->CKTrhsOld + instance->LTRAnegNode2)); eq2LTE += model->LTRAadmit * fabs(dashdash * h1dashTfirstCoeff); if (tdover) { dashdash = SECONDDERIV(auxindex + 1, *(instance->LTRAv2 + auxindex - 1), *(instance->LTRAv2 + auxindex), *(instance->LTRAv2 + auxindex + 1)); eq1LTE += model->LTRAadmit * fabs(dashdash * h3dashTfirstCoeff); } /* end LTEs for convolution with v2 */ /* LTE for convolution with i1 */ /* get divided differences for i1 (2nd derivative estimates) */ if (tdover) { dashdash = SECONDDERIV(auxindex + 1, *(instance->LTRAi1 + auxindex - 1), *(instance->LTRAi1 + auxindex), *(instance->LTRAi1 + auxindex + 1)); eq2LTE += fabs(dashdash * h2TfirstCoeff); } /* end LTE for convolution with i1 */ /* LTE for convolution with i2 */ /* get divided differences for i2 (2nd derivative estimates) */ if (tdover) { dashdash = SECONDDERIV(auxindex + 1, *(instance->LTRAi2 + auxindex - 1), *(instance->LTRAi2 + auxindex), *(instance->LTRAi2 + auxindex + 1)); eq1LTE += fabs(dashdash * h2TfirstCoeff); } /* end LTE for convolution with i1 */ break; case LTRA_MOD_RC: hilimit1 = curtime - *(ckt->CKTtimePoints + ckt->CKTtimeIndex); lolimit1 = 0.0; hivalue1 = LTRArcH1dashTwiceIntFunc(hilimit1, model->LTRAcByR); lovalue1 = 0.0; f1i = hivalue1; g1i = intlinfunc(lolimit1, hilimit1, lovalue1, hivalue1, lolimit1, hilimit1); h1dashTfirstCoeff = 0.5 * f1i * (curtime - *(ckt->CKTtimePoints + ckt->CKTtimeIndex)) - g1i; hivalue1 = LTRArcH2TwiceIntFunc(hilimit1, model->LTRArclsqr); lovalue1 = 0.0; f1i = hivalue1; g1i = intlinfunc(lolimit1, hilimit1, lovalue1, hivalue1, lolimit1, hilimit1); h1dashTfirstCoeff = 0.5 * f1i * (curtime - *(ckt->CKTtimePoints + ckt->CKTtimeIndex)) - g1i; hivalue1 = LTRArcH2TwiceIntFunc(hilimit1, model->LTRArclsqr); lovalue1 = 0.0; f1i = hivalue1; g1i = intlinfunc(lolimit1, hilimit1, lovalue1, hivalue1, lolimit1, hilimit1); h1dashTfirstCoeff = 0.5 * f1i * (curtime - *(ckt->CKTtimePoints + ckt->CKTtimeIndex)) - g1i; /* LTEs for convolution with v1 */ /* get divided differences for v1 (2nd derivative estimates) */ /* * no need to subtract operating point values because taking differences * anyway */ dashdash = SECONDDERIV(ckt->CKTtimeIndex + 1, *(instance->LTRAv1 + ckt->CKTtimeIndex - 1), *(instance->LTRAv1 + ckt->CKTtimeIndex), *(ckt->CKTrhsOld + instance->LTRAposNode1) - *(ckt->CKTrhsOld + instance->LTRAnegNode1)); eq1LTE += fabs(dashdash * h1dashTfirstCoeff); eq2LTE += fabs(dashdash * h3dashTfirstCoeff); /* end LTEs for convolution with v1 */ /* LTEs for convolution with v2 */ /* get divided differences for v2 (2nd derivative estimates) */ dashdash = SECONDDERIV(ckt->CKTtimeIndex + 1, *(instance->LTRAv2 + ckt->CKTtimeIndex - 1), *(instance->LTRAv2 + ckt->CKTtimeIndex), *(ckt->CKTrhsOld + instance->LTRAposNode2) - *(ckt->CKTrhsOld + instance->LTRAnegNode2)); eq2LTE += fabs(dashdash * h1dashTfirstCoeff); eq1LTE += fabs(dashdash * h3dashTfirstCoeff); /* end LTEs for convolution with v2 */ /* LTE for convolution with i1 */ /* get divided differences for i1 (2nd derivative estimates) */ dashdash = SECONDDERIV(ckt->CKTtimeIndex + 1, *(instance->LTRAi1 + ckt->CKTtimeIndex - 1), *(instance->LTRAi1 + ckt->CKTtimeIndex), *(ckt->CKTrhsOld + instance->LTRAbrEq1)); eq2LTE += fabs(dashdash * h2TfirstCoeff); /* end LTE for convolution with i1 */ /* LTE for convolution with i2 */ /* get divided differences for i2 (2nd derivative estimates) */ dashdash = SECONDDERIV(ckt->CKTtimeIndex + 1, *(instance->LTRAi2 + ckt->CKTtimeIndex - 1), *(instance->LTRAi2 + ckt->CKTtimeIndex), *(ckt->CKTrhsOld + instance->LTRAbrEq2)); eq1LTE += fabs(dashdash * h2TfirstCoeff); /* end LTE for convolution with i1 */ break; default: return (1 /* error */ ); } #ifdef LTRADEBUG fprintf(stdout, "%s: LTE/input for Eq1 at time %g is: %g\n", instance->LTRAname, curtime, eq1LTE / instance->LTRAinput1); fprintf(stdout, "%s: LTE/input for Eq2 at time %g is: %g\n", instance->LTRAname, curtime, eq2LTE / instance->LTRAinput1); fprintf(stdout, "\n"); #endif return (fabs(eq1LTE) + fabs(eq2LTE)); } /*********************************************************************/ /****************** old stuff, retained for historical interest ******/ /*********************************************************************/ /* * LTRAcoeffSetup sets up the coefficient list for the convolution, returns * the coefficient at (current_timepoint-T) */ /* * double * LTRAcoeffSetup(coefflist,listsize,T,firstvalue,valuelist,curtime,timelist,t * imeindex,auxindexptr) double *coefflist, *timelist, *valuelist; int * listsize, timeindex; double T, firstvalue, curtime; int *auxindexptr; * * { unsigned exact; double returnval, delta1, delta2; double dummy1, dummy2; * double lolimit1,lolimit2,hilimit1,hilimit2; double * lovalue1,lovalue2,hivalue1,hivalue2; int i,auxindex; */ /* coefflist should already have been allocated to the necessary size */ /* * #ifdef LTRAdebug if (listsize <= timeindex) { printf("LTRAcoeffSetup: not * enough space in coefflist\n"); } #endif * */ /* * we assume a piecewise linear function, and we calculate the coefficients * using this assumption in the integration of the function */ /* * if (T == 0.0) { auxindex = timeindex; } else { * * if (curtime - T <= 0.0) { for (i =0; i<= timeindex; i++) { (coefflist + i) = * 0.0; } auxindexptr = 0; return(0.0); } else { exact = 0; for (i = * timeindex; i>= 0; i--) { if (curtime - *(timelist + i) == T) { exact =1; * break; } if (curtime - *(timelist + i) > T) break; } * * #ifdef LTRADEBUG if ((i < 0) || ((i==0) && (exact==1))) * printf("LTRAcoeffSetup: i <= 0: some mistake!\n"); #endif * * if (exact == 1) { auxindex = i-1; } else { auxindex = i; } } } */ /* the first coefficient */ /* * delta1 = curtime -T - *(timelist + auxindex); lolimit1 = T; hilimit1 = T + * delta1; lovalue1 = firstvalue; hivalue1 = *(valuelist + auxindex); dummy1 * = twiceintlinfunc(lolimit1,hilimit1,lolimit1,lovalue1, * hivalue1,lolimit1,hilimit1)/delta1; returnval = dummy1; * */ /* the coefficients for the rest of the timepoints */ /* * for (i=auxindex; i>0; i--) { * * delta2 = delta1; *//* previous delta1 */ /* lolimit2 = lolimit1; *//* previous lolimit1 */ /* hilimit2 = hilimit1; *//* previous hilimit1 */ /* lovalue2 = lovalue1; *//* previous lovalue1 */ /* hivalue2 = hivalue1; *//* previous hivalue1 */ /* dummy2 = dummy1; *//* previous dummy1 */ /* * delta1 = *(timelist + i) - *(timelist + i - 1); lolimit1 = hilimit2; * hilimit1 = curtime - *(timelist + i - 1); lovalue1 = hivalue2; hivalue1 = * *(valuelist + i - 1); dummy1 = twiceintlinfunc(lolimit1,hilimit1,lolimit1, * lovalue1,hivalue1,lolimit1,hilimit1)/delta1; * * (coefflist + i) = dummy1 - dummy2 + intlinfunc(lolimit2,hilimit2, * lovalue2,hivalue2,lolimit2,hilimit2); } auxindexptr = auxindex; * return(returnval); } */ /* * LTRAtCoeffSetup sets up the coefficient list for the LTE calculation, * returns the coefficient at (current_timepoint-T) */ /* * double LTRAtCoeffSetup(coefflist,listsize,T,valuelist, * firstothervalue,othervaluelist,curtime,timelist,timeindex, auxindexptr, * ltecontype) double *coefflist, *timelist, *valuelist, *othervaluelist; int * listsize, timeindex; double T, firstothervalue, curtime; int *auxindexptr, * ltecontype; * * { unsigned exact; double returnval, delta; double dummy; double f1i, f2i, * g1i, g2i; double lolimit1, hilimit1; double lovalue1, hivalue1; double * lolimit2, hilimit2; double lovalue2, hivalue2; double firstint1 = 0.0, * firstint2 = 0.0; double secondint1 = 0.0, secondint2 = 0.0; int * i,auxindex; * */ /* coefflist should already have been allocated to the necessary size */ /* * #ifdef LTRAdebug if (listsize <= timeindex) { printf("LTRAtCoeffSetup: not * enough space in coefflist\n"); } #endif * */ /* * we assume a piecewise linear function, and we calculate the coefficients * using this assumption in the integration of the function */ /* * if (T == 0.0) { auxindex = timeindex; } else { * * if (curtime - T <= 0.0) { for (i =0; i<= timeindex; i++) { (coefflist + i) = * 0.0; } auxindexptr = 0; return(0.0); } else { exact = 0; for (i = * timeindex; i>= 0; i--) { if (curtime - *(timelist + i) == T) { exact =1; * break; } if (curtime - *(timelist + i) > T) break; } * * #ifdef LTRADEBUG if ((i < 0) || ((i==0) && (exact==1))) * printf("LTRAcoeffSetup: i <= 0: some mistake!\n"); #endif * * if (exact == 1) { auxindex = i-1; } else { auxindex = i; } } } */ /* the first coefficient */ /* i = n in the write-up */ /* * hilimit1 = curtime - *(timelist + auxindex); hivalue1 = *(valuelist + * auxindex); lolimit1 = *(timelist + timeindex) - *(timelist + auxindex); * lolimit1 = MAX(T,lolimit1); lovalue1 = firstothervalue; f1i = * twiceintlinfunc(lolimit1,hilimit1,lolimit1,lovalue1,hivalue1,lolimit1, * hilimit1); g1i = * thriceintlinfunc(lolimit1,hilimit1,lolimit1,lolimit1,lovalue1, * hivalue1,lolimit1,hilimit1); returnval = 0.5*f1i*(curtime-T- * *(timelist+auxindex)) - g1i; * */ /* the coefficients for the rest of the timepoints */ /* * if (ltecontype != LTRA_MOD_HALFCONTROL) { for (i=auxindex; i>0; i--) { * * lolimit2 = lolimit1; *//* previous lolimit1 */ /* hilimit2 = hilimit1; *//* previous hilimit1 */ /* lovalue2 = lovalue1; *//* previous lovalue1 */ /* hivalue2 = hivalue1; *//* previous hivalue1 */ /* f2i = f1i; *//* previous f1i */ /* g2i = g1i; *//* previous g1i */ /* firstint2 = firstint1; *//* previous firstint1 */ /* secondint2 = secondint1; *//* previous secondint1 */ /* * lolimit1 = *(timelist + timeindex) - *(timelist + i - 1); hilimit1 = * curtime - *(timelist + i - 1); lovalue1 = *(othervaluelist + i - 1); * hivalue1 = *(valuelist + i - 1); firstint1 += intlinfunc(lolimit2, * lolimit1, lovalue2, lovalue1, lolimit2, lolimit1); secondint1 += * (lolimit1-lolimit2)*firstint2 + twiceintlinfunc( * lolimit2,lolimit1,lolimit2,lovalue2,lovalue1,lolimit2,lolimit1); f1i = * twiceintlinfunc(lolimit1,hilimit1,lolimit1,lovalue1,hivalue1, * lolimit1,hilimit1) + firstint1*(hilimit1-lolimit1); g1i = * thriceintlinfunc(lolimit1,hilimit1,lolimit1,lolimit1, * lovalue1,hivalue1,lolimit1,hilimit1) + * (hilimit1-lolimit1)*(hilimit1-lolimit1)*0.5*firstint1 + * (hilimit1-lolimit1)*secondint1; * * (coefflist + i) = g2i - g1i + 0.5*(f1i + f2i)*(*(timelist+i) - * (timelist+i-1)); } } auxindexptr = auxindex; return(returnval); } */ /* * formulae taken from the Handbook of Mathematical Functions by Milton * Abramowitz and Irene A. Stegan, page 378, formulae 9.8.1 - 9.8.4 */ /* * double bessi0(x) double x; { double t, tsq, oneovert, result, dummy; int i; * static double coeffs1[7], coeffs2[9]; * * coeffs1[0] = 1.0; coeffs1[1] = 3.5156229; coeffs1[2] = 3.0899424; coeffs1[3] * = 1.2067492; coeffs1[4] = 0.2659732; coeffs1[5] = 0.0360768; coeffs1[6] = * 0.0045813; * * coeffs2[0] = 0.39894228; coeffs2[1] = 0.01328592; coeffs2[2] = 0.00225319; * coeffs2[3] = -0.00157565; coeffs2[4] = 0.00916281; coeffs2[5] = * -0.02057706; coeffs2[6] = 0.02635537; coeffs2[7] = -0.01647633; coeffs2[8] * = 0.00392377; * * t = x/3.75; dummy = 1.0; * * if (fabs(t) <= 1) { tsq = t*t; * * result = 1.0; for (i=1;i<=6;i++) { dummy *= tsq; ; result += dummy * * coeffs1[i]; } } else { oneovert = 1/fabs(t); * * result = coeffs2[0]; for (i=1;i<=8;i++) { dummy *= oneovert; result += * coeffs2[2] * dummy; } result *= exp(x) * sqrt(1/fabs(x)); } * return(result); } * * double bessi1(x) double x; { double t, tsq, oneovert, result, dummy; int i; * static double coeffs1[7], coeffs2[9]; * * coeffs1[0] = 0.5; coeffs1[1] = 0.87890594; coeffs1[2] = 0.51498869; * coeffs1[3] = 0.15084934; coeffs1[4] = 0.02658733; coeffs1[5] = 0.00301532; * coeffs1[6] = 0.00032411; * * coeffs2[0] = 0.39894228; coeffs2[1] = -0.03988024; coeffs2[2] = -0.00362018; * coeffs2[3] = 0.00163801; coeffs2[4] = -0.01031555; coeffs2[5] = * 0.02282967; coeffs2[6] = -0.02895312; coeffs2[7] = 0.01787654; coeffs2[8] * = -0.00420059; * * t = x/3.75; dummy = 1.0; * * if (fabs(t) <= 1) { tsq = t*t; * * result = 0.5; for (i=1;i<=6;i++) { dummy *= tsq; ; result += dummy * * coeffs1[i]; } result *= x; } else { oneovert = 1/fabs(t); * * result = coeffs2[0]; for (i=1;i<=8;i++) { dummy *= oneovert; result += * coeffs2[2] * dummy; } result *= exp(x) * sqrt(1/fabs(x)); if (x < 0) * result = -result; } return(result); } */ /* * LTRAdivDiffs returns divided differences after 2 iterations, an * approximation to the second derivatives. The algorithm is picked up * directly from Tom Quarles' CKTterr.c; no attempt has been made to figure * out why it does what it does. */ /* * double LTRAdivDiffs(difflist, valuelist, firstvalue, curtime, timelist, * timeindex) double *difflist, *valuelist, firstvalue, *timelist, curtime; * int timeindex; * * { double *dtime, *diffs, returnval; int i,j; * * diffs = TMALLOC(double, timeindex + 2); * dtime = TMALLOC(double, timeindex + 2); */ /* now divided differences */ /* * for(i=timeindex+1;i>=0;i--) { (diffs+i) = (i == timeindex+1 ? firstvalue : * *(valuelist + i)); } for(i=timeindex+1 ; i > 0 ; i--) { (dtime+i) = (i == * timeindex+1? curtime: *(timelist + i)) - (timelist + i - 1); } j = 2; *//* for the second derivative */ /* * while(1) { for(i=timeindex + 1;i > 0; i--) { (diffs+i) = (*(diffs+i) - * *(diffs+i-1))/ *(dtime+i); } j--; if (j <= 0) break; for(i=timeindex+1;i > * 0;i--) { (dtime+i) = *(dtime+i-1) + (i == timeindex+1? curtime: *(timelist * + i)) - *(timelist + i - 1); } } * * for (i = timeindex; i>=0 ; i--) { (difflist+i) = *(diffs+i); } * * returnval = *(diffs+timeindex+1); FREE(dtime); FREE(diffs); */ /* difflist[0] is going to be bad */ /* * return(returnval); } */ /* * LTRAlteCalculate - returns sum of the absolute values of the total local * truncation error of the 2 equations for the LTRAline */ /* * double LTRAlteCalculate(ckt,model,instance,curtime) CKTcircuit *ckt; * LTRAmodel *model; register LTRAinstance *instance; double * curtime; * * { double *h1dashTcoeffs, h1dashTfirstCoeff; double *h2Tcoeffs, h2TfirstCoeff; * double *h3dashTcoeffs, h3dashTfirstCoeff; double *SecondDerivs, * FirstSecondDeriv; double t1, t2, t3, f1, f2, f3; double eq1LTE=0.0, * eq2LTE=0.0; int isaved, tdover, i; * * if (curtime > model->LTRAtd) { tdover = 1; } else { tdover = 0; } * * h1dashTcoeffs = TMALLOC(double, model->LTRAmodelListSize); * h2Tcoeffs = TMALLOC(double, model->LTRAmodelListSize); * h3dashTcoeffs = TMALLOC(double, model->LTRAmodelListSize); * SecondDerivs = TMALLOC(double, model->LTRAmodelListSize); * */ /* * note that other OthVals have been set up in LTRAaccept, and Values in * LTRAload */ /* * h1dashTfirstCoeff = LTRAtCoeffSetup(h1dashTcoeffs, * model->LTRAmodelListSize, 0.0, model->LTRAh1dashValues, * model->LTRAh1dashFirstVal, model->LTRAh1dashOthVals, curtime, * ckt->CKTtimePoints,ckt->CKTtimeIndex, &(model->LTRAh1dashIndex), * model->LTRAlteConType); * * if (tdover) { * * h2TfirstCoeff = LTRAtCoeffSetup(h2Tcoeffs, model->LTRAmodelListSize, * model->LTRAtd, model->LTRAh2Values, model->LTRAh2FirstOthVal, * model->LTRAh2OthVals, curtime, ckt->CKTtimePoints, ckt->CKTtimeIndex, * &(model->LTRAh2Index), model->LTRAlteConType); * * h3dashTfirstCoeff = LTRAtCoeffSetup(h3dashTcoeffs, model->LTRAmodelListSize, * model->LTRAtd, model->LTRAh3dashValues, model->LTRAh3dashFirstOthVal, * model->LTRAh3dashOthVals, curtime, ckt->CKTtimePoints,ckt->CKTtimeIndex, * &(model->LTRAh3dashIndex), model->LTRAlteConType); */ /* setting up the coefficients for interpolation */ /* * for (i = ckt->CKTtimeIndex; i>= 0; i--) { if (*(ckt->CKTtimePoints + i) < * curtime - model->LTRAtd) { break; } } #ifdef LTRAdebug if (i == * ckt->CKTtimeIndex) || (i == -1) { printf("LTRAtrunc: mistake: cannot find * delayed timepoint\n"); } #endif t1 = *(ckt->CKTtimePoints + i - 1); t2 = * *(ckt->CKTtimePoints + i); t3 = *(ckt->CKTtimePoints + i + 1); * * LTRAquadInterp(curtime - model->LTRAtd, t1,t2,t3,&f1,&f2,&f3); * * isaved = i; } */ /* interpolation coefficients set-up */ /* LTEs for convolution with v1 */ /* get divided differences for v1 (2nd derivative estimates) */ /* * no need to subtract operating point values because taking differences * anyway */ /* * FirstSecondDeriv = LTRAdivDiffs(SecondDerivs,instance->LTRAv1, * (ckt->CKTrhsOld + instance->LTRAposNode1) - *(ckt->CKTrhsOld + * instance->LTRAnegNode1),curtime, ckt->CKTtimePoints,ckt->CKTtimeIndex); * * eq1LTE += model->LTRAadmit*fabs(FirstSecondDeriv * h1dashTfirstCoeff); * * if (model->LTRAlteConType != LTRA_MOD_HALFCONTROL) { for (i = * model->LTRAh1dashIndex; i > 0; i--) { if ((*(SecondDerivs+i) != 0.0) && * (*(h1dashTcoeffs+i)!=0.0)) { eq1LTE += * model->LTRAadmit*fabs(*(SecondDerivs+i) * (h1dashTcoeffs+i)); } } } * */ /* interpolate */ /* * if (tdover) { * * FirstSecondDeriv = *(SecondDerivs + isaved - 1) * f1 + *(SecondDerivs + * isaved) * f2 + *(SecondDerivs + isaved + 1) * f3; * * eq2LTE += model->LTRAadmit*fabs(FirstSecondDeriv * h3dashTfirstCoeff); * * if (model->LTRAlteConType != LTRA_MOD_HALFCONTROL) { for (i = * model->LTRAh3dashIndex; i > 0; i--) { if ((*(SecondDerivs+i) != 0.0) && * (*(h3dashTcoeffs+i)!=0.0)) { eq2LTE += * model->LTRAadmit*fabs(*(SecondDerivs+i) * (h3dashTcoeffs+i)); } } } } */ /* end LTEs for convolution with v1 */ /* LTEs for convolution with v2 */ /* get divided differences for v2 (2nd derivative estimates) */ /* * FirstSecondDeriv = LTRAdivDiffs(SecondDerivs,instance->LTRAv2, * (ckt->CKTrhsOld + instance->LTRAposNode2) - *(ckt->CKTrhsOld + * instance->LTRAnegNode2),curtime, ckt->CKTtimePoints,ckt->CKTtimeIndex); * * eq2LTE += model->LTRAadmit*fabs(FirstSecondDeriv * h1dashTfirstCoeff); * * if (model->LTRAlteConType != LTRA_MOD_HALFCONTROL) { for (i = * model->LTRAh1dashIndex; i > 0; i--) { if ((*(SecondDerivs+i) != 0.0) && * (*(h1dashTcoeffs+i)!=0.0)) { eq2LTE += * model->LTRAadmit*fabs(*(SecondDerivs+i) * (h1dashTcoeffs+i)); } } } * * if (tdover) { */ /* interpolate */ /* * FirstSecondDeriv = *(SecondDerivs + isaved - 1) * f1 + *(SecondDerivs + * isaved) * f2 + *(SecondDerivs + isaved + 1) * f3; * * eq1LTE += model->LTRAadmit*fabs(FirstSecondDeriv * h3dashTfirstCoeff); * * if (model->LTRAlteConType != LTRA_MOD_HALFCONTROL) { for (i = * model->LTRAh3dashIndex; i > 0; i--) { if ((*(SecondDerivs+i) != 0.0) && * (*(h3dashTcoeffs+i)!=0.0)) { eq1LTE += * model->LTRAadmit*fabs(*(SecondDerivs+i) * (h3dashTcoeffs+i)); } } } } * */ /* end LTEs for convolution with v2 */ /* LTE for convolution with i1 */ /* get divided differences for i1 (2nd derivative estimates) */ /* * if (tdover) { FirstSecondDeriv = * LTRAdivDiffs(SecondDerivs,instance->LTRAi1, (ckt->CKTrhsOld + * instance->LTRAbrEq1),curtime, ckt->CKTtimePoints,ckt->CKTtimeIndex); * */ /* interpolate */ /* * FirstSecondDeriv = *(SecondDerivs + isaved - 1) * f1 + *(SecondDerivs + * isaved) * f2 + *(SecondDerivs + isaved + 1) * f3; * * eq2LTE += fabs(FirstSecondDeriv * h2TfirstCoeff); * * if (model->LTRAlteConType != LTRA_MOD_HALFCONTROL) { for (i = * model->LTRAh2Index; i > 0; i--) { if ((*(SecondDerivs+i) != 0.0) && * (*(h2Tcoeffs+i)!=0.0)) { eq2LTE += model->LTRAadmit*fabs(*(SecondDerivs+i) * * (h2Tcoeffs+i)); } } } * * } */ /* end LTE for convolution with i1 */ /* LTE for convolution with i2 */ /* get divided differences for i2 (2nd derivative estimates) */ /* * if (tdover) { FirstSecondDeriv = * LTRAdivDiffs(SecondDerivs,instance->LTRAi2, (ckt->CKTrhsOld + * instance->LTRAbrEq2),curtime, ckt->CKTtimePoints,ckt->CKTtimeIndex); * */ /* interpolate */ /* * FirstSecondDeriv = *(SecondDerivs + isaved - 1) * f1 + *(SecondDerivs + * isaved) * f2 + *(SecondDerivs + isaved + 1) * f3; * * eq1LTE += fabs(FirstSecondDeriv * h2TfirstCoeff); * * if (model->LTRAlteConType != LTRA_MOD_HALFCONTROL) { for (i = * model->LTRAh2Index; i > 0; i--) { if ((*(SecondDerivs+i) != 0.0) && * (*(h2Tcoeffs+i)!=0.0)) { eq1LTE += model->LTRAadmit*fabs(*(SecondDerivs+i) * * (h2Tcoeffs+i)); } } } } * */ /* end LTE for convolution with i1 */ #ifdef LTRADEBUG /* * fprintf(stdout,"%s: LTE/input for Eq1 at time %g is: %g\n", * instance->LTRAname, curtime, eq1LTE/instance->LTRAinput1); * fprintf(stdout,"%s: LTE/input for Eq2 at time %g is: %g\n", * instance->LTRAname, curtime, eq2LTE/instance->LTRAinput1); * fprintf(stdout,"\n"); */ #endif /* * FREE(SecondDerivs); FREE(h1dashTcoeffs); FREE(h2Tcoeffs); * FREE(h3dashTcoeffs); * * return(fabs(eq1LTE) + fabs(eq2LTE)); } */ /* * LTRAh3dashCoeffSetup sets up the coefficient list for h3dash for the * special case where G=0, * returns the coefficient at (current_timepoint-T) */ /* * double * LTRAh3dashCoeffSetup(coefflist,listsize,T,beta,curtime,timelist,timeindex,a * uxindexptr) double *coefflist, *timelist; int listsize, timeindex; double * T, curtime, beta; int *auxindexptr; * * { unsigned exact; double returnval, delta1, delta2; double dummy1, dummy2; * double lolimit1,lolimit2,hilimit1,hilimit2; double * lovalue1,lovalue2,hivalue1,hivalue2; int i,auxindex; * */ /* coefflist should already have been allocated to the necessary size */ /* * #ifdef LTRAdebug if (listsize <= timeindex) { printf("LTRAcoeffSetup: not * enough space in coefflist\n"); } #endif * * */ /* * we assume a piecewise linear function, and we calculate the coefficients * using this assumption in the integration of the function */ /* * if (T == 0.0) { auxindex = timeindex; } else { * * if (curtime - T <= 0.0) { for (i =0; i<= timeindex; i++) { (coefflist + i) = * 0.0; } auxindexptr = 0; return(0.0); } else { exact = 0; for (i = * timeindex; i>= 0; i--) { if (curtime - *(timelist + i) == T) { exact =1; * break; } if (curtime - *(timelist + i) > T) break; } * * #ifdef LTRADEBUG if ((i < 0) || ((i==0) && (exact==1))) * printf("LTRAcoeffSetup: i <= 0: some mistake!\n"); #endif * * if (exact == 1) { auxindex = i-1; } else { auxindex = i; } } } */ /* the first coefficient */ /* * delta1 = curtime -T - *(timelist + auxindex); lolimit1 = T; hilimit1 = T + * delta1; lovalue1 = 0.0; *//* E3dash should be consistent with this */ /* * hivalue1 = LTRArlcH3dashIntFunc(hilimit1,T,beta); dummy1 = * intlinfunc(lolimit1,hilimit1,lovalue1, hivalue1,lolimit1,hilimit1)/delta1; * returnval = dummy1; * * */ /* the coefficients for the rest of the timepoints */ /* * for (i=auxindex; i>0; i--) { * * delta2 = delta1; *//* previous delta1 */ /* lolimit2 = lolimit1; *//* previous lolimit1 */ /* hilimit2 = hilimit1; *//* previous hilimit1 */ /* lovalue2 = lovalue1; *//* previous lovalue1 */ /* hivalue2 = hivalue1; *//* previous hivalue1 */ /* dummy2 = dummy1; *//* previous dummy1 */ /* * delta1 = *(timelist + i) - *(timelist + i - 1); lolimit1 = hilimit2; * hilimit1 = curtime - *(timelist + i - 1); lovalue1 = hivalue2; hivalue1 = * LTRArlcH3dashIntFunc(hilimit1,T,beta); dummy1 = * intlinfunc(lolimit1,hilimit1,lovalue1,hivalue1,lolimit1,hilimit1)/delta1; * * (coefflist + i) = dummy1 - dummy2; } auxindexptr = auxindex; * return(returnval); } */ /* * LTRAh1dashCoeffSetup sets up the coefficient list for h1dash in the * special case where G=0 returns the coefficient at current_timepoint */ /* * double * LTRAh1dashCoeffSetup(coefflist,listsize,beta,curtime,timelist,timeindex,aux *strchrptr) double *coefflist, *timelist; int listsize, timeindex; double * beta, curtime; int *auxindexptr; * * { double returnval, delta1, delta2; double dummy1, dummy2; double * lolimit1,lolimit2,hilimit1,hilimit2; double * lovalue1,lovalue2,hivalue1,hivalue2; int i,auxindex; * */ /* coefflist should already have been allocated to the necessary size */ /* * #ifdef LTRAdebug if (listsize <= timeindex) { * printf("LTRAh1dashCoeffSetup: not enough space in coefflist\n"); } #endif * * * * auxindex = timeindex; * */ /* the first coefficient */ /* * delta1 = curtime - *(timelist + auxindex); lolimit1 = 0.0; hilimit1 = * delta1; lovalue1 = 0.0; hivalue1 = * LTRArlcH1dashTwiceIntFunc(hilimit1,beta); dummy1 = hivalue1/delta1; * returnval = dummy1; * * * */ /* the coefficients for the rest of the timepoints */ /* * for (i=auxindex; i>0; i--) { * * delta2 = delta1; *//* previous delta1 */ /* lolimit2 = lolimit1; *//* previous lolimit1 */ /* hilimit2 = hilimit1; *//* previous hilimit1 */ /* lovalue2 = lovalue1; *//* previous lovalue1 */ /* hivalue2 = hivalue1; *//* previous hivalue1 */ /* dummy2 = dummy1; *//* previous dummy1 */ /* * delta1 = *(timelist + i) - *(timelist + i - 1); lolimit1 = hilimit2; * hilimit1 = curtime - *(timelist + i - 1); lovalue1 = hivalue2; hivalue1 = * LTRArlcH1dashTwiceIntFunc(hilimit1,beta); dummy1 = (hivalue1 - * lovalue1)/delta1; * * (coefflist + i) = dummy1 - dummy2; } auxindexptr = auxindex; * return(returnval); } */ tmpk8ny_4pz/src/spicelib/devices/ltra/ltraload.c0000644000175000017500000005407513546075722022106 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1990 Jaijeet S. Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ltradefs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int LTRAload(GENmodel *inModel, CKTcircuit *ckt) /* * load the appropriate values for the current timepoint into the sparse * matrix and the right-hand-side vector */ { LTRAmodel *model = (LTRAmodel *) inModel; LTRAinstance *here; double t1=0.0, t2=0.0, t3=0.0; double qf1=0.0, qf2=0.0, qf3=0.0; double lf2, lf3; double v1d = 0.0, v2d = 0.0, i1d = 0.0, i2d = 0.0; double dummy1=0.0, dummy2=0.0; int isaved = 0; unsigned tdover = 0; int i; double max = 0.0, min = 0.0; /* loop through all the transmission line models */ for (; model != NULL; model = LTRAnextModel(model)) { if (ckt->CKTmode & MODEDC) { switch (model->LTRAspecialCase) { case LTRA_MOD_RG: dummy1 = model->LTRAlength * sqrt(model->LTRAresist * model->LTRAconduct); dummy2 = exp(-dummy1); dummy1 = exp(dummy1); /* LTRA warning: may overflow! */ model->LTRAcoshlrootGR = 0.5 * (dummy1 + dummy2); if (model->LTRAconduct <= 1.0e-10) { /* hack! */ model->LTRArRsLrGRorG = model->LTRAlength * model->LTRAresist; } else { model->LTRArRsLrGRorG = 0.5 * (dummy1 - dummy2) * sqrt(model->LTRAresist / model->LTRAconduct); } if (model->LTRAresist <= 1.0e-10) { /* hack! */ model->LTRArGsLrGRorR = model->LTRAlength * model->LTRAconduct; } else { model->LTRArGsLrGRorR = 0.5 * (dummy1 - dummy2) * sqrt(model->LTRAconduct / model->LTRAresist); } break; case LTRA_MOD_RC: case LTRA_MOD_LC: case LTRA_MOD_RLC: /* simple resistor-like behaviour */ /* nothing to set up */ break; default: return (E_BADPARM); } /* switch */ } else { if ((ckt->CKTmode & MODEINITTRAN) || (ckt->CKTmode & MODEINITPRED)) { switch (model->LTRAspecialCase) { case LTRA_MOD_RLC: case LTRA_MOD_LC: if (ckt->CKTtime > model->LTRAtd) { tdover = 1; } else { tdover = 0; } default: break; } switch (model->LTRAspecialCase) { case LTRA_MOD_RLC: /* * set up lists of values of the functions at the necessary * timepoints. */ /* * set up coefficient lists LTRAh1dashCoeffs, LTRAh2Coeffs, * LTRAh3dashCoeffs for current timepoint */ /* * NOTE: h1, h2 and h3 here actually refer to h1tilde, h2tilde, * h3tilde in the paper */ /* * Note: many function evaluations are saved by doing the following * all together in one procedure */ (void) LTRArlcCoeffsSetup(&(model->LTRAh1dashFirstCoeff), &(model->LTRAh2FirstCoeff), &(model->LTRAh3dashFirstCoeff), model->LTRAh1dashCoeffs, model->LTRAh2Coeffs, model->LTRAh3dashCoeffs, model->LTRAmodelListSize, model->LTRAtd, model->LTRAalpha, model->LTRAbeta, ckt->CKTtime, ckt->CKTtimePoints, ckt->CKTtimeIndex, model->LTRAchopReltol, &(model->LTRAauxIndex)); case LTRA_MOD_LC: /* setting up the coefficients for interpolation */ if (tdover) { /* serious hack -fix! */ for (i = ckt->CKTtimeIndex; i >= 0; i--) { if (*(ckt->CKTtimePoints + i) < ckt->CKTtime - model->LTRAtd) { break; } } #ifdef LTRADEBUG if (i == ckt->CKTtimeIndex) { fprintf(stdout, "LTRAload: Warning: timestep larger than delay of line\n"); fprintf(stdout, " Time now: %g\n\n", ckt->CKTtime); } #endif if (i == ckt->CKTtimeIndex) i--; /*#ifdef LTRADEBUG*/ if ((i == -1)) { #ifdef LTRADEBUG printf("LTRAload: mistake: cannot find delayed timepoint\n"); return E_INTERN; #else return E_INTERN; #endif } isaved = i; t2 = *(ckt->CKTtimePoints + i); t3 = *(ckt->CKTtimePoints + i + 1); if ((i != 0) && ((model->LTRAhowToInterp == LTRA_MOD_QUADINTERP) || (model->LTRAhowToInterp == LTRA_MOD_MIXEDINTERP))) { /* quadratic interpolation */ t1 = *(ckt->CKTtimePoints + i - 1); LTRAquadInterp(ckt->CKTtime - model->LTRAtd, t1, t2, t3, &qf1, &qf2, &qf3); } if ((i == 0) || (model->LTRAhowToInterp == LTRA_MOD_MIXEDINTERP) || (model->LTRAhowToInterp == LTRA_MOD_LININTERP)) { /* linear interpolation */ LTRAlinInterp(ckt->CKTtime - model->LTRAtd, t2, t3, &lf2, &lf3); } } /* interpolation coefficients set-up */ break; case LTRA_MOD_RC: /* * set up lists of values of the coefficients at the necessary * timepoints. */ /* * set up coefficient lists LTRAh1dashCoeffs, LTRAh2Coeffs, * LTRAh3dashCoeffs for current timepoint */ /* * Note: many function evaluations are saved by doing the following * all together in one procedure */ (void) LTRArcCoeffsSetup(&(model->LTRAh1dashFirstCoeff), &(model->LTRAh2FirstCoeff), &(model->LTRAh3dashFirstCoeff), model->LTRAh1dashCoeffs, model->LTRAh2Coeffs, model->LTRAh3dashCoeffs, model->LTRAmodelListSize, model->LTRAcByR, model->LTRArclsqr, ckt->CKTtime, ckt->CKTtimePoints, ckt->CKTtimeIndex, model->LTRAchopReltol); break; case LTRA_MOD_RG: break; default: return (E_BADPARM); } } } /* loop through all the instances of the model */ for (here = LTRAinstances(model); here != NULL; here = LTRAnextInstance(here)) { if ((ckt->CKTmode & MODEDC) || (model->LTRAspecialCase == LTRA_MOD_RG)) { switch (model->LTRAspecialCase) { case LTRA_MOD_RG: *(here->LTRAibr1Pos1Ptr) += 1.0; *(here->LTRAibr1Neg1Ptr) -= 1.0; *(here->LTRAibr1Pos2Ptr) -= model->LTRAcoshlrootGR; *(here->LTRAibr1Neg2Ptr) += model->LTRAcoshlrootGR; *(here->LTRAibr1Ibr2Ptr) += (1 + ckt->CKTgmin) * model->LTRArRsLrGRorG; *(here->LTRAibr2Ibr2Ptr) += model->LTRAcoshlrootGR; *(here->LTRAibr2Pos2Ptr) -= (1 + ckt->CKTgmin) * model->LTRArGsLrGRorR; *(here->LTRAibr2Neg2Ptr) += (1 + ckt->CKTgmin) * model->LTRArGsLrGRorR; *(here->LTRAibr2Ibr1Ptr) += 1.0; *(here->LTRApos1Ibr1Ptr) += 1.0; *(here->LTRAneg1Ibr1Ptr) -= 1.0; *(here->LTRApos2Ibr2Ptr) += 1.0; *(here->LTRAneg2Ibr2Ptr) -= 1.0; here->LTRAinput1 = here->LTRAinput2 = 0.0; /* * Somewhere else, we have fixed the matrix with zero entries so * that SMPpreOrder doesn't have fits */ break; case LTRA_MOD_LC: case LTRA_MOD_RLC: case LTRA_MOD_RC: /* load a simple resistor */ *(here->LTRApos1Ibr1Ptr) += 1.0; *(here->LTRAneg1Ibr1Ptr) -= 1.0; *(here->LTRApos2Ibr2Ptr) += 1.0; *(here->LTRAneg2Ibr2Ptr) -= 1.0; *(here->LTRAibr1Ibr1Ptr) += 1.0; *(here->LTRAibr1Ibr2Ptr) += 1.0; *(here->LTRAibr2Pos1Ptr) += 1.0; *(here->LTRAibr2Pos2Ptr) -= 1.0; *(here->LTRAibr2Ibr1Ptr) -= model->LTRAresist * model->LTRAlength; here->LTRAinput1 = here->LTRAinput2 = 0.0; break; default: return (E_BADPARM); } } else { /* all cases other than DC or the RG case */ /* first timepoint after zero */ if (ckt->CKTmode & MODEINITTRAN) { if (!(ckt->CKTmode & MODEUIC)) { here->LTRAinitVolt1 = (*(ckt->CKTrhsOld + here->LTRAposNode1) - *(ckt->CKTrhsOld + here->LTRAnegNode1)); here->LTRAinitVolt2 = (*(ckt->CKTrhsOld + here->LTRAposNode2) - *(ckt->CKTrhsOld + here->LTRAnegNode2)); here->LTRAinitCur1 = *(ckt->CKTrhsOld + here->LTRAbrEq1); here->LTRAinitCur2 = *(ckt->CKTrhsOld + here->LTRAbrEq2); } } /* matrix loading - done every time LTRAload is called */ switch (model->LTRAspecialCase) { case LTRA_MOD_RLC: /* loading for convolution parts' first terms */ dummy1 = model->LTRAadmit * model->LTRAh1dashFirstCoeff; *(here->LTRAibr1Pos1Ptr) += dummy1; *(here->LTRAibr1Neg1Ptr) -= dummy1; *(here->LTRAibr2Pos2Ptr) += dummy1; *(here->LTRAibr2Neg2Ptr) -= dummy1; /* end loading for convolution parts' first terms */ case LTRA_MOD_LC: /* * this section loads for the parts of the equations that resemble * the lossless equations */ *(here->LTRAibr1Pos1Ptr) += model->LTRAadmit; *(here->LTRAibr1Neg1Ptr) -= model->LTRAadmit; *(here->LTRAibr1Ibr1Ptr) -= 1.0; *(here->LTRApos1Ibr1Ptr) += 1.0; *(here->LTRAneg1Ibr1Ptr) -= 1.0; *(here->LTRAibr2Pos2Ptr) += model->LTRAadmit; *(here->LTRAibr2Neg2Ptr) -= model->LTRAadmit; *(here->LTRAibr2Ibr2Ptr) -= 1.0; *(here->LTRApos2Ibr2Ptr) += 1.0; *(here->LTRAneg2Ibr2Ptr) -= 1.0; /* loading for lossless-like parts over */ break; case LTRA_MOD_RC: /* * this section loads for the parts of the equations that have no * convolution */ *(here->LTRAibr1Ibr1Ptr) -= 1.0; *(here->LTRApos1Ibr1Ptr) += 1.0; *(here->LTRAneg1Ibr1Ptr) -= 1.0; *(here->LTRAibr2Ibr2Ptr) -= 1.0; *(here->LTRApos2Ibr2Ptr) += 1.0; *(here->LTRAneg2Ibr2Ptr) -= 1.0; /* loading for non-convolution parts over */ /* loading for convolution parts' first terms */ dummy1 = model->LTRAh1dashFirstCoeff; *(here->LTRAibr1Pos1Ptr) += dummy1; *(here->LTRAibr1Neg1Ptr) -= dummy1; *(here->LTRAibr2Pos2Ptr) += dummy1; *(here->LTRAibr2Neg2Ptr) -= dummy1; dummy1 = model->LTRAh2FirstCoeff; *(here->LTRAibr1Ibr2Ptr) -= dummy1; *(here->LTRAibr2Ibr1Ptr) -= dummy1; dummy1 = model->LTRAh3dashFirstCoeff; *(here->LTRAibr1Pos2Ptr) -= dummy1; *(here->LTRAibr1Neg2Ptr) += dummy1; *(here->LTRAibr2Pos1Ptr) -= dummy1; *(here->LTRAibr2Neg1Ptr) += dummy1; /* end loading for convolution parts' first terms */ break; default: return (E_BADPARM); } /* INITPRED - first NR iteration of each timepoint */ /* set up LTRAinputs - to go into the RHS of the circuit equations */ if (ckt->CKTmode & (MODEINITPRED | MODEINITTRAN)) { here->LTRAinput1 = here->LTRAinput2 = 0.0; switch (model->LTRAspecialCase) { case LTRA_MOD_LC: case LTRA_MOD_RLC: if (tdover) { /* have to interpolate values */ if ((isaved != 0) && ((model->LTRAhowToInterp == LTRA_MOD_QUADINTERP) || (model->LTRAhowToInterp == LTRA_MOD_MIXEDINTERP))) { v1d = *(here->LTRAv1 + isaved - 1) * qf1 + *(here->LTRAv1 + isaved) * qf2 + *(here->LTRAv1 + isaved + 1) * qf3; max = MAX(*(here->LTRAv1 + isaved - 1), *(here->LTRAv1 + isaved)); max = MAX(max, *(here->LTRAv1 + isaved + 1)); min = MIN(*(here->LTRAv1 + isaved - 1), *(here->LTRAv1 + isaved)); min = MIN(min, *(here->LTRAv1 + isaved + 1)); } if ((model->LTRAhowToInterp == LTRA_MOD_LININTERP) || (isaved == 0) || ((isaved != 0) && ((model->LTRAhowToInterp == LTRA_MOD_QUADINTERP) || (model->LTRAhowToInterp == LTRA_MOD_MIXEDINTERP)) && ((v1d > max) || (v1d < min)))) { if ((isaved != 0) && (model->LTRAhowToInterp == LTRA_MOD_QUADINTERP)) { #ifdef LTRADEBUG fprintf(stdout, "LTRAload: warning: interpolated v1 is out of range after timepoint %d\n", ckt->CKTtimeIndex); fprintf(stdout, " values: %1.8g %1.8g %1.8g; interpolated: %1.8g\n", *(here->LTRAv1 + isaved - 1), *(here->LTRAv1 + isaved), *(here->LTRAv1 + isaved + 1), v1d); fprintf(stdout, " timepoints are: %1.8g %1.8g %1.8g %1.8g\n", t1, t2, t3, ckt->CKTtime - model->LTRAtd); #endif } else { v1d = *(here->LTRAv1 + isaved) * lf2 + *(here->LTRAv1 + isaved + 1) * lf3; } } if ((isaved != 0) && ((model->LTRAhowToInterp == LTRA_MOD_QUADINTERP) || (model->LTRAhowToInterp == LTRA_MOD_MIXEDINTERP))) { i1d = *(here->LTRAi1 + isaved - 1) * qf1 + *(here->LTRAi1 + isaved) * qf2 + *(here->LTRAi1 + isaved + 1) * qf3; max = MAX(*(here->LTRAi1 + isaved - 1), *(here->LTRAi1 + isaved)); max = MAX(max, *(here->LTRAi1 + isaved + 1)); min = MIN(*(here->LTRAi1 + isaved - 1), *(here->LTRAi1 + isaved)); min = MIN(min, *(here->LTRAi1 + isaved + 1)); } if ((model->LTRAhowToInterp == LTRA_MOD_LININTERP) || (isaved == 0) || ((isaved != 0) && ((model->LTRAhowToInterp == LTRA_MOD_QUADINTERP) || (model->LTRAhowToInterp == LTRA_MOD_MIXEDINTERP)) && ((i1d > max) || (i1d < min)))) { if ((isaved != 0) && (model->LTRAhowToInterp == LTRA_MOD_QUADINTERP)) { #ifdef LTRADEBUG fprintf(stdout, "LTRAload: warning: interpolated i1 is out of range after timepoint %d\n", ckt->CKTtimeIndex); fprintf(stdout, " values: %1.8g %1.8g %1.8g; interpolated: %1.8g\n", *(here->LTRAi1 + isaved - 1), *(here->LTRAi1 + isaved), *(here->LTRAi1 + isaved + 1), i1d); fprintf(stdout, " timepoints are: %1.8g %1.8g %1.8g %1.8g\n", t1, t2, t3, ckt->CKTtime - model->LTRAtd); #endif } else { i1d = *(here->LTRAi1 + isaved) * lf2 + *(here->LTRAi1 + isaved + 1) * lf3; } } if ((isaved != 0) && ((model->LTRAhowToInterp == LTRA_MOD_QUADINTERP) || (model->LTRAhowToInterp == LTRA_MOD_MIXEDINTERP))) { v2d = *(here->LTRAv2 + isaved - 1) * qf1 + *(here->LTRAv2 + isaved) * qf2 + *(here->LTRAv2 + isaved + 1) * qf3; max = MAX(*(here->LTRAv2 + isaved - 1), *(here->LTRAv2 + isaved)); max = MAX(max, *(here->LTRAv2 + isaved + 1)); min = MIN(*(here->LTRAv2 + isaved - 1), *(here->LTRAv2 + isaved)); min = MIN(min, *(here->LTRAv2 + isaved + 1)); } if ((model->LTRAhowToInterp == LTRA_MOD_LININTERP) || (isaved == 0) || ((isaved != 0) && ((model->LTRAhowToInterp == LTRA_MOD_QUADINTERP) || (model->LTRAhowToInterp == LTRA_MOD_MIXEDINTERP)) && ((v2d > max) || (v2d < min)))) { if ((isaved != 0) && (model->LTRAhowToInterp == LTRA_MOD_QUADINTERP)) { #ifdef LTRADEBUG fprintf(stdout, "LTRAload: warning: interpolated v2 is out of range after timepoint %d\n", ckt->CKTtimeIndex); fprintf(stdout, " values: %1.8g %1.8g %1.8g; interpolated: %1.8g\n", *(here->LTRAv2 + isaved - 1), *(here->LTRAv2 + isaved), *(here->LTRAv2 + isaved + 1), v2d); fprintf(stdout, " timepoints are: %1.8g %1.8g %1.8g %1.8g\n", t1, t2, t3, ckt->CKTtime - model->LTRAtd); #endif } else { v2d = *(here->LTRAv2 + isaved) * lf2 + *(here->LTRAv2 + isaved + 1) * lf3; } } if ((isaved != 0) && ((model->LTRAhowToInterp == LTRA_MOD_QUADINTERP) || (model->LTRAhowToInterp == LTRA_MOD_MIXEDINTERP))) { i2d = *(here->LTRAi2 + isaved - 1) * qf1 + *(here->LTRAi2 + isaved) * qf2 + *(here->LTRAi2 + isaved + 1) * qf3; max = MAX(*(here->LTRAi2 + isaved - 1), *(here->LTRAi2 + isaved)); max = MAX(max, *(here->LTRAi2 + isaved + 1)); min = MIN(*(here->LTRAi2 + isaved - 1), *(here->LTRAi2 + isaved)); min = MIN(min, *(here->LTRAi2 + isaved + 1)); } if ((model->LTRAhowToInterp == LTRA_MOD_LININTERP) || (isaved == 0) || ((isaved != 0) && ((model->LTRAhowToInterp == LTRA_MOD_QUADINTERP) || (model->LTRAhowToInterp == LTRA_MOD_MIXEDINTERP)) && ((i2d > max) || (i2d < min)))) { if ((isaved != 0) && (model->LTRAhowToInterp == LTRA_MOD_QUADINTERP)) { #ifdef LTRADEBUG fprintf(stdout, "LTRAload: warning: interpolated i2 is out of range after timepoint %d\n", ckt->CKTtimeIndex); fprintf(stdout, " values: %1.8g %1.8g %1.8g; interpolated: %1.8g\n", *(here->LTRAi2 + isaved - 1), *(here->LTRAi2 + isaved), *(here->LTRAi2 + isaved + 1), i2d); fprintf(stdout, " timepoints are: %1.8g %1.8g %1.8g %1.8g\n", t1, t2, t3, ckt->CKTtime - model->LTRAtd); #endif } else { i2d = *(here->LTRAi2 + isaved) * lf2 + *(here->LTRAi2 + isaved + 1) * lf3; } } } /* interpolation done */ break; case LTRA_MOD_RC: break; default: return (E_BADPARM); } switch (model->LTRAspecialCase) { case LTRA_MOD_RLC: /* begin convolution parts */ /* convolution of h1dash with v1 and v2 */ /* the matrix has already been loaded above */ dummy1 = dummy2 = 0.0; for (i = /* model->LTRAh1dashIndex */ ckt->CKTtimeIndex; i > 0; i--) { if (*(model->LTRAh1dashCoeffs + i) != 0.0) { dummy1 += *(model->LTRAh1dashCoeffs + i) * (*(here->LTRAv1 + i) - here->LTRAinitVolt1); dummy2 += *(model->LTRAh1dashCoeffs + i) * (*(here->LTRAv2 + i) - here->LTRAinitVolt2); } } dummy1 += here->LTRAinitVolt1 * model->LTRAintH1dash; dummy2 += here->LTRAinitVolt2 * model->LTRAintH1dash; dummy1 -= here->LTRAinitVolt1 * model->LTRAh1dashFirstCoeff; dummy2 -= here->LTRAinitVolt2 * model->LTRAh1dashFirstCoeff; here->LTRAinput1 -= dummy1 * model->LTRAadmit; here->LTRAinput2 -= dummy2 * model->LTRAadmit; /* end convolution of h1dash with v1 and v2 */ /* convolution of h2 with i2 and i1 */ dummy1 = dummy2 = 0.0; if (tdover) { /* the term for ckt->CKTtime - model->LTRAtd */ dummy1 = (i2d - here->LTRAinitCur2) * model->LTRAh2FirstCoeff; dummy2 = (i1d - here->LTRAinitCur1) * model->LTRAh2FirstCoeff; /* the rest of the convolution */ for (i = /* model->LTRAh2Index */ model->LTRAauxIndex; i > 0; i--) { if (*(model->LTRAh2Coeffs + i) != 0.0) { dummy1 += *(model->LTRAh2Coeffs + i) * (*(here->LTRAi2 + i) - here->LTRAinitCur2); dummy2 += *(model->LTRAh2Coeffs + i) * (*(here->LTRAi1 + i) - here->LTRAinitCur1); } } } /* the initial-condition terms */ dummy1 += here->LTRAinitCur2 * model->LTRAintH2; dummy2 += here->LTRAinitCur1 * model->LTRAintH2; here->LTRAinput1 += dummy1; here->LTRAinput2 += dummy2; /* end convolution of h2 with i2 and i1 */ /* convolution of h3dash with v2 and v1 */ /* the term for ckt->CKTtime - model->LTRAtd */ dummy1 = dummy2 = 0.0; if (tdover) { dummy1 = (v2d - here->LTRAinitVolt2) * model->LTRAh3dashFirstCoeff; dummy2 = (v1d - here->LTRAinitVolt1) * model->LTRAh3dashFirstCoeff; /* the rest of the convolution */ for (i = /* model->LTRAh3dashIndex */ model->LTRAauxIndex; i > 0; i--) { if (*(model->LTRAh3dashCoeffs + i) != 0.0) { dummy1 += *(model->LTRAh3dashCoeffs + i) * (*(here->LTRAv2 + i) - here->LTRAinitVolt2); dummy2 += *(model->LTRAh3dashCoeffs + i) * (*(here->LTRAv1 + i) - here->LTRAinitVolt1); } } } /* the initial-condition terms */ dummy1 += here->LTRAinitVolt2 * model->LTRAintH3dash; dummy2 += here->LTRAinitVolt1 * model->LTRAintH3dash; here->LTRAinput1 += model->LTRAadmit * dummy1; here->LTRAinput2 += model->LTRAadmit * dummy2; /* end convolution of h3dash with v2 and v1 */ case LTRA_MOD_LC: /* begin lossless-like parts */ if (!tdover) { here->LTRAinput1 += model->LTRAattenuation * (here->LTRAinitVolt2 * model->LTRAadmit + here->LTRAinitCur2); here->LTRAinput2 += model->LTRAattenuation * (here->LTRAinitVolt1 * model->LTRAadmit + here->LTRAinitCur1); } else { here->LTRAinput1 += model->LTRAattenuation * (v2d * model->LTRAadmit + i2d); here->LTRAinput2 += model->LTRAattenuation * (v1d * model->LTRAadmit + i1d); } /* end lossless-like parts */ break; case LTRA_MOD_RC: /* begin convolution parts */ /* convolution of h1dash with v1 and v2 */ /* the matrix has already been loaded above */ dummy1 = 0.0; dummy2 = 0.0; for (i = ckt->CKTtimeIndex; i > 0; i--) { if (*(model->LTRAh1dashCoeffs + i) != 0.0) { dummy1 += *(model->LTRAh1dashCoeffs + i) * (*(here->LTRAv1 + i) - here->LTRAinitVolt1); dummy2 += *(model->LTRAh1dashCoeffs + i) * (*(here->LTRAv2 + i) - here->LTRAinitVolt2); } } /* the initial condition terms */ dummy1 += here->LTRAinitVolt1 * model->LTRAintH1dash; dummy2 += here->LTRAinitVolt2 * model->LTRAintH1dash; /* * the constant contributed by the init condition and the latest * timepoint */ dummy1 -= here->LTRAinitVolt1 * model->LTRAh1dashFirstCoeff; dummy2 -= here->LTRAinitVolt2 * model->LTRAh1dashFirstCoeff; here->LTRAinput1 -= dummy1; here->LTRAinput2 -= dummy2; /* end convolution of h1dash with v1 and v2 */ /* convolution of h2 with i2 and i1 */ dummy1 = dummy2 = 0.0; for (i = ckt->CKTtimeIndex; i > 0; i--) { if (*(model->LTRAh2Coeffs + i) != 0.0) { dummy1 += *(model->LTRAh2Coeffs + i) * (*(here->LTRAi2 + i) - here->LTRAinitCur2); dummy2 += *(model->LTRAh2Coeffs + i) * (*(here->LTRAi1 + i) - here->LTRAinitCur1); } } /* the initial-condition terms */ dummy1 += here->LTRAinitCur2 * model->LTRAintH2; dummy2 += here->LTRAinitCur1 * model->LTRAintH2; dummy1 -= here->LTRAinitCur2 * model->LTRAh2FirstCoeff; dummy2 -= here->LTRAinitCur1 * model->LTRAh2FirstCoeff; here->LTRAinput1 += dummy1; here->LTRAinput2 += dummy2; /* end convolution of h2 with i2 and i1 */ /* convolution of h3dash with v2 and v1 */ dummy1 = dummy2 = 0.0; for (i = ckt->CKTtimeIndex; i > 0; i--) { if (*(model->LTRAh3dashCoeffs + i) != 0.0) { dummy1 += *(model->LTRAh3dashCoeffs + i) * (*(here->LTRAv2 + i) - here->LTRAinitVolt2); dummy2 += *(model->LTRAh3dashCoeffs + i) * (*(here->LTRAv1 + i) - here->LTRAinitVolt1); } } /* the initial-condition terms */ dummy1 += here->LTRAinitVolt2 * model->LTRAintH3dash; dummy2 += here->LTRAinitVolt1 * model->LTRAintH3dash; dummy1 -= here->LTRAinitVolt2 * model->LTRAh3dashFirstCoeff; dummy2 -= here->LTRAinitVolt1 * model->LTRAh3dashFirstCoeff; here->LTRAinput1 += dummy1; here->LTRAinput2 += dummy2; /* end convolution of h3dash with v2 and v1 */ break; default: return (E_BADPARM); } } /* load the RHS - done every time this routine is called */ *(ckt->CKTrhs + here->LTRAbrEq1) += here->LTRAinput1; *(ckt->CKTrhs + here->LTRAbrEq2) += here->LTRAinput2; } } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/ltra/ltraitf.h0000644000175000017500000000032513546075722021743 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1990 Jaijeet S. Roychowdhury **********/ #ifndef DEV_LTRA #define DEV_LTRA SPICEdev *get_ltra_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/ltra/ltraacld.c0000644000175000017500000001052213546075722022057 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1990 Jaijeet S. Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ltradefs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int LTRAacLoad(GENmodel *inModel, CKTcircuit *ckt) /* * load the appropriate values for the current timepoint into the sparse * matrix and the right-hand-side vector */ { LTRAmodel *model = (LTRAmodel *) inModel; LTRAinstance *here; double y0_r, y0_i, lambda_r, lambda_i, mag, theta; double exparg_r, exparg_i, explambda_r, explambda_i; double y0exp_r, y0exp_i; long savemode; int error; /* * LTRAacLoad - loads for LTRA lines for the s.s. ac case the equations are * the following: * * Y_0(s) * V_1(s) - I_1(s) = exp(-lambda(s)*length) * (Y_0(s) * V_2(s) + * I_2(s)) Y_0(s) * V_2(s) - I_2(s) = exp(-lambda(s)*length) * (Y_0(s) * * V_1(s) + I_1(s)) * * where Y_0(s) and lambda(s) are as follows: * * Y_0(s) = sqrt( (sC+G)/(sL+R) ) lambda(s) = sqrt( (sC+G)*(sL+R) ) * * for the RC, RLC, and LC cases, G=0. The RG case is handled exactly as the * DC case, (and the above equations require reformulation because they * become identical for the DC case.) */ /* loop through all the transmission line models */ for (; model != NULL; model = LTRAnextModel(model)) { switch (model->LTRAspecialCase) { case LTRA_MOD_LC: y0_r = model->LTRAadmit; y0_i = 0.0; /*lambda_i = model->LTRAtd*ckt->CKTomega;*/ lambda_i = sqrt(model->LTRAinduct*model->LTRAcapac) * ckt->CKTomega; /*CDHW*/ lambda_r = 0.0; break; case LTRA_MOD_RLC: theta = 0.5 * atan(model->LTRAresist / (ckt->CKTomega*model->LTRAinduct)); mag = sqrt(ckt->CKTomega * model->LTRAcapac / sqrt(model->LTRAresist * model->LTRAresist + ckt->CKTomega * ckt->CKTomega * model->LTRAinduct * model->LTRAinduct)); y0_r = mag * cos(theta); y0_i = mag * sin(theta); theta = M_PI / 2 - theta; mag *= sqrt(model->LTRAresist * model->LTRAresist + ckt->CKTomega * ckt->CKTomega * model->LTRAinduct * model->LTRAinduct); lambda_r = mag * cos(theta); lambda_i = mag * sin(theta); break; case LTRA_MOD_RC: y0_r = y0_i = sqrt(0.5 * ckt->CKTomega * model->LTRAcByR); lambda_r = lambda_i = sqrt(0.5 * ckt->CKTomega * model->LTRAresist * model->LTRAcapac); break; case LTRA_MOD_RG: savemode = ckt->CKTmode; ckt->CKTmode |= MODEDC; error = LTRAload(inModel, ckt); ckt->CKTmode = savemode; return (error); break; default: return (E_BADPARM); } exparg_r = -lambda_r * model->LTRAlength; exparg_i = -lambda_i * model->LTRAlength; explambda_r = exp(exparg_r) * cos(exparg_i); explambda_i = exp(exparg_r) * sin(exparg_i); y0exp_r = y0_r * explambda_r - y0_i * explambda_i; y0exp_i = y0_r * explambda_i + y0_i * explambda_r; /* loop through all the instances of the model */ for (here = LTRAinstances(model); here != NULL; here = LTRAnextInstance(here)) { *(here->LTRAibr1Pos1Ptr + 0) += y0_r; *(here->LTRAibr1Pos1Ptr + 1) += y0_i; *(here->LTRAibr1Neg1Ptr + 0) -= y0_r; *(here->LTRAibr1Neg1Ptr + 1) -= y0_i; *(here->LTRAibr1Ibr1Ptr + 0) -= 1.0; *(here->LTRAibr1Pos2Ptr + 0) -= y0exp_r; *(here->LTRAibr1Pos2Ptr + 1) -= y0exp_i; *(here->LTRAibr1Neg2Ptr + 0) += y0exp_r; *(here->LTRAibr1Neg2Ptr + 1) += y0exp_i; *(here->LTRAibr1Ibr2Ptr + 0) -= explambda_r; *(here->LTRAibr1Ibr2Ptr + 1) -= explambda_i; *(here->LTRAibr2Pos2Ptr + 0) += y0_r; *(here->LTRAibr2Pos2Ptr + 1) += y0_i; *(here->LTRAibr2Neg2Ptr + 0) -= y0_r; *(here->LTRAibr2Neg2Ptr + 1) -= y0_i; *(here->LTRAibr2Ibr2Ptr + 0) -= 1.0; *(here->LTRAibr2Pos1Ptr + 0) -= y0exp_r; *(here->LTRAibr2Pos1Ptr + 1) -= y0exp_i; *(here->LTRAibr2Neg1Ptr + 0) += y0exp_r; *(here->LTRAibr2Neg1Ptr + 1) += y0exp_i; *(here->LTRAibr2Ibr1Ptr + 0) -= explambda_r; *(here->LTRAibr2Ibr1Ptr + 1) -= explambda_i; *(here->LTRApos1Ibr1Ptr + 0) += 1.0; *(here->LTRAneg1Ibr1Ptr + 0) -= 1.0; *(here->LTRApos2Ibr2Ptr + 0) += 1.0; *(here->LTRAneg2Ibr2Ptr + 0) -= 1.0; } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/ltra/ltra.c0000644000175000017500000000556413546075722021245 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1990 Jaijeet S. Roychowdhury **********/ /* * This file defines the LTRA data structures that are available to the next * level(s) up the calling hierarchy */ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "ltradefs.h" #include "ngspice/suffix.h" IFparm LTRApTable[] = { /* parameters */ IOPAU("v1", LTRA_V1, IF_REAL, "Initial voltage at end 1"), IOPAU("v2", LTRA_V2, IF_REAL, "Initial voltage at end 2"), IOPAU("i1", LTRA_I1, IF_REAL, "Initial current at end 1"), IOPAU("i2", LTRA_I2, IF_REAL, "Initial current at end 2"), IP("ic", LTRA_IC, IF_REALVEC, "Initial condition vector:v1,i1,v2,i2"), OPU("pos_node1", LTRA_POS_NODE1, IF_INTEGER, "Positive node of end 1 of t-line"), OPU("neg_node1", LTRA_NEG_NODE1, IF_INTEGER, "Negative node of end 1 of t.line"), OPU("pos_node2", LTRA_POS_NODE2, IF_INTEGER, "Positive node of end 2 of t-line"), OPU("neg_node2", LTRA_NEG_NODE2, IF_INTEGER, "Negative node of end 2 of t-line") }; IFparm LTRAmPTable[] = { /* model parameters */ IOP("ltra", LTRA_MOD_LTRA, IF_FLAG, "LTRA model"), IOPU("r", LTRA_MOD_R, IF_REAL, "Resistance per metre"), IOPAU("l", LTRA_MOD_L, IF_REAL, "Inductance per metre"), IOP("g", LTRA_MOD_G, IF_REAL, "Conductance per metre"), IOPAU("c", LTRA_MOD_C, IF_REAL, "Capacitance per metre"), IOPU("len", LTRA_MOD_LEN, IF_REAL, "length of line"), OP("rel", LTRA_MOD_RELTOL, IF_REAL, "Rel. rate of change of deriv. for bkpt"), OP("abs", LTRA_MOD_ABSTOL, IF_REAL, "Abs. rate of change of deriv. for bkpt"), IOPU("nocontrol", LTRA_MOD_NOCONTROL, IF_FLAG, "No timestep control"), IOPU("steplimit", LTRA_MOD_STEPLIMIT, IF_FLAG, "always limit timestep to 0.8*(delay of line)"), IOPU("nosteplimit", LTRA_MOD_NOSTEPLIMIT, IF_FLAG, "don't always limit timestep to 0.8*(delay of line)"), IOPU("lininterp", LTRA_MOD_LININTERP, IF_FLAG, "use linear interpolation"), IOPU("quadinterp", LTRA_MOD_QUADINTERP, IF_FLAG, "use quadratic interpolation"), IOPU("mixedinterp", LTRA_MOD_MIXEDINTERP, IF_FLAG, "use linear interpolation if quadratic results look unacceptable"), IOPU("truncnr", LTRA_MOD_TRUNCNR, IF_FLAG, "use N-R iterations for step calculation in LTRAtrunc"), IOPU("truncdontcut", LTRA_MOD_TRUNCDONTCUT, IF_FLAG, "don't limit timestep to keep impulse response calculation errors low"), IOPAU("compactrel", LTRA_MOD_STLINEREL, IF_REAL, "special reltol for straight line checking"), IOPAU("compactabs", LTRA_MOD_STLINEABS, IF_REAL, "special abstol for straight line checking") }; char *LTRAnames[] = { "P1+", "P1-", "P2+", "P2-" }; int LTRAnSize = NUMELEMS(LTRAnames); int LTRApTSize = NUMELEMS(LTRApTable); int LTRAmPTSize = NUMELEMS(LTRAmPTable); int LTRAiSize = sizeof(LTRAinstance); int LTRAmSize = sizeof(LTRAmodel); tmpk8ny_4pz/src/spicelib/devices/ltra/ltraask.c0000644000175000017500000000435713546075722021743 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1990 Jaijeet S. Roychowdhury **********/ /* * This routine gives access to the internal device parameter of LTRA lines */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "ltradefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int LTRAask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { LTRAinstance *here = (LTRAinstance *) inst; int temp; NG_IGNORE(select); NG_IGNORE(ckt); switch (which) { case LTRA_POS_NODE1: value->iValue = here->LTRAposNode1; return (OK); case LTRA_NEG_NODE1: value->iValue = here->LTRAnegNode1; return (OK); case LTRA_POS_NODE2: value->iValue = here->LTRAposNode2; return (OK); case LTRA_NEG_NODE2: value->iValue = here->LTRAnegNode2; return (OK); case LTRA_MOD_Z0: value->rValue = LTRAmodPtr(here)->LTRAimped; return (OK); case LTRA_MOD_TD: value->rValue = LTRAmodPtr(here)->LTRAtd; return (OK); case LTRA_MOD_NL: value->rValue = LTRAmodPtr(here)->LTRAnl; return (OK); case LTRA_MOD_FREQ: value->rValue = LTRAmodPtr(here)->LTRAf; return (OK); case LTRA_V1: value->rValue = here->LTRAinitVolt1; return (OK); case LTRA_I1: value->rValue = here->LTRAinitCur1; return (OK); case LTRA_V2: value->rValue = here->LTRAinitVolt2; return (OK); case LTRA_I2: value->rValue = here->LTRAinitCur2; return (OK); case LTRA_MOD_RELTOL: value->rValue = LTRAmodPtr(here)->LTRAreltol; return (OK); case LTRA_MOD_ABSTOL: value->rValue = LTRAmodPtr(here)->LTRAabstol; return (OK); case LTRA_BR_EQ1: value->rValue = here->LTRAbrEq1; return (OK); case LTRA_BR_EQ2: value->rValue = here->LTRAbrEq2; return (OK); case LTRA_DELAY: /* * value->v.vec.rVec = TMALLOC(double, here->LTRAsizeDelay); * value->v.numValue = temp = here->LTRAsizeDelay; while (temp--) { * value->v.vec.rVec++ = *here->LTRAdelays++; */ value->v.vec.rVec = NULL; value->v.numValue = temp = 0; return (OK); default: return (E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/ltra/ltraacct.c0000644000175000017500000002476413546075722022103 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1990 Jaijeet S. Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ltradefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int LTRAaccept(CKTcircuit *ckt, GENmodel *inModel) { LTRAmodel *model = (LTRAmodel *) inModel; LTRAinstance *here; double v1, v2, v3, v4; double v5, v6, d1, d2, d3, d4; int tmp_test; int error; int compact = 1; /* loop through all the transmission line models */ for (; model != NULL; model = LTRAnextModel(model)) { if (ckt->CKTmode & MODEINITTRAN) { #define LTRAmemMANAGE(a,b) \ if ( a != NULL) FREE(a);\ a = TMALLOC(double, b); model->LTRAmodelListSize = 10; LTRAmemMANAGE(model->LTRAh1dashCoeffs, model->LTRAmodelListSize) LTRAmemMANAGE(model->LTRAh2Coeffs, model->LTRAmodelListSize) LTRAmemMANAGE(model->LTRAh3dashCoeffs, model->LTRAmodelListSize) } if (ckt->CKTtimeIndex >= model->LTRAmodelListSize) { /* need more space */ model->LTRAmodelListSize += ckt->CKTsizeIncr; model->LTRAh1dashCoeffs = TREALLOC(double, model->LTRAh1dashCoeffs, model->LTRAmodelListSize); model->LTRAh2Coeffs = TREALLOC(double, model->LTRAh2Coeffs, model->LTRAmodelListSize); model->LTRAh3dashCoeffs = TREALLOC(double, model->LTRAh3dashCoeffs, model->LTRAmodelListSize); } /* loop through all the instances of the model */ for (here = LTRAinstances(model); here != NULL; here = LTRAnextInstance(here)) { if (ckt->CKTmode & MODEINITTRAN) { here->LTRAinstListSize = 10; LTRAmemMANAGE(here->LTRAv1, here->LTRAinstListSize) LTRAmemMANAGE(here->LTRAi1, here->LTRAinstListSize) LTRAmemMANAGE(here->LTRAv2, here->LTRAinstListSize) LTRAmemMANAGE(here->LTRAi2, here->LTRAinstListSize) } /* * why is this here? ask TQ * * if (ckt->CKTtimeIndex == 0? 1: (ckt->CKTtime- * (ckt->CKTtimePoints+ckt->CKTtimeIndex-1) > ckt->CKTminBreak)) { * */ if (ckt->CKTtimeIndex >= here->LTRAinstListSize) { /* need more space */ here->LTRAinstListSize += ckt->CKTsizeIncr; here->LTRAv1 = TREALLOC(double, here->LTRAv1, here->LTRAinstListSize); here->LTRAi1 = TREALLOC(double, here->LTRAi1, here->LTRAinstListSize); here->LTRAi2 = TREALLOC(double, here->LTRAi2, here->LTRAinstListSize); here->LTRAv2 = TREALLOC(double, here->LTRAv2, here->LTRAinstListSize); } *(here->LTRAv1 + ckt->CKTtimeIndex) = *(ckt->CKTrhsOld + here->LTRAposNode1) - *(ckt->CKTrhsOld + here->LTRAnegNode1); *(here->LTRAv2 + ckt->CKTtimeIndex) = *(ckt->CKTrhsOld + here->LTRAposNode2) - *(ckt->CKTrhsOld + here->LTRAnegNode2); *(here->LTRAi1 + ckt->CKTtimeIndex) = *(ckt->CKTrhsOld + here->LTRAbrEq1); *(here->LTRAi2 + ckt->CKTtimeIndex) = *(ckt->CKTrhsOld + here->LTRAbrEq2); if (ckt->CKTtryToCompact && (ckt->CKTtimeIndex >= 2)) { /* * figure out if the last 3 points lie on a st. line for all the * terminal variables */ { double t1, t2, t3; t1 = *(ckt->CKTtimePoints + ckt->CKTtimeIndex - 2); t2 = *(ckt->CKTtimePoints + ckt->CKTtimeIndex - 1); t3 = *(ckt->CKTtimePoints + ckt->CKTtimeIndex); if (compact) { compact = LTRAstraightLineCheck(t1, *(here->LTRAv1 + ckt->CKTtimeIndex - 2), t2, *(here->LTRAv1 + ckt->CKTtimeIndex - 1), t3, *(here->LTRAv1 + ckt->CKTtimeIndex), model->LTRAstLineReltol, model->LTRAstLineAbstol); } if (compact) { compact = LTRAstraightLineCheck(t1, *(here->LTRAv2 + ckt->CKTtimeIndex - 2), t2, *(here->LTRAv2 + ckt->CKTtimeIndex - 1), t3, *(here->LTRAv2 + ckt->CKTtimeIndex), model->LTRAstLineReltol, model->LTRAstLineAbstol); } if (compact) { compact = LTRAstraightLineCheck(t1, *(here->LTRAi1 + ckt->CKTtimeIndex - 2), t2, *(here->LTRAi1 + ckt->CKTtimeIndex - 1), t3, *(here->LTRAi1 + ckt->CKTtimeIndex), model->LTRAstLineReltol, model->LTRAstLineAbstol); } if (compact) { compact = LTRAstraightLineCheck(t1, *(here->LTRAi2 + ckt->CKTtimeIndex - 2), t2, *(here->LTRAi2 + ckt->CKTtimeIndex - 1), t3, *(here->LTRAi2 + ckt->CKTtimeIndex), model->LTRAstLineReltol, model->LTRAstLineAbstol); } } } if (ckt->CKTtimeIndex > 0) { #ifdef NOTDEF v1 = (*(here->LTRAv1 + ckt->CKTtimeIndex) + *(here->LTRAi1 + ckt->CKTtimeIndex) * model->LTRAimped) * model->LTRAattenuation; v2 = (*(here->LTRAv1 + ckt->CKTtimeIndex - 1) + *(here->LTRAi1 + ckt->CKTtimeIndex - 1) * model->LTRAimped) * model->LTRAattenuation; v3 = (*(here->LTRAv2 + ckt->CKTtimeIndex) + *(here->LTRAi2 + ckt->CKTtimeIndex) * model->LTRAimped) * model->LTRAattenuation; v4 = (*(here->LTRAv2 + ckt->CKTtimeIndex - 1) + *(here->LTRAi2 + ckt->CKTtimeIndex - 1) * model->LTRAimped) * model->LTRAattenuation; if ((fabs(v1 - v2) >= 50 * ckt->CKTreltol * MAX(fabs(v1), fabs(v2)) + 50 * ckt->CKTvoltTol) || (fabs(v3 - v4) >= 50 * ckt->CKTreltol * MAX(fabs(v3), fabs(v4)) + 50 * ckt->CKTvoltTol)) { /* changing - need to schedule after delay */ /* * don't really need this error = * CKTsetBreak(ckt,ckt->CKTtime+model->LTRAtd); if(error) * return(error); */ /* the PREVIOUS point is the real breakpoint */ error = CKTsetBreak(ckt, *(ckt->CKTtimePoints + ckt->CKTtimeIndex - 1) + model->LTRAtd); CKTbreakDump(ckt); if (error) return (error); } #else /* * remove the hack here - store the total inputs for the last 2 or 3 * timesteps */ v1 = (*(here->LTRAv1 + ckt->CKTtimeIndex) + *(here->LTRAi1 + ckt->CKTtimeIndex) * model->LTRAimped) * model->LTRAattenuation; v2 = (*(here->LTRAv1 + ckt->CKTtimeIndex - 1) + *(here->LTRAi1 + ckt->CKTtimeIndex - 1) * model->LTRAimped) * model->LTRAattenuation; v3 = ckt->CKTtimeIndex < 2 ? v2 : (*(here->LTRAv1 + ckt->CKTtimeIndex - 2) + *(here->LTRAi1 + ckt->CKTtimeIndex - 2) * model->LTRAimped) * model->LTRAattenuation; v4 = (*(here->LTRAv2 + ckt->CKTtimeIndex) + *(here->LTRAi2 + ckt->CKTtimeIndex) * model->LTRAimped) * model->LTRAattenuation; v5 = (*(here->LTRAv2 + ckt->CKTtimeIndex - 1) + *(here->LTRAi2 + ckt->CKTtimeIndex - 1) * model->LTRAimped) * model->LTRAattenuation; v6 = ckt->CKTtimeIndex < 2 ? v5 : (*(here->LTRAv2 + ckt->CKTtimeIndex - 2) + *(here->LTRAi2 + ckt->CKTtimeIndex - 2) * model->LTRAimped) * model->LTRAattenuation; d1 = (v1 - v2) / (*(ckt->CKTtimePoints + ckt->CKTtimeIndex) - *(ckt->CKTtimePoints + ckt->CKTtimeIndex - 1)); d2 = (ckt->CKTtimeIndex < 2) ? 0 : (v2 - v3) / (*(ckt->CKTtimePoints + ckt->CKTtimeIndex - 1) - *(ckt->CKTtimePoints + ckt->CKTtimeIndex - 2)); d3 = (v4 - v5) / (*(ckt->CKTtimePoints + ckt->CKTtimeIndex) - *(ckt->CKTtimePoints + ckt->CKTtimeIndex - 1)); d4 = (ckt->CKTtimeIndex < 2) ? 0 : (v5 - v6) / (*(ckt->CKTtimePoints + ckt->CKTtimeIndex - 1) - *(ckt->CKTtimePoints + ckt->CKTtimeIndex - 2)); /* * here we have a big problem with the scheme boxed by the *s below. * Note the following: if LTRAreltol == 1, (assuming LTRAabstol==0) * then breakpoints are set if and only if d1 and d2 have opposite * signs or one is zero. If LTRAreltol > 2, breakpoints are never * set. The problem is that when the waveform is steady at a value, * small random numerical inaccuracies may produce derivatives of * opposite sign, and breakpoints get set. This can, in practice, get * quite killing... To alleviate this, we try to determine if the * waveform is actually steady using the following tests: 1. Check if * the maximum difference between v1,v2 and v3 is less than * 50*CKTreltol*(the average of v1,v2,and v3) + 50*ckt->CKTabstol * (the 50 has been taken from the NOTDEF section above, reason * unknown - hopefully there is a good reason for it - ask TQ) * * 2. Criterion 1 may be satisfied by a legitimate breakpoint. To * further check, find one more derivative one timepoint ago and see * if that is close to d2. If not, then the likelihood of numerical * inaccuracies is greater... */ /********************************************************************* if( (fabs(d1-d2) >= model->LTRAreltol*MAX(fabs(d1),fabs(d2))+ model->LTRAabstol) || (fabs(d3-d4) >= model->LTRAreltol*MAX(fabs(d3),fabs(d4))+ model->LTRAabstol) ) { *********************************************************************/ #define CHECK(a,b,c) (MAX(MAX(a,b),c)-MIN(MIN(a,b),c) >= \ fabs(50.0*(ckt->CKTreltol/3.0*(a+b+c) +\ ckt->CKTabstol))) tmp_test = (fabs(d1 - d2) >= model->LTRAreltol * MAX(fabs(d1), fabs(d2)) + model->LTRAabstol) && CHECK(v1, v2, v3); if (tmp_test || ((fabs(d3 - d4) >= model->LTRAreltol * MAX(fabs(d3), fabs(d4)) + model->LTRAabstol) && CHECK(v4, v5, v6))) { /* criterion 2 not implemented yet... */ error = CKTsetBreak(ckt, *(ckt->CKTtimePoints + ckt->CKTtimeIndex - 1) + model->LTRAtd); /* * this is not necessary - the previous timepoint was the * breakpoint error = CKTsetBreak(ckt, ckt->CKTtime + * model->LTRAtd); */ #ifdef LTRADEBUG fprintf(stdout, "\nbreakpoints set at %14.14g at %14.14g at time %14.14g\n", ckt->CKTtime + model->LTRAtd, *(ckt->CKTtimePoints + ckt->CKTtimeIndex - 1) + model->LTRAtd, ckt->CKTtime); fprintf(stdout, "d1 through d4 are %14.14g %14.14g %14.14g %14.14g\n\n", d1, d2, d3, d4); #endif if (error) return (error); } /* } */ #endif /* NOTDEF */ } /* ask TQ } */ } /* instance */ } /* model */ if (ckt->CKTtryToCompact && compact && (ckt->CKTtimeIndex >= 2)) { /* * last three timepoints have variables lying on a straight line, do a * compaction */ model = (LTRAmodel *) inModel; for (; model != NULL; model = LTRAnextModel(model)) { for (here = LTRAinstances(model); here != NULL; here = LTRAnextInstance(here)) { *(here->LTRAv1 + ckt->CKTtimeIndex - 1) = *(here->LTRAv1 + ckt->CKTtimeIndex); *(here->LTRAv2 + ckt->CKTtimeIndex - 1) = *(here->LTRAv2 + ckt->CKTtimeIndex); *(here->LTRAi1 + ckt->CKTtimeIndex - 1) = *(here->LTRAi1 + ckt->CKTtimeIndex); *(here->LTRAi2 + ckt->CKTtimeIndex - 1) = *(here->LTRAi2 + ckt->CKTtimeIndex); } } *(ckt->CKTtimePoints + ckt->CKTtimeIndex - 1) = *(ckt->CKTtimePoints + ckt->CKTtimeIndex); ckt->CKTtimeIndex--; #ifdef LTRADEBUG fprintf(stdout, "compacted at time=%g\n", *(ckt->CKTtimePoints + ckt->CKTtimeIndex)); fflush(stdout); #endif } return (OK); } tmpk8ny_4pz/src/spicelib/devices/bjt/0000755000175000017500000000000013546075722017742 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/bjt/bjtsoachk.c0000644000175000017500000000424213546075722022060 0ustar carstencarsten/********** Copyright 2013 Dietmar Warning. All rights reserved. Author: 2013 Dietmar Warning **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bjtdefs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/cpdefs.h" int BJTsoaCheck(CKTcircuit *ckt, GENmodel *inModel) { BJTmodel *model = (BJTmodel *) inModel; BJTinstance *here; double vbe, vbc, vce; /* actual bjt voltages */ int maxwarns; static int warns_vbe = 0, warns_vbc = 0, warns_vce = 0; if (!ckt) { warns_vbe = 0; warns_vbc = 0; warns_vce = 0; return OK; } maxwarns = ckt->CKTsoaMaxWarns; for (; model; model = BJTnextModel(model)) { for (here = BJTinstances(model); here; here=BJTnextInstance(here)) { vbe = fabs(ckt->CKTrhsOld [here->BJTbasePrimeNode] - ckt->CKTrhsOld [here->BJTemitPrimeNode]); vbc = fabs(ckt->CKTrhsOld [here->BJTbasePrimeNode] - ckt->CKTrhsOld [here->BJTcolPrimeNode]); vce = fabs(ckt->CKTrhsOld [here->BJTcolPrimeNode] - ckt->CKTrhsOld [here->BJTemitPrimeNode]); if (vbe > model->BJTvbeMax) if (warns_vbe < maxwarns) { soa_printf(ckt, (GENinstance*) here, "|Vbe|=%g has exceeded Vbe_max=%g\n", vbe, model->BJTvbeMax); warns_vbe++; } if (vbc > model->BJTvbcMax) if (warns_vbc < maxwarns) { soa_printf(ckt, (GENinstance*) here, "|Vbc|=%g has exceeded Vbc_max=%g\n", vbc, model->BJTvbcMax); warns_vbc++; } if (vce > model->BJTvceMax) if (warns_vce < maxwarns) { soa_printf(ckt, (GENinstance*) here, "|Vce|=%g has exceeded Vce_max=%g\n", vce, model->BJTvceMax); warns_vce++; } } } return OK; } tmpk8ny_4pz/src/spicelib/devices/bjt/bjtsprt.c0000644000175000017500000000277113546075722021605 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ /* Pretty print the sensitivity info for all * the bjts in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "bjtdefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/ifsim.h" #include "ngspice/suffix.h" void BJTsPrint(GENmodel *inModel, CKTcircuit *ckt) { BJTmodel *model = (BJTmodel*)inModel; BJTinstance *here; printf("BJTS-----------------\n"); /* loop through all the BJT models */ for( ; model != NULL; model = BJTnextModel(model)) { printf("Model name:%s\n",model->BJTmodName); /* loop through all the instances of the model */ for (here = BJTinstances(model); here != NULL ; here=BJTnextInstance(here)) { ckt->CKTsenInfo->SEN_parmVal[here->BJTsenParmNo] = here->BJTarea; printf(" Instance name:%s\n",here->BJTname); printf(" Collector, Base , Emitter nodes: %s, %s ,%s\n", CKTnodName(ckt,here->BJTcolNode),CKTnodName(ckt,here->BJTbaseNode), CKTnodName(ckt,here->BJTemitNode)); printf(" Area: %g ",here->BJTarea); printf(here->BJTareaGiven ? "(specified)\n" : "(default)\n"); printf(" BJTsenParmNo:%d\n",here->BJTsenParmNo); } } } tmpk8ny_4pz/src/spicelib/devices/bjt/Makefile.am0000644000175000017500000000113713546075722022000 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libbjt.la libbjt_la_SOURCES = \ bjt.c \ bjtacld.c \ bjtask.c \ bjtconv.c \ bjtdefs.h \ bjtdel.c \ bjtdisto.c \ bjtdset.c \ bjtdset.h \ bjtext.h \ bjtgetic.c \ bjtinit.c \ bjtinit.h \ bjtitf.h \ bjtload.c \ bjtmask.c \ bjtmpar.c \ bjtnoise.c \ bjtparam.c \ bjtpzld.c \ bjtsacl.c \ bjtsetup.c \ bjtsload.c \ bjtsoachk.c \ bjtsprt.c \ bjtsset.c \ bjtsupd.c \ bjttemp.c \ bjttrunc.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/bjt/bjtacld.c0000644000175000017500000001037213546075722021514 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* * Function to load the COMPLEX circuit matrix using the * small signal parameters saved during a previous DC operating * point analysis. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bjtdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BJTacLoad(GENmodel *inModel, CKTcircuit *ckt) { BJTinstance *here; BJTmodel *model = (BJTmodel*)inModel; double gcpr; double gepr; double gpi; double gmu; double go; double xgm; double td; double arg; double gm; double gx; double xcpi; double xcmu; double xcbx; double xcsub; double xcmcb; double m; for( ; model != NULL; model = BJTnextModel(model)) { for( here = BJTinstances(model); here!= NULL; here = BJTnextInstance(here)) { m = here->BJTm; gcpr=here->BJTtcollectorConduct * here->BJTarea; gepr=here->BJTtemitterConduct * here->BJTarea; gpi= *(ckt->CKTstate0 + here->BJTgpi); gmu= *(ckt->CKTstate0 + here->BJTgmu); gm= *(ckt->CKTstate0 + here->BJTgm); go= *(ckt->CKTstate0 + here->BJTgo); xgm=0; td=model->BJTexcessPhaseFactor; if(td != 0) { arg = td*ckt->CKTomega; gm = gm+go; xgm = -gm * sin(arg); gm = gm * cos(arg)-go; } gx= *(ckt->CKTstate0 + here->BJTgx); xcpi= *(ckt->CKTstate0 + here->BJTcqbe) * ckt->CKTomega; xcmu= *(ckt->CKTstate0 + here->BJTcqbc) * ckt->CKTomega; xcbx= *(ckt->CKTstate0 + here->BJTcqbx) * ckt->CKTomega; xcsub= *(ckt->CKTstate0 + here->BJTcqsub) * ckt->CKTomega; xcmcb= *(ckt->CKTstate0 + here->BJTcexbc) * ckt->CKTomega; *(here->BJTcolColPtr) += m * (gcpr); *(here->BJTbaseBasePtr) += m * (gx); *(here->BJTbaseBasePtr + 1) += m * (xcbx); *(here->BJTemitEmitPtr) += m * (gepr); *(here->BJTcolPrimeColPrimePtr) += m * (gmu+go+gcpr); *(here->BJTcolPrimeColPrimePtr + 1) += m * (xcmu+xcbx); *(here->BJTsubstConSubstConPtr + 1) += m * (xcsub); *(here->BJTbasePrimeBasePrimePtr) += m * (gx+gpi+gmu); *(here->BJTbasePrimeBasePrimePtr + 1) += m * (xcpi+xcmu+xcmcb); *(here->BJTemitPrimeEmitPrimePtr) += m * (gpi+gepr+gm+go); *(here->BJTemitPrimeEmitPrimePtr + 1) += m * (xcpi+xgm); *(here->BJTcolColPrimePtr) += m * (-gcpr); *(here->BJTbaseBasePrimePtr) += m * (-gx); *(here->BJTemitEmitPrimePtr) += m * (-gepr); *(here->BJTcolPrimeColPtr) += m * (-gcpr); *(here->BJTcolPrimeBasePrimePtr) += m * (-gmu+gm); *(here->BJTcolPrimeBasePrimePtr + 1) += m * (-xcmu+xgm); *(here->BJTcolPrimeEmitPrimePtr) += m * (-gm-go); *(here->BJTcolPrimeEmitPrimePtr + 1) += m * (-xgm); *(here->BJTbasePrimeBasePtr) += m * (-gx); *(here->BJTbasePrimeColPrimePtr) += m * (-gmu); *(here->BJTbasePrimeColPrimePtr + 1) += m * (-xcmu-xcmcb); *(here->BJTbasePrimeEmitPrimePtr) += m * (-gpi); *(here->BJTbasePrimeEmitPrimePtr + 1) += m * (-xcpi); *(here->BJTemitPrimeEmitPtr) += m * (-gepr); *(here->BJTemitPrimeColPrimePtr) += m * (-go); *(here->BJTemitPrimeColPrimePtr + 1) += m * (xcmcb); *(here->BJTemitPrimeBasePrimePtr) += m * (-gpi-gm); *(here->BJTemitPrimeBasePrimePtr + 1) += m * (-xcpi-xgm-xcmcb); *(here->BJTsubstSubstPtr + 1) += m * (xcsub); *(here->BJTsubstConSubstPtr + 1) += m * (-xcsub); *(here->BJTsubstSubstConPtr + 1) += m * (-xcsub); *(here->BJTbaseColPrimePtr + 1) += m * (-xcbx); *(here->BJTcolPrimeBasePtr + 1) += m * (-xcbx); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bjt/bjtdisto.c0000644000175000017500000012357013546075722021740 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bjtdefs.h" #include "ngspice/sperror.h" #include "ngspice/distodef.h" #include "ngspice/suffix.h" #include "bjtdset.h" /* assuming here that ckt->CKTomega has been initialised to * the correct value */ int BJTdisto(int mode, GENmodel *genmodel, CKTcircuit *ckt) { BJTmodel *model = (BJTmodel *) genmodel; DISTOAN* job = (DISTOAN*) ckt->CKTcurJob; double td; DpassStr pass; double r1h1x = 0.0, i1h1x = 0.0; double r1h1y = 0.0, i1h1y = 0.0; double r1h1z = 0.0, i1h1z = 0.0; double r1h2x = 0.0, i1h2x = 0.0; double r1h2y = 0.0, i1h2y = 0.0; double r1h2z = 0.0, i1h2z = 0.0; double r1hm2x = 0.0, i1hm2x = 0.0; double r1hm2y = 0.0, i1hm2y = 0.0; double r1hm2z = 0.0, i1hm2z = 0.0; double r2h11x = 0.0, i2h11x = 0.0; double r2h11y = 0.0, i2h11y = 0.0; double r2h11z = 0.0, i2h11z = 0.0; double r2h1m2x = 0.0, i2h1m2x = 0.0; double r2h1m2y = 0.0, i2h1m2y = 0.0; double r2h1m2z = 0.0, i2h1m2z = 0.0; double temp, itemp; BJTinstance *here; #ifdef DISTODEBUG double time; #endif if (mode == D_SETUP) return(BJTdSetup((GENmodel *)model,ckt)); if ((mode == D_TWOF1) || (mode == D_THRF1) || (mode == D_F1PF2) || (mode == D_F1MF2) || (mode == D_2F1MF2)) { /* loop through all the BJT models */ for( ; model != NULL; model = BJTnextModel(model)) { td = model->BJTexcessPhaseFactor; /* loop through all the instances of the model */ for (here = BJTinstances(model); here != NULL ; here=BJTnextInstance(here)) { /* getting Volterra kernels */ /* until further notice x = vbe, y = vbc, z= vbed */ r1h1x = *(job->r1H1ptr + (here->BJTbasePrimeNode)) - *(job->r1H1ptr + (here->BJTemitPrimeNode)); i1h1x = *(job->i1H1ptr + (here->BJTbasePrimeNode)) - *(job->i1H1ptr + (here->BJTemitPrimeNode)); r1h1y = *(job->r1H1ptr + (here->BJTbasePrimeNode)) - *(job->r1H1ptr + (here->BJTcolPrimeNode)); i1h1y = *(job->i1H1ptr + (here->BJTbasePrimeNode)) - *(job->i1H1ptr + (here->BJTcolPrimeNode)); if (td != 0) { temp = job->Domega1 * td; /* multiplying r1h1x by exp(-j omega td) */ r1h1z = r1h1x*cos(temp) + i1h1x*sin(temp); i1h1z = i1h1x*cos(temp) - r1h1x*sin(temp); } else { r1h1z = r1h1x; i1h1z = i1h1x; } if ((mode == D_F1MF2) || (mode == D_2F1MF2)) { r1hm2x = *(job->r1H2ptr + (here->BJTbasePrimeNode)) - *(job->r1H2ptr + (here->BJTemitPrimeNode)); i1hm2x = -(*(job->i1H2ptr + (here->BJTbasePrimeNode)) - *(job->i1H2ptr + (here->BJTemitPrimeNode))); r1hm2y = *(job->r1H2ptr + (here->BJTbasePrimeNode)) - *(job->r1H2ptr + (here->BJTcolPrimeNode)); i1hm2y = -(*(job->i1H2ptr + (here->BJTbasePrimeNode)) - *(job->i1H2ptr + (here->BJTcolPrimeNode))); if (td != 0) { temp = -job->Domega2 * td; r1hm2z = r1hm2x*cos(temp) + i1hm2x*sin(temp); i1hm2z = i1hm2x*cos(temp) - r1hm2x*sin(temp); } else { r1hm2z = r1hm2x; i1hm2z = i1hm2x; } } if ((mode == D_THRF1) || (mode == D_2F1MF2)){ r2h11x = *(job->r2H11ptr + (here->BJTbasePrimeNode)) - *(job->r2H11ptr + (here->BJTemitPrimeNode)); i2h11x = *(job->i2H11ptr + (here->BJTbasePrimeNode)) - *(job->i2H11ptr + (here->BJTemitPrimeNode)); r2h11y = *(job->r2H11ptr + (here->BJTbasePrimeNode)) - *(job->r2H11ptr + (here->BJTcolPrimeNode)); i2h11y = *(job->i2H11ptr + (here->BJTbasePrimeNode)) - *(job->i2H11ptr + (here->BJTcolPrimeNode)); if (td != 0) { temp = 2*job->Domega1* td ; r2h11z = r2h11x*cos(temp) + i2h11x*sin(temp); i2h11z = i2h11x*cos(temp) - r2h11x*sin(temp); } else { r2h11z = r2h11x; i2h11z = i2h11x; } } if ((mode == D_2F1MF2)){ r2h1m2x = *(job->r2H1m2ptr + (here->BJTbasePrimeNode)) - *(job->r2H1m2ptr + (here->BJTemitPrimeNode)); i2h1m2x = *(job->i2H1m2ptr + (here->BJTbasePrimeNode)) - *(job->i2H1m2ptr + (here->BJTemitPrimeNode)); r2h1m2y = *(job->r2H1m2ptr + (here->BJTbasePrimeNode)) - *(job->r2H1m2ptr + (here->BJTcolPrimeNode)); i2h1m2y = *(job->i2H1m2ptr + (here->BJTbasePrimeNode)) - *(job->i2H1m2ptr + (here->BJTcolPrimeNode)); if (td != 0) { temp = (job->Domega1 - job->Domega2) * td; r2h1m2z = r2h1m2x*cos(temp) + i2h1m2x*sin(temp); i2h1m2z = i2h1m2x*cos(temp) - r2h1m2x*sin(temp); } else { r2h1m2z = r2h1m2x; i2h1m2z = i2h1m2x; } } if ((mode == D_F1PF2)){ r1h2x = *(job->r1H2ptr + (here->BJTbasePrimeNode)) - *(job->r1H2ptr + (here->BJTemitPrimeNode)); i1h2x = *(job->i1H2ptr + (here->BJTbasePrimeNode)) - *(job->i1H2ptr + (here->BJTemitPrimeNode)); r1h2y = *(job->r1H2ptr + (here->BJTbasePrimeNode)) - *(job->r1H2ptr + (here->BJTcolPrimeNode)); i1h2y = *(job->i1H2ptr + (here->BJTbasePrimeNode)) - *(job->i1H2ptr + (here->BJTcolPrimeNode)); if (td != 0) { temp = job->Domega2 * td; r1h2z = r1h2x*cos(temp) + i1h2x*sin(temp); i1h2z = i1h2x*cos(temp) - r1h2x*sin(temp); } else { r1h2z = r1h2x; i1h2z = i1h2x; } } /* loading starts here */ switch (mode) { case D_TWOF1: /* ic term */ #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds(); #endif temp = DFn2F1( here->ic_x2, here->ic_y2, here->ic_w2, here->ic_xy, here->ic_yw, here->ic_xw, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z); itemp = DFi2F1( here->ic_x2, here->ic_y2, here->ic_w2, here->ic_xy, here->ic_yw, here->ic_xw, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds() - time; printf("Time for DFn2F1: %g seconds \n", time); #endif *(ckt->CKTrhs + here->BJTcolPrimeNode) -= temp; *(ckt->CKTirhs + here->BJTcolPrimeNode) -= itemp; *(ckt->CKTrhs + here->BJTemitPrimeNode) += temp; *(ckt->CKTirhs + here->BJTemitPrimeNode) += itemp; /* finish ic term */ /* loading ib term */ /* x and y still the same */ temp = DFn2F1( here->ib_x2, here->ib_y2, 0.0, here->ib_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0); itemp = DFi2F1( here->ib_x2, here->ib_y2, 0.0, here->ib_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0); *(ckt->CKTrhs + here->BJTbasePrimeNode) -= temp; *(ckt->CKTirhs + here->BJTbasePrimeNode) -= itemp; *(ckt->CKTrhs + here->BJTemitPrimeNode) += temp; *(ckt->CKTirhs + here->BJTemitPrimeNode) += itemp; /* ib term over */ /* loading ibb term */ /* now x = vbe, y = vbc, z = vbb */ if ( !((model->BJTminBaseResist == 0.0) && (model->BJTbaseResist == model->BJTminBaseResist))) { r1h1z = *(job->r1H1ptr + (here->BJTbaseNode)) - *(job->r1H1ptr + (here->BJTbasePrimeNode)); i1h1z = *(job->i1H1ptr + (here->BJTbaseNode)) - *(job->i1H1ptr + (here->BJTbasePrimeNode)); temp = DFn2F1( here->ibb_x2, here->ibb_y2, here->ibb_z2, here->ibb_xy, here->ibb_yz, here->ibb_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z); itemp = DFi2F1( here->ibb_x2, here->ibb_y2, here->ibb_z2, here->ibb_xy, here->ibb_yz, here->ibb_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z); *(ckt->CKTrhs + here->BJTbaseNode) -= temp; *(ckt->CKTirhs + here->BJTbaseNode) -= itemp; *(ckt->CKTrhs + here->BJTbasePrimeNode) += temp; *(ckt->CKTirhs + here->BJTbasePrimeNode) += itemp; } /* ibb term over */ /* loading qbe term */ /* x = vbe, y = vbc, z not used */ /* (have to multiply by j omega for charge storage * elements to get the current) */ temp = - ckt->CKTomega* DFi2F1( here->qbe_x2, here->qbe_y2, 0.0, here->qbe_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0); itemp = ckt->CKTomega* DFn2F1( here->qbe_x2, here->qbe_y2, 0.0, here->qbe_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0); *(ckt->CKTrhs + here->BJTbasePrimeNode) -= temp; *(ckt->CKTirhs + here->BJTbasePrimeNode) -= itemp; *(ckt->CKTrhs + here->BJTemitPrimeNode) += temp; *(ckt->CKTirhs + here->BJTemitPrimeNode) += itemp; /* qbe term over */ /* loading qbx term */ /* z = vbx= vb - vcPrime */ r1h1z = r1h1z + r1h1y; i1h1z = i1h1z + i1h1y; #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds(); #endif temp = - ckt->CKTomega * D1i2F1(here->capbx2, r1h1z, i1h1z); itemp = ckt->CKTomega * D1n2F1(here->capbx2, r1h1z, i1h1z); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds() - time; printf("Time for D1n2F1: %g seconds \n", time); #endif *(ckt->CKTrhs + here->BJTbaseNode) -= temp; *(ckt->CKTirhs + here->BJTbaseNode) -= itemp; *(ckt->CKTrhs + here->BJTcolPrimeNode) += temp; *(ckt->CKTirhs + here->BJTcolPrimeNode) += itemp; /* qbx term over */ /* loading qbc term */ temp = - ckt->CKTomega * D1i2F1(here->capbc2, r1h1y, i1h1y); itemp = ckt->CKTomega * D1n2F1(here->capbc2, r1h1y, i1h1y); *(ckt->CKTrhs + here->BJTbasePrimeNode) -= temp; *(ckt->CKTirhs + here->BJTbasePrimeNode) -= itemp; *(ckt->CKTrhs + here->BJTcolPrimeNode) += temp; *(ckt->CKTirhs + here->BJTcolPrimeNode) += itemp; /* qbc term over */ /* loading qsc term */ /* z = vsc */ r1h1z = *(job->r1H1ptr + (here->BJTsubstNode)) - *(job->r1H1ptr + (here->BJTcolPrimeNode)); i1h1z = *(job->i1H1ptr + (here->BJTsubstNode)) - *(job->i1H1ptr + (here->BJTcolPrimeNode)); temp = - ckt->CKTomega * D1i2F1(here->capsc2, r1h1z, i1h1z); itemp = ckt->CKTomega * D1n2F1(here->capsc2, r1h1z, i1h1z); *(ckt->CKTrhs + here->BJTsubstNode) -= temp; *(ckt->CKTirhs + here->BJTsubstNode) -= itemp; *(ckt->CKTrhs + here->BJTcolPrimeNode) += temp; *(ckt->CKTirhs + here->BJTcolPrimeNode) += itemp; /* qsc term over */ break; case D_THRF1: /* ic term */ #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds(); #endif temp = DFn3F1( here->ic_x2, here->ic_y2, here->ic_w2, here->ic_xy, here->ic_yw, here->ic_xw, here->ic_x3, here->ic_y3, here->ic_w3, here->ic_x2y, here->ic_x2w, here->ic_xy2, here->ic_y2w, here->ic_xw2, here->ic_yw2, here->ic_xyw, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r2h11x, i2h11x, r2h11y, i2h11y, r2h11z, i2h11z); itemp = DFi3F1( here->ic_x2, here->ic_y2, here->ic_w2, here->ic_xy, here->ic_yw, here->ic_xw, here->ic_x3, here->ic_y3, here->ic_w3, here->ic_x2y, here->ic_x2w, here->ic_xy2, here->ic_y2w, here->ic_xw2, here->ic_yw2, here->ic_xyw, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r2h11x, i2h11x, r2h11y, i2h11y, r2h11z, i2h11z); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds() - time; printf("Time for DFn3F1: %g seconds \n", time); #endif *(ckt->CKTrhs + here->BJTcolPrimeNode) -= temp; *(ckt->CKTirhs + here->BJTcolPrimeNode) -= itemp; *(ckt->CKTrhs + here->BJTemitPrimeNode) += temp; *(ckt->CKTirhs + here->BJTemitPrimeNode) += itemp; /* finish ic term */ /* loading ib term */ /* x and y still the same */ temp = DFn3F1( here->ib_x2, here->ib_y2, 0.0, here->ib_xy, 0.0, 0.0, here->ib_x3, here->ib_y3, 0.0, here->ib_x2y, 0.0, here->ib_xy2, 0.0, 0.0, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r2h11x, i2h11x, r2h11y, i2h11y, 0.0, 0.0); itemp = DFi3F1( here->ib_x2, here->ib_y2, 0.0, here->ib_xy, 0.0, 0.0, here->ib_x3, here->ib_y3, 0.0, here->ib_x2y, 0.0, here->ib_xy2, 0.0, 0.0, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r2h11x, i2h11x, r2h11y, i2h11y, 0.0, 0.0); *(ckt->CKTrhs + here->BJTbasePrimeNode) -= temp; *(ckt->CKTirhs + here->BJTbasePrimeNode) -= itemp; *(ckt->CKTrhs + here->BJTemitPrimeNode) += temp; *(ckt->CKTirhs + here->BJTemitPrimeNode) += itemp; /* ib term over */ /* loading ibb term */ if ( !((model->BJTminBaseResist == 0.0) && (model->BJTbaseResist == model->BJTminBaseResist))) { /* now x = vbe, y = vbc, z = vbb */ r1h1z = *(job->r1H1ptr + (here->BJTbaseNode)) - *(job->r1H1ptr + (here->BJTbasePrimeNode)); i1h1z = *(job->i1H1ptr + (here->BJTbaseNode)) - *(job->i1H1ptr + (here->BJTbasePrimeNode)); r2h11z = *(job->r2H11ptr + (here->BJTbaseNode)) - *(job->r2H11ptr + (here->BJTbasePrimeNode)); i2h11z = *(job->i2H11ptr + (here->BJTbaseNode)) - *(job->i2H11ptr + (here->BJTbasePrimeNode)); temp = DFn3F1( here->ibb_x2, here->ibb_y2, here->ibb_z2, here->ibb_xy, here->ibb_yz, here->ibb_xz, here->ibb_x3, here->ibb_y3, here->ibb_z3, here->ibb_x2y, here->ibb_x2z, here->ibb_xy2, here->ibb_y2z, here->ibb_xz2, here->ibb_yz2, here->ibb_xyz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r2h11x, i2h11x, r2h11y, i2h11y, r2h11z, i2h11z); itemp = DFi3F1( here->ibb_x2, here->ibb_y2, here->ibb_z2, here->ibb_xy, here->ibb_yz, here->ibb_xz, here->ibb_x3, here->ibb_y3, here->ibb_z3, here->ibb_x2y, here->ibb_x2z, here->ibb_xy2, here->ibb_y2z, here->ibb_xz2, here->ibb_yz2, here->ibb_xyz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r2h11x, i2h11x, r2h11y, i2h11y, r2h11z, i2h11z); *(ckt->CKTrhs + here->BJTbaseNode) -= temp; *(ckt->CKTirhs + here->BJTbaseNode) -= itemp; *(ckt->CKTrhs + here->BJTbasePrimeNode) += temp; *(ckt->CKTirhs + here->BJTbasePrimeNode) += itemp; } /* ibb term over */ /* loading qbe term */ /* x = vbe, y = vbc, z not used */ /* (have to multiply by j omega for charge storage * elements to get the current) */ temp = - ckt->CKTomega* DFi3F1( here->qbe_x2, here->qbe_y2, 0.0, here->qbe_xy, 0.0, 0.0, here->qbe_x3, here->qbe_y3, 0.0, here->qbe_x2y, 0.0, here->qbe_xy2, 0.0, 0.0, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r2h11x, i2h11x, r2h11y, i2h11y, 0.0, 0.0); itemp = ckt->CKTomega* DFn3F1( here->qbe_x2, here->qbe_y2, 0.0, here->qbe_xy, 0.0, 0.0, here->qbe_x3, here->qbe_y3, 0.0, here->qbe_x2y, 0.0, here->qbe_xy2, 0.0, 0.0, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r2h11x, i2h11x, r2h11y, i2h11y, 0.0, 0.0); *(ckt->CKTrhs + here->BJTbasePrimeNode) -= temp; *(ckt->CKTirhs + here->BJTbasePrimeNode) -= itemp; *(ckt->CKTrhs + here->BJTemitPrimeNode) += temp; *(ckt->CKTirhs + here->BJTemitPrimeNode) += itemp; /* qbe term over */ /* loading qbx term */ /* z = vbx= vb - vcPrime */ r1h1z = r1h1z + r1h1y; i1h1z = i1h1z + i1h1y; r2h11z = r2h11z + r2h11y; i2h11z = i2h11z + i2h11y; #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds(); #endif temp = - ckt->CKTomega * D1i3F1(here->capbx2, here->capbx3, r1h1z, i1h1z, r2h11z, i2h11z); itemp = ckt->CKTomega * D1n3F1(here->capbx2, here->capbx3, r1h1z, i1h1z, r2h11z, i2h11z); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds() - time; printf("Time for D1n3F1: %g seconds \n", time); #endif *(ckt->CKTrhs + here->BJTbaseNode) -= temp; *(ckt->CKTirhs + here->BJTbaseNode) -= itemp; *(ckt->CKTrhs + here->BJTcolPrimeNode) += temp; *(ckt->CKTirhs + here->BJTcolPrimeNode) += itemp; /* qbx term over */ /* loading qbc term */ temp = - ckt->CKTomega * D1i3F1(here->capbc2, here->capbc3, r1h1y, i1h1y, r2h11y, i2h11y); itemp = ckt->CKTomega * D1n3F1(here->capbc2, here->capbc3, r1h1y, i1h1y, r2h11y, i2h11y); *(ckt->CKTrhs + here->BJTbasePrimeNode) -= temp; *(ckt->CKTirhs + here->BJTbasePrimeNode) -= itemp; *(ckt->CKTrhs + here->BJTcolPrimeNode) += temp; *(ckt->CKTirhs + here->BJTcolPrimeNode) += itemp; /* qbc term over */ /* loading qsc term */ /* z = vsc */ r1h1z = *(job->r1H1ptr + (here->BJTsubstNode)) - *(job->r1H1ptr + (here->BJTcolPrimeNode)); i1h1z = *(job->i1H1ptr + (here->BJTsubstNode)) - *(job->i1H1ptr + (here->BJTcolPrimeNode)); r2h11z = *(job->r2H11ptr + (here->BJTsubstNode)) - *(job->r2H11ptr + (here->BJTcolPrimeNode)); i2h11z = *(job->i2H11ptr + (here->BJTsubstNode)) - *(job->i2H11ptr + (here->BJTcolPrimeNode)); temp = - ckt->CKTomega * D1i3F1(here->capsc2, here->capsc3, r1h1z, i1h1z, r2h11z, i2h11z); itemp = ckt->CKTomega * D1n3F1(here->capsc2, here->capsc3, r1h1z, i1h1z, r2h11z, i2h11z); *(ckt->CKTrhs + here->BJTsubstNode) -= temp; *(ckt->CKTirhs + here->BJTsubstNode) -= itemp; *(ckt->CKTrhs + here->BJTcolPrimeNode) += temp; *(ckt->CKTirhs + here->BJTcolPrimeNode) += itemp; /* qsc term over */ break; case D_F1PF2: /* ic term */ temp = DFnF12( here->ic_x2, here->ic_y2, here->ic_w2, here->ic_xy, here->ic_yw, here->ic_xw, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1h2x, i1h2x, r1h2y, i1h2y, r1h2z, i1h2z); itemp = DFiF12( here->ic_x2, here->ic_y2, here->ic_w2, here->ic_xy, here->ic_yw, here->ic_xw, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1h2x, i1h2x, r1h2y, i1h2y, r1h2z, i1h2z); *(ckt->CKTrhs + here->BJTcolPrimeNode) -= temp; *(ckt->CKTirhs + here->BJTcolPrimeNode) -= itemp; *(ckt->CKTrhs + here->BJTemitPrimeNode) += temp; *(ckt->CKTirhs + here->BJTemitPrimeNode) += itemp; /* finish ic term */ /* loading ib term */ /* x and y still the same */ #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds(); #endif temp = DFnF12( here->ib_x2, here->ib_y2, 0.0, here->ib_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r1h2x, i1h2x, r1h2y, i1h2y, 0.0, 0.0); itemp = DFiF12( here->ib_x2, here->ib_y2, 0.0, here->ib_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r1h2x, i1h2x, r1h2y, i1h2y, 0.0, 0.0); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds() - time; printf("Time for DFnF12: %g seconds \n", time); #endif *(ckt->CKTrhs + here->BJTbasePrimeNode) -= temp; *(ckt->CKTirhs + here->BJTbasePrimeNode) -= itemp; *(ckt->CKTrhs + here->BJTemitPrimeNode) += temp; *(ckt->CKTirhs + here->BJTemitPrimeNode) += itemp; /* ib term over */ /* loading ibb term */ if ( !((model->BJTminBaseResist == 0.0) && (model->BJTbaseResist == model->BJTminBaseResist))) { /* now x = vbe, y = vbc, z = vbb */ r1h1z = *(job->r1H1ptr + (here->BJTbaseNode)) - *(job->r1H1ptr + (here->BJTbasePrimeNode)); i1h1z = *(job->i1H1ptr + (here->BJTbaseNode)) - *(job->i1H1ptr + (here->BJTbasePrimeNode)); r1h2z = *(job->r1H2ptr + (here->BJTbaseNode)) - *(job->r1H2ptr + (here->BJTbasePrimeNode)); i1h2z = *(job->i1H2ptr + (here->BJTbaseNode)) - *(job->i1H2ptr + (here->BJTbasePrimeNode)); temp = DFnF12( here->ibb_x2, here->ibb_y2, here->ibb_z2, here->ibb_xy, here->ibb_yz, here->ibb_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1h2x, i1h2x, r1h2y, i1h2y, r1h2z, i1h2z); itemp = DFiF12( here->ibb_x2, here->ibb_y2, here->ibb_z2, here->ibb_xy, here->ibb_yz, here->ibb_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1h2x, i1h2x, r1h2y, i1h2y, r1h2z, i1h2z); *(ckt->CKTrhs + here->BJTbaseNode) -= temp; *(ckt->CKTirhs + here->BJTbaseNode) -= itemp; *(ckt->CKTrhs + here->BJTbasePrimeNode) += temp; *(ckt->CKTirhs + here->BJTbasePrimeNode) += itemp; } /* ibb term over */ /* loading qbe term */ /* x = vbe, y = vbc, z not used */ /* (have to multiply by j omega for charge storage * elements - to get the current) */ temp = - ckt->CKTomega* DFiF12( here->qbe_x2, here->qbe_y2, 0.0, here->qbe_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r1h2x, i1h2x, r1h2y, i1h2y, 0.0, 0.0); itemp = ckt->CKTomega* DFnF12( here->qbe_x2, here->qbe_y2, 0.0, here->qbe_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r1h2x, i1h2x, r1h2y, i1h2y, 0.0, 0.0); *(ckt->CKTrhs + here->BJTbasePrimeNode) -= temp; *(ckt->CKTirhs + here->BJTbasePrimeNode) -= itemp; *(ckt->CKTrhs + here->BJTemitPrimeNode) += temp; *(ckt->CKTirhs + here->BJTemitPrimeNode) += itemp; /* qbe term over */ /* loading qbx term */ /* z = vbx= vb - vcPrime */ r1h1z = r1h1z + r1h1y; i1h1z = i1h1z + i1h1y; r1h2z = r1h2z + r1h2y; i1h2z = i1h2z + i1h2y; #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds(); #endif temp = - ckt->CKTomega * D1iF12(here->capbx2, r1h1z, i1h1z, r1h2z, i1h2z); itemp = ckt->CKTomega * D1nF12(here->capbx2, r1h1z, i1h1z, r1h2z, i1h2z); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds() - time; printf("Time for D1nF12: %g seconds \n", time); #endif *(ckt->CKTrhs + here->BJTbaseNode) -= temp; *(ckt->CKTirhs + here->BJTbaseNode) -= itemp; *(ckt->CKTrhs + here->BJTcolPrimeNode) += temp; *(ckt->CKTirhs + here->BJTcolPrimeNode) += itemp; /* qbx term over */ /* loading qbc term */ temp = - ckt->CKTomega * D1iF12(here->capbc2, r1h1y, i1h1y, r1h2y, i1h2y); itemp = ckt->CKTomega * D1nF12(here->capbc2, r1h1y, i1h1y, r1h2y, i1h2y); *(ckt->CKTrhs + here->BJTbasePrimeNode) -= temp; *(ckt->CKTirhs + here->BJTbasePrimeNode) -= itemp; *(ckt->CKTrhs + here->BJTcolPrimeNode) += temp; *(ckt->CKTirhs + here->BJTcolPrimeNode) += itemp; /* qbc term over */ /* loading qsc term */ /* z = vsc */ r1h1z = *(job->r1H1ptr + (here->BJTsubstNode)) - *(job->r1H1ptr + (here->BJTcolPrimeNode)); i1h1z = *(job->i1H1ptr + (here->BJTsubstNode)) - *(job->i1H1ptr + (here->BJTcolPrimeNode)); r1h2z = *(job->r1H2ptr + (here->BJTsubstNode)) - *(job->r1H2ptr + (here->BJTcolPrimeNode)); i1h2z = *(job->i1H2ptr + (here->BJTsubstNode)) - *(job->i1H2ptr + (here->BJTcolPrimeNode)); temp = - ckt->CKTomega * D1iF12(here->capsc2, r1h1z, i1h1z, r1h2z, i1h2z); itemp = ckt->CKTomega * D1nF12(here->capsc2, r1h1z, i1h1z, r1h2z, i1h2z); *(ckt->CKTrhs + here->BJTsubstNode) -= temp; *(ckt->CKTirhs + here->BJTsubstNode) -= itemp; *(ckt->CKTrhs + here->BJTcolPrimeNode) += temp; *(ckt->CKTirhs + here->BJTcolPrimeNode) += itemp; /* qsc term over */ break; case D_F1MF2: /* ic term */ temp = DFnF12( here->ic_x2, here->ic_y2, here->ic_w2, here->ic_xy, here->ic_yw, here->ic_xw, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1hm2x, i1hm2x, r1hm2y, i1hm2y, r1hm2z, i1hm2z); itemp = DFiF12( here->ic_x2, here->ic_y2, here->ic_w2, here->ic_xy, here->ic_yw, here->ic_xw, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1hm2x, i1hm2x, r1hm2y, i1hm2y, r1hm2z, i1hm2z); *(ckt->CKTrhs + here->BJTcolPrimeNode) -= temp; *(ckt->CKTirhs + here->BJTcolPrimeNode) -= itemp; *(ckt->CKTrhs + here->BJTemitPrimeNode) += temp; *(ckt->CKTirhs + here->BJTemitPrimeNode) += itemp; /* finish ic term */ /* loading ib term */ /* x and y still the same */ temp = DFnF12( here->ib_x2, here->ib_y2, 0.0, here->ib_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r1hm2x, i1hm2x, r1hm2y, i1hm2y, 0.0, 0.0); itemp = DFiF12( here->ib_x2, here->ib_y2, 0.0, here->ib_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r1hm2x, i1hm2x, r1hm2y, i1hm2y, 0.0, 0.0); *(ckt->CKTrhs + here->BJTbasePrimeNode) -= temp; *(ckt->CKTirhs + here->BJTbasePrimeNode) -= itemp; *(ckt->CKTrhs + here->BJTemitPrimeNode) += temp; *(ckt->CKTirhs + here->BJTemitPrimeNode) += itemp; /* ib term over */ /* loading ibb term */ if ( !((model->BJTminBaseResist == 0.0) && (model->BJTbaseResist == model->BJTminBaseResist))) { /* now x = vbe, y = vbc, z = vbb */ r1h1z = *(job->r1H1ptr + (here->BJTbaseNode)) - *(job->r1H1ptr + (here->BJTbasePrimeNode)); i1h1z = *(job->i1H1ptr + (here->BJTbaseNode)) - *(job->i1H1ptr + (here->BJTbasePrimeNode)); r1hm2z = *(job->r1H2ptr + (here->BJTbaseNode)) - *(job->r1H2ptr + (here->BJTbasePrimeNode)); i1hm2z = *(job->i1H2ptr + (here->BJTbaseNode)) - *(job->i1H2ptr + (here->BJTbasePrimeNode)); temp = DFnF12( here->ibb_x2, here->ibb_y2, here->ibb_z2, here->ibb_xy, here->ibb_yz, here->ibb_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1hm2x, i1hm2x, r1hm2y, i1hm2y, r1hm2z, i1hm2z); itemp = DFiF12( here->ibb_x2, here->ibb_y2, here->ibb_z2, here->ibb_xy, here->ibb_yz, here->ibb_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1hm2x, i1hm2x, r1hm2y, i1hm2y, r1hm2z, i1hm2z); *(ckt->CKTrhs + here->BJTbaseNode) -= temp; *(ckt->CKTirhs + here->BJTbaseNode) -= itemp; *(ckt->CKTrhs + here->BJTbasePrimeNode) += temp; *(ckt->CKTirhs + here->BJTbasePrimeNode) += itemp; } /* ibb term over */ /* loading qbe term */ /* x = vbe, y = vbc, z not used */ /* (have to multiply by j omega for charge storage * elements - to get the current) */ temp = - ckt->CKTomega* DFiF12( here->qbe_x2, here->qbe_y2, 0.0, here->qbe_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r1hm2x, i1hm2x, r1hm2y, i1hm2y, 0.0, 0.0); itemp = ckt->CKTomega* DFnF12( here->qbe_x2, here->qbe_y2, 0.0, here->qbe_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r1hm2x, i1hm2x, r1hm2y, i1hm2y, 0.0, 0.0); *(ckt->CKTrhs + here->BJTbasePrimeNode) -= temp; *(ckt->CKTirhs + here->BJTbasePrimeNode) -= itemp; *(ckt->CKTrhs + here->BJTemitPrimeNode) += temp; *(ckt->CKTirhs + here->BJTemitPrimeNode) += itemp; /* qbe term over */ /* loading qbx term */ /* z = vbx= vb - vcPrime */ r1h1z = r1h1z + r1h1y; i1h1z = i1h1z + i1h1y; r1hm2z = r1hm2z + r1hm2y; i1hm2z = i1hm2z + i1hm2y; temp = - ckt->CKTomega * D1iF12(here->capbx2, r1h1z, i1h1z, r1hm2z, i1hm2z); itemp = ckt->CKTomega * D1nF12(here->capbx2, r1h1z, i1h1z, r1hm2z, i1hm2z); *(ckt->CKTrhs + here->BJTbaseNode) -= temp; *(ckt->CKTirhs + here->BJTbaseNode) -= itemp; *(ckt->CKTrhs + here->BJTcolPrimeNode) += temp; *(ckt->CKTirhs + here->BJTcolPrimeNode) += itemp; /* qbx term over */ /* loading qbc term */ temp = - ckt->CKTomega * D1iF12(here->capbc2, r1h1y, i1h1y, r1hm2y, i1hm2y); itemp = ckt->CKTomega * D1nF12(here->capbc2, r1h1y, i1h1y, r1hm2y, i1hm2y); *(ckt->CKTrhs + here->BJTbasePrimeNode) -= temp; *(ckt->CKTirhs + here->BJTbasePrimeNode) -= itemp; *(ckt->CKTrhs + here->BJTcolPrimeNode) += temp; *(ckt->CKTirhs + here->BJTcolPrimeNode) += itemp; /* qbc term over */ /* loading qsc term */ /* z = vsc */ r1h1z = *(job->r1H1ptr + (here->BJTsubstNode)) - *(job->r1H1ptr + (here->BJTcolPrimeNode)); i1h1z = *(job->i1H1ptr + (here->BJTsubstNode)) - *(job->i1H1ptr + (here->BJTcolPrimeNode)); r1hm2z = *(job->r1H2ptr + (here->BJTsubstNode)) - *(job->r1H2ptr + (here->BJTcolPrimeNode)); i1hm2z = *(job->i1H2ptr + (here->BJTsubstNode)) - *(job->i1H2ptr + (here->BJTcolPrimeNode)); temp = - ckt->CKTomega * D1iF12(here->capsc2, r1h1z, i1h1z, r1hm2z, i1hm2z); itemp = ckt->CKTomega * D1nF12(here->capsc2, r1h1z, i1h1z, r1hm2z, i1hm2z); *(ckt->CKTrhs + here->BJTsubstNode) -= temp; *(ckt->CKTirhs + here->BJTsubstNode) -= itemp; *(ckt->CKTrhs + here->BJTcolPrimeNode) += temp; *(ckt->CKTirhs + here->BJTcolPrimeNode) += itemp; /* qsc term over */ break; case D_2F1MF2: /* ic term */ { pass.cxx = here->ic_x2; pass.cyy = here->ic_y2; pass.czz = here->ic_w2; pass.cxy = here->ic_xy; pass.cyz = here->ic_yw; pass.cxz = here->ic_xw; pass.cxxx = here->ic_x3; pass.cyyy = here->ic_y3; pass.czzz = here->ic_w3; pass.cxxy = here->ic_x2y; pass.cxxz = here->ic_x2w; pass.cxyy = here->ic_xy2; pass.cyyz = here->ic_y2w; pass.cxzz = here->ic_xw2; pass.cyzz = here->ic_yw2; pass.cxyz = here->ic_xyw; pass.r1h1x = r1h1x; pass.i1h1x = i1h1x; pass.r1h1y = r1h1y; pass.i1h1y = i1h1y; pass.r1h1z = r1h1z; pass.i1h1z = i1h1z; pass.r1h2x = r1hm2x; pass.i1h2x = i1hm2x; pass.r1h2y = r1hm2y; pass.i1h2y = i1hm2y; pass.r1h2z = r1hm2z; pass.i1h2z = i1hm2z; pass.r2h11x = r2h11x; pass.i2h11x = i2h11x; pass.r2h11y = r2h11y; pass.i2h11y = i2h11y; pass.r2h11z = r2h11z; pass.i2h11z = i2h11z; pass.h2f1f2x = r2h1m2x; pass.ih2f1f2x = i2h1m2x; pass.h2f1f2y = r2h1m2y; pass.ih2f1f2y = i2h1m2y; pass.h2f1f2z = r2h1m2z; pass.ih2f1f2z = i2h1m2z; #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds(); #endif temp = DFn2F12(&pass); itemp = DFi2F12(&pass); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds() - time; printf("Time for DFn2F12: %g seconds \n", time); #endif } *(ckt->CKTrhs + here->BJTcolPrimeNode) -= temp; *(ckt->CKTirhs + here->BJTcolPrimeNode) -= itemp; *(ckt->CKTrhs + here->BJTemitPrimeNode) += temp; *(ckt->CKTirhs + here->BJTemitPrimeNode) += itemp; /* finish ic term */ /* loading ib term */ /* x and y still the same */ { pass.cxx = here->ib_x2; pass.cyy = here->ib_y2; pass.czz = 0.0; pass.cxy = here->ib_xy; pass.cyz = 0.0; pass.cxz = 0.0; pass.cxxx = here->ib_x3; pass.cyyy = here->ib_y3; pass.czzz = 0.0; pass.cxxy = here->ib_x2y; pass.cxxz = 0.0; pass.cxyy = here->ib_xy2; pass.cyyz = 0.0; pass.cxzz = 0.0; pass.cyzz = 0.0; pass.cxyz = 0.0; pass.r1h1x = r1h1x; pass.i1h1x = i1h1x; pass.r1h1y = r1h1y; pass.i1h1y = i1h1y; pass.r1h1z = 0.0; pass.i1h1z = 0.0; pass.r1h2x = r1hm2x; pass.i1h2x = i1hm2x; pass.r1h2y = r1hm2y; pass.i1h2y = i1hm2y; pass.r1h2z = 0.0; pass.i1h2z = 0.0; pass.r2h11x = r2h11x; pass.i2h11x = i2h11x; pass.r2h11y = r2h11y; pass.i2h11y = i2h11y; pass.r2h11z = 0.0; pass.i2h11z = 0.0; pass.h2f1f2x = r2h1m2x; pass.ih2f1f2x = i2h1m2x; pass.h2f1f2y = r2h1m2y; pass.ih2f1f2y = i2h1m2y; pass.h2f1f2z = 0.0; pass.ih2f1f2z = 0.0; temp = DFn2F12(&pass); itemp = DFi2F12(&pass); } *(ckt->CKTrhs + here->BJTbasePrimeNode) -= temp; *(ckt->CKTirhs + here->BJTbasePrimeNode) -= itemp; *(ckt->CKTrhs + here->BJTemitPrimeNode) += temp; *(ckt->CKTirhs + here->BJTemitPrimeNode) += itemp; /* ib term over */ /* loading ibb term */ if ( !((model->BJTminBaseResist == 0.0) && (model->BJTbaseResist == model->BJTminBaseResist))) { /* now x = vbe, y = vbc, z = vbb */ r1h1z = *(job->r1H1ptr + (here->BJTbaseNode)) - *(job->r1H1ptr + (here->BJTbasePrimeNode)); i1h1z = *(job->i1H1ptr + (here->BJTbaseNode)) - *(job->i1H1ptr + (here->BJTbasePrimeNode)); r1hm2z = *(job->r1H2ptr + (here->BJTbaseNode)) - *(job->r1H2ptr + (here->BJTbasePrimeNode)); i1hm2z = -(*(job->i1H2ptr + (here->BJTbaseNode)) - *(job->i1H2ptr + (here->BJTbasePrimeNode))); r2h11z = *(job->r2H11ptr + (here->BJTbaseNode)) - *(job->r2H11ptr + (here->BJTbasePrimeNode)); i2h11z = *(job->i2H11ptr + (here->BJTbaseNode)) - *(job->i2H11ptr + (here->BJTbasePrimeNode)); r2h1m2z = *(job->r2H1m2ptr + (here->BJTbaseNode)) - *(job->r2H1m2ptr + (here->BJTbasePrimeNode)); i2h1m2z = *(job->i2H1m2ptr + (here->BJTbaseNode)) - *(job->i2H1m2ptr + (here->BJTbasePrimeNode)); { pass.cxx = here->ibb_x2; pass.cyy = here->ibb_y2; pass.czz = here->ibb_z2; pass.cxy = here->ibb_xy; pass.cyz = here->ibb_yz; pass.cxz = here->ibb_xz; pass.cxxx = here->ibb_x3; pass.cyyy = here->ibb_y3; pass.czzz = here->ibb_z3; pass.cxxy = here->ibb_x2y; pass.cxxz = here->ibb_x2z; pass.cxyy = here->ibb_xy2; pass.cyyz = here->ibb_y2z; pass.cxzz = here->ibb_xz2; pass.cyzz = here->ibb_yz2; pass.cxyz = here->ibb_xyz; pass.r1h1x = r1h1x; pass.i1h1x = i1h1x; pass.r1h1y = r1h1y; pass.i1h1y = i1h1y; pass.r1h1z = r1h1z; pass.i1h1z = i1h1z; pass.r1h2x = r1hm2x; pass.i1h2x = i1hm2x; pass.r1h2y = r1hm2y; pass.i1h2y = i1hm2y; pass.r1h2z = r1hm2z; pass.i1h2z = i1hm2z; pass.r2h11x = r2h11x; pass.i2h11x = i2h11x; pass.r2h11y = r2h11y; pass.i2h11y = i2h11y; pass.r2h11z = r2h11z; pass.i2h11z = i2h11z; pass.h2f1f2x = r2h1m2x; pass.ih2f1f2x = i2h1m2x; pass.h2f1f2y = r2h1m2y; pass.ih2f1f2y = i2h1m2y; pass.h2f1f2z = r2h1m2z; pass.ih2f1f2z = i2h1m2z; temp = DFn2F12(&pass); itemp = DFi2F12(&pass); } *(ckt->CKTrhs + here->BJTbaseNode) -= temp; *(ckt->CKTirhs + here->BJTbaseNode) -= itemp; *(ckt->CKTrhs + here->BJTbasePrimeNode) += temp; *(ckt->CKTirhs + here->BJTbasePrimeNode) += itemp; } /* ibb term over */ /* loading qbe term */ /* x = vbe, y = vbc, z not used */ /* (have to multiply by j omega for charge storage * elements to get the current) */ { pass.cxx = here->qbe_x2; pass.cyy = here->qbe_y2; pass.czz = 0.0; pass.cxy = here->qbe_xy; pass.cyz = 0.0; pass.cxz = 0.0; pass.cxxx = here->qbe_x3; pass.cyyy = here->qbe_y3; pass.czzz = 0.0; pass.cxxy = here->qbe_x2y; pass.cxxz = 0.0; pass.cxyy = here->qbe_xy2; pass.cyyz = 0.0; pass.cxzz = 0.0; pass.cyzz = 0.0; pass.cxyz = 0.0; pass.r1h1x = r1h1x; pass.i1h1x = i1h1x; pass.r1h1y = r1h1y; pass.i1h1y = i1h1y; pass.r1h1z = 0.0; pass.i1h1z = 0.0; pass.r1h2x = r1hm2x; pass.i1h2x = i1hm2x; pass.r1h2y = r1hm2y; pass.i1h2y = i1hm2y; pass.r1h2z = 0.0; pass.i1h2z = 0.0; pass.r2h11x = r2h11x; pass.i2h11x = i2h11x; pass.r2h11y = r2h11y; pass.i2h11y = i2h11y; pass.r2h11z = 0.0; pass.i2h11z = 0.0; pass.h2f1f2x = r2h1m2x; pass.ih2f1f2x = i2h1m2x; pass.h2f1f2y = r2h1m2y; pass.ih2f1f2y = i2h1m2y; pass.h2f1f2z = 0.0; pass.ih2f1f2z = 0.0; temp = - ckt->CKTomega* DFi2F12(&pass); itemp = ckt->CKTomega* DFn2F12(&pass); } *(ckt->CKTrhs + here->BJTbasePrimeNode) -= temp; *(ckt->CKTirhs + here->BJTbasePrimeNode) -= itemp; *(ckt->CKTrhs + here->BJTemitPrimeNode) += temp; *(ckt->CKTirhs + here->BJTemitPrimeNode) += itemp; /* qbe term over */ /* loading qbx term */ /* z = vbx= vb - vcPrime */ r1h1z = r1h1z + r1h1y; i1h1z = i1h1z + i1h1y; r1hm2z = r1hm2z + r1hm2y; i1hm2z = i1hm2z + i1hm2y; r2h11z = r2h11z + r2h11y; i2h11z = i2h11z + i2h11y; r2h1m2z = r2h1m2z + r2h1m2y; i2h1m2z = i2h1m2z + i2h1m2y; #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds(); #endif temp = - ckt->CKTomega * D1i2F12(here->capbx2, here->capbx3, r1h1z, i1h1z, r1hm2z, i1hm2z, r2h11z, i2h11z, r2h1m2z, i2h1m2z); itemp = ckt->CKTomega * D1n2F12(here->capbx2, here->capbx3, r1h1z, i1h1z, r1hm2z, i1hm2z, r2h11z, i2h11z, r2h1m2z, i2h1m2z); #ifdef D_DBG_SMALLTIMES time = SPfrontEnd->IFseconds() - time; printf("Time for D1n2F12: %g seconds \n", time); #endif *(ckt->CKTrhs + here->BJTbaseNode) -= temp; *(ckt->CKTirhs + here->BJTbaseNode) -= itemp; *(ckt->CKTrhs + here->BJTcolPrimeNode) += temp; *(ckt->CKTirhs + here->BJTcolPrimeNode) += itemp; /* qbx term over */ /* loading qbc term */ temp = - ckt->CKTomega * D1i2F12(here->capbc2, here->capbc3, r1h1y, i1h1y, r1hm2y, i1hm2y, r2h11y, i2h11y, r2h1m2y, i2h1m2y); itemp = ckt->CKTomega * D1n2F12(here->capbc2, here->capbc3, r1h1y, i1h1y, r1hm2y, i1hm2y, r2h11y, i2h11y, r2h1m2y, i2h1m2y); *(ckt->CKTrhs + here->BJTbasePrimeNode) -= temp; *(ckt->CKTirhs + here->BJTbasePrimeNode) -= itemp; *(ckt->CKTrhs + here->BJTcolPrimeNode) += temp; *(ckt->CKTirhs + here->BJTcolPrimeNode) += itemp; /* qbc term over */ /* loading qsc term */ /* z = vsc */ r1h1z = *(job->r1H1ptr + (here->BJTsubstNode)) - *(job->r1H1ptr + (here->BJTcolPrimeNode)); i1h1z = *(job->i1H1ptr + (here->BJTsubstNode)) - *(job->i1H1ptr + (here->BJTcolPrimeNode)); r1hm2z = *(job->r1H2ptr + (here->BJTsubstNode)) - *(job->r1H2ptr + (here->BJTcolPrimeNode)); i1hm2z = -(*(job->i1H2ptr + (here->BJTsubstNode)) - *(job->i1H2ptr + (here->BJTcolPrimeNode))); r2h11z = *(job->r2H11ptr + (here->BJTsubstNode)) - *(job->r2H11ptr + (here->BJTcolPrimeNode)); i2h11z = *(job->i2H11ptr + (here->BJTsubstNode)) - *(job->i2H11ptr + (here->BJTcolPrimeNode)); r2h1m2z = *(job->r2H1m2ptr + (here->BJTsubstNode)) - *(job->r2H1m2ptr + (here->BJTcolPrimeNode)); i2h1m2z = *(job->i2H1m2ptr + (here->BJTsubstNode)) - *(job->i2H1m2ptr + (here->BJTcolPrimeNode)); temp = - ckt->CKTomega * D1i2F12(here->capsc2, here->capsc3, r1h1z, i1h1z, r1hm2z, i1hm2z, r2h11z, i2h11z, r2h1m2z, i2h1m2z); itemp = ckt->CKTomega * D1n2F12(here->capsc2, here->capsc3, r1h1z, i1h1z, r1hm2z, i1hm2z, r2h11z, i2h11z, r2h1m2z, i2h1m2z); *(ckt->CKTrhs + here->BJTsubstNode) -= temp; *(ckt->CKTirhs + here->BJTsubstNode) -= itemp; *(ckt->CKTrhs + here->BJTcolPrimeNode) += temp; *(ckt->CKTirhs + here->BJTcolPrimeNode) += itemp; /* qsc term over */ break; default: ; ; } } } return(OK); } else return(E_BADPARM); } tmpk8ny_4pz/src/spicelib/devices/bjt/bjtitf.h0000644000175000017500000000026513546075722021400 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_BJT #define DEV_BJT extern SPICEdev *get_bjt_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/bjt/bjtdefs.h0000644000175000017500000006076413546075722021551 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #ifndef BJT #define BJT #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" /* structures to describe Bipolar Junction Transistors */ /* indices to array of BJT noise sources */ enum { BJTRCNOIZ = 0, BJTRBNOIZ, BJT_RE_NOISE, BJTICNOIZ, BJTIBNOIZ, BJTFLNOIZ, BJTTOTNOIZ, /* finally, the number of noise sources */ BJTNSRCS }; /* data needed to describe a single instance */ typedef struct sBJTinstance { struct GENinstance gen; #define BJTmodPtr(inst) ((struct sBJTmodel *)((inst)->gen.GENmodPtr)) #define BJTnextInstance(inst) ((struct sBJTinstance *)((inst)->gen.GENnextInstance)) #define BJTname gen.GENname #define BJTstate gen.GENstate const int BJTcolNode; /* number of collector node of bjt */ const int BJTbaseNode; /* number of base node of bjt */ const int BJTemitNode; /* number of emitter node of bjt */ const int BJTsubstNode; /* number of substrate node of bjt */ int BJTcolPrimeNode; /* number of internal collector node of bjt */ int BJTbasePrimeNode; /* number of internal base node of bjt */ int BJTemitPrimeNode; /* number of internal emitter node of bjt */ int BJTsubstConNode; /* number of node which substrate is connected to */ /* Substrate connection is either base prime * * or collector prime depending on whether * * the device is VERTICAL or LATERAL */ double BJTarea; /* (emitter) area factor for the bjt */ double BJTareab; /* base area factor for the bjt */ double BJTareac; /* collector area factor for the bjt */ double BJTm; /* parallel multiplier */ double BJTicVBE; /* initial condition voltage B-E*/ double BJTicVCE; /* initial condition voltage C-E*/ double BJTtemp; /* instance temperature */ double BJTdtemp; /* instance delta temperature from circuit */ double BJTtSatCur; /* temperature adjusted saturation current */ double BJTtBetaF; /* temperature adjusted forward beta */ double BJTtBetaR; /* temperature adjusted reverse beta */ double BJTtBEleakCur; /* temperature adjusted B-E leakage current */ double BJTtBCleakCur; /* temperature adjusted B-C leakage current */ double BJTtBEcap; /* temperature adjusted B-E capacitance */ double BJTtBEpot; /* temperature adjusted B-E potential */ double BJTtBCcap; /* temperature adjusted B-C capacitance */ double BJTtBCpot; /* temperature adjusted B-C potential */ double BJTtSubcap; /* temperature adjusted Substrate capacitance */ double BJTtSubpot; /* temperature adjusted Substrate potential */ double BJTtDepCap; /* temperature adjusted join point in diode curve */ double BJTtf1; /* temperature adjusted polynomial coefficient */ double BJTtf4; /* temperature adjusted polynomial coefficient */ double BJTtf5; /* temperature adjusted polynomial coefficient */ double BJTtf2; /* temperature adjusted polynomial coefficient */ double BJTtf3; /* temperature adjusted polynomial coefficient */ double BJTtf6; /* temperature adjusted polynomial coefficient */ double BJTtf7; /* temperature adjusted polynomial coefficient */ double BJTtVcrit; /* temperature adjusted critical voltage */ double BJTtSubVcrit; /* temperature adjusted substrate critical voltage */ double BJTtSubSatCur; /* temperature adjusted subst. saturation current */ double BJTtcollectorConduct; /* temperature adjusted */ double BJTtemitterConduct; /* temperature adjusted */ double BJTtbaseResist; /* temperature adjusted */ double BJTtbaseCurrentHalfResist; /* temperature adjusted */ double BJTtminBaseResist; /* temperature adjusted */ double BJTtinvEarlyVoltF; /* temperature adjusted */ double BJTtinvEarlyVoltR; /* temperature adjusted */ double BJTtinvRollOffF; /* temperature adjusted */ double BJTtinvRollOffR; /* temperature adjusted */ double BJTtemissionCoeffF; /* temperature adjusted NF */ double BJTtemissionCoeffR; /* temperature adjusted NR */ double BJTtleakBEemissionCoeff; /* temperature adjusted NE */ double BJTtleakBCemissionCoeff; /* temperature adjusted NC */ double BJTttransitTimeHighCurrentF; /* temperature adjusted */ double BJTttransitTimeF; /* temperature adjusted */ double BJTttransitTimeR; /* temperature adjusted */ double BJTtjunctionExpBE; /* temperature adjusted MJE */ double BJTtjunctionExpBC; /* temperature adjusted MJC */ double BJTtjunctionExpSub; /* temperature adjusted MJS */ double BJTtemissionCoeffS; /* temperature adjusted NS */ double *BJTcolColPrimePtr; /* pointer to sparse matrix at * (collector,collector prime) */ double *BJTbaseBasePrimePtr; /* pointer to sparse matrix at * (base,base prime) */ double *BJTemitEmitPrimePtr; /* pointer to sparse matrix at * (emitter,emitter prime) */ double *BJTcolPrimeColPtr; /* pointer to sparse matrix at * (collector prime,collector) */ double *BJTcolPrimeBasePrimePtr; /* pointer to sparse matrix at * (collector prime,base prime) */ double *BJTcolPrimeEmitPrimePtr; /* pointer to sparse matrix at * (collector prime,emitter prime) */ double *BJTbasePrimeBasePtr; /* pointer to sparse matrix at * (base prime,base ) */ double *BJTbasePrimeColPrimePtr; /* pointer to sparse matrix at * (base prime,collector prime) */ double *BJTbasePrimeEmitPrimePtr; /* pointer to sparse matrix at * (base primt,emitter prime) */ double *BJTemitPrimeEmitPtr; /* pointer to sparse matrix at * (emitter prime,emitter) */ double *BJTemitPrimeColPrimePtr; /* pointer to sparse matrix at * (emitter prime,collector prime) */ double *BJTemitPrimeBasePrimePtr; /* pointer to sparse matrix at * (emitter prime,base prime) */ double *BJTcolColPtr; /* pointer to sparse matrix at * (collector,collector) */ double *BJTbaseBasePtr; /* pointer to sparse matrix at * (base,base) */ double *BJTemitEmitPtr; /* pointer to sparse matrix at * (emitter,emitter) */ double *BJTcolPrimeColPrimePtr; /* pointer to sparse matrix at * (collector prime,collector prime) */ double *BJTbasePrimeBasePrimePtr; /* pointer to sparse matrix at * (base prime,base prime) */ double *BJTemitPrimeEmitPrimePtr; /* pointer to sparse matrix at * (emitter prime,emitter prime) */ double *BJTsubstSubstPtr; /* pointer to sparse matrix at * (substrate,substrate) */ double *BJTsubstConSubstPtr; /* pointer to sparse matrix at * (Substrate connection, substrate) */ double *BJTsubstSubstConPtr; /* pointer to sparse matrix at * (substrate, Substrate connection) */ double *BJTsubstConSubstConPtr; /* pointer to sparse matrix at * (Substrate connection, Substrate connection) */ /* Substrate connection is either base prime * * or collector prime depending on whether * * the device is VERTICAL or LATERAL */ double *BJTbaseColPrimePtr; /* pointer to sparse matrix at * (base,collector prime) */ double *BJTcolPrimeBasePtr; /* pointer to sparse matrix at * (collector prime,base) */ unsigned BJToff :1; /* 'off' flag for bjt */ unsigned BJTtempGiven :1; /* temperature given for bjt instance*/ unsigned BJTdtempGiven :1; /* delta temperature given for bjt instance*/ unsigned BJTareaGiven :1; /* flag to indicate area was specified */ unsigned BJTareabGiven :1; /* flag to indicate base area was specified */ unsigned BJTareacGiven :1; /* flag to indicate collector area was specified */ unsigned BJTmGiven :1; /* flag to indicate m parameter specified */ unsigned BJTicVBEGiven :1; /* flag to indicate VBE init. cond. given */ unsigned BJTicVCEGiven :1; /* flag to indicate VCE init. cond. given */ unsigned BJTsenPertFlag :1; /* indictes whether the the parameter of the particular instance is to be perturbed */ int BJTsenParmNo; /* parameter # for sensitivity use; set equal to 0 if not a design parameter*/ double BJTcapbe; double BJTcapbc; double BJTcapsub; double BJTcapbx; double *BJTsens; #define BJTsenGpi BJTsens /* stores the perturbed values of gpi */ #define BJTsenGmu BJTsens+5 /* stores the perturbed values of gmu */ #define BJTsenGm BJTsens+10 /* stores the perturbed values of gm */ #define BJTsenGo BJTsens+15 /* stores the perturbed values of go */ #define BJTsenGx BJTsens+20 /* stores the perturbed values of gx */ #define BJTsenCpi BJTsens+25 /* stores the perturbed values of cpi */ #define BJTsenCmu BJTsens+30 /* stores the perturbed values of cmu */ #define BJTsenCbx BJTsens+35 /* stores the perturbed values of cbx */ #define BJTsenCmcb BJTsens+40 /* stores the perturbed values of cmcb */ #define BJTsenCsub BJTsens+45 /* stores the perturbed values of csub */ #define BJTdphibedp BJTsens+51 #define BJTdphibcdp BJTsens+52 #define BJTdphisubdp BJTsens+53 #define BJTdphibxdp BJTsens+54 /* * distortion stuff * the following naming convention is used: * x = vbe * y = vbc * z = vbb * w = vbed (vbe delayed for the linear gm delay) * therefore ic_xyz stands for the coefficient of the vbe*vbc*vbb * term in the multidimensional Taylor expansion for ic; and ibb_x2y * for the coeff. of the vbe*vbe*vbc term in the ibb expansion. */ #define BJTNDCOEFFS 65 #ifndef NODISTO double BJTdCoeffs[BJTNDCOEFFS]; #else /* NODISTO */ double *BJTdCoeffs; #endif /* NODISTO */ #ifndef CONFIG #define ic_x BJTdCoeffs[0] #define ic_y BJTdCoeffs[1] #define ic_xd BJTdCoeffs[2] #define ic_x2 BJTdCoeffs[3] #define ic_y2 BJTdCoeffs[4] #define ic_w2 BJTdCoeffs[5] #define ic_xy BJTdCoeffs[6] #define ic_yw BJTdCoeffs[7] #define ic_xw BJTdCoeffs[8] #define ic_x3 BJTdCoeffs[9] #define ic_y3 BJTdCoeffs[10] #define ic_w3 BJTdCoeffs[11] #define ic_x2w BJTdCoeffs[12] #define ic_x2y BJTdCoeffs[13] #define ic_y2w BJTdCoeffs[14] #define ic_xy2 BJTdCoeffs[15] #define ic_xw2 BJTdCoeffs[16] #define ic_yw2 BJTdCoeffs[17] #define ic_xyw BJTdCoeffs[18] #define ib_x BJTdCoeffs[19] #define ib_y BJTdCoeffs[20] #define ib_x2 BJTdCoeffs[21] #define ib_y2 BJTdCoeffs[22] #define ib_xy BJTdCoeffs[23] #define ib_x3 BJTdCoeffs[24] #define ib_y3 BJTdCoeffs[25] #define ib_x2y BJTdCoeffs[26] #define ib_xy2 BJTdCoeffs[27] #define ibb_x BJTdCoeffs[28] #define ibb_y BJTdCoeffs[29] #define ibb_z BJTdCoeffs[30] #define ibb_x2 BJTdCoeffs[31] #define ibb_y2 BJTdCoeffs[32] #define ibb_z2 BJTdCoeffs[33] #define ibb_xy BJTdCoeffs[34] #define ibb_yz BJTdCoeffs[35] #define ibb_xz BJTdCoeffs[36] #define ibb_x3 BJTdCoeffs[37] #define ibb_y3 BJTdCoeffs[38] #define ibb_z3 BJTdCoeffs[39] #define ibb_x2z BJTdCoeffs[40] #define ibb_x2y BJTdCoeffs[41] #define ibb_y2z BJTdCoeffs[42] #define ibb_xy2 BJTdCoeffs[43] #define ibb_xz2 BJTdCoeffs[44] #define ibb_yz2 BJTdCoeffs[45] #define ibb_xyz BJTdCoeffs[46] #define qbe_x BJTdCoeffs[47] #define qbe_y BJTdCoeffs[48] #define qbe_x2 BJTdCoeffs[49] #define qbe_y2 BJTdCoeffs[50] #define qbe_xy BJTdCoeffs[51] #define qbe_x3 BJTdCoeffs[52] #define qbe_y3 BJTdCoeffs[53] #define qbe_x2y BJTdCoeffs[54] #define qbe_xy2 BJTdCoeffs[55] #define capbc1 BJTdCoeffs[56] #define capbc2 BJTdCoeffs[57] #define capbc3 BJTdCoeffs[58] #define capbx1 BJTdCoeffs[59] #define capbx2 BJTdCoeffs[60] #define capbx3 BJTdCoeffs[61] #define capsc1 BJTdCoeffs[62] #define capsc2 BJTdCoeffs[63] #define capsc3 BJTdCoeffs[64] #endif #ifndef NONOISE double BJTnVar[NSTATVARS][BJTNSRCS]; #else /*NONOISE*/ double **BJTnVar; #endif /*NONOISE*/ /* the above to avoid allocating memory when it is not needed */ } BJTinstance ; /* entries in the state vector for bjt: */ #define BJTvbe BJTstate #define BJTvbc BJTstate+1 #define BJTcc BJTstate+2 #define BJTcb BJTstate+3 #define BJTgpi BJTstate+4 #define BJTgmu BJTstate+5 #define BJTgm BJTstate+6 #define BJTgo BJTstate+7 #define BJTqbe BJTstate+8 #define BJTcqbe BJTstate+9 #define BJTqbc BJTstate+10 #define BJTcqbc BJTstate+11 #define BJTqsub BJTstate+12 #define BJTcqsub BJTstate+13 #define BJTqbx BJTstate+14 #define BJTcqbx BJTstate+15 #define BJTgx BJTstate+16 #define BJTcexbc BJTstate+17 #define BJTgeqcb BJTstate+18 #define BJTgcsub BJTstate+19 #define BJTgeqbx BJTstate+20 #define BJTvsub BJTstate+21 #define BJTcdsub BJTstate+22 #define BJTgdsub BJTstate+23 #define BJTnumStates 24 #define BJTsensxpbe BJTstate+24 /* charge sensitivities and their derivatives. +25 for the derivatives - pointer to the beginning of the array */ #define BJTsensxpbc BJTstate+26 #define BJTsensxpsub BJTstate+28 #define BJTsensxpbx BJTstate+30 #define BJTnumSenStates 8 /* per model data */ typedef struct sBJTmodel { /* model structure for a bjt */ struct GENmodel gen; #define BJTmodType gen.GENmodType #define BJTnextModel(inst) ((struct sBJTmodel *)((inst)->gen.GENnextModel)) #define BJTinstances(inst) ((BJTinstance *)((inst)->gen.GENinstances)) #define BJTmodName gen.GENmodName int BJTtype; int BJTsubs; double BJTtnom; /* nominal temperature */ double BJTsatCur; /* input - don't use */ double BJTbetaF; /* input - don't use */ double BJTemissionCoeffF; double BJTearlyVoltF; double BJTrollOffF; double BJTleakBEcurrent; /* input - don't use */ double BJTc2; double BJTleakBEemissionCoeff; double BJTbetaR; /* input - don't use */ double BJTemissionCoeffR; double BJTearlyVoltR; double BJTrollOffR; double BJTleakBCcurrent; /* input - don't use */ double BJTc4; double BJTleakBCemissionCoeff; double BJTbaseResist; double BJTbaseCurrentHalfResist; double BJTminBaseResist; double BJTemitterResist; double BJTcollectorResist; double BJTdepletionCapBE; /* input - don't use */ double BJTpotentialBE; /* input - don't use */ double BJTjunctionExpBE; double BJTtransitTimeF; double BJTtransitTimeBiasCoeffF; double BJTtransitTimeFVBC; double BJTtransitTimeHighCurrentF; double BJTexcessPhase; double BJTdepletionCapBC; /* input - don't use */ double BJTpotentialBC; /* input - don't use */ double BJTjunctionExpBC; double BJTbaseFractionBCcap; double BJTtransitTimeR; double BJTcapSub; double BJTpotentialSubstrate; double BJTexponentialSubstrate; double BJTbetaExp; double BJTenergyGap; double BJTtempExpIS; double BJTdepletionCapCoeff; double BJTfNcoef; double BJTfNexp; double BJTsubSatCur; /* input - don't use */ double BJTemissionCoeffS; int BJTtlev; int BJTtlevc; double BJTtbf1; double BJTtbf2; double BJTtbr1; double BJTtbr2; double BJTtikf1; double BJTtikf2; double BJTtikr1; double BJTtikr2; double BJTtirb1; double BJTtirb2; double BJTtnc1; double BJTtnc2; double BJTtne1; double BJTtne2; double BJTtnf1; double BJTtnf2; double BJTtnr1; double BJTtnr2; double BJTtrb1; double BJTtrb2; double BJTtrc1; double BJTtrc2; double BJTtre1; double BJTtre2; double BJTtrm1; double BJTtrm2; double BJTtvaf1; double BJTtvaf2; double BJTtvar1; double BJTtvar2; double BJTctc; double BJTcte; double BJTcts; double BJTtvjc; double BJTtvje; double BJTtvjs; double BJTtitf1; double BJTtitf2; double BJTttf1; double BJTttf2; double BJTttr1; double BJTttr2; double BJTtmje1; double BJTtmje2; double BJTtmjc1; double BJTtmjc2; double BJTtmjs1; double BJTtmjs2; double BJTtns1; double BJTtns2; double BJTnkf; double BJTinvEarlyVoltF; /* inverse of BJTearlyVoltF */ double BJTinvEarlyVoltR; /* inverse of BJTearlyVoltR */ double BJTinvRollOffF; /* inverse of BJTrollOffF */ double BJTinvRollOffR; /* inverse of BJTrollOffR */ double BJTcollectorConduct; /* collector conductance */ double BJTemitterConduct; /* emitter conductance */ double BJTtransitTimeVBCFactor; /* */ double BJTexcessPhaseFactor; double BJTf2; double BJTf3; double BJTf6; double BJTf7; double BJTtis1; double BJTtis2; double BJTtise1; double BJTtise2; double BJTtisc1; double BJTtisc2; double BJTvbeMax; /* maximum voltage over B-E junction */ double BJTvbcMax; /* maximum voltage over B-C junction */ double BJTvceMax; /* maximum voltage over C-E branch */ unsigned BJTsubsGiven : 1; unsigned BJTtnomGiven : 1; unsigned BJTsatCurGiven : 1; unsigned BJTbetaFGiven : 1; unsigned BJTemissionCoeffFGiven : 1; unsigned BJTearlyVoltFGiven : 1; unsigned BJTrollOffFGiven : 1; unsigned BJTleakBEcurrentGiven : 1; unsigned BJTc2Given : 1; unsigned BJTleakBEemissionCoeffGiven : 1; unsigned BJTbetaRGiven : 1; unsigned BJTemissionCoeffRGiven : 1; unsigned BJTearlyVoltRGiven : 1; unsigned BJTrollOffRGiven : 1; unsigned BJTleakBCcurrentGiven : 1; unsigned BJTc4Given : 1; unsigned BJTleakBCemissionCoeffGiven : 1; unsigned BJTbaseResistGiven : 1; unsigned BJTbaseCurrentHalfResistGiven : 1; unsigned BJTminBaseResistGiven : 1; unsigned BJTemitterResistGiven : 1; unsigned BJTcollectorResistGiven : 1; unsigned BJTdepletionCapBEGiven : 1; unsigned BJTpotentialBEGiven : 1; unsigned BJTjunctionExpBEGiven : 1; unsigned BJTtransitTimeFGiven : 1; unsigned BJTtransitTimeBiasCoeffFGiven : 1; unsigned BJTtransitTimeFVBCGiven : 1; unsigned BJTtransitTimeHighCurrentFGiven : 1; unsigned BJTexcessPhaseGiven : 1; unsigned BJTdepletionCapBCGiven : 1; unsigned BJTpotentialBCGiven : 1; unsigned BJTjunctionExpBCGiven : 1; unsigned BJTbaseFractionBCcapGiven : 1; unsigned BJTtransitTimeRGiven : 1; unsigned BJTcapSubGiven : 1; unsigned BJTpotentialSubstrateGiven : 1; unsigned BJTexponentialSubstrateGiven : 1; unsigned BJTbetaExpGiven : 1; unsigned BJTenergyGapGiven : 1; unsigned BJTtempExpISGiven : 1; unsigned BJTdepletionCapCoeffGiven : 1; unsigned BJTfNcoefGiven : 1; unsigned BJTfNexpGiven :1; unsigned BJTsubSatCurGiven : 1; unsigned BJTemissionCoeffSGiven : 1; unsigned BJTtlevGiven : 1; unsigned BJTtlevcGiven : 1; unsigned BJTtbf1Given : 1; unsigned BJTtbf2Given : 1; unsigned BJTtbr1Given : 1; unsigned BJTtbr2Given : 1; unsigned BJTtikf1Given : 1; unsigned BJTtikf2Given : 1; unsigned BJTtikr1Given : 1; unsigned BJTtikr2Given : 1; unsigned BJTtirb1Given : 1; unsigned BJTtirb2Given : 1; unsigned BJTtnc1Given : 1; unsigned BJTtnc2Given : 1; unsigned BJTtne1Given : 1; unsigned BJTtne2Given : 1; unsigned BJTtnf1Given : 1; unsigned BJTtnf2Given : 1; unsigned BJTtnr1Given : 1; unsigned BJTtnr2Given : 1; unsigned BJTtrb1Given : 1; unsigned BJTtrb2Given : 1; unsigned BJTtrc1Given : 1; unsigned BJTtrc2Given : 1; unsigned BJTtre1Given : 1; unsigned BJTtre2Given : 1; unsigned BJTtrm1Given : 1; unsigned BJTtrm2Given : 1; unsigned BJTtvaf1Given : 1; unsigned BJTtvaf2Given : 1; unsigned BJTtvar1Given : 1; unsigned BJTtvar2Given : 1; unsigned BJTctcGiven : 1; unsigned BJTcteGiven : 1; unsigned BJTctsGiven : 1; unsigned BJTtvjcGiven : 1; unsigned BJTtvjeGiven : 1; unsigned BJTtvjsGiven : 1; unsigned BJTtitf1Given : 1; unsigned BJTtitf2Given : 1; unsigned BJTttf1Given : 1; unsigned BJTttf2Given : 1; unsigned BJTttr1Given : 1; unsigned BJTttr2Given : 1; unsigned BJTtmje1Given : 1; unsigned BJTtmje2Given : 1; unsigned BJTtmjc1Given : 1; unsigned BJTtmjc2Given : 1; unsigned BJTtmjs1Given : 1; unsigned BJTtmjs2Given : 1; unsigned BJTtns1Given : 1; unsigned BJTtns2Given : 1; unsigned BJTnkfGiven : 1; unsigned BJTtis1Given : 1; unsigned BJTtis2Given : 1; unsigned BJTtise1Given : 1; unsigned BJTtise2Given : 1; unsigned BJTtisc1Given : 1; unsigned BJTtisc2Given : 1; unsigned BJTvbeMaxGiven : 1; unsigned BJTvbcMaxGiven : 1; unsigned BJTvceMaxGiven : 1; } BJTmodel; #ifndef NPN #define NPN 1 #define PNP -1 #endif /*NPN*/ /* * BJT defaults to vertical for both NPN and * PNP devices. */ #ifndef VERTICAL #define VERTICAL 1 #define LATERAL -1 #endif /* VERTICAL */ /* device parameters */ enum { BJT_AREA = 1, BJT_OFF, BJT_IC_VBE, BJT_IC_VCE, BJT_IC, BJT_AREA_SENS, BJT_TEMP, BJT_DTEMP, BJT_M, BJT_AREAB, BJT_AREAC, }; /* model parameters */ enum { BJT_MOD_NPN = 101, BJT_MOD_PNP, BJT_MOD_IS, BJT_MOD_BF, BJT_MOD_NF, BJT_MOD_VAF, BJT_MOD_IKF, BJT_MOD_ISE, BJT_MOD_C2, BJT_MOD_NE, BJT_MOD_BR, BJT_MOD_NR, BJT_MOD_VAR, BJT_MOD_IKR, BJT_MOD_ISC, BJT_MOD_C4, BJT_MOD_NC, BJT_MOD_RB, BJT_MOD_IRB, BJT_MOD_RBM, BJT_MOD_RE, BJT_MOD_RC, BJT_MOD_CJE, BJT_MOD_VJE, BJT_MOD_MJE, BJT_MOD_TF, BJT_MOD_XTF, BJT_MOD_VTF, BJT_MOD_ITF, BJT_MOD_PTF, BJT_MOD_CJC, BJT_MOD_VJC, BJT_MOD_MJC, BJT_MOD_XCJC, BJT_MOD_TR, BJT_MOD_CJS, BJT_MOD_VJS, BJT_MOD_MJS, BJT_MOD_XTB, BJT_MOD_EG, BJT_MOD_XTI, BJT_MOD_FC, BJT_MOD_AF, BJT_MOD_KF, BJT_MOD_ISS, BJT_MOD_NS, BJT_MOD_TNOM, BJT_MOD_TLEV, BJT_MOD_TLEVC, BJT_MOD_TBF1, BJT_MOD_TBF2, BJT_MOD_TBR1, BJT_MOD_TBR2, BJT_MOD_TIKF1, BJT_MOD_TIKF2, BJT_MOD_TIKR1, BJT_MOD_TIKR2, BJT_MOD_TIRB1, BJT_MOD_TIRB2, BJT_MOD_TNC1, BJT_MOD_TNC2, BJT_MOD_TNE1, BJT_MOD_TNE2, BJT_MOD_TNF1, BJT_MOD_TNF2, BJT_MOD_TNR1, BJT_MOD_TNR2, BJT_MOD_TRB1, BJT_MOD_TRB2, BJT_MOD_TRC1, BJT_MOD_TRC2, BJT_MOD_TRE1, BJT_MOD_TRE2, BJT_MOD_TRM1, BJT_MOD_TRM2, BJT_MOD_TVAF1, BJT_MOD_TVAF2, BJT_MOD_TVAR1, BJT_MOD_TVAR2, BJT_MOD_CTC, BJT_MOD_CTE, BJT_MOD_CTS, BJT_MOD_TVJC, BJT_MOD_TVJE, BJT_MOD_TVJS, BJT_MOD_TITF1, BJT_MOD_TITF2, BJT_MOD_TTF1, BJT_MOD_TTF2, BJT_MOD_TTR1, BJT_MOD_TTR2, BJT_MOD_TMJE1, BJT_MOD_TMJE2, BJT_MOD_TMJC1, BJT_MOD_TMJC2, BJT_MOD_TMJS1, BJT_MOD_TMJS2, BJT_MOD_TNS1, BJT_MOD_TNS2, BJT_MOD_SUBS, BJT_MOD_NKF, BJT_MOD_TIS1, BJT_MOD_TIS2, BJT_MOD_TISE1, BJT_MOD_TISE2, BJT_MOD_TISC1, BJT_MOD_TISC2, BJT_MOD_VBE_MAX, BJT_MOD_VBC_MAX, BJT_MOD_VCE_MAX, }; /* device questions */ enum { BJT_QUEST_FT = 211, BJT_QUEST_COLNODE, BJT_QUEST_BASENODE, BJT_QUEST_EMITNODE, BJT_QUEST_SUBSTNODE, BJT_QUEST_COLPRIMENODE, BJT_QUEST_BASEPRIMENODE, BJT_QUEST_EMITPRIMENODE, BJT_QUEST_VBE, BJT_QUEST_VBC, BJT_QUEST_CC, BJT_QUEST_CB, BJT_QUEST_GPI, BJT_QUEST_GMU, BJT_QUEST_GM, BJT_QUEST_GO, BJT_QUEST_QBE, BJT_QUEST_CQBE, BJT_QUEST_QBC, BJT_QUEST_CQBC, BJT_QUEST_QSUB, BJT_QUEST_CQSUB, BJT_QUEST_QBX, BJT_QUEST_CQBX, BJT_QUEST_GX, BJT_QUEST_CEXBC, BJT_QUEST_GEQCB, BJT_QUEST_GCSUB, BJT_QUEST_GEQBX, BJT_QUEST_SENS_REAL, BJT_QUEST_SENS_IMAG, BJT_QUEST_SENS_MAG, BJT_QUEST_SENS_PH, BJT_QUEST_SENS_CPLX, BJT_QUEST_SENS_DC, BJT_QUEST_CE, BJT_QUEST_CS, BJT_QUEST_POWER, BJT_QUEST_CPI, BJT_QUEST_CMU, BJT_QUEST_CBX, BJT_QUEST_CSUB, BJT_QUEST_GDSUB, }; /* model questions */ enum { BJT_MOD_INVEARLYF = 301, BJT_MOD_INVEARLYR, BJT_MOD_INVROLLOFFF, BJT_MOD_INVROLLOFFR, BJT_MOD_COLCONDUCT, BJT_MOD_EMITTERCONDUCT, BJT_MOD_TRANSVBCFACT, BJT_MOD_EXCESSPHASEFACTOR, BJT_MOD_TYPE, BJT_MOD_QUEST_SUBS, }; #include "bjtext.h" #endif /*BJT*/ tmpk8ny_4pz/src/spicelib/devices/bjt/bjttrunc.c0000644000175000017500000000146613546075722021750 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* * This routine performs truncation error calculations for * BJTs in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bjtdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BJTtrunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { BJTmodel *model = (BJTmodel*)inModel; BJTinstance *here; for( ; model != NULL; model = BJTnextModel(model)) { for(here=BJTinstances(model);here!=NULL;here = BJTnextInstance(here)){ CKTterr(here->BJTqbe,ckt,timeStep); CKTterr(here->BJTqbc,ckt,timeStep); CKTterr(here->BJTqsub,ckt,timeStep); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bjt/bjtinit.c0000644000175000017500000000300613546075722021550 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "bjtitf.h" #include "bjtext.h" #include "bjtinit.h" SPICEdev BJTinfo = { .DEVpublic = { .name = "BJT", .description = "Bipolar Junction Transistor", .terms = &BJTnSize, .numNames = &BJTnSize, .termNames = BJTnames, .numInstanceParms = &BJTpTSize, .instanceParms = BJTpTable, .numModelParms = &BJTmPTSize, .modelParms = BJTmPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = BJTparam, .DEVmodParam = BJTmParam, .DEVload = BJTload, .DEVsetup = BJTsetup, .DEVunsetup = BJTunsetup, .DEVpzSetup = BJTsetup, .DEVtemperature = BJTtemp, .DEVtrunc = BJTtrunc, .DEVfindBranch = NULL, .DEVacLoad = BJTacLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = BJTdelete, .DEVsetic = BJTgetic, .DEVask = BJTask, .DEVmodAsk = BJTmAsk, .DEVpzLoad = BJTpzLoad, .DEVconvTest = BJTconvTest, .DEVsenSetup = BJTsSetup, .DEVsenLoad = BJTsLoad, .DEVsenUpdate = BJTsUpdate, .DEVsenAcLoad = BJTsAcLoad, .DEVsenPrint = BJTsPrint, .DEVsenTrunc = NULL, .DEVdisto = BJTdisto, .DEVnoise = BJTnoise, .DEVsoaCheck = BJTsoaCheck, .DEVinstSize = &BJTiSize, .DEVmodSize = &BJTmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_bjt_info(void) { return &BJTinfo; } tmpk8ny_4pz/src/spicelib/devices/bjt/bjtpzld.c0000644000175000017500000001132513546075722021561 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "bjtdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BJTpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { BJTmodel *model = (BJTmodel*)inModel; BJTinstance *here; double gcpr; double gepr; double gpi; double gmu; double go; double xgm; double gm; double gx; double xcpi; double xcmu; double xcbx; double xcsub; double xcmcb; double m; for( ; model != NULL; model = BJTnextModel(model)) { for( here = BJTinstances(model); here!= NULL; here = BJTnextInstance(here)) { m = here->BJTm; gcpr=here->BJTtcollectorConduct * here->BJTarea; gepr=here->BJTtemitterConduct * here->BJTarea; gpi= *(ckt->CKTstate0 + here->BJTgpi); gmu= *(ckt->CKTstate0 + here->BJTgmu); gm= *(ckt->CKTstate0 + here->BJTgm); go= *(ckt->CKTstate0 + here->BJTgo); xgm=0; gx= *(ckt->CKTstate0 + here->BJTgx); xcpi= *(ckt->CKTstate0 + here->BJTcqbe); xcmu= *(ckt->CKTstate0 + here->BJTcqbc); xcbx= *(ckt->CKTstate0 + here->BJTcqbx); xcsub= *(ckt->CKTstate0 + here->BJTcqsub); xcmcb= *(ckt->CKTstate0 + here->BJTcexbc); *(here->BJTcolColPtr) += m * (gcpr); *(here->BJTbaseBasePtr) += m * ((gx) + (xcbx) * (s->real)); *(here->BJTbaseBasePtr + 1) += m * ((xcbx) * (s->imag)); *(here->BJTemitEmitPtr) += m * (gepr); *(here->BJTcolPrimeColPrimePtr) += m * ((gmu+go+gcpr) + (xcmu+xcbx) * (s->real)); *(here->BJTcolPrimeColPrimePtr + 1) += m * ((xcmu+xcbx) * (s->imag)); *(here->BJTsubstConSubstConPtr) += m * (xcsub)* (s->real); *(here->BJTsubstConSubstConPtr + 1) += m * (xcsub)* (s->imag); *(here->BJTbasePrimeBasePrimePtr) += m * ((gx+gpi+gmu) + (xcpi+xcmu+xcmcb) * (s->real)); *(here->BJTbasePrimeBasePrimePtr + 1) += m * ((xcpi+xcmu+xcmcb) * (s->imag)); *(here->BJTemitPrimeEmitPrimePtr) += m * ((gpi+gepr+gm+go) + (xcpi+xgm) * (s->real)); *(here->BJTemitPrimeEmitPrimePtr + 1) += m * ((xcpi+xgm) * (s->imag)); *(here->BJTcolColPrimePtr) += m * (-gcpr); *(here->BJTbaseBasePrimePtr) += m * (-gx); *(here->BJTemitEmitPrimePtr) += m * (-gepr); *(here->BJTcolPrimeColPtr) += m * (-gcpr); *(here->BJTcolPrimeBasePrimePtr) += m * ((-gmu+gm) + (-xcmu+xgm) * (s->real)); *(here->BJTcolPrimeBasePrimePtr + 1) += m * ((-xcmu+xgm) * (s->imag)); *(here->BJTcolPrimeEmitPrimePtr) += m * ((-gm-go) + (-xgm) * (s->real)); *(here->BJTcolPrimeEmitPrimePtr + 1) += m * ((-xgm) * (s->imag)); *(here->BJTbasePrimeBasePtr) += m * (-gx); *(here->BJTbasePrimeColPrimePtr) += m * ((-gmu) + (-xcmu-xcmcb) * (s->real)); *(here->BJTbasePrimeColPrimePtr + 1) += m * ((-xcmu-xcmcb) * (s->imag)); *(here->BJTbasePrimeEmitPrimePtr) += m * ((-gpi) + (-xcpi) * (s->real)); *(here->BJTbasePrimeEmitPrimePtr + 1) += m * ((-xcpi) * (s->imag)); *(here->BJTemitPrimeEmitPtr) += m * (-gepr); *(here->BJTemitPrimeColPrimePtr) += m * ((-go) + (xcmcb) * (s->real)); *(here->BJTemitPrimeColPrimePtr + 1) += m * ((xcmcb) * (s->imag)); *(here->BJTemitPrimeBasePrimePtr) += m * ((-gpi-gm) + (-xcpi-xgm-xcmcb) * (s->real)); *(here->BJTemitPrimeBasePrimePtr + 1) += m * ((-xcpi-xgm-xcmcb) * (s->imag)); *(here->BJTsubstSubstPtr) += m * ((xcsub) * (s->real)); *(here->BJTsubstSubstPtr + 1) += m * ((xcsub) * (s->imag)); *(here->BJTsubstConSubstPtr) += m * ((-xcsub) * (s->real)); *(here->BJTsubstConSubstPtr + 1) += m * ((-xcsub) * (s->imag)); *(here->BJTsubstSubstConPtr) += m * ((-xcsub) * (s->real)); *(here->BJTsubstSubstConPtr + 1) += m * ((-xcsub) * (s->imag)); *(here->BJTbaseColPrimePtr) += m * ((-xcbx) * (s->real)); *(here->BJTbaseColPrimePtr + 1) += m * ((-xcbx) * (s->imag)); *(here->BJTcolPrimeBasePtr) += m * ((-xcbx) * (s->real)); *(here->BJTcolPrimeBasePtr + 1) += m * ((-xcbx) * (s->imag)); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bjt/bjtext.h0000644000175000017500000000251113546075722021412 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #ifndef __BJTEXT_H #define __BJTEXT_H extern int BJTacLoad(GENmodel *,CKTcircuit*); extern int BJTask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*); extern int BJTconvTest(GENmodel*,CKTcircuit*); extern int BJTdelete(GENinstance*); extern int BJTgetic(GENmodel*,CKTcircuit*); extern int BJTload(GENmodel*,CKTcircuit*); extern int BJTmAsk(CKTcircuit*,GENmodel*,int,IFvalue*); extern int BJTmParam(int,IFvalue*,GENmodel*); extern int BJTparam(int,IFvalue*,GENinstance*,IFvalue*); extern int BJTpzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int BJTsAcLoad(GENmodel*,CKTcircuit*); extern int BJTsLoad(GENmodel*,CKTcircuit*); extern void BJTsPrint(GENmodel*,CKTcircuit*); extern int BJTsSetup(SENstruct*,GENmodel*); extern int BJTsUpdate(GENmodel*,CKTcircuit*); extern int BJTsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int BJTunsetup(GENmodel*,CKTcircuit*); extern int BJTtemp(GENmodel*,CKTcircuit*); extern int BJTtrunc(GENmodel*,CKTcircuit*,double*); extern int BJTdisto(int,GENmodel*,CKTcircuit*); extern int BJTnoise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int BJTdSetup(GENmodel*, register CKTcircuit*); extern int BJTsoaCheck(CKTcircuit *, GENmodel *); #endif tmpk8ny_4pz/src/spicelib/devices/bjt/bjtsetup.c0000644000175000017500000004136513546075722021757 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* * This routine should only be called when circuit topology * changes, since its computations do not depend on most * device or model parameters, only on topology (as * affected by emitter, collector, and base resistances) */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "bjtdefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/ifsim.h" #include "ngspice/suffix.h" int BJTsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* load the BJT structure with those pointers needed later * for fast matrix loading */ { BJTmodel *model = (BJTmodel*)inModel; BJTinstance *here; int error; CKTnode *tmp; /* loop through all the diode models */ for( ; model != NULL; model = BJTnextModel(model)) { if(model->BJTtype != NPN && model->BJTtype != PNP) { model->BJTtype = NPN; } if(!model->BJTsubsGiven || (model->BJTsubs != VERTICAL && model->BJTsubs != LATERAL)) { if (model->BJTtype == NPN) model->BJTsubs = VERTICAL; /* Vertical for NPN */ else model->BJTsubs = LATERAL; /* Lateral for PNP */ } if(!model->BJTsatCurGiven) { model->BJTsatCur = 1e-16; } if(!model->BJTbetaFGiven) { model->BJTbetaF = 100; } if(!model->BJTemissionCoeffFGiven) { model->BJTemissionCoeffF = 1; } if(!model->BJTleakBEemissionCoeffGiven) { model->BJTleakBEemissionCoeff = 1.5; } if(!model->BJTbetaRGiven) { model->BJTbetaR = 1; } if(!model->BJTemissionCoeffRGiven) { model->BJTemissionCoeffR = 1; } if(!model->BJTleakBCemissionCoeffGiven) { model->BJTleakBCemissionCoeff = 2; } if(!model->BJTbaseResistGiven) { model->BJTbaseResist = 0; } if(!model->BJTemitterResistGiven) { model->BJTemitterResist = 0; } if(!model->BJTcollectorResistGiven) { model->BJTcollectorResist = 0; } if(!model->BJTdepletionCapBEGiven) { model->BJTdepletionCapBE = 0; } if(!model->BJTpotentialBEGiven) { model->BJTpotentialBE = .75; } if(!model->BJTjunctionExpBEGiven) { model->BJTjunctionExpBE = .33; } if(!model->BJTtransitTimeFGiven) { model->BJTtransitTimeF = 0; } if(!model->BJTtransitTimeBiasCoeffFGiven) { model->BJTtransitTimeBiasCoeffF = 0; } if(!model->BJTtransitTimeHighCurrentFGiven) { model->BJTtransitTimeHighCurrentF = 0; } if(!model->BJTexcessPhaseGiven) { model->BJTexcessPhase = 0; } if(!model->BJTdepletionCapBCGiven) { model->BJTdepletionCapBC = 0; } if(!model->BJTpotentialBCGiven) { model->BJTpotentialBC = .75; } if(!model->BJTjunctionExpBCGiven) { model->BJTjunctionExpBC = .33; } if(!model->BJTbaseFractionBCcapGiven) { model->BJTbaseFractionBCcap = 1; } if(!model->BJTtransitTimeRGiven) { model->BJTtransitTimeR = 0; } if(!model->BJTcapSubGiven) { model->BJTcapSub = 0; } if(!model->BJTpotentialSubstrateGiven) { model->BJTpotentialSubstrate = .75; } if(!model->BJTexponentialSubstrateGiven) { model->BJTexponentialSubstrate = 0; } if(!model->BJTbetaExpGiven) { model->BJTbetaExp = 0; } if(!model->BJTenergyGapGiven) { model->BJTenergyGap = 1.11; } if(!model->BJTtempExpISGiven) { model->BJTtempExpIS = 3; } if(!model->BJTfNcoefGiven) { model->BJTfNcoef = 0; } if(!model->BJTfNexpGiven) { model->BJTfNexp = 1; } if(!model->BJTsubSatCurGiven) { model->BJTsubSatCur = 0.0; } if(!model->BJTemissionCoeffSGiven) { model->BJTemissionCoeffS = 1.0; } if(!model->BJTtlevGiven) { model->BJTtlev = 0; } if(!model->BJTtlevcGiven) { model->BJTtlevc = 0; } if(!model->BJTtbf1Given) { model->BJTtbf1 = 0.0; } if(!model->BJTtbf2Given) { model->BJTtbf2 = 0.0; } if(!model->BJTtbr1Given) { model->BJTtbr1 = 0.0; } if(!model->BJTtbr2Given) { model->BJTtbr2 = 0.0; } if(!model->BJTtikf1Given) { model->BJTtikf1 = 0.0; } if(!model->BJTtikf2Given) { model->BJTtikf2 = 0.0; } if(!model->BJTtikr1Given) { model->BJTtikr1 = 0.0; } if(!model->BJTtikr2Given) { model->BJTtikr2 = 0.0; } if(!model->BJTtirb1Given) { model->BJTtirb1 = 0.0; } if(!model->BJTtirb2Given) { model->BJTtirb2 = 0.0; } if(!model->BJTtnc1Given) { model->BJTtnc1 = 0.0; } if(!model->BJTtnc2Given) { model->BJTtnc2 = 0.0; } if(!model->BJTtne1Given) { model->BJTtne1 = 0.0; } if(!model->BJTtne2Given) { model->BJTtne2 = 0.0; } if(!model->BJTtnf1Given) { model->BJTtnf1 = 0.0; } if(!model->BJTtnf2Given) { model->BJTtnf2 = 0.0; } if(!model->BJTtnr1Given) { model->BJTtnr1 = 0.0; } if(!model->BJTtnr2Given) { model->BJTtnr2 = 0.0; } if(!model->BJTtrb1Given) { model->BJTtrb1 = 0.0; } if(!model->BJTtrb2Given) { model->BJTtrb2 = 0.0; } if(!model->BJTtrc1Given) { model->BJTtrc1 = 0.0; } if(!model->BJTtrc2Given) { model->BJTtrc2 = 0.0; } if(!model->BJTtre1Given) { model->BJTtre1 = 0.0; } if(!model->BJTtre2Given) { model->BJTtre2 = 0.0; } if(!model->BJTtrm1Given) { model->BJTtrm1 = 0.0; } if(!model->BJTtrm2Given) { model->BJTtrm2 = 0.0; } if(!model->BJTtvaf1Given) { model->BJTtvaf1 = 0.0; } if(!model->BJTtvaf2Given) { model->BJTtvaf2 = 0.0; } if(!model->BJTtvar1Given) { model->BJTtvar1 = 0.0; } if(!model->BJTtvar2Given) { model->BJTtvar2 = 0.0; } if(!model->BJTctcGiven) { model->BJTctc = 0.0; } if(!model->BJTcteGiven) { model->BJTcte = 0.0; } if(!model->BJTctsGiven) { model->BJTcts = 0.0; } if(!model->BJTtvjeGiven) { model->BJTtvje = 0.0; } if(!model->BJTtvjcGiven) { model->BJTtvjc = 0.0; } if(!model->BJTtvjsGiven) { model->BJTtvjs = 0.0; } if(!model->BJTtitf1Given) { model->BJTtitf1 = 0.0; } if(!model->BJTtitf2Given) { model->BJTtitf2 = 0.0; } if(!model->BJTttf1Given) { model->BJTttf1 = 0.0; } if(!model->BJTttf2Given) { model->BJTttf2 = 0.0; } if(!model->BJTttr1Given) { model->BJTttr1 = 0.0; } if(!model->BJTttr2Given) { model->BJTttr2 = 0.0; } if(!model->BJTtmje1Given) { model->BJTtmje1 = 0.0; } if(!model->BJTtmje2Given) { model->BJTtmje2 = 0.0; } if(!model->BJTtmjc1Given) { model->BJTtmjc1 = 0.0; } if(!model->BJTtmjc2Given) { model->BJTtmjc2 = 0.0; } if(!model->BJTtmjs1Given) { model->BJTtmjs1 = 0.0; } if(!model->BJTtmjs2Given) { model->BJTtmjs2 = 0.0; } if(!model->BJTtns1Given) { model->BJTtns1 = 0.0; } if(!model->BJTtns2Given) { model->BJTtns2 = 0.0; } if(!model->BJTnkfGiven) { model->BJTnkf = 0.5; } else { if (model->BJTnkf > 1.0) { printf("Warning: NKF has been set to its maximum value: 1.0\n"); model->BJTnkf = 1.0; } } if(!model->BJTtis1Given) { model->BJTtis1 = 0.0; } if(!model->BJTtis2Given) { model->BJTtis2 = 0.0; } if(!model->BJTtise1Given) { model->BJTtise1 = 0.0; } if(!model->BJTtise2Given) { model->BJTtise2 = 0.0; } if(!model->BJTtisc1Given) { model->BJTtisc1 = 0.0; } if(!model->BJTtisc2Given) { model->BJTtisc2 = 0.0; } if(!model->BJTvbeMaxGiven) { model->BJTvbeMax = 1e99; } if(!model->BJTvbcMaxGiven) { model->BJTvbcMax = 1e99; } if(!model->BJTvceMaxGiven) { model->BJTvceMax = 1e99; } /* * COMPATABILITY WARNING! * special note: for backward compatability to much older models, spice 2G * implemented a special case which checked if B-E leakage saturation * current was >1, then it was instead a the B-E leakage saturation current * divided by IS, and multiplied it by IS at this point. This was not * handled correctly in the 2G code, and there is some question on its * reasonability, since it is also undocumented, so it has been left out * here. It could easily be added with 1 line. (The same applies to the B-C * leakage saturation current). TQ 6/29/84 */ /* loop through all the instances of the model */ for (here = BJTinstances(model); here != NULL ; here=BJTnextInstance(here)) { CKTnode *tmpNode; IFuid tmpName; if(!here->BJTareaGiven) { here->BJTarea = 1.0; } if(!here->BJTareabGiven) { here->BJTareab = here->BJTarea; } if(!here->BJTareacGiven) { here->BJTareac = here->BJTarea; } if(!here->BJTmGiven) { here->BJTm = 1.0; } here->BJTstate = *states; *states += BJTnumStates; if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN) ){ *states += BJTnumSenStates * (ckt->CKTsenInfo->SENparms); } if(model->BJTcollectorResist == 0) { here->BJTcolPrimeNode = here->BJTcolNode; } else if(here->BJTcolPrimeNode == 0) { error = CKTmkVolt(ckt,&tmp,here->BJTname,"collector"); if(error) return(error); here->BJTcolPrimeNode = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; /* fprintf(stderr, "Nodeset copied from %s\n", tmpName); fprintf(stderr, " to %s\n", tmp->name); fprintf(stderr, " value %g\n", tmp->nodeset);*/ } } } } if(model->BJTbaseResist == 0) { here->BJTbasePrimeNode = here->BJTbaseNode; } else if(here->BJTbasePrimeNode == 0){ error = CKTmkVolt(ckt,&tmp,here->BJTname, "base"); if(error) return(error); here->BJTbasePrimeNode = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,2,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; /* fprintf(stderr, "Nodeset copied from %s\n", tmpName); fprintf(stderr, " to %s\n", tmp->name); fprintf(stderr, " value %g\n", tmp->nodeset);*/ } } } } if(model->BJTemitterResist == 0) { here->BJTemitPrimeNode = here->BJTemitNode; } else if(here->BJTemitPrimeNode == 0) { error = CKTmkVolt(ckt,&tmp,here->BJTname, "emitter"); if(error) return(error); here->BJTemitPrimeNode = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; /* fprintf(stderr, "Nodeset copied from %s\n", tmpName); fprintf(stderr, " to %s\n", tmp->name); fprintf(stderr, " value %g\n", tmp->nodeset);*/ } } } } /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(BJTcolColPrimePtr,BJTcolNode,BJTcolPrimeNode); TSTALLOC(BJTbaseBasePrimePtr,BJTbaseNode,BJTbasePrimeNode); TSTALLOC(BJTemitEmitPrimePtr,BJTemitNode,BJTemitPrimeNode); TSTALLOC(BJTcolPrimeColPtr,BJTcolPrimeNode,BJTcolNode); TSTALLOC(BJTcolPrimeBasePrimePtr,BJTcolPrimeNode,BJTbasePrimeNode); TSTALLOC(BJTcolPrimeEmitPrimePtr,BJTcolPrimeNode,BJTemitPrimeNode); TSTALLOC(BJTbasePrimeBasePtr,BJTbasePrimeNode,BJTbaseNode); TSTALLOC(BJTbasePrimeColPrimePtr,BJTbasePrimeNode,BJTcolPrimeNode); TSTALLOC(BJTbasePrimeEmitPrimePtr,BJTbasePrimeNode,BJTemitPrimeNode); TSTALLOC(BJTemitPrimeEmitPtr,BJTemitPrimeNode,BJTemitNode); TSTALLOC(BJTemitPrimeColPrimePtr,BJTemitPrimeNode,BJTcolPrimeNode); TSTALLOC(BJTemitPrimeBasePrimePtr,BJTemitPrimeNode,BJTbasePrimeNode); TSTALLOC(BJTcolColPtr,BJTcolNode,BJTcolNode); TSTALLOC(BJTbaseBasePtr,BJTbaseNode,BJTbaseNode); TSTALLOC(BJTemitEmitPtr,BJTemitNode,BJTemitNode); TSTALLOC(BJTcolPrimeColPrimePtr,BJTcolPrimeNode,BJTcolPrimeNode); TSTALLOC(BJTbasePrimeBasePrimePtr,BJTbasePrimeNode,BJTbasePrimeNode); TSTALLOC(BJTemitPrimeEmitPrimePtr,BJTemitPrimeNode,BJTemitPrimeNode); TSTALLOC(BJTsubstSubstPtr,BJTsubstNode,BJTsubstNode); if (model -> BJTsubs == LATERAL) { here -> BJTsubstConNode = here -> BJTbasePrimeNode; here -> BJTsubstConSubstConPtr = here -> BJTbasePrimeBasePrimePtr; } else { here -> BJTsubstConNode = here -> BJTcolPrimeNode; here -> BJTsubstConSubstConPtr = here -> BJTcolPrimeColPrimePtr; } TSTALLOC(BJTsubstConSubstPtr,BJTsubstConNode,BJTsubstNode); TSTALLOC(BJTsubstSubstConPtr,BJTsubstNode,BJTsubstConNode); TSTALLOC(BJTbaseColPrimePtr,BJTbaseNode,BJTcolPrimeNode); TSTALLOC(BJTcolPrimeBasePtr,BJTcolPrimeNode,BJTbaseNode); } } return(OK); } int BJTunsetup( GENmodel *inModel, CKTcircuit *ckt) { BJTmodel *model; BJTinstance *here; for (model = (BJTmodel *)inModel; model != NULL; model = BJTnextModel(model)) { for (here = BJTinstances(model); here != NULL; here=BJTnextInstance(here)) { if (here->BJTemitPrimeNode > 0 && here->BJTemitPrimeNode != here->BJTemitNode) CKTdltNNum(ckt, here->BJTemitPrimeNode); here->BJTemitPrimeNode = 0; if (here->BJTbasePrimeNode > 0 && here->BJTbasePrimeNode != here->BJTbaseNode) CKTdltNNum(ckt, here->BJTbasePrimeNode); here->BJTbasePrimeNode = 0; if (here->BJTcolPrimeNode > 0 && here->BJTcolPrimeNode != here->BJTcolNode) CKTdltNNum(ckt, here->BJTcolPrimeNode); here->BJTcolPrimeNode = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/bjt/bjtsload.c0000644000175000017500000002653313546075722021721 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ /* actually load the current sensitivity * information into the array previously provided */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "bjtdefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/ifsim.h" #include "ngspice/suffix.h" int BJTsLoad(GENmodel *inModel, CKTcircuit *ckt) { BJTmodel *model = (BJTmodel*)inModel; BJTinstance *here; double SaveState0[27]; int i; int iparmno; int error; double A0; double DELA; double Apert; double DELAinv; double cb0; double cb; double cc0; double cc; double cx0; double ccpr0; double cepr0; double DcbDp; double DccDp; double DceDp; double DccprDp; double DceprDp; double DcxDp; double DbprmDp; double DcprmDp; double DeprmDp; double gx; double gx0; double tag0; double tag1; double qbe0; double qbe; double qbc0; double qbc; double qcs0; double qcs; double qbx0; double qbx; double DqbeDp = 0.0; double DqbcDp = 0.0; double DqcsDp = 0.0; double DqbxDp = 0.0; double Osxpbe; double Osxpbc; double Osxpcs; double Osxpbx; SENstruct *info; tag0 = ckt->CKTag[0]; tag1 = ckt->CKTag[1]; if(ckt->CKTorder == 1){ tag1 = 0; } #ifdef SENSDEBUG printf("BJTsenload \n"); printf("CKTtime = %.5e\n",ckt->CKTtime); printf("CKTorder = %.5e\n",ckt->CKTorder); printf("tag0=%.7e,tag1=%.7e\n",tag0,tag1); #endif /* SENSDEBUG */ info = ckt->CKTsenInfo; info->SENstatus = PERTURBATION; /* loop through all the models */ for( ; model != NULL; model = BJTnextModel(model)) { /* loop through all the instances of the model */ for (here = BJTinstances(model); here != NULL ; here=BJTnextInstance(here)) { #ifdef SENSDEBUG printf("base = %d , baseprm = %d ,col = %d, colprm = %d\n", here->BJTbaseNode ,here->BJTbasePrimeNode, here->BJTcolNode,here->BJTcolPrimeNode); printf("emit = %d , emitprm = %d ,subst = %d, senparmno = %d\n", here->BJTemitNode ,here->BJTemitPrimeNode, here->BJTsubstNode,here->BJTsenParmNo); #endif /* SENSDEBUG */ /* save the unperturbed values in the state vector */ for(i=0; i <= 20; i++){ *(SaveState0 + i) = *(ckt->CKTstate0 + here->BJTstate + i); } *(SaveState0 + 21) = *(ckt->CKTstate1 + here->BJTcexbc); *(SaveState0 + 22) = *(ckt->CKTstate2 + here->BJTcexbc); *(SaveState0 + 23) = here->BJTcapbe; *(SaveState0 + 24) = here->BJTcapbc; *(SaveState0 + 25) = here->BJTcapsub; *(SaveState0 + 26) = here->BJTcapbx; if(here->BJTsenParmNo == 0) goto next; cx0 = model->BJTtype * *(ckt->CKTstate0 + here->BJTcb); ccpr0 = model->BJTtype * *(ckt->CKTstate0 + here->BJTcc); cepr0 = -cx0 - ccpr0; here->BJTsenPertFlag = ON; error = BJTload((GENmodel*)model,ckt); if(error) return(error); cb0 = model->BJTtype * *(ckt->CKTstate0 + here->BJTcb); cc0 = model->BJTtype * *(ckt->CKTstate0 + here->BJTcc); gx0 = *(ckt->CKTstate0 + here->BJTgx); qbe0 = *(ckt->CKTstate0 + here->BJTqbe); qbc0 = *(ckt->CKTstate0 + here->BJTqbc); qcs0 = *(ckt->CKTstate0 + here->BJTqsub); qbx0 = *(ckt->CKTstate0 + here->BJTqbx); /* perturbation of area */ A0 = here->BJTarea; DELA = info->SENpertfac * A0; Apert = A0 + DELA; DELAinv = 1.0/DELA; here->BJTsenPertFlag = ON; here->BJTarea = Apert; error = BJTload((GENmodel*)model,ckt); if(error) return(error); here->BJTarea = A0; here->BJTsenPertFlag = OFF; cb = model->BJTtype * *(ckt->CKTstate0 + here->BJTcb); cc = model->BJTtype * *(ckt->CKTstate0 + here->BJTcc); gx = *(ckt->CKTstate0 + here->BJTgx); qbe = *(ckt->CKTstate0 + here->BJTqbe); qbc = *(ckt->CKTstate0 + here->BJTqbc); qcs = *(ckt->CKTstate0 + here->BJTqsub); qbx = *(ckt->CKTstate0 + here->BJTqbx); /* compute the gradients of currents */ DcbDp = (cb - cb0) * DELAinv; DccDp = (cc - cc0) * DELAinv; DceDp = DcbDp + DccDp; DccprDp = 0; DceprDp = 0; DcxDp = 0; if(here->BJTcolNode != here->BJTcolPrimeNode) DccprDp = ccpr0 * info->SENpertfac * DELAinv; if(here->BJTemitNode != here->BJTemitPrimeNode) DceprDp = cepr0 * info->SENpertfac * DELAinv; if(here->BJTbaseNode != here->BJTbasePrimeNode){ if(gx0) DcxDp = cx0 * DELAinv * (gx-gx0)/gx0; } DbprmDp = DcbDp - DcxDp; DcprmDp = DccDp - DccprDp; DeprmDp = - DceDp - DceprDp; DqbeDp = (qbe - qbe0)*DELAinv; DqbcDp = (qbc - qbc0)*DELAinv; DqcsDp = (qcs - qcs0)*DELAinv; DqbxDp = (qbx - qbx0)*DELAinv; *(here->BJTdphibedp) = DqbeDp; *(here->BJTdphibcdp) = DqbcDp; *(here->BJTdphisubdp) = DqcsDp; *(here->BJTdphibxdp) = DqbxDp; #ifdef SENSDEBUG printf("cb0 = %.7e ,cb = %.7e,\n",cb0,cb); printf("cc0 = %.7e ,cc = %.7e,\n",cc0,cc); printf("ccpr0 = %.7e \n",ccpr0); printf("cepr0 = %.7e \n",cepr0); printf("cx0 = %.7e \n",cx0); printf("qbe0 = %.7e ,qbe = %.7e,\n",qbe0,qbe); printf("qbc0 = %.7e ,qbc = %.7e,\n",qbc0,qbc); printf("qcs0 = %.7e ,qcs = %.7e,\n",qcs0,qcs); printf("qbx0 = %.7e ,qbx = %.7e,\n",qbx0,qbx); printf("\n"); #endif /* SENSDEBUG */ if((info->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)) goto restore; /* load the RHS matrix */ *(info->SEN_RHS[here->BJTbaseNode] + here->BJTsenParmNo) -= DcxDp; *(info->SEN_RHS[here->BJTbasePrimeNode] + here->BJTsenParmNo) -= DbprmDp; *(info->SEN_RHS[here->BJTcolNode] + here->BJTsenParmNo) -= DccprDp; *(info->SEN_RHS[here->BJTcolPrimeNode] + here->BJTsenParmNo) -= DcprmDp; *(info->SEN_RHS[here->BJTemitNode] + here->BJTsenParmNo) -= DceprDp; *(info->SEN_RHS[here->BJTemitPrimeNode] + here->BJTsenParmNo) -= DeprmDp; #ifdef SENSDEBUG printf("after loading\n"); printf("DcxDp=%.7e\n", *(info->SEN_RHS[here->BJTbaseNode] + here->BJTsenParmNo)); printf("DcbprmDp=%.7e\n", *(info->SEN_RHS[here->BJTbasePrimeNode] + here->BJTsenParmNo)); printf("DccprDp=%.7e\n", *(info->SEN_RHS[here->BJTcolNode] + here->BJTsenParmNo)); printf("DcprmDp=%.7e\n", *(info->SEN_RHS[here->BJTcolPrimeNode] + here->BJTsenParmNo)); printf("DceprDp=%.7e\n", *(info->SEN_RHS[here->BJTemitNode] + here->BJTsenParmNo)); printf("DceprmDp=%.7e\n", *(info->SEN_RHS[here->BJTemitPrimeNode] + here->BJTsenParmNo)); #endif /* SENSDEBUG */ next: if((info->SENmode == DCSEN)||(ckt->CKTmode&MODETRANOP))goto restore; if((info->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)) goto restore; for(iparmno = 1;iparmno<=info->SENparms;iparmno++){ Osxpbe = tag0 * *(ckt->CKTstate1 + here->BJTsensxpbe + 8*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->BJTsensxpbe + 8*(iparmno - 1) + 1); Osxpbc = tag0 * *(ckt->CKTstate1 + here->BJTsensxpbc + 8*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->BJTsensxpbc + 8*(iparmno - 1) + 1); Osxpcs = tag0 * *(ckt->CKTstate1 + here->BJTsensxpsub + 8*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->BJTsensxpsub + 8*(iparmno - 1) + 1); Osxpbx = tag0 * *(ckt->CKTstate1 + here->BJTsensxpbx + 8*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->BJTsensxpbx + 8*(iparmno - 1) + 1); #ifdef SENSDEBUG printf("iparmno=%d\n",iparmno); printf("Osxpbe=%.7e,Osxpbc=%.7e\n",Osxpbe,Osxpbc); printf("Osxpcs=%.7e,Osxpbx=%.7e\n",Osxpcs,Osxpbx); printf("sxpbe=%.7e,sdbe=%.7e\n", *(ckt->CKTstate1 + here->BJTsensxpbe + 8*(iparmno - 1)) ,*(ckt->CKTstate1 + here->BJTsensxpbe + 8*(iparmno - 1) + 1)); printf("sxpbc=%.7e,sdbc=%.7e\n", *(ckt->CKTstate1 + here->BJTsensxpbc + 8*(iparmno - 1)) ,*(ckt->CKTstate1 + here->BJTsensxpbc + 8*(iparmno - 1) + 1)); printf("\n"); #endif /* SENSDEBUG */ if(iparmno == here->BJTsenParmNo){ Osxpbe = Osxpbe - tag0 * DqbeDp; Osxpbc = Osxpbc - tag0 * DqbcDp; Osxpcs = Osxpcs - tag0 * DqcsDp; Osxpbx = Osxpbx - tag0 * DqbxDp; } #ifdef SENSDEBUG printf("Osxpbe=%.7e,Osxpbc=%.7e\n",Osxpbe,Osxpbc); printf("Osxpcs=%.7e,Osxpbx=%.7e\n",Osxpcs,Osxpbx); #endif /* SENSDEBUG */ *(info->SEN_RHS[here->BJTbaseNode] + iparmno) += model->BJTtype * Osxpbx; *(info->SEN_RHS[here->BJTbasePrimeNode] + iparmno) += model->BJTtype * (Osxpbe + Osxpbc); *(info->SEN_RHS[here->BJTcolPrimeNode] + iparmno) -= model->BJTtype * (Osxpbc + Osxpcs + Osxpbx ); *(info->SEN_RHS[here->BJTemitPrimeNode] + iparmno) -= model->BJTtype * Osxpbe; *(info->SEN_RHS[here->BJTsubstNode] + iparmno) += model->BJTtype * Osxpcs; } /* put the unperturbed values back into the state vector */ restore: for(i=0; i <= 20; i++){ *(ckt->CKTstate0 + here->BJTstate + i) = *(SaveState0 + i); } *(ckt->CKTstate1 + here->BJTcexbc) = *(SaveState0 + 21); *(ckt->CKTstate1 + here->BJTcexbc) = *(SaveState0 + 21); here->BJTcapbe = *(SaveState0 + 23) ; here->BJTcapbc = *(SaveState0 + 24) ; here->BJTcapsub = *(SaveState0 + 25) ; here->BJTcapbx = *(SaveState0 + 26) ; } } info->SENstatus = NORMAL; #ifdef SENSDEBUG printf("BJTsenload end\n"); #endif /* SENSDEBUG */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bjt/bjtinit.h0000644000175000017500000000035613546075722021562 0ustar carstencarsten#ifndef _BJTINIT_H #define _BJTINIT_H extern IFparm BJTpTable[ ]; extern IFparm BJTmPTable[ ]; extern char *BJTnames[ ]; extern int BJTpTSize; extern int BJTmPTSize; extern int BJTnSize; extern int BJTiSize; extern int BJTmSize; #endif tmpk8ny_4pz/src/spicelib/devices/bjt/bjtask.c0000644000175000017500000003036113546075722021367 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Mathew Lew and Thomas L. Quarles **********/ /* * This routine gives access to the internal device * parameters for BJTs */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/cktdefs.h" #include "bjtdefs.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int BJTask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFvalue *select) { BJTinstance *here = (BJTinstance*)instPtr; double tmp; int itmp; double vr; double vi; double sr; double si; double vm; static char *msg = "Current and power not available for ac analysis"; switch(which) { case BJT_QUEST_FT: tmp = MAX(*(ckt->CKTstate0 + here->BJTcqbc), *(ckt->CKTstate0 + here->BJTcqbx)); value->rValue = here->BJTgm/(2 * M_PI * MAX(*(ckt->CKTstate0 + here->BJTcqbe),tmp)); return(OK); case BJT_TEMP: value->rValue = here->BJTtemp - CONSTCtoK; return(OK); case BJT_DTEMP: value->rValue = here->BJTdtemp; return(OK); case BJT_AREA: value->rValue = here->BJTarea; return(OK); case BJT_AREAB: value->rValue = here->BJTareab; return(OK); case BJT_AREAC: value->rValue = here->BJTareac; return(OK); case BJT_M: value->rValue = here->BJTm; return(OK); case BJT_OFF: value->iValue = here->BJToff; return(OK); case BJT_IC_VBE: value->rValue = here->BJTicVBE; return(OK); case BJT_IC_VCE: value->rValue = here->BJTicVCE; return(OK); case BJT_QUEST_COLNODE: value->iValue = here->BJTcolNode; return(OK); case BJT_QUEST_BASENODE: value->iValue = here->BJTbaseNode; return(OK); case BJT_QUEST_EMITNODE: value->iValue = here->BJTemitNode; return(OK); case BJT_QUEST_SUBSTNODE: value->iValue = here->BJTsubstNode; return(OK); case BJT_QUEST_COLPRIMENODE: value->iValue = here->BJTcolPrimeNode; return(OK); case BJT_QUEST_BASEPRIMENODE: value->iValue = here->BJTbasePrimeNode; return(OK); case BJT_QUEST_EMITPRIMENODE: value->iValue = here->BJTemitPrimeNode; return(OK); case BJT_QUEST_VBE: value->rValue = *(ckt->CKTstate0 + here->BJTvbe); return(OK); case BJT_QUEST_VBC: value->rValue = *(ckt->CKTstate0 + here->BJTvbc); return(OK); case BJT_QUEST_CC: value->rValue = *(ckt->CKTstate0 + here->BJTcc); value->rValue *= here->BJTm; return(OK); case BJT_QUEST_CB: value->rValue = *(ckt->CKTstate0 + here->BJTcb); if (BJTmodPtr(here)->BJTsubs==LATERAL) { value->rValue -= *(ckt->CKTstate0 + here->BJTcdsub); if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { value->rValue -= *(ckt->CKTstate0 + here->BJTcqsub); } } value->rValue *= here->BJTm; return(OK); case BJT_QUEST_GPI: value->rValue = *(ckt->CKTstate0 + here->BJTgpi); value->rValue *= here->BJTm; return(OK); case BJT_QUEST_GMU: value->rValue = *(ckt->CKTstate0 + here->BJTgmu); value->rValue *= here->BJTm; return(OK); case BJT_QUEST_GM: value->rValue = *(ckt->CKTstate0 + here->BJTgm); value->rValue *= here->BJTm; return(OK); case BJT_QUEST_GO: value->rValue = *(ckt->CKTstate0 + here->BJTgo); value->rValue *= here->BJTm; return(OK); case BJT_QUEST_QBE: value->rValue = *(ckt->CKTstate0 + here->BJTqbe); value->rValue *= here->BJTm; return(OK); case BJT_QUEST_CQBE: value->rValue = *(ckt->CKTstate0 + here->BJTcqbe); value->rValue *= here->BJTm; return(OK); case BJT_QUEST_QBC: value->rValue = *(ckt->CKTstate0 + here->BJTqbc); value->rValue *= here->BJTm; return(OK); case BJT_QUEST_CQBC: value->rValue = *(ckt->CKTstate0 + here->BJTcqbc); value->rValue *= here->BJTm; return(OK); case BJT_QUEST_QSUB: value->rValue = *(ckt->CKTstate0 + here->BJTqsub); value->rValue *= here->BJTm; return(OK); case BJT_QUEST_CQSUB: value->rValue = *(ckt->CKTstate0 + here->BJTcqsub); value->rValue *= here->BJTm; return(OK); case BJT_QUEST_QBX: value->rValue = *(ckt->CKTstate0 + here->BJTqbx); value->rValue *= here->BJTm; return(OK); case BJT_QUEST_CQBX: value->rValue = *(ckt->CKTstate0 + here->BJTcqbx); value->rValue *= here->BJTm; return(OK); case BJT_QUEST_GX: value->rValue = *(ckt->CKTstate0 + here->BJTgx); value->rValue *= here->BJTm; return(OK); case BJT_QUEST_CEXBC: value->rValue = *(ckt->CKTstate0 + here->BJTcexbc); value->rValue *= here->BJTm; return(OK); case BJT_QUEST_GEQCB: value->rValue = *(ckt->CKTstate0 + here->BJTgeqcb); value->rValue *= here->BJTm; return(OK); case BJT_QUEST_GCSUB: value->rValue = *(ckt->CKTstate0 + here->BJTgcsub); value->rValue *= here->BJTm; return(OK); case BJT_QUEST_GDSUB: value->rValue = *(ckt->CKTstate0 + here->BJTgdsub); value->rValue *= here->BJTm; return(OK); case BJT_QUEST_GEQBX: value->rValue = *(ckt->CKTstate0 + here->BJTgeqbx); value->rValue *= here->BJTm; return(OK); case BJT_QUEST_SENS_DC: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_Sap[select->iValue + 1]+ here->BJTsenParmNo); } return(OK); case BJT_QUEST_SENS_REAL: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->BJTsenParmNo); } return(OK); case BJT_QUEST_SENS_IMAG: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->BJTsenParmNo); } return(OK); case BJT_QUEST_SENS_MAG: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = sqrt(vr*vr + vi*vi); if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->BJTsenParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->BJTsenParmNo); value->rValue = (vr * sr + vi * si)/vm; } return(OK); case BJT_QUEST_SENS_PH: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = vr*vr + vi*vi; if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->BJTsenParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->BJTsenParmNo); value->rValue = (vr * si - vi * sr)/vm; } return(OK); case BJT_QUEST_SENS_CPLX: if(ckt->CKTsenInfo){ itmp = select->iValue + 1; value->cValue.real= *(ckt->CKTsenInfo->SEN_RHS[itmp]+ here->BJTsenParmNo); value->cValue.imag= *(ckt->CKTsenInfo->SEN_iRHS[itmp]+ here->BJTsenParmNo); } return(OK); case BJT_QUEST_CS : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "BJTask"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else if (ckt->CKTcurrentAnalysis & (DOING_DCOP | DOING_TRCV)) { value->rValue = 0; } else if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && (ckt->CKTmode & MODETRANOP)) { value->rValue = 0; } else { value->rValue = -(BJTmodPtr(here)->BJTsubs * (*(ckt->CKTstate0 + here->BJTcqsub) + *(ckt->CKTstate0 + here->BJTcdsub))); } value->rValue *= here->BJTm; return(OK); case BJT_QUEST_CE : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "BJTask"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = -*(ckt->CKTstate0 + here->BJTcc); value->rValue -= *(ckt->CKTstate0 + here->BJTcb); if (BJTmodPtr(here)->BJTsubs==VERTICAL) { value->rValue += *(ckt->CKTstate0 + here->BJTcdsub); if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { value->rValue += *(ckt->CKTstate0 + here->BJTcqsub); } } } value->rValue *= here->BJTm; return(OK); case BJT_QUEST_POWER : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "BJTask"; strcpy(errMsg,msg); return(E_ASKPOWER); } else { value->rValue = fabs( *(ckt->CKTstate0 + here->BJTcc) * (*(ckt->CKTrhsOld + here->BJTcolNode)- *(ckt->CKTrhsOld + here->BJTemitNode)) ); value->rValue +=fabs( *(ckt->CKTstate0 + here->BJTcb) * (*(ckt->CKTrhsOld + here->BJTbaseNode)- *(ckt->CKTrhsOld + here->BJTemitNode)) ); value->rValue +=fabs( *(ckt->CKTstate0 + here->BJTcdsub) * (*(ckt->CKTrhsOld + here->BJTsubstConNode)- *(ckt->CKTrhsOld + here->BJTsubstNode)) ); if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { value->rValue += *(ckt->CKTstate0 + here->BJTcqsub) * fabs(*(ckt->CKTrhsOld + here->BJTsubstConNode)- *(ckt->CKTrhsOld + here->BJTsubstNode)); } } value->rValue *= here->BJTm; return(OK); case BJT_QUEST_CPI: value->rValue = here->BJTcapbe; value->rValue *= here->BJTm; return(OK); case BJT_QUEST_CMU: value->rValue = here->BJTcapbc; value->rValue *= here->BJTm; return(OK); case BJT_QUEST_CBX: value->rValue = here->BJTcapbx; value->rValue *= here->BJTm; return(OK); case BJT_QUEST_CSUB: value->rValue = here->BJTcapsub; value->rValue *= here->BJTm; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bjt/ChangeLog0000644000175000017500000000041713546075722021516 0ustar carstencarsten2000-09-02 Arno W. Peters * bjtdset.c: reformatted 1999-09-07 Arno W. Peters * bjtnoise.c: removed unused variable `error'. 1999-09-06 Arno W. Peters * bjtnoise.c: Reformatted comment. tmpk8ny_4pz/src/spicelib/devices/bjt/bjtdset.h0000644000175000017500000000006113546075722021547 0ustar carstencarsten#ifndef __BJTDSET_H #define __BJTDSET_H #endif tmpk8ny_4pz/src/spicelib/devices/bjt/bjtdset.c0000644000175000017500000005672013546075722021557 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bjtdefs.h" #include "ngspice/const.h" #include "ngspice/distodef.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" /* * This function initialises the Taylor coeffs for the * BJT's in the circuit */ /* actually load the current resistance value into the sparse matrix * previously provided */ int BJTdSetup(GENmodel *inModel, CKTcircuit *ckt) { BJTmodel *model = (BJTmodel*)inModel; BJTinstance *here; double arg; double c2; double c4; double lcapbe1, lcapbe2, lcapbe3; double lcapbx1, lcapbx2, lcapbx3; double cb = 0.0; double cbc; double cbcn; double cbe; double cben; double cdis; double csat; double ctot; double czbc; double czbcf2; double czbe; double czbef2; double czbx; double czbxf2; double czcs; double evbc; double evbcn; double evbe; double evben; double f1; double f2; double f3; double fcpc; double fcpe; double gbb1 = 0.0; double gbc; double gbcn; double gbe; double gbe2, gbe3; double gbc2,gbc3; double gben2,gben3; double gbcn2,gbcn3; double gben; double gbb2 = 0.0, gbb3 = 0.0; double oik; double oikr; double ovtf; double pc; double pe; double ps; double q1; double q2; double qb; double rbpi; double rbpr; double sarg; double sqarg; double tf; double tr; double vbc; double vbe; double vbx; double vsc; double vt; double vtc; double vte; double vtn; double xjrb; double xjtf; double xmc; double xme; double xms; double xtf; double vbed; double vbb; double lcapbc1 = 0.0; double lcapbc2 = 0.0; double lcapbc3 = 0.0; double lcapsc1 = 0.0; double lcapsc2 = 0.0; double lcapsc3 = 0.0; double ic; double dummy; Dderivs d_p, d_q, d_r; Dderivs d_dummy, d_q1, d_qb, d_dummy2; Dderivs d_arg, d_sqarg, d_ic, d_q2; Dderivs d_z, d_tanz, d_vbb, d_ibb, d_rbb; Dderivs d_ib, d_cbe, d_tff, d_qbe; d_p.value = 0.0; d_p.d1_p = 1.0; d_p.d1_q = 0.0; d_p.d1_r = 0.0; d_p.d2_p2 = 0.0; d_p.d2_q2 = 0.0; d_p.d2_r2 = 0.0; d_p.d2_pq = 0.0; d_p.d2_qr = 0.0; d_p.d2_pr = 0.0; d_p.d3_p3 = 0.0; d_p.d3_q3 = 0.0; d_p.d3_r3 = 0.0; d_p.d3_p2q = 0.0; d_p.d3_p2r = 0.0; d_p.d3_pq2 = 0.0; d_p.d3_q2r = 0.0; d_p.d3_pr2 = 0.0; d_p.d3_qr2 = 0.0; d_p.d3_pqr = 0.0; EqualDeriv(&d_q, &d_p); d_q.d1_q = 1.0; d_q.d1_p = 0.0; EqualDeriv(&d_r, &d_p); d_r.d1_r = 1.0; d_r.d1_p = 0.0; /* loop through all the models */ for( ; model != NULL; model = BJTnextModel(model)) { /* loop through all the instances of the model */ for (here = BJTinstances(model); here != NULL ; here=BJTnextInstance(here)) { vt = here->BJTtemp * CONSTKoverQ; /* * dc model paramters */ csat=here->BJTtSatCur*here->BJTarea * here->BJTm; rbpr=here->BJTtminBaseResist/(here->BJTarea * here->BJTm); rbpi=here->BJTtbaseResist/(here->BJTarea * here->BJTm)-rbpr; oik=here->BJTtinvRollOffF/(here->BJTarea * here->BJTm); c2=here->BJTtBEleakCur*here->BJTarea * here->BJTm; vte=here->BJTtleakBEemissionCoeff*vt; oikr=here->BJTtinvRollOffR/(here->BJTarea * here->BJTm); c4=here->BJTtBCleakCur * here->BJTm; if (model->BJTsubs == VERTICAL) c4 *= here->BJTareab; else c4 *= here->BJTareac; /* lateral transistor */ vtc=here->BJTtleakBCemissionCoeff*vt; xjrb=here->BJTtbaseCurrentHalfResist*here->BJTarea * here->BJTm; /* * initialization */ vbe= model->BJTtype*(*(ckt->CKTrhsOld + here->BJTbasePrimeNode) - *(ckt->CKTrhsOld + here->BJTemitPrimeNode)); vbc= model->BJTtype*(*(ckt->CKTrhsOld + here->BJTbaseNode) - *(ckt->CKTrhsOld + here->BJTcolPrimeNode)); vbx=model->BJTtype*( *(ckt->CKTrhsOld+here->BJTbaseNode)- *(ckt->CKTrhsOld+here->BJTcolPrimeNode)); vsc=model->BJTtype*( *(ckt->CKTrhsOld+here->BJTsubstNode)- *(ckt->CKTrhsOld+here->BJTcolPrimeNode)); vbb=model->BJTtype*( *(ckt->CKTrhsOld+here->BJTbaseNode) - *(ckt->CKTrhsOld+here->BJTbasePrimeNode)); vbed = vbe; /* this is just a dummy variable * it is the delayed vbe to be * used in the delayed gm generator */ /* ic = f1(vbe,vbc,vbed) + f2(vbc) + f3(vbc) * * we shall calculate the taylor coeffs of ic wrt vbe, * vbed, and vbc and store them away. the equations f1 f2 * and f3 are given elsewhere; we shall start off with f1, * compute derivs. upto third order and then do f2 and f3 * and add their derivatives. * * Since f1 above is a function of three variables, it * will be convenient to use derivative structures to * compute the derivatives of f1. For this computation, * p=vbe, q=vbc, r=vbed. * * ib = f1(vbe) + f2(vbc) (not the same f's as above, in * case you are wondering!) the gbe's gbc's gben's and * gbcn's are convenient subsidiary variables. * * irb = f(vbe, vbc, vbb) - the vbe & vbc dependencies * arise from the qb term. * * qbe = f1(vbe,vbc) + f2(vbe) * * derivative structures will be used again in the above * two equations. p=vbe, q=vbc, r=vbb. * * qbc = f(vbc) ; qbx = f(vbx) * * qss = f(vsc) */ /* * determine dc current and derivitives */ vtn=vt*here->BJTtemissionCoeffF; if(vbe > -5*vtn){ evbe=exp(vbe/vtn); cbe=csat*(evbe-1)+ckt->CKTgmin*vbe; gbe=csat*evbe/vtn+ckt->CKTgmin; gbe2 = csat*evbe/vtn/vtn; gbe3 = gbe2/vtn; /* note - these are actually derivs, not Taylor * coeffs. - not divided by 2! and 3! */ if (c2 == 0) { cben=0; gben=gben2=gben3=0; } else { evben=exp(vbe/vte); cben=c2*(evben-1); gben=c2*evben/vte; gben2=gben/vte; gben3=gben2/vte; } } else { gbe = -csat/vbe+ckt->CKTgmin; gbe2=gbe3=gben2=gben3=0; cbe=gbe*vbe; gben = -c2/vbe; cben=gben*vbe; } vtn=vt*here->BJTtemissionCoeffR; if(vbc > -5*vtn) { evbc=exp(vbc/vtn); cbc=csat*(evbc-1)+ckt->CKTgmin*vbc; gbc=csat*evbc/vtn+ckt->CKTgmin; gbc2=csat*evbc/vtn/vtn; gbc3=gbc2/vtn; if (c4 == 0) { cbcn=0; gbcn=0; gbcn2=gbcn3=0; } else { evbcn=exp(vbc/vtc); cbcn=c4*(evbcn-1); gbcn=c4*evbcn/vtc; gbcn2=gbcn/vtc; gbcn3=gbcn2/vtc; } } else { gbc = -csat/vbc+ckt->CKTgmin; gbc2=gbc3=0; cbc = gbc*vbc; gbcn = -c4/vbc; gbcn2=gbcn3=0; cbcn=gbcn*vbc; } /* * determine base charge terms */ /* q1 is a function of 2 variables p=vbe and q=vbc. r= * anything */ q1=1/(1-here->BJTtinvEarlyVoltF*vbc-here->BJTtinvEarlyVoltR*vbe); dummy = (1-here->BJTtinvEarlyVoltF*vbc- here->BJTtinvEarlyVoltR*vbe); EqualDeriv(&d_dummy, &d_p); d_dummy.value = dummy; d_dummy.d1_p = - here->BJTtinvEarlyVoltR; d_dummy.d1_q = - here->BJTtinvEarlyVoltF; /* q1 = 1/dummy */ InvDeriv(&d_q1, &d_dummy); /* now q1 and its derivatives are set up */ if(oik == 0 && oikr == 0) { qb=q1; EqualDeriv(&d_qb, &d_q1); } else { q2=oik*cbe+oikr*cbc; EqualDeriv(&d_q2, &d_p); d_q2.value = q2; d_q2.d1_p = oik*gbe; d_q2.d1_q = oikr*gbc; d_q2.d2_p2 = oik*gbe2; d_q2.d2_q2 = oikr*gbc2; d_q2.d3_p3 = oik*gbe3; d_q2.d3_q3 = oikr*gbc3; arg=MAX(0,1+4*q2); if (arg == 0.) { EqualDeriv(&d_arg,&d_p); d_arg.d1_p = 0.0; } else { TimesDeriv(&d_arg,&d_q2,4.0); d_arg.value += 1.; } sqarg=1; EqualDeriv(&d_sqarg,&d_p); d_sqarg.value = 1.0; d_sqarg.d1_p = 0.0; if(arg != 0){ sqarg=sqrt(arg); SqrtDeriv(&d_sqarg, &d_arg); } qb=q1*(1+sqarg)/2; dummy = 1 + sqarg; EqualDeriv(&d_dummy, &d_sqarg); d_dummy.value += 1.0; MultDeriv(&d_qb, &d_q1, &d_dummy); TimesDeriv(&d_qb, &d_qb, 0.5); } ic = (cbe - cbc)/qb; /* cbe is a fn of vbed only; cbc of vbc; and qb of vbe and vbc */ /* p=vbe, q=vbc, r=vbed; now dummy = cbe - cbc */ EqualDeriv(&d_dummy, &d_p); d_dummy.d1_p = 0.0; d_dummy.value = cbe-cbc; d_dummy.d1_r = gbe; d_dummy.d2_r2 = gbe2; d_dummy.d3_r3 = gbe3; d_dummy.d1_q = -gbc; d_dummy.d2_q2 = -gbc2; d_dummy.d3_q3 = -gbc3; DivDeriv(&d_ic, &d_dummy, &d_qb); d_ic.value -= cbc/here->BJTtBetaR + cbcn; d_ic.d1_q -= gbc/here->BJTtBetaR + gbcn; d_ic.d2_q2 -= gbc2/here->BJTtBetaR + gbcn2; d_ic.d3_q3 -= gbc3/here->BJTtBetaR + gbcn3; /* check this point: where is the f2(vbe) contribution to ic ? */ /* ic derivatives all set up now */ /* base spread resistance */ if ( !((rbpr == 0.0) && (rbpi == 0.0))) { cb=cbe/here->BJTtBetaF+cben+cbc/here->BJTtBetaR+cbcn; /* we are calculating derivatives w.r.t cb itself */ /* gx=rbpr+rbpi/qb; */ if (cb != 0.0) { if((xjrb != 0.0) && (rbpi != 0.0)) { /* p = ib, q, r = anything */ dummy=MAX(cb/xjrb,1e-9); EqualDeriv(&d_dummy, &d_p); d_dummy.value = dummy; d_dummy.d1_p = 1/xjrb; SqrtDeriv(&d_dummy, &d_dummy); TimesDeriv(&d_dummy, &d_dummy, 2.4317); /* dummy2=(-1+sqrt(1+14.59025*MAX(cb/xjrb,1e-9))); */ EqualDeriv(&d_dummy2, &d_p); d_dummy2.value = 1+14.59025*MAX(cb/xjrb,1e-9); d_dummy2.d1_p = 14.59025/xjrb; SqrtDeriv(&d_dummy2, &d_dummy2); d_dummy2.value -= 1.0; DivDeriv(&d_z, &d_dummy2, &d_dummy); TanDeriv(&d_tanz, &d_z); /* now using dummy = tanz - z and dummy2 = z*tanz*tanz */ TimesDeriv(&d_dummy, &d_z, -1.0); PlusDeriv(&d_dummy, &d_dummy, &d_tanz); MultDeriv(&d_dummy2, &d_tanz, &d_tanz); MultDeriv(&d_dummy2, &d_dummy2, &d_z); DivDeriv(&d_rbb , &d_dummy, &d_dummy2); TimesDeriv(&d_rbb,&d_rbb, 3.0*rbpi); d_rbb.value += rbpr; MultDeriv(&d_vbb, &d_rbb, &d_p); /* power series inversion to get the conductance derivatives */ if (d_vbb.d1_p != 0) { gbb1 = 1/d_vbb.d1_p; gbb2 = -(d_vbb.d2_p2*0.5)*gbb1*gbb1; gbb3 = gbb1*gbb1*gbb1*gbb1*(-(d_vbb.d3_p3/6.0) + 2*(d_vbb.d2_p2*0.5)*(d_vbb.d2_p2*0.5)*gbb1); } else printf("\nd_vbb.d1_p = 0 in base spread resistance calculations\n"); /* r = vbb */ EqualDeriv(&d_ibb, &d_r); d_ibb.value = cb; d_ibb.d1_r = gbb1; d_ibb.d2_r2 = 2*gbb2; d_ibb.d3_r3 = 6.0*gbb3; } else { /* rbb = rbpr + rbpi/qb; ibb = vbb /rbb; = f(vbe, vbc, vbb) */ EqualDeriv(&d_rbb,&d_p); d_rbb.d1_p = 0.0; if (rbpi != 0.0) { InvDeriv(&d_rbb, &d_qb); TimesDeriv(&d_rbb, &d_rbb,rbpi); } d_rbb.value += rbpr; EqualDeriv(&d_ibb,&d_r); d_ibb.value = vbb; DivDeriv(&d_ibb,&d_ibb,&d_rbb); } } else { EqualDeriv(&d_ibb,&d_r); if (rbpr != 0.0) d_ibb.d1_r = 1/rbpr; } } else { EqualDeriv(&d_ibb,&d_p); d_ibb.d1_p = 0.0; } /* formulae for base spread resistance over! */ /* ib term */ EqualDeriv(&d_ib, &d_p); d_ib.value = cb; d_ib.d1_p = gbe/here->BJTtBetaF + gben; d_ib.d2_p2 = gbe2/here->BJTtBetaF + gben2; d_ib.d3_p3 = gbe3/here->BJTtBetaF + gben3; d_ib.d1_q = gbc/here->BJTtBetaR + gbcn; d_ib.d2_q2 = gbc2/here->BJTtBetaR + gbcn2; d_ib.d3_q3 = gbc3/here->BJTtBetaR + gbcn3; /* ib term over */ /* * charge storage elements */ tf=here->BJTttransitTimeF; tr=here->BJTttransitTimeR; czbe=here->BJTtBEcap*here->BJTarea * here->BJTm; pe=here->BJTtBEpot; xme=here->BJTtjunctionExpBE; cdis=model->BJTbaseFractionBCcap; ctot=here->BJTtBCcap * here->BJTm; if (model->BJTsubs == VERTICAL) ctot *= here->BJTareab; else ctot *= here->BJTareac; czbc=ctot*cdis; czbx=ctot-czbc; pc=here->BJTtBCpot; xmc=here->BJTtjunctionExpBC; fcpe=here->BJTtDepCap; czcs=model->BJTcapSub * here->BJTm; if (model->BJTsubs == VERTICAL) czcs *= here->BJTareac; else czcs *= here->BJTareab; ps=model->BJTpotentialSubstrate; xms=model->BJTexponentialSubstrate; xtf=model->BJTtransitTimeBiasCoeffF; ovtf=model->BJTtransitTimeVBCFactor; xjtf=here->BJTttransitTimeHighCurrentF*here->BJTarea * here->BJTm; if(tf != 0 && vbe >0) { EqualDeriv(&d_cbe, &d_p); d_cbe.value = cbe; d_cbe.d1_p = gbe; d_cbe.d2_p2 = gbe2; d_cbe.d3_p3 = gbe3; if(xtf != 0){ if(ovtf != 0) { /* dummy = exp ( vbc*ovtf) */ EqualDeriv(&d_dummy, &d_q); d_dummy.value = vbc*ovtf; d_dummy.d1_q = ovtf; ExpDeriv(&d_dummy, &d_dummy); } else { EqualDeriv(&d_dummy,&d_p); d_dummy.value = 1.0; d_dummy.d1_p = 0.0; } if(xjtf != 0) { EqualDeriv(&d_dummy2, &d_cbe); d_dummy2.value += xjtf; DivDeriv(&d_dummy2, &d_cbe, &d_dummy2); MultDeriv (&d_dummy2, &d_dummy2, &d_dummy2); } else { EqualDeriv(&d_dummy2,&d_p); d_dummy2.value = 1.0; d_dummy2.d1_p = 0.0; } MultDeriv(&d_tff, &d_dummy, &d_dummy2); TimesDeriv(&d_tff, &d_tff, tf*xtf); d_tff.value += tf; } else { EqualDeriv(&d_tff,&d_p); d_tff.value = tf; d_tff.d1_p = 0.0; } /* qbe = tff/qb*cbe */ /* dummy = tff/qb; */ /* these are the cbe coeffs */ DivDeriv(&d_dummy, &d_tff, &d_qb); MultDeriv(&d_qbe, &d_dummy, &d_cbe); } else { EqualDeriv(&d_qbe, &d_p); d_qbe.value = 0.0; d_qbe.d1_p = 0.0; } if (vbe < fcpe) { arg=1-vbe/pe; sarg=exp(-xme*log(arg)); lcapbe1 = czbe*sarg; lcapbe2 = 0.5*czbe*xme*sarg/(arg*pe); lcapbe3 = czbe*xme*(xme+1)*sarg/(arg*arg*pe*pe*6); } else { f1=here->BJTtf1; f2=here->BJTtf2; f3=here->BJTtf3; czbef2=czbe/f2; lcapbe1 = czbef2*(f3+xme*vbe/pe); lcapbe2 = 0.5*xme*czbef2/pe; lcapbe3 = 0.0; } d_qbe.d1_p += lcapbe1; d_qbe.d2_p2 += lcapbe2*2.; d_qbe.d3_p3 += lcapbe3*6.; fcpc=here->BJTtf4; f1=here->BJTtf5; f2=here->BJTtf6; f3=here->BJTtf7; if (vbc < fcpc) { arg=1-vbc/pc; sarg=exp(-xmc*log(arg)); lcapbc1 = czbc*sarg; lcapbc2 = 0.5*czbc*xmc*sarg/(arg*pc); lcapbc3 = czbc*xmc*(xmc+1)*sarg/(arg*arg*pc*pc*6); } else { czbcf2=czbc/f2; lcapbc1 = czbcf2*(f3+xmc*vbc/pc); lcapbc2 = 0.5*xmc*czbcf2/pc; lcapbc3 = 0; } if(vbx < fcpc) { arg=1-vbx/pc; sarg=exp(-xmc*log(arg)); lcapbx1 = czbx*sarg; lcapbx2 = 0.5*czbx*xmc*sarg/(arg*pc); lcapbx3 = czbx*xmc*(xmc+1)*sarg/(arg*arg*pc*pc*6); } else { czbxf2=czbx/f2; lcapbx1 = czbxf2*(f3+xmc*vbx/pc); lcapbx2 = 0.5*xmc*czbxf2/pc; lcapbx3 = 0; } if(vsc < 0){ arg=1-vsc/ps; sarg=exp(-xms*log(arg)); lcapsc1 = czcs*sarg; lcapsc2 = 0.5*czcs*xms*sarg/(arg*ps); lcapsc3 = czcs*xms*(xms+1)*sarg/(arg*arg*ps*ps*6); } else { lcapsc1 = czcs*(1+xms*vsc/ps); lcapsc2 = czcs*0.5*xms/ps; lcapsc3 = 0; } /* * store small-signal parameters */ here->ic_x = d_ic.d1_p; here->ic_y = d_ic.d1_q; here->ic_xd = d_ic.d1_r; here->ic_x2 = 0.5*model->BJTtype*d_ic.d2_p2; here->ic_y2 = 0.5*model->BJTtype*d_ic.d2_q2; here->ic_w2 = 0.5*model->BJTtype*d_ic.d2_r2; here->ic_xy = model->BJTtype*d_ic.d2_pq; here->ic_yw = model->BJTtype*d_ic.d2_qr; here->ic_xw = model->BJTtype*d_ic.d2_pr; here->ic_x3 = d_ic.d3_p3/6.; here->ic_y3 = d_ic.d3_q3/6.; here->ic_w3 = d_ic.d3_r3/6.; here->ic_x2w = 0.5*d_ic.d3_p2r; here->ic_x2y = 0.5*d_ic.d3_p2q; here->ic_y2w = 0.5*d_ic.d3_q2r; here->ic_xy2 = 0.5*d_ic.d3_pq2; here->ic_xw2 = 0.5*d_ic.d3_pr2; here->ic_yw2 = 0.5*d_ic.d3_qr2; here->ic_xyw = d_ic.d3_pqr; here->ib_x = d_ib.d1_p; here->ib_y = d_ib.d1_q; here->ib_x2 = 0.5*model->BJTtype*d_ib.d2_p2; here->ib_y2 = 0.5*model->BJTtype*d_ib.d2_q2; here->ib_xy = model->BJTtype*d_ib.d2_pq; here->ib_x3 = d_ib.d3_p3/6.; here->ib_y3 = d_ib.d3_q3/6.; here->ib_x2y = 0.5*d_ib.d3_p2q; here->ib_xy2 = 0.5*d_ib.d3_pq2; here->ibb_x = d_ibb.d1_p; here->ibb_y = d_ibb.d1_q; here->ibb_z = d_ibb.d1_r; here->ibb_x2 = 0.5*model->BJTtype*d_ibb.d2_p2; here->ibb_y2 = 0.5*model->BJTtype*d_ibb.d2_q2; here->ibb_z2 = 0.5*model->BJTtype*d_ibb.d2_r2; here->ibb_xy = model->BJTtype*d_ibb.d2_pq; here->ibb_yz = model->BJTtype*d_ibb.d2_qr; here->ibb_xz = model->BJTtype*d_ibb.d2_pr; here->ibb_x3 = d_ibb.d3_p3/6.; here->ibb_y3 = d_ibb.d3_q3/6.; here->ibb_z3 = d_ibb.d3_r3/6.; here->ibb_x2z = 0.5*d_ibb.d3_p2r; here->ibb_x2y = 0.5*d_ibb.d3_p2q; here->ibb_y2z = 0.5*d_ibb.d3_q2r; here->ibb_xy2 = 0.5*d_ibb.d3_pq2; here->ibb_xz2 = 0.5*d_ibb.d3_pr2; here->ibb_yz2 = 0.5*d_ibb.d3_qr2; here->ibb_xyz = d_ibb.d3_pqr; here->qbe_x = d_qbe.d1_p; here->qbe_y = d_qbe.d1_q; here->qbe_x2 = 0.5*model->BJTtype*d_qbe.d2_p2; here->qbe_y2 = 0.5*model->BJTtype*d_qbe.d2_q2; here->qbe_xy = model->BJTtype*d_qbe.d2_pq; here->qbe_x3 = d_qbe.d3_p3/6.; here->qbe_y3 = d_qbe.d3_q3/6.; here->qbe_x2y = 0.5*d_qbe.d3_p2q; here->qbe_xy2 = 0.5*d_qbe.d3_pq2; here->capbc1 = lcapbc1; here->capbc2 = lcapbc2; here->capbc3 = lcapbc3; here->capbx1 = lcapbx1; here->capbx2 = lcapbx2; here->capbx3 = lcapbx3; here->capsc1 = lcapsc1; here->capsc2 = lcapsc2; here->capsc3 = lcapsc3; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bjt/bjtmpar.c0000644000175000017500000003602213546075722021550 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* * This routine sets model parameters for * BJTs in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "bjtdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BJTmParam(int param, IFvalue *value, GENmodel *inModel) { BJTmodel *mods = (BJTmodel*)inModel; switch(param) { case BJT_MOD_NPN: if(value->iValue) { mods->BJTtype = NPN; } break; case BJT_MOD_PNP: if(value->iValue) { mods->BJTtype = PNP; } break; case BJT_MOD_SUBS: mods->BJTsubs = value->iValue; mods->BJTsubsGiven = TRUE; break; case BJT_MOD_TNOM: mods->BJTtnom = value->rValue+CONSTCtoK; mods->BJTtnomGiven = TRUE; break; case BJT_MOD_IS: mods->BJTsatCur = value->rValue; mods->BJTsatCurGiven = TRUE; break; case BJT_MOD_BF: mods->BJTbetaF = value->rValue; mods->BJTbetaFGiven = TRUE; break; case BJT_MOD_NF: mods->BJTemissionCoeffF = value->rValue; mods->BJTemissionCoeffFGiven = TRUE; break; case BJT_MOD_VAF: mods->BJTearlyVoltF = value->rValue; mods->BJTearlyVoltFGiven = TRUE; break; case BJT_MOD_IKF: mods->BJTrollOffF = value->rValue; mods->BJTrollOffFGiven = TRUE; break; case BJT_MOD_ISE: mods->BJTleakBEcurrent = value->rValue; mods->BJTleakBEcurrentGiven = TRUE; break; case BJT_MOD_C2: mods->BJTc2 = value->rValue; mods->BJTc2Given=TRUE; break; case BJT_MOD_NE: mods->BJTleakBEemissionCoeff = value->rValue; mods->BJTleakBEemissionCoeffGiven = TRUE; break; case BJT_MOD_BR: mods->BJTbetaR = value->rValue; mods->BJTbetaRGiven = TRUE; break; case BJT_MOD_NR: mods->BJTemissionCoeffR = value->rValue; mods->BJTemissionCoeffRGiven = TRUE; break; case BJT_MOD_VAR: mods->BJTearlyVoltR = value->rValue; mods->BJTearlyVoltRGiven = TRUE; break; case BJT_MOD_IKR: mods->BJTrollOffR = value->rValue; mods->BJTrollOffRGiven = TRUE; break; case BJT_MOD_ISC: mods->BJTleakBCcurrent = value->rValue; mods->BJTleakBCcurrentGiven = TRUE; break; case BJT_MOD_C4: mods->BJTc4 = value->rValue; mods->BJTc4Given=TRUE; break; case BJT_MOD_NC: mods->BJTleakBCemissionCoeff = value->rValue; mods->BJTleakBCemissionCoeffGiven = TRUE; break; case BJT_MOD_RB: mods->BJTbaseResist = value->rValue; mods->BJTbaseResistGiven = TRUE; break; case BJT_MOD_IRB: mods->BJTbaseCurrentHalfResist = value->rValue; mods->BJTbaseCurrentHalfResistGiven = TRUE; break; case BJT_MOD_RBM: mods->BJTminBaseResist = value->rValue; mods->BJTminBaseResistGiven = TRUE; break; case BJT_MOD_RE: mods->BJTemitterResist = value->rValue; mods->BJTemitterResistGiven = TRUE; break; case BJT_MOD_RC: mods->BJTcollectorResist = value->rValue; mods->BJTcollectorResistGiven = TRUE; break; case BJT_MOD_CJE: mods->BJTdepletionCapBE = value->rValue; mods->BJTdepletionCapBEGiven = TRUE; break; case BJT_MOD_VJE: mods->BJTpotentialBE = value->rValue; mods->BJTpotentialBEGiven = TRUE; break; case BJT_MOD_MJE: mods->BJTjunctionExpBE = value->rValue; mods->BJTjunctionExpBEGiven = TRUE; break; case BJT_MOD_TF: mods->BJTtransitTimeF = value->rValue; mods->BJTtransitTimeFGiven = TRUE; break; case BJT_MOD_XTF: mods->BJTtransitTimeBiasCoeffF = value->rValue; mods->BJTtransitTimeBiasCoeffFGiven = TRUE; break; case BJT_MOD_VTF: mods->BJTtransitTimeFVBC = value->rValue; mods->BJTtransitTimeFVBCGiven = TRUE; break; case BJT_MOD_ITF: mods->BJTtransitTimeHighCurrentF = value->rValue; mods->BJTtransitTimeHighCurrentFGiven = TRUE; break; case BJT_MOD_PTF: mods->BJTexcessPhase = value->rValue; mods->BJTexcessPhaseGiven = TRUE; break; case BJT_MOD_CJC: mods->BJTdepletionCapBC = value->rValue; mods->BJTdepletionCapBCGiven = TRUE; break; case BJT_MOD_VJC: mods->BJTpotentialBC = value->rValue; mods->BJTpotentialBCGiven = TRUE; break; case BJT_MOD_MJC: mods->BJTjunctionExpBC = value->rValue; mods->BJTjunctionExpBCGiven = TRUE; break; case BJT_MOD_XCJC: mods->BJTbaseFractionBCcap = value->rValue; mods->BJTbaseFractionBCcapGiven = TRUE; break; case BJT_MOD_TR: mods->BJTtransitTimeR = value->rValue; mods->BJTtransitTimeRGiven = TRUE; break; case BJT_MOD_CJS: mods->BJTcapSub = value->rValue; mods->BJTcapSubGiven = TRUE; break; case BJT_MOD_VJS: mods->BJTpotentialSubstrate = value->rValue; mods->BJTpotentialSubstrateGiven = TRUE; break; case BJT_MOD_MJS: mods->BJTexponentialSubstrate = value->rValue; mods->BJTexponentialSubstrateGiven = TRUE; break; case BJT_MOD_XTB: mods->BJTbetaExp = value->rValue; mods->BJTbetaExpGiven = TRUE; break; case BJT_MOD_EG: mods->BJTenergyGap = value->rValue; mods->BJTenergyGapGiven = TRUE; break; case BJT_MOD_XTI: mods->BJTtempExpIS = value->rValue; mods->BJTtempExpISGiven = TRUE; break; case BJT_MOD_FC: mods->BJTdepletionCapCoeff = value->rValue; mods->BJTdepletionCapCoeffGiven = TRUE; break; case BJT_MOD_KF: mods->BJTfNcoef = value->rValue; mods->BJTfNcoefGiven = TRUE; break; case BJT_MOD_AF: mods->BJTfNexp = value->rValue; mods->BJTfNexpGiven = TRUE; break; case BJT_MOD_ISS: mods->BJTsubSatCur = value->rValue; mods->BJTsubSatCurGiven = TRUE; break; case BJT_MOD_NS: mods->BJTemissionCoeffS = value->rValue; mods->BJTemissionCoeffSGiven = TRUE; break; case BJT_MOD_TLEV: mods->BJTtlev = value->iValue; mods->BJTtlevGiven = TRUE; break; case BJT_MOD_TLEVC: mods->BJTtlevc = value->iValue; mods->BJTtlevcGiven = TRUE; break; case BJT_MOD_TBF1: mods->BJTtbf1 = value->rValue; mods->BJTtbf1Given = TRUE; break; case BJT_MOD_TBF2: mods->BJTtbf2 = value->rValue; mods->BJTtbf2Given = TRUE; break; case BJT_MOD_TBR1: mods->BJTtbr1 = value->rValue; mods->BJTtbr1Given = TRUE; break; case BJT_MOD_TBR2: mods->BJTtbr2 = value->rValue; mods->BJTtbr2Given = TRUE; break; case BJT_MOD_TIKF1: mods->BJTtikf1 = value->rValue; mods->BJTtikf1Given = TRUE; break; case BJT_MOD_TIKF2: mods->BJTtikf2 = value->rValue; mods->BJTtikf2Given = TRUE; break; case BJT_MOD_TIKR1: mods->BJTtikr1 = value->rValue; mods->BJTtikr1Given = TRUE; break; case BJT_MOD_TIKR2: mods->BJTtikr2 = value->rValue; mods->BJTtikr2Given = TRUE; break; case BJT_MOD_TIRB1: mods->BJTtirb1 = value->rValue; mods->BJTtirb1Given = TRUE; break; case BJT_MOD_TIRB2: mods->BJTtirb2 = value->rValue; mods->BJTtirb2Given = TRUE; break; case BJT_MOD_TNC1: mods->BJTtnc1 = value->rValue; mods->BJTtnc1Given = TRUE; break; case BJT_MOD_TNC2: mods->BJTtnc2 = value->rValue; mods->BJTtnc2Given = TRUE; break; case BJT_MOD_TNE1: mods->BJTtne1 = value->rValue; mods->BJTtne1Given = TRUE; break; case BJT_MOD_TNE2: mods->BJTtne2 = value->rValue; mods->BJTtne2Given = TRUE; break; case BJT_MOD_TNF1: mods->BJTtnf1 = value->rValue; mods->BJTtnf1Given = TRUE; break; case BJT_MOD_TNF2: mods->BJTtnf2 = value->rValue; mods->BJTtnf2Given = TRUE; break; case BJT_MOD_TNR1: mods->BJTtnr1 = value->rValue; mods->BJTtnr1Given = TRUE; break; case BJT_MOD_TNR2: mods->BJTtnr2 = value->rValue; mods->BJTtnr2Given = TRUE; break; case BJT_MOD_TRB1: mods->BJTtrb1 = value->rValue; mods->BJTtrb1Given = TRUE; break; case BJT_MOD_TRB2: mods->BJTtrb2 = value->rValue; mods->BJTtrb2Given = TRUE; break; case BJT_MOD_TRC1: mods->BJTtrc1 = value->rValue; mods->BJTtrc1Given = TRUE; break; case BJT_MOD_TRC2: mods->BJTtrc2 = value->rValue; mods->BJTtrc2Given = TRUE; break; case BJT_MOD_TRE1: mods->BJTtre1 = value->rValue; mods->BJTtre1Given = TRUE; break; case BJT_MOD_TRE2: mods->BJTtre2 = value->rValue; mods->BJTtre2Given = TRUE; break; case BJT_MOD_TRM1: mods->BJTtrm1 = value->rValue; mods->BJTtrm1Given = TRUE; break; case BJT_MOD_TRM2: mods->BJTtrm2 = value->rValue; mods->BJTtrm2Given = TRUE; break; case BJT_MOD_TVAF1: mods->BJTtvaf1 = value->rValue; mods->BJTtvaf1Given = TRUE; break; case BJT_MOD_TVAF2: mods->BJTtvaf2 = value->rValue; mods->BJTtvaf2Given = TRUE; break; case BJT_MOD_TVAR1: mods->BJTtvar1 = value->rValue; mods->BJTtvar1Given = TRUE; break; case BJT_MOD_TVAR2: mods->BJTtvar2 = value->rValue; mods->BJTtvar2Given = TRUE; break; case BJT_MOD_CTC: mods->BJTctc = value->rValue; mods->BJTctcGiven = TRUE; break; case BJT_MOD_CTE: mods->BJTcte = value->rValue; mods->BJTcteGiven = TRUE; break; case BJT_MOD_CTS: mods->BJTcts = value->rValue; mods->BJTctsGiven = TRUE; break; case BJT_MOD_TVJE: mods->BJTtvje = value->rValue; mods->BJTtvjeGiven = TRUE; break; case BJT_MOD_TVJC: mods->BJTtvjc = value->rValue; mods->BJTtvjcGiven = TRUE; break; case BJT_MOD_TVJS: mods->BJTtvjs = value->rValue; mods->BJTtvjsGiven = TRUE; break; case BJT_MOD_TITF1: mods->BJTtitf1 = value->rValue; mods->BJTtitf1Given = TRUE; break; case BJT_MOD_TITF2: mods->BJTtitf2 = value->rValue; mods->BJTtitf2Given = TRUE; break; case BJT_MOD_TTF1: mods->BJTttf1 = value->rValue; mods->BJTttf1Given = TRUE; break; case BJT_MOD_TTF2: mods->BJTttf2 = value->rValue; mods->BJTttf2Given = TRUE; break; case BJT_MOD_TTR1: mods->BJTttr1 = value->rValue; mods->BJTttr1Given = TRUE; break; case BJT_MOD_TTR2: mods->BJTttr2 = value->rValue; mods->BJTttr2Given = TRUE; break; case BJT_MOD_TMJE1: mods->BJTtmje1 = value->rValue; mods->BJTtmje1Given = TRUE; break; case BJT_MOD_TMJE2: mods->BJTtmje2 = value->rValue; mods->BJTtmje2Given = TRUE; break; case BJT_MOD_TMJC1: mods->BJTtmjc1 = value->rValue; mods->BJTtmjc1Given = TRUE; break; case BJT_MOD_TMJC2: mods->BJTtmjc2 = value->rValue; mods->BJTtmjc2Given = TRUE; break; case BJT_MOD_TMJS1: mods->BJTtmjs1 = value->rValue; mods->BJTtmjs1Given = TRUE; break; case BJT_MOD_TMJS2: mods->BJTtmjs2 = value->rValue; mods->BJTtmjs2Given = TRUE; break; case BJT_MOD_TNS1: mods->BJTtns1 = value->rValue; mods->BJTtns1Given = TRUE; break; case BJT_MOD_TNS2: mods->BJTtns2 = value->rValue; mods->BJTtns2Given = TRUE; break; case BJT_MOD_NKF: mods->BJTnkf = value->rValue; mods->BJTnkfGiven = TRUE; break; case BJT_MOD_TIS1: mods->BJTtis1 = value->rValue; mods->BJTtis1Given = TRUE; break; case BJT_MOD_TIS2: mods->BJTtis2 = value->rValue; mods->BJTtis2Given = TRUE; break; case BJT_MOD_TISE1: mods->BJTtise1 = value->rValue; mods->BJTtise1Given = TRUE; break; case BJT_MOD_TISE2: mods->BJTtise2 = value->rValue; mods->BJTtise2Given = TRUE; break; case BJT_MOD_TISC1: mods->BJTtisc1 = value->rValue; mods->BJTtisc1Given = TRUE; break; case BJT_MOD_TISC2: mods->BJTtisc2 = value->rValue; mods->BJTtisc2Given = TRUE; break; case BJT_MOD_VBE_MAX: mods->BJTvbeMax = value->rValue; mods->BJTvbeMaxGiven = TRUE; break; case BJT_MOD_VBC_MAX: mods->BJTvbcMax = value->rValue; mods->BJTvbcMaxGiven = TRUE; break; case BJT_MOD_VCE_MAX: mods->BJTvceMax = value->rValue; mods->BJTvceMaxGiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bjt/bjtdel.c0000644000175000017500000000073513546075722021357 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* * This routine deletes a BJT instance from the circuit and frees * the storage it was using. */ #include "ngspice/ngspice.h" #include "bjtdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BJTdelete(GENinstance *gen_inst) { BJTinstance *inst = (BJTinstance *) gen_inst; FREE(inst->BJTsens); return OK; } tmpk8ny_4pz/src/spicelib/devices/bjt/bjtload.c0000644000175000017500000010040013546075722021520 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* * This is the function called each iteration to evaluate the * BJTs in the circuit and load them into the matrix as appropriate */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bjtdefs.h" #include "ngspice/const.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" int BJTload(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current resistance value into the * sparse matrix previously provided */ { BJTmodel *model = (BJTmodel*)inModel; BJTinstance *here; double arg1; double arg2; double arg3; double arg; double argtf; double c2; double c4; double capbc; double capbe; double capbx=0; double capsub=0; double cb; double cbc; double cbcn; double cbe; double cben; double cbhat; double cc; double cchat; double cdis; double ceq; double ceqbc; double ceqbe; double ceqbx; double geqsub; double ceqsub; double cex; double csat; double csubsat; double ctot; double czbc; double czbcf2; double czbe; double czbef2; double czbx; double czbxf2; double czsub; double delvbc; double delvbe; double denom; double dqbdvc; double dqbdve; double evbc; double evbcn; double evbe; double evben; double f1; double f2; double f3; double fcpc; double fcpe; double gbc; double gbcn; double gbe; double gben; double gcsub; double gcpr; double gepr; double geq; double geqbx; double geqcb; double gex; double gm; double gmu; double go; double gpi; double gx; double oik; double oikr; double ovtf; double pc; double pe; double ps; double q1; double q2; double qb; double rbpi; double rbpr; double sarg; double sqarg; double td; double temp; double tf; double tr; double vbc; double vbe; double vbx=0.0; double vce; double vsub=0.0; double vt; double vtc; double vte; double vtn; double vts; #ifndef PREDICTOR double xfact; #endif double xjrb; double xjtf; double xmc; double xme; double xms; double xtf; double evsub; double gdsub; double cdsub; int icheck=1; int ichk1; int error; int SenCond=0; double m; /* loop through all the models */ for( ; model != NULL; model = BJTnextModel(model)) { /* loop through all the instances of the model */ for (here = BJTinstances(model); here != NULL ; here=BJTnextInstance(here)) { vt = here->BJTtemp * CONSTKoverQ; m = here->BJTm; if(ckt->CKTsenInfo){ #ifdef SENSDEBUG printf("BJTload \n"); #endif /* SENSDEBUG */ if((ckt->CKTsenInfo->SENstatus == PERTURBATION)&& (here->BJTsenPertFlag == OFF)) continue; SenCond = here->BJTsenPertFlag; } gcsub=0; ceqsub=0; geqbx=0; ceqbx=0; geqcb=0; /* * dc model paramters */ csat=here->BJTtSatCur*here->BJTarea; csubsat=here->BJTtSubSatCur*here->BJTarea; rbpr=here->BJTtminBaseResist/here->BJTarea; rbpi=here->BJTtbaseResist/here->BJTarea-rbpr; gcpr=here->BJTtcollectorConduct*here->BJTarea; gepr=here->BJTtemitterConduct*here->BJTarea; oik=here->BJTtinvRollOffF/here->BJTarea; c2=here->BJTtBEleakCur*here->BJTarea; vte=here->BJTtleakBEemissionCoeff*vt; oikr=here->BJTtinvRollOffR/here->BJTarea; if (model->BJTsubs == VERTICAL) c4=here->BJTtBCleakCur * here->BJTareab; else c4=here->BJTtBCleakCur * here->BJTareac; vtc=here->BJTtleakBCemissionCoeff*vt; td=model->BJTexcessPhaseFactor; xjrb=here->BJTtbaseCurrentHalfResist*here->BJTarea; if(SenCond){ #ifdef SENSDEBUG printf("BJTsenPertFlag = ON \n"); #endif /* SENSDEBUG */ if((ckt->CKTsenInfo->SENmode == TRANSEN)&& (ckt->CKTmode & MODEINITTRAN)) { vbe = *(ckt->CKTstate1 + here->BJTvbe); vbc = *(ckt->CKTstate1 + here->BJTvbc); vbx=model->BJTtype*( *(ckt->CKTrhsOp+here->BJTbaseNode)- *(ckt->CKTrhsOp+here->BJTcolPrimeNode)); vsub=model->BJTtype*model->BJTsubs*( *(ckt->CKTrhsOp+here->BJTsubstNode)- *(ckt->CKTrhsOp+here->BJTsubstConNode)); } else{ vbe = *(ckt->CKTstate0 + here->BJTvbe); vbc = *(ckt->CKTstate0 + here->BJTvbc); if((ckt->CKTsenInfo->SENmode == DCSEN)|| (ckt->CKTsenInfo->SENmode == TRANSEN)){ vbx=model->BJTtype*( *(ckt->CKTrhsOld+here->BJTbaseNode)- *(ckt->CKTrhsOld+here->BJTcolPrimeNode)); vsub=model->BJTtype*model->BJTsubs*( *(ckt->CKTrhsOld+here->BJTsubstNode)- *(ckt->CKTrhsOld+here->BJTsubstConNode)); } if(ckt->CKTsenInfo->SENmode == ACSEN){ vbx=model->BJTtype*( *(ckt->CKTrhsOp+here->BJTbaseNode)- *(ckt->CKTrhsOp+here->BJTcolPrimeNode)); vsub=model->BJTtype*model->BJTsubs*( *(ckt->CKTrhsOp+here->BJTsubstNode)- *(ckt->CKTrhsOp+here->BJTsubstConNode)); } } goto next1; } /* * initialization */ icheck=1; if(ckt->CKTmode & MODEINITSMSIG) { vbe= *(ckt->CKTstate0 + here->BJTvbe); vbc= *(ckt->CKTstate0 + here->BJTvbc); vbx=model->BJTtype*( *(ckt->CKTrhsOld+here->BJTbaseNode)- *(ckt->CKTrhsOld+here->BJTcolPrimeNode)); vsub=model->BJTtype*model->BJTsubs*( *(ckt->CKTrhsOld+here->BJTsubstNode)- *(ckt->CKTrhsOld+here->BJTsubstConNode)); } else if(ckt->CKTmode & MODEINITTRAN) { vbe = *(ckt->CKTstate1 + here->BJTvbe); vbc = *(ckt->CKTstate1 + here->BJTvbc); vbx=model->BJTtype*( *(ckt->CKTrhsOld+here->BJTbaseNode)- *(ckt->CKTrhsOld+here->BJTcolPrimeNode)); vsub=model->BJTtype*model->BJTsubs*( *(ckt->CKTrhsOld+here->BJTsubstNode)- *(ckt->CKTrhsOld+here->BJTsubstConNode)); if( (ckt->CKTmode & MODETRAN) && (ckt->CKTmode & MODEUIC) ) { vbx=model->BJTtype*(here->BJTicVBE-here->BJTicVCE); vsub=0; } } else if((ckt->CKTmode & MODEINITJCT) && (ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)){ vbe=model->BJTtype*here->BJTicVBE; vce=model->BJTtype*here->BJTicVCE; vbc=vbe-vce; vbx=vbc; vsub=0; } else if((ckt->CKTmode & MODEINITJCT) && (here->BJToff==0)) { vbe=here->BJTtVcrit; vbc=0; /* ERROR: need to initialize VSUB, VBX here */ vsub=vbx=0; } else if((ckt->CKTmode & MODEINITJCT) || ( (ckt->CKTmode & MODEINITFIX) && (here->BJToff!=0))) { vbe=0; vbc=0; /* ERROR: need to initialize VSUB, VBX here */ vsub=vbx=0; } else { #ifndef PREDICTOR if(ckt->CKTmode & MODEINITPRED) { xfact = ckt->CKTdelta/ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->BJTvbe) = *(ckt->CKTstate1 + here->BJTvbe); vbe = (1+xfact)**(ckt->CKTstate1 + here->BJTvbe)- xfact* *(ckt->CKTstate2 + here->BJTvbe); *(ckt->CKTstate0 + here->BJTvbc) = *(ckt->CKTstate1 + here->BJTvbc); vbc = (1+xfact)**(ckt->CKTstate1 + here->BJTvbc)- xfact* *(ckt->CKTstate2 + here->BJTvbc); *(ckt->CKTstate0 + here->BJTcc) = *(ckt->CKTstate1 + here->BJTcc); *(ckt->CKTstate0 + here->BJTcb) = *(ckt->CKTstate1 + here->BJTcb); *(ckt->CKTstate0 + here->BJTgpi) = *(ckt->CKTstate1 + here->BJTgpi); *(ckt->CKTstate0 + here->BJTgmu) = *(ckt->CKTstate1 + here->BJTgmu); *(ckt->CKTstate0 + here->BJTgm) = *(ckt->CKTstate1 + here->BJTgm); *(ckt->CKTstate0 + here->BJTgo) = *(ckt->CKTstate1 + here->BJTgo); *(ckt->CKTstate0 + here->BJTgx) = *(ckt->CKTstate1 + here->BJTgx); *(ckt->CKTstate0 + here->BJTvsub) = *(ckt->CKTstate1 + here->BJTvsub); vsub = (1+xfact)**(ckt->CKTstate1 + here->BJTvsub)- xfact* *(ckt->CKTstate2 + here->BJTvsub); } else { #endif /* PREDICTOR */ /* * compute new nonlinear branch voltages */ vbe=model->BJTtype*( *(ckt->CKTrhsOld+here->BJTbasePrimeNode)- *(ckt->CKTrhsOld+here->BJTemitPrimeNode)); vbc=model->BJTtype*( *(ckt->CKTrhsOld+here->BJTbasePrimeNode)- *(ckt->CKTrhsOld+here->BJTcolPrimeNode)); vsub=model->BJTtype*model->BJTsubs*( *(ckt->CKTrhsOld+here->BJTsubstNode)- *(ckt->CKTrhsOld+here->BJTsubstConNode)); #ifndef PREDICTOR } #endif /* PREDICTOR */ delvbe=vbe- *(ckt->CKTstate0 + here->BJTvbe); delvbc=vbc- *(ckt->CKTstate0 + here->BJTvbc); vbx=model->BJTtype*( *(ckt->CKTrhsOld+here->BJTbaseNode)- *(ckt->CKTrhsOld+here->BJTcolPrimeNode)); vsub=model->BJTtype*model->BJTsubs*( *(ckt->CKTrhsOld+here->BJTsubstNode)- *(ckt->CKTrhsOld+here->BJTsubstConNode)); cchat= *(ckt->CKTstate0 + here->BJTcc)+(*(ckt->CKTstate0 + here->BJTgm)+ *(ckt->CKTstate0 + here->BJTgo))*delvbe- (*(ckt->CKTstate0 + here->BJTgo)+*(ckt->CKTstate0 + here->BJTgmu))*delvbc; cbhat= *(ckt->CKTstate0 + here->BJTcb)+ *(ckt->CKTstate0 + here->BJTgpi)*delvbe+ *(ckt->CKTstate0 + here->BJTgmu)* delvbc; #ifndef NOBYPASS /* * bypass if solution has not changed */ /* the following collections of if's would be just one * if the average compiler could handle it, but many * find the expression too complicated, thus the split. */ if( (ckt->CKTbypass) && (!(ckt->CKTmode & MODEINITPRED)) && (fabs(delvbe) < (ckt->CKTreltol*MAX(fabs(vbe), fabs(*(ckt->CKTstate0 + here->BJTvbe)))+ ckt->CKTvoltTol)) ) if( (fabs(delvbc) < ckt->CKTreltol*MAX(fabs(vbc), fabs(*(ckt->CKTstate0 + here->BJTvbc)))+ ckt->CKTvoltTol) ) if( (fabs(cchat-*(ckt->CKTstate0 + here->BJTcc)) < ckt->CKTreltol* MAX(fabs(cchat), fabs(*(ckt->CKTstate0 + here->BJTcc)))+ ckt->CKTabstol) ) if( (fabs(cbhat-*(ckt->CKTstate0 + here->BJTcb)) < ckt->CKTreltol* MAX(fabs(cbhat), fabs(*(ckt->CKTstate0 + here->BJTcb)))+ ckt->CKTabstol) ) { /* * bypassing.... */ vbe = *(ckt->CKTstate0 + here->BJTvbe); vbc = *(ckt->CKTstate0 + here->BJTvbc); cc = *(ckt->CKTstate0 + here->BJTcc); cb = *(ckt->CKTstate0 + here->BJTcb); gpi = *(ckt->CKTstate0 + here->BJTgpi); gmu = *(ckt->CKTstate0 + here->BJTgmu); gm = *(ckt->CKTstate0 + here->BJTgm); go = *(ckt->CKTstate0 + here->BJTgo); gx = *(ckt->CKTstate0 + here->BJTgx); geqcb = *(ckt->CKTstate0 + here->BJTgeqcb); gcsub = *(ckt->CKTstate0 + here->BJTgcsub); geqbx = *(ckt->CKTstate0 + here->BJTgeqbx); vsub = *(ckt->CKTstate0 + here->BJTvsub); gdsub = *(ckt->CKTstate0 + here->BJTgdsub); cdsub = *(ckt->CKTstate0 + here->BJTcdsub); goto load; } #endif /*NOBYPASS*/ /* * limit nonlinear branch voltages */ ichk1=1; vbe = DEVpnjlim(vbe,*(ckt->CKTstate0 + here->BJTvbe),vt, here->BJTtVcrit,&icheck); vbc = DEVpnjlim(vbc,*(ckt->CKTstate0 + here->BJTvbc),vt, here->BJTtVcrit,&ichk1); if (ichk1 == 1) icheck=1; vsub = DEVpnjlim(vsub,*(ckt->CKTstate0 + here->BJTvsub),vt, here->BJTtSubVcrit,&ichk1); if (ichk1 == 1) icheck=1; } /* * determine dc current and derivitives */ next1: vtn=vt*here->BJTtemissionCoeffF; if(vbe >= -3*vtn){ evbe=exp(vbe/vtn); cbe=csat*(evbe-1); gbe=csat*evbe/vtn; } else { arg=3*vtn/(vbe*CONSTe); arg = arg * arg * arg; cbe = -csat*(1+arg); gbe = csat*3*arg/vbe; } if (c2 == 0) { cben=0; gben=0; } else { if(vbe >= -3*vte){ evben=exp(vbe/vte); cben=c2*(evben-1); gben=c2*evben/vte; } else { arg=3*vte/(vbe*CONSTe); arg = arg * arg * arg; cben = -c2*(1+arg); gben = c2*3*arg/vbe; } } gben+=ckt->CKTgmin; cben+=ckt->CKTgmin*vbe; vtn=vt*here->BJTtemissionCoeffR; if(vbc >= -3*vtn) { evbc=exp(vbc/vtn); cbc=csat*(evbc-1); gbc=csat*evbc/vtn; } else { arg=3*vtn/(vbc*CONSTe); arg = arg * arg * arg; cbc = -csat*(1+arg); gbc = csat*3*arg/vbc; } if (c4 == 0) { cbcn=0; gbcn=0; } else { if(vbc >= -3*vtc) { evbcn=exp(vbc/vtc); cbcn=c4*(evbcn-1); gbcn=c4*evbcn/vtc; } else { arg=3*vtc/(vbc*CONSTe); arg = arg * arg * arg; cbcn = -c4*(1+arg); gbcn = c4*3*arg/vbc; } } gbcn+=ckt->CKTgmin; cbcn+=ckt->CKTgmin*vbc; vts=vt*here->BJTtemissionCoeffS; if(vsub <= -3*vts) { arg=3*vts/(vsub*CONSTe); arg = arg * arg * arg; gdsub = csubsat*3*arg/vsub+ckt->CKTgmin; cdsub = -csubsat*(1+arg)+ckt->CKTgmin*vsub; } else { evsub = exp(MIN(MAX_EXP_ARG,vsub/vts)); gdsub = csubsat*evsub/vts + ckt->CKTgmin; cdsub = csubsat*(evsub-1) + ckt->CKTgmin*vsub; } /* * determine base charge terms */ q1=1/(1-here->BJTtinvEarlyVoltF*vbc-here->BJTtinvEarlyVoltR*vbe); if(oik == 0 && oikr == 0) { qb=q1; dqbdve=q1*qb*here->BJTtinvEarlyVoltR; dqbdvc=q1*qb*here->BJTtinvEarlyVoltF; } else { q2=oik*cbe+oikr*cbc; arg=MAX(0,1+4*q2); sqarg=1; if(!model->BJTnkfGiven) { if(arg != 0) sqarg=sqrt(arg); } else { if(arg != 0) sqarg=pow(arg,model->BJTnkf); } qb=q1*(1+sqarg)/2; if(!model->BJTnkfGiven) { dqbdve=q1*(qb*here->BJTtinvEarlyVoltR+oik*gbe/sqarg); dqbdvc=q1*(qb*here->BJTtinvEarlyVoltF+oikr*gbc/sqarg); } else { dqbdve=q1*(qb*here->BJTtinvEarlyVoltR+oik*gbe*2*sqarg*model->BJTnkf/arg); dqbdvc=q1*(qb*here->BJTtinvEarlyVoltF+oikr*gbc*2*sqarg*model->BJTnkf/arg); } } /* * weil's approx. for excess phase applied with backward- * euler integration */ cc=0; cex=cbe; gex=gbe; if(ckt->CKTmode & (MODETRAN | MODEAC) && td != 0) { arg1=ckt->CKTdelta/td; arg2=3*arg1; arg1=arg2*arg1; denom=1+arg1+arg2; arg3=arg1/denom; if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->BJTcexbc)=cbe/qb; *(ckt->CKTstate2 + here->BJTcexbc)= *(ckt->CKTstate1 + here->BJTcexbc); } cc=(*(ckt->CKTstate1 + here->BJTcexbc)*(1+ckt->CKTdelta/ ckt->CKTdeltaOld[1]+arg2)- *(ckt->CKTstate2 + here->BJTcexbc)*ckt->CKTdelta/ ckt->CKTdeltaOld[1])/denom; cex=cbe*arg3; gex=gbe*arg3; *(ckt->CKTstate0 + here->BJTcexbc)=cc+cex/qb; } /* * determine dc incremental conductances */ cc=cc+(cex-cbc)/qb-cbc/here->BJTtBetaR-cbcn; cb=cbe/here->BJTtBetaF+cben+cbc/here->BJTtBetaR+cbcn; gx=rbpr+rbpi/qb; if(xjrb != 0) { arg1=MAX(cb/xjrb,1e-9); arg2=(-1+sqrt(1+14.59025*arg1))/2.4317/sqrt(arg1); arg1=tan(arg2); gx=rbpr+3*rbpi*(arg1-arg2)/arg2/arg1/arg1; } if(gx != 0) gx=1/gx; gpi=gbe/here->BJTtBetaF+gben; gmu=gbc/here->BJTtBetaR+gbcn; go=(gbc+(cex-cbc)*dqbdvc/qb)/qb; gm=(gex-(cex-cbc)*dqbdve/qb)/qb-go; if( (ckt->CKTmode & (MODEDCTRANCURVE | MODETRAN | MODEAC)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) || (ckt->CKTmode & MODEINITSMSIG)) { /* * charge storage elements */ tf=here->BJTttransitTimeF; tr=here->BJTttransitTimeR; czbe=here->BJTtBEcap*here->BJTarea; pe=here->BJTtBEpot; xme=here->BJTtjunctionExpBE; cdis=model->BJTbaseFractionBCcap; if (model->BJTsubs == VERTICAL) ctot=here->BJTtBCcap*here->BJTareab; else ctot=here->BJTtBCcap*here->BJTareac; czbc=ctot*cdis; czbx=ctot-czbc; pc=here->BJTtBCpot; xmc=here->BJTtjunctionExpBC; fcpe=here->BJTtDepCap; if (model->BJTsubs == VERTICAL) czsub=here->BJTtSubcap*here->BJTareac; else czsub=here->BJTtSubcap*here->BJTareab; ps=here->BJTtSubpot; xms=here->BJTtjunctionExpSub; xtf=model->BJTtransitTimeBiasCoeffF; ovtf=model->BJTtransitTimeVBCFactor; xjtf=here->BJTttransitTimeHighCurrentF*here->BJTarea; if(tf != 0 && vbe >0) { argtf=0; arg2=0; arg3=0; if(xtf != 0){ argtf=xtf; if(ovtf != 0) { argtf=argtf*exp(vbc*ovtf); } arg2=argtf; if(xjtf != 0) { temp=cbe/(cbe+xjtf); argtf=argtf*temp*temp; arg2=argtf*(3-temp-temp); } arg3=cbe*argtf*ovtf; } cbe=cbe*(1+argtf)/qb; gbe=(gbe*(1+arg2)-cbe*dqbdve)/qb; geqcb=tf*(arg3-cbe*dqbdvc)/qb; } if (vbe < fcpe) { arg=1-vbe/pe; sarg=exp(-xme*log(arg)); *(ckt->CKTstate0 + here->BJTqbe)=tf*cbe+pe*czbe* (1-arg*sarg)/(1-xme); capbe=tf*gbe+czbe*sarg; } else { f1=here->BJTtf1; f2=here->BJTtf2; f3=here->BJTtf3; czbef2=czbe/f2; *(ckt->CKTstate0 + here->BJTqbe) = tf*cbe+czbe*f1+czbef2* (f3*(vbe-fcpe) +(xme/(pe+pe))*(vbe*vbe-fcpe*fcpe)); capbe=tf*gbe+czbef2*(f3+xme*vbe/pe); } fcpc=here->BJTtf4; f1=here->BJTtf5; f2=here->BJTtf6; f3=here->BJTtf7; if (vbc < fcpc) { arg=1-vbc/pc; sarg=exp(-xmc*log(arg)); *(ckt->CKTstate0 + here->BJTqbc) = tr*cbc+pc*czbc*( 1-arg*sarg)/(1-xmc); capbc=tr*gbc+czbc*sarg; } else { czbcf2=czbc/f2; *(ckt->CKTstate0 + here->BJTqbc) = tr*cbc+czbc*f1+czbcf2* (f3*(vbc-fcpc) +(xmc/(pc+pc))*(vbc*vbc-fcpc*fcpc)); capbc=tr*gbc+czbcf2*(f3+xmc*vbc/pc); } if(vbx < fcpc) { arg=1-vbx/pc; sarg=exp(-xmc*log(arg)); *(ckt->CKTstate0 + here->BJTqbx)= pc*czbx* (1-arg*sarg)/(1-xmc); capbx=czbx*sarg; } else { czbxf2=czbx/f2; *(ckt->CKTstate0 + here->BJTqbx)=czbx*f1+czbxf2* (f3*(vbx-fcpc)+(xmc/(pc+pc))*(vbx*vbx-fcpc*fcpc)); capbx=czbxf2*(f3+xmc*vbx/pc); } if(vsub < 0){ arg=1-vsub/ps; sarg=exp(-xms*log(arg)); *(ckt->CKTstate0 + here->BJTqsub) = ps*czsub*(1-arg*sarg)/ (1-xms); capsub=czsub*sarg; } else { *(ckt->CKTstate0 + here->BJTqsub) = vsub*czsub*(1+xms*vsub/ (2*ps)); capsub=czsub*(1+xms*vsub/ps); } here->BJTcapbe = capbe; here->BJTcapbc = capbc; here->BJTcapsub = capsub; here->BJTcapbx = capbx; /* * store small-signal parameters */ if ( (!(ckt->CKTmode & MODETRANOP))|| (!(ckt->CKTmode & MODEUIC)) ) { if(ckt->CKTmode & MODEINITSMSIG) { *(ckt->CKTstate0 + here->BJTcqbe) = capbe; *(ckt->CKTstate0 + here->BJTcqbc) = capbc; *(ckt->CKTstate0 + here->BJTcqsub) = capsub; *(ckt->CKTstate0 + here->BJTcqbx) = capbx; *(ckt->CKTstate0 + here->BJTcexbc) = geqcb; if(SenCond){ *(ckt->CKTstate0 + here->BJTcc) = cc; *(ckt->CKTstate0 + here->BJTcb) = cb; *(ckt->CKTstate0 + here->BJTgpi) = gpi; *(ckt->CKTstate0 + here->BJTgmu) = gmu; *(ckt->CKTstate0 + here->BJTgm) = gm; *(ckt->CKTstate0 + here->BJTgo) = go; *(ckt->CKTstate0 + here->BJTgx) = gx; *(ckt->CKTstate0 + here->BJTgcsub) = gcsub; *(ckt->CKTstate0 + here->BJTgeqbx) = geqbx; } #ifdef SENSDEBUG printf("storing small signal parameters for op\n"); printf("capbe = %.7e ,capbc = %.7e\n",capbe,capbc); printf("capsub = %.7e ,capbx = %.7e\n",capsub,capbx); printf("geqcb = %.7e ,gpi = %.7e\n",geqcb,gpi); printf("gmu = %.7e ,gm = %.7e\n",gmu,gm); printf("go = %.7e ,gx = %.7e\n",go,gx); printf("gcsub = %.7e ,geqbx = %.7e\n",gcsub,geqbx); printf("cc = %.7e ,cb = %.7e\n",cc,cb); #endif /* SENSDEBUG */ continue; /* go to 1000 */ } /* * transient analysis */ if(SenCond && ckt->CKTsenInfo->SENmode == TRANSEN){ *(ckt->CKTstate0 + here->BJTcc) = cc; *(ckt->CKTstate0 + here->BJTcb) = cb; *(ckt->CKTstate0 + here->BJTgx) = gx; continue; } if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->BJTqbe) = *(ckt->CKTstate0 + here->BJTqbe) ; *(ckt->CKTstate1 + here->BJTqbc) = *(ckt->CKTstate0 + here->BJTqbc) ; *(ckt->CKTstate1 + here->BJTqbx) = *(ckt->CKTstate0 + here->BJTqbx) ; *(ckt->CKTstate1 + here->BJTqsub) = *(ckt->CKTstate0 + here->BJTqsub) ; } error = NIintegrate(ckt,&geq,&ceq,capbe,here->BJTqbe); if(error) return(error); geqcb=geqcb*ckt->CKTag[0]; gpi=gpi+geq; cb=cb+*(ckt->CKTstate0 + here->BJTcqbe); error = NIintegrate(ckt,&geq,&ceq,capbc,here->BJTqbc); if(error) return(error); gmu=gmu+geq; cb=cb+*(ckt->CKTstate0 + here->BJTcqbc); cc=cc-*(ckt->CKTstate0 + here->BJTcqbc); if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->BJTcqbe) = *(ckt->CKTstate0 + here->BJTcqbe); *(ckt->CKTstate1 + here->BJTcqbc) = *(ckt->CKTstate0 + here->BJTcqbc); } } } if(SenCond) goto next2; /* * check convergence */ if ( (!(ckt->CKTmode & MODEINITFIX))||(!(here->BJToff))) { if (icheck == 1) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; } } /* * charge storage for c-s and b-x junctions */ if(ckt->CKTmode & (MODETRAN | MODEAC)) { error = NIintegrate(ckt,&gcsub,&ceq,capsub,here->BJTqsub); if(error) return(error); error = NIintegrate(ckt,&geqbx,&ceq,capbx,here->BJTqbx); if(error) return(error); if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->BJTcqbx) = *(ckt->CKTstate0 + here->BJTcqbx); *(ckt->CKTstate1 + here->BJTcqsub) = *(ckt->CKTstate0 + here->BJTcqsub); } } next2: *(ckt->CKTstate0 + here->BJTvbe) = vbe; *(ckt->CKTstate0 + here->BJTvbc) = vbc; *(ckt->CKTstate0 + here->BJTcc) = cc; *(ckt->CKTstate0 + here->BJTcb) = cb; *(ckt->CKTstate0 + here->BJTgpi) = gpi; *(ckt->CKTstate0 + here->BJTgmu) = gmu; *(ckt->CKTstate0 + here->BJTgm) = gm; *(ckt->CKTstate0 + here->BJTgo) = go; *(ckt->CKTstate0 + here->BJTgx) = gx; *(ckt->CKTstate0 + here->BJTgeqcb) = geqcb; *(ckt->CKTstate0 + here->BJTgcsub) = gcsub; *(ckt->CKTstate0 + here->BJTgeqbx) = geqbx; *(ckt->CKTstate0 + here->BJTvsub) = vsub; *(ckt->CKTstate0 + here->BJTgdsub) = gdsub; *(ckt->CKTstate0 + here->BJTcdsub) = cdsub; /* Do not load the Jacobian and the rhs if perturbation is being carried out */ if(SenCond)continue; #ifndef NOBYPASS load: #endif /* * load current excitation vector */ geqsub = gcsub + gdsub; ceqsub=model->BJTtype * model->BJTsubs * (*(ckt->CKTstate0 + here->BJTcqsub) + cdsub - vsub*geqsub); ceqbx=model->BJTtype * (*(ckt->CKTstate0 + here->BJTcqbx) - vbx * geqbx); ceqbe=model->BJTtype * (cc + cb - vbe * (gm + go + gpi) + vbc * (go - geqcb)); ceqbc=model->BJTtype * (-cc + vbe * (gm + go) - vbc * (gmu + go)); *(ckt->CKTrhs + here->BJTbaseNode) += m * (-ceqbx); *(ckt->CKTrhs + here->BJTcolPrimeNode) += m * (ceqbx+ceqbc); *(ckt->CKTrhs + here->BJTsubstConNode) += m * ceqsub; *(ckt->CKTrhs + here->BJTbasePrimeNode) += m * (-ceqbe-ceqbc); *(ckt->CKTrhs + here->BJTemitPrimeNode) += m * (ceqbe); *(ckt->CKTrhs + here->BJTsubstNode) += m * (-ceqsub); /* * load y matrix */ *(here->BJTcolColPtr) += m * (gcpr); *(here->BJTbaseBasePtr) += m * (gx+geqbx); *(here->BJTemitEmitPtr) += m * (gepr); *(here->BJTcolPrimeColPrimePtr) += m * (gmu+go+gcpr+geqbx); *(here->BJTsubstConSubstConPtr) += m * (geqsub); *(here->BJTbasePrimeBasePrimePtr) += m * (gx +gpi+gmu+geqcb); *(here->BJTemitPrimeEmitPrimePtr) += m * (gpi+gepr+gm+go); *(here->BJTcolColPrimePtr) += m * (-gcpr); *(here->BJTbaseBasePrimePtr) += m * (-gx); *(here->BJTemitEmitPrimePtr) += m * (-gepr); *(here->BJTcolPrimeColPtr) += m * (-gcpr); *(here->BJTcolPrimeBasePrimePtr) += m * (-gmu+gm); *(here->BJTcolPrimeEmitPrimePtr) += m * (-gm-go); *(here->BJTbasePrimeBasePtr) += m * (-gx); *(here->BJTbasePrimeColPrimePtr) += m * (-gmu-geqcb); *(here->BJTbasePrimeEmitPrimePtr) += m * (-gpi); *(here->BJTemitPrimeEmitPtr) += m * (-gepr); *(here->BJTemitPrimeColPrimePtr) += m * (-go+geqcb); *(here->BJTemitPrimeBasePrimePtr) += m * (-gpi-gm-geqcb); *(here->BJTsubstSubstPtr) += m * (geqsub); *(here->BJTsubstConSubstPtr) += m * (-geqsub); *(here->BJTsubstSubstConPtr) += m * (-geqsub); *(here->BJTbaseColPrimePtr) += m * (-geqbx); *(here->BJTcolPrimeBasePtr) += m * (-geqbx); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bjt/bjtparam.c0000644000175000017500000000436413546075722021715 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* * This routine sets instance parameters for * BJTs in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "bjtdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int BJTparam(int param, IFvalue *value, GENinstance *instPtr, IFvalue *select) { BJTinstance *here = (BJTinstance*)instPtr; NG_IGNORE(select); switch(param) { case BJT_AREA: here->BJTarea = value->rValue; here->BJTareaGiven = TRUE; break; case BJT_AREAB: here->BJTareab = value->rValue; here->BJTareabGiven = TRUE; break; case BJT_AREAC: here->BJTareac = value->rValue; here->BJTareacGiven = TRUE; break; case BJT_M: here->BJTm = value->rValue; here->BJTmGiven = TRUE; break; case BJT_TEMP: here->BJTtemp = value->rValue + CONSTCtoK; here->BJTtempGiven = TRUE; break; case BJT_DTEMP: here->BJTdtemp = value->rValue; here->BJTdtempGiven = TRUE; break; case BJT_OFF: here->BJToff = (value->iValue != 0); break; case BJT_IC_VBE: here->BJTicVBE = value->rValue; here->BJTicVBEGiven = TRUE; break; case BJT_IC_VCE: here->BJTicVCE = value->rValue; here->BJTicVCEGiven = TRUE; break; case BJT_AREA_SENS: here->BJTsenParmNo = value->iValue; break; case BJT_IC : switch(value->v.numValue) { case 2: here->BJTicVCE = *(value->v.vec.rVec+1); here->BJTicVCEGiven = TRUE; case 1: here->BJTicVBE = *(value->v.vec.rVec); here->BJTicVBEGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bjt/bjtnoise.c0000644000175000017500000001400713546075722021725 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Gary W. Ng **********/ #include "ngspice/ngspice.h" #include "bjtdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" /* * BJTnoise (mode, operation, firstModel, ckt, data, OnDens) * * This routine names and evaluates all of the noise sources * associated with BJT's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the BJT's is summed with the variable "OnDens". */ int BJTnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; BJTmodel *firstModel = (BJTmodel *) genmodel; BJTmodel *model; BJTinstance *inst; double tempOnoise; double tempInoise; double noizDens[BJTNSRCS]; double lnNdens[BJTNSRCS]; int i; /* define the names of the noise sources */ static char *BJTnNames[BJTNSRCS] = { /* Note that we have to keep the order consistent with the strchr definitions in BJTdefs.h */ "_rc", /* noise due to rc */ "_rb", /* noise due to rb */ "_re", /* noise due to re */ "_ic", /* noise due to ic */ "_ib", /* noise due to ib */ "_1overf", /* flicker (1/f) noise */ "" /* total transistor noise */ }; for (model=firstModel; model != NULL; model=BJTnextModel(model)) { for (inst=BJTinstances(model); inst != NULL; inst=BJTnextInstance(inst)) { switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i=0; i < BJTNSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_%s%s", inst->BJTname, BJTnNames[i]); } break; case INT_NOIZ: for (i=0; i < BJTNSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total_%s%s", inst->BJTname, BJTnNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total_%s%s", inst->BJTname, BJTnNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: NevalSrc(&noizDens[BJTRCNOIZ],&lnNdens[BJTRCNOIZ], ckt,THERMNOISE,inst->BJTcolPrimeNode,inst->BJTcolNode, inst->BJTtcollectorConduct * inst->BJTarea * inst->BJTm); NevalSrc(&noizDens[BJTRBNOIZ],&lnNdens[BJTRBNOIZ], ckt,THERMNOISE,inst->BJTbasePrimeNode,inst->BJTbaseNode, *(ckt->CKTstate0 + inst->BJTgx) * inst->BJTm); NevalSrc(&noizDens[BJT_RE_NOISE],&lnNdens[BJT_RE_NOISE], ckt,THERMNOISE,inst->BJTemitPrimeNode,inst->BJTemitNode, inst->BJTtemitterConduct * inst->BJTarea * inst-> BJTm); NevalSrc(&noizDens[BJTICNOIZ],&lnNdens[BJTICNOIZ], ckt,SHOTNOISE,inst->BJTcolPrimeNode, inst->BJTemitPrimeNode, *(ckt->CKTstate0 + inst->BJTcc) * inst->BJTm); NevalSrc(&noizDens[BJTIBNOIZ],&lnNdens[BJTIBNOIZ], ckt,SHOTNOISE,inst->BJTbasePrimeNode, inst->BJTemitPrimeNode, *(ckt->CKTstate0 + inst->BJTcb) * inst->BJTm); NevalSrc(&noizDens[BJTFLNOIZ], NULL, ckt, N_GAIN,inst->BJTbasePrimeNode, inst->BJTemitPrimeNode, (double)0.0); noizDens[BJTFLNOIZ] *= inst->BJTm * model->BJTfNcoef * exp(model->BJTfNexp * log(MAX(fabs(*(ckt->CKTstate0 + inst->BJTcb)),N_MINLOG))) / data->freq; lnNdens[BJTFLNOIZ] = log(MAX(noizDens[BJTFLNOIZ],N_MINLOG)); noizDens[BJTTOTNOIZ] = noizDens[BJTRCNOIZ] + noizDens[BJTRBNOIZ] + noizDens[BJT_RE_NOISE] + noizDens[BJTICNOIZ] + noizDens[BJTIBNOIZ] + noizDens[BJTFLNOIZ]; lnNdens[BJTTOTNOIZ] = log(noizDens[BJTTOTNOIZ]); *OnDens += noizDens[BJTTOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to */ /* initialize our "history" variables */ for (i=0; i < BJTNSRCS; i++) { inst->BJTnVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i=0; i < BJTNSRCS; i++) { inst->BJTnVar[OUTNOIZ][i] = 0.0; inst->BJTnVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0 (we have to integrate) */ /* In order to get the best curve fit, we have to integrate each component separately */ for (i=0; i < BJTNSRCS; i++) { if (i != BJTTOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], inst->BJTnVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv , lnNdens[i] + data->lnGainInv, inst->BJTnVar[LNLSTDENS][i] + data->lnGainInv, data); inst->BJTnVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { inst->BJTnVar[OUTNOIZ][i] += tempOnoise; inst->BJTnVar[OUTNOIZ][BJTTOTNOIZ] += tempOnoise; inst->BJTnVar[INNOIZ][i] += tempInoise; inst->BJTnVar[INNOIZ][BJTTOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i=0; i < BJTNSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i=0; i < BJTNSRCS; i++) { data->outpVector[data->outNumber++] = inst->BJTnVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = inst->BJTnVar[INNOIZ][i]; } } /* if */ break; } /* switch (mode) */ break; case N_CLOSE: return (OK); /* do nothing, the main calling routine will close */ break; /* the plots */ } /* switch (operation) */ } /* for inst */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bjt/bjtconv.c0000644000175000017500000000464513546075722021564 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* * This routine performs the device convergence test for * BJTs in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bjtdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BJTconvTest(GENmodel *inModel, CKTcircuit *ckt) { BJTinstance *here; BJTmodel *model = (BJTmodel *) inModel; double tol; double cc; double cchat; double cb; double cbhat; double vbe; double vbc; double delvbe; double delvbc; for( ; model != NULL; model = BJTnextModel(model)) { for(here=BJTinstances(model);here!=NULL;here = BJTnextInstance(here)){ vbe=model->BJTtype*( *(ckt->CKTrhsOld+here->BJTbasePrimeNode)- *(ckt->CKTrhsOld+here->BJTemitPrimeNode)); vbc=model->BJTtype*( *(ckt->CKTrhsOld+here->BJTbasePrimeNode)- *(ckt->CKTrhsOld+here->BJTcolPrimeNode)); delvbe=vbe- *(ckt->CKTstate0 + here->BJTvbe); delvbc=vbc- *(ckt->CKTstate0 + here->BJTvbc); cchat= *(ckt->CKTstate0 + here->BJTcc)+(*(ckt->CKTstate0 + here->BJTgm)+ *(ckt->CKTstate0 + here->BJTgo))*delvbe- (*(ckt->CKTstate0 + here->BJTgo)+*(ckt->CKTstate0 + here->BJTgmu))*delvbc; cbhat= *(ckt->CKTstate0 + here->BJTcb)+ *(ckt->CKTstate0 + here->BJTgpi)*delvbe+ *(ckt->CKTstate0 + here->BJTgmu)* delvbc; cc = *(ckt->CKTstate0 + here->BJTcc); cb = *(ckt->CKTstate0 + here->BJTcb); /* * check convergence */ tol=ckt->CKTreltol*MAX(fabs(cchat),fabs(cc))+ckt->CKTabstol; if (fabs(cchat-cc) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { tol=ckt->CKTreltol*MAX(fabs(cbhat),fabs(cb))+ ckt->CKTabstol; if (fabs(cbhat-cb) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bjt/bjtgetic.c0000644000175000017500000000225713546075722021707 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* * This routine gets the device initial conditions for the BJTs * from the RHS vector */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bjtdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BJTgetic(GENmodel *inModel, CKTcircuit *ckt) { BJTmodel *model = (BJTmodel*)inModel; BJTinstance *here; /* * grab initial conditions out of rhs array. User specified, so use * external nodes to get values */ for( ; model ; model = BJTnextModel(model)) { for(here = BJTinstances(model); here ; here = BJTnextInstance(here)) { if(!here->BJTicVBEGiven) { here->BJTicVBE = *(ckt->CKTrhs + here->BJTbaseNode) - *(ckt->CKTrhs + here->BJTemitNode); } if(!here->BJTicVCEGiven) { here->BJTicVCE = *(ckt->CKTrhs + here->BJTcolNode) - *(ckt->CKTrhs + here->BJTemitNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bjt/bjtsupd.c0000644000175000017500000001344213546075722021565 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ /* update the charge sensitivities and their derivatives */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "bjtdefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/ifsim.h" #include "ngspice/suffix.h" int BJTsUpdate(GENmodel *inModel, CKTcircuit *ckt) { BJTmodel *model = (BJTmodel*)inModel; BJTinstance *here; int iparmno; double sb; double sbprm; double scprm; double seprm; double ss; double sxpbe; double sxpbc; double sxpsub; double sxpbx; double dummy1; double dummy2; SENstruct *info; info = ckt->CKTsenInfo; if(ckt->CKTtime == 0) return(OK); #ifdef SENSDEBUG printf("BJTsenUpdate\n"); printf("CKTtime = %.5e\n",ckt->CKTtime); #endif /* SENSDEBUG */ /* loop through all the BJT models */ for( ; model != NULL; model = BJTnextModel(model)) { /* loop through all the instances of the model */ for (here = BJTinstances(model); here != NULL ; here=BJTnextInstance(here)) { sxpbe = 0; sxpbc = 0; sxpsub = 0; sxpbx = 0; #ifdef SENSDEBUG printf("senupdate Instance name: %s\n",here->BJTname); printf("CKTag[0] = %.2e,CKTag[1] = %.2e\n", ckt->CKTag[0],ckt->CKTag[1]); printf("capbe = %.7e\n",here->BJTcapbe); printf("capbc = %.7e\n",here->BJTcapbc); printf("capsub = %.7e\n",here->BJTcapsub); printf("capbx = %.7e\n",here->BJTcapbx); #endif /* SENSDEBUG */ for(iparmno = 1;iparmno<=info->SENparms;iparmno++){ sb = *(info->SEN_Sap[here->BJTbaseNode] + iparmno); sbprm = *(info->SEN_Sap[here->BJTbasePrimeNode] + iparmno); scprm = *(info->SEN_Sap[here->BJTcolPrimeNode] + iparmno); seprm = *(info->SEN_Sap[here->BJTemitPrimeNode] + iparmno); ss = *(info->SEN_Sap[here->BJTsubstNode] + iparmno); #ifdef SENSDEBUG printf("iparmno = %d \n",iparmno); printf("sb = %.7e,sbprm = %.7e,scprm=%.7e\n",sb,sbprm,scprm); printf("seprm = %.7e,ss = %.7e\n",seprm,ss); #endif /* SENSDEBUG */ sxpbe = model ->BJTtype * (sbprm - seprm)*here->BJTcapbe; sxpbc = model ->BJTtype * (sbprm - scprm)*here->BJTcapbc ; sxpsub = model ->BJTtype * (ss - scprm)*here->BJTcapsub ; sxpbx = model ->BJTtype * (sb - scprm)*here->BJTcapbx ; if(iparmno == here->BJTsenParmNo){ sxpbe += *(here->BJTdphibedp); sxpbc += *(here->BJTdphibcdp); sxpsub += *(here->BJTdphisubdp); sxpbx += *(here->BJTdphibxdp); } *(ckt->CKTstate0 + here->BJTsensxpbe + 8 * (iparmno - 1)) = sxpbe; NIintegrate(ckt,&dummy1,&dummy2,here->BJTcapbe, here->BJTsensxpbe + 8*(iparmno -1)); *(ckt->CKTstate0 + here->BJTsensxpbc + 8 * (iparmno - 1)) = sxpbc; NIintegrate(ckt,&dummy1,&dummy2,here->BJTcapbc, here->BJTsensxpbc + 8*(iparmno -1)); *(ckt->CKTstate0 + here->BJTsensxpsub + 8 * (iparmno - 1)) = sxpsub; NIintegrate(ckt,&dummy1,&dummy2,here->BJTcapsub, here->BJTsensxpsub + 8*(iparmno -1)); *(ckt->CKTstate0 + here->BJTsensxpbx + 8 * (iparmno - 1)) = sxpbx; NIintegrate(ckt,&dummy1,&dummy2,here->BJTcapbx, here->BJTsensxpbx + 8*(iparmno -1)); #ifdef SENSDEBUG printf("after loading\n"); printf("sxpbe = %.7e,sdotxpbe = %.7e\n", sxpbe,*(ckt->CKTstate0 + here->BJTsensxpbe + 8 * (iparmno - 1) + 1)); printf("sxpbc = %.7e,sdotxpbc = %.7e\n", sxpbc,*(ckt->CKTstate0 + here->BJTsensxpbc + 8 * (iparmno - 1) + 1)); printf("sxpsub = %.7e,sdotxpsc = %.7e\n", sxpsub,*(ckt->CKTstate0 + here->BJTsensxpsub + 8 * (iparmno - 1) + 1)); printf("sxpbx = %.7e,sdotxpbx = %.7e\n", sxpbx,*(ckt->CKTstate0 + here->BJTsensxpbx + 8 * (iparmno - 1) + 1)); printf("\n"); #endif /* SENSDEBUG */ if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->BJTsensxpbe + 8 * (iparmno - 1)) = sxpbe; *(ckt->CKTstate1 + here->BJTsensxpbc + 8 * (iparmno - 1)) = sxpbc; *(ckt->CKTstate1 + here->BJTsensxpsub + 8 * (iparmno - 1)) = sxpsub; *(ckt->CKTstate1 + here->BJTsensxpbx + 8 * (iparmno - 1)) = sxpbx; *(ckt->CKTstate1 + here->BJTsensxpbe + 8 * (iparmno - 1) + 1) = 0; *(ckt->CKTstate1 + here->BJTsensxpbc + 8 * (iparmno - 1) + 1) = 0; *(ckt->CKTstate1 + here->BJTsensxpsub + 8 * (iparmno - 1) + 1) = 0; *(ckt->CKTstate1 + here->BJTsensxpbx + 8 * (iparmno - 1) + 1) = 0; } } } } #ifdef SENSDEBUG printf("BJTsenUpdate end\n"); #endif /* SENSDEBUG */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bjt/bjtsacl.c0000644000175000017500000006621513546075722021542 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ /* actually load the current ac sensitivity * information into the array previously provided */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "bjtdefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/ifsim.h" #include "ngspice/suffix.h" int BJTsAcLoad(GENmodel *inModel, CKTcircuit *ckt) { BJTmodel *model = (BJTmodel*)inModel; BJTinstance *here; double SaveState[25]; int error; int flag; double vbeOp; double vbcOp; double A0; double DELA = 0.0; double Apert; double DELAinv; double vte = 0.0; double gcpr; double gepr; double gpi; double gmu; double go; double xgm; double td; double arg; double gm; double gx; double xcpi; double xcmu; double xcbx; double xccs; double xcmcb; double cx,icx; double cbx,icbx; double ccs,iccs; double cbc,icbc; double cbe,icbe; double cce,icce; double cb,icb; double cbprm,icbprm; double cc,icc; double ccprm,iccprm; double ce,ice; double ceprm,iceprm; double cs,ics; double vcpr,ivcpr; double vepr,ivepr; double vx,ivx; double vbx,ivbx; double vcs,ivcs; double vbc,ivbc; double vbe,ivbe; double vce,ivce; double cb0,icb0; double cbprm0,icbprm0; double cc0,icc0; double ccprm0,iccprm0; double ce0,ice0; double ceprm0,iceprm0; double cs0,ics0; double DvDp = 0.0; int iparmno,i; SENstruct *info; #ifdef SENSDEBUG printf("BJTsenacload \n"); printf("BJTsenacload \n"); #endif /* SENSDEBUG */ info = ckt->CKTsenInfo; info->SENstatus = PERTURBATION; /* loop through all the models */ for( ; model != NULL; model = BJTnextModel(model)) { /* loop through all the instances of the model */ for (here = BJTinstances(model); here != NULL ; here=BJTnextInstance(here)) { /* save the unperturbed values in the state vector */ for(i=0; i <= 20; i++) { *(SaveState + i) = *(ckt->CKTstate0 + here->BJTstate + i); } vcpr = *(ckt->CKTrhsOld + here->BJTcolNode) - *(ckt->CKTrhsOld + here->BJTcolPrimeNode) ; ivcpr = *(ckt->CKTirhsOld + here->BJTcolNode) - *(ckt->CKTirhsOld + here->BJTcolPrimeNode) ; vepr = *(ckt->CKTrhsOld + here->BJTemitNode) - *(ckt->CKTrhsOld + here->BJTemitPrimeNode) ; ivepr = *(ckt->CKTirhsOld + here->BJTemitNode) - *(ckt->CKTirhsOld + here->BJTemitPrimeNode) ; vx = *(ckt->CKTrhsOld + here->BJTbaseNode) - *(ckt->CKTrhsOld + here->BJTbasePrimeNode) ;/* vb_bprm */ ivx = *(ckt->CKTirhsOld + here->BJTbaseNode) - *(ckt->CKTirhsOld + here->BJTbasePrimeNode) ;/* ivb_bprm */ vcs = *(ckt->CKTrhsOld + here->BJTcolPrimeNode) - *(ckt->CKTrhsOld + here->BJTsubstNode) ; ivcs = *(ckt->CKTirhsOld + here->BJTcolPrimeNode) - *(ckt->CKTirhsOld + here->BJTsubstNode) ; vbc = *(ckt->CKTrhsOld + here->BJTbasePrimeNode) - *(ckt->CKTrhsOld + here->BJTcolPrimeNode) ;/* vbprm_cprm */ ivbc = *(ckt->CKTirhsOld + here->BJTbasePrimeNode) - *(ckt->CKTirhsOld + here->BJTcolPrimeNode) ;/* ivbprm_cprm */ vbe = *(ckt->CKTrhsOld + here->BJTbasePrimeNode) - *(ckt->CKTrhsOld + here->BJTemitPrimeNode) ;/* vbprm_eprm */ ivbe = *(ckt->CKTirhsOld + here->BJTbasePrimeNode) - *(ckt->CKTirhsOld + here->BJTemitPrimeNode) ;/* ivbprm_eprm */ vce = vbe - vbc ; ivce = ivbe - ivbc ; vbx = vx + vbc ; ivbx = ivx + ivbc ; vbeOp =model->BJTtype * ( *(ckt->CKTrhsOp + here->BJTbasePrimeNode) - *(ckt->CKTrhsOp + here->BJTemitPrimeNode)); vbcOp =model->BJTtype * ( *(ckt->CKTrhsOp + here->BJTbasePrimeNode) - *(ckt->CKTrhsOp + here->BJTcolPrimeNode)); #ifdef SENSDEBUG printf("\n without perturbation\n"); #endif /* SENSDEBUG */ /* without perturbation */ A0 = here->BJTarea; here->BJTsenPertFlag = ON; *(ckt->CKTstate0 + here->BJTvbe) = vbeOp; *(ckt->CKTstate0 + here->BJTvbc) = vbcOp; /* info->SENacpertflag == 1 only for first frequency */ if(info->SENacpertflag == 1){ /* store the unperturbed values of small signal parameters */ if ((error = BJTload((GENmodel*)model,ckt)) != 0) return(error); *(here->BJTsenGpi)= *(ckt->CKTstate0 + here->BJTgpi); *(here->BJTsenGmu)= *(ckt->CKTstate0 + here->BJTgmu); *(here->BJTsenGm)= *(ckt->CKTstate0 + here->BJTgm); *(here->BJTsenGo)= *(ckt->CKTstate0 + here->BJTgo); *(here->BJTsenGx)= *(ckt->CKTstate0 + here->BJTgx); *(here->BJTsenCpi)= *(ckt->CKTstate0 + here->BJTcqbe); *(here->BJTsenCmu)= *(ckt->CKTstate0 + here->BJTcqbc); *(here->BJTsenCbx)= *(ckt->CKTstate0 + here->BJTcqbx); *(here->BJTsenCsub)= *(ckt->CKTstate0 + here->BJTcqsub); *(here->BJTsenCmcb)= *(ckt->CKTstate0 + here->BJTcexbc); } gcpr = here->BJTtcollectorConduct * A0; gepr = here->BJTtemitterConduct * A0; gpi= *(here->BJTsenGpi); gmu= *(here->BJTsenGmu); gm= *(here->BJTsenGm); go= *(here->BJTsenGo); gx= *(here->BJTsenGx); xgm=0; td=model->BJTexcessPhase; if(td != 0) { arg = td*ckt->CKTomega; gm = gm+go; xgm = -gm * sin(arg); gm = gm * cos(arg)-go; } xcpi= *(here->BJTsenCpi) * ckt->CKTomega; xcmu= *(here->BJTsenCmu) * ckt->CKTomega; xcbx= *(here->BJTsenCbx) * ckt->CKTomega; xccs= *(here->BJTsenCsub) * ckt->CKTomega; xcmcb= *(here->BJTsenCmcb) * ckt->CKTomega; cx=gx * vx ; icx=gx * ivx; cbx=( -xcbx * ivbx) ; icbx= xcbx * vbx ; ccs=( -xccs * ivcs) ; iccs= xccs * vcs ; cbc=(gmu * vbc -xcmu * ivbc) ; icbc=xcmu * vbc + gmu * ivbc ; cbe=gpi * vbe -xcpi * ivbe - xcmcb * ivbc ; icbe=xcpi * vbe + gpi * ivbe + xcmcb * vbc; cce= go * vce + gm * vbe - xgm * ivbe; icce=go * ivce + gm * ivbe + xgm * vbe ; cc0=gcpr * vcpr ; icc0=gcpr * ivcpr ; ce0=gepr * vepr; ice0=gepr * ivepr ; cb0 = cx + cbx; icb0 = icx + icbx; if(here->BJTbaseNode != here->BJTbasePrimeNode){ cbprm0 = (- cx + cbe + cbc); icbprm0 = (- icx + icbe + icbc); } else{ cbprm0 = ( cbx + cbe + cbc); icbprm0 = (icbx + icbe + icbc); } ccprm0 = (- cbx - cc0 + ccs + cce - cbc); iccprm0 = (- icbx - icc0 + iccs + icce - icbc); ceprm0 = (- cbe - cce - ce0); iceprm0 = (- icbe - icce - ice0); cs0 = (- ccs) ; ics0 = (- iccs) ; #ifdef SENSDEBUG printf("gepr0 = %.7e , gcpr0 = %.7e , gmu0 = %.7e, gpi0 = %.7e\n", gepr,gcpr,gmu,gpi); printf("gm0 = %.7e , go0 = %.7e , gx0 = %.7e, xcpi0 = %.7e\n", gm,go,gx,xcpi); printf("xcmu0 = %.7e , xcbx0 = %.7e , xccs0 = %.7e, xcmcb0 = %.7e\n" ,xcmu,xcbx,xccs,xcmcb); printf("vepr = %.7e + j%.7e , vcpr = %.7e + j%.7e\n", vepr,ivepr,vcpr,ivcpr); printf("vbx = %.7e + j%.7e , vx = %.7e + j%.7e\n", vbx,ivbx,vx,ivx); printf("vbc = %.7e + j%.7e , vbe = %.7e + j%.7e\n", vbc,ivbc,vbe,ivbe); printf("vce = %.7e + j%.7e , vcs = %.7e + j%.7e\n", vce,ivce,vcs,ivcs); printf("cce0 = %.7e + j%.7e , cbe0 = %.7e + j%.7e\n", cce,icce,cbe,icbe); printf("cbc0 = %.7e + j%.7e\n", cbc,icbc); printf("cc0 = %.7e + j%.7e , ce0 = %.7e + j%.7e\n", cc0,icc0,ce0,ice0); printf("cb0 = %.7e + j%.7e , cs0 = %.7e + j%.7e\n", cb0,icb0,cs0,ics0); printf("cbprm0 = %.7e + j%.7e , ceprm0 = %.7e + j%.7e\n", cbprm0,icbprm0,ceprm0,iceprm0); printf("ccprm0 = %.7e + j%.7e \n", ccprm0,iccprm0); printf("\nPerturbation of Area\n"); #endif /* SENSDEBUG */ /* Perturbation of Area */ if(here->BJTsenParmNo == 0){ flag = 0; goto next1; } DELA = info->SENpertfac * A0; Apert = A0 + DELA; DELAinv = 1.0/DELA; here->BJTarea = Apert; *(ckt->CKTstate0 + here->BJTvbe) = vbeOp; *(ckt->CKTstate0 + here->BJTvbc) = vbcOp; if(info->SENacpertflag == 1){ /* store the small signal parameters * corresponding to perturbed area */ if ((error = BJTload((GENmodel*)model,ckt)) != 0) return(error); *(here->BJTsenGpi + 1)= *(ckt->CKTstate0 + here->BJTgpi); *(here->BJTsenGmu + 1)= *(ckt->CKTstate0 + here->BJTgmu); *(here->BJTsenGm + 1)= *(ckt->CKTstate0 + here->BJTgm); *(here->BJTsenGo + 1)= *(ckt->CKTstate0 + here->BJTgo); *(here->BJTsenGx + 1)= *(ckt->CKTstate0 + here->BJTgx); *(here->BJTsenCpi + 1)= *(ckt->CKTstate0 + here->BJTcqbe); *(here->BJTsenCmu + 1)= *(ckt->CKTstate0 + here->BJTcqbc); *(here->BJTsenCbx + 1)= *(ckt->CKTstate0 + here->BJTcqbx); *(here->BJTsenCsub + 1)= *(ckt->CKTstate0 + here->BJTcqsub); *(here->BJTsenCmcb + 1)= *(ckt->CKTstate0 + here->BJTcexbc); } flag = 0; goto load; pertvbx: /* Perturbation of vbx */ #ifdef SENSDEBUG printf("\nPerturbation of vbx\n"); #endif /* SENSDEBUG */ here->BJTarea = A0; A0 = model->BJTtype * (*(ckt->CKTrhsOp + here->BJTbaseNode) - *(ckt->CKTrhsOp + here->BJTcolPrimeNode)); DELA = info->SENpertfac * A0 + 1e-8; Apert = A0 + DELA; DELAinv = model->BJTtype * 1.0/DELA; *(ckt->CKTrhsOp + here->BJTbaseNode) += DELA; *(ckt->CKTstate0 + here->BJTvbe) = vbeOp; *(ckt->CKTstate0 + here->BJTvbc) = vbcOp; if(info->SENacpertflag == 1){ /* store the small signal parameters * corresponding to perturbed vbx */ if ((error = BJTload((GENmodel*)model,ckt)) != 0) return(error); *(here->BJTsenGpi + 2)= *(ckt->CKTstate0 + here->BJTgpi); *(here->BJTsenGmu + 2)= *(ckt->CKTstate0 + here->BJTgmu); *(here->BJTsenGm + 2)= *(ckt->CKTstate0 + here->BJTgm); *(here->BJTsenGo + 2)= *(ckt->CKTstate0 + here->BJTgo); *(here->BJTsenGx + 2)= *(ckt->CKTstate0 + here->BJTgx); *(here->BJTsenCpi + 2)= *(ckt->CKTstate0 + here->BJTcqbe); *(here->BJTsenCmu + 2)= *(ckt->CKTstate0 + here->BJTcqbc); *(here->BJTsenCbx + 2)= *(ckt->CKTstate0 + here->BJTcqbx); *(here->BJTsenCsub + 2)= *(ckt->CKTstate0 + here->BJTcqsub); *(here->BJTsenCmcb + 2)= *(ckt->CKTstate0 + here->BJTcexbc); } flag = 1; goto load; pertvbe: /* Perturbation of vbe */ #ifdef SENSDEBUG printf("\nPerturbation of vbe\n"); #endif /* SENSDEBUG */ if (*(here->BJTsenCbx) != 0){ *(ckt->CKTrhsOp + here ->BJTbaseNode) -= DELA; } vte=model->BJTleakBEemissionCoeff*CONSTvt0; A0 = vbeOp; DELA = info->SENpertfac * vte ; Apert = A0 + DELA; DELAinv = 1.0/DELA; *(ckt->CKTstate0 + here->BJTvbe) = Apert; *(ckt->CKTstate0 + here->BJTvbc) = vbcOp; if(info->SENacpertflag == 1){ /* store the small signal parameters * corresponding to perturbed vbe */ if ((error = BJTload((GENmodel*)model,ckt)) != 0) return(error); *(here->BJTsenGpi + 3)= *(ckt->CKTstate0 + here->BJTgpi); *(here->BJTsenGmu + 3)= *(ckt->CKTstate0 + here->BJTgmu); *(here->BJTsenGm + 3)= *(ckt->CKTstate0 + here->BJTgm); *(here->BJTsenGo + 3)= *(ckt->CKTstate0 + here->BJTgo); *(here->BJTsenGx + 3)= *(ckt->CKTstate0 + here->BJTgx); *(here->BJTsenCpi + 3)= *(ckt->CKTstate0 + here->BJTcqbe); *(here->BJTsenCmu + 3)= *(ckt->CKTstate0 + here->BJTcqbc); *(here->BJTsenCbx + 3)= *(ckt->CKTstate0 + here->BJTcqbx); *(here->BJTsenCsub + 3)= *(ckt->CKTstate0 + here->BJTcqsub); *(here->BJTsenCmcb + 3)= *(ckt->CKTstate0 + here->BJTcexbc); } flag = 2; goto load; pertvbc: /* Perturbation of vbc */ #ifdef SENSDEBUG printf("\nPerturbation of vbc\n"); #endif /* SENSDEBUG */ *(ckt->CKTstate0 + here->BJTvbe) = A0; A0 = vbcOp; DELA = info->SENpertfac * vte ; Apert = A0 + DELA; DELAinv = 1.0/DELA; *(ckt->CKTstate0 + here->BJTvbc) = Apert; *(ckt->CKTstate0 + here->BJTvbe) = vbeOp; if(info->SENacpertflag == 1){ /* store the small signal parameters * corresponding to perturbed vbc */ if ((error = BJTload((GENmodel*)model,ckt)) != 0) return(error); *(here->BJTsenGpi + 4)= *(ckt->CKTstate0 + here->BJTgpi); *(here->BJTsenGmu + 4)= *(ckt->CKTstate0 + here->BJTgmu); *(here->BJTsenGm + 4)= *(ckt->CKTstate0 + here->BJTgm); *(here->BJTsenGo + 4)= *(ckt->CKTstate0 + here->BJTgo); *(here->BJTsenGx + 4)= *(ckt->CKTstate0 + here->BJTgx); *(here->BJTsenCpi + 4)= *(ckt->CKTstate0 + here->BJTcqbe); *(here->BJTsenCmu + 4)= *(ckt->CKTstate0 + here->BJTcqbc); *(here->BJTsenCbx + 4)= *(ckt->CKTstate0 + here->BJTcqbx); *(here->BJTsenCsub + 4)= *(ckt->CKTstate0 + here->BJTcqsub); *(here->BJTsenCmcb + 4)= *(ckt->CKTstate0 + here->BJTcexbc); } flag = 3; goto load; pertvcs: /* Perturbation of vcs */ #ifdef SENSDEBUG printf("\nPerturbation of vcs\n"); #endif /* SENSDEBUG */ *(ckt->CKTstate0 + here->BJTvbc) = A0; A0 = model->BJTtype * (*(ckt->CKTrhsOp + here->BJTsubstNode) - *(ckt->CKTrhsOp + here->BJTcolPrimeNode)); DELA = info->SENpertfac * A0 + 1e-8; Apert = A0 + DELA; DELAinv = model->BJTtype * 1.0/DELA; *(ckt->CKTrhsOp + here->BJTsubstNode) += DELA; *(ckt->CKTstate0 + here->BJTvbe) = vbeOp; *(ckt->CKTstate0 + here->BJTvbc) = vbcOp; if(info->SENacpertflag == 1){ /* store the small signal parameters * corresponding to perturbed vcs */ if ((error = BJTload((GENmodel*)model,ckt)) != 0) return(error); *(here->BJTsenCsub + 5)= *(ckt->CKTstate0 + here->BJTcqsub); } flag = 4; *(ckt->CKTrhsOp + here->BJTsubstNode) -= DELA; xccs= *(here->BJTsenCsub + 5) * ckt->CKTomega; ccs=( -xccs * ivcs) ; iccs= xccs * vcs ; cs = -ccs; ics = -iccs; ccprm = ccprm0 + cs0 - cs; iccprm = iccprm0 + ics0 - ics; cbprm = cbprm0; icbprm = icbprm0; ceprm = ceprm0; iceprm = iceprm0; cc = cc0; icc = icc0; ce = ce0; ice = ice0; cb = cb0; icb = icb0; goto next2; load: gcpr=here->BJTtcollectorConduct * here->BJTarea; gepr=here->BJTtemitterConduct * here->BJTarea; gpi= *(here->BJTsenGpi + flag+1); gmu= *(here->BJTsenGmu + flag+1); gm= *(here->BJTsenGm + flag+1); go= *(here->BJTsenGo + flag+1); gx= *(here->BJTsenGx + flag+1); xgm=0; td=model->BJTexcessPhase; if(td != 0) { arg = td*ckt->CKTomega; gm = gm+go; xgm = -gm * sin(arg); gm = gm * cos(arg)-go; } xcpi= *(here->BJTsenCpi + flag+1) * ckt->CKTomega; xcmu= *(here->BJTsenCmu + flag+1) * ckt->CKTomega; xcbx= *(here->BJTsenCbx + flag+1) * ckt->CKTomega; xccs= *(here->BJTsenCsub + flag+1) * ckt->CKTomega; xcmcb= *(here->BJTsenCmcb + flag+1) * ckt->CKTomega; cc=gcpr * vcpr ; icc=gcpr * ivcpr ; ce=gepr * vepr; ice=gepr * ivepr ; cx=gx * vx ; icx=gx * ivx; cbx=( -xcbx * ivbx) ; icbx= xcbx * vbx ; ccs=( -xccs * ivcs) ; iccs= xccs * vcs ; cbc=(gmu * vbc -xcmu * ivbc) ; icbc=xcmu * vbc + gmu * ivbc ; cbe=gpi * vbe -xcpi * ivbe - xcmcb * ivbc ; icbe=xcpi * vbe + gpi * ivbe + xcmcb * vbc; cce= go * vce + gm * vbe - xgm * ivbe; icce=go * ivce + gm * ivbe + xgm * vbe ; cb= cx + cbx; icb= icx + icbx; if(here->BJTbaseNode != here->BJTbasePrimeNode){ cbprm=(- cx + cbe + cbc); icbprm=(- icx + icbe + icbc); } else{ cbprm=( cbx + cbe + cbc); icbprm=(icbx + icbe + icbc); } ccprm=(- cbx - cc + ccs + cce - cbc); iccprm=(- icbx - icc + iccs + icce - icbc); ceprm=(- cbe - cce - ce); iceprm=(- icbe - icce - ice); cs= (- ccs) ; ics= (- iccs) ; #ifdef SENSDEBUG printf("A0 = %.7e , Apert = %.7e , DELA = %.7e\n" ,A0,Apert,DELA); printf("gepr = %.7e , gcpr = %.7e , gmu = %.7e, gpi = %.7e\n" ,gepr,gcpr,gmu,gpi); printf("gm = %.7e , go = %.7e , gx = %.7e, xcpi = %.7e\n" ,gm,go,gx,xcpi); printf("xcmu = %.7e , xcbx = %.7e , xccs = %.7e, xcmcb = %.7e\n" ,xcmu,xcbx,xccs,xcmcb); printf("cx = %.7e + j%.7e , cbx = %.7e + j%.7e\n" ,cx,icx,cbx,icbx); printf("ccs %.7e + j%.7e , cbc = %.7e + j%.7e" ,ccs,iccs,cbc,icbc); printf("cbe %.7e + j%.7e , cce = %.7e + j%.7e\n" ,cbe,icbe,cce,icce); printf("cc = %.7e + j%.7e , ce = %.7e + j%.7e,", cc,icc,ce,ice); printf("ccprm = %.7e + j%.7e , ceprm = %.7e + j%.7e", ccprm,iccprm,ceprm,iceprm); printf("cb = %.7e + j%.7e , cbprm = %.7e + j%.7e , ", cb,icb,cbprm,icbprm); printf("cs = %.7e + j%.7e\n", cs,ics); #endif /* SENSDEBUG */ /* load the RHS matrix */ next2: for(iparmno = 1;iparmno<=info->SENparms;iparmno++){ if( (!flag) && (iparmno != here->BJTsenParmNo) ) continue; switch(flag){ case 0: /* area : so no DC sensitivity term involved */ DvDp = 1.0; break; /* calculate the DC sensitivities of operating points */ case 1: DvDp = model->BJTtype * (info->SEN_Sap[here->BJTbaseNode][iparmno] - info->SEN_Sap[here->BJTcolPrimeNode][iparmno]); break; case 2: DvDp = model->BJTtype * (info->SEN_Sap[here->BJTbasePrimeNode][iparmno] - info->SEN_Sap[here->BJTemitPrimeNode][iparmno]); break; case 3: DvDp = model->BJTtype * (info->SEN_Sap[here->BJTbasePrimeNode][iparmno] - info->SEN_Sap[here->BJTcolPrimeNode][iparmno]); break; case 4: DvDp = model->BJTtype * (info->SEN_Sap[here->BJTsubstNode][iparmno] - info->SEN_Sap[here->BJTcolPrimeNode][iparmno]); break; } #ifdef SENSDEBUG printf("before loading\n"); printf("BJTtype = %d\n",model->BJTtype); printf("DvDp = %.7e , flag = %d , iparmno = %d,senparmno = %d\n" ,DvDp,flag,iparmno,here->BJTsenParmNo); printf("senb = %.7e + j%.7e\n " ,*(info->SEN_RHS[here->BJTbaseNode] + iparmno), *(info->SEN_iRHS[here->BJTbaseNode] + iparmno)); printf("senbrm = %.7e + j%.7e\n " ,*(info->SEN_RHS[here->BJTbasePrimeNode] + iparmno), *(info->SEN_iRHS[here->BJTbasePrimeNode] + iparmno)); printf("senc = %.7e + j%.7e\n " ,*(info->SEN_RHS[here->BJTcolNode] + iparmno), *(info->SEN_iRHS[here->BJTcolNode] + iparmno)); printf("sencprm = %.7e + j%.7e\n " ,*(info->SEN_RHS[here->BJTcolPrimeNode] + iparmno), *(info->SEN_iRHS[here->BJTcolPrimeNode] + iparmno)); printf("sene = %.7e + j%.7e\n " ,*(info->SEN_RHS[here->BJTemitNode] + iparmno), *(info->SEN_iRHS[here->BJTemitNode] + iparmno)); printf("seneprm = %.7e + j%.7e\n " ,*(info->SEN_RHS[here->BJTemitPrimeNode] + iparmno), *(info->SEN_iRHS[here->BJTemitPrimeNode] + iparmno)); printf("sens = %.7e + j%.7e\n " ,*(info->SEN_RHS[here->BJTsubstNode] + iparmno), *(info->SEN_iRHS[here->BJTsubstNode] + iparmno)); #endif /* SENSDEBUG */ if(here->BJTbaseNode != here->BJTbasePrimeNode){ *(info->SEN_RHS[here->BJTbaseNode] + iparmno) -= ( cb - cb0) * DELAinv * DvDp; *(info->SEN_iRHS[here->BJTbaseNode] + iparmno) -= ( icb - icb0) * DELAinv * DvDp; } *(info->SEN_RHS[here->BJTbasePrimeNode] + iparmno) -= ( cbprm - cbprm0) * DELAinv * DvDp; *(info->SEN_iRHS[here->BJTbasePrimeNode] + iparmno) -= ( icbprm - icbprm0) * DELAinv * DvDp; if(here->BJTcolNode != here->BJTcolPrimeNode){ *(info->SEN_RHS[here->BJTcolNode] + iparmno) -= ( cc - cc0) * DELAinv * DvDp; *(info->SEN_iRHS[here->BJTcolNode] + iparmno) -= ( icc - icc0) * DELAinv * DvDp; } *(info->SEN_RHS[here->BJTcolPrimeNode] + iparmno) -= ( ccprm - ccprm0) * DELAinv * DvDp; *(info->SEN_iRHS[here->BJTcolPrimeNode] + iparmno) -= ( iccprm - iccprm0) * DELAinv * DvDp; if(here->BJTemitNode != here->BJTemitPrimeNode){ *(info->SEN_RHS[here->BJTemitNode] + iparmno) -= ( ce - ce0) * DELAinv * DvDp; *(info->SEN_iRHS[here->BJTemitNode] + iparmno) -= ( ice - ice0) * DELAinv * DvDp; } *(info->SEN_RHS[here->BJTemitPrimeNode] + iparmno) -= ( ceprm - ceprm0) * DELAinv * DvDp; *(info->SEN_iRHS[here->BJTemitPrimeNode] + iparmno) -= ( iceprm - iceprm0) * DELAinv * DvDp; *(info->SEN_RHS[here->BJTsubstNode] + iparmno) -= ( cs - cs0) * DELAinv * DvDp; *(info->SEN_iRHS[here->BJTsubstNode] + iparmno) -= ( ics - ics0) * DELAinv * DvDp; #ifdef SENSDEBUG printf("after loading\n"); printf("senb = %.7e + j%.7e\n " ,*(info->SEN_RHS[here->BJTbaseNode] + iparmno), *(info->SEN_iRHS[here->BJTbaseNode] + iparmno)); printf("senbrm = %.7e + j%.7e\n " ,*(info->SEN_RHS[here->BJTbasePrimeNode] + iparmno), *(info->SEN_iRHS[here->BJTbasePrimeNode] + iparmno)); printf("senc = %.7e + j%.7e\n " ,*(info->SEN_RHS[here->BJTcolNode] + iparmno), *(info->SEN_iRHS[here->BJTcolNode] + iparmno)); printf("sencprm = %.7e + j%.7e\n " ,*(info->SEN_RHS[here->BJTcolPrimeNode] + iparmno), *(info->SEN_iRHS[here->BJTcolPrimeNode] + iparmno)); printf("sene = %.7e + j%.7e\n " ,*(info->SEN_RHS[here->BJTemitNode] + iparmno), *(info->SEN_iRHS[here->BJTemitNode] + iparmno)); printf("seneprm = %.7e + j%.7e\n " ,*(info->SEN_RHS[here->BJTemitPrimeNode] + iparmno), *(info->SEN_iRHS[here->BJTemitPrimeNode] + iparmno)); printf("sens = %.7e + j%.7e\n " ,*(info->SEN_RHS[here->BJTsubstNode] + iparmno), *(info->SEN_iRHS[here->BJTsubstNode] + iparmno)); #endif /* SENSDEBUG */ } next1: switch(flag){ case 0: if (*(here->BJTsenCbx) == 0){ here->BJTarea = A0; goto pertvbe ; } else{ goto pertvbx; } case 1: goto pertvbe ; case 2: goto pertvbc ; case 3: goto pertvcs ; case 4: break; } /* put the unperturbed values back into the state vector */ for(i=0; i <= 20; i++) { *(ckt->CKTstate0 + here->BJTstate + i) = *(SaveState + i); } here->BJTsenPertFlag = OFF; } } info->SENstatus = NORMAL; #ifdef SENSDEBUG printf("BJTsenacload end\n"); #endif /* SENSDEBUG */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bjt/bjttemp.c0000644000175000017500000003101013546075722021546 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "bjtdefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/ifsim.h" #include "ngspice/suffix.h" /* ARGSUSED */ int BJTtemp(GENmodel *inModel, CKTcircuit *ckt) /* Pre-compute many useful parameters */ { BJTmodel *model = (BJTmodel *)inModel; BJTinstance *here; double xfc; double vt; double vtnom; double ratlog; double ratio1; double factlog; double bfactor=1.0; double factor; double fact1,fact2; double pbo,pbfact; double gmaold,gmanew; double egfet; double arg; double dt; /* loop through all the bipolar models */ for( ; model != NULL; model = BJTnextModel(model)) { if(!model->BJTtnomGiven) model->BJTtnom = ckt->CKTnomTemp; vtnom = CONSTKoverQ * model->BJTtnom; fact1 = model->BJTtnom/REFTEMP; if(!model->BJTleakBEcurrentGiven) { if(model->BJTc2Given) { model->BJTleakBEcurrent = model->BJTc2 * model->BJTsatCur; } else { model->BJTleakBEcurrent = 0; } } if(!model->BJTleakBCcurrentGiven) { if(model->BJTc4Given) { model->BJTleakBCcurrent = model->BJTc4 * model->BJTsatCur; } else { model->BJTleakBCcurrent = 0; } } if(!model->BJTminBaseResistGiven) { model->BJTminBaseResist = model->BJTbaseResist; } /* * COMPATABILITY WARNING! * special note: for backward compatability to much older models, spice 2G * implemented a special case which checked if B-E leakage saturation * current was >1, then it was instead a the B-E leakage saturation current * divided by IS, and multiplied it by IS at this point. This was not * handled correctly in the 2G code, and there is some question on its * reasonability, since it is also undocumented, so it has been left out * here. It could easily be added with 1 line. (The same applies to the B-C * leakage saturation current). TQ 6/29/84 */ if(model->BJTtransitTimeFVBCGiven && model->BJTtransitTimeFVBC != 0) { model->BJTtransitTimeVBCFactor =1/(model->BJTtransitTimeFVBC*1.44); } else { model->BJTtransitTimeVBCFactor = 0; } model->BJTexcessPhaseFactor = (model->BJTexcessPhase/ (180.0/M_PI)) * model->BJTtransitTimeF; if(model->BJTdepletionCapCoeffGiven) { if(model->BJTdepletionCapCoeff>.9999) { model->BJTdepletionCapCoeff=.9999; SPfrontEnd->IFerrorf (ERR_WARNING, "BJT model %s, parameter fc limited to 0.9999", model->BJTmodName); } } else { model->BJTdepletionCapCoeff=.5; } xfc = log(1-model->BJTdepletionCapCoeff); /* loop through all the instances of the model */ for (here = BJTinstances(model); here != NULL ; here=BJTnextInstance(here)) { double arg1, pbfact1, egfet1; if(!here->BJTdtempGiven) here->BJTdtemp = 0.0; if(!here->BJTtempGiven) here->BJTtemp = ckt->CKTtemp + here->BJTdtemp; dt = here->BJTtemp - model->BJTtnom; if(model->BJTearlyVoltFGiven && model->BJTearlyVoltF != 0) { here->BJTtinvEarlyVoltF = 1/(model->BJTearlyVoltF * (1+model->BJTtvaf1*dt+model->BJTtvaf2*dt*dt)); } else { here->BJTtinvEarlyVoltF = 0; } if(model->BJTrollOffFGiven && model->BJTrollOffF != 0) { here->BJTtinvRollOffF = 1/(model->BJTrollOffF * (1+model->BJTtikf1*dt+model->BJTtikf2*dt*dt)); } else { here->BJTtinvRollOffF = 0; } if(model->BJTearlyVoltRGiven && model->BJTearlyVoltR != 0) { here->BJTtinvEarlyVoltR = 1/(model->BJTearlyVoltR * (1+model->BJTtvar1*dt+model->BJTtvar2*dt*dt)); } else { here->BJTtinvEarlyVoltR = 0; } if(model->BJTrollOffRGiven && model->BJTrollOffR != 0) { here->BJTtinvRollOffR = 1/(model->BJTrollOffR * (1+model->BJTtikr1*dt+model->BJTtikr2*dt*dt)); } else { here->BJTtinvRollOffR = 0; } if(model->BJTcollectorResistGiven && model->BJTcollectorResist != 0) { here->BJTtcollectorConduct = 1/(model->BJTcollectorResist * (1+model->BJTtrc1*dt+model->BJTtrc2*dt*dt)); } else { here->BJTtcollectorConduct = 0; } if(model->BJTemitterResistGiven && model->BJTemitterResist != 0) { here->BJTtemitterConduct = 1/(model->BJTemitterResist * (1+model->BJTtre1*dt+model->BJTtre2*dt*dt)); } else { here->BJTtemitterConduct = 0; } here->BJTtbaseResist = model->BJTbaseResist * (1+model->BJTtrb1*dt+model->BJTtrb2*dt*dt); here->BJTtminBaseResist = model->BJTminBaseResist*(1+model->BJTtrm1*dt+model->BJTtrm2*dt*dt); here->BJTtbaseCurrentHalfResist = model->BJTbaseCurrentHalfResist * (1+model->BJTtirb1*dt+model->BJTtirb2*dt*dt); here->BJTtemissionCoeffF = model->BJTemissionCoeffF * (1+model->BJTtnf1*dt+model->BJTtnf2*dt*dt); here->BJTtemissionCoeffR = model->BJTemissionCoeffR * (1+model->BJTtnr1*dt+model->BJTtnr2*dt*dt); here->BJTtleakBEemissionCoeff = model->BJTleakBEemissionCoeff * (1+model->BJTtne1*dt+model->BJTtne2*dt*dt); here->BJTtleakBCemissionCoeff = model->BJTleakBCemissionCoeff * (1+model->BJTtnc1*dt+model->BJTtnc2*dt*dt); here->BJTttransitTimeHighCurrentF = model->BJTtransitTimeHighCurrentF * (1+model->BJTtitf1*dt+model->BJTtitf2*dt*dt); here->BJTttransitTimeF = model->BJTtransitTimeF * (1+model->BJTttf1*dt+model->BJTttf2*dt*dt); here->BJTttransitTimeR = model->BJTtransitTimeR * (1+model->BJTttr1*dt+model->BJTttr2*dt*dt); here->BJTtjunctionExpBE = model->BJTjunctionExpBE * (1+model->BJTtmje1*dt+model->BJTtmje2*dt*dt); here->BJTtjunctionExpBC = model->BJTjunctionExpBC * (1+model->BJTtmjc1*dt+model->BJTtmjc2*dt*dt); here->BJTtjunctionExpSub = model->BJTexponentialSubstrate * (1+model->BJTtmjs1*dt+model->BJTtmjs2*dt*dt); here->BJTtemissionCoeffS = model->BJTemissionCoeffS * (1+model->BJTtns1*dt+model->BJTtns2*dt*dt); vt = here->BJTtemp * CONSTKoverQ; fact2 = here->BJTtemp/REFTEMP; egfet = 1.16-(7.02e-4*here->BJTtemp*here->BJTtemp)/ (here->BJTtemp+1108); arg = -egfet/(2*CONSTboltz*here->BJTtemp)+ 1.1150877/(CONSTboltz*(REFTEMP+REFTEMP)); pbfact = -2*vt*(1.5*log(fact2)+CHARGE*arg); egfet1 = 1.16-(7.02e-4*model->BJTtnom*model->BJTtnom)/ (model->BJTtnom+1108); arg1 = -egfet1/(2*CONSTboltz*model->BJTtnom)+ 1.1150877/(CONSTboltz*(REFTEMP+REFTEMP)); pbfact1 = -2*vtnom*(1.5*log(fact1)+CHARGE*arg1); ratlog = log(here->BJTtemp/model->BJTtnom); ratio1 = here->BJTtemp/model->BJTtnom -1; factlog = ratio1 * model->BJTenergyGap/vt + model->BJTtempExpIS*ratlog; if ((model->BJTtlev == 0) || (model->BJTtlev == 1)) { factor = exp(factlog); here->BJTtSatCur = model->BJTsatCur * factor; here->BJTtSubSatCur = model->BJTsubSatCur * factor; } else if (model->BJTtlev == 3) { here->BJTtSatCur = pow(model->BJTsatCur,(1+model->BJTtis1*dt+model->BJTtis2*dt*dt)); } if (model->BJTtlev == 0) { bfactor = exp(ratlog*model->BJTbetaExp); } else if (model->BJTtlev == 1) { bfactor = 1+model->BJTbetaExp*dt; } if ((model->BJTtbf1Given)||(model->BJTtbf2Given)) here->BJTtBetaF = model->BJTbetaF * (1+model->BJTtbf1*dt+model->BJTtbf2*dt*dt); else here->BJTtBetaF = model->BJTbetaF * bfactor; if ((model->BJTtbr1Given)||(model->BJTtbr2Given)) here->BJTtBetaR = model->BJTbetaR * (1+model->BJTtbr1*dt+model->BJTtbr2*dt*dt); else here->BJTtBetaR = model->BJTbetaR * bfactor; if ((model->BJTtlev == 0) || (model->BJTtlev == 1)) { here->BJTtBEleakCur = model->BJTleakBEcurrent * exp(factlog/model->BJTleakBEemissionCoeff)/bfactor; here->BJTtBCleakCur = model->BJTleakBCcurrent * exp(factlog/model->BJTleakBCemissionCoeff)/bfactor; } else if (model->BJTtlev == 3) { here->BJTtBEleakCur = pow(model->BJTleakBEcurrent,(1+model->BJTtise1*dt+model->BJTtise2*dt*dt)); here->BJTtBCleakCur = pow(model->BJTleakBCcurrent,(1+model->BJTtisc1*dt+model->BJTtisc2*dt*dt)); } if (model->BJTtlevc == 0) { pbo = (model->BJTpotentialBE-pbfact1)/fact1; gmaold = (model->BJTpotentialBE-pbo)/pbo; here->BJTtBEcap = model->BJTdepletionCapBE/ (1+here->BJTtjunctionExpBE* (4e-4*(model->BJTtnom-REFTEMP)-gmaold)); here->BJTtBEpot = fact2 * pbo+pbfact; gmanew = (here->BJTtBEpot-pbo)/pbo; here->BJTtBEcap *= 1+here->BJTtjunctionExpBE* (4e-4*(here->BJTtemp-REFTEMP)-gmanew); } else if (model->BJTtlevc == 1) { here->BJTtBEcap = model->BJTdepletionCapBE* (1+model->BJTcte*dt); here->BJTtBEpot = model->BJTpotentialBE - model->BJTtvje*dt; } if (model->BJTtlevc == 0) { pbo = (model->BJTpotentialBC-pbfact1)/fact1; gmaold = (model->BJTpotentialBC-pbo)/pbo; here->BJTtBCcap = model->BJTdepletionCapBC/ (1+here->BJTtjunctionExpBC* (4e-4*(model->BJTtnom-REFTEMP)-gmaold)); here->BJTtBCpot = fact2 * pbo+pbfact; gmanew = (here->BJTtBCpot-pbo)/pbo; here->BJTtBCcap *= 1+here->BJTtjunctionExpBC* (4e-4*(here->BJTtemp-REFTEMP)-gmanew); } else if (model->BJTtlevc == 1) { here->BJTtBCcap = model->BJTdepletionCapBC* (1+model->BJTctc*dt); here->BJTtBCpot = model->BJTpotentialBC - model->BJTtvjc*dt; } if (model->BJTtlevc == 0) { pbo = (model->BJTpotentialSubstrate-pbfact1)/fact1; gmaold = (model->BJTpotentialSubstrate-pbo)/pbo; here->BJTtSubcap = model->BJTcapSub/ (1+here->BJTtjunctionExpSub* (4e-4*(model->BJTtnom-REFTEMP)-gmaold)); here->BJTtSubpot = fact2 * pbo+pbfact; gmanew = (here->BJTtSubpot-pbo)/pbo; here->BJTtSubcap *= 1+here->BJTtjunctionExpSub* (4e-4*(here->BJTtemp-REFTEMP)-gmanew); } else if (model->BJTtlevc == 1) { here->BJTtSubcap = model->BJTcapSub* (1+model->BJTcts*dt); here->BJTtSubpot = model->BJTpotentialSubstrate - model->BJTtvjs*dt; } here->BJTtDepCap = model->BJTdepletionCapCoeff * here->BJTtBEpot; here->BJTtf1 = here->BJTtBEpot * (1 - exp((1 - here->BJTtjunctionExpBE) * xfc)) / (1 - here->BJTtjunctionExpBE); here->BJTtf4 = model->BJTdepletionCapCoeff * here->BJTtBCpot; here->BJTtf5 = here->BJTtBCpot * (1 - exp((1 - here->BJTtjunctionExpBC) * xfc)) / (1 - here->BJTtjunctionExpBC); here->BJTtVcrit = vt * log(vt / (CONSTroot2*here->BJTtSatCur*here->BJTarea)); here->BJTtSubVcrit = vt * log(vt / (CONSTroot2*here->BJTtSubSatCur*here->BJTarea)); here->BJTtf2 = exp((1 + here->BJTtjunctionExpBE) * xfc); here->BJTtf3 = 1 - model->BJTdepletionCapCoeff * (1 + here->BJTtjunctionExpBE); here->BJTtf6 = exp((1 + here->BJTtjunctionExpBC)*xfc); here->BJTtf7 = 1 - model->BJTdepletionCapCoeff * (1 + here->BJTtjunctionExpBC); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bjt/bjtsset.c0000644000175000017500000000234013546075722021563 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ /* loop through all the devices and * allocate parameter #s to design parameters */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "bjtdefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/ifsim.h" #include "ngspice/suffix.h" int BJTsSetup(SENstruct *info, GENmodel *inModel) { BJTmodel *model = (BJTmodel*)inModel; BJTinstance *here; #ifdef STEPDEBUG printf(" BJTsensetup \n"); #endif /* STEPDEBUG */ /* loop through all the diode models */ for( ; model != NULL; model = BJTnextModel(model)) { /* loop through all the instances of the model */ for (here = BJTinstances(model); here != NULL ; here=BJTnextInstance(here)) { if(here->BJTsenParmNo){ here->BJTsenParmNo = ++(info->SENparms); here->BJTsenPertFlag = OFF; } if((here->BJTsens = TMALLOC(double, 55)) == NULL) return(E_NOMEM); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bjt/bjtmask.c0000644000175000017500000003033213546075722021542 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Mathew Lew and Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "bjtdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int BJTmAsk(CKTcircuit *ckt, GENmodel *instPtr, int which, IFvalue *value) { BJTmodel *here = (BJTmodel*)instPtr; NG_IGNORE(ckt); switch(which) { case BJT_MOD_TYPE: if (here->BJTtype == NPN) value->sValue = "npn"; else value->sValue = "pnp"; return(OK); case BJT_MOD_SUBS: if (here->BJTsubs == LATERAL) value->sValue = "Lateral"; else value->sValue = "Vertical"; return(OK); case BJT_MOD_TNOM: value->rValue = here->BJTtnom-CONSTCtoK; return(OK); case BJT_MOD_IS: value->rValue = here->BJTsatCur; return(OK); case BJT_MOD_BF: value->rValue = here->BJTbetaF; return(OK); case BJT_MOD_NF: value->rValue = here->BJTemissionCoeffF; return(OK); case BJT_MOD_VAF: value->rValue = here->BJTearlyVoltF; return(OK); case BJT_MOD_IKF: value->rValue = here->BJTrollOffF; return(OK); case BJT_MOD_ISE: value->rValue = here->BJTleakBEcurrent; return(OK); case BJT_MOD_C2: value->rValue = here->BJTc2; return(OK); case BJT_MOD_NE: value->rValue = here->BJTleakBEemissionCoeff; return(OK); case BJT_MOD_BR: value->rValue = here->BJTbetaR; return(OK); case BJT_MOD_NR: value->rValue = here->BJTemissionCoeffR; return(OK); case BJT_MOD_VAR: value->rValue = here->BJTearlyVoltR; return(OK); case BJT_MOD_IKR: value->rValue = here->BJTrollOffR; return(OK); case BJT_MOD_ISC: value->rValue = here->BJTleakBCcurrent; return(OK); case BJT_MOD_C4: value->rValue = here->BJTc4; return(OK); case BJT_MOD_NC: value->rValue = here->BJTleakBCemissionCoeff; return(OK); case BJT_MOD_RB: value->rValue = here->BJTbaseResist; return(OK); case BJT_MOD_IRB: value->rValue = here->BJTbaseCurrentHalfResist; return(OK); case BJT_MOD_RBM: value->rValue = here->BJTminBaseResist; return(OK); case BJT_MOD_RE: value->rValue = here->BJTemitterResist; return(OK); case BJT_MOD_RC: value->rValue = here->BJTcollectorResist; return(OK); case BJT_MOD_CJE: value->rValue = here->BJTdepletionCapBE; return(OK); case BJT_MOD_VJE: value->rValue = here->BJTpotentialBE; return(OK); case BJT_MOD_MJE: value->rValue = here->BJTjunctionExpBE; return(OK); case BJT_MOD_TF: value->rValue = here->BJTtransitTimeF; return(OK); case BJT_MOD_XTF: value->rValue = here->BJTtransitTimeBiasCoeffF; return(OK); case BJT_MOD_VTF: value->rValue = here->BJTtransitTimeFVBC; return(OK); case BJT_MOD_ITF: value->rValue = here->BJTtransitTimeHighCurrentF; return(OK); case BJT_MOD_PTF: value->rValue = here->BJTexcessPhase; return(OK); case BJT_MOD_CJC: value->rValue = here->BJTdepletionCapBC; return(OK); case BJT_MOD_VJC: value->rValue = here->BJTpotentialBC; return(OK); case BJT_MOD_MJC: value->rValue = here->BJTjunctionExpBC; return(OK); case BJT_MOD_XCJC: value->rValue = here->BJTbaseFractionBCcap; return(OK); case BJT_MOD_TR: value->rValue = here->BJTtransitTimeR; return(OK); case BJT_MOD_CJS: value->rValue = here->BJTcapSub; return(OK); case BJT_MOD_VJS: value->rValue = here->BJTpotentialSubstrate; return(OK); case BJT_MOD_MJS: value->rValue = here->BJTexponentialSubstrate; return(OK); case BJT_MOD_XTB: value->rValue = here->BJTbetaExp; return(OK); case BJT_MOD_EG: value->rValue = here->BJTenergyGap; return(OK); case BJT_MOD_XTI: value->rValue = here->BJTtempExpIS; return(OK); case BJT_MOD_FC: value->rValue = here->BJTdepletionCapCoeff; return(OK); case BJT_MOD_KF: if (here->BJTfNcoefGiven) value->rValue = here->BJTfNcoef; else value->rValue = 0.0; return(OK); case BJT_MOD_AF: if (here->BJTfNexpGiven) value->rValue = here->BJTfNexp; else value->rValue = 0.0; return(OK); case BJT_MOD_INVEARLYF: value->rValue = here->BJTinvEarlyVoltF; return(OK); case BJT_MOD_INVEARLYR: value->rValue = here->BJTinvEarlyVoltR; return(OK); case BJT_MOD_INVROLLOFFF: value->rValue = here->BJTinvRollOffF; return(OK); case BJT_MOD_INVROLLOFFR: value->rValue = here->BJTinvRollOffR; return(OK); case BJT_MOD_COLCONDUCT: value->rValue = here->BJTcollectorConduct; return(OK); case BJT_MOD_EMITTERCONDUCT: value->rValue = here->BJTemitterConduct; return(OK); case BJT_MOD_TRANSVBCFACT: value->rValue = here->BJTtransitTimeVBCFactor; return(OK); case BJT_MOD_EXCESSPHASEFACTOR: value->rValue = here->BJTexcessPhaseFactor; return(OK); case BJT_MOD_ISS: value->rValue = here->BJTsubSatCur; return(OK); case BJT_MOD_NS: value->rValue = here->BJTemissionCoeffS; return(OK); case BJT_MOD_TLEV: value->iValue = here->BJTtlev; return(OK); case BJT_MOD_TLEVC: value->iValue = here->BJTtlevc; return(OK); case BJT_MOD_TBF1: value->rValue = here->BJTtbf1; return(OK); case BJT_MOD_TBF2: value->rValue = here->BJTtbf2; return(OK); case BJT_MOD_TBR1: value->rValue = here->BJTtbr1; return(OK); case BJT_MOD_TBR2: value->rValue = here->BJTtbr2; return(OK); case BJT_MOD_TIKF1: value->rValue = here->BJTtikf1; return(OK); case BJT_MOD_TIKF2: value->rValue = here->BJTtikf2; return(OK); case BJT_MOD_TIKR1: value->rValue = here->BJTtikr1; return(OK); case BJT_MOD_TIKR2: value->rValue = here->BJTtikr2; return(OK); case BJT_MOD_TIRB1: value->rValue = here->BJTtirb1; return(OK); case BJT_MOD_TIRB2: value->rValue = here->BJTtirb2; return(OK); case BJT_MOD_TNC1: value->rValue = here->BJTtnc1; return(OK); case BJT_MOD_TNC2: value->rValue = here->BJTtnc2; return(OK); case BJT_MOD_TNE1: value->rValue = here->BJTtne1; return(OK); case BJT_MOD_TNE2: value->rValue = here->BJTtne2; return(OK); case BJT_MOD_TNF1: value->rValue = here->BJTtnf1; return(OK); case BJT_MOD_TNF2: value->rValue = here->BJTtnf2; return(OK); case BJT_MOD_TNR1: value->rValue = here->BJTtnr1; return(OK); case BJT_MOD_TNR2: value->rValue = here->BJTtnr2; return(OK); case BJT_MOD_TRB1: value->rValue = here->BJTtrb1; return(OK); case BJT_MOD_TRB2: value->rValue = here->BJTtrb2; return(OK); case BJT_MOD_TRC1: value->rValue = here->BJTtrc1; return(OK); case BJT_MOD_TRC2: value->rValue = here->BJTtrc2; return(OK); case BJT_MOD_TRE1: value->rValue = here->BJTtre1; return(OK); case BJT_MOD_TRE2: value->rValue = here->BJTtre2; return(OK); case BJT_MOD_TRM1: value->rValue = here->BJTtrm1; return(OK); case BJT_MOD_TRM2: value->rValue = here->BJTtrm2; return(OK); case BJT_MOD_TVAF1: value->rValue = here->BJTtvaf1; return(OK); case BJT_MOD_TVAF2: value->rValue = here->BJTtvaf2; return(OK); case BJT_MOD_TVAR1: value->rValue = here->BJTtvar1; return(OK); case BJT_MOD_TVAR2: value->rValue = here->BJTtvar2; return(OK); case BJT_MOD_CTC: value->rValue = here->BJTctc; return(OK); case BJT_MOD_CTE: value->rValue = here->BJTcte; return(OK); case BJT_MOD_CTS: value->rValue = here->BJTcts; return(OK); case BJT_MOD_TVJE: value->rValue = here->BJTtvje; return(OK); case BJT_MOD_TVJC: value->rValue = here->BJTtvjc; return(OK); case BJT_MOD_TVJS: value->rValue = here->BJTtvjs; return(OK); case BJT_MOD_TITF1: value->rValue = here->BJTtitf1; return(OK); case BJT_MOD_TITF2: value->rValue = here->BJTtitf2; return(OK); case BJT_MOD_TTF1: value->rValue = here->BJTttf1; return(OK); case BJT_MOD_TTF2: value->rValue = here->BJTttf2; return(OK); case BJT_MOD_TTR1: value->rValue = here->BJTttr1; return(OK); case BJT_MOD_TTR2: value->rValue = here->BJTttr2; return(OK); case BJT_MOD_TMJE1: value->rValue = here->BJTtmje1; return(OK); case BJT_MOD_TMJE2: value->rValue = here->BJTtmje2; return(OK); case BJT_MOD_TMJC1: value->rValue = here->BJTtmjc1; return(OK); case BJT_MOD_TMJC2: value->rValue = here->BJTtmjc2; return(OK); case BJT_MOD_TMJS1: value->rValue = here->BJTtmjs1; return(OK); case BJT_MOD_TMJS2: value->rValue = here->BJTtmjs2; return(OK); case BJT_MOD_TNS1: value->rValue = here->BJTtns1; return(OK); case BJT_MOD_TNS2: value->rValue = here->BJTtns2; return(OK); case BJT_MOD_NKF: value->rValue = here->BJTnkf; return(OK); case BJT_MOD_TIS1: value->rValue = here->BJTtis1; return(OK); case BJT_MOD_TIS2: value->rValue = here->BJTtis2; return(OK); case BJT_MOD_TISE1: value->rValue = here->BJTtise1; return(OK); case BJT_MOD_TISE2: value->rValue = here->BJTtise2; return(OK); case BJT_MOD_TISC1: value->rValue = here->BJTtisc1; return(OK); case BJT_MOD_TISC2: value->rValue = here->BJTtisc2; return(OK); case BJT_MOD_VBE_MAX: value->rValue = here->BJTvbeMax; return(OK); case BJT_MOD_VBC_MAX: value->rValue = here->BJTvbcMax; return(OK); case BJT_MOD_VCE_MAX: value->rValue = here->BJTvceMax; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bjt/bjt.c0000644000175000017500000003336613546075722020700 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* * This file defines the BJT data structures that are * available to the next level(s) up the calling hierarchy */ /* * You may define the preprocessor symbolo * BJT_COMPAT to enable compatibility with * archaic spice2 bjt model */ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "bjtdefs.h" #include "ngspice/suffix.h" IFparm BJTpTable[] = { /* parameters */ IOPU("off", BJT_OFF, IF_FLAG, "Device initially off"), IOPAU("icvbe", BJT_IC_VBE, IF_REAL, "Initial B-E voltage"), IOPAU("icvce", BJT_IC_VCE, IF_REAL, "Initial C-E voltage"), IOPU("area", BJT_AREA, IF_REAL, "(Emitter) Area factor"), IOPU("areab", BJT_AREAB, IF_REAL, "Base area factor"), IOPU("areac", BJT_AREAC, IF_REAL, "Collector area factor"), IOPU("m", BJT_M, IF_REAL, "Parallel Multiplier"), IP("ic", BJT_IC, IF_REALVEC, "Initial condition vector"), IP("sens_area", BJT_AREA_SENS,IF_FLAG, "flag to request sensitivity WRT area"), OPU("colnode", BJT_QUEST_COLNODE, IF_INTEGER, "Number of collector node"), OPU("basenode", BJT_QUEST_BASENODE, IF_INTEGER, "Number of base node"), OPU("emitnode", BJT_QUEST_EMITNODE, IF_INTEGER, "Number of emitter node"), OPU("substnode",BJT_QUEST_SUBSTNODE,IF_INTEGER, "Number of substrate node"), OPU("colprimenode",BJT_QUEST_COLPRIMENODE,IF_INTEGER, "Internal collector node"), OPU("baseprimenode",BJT_QUEST_BASEPRIMENODE,IF_INTEGER,"Internal base node"), OPU("emitprimenode",BJT_QUEST_EMITPRIMENODE,IF_INTEGER, "Internal emitter node"), OP("ic", BJT_QUEST_CC, IF_REAL, "Current at collector node"), OP("ib", BJT_QUEST_CB, IF_REAL, "Current at base node"), OP("ie", BJT_QUEST_CE, IF_REAL, "Emitter current"), OPU("is", BJT_QUEST_CS, IF_REAL, "Substrate current"), OP("vbe", BJT_QUEST_VBE, IF_REAL, "B-E voltage"), OP("vbc", BJT_QUEST_VBC, IF_REAL, "B-C voltage"), OP("gm", BJT_QUEST_GM, IF_REAL, "Small signal transconductance"), OP("gpi", BJT_QUEST_GPI, IF_REAL, "Small signal input conductance - pi"), OP("gmu", BJT_QUEST_GMU, IF_REAL, "Small signal conductance - mu"), OP("gx", BJT_QUEST_GX, IF_REAL, "Conductance from base to internal base"), OP("go", BJT_QUEST_GO, IF_REAL, "Small signal output conductance"), OPU("geqcb",BJT_QUEST_GEQCB,IF_REAL, "d(Ibe)/d(Vbc)"), OPU("gcsub",BJT_QUEST_GCSUB, IF_REAL, "Internal Subs. cap. equiv. cond."), OPU("gdsub", BJT_QUEST_GDSUB, IF_REAL, "Internal Subs. Diode equiv. cond."), OPU("geqbx",BJT_QUEST_GEQBX,IF_REAL, "Internal C-B-base cap. equiv. cond."), OP("cpi",BJT_QUEST_CPI, IF_REAL, "Internal base to emitter capacitance"), OP("cmu",BJT_QUEST_CMU, IF_REAL, "Internal base to collector capacitance"), OP("cbx",BJT_QUEST_CBX, IF_REAL, "Base to collector capacitance"), OP("csub",BJT_QUEST_CSUB, IF_REAL, "Substrate capacitance"), OPU("cqbe", BJT_QUEST_CQBE, IF_REAL, "Cap. due to charge storage in B-E jct."), OPU("cqbc", BJT_QUEST_CQBC, IF_REAL, "Cap. due to charge storage in B-C jct."), OPU("cqsub", BJT_QUEST_CQSUB, IF_REAL, "Cap. due to charge storage in Subs. jct."), OPU("cqbx", BJT_QUEST_CQBX, IF_REAL, "Cap. due to charge storage in B-X jct."), OPU("cexbc",BJT_QUEST_CEXBC,IF_REAL, "Total Capacitance in B-X junction"), OPU("qbe", BJT_QUEST_QBE, IF_REAL, "Charge storage B-E junction"), OPU("qbc", BJT_QUEST_QBC, IF_REAL, "Charge storage B-C junction"), OPU("qsub", BJT_QUEST_QSUB, IF_REAL, "Charge storage Subs. junction"), OPU("qbx", BJT_QUEST_QBX, IF_REAL, "Charge storage B-X junction"), OPU("p", BJT_QUEST_POWER,IF_REAL, "Power dissipation"), OPU("sens_dc", BJT_QUEST_SENS_DC, IF_REAL, "dc sensitivity "), OPU("sens_real", BJT_QUEST_SENS_REAL, IF_REAL,"real part of ac sensitivity"), OPU("sens_imag", BJT_QUEST_SENS_IMAG,IF_REAL, "dc sens. & imag part of ac sens."), OPU("sens_mag", BJT_QUEST_SENS_MAG, IF_REAL, "sensitivity of ac magnitude"), OPU("sens_ph", BJT_QUEST_SENS_PH, IF_REAL, "sensitivity of ac phase"), OPU("sens_cplx", BJT_QUEST_SENS_CPLX, IF_COMPLEX, "ac sensitivity"), IOPU("temp", BJT_TEMP, IF_REAL, "instance temperature"), IOPU("dtemp", BJT_DTEMP, IF_REAL, "instance temperature delta from circuit") }; IFparm BJTmPTable[] = { /* model parameters */ OP("type", BJT_MOD_TYPE, IF_STRING, "NPN or PNP"), IOPU("npn", BJT_MOD_NPN, IF_FLAG, "NPN type device"), IOPU("pnp", BJT_MOD_PNP, IF_FLAG, "PNP type device"), IOPU("subs", BJT_MOD_SUBS, IF_INTEGER, "Vertical or Lateral device"), IOP("tnom", BJT_MOD_TNOM, IF_REAL, "Parameter measurement temperature"), IOPR("tref", BJT_MOD_TNOM, IF_REAL, "Parameter measurement temperature"), IOP("is", BJT_MOD_IS, IF_REAL, "Saturation Current"), IOP("bf", BJT_MOD_BF, IF_REAL, "Ideal forward beta"), IOP("nf", BJT_MOD_NF, IF_REAL, "Forward emission coefficient"), IOP("vaf", BJT_MOD_VAF, IF_REAL, "Forward Early voltage"), IOPR("va", BJT_MOD_VAF, IF_REAL, "Forward Early voltage"), IOP("ikf", BJT_MOD_IKF, IF_REAL, "Forward beta roll-off corner current"), IOPR("ik", BJT_MOD_IKF, IF_REAL, "Forward beta roll-off corner current"), IOP("ise", BJT_MOD_ISE, IF_REAL, "B-E leakage saturation current"), #ifdef BJT_COMPAT IOP("c2", BJT_MOD_C2, IF_REAL, "Obsolete parameter name"), #endif IOP("ne", BJT_MOD_NE, IF_REAL, "B-E leakage emission coefficient"), IOP("br", BJT_MOD_BR, IF_REAL, "Ideal reverse beta"), IOP("nr", BJT_MOD_NR, IF_REAL, "Reverse emission coefficient"), IOP("var", BJT_MOD_VAR, IF_REAL, "Reverse Early voltage"), IOPR("vb", BJT_MOD_VAR, IF_REAL, "Reverse Early voltage"), IOP("ikr", BJT_MOD_IKR, IF_REAL, "reverse beta roll-off corner current"), IOP("isc", BJT_MOD_ISC, IF_REAL, "B-C leakage saturation current"), #ifdef BJT_COMPAT IOP("c4", BJT_MOD_C4, IF_REAL, "Obsolete parameter name"), #endif IOP("nc", BJT_MOD_NC, IF_REAL, "B-C leakage emission coefficient"), IOP("rb", BJT_MOD_RB, IF_REAL, "Zero bias base resistance"), IOP("irb", BJT_MOD_IRB, IF_REAL, "Current for base resistance=(rb+rbm)/2"), IOP("rbm", BJT_MOD_RBM, IF_REAL, "Minimum base resistance"), IOP("re", BJT_MOD_RE, IF_REAL, "Emitter resistance"), IOP("rc", BJT_MOD_RC, IF_REAL, "Collector resistance"), IOPA("cje", BJT_MOD_CJE, IF_REAL,"Zero bias B-E depletion capacitance"), IOPA("vje", BJT_MOD_VJE, IF_REAL, "B-E built in potential"), IOPAR("pe", BJT_MOD_VJE, IF_REAL, "B-E built in potential"), IOPA("mje", BJT_MOD_MJE, IF_REAL, "B-E junction grading coefficient"), IOPAR("me", BJT_MOD_MJE, IF_REAL, "B-E junction grading coefficient"), IOPA("tf", BJT_MOD_TF, IF_REAL, "Ideal forward transit time"), IOPA("xtf", BJT_MOD_XTF, IF_REAL, "Coefficient for bias dependence of TF"), IOPA("vtf", BJT_MOD_VTF, IF_REAL, "Voltage giving VBC dependence of TF"), IOPA("itf", BJT_MOD_ITF, IF_REAL, "High current dependence of TF"), IOPA("ptf", BJT_MOD_PTF, IF_REAL, "Excess phase"), IOPA("cjc", BJT_MOD_CJC, IF_REAL, "Zero bias B-C depletion capacitance"), IOPA("vjc", BJT_MOD_VJC, IF_REAL, "B-C built in potential"), IOPAR("pc", BJT_MOD_VJC, IF_REAL, "B-C built in potential"), IOPA("mjc", BJT_MOD_MJC, IF_REAL, "B-C junction grading coefficient"), IOPAR("mc", BJT_MOD_MJC, IF_REAL, "B-C junction grading coefficient"), IOPA("xcjc",BJT_MOD_XCJC, IF_REAL, "Fraction of B-C cap to internal base"), IOPA("tr", BJT_MOD_TR, IF_REAL, "Ideal reverse transit time"), IOPA("cjs", BJT_MOD_CJS, IF_REAL, "Zero bias Substrate capacitance"), IOPAR("csub",BJT_MOD_CJS, IF_REAL, "Zero bias Substrate capacitance"), IOPAR("ccs", BJT_MOD_CJS, IF_REAL, "Zero bias Substrate capacitance"), IOPA("vjs", BJT_MOD_VJS, IF_REAL, "Substrate junction built in potential"), IOPAR("ps", BJT_MOD_VJS, IF_REAL, "Substrate junction built in potential"), IOPA("mjs", BJT_MOD_MJS, IF_REAL, "Substrate junction grading coefficient"), IOPAR("ms", BJT_MOD_MJS, IF_REAL, "Substrate junction grading coefficient"), IOP("xtb", BJT_MOD_XTB, IF_REAL, "Forward and reverse beta temp. exp."), IOP("eg", BJT_MOD_EG, IF_REAL, "Energy gap for IS temp. dependency"), IOP("xti", BJT_MOD_XTI, IF_REAL, "Temp. exponent for IS"), IOP("fc", BJT_MOD_FC, IF_REAL, "Forward bias junction fit parameter"), IOP("kf", BJT_MOD_KF, IF_REAL, "Flicker Noise Coefficient"), IOP("af", BJT_MOD_AF, IF_REAL,"Flicker Noise Exponent"), OPU("invearlyvoltf",BJT_MOD_INVEARLYF,IF_REAL,"Inverse early voltage:forward"), OPU("invearlyvoltr",BJT_MOD_INVEARLYR,IF_REAL,"Inverse early voltage:reverse"), OPU("invrollofff", BJT_MOD_INVROLLOFFF, IF_REAL,"Inverse roll off - forward"), OPU("invrolloffr", BJT_MOD_INVROLLOFFR, IF_REAL,"Inverse roll off - reverse"), OPU("collectorconduct",BJT_MOD_COLCONDUCT,IF_REAL,"Collector conductance"), OPU("emitterconduct", BJT_MOD_EMITTERCONDUCT,IF_REAL, "Emitter conductance"), OPU("transtimevbcfact",BJT_MOD_TRANSVBCFACT,IF_REAL,"Transit time VBC factor"), OPU("excessphasefactor",BJT_MOD_EXCESSPHASEFACTOR,IF_REAL, "Excess phase fact."), IOP("iss", BJT_MOD_ISS, IF_REAL, "Substrate Jct. Saturation Current"), IOP("ns", BJT_MOD_NS, IF_REAL, "Substrate current emission coefficient"), IOP("tlev", BJT_MOD_TLEV, IF_INTEGER, "Temperature equation selector"), IOP("tlevc", BJT_MOD_TLEVC, IF_INTEGER, "Temperature equation selector"), IOP("tbf1", BJT_MOD_TBF1, IF_REAL, "BF 1. temperature coefficient"), IOP("tbf2", BJT_MOD_TBF2, IF_REAL, "BF 2. temperature coefficient"), IOP("tbr1", BJT_MOD_TBR1, IF_REAL, "BR 1. temperature coefficient"), IOP("tbr2", BJT_MOD_TBR2, IF_REAL, "BR 2. temperature coefficient"), IOP("tikf1", BJT_MOD_TIKF1, IF_REAL, "IKF 1. temperature coefficient"), IOP("tikf2", BJT_MOD_TIKF2, IF_REAL, "IKF 2. temperature coefficient"), IOP("tikr1", BJT_MOD_TIKR1, IF_REAL, "IKR 1. temperature coefficient"), IOP("tikr2", BJT_MOD_TIKR2, IF_REAL, "IKR 2. temperature coefficient"), IOP("tirb1", BJT_MOD_TIRB1, IF_REAL, "IRB 1. temperature coefficient"), IOP("tirb2", BJT_MOD_TIRB2, IF_REAL, "IRB 2. temperature coefficient"), IOP("tnc1", BJT_MOD_TNC1, IF_REAL, "NC 1. temperature coefficient"), IOP("tnc2", BJT_MOD_TNC2, IF_REAL, "NC 2. temperature coefficient"), IOP("tne1", BJT_MOD_TNE1, IF_REAL, "NE 1. temperature coefficient"), IOP("tne2", BJT_MOD_TNE2, IF_REAL, "NE 2. temperature coefficient"), IOP("tnf1", BJT_MOD_TNF1, IF_REAL, "NF 1. temperature coefficient"), IOP("tnf2", BJT_MOD_TNF2, IF_REAL, "NF 2. temperature coefficient"), IOP("tnr1", BJT_MOD_TNR1, IF_REAL, "NR 1. temperature coefficient"), IOP("tnr2", BJT_MOD_TNR2, IF_REAL, "NR 2. temperature coefficient"), IOP("trb1", BJT_MOD_TRB1, IF_REAL, "RB 1. temperature coefficient"), IOP("trb2", BJT_MOD_TRB2, IF_REAL, "RB 2. temperature coefficient"), IOP("trc1", BJT_MOD_TRC1, IF_REAL, "RC 1. temperature coefficient"), IOP("trc2", BJT_MOD_TRC2, IF_REAL, "RC 2. temperature coefficient"), IOP("tre1", BJT_MOD_TRE1, IF_REAL, "RE 1. temperature coefficient"), IOP("tre2", BJT_MOD_TRE2, IF_REAL, "RE 2. temperature coefficient"), IOP("trm1", BJT_MOD_TRM1, IF_REAL, "RBM 1. temperature coefficient"), IOP("trm2", BJT_MOD_TRM2, IF_REAL, "RBM 2. temperature coefficient"), IOP("tvaf1", BJT_MOD_TVAF1, IF_REAL, "VAF 1. temperature coefficient"), IOP("tvaf2", BJT_MOD_TVAF2, IF_REAL, "VAF 2. temperature coefficient"), IOP("tvar1", BJT_MOD_TVAR1, IF_REAL, "VAR 1. temperature coefficient"), IOP("tvar2", BJT_MOD_TVAR2, IF_REAL, "VAR 2. temperature coefficient"), IOP("ctc", BJT_MOD_CTC, IF_REAL, "CJC temperature coefficient"), IOP("cte", BJT_MOD_CTE, IF_REAL, "CJE temperature coefficient"), IOP("cts", BJT_MOD_CTS, IF_REAL, "CJS temperature coefficient"), IOP("tvjc", BJT_MOD_TVJC, IF_REAL, "VJC temperature coefficient"), IOP("tvje", BJT_MOD_TVJE, IF_REAL, "VJE temperature coefficient"), IOP("tvjs", BJT_MOD_TVJS, IF_REAL, "VJS temperature coefficient"), IOP("titf1",BJT_MOD_TITF1, IF_REAL, "ITF 1. temperature coefficient"), IOP("titf2",BJT_MOD_TITF2, IF_REAL, "ITF 2. temperature coefficient"), IOP("ttf1", BJT_MOD_TTF1, IF_REAL, "TF 1. temperature coefficient"), IOP("ttf2", BJT_MOD_TTF2, IF_REAL, "TF 2. temperature coefficient"), IOP("ttr1", BJT_MOD_TTR1, IF_REAL, "TR 1. temperature coefficient"), IOP("ttr2", BJT_MOD_TTR2, IF_REAL, "TR 2. temperature coefficient"), IOP("tmje1",BJT_MOD_TMJE1, IF_REAL, "MJE 1. temperature coefficient"), IOP("tmje2",BJT_MOD_TMJE2, IF_REAL, "MJE 2. temperature coefficient"), IOP("tmjc1",BJT_MOD_TMJC1, IF_REAL, "MJC 1. temperature coefficient"), IOP("tmjc2",BJT_MOD_TMJC2, IF_REAL, "MJC 2. temperature coefficient"), IOP("tmjs1",BJT_MOD_TMJS1, IF_REAL, "MJS 1. temperature coefficient"), IOP("tmjs2",BJT_MOD_TMJS2, IF_REAL, "MJS 2. temperature coefficient"), IOP("tns1", BJT_MOD_TNS1, IF_REAL, "NS 1. temperature coefficient"), IOP("tns2", BJT_MOD_TNS2, IF_REAL, "NS 2. temperature coefficient"), IOP("nkf", BJT_MOD_NKF, IF_REAL, "NKF High current beta rolloff exponent"), IOP("tis1", BJT_MOD_TIS1, IF_REAL, "IS 1. temperature coefficient"), IOP("tis2", BJT_MOD_TIS2, IF_REAL, "IS 2. temperature coefficient"), IOP("tise1", BJT_MOD_TISE1, IF_REAL, "ISE 1. temperature coefficient"), IOP("tise2", BJT_MOD_TISE2, IF_REAL, "ISE 2. temperature coefficient"), IOP("tisc1", BJT_MOD_TISC1, IF_REAL, "ISC 1. temperature coefficient"), IOP("tisc2", BJT_MOD_TISC2, IF_REAL, "ISC 2. temperature coefficient"), IOP("vbe_max", BJT_MOD_VBE_MAX, IF_REAL, "maximum voltage B-E junction"), IOP("vbc_max", BJT_MOD_VBC_MAX, IF_REAL, "maximum voltage B-C junction"), IOP("vce_max", BJT_MOD_VCE_MAX, IF_REAL, "maximum voltage C-E branch") }; char *BJTnames[] = { "collector", "base", "emitter", "substrate" }; int BJTnSize = NUMELEMS(BJTnames); int BJTpTSize = NUMELEMS(BJTpTable); int BJTmPTSize = NUMELEMS(BJTmPTable); int BJTiSize = sizeof(BJTinstance); int BJTmSize = sizeof(BJTmodel); tmpk8ny_4pz/src/spicelib/devices/cccs/0000755000175000017500000000000013546075722020076 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/cccs/cccssprt.c0000644000175000017500000000276213546075722022075 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* Pretty print the sensitivity info for all * the CCCS in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "cccsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" void CCCSsPrint(GENmodel *inModel, CKTcircuit *ckt) { CCCSmodel *model = (CCCSmodel*)inModel; CCCSinstance *here; printf("CURRENT CONTROLLED CURRENT SOURCES-----------------\n"); /* loop through all the voltage source models */ for( ; model != NULL; model = CCCSnextModel(model)) { printf("Model name:%s\n",model->CCCSmodName); /* loop through all the instances of the model */ for (here = CCCSinstances(model); here != NULL ; here=CCCSnextInstance(here)) { printf(" Instance name:%s\n",here->CCCSname); printf(" Positive, negative nodes: %s, %s\n", CKTnodName(ckt,here->CCCSposNode), CKTnodName(ckt,here->CCCSnegNode)); printf(" Controlling source name: %s\n", here->CCCScontName); printf(" Controlling Branch equation number: %s\n", CKTnodName(ckt,here->CCCScontBranch)); printf(" Coefficient: %f\n",here->CCCScoeff); printf(" CCCSsenParmNo:%d\n",here->CCCSsenParmNo); } } } tmpk8ny_4pz/src/spicelib/devices/cccs/cccs.c0000644000175000017500000000321413546075722021155 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/devdefs.h" #include "cccsdefs.h" #include "ngspice/suffix.h" IFparm CCCSpTable[] = { /* parameters */ IOPU("gain", CCCS_GAIN, IF_REAL ,"Gain of source"), IOPU("control", CCCS_CONTROL, IF_INSTANCE,"Name of controlling source"), IOP ( "m", CCCS_M, IF_REAL , "Parallel multiplier"), IP("sens_gain",CCCS_GAIN_SENS,IF_FLAG, "flag to request sensitivity WRT gain"), OPU("neg_node", CCCS_NEG_NODE,IF_INTEGER, "Negative node of source"), OPU("pos_node", CCCS_POS_NODE,IF_INTEGER, "Positive node of source"), OP("i", CCCS_CURRENT, IF_REAL, "CCCS output current"), OP("v", CCCS_VOLTS, IF_REAL, "CCCS voltage at output"), OP("p", CCCS_POWER, IF_REAL, "CCCS power"), OPU("sens_dc", CCCS_QUEST_SENS_DC, IF_REAL, "dc sensitivity "), OPU("sens_real",CCCS_QUEST_SENS_REAL,IF_REAL, "real part of ac sensitivity"), OPU("sens_imag",CCCS_QUEST_SENS_IMAG,IF_REAL, "imag part of ac sensitivity"), OPU("sens_mag", CCCS_QUEST_SENS_MAG, IF_REAL, "sensitivity of ac magnitude"), OPU("sens_ph", CCCS_QUEST_SENS_PH, IF_REAL, "sensitivity of ac phase"), OPU("sens_cplx",CCCS_QUEST_SENS_CPLX,IF_COMPLEX, "ac sensitivity") }; #if 0 static IFparm CCCSmPTable[] = { /* model parameters */ }; #endif char *CCCSnames[] = { "F+", "F-" }; int CCCSnSize = NUMELEMS(CCCSnames); int CCCSpTSize = NUMELEMS(CCCSpTable); int CCCSmPTSize = 0; int CCCSiSize = sizeof(CCCSinstance); int CCCSmSize = sizeof(CCCSmodel); tmpk8ny_4pz/src/spicelib/devices/cccs/Makefile.am0000644000175000017500000000065613546075722022141 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libcccs.la libcccs_la_SOURCES = \ cccs.c \ cccsask.c \ cccsdefs.h \ cccsext.h \ cccsinit.c \ cccsinit.h \ cccsitf.h \ cccsload.c \ cccspar.c \ cccspzld.c \ cccssacl.c \ cccsset.c \ cccssld.c \ cccssprt.c \ cccssset.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/cccs/cccsext.h0000644000175000017500000000114013546075722021677 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ extern int CCCSask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int CCCSload(GENmodel*,CKTcircuit*); extern int CCCSparam(int,IFvalue*,GENinstance*,IFvalue*); extern int CCCSpzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int CCCSsAcLoad(GENmodel*,CKTcircuit*); extern int CCCSsLoad(GENmodel*,CKTcircuit*); extern void CCCSsPrint(GENmodel*,CKTcircuit*); extern int CCCSsSetup(SENstruct*,GENmodel*); extern int CCCSsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); tmpk8ny_4pz/src/spicelib/devices/cccs/cccssld.c0000644000175000017500000000225113546075722021660 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* actually load the current sensitivity information * into the array previously provided */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "cccsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CCCSsLoad(GENmodel *inModel, CKTcircuit *ckt) { CCCSmodel *model = (CCCSmodel*)inModel; CCCSinstance *here; double ic ; /* loop through all the CCCS models */ for( ; model != NULL; model = CCCSnextModel(model)) { /* loop through all the instances of the model */ for (here = CCCSinstances(model); here != NULL ; here=CCCSnextInstance(here)) { if(here->CCCSsenParmNo){ ic = *(ckt->CKTrhsOld + here->CCCScontBranch); *(ckt->CKTsenInfo->SEN_RHS[here->CCCSposNode] + here->CCCSsenParmNo) -= ic; *(ckt->CKTsenInfo->SEN_RHS[here->CCCSnegNode] + here->CCCSsenParmNo) += ic; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/cccs/cccspzld.c0000644000175000017500000000202513546075722022046 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "cccsdefs.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int CCCSpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) /* actually load the current voltage value into the * sparse matrix previously provided */ { CCCSmodel *model = (CCCSmodel*)inModel; CCCSinstance *here; NG_IGNORE(ckt); NG_IGNORE(s); /* loop through all the voltage source models */ for( ; model != NULL; model = CCCSnextModel(model)) { /* loop through all the instances of the model */ for (here = CCCSinstances(model); here != NULL ; here=CCCSnextInstance(here)) { *(here->CCCSposContBrPtr) += here->CCCScoeff ; *(here->CCCSnegContBrPtr) -= here->CCCScoeff ; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/cccs/cccspar.c0000644000175000017500000000205113546075722021656 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "cccsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int CCCSparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { CCCSinstance *here = (CCCSinstance*)inst; NG_IGNORE(select); switch(param) { case CCCS_GAIN: here->CCCScoeff = value->rValue; if (here->CCCSmGiven) here->CCCScoeff *= here->CCCSmValue; here->CCCScoeffGiven = TRUE; break; case CCCS_CONTROL: here->CCCScontName = value->uValue; break; case CCCS_M: here->CCCSmValue = value->rValue; here->CCCSmGiven = TRUE; break; case CCCS_GAIN_SENS: here->CCCSsenParmNo = value->iValue; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/cccs/cccsask.c0000644000175000017500000001161213546075722021655 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 **********/ /* * This routine gives access to the internal device parameters * of Current Controlled Current Source */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "cccsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int CCCSask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { CCCSinstance *here = (CCCSinstance*)inst; double vr; double vi; double sr; double si; double vm; static char *msg = "Current and power not available for ac analysis"; switch(which) { case CCCS_GAIN: value->rValue = here->CCCScoeff; return (OK); case CCCS_CONTROL: value->uValue = here->CCCScontName; return (OK); case CCCS_M: value->rValue = here->CCCSmValue; return (OK); case CCCS_POS_NODE: value->iValue = here->CCCSposNode; return (OK); case CCCS_NEG_NODE: value->iValue = here->CCCSnegNode; return (OK); case CCCS_CONT_BR: value->iValue = here->CCCScontBranch; return (OK); case CCCS_CURRENT : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "CCCSask"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = *(ckt->CKTrhsOld + here->CCCScontBranch) * here->CCCScoeff; } return(OK); case CCCS_VOLTS : value->rValue = (*(ckt->CKTrhsOld + here->CCCSposNode) - *(ckt->CKTrhsOld + here->CCCSnegNode)); return(OK); case CCCS_POWER : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "CCCSask"; strcpy(errMsg,msg); return(E_ASKPOWER); } else { value->rValue = *(ckt->CKTrhsOld + here->CCCScontBranch) * here->CCCScoeff * (*(ckt->CKTrhsOld + here->CCCSposNode) - *(ckt->CKTrhsOld + here->CCCSnegNode)); } return(OK); case CCCS_QUEST_SENS_DC: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_Sap[select->iValue + 1]+ here->CCCSsenParmNo); } return(OK); case CCCS_QUEST_SENS_REAL: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->CCCSsenParmNo); } return(OK); case CCCS_QUEST_SENS_IMAG: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->CCCSsenParmNo); } return(OK); case CCCS_QUEST_SENS_MAG: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = sqrt(vr*vr + vi*vi); if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->CCCSsenParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->CCCSsenParmNo); value->rValue = (vr * sr + vi * si)/vm; } return(OK); case CCCS_QUEST_SENS_PH: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = vr*vr + vi*vi; if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->CCCSsenParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->CCCSsenParmNo); value->rValue = (vr * si - vi * sr)/vm; } return(OK); case CCCS_QUEST_SENS_CPLX: if(ckt->CKTsenInfo){ value->cValue.real= *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->CCCSsenParmNo); value->cValue.imag= *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->CCCSsenParmNo); } return(OK); default: return (E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/cccs/cccssset.c0000644000175000017500000000164213546075722022057 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* loop through all the devices and * allocate parameter #s to design parameters */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "cccsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CCCSsSetup(SENstruct *info, GENmodel *inModel) { CCCSmodel *model = (CCCSmodel*)inModel; CCCSinstance *here; /* loop through all the CCCS models */ for( ; model != NULL; model = CCCSnextModel(model)) { /* loop through all the instances of the model */ for (here = CCCSinstances(model); here != NULL ; here=CCCSnextInstance(here)) { if(here->CCCSsenParmNo){ here->CCCSsenParmNo = ++(info->SENparms); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/cccs/cccsinit.h0000644000175000017500000000030213546075722022041 0ustar carstencarsten#ifndef _CCCSINIT_H #define _CCCSINIT_H extern IFparm CCCSpTable[ ]; extern char *CCCSnames[ ]; extern int CCCSpTSize; extern int CCCSnSize; extern int CCCSiSize; extern int CCCSmSize; #endif tmpk8ny_4pz/src/spicelib/devices/cccs/cccsitf.h0000644000175000017500000000026013546075722021663 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_CCCS #define DEV_CCCS SPICEdev *get_cccs_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/cccs/cccssacl.c0000644000175000017500000000275713546075722022033 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* actually load the current ac sensitivity information * into the array previously provided */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "cccsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CCCSsAcLoad(GENmodel *inModel, CKTcircuit *ckt) { CCCSmodel *model = (CCCSmodel*)inModel; CCCSinstance *here; double ic; double i_ic; /* loop through all the CCCS models */ for( ; model != NULL; model = CCCSnextModel(model)) { /* loop through all the instances of the model */ for (here = CCCSinstances(model); here != NULL ; here=CCCSnextInstance(here)) { if(here->CCCSsenParmNo){ ic = *(ckt->CKTrhsOld + here->CCCScontBranch); i_ic = *(ckt->CKTirhsOld + here->CCCScontBranch); *(ckt->CKTsenInfo->SEN_RHS[here->CCCSposNode] + here->CCCSsenParmNo) -= ic; *(ckt->CKTsenInfo->SEN_iRHS[here->CCCSposNode] + here->CCCSsenParmNo) -= i_ic; *(ckt->CKTsenInfo->SEN_RHS[here->CCCSnegNode] + here->CCCSsenParmNo) += ic; *(ckt->CKTsenInfo->SEN_iRHS[here->CCCSnegNode] + here->CCCSsenParmNo) += i_ic; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/cccs/cccsload.c0000644000175000017500000000172613546075722022023 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "cccsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int CCCSload(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current voltage value into the * sparse matrix previously provided */ { CCCSmodel *model = (CCCSmodel*)inModel; CCCSinstance *here; NG_IGNORE(ckt); /* loop through all the voltage source models */ for( ; model != NULL; model = CCCSnextModel(model)) { /* loop through all the instances of the model */ for (here = CCCSinstances(model); here != NULL ; here=CCCSnextInstance(here)) { *(here->CCCSposContBrPtr) += here->CCCScoeff ; *(here->CCCSnegContBrPtr) -= here->CCCScoeff ; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/cccs/cccsdefs.h0000644000175000017500000000464013546075722022030 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #ifndef CCCS #define CCCS #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" #include "ngspice/cktdefs.h" /* structures used to describe Current Controlled Current Sources */ /* information needed for each instance */ typedef struct sCCCSinstance { struct GENinstance gen; #define CCCSmodPtr(inst) ((struct sCCCSmodel *)((inst)->gen.GENmodPtr)) #define CCCSnextInstance(inst) ((struct sCCCSinstance *)((inst)->gen.GENnextInstance)) #define CCCSname gen.GENname #define CCCSstate gen.GENstate const int CCCSposNode; /* number of positive node of source */ const int CCCSnegNode; /* number of negative node of source */ int CCCScontBranch; /* number of branch eq of controlling source */ char *CCCScontName; /* pointer to name of controlling instance */ double CCCScoeff; /* coefficient */ double CCCSmValue; /* Parallel multiplier */ double *CCCSposContBrPtr; /* pointer to sparse matrix element at *(positive node, control branch eq)*/ double *CCCSnegContBrPtr; /* pointer to sparse matrix element at *(negative node, control branch eq)*/ unsigned CCCScoeffGiven :1 ; /* flag to indicate coeff given */ unsigned CCCSmGiven :1 ; /* flag to indicate multiplier given */ int CCCSsenParmNo; /* parameter # for sensitivity use; set equal to 0 if not a design parameter*/ } CCCSinstance ; /* per model data */ typedef struct sCCCSmodel { /* model structure for a source */ struct GENmodel gen; #define CCCSmodType gen.GENmodType #define CCCSnextModel(inst) ((struct sCCCSmodel *)((inst)->gen.GENnextModel)) #define CCCSinstances(inst) ((CCCSinstance *)((inst)->gen.GENinstances)) #define CCCSmodName gen.GENmodName } CCCSmodel; /* device parameters */ enum { CCCS_GAIN = 1, CCCS_CONTROL, CCCS_POS_NODE, CCCS_NEG_NODE, CCCS_CONT_BR, CCCS_GAIN_SENS, CCCS_CURRENT, CCCS_POWER, CCCS_VOLTS, CCCS_M, }; /* model parameters */ /* device questions */ enum { CCCS_QUEST_SENS_REAL = 201, CCCS_QUEST_SENS_IMAG, CCCS_QUEST_SENS_MAG, CCCS_QUEST_SENS_PH, CCCS_QUEST_SENS_CPLX, CCCS_QUEST_SENS_DC, }; /* model questions */ #include "cccsext.h" #endif /*CCCS*/ tmpk8ny_4pz/src/spicelib/devices/cccs/cccsset.c0000644000175000017500000000310313546075722021666 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* load the voltage source structure with those pointers needed later * for fast matrix loading */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "cccsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int CCCSsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { CCCSmodel *model = (CCCSmodel*)inModel; CCCSinstance *here; NG_IGNORE(states); /* loop through all the voltage source models */ for( ; model != NULL; model = CCCSnextModel(model)) { /* loop through all the instances of the model */ for (here = CCCSinstances(model); here != NULL ; here=CCCSnextInstance(here)) { here->CCCScontBranch = CKTfndBranch(ckt,here->CCCScontName); if(here->CCCScontBranch == 0) { SPfrontEnd->IFerrorf (ERR_FATAL, "%s: unknown controlling source %s", here->CCCSname, here->CCCScontName); return(E_BADPARM); } /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(CCCSposContBrPtr,CCCSposNode,CCCScontBranch); TSTALLOC(CCCSnegContBrPtr,CCCSnegNode,CCCScontBranch); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/cccs/cccsinit.c0000644000175000017500000000312313546075722022040 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "cccsitf.h" #include "cccsext.h" #include "cccsinit.h" SPICEdev CCCSinfo = { .DEVpublic = { .name = "CCCS", .description = "Current controlled current source", .terms = &CCCSnSize, .numNames = &CCCSnSize, .termNames = CCCSnames, .numInstanceParms = &CCCSpTSize, .instanceParms = CCCSpTable, .numModelParms = NULL, .modelParms = NULL, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = CCCSparam, .DEVmodParam = NULL, .DEVload = CCCSload, .DEVsetup = CCCSsetup, .DEVunsetup = NULL, .DEVpzSetup = CCCSsetup, .DEVtemperature = NULL, .DEVtrunc = NULL, .DEVfindBranch = NULL, .DEVacLoad = CCCSload, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = NULL, .DEVask = CCCSask, .DEVmodAsk = NULL, .DEVpzLoad = CCCSpzLoad, .DEVconvTest = NULL, .DEVsenSetup = CCCSsSetup, .DEVsenLoad = CCCSsLoad, .DEVsenUpdate = NULL, .DEVsenAcLoad = CCCSsAcLoad, .DEVsenPrint = CCCSsPrint, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &CCCSiSize, .DEVmodSize = &CCCSmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_cccs_info(void) { return &CCCSinfo; } tmpk8ny_4pz/src/spicelib/devices/mos3/0000755000175000017500000000000013546075722020044 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/mos3/mos3init.c0000644000175000017500000000326213546075722021760 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "mos3itf.h" #include "mos3ext.h" #include "mos3init.h" SPICEdev MOS3info = { .DEVpublic = { .name = "Mos3", .description = "Level 3 MOSfet model with Meyer capacitance model", .terms = &MOS3nSize, .numNames = &MOS3nSize, .termNames = MOS3names, .numInstanceParms = &MOS3pTSize, .instanceParms = MOS3pTable, .numModelParms = &MOS3mPTSize, .modelParms = MOS3mPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = MOS3param, .DEVmodParam = MOS3mParam, .DEVload = MOS3load, .DEVsetup = MOS3setup, .DEVunsetup = MOS3unsetup, .DEVpzSetup = MOS3setup, .DEVtemperature = MOS3temp, .DEVtrunc = MOS3trunc, .DEVfindBranch = NULL, .DEVacLoad = MOS3acLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = MOS3delete, .DEVsetic = MOS3getic, .DEVask = MOS3ask, .DEVmodAsk = MOS3mAsk, .DEVpzLoad = MOS3pzLoad, .DEVconvTest = MOS3convTest, .DEVsenSetup = MOS3sSetup, .DEVsenLoad = MOS3sLoad, .DEVsenUpdate = MOS3sUpdate, .DEVsenAcLoad = MOS3sAcLoad, .DEVsenPrint = MOS3sPrint, .DEVsenTrunc = NULL, .DEVdisto = MOS3disto, .DEVnoise = MOS3noise, .DEVsoaCheck = NULL, .DEVinstSize = &MOS3iSize, .DEVmodSize = &MOS3mSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_mos3_info(void) { return &MOS3info; } tmpk8ny_4pz/src/spicelib/devices/mos3/Makefile.am0000644000175000017500000000112113546075722022073 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libmos3.la libmos3_la_SOURCES = \ mos3.c \ mos3acld.c \ mos3ask.c \ mos3conv.c \ mos3defs.h \ mos3del.c \ mos3dist.c \ mos3dset.c \ mos3ext.h \ mos3ic.c \ mos3init.c \ mos3init.h \ mos3itf.h \ mos3load.c \ mos3mask.c \ mos3mpar.c \ mos3noi.c \ mos3par.c \ mos3pzld.c \ mos3sacl.c \ mos3set.c \ mos3sld.c \ mos3sprt.c \ mos3sset.c \ mos3supd.c \ mos3temp.c \ mos3trun.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/mos3/mos3pzld.c0000644000175000017500000001235713546075722021773 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "mos3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS3pzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { MOS3model *model = (MOS3model *)inModel; MOS3instance *here; int xnrm; int xrev; double xgs; double xgd; double xgb; double xbd; double xbs; double capgs; double capgd; double capgb; double GateBulkOverlapCap; double GateDrainOverlapCap; double GateSourceOverlapCap; double EffectiveLength; double EffectiveWidth; for( ; model != NULL; model = MOS3nextModel(model)) { for(here = MOS3instances(model); here!= NULL; here = MOS3nextInstance(here)) { if (here->MOS3mode < 0) { xnrm=0; xrev=1; } else { xnrm=1; xrev=0; } /* * meyer's model parameters */ EffectiveWidth=here->MOS3w-2*model->MOS3widthNarrow+ model->MOS3widthAdjust; EffectiveLength=here->MOS3l - 2*model->MOS3latDiff+ model->MOS3lengthAdjust; GateSourceOverlapCap = model->MOS3gateSourceOverlapCapFactor * here->MOS3m * EffectiveWidth; GateDrainOverlapCap = model->MOS3gateDrainOverlapCapFactor * here->MOS3m * EffectiveWidth; GateBulkOverlapCap = model->MOS3gateBulkOverlapCapFactor * here->MOS3m * EffectiveLength; capgs = ( 2* *(ckt->CKTstate0+here->MOS3capgs)+ GateSourceOverlapCap ); capgd = ( 2* *(ckt->CKTstate0+here->MOS3capgd)+ GateDrainOverlapCap ); capgb = ( 2* *(ckt->CKTstate0+here->MOS3capgb)+ GateBulkOverlapCap ); xgs = capgs; xgd = capgd; xgb = capgb; xbd = here->MOS3capbd; xbs = here->MOS3capbs; /*printf("mos2: xgs=%g, xgd=%g, xgb=%g, xbd=%g, xbs=%g\n", xgs,xgd,xgb,xbd,xbs);*/ /* * load matrix */ *(here->MOS3GgPtr ) += (xgd+xgs+xgb)*s->real; *(here->MOS3GgPtr +1) += (xgd+xgs+xgb)*s->imag; *(here->MOS3BbPtr ) += (xgb+xbd+xbs)*s->real; *(here->MOS3BbPtr +1) += (xgb+xbd+xbs)*s->imag; *(here->MOS3DPdpPtr ) += (xgd+xbd)*s->real; *(here->MOS3DPdpPtr +1) += (xgd+xbd)*s->imag; *(here->MOS3SPspPtr ) += (xgs+xbs)*s->real; *(here->MOS3SPspPtr +1) += (xgs+xbs)*s->imag; *(here->MOS3GbPtr ) -= xgb*s->real; *(here->MOS3GbPtr +1) -= xgb*s->imag; *(here->MOS3GdpPtr ) -= xgd*s->real; *(here->MOS3GdpPtr +1) -= xgd*s->imag; *(here->MOS3GspPtr ) -= xgs*s->real; *(here->MOS3GspPtr +1) -= xgs*s->imag; *(here->MOS3BgPtr ) -= xgb*s->real; *(here->MOS3BgPtr +1) -= xgb*s->imag; *(here->MOS3BdpPtr ) -= xbd*s->real; *(here->MOS3BdpPtr +1) -= xbd*s->imag; *(here->MOS3BspPtr ) -= xbs*s->real; *(here->MOS3BspPtr +1) -= xbs*s->imag; *(here->MOS3DPgPtr ) -= xgd*s->real; *(here->MOS3DPgPtr +1) -= xgd*s->imag; *(here->MOS3DPbPtr ) -= xbd*s->real; *(here->MOS3DPbPtr +1) -= xbd*s->imag; *(here->MOS3SPgPtr ) -= xgs*s->real; *(here->MOS3SPgPtr +1) -= xgs*s->imag; *(here->MOS3SPbPtr ) -= xbs*s->real; *(here->MOS3SPbPtr +1) -= xbs*s->imag; *(here->MOS3DdPtr) += here->MOS3drainConductance; *(here->MOS3SsPtr) += here->MOS3sourceConductance; *(here->MOS3BbPtr) += here->MOS3gbd+here->MOS3gbs; *(here->MOS3DPdpPtr) += here->MOS3drainConductance+ here->MOS3gds+here->MOS3gbd+ xrev*(here->MOS3gm+here->MOS3gmbs); *(here->MOS3SPspPtr) += here->MOS3sourceConductance+ here->MOS3gds+here->MOS3gbs+ xnrm*(here->MOS3gm+here->MOS3gmbs); *(here->MOS3DdpPtr) -= here->MOS3drainConductance; *(here->MOS3SspPtr) -= here->MOS3sourceConductance; *(here->MOS3BdpPtr) -= here->MOS3gbd; *(here->MOS3BspPtr) -= here->MOS3gbs; *(here->MOS3DPdPtr) -= here->MOS3drainConductance; *(here->MOS3DPgPtr) += (xnrm-xrev)*here->MOS3gm; *(here->MOS3DPbPtr) += -here->MOS3gbd+(xnrm-xrev)*here->MOS3gmbs; *(here->MOS3DPspPtr) -= here->MOS3gds+ xnrm*(here->MOS3gm+here->MOS3gmbs); *(here->MOS3SPgPtr) -= (xnrm-xrev)*here->MOS3gm; *(here->MOS3SPsPtr) -= here->MOS3sourceConductance; *(here->MOS3SPbPtr) -= here->MOS3gbs+(xnrm-xrev)*here->MOS3gmbs; *(here->MOS3SPdpPtr) -= here->MOS3gds+ xrev*(here->MOS3gm+here->MOS3gmbs); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos3/mos3conv.c0000644000175000017500000000635113546075722021764 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS3convTest(GENmodel *inModel, CKTcircuit *ckt) { MOS3model *model = (MOS3model *)inModel; MOS3instance *here; double delvbs; double delvbd; double delvgs; double delvds; double delvgd; double cbhat; double cdhat; double vbs; double vbd; double vgs; double vds; double vgd; double vgdo; double tol; for( ; model != NULL; model = MOS3nextModel(model)) { for(here = MOS3instances(model); here!= NULL; here = MOS3nextInstance(here)) { vbs = model->MOS3type * ( *(ckt->CKTrhs+here->MOS3bNode) - *(ckt->CKTrhs+here->MOS3sNodePrime)); vgs = model->MOS3type * ( *(ckt->CKTrhs+here->MOS3gNode) - *(ckt->CKTrhs+here->MOS3sNodePrime)); vds = model->MOS3type * ( *(ckt->CKTrhs+here->MOS3dNodePrime) - *(ckt->CKTrhs+here->MOS3sNodePrime)); vbd=vbs-vds; vgd=vgs-vds; vgdo = *(ckt->CKTstate0 + here->MOS3vgs) - *(ckt->CKTstate0 + here->MOS3vds); delvbs = vbs - *(ckt->CKTstate0 + here->MOS3vbs); delvbd = vbd - *(ckt->CKTstate0 + here->MOS3vbd); delvgs = vgs - *(ckt->CKTstate0 + here->MOS3vgs); delvds = vds - *(ckt->CKTstate0 + here->MOS3vds); delvgd = vgd-vgdo; /* these are needed for convergence testing */ if (here->MOS3mode >= 0) { cdhat= here->MOS3cd- here->MOS3gbd * delvbd + here->MOS3gmbs * delvbs + here->MOS3gm * delvgs + here->MOS3gds * delvds ; } else { cdhat= here->MOS3cd - ( here->MOS3gbd - here->MOS3gmbs) * delvbd - here->MOS3gm * delvgd + here->MOS3gds * delvds ; } cbhat= here->MOS3cbs + here->MOS3cbd + here->MOS3gbd * delvbd + here->MOS3gbs * delvbs ; /* * check convergence */ tol=ckt->CKTreltol*MAX(fabs(cdhat),fabs(here->MOS3cd))+ ckt->CKTabstol; if (fabs(cdhat-here->MOS3cd) >= tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue, we haven't converged */ } else { tol=ckt->CKTreltol* MAX(fabs(cbhat),fabs(here->MOS3cbs+here->MOS3cbd)) + ckt->CKTabstol; if (fabs(cbhat-(here->MOS3cbs+here->MOS3cbd)) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue, we haven't converged*/ } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos3/mos3ask.c0000644000175000017500000004100113546075722021564 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Mathew Lew and Thomas L. Quarles Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "mos3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int MOS3ask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { MOS3instance *here = (MOS3instance *)inst; double vr; double vi; double sr; double si; double vm; static char *msg = "Current and power not available for ac analysis"; switch(which) { case MOS3_TEMP: value->rValue = here->MOS3temp-CONSTCtoK; return(OK); case MOS3_DTEMP: value->rValue = here->MOS3dtemp; return(OK); case MOS3_CGS: value->rValue = 2* *(ckt->CKTstate0 + here->MOS3capgs); return(OK); case MOS3_CGD: value->rValue = 2* *(ckt->CKTstate0 + here->MOS3capgd); return(OK); case MOS3_M: value->rValue = here->MOS3m; return(OK); case MOS3_L: value->rValue = here->MOS3l; return(OK); case MOS3_W: value->rValue = here->MOS3w; return(OK); case MOS3_AS: value->rValue = here->MOS3sourceArea; return(OK); case MOS3_AD: value->rValue = here->MOS3drainArea; return(OK); case MOS3_PS: value->rValue = here->MOS3sourcePerimiter; return(OK); case MOS3_PD: value->rValue = here->MOS3drainPerimiter; return(OK); case MOS3_NRS: value->rValue = here->MOS3sourceSquares; return(OK); case MOS3_NRD: value->rValue = here->MOS3drainSquares; return(OK); case MOS3_OFF: value->rValue = here->MOS3off; return(OK); case MOS3_IC_VBS: value->rValue = here->MOS3icVBS; return(OK); case MOS3_IC_VDS: value->rValue = here->MOS3icVDS; return(OK); case MOS3_IC_VGS: value->rValue = here->MOS3icVGS; return(OK); case MOS3_DNODE: value->iValue = here->MOS3dNode; return(OK); case MOS3_GNODE: value->iValue = here->MOS3gNode; return(OK); case MOS3_SNODE: value->iValue = here->MOS3sNode; return(OK); case MOS3_BNODE: value->iValue = here->MOS3bNode; return(OK); case MOS3_DNODEPRIME: value->iValue = here->MOS3dNodePrime; return(OK); case MOS3_SNODEPRIME: value->iValue = here->MOS3sNodePrime; return(OK); case MOS3_SOURCECONDUCT: value->rValue = here->MOS3sourceConductance; return(OK); case MOS3_DRAINCONDUCT: value->rValue = here->MOS3drainConductance; return(OK); case MOS3_SOURCERESIST: if (here->MOS3sNodePrime != here->MOS3sNode) value->rValue = 1.0 / here->MOS3sourceConductance; else value->rValue = 0.0; return(OK); case MOS3_DRAINRESIST: if (here->MOS3dNodePrime != here->MOS3dNode) value->rValue = 1.0 / here->MOS3drainConductance; else value->rValue = 0.0; return(OK); case MOS3_VON: value->rValue = here->MOS3von; return(OK); case MOS3_VDSAT: value->rValue = here->MOS3vdsat; return(OK); case MOS3_SOURCEVCRIT: value->rValue = here->MOS3sourceVcrit; return(OK); case MOS3_DRAINVCRIT: value->rValue = here->MOS3drainVcrit; return(OK); case MOS3_CD: value->rValue = here->MOS3cd; return(OK); case MOS3_CBS: value->rValue = here->MOS3cbs; return(OK); case MOS3_CBD: value->rValue = here->MOS3cbd; return(OK); case MOS3_GMBS: value->rValue = here->MOS3gmbs; return(OK); case MOS3_GM: value->rValue = here->MOS3gm; return(OK); case MOS3_GDS: value->rValue = here->MOS3gds; return(OK); case MOS3_GBD: value->rValue = here->MOS3gbd; return(OK); case MOS3_GBS: value->rValue = here->MOS3gbs; return(OK); case MOS3_CAPBD: value->rValue = here->MOS3capbd; return(OK); case MOS3_CAPBS: value->rValue = here->MOS3capbs; return(OK); case MOS3_CAPZEROBIASBD: value->rValue = here->MOS3Cbd; return(OK); case MOS3_CAPZEROBIASBDSW: value->rValue = here->MOS3Cbdsw; return(OK); case MOS3_CAPZEROBIASBS: value->rValue = here->MOS3Cbs; return(OK); case MOS3_CAPZEROBIASBSSW: value->rValue = here->MOS3Cbssw; return(OK); case MOS3_VBD: value->rValue = *(ckt->CKTstate0 + here->MOS3vbd); return(OK); case MOS3_VBS: value->rValue = *(ckt->CKTstate0 + here->MOS3vbs); return(OK); case MOS3_VGS: value->rValue = *(ckt->CKTstate0 + here->MOS3vgs); return(OK); case MOS3_VDS: value->rValue = *(ckt->CKTstate0 + here->MOS3vds); return(OK); case MOS3_CAPGS: value->rValue = 2* *(ckt->CKTstate0 + here->MOS3capgs); /* add overlap capacitance */ value->rValue += (MOS3modPtr(here)->MOS3gateSourceOverlapCapFactor) * here->MOS3m * (here->MOS3w +MOS3modPtr(here)->MOS3widthAdjust -2*(MOS3modPtr(here)->MOS3widthNarrow)); return(OK); case MOS3_QGS: value->rValue = *(ckt->CKTstate0 + here->MOS3qgs); return(OK); case MOS3_CQGS: value->rValue = *(ckt->CKTstate0 + here->MOS3cqgs); return(OK); case MOS3_CAPGD: value->rValue = 2* *(ckt->CKTstate0 + here->MOS3capgd); /* add overlap capacitance */ value->rValue += (MOS3modPtr(here)->MOS3gateDrainOverlapCapFactor) * here->MOS3m * (here->MOS3w +MOS3modPtr(here)->MOS3widthAdjust -2*(MOS3modPtr(here)->MOS3widthNarrow)); return(OK); case MOS3_QGD: value->rValue = *(ckt->CKTstate0 + here->MOS3qgd); return(OK); case MOS3_CQGD: value->rValue = *(ckt->CKTstate0 + here->MOS3cqgd); return(OK); case MOS3_CAPGB: value->rValue = 2* *(ckt->CKTstate0 + here->MOS3capgb); /* add overlap capacitance */ value->rValue += (MOS3modPtr(here)->MOS3gateBulkOverlapCapFactor) * here->MOS3m * (here->MOS3l +MOS3modPtr(here)->MOS3lengthAdjust -2*(MOS3modPtr(here)->MOS3latDiff)); return(OK); case MOS3_QGB: value->rValue = *(ckt->CKTstate0 + here->MOS3qgb); return(OK); case MOS3_CQGB: value->rValue = *(ckt->CKTstate0 + here->MOS3cqgb); return(OK); case MOS3_QBD: value->rValue = *(ckt->CKTstate0 + here->MOS3qbd); return(OK); case MOS3_CQBD: value->rValue = *(ckt->CKTstate0 + here->MOS3cqbd); return(OK); case MOS3_QBS: value->rValue = *(ckt->CKTstate0 + here->MOS3qbs); return(OK); case MOS3_CQBS: value->rValue = *(ckt->CKTstate0 + here->MOS3cqbs); return(OK); case MOS3_L_SENS_DC: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_Sap[select->iValue + 1]+ here->MOS3senParmNo); } return(OK); case MOS3_L_SENS_REAL: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS3senParmNo); } return(OK); case MOS3_L_SENS_IMAG: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS3senParmNo); } return(OK); case MOS3_L_SENS_MAG: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = sqrt(vr*vr + vi*vi); if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS3senParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS3senParmNo); value->rValue = (vr * sr + vi * si)/vm; } return(OK); case MOS3_L_SENS_PH: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = vr*vr + vi*vi; if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS3senParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS3senParmNo); value->rValue = (vr * si - vi * sr)/vm; } return(OK); case MOS3_L_SENS_CPLX: if(ckt->CKTsenInfo){ value->cValue.real= *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS3senParmNo); value->cValue.imag= *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS3senParmNo); } return(OK); case MOS3_W_SENS_DC: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_Sap[select->iValue + 1]+ here->MOS3senParmNo + here->MOS3sens_l); } return(OK); case MOS3_W_SENS_REAL: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS3senParmNo + here->MOS3sens_l); } return(OK); case MOS3_W_SENS_IMAG: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS3senParmNo + here->MOS3sens_l); } return(OK); case MOS3_W_SENS_MAG: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = sqrt(vr*vr + vi*vi); if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS3senParmNo + here->MOS3sens_l); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS3senParmNo + here->MOS3sens_l); value->rValue = (vr * sr + vi * si)/vm; } return(OK); case MOS3_W_SENS_PH: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = vr*vr + vi*vi; if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS3senParmNo + here->MOS3sens_l); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS3senParmNo + here->MOS3sens_l); value->rValue = (vr * si - vi * sr)/vm; } return(OK); case MOS3_W_SENS_CPLX: if(ckt->CKTsenInfo){ value->cValue.real= *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS3senParmNo + here->MOS3sens_l); value->cValue.imag= *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS3senParmNo + here->MOS3sens_l); } return(OK); case MOS3_CB : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MOS3ask.c"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = here->MOS3cbd + here->MOS3cbs - *(ckt->CKTstate0 + here->MOS3cqgb); } return(OK); case MOS3_CG : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MOS3ask.c"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else if (ckt->CKTcurrentAnalysis & (DOING_DCOP | DOING_TRCV)) { value->rValue = 0; } else if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && (ckt->CKTmode & MODETRANOP)) { value->rValue = 0; } else { value->rValue = *(ckt->CKTstate0 + here->MOS3cqgb) + *(ckt->CKTstate0 + here->MOS3cqgd) + *(ckt->CKTstate0 + here->MOS3cqgs); } return(OK); case MOS3_CS : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MOS3ask.c"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = -here->MOS3cd; value->rValue -= here->MOS3cbd + here->MOS3cbs - *(ckt->CKTstate0 + here->MOS3cqgb); if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { value->rValue -= *(ckt->CKTstate0 + here->MOS3cqgb) + *(ckt->CKTstate0 + here->MOS3cqgd) + *(ckt->CKTstate0 + here->MOS3cqgs); } } return(OK); case MOS3_POWER : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MOS3ask.c"; strcpy(errMsg,msg); return(E_ASKPOWER); } else { double temp; value->rValue = here->MOS3cd * *(ckt->CKTrhsOld + here->MOS3dNode); value->rValue += (here->MOS3cbd + here->MOS3cbs - *(ckt->CKTstate0 + here->MOS3cqgb)) * *(ckt->CKTrhsOld + here->MOS3bNode); if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { value->rValue += (*(ckt->CKTstate0 + here->MOS3cqgb) + *(ckt->CKTstate0 + here->MOS3cqgd) + *(ckt->CKTstate0 + here->MOS3cqgs)) * *(ckt->CKTrhsOld + here->MOS3gNode); } temp = -here->MOS3cd; temp -= here->MOS3cbd + here->MOS3cbs ; if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { temp -= *(ckt->CKTstate0 + here->MOS3cqgb) + *(ckt->CKTstate0 + here->MOS3cqgd) + *(ckt->CKTstate0 + here->MOS3cqgs); } value->rValue += temp * *(ckt->CKTrhsOld + here->MOS3sNode); } return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/mos3/mos3ext.h0000644000175000017500000000236413546075722021624 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ extern int MOS3acLoad(GENmodel*,CKTcircuit*); extern int MOS3ask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int MOS3convTest(GENmodel *,CKTcircuit *); extern int MOS3delete(GENinstance*); extern int MOS3getic(GENmodel*,CKTcircuit*); extern int MOS3load(GENmodel*,CKTcircuit*); extern int MOS3mAsk(CKTcircuit*,GENmodel*,int,IFvalue*); extern int MOS3mParam(int,IFvalue*,GENmodel*); extern int MOS3param(int,IFvalue*,GENinstance*,IFvalue*); extern int MOS3pzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int MOS3sAcLoad(GENmodel*,CKTcircuit*); extern int MOS3sLoad(GENmodel*,CKTcircuit*); extern void MOS3sPrint(GENmodel*,CKTcircuit*); extern int MOS3sSetup(SENstruct*,GENmodel*); extern int MOS3sUpdate(GENmodel*,CKTcircuit*); extern int MOS3setup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int MOS3unsetup(GENmodel*,CKTcircuit*); extern int MOS3temp(GENmodel*,CKTcircuit*); extern int MOS3trunc(GENmodel*,CKTcircuit*,double*); extern int MOS3disto(int,GENmodel*,CKTcircuit*); extern int MOS3noise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int MOS3dSetup(GENmodel*,CKTcircuit*); tmpk8ny_4pz/src/spicelib/devices/mos3/mos3sacl.c0000644000175000017500000007436113546075722021747 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ /* actually load the current ac sensitivity * information into the array previously provided */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/const.h" #include "mos3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS3sAcLoad(GENmodel *inModel, CKTcircuit *ckt) { MOS3model *model = (MOS3model *)inModel; MOS3instance *here; int xnrm; int xrev; double A0; double Apert = 0.0; double DELA; double DELAinv; double gdpr0; double gspr0; double gds0; double gbs0; double gbd0; double gm0; double gmbs0; double gdpr; double gspr; double gds; double gbs; double gbd; double gm; double gmbs; double xcgs0; double xcgd0; double xcgb0; double xbd0; double xbs0; double xcgs; double xcgd; double xcgb; double xbd; double xbs; double vbsOp; double vbdOp; double vspr; double vdpr; double vgs; double vgd; double vgb; double vbs; double vbd; double vds; double ivspr; double ivdpr; double ivgs; double ivgd; double ivgb; double ivbs; double ivbd; double ivds; double cspr; double cdpr; double cgs; double cgd; double cgb; double cbs; double cbd; double cds; double cs0; double csprm0; double cd0; double cdprm0; double cg0; double cb0; double cs; double csprm; double cd; double cdprm; double cg; double cb; double icspr; double icdpr; double icgs; double icgd; double icgb; double icbs; double icbd; double icds; double ics0; double icsprm0; double icd0; double icdprm0; double icg0; double icb0; double ics; double icsprm; double icd; double icdprm; double icg; double icb; double DvDp = 0.0; int i; int flag; int error; int iparmno; double arg; double sarg; double sargsw; double SaveState[44]; int save_mode; SENstruct *info; #ifdef SENSDEBUG printf("MOS3senacload\n"); printf("CKTomega = %.5e\n",ckt->CKTomega); #endif /* SENSDEBUG */ info = ckt->CKTsenInfo; info->SENstatus = PERTURBATION; for( ; model != NULL; model = MOS3nextModel(model)) { for(here = MOS3instances(model); here!= NULL; here = MOS3nextInstance(here)) { /* save the unperturbed values in the state vector */ for(i=0; i <= 16; i++) *(SaveState + i) = *(ckt->CKTstate0 + here->MOS3states + i); *(SaveState + 17) = here->MOS3sourceConductance; *(SaveState + 18) = here->MOS3drainConductance; *(SaveState + 19) = here->MOS3cd; *(SaveState + 20) = here->MOS3cbs; *(SaveState + 21) = here->MOS3cbd; *(SaveState + 22) = here->MOS3gmbs; *(SaveState + 23) = here->MOS3gm; *(SaveState + 24) = here->MOS3gds; *(SaveState + 25) = here->MOS3gbd; *(SaveState + 26) = here->MOS3gbs; *(SaveState + 27) = here->MOS3capbd; *(SaveState + 28) = here->MOS3capbs; *(SaveState + 29) = here->MOS3Cbd; *(SaveState + 30) = here->MOS3Cbdsw; *(SaveState + 31) = here->MOS3Cbs; *(SaveState + 32) = here->MOS3Cbssw; *(SaveState + 33) = here->MOS3f2d; *(SaveState + 34) = here->MOS3f3d; *(SaveState + 35) = here->MOS3f4d; *(SaveState + 36) = here->MOS3f2s; *(SaveState + 37) = here->MOS3f3s; *(SaveState + 38) = here->MOS3f4s; *(SaveState + 39) = here->MOS3cgs; *(SaveState + 40) = here->MOS3cgd; *(SaveState + 41) = here->MOS3cgb; *(SaveState + 42) = here->MOS3vdsat; *(SaveState + 43) = here->MOS3von; save_mode = here->MOS3mode; xnrm=1; xrev=0; if (here->MOS3mode < 0) { xnrm=0; xrev=1; } vbsOp = model->MOS3type * ( *(ckt->CKTrhsOp+here->MOS3bNode) - *(ckt->CKTrhsOp+here->MOS3sNodePrime)); vbdOp = model->MOS3type * ( *(ckt->CKTrhsOp+here->MOS3bNode) - *(ckt->CKTrhsOp+here->MOS3dNodePrime)); vspr = *(ckt->CKTrhsOld + here->MOS3sNode) - *(ckt->CKTrhsOld + here->MOS3sNodePrime) ; ivspr = *(ckt->CKTirhsOld + here->MOS3sNode) - *(ckt->CKTirhsOld + here->MOS3sNodePrime) ; vdpr = *(ckt->CKTrhsOld + here->MOS3dNode) - *(ckt->CKTrhsOld + here->MOS3dNodePrime) ; ivdpr = *(ckt->CKTirhsOld + here->MOS3dNode) - *(ckt->CKTirhsOld + here->MOS3dNodePrime) ; vgb = *(ckt->CKTrhsOld + here->MOS3gNode) - *(ckt->CKTrhsOld + here->MOS3bNode) ; ivgb = *(ckt->CKTirhsOld + here->MOS3gNode) - *(ckt->CKTirhsOld + here->MOS3bNode) ; vbs = *(ckt->CKTrhsOld + here->MOS3bNode) - *(ckt->CKTrhsOld + here->MOS3sNodePrime) ; ivbs = *(ckt->CKTirhsOld + here->MOS3bNode) - *(ckt->CKTirhsOld + here->MOS3sNodePrime) ; vbd = *(ckt->CKTrhsOld + here->MOS3bNode) - *(ckt->CKTrhsOld + here->MOS3dNodePrime) ; ivbd = *(ckt->CKTirhsOld + here->MOS3bNode) - *(ckt->CKTirhsOld + here->MOS3dNodePrime) ; vds = vbs - vbd ; ivds = ivbs - ivbd ; vgs = vgb + vbs ; ivgs = ivgb + ivbs ; vgd = vgb + vbd ; ivgd = ivgb + ivbd ; #ifdef SENSDEBUG printf("senacload instance name %s\n",here->MOS3name); printf("gate = %d ,drain = %d, drainprm = %d\n", here->MOS3gNode,here->MOS3dNode,here->MOS3dNodePrime); printf("source = %d , sourceprm = %d ,body = %d, senparmno = %d\n", here->MOS3sNode ,here->MOS3sNodePrime, here->MOS3bNode,here->MOS3senParmNo); printf("\n without perturbation \n"); #endif /* SENSDEBUG */ /* without perturbation */ *(ckt->CKTstate0 + here->MOS3vbs) = vbsOp; *(ckt->CKTstate0 + here->MOS3vbd) = vbdOp; here->MOS3senPertFlag = ON ; if(info->SENacpertflag == 1){ /* store the unperturbed values of small signal parameters */ if((error = MOS3load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS3senCgs) = here->MOS3cgs; *(here->MOS3senCgd) = here->MOS3cgd; *(here->MOS3senCgb) = here->MOS3cgb; *(here->MOS3senCbd) = here->MOS3capbd; *(here->MOS3senCbs) = here->MOS3capbs; *(here->MOS3senGds) = here->MOS3gds; *(here->MOS3senGbs) = here->MOS3gbs; *(here->MOS3senGbd) = here->MOS3gbd; *(here->MOS3senGm) = here->MOS3gm; *(here->MOS3senGmbs) = here->MOS3gmbs; } xcgs0= *(here->MOS3senCgs) * ckt->CKTomega; xcgd0= *(here->MOS3senCgd) * ckt->CKTomega; xcgb0= *(here->MOS3senCgb) * ckt->CKTomega; xbd0= *(here->MOS3senCbd) * ckt->CKTomega; xbs0= *(here->MOS3senCbs) * ckt->CKTomega; gds0= *(here->MOS3senGds); gbs0= *(here->MOS3senGbs); gbd0= *(here->MOS3senGbd); gm0= *(here->MOS3senGm); gmbs0= *(here->MOS3senGmbs); gdpr0 = here->MOS3drainConductance; gspr0 = here->MOS3sourceConductance; cspr = gspr0 * vspr ; icspr = gspr0 * ivspr ; cdpr = gdpr0 * vdpr ; icdpr = gdpr0 * ivdpr ; cgs = ( - xcgs0 * ivgs ); icgs = xcgs0 * vgs ; cgd = ( - xcgd0 * ivgd ); icgd = xcgd0 * vgd ; cgb = ( - xcgb0 * ivgb ); icgb = xcgb0 * vgb ; cbs = ( gbs0 * vbs - xbs0 * ivbs ); icbs = ( xbs0 * vbs + gbs0 * ivbs ); cbd = ( gbd0 * vbd - xbd0 * ivbd ); icbd = ( xbd0 * vbd + gbd0 * ivbd ); cds = ( gds0 * vds + xnrm * (gm0 * vgs + gmbs0 * vbs) - xrev * (gm0 * vgd + gmbs0 * vbd) ); icds = ( gds0 * ivds + xnrm * (gm0 * ivgs + gmbs0 * ivbs) - xrev * (gm0 * ivgd + gmbs0 * ivbd) ); cs0 = cspr; ics0 = icspr; csprm0 = ( -cspr - cgs - cbs - cds ) ; icsprm0 = ( -icspr - icgs - icbs - icds ) ; cd0 = cdpr; icd0 = icdpr; cdprm0 = ( -cdpr - cgd - cbd + cds ) ; icdprm0 = ( -icdpr - icgd - icbd + icds ) ; cg0 = cgs + cgd + cgb ; icg0 = icgs + icgd + icgb ; cb0 = cbs + cbd - cgb ; icb0 = icbs + icbd - icgb ; #ifdef SENSDEBUG printf("gspr0 = %.7e , gdpr0 = %.7e , gds0 = %.7e, gbs0 = %.7e\n", gspr0,gdpr0,gds0,gbs0); printf("gbd0 = %.7e , gm0 = %.7e , gmbs0 = %.7e\n",gbd0,gm0,gmbs0); printf("xcgs0 = %.7e , xcgd0 = %.7e ,", xcgs0,xcgd0); printf("xcgb0 = %.7e, xbd0 = %.7e,xbs0 = %.7e\n" ,xcgb0,xbd0,xbs0); printf("vbs = %.7e , vbd = %.7e , vgb = %.7e\n",vbs,vbd,vgb); printf("ivbs = %.7e , ivbd = %.7e , ivgb = %.7e\n",ivbs,ivbd,ivgb); printf("cbs0 = %.7e , cbd0 = %.7e , cgb0 = %.7e\n",cbs,cbd,cgb); printf("cb0 = %.7e , cg0 = %.7e , cs0 = %.7e\n",cb0,cg0,cs0); printf("csprm0 = %.7e, cd0 = %.7e, cdprm0 = %.7e\n", csprm0,cd0,cdprm0); printf("icb0 = %.7e , icg0 = %.7e , ics0 = %.7e\n",icb0,icg0,ics0); printf("icsprm0 = %.7e, icd0 = %.7e, icdprm0 = %.7e\n", icsprm0,icd0,icdprm0); printf("\nPerturbation of vbs\n"); #endif /* SENSDEBUG */ /* Perturbation of vbs */ flag = 1; A0 = vbsOp; DELA = info->SENpertfac * CONSTvt0 ; DELAinv = 1.0/DELA; if(info->SENacpertflag == 1){ /* store the values of small signal parameters * corresponding to perturbed vbs */ Apert = A0 + DELA; *(ckt->CKTstate0 + here->MOS3vbs) = Apert; *(ckt->CKTstate0 + here->MOS3vbd) = vbdOp; if((error = MOS3load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS3senCgs + 1) = here->MOS3cgs; *(here->MOS3senCgd + 1) = here->MOS3cgd; *(here->MOS3senCgb + 1) = here->MOS3cgb; *(here->MOS3senCbd + 1) = here->MOS3capbd; *(here->MOS3senCbs + 1) = here->MOS3capbs; *(here->MOS3senGds + 1) = here->MOS3gds; *(here->MOS3senGbs + 1) = here->MOS3gbs; *(here->MOS3senGbd + 1) = here->MOS3gbd; *(here->MOS3senGm + 1) = here->MOS3gm; *(here->MOS3senGmbs + 1) = here->MOS3gmbs; *(ckt->CKTstate0 + here->MOS3vbs) = A0; } goto load; pertvbd: /* Perturbation of vbd */ #ifdef SENSDEBUG printf("\nPerturbation of vbd\n"); #endif /* SENSDEBUG */ flag = 2; A0 = vbdOp; DELA = info->SENpertfac * CONSTvt0 + 1e-8; DELAinv = 1.0/DELA; if(info->SENacpertflag == 1){ /* store the values of small signal parameters * corresponding to perturbed vbd */ Apert = A0 + DELA; *(ckt->CKTstate0 + here->MOS3vbs) = vbsOp; *(ckt->CKTstate0 + here->MOS3vbd) = Apert; if((error = MOS3load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS3senCgs + 2) = here->MOS3cgs; *(here->MOS3senCgd + 2) = here->MOS3cgd; *(here->MOS3senCgb + 2) = here->MOS3cgb; *(here->MOS3senCbd + 2) = here->MOS3capbd; *(here->MOS3senCbs + 2) = here->MOS3capbs; *(here->MOS3senGds + 2) = here->MOS3gds; *(here->MOS3senGbs + 2) = here->MOS3gbs; *(here->MOS3senGbd + 2) = here->MOS3gbd; *(here->MOS3senGm + 2) = here->MOS3gm; *(here->MOS3senGmbs + 2) = here->MOS3gmbs; *(ckt->CKTstate0 + here->MOS3vbd) = A0; } goto load; pertvgb: /* Perturbation of vgb */ #ifdef SENSDEBUG printf("\nPerturbation of vgb\n"); #endif /* SENSDEBUG */ flag = 3; A0 = model->MOS3type * (*(ckt->CKTrhsOp + here->MOS3gNode) - *(ckt->CKTrhsOp + here->MOS3bNode)); DELA = info->SENpertfac * A0 + 1e-8; DELAinv = model->MOS3type * 1.0/DELA; if(info->SENacpertflag == 1){ /* store the values of small signal parameters * corresponding to perturbed vgb */ *(ckt->CKTstate0 + here->MOS3vbs) = vbsOp; *(ckt->CKTstate0 + here->MOS3vbd) = vbdOp; *(ckt->CKTrhsOp + here->MOS3bNode) -= DELA; if((error = MOS3load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS3senCgs + 3) = here->MOS3cgs; *(here->MOS3senCgd + 3) = here->MOS3cgd; *(here->MOS3senCgb + 3) = here->MOS3cgb; *(here->MOS3senCbd + 3) = here->MOS3capbd; *(here->MOS3senCbs + 3) = here->MOS3capbs; *(here->MOS3senGds + 3) = here->MOS3gds; *(here->MOS3senGbs + 3) = here->MOS3gbs; *(here->MOS3senGbd + 3) = here->MOS3gbd; *(here->MOS3senGm + 3) = here->MOS3gm; *(here->MOS3senGmbs + 3) = here->MOS3gmbs; *(ckt->CKTrhsOp + here->MOS3bNode) += DELA; } goto load; pertl: /* Perturbation of length */ if(here->MOS3sens_l == 0){ goto pertw; } #ifdef SENSDEBUG printf("\nPerturbation of length\n"); #endif /* SENSDEBUG */ flag = 4; A0 = here->MOS3l; DELA = info->SENpertfac * A0; DELAinv = 1.0/DELA; if(info->SENacpertflag == 1){ /* store the values of small signal parameters * corresponding to perturbed length */ Apert = A0 + DELA; here->MOS3l = Apert; *(ckt->CKTstate0 + here->MOS3vbs) = vbsOp; *(ckt->CKTstate0 + here->MOS3vbd) = vbdOp; if((error = MOS3load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS3senCgs + 4) = here->MOS3cgs; *(here->MOS3senCgd + 4) = here->MOS3cgd; *(here->MOS3senCgb + 4) = here->MOS3cgb; *(here->MOS3senCbd + 4) = here->MOS3capbd; *(here->MOS3senCbs + 4) = here->MOS3capbs; *(here->MOS3senGds + 4) = here->MOS3gds; *(here->MOS3senGbs + 4) = here->MOS3gbs; *(here->MOS3senGbd + 4) = here->MOS3gbd; *(here->MOS3senGm + 4) = here->MOS3gm; *(here->MOS3senGmbs + 4) = here->MOS3gmbs; here->MOS3l = A0; } goto load; pertw: /* Perturbation of width */ if(here->MOS3sens_w == 0) goto next; #ifdef SENSDEBUG printf("\nPerturbation of width\n"); #endif /* SENSDEBUG */ flag = 5; A0 = here->MOS3w; DELA = info->SENpertfac * A0; DELAinv = 1.0/DELA; Apert = A0 + DELA; if(info->SENacpertflag == 1){ /* store the values of small signal parameters * corresponding to perturbed width */ here->MOS3w = Apert; here->MOS3drainArea *= (1 + info->SENpertfac); here->MOS3sourceArea *= (1 + info->SENpertfac); here->MOS3Cbd *= (1 + info->SENpertfac); here->MOS3Cbs *= (1 + info->SENpertfac); if(here->MOS3drainPerimiter){ here->MOS3Cbdsw += here->MOS3Cbdsw * DELA/here->MOS3drainPerimiter; } if(here->MOS3sourcePerimiter){ here->MOS3Cbssw += here->MOS3Cbssw * DELA/here->MOS3sourcePerimiter; } if(vbdOp >= here->MOS3tDepCap){ arg = 1-model->MOS3fwdCapDepCoeff; sarg = exp( (-model->MOS3bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS3bulkJctSideGradingCoeff) * log(arg) ); here->MOS3f2d = here->MOS3Cbd*(1-model->MOS3fwdCapDepCoeff* (1+model->MOS3bulkJctBotGradingCoeff))* sarg/arg + here->MOS3Cbdsw*(1-model->MOS3fwdCapDepCoeff* (1+model->MOS3bulkJctSideGradingCoeff))* sargsw/arg; here->MOS3f3d = here->MOS3Cbd * model->MOS3bulkJctBotGradingCoeff * sarg/arg/ model->MOS3bulkJctPotential + here->MOS3Cbdsw * model->MOS3bulkJctSideGradingCoeff * sargsw/arg / model->MOS3bulkJctPotential; here->MOS3f4d = here->MOS3Cbd*model->MOS3bulkJctPotential* (1-arg*sarg)/ (1-model->MOS3bulkJctBotGradingCoeff) + here->MOS3Cbdsw*model->MOS3bulkJctPotential* (1-arg*sargsw)/ (1-model->MOS3bulkJctSideGradingCoeff) -here->MOS3f3d/2* (here->MOS3tDepCap*here->MOS3tDepCap) -here->MOS3tDepCap * here->MOS3f2d; } if(vbsOp >= here->MOS3tDepCap){ arg = 1-model->MOS3fwdCapDepCoeff; sarg = exp( (-model->MOS3bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS3bulkJctSideGradingCoeff) * log(arg) ); here->MOS3f2s = here->MOS3Cbs*(1-model->MOS3fwdCapDepCoeff* (1+model->MOS3bulkJctBotGradingCoeff))* sarg/arg + here->MOS3Cbssw*(1-model->MOS3fwdCapDepCoeff* (1+model->MOS3bulkJctSideGradingCoeff))* sargsw/arg; here->MOS3f3s = here->MOS3Cbs * model->MOS3bulkJctBotGradingCoeff * sarg/arg/ model->MOS3bulkJctPotential + here->MOS3Cbssw * model->MOS3bulkJctSideGradingCoeff * sargsw/arg / model->MOS3bulkJctPotential; here->MOS3f4s = here->MOS3Cbs*model->MOS3bulkJctPotential* (1-arg*sarg)/ (1-model->MOS3bulkJctBotGradingCoeff) + here->MOS3Cbssw*model->MOS3bulkJctPotential* (1-arg*sargsw)/ (1-model->MOS3bulkJctSideGradingCoeff) -here->MOS3f3s/2* (here->MOS3tBulkPot*here->MOS3tBulkPot) -here->MOS3tBulkPot * here->MOS3f2s; } *(ckt->CKTstate0 + here->MOS3vbs) = vbsOp; *(ckt->CKTstate0 + here->MOS3vbd) = vbdOp; if((error = MOS3load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS3senCgs + 5) = here->MOS3cgs; *(here->MOS3senCgd + 5) = here->MOS3cgd; *(here->MOS3senCgb + 5) = here->MOS3cgb; *(here->MOS3senCbd + 5) = here->MOS3capbd; *(here->MOS3senCbs + 5) = here->MOS3capbs; *(here->MOS3senGds + 5) = here->MOS3gds; *(here->MOS3senGbs + 5) = here->MOS3gbs; *(here->MOS3senGbd + 5) = here->MOS3gbd; *(here->MOS3senGm + 5) = here->MOS3gm; *(here->MOS3senGmbs + 5) = here->MOS3gmbs; here->MOS3w = A0; here->MOS3drainArea /= (1 + info->SENpertfac); here->MOS3sourceArea /= (1 + info->SENpertfac); } load: gds= *(here->MOS3senGds + flag); gbs= *(here->MOS3senGbs + flag); gbd= *(here->MOS3senGbd + flag); gm= *(here->MOS3senGm + flag); gmbs= *(here->MOS3senGmbs + flag); if(flag == 5){ gdpr = here->MOS3drainConductance * Apert/A0; gspr = here->MOS3sourceConductance * Apert/A0; } else{ gdpr = here->MOS3drainConductance; gspr = here->MOS3sourceConductance; } xcgs= *(here->MOS3senCgs + flag) * ckt->CKTomega; xcgd= *(here->MOS3senCgd + flag) * ckt->CKTomega; xcgb= *(here->MOS3senCgb + flag) * ckt->CKTomega; xbd= *(here->MOS3senCbd + flag) * ckt->CKTomega; xbs= *(here->MOS3senCbs + flag) * ckt->CKTomega; #ifdef SENSDEBUG printf("flag = %d \n",flag); printf("gspr = %.7e , gdpr = %.7e , gds = %.7e, gbs = %.7e\n", gspr,gdpr,gds,gbs); printf("gbd = %.7e , gm = %.7e , gmbs = %.7e\n",gbd,gm,gmbs); printf("xcgs = %.7e , xcgd = %.7e , xcgb = %.7e,", xcgs,xcgd,xcgb); printf("xbd = %.7e,xbs = %.7e\n" ,xbd,xbs); #endif /* SENSDEBUG */ cspr = gspr * vspr ; icspr = gspr * ivspr ; cdpr = gdpr * vdpr ; icdpr = gdpr * ivdpr ; cgs = ( - xcgs * ivgs ); icgs = xcgs * vgs ; cgd = ( - xcgd * ivgd ); icgd = xcgd * vgd ; cgb = ( - xcgb * ivgb ); icgb = xcgb * vgb ; cbs = ( gbs * vbs - xbs * ivbs ); icbs = ( xbs * vbs + gbs * ivbs ); cbd = ( gbd * vbd - xbd * ivbd ); icbd = ( xbd * vbd + gbd * ivbd ); cds = ( gds * vds + xnrm * (gm * vgs + gmbs * vbs) - xrev * (gm * vgd + gmbs * vbd) ); icds = ( gds * ivds + xnrm * (gm * ivgs + gmbs * ivbs) - xrev * (gm * ivgd + gmbs * ivbd) ); cs = cspr; ics = icspr; csprm = ( -cspr - cgs - cbs - cds ) ; icsprm = ( -icspr - icgs - icbs - icds ) ; cd = cdpr; icd = icdpr; cdprm = ( -cdpr - cgd - cbd + cds ) ; icdprm = ( -icdpr - icgd - icbd + icds ) ; cg = cgs + cgd + cgb ; icg = icgs + icgd + icgb ; cb = cbs + cbd - cgb ; icb = icbs + icbd - icgb ; #ifdef SENSDEBUG printf("vbs = %.7e , vbd = %.7e , vgb = %.7e\n",vbs,vbd,vgb); printf("ivbs = %.7e , ivbd = %.7e , ivgb = %.7e\n",ivbs,ivbd,ivgb); printf("cbs = %.7e , cbd = %.7e , cgb = %.7e\n",cbs,cbd,cgb); printf("cb = %.7e , cg = %.7e , cs = %.7e\n",cb,cg,cs); printf("csprm = %.7e, cd = %.7e, cdprm = %.7e\n",csprm,cd,cdprm); printf("icb = %.7e , icg = %.7e , ics = %.7e\n",icb,icg,ics); printf("icsprm = %.7e, icd = %.7e, icdprm = %.7e\n", icsprm,icd,icdprm); #endif /* SENSDEBUG */ for(iparmno = 1;iparmno<=info->SENparms;iparmno++){ if( (flag == 4) && (iparmno != here->MOS3senParmNo) ) continue; if( (flag == 5) && (iparmno != (here->MOS3senParmNo + (int) here->MOS3sens_l)) ) continue; switch(flag){ case 1: DvDp = model->MOS3type * (info->SEN_Sap[here->MOS3bNode][iparmno] - info->SEN_Sap[here->MOS3sNodePrime][iparmno]); break; case 2: DvDp = model->MOS3type * ( info->SEN_Sap[here->MOS3bNode][iparmno] - info->SEN_Sap[here->MOS3dNodePrime][iparmno]); break; case 3: DvDp = model->MOS3type * ( info->SEN_Sap[here->MOS3gNode][iparmno] - info->SEN_Sap[here->MOS3bNode][iparmno]); break; case 4: DvDp = 1; break; case 5: DvDp = 1; break; } *(info->SEN_RHS[here->MOS3bNode] + iparmno) -= ( cb - cb0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS3bNode] + iparmno) -= ( icb - icb0) * DELAinv * DvDp; *(info->SEN_RHS[here->MOS3gNode] + iparmno) -= ( cg - cg0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS3gNode] + iparmno) -= ( icg - icg0) * DELAinv * DvDp; if(here->MOS3sNode != here->MOS3sNodePrime){ *(info->SEN_RHS[here->MOS3sNode] + iparmno) -= ( cs - cs0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS3sNode] + iparmno) -= ( ics - ics0) * DELAinv * DvDp; } *(info->SEN_RHS[here->MOS3sNodePrime] + iparmno) -= ( csprm - csprm0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS3sNodePrime] + iparmno) -= ( icsprm - icsprm0) * DELAinv * DvDp; if(here->MOS3dNode != here->MOS3dNodePrime){ *(info->SEN_RHS[here->MOS3dNode] + iparmno) -= ( cd - cd0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS3dNode] + iparmno) -= ( icd - icd0) * DELAinv * DvDp; } *(info->SEN_RHS[here->MOS3dNodePrime] + iparmno) -= ( cdprm - cdprm0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS3dNodePrime] + iparmno) -= ( icdprm - icdprm0) * DELAinv * DvDp; #ifdef SENSDEBUG printf("after loading\n"); printf("DvDp = %.5e , DELAinv = %.5e ,flag = %d ,", DvDp,DELAinv,flag); printf("iparmno = %d,senparmno = %d\n", iparmno,here->MOS3senParmNo); printf("A0 = %.5e , Apert = %.5e ,CONSTvt0 = %.5e \n", A0,Apert,CONSTvt0); printf("senb = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS3bNode] + iparmno), *(info->SEN_iRHS[here->MOS3bNode] + iparmno)); printf("seng = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS3gNode] + iparmno), *(info->SEN_iRHS[here->MOS3gNode] + iparmno)); printf("sens = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS3sNode] + iparmno), *(info->SEN_iRHS[here->MOS3sNode] + iparmno)); printf("sensprm = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS3sNodePrime] + iparmno), *(info->SEN_iRHS[here->MOS3sNodePrime] + iparmno)); printf("send = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS3dNode] + iparmno), *(info->SEN_iRHS[here->MOS3dNode] + iparmno)); printf("sendprm = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS3dNodePrime] + iparmno), *(info->SEN_iRHS[here->MOS3dNodePrime] + iparmno)); #endif /* SENSDEBUG */ } switch(flag){ case 1: goto pertvbd ; case 2: goto pertvgb ; case 3: goto pertl ; case 4: goto pertw ; case 5: break; } next: ; /* put the unperturbed values back into the state vector */ for(i=0; i <= 16; i++) *(ckt->CKTstate0 + here->MOS3states + i) = *(SaveState + i); here->MOS3sourceConductance = *(SaveState + 17) ; here->MOS3drainConductance = *(SaveState + 18) ; here->MOS3cd = *(SaveState + 19) ; here->MOS3cbs = *(SaveState + 20) ; here->MOS3cbd = *(SaveState + 21) ; here->MOS3gmbs = *(SaveState + 22) ; here->MOS3gm = *(SaveState + 23) ; here->MOS3gds = *(SaveState + 24) ; here->MOS3gbd = *(SaveState + 25) ; here->MOS3gbs = *(SaveState + 26) ; here->MOS3capbd = *(SaveState + 27) ; here->MOS3capbs = *(SaveState + 28) ; here->MOS3Cbd = *(SaveState + 29) ; here->MOS3Cbdsw = *(SaveState + 30) ; here->MOS3Cbs = *(SaveState + 31) ; here->MOS3Cbssw = *(SaveState + 32) ; here->MOS3f2d = *(SaveState + 33) ; here->MOS3f3d = *(SaveState + 34) ; here->MOS3f4d = *(SaveState + 35) ; here->MOS3f2s = *(SaveState + 36) ; here->MOS3f3s = *(SaveState + 37) ; here->MOS3f4s = *(SaveState + 38) ; here->MOS3cgs = *(SaveState + 39) ; here->MOS3cgd = *(SaveState + 40) ; here->MOS3cgb = *(SaveState + 41) ; here->MOS3vdsat = *(SaveState + 42) ; here->MOS3von = *(SaveState + 43) ; here->MOS3mode = save_mode ; here->MOS3senPertFlag = OFF; } } info->SENstatus = NORMAL; #ifdef SENSDEBUG printf("MOS3senacload end\n"); #endif /* SENSDEBUG */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos3/mos3del.c0000644000175000017500000000057313546075722021563 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "mos3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS3delete(GENinstance *gen_inst) { MOS3instance *inst = (MOS3instance *) gen_inst; FREE(inst->MOS3sens); return OK; } tmpk8ny_4pz/src/spicelib/devices/mos3/mos3sset.c0000644000175000017500000000260513546075722021773 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ /* loop through all the devices and * allocate parameter #s to design parameters */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mos3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS3sSetup(SENstruct *info, GENmodel *inModel) { MOS3model *model = (MOS3model *)inModel; MOS3instance *here; /* loop through all the models */ for( ; model != NULL; model = MOS3nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS3instances(model); here != NULL ; here=MOS3nextInstance(here)) { if(here->MOS3senParmNo){ if((here->MOS3sens_l)&&(here->MOS3sens_w)){ here->MOS3senParmNo = ++(info->SENparms); ++(info->SENparms);/* MOS has two design parameters */ } else{ here->MOS3senParmNo = ++(info->SENparms); } } here->MOS3senPertFlag = OFF; if((here->MOS3sens = TMALLOC(double, 72)) == NULL) { return(E_NOMEM); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos3/mos3ic.c0000644000175000017500000000245313546075722021411 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS3getic(GENmodel *inModel, CKTcircuit *ckt) { MOS3model *model = (MOS3model *)inModel; MOS3instance *here; /* * grab initial conditions out of rhs array. User specified, so use * external nodes to get values */ for( ; model ; model = MOS3nextModel(model)) { for(here = MOS3instances(model); here ; here = MOS3nextInstance(here)) { if(!here->MOS3icVBSGiven) { here->MOS3icVBS = *(ckt->CKTrhs + here->MOS3bNode) - *(ckt->CKTrhs + here->MOS3sNode); } if(!here->MOS3icVDSGiven) { here->MOS3icVDS = *(ckt->CKTrhs + here->MOS3dNode) - *(ckt->CKTrhs + here->MOS3sNode); } if(!here->MOS3icVGSGiven) { here->MOS3icVGS = *(ckt->CKTrhs + here->MOS3gNode) - *(ckt->CKTrhs + here->MOS3sNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos3/mos3load.c0000644000175000017500000012012213546075722021727 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "mos3defs.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* actually load the current value into the sparse matrix previously * provided */ int MOS3load(GENmodel *inModel, CKTcircuit *ckt) { MOS3model *model = (MOS3model *)inModel; MOS3instance *here; double Beta; double DrainSatCur; double EffectiveLength; double EffectiveWidth; double GateBulkOverlapCap; double GateDrainOverlapCap; double GateSourceOverlapCap; double OxideCap; double SourceSatCur; double arg; double cbhat; double cdhat; double cdrain; double cdreq; double ceq; double ceqbd; double ceqbs; double ceqgb; double ceqgd; double ceqgs; double delvbd; double delvbs; double delvds; double delvgd; double delvgs; double evbd; double evbs; double gcgb; double gcgd; double gcgs; double geq; double sarg; double sargsw; double vbd; double vbs; double vds; double vdsat; double vgb1; double vgb; double vgd1; double vgd; double vgdo; double vgs1; double vgs; double von; #ifndef PREDICTOR double xfact = 0.0; #endif int xnrm; int xrev; double capgs = 0.0; /* total gate-source capacitance */ double capgd = 0.0; /* total gate-drain capacitance */ double capgb = 0.0; /* total gate-bulk capacitance */ int Check; #ifndef NOBYPASS double tempv; #endif /*NOBYPASS*/ int error; #ifdef CAPBYPASS int senflag; #endif /*CAPBYPASS*/ int SenCond; double vt; /* vt at instance temperature */ #ifdef CAPBYPASS senflag = 0; #endif /* CAPBYPASS */ if(ckt->CKTsenInfo){ if(ckt->CKTsenInfo->SENstatus == PERTURBATION) { if((ckt->CKTsenInfo->SENmode == ACSEN)|| (ckt->CKTsenInfo->SENmode == TRANSEN)){ #ifdef CAPBYPASS senflag = 1; #endif /* CAPBYPASS */ } goto next; } } /* loop through all the MOS3 device models */ next: for( ; model != NULL; model = MOS3nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS3instances(model); here != NULL ; here=MOS3nextInstance(here)) { vt = CONSTKoverQ * here->MOS3temp; Check=1; if(ckt->CKTsenInfo){ #ifdef SENSDEBUG printf("MOS3load \n"); #endif /* SENSDEBUG */ if(ckt->CKTsenInfo->SENstatus == PERTURBATION) if(here->MOS3senPertFlag == OFF)continue; } SenCond = ckt->CKTsenInfo && here->MOS3senPertFlag; /* first, we compute a few useful values - these could be * pre-computed, but for historical reasons are still done * here. They may be moved at the expense of instance * size */ EffectiveWidth=here->MOS3w-2*model->MOS3widthNarrow+ model->MOS3widthAdjust; EffectiveLength=here->MOS3l - 2*model->MOS3latDiff+ model->MOS3lengthAdjust; if( (here->MOS3tSatCurDens == 0) || (here->MOS3drainArea == 0) || (here->MOS3sourceArea == 0)) { DrainSatCur = here->MOS3m * here->MOS3tSatCur; SourceSatCur = here->MOS3m * here->MOS3tSatCur; } else { DrainSatCur = here->MOS3m * here->MOS3tSatCurDens * here->MOS3drainArea; SourceSatCur = here->MOS3m * here->MOS3tSatCurDens * here->MOS3sourceArea; } GateSourceOverlapCap = model->MOS3gateSourceOverlapCapFactor * here->MOS3m * EffectiveWidth; GateDrainOverlapCap = model->MOS3gateDrainOverlapCapFactor * here->MOS3m * EffectiveWidth; GateBulkOverlapCap = model->MOS3gateBulkOverlapCapFactor * here->MOS3m * EffectiveLength; Beta = here->MOS3tTransconductance * here->MOS3m * EffectiveWidth/EffectiveLength; OxideCap = model->MOS3oxideCapFactor * EffectiveLength * here->MOS3m * EffectiveWidth; if(SenCond){ #ifdef SENSDEBUG printf("MOS3senPertFlag = ON \n"); #endif /* SENSDEBUG */ if((ckt->CKTsenInfo->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)) { vgs = *(ckt->CKTstate1 + here->MOS3vgs); vds = *(ckt->CKTstate1 + here->MOS3vds); vbs = *(ckt->CKTstate1 + here->MOS3vbs); vbd = *(ckt->CKTstate1 + here->MOS3vbd); vgb = vgs - vbs; vgd = vgs - vds; } else if (ckt->CKTsenInfo->SENmode == ACSEN){ vgb = model->MOS3type * ( *(ckt->CKTrhsOp+here->MOS3gNode) - *(ckt->CKTrhsOp+here->MOS3bNode)); vbs = *(ckt->CKTstate0 + here->MOS3vbs); vbd = *(ckt->CKTstate0 + here->MOS3vbd); vgd = vgb + vbd ; vgs = vgb + vbs ; vds = vbs - vbd ; } else{ vgs = *(ckt->CKTstate0 + here->MOS3vgs); vds = *(ckt->CKTstate0 + here->MOS3vds); vbs = *(ckt->CKTstate0 + here->MOS3vbs); vbd = *(ckt->CKTstate0 + here->MOS3vbd); vgb = vgs - vbs; vgd = vgs - vds; } #ifdef SENSDEBUG printf(" vbs = %.7e ,vbd = %.7e,vgb = %.7e\n",vbs,vbd,vgb); printf(" vgs = %.7e ,vds = %.7e,vgd = %.7e\n",vgs,vds,vgd); #endif /* SENSDEBUG */ goto next1; } /* * ok - now to do the start-up operations * * we must get values for vbs, vds, and vgs from somewhere * so we either predict them or recover them from last * iteration These are the two most common cases - either * a prediction step or the general iteration step and * they share some code, so we put them first - others * later on */ if((ckt->CKTmode & (MODEINITFLOAT | MODEINITPRED | MODEINITSMSIG | MODEINITTRAN)) || ( (ckt->CKTmode & MODEINITFIX) && (!here->MOS3off) ) ) { #ifndef PREDICTOR if(ckt->CKTmode & (MODEINITPRED | MODEINITTRAN) ) { /* predictor step */ xfact=ckt->CKTdelta/ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->MOS3vbs) = *(ckt->CKTstate1 + here->MOS3vbs); vbs = (1+xfact)* (*(ckt->CKTstate1 + here->MOS3vbs)) -(xfact * (*(ckt->CKTstate2 + here->MOS3vbs))); *(ckt->CKTstate0 + here->MOS3vgs) = *(ckt->CKTstate1 + here->MOS3vgs); vgs = (1+xfact)* (*(ckt->CKTstate1 + here->MOS3vgs)) -(xfact * (*(ckt->CKTstate2 + here->MOS3vgs))); *(ckt->CKTstate0 + here->MOS3vds) = *(ckt->CKTstate1 + here->MOS3vds); vds = (1+xfact)* (*(ckt->CKTstate1 + here->MOS3vds)) -(xfact * (*(ckt->CKTstate2 + here->MOS3vds))); *(ckt->CKTstate0 + here->MOS3vbd) = *(ckt->CKTstate0 + here->MOS3vbs)- *(ckt->CKTstate0 + here->MOS3vds); } else { #endif /*PREDICTOR*/ /* general iteration */ vbs = model->MOS3type * ( *(ckt->CKTrhsOld+here->MOS3bNode) - *(ckt->CKTrhsOld+here->MOS3sNodePrime)); vgs = model->MOS3type * ( *(ckt->CKTrhsOld+here->MOS3gNode) - *(ckt->CKTrhsOld+here->MOS3sNodePrime)); vds = model->MOS3type * ( *(ckt->CKTrhsOld+here->MOS3dNodePrime) - *(ckt->CKTrhsOld+here->MOS3sNodePrime)); #ifndef PREDICTOR } #endif /*PREDICTOR*/ /* now some common crunching for some more useful quantities */ vbd=vbs-vds; vgd=vgs-vds; vgdo = *(ckt->CKTstate0 + here->MOS3vgs) - *(ckt->CKTstate0 + here->MOS3vds); delvbs = vbs - *(ckt->CKTstate0 + here->MOS3vbs); delvbd = vbd - *(ckt->CKTstate0 + here->MOS3vbd); delvgs = vgs - *(ckt->CKTstate0 + here->MOS3vgs); delvds = vds - *(ckt->CKTstate0 + here->MOS3vds); delvgd = vgd-vgdo; /* these are needed for convergence testing */ if (here->MOS3mode >= 0) { cdhat= here->MOS3cd- here->MOS3gbd * delvbd + here->MOS3gmbs * delvbs + here->MOS3gm * delvgs + here->MOS3gds * delvds ; } else { cdhat= here->MOS3cd - ( here->MOS3gbd - here->MOS3gmbs) * delvbd - here->MOS3gm * delvgd + here->MOS3gds * delvds ; } cbhat= here->MOS3cbs + here->MOS3cbd + here->MOS3gbd * delvbd + here->MOS3gbs * delvbs ; #ifndef NOBYPASS /* now lets see if we can bypass (ugh) */ /* the following mess should be one if statement, but * many compilers can't handle it all at once, so it * is split into several successive if statements */ tempv = MAX(fabs(cbhat),fabs(here->MOS3cbs + here->MOS3cbd))+ckt->CKTabstol; if((!(ckt->CKTmode & (MODEINITPRED|MODEINITTRAN|MODEINITSMSIG) )) && (ckt->CKTbypass) ) if ( (fabs(cbhat-(here->MOS3cbs + here->MOS3cbd)) < ckt->CKTreltol * tempv)) if( (fabs(delvbs) < (ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->MOS3vbs)))+ ckt->CKTvoltTol))) if ( (fabs(delvbd) < (ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0+here->MOS3vbd)))+ ckt->CKTvoltTol)) ) if( (fabs(delvgs) < (ckt->CKTreltol * MAX(fabs(vgs), fabs(*(ckt->CKTstate0+here->MOS3vgs)))+ ckt->CKTvoltTol))) if ( (fabs(delvds) < (ckt->CKTreltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0+here->MOS3vds)))+ ckt->CKTvoltTol)) ) if( (fabs(cdhat- here->MOS3cd) < ckt->CKTreltol * MAX(fabs(cdhat),fabs( here->MOS3cd)) + ckt->CKTabstol) ) { /* bypass code */ /* nothing interesting has changed since last * iteration on this device, so we just * copy all the values computed last iteration out * and keep going */ vbs = *(ckt->CKTstate0 + here->MOS3vbs); vbd = *(ckt->CKTstate0 + here->MOS3vbd); vgs = *(ckt->CKTstate0 + here->MOS3vgs); vds = *(ckt->CKTstate0 + here->MOS3vds); vgd = vgs - vds; vgb = vgs - vbs; cdrain = here->MOS3mode * (here->MOS3cd + here->MOS3cbd); if(ckt->CKTmode & (MODETRAN | MODETRANOP)) { capgs = ( *(ckt->CKTstate0+here->MOS3capgs)+ *(ckt->CKTstate1+here->MOS3capgs) + GateSourceOverlapCap ); capgd = ( *(ckt->CKTstate0+here->MOS3capgd)+ *(ckt->CKTstate1+here->MOS3capgd) + GateDrainOverlapCap ); capgb = ( *(ckt->CKTstate0+here->MOS3capgb)+ *(ckt->CKTstate1+here->MOS3capgb) + GateBulkOverlapCap ); } goto bypass; } #endif /*NOBYPASS*/ /* ok - bypass is out, do it the hard way */ von = model->MOS3type * here->MOS3von; #ifndef NODELIMITING /* * limiting * we want to keep device voltages from changing * so fast that the exponentials churn out overflows * and similar rudeness */ if(*(ckt->CKTstate0 + here->MOS3vds) >=0) { vgs = DEVfetlim(vgs,*(ckt->CKTstate0 + here->MOS3vgs) ,von); vds = vgs - vgd; vds = DEVlimvds(vds,*(ckt->CKTstate0 + here->MOS3vds)); vgd = vgs - vds; } else { vgd = DEVfetlim(vgd,vgdo,von); vds = vgs - vgd; if(!(ckt->CKTfixLimit)) { vds = -DEVlimvds(-vds,-(*(ckt->CKTstate0 + here->MOS3vds))); } vgs = vgd + vds; } if(vds >= 0) { vbs = DEVpnjlim(vbs,*(ckt->CKTstate0 + here->MOS3vbs), vt,here->MOS3sourceVcrit,&Check); vbd = vbs-vds; } else { vbd = DEVpnjlim(vbd,*(ckt->CKTstate0 + here->MOS3vbd), vt,here->MOS3drainVcrit,&Check); vbs = vbd + vds; } #endif /*NODELIMITING*/ } else { /* ok - not one of the simple cases, so we have to * look at all of the possibilities for why we were * called. We still just initialize the three voltages */ if((ckt->CKTmode & MODEINITJCT) && !here->MOS3off) { vds= model->MOS3type * here->MOS3icVDS; vgs= model->MOS3type * here->MOS3icVGS; vbs= model->MOS3type * here->MOS3icVBS; if((vds==0) && (vgs==0) && (vbs==0) && ((ckt->CKTmode & (MODETRAN|MODEDCOP|MODEDCTRANCURVE)) || (!(ckt->CKTmode & MODEUIC)))) { vbs = -1; vgs = model->MOS3type * here->MOS3tVto; vds = 0; } } else { vbs=vgs=vds=0; } } /* * now all the preliminaries are over - we can start doing the * real work */ vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; /* * bulk-source and bulk-drain diodes * here we just evaluate the ideal diode current and the * corresponding derivative (conductance). */ next1: if(vbs <= -3*vt) { arg=3*vt/(vbs*CONSTe); arg = arg * arg * arg; here->MOS3cbs = -SourceSatCur*(1+arg)+ckt->CKTgmin*vbs; here->MOS3gbs = SourceSatCur*3*arg/vbs+ckt->CKTgmin; } else { evbs = exp(MIN(MAX_EXP_ARG,vbs/vt)); here->MOS3gbs = SourceSatCur*evbs/vt + ckt->CKTgmin; here->MOS3cbs = SourceSatCur*(evbs-1) + ckt->CKTgmin*vbs; } if(vbd <= -3*vt) { arg=3*vt/(vbd*CONSTe); arg = arg * arg * arg; here->MOS3cbd = -DrainSatCur*(1+arg)+ckt->CKTgmin*vbd; here->MOS3gbd = DrainSatCur*3*arg/vbd+ckt->CKTgmin; } else { evbd = exp(MIN(MAX_EXP_ARG,vbd/vt)); here->MOS3gbd = DrainSatCur*evbd/vt + ckt->CKTgmin; here->MOS3cbd = DrainSatCur*(evbd-1) + ckt->CKTgmin*vbd; } /* now to determine whether the user was able to correctly * identify the source and drain of his device */ if(vds >= 0) { /* normal mode */ here->MOS3mode = 1; } else { /* inverse mode */ here->MOS3mode = -1; } { /* * subroutine moseq3(vds,vbs,vgs,gm,gds,gmbs, * qg,qc,qb,cggb,cgdb,cgsb,cbgb,cbdb,cbsb) */ /* this routine evaluates the drain current, its * derivatives and the charges associated with the * gate, channel and bulk for mosfets based on * semi-empirical equations */ double coeff0 = 0.0631353e0; double coeff1 = 0.8013292e0; double coeff2 = -0.01110777e0; double oneoverxl; /* 1/effective length */ double eta; /* eta from model after length factor */ double phibs; /* phi - vbs */ double sqphbs; /* square root of phibs */ double dsqdvb; /* */ double sqphis; /* square root of phi */ double sqphs3; /* square root of phi cubed */ double wps; double oneoverxj; /* 1/junction depth */ double xjonxl; /* junction depth/effective length */ double djonxj; double wponxj; double arga; double argb; double argc; double dwpdvb; double dadvb; double dbdvb; double gammas; double fbodys; double fbody; double onfbdy; double qbonco; double vbix; double wconxj; double dfsdvb; double dfbdvb; double dqbdvb; double vth; double dvtdvb; double csonco; double cdonco; double dxndvb = 0.0; double dvodvb = 0.0; double dvodvd = 0.0; double vgsx; double dvtdvd; double onfg; double fgate; double us; double dfgdvg; double dfgdvd; double dfgdvb; double dvsdvg; double dvsdvb; double dvsdvd; double xn = 0.0; double vdsc; double onvdsc = 0.0; double dvsdga; double vdsx; double dcodvb; double cdnorm; double cdo; double cd1; double fdrain = 0.0; double fd2; double dfddvg = 0.0; double dfddvb = 0.0; double dfddvd = 0.0; double gdsat; double cdsat; double gdoncd; double gdonfd; double gdonfg; double dgdvg; double dgdvd; double dgdvb; double emax; double emongd; double demdvg; double demdvd; double demdvb; double delxl; double dldvd; double dldem; double ddldvg; double ddldvd; double ddldvb; double dlonxl; double xlfact; double diddl; double gds0 = 0.0; double emoncd; double ondvt; double onxn; double wfact; double gms; double gmw; double fshort; /* * bypasses the computation of charges */ /* * reference cdrain equations to source and * charge equations to bulk */ vdsat = 0.0; oneoverxl = 1.0/EffectiveLength; eta = model->MOS3eta * 8.15e-22/(model->MOS3oxideCapFactor* EffectiveLength*EffectiveLength*EffectiveLength); /* *.....square root term */ if ( (here->MOS3mode==1?vbs:vbd) <= 0.0 ) { phibs = here->MOS3tPhi-(here->MOS3mode==1?vbs:vbd); sqphbs = sqrt(phibs); dsqdvb = -0.5/sqphbs; } else { sqphis = sqrt(here->MOS3tPhi); sqphs3 = here->MOS3tPhi*sqphis; sqphbs = sqphis/(1.0+(here->MOS3mode==1?vbs:vbd)/ (here->MOS3tPhi+here->MOS3tPhi)); phibs = sqphbs*sqphbs; dsqdvb = -phibs/(sqphs3+sqphs3); } /* *.....short channel effect factor */ if ( (model->MOS3junctionDepth != 0.0) && (model->MOS3coeffDepLayWidth != 0.0) ) { wps = model->MOS3coeffDepLayWidth*sqphbs; oneoverxj = 1.0/model->MOS3junctionDepth; xjonxl = model->MOS3junctionDepth*oneoverxl; djonxj = model->MOS3latDiff*oneoverxj; wponxj = wps*oneoverxj; wconxj = coeff0+coeff1*wponxj+coeff2*wponxj*wponxj; arga = wconxj+djonxj; argc = wponxj/(1.0+wponxj); argb = sqrt(1.0-argc*argc); fshort = 1.0-xjonxl*(arga*argb-djonxj); dwpdvb = model->MOS3coeffDepLayWidth*dsqdvb; dadvb = (coeff1+coeff2*(wponxj+wponxj))*dwpdvb*oneoverxj; dbdvb = -argc*argc*(1.0-argc)*dwpdvb/(argb*wps); dfsdvb = -xjonxl*(dadvb*argb+arga*dbdvb); } else { fshort = 1.0; dfsdvb = 0.0; } /* *.....body effect */ gammas = model->MOS3gamma*fshort; fbodys = 0.5*gammas/(sqphbs+sqphbs); fbody = fbodys+model->MOS3narrowFactor/EffectiveWidth; onfbdy = 1.0/(1.0+fbody); dfbdvb = -fbodys*dsqdvb/sqphbs+fbodys*dfsdvb/fshort; qbonco =gammas*sqphbs+model->MOS3narrowFactor*phibs/EffectiveWidth; dqbdvb = gammas*dsqdvb+model->MOS3gamma*dfsdvb*sqphbs- model->MOS3narrowFactor/EffectiveWidth; /* *.....static feedback effect */ vbix = here->MOS3tVbi*model->MOS3type-eta*(here->MOS3mode*vds); /* *.....threshold voltage */ vth = vbix+qbonco; dvtdvd = -eta; dvtdvb = dqbdvb; /* *.....joint weak inversion and strong inversion */ von = vth; if ( model->MOS3fastSurfaceStateDensity != 0.0 ) { csonco = CHARGE*model->MOS3fastSurfaceStateDensity * 1e4 /*(cm**2/m**2)*/ *EffectiveLength*EffectiveWidth * here->MOS3m/OxideCap; cdonco = qbonco/(phibs+phibs); xn = 1.0+csonco+cdonco; von = vth+vt*xn; dxndvb = dqbdvb/(phibs+phibs)-qbonco*dsqdvb/(phibs*sqphbs); dvodvd = dvtdvd; dvodvb = dvtdvb+vt*dxndvb; } else { /* *.....cutoff region */ if ( (here->MOS3mode==1?vgs:vgd) <= von ) { cdrain = 0.0; here->MOS3gm = 0.0; here->MOS3gds = 0.0; here->MOS3gmbs = 0.0; goto innerline1000; } } /* *.....device is on */ vgsx = MAX((here->MOS3mode==1?vgs:vgd),von); /* *.....mobility modulation by gate voltage */ onfg = 1.0+model->MOS3theta*(vgsx-vth); fgate = 1.0/onfg; us = here->MOS3tSurfMob * 1e-4 /*(m**2/cm**2)*/ *fgate; dfgdvg = -model->MOS3theta*fgate*fgate; dfgdvd = -dfgdvg*dvtdvd; dfgdvb = -dfgdvg*dvtdvb; /* *.....saturation voltage */ vdsat = (vgsx-vth)*onfbdy; if ( model->MOS3maxDriftVel <= 0.0 ) { dvsdvg = onfbdy; dvsdvd = -dvsdvg*dvtdvd; dvsdvb = -dvsdvg*dvtdvb-vdsat*dfbdvb*onfbdy; } else { vdsc = EffectiveLength*model->MOS3maxDriftVel/us; onvdsc = 1.0/vdsc; arga = (vgsx-vth)*onfbdy; argb = sqrt(arga*arga+vdsc*vdsc); vdsat = arga+vdsc-argb; dvsdga = (1.0-arga/argb)*onfbdy; dvsdvg = dvsdga-(1.0-vdsc/argb)*vdsc*dfgdvg*onfg; dvsdvd = -dvsdvg*dvtdvd; dvsdvb = -dvsdvg*dvtdvb-arga*dvsdga*dfbdvb; } /* *.....current factors in linear region */ vdsx = MIN((here->MOS3mode*vds),vdsat); if ( vdsx == 0.0 ) goto line900; cdo = vgsx-vth-0.5*(1.0+fbody)*vdsx; dcodvb = -dvtdvb-0.5*dfbdvb*vdsx; /* *.....normalized drain current */ cdnorm = cdo*vdsx; here->MOS3gm = vdsx; if ((here->MOS3mode*vds) > vdsat) here->MOS3gds = -dvtdvd*vdsx; else here->MOS3gds = vgsx-vth-(1.0+fbody+dvtdvd)*vdsx; here->MOS3gmbs = dcodvb*vdsx; /* *.....drain current without velocity saturation effect */ cd1 = Beta*cdnorm; Beta = Beta*fgate; cdrain = Beta*cdnorm; here->MOS3gm = Beta*here->MOS3gm+dfgdvg*cd1; here->MOS3gds = Beta*here->MOS3gds+dfgdvd*cd1; here->MOS3gmbs = Beta*here->MOS3gmbs+dfgdvb*cd1; /* *.....velocity saturation factor */ if ( model->MOS3maxDriftVel > 0.0 ) { fdrain = 1.0/(1.0+vdsx*onvdsc); fd2 = fdrain*fdrain; arga = fd2*vdsx*onvdsc*onfg; dfddvg = -dfgdvg*arga; if ((here->MOS3mode*vds) > vdsat) dfddvd = -dfgdvd*arga; else dfddvd = -dfgdvd*arga-fd2*onvdsc; dfddvb = -dfgdvb*arga; /* *.....drain current */ here->MOS3gm = fdrain*here->MOS3gm+dfddvg*cdrain; here->MOS3gds = fdrain*here->MOS3gds+dfddvd*cdrain; here->MOS3gmbs = fdrain*here->MOS3gmbs+dfddvb*cdrain; cdrain = fdrain*cdrain; Beta = Beta*fdrain; } /* *.....channel length modulation */ if ( (here->MOS3mode*vds) <= vdsat ) { if ( (model->MOS3maxDriftVel > 0.0) || (model->MOS3alpha == 0.0) || (ckt->CKTbadMos3) ) goto line700; else { arga = (here->MOS3mode*vds)/vdsat; delxl = sqrt(model->MOS3kappa*model->MOS3alpha*vdsat/8); dldvd = 4*delxl*arga*arga*arga/vdsat; arga *= arga; arga *= arga; delxl *= arga; ddldvg = 0.0; ddldvd = -dldvd; ddldvb = 0.0; goto line520; } } if ( model->MOS3maxDriftVel <= 0.0 ) goto line510; if (model->MOS3alpha == 0.0) goto line700; cdsat = cdrain; gdsat = cdsat*(1.0-fdrain)*onvdsc; gdsat = MAX(1.0e-12,gdsat); gdoncd = gdsat/cdsat; gdonfd = gdsat/(1.0-fdrain); gdonfg = gdsat*onfg; dgdvg = gdoncd*here->MOS3gm-gdonfd*dfddvg+gdonfg*dfgdvg; dgdvd = gdoncd*here->MOS3gds-gdonfd*dfddvd+gdonfg*dfgdvd; dgdvb = gdoncd*here->MOS3gmbs-gdonfd*dfddvb+gdonfg*dfgdvb; if (ckt->CKTbadMos3) emax = cdsat*oneoverxl/gdsat; else emax = model->MOS3kappa * cdsat*oneoverxl/gdsat; emoncd = emax/cdsat; emongd = emax/gdsat; demdvg = emoncd*here->MOS3gm-emongd*dgdvg; demdvd = emoncd*here->MOS3gds-emongd*dgdvd; demdvb = emoncd*here->MOS3gmbs-emongd*dgdvb; arga = 0.5*emax*model->MOS3alpha; argc = model->MOS3kappa*model->MOS3alpha; argb = sqrt(arga*arga+argc*((here->MOS3mode*vds)-vdsat)); delxl = argb-arga; if (argb != 0.0) { dldvd = argc/(argb+argb); dldem = 0.5*(arga/argb-1.0)*model->MOS3alpha; } else { dldvd = 0.0; dldem = 0.0; } ddldvg = dldem*demdvg; ddldvd = dldem*demdvd-dldvd; ddldvb = dldem*demdvb; goto line520; line510: if (ckt->CKTbadMos3) { delxl = sqrt(model->MOS3kappa*((here->MOS3mode*vds)-vdsat)* model->MOS3alpha); dldvd = 0.5*delxl/((here->MOS3mode*vds)-vdsat); } else { delxl = sqrt(model->MOS3kappa*model->MOS3alpha* ((here->MOS3mode*vds)-vdsat+(vdsat/8))); dldvd = 0.5*delxl/((here->MOS3mode*vds)-vdsat+(vdsat/8)); } ddldvg = 0.0; ddldvd = -dldvd; ddldvb = 0.0; /* *.....punch through approximation */ line520: if ( delxl > (0.5*EffectiveLength) ) { delxl = EffectiveLength-(EffectiveLength*EffectiveLength/ (4.0*delxl)); arga = 4.0*(EffectiveLength-delxl)*(EffectiveLength-delxl)/ (EffectiveLength*EffectiveLength); ddldvg = ddldvg*arga; ddldvd = ddldvd*arga; ddldvb = ddldvb*arga; dldvd = dldvd*arga; } /* *.....saturation region */ dlonxl = delxl*oneoverxl; xlfact = 1.0/(1.0-dlonxl); cd1 = cdrain; cdrain = cdrain*xlfact; diddl = cdrain/(EffectiveLength-delxl); here->MOS3gm = here->MOS3gm*xlfact+diddl*ddldvg; here->MOS3gmbs = here->MOS3gmbs*xlfact+diddl*ddldvb; gds0 = diddl*ddldvd; here->MOS3gm = here->MOS3gm+gds0*dvsdvg; here->MOS3gmbs = here->MOS3gmbs+gds0*dvsdvb; here->MOS3gds = here->MOS3gds*xlfact+diddl*dldvd+gds0*dvsdvd; /* here->MOS3gds = (here->MOS3gds*xlfact)+gds0*dvsdvd- (cd1*ddldvd/(EffectiveLength*(1-2*dlonxl+dlonxl*dlonxl)));*/ /* *.....finish strong inversion case */ line700: if ( (here->MOS3mode==1?vgs:vgd) < von ) { /* *.....weak inversion */ onxn = 1.0/xn; ondvt = onxn/vt; wfact = exp( ((here->MOS3mode==1?vgs:vgd)-von)*ondvt ); cdrain = cdrain*wfact; gms = here->MOS3gm*wfact; gmw = cdrain*ondvt; here->MOS3gm = gmw; if ((here->MOS3mode*vds) > vdsat) { here->MOS3gm = here->MOS3gm+gds0*dvsdvg*wfact; } here->MOS3gds = here->MOS3gds*wfact+(gms-gmw)*dvodvd; here->MOS3gmbs = here->MOS3gmbs*wfact+(gms-gmw)*dvodvb-gmw* ((here->MOS3mode==1?vgs:vgd)-von)*onxn*dxndvb; } /* *.....charge computation */ goto innerline1000; /* *.....special case of vds = 0.0d0 */ line900: Beta = Beta*fgate; cdrain = 0.0; here->MOS3gm = 0.0; here->MOS3gds = Beta*(vgsx-vth); here->MOS3gmbs = 0.0; if ( (model->MOS3fastSurfaceStateDensity != 0.0) && ((here->MOS3mode==1?vgs:vgd) < von) ) { here->MOS3gds *=exp(((here->MOS3mode==1?vgs:vgd)-von)/(vt*xn)); } innerline1000:; /* *.....done */ } /* now deal with n vs p polarity */ here->MOS3von = model->MOS3type * von; here->MOS3vdsat = model->MOS3type * vdsat; /* line 490 */ /* * COMPUTE EQUIVALENT DRAIN CURRENT SOURCE */ here->MOS3cd=here->MOS3mode * cdrain - here->MOS3cbd; if (ckt->CKTmode & (MODETRAN | MODETRANOP | MODEINITSMSIG)) { /* * now we do the hard part of the bulk-drain and bulk-source * diode - we evaluate the non-linear capacitance and * charge * * the basic equations are not hard, but the implementation * is somewhat long in an attempt to avoid log/exponential * evaluations */ /* * charge storage elements * *.. bulk-drain and bulk-source depletion capacitances */ #ifdef CAPBYPASS if(((ckt->CKTmode & (MODEINITPRED | MODEINITTRAN) ) || fabs(delvbs) >= ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->MOS3vbs)))+ ckt->CKTvoltTol)|| senflag ) #endif /*CAPBYPASS*/ { /* can't bypass the diode capacitance calculations */ if(here->MOS3Cbs != 0 || here->MOS3Cbssw != 0 ) { if (vbs < here->MOS3tDepCap){ arg=1-vbs/here->MOS3tBulkPot; /* * the following block looks somewhat long and messy, * but since most users use the default grading * coefficients of .5, and sqrt is MUCH faster than an * exp(log()) we use this special case code to buy time. * (as much as 10% of total job time!) */ if(model->MOS3bulkJctBotGradingCoeff == model->MOS3bulkJctSideGradingCoeff) { if(model->MOS3bulkJctBotGradingCoeff == .5) { sarg = sargsw = 1/sqrt(arg); } else { sarg = sargsw = exp(-model->MOS3bulkJctBotGradingCoeff* log(arg)); } } else { if(model->MOS3bulkJctBotGradingCoeff == .5) { sarg = 1/sqrt(arg); } else { sarg = exp(-model->MOS3bulkJctBotGradingCoeff* log(arg)); } if(model->MOS3bulkJctSideGradingCoeff == .5) { sargsw = 1/sqrt(arg); } else { sargsw =exp(-model->MOS3bulkJctSideGradingCoeff* log(arg)); } } *(ckt->CKTstate0 + here->MOS3qbs) = here->MOS3tBulkPot*(here->MOS3Cbs* (1-arg*sarg)/(1-model->MOS3bulkJctBotGradingCoeff) +here->MOS3Cbssw* (1-arg*sargsw)/ (1-model->MOS3bulkJctSideGradingCoeff)); here->MOS3capbs=here->MOS3Cbs*sarg+ here->MOS3Cbssw*sargsw; } else { *(ckt->CKTstate0 + here->MOS3qbs) = here->MOS3f4s + vbs*(here->MOS3f2s+vbs*(here->MOS3f3s/2)); here->MOS3capbs=here->MOS3f2s+here->MOS3f3s*vbs; } } else { *(ckt->CKTstate0 + here->MOS3qbs) = 0; here->MOS3capbs=0; } } #ifdef CAPBYPASS if(((ckt->CKTmode & (MODEINITPRED | MODEINITTRAN) ) || fabs(delvbd) >= ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0+here->MOS3vbd)))+ ckt->CKTvoltTol)|| senflag ) #endif /*CAPBYPASS*/ /* can't bypass the diode capacitance calculations */ { if(here->MOS3Cbd != 0 || here->MOS3Cbdsw != 0 ) { if (vbd < here->MOS3tDepCap) { arg=1-vbd/here->MOS3tBulkPot; /* * the following block looks somewhat long and messy, * but since most users use the default grading * coefficients of .5, and sqrt is MUCH faster than an * exp(log()) we use this special case code to buy time. * (as much as 10% of total job time!) */ if(model->MOS3bulkJctBotGradingCoeff == .5 && model->MOS3bulkJctSideGradingCoeff == .5) { sarg = sargsw = 1/sqrt(arg); } else { if(model->MOS3bulkJctBotGradingCoeff == .5) { sarg = 1/sqrt(arg); } else { sarg = exp(-model->MOS3bulkJctBotGradingCoeff* log(arg)); } if(model->MOS3bulkJctSideGradingCoeff == .5) { sargsw = 1/sqrt(arg); } else { sargsw =exp(-model->MOS3bulkJctSideGradingCoeff* log(arg)); } } *(ckt->CKTstate0 + here->MOS3qbd) = here->MOS3tBulkPot*(here->MOS3Cbd* (1-arg*sarg) /(1-model->MOS3bulkJctBotGradingCoeff) +here->MOS3Cbdsw* (1-arg*sargsw) /(1-model->MOS3bulkJctSideGradingCoeff)); here->MOS3capbd=here->MOS3Cbd*sarg+ here->MOS3Cbdsw*sargsw; } else { *(ckt->CKTstate0 + here->MOS3qbd) = here->MOS3f4d + vbd * (here->MOS3f2d + vbd * here->MOS3f3d/2); here->MOS3capbd=here->MOS3f2d + vbd * here->MOS3f3d; } } else { *(ckt->CKTstate0 + here->MOS3qbd) = 0; here->MOS3capbd = 0; } } if(SenCond && (ckt->CKTsenInfo->SENmode==TRANSEN)) goto next2; if ( ckt->CKTmode & MODETRAN ) { /* (above only excludes tranop, since we're only at this * point if tran or tranop ) */ /* * calculate equivalent conductances and currents for * depletion capacitors */ /* integrate the capacitors and save results */ error = NIintegrate(ckt,&geq,&ceq,here->MOS3capbd, here->MOS3qbd); if(error) return(error); here->MOS3gbd += geq; here->MOS3cbd += *(ckt->CKTstate0 + here->MOS3cqbd); here->MOS3cd -= *(ckt->CKTstate0 + here->MOS3cqbd); error = NIintegrate(ckt,&geq,&ceq,here->MOS3capbs, here->MOS3qbs); if(error) return(error); here->MOS3gbs += geq; here->MOS3cbs += *(ckt->CKTstate0 + here->MOS3cqbs); } } if(SenCond) goto next2; /* * check convergence */ if ( (here->MOS3off == 0) || (!(ckt->CKTmode & (MODEINITFIX|MODEINITSMSIG))) ){ if (Check == 1) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; } } /* save things away for next time */ next2: *(ckt->CKTstate0 + here->MOS3vbs) = vbs; *(ckt->CKTstate0 + here->MOS3vbd) = vbd; *(ckt->CKTstate0 + here->MOS3vgs) = vgs; *(ckt->CKTstate0 + here->MOS3vds) = vds; /* * meyer's capacitor model */ if ( ckt->CKTmode & (MODETRAN | MODETRANOP | MODEINITSMSIG) ) { /* * calculate meyer's capacitors */ /* * new cmeyer - this just evaluates at the current time, * expects you to remember values from previous time * returns 1/2 of non-constant portion of capacitance * you must add in the other half from previous time * and the constant part */ if (here->MOS3mode > 0){ DEVqmeyer (vgs,vgd,vgb,von,vdsat, (ckt->CKTstate0 + here->MOS3capgs), (ckt->CKTstate0 + here->MOS3capgd), (ckt->CKTstate0 + here->MOS3capgb), here->MOS3tPhi,OxideCap); } else { DEVqmeyer (vgd,vgs,vgb,von,vdsat, (ckt->CKTstate0 + here->MOS3capgd), (ckt->CKTstate0 + here->MOS3capgs), (ckt->CKTstate0 + here->MOS3capgb), here->MOS3tPhi,OxideCap); } vgs1 = *(ckt->CKTstate1 + here->MOS3vgs); vgd1 = vgs1 - *(ckt->CKTstate1 + here->MOS3vds); vgb1 = vgs1 - *(ckt->CKTstate1 + here->MOS3vbs); if(ckt->CKTmode & MODETRANOP) { capgs = 2 * *(ckt->CKTstate0+here->MOS3capgs)+ GateSourceOverlapCap ; capgd = 2 * *(ckt->CKTstate0+here->MOS3capgd)+ GateDrainOverlapCap ; capgb = 2 * *(ckt->CKTstate0+here->MOS3capgb)+ GateBulkOverlapCap ; } else { capgs = ( *(ckt->CKTstate0+here->MOS3capgs)+ *(ckt->CKTstate1+here->MOS3capgs) + GateSourceOverlapCap ); capgd = ( *(ckt->CKTstate0+here->MOS3capgd)+ *(ckt->CKTstate1+here->MOS3capgd) + GateDrainOverlapCap ); capgb = ( *(ckt->CKTstate0+here->MOS3capgb)+ *(ckt->CKTstate1+here->MOS3capgb) + GateBulkOverlapCap ); } if(ckt->CKTsenInfo){ here->MOS3cgs = capgs; here->MOS3cgd = capgd; here->MOS3cgb = capgb; } /* * store small-signal parameters (for meyer's model) * all parameters already stored, so done... */ if(SenCond){ if(ckt->CKTsenInfo->SENmode & (DCSEN|ACSEN)) { continue; } } #ifndef PREDICTOR if (ckt->CKTmode & (MODEINITPRED | MODEINITTRAN) ) { *(ckt->CKTstate0 + here->MOS3qgs) = (1+xfact) * *(ckt->CKTstate1 + here->MOS3qgs) - xfact * *(ckt->CKTstate2 + here->MOS3qgs); *(ckt->CKTstate0 + here->MOS3qgd) = (1+xfact) * *(ckt->CKTstate1 + here->MOS3qgd) - xfact * *(ckt->CKTstate2 + here->MOS3qgd); *(ckt->CKTstate0 + here->MOS3qgb) = (1+xfact) * *(ckt->CKTstate1 + here->MOS3qgb) - xfact * *(ckt->CKTstate2 + here->MOS3qgb); } else { #endif /*PREDICTOR*/ if(ckt->CKTmode & MODETRAN) { *(ckt->CKTstate0 + here->MOS3qgs) = (vgs-vgs1)*capgs + *(ckt->CKTstate1 + here->MOS3qgs) ; *(ckt->CKTstate0 + here->MOS3qgd) = (vgd-vgd1)*capgd + *(ckt->CKTstate1 + here->MOS3qgd) ; *(ckt->CKTstate0 + here->MOS3qgb) = (vgb-vgb1)*capgb + *(ckt->CKTstate1 + here->MOS3qgb) ; } else { /* TRANOP only */ *(ckt->CKTstate0 + here->MOS3qgs) = vgs*capgs; *(ckt->CKTstate0 + here->MOS3qgd) = vgd*capgd; *(ckt->CKTstate0 + here->MOS3qgb) = vgb*capgb; } #ifndef PREDICTOR } #endif /*PREDICTOR*/ } #ifndef NOBYPASS bypass: #endif if(SenCond) continue; if ( (ckt->CKTmode & (MODEINITTRAN)) || (! (ckt->CKTmode & (MODETRAN)) ) ) { /* * initialize to zero charge conductances * and current */ gcgs=0; ceqgs=0; gcgd=0; ceqgd=0; gcgb=0; ceqgb=0; } else { if(capgs == 0) *(ckt->CKTstate0 + here->MOS3cqgs) =0; if(capgd == 0) *(ckt->CKTstate0 + here->MOS3cqgd) =0; if(capgb == 0) *(ckt->CKTstate0 + here->MOS3cqgb) =0; /* * calculate equivalent conductances and currents for * meyer"s capacitors */ error = NIintegrate(ckt,&gcgs,&ceqgs,capgs,here->MOS3qgs); if(error) return(error); error = NIintegrate(ckt,&gcgd,&ceqgd,capgd,here->MOS3qgd); if(error) return(error); error = NIintegrate(ckt,&gcgb,&ceqgb,capgb,here->MOS3qgb); if(error) return(error); ceqgs=ceqgs-gcgs*vgs+ckt->CKTag[0]* *(ckt->CKTstate0 + here->MOS3qgs); ceqgd=ceqgd-gcgd*vgd+ckt->CKTag[0]* *(ckt->CKTstate0 + here->MOS3qgd); ceqgb=ceqgb-gcgb*vgb+ckt->CKTag[0]* *(ckt->CKTstate0 + here->MOS3qgb); } /* * store charge storage info for meyer's cap in lx table */ /* * load current vector */ ceqbs = model->MOS3type * (here->MOS3cbs-(here->MOS3gbs)*vbs); ceqbd = model->MOS3type * (here->MOS3cbd-(here->MOS3gbd)*vbd); if (here->MOS3mode >= 0) { xnrm=1; xrev=0; cdreq=model->MOS3type*(cdrain-here->MOS3gds*vds- here->MOS3gm*vgs-here->MOS3gmbs*vbs); } else { xnrm=0; xrev=1; cdreq = -(model->MOS3type)*(cdrain-here->MOS3gds*(-vds)- here->MOS3gm*vgd-here->MOS3gmbs*vbd); } *(ckt->CKTrhs + here->MOS3gNode) -= (model->MOS3type * (ceqgs + ceqgb + ceqgd)); *(ckt->CKTrhs + here->MOS3bNode) -= (ceqbs + ceqbd - model->MOS3type * ceqgb); *(ckt->CKTrhs + here->MOS3dNodePrime) += (ceqbd - cdreq + model->MOS3type * ceqgd); *(ckt->CKTrhs + here->MOS3sNodePrime) += cdreq + ceqbs + model->MOS3type * ceqgs; /* * load y matrix */ #if 0 printf(" loading %s at time %g\n",here->MOS3name,ckt->CKTtime); printf("%g %g %g %g %g\n", here->MOS3drainConductance,gcgd+gcgs+gcgb, here->MOS3sourceConductance,here->MOS3gbd,here->MOS3gbs); printf("%g %g %g %g %g\n",-gcgb,0.0,0.0,here->MOS3gds,here->MOS3gm); printf("%g %g %g %g %g\n", here->MOS3gds,here->MOS3gmbs,gcgd,-gcgs,-gcgd); printf("%g %g %g %g %g\n", -gcgs,-gcgd,0.0,-gcgs,0.0); #endif *(here->MOS3DdPtr) += (here->MOS3drainConductance); *(here->MOS3GgPtr) += ((gcgd+gcgs+gcgb)); *(here->MOS3SsPtr) += (here->MOS3sourceConductance); *(here->MOS3BbPtr) += (here->MOS3gbd+here->MOS3gbs+gcgb); *(here->MOS3DPdpPtr) += (here->MOS3drainConductance+here->MOS3gds+ here->MOS3gbd+xrev*(here->MOS3gm+here->MOS3gmbs)+gcgd); *(here->MOS3SPspPtr) += (here->MOS3sourceConductance+here->MOS3gds+ here->MOS3gbs+xnrm*(here->MOS3gm+here->MOS3gmbs)+gcgs); *(here->MOS3DdpPtr) += (-here->MOS3drainConductance); *(here->MOS3GbPtr) -= gcgb; *(here->MOS3GdpPtr) -= gcgd; *(here->MOS3GspPtr) -= gcgs; *(here->MOS3SspPtr) += (-here->MOS3sourceConductance); *(here->MOS3BgPtr) -= gcgb; *(here->MOS3BdpPtr) -= here->MOS3gbd; *(here->MOS3BspPtr) -= here->MOS3gbs; *(here->MOS3DPdPtr) += (-here->MOS3drainConductance); *(here->MOS3DPgPtr) += ((xnrm-xrev)*here->MOS3gm-gcgd); *(here->MOS3DPbPtr) += (-here->MOS3gbd+(xnrm-xrev)*here->MOS3gmbs); *(here->MOS3DPspPtr) += (-here->MOS3gds- xnrm*(here->MOS3gm+here->MOS3gmbs)); *(here->MOS3SPgPtr) += (-(xnrm-xrev)*here->MOS3gm-gcgs); *(here->MOS3SPsPtr) += (-here->MOS3sourceConductance); *(here->MOS3SPbPtr) += (-here->MOS3gbs-(xnrm-xrev)*here->MOS3gmbs); *(here->MOS3SPdpPtr) += (-here->MOS3gds- xrev*(here->MOS3gm+here->MOS3gmbs)); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos3/mos3init.h0000644000175000017500000000037013546075722021762 0ustar carstencarsten#ifndef _MOS3INIT_H #define _MOS3INIT_H extern IFparm MOS3pTable[ ]; extern IFparm MOS3mPTable[ ]; extern char *MOS3names[ ]; extern int MOS3pTSize; extern int MOS3mPTSize; extern int MOS3nSize; extern int MOS3iSize; extern int MOS3mSize; #endif tmpk8ny_4pz/src/spicelib/devices/mos3/mos3set.c0000644000175000017500000002270113546075722021607 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarlesù Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mos3defs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* assuming silicon - make definition for epsilon of silicon */ #define EPSSIL (11.7 * 8.854214871e-12) int MOS3setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* load the MOS3 device structure with those pointers needed later * for fast matrix loading */ { MOS3model *model = (MOS3model *)inModel; MOS3instance *here; int error; CKTnode *tmp; /* loop through all the MOS3 device models */ for( ; model != NULL; model = MOS3nextModel(model)) { /* perform model defaulting */ if(!model->MOS3typeGiven) { model->MOS3type = NMOS; } if(!model->MOS3latDiffGiven) { model->MOS3latDiff = 0; } if(!model->MOS3lengthAdjustGiven) { model->MOS3lengthAdjust = 0; } if(!model->MOS3widthNarrowGiven) { model->MOS3widthNarrow = 0; } if(!model->MOS3widthAdjustGiven) { model->MOS3widthAdjust = 0; } if(!model->MOS3delvt0Given) { model->MOS3delvt0 = 0; } if(!model->MOS3jctSatCurDensityGiven) { model->MOS3jctSatCurDensity = 0; } if(!model->MOS3jctSatCurGiven) { model->MOS3jctSatCur = 1e-14; } if(!model->MOS3drainResistanceGiven) { model->MOS3drainResistance = 0; } if(!model->MOS3sourceResistanceGiven) { model->MOS3sourceResistance = 0; } if(!model->MOS3sheetResistanceGiven) { model->MOS3sheetResistance = 0; } if(!model->MOS3transconductanceGiven) { model->MOS3transconductance = 2e-5; } if(!model->MOS3gateSourceOverlapCapFactorGiven) { model->MOS3gateSourceOverlapCapFactor = 0; } if(!model->MOS3gateDrainOverlapCapFactorGiven) { model->MOS3gateDrainOverlapCapFactor = 0; } if(!model->MOS3gateBulkOverlapCapFactorGiven) { model->MOS3gateBulkOverlapCapFactor = 0; } if(!model->MOS3vt0Given) { model->MOS3vt0 = 0; } if(!model->MOS3capBDGiven) { model->MOS3capBD = 0; } if(!model->MOS3capBSGiven) { model->MOS3capBS = 0; } if(!model->MOS3bulkCapFactorGiven) { model->MOS3bulkCapFactor = 0; } if(!model->MOS3sideWallCapFactorGiven) { model->MOS3sideWallCapFactor = 0; } if(!model->MOS3bulkJctPotentialGiven) { model->MOS3bulkJctPotential = .8; } if(!model->MOS3bulkJctBotGradingCoeffGiven) { model->MOS3bulkJctBotGradingCoeff = .5; } if(!model->MOS3bulkJctSideGradingCoeffGiven) { model->MOS3bulkJctSideGradingCoeff = .33; } if(!model->MOS3fwdCapDepCoeffGiven) { model->MOS3fwdCapDepCoeff = .5; } if(!model->MOS3phiGiven) { model->MOS3phi = .6; } if(!model->MOS3gammaGiven) { model->MOS3gamma = 0; } if(!model->MOS3deltaGiven) { model->MOS3delta = 0; } if(!model->MOS3maxDriftVelGiven) { model->MOS3maxDriftVel = 0; } if(!model->MOS3junctionDepthGiven) { model->MOS3junctionDepth = 0; } if(!model->MOS3fastSurfaceStateDensityGiven) { model->MOS3fastSurfaceStateDensity = 0; } if(!model->MOS3etaGiven) { model->MOS3eta = 0; } if(!model->MOS3thetaGiven) { model->MOS3theta = 0; } if(!model->MOS3kappaGiven) { model->MOS3kappa = .2; } if(!model->MOS3oxideThicknessGiven) { model->MOS3oxideThickness = 1e-7; } if(!model->MOS3fNcoefGiven) { model->MOS3fNcoef = 0; } if(!model->MOS3fNexpGiven) { model->MOS3fNexp = 1; } /* loop through all the instances of the model */ for (here = MOS3instances(model); here != NULL ; here=MOS3nextInstance(here)) { CKTnode *tmpNode; IFuid tmpName; /* allocate a chunk of the state vector */ here->MOS3states = *states; *states += MOS3NUMSTATES; if(!here->MOS3drainAreaGiven) { here->MOS3drainArea = ckt->CKTdefaultMosAD; } if(!here->MOS3drainPerimiterGiven) { here->MOS3drainPerimiter = 0; } if(!here->MOS3drainSquaresGiven) { here->MOS3drainSquares = 1; } if(!here->MOS3icVBSGiven) { here->MOS3icVBS = 0; } if(!here->MOS3icVDSGiven) { here->MOS3icVDS = 0; } if(!here->MOS3icVGSGiven) { here->MOS3icVGS = 0; } if(!here->MOS3sourcePerimiterGiven) { here->MOS3sourcePerimiter = 0; } if(!here->MOS3sourceSquaresGiven) { here->MOS3sourceSquares = 1; } if(!here->MOS3vdsatGiven) { here->MOS3vdsat = 0; } if(!here->MOS3vonGiven) { here->MOS3von = 0; } if(!here->MOS3modeGiven) { here->MOS3mode = 1; } if((model->MOS3drainResistance != 0 || (model->MOS3sheetResistance != 0 && here->MOS3drainSquares != 0 ) )) { if (here->MOS3dNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->MOS3name,"internal#drain"); if(error) return(error); here->MOS3dNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->MOS3dNodePrime = here->MOS3dNode; } if((model->MOS3sourceResistance != 0 || (model->MOS3sheetResistance != 0 && here->MOS3sourceSquares != 0 ) )) { if (here->MOS3sNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->MOS3name,"internal#source"); if(error) return(error); here->MOS3sNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->MOS3sNodePrime = here->MOS3sNode; } /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(MOS3DdPtr, MOS3dNode, MOS3dNode); TSTALLOC(MOS3GgPtr, MOS3gNode, MOS3gNode); TSTALLOC(MOS3SsPtr, MOS3sNode, MOS3sNode); TSTALLOC(MOS3BbPtr, MOS3bNode, MOS3bNode); TSTALLOC(MOS3DPdpPtr, MOS3dNodePrime, MOS3dNodePrime); TSTALLOC(MOS3SPspPtr, MOS3sNodePrime, MOS3sNodePrime); TSTALLOC(MOS3DdpPtr, MOS3dNode, MOS3dNodePrime); TSTALLOC(MOS3GbPtr, MOS3gNode, MOS3bNode); TSTALLOC(MOS3GdpPtr, MOS3gNode, MOS3dNodePrime); TSTALLOC(MOS3GspPtr, MOS3gNode, MOS3sNodePrime); TSTALLOC(MOS3SspPtr, MOS3sNode, MOS3sNodePrime); TSTALLOC(MOS3BdpPtr, MOS3bNode, MOS3dNodePrime); TSTALLOC(MOS3BspPtr, MOS3bNode, MOS3sNodePrime); TSTALLOC(MOS3DPspPtr, MOS3dNodePrime, MOS3sNodePrime); TSTALLOC(MOS3DPdPtr, MOS3dNodePrime, MOS3dNode); TSTALLOC(MOS3BgPtr, MOS3bNode, MOS3gNode); TSTALLOC(MOS3DPgPtr, MOS3dNodePrime, MOS3gNode); TSTALLOC(MOS3SPgPtr, MOS3sNodePrime, MOS3gNode); TSTALLOC(MOS3SPsPtr, MOS3sNodePrime, MOS3sNode); TSTALLOC(MOS3DPbPtr, MOS3dNodePrime, MOS3bNode); TSTALLOC(MOS3SPbPtr, MOS3sNodePrime, MOS3bNode); TSTALLOC(MOS3SPdpPtr, MOS3sNodePrime, MOS3dNodePrime); } } return(OK); } int MOS3unsetup(GENmodel *inModel, CKTcircuit *ckt) { MOS3model *model; MOS3instance *here; for (model = (MOS3model *)inModel; model != NULL; model = MOS3nextModel(model)) { for (here = MOS3instances(model); here != NULL; here=MOS3nextInstance(here)) { if (here->MOS3sNodePrime > 0 && here->MOS3sNodePrime != here->MOS3sNode) CKTdltNNum(ckt, here->MOS3sNodePrime); here->MOS3sNodePrime= 0; if (here->MOS3dNodePrime > 0 && here->MOS3dNodePrime != here->MOS3dNode) CKTdltNNum(ckt, here->MOS3dNodePrime); here->MOS3dNodePrime= 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/mos3/mos3defs.h0000644000175000017500000004564113546075722021752 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlanFixes **********/ #ifndef MOS3 #define MOS3 #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" /* declarations for level 3 MOSFETs */ /* indices to the array of MOSFET(3) noise sources */ enum { MOS3RDNOIZ = 0, MOS3RSNOIZ, MOS3IDNOIZ, MOS3FLNOIZ, MOS3TOTNOIZ, /* finally, the number of noise sources */ MOS3NSRCS }; /* information needed for each instance */ typedef struct sMOS3instance { struct GENinstance gen; #define MOS3modPtr(inst) ((struct sMOS3model *)((inst)->gen.GENmodPtr)) #define MOS3nextInstance(inst) ((struct sMOS3instance *)((inst)->gen.GENnextInstance)) #define MOS3name gen.GENname #define MOS3states gen.GENstate const int MOS3dNode; /* number of the gate node of the mosfet */ const int MOS3gNode; /* number of the gate node of the mosfet */ const int MOS3sNode; /* number of the source node of the mosfet */ const int MOS3bNode; /* number of the bulk node of the mosfet */ int MOS3dNodePrime; /* number of the internal drain node of the mosfet */ int MOS3sNodePrime; /* number of the internal source node of the mosfet */ double MOS3m; /* parallel device multiplier */ double MOS3l; /* the length of the channel region */ double MOS3w; /* the width of the channel region */ double MOS3drainArea; /* the area of the drain diffusion */ double MOS3sourceArea; /* the area of the source diffusion */ double MOS3drainSquares; /* the length of the drain in squares */ double MOS3sourceSquares; /* the length of the source in squares */ double MOS3drainPerimiter; double MOS3sourcePerimiter; double MOS3sourceConductance; /*conductance of source(or 0):set in setup*/ double MOS3drainConductance; /*conductance of drain(or 0):set in setup*/ double MOS3temp; /* operating temperature of this instance */ double MOS3dtemp; /* temperature difference for this instance */ double MOS3tTransconductance; /* temperature corrected transconductance*/ double MOS3tSurfMob; /* temperature corrected surface mobility */ double MOS3tPhi; /* temperature corrected Phi */ double MOS3tVto; /* temperature corrected Vto */ double MOS3tSatCur; /* temperature corrected saturation Cur. */ double MOS3tSatCurDens; /* temperature corrected saturation Cur. density*/ double MOS3tCbd; /* temperature corrected B-D Capacitance */ double MOS3tCbs; /* temperature corrected B-S Capacitance */ double MOS3tCj; /* temperature corrected Bulk bottom Capacitance */ double MOS3tCjsw; /* temperature corrected Bulk side Capacitance */ double MOS3tBulkPot; /* temperature corrected Bulk potential */ double MOS3tDepCap; /* temperature adjusted transition point in */ /* the cureve matching Fc * Vj */ double MOS3tVbi; /* temperature adjusted Vbi */ double MOS3icVBS; /* initial condition B-S voltage */ double MOS3icVDS; /* initial condition D-S voltage */ double MOS3icVGS; /* initial condition G-S voltage */ double MOS3von; double MOS3vdsat; double MOS3sourceVcrit; /* vcrit for pos. vds */ double MOS3drainVcrit; /* vcrit for neg. vds */ double MOS3cd; double MOS3cbs; double MOS3cbd; double MOS3gmbs; double MOS3gm; double MOS3gds; double MOS3gbd; double MOS3gbs; double MOS3capbd; double MOS3capbs; double MOS3Cbd; double MOS3Cbdsw; double MOS3Cbs; double MOS3Cbssw; double MOS3f2d; double MOS3f3d; double MOS3f4d; double MOS3f2s; double MOS3f3s; double MOS3f4s; int MOS3mode; /* device mode : 1 = normal, -1 = inverse */ unsigned MOS3off :1;/* non-zero to indicate device is off for dc analysis*/ unsigned MOS3tempGiven :1; /* instance temperature specified */ unsigned MOS3dtempGiven :1; /* instance temperature difference specified */ unsigned MOS3mGiven :1; unsigned MOS3lGiven :1; unsigned MOS3wGiven :1; unsigned MOS3drainAreaGiven :1; unsigned MOS3sourceAreaGiven :1; unsigned MOS3drainSquaresGiven :1; unsigned MOS3sourceSquaresGiven :1; unsigned MOS3drainPerimiterGiven :1; unsigned MOS3sourcePerimiterGiven :1; unsigned MOS3dNodePrimeSet :1; unsigned MOS3sNodePrimeSet :1; unsigned MOS3icVBSGiven :1; unsigned MOS3icVDSGiven :1; unsigned MOS3icVGSGiven :1; unsigned MOS3vonGiven :1; unsigned MOS3vdsatGiven :1; unsigned MOS3modeGiven :1; double *MOS3DdPtr; /* pointer to sparse matrix element at * (Drain node,drain node) */ double *MOS3GgPtr; /* pointer to sparse matrix element at * (gate node,gate node) */ double *MOS3SsPtr; /* pointer to sparse matrix element at * (source node,source node) */ double *MOS3BbPtr; /* pointer to sparse matrix element at * (bulk node,bulk node) */ double *MOS3DPdpPtr; /* pointer to sparse matrix element at * (drain prime node,drain prime node) */ double *MOS3SPspPtr; /* pointer to sparse matrix element at * (source prime node,source prime node) */ double *MOS3DdpPtr; /* pointer to sparse matrix element at * (drain node,drain prime node) */ double *MOS3GbPtr; /* pointer to sparse matrix element at * (gate node,bulk node) */ double *MOS3GdpPtr; /* pointer to sparse matrix element at * (gate node,drain prime node) */ double *MOS3GspPtr; /* pointer to sparse matrix element at * (gate node,source prime node) */ double *MOS3SspPtr; /* pointer to sparse matrix element at * (source node,source prime node) */ double *MOS3BdpPtr; /* pointer to sparse matrix element at * (bulk node,drain prime node) */ double *MOS3BspPtr; /* pointer to sparse matrix element at * (bulk node,source prime node) */ double *MOS3DPspPtr; /* pointer to sparse matrix element at * (drain prime node,source prime node) */ double *MOS3DPdPtr; /* pointer to sparse matrix element at * (drain prime node,drain node) */ double *MOS3BgPtr; /* pointer to sparse matrix element at * (bulk node,gate node) */ double *MOS3DPgPtr; /* pointer to sparse matrix element at * (drain prime node,gate node) */ double *MOS3SPgPtr; /* pointer to sparse matrix element at * (source prime node,gate node) */ double *MOS3SPsPtr; /* pointer to sparse matrix element at * (source prime node,source node) */ double *MOS3DPbPtr; /* pointer to sparse matrix element at * (drain prime node,bulk node) */ double *MOS3SPbPtr; /* pointer to sparse matrix element at * (source prime node,bulk node) */ double *MOS3SPdpPtr; /* pointer to sparse matrix element at * (source prime node,drain prime node) */ int MOS3senParmNo; /* parameter # for sensitivity use; set equal to 0 if neither length nor width of the mosfet is a design parameter */ unsigned MOS3sens_l :1; /* field which indicates whether length of the mosfet is a design parameter or not */ unsigned MOS3sens_w :1; /* field which indicates whether width of the mosfet is a design parameter or not */ unsigned MOS3senPertFlag :1; /* indictes whether the the parameter of the particular instance is to be perturbed */ double MOS3cgs; double MOS3cgd; double MOS3cgb; double *MOS3sens; #define MOS3senGdpr MOS3sens #define MOS3senGspr MOS3sens + 1 #define MOS3senCgs MOS3sens + 2 /* contains pertured values of cgs */ #define MOS3senCgd MOS3sens + 8 /* contains perturbed values of cgd*/ #define MOS3senCgb MOS3sens + 14 /* contains perturbed values of cgb*/ #define MOS3senCbd MOS3sens + 20 /* contains perturbed values of cbd*/ #define MOS3senCbs MOS3sens + 26 /* contains perturbed values of cbs*/ #define MOS3senGds MOS3sens + 32 /* contains perturbed values of gds*/ #define MOS3senGbs MOS3sens + 38 /* contains perturbed values of gbs*/ #define MOS3senGbd MOS3sens + 44 /* contains perturbed values of gbd*/ #define MOS3senGm MOS3sens + 50 /* contains perturbed values of gm*/ #define MOS3senGmbs MOS3sens + 56 /* contains perturbed values of gmbs*/ #define MOS3dphigs_dl MOS3sens + 62 #define MOS3dphigd_dl MOS3sens + 63 #define MOS3dphigb_dl MOS3sens + 64 #define MOS3dphibs_dl MOS3sens + 65 #define MOS3dphibd_dl MOS3sens + 66 #define MOS3dphigs_dw MOS3sens + 67 #define MOS3dphigd_dw MOS3sens + 68 #define MOS3dphigb_dw MOS3sens + 69 #define MOS3dphibs_dw MOS3sens + 70 #define MOS3dphibd_dw MOS3sens + 71 /* distortion stuff */ /* * naming convention: * x = vgs * y = vbs * z = vds * cdr = cdrain */ #define MOS3NDCOEFFS 30 #ifndef NODISTO double MOS3dCoeffs[MOS3NDCOEFFS]; #else /* NODISTO */ double *MOS3dCoeffs; #endif /* NODISTO */ #ifndef CONFIG #define capbs2 MOS3dCoeffs[0] #define capbs3 MOS3dCoeffs[1] #define capbd2 MOS3dCoeffs[2] #define capbd3 MOS3dCoeffs[3] #define gbs2 MOS3dCoeffs[4] #define gbs3 MOS3dCoeffs[5] #define gbd2 MOS3dCoeffs[6] #define gbd3 MOS3dCoeffs[7] #define capgb2 MOS3dCoeffs[8] #define capgb3 MOS3dCoeffs[9] #define cdr_x2 MOS3dCoeffs[10] #define cdr_y2 MOS3dCoeffs[11] #define cdr_z2 MOS3dCoeffs[12] #define cdr_xy MOS3dCoeffs[13] #define cdr_yz MOS3dCoeffs[14] #define cdr_xz MOS3dCoeffs[15] #define cdr_x3 MOS3dCoeffs[16] #define cdr_y3 MOS3dCoeffs[17] #define cdr_z3 MOS3dCoeffs[18] #define cdr_x2z MOS3dCoeffs[19] #define cdr_x2y MOS3dCoeffs[20] #define cdr_y2z MOS3dCoeffs[21] #define cdr_xy2 MOS3dCoeffs[22] #define cdr_xz2 MOS3dCoeffs[23] #define cdr_yz2 MOS3dCoeffs[24] #define cdr_xyz MOS3dCoeffs[25] #define capgs2 MOS3dCoeffs[26] #define capgs3 MOS3dCoeffs[27] #define capgd2 MOS3dCoeffs[28] #define capgd3 MOS3dCoeffs[29] #endif /* end distortion coeffs. */ #ifndef NONOISE double MOS3nVar[NSTATVARS][MOS3NSRCS]; #else /* NONOISE */ double **MOS3nVar; #endif /* NONOISE */ } MOS3instance ; #define MOS3vbd MOS3states+ 0 #define MOS3vbs MOS3states+ 1 #define MOS3vgs MOS3states+ 2 #define MOS3vds MOS3states+ 3 /* meyer capacitances */ #define MOS3capgs MOS3states+ 4 /* gate-source capacitor value */ #define MOS3qgs MOS3states+ 5 /* gate-source capacitor charge */ #define MOS3cqgs MOS3states+ 6 /* gate-source capacitor current */ #define MOS3capgd MOS3states+ 7 /* gate-drain capacitor value */ #define MOS3qgd MOS3states+ 8 /* gate-drain capacitor charge */ #define MOS3cqgd MOS3states+ 9 /* gate-drain capacitor current */ #define MOS3capgb MOS3states+ 10/* gate-bulk capacitor value */ #define MOS3qgb MOS3states+ 11 /* gate-bulk capacitor charge */ #define MOS3cqgb MOS3states+ 12 /* gate-bulk capacitor current */ /* diode capacitances */ #define MOS3qbd MOS3states+ 13 /* bulk-drain capacitor charge */ #define MOS3cqbd MOS3states+ 14 /* bulk-drain capacitor current */ #define MOS3qbs MOS3states+ 15 /* bulk-source capacitor charge */ #define MOS3cqbs MOS3states+ 16 /* bulk-source capacitor current */ #define MOS3NUMSTATES 17 #define MOS3sensxpgs MOS3states+17 /* charge sensitivities and their derivatives +18 for the derivatives - pointer to the beginning of the array */ #define MOS3sensxpgd MOS3states+19 #define MOS3sensxpgb MOS3states+21 #define MOS3sensxpbs MOS3states+23 #define MOS3sensxpbd MOS3states+25 #define MOS3numSenStates 10 /* per model data */ /* NOTE: parameters marked 'input - use xxxx' are paramters for * which a temperature correction is applied in MOS3temp, thus * the MOS3xxxx value in the per-instance structure should be used * instead in all calculations */ typedef struct sMOS3model { /* model structure for a resistor */ struct GENmodel gen; #define MOS3modType gen.GENmodType #define MOS3nextModel(inst) ((struct sMOS3model *)((inst)->gen.GENnextModel)) #define MOS3instances(inst) ((MOS3instance *)((inst)->gen.GENinstances)) #define MOS3modName gen.GENmodName int MOS3type; /* device type : 1 = nmos, -1 = pmos */ double MOS3tnom; /* temperature at which parameters measured */ double MOS3latDiff; double MOS3lengthAdjust; /* New parm: mask adjustment to length */ double MOS3widthNarrow; /* New parm to reduce effective width */ double MOS3widthAdjust; /* New parm: mask adjustment to width */ double MOS3delvt0; /* New parm: adjustment calculated vtO */ double MOS3jctSatCurDensity; /* input - use tSatCurDens*/ double MOS3jctSatCur; /* input - use tSatCur instead */ double MOS3drainResistance; double MOS3sourceResistance; double MOS3sheetResistance; double MOS3transconductance; /* input - use tTransconductance */ double MOS3gateSourceOverlapCapFactor; double MOS3gateDrainOverlapCapFactor; double MOS3gateBulkOverlapCapFactor; double MOS3oxideCapFactor; double MOS3vt0; /* input - use tVto */ double MOS3capBD; /* input - use tCbs */ double MOS3capBS; /* input - use tCbd */ double MOS3bulkCapFactor; /* input - use tCj */ double MOS3sideWallCapFactor; /* input - use tCjsw */ double MOS3bulkJctPotential; /* input - use tBulkPot */ double MOS3bulkJctBotGradingCoeff; double MOS3bulkJctSideGradingCoeff; double MOS3fwdCapDepCoeff; double MOS3phi; /* input - use tPhi */ double MOS3gamma; double MOS3substrateDoping; int MOS3gateType; double MOS3surfaceStateDensity; double MOS3oxideThickness; double MOS3surfaceMobility; /* input - use tSurfMob */ double MOS3eta; double MOS3junctionDepth; double MOS3coeffDepLayWidth; /* xd */ double MOS3narrowFactor; /* delta */ double MOS3delta; /* input delta */ double MOS3fastSurfaceStateDensity; /* nfs */ double MOS3theta; /* theta */ double MOS3maxDriftVel; /* vmax */ double MOS3alpha; /* alpha */ double MOS3kappa; /* kappa */ double MOS3fNcoef; double MOS3fNexp; unsigned MOS3typeGiven :1; unsigned MOS3latDiffGiven :1; unsigned MOS3lengthAdjustGiven :1; unsigned MOS3widthNarrowGiven :1; unsigned MOS3widthAdjustGiven :1; unsigned MOS3delvt0Given :1; unsigned MOS3jctSatCurDensityGiven :1; unsigned MOS3jctSatCurGiven :1; unsigned MOS3drainResistanceGiven :1; unsigned MOS3sourceResistanceGiven :1; unsigned MOS3sheetResistanceGiven :1; unsigned MOS3transconductanceGiven :1; unsigned MOS3gateSourceOverlapCapFactorGiven :1; unsigned MOS3gateDrainOverlapCapFactorGiven :1; unsigned MOS3gateBulkOverlapCapFactorGiven :1; unsigned MOS3vt0Given :1; unsigned MOS3capBDGiven :1; unsigned MOS3capBSGiven :1; unsigned MOS3bulkCapFactorGiven :1; unsigned MOS3sideWallCapFactorGiven :1; unsigned MOS3bulkJctPotentialGiven :1; unsigned MOS3bulkJctBotGradingCoeffGiven :1; unsigned MOS3bulkJctSideGradingCoeffGiven :1; unsigned MOS3fwdCapDepCoeffGiven :1; unsigned MOS3phiGiven :1; unsigned MOS3gammaGiven :1; unsigned MOS3substrateDopingGiven :1; unsigned MOS3gateTypeGiven :1; unsigned MOS3surfaceStateDensityGiven :1; unsigned MOS3oxideThicknessGiven :1; unsigned MOS3surfaceMobilityGiven :1; unsigned MOS3etaGiven :1; unsigned MOS3junctionDepthGiven :1; unsigned MOS3deltaGiven :1; /* delta */ unsigned MOS3fastSurfaceStateDensityGiven :1; /* nfs */ unsigned MOS3thetaGiven :1; /* theta */ unsigned MOS3maxDriftVelGiven :1; /* vmax */ unsigned MOS3kappaGiven :1; /* kappa */ unsigned MOS3tnomGiven :1; /* Tnom was given? */ unsigned MOS3fNcoefGiven :1; unsigned MOS3fNexpGiven :1; } MOS3model; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ /* device parameters */ enum { MOS3_W = 1, MOS3_L, MOS3_AS, MOS3_AD, MOS3_PS, MOS3_PD, MOS3_NRS, MOS3_NRD, MOS3_OFF, MOS3_IC, MOS3_IC_VBS, MOS3_IC_VDS, MOS3_IC_VGS, MOS3_W_SENS, MOS3_L_SENS, MOS3_CB, MOS3_CG, MOS3_CS, MOS3_POWER, MOS3_CGS, MOS3_CGD, MOS3_DNODE, MOS3_GNODE, MOS3_SNODE, MOS3_BNODE, MOS3_DNODEPRIME, MOS3_SNODEPRIME, MOS3_SOURCECONDUCT, MOS3_DRAINCONDUCT, MOS3_VON, MOS3_VDSAT, MOS3_SOURCEVCRIT, MOS3_DRAINVCRIT, MOS3_CD, MOS3_CBS, MOS3_CBD, MOS3_GMBS, MOS3_GM, MOS3_GDS, MOS3_GBD, MOS3_GBS, MOS3_CAPBD, MOS3_CAPBS, MOS3_CAPZEROBIASBD, MOS3_CAPZEROBIASBDSW, MOS3_CAPZEROBIASBS, MOS3_CAPZEROBIASBSSW, MOS3_VBD, MOS3_VBS, MOS3_VGS, MOS3_VDS, MOS3_CAPGS, MOS3_QGS, MOS3_CQGS, MOS3_CAPGD, MOS3_QGD, MOS3_CQGD, MOS3_CAPGB, MOS3_QGB, MOS3_CQGB, MOS3_QBD, MOS3_CQBD, MOS3_QBS, MOS3_CQBS, MOS3_W_SENS_REAL, MOS3_W_SENS_IMAG, MOS3_W_SENS_MAG, MOS3_W_SENS_PH, MOS3_W_SENS_CPLX, MOS3_L_SENS_REAL, MOS3_L_SENS_IMAG, MOS3_L_SENS_MAG, MOS3_L_SENS_PH, MOS3_L_SENS_CPLX, MOS3_W_SENS_DC, MOS3_L_SENS_DC, MOS3_TEMP, MOS3_SOURCERESIST, MOS3_DRAINRESIST, MOS3_M, MOS3_DTEMP, }; /* model parameters */ enum { MOS3_MOD_VTO = 101, MOS3_MOD_KP, MOS3_MOD_GAMMA, MOS3_MOD_PHI, MOS3_MOD_RD, MOS3_MOD_RS, MOS3_MOD_CBD, MOS3_MOD_CBS, MOS3_MOD_IS, MOS3_MOD_PB, MOS3_MOD_CGSO, MOS3_MOD_CGDO, MOS3_MOD_CGBO, MOS3_MOD_RSH, MOS3_MOD_CJ, MOS3_MOD_MJ, MOS3_MOD_CJSW, MOS3_MOD_MJSW, MOS3_MOD_JS, MOS3_MOD_TOX, MOS3_MOD_LD, MOS3_MOD_U0, MOS3_MOD_FC, MOS3_MOD_NSUB, MOS3_MOD_TPG, MOS3_MOD_NSS, MOS3_MOD_ETA, MOS3_MOD_DELTA, MOS3_MOD_NFS, MOS3_MOD_THETA, MOS3_MOD_VMAX, MOS3_MOD_KAPPA, MOS3_MOD_NMOS, MOS3_MOD_PMOS, MOS3_MOD_XJ, MOS3_MOD_UEXP, MOS3_MOD_NEFF, MOS3_MOD_XD, MOS3_MOD_ALPHA, MOS3_DELTA, MOS3_MOD_TNOM, MOS3_MOD_KF, MOS3_MOD_AF, MOS3_MOD_TYPE, MOS3_MOD_XL, MOS3_MOD_WD, MOS3_MOD_XW, MOS3_MOD_DELVTO, }; /* device questions */ /* model questions */ #include "mos3ext.h" #endif /*MOS3*/ tmpk8ny_4pz/src/spicelib/devices/mos3/mos3dist.c0000644000175000017500000007716013546075722021770 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos3defs.h" #include "ngspice/sperror.h" #include "ngspice/distodef.h" #include "ngspice/suffix.h" int MOS3disto(int mode, GENmodel *genmodel, CKTcircuit *ckt) /* assuming here that ckt->CKTomega has been initialised to * the correct value */ { MOS3model *model = (MOS3model *) genmodel; DISTOAN* job = (DISTOAN*) ckt->CKTcurJob; DpassStr pass; double r1h1x,i1h1x; double r1h1y,i1h1y; double r1h1z, i1h1z; double r1h2x, i1h2x; double r1h2y, i1h2y; double r1h2z, i1h2z; double r1hm2x,i1hm2x; double r1hm2y,i1hm2y; double r1hm2z, i1hm2z; double r2h11x,i2h11x; double r2h11y,i2h11y; double r2h11z, i2h11z; double r2h1m2x,i2h1m2x; double r2h1m2y,i2h1m2y; double r2h1m2z, i2h1m2z; double temp, itemp; MOS3instance *here; if (mode == D_SETUP) return(MOS3dSetup(genmodel,ckt)); if ((mode == D_TWOF1) || (mode == D_THRF1) || (mode == D_F1PF2) || (mode == D_F1MF2) || (mode == D_2F1MF2)) { /* loop through all the MOS3 models */ for( ; model != NULL; model = MOS3nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS3instances(model); here != NULL ; here=MOS3nextInstance(here)) { /* loading starts here */ switch (mode) { case D_TWOF1: /* x = vgs, y = vbs z = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MOS3gNode)) - *(job->r1H1ptr + (here->MOS3sNodePrime)); i1h1x = *(job->i1H1ptr + (here->MOS3gNode)) - *(job->i1H1ptr + (here->MOS3sNodePrime)); r1h1y = *(job->r1H1ptr + (here->MOS3bNode)) - *(job->r1H1ptr + (here->MOS3sNodePrime)); i1h1y = *(job->i1H1ptr + (here->MOS3bNode)) - *(job->i1H1ptr + (here->MOS3sNodePrime)); r1h1z = *(job->r1H1ptr + (here->MOS3dNodePrime)) - *(job->r1H1ptr + (here->MOS3sNodePrime)); i1h1z = *(job->i1H1ptr + (here->MOS3dNodePrime)) - *(job->i1H1ptr + (here->MOS3sNodePrime)); /* loading starts here */ /* loading cdrain term */ temp = DFn2F1(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z); itemp = DFi2F1(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z); *(ckt->CKTrhs + (here->MOS3dNodePrime)) -= temp; *(ckt->CKTirhs + (here->MOS3dNodePrime)) -= itemp; *(ckt->CKTrhs + (here->MOS3sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3sNodePrime)) += itemp; /* cdrain term over */ /* loading gbs term */ temp = D1n2F1(here->gbs2, r1h1y, i1h1y); itemp = D1i2F1(here->gbs2, r1h1y, i1h1y); *(ckt->CKTrhs + (here->MOS3bNode)) -= temp; *(ckt->CKTirhs + (here->MOS3bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3sNodePrime)) += itemp; /* gbs over */ /* loading gbd term */ temp = D1n2F1(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z); itemp = D1i2F1(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z); *(ckt->CKTrhs + (here->MOS3bNode)) -= temp; *(ckt->CKTirhs + (here->MOS3bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3dNodePrime)) += itemp; /* gbd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1i2F1(here->capgs2, r1h1x, i1h1x); itemp = ckt->CKTomega * D1n2F1(here->capgs2, r1h1x, i1h1x); *(ckt->CKTrhs + (here->MOS3gNode)) -= temp; *(ckt->CKTirhs + (here->MOS3gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3sNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1i2F1(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z); itemp = ckt->CKTomega * D1n2F1(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z); *(ckt->CKTrhs + (here->MOS3gNode)) -= temp; *(ckt->CKTirhs + (here->MOS3gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3dNodePrime)) += itemp; /* capgd over */ /* loading capgb term */ temp = -ckt->CKTomega * D1i2F1(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y); itemp = ckt->CKTomega * D1n2F1(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y); *(ckt->CKTrhs + (here->MOS3gNode)) -= temp; *(ckt->CKTirhs + (here->MOS3gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3bNode)) += temp; *(ckt->CKTirhs + (here->MOS3bNode)) += itemp; /* capgb over */ /* loading capbs term */ temp = -ckt->CKTomega * D1i2F1(here->capbs2, r1h1y, i1h1y); itemp = ckt->CKTomega * D1n2F1(here->capbs2, r1h1y, i1h1y); *(ckt->CKTrhs + (here->MOS3bNode)) -= temp; *(ckt->CKTirhs + (here->MOS3bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3sNodePrime)) += itemp; /* capbs over */ /* loading capbd term */ temp = -ckt->CKTomega * D1i2F1(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z); itemp = ckt->CKTomega * D1n2F1(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z); *(ckt->CKTrhs + (here->MOS3bNode)) -= temp; *(ckt->CKTirhs + (here->MOS3bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3dNodePrime)) += itemp; /* capbd over */ /* all done */ break; case D_THRF1: /* x = vgs, y = vbs z = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MOS3gNode)) - *(job->r1H1ptr + (here->MOS3sNodePrime)); i1h1x = *(job->i1H1ptr + (here->MOS3gNode)) - *(job->i1H1ptr + (here->MOS3sNodePrime)); r1h1y = *(job->r1H1ptr + (here->MOS3bNode)) - *(job->r1H1ptr + (here->MOS3sNodePrime)); i1h1y = *(job->i1H1ptr + (here->MOS3bNode)) - *(job->i1H1ptr + (here->MOS3sNodePrime)); r1h1z = *(job->r1H1ptr + (here->MOS3dNodePrime)) - *(job->r1H1ptr + (here->MOS3sNodePrime)); i1h1z = *(job->i1H1ptr + (here->MOS3dNodePrime)) - *(job->i1H1ptr + (here->MOS3sNodePrime)); r2h11x = *(job->r2H11ptr + (here->MOS3gNode)) - *(job->r2H11ptr + (here->MOS3sNodePrime)); i2h11x = *(job->i2H11ptr + (here->MOS3gNode)) - *(job->i2H11ptr + (here->MOS3sNodePrime)); r2h11y = *(job->r2H11ptr + (here->MOS3bNode)) - *(job->r2H11ptr + (here->MOS3sNodePrime)); i2h11y = *(job->i2H11ptr + (here->MOS3bNode)) - *(job->i2H11ptr + (here->MOS3sNodePrime)); r2h11z = *(job->r2H11ptr + (here->MOS3dNodePrime)) - *(job->r2H11ptr + (here->MOS3sNodePrime)); i2h11z = *(job->i2H11ptr + (here->MOS3dNodePrime)) - *(job->i2H11ptr + (here->MOS3sNodePrime)); /* loading starts here */ /* loading cdrain term */ temp = DFn3F1(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, here->cdr_x3, here->cdr_y3, here->cdr_z3, here->cdr_x2y, here->cdr_x2z, here->cdr_xy2, here->cdr_y2z, here->cdr_xz2, here->cdr_yz2, here->cdr_xyz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r2h11x, i2h11x, r2h11y, i2h11y, r2h11z, i2h11z); itemp = DFi3F1(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, here->cdr_x3, here->cdr_y3, here->cdr_z3, here->cdr_x2y, here->cdr_x2z, here->cdr_xy2, here->cdr_y2z, here->cdr_xz2, here->cdr_yz2, here->cdr_xyz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r2h11x, i2h11x, r2h11y, i2h11y, r2h11z, i2h11z); *(ckt->CKTrhs + (here->MOS3dNodePrime)) -= temp; *(ckt->CKTirhs + (here->MOS3dNodePrime)) -= itemp; *(ckt->CKTrhs + (here->MOS3sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3sNodePrime)) += itemp; /* cdrain term over */ /* loading gbs term */ temp = D1n3F1(here->gbs2, here->gbs3, r1h1y, i1h1y, r2h11y, i2h11y); itemp = D1i3F1(here->gbs2, here->gbs3, r1h1y, i1h1y, r2h11y, i2h11y); *(ckt->CKTrhs + (here->MOS3bNode)) -= temp; *(ckt->CKTirhs + (here->MOS3bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3sNodePrime)) += itemp; /* gbs over */ /* loading gbd term */ temp = D1n3F1(here->gbd2, here->gbd3, r1h1y - r1h1z, i1h1y - i1h1z, r2h11y - r2h11z, i2h11y - i2h11z); itemp = D1i3F1(here->gbd2, here->gbd3, r1h1y - r1h1z, i1h1y - i1h1z, r2h11y - r2h11z, i2h11y - i2h11z); *(ckt->CKTrhs + (here->MOS3bNode)) -= temp; *(ckt->CKTirhs + (here->MOS3bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3dNodePrime)) += itemp; /* gbd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1i3F1(here->capgs2, here->capgs3, r1h1x, i1h1x, r2h11x, i2h11x); itemp = ckt->CKTomega * D1n3F1(here->capgs2, here->capgs3, r1h1x, i1h1x, r2h11x, i2h11x); *(ckt->CKTrhs + (here->MOS3gNode)) -= temp; *(ckt->CKTirhs + (here->MOS3gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3sNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1i3F1(here->capgd2, here->capgd3, r1h1x - r1h1z, i1h1x - i1h1z, r2h11x - r2h11z, i2h11x - i2h11z); itemp = ckt->CKTomega * D1n3F1(here->capgd2, here->capgd3, r1h1x - r1h1z, i1h1x - i1h1z, r2h11x - r2h11z, i2h11x - i2h11z); *(ckt->CKTrhs + (here->MOS3gNode)) -= temp; *(ckt->CKTirhs + (here->MOS3gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3dNodePrime)) += itemp; /* capgd over */ /* loading capgb term */ temp = -ckt->CKTomega * D1i3F1(here->capgb2, here->capgb3, r1h1x - r1h1y, i1h1x - i1h1y, r2h11x - r2h11y, i2h11x - i2h11y); itemp = ckt->CKTomega * D1n3F1(here->capgb2, here->capgb3, r1h1x - r1h1y, i1h1x - i1h1y, r2h11x - r2h11y, i2h11x - i2h11y); *(ckt->CKTrhs + (here->MOS3gNode)) -= temp; *(ckt->CKTirhs + (here->MOS3gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3bNode)) += temp; *(ckt->CKTirhs + (here->MOS3bNode)) += itemp; /* capgb over */ /* loading capbs term */ temp = -ckt->CKTomega * D1i3F1(here->capbs2, here->capbs3, r1h1y, i1h1y, r2h11y, i2h11y); itemp = ckt->CKTomega * D1n3F1(here->capbs2, here->capbs3, r1h1y, i1h1y, r2h11y, i2h11y); *(ckt->CKTrhs + (here->MOS3bNode)) -= temp; *(ckt->CKTirhs + (here->MOS3bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3sNodePrime)) += itemp; /* capbs over */ /* loading capbd term */ temp = -ckt->CKTomega * D1i3F1(here->capbd2, here->capbd3, r1h1y - r1h1z, i1h1y - i1h1z, r2h11y - r2h11z, i2h11y - i2h11z); itemp = ckt->CKTomega * D1n3F1(here->capbd2, here->capbd3, r1h1y - r1h1z, i1h1y - i1h1z, r2h11y - r2h11z, i2h11y - i2h11z); *(ckt->CKTrhs + (here->MOS3bNode)) -= temp; *(ckt->CKTirhs + (here->MOS3bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3dNodePrime)) += itemp; /* capbd over */ /* all done */ break; case D_F1PF2: /* x = vgs, y = vbs z = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MOS3gNode)) - *(job->r1H1ptr + (here->MOS3sNodePrime)); i1h1x = *(job->i1H1ptr + (here->MOS3gNode)) - *(job->i1H1ptr + (here->MOS3sNodePrime)); r1h1y = *(job->r1H1ptr + (here->MOS3bNode)) - *(job->r1H1ptr + (here->MOS3sNodePrime)); i1h1y = *(job->i1H1ptr + (here->MOS3bNode)) - *(job->i1H1ptr + (here->MOS3sNodePrime)); r1h1z = *(job->r1H1ptr + (here->MOS3dNodePrime)) - *(job->r1H1ptr + (here->MOS3sNodePrime)); i1h1z = *(job->i1H1ptr + (here->MOS3dNodePrime)) - *(job->i1H1ptr + (here->MOS3sNodePrime)); r1h2x = *(job->r1H2ptr + (here->MOS3gNode)) - *(job->r1H2ptr + (here->MOS3sNodePrime)); i1h2x = *(job->i1H2ptr + (here->MOS3gNode)) - *(job->i1H2ptr + (here->MOS3sNodePrime)); r1h2y = *(job->r1H2ptr + (here->MOS3bNode)) - *(job->r1H2ptr + (here->MOS3sNodePrime)); i1h2y = *(job->i1H2ptr + (here->MOS3bNode)) - *(job->i1H2ptr + (here->MOS3sNodePrime)); r1h2z = *(job->r1H2ptr + (here->MOS3dNodePrime)) - *(job->r1H2ptr + (here->MOS3sNodePrime)); i1h2z = *(job->i1H2ptr + (here->MOS3dNodePrime)) - *(job->i1H2ptr + (here->MOS3sNodePrime)); /* loading starts here */ /* loading cdrain term */ temp = DFnF12(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1h2x, i1h2x, r1h2y, i1h2y, r1h2z, i1h2z); itemp = DFiF12(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1h2x, i1h2x, r1h2y, i1h2y, r1h2z, i1h2z); *(ckt->CKTrhs + (here->MOS3dNodePrime)) -= temp; *(ckt->CKTirhs + (here->MOS3dNodePrime)) -= itemp; *(ckt->CKTrhs + (here->MOS3sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3sNodePrime)) += itemp; /* cdrain term over */ /* loading gbs term */ temp = D1nF12(here->gbs2, r1h1y, i1h1y, r1h2y, i1h2y); itemp = D1iF12(here->gbs2, r1h1y, i1h1y, r1h2y, i1h2y); *(ckt->CKTrhs + (here->MOS3bNode)) -= temp; *(ckt->CKTirhs + (here->MOS3bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3sNodePrime)) += itemp; /* gbs over */ /* loading gbd term */ temp = D1nF12(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1h2y - r1h2z, i1h2y - i1h2z); itemp = D1iF12(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1h2y - r1h2z, i1h2y - i1h2z); *(ckt->CKTrhs + (here->MOS3bNode)) -= temp; *(ckt->CKTirhs + (here->MOS3bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3dNodePrime)) += itemp; /* gbd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1iF12(here->capgs2, r1h1x, i1h1x, r1h2x, i1h2x); itemp = ckt->CKTomega * D1nF12(here->capgs2, r1h1x, i1h1x, r1h2x, i1h2x); *(ckt->CKTrhs + (here->MOS3gNode)) -= temp; *(ckt->CKTirhs + (here->MOS3gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3sNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1iF12(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z, r1h2x - r1h2z, i1h2x - i1h2z); itemp = ckt->CKTomega * D1nF12(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z, r1h2x - r1h2z, i1h2x - i1h2z); *(ckt->CKTrhs + (here->MOS3gNode)) -= temp; *(ckt->CKTirhs + (here->MOS3gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3dNodePrime)) += itemp; /* capgd over */ /* loading capgb term */ temp = -ckt->CKTomega * D1iF12(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y, r1h2x - r1h2y, i1h2x - i1h2y); itemp = ckt->CKTomega * D1nF12(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y, r1h2x - r1h2y, i1h2x - i1h2y); *(ckt->CKTrhs + (here->MOS3gNode)) -= temp; *(ckt->CKTirhs + (here->MOS3gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3bNode)) += temp; *(ckt->CKTirhs + (here->MOS3bNode)) += itemp; /* capgb over */ /* loading capbs term */ temp = -ckt->CKTomega * D1iF12(here->capbs2, r1h1y, i1h1y, r1h2y, i1h2y); itemp = ckt->CKTomega * D1nF12(here->capbs2, r1h1y, i1h1y, r1h2y, i1h2y); *(ckt->CKTrhs + (here->MOS3bNode)) -= temp; *(ckt->CKTirhs + (here->MOS3bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3sNodePrime)) += itemp; /* capbs over */ /* loading capbd term */ temp = -ckt->CKTomega * D1iF12(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1h2y - r1h2z, i1h2y - i1h2z); itemp = ckt->CKTomega * D1nF12(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1h2y - r1h2z, i1h2y - i1h2z); *(ckt->CKTrhs + (here->MOS3bNode)) -= temp; *(ckt->CKTirhs + (here->MOS3bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3dNodePrime)) += itemp; /* capbd over */ /* all done */ break; case D_F1MF2: /* x = vgs, y = vbs z = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MOS3gNode)) - *(job->r1H1ptr + (here->MOS3sNodePrime)); i1h1x = *(job->i1H1ptr + (here->MOS3gNode)) - *(job->i1H1ptr + (here->MOS3sNodePrime)); r1h1y = *(job->r1H1ptr + (here->MOS3bNode)) - *(job->r1H1ptr + (here->MOS3sNodePrime)); i1h1y = *(job->i1H1ptr + (here->MOS3bNode)) - *(job->i1H1ptr + (here->MOS3sNodePrime)); r1h1z = *(job->r1H1ptr + (here->MOS3dNodePrime)) - *(job->r1H1ptr + (here->MOS3sNodePrime)); i1h1z = *(job->i1H1ptr + (here->MOS3dNodePrime)) - *(job->i1H1ptr + (here->MOS3sNodePrime)); r1hm2x = *(job->r1H2ptr + (here->MOS3gNode)) - *(job->r1H2ptr + (here->MOS3sNodePrime)); i1hm2x = -(*(job->i1H2ptr + (here->MOS3gNode)) - *(job->i1H2ptr + (here->MOS3sNodePrime))); r1hm2y = *(job->r1H2ptr + (here->MOS3bNode)) - *(job->r1H2ptr + (here->MOS3sNodePrime)); i1hm2y = -(*(job->i1H2ptr + (here->MOS3bNode)) - *(job->i1H2ptr + (here->MOS3sNodePrime))); r1hm2z = *(job->r1H2ptr + (here->MOS3dNodePrime)) - *(job->r1H2ptr + (here->MOS3sNodePrime)); i1hm2z = -(*(job->i1H2ptr + (here->MOS3dNodePrime)) - *(job->i1H2ptr + (here->MOS3sNodePrime))); /* loading starts here */ /* loading cdrain term */ temp = DFnF12(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1hm2x, i1hm2x, r1hm2y, i1hm2y, r1hm2z, i1hm2z); itemp = DFiF12(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1hm2x, i1hm2x, r1hm2y, i1hm2y, r1hm2z, i1hm2z); *(ckt->CKTrhs + (here->MOS3dNodePrime)) -= temp; *(ckt->CKTirhs + (here->MOS3dNodePrime)) -= itemp; *(ckt->CKTrhs + (here->MOS3sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3sNodePrime)) += itemp; /* cdrain term over */ /* loading gbs term */ temp = D1nF12(here->gbs2, r1h1y, i1h1y, r1hm2y, i1hm2y); itemp = D1iF12(here->gbs2, r1h1y, i1h1y, r1hm2y, i1hm2y); *(ckt->CKTrhs + (here->MOS3bNode)) -= temp; *(ckt->CKTirhs + (here->MOS3bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3sNodePrime)) += itemp; /* gbs over */ /* loading gbd term */ temp = D1nF12(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z); itemp = D1iF12(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z); *(ckt->CKTrhs + (here->MOS3bNode)) -= temp; *(ckt->CKTirhs + (here->MOS3bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3dNodePrime)) += itemp; /* gbd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1iF12(here->capgs2, r1h1x, i1h1x, r1hm2x, i1hm2x); itemp = ckt->CKTomega * D1nF12(here->capgs2, r1h1x, i1h1x, r1hm2x, i1hm2x); *(ckt->CKTrhs + (here->MOS3gNode)) -= temp; *(ckt->CKTirhs + (here->MOS3gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3sNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1iF12(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z, r1hm2x - r1hm2z, i1hm2x - i1hm2z); itemp = ckt->CKTomega * D1nF12(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z, r1hm2x - r1hm2z, i1hm2x - i1hm2z); *(ckt->CKTrhs + (here->MOS3gNode)) -= temp; *(ckt->CKTirhs + (here->MOS3gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3dNodePrime)) += itemp; /* capgd over */ /* loading capgb term */ temp = -ckt->CKTomega * D1iF12(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y); itemp = ckt->CKTomega * D1nF12(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y); *(ckt->CKTrhs + (here->MOS3gNode)) -= temp; *(ckt->CKTirhs + (here->MOS3gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3bNode)) += temp; *(ckt->CKTirhs + (here->MOS3bNode)) += itemp; /* capgb over */ /* loading capbs term */ temp = -ckt->CKTomega * D1iF12(here->capbs2, r1h1y, i1h1y, r1hm2y, i1hm2y); itemp = ckt->CKTomega * D1nF12(here->capbs2, r1h1y, i1h1y, r1hm2y, i1hm2y); *(ckt->CKTrhs + (here->MOS3bNode)) -= temp; *(ckt->CKTirhs + (here->MOS3bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3sNodePrime)) += itemp; /* capbs over */ /* loading capbd term */ temp = -ckt->CKTomega * D1iF12(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z); itemp = ckt->CKTomega * D1nF12(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z); *(ckt->CKTrhs + (here->MOS3bNode)) -= temp; *(ckt->CKTirhs + (here->MOS3bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3dNodePrime)) += itemp; /* capbd over */ /* all done */ break; case D_2F1MF2: /* x = vgs, y = vbs z = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MOS3gNode)) - *(job->r1H1ptr + (here->MOS3sNodePrime)); i1h1x = *(job->i1H1ptr + (here->MOS3gNode)) - *(job->i1H1ptr + (here->MOS3sNodePrime)); r1h1y = *(job->r1H1ptr + (here->MOS3bNode)) - *(job->r1H1ptr + (here->MOS3sNodePrime)); i1h1y = *(job->i1H1ptr + (here->MOS3bNode)) - *(job->i1H1ptr + (here->MOS3sNodePrime)); r1h1z = *(job->r1H1ptr + (here->MOS3dNodePrime)) - *(job->r1H1ptr + (here->MOS3sNodePrime)); i1h1z = *(job->i1H1ptr + (here->MOS3dNodePrime)) - *(job->i1H1ptr + (here->MOS3sNodePrime)); r1hm2x = *(job->r1H2ptr + (here->MOS3gNode)) - *(job->r1H2ptr + (here->MOS3sNodePrime)); i1hm2x = -(*(job->i1H2ptr + (here->MOS3gNode)) - *(job->i1H2ptr + (here->MOS3sNodePrime))); r1hm2y = *(job->r1H2ptr + (here->MOS3bNode)) - *(job->r1H2ptr + (here->MOS3sNodePrime)); i1hm2y = -(*(job->i1H2ptr + (here->MOS3bNode)) - *(job->i1H2ptr + (here->MOS3sNodePrime))); r1hm2z = *(job->r1H2ptr + (here->MOS3dNodePrime)) - *(job->r1H2ptr + (here->MOS3sNodePrime)); i1hm2z = -(*(job->i1H2ptr + (here->MOS3dNodePrime)) - *(job->i1H2ptr + (here->MOS3sNodePrime))); r2h11x = *(job->r1H1ptr + (here->MOS3gNode)) - *(job->r1H1ptr + (here->MOS3sNodePrime)); i2h11x = *(job->i1H1ptr + (here->MOS3gNode)) - *(job->i1H1ptr + (here->MOS3sNodePrime)); r2h11y = *(job->r1H1ptr + (here->MOS3bNode)) - *(job->r1H1ptr + (here->MOS3sNodePrime)); i2h11y = *(job->i1H1ptr + (here->MOS3bNode)) - *(job->i1H1ptr + (here->MOS3sNodePrime)); r2h11z = *(job->r1H1ptr + (here->MOS3dNodePrime)) - *(job->r1H1ptr + (here->MOS3sNodePrime)); i2h11z = *(job->i1H1ptr + (here->MOS3dNodePrime)) - *(job->i1H1ptr + (here->MOS3sNodePrime)); r2h1m2x = *(job->r2H1m2ptr + (here->MOS3gNode)) - *(job->r2H1m2ptr + (here->MOS3sNodePrime)); i2h1m2x = *(job->i2H1m2ptr + (here->MOS3gNode)) - *(job->i2H1m2ptr + (here->MOS3sNodePrime)); r2h1m2y = *(job->r2H1m2ptr + (here->MOS3bNode)) - *(job->r2H1m2ptr + (here->MOS3sNodePrime)); i2h1m2y = *(job->i2H1m2ptr + (here->MOS3bNode)) - *(job->i2H1m2ptr + (here->MOS3sNodePrime)); r2h1m2z = *(job->r2H1m2ptr + (here->MOS3dNodePrime)) - *(job->r2H1m2ptr + (here->MOS3sNodePrime)); i2h1m2z = *(job->i2H1m2ptr + (here->MOS3dNodePrime)) - *(job->i2H1m2ptr + (here->MOS3sNodePrime)); /* loading starts here */ /* loading cdrain term */ pass.cxx = here->cdr_x2; pass.cyy = here->cdr_y2; pass.czz = here->cdr_z2; pass.cxy = here->cdr_xy; pass.cyz = here->cdr_yz; pass.cxz = here->cdr_xz; pass.cxxx = here->cdr_x3; pass.cyyy = here->cdr_y3; pass.czzz = here->cdr_z3; pass.cxxy = here->cdr_x2y; pass.cxxz = here->cdr_x2z; pass.cxyy = here->cdr_xy2; pass.cyyz = here->cdr_y2z; pass.cxzz = here->cdr_xz2; pass.cyzz = here->cdr_yz2; pass.cxyz = here->cdr_xyz; pass.r1h1x = r1h1x; pass.i1h1x = i1h1x; pass.r1h1y = r1h1y; pass.i1h1y = i1h1y; pass.r1h1z = r1h1z; pass.i1h1z = i1h1z; pass.r1h2x = r1hm2x; pass.i1h2x = i1hm2x; pass.r1h2y = r1hm2y; pass.i1h2y = i1hm2y; pass.r1h2z = r1hm2z; pass.i1h2z = i1hm2z; pass.r2h11x = r2h11x; pass.i2h11x = i2h11x; pass.r2h11y = r2h11y; pass.i2h11y = i2h11y; pass.r2h11z = r2h11z; pass.i2h11z = i2h11z; pass.h2f1f2x = r2h1m2x; pass.ih2f1f2x = i2h1m2x; pass.h2f1f2y = r2h1m2y; pass.ih2f1f2y = i2h1m2y; pass.h2f1f2z = r2h1m2z; pass.ih2f1f2z = i2h1m2z; temp = DFn2F12(&pass); itemp = DFi2F12(&pass); *(ckt->CKTrhs + (here->MOS3dNodePrime)) -= temp; *(ckt->CKTirhs + (here->MOS3dNodePrime)) -= itemp; *(ckt->CKTrhs + (here->MOS3sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3sNodePrime)) += itemp; /* cdrain term over */ /* loading gbs term */ temp = D1n2F12(here->gbs2, here->gbs3, r1h1y, i1h1y, r1hm2y, i1hm2y, r2h11y, i2h11y, r2h1m2y, i2h1m2y); itemp = D1i2F12(here->gbs2, here->gbs3, r1h1y, i1h1y, r1hm2y, i1hm2y, r2h11y, i2h11y, r2h1m2y, i2h1m2y); *(ckt->CKTrhs + (here->MOS3bNode)) -= temp; *(ckt->CKTirhs + (here->MOS3bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3sNodePrime)) += itemp; /* gbs over */ /* loading gbd term */ temp = D1n2F12(here->gbd2, here->gbd3, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z, r2h11y - r2h11z, i2h11y - i2h11z, r2h1m2y - r2h1m2z, i2h1m2y - i2h1m2z); itemp = D1i2F12(here->gbd2, here->gbd3, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z, r2h11y - r2h11z, i2h11y - i2h11z, r2h1m2y - r2h1m2z, i2h1m2y - i2h1m2z); *(ckt->CKTrhs + (here->MOS3bNode)) -= temp; *(ckt->CKTirhs + (here->MOS3bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3dNodePrime)) += itemp; /* gbd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1i2F12(here->capgs2, here->capgs3, r1h1x, i1h1x, r1hm2x, i1hm2x, r2h11x, i2h11x, r2h1m2x, i2h1m2x); itemp = ckt->CKTomega * D1n2F12(here->capgs2, here->capgs3, r1h1x, i1h1x, r1hm2x, i1hm2x, r2h11x, i2h11x, r2h1m2x, i2h1m2x); *(ckt->CKTrhs + (here->MOS3gNode)) -= temp; *(ckt->CKTirhs + (here->MOS3gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3sNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1i2F12(here->capgd2, here->capgd3, r1h1x - r1h1z, i1h1x - i1h1z, r1hm2x - r1hm2z, i1hm2x - i1hm2z, r2h11x - r2h11z, i2h11x - i2h11z, r2h1m2x - r2h1m2z, i2h1m2x - i2h1m2z); itemp = ckt->CKTomega * D1n2F12(here->capgd2, here->capgd3, r1h1x - r1h1z, i1h1x - i1h1z, r1hm2x - r1hm2z, i1hm2x - i1hm2z, r2h11x - r2h11z, i2h11x - i2h11z, r2h1m2x - r2h1m2z, i2h1m2x - i2h1m2z); *(ckt->CKTrhs + (here->MOS3gNode)) -= temp; *(ckt->CKTirhs + (here->MOS3gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3dNodePrime)) += itemp; /* capgd over */ /* loading capgb term */ temp = -ckt->CKTomega * D1i2F12(here->capgb2, here->capgb3, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y, r2h11x - r2h11y, i2h11x - i2h11y, r2h1m2x - r2h1m2y, i2h1m2x - i2h1m2y); itemp = ckt->CKTomega * D1n2F12(here->capgb2, here->capgb3, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y, r2h11x - r2h11y, i2h11x - i2h11y, r2h1m2x - r2h1m2y, i2h1m2x - i2h1m2y); *(ckt->CKTrhs + (here->MOS3gNode)) -= temp; *(ckt->CKTirhs + (here->MOS3gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3bNode)) += temp; *(ckt->CKTirhs + (here->MOS3bNode)) += itemp; /* capgb over */ /* loading capbs term */ temp = -ckt->CKTomega * D1i2F12(here->capbs2, here->capbs3, r1h1y, i1h1y, r1hm2y, i1hm2y, r2h11y, i2h11y, r2h1m2y, i2h1m2y); itemp = ckt->CKTomega * D1n2F12(here->capbs2, here->capbs3, r1h1y, i1h1y, r1hm2y, i1hm2y, r2h11y, i2h11y, r2h1m2y, i2h1m2y); *(ckt->CKTrhs + (here->MOS3bNode)) -= temp; *(ckt->CKTirhs + (here->MOS3bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3sNodePrime)) += itemp; /* capbs over */ /* loading capbd term */ temp = -ckt->CKTomega * D1i2F12(here->capbd2, here->capbd3, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z, r2h11y - r2h11z, i2h11y - i2h11z, r2h1m2y - r2h1m2z, i2h1m2y - i2h1m2z); itemp = ckt->CKTomega * D1n2F12(here->capbd2, here->capbd3, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z, r2h11y - r2h11z, i2h11y - i2h11z, r2h1m2y - r2h1m2z, i2h1m2y - i2h1m2z); *(ckt->CKTrhs + (here->MOS3bNode)) -= temp; *(ckt->CKTirhs + (here->MOS3bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS3dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS3dNodePrime)) += itemp; /* capbd over */ /* all done */ break; default: ; } } } return(OK); } else return(E_BADPARM); } tmpk8ny_4pz/src/spicelib/devices/mos3/mos3dset.c0000644000175000017500000010056413546075722021757 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "mos3defs.h" #include "ngspice/trandefs.h" #include "ngspice/distodef.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS3dSetup(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current value into the * sparse matrix previously provided */ { MOS3model *model = (MOS3model *)inModel; MOS3instance *here; double Beta; double DrainSatCur; double EffectiveLength; double EffectiveWidth; double GateBulkOverlapCap; double GateDrainOverlapCap; double GateSourceOverlapCap; double OxideCap; double SourceSatCur; double arg; double cdrain; double evbs; double sarg; double sargsw; double lvgs; double vbd; double vbs; double vds; double vdsat; double vgb; double vgd; double vgs; double von; double lcapgs2,lcapgs3; /* total gate-source capacitance */ double lcapgd2,lcapgd3; /* total gate-drain capacitance */ double lcapgb2,lcapgb3; /* total gate-bulk capacitance */ double lgbs, lgbs2, lgbs3; double lgbd, lgbd2, lgbd3; double gm2, gb2, gds2, gmb, gmds, gbds; double gm3, gb3, gds3, gm2ds, gm2b, gb2ds, gbds2, gmb2, gmds2, gmbds; double lcapbd, lcapbd2, lcapbd3; double lcapbs, lcapbs2, lcapbs3; double ebd; double vt; /* vt at instance temperature */ Dderivs d_cdrain; /* loop through all the MOS3 device models */ for( ; model != NULL; model = MOS3nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS3instances(model); here != NULL ; here=MOS3nextInstance(here)) { vt = CONSTKoverQ * here->MOS3temp; /* first, we compute a few useful values - these could be * pre-computed, but for historical reasons are still done * here. They may be moved at the expense of instance size */ EffectiveWidth=here->MOS3w-2*model->MOS3widthNarrow+ model->MOS3widthAdjust; EffectiveLength=here->MOS3l - 2*model->MOS3latDiff+ model->MOS3lengthAdjust; if( (here->MOS3tSatCurDens == 0) || (here->MOS3drainArea == 0) || (here->MOS3sourceArea == 0)) { DrainSatCur = here->MOS3m * here->MOS3tSatCur; SourceSatCur = here->MOS3m * here->MOS3tSatCur; } else { DrainSatCur = here->MOS3tSatCurDens * here->MOS3m * here->MOS3drainArea; SourceSatCur = here->MOS3tSatCurDens * here->MOS3m * here->MOS3sourceArea; } GateSourceOverlapCap = model->MOS3gateSourceOverlapCapFactor * here->MOS3m * EffectiveWidth; GateDrainOverlapCap = model->MOS3gateDrainOverlapCapFactor * here->MOS3m * EffectiveWidth; GateBulkOverlapCap = model->MOS3gateBulkOverlapCapFactor * here->MOS3m * EffectiveLength; Beta = here->MOS3tTransconductance * here->MOS3m * EffectiveWidth/EffectiveLength; OxideCap = model->MOS3oxideCapFactor * EffectiveLength * here->MOS3m * EffectiveWidth; /* * ok - now to do the start-up operations * * we must get values for vbs, vds, and vgs from somewhere * so we either predict them or recover them from last iteration * These are the two most common cases - either a prediction * step or the general iteration step and they * share some code, so we put them first - others later on */ /* general iteration */ vbs = model->MOS3type * ( *(ckt->CKTrhsOld+here->MOS3bNode) - *(ckt->CKTrhsOld+here->MOS3sNodePrime)); vgs = model->MOS3type * ( *(ckt->CKTrhsOld+here->MOS3gNode) - *(ckt->CKTrhsOld+here->MOS3sNodePrime)); vds = model->MOS3type * ( *(ckt->CKTrhsOld+here->MOS3dNodePrime) - *(ckt->CKTrhsOld+here->MOS3sNodePrime)); /* now some common crunching for some more useful quantities */ /* * now all the preliminaries are over - we can start doing the * real work */ vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; /* bulk-source and bulk-drain doides * here we just evaluate the ideal diode current and the * correspoinding derivative (conductance). */ if(vbs <= 0) { lgbs = SourceSatCur/vt; lgbs += ckt->CKTgmin; lgbs2 = lgbs3 = 0; } else { evbs = exp(MIN(MAX_EXP_ARG,vbs/vt)); lgbs = SourceSatCur*evbs/vt + ckt->CKTgmin; lgbs2 = model->MOS3type *0.5 * (lgbs - ckt->CKTgmin)/vt; lgbs3 = model->MOS3type *lgbs2/(vt*3); } if(vbd <= 0) { lgbd = DrainSatCur/vt; lgbd += ckt->CKTgmin; lgbd2 = lgbd3 = 0; } else { ebd = exp(MIN(MAX_EXP_ARG,vbd/vt)); lgbd = DrainSatCur*ebd/vt +ckt->CKTgmin; lgbd2 = model->MOS3type *0.5 * (lgbd - ckt->CKTgmin)/vt; lgbd3 = model->MOS3type *lgbd2/(vt*3); } /* now to determine whether the user was able to correctly * identify the source and drain of his device */ if(vds >= 0) { /* normal mode */ here->MOS3mode = 1; } else { /* inverse mode */ here->MOS3mode = -1; } { /* * subroutine moseq3(vds,vbs,vgs,gm,gds,gmbs, * qg,qc,qb,cggb,cgdb,cgsb,cbgb,cbdb,cbsb) */ /* * this routine evaluates the drain current, its derivatives and * the charges associated with the gate, channel and bulk * for mosfets based on semi-empirical equations */ /* common /mosarg/ vto,beta,gamma,phi,phib,cox,xnsub,xnfs,xd,xj,xld, 1 xlamda,uo,uexp,vbp,utra,vmax,xneff,xl,xw,vbi,von,vdsat,qspof, 2 beta0,beta1,cdrain,xqco,xqc,fnarrw,fshort,lev common /status/ omega,time,delta,delold(7),ag(7),vt,xni,egfet, 1 xmu,sfactr,mode,modedc,icalc,initf,method,iord,maxord,noncon, 2 iterno,itemno,nosolv,modac,ipiv,ivmflg,ipostp,iscrch,iofile common /knstnt/ twopi,xlog2,xlog10,root2,rad,boltz,charge,ctok, 1 gmin,reltol,abstol,vntol,trtol,chgtol,eps0,epssil,epsox, 2 pivtol,pivrel */ /* equivalence (xlamda,alpha),(vbp,theta),(uexp,eta),(utra,xkappa)*/ double coeff0 = 0.0631353e0; double coeff1 = 0.8013292e0; double coeff2 = -0.01110777e0; double oneoverxl; /* 1/effective length */ double eta; /* eta from model after length factor */ double phibs; /* phi - vbs */ double sqphbs; /* square root of phibs */ double sqphis; /* square root of phi */ double wps; double oneoverxj; /* 1/junction depth */ double xjonxl; /* junction depth/effective length */ double djonxj; double wponxj; double arga; double argb; double argc; double gammas; double fbodys; double fbody; double onfbdy; double qbonco; double vbix; double wconxj; double vth; double csonco; double cdonco; double vgsx; double onfg; double fgate; double us; double xn = 0.0; double vdsc; double onvdsc = 0.0; double vdsx; double cdnorm; double cdo; double fdrain = 0.0; double gdsat; double cdsat; double emax; double delxl; double dlonxl; double xlfact; double ondvt; double onxn; double wfact; double fshort; double lvds, lvbs, lvbd; Dderivs d_onxn, d_ondvt, d_wfact, d_MOS3gds; Dderivs d_emax, d_delxl, d_dlonxl, d_xlfact; Dderivs d_cdonco, d_fdrain, d_cdsat, d_gdsat; Dderivs d_vdsx, d_cdo, d_cdnorm, d_Beta, d_dummy; Dderivs d_vdsc, d_onvdsc, d_arga, d_argb; Dderivs d_onfg, d_fgate, d_us, d_vgsx; Dderivs d_von, d_xn, d_vth, d_onfbdy, d_qbonco, d_vbix; Dderivs d_argc, d_fshort, d_gammas, d_fbodys, d_fbody; Dderivs d_wps, d_wconxj, d_wponxj; Dderivs d_phibs, d_sqphbs; Dderivs d_p, d_q, d_r, d_zero, d_vdsat; /* * bypasses the computation of charges */ if (here->MOS3mode == 1) { lvgs = vgs; lvds = vds; lvbs = vbs; lvbd = vbd; } else { lvgs = vgd; lvds = -vds; lvbs = vbd; lvbd = vbs; } /* * reference cdrain equations to source and * charge equations to bulk */ d_p.value = 0.0; d_p.d1_p = 1.0; d_p.d1_q = 0.0; d_p.d1_r = 0.0; d_p.d2_p2 = 0.0; d_p.d2_q2 = 0.0; d_p.d2_r2 = 0.0; d_p.d2_pq = 0.0; d_p.d2_qr = 0.0; d_p.d2_pr = 0.0; d_p.d3_p3 = 0.0; d_p.d3_q3 = 0.0; d_p.d3_r3 = 0.0; d_p.d3_p2r = 0.0; d_p.d3_p2q = 0.0; d_p.d3_q2r = 0.0; d_p.d3_pq2 = 0.0; d_p.d3_pr2 = 0.0; d_p.d3_qr2 = 0.0; d_p.d3_pqr = 0.0; EqualDeriv(&d_q,&d_p); EqualDeriv(&d_r,&d_p); EqualDeriv(&d_zero,&d_p); d_q.d1_p = d_r.d1_p = d_zero.d1_p = 0.0; d_q.d1_q = d_r.d1_r = 1.0; vdsat = 0.0; EqualDeriv(&d_vdsat,&d_zero); oneoverxl = 1.0/EffectiveLength;/*const*/ eta = model->MOS3eta * 8.15e-22/(model->MOS3oxideCapFactor* EffectiveLength*EffectiveLength*EffectiveLength);/*const*/ /* *.....square root term */ if ( lvbs <= 0.0 ) { phibs = here->MOS3tPhi-lvbs; EqualDeriv(&d_phibs,&d_q); d_phibs.value = lvbs; TimesDeriv(&d_phibs,&d_phibs,-1.0); d_phibs.value += here->MOS3tPhi; sqphbs = sqrt(phibs); SqrtDeriv(&d_sqphbs,&d_phibs); } else { sqphis = sqrt(here->MOS3tPhi);/*const*/ /*sqphs3 = here->MOS3tPhi*sqphis;const*/ sqphbs = sqphis/(1.0+lvbs/ (here->MOS3tPhi+here->MOS3tPhi)); EqualDeriv(&d_sqphbs,&d_q); d_sqphbs.value = lvbs; TimesDeriv(&d_sqphbs,&d_sqphbs,1/(here->MOS3tPhi+here->MOS3tPhi)); d_sqphbs.value += 1.0; InvDeriv(&d_sqphbs,&d_sqphbs); TimesDeriv(&d_sqphbs,&d_sqphbs,sqphis); phibs = sqphbs*sqphbs; MultDeriv(&d_phibs,&d_sqphbs,&d_sqphbs); } /* *.....short channel effect factor */ if ( (model->MOS3junctionDepth != 0.0) && (model->MOS3coeffDepLayWidth != 0.0) ) { wps = model->MOS3coeffDepLayWidth*sqphbs; TimesDeriv(&d_wps,&d_sqphbs,model->MOS3coeffDepLayWidth); oneoverxj = 1.0/model->MOS3junctionDepth;/*const*/ xjonxl = model->MOS3junctionDepth*oneoverxl;/*const*/ djonxj = model->MOS3latDiff*oneoverxj;/*const*/ wponxj = wps*oneoverxj; TimesDeriv(&d_wponxj,&d_wps,oneoverxj); wconxj = coeff0+coeff1*wponxj+coeff2*wponxj*wponxj; TimesDeriv(&d_wconxj,&d_wponxj,coeff2); d_wconxj.value += coeff1; MultDeriv(&d_wconxj,&d_wconxj,&d_wponxj); d_wconxj.value += coeff0; arga = wconxj + djonxj; EqualDeriv(&d_arga,&d_wconxj); d_arga.value += djonxj; argc = wponxj/(1.0+wponxj); EqualDeriv(&d_argc,&d_wponxj); d_argc.value += 1.0; InvDeriv(&d_argc,&d_argc); MultDeriv(&d_argc,&d_argc,&d_wponxj); argb = sqrt(1.0-argc*argc); MultDeriv(&d_argb,&d_argc,&d_argc); TimesDeriv(&d_argb,&d_argb,-1.0); d_argb.value += 1.0; SqrtDeriv(&d_argb,&d_argb); fshort = 1.0-xjonxl*(arga*argb-djonxj); MultDeriv(&d_fshort,&d_arga,&d_argb); d_fshort.value -= djonxj; TimesDeriv(&d_fshort,&d_fshort,-xjonxl); d_fshort.value += 1.0; } else { fshort = 1.0; EqualDeriv(&d_fshort,&d_zero); d_fshort.value = 1.0; } /* *.....body effect */ gammas = model->MOS3gamma*fshort; TimesDeriv(&d_gammas,&d_fshort,model->MOS3gamma); fbodys = 0.5*gammas/(sqphbs+sqphbs); DivDeriv(&d_fbodys,&d_gammas,&d_sqphbs); TimesDeriv(&d_fbodys,&d_fbodys,0.25); fbody = fbodys+model->MOS3narrowFactor/EffectiveWidth; EqualDeriv(&d_fbody,&d_fbodys); d_fbody.value += fbody - fbodys; onfbdy = 1.0/(1.0+fbody); EqualDeriv(&d_onfbdy,&d_fbody); d_onfbdy.value += 1.0; InvDeriv(&d_onfbdy,&d_onfbdy); qbonco =gammas*sqphbs+model->MOS3narrowFactor*phibs/EffectiveWidth; EqualDeriv(&d_dummy,&d_phibs); TimesDeriv(&d_dummy,&d_dummy,model->MOS3narrowFactor*EffectiveWidth); MultDeriv(&d_qbonco,&d_gammas,&d_sqphbs); PlusDeriv(&d_qbonco,&d_qbonco,&d_dummy); /* *.....static feedback effect */ vbix = here->MOS3tVbi*model->MOS3type-eta*(lvds); EqualDeriv(&d_vbix,&d_r); d_vbix.value = vbix; d_vbix.d1_r = -eta; /* *.....threshold voltage */ vth = vbix+qbonco; PlusDeriv(&d_vth,&d_vbix,&d_qbonco); /* *.....joint weak inversion and strong inversion */ von = vth; EqualDeriv(&d_von,&d_vth); if ( model->MOS3fastSurfaceStateDensity != 0.0 ) { csonco = CHARGE*model->MOS3fastSurfaceStateDensity * 1e4 /*(cm**2/m**2)*/ *EffectiveLength*EffectiveWidth * here->MOS3m/OxideCap; /*const*/ cdonco = 0.5*qbonco/phibs; DivDeriv(&d_cdonco,&d_qbonco,&d_phibs); TimesDeriv(&d_cdonco,&d_cdonco,0.5); xn = 1.0+csonco+cdonco; EqualDeriv(&d_xn,&d_cdonco); d_xn.value += 1.0 + csonco; von = vth+vt*xn; TimesDeriv(&d_von,&d_xn,vt); PlusDeriv(&d_von,&d_von,&d_vth); } else { /* *.....cutoff region */ if ( lvgs <= von ) { cdrain = 0.0; EqualDeriv(&d_cdrain,&d_zero); goto innerline1000; } } /* *.....device is on */ vgsx = MAX(lvgs,von); if (lvgs >= von) { EqualDeriv(&d_vgsx,&d_p); d_vgsx.value = lvgs; } else { EqualDeriv(&d_vgsx,&d_von); } /* *.....mobility modulation by gate voltage */ onfg = 1.0+model->MOS3theta*(vgsx-vth); TimesDeriv(&d_onfg,&d_vth,-1.0); PlusDeriv(&d_onfg,&d_onfg,&d_vgsx); TimesDeriv(&d_onfg,&d_onfg,model->MOS3theta); d_onfg.value += 1.0; fgate = 1.0/onfg; InvDeriv(&d_fgate,&d_onfg); us = here->MOS3tSurfMob * 1e-4 /*(m**2/cm**2)*/ *fgate; TimesDeriv(&d_us,&d_fgate,here->MOS3tSurfMob * 1e-4); /* *.....saturation voltage */ vdsat = (vgsx-vth)*onfbdy; TimesDeriv(&d_vdsat,&d_vth, -1.0); PlusDeriv(&d_vdsat,&d_vdsat,&d_vgsx); MultDeriv(&d_vdsat,&d_vdsat,&d_onfbdy); if ( model->MOS3maxDriftVel <= 0.0 ) { } else { vdsc = EffectiveLength*model->MOS3maxDriftVel/us; InvDeriv(&d_vdsc,&d_us); TimesDeriv(&d_vdsc,&d_vdsc,EffectiveLength*model->MOS3maxDriftVel); onvdsc = 1.0/vdsc; InvDeriv(&d_onvdsc,&d_vdsc); arga = (vgsx-vth)*onfbdy; /* note arga = vdsat at this point */ EqualDeriv(&d_arga,&d_vdsat); argb = sqrt(arga*arga+vdsc*vdsc); MultDeriv(&d_dummy,&d_arga,&d_arga); MultDeriv(&d_argb,&d_vdsc,&d_vdsc); PlusDeriv(&d_argb,&d_argb,&d_dummy); SqrtDeriv(&d_argb,&d_argb); vdsat = arga+vdsc-argb; TimesDeriv(&d_vdsat,&d_argb,-1.0); PlusDeriv(&d_vdsat,&d_vdsat,&d_vdsc); PlusDeriv(&d_vdsat,&d_vdsat,&d_arga); } /* *.....current factors in linear region */ vdsx = MIN((lvds),vdsat); if (lvds < vdsat) { EqualDeriv(&d_vdsx,&d_r); d_vdsx.value = lvds; } else { EqualDeriv(&d_vdsx,&d_vdsat); } if ( vdsx == 0.0 ) goto line900; cdo = vgsx-vth-0.5*(1.0+fbody)*vdsx; EqualDeriv(&d_cdo,&d_fbody); d_cdo.value += 1.0; MultDeriv(&d_cdo,&d_cdo,&d_vdsx); TimesDeriv(&d_cdo,&d_cdo,0.5); PlusDeriv(&d_cdo,&d_cdo,&d_vth); TimesDeriv(&d_cdo,&d_cdo,-1.0); PlusDeriv(&d_cdo,&d_cdo,&d_vgsx); /* *.....normalized drain current */ cdnorm = cdo*vdsx; MultDeriv(&d_cdnorm,&d_cdo,&d_vdsx); /* *.....drain current without velocity saturation effect */ /* Beta is a constant till now */ Beta = Beta*fgate; TimesDeriv(&d_Beta,&d_fgate,Beta); cdrain = Beta*cdnorm; MultDeriv(&d_cdrain,&d_Beta,&d_cdnorm); /* *.....velocity saturation factor */ if ( model->MOS3maxDriftVel != 0.0 ) { fdrain = 1.0/(1.0+vdsx*onvdsc); MultDeriv(&d_fdrain,&d_vdsx,&d_onvdsc); d_fdrain.value += 1.0; InvDeriv(&d_fdrain,&d_fdrain); /* *.....drain current */ cdrain = fdrain*cdrain; MultDeriv(&d_cdrain,&d_cdrain,&d_fdrain); Beta = Beta*fdrain; MultDeriv(&d_Beta,&d_Beta,&d_fdrain); } /* *.....channel length modulation */ if ( (lvds) <= vdsat ) goto line700; if ( model->MOS3maxDriftVel == 0.0 ) goto line510; if (model->MOS3alpha == 0.0) goto line700; cdsat = cdrain; EqualDeriv(&d_cdsat,&d_cdrain); gdsat = cdsat*(1.0-fdrain)*onvdsc; TimesDeriv(&d_dummy,&d_fdrain,-1.0); d_dummy.value += 1.0; MultDeriv(&d_gdsat,&d_cdsat,&d_dummy); MultDeriv(&d_gdsat,&d_gdsat,&d_onvdsc); gdsat = MAX(1.0e-12,gdsat); if (gdsat == 1.0e-12) { EqualDeriv(&d_gdsat,&d_zero); d_gdsat.value = gdsat; } emax = cdsat*oneoverxl/gdsat; DivDeriv(&d_emax,&d_cdsat,&d_gdsat); TimesDeriv(&d_emax,&d_emax,oneoverxl); arga = 0.5*emax*model->MOS3alpha; TimesDeriv(&d_arga,&d_emax,0.5*model->MOS3alpha); argc = model->MOS3kappa*model->MOS3alpha;/*const*/ argb = sqrt(arga*arga+argc*((lvds)-vdsat)); TimesDeriv(&d_dummy,&d_vdsat,-1.0); d_dummy.value += lvds; d_dummy.d1_r += 1.0; TimesDeriv(&d_argb,&d_dummy,argc); MultDeriv(&d_dummy,&d_arga,&d_arga); PlusDeriv(&d_argb,&d_argb,&d_dummy); SqrtDeriv(&d_argb,&d_argb); delxl = argb-arga; TimesDeriv(&d_delxl,&d_arga,-1.0); PlusDeriv(&d_delxl,&d_argb,&d_delxl); goto line520; line510: delxl = sqrt(model->MOS3kappa*((lvds)-vdsat)*model->MOS3alpha); TimesDeriv(&d_delxl,&d_vdsat,-1.0); d_delxl.value += lvds; d_delxl.d1_r += 1.0; TimesDeriv(&d_delxl,&d_delxl,model->MOS3kappa*model->MOS3alpha); SqrtDeriv(&d_delxl,&d_delxl); /* *.....punch through approximation */ line520: if ( delxl > (0.5*EffectiveLength) ) { delxl = EffectiveLength - (EffectiveLength*EffectiveLength/ delxl*0.25); InvDeriv(&d_delxl,&d_delxl); TimesDeriv(&d_delxl,&d_delxl,-EffectiveLength*EffectiveLength*0.25); d_delxl.value += EffectiveLength; } /* *.....saturation region */ dlonxl = delxl*oneoverxl; TimesDeriv(&d_dlonxl,&d_delxl,oneoverxl); xlfact = 1.0/(1.0-dlonxl); TimesDeriv(&d_xlfact,&d_dlonxl,-1.0); d_xlfact.value += 1.0; InvDeriv(&d_xlfact,&d_xlfact); cdrain = cdrain*xlfact; MultDeriv(&d_cdrain,&d_cdrain,&d_xlfact); /* *.....finish strong inversion case */ line700: if ( lvgs < von ) { /* *.....weak inversion */ onxn = 1.0/xn; InvDeriv(&d_onxn,&d_xn); ondvt = onxn/vt; TimesDeriv(&d_ondvt,&d_onxn,1/vt); wfact = exp( (lvgs-von)*ondvt ); TimesDeriv(&d_wfact,&d_von,-1.0); d_wfact.value += lvgs; d_wfact.d1_p += 1.0; MultDeriv(&d_wfact,&d_wfact,&d_ondvt); ExpDeriv(&d_wfact,&d_wfact); cdrain = cdrain*wfact; MultDeriv(&d_cdrain,&d_cdrain,&d_wfact); } /* *.....charge computation */ goto innerline1000; /* *.....special case of vds = 0.0d0 */ line900: Beta = Beta*fgate; /* Beta is still a constant */ TimesDeriv(&d_Beta,&d_fgate,Beta); cdrain = 0.0; EqualDeriv(&d_cdrain,&d_zero); here->MOS3gds = Beta*(vgsx-vth); TimesDeriv(&d_MOS3gds,&d_vth,-1.0); PlusDeriv(&d_MOS3gds,&d_MOS3gds,&d_vgsx); MultDeriv(&d_MOS3gds,&d_MOS3gds,&d_Beta); if ( (model->MOS3fastSurfaceStateDensity != 0.0) && (lvgs < von) ) { here->MOS3gds *=exp((lvgs-von)/(vt*xn)); TimesDeriv(&d_dummy,&d_von,-1.0); d_dummy.value += lvgs; d_dummy.d1_p += 1.0; DivDeriv(&d_dummy,&d_dummy,&d_xn); TimesDeriv(&d_dummy,&d_dummy,1/vt); ExpDeriv(&d_dummy,&d_dummy); MultDeriv(&d_MOS3gds,&d_MOS3gds,&d_dummy); } d_cdrain.d1_r = d_MOS3gds.value; d_cdrain.d2_r2 = d_MOS3gds.d1_r; d_cdrain.d3_r3 = d_MOS3gds.d2_r2; innerline1000:; /* *.....done */ } /* * COMPUTE EQUIVALENT DRAIN CURRENT SOURCE */ /* * now we do the hard part of the bulk-drain and bulk-source * diode - we evaluate the non-linear capacitance and * charge * * the basic equations are not hard, but the implementation * is somewhat long in an attempt to avoid log/exponential * evaluations */ /* * charge storage elements * *.. bulk-drain and bulk-source depletion capacitances */ if (vbs < here->MOS3tDepCap){ arg=1-vbs/here->MOS3tBulkPot; /* * the following block looks somewhat long and messy, * but since most users use the default grading * coefficients of .5, and sqrt is MUCH faster than an * exp(log()) we use this special case code to buy time. * (as much as 10% of total job time!) */ if(model->MOS3bulkJctBotGradingCoeff == model->MOS3bulkJctSideGradingCoeff) { if(model->MOS3bulkJctBotGradingCoeff == .5) { sarg = sargsw = 1/sqrt(arg); } else { sarg = sargsw = exp(-model->MOS3bulkJctBotGradingCoeff* log(arg)); } } else { if(model->MOS3bulkJctBotGradingCoeff == .5) { sarg = 1/sqrt(arg); } else { sarg = exp(-model->MOS3bulkJctBotGradingCoeff* log(arg)); } if(model->MOS3bulkJctSideGradingCoeff == .5) { sargsw = 1/sqrt(arg); } else { sargsw =exp(-model->MOS3bulkJctSideGradingCoeff* log(arg)); } } lcapbs=here->MOS3Cbs*sarg+ here->MOS3Cbssw*sargsw; lcapbs2 = model->MOS3type*0.5/here->MOS3tBulkPot*( here->MOS3Cbs*model->MOS3bulkJctBotGradingCoeff* sarg/arg + here->MOS3Cbssw* model->MOS3bulkJctSideGradingCoeff*sargsw/arg); lcapbs3 = here->MOS3Cbs*sarg* model->MOS3bulkJctBotGradingCoeff* (model->MOS3bulkJctBotGradingCoeff+1); lcapbs3 += here->MOS3Cbssw*sargsw* model->MOS3bulkJctSideGradingCoeff* (model->MOS3bulkJctSideGradingCoeff+1); lcapbs3 = lcapbs3/(6*here->MOS3tBulkPot* here->MOS3tBulkPot*arg*arg); } else { /* *(ckt->CKTstate0 + here->MOS3qbs)= here->MOS3f4s + vbs*(here->MOS3f2s+vbs*(here->MOS3f3s/2));*/ lcapbs=here->MOS3f2s+here->MOS3f3s*vbs; lcapbs2 = 0.5*here->MOS3f3s; lcapbs3 = 0; } if (vbd < here->MOS3tDepCap) { arg=1-vbd/here->MOS3tBulkPot; /* * the following block looks somewhat long and messy, * but since most users use the default grading * coefficients of .5, and sqrt is MUCH faster than an * exp(log()) we use this special case code to buy time. * (as much as 10% of total job time!) */ if(model->MOS3bulkJctBotGradingCoeff == .5 && model->MOS3bulkJctSideGradingCoeff == .5) { sarg = sargsw = 1/sqrt(arg); } else { if(model->MOS3bulkJctBotGradingCoeff == .5) { sarg = 1/sqrt(arg); } else { sarg = exp(-model->MOS3bulkJctBotGradingCoeff* log(arg)); } if(model->MOS3bulkJctSideGradingCoeff == .5) { sargsw = 1/sqrt(arg); } else { sargsw =exp(-model->MOS3bulkJctSideGradingCoeff* log(arg)); } } lcapbd=here->MOS3Cbd*sarg+ here->MOS3Cbdsw*sargsw; lcapbd2 = model->MOS3type*0.5/here->MOS3tBulkPot*( here->MOS3Cbd*model->MOS3bulkJctBotGradingCoeff* sarg/arg + here->MOS3Cbdsw* model->MOS3bulkJctSideGradingCoeff*sargsw/arg); lcapbd3 = here->MOS3Cbd*sarg* model->MOS3bulkJctBotGradingCoeff* (model->MOS3bulkJctBotGradingCoeff+1); lcapbd3 += here->MOS3Cbdsw*sargsw* model->MOS3bulkJctSideGradingCoeff* (model->MOS3bulkJctSideGradingCoeff+1); lcapbd3 = lcapbd3/(6*here->MOS3tBulkPot* here->MOS3tBulkPot*arg*arg); } else { lcapbd=here->MOS3f2d + vbd * here->MOS3f3d; lcapbd2=0.5*here->MOS3f3d; lcapbd3=0; } /* * meyer's capacitor model */ /* * the meyer capacitance equations are in DEVqmeyer * these expressions are derived from those equations. * these expressions are incorrect; they assume just one * controlling variable for each charge storage element * while actually there are several; the MOS3 small * signal ac linear model is also wrong because it * ignores controlled capacitive elements. these can be * corrected (as can the linear ss ac model) if the * expressions for the charge are available */ { double phi; double cox; double vddif; double vddif1; double vddif2; double vgst; /* von, lvgs and vdsat have already been adjusted for possible source-drain interchange */ vgst = lvgs -von; phi = here->MOS3tPhi; cox = OxideCap; if (vgst <= -phi) { lcapgb2=lcapgb3=lcapgs2=lcapgs3=lcapgd2=lcapgd3=0; } else if (vgst <= -phi/2) { lcapgb2= -cox/(4*phi); lcapgb3=lcapgs2=lcapgs3=lcapgd2=lcapgd3=0; } else if (vgst <= 0) { lcapgb2= -cox/(4*phi); lcapgb3=lcapgs3=lcapgd2=lcapgd3=0; lcapgs2 = cox/(3*phi); } else { /* the MOS3modes are around because vds has not been adjusted */ if (vdsat <= here->MOS3mode*vds) { lcapgb2=lcapgb3=lcapgs2=lcapgs3=lcapgd2=lcapgd3=0; } else { vddif = 2.0*vdsat-here->MOS3mode*vds; vddif1 = vdsat-here->MOS3mode*vds/*-1.0e-12*/; vddif2 = vddif*vddif; lcapgd2 = -vdsat*here->MOS3mode*vds*cox/(3*vddif*vddif2); lcapgd3 = - here->MOS3mode*vds*cox*(vddif - 6*vdsat)/(9*vddif2*vddif2); lcapgs2 = -vddif1*here->MOS3mode*vds*cox/(3*vddif*vddif2); lcapgs3 = - here->MOS3mode*vds*cox*(vddif - 6*vddif1)/(9*vddif2*vddif2); lcapgb2=lcapgb3=0; } } } /* the b-s and b-d diodes need no processing ... */ here->capbs2 = lcapbs2; here->capbs3 = lcapbs3; here->capbd2 = lcapbd2; here->capbd3 = lcapbd3; here->gbs2 = lgbs2; here->gbs3 = lgbs3; here->gbd2 = lgbd2; here->gbd3 = lgbd3; here->capgb2 = model->MOS3type*lcapgb2; here->capgb3 = lcapgb3; /* * process to get Taylor coefficients, taking into * account type and mode. */ gm2 = d_cdrain.d2_p2; gb2 = d_cdrain.d2_q2; gds2 = d_cdrain.d2_r2; gmb = d_cdrain.d2_pq; gbds = d_cdrain.d2_qr; gmds = d_cdrain.d2_pr; gm3 = d_cdrain.d3_p3; gb3 = d_cdrain.d3_q3; gds3 = d_cdrain.d3_r3; gm2ds = d_cdrain.d3_p2r; gm2b = d_cdrain.d3_p2q; gb2ds = d_cdrain.d3_q2r; gmb2 = d_cdrain.d3_pq2; gmds2 = d_cdrain.d3_pr2; gbds2 = d_cdrain.d3_qr2; gmbds = d_cdrain.d3_pqr; if (here->MOS3mode == 1) { /* normal mode - no source-drain interchange */ here->cdr_x2 = gm2; here->cdr_y2 = gb2;; here->cdr_z2 = gds2;; here->cdr_xy = gmb; here->cdr_yz = gbds; here->cdr_xz = gmds; here->cdr_x3 = gm3; here->cdr_y3 = gb3; here->cdr_z3 = gds3; here->cdr_x2z = gm2ds; here->cdr_x2y = gm2b; here->cdr_y2z = gb2ds; here->cdr_xy2 = gmb2; here->cdr_xz2 = gmds2; here->cdr_yz2 = gbds2; here->cdr_xyz = gmbds; /* the gate caps have been divided and made into Taylor coeffs., but not adjusted for type */ here->capgs2 = model->MOS3type*lcapgs2; here->capgs3 = lcapgs3; here->capgd2 = model->MOS3type*lcapgd2; here->capgd3 = lcapgd3; } else { /* * inverse mode - source and drain interchanged */ here->cdr_x2 = -gm2; here->cdr_y2 = -gb2; here->cdr_z2 = -(gm2 + gb2 + gds2 + 2*(gmb + gmds + gbds)); here->cdr_xy = -gmb; here->cdr_yz = gmb + gb2 + gbds; here->cdr_xz = gm2 + gmb + gmds; here->cdr_x3 = -gm3; here->cdr_y3 = -gb3; here->cdr_z3 = gm3 + gb3 + gds3 + 3*(gm2b + gm2ds + gmb2 + gb2ds + gmds2 + gbds2) + 6*gmbds ; here->cdr_x2z = gm3 + gm2b + gm2ds; here->cdr_x2y = -gm2b; here->cdr_y2z = gmb2 + gb3 + gb2ds; here->cdr_xy2 = -gmb2; here->cdr_xz2 = -(gm3 + 2*(gm2b + gm2ds + gmbds) + gmb2 + gmds2); here->cdr_yz2 = -(gb3 + 2*(gmb2 + gb2ds + gmbds) + gm2b + gbds2); here->cdr_xyz = gm2b + gmb2 + gmbds; here->capgs2 = model->MOS3type*lcapgd2; here->capgs3 = lcapgd3; here->capgd2 = model->MOS3type*lcapgs2; here->capgd3 = lcapgs3; } /* now to adjust for type and multiply by factors to convert to Taylor coeffs. */ here->cdr_x2 = 0.5*model->MOS3type*here->cdr_x2; here->cdr_y2 = 0.5*model->MOS3type*here->cdr_y2; here->cdr_z2 = 0.5*model->MOS3type*here->cdr_z2; here->cdr_xy = model->MOS3type*here->cdr_xy; here->cdr_yz = model->MOS3type*here->cdr_yz; here->cdr_xz = model->MOS3type*here->cdr_xz; here->cdr_x3 = here->cdr_x3/6.; here->cdr_y3 = here->cdr_y3/6.; here->cdr_z3 = here->cdr_z3/6.; here->cdr_x2z = 0.5*here->cdr_x2z; here->cdr_x2y = 0.5*here->cdr_x2y; here->cdr_y2z = 0.5*here->cdr_y2z; here->cdr_xy2 = 0.5*here->cdr_xy2; here->cdr_xz2 = 0.5*here->cdr_xz2; here->cdr_yz2 = 0.5*here->cdr_yz2; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos3/mos3mask.c0000644000175000017500000001216613546075722021753 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "mos3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int MOS3mAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { MOS3model *here = (MOS3model *)inst; NG_IGNORE(ckt); switch(which) { case MOS3_MOD_TNOM: value->rValue = here->MOS3tnom-CONSTCtoK; return(OK); case MOS3_MOD_VTO: value->rValue = here->MOS3vt0; return(OK); case MOS3_MOD_KP: value->rValue = here->MOS3transconductance; return(OK); case MOS3_MOD_GAMMA: value->rValue = here->MOS3gamma; return(OK); case MOS3_MOD_PHI: value->rValue = here->MOS3phi; return(OK); case MOS3_MOD_RD: value->rValue = here->MOS3drainResistance; return(OK); case MOS3_MOD_RS: value->rValue = here->MOS3sourceResistance; return(OK); case MOS3_MOD_CBD: value->rValue = here->MOS3capBD; return(OK); case MOS3_MOD_CBS: value->rValue = here->MOS3capBS; return(OK); case MOS3_MOD_IS: value->rValue = here->MOS3jctSatCur; return(OK); case MOS3_MOD_PB: value->rValue = here->MOS3bulkJctPotential; return(OK); case MOS3_MOD_CGSO: value->rValue = here->MOS3gateSourceOverlapCapFactor; return(OK); case MOS3_MOD_CGDO: value->rValue = here->MOS3gateDrainOverlapCapFactor; return(OK); case MOS3_MOD_CGBO: value->rValue = here->MOS3gateBulkOverlapCapFactor; return(OK); case MOS3_MOD_CJ: value->rValue = here->MOS3bulkCapFactor; return(OK); case MOS3_MOD_MJ: value->rValue = here->MOS3bulkJctBotGradingCoeff; return(OK); case MOS3_MOD_CJSW: value->rValue = here->MOS3sideWallCapFactor; return(OK); case MOS3_MOD_MJSW: value->rValue = here->MOS3bulkJctSideGradingCoeff; return(OK); case MOS3_MOD_JS: value->rValue = here->MOS3jctSatCurDensity; return(OK); case MOS3_MOD_TOX: value->rValue = here->MOS3oxideThickness; return(OK); case MOS3_MOD_LD: value->rValue = here->MOS3latDiff; return(OK); case MOS3_MOD_XL: value->rValue = here->MOS3lengthAdjust; return(OK); case MOS3_MOD_WD: value->rValue = here->MOS3widthNarrow; return(OK); case MOS3_MOD_XW: value->rValue = here->MOS3widthAdjust; return(OK); case MOS3_MOD_DELVTO: value->rValue = here->MOS3delvt0; return(OK); case MOS3_MOD_RSH: value->rValue = here->MOS3sheetResistance; return(OK); case MOS3_MOD_U0: value->rValue = here->MOS3surfaceMobility; return(OK); case MOS3_MOD_FC: value->rValue = here->MOS3fwdCapDepCoeff; return(OK); case MOS3_MOD_NSUB: value->rValue = here->MOS3substrateDoping; return(OK); case MOS3_MOD_TPG: value->iValue = here->MOS3gateType; return(OK); case MOS3_MOD_NSS: value->rValue = here->MOS3surfaceStateDensity; return(OK); case MOS3_MOD_NFS: value->rValue = here->MOS3fastSurfaceStateDensity; return(OK); case MOS3_MOD_DELTA: value->rValue = here->MOS3narrowFactor; return(OK); case MOS3_MOD_VMAX: value->rValue = here->MOS3maxDriftVel; return(OK); case MOS3_MOD_XJ: value->rValue = here->MOS3junctionDepth; return(OK); case MOS3_MOD_ETA: value->rValue = here->MOS3eta; return(OK); case MOS3_MOD_XD: value->rValue = here->MOS3coeffDepLayWidth; return(OK); case MOS3_DELTA: value->rValue = here->MOS3delta; return(OK); case MOS3_MOD_THETA: value->rValue = here->MOS3theta; return(OK); case MOS3_MOD_ALPHA: value->rValue = here->MOS3alpha; return(OK); case MOS3_MOD_KAPPA: value->rValue = here->MOS3kappa; return(OK); case MOS3_MOD_KF: value->rValue = here->MOS3fNcoef; return(OK); case MOS3_MOD_AF: value->rValue = here->MOS3fNexp; return(OK); case MOS3_MOD_TYPE: if (here->MOS3type > 0) value->sValue = "nmos"; else value->sValue = "pmos"; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/mos3/mos3supd.c0000644000175000017500000001556713546075722022003 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mos3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS3sUpdate(GENmodel *inModel, CKTcircuit *ckt) { MOS3model *model = (MOS3model *)inModel; MOS3instance *here; int iparmno; double sb; double sg; double sdprm; double ssprm; double sxpgs; double sxpgd; double sxpbs; double sxpbd; double sxpgb; double dummy1; double dummy2; SENstruct *info; if(ckt->CKTtime == 0) return(OK); info = ckt->CKTsenInfo; #ifdef SENSDEBUG printf("MOS3senupdate\n"); printf("CKTtime = %.5e\n",ckt->CKTtime); #endif /* SENSDEBUG */ sxpgs = 0; sxpgd = 0; sxpbs = 0; sxpbd = 0; sxpgb = 0; dummy1 = 0; dummy2 = 0; /* loop through all the MOS3 models */ for( ; model != NULL; model = MOS3nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS3instances(model); here != NULL ; here=MOS3nextInstance(here)) { #ifdef SENSDEBUG printf("senupdate instance name %s\n",here->MOS3name); printf("before loading\n"); printf("CKTag[0] = %.2e,CKTag[1] = %.2e\n", ckt->CKTag[0],ckt->CKTag[1]); printf("capgs = %.7e\n",here->MOS3cgs); printf("capgd = %.7e\n",here->MOS3cgd); printf("capgb = %.7e\n",here->MOS3cgb); printf("capbs = %.7e\n",here->MOS3capbs); printf("capbd = %.7e\n",here->MOS3capbd); #endif /* SENSDEBUG */ for(iparmno = 1;iparmno<=info->SENparms;iparmno++){ sb = *(info->SEN_Sap[here->MOS3bNode] + iparmno); sg = *(info->SEN_Sap[here->MOS3gNode] + iparmno); ssprm = *(info->SEN_Sap[here->MOS3sNodePrime] + iparmno); sdprm = *(info->SEN_Sap[here->MOS3dNodePrime] + iparmno); #ifdef SENSDEBUG printf("iparmno = %d\n",iparmno); printf("sb = %.7e,sg = %.7e\n",sb,sg); printf("ssprm = %.7e,sdprm = %.7e\n",ssprm,sdprm); #endif /* SENSDEBUG */ sxpgs = (sg - ssprm) * here->MOS3cgs ; sxpgd = (sg - sdprm) * here->MOS3cgd ; sxpgb = (sg - sb) * here->MOS3cgb ; sxpbs = (sb - ssprm) * here->MOS3capbs ; sxpbd = (sb - sdprm) * here->MOS3capbd ; if(here->MOS3sens_l && (iparmno == here->MOS3senParmNo)){ sxpgs += *(here->MOS3dphigs_dl); sxpgd += *(here->MOS3dphigd_dl); sxpbs += *(here->MOS3dphibs_dl); sxpbd += *(here->MOS3dphibd_dl); sxpgb += *(here->MOS3dphigb_dl); } if(here->MOS3sens_w && (iparmno == (here->MOS3senParmNo + (int) here->MOS3sens_l))){ sxpgs += *(here->MOS3dphigs_dw); sxpgd += *(here->MOS3dphigd_dw); sxpbs += *(here->MOS3dphibs_dw); sxpbd += *(here->MOS3dphibd_dw); sxpgb += *(here->MOS3dphigb_dw); } if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->MOS3sensxpgs + 10 * (iparmno - 1)) = sxpgs; *(ckt->CKTstate1 + here->MOS3sensxpgd + 10 * (iparmno - 1)) = sxpgd; *(ckt->CKTstate1 + here->MOS3sensxpbs + 10 * (iparmno - 1)) = sxpbs; *(ckt->CKTstate1 + here->MOS3sensxpbd + 10 * (iparmno - 1)) = sxpbd; *(ckt->CKTstate1 + here->MOS3sensxpgb + 10 * (iparmno - 1)) = sxpgb; *(ckt->CKTstate1 + here->MOS3sensxpgs + 10 * (iparmno - 1) + 1) = 0; *(ckt->CKTstate1 + here->MOS3sensxpgd + 10 * (iparmno - 1) + 1) = 0; *(ckt->CKTstate1 + here->MOS3sensxpbs + 10 * (iparmno - 1) + 1) = 0; *(ckt->CKTstate1 + here->MOS3sensxpbd + 10 * (iparmno - 1) + 1) = 0; *(ckt->CKTstate1 + here->MOS3sensxpgb + 10 * (iparmno - 1) + 1) = 0; goto next; } *(ckt->CKTstate0 + here->MOS3sensxpgs + 10 * (iparmno - 1)) = sxpgs; *(ckt->CKTstate0 + here->MOS3sensxpgd + 10 * (iparmno - 1)) = sxpgd; *(ckt->CKTstate0 + here->MOS3sensxpbs + 10 * (iparmno - 1)) = sxpbs; *(ckt->CKTstate0 + here->MOS3sensxpbd + 10 * (iparmno - 1)) = sxpbd; *(ckt->CKTstate0 + here->MOS3sensxpgb + 10 * (iparmno - 1)) = sxpgb; NIintegrate(ckt,&dummy1,&dummy2,here->MOS3cgs, here->MOS3sensxpgs + 10*(iparmno -1)); NIintegrate(ckt,&dummy1,&dummy2,here->MOS3cgd, here->MOS3sensxpgd + 10*(iparmno -1)); NIintegrate(ckt,&dummy1,&dummy2,here->MOS3cgb, here->MOS3sensxpgb + 10*(iparmno -1)); NIintegrate(ckt,&dummy1,&dummy2,here->MOS3capbs, here->MOS3sensxpbs + 10*(iparmno -1)); NIintegrate(ckt,&dummy1,&dummy2,here->MOS3capbd, here->MOS3sensxpbd + 10*(iparmno -1)); next: ; #ifdef SENSDEBUG printf("after loading\n"); printf("sxpgs = %.7e,sdotxpgs = %.7e\n", sxpgs,*(ckt->CKTstate0 + here->MOS3sensxpgs + 10 * (iparmno - 1) + 1)); printf("sxpgd = %.7e,sdotxpgd = %.7e\n", sxpgd,*(ckt->CKTstate0 + here->MOS3sensxpgd + 10 * (iparmno - 1) + 1)); printf("sxpgb = %.7e,sdotxpgb = %.7e\n", sxpgb,*(ckt->CKTstate0 + here->MOS3sensxpgb + 10 * (iparmno - 1) + 1)); printf("sxpbs = %.7e,sdotxpbs = %.7e\n", sxpbs,*(ckt->CKTstate0 + here->MOS3sensxpbs + 10 * (iparmno - 1) + 1)); printf("sxpbd = %.7e,sdotxpbd = %.7e\n", sxpbd,*(ckt->CKTstate0 + here->MOS3sensxpbd + 10 * (iparmno - 1) + 1)); #endif /* SENSDEBUG */ } } } #ifdef SENSDEBUG printf("MOS3senupdate end\n"); #endif /* SENSDEBUG */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos3/mos3noi.c0000644000175000017500000001316713546075722021607 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Gary W. Ng Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "mos3defs.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" /* * MOS3noise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with MOSFET's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the MOSFET's is summed with the variable "OnDens". */ int MOS3noise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; MOS3model *firstModel = (MOS3model *) genmodel; MOS3model *model; MOS3instance *inst; double tempOnoise; double tempInoise; double noizDens[MOS3NSRCS]; double lnNdens[MOS3NSRCS]; int i; /* define the names of the noise sources */ static char *MOS3nNames[MOS3NSRCS] = { /* Note that we have to keep the order */ "_rd", /* noise due to rd */ /* consistent with thestrchr definitions */ "_rs", /* noise due to rs */ /* in MOS3defs.h */ "_id", /* noise due to id */ "_1overf", /* flicker (1/f) noise */ "" /* total transistor noise */ }; for (model=firstModel; model != NULL; model=MOS3nextModel(model)) { for (inst=MOS3instances(model); inst != NULL; inst=MOS3nextInstance(inst)) { switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i=0; i < MOS3NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_%s%s", inst->MOS3name, MOS3nNames[i]); } break; case INT_NOIZ: for (i=0; i < MOS3NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total_%s%s", inst->MOS3name, MOS3nNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total_%s%s", inst->MOS3name, MOS3nNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: NevalSrc(&noizDens[MOS3RDNOIZ],&lnNdens[MOS3RDNOIZ], ckt,THERMNOISE,inst->MOS3dNodePrime,inst->MOS3dNode, inst->MOS3drainConductance); NevalSrc(&noizDens[MOS3RSNOIZ],&lnNdens[MOS3RSNOIZ], ckt,THERMNOISE,inst->MOS3sNodePrime,inst->MOS3sNode, inst->MOS3sourceConductance); NevalSrc(&noizDens[MOS3IDNOIZ],&lnNdens[MOS3IDNOIZ], ckt,THERMNOISE,inst->MOS3dNodePrime,inst->MOS3sNodePrime, (2.0/3.0 * fabs(inst->MOS3gm))); NevalSrc(&noizDens[MOS3FLNOIZ], NULL, ckt, N_GAIN,inst->MOS3dNodePrime, inst->MOS3sNodePrime, (double)0.0); noizDens[MOS3FLNOIZ] *= model->MOS3fNcoef * exp(model->MOS3fNexp * log(MAX(fabs(inst->MOS3cd),N_MINLOG))) / (data->freq * (inst->MOS3w - 2*model->MOS3widthNarrow) * (inst->MOS3l - 2*model->MOS3latDiff) * model->MOS3oxideCapFactor * model->MOS3oxideCapFactor); lnNdens[MOS3FLNOIZ] = log(MAX(noizDens[MOS3FLNOIZ],N_MINLOG)); noizDens[MOS3TOTNOIZ] = noizDens[MOS3RDNOIZ] + noizDens[MOS3RSNOIZ] + noizDens[MOS3IDNOIZ] + noizDens[MOS3FLNOIZ]; lnNdens[MOS3TOTNOIZ] = log(MAX(noizDens[MOS3TOTNOIZ], N_MINLOG)); *OnDens += noizDens[MOS3TOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to */ /* initialize our "history" variables */ for (i=0; i < MOS3NSRCS; i++) { inst->MOS3nVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i=0; i < MOS3NSRCS; i++) { inst->MOS3nVar[OUTNOIZ][i] = 0.0; inst->MOS3nVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0 (we have to integrate) */ for (i=0; i < MOS3NSRCS; i++) { if (i != MOS3TOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], inst->MOS3nVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv , lnNdens[i] + data->lnGainInv, inst->MOS3nVar[LNLSTDENS][i] + data->lnGainInv, data); inst->MOS3nVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { inst->MOS3nVar[OUTNOIZ][i] += tempOnoise; inst->MOS3nVar[OUTNOIZ][MOS3TOTNOIZ] += tempOnoise; inst->MOS3nVar[INNOIZ][i] += tempInoise; inst->MOS3nVar[INNOIZ][MOS3TOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i=0; i < MOS3NSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i=0; i < MOS3NSRCS; i++) { data->outpVector[data->outNumber++] = inst->MOS3nVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = inst->MOS3nVar[INNOIZ][i]; } } /* if */ break; } /* switch (mode) */ break; case N_CLOSE: return (OK); /* do nothing, the main calling routine will close */ break; /* the plots */ } /* switch (operation) */ } /* for inst */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos3/mos3acld.c0000644000175000017500000001113413546075722021715 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS3acLoad(GENmodel *inModel, CKTcircuit *ckt) { MOS3model *model = (MOS3model *)inModel; MOS3instance *here; int xnrm; int xrev; double EffectiveLength; double EffectiveWidth; double xgs; double xgd; double xgb; double xbd; double xbs; double capgs; double capgd; double capgb; double GateBulkOverlapCap; double GateDrainOverlapCap; double GateSourceOverlapCap; for( ; model != NULL; model = MOS3nextModel(model)) { for(here = MOS3instances(model); here!= NULL; here = MOS3nextInstance(here)) { if (here->MOS3mode < 0) { xnrm=0; xrev=1; } else { xnrm=1; xrev=0; } /* * charge oriented model parameters */ EffectiveWidth=here->MOS3w-2*model->MOS3widthNarrow+ model->MOS3widthAdjust; EffectiveLength=here->MOS3l - 2*model->MOS3latDiff+ model->MOS3lengthAdjust; GateSourceOverlapCap = model->MOS3gateSourceOverlapCapFactor * here->MOS3m * EffectiveWidth; GateDrainOverlapCap = model->MOS3gateDrainOverlapCapFactor * here->MOS3m * EffectiveWidth; GateBulkOverlapCap = model->MOS3gateBulkOverlapCapFactor * here->MOS3m * EffectiveLength; /* * meyer"s model parameters */ capgs = ( *(ckt->CKTstate0+here->MOS3capgs)+ *(ckt->CKTstate0+here->MOS3capgs) + GateSourceOverlapCap ); capgd = ( *(ckt->CKTstate0+here->MOS3capgd)+ *(ckt->CKTstate0+here->MOS3capgd) + GateDrainOverlapCap ); capgb = ( *(ckt->CKTstate0+here->MOS3capgb)+ *(ckt->CKTstate0+here->MOS3capgb) + GateBulkOverlapCap ); xgs = capgs * ckt->CKTomega; xgd = capgd * ckt->CKTomega; xgb = capgb * ckt->CKTomega; xbd = here->MOS3capbd * ckt->CKTomega; xbs = here->MOS3capbs * ckt->CKTomega; /* * load matrix */ *(here->MOS3GgPtr +1) += xgd+xgs+xgb; *(here->MOS3BbPtr +1) += xgb+xbd+xbs; *(here->MOS3DPdpPtr +1) += xgd+xbd; *(here->MOS3SPspPtr +1) += xgs+xbs; *(here->MOS3GbPtr +1) -= xgb; *(here->MOS3GdpPtr +1) -= xgd; *(here->MOS3GspPtr +1) -= xgs; *(here->MOS3BgPtr +1) -= xgb; *(here->MOS3BdpPtr +1) -= xbd; *(here->MOS3BspPtr +1) -= xbs; *(here->MOS3DPgPtr +1) -= xgd; *(here->MOS3DPbPtr +1) -= xbd; *(here->MOS3SPgPtr +1) -= xgs; *(here->MOS3SPbPtr +1) -= xbs; *(here->MOS3DdPtr) += here->MOS3drainConductance; *(here->MOS3SsPtr) += here->MOS3sourceConductance; *(here->MOS3BbPtr) += here->MOS3gbd+here->MOS3gbs; *(here->MOS3DPdpPtr) += here->MOS3drainConductance+ here->MOS3gds+here->MOS3gbd+ xrev*(here->MOS3gm+here->MOS3gmbs); *(here->MOS3SPspPtr) += here->MOS3sourceConductance+ here->MOS3gds+here->MOS3gbs+ xnrm*(here->MOS3gm+here->MOS3gmbs); *(here->MOS3DdpPtr) -= here->MOS3drainConductance; *(here->MOS3SspPtr) -= here->MOS3sourceConductance; *(here->MOS3BdpPtr) -= here->MOS3gbd; *(here->MOS3BspPtr) -= here->MOS3gbs; *(here->MOS3DPdPtr) -= here->MOS3drainConductance; *(here->MOS3DPgPtr) += (xnrm-xrev)*here->MOS3gm; *(here->MOS3DPbPtr) += -here->MOS3gbd+(xnrm-xrev)*here->MOS3gmbs; *(here->MOS3DPspPtr) -= here->MOS3gds+ xnrm*(here->MOS3gm+here->MOS3gmbs); *(here->MOS3SPgPtr) -= (xnrm-xrev)*here->MOS3gm; *(here->MOS3SPsPtr) -= here->MOS3sourceConductance; *(here->MOS3SPbPtr) -= here->MOS3gbs+(xnrm-xrev)*here->MOS3gmbs; *(here->MOS3SPdpPtr) -= here->MOS3gds+ xrev*(here->MOS3gm+here->MOS3gmbs); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos3/mos3.c0000644000175000017500000002342213546075722021074 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "mos3defs.h" #include "ngspice/suffix.h" IFparm MOS3pTable[] = { /* parameters */ IOPU("m", MOS3_M, IF_REAL , "Multiplier"), IOPU("l", MOS3_L, IF_REAL , "Length"), IOPU("w", MOS3_W, IF_REAL , "Width"), IOPU("ad", MOS3_AD, IF_REAL , "Drain area"), IOPU("as", MOS3_AS, IF_REAL , "Source area"), IOPU("pd", MOS3_PD, IF_REAL , "Drain perimeter"), IOPU("ps", MOS3_PS, IF_REAL , "Source perimeter"), OP("id", MOS3_CD, IF_REAL, "Drain current"), OPR("cd", MOS3_CD, IF_REAL, "Drain current"), OPU("ibd", MOS3_CBD, IF_REAL, "B-D junction current"), OPU("ibs", MOS3_CBS, IF_REAL, "B-S junction current"), OPU("is", MOS3_CS, IF_REAL, "Source current"), OPU("ig", MOS3_CG, IF_REAL, "Gate current"), OPU("ib", MOS3_CB, IF_REAL, "Bulk current"), OP("vgs", MOS3_VGS, IF_REAL, "Gate-Source voltage"), OP("vds", MOS3_VDS, IF_REAL, "Drain-Source voltage"), OP("vbs", MOS3_VBS, IF_REAL, "Bulk-Source voltage"), OPU("vbd", MOS3_VBD, IF_REAL, "Bulk-Drain voltage"), IOPU("nrd", MOS3_NRD, IF_REAL , "Drain squares"), IOPU("nrs", MOS3_NRS, IF_REAL , "Source squares"), IP("off", MOS3_OFF, IF_FLAG , "Device initially off"), IOPAU("icvds", MOS3_IC_VDS, IF_REAL , "Initial D-S voltage"), IOPAU("icvgs", MOS3_IC_VGS, IF_REAL , "Initial G-S voltage"), IOPAU("icvbs", MOS3_IC_VBS, IF_REAL , "Initial B-S voltage"), IOPU("ic", MOS3_IC, IF_REALVEC, "Vector of D-S, G-S, B-S voltages"), IOPU("temp", MOS3_TEMP, IF_REAL , "Instance operating temperature"), IOPU("dtemp", MOS3_DTEMP, IF_REAL , "Instance temperature difference"), IP("sens_l", MOS3_L_SENS, IF_FLAG, "flag to request sensitivity WRT length"), IP("sens_w", MOS3_W_SENS, IF_FLAG, "flag to request sensitivity WRT width"), OPU("dnode", MOS3_DNODE, IF_INTEGER, "Number of drain node"), OPU("gnode", MOS3_GNODE, IF_INTEGER, "Number of gate node"), OPU("snode", MOS3_SNODE, IF_INTEGER, "Number of source node"), OPU("bnode", MOS3_BNODE, IF_INTEGER, "Number of bulk node"), OPU("dnodeprime", MOS3_DNODEPRIME,IF_INTEGER,"Number of internal drain node"), OPU("snodeprime", MOS3_SNODEPRIME,IF_INTEGER,"Number of internal source node"), OP("von", MOS3_VON, IF_REAL, "Turn-on voltage"), OP("vdsat", MOS3_VDSAT, IF_REAL, "Saturation drain voltage"), OPU("sourcevcrit", MOS3_SOURCEVCRIT, IF_REAL, "Critical source voltage"), OPU("drainvcrit", MOS3_DRAINVCRIT, IF_REAL, "Critical drain voltage"), OP("rs", MOS3_SOURCERESIST, IF_REAL, "Source resistance"), OPU("sourceconductance", MOS3_SOURCECONDUCT, IF_REAL, "Source conductance"), OP("rd", MOS3_DRAINRESIST, IF_REAL, "Drain resistance"), OPU("drainconductance", MOS3_DRAINCONDUCT, IF_REAL, "Drain conductance"), OP("gm", MOS3_GM, IF_REAL, "Transconductance"), OP("gds", MOS3_GDS, IF_REAL, "Drain-Source conductance"), OP("gmb", MOS3_GMBS, IF_REAL, "Bulk-Source transconductance"), OPR("gmbs", MOS3_GMBS, IF_REAL, "Bulk-Source transconductance"), OPU("gbd", MOS3_GBD, IF_REAL, "Bulk-Drain conductance"), OPU("gbs", MOS3_GBS, IF_REAL, "Bulk-Source conductance"), OP("cbd", MOS3_CAPBD, IF_REAL, "Bulk-Drain capacitance"), OP("cbs", MOS3_CAPBS, IF_REAL, "Bulk-Source capacitance"), OP("cgs", MOS3_CAPGS, IF_REAL, "Gate-Source capacitance"), /* OPR("cgs", MOS3_CGS, IF_REAL , "Gate-Source capacitance"),*/ OP("cgd", MOS3_CAPGD, IF_REAL, "Gate-Drain capacitance"), /* OPR("cgd", MOS3_CGD, IF_REAL , "Gate-Drain capacitance"),*/ OP("cgb", MOS3_CAPGB, IF_REAL, "Gate-Bulk capacitance"), OPU("cqgs",MOS3_CQGS,IF_REAL,"Capacitance due to gate-source charge storage"), OPU("cqgd",MOS3_CQGD, IF_REAL,"Capacitance due to gate-drain charge storage"), OPU("cqgb",MOS3_CQGB, IF_REAL,"Capacitance due to gate-bulk charge storage"), OPU("cqbd",MOS3_CQBD,IF_REAL,"Capacitance due to bulk-drain charge storage"), OPU("cqbs",MOS3_CQBS,IF_REAL,"Capacitance due to bulk-source charge storage"), OPU("cbd0",MOS3_CAPZEROBIASBD,IF_REAL,"Zero-Bias B-D junction capacitance"), OPU("cbdsw0",MOS3_CAPZEROBIASBDSW,IF_REAL, "Zero-Bias B-D sidewall capacitance"), OPU("cbs0",MOS3_CAPZEROBIASBS,IF_REAL,"Zero-Bias B-S junction capacitance"), OPU("cbssw0",MOS3_CAPZEROBIASBSSW,IF_REAL, "Zero-Bias B-S sidewall capacitance"), OPU("qbs", MOS3_QBS, IF_REAL, "Bulk-Source charge storage"), OPU("qgs", MOS3_QGS, IF_REAL, "Gate-Source charge storage"), OPU("qgd", MOS3_QGD, IF_REAL, "Gate-Drain charge storage"), OPU("qgb", MOS3_QGB, IF_REAL, "Gate-Bulk charge storage"), OPU("qbd", MOS3_QBD, IF_REAL, "Bulk-Drain charge storage"), OPU("p", MOS3_POWER, IF_REAL, "Instantaneous power"), OPU("sens_l_dc", MOS3_L_SENS_DC, IF_REAL, "dc sensitivity wrt length"), OPU("sens_l_real",MOS3_L_SENS_REAL, IF_REAL, "real part of ac sensitivity wrt length"), OPU("sens_l_imag",MOS3_L_SENS_IMAG, IF_REAL, "imag part of ac sensitivity wrt length"), OPU("sens_l_cplx",MOS3_L_SENS_CPLX, IF_COMPLEX, "ac sensitivity wrt length"), OPU("sens_l_mag", MOS3_L_SENS_MAG, IF_REAL, "sensitivity wrt l of ac magnitude"), OPU("sens_l_ph", MOS3_L_SENS_PH, IF_REAL, "sensitivity wrt l of ac phase"), OPU("sens_w_dc", MOS3_W_SENS_DC, IF_REAL, "dc sensitivity wrt width"), OPU("sens_w_real",MOS3_W_SENS_REAL, IF_REAL, "real part of ac sensitivity wrt width"), OPU("sens_w_imag",MOS3_W_SENS_IMAG, IF_REAL, "imag part of ac sensitivity wrt width"), OPU("sens_w_mag", MOS3_W_SENS_MAG, IF_REAL, "sensitivity wrt w of ac magnitude"), OPU("sens_w_ph", MOS3_W_SENS_PH, IF_REAL, "sensitivity wrt w of ac phase"), OPU("sens_w_cplx",MOS3_W_SENS_CPLX, IF_COMPLEX, "ac sensitivity wrt width") }; IFparm MOS3mPTable[] = { /* model parameters */ OP("type", MOS3_MOD_TYPE, IF_STRING ,"N-channel or P-channel MOS"), IP("nmos", MOS3_MOD_NMOS, IF_FLAG ,"N type MOSfet model"), IP("pmos", MOS3_MOD_PMOS, IF_FLAG ,"P type MOSfet model"), IOP("vto", MOS3_MOD_VTO, IF_REAL ,"Threshold voltage"), IOPR("vt0", MOS3_MOD_VTO, IF_REAL ,"Threshold voltage"), IOP("kp", MOS3_MOD_KP, IF_REAL ,"Transconductance parameter"), IOP("gamma", MOS3_MOD_GAMMA, IF_REAL ,"Bulk threshold parameter"), IOP("phi", MOS3_MOD_PHI, IF_REAL ,"Surface potential"), IOP("rd", MOS3_MOD_RD, IF_REAL ,"Drain ohmic resistance"), IOP("rs", MOS3_MOD_RS, IF_REAL ,"Source ohmic resistance"), IOPA("cbd", MOS3_MOD_CBD, IF_REAL ,"B-D junction capacitance"), IOPA("cbs", MOS3_MOD_CBS, IF_REAL ,"B-S junction capacitance"), IOP("is", MOS3_MOD_IS, IF_REAL ,"Bulk junction sat. current"), IOP("pb", MOS3_MOD_PB, IF_REAL ,"Bulk junction potential"), IOPA("cgso", MOS3_MOD_CGSO, IF_REAL ,"Gate-source overlap cap."), IOPA("cgdo", MOS3_MOD_CGDO, IF_REAL ,"Gate-drain overlap cap."), IOPA("cgbo", MOS3_MOD_CGBO, IF_REAL ,"Gate-bulk overlap cap."), IOP("rsh", MOS3_MOD_RSH, IF_REAL ,"Sheet resistance"), IOPA("cj", MOS3_MOD_CJ, IF_REAL ,"Bottom junction cap per area"), IOP("mj", MOS3_MOD_MJ, IF_REAL ,"Bottom grading coefficient"), IOPA("cjsw", MOS3_MOD_CJSW, IF_REAL ,"Side junction cap per area"), IOP("mjsw", MOS3_MOD_MJSW, IF_REAL ,"Side grading coefficient"), IOPU("js", MOS3_MOD_JS, IF_REAL ,"Bulk jct. sat. current density"), IOP("tox", MOS3_MOD_TOX, IF_REAL ,"Oxide thickness"), IOP("ld", MOS3_MOD_LD, IF_REAL ,"Lateral diffusion"), IOP("xl", MOS3_MOD_XL, IF_REAL ,"Length mask adjustment"), IOP("wd", MOS3_MOD_WD, IF_REAL ,"Width Narrowing (Diffusion)"), IOP("xw", MOS3_MOD_XW, IF_REAL ,"Width mask adjustment"), IOPU("delvto", MOS3_MOD_DELVTO, IF_REAL ,"Threshold voltage Adjust"), IOPUR("delvt0", MOS3_MOD_DELVTO, IF_REAL ,"Threshold voltage Adjust"), IOP("u0", MOS3_MOD_U0, IF_REAL ,"Surface mobility"), IOPR("uo", MOS3_MOD_U0, IF_REAL ,"Surface mobility"), IOP("fc", MOS3_MOD_FC, IF_REAL ,"Forward bias jct. fit parm."), IOP("nsub", MOS3_MOD_NSUB, IF_REAL ,"Substrate doping"), IOP("tpg", MOS3_MOD_TPG, IF_INTEGER,"Gate type"), IOP("nss", MOS3_MOD_NSS, IF_REAL ,"Surface state density"), IOP("vmax", MOS3_MOD_VMAX, IF_REAL ,"Maximum carrier drift velocity"), IOP("xj", MOS3_MOD_XJ, IF_REAL ,"Junction depth"), IOP("nfs", MOS3_MOD_NFS, IF_REAL ,"Fast surface state density"), IOP("xd", MOS3_MOD_XD, IF_REAL ,"Depletion layer width"), IOP("alpha", MOS3_MOD_ALPHA, IF_REAL ,"Alpha"), IOP("eta", MOS3_MOD_ETA, IF_REAL ,"Vds dependence of threshold voltage"), IOP("delta", MOS3_MOD_DELTA, IF_REAL ,"Width effect on threshold"), IOP("input_delta", MOS3_DELTA, IF_REAL ,""), IOP("theta", MOS3_MOD_THETA, IF_REAL ,"Vgs dependence on mobility"), IOP("kappa", MOS3_MOD_KAPPA, IF_REAL ,"Kappa"), IOPU("tnom", MOS3_MOD_TNOM, IF_REAL ,"Parameter measurement temperature"), IOP("kf", MOS3_MOD_KF, IF_REAL ,"Flicker noise coefficient"), IOP("af", MOS3_MOD_AF, IF_REAL ,"Flicker noise exponent") }; char *MOS3names[] = { "Drain", "Gate", "Source", "Bulk" }; int MOS3nSize = NUMELEMS(MOS3names); int MOS3pTSize = NUMELEMS(MOS3pTable); int MOS3mPTSize = NUMELEMS(MOS3mPTable); int MOS3iSize = sizeof(MOS3instance); int MOS3mSize = sizeof(MOS3model); tmpk8ny_4pz/src/spicelib/devices/mos3/mos3mpar.c0000644000175000017500000001516613546075722021762 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "mos3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS3mParam(int param, IFvalue *value, GENmodel *inModel) { MOS3model *model = (MOS3model *)inModel; switch(param) { case MOS3_MOD_VTO: model->MOS3vt0 = value->rValue; model->MOS3vt0Given = TRUE; break; case MOS3_MOD_KP: model->MOS3transconductance = value->rValue; model->MOS3transconductanceGiven = TRUE; break; case MOS3_MOD_GAMMA: model->MOS3gamma = value->rValue; model->MOS3gammaGiven = TRUE; break; case MOS3_MOD_PHI: model->MOS3phi = value->rValue; model->MOS3phiGiven = TRUE; break; case MOS3_MOD_RD: model->MOS3drainResistance = value->rValue; model->MOS3drainResistanceGiven = TRUE; break; case MOS3_MOD_RS: model->MOS3sourceResistance = value->rValue; model->MOS3sourceResistanceGiven = TRUE; break; case MOS3_MOD_CBD: model->MOS3capBD = value->rValue; model->MOS3capBDGiven = TRUE; break; case MOS3_MOD_CBS: model->MOS3capBS = value->rValue; model->MOS3capBSGiven = TRUE; break; case MOS3_MOD_IS: model->MOS3jctSatCur = value->rValue; model->MOS3jctSatCurGiven = TRUE; break; case MOS3_MOD_PB: model->MOS3bulkJctPotential = value->rValue; model->MOS3bulkJctPotentialGiven = TRUE; break; case MOS3_MOD_CGSO: model->MOS3gateSourceOverlapCapFactor = value->rValue; model->MOS3gateSourceOverlapCapFactorGiven = TRUE; break; case MOS3_MOD_CGDO: model->MOS3gateDrainOverlapCapFactor = value->rValue; model->MOS3gateDrainOverlapCapFactorGiven = TRUE; break; case MOS3_MOD_CGBO: model->MOS3gateBulkOverlapCapFactor = value->rValue; model->MOS3gateBulkOverlapCapFactorGiven = TRUE; break; case MOS3_MOD_RSH: model->MOS3sheetResistance = value->rValue; model->MOS3sheetResistanceGiven = TRUE; break; case MOS3_MOD_CJ: model->MOS3bulkCapFactor = value->rValue; model->MOS3bulkCapFactorGiven = TRUE; break; case MOS3_MOD_MJ: model->MOS3bulkJctBotGradingCoeff = value->rValue; model->MOS3bulkJctBotGradingCoeffGiven = TRUE; break; case MOS3_MOD_CJSW: model->MOS3sideWallCapFactor = value->rValue; model->MOS3sideWallCapFactorGiven = TRUE; break; case MOS3_MOD_MJSW: model->MOS3bulkJctSideGradingCoeff = value->rValue; model->MOS3bulkJctSideGradingCoeffGiven = TRUE; break; case MOS3_MOD_JS: model->MOS3jctSatCurDensity = value->rValue; model->MOS3jctSatCurDensityGiven = TRUE; break; case MOS3_MOD_TOX: model->MOS3oxideThickness = value->rValue; model->MOS3oxideThicknessGiven = TRUE; break; case MOS3_MOD_LD: model->MOS3latDiff = value->rValue; model->MOS3latDiffGiven = TRUE; break; case MOS3_MOD_XL: model->MOS3lengthAdjust = value->rValue; model->MOS3lengthAdjustGiven = TRUE; break; case MOS3_MOD_WD: model->MOS3widthNarrow = value->rValue; model->MOS3widthNarrowGiven = TRUE; break; case MOS3_MOD_XW: model->MOS3widthAdjust = value->rValue; model->MOS3widthAdjustGiven = TRUE; break; case MOS3_MOD_DELVTO: model->MOS3delvt0 = value->rValue; model->MOS3delvt0Given = TRUE; break; case MOS3_MOD_U0: model->MOS3surfaceMobility = value->rValue; model->MOS3surfaceMobilityGiven = TRUE; break; case MOS3_MOD_FC: model->MOS3fwdCapDepCoeff = value->rValue; model->MOS3fwdCapDepCoeffGiven = TRUE; break; case MOS3_MOD_NSUB: model->MOS3substrateDoping = value->rValue; model->MOS3substrateDopingGiven = TRUE; break; case MOS3_MOD_TPG: model->MOS3gateType = value->iValue; model->MOS3gateTypeGiven = TRUE; break; case MOS3_MOD_NSS: model->MOS3surfaceStateDensity = value->rValue; model->MOS3surfaceStateDensityGiven = TRUE; break; case MOS3_MOD_ETA: model->MOS3eta = value->rValue; model->MOS3etaGiven = TRUE; break; case MOS3_MOD_DELTA: model->MOS3delta = value->rValue; model->MOS3deltaGiven = TRUE; break; case MOS3_MOD_NFS: model->MOS3fastSurfaceStateDensity = value->rValue; model->MOS3fastSurfaceStateDensityGiven = TRUE; break; case MOS3_MOD_THETA: model->MOS3theta = value->rValue; model->MOS3thetaGiven = TRUE; break; case MOS3_MOD_VMAX: model->MOS3maxDriftVel = value->rValue; model->MOS3maxDriftVelGiven = TRUE; break; case MOS3_MOD_KAPPA: model->MOS3kappa = value->rValue; model->MOS3kappaGiven = TRUE; break; case MOS3_MOD_NMOS: if(value->iValue) { model->MOS3type = 1; model->MOS3typeGiven = TRUE; } break; case MOS3_MOD_PMOS: if(value->iValue) { model->MOS3type = -1; model->MOS3typeGiven = TRUE; } break; case MOS3_MOD_XJ: model->MOS3junctionDepth = value->rValue; model->MOS3junctionDepthGiven = TRUE; break; case MOS3_MOD_TNOM: model->MOS3tnom = value->rValue+CONSTCtoK; model->MOS3tnomGiven = TRUE; break; case MOS3_MOD_KF: model->MOS3fNcoef = value->rValue; model->MOS3fNcoefGiven = TRUE; break; case MOS3_MOD_AF: model->MOS3fNexp = value->rValue; model->MOS3fNexpGiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos3/mos3par.c0000644000175000017500000000711313546075722021576 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "mos3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/fteext.h" /* ARGSUSED */ int MOS3param(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { double scale; MOS3instance *here = (MOS3instance *)inst; NG_IGNORE(select); if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; switch(param) { case MOS3_M: here->MOS3m = value->rValue; here->MOS3mGiven = TRUE; break; case MOS3_W: here->MOS3w = value->rValue * scale; here->MOS3wGiven = TRUE; break; case MOS3_L: here->MOS3l = value->rValue * scale; here->MOS3lGiven = TRUE; break; case MOS3_AS: here->MOS3sourceArea = value->rValue * scale * scale; here->MOS3sourceAreaGiven = TRUE; break; case MOS3_AD: here->MOS3drainArea = value->rValue * scale * scale; here->MOS3drainAreaGiven = TRUE; break; case MOS3_PS: here->MOS3sourcePerimiter = value->rValue * scale; here->MOS3sourcePerimiterGiven = TRUE; break; case MOS3_PD: here->MOS3drainPerimiter = value->rValue * scale; here->MOS3drainPerimiterGiven = TRUE; break; case MOS3_NRS: here->MOS3sourceSquares = value->rValue; here->MOS3sourceSquaresGiven = TRUE; break; case MOS3_NRD: here->MOS3drainSquares = value->rValue; here->MOS3drainSquaresGiven = TRUE; break; case MOS3_OFF: here->MOS3off = (value->iValue != 0); break; case MOS3_IC_VBS: here->MOS3icVBS = value->rValue; here->MOS3icVBSGiven = TRUE; break; case MOS3_IC_VDS: here->MOS3icVDS = value->rValue; here->MOS3icVDSGiven = TRUE; break; case MOS3_IC_VGS: here->MOS3icVGS = value->rValue; here->MOS3icVGSGiven = TRUE; break; case MOS3_TEMP: here->MOS3temp = value->rValue+CONSTCtoK; here->MOS3tempGiven = TRUE; break; case MOS3_DTEMP: here->MOS3dtemp = value->rValue; here->MOS3dtempGiven = TRUE; break; case MOS3_IC: switch(value->v.numValue){ case 3: here->MOS3icVBS = *(value->v.vec.rVec+2); here->MOS3icVBSGiven = TRUE; case 2: here->MOS3icVGS = *(value->v.vec.rVec+1); here->MOS3icVGSGiven = TRUE; case 1: here->MOS3icVDS = *(value->v.vec.rVec); here->MOS3icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; case MOS3_L_SENS: if(value->iValue) { here->MOS3senParmNo = 1; here->MOS3sens_l = 1; } break; case MOS3_W_SENS: if(value->iValue) { here->MOS3senParmNo = 1; here->MOS3sens_w = 1; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos3/mos3itf.h0000644000175000017500000000026013546075722021577 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_MOS3 #define DEV_MOS3 SPICEdev *get_mos3_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/mos3/mos3sld.c0000644000175000017500000006445113546075722021606 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes This function is obsolete (was used by an old sensitivity analysis) **********/ /* actually load the current sensitivity * information into the array previously provided */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mos3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS3sLoad(GENmodel *inModel, CKTcircuit *ckt) { MOS3model *model = (MOS3model *)inModel; MOS3instance *here; double SaveState[44]; int save_mode; int i; int iparmno; int error; int flag; double A0; double DELA; double Apert; double DELAinv; double gspr0; double gspr; double gdpr0; double gdpr; double cdpr0; double cspr0; double cd0; double cbd0; double cbs0; double cd; double cbd; double cbs; double DcdprDp; double DcsprDp; double DcbDp; double DcdDp; double DcbsDp; double DcbdDp; double DcdprmDp; double DcsprmDp; double qgs0; double qgd0; double qgb0; double qbd0; double qbd; double qbs0; double qbs; double DqgsDp; double DqgdDp; double DqgbDp; double DqbdDp; double DqbsDp; double Osxpgs; double Osxpgd; double Osxpgb; double Osxpbd; double Osxpbs; double tag0; double tag1; double arg; double sarg; double sargsw; int offset; double EffectiveLength; double EffectiveWidth; SENstruct *info; #ifdef SENSDEBUG printf("MOS3senload \n"); printf("CKTtime = %.5e\n",ckt->CKTtime); printf("CKTorder = %d\n",ckt->CKTorder); #endif /* SENSDEBUG */ info = ckt->CKTsenInfo; info->SENstatus = PERTURBATION; tag0 = ckt->CKTag[0]; tag1 = ckt->CKTag[1]; if(ckt->CKTorder == 1){ tag1 = 0; } /* loop through all the models */ for( ; model != NULL; model = MOS3nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS3instances(model); here != NULL ; here=MOS3nextInstance(here)) { #ifdef SENSDEBUG printf("senload instance name %s\n",here->MOS3name); printf("gate = %d ,drain = %d, drainprm = %d\n", here->MOS3gNode,here->MOS3dNode,here->MOS3dNodePrime); printf("source = %d , sourceprm = %d ,body = %d, senparmno = %d\n", here->MOS3sNode ,here->MOS3sNodePrime, here->MOS3bNode,here->MOS3senParmNo); #endif /* SENSDEBUG */ /* save the unperturbed values in the state vector */ for(i=0; i <= 16; i++){ *(SaveState + i) = *(ckt->CKTstate0 + here->MOS3states + i); } *(SaveState + 17) = here->MOS3sourceConductance; *(SaveState + 18) = here->MOS3drainConductance; *(SaveState + 19) = here->MOS3cd; *(SaveState + 20) = here->MOS3cbs; *(SaveState + 21) = here->MOS3cbd; *(SaveState + 22) = here->MOS3gmbs; *(SaveState + 23) = here->MOS3gm; *(SaveState + 24) = here->MOS3gds; *(SaveState + 25) = here->MOS3gbd; *(SaveState + 26) = here->MOS3gbs; *(SaveState + 27) = here->MOS3capbd; *(SaveState + 28) = here->MOS3capbs; *(SaveState + 29) = here->MOS3Cbd; *(SaveState + 30) = here->MOS3Cbdsw; *(SaveState + 31) = here->MOS3Cbs; *(SaveState + 32) = here->MOS3Cbssw; *(SaveState + 33) = here->MOS3f2d; *(SaveState + 34) = here->MOS3f3d; *(SaveState + 35) = here->MOS3f4d; *(SaveState + 36) = here->MOS3f2s; *(SaveState + 37) = here->MOS3f3s; *(SaveState + 38) = here->MOS3f4s; *(SaveState + 39) = here->MOS3cgs; *(SaveState + 40) = here->MOS3cgd; *(SaveState + 41) = here->MOS3cgb; *(SaveState + 42) = here->MOS3vdsat; *(SaveState + 43) = here->MOS3von; save_mode = here->MOS3mode; if(here->MOS3senParmNo == 0) goto next1; #ifdef SENSDEBUG printf("without perturbation \n"); #endif /* SENSDEBUG */ cdpr0= here->MOS3cd; cspr0= -(here->MOS3cd + here->MOS3cbd + here->MOS3cbs); if((info->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)){ qgs0 = *(ckt->CKTstate1 + here->MOS3qgs); qgd0 = *(ckt->CKTstate1 + here->MOS3qgd); qgb0 = *(ckt->CKTstate1 + here->MOS3qgb); } else{ qgs0 = *(ckt->CKTstate0 + here->MOS3qgs); qgd0 = *(ckt->CKTstate0 + here->MOS3qgd); qgb0 = *(ckt->CKTstate0 + here->MOS3qgb); } here->MOS3senPertFlag = ON; error = MOS3load((GENmodel*)model,ckt); if(error) return(error); cd0 = here->MOS3cd ; cbd0 = here->MOS3cbd ; cbs0 = here->MOS3cbs ; gspr0= here->MOS3sourceConductance ; gdpr0= here->MOS3drainConductance ; qbs0 = *(ckt->CKTstate0 + here->MOS3qbs); qbd0 = *(ckt->CKTstate0 + here->MOS3qbd); for( flag = 0 ; flag <= 1 ; flag++){ if(here->MOS3sens_l == 0) if(flag == 0) goto next2; if(here->MOS3sens_w == 0) if(flag == 1) goto next2; if(flag == 0){ A0 = here->MOS3l; DELA = info->SENpertfac * A0; DELAinv = 1.0/DELA; Apert = A0 + DELA; here->MOS3l = Apert; } else{ A0 = here->MOS3w; DELA = info->SENpertfac * A0; DELAinv = 1.0/DELA; Apert = A0 + DELA; here->MOS3w = Apert; here->MOS3drainArea *= (1 + info->SENpertfac); here->MOS3sourceArea *= (1 + info->SENpertfac); here->MOS3Cbd *= (1 + info->SENpertfac); here->MOS3Cbs *= (1 + info->SENpertfac); if(here->MOS3drainPerimiter){ here->MOS3Cbdsw += here->MOS3Cbdsw * DELA/here->MOS3drainPerimiter; } if(here->MOS3sourcePerimiter){ here->MOS3Cbssw += here->MOS3Cbssw * DELA/here->MOS3sourcePerimiter; } if(*(ckt->CKTstate0 + here->MOS3vbd) >= here->MOS3tDepCap){ arg = 1-model->MOS3fwdCapDepCoeff; sarg = exp( (-model->MOS3bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS3bulkJctSideGradingCoeff) * log(arg) ); here->MOS3f2d = here->MOS3Cbd* (1-model->MOS3fwdCapDepCoeff* (1+model->MOS3bulkJctBotGradingCoeff))* sarg/arg + here->MOS3Cbdsw*(1-model->MOS3fwdCapDepCoeff* (1+model->MOS3bulkJctSideGradingCoeff))* sargsw/arg; here->MOS3f3d = here->MOS3Cbd * model->MOS3bulkJctBotGradingCoeff * sarg/arg/ model->MOS3bulkJctPotential + here->MOS3Cbdsw * model->MOS3bulkJctSideGradingCoeff *sargsw/arg / model->MOS3bulkJctPotential; here->MOS3f4d = here->MOS3Cbd* model->MOS3bulkJctPotential*(1-arg*sarg)/ (1-model->MOS3bulkJctBotGradingCoeff) + here->MOS3Cbdsw*model->MOS3bulkJctPotential* (1-arg*sargsw)/ (1-model->MOS3bulkJctSideGradingCoeff) -here->MOS3f3d/2* (here->MOS3tDepCap*here->MOS3tDepCap) -here->MOS3tDepCap * here->MOS3f2d; } if(*(ckt->CKTstate0 + here->MOS3vbs) >= here->MOS3tDepCap){ arg = 1-model->MOS3fwdCapDepCoeff; sarg = exp( (-model->MOS3bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS3bulkJctSideGradingCoeff) * log(arg) ); here->MOS3f2s = here->MOS3Cbs* (1-model->MOS3fwdCapDepCoeff* (1+model->MOS3bulkJctBotGradingCoeff))* sarg/arg + here->MOS3Cbssw*(1-model->MOS3fwdCapDepCoeff* (1+model->MOS3bulkJctSideGradingCoeff))* sargsw/arg; here->MOS3f3s = here->MOS3Cbs * model->MOS3bulkJctBotGradingCoeff * sarg/arg/ model->MOS3bulkJctPotential + here->MOS3Cbssw * model->MOS3bulkJctSideGradingCoeff * sargsw/arg/ model->MOS3bulkJctPotential; here->MOS3f4s = here->MOS3Cbs* model->MOS3bulkJctPotential*(1-arg*sarg)/ (1-model->MOS3bulkJctBotGradingCoeff) + here->MOS3Cbssw*model->MOS3bulkJctPotential* (1-arg*sargsw)/ (1-model->MOS3bulkJctSideGradingCoeff) -here->MOS3f3s/2* (here->MOS3tBulkPot*here->MOS3tBulkPot) -here->MOS3tBulkPot * here->MOS3f2s; } here->MOS3drainConductance *= Apert/A0; here->MOS3sourceConductance *= Apert/A0; } #ifdef SENSDEBUG if(flag == 0) printf("perturbation of l\n"); if(flag == 1) printf("perturbation of w\n"); #endif /* SENSDEBUG */ error = MOS3load((GENmodel*)model,ckt); if(error) return(error); if(flag == 0){ here->MOS3l = A0; } else{ here->MOS3w = A0; here->MOS3drainArea /= (1 + info->SENpertfac); here->MOS3sourceArea /= (1 + info->SENpertfac); here->MOS3drainConductance *= A0/Apert; here->MOS3sourceConductance *= A0/Apert; } cd = here->MOS3cd ; cbd = here->MOS3cbd ; cbs = here->MOS3cbs ; gspr= here->MOS3sourceConductance ; gdpr= here->MOS3drainConductance ; DcdDp = (cd - cd0) * DELAinv; DcbsDp = (cbs - cbs0) * DELAinv; DcbdDp = (cbd - cbd0) * DELAinv; DcbDp = ( DcbsDp + DcbdDp ); DcdprDp = 0; DcsprDp = 0; if(here->MOS3dNode != here->MOS3dNodePrime) if(gdpr0) DcdprDp = cdpr0 * (gdpr - gdpr0)/gdpr0 * DELAinv; if(here->MOS3sNode != here->MOS3sNodePrime) if(gspr0) DcsprDp = cspr0 * (gspr - gspr0)/gspr0 * DELAinv; DcdprmDp = ( - DcdprDp + DcdDp); DcsprmDp = ( - DcbsDp - DcdDp - DcbdDp - DcsprDp); if(flag == 0){ EffectiveLength = here->MOS3l - 2*model->MOS3latDiff + model->MOS3lengthAdjust; if(EffectiveLength == 0){ DqgsDp = 0; DqgdDp = 0; DqgbDp = 0; } else{ DqgsDp = model->MOS3type * qgs0 / EffectiveLength; DqgdDp = model->MOS3type * qgd0 / EffectiveLength; DqgbDp = model->MOS3type * qgb0 / EffectiveLength; } } else{ EffectiveWidth = here->MOS3w - 2*model->MOS3widthNarrow + model->MOS3widthAdjust; DqgsDp = model->MOS3type * qgs0 / EffectiveWidth; DqgdDp = model->MOS3type * qgd0 / EffectiveWidth; DqgbDp = model->MOS3type * qgb0 / EffectiveWidth; } qbd = *(ckt->CKTstate0 + here->MOS3qbd); qbs = *(ckt->CKTstate0 + here->MOS3qbs); DqbsDp = model->MOS3type * (qbs - qbs0)*DELAinv; DqbdDp = model->MOS3type * (qbd - qbd0)*DELAinv; if(flag == 0){ *(here->MOS3dphigs_dl) = DqgsDp; *(here->MOS3dphigd_dl) = DqgdDp; *(here->MOS3dphibs_dl) = DqbsDp; *(here->MOS3dphibd_dl) = DqbdDp; *(here->MOS3dphigb_dl) = DqgbDp; } else{ *(here->MOS3dphigs_dw) = DqgsDp; *(here->MOS3dphigd_dw) = DqgdDp; *(here->MOS3dphibs_dw) = DqbsDp; *(here->MOS3dphibd_dw) = DqbdDp; *(here->MOS3dphigb_dw) = DqgbDp; } #ifdef SENSDEBUG printf("CKTag[0]=%.7e,CKTag[1]=%.7e,flag= %d\n", ckt->CKTag[0],ckt->CKTag[1],flag); printf("cd0 = %.7e ,cd = %.7e,\n",cd0,cd); printf("cbs0 = %.7e ,cbs = %.7e,\n",cbs0,cbs); printf("cbd0 = %.7e ,cbd = %.7e,\n",cbd0,cbd); printf("DcdprmDp = %.7e,\n",DcdprmDp); printf("DcsprmDp = %.7e,\n",DcsprmDp); printf("DcdprDp = %.7e,\n",DcdprDp); printf("DcsprDp = %.7e,\n",DcsprDp); printf("qgs0 = %.7e \n",qgs0); printf("qgd0 = %.7e \n",qgd0); printf("qgb0 = %.7e \n",qgb0); printf("qbs0 = %.7e ,qbs = %.7e,\n",qbs0,qbs); printf("qbd0 = %.7e ,qbd = %.7e,\n",qbd0,qbd); printf("DqgsDp = %.7e \n",DqgsDp); printf("DqgdDp = %.7e \n",DqgdDp); printf("DqgbDp = %.7e \n",DqgbDp); printf("DqbsDp = %.7e \n",DqbsDp); printf("DqbdDp = %.7e \n",DqbdDp); printf("EffectiveLength = %.7e \n",EffectiveLength); printf("tdepCap = %.7e \n",here->MOS3tDepCap); printf("\n"); #endif /* SENSDEBUG*/ if((info->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)) goto next2; /* * load RHS matrix */ if(flag == 0){ *(info->SEN_RHS[here->MOS3bNode] + here->MOS3senParmNo) -= model->MOS3type * DcbDp; *(info->SEN_RHS[here->MOS3dNode] + here->MOS3senParmNo) -= model->MOS3type * DcdprDp; *(info->SEN_RHS[here->MOS3dNodePrime] + here->MOS3senParmNo) -= model->MOS3type * DcdprmDp; *(info->SEN_RHS[here->MOS3sNode] + here->MOS3senParmNo) -= model->MOS3type * DcsprDp; *(info->SEN_RHS[here->MOS3sNodePrime] + here->MOS3senParmNo) -= model->MOS3type * DcsprmDp; } else{ offset = here->MOS3sens_l; *(info->SEN_RHS[here->MOS3bNode] + here->MOS3senParmNo + offset) -= model->MOS3type * DcbDp; *(info->SEN_RHS[here->MOS3dNode] + here->MOS3senParmNo + offset) -= model->MOS3type * DcdprDp; *(info->SEN_RHS[here->MOS3dNodePrime] + here->MOS3senParmNo + offset) -= model->MOS3type * DcdprmDp; *(info->SEN_RHS[here->MOS3sNode] + here->MOS3senParmNo + offset) -= model->MOS3type * DcsprDp; *(info->SEN_RHS[here->MOS3sNodePrime] + here->MOS3senParmNo + offset) -= model->MOS3type * DcsprmDp; } #ifdef SENSDEBUG printf("after loading\n"); if(flag == 0){ printf("DcbDp=%.7e\n", *(info->SEN_RHS[here->MOS3bNode] + here->MOS3senParmNo)); printf("DcdprDp=%.7e\n", *(info->SEN_RHS[here->MOS3dNode] + here->MOS3senParmNo)); printf("DcsprDp=%.7e\n", *(info->SEN_RHS[here->MOS3sNode] + here->MOS3senParmNo)); printf("DcdprmDp=%.7e\n", *(info->SEN_RHS[here->MOS3dNodePrime] + here->MOS3senParmNo)); printf("DcsprmDp=%.7e\n", *(info->SEN_RHS[here->MOS3sNodePrime] + here->MOS3senParmNo)); printf("\n"); } else{ printf("DcbDp=%.7e\n", *(info->SEN_RHS[here->MOS3bNode] + here->MOS3senParmNo + here->MOS3sens_l)); printf("DcdprDp=%.7e\n", *(info->SEN_RHS[here->MOS3dNode] + here->MOS3senParmNo + here->MOS3sens_l)); printf("DcsprDp=%.7e\n", *(info->SEN_RHS[here->MOS3sNode] + here->MOS3senParmNo + here->MOS3sens_l)); printf("DcdprmDp=%.7e\n", *(info->SEN_RHS[here->MOS3dNodePrime] + here->MOS3senParmNo + here->MOS3sens_l)); printf("DcsprmDp=%.7e\n", *(info->SEN_RHS[here->MOS3sNodePrime] + here->MOS3senParmNo + here->MOS3sens_l)); } #endif /* SENSDEBUG*/ next2: ; } next1: if((info->SENmode == DCSEN) || (ckt->CKTmode&MODETRANOP) ) goto restore; if((info->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)) goto restore; for(iparmno = 1;iparmno<=info->SENparms;iparmno++){ #ifdef SENSDEBUG printf("after conductive currents\n"); printf("iparmno = %d\n",iparmno); printf("DcbDp=%.7e\n", *(info->SEN_RHS[here->MOS3bNode] + iparmno)); printf("DcdprDp=%.7e\n", *(info->SEN_RHS[here->MOS3dNode] + iparmno)); printf("DcdprmDp=%.7e\n", *(info->SEN_RHS[here->MOS3dNodePrime] + iparmno)); printf("DcsprDp=%.7e\n", *(info->SEN_RHS[here->MOS3sNode] + iparmno)); printf("DcsprmDp=%.7e\n", *(info->SEN_RHS[here->MOS3sNodePrime] + iparmno)); printf("\n"); #endif /* SENSDEBUG */ Osxpgs = tag0 * *(ckt->CKTstate1 + here->MOS3sensxpgs + 10*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->MOS3sensxpgs + 10*(iparmno - 1) + 1); Osxpgd = tag0 * *(ckt->CKTstate1 + here->MOS3sensxpgd + 10*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->MOS3sensxpgd + 10*(iparmno - 1) + 1); Osxpbs = tag0 * *(ckt->CKTstate1 + here->MOS3sensxpbs + 10*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->MOS3sensxpbs + 10*(iparmno - 1) + 1); Osxpbd =tag0 * *(ckt->CKTstate1 + here->MOS3sensxpbd + 10*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->MOS3sensxpbd + 10*(iparmno - 1) + 1); Osxpgb = tag0 * *(ckt->CKTstate1 + here->MOS3sensxpgb + 10*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->MOS3sensxpgb + 10*(iparmno - 1) + 1); #ifdef SENSDEBUG printf("iparmno=%d\n",iparmno); printf("sxpgs=%.7e,sdgs=%.7e\n", *(ckt->CKTstate1 + here->MOS3sensxpgs + 10*(iparmno - 1)), *(ckt->CKTstate1 + here->MOS3sensxpgs + 10*(iparmno - 1) + 1)); printf("sxpgd=%.7e,sdgd=%.7e\n", *(ckt->CKTstate1 + here->MOS3sensxpgd + 10*(iparmno - 1)), *(ckt->CKTstate1 + here->MOS3sensxpgd + 10*(iparmno - 1) + 1)); printf("sxpbs=%.7e,sdbs=%.7e\n", *(ckt->CKTstate1 + here->MOS3sensxpbs + 10*(iparmno - 1)), *(ckt->CKTstate1 + here->MOS3sensxpbs + 10*(iparmno - 1) + 1)); printf("sxpbd=%.7e,sdbd=%.7e\n", *(ckt->CKTstate1 + here->MOS3sensxpbd + 10*(iparmno - 1)), *(ckt->CKTstate1 + here->MOS3sensxpbd + 10*(iparmno - 1) + 1)); printf("sxpgb=%.7e,sdgb=%.7e\n", *(ckt->CKTstate1 + here->MOS3sensxpgb + 10*(iparmno - 1)), *(ckt->CKTstate1 + here->MOS3sensxpgb + 10*(iparmno - 1) + 1)); printf("before loading DqDp\n"); printf("Osxpgs=%.7e,Osxpgd=%.7e\n",Osxpgs,Osxpgd); printf("Osxpbs=%.7e,Osxpbd=%.7e,Osxpgb=%.7e\n", Osxpbs,Osxpbd,Osxpgb); printf("\n"); #endif /* SENSDEBUG */ if(here->MOS3sens_l && (iparmno == here->MOS3senParmNo)){ Osxpgs -= tag0 * *(here->MOS3dphigs_dl); Osxpgd -= tag0 * *(here->MOS3dphigd_dl); Osxpbs -= tag0 * *(here->MOS3dphibs_dl); Osxpbd -= tag0 * *(here->MOS3dphibd_dl); Osxpgb -= tag0 * *(here->MOS3dphigb_dl); } if(here->MOS3sens_w && (iparmno == (here->MOS3senParmNo + (int) here->MOS3sens_l))){ Osxpgs -= tag0 * *(here->MOS3dphigs_dw); Osxpgd -= tag0 * *(here->MOS3dphigd_dw); Osxpbs -= tag0 * *(here->MOS3dphibs_dw); Osxpbd -= tag0 * *(here->MOS3dphibd_dw); Osxpgb -= tag0 * *(here->MOS3dphigb_dw); } #ifdef SENSDEBUG printf("after loading DqDp\n"); printf("DqgsDp=%.7e",DqgsDp); printf("Osxpgs=%.7e,Osxpgd=%.7e\n",Osxpgs,Osxpgd); printf("Osxpbs=%.7e,Osxpbd=%.7e,Osxpgb=%.7e\n", Osxpbs,Osxpbd,Osxpgb); #endif /* SENSDEBUG */ *(info->SEN_RHS[here->MOS3bNode] + iparmno) += Osxpbs + Osxpbd -Osxpgb; *(info->SEN_RHS[here->MOS3gNode] + iparmno) += Osxpgs + Osxpgd + Osxpgb; *(info->SEN_RHS[here->MOS3dNodePrime] + iparmno) -= Osxpgd + Osxpbd ; *(info->SEN_RHS[here->MOS3sNodePrime] + iparmno) -= Osxpgs + Osxpbs; #ifdef SENSDEBUG printf("after capacitive currents\n"); printf("DcbDp=%.7e\n", *(info->SEN_RHS[here->MOS3bNode] + iparmno)); printf("DcdprDp=%.7e\n", *(info->SEN_RHS[here->MOS3dNode] + iparmno)); printf("DcdprmDp=%.7e\n", *(info->SEN_RHS[here->MOS3dNodePrime] + iparmno)); printf("DcsprDp=%.7e\n", *(info->SEN_RHS[here->MOS3sNode] + iparmno)); printf("DcsprmDp=%.7e\n", *(info->SEN_RHS[here->MOS3sNodePrime] + iparmno)); #endif /* SENSDEBUG */ } restore: /* put the unperturbed values back into the state vector */ for(i=0; i <= 16; i++) *(ckt->CKTstate0 + here->MOS3states + i) = *(SaveState + i); here->MOS3sourceConductance = *(SaveState + 17) ; here->MOS3drainConductance = *(SaveState + 18) ; here->MOS3cd = *(SaveState + 19) ; here->MOS3cbs = *(SaveState + 20) ; here->MOS3cbd = *(SaveState + 21) ; here->MOS3gmbs = *(SaveState + 22) ; here->MOS3gm = *(SaveState + 23) ; here->MOS3gds = *(SaveState + 24) ; here->MOS3gbd = *(SaveState + 25) ; here->MOS3gbs = *(SaveState + 26) ; here->MOS3capbd = *(SaveState + 27) ; here->MOS3capbs = *(SaveState + 28) ; here->MOS3Cbd = *(SaveState + 29) ; here->MOS3Cbdsw = *(SaveState + 30) ; here->MOS3Cbs = *(SaveState + 31) ; here->MOS3Cbssw = *(SaveState + 32) ; here->MOS3f2d = *(SaveState + 33) ; here->MOS3f3d = *(SaveState + 34) ; here->MOS3f4d = *(SaveState + 35) ; here->MOS3f2s = *(SaveState + 36) ; here->MOS3f3s = *(SaveState + 37) ; here->MOS3f4s = *(SaveState + 38) ; here->MOS3cgs = *(SaveState + 39) ; here->MOS3cgd = *(SaveState + 40) ; here->MOS3cgb = *(SaveState + 41) ; here->MOS3vdsat = *(SaveState + 42) ; here->MOS3von = *(SaveState + 43) ; here->MOS3mode = save_mode ; here->MOS3senPertFlag = OFF; } } info->SENstatus = NORMAL; #ifdef SENSDEBUG printf("MOS3senload end\n"); #endif /* SENSDEBUG */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos3/mos3temp.c0000644000175000017500000003554013546075722021766 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos3defs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* assuming silicon - make definition for epsilon of silicon */ #define EPSSIL (11.7 * 8.854214871e-12) int MOS3temp(GENmodel *inModel, CKTcircuit *ckt) { MOS3model *model = (MOS3model *)inModel; MOS3instance *here; double wkfngs; double wkfng; double fermig; double fermis; double vfb; double fact1,fact2; double vt,vtnom; double kt,kt1; double ratio,ratio4; double egfet,egfet1; double pbfact,pbfact1,pbo; double phio; double arg1; double capfact; double gmanew,gmaold; double ni_temp, nifact; /* loop through all the mosfet models */ for( ; model != NULL; model = MOS3nextModel(model)) { if(!model->MOS3tnomGiven) { model->MOS3tnom = ckt->CKTnomTemp; } fact1 = model->MOS3tnom/REFTEMP; vtnom = model->MOS3tnom*CONSTKoverQ; kt1 = CONSTboltz * model->MOS3tnom; egfet1 = 1.16-(7.02e-4*model->MOS3tnom*model->MOS3tnom)/ (model->MOS3tnom+1108); arg1 = -egfet1/(kt1+kt1)+1.1150877/(CONSTboltz*(REFTEMP+REFTEMP)); pbfact1 = -2*vtnom *(1.5*log(fact1)+CHARGE*arg1); nifact=(model->MOS3tnom/300)*sqrt(model->MOS3tnom/300); nifact*=exp(0.5*egfet1*((1/(double)300)-(1/model->MOS3tnom))/ CONSTKoverQ); ni_temp=1.45e16*nifact; if (model->MOS3phi <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "%s: Phi is not positive.", model->MOS3modName); return(E_BADPARM); } model->MOS3oxideCapFactor = 3.9 * 8.854214871e-12/ model->MOS3oxideThickness; if(!model->MOS3surfaceMobilityGiven) model->MOS3surfaceMobility=600; if(!model->MOS3transconductanceGiven) { model->MOS3transconductance = model->MOS3surfaceMobility * model->MOS3oxideCapFactor * 1e-4; } if(model->MOS3substrateDopingGiven) { if(model->MOS3substrateDoping*1e6 /*(cm**3/m**3)*/ >ni_temp) { if(!model->MOS3phiGiven) { model->MOS3phi = 2*vtnom* log(model->MOS3substrateDoping* 1e6/*(cm**3/m**3)*//ni_temp); model->MOS3phi = MAX(.1,model->MOS3phi); } fermis = model->MOS3type * .5 * model->MOS3phi; wkfng = 3.2; if(!model->MOS3gateTypeGiven) model->MOS3gateType=1; if(model->MOS3gateType != 0) { fermig = model->MOS3type * model->MOS3gateType*.5*egfet1; wkfng = 3.25 + .5 * egfet1 - fermig; } wkfngs = wkfng - (3.25 + .5 * egfet1 +fermis); if(!model->MOS3gammaGiven) { model->MOS3gamma = sqrt(2 * EPSSIL * CHARGE * model->MOS3substrateDoping* 1e6 /*(cm**3/m**3)*/ )/ model->MOS3oxideCapFactor; } if(!model->MOS3vt0Given) { if(!model->MOS3surfaceStateDensityGiven) model->MOS3surfaceStateDensity=0; vfb = wkfngs - model->MOS3surfaceStateDensity * 1e4 * CHARGE/model->MOS3oxideCapFactor; model->MOS3vt0 = vfb + model->MOS3type * (model->MOS3gamma * sqrt(model->MOS3phi)+ model->MOS3phi); } else { vfb = model->MOS3vt0 - model->MOS3type * (model->MOS3gamma* sqrt(model->MOS3phi)+model->MOS3phi); } model->MOS3alpha = (EPSSIL+EPSSIL)/ (CHARGE*model->MOS3substrateDoping*1e6 /*(cm**3/m**3)*/ ); model->MOS3coeffDepLayWidth = sqrt(model->MOS3alpha); } else { model->MOS3substrateDoping = 0; SPfrontEnd->IFerrorf (ERR_FATAL, "%s: Nsub < Ni ", model->MOS3modName); return(E_BADPARM); } } /* now model parameter preprocessing */ model->MOS3narrowFactor = model->MOS3delta * 0.5 * M_PI * EPSSIL / model->MOS3oxideCapFactor ; /* loop through all instances of the model */ for(here = MOS3instances(model); here!= NULL; here = MOS3nextInstance(here)) { double czbd; /* zero voltage bulk-drain capacitance */ double czbdsw; /* zero voltage bulk-drain sidewall capacitance */ double czbs; /* zero voltage bulk-source capacitance */ double czbssw; /* zero voltage bulk-source sidewall capacitance */ double arg; /* 1 - fc */ double sarg; /* (1-fc) ^^ (-mj) */ double sargsw; /* (1-fc) ^^ (-mjsw) */ /* perform the parameter defaulting */ if(!here->MOS3dtempGiven) { here->MOS3dtemp = 0.0; } if(!here->MOS3tempGiven) { here->MOS3temp = ckt->CKTtemp + here->MOS3dtemp; } vt = here->MOS3temp * CONSTKoverQ; ratio = here->MOS3temp/model->MOS3tnom; fact2 = here->MOS3temp/REFTEMP; kt = here->MOS3temp * CONSTboltz; egfet = 1.16-(7.02e-4*here->MOS3temp*here->MOS3temp)/ (here->MOS3temp+1108); arg = -egfet/(kt+kt)+1.1150877/(CONSTboltz*(REFTEMP+REFTEMP)); pbfact = -2*vt *(1.5*log(fact2)+CHARGE*arg); if(!here->MOS3mGiven) { here->MOS3m = ckt->CKTdefaultMosM; } if(!here->MOS3lGiven) { here->MOS3l = ckt->CKTdefaultMosL; } if(!here->MOS3sourceAreaGiven) { here->MOS3sourceArea = ckt->CKTdefaultMosAS; } if(!here->MOS3wGiven) { here->MOS3w = ckt->CKTdefaultMosW; } if(model->MOS3drainResistanceGiven) { if(model->MOS3drainResistance != 0) { here->MOS3drainConductance = here->MOS3m / model->MOS3drainResistance; } else { here->MOS3drainConductance = 0; } } else if (model->MOS3sheetResistanceGiven) { if ((model->MOS3sheetResistance != 0) && (here->MOS3drainSquares != 0)) { here->MOS3drainConductance = here->MOS3m / (model->MOS3sheetResistance*here->MOS3drainSquares); } else { here->MOS3drainConductance = 0; } } else { here->MOS3drainConductance = 0; } if(model->MOS3sourceResistanceGiven) { if(model->MOS3sourceResistance != 0) { here->MOS3sourceConductance = here->MOS3m / model->MOS3sourceResistance; } else { here->MOS3sourceConductance = 0; } } else if (model->MOS3sheetResistanceGiven) { if ((model->MOS3sheetResistance != 0) && (here->MOS3sourceSquares != 0)) { here->MOS3sourceConductance = here->MOS3m / (model->MOS3sheetResistance*here->MOS3sourceSquares); } else { here->MOS3sourceConductance = 0; } } else { here->MOS3sourceConductance = 0; } if(here->MOS3l - 2 * model->MOS3latDiff + model->MOS3lengthAdjust <= 0) { SPfrontEnd->IFerrorf (ERR_FATAL, "%s: effective channel length less than zero", here->MOS3name); return(E_PARMVAL); } if(here->MOS3w - 2 * model->MOS3widthNarrow + model->MOS3widthAdjust <= 0) { SPfrontEnd->IFerrorf (ERR_FATAL, "%s: effective channel width less than zero", here->MOS3name); return(E_PARMVAL); } ratio4 = ratio * sqrt(ratio); here->MOS3tTransconductance = model->MOS3transconductance / ratio4; here->MOS3tSurfMob = model->MOS3surfaceMobility/ratio4; phio= (model->MOS3phi-pbfact1)/fact1; here->MOS3tPhi = fact2 * phio + pbfact; here->MOS3tVbi = model->MOS3delvt0 + model->MOS3vt0 - model->MOS3type * (model->MOS3gamma* sqrt(model->MOS3phi)) +.5*(egfet1-egfet) + model->MOS3type*.5* (here->MOS3tPhi-model->MOS3phi); here->MOS3tVto = here->MOS3tVbi + model->MOS3type * model->MOS3gamma * sqrt(here->MOS3tPhi); here->MOS3tSatCur = model->MOS3jctSatCur* exp(-egfet/vt+egfet1/vtnom); here->MOS3tSatCurDens = model->MOS3jctSatCurDensity * exp(-egfet/vt+egfet1/vtnom); pbo = (model->MOS3bulkJctPotential - pbfact1)/fact1; gmaold = (model->MOS3bulkJctPotential-pbo)/pbo; capfact = 1/(1+model->MOS3bulkJctBotGradingCoeff* (4e-4*(model->MOS3tnom-REFTEMP)-gmaold)); here->MOS3tCbd = model->MOS3capBD * capfact; here->MOS3tCbs = model->MOS3capBS * capfact; here->MOS3tCj = model->MOS3bulkCapFactor * capfact; capfact = 1/(1+model->MOS3bulkJctSideGradingCoeff* (4e-4*(model->MOS3tnom-REFTEMP)-gmaold)); here->MOS3tCjsw = model->MOS3sideWallCapFactor * capfact; here->MOS3tBulkPot = fact2 * pbo+pbfact; gmanew = (here->MOS3tBulkPot-pbo)/pbo; capfact = (1+model->MOS3bulkJctBotGradingCoeff* (4e-4*(here->MOS3temp-REFTEMP)-gmanew)); here->MOS3tCbd *= capfact; here->MOS3tCbs *= capfact; here->MOS3tCj *= capfact; capfact = (1+model->MOS3bulkJctSideGradingCoeff* (4e-4*(here->MOS3temp-REFTEMP)-gmanew)); here->MOS3tCjsw *= capfact; here->MOS3tDepCap = model->MOS3fwdCapDepCoeff * here->MOS3tBulkPot; if( (model->MOS3jctSatCurDensity == 0) || (here->MOS3drainArea == 0) || (here->MOS3sourceArea == 0) ) { here->MOS3sourceVcrit = here->MOS3drainVcrit = vt*log(vt/(CONSTroot2*here->MOS3m*here->MOS3tSatCur)); } else { here->MOS3drainVcrit = vt * log( vt / (CONSTroot2 * here->MOS3m * here->MOS3tSatCurDens * here->MOS3drainArea)); here->MOS3sourceVcrit = vt * log( vt / (CONSTroot2 * here->MOS3m * here->MOS3tSatCurDens * here->MOS3sourceArea)); } if(model->MOS3capBDGiven) { czbd = here->MOS3tCbd * here->MOS3m; } else { if(model->MOS3bulkCapFactorGiven) { czbd=here->MOS3tCj*here->MOS3drainArea * here->MOS3m; } else { czbd=0; } } if(model->MOS3sideWallCapFactorGiven) { czbdsw= here->MOS3tCjsw * here->MOS3drainPerimiter * here->MOS3m; } else { czbdsw=0; } arg = 1-model->MOS3fwdCapDepCoeff; sarg = exp( (-model->MOS3bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS3bulkJctSideGradingCoeff) * log(arg) ); here->MOS3Cbd = czbd; here->MOS3Cbdsw = czbdsw; here->MOS3f2d = czbd*(1-model->MOS3fwdCapDepCoeff* (1+model->MOS3bulkJctBotGradingCoeff))* sarg/arg + czbdsw*(1-model->MOS3fwdCapDepCoeff* (1+model->MOS3bulkJctSideGradingCoeff))* sargsw/arg; here->MOS3f3d = czbd * model->MOS3bulkJctBotGradingCoeff * sarg/arg/ here->MOS3tBulkPot + czbdsw * model->MOS3bulkJctSideGradingCoeff * sargsw/arg / here->MOS3tBulkPot; here->MOS3f4d = czbd*here->MOS3tBulkPot*(1-arg*sarg)/ (1-model->MOS3bulkJctBotGradingCoeff) + czbdsw*here->MOS3tBulkPot*(1-arg*sargsw)/ (1-model->MOS3bulkJctSideGradingCoeff) -here->MOS3f3d/2* (here->MOS3tDepCap*here->MOS3tDepCap) -here->MOS3tDepCap * here->MOS3f2d; if(model->MOS3capBSGiven) { czbs = here->MOS3tCbs * here->MOS3m; } else { if(model->MOS3bulkCapFactorGiven) { czbs=here->MOS3tCj*here->MOS3sourceArea * here->MOS3m; } else { czbs=0; } } if(model->MOS3sideWallCapFactorGiven) { czbssw = here->MOS3tCjsw * here->MOS3sourcePerimiter * here->MOS3m; } else { czbssw=0; } arg = 1-model->MOS3fwdCapDepCoeff; sarg = exp( (-model->MOS3bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS3bulkJctSideGradingCoeff) * log(arg) ); here->MOS3Cbs = czbs; here->MOS3Cbssw = czbssw; here->MOS3f2s = czbs*(1-model->MOS3fwdCapDepCoeff* (1+model->MOS3bulkJctBotGradingCoeff))* sarg/arg + czbssw*(1-model->MOS3fwdCapDepCoeff* (1+model->MOS3bulkJctSideGradingCoeff))* sargsw/arg; here->MOS3f3s = czbs * model->MOS3bulkJctBotGradingCoeff * sarg/arg/ here->MOS3tBulkPot + czbssw * model->MOS3bulkJctSideGradingCoeff * sargsw/arg / here->MOS3tBulkPot; here->MOS3f4s = czbs*here->MOS3tBulkPot*(1-arg*sarg)/ (1-model->MOS3bulkJctBotGradingCoeff) + czbssw*here->MOS3tBulkPot*(1-arg*sargsw)/ (1-model->MOS3bulkJctSideGradingCoeff) -here->MOS3f3s/2* (here->MOS3tDepCap*here->MOS3tDepCap) -here->MOS3tDepCap * here->MOS3f2s; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos3/mos3sprt.c0000644000175000017500000000401113546075722021776 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes This function is obsolete (was used by an old sensitivity analysis) **********/ /* Pretty print the sensitivity info for all the MOS3 * devices in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mos3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" void MOS3sPrint(GENmodel *inModel, CKTcircuit *ckt) { MOS3model *model = (MOS3model *)inModel; MOS3instance *here; printf("LEVEL 3 MOSFETS-----------------\n"); /* loop through all the MOS3 models */ for( ; model != NULL; model = MOS3nextModel(model)) { printf("Model name:%s\n",model->MOS3modName); /* loop through all the instances of the model */ for (here = MOS3instances(model); here != NULL ; here=MOS3nextInstance(here)) { printf(" Instance name:%s\n",here->MOS3name); printf(" Drain, Gate , Source nodes: %s, %s ,%s\n", CKTnodName(ckt,here->MOS3dNode),CKTnodName(ckt,here->MOS3gNode), CKTnodName(ckt,here->MOS3sNode)); printf(" Multiplier: %g ",here->MOS3m); printf(here->MOS3mGiven ? "(specified)\n" : "(default)\n"); printf(" Length: %g ",here->MOS3l); printf(here->MOS3lGiven ? "(specified)\n" : "(default)\n"); printf(" Width: %g ",here->MOS3w); printf(here->MOS3wGiven ? "(specified)\n" : "(default)\n"); if(here->MOS3sens_l == 1){ printf(" MOS3senParmNo:l = %d ",here->MOS3senParmNo); } else{ printf(" MOS3senParmNo:l = 0 "); } if(here->MOS3sens_w == 1){ printf(" w = %d \n",here->MOS3senParmNo + here->MOS3sens_l); } else{ printf(" w = 0 \n"); } } } } tmpk8ny_4pz/src/spicelib/devices/mos3/mos3trun.c0000644000175000017500000000134513546075722022005 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS3trunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { MOS3model *model = (MOS3model *)inModel; MOS3instance *here; for( ; model != NULL; model = MOS3nextModel(model)) { for(here=MOS3instances(model);here!=NULL;here = MOS3nextInstance(here)){ CKTterr(here->MOS3qgs,ckt,timeStep); CKTterr(here->MOS3qgd,ckt,timeStep); CKTterr(here->MOS3qgb,ckt,timeStep); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/cktinit.c0000644000175000017500000000774513546075722021011 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modifed: 2000 AlansFixes **********/ #include "ngspice/config.h" #include "ngspice/memory.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/fteext.h" #include "ngspice/ifsim.h" #include "dev.h" #ifdef XSPICE #include "ngspice/evt.h" #include "ngspice/enh.h" /* gtri - add - wbk - 11/26/90 - add include for MIF global data */ #include "ngspice/mif.h" /* gtri - end - wbk - 11/26/90 */ #endif int CKTinit(CKTcircuit **ckt) /* new circuit to create */ { int i; CKTcircuit *sckt = TMALLOC(CKTcircuit, 1); *ckt = sckt; if (sckt == NULL) return(E_NOMEM); /* gtri - begin - dynamically allocate the array of model lists */ /* CKThead used to be statically sized in CKTdefs.h, but has been changed */ /* to a ** pointer */ sckt->CKThead = TMALLOC(GENmodel *, DEVmaxnum); if(sckt->CKThead == NULL) return(E_NOMEM); /* gtri - end - dynamically allocate the array of model lists */ for (i = 0; i < DEVmaxnum; i++) sckt->CKThead[i] = NULL; sckt->CKTmaxEqNum = 1; sckt->CKTnodes = NULL; sckt->CKTlastNode = NULL; sckt->CKTmatrix = NULL; sckt->CKTgmin = 1e-12; sckt->CKTgshunt=0; sckt->CKTabstol = 1e-12; sckt->CKTreltol = 1e-3; sckt->CKTchgtol = 1e-14; sckt->CKTvoltTol = 1e-6; sckt->CKTtrtol = 7; sckt->CKTbypass = 0; sckt->CKTisSetup = 0; #ifdef XSPICE sckt->CKTadevFlag = 0; /* flag indicates A devices in the circuit */ #endif sckt->CKTtranMaxIter = 10; sckt->CKTdcMaxIter = 100; sckt->CKTdcTrcvMaxIter = 50; sckt->CKTintegrateMethod = TRAPEZOIDAL; sckt->CKTorder = 1; sckt->CKTmaxOrder = 2; sckt->CKTindverbosity = 2; sckt->CKTxmu = 0.5; sckt->CKTpivotAbsTol = 1e-13; sckt->CKTpivotRelTol = 1e-3; sckt->CKTtemp = 300.15; sckt->CKTnomTemp = 300.15; sckt->CKTdefaultMosM = 1; sckt->CKTdefaultMosL = 1e-4; sckt->CKTdefaultMosW = 1e-4; sckt->CKTdefaultMosAD = 0; sckt->CKTdefaultMosAS = 0; sckt->CKTsrcFact=1; sckt->CKTdiagGmin=0; /* PN: additions for circuit inventory */ sckt->CKTstat = TMALLOC(STATistics, 1); if(sckt->CKTstat == NULL) return(E_NOMEM); sckt->CKTstat->STATdevNum = TMALLOC(STATdevList, DEVmaxnum); if(sckt->CKTstat->STATdevNum == NULL) return(E_NOMEM); sckt->CKTtroubleNode = 0; sckt->CKTtroubleElt = NULL; sckt->CKTtimePoints = NULL; sckt->CKTnodeDamping = 0; sckt->CKTabsDv = 0.5; sckt->CKTrelDv = 2.0; sckt->CKTvarHertz = 0; sckt->DEVnameHash = nghash_init_pointer(100); sckt->MODnameHash = nghash_init_pointer(100); sckt->CKTepsmin = 1e-28; #ifdef XSPICE /* gtri - begin - wbk - allocate/initialize substructs */ /* Allocate evt data structure */ sckt->evt = TMALLOC(Evt_Ckt_Data_t, 1); if(! sckt->evt) return(E_NOMEM); /* Initialize options data */ sckt->evt->options.op_alternate = MIF_TRUE; /* Allocate enh data structure */ sckt->enh = TMALLOC(Enh_Ckt_Data_t, 1); if(! sckt->enh) return(E_NOMEM); /* Initialize non-zero, non-NULL data */ sckt->enh->breakpoint.current = 1.0e30; sckt->enh->breakpoint.last = 1.0e30; sckt->enh->ramp.ramptime = 0.0; sckt->enh->conv_limit.enabled = MIF_TRUE; sckt->enh->conv_limit.step = 0.25; sckt->enh->conv_limit.abs_step = 0.1; sckt->enh->rshunt_data.enabled = MIF_FALSE; /* gtri - end - wbk - allocate/initialize substructs */ /* gtri - add - wbk - 01/12/91 - initialize g_mif_info */ g_mif_info.circuit.init = MIF_TRUE; g_mif_info.circuit.anal_init = MIF_TRUE; g_mif_info.circuit.anal_type = MIF_DC; g_mif_info.instance = NULL; g_mif_info.ckt = sckt; g_mif_info.errmsg = NULL; g_mif_info.auto_partial.global = MIF_FALSE; g_mif_info.auto_partial.local = MIF_FALSE; /* gtri - end - wbk - 01/12/91 */ #endif return OK; } tmpk8ny_4pz/src/spicelib/devices/nbjt2/0000755000175000017500000000000013546075722020202 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/nbjt2/nbjt2def.h0000644000175000017500000001344613546075722022061 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors: 1987 Karti Mayaram, 1991 David Gates **********/ #ifndef NBJT2_H #define NBJT2_H /* structures to describe 2d Numerical Bipolar Junction Transistors */ /* circuit level includes */ #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" /* device level includes */ #include "ngspice/twomesh.h" #include "ngspice/twodev.h" #include "ngspice/profile.h" #include "ngspice/numglobs.h" #include "ngspice/carddefs.h" /* information needed per instance */ typedef struct sNBJT2instance { struct GENinstance gen; #define NBJT2modPtr(inst) ((struct sNBJT2model *)((inst)->gen.GENmodPtr)) #define NBJT2nextInstance(inst) ((struct sNBJT2instance *)((inst)->gen.GENnextInstance)) #define NBJT2name gen.GENname #define NBJT2state gen.GENstate #define NBJT2vbe NBJT2state #define NBJT2vce NBJT2state+1 #define NBJT2ic NBJT2state+2 #define NBJT2ie NBJT2state+3 #define NBJT2dIeDVce NBJT2state+4 #define NBJT2dIeDVbe NBJT2state+5 #define NBJT2dIcDVce NBJT2state+6 #define NBJT2dIcDVbe NBJT2state+7 #define NBJT2numStates 8 const int NBJT2colNode; /* number of collector node of bjt */ const int NBJT2baseNode; /* number of base node of bjt */ const int NBJT2emitNode; /* number of emitter node of bjt */ double NBJT2width; /* width factor for the bjt */ double NBJT2area; /* area factor for the bjt */ TWOdevice *NBJT2pDevice; GLOBvalues NBJT2globals; /* Temp.-Dep. Global Parameters */ int NBJT2type; double NBJT2temp; /* Instance Temperature */ double NBJT2c11; /* small-signal capacitance */ double NBJT2y11r; /* small-signal admittance, real part */ double NBJT2y11i; /* small-signal admittance, imag part */ double NBJT2c12; /* small-signal capacitance */ double NBJT2y12r; /* small-signal admittance, real part */ double NBJT2y12i; /* small-signal admittance, imag part */ double NBJT2c21; /* small-signal capacitance */ double NBJT2y21r; /* small-signal admittance, real part */ double NBJT2y21i; /* small-signal admittance, imag part */ double NBJT2c22; /* small-signal capacitance */ double NBJT2y22r; /* small-signal admittance, real part */ double NBJT2y22i; /* small-signal admittance, imag part */ int NBJT2print; char *NBJT2icFile; /* Name of initial condition file */ double *NBJT2colColPtr; /* pointer to sparse matrix at * (collector,collector) */ double *NBJT2baseBasePtr; /* pointer to sparse matrix at (base,base) */ double *NBJT2emitEmitPtr; /* pointer to sparse matrix at * (emitter,emitter) */ double *NBJT2colBasePtr; /* pointer to sparse matrix at * (collector,base) */ double *NBJT2colEmitPtr; /* pointer to sparse matrix at * (collector,emitter) */ double *NBJT2baseColPtr; /* pointer to sparse matrix at * (base,collector) */ double *NBJT2baseEmitPtr; /* pointer to sparse matrix at (base,emitter) */ double *NBJT2emitColPtr; /* pointer to sparse matrix at * (emitter,collector) */ double *NBJT2emitBasePtr; /* pointer to sparse matrix at (emitter,base) */ int NBJT2off; /* 'off' flag for bjt */ unsigned NBJT2smSigAvail:1; /* flag to indicate small-signal done */ unsigned NBJT2widthGiven:1; /* flag to indicate width was specified */ unsigned NBJT2areaGiven:1; /* flag to indicate area was specified */ unsigned NBJT2icFileGiven:1; /* flag to indicate init. cond. file given */ unsigned NBJT2printGiven:1; /* flag to indicate print given */ unsigned NBJT2tempGiven:1; /* flag to indicate temp given */ } NBJT2instance; /* per model data */ typedef struct sNBJT2model { /* model structure for a bjt */ struct GENmodel gen; #define NBJT2modType gen.GENmodType #define NBJT2nextModel(inst) ((struct sNBJT2model *)((inst)->gen.GENnextModel)) #define NBJT2instances(inst) ((NBJT2instance *)((inst)->gen.GENinstances)) #define NBJT2modName gen.GENmodName MESHcard *NBJT2xMeshes; /* list of xmesh cards */ MESHcard *NBJT2yMeshes; /* list of ymesh cards */ DOMNcard *NBJT2domains; /* list of domain cards */ BDRYcard *NBJT2boundaries; /* list of boundary cards */ DOPcard *NBJT2dopings; /* list of doping cards */ ELCTcard *NBJT2electrodes; /* list of electrode cards */ CONTcard *NBJT2contacts; /* list of contact cards */ MODLcard *NBJT2models; /* list of model cards */ MATLcard *NBJT2materials; /* list of material cards */ MOBcard *NBJT2mobility; /* list of mobility cards */ METHcard *NBJT2methods; /* list of method cards */ OPTNcard *NBJT2options; /* list of option cards */ OUTPcard *NBJT2outputs; /* list of output cards */ TWOtranInfo *NBJT2pInfo; /* transient analysis information */ DOPprofile *NBJT2profiles; /* expanded list of doping profiles */ DOPtable *NBJT2dopTables; /* list of tables used by profiles */ TWOmaterial *NBJT2matlInfo; /* list of material info structures */ } NBJT2model; /* type of 2D BJT */ #define NPN 1 #define PNP -1 /* device parameters */ #define NBJT2_WIDTH 1 #define NBJT2_AREA 2 #define NBJT2_OFF 3 #define NBJT2_IC_FILE 4 #define NBJT2_PRINT 7 #define NBJT2_TEMP 8 #define NBJT2_G11 9 #define NBJT2_C11 10 #define NBJT2_Y11 11 #define NBJT2_G12 12 #define NBJT2_C12 13 #define NBJT2_Y12 14 #define NBJT2_G13 15 #define NBJT2_C13 16 #define NBJT2_Y13 17 #define NBJT2_G21 18 #define NBJT2_C21 19 #define NBJT2_Y21 20 #define NBJT2_G22 21 #define NBJT2_C22 22 #define NBJT2_Y22 23 #define NBJT2_G23 24 #define NBJT2_C23 25 #define NBJT2_Y23 26 #define NBJT2_G31 27 #define NBJT2_C31 28 #define NBJT2_Y31 29 #define NBJT2_G32 30 #define NBJT2_C32 31 #define NBJT2_Y32 32 #define NBJT2_G33 33 #define NBJT2_C33 34 #define NBJT2_Y33 35 /* model parameters */ /* NOTE: all true model parameters have been moved to IFcardInfo structures */ #define NBJT2_MOD_NBJT 1 /* device questions */ /* model questions */ #include "nbjt2ext.h" #endif /* NBJT2_H */ tmpk8ny_4pz/src/spicelib/devices/nbjt2/nbt2dump.c0000644000175000017500000001165613546075722022112 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ /* * This is a simple routine to dump the internal device states. It produces * states for .OP, .DC, & .TRAN simulations. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "nbjt2def.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" /* Forward Declarations */ static void NBJT2putHeader(FILE *, CKTcircuit *, NBJT2instance *); /* State Counter */ static int state_numOP = 0; static int state_numDC = 0; static int state_numTR = 0; void NBJT2dump(GENmodel *inModel, CKTcircuit *ckt) { register NBJT2model *model = (NBJT2model *) inModel; register NBJT2instance *inst; OUTPcard *output; FILE *fpState; char fileName[BSIZE_SP]; char description[BSIZE_SP]; char *prefix; int *state_num; int anyOutput = 0; if (ckt->CKTmode & MODEDCOP) { prefix = "OP"; state_num = &state_numOP; sprintf(description, "..."); } else if (ckt->CKTmode & MODEDCTRANCURVE) { prefix = "DC"; state_num = &state_numDC; sprintf(description, "sweep = % e", ckt->CKTtime); } else if (ckt->CKTmode & MODETRAN) { prefix = "TR"; state_num = &state_numTR; sprintf(description, "time = % e", ckt->CKTtime); } else { /* Not a recognized CKT mode. */ return; } for (; model != NULL; model = NBJT2nextModel(model)) { output = model->NBJT2outputs; for (inst = NBJT2instances(model); inst != NULL; inst = NBJT2nextInstance(inst)) { if (inst->NBJT2printGiven) { if ((ckt->CKTmode & MODETRAN) && ((ckt->CKTstat->STATaccepted - 1) % inst->NBJT2print != 0)) { continue; } anyOutput = 1; sprintf(fileName, "%s%s.%d.%s", output->OUTProotFile, prefix, *state_num, inst->NBJT2name); if ((fpState = fopen(fileName, "wb")) == NULL) { perror(fileName); } else { NBJT2putHeader(fpState, ckt, inst); TWOprnSolution(fpState, inst->NBJT2pDevice, model->NBJT2outputs); fclose(fpState); LOGmakeEntry(fileName, description); } } } } if (anyOutput) { (*state_num)++; } } #define NBJT2numOutputs 9 static void NBJT2putHeader(FILE *file, CKTcircuit *ckt, NBJT2instance *inst) { char *reference; double refVal = 0.0; int numVars = NBJT2numOutputs; if (ckt->CKTmode & MODEDCOP) { reference = NULL; } else if (ckt->CKTmode & MODEDCTRANCURVE) { reference = "sweep"; refVal = ckt->CKTtime; numVars++; } else if (ckt->CKTmode & MODETRAN) { reference = "time"; refVal = ckt->CKTtime; numVars++; } else { reference = NULL; } fprintf(file, "Title: Device %s external state\n", inst->NBJT2name); fprintf(file, "Plotname: Device Operating Point\n"); fprintf(file, "Command: deftype v conductance S\n"); fprintf(file, "Flags: real\n"); fprintf(file, "No. Variables: %d\n", numVars); fprintf(file, "No. Points: 1\n"); numVars = 0; fprintf(file, "Variables:\n"); if (reference) { fprintf(file, "\t%d %s unknown\n", numVars++, reference); } fprintf(file, "\t%d v13 voltage\n", numVars++); fprintf(file, "\t%d v23 voltage\n", numVars++); fprintf(file, "\t%d i1 current\n", numVars++); fprintf(file, "\t%d i2 current\n", numVars++); fprintf(file, "\t%d i3 current\n", numVars++); fprintf(file, "\t%d g22 conductance\n", numVars++); fprintf(file, "\t%d g21 conductance\n", numVars++); fprintf(file, "\t%d g12 conductance\n", numVars++); fprintf(file, "\t%d g11 conductance\n", numVars++); fprintf(file, "Values:\n0"); if (reference) { fprintf(file, "\t% e\n", refVal); } fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NBJT2vce)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NBJT2vbe)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NBJT2ic)); fprintf(file, "\t% e\n", - *(ckt->CKTstate0 + inst->NBJT2ie) - *(ckt->CKTstate0 + inst->NBJT2ic)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NBJT2ie)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NBJT2dIeDVbe) - *(ckt->CKTstate0 + inst->NBJT2dIcDVbe)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NBJT2dIeDVce) - *(ckt->CKTstate0 + inst->NBJT2dIcDVce)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NBJT2dIcDVbe)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NBJT2dIcDVce)); } void NBJT2acct(GENmodel *inModel, CKTcircuit *ckt, FILE *file) { register NBJT2model *model = (NBJT2model *) inModel; register NBJT2instance *inst; OUTPcard *output; NG_IGNORE(ckt); for (; model != NULL; model = NBJT2nextModel(model)) { output = model->NBJT2outputs; for (inst = NBJT2instances(model); inst != NULL; inst = NBJT2nextInstance(inst)) { if (output->OUTPstats) { TWOmemStats(file, inst->NBJT2pDevice); TWOcpuStats(file, inst->NBJT2pDevice); } } } } tmpk8ny_4pz/src/spicelib/devices/nbjt2/nbt2init.c0000644000175000017500000000322213546075722022076 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "nbjt2itf.h" #include "nbjt2ext.h" #include "nbt2init.h" SPICEdev NBJT2info = { .DEVpublic = { .name = "NBJT2", .description = "2D Numerical Bipolar Junction Transistor model", .terms = &NBJT2nSize, .numNames = &NBJT2nSize, .termNames = NBJT2names, .numInstanceParms = &NBJT2pTSize, .instanceParms = NBJT2pTable, .numModelParms = &NBJT2mPTSize, .modelParms = NBJT2mPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = NBJT2param, .DEVmodParam = NBJT2mParam, .DEVload = NBJT2load, .DEVsetup = NBJT2setup, .DEVunsetup = NULL, .DEVpzSetup = NBJT2setup, .DEVtemperature = NBJT2temp, .DEVtrunc = NBJT2trunc, .DEVfindBranch = NULL, .DEVacLoad = NBJT2acLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NBJT2delete, .DEVsetic = NULL, .DEVask = NBJT2ask, .DEVmodAsk = NULL, .DEVpzLoad = NBJT2pzLoad, .DEVconvTest = NULL, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &NBJT2iSize, .DEVmodSize = &NBJT2mSize, #ifdef CIDER .DEVdump = NBJT2dump, .DEVacct = NBJT2acct, #endif }; SPICEdev * get_nbjt2_info(void) { return &NBJT2info; } tmpk8ny_4pz/src/spicelib/devices/nbjt2/Makefile.am0000644000175000017500000000072013546075722022235 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libnbjt2.la libnbjt2_la_SOURCES = \ nbt2.c \ nbt2acld.c \ nbt2ask.c \ nbjt2def.h \ nbt2del.c \ nbt2dump.c \ nbjt2ext.h \ nbt2init.c \ nbt2init.h \ nbjt2itf.h \ nbt2load.c \ nbt2mpar.c \ nbt2parm.c \ nbt2pzld.c \ nbt2set.c \ nbt2temp.c \ nbt2trun.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/nbjt2/nbt2acld.c0000644000175000017500000000747213546075722022051 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * Function to load the COMPLEX circuit matrix using the small signal * parameters saved during a previous DC operating point analysis. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "nbjt2def.h" #include "ngspice/sperror.h" #include "ngspice/complex.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" int NBJT2acLoad(GENmodel *inModel, CKTcircuit *ckt) { register NBJT2model *model = (NBJT2model *) inModel; register NBJT2instance *inst; SPcomplex yIeVce, yIeVbe; SPcomplex yIcVce, yIcVbe; double startTime; for (; model != NULL; model = NBJT2nextModel(model)) { FieldDepMobility = model->NBJT2models->MODLfieldDepMobility; TransDepMobility = model->NBJT2models->MODLtransDepMobility; SurfaceMobility = model->NBJT2models->MODLsurfaceMobility; Srh = model->NBJT2models->MODLsrh; Auger = model->NBJT2models->MODLauger; AvalancheGen = model->NBJT2models->MODLavalancheGen; OneCarrier = model->NBJT2methods->METHoneCarrier; AcAnalysisMethod = model->NBJT2methods->METHacAnalysisMethod; MobDeriv = model->NBJT2methods->METHmobDeriv; TWOacDebug = model->NBJT2outputs->OUTPacDebug; for (inst = NBJT2instances(model); inst != NULL; inst = NBJT2nextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); /* Get Temp.-Dep. Global Parameters */ GLOBgetGlobals(&(inst->NBJT2globals)); model->NBJT2methods->METHacAnalysisMethod = NBJT2admittance(inst->NBJT2pDevice, ckt->CKTomega, &yIeVce, &yIcVce, &yIeVbe, &yIcVbe); *(inst->NBJT2colColPtr) += yIcVce.real; *(inst->NBJT2colColPtr + 1) += yIcVce.imag; *(inst->NBJT2colBasePtr) += yIcVbe.real; *(inst->NBJT2colBasePtr + 1) += yIcVbe.imag; *(inst->NBJT2colEmitPtr) -= yIcVbe.real + yIcVce.real; *(inst->NBJT2colEmitPtr + 1) -= yIcVbe.imag + yIcVce.imag; *(inst->NBJT2baseColPtr) -= yIcVce.real + yIeVce.real; *(inst->NBJT2baseColPtr + 1) -= yIcVce.imag + yIeVce.imag; *(inst->NBJT2baseBasePtr) -= yIcVbe.real + yIeVbe.real; *(inst->NBJT2baseBasePtr + 1) -= yIcVbe.imag + yIeVbe.imag; *(inst->NBJT2baseEmitPtr) += yIcVbe.real + yIcVce.real + yIeVbe.real + yIeVce.real; *(inst->NBJT2baseEmitPtr + 1) += yIcVbe.imag + yIcVce.imag + yIeVbe.imag + yIeVce.imag; *(inst->NBJT2emitColPtr) += yIeVce.real; *(inst->NBJT2emitColPtr + 1) += yIeVce.imag; *(inst->NBJT2emitBasePtr) += yIeVbe.real; *(inst->NBJT2emitBasePtr + 1) += yIeVbe.imag; *(inst->NBJT2emitEmitPtr) -= yIeVbe.real + yIeVce.real; *(inst->NBJT2emitEmitPtr + 1) -= yIeVbe.imag + yIeVce.imag; if (ckt->CKTomega != 0.0) { inst->NBJT2c11 = yIcVce.imag / ckt->CKTomega; inst->NBJT2c12 = yIcVbe.imag / ckt->CKTomega; inst->NBJT2c21 = (yIeVce.imag - yIcVce.imag) / ckt->CKTomega; inst->NBJT2c22 = (yIeVbe.imag - yIcVbe.imag) / ckt->CKTomega; } else { inst->NBJT2c11 = 0.0; /* XXX What else can be done?! */ inst->NBJT2c12 = 0.0; /* XXX What else can be done?! */ inst->NBJT2c21 = 0.0; /* XXX What else can be done?! */ inst->NBJT2c22 = 0.0; /* XXX What else can be done?! */ } inst->NBJT2y11r = yIcVce.real; inst->NBJT2y11i = yIcVce.imag; inst->NBJT2y12r = yIcVbe.real; inst->NBJT2y12i = yIcVbe.imag; inst->NBJT2y21r = yIeVce.real - yIcVce.real; inst->NBJT2y21i = yIeVce.imag - yIcVce.imag; inst->NBJT2y22r = yIeVbe.real - yIcVbe.real; inst->NBJT2y22i = yIeVbe.imag - yIcVbe.imag; inst->NBJT2smSigAvail = TRUE; inst->NBJT2pDevice->pStats->totalTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/nbjt2/nbjt2itf.h0000644000175000017500000000027313546075722022077 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_NBJT2 #define DEV_NBJT2 extern SPICEdev *get_nbjt2_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/nbjt2/nbjt2ext.h0000644000175000017500000000163413546075722022117 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Karti Mayaram **********/ #ifndef NBJT2EXT_H #define NBJT2EXT_H extern int NBJT2acLoad(GENmodel *, CKTcircuit *); extern int NBJT2ask(CKTcircuit *, GENinstance *, int, IFvalue *, IFvalue *); extern int NBJT2delete(GENinstance *); extern int NBJT2getic(GENmodel *, CKTcircuit *); extern int NBJT2load(GENmodel *, CKTcircuit *); extern int NBJT2mParam(int, IFvalue *, GENmodel *); extern int NBJT2param(int, IFvalue *, GENinstance *, IFvalue *); extern int NBJT2pzLoad(GENmodel *, CKTcircuit *, SPcomplex *); extern int NBJT2setup(SMPmatrix *, GENmodel *, CKTcircuit *, int *); extern int NBJT2temp(GENmodel *, CKTcircuit *); extern int NBJT2trunc(GENmodel *, CKTcircuit *, double *); extern void NBJT2dump(GENmodel *, CKTcircuit *); extern void NBJT2acct(GENmodel *, CKTcircuit *, FILE *); #endif /* NBJT2EXT_H */ tmpk8ny_4pz/src/spicelib/devices/nbjt2/nbt2.c0000644000175000017500000000520713546075722021217 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "nbjt2def.h" #include "ngspice/suffix.h" /* * This file defines the 2d Numerical BJT data structures that are available * to the next level(s) up the calling hierarchy */ IFparm NBJT2pTable[] = { /* parameters */ IP("off", NBJT2_OFF, IF_FLAG, "Device initially off"), IP("ic.file", NBJT2_IC_FILE, IF_STRING, "Initial condition file"), IOP("w", NBJT2_WIDTH, IF_REAL, "Width factor"), IOP("area", NBJT2_AREA, IF_REAL, "Area factor"), IP("save", NBJT2_PRINT, IF_INTEGER, "Save solutions"), IPR("print", NBJT2_PRINT, IF_INTEGER, "Print solutions"), OP("g11", NBJT2_G11, IF_REAL, "Conductance"), OP("c11", NBJT2_C11, IF_REAL, "Capacitance"), OP("y11", NBJT2_Y11, IF_COMPLEX, "Admittance"), OP("g12", NBJT2_G12, IF_REAL, "Conductance"), OP("c12", NBJT2_C12, IF_REAL, "Capacitance"), OP("y12", NBJT2_Y12, IF_COMPLEX, "Admittance"), OPU("g13", NBJT2_G13, IF_REAL, "Conductance"), OPU("c13", NBJT2_C13, IF_REAL, "Capacitance"), OPU("y13", NBJT2_Y13, IF_COMPLEX, "Admittance"), OP("g21", NBJT2_G21, IF_REAL, "Conductance"), OP("c21", NBJT2_C21, IF_REAL, "Capacitance"), OP("y21", NBJT2_Y21, IF_COMPLEX, "Admittance"), OP("g22", NBJT2_G22, IF_REAL, "Conductance"), OP("c22", NBJT2_C22, IF_REAL, "Capacitance"), OP("y22", NBJT2_Y22, IF_COMPLEX, "Admittance"), OPU("g23", NBJT2_G23, IF_REAL, "Conductance"), OPU("c23", NBJT2_C23, IF_REAL, "Capacitance"), OPU("y23", NBJT2_Y23, IF_COMPLEX, "Admittance"), OPU("g31", NBJT2_G31, IF_REAL, "Conductance"), OPU("c31", NBJT2_C31, IF_REAL, "Capacitance"), OPU("y31", NBJT2_Y31, IF_COMPLEX, "Admittance"), OPU("g32", NBJT2_G32, IF_REAL, "Conductance"), OPU("c32", NBJT2_C32, IF_REAL, "Capacitance"), OPU("y32", NBJT2_Y32, IF_COMPLEX, "Admittance"), OPU("g33", NBJT2_G33, IF_REAL, "Conductance"), OPU("c33", NBJT2_C33, IF_REAL, "Capacitance"), OPU("y33", NBJT2_Y33, IF_COMPLEX, "Admittance"), IOP("temp", NBJT2_TEMP, IF_REAL, "Instance Temperature") }; IFparm NBJT2mPTable[] = { /* model parameters */ /* numerical-device models no longer have parameters */ /* one is left behind to keep the table from being empty */ IP("nbjt", NBJT2_MOD_NBJT, IF_FLAG, "Numerical BJT Model") }; char *NBJT2names[] = { "Collector", "Base", "Emitter", "Substrate" }; int NBJT2nSize = NUMELEMS(NBJT2names); int NBJT2pTSize = NUMELEMS(NBJT2pTable); int NBJT2mPTSize = NUMELEMS(NBJT2mPTable); int NBJT2iSize = sizeof(NBJT2instance); int NBJT2mSize = sizeof(NBJT2model); tmpk8ny_4pz/src/spicelib/devices/nbjt2/nbt2init.h0000644000175000017500000000040213546075722022100 0ustar carstencarsten#ifndef _NBJT2INIT_H #define _NBJT2INIT_H extern IFparm NBJT2pTable[ ]; extern IFparm NBJT2mPTable[ ]; extern char *NBJT2names[ ]; extern int NBJT2pTSize; extern int NBJT2mPTSize; extern int NBJT2nSize; extern int NBJT2iSize; extern int NBJT2mSize; #endif tmpk8ny_4pz/src/spicelib/devices/nbjt2/nbt2pzld.c0000644000175000017500000000541513546075722022112 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "nbjt2def.h" #include "ngspice/sperror.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" int NBJT2pzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { register NBJT2model *model = (NBJT2model *) inModel; register NBJT2instance *inst; SPcomplex yIeVce, yIeVbe; SPcomplex yIcVce, yIcVbe; double startTime; NG_IGNORE(ckt); for (; model != NULL; model = NBJT2nextModel(model)) { FieldDepMobility = model->NBJT2models->MODLfieldDepMobility; TransDepMobility = model->NBJT2models->MODLtransDepMobility; SurfaceMobility = model->NBJT2models->MODLsurfaceMobility; Srh = model->NBJT2models->MODLsrh; Auger = model->NBJT2models->MODLauger; AvalancheGen = model->NBJT2models->MODLavalancheGen; OneCarrier = model->NBJT2methods->METHoneCarrier; AcAnalysisMethod = model->NBJT2methods->METHacAnalysisMethod; MobDeriv = model->NBJT2methods->METHmobDeriv; TWOacDebug = model->NBJT2outputs->OUTPacDebug; for (inst = NBJT2instances(model); inst != NULL; inst = NBJT2nextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); /* Get Temp.-Dep. Global Parameters */ GLOBgetGlobals(&(inst->NBJT2globals)); NBJT2ys(inst->NBJT2pDevice, s, &yIeVce, &yIcVce, &yIeVbe, &yIcVbe); *(inst->NBJT2colColPtr) += yIcVce.real; *(inst->NBJT2colColPtr + 1) += yIcVce.imag; *(inst->NBJT2colBasePtr) += yIcVbe.real; *(inst->NBJT2colBasePtr + 1) += yIcVbe.imag; *(inst->NBJT2colEmitPtr) -= yIcVbe.real + yIcVce.real; *(inst->NBJT2colEmitPtr + 1) -= yIcVbe.imag + yIcVce.imag; *(inst->NBJT2baseColPtr) -= yIcVce.real + yIeVce.real; *(inst->NBJT2baseColPtr + 1) -= yIcVce.imag + yIeVce.imag; *(inst->NBJT2baseBasePtr) -= yIcVbe.real + yIeVbe.real; *(inst->NBJT2baseBasePtr + 1) -= yIcVbe.imag + yIeVbe.imag; *(inst->NBJT2baseEmitPtr) += yIcVbe.real + yIcVce.real + yIeVbe.real + yIeVce.real; *(inst->NBJT2baseEmitPtr + 1) += yIcVbe.imag + yIcVce.imag + yIeVbe.imag + yIeVce.imag; *(inst->NBJT2emitColPtr) += yIeVce.real; *(inst->NBJT2emitColPtr + 1) += yIeVce.imag; *(inst->NBJT2emitBasePtr) += yIeVbe.real; *(inst->NBJT2emitBasePtr + 1) += yIeVbe.imag; *(inst->NBJT2emitEmitPtr) -= yIeVbe.real + yIeVce.real; *(inst->NBJT2emitEmitPtr + 1) -= yIeVbe.imag + yIeVce.imag; inst->NBJT2pDevice->pStats->totalTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/nbjt2/nbt2trun.c0000644000175000017500000000273513546075722022133 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * This routine performs truncation error calculations for NBJT2s in the * circuit. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "nbjt2def.h" #include "ngspice/sperror.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" int NBJT2trunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { register NBJT2model *model = (NBJT2model *) inModel; register NBJT2instance *inst; double deltaNew; double deltaNorm[7]; double startTime; int i; for (i = 0; i <= ckt->CKTmaxOrder; i++) { deltaNorm[i] = ckt->CKTdeltaOld[i] / TNorm; } for (; model != NULL; model = NBJT2nextModel(model)) { OneCarrier = model->NBJT2methods->METHoneCarrier; model->NBJT2pInfo->order = ckt->CKTorder; model->NBJT2pInfo->delta = deltaNorm; model->NBJT2pInfo->lteCoeff = computeLTECoeff(model->NBJT2pInfo); for (inst = NBJT2instances(model); inst != NULL; inst = NBJT2nextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); deltaNew = TWOtrunc(inst->NBJT2pDevice, model->NBJT2pInfo, ckt->CKTdelta); *timeStep = MIN(*timeStep, deltaNew); inst->NBJT2pDevice->pStats->totalTime[STAT_TRAN] += SPfrontEnd->IFseconds() - startTime; } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/nbjt2/nbt2mpar.c0000644000175000017500000000133713546075722022077 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * This routine sets model parameters for NBJT2s in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "nbjt2def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int NBJT2mParam(int param, IFvalue *value, GENmodel *inModel) { NG_IGNORE(value); NG_IGNORE(inModel); switch (param) { case NBJT2_MOD_NBJT: /* no action - already know it is a 2d-numerical bjt, but this */ /* makes life easier for spice-2 like parsers */ break; default: return (E_BADPARM); } return (OK); } tmpk8ny_4pz/src/spicelib/devices/nbjt2/nbt2set.c0000644000175000017500000002111613546075722021730 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "nbjt2def.h" #include "ngspice/numconst.h" #include "ngspice/numenum.h" #include "ngspice/meshext.h" #include "ngspice/sperror.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/ciderinp.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" #define TSCALLOC(var, size, type)\ if (size && (var = (type *)calloc(1, (unsigned)(size)*sizeof(type))) == NULL) {\ return(E_NOMEM);\ } int NBJT2setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* * load the structure with those pointers needed later for fast matrix * loading */ { register NBJT2model *model = (NBJT2model *) inModel; register NBJT2instance *inst; METHcard *methods; MODLcard *models; OPTNcard *options; OUTPcard *outputs; int error, xIndex; int xMeshSize, yMeshSize; TWOdevice *pDevice; TWOcoord *xCoordList = NULL; TWOcoord *yCoordList = NULL; TWOdomain *domainList = NULL; TWOelectrode *electrodeList = NULL; TWOmaterial *pM, *pMaterial = NULL, *materialList = NULL; DOPprofile *profileList = NULL; DOPtable *dopTableList = NULL; double startTime; /* loop through all the models */ for (; model != NULL; model = NBJT2nextModel(model)) { if (!model->NBJT2pInfo) { TSCALLOC(model->NBJT2pInfo, 1, TWOtranInfo); } methods = model->NBJT2methods; if (!methods) { TSCALLOC(methods, 1, METHcard); model->NBJT2methods = methods; } models = model->NBJT2models; if (!models) { TSCALLOC(models, 1, MODLcard); model->NBJT2models = models; } options = model->NBJT2options; if (!options) { TSCALLOC(options, 1, OPTNcard); model->NBJT2options = options; } outputs = model->NBJT2outputs; if (!outputs) { TSCALLOC(outputs, 1, OUTPcard); model->NBJT2outputs = outputs; } if (!methods->METHvoltPredGiven) { methods->METHvoltPred = FALSE; } if (!methods->METHmobDerivGiven) { methods->METHmobDeriv = TRUE; } if (!methods->METHoneCarrierGiven) { methods->METHoneCarrier = FALSE; } if (!methods->METHacAnalysisMethodGiven) { methods->METHacAnalysisMethod = SOR; } if (!methods->METHdabstolGiven) { methods->METHdabstol = DABSTOL2D; } if (!methods->METHdreltolGiven) { methods->METHdreltol = ckt->CKTreltol; } if (!methods->METHitLimGiven) { methods->METHitLim = 50; } if (!methods->METHomegaGiven || methods->METHomega <= 0.0) { methods->METHomega = 2.0 * M_PI /* radians/sec */ ; } if (!options->OPTNdefaGiven || options->OPTNdefa <= 0.0) { options->OPTNdefa = 1.0e4 /* cm^2 */ ; } if (!options->OPTNdeflGiven || options->OPTNdefl <= 0.0) { options->OPTNdefl = 1.0e2 /* cm */ ; } if (!options->OPTNdefwGiven && options->OPTNdefaGiven) { options->OPTNdefw = options->OPTNdefa / options->OPTNdefl; } else if (!options->OPTNdefwGiven || options->OPTNdefw <= 0.0) { options->OPTNdefw = 1.0e2 /* cm */ ; } if (!options->OPTNdeviceTypeGiven) { options->OPTNdeviceType = OPTN_BIPOLAR; } if (!options->OPTNicFileGiven) { options->OPTNicFile = NULL; options->OPTNunique = FALSE; /* Can't form a unique name. */ } if (!options->OPTNuniqueGiven) { options->OPTNunique = FALSE; } OneCarrier = methods->METHoneCarrier; /* Set up the rest of the card lists */ if ((error = MODLsetup(model->NBJT2models)) != 0) return (error); BandGapNarrowing = models->MODLbandGapNarrowing; ConcDepLifetime = models->MODLconcDepLifetime; TempDepMobility = models->MODLtempDepMobility; ConcDepMobility = models->MODLconcDepMobility; SurfaceMobility = models->MODLsurfaceMobility; if ((error = OUTPsetup(model->NBJT2outputs)) != 0) return (error); if ((error = MATLsetup(model->NBJT2materials, &materialList)) != 0) return (error); if ((error = MOBsetup(model->NBJT2mobility, materialList)) != 0) return (error); if ((error = MESHsetup('x', model->NBJT2xMeshes, &xCoordList, &xMeshSize)) != 0) return (error); if ((error = MESHsetup('y', model->NBJT2yMeshes, &yCoordList, &yMeshSize)) != 0) return (error); if ((error = DOMNsetup(model->NBJT2domains, &domainList, xCoordList, yCoordList, materialList)) != 0) return (error); if ((error = BDRYsetup(model->NBJT2boundaries, xCoordList, yCoordList, domainList)) != 0) return (error); if ((error = ELCTsetup(model->NBJT2electrodes, &electrodeList, xCoordList, yCoordList)) != 0) return (error); /* Make sure electrodes are OK. */ checkElectrodes(electrodeList, 3); /* NBJT2 has 3 electrodes */ if ((error = CONTsetup(model->NBJT2contacts, electrodeList)) != 0) return (error); if ((error = DOPsetup(model->NBJT2dopings, &profileList, &dopTableList, xCoordList, yCoordList)) != 0) return (error); model->NBJT2matlInfo = materialList; model->NBJT2profiles = profileList; model->NBJT2dopTables = dopTableList; /* loop through all the instances of the model */ for (inst = NBJT2instances(model); inst != NULL; inst = NBJT2nextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); if (!inst->NBJT2printGiven) { inst->NBJT2print = 0; } else if (inst->NBJT2print <= 0) { inst->NBJT2print = 1; } if (!inst->NBJT2icFileGiven) { if (options->OPTNunique) { inst->NBJT2icFile = tprintf("%s.%s", options->OPTNicFile, inst->NBJT2name); } else if (options->OPTNicFile != NULL) { inst->NBJT2icFile = tprintf("%s", options->OPTNicFile); } else { inst->NBJT2icFile = NULL; } } inst->NBJT2state = *states; *states += NBJT2numStates; if (!inst->NBJT2pDevice) { /* Assign the mesh and profile info to each instance. */ TSCALLOC(pDevice, 1, TWOdevice); TSCALLOC(pDevice->pStats, 1, TWOstats); pDevice->name = inst->NBJT2name; pDevice->solverType = SLV_NONE; pDevice->numXNodes = xMeshSize; pDevice->numYNodes = yMeshSize; pDevice->xScale = MESHmkArray(xCoordList, xMeshSize); pDevice->yScale = MESHmkArray(yCoordList, yMeshSize); pDevice->abstol = methods->METHdabstol; pDevice->reltol = methods->METHdreltol; pDevice->rhsImag = NULL; TSCALLOC(pDevice->elemArray, pDevice->numXNodes, TWOelem **); for (xIndex = 1; xIndex < pDevice->numXNodes; xIndex++) { TSCALLOC(pDevice->elemArray[xIndex], pDevice->numYNodes, TWOelem *); } /* Create a copy of material data that can change with temperature. */ pDevice->pMaterials = NULL; for (pM = materialList; pM != NULL; pM = pM->next) { if (pDevice->pMaterials == NULL) { TSCALLOC(pMaterial, 1, TWOmaterial); pDevice->pMaterials = pMaterial; } else { TSCALLOC(pMaterial->next, 1, TWOmaterial); pMaterial = pMaterial->next; } /* Copy everything, then fix the incorrect pointer. */ memcpy(pMaterial, pM, sizeof(TWOmaterial)); pMaterial->next = NULL; } /* Generate the mesh structure for the device. */ TWObuildMesh(pDevice, domainList, electrodeList, pDevice->pMaterials); /* Store the device info in the instance. */ inst->NBJT2pDevice = pDevice; } /* Now update the state pointers. */ TWOgetStatePointers(inst->NBJT2pDevice, states); /* Wipe out statistics from previous runs (if any). */ memset(inst->NBJT2pDevice->pStats, 0, sizeof(TWOstats)); inst->NBJT2pDevice->pStats->totalTime[STAT_SETUP] += SPfrontEnd->IFseconds() - startTime; /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if ((inst->ptr = SMPmakeElt(matrix, inst->first, inst->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(NBJT2colColPtr, NBJT2colNode, NBJT2colNode); TSTALLOC(NBJT2colBasePtr, NBJT2colNode, NBJT2baseNode); TSTALLOC(NBJT2colEmitPtr, NBJT2colNode, NBJT2emitNode); TSTALLOC(NBJT2baseColPtr, NBJT2baseNode, NBJT2colNode); TSTALLOC(NBJT2baseBasePtr, NBJT2baseNode, NBJT2baseNode); TSTALLOC(NBJT2baseEmitPtr, NBJT2baseNode, NBJT2emitNode); TSTALLOC(NBJT2emitColPtr, NBJT2emitNode, NBJT2colNode); TSTALLOC(NBJT2emitBasePtr, NBJT2emitNode, NBJT2baseNode); TSTALLOC(NBJT2emitEmitPtr, NBJT2emitNode, NBJT2emitNode); } /* Clean up lists */ killCoordInfo(xCoordList); killCoordInfo(yCoordList); killDomainInfo(domainList); killElectrodeInfo(electrodeList); } return (OK); } tmpk8ny_4pz/src/spicelib/devices/nbjt2/nbt2temp.c0000644000175000017500000000706613546075722022112 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1992 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "nbjt2def.h" #include "ngspice/numenum.h" #include "ngspice/carddefs.h" #include "ngspice/sperror.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" int NBJT2temp(GENmodel *inModel, CKTcircuit *ckt) /* * perform the temperature update */ { register NBJT2model *model = (NBJT2model *) inModel; register NBJT2instance *inst; METHcard *methods; MODLcard *models; OPTNcard *options; OUTPcard *outputs; TWOmaterial *pM, *pMaterial, *pNextMaterial; double startTime; /* loop through all the models */ for (; model != NULL; model = NBJT2nextModel(model)) { methods = model->NBJT2methods; models = model->NBJT2models; options = model->NBJT2options; outputs = model->NBJT2outputs; if (!options->OPTNtnomGiven) { options->OPTNtnom = ckt->CKTnomTemp; } for (pM = model->NBJT2matlInfo; pM != NULL; pM = pM->next) { pM->tnom = options->OPTNtnom; } BandGapNarrowing = models->MODLbandGapNarrowing; ConcDepLifetime = models->MODLconcDepLifetime; TempDepMobility = models->MODLtempDepMobility; ConcDepMobility = models->MODLconcDepMobility; SurfaceMobility = models->MODLsurfaceMobility; MatchingMobility = models->MODLmatchingMobility; OneCarrier = methods->METHoneCarrier; for (inst = NBJT2instances(model); inst != NULL; inst = NBJT2nextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); if (!inst->NBJT2tempGiven) { inst->NBJT2temp = ckt->CKTtemp; } if (!inst->NBJT2areaGiven || inst->NBJT2area <= 0.0) { inst->NBJT2area = 1.0; } if (!inst->NBJT2widthGiven || inst->NBJT2width <= 0.0) { inst->NBJT2width = 1.0; } inst->NBJT2pDevice->width = inst->NBJT2area * inst->NBJT2width * options->OPTNdefw; /* Compute and save globals for this instance. */ GLOBcomputeGlobals(&(inst->NBJT2globals), inst->NBJT2temp); /* Calculate new sets of material parameters. */ pM = model->NBJT2matlInfo; pMaterial = inst->NBJT2pDevice->pMaterials; for (; pM != NULL; pM = pM->next, pMaterial = pMaterial->next) { /* Copy everything, then fix the incorrect pointer. */ pNextMaterial = pMaterial->next; memcpy(pMaterial, pM, sizeof(TWOmaterial)); pMaterial->next = pNextMaterial; /* Now do the temperature dependence. */ MATLtempDep(pMaterial, pMaterial->tnom); if (outputs->OUTPmaterial) { printMaterialInfo(pMaterial); } } /* Assign doping to the mesh. */ TWOsetDoping(inst->NBJT2pDevice, model->NBJT2profiles, model->NBJT2dopTables); /* Assign physical parameters to the mesh. */ TWOsetup(inst->NBJT2pDevice); /* Assign boundary condition parameters. */ TWOsetBCparams(inst->NBJT2pDevice, model->NBJT2boundaries); /* Normalize everything. */ TWOnormalize(inst->NBJT2pDevice); /* Find the device's type. */ if (inst->NBJT2pDevice->pFirstContact->pNodes[0]->netConc < 0.0) { inst->NBJT2type = PNP; if (OneCarrier) { methods->METHoneCarrier = P_TYPE; } } else { inst->NBJT2type = NPN; if (OneCarrier) { methods->METHoneCarrier = N_TYPE; } } inst->NBJT2pDevice->pStats->totalTime[STAT_SETUP] += SPfrontEnd->IFseconds() - startTime; } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/nbjt2/nbt2ask.c0000644000175000017500000001401313546075722021711 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "nbjt2def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* Check out this one */ extern int NBJT2initSmSig(NBJT2instance *); /* ARGSUSED */ int NBJT2ask(CKTcircuit *ckt, GENinstance *inInst, int which, IFvalue *value, IFvalue *select) { NBJT2instance *inst = (NBJT2instance *) inInst; NG_IGNORE(select); switch (which) { case NBJT2_WIDTH: value->rValue = inst->NBJT2width; return (OK); case NBJT2_AREA: value->rValue = inst->NBJT2area; return (OK); case NBJT2_TEMP: value->rValue = inst->NBJT2temp - CONSTCtoK; return (OK); case NBJT2_G11: value->rValue = *(ckt->CKTstate0 + inst->NBJT2dIcDVce); return (OK); case NBJT2_G12: value->rValue = *(ckt->CKTstate0 + inst->NBJT2dIcDVbe); return (OK); case NBJT2_G13: value->rValue = -*(ckt->CKTstate0 + inst->NBJT2dIcDVce) - *(ckt->CKTstate0 + inst->NBJT2dIcDVbe); return (OK); case NBJT2_G21: value->rValue = *(ckt->CKTstate0 + inst->NBJT2dIeDVce) - *(ckt->CKTstate0 + inst->NBJT2dIcDVce); return (OK); case NBJT2_G22: value->rValue = *(ckt->CKTstate0 + inst->NBJT2dIeDVbe) - *(ckt->CKTstate0 + inst->NBJT2dIcDVbe); return (OK); case NBJT2_G23: value->rValue = -*(ckt->CKTstate0 + inst->NBJT2dIeDVce) + *(ckt->CKTstate0 + inst->NBJT2dIcDVce) -*(ckt->CKTstate0 + inst->NBJT2dIeDVbe) + *(ckt->CKTstate0 + inst->NBJT2dIcDVbe); return (OK); case NBJT2_G31: value->rValue = -*(ckt->CKTstate0 + inst->NBJT2dIeDVce); return (OK); case NBJT2_G32: value->rValue = -*(ckt->CKTstate0 + inst->NBJT2dIeDVbe); return (OK); case NBJT2_G33: value->rValue = *(ckt->CKTstate0 + inst->NBJT2dIeDVce) + *(ckt->CKTstate0 + inst->NBJT2dIeDVbe); return (OK); case NBJT2_C11: if (!inst->NBJT2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJT2initSmSig(inst); } value->rValue = inst->NBJT2c11; return (OK); case NBJT2_C12: if (!inst->NBJT2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJT2initSmSig(inst); } value->rValue = inst->NBJT2c12; return (OK); case NBJT2_C13: if (!inst->NBJT2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJT2initSmSig(inst); } value->rValue = -inst->NBJT2c11 - inst->NBJT2c12; return (OK); case NBJT2_C21: if (!inst->NBJT2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJT2initSmSig(inst); } value->rValue = inst->NBJT2c21; return (OK); case NBJT2_C22: if (!inst->NBJT2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJT2initSmSig(inst); } value->rValue = inst->NBJT2c22; return (OK); case NBJT2_C23: if (!inst->NBJT2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJT2initSmSig(inst); } value->rValue = -inst->NBJT2c21 - inst->NBJT2c22; return (OK); case NBJT2_C31: if (!inst->NBJT2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJT2initSmSig(inst); } value->rValue = -inst->NBJT2c11 - inst->NBJT2c21; return (OK); case NBJT2_C32: if (!inst->NBJT2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJT2initSmSig(inst); } value->rValue = -inst->NBJT2c12 - inst->NBJT2c22; return (OK); case NBJT2_C33: if (!inst->NBJT2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJT2initSmSig(inst); } value->rValue = inst->NBJT2c11 + inst->NBJT2c21 + inst->NBJT2c12 + inst->NBJT2c22; return (OK); case NBJT2_Y11: if (!inst->NBJT2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJT2initSmSig(inst); } value->cValue.real = inst->NBJT2y11r; value->cValue.imag = inst->NBJT2y11i; return (OK); case NBJT2_Y12: if (!inst->NBJT2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJT2initSmSig(inst); } value->cValue.real = inst->NBJT2y12r; value->cValue.imag = inst->NBJT2y12i; return (OK); case NBJT2_Y13: if (!inst->NBJT2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJT2initSmSig(inst); } value->cValue.real = -inst->NBJT2y11r - inst->NBJT2y12r; value->cValue.imag = -inst->NBJT2y11i - inst->NBJT2y12i; return (OK); case NBJT2_Y21: if (!inst->NBJT2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJT2initSmSig(inst); } value->cValue.real = inst->NBJT2y21r; value->cValue.imag = inst->NBJT2y21i; return (OK); case NBJT2_Y22: if (!inst->NBJT2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJT2initSmSig(inst); } value->cValue.real = inst->NBJT2y22r; value->cValue.imag = inst->NBJT2y22i; return (OK); case NBJT2_Y23: if (!inst->NBJT2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJT2initSmSig(inst); } value->cValue.real = -inst->NBJT2y21r - inst->NBJT2y22r; value->cValue.imag = -inst->NBJT2y21i - inst->NBJT2y22i; return (OK); case NBJT2_Y31: if (!inst->NBJT2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJT2initSmSig(inst); } value->cValue.real = -inst->NBJT2y11r - inst->NBJT2y21r; value->cValue.imag = -inst->NBJT2y11i - inst->NBJT2y21i; return (OK); case NBJT2_Y32: if (!inst->NBJT2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJT2initSmSig(inst); } value->cValue.real = -inst->NBJT2y12r - inst->NBJT2y22r; value->cValue.imag = -inst->NBJT2y12i - inst->NBJT2y22i; return (OK); case NBJT2_Y33: if (!inst->NBJT2smSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NBJT2initSmSig(inst); } value->cValue.real = inst->NBJT2y11r + inst->NBJT2y21r + inst->NBJT2y12r + inst->NBJT2y22r; value->cValue.imag = inst->NBJT2y11i + inst->NBJT2y21i + inst->NBJT2y12i + inst->NBJT2y22i; return (OK); default: return (E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/nbjt2/nbt2del.c0000644000175000017500000000114613546075722021702 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * This routine deletes a NBJT2 instance from the circuit and frees the * storage it was using. */ #include "ngspice/ngspice.h" #include "nbjt2def.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int NBJT2delete(GENinstance *gen_inst) { NBJT2instance *inst = (NBJT2instance *) gen_inst; TWOdestroy(inst->NBJT2pDevice); return OK; } tmpk8ny_4pz/src/spicelib/devices/nbjt2/nbt2parm.c0000644000175000017500000000230313546075722022071 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * This routine sets instance parameters for NBJT2s in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "nbjt2def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int NBJT2param(int param, IFvalue *value, GENinstance *inInst, IFvalue *select) { register NBJT2instance *inst = (NBJT2instance *) inInst; NG_IGNORE(select); switch (param) { case NBJT2_WIDTH: inst->NBJT2width = value->rValue; inst->NBJT2widthGiven = TRUE; break; case NBJT2_AREA: inst->NBJT2area = value->rValue; inst->NBJT2areaGiven = TRUE; break; case NBJT2_OFF: inst->NBJT2off = TRUE; break; case NBJT2_IC_FILE: inst->NBJT2icFile = value->sValue; inst->NBJT2icFileGiven = TRUE; break; case NBJT2_PRINT: inst->NBJT2print = value->iValue; inst->NBJT2printGiven = TRUE; break; case NBJT2_TEMP: inst->NBJT2temp = value->rValue + CONSTCtoK; inst->NBJT2tempGiven = TRUE; break; default: return (E_BADPARM); } return (OK); } tmpk8ny_4pz/src/spicelib/devices/nbjt2/nbt2load.c0000644000175000017500000004054713546075722022065 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * This is the function called each iteration to evaluate the 2d numerical * BJTs in the circuit and load them into the matrix as appropriate */ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/cktdefs.h" #include "nbjt2def.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" /* External Declarations */ /* Check out this one */ extern int NBJT2initSmSig(NBJT2instance *); int NBJT2load(GENmodel *inModel, CKTcircuit *ckt) { register NBJT2model *model = (NBJT2model *) inModel; register NBJT2instance *inst; register TWOdevice *pDevice; double startTime, startTime2, totalTime, totalTime2; double tol; double ic, ie; double iceq, ieeq; double ichat = 0.0, iehat = 0.0; double delVce, delVbe; double vce, vbe; double dIeDVce, dIeDVbe; double dIcDVce, dIcDVbe; double xfact; int icheck; int icheck1; int i; double deltaNorm[7]; int devConverged = 0; int numDevNonCon; int deviceType; int doInitSolve; int doVoltPred; char *initStateName; /* loop through all the models */ for (; model != NULL; model = NBJT2nextModel(model)) { FieldDepMobility = model->NBJT2models->MODLfieldDepMobility; TransDepMobility = model->NBJT2models->MODLtransDepMobility; SurfaceMobility = model->NBJT2models->MODLsurfaceMobility; Srh = model->NBJT2models->MODLsrh; Auger = model->NBJT2models->MODLauger; AvalancheGen = model->NBJT2models->MODLavalancheGen; OneCarrier = model->NBJT2methods->METHoneCarrier; MobDeriv = model->NBJT2methods->METHmobDeriv; MaxIterations = model->NBJT2methods->METHitLim; TWOdcDebug = model->NBJT2outputs->OUTPdcDebug; TWOtranDebug = model->NBJT2outputs->OUTPtranDebug; TWOacDebug = model->NBJT2outputs->OUTPacDebug; deviceType = model->NBJT2options->OPTNdeviceType; doVoltPred = model->NBJT2methods->METHvoltPred; if (ckt->CKTmode & MODEINITPRED) { /* compute normalized deltas and predictor coeff */ if (!(ckt->CKTmode & MODEDCTRANCURVE)) { model->NBJT2pInfo->order = ckt->CKTorder; model->NBJT2pInfo->method = ckt->CKTintegrateMethod; for (i = 0; i <= ckt->CKTmaxOrder; i++) { deltaNorm[i] = ckt->CKTdeltaOld[i] / TNorm; } computeIntegCoeff(ckt->CKTintegrateMethod, ckt->CKTorder, model->NBJT2pInfo->intCoeff, deltaNorm); computePredCoeff(ckt->CKTintegrateMethod, ckt->CKTorder, model->NBJT2pInfo->predCoeff, deltaNorm); } } else if (ckt->CKTmode & MODEINITTRAN) { model->NBJT2pInfo->order = ckt->CKTorder; model->NBJT2pInfo->method = ckt->CKTintegrateMethod; for (i = 0; i <= ckt->CKTmaxOrder; i++) { deltaNorm[i] = ckt->CKTdeltaOld[i] / TNorm; } computeIntegCoeff(ckt->CKTintegrateMethod, ckt->CKTorder, model->NBJT2pInfo->intCoeff, deltaNorm); } /* loop through all the instances of the model */ for (inst = NBJT2instances(model); inst != NULL; inst = NBJT2nextInstance(inst)) { pDevice = inst->NBJT2pDevice; totalTime = 0.0; startTime = SPfrontEnd->IFseconds(); /* Get Temp.-Dep. Global Parameters */ GLOBgetGlobals(&(inst->NBJT2globals)); /* * initialization */ pDevice->devStates = ckt->CKTstates; icheck = 1; doInitSolve = FALSE; initStateName = NULL; if (ckt->CKTmode & MODEINITSMSIG) { vbe = *(ckt->CKTstate0 + inst->NBJT2vbe); vce = *(ckt->CKTstate0 + inst->NBJT2vce); delVbe = 0.0; delVce = 0.0; NBJT2setBCs(pDevice, vce, vbe); } else if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate0 + inst->NBJT2vbe) = *(ckt->CKTstate1 + inst->NBJT2vbe); *(ckt->CKTstate0 + inst->NBJT2vce) = *(ckt->CKTstate1 + inst->NBJT2vce); vbe = *(ckt->CKTstate1 + inst->NBJT2vbe); vce = *(ckt->CKTstate1 + inst->NBJT2vce); TWOsaveState(pDevice); delVbe = 0.0; delVce = 0.0; } else if ((ckt->CKTmode & MODEINITJCT) && (ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) { doInitSolve = TRUE; initStateName = inst->NBJT2icFile; vbe = 0.0; vce = 0.0; delVbe = vbe; delVce = vce; } else if ((ckt->CKTmode & MODEINITJCT) && (inst->NBJT2off == 0)) { doInitSolve = TRUE; initStateName = inst->NBJT2icFile; if (deviceType == OPTN_JFET) { vbe = 0.0; vce = inst->NBJT2type * 0.5; } else { vbe = inst->NBJT2type * 0.6; vce = inst->NBJT2type * 1.0; } delVbe = vbe; delVce = vce; } else if (ckt->CKTmode & MODEINITJCT) { doInitSolve = TRUE; vbe = 0.0; vce = 0.0; delVbe = vbe; delVce = vce; } else if ((ckt->CKTmode & MODEINITFIX) && inst->NBJT2off) { vbe = 0.0; vce = 0.0; delVbe = vbe; delVce = vce; } else { if (ckt->CKTmode & MODEINITPRED) { *(ckt->CKTstate0 + inst->NBJT2vbe) = *(ckt->CKTstate1 + inst->NBJT2vbe); *(ckt->CKTstate0 + inst->NBJT2vce) = *(ckt->CKTstate1 + inst->NBJT2vce); *(ckt->CKTstate0 + inst->NBJT2ic) = *(ckt->CKTstate1 + inst->NBJT2ic); *(ckt->CKTstate0 + inst->NBJT2ie) = *(ckt->CKTstate1 + inst->NBJT2ie); *(ckt->CKTstate0 + inst->NBJT2dIeDVce) = *(ckt->CKTstate1 + inst->NBJT2dIeDVce); *(ckt->CKTstate0 + inst->NBJT2dIeDVbe) = *(ckt->CKTstate1 + inst->NBJT2dIeDVbe); *(ckt->CKTstate0 + inst->NBJT2dIcDVce) = *(ckt->CKTstate1 + inst->NBJT2dIcDVce); *(ckt->CKTstate0 + inst->NBJT2dIcDVbe) = *(ckt->CKTstate1 + inst->NBJT2dIcDVbe); /* compute normalized deltas and predictor coeff */ if (!(ckt->CKTmode & MODEDCTRANCURVE)) { /* no linear prediction on device voltages */ vbe = *(ckt->CKTstate1 + inst->NBJT2vbe); vce = *(ckt->CKTstate1 + inst->NBJT2vce); TWOpredict(pDevice, model->NBJT2pInfo); } else { if (doVoltPred) { /* linear prediction */ xfact=ckt->CKTdelta/ckt->CKTdeltaOld[1]; vbe = (1+xfact) * (*(ckt->CKTstate1 + inst->NBJT2vbe)) - (xfact) * (*(ckt->CKTstate2 + inst->NBJT2vbe)); vce = (1+xfact) * (*(ckt->CKTstate1 + inst->NBJT2vce)) - (xfact) * (*(ckt->CKTstate2 + inst->NBJT2vce)); } else { vbe = *(ckt->CKTstate1 + inst->NBJT2vbe); vce = *(ckt->CKTstate1 + inst->NBJT2vce); } } } else { /* * compute new nonlinear branch voltages */ vbe = *(ckt->CKTrhsOld + inst->NBJT2baseNode) - *(ckt->CKTrhsOld + inst->NBJT2emitNode); vce = *(ckt->CKTrhsOld + inst->NBJT2colNode) - *(ckt->CKTrhsOld + inst->NBJT2emitNode); } delVbe = vbe - *(ckt->CKTstate0 + inst->NBJT2vbe); delVce = vce - *(ckt->CKTstate0 + inst->NBJT2vce); ichat = *(ckt->CKTstate0 + inst->NBJT2ic) + *(ckt->CKTstate0 + inst->NBJT2dIcDVbe) * delVbe + *(ckt->CKTstate0 + inst->NBJT2dIcDVce) * delVce; iehat = *(ckt->CKTstate0 + inst->NBJT2ie) + *(ckt->CKTstate0 + inst->NBJT2dIeDVbe) * delVbe + *(ckt->CKTstate0 + inst->NBJT2dIeDVce) * delVce; #ifndef NOBYPASS /* * bypass if solution has not changed */ /* * the following collections of if's would be just one if the average * compiler could handle it, but many find the expression too * complicated, thus the split. */ if ((ckt->CKTbypass) && pDevice->converged && (!(ckt->CKTmode & MODEINITPRED)) && (fabs(delVbe) < (ckt->CKTreltol * MAX(fabs(vbe), fabs(*(ckt->CKTstate0 + inst->NBJT2vbe))) + ckt->CKTvoltTol))) if ((fabs(delVce) < ckt->CKTreltol * MAX(fabs(vce), fabs(*(ckt->CKTstate0 + inst->NBJT2vce))) + ckt->CKTvoltTol)) if ((fabs(ichat - *(ckt->CKTstate0 + inst->NBJT2ic)) < ckt->CKTreltol * MAX(fabs(ichat), fabs(*(ckt->CKTstate0 + inst->NBJT2ic))) + ckt->CKTabstol)) if ((fabs(iehat - *(ckt->CKTstate0 + inst->NBJT2ie)) < ckt->CKTreltol * MAX(fabs(iehat), fabs(*(ckt->CKTstate0 + inst->NBJT2ie))) + ckt->CKTabstol)) { /* * bypassing.... */ vbe = *(ckt->CKTstate0 + inst->NBJT2vbe); vce = *(ckt->CKTstate0 + inst->NBJT2vce); ic = *(ckt->CKTstate0 + inst->NBJT2ic); ie = *(ckt->CKTstate0 + inst->NBJT2ie); dIeDVce = *(ckt->CKTstate0 + inst->NBJT2dIeDVce); dIeDVbe = *(ckt->CKTstate0 + inst->NBJT2dIeDVbe); dIcDVce = *(ckt->CKTstate0 + inst->NBJT2dIcDVce); dIcDVbe = *(ckt->CKTstate0 + inst->NBJT2dIcDVbe); goto load; } #endif /* NOBYPASS */ /* * limit nonlinear branch voltages */ icheck1 = 1; if (deviceType == OPTN_JFET) { double vbc, vbc0; vbe = inst->NBJT2type * limitJunctionVoltage(inst->NBJT2type * vbe, inst->NBJT2type * *(ckt->CKTstate0 + inst->NBJT2vbe), &icheck); vbc = vbe - vce; vbc0 = *(ckt->CKTstate0 + inst->NBJT2vbe) - *(ckt->CKTstate0 + inst->NBJT2vce); vbc = inst->NBJT2type * limitJunctionVoltage(inst->NBJT2type * vbc, inst->NBJT2type * vbc0, &icheck); if (icheck1 == 1) icheck = 1; vce = vbe - vbc; } else { vbe = inst->NBJT2type * limitJunctionVoltage(inst->NBJT2type * vbe, inst->NBJT2type * *(ckt->CKTstate0 + inst->NBJT2vbe), &icheck); vce = inst->NBJT2type * limitVce(inst->NBJT2type * vce, inst->NBJT2type * *(ckt->CKTstate0 + inst->NBJT2vce), &icheck1); if (icheck1 == 1) icheck = 1; } delVbe = vbe - *(ckt->CKTstate0 + inst->NBJT2vbe); delVce = vce - *(ckt->CKTstate0 + inst->NBJT2vce); NBJT2setBCs(pDevice, vce - delVce, vbe - delVbe); } if (doInitSolve) { if (TWOdcDebug) { printVoltages(stdout, model->NBJT2modName, inst->NBJT2name, deviceType, 2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); } startTime2 = SPfrontEnd->IFseconds(); TWOequilSolve(pDevice); totalTime2 = SPfrontEnd->IFseconds() - startTime2; pDevice->pStats->totalTime[STAT_SETUP] += totalTime2; pDevice->pStats->totalTime[STAT_DC] -= totalTime2; TWObiasSolve(pDevice, MaxIterations, FALSE, NULL); *(ckt->CKTstate0 + inst->NBJT2vbe) = 0.0; *(ckt->CKTstate0 + inst->NBJT2vce) = 0.0; if (initStateName != NULL) { if (TWOreadState(pDevice, initStateName, 2, &vce, &vbe, NULL ) < 0) { fprintf(stderr, "NBJT2load: trouble reading state-file %s\n", initStateName); } else { NBJT2setBCs(pDevice, vce, vbe); delVce = delVbe = 0.0; } } } /* * determine dc current and derivatives using the numerical routines */ if (ckt->CKTmode & (MODEDCOP | MODETRANOP | MODEDCTRANCURVE | MODEINITSMSIG)) { numDevNonCon = 0; inst->NBJT2c11 = inst->NBJT2y11r = inst->NBJT2y11i = 0.0; inst->NBJT2c12 = inst->NBJT2y12r = inst->NBJT2y12i = 0.0; inst->NBJT2c21 = inst->NBJT2y21r = inst->NBJT2y21i = 0.0; inst->NBJT2c22 = inst->NBJT2y22r = inst->NBJT2y22i = 0.0; inst->NBJT2smSigAvail = FALSE; devNonCon: NBJT2project(pDevice, delVce, delVbe); if (TWOdcDebug) { printVoltages(stdout, model->NBJT2modName, inst->NBJT2name, deviceType, 2, vce, delVce, vbe, delVbe, 0.0, 0.0); } TWObiasSolve(pDevice, MaxIterations, FALSE, model->NBJT2pInfo); devConverged = pDevice->converged; if (devConverged && finite(pDevice->rhsNorm)) { /* compute the currents */ NBJT2current(pDevice, FALSE, NULL, &ie, &ic); NBJT2conductance(pDevice, FALSE, NULL, &dIeDVce, &dIcDVce, &dIeDVbe, &dIcDVbe); } else { /* reduce the voltage step until converged */ /* restore boundary nodes to previous potential */ NBJT2setBCs(pDevice, vce - delVce, vbe - delVbe); TWOstoreInitialGuess(pDevice); TWOresetJacobian(pDevice); delVbe *= 0.5; delVce *= 0.5; vbe = delVbe + *(ckt->CKTstate0 + inst->NBJT2vbe); vce = delVce + *(ckt->CKTstate0 + inst->NBJT2vce); numDevNonCon++; icheck = 1; if (numDevNonCon > 10) { printVoltages(stderr, model->NBJT2modName, inst->NBJT2name, deviceType, 2, vce, delVce, vbe, delVbe, 0.0, 0.0); fprintf(stderr, "*** Non-convergence during load ***\n"); totalTime += SPfrontEnd->IFseconds() - startTime; pDevice->pStats->totalTime[STAT_DC] += totalTime; ckt->CKTtroubleElt = (GENinstance *) inst; return (E_BADMATRIX); } else { goto devNonCon; } } } if ((ckt->CKTmode & (MODETRAN | MODEAC)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) || (ckt->CKTmode & MODEINITSMSIG)) { /* * store small-signal parameters */ if ((!(ckt->CKTmode & MODETRANOP)) || (!(ckt->CKTmode & MODEUIC))) { if (ckt->CKTmode & MODEINITSMSIG) { totalTime += SPfrontEnd->IFseconds() - startTime; pDevice->pStats->totalTime[STAT_DC] += totalTime; startTime2 = SPfrontEnd->IFseconds(); NBJT2initSmSig(inst); pDevice->pStats->totalTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime2; continue; } else { inst->NBJT2smSigAvail = FALSE; } /* * transient analysis */ if (ckt->CKTmode & MODEINITPRED) { NBJT2setBCs(pDevice, vce, vbe); TWOstoreInitialGuess(pDevice); } else { NBJT2update(pDevice, delVce, delVbe, TRUE); } if (TWOtranDebug) { printVoltages(stdout, model->NBJT2modName, inst->NBJT2name, deviceType, 2, vce, delVce, vbe, delVbe, 0.0, 0.0); } TWObiasSolve(pDevice, 0, TRUE, model->NBJT2pInfo); if (!finite(pDevice->rhsNorm)) { totalTime += SPfrontEnd->IFseconds() - startTime; pDevice->pStats->totalTime[STAT_TRAN] += totalTime; ckt->CKTtroubleElt = (GENinstance *) inst; return (E_BADMATRIX); } devConverged = TWOdeviceConverged(pDevice); pDevice->converged = devConverged; /* compute the currents */ NBJT2current(pDevice, TRUE, model->NBJT2pInfo->intCoeff, &ie, &ic); NBJT2conductance(pDevice, TRUE, model->NBJT2pInfo->intCoeff, &dIeDVce, &dIcDVce, &dIeDVbe, &dIcDVbe); } } /* * check convergence */ if ((!(ckt->CKTmode & MODEINITFIX)) || (!(inst->NBJT2off))) { if (icheck == 1 || !devConverged) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) inst; } else { tol = ckt->CKTreltol * MAX(fabs(ichat), fabs(ic)) + ckt->CKTabstol; if (fabs(ichat - ic) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) inst; } else { tol = ckt->CKTreltol * MAX(fabs(iehat), fabs(ie)) + ckt->CKTabstol; if (fabs(iehat - ie) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) inst; } } } } *(ckt->CKTstate0 + inst->NBJT2vbe) = vbe; *(ckt->CKTstate0 + inst->NBJT2vce) = vce; *(ckt->CKTstate0 + inst->NBJT2ic) = ic; *(ckt->CKTstate0 + inst->NBJT2ie) = ie; *(ckt->CKTstate0 + inst->NBJT2dIeDVce) = dIeDVce; *(ckt->CKTstate0 + inst->NBJT2dIeDVbe) = dIeDVbe; *(ckt->CKTstate0 + inst->NBJT2dIcDVce) = dIcDVce; *(ckt->CKTstate0 + inst->NBJT2dIcDVbe) = dIcDVbe; load: /* * load current excitation vector */ iceq = ic - dIcDVce * vce - dIcDVbe * vbe; ieeq = ie - dIeDVce * vce - dIeDVbe * vbe; *(ckt->CKTrhs + inst->NBJT2colNode) -= iceq; *(ckt->CKTrhs + inst->NBJT2baseNode) += ieeq + iceq; *(ckt->CKTrhs + inst->NBJT2emitNode) -= ieeq; /* * load y matrix */ *(inst->NBJT2colColPtr) += dIcDVce; *(inst->NBJT2colBasePtr) += dIcDVbe; *(inst->NBJT2colEmitPtr) -= dIcDVbe + dIcDVce; *(inst->NBJT2baseColPtr) -= dIcDVce + dIeDVce; *(inst->NBJT2baseBasePtr) -= dIcDVbe + dIeDVbe; *(inst->NBJT2baseEmitPtr) += dIcDVbe + dIcDVce + dIeDVbe + dIeDVce; *(inst->NBJT2emitColPtr) += dIeDVce; *(inst->NBJT2emitBasePtr) += dIeDVbe; *(inst->NBJT2emitEmitPtr) -= dIeDVbe + dIeDVce; totalTime += SPfrontEnd->IFseconds() - startTime; if (ckt->CKTmode & MODETRAN) { pDevice->pStats->totalTime[STAT_TRAN] += totalTime; } else { pDevice->pStats->totalTime[STAT_DC] += totalTime; } } } return (OK); } int NBJT2initSmSig(NBJT2instance *inst) { SPcomplex yIeVce, yIeVbe; SPcomplex yIcVce, yIcVbe; double omega = NBJT2modPtr(inst)->NBJT2methods->METHomega; AcAnalysisMethod = SOR_ONLY; (void) NBJT2admittance(inst->NBJT2pDevice, omega, &yIeVce, &yIcVce, &yIeVbe, &yIcVbe); inst->NBJT2c11 = yIcVce.imag / omega; inst->NBJT2c12 = yIcVbe.imag / omega; inst->NBJT2c21 = (yIeVce.imag - yIcVce.imag) / omega; inst->NBJT2c22 = (yIeVbe.imag - yIcVbe.imag) / omega; inst->NBJT2y11r = yIcVce.real; inst->NBJT2y11i = yIcVce.imag; inst->NBJT2y12r = yIcVbe.real; inst->NBJT2y12i = yIcVbe.imag; inst->NBJT2y21r = yIeVce.real - yIcVce.real; inst->NBJT2y21i = yIeVce.imag - yIcVce.imag; inst->NBJT2y22r = yIeVbe.real - yIcVbe.real; inst->NBJT2y22i = yIeVbe.imag - yIcVbe.imag; inst->NBJT2smSigAvail = TRUE; return (OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v0/0000755000175000017500000000000013546075722020446 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/bsim3v0/b3v0set.c0000644000175000017500000010573213546075722022110 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1995 Min-Chie Jeng and Mansun Chan. File: b3v0set.c **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "bsim3v0def.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define SMOOTHFACTOR 0.1 #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define PI 3.141592654 #define Charge_q 1.60219e-19 #define Meter2Micron 1.0e6 int BSIM3v0setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { BSIM3v0model *model = (BSIM3v0model*)inModel; BSIM3v0instance *here; int error; CKTnode *tmp; CKTnode *tmpNode; IFuid tmpName; /* loop through all the BSIM3v0 device models */ for( ; model != NULL; model = BSIM3v0nextModel(model)) { /* Default value Processing for BSIM3v0 MOSFET Models */ if (!model->BSIM3v0typeGiven) model->BSIM3v0type = NMOS; if (!model->BSIM3v0mobModGiven) model->BSIM3v0mobMod = 1; if (!model->BSIM3v0binUnitGiven) model->BSIM3v0binUnit = 1; if (!model->BSIM3v0capModGiven) model->BSIM3v0capMod = 1; if (!model->BSIM3v0nqsModGiven) model->BSIM3v0nqsMod = 0; if (!model->BSIM3v0noiModGiven) model->BSIM3v0noiMod = 1; if (!model->BSIM3v0toxGiven) model->BSIM3v0tox = 150.0e-10; model->BSIM3v0cox = 3.453133e-11 / model->BSIM3v0tox; if (!model->BSIM3v0cdscGiven) model->BSIM3v0cdsc = 2.4e-4; /* unit Q/V/m^2 */ if (!model->BSIM3v0cdscbGiven) model->BSIM3v0cdscb = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3v0cdscdGiven) model->BSIM3v0cdscd = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3v0citGiven) model->BSIM3v0cit = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3v0nfactorGiven) model->BSIM3v0nfactor = 1; if (!model->BSIM3v0xjGiven) model->BSIM3v0xj = .15e-6; if (!model->BSIM3v0vsatGiven) model->BSIM3v0vsat = 8.0e4; /* unit m/s */ if (!model->BSIM3v0atGiven) model->BSIM3v0at = 3.3e4; /* unit m/s */ if (!model->BSIM3v0a0Given) model->BSIM3v0a0 = 1.0; if (!model->BSIM3v0agsGiven) model->BSIM3v0ags = 0.0; if (!model->BSIM3v0a1Given) model->BSIM3v0a1 = 0.0; if (!model->BSIM3v0a2Given) model->BSIM3v0a2 = 1.0; if (!model->BSIM3v0ketaGiven) model->BSIM3v0keta = -0.047; /* unit / V */ if (!model->BSIM3v0nsubGiven) model->BSIM3v0nsub = 6.0e16; /* unit 1/cm3 */ if (!model->BSIM3v0npeakGiven) model->BSIM3v0npeak = 1.7e17; /* unit 1/cm3 */ if (!model->BSIM3v0vbmGiven) model->BSIM3v0vbm = -5.0; if (!model->BSIM3v0xtGiven) model->BSIM3v0xt = 1.55e-7; if (!model->BSIM3v0kt1Given) model->BSIM3v0kt1 = -0.11; /* unit V */ if (!model->BSIM3v0kt1lGiven) model->BSIM3v0kt1l = 0.0; /* unit V*m */ if (!model->BSIM3v0kt2Given) model->BSIM3v0kt2 = 0.022; /* No unit */ if (!model->BSIM3v0k3Given) model->BSIM3v0k3 = 80.0; if (!model->BSIM3v0k3bGiven) model->BSIM3v0k3b = 0.0; if (!model->BSIM3v0w0Given) model->BSIM3v0w0 = 2.5e-6; if (!model->BSIM3v0nlxGiven) model->BSIM3v0nlx = 1.74e-7; if (!model->BSIM3v0dvt0Given) model->BSIM3v0dvt0 = 2.2; if (!model->BSIM3v0dvt1Given) model->BSIM3v0dvt1 = 0.53; if (!model->BSIM3v0dvt2Given) model->BSIM3v0dvt2 = -0.032; /* unit 1 / V */ if (!model->BSIM3v0dvt0wGiven) model->BSIM3v0dvt0w = 0.0; if (!model->BSIM3v0dvt1wGiven) model->BSIM3v0dvt1w = 5.3e6; if (!model->BSIM3v0dvt2wGiven) model->BSIM3v0dvt2w = -0.032; if (!model->BSIM3v0droutGiven) model->BSIM3v0drout = 0.56; if (!model->BSIM3v0dsubGiven) model->BSIM3v0dsub = model->BSIM3v0drout; if (!model->BSIM3v0vth0Given) model->BSIM3v0vth0 = (model->BSIM3v0type == NMOS) ? 0.7 : -0.7; if (!model->BSIM3v0uaGiven) model->BSIM3v0ua = 2.25e-9; /* unit m/V */ if (!model->BSIM3v0ua1Given) model->BSIM3v0ua1 = 4.31e-9; /* unit m/V */ if (!model->BSIM3v0ubGiven) model->BSIM3v0ub = 5.87e-19; /* unit (m/V)**2 */ if (!model->BSIM3v0ub1Given) model->BSIM3v0ub1 = -7.61e-18; /* unit (m/V)**2 */ if (!model->BSIM3v0ucGiven) model->BSIM3v0uc = (model->BSIM3v0mobMod == 3) ? -0.0465 : -0.0465e-9; if (!model->BSIM3v0uc1Given) model->BSIM3v0uc1 = (model->BSIM3v0mobMod == 3) ? -0.056 : -0.056e-9; if (!model->BSIM3v0u0Given) model->BSIM3v0u0 = (model->BSIM3v0type == NMOS) ? 0.067 : 0.025; else if (model->BSIM3v0u0 > 1.0) model->BSIM3v0u0 = model->BSIM3v0u0 / 1.0e4; /* if u0 > 1.0, cm.g.sec unit system is used. If should be converted into SI unit system. */ if (!model->BSIM3v0uteGiven) model->BSIM3v0ute = -1.5; if (!model->BSIM3v0voffGiven) model->BSIM3v0voff = -0.08; if (!model->BSIM3v0deltaGiven) model->BSIM3v0delta = 0.01; if (!model->BSIM3v0rdswGiven) model->BSIM3v0rdsw = 0; if (!model->BSIM3v0prwgGiven) model->BSIM3v0prwg = 0.0; /* unit 1/V */ if (!model->BSIM3v0prwbGiven) model->BSIM3v0prwb = 0.0; if (!model->BSIM3v0prtGiven) model->BSIM3v0prt = 0.0; if (!model->BSIM3v0eta0Given) model->BSIM3v0eta0 = 0.08; /* no unit */ if (!model->BSIM3v0etabGiven) model->BSIM3v0etab = -0.07; /* unit 1/V */ if (!model->BSIM3v0pclmGiven) model->BSIM3v0pclm = 1.3; /* no unit */ if (!model->BSIM3v0pdibl1Given) model->BSIM3v0pdibl1 = .39; /* no unit */ if (!model->BSIM3v0pdibl2Given) model->BSIM3v0pdibl2 = 0.0086; /* no unit */ if (!model->BSIM3v0pdiblbGiven) model->BSIM3v0pdiblb = 0.0; /* 1/V */ if (!model->BSIM3v0pscbe1Given) model->BSIM3v0pscbe1 = 4.24e8; if (!model->BSIM3v0pscbe2Given) model->BSIM3v0pscbe2 = 1.0e-5; if (!model->BSIM3v0pvagGiven) model->BSIM3v0pvag = 0.0; if (!model->BSIM3v0wrGiven) model->BSIM3v0wr = 1.0; if (!model->BSIM3v0dwgGiven) model->BSIM3v0dwg = 0.0; if (!model->BSIM3v0dwbGiven) model->BSIM3v0dwb = 0.0; if (!model->BSIM3v0b0Given) model->BSIM3v0b0 = 0.0; if (!model->BSIM3v0b1Given) model->BSIM3v0b1 = 0.0; if (!model->BSIM3v0alpha0Given) model->BSIM3v0alpha0 = 0.0; if (!model->BSIM3v0beta0Given) model->BSIM3v0beta0 = 30.0; if (!model->BSIM3v0elmGiven) model->BSIM3v0elm = 5.0; if (!model->BSIM3v0cgslGiven) model->BSIM3v0cgsl = 0.0; if (!model->BSIM3v0cgdlGiven) model->BSIM3v0cgdl = 0.0; if (!model->BSIM3v0ckappaGiven) model->BSIM3v0ckappa = 0.6; if (!model->BSIM3v0clcGiven) model->BSIM3v0clc = 0.1e-6; if (!model->BSIM3v0cleGiven) model->BSIM3v0cle = 0.6; /* Length dependence */ if (!model->BSIM3v0lcdscGiven) model->BSIM3v0lcdsc = 0.0; if (!model->BSIM3v0lcdscbGiven) model->BSIM3v0lcdscb = 0.0; if (!model->BSIM3v0lcdscdGiven) model->BSIM3v0lcdscd = 0.0; if (!model->BSIM3v0lcitGiven) model->BSIM3v0lcit = 0.0; if (!model->BSIM3v0lnfactorGiven) model->BSIM3v0lnfactor = 0.0; if (!model->BSIM3v0lxjGiven) model->BSIM3v0lxj = 0.0; if (!model->BSIM3v0lvsatGiven) model->BSIM3v0lvsat = 0.0; if (!model->BSIM3v0latGiven) model->BSIM3v0lat = 0.0; if (!model->BSIM3v0la0Given) model->BSIM3v0la0 = 0.0; if (!model->BSIM3v0lagsGiven) model->BSIM3v0lags = 0.0; if (!model->BSIM3v0la1Given) model->BSIM3v0la1 = 0.0; if (!model->BSIM3v0la2Given) model->BSIM3v0la2 = 0.0; if (!model->BSIM3v0lketaGiven) model->BSIM3v0lketa = 0.0; if (!model->BSIM3v0lnsubGiven) model->BSIM3v0lnsub = 0.0; if (!model->BSIM3v0lnpeakGiven) model->BSIM3v0lnpeak = 0.0; if (!model->BSIM3v0lvbmGiven) model->BSIM3v0lvbm = 0.0; if (!model->BSIM3v0lxtGiven) model->BSIM3v0lxt = 0.0; if (!model->BSIM3v0lkt1Given) model->BSIM3v0lkt1 = 0.0; if (!model->BSIM3v0lkt1lGiven) model->BSIM3v0lkt1l = 0.0; if (!model->BSIM3v0lkt2Given) model->BSIM3v0lkt2 = 0.0; if (!model->BSIM3v0lk3Given) model->BSIM3v0lk3 = 0.0; if (!model->BSIM3v0lk3bGiven) model->BSIM3v0lk3b = 0.0; if (!model->BSIM3v0lw0Given) model->BSIM3v0lw0 = 0.0; if (!model->BSIM3v0lnlxGiven) model->BSIM3v0lnlx = 0.0; if (!model->BSIM3v0ldvt0Given) model->BSIM3v0ldvt0 = 0.0; if (!model->BSIM3v0ldvt1Given) model->BSIM3v0ldvt1 = 0.0; if (!model->BSIM3v0ldvt2Given) model->BSIM3v0ldvt2 = 0.0; if (!model->BSIM3v0ldvt0wGiven) model->BSIM3v0ldvt0w = 0.0; if (!model->BSIM3v0ldvt1wGiven) model->BSIM3v0ldvt1w = 0.0; if (!model->BSIM3v0ldvt2wGiven) model->BSIM3v0ldvt2w = 0.0; if (!model->BSIM3v0ldroutGiven) model->BSIM3v0ldrout = 0.0; if (!model->BSIM3v0ldsubGiven) model->BSIM3v0ldsub = 0.0; if (!model->BSIM3v0lvth0Given) model->BSIM3v0lvth0 = 0.0; if (!model->BSIM3v0luaGiven) model->BSIM3v0lua = 0.0; if (!model->BSIM3v0lua1Given) model->BSIM3v0lua1 = 0.0; if (!model->BSIM3v0lubGiven) model->BSIM3v0lub = 0.0; if (!model->BSIM3v0lub1Given) model->BSIM3v0lub1 = 0.0; if (!model->BSIM3v0lucGiven) model->BSIM3v0luc = 0.0; if (!model->BSIM3v0luc1Given) model->BSIM3v0luc1 = 0.0; if (!model->BSIM3v0lu0Given) model->BSIM3v0lu0 = 0.0; else if (model->BSIM3v0u0 > 1.0) model->BSIM3v0lu0 = model->BSIM3v0lu0 / 1.0e4; if (!model->BSIM3v0luteGiven) model->BSIM3v0lute = 0.0; if (!model->BSIM3v0lvoffGiven) model->BSIM3v0lvoff = 0.0; if (!model->BSIM3v0ldeltaGiven) model->BSIM3v0ldelta = 0.0; if (!model->BSIM3v0lrdswGiven) model->BSIM3v0lrdsw = 0.0; if (!model->BSIM3v0lprwbGiven) model->BSIM3v0lprwb = 0.0; if (!model->BSIM3v0lprwgGiven) model->BSIM3v0lprwg = 0.0; if (!model->BSIM3v0lprtGiven) model->BSIM3v0lprt = 0.0; if (!model->BSIM3v0leta0Given) model->BSIM3v0leta0 = 0.0; if (!model->BSIM3v0letabGiven) model->BSIM3v0letab = -0.0; if (!model->BSIM3v0lpclmGiven) model->BSIM3v0lpclm = 0.0; if (!model->BSIM3v0lpdibl1Given) model->BSIM3v0lpdibl1 = 0.0; if (!model->BSIM3v0lpdibl2Given) model->BSIM3v0lpdibl2 = 0.0; if (!model->BSIM3v0lpdiblbGiven) model->BSIM3v0lpdiblb = 0.0; if (!model->BSIM3v0lpscbe1Given) model->BSIM3v0lpscbe1 = 0.0; if (!model->BSIM3v0lpscbe2Given) model->BSIM3v0lpscbe2 = 0.0; if (!model->BSIM3v0lpvagGiven) model->BSIM3v0lpvag = 0.0; if (!model->BSIM3v0lwrGiven) model->BSIM3v0lwr = 0.0; if (!model->BSIM3v0ldwgGiven) model->BSIM3v0ldwg = 0.0; if (!model->BSIM3v0ldwbGiven) model->BSIM3v0ldwb = 0.0; if (!model->BSIM3v0lb0Given) model->BSIM3v0lb0 = 0.0; if (!model->BSIM3v0lb1Given) model->BSIM3v0lb1 = 0.0; if (!model->BSIM3v0lalpha0Given) model->BSIM3v0lalpha0 = 0.0; if (!model->BSIM3v0lbeta0Given) model->BSIM3v0lbeta0 = 0.0; if (!model->BSIM3v0lelmGiven) model->BSIM3v0lelm = 0.0; if (!model->BSIM3v0lcgslGiven) model->BSIM3v0lcgsl = 0.0; if (!model->BSIM3v0lcgdlGiven) model->BSIM3v0lcgdl = 0.0; if (!model->BSIM3v0lckappaGiven) model->BSIM3v0lckappa = 0.0; if (!model->BSIM3v0lcfGiven) model->BSIM3v0lcf = 0.0; if (!model->BSIM3v0lclcGiven) model->BSIM3v0lclc = 0.0; if (!model->BSIM3v0lcleGiven) model->BSIM3v0lcle = 0.0; /* Width dependence */ if (!model->BSIM3v0wcdscGiven) model->BSIM3v0wcdsc = 0.0; if (!model->BSIM3v0wcdscbGiven) model->BSIM3v0wcdscb = 0.0; if (!model->BSIM3v0wcdscdGiven) model->BSIM3v0wcdscd = 0.0; if (!model->BSIM3v0wcitGiven) model->BSIM3v0wcit = 0.0; if (!model->BSIM3v0wnfactorGiven) model->BSIM3v0wnfactor = 0.0; if (!model->BSIM3v0wxjGiven) model->BSIM3v0wxj = 0.0; if (!model->BSIM3v0wvsatGiven) model->BSIM3v0wvsat = 0.0; if (!model->BSIM3v0watGiven) model->BSIM3v0wat = 0.0; if (!model->BSIM3v0wa0Given) model->BSIM3v0wa0 = 0.0; if (!model->BSIM3v0wagsGiven) model->BSIM3v0wags = 0.0; if (!model->BSIM3v0wa1Given) model->BSIM3v0wa1 = 0.0; if (!model->BSIM3v0wa2Given) model->BSIM3v0wa2 = 0.0; if (!model->BSIM3v0wketaGiven) model->BSIM3v0wketa = 0.0; if (!model->BSIM3v0wnsubGiven) model->BSIM3v0wnsub = 0.0; if (!model->BSIM3v0wnpeakGiven) model->BSIM3v0wnpeak = 0.0; if (!model->BSIM3v0wvbmGiven) model->BSIM3v0wvbm = 0.0; if (!model->BSIM3v0wxtGiven) model->BSIM3v0wxt = 0.0; if (!model->BSIM3v0wkt1Given) model->BSIM3v0wkt1 = 0.0; if (!model->BSIM3v0wkt1lGiven) model->BSIM3v0wkt1l = 0.0; if (!model->BSIM3v0wkt2Given) model->BSIM3v0wkt2 = 0.0; if (!model->BSIM3v0wk3Given) model->BSIM3v0wk3 = 0.0; if (!model->BSIM3v0wk3bGiven) model->BSIM3v0wk3b = 0.0; if (!model->BSIM3v0ww0Given) model->BSIM3v0ww0 = 0.0; if (!model->BSIM3v0wnlxGiven) model->BSIM3v0wnlx = 0.0; if (!model->BSIM3v0wdvt0Given) model->BSIM3v0wdvt0 = 0.0; if (!model->BSIM3v0wdvt1Given) model->BSIM3v0wdvt1 = 0.0; if (!model->BSIM3v0wdvt2Given) model->BSIM3v0wdvt2 = 0.0; if (!model->BSIM3v0wdvt0wGiven) model->BSIM3v0wdvt0w = 0.0; if (!model->BSIM3v0wdvt1wGiven) model->BSIM3v0wdvt1w = 0.0; if (!model->BSIM3v0wdvt2wGiven) model->BSIM3v0wdvt2w = 0.0; if (!model->BSIM3v0wdroutGiven) model->BSIM3v0wdrout = 0.0; if (!model->BSIM3v0wdsubGiven) model->BSIM3v0wdsub = 0.0; if (!model->BSIM3v0wvth0Given) model->BSIM3v0wvth0 = 0.0; if (!model->BSIM3v0wuaGiven) model->BSIM3v0wua = 0.0; if (!model->BSIM3v0wua1Given) model->BSIM3v0wua1 = 0.0; if (!model->BSIM3v0wubGiven) model->BSIM3v0wub = 0.0; if (!model->BSIM3v0wub1Given) model->BSIM3v0wub1 = 0.0; if (!model->BSIM3v0wucGiven) model->BSIM3v0wuc = 0.0; if (!model->BSIM3v0wuc1Given) model->BSIM3v0wuc1 = 0.0; if (!model->BSIM3v0wu0Given) model->BSIM3v0wu0 = 0.0; else if (model->BSIM3v0u0 > 1.0) model->BSIM3v0wu0 = model->BSIM3v0wu0 / 1.0e4; if (!model->BSIM3v0wuteGiven) model->BSIM3v0wute = 0.0; if (!model->BSIM3v0wvoffGiven) model->BSIM3v0wvoff = 0.0; if (!model->BSIM3v0wdeltaGiven) model->BSIM3v0wdelta = 0.0; if (!model->BSIM3v0wrdswGiven) model->BSIM3v0wrdsw = 0.0; if (!model->BSIM3v0wprwbGiven) model->BSIM3v0wprwb = 0.0; if (!model->BSIM3v0wprwgGiven) model->BSIM3v0wprwg = 0.0; if (!model->BSIM3v0wprtGiven) model->BSIM3v0wprt = 0.0; if (!model->BSIM3v0weta0Given) model->BSIM3v0weta0 = 0.0; if (!model->BSIM3v0wetabGiven) model->BSIM3v0wetab = 0.0; if (!model->BSIM3v0wpclmGiven) model->BSIM3v0wpclm = 0.0; if (!model->BSIM3v0wpdibl1Given) model->BSIM3v0wpdibl1 = 0.0; if (!model->BSIM3v0wpdibl2Given) model->BSIM3v0wpdibl2 = 0.0; if (!model->BSIM3v0wpdiblbGiven) model->BSIM3v0wpdiblb = 0.0; if (!model->BSIM3v0wpscbe1Given) model->BSIM3v0wpscbe1 = 0.0; if (!model->BSIM3v0wpscbe2Given) model->BSIM3v0wpscbe2 = 0.0; if (!model->BSIM3v0wpvagGiven) model->BSIM3v0wpvag = 0.0; if (!model->BSIM3v0wwrGiven) model->BSIM3v0wwr = 0.0; if (!model->BSIM3v0wdwgGiven) model->BSIM3v0wdwg = 0.0; if (!model->BSIM3v0wdwbGiven) model->BSIM3v0wdwb = 0.0; if (!model->BSIM3v0wb0Given) model->BSIM3v0wb0 = 0.0; if (!model->BSIM3v0wb1Given) model->BSIM3v0wb1 = 0.0; if (!model->BSIM3v0walpha0Given) model->BSIM3v0walpha0 = 0.0; if (!model->BSIM3v0wbeta0Given) model->BSIM3v0wbeta0 = 0.0; if (!model->BSIM3v0welmGiven) model->BSIM3v0welm = 0.0; if (!model->BSIM3v0wcgslGiven) model->BSIM3v0wcgsl = 0.0; if (!model->BSIM3v0wcgdlGiven) model->BSIM3v0wcgdl = 0.0; if (!model->BSIM3v0wckappaGiven) model->BSIM3v0wckappa = 0.0; if (!model->BSIM3v0wcfGiven) model->BSIM3v0wcf = 0.0; if (!model->BSIM3v0wclcGiven) model->BSIM3v0wclc = 0.0; if (!model->BSIM3v0wcleGiven) model->BSIM3v0wcle = 0.0; /* Cross-term dependence */ if (!model->BSIM3v0pcdscGiven) model->BSIM3v0pcdsc = 0.0; if (!model->BSIM3v0pcdscbGiven) model->BSIM3v0pcdscb = 0.0; if (!model->BSIM3v0pcdscdGiven) model->BSIM3v0pcdscd = 0.0; if (!model->BSIM3v0pcitGiven) model->BSIM3v0pcit = 0.0; if (!model->BSIM3v0pnfactorGiven) model->BSIM3v0pnfactor = 0.0; if (!model->BSIM3v0pxjGiven) model->BSIM3v0pxj = 0.0; if (!model->BSIM3v0pvsatGiven) model->BSIM3v0pvsat = 0.0; if (!model->BSIM3v0patGiven) model->BSIM3v0pat = 0.0; if (!model->BSIM3v0pa0Given) model->BSIM3v0pa0 = 0.0; if (!model->BSIM3v0pagsGiven) model->BSIM3v0pags = 0.0; if (!model->BSIM3v0pa1Given) model->BSIM3v0pa1 = 0.0; if (!model->BSIM3v0pa2Given) model->BSIM3v0pa2 = 0.0; if (!model->BSIM3v0pketaGiven) model->BSIM3v0pketa = 0.0; if (!model->BSIM3v0pnsubGiven) model->BSIM3v0pnsub = 0.0; if (!model->BSIM3v0pnpeakGiven) model->BSIM3v0pnpeak = 0.0; if (!model->BSIM3v0pvbmGiven) model->BSIM3v0pvbm = 0.0; if (!model->BSIM3v0pxtGiven) model->BSIM3v0pxt = 0.0; if (!model->BSIM3v0pkt1Given) model->BSIM3v0pkt1 = 0.0; if (!model->BSIM3v0pkt1lGiven) model->BSIM3v0pkt1l = 0.0; if (!model->BSIM3v0pkt2Given) model->BSIM3v0pkt2 = 0.0; if (!model->BSIM3v0pk3Given) model->BSIM3v0pk3 = 0.0; if (!model->BSIM3v0pk3bGiven) model->BSIM3v0pk3b = 0.0; if (!model->BSIM3v0pw0Given) model->BSIM3v0pw0 = 0.0; if (!model->BSIM3v0pnlxGiven) model->BSIM3v0pnlx = 0.0; if (!model->BSIM3v0pdvt0Given) model->BSIM3v0pdvt0 = 0.0; if (!model->BSIM3v0pdvt1Given) model->BSIM3v0pdvt1 = 0.0; if (!model->BSIM3v0pdvt2Given) model->BSIM3v0pdvt2 = 0.0; if (!model->BSIM3v0pdvt0wGiven) model->BSIM3v0pdvt0w = 0.0; if (!model->BSIM3v0pdvt1wGiven) model->BSIM3v0pdvt1w = 0.0; if (!model->BSIM3v0pdvt2wGiven) model->BSIM3v0pdvt2w = 0.0; if (!model->BSIM3v0pdroutGiven) model->BSIM3v0pdrout = 0.0; if (!model->BSIM3v0pdsubGiven) model->BSIM3v0pdsub = 0.0; if (!model->BSIM3v0pvth0Given) model->BSIM3v0pvth0 = 0.0; if (!model->BSIM3v0puaGiven) model->BSIM3v0pua = 0.0; if (!model->BSIM3v0pua1Given) model->BSIM3v0pua1 = 0.0; if (!model->BSIM3v0pubGiven) model->BSIM3v0pub = 0.0; if (!model->BSIM3v0pub1Given) model->BSIM3v0pub1 = 0.0; if (!model->BSIM3v0pucGiven) model->BSIM3v0puc = 0.0; if (!model->BSIM3v0puc1Given) model->BSIM3v0puc1 = 0.0; if (!model->BSIM3v0pu0Given) model->BSIM3v0pu0 = 0.0; else if (model->BSIM3v0u0 > 1.0) model->BSIM3v0pu0 = model->BSIM3v0pu0 / 1.0e4; if (!model->BSIM3v0puteGiven) model->BSIM3v0pute = 0.0; if (!model->BSIM3v0pvoffGiven) model->BSIM3v0pvoff = 0.0; if (!model->BSIM3v0pdeltaGiven) model->BSIM3v0pdelta = 0.0; if (!model->BSIM3v0prdswGiven) model->BSIM3v0prdsw = 0.0; if (!model->BSIM3v0pprwbGiven) model->BSIM3v0pprwb = 0.0; if (!model->BSIM3v0pprwgGiven) model->BSIM3v0pprwg = 0.0; if (!model->BSIM3v0pprtGiven) model->BSIM3v0pprt = 0.0; if (!model->BSIM3v0peta0Given) model->BSIM3v0peta0 = 0.0; if (!model->BSIM3v0petabGiven) model->BSIM3v0petab = 0.0; if (!model->BSIM3v0ppclmGiven) model->BSIM3v0ppclm = 0.0; if (!model->BSIM3v0ppdibl1Given) model->BSIM3v0ppdibl1 = 0.0; if (!model->BSIM3v0ppdibl2Given) model->BSIM3v0ppdibl2 = 0.0; if (!model->BSIM3v0ppdiblbGiven) model->BSIM3v0ppdiblb = 0.0; if (!model->BSIM3v0ppscbe1Given) model->BSIM3v0ppscbe1 = 0.0; if (!model->BSIM3v0ppscbe2Given) model->BSIM3v0ppscbe2 = 0.0; if (!model->BSIM3v0ppvagGiven) model->BSIM3v0ppvag = 0.0; if (!model->BSIM3v0pwrGiven) model->BSIM3v0pwr = 0.0; if (!model->BSIM3v0pdwgGiven) model->BSIM3v0pdwg = 0.0; if (!model->BSIM3v0pdwbGiven) model->BSIM3v0pdwb = 0.0; if (!model->BSIM3v0pb0Given) model->BSIM3v0pb0 = 0.0; if (!model->BSIM3v0pb1Given) model->BSIM3v0pb1 = 0.0; if (!model->BSIM3v0palpha0Given) model->BSIM3v0palpha0 = 0.0; if (!model->BSIM3v0pbeta0Given) model->BSIM3v0pbeta0 = 0.0; if (!model->BSIM3v0pelmGiven) model->BSIM3v0pelm = 0.0; if (!model->BSIM3v0pcgslGiven) model->BSIM3v0pcgsl = 0.0; if (!model->BSIM3v0pcgdlGiven) model->BSIM3v0pcgdl = 0.0; if (!model->BSIM3v0pckappaGiven) model->BSIM3v0pckappa = 0.0; if (!model->BSIM3v0pcfGiven) model->BSIM3v0pcf = 0.0; if (!model->BSIM3v0pclcGiven) model->BSIM3v0pclc = 0.0; if (!model->BSIM3v0pcleGiven) model->BSIM3v0pcle = 0.0; /* unit degree celcius */ if (!model->BSIM3v0tnomGiven) model->BSIM3v0tnom = ckt->CKTnomTemp; if (!model->BSIM3v0LintGiven) model->BSIM3v0Lint = 0.0; if (!model->BSIM3v0LlGiven) model->BSIM3v0Ll = 0.0; if (!model->BSIM3v0LlnGiven) model->BSIM3v0Lln = 1.0; if (!model->BSIM3v0LwGiven) model->BSIM3v0Lw = 0.0; if (!model->BSIM3v0LwnGiven) model->BSIM3v0Lwn = 1.0; if (!model->BSIM3v0LwlGiven) model->BSIM3v0Lwl = 0.0; if (!model->BSIM3v0LminGiven) model->BSIM3v0Lmin = 0.0; if (!model->BSIM3v0LmaxGiven) model->BSIM3v0Lmax = 1.0; if (!model->BSIM3v0WintGiven) model->BSIM3v0Wint = 0.0; if (!model->BSIM3v0WlGiven) model->BSIM3v0Wl = 0.0; if (!model->BSIM3v0WlnGiven) model->BSIM3v0Wln = 1.0; if (!model->BSIM3v0WwGiven) model->BSIM3v0Ww = 0.0; if (!model->BSIM3v0WwnGiven) model->BSIM3v0Wwn = 1.0; if (!model->BSIM3v0WwlGiven) model->BSIM3v0Wwl = 0.0; if (!model->BSIM3v0WminGiven) model->BSIM3v0Wmin = 0.0; if (!model->BSIM3v0WmaxGiven) model->BSIM3v0Wmax = 1.0; if (!model->BSIM3v0dwcGiven) model->BSIM3v0dwc = model->BSIM3v0Wint; if (!model->BSIM3v0dlcGiven) model->BSIM3v0dlc = model->BSIM3v0Lint; if (!model->BSIM3v0cfGiven) model->BSIM3v0cf = 2.0 * EPSOX / PI * log(1.0 + 0.4e-6 / model->BSIM3v0tox); if (!model->BSIM3v0cgdoGiven) { if (model->BSIM3v0dlcGiven && (model->BSIM3v0dlc > 0.0)) { model->BSIM3v0cgdo = model->BSIM3v0dlc * model->BSIM3v0cox - model->BSIM3v0cgdl ; if (model->BSIM3v0cgdo < 0.0) model->BSIM3v0cgdo = 0.0; } else model->BSIM3v0cgdo = 0.6 * model->BSIM3v0xj * model->BSIM3v0cox; } if (!model->BSIM3v0cgsoGiven) { if (model->BSIM3v0dlcGiven && (model->BSIM3v0dlc > 0.0)) { model->BSIM3v0cgso = model->BSIM3v0dlc * model->BSIM3v0cox - model->BSIM3v0cgsl ; if (model->BSIM3v0cgso < 0.0) model->BSIM3v0cgso = 0.0; } else model->BSIM3v0cgso = 0.6 * model->BSIM3v0xj * model->BSIM3v0cox; } if (!model->BSIM3v0cgboGiven) model->BSIM3v0cgbo = 0.0; if (!model->BSIM3v0xpartGiven) model->BSIM3v0xpart = 0.0; if (!model->BSIM3v0sheetResistanceGiven) model->BSIM3v0sheetResistance = 0.0; if (!model->BSIM3v0unitAreaJctCapGiven) model->BSIM3v0unitAreaJctCap = 5.0E-4; if (!model->BSIM3v0unitLengthSidewallJctCapGiven) model->BSIM3v0unitLengthSidewallJctCap = 5.0E-10; if (!model->BSIM3v0jctSatCurDensityGiven) model->BSIM3v0jctSatCurDensity = 1.0E-4; if (!model->BSIM3v0bulkJctPotentialGiven) model->BSIM3v0bulkJctPotential = 1.0; if (!model->BSIM3v0sidewallJctPotentialGiven) model->BSIM3v0sidewallJctPotential = 1.0; if (!model->BSIM3v0bulkJctBotGradingCoeffGiven) model->BSIM3v0bulkJctBotGradingCoeff = 0.5; if (!model->BSIM3v0bulkJctSideGradingCoeffGiven) model->BSIM3v0bulkJctSideGradingCoeff = 0.33; if (!model->BSIM3v0oxideTrapDensityAGiven) { if (model->BSIM3v0type == NMOS) model->BSIM3v0oxideTrapDensityA = 1e20; else model->BSIM3v0oxideTrapDensityA=9.9e18; } if (!model->BSIM3v0oxideTrapDensityBGiven) { if (model->BSIM3v0type == NMOS) model->BSIM3v0oxideTrapDensityB = 5e4; else model->BSIM3v0oxideTrapDensityB = 2.4e3; } if (!model->BSIM3v0oxideTrapDensityCGiven) { if (model->BSIM3v0type == NMOS) model->BSIM3v0oxideTrapDensityC = -1.4e-12; else model->BSIM3v0oxideTrapDensityC = 1.4e-12; } if (!model->BSIM3v0emGiven) model->BSIM3v0em = 4.1e7; /* V/m */ if (!model->BSIM3v0efGiven) model->BSIM3v0ef = 1.0; if (!model->BSIM3v0afGiven) model->BSIM3v0af = 1.0; if (!model->BSIM3v0kfGiven) model->BSIM3v0kf = 0.0; /* loop through all the instances of the model */ for (here = BSIM3v0instances(model); here != NULL ; here=BSIM3v0nextInstance(here)) { /* allocate a chunk of the state vector */ here->BSIM3v0states = *states; *states += BSIM3v0numStates; /* perform the parameter defaulting */ if (!here->BSIM3v0drainAreaGiven) here->BSIM3v0drainArea = 0.0; if (!here->BSIM3v0drainPerimeterGiven) here->BSIM3v0drainPerimeter = 0.0; if (!here->BSIM3v0drainSquaresGiven) here->BSIM3v0drainSquares = 1.0; if (!here->BSIM3v0icVBSGiven) here->BSIM3v0icVBS = 0; if (!here->BSIM3v0icVDSGiven) here->BSIM3v0icVDS = 0; if (!here->BSIM3v0icVGSGiven) here->BSIM3v0icVGS = 0; if (!here->BSIM3v0lGiven) here->BSIM3v0l = 5e-6; if (!here->BSIM3v0sourceAreaGiven) here->BSIM3v0sourceArea = 0; if (!here->BSIM3v0sourcePerimeterGiven) here->BSIM3v0sourcePerimeter = 0; if (!here->BSIM3v0sourceSquaresGiven) here->BSIM3v0sourceSquares = 1; if (!here->BSIM3v0wGiven) here->BSIM3v0w = 5e-6; if (!here->BSIM3v0mGiven) here->BSIM3v0m = 1; if (!here->BSIM3v0nqsModGiven) here->BSIM3v0nqsMod = model->BSIM3v0nqsMod; /* process drain series resistance */ if ((model->BSIM3v0sheetResistance > 0.0) && (here->BSIM3v0drainSquares > 0.0 )) { if(here->BSIM3v0dNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM3v0name,"drain"); if(error) return(error); here->BSIM3v0dNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->BSIM3v0dNodePrime = here->BSIM3v0dNode; } /* process source series resistance */ if ((model->BSIM3v0sheetResistance > 0.0) && (here->BSIM3v0sourceSquares > 0.0 )) { if(here->BSIM3v0sNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM3v0name,"source"); if(error) return(error); here->BSIM3v0sNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->BSIM3v0sNodePrime = here->BSIM3v0sNode; } /* internal charge node */ if ((here->BSIM3v0nqsMod)) { if(here->BSIM3v0qNode == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM3v0name,"charge"); if(error) return(error); here->BSIM3v0qNode = tmp->number; } } else { here->BSIM3v0qNode = 0; } /* set Sparse Matrix Pointers */ /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(BSIM3v0DdPtr, BSIM3v0dNode, BSIM3v0dNode); TSTALLOC(BSIM3v0GgPtr, BSIM3v0gNode, BSIM3v0gNode); TSTALLOC(BSIM3v0SsPtr, BSIM3v0sNode, BSIM3v0sNode); TSTALLOC(BSIM3v0BbPtr, BSIM3v0bNode, BSIM3v0bNode); TSTALLOC(BSIM3v0DPdpPtr, BSIM3v0dNodePrime, BSIM3v0dNodePrime); TSTALLOC(BSIM3v0SPspPtr, BSIM3v0sNodePrime, BSIM3v0sNodePrime); TSTALLOC(BSIM3v0DdpPtr, BSIM3v0dNode, BSIM3v0dNodePrime); TSTALLOC(BSIM3v0GbPtr, BSIM3v0gNode, BSIM3v0bNode); TSTALLOC(BSIM3v0GdpPtr, BSIM3v0gNode, BSIM3v0dNodePrime); TSTALLOC(BSIM3v0GspPtr, BSIM3v0gNode, BSIM3v0sNodePrime); TSTALLOC(BSIM3v0SspPtr, BSIM3v0sNode, BSIM3v0sNodePrime); TSTALLOC(BSIM3v0BdpPtr, BSIM3v0bNode, BSIM3v0dNodePrime); TSTALLOC(BSIM3v0BspPtr, BSIM3v0bNode, BSIM3v0sNodePrime); TSTALLOC(BSIM3v0DPspPtr, BSIM3v0dNodePrime, BSIM3v0sNodePrime); TSTALLOC(BSIM3v0DPdPtr, BSIM3v0dNodePrime, BSIM3v0dNode); TSTALLOC(BSIM3v0BgPtr, BSIM3v0bNode, BSIM3v0gNode); TSTALLOC(BSIM3v0DPgPtr, BSIM3v0dNodePrime, BSIM3v0gNode); TSTALLOC(BSIM3v0SPgPtr, BSIM3v0sNodePrime, BSIM3v0gNode); TSTALLOC(BSIM3v0SPsPtr, BSIM3v0sNodePrime, BSIM3v0sNode); TSTALLOC(BSIM3v0DPbPtr, BSIM3v0dNodePrime, BSIM3v0bNode); TSTALLOC(BSIM3v0SPbPtr, BSIM3v0sNodePrime, BSIM3v0bNode); TSTALLOC(BSIM3v0SPdpPtr, BSIM3v0sNodePrime, BSIM3v0dNodePrime); TSTALLOC(BSIM3v0QqPtr, BSIM3v0qNode, BSIM3v0qNode); TSTALLOC(BSIM3v0QdpPtr, BSIM3v0qNode, BSIM3v0dNodePrime); TSTALLOC(BSIM3v0QspPtr, BSIM3v0qNode, BSIM3v0sNodePrime); TSTALLOC(BSIM3v0QgPtr, BSIM3v0qNode, BSIM3v0gNode); TSTALLOC(BSIM3v0QbPtr, BSIM3v0qNode, BSIM3v0bNode); TSTALLOC(BSIM3v0DPqPtr, BSIM3v0dNodePrime, BSIM3v0qNode); TSTALLOC(BSIM3v0SPqPtr, BSIM3v0sNodePrime, BSIM3v0qNode); TSTALLOC(BSIM3v0GqPtr, BSIM3v0gNode, BSIM3v0qNode); TSTALLOC(BSIM3v0BqPtr, BSIM3v0bNode, BSIM3v0qNode); } } return(OK); } int BSIM3v0unsetup(GENmodel *inModel, CKTcircuit *ckt) { BSIM3v0model *model; BSIM3v0instance *here; for (model = (BSIM3v0model *)inModel; model != NULL; model = BSIM3v0nextModel(model)) { for (here = BSIM3v0instances(model); here != NULL; here=BSIM3v0nextInstance(here)) { if (here->BSIM3v0qNode > 0) CKTdltNNum(ckt, here->BSIM3v0qNode); here->BSIM3v0qNode = 0; if (here->BSIM3v0sNodePrime > 0 && here->BSIM3v0sNodePrime != here->BSIM3v0sNode) CKTdltNNum(ckt, here->BSIM3v0sNodePrime); here->BSIM3v0sNodePrime = 0; if (here->BSIM3v0dNodePrime > 0 && here->BSIM3v0dNodePrime != here->BSIM3v0dNode) CKTdltNNum(ckt, here->BSIM3v0dNodePrime); here->BSIM3v0dNodePrime = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim3v0/Makefile.am0000644000175000017500000000077513546075722022513 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libbsim3v0.la libbsim3v0_la_SOURCES = \ b3v0.c \ b3v0acld.c \ b3v0ask.c \ b3v0cvtest.c \ b3v0getic.c \ b3v0ld.c \ b3v0mask.c \ b3v0mpar.c \ b3v0noi.c \ b3v0par.c \ b3v0pzld.c \ b3v0set.c \ b3v0temp.c \ b3v0trunc.c \ bsim3v0def.h \ bsim3v0ext.h \ bsim3v0init.c \ bsim3v0init.h \ bsim3v0itf.h AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/bsim3v0/b3v0mpar.c0000644000175000017500000014603613546075722022256 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1995 Min-Chie Jeng and Mansun Chan. File: b3v0mpar.c **********/ #include "ngspice/ngspice.h" #include "bsim3v0def.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3v0mParam(int param, IFvalue *value, GENmodel *inMod) { BSIM3v0model *mod = (BSIM3v0model*)inMod; switch(param) { case BSIM3v0_MOD_MOBMOD : mod->BSIM3v0mobMod = value->iValue; mod->BSIM3v0mobModGiven = TRUE; break; case BSIM3v0_MOD_BINUNIT : mod->BSIM3v0binUnit = value->iValue; mod->BSIM3v0binUnitGiven = TRUE; break; case BSIM3v0_MOD_CAPMOD : mod->BSIM3v0capMod = value->iValue; mod->BSIM3v0capModGiven = TRUE; break; case BSIM3v0_MOD_NQSMOD : mod->BSIM3v0nqsMod = value->iValue; mod->BSIM3v0nqsModGiven = TRUE; break; case BSIM3v0_MOD_NOIMOD : mod->BSIM3v0noiMod = value->iValue; mod->BSIM3v0noiModGiven = TRUE; break; case BSIM3v0_MOD_TOX : mod->BSIM3v0tox = value->rValue; mod->BSIM3v0toxGiven = TRUE; break; case BSIM3v0_MOD_CDSC : mod->BSIM3v0cdsc = value->rValue; mod->BSIM3v0cdscGiven = TRUE; break; case BSIM3v0_MOD_CDSCB : mod->BSIM3v0cdscb = value->rValue; mod->BSIM3v0cdscbGiven = TRUE; break; case BSIM3v0_MOD_CDSCD : mod->BSIM3v0cdscd = value->rValue; mod->BSIM3v0cdscdGiven = TRUE; break; case BSIM3v0_MOD_CIT : mod->BSIM3v0cit = value->rValue; mod->BSIM3v0citGiven = TRUE; break; case BSIM3v0_MOD_NFACTOR : mod->BSIM3v0nfactor = value->rValue; mod->BSIM3v0nfactorGiven = TRUE; break; case BSIM3v0_MOD_XJ: mod->BSIM3v0xj = value->rValue; mod->BSIM3v0xjGiven = TRUE; break; case BSIM3v0_MOD_VSAT: mod->BSIM3v0vsat = value->rValue; mod->BSIM3v0vsatGiven = TRUE; break; case BSIM3v0_MOD_A0: mod->BSIM3v0a0 = value->rValue; mod->BSIM3v0a0Given = TRUE; break; case BSIM3v0_MOD_AGS: mod->BSIM3v0ags= value->rValue; mod->BSIM3v0agsGiven = TRUE; break; case BSIM3v0_MOD_A1: mod->BSIM3v0a1 = value->rValue; mod->BSIM3v0a1Given = TRUE; break; case BSIM3v0_MOD_A2: mod->BSIM3v0a2 = value->rValue; mod->BSIM3v0a2Given = TRUE; break; case BSIM3v0_MOD_AT: mod->BSIM3v0at = value->rValue; mod->BSIM3v0atGiven = TRUE; break; case BSIM3v0_MOD_KETA: mod->BSIM3v0keta = value->rValue; mod->BSIM3v0ketaGiven = TRUE; break; case BSIM3v0_MOD_NSUB: mod->BSIM3v0nsub = value->rValue; mod->BSIM3v0nsubGiven = TRUE; break; case BSIM3v0_MOD_NPEAK: mod->BSIM3v0npeak = value->rValue; mod->BSIM3v0npeakGiven = TRUE; if (mod->BSIM3v0npeak > 1.0e20) mod->BSIM3v0npeak *= 1.0e-6; break; case BSIM3v0_MOD_NGATE: mod->BSIM3v0ngate = value->rValue; mod->BSIM3v0ngateGiven = TRUE; if (mod->BSIM3v0ngate > 1.0e23) mod->BSIM3v0ngate *= 1.0e-6; break; case BSIM3v0_MOD_GAMMA1: mod->BSIM3v0gamma1 = value->rValue; mod->BSIM3v0gamma1Given = TRUE; break; case BSIM3v0_MOD_GAMMA2: mod->BSIM3v0gamma2 = value->rValue; mod->BSIM3v0gamma2Given = TRUE; break; case BSIM3v0_MOD_VBX: mod->BSIM3v0vbx = value->rValue; mod->BSIM3v0vbxGiven = TRUE; break; case BSIM3v0_MOD_VBM: mod->BSIM3v0vbm = value->rValue; mod->BSIM3v0vbmGiven = TRUE; break; case BSIM3v0_MOD_XT: mod->BSIM3v0xt = value->rValue; mod->BSIM3v0xtGiven = TRUE; break; case BSIM3v0_MOD_K1: mod->BSIM3v0k1 = value->rValue; mod->BSIM3v0k1Given = TRUE; break; case BSIM3v0_MOD_KT1: mod->BSIM3v0kt1 = value->rValue; mod->BSIM3v0kt1Given = TRUE; break; case BSIM3v0_MOD_KT1L: mod->BSIM3v0kt1l = value->rValue; mod->BSIM3v0kt1lGiven = TRUE; break; case BSIM3v0_MOD_KT2: mod->BSIM3v0kt2 = value->rValue; mod->BSIM3v0kt2Given = TRUE; break; case BSIM3v0_MOD_K2: mod->BSIM3v0k2 = value->rValue; mod->BSIM3v0k2Given = TRUE; break; case BSIM3v0_MOD_K3: mod->BSIM3v0k3 = value->rValue; mod->BSIM3v0k3Given = TRUE; break; case BSIM3v0_MOD_K3B: mod->BSIM3v0k3b = value->rValue; mod->BSIM3v0k3bGiven = TRUE; break; case BSIM3v0_MOD_NLX: mod->BSIM3v0nlx = value->rValue; mod->BSIM3v0nlxGiven = TRUE; break; case BSIM3v0_MOD_W0: mod->BSIM3v0w0 = value->rValue; mod->BSIM3v0w0Given = TRUE; break; case BSIM3v0_MOD_DVT0: mod->BSIM3v0dvt0 = value->rValue; mod->BSIM3v0dvt0Given = TRUE; break; case BSIM3v0_MOD_DVT1: mod->BSIM3v0dvt1 = value->rValue; mod->BSIM3v0dvt1Given = TRUE; break; case BSIM3v0_MOD_DVT2: mod->BSIM3v0dvt2 = value->rValue; mod->BSIM3v0dvt2Given = TRUE; break; case BSIM3v0_MOD_DVT0W: mod->BSIM3v0dvt0w = value->rValue; mod->BSIM3v0dvt0wGiven = TRUE; break; case BSIM3v0_MOD_DVT1W: mod->BSIM3v0dvt1w = value->rValue; mod->BSIM3v0dvt1wGiven = TRUE; break; case BSIM3v0_MOD_DVT2W: mod->BSIM3v0dvt2w = value->rValue; mod->BSIM3v0dvt2wGiven = TRUE; break; case BSIM3v0_MOD_DROUT: mod->BSIM3v0drout = value->rValue; mod->BSIM3v0droutGiven = TRUE; break; case BSIM3v0_MOD_DSUB: mod->BSIM3v0dsub = value->rValue; mod->BSIM3v0dsubGiven = TRUE; break; case BSIM3v0_MOD_VTH0: mod->BSIM3v0vth0 = value->rValue; mod->BSIM3v0vth0Given = TRUE; break; case BSIM3v0_MOD_UA: mod->BSIM3v0ua = value->rValue; mod->BSIM3v0uaGiven = TRUE; break; case BSIM3v0_MOD_UA1: mod->BSIM3v0ua1 = value->rValue; mod->BSIM3v0ua1Given = TRUE; break; case BSIM3v0_MOD_UB: mod->BSIM3v0ub = value->rValue; mod->BSIM3v0ubGiven = TRUE; break; case BSIM3v0_MOD_UB1: mod->BSIM3v0ub1 = value->rValue; mod->BSIM3v0ub1Given = TRUE; break; case BSIM3v0_MOD_UC: mod->BSIM3v0uc = value->rValue; mod->BSIM3v0ucGiven = TRUE; break; case BSIM3v0_MOD_UC1: mod->BSIM3v0uc1 = value->rValue; mod->BSIM3v0uc1Given = TRUE; break; case BSIM3v0_MOD_U0 : mod->BSIM3v0u0 = value->rValue; mod->BSIM3v0u0Given = TRUE; if (mod->BSIM3v0u0 > 1.0) mod->BSIM3v0u0 *= 1.0e-4; break; case BSIM3v0_MOD_UTE : mod->BSIM3v0ute = value->rValue; mod->BSIM3v0uteGiven = TRUE; break; case BSIM3v0_MOD_VOFF: mod->BSIM3v0voff = value->rValue; mod->BSIM3v0voffGiven = TRUE; break; case BSIM3v0_MOD_DELTA : mod->BSIM3v0delta = value->rValue; mod->BSIM3v0deltaGiven = TRUE; break; case BSIM3v0_MOD_RDSW: mod->BSIM3v0rdsw = value->rValue; mod->BSIM3v0rdswGiven = TRUE; break; case BSIM3v0_MOD_PRWG: mod->BSIM3v0prwg = value->rValue; mod->BSIM3v0prwgGiven = TRUE; break; case BSIM3v0_MOD_PRWB: mod->BSIM3v0prwb = value->rValue; mod->BSIM3v0prwbGiven = TRUE; break; case BSIM3v0_MOD_PRT: mod->BSIM3v0prt = value->rValue; mod->BSIM3v0prtGiven = TRUE; break; case BSIM3v0_MOD_ETA0: mod->BSIM3v0eta0 = value->rValue; mod->BSIM3v0eta0Given = TRUE; break; case BSIM3v0_MOD_ETAB: mod->BSIM3v0etab = value->rValue; mod->BSIM3v0etabGiven = TRUE; break; case BSIM3v0_MOD_PCLM: mod->BSIM3v0pclm = value->rValue; mod->BSIM3v0pclmGiven = TRUE; break; case BSIM3v0_MOD_PDIBL1: mod->BSIM3v0pdibl1 = value->rValue; mod->BSIM3v0pdibl1Given = TRUE; break; case BSIM3v0_MOD_PDIBL2: mod->BSIM3v0pdibl2 = value->rValue; mod->BSIM3v0pdibl2Given = TRUE; break; case BSIM3v0_MOD_PDIBLB: mod->BSIM3v0pdiblb = value->rValue; mod->BSIM3v0pdiblbGiven = TRUE; break; case BSIM3v0_MOD_PSCBE1: mod->BSIM3v0pscbe1 = value->rValue; mod->BSIM3v0pscbe1Given = TRUE; break; case BSIM3v0_MOD_PSCBE2: mod->BSIM3v0pscbe2 = value->rValue; mod->BSIM3v0pscbe2Given = TRUE; break; case BSIM3v0_MOD_PVAG: mod->BSIM3v0pvag = value->rValue; mod->BSIM3v0pvagGiven = TRUE; break; case BSIM3v0_MOD_WR : mod->BSIM3v0wr = value->rValue; mod->BSIM3v0wrGiven = TRUE; break; case BSIM3v0_MOD_DWG : mod->BSIM3v0dwg = value->rValue; mod->BSIM3v0dwgGiven = TRUE; break; case BSIM3v0_MOD_DWB : mod->BSIM3v0dwb = value->rValue; mod->BSIM3v0dwbGiven = TRUE; break; case BSIM3v0_MOD_B0 : mod->BSIM3v0b0 = value->rValue; mod->BSIM3v0b0Given = TRUE; break; case BSIM3v0_MOD_B1 : mod->BSIM3v0b1 = value->rValue; mod->BSIM3v0b1Given = TRUE; break; case BSIM3v0_MOD_ALPHA0 : mod->BSIM3v0alpha0 = value->rValue; mod->BSIM3v0alpha0Given = TRUE; break; case BSIM3v0_MOD_BETA0 : mod->BSIM3v0beta0 = value->rValue; mod->BSIM3v0beta0Given = TRUE; break; case BSIM3v0_MOD_ELM : mod->BSIM3v0elm = value->rValue; mod->BSIM3v0elmGiven = TRUE; break; case BSIM3v0_MOD_CGSL : mod->BSIM3v0cgsl = value->rValue; mod->BSIM3v0cgslGiven = TRUE; break; case BSIM3v0_MOD_CGDL : mod->BSIM3v0cgdl = value->rValue; mod->BSIM3v0cgdlGiven = TRUE; break; case BSIM3v0_MOD_CKAPPA : mod->BSIM3v0ckappa = value->rValue; mod->BSIM3v0ckappaGiven = TRUE; break; case BSIM3v0_MOD_CF : mod->BSIM3v0cf = value->rValue; mod->BSIM3v0cfGiven = TRUE; break; case BSIM3v0_MOD_CLC : mod->BSIM3v0clc = value->rValue; mod->BSIM3v0clcGiven = TRUE; break; case BSIM3v0_MOD_CLE : mod->BSIM3v0cle = value->rValue; mod->BSIM3v0cleGiven = TRUE; break; case BSIM3v0_MOD_DWC : mod->BSIM3v0dwc = value->rValue; mod->BSIM3v0dwcGiven = TRUE; break; case BSIM3v0_MOD_DLC : mod->BSIM3v0dlc = value->rValue; mod->BSIM3v0dlcGiven = TRUE; break; /* Length dependence */ case BSIM3v0_MOD_LCDSC : mod->BSIM3v0lcdsc = value->rValue; mod->BSIM3v0lcdscGiven = TRUE; break; case BSIM3v0_MOD_LCDSCB : mod->BSIM3v0lcdscb = value->rValue; mod->BSIM3v0lcdscbGiven = TRUE; break; case BSIM3v0_MOD_LCDSCD : mod->BSIM3v0lcdscd = value->rValue; mod->BSIM3v0lcdscdGiven = TRUE; break; case BSIM3v0_MOD_LCIT : mod->BSIM3v0lcit = value->rValue; mod->BSIM3v0lcitGiven = TRUE; break; case BSIM3v0_MOD_LNFACTOR : mod->BSIM3v0lnfactor = value->rValue; mod->BSIM3v0lnfactorGiven = TRUE; break; case BSIM3v0_MOD_LXJ: mod->BSIM3v0lxj = value->rValue; mod->BSIM3v0lxjGiven = TRUE; break; case BSIM3v0_MOD_LVSAT: mod->BSIM3v0lvsat = value->rValue; mod->BSIM3v0lvsatGiven = TRUE; break; case BSIM3v0_MOD_LA0: mod->BSIM3v0la0 = value->rValue; mod->BSIM3v0la0Given = TRUE; break; case BSIM3v0_MOD_LAGS: mod->BSIM3v0lags = value->rValue; mod->BSIM3v0lagsGiven = TRUE; break; case BSIM3v0_MOD_LA1: mod->BSIM3v0la1 = value->rValue; mod->BSIM3v0la1Given = TRUE; break; case BSIM3v0_MOD_LA2: mod->BSIM3v0la2 = value->rValue; mod->BSIM3v0la2Given = TRUE; break; case BSIM3v0_MOD_LAT: mod->BSIM3v0lat = value->rValue; mod->BSIM3v0latGiven = TRUE; break; case BSIM3v0_MOD_LKETA: mod->BSIM3v0lketa = value->rValue; mod->BSIM3v0lketaGiven = TRUE; break; case BSIM3v0_MOD_LNSUB: mod->BSIM3v0lnsub = value->rValue; mod->BSIM3v0lnsubGiven = TRUE; break; case BSIM3v0_MOD_LNPEAK: mod->BSIM3v0lnpeak = value->rValue; mod->BSIM3v0lnpeakGiven = TRUE; if (mod->BSIM3v0lnpeak > 1.0e20) mod->BSIM3v0lnpeak *= 1.0e-6; break; case BSIM3v0_MOD_LNGATE: mod->BSIM3v0lngate = value->rValue; mod->BSIM3v0lngateGiven = TRUE; if (mod->BSIM3v0lngate > 1.0e23) mod->BSIM3v0lngate *= 1.0e-6; break; case BSIM3v0_MOD_LGAMMA1: mod->BSIM3v0lgamma1 = value->rValue; mod->BSIM3v0lgamma1Given = TRUE; break; case BSIM3v0_MOD_LGAMMA2: mod->BSIM3v0lgamma2 = value->rValue; mod->BSIM3v0lgamma2Given = TRUE; break; case BSIM3v0_MOD_LVBX: mod->BSIM3v0lvbx = value->rValue; mod->BSIM3v0lvbxGiven = TRUE; break; case BSIM3v0_MOD_LVBM: mod->BSIM3v0lvbm = value->rValue; mod->BSIM3v0lvbmGiven = TRUE; break; case BSIM3v0_MOD_LXT: mod->BSIM3v0lxt = value->rValue; mod->BSIM3v0lxtGiven = TRUE; break; case BSIM3v0_MOD_LK1: mod->BSIM3v0lk1 = value->rValue; mod->BSIM3v0lk1Given = TRUE; break; case BSIM3v0_MOD_LKT1: mod->BSIM3v0lkt1 = value->rValue; mod->BSIM3v0lkt1Given = TRUE; break; case BSIM3v0_MOD_LKT1L: mod->BSIM3v0lkt1l = value->rValue; mod->BSIM3v0lkt1lGiven = TRUE; break; case BSIM3v0_MOD_LKT2: mod->BSIM3v0lkt2 = value->rValue; mod->BSIM3v0lkt2Given = TRUE; break; case BSIM3v0_MOD_LK2: mod->BSIM3v0lk2 = value->rValue; mod->BSIM3v0lk2Given = TRUE; break; case BSIM3v0_MOD_LK3: mod->BSIM3v0lk3 = value->rValue; mod->BSIM3v0lk3Given = TRUE; break; case BSIM3v0_MOD_LK3B: mod->BSIM3v0lk3b = value->rValue; mod->BSIM3v0lk3bGiven = TRUE; break; case BSIM3v0_MOD_LNLX: mod->BSIM3v0lnlx = value->rValue; mod->BSIM3v0lnlxGiven = TRUE; break; case BSIM3v0_MOD_LW0: mod->BSIM3v0lw0 = value->rValue; mod->BSIM3v0lw0Given = TRUE; break; case BSIM3v0_MOD_LDVT0: mod->BSIM3v0ldvt0 = value->rValue; mod->BSIM3v0ldvt0Given = TRUE; break; case BSIM3v0_MOD_LDVT1: mod->BSIM3v0ldvt1 = value->rValue; mod->BSIM3v0ldvt1Given = TRUE; break; case BSIM3v0_MOD_LDVT2: mod->BSIM3v0ldvt2 = value->rValue; mod->BSIM3v0ldvt2Given = TRUE; break; case BSIM3v0_MOD_LDVT0W: mod->BSIM3v0ldvt0w = value->rValue; mod->BSIM3v0ldvt0Given = TRUE; break; case BSIM3v0_MOD_LDVT1W: mod->BSIM3v0ldvt1 = value->rValue; mod->BSIM3v0ldvt1wGiven = TRUE; break; case BSIM3v0_MOD_LDVT2W: mod->BSIM3v0ldvt2 = value->rValue; mod->BSIM3v0ldvt2wGiven = TRUE; break; case BSIM3v0_MOD_LDROUT: mod->BSIM3v0ldrout = value->rValue; mod->BSIM3v0ldroutGiven = TRUE; break; case BSIM3v0_MOD_LDSUB: mod->BSIM3v0ldsub = value->rValue; mod->BSIM3v0ldsubGiven = TRUE; break; case BSIM3v0_MOD_LVTH0: mod->BSIM3v0lvth0 = value->rValue; mod->BSIM3v0lvth0Given = TRUE; break; case BSIM3v0_MOD_LUA: mod->BSIM3v0lua = value->rValue; mod->BSIM3v0luaGiven = TRUE; break; case BSIM3v0_MOD_LUA1: mod->BSIM3v0lua1 = value->rValue; mod->BSIM3v0lua1Given = TRUE; break; case BSIM3v0_MOD_LUB: mod->BSIM3v0lub = value->rValue; mod->BSIM3v0lubGiven = TRUE; break; case BSIM3v0_MOD_LUB1: mod->BSIM3v0lub1 = value->rValue; mod->BSIM3v0lub1Given = TRUE; break; case BSIM3v0_MOD_LUC: mod->BSIM3v0luc = value->rValue; mod->BSIM3v0lucGiven = TRUE; break; case BSIM3v0_MOD_LUC1: mod->BSIM3v0luc1 = value->rValue; mod->BSIM3v0luc1Given = TRUE; break; case BSIM3v0_MOD_LU0 : mod->BSIM3v0lu0 = value->rValue; mod->BSIM3v0lu0Given = TRUE; if (mod->BSIM3v0lu0 > 1.0) mod->BSIM3v0lu0 *= 1.0e-4; break; case BSIM3v0_MOD_LUTE : mod->BSIM3v0lute = value->rValue; mod->BSIM3v0luteGiven = TRUE; break; case BSIM3v0_MOD_LVOFF: mod->BSIM3v0lvoff = value->rValue; mod->BSIM3v0lvoffGiven = TRUE; break; case BSIM3v0_MOD_LDELTA : mod->BSIM3v0ldelta = value->rValue; mod->BSIM3v0ldeltaGiven = TRUE; break; case BSIM3v0_MOD_LRDSW: mod->BSIM3v0lrdsw = value->rValue; mod->BSIM3v0lrdswGiven = TRUE; break; case BSIM3v0_MOD_LPRWB: mod->BSIM3v0lprwb = value->rValue; mod->BSIM3v0lprwbGiven = TRUE; break; case BSIM3v0_MOD_LPRWG: mod->BSIM3v0lprwg = value->rValue; mod->BSIM3v0lprwgGiven = TRUE; break; case BSIM3v0_MOD_LPRT: mod->BSIM3v0lprt = value->rValue; mod->BSIM3v0lprtGiven = TRUE; break; case BSIM3v0_MOD_LETA0: mod->BSIM3v0leta0 = value->rValue; mod->BSIM3v0leta0Given = TRUE; break; case BSIM3v0_MOD_LETAB: mod->BSIM3v0letab = value->rValue; mod->BSIM3v0letabGiven = TRUE; break; case BSIM3v0_MOD_LPCLM: mod->BSIM3v0lpclm = value->rValue; mod->BSIM3v0lpclmGiven = TRUE; break; case BSIM3v0_MOD_LPDIBL1: mod->BSIM3v0lpdibl1 = value->rValue; mod->BSIM3v0lpdibl1Given = TRUE; break; case BSIM3v0_MOD_LPDIBL2: mod->BSIM3v0lpdibl2 = value->rValue; mod->BSIM3v0lpdibl2Given = TRUE; break; case BSIM3v0_MOD_LPDIBLB: mod->BSIM3v0lpdiblb = value->rValue; mod->BSIM3v0lpdiblbGiven = TRUE; break; case BSIM3v0_MOD_LPSCBE1: mod->BSIM3v0lpscbe1 = value->rValue; mod->BSIM3v0lpscbe1Given = TRUE; break; case BSIM3v0_MOD_LPSCBE2: mod->BSIM3v0lpscbe2 = value->rValue; mod->BSIM3v0lpscbe2Given = TRUE; break; case BSIM3v0_MOD_LPVAG: mod->BSIM3v0lpvag = value->rValue; mod->BSIM3v0lpvagGiven = TRUE; break; case BSIM3v0_MOD_LWR : mod->BSIM3v0lwr = value->rValue; mod->BSIM3v0lwrGiven = TRUE; break; case BSIM3v0_MOD_LDWG : mod->BSIM3v0ldwg = value->rValue; mod->BSIM3v0ldwgGiven = TRUE; break; case BSIM3v0_MOD_LDWB : mod->BSIM3v0ldwb = value->rValue; mod->BSIM3v0ldwbGiven = TRUE; break; case BSIM3v0_MOD_LB0 : mod->BSIM3v0lb0 = value->rValue; mod->BSIM3v0lb0Given = TRUE; break; case BSIM3v0_MOD_LB1 : mod->BSIM3v0lb1 = value->rValue; mod->BSIM3v0lb1Given = TRUE; break; case BSIM3v0_MOD_LALPHA0 : mod->BSIM3v0lalpha0 = value->rValue; mod->BSIM3v0lalpha0Given = TRUE; break; case BSIM3v0_MOD_LBETA0 : mod->BSIM3v0lbeta0 = value->rValue; mod->BSIM3v0lbeta0Given = TRUE; break; case BSIM3v0_MOD_LELM : mod->BSIM3v0lelm = value->rValue; mod->BSIM3v0lelmGiven = TRUE; break; case BSIM3v0_MOD_LCGSL : mod->BSIM3v0lcgsl = value->rValue; mod->BSIM3v0lcgslGiven = TRUE; break; case BSIM3v0_MOD_LCGDL : mod->BSIM3v0lcgdl = value->rValue; mod->BSIM3v0lcgdlGiven = TRUE; break; case BSIM3v0_MOD_LCKAPPA : mod->BSIM3v0lckappa = value->rValue; mod->BSIM3v0lckappaGiven = TRUE; break; case BSIM3v0_MOD_LCF : mod->BSIM3v0lcf = value->rValue; mod->BSIM3v0lcfGiven = TRUE; break; case BSIM3v0_MOD_LCLC : mod->BSIM3v0lclc = value->rValue; mod->BSIM3v0lclcGiven = TRUE; break; case BSIM3v0_MOD_LCLE : mod->BSIM3v0lcle = value->rValue; mod->BSIM3v0lcleGiven = TRUE; break; /* Width dependence */ case BSIM3v0_MOD_WCDSC : mod->BSIM3v0wcdsc = value->rValue; mod->BSIM3v0wcdscGiven = TRUE; break; case BSIM3v0_MOD_WCDSCB : mod->BSIM3v0wcdscb = value->rValue; mod->BSIM3v0wcdscbGiven = TRUE; break; case BSIM3v0_MOD_WCDSCD : mod->BSIM3v0wcdscd = value->rValue; mod->BSIM3v0wcdscdGiven = TRUE; break; case BSIM3v0_MOD_WCIT : mod->BSIM3v0wcit = value->rValue; mod->BSIM3v0wcitGiven = TRUE; break; case BSIM3v0_MOD_WNFACTOR : mod->BSIM3v0wnfactor = value->rValue; mod->BSIM3v0wnfactorGiven = TRUE; break; case BSIM3v0_MOD_WXJ: mod->BSIM3v0wxj = value->rValue; mod->BSIM3v0wxjGiven = TRUE; break; case BSIM3v0_MOD_WVSAT: mod->BSIM3v0wvsat = value->rValue; mod->BSIM3v0wvsatGiven = TRUE; break; case BSIM3v0_MOD_WA0: mod->BSIM3v0wa0 = value->rValue; mod->BSIM3v0wa0Given = TRUE; break; case BSIM3v0_MOD_WAGS: mod->BSIM3v0wags = value->rValue; mod->BSIM3v0wagsGiven = TRUE; break; case BSIM3v0_MOD_WA1: mod->BSIM3v0wa1 = value->rValue; mod->BSIM3v0wa1Given = TRUE; break; case BSIM3v0_MOD_WA2: mod->BSIM3v0wa2 = value->rValue; mod->BSIM3v0wa2Given = TRUE; break; case BSIM3v0_MOD_WAT: mod->BSIM3v0wat = value->rValue; mod->BSIM3v0watGiven = TRUE; break; case BSIM3v0_MOD_WKETA: mod->BSIM3v0wketa = value->rValue; mod->BSIM3v0wketaGiven = TRUE; break; case BSIM3v0_MOD_WNSUB: mod->BSIM3v0wnsub = value->rValue; mod->BSIM3v0wnsubGiven = TRUE; break; case BSIM3v0_MOD_WNPEAK: mod->BSIM3v0wnpeak = value->rValue; mod->BSIM3v0wnpeakGiven = TRUE; if (mod->BSIM3v0wnpeak > 1.0e20) mod->BSIM3v0wnpeak *= 1.0e-6; break; case BSIM3v0_MOD_WNGATE: mod->BSIM3v0wngate = value->rValue; mod->BSIM3v0wngateGiven = TRUE; if (mod->BSIM3v0wngate > 1.0e23) mod->BSIM3v0wngate *= 1.0e-6; break; case BSIM3v0_MOD_WGAMMA1: mod->BSIM3v0wgamma1 = value->rValue; mod->BSIM3v0wgamma1Given = TRUE; break; case BSIM3v0_MOD_WGAMMA2: mod->BSIM3v0wgamma2 = value->rValue; mod->BSIM3v0wgamma2Given = TRUE; break; case BSIM3v0_MOD_WVBX: mod->BSIM3v0wvbx = value->rValue; mod->BSIM3v0wvbxGiven = TRUE; break; case BSIM3v0_MOD_WVBM: mod->BSIM3v0wvbm = value->rValue; mod->BSIM3v0wvbmGiven = TRUE; break; case BSIM3v0_MOD_WXT: mod->BSIM3v0wxt = value->rValue; mod->BSIM3v0wxtGiven = TRUE; break; case BSIM3v0_MOD_WK1: mod->BSIM3v0wk1 = value->rValue; mod->BSIM3v0wk1Given = TRUE; break; case BSIM3v0_MOD_WKT1: mod->BSIM3v0wkt1 = value->rValue; mod->BSIM3v0wkt1Given = TRUE; break; case BSIM3v0_MOD_WKT1L: mod->BSIM3v0wkt1l = value->rValue; mod->BSIM3v0wkt1lGiven = TRUE; break; case BSIM3v0_MOD_WKT2: mod->BSIM3v0wkt2 = value->rValue; mod->BSIM3v0wkt2Given = TRUE; break; case BSIM3v0_MOD_WK2: mod->BSIM3v0wk2 = value->rValue; mod->BSIM3v0wk2Given = TRUE; break; case BSIM3v0_MOD_WK3: mod->BSIM3v0wk3 = value->rValue; mod->BSIM3v0wk3Given = TRUE; break; case BSIM3v0_MOD_WK3B: mod->BSIM3v0wk3b = value->rValue; mod->BSIM3v0wk3bGiven = TRUE; break; case BSIM3v0_MOD_WNLX: mod->BSIM3v0wnlx = value->rValue; mod->BSIM3v0wnlxGiven = TRUE; break; case BSIM3v0_MOD_WW0: mod->BSIM3v0ww0 = value->rValue; mod->BSIM3v0ww0Given = TRUE; break; case BSIM3v0_MOD_WDVT0: mod->BSIM3v0wdvt0 = value->rValue; mod->BSIM3v0wdvt0Given = TRUE; break; case BSIM3v0_MOD_WDVT1: mod->BSIM3v0wdvt1 = value->rValue; mod->BSIM3v0wdvt1Given = TRUE; break; case BSIM3v0_MOD_WDVT2: mod->BSIM3v0wdvt2 = value->rValue; mod->BSIM3v0wdvt2Given = TRUE; break; case BSIM3v0_MOD_WDVT0W: mod->BSIM3v0wdvt0w = value->rValue; mod->BSIM3v0wdvt0wGiven = TRUE; break; case BSIM3v0_MOD_WDVT1W: mod->BSIM3v0wdvt1w = value->rValue; mod->BSIM3v0wdvt1wGiven = TRUE; break; case BSIM3v0_MOD_WDVT2W: mod->BSIM3v0wdvt2w = value->rValue; mod->BSIM3v0wdvt2wGiven = TRUE; break; case BSIM3v0_MOD_WDROUT: mod->BSIM3v0wdrout = value->rValue; mod->BSIM3v0wdroutGiven = TRUE; break; case BSIM3v0_MOD_WDSUB: mod->BSIM3v0wdsub = value->rValue; mod->BSIM3v0wdsubGiven = TRUE; break; case BSIM3v0_MOD_WVTH0: mod->BSIM3v0wvth0 = value->rValue; mod->BSIM3v0wvth0Given = TRUE; break; case BSIM3v0_MOD_WUA: mod->BSIM3v0wua = value->rValue; mod->BSIM3v0wuaGiven = TRUE; break; case BSIM3v0_MOD_WUA1: mod->BSIM3v0wua1 = value->rValue; mod->BSIM3v0wua1Given = TRUE; break; case BSIM3v0_MOD_WUB: mod->BSIM3v0wub = value->rValue; mod->BSIM3v0wubGiven = TRUE; break; case BSIM3v0_MOD_WUB1: mod->BSIM3v0wub1 = value->rValue; mod->BSIM3v0wub1Given = TRUE; break; case BSIM3v0_MOD_WUC: mod->BSIM3v0wuc = value->rValue; mod->BSIM3v0wucGiven = TRUE; break; case BSIM3v0_MOD_WUC1: mod->BSIM3v0wuc1 = value->rValue; mod->BSIM3v0wuc1Given = TRUE; break; case BSIM3v0_MOD_WU0 : mod->BSIM3v0wu0 = value->rValue; mod->BSIM3v0wu0Given = TRUE; if (mod->BSIM3v0wu0 > 1.0) mod->BSIM3v0wu0 *= 1.0e-4; break; case BSIM3v0_MOD_WUTE : mod->BSIM3v0wute = value->rValue; mod->BSIM3v0wuteGiven = TRUE; break; case BSIM3v0_MOD_WVOFF: mod->BSIM3v0wvoff = value->rValue; mod->BSIM3v0wvoffGiven = TRUE; break; case BSIM3v0_MOD_WDELTA : mod->BSIM3v0wdelta = value->rValue; mod->BSIM3v0wdeltaGiven = TRUE; break; case BSIM3v0_MOD_WRDSW: mod->BSIM3v0wrdsw = value->rValue; mod->BSIM3v0wrdswGiven = TRUE; break; case BSIM3v0_MOD_WPRWB: mod->BSIM3v0wprwb = value->rValue; mod->BSIM3v0wprwbGiven = TRUE; break; case BSIM3v0_MOD_WPRWG: mod->BSIM3v0wprwg = value->rValue; mod->BSIM3v0wprwgGiven = TRUE; break; case BSIM3v0_MOD_WPRT: mod->BSIM3v0wprt = value->rValue; mod->BSIM3v0wprtGiven = TRUE; break; case BSIM3v0_MOD_WETA0: mod->BSIM3v0weta0 = value->rValue; mod->BSIM3v0weta0Given = TRUE; break; case BSIM3v0_MOD_WETAB: mod->BSIM3v0wetab = value->rValue; mod->BSIM3v0wetabGiven = TRUE; break; case BSIM3v0_MOD_WPCLM: mod->BSIM3v0wpclm = value->rValue; mod->BSIM3v0wpclmGiven = TRUE; break; case BSIM3v0_MOD_WPDIBL1: mod->BSIM3v0wpdibl1 = value->rValue; mod->BSIM3v0wpdibl1Given = TRUE; break; case BSIM3v0_MOD_WPDIBL2: mod->BSIM3v0wpdibl2 = value->rValue; mod->BSIM3v0wpdibl2Given = TRUE; break; case BSIM3v0_MOD_WPDIBLB: mod->BSIM3v0wpdiblb = value->rValue; mod->BSIM3v0wpdiblbGiven = TRUE; break; case BSIM3v0_MOD_WPSCBE1: mod->BSIM3v0wpscbe1 = value->rValue; mod->BSIM3v0wpscbe1Given = TRUE; break; case BSIM3v0_MOD_WPSCBE2: mod->BSIM3v0wpscbe2 = value->rValue; mod->BSIM3v0wpscbe2Given = TRUE; break; case BSIM3v0_MOD_WPVAG: mod->BSIM3v0wpvag = value->rValue; mod->BSIM3v0wpvagGiven = TRUE; break; case BSIM3v0_MOD_WWR : mod->BSIM3v0wwr = value->rValue; mod->BSIM3v0wwrGiven = TRUE; break; case BSIM3v0_MOD_WDWG : mod->BSIM3v0wdwg = value->rValue; mod->BSIM3v0wdwgGiven = TRUE; break; case BSIM3v0_MOD_WDWB : mod->BSIM3v0wdwb = value->rValue; mod->BSIM3v0wdwbGiven = TRUE; break; case BSIM3v0_MOD_WB0 : mod->BSIM3v0wb0 = value->rValue; mod->BSIM3v0wb0Given = TRUE; break; case BSIM3v0_MOD_WB1 : mod->BSIM3v0wb1 = value->rValue; mod->BSIM3v0wb1Given = TRUE; break; case BSIM3v0_MOD_WALPHA0 : mod->BSIM3v0walpha0 = value->rValue; mod->BSIM3v0walpha0Given = TRUE; break; case BSIM3v0_MOD_WBETA0 : mod->BSIM3v0wbeta0 = value->rValue; mod->BSIM3v0wbeta0Given = TRUE; break; case BSIM3v0_MOD_WELM : mod->BSIM3v0welm = value->rValue; mod->BSIM3v0welmGiven = TRUE; break; case BSIM3v0_MOD_WCGSL : mod->BSIM3v0wcgsl = value->rValue; mod->BSIM3v0wcgslGiven = TRUE; break; case BSIM3v0_MOD_WCGDL : mod->BSIM3v0wcgdl = value->rValue; mod->BSIM3v0wcgdlGiven = TRUE; break; case BSIM3v0_MOD_WCKAPPA : mod->BSIM3v0wckappa = value->rValue; mod->BSIM3v0wckappaGiven = TRUE; break; case BSIM3v0_MOD_WCF : mod->BSIM3v0wcf = value->rValue; mod->BSIM3v0wcfGiven = TRUE; break; case BSIM3v0_MOD_WCLC : mod->BSIM3v0wclc = value->rValue; mod->BSIM3v0wclcGiven = TRUE; break; case BSIM3v0_MOD_WCLE : mod->BSIM3v0wcle = value->rValue; mod->BSIM3v0wcleGiven = TRUE; break; /* Cross-term dependence */ case BSIM3v0_MOD_PCDSC : mod->BSIM3v0pcdsc = value->rValue; mod->BSIM3v0pcdscGiven = TRUE; break; case BSIM3v0_MOD_PCDSCB : mod->BSIM3v0pcdscb = value->rValue; mod->BSIM3v0pcdscbGiven = TRUE; break; case BSIM3v0_MOD_PCDSCD : mod->BSIM3v0pcdscd = value->rValue; mod->BSIM3v0pcdscdGiven = TRUE; break; case BSIM3v0_MOD_PCIT : mod->BSIM3v0pcit = value->rValue; mod->BSIM3v0pcitGiven = TRUE; break; case BSIM3v0_MOD_PNFACTOR : mod->BSIM3v0pnfactor = value->rValue; mod->BSIM3v0pnfactorGiven = TRUE; break; case BSIM3v0_MOD_PXJ: mod->BSIM3v0pxj = value->rValue; mod->BSIM3v0pxjGiven = TRUE; break; case BSIM3v0_MOD_PVSAT: mod->BSIM3v0pvsat = value->rValue; mod->BSIM3v0pvsatGiven = TRUE; break; case BSIM3v0_MOD_PA0: mod->BSIM3v0pa0 = value->rValue; mod->BSIM3v0pa0Given = TRUE; break; case BSIM3v0_MOD_PAGS: mod->BSIM3v0pags = value->rValue; mod->BSIM3v0pagsGiven = TRUE; break; case BSIM3v0_MOD_PA1: mod->BSIM3v0pa1 = value->rValue; mod->BSIM3v0pa1Given = TRUE; break; case BSIM3v0_MOD_PA2: mod->BSIM3v0pa2 = value->rValue; mod->BSIM3v0pa2Given = TRUE; break; case BSIM3v0_MOD_PAT: mod->BSIM3v0pat = value->rValue; mod->BSIM3v0patGiven = TRUE; break; case BSIM3v0_MOD_PKETA: mod->BSIM3v0pketa = value->rValue; mod->BSIM3v0pketaGiven = TRUE; break; case BSIM3v0_MOD_PNSUB: mod->BSIM3v0pnsub = value->rValue; mod->BSIM3v0pnsubGiven = TRUE; break; case BSIM3v0_MOD_PNPEAK: mod->BSIM3v0pnpeak = value->rValue; mod->BSIM3v0pnpeakGiven = TRUE; if (mod->BSIM3v0pnpeak > 1.0e20) mod->BSIM3v0pnpeak *= 1.0e-6; break; case BSIM3v0_MOD_PNGATE: mod->BSIM3v0pngate = value->rValue; mod->BSIM3v0pngateGiven = TRUE; if (mod->BSIM3v0pngate > 1.0e23) mod->BSIM3v0pngate *= 1.0e-6; break; case BSIM3v0_MOD_PGAMMA1: mod->BSIM3v0pgamma1 = value->rValue; mod->BSIM3v0pgamma1Given = TRUE; break; case BSIM3v0_MOD_PGAMMA2: mod->BSIM3v0pgamma2 = value->rValue; mod->BSIM3v0pgamma2Given = TRUE; break; case BSIM3v0_MOD_PVBX: mod->BSIM3v0pvbx = value->rValue; mod->BSIM3v0pvbxGiven = TRUE; break; case BSIM3v0_MOD_PVBM: mod->BSIM3v0pvbm = value->rValue; mod->BSIM3v0pvbmGiven = TRUE; break; case BSIM3v0_MOD_PXT: mod->BSIM3v0pxt = value->rValue; mod->BSIM3v0pxtGiven = TRUE; break; case BSIM3v0_MOD_PK1: mod->BSIM3v0pk1 = value->rValue; mod->BSIM3v0pk1Given = TRUE; break; case BSIM3v0_MOD_PKT1: mod->BSIM3v0pkt1 = value->rValue; mod->BSIM3v0pkt1Given = TRUE; break; case BSIM3v0_MOD_PKT1L: mod->BSIM3v0pkt1l = value->rValue; mod->BSIM3v0pkt1lGiven = TRUE; break; case BSIM3v0_MOD_PKT2: mod->BSIM3v0pkt2 = value->rValue; mod->BSIM3v0pkt2Given = TRUE; break; case BSIM3v0_MOD_PK2: mod->BSIM3v0pk2 = value->rValue; mod->BSIM3v0pk2Given = TRUE; break; case BSIM3v0_MOD_PK3: mod->BSIM3v0pk3 = value->rValue; mod->BSIM3v0pk3Given = TRUE; break; case BSIM3v0_MOD_PK3B: mod->BSIM3v0pk3b = value->rValue; mod->BSIM3v0pk3bGiven = TRUE; break; case BSIM3v0_MOD_PNLX: mod->BSIM3v0pnlx = value->rValue; mod->BSIM3v0pnlxGiven = TRUE; break; case BSIM3v0_MOD_PW0: mod->BSIM3v0pw0 = value->rValue; mod->BSIM3v0pw0Given = TRUE; break; case BSIM3v0_MOD_PDVT0: mod->BSIM3v0pdvt0 = value->rValue; mod->BSIM3v0pdvt0Given = TRUE; break; case BSIM3v0_MOD_PDVT1: mod->BSIM3v0pdvt1 = value->rValue; mod->BSIM3v0pdvt1Given = TRUE; break; case BSIM3v0_MOD_PDVT2: mod->BSIM3v0pdvt2 = value->rValue; mod->BSIM3v0pdvt2Given = TRUE; break; case BSIM3v0_MOD_PDVT0W: mod->BSIM3v0pdvt0w = value->rValue; mod->BSIM3v0pdvt0wGiven = TRUE; break; case BSIM3v0_MOD_PDVT1W: mod->BSIM3v0pdvt1w = value->rValue; mod->BSIM3v0pdvt1wGiven = TRUE; break; case BSIM3v0_MOD_PDVT2W: mod->BSIM3v0pdvt2w = value->rValue; mod->BSIM3v0pdvt2wGiven = TRUE; break; case BSIM3v0_MOD_PDROUT: mod->BSIM3v0pdrout = value->rValue; mod->BSIM3v0pdroutGiven = TRUE; break; case BSIM3v0_MOD_PDSUB: mod->BSIM3v0pdsub = value->rValue; mod->BSIM3v0pdsubGiven = TRUE; break; case BSIM3v0_MOD_PVTH0: mod->BSIM3v0pvth0 = value->rValue; mod->BSIM3v0pvth0Given = TRUE; break; case BSIM3v0_MOD_PUA: mod->BSIM3v0pua = value->rValue; mod->BSIM3v0puaGiven = TRUE; break; case BSIM3v0_MOD_PUA1: mod->BSIM3v0pua1 = value->rValue; mod->BSIM3v0pua1Given = TRUE; break; case BSIM3v0_MOD_PUB: mod->BSIM3v0pub = value->rValue; mod->BSIM3v0pubGiven = TRUE; break; case BSIM3v0_MOD_PUB1: mod->BSIM3v0pub1 = value->rValue; mod->BSIM3v0pub1Given = TRUE; break; case BSIM3v0_MOD_PUC: mod->BSIM3v0puc = value->rValue; mod->BSIM3v0pucGiven = TRUE; break; case BSIM3v0_MOD_PUC1: mod->BSIM3v0puc1 = value->rValue; mod->BSIM3v0puc1Given = TRUE; break; case BSIM3v0_MOD_PU0 : mod->BSIM3v0pu0 = value->rValue; mod->BSIM3v0pu0Given = TRUE; if (mod->BSIM3v0pu0 > 1.0) mod->BSIM3v0pu0 *= 1.0e-4; break; case BSIM3v0_MOD_PUTE : mod->BSIM3v0pute = value->rValue; mod->BSIM3v0puteGiven = TRUE; break; case BSIM3v0_MOD_PVOFF: mod->BSIM3v0pvoff = value->rValue; mod->BSIM3v0pvoffGiven = TRUE; break; case BSIM3v0_MOD_PDELTA : mod->BSIM3v0pdelta = value->rValue; mod->BSIM3v0pdeltaGiven = TRUE; break; case BSIM3v0_MOD_PRDSW: mod->BSIM3v0prdsw = value->rValue; mod->BSIM3v0prdswGiven = TRUE; break; case BSIM3v0_MOD_PPRWB: mod->BSIM3v0pprwb = value->rValue; mod->BSIM3v0pprwbGiven = TRUE; break; case BSIM3v0_MOD_PPRWG: mod->BSIM3v0pprwg = value->rValue; mod->BSIM3v0pprwgGiven = TRUE; break; case BSIM3v0_MOD_PPRT: mod->BSIM3v0pprt = value->rValue; mod->BSIM3v0pprtGiven = TRUE; break; case BSIM3v0_MOD_PETA0: mod->BSIM3v0peta0 = value->rValue; mod->BSIM3v0peta0Given = TRUE; break; case BSIM3v0_MOD_PETAB: mod->BSIM3v0petab = value->rValue; mod->BSIM3v0petabGiven = TRUE; break; case BSIM3v0_MOD_PPCLM: mod->BSIM3v0ppclm = value->rValue; mod->BSIM3v0ppclmGiven = TRUE; break; case BSIM3v0_MOD_PPDIBL1: mod->BSIM3v0ppdibl1 = value->rValue; mod->BSIM3v0ppdibl1Given = TRUE; break; case BSIM3v0_MOD_PPDIBL2: mod->BSIM3v0ppdibl2 = value->rValue; mod->BSIM3v0ppdibl2Given = TRUE; break; case BSIM3v0_MOD_PPDIBLB: mod->BSIM3v0ppdiblb = value->rValue; mod->BSIM3v0ppdiblbGiven = TRUE; break; case BSIM3v0_MOD_PPSCBE1: mod->BSIM3v0ppscbe1 = value->rValue; mod->BSIM3v0ppscbe1Given = TRUE; break; case BSIM3v0_MOD_PPSCBE2: mod->BSIM3v0ppscbe2 = value->rValue; mod->BSIM3v0ppscbe2Given = TRUE; break; case BSIM3v0_MOD_PPVAG: mod->BSIM3v0ppvag = value->rValue; mod->BSIM3v0ppvagGiven = TRUE; break; case BSIM3v0_MOD_PWR : mod->BSIM3v0pwr = value->rValue; mod->BSIM3v0pwrGiven = TRUE; break; case BSIM3v0_MOD_PDWG : mod->BSIM3v0pdwg = value->rValue; mod->BSIM3v0pdwgGiven = TRUE; break; case BSIM3v0_MOD_PDWB : mod->BSIM3v0pdwb = value->rValue; mod->BSIM3v0pdwbGiven = TRUE; break; case BSIM3v0_MOD_PB0 : mod->BSIM3v0pb0 = value->rValue; mod->BSIM3v0pb0Given = TRUE; break; case BSIM3v0_MOD_PB1 : mod->BSIM3v0pb1 = value->rValue; mod->BSIM3v0pb1Given = TRUE; break; case BSIM3v0_MOD_PALPHA0 : mod->BSIM3v0palpha0 = value->rValue; mod->BSIM3v0palpha0Given = TRUE; break; case BSIM3v0_MOD_PBETA0 : mod->BSIM3v0pbeta0 = value->rValue; mod->BSIM3v0pbeta0Given = TRUE; break; case BSIM3v0_MOD_PELM : mod->BSIM3v0pelm = value->rValue; mod->BSIM3v0pelmGiven = TRUE; break; case BSIM3v0_MOD_PCGSL : mod->BSIM3v0pcgsl = value->rValue; mod->BSIM3v0pcgslGiven = TRUE; break; case BSIM3v0_MOD_PCGDL : mod->BSIM3v0pcgdl = value->rValue; mod->BSIM3v0pcgdlGiven = TRUE; break; case BSIM3v0_MOD_PCKAPPA : mod->BSIM3v0pckappa = value->rValue; mod->BSIM3v0pckappaGiven = TRUE; break; case BSIM3v0_MOD_PCF : mod->BSIM3v0pcf = value->rValue; mod->BSIM3v0pcfGiven = TRUE; break; case BSIM3v0_MOD_PCLC : mod->BSIM3v0pclc = value->rValue; mod->BSIM3v0pclcGiven = TRUE; break; case BSIM3v0_MOD_PCLE : mod->BSIM3v0pcle = value->rValue; mod->BSIM3v0pcleGiven = TRUE; break; case BSIM3v0_MOD_TNOM : mod->BSIM3v0tnom = value->rValue + 273.15; mod->BSIM3v0tnomGiven = TRUE; break; case BSIM3v0_MOD_CGSO : mod->BSIM3v0cgso = value->rValue; mod->BSIM3v0cgsoGiven = TRUE; break; case BSIM3v0_MOD_CGDO : mod->BSIM3v0cgdo = value->rValue; mod->BSIM3v0cgdoGiven = TRUE; break; case BSIM3v0_MOD_CGBO : mod->BSIM3v0cgbo = value->rValue; mod->BSIM3v0cgboGiven = TRUE; break; case BSIM3v0_MOD_XPART : mod->BSIM3v0xpart = value->rValue; mod->BSIM3v0xpartGiven = TRUE; break; case BSIM3v0_MOD_RSH : mod->BSIM3v0sheetResistance = value->rValue; mod->BSIM3v0sheetResistanceGiven = TRUE; break; case BSIM3v0_MOD_JS : mod->BSIM3v0jctSatCurDensity = value->rValue; mod->BSIM3v0jctSatCurDensityGiven = TRUE; break; case BSIM3v0_MOD_PB : mod->BSIM3v0bulkJctPotential = value->rValue; mod->BSIM3v0bulkJctPotentialGiven = TRUE; break; case BSIM3v0_MOD_MJ : mod->BSIM3v0bulkJctBotGradingCoeff = value->rValue; mod->BSIM3v0bulkJctBotGradingCoeffGiven = TRUE; break; case BSIM3v0_MOD_PBSW : mod->BSIM3v0sidewallJctPotential = value->rValue; mod->BSIM3v0sidewallJctPotentialGiven = TRUE; break; case BSIM3v0_MOD_MJSW : mod->BSIM3v0bulkJctSideGradingCoeff = value->rValue; mod->BSIM3v0bulkJctSideGradingCoeffGiven = TRUE; break; case BSIM3v0_MOD_CJ : mod->BSIM3v0unitAreaJctCap = value->rValue; mod->BSIM3v0unitAreaJctCapGiven = TRUE; break; case BSIM3v0_MOD_CJSW : mod->BSIM3v0unitLengthSidewallJctCap = value->rValue; mod->BSIM3v0unitLengthSidewallJctCapGiven = TRUE; break; case BSIM3v0_MOD_LINT : mod->BSIM3v0Lint = value->rValue; mod->BSIM3v0LintGiven = TRUE; break; case BSIM3v0_MOD_LL : mod->BSIM3v0Ll = value->rValue; mod->BSIM3v0LlGiven = TRUE; break; case BSIM3v0_MOD_LLN : mod->BSIM3v0Lln = value->rValue; mod->BSIM3v0LlnGiven = TRUE; break; case BSIM3v0_MOD_LW : mod->BSIM3v0Lw = value->rValue; mod->BSIM3v0LwGiven = TRUE; break; case BSIM3v0_MOD_LWN : mod->BSIM3v0Lwn = value->rValue; mod->BSIM3v0LwnGiven = TRUE; break; case BSIM3v0_MOD_LWL : mod->BSIM3v0Lwl = value->rValue; mod->BSIM3v0LwlGiven = TRUE; break; case BSIM3v0_MOD_LMIN : mod->BSIM3v0Lmin = value->rValue; mod->BSIM3v0LminGiven = TRUE; break; case BSIM3v0_MOD_LMAX : mod->BSIM3v0Lmax = value->rValue; mod->BSIM3v0LmaxGiven = TRUE; break; case BSIM3v0_MOD_WINT : mod->BSIM3v0Wint = value->rValue; mod->BSIM3v0WintGiven = TRUE; break; case BSIM3v0_MOD_WL : mod->BSIM3v0Wl = value->rValue; mod->BSIM3v0WlGiven = TRUE; break; case BSIM3v0_MOD_WLN : mod->BSIM3v0Wln = value->rValue; mod->BSIM3v0WlnGiven = TRUE; break; case BSIM3v0_MOD_WW : mod->BSIM3v0Ww = value->rValue; mod->BSIM3v0WwGiven = TRUE; break; case BSIM3v0_MOD_WWN : mod->BSIM3v0Wwn = value->rValue; mod->BSIM3v0WwnGiven = TRUE; break; case BSIM3v0_MOD_WWL : mod->BSIM3v0Wwl = value->rValue; mod->BSIM3v0WwlGiven = TRUE; break; case BSIM3v0_MOD_WMIN : mod->BSIM3v0Wmin = value->rValue; mod->BSIM3v0WminGiven = TRUE; break; case BSIM3v0_MOD_WMAX : mod->BSIM3v0Wmax = value->rValue; mod->BSIM3v0WmaxGiven = TRUE; break; case BSIM3v0_MOD_NOIA : mod->BSIM3v0oxideTrapDensityA = value->rValue; mod->BSIM3v0oxideTrapDensityAGiven = TRUE; break; case BSIM3v0_MOD_NOIB : mod->BSIM3v0oxideTrapDensityB = value->rValue; mod->BSIM3v0oxideTrapDensityBGiven = TRUE; break; case BSIM3v0_MOD_NOIC : mod->BSIM3v0oxideTrapDensityC = value->rValue; mod->BSIM3v0oxideTrapDensityCGiven = TRUE; break; case BSIM3v0_MOD_EM : mod->BSIM3v0em = value->rValue; mod->BSIM3v0emGiven = TRUE; break; case BSIM3v0_MOD_EF : mod->BSIM3v0ef = value->rValue; mod->BSIM3v0efGiven = TRUE; break; case BSIM3v0_MOD_AF : mod->BSIM3v0af = value->rValue; mod->BSIM3v0afGiven = TRUE; break; case BSIM3v0_MOD_KF : mod->BSIM3v0kf = value->rValue; mod->BSIM3v0kfGiven = TRUE; break; case BSIM3v0_MOD_NMOS : if(value->iValue) { mod->BSIM3v0type = 1; mod->BSIM3v0typeGiven = TRUE; } break; case BSIM3v0_MOD_PMOS : if(value->iValue) { mod->BSIM3v0type = - 1; mod->BSIM3v0typeGiven = TRUE; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v0/b3v0ask.c0000644000175000017500000001642313546075722022071 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1995 Min-Chie Jeng and Mansun Chan. File: b3v0ask.c **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "bsim3v0def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3v0ask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { BSIM3v0instance *here = (BSIM3v0instance*)inst; NG_IGNORE(select); switch(which) { case BSIM3v0_L: value->rValue = here->BSIM3v0l; return(OK); case BSIM3v0_W: value->rValue = here->BSIM3v0w; return(OK); case BSIM3v0_M: value->rValue = here->BSIM3v0m; return(OK); case BSIM3v0_AS: value->rValue = here->BSIM3v0sourceArea; return(OK); case BSIM3v0_AD: value->rValue = here->BSIM3v0drainArea; return(OK); case BSIM3v0_PS: value->rValue = here->BSIM3v0sourcePerimeter; return(OK); case BSIM3v0_PD: value->rValue = here->BSIM3v0drainPerimeter; return(OK); case BSIM3v0_NRS: value->rValue = here->BSIM3v0sourceSquares; return(OK); case BSIM3v0_NRD: value->rValue = here->BSIM3v0drainSquares; return(OK); case BSIM3v0_OFF: value->rValue = here->BSIM3v0off; return(OK); case BSIM3v0_NQSMOD: value->iValue = here->BSIM3v0nqsMod; return(OK); case BSIM3v0_IC_VBS: value->rValue = here->BSIM3v0icVBS; return(OK); case BSIM3v0_IC_VDS: value->rValue = here->BSIM3v0icVDS; return(OK); case BSIM3v0_IC_VGS: value->rValue = here->BSIM3v0icVGS; return(OK); case BSIM3v0_DNODE: value->iValue = here->BSIM3v0dNode; return(OK); case BSIM3v0_GNODE: value->iValue = here->BSIM3v0gNode; return(OK); case BSIM3v0_SNODE: value->iValue = here->BSIM3v0sNode; return(OK); case BSIM3v0_BNODE: value->iValue = here->BSIM3v0bNode; return(OK); case BSIM3v0_DNODEPRIME: value->iValue = here->BSIM3v0dNodePrime; return(OK); case BSIM3v0_SNODEPRIME: value->iValue = here->BSIM3v0sNodePrime; return(OK); case BSIM3v0_SOURCECONDUCT: value->rValue = here->BSIM3v0sourceConductance; value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_DRAINCONDUCT: value->rValue = here->BSIM3v0drainConductance; value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_VBD: value->rValue = *(ckt->CKTstate0 + here->BSIM3v0vbd); return(OK); case BSIM3v0_VBS: value->rValue = *(ckt->CKTstate0 + here->BSIM3v0vbs); return(OK); case BSIM3v0_VGS: value->rValue = *(ckt->CKTstate0 + here->BSIM3v0vgs); return(OK); case BSIM3v0_VDS: value->rValue = *(ckt->CKTstate0 + here->BSIM3v0vds); return(OK); case BSIM3v0_CD: value->rValue = here->BSIM3v0cd; value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_CBS: value->rValue = here->BSIM3v0cbs; value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_CBD: value->rValue = here->BSIM3v0cbd; value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_GM: value->rValue = here->BSIM3v0gm; value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_GDS: value->rValue = here->BSIM3v0gds; value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_GMBS: value->rValue = here->BSIM3v0gmbs; value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_GBD: value->rValue = here->BSIM3v0gbd; value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_GBS: value->rValue = here->BSIM3v0gbs; value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_QB: value->rValue = *(ckt->CKTstate0 + here->BSIM3v0qb); value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_CQB: value->rValue = *(ckt->CKTstate0 + here->BSIM3v0cqb); value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_QG: value->rValue = *(ckt->CKTstate0 + here->BSIM3v0qg); value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_CQG: value->rValue = *(ckt->CKTstate0 + here->BSIM3v0cqg); value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_QD: value->rValue = *(ckt->CKTstate0 + here->BSIM3v0qd); value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_CQD: value->rValue = *(ckt->CKTstate0 + here->BSIM3v0cqd); value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_CGG: value->rValue = here->BSIM3v0cggb; value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_CGD: value->rValue = here->BSIM3v0cgdb; value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_CGS: value->rValue = here->BSIM3v0cgsb; value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_CDG: value->rValue = here->BSIM3v0cdgb; value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_CDD: value->rValue = here->BSIM3v0cddb; value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_CDS: value->rValue = here->BSIM3v0cdsb; value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_CBG: value->rValue = here->BSIM3v0cbgb; value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_CBDB: value->rValue = here->BSIM3v0cbdb; value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_CBSB: value->rValue = here->BSIM3v0cbsb; value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_CAPBD: value->rValue = here->BSIM3v0capbd; value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_CAPBS: value->rValue = here->BSIM3v0capbs; value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_VON: value->rValue = here->BSIM3v0von; return(OK); case BSIM3v0_VDSAT: value->rValue = here->BSIM3v0vdsat; return(OK); case BSIM3v0_QBS: value->rValue = *(ckt->CKTstate0 + here->BSIM3v0qbs); value->rValue *= here->BSIM3v0m; return(OK); case BSIM3v0_QBD: value->rValue = *(ckt->CKTstate0 + here->BSIM3v0qbd); value->rValue *= here->BSIM3v0m; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim3v0/b3v0getic.c0000644000175000017500000000215113546075722022377 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1995 Min-Chie Jeng and Mansun Chan. File: b3v0getic.c **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3v0def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3v0getic(GENmodel *inModel, CKTcircuit *ckt) { BSIM3v0model *model = (BSIM3v0model*)inModel; BSIM3v0instance *here; for (; model ; model = BSIM3v0nextModel(model)) { for (here = BSIM3v0instances(model); here; here = BSIM3v0nextInstance(here)) { if(!here->BSIM3v0icVBSGiven) { here->BSIM3v0icVBS = *(ckt->CKTrhs + here->BSIM3v0bNode) - *(ckt->CKTrhs + here->BSIM3v0sNode); } if (!here->BSIM3v0icVDSGiven) { here->BSIM3v0icVDS = *(ckt->CKTrhs + here->BSIM3v0dNode) - *(ckt->CKTrhs + here->BSIM3v0sNode); } if (!here->BSIM3v0icVGSGiven) { here->BSIM3v0icVGS = *(ckt->CKTrhs + here->BSIM3v0gNode) - *(ckt->CKTrhs + here->BSIM3v0sNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v0/bsim3v0def.h0000644000175000017500000014143513546075722022571 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1995 Min-Chie Jeng and Mansun Chan File: bsim3v0def.h **********/ #ifndef BSIM3v0 #define BSIM3v0 #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" typedef struct sBSIM3v0instance { struct GENinstance gen; #define BSIM3v0modPtr(inst) ((struct sBSIM3v0model *)((inst)->gen.GENmodPtr)) #define BSIM3v0nextInstance(inst) ((struct sBSIM3v0instance *)((inst)->gen.GENnextInstance)) #define BSIM3v0name gen.GENname #define BSIM3v0states gen.GENstate const int BSIM3v0dNode; const int BSIM3v0gNode; const int BSIM3v0sNode; const int BSIM3v0bNode; int BSIM3v0dNodePrime; int BSIM3v0sNodePrime; int BSIM3v0qNode; /* MCJ */ /* MCJ */ double BSIM3v0ueff; double BSIM3v0thetavth; double BSIM3v0von; double BSIM3v0vdsat; double BSIM3v0cgdo; double BSIM3v0cgso; double BSIM3v0l; double BSIM3v0w; double BSIM3v0m; double BSIM3v0drainArea; double BSIM3v0sourceArea; double BSIM3v0drainSquares; double BSIM3v0sourceSquares; double BSIM3v0drainPerimeter; double BSIM3v0sourcePerimeter; double BSIM3v0sourceConductance; double BSIM3v0drainConductance; double BSIM3v0icVBS; double BSIM3v0icVDS; double BSIM3v0icVGS; int BSIM3v0off; int BSIM3v0mode; int BSIM3v0nqsMod; /* OP point */ double BSIM3v0qinv; double BSIM3v0cd; double BSIM3v0cbs; double BSIM3v0cbd; double BSIM3v0csub; double BSIM3v0gm; double BSIM3v0gds; double BSIM3v0gmbs; double BSIM3v0gbd; double BSIM3v0gbs; double BSIM3v0gbbs; double BSIM3v0gbgs; double BSIM3v0gbds; double BSIM3v0cggb; double BSIM3v0cgdb; double BSIM3v0cgsb; double BSIM3v0cbgb; double BSIM3v0cbdb; double BSIM3v0cbsb; double BSIM3v0cdgb; double BSIM3v0cddb; double BSIM3v0cdsb; double BSIM3v0capbd; double BSIM3v0capbs; double BSIM3v0cqgb; double BSIM3v0cqdb; double BSIM3v0cqsb; double BSIM3v0cqbb; double BSIM3v0gtau; double BSIM3v0gtg; double BSIM3v0gtd; double BSIM3v0gts; double BSIM3v0gtb; double BSIM3v0tconst; struct bsim3v0SizeDependParam *pParam; unsigned BSIM3v0lGiven :1; unsigned BSIM3v0wGiven :1; unsigned BSIM3v0mGiven :1; unsigned BSIM3v0drainAreaGiven :1; unsigned BSIM3v0sourceAreaGiven :1; unsigned BSIM3v0drainSquaresGiven :1; unsigned BSIM3v0sourceSquaresGiven :1; unsigned BSIM3v0drainPerimeterGiven :1; unsigned BSIM3v0sourcePerimeterGiven :1; unsigned BSIM3v0dNodePrimeSet :1; unsigned BSIM3v0sNodePrimeSet :1; unsigned BSIM3v0icVBSGiven :1; unsigned BSIM3v0icVDSGiven :1; unsigned BSIM3v0icVGSGiven :1; unsigned BSIM3v0nqsModGiven :1; double *BSIM3v0DdPtr; double *BSIM3v0GgPtr; double *BSIM3v0SsPtr; double *BSIM3v0BbPtr; double *BSIM3v0DPdpPtr; double *BSIM3v0SPspPtr; double *BSIM3v0DdpPtr; double *BSIM3v0GbPtr; double *BSIM3v0GdpPtr; double *BSIM3v0GspPtr; double *BSIM3v0SspPtr; double *BSIM3v0BdpPtr; double *BSIM3v0BspPtr; double *BSIM3v0DPspPtr; double *BSIM3v0DPdPtr; double *BSIM3v0BgPtr; double *BSIM3v0DPgPtr; double *BSIM3v0SPgPtr; double *BSIM3v0SPsPtr; double *BSIM3v0DPbPtr; double *BSIM3v0SPbPtr; double *BSIM3v0SPdpPtr; double *BSIM3v0QqPtr; double *BSIM3v0QdpPtr; double *BSIM3v0QgPtr; double *BSIM3v0QspPtr; double *BSIM3v0QbPtr; double *BSIM3v0DPqPtr; double *BSIM3v0GqPtr; double *BSIM3v0SPqPtr; double *BSIM3v0BqPtr; #define BSIM3v0vbd BSIM3v0states+ 0 #define BSIM3v0vbs BSIM3v0states+ 1 #define BSIM3v0vgs BSIM3v0states+ 2 #define BSIM3v0vds BSIM3v0states+ 3 #define BSIM3v0qb BSIM3v0states+ 4 #define BSIM3v0cqb BSIM3v0states+ 5 #define BSIM3v0qg BSIM3v0states+ 6 #define BSIM3v0cqg BSIM3v0states+ 7 #define BSIM3v0qd BSIM3v0states+ 8 #define BSIM3v0cqd BSIM3v0states+ 9 #define BSIM3v0qbs BSIM3v0states+ 10 #define BSIM3v0qbd BSIM3v0states+ 11 #define BSIM3v0qcheq BSIM3v0states+ 12 #define BSIM3v0cqcheq BSIM3v0states+ 13 #define BSIM3v0qcdump BSIM3v0states+ 14 #define BSIM3v0cqcdump BSIM3v0states+ 15 #define BSIM3v0tau BSIM3v0states+ 16 #define BSIM3v0qdef BSIM3v0states+ 17 #define BSIM3v0numStates 18 /* indices to the array of BSIM3v0 NOISE SOURCES */ #define BSIM3v0RDNOIZ 0 #define BSIM3v0RSNOIZ 1 #define BSIM3v0IDNOIZ 2 #define BSIM3v0FLNOIZ 3 #define BSIM3v0TOTNOIZ 4 #define BSIM3v0NSRCS 5 /* the number of MOSFET(3) noise sources */ #ifndef NONOISE double BSIM3v0nVar[NSTATVARS][BSIM3v0NSRCS]; #else /* NONOISE */ double **BSIM3v0nVar; #endif /* NONOISE */ } BSIM3v0instance ; struct bsim3v0SizeDependParam { double Width; double Length; double BSIM3v0cdsc; double BSIM3v0cdscb; double BSIM3v0cdscd; double BSIM3v0cit; double BSIM3v0nfactor; double BSIM3v0xj; double BSIM3v0vsat; double BSIM3v0at; double BSIM3v0a0; double BSIM3v0ags; double BSIM3v0a1; double BSIM3v0a2; double BSIM3v0keta; double BSIM3v0nsub; double BSIM3v0npeak; double BSIM3v0ngate; double BSIM3v0gamma1; double BSIM3v0gamma2; double BSIM3v0vbx; double BSIM3v0vbi; double BSIM3v0vbm; double BSIM3v0vbsc; double BSIM3v0xt; double BSIM3v0phi; double BSIM3v0litl; double BSIM3v0k1; double BSIM3v0kt1; double BSIM3v0kt1l; double BSIM3v0kt2; double BSIM3v0k2; double BSIM3v0k3; double BSIM3v0k3b; double BSIM3v0w0; double BSIM3v0nlx; double BSIM3v0dvt0; double BSIM3v0dvt1; double BSIM3v0dvt2; double BSIM3v0dvt0w; double BSIM3v0dvt1w; double BSIM3v0dvt2w; double BSIM3v0drout; double BSIM3v0dsub; double BSIM3v0vth0; double BSIM3v0ua; double BSIM3v0ua1; double BSIM3v0ub; double BSIM3v0ub1; double BSIM3v0uc; double BSIM3v0uc1; double BSIM3v0u0; double BSIM3v0ute; double BSIM3v0voff; double BSIM3v0vfb; double BSIM3v0delta; double BSIM3v0rdsw; double BSIM3v0rds0; double BSIM3v0prwg; double BSIM3v0prwb; double BSIM3v0prt; double BSIM3v0eta0; double BSIM3v0etab; double BSIM3v0pclm; double BSIM3v0pdibl1; double BSIM3v0pdibl2; double BSIM3v0pdiblb; double BSIM3v0pscbe1; double BSIM3v0pscbe2; double BSIM3v0pvag; double BSIM3v0wr; double BSIM3v0dwg; double BSIM3v0dwb; double BSIM3v0b0; double BSIM3v0b1; double BSIM3v0alpha0; double BSIM3v0beta0; /* CV model */ double BSIM3v0elm; double BSIM3v0cgsl; double BSIM3v0cgdl; double BSIM3v0ckappa; double BSIM3v0cf; double BSIM3v0clc; double BSIM3v0cle; /* Pre-calculated constants */ double BSIM3v0dw; double BSIM3v0dl; double BSIM3v0leff; double BSIM3v0weff; double BSIM3v0dwc; double BSIM3v0dlc; double BSIM3v0leffCV; double BSIM3v0weffCV; double BSIM3v0abulkCVfactor; double BSIM3v0cgso; double BSIM3v0cgdo; double BSIM3v0cgbo; double BSIM3v0u0temp; double BSIM3v0vsattemp; double BSIM3v0sqrtPhi; double BSIM3v0phis3; double BSIM3v0Xdep0; double BSIM3v0sqrtXdep0; double BSIM3v0theta0vb0; double BSIM3v0thetaRout; double BSIM3v0cof1; double BSIM3v0cof2; double BSIM3v0cof3; double BSIM3v0cof4; double BSIM3v0cdep0; struct bsim3v0SizeDependParam *pNext; }; typedef struct sBSIM3v0model { struct GENmodel gen; #define BSIM3v0modType gen.GENmodType #define BSIM3v0nextModel(inst) ((struct sBSIM3v0model *)((inst)->gen.GENnextModel)) #define BSIM3v0instances(inst) ((BSIM3v0instance *)((inst)->gen.GENinstances)) #define BSIM3v0modName gen.GENmodName int BSIM3v0type; int BSIM3v0mobMod; int BSIM3v0capMod; int BSIM3v0nqsMod; int BSIM3v0noiMod; int BSIM3v0binUnit; double BSIM3v0tox; double BSIM3v0cdsc; double BSIM3v0cdscb; double BSIM3v0cdscd; double BSIM3v0cit; double BSIM3v0nfactor; double BSIM3v0xj; double BSIM3v0vsat; double BSIM3v0at; double BSIM3v0a0; double BSIM3v0ags; double BSIM3v0a1; double BSIM3v0a2; double BSIM3v0keta; double BSIM3v0nsub; double BSIM3v0npeak; double BSIM3v0ngate; double BSIM3v0gamma1; double BSIM3v0gamma2; double BSIM3v0vbx; double BSIM3v0vbm; double BSIM3v0xt; double BSIM3v0k1; double BSIM3v0kt1; double BSIM3v0kt1l; double BSIM3v0kt2; double BSIM3v0k2; double BSIM3v0k3; double BSIM3v0k3b; double BSIM3v0w0; double BSIM3v0nlx; double BSIM3v0dvt0; double BSIM3v0dvt1; double BSIM3v0dvt2; double BSIM3v0dvt0w; double BSIM3v0dvt1w; double BSIM3v0dvt2w; double BSIM3v0drout; double BSIM3v0dsub; double BSIM3v0vth0; double BSIM3v0ua; double BSIM3v0ua1; double BSIM3v0ub; double BSIM3v0ub1; double BSIM3v0uc; double BSIM3v0uc1; double BSIM3v0u0; double BSIM3v0ute; double BSIM3v0voff; double BSIM3v0delta; double BSIM3v0rdsw; double BSIM3v0prwg; double BSIM3v0prwb; double BSIM3v0prt; double BSIM3v0eta0; double BSIM3v0etab; double BSIM3v0pclm; double BSIM3v0pdibl1; double BSIM3v0pdibl2; double BSIM3v0pdiblb; double BSIM3v0pscbe1; double BSIM3v0pscbe2; double BSIM3v0pvag; double BSIM3v0wr; double BSIM3v0dwg; double BSIM3v0dwb; double BSIM3v0b0; double BSIM3v0b1; double BSIM3v0alpha0; double BSIM3v0beta0; /* CV model */ double BSIM3v0elm; double BSIM3v0cgsl; double BSIM3v0cgdl; double BSIM3v0ckappa; double BSIM3v0cf; double BSIM3v0clc; double BSIM3v0cle; double BSIM3v0dwc; double BSIM3v0dlc; /* Length Dependence */ double BSIM3v0lcdsc; double BSIM3v0lcdscb; double BSIM3v0lcdscd; double BSIM3v0lcit; double BSIM3v0lnfactor; double BSIM3v0lxj; double BSIM3v0lvsat; double BSIM3v0lat; double BSIM3v0la0; double BSIM3v0lags; double BSIM3v0la1; double BSIM3v0la2; double BSIM3v0lketa; double BSIM3v0lnsub; double BSIM3v0lnpeak; double BSIM3v0lngate; double BSIM3v0lgamma1; double BSIM3v0lgamma2; double BSIM3v0lvbx; double BSIM3v0lvbm; double BSIM3v0lxt; double BSIM3v0lk1; double BSIM3v0lkt1; double BSIM3v0lkt1l; double BSIM3v0lkt2; double BSIM3v0lk2; double BSIM3v0lk3; double BSIM3v0lk3b; double BSIM3v0lw0; double BSIM3v0lnlx; double BSIM3v0ldvt0; double BSIM3v0ldvt1; double BSIM3v0ldvt2; double BSIM3v0ldvt0w; double BSIM3v0ldvt1w; double BSIM3v0ldvt2w; double BSIM3v0ldrout; double BSIM3v0ldsub; double BSIM3v0lvth0; double BSIM3v0lua; double BSIM3v0lua1; double BSIM3v0lub; double BSIM3v0lub1; double BSIM3v0luc; double BSIM3v0luc1; double BSIM3v0lu0; double BSIM3v0lute; double BSIM3v0lvoff; double BSIM3v0ldelta; double BSIM3v0lrdsw; double BSIM3v0lprwg; double BSIM3v0lprwb; double BSIM3v0lprt; double BSIM3v0leta0; double BSIM3v0letab; double BSIM3v0lpclm; double BSIM3v0lpdibl1; double BSIM3v0lpdibl2; double BSIM3v0lpdiblb; double BSIM3v0lpscbe1; double BSIM3v0lpscbe2; double BSIM3v0lpvag; double BSIM3v0lwr; double BSIM3v0ldwg; double BSIM3v0ldwb; double BSIM3v0lb0; double BSIM3v0lb1; double BSIM3v0lalpha0; double BSIM3v0lbeta0; /* CV model */ double BSIM3v0lelm; double BSIM3v0lcgsl; double BSIM3v0lcgdl; double BSIM3v0lckappa; double BSIM3v0lcf; double BSIM3v0lclc; double BSIM3v0lcle; /* Width Dependence */ double BSIM3v0wcdsc; double BSIM3v0wcdscb; double BSIM3v0wcdscd; double BSIM3v0wcit; double BSIM3v0wnfactor; double BSIM3v0wxj; double BSIM3v0wvsat; double BSIM3v0wat; double BSIM3v0wa0; double BSIM3v0wags; double BSIM3v0wa1; double BSIM3v0wa2; double BSIM3v0wketa; double BSIM3v0wnsub; double BSIM3v0wnpeak; double BSIM3v0wngate; double BSIM3v0wgamma1; double BSIM3v0wgamma2; double BSIM3v0wvbx; double BSIM3v0wvbm; double BSIM3v0wxt; double BSIM3v0wk1; double BSIM3v0wkt1; double BSIM3v0wkt1l; double BSIM3v0wkt2; double BSIM3v0wk2; double BSIM3v0wk3; double BSIM3v0wk3b; double BSIM3v0ww0; double BSIM3v0wnlx; double BSIM3v0wdvt0; double BSIM3v0wdvt1; double BSIM3v0wdvt2; double BSIM3v0wdvt0w; double BSIM3v0wdvt1w; double BSIM3v0wdvt2w; double BSIM3v0wdrout; double BSIM3v0wdsub; double BSIM3v0wvth0; double BSIM3v0wua; double BSIM3v0wua1; double BSIM3v0wub; double BSIM3v0wub1; double BSIM3v0wuc; double BSIM3v0wuc1; double BSIM3v0wu0; double BSIM3v0wute; double BSIM3v0wvoff; double BSIM3v0wdelta; double BSIM3v0wrdsw; double BSIM3v0wprwg; double BSIM3v0wprwb; double BSIM3v0wprt; double BSIM3v0weta0; double BSIM3v0wetab; double BSIM3v0wpclm; double BSIM3v0wpdibl1; double BSIM3v0wpdibl2; double BSIM3v0wpdiblb; double BSIM3v0wpscbe1; double BSIM3v0wpscbe2; double BSIM3v0wpvag; double BSIM3v0wwr; double BSIM3v0wdwg; double BSIM3v0wdwb; double BSIM3v0wb0; double BSIM3v0wb1; double BSIM3v0walpha0; double BSIM3v0wbeta0; /* CV model */ double BSIM3v0welm; double BSIM3v0wcgsl; double BSIM3v0wcgdl; double BSIM3v0wckappa; double BSIM3v0wcf; double BSIM3v0wclc; double BSIM3v0wcle; /* Cross-term Dependence */ double BSIM3v0pcdsc; double BSIM3v0pcdscb; double BSIM3v0pcdscd; double BSIM3v0pcit; double BSIM3v0pnfactor; double BSIM3v0pxj; double BSIM3v0pvsat; double BSIM3v0pat; double BSIM3v0pa0; double BSIM3v0pags; double BSIM3v0pa1; double BSIM3v0pa2; double BSIM3v0pketa; double BSIM3v0pnsub; double BSIM3v0pnpeak; double BSIM3v0pngate; double BSIM3v0pgamma1; double BSIM3v0pgamma2; double BSIM3v0pvbx; double BSIM3v0pvbm; double BSIM3v0pxt; double BSIM3v0pk1; double BSIM3v0pkt1; double BSIM3v0pkt1l; double BSIM3v0pkt2; double BSIM3v0pk2; double BSIM3v0pk3; double BSIM3v0pk3b; double BSIM3v0pw0; double BSIM3v0pnlx; double BSIM3v0pdvt0; double BSIM3v0pdvt1; double BSIM3v0pdvt2; double BSIM3v0pdvt0w; double BSIM3v0pdvt1w; double BSIM3v0pdvt2w; double BSIM3v0pdrout; double BSIM3v0pdsub; double BSIM3v0pvth0; double BSIM3v0pua; double BSIM3v0pua1; double BSIM3v0pub; double BSIM3v0pub1; double BSIM3v0puc; double BSIM3v0puc1; double BSIM3v0pu0; double BSIM3v0pute; double BSIM3v0pvoff; double BSIM3v0pdelta; double BSIM3v0prdsw; double BSIM3v0pprwg; double BSIM3v0pprwb; double BSIM3v0pprt; double BSIM3v0peta0; double BSIM3v0petab; double BSIM3v0ppclm; double BSIM3v0ppdibl1; double BSIM3v0ppdibl2; double BSIM3v0ppdiblb; double BSIM3v0ppscbe1; double BSIM3v0ppscbe2; double BSIM3v0ppvag; double BSIM3v0pwr; double BSIM3v0pdwg; double BSIM3v0pdwb; double BSIM3v0pb0; double BSIM3v0pb1; double BSIM3v0palpha0; double BSIM3v0pbeta0; /* CV model */ double BSIM3v0pelm; double BSIM3v0pcgsl; double BSIM3v0pcgdl; double BSIM3v0pckappa; double BSIM3v0pcf; double BSIM3v0pclc; double BSIM3v0pcle; double BSIM3v0tnom; double BSIM3v0cgso; double BSIM3v0cgdo; double BSIM3v0cgbo; double BSIM3v0xpart; double BSIM3v0cFringOut; double BSIM3v0cFringMax; double BSIM3v0sheetResistance; double BSIM3v0jctSatCurDensity; double BSIM3v0bulkJctPotential; double BSIM3v0bulkJctBotGradingCoeff; double BSIM3v0bulkJctSideGradingCoeff; double BSIM3v0sidewallJctPotential; double BSIM3v0unitAreaJctCap; double BSIM3v0unitLengthSidewallJctCap; double BSIM3v0Lint; double BSIM3v0Ll; double BSIM3v0Lln; double BSIM3v0Lw; double BSIM3v0Lwn; double BSIM3v0Lwl; double BSIM3v0Lmin; double BSIM3v0Lmax; double BSIM3v0Wint; double BSIM3v0Wl; double BSIM3v0Wln; double BSIM3v0Ww; double BSIM3v0Wwn; double BSIM3v0Wwl; double BSIM3v0Wmin; double BSIM3v0Wmax; /* Pre-calculated constants */ /* MCJ: move to size-dependent param. */ double BSIM3v0vtm; double BSIM3v0cox; double BSIM3v0cof1; double BSIM3v0cof2; double BSIM3v0cof3; double BSIM3v0cof4; double BSIM3v0vcrit; double BSIM3v0factor1; double BSIM3v0oxideTrapDensityA; double BSIM3v0oxideTrapDensityB; double BSIM3v0oxideTrapDensityC; double BSIM3v0em; double BSIM3v0ef; double BSIM3v0af; double BSIM3v0kf; struct bsim3v0SizeDependParam *pSizeDependParamKnot; /* Flags */ unsigned BSIM3v0mobModGiven :1; unsigned BSIM3v0binUnitGiven :1; unsigned BSIM3v0capModGiven :1; unsigned BSIM3v0nqsModGiven :1; unsigned BSIM3v0noiModGiven :1; unsigned BSIM3v0typeGiven :1; unsigned BSIM3v0toxGiven :1; unsigned BSIM3v0cdscGiven :1; unsigned BSIM3v0cdscbGiven :1; unsigned BSIM3v0cdscdGiven :1; unsigned BSIM3v0citGiven :1; unsigned BSIM3v0nfactorGiven :1; unsigned BSIM3v0xjGiven :1; unsigned BSIM3v0vsatGiven :1; unsigned BSIM3v0atGiven :1; unsigned BSIM3v0a0Given :1; unsigned BSIM3v0agsGiven :1; unsigned BSIM3v0a1Given :1; unsigned BSIM3v0a2Given :1; unsigned BSIM3v0ketaGiven :1; unsigned BSIM3v0nsubGiven :1; unsigned BSIM3v0npeakGiven :1; unsigned BSIM3v0ngateGiven :1; unsigned BSIM3v0gamma1Given :1; unsigned BSIM3v0gamma2Given :1; unsigned BSIM3v0vbxGiven :1; unsigned BSIM3v0vbmGiven :1; unsigned BSIM3v0xtGiven :1; unsigned BSIM3v0k1Given :1; unsigned BSIM3v0kt1Given :1; unsigned BSIM3v0kt1lGiven :1; unsigned BSIM3v0kt2Given :1; unsigned BSIM3v0k2Given :1; unsigned BSIM3v0k3Given :1; unsigned BSIM3v0k3bGiven :1; unsigned BSIM3v0w0Given :1; unsigned BSIM3v0nlxGiven :1; unsigned BSIM3v0dvt0Given :1; unsigned BSIM3v0dvt1Given :1; unsigned BSIM3v0dvt2Given :1; unsigned BSIM3v0dvt0wGiven :1; unsigned BSIM3v0dvt1wGiven :1; unsigned BSIM3v0dvt2wGiven :1; unsigned BSIM3v0droutGiven :1; unsigned BSIM3v0dsubGiven :1; unsigned BSIM3v0vth0Given :1; unsigned BSIM3v0uaGiven :1; unsigned BSIM3v0ua1Given :1; unsigned BSIM3v0ubGiven :1; unsigned BSIM3v0ub1Given :1; unsigned BSIM3v0ucGiven :1; unsigned BSIM3v0uc1Given :1; unsigned BSIM3v0u0Given :1; unsigned BSIM3v0uteGiven :1; unsigned BSIM3v0voffGiven :1; unsigned BSIM3v0rdswGiven :1; unsigned BSIM3v0prwgGiven :1; unsigned BSIM3v0prwbGiven :1; unsigned BSIM3v0prtGiven :1; unsigned BSIM3v0eta0Given :1; unsigned BSIM3v0etabGiven :1; unsigned BSIM3v0pclmGiven :1; unsigned BSIM3v0pdibl1Given :1; unsigned BSIM3v0pdibl2Given :1; unsigned BSIM3v0pdiblbGiven :1; unsigned BSIM3v0pscbe1Given :1; unsigned BSIM3v0pscbe2Given :1; unsigned BSIM3v0pvagGiven :1; unsigned BSIM3v0deltaGiven :1; unsigned BSIM3v0wrGiven :1; unsigned BSIM3v0dwgGiven :1; unsigned BSIM3v0dwbGiven :1; unsigned BSIM3v0b0Given :1; unsigned BSIM3v0b1Given :1; unsigned BSIM3v0alpha0Given :1; unsigned BSIM3v0beta0Given :1; /* CV model */ unsigned BSIM3v0elmGiven :1; unsigned BSIM3v0cgslGiven :1; unsigned BSIM3v0cgdlGiven :1; unsigned BSIM3v0ckappaGiven :1; unsigned BSIM3v0cfGiven :1; unsigned BSIM3v0clcGiven :1; unsigned BSIM3v0cleGiven :1; unsigned BSIM3v0dwcGiven :1; unsigned BSIM3v0dlcGiven :1; /* Length dependence */ unsigned BSIM3v0lcdscGiven :1; unsigned BSIM3v0lcdscbGiven :1; unsigned BSIM3v0lcdscdGiven :1; unsigned BSIM3v0lcitGiven :1; unsigned BSIM3v0lnfactorGiven :1; unsigned BSIM3v0lxjGiven :1; unsigned BSIM3v0lvsatGiven :1; unsigned BSIM3v0latGiven :1; unsigned BSIM3v0la0Given :1; unsigned BSIM3v0lagsGiven :1; unsigned BSIM3v0la1Given :1; unsigned BSIM3v0la2Given :1; unsigned BSIM3v0lketaGiven :1; unsigned BSIM3v0lnsubGiven :1; unsigned BSIM3v0lnpeakGiven :1; unsigned BSIM3v0lngateGiven :1; unsigned BSIM3v0lgamma1Given :1; unsigned BSIM3v0lgamma2Given :1; unsigned BSIM3v0lvbxGiven :1; unsigned BSIM3v0lvbmGiven :1; unsigned BSIM3v0lxtGiven :1; unsigned BSIM3v0lk1Given :1; unsigned BSIM3v0lkt1Given :1; unsigned BSIM3v0lkt1lGiven :1; unsigned BSIM3v0lkt2Given :1; unsigned BSIM3v0lk2Given :1; unsigned BSIM3v0lk3Given :1; unsigned BSIM3v0lk3bGiven :1; unsigned BSIM3v0lw0Given :1; unsigned BSIM3v0lnlxGiven :1; unsigned BSIM3v0ldvt0Given :1; unsigned BSIM3v0ldvt1Given :1; unsigned BSIM3v0ldvt2Given :1; unsigned BSIM3v0ldvt0wGiven :1; unsigned BSIM3v0ldvt1wGiven :1; unsigned BSIM3v0ldvt2wGiven :1; unsigned BSIM3v0ldroutGiven :1; unsigned BSIM3v0ldsubGiven :1; unsigned BSIM3v0lvth0Given :1; unsigned BSIM3v0luaGiven :1; unsigned BSIM3v0lua1Given :1; unsigned BSIM3v0lubGiven :1; unsigned BSIM3v0lub1Given :1; unsigned BSIM3v0lucGiven :1; unsigned BSIM3v0luc1Given :1; unsigned BSIM3v0lu0Given :1; unsigned BSIM3v0luteGiven :1; unsigned BSIM3v0lvoffGiven :1; unsigned BSIM3v0lrdswGiven :1; unsigned BSIM3v0lprwgGiven :1; unsigned BSIM3v0lprwbGiven :1; unsigned BSIM3v0lprtGiven :1; unsigned BSIM3v0leta0Given :1; unsigned BSIM3v0letabGiven :1; unsigned BSIM3v0lpclmGiven :1; unsigned BSIM3v0lpdibl1Given :1; unsigned BSIM3v0lpdibl2Given :1; unsigned BSIM3v0lpdiblbGiven :1; unsigned BSIM3v0lpscbe1Given :1; unsigned BSIM3v0lpscbe2Given :1; unsigned BSIM3v0lpvagGiven :1; unsigned BSIM3v0ldeltaGiven :1; unsigned BSIM3v0lwrGiven :1; unsigned BSIM3v0ldwgGiven :1; unsigned BSIM3v0ldwbGiven :1; unsigned BSIM3v0lb0Given :1; unsigned BSIM3v0lb1Given :1; unsigned BSIM3v0lalpha0Given :1; unsigned BSIM3v0lbeta0Given :1; /* CV model */ unsigned BSIM3v0lelmGiven :1; unsigned BSIM3v0lcgslGiven :1; unsigned BSIM3v0lcgdlGiven :1; unsigned BSIM3v0lckappaGiven :1; unsigned BSIM3v0lcfGiven :1; unsigned BSIM3v0lclcGiven :1; unsigned BSIM3v0lcleGiven :1; /* Width dependence */ unsigned BSIM3v0wcdscGiven :1; unsigned BSIM3v0wcdscbGiven :1; unsigned BSIM3v0wcdscdGiven :1; unsigned BSIM3v0wcitGiven :1; unsigned BSIM3v0wnfactorGiven :1; unsigned BSIM3v0wxjGiven :1; unsigned BSIM3v0wvsatGiven :1; unsigned BSIM3v0watGiven :1; unsigned BSIM3v0wa0Given :1; unsigned BSIM3v0wagsGiven :1; unsigned BSIM3v0wa1Given :1; unsigned BSIM3v0wa2Given :1; unsigned BSIM3v0wketaGiven :1; unsigned BSIM3v0wnsubGiven :1; unsigned BSIM3v0wnpeakGiven :1; unsigned BSIM3v0wngateGiven :1; unsigned BSIM3v0wgamma1Given :1; unsigned BSIM3v0wgamma2Given :1; unsigned BSIM3v0wvbxGiven :1; unsigned BSIM3v0wvbmGiven :1; unsigned BSIM3v0wxtGiven :1; unsigned BSIM3v0wk1Given :1; unsigned BSIM3v0wkt1Given :1; unsigned BSIM3v0wkt1lGiven :1; unsigned BSIM3v0wkt2Given :1; unsigned BSIM3v0wk2Given :1; unsigned BSIM3v0wk3Given :1; unsigned BSIM3v0wk3bGiven :1; unsigned BSIM3v0ww0Given :1; unsigned BSIM3v0wnlxGiven :1; unsigned BSIM3v0wdvt0Given :1; unsigned BSIM3v0wdvt1Given :1; unsigned BSIM3v0wdvt2Given :1; unsigned BSIM3v0wdvt0wGiven :1; unsigned BSIM3v0wdvt1wGiven :1; unsigned BSIM3v0wdvt2wGiven :1; unsigned BSIM3v0wdroutGiven :1; unsigned BSIM3v0wdsubGiven :1; unsigned BSIM3v0wvth0Given :1; unsigned BSIM3v0wuaGiven :1; unsigned BSIM3v0wua1Given :1; unsigned BSIM3v0wubGiven :1; unsigned BSIM3v0wub1Given :1; unsigned BSIM3v0wucGiven :1; unsigned BSIM3v0wuc1Given :1; unsigned BSIM3v0wu0Given :1; unsigned BSIM3v0wuteGiven :1; unsigned BSIM3v0wvoffGiven :1; unsigned BSIM3v0wrdswGiven :1; unsigned BSIM3v0wprwgGiven :1; unsigned BSIM3v0wprwbGiven :1; unsigned BSIM3v0wprtGiven :1; unsigned BSIM3v0weta0Given :1; unsigned BSIM3v0wetabGiven :1; unsigned BSIM3v0wpclmGiven :1; unsigned BSIM3v0wpdibl1Given :1; unsigned BSIM3v0wpdibl2Given :1; unsigned BSIM3v0wpdiblbGiven :1; unsigned BSIM3v0wpscbe1Given :1; unsigned BSIM3v0wpscbe2Given :1; unsigned BSIM3v0wpvagGiven :1; unsigned BSIM3v0wdeltaGiven :1; unsigned BSIM3v0wwrGiven :1; unsigned BSIM3v0wdwgGiven :1; unsigned BSIM3v0wdwbGiven :1; unsigned BSIM3v0wb0Given :1; unsigned BSIM3v0wb1Given :1; unsigned BSIM3v0walpha0Given :1; unsigned BSIM3v0wbeta0Given :1; /* CV model */ unsigned BSIM3v0welmGiven :1; unsigned BSIM3v0wcgslGiven :1; unsigned BSIM3v0wcgdlGiven :1; unsigned BSIM3v0wckappaGiven :1; unsigned BSIM3v0wcfGiven :1; unsigned BSIM3v0wclcGiven :1; unsigned BSIM3v0wcleGiven :1; /* Cross-term dependence */ unsigned BSIM3v0pcdscGiven :1; unsigned BSIM3v0pcdscbGiven :1; unsigned BSIM3v0pcdscdGiven :1; unsigned BSIM3v0pcitGiven :1; unsigned BSIM3v0pnfactorGiven :1; unsigned BSIM3v0pxjGiven :1; unsigned BSIM3v0pvsatGiven :1; unsigned BSIM3v0patGiven :1; unsigned BSIM3v0pa0Given :1; unsigned BSIM3v0pagsGiven :1; unsigned BSIM3v0pa1Given :1; unsigned BSIM3v0pa2Given :1; unsigned BSIM3v0pketaGiven :1; unsigned BSIM3v0pnsubGiven :1; unsigned BSIM3v0pnpeakGiven :1; unsigned BSIM3v0pngateGiven :1; unsigned BSIM3v0pgamma1Given :1; unsigned BSIM3v0pgamma2Given :1; unsigned BSIM3v0pvbxGiven :1; unsigned BSIM3v0pvbmGiven :1; unsigned BSIM3v0pxtGiven :1; unsigned BSIM3v0pk1Given :1; unsigned BSIM3v0pkt1Given :1; unsigned BSIM3v0pkt1lGiven :1; unsigned BSIM3v0pkt2Given :1; unsigned BSIM3v0pk2Given :1; unsigned BSIM3v0pk3Given :1; unsigned BSIM3v0pk3bGiven :1; unsigned BSIM3v0pw0Given :1; unsigned BSIM3v0pnlxGiven :1; unsigned BSIM3v0pdvt0Given :1; unsigned BSIM3v0pdvt1Given :1; unsigned BSIM3v0pdvt2Given :1; unsigned BSIM3v0pdvt0wGiven :1; unsigned BSIM3v0pdvt1wGiven :1; unsigned BSIM3v0pdvt2wGiven :1; unsigned BSIM3v0pdroutGiven :1; unsigned BSIM3v0pdsubGiven :1; unsigned BSIM3v0pvth0Given :1; unsigned BSIM3v0puaGiven :1; unsigned BSIM3v0pua1Given :1; unsigned BSIM3v0pubGiven :1; unsigned BSIM3v0pub1Given :1; unsigned BSIM3v0pucGiven :1; unsigned BSIM3v0puc1Given :1; unsigned BSIM3v0pu0Given :1; unsigned BSIM3v0puteGiven :1; unsigned BSIM3v0pvoffGiven :1; unsigned BSIM3v0prdswGiven :1; unsigned BSIM3v0pprwgGiven :1; unsigned BSIM3v0pprwbGiven :1; unsigned BSIM3v0pprtGiven :1; unsigned BSIM3v0peta0Given :1; unsigned BSIM3v0petabGiven :1; unsigned BSIM3v0ppclmGiven :1; unsigned BSIM3v0ppdibl1Given :1; unsigned BSIM3v0ppdibl2Given :1; unsigned BSIM3v0ppdiblbGiven :1; unsigned BSIM3v0ppscbe1Given :1; unsigned BSIM3v0ppscbe2Given :1; unsigned BSIM3v0ppvagGiven :1; unsigned BSIM3v0pdeltaGiven :1; unsigned BSIM3v0pwrGiven :1; unsigned BSIM3v0pdwgGiven :1; unsigned BSIM3v0pdwbGiven :1; unsigned BSIM3v0pb0Given :1; unsigned BSIM3v0pb1Given :1; unsigned BSIM3v0palpha0Given :1; unsigned BSIM3v0pbeta0Given :1; /* CV model */ unsigned BSIM3v0pelmGiven :1; unsigned BSIM3v0pcgslGiven :1; unsigned BSIM3v0pcgdlGiven :1; unsigned BSIM3v0pckappaGiven :1; unsigned BSIM3v0pcfGiven :1; unsigned BSIM3v0pclcGiven :1; unsigned BSIM3v0pcleGiven :1; unsigned BSIM3v0useFringeGiven :1; unsigned BSIM3v0tnomGiven :1; unsigned BSIM3v0cgsoGiven :1; unsigned BSIM3v0cgdoGiven :1; unsigned BSIM3v0cgboGiven :1; unsigned BSIM3v0xpartGiven :1; unsigned BSIM3v0sheetResistanceGiven :1; unsigned BSIM3v0jctSatCurDensityGiven :1; unsigned BSIM3v0bulkJctPotentialGiven :1; unsigned BSIM3v0bulkJctBotGradingCoeffGiven :1; unsigned BSIM3v0sidewallJctPotentialGiven :1; unsigned BSIM3v0bulkJctSideGradingCoeffGiven :1; unsigned BSIM3v0unitAreaJctCapGiven :1; unsigned BSIM3v0unitLengthSidewallJctCapGiven :1; unsigned BSIM3v0oxideTrapDensityAGiven :1; unsigned BSIM3v0oxideTrapDensityBGiven :1; unsigned BSIM3v0oxideTrapDensityCGiven :1; unsigned BSIM3v0emGiven :1; unsigned BSIM3v0efGiven :1; unsigned BSIM3v0afGiven :1; unsigned BSIM3v0kfGiven :1; unsigned BSIM3v0LintGiven :1; unsigned BSIM3v0LlGiven :1; unsigned BSIM3v0LlnGiven :1; unsigned BSIM3v0LwGiven :1; unsigned BSIM3v0LwnGiven :1; unsigned BSIM3v0LwlGiven :1; unsigned BSIM3v0LminGiven :1; unsigned BSIM3v0LmaxGiven :1; unsigned BSIM3v0WintGiven :1; unsigned BSIM3v0WlGiven :1; unsigned BSIM3v0WlnGiven :1; unsigned BSIM3v0WwGiven :1; unsigned BSIM3v0WwnGiven :1; unsigned BSIM3v0WwlGiven :1; unsigned BSIM3v0WminGiven :1; unsigned BSIM3v0WmaxGiven :1; } BSIM3v0model; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ /* device parameters */ #define BSIM3v0_W 1 #define BSIM3v0_L 2 #define BSIM3v0_M 15 #define BSIM3v0_AS 3 #define BSIM3v0_AD 4 #define BSIM3v0_PS 5 #define BSIM3v0_PD 6 #define BSIM3v0_NRS 7 #define BSIM3v0_NRD 8 #define BSIM3v0_OFF 9 #define BSIM3v0_IC_VBS 10 #define BSIM3v0_IC_VDS 11 #define BSIM3v0_IC_VGS 12 #define BSIM3v0_IC 13 #define BSIM3v0_NQSMOD 14 /* model parameters */ #define BSIM3v0_MOD_CAPMOD 101 #define BSIM3v0_MOD_NQSMOD 102 #define BSIM3v0_MOD_MOBMOD 103 #define BSIM3v0_MOD_NOIMOD 104 #define BSIM3v0_MOD_TOX 105 #define BSIM3v0_MOD_CDSC 106 #define BSIM3v0_MOD_CDSCB 107 #define BSIM3v0_MOD_CIT 108 #define BSIM3v0_MOD_NFACTOR 109 #define BSIM3v0_MOD_XJ 110 #define BSIM3v0_MOD_VSAT 111 #define BSIM3v0_MOD_AT 112 #define BSIM3v0_MOD_A0 113 #define BSIM3v0_MOD_A1 114 #define BSIM3v0_MOD_A2 115 #define BSIM3v0_MOD_KETA 116 #define BSIM3v0_MOD_NSUB 117 #define BSIM3v0_MOD_NPEAK 118 #define BSIM3v0_MOD_NGATE 120 #define BSIM3v0_MOD_GAMMA1 121 #define BSIM3v0_MOD_GAMMA2 122 #define BSIM3v0_MOD_VBX 123 #define BSIM3v0_MOD_BINUNIT 124 #define BSIM3v0_MOD_VBM 125 #define BSIM3v0_MOD_XT 126 #define BSIM3v0_MOD_K1 129 #define BSIM3v0_MOD_KT1 130 #define BSIM3v0_MOD_KT1L 131 #define BSIM3v0_MOD_K2 132 #define BSIM3v0_MOD_KT2 133 #define BSIM3v0_MOD_K3 134 #define BSIM3v0_MOD_K3B 135 #define BSIM3v0_MOD_W0 136 #define BSIM3v0_MOD_NLX 137 #define BSIM3v0_MOD_DVT0 138 #define BSIM3v0_MOD_DVT1 139 #define BSIM3v0_MOD_DVT2 140 #define BSIM3v0_MOD_DVT0W 141 #define BSIM3v0_MOD_DVT1W 142 #define BSIM3v0_MOD_DVT2W 143 #define BSIM3v0_MOD_DROUT 144 #define BSIM3v0_MOD_DSUB 145 #define BSIM3v0_MOD_VTH0 146 #define BSIM3v0_MOD_UA 147 #define BSIM3v0_MOD_UA1 148 #define BSIM3v0_MOD_UB 149 #define BSIM3v0_MOD_UB1 150 #define BSIM3v0_MOD_UC 151 #define BSIM3v0_MOD_UC1 152 #define BSIM3v0_MOD_U0 153 #define BSIM3v0_MOD_UTE 154 #define BSIM3v0_MOD_VOFF 155 #define BSIM3v0_MOD_DELTA 156 #define BSIM3v0_MOD_RDSW 157 #define BSIM3v0_MOD_PRT 158 #define BSIM3v0_MOD_LDD 159 #define BSIM3v0_MOD_ETA 160 #define BSIM3v0_MOD_ETA0 161 #define BSIM3v0_MOD_ETAB 162 #define BSIM3v0_MOD_PCLM 163 #define BSIM3v0_MOD_PDIBL1 164 #define BSIM3v0_MOD_PDIBL2 165 #define BSIM3v0_MOD_PSCBE1 166 #define BSIM3v0_MOD_PSCBE2 167 #define BSIM3v0_MOD_PVAG 168 #define BSIM3v0_MOD_WR 169 #define BSIM3v0_MOD_DWG 170 #define BSIM3v0_MOD_DWB 171 #define BSIM3v0_MOD_B0 172 #define BSIM3v0_MOD_B1 173 #define BSIM3v0_MOD_ALPHA0 174 #define BSIM3v0_MOD_BETA0 175 #define BSIM3v0_MOD_PDIBLB 178 #define BSIM3v0_MOD_PRWG 179 #define BSIM3v0_MOD_PRWB 180 #define BSIM3v0_MOD_CDSCD 181 #define BSIM3v0_MOD_AGS 182 #define BSIM3v0_MOD_FRINGE 184 #define BSIM3v0_MOD_ELM 185 #define BSIM3v0_MOD_CGSL 186 #define BSIM3v0_MOD_CGDL 187 #define BSIM3v0_MOD_CKAPPA 188 #define BSIM3v0_MOD_CF 189 #define BSIM3v0_MOD_CLC 190 #define BSIM3v0_MOD_CLE 191 /* Length dependence */ #define BSIM3v0_MOD_LCDSC 201 #define BSIM3v0_MOD_LCDSCB 202 #define BSIM3v0_MOD_LCIT 203 #define BSIM3v0_MOD_LNFACTOR 204 #define BSIM3v0_MOD_LXJ 205 #define BSIM3v0_MOD_LVSAT 206 #define BSIM3v0_MOD_LAT 207 #define BSIM3v0_MOD_LA0 208 #define BSIM3v0_MOD_LA1 209 #define BSIM3v0_MOD_LA2 210 #define BSIM3v0_MOD_LKETA 211 #define BSIM3v0_MOD_LNSUB 212 #define BSIM3v0_MOD_LNPEAK 213 #define BSIM3v0_MOD_LNGATE 215 #define BSIM3v0_MOD_LGAMMA1 216 #define BSIM3v0_MOD_LGAMMA2 217 #define BSIM3v0_MOD_LVBX 218 #define BSIM3v0_MOD_LVBM 220 #define BSIM3v0_MOD_LXT 222 #define BSIM3v0_MOD_LK1 225 #define BSIM3v0_MOD_LKT1 226 #define BSIM3v0_MOD_LKT1L 227 #define BSIM3v0_MOD_LK2 228 #define BSIM3v0_MOD_LKT2 229 #define BSIM3v0_MOD_LK3 230 #define BSIM3v0_MOD_LK3B 231 #define BSIM3v0_MOD_LW0 232 #define BSIM3v0_MOD_LNLX 233 #define BSIM3v0_MOD_LDVT0 234 #define BSIM3v0_MOD_LDVT1 235 #define BSIM3v0_MOD_LDVT2 236 #define BSIM3v0_MOD_LDVT0W 237 #define BSIM3v0_MOD_LDVT1W 238 #define BSIM3v0_MOD_LDVT2W 239 #define BSIM3v0_MOD_LDROUT 240 #define BSIM3v0_MOD_LDSUB 241 #define BSIM3v0_MOD_LVTH0 242 #define BSIM3v0_MOD_LUA 243 #define BSIM3v0_MOD_LUA1 244 #define BSIM3v0_MOD_LUB 245 #define BSIM3v0_MOD_LUB1 246 #define BSIM3v0_MOD_LUC 247 #define BSIM3v0_MOD_LUC1 248 #define BSIM3v0_MOD_LU0 249 #define BSIM3v0_MOD_LUTE 250 #define BSIM3v0_MOD_LVOFF 251 #define BSIM3v0_MOD_LDELTA 252 #define BSIM3v0_MOD_LRDSW 253 #define BSIM3v0_MOD_LPRT 254 #define BSIM3v0_MOD_LLDD 255 #define BSIM3v0_MOD_LETA 256 #define BSIM3v0_MOD_LETA0 257 #define BSIM3v0_MOD_LETAB 258 #define BSIM3v0_MOD_LPCLM 259 #define BSIM3v0_MOD_LPDIBL1 260 #define BSIM3v0_MOD_LPDIBL2 261 #define BSIM3v0_MOD_LPSCBE1 262 #define BSIM3v0_MOD_LPSCBE2 263 #define BSIM3v0_MOD_LPVAG 264 #define BSIM3v0_MOD_LWR 265 #define BSIM3v0_MOD_LDWG 266 #define BSIM3v0_MOD_LDWB 267 #define BSIM3v0_MOD_LB0 268 #define BSIM3v0_MOD_LB1 269 #define BSIM3v0_MOD_LALPHA0 270 #define BSIM3v0_MOD_LBETA0 271 #define BSIM3v0_MOD_LPDIBLB 274 #define BSIM3v0_MOD_LPRWG 275 #define BSIM3v0_MOD_LPRWB 276 #define BSIM3v0_MOD_LCDSCD 277 #define BSIM3v0_MOD_LAGS 278 #define BSIM3v0_MOD_LFRINGE 281 #define BSIM3v0_MOD_LELM 282 #define BSIM3v0_MOD_LCGSL 283 #define BSIM3v0_MOD_LCGDL 284 #define BSIM3v0_MOD_LCKAPPA 285 #define BSIM3v0_MOD_LCF 286 #define BSIM3v0_MOD_LCLC 287 #define BSIM3v0_MOD_LCLE 288 /* Width dependence */ #define BSIM3v0_MOD_WCDSC 301 #define BSIM3v0_MOD_WCDSCB 302 #define BSIM3v0_MOD_WCIT 303 #define BSIM3v0_MOD_WNFACTOR 304 #define BSIM3v0_MOD_WXJ 305 #define BSIM3v0_MOD_WVSAT 306 #define BSIM3v0_MOD_WAT 307 #define BSIM3v0_MOD_WA0 308 #define BSIM3v0_MOD_WA1 309 #define BSIM3v0_MOD_WA2 310 #define BSIM3v0_MOD_WKETA 311 #define BSIM3v0_MOD_WNSUB 312 #define BSIM3v0_MOD_WNPEAK 313 #define BSIM3v0_MOD_WNGATE 315 #define BSIM3v0_MOD_WGAMMA1 316 #define BSIM3v0_MOD_WGAMMA2 317 #define BSIM3v0_MOD_WVBX 318 #define BSIM3v0_MOD_WVBM 320 #define BSIM3v0_MOD_WXT 322 #define BSIM3v0_MOD_WK1 325 #define BSIM3v0_MOD_WKT1 326 #define BSIM3v0_MOD_WKT1L 327 #define BSIM3v0_MOD_WK2 328 #define BSIM3v0_MOD_WKT2 329 #define BSIM3v0_MOD_WK3 330 #define BSIM3v0_MOD_WK3B 331 #define BSIM3v0_MOD_WW0 332 #define BSIM3v0_MOD_WNLX 333 #define BSIM3v0_MOD_WDVT0 334 #define BSIM3v0_MOD_WDVT1 335 #define BSIM3v0_MOD_WDVT2 336 #define BSIM3v0_MOD_WDVT0W 337 #define BSIM3v0_MOD_WDVT1W 338 #define BSIM3v0_MOD_WDVT2W 339 #define BSIM3v0_MOD_WDROUT 340 #define BSIM3v0_MOD_WDSUB 341 #define BSIM3v0_MOD_WVTH0 342 #define BSIM3v0_MOD_WUA 343 #define BSIM3v0_MOD_WUA1 344 #define BSIM3v0_MOD_WUB 345 #define BSIM3v0_MOD_WUB1 346 #define BSIM3v0_MOD_WUC 347 #define BSIM3v0_MOD_WUC1 348 #define BSIM3v0_MOD_WU0 349 #define BSIM3v0_MOD_WUTE 350 #define BSIM3v0_MOD_WVOFF 351 #define BSIM3v0_MOD_WDELTA 352 #define BSIM3v0_MOD_WRDSW 353 #define BSIM3v0_MOD_WPRT 354 #define BSIM3v0_MOD_WLDD 355 #define BSIM3v0_MOD_WETA 356 #define BSIM3v0_MOD_WETA0 357 #define BSIM3v0_MOD_WETAB 358 #define BSIM3v0_MOD_WPCLM 359 #define BSIM3v0_MOD_WPDIBL1 360 #define BSIM3v0_MOD_WPDIBL2 361 #define BSIM3v0_MOD_WPSCBE1 362 #define BSIM3v0_MOD_WPSCBE2 363 #define BSIM3v0_MOD_WPVAG 364 #define BSIM3v0_MOD_WWR 365 #define BSIM3v0_MOD_WDWG 366 #define BSIM3v0_MOD_WDWB 367 #define BSIM3v0_MOD_WB0 368 #define BSIM3v0_MOD_WB1 369 #define BSIM3v0_MOD_WALPHA0 370 #define BSIM3v0_MOD_WBETA0 371 #define BSIM3v0_MOD_WPDIBLB 374 #define BSIM3v0_MOD_WPRWG 375 #define BSIM3v0_MOD_WPRWB 376 #define BSIM3v0_MOD_WCDSCD 377 #define BSIM3v0_MOD_WAGS 378 #define BSIM3v0_MOD_WFRINGE 381 #define BSIM3v0_MOD_WELM 382 #define BSIM3v0_MOD_WCGSL 383 #define BSIM3v0_MOD_WCGDL 384 #define BSIM3v0_MOD_WCKAPPA 385 #define BSIM3v0_MOD_WCF 386 #define BSIM3v0_MOD_WCLC 387 #define BSIM3v0_MOD_WCLE 388 /* Cross-term dependence */ #define BSIM3v0_MOD_PCDSC 401 #define BSIM3v0_MOD_PCDSCB 402 #define BSIM3v0_MOD_PCIT 403 #define BSIM3v0_MOD_PNFACTOR 404 #define BSIM3v0_MOD_PXJ 405 #define BSIM3v0_MOD_PVSAT 406 #define BSIM3v0_MOD_PAT 407 #define BSIM3v0_MOD_PA0 408 #define BSIM3v0_MOD_PA1 409 #define BSIM3v0_MOD_PA2 410 #define BSIM3v0_MOD_PKETA 411 #define BSIM3v0_MOD_PNSUB 412 #define BSIM3v0_MOD_PNPEAK 413 #define BSIM3v0_MOD_PNGATE 415 #define BSIM3v0_MOD_PGAMMA1 416 #define BSIM3v0_MOD_PGAMMA2 417 #define BSIM3v0_MOD_PVBX 418 #define BSIM3v0_MOD_PVBM 420 #define BSIM3v0_MOD_PXT 422 #define BSIM3v0_MOD_PK1 425 #define BSIM3v0_MOD_PKT1 426 #define BSIM3v0_MOD_PKT1L 427 #define BSIM3v0_MOD_PK2 428 #define BSIM3v0_MOD_PKT2 429 #define BSIM3v0_MOD_PK3 430 #define BSIM3v0_MOD_PK3B 431 #define BSIM3v0_MOD_PW0 432 #define BSIM3v0_MOD_PNLX 433 #define BSIM3v0_MOD_PDVT0 434 #define BSIM3v0_MOD_PDVT1 435 #define BSIM3v0_MOD_PDVT2 436 #define BSIM3v0_MOD_PDVT0W 437 #define BSIM3v0_MOD_PDVT1W 438 #define BSIM3v0_MOD_PDVT2W 439 #define BSIM3v0_MOD_PDROUT 440 #define BSIM3v0_MOD_PDSUB 441 #define BSIM3v0_MOD_PVTH0 442 #define BSIM3v0_MOD_PUA 443 #define BSIM3v0_MOD_PUA1 444 #define BSIM3v0_MOD_PUB 445 #define BSIM3v0_MOD_PUB1 446 #define BSIM3v0_MOD_PUC 447 #define BSIM3v0_MOD_PUC1 448 #define BSIM3v0_MOD_PU0 449 #define BSIM3v0_MOD_PUTE 450 #define BSIM3v0_MOD_PVOFF 451 #define BSIM3v0_MOD_PDELTA 452 #define BSIM3v0_MOD_PRDSW 453 #define BSIM3v0_MOD_PPRT 454 #define BSIM3v0_MOD_PLDD 455 #define BSIM3v0_MOD_PETA 456 #define BSIM3v0_MOD_PETA0 457 #define BSIM3v0_MOD_PETAB 458 #define BSIM3v0_MOD_PPCLM 459 #define BSIM3v0_MOD_PPDIBL1 460 #define BSIM3v0_MOD_PPDIBL2 461 #define BSIM3v0_MOD_PPSCBE1 462 #define BSIM3v0_MOD_PPSCBE2 463 #define BSIM3v0_MOD_PPVAG 464 #define BSIM3v0_MOD_PWR 465 #define BSIM3v0_MOD_PDWG 466 #define BSIM3v0_MOD_PDWB 467 #define BSIM3v0_MOD_PB0 468 #define BSIM3v0_MOD_PB1 469 #define BSIM3v0_MOD_PALPHA0 470 #define BSIM3v0_MOD_PBETA0 471 #define BSIM3v0_MOD_PPDIBLB 474 #define BSIM3v0_MOD_PPRWG 475 #define BSIM3v0_MOD_PPRWB 476 #define BSIM3v0_MOD_PCDSCD 477 #define BSIM3v0_MOD_PAGS 478 #define BSIM3v0_MOD_PFRINGE 481 #define BSIM3v0_MOD_PELM 482 #define BSIM3v0_MOD_PCGSL 483 #define BSIM3v0_MOD_PCGDL 484 #define BSIM3v0_MOD_PCKAPPA 485 #define BSIM3v0_MOD_PCF 486 #define BSIM3v0_MOD_PCLC 487 #define BSIM3v0_MOD_PCLE 488 #define BSIM3v0_MOD_TNOM 501 #define BSIM3v0_MOD_CGSO 502 #define BSIM3v0_MOD_CGDO 503 #define BSIM3v0_MOD_CGBO 504 #define BSIM3v0_MOD_XPART 505 #define BSIM3v0_MOD_RSH 506 #define BSIM3v0_MOD_JS 507 #define BSIM3v0_MOD_PB 508 #define BSIM3v0_MOD_MJ 509 #define BSIM3v0_MOD_PBSW 510 #define BSIM3v0_MOD_MJSW 511 #define BSIM3v0_MOD_CJ 512 #define BSIM3v0_MOD_CJSW 513 #define BSIM3v0_MOD_NMOS 514 #define BSIM3v0_MOD_PMOS 515 #define BSIM3v0_MOD_NOIA 516 #define BSIM3v0_MOD_NOIB 517 #define BSIM3v0_MOD_NOIC 518 #define BSIM3v0_MOD_LINT 519 #define BSIM3v0_MOD_LL 520 #define BSIM3v0_MOD_LLN 521 #define BSIM3v0_MOD_LW 522 #define BSIM3v0_MOD_LWN 523 #define BSIM3v0_MOD_LWL 524 #define BSIM3v0_MOD_LMIN 525 #define BSIM3v0_MOD_LMAX 526 #define BSIM3v0_MOD_WINT 527 #define BSIM3v0_MOD_WL 528 #define BSIM3v0_MOD_WLN 529 #define BSIM3v0_MOD_WW 530 #define BSIM3v0_MOD_WWN 531 #define BSIM3v0_MOD_WWL 532 #define BSIM3v0_MOD_WMIN 533 #define BSIM3v0_MOD_WMAX 534 #define BSIM3v0_MOD_DWC 535 #define BSIM3v0_MOD_DLC 536 #define BSIM3v0_MOD_EM 537 #define BSIM3v0_MOD_EF 538 #define BSIM3v0_MOD_AF 539 #define BSIM3v0_MOD_KF 540 /* device questions */ #define BSIM3v0_DNODE 601 #define BSIM3v0_GNODE 602 #define BSIM3v0_SNODE 603 #define BSIM3v0_BNODE 604 #define BSIM3v0_DNODEPRIME 605 #define BSIM3v0_SNODEPRIME 606 #define BSIM3v0_VBD 607 #define BSIM3v0_VBS 608 #define BSIM3v0_VGS 609 #define BSIM3v0_VDS 610 #define BSIM3v0_CD 611 #define BSIM3v0_CBS 612 #define BSIM3v0_CBD 613 #define BSIM3v0_GM 614 #define BSIM3v0_GDS 615 #define BSIM3v0_GMBS 616 #define BSIM3v0_GBD 617 #define BSIM3v0_GBS 618 #define BSIM3v0_QB 619 #define BSIM3v0_CQB 620 #define BSIM3v0_QG 621 #define BSIM3v0_CQG 622 #define BSIM3v0_QD 623 #define BSIM3v0_CQD 624 #define BSIM3v0_CGG 625 #define BSIM3v0_CGD 626 #define BSIM3v0_CGS 627 #define BSIM3v0_CBG 628 #define BSIM3v0_CAPBD 629 #define BSIM3v0_CQBD 630 #define BSIM3v0_CAPBS 631 #define BSIM3v0_CQBS 632 #define BSIM3v0_CDG 633 #define BSIM3v0_CDD 634 #define BSIM3v0_CDS 635 #define BSIM3v0_VON 636 #define BSIM3v0_VDSAT 637 #define BSIM3v0_QBS 638 #define BSIM3v0_QBD 639 #define BSIM3v0_SOURCECONDUCT 640 #define BSIM3v0_DRAINCONDUCT 641 #define BSIM3v0_CBDB 642 #define BSIM3v0_CBSB 643 #include "bsim3v0ext.h" extern void BSIM3v0evaluate(double,double,double,BSIM3v0instance*,BSIM3v0model*, double*,double*,double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, CKTcircuit*); #endif /*BSIM3v0*/ tmpk8ny_4pz/src/spicelib/devices/bsim3v0/bsim3v0init.c0000644000175000017500000000334113546075722022762 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "bsim3v0itf.h" #include "bsim3v0ext.h" #include "bsim3v0init.h" SPICEdev B3v0info = { .DEVpublic = { .name = "BSIM3v0", .description = "Berkeley Short Channel IGFET Model Version-3 (3.0)", .terms = &BSIM3v0nSize, .numNames = &BSIM3v0nSize, .termNames = BSIM3v0names, .numInstanceParms = &BSIM3v0pTSize, .instanceParms = BSIM3v0pTable, .numModelParms = &BSIM3v0mPTSize, .modelParms = BSIM3v0mPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = BSIM3v0param, .DEVmodParam = BSIM3v0mParam, .DEVload = BSIM3v0load, .DEVsetup = BSIM3v0setup, .DEVunsetup = BSIM3v0unsetup, .DEVpzSetup = BSIM3v0setup, .DEVtemperature = BSIM3v0temp, .DEVtrunc = BSIM3v0trunc, .DEVfindBranch = NULL, .DEVacLoad = BSIM3v0acLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = BSIM3v0getic, .DEVask = BSIM3v0ask, .DEVmodAsk = BSIM3v0mAsk, .DEVpzLoad = BSIM3v0pzLoad, .DEVconvTest = BSIM3v0convTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = BSIM3v0noise, .DEVsoaCheck = NULL, .DEVinstSize = &BSIM3v0iSize, .DEVmodSize = &BSIM3v0mSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_bsim3v0_info(void) { return &B3v0info; } tmpk8ny_4pz/src/spicelib/devices/bsim3v0/b3v0mask.c0000644000175000017500000011247113546075722022246 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1995 Min-Chie Jeng and Mansun Chan. File: b3v0mask.c **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "bsim3v0def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3v0mAsk( CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { BSIM3v0model *model = (BSIM3v0model *)inst; NG_IGNORE(ckt); switch(which) { case BSIM3v0_MOD_MOBMOD: value->iValue = model->BSIM3v0mobMod; return(OK); case BSIM3v0_MOD_BINUNIT: value->iValue = model->BSIM3v0binUnit; return(OK); case BSIM3v0_MOD_CAPMOD: value->iValue = model->BSIM3v0capMod; return(OK); case BSIM3v0_MOD_NQSMOD: value->iValue = model->BSIM3v0nqsMod; return(OK); case BSIM3v0_MOD_NOIMOD: value->iValue = model->BSIM3v0noiMod; return(OK); case BSIM3v0_MOD_TOX : value->rValue = model->BSIM3v0tox; return(OK); case BSIM3v0_MOD_CDSC : value->rValue = model->BSIM3v0cdsc; return(OK); case BSIM3v0_MOD_CDSCB : value->rValue = model->BSIM3v0cdscb; return(OK); case BSIM3v0_MOD_CDSCD : value->rValue = model->BSIM3v0cdscd; return(OK); case BSIM3v0_MOD_CIT : value->rValue = model->BSIM3v0cit; return(OK); case BSIM3v0_MOD_NFACTOR : value->rValue = model->BSIM3v0nfactor; return(OK); case BSIM3v0_MOD_XJ: value->rValue = model->BSIM3v0xj; return(OK); case BSIM3v0_MOD_VSAT: value->rValue = model->BSIM3v0vsat; return(OK); case BSIM3v0_MOD_AT: value->rValue = model->BSIM3v0at; return(OK); case BSIM3v0_MOD_A0: value->rValue = model->BSIM3v0a0; return(OK); case BSIM3v0_MOD_AGS: value->rValue = model->BSIM3v0ags; return(OK); case BSIM3v0_MOD_A1: value->rValue = model->BSIM3v0a1; return(OK); case BSIM3v0_MOD_A2: value->rValue = model->BSIM3v0a2; return(OK); case BSIM3v0_MOD_KETA: value->rValue = model->BSIM3v0keta; return(OK); case BSIM3v0_MOD_NSUB: value->rValue = model->BSIM3v0nsub; return(OK); case BSIM3v0_MOD_NPEAK: value->rValue = model->BSIM3v0npeak; return(OK); case BSIM3v0_MOD_NGATE: value->rValue = model->BSIM3v0ngate; return(OK); case BSIM3v0_MOD_GAMMA1: value->rValue = model->BSIM3v0gamma1; return(OK); case BSIM3v0_MOD_GAMMA2: value->rValue = model->BSIM3v0gamma2; return(OK); case BSIM3v0_MOD_VBX: value->rValue = model->BSIM3v0vbx; return(OK); case BSIM3v0_MOD_VBM: value->rValue = model->BSIM3v0vbm; return(OK); case BSIM3v0_MOD_XT: value->rValue = model->BSIM3v0xt; return(OK); case BSIM3v0_MOD_K1: value->rValue = model->BSIM3v0k1; return(OK); case BSIM3v0_MOD_KT1: value->rValue = model->BSIM3v0kt1; return(OK); case BSIM3v0_MOD_KT1L: value->rValue = model->BSIM3v0kt1l; return(OK); case BSIM3v0_MOD_KT2 : value->rValue = model->BSIM3v0kt2; return(OK); case BSIM3v0_MOD_K2 : value->rValue = model->BSIM3v0k2; return(OK); case BSIM3v0_MOD_K3: value->rValue = model->BSIM3v0k3; return(OK); case BSIM3v0_MOD_K3B: value->rValue = model->BSIM3v0k3b; return(OK); case BSIM3v0_MOD_W0: value->rValue = model->BSIM3v0w0; return(OK); case BSIM3v0_MOD_NLX: value->rValue = model->BSIM3v0nlx; return(OK); case BSIM3v0_MOD_DVT0 : value->rValue = model->BSIM3v0dvt0; return(OK); case BSIM3v0_MOD_DVT1 : value->rValue = model->BSIM3v0dvt1; return(OK); case BSIM3v0_MOD_DVT2 : value->rValue = model->BSIM3v0dvt2; return(OK); case BSIM3v0_MOD_DVT0W : value->rValue = model->BSIM3v0dvt0w; return(OK); case BSIM3v0_MOD_DVT1W : value->rValue = model->BSIM3v0dvt1w; return(OK); case BSIM3v0_MOD_DVT2W : value->rValue = model->BSIM3v0dvt2w; return(OK); case BSIM3v0_MOD_DROUT : value->rValue = model->BSIM3v0drout; return(OK); case BSIM3v0_MOD_DSUB : value->rValue = model->BSIM3v0dsub; return(OK); case BSIM3v0_MOD_VTH0: value->rValue = model->BSIM3v0vth0; return(OK); case BSIM3v0_MOD_UA: value->rValue = model->BSIM3v0ua; return(OK); case BSIM3v0_MOD_UA1: value->rValue = model->BSIM3v0ua1; return(OK); case BSIM3v0_MOD_UB: value->rValue = model->BSIM3v0ub; return(OK); case BSIM3v0_MOD_UB1: value->rValue = model->BSIM3v0ub1; return(OK); case BSIM3v0_MOD_UC: value->rValue = model->BSIM3v0uc; return(OK); case BSIM3v0_MOD_UC1: value->rValue = model->BSIM3v0uc1; return(OK); case BSIM3v0_MOD_U0: value->rValue = model->BSIM3v0u0; return(OK); case BSIM3v0_MOD_UTE: value->rValue = model->BSIM3v0ute; return(OK); case BSIM3v0_MOD_VOFF: value->rValue = model->BSIM3v0voff; return(OK); case BSIM3v0_MOD_DELTA: value->rValue = model->BSIM3v0delta; return(OK); case BSIM3v0_MOD_RDSW: value->rValue = model->BSIM3v0rdsw; return(OK); case BSIM3v0_MOD_PRWG: value->rValue = model->BSIM3v0prwg; return(OK); case BSIM3v0_MOD_PRWB: value->rValue = model->BSIM3v0prwb; return(OK); case BSIM3v0_MOD_PRT: value->rValue = model->BSIM3v0prt; return(OK); case BSIM3v0_MOD_ETA0: value->rValue = model->BSIM3v0eta0; return(OK); case BSIM3v0_MOD_ETAB: value->rValue = model->BSIM3v0etab; return(OK); case BSIM3v0_MOD_PCLM: value->rValue = model->BSIM3v0pclm; return(OK); case BSIM3v0_MOD_PDIBL1: value->rValue = model->BSIM3v0pdibl1; return(OK); case BSIM3v0_MOD_PDIBL2: value->rValue = model->BSIM3v0pdibl2; return(OK); case BSIM3v0_MOD_PDIBLB: value->rValue = model->BSIM3v0pdiblb; return(OK); case BSIM3v0_MOD_PSCBE1: value->rValue = model->BSIM3v0pscbe1; return(OK); case BSIM3v0_MOD_PSCBE2: value->rValue = model->BSIM3v0pscbe2; return(OK); case BSIM3v0_MOD_PVAG: value->rValue = model->BSIM3v0pvag; return(OK); case BSIM3v0_MOD_WR: value->rValue = model->BSIM3v0wr; return(OK); case BSIM3v0_MOD_DWG: value->rValue = model->BSIM3v0dwg; return(OK); case BSIM3v0_MOD_DWB: value->rValue = model->BSIM3v0dwb; return(OK); case BSIM3v0_MOD_B0: value->rValue = model->BSIM3v0b0; return(OK); case BSIM3v0_MOD_B1: value->rValue = model->BSIM3v0b1; return(OK); case BSIM3v0_MOD_ALPHA0: value->rValue = model->BSIM3v0alpha0; return(OK); case BSIM3v0_MOD_BETA0: value->rValue = model->BSIM3v0beta0; return(OK); case BSIM3v0_MOD_ELM: value->rValue = model->BSIM3v0elm; return(OK); case BSIM3v0_MOD_CGSL: value->rValue = model->BSIM3v0cgsl; return(OK); case BSIM3v0_MOD_CGDL: value->rValue = model->BSIM3v0cgdl; return(OK); case BSIM3v0_MOD_CKAPPA: value->rValue = model->BSIM3v0ckappa; return(OK); case BSIM3v0_MOD_CF: value->rValue = model->BSIM3v0cf; return(OK); case BSIM3v0_MOD_CLC: value->rValue = model->BSIM3v0clc; return(OK); case BSIM3v0_MOD_CLE: value->rValue = model->BSIM3v0cle; return(OK); case BSIM3v0_MOD_DWC: value->rValue = model->BSIM3v0dwc; return(OK); case BSIM3v0_MOD_DLC: value->rValue = model->BSIM3v0dlc; return(OK); /* Length dependence */ case BSIM3v0_MOD_LCDSC : value->rValue = model->BSIM3v0lcdsc; return(OK); case BSIM3v0_MOD_LCDSCB : value->rValue = model->BSIM3v0lcdscb; return(OK); case BSIM3v0_MOD_LCDSCD : value->rValue = model->BSIM3v0lcdscd; return(OK); case BSIM3v0_MOD_LCIT : value->rValue = model->BSIM3v0lcit; return(OK); case BSIM3v0_MOD_LNFACTOR : value->rValue = model->BSIM3v0lnfactor; return(OK); case BSIM3v0_MOD_LXJ: value->rValue = model->BSIM3v0lxj; return(OK); case BSIM3v0_MOD_LVSAT: value->rValue = model->BSIM3v0lvsat; return(OK); case BSIM3v0_MOD_LAT: value->rValue = model->BSIM3v0lat; return(OK); case BSIM3v0_MOD_LA0: value->rValue = model->BSIM3v0la0; return(OK); case BSIM3v0_MOD_LAGS: value->rValue = model->BSIM3v0lags; return(OK); case BSIM3v0_MOD_LA1: value->rValue = model->BSIM3v0la1; return(OK); case BSIM3v0_MOD_LA2: value->rValue = model->BSIM3v0la2; return(OK); case BSIM3v0_MOD_LKETA: value->rValue = model->BSIM3v0lketa; return(OK); case BSIM3v0_MOD_LNSUB: value->rValue = model->BSIM3v0lnsub; return(OK); case BSIM3v0_MOD_LNPEAK: value->rValue = model->BSIM3v0lnpeak; return(OK); case BSIM3v0_MOD_LNGATE: value->rValue = model->BSIM3v0lngate; return(OK); case BSIM3v0_MOD_LGAMMA1: value->rValue = model->BSIM3v0lgamma1; return(OK); case BSIM3v0_MOD_LGAMMA2: value->rValue = model->BSIM3v0lgamma2; return(OK); case BSIM3v0_MOD_LVBX: value->rValue = model->BSIM3v0lvbx; return(OK); case BSIM3v0_MOD_LVBM: value->rValue = model->BSIM3v0lvbm; return(OK); case BSIM3v0_MOD_LXT: value->rValue = model->BSIM3v0lxt; return(OK); case BSIM3v0_MOD_LK1: value->rValue = model->BSIM3v0lk1; return(OK); case BSIM3v0_MOD_LKT1: value->rValue = model->BSIM3v0lkt1; return(OK); case BSIM3v0_MOD_LKT1L: value->rValue = model->BSIM3v0lkt1l; return(OK); case BSIM3v0_MOD_LKT2 : value->rValue = model->BSIM3v0lkt2; return(OK); case BSIM3v0_MOD_LK2 : value->rValue = model->BSIM3v0lk2; return(OK); case BSIM3v0_MOD_LK3: value->rValue = model->BSIM3v0lk3; return(OK); case BSIM3v0_MOD_LK3B: value->rValue = model->BSIM3v0lk3b; return(OK); case BSIM3v0_MOD_LW0: value->rValue = model->BSIM3v0lw0; return(OK); case BSIM3v0_MOD_LNLX: value->rValue = model->BSIM3v0lnlx; return(OK); case BSIM3v0_MOD_LDVT0: value->rValue = model->BSIM3v0ldvt0; return(OK); case BSIM3v0_MOD_LDVT1 : value->rValue = model->BSIM3v0ldvt1; return(OK); case BSIM3v0_MOD_LDVT2 : value->rValue = model->BSIM3v0ldvt2; return(OK); case BSIM3v0_MOD_LDVT0W : value->rValue = model->BSIM3v0ldvt0w; return(OK); case BSIM3v0_MOD_LDVT1W : value->rValue = model->BSIM3v0ldvt1w; return(OK); case BSIM3v0_MOD_LDVT2W : value->rValue = model->BSIM3v0ldvt2w; return(OK); case BSIM3v0_MOD_LDROUT : value->rValue = model->BSIM3v0ldrout; return(OK); case BSIM3v0_MOD_LDSUB : value->rValue = model->BSIM3v0ldsub; return(OK); case BSIM3v0_MOD_LVTH0: value->rValue = model->BSIM3v0lvth0; return(OK); case BSIM3v0_MOD_LUA: value->rValue = model->BSIM3v0lua; return(OK); case BSIM3v0_MOD_LUA1: value->rValue = model->BSIM3v0lua1; return(OK); case BSIM3v0_MOD_LUB: value->rValue = model->BSIM3v0lub; return(OK); case BSIM3v0_MOD_LUB1: value->rValue = model->BSIM3v0lub1; return(OK); case BSIM3v0_MOD_LUC: value->rValue = model->BSIM3v0luc; return(OK); case BSIM3v0_MOD_LUC1: value->rValue = model->BSIM3v0luc1; return(OK); case BSIM3v0_MOD_LU0: value->rValue = model->BSIM3v0lu0; return(OK); case BSIM3v0_MOD_LUTE: value->rValue = model->BSIM3v0lute; return(OK); case BSIM3v0_MOD_LVOFF: value->rValue = model->BSIM3v0lvoff; return(OK); case BSIM3v0_MOD_LDELTA: value->rValue = model->BSIM3v0ldelta; return(OK); case BSIM3v0_MOD_LRDSW: value->rValue = model->BSIM3v0lrdsw; return(OK); case BSIM3v0_MOD_LPRWB: value->rValue = model->BSIM3v0lprwb; return(OK); case BSIM3v0_MOD_LPRWG: value->rValue = model->BSIM3v0lprwg; return(OK); case BSIM3v0_MOD_LPRT: value->rValue = model->BSIM3v0lprt; return(OK); case BSIM3v0_MOD_LETA0: value->rValue = model->BSIM3v0leta0; return(OK); case BSIM3v0_MOD_LETAB: value->rValue = model->BSIM3v0letab; return(OK); case BSIM3v0_MOD_LPCLM: value->rValue = model->BSIM3v0lpclm; return(OK); case BSIM3v0_MOD_LPDIBL1: value->rValue = model->BSIM3v0lpdibl1; return(OK); case BSIM3v0_MOD_LPDIBL2: value->rValue = model->BSIM3v0lpdibl2; return(OK); case BSIM3v0_MOD_LPDIBLB: value->rValue = model->BSIM3v0lpdiblb; return(OK); case BSIM3v0_MOD_LPSCBE1: value->rValue = model->BSIM3v0lpscbe1; return(OK); case BSIM3v0_MOD_LPSCBE2: value->rValue = model->BSIM3v0lpscbe2; return(OK); case BSIM3v0_MOD_LPVAG: value->rValue = model->BSIM3v0lpvag; return(OK); case BSIM3v0_MOD_LWR: value->rValue = model->BSIM3v0lwr; return(OK); case BSIM3v0_MOD_LDWG: value->rValue = model->BSIM3v0ldwg; return(OK); case BSIM3v0_MOD_LDWB: value->rValue = model->BSIM3v0ldwb; return(OK); case BSIM3v0_MOD_LB0: value->rValue = model->BSIM3v0lb0; return(OK); case BSIM3v0_MOD_LB1: value->rValue = model->BSIM3v0lb1; return(OK); case BSIM3v0_MOD_LALPHA0: value->rValue = model->BSIM3v0lalpha0; return(OK); case BSIM3v0_MOD_LBETA0: value->rValue = model->BSIM3v0lbeta0; return(OK); case BSIM3v0_MOD_LELM: value->rValue = model->BSIM3v0lelm; return(OK); case BSIM3v0_MOD_LCGSL: value->rValue = model->BSIM3v0lcgsl; return(OK); case BSIM3v0_MOD_LCGDL: value->rValue = model->BSIM3v0lcgdl; return(OK); case BSIM3v0_MOD_LCKAPPA: value->rValue = model->BSIM3v0lckappa; return(OK); case BSIM3v0_MOD_LCF: value->rValue = model->BSIM3v0lcf; return(OK); case BSIM3v0_MOD_LCLC: value->rValue = model->BSIM3v0lclc; return(OK); case BSIM3v0_MOD_LCLE: value->rValue = model->BSIM3v0lcle; return(OK); /* Width dependence */ case BSIM3v0_MOD_WCDSC : value->rValue = model->BSIM3v0wcdsc; return(OK); case BSIM3v0_MOD_WCDSCB : value->rValue = model->BSIM3v0wcdscb; return(OK); case BSIM3v0_MOD_WCDSCD : value->rValue = model->BSIM3v0wcdscd; return(OK); case BSIM3v0_MOD_WCIT : value->rValue = model->BSIM3v0wcit; return(OK); case BSIM3v0_MOD_WNFACTOR : value->rValue = model->BSIM3v0wnfactor; return(OK); case BSIM3v0_MOD_WXJ: value->rValue = model->BSIM3v0wxj; return(OK); case BSIM3v0_MOD_WVSAT: value->rValue = model->BSIM3v0wvsat; return(OK); case BSIM3v0_MOD_WAT: value->rValue = model->BSIM3v0wat; return(OK); case BSIM3v0_MOD_WA0: value->rValue = model->BSIM3v0wa0; return(OK); case BSIM3v0_MOD_WAGS: value->rValue = model->BSIM3v0wags; return(OK); case BSIM3v0_MOD_WA1: value->rValue = model->BSIM3v0wa1; return(OK); case BSIM3v0_MOD_WA2: value->rValue = model->BSIM3v0wa2; return(OK); case BSIM3v0_MOD_WKETA: value->rValue = model->BSIM3v0wketa; return(OK); case BSIM3v0_MOD_WNSUB: value->rValue = model->BSIM3v0wnsub; return(OK); case BSIM3v0_MOD_WNPEAK: value->rValue = model->BSIM3v0wnpeak; return(OK); case BSIM3v0_MOD_WNGATE: value->rValue = model->BSIM3v0wngate; return(OK); case BSIM3v0_MOD_WGAMMA1: value->rValue = model->BSIM3v0wgamma1; return(OK); case BSIM3v0_MOD_WGAMMA2: value->rValue = model->BSIM3v0wgamma2; return(OK); case BSIM3v0_MOD_WVBX: value->rValue = model->BSIM3v0wvbx; return(OK); case BSIM3v0_MOD_WVBM: value->rValue = model->BSIM3v0wvbm; return(OK); case BSIM3v0_MOD_WXT: value->rValue = model->BSIM3v0wxt; return(OK); case BSIM3v0_MOD_WK1: value->rValue = model->BSIM3v0wk1; return(OK); case BSIM3v0_MOD_WKT1: value->rValue = model->BSIM3v0wkt1; return(OK); case BSIM3v0_MOD_WKT1L: value->rValue = model->BSIM3v0wkt1l; return(OK); case BSIM3v0_MOD_WKT2 : value->rValue = model->BSIM3v0wkt2; return(OK); case BSIM3v0_MOD_WK2 : value->rValue = model->BSIM3v0wk2; return(OK); case BSIM3v0_MOD_WK3: value->rValue = model->BSIM3v0wk3; return(OK); case BSIM3v0_MOD_WK3B: value->rValue = model->BSIM3v0wk3b; return(OK); case BSIM3v0_MOD_WW0: value->rValue = model->BSIM3v0ww0; return(OK); case BSIM3v0_MOD_WNLX: value->rValue = model->BSIM3v0wnlx; return(OK); case BSIM3v0_MOD_WDVT0: value->rValue = model->BSIM3v0wdvt0; return(OK); case BSIM3v0_MOD_WDVT1 : value->rValue = model->BSIM3v0wdvt1; return(OK); case BSIM3v0_MOD_WDVT2 : value->rValue = model->BSIM3v0wdvt2; return(OK); case BSIM3v0_MOD_WDVT0W : value->rValue = model->BSIM3v0wdvt0w; return(OK); case BSIM3v0_MOD_WDVT1W : value->rValue = model->BSIM3v0wdvt1w; return(OK); case BSIM3v0_MOD_WDVT2W : value->rValue = model->BSIM3v0wdvt2w; return(OK); case BSIM3v0_MOD_WDROUT : value->rValue = model->BSIM3v0wdrout; return(OK); case BSIM3v0_MOD_WDSUB : value->rValue = model->BSIM3v0wdsub; return(OK); case BSIM3v0_MOD_WVTH0: value->rValue = model->BSIM3v0wvth0; return(OK); case BSIM3v0_MOD_WUA: value->rValue = model->BSIM3v0wua; return(OK); case BSIM3v0_MOD_WUA1: value->rValue = model->BSIM3v0wua1; return(OK); case BSIM3v0_MOD_WUB: value->rValue = model->BSIM3v0wub; return(OK); case BSIM3v0_MOD_WUB1: value->rValue = model->BSIM3v0wub1; return(OK); case BSIM3v0_MOD_WUC: value->rValue = model->BSIM3v0wuc; return(OK); case BSIM3v0_MOD_WUC1: value->rValue = model->BSIM3v0wuc1; return(OK); case BSIM3v0_MOD_WU0: value->rValue = model->BSIM3v0wu0; return(OK); case BSIM3v0_MOD_WUTE: value->rValue = model->BSIM3v0wute; return(OK); case BSIM3v0_MOD_WVOFF: value->rValue = model->BSIM3v0wvoff; return(OK); case BSIM3v0_MOD_WDELTA: value->rValue = model->BSIM3v0wdelta; return(OK); case BSIM3v0_MOD_WRDSW: value->rValue = model->BSIM3v0wrdsw; return(OK); case BSIM3v0_MOD_WPRWB: value->rValue = model->BSIM3v0wprwb; return(OK); case BSIM3v0_MOD_WPRWG: value->rValue = model->BSIM3v0wprwg; return(OK); case BSIM3v0_MOD_WPRT: value->rValue = model->BSIM3v0wprt; return(OK); case BSIM3v0_MOD_WETA0: value->rValue = model->BSIM3v0weta0; return(OK); case BSIM3v0_MOD_WETAB: value->rValue = model->BSIM3v0wetab; return(OK); case BSIM3v0_MOD_WPCLM: value->rValue = model->BSIM3v0wpclm; return(OK); case BSIM3v0_MOD_WPDIBL1: value->rValue = model->BSIM3v0wpdibl1; return(OK); case BSIM3v0_MOD_WPDIBL2: value->rValue = model->BSIM3v0wpdibl2; return(OK); case BSIM3v0_MOD_WPDIBLB: value->rValue = model->BSIM3v0wpdiblb; return(OK); case BSIM3v0_MOD_WPSCBE1: value->rValue = model->BSIM3v0wpscbe1; return(OK); case BSIM3v0_MOD_WPSCBE2: value->rValue = model->BSIM3v0wpscbe2; return(OK); case BSIM3v0_MOD_WPVAG: value->rValue = model->BSIM3v0wpvag; return(OK); case BSIM3v0_MOD_WWR: value->rValue = model->BSIM3v0wwr; return(OK); case BSIM3v0_MOD_WDWG: value->rValue = model->BSIM3v0wdwg; return(OK); case BSIM3v0_MOD_WDWB: value->rValue = model->BSIM3v0wdwb; return(OK); case BSIM3v0_MOD_WB0: value->rValue = model->BSIM3v0wb0; return(OK); case BSIM3v0_MOD_WB1: value->rValue = model->BSIM3v0wb1; return(OK); case BSIM3v0_MOD_WALPHA0: value->rValue = model->BSIM3v0walpha0; return(OK); case BSIM3v0_MOD_WBETA0: value->rValue = model->BSIM3v0wbeta0; return(OK); case BSIM3v0_MOD_WELM: value->rValue = model->BSIM3v0welm; return(OK); case BSIM3v0_MOD_WCGSL: value->rValue = model->BSIM3v0wcgsl; return(OK); case BSIM3v0_MOD_WCGDL: value->rValue = model->BSIM3v0wcgdl; return(OK); case BSIM3v0_MOD_WCKAPPA: value->rValue = model->BSIM3v0wckappa; return(OK); case BSIM3v0_MOD_WCF: value->rValue = model->BSIM3v0wcf; return(OK); case BSIM3v0_MOD_WCLC: value->rValue = model->BSIM3v0wclc; return(OK); case BSIM3v0_MOD_WCLE: value->rValue = model->BSIM3v0wcle; return(OK); /* Cross-term dependence */ case BSIM3v0_MOD_PCDSC : value->rValue = model->BSIM3v0pcdsc; return(OK); case BSIM3v0_MOD_PCDSCB : value->rValue = model->BSIM3v0pcdscb; return(OK); case BSIM3v0_MOD_PCDSCD : value->rValue = model->BSIM3v0pcdscd; return(OK); case BSIM3v0_MOD_PCIT : value->rValue = model->BSIM3v0pcit; return(OK); case BSIM3v0_MOD_PNFACTOR : value->rValue = model->BSIM3v0pnfactor; return(OK); case BSIM3v0_MOD_PXJ: value->rValue = model->BSIM3v0pxj; return(OK); case BSIM3v0_MOD_PVSAT: value->rValue = model->BSIM3v0pvsat; return(OK); case BSIM3v0_MOD_PAT: value->rValue = model->BSIM3v0pat; return(OK); case BSIM3v0_MOD_PA0: value->rValue = model->BSIM3v0pa0; return(OK); case BSIM3v0_MOD_PAGS: value->rValue = model->BSIM3v0pags; return(OK); case BSIM3v0_MOD_PA1: value->rValue = model->BSIM3v0pa1; return(OK); case BSIM3v0_MOD_PA2: value->rValue = model->BSIM3v0pa2; return(OK); case BSIM3v0_MOD_PKETA: value->rValue = model->BSIM3v0pketa; return(OK); case BSIM3v0_MOD_PNSUB: value->rValue = model->BSIM3v0pnsub; return(OK); case BSIM3v0_MOD_PNPEAK: value->rValue = model->BSIM3v0pnpeak; return(OK); case BSIM3v0_MOD_PNGATE: value->rValue = model->BSIM3v0pngate; return(OK); case BSIM3v0_MOD_PGAMMA1: value->rValue = model->BSIM3v0pgamma1; return(OK); case BSIM3v0_MOD_PGAMMA2: value->rValue = model->BSIM3v0pgamma2; return(OK); case BSIM3v0_MOD_PVBX: value->rValue = model->BSIM3v0pvbx; return(OK); case BSIM3v0_MOD_PVBM: value->rValue = model->BSIM3v0pvbm; return(OK); case BSIM3v0_MOD_PXT: value->rValue = model->BSIM3v0pxt; return(OK); case BSIM3v0_MOD_PK1: value->rValue = model->BSIM3v0pk1; return(OK); case BSIM3v0_MOD_PKT1: value->rValue = model->BSIM3v0pkt1; return(OK); case BSIM3v0_MOD_PKT1L: value->rValue = model->BSIM3v0pkt1l; return(OK); case BSIM3v0_MOD_PKT2 : value->rValue = model->BSIM3v0pkt2; return(OK); case BSIM3v0_MOD_PK2 : value->rValue = model->BSIM3v0pk2; return(OK); case BSIM3v0_MOD_PK3: value->rValue = model->BSIM3v0pk3; return(OK); case BSIM3v0_MOD_PK3B: value->rValue = model->BSIM3v0pk3b; return(OK); case BSIM3v0_MOD_PW0: value->rValue = model->BSIM3v0pw0; return(OK); case BSIM3v0_MOD_PNLX: value->rValue = model->BSIM3v0pnlx; return(OK); case BSIM3v0_MOD_PDVT0 : value->rValue = model->BSIM3v0pdvt0; return(OK); case BSIM3v0_MOD_PDVT1 : value->rValue = model->BSIM3v0pdvt1; return(OK); case BSIM3v0_MOD_PDVT2 : value->rValue = model->BSIM3v0pdvt2; return(OK); case BSIM3v0_MOD_PDVT0W : value->rValue = model->BSIM3v0pdvt0w; return(OK); case BSIM3v0_MOD_PDVT1W : value->rValue = model->BSIM3v0pdvt1w; return(OK); case BSIM3v0_MOD_PDVT2W : value->rValue = model->BSIM3v0pdvt2w; return(OK); case BSIM3v0_MOD_PDROUT : value->rValue = model->BSIM3v0pdrout; return(OK); case BSIM3v0_MOD_PDSUB : value->rValue = model->BSIM3v0pdsub; return(OK); case BSIM3v0_MOD_PVTH0: value->rValue = model->BSIM3v0pvth0; return(OK); case BSIM3v0_MOD_PUA: value->rValue = model->BSIM3v0pua; return(OK); case BSIM3v0_MOD_PUA1: value->rValue = model->BSIM3v0pua1; return(OK); case BSIM3v0_MOD_PUB: value->rValue = model->BSIM3v0pub; return(OK); case BSIM3v0_MOD_PUB1: value->rValue = model->BSIM3v0pub1; return(OK); case BSIM3v0_MOD_PUC: value->rValue = model->BSIM3v0puc; return(OK); case BSIM3v0_MOD_PUC1: value->rValue = model->BSIM3v0puc1; return(OK); case BSIM3v0_MOD_PU0: value->rValue = model->BSIM3v0pu0; return(OK); case BSIM3v0_MOD_PUTE: value->rValue = model->BSIM3v0pute; return(OK); case BSIM3v0_MOD_PVOFF: value->rValue = model->BSIM3v0pvoff; return(OK); case BSIM3v0_MOD_PDELTA: value->rValue = model->BSIM3v0pdelta; return(OK); case BSIM3v0_MOD_PRDSW: value->rValue = model->BSIM3v0prdsw; return(OK); case BSIM3v0_MOD_PPRWB: value->rValue = model->BSIM3v0pprwb; return(OK); case BSIM3v0_MOD_PPRWG: value->rValue = model->BSIM3v0pprwg; return(OK); case BSIM3v0_MOD_PPRT: value->rValue = model->BSIM3v0pprt; return(OK); case BSIM3v0_MOD_PETA0: value->rValue = model->BSIM3v0peta0; return(OK); case BSIM3v0_MOD_PETAB: value->rValue = model->BSIM3v0petab; return(OK); case BSIM3v0_MOD_PPCLM: value->rValue = model->BSIM3v0ppclm; return(OK); case BSIM3v0_MOD_PPDIBL1: value->rValue = model->BSIM3v0ppdibl1; return(OK); case BSIM3v0_MOD_PPDIBL2: value->rValue = model->BSIM3v0ppdibl2; return(OK); case BSIM3v0_MOD_PPDIBLB: value->rValue = model->BSIM3v0ppdiblb; return(OK); case BSIM3v0_MOD_PPSCBE1: value->rValue = model->BSIM3v0ppscbe1; return(OK); case BSIM3v0_MOD_PPSCBE2: value->rValue = model->BSIM3v0ppscbe2; return(OK); case BSIM3v0_MOD_PPVAG: value->rValue = model->BSIM3v0ppvag; return(OK); case BSIM3v0_MOD_PWR: value->rValue = model->BSIM3v0pwr; return(OK); case BSIM3v0_MOD_PDWG: value->rValue = model->BSIM3v0pdwg; return(OK); case BSIM3v0_MOD_PDWB: value->rValue = model->BSIM3v0pdwb; return(OK); case BSIM3v0_MOD_PB0: value->rValue = model->BSIM3v0pb0; return(OK); case BSIM3v0_MOD_PB1: value->rValue = model->BSIM3v0pb1; return(OK); case BSIM3v0_MOD_PALPHA0: value->rValue = model->BSIM3v0palpha0; return(OK); case BSIM3v0_MOD_PBETA0: value->rValue = model->BSIM3v0pbeta0; return(OK); case BSIM3v0_MOD_PELM: value->rValue = model->BSIM3v0pelm; return(OK); case BSIM3v0_MOD_PCGSL: value->rValue = model->BSIM3v0pcgsl; return(OK); case BSIM3v0_MOD_PCGDL: value->rValue = model->BSIM3v0pcgdl; return(OK); case BSIM3v0_MOD_PCKAPPA: value->rValue = model->BSIM3v0pckappa; return(OK); case BSIM3v0_MOD_PCF: value->rValue = model->BSIM3v0pcf; return(OK); case BSIM3v0_MOD_PCLC: value->rValue = model->BSIM3v0pclc; return(OK); case BSIM3v0_MOD_PCLE: value->rValue = model->BSIM3v0pcle; return(OK); case BSIM3v0_MOD_TNOM : value->rValue = model->BSIM3v0tnom; return(OK); case BSIM3v0_MOD_CGSO: value->rValue = model->BSIM3v0cgso; return(OK); case BSIM3v0_MOD_CGDO: value->rValue = model->BSIM3v0cgdo; return(OK); case BSIM3v0_MOD_CGBO: value->rValue = model->BSIM3v0cgbo; return(OK); case BSIM3v0_MOD_XPART: value->rValue = model->BSIM3v0xpart; return(OK); case BSIM3v0_MOD_RSH: value->rValue = model->BSIM3v0sheetResistance; return(OK); case BSIM3v0_MOD_JS: value->rValue = model->BSIM3v0jctSatCurDensity; return(OK); case BSIM3v0_MOD_PB: value->rValue = model->BSIM3v0bulkJctPotential; return(OK); case BSIM3v0_MOD_MJ: value->rValue = model->BSIM3v0bulkJctBotGradingCoeff; return(OK); case BSIM3v0_MOD_PBSW: value->rValue = model->BSIM3v0sidewallJctPotential; return(OK); case BSIM3v0_MOD_MJSW: value->rValue = model->BSIM3v0bulkJctSideGradingCoeff; return(OK); case BSIM3v0_MOD_CJ: value->rValue = model->BSIM3v0unitAreaJctCap; return(OK); case BSIM3v0_MOD_CJSW: value->rValue = model->BSIM3v0unitLengthSidewallJctCap; return(OK); case BSIM3v0_MOD_LINT: value->rValue = model->BSIM3v0Lint; return(OK); case BSIM3v0_MOD_LL: value->rValue = model->BSIM3v0Ll; return(OK); case BSIM3v0_MOD_LLN: value->rValue = model->BSIM3v0Lln; return(OK); case BSIM3v0_MOD_LW: value->rValue = model->BSIM3v0Lw; return(OK); case BSIM3v0_MOD_LWN: value->rValue = model->BSIM3v0Lwn; return(OK); case BSIM3v0_MOD_LWL: value->rValue = model->BSIM3v0Lwl; return(OK); case BSIM3v0_MOD_LMIN: value->rValue = model->BSIM3v0Lmin; return(OK); case BSIM3v0_MOD_LMAX: value->rValue = model->BSIM3v0Lmax; return(OK); case BSIM3v0_MOD_WINT: value->rValue = model->BSIM3v0Wint; return(OK); case BSIM3v0_MOD_WL: value->rValue = model->BSIM3v0Wl; return(OK); case BSIM3v0_MOD_WLN: value->rValue = model->BSIM3v0Wln; return(OK); case BSIM3v0_MOD_WW: value->rValue = model->BSIM3v0Ww; return(OK); case BSIM3v0_MOD_WWN: value->rValue = model->BSIM3v0Wwn; return(OK); case BSIM3v0_MOD_WWL: value->rValue = model->BSIM3v0Wwl; return(OK); case BSIM3v0_MOD_WMIN: value->rValue = model->BSIM3v0Wmin; return(OK); case BSIM3v0_MOD_WMAX: value->rValue = model->BSIM3v0Wmax; return(OK); case BSIM3v0_MOD_NOIA: value->rValue = model->BSIM3v0oxideTrapDensityA; return(OK); case BSIM3v0_MOD_NOIB: value->rValue = model->BSIM3v0oxideTrapDensityB; return(OK); case BSIM3v0_MOD_NOIC: value->rValue = model->BSIM3v0oxideTrapDensityC; return(OK); case BSIM3v0_MOD_EM: value->rValue = model->BSIM3v0em; return(OK); case BSIM3v0_MOD_EF: value->rValue = model->BSIM3v0ef; return(OK); case BSIM3v0_MOD_AF: value->rValue = model->BSIM3v0af; return(OK); case BSIM3v0_MOD_KF: value->rValue = model->BSIM3v0kf; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim3v0/b3v0trunc.c0000644000175000017500000000220013546075722022432 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1995 Min-Chie Jeng and Mansun Chan. File: b3v0trunc.c **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3v0def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3v0trunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { BSIM3v0model *model = (BSIM3v0model*)inModel; BSIM3v0instance *here; #ifdef STEPDEBUG double debugtemp; #endif /* STEPDEBUG */ for (; model != NULL; model = BSIM3v0nextModel(model)) { for (here = BSIM3v0instances(model); here != NULL; here = BSIM3v0nextInstance(here)) { #ifdef STEPDEBUG debugtemp = *timeStep; #endif /* STEPDEBUG */ CKTterr(here->BSIM3v0qb,ckt,timeStep); CKTterr(here->BSIM3v0qg,ckt,timeStep); CKTterr(here->BSIM3v0qd,ckt,timeStep); #ifdef STEPDEBUG if(debugtemp != *timeStep) { printf("device %s reduces step from %g to %g\n", here->BSIM3v0name,debugtemp,*timeStep); } #endif /* STEPDEBUG */ } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v0/b3v0acld.c0000644000175000017500000001570113546075722022214 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1995 Min-Chie Jeng and Mansun Chan. File: b3v0acld.c **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3v0def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3v0acLoad(GENmodel *inModel, CKTcircuit *ckt) { BSIM3v0model *model = (BSIM3v0model*)inModel; BSIM3v0instance *here; double xcggb, xcgdb, xcgsb, xcbgb, xcbdb, xcbsb, xcddb, xcssb, xcdgb; double gdpr, gspr, gds, gbd, gbs, capbd, capbs, xcsgb, xcdsb, xcsdb; double cggb, cgdb, cgsb, cbgb, cbdb, cbsb, cddb, cdgb, cdsb, omega; double GSoverlapCap, GDoverlapCap, GBoverlapCap, FwdSum, RevSum, Gm, Gmbs; double dxpart, sxpart, cqgb, cqdb, cqsb, cqbb, xcqgb, xcqdb, xcqsb, xcqbb; double m; omega = ckt->CKTomega; for (; model != NULL; model = BSIM3v0nextModel(model)) { for (here = BSIM3v0instances(model); here!= NULL; here = BSIM3v0nextInstance(here)) { if (here->BSIM3v0mode >= 0) { Gm = here->BSIM3v0gm; Gmbs = here->BSIM3v0gmbs; FwdSum = Gm + Gmbs; RevSum = 0.0; cggb = here->BSIM3v0cggb; cgsb = here->BSIM3v0cgsb; cgdb = here->BSIM3v0cgdb; cbgb = here->BSIM3v0cbgb; cbsb = here->BSIM3v0cbsb; cbdb = here->BSIM3v0cbdb; cdgb = here->BSIM3v0cdgb; cdsb = here->BSIM3v0cdsb; cddb = here->BSIM3v0cddb; cqgb = here->BSIM3v0cqgb; cqdb = here->BSIM3v0cqdb; cqsb = here->BSIM3v0cqsb; cqbb = here->BSIM3v0cqbb; sxpart = 0.6; dxpart = 0.4; } else { Gm = -here->BSIM3v0gm; Gmbs = -here->BSIM3v0gmbs; FwdSum = 0.0; RevSum = -Gm - Gmbs; cggb = here->BSIM3v0cggb; cgsb = here->BSIM3v0cgdb; cgdb = here->BSIM3v0cgsb; cbgb = here->BSIM3v0cbgb; cbsb = here->BSIM3v0cbdb; cbdb = here->BSIM3v0cbsb; cdgb = -(here->BSIM3v0cdgb + cggb + cbgb); cdsb = -(here->BSIM3v0cddb + cgsb + cbsb); cddb = -(here->BSIM3v0cdsb + cgdb + cbdb); cqgb = here->BSIM3v0cqgb; cqdb = here->BSIM3v0cqsb; cqsb = here->BSIM3v0cqdb; cqbb = here->BSIM3v0cqbb; sxpart = 0.4; dxpart = 0.6; } gdpr=here->BSIM3v0drainConductance; gspr=here->BSIM3v0sourceConductance; gds= here->BSIM3v0gds; gbd= here->BSIM3v0gbd; gbs= here->BSIM3v0gbs; capbd= here->BSIM3v0capbd; capbs= here->BSIM3v0capbs; GSoverlapCap = here->BSIM3v0cgso; GDoverlapCap = here->BSIM3v0cgdo; GBoverlapCap = here->pParam->BSIM3v0cgbo; xcdgb = (cdgb - GDoverlapCap) * omega; xcddb = (cddb + capbd + GDoverlapCap) * omega; xcdsb = cdsb * omega; xcsgb = -(cggb + cbgb + cdgb + GSoverlapCap) * omega; xcsdb = -(cgdb + cbdb + cddb) * omega; xcssb = (capbs + GSoverlapCap - (cgsb + cbsb + cdsb)) * omega; xcggb = (cggb + GDoverlapCap + GSoverlapCap + GBoverlapCap) * omega; xcgdb = (cgdb - GDoverlapCap ) * omega; xcgsb = (cgsb - GSoverlapCap) * omega; xcbgb = (cbgb - GBoverlapCap) * omega; xcbdb = (cbdb - capbd ) * omega; xcbsb = (cbsb - capbs ) * omega; xcqgb = cqgb * omega; xcqdb = cqdb * omega; xcqsb = cqsb * omega; xcqbb = cqbb * omega; m = here->BSIM3v0m; *(here->BSIM3v0GgPtr +1) += m * xcggb; *(here->BSIM3v0BbPtr +1) -= m * (xcbgb + xcbdb + xcbsb); *(here->BSIM3v0DPdpPtr +1) += m * xcddb; *(here->BSIM3v0SPspPtr +1) += m * xcssb; *(here->BSIM3v0GbPtr +1) -= m * (xcggb + xcgdb + xcgsb); *(here->BSIM3v0GdpPtr +1) += m * xcgdb; *(here->BSIM3v0GspPtr +1) += m * xcgsb; *(here->BSIM3v0BgPtr +1) += m * xcbgb; *(here->BSIM3v0BdpPtr +1) += m * xcbdb; *(here->BSIM3v0BspPtr +1) += m * xcbsb; *(here->BSIM3v0DPgPtr +1) += m * xcdgb; *(here->BSIM3v0DPbPtr +1) -= m * (xcdgb + xcddb + xcdsb); *(here->BSIM3v0DPspPtr +1) += m * xcdsb; *(here->BSIM3v0SPgPtr +1) += m * xcsgb; *(here->BSIM3v0SPbPtr +1) -= m * (xcsgb + xcsdb + xcssb); *(here->BSIM3v0SPdpPtr +1) += m * xcsdb; *(here->BSIM3v0QqPtr +1) += m * omega; *(here->BSIM3v0QgPtr +1) -= m * xcqgb; *(here->BSIM3v0QdpPtr +1) -= m * xcqdb; *(here->BSIM3v0QspPtr +1) -= m * xcqsb; *(here->BSIM3v0QbPtr +1) -= m * xcqbb; *(here->BSIM3v0DdPtr) += m * gdpr; *(here->BSIM3v0SsPtr) += m * gspr; *(here->BSIM3v0BbPtr) += m * (gbd + gbs); *(here->BSIM3v0DPdpPtr) += m * (gdpr + gds + gbd + RevSum + dxpart*here->BSIM3v0gtd); *(here->BSIM3v0SPspPtr) += m * (gspr + gds + gbs + FwdSum + sxpart*here->BSIM3v0gts); *(here->BSIM3v0DdpPtr) -= m * gdpr; *(here->BSIM3v0SspPtr) -= m * gspr; *(here->BSIM3v0BdpPtr) -= m * gbd; *(here->BSIM3v0BspPtr) -= m * gbs; *(here->BSIM3v0DPdPtr) -= m * gdpr; *(here->BSIM3v0DPgPtr) += m * (Gm + dxpart * here->BSIM3v0gtg); *(here->BSIM3v0DPbPtr) -= m * (gbd - Gmbs - dxpart * here->BSIM3v0gtb); *(here->BSIM3v0DPspPtr) -= m * (gds + FwdSum - dxpart * here->BSIM3v0gts); *(here->BSIM3v0SPgPtr) -= m * (Gm - sxpart * here->BSIM3v0gtg); *(here->BSIM3v0SPsPtr) -= m * gspr; *(here->BSIM3v0SPbPtr) -= m * (gbs + Gmbs - sxpart * here->BSIM3v0gtg); *(here->BSIM3v0SPdpPtr) -= m * (gds + RevSum - sxpart * here->BSIM3v0gtd); *(here->BSIM3v0GgPtr) -= m * here->BSIM3v0gtg; *(here->BSIM3v0GbPtr) -= m * here->BSIM3v0gtb; *(here->BSIM3v0GdpPtr) -= m * here->BSIM3v0gtd; *(here->BSIM3v0GspPtr) -= m * here->BSIM3v0gts; *(here->BSIM3v0QqPtr) += m * here->BSIM3v0gtau; *(here->BSIM3v0DPqPtr) += m * (dxpart * here->BSIM3v0gtau); *(here->BSIM3v0SPqPtr) += m * (sxpart * here->BSIM3v0gtau); *(here->BSIM3v0GqPtr) -= m * here->BSIM3v0gtau; *(here->BSIM3v0QgPtr) += m * here->BSIM3v0gtg; *(here->BSIM3v0QdpPtr) += m * here->BSIM3v0gtd; *(here->BSIM3v0QspPtr) += m * here->BSIM3v0gts; *(here->BSIM3v0QbPtr) += m * here->BSIM3v0gtb; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v0/b3v0temp.c0000644000175000017500000010317113546075722022255 0ustar carstencarsten/*********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1995 Min-Chie Jeng and Mansun Chan. File: b3temp.c **********/ /* Lmin, Lmax, Wmin, Wmax */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "bsim3v0def.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define Kb 1.3806226e-23 #define KboQ 8.617087e-5 /* Kb / q where q = 1.60219e-19 */ #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define PI 3.141592654 #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define Charge_q 1.60219e-19 /* ARGSUSED */ int BSIM3v0temp(GENmodel *inModel, CKTcircuit *ckt) { BSIM3v0model *model = (BSIM3v0model*) inModel; BSIM3v0instance *here; struct bsim3v0SizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam = NULL; double tmp1, tmp2, Eg, ni, T0, T1, T2, T3, Ldrn, Wdrn; double Temp, TRatio, Inv_L, Inv_W, Inv_LW, Vtm0, Tnom; int Size_Not_Found; /* loop through all the BSIM3v0 device models */ for (; model != NULL; model = BSIM3v0nextModel(model)) { Temp = ckt->CKTtemp; if (model->BSIM3v0bulkJctPotential < 0.1) model->BSIM3v0bulkJctPotential = 0.1; if (model->BSIM3v0sidewallJctPotential < 0.1) model->BSIM3v0sidewallJctPotential = 0.1; struct bsim3v0SizeDependParam *p = model->pSizeDependParamKnot; while (p) { struct bsim3v0SizeDependParam *next_p = p->pNext; FREE(p); p = next_p; } model->pSizeDependParamKnot = NULL; pLastKnot = NULL; Tnom = model->BSIM3v0tnom; TRatio = Temp / Tnom; /* loop through all the instances of the model */ for (here = BSIM3v0instances(model); here != NULL; here=BSIM3v0nextInstance(here)) { pSizeDependParamKnot = model->pSizeDependParamKnot; Size_Not_Found = 1; while ((pSizeDependParamKnot != NULL) && Size_Not_Found) { if ((here->BSIM3v0l == pSizeDependParamKnot->Length) && (here->BSIM3v0w == pSizeDependParamKnot->Width)) { Size_Not_Found = 0; here->pParam = pSizeDependParamKnot; } else { pLastKnot = pSizeDependParamKnot; pSizeDependParamKnot = pSizeDependParamKnot->pNext; } } if (Size_Not_Found) { pParam = TMALLOC(struct bsim3v0SizeDependParam, 1); if (pLastKnot == NULL) model->pSizeDependParamKnot = pParam; else pLastKnot->pNext = pParam; pParam->pNext = NULL; here->pParam = pParam; Ldrn = here->BSIM3v0l; Wdrn = here->BSIM3v0w; T0 = pow(Ldrn, model->BSIM3v0Lln); T1 = pow(Wdrn, model->BSIM3v0Lwn); tmp1 = model->BSIM3v0Ll / T0 + model->BSIM3v0Lw / T1 + model->BSIM3v0Lwl / (T0 * T1); pParam->BSIM3v0dl = model->BSIM3v0Lint + tmp1; pParam->BSIM3v0dlc = model->BSIM3v0dlc + tmp1; T2 = pow(Ldrn, model->BSIM3v0Wln); T3 = pow(Wdrn, model->BSIM3v0Wwn); tmp2 = model->BSIM3v0Wl / T2 + model->BSIM3v0Ww / T3 + model->BSIM3v0Wwl / (T2 * T3); pParam->BSIM3v0dw = model->BSIM3v0Wint + tmp2; pParam->BSIM3v0dwc = model->BSIM3v0dwc + tmp2; pParam->BSIM3v0leff = here->BSIM3v0l - 2.0 * pParam->BSIM3v0dl; if (pParam->BSIM3v0leff <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM3v0: mosfet %s, model %s: Effective channel length <= 0", model->BSIM3v0modName, here->BSIM3v0name); return(E_BADPARM); } pParam->BSIM3v0weff = here->BSIM3v0w - 2.0 * pParam->BSIM3v0dw; if (pParam->BSIM3v0weff <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM3v0: mosfet %s, model %s: Effective channel width <= 0", model->BSIM3v0modName, here->BSIM3v0name); return(E_BADPARM); } pParam->BSIM3v0leffCV = here->BSIM3v0l - 2.0 * pParam->BSIM3v0dlc; if (pParam->BSIM3v0leffCV <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM3v0: mosfet %s, model %s: Effective channel length for C-V <= 0", model->BSIM3v0modName, here->BSIM3v0name); return(E_BADPARM); } pParam->BSIM3v0weffCV = here->BSIM3v0w - 2.0 * pParam->BSIM3v0dwc; if (pParam->BSIM3v0weffCV <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM3v0: mosfet %s, model %s: Effective channel width for C-V <= 0", model->BSIM3v0modName, here->BSIM3v0name); return(E_BADPARM); } model->BSIM3v0vcrit = CONSTvt0 * log(CONSTvt0 / (CONSTroot2 * 1.0e-14)); model->BSIM3v0factor1 = sqrt(EPSSI / EPSOX * model->BSIM3v0tox); if (model->BSIM3v0binUnit == 1) { Inv_L = 1.0e-6 / pParam->BSIM3v0leff; Inv_W = 1.0e-6 / pParam->BSIM3v0weff; Inv_LW = 1.0e-12 / (pParam->BSIM3v0leff * pParam->BSIM3v0weff); } else { Inv_L = 1.0 / pParam->BSIM3v0leff; Inv_W = 1.0 / pParam->BSIM3v0weff; Inv_LW = 1.0 / (pParam->BSIM3v0leff * pParam->BSIM3v0weff); } pParam->BSIM3v0cdsc = model->BSIM3v0cdsc + model->BSIM3v0lcdsc * Inv_L + model->BSIM3v0wcdsc * Inv_W + model->BSIM3v0pcdsc * Inv_LW; pParam->BSIM3v0cdscb = model->BSIM3v0cdscb + model->BSIM3v0lcdscb * Inv_L + model->BSIM3v0wcdscb * Inv_W + model->BSIM3v0pcdscb * Inv_LW; pParam->BSIM3v0cdscd = model->BSIM3v0cdscd + model->BSIM3v0lcdscd * Inv_L + model->BSIM3v0wcdscd * Inv_W + model->BSIM3v0pcdscd * Inv_LW; pParam->BSIM3v0cit = model->BSIM3v0cit + model->BSIM3v0lcit * Inv_L + model->BSIM3v0wcit * Inv_W + model->BSIM3v0pcit * Inv_LW; pParam->BSIM3v0nfactor = model->BSIM3v0nfactor + model->BSIM3v0lnfactor * Inv_L + model->BSIM3v0wnfactor * Inv_W + model->BSIM3v0pnfactor * Inv_LW; pParam->BSIM3v0xj = model->BSIM3v0xj + model->BSIM3v0lxj * Inv_L + model->BSIM3v0wxj * Inv_W + model->BSIM3v0pxj * Inv_LW; pParam->BSIM3v0vsat = model->BSIM3v0vsat + model->BSIM3v0lvsat * Inv_L + model->BSIM3v0wvsat * Inv_W + model->BSIM3v0pvsat * Inv_LW; pParam->BSIM3v0at = model->BSIM3v0at + model->BSIM3v0lat * Inv_L + model->BSIM3v0wat * Inv_W + model->BSIM3v0pat * Inv_LW; pParam->BSIM3v0a0 = model->BSIM3v0a0 + model->BSIM3v0la0 * Inv_L + model->BSIM3v0wa0 * Inv_W + model->BSIM3v0pa0 * Inv_LW; pParam->BSIM3v0ags = model->BSIM3v0ags + model->BSIM3v0lags * Inv_L + model->BSIM3v0wags * Inv_W + model->BSIM3v0pags * Inv_LW; pParam->BSIM3v0a1 = model->BSIM3v0a1 + model->BSIM3v0la1 * Inv_L + model->BSIM3v0wa1 * Inv_W + model->BSIM3v0pa1 * Inv_LW; pParam->BSIM3v0a2 = model->BSIM3v0a2 + model->BSIM3v0la2 * Inv_L + model->BSIM3v0wa2 * Inv_W + model->BSIM3v0pa2 * Inv_LW; pParam->BSIM3v0keta = model->BSIM3v0keta + model->BSIM3v0lketa * Inv_L + model->BSIM3v0wketa * Inv_W + model->BSIM3v0pketa * Inv_LW; pParam->BSIM3v0nsub = model->BSIM3v0nsub + model->BSIM3v0lnsub * Inv_L + model->BSIM3v0wnsub * Inv_W + model->BSIM3v0pnsub * Inv_LW; pParam->BSIM3v0npeak = model->BSIM3v0npeak + model->BSIM3v0lnpeak * Inv_L + model->BSIM3v0wnpeak * Inv_W + model->BSIM3v0pnpeak * Inv_LW; pParam->BSIM3v0ngate = model->BSIM3v0ngate + model->BSIM3v0lngate * Inv_L + model->BSIM3v0wngate * Inv_W + model->BSIM3v0pngate * Inv_LW; pParam->BSIM3v0gamma1 = model->BSIM3v0gamma1 + model->BSIM3v0lgamma1 * Inv_L + model->BSIM3v0wgamma1 * Inv_W + model->BSIM3v0pgamma1 * Inv_LW; pParam->BSIM3v0gamma2 = model->BSIM3v0gamma2 + model->BSIM3v0lgamma2 * Inv_L + model->BSIM3v0wgamma2 * Inv_W + model->BSIM3v0pgamma2 * Inv_LW; pParam->BSIM3v0vbx = model->BSIM3v0vbx + model->BSIM3v0lvbx * Inv_L + model->BSIM3v0wvbx * Inv_W + model->BSIM3v0pvbx * Inv_LW; pParam->BSIM3v0vbm = model->BSIM3v0vbm + model->BSIM3v0lvbm * Inv_L + model->BSIM3v0wvbm * Inv_W + model->BSIM3v0pvbm * Inv_LW; pParam->BSIM3v0xt = model->BSIM3v0xt + model->BSIM3v0lxt * Inv_L + model->BSIM3v0wxt * Inv_W + model->BSIM3v0pxt * Inv_LW; pParam->BSIM3v0k1 = model->BSIM3v0k1 + model->BSIM3v0lk1 * Inv_L + model->BSIM3v0wk1 * Inv_W + model->BSIM3v0pk1 * Inv_LW; pParam->BSIM3v0kt1 = model->BSIM3v0kt1 + model->BSIM3v0lkt1 * Inv_L + model->BSIM3v0wkt1 * Inv_W + model->BSIM3v0pkt1 * Inv_LW; pParam->BSIM3v0kt1l = model->BSIM3v0kt1l + model->BSIM3v0lkt1l * Inv_L + model->BSIM3v0wkt1l * Inv_W + model->BSIM3v0pkt1l * Inv_LW; pParam->BSIM3v0k2 = model->BSIM3v0k2 + model->BSIM3v0lk2 * Inv_L + model->BSIM3v0wk2 * Inv_W + model->BSIM3v0pk2 * Inv_LW; pParam->BSIM3v0kt2 = model->BSIM3v0kt2 + model->BSIM3v0lkt2 * Inv_L + model->BSIM3v0wkt2 * Inv_W + model->BSIM3v0pkt2 * Inv_LW; pParam->BSIM3v0k3 = model->BSIM3v0k3 + model->BSIM3v0lk3 * Inv_L + model->BSIM3v0wk3 * Inv_W + model->BSIM3v0pk3 * Inv_LW; pParam->BSIM3v0k3b = model->BSIM3v0k3b + model->BSIM3v0lk3b * Inv_L + model->BSIM3v0wk3b * Inv_W + model->BSIM3v0pk3b * Inv_LW; pParam->BSIM3v0w0 = model->BSIM3v0w0 + model->BSIM3v0lw0 * Inv_L + model->BSIM3v0ww0 * Inv_W + model->BSIM3v0pw0 * Inv_LW; pParam->BSIM3v0nlx = model->BSIM3v0nlx + model->BSIM3v0lnlx * Inv_L + model->BSIM3v0wnlx * Inv_W + model->BSIM3v0pnlx * Inv_LW; pParam->BSIM3v0dvt0 = model->BSIM3v0dvt0 + model->BSIM3v0ldvt0 * Inv_L + model->BSIM3v0wdvt0 * Inv_W + model->BSIM3v0pdvt0 * Inv_LW; pParam->BSIM3v0dvt1 = model->BSIM3v0dvt1 + model->BSIM3v0ldvt1 * Inv_L + model->BSIM3v0wdvt1 * Inv_W + model->BSIM3v0pdvt1 * Inv_LW; pParam->BSIM3v0dvt2 = model->BSIM3v0dvt2 + model->BSIM3v0ldvt2 * Inv_L + model->BSIM3v0wdvt2 * Inv_W + model->BSIM3v0pdvt2 * Inv_LW; pParam->BSIM3v0dvt0w = model->BSIM3v0dvt0w + model->BSIM3v0ldvt0w * Inv_L + model->BSIM3v0wdvt0w * Inv_W + model->BSIM3v0pdvt0w * Inv_LW; pParam->BSIM3v0dvt1w = model->BSIM3v0dvt1w + model->BSIM3v0ldvt1w * Inv_L + model->BSIM3v0wdvt1w * Inv_W + model->BSIM3v0pdvt1w * Inv_LW; pParam->BSIM3v0dvt2w = model->BSIM3v0dvt2w + model->BSIM3v0ldvt2w * Inv_L + model->BSIM3v0wdvt2w * Inv_W + model->BSIM3v0pdvt2w * Inv_LW; pParam->BSIM3v0drout = model->BSIM3v0drout + model->BSIM3v0ldrout * Inv_L + model->BSIM3v0wdrout * Inv_W + model->BSIM3v0pdrout * Inv_LW; pParam->BSIM3v0dsub = model->BSIM3v0dsub + model->BSIM3v0ldsub * Inv_L + model->BSIM3v0wdsub * Inv_W + model->BSIM3v0pdsub * Inv_LW; pParam->BSIM3v0vth0 = model->BSIM3v0vth0 + model->BSIM3v0lvth0 * Inv_L + model->BSIM3v0wvth0 * Inv_W + model->BSIM3v0pvth0 * Inv_LW; pParam->BSIM3v0ua = model->BSIM3v0ua + model->BSIM3v0lua * Inv_L + model->BSIM3v0wua * Inv_W + model->BSIM3v0pua * Inv_LW; pParam->BSIM3v0ua1 = model->BSIM3v0ua1 + model->BSIM3v0lua1 * Inv_L + model->BSIM3v0wua1 * Inv_W + model->BSIM3v0pua1 * Inv_LW; pParam->BSIM3v0ub = model->BSIM3v0ub + model->BSIM3v0lub * Inv_L + model->BSIM3v0wub * Inv_W + model->BSIM3v0pub * Inv_LW; pParam->BSIM3v0ub1 = model->BSIM3v0ub1 + model->BSIM3v0lub1 * Inv_L + model->BSIM3v0wub1 * Inv_W + model->BSIM3v0pub1 * Inv_LW; pParam->BSIM3v0uc = model->BSIM3v0uc + model->BSIM3v0luc * Inv_L + model->BSIM3v0wuc * Inv_W + model->BSIM3v0puc * Inv_LW; pParam->BSIM3v0uc1 = model->BSIM3v0uc1 + model->BSIM3v0luc1 * Inv_L + model->BSIM3v0wuc1 * Inv_W + model->BSIM3v0puc1 * Inv_LW; pParam->BSIM3v0u0 = model->BSIM3v0u0 + model->BSIM3v0lu0 * Inv_L + model->BSIM3v0wu0 * Inv_W + model->BSIM3v0pu0 * Inv_LW; pParam->BSIM3v0ute = model->BSIM3v0ute + model->BSIM3v0lute * Inv_L + model->BSIM3v0wute * Inv_W + model->BSIM3v0pute * Inv_LW; pParam->BSIM3v0voff = model->BSIM3v0voff + model->BSIM3v0lvoff * Inv_L + model->BSIM3v0wvoff * Inv_W + model->BSIM3v0pvoff * Inv_LW; pParam->BSIM3v0delta = model->BSIM3v0delta + model->BSIM3v0ldelta * Inv_L + model->BSIM3v0wdelta * Inv_W + model->BSIM3v0pdelta * Inv_LW; pParam->BSIM3v0rdsw = model->BSIM3v0rdsw + model->BSIM3v0lrdsw * Inv_L + model->BSIM3v0wrdsw * Inv_W + model->BSIM3v0prdsw * Inv_LW; pParam->BSIM3v0prwg = model->BSIM3v0prwg + model->BSIM3v0lprwg * Inv_L + model->BSIM3v0wprwg * Inv_W + model->BSIM3v0pprwg * Inv_LW; pParam->BSIM3v0prwb = model->BSIM3v0prwb + model->BSIM3v0lprwb * Inv_L + model->BSIM3v0wprwb * Inv_W + model->BSIM3v0pprwb * Inv_LW; pParam->BSIM3v0prt = model->BSIM3v0prt + model->BSIM3v0lprt * Inv_L + model->BSIM3v0wprt * Inv_W + model->BSIM3v0pprt * Inv_LW; pParam->BSIM3v0eta0 = model->BSIM3v0eta0 + model->BSIM3v0leta0 * Inv_L + model->BSIM3v0weta0 * Inv_W + model->BSIM3v0peta0 * Inv_LW; pParam->BSIM3v0etab = model->BSIM3v0etab + model->BSIM3v0letab * Inv_L + model->BSIM3v0wetab * Inv_W + model->BSIM3v0petab * Inv_LW; pParam->BSIM3v0pclm = model->BSIM3v0pclm + model->BSIM3v0lpclm * Inv_L + model->BSIM3v0wpclm * Inv_W + model->BSIM3v0ppclm * Inv_LW; pParam->BSIM3v0pdibl1 = model->BSIM3v0pdibl1 + model->BSIM3v0lpdibl1 * Inv_L + model->BSIM3v0wpdibl1 * Inv_W + model->BSIM3v0ppdibl1 * Inv_LW; pParam->BSIM3v0pdibl2 = model->BSIM3v0pdibl2 + model->BSIM3v0lpdibl2 * Inv_L + model->BSIM3v0wpdibl2 * Inv_W + model->BSIM3v0ppdibl2 * Inv_LW; pParam->BSIM3v0pdiblb = model->BSIM3v0pdiblb + model->BSIM3v0lpdiblb * Inv_L + model->BSIM3v0wpdiblb * Inv_W + model->BSIM3v0ppdiblb * Inv_LW; pParam->BSIM3v0pscbe1 = model->BSIM3v0pscbe1 + model->BSIM3v0lpscbe1 * Inv_L + model->BSIM3v0wpscbe1 * Inv_W + model->BSIM3v0ppscbe1 * Inv_LW; pParam->BSIM3v0pscbe2 = model->BSIM3v0pscbe2 + model->BSIM3v0lpscbe2 * Inv_L + model->BSIM3v0wpscbe2 * Inv_W + model->BSIM3v0ppscbe2 * Inv_LW; pParam->BSIM3v0pvag = model->BSIM3v0pvag + model->BSIM3v0lpvag * Inv_L + model->BSIM3v0wpvag * Inv_W + model->BSIM3v0ppvag * Inv_LW; pParam->BSIM3v0wr = model->BSIM3v0wr + model->BSIM3v0lwr * Inv_L + model->BSIM3v0wwr * Inv_W + model->BSIM3v0pwr * Inv_LW; pParam->BSIM3v0dwg = model->BSIM3v0dwg + model->BSIM3v0ldwg * Inv_L + model->BSIM3v0wdwg * Inv_W + model->BSIM3v0pdwg * Inv_LW; pParam->BSIM3v0dwb = model->BSIM3v0dwb + model->BSIM3v0ldwb * Inv_L + model->BSIM3v0wdwb * Inv_W + model->BSIM3v0pdwb * Inv_LW; pParam->BSIM3v0b0 = model->BSIM3v0b0 + model->BSIM3v0lb0 * Inv_L + model->BSIM3v0wb0 * Inv_W + model->BSIM3v0pb0 * Inv_LW; pParam->BSIM3v0b1 = model->BSIM3v0b1 + model->BSIM3v0lb1 * Inv_L + model->BSIM3v0wb1 * Inv_W + model->BSIM3v0pb1 * Inv_LW; pParam->BSIM3v0alpha0 = model->BSIM3v0alpha0 + model->BSIM3v0lalpha0 * Inv_L + model->BSIM3v0walpha0 * Inv_W + model->BSIM3v0palpha0 * Inv_LW; pParam->BSIM3v0beta0 = model->BSIM3v0beta0 + model->BSIM3v0lbeta0 * Inv_L + model->BSIM3v0wbeta0 * Inv_W + model->BSIM3v0pbeta0 * Inv_LW; /* CV model */ pParam->BSIM3v0elm = model->BSIM3v0elm + model->BSIM3v0lelm * Inv_L + model->BSIM3v0welm * Inv_W + model->BSIM3v0pelm * Inv_LW; pParam->BSIM3v0cgsl = model->BSIM3v0cgsl + model->BSIM3v0lcgsl * Inv_L + model->BSIM3v0wcgsl * Inv_W + model->BSIM3v0pcgsl * Inv_LW; pParam->BSIM3v0cgdl = model->BSIM3v0cgdl + model->BSIM3v0lcgdl * Inv_L + model->BSIM3v0wcgdl * Inv_W + model->BSIM3v0pcgdl * Inv_LW; pParam->BSIM3v0ckappa = model->BSIM3v0ckappa + model->BSIM3v0lckappa * Inv_L + model->BSIM3v0wckappa * Inv_W + model->BSIM3v0pckappa * Inv_LW; pParam->BSIM3v0cf = model->BSIM3v0cf + model->BSIM3v0lcf * Inv_L + model->BSIM3v0wcf * Inv_W + model->BSIM3v0pcf * Inv_LW; pParam->BSIM3v0clc = model->BSIM3v0clc + model->BSIM3v0lclc * Inv_L + model->BSIM3v0wclc * Inv_W + model->BSIM3v0pclc * Inv_LW; pParam->BSIM3v0cle = model->BSIM3v0cle + model->BSIM3v0lcle * Inv_L + model->BSIM3v0wcle * Inv_W + model->BSIM3v0pcle * Inv_LW; pParam->BSIM3v0abulkCVfactor = 1.0 + pow((pParam->BSIM3v0clc / pParam->BSIM3v0leff), pParam->BSIM3v0cle); pParam->BSIM3v0cgdo = (model->BSIM3v0cgdo + pParam->BSIM3v0cf) * pParam->BSIM3v0weffCV; pParam->BSIM3v0cgso = (model->BSIM3v0cgso + pParam->BSIM3v0cf) * pParam->BSIM3v0weffCV; pParam->BSIM3v0cgbo = model->BSIM3v0cgbo * pParam->BSIM3v0leffCV; T0 = (TRatio - 1.0); pParam->BSIM3v0ua = pParam->BSIM3v0ua + pParam->BSIM3v0ua1 * T0; pParam->BSIM3v0ub = pParam->BSIM3v0ub + pParam->BSIM3v0ub1 * T0; pParam->BSIM3v0uc = pParam->BSIM3v0uc + pParam->BSIM3v0uc1 * T0; pParam->BSIM3v0u0temp = pParam->BSIM3v0u0 * pow(TRatio, pParam->BSIM3v0ute); pParam->BSIM3v0vsattemp = pParam->BSIM3v0vsat - pParam->BSIM3v0at * T0; pParam->BSIM3v0rds0 = (pParam->BSIM3v0rdsw + pParam->BSIM3v0prt * T0) / pow(pParam->BSIM3v0weff * 1E6, pParam->BSIM3v0wr); if (!model->BSIM3v0npeakGiven && model->BSIM3v0gamma1Given) { T0 = pParam->BSIM3v0gamma1 * model->BSIM3v0cox; pParam->BSIM3v0npeak = 3.021E22 * T0 * T0; } Vtm0 = KboQ * Tnom; Eg = 1.16 - 7.02e-4 * Tnom * Tnom / (Tnom + 1108.0); ni = 1.45e10 * (Tnom / 300.15) * sqrt(Tnom / 300.15) * exp(21.5565981 - Eg / (2.0 * Vtm0)); pParam->BSIM3v0phi = 2.0 * Vtm0 * log(pParam->BSIM3v0npeak / ni); pParam->BSIM3v0sqrtPhi = sqrt(pParam->BSIM3v0phi); pParam->BSIM3v0phis3 = pParam->BSIM3v0sqrtPhi * pParam->BSIM3v0phi; pParam->BSIM3v0Xdep0 = sqrt(2.0 * EPSSI / (Charge_q * pParam->BSIM3v0npeak * 1.0e6)) * pParam->BSIM3v0sqrtPhi; pParam->BSIM3v0sqrtXdep0 = sqrt(pParam->BSIM3v0Xdep0); pParam->BSIM3v0litl = sqrt(3.0 * pParam->BSIM3v0xj * model->BSIM3v0tox); pParam->BSIM3v0vbi = Vtm0 * log(1.0e20 * pParam->BSIM3v0npeak / (ni * ni)); pParam->BSIM3v0cdep0 = sqrt(Charge_q * EPSSI * pParam->BSIM3v0npeak * 1.0e6 / 2.0 / pParam->BSIM3v0phi); if (model->BSIM3v0k1Given || model->BSIM3v0k2Given) { if (!model->BSIM3v0k1Given) { fprintf(stdout, "Warning: k1 should be specified with k2.\n"); pParam->BSIM3v0k1 = 0.53; } if (!model->BSIM3v0k2Given) { fprintf(stdout, "Warning: k2 should be specified with k1.\n"); pParam->BSIM3v0k2 = -0.0186; } if (model->BSIM3v0nsubGiven) fprintf(stdout, "Warning: nsub is ignored because k1 or k2 is given.\n"); if (model->BSIM3v0xtGiven) fprintf(stdout, "Warning: xt is ignored because k1 or k2 is given.\n"); if (model->BSIM3v0vbxGiven) fprintf(stdout, "Warning: vbx is ignored because k1 or k2 is given.\n"); if (model->BSIM3v0vbmGiven) fprintf(stdout, "Warning: vbm is ignored because k1 or k2 is given.\n"); if (model->BSIM3v0gamma1Given) fprintf(stdout, "Warning: gamma1 is ignored because k1 or k2 is given.\n"); if (model->BSIM3v0gamma2Given) fprintf(stdout, "Warning: gamma2 is ignored because k1 or k2 is given.\n"); } else { if (!model->BSIM3v0vbxGiven) pParam->BSIM3v0vbx = pParam->BSIM3v0phi - 7.7348e-4 * pParam->BSIM3v0npeak * pParam->BSIM3v0xt * pParam->BSIM3v0xt; if (pParam->BSIM3v0vbx > 0.0) pParam->BSIM3v0vbx = -pParam->BSIM3v0vbx; if (pParam->BSIM3v0vbm > 0.0) pParam->BSIM3v0vbm = -pParam->BSIM3v0vbm; if (!model->BSIM3v0gamma1Given) pParam->BSIM3v0gamma1 = 5.753e-12 * sqrt(pParam->BSIM3v0npeak) / model->BSIM3v0cox; if (!model->BSIM3v0gamma2Given) pParam->BSIM3v0gamma2 = 5.753e-12 * sqrt(pParam->BSIM3v0nsub) / model->BSIM3v0cox; T0 = pParam->BSIM3v0gamma1 - pParam->BSIM3v0gamma2; T1 = sqrt(pParam->BSIM3v0phi - pParam->BSIM3v0vbx) - pParam->BSIM3v0sqrtPhi; T2 = sqrt(pParam->BSIM3v0phi * (pParam->BSIM3v0phi - pParam->BSIM3v0vbm)) - pParam->BSIM3v0phi; pParam->BSIM3v0k2 = T0 * T1 / (2.0 * T2 + pParam->BSIM3v0vbm); pParam->BSIM3v0k1 = pParam->BSIM3v0gamma2 - 2.0 * pParam->BSIM3v0k2 * sqrt(pParam->BSIM3v0phi - pParam->BSIM3v0vbm); } if (pParam->BSIM3v0k2 > 0.0) { T0 = 0.5 * pParam->BSIM3v0k1 / pParam->BSIM3v0k2; pParam->BSIM3v0vbsc = 0.9 * (pParam->BSIM3v0phi - T0 * T0); if (pParam->BSIM3v0vbsc > -3.0) pParam->BSIM3v0vbsc = -3.0; else if (pParam->BSIM3v0vbsc < -30.0) pParam->BSIM3v0vbsc = -30.0; } else { pParam->BSIM3v0vbsc = -10.0; } model->BSIM3v0vtm = KboQ * Temp; if (model->BSIM3v0vth0Given) pParam->BSIM3v0vfb = model->BSIM3v0type * pParam->BSIM3v0vth0 - pParam->BSIM3v0phi - pParam->BSIM3v0k1 * pParam->BSIM3v0sqrtPhi; else pParam->BSIM3v0vth0 = model->BSIM3v0type * (-1.0 + pParam->BSIM3v0phi + pParam->BSIM3v0k1 * pParam->BSIM3v0sqrtPhi); T1 = sqrt(EPSSI / EPSOX * model->BSIM3v0tox * pParam->BSIM3v0Xdep0); T0 = exp(-0.5 * pParam->BSIM3v0dsub * pParam->BSIM3v0leff / T1); pParam->BSIM3v0theta0vb0 = (T0 + 2.0 * T0 * T0); T0 = exp(-0.5 * pParam->BSIM3v0drout * pParam->BSIM3v0leff / T1); T2 = (T0 + 2.0 * T0 * T0); pParam->BSIM3v0thetaRout = pParam->BSIM3v0pdibl1 * T2 + pParam->BSIM3v0pdibl2; /* process source/drain series resistance */ here->BSIM3v0drainConductance = model->BSIM3v0sheetResistance * here->BSIM3v0drainSquares; if (here->BSIM3v0drainConductance > 0.0) here->BSIM3v0drainConductance = 1.0 / here->BSIM3v0drainConductance; else here->BSIM3v0drainConductance = 0.0; here->BSIM3v0sourceConductance = model->BSIM3v0sheetResistance * here->BSIM3v0sourceSquares; if (here->BSIM3v0sourceConductance > 0.0) here->BSIM3v0sourceConductance = 1.0 / here->BSIM3v0sourceConductance; else here->BSIM3v0sourceConductance = 0.0; } here->BSIM3v0cgso = pParam->BSIM3v0cgso; here->BSIM3v0cgdo = pParam->BSIM3v0cgdo; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v0/b3v0cvtest.c0000644000175000017500000000572113546075722022622 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1995 Min-Chie Jeng and Mansun Chan. File: b3v0cvtest.c **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3v0def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3v0convTest(GENmodel *inModel, CKTcircuit *ckt) { BSIM3v0model *model = (BSIM3v0model*)inModel; BSIM3v0instance *here; double delvbd, delvbs, delvds, delvgd, delvgs, vbd, vbs, vds; double cbd, cbhat, cbs, cd, cdhat, tol, vgd, vgdo, vgs; /* loop through all the BSIM3v0 device models */ for (; model != NULL; model = BSIM3v0nextModel(model)) { /* loop through all the instances of the model */ for (here = BSIM3v0instances(model); here != NULL ; here=BSIM3v0nextInstance(here)) { vbs = model->BSIM3v0type * (*(ckt->CKTrhsOld+here->BSIM3v0bNode) - *(ckt->CKTrhsOld+here->BSIM3v0sNodePrime)); vgs = model->BSIM3v0type * (*(ckt->CKTrhsOld+here->BSIM3v0gNode) - *(ckt->CKTrhsOld+here->BSIM3v0sNodePrime)); vds = model->BSIM3v0type * (*(ckt->CKTrhsOld+here->BSIM3v0dNodePrime) - *(ckt->CKTrhsOld+here->BSIM3v0sNodePrime)); vbd = vbs - vds; vgd = vgs - vds; vgdo = *(ckt->CKTstate0 + here->BSIM3v0vgs) - *(ckt->CKTstate0 + here->BSIM3v0vds); delvbs = vbs - *(ckt->CKTstate0 + here->BSIM3v0vbs); delvbd = vbd - *(ckt->CKTstate0 + here->BSIM3v0vbd); delvgs = vgs - *(ckt->CKTstate0 + here->BSIM3v0vgs); delvds = vds - *(ckt->CKTstate0 + here->BSIM3v0vds); delvgd = vgd-vgdo; cd = here->BSIM3v0cd; if (here->BSIM3v0mode >= 0) { cdhat = cd - here->BSIM3v0gbd * delvbd + here->BSIM3v0gmbs * delvbs + here->BSIM3v0gm * delvgs + here->BSIM3v0gds * delvds; } else { cdhat = cd - (here->BSIM3v0gbd - here->BSIM3v0gmbs) * delvbd - here->BSIM3v0gm * delvgd + here->BSIM3v0gds * delvds; } /* * check convergence */ if ((here->BSIM3v0off == 0) || (!(ckt->CKTmode & MODEINITFIX))) { tol = ckt->CKTreltol * MAX(fabs(cdhat), fabs(cd)) + ckt->CKTabstol; if (fabs(cdhat - cd) >= tol) { ckt->CKTnoncon++; return(OK); } cbs = here->BSIM3v0cbs; cbd = here->BSIM3v0cbd; cbhat = cbs + cbd + here->BSIM3v0gbd * delvbd + here->BSIM3v0gbs * delvbs; tol = ckt->CKTreltol * MAX(fabs(cbhat), fabs(cbs + cbd)) + ckt->CKTabstol; if (fabs(cbhat - (cbs + cbd)) > tol) { ckt->CKTnoncon++; return(OK); } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v0/b3v0noi.c0000644000175000017500000002517213546075722022101 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1995 Gary W. Ng and Min-Chie Jeng. File: b3v0noi.c **********/ #include "ngspice/ngspice.h" #include "bsim3v0def.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" #include "ngspice/const.h" /* jwan */ /* * BSIM3v0noise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with MOSFET's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the MOSFET's is summed with the variable "OnDens". */ static double StrongInversionNoiseEval3v0(double vgs, double vds, BSIM3v0model *model, BSIM3v0instance *here, double freq, double temp) { struct bsim3v0SizeDependParam *pParam; double cd, esat, DelClm, EffFreq, N0, Nl, Vgst; double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi; pParam = here->pParam; cd = fabs(here->BSIM3v0cd) * here->BSIM3v0m; if (vds > here->BSIM3v0vdsat) { esat = 2.0 * pParam->BSIM3v0vsattemp / here->BSIM3v0ueff; T0 = ((((vds - here->BSIM3v0vdsat) / pParam->BSIM3v0litl) + model->BSIM3v0em) / esat); DelClm = pParam->BSIM3v0litl * log (MAX(T0, N_MINLOG)); } else DelClm = 0.0; EffFreq = pow(freq, model->BSIM3v0ef); T1 = CHARGE * CHARGE * 8.62e-5 * cd * (temp + CONSTCtoK) * here->BSIM3v0ueff; T2 = 1.0e8 * EffFreq * model->BSIM3v0cox * pParam->BSIM3v0leff * pParam->BSIM3v0leff; Vgst = vgs - here->BSIM3v0von; N0 = model->BSIM3v0cox * Vgst / CHARGE; if (N0 < 0.0) N0 = 0.0; Nl = model->BSIM3v0cox * (Vgst - MIN(vds, here->BSIM3v0vdsat)) / CHARGE; if (Nl < 0.0) Nl = 0.0; T3 = model->BSIM3v0oxideTrapDensityA * log(MAX(((N0 + 2.0e14) / (Nl + 2.0e14)), N_MINLOG)); T4 = model->BSIM3v0oxideTrapDensityB * (N0 - Nl); T5 = model->BSIM3v0oxideTrapDensityC * 0.5 * (N0 * N0 - Nl * Nl); T6 = 8.62e-5 * (temp + CONSTCtoK) * cd * cd; T7 = 1.0e8 * EffFreq * pParam->BSIM3v0leff * pParam->BSIM3v0leff * pParam->BSIM3v0weff * here->BSIM3v0m; T8 = model->BSIM3v0oxideTrapDensityA + model->BSIM3v0oxideTrapDensityB * Nl + model->BSIM3v0oxideTrapDensityC * Nl * Nl; T9 = (Nl + 2.0e14) * (Nl + 2.0e14); Ssi = T1 / T2 * (T3 + T4 + T5) + T6 / T7 * DelClm * T8 / T9; return Ssi; } int BSIM3v0noise (int mode, int operation, GENmodel *inModel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; BSIM3v0model *model = (BSIM3v0model *)inModel; BSIM3v0instance *here; struct bsim3v0SizeDependParam *pParam; double tempOnoise; double tempInoise; double noizDens[BSIM3v0NSRCS]; double lnNdens[BSIM3v0NSRCS]; double vgs, vds, Slimit; double T1, T10, T11; double Ssi, Swi; int i; /* define the names of the noise sources */ static char *BSIM3v0nNames[BSIM3v0NSRCS] = { /* Note that we have to keep the order */ ".rd", /* noise due to rd */ /* consistent with the index definitions */ ".rs", /* noise due to rs */ /* in BSIM3v0defs.h */ ".id", /* noise due to id */ ".1overf", /* flicker (1/f) noise */ "" /* total transistor noise */ }; for (; model != NULL; model = BSIM3v0nextModel(model)) { for (here = BSIM3v0instances(model); here != NULL; here = BSIM3v0nextInstance(here)) { pParam = here->pParam; switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i = 0; i < BSIM3v0NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise.%s%s", here->BSIM3v0name, BSIM3v0nNames[i]); } break; case INT_NOIZ: for (i = 0; i < BSIM3v0NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total.%s%s", here->BSIM3v0name, BSIM3v0nNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total.%s%s", here->BSIM3v0name, BSIM3v0nNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: NevalSrc(&noizDens[BSIM3v0RDNOIZ], &lnNdens[BSIM3v0RDNOIZ], ckt, THERMNOISE, here->BSIM3v0dNodePrime, here->BSIM3v0dNode, here->BSIM3v0drainConductance * here->BSIM3v0m); NevalSrc(&noizDens[BSIM3v0RSNOIZ], &lnNdens[BSIM3v0RSNOIZ], ckt, THERMNOISE, here->BSIM3v0sNodePrime, here->BSIM3v0sNode, here->BSIM3v0sourceConductance * here->BSIM3v0m); if (model->BSIM3v0noiMod == 2) { NevalSrc(&noizDens[BSIM3v0IDNOIZ], &lnNdens[BSIM3v0IDNOIZ], ckt, THERMNOISE, here->BSIM3v0dNodePrime, here->BSIM3v0sNodePrime, (here->BSIM3v0ueff * fabs((here->BSIM3v0qinv * here->BSIM3v0m) / (pParam->BSIM3v0leff * pParam->BSIM3v0leff)))); } else { NevalSrc(&noizDens[BSIM3v0IDNOIZ], &lnNdens[BSIM3v0IDNOIZ], ckt, THERMNOISE, here->BSIM3v0dNodePrime, here->BSIM3v0sNodePrime, (2.0 / 3.0 * fabs(here->BSIM3v0gm + here->BSIM3v0gds) * here->BSIM3v0m)); } NevalSrc(&noizDens[BSIM3v0FLNOIZ], NULL, ckt, N_GAIN, here->BSIM3v0dNodePrime, here->BSIM3v0sNodePrime, (double) 0.0); if (model->BSIM3v0noiMod == 2) { vgs = *(ckt->CKTstates[0] + here->BSIM3v0vgs); vds = *(ckt->CKTstates[0] + here->BSIM3v0vds); if (vds < 0.0) { vds = -vds; vgs = vgs + vds; } if (vgs >= here->BSIM3v0von + 0.1) { Ssi = StrongInversionNoiseEval3v0(vgs, vds, model, here, data->freq, ckt->CKTtemp); noizDens[BSIM3v0FLNOIZ] *= Ssi; } else { pParam = here->pParam; T10 = model->BSIM3v0oxideTrapDensityA * 8.62e-5 * (ckt->CKTtemp + CONSTCtoK); T11 = pParam->BSIM3v0weff * here->BSIM3v0m * pParam->BSIM3v0leff * pow(data->freq, model->BSIM3v0ef) * 4.0e36; Swi = T10 / T11 * here->BSIM3v0cd * here->BSIM3v0m * here->BSIM3v0cd * here->BSIM3v0m; Slimit = StrongInversionNoiseEval3v0( here->BSIM3v0von + 0.1, vds, model, here, data->freq, ckt->CKTtemp); T1 = Swi + Slimit; if (T1 > 0.0) noizDens[BSIM3v0FLNOIZ] *= (Slimit * Swi) / T1; else noizDens[BSIM3v0FLNOIZ] *= 0.0; } } else { noizDens[BSIM3v0FLNOIZ] *= model->BSIM3v0kf * exp(model->BSIM3v0af * log(MAX(fabs(here->BSIM3v0cd * here->BSIM3v0m), N_MINLOG))) / (pow(data->freq, model->BSIM3v0ef) * pParam->BSIM3v0leff * pParam->BSIM3v0leff * model->BSIM3v0cox); } lnNdens[BSIM3v0FLNOIZ] = log(MAX(noizDens[BSIM3v0FLNOIZ], N_MINLOG)); noizDens[BSIM3v0TOTNOIZ] = noizDens[BSIM3v0RDNOIZ] + noizDens[BSIM3v0RSNOIZ] + noizDens[BSIM3v0IDNOIZ] + noizDens[BSIM3v0FLNOIZ]; lnNdens[BSIM3v0TOTNOIZ] = log(MAX(noizDens[BSIM3v0TOTNOIZ], N_MINLOG)); *OnDens += noizDens[BSIM3v0TOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to initialize our "history" variables. */ for (i = 0; i < BSIM3v0NSRCS; i++) { here->BSIM3v0nVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i = 0; i < BSIM3v0NSRCS; i++) { here->BSIM3v0nVar[OUTNOIZ][i] = 0.0; here->BSIM3v0nVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0, we have to integrate. */ for (i = 0; i < BSIM3v0NSRCS; i++) { if (i != BSIM3v0TOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], here->BSIM3v0nVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv, lnNdens[i] + data->lnGainInv, here->BSIM3v0nVar[LNLSTDENS][i] + data->lnGainInv, data); here->BSIM3v0nVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { here->BSIM3v0nVar[OUTNOIZ][i] += tempOnoise; here->BSIM3v0nVar[OUTNOIZ][BSIM3v0TOTNOIZ] += tempOnoise; here->BSIM3v0nVar[INNOIZ][i] += tempInoise; here->BSIM3v0nVar[INNOIZ][BSIM3v0TOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i = 0; i < BSIM3v0NSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i = 0; i < BSIM3v0NSRCS; i++) { data->outpVector[data->outNumber++] = here->BSIM3v0nVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = here->BSIM3v0nVar[INNOIZ][i]; } } break; } break; case N_CLOSE: /* do nothing, the main calling routine will close */ return (OK); break; /* the plots */ } /* switch (operation) */ } /* for here */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v0/bsim3v0init.h0000644000175000017500000000042613546075722022770 0ustar carstencarsten#ifndef _BSIM3v0INIT_H #define _BSIM3v0INIT_H extern IFparm BSIM3v0pTable[ ]; extern IFparm BSIM3v0mPTable[ ]; extern char *BSIM3v0names[ ]; extern int BSIM3v0pTSize; extern int BSIM3v0mPTSize; extern int BSIM3v0nSize; extern int BSIM3v0iSize; extern int BSIM3v0mSize; #endif tmpk8ny_4pz/src/spicelib/devices/bsim3v0/b3v0pzld.c0000644000175000017500000001374113546075722022264 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1995 Min-Chie Jeng and Mansun Chan. File: b3pzld.c **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "bsim3v0def.h" #include "ngspice/suffix.h" int BSIM3v0pzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { BSIM3v0model *model = (BSIM3v0model*)inModel; BSIM3v0instance *here; double xcggb, xcgdb, xcgsb, xcbgb, xcbdb, xcbsb, xcddb, xcssb, xcdgb; double gdpr, gspr, gds, gbd, gbs, capbd, capbs, xcsgb, xcdsb, xcsdb; double cggb, cgdb, cgsb, cbgb, cbdb, cbsb, cddb, cdgb, cdsb; double GSoverlapCap, GDoverlapCap, GBoverlapCap; double FwdSum, RevSum, Gm, Gmbs; double m; NG_IGNORE(ckt); for (; model != NULL; model = BSIM3v0nextModel(model)) { for (here = BSIM3v0instances(model); here!= NULL; here = BSIM3v0nextInstance(here)) { if (here->BSIM3v0mode >= 0) { Gm = here->BSIM3v0gm; Gmbs = here->BSIM3v0gmbs; FwdSum = Gm + Gmbs; RevSum = 0.0; cggb = here->BSIM3v0cggb; cgsb = here->BSIM3v0cgsb; cgdb = here->BSIM3v0cgdb; cbgb = here->BSIM3v0cbgb; cbsb = here->BSIM3v0cbsb; cbdb = here->BSIM3v0cbdb; cdgb = here->BSIM3v0cdgb; cdsb = here->BSIM3v0cdsb; cddb = here->BSIM3v0cddb; } else { Gm = -here->BSIM3v0gm; Gmbs = -here->BSIM3v0gmbs; FwdSum = 0.0; RevSum = -Gm - Gmbs; cggb = here->BSIM3v0cggb; cgsb = here->BSIM3v0cgdb; cgdb = here->BSIM3v0cgsb; cbgb = here->BSIM3v0cbgb; cbsb = here->BSIM3v0cbdb; cbdb = here->BSIM3v0cbsb; cdgb = -(here->BSIM3v0cdgb + cggb + cbgb); cdsb = -(here->BSIM3v0cddb + cgsb + cbsb); cddb = -(here->BSIM3v0cdsb + cgdb + cbdb); } gdpr=here->BSIM3v0drainConductance; gspr=here->BSIM3v0sourceConductance; gds= here->BSIM3v0gds; gbd= here->BSIM3v0gbd; gbs= here->BSIM3v0gbs; capbd= here->BSIM3v0capbd; capbs= here->BSIM3v0capbs; GSoverlapCap = here->BSIM3v0cgso; GDoverlapCap = here->BSIM3v0cgdo; GBoverlapCap = here->pParam->BSIM3v0cgbo; xcdgb = (cdgb - GDoverlapCap); xcddb = (cddb + capbd + GDoverlapCap); xcdsb = cdsb; xcsgb = -(cggb + cbgb + cdgb + GSoverlapCap); xcsdb = -(cgdb + cbdb + cddb); xcssb = (capbs + GSoverlapCap - (cgsb+cbsb+cdsb)); xcggb = (cggb + GDoverlapCap + GSoverlapCap + GBoverlapCap); xcgdb = (cgdb - GDoverlapCap); xcgsb = (cgsb - GSoverlapCap); xcbgb = (cbgb - GBoverlapCap); xcbdb = (cbdb - capbd); xcbsb = (cbsb - capbs); m = here->BSIM3v0m; *(here->BSIM3v0GgPtr ) += m * (xcggb * s->real); *(here->BSIM3v0GgPtr +1) += m * (xcggb * s->imag); *(here->BSIM3v0BbPtr ) += m * ((-xcbgb-xcbdb-xcbsb) * s->real); *(here->BSIM3v0BbPtr +1) += m * ((-xcbgb-xcbdb-xcbsb) * s->imag); *(here->BSIM3v0DPdpPtr ) += m * (xcddb * s->real); *(here->BSIM3v0DPdpPtr +1) += m * (xcddb * s->imag); *(here->BSIM3v0SPspPtr ) += m * (xcssb * s->real); *(here->BSIM3v0SPspPtr +1) += m * (xcssb * s->imag); *(here->BSIM3v0GbPtr ) += m * ((-xcggb-xcgdb-xcgsb) * s->real); *(here->BSIM3v0GbPtr +1) += m * ((-xcggb-xcgdb-xcgsb) * s->imag); *(here->BSIM3v0GdpPtr ) += m * (xcgdb * s->real); *(here->BSIM3v0GdpPtr +1) += m * (xcgdb * s->imag); *(here->BSIM3v0GspPtr ) += m * (xcgsb * s->real); *(here->BSIM3v0GspPtr +1) += m * (xcgsb * s->imag); *(here->BSIM3v0BgPtr ) += m * (xcbgb * s->real); *(here->BSIM3v0BgPtr +1) += m * (xcbgb * s->imag); *(here->BSIM3v0BdpPtr ) += m * (xcbdb * s->real); *(here->BSIM3v0BdpPtr +1) += m * (xcbdb * s->imag); *(here->BSIM3v0BspPtr ) += m * (xcbsb * s->real); *(here->BSIM3v0BspPtr +1) += m * (xcbsb * s->imag); *(here->BSIM3v0DPgPtr ) += m * (xcdgb * s->real); *(here->BSIM3v0DPgPtr +1) += m * (xcdgb * s->imag); *(here->BSIM3v0DPbPtr ) += m * ((-xcdgb-xcddb-xcdsb) * s->real); *(here->BSIM3v0DPbPtr +1) += m * ((-xcdgb-xcddb-xcdsb) * s->imag); *(here->BSIM3v0DPspPtr ) += m * (xcdsb * s->real); *(here->BSIM3v0DPspPtr +1) += m * (xcdsb * s->imag); *(here->BSIM3v0SPgPtr ) += m * (xcsgb * s->real); *(here->BSIM3v0SPgPtr +1) += m * (xcsgb * s->imag); *(here->BSIM3v0SPbPtr ) += m * ((-xcsgb-xcsdb-xcssb) * s->real); *(here->BSIM3v0SPbPtr +1) += m * ((-xcsgb-xcsdb-xcssb) * s->imag); *(here->BSIM3v0SPdpPtr ) += m * (xcsdb * s->real); *(here->BSIM3v0SPdpPtr +1) += m * (xcsdb * s->imag); *(here->BSIM3v0DdPtr) += m * gdpr; *(here->BSIM3v0SsPtr) += m * gspr; *(here->BSIM3v0BbPtr) += m * (gbd + gbs); *(here->BSIM3v0DPdpPtr) += m * (gdpr + gds + gbd + RevSum); *(here->BSIM3v0SPspPtr) += m * (gspr + gds + gbs + FwdSum); *(here->BSIM3v0DdpPtr) -= m * gdpr; *(here->BSIM3v0SspPtr) -= m * gspr; *(here->BSIM3v0BdpPtr) -= m * gbd; *(here->BSIM3v0BspPtr) -= m * gbs; *(here->BSIM3v0DPdPtr) -= m * gdpr; *(here->BSIM3v0DPgPtr) += m * Gm; *(here->BSIM3v0DPbPtr) -= m * (gbd - Gmbs); *(here->BSIM3v0DPspPtr) -= m * (gds + FwdSum); *(here->BSIM3v0SPgPtr) -= m * Gm; *(here->BSIM3v0SPsPtr) -= m * gspr; *(here->BSIM3v0SPbPtr) -= m * (gbs + Gmbs); *(here->BSIM3v0SPdpPtr) -= m * (gds + RevSum); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v0/b3v0ld.c0000644000175000017500000022552613546075722021720 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1991 JianHui Huang and Min-Chie Jeng. File: b3ld.c 1/3/92 Modified by Mansun Chan (1995) **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3v0def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define Charge_q 1.60219e-19 #define DELTA_1 0.02 #define DELTA_2 0.02 #define DELTA_3 0.02 #define DELTA_4 0.02 int BSIM3v0load(GENmodel *inModel, CKTcircuit *ckt) { BSIM3v0model *model = (BSIM3v0model*)inModel; BSIM3v0instance *here; double SourceSatCurrent, DrainSatCurrent; double ag0, qgd, qgs, qgb, von, cbhat = 0.0, VgstNVt, ExpVgst = 0.0; double cdrain, cdhat = 0.0, cdreq, ceqbd, ceqbs, ceqqb, ceqqd, ceqqg, ceq, geq; double czbd, czbdsw, czbs, czbssw, evbd, evbs, arg, sarg; double delvbd, delvbs, delvds, delvgd, delvgs; double Vfbeff, dVfbeff_dVg, dVfbeff_dVd, dVfbeff_dVb, V3, V4; double gcbdb, gcbgb, gcbsb, gcddb, gcdgb, gcdsb, gcgdb, gcggb, gcgsb, gcsdb; #ifndef NEWCONV double tol; #endif double gcsgb, gcssb, PhiB, PhiBSW, MJ, MJSW; double vbd, vbs, vds, vgb, vgd, vgs, vgdo; #ifndef PREDICTOR double xfact; #endif double qgate = 0.0, qbulk = 0.0, qdrn = 0.0, qsrc, cqgate, cqbulk, cqdrn; double Vds, Vgs, Vbs, Gmbs, FwdSum, RevSum; double Vgs_eff, Vfb, dVfb_dVb, dVfb_dVd; double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth, dVth_dVb, dVth_dVd; double Vgst, dVgs_eff_dVg; double n, dn_dVb, Vtm; double ExpArg; double Denomi, dDenomi_dVg, dDenomi_dVd, dDenomi_dVb; double ueff, dueff_dVg, dueff_dVd, dueff_dVb; double Esat, Vdsat; double EsatL, dEsatL_dVg, dEsatL_dVd, dEsatL_dVb; double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, Vasat; double dVasat_dVg, dVasat_dVb, dVasat_dVd, Va, dVa_dVd, dVa_dVg, dVa_dVb; double Vbseff, dVbseff_dVb, VbseffCV, dVbseffCV_dVb; double Arg1, One_Third_CoxWL, Two_Third_CoxWL, CoxWL; double T0, dT0_dVg, dT0_dVd, dT0_dVb; double T1, dT1_dVg, dT1_dVd, dT1_dVb; double T2, dT2_dVg, dT2_dVd, dT2_dVb; double T3, dT3_dVg, dT3_dVd, dT3_dVb; double T4, dT4_dVg, dT4_dVd, dT4_dVb; double T5; double T6; double T7; double T8; double T10; double Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVb; double VACLM, dVACLM_dVg, dVACLM_dVd, dVACLM_dVb; double VADIBL, dVADIBL_dVg, dVADIBL_dVd, dVADIBL_dVb; double Xdep, dXdep_dVb, lt1, dlt1_dVb, ltw, dltw_dVb, Delt_vth, dDelt_vth_dVb; double Theta0, dTheta0_dVb; double TempRatio, tmp1, tmp2, tmp3, tmp4; double DIBL_Sft, dDIBL_Sft_dVd, Pmos_factor; #ifndef NOBYPASS double tempv; #endif double a1; double Vgsteff, dVgsteff_dVg, dVgsteff_dVd, dVgsteff_dVb; double Vdseff, dVdseff_dVg, dVdseff_dVd, dVdseff_dVb; double VdseffCV, dVdseffCV_dVg, dVdseffCV_dVd, dVdseffCV_dVb; double diffVds; double dAbulk_dVg, dn_dVd ; double beta, dbeta_dVg, dbeta_dVd, dbeta_dVb; double gche, dgche_dVg, dgche_dVd, dgche_dVb; double fgche1, dfgche1_dVg, dfgche1_dVd, dfgche1_dVb; double fgche2, dfgche2_dVg, dfgche2_dVd, dfgche2_dVb; double Idl, dIdl_dVg, dIdl_dVd, dIdl_dVb; double Idsa, dIdsa_dVg, dIdsa_dVd, dIdsa_dVb; double Ids, Gm, Gds, Gmb; double Isub, Gbd, Gbg, Gbb; double VASCBE, dVASCBE_dVg, dVASCBE_dVd, dVASCBE_dVb; double CoxWovL; double Rds, dRds_dVg, dRds_dVb, WVCox, WVCoxRds; double Vgst2Vtm, VdsatCV, dVdsatCV_dVg, dVdsatCV_dVb; double Leff = 0.0, Weff, dWeff_dVg, dWeff_dVb; double AbulkCV, dAbulkCV_dVb; double qgdo, qgso, cgdo, cgso; double qcheq, qdef, gqdef, cqdef, cqcheq, gtau_diff, gtau_drift; double gcqdb,gcqsb,gcqgb,gcqbb; double dxpart, sxpart; double gbspsp, gbbdp, gbbsp, gbspg, gbspb, gbspdp; double gbdpdp, gbdpg, gbdpb, gbdpsp; double Cgg, Cgd, Cgb; double Csg, Csd, Csb, Cbg, Cbd, Cbb; double Cgg1, Cgb1, Cgd1, Cbg1, Cbb1, Cbd1, Qac0, Qsub0; double dQac0_dVg, dQac0_dVd, dQac0_dVb, dQsub0_dVg, dQsub0_dVd, dQsub0_dVb; struct bsim3v0SizeDependParam *pParam; int ByPass, Check, ChargeComputationNeeded = 0, error; double m = 1.0; for (; model != NULL; model = BSIM3v0nextModel(model)) { for (here = BSIM3v0instances(model); here != NULL; here = BSIM3v0nextInstance(here)) { Check = 1; ByPass = 0; pParam = here->pParam; if ((ckt->CKTmode & MODEINITSMSIG)) { vbs = *(ckt->CKTstate0 + here->BSIM3v0vbs); vgs = *(ckt->CKTstate0 + here->BSIM3v0vgs); vds = *(ckt->CKTstate0 + here->BSIM3v0vds); qdef = *(ckt->CKTstate0 + here->BSIM3v0qcdump); } else if ((ckt->CKTmode & MODEINITTRAN)) { vbs = *(ckt->CKTstate1 + here->BSIM3v0vbs); vgs = *(ckt->CKTstate1 + here->BSIM3v0vgs); vds = *(ckt->CKTstate1 + here->BSIM3v0vds); qdef = *(ckt->CKTstate1 + here->BSIM3v0qcdump); } else if ((ckt->CKTmode & MODEINITJCT) && !here->BSIM3v0off) { vds = model->BSIM3v0type * here->BSIM3v0icVDS; vgs = model->BSIM3v0type * here->BSIM3v0icVGS; vbs = model->BSIM3v0type * here->BSIM3v0icVBS; qdef = 0.0; if ((vds == 0.0) && (vgs == 0.0) && (vbs == 0.0) && ((ckt->CKTmode & (MODETRAN | MODEAC|MODEDCOP | MODEDCTRANCURVE)) || (!(ckt->CKTmode & MODEUIC)))) { vbs = 0.0; vgs = pParam->BSIM3v0vth0 + 0.1; vds = 0.1; } } else if ((ckt->CKTmode & (MODEINITJCT | MODEINITFIX)) && (here->BSIM3v0off)) { qdef = vbs = vgs = vds = 0.0; } else { #ifndef PREDICTOR if ((ckt->CKTmode & MODEINITPRED)) { xfact = ckt->CKTdelta / ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->BSIM3v0vbs) = *(ckt->CKTstate1 + here->BSIM3v0vbs); vbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM3v0vbs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM3v0vbs))); *(ckt->CKTstate0 + here->BSIM3v0vgs) = *(ckt->CKTstate1 + here->BSIM3v0vgs); vgs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM3v0vgs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM3v0vgs))); *(ckt->CKTstate0 + here->BSIM3v0vds) = *(ckt->CKTstate1 + here->BSIM3v0vds); vds = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM3v0vds)) - (xfact * (*(ckt->CKTstate2 + here->BSIM3v0vds))); *(ckt->CKTstate0 + here->BSIM3v0vbd) = *(ckt->CKTstate0 + here->BSIM3v0vbs) - *(ckt->CKTstate0 + here->BSIM3v0vds); qdef = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM3v0qcdump)) -(xfact * (*(ckt->CKTstate2 + here->BSIM3v0qcdump))); } else { #endif /* PREDICTOR */ vbs = model->BSIM3v0type * (*(ckt->CKTrhsOld + here->BSIM3v0bNode) - *(ckt->CKTrhsOld + here->BSIM3v0sNodePrime)); vgs = model->BSIM3v0type * (*(ckt->CKTrhsOld + here->BSIM3v0gNode) - *(ckt->CKTrhsOld + here->BSIM3v0sNodePrime)); vds = model->BSIM3v0type * (*(ckt->CKTrhsOld + here->BSIM3v0dNodePrime) - *(ckt->CKTrhsOld + here->BSIM3v0sNodePrime)); qdef = *(ckt->CKTrhsOld + here->BSIM3v0qNode); #ifndef PREDICTOR } #endif /* PREDICTOR */ vbd = vbs - vds; vgd = vgs - vds; vgdo = *(ckt->CKTstate0 + here->BSIM3v0vgs) - *(ckt->CKTstate0 + here->BSIM3v0vds); delvbs = vbs - *(ckt->CKTstate0 + here->BSIM3v0vbs); delvbd = vbd - *(ckt->CKTstate0 + here->BSIM3v0vbd); delvgs = vgs - *(ckt->CKTstate0 + here->BSIM3v0vgs); delvds = vds - *(ckt->CKTstate0 + here->BSIM3v0vds); delvgd = vgd - vgdo; if (here->BSIM3v0mode >= 0) { cdhat = here->BSIM3v0cd - here->BSIM3v0gbd * delvbd + here->BSIM3v0gmbs * delvbs + here->BSIM3v0gm * delvgs + here->BSIM3v0gds * delvds; } else { cdhat = here->BSIM3v0cd - (here->BSIM3v0gbd - here->BSIM3v0gmbs) * delvbd - here->BSIM3v0gm * delvgd + here->BSIM3v0gds * delvds; } cbhat = here->BSIM3v0cbs + here->BSIM3v0cbd + here->BSIM3v0gbd * delvbd + here->BSIM3v0gbs * delvbs; #ifndef NOBYPASS /* following should be one big if connected by && all over * the place, but some C compilers can't handle that, so * we split it up here to let them digest it in stages */ if ((!(ckt->CKTmode & MODEINITPRED)) && (ckt->CKTbypass)) if ((fabs(delvbs) < (ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->BSIM3v0vbs))) + ckt->CKTvoltTol))) if ((fabs(delvbd) < (ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0+here->BSIM3v0vbd))) + ckt->CKTvoltTol))) if ((fabs(delvgs) < (ckt->CKTreltol * MAX(fabs(vgs), fabs(*(ckt->CKTstate0+here->BSIM3v0vgs))) + ckt->CKTvoltTol))) if ((fabs(delvds) < (ckt->CKTreltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0+here->BSIM3v0vds))) + ckt->CKTvoltTol))) if ((fabs(cdhat - here->BSIM3v0cd) < ckt->CKTreltol * MAX(fabs(cdhat),fabs(here->BSIM3v0cd)) + ckt->CKTabstol)) { tempv = MAX(fabs(cbhat),fabs(here->BSIM3v0cbs + here->BSIM3v0cbd)) + ckt->CKTabstol; if ((fabs(cbhat - (here->BSIM3v0cbs + here->BSIM3v0cbd)) < ckt->CKTreltol * tempv)) { /* bypass code */ vbs = *(ckt->CKTstate0 + here->BSIM3v0vbs); vbd = *(ckt->CKTstate0 + here->BSIM3v0vbd); vgs = *(ckt->CKTstate0 + here->BSIM3v0vgs); vds = *(ckt->CKTstate0 + here->BSIM3v0vds); qcheq = *(ckt->CKTstate0 + here->BSIM3v0qcheq); vgd = vgs - vds; vgb = vgs - vbs; cdrain = here->BSIM3v0mode * (here->BSIM3v0cd + here->BSIM3v0cbd); if ((ckt->CKTmode & (MODETRAN | MODEAC)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) { ByPass = 1; goto line755; } else { goto line850; } } } #endif /*NOBYPASS*/ von = here->BSIM3v0von; if (*(ckt->CKTstate0 + here->BSIM3v0vds) >= 0.0) { vgs = DEVfetlim(vgs, *(ckt->CKTstate0+here->BSIM3v0vgs), von); vds = vgs - vgd; vds = DEVlimvds(vds, *(ckt->CKTstate0 + here->BSIM3v0vds)); vgd = vgs - vds; } else { vgd = DEVfetlim(vgd, vgdo, von); vds = vgs - vgd; vds = -DEVlimvds(-vds, -(*(ckt->CKTstate0+here->BSIM3v0vds))); vgs = vgd + vds; } if (vds >= 0.0) { vbs = DEVpnjlim(vbs, *(ckt->CKTstate0 + here->BSIM3v0vbs), CONSTvt0, model->BSIM3v0vcrit, &Check); vbd = vbs - vds; } else { vbd = DEVpnjlim(vbd, *(ckt->CKTstate0 + here->BSIM3v0vbd), CONSTvt0, model->BSIM3v0vcrit, &Check); vbs = vbd + vds; } } /* determine DC current and derivatives */ vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; m = here->BSIM3v0m; SourceSatCurrent = here->BSIM3v0sourceArea*model->BSIM3v0jctSatCurDensity; if (here->BSIM3v0sourceArea <= 0.0) SourceSatCurrent = 1.0e-14; if (SourceSatCurrent <= 0.0) { here->BSIM3v0gbs = ckt->CKTgmin; here->BSIM3v0cbs = here->BSIM3v0gbs * vbs; } else if (vbs <= -0.5) { here->BSIM3v0gbs = ckt->CKTgmin; here->BSIM3v0cbs = -SourceSatCurrent + here->BSIM3v0gbs * vbs; } else if (vbs < 0.5) { evbs = exp(vbs / CONSTvt0); here->BSIM3v0gbs = SourceSatCurrent * evbs / CONSTvt0 + ckt->CKTgmin; here->BSIM3v0cbs = SourceSatCurrent * (evbs - 1.0) + ckt->CKTgmin * vbs; } else { evbs = exp(0.5 / CONSTvt0); here->BSIM3v0gbs = SourceSatCurrent * evbs / CONSTvt0 + ckt->CKTgmin; here->BSIM3v0cbs = SourceSatCurrent * (evbs - 1.0) + ckt->CKTgmin * 0.5; } DrainSatCurrent = here->BSIM3v0drainArea * model->BSIM3v0jctSatCurDensity; if (here->BSIM3v0drainArea <= 0.0) DrainSatCurrent = 1.0e-14; if (DrainSatCurrent <= 0.0) { here->BSIM3v0gbd = ckt->CKTgmin; here->BSIM3v0cbd = here->BSIM3v0gbd * vbd; } else if (vbd <= -0.5) { here->BSIM3v0gbd = ckt->CKTgmin; here->BSIM3v0cbd = -DrainSatCurrent + here->BSIM3v0gbd * vbd; } else if (vbd < 0.5) { evbd = exp(vbd/CONSTvt0); here->BSIM3v0gbd = DrainSatCurrent * evbd / CONSTvt0 + ckt->CKTgmin; here->BSIM3v0cbd = DrainSatCurrent * (evbd - 1.0) + ckt->CKTgmin * vbd; } else { evbd = exp(0.5/CONSTvt0); here->BSIM3v0gbd = DrainSatCurrent * evbd / CONSTvt0 + ckt->CKTgmin; here->BSIM3v0cbd = DrainSatCurrent * (evbd - 1.0) + ckt->CKTgmin * 0.5; } if (vds >= 0.0) { /* normal mode */ here->BSIM3v0mode = 1; Vds = vds; Vgs = vgs; Vbs = vbs; } else { /* inverse mode */ here->BSIM3v0mode = -1; Vds = -vds; Vgs = vgd; Vbs = vbd; } ChargeComputationNeeded = ((ckt->CKTmode & (MODEAC | MODETRAN | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) ? 1 : 0; T0 = Vbs - pParam->BSIM3v0vbsc - 0.001; T1 = sqrt(T0 * T0 - 0.004 * pParam->BSIM3v0vbsc); Vbseff = pParam->BSIM3v0vbsc + 0.5 * (T0 + T1); dVbseff_dVb = 0.5 * (1.0 + T0 / T1); if (Vbseff > 0.0) { T0 = pParam->BSIM3v0phi / (pParam->BSIM3v0phi + Vbseff); Phis = pParam->BSIM3v0phi * T0; dPhis_dVb = -T0 * T0; sqrtPhis = pParam->BSIM3v0phis3 / (pParam->BSIM3v0phi + 0.5 * Vbseff); dsqrtPhis_dVb = -0.5 * sqrtPhis * sqrtPhis / pParam->BSIM3v0phis3; } else { Phis = pParam->BSIM3v0phi - Vbseff; dPhis_dVb = -1.0; sqrtPhis = sqrt(Phis); dsqrtPhis_dVb = -0.5 / sqrtPhis; } Xdep = pParam->BSIM3v0Xdep0 * sqrtPhis / pParam->BSIM3v0sqrtPhi; dXdep_dVb = (pParam->BSIM3v0Xdep0 / pParam->BSIM3v0sqrtPhi) * dsqrtPhis_dVb; Leff = pParam->BSIM3v0leff; /* Vth Calculation */ if ((T1 = 1.0 + pParam->BSIM3v0dvt2 * Vbseff) < 1.0e-10) T1 = 1.0E-10; if ((T2 = 1.0 + pParam->BSIM3v0dvt2w * Vbseff) < 1.0E-10) T2 = 1.0E-10; T3 = sqrt(Xdep); lt1 = model->BSIM3v0factor1 * T3 * T1; dlt1_dVb = model->BSIM3v0factor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * pParam->BSIM3v0dvt2); ltw = model->BSIM3v0factor1 * T3 * T2; dltw_dVb = model->BSIM3v0factor1 * (0.5 / T3 * T2 * dXdep_dVb + T3 * pParam->BSIM3v0dvt2w); T0 = -0.5 * pParam->BSIM3v0dvt1 * Leff / lt1; if (T0 > -EXP_THRESHOLD) { T1 = exp(T0); dT1_dVb = -T0 / lt1 * T1 * dlt1_dVb; } else { T1 = MIN_EXP; dT1_dVb = 0.0; } Theta0 = T1 * (1.0 + 2.0 * T1); dTheta0_dVb = (1.0 + 4.0 * T1) * dT1_dVb; here->BSIM3v0thetavth = pParam->BSIM3v0dvt0 * Theta0; T0 = pParam->BSIM3v0vbi - pParam->BSIM3v0phi; Delt_vth = here->BSIM3v0thetavth * T0; dDelt_vth_dVb = pParam->BSIM3v0dvt0 * dTheta0_dVb * T0; T0 = -0.5 * pParam->BSIM3v0dvt1w * pParam->BSIM3v0weff * Leff / ltw; if (T0 > -EXP_THRESHOLD) { T1 = exp(T0); dT1_dVb = -T0 / ltw * T1 * dltw_dVb; } else { T1 = MIN_EXP; dT1_dVb = 0.0; } T2 = T1 * (1.0 + 2.0 * T1); dT2_dVb = (1.0 + 4.0 * T1) * dT1_dVb; T0 = pParam->BSIM3v0dvt0w * T2; T1 = pParam->BSIM3v0vbi - pParam->BSIM3v0phi; T2 = T0 * T1; dT2_dVb = pParam->BSIM3v0dvt0w * dT2_dVb * T1; TempRatio = ckt->CKTtemp / model->BSIM3v0tnom - 1.0; T0 = sqrt(1.0 + pParam->BSIM3v0nlx / Leff); T1 = pParam->BSIM3v0k1 * (T0 - 1.0) * pParam->BSIM3v0sqrtPhi + (pParam->BSIM3v0kt1 + pParam->BSIM3v0kt1l / Leff + pParam->BSIM3v0kt2 * Vbseff) * TempRatio; tmp2 = model->BSIM3v0tox / (pParam->BSIM3v0weff + pParam->BSIM3v0w0) * pParam->BSIM3v0phi; dDIBL_Sft_dVd = (pParam->BSIM3v0eta0 + pParam->BSIM3v0etab * Vbseff) * pParam->BSIM3v0theta0vb0; DIBL_Sft = dDIBL_Sft_dVd * Vds; Vth = model->BSIM3v0type * pParam->BSIM3v0vth0 + pParam->BSIM3v0k1 * (sqrtPhis - pParam->BSIM3v0sqrtPhi) - pParam->BSIM3v0k2 * Vbseff - Delt_vth - T2 + (pParam->BSIM3v0k3 + pParam->BSIM3v0k3b * Vbseff) * tmp2 + T1 - DIBL_Sft; here->BSIM3v0von = Vth; dVth_dVb = pParam->BSIM3v0k1 * dsqrtPhis_dVb - pParam->BSIM3v0k2 - dDelt_vth_dVb - dT2_dVb + pParam->BSIM3v0k3b * tmp2 - pParam->BSIM3v0etab * Vds * pParam->BSIM3v0theta0vb0 + pParam->BSIM3v0kt2 * TempRatio; dVth_dVd = -dDIBL_Sft_dVd; /* Calculate n */ tmp2 = pParam->BSIM3v0nfactor * EPSSI / Xdep; tmp3 = pParam->BSIM3v0cdsc + pParam->BSIM3v0cdscb * Vbseff + pParam->BSIM3v0cdscd * Vds; n = 1.0 + (tmp2 + tmp3 * Theta0 + pParam->BSIM3v0cit) / model->BSIM3v0cox; if (n > 1.0) { dn_dVb = (-tmp2 / Xdep * dXdep_dVb + tmp3 * dTheta0_dVb + pParam->BSIM3v0cdscb * Theta0) / model->BSIM3v0cox; dn_dVd = pParam->BSIM3v0cdscd * Theta0 / model->BSIM3v0cox; } else { n = 1.0; dn_dVb = dn_dVd = 0.0; } /* Poly Gate Si Depletion Effect */ T0 = pParam->BSIM3v0vfb + pParam->BSIM3v0phi; if (model->BSIM3v0ngateGiven && (Vgs > T0)) { T1 = 1.0e6 * Charge_q * EPSSI * pParam->BSIM3v0ngate / (model->BSIM3v0cox * model->BSIM3v0cox); T4 = sqrt(1.0 + 2.0 * (Vgs - T0) / T1); T2 = T1 * (T4 - 1.0); T3 = 0.5 * T2 * T2 / T1; if (T3 < 1.12) { Vgs_eff = T0 + T2; dVgs_eff_dVg = 1.0 / T4; } else { Vgs_eff = Vgs - 1.12; dVgs_eff_dVg = 1.0; } } else { Vgs_eff = Vgs; dVgs_eff_dVg = 1.0; } Vgst = Vgs_eff - Vth; /* Effective Vgst (Vgsteff) Calculation */ Vtm = model->BSIM3v0vtm; T10 = 2.0 * n * Vtm; VgstNVt = Vgst / T10; if (VgstNVt < -EXP_THRESHOLD) { T1 = T10 * MIN_EXP; dT1_dVg = dT1_dVd = dT1_dVb = 0.0; } else if (VgstNVt > EXP_THRESHOLD) { T1 = Vgst; dT1_dVg = dVgs_eff_dVg; dT1_dVd = -dVth_dVd; dT1_dVb = -dVth_dVb; } else { ExpVgst = exp(VgstNVt); T1 = T10 * log(1.0 + ExpVgst); dT1_dVg = ExpVgst / (1.0 + ExpVgst); dT1_dVb = -dT1_dVg * (dVth_dVb + Vgst / n * dn_dVb) + T1 / n * dn_dVb; dT1_dVd = -dT1_dVg * (dVth_dVd + Vgst / n * dn_dVd) + T1 / n * dn_dVd; dT1_dVg *= dVgs_eff_dVg; } T2 = model->BSIM3v0tox / (pParam->BSIM3v0weff + pParam->BSIM3v0w0); ExpArg = (2.0 * pParam->BSIM3v0voff - Vgst) / T10; if (ExpArg < -EXP_THRESHOLD) { T2 = 1.0; dT2_dVg = dT2_dVd = dT2_dVb = 0.0; } else if (ExpArg > EXP_THRESHOLD) { T2 = 1.0 + 2.0 * n * model->BSIM3v0cox / pParam->BSIM3v0cdep0 * MAX_EXP; dT2_dVg = dT2_dVd = dT2_dVb = 0.0; } else { dT2_dVg = -model->BSIM3v0cox / Vtm / pParam->BSIM3v0cdep0 * exp(ExpArg); T2 = 1.0 - T10 * dT2_dVg; dT2_dVd = -dT2_dVg * (dVth_dVd - 2.0 * Vtm * ExpArg * dn_dVd) + (T2 - 1.0) / n * dn_dVd; dT2_dVb = -dT2_dVg * (dVth_dVb - 2.0 * Vtm * ExpArg * dn_dVb) + (T2 - 1.0) / n * dn_dVb; dT2_dVg *= dVgs_eff_dVg; } Vgsteff = T1 / T2; dVgsteff_dVg = (T2 * dT1_dVg - T1 * dT2_dVg) / (T2 * T2); dVgsteff_dVd = (T2 * dT1_dVd - T1 * dT2_dVd) / (T2 * T2); dVgsteff_dVb = (T2 * dT1_dVb - T1 * dT2_dVb) / (T2 * T2); /* Calculate Effective Channel Geometry */ Weff = pParam->BSIM3v0weff - 2.0 * (pParam->BSIM3v0dwg * Vgsteff + pParam->BSIM3v0dwb * (sqrtPhis - pParam->BSIM3v0sqrtPhi)); dWeff_dVg = -2.0 * pParam->BSIM3v0dwg; dWeff_dVb = -2.0 * pParam->BSIM3v0dwb * dsqrtPhis_dVb; if (Weff < 1.0e-8) { Weff = 1.0e-8; dWeff_dVg = dWeff_dVb = 0; } Rds = pParam->BSIM3v0rds0 * (1.0 + pParam->BSIM3v0prwg * Vgsteff + pParam->BSIM3v0prwb * (sqrtPhis - pParam->BSIM3v0sqrtPhi)); if (Rds > 0.0) { dRds_dVg = pParam->BSIM3v0rds0 * pParam->BSIM3v0prwg; dRds_dVb = pParam->BSIM3v0rds0 * pParam->BSIM3v0prwb * dsqrtPhis_dVb; } else { Rds = dRds_dVg = dRds_dVb = 0.0; } WVCox = Weff * pParam->BSIM3v0vsattemp * model->BSIM3v0cox; WVCoxRds = WVCox * Rds; /* Calculate Abulk */ T0 = 1.0 / (1.0 + pParam->BSIM3v0keta * Vbseff); dT0_dVb = -pParam->BSIM3v0keta * T0 * T0; T1 = 0.5 * pParam->BSIM3v0k1 / sqrtPhis; dT1_dVb = -T1 / sqrtPhis * dsqrtPhis_dVb; tmp1 = Leff + 2.0 * sqrt(pParam->BSIM3v0xj * Xdep); T5 = Leff / tmp1; tmp2 = pParam->BSIM3v0a0 *T5; tmp3 = pParam->BSIM3v0weff + pParam->BSIM3v0b1; tmp4 = pParam->BSIM3v0b0 / tmp3; T2 = tmp2 + tmp4; dT2_dVb = -tmp2 / tmp1 * sqrt(pParam->BSIM3v0xj / Xdep) * dXdep_dVb; T6 = T5 * T5; T7 = T5 * T6; Abulk0 = T0 * (1.0 + T1 * T2); if (Abulk0 < 0.01) Abulk0= 0.01; T8 = pParam->BSIM3v0ags * pParam->BSIM3v0a0 * T7; dAbulk_dVg = -T1 * T0 * T8; Abulk = Abulk0 + dAbulk_dVg * Vgsteff; if (Abulk < 0.01) Abulk= 0.01; dAbulk0_dVb = T0 * T1 * dT2_dVb + T0 * T2 * dT1_dVb + (1.0 + T1 * T2) * dT0_dVb; dAbulk_dVb = dAbulk0_dVb - T8 * Vgsteff * (T1 * (3.0 * T0 * dT2_dVb / tmp2 + dT0_dVb) + T0 * dT1_dVb); /* Mobility calculation */ if (model->BSIM3v0mobMod == 1) { T0 = Vgsteff + Vth + Vth; T2 = pParam->BSIM3v0ua + pParam->BSIM3v0uc * Vbseff; T3 = T0 / model->BSIM3v0tox; Denomi = 1.0 + T3 * (T2 + pParam->BSIM3v0ub * T3); T1 = T2 / model->BSIM3v0tox + 2.0 * pParam->BSIM3v0ub * T3 / model->BSIM3v0tox; dDenomi_dVg = T1; dDenomi_dVd = T1 * 2.0 * dVth_dVd; dDenomi_dVb = T1 * 2.0 * dVth_dVb + pParam->BSIM3v0uc * T3; } else if (model->BSIM3v0mobMod == 2) { Denomi = 1.0 + Vgsteff / model->BSIM3v0tox * (pParam->BSIM3v0ua + pParam->BSIM3v0uc * Vbseff + pParam->BSIM3v0ub * Vgsteff / model->BSIM3v0tox); T1 = (pParam->BSIM3v0ua + pParam->BSIM3v0uc * Vbseff) / model->BSIM3v0tox + 2.0 * pParam->BSIM3v0ub / (model->BSIM3v0tox * model->BSIM3v0tox) * Vgsteff; dDenomi_dVg = T1; dDenomi_dVd = 0.0; dDenomi_dVb = Vgsteff * pParam->BSIM3v0uc / model->BSIM3v0tox; } else { T0 = Vgsteff + Vth + Vth; T2 = 1.0 + pParam->BSIM3v0uc * Vbseff; T3 = T0 / model->BSIM3v0tox; T4 = T3 * (pParam->BSIM3v0ua + pParam->BSIM3v0ub * T3); Denomi = 1.0 + T4 * T2; T1 = (pParam->BSIM3v0ua / model->BSIM3v0tox + 2.0 * pParam->BSIM3v0ub * T3 / model->BSIM3v0tox) * T2; dDenomi_dVg = T1; dDenomi_dVd = T1 * 2.0 * dVth_dVd; dDenomi_dVb = T1 * 2.0 * dVth_dVb + pParam->BSIM3v0uc * T4; } here->BSIM3v0ueff = ueff = pParam->BSIM3v0u0temp / Denomi; dueff_dVg = -ueff / Denomi * dDenomi_dVg; dueff_dVd = -ueff / Denomi * dDenomi_dVd; dueff_dVb = -ueff / Denomi * dDenomi_dVb; /* Saturation Drain Voltage Vdsat */ Esat = 2.0 * pParam->BSIM3v0vsattemp / ueff; EsatL = Esat * Leff; T0 = -EsatL /ueff; dEsatL_dVg = T0 * dueff_dVg; dEsatL_dVd = T0 * dueff_dVd; dEsatL_dVb = T0 * dueff_dVb; a1 = pParam->BSIM3v0a1; if ((Pmos_factor = a1 * Vgsteff + pParam->BSIM3v0a2) > 1.0) { Pmos_factor = 1.0; a1 = 0.0; } Vgst2Vtm = Vgsteff + 2.0 * Vtm; if ((Rds == 0.0) && (Pmos_factor == 1.0)) { T0 = 1.0 / (Abulk * EsatL + Vgst2Vtm); here->BSIM3v0vdsat = Vdsat = EsatL * Vgst2Vtm * T0; dT0_dVg = -(Abulk * dEsatL_dVg +EsatL*dAbulk_dVg+ 1.0) * T0 * T0; dT0_dVd = -(Abulk * dEsatL_dVd) * T0 * T0; dT0_dVb = -(Abulk * dEsatL_dVb + dAbulk_dVb * EsatL) * T0 * T0; dVdsat_dVg = EsatL * Vgst2Vtm * dT0_dVg + EsatL * T0 + Vgst2Vtm * T0 * dEsatL_dVg; dVdsat_dVd = EsatL * Vgst2Vtm * dT0_dVd + Vgst2Vtm * T0 * dEsatL_dVd; dVdsat_dVb = EsatL * Vgst2Vtm * dT0_dVb + Vgst2Vtm * T0 * dEsatL_dVb; } else { tmp1 = a1 / (Pmos_factor * Pmos_factor); if (Rds > 0) { tmp2 = dRds_dVg / Rds + dWeff_dVg / Weff; tmp3 = dRds_dVb / Rds + dWeff_dVb / Weff; } else { tmp2 = dWeff_dVg / Weff; tmp3 = dWeff_dVb / Weff; } T0 = 2.0 * Abulk * (Abulk * WVCoxRds - 1.0 + 1.0 / Pmos_factor); dT0_dVg = 2.0 * (Abulk * Abulk * WVCoxRds * tmp2 - Abulk * tmp1 + (2.0 * WVCoxRds * Abulk + 1.0 / Pmos_factor - 1.0) * dAbulk_dVg); dT0_dVb = 2.0 * (Abulk * Abulk * WVCoxRds * (2.0 / Abulk * dAbulk_dVb + tmp3) + (1.0 / Pmos_factor - 1.0) * dAbulk_dVb); dT0_dVd= 0.0; T1 = Vgst2Vtm * (2.0 / Pmos_factor - 1.0) + Abulk * EsatL + 3.0 * Abulk * Vgst2Vtm * WVCoxRds; dT1_dVg = (2.0 / Pmos_factor - 1.0) - 2.0 * Vgst2Vtm * tmp1 + Abulk * dEsatL_dVg + EsatL * dAbulk_dVg + 3.0 * (Abulk * WVCoxRds + Abulk * Vgst2Vtm * WVCoxRds * tmp2 + Vgst2Vtm * WVCoxRds * dAbulk_dVg); dT1_dVb = Abulk * dEsatL_dVb + EsatL * dAbulk_dVb + 3.0 * (Vgst2Vtm * WVCoxRds * dAbulk_dVb + Abulk * Vgst2Vtm * WVCoxRds * tmp3); dT1_dVd = Abulk * dEsatL_dVd; T2 = Vgst2Vtm * (EsatL + 2.0 * Vgst2Vtm * WVCoxRds); dT2_dVg = EsatL + Vgst2Vtm * dEsatL_dVg + Vgst2Vtm * WVCoxRds * (4.0 + 2.0 * Vgst2Vtm * tmp2); dT2_dVb = Vgst2Vtm * dEsatL_dVb + 2.0 * Vgst2Vtm * WVCoxRds * Vgst2Vtm * tmp3; dT2_dVd = Vgst2Vtm * dEsatL_dVd; T3 = sqrt(T1 * T1 - 2.0 * T0 * T2); here->BSIM3v0vdsat = Vdsat = (T1 - T3) / T0; dT3_dVg = (T1 * dT1_dVg - 2.0 * (T0 * dT2_dVg + T2 * dT0_dVg)) / T3; dT3_dVd = (T1 * dT1_dVd - 2.0 * (T0 * dT2_dVd + T2 * dT0_dVd)) / T3; dT3_dVb = (T1 * dT1_dVb - 2.0 * (T0 * dT2_dVb + T2 * dT0_dVb)) / T3; T4 = T1 - T3; dT4_dVg = - dT1_dVg - dT3_dVg; dT4_dVd = - dT1_dVd - dT3_dVd; dT4_dVb = - dT1_dVb - dT3_dVb; dVdsat_dVg = (dT1_dVg - (T1 * dT1_dVg - dT0_dVg * T2 - T0 * dT2_dVg) / T3 - Vdsat * dT0_dVg) / T0; dVdsat_dVb = (dT1_dVb - (T1 * dT1_dVb - dT0_dVb * T2 - T0 * dT2_dVb) / T3 - Vdsat * dT0_dVb) / T0; dVdsat_dVd = (dT1_dVd - (T1 * dT1_dVd - T0 * dT2_dVd) / T3) / T0; } /* Effective Vds (Vdseff) Calculation */ T1 = Vdsat - Vds - pParam->BSIM3v0delta; dT1_dVg = dVdsat_dVg; dT1_dVd = dVdsat_dVd - 1.0; dT1_dVb = dVdsat_dVb; T2 = sqrt(T1 * T1 + 4.0 * pParam->BSIM3v0delta * Vdsat); T0 = T1 / T2; T3 = 2.0 * pParam->BSIM3v0delta / T2; dT2_dVg = T0 * dT1_dVg + T3 * dVdsat_dVg; dT2_dVd = T0 * dT1_dVd + T3 * dVdsat_dVd; dT2_dVb = T0 * dT1_dVb + T3 * dVdsat_dVb; Vdseff = Vdsat - 0.5 * (T1 + T2); dVdseff_dVg = dVdsat_dVg - 0.5 * (dT1_dVg + dT2_dVg); dVdseff_dVd = dVdsat_dVd - 0.5 * (dT1_dVd + dT2_dVd); dVdseff_dVb = dVdsat_dVb - 0.5 * (dT1_dVb + dT2_dVb); /* Calculate VAsat */ tmp1 = a1 / (Pmos_factor * Pmos_factor); if (Rds > 0) { tmp2 = dRds_dVg / Rds + dWeff_dVg / Weff; tmp3 = dRds_dVb / Rds + dWeff_dVb / Weff; } else { tmp2 = dWeff_dVg / Weff; tmp3 = dWeff_dVb / Weff; } tmp4 = 1.0 - 0.5 * Abulk * Vdsat / Vgst2Vtm; T0 = EsatL + Vdsat + 2.0 * WVCoxRds * Vgsteff * tmp4; dT0_dVg = dEsatL_dVg + dVdsat_dVg + 2.0 * WVCoxRds * tmp4 * (1.0 + tmp2 * Vgsteff) - WVCoxRds * Vgsteff / Vgst2Vtm * (Abulk * dVdsat_dVg - Abulk * Vdsat / Vgst2Vtm + Vdsat * dAbulk_dVg); dT0_dVb = dEsatL_dVb + dVdsat_dVb + 2.0 * WVCoxRds * tmp4 * tmp3 * Vgsteff - WVCoxRds * Vgsteff / Vgst2Vtm * (dAbulk_dVb * Vdsat + Abulk * dVdsat_dVb); dT0_dVd = dEsatL_dVd + dVdsat_dVd - WVCoxRds * Vgsteff / Vgst2Vtm * Abulk * dVdsat_dVd; T1 = 2.0 / Pmos_factor - 1.0 + WVCoxRds * Abulk; dT1_dVg = -2.0 * tmp1 + WVCoxRds *(Abulk * tmp2+ dAbulk_dVg); dT1_dVb = dAbulk_dVb * WVCoxRds + Abulk * WVCoxRds * tmp3; Vasat = T0 / T1; dVasat_dVg = (dT0_dVg - T0 / T1 * dT1_dVg) / T1; dVasat_dVb = (dT0_dVb - T0 / T1 * dT1_dVb) / T1; dVasat_dVd = dT0_dVd / T1; diffVds = Vds - Vdseff; /* Calculate VACLM */ if (pParam->BSIM3v0pclm > 0.0) { T0 = 1.0 / (pParam->BSIM3v0pclm * Abulk * pParam->BSIM3v0litl); dT0_dVb = -T0 / Abulk * dAbulk_dVb; dT0_dVg= - T0/Abulk*dAbulk_dVg; T2 = Vgsteff / EsatL; T1 = Leff * (Abulk + T2); dT1_dVg = Leff * ((1.0 - T2 * dEsatL_dVg) / EsatL+dAbulk_dVg); dT1_dVb = Leff * (dAbulk_dVb - T2 * dEsatL_dVb / EsatL); dT1_dVd = -T2 * dEsatL_dVd / Esat; VACLM = T0 * T1 * diffVds; dVACLM_dVg = T0 * dT1_dVg * diffVds - T0 * T1 * dVdseff_dVg + T1 * diffVds * dT0_dVg; dVACLM_dVb = (dT0_dVb * T1 + T0 * dT1_dVb) * diffVds - T0 * T1 * dVdseff_dVb; dVACLM_dVd = T0 * dT1_dVd * diffVds + T0 * T1 * (1.0 - dVdseff_dVd); } else { VACLM = MAX_EXP; dVACLM_dVd = dVACLM_dVg = dVACLM_dVb = 0.0; } /* Calculate VADIBL */ if (pParam->BSIM3v0thetaRout > 0.0) { T0 = Vgst2Vtm * Abulk * Vdsat; dT0_dVg = Vgst2Vtm * Abulk * dVdsat_dVg + Abulk * Vdsat + Vgst2Vtm * Vdsat * dAbulk_dVg; dT0_dVb = Vgst2Vtm * (dAbulk_dVb * Vdsat + Abulk * dVdsat_dVb); dT0_dVd = Vgst2Vtm * Abulk * dVdsat_dVd; T1 = Vgst2Vtm + Abulk * Vdsat; dT1_dVg = 1.0 + Abulk * dVdsat_dVg + Vdsat * dAbulk_dVg; dT1_dVb = Abulk * dVdsat_dVb + dAbulk_dVb * Vdsat; dT1_dVd = Abulk * dVdsat_dVd; T2 = pParam->BSIM3v0thetaRout * (1.0 + pParam->BSIM3v0pdiblb * Vbseff); VADIBL = (Vgst2Vtm - T0 / T1) / T2; dVADIBL_dVg = (1.0 - dT0_dVg / T1 + T0 * dT1_dVg / (T1 * T1)) / T2; dVADIBL_dVb = ((-dT0_dVb / T1 + T0 * dT1_dVb / (T1 * T1)) - VADIBL * pParam->BSIM3v0thetaRout * pParam->BSIM3v0pdiblb) / T2; dVADIBL_dVd = (-dT0_dVd / T1 + T0 * dT1_dVd / (T1 * T1)) / T2; } else { VADIBL = MAX_EXP; dVADIBL_dVd = dVADIBL_dVg = dVADIBL_dVb = 0.0; } /* Calculate VA */ T0 = 1.0 + pParam->BSIM3v0pvag * Vgsteff / EsatL; dT0_dVg = pParam->BSIM3v0pvag * (1.0 - Vgsteff * dEsatL_dVg / EsatL) / EsatL; dT0_dVb = -pParam->BSIM3v0pvag * Vgsteff * dEsatL_dVb / EsatL / EsatL; dT0_dVd = -pParam->BSIM3v0pvag * Vgsteff * dEsatL_dVd / EsatL / EsatL; tmp1 = VACLM * VACLM; tmp2 = VADIBL * VADIBL; tmp3 = VACLM + VADIBL; T1 = VACLM * VADIBL / tmp3; tmp3 *= tmp3; dT1_dVg = (tmp1 * dVADIBL_dVg + tmp2 * dVACLM_dVg) / tmp3; dT1_dVd = (tmp1 * dVADIBL_dVd + tmp2 * dVACLM_dVd) / tmp3; dT1_dVb = (tmp1 * dVADIBL_dVb + tmp2 * dVACLM_dVb) / tmp3; Va = Vasat + T0 * T1; dVa_dVg = dVasat_dVg + T1 * dT0_dVg + T0 * dT1_dVg; dVa_dVd = dVasat_dVd + T1 * dT0_dVd + T0 * dT1_dVd; dVa_dVb = dVasat_dVb + T1 * dT0_dVb + T0 * dT1_dVb; /* Calculate VASCBE */ if ((diffVds) && ((T0 = pParam->BSIM3v0pscbe1 * pParam->BSIM3v0litl / diffVds) > 0.0) && (T0 < EXP_THRESHOLD)) { VASCBE = Leff * exp(T0) / pParam->BSIM3v0pscbe2; T1 = T0 * VASCBE / diffVds; dVASCBE_dVg = T1 * dVdseff_dVg; dVASCBE_dVd = -T1 * (1.0 - dVdseff_dVd); dVASCBE_dVb = T1 * dVdseff_dVb; } else { VASCBE = MAX_EXP*Leff/pParam->BSIM3v0pscbe2; dVASCBE_dVg = dVASCBE_dVd = dVASCBE_dVb = 0.0; } /* Calculate Ids */ CoxWovL = model->BSIM3v0cox * Weff / Leff; beta = ueff * CoxWovL; dbeta_dVg = CoxWovL * dueff_dVg + beta * dWeff_dVg / Weff; dbeta_dVd = CoxWovL * dueff_dVd; dbeta_dVb = CoxWovL * dueff_dVb + beta * dWeff_dVb / Weff; T0 = 1.0 - 0.5 * Abulk * Vdseff / Vgst2Vtm; dT0_dVg = -0.5 * (Abulk * dVdseff_dVg - Abulk * Vdseff / Vgst2Vtm+Vdseff*dAbulk_dVg) / Vgst2Vtm; dT0_dVd = -0.5 * Abulk * dVdseff_dVd / Vgst2Vtm; dT0_dVb = -0.5 * (Abulk * dVdseff_dVb + dAbulk_dVb * Vdseff) / Vgst2Vtm; fgche1 = Vgsteff * T0; dfgche1_dVg = Vgsteff * dT0_dVg + T0; dfgche1_dVd = Vgsteff * dT0_dVd; dfgche1_dVb = Vgsteff * dT0_dVb; fgche2 = 1.0 + Vdseff / EsatL; dfgche2_dVg = (dVdseff_dVg - Vdseff / EsatL * dEsatL_dVg) / EsatL; dfgche2_dVd = (dVdseff_dVd - Vdseff / EsatL * dEsatL_dVd) / EsatL; dfgche2_dVb = (dVdseff_dVb - Vdseff / EsatL * dEsatL_dVb) / EsatL; gche = beta * fgche1 / fgche2; dgche_dVg = (beta * dfgche1_dVg + fgche1 * dbeta_dVg - gche * dfgche2_dVg) / fgche2; dgche_dVd = (beta * dfgche1_dVd + fgche1 * dbeta_dVd - gche * dfgche2_dVd) / fgche2; dgche_dVb = (beta * dfgche1_dVb + fgche1 * dbeta_dVb - gche * dfgche2_dVb) / fgche2; T0 = 1.0 + gche * Rds; Idl = gche * Vdseff / T0; dIdl_dVg = (gche * dVdseff_dVg + Vdseff * dgche_dVg / T0) / T0 - Idl * gche / T0 * dRds_dVg ; dIdl_dVd = (gche * dVdseff_dVd + Vdseff * dgche_dVd / T0) / T0; dIdl_dVb = (gche * dVdseff_dVb + Vdseff * dgche_dVb / T0 - Idl * dRds_dVb * gche) / T0; T0 = 1.0 + diffVds / Va; Idsa = Idl * T0; dIdsa_dVg = T0 * dIdl_dVg - Idl * (dVdseff_dVg + diffVds / Va * dVa_dVg) / Va; dIdsa_dVd = T0 * dIdl_dVd + Idl * (1.0 - dVdseff_dVd - diffVds / Va * dVa_dVd) / Va; dIdsa_dVb = T0 * dIdl_dVb - Idl * (dVdseff_dVb + diffVds / Va * dVa_dVb) / Va; T0 = 1.0 + diffVds / VASCBE; Ids = Idsa * T0; Gm = T0 * dIdsa_dVg - Idsa * (dVdseff_dVg + diffVds / VASCBE * dVASCBE_dVg) / VASCBE; Gds = T0 * dIdsa_dVd + Idsa * (1.0 - dVdseff_dVd - diffVds / VASCBE * dVASCBE_dVd) / VASCBE; Gmb = T0 * dIdsa_dVb - Idsa * (dVdseff_dVb + diffVds / VASCBE * dVASCBE_dVb) / VASCBE; Gds += Gm * dVgsteff_dVd; Gmb += Gm * dVgsteff_dVb; Gm *= dVgsteff_dVg; Gmb *= dVbseff_dVb; /* calculate substrate current Isub */ if ((pParam->BSIM3v0alpha0 <= 0.0) || (pParam->BSIM3v0beta0 <= 0.0)) { Isub = Gbd = Gbb = Gbg = 0.0; } else { T2 = pParam->BSIM3v0alpha0 / Leff; if (diffVds<0.0) { diffVds=0.0; Vdseff=Vds; } /* added to avoid the hardwrae problem when Vds=0 */ if ((diffVds != 0.0) && ((T0 = -pParam->BSIM3v0beta0 / diffVds) > -EXP_THRESHOLD)) { T1 = T2 * diffVds * exp(T0); dT1_dVg = T1 / diffVds * (T0 - 1.0) * dVdseff_dVg; dT1_dVd = T1 / diffVds * (1.0 - T0) * (1.0 - dVdseff_dVd); dT1_dVb = T1 / diffVds * (T0 - 1.0) * dVdseff_dVb; } else { T1 = T2 * diffVds * MIN_EXP; dT1_dVg = -T2 * MIN_EXP * dVdseff_dVg; dT1_dVd = T2 * MIN_EXP * (1.0 - dVdseff_dVd); dT1_dVb = -T2 * MIN_EXP * dVdseff_dVb; } Isub = T1 * Idsa; Gbg = T1 * dIdsa_dVg + Idsa * dT1_dVg; Gbd = T1 * dIdsa_dVd + Idsa * dT1_dVd; Gbb = T1 * dIdsa_dVb + Idsa * dT1_dVb; Gbd += Gbg * dVgsteff_dVd; Gbb += Gbg * dVgsteff_dVb; Gbg *= dVgsteff_dVg; Gbg *= dVbseff_dVb; } cdrain = Ids; here->BSIM3v0gds = Gds; here->BSIM3v0gm = Gm; here->BSIM3v0gmbs = Gmb; here->BSIM3v0gbbs = Gbb; here->BSIM3v0gbgs = Gbg; here->BSIM3v0gbds = Gbd; here->BSIM3v0csub = Isub - (Gbb * Vbseff + Gbd * Vds + Gbg * Vgs); /* Calculate Qinv for Noise analysis */ T1 = Vgsteff * (1.0 - 0.5 * Abulk * Vdseff / Vgst2Vtm); here->BSIM3v0qinv = -model->BSIM3v0cox * Weff * Leff * T1; if ((model->BSIM3v0xpart < 0) || (!ChargeComputationNeeded)) { qgate = qdrn = qsrc = qbulk = 0.0; here->BSIM3v0cggb = here->BSIM3v0cgsb = here->BSIM3v0cgdb = 0.0; here->BSIM3v0cdgb = here->BSIM3v0cdsb = here->BSIM3v0cddb = 0.0; here->BSIM3v0cbgb = here->BSIM3v0cbsb = here->BSIM3v0cbdb = 0.0; here->BSIM3v0cqdb = here->BSIM3v0cqsb = here->BSIM3v0cqgb = here->BSIM3v0cqbb = 0.0; here->BSIM3v0gtau = 0.0; goto finished; } else { if (Vbseff < 0.0) { VbseffCV = Vbseff; dVbseffCV_dVb = 1.0; } else { VbseffCV = pParam->BSIM3v0phi - Phis; dVbseffCV_dVb = -dPhis_dVb; } CoxWL = model->BSIM3v0cox * pParam->BSIM3v0weffCV * pParam->BSIM3v0leffCV; Vfb = Vth - pParam->BSIM3v0phi - pParam->BSIM3v0k1 * sqrtPhis; dVfb_dVb = dVth_dVb - pParam->BSIM3v0k1 * dsqrtPhis_dVb; dVfb_dVd = dVth_dVd; if ((VgstNVt > -EXP_THRESHOLD) && (VgstNVt < EXP_THRESHOLD)) { ExpVgst *= ExpVgst; Vgsteff = n * Vtm * log(1.0 + ExpVgst); dVgsteff_dVg = ExpVgst / (1.0 + ExpVgst); dVgsteff_dVd = -dVgsteff_dVg * (dVth_dVd + (Vgs_eff - Vth) / n * dn_dVd) + Vgsteff / n * dn_dVd; dVgsteff_dVb = -dVgsteff_dVg * (dVth_dVb + (Vgs_eff - Vth) / n * dn_dVb) + Vgsteff / n * dn_dVb; dVgsteff_dVg *= dVgs_eff_dVg; } if (model->BSIM3v0capMod == 1) { Arg1 = Vgs_eff - VbseffCV - Vfb; if (Arg1 <= 0.0) { qgate = CoxWL * (Arg1 - Vgsteff); Cgg = CoxWL * (dVgs_eff_dVg - dVgsteff_dVg); Cgd = -CoxWL * (dVfb_dVd + dVgsteff_dVd); Cgb = -CoxWL * (dVfb_dVb + dVbseffCV_dVb + dVgsteff_dVb); } else { T0 = 0.5 * pParam->BSIM3v0k1; T1 = sqrt(T0 * T0 + Arg1 - Vgsteff); qgate = CoxWL * pParam->BSIM3v0k1 * (T1 - T0); T2 = CoxWL * T0 / T1; Cgg = T2 * (dVgs_eff_dVg - dVgsteff_dVg); Cgd = -T2 * (dVfb_dVd + dVgsteff_dVd); Cgb = -T2 * (dVfb_dVb + dVbseffCV_dVb + dVgsteff_dVb); } qbulk = -qgate; Cbg = -Cgg; Cbd = -Cgd; Cbb = -Cgb; One_Third_CoxWL = CoxWL / 3.0; Two_Third_CoxWL = 2.0 * One_Third_CoxWL; AbulkCV = Abulk0 * pParam->BSIM3v0abulkCVfactor; dAbulkCV_dVb = pParam->BSIM3v0abulkCVfactor * dAbulk0_dVb; VdsatCV = Vgsteff / AbulkCV; if (VdsatCV <= Vds) { dVdsatCV_dVg = 1.0 / AbulkCV; dVdsatCV_dVb = -VdsatCV * dAbulkCV_dVb / AbulkCV; T0 = Vgsteff - VdsatCV / 3.0; dT0_dVg = 1.0 - dVdsatCV_dVg / 3.0; dT0_dVb = -dVdsatCV_dVb / 3.0; qgate += CoxWL * T0; Cgg1 = CoxWL * dT0_dVg; Cgb1 = CoxWL * dT0_dVb + Cgg1 * dVgsteff_dVb; Cgd1 = Cgg1 * dVgsteff_dVd; Cgg1 *= dVgsteff_dVg; Cgg += Cgg1; Cgb += Cgb1; Cgd += Cgd1; T0 = VdsatCV - Vgsteff; dT0_dVg = dVdsatCV_dVg - 1.0; dT0_dVb = dVdsatCV_dVb; qbulk += One_Third_CoxWL * T0; Cbg1 = One_Third_CoxWL * dT0_dVg; Cbb1 = One_Third_CoxWL * dT0_dVb + Cbg1 * dVgsteff_dVb; Cbd1 = Cbg1 * dVgsteff_dVd; Cbg1 *= dVgsteff_dVg; Cbg += Cbg1; Cbb += Cbb1; Cbd += Cbd1; if (model->BSIM3v0xpart > 0.5) T0 = -Two_Third_CoxWL; else if (model->BSIM3v0xpart < 0.5) T0 = -0.4 * CoxWL; else T0 = -One_Third_CoxWL; qsrc = T0 * Vgsteff; Csg = T0 * dVgsteff_dVg; Csb = T0 * dVgsteff_dVb; Csd = T0 * dVgsteff_dVd; Cgb *= dVbseff_dVb; Cbb *= dVbseff_dVb; Csb *= dVbseff_dVb; } else { T0 = AbulkCV * Vds; T1 = 12.0 * (Vgsteff - 0.5 * T0); T2 = Vds / T1; T3 = T0 * T2; dT3_dVg = -12.0 * T2 * T2 * AbulkCV; dT3_dVd = 6.0 * T0 * (4.0 * Vgsteff - T0) / T1 / T1 - 0.5; dT3_dVb = 12.0 * T2 * T2 * dAbulkCV_dVb * Vgsteff; qgate += CoxWL * (Vgsteff - 0.5 * Vds + T3); Cgg1 = CoxWL * (1.0 + dT3_dVg); Cgb1 = CoxWL * dT3_dVb + Cgg1 * dVgsteff_dVb; Cgd1 = CoxWL * dT3_dVd + Cgg1 * dVgsteff_dVd; Cgg1 *= dVgsteff_dVg; Cgg += Cgg1; Cgb += Cgb1; Cgd += Cgd1; qbulk += CoxWL * (1.0 - AbulkCV) * (0.5 * Vds - T3); Cbg1 = -CoxWL * ((1.0 - AbulkCV) * dT3_dVg); Cbb1 = -CoxWL * ((1.0 - AbulkCV) * dT3_dVb + (0.5 * Vds - T3) * dAbulkCV_dVb) + Cbg1 * dVgsteff_dVb; Cbd1 = -CoxWL * (1.0 - AbulkCV) * dT3_dVd + Cbg1 * dVgsteff_dVd; Cbg1 *= dVgsteff_dVg; Cbg += Cbg1; Cbb += Cbb1; Cbd += Cbd1; if (model->BSIM3v0xpart > 0.5) { /* 0/100 Charge petition model */ T1 = T1 + T1; qsrc = -CoxWL * (0.5 * Vgsteff + 0.25 * T0 - T0 * T0 / T1); Csg = -CoxWL * (0.5 + 24.0 * T0 * Vds / T1 / T1 * AbulkCV); Csb = -CoxWL * (0.25 * Vds * dAbulkCV_dVb - 12.0 * T0 * Vds / T1 / T1 * (4.0 * Vgsteff - T0) * dAbulkCV_dVb) + Csg * dVgsteff_dVb; Csd = -CoxWL * (0.25 * AbulkCV - 12.0 * AbulkCV * T0 / T1 / T1 * (4.0 * Vgsteff - T0)) + Csg * dVgsteff_dVd; Csg *= dVgsteff_dVg; } else if (model->BSIM3v0xpart < 0.5) { /* 40/60 Charge petition model */ T1 = T1 / 12.0; T2 = 0.5 * CoxWL / (T1 * T1); T3 = Vgsteff * (2.0 * T0 * T0 / 3.0 + Vgsteff * (Vgsteff - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T2 * T3; T4 = 4.0 / 3.0 * Vgsteff * (Vgsteff - T0) + 0.4 * T0 * T0; Csg = -2.0 * qsrc / T1 - T2 * (Vgsteff * (3.0 * Vgsteff - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0); Csb = (qsrc / T1 * Vds + T2 * T4 * Vds) * dAbulkCV_dVb + Csg * dVgsteff_dVb; Csd = (qsrc / T1 + T2 * T4) * AbulkCV + Csg * dVgsteff_dVd; Csg *= dVgsteff_dVg; } else { /* 50/50 Charge petition model */ qsrc = -0.5 * (qgate + qbulk); Csg = -0.5 * (Cgg1 + Cbg1); Csb = -0.5 * (Cgb1 + Cbb1); Csd = -0.5 * (Cgd1 + Cbd1); } Cgb *= dVbseff_dVb; Cbb *= dVbseff_dVb; Csb *= dVbseff_dVb; } qdrn = -(qgate + qbulk + qsrc); here->BSIM3v0cggb = Cgg; here->BSIM3v0cgsb = -(Cgg + Cgd + Cgb); here->BSIM3v0cgdb = Cgd; here->BSIM3v0cdgb = -(Cgg + Cbg + Csg); here->BSIM3v0cdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb + Csg + Csd + Csb); here->BSIM3v0cddb = -(Cgd + Cbd + Csd); here->BSIM3v0cbgb = Cbg; here->BSIM3v0cbsb = -(Cbg + Cbd + Cbb); here->BSIM3v0cbdb = Cbd; } else { V3 = Vfb - Vgs_eff + VbseffCV - DELTA_3; if (Vfb <= 0.0) { T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * Vfb); T2 = -DELTA_3 / T0; } else { T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * Vfb); T2 = DELTA_3 / T0; } T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = Vfb - 0.5 * (V3 + T0); dVfbeff_dVd = (1.0 - T1 - T2) * dVfb_dVd; dVfbeff_dVg = T1 * dVgs_eff_dVg; dVfbeff_dVb = (1.0 - T1 - T2) * dVfb_dVb - T1 * dVbseffCV_dVb; Qac0 = CoxWL * (Vfbeff - Vfb); dQac0_dVg = CoxWL * dVfbeff_dVg; dQac0_dVd = CoxWL * (dVfbeff_dVd - dVfb_dVd); dQac0_dVb = CoxWL * (dVfbeff_dVb - dVfb_dVb); T0 = 0.5 * pParam->BSIM3v0k1; T1 = sqrt(T0 * T0 + Vgs_eff - Vfbeff - VbseffCV - Vgsteff); Qsub0 = CoxWL * pParam->BSIM3v0k1 * (T1 - T0); T2 = CoxWL * T0 / T1; dQsub0_dVg = T2 * (dVgs_eff_dVg - dVfbeff_dVg - dVgsteff_dVg); dQsub0_dVd = -T2 * (dVfbeff_dVd + dVgsteff_dVd); dQsub0_dVb = -T2 * (dVfbeff_dVb + dVbseffCV_dVb + dVgsteff_dVb); One_Third_CoxWL = CoxWL / 3.0; Two_Third_CoxWL = 2.0 * One_Third_CoxWL; AbulkCV = Abulk0 * pParam->BSIM3v0abulkCVfactor; dAbulkCV_dVb = pParam->BSIM3v0abulkCVfactor * dAbulk0_dVb; VdsatCV = Vgsteff / AbulkCV; V4 = VdsatCV - Vds - DELTA_4; T0 = sqrt(V4 * V4 + 4.0 * DELTA_4 * VdsatCV); VdseffCV = VdsatCV - 0.5 * (V4 + T0); T1 = 0.5 * (1.0 + V4 / T0); T2 = DELTA_4 / T0; T3 = (1.0 - T1 - T2) / AbulkCV; dVdseffCV_dVg = T3; dVdseffCV_dVd = T1; dVdseffCV_dVb = -T3 * VdsatCV * dAbulkCV_dVb; T0 = AbulkCV * VdseffCV; T1 = 12.0 * (Vgsteff - 0.5 * T0 + 1e-20); T2 = VdseffCV / T1; T3 = T0 * T2; T4 = (1.0 - 12.0 * T2 * T2 * AbulkCV); T5 = (6.0 * T0 * (4.0 * Vgsteff - T0) / (T1 * T1) - 0.5); T6 = 12.0 * T2 * T2 * Vgsteff; qgate = CoxWL * (Vgsteff - 0.5 * VdseffCV + T3); Cgg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); Cgd1 = CoxWL * T5 * dVdseffCV_dVd + Cgg1 * dVgsteff_dVd; Cgb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Cgg1 * dVgsteff_dVb; Cgg1 *= dVgsteff_dVg; T7 = 1.0 - AbulkCV; qbulk = CoxWL * T7 * (0.5 * VdseffCV - T3); T4 = -T7 * (T4 - 1.0); T5 = -T7 * T5; T6 = -(T7 * T6 + (0.5 * VdseffCV - T3)); Cbg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); Cbd1 = CoxWL * T5 * dVdseffCV_dVd + Cbg1 * dVgsteff_dVd; Cbb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Cbg1 * dVgsteff_dVb; Cbg1 *= dVgsteff_dVg; if (model->BSIM3v0xpart > 0.5) { /* 0/100 Charge petition model */ T1 = T1 + T1; qsrc = -CoxWL * (0.5 * Vgsteff + 0.25 * T0 - T0 * T0 / T1); T7 = (4.0 * Vgsteff - T0) / (T1 * T1); T4 = -(0.5 + 24.0 * T0 * T0 / (T1 * T1)); T5 = -(0.25 * AbulkCV - 12.0 * AbulkCV * T0 * T7); T6 = -(0.25 * VdseffCV - 12.0 * T0 * VdseffCV * T7); Csg = CoxWL * (T4 + T5 * dVdseffCV_dVg); Csd = CoxWL * T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd; Csb = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Csg * dVgsteff_dVb; Csg *= dVgsteff_dVg; } else if (model->BSIM3v0xpart < 0.5) { /* 40/60 Charge petition model */ T1 = T1 / 12.0; T2 = 0.5 * CoxWL / (T1 * T1); T3 = Vgsteff * (2.0 * T0 * T0 / 3.0 + Vgsteff * (Vgsteff - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T2 * T3; T7 = 4.0 / 3.0 * Vgsteff * (Vgsteff - T0) + 0.4 * T0 * T0; T4 = -2.0 * qsrc / T1 - T2 * (Vgsteff * (3.0 * Vgsteff - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0); T5 = (qsrc / T1 + T2 * T7) * AbulkCV; T6 = (qsrc / T1 * VdseffCV + T2 * T7 * VdseffCV); Csg = (T4 + T5 * dVdseffCV_dVg); Csd = T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd; Csb = (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Csg * dVgsteff_dVb; Csg *= dVgsteff_dVg; } else { /* 50/50 Charge petition model */ qsrc = -0.5 * (qgate + qbulk); Csg = -0.5 * (Cgg1 + Cbg1); Csb = -0.5 * (Cgb1 + Cbb1); Csd = -0.5 * (Cgd1 + Cbd1); } qgate += Qac0 + Qsub0; qbulk -= (Qac0 + Qsub0); qdrn = -(qgate + qbulk + qsrc); Cgg = dQac0_dVg + dQsub0_dVg + Cgg1; Cgd = dQac0_dVd + dQsub0_dVd + Cgd1; Cgb = dQac0_dVb + dQsub0_dVb + Cgb1; Cbg = Cbg1 - dQac0_dVg - dQsub0_dVg; Cbd = Cbd1 - dQac0_dVd - dQsub0_dVd; Cbb = Cbb1 - dQac0_dVb - dQsub0_dVb; Cgb *= dVbseff_dVb; Cbb *= dVbseff_dVb; Csb *= dVbseff_dVb; here->BSIM3v0cggb = Cgg; here->BSIM3v0cgsb = -(Cgg + Cgd + Cgb); here->BSIM3v0cgdb = Cgd; here->BSIM3v0cdgb = -(Cgg + Cbg + Csg); here->BSIM3v0cdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb + Csg + Csd + Csb); here->BSIM3v0cddb = -(Cgd + Cbd + Csd); here->BSIM3v0cbgb = Cbg; here->BSIM3v0cbsb = -(Cbg + Cbd + Cbb); here->BSIM3v0cbdb = Cbd; } /* Non-quasi-static Model */ if (here->BSIM3v0nqsMod) { qcheq = -qbulk - qgate; qbulk = qgate = qdrn = qsrc = 0.0; here->BSIM3v0cqgb = -(here->BSIM3v0cggb + here->BSIM3v0cbgb); here->BSIM3v0cqdb = -(here->BSIM3v0cgdb + here->BSIM3v0cbdb); here->BSIM3v0cqsb = -(here->BSIM3v0cgsb + here->BSIM3v0cbsb); here->BSIM3v0cqbb = here->BSIM3v0cggb + here->BSIM3v0cgdb + here->BSIM3v0cgsb + here->BSIM3v0cbgb + here->BSIM3v0cbdb + here->BSIM3v0cbsb; here->BSIM3v0cggb = here->BSIM3v0cgsb = here->BSIM3v0cgdb = 0.0; here->BSIM3v0cdgb = here->BSIM3v0cdsb = here->BSIM3v0cddb = 0.0; here->BSIM3v0cbgb = here->BSIM3v0cbsb = here->BSIM3v0cbdb = 0.0; T0 = pParam->BSIM3v0leffCV * pParam->BSIM3v0leffCV; here->BSIM3v0tconst = pParam->BSIM3v0u0temp * pParam->BSIM3v0elm / CoxWL / T0; if (qcheq == 0.0) here->BSIM3v0tconst = 0.0; else if (qcheq < 0.0) here->BSIM3v0tconst = -here->BSIM3v0tconst; gtau_drift = fabs(here->BSIM3v0tconst * qcheq); gtau_diff = 16.0 * pParam->BSIM3v0u0temp * model->BSIM3v0vtm / T0; here->BSIM3v0gtau = gtau_drift + gtau_diff; *(ckt->CKTstate0 + here->BSIM3v0qcheq) = qcheq; if (ckt->CKTmode & MODEINITTRAN) *(ckt->CKTstate1 + here->BSIM3v0qcheq) = *(ckt->CKTstate0 + here->BSIM3v0qcheq); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM3v0qcheq); if (error) return (error); } else { here->BSIM3v0cqgb = here->BSIM3v0cqdb = here->BSIM3v0cqsb = here->BSIM3v0cqbb = 0.0; here->BSIM3v0gtau = 0.0; } } finished: /* returning Values to Calling Routine */ /* * COMPUTE EQUIVALENT DRAIN CURRENT SOURCE */ here->BSIM3v0cd = here->BSIM3v0mode * cdrain - here->BSIM3v0cbd; if (ChargeComputationNeeded) { /* charge storage elements * bulk-drain and bulk-source depletion capacitances * czbd : zero bias drain junction capacitance * czbs : zero bias source junction capacitance * czbdsw:zero bias drain junction sidewall capacitance * czbssw:zero bias source junction sidewall capacitance */ czbd = model->BSIM3v0unitAreaJctCap * here->BSIM3v0drainArea; czbs = model->BSIM3v0unitAreaJctCap * here->BSIM3v0sourceArea; czbdsw = model->BSIM3v0unitLengthSidewallJctCap * here->BSIM3v0drainPerimeter; czbssw = model->BSIM3v0unitLengthSidewallJctCap * here->BSIM3v0sourcePerimeter; PhiB = model->BSIM3v0bulkJctPotential; PhiBSW = model->BSIM3v0sidewallJctPotential; MJ = model->BSIM3v0bulkJctBotGradingCoeff; MJSW = model->BSIM3v0bulkJctSideGradingCoeff; /* Source Bulk Junction */ if (vbs == 0.0) { *(ckt->CKTstate0 + here->BSIM3v0qbs) = 0.0; here->BSIM3v0capbs = czbs + czbssw; } else if (vbs < 0.0) { if (czbs > 0.0) { arg = 1.0 - vbs / PhiB; if (MJ == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJ * log(arg)); *(ckt->CKTstate0 + here->BSIM3v0qbs) = PhiB * czbs * (1.0 - arg * sarg) / (1.0 - MJ); here->BSIM3v0capbs = czbs * sarg; } else { *(ckt->CKTstate0 + here->BSIM3v0qbs) = 0.0; here->BSIM3v0capbs = 0.0; } if (czbssw > 0.0) { arg = 1.0 - vbs / PhiBSW; if (MJSW == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSW * log(arg)); *(ckt->CKTstate0 + here->BSIM3v0qbs) += PhiBSW * czbssw * (1.0 - arg * sarg) / (1.0 - MJSW); here->BSIM3v0capbs += czbssw * sarg; } } else { *(ckt->CKTstate0+here->BSIM3v0qbs) = vbs * (czbs + czbssw) + vbs * vbs * (czbs * MJ * 0.5 / PhiB + czbssw * MJSW * 0.5 / PhiBSW); here->BSIM3v0capbs = czbs + czbssw + vbs * (czbs * MJ /PhiB + czbssw * MJSW / PhiBSW ); } /* Drain Bulk Junction */ if (vbd == 0.0) { *(ckt->CKTstate0 + here->BSIM3v0qbd) = 0.0; here->BSIM3v0capbd = czbd + czbdsw; } else if (vbd < 0.0) { if (czbd > 0.0) { arg = 1.0 - vbd / PhiB; if (MJ == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJ * log(arg)); *(ckt->CKTstate0 + here->BSIM3v0qbd) = PhiB * czbd * (1.0 - arg * sarg) / (1.0 - MJ); here->BSIM3v0capbd = czbd * sarg; } else { *(ckt->CKTstate0 + here->BSIM3v0qbd) = 0.0; here->BSIM3v0capbd = 0.0; } if (czbdsw > 0.0) { arg = 1.0 - vbd / PhiBSW; if (MJSW == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSW * log(arg)); *(ckt->CKTstate0 + here->BSIM3v0qbd) += PhiBSW * czbdsw * (1.0 - arg * sarg) / (1.0 - MJSW); here->BSIM3v0capbd += czbdsw * sarg; } } else { *(ckt->CKTstate0+here->BSIM3v0qbd) = vbd * (czbd + czbdsw) + vbd * vbd * (czbd * MJ * 0.5 / PhiB + czbdsw * MJSW * 0.5 / PhiBSW); here->BSIM3v0capbd = czbd + czbdsw + vbd * (czbd * MJ / PhiB + czbdsw * MJSW / PhiBSW ); } } /* * check convergence */ if ((here->BSIM3v0off == 0) || (!(ckt->CKTmode & MODEINITFIX))) { if (Check == 1) { ckt->CKTnoncon++; #ifndef NEWCONV } else { tol = ckt->CKTreltol * MAX(fabs(cdhat), fabs(here->BSIM3v0cd)) + ckt->CKTabstol; if (fabs(cdhat - here->BSIM3v0cd) >= tol) { ckt->CKTnoncon++; } else { tol = ckt->CKTreltol * MAX(fabs(cbhat), fabs(here->BSIM3v0cbs + here->BSIM3v0cbd)) + ckt->CKTabstol; if (fabs(cbhat - (here->BSIM3v0cbs + here->BSIM3v0cbd)) > tol) { ckt->CKTnoncon++; } } #endif /* NEWCONV */ } } *(ckt->CKTstate0 + here->BSIM3v0vbs) = vbs; *(ckt->CKTstate0 + here->BSIM3v0vbd) = vbd; *(ckt->CKTstate0 + here->BSIM3v0vgs) = vgs; *(ckt->CKTstate0 + here->BSIM3v0vds) = vds; /* bulk and channel charge plus overlaps */ if (!ChargeComputationNeeded) goto line850; #ifndef NOBYPASS line755: #endif ag0 = ckt->CKTag[0]; if (model->BSIM3v0capMod == 1) { if (vgd < 0.0) { T1 = sqrt(1.0 - 4.0 * vgd / pParam->BSIM3v0ckappa); cgdo = pParam->BSIM3v0cgdo + pParam->BSIM3v0weffCV * pParam->BSIM3v0cgdl / T1; qgdo = pParam->BSIM3v0cgdo * vgd - pParam->BSIM3v0weffCV * 0.5 * pParam->BSIM3v0cgdl * pParam->BSIM3v0ckappa * (T1 - 1.0); } else { cgdo = pParam->BSIM3v0cgdo + pParam->BSIM3v0weffCV * pParam->BSIM3v0cgdl; qgdo = (pParam->BSIM3v0weffCV * pParam->BSIM3v0cgdl + pParam->BSIM3v0cgdo) * vgd; } if (vgs < 0.0) { T1 = sqrt(1.0 - 4.0 * vgs / pParam->BSIM3v0ckappa); cgso = pParam->BSIM3v0cgso + pParam->BSIM3v0weffCV * pParam->BSIM3v0cgsl / T1; qgso = pParam->BSIM3v0cgso * vgs - pParam->BSIM3v0weffCV * 0.5 * pParam->BSIM3v0cgsl * pParam->BSIM3v0ckappa * (T1 - 1.0); } else { cgso = pParam->BSIM3v0cgso + pParam->BSIM3v0weffCV * pParam->BSIM3v0cgsl; qgso = (pParam->BSIM3v0weffCV * pParam->BSIM3v0cgsl + pParam->BSIM3v0cgso) * vgs; } } else { T0 = vgd + DELTA_1; T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); T3 = pParam->BSIM3v0weffCV * pParam->BSIM3v0cgdl; T4 = sqrt(1.0 - 4.0 * T2 / pParam->BSIM3v0ckappa); cgdo = pParam->BSIM3v0cgdo + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgdo = (pParam->BSIM3v0cgdo + T3) * vgd - T3 * (T2 + 0.5 * pParam->BSIM3v0ckappa * (T4 - 1.0)); T0 = vgs + DELTA_1; T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); T3 = pParam->BSIM3v0weffCV * pParam->BSIM3v0cgsl; T4 = sqrt(1.0 - 4.0 * T2 / pParam->BSIM3v0ckappa); cgso = pParam->BSIM3v0cgso + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgso = (pParam->BSIM3v0cgso + T3) * vgs - T3 * (T2 + 0.5 * pParam->BSIM3v0ckappa * (T4 - 1.0)); } if (here->BSIM3v0mode > 0) { gcdgb = (here->BSIM3v0cdgb - cgdo) * ag0; gcddb = (here->BSIM3v0cddb + here->BSIM3v0capbd + cgdo) * ag0; gcdsb = here->BSIM3v0cdsb * ag0; gcsgb = -(here->BSIM3v0cggb + here->BSIM3v0cbgb + here->BSIM3v0cdgb + cgso) * ag0; gcsdb = -(here->BSIM3v0cgdb + here->BSIM3v0cbdb + here->BSIM3v0cddb) * ag0; gcssb = (here->BSIM3v0capbs + cgso - (here->BSIM3v0cgsb + here->BSIM3v0cbsb + here->BSIM3v0cdsb)) * ag0; gcggb = (here->BSIM3v0cggb + cgdo + cgso + pParam->BSIM3v0cgbo ) * ag0; gcgdb = (here->BSIM3v0cgdb - cgdo) * ag0; gcgsb = (here->BSIM3v0cgsb - cgso) * ag0; gcbgb = (here->BSIM3v0cbgb - pParam->BSIM3v0cgbo) * ag0; gcbdb = (here->BSIM3v0cbdb - here->BSIM3v0capbd) * ag0; gcbsb = (here->BSIM3v0cbsb - here->BSIM3v0capbs) * ag0; gcqgb = here->BSIM3v0cqgb * ag0; gcqdb = here->BSIM3v0cqdb * ag0; gcqsb = here->BSIM3v0cqsb * ag0; gcqbb = here->BSIM3v0cqbb * ag0; T0 = here->BSIM3v0tconst * qdef; here->BSIM3v0gtg = T0 * here->BSIM3v0cqgb; here->BSIM3v0gtb = T0 * here->BSIM3v0cqbb; here->BSIM3v0gtd = T0 * here->BSIM3v0cqdb; here->BSIM3v0gts = T0 * here->BSIM3v0cqsb; sxpart = 0.6; dxpart = 0.4; /* compute total terminal charge */ qgd = qgdo; qgs = qgso; qgb = pParam->BSIM3v0cgbo * vgb; qgate += qgd + qgs + qgb; qbulk -= qgb; qdrn -= qgd; qsrc = -(qgate + qbulk + qdrn); } else { gcsgb = (here->BSIM3v0cdgb - cgso) * ag0; gcsdb = here->BSIM3v0cdsb * ag0; gcssb = (here->BSIM3v0cddb + here->BSIM3v0capbs + cgso) * ag0; gcdgb = -(here->BSIM3v0cggb + here->BSIM3v0cbgb + here->BSIM3v0cdgb + cgdo) * ag0; gcdsb = -(here->BSIM3v0cgdb + here->BSIM3v0cbdb + here->BSIM3v0cddb) * ag0; gcddb = (here->BSIM3v0capbd + cgdo - (here->BSIM3v0cgsb + here->BSIM3v0cbsb + here->BSIM3v0cdsb)) * ag0; gcggb = (here->BSIM3v0cggb + cgdo + cgso + pParam->BSIM3v0cgbo ) * ag0; gcgdb = (here->BSIM3v0cgsb - cgdo) * ag0; gcgsb = (here->BSIM3v0cgdb - cgso) * ag0; gcbgb = (here->BSIM3v0cbgb - pParam->BSIM3v0cgbo) * ag0; gcbdb = (here->BSIM3v0cbsb - here->BSIM3v0capbd) * ag0; gcbsb = (here->BSIM3v0cbdb - here->BSIM3v0capbs) * ag0; gcqgb = here->BSIM3v0cqgb * ag0; gcqdb = here->BSIM3v0cqsb * ag0; gcqsb = here->BSIM3v0cqdb * ag0; gcqbb = here->BSIM3v0cqbb * ag0; T0 = here->BSIM3v0tconst * qdef; here->BSIM3v0gtg = T0 * here->BSIM3v0cqgb; here->BSIM3v0gtb = T0 * here->BSIM3v0cqbb; here->BSIM3v0gtd = T0 * here->BSIM3v0cqdb; here->BSIM3v0gts = T0 * here->BSIM3v0cqsb; dxpart = 0.6; sxpart = 0.4; /* compute total terminal charge */ qgd = qgdo; qgs = qgso; qgb = pParam->BSIM3v0cgbo * vgb; qgate += qgd + qgs + qgb; qbulk -= qgb; qsrc = qdrn - qgs; qdrn = -(qgate + qbulk + qsrc); } here->BSIM3v0cgdo = cgdo; here->BSIM3v0cgso = cgso; /* added by Mansun 11/1/93 */ if (here->BSIM3v0nqsMod) { *(ckt->CKTstate0 + here->BSIM3v0qcdump) = qdef; if (ckt->CKTmode & MODEINITTRAN) *(ckt->CKTstate1 + here->BSIM3v0qcdump) = *(ckt->CKTstate0 + here->BSIM3v0qcdump); error = NIintegrate(ckt, &gqdef, &cqdef, 1.0, here->BSIM3v0qcdump); if (error) return (error); } else { gqdef = cqdef = 0.0; } if (ByPass) goto line860; /* End added by Mansun 11/1/93 */ *(ckt->CKTstate0 + here->BSIM3v0qg) = qgate; *(ckt->CKTstate0 + here->BSIM3v0qd) = qdrn - *(ckt->CKTstate0 + here->BSIM3v0qbd); *(ckt->CKTstate0 + here->BSIM3v0qb) = qbulk + *(ckt->CKTstate0 + here->BSIM3v0qbd) + *(ckt->CKTstate0 + here->BSIM3v0qbs); /* store small signal parameters */ if (ckt->CKTmode & MODEINITSMSIG) { goto line1000; } if (!ChargeComputationNeeded) goto line850; if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->BSIM3v0qb) = *(ckt->CKTstate0 + here->BSIM3v0qb); *(ckt->CKTstate1 + here->BSIM3v0qg) = *(ckt->CKTstate0 + here->BSIM3v0qg); *(ckt->CKTstate1 + here->BSIM3v0qd) = *(ckt->CKTstate0 + here->BSIM3v0qd); } error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM3v0qb); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM3v0qg); if (error) return(error); error = NIintegrate(ckt,&geq, &ceq, 0.0, here->BSIM3v0qd); if (error) return(error); goto line860; line850: /* initialize to zero charge conductance and current */ ceqqg = ceqqb = ceqqd = 0.0; cqcheq = cqdef = 0.0; gcdgb = gcddb = gcdsb = 0.0; gcsgb = gcsdb = gcssb = 0.0; gcggb = gcgdb = gcgsb = 0.0; gcbgb = gcbdb = gcbsb = 0.0; gcqgb = gcqdb = gcqsb = gcqbb = 0.0; here->BSIM3v0gtg = here->BSIM3v0gtd = here->BSIM3v0gts = here->BSIM3v0gtb = 0.0; gqdef = 0.0; sxpart = (1.0 - (dxpart = (here->BSIM3v0mode > 0) ? 0.4 : 0.6)); if (here->BSIM3v0nqsMod) here->BSIM3v0gtau = 16.0 * pParam->BSIM3v0u0temp * model->BSIM3v0vtm / Leff / Leff; else here->BSIM3v0gtau = 0.0; goto line900; line860: /* evaluate equivalent charge current */ cqgate = *(ckt->CKTstate0 + here->BSIM3v0cqg); cqbulk = *(ckt->CKTstate0 + here->BSIM3v0cqb); cqdrn = *(ckt->CKTstate0 + here->BSIM3v0cqd); ceqqg = cqgate - gcggb * vgb + gcgdb * vbd + gcgsb * vbs + (here->BSIM3v0gtg * vgb - here->BSIM3v0gtd * vbd - here->BSIM3v0gts * vbs); ceqqb = cqbulk - gcbgb * vgb + gcbdb * vbd + gcbsb * vbs; ceqqd = cqdrn - gcdgb * vgb + gcddb * vbd + gcdsb * vbs - dxpart * (here->BSIM3v0gtg * vgb - here->BSIM3v0gtd * vbd - here->BSIM3v0gts * vbs); cqcheq = *(ckt->CKTstate0 + here->BSIM3v0cqcheq) - (gcqgb * vgb - gcqdb * vbd - gcqsb * vbs) + (here->BSIM3v0gtg * vgb - here->BSIM3v0gtd * vbd - here->BSIM3v0gts * vbs); if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->BSIM3v0cqb) = *(ckt->CKTstate0 + here->BSIM3v0cqb); *(ckt->CKTstate1 + here->BSIM3v0cqg) = *(ckt->CKTstate0 + here->BSIM3v0cqg); *(ckt->CKTstate1 + here->BSIM3v0cqd) = *(ckt->CKTstate0 + here->BSIM3v0cqd); *(ckt->CKTstate1 + here->BSIM3v0cqcheq) = *(ckt->CKTstate0 + here->BSIM3v0cqcheq); *(ckt->CKTstate1 + here->BSIM3v0cqcdump) = *(ckt->CKTstate0 + here->BSIM3v0cqcdump); } /* * load current vector */ line900: if (here->BSIM3v0mode >= 0) { Gm = here->BSIM3v0gm; Gmbs = here->BSIM3v0gmbs; FwdSum = Gm + Gmbs; RevSum = 0.0; cdreq = model->BSIM3v0type * (cdrain - here->BSIM3v0gds * vds - Gm * vgs - Gmbs * vbs); ceqbs = -here->BSIM3v0csub; ceqbd = 0.0; gbspsp = -here->BSIM3v0gbds - here->BSIM3v0gbgs - here->BSIM3v0gbbs; gbbdp = -here->BSIM3v0gbds; gbbsp = here->BSIM3v0gbds + here->BSIM3v0gbgs + here->BSIM3v0gbbs; gbspg = here->BSIM3v0gbgs; gbspb = here->BSIM3v0gbbs; gbspdp = here->BSIM3v0gbds; gbdpdp = 0.0; gbdpg = 0.0; gbdpb = 0.0; gbdpsp = 0.0; } else { Gm = -here->BSIM3v0gm; Gmbs = -here->BSIM3v0gmbs; FwdSum = 0.0; RevSum = -(Gm + Gmbs); cdreq = -model->BSIM3v0type * (cdrain + here->BSIM3v0gds * vds + Gm * vgd + Gmbs * vbd); ceqbs = 0.0; ceqbd = -here->BSIM3v0csub; gbspsp = 0.0; gbbdp = here->BSIM3v0gbds + here->BSIM3v0gbgs + here->BSIM3v0gbbs; gbbsp = -here->BSIM3v0gbds; gbspg = 0.0; gbspb = 0.0; gbspdp = 0.0; gbdpdp = -here->BSIM3v0gbds - here->BSIM3v0gbgs - here->BSIM3v0gbbs; gbdpg = here->BSIM3v0gbgs; gbdpb = here->BSIM3v0gbbs; gbdpsp = here->BSIM3v0gbds; } if (model->BSIM3v0type > 0) { ceqbs += (here->BSIM3v0cbs - (here->BSIM3v0gbs - ckt->CKTgmin) * vbs); ceqbd += (here->BSIM3v0cbd - (here->BSIM3v0gbd - ckt->CKTgmin) * vbd); ceqqg = ceqqg; ceqqb = ceqqb; ceqqd = ceqqd; cqcheq = cqcheq; } else { ceqbs = -ceqbs - (here->BSIM3v0cbs - (here->BSIM3v0gbs - ckt->CKTgmin) * vbs); ceqbd = -ceqbd - (here->BSIM3v0cbd - (here->BSIM3v0gbd - ckt->CKTgmin) * vbd); ceqqg = -ceqqg; ceqqb = -ceqqb; ceqqd = -ceqqd; cqcheq = -cqcheq; } (*(ckt->CKTrhs + here->BSIM3v0gNode) -= m * ceqqg); (*(ckt->CKTrhs + here->BSIM3v0bNode) -= m * (ceqbs + ceqbd + ceqqb)); (*(ckt->CKTrhs + here->BSIM3v0dNodePrime) += m * (ceqbd - cdreq - ceqqd)); (*(ckt->CKTrhs + here->BSIM3v0sNodePrime) += m * (cdreq + ceqbs + ceqqg + ceqqb + ceqqd)); *(ckt->CKTrhs + here->BSIM3v0qNode) += m * (cqcheq - cqdef); /* * load y matrix */ (*(here->BSIM3v0DdPtr) += m * here->BSIM3v0drainConductance); (*(here->BSIM3v0GgPtr) += m * (gcggb - here->BSIM3v0gtg)); (*(here->BSIM3v0SsPtr) += m * here->BSIM3v0sourceConductance); (*(here->BSIM3v0BbPtr) += m * ((here->BSIM3v0gbd + here->BSIM3v0gbs - gcbgb - gcbdb - gcbsb) - here->BSIM3v0gbbs)); (*(here->BSIM3v0DPdpPtr) += m * ((here->BSIM3v0drainConductance + here->BSIM3v0gds + here->BSIM3v0gbd + RevSum + gcddb) + dxpart * here->BSIM3v0gtd + gbdpdp)); (*(here->BSIM3v0SPspPtr) += m * ((here->BSIM3v0sourceConductance + here->BSIM3v0gds + here->BSIM3v0gbs + FwdSum + gcssb) + sxpart * here->BSIM3v0gts + gbspsp)); (*(here->BSIM3v0DdpPtr) -= m * here->BSIM3v0drainConductance); (*(here->BSIM3v0GbPtr) -= m * (gcggb + gcgdb + gcgsb + here->BSIM3v0gtb)); (*(here->BSIM3v0GdpPtr) += m * (gcgdb - here->BSIM3v0gtd)); (*(here->BSIM3v0GspPtr) += m * (gcgsb - here->BSIM3v0gts)); (*(here->BSIM3v0SspPtr) -= m * here->BSIM3v0sourceConductance); (*(here->BSIM3v0BgPtr) += m * (gcbgb - here->BSIM3v0gbgs)); (*(here->BSIM3v0BdpPtr) += m * (gcbdb - here->BSIM3v0gbd + gbbdp)); (*(here->BSIM3v0BspPtr) += m * (gcbsb - here->BSIM3v0gbs + gbbsp)); (*(here->BSIM3v0DPdPtr) -= m * here->BSIM3v0drainConductance); (*(here->BSIM3v0DPgPtr) += m * ((Gm + gcdgb) + dxpart * here->BSIM3v0gtg + gbdpg)); (*(here->BSIM3v0DPbPtr) -= m * ((here->BSIM3v0gbd - Gmbs + gcdgb + gcddb + gcdsb - dxpart * here->BSIM3v0gtb) - gbdpb)); (*(here->BSIM3v0DPspPtr) -= m * ((here->BSIM3v0gds + FwdSum - gcdsb - 0.5 * here->BSIM3v0gts) - gbdpsp)); (*(here->BSIM3v0SPgPtr) += m * (gcsgb - Gm + sxpart * here->BSIM3v0gtg + gbspg)); (*(here->BSIM3v0SPsPtr) -= m * here->BSIM3v0sourceConductance); (*(here->BSIM3v0SPbPtr) -= m * ((here->BSIM3v0gbs + Gmbs + gcsgb + gcsdb + gcssb - sxpart * here->BSIM3v0gtg) - gbspb)); (*(here->BSIM3v0SPdpPtr) -= m * ((here->BSIM3v0gds + RevSum - gcsdb - sxpart * here->BSIM3v0gtd - here->BSIM3v0gbd) - gbspdp)); *(here->BSIM3v0QqPtr) += m * (gqdef + here->BSIM3v0gtau); *(here->BSIM3v0DPqPtr) += m * (dxpart * here->BSIM3v0gtau); *(here->BSIM3v0SPqPtr) += m * (sxpart * here->BSIM3v0gtau); *(here->BSIM3v0GqPtr) -= m * here->BSIM3v0gtau; *(here->BSIM3v0QgPtr) += m * (-gcqgb + here->BSIM3v0gtg); *(here->BSIM3v0QdpPtr) += m * (-gcqdb + here->BSIM3v0gtd); *(here->BSIM3v0QspPtr) += m * (-gcqsb + here->BSIM3v0gts); *(here->BSIM3v0QbPtr) += m * (-gcqbb + here->BSIM3v0gtb); line1000: ; } /* End of Mosfet Instance */ } /* End of Model Instance */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v0/bsim3v0itf.h0000644000175000017500000000037413546075722022611 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1991 JianHui Huang and Min-Chie Jeng. File: bsim3v0itf.h **********/ #ifndef DEV_bsim3v0 #define DEV_bsim3v0 SPICEdev *get_bsim3v0_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/bsim3v0/b3v0.c0000644000175000017500000006744413546075722021403 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1995 Min-Chie Jeng and Mansun Chan. File: b3.c **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "bsim3v0def.h" #include "ngspice/suffix.h" IFparm BSIM3v0pTable[] = { /* parameters */ IOP( "l", BSIM3v0_L, IF_REAL , "Length"), IOP( "w", BSIM3v0_W, IF_REAL , "Width"), IOP( "m", BSIM3v0_M, IF_REAL , "Parallel multiplier"), IOP( "ad", BSIM3v0_AD, IF_REAL , "Drain area"), IOP( "as", BSIM3v0_AS, IF_REAL , "Source area"), IOP( "pd", BSIM3v0_PD, IF_REAL , "Drain perimeter"), IOP( "ps", BSIM3v0_PS, IF_REAL , "Source perimeter"), IOP( "nrd", BSIM3v0_NRD, IF_REAL , "Number of squares in drain"), IOP( "nrs", BSIM3v0_NRS, IF_REAL , "Number of squares in source"), IOP( "off", BSIM3v0_OFF, IF_FLAG , "Device is initially off"), IOP( "nqsmod", BSIM3v0_NQSMOD, IF_INTEGER, "Non-quasi-static model selector"), IP( "ic", BSIM3v0_IC, IF_REALVEC , "Vector of DS,GS,BS initial voltages"), OP( "gmbs", BSIM3v0_GMBS, IF_REAL, "Gmb"), OP( "gm", BSIM3v0_GM, IF_REAL, "Gm"), OP( "gds", BSIM3v0_GDS, IF_REAL, "Gds"), OP( "vdsat", BSIM3v0_VDSAT, IF_REAL, "Vdsat"), OP( "vth", BSIM3v0_VON, IF_REAL, "Vth"), OP( "id", BSIM3v0_CD, IF_REAL, "Ids"), OP( "vbs", BSIM3v0_VBS, IF_REAL, "Vbs"), OP( "vgs", BSIM3v0_VGS, IF_REAL, "Vgs"), OP( "vds", BSIM3v0_VDS, IF_REAL, "Vds"), OP( "gbd", BSIM3v0_GBD, IF_REAL, "Gbd"), OP( "gbs", BSIM3v0_GBS, IF_REAL, "Gbs"), OP( "ibd", BSIM3v0_CBD, IF_REAL, "Ibd"), OP( "ibs", BSIM3v0_CBS, IF_REAL, "Ibs"), }; IFparm BSIM3v0mPTable[] = { /* model parameters */ IOP( "capmod", BSIM3v0_MOD_CAPMOD, IF_INTEGER, "Capacitance model selector"), IOP( "nqsmod", BSIM3v0_MOD_NQSMOD, IF_INTEGER, "Non-quasi-static model selector"), IOP( "mobmod", BSIM3v0_MOD_MOBMOD, IF_INTEGER, "Mobility model selector"), IOP( "noimod", BSIM3v0_MOD_NOIMOD, IF_INTEGER, "Noise model selector"), IOP( "binunit", BSIM3v0_MOD_BINUNIT, IF_INTEGER, "Bin unit selector"), IOP( "tox", BSIM3v0_MOD_TOX, IF_REAL, "Gate oxide thickness in meters"), IOP( "cdsc", BSIM3v0_MOD_CDSC, IF_REAL, "Drain/Source and channel coupling capacitance"), IOP( "cdscb", BSIM3v0_MOD_CDSCB, IF_REAL, "Body-bias dependence of cdsc"), IOP( "cdscd", BSIM3v0_MOD_CDSCD, IF_REAL, "Drain-bias dependence of cdsc"), IOP( "cit", BSIM3v0_MOD_CIT, IF_REAL, "Interface state capacitance"), IOP( "nfactor", BSIM3v0_MOD_NFACTOR, IF_REAL, "Subthreshold swing Coefficient"), IOP( "xj", BSIM3v0_MOD_XJ, IF_REAL, "Junction depth in meters"), IOP( "vsat", BSIM3v0_MOD_VSAT, IF_REAL, "Saturation velocity at tnom"), IOP( "at", BSIM3v0_MOD_AT, IF_REAL, "Temperature coefficient of vsat"), IOP( "a0", BSIM3v0_MOD_A0, IF_REAL, "Non-uniform depletion width effect coefficient."), IOP( "ags", BSIM3v0_MOD_AGS, IF_REAL, "Gate bias coefficient of Abulk."), IOP( "a1", BSIM3v0_MOD_A1, IF_REAL, "Non-saturation effect coefficient"), IOP( "a2", BSIM3v0_MOD_A2, IF_REAL, "Non-saturation effect coefficient"), IOP( "keta", BSIM3v0_MOD_KETA, IF_REAL, "Body-bias coefficient of non-uniform depletion width effect."), IOP( "nsub", BSIM3v0_MOD_NSUB, IF_REAL, "Substrate doping concentration"), IOP( "nch", BSIM3v0_MOD_NPEAK, IF_REAL, "Channel doping concentration"), IOP( "ngate", BSIM3v0_MOD_NGATE, IF_REAL, "Poly-gate doping concentration"), IOP( "gamma1", BSIM3v0_MOD_GAMMA1, IF_REAL, "Vth body coefficient"), IOP( "gamma2", BSIM3v0_MOD_GAMMA2, IF_REAL, "Vth body coefficient"), IOP( "vbx", BSIM3v0_MOD_VBX, IF_REAL, "Vth transition body Voltage"), IOP( "vbm", BSIM3v0_MOD_VBM, IF_REAL, "Maximum body voltage"), IOP( "xt", BSIM3v0_MOD_XT, IF_REAL, "Doping depth"), IOP( "k1", BSIM3v0_MOD_K1, IF_REAL, "Bulk effect coefficient 1"), IOP( "kt1", BSIM3v0_MOD_KT1, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt1l", BSIM3v0_MOD_KT1L, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt2", BSIM3v0_MOD_KT2, IF_REAL, "Body-coefficient of kt1"), IOP( "k2", BSIM3v0_MOD_K2, IF_REAL, "Bulk effect coefficient 2"), IOP( "k3", BSIM3v0_MOD_K3, IF_REAL, "Narrow width effect coefficient"), IOP( "k3b", BSIM3v0_MOD_K3B, IF_REAL, "Body effect coefficient of k3"), IOP( "w0", BSIM3v0_MOD_W0, IF_REAL, "Narrow width effect parameter"), IOP( "nlx", BSIM3v0_MOD_NLX, IF_REAL, "Lateral non-uniform doping effect"), IOP( "dvt0", BSIM3v0_MOD_DVT0, IF_REAL, "Short channel effect coeff. 0"), IOP( "dvt1", BSIM3v0_MOD_DVT1, IF_REAL, "Short channel effect coeff. 1"), IOP( "dvt2", BSIM3v0_MOD_DVT2, IF_REAL, "Short channel effect coeff. 2"), IOP( "dvt0w", BSIM3v0_MOD_DVT0W, IF_REAL, "Narrow Width coeff. 0"), IOP( "dvt1w", BSIM3v0_MOD_DVT1W, IF_REAL, "Narrow Width effect coeff. 1"), IOP( "dvt2w", BSIM3v0_MOD_DVT2W, IF_REAL, "Narrow Width effect coeff. 2"), IOP( "drout", BSIM3v0_MOD_DROUT, IF_REAL, "DIBL coefficient of output resistance"), IOP( "dsub", BSIM3v0_MOD_DSUB, IF_REAL, "DIBL coefficient in the subthreshold region"), IOP( "vth0", BSIM3v0_MOD_VTH0, IF_REAL,"Threshold voltage"), IOPR("vtho", BSIM3v0_MOD_VTH0, IF_REAL,"Threshold voltage"), IOP( "ua", BSIM3v0_MOD_UA, IF_REAL, "Linear gate dependence of mobility"), IOP( "ua1", BSIM3v0_MOD_UA1, IF_REAL, "Temperature coefficient of ua"), IOP( "ub", BSIM3v0_MOD_UB, IF_REAL, "Quadratic gate dependence of mobility"), IOP( "ub1", BSIM3v0_MOD_UB1, IF_REAL, "Temperature coefficient of ub"), IOP( "uc", BSIM3v0_MOD_UC, IF_REAL, "Body-bias dependence of mobility"), IOP( "uc1", BSIM3v0_MOD_UC1, IF_REAL, "Temperature coefficient of uc"), IOP( "u0", BSIM3v0_MOD_U0, IF_REAL, "Low-field mobility at Tnom"), IOP( "ute", BSIM3v0_MOD_UTE, IF_REAL, "Temperature coefficient of mobility"), IOP( "voff", BSIM3v0_MOD_VOFF, IF_REAL, "Threshold voltage offset"), IOP( "tnom", BSIM3v0_MOD_TNOM, IF_REAL, "Parameter measurement temperature"), IOP( "cgso", BSIM3v0_MOD_CGSO, IF_REAL, "Gate-source overlap capacitance per width"), IOP( "cgdo", BSIM3v0_MOD_CGDO, IF_REAL, "Gate-drain overlap capacitance per width"), IOP( "cgbo", BSIM3v0_MOD_CGBO, IF_REAL, "Gate-bulk overlap capacitance per length"), IOP( "xpart", BSIM3v0_MOD_XPART, IF_REAL, "Channel charge partitioning"), IOP( "elm", BSIM3v0_MOD_ELM, IF_REAL, "Non-quasi-static Elmore Constant Parameter"), IOP( "delta", BSIM3v0_MOD_DELTA, IF_REAL, "Effective Vds parameter"), IOP( "rsh", BSIM3v0_MOD_RSH, IF_REAL, "Source-drain sheet resistance"), IOP( "rdsw", BSIM3v0_MOD_RDSW, IF_REAL, "Source-drain resistance per width"), IOP( "prwg", BSIM3v0_MOD_PRWG, IF_REAL, "Gate-bias effect on parasitic resistance "), IOP( "prwb", BSIM3v0_MOD_PRWB, IF_REAL, "Body-effect on parasitic resistance "), IOP( "prt", BSIM3v0_MOD_PRT, IF_REAL, "Temperature coefficient of parasitic resistance "), IOP( "eta0", BSIM3v0_MOD_ETA0, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "etab", BSIM3v0_MOD_ETAB, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "pclm", BSIM3v0_MOD_PCLM, IF_REAL, "Channel length modulation Coefficient"), IOP( "pdiblc1", BSIM3v0_MOD_PDIBL1, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblc2", BSIM3v0_MOD_PDIBL2, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblcb", BSIM3v0_MOD_PDIBLB, IF_REAL, "Body-effect on drain-induced barrier lowering"), IOP( "pscbe1", BSIM3v0_MOD_PSCBE1, IF_REAL, "Substrate current body-effect coefficient"), IOP( "pscbe2", BSIM3v0_MOD_PSCBE2, IF_REAL, "Substrate current body-effect coefficient"), IOP( "pvag", BSIM3v0_MOD_PVAG, IF_REAL, "Gate dependence of output resistance parameter"), IOP( "js", BSIM3v0_MOD_JS, IF_REAL, "Source/drain junction reverse saturation current density"), IOP( "pb", BSIM3v0_MOD_PB, IF_REAL, "Source/drain junction built-in potential"), IOP( "mj", BSIM3v0_MOD_MJ, IF_REAL, "Source/drain bottom junction capacitance grading coefficient"), IOP( "pbsw", BSIM3v0_MOD_PBSW, IF_REAL, "Source/drain sidewall junction capacitance built in potential"), IOP( "mjsw", BSIM3v0_MOD_MJSW, IF_REAL, "Source/drain sidewall junction capacitance grading coefficient"), IOP( "cj", BSIM3v0_MOD_CJ, IF_REAL, "Source/drain bottom junction capacitance per unit area"), IOP( "cjsw", BSIM3v0_MOD_CJSW, IF_REAL, "Source/drain sidewall junction capacitance per unit area"), IOP( "lint", BSIM3v0_MOD_LINT, IF_REAL, "Length reduction parameter"), IOP( "ll", BSIM3v0_MOD_LL, IF_REAL, "Length reduction parameter"), IOP( "lln", BSIM3v0_MOD_LLN, IF_REAL, "Length reduction parameter"), IOP( "lw", BSIM3v0_MOD_LW, IF_REAL, "Length reduction parameter"), IOP( "lwn", BSIM3v0_MOD_LWN, IF_REAL, "Length reduction parameter"), IOP( "lwl", BSIM3v0_MOD_LWL, IF_REAL, "Length reduction parameter"), IOP( "lmin", BSIM3v0_MOD_LMIN, IF_REAL, "Minimum length for the model"), IOP( "lmax", BSIM3v0_MOD_LMAX, IF_REAL, "Maximum length for the model"), IOP( "wr", BSIM3v0_MOD_WR, IF_REAL, "Width dependence of rds"), IOP( "wint", BSIM3v0_MOD_WINT, IF_REAL, "Width reduction parameter"), IOP( "dwg", BSIM3v0_MOD_DWG, IF_REAL, "Width reduction parameter"), IOP( "dwb", BSIM3v0_MOD_DWB, IF_REAL, "Width reduction parameter"), IOP( "wl", BSIM3v0_MOD_WL, IF_REAL, "Width reduction parameter"), IOP( "wln", BSIM3v0_MOD_WLN, IF_REAL, "Width reduction parameter"), IOP( "ww", BSIM3v0_MOD_WW, IF_REAL, "Width reduction parameter"), IOP( "wwn", BSIM3v0_MOD_WWN, IF_REAL, "Width reduction parameter"), IOP( "wwl", BSIM3v0_MOD_WWL, IF_REAL, "Width reduction parameter"), IOP( "wmin", BSIM3v0_MOD_WMIN, IF_REAL, "Minimum width for the model"), IOP( "wmax", BSIM3v0_MOD_WMAX, IF_REAL, "Maximum width for the model"), IOP( "b0", BSIM3v0_MOD_B0, IF_REAL, "Abulk narrow width parameter"), IOP( "b1", BSIM3v0_MOD_B1, IF_REAL, "Abulk narrow width parameter"), IOP( "cgsl", BSIM3v0_MOD_CGSL, IF_REAL, "New C-V model parameter"), IOP( "cgdl", BSIM3v0_MOD_CGDL, IF_REAL, "New C-V model parameter"), IOP( "ckappa", BSIM3v0_MOD_CKAPPA, IF_REAL, "New C-V model parameter"), IOP( "cf", BSIM3v0_MOD_CF, IF_REAL, "Fringe capacitance parameter"), IOP( "clc", BSIM3v0_MOD_CLC, IF_REAL, "Vdsat parameter for C-V model"), IOP( "cle", BSIM3v0_MOD_CLE, IF_REAL, "Vdsat parameter for C-V model"), IOP( "dwc", BSIM3v0_MOD_DWC, IF_REAL, "Delta W for C-V model"), IOP( "dlc", BSIM3v0_MOD_DLC, IF_REAL, "Delta L for C-V model"), IOP( "alpha0", BSIM3v0_MOD_ALPHA0, IF_REAL, "substrate current model parameter"), IOP( "beta0", BSIM3v0_MOD_BETA0, IF_REAL, "substrate current model parameter"), IOP( "lcdsc", BSIM3v0_MOD_LCDSC, IF_REAL, "Length dependence of cdsc"), IOP( "lcdscb", BSIM3v0_MOD_LCDSCB, IF_REAL, "Length dependence of cdscb"), IOP( "lcdscd", BSIM3v0_MOD_LCDSCD, IF_REAL, "Length dependence of cdscd"), IOP( "lcit", BSIM3v0_MOD_LCIT, IF_REAL, "Length dependence of cit"), IOP( "lnfactor", BSIM3v0_MOD_LNFACTOR, IF_REAL, "Length dependence of nfactor"), IOP( "lxj", BSIM3v0_MOD_LXJ, IF_REAL, "Length dependence of xj"), IOP( "lvsat", BSIM3v0_MOD_LVSAT, IF_REAL, "Length dependence of vsat"), IOP( "lat", BSIM3v0_MOD_LAT, IF_REAL, "Length dependence of at"), IOP( "la0", BSIM3v0_MOD_LA0, IF_REAL, "Length dependence of a0"), IOP( "lags", BSIM3v0_MOD_LAGS, IF_REAL, "Length dependence of ags"), IOP( "la1", BSIM3v0_MOD_LA1, IF_REAL, "Length dependence of a1"), IOP( "la2", BSIM3v0_MOD_LA2, IF_REAL, "Length dependence of a2"), IOP( "lketa", BSIM3v0_MOD_LKETA, IF_REAL, "Length dependence of keta"), IOP( "lnsub", BSIM3v0_MOD_LNSUB, IF_REAL, "Length dependence of nsub"), IOP( "lnch", BSIM3v0_MOD_LNPEAK, IF_REAL, "Length dependence of nch"), IOP( "lngate", BSIM3v0_MOD_LNGATE, IF_REAL, "Length dependence of ngate"), IOP( "lgamma1", BSIM3v0_MOD_LGAMMA1, IF_REAL, "Length dependence of gamma1"), IOP( "lgamma2", BSIM3v0_MOD_LGAMMA2, IF_REAL, "Length dependence of gamma2"), IOP( "lvbx", BSIM3v0_MOD_LVBX, IF_REAL, "Length dependence of vbx"), IOP( "lvbm", BSIM3v0_MOD_LVBM, IF_REAL, "Length dependence of vbm"), IOP( "lxt", BSIM3v0_MOD_LXT, IF_REAL, "Length dependence of xt"), IOP( "lk1", BSIM3v0_MOD_LK1, IF_REAL, "Length dependence of k1"), IOP( "lkt1", BSIM3v0_MOD_LKT1, IF_REAL, "Length dependence of kt1"), IOP( "lkt1l", BSIM3v0_MOD_LKT1L, IF_REAL, "Length dependence of kt1l"), IOP( "lkt2", BSIM3v0_MOD_LKT2, IF_REAL, "Length dependence of kt2"), IOP( "lk2", BSIM3v0_MOD_LK2, IF_REAL, "Length dependence of k2"), IOP( "lk3", BSIM3v0_MOD_LK3, IF_REAL, "Length dependence of k3"), IOP( "lk3b", BSIM3v0_MOD_LK3B, IF_REAL, "Length dependence of k3b"), IOP( "lw0", BSIM3v0_MOD_LW0, IF_REAL, "Length dependence of w0"), IOP( "lnlx", BSIM3v0_MOD_LNLX, IF_REAL, "Length dependence of nlx"), IOP( "ldvt0", BSIM3v0_MOD_LDVT0, IF_REAL, "Length dependence of dvt0"), IOP( "ldvt1", BSIM3v0_MOD_LDVT1, IF_REAL, "Length dependence of dvt1"), IOP( "ldvt2", BSIM3v0_MOD_LDVT2, IF_REAL, "Length dependence of dvt2"), IOP( "ldvt0w", BSIM3v0_MOD_LDVT0W, IF_REAL, "Length dependence of dvt0w"), IOP( "ldvt1w", BSIM3v0_MOD_LDVT1W, IF_REAL, "Length dependence of dvt1w"), IOP( "ldvt2w", BSIM3v0_MOD_LDVT2W, IF_REAL, "Length dependence of dvt2w"), IOP( "ldrout", BSIM3v0_MOD_LDROUT, IF_REAL, "Length dependence of drout"), IOP( "ldsub", BSIM3v0_MOD_LDSUB, IF_REAL, "Length dependence of dsub"), IOP( "lvth0", BSIM3v0_MOD_LVTH0, IF_REAL,"Length dependence of vth0"), IOPR("lvtho", BSIM3v0_MOD_LVTH0, IF_REAL,"Length dependence of vtho"), IOP( "lua", BSIM3v0_MOD_LUA, IF_REAL, "Length dependence of ua"), IOP( "lua1", BSIM3v0_MOD_LUA1, IF_REAL, "Length dependence of ua1"), IOP( "lub", BSIM3v0_MOD_LUB, IF_REAL, "Length dependence of ub"), IOP( "lub1", BSIM3v0_MOD_LUB1, IF_REAL, "Length dependence of ub1"), IOP( "luc", BSIM3v0_MOD_LUC, IF_REAL, "Length dependence of uc"), IOP( "luc1", BSIM3v0_MOD_LUC1, IF_REAL, "Length dependence of uc1"), IOP( "lu0", BSIM3v0_MOD_LU0, IF_REAL, "Length dependence of u0"), IOP( "lute", BSIM3v0_MOD_LUTE, IF_REAL, "Length dependence of ute"), IOP( "lvoff", BSIM3v0_MOD_LVOFF, IF_REAL, "Length dependence of voff"), IOP( "lelm", BSIM3v0_MOD_LELM, IF_REAL, "Length dependence of elm"), IOP( "ldelta", BSIM3v0_MOD_LDELTA, IF_REAL, "Length dependence of delta"), IOP( "lrdsw", BSIM3v0_MOD_LRDSW, IF_REAL, "Length dependence of rdsw "), IOP( "lprwg", BSIM3v0_MOD_LPRWG, IF_REAL, "Length dependence of prwg "), IOP( "lprwb", BSIM3v0_MOD_LPRWB, IF_REAL, "Length dependence of prwb "), IOP( "lprt", BSIM3v0_MOD_LPRT, IF_REAL, "Length dependence of prt "), IOP( "leta0", BSIM3v0_MOD_LETA0, IF_REAL, "Length dependence of eta0"), IOP( "letab", BSIM3v0_MOD_LETAB, IF_REAL, "Length dependence of etab"), IOP( "lpclm", BSIM3v0_MOD_LPCLM, IF_REAL, "Length dependence of pclm"), IOP( "lpdiblc1", BSIM3v0_MOD_LPDIBL1, IF_REAL, "Length dependence of pdiblc1"), IOP( "lpdiblc2", BSIM3v0_MOD_LPDIBL2, IF_REAL, "Length dependence of pdiblc2"), IOP( "lpdiblcb", BSIM3v0_MOD_LPDIBLB, IF_REAL, "Length dependence of pdiblcb"), IOP( "lpscbe1", BSIM3v0_MOD_LPSCBE1, IF_REAL, "Length dependence of pscbe1"), IOP( "lpscbe2", BSIM3v0_MOD_LPSCBE2, IF_REAL, "Length dependence of pscbe2"), IOP( "lpvag", BSIM3v0_MOD_LPVAG, IF_REAL, "Length dependence of pvag"), IOP( "lwr", BSIM3v0_MOD_LWR, IF_REAL, "Length dependence of wr"), IOP( "ldwg", BSIM3v0_MOD_LDWG, IF_REAL, "Length dependence of dwg"), IOP( "ldwb", BSIM3v0_MOD_LDWB, IF_REAL, "Length dependence of dwb"), IOP( "lb0", BSIM3v0_MOD_LB0, IF_REAL, "Length dependence of b0"), IOP( "lb1", BSIM3v0_MOD_LB1, IF_REAL, "Length dependence of b1"), IOP( "lcgsl", BSIM3v0_MOD_LCGSL, IF_REAL, "Length dependence of cgsl"), IOP( "lcgdl", BSIM3v0_MOD_LCGDL, IF_REAL, "Length dependence of cgdl"), IOP( "lckappa", BSIM3v0_MOD_LCKAPPA, IF_REAL, "Length dependence of ckappa"), IOP( "lcf", BSIM3v0_MOD_LCF, IF_REAL, "Length dependence of cf"), IOP( "lclc", BSIM3v0_MOD_LCLC, IF_REAL, "Length dependence of clc"), IOP( "lcle", BSIM3v0_MOD_LCLE, IF_REAL, "Length dependence of cle"), IOP( "lalpha0", BSIM3v0_MOD_LALPHA0, IF_REAL, "Length dependence of alpha0"), IOP( "lbeta0", BSIM3v0_MOD_LBETA0, IF_REAL, "Length dependence of beta0"), IOP( "wcdsc", BSIM3v0_MOD_WCDSC, IF_REAL, "Width dependence of cdsc"), IOP( "wcdscb", BSIM3v0_MOD_WCDSCB, IF_REAL, "Width dependence of cdscb"), IOP( "wcdscd", BSIM3v0_MOD_WCDSCD, IF_REAL, "Width dependence of cdscd"), IOP( "wcit", BSIM3v0_MOD_WCIT, IF_REAL, "Width dependence of cit"), IOP( "wnfactor", BSIM3v0_MOD_WNFACTOR, IF_REAL, "Width dependence of nfactor"), IOP( "wxj", BSIM3v0_MOD_WXJ, IF_REAL, "Width dependence of xj"), IOP( "wvsat", BSIM3v0_MOD_WVSAT, IF_REAL, "Width dependence of vsat"), IOP( "wat", BSIM3v0_MOD_WAT, IF_REAL, "Width dependence of at"), IOP( "wa0", BSIM3v0_MOD_WA0, IF_REAL, "Width dependence of a0"), IOP( "wags", BSIM3v0_MOD_WAGS, IF_REAL, "Width dependence of ags"), IOP( "wa1", BSIM3v0_MOD_WA1, IF_REAL, "Width dependence of a1"), IOP( "wa2", BSIM3v0_MOD_WA2, IF_REAL, "Width dependence of a2"), IOP( "wketa", BSIM3v0_MOD_WKETA, IF_REAL, "Width dependence of keta"), IOP( "wnsub", BSIM3v0_MOD_WNSUB, IF_REAL, "Width dependence of nsub"), IOP( "wnch", BSIM3v0_MOD_WNPEAK, IF_REAL, "Width dependence of nch"), IOP( "wngate", BSIM3v0_MOD_WNGATE, IF_REAL, "Width dependence of ngate"), IOP( "wgamma1", BSIM3v0_MOD_WGAMMA1, IF_REAL, "Width dependence of gamma1"), IOP( "wgamma2", BSIM3v0_MOD_WGAMMA2, IF_REAL, "Width dependence of gamma2"), IOP( "wvbx", BSIM3v0_MOD_WVBX, IF_REAL, "Width dependence of vbx"), IOP( "wvbm", BSIM3v0_MOD_WVBM, IF_REAL, "Width dependence of vbm"), IOP( "wxt", BSIM3v0_MOD_WXT, IF_REAL, "Width dependence of xt"), IOP( "wk1", BSIM3v0_MOD_WK1, IF_REAL, "Width dependence of k1"), IOP( "wkt1", BSIM3v0_MOD_WKT1, IF_REAL, "Width dependence of kt1"), IOP( "wkt1l", BSIM3v0_MOD_WKT1L, IF_REAL, "Width dependence of kt1l"), IOP( "wkt2", BSIM3v0_MOD_WKT2, IF_REAL, "Width dependence of kt2"), IOP( "wk2", BSIM3v0_MOD_WK2, IF_REAL, "Width dependence of k2"), IOP( "wk3", BSIM3v0_MOD_WK3, IF_REAL, "Width dependence of k3"), IOP( "wk3b", BSIM3v0_MOD_WK3B, IF_REAL, "Width dependence of k3b"), IOP( "ww0", BSIM3v0_MOD_WW0, IF_REAL, "Width dependence of w0"), IOP( "wnlx", BSIM3v0_MOD_WNLX, IF_REAL, "Width dependence of nlx"), IOP( "wdvt0", BSIM3v0_MOD_WDVT0, IF_REAL, "Width dependence of dvt0"), IOP( "wdvt1", BSIM3v0_MOD_WDVT1, IF_REAL, "Width dependence of dvt1"), IOP( "wdvt2", BSIM3v0_MOD_WDVT2, IF_REAL, "Width dependence of dvt2"), IOP( "wdvt0w", BSIM3v0_MOD_WDVT0W, IF_REAL, "Width dependence of dvt0w"), IOP( "wdvt1w", BSIM3v0_MOD_WDVT1W, IF_REAL, "Width dependence of dvt1w"), IOP( "wdvt2w", BSIM3v0_MOD_WDVT2W, IF_REAL, "Width dependence of dvt2w"), IOP( "wdrout", BSIM3v0_MOD_WDROUT, IF_REAL, "Width dependence of drout"), IOP( "wdsub", BSIM3v0_MOD_WDSUB, IF_REAL, "Width dependence of dsub"), IOP( "wvth0", BSIM3v0_MOD_WVTH0, IF_REAL,"Width dependence of vth0"), IOPR("wvtho", BSIM3v0_MOD_WVTH0, IF_REAL,"Width dependence of vtho"), IOP( "wua", BSIM3v0_MOD_WUA, IF_REAL, "Width dependence of ua"), IOP( "wua1", BSIM3v0_MOD_WUA1, IF_REAL, "Width dependence of ua1"), IOP( "wub", BSIM3v0_MOD_WUB, IF_REAL, "Width dependence of ub"), IOP( "wub1", BSIM3v0_MOD_WUB1, IF_REAL, "Width dependence of ub1"), IOP( "wuc", BSIM3v0_MOD_WUC, IF_REAL, "Width dependence of uc"), IOP( "wuc1", BSIM3v0_MOD_WUC1, IF_REAL, "Width dependence of uc1"), IOP( "wu0", BSIM3v0_MOD_WU0, IF_REAL, "Width dependence of u0"), IOP( "wute", BSIM3v0_MOD_WUTE, IF_REAL, "Width dependence of ute"), IOP( "wvoff", BSIM3v0_MOD_WVOFF, IF_REAL, "Width dependence of voff"), IOP( "welm", BSIM3v0_MOD_WELM, IF_REAL, "Width dependence of elm"), IOP( "wdelta", BSIM3v0_MOD_WDELTA, IF_REAL, "Width dependence of delta"), IOP( "wrdsw", BSIM3v0_MOD_WRDSW, IF_REAL, "Width dependence of rdsw "), IOP( "wprwg", BSIM3v0_MOD_WPRWG, IF_REAL, "Width dependence of prwg "), IOP( "wprwb", BSIM3v0_MOD_WPRWB, IF_REAL, "Width dependence of prwb "), IOP( "wprt", BSIM3v0_MOD_WPRT, IF_REAL, "Width dependence of prt"), IOP( "weta0", BSIM3v0_MOD_WETA0, IF_REAL, "Width dependence of eta0"), IOP( "wetab", BSIM3v0_MOD_WETAB, IF_REAL, "Width dependence of etab"), IOP( "wpclm", BSIM3v0_MOD_WPCLM, IF_REAL, "Width dependence of pclm"), IOP( "wpdiblc1", BSIM3v0_MOD_WPDIBL1, IF_REAL, "Width dependence of pdiblc1"), IOP( "wpdiblc2", BSIM3v0_MOD_WPDIBL2, IF_REAL, "Width dependence of pdiblc2"), IOP( "wpdiblcb", BSIM3v0_MOD_WPDIBLB, IF_REAL, "Width dependence of pdiblcb"), IOP( "wpscbe1", BSIM3v0_MOD_WPSCBE1, IF_REAL, "Width dependence of pscbe1"), IOP( "wpscbe2", BSIM3v0_MOD_WPSCBE2, IF_REAL, "Width dependence of pscbe2"), IOP( "wpvag", BSIM3v0_MOD_WPVAG, IF_REAL, "Width dependence of pvag"), IOP( "wwr", BSIM3v0_MOD_WWR, IF_REAL, "Width dependence of wr"), IOP( "wdwg", BSIM3v0_MOD_WDWG, IF_REAL, "Width dependence of dwg"), IOP( "wdwb", BSIM3v0_MOD_WDWB, IF_REAL, "Width dependence of dwb"), IOP( "wb0", BSIM3v0_MOD_WB0, IF_REAL, "Width dependence of b0"), IOP( "wb1", BSIM3v0_MOD_WB1, IF_REAL, "Width dependence of b1"), IOP( "wcgsl", BSIM3v0_MOD_WCGSL, IF_REAL, "Width dependence of cgsl"), IOP( "wcgdl", BSIM3v0_MOD_WCGDL, IF_REAL, "Width dependence of cgdl"), IOP( "wckappa", BSIM3v0_MOD_WCKAPPA, IF_REAL, "Width dependence of ckappa"), IOP( "wcf", BSIM3v0_MOD_WCF, IF_REAL, "Width dependence of cf"), IOP( "wclc", BSIM3v0_MOD_WCLC, IF_REAL, "Width dependence of clc"), IOP( "wcle", BSIM3v0_MOD_WCLE, IF_REAL, "Width dependence of cle"), IOP( "walpha0", BSIM3v0_MOD_WALPHA0, IF_REAL, "Width dependence of alpha0"), IOP( "wbeta0", BSIM3v0_MOD_WBETA0, IF_REAL, "Width dependence of beta0"), IOP( "pcdsc", BSIM3v0_MOD_PCDSC, IF_REAL, "Cross-term dependence of cdsc"), IOP( "pcdscb", BSIM3v0_MOD_PCDSCB, IF_REAL, "Cross-term dependence of cdscb"), IOP( "pcdscd", BSIM3v0_MOD_PCDSCD, IF_REAL, "Cross-term dependence of cdscd"), IOP( "pcit", BSIM3v0_MOD_PCIT, IF_REAL, "Cross-term dependence of cit"), IOP( "pnfactor", BSIM3v0_MOD_PNFACTOR, IF_REAL, "Cross-term dependence of nfactor"), IOP( "pxj", BSIM3v0_MOD_PXJ, IF_REAL, "Cross-term dependence of xj"), IOP( "pvsat", BSIM3v0_MOD_PVSAT, IF_REAL, "Cross-term dependence of vsat"), IOP( "pat", BSIM3v0_MOD_PAT, IF_REAL, "Cross-term dependence of at"), IOP( "pa0", BSIM3v0_MOD_PA0, IF_REAL, "Cross-term dependence of a0"), IOP( "pags", BSIM3v0_MOD_PAGS, IF_REAL, "Cross-term dependence of ags"), IOP( "pa1", BSIM3v0_MOD_PA1, IF_REAL, "Cross-term dependence of a1"), IOP( "pa2", BSIM3v0_MOD_PA2, IF_REAL, "Cross-term dependence of a2"), IOP( "pketa", BSIM3v0_MOD_PKETA, IF_REAL, "Cross-term dependence of keta"), IOP( "pnsub", BSIM3v0_MOD_PNSUB, IF_REAL, "Cross-term dependence of nsub"), IOP( "pnch", BSIM3v0_MOD_PNPEAK, IF_REAL, "Cross-term dependence of nch"), IOP( "pngate", BSIM3v0_MOD_PNGATE, IF_REAL, "Cross-term dependence of ngate"), IOP( "pgamma1", BSIM3v0_MOD_PGAMMA1, IF_REAL, "Cross-term dependence of gamma1"), IOP( "pgamma2", BSIM3v0_MOD_PGAMMA2, IF_REAL, "Cross-term dependence of gamma2"), IOP( "pvbx", BSIM3v0_MOD_PVBX, IF_REAL, "Cross-term dependence of vbx"), IOP( "pvbm", BSIM3v0_MOD_PVBM, IF_REAL, "Cross-term dependence of vbm"), IOP( "pxt", BSIM3v0_MOD_PXT, IF_REAL, "Cross-term dependence of xt"), IOP( "pk1", BSIM3v0_MOD_PK1, IF_REAL, "Cross-term dependence of k1"), IOP( "pkt1", BSIM3v0_MOD_PKT1, IF_REAL, "Cross-term dependence of kt1"), IOP( "pkt1l", BSIM3v0_MOD_PKT1L, IF_REAL, "Cross-term dependence of kt1l"), IOP( "pkt2", BSIM3v0_MOD_PKT2, IF_REAL, "Cross-term dependence of kt2"), IOP( "pk2", BSIM3v0_MOD_PK2, IF_REAL, "Cross-term dependence of k2"), IOP( "pk3", BSIM3v0_MOD_PK3, IF_REAL, "Cross-term dependence of k3"), IOP( "pk3b", BSIM3v0_MOD_PK3B, IF_REAL, "Cross-term dependence of k3b"), IOP( "pw0", BSIM3v0_MOD_PW0, IF_REAL, "Cross-term dependence of w0"), IOP( "pnlx", BSIM3v0_MOD_PNLX, IF_REAL, "Cross-term dependence of nlx"), IOP( "pdvt0", BSIM3v0_MOD_PDVT0, IF_REAL, "Cross-term dependence of dvt0"), IOP( "pdvt1", BSIM3v0_MOD_PDVT1, IF_REAL, "Cross-term dependence of dvt1"), IOP( "pdvt2", BSIM3v0_MOD_PDVT2, IF_REAL, "Cross-term dependence of dvt2"), IOP( "pdvt0w", BSIM3v0_MOD_PDVT0W, IF_REAL, "Cross-term dependence of dvt0w"), IOP( "pdvt1w", BSIM3v0_MOD_PDVT1W, IF_REAL, "Cross-term dependence of dvt1w"), IOP( "pdvt2w", BSIM3v0_MOD_PDVT2W, IF_REAL, "Cross-term dependence of dvt2w"), IOP( "pdrout", BSIM3v0_MOD_PDROUT, IF_REAL, "Cross-term dependence of drout"), IOP( "pdsub", BSIM3v0_MOD_PDSUB, IF_REAL, "Cross-term dependence of dsub"), IOP( "pvth0", BSIM3v0_MOD_PVTH0, IF_REAL,"Cross-term dependence of vth0"), IOPR("pvtho", BSIM3v0_MOD_PVTH0, IF_REAL,"Cross-term dependence of vtho"), IOP( "pua", BSIM3v0_MOD_PUA, IF_REAL, "Cross-term dependence of ua"), IOP( "pua1", BSIM3v0_MOD_PUA1, IF_REAL, "Cross-term dependence of ua1"), IOP( "pub", BSIM3v0_MOD_PUB, IF_REAL, "Cross-term dependence of ub"), IOP( "pub1", BSIM3v0_MOD_PUB1, IF_REAL, "Cross-term dependence of ub1"), IOP( "puc", BSIM3v0_MOD_PUC, IF_REAL, "Cross-term dependence of uc"), IOP( "puc1", BSIM3v0_MOD_PUC1, IF_REAL, "Cross-term dependence of uc1"), IOP( "pu0", BSIM3v0_MOD_PU0, IF_REAL, "Cross-term dependence of u0"), IOP( "pute", BSIM3v0_MOD_PUTE, IF_REAL, "Cross-term dependence of ute"), IOP( "pvoff", BSIM3v0_MOD_PVOFF, IF_REAL, "Cross-term dependence of voff"), IOP( "pelm", BSIM3v0_MOD_PELM, IF_REAL, "Cross-term dependence of elm"), IOP( "pdelta", BSIM3v0_MOD_PDELTA, IF_REAL, "Cross-term dependence of delta"), IOP( "prdsw", BSIM3v0_MOD_PRDSW, IF_REAL, "Cross-term dependence of rdsw "), IOP( "pprwg", BSIM3v0_MOD_PPRWG, IF_REAL, "Cross-term dependence of prwg "), IOP( "pprwb", BSIM3v0_MOD_PPRWB, IF_REAL, "Cross-term dependence of prwb "), IOP( "pprt", BSIM3v0_MOD_PPRT, IF_REAL, "Cross-term dependence of prt "), IOP( "peta0", BSIM3v0_MOD_PETA0, IF_REAL, "Cross-term dependence of eta0"), IOP( "petab", BSIM3v0_MOD_PETAB, IF_REAL, "Cross-term dependence of etab"), IOP( "ppclm", BSIM3v0_MOD_PPCLM, IF_REAL, "Cross-term dependence of pclm"), IOP( "ppdiblc1", BSIM3v0_MOD_PPDIBL1, IF_REAL, "Cross-term dependence of pdiblc1"), IOP( "ppdiblc2", BSIM3v0_MOD_PPDIBL2, IF_REAL, "Cross-term dependence of pdiblc2"), IOP( "ppdiblcb", BSIM3v0_MOD_PPDIBLB, IF_REAL, "Cross-term dependence of pdiblcb"), IOP( "ppscbe1", BSIM3v0_MOD_PPSCBE1, IF_REAL, "Cross-term dependence of pscbe1"), IOP( "ppscbe2", BSIM3v0_MOD_PPSCBE2, IF_REAL, "Cross-term dependence of pscbe2"), IOP( "ppvag", BSIM3v0_MOD_PPVAG, IF_REAL, "Cross-term dependence of pvag"), IOP( "pwr", BSIM3v0_MOD_PWR, IF_REAL, "Cross-term dependence of wr"), IOP( "pdwg", BSIM3v0_MOD_PDWG, IF_REAL, "Cross-term dependence of dwg"), IOP( "pdwb", BSIM3v0_MOD_PDWB, IF_REAL, "Cross-term dependence of dwb"), IOP( "pb0", BSIM3v0_MOD_PB0, IF_REAL, "Cross-term dependence of b0"), IOP( "pb1", BSIM3v0_MOD_PB1, IF_REAL, "Cross-term dependence of b1"), IOP( "pcgsl", BSIM3v0_MOD_PCGSL, IF_REAL, "Cross-term dependence of cgsl"), IOP( "pcgdl", BSIM3v0_MOD_PCGDL, IF_REAL, "Cross-term dependence of cgdl"), IOP( "pckappa", BSIM3v0_MOD_PCKAPPA, IF_REAL, "Cross-term dependence of ckappa"), IOP( "pcf", BSIM3v0_MOD_PCF, IF_REAL, "Cross-term dependence of cf"), IOP( "pclc", BSIM3v0_MOD_PCLC, IF_REAL, "Cross-term dependence of clc"), IOP( "pcle", BSIM3v0_MOD_PCLE, IF_REAL, "Cross-term dependence of cle"), IOP( "palpha0", BSIM3v0_MOD_PALPHA0, IF_REAL, "Cross-term dependence of alpha0"), IOP( "pbeta0", BSIM3v0_MOD_PBETA0, IF_REAL, "Cross-term dependence of beta0"), IOP( "noia", BSIM3v0_MOD_NOIA, IF_REAL, "Flicker noise parameter"), IOP( "noib", BSIM3v0_MOD_NOIB, IF_REAL, "Flicker noise parameter"), IOP( "noic", BSIM3v0_MOD_NOIC, IF_REAL, "Flicker noise parameter"), IOP( "em", BSIM3v0_MOD_EM, IF_REAL, "Flicker noise parameter"), IOP( "ef", BSIM3v0_MOD_EF, IF_REAL, "Flicker noise frequency exponent"), IOP( "af", BSIM3v0_MOD_AF, IF_REAL, "Flicker noise exponent"), IOP( "kf", BSIM3v0_MOD_KF, IF_REAL, "Flicker noise coefficient"), IP( "nmos", BSIM3v0_MOD_NMOS, IF_FLAG, "Flag to indicate NMOS"), IP( "pmos", BSIM3v0_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"), }; char *BSIM3v0names[] = { "Drain", "Gate", "Source", "Bulk", "Charge" }; int BSIM3v0nSize = NUMELEMS(BSIM3v0names); int BSIM3v0pTSize = NUMELEMS(BSIM3v0pTable); int BSIM3v0mPTSize = NUMELEMS(BSIM3v0mPTable); int BSIM3v0iSize = sizeof(BSIM3v0instance); int BSIM3v0mSize = sizeof(BSIM3v0model); tmpk8ny_4pz/src/spicelib/devices/bsim3v0/b3v0par.c0000644000175000017500000000627213546075722022076 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1995 Min-Chie Jeng and Mansun Chan. File: b3v0par.c **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "bsim3v0def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/fteext.h" int BSIM3v0param(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { double scale; BSIM3v0instance *here = (BSIM3v0instance*)inst; NG_IGNORE(select); if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; switch(param) { case BSIM3v0_W: here->BSIM3v0w = value->rValue*scale; here->BSIM3v0wGiven = TRUE; break; case BSIM3v0_L: here->BSIM3v0l = value->rValue*scale; here->BSIM3v0lGiven = TRUE; break; case BSIM3v0_M: here->BSIM3v0m = value->rValue; here->BSIM3v0mGiven = TRUE; break; case BSIM3v0_AS: here->BSIM3v0sourceArea = value->rValue*scale*scale; here->BSIM3v0sourceAreaGiven = TRUE; break; case BSIM3v0_AD: here->BSIM3v0drainArea = value->rValue*scale*scale; here->BSIM3v0drainAreaGiven = TRUE; break; case BSIM3v0_PS: here->BSIM3v0sourcePerimeter = value->rValue*scale; here->BSIM3v0sourcePerimeterGiven = TRUE; break; case BSIM3v0_PD: here->BSIM3v0drainPerimeter = value->rValue*scale; here->BSIM3v0drainPerimeterGiven = TRUE; break; case BSIM3v0_NRS: here->BSIM3v0sourceSquares = value->rValue; here->BSIM3v0sourceSquaresGiven = TRUE; break; case BSIM3v0_NRD: here->BSIM3v0drainSquares = value->rValue; here->BSIM3v0drainSquaresGiven = TRUE; break; case BSIM3v0_OFF: here->BSIM3v0off = value->iValue; break; case BSIM3v0_IC_VBS: here->BSIM3v0icVBS = value->rValue; here->BSIM3v0icVBSGiven = TRUE; break; case BSIM3v0_IC_VDS: here->BSIM3v0icVDS = value->rValue; here->BSIM3v0icVDSGiven = TRUE; break; case BSIM3v0_IC_VGS: here->BSIM3v0icVGS = value->rValue; here->BSIM3v0icVGSGiven = TRUE; break; case BSIM3v0_NQSMOD: here->BSIM3v0nqsMod = value->iValue; here->BSIM3v0nqsModGiven = TRUE; break; case BSIM3v0_IC: switch(value->v.numValue){ case 3: here->BSIM3v0icVBS = *(value->v.vec.rVec+2); here->BSIM3v0icVBSGiven = TRUE; case 2: here->BSIM3v0icVGS = *(value->v.vec.rVec+1); here->BSIM3v0icVGSGiven = TRUE; case 1: here->BSIM3v0icVDS = *(value->v.vec.rVec); here->BSIM3v0icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v0/bsim3v0ext.h0000644000175000017500000000245413546075722022630 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1991 JianHui Huang and Min-Chie Jeng. File: bsim3v0ext.h **********/ extern int BSIM3v0acLoad(GENmodel *,CKTcircuit*); extern int BSIM3v0ask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*); extern int BSIM3v0convTest(GENmodel *,CKTcircuit*); extern int BSIM3v0getic(GENmodel*,CKTcircuit*); extern int BSIM3v0load(GENmodel*,CKTcircuit*); extern int BSIM3v0mAsk(CKTcircuit*,GENmodel *,int, IFvalue*); extern int BSIM3v0mParam(int,IFvalue*,GENmodel*); extern void BSIM3v0mosCap(CKTcircuit*, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*); extern int BSIM3v0param(int,IFvalue*,GENinstance*,IFvalue*); extern int BSIM3v0pzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int BSIM3v0setup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int BSIM3v0temp(GENmodel*,CKTcircuit*); extern int BSIM3v0trunc(GENmodel*,CKTcircuit*,double*); extern int BSIM3v0noise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int BSIM3v0unsetup(GENmodel *, CKTcircuit *); tmpk8ny_4pz/src/spicelib/devices/ccvs/0000755000175000017500000000000013546075722020121 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/ccvs/ccvsask.c0000644000175000017500000001147313546075722021730 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ /* * This routine gives access to the internal device parameters * of Current Controlled Voltage Source */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "ccvsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int CCVSask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { CCVSinstance *here = (CCVSinstance*)inst; double vr; double vi; double sr; double si; double vm; static char *msg = "Current and power not available for ac analysis"; switch(which) { case CCVS_TRANS: value->rValue = here->CCVScoeff; return (OK); case CCVS_CONTROL: value->uValue = here->CCVScontName; return (OK); case CCVS_POS_NODE: value->iValue = here->CCVSposNode; return (OK); case CCVS_NEG_NODE: value->iValue = here->CCVSnegNode; return (OK); case CCVS_BR: value->iValue = here->CCVSbranch; return (OK); case CCVS_CONT_BR: value->iValue = here->CCVScontBranch; return (OK); case CCVS_CURRENT : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "CCVSask"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = *(ckt->CKTrhsOld+here->CCVSbranch); } return(OK); case CCVS_VOLTS : value->rValue = (*(ckt->CKTrhsOld + here->CCVSposNode) - *(ckt->CKTrhsOld + here->CCVSnegNode)); return(OK); case CCVS_POWER : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "CCVSask"; strcpy(errMsg,msg); return(E_ASKPOWER); } else { value->rValue = *(ckt->CKTrhsOld + here->CCVSbranch) * (*(ckt->CKTrhsOld + here->CCVSposNode) - *(ckt->CKTrhsOld + here->CCVSnegNode)); } return(OK); case CCVS_QUEST_SENS_DC: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_Sap[select->iValue + 1]+ here->CCVSsenParmNo); } return(OK); case CCVS_QUEST_SENS_REAL: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->CCVSsenParmNo); } return(OK); case CCVS_QUEST_SENS_IMAG: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->CCVSsenParmNo); } return(OK); case CCVS_QUEST_SENS_MAG: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = sqrt(vr*vr + vi*vi); if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->CCVSsenParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->CCVSsenParmNo); value->rValue = (vr * sr + vi * si)/vm; } return(OK); case CCVS_QUEST_SENS_PH: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = vr*vr + vi*vi; if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->CCVSsenParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->CCVSsenParmNo); value->rValue = (vr * si - vi * sr)/vm; } return(OK); case CCVS_QUEST_SENS_CPLX: if(ckt->CKTsenInfo){ value->cValue.real= *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->CCVSsenParmNo); value->cValue.imag= *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->CCVSsenParmNo); } return(OK); default: return (E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/ccvs/ccvsitf.h0000644000175000017500000000026013546075722021731 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_CCVS #define DEV_CCVS SPICEdev *get_ccvs_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/ccvs/Makefile.am0000644000175000017500000000067413546075722022164 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libccvs.la libccvs_la_SOURCES = \ ccvs.c \ ccvsask.c \ ccvsdefs.h \ ccvsext.h \ ccvsfbr.c \ ccvsinit.c \ ccvsinit.h \ ccvsitf.h \ ccvsload.c \ ccvspar.c \ ccvspzld.c \ ccvssacl.c \ ccvsset.c \ ccvssld.c \ ccvssprt.c \ ccvssset.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/ccvs/ccvsdefs.h0000644000175000017500000000546513546075722022104 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #ifndef CCVS #define CCVS #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" /* structures used to describe current controlled voltage sources */ /* information used to describe a single instance */ typedef struct sCCVSinstance { struct GENinstance gen; #define CCVSmodPtr(inst) ((struct sCCVSmodel *)((inst)->gen.GENmodPtr)) #define CCVSnextInstance(inst) ((struct sCCVSinstance *)((inst)->gen.GENnextInstance)) #define CCVSname gen.GENname #define CCVSstate gen.GENstate const int CCVSposNode; /* number of positive node of source */ const int CCVSnegNode; /* number of negative node of source */ IFuid CCVScontName; /* pointer to name of controlling instance */ int CCVSbranch; /* equation number of branch equation added for v source */ int CCVScontBranch; /* number of branch eq of controlling source */ double CCVScoeff; /* coefficient */ double *CCVSposIbrPtr; /* pointer to sparse matrix element at * (positive node, branch equation) */ double *CCVSnegIbrPtr; /* pointer to sparse matrix element at * (negative node, branch equation) */ double *CCVSibrPosPtr; /* pointer to sparse matrix element at * (branch equation, positive node) */ double *CCVSibrNegPtr; /* pointer to sparse matrix element at * (branch equation, negative node) */ double *CCVSibrContBrPtr; /* pointer to sparse matrix element at *(branch equation, control branch eq)*/ unsigned CCVScoeffGiven :1 ; /* flag to indicate coeff given */ int CCVSsenParmNo; /* parameter # for sensitivity use; set equal to 0 if not a design parameter*/ } CCVSinstance ; /* per model data */ typedef struct sCCVSmodel { /* model structure for a CCVsource */ struct GENmodel gen; #define CCVSmodType gen.GENmodType #define CCVSnextModel(inst) ((struct sCCVSmodel *)((inst)->gen.GENnextModel)) #define CCVSinstances(inst) ((CCVSinstance *)((inst)->gen.GENinstances)) #define CCVSmodName gen.GENmodName } CCVSmodel; /* device parameters */ enum { CCVS_TRANS = 1, CCVS_CONTROL, CCVS_POS_NODE, CCVS_NEG_NODE, CCVS_BR, CCVS_CONT_BR, CCVS_TRANS_SENS, CCVS_CURRENT, CCVS_POWER, CCVS_VOLTS, }; /* model parameters */ /* device questions */ enum { CCVS_QUEST_SENS_REAL = 201, CCVS_QUEST_SENS_IMAG, CCVS_QUEST_SENS_MAG, CCVS_QUEST_SENS_PH, CCVS_QUEST_SENS_CPLX, CCVS_QUEST_SENS_DC, }; /* model questions */ #include "ccvsext.h" #endif /*CCVS*/ tmpk8ny_4pz/src/spicelib/devices/ccvs/ccvspar.c0000644000175000017500000000153113546075722021726 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ccvsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int CCVSparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { CCVSinstance *here = (CCVSinstance*)inst; NG_IGNORE(select); switch(param) { case CCVS_TRANS: here->CCVScoeff = value->rValue; here->CCVScoeffGiven = TRUE; break; case CCVS_CONTROL: here->CCVScontName = value->uValue; break; case CCVS_TRANS_SENS: here->CCVSsenParmNo = value->iValue; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ccvs/ccvsext.h0000644000175000017500000000130113546075722021744 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ extern int CCVSask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int CCVSfindBr(CKTcircuit*,GENmodel*,IFuid); extern int CCVSload(GENmodel*,CKTcircuit*); extern int CCVSparam(int,IFvalue*,GENinstance*,IFvalue*); extern int CCVSpzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int CCVSsAcLoad(GENmodel*,CKTcircuit*); extern int CCVSsLoad(GENmodel*,CKTcircuit*); extern void CCVSsPrint(GENmodel*,CKTcircuit*); extern int CCVSsSetup(SENstruct*,GENmodel*); extern int CCVSsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int CCVSunsetup(GENmodel*,CKTcircuit*); tmpk8ny_4pz/src/spicelib/devices/ccvs/ccvsinit.c0000644000175000017500000000314713546075722022114 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "ccvsitf.h" #include "ccvsext.h" #include "ccvsinit.h" SPICEdev CCVSinfo = { .DEVpublic = { .name = "CCVS", .description = "Linear current controlled current source", .terms = &CCVSnSize, .numNames = &CCVSnSize, .termNames = CCVSnames, .numInstanceParms = &CCVSpTSize, .instanceParms = CCVSpTable, .numModelParms = NULL, .modelParms = NULL, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = CCVSparam, .DEVmodParam = NULL, .DEVload = CCVSload, .DEVsetup = CCVSsetup, .DEVunsetup = CCVSunsetup, .DEVpzSetup = CCVSsetup, .DEVtemperature = NULL, .DEVtrunc = NULL, .DEVfindBranch = CCVSfindBr, .DEVacLoad = CCVSload, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = NULL, .DEVask = CCVSask, .DEVmodAsk = NULL, .DEVpzLoad = CCVSpzLoad, .DEVconvTest = NULL, .DEVsenSetup = CCVSsSetup, .DEVsenLoad = CCVSsLoad, .DEVsenUpdate = NULL, .DEVsenAcLoad = CCVSsAcLoad, .DEVsenPrint = CCVSsPrint, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &CCVSiSize, .DEVmodSize = &CCVSmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_ccvs_info(void) { return &CCVSinfo; } tmpk8ny_4pz/src/spicelib/devices/ccvs/ccvssprt.c0000644000175000017500000000312013546075722022130 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* Pretty print the sensitivity info for all * the CCVS in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ccvsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" void CCVSsPrint(GENmodel *inModel, CKTcircuit *ckt) { CCVSmodel *model = (CCVSmodel*)inModel; CCVSinstance *here; printf("CURRENT CONTROLLED VOLTAGE SOURCES-----------------\n"); /* loop through all the voltage source models */ for( ; model != NULL; model = CCVSnextModel(model)) { printf("Model name:%s\n",model->CCVSmodName); /* loop through all the instances of the model */ for (here = CCVSinstances(model); here != NULL ; here=CCVSnextInstance(here)) { printf(" Instance name:%s\n",here->CCVSname); printf(" Positive, negative nodes: %s, %s\n", CKTnodName(ckt,here->CCVSposNode), CKTnodName(ckt,here->CCVSnegNode)); printf(" Controlling source name: %s\n", here->CCVScontName); printf(" Branch equation number: %s\n", CKTnodName(ckt,here->CCVSbranch)); printf(" Controlling Branch equation number: %s\n", CKTnodName(ckt,here->CCVScontBranch)); printf(" Coefficient: %f\n",here->CCVScoeff); printf(" CCVSsenParmNo:%d\n",here->CCVSsenParmNo); } } } tmpk8ny_4pz/src/spicelib/devices/ccvs/ccvspzld.c0000644000175000017500000000222613546075722022117 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "ccvsdefs.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int CCVSpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) /* actually load the current voltage value into the * sparse matrix previously provided */ { CCVSmodel *model = (CCVSmodel*)inModel; CCVSinstance *here; NG_IGNORE(ckt); NG_IGNORE(s); /* loop through all the voltage source models */ for( ; model != NULL; model = CCVSnextModel(model)) { /* loop through all the instances of the model */ for (here = CCVSinstances(model); here != NULL ; here=CCVSnextInstance(here)) { *(here->CCVSposIbrPtr) += 1.0 ; *(here->CCVSnegIbrPtr) -= 1.0 ; *(here->CCVSibrPosPtr) += 1.0 ; *(here->CCVSibrNegPtr) -= 1.0 ; *(here->CCVSibrContBrPtr) += here->CCVScoeff ; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ccvs/ccvsload.c0000644000175000017500000000212713546075722022065 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ccvsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int CCVSload(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current voltage value into the * sparse matrix previously provided */ { CCVSmodel *model = (CCVSmodel*)inModel; CCVSinstance *here; NG_IGNORE(ckt); /* loop through all the voltage source models */ for( ; model != NULL; model = CCVSnextModel(model)) { /* loop through all the instances of the model */ for (here = CCVSinstances(model); here != NULL ; here=CCVSnextInstance(here)) { *(here->CCVSposIbrPtr) += 1.0 ; *(here->CCVSnegIbrPtr) -= 1.0 ; *(here->CCVSibrPosPtr) += 1.0 ; *(here->CCVSibrNegPtr) -= 1.0 ; *(here->CCVSibrContBrPtr) -= here->CCVScoeff ; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ccvs/ccvssset.c0000644000175000017500000000161613546075722022126 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* loop through all the devices and * allocate parameter #s to design parameters */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ccvsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CCVSsSetup(SENstruct *info, GENmodel *inModel) { CCVSmodel *model = (CCVSmodel*)inModel; CCVSinstance *here; /* loop through all the voltage source models */ for( ; model != NULL; model = CCVSnextModel(model)) { /* loop through all the instances of the model */ for (here = CCVSinstances(model); here != NULL ; here=CCVSnextInstance(here)) { if(here->CCVSsenParmNo){ here->CCVSsenParmNo = ++(info->SENparms); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ccvs/ccvssld.c0000644000175000017500000000205313546075722021726 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* actually load the current sensitivity information * into the array previously provided */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ccvsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CCVSsLoad(GENmodel *inModel, CKTcircuit *ckt) { CCVSmodel *model = (CCVSmodel*)inModel; CCVSinstance *here; double ic; /* loop through all the voltage source models */ for( ; model != NULL; model = CCVSnextModel(model)) { /* loop through all the instances of the model */ for (here = CCVSinstances(model); here != NULL ; here=CCVSnextInstance(here)) { if(here->CCVSsenParmNo){ ic = *(ckt->CKTrhsOld + here->CCVScontBranch); *(ckt->CKTsenInfo->SEN_RHS[here->CCVSbranch] + here->CCVSsenParmNo) -= ic; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ccvs/ccvs.c0000644000175000017500000000306713546075722021231 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/devdefs.h" #include "ccvsdefs.h" #include "ngspice/suffix.h" /* current controlled voltage source */ IFparm CCVSpTable[] = { /* parameters */ IOPU("gain", CCVS_TRANS, IF_REAL ,"Transresistance (gain)"), IOPU("control", CCVS_CONTROL, IF_INSTANCE,"Controlling voltage source"), IP("sens_trans",CCVS_TRANS_SENS,IF_FLAG, "flag to request sens. WRT transimpedance"), OPU("pos_node", CCVS_POS_NODE,IF_INTEGER, "Positive node of source"), OPU("neg_node", CCVS_NEG_NODE,IF_INTEGER, "Negative node of source"), OP("i", CCVS_CURRENT, IF_REAL, "CCVS output current"), OP("v", CCVS_VOLTS, IF_REAL, "CCVS output voltage"), OP("p", CCVS_POWER, IF_REAL, "CCVS power"), OPU("sens_dc", CCVS_QUEST_SENS_DC, IF_REAL,"dc sensitivity "), OPU("sens_real", CCVS_QUEST_SENS_REAL,IF_REAL,"real part of ac sensitivity"), OPU("sens_imag", CCVS_QUEST_SENS_IMAG,IF_REAL,"imag part of ac sensitivity"), OPU("sens_mag", CCVS_QUEST_SENS_MAG, IF_REAL,"sensitivity of ac magnitude"), OPU("sens_ph", CCVS_QUEST_SENS_PH, IF_REAL, "sensitivity of ac phase"), OPU("sens_cplx", CCVS_QUEST_SENS_CPLX,IF_COMPLEX,"ac sensitivity") }; char *CCVSnames[] = { "H+", "H-" }; int CCVSnSize = NUMELEMS(CCVSnames); int CCVSpTSize = NUMELEMS(CCVSpTable); int CCVSmPTSize = 0; int CCVSiSize = sizeof(CCVSinstance); int CCVSmSize = sizeof(CCVSmodel); tmpk8ny_4pz/src/spicelib/devices/ccvs/ccvsinit.h0000644000175000017500000000030213546075722022107 0ustar carstencarsten#ifndef _CCVSINIT_H #define _CCVSINIT_H extern IFparm CCVSpTable[ ]; extern char *CCVSnames[ ]; extern int CCVSpTSize; extern int CCVSnSize; extern int CCVSiSize; extern int CCVSmSize; #endif tmpk8ny_4pz/src/spicelib/devices/ccvs/ccvssacl.c0000644000175000017500000000234213546075722022067 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* actually load the current ac sensitivity information * into the array previously provided */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ccvsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CCVSsAcLoad(GENmodel *inModel, CKTcircuit *ckt) { CCVSmodel *model = (CCVSmodel*)inModel; CCVSinstance *here; double ic,i_ic; /* loop through all the voltage source models */ for( ; model != NULL; model = CCVSnextModel(model)) { /* loop through all the instances of the model */ for (here = CCVSinstances(model); here != NULL ; here=CCVSnextInstance(here)) { if(here->CCVSsenParmNo){ ic = *(ckt->CKTrhsOld + here->CCVScontBranch); i_ic = *(ckt->CKTirhsOld + here->CCVScontBranch); *(ckt->CKTsenInfo->SEN_RHS[here->CCVSbranch] + here->CCVSsenParmNo) -= ic; *(ckt->CKTsenInfo->SEN_iRHS[here->CCVSbranch] + here->CCVSsenParmNo) -= i_ic; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ccvs/ccvsset.c0000644000175000017500000000511013546075722021734 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* load the voltage source structure with those pointers needed later * for fast matrix loading */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ccvsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int CCVSsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { CCVSmodel *model = (CCVSmodel*)inModel; CCVSinstance *here; int error; CKTnode *tmp; NG_IGNORE(states); /* loop through all the voltage source models */ for( ; model != NULL; model = CCVSnextModel(model)) { /* loop through all the instances of the model */ for (here = CCVSinstances(model); here != NULL ; here=CCVSnextInstance(here)) { if(here->CCVSposNode == here->CCVSnegNode) { SPfrontEnd->IFerrorf (ERR_FATAL, "instance %s is a shorted CCVS", here->CCVSname); return(E_UNSUPP); } if(here->CCVSbranch==0) { error = CKTmkCur(ckt,&tmp,here->CCVSname, "branch"); if(error) return(error); here->CCVSbranch = tmp->number; } here->CCVScontBranch = CKTfndBranch(ckt,here->CCVScontName); if(here->CCVScontBranch == 0) { SPfrontEnd->IFerrorf (ERR_FATAL, "%s: unknown controlling source %s", here->CCVSname, here->CCVScontName); return(E_BADPARM); } /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(CCVSposIbrPtr, CCVSposNode, CCVSbranch); TSTALLOC(CCVSnegIbrPtr, CCVSnegNode, CCVSbranch); TSTALLOC(CCVSibrNegPtr, CCVSbranch, CCVSnegNode); TSTALLOC(CCVSibrPosPtr, CCVSbranch, CCVSposNode); TSTALLOC(CCVSibrContBrPtr, CCVSbranch, CCVScontBranch); } } return(OK); } int CCVSunsetup(GENmodel *inModel, CKTcircuit *ckt) { CCVSmodel *model; CCVSinstance *here; for (model = (CCVSmodel *)inModel; model != NULL; model = CCVSnextModel(model)) { for (here = CCVSinstances(model); here != NULL; here=CCVSnextInstance(here)) { if (here->CCVSbranch) { CKTdltNNum(ckt, here->CCVSbranch); here->CCVSbranch = 0; } } } return OK; } tmpk8ny_4pz/src/spicelib/devices/ccvs/ccvsfbr.c0000644000175000017500000000171413546075722021720 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ccvsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CCVSfindBr(CKTcircuit *ckt, GENmodel *inModel, IFuid name) { CCVSmodel *model = (CCVSmodel*)inModel; CCVSinstance *here; int error; CKTnode *tmp; for( ; model != NULL; model = CCVSnextModel(model)) { for (here = CCVSinstances(model); here != NULL; here = CCVSnextInstance(here)) { if(here->CCVSname == name) { if(here->CCVSbranch == 0) { error = CKTmkCur(ckt,&tmp, here->CCVSname,"branch"); if(error) return(error); here->CCVSbranch = tmp->number; } return(here->CCVSbranch); } } } return(0); } tmpk8ny_4pz/src/spicelib/devices/bsim4v7/0000755000175000017500000000000013546075722020456 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/bsim4v7/b4v7mdel.c0000644000175000017500000000177513546075722022260 0ustar carstencarsten/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4mdel.c of BSIM4.7.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. **********/ #include "ngspice/ngspice.h" #include "bsim4v7def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4v7mDelete(GENmodel *gen_model) { BSIM4v7model *model = (BSIM4v7model *) gen_model; #ifdef USE_OMP FREE(model->BSIM4v7InstanceArray); #endif struct bsim4SizeDependParam *p = model->pSizeDependParamKnot; while (p) { struct bsim4SizeDependParam *next_p = p->pNext; FREE(p); p = next_p; } /* model->BSIM4v7modName to be freed in INPtabEnd() */ FREE(model->BSIM4v7version); return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim4v7/b4v7mpar.c0000644000175000017500000040553513546075722022300 0ustar carstencarsten/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4mpar.c of BSIM4.7.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Authors: 2008- Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. * Modified by Mohan Dunga, 12/13/2006 * Modified by Mohan Dunga, Wenwei Yang, 05/18/2007. * Modified by Wenwei Yang, 07/31/2008. * Modified by Tanvir Morshed, Darsen Lu 03/27/2011 **********/ #include "ngspice/ngspice.h" #include "bsim4v7def.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/const.h" int BSIM4v7mParam( int param, IFvalue *value, GENmodel *inMod) { BSIM4v7model *mod = (BSIM4v7model*)inMod; switch(param) { case BSIM4v7_MOD_MOBMOD : mod->BSIM4v7mobMod = value->iValue; mod->BSIM4v7mobModGiven = TRUE; break; case BSIM4v7_MOD_BINUNIT : mod->BSIM4v7binUnit = value->iValue; mod->BSIM4v7binUnitGiven = TRUE; break; case BSIM4v7_MOD_PARAMCHK : mod->BSIM4v7paramChk = value->iValue; mod->BSIM4v7paramChkGiven = TRUE; break; case BSIM4v7_MOD_CVCHARGEMOD : mod->BSIM4v7cvchargeMod = value->iValue; mod->BSIM4v7cvchargeModGiven = TRUE; break; case BSIM4v7_MOD_CAPMOD : mod->BSIM4v7capMod = value->iValue; mod->BSIM4v7capModGiven = TRUE; break; case BSIM4v7_MOD_DIOMOD : mod->BSIM4v7dioMod = value->iValue; mod->BSIM4v7dioModGiven = TRUE; break; case BSIM4v7_MOD_RDSMOD : mod->BSIM4v7rdsMod = value->iValue; mod->BSIM4v7rdsModGiven = TRUE; break; case BSIM4v7_MOD_TRNQSMOD : mod->BSIM4v7trnqsMod = value->iValue; mod->BSIM4v7trnqsModGiven = TRUE; break; case BSIM4v7_MOD_ACNQSMOD : mod->BSIM4v7acnqsMod = value->iValue; mod->BSIM4v7acnqsModGiven = TRUE; break; case BSIM4v7_MOD_RBODYMOD : mod->BSIM4v7rbodyMod = value->iValue; mod->BSIM4v7rbodyModGiven = TRUE; break; case BSIM4v7_MOD_RGATEMOD : mod->BSIM4v7rgateMod = value->iValue; mod->BSIM4v7rgateModGiven = TRUE; break; case BSIM4v7_MOD_PERMOD : mod->BSIM4v7perMod = value->iValue; mod->BSIM4v7perModGiven = TRUE; break; case BSIM4v7_MOD_GEOMOD : mod->BSIM4v7geoMod = value->iValue; mod->BSIM4v7geoModGiven = TRUE; break; case BSIM4v7_MOD_RGEOMOD : mod->BSIM4v7rgeoMod = value->iValue; mod->BSIM4v7rgeoModGiven = TRUE; break; case BSIM4v7_MOD_FNOIMOD : mod->BSIM4v7fnoiMod = value->iValue; mod->BSIM4v7fnoiModGiven = TRUE; break; case BSIM4v7_MOD_TNOIMOD : mod->BSIM4v7tnoiMod = value->iValue; mod->BSIM4v7tnoiModGiven = TRUE; break; case BSIM4v7_MOD_MTRLMOD : mod->BSIM4v7mtrlMod = value->iValue; mod->BSIM4v7mtrlModGiven = TRUE; break; case BSIM4v7_MOD_MTRLCOMPATMOD : mod->BSIM4v7mtrlCompatMod = value->iValue; mod->BSIM4v7mtrlCompatModGiven = TRUE; break; case BSIM4v7_MOD_GIDLMOD : /* v4.7 New GIDL/GISL */ mod->BSIM4v7gidlMod = value->iValue; mod->BSIM4v7gidlModGiven = TRUE; break; case BSIM4v7_MOD_IGCMOD : mod->BSIM4v7igcMod = value->iValue; mod->BSIM4v7igcModGiven = TRUE; break; case BSIM4v7_MOD_IGBMOD : mod->BSIM4v7igbMod = value->iValue; mod->BSIM4v7igbModGiven = TRUE; break; case BSIM4v7_MOD_TEMPMOD : mod->BSIM4v7tempMod = value->iValue; mod->BSIM4v7tempModGiven = TRUE; break; case BSIM4v7_MOD_VERSION : mod->BSIM4v7version = value->sValue; mod->BSIM4v7versionGiven = TRUE; break; case BSIM4v7_MOD_TOXREF : mod->BSIM4v7toxref = value->rValue; mod->BSIM4v7toxrefGiven = TRUE; break; case BSIM4v7_MOD_EOT : mod->BSIM4v7eot = value->rValue; mod->BSIM4v7eotGiven = TRUE; break; case BSIM4v7_MOD_VDDEOT : mod->BSIM4v7vddeot = value->rValue; mod->BSIM4v7vddeotGiven = TRUE; break; case BSIM4v7_MOD_TEMPEOT : mod->BSIM4v7tempeot = value->rValue; mod->BSIM4v7tempeotGiven = TRUE; break; case BSIM4v7_MOD_LEFFEOT : mod->BSIM4v7leffeot = value->rValue; mod->BSIM4v7leffeotGiven = TRUE; break; case BSIM4v7_MOD_WEFFEOT : mod->BSIM4v7weffeot = value->rValue; mod->BSIM4v7weffeotGiven = TRUE; break; case BSIM4v7_MOD_ADOS : mod->BSIM4v7ados = value->rValue; mod->BSIM4v7adosGiven = TRUE; break; case BSIM4v7_MOD_BDOS : mod->BSIM4v7bdos = value->rValue; mod->BSIM4v7bdosGiven = TRUE; break; case BSIM4v7_MOD_TOXE : mod->BSIM4v7toxe = value->rValue; mod->BSIM4v7toxeGiven = TRUE; break; case BSIM4v7_MOD_TOXP : mod->BSIM4v7toxp = value->rValue; mod->BSIM4v7toxpGiven = TRUE; break; case BSIM4v7_MOD_TOXM : mod->BSIM4v7toxm = value->rValue; mod->BSIM4v7toxmGiven = TRUE; break; case BSIM4v7_MOD_DTOX : mod->BSIM4v7dtox = value->rValue; mod->BSIM4v7dtoxGiven = TRUE; break; case BSIM4v7_MOD_EPSROX : mod->BSIM4v7epsrox = value->rValue; mod->BSIM4v7epsroxGiven = TRUE; break; case BSIM4v7_MOD_CDSC : mod->BSIM4v7cdsc = value->rValue; mod->BSIM4v7cdscGiven = TRUE; break; case BSIM4v7_MOD_CDSCB : mod->BSIM4v7cdscb = value->rValue; mod->BSIM4v7cdscbGiven = TRUE; break; case BSIM4v7_MOD_CDSCD : mod->BSIM4v7cdscd = value->rValue; mod->BSIM4v7cdscdGiven = TRUE; break; case BSIM4v7_MOD_CIT : mod->BSIM4v7cit = value->rValue; mod->BSIM4v7citGiven = TRUE; break; case BSIM4v7_MOD_NFACTOR : mod->BSIM4v7nfactor = value->rValue; mod->BSIM4v7nfactorGiven = TRUE; break; case BSIM4v7_MOD_XJ: mod->BSIM4v7xj = value->rValue; mod->BSIM4v7xjGiven = TRUE; break; case BSIM4v7_MOD_VSAT: mod->BSIM4v7vsat = value->rValue; mod->BSIM4v7vsatGiven = TRUE; break; case BSIM4v7_MOD_A0: mod->BSIM4v7a0 = value->rValue; mod->BSIM4v7a0Given = TRUE; break; case BSIM4v7_MOD_AGS: mod->BSIM4v7ags= value->rValue; mod->BSIM4v7agsGiven = TRUE; break; case BSIM4v7_MOD_A1: mod->BSIM4v7a1 = value->rValue; mod->BSIM4v7a1Given = TRUE; break; case BSIM4v7_MOD_A2: mod->BSIM4v7a2 = value->rValue; mod->BSIM4v7a2Given = TRUE; break; case BSIM4v7_MOD_AT: mod->BSIM4v7at = value->rValue; mod->BSIM4v7atGiven = TRUE; break; case BSIM4v7_MOD_KETA: mod->BSIM4v7keta = value->rValue; mod->BSIM4v7ketaGiven = TRUE; break; case BSIM4v7_MOD_NSUB: mod->BSIM4v7nsub = value->rValue; mod->BSIM4v7nsubGiven = TRUE; break; case BSIM4v7_MOD_PHIG: mod->BSIM4v7phig = value->rValue; mod->BSIM4v7phigGiven = TRUE; break; case BSIM4v7_MOD_EPSRGATE: mod->BSIM4v7epsrgate = value->rValue; mod->BSIM4v7epsrgateGiven = TRUE; break; case BSIM4v7_MOD_EASUB: mod->BSIM4v7easub = value->rValue; mod->BSIM4v7easubGiven = TRUE; break; case BSIM4v7_MOD_EPSRSUB: mod->BSIM4v7epsrsub = value->rValue; mod->BSIM4v7epsrsubGiven = TRUE; break; case BSIM4v7_MOD_NI0SUB: mod->BSIM4v7ni0sub = value->rValue; mod->BSIM4v7ni0subGiven = TRUE; break; case BSIM4v7_MOD_BG0SUB: mod->BSIM4v7bg0sub = value->rValue; mod->BSIM4v7bg0subGiven = TRUE; break; case BSIM4v7_MOD_TBGASUB: mod->BSIM4v7tbgasub = value->rValue; mod->BSIM4v7tbgasubGiven = TRUE; break; case BSIM4v7_MOD_TBGBSUB: mod->BSIM4v7tbgbsub = value->rValue; mod->BSIM4v7tbgbsubGiven = TRUE; break; case BSIM4v7_MOD_NDEP: mod->BSIM4v7ndep = value->rValue; mod->BSIM4v7ndepGiven = TRUE; if (mod->BSIM4v7ndep > 1.0e20) mod->BSIM4v7ndep *= 1.0e-6; break; case BSIM4v7_MOD_NSD: mod->BSIM4v7nsd = value->rValue; mod->BSIM4v7nsdGiven = TRUE; if (mod->BSIM4v7nsd > 1.0e23) mod->BSIM4v7nsd *= 1.0e-6; break; case BSIM4v7_MOD_NGATE: mod->BSIM4v7ngate = value->rValue; mod->BSIM4v7ngateGiven = TRUE; if (mod->BSIM4v7ngate > 1.0e23) mod->BSIM4v7ngate *= 1.0e-6; break; case BSIM4v7_MOD_GAMMA1: mod->BSIM4v7gamma1 = value->rValue; mod->BSIM4v7gamma1Given = TRUE; break; case BSIM4v7_MOD_GAMMA2: mod->BSIM4v7gamma2 = value->rValue; mod->BSIM4v7gamma2Given = TRUE; break; case BSIM4v7_MOD_VBX: mod->BSIM4v7vbx = value->rValue; mod->BSIM4v7vbxGiven = TRUE; break; case BSIM4v7_MOD_VBM: mod->BSIM4v7vbm = value->rValue; mod->BSIM4v7vbmGiven = TRUE; break; case BSIM4v7_MOD_XT: mod->BSIM4v7xt = value->rValue; mod->BSIM4v7xtGiven = TRUE; break; case BSIM4v7_MOD_K1: mod->BSIM4v7k1 = value->rValue; mod->BSIM4v7k1Given = TRUE; break; case BSIM4v7_MOD_KT1: mod->BSIM4v7kt1 = value->rValue; mod->BSIM4v7kt1Given = TRUE; break; case BSIM4v7_MOD_KT1L: mod->BSIM4v7kt1l = value->rValue; mod->BSIM4v7kt1lGiven = TRUE; break; case BSIM4v7_MOD_KT2: mod->BSIM4v7kt2 = value->rValue; mod->BSIM4v7kt2Given = TRUE; break; case BSIM4v7_MOD_K2: mod->BSIM4v7k2 = value->rValue; mod->BSIM4v7k2Given = TRUE; break; case BSIM4v7_MOD_K3: mod->BSIM4v7k3 = value->rValue; mod->BSIM4v7k3Given = TRUE; break; case BSIM4v7_MOD_K3B: mod->BSIM4v7k3b = value->rValue; mod->BSIM4v7k3bGiven = TRUE; break; case BSIM4v7_MOD_LPE0: mod->BSIM4v7lpe0 = value->rValue; mod->BSIM4v7lpe0Given = TRUE; break; case BSIM4v7_MOD_LPEB: mod->BSIM4v7lpeb = value->rValue; mod->BSIM4v7lpebGiven = TRUE; break; case BSIM4v7_MOD_DVTP0: mod->BSIM4v7dvtp0 = value->rValue; mod->BSIM4v7dvtp0Given = TRUE; break; case BSIM4v7_MOD_DVTP1: mod->BSIM4v7dvtp1 = value->rValue; mod->BSIM4v7dvtp1Given = TRUE; break; case BSIM4v7_MOD_DVTP2: /* New DIBL/Rout */ mod->BSIM4v7dvtp2 = value->rValue; mod->BSIM4v7dvtp2Given = TRUE; break; case BSIM4v7_MOD_DVTP3: mod->BSIM4v7dvtp3 = value->rValue; mod->BSIM4v7dvtp3Given = TRUE; break; case BSIM4v7_MOD_DVTP4: mod->BSIM4v7dvtp4 = value->rValue; mod->BSIM4v7dvtp4Given = TRUE; break; case BSIM4v7_MOD_DVTP5: mod->BSIM4v7dvtp5 = value->rValue; mod->BSIM4v7dvtp5Given = TRUE; break; case BSIM4v7_MOD_W0: mod->BSIM4v7w0 = value->rValue; mod->BSIM4v7w0Given = TRUE; break; case BSIM4v7_MOD_DVT0: mod->BSIM4v7dvt0 = value->rValue; mod->BSIM4v7dvt0Given = TRUE; break; case BSIM4v7_MOD_DVT1: mod->BSIM4v7dvt1 = value->rValue; mod->BSIM4v7dvt1Given = TRUE; break; case BSIM4v7_MOD_DVT2: mod->BSIM4v7dvt2 = value->rValue; mod->BSIM4v7dvt2Given = TRUE; break; case BSIM4v7_MOD_DVT0W: mod->BSIM4v7dvt0w = value->rValue; mod->BSIM4v7dvt0wGiven = TRUE; break; case BSIM4v7_MOD_DVT1W: mod->BSIM4v7dvt1w = value->rValue; mod->BSIM4v7dvt1wGiven = TRUE; break; case BSIM4v7_MOD_DVT2W: mod->BSIM4v7dvt2w = value->rValue; mod->BSIM4v7dvt2wGiven = TRUE; break; case BSIM4v7_MOD_DROUT: mod->BSIM4v7drout = value->rValue; mod->BSIM4v7droutGiven = TRUE; break; case BSIM4v7_MOD_DSUB: mod->BSIM4v7dsub = value->rValue; mod->BSIM4v7dsubGiven = TRUE; break; case BSIM4v7_MOD_VTH0: mod->BSIM4v7vth0 = value->rValue; mod->BSIM4v7vth0Given = TRUE; break; case BSIM4v7_MOD_EU: mod->BSIM4v7eu = value->rValue; mod->BSIM4v7euGiven = TRUE; break; case BSIM4v7_MOD_UCS: mod->BSIM4v7ucs = value->rValue; mod->BSIM4v7ucsGiven = TRUE; break; case BSIM4v7_MOD_UA: mod->BSIM4v7ua = value->rValue; mod->BSIM4v7uaGiven = TRUE; break; case BSIM4v7_MOD_UA1: mod->BSIM4v7ua1 = value->rValue; mod->BSIM4v7ua1Given = TRUE; break; case BSIM4v7_MOD_UB: mod->BSIM4v7ub = value->rValue; mod->BSIM4v7ubGiven = TRUE; break; case BSIM4v7_MOD_UB1: mod->BSIM4v7ub1 = value->rValue; mod->BSIM4v7ub1Given = TRUE; break; case BSIM4v7_MOD_UC: mod->BSIM4v7uc = value->rValue; mod->BSIM4v7ucGiven = TRUE; break; case BSIM4v7_MOD_UC1: mod->BSIM4v7uc1 = value->rValue; mod->BSIM4v7uc1Given = TRUE; break; case BSIM4v7_MOD_U0 : mod->BSIM4v7u0 = value->rValue; mod->BSIM4v7u0Given = TRUE; break; case BSIM4v7_MOD_UTE : mod->BSIM4v7ute = value->rValue; mod->BSIM4v7uteGiven = TRUE; break; case BSIM4v7_MOD_UCSTE : mod->BSIM4v7ucste = value->rValue; mod->BSIM4v7ucsteGiven = TRUE; break; case BSIM4v7_MOD_UD: mod->BSIM4v7ud = value->rValue; mod->BSIM4v7udGiven = TRUE; break; case BSIM4v7_MOD_UD1: mod->BSIM4v7ud1 = value->rValue; mod->BSIM4v7ud1Given = TRUE; break; case BSIM4v7_MOD_UP: mod->BSIM4v7up = value->rValue; mod->BSIM4v7upGiven = TRUE; break; case BSIM4v7_MOD_LP: mod->BSIM4v7lp = value->rValue; mod->BSIM4v7lpGiven = TRUE; break; case BSIM4v7_MOD_LUD: mod->BSIM4v7lud = value->rValue; mod->BSIM4v7ludGiven = TRUE; break; case BSIM4v7_MOD_LUD1: mod->BSIM4v7lud1 = value->rValue; mod->BSIM4v7lud1Given = TRUE; break; case BSIM4v7_MOD_LUP: mod->BSIM4v7lup = value->rValue; mod->BSIM4v7lupGiven = TRUE; break; case BSIM4v7_MOD_LLP: mod->BSIM4v7llp = value->rValue; mod->BSIM4v7llpGiven = TRUE; break; case BSIM4v7_MOD_WUD: mod->BSIM4v7wud = value->rValue; mod->BSIM4v7wudGiven = TRUE; break; case BSIM4v7_MOD_WUD1: mod->BSIM4v7wud1 = value->rValue; mod->BSIM4v7wud1Given = TRUE; break; case BSIM4v7_MOD_WUP: mod->BSIM4v7wup = value->rValue; mod->BSIM4v7wupGiven = TRUE; break; case BSIM4v7_MOD_WLP: mod->BSIM4v7wlp = value->rValue; mod->BSIM4v7wlpGiven = TRUE; break; case BSIM4v7_MOD_PUD: mod->BSIM4v7pud = value->rValue; mod->BSIM4v7pudGiven = TRUE; break; case BSIM4v7_MOD_PUD1: mod->BSIM4v7pud1 = value->rValue; mod->BSIM4v7pud1Given = TRUE; break; case BSIM4v7_MOD_PUP: mod->BSIM4v7pup = value->rValue; mod->BSIM4v7pupGiven = TRUE; break; case BSIM4v7_MOD_PLP: mod->BSIM4v7plp = value->rValue; mod->BSIM4v7plpGiven = TRUE; break; case BSIM4v7_MOD_VOFF: mod->BSIM4v7voff = value->rValue; mod->BSIM4v7voffGiven = TRUE; break; case BSIM4v7_MOD_TVOFF: mod->BSIM4v7tvoff = value->rValue; mod->BSIM4v7tvoffGiven = TRUE; break; case BSIM4v7_MOD_TNFACTOR: /* v4.7 temp dep of leakage current */ mod->BSIM4v7tnfactor = value->rValue; mod->BSIM4v7tnfactorGiven = TRUE; break; case BSIM4v7_MOD_TETA0: /* v4.7 temp dep of leakage current */ mod->BSIM4v7teta0 = value->rValue; mod->BSIM4v7teta0Given = TRUE; break; case BSIM4v7_MOD_TVOFFCV: /* v4.7 temp dep of leakage current */ mod->BSIM4v7tvoffcv = value->rValue; mod->BSIM4v7tvoffcvGiven = TRUE; break; case BSIM4v7_MOD_VOFFL: mod->BSIM4v7voffl = value->rValue; mod->BSIM4v7vofflGiven = TRUE; break; case BSIM4v7_MOD_VOFFCVL: mod->BSIM4v7voffcvl = value->rValue; mod->BSIM4v7voffcvlGiven = TRUE; break; case BSIM4v7_MOD_MINV: mod->BSIM4v7minv = value->rValue; mod->BSIM4v7minvGiven = TRUE; break; case BSIM4v7_MOD_MINVCV: mod->BSIM4v7minvcv = value->rValue; mod->BSIM4v7minvcvGiven = TRUE; break; case BSIM4v7_MOD_FPROUT: mod->BSIM4v7fprout = value->rValue; mod->BSIM4v7fproutGiven = TRUE; break; case BSIM4v7_MOD_PDITS: mod->BSIM4v7pdits = value->rValue; mod->BSIM4v7pditsGiven = TRUE; break; case BSIM4v7_MOD_PDITSD: mod->BSIM4v7pditsd = value->rValue; mod->BSIM4v7pditsdGiven = TRUE; break; case BSIM4v7_MOD_PDITSL: mod->BSIM4v7pditsl = value->rValue; mod->BSIM4v7pditslGiven = TRUE; break; case BSIM4v7_MOD_DELTA : mod->BSIM4v7delta = value->rValue; mod->BSIM4v7deltaGiven = TRUE; break; case BSIM4v7_MOD_RDSW: mod->BSIM4v7rdsw = value->rValue; mod->BSIM4v7rdswGiven = TRUE; break; case BSIM4v7_MOD_RDSWMIN: mod->BSIM4v7rdswmin = value->rValue; mod->BSIM4v7rdswminGiven = TRUE; break; case BSIM4v7_MOD_RDWMIN: mod->BSIM4v7rdwmin = value->rValue; mod->BSIM4v7rdwminGiven = TRUE; break; case BSIM4v7_MOD_RSWMIN: mod->BSIM4v7rswmin = value->rValue; mod->BSIM4v7rswminGiven = TRUE; break; case BSIM4v7_MOD_RDW: mod->BSIM4v7rdw = value->rValue; mod->BSIM4v7rdwGiven = TRUE; break; case BSIM4v7_MOD_RSW: mod->BSIM4v7rsw = value->rValue; mod->BSIM4v7rswGiven = TRUE; break; case BSIM4v7_MOD_PRWG: mod->BSIM4v7prwg = value->rValue; mod->BSIM4v7prwgGiven = TRUE; break; case BSIM4v7_MOD_PRWB: mod->BSIM4v7prwb = value->rValue; mod->BSIM4v7prwbGiven = TRUE; break; case BSIM4v7_MOD_PRT: mod->BSIM4v7prt = value->rValue; mod->BSIM4v7prtGiven = TRUE; break; case BSIM4v7_MOD_ETA0: mod->BSIM4v7eta0 = value->rValue; mod->BSIM4v7eta0Given = TRUE; break; case BSIM4v7_MOD_ETAB: mod->BSIM4v7etab = value->rValue; mod->BSIM4v7etabGiven = TRUE; break; case BSIM4v7_MOD_PCLM: mod->BSIM4v7pclm = value->rValue; mod->BSIM4v7pclmGiven = TRUE; break; case BSIM4v7_MOD_PDIBL1: mod->BSIM4v7pdibl1 = value->rValue; mod->BSIM4v7pdibl1Given = TRUE; break; case BSIM4v7_MOD_PDIBL2: mod->BSIM4v7pdibl2 = value->rValue; mod->BSIM4v7pdibl2Given = TRUE; break; case BSIM4v7_MOD_PDIBLB: mod->BSIM4v7pdiblb = value->rValue; mod->BSIM4v7pdiblbGiven = TRUE; break; case BSIM4v7_MOD_PSCBE1: mod->BSIM4v7pscbe1 = value->rValue; mod->BSIM4v7pscbe1Given = TRUE; break; case BSIM4v7_MOD_PSCBE2: mod->BSIM4v7pscbe2 = value->rValue; mod->BSIM4v7pscbe2Given = TRUE; break; case BSIM4v7_MOD_PVAG: mod->BSIM4v7pvag = value->rValue; mod->BSIM4v7pvagGiven = TRUE; break; case BSIM4v7_MOD_WR : mod->BSIM4v7wr = value->rValue; mod->BSIM4v7wrGiven = TRUE; break; case BSIM4v7_MOD_DWG : mod->BSIM4v7dwg = value->rValue; mod->BSIM4v7dwgGiven = TRUE; break; case BSIM4v7_MOD_DWB : mod->BSIM4v7dwb = value->rValue; mod->BSIM4v7dwbGiven = TRUE; break; case BSIM4v7_MOD_B0 : mod->BSIM4v7b0 = value->rValue; mod->BSIM4v7b0Given = TRUE; break; case BSIM4v7_MOD_B1 : mod->BSIM4v7b1 = value->rValue; mod->BSIM4v7b1Given = TRUE; break; case BSIM4v7_MOD_ALPHA0 : mod->BSIM4v7alpha0 = value->rValue; mod->BSIM4v7alpha0Given = TRUE; break; case BSIM4v7_MOD_ALPHA1 : mod->BSIM4v7alpha1 = value->rValue; mod->BSIM4v7alpha1Given = TRUE; break; case BSIM4v7_MOD_PHIN : mod->BSIM4v7phin = value->rValue; mod->BSIM4v7phinGiven = TRUE; break; case BSIM4v7_MOD_AGIDL : mod->BSIM4v7agidl = value->rValue; mod->BSIM4v7agidlGiven = TRUE; break; case BSIM4v7_MOD_BGIDL : mod->BSIM4v7bgidl = value->rValue; mod->BSIM4v7bgidlGiven = TRUE; break; case BSIM4v7_MOD_CGIDL : mod->BSIM4v7cgidl = value->rValue; mod->BSIM4v7cgidlGiven = TRUE; break; case BSIM4v7_MOD_EGIDL : mod->BSIM4v7egidl = value->rValue; mod->BSIM4v7egidlGiven = TRUE; break; case BSIM4v7_MOD_FGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7fgidl = value->rValue; mod->BSIM4v7fgidlGiven = TRUE; break; case BSIM4v7_MOD_KGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7kgidl = value->rValue; mod->BSIM4v7kgidlGiven = TRUE; break; case BSIM4v7_MOD_RGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7rgidl = value->rValue; mod->BSIM4v7rgidlGiven = TRUE; break; case BSIM4v7_MOD_AGISL : mod->BSIM4v7agisl = value->rValue; mod->BSIM4v7agislGiven = TRUE; break; case BSIM4v7_MOD_BGISL : mod->BSIM4v7bgisl = value->rValue; mod->BSIM4v7bgislGiven = TRUE; break; case BSIM4v7_MOD_CGISL : mod->BSIM4v7cgisl = value->rValue; mod->BSIM4v7cgislGiven = TRUE; break; case BSIM4v7_MOD_EGISL : mod->BSIM4v7egisl = value->rValue; mod->BSIM4v7egislGiven = TRUE; break; case BSIM4v7_MOD_FGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7fgisl = value->rValue; mod->BSIM4v7fgislGiven = TRUE; break; case BSIM4v7_MOD_KGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7kgisl = value->rValue; mod->BSIM4v7kgislGiven = TRUE; break; case BSIM4v7_MOD_RGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7rgisl = value->rValue; mod->BSIM4v7rgislGiven = TRUE; break; case BSIM4v7_MOD_AIGC : mod->BSIM4v7aigc = value->rValue; mod->BSIM4v7aigcGiven = TRUE; break; case BSIM4v7_MOD_BIGC : mod->BSIM4v7bigc = value->rValue; mod->BSIM4v7bigcGiven = TRUE; break; case BSIM4v7_MOD_CIGC : mod->BSIM4v7cigc = value->rValue; mod->BSIM4v7cigcGiven = TRUE; break; case BSIM4v7_MOD_AIGSD : mod->BSIM4v7aigsd = value->rValue; mod->BSIM4v7aigsdGiven = TRUE; break; case BSIM4v7_MOD_BIGSD : mod->BSIM4v7bigsd = value->rValue; mod->BSIM4v7bigsdGiven = TRUE; break; case BSIM4v7_MOD_CIGSD : mod->BSIM4v7cigsd = value->rValue; mod->BSIM4v7cigsdGiven = TRUE; break; case BSIM4v7_MOD_AIGS : mod->BSIM4v7aigs = value->rValue; mod->BSIM4v7aigsGiven = TRUE; break; case BSIM4v7_MOD_BIGS : mod->BSIM4v7bigs = value->rValue; mod->BSIM4v7bigsGiven = TRUE; break; case BSIM4v7_MOD_CIGS : mod->BSIM4v7cigs = value->rValue; mod->BSIM4v7cigsGiven = TRUE; break; case BSIM4v7_MOD_AIGD : mod->BSIM4v7aigd = value->rValue; mod->BSIM4v7aigdGiven = TRUE; break; case BSIM4v7_MOD_BIGD : mod->BSIM4v7bigd = value->rValue; mod->BSIM4v7bigdGiven = TRUE; break; case BSIM4v7_MOD_CIGD : mod->BSIM4v7cigd = value->rValue; mod->BSIM4v7cigdGiven = TRUE; break; case BSIM4v7_MOD_AIGBACC : mod->BSIM4v7aigbacc = value->rValue; mod->BSIM4v7aigbaccGiven = TRUE; break; case BSIM4v7_MOD_BIGBACC : mod->BSIM4v7bigbacc = value->rValue; mod->BSIM4v7bigbaccGiven = TRUE; break; case BSIM4v7_MOD_CIGBACC : mod->BSIM4v7cigbacc = value->rValue; mod->BSIM4v7cigbaccGiven = TRUE; break; case BSIM4v7_MOD_AIGBINV : mod->BSIM4v7aigbinv = value->rValue; mod->BSIM4v7aigbinvGiven = TRUE; break; case BSIM4v7_MOD_BIGBINV : mod->BSIM4v7bigbinv = value->rValue; mod->BSIM4v7bigbinvGiven = TRUE; break; case BSIM4v7_MOD_CIGBINV : mod->BSIM4v7cigbinv = value->rValue; mod->BSIM4v7cigbinvGiven = TRUE; break; case BSIM4v7_MOD_NIGC : mod->BSIM4v7nigc = value->rValue; mod->BSIM4v7nigcGiven = TRUE; break; case BSIM4v7_MOD_NIGBINV : mod->BSIM4v7nigbinv = value->rValue; mod->BSIM4v7nigbinvGiven = TRUE; break; case BSIM4v7_MOD_NIGBACC : mod->BSIM4v7nigbacc = value->rValue; mod->BSIM4v7nigbaccGiven = TRUE; break; case BSIM4v7_MOD_NTOX : mod->BSIM4v7ntox = value->rValue; mod->BSIM4v7ntoxGiven = TRUE; break; case BSIM4v7_MOD_EIGBINV : mod->BSIM4v7eigbinv = value->rValue; mod->BSIM4v7eigbinvGiven = TRUE; break; case BSIM4v7_MOD_PIGCD : mod->BSIM4v7pigcd = value->rValue; mod->BSIM4v7pigcdGiven = TRUE; break; case BSIM4v7_MOD_POXEDGE : mod->BSIM4v7poxedge = value->rValue; mod->BSIM4v7poxedgeGiven = TRUE; break; case BSIM4v7_MOD_XRCRG1 : mod->BSIM4v7xrcrg1 = value->rValue; mod->BSIM4v7xrcrg1Given = TRUE; break; case BSIM4v7_MOD_XRCRG2 : mod->BSIM4v7xrcrg2 = value->rValue; mod->BSIM4v7xrcrg2Given = TRUE; break; case BSIM4v7_MOD_LAMBDA : mod->BSIM4v7lambda = value->rValue; mod->BSIM4v7lambdaGiven = TRUE; break; case BSIM4v7_MOD_VTL : mod->BSIM4v7vtl = value->rValue; mod->BSIM4v7vtlGiven = TRUE; break; case BSIM4v7_MOD_XN: mod->BSIM4v7xn = value->rValue; mod->BSIM4v7xnGiven = TRUE; break; case BSIM4v7_MOD_LC: mod->BSIM4v7lc = value->rValue; mod->BSIM4v7lcGiven = TRUE; break; case BSIM4v7_MOD_TNOIA : mod->BSIM4v7tnoia = value->rValue; mod->BSIM4v7tnoiaGiven = TRUE; break; case BSIM4v7_MOD_TNOIB : mod->BSIM4v7tnoib = value->rValue; mod->BSIM4v7tnoibGiven = TRUE; break; case BSIM4v7_MOD_TNOIC : mod->BSIM4v7tnoic = value->rValue; mod->BSIM4v7tnoicGiven = TRUE; break; case BSIM4v7_MOD_RNOIA : mod->BSIM4v7rnoia = value->rValue; mod->BSIM4v7rnoiaGiven = TRUE; break; case BSIM4v7_MOD_RNOIB : mod->BSIM4v7rnoib = value->rValue; mod->BSIM4v7rnoibGiven = TRUE; break; case BSIM4v7_MOD_RNOIC : mod->BSIM4v7rnoic = value->rValue; mod->BSIM4v7rnoicGiven = TRUE; break; case BSIM4v7_MOD_NTNOI : mod->BSIM4v7ntnoi = value->rValue; mod->BSIM4v7ntnoiGiven = TRUE; break; case BSIM4v7_MOD_VFBSDOFF: mod->BSIM4v7vfbsdoff = value->rValue; mod->BSIM4v7vfbsdoffGiven = TRUE; break; case BSIM4v7_MOD_TVFBSDOFF: mod->BSIM4v7tvfbsdoff = value->rValue; mod->BSIM4v7tvfbsdoffGiven = TRUE; break; case BSIM4v7_MOD_LINTNOI: mod->BSIM4v7lintnoi = value->rValue; mod->BSIM4v7lintnoiGiven = TRUE; break; /* stress effect */ case BSIM4v7_MOD_SAREF : mod->BSIM4v7saref = value->rValue; mod->BSIM4v7sarefGiven = TRUE; break; case BSIM4v7_MOD_SBREF : mod->BSIM4v7sbref = value->rValue; mod->BSIM4v7sbrefGiven = TRUE; break; case BSIM4v7_MOD_WLOD : mod->BSIM4v7wlod = value->rValue; mod->BSIM4v7wlodGiven = TRUE; break; case BSIM4v7_MOD_KU0 : mod->BSIM4v7ku0 = value->rValue; mod->BSIM4v7ku0Given = TRUE; break; case BSIM4v7_MOD_KVSAT : mod->BSIM4v7kvsat = value->rValue; mod->BSIM4v7kvsatGiven = TRUE; break; case BSIM4v7_MOD_KVTH0 : mod->BSIM4v7kvth0 = value->rValue; mod->BSIM4v7kvth0Given = TRUE; break; case BSIM4v7_MOD_TKU0 : mod->BSIM4v7tku0 = value->rValue; mod->BSIM4v7tku0Given = TRUE; break; case BSIM4v7_MOD_LLODKU0 : mod->BSIM4v7llodku0 = value->rValue; mod->BSIM4v7llodku0Given = TRUE; break; case BSIM4v7_MOD_WLODKU0 : mod->BSIM4v7wlodku0 = value->rValue; mod->BSIM4v7wlodku0Given = TRUE; break; case BSIM4v7_MOD_LLODVTH : mod->BSIM4v7llodvth = value->rValue; mod->BSIM4v7llodvthGiven = TRUE; break; case BSIM4v7_MOD_WLODVTH : mod->BSIM4v7wlodvth = value->rValue; mod->BSIM4v7wlodvthGiven = TRUE; break; case BSIM4v7_MOD_LKU0 : mod->BSIM4v7lku0 = value->rValue; mod->BSIM4v7lku0Given = TRUE; break; case BSIM4v7_MOD_WKU0 : mod->BSIM4v7wku0 = value->rValue; mod->BSIM4v7wku0Given = TRUE; break; case BSIM4v7_MOD_PKU0 : mod->BSIM4v7pku0 = value->rValue; mod->BSIM4v7pku0Given = TRUE; break; case BSIM4v7_MOD_LKVTH0 : mod->BSIM4v7lkvth0 = value->rValue; mod->BSIM4v7lkvth0Given = TRUE; break; case BSIM4v7_MOD_WKVTH0 : mod->BSIM4v7wkvth0 = value->rValue; mod->BSIM4v7wkvth0Given = TRUE; break; case BSIM4v7_MOD_PKVTH0 : mod->BSIM4v7pkvth0 = value->rValue; mod->BSIM4v7pkvth0Given = TRUE; break; case BSIM4v7_MOD_STK2 : mod->BSIM4v7stk2 = value->rValue; mod->BSIM4v7stk2Given = TRUE; break; case BSIM4v7_MOD_LODK2 : mod->BSIM4v7lodk2 = value->rValue; mod->BSIM4v7lodk2Given = TRUE; break; case BSIM4v7_MOD_STETA0 : mod->BSIM4v7steta0 = value->rValue; mod->BSIM4v7steta0Given = TRUE; break; case BSIM4v7_MOD_LODETA0 : mod->BSIM4v7lodeta0 = value->rValue; mod->BSIM4v7lodeta0Given = TRUE; break; case BSIM4v7_MOD_WEB : mod->BSIM4v7web = value->rValue; mod->BSIM4v7webGiven = TRUE; break; case BSIM4v7_MOD_WEC : mod->BSIM4v7wec = value->rValue; mod->BSIM4v7wecGiven = TRUE; break; case BSIM4v7_MOD_KVTH0WE : mod->BSIM4v7kvth0we = value->rValue; mod->BSIM4v7kvth0weGiven = TRUE; break; case BSIM4v7_MOD_K2WE : mod->BSIM4v7k2we = value->rValue; mod->BSIM4v7k2weGiven = TRUE; break; case BSIM4v7_MOD_KU0WE : mod->BSIM4v7ku0we = value->rValue; mod->BSIM4v7ku0weGiven = TRUE; break; case BSIM4v7_MOD_SCREF : mod->BSIM4v7scref = value->rValue; mod->BSIM4v7screfGiven = TRUE; break; case BSIM4v7_MOD_WPEMOD : mod->BSIM4v7wpemod = value->rValue; mod->BSIM4v7wpemodGiven = TRUE; break; case BSIM4v7_MOD_LKVTH0WE : mod->BSIM4v7lkvth0we = value->rValue; mod->BSIM4v7lkvth0weGiven = TRUE; break; case BSIM4v7_MOD_LK2WE : mod->BSIM4v7lk2we = value->rValue; mod->BSIM4v7lk2weGiven = TRUE; break; case BSIM4v7_MOD_LKU0WE : mod->BSIM4v7lku0we = value->rValue; mod->BSIM4v7lku0weGiven = TRUE; break; case BSIM4v7_MOD_WKVTH0WE : mod->BSIM4v7wkvth0we = value->rValue; mod->BSIM4v7wkvth0weGiven = TRUE; break; case BSIM4v7_MOD_WK2WE : mod->BSIM4v7wk2we = value->rValue; mod->BSIM4v7wk2weGiven = TRUE; break; case BSIM4v7_MOD_WKU0WE : mod->BSIM4v7wku0we = value->rValue; mod->BSIM4v7wku0weGiven = TRUE; break; case BSIM4v7_MOD_PKVTH0WE : mod->BSIM4v7pkvth0we = value->rValue; mod->BSIM4v7pkvth0weGiven = TRUE; break; case BSIM4v7_MOD_PK2WE : mod->BSIM4v7pk2we = value->rValue; mod->BSIM4v7pk2weGiven = TRUE; break; case BSIM4v7_MOD_PKU0WE : mod->BSIM4v7pku0we = value->rValue; mod->BSIM4v7pku0weGiven = TRUE; break; case BSIM4v7_MOD_BETA0 : mod->BSIM4v7beta0 = value->rValue; mod->BSIM4v7beta0Given = TRUE; break; case BSIM4v7_MOD_IJTHDFWD : mod->BSIM4v7ijthdfwd = value->rValue; mod->BSIM4v7ijthdfwdGiven = TRUE; break; case BSIM4v7_MOD_IJTHSFWD : mod->BSIM4v7ijthsfwd = value->rValue; mod->BSIM4v7ijthsfwdGiven = TRUE; break; case BSIM4v7_MOD_IJTHDREV : mod->BSIM4v7ijthdrev = value->rValue; mod->BSIM4v7ijthdrevGiven = TRUE; break; case BSIM4v7_MOD_IJTHSREV : mod->BSIM4v7ijthsrev = value->rValue; mod->BSIM4v7ijthsrevGiven = TRUE; break; case BSIM4v7_MOD_XJBVD : mod->BSIM4v7xjbvd = value->rValue; mod->BSIM4v7xjbvdGiven = TRUE; break; case BSIM4v7_MOD_XJBVS : mod->BSIM4v7xjbvs = value->rValue; mod->BSIM4v7xjbvsGiven = TRUE; break; case BSIM4v7_MOD_BVD : mod->BSIM4v7bvd = value->rValue; mod->BSIM4v7bvdGiven = TRUE; break; case BSIM4v7_MOD_BVS : mod->BSIM4v7bvs = value->rValue; mod->BSIM4v7bvsGiven = TRUE; break; /* reverse diode */ case BSIM4v7_MOD_JTSS : mod->BSIM4v7jtss = value->rValue; mod->BSIM4v7jtssGiven = TRUE; break; case BSIM4v7_MOD_JTSD : mod->BSIM4v7jtsd = value->rValue; mod->BSIM4v7jtsdGiven = TRUE; break; case BSIM4v7_MOD_JTSSWS : mod->BSIM4v7jtssws = value->rValue; mod->BSIM4v7jtsswsGiven = TRUE; break; case BSIM4v7_MOD_JTSSWD : mod->BSIM4v7jtsswd = value->rValue; mod->BSIM4v7jtsswdGiven = TRUE; break; case BSIM4v7_MOD_JTSSWGS : mod->BSIM4v7jtsswgs = value->rValue; mod->BSIM4v7jtsswgsGiven = TRUE; break; case BSIM4v7_MOD_JTSSWGD : mod->BSIM4v7jtsswgd = value->rValue; mod->BSIM4v7jtsswgdGiven = TRUE; break; case BSIM4v7_MOD_JTWEFF : mod->BSIM4v7jtweff = value->rValue; mod->BSIM4v7jtweffGiven = TRUE; break; case BSIM4v7_MOD_NJTS : mod->BSIM4v7njts = value->rValue; mod->BSIM4v7njtsGiven = TRUE; break; case BSIM4v7_MOD_NJTSSW : mod->BSIM4v7njtssw = value->rValue; mod->BSIM4v7njtsswGiven = TRUE; break; case BSIM4v7_MOD_NJTSSWG : mod->BSIM4v7njtsswg = value->rValue; mod->BSIM4v7njtsswgGiven = TRUE; break; case BSIM4v7_MOD_NJTSD : mod->BSIM4v7njtsd = value->rValue; mod->BSIM4v7njtsdGiven = TRUE; break; case BSIM4v7_MOD_NJTSSWD : mod->BSIM4v7njtsswd = value->rValue; mod->BSIM4v7njtsswdGiven = TRUE; break; case BSIM4v7_MOD_NJTSSWGD : mod->BSIM4v7njtsswgd = value->rValue; mod->BSIM4v7njtsswgdGiven = TRUE; break; case BSIM4v7_MOD_XTSS : mod->BSIM4v7xtss = value->rValue; mod->BSIM4v7xtssGiven = TRUE; break; case BSIM4v7_MOD_XTSD : mod->BSIM4v7xtsd = value->rValue; mod->BSIM4v7xtsdGiven = TRUE; break; case BSIM4v7_MOD_XTSSWS : mod->BSIM4v7xtssws = value->rValue; mod->BSIM4v7xtsswsGiven = TRUE; break; case BSIM4v7_MOD_XTSSWD : mod->BSIM4v7xtsswd = value->rValue; mod->BSIM4v7xtsswdGiven = TRUE; break; case BSIM4v7_MOD_XTSSWGS : mod->BSIM4v7xtsswgs = value->rValue; mod->BSIM4v7xtsswgsGiven = TRUE; break; case BSIM4v7_MOD_XTSSWGD : mod->BSIM4v7xtsswgd = value->rValue; mod->BSIM4v7xtsswgdGiven = TRUE; break; case BSIM4v7_MOD_TNJTS : mod->BSIM4v7tnjts = value->rValue; mod->BSIM4v7tnjtsGiven = TRUE; break; case BSIM4v7_MOD_TNJTSSW : mod->BSIM4v7tnjtssw = value->rValue; mod->BSIM4v7tnjtsswGiven = TRUE; break; case BSIM4v7_MOD_TNJTSSWG : mod->BSIM4v7tnjtsswg = value->rValue; mod->BSIM4v7tnjtsswgGiven = TRUE; break; case BSIM4v7_MOD_TNJTSD : mod->BSIM4v7tnjtsd = value->rValue; mod->BSIM4v7tnjtsdGiven = TRUE; break; case BSIM4v7_MOD_TNJTSSWD : mod->BSIM4v7tnjtsswd = value->rValue; mod->BSIM4v7tnjtsswdGiven = TRUE; break; case BSIM4v7_MOD_TNJTSSWGD : mod->BSIM4v7tnjtsswgd = value->rValue; mod->BSIM4v7tnjtsswgdGiven = TRUE; break; case BSIM4v7_MOD_VTSS : mod->BSIM4v7vtss = value->rValue; mod->BSIM4v7vtssGiven = TRUE; break; case BSIM4v7_MOD_VTSD : mod->BSIM4v7vtsd = value->rValue; mod->BSIM4v7vtsdGiven = TRUE; break; case BSIM4v7_MOD_VTSSWS : mod->BSIM4v7vtssws = value->rValue; mod->BSIM4v7vtsswsGiven = TRUE; break; case BSIM4v7_MOD_VTSSWD : mod->BSIM4v7vtsswd = value->rValue; mod->BSIM4v7vtsswdGiven = TRUE; break; case BSIM4v7_MOD_VTSSWGS : mod->BSIM4v7vtsswgs = value->rValue; mod->BSIM4v7vtsswgsGiven = TRUE; break; case BSIM4v7_MOD_VTSSWGD : mod->BSIM4v7vtsswgd = value->rValue; mod->BSIM4v7vtsswgdGiven = TRUE; break; case BSIM4v7_MOD_VFB : mod->BSIM4v7vfb = value->rValue; mod->BSIM4v7vfbGiven = TRUE; break; case BSIM4v7_MOD_GBMIN : mod->BSIM4v7gbmin = value->rValue; mod->BSIM4v7gbminGiven = TRUE; break; case BSIM4v7_MOD_RBDB : mod->BSIM4v7rbdb = value->rValue; mod->BSIM4v7rbdbGiven = TRUE; break; case BSIM4v7_MOD_RBPB : mod->BSIM4v7rbpb = value->rValue; mod->BSIM4v7rbpbGiven = TRUE; break; case BSIM4v7_MOD_RBSB : mod->BSIM4v7rbsb = value->rValue; mod->BSIM4v7rbsbGiven = TRUE; break; case BSIM4v7_MOD_RBPS : mod->BSIM4v7rbps = value->rValue; mod->BSIM4v7rbpsGiven = TRUE; break; case BSIM4v7_MOD_RBPD : mod->BSIM4v7rbpd = value->rValue; mod->BSIM4v7rbpdGiven = TRUE; break; case BSIM4v7_MOD_RBPS0 : mod->BSIM4v7rbps0 = value->rValue; mod->BSIM4v7rbps0Given = TRUE; break; case BSIM4v7_MOD_RBPSL : mod->BSIM4v7rbpsl = value->rValue; mod->BSIM4v7rbpslGiven = TRUE; break; case BSIM4v7_MOD_RBPSW : mod->BSIM4v7rbpsw = value->rValue; mod->BSIM4v7rbpswGiven = TRUE; break; case BSIM4v7_MOD_RBPSNF : mod->BSIM4v7rbpsnf = value->rValue; mod->BSIM4v7rbpsnfGiven = TRUE; break; case BSIM4v7_MOD_RBPD0 : mod->BSIM4v7rbpd0 = value->rValue; mod->BSIM4v7rbpd0Given = TRUE; break; case BSIM4v7_MOD_RBPDL : mod->BSIM4v7rbpdl = value->rValue; mod->BSIM4v7rbpdlGiven = TRUE; break; case BSIM4v7_MOD_RBPDW : mod->BSIM4v7rbpdw = value->rValue; mod->BSIM4v7rbpdwGiven = TRUE; break; case BSIM4v7_MOD_RBPDNF : mod->BSIM4v7rbpdnf = value->rValue; mod->BSIM4v7rbpdnfGiven = TRUE; break; case BSIM4v7_MOD_RBPBX0 : mod->BSIM4v7rbpbx0 = value->rValue; mod->BSIM4v7rbpbx0Given = TRUE; break; case BSIM4v7_MOD_RBPBXL : mod->BSIM4v7rbpbxl = value->rValue; mod->BSIM4v7rbpbxlGiven = TRUE; break; case BSIM4v7_MOD_RBPBXW : mod->BSIM4v7rbpbxw = value->rValue; mod->BSIM4v7rbpbxwGiven = TRUE; break; case BSIM4v7_MOD_RBPBXNF : mod->BSIM4v7rbpbxnf = value->rValue; mod->BSIM4v7rbpbxnfGiven = TRUE; break; case BSIM4v7_MOD_RBPBY0 : mod->BSIM4v7rbpby0 = value->rValue; mod->BSIM4v7rbpby0Given = TRUE; break; case BSIM4v7_MOD_RBPBYL : mod->BSIM4v7rbpbyl = value->rValue; mod->BSIM4v7rbpbylGiven = TRUE; break; case BSIM4v7_MOD_RBPBYW : mod->BSIM4v7rbpbyw = value->rValue; mod->BSIM4v7rbpbywGiven = TRUE; break; case BSIM4v7_MOD_RBPBYNF : mod->BSIM4v7rbpbynf = value->rValue; mod->BSIM4v7rbpbynfGiven = TRUE; break; case BSIM4v7_MOD_RBSBX0 : mod->BSIM4v7rbsbx0 = value->rValue; mod->BSIM4v7rbsbx0Given = TRUE; break; case BSIM4v7_MOD_RBSBY0 : mod->BSIM4v7rbsby0 = value->rValue; mod->BSIM4v7rbsby0Given = TRUE; break; case BSIM4v7_MOD_RBDBX0 : mod->BSIM4v7rbdbx0 = value->rValue; mod->BSIM4v7rbdbx0Given = TRUE; break; case BSIM4v7_MOD_RBDBY0 : mod->BSIM4v7rbdby0 = value->rValue; mod->BSIM4v7rbdby0Given = TRUE; break; case BSIM4v7_MOD_RBSDBXL : mod->BSIM4v7rbsdbxl = value->rValue; mod->BSIM4v7rbsdbxlGiven = TRUE; break; case BSIM4v7_MOD_RBSDBXW : mod->BSIM4v7rbsdbxw = value->rValue; mod->BSIM4v7rbsdbxwGiven = TRUE; break; case BSIM4v7_MOD_RBSDBXNF : mod->BSIM4v7rbsdbxnf = value->rValue; mod->BSIM4v7rbsdbxnfGiven = TRUE; break; case BSIM4v7_MOD_RBSDBYL : mod->BSIM4v7rbsdbyl = value->rValue; mod->BSIM4v7rbsdbylGiven = TRUE; break; case BSIM4v7_MOD_RBSDBYW : mod->BSIM4v7rbsdbyw = value->rValue; mod->BSIM4v7rbsdbywGiven = TRUE; break; case BSIM4v7_MOD_RBSDBYNF : mod->BSIM4v7rbsdbynf = value->rValue; mod->BSIM4v7rbsdbynfGiven = TRUE; break; case BSIM4v7_MOD_CGSL : mod->BSIM4v7cgsl = value->rValue; mod->BSIM4v7cgslGiven = TRUE; break; case BSIM4v7_MOD_CGDL : mod->BSIM4v7cgdl = value->rValue; mod->BSIM4v7cgdlGiven = TRUE; break; case BSIM4v7_MOD_CKAPPAS : mod->BSIM4v7ckappas = value->rValue; mod->BSIM4v7ckappasGiven = TRUE; break; case BSIM4v7_MOD_CKAPPAD : mod->BSIM4v7ckappad = value->rValue; mod->BSIM4v7ckappadGiven = TRUE; break; case BSIM4v7_MOD_CF : mod->BSIM4v7cf = value->rValue; mod->BSIM4v7cfGiven = TRUE; break; case BSIM4v7_MOD_CLC : mod->BSIM4v7clc = value->rValue; mod->BSIM4v7clcGiven = TRUE; break; case BSIM4v7_MOD_CLE : mod->BSIM4v7cle = value->rValue; mod->BSIM4v7cleGiven = TRUE; break; case BSIM4v7_MOD_DWC : mod->BSIM4v7dwc = value->rValue; mod->BSIM4v7dwcGiven = TRUE; break; case BSIM4v7_MOD_DLC : mod->BSIM4v7dlc = value->rValue; mod->BSIM4v7dlcGiven = TRUE; break; case BSIM4v7_MOD_XW : mod->BSIM4v7xw = value->rValue; mod->BSIM4v7xwGiven = TRUE; break; case BSIM4v7_MOD_XL : mod->BSIM4v7xl = value->rValue; mod->BSIM4v7xlGiven = TRUE; break; case BSIM4v7_MOD_DLCIG : mod->BSIM4v7dlcig = value->rValue; mod->BSIM4v7dlcigGiven = TRUE; break; case BSIM4v7_MOD_DLCIGD : mod->BSIM4v7dlcigd = value->rValue; mod->BSIM4v7dlcigdGiven = TRUE; break; case BSIM4v7_MOD_DWJ : mod->BSIM4v7dwj = value->rValue; mod->BSIM4v7dwjGiven = TRUE; break; case BSIM4v7_MOD_VFBCV : mod->BSIM4v7vfbcv = value->rValue; mod->BSIM4v7vfbcvGiven = TRUE; break; case BSIM4v7_MOD_ACDE : mod->BSIM4v7acde = value->rValue; mod->BSIM4v7acdeGiven = TRUE; break; case BSIM4v7_MOD_MOIN : mod->BSIM4v7moin = value->rValue; mod->BSIM4v7moinGiven = TRUE; break; case BSIM4v7_MOD_NOFF : mod->BSIM4v7noff = value->rValue; mod->BSIM4v7noffGiven = TRUE; break; case BSIM4v7_MOD_VOFFCV : mod->BSIM4v7voffcv = value->rValue; mod->BSIM4v7voffcvGiven = TRUE; break; case BSIM4v7_MOD_DMCG : mod->BSIM4v7dmcg = value->rValue; mod->BSIM4v7dmcgGiven = TRUE; break; case BSIM4v7_MOD_DMCI : mod->BSIM4v7dmci = value->rValue; mod->BSIM4v7dmciGiven = TRUE; break; case BSIM4v7_MOD_DMDG : mod->BSIM4v7dmdg = value->rValue; mod->BSIM4v7dmdgGiven = TRUE; break; case BSIM4v7_MOD_DMCGT : mod->BSIM4v7dmcgt = value->rValue; mod->BSIM4v7dmcgtGiven = TRUE; break; case BSIM4v7_MOD_XGW : mod->BSIM4v7xgw = value->rValue; mod->BSIM4v7xgwGiven = TRUE; break; case BSIM4v7_MOD_XGL : mod->BSIM4v7xgl = value->rValue; mod->BSIM4v7xglGiven = TRUE; break; case BSIM4v7_MOD_RSHG : mod->BSIM4v7rshg = value->rValue; mod->BSIM4v7rshgGiven = TRUE; break; case BSIM4v7_MOD_NGCON : mod->BSIM4v7ngcon = value->rValue; mod->BSIM4v7ngconGiven = TRUE; break; case BSIM4v7_MOD_TCJ : mod->BSIM4v7tcj = value->rValue; mod->BSIM4v7tcjGiven = TRUE; break; case BSIM4v7_MOD_TPB : mod->BSIM4v7tpb = value->rValue; mod->BSIM4v7tpbGiven = TRUE; break; case BSIM4v7_MOD_TCJSW : mod->BSIM4v7tcjsw = value->rValue; mod->BSIM4v7tcjswGiven = TRUE; break; case BSIM4v7_MOD_TPBSW : mod->BSIM4v7tpbsw = value->rValue; mod->BSIM4v7tpbswGiven = TRUE; break; case BSIM4v7_MOD_TCJSWG : mod->BSIM4v7tcjswg = value->rValue; mod->BSIM4v7tcjswgGiven = TRUE; break; case BSIM4v7_MOD_TPBSWG : mod->BSIM4v7tpbswg = value->rValue; mod->BSIM4v7tpbswgGiven = TRUE; break; /* Length dependence */ case BSIM4v7_MOD_LCDSC : mod->BSIM4v7lcdsc = value->rValue; mod->BSIM4v7lcdscGiven = TRUE; break; case BSIM4v7_MOD_LCDSCB : mod->BSIM4v7lcdscb = value->rValue; mod->BSIM4v7lcdscbGiven = TRUE; break; case BSIM4v7_MOD_LCDSCD : mod->BSIM4v7lcdscd = value->rValue; mod->BSIM4v7lcdscdGiven = TRUE; break; case BSIM4v7_MOD_LCIT : mod->BSIM4v7lcit = value->rValue; mod->BSIM4v7lcitGiven = TRUE; break; case BSIM4v7_MOD_LNFACTOR : mod->BSIM4v7lnfactor = value->rValue; mod->BSIM4v7lnfactorGiven = TRUE; break; case BSIM4v7_MOD_LXJ: mod->BSIM4v7lxj = value->rValue; mod->BSIM4v7lxjGiven = TRUE; break; case BSIM4v7_MOD_LVSAT: mod->BSIM4v7lvsat = value->rValue; mod->BSIM4v7lvsatGiven = TRUE; break; case BSIM4v7_MOD_LA0: mod->BSIM4v7la0 = value->rValue; mod->BSIM4v7la0Given = TRUE; break; case BSIM4v7_MOD_LAGS: mod->BSIM4v7lags = value->rValue; mod->BSIM4v7lagsGiven = TRUE; break; case BSIM4v7_MOD_LA1: mod->BSIM4v7la1 = value->rValue; mod->BSIM4v7la1Given = TRUE; break; case BSIM4v7_MOD_LA2: mod->BSIM4v7la2 = value->rValue; mod->BSIM4v7la2Given = TRUE; break; case BSIM4v7_MOD_LAT: mod->BSIM4v7lat = value->rValue; mod->BSIM4v7latGiven = TRUE; break; case BSIM4v7_MOD_LKETA: mod->BSIM4v7lketa = value->rValue; mod->BSIM4v7lketaGiven = TRUE; break; case BSIM4v7_MOD_LNSUB: mod->BSIM4v7lnsub = value->rValue; mod->BSIM4v7lnsubGiven = TRUE; break; case BSIM4v7_MOD_LNDEP: mod->BSIM4v7lndep = value->rValue; mod->BSIM4v7lndepGiven = TRUE; if (mod->BSIM4v7lndep > 1.0e20) mod->BSIM4v7lndep *= 1.0e-6; break; case BSIM4v7_MOD_LNSD: mod->BSIM4v7lnsd = value->rValue; mod->BSIM4v7lnsdGiven = TRUE; if (mod->BSIM4v7lnsd > 1.0e23) mod->BSIM4v7lnsd *= 1.0e-6; break; case BSIM4v7_MOD_LNGATE: mod->BSIM4v7lngate = value->rValue; mod->BSIM4v7lngateGiven = TRUE; if (mod->BSIM4v7lngate > 1.0e23) mod->BSIM4v7lngate *= 1.0e-6; break; case BSIM4v7_MOD_LGAMMA1: mod->BSIM4v7lgamma1 = value->rValue; mod->BSIM4v7lgamma1Given = TRUE; break; case BSIM4v7_MOD_LGAMMA2: mod->BSIM4v7lgamma2 = value->rValue; mod->BSIM4v7lgamma2Given = TRUE; break; case BSIM4v7_MOD_LVBX: mod->BSIM4v7lvbx = value->rValue; mod->BSIM4v7lvbxGiven = TRUE; break; case BSIM4v7_MOD_LVBM: mod->BSIM4v7lvbm = value->rValue; mod->BSIM4v7lvbmGiven = TRUE; break; case BSIM4v7_MOD_LXT: mod->BSIM4v7lxt = value->rValue; mod->BSIM4v7lxtGiven = TRUE; break; case BSIM4v7_MOD_LK1: mod->BSIM4v7lk1 = value->rValue; mod->BSIM4v7lk1Given = TRUE; break; case BSIM4v7_MOD_LKT1: mod->BSIM4v7lkt1 = value->rValue; mod->BSIM4v7lkt1Given = TRUE; break; case BSIM4v7_MOD_LKT1L: mod->BSIM4v7lkt1l = value->rValue; mod->BSIM4v7lkt1lGiven = TRUE; break; case BSIM4v7_MOD_LKT2: mod->BSIM4v7lkt2 = value->rValue; mod->BSIM4v7lkt2Given = TRUE; break; case BSIM4v7_MOD_LK2: mod->BSIM4v7lk2 = value->rValue; mod->BSIM4v7lk2Given = TRUE; break; case BSIM4v7_MOD_LK3: mod->BSIM4v7lk3 = value->rValue; mod->BSIM4v7lk3Given = TRUE; break; case BSIM4v7_MOD_LK3B: mod->BSIM4v7lk3b = value->rValue; mod->BSIM4v7lk3bGiven = TRUE; break; case BSIM4v7_MOD_LLPE0: mod->BSIM4v7llpe0 = value->rValue; mod->BSIM4v7llpe0Given = TRUE; break; case BSIM4v7_MOD_LLPEB: mod->BSIM4v7llpeb = value->rValue; mod->BSIM4v7llpebGiven = TRUE; break; case BSIM4v7_MOD_LDVTP0: mod->BSIM4v7ldvtp0 = value->rValue; mod->BSIM4v7ldvtp0Given = TRUE; break; case BSIM4v7_MOD_LDVTP1: mod->BSIM4v7ldvtp1 = value->rValue; mod->BSIM4v7ldvtp1Given = TRUE; break; case BSIM4v7_MOD_LDVTP2: /* New DIBL/Rout */ mod->BSIM4v7ldvtp2 = value->rValue; mod->BSIM4v7ldvtp2Given = TRUE; break; case BSIM4v7_MOD_LDVTP3: mod->BSIM4v7ldvtp3 = value->rValue; mod->BSIM4v7ldvtp3Given = TRUE; break; case BSIM4v7_MOD_LDVTP4: mod->BSIM4v7ldvtp4 = value->rValue; mod->BSIM4v7ldvtp4Given = TRUE; break; case BSIM4v7_MOD_LDVTP5: mod->BSIM4v7ldvtp5 = value->rValue; mod->BSIM4v7ldvtp5Given = TRUE; break; case BSIM4v7_MOD_LW0: mod->BSIM4v7lw0 = value->rValue; mod->BSIM4v7lw0Given = TRUE; break; case BSIM4v7_MOD_LDVT0: mod->BSIM4v7ldvt0 = value->rValue; mod->BSIM4v7ldvt0Given = TRUE; break; case BSIM4v7_MOD_LDVT1: mod->BSIM4v7ldvt1 = value->rValue; mod->BSIM4v7ldvt1Given = TRUE; break; case BSIM4v7_MOD_LDVT2: mod->BSIM4v7ldvt2 = value->rValue; mod->BSIM4v7ldvt2Given = TRUE; break; case BSIM4v7_MOD_LDVT0W: mod->BSIM4v7ldvt0w = value->rValue; mod->BSIM4v7ldvt0wGiven = TRUE; break; case BSIM4v7_MOD_LDVT1W: mod->BSIM4v7ldvt1w = value->rValue; mod->BSIM4v7ldvt1wGiven = TRUE; break; case BSIM4v7_MOD_LDVT2W: mod->BSIM4v7ldvt2w = value->rValue; mod->BSIM4v7ldvt2wGiven = TRUE; break; case BSIM4v7_MOD_LDROUT: mod->BSIM4v7ldrout = value->rValue; mod->BSIM4v7ldroutGiven = TRUE; break; case BSIM4v7_MOD_LDSUB: mod->BSIM4v7ldsub = value->rValue; mod->BSIM4v7ldsubGiven = TRUE; break; case BSIM4v7_MOD_LVTH0: mod->BSIM4v7lvth0 = value->rValue; mod->BSIM4v7lvth0Given = TRUE; break; case BSIM4v7_MOD_LUA: mod->BSIM4v7lua = value->rValue; mod->BSIM4v7luaGiven = TRUE; break; case BSIM4v7_MOD_LUA1: mod->BSIM4v7lua1 = value->rValue; mod->BSIM4v7lua1Given = TRUE; break; case BSIM4v7_MOD_LUB: mod->BSIM4v7lub = value->rValue; mod->BSIM4v7lubGiven = TRUE; break; case BSIM4v7_MOD_LUB1: mod->BSIM4v7lub1 = value->rValue; mod->BSIM4v7lub1Given = TRUE; break; case BSIM4v7_MOD_LUC: mod->BSIM4v7luc = value->rValue; mod->BSIM4v7lucGiven = TRUE; break; case BSIM4v7_MOD_LUC1: mod->BSIM4v7luc1 = value->rValue; mod->BSIM4v7luc1Given = TRUE; break; case BSIM4v7_MOD_LU0 : mod->BSIM4v7lu0 = value->rValue; mod->BSIM4v7lu0Given = TRUE; break; case BSIM4v7_MOD_LUTE : mod->BSIM4v7lute = value->rValue; mod->BSIM4v7luteGiven = TRUE; break; case BSIM4v7_MOD_LUCSTE : mod->BSIM4v7lucste = value->rValue; mod->BSIM4v7lucsteGiven = TRUE; break; case BSIM4v7_MOD_LVOFF: mod->BSIM4v7lvoff = value->rValue; mod->BSIM4v7lvoffGiven = TRUE; break; case BSIM4v7_MOD_LTVOFF: mod->BSIM4v7ltvoff = value->rValue; mod->BSIM4v7ltvoffGiven = TRUE; break; case BSIM4v7_MOD_LTNFACTOR: /* v4.7 temp dep of leakage current */ mod->BSIM4v7ltnfactor = value->rValue; mod->BSIM4v7ltnfactorGiven = TRUE; break; case BSIM4v7_MOD_LTETA0: /* v4.7 temp dep of leakage current */ mod->BSIM4v7lteta0 = value->rValue; mod->BSIM4v7lteta0Given = TRUE; break; case BSIM4v7_MOD_LTVOFFCV: /* v4.7 temp dep of leakage current */ mod->BSIM4v7ltvoffcv = value->rValue; mod->BSIM4v7ltvoffcvGiven = TRUE; break; case BSIM4v7_MOD_LMINV: mod->BSIM4v7lminv = value->rValue; mod->BSIM4v7lminvGiven = TRUE; break; case BSIM4v7_MOD_LMINVCV: mod->BSIM4v7lminvcv = value->rValue; mod->BSIM4v7lminvcvGiven = TRUE; break; case BSIM4v7_MOD_LFPROUT: mod->BSIM4v7lfprout = value->rValue; mod->BSIM4v7lfproutGiven = TRUE; break; case BSIM4v7_MOD_LPDITS: mod->BSIM4v7lpdits = value->rValue; mod->BSIM4v7lpditsGiven = TRUE; break; case BSIM4v7_MOD_LPDITSD: mod->BSIM4v7lpditsd = value->rValue; mod->BSIM4v7lpditsdGiven = TRUE; break; case BSIM4v7_MOD_LDELTA : mod->BSIM4v7ldelta = value->rValue; mod->BSIM4v7ldeltaGiven = TRUE; break; case BSIM4v7_MOD_LRDSW: mod->BSIM4v7lrdsw = value->rValue; mod->BSIM4v7lrdswGiven = TRUE; break; case BSIM4v7_MOD_LRDW: mod->BSIM4v7lrdw = value->rValue; mod->BSIM4v7lrdwGiven = TRUE; break; case BSIM4v7_MOD_LRSW: mod->BSIM4v7lrsw = value->rValue; mod->BSIM4v7lrswGiven = TRUE; break; case BSIM4v7_MOD_LPRWB: mod->BSIM4v7lprwb = value->rValue; mod->BSIM4v7lprwbGiven = TRUE; break; case BSIM4v7_MOD_LPRWG: mod->BSIM4v7lprwg = value->rValue; mod->BSIM4v7lprwgGiven = TRUE; break; case BSIM4v7_MOD_LPRT: mod->BSIM4v7lprt = value->rValue; mod->BSIM4v7lprtGiven = TRUE; break; case BSIM4v7_MOD_LETA0: mod->BSIM4v7leta0 = value->rValue; mod->BSIM4v7leta0Given = TRUE; break; case BSIM4v7_MOD_LETAB: mod->BSIM4v7letab = value->rValue; mod->BSIM4v7letabGiven = TRUE; break; case BSIM4v7_MOD_LPCLM: mod->BSIM4v7lpclm = value->rValue; mod->BSIM4v7lpclmGiven = TRUE; break; case BSIM4v7_MOD_LPDIBL1: mod->BSIM4v7lpdibl1 = value->rValue; mod->BSIM4v7lpdibl1Given = TRUE; break; case BSIM4v7_MOD_LPDIBL2: mod->BSIM4v7lpdibl2 = value->rValue; mod->BSIM4v7lpdibl2Given = TRUE; break; case BSIM4v7_MOD_LPDIBLB: mod->BSIM4v7lpdiblb = value->rValue; mod->BSIM4v7lpdiblbGiven = TRUE; break; case BSIM4v7_MOD_LPSCBE1: mod->BSIM4v7lpscbe1 = value->rValue; mod->BSIM4v7lpscbe1Given = TRUE; break; case BSIM4v7_MOD_LPSCBE2: mod->BSIM4v7lpscbe2 = value->rValue; mod->BSIM4v7lpscbe2Given = TRUE; break; case BSIM4v7_MOD_LPVAG: mod->BSIM4v7lpvag = value->rValue; mod->BSIM4v7lpvagGiven = TRUE; break; case BSIM4v7_MOD_LWR : mod->BSIM4v7lwr = value->rValue; mod->BSIM4v7lwrGiven = TRUE; break; case BSIM4v7_MOD_LDWG : mod->BSIM4v7ldwg = value->rValue; mod->BSIM4v7ldwgGiven = TRUE; break; case BSIM4v7_MOD_LDWB : mod->BSIM4v7ldwb = value->rValue; mod->BSIM4v7ldwbGiven = TRUE; break; case BSIM4v7_MOD_LB0 : mod->BSIM4v7lb0 = value->rValue; mod->BSIM4v7lb0Given = TRUE; break; case BSIM4v7_MOD_LB1 : mod->BSIM4v7lb1 = value->rValue; mod->BSIM4v7lb1Given = TRUE; break; case BSIM4v7_MOD_LALPHA0 : mod->BSIM4v7lalpha0 = value->rValue; mod->BSIM4v7lalpha0Given = TRUE; break; case BSIM4v7_MOD_LALPHA1 : mod->BSIM4v7lalpha1 = value->rValue; mod->BSIM4v7lalpha1Given = TRUE; break; case BSIM4v7_MOD_LBETA0 : mod->BSIM4v7lbeta0 = value->rValue; mod->BSIM4v7lbeta0Given = TRUE; break; case BSIM4v7_MOD_LPHIN : mod->BSIM4v7lphin = value->rValue; mod->BSIM4v7lphinGiven = TRUE; break; case BSIM4v7_MOD_LAGIDL : mod->BSIM4v7lagidl = value->rValue; mod->BSIM4v7lagidlGiven = TRUE; break; case BSIM4v7_MOD_LBGIDL : mod->BSIM4v7lbgidl = value->rValue; mod->BSIM4v7lbgidlGiven = TRUE; break; case BSIM4v7_MOD_LCGIDL : mod->BSIM4v7lcgidl = value->rValue; mod->BSIM4v7lcgidlGiven = TRUE; break; case BSIM4v7_MOD_LEGIDL : mod->BSIM4v7legidl = value->rValue; mod->BSIM4v7legidlGiven = TRUE; break; case BSIM4v7_MOD_LFGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7lfgidl = value->rValue; mod->BSIM4v7lfgidlGiven = TRUE; break; case BSIM4v7_MOD_LKGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7lkgidl = value->rValue; mod->BSIM4v7lkgidlGiven = TRUE; break; case BSIM4v7_MOD_LRGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7lrgidl = value->rValue; mod->BSIM4v7lrgidlGiven = TRUE; break; case BSIM4v7_MOD_LAGISL : mod->BSIM4v7lagisl = value->rValue; mod->BSIM4v7lagislGiven = TRUE; break; case BSIM4v7_MOD_LBGISL : mod->BSIM4v7lbgisl = value->rValue; mod->BSIM4v7lbgislGiven = TRUE; break; case BSIM4v7_MOD_LCGISL : mod->BSIM4v7lcgisl = value->rValue; mod->BSIM4v7lcgislGiven = TRUE; break; case BSIM4v7_MOD_LEGISL : mod->BSIM4v7legisl = value->rValue; mod->BSIM4v7legislGiven = TRUE; break; case BSIM4v7_MOD_LFGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7lfgisl = value->rValue; mod->BSIM4v7lfgislGiven = TRUE; break; case BSIM4v7_MOD_LKGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7lkgisl = value->rValue; mod->BSIM4v7lkgislGiven = TRUE; break; case BSIM4v7_MOD_LRGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7lrgisl = value->rValue; mod->BSIM4v7lrgislGiven = TRUE; break; case BSIM4v7_MOD_LAIGC : mod->BSIM4v7laigc = value->rValue; mod->BSIM4v7laigcGiven = TRUE; break; case BSIM4v7_MOD_LBIGC : mod->BSIM4v7lbigc = value->rValue; mod->BSIM4v7lbigcGiven = TRUE; break; case BSIM4v7_MOD_LCIGC : mod->BSIM4v7lcigc = value->rValue; mod->BSIM4v7lcigcGiven = TRUE; break; case BSIM4v7_MOD_LAIGSD : mod->BSIM4v7laigsd = value->rValue; mod->BSIM4v7laigsdGiven = TRUE; break; case BSIM4v7_MOD_LBIGSD : mod->BSIM4v7lbigsd = value->rValue; mod->BSIM4v7lbigsdGiven = TRUE; break; case BSIM4v7_MOD_LCIGSD : mod->BSIM4v7lcigsd = value->rValue; mod->BSIM4v7lcigsdGiven = TRUE; break; case BSIM4v7_MOD_LAIGS : mod->BSIM4v7laigs = value->rValue; mod->BSIM4v7laigsGiven = TRUE; break; case BSIM4v7_MOD_LBIGS : mod->BSIM4v7lbigs = value->rValue; mod->BSIM4v7lbigsGiven = TRUE; break; case BSIM4v7_MOD_LCIGS : mod->BSIM4v7lcigs = value->rValue; mod->BSIM4v7lcigsGiven = TRUE; break; case BSIM4v7_MOD_LAIGD : mod->BSIM4v7laigd = value->rValue; mod->BSIM4v7laigdGiven = TRUE; break; case BSIM4v7_MOD_LBIGD : mod->BSIM4v7lbigd = value->rValue; mod->BSIM4v7lbigdGiven = TRUE; break; case BSIM4v7_MOD_LCIGD : mod->BSIM4v7lcigd = value->rValue; mod->BSIM4v7lcigdGiven = TRUE; break; case BSIM4v7_MOD_LAIGBACC : mod->BSIM4v7laigbacc = value->rValue; mod->BSIM4v7laigbaccGiven = TRUE; break; case BSIM4v7_MOD_LBIGBACC : mod->BSIM4v7lbigbacc = value->rValue; mod->BSIM4v7lbigbaccGiven = TRUE; break; case BSIM4v7_MOD_LCIGBACC : mod->BSIM4v7lcigbacc = value->rValue; mod->BSIM4v7lcigbaccGiven = TRUE; break; case BSIM4v7_MOD_LAIGBINV : mod->BSIM4v7laigbinv = value->rValue; mod->BSIM4v7laigbinvGiven = TRUE; break; case BSIM4v7_MOD_LBIGBINV : mod->BSIM4v7lbigbinv = value->rValue; mod->BSIM4v7lbigbinvGiven = TRUE; break; case BSIM4v7_MOD_LCIGBINV : mod->BSIM4v7lcigbinv = value->rValue; mod->BSIM4v7lcigbinvGiven = TRUE; break; case BSIM4v7_MOD_LNIGC : mod->BSIM4v7lnigc = value->rValue; mod->BSIM4v7lnigcGiven = TRUE; break; case BSIM4v7_MOD_LNIGBINV : mod->BSIM4v7lnigbinv = value->rValue; mod->BSIM4v7lnigbinvGiven = TRUE; break; case BSIM4v7_MOD_LNIGBACC : mod->BSIM4v7lnigbacc = value->rValue; mod->BSIM4v7lnigbaccGiven = TRUE; break; case BSIM4v7_MOD_LNTOX : mod->BSIM4v7lntox = value->rValue; mod->BSIM4v7lntoxGiven = TRUE; break; case BSIM4v7_MOD_LEIGBINV : mod->BSIM4v7leigbinv = value->rValue; mod->BSIM4v7leigbinvGiven = TRUE; break; case BSIM4v7_MOD_LPIGCD : mod->BSIM4v7lpigcd = value->rValue; mod->BSIM4v7lpigcdGiven = TRUE; break; case BSIM4v7_MOD_LPOXEDGE : mod->BSIM4v7lpoxedge = value->rValue; mod->BSIM4v7lpoxedgeGiven = TRUE; break; case BSIM4v7_MOD_LXRCRG1 : mod->BSIM4v7lxrcrg1 = value->rValue; mod->BSIM4v7lxrcrg1Given = TRUE; break; case BSIM4v7_MOD_LXRCRG2 : mod->BSIM4v7lxrcrg2 = value->rValue; mod->BSIM4v7lxrcrg2Given = TRUE; break; case BSIM4v7_MOD_LLAMBDA : mod->BSIM4v7llambda = value->rValue; mod->BSIM4v7llambdaGiven = TRUE; break; case BSIM4v7_MOD_LVTL : mod->BSIM4v7lvtl = value->rValue; mod->BSIM4v7lvtlGiven = TRUE; break; case BSIM4v7_MOD_LXN: mod->BSIM4v7lxn = value->rValue; mod->BSIM4v7lxnGiven = TRUE; break; case BSIM4v7_MOD_LVFBSDOFF: mod->BSIM4v7lvfbsdoff = value->rValue; mod->BSIM4v7lvfbsdoffGiven = TRUE; break; case BSIM4v7_MOD_LTVFBSDOFF: mod->BSIM4v7ltvfbsdoff = value->rValue; mod->BSIM4v7ltvfbsdoffGiven = TRUE; break; case BSIM4v7_MOD_LEU : mod->BSIM4v7leu = value->rValue; mod->BSIM4v7leuGiven = TRUE; break; case BSIM4v7_MOD_LUCS : mod->BSIM4v7lucs = value->rValue; mod->BSIM4v7lucsGiven = TRUE; break; case BSIM4v7_MOD_LVFB : mod->BSIM4v7lvfb = value->rValue; mod->BSIM4v7lvfbGiven = TRUE; break; case BSIM4v7_MOD_LCGSL : mod->BSIM4v7lcgsl = value->rValue; mod->BSIM4v7lcgslGiven = TRUE; break; case BSIM4v7_MOD_LCGDL : mod->BSIM4v7lcgdl = value->rValue; mod->BSIM4v7lcgdlGiven = TRUE; break; case BSIM4v7_MOD_LCKAPPAS : mod->BSIM4v7lckappas = value->rValue; mod->BSIM4v7lckappasGiven = TRUE; break; case BSIM4v7_MOD_LCKAPPAD : mod->BSIM4v7lckappad = value->rValue; mod->BSIM4v7lckappadGiven = TRUE; break; case BSIM4v7_MOD_LCF : mod->BSIM4v7lcf = value->rValue; mod->BSIM4v7lcfGiven = TRUE; break; case BSIM4v7_MOD_LCLC : mod->BSIM4v7lclc = value->rValue; mod->BSIM4v7lclcGiven = TRUE; break; case BSIM4v7_MOD_LCLE : mod->BSIM4v7lcle = value->rValue; mod->BSIM4v7lcleGiven = TRUE; break; case BSIM4v7_MOD_LVFBCV : mod->BSIM4v7lvfbcv = value->rValue; mod->BSIM4v7lvfbcvGiven = TRUE; break; case BSIM4v7_MOD_LACDE : mod->BSIM4v7lacde = value->rValue; mod->BSIM4v7lacdeGiven = TRUE; break; case BSIM4v7_MOD_LMOIN : mod->BSIM4v7lmoin = value->rValue; mod->BSIM4v7lmoinGiven = TRUE; break; case BSIM4v7_MOD_LNOFF : mod->BSIM4v7lnoff = value->rValue; mod->BSIM4v7lnoffGiven = TRUE; break; case BSIM4v7_MOD_LVOFFCV : mod->BSIM4v7lvoffcv = value->rValue; mod->BSIM4v7lvoffcvGiven = TRUE; break; /* Width dependence */ case BSIM4v7_MOD_WCDSC : mod->BSIM4v7wcdsc = value->rValue; mod->BSIM4v7wcdscGiven = TRUE; break; case BSIM4v7_MOD_WCDSCB : mod->BSIM4v7wcdscb = value->rValue; mod->BSIM4v7wcdscbGiven = TRUE; break; case BSIM4v7_MOD_WCDSCD : mod->BSIM4v7wcdscd = value->rValue; mod->BSIM4v7wcdscdGiven = TRUE; break; case BSIM4v7_MOD_WCIT : mod->BSIM4v7wcit = value->rValue; mod->BSIM4v7wcitGiven = TRUE; break; case BSIM4v7_MOD_WNFACTOR : mod->BSIM4v7wnfactor = value->rValue; mod->BSIM4v7wnfactorGiven = TRUE; break; case BSIM4v7_MOD_WXJ: mod->BSIM4v7wxj = value->rValue; mod->BSIM4v7wxjGiven = TRUE; break; case BSIM4v7_MOD_WVSAT: mod->BSIM4v7wvsat = value->rValue; mod->BSIM4v7wvsatGiven = TRUE; break; case BSIM4v7_MOD_WA0: mod->BSIM4v7wa0 = value->rValue; mod->BSIM4v7wa0Given = TRUE; break; case BSIM4v7_MOD_WAGS: mod->BSIM4v7wags = value->rValue; mod->BSIM4v7wagsGiven = TRUE; break; case BSIM4v7_MOD_WA1: mod->BSIM4v7wa1 = value->rValue; mod->BSIM4v7wa1Given = TRUE; break; case BSIM4v7_MOD_WA2: mod->BSIM4v7wa2 = value->rValue; mod->BSIM4v7wa2Given = TRUE; break; case BSIM4v7_MOD_WAT: mod->BSIM4v7wat = value->rValue; mod->BSIM4v7watGiven = TRUE; break; case BSIM4v7_MOD_WKETA: mod->BSIM4v7wketa = value->rValue; mod->BSIM4v7wketaGiven = TRUE; break; case BSIM4v7_MOD_WNSUB: mod->BSIM4v7wnsub = value->rValue; mod->BSIM4v7wnsubGiven = TRUE; break; case BSIM4v7_MOD_WNDEP: mod->BSIM4v7wndep = value->rValue; mod->BSIM4v7wndepGiven = TRUE; if (mod->BSIM4v7wndep > 1.0e20) mod->BSIM4v7wndep *= 1.0e-6; break; case BSIM4v7_MOD_WNSD: mod->BSIM4v7wnsd = value->rValue; mod->BSIM4v7wnsdGiven = TRUE; if (mod->BSIM4v7wnsd > 1.0e23) mod->BSIM4v7wnsd *= 1.0e-6; break; case BSIM4v7_MOD_WNGATE: mod->BSIM4v7wngate = value->rValue; mod->BSIM4v7wngateGiven = TRUE; if (mod->BSIM4v7wngate > 1.0e23) mod->BSIM4v7wngate *= 1.0e-6; break; case BSIM4v7_MOD_WGAMMA1: mod->BSIM4v7wgamma1 = value->rValue; mod->BSIM4v7wgamma1Given = TRUE; break; case BSIM4v7_MOD_WGAMMA2: mod->BSIM4v7wgamma2 = value->rValue; mod->BSIM4v7wgamma2Given = TRUE; break; case BSIM4v7_MOD_WVBX: mod->BSIM4v7wvbx = value->rValue; mod->BSIM4v7wvbxGiven = TRUE; break; case BSIM4v7_MOD_WVBM: mod->BSIM4v7wvbm = value->rValue; mod->BSIM4v7wvbmGiven = TRUE; break; case BSIM4v7_MOD_WXT: mod->BSIM4v7wxt = value->rValue; mod->BSIM4v7wxtGiven = TRUE; break; case BSIM4v7_MOD_WK1: mod->BSIM4v7wk1 = value->rValue; mod->BSIM4v7wk1Given = TRUE; break; case BSIM4v7_MOD_WKT1: mod->BSIM4v7wkt1 = value->rValue; mod->BSIM4v7wkt1Given = TRUE; break; case BSIM4v7_MOD_WKT1L: mod->BSIM4v7wkt1l = value->rValue; mod->BSIM4v7wkt1lGiven = TRUE; break; case BSIM4v7_MOD_WKT2: mod->BSIM4v7wkt2 = value->rValue; mod->BSIM4v7wkt2Given = TRUE; break; case BSIM4v7_MOD_WK2: mod->BSIM4v7wk2 = value->rValue; mod->BSIM4v7wk2Given = TRUE; break; case BSIM4v7_MOD_WK3: mod->BSIM4v7wk3 = value->rValue; mod->BSIM4v7wk3Given = TRUE; break; case BSIM4v7_MOD_WK3B: mod->BSIM4v7wk3b = value->rValue; mod->BSIM4v7wk3bGiven = TRUE; break; case BSIM4v7_MOD_WLPE0: mod->BSIM4v7wlpe0 = value->rValue; mod->BSIM4v7wlpe0Given = TRUE; break; case BSIM4v7_MOD_WLPEB: mod->BSIM4v7wlpeb = value->rValue; mod->BSIM4v7wlpebGiven = TRUE; break; case BSIM4v7_MOD_WDVTP0: mod->BSIM4v7wdvtp0 = value->rValue; mod->BSIM4v7wdvtp0Given = TRUE; break; case BSIM4v7_MOD_WDVTP1: mod->BSIM4v7wdvtp1 = value->rValue; mod->BSIM4v7wdvtp1Given = TRUE; break; case BSIM4v7_MOD_WDVTP2: /* New DIBL/Rout */ mod->BSIM4v7wdvtp2 = value->rValue; mod->BSIM4v7wdvtp2Given = TRUE; break; case BSIM4v7_MOD_WDVTP3: mod->BSIM4v7wdvtp3 = value->rValue; mod->BSIM4v7wdvtp3Given = TRUE; break; case BSIM4v7_MOD_WDVTP4: mod->BSIM4v7wdvtp4 = value->rValue; mod->BSIM4v7wdvtp4Given = TRUE; break; case BSIM4v7_MOD_WDVTP5: mod->BSIM4v7wdvtp5 = value->rValue; mod->BSIM4v7wdvtp5Given = TRUE; break; case BSIM4v7_MOD_WW0: mod->BSIM4v7ww0 = value->rValue; mod->BSIM4v7ww0Given = TRUE; break; case BSIM4v7_MOD_WDVT0: mod->BSIM4v7wdvt0 = value->rValue; mod->BSIM4v7wdvt0Given = TRUE; break; case BSIM4v7_MOD_WDVT1: mod->BSIM4v7wdvt1 = value->rValue; mod->BSIM4v7wdvt1Given = TRUE; break; case BSIM4v7_MOD_WDVT2: mod->BSIM4v7wdvt2 = value->rValue; mod->BSIM4v7wdvt2Given = TRUE; break; case BSIM4v7_MOD_WDVT0W: mod->BSIM4v7wdvt0w = value->rValue; mod->BSIM4v7wdvt0wGiven = TRUE; break; case BSIM4v7_MOD_WDVT1W: mod->BSIM4v7wdvt1w = value->rValue; mod->BSIM4v7wdvt1wGiven = TRUE; break; case BSIM4v7_MOD_WDVT2W: mod->BSIM4v7wdvt2w = value->rValue; mod->BSIM4v7wdvt2wGiven = TRUE; break; case BSIM4v7_MOD_WDROUT: mod->BSIM4v7wdrout = value->rValue; mod->BSIM4v7wdroutGiven = TRUE; break; case BSIM4v7_MOD_WDSUB: mod->BSIM4v7wdsub = value->rValue; mod->BSIM4v7wdsubGiven = TRUE; break; case BSIM4v7_MOD_WVTH0: mod->BSIM4v7wvth0 = value->rValue; mod->BSIM4v7wvth0Given = TRUE; break; case BSIM4v7_MOD_WUA: mod->BSIM4v7wua = value->rValue; mod->BSIM4v7wuaGiven = TRUE; break; case BSIM4v7_MOD_WUA1: mod->BSIM4v7wua1 = value->rValue; mod->BSIM4v7wua1Given = TRUE; break; case BSIM4v7_MOD_WUB: mod->BSIM4v7wub = value->rValue; mod->BSIM4v7wubGiven = TRUE; break; case BSIM4v7_MOD_WUB1: mod->BSIM4v7wub1 = value->rValue; mod->BSIM4v7wub1Given = TRUE; break; case BSIM4v7_MOD_WUC: mod->BSIM4v7wuc = value->rValue; mod->BSIM4v7wucGiven = TRUE; break; case BSIM4v7_MOD_WUC1: mod->BSIM4v7wuc1 = value->rValue; mod->BSIM4v7wuc1Given = TRUE; break; case BSIM4v7_MOD_WU0 : mod->BSIM4v7wu0 = value->rValue; mod->BSIM4v7wu0Given = TRUE; break; case BSIM4v7_MOD_WUTE : mod->BSIM4v7wute = value->rValue; mod->BSIM4v7wuteGiven = TRUE; break; case BSIM4v7_MOD_WUCSTE : mod->BSIM4v7wucste = value->rValue; mod->BSIM4v7wucsteGiven = TRUE; break; case BSIM4v7_MOD_WVOFF: mod->BSIM4v7wvoff = value->rValue; mod->BSIM4v7wvoffGiven = TRUE; break; case BSIM4v7_MOD_WTVOFF: mod->BSIM4v7wtvoff = value->rValue; mod->BSIM4v7wtvoffGiven = TRUE; break; case BSIM4v7_MOD_WTNFACTOR: /* v4.7 temp dep of leakage current */ mod->BSIM4v7wtnfactor = value->rValue; mod->BSIM4v7wtnfactorGiven = TRUE; break; case BSIM4v7_MOD_WTETA0: /* v4.7 temp dep of leakage current */ mod->BSIM4v7wteta0 = value->rValue; mod->BSIM4v7wteta0Given = TRUE; break; case BSIM4v7_MOD_WTVOFFCV: /* v4.7 temp dep of leakage current */ mod->BSIM4v7wtvoffcv = value->rValue; mod->BSIM4v7wtvoffcvGiven = TRUE; break; case BSIM4v7_MOD_WMINV: mod->BSIM4v7wminv = value->rValue; mod->BSIM4v7wminvGiven = TRUE; break; case BSIM4v7_MOD_WMINVCV: mod->BSIM4v7wminvcv = value->rValue; mod->BSIM4v7wminvcvGiven = TRUE; break; case BSIM4v7_MOD_WFPROUT: mod->BSIM4v7wfprout = value->rValue; mod->BSIM4v7wfproutGiven = TRUE; break; case BSIM4v7_MOD_WPDITS: mod->BSIM4v7wpdits = value->rValue; mod->BSIM4v7wpditsGiven = TRUE; break; case BSIM4v7_MOD_WPDITSD: mod->BSIM4v7wpditsd = value->rValue; mod->BSIM4v7wpditsdGiven = TRUE; break; case BSIM4v7_MOD_WDELTA : mod->BSIM4v7wdelta = value->rValue; mod->BSIM4v7wdeltaGiven = TRUE; break; case BSIM4v7_MOD_WRDSW: mod->BSIM4v7wrdsw = value->rValue; mod->BSIM4v7wrdswGiven = TRUE; break; case BSIM4v7_MOD_WRDW: mod->BSIM4v7wrdw = value->rValue; mod->BSIM4v7wrdwGiven = TRUE; break; case BSIM4v7_MOD_WRSW: mod->BSIM4v7wrsw = value->rValue; mod->BSIM4v7wrswGiven = TRUE; break; case BSIM4v7_MOD_WPRWB: mod->BSIM4v7wprwb = value->rValue; mod->BSIM4v7wprwbGiven = TRUE; break; case BSIM4v7_MOD_WPRWG: mod->BSIM4v7wprwg = value->rValue; mod->BSIM4v7wprwgGiven = TRUE; break; case BSIM4v7_MOD_WPRT: mod->BSIM4v7wprt = value->rValue; mod->BSIM4v7wprtGiven = TRUE; break; case BSIM4v7_MOD_WETA0: mod->BSIM4v7weta0 = value->rValue; mod->BSIM4v7weta0Given = TRUE; break; case BSIM4v7_MOD_WETAB: mod->BSIM4v7wetab = value->rValue; mod->BSIM4v7wetabGiven = TRUE; break; case BSIM4v7_MOD_WPCLM: mod->BSIM4v7wpclm = value->rValue; mod->BSIM4v7wpclmGiven = TRUE; break; case BSIM4v7_MOD_WPDIBL1: mod->BSIM4v7wpdibl1 = value->rValue; mod->BSIM4v7wpdibl1Given = TRUE; break; case BSIM4v7_MOD_WPDIBL2: mod->BSIM4v7wpdibl2 = value->rValue; mod->BSIM4v7wpdibl2Given = TRUE; break; case BSIM4v7_MOD_WPDIBLB: mod->BSIM4v7wpdiblb = value->rValue; mod->BSIM4v7wpdiblbGiven = TRUE; break; case BSIM4v7_MOD_WPSCBE1: mod->BSIM4v7wpscbe1 = value->rValue; mod->BSIM4v7wpscbe1Given = TRUE; break; case BSIM4v7_MOD_WPSCBE2: mod->BSIM4v7wpscbe2 = value->rValue; mod->BSIM4v7wpscbe2Given = TRUE; break; case BSIM4v7_MOD_WPVAG: mod->BSIM4v7wpvag = value->rValue; mod->BSIM4v7wpvagGiven = TRUE; break; case BSIM4v7_MOD_WWR : mod->BSIM4v7wwr = value->rValue; mod->BSIM4v7wwrGiven = TRUE; break; case BSIM4v7_MOD_WDWG : mod->BSIM4v7wdwg = value->rValue; mod->BSIM4v7wdwgGiven = TRUE; break; case BSIM4v7_MOD_WDWB : mod->BSIM4v7wdwb = value->rValue; mod->BSIM4v7wdwbGiven = TRUE; break; case BSIM4v7_MOD_WB0 : mod->BSIM4v7wb0 = value->rValue; mod->BSIM4v7wb0Given = TRUE; break; case BSIM4v7_MOD_WB1 : mod->BSIM4v7wb1 = value->rValue; mod->BSIM4v7wb1Given = TRUE; break; case BSIM4v7_MOD_WALPHA0 : mod->BSIM4v7walpha0 = value->rValue; mod->BSIM4v7walpha0Given = TRUE; break; case BSIM4v7_MOD_WALPHA1 : mod->BSIM4v7walpha1 = value->rValue; mod->BSIM4v7walpha1Given = TRUE; break; case BSIM4v7_MOD_WBETA0 : mod->BSIM4v7wbeta0 = value->rValue; mod->BSIM4v7wbeta0Given = TRUE; break; case BSIM4v7_MOD_WPHIN : mod->BSIM4v7wphin = value->rValue; mod->BSIM4v7wphinGiven = TRUE; break; case BSIM4v7_MOD_WAGIDL : mod->BSIM4v7wagidl = value->rValue; mod->BSIM4v7wagidlGiven = TRUE; break; case BSIM4v7_MOD_WBGIDL : mod->BSIM4v7wbgidl = value->rValue; mod->BSIM4v7wbgidlGiven = TRUE; break; case BSIM4v7_MOD_WCGIDL : mod->BSIM4v7wcgidl = value->rValue; mod->BSIM4v7wcgidlGiven = TRUE; break; case BSIM4v7_MOD_WEGIDL : mod->BSIM4v7wegidl = value->rValue; mod->BSIM4v7wegidlGiven = TRUE; break; case BSIM4v7_MOD_WFGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7wfgidl = value->rValue; mod->BSIM4v7wfgidlGiven = TRUE; break; case BSIM4v7_MOD_WKGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7wkgidl = value->rValue; mod->BSIM4v7wkgidlGiven = TRUE; break; case BSIM4v7_MOD_WRGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7wrgidl = value->rValue; mod->BSIM4v7wrgidlGiven = TRUE; break; case BSIM4v7_MOD_WAGISL : mod->BSIM4v7wagisl = value->rValue; mod->BSIM4v7wagislGiven = TRUE; break; case BSIM4v7_MOD_WBGISL : mod->BSIM4v7wbgisl = value->rValue; mod->BSIM4v7wbgislGiven = TRUE; break; case BSIM4v7_MOD_WCGISL : mod->BSIM4v7wcgisl = value->rValue; mod->BSIM4v7wcgislGiven = TRUE; break; case BSIM4v7_MOD_WEGISL : mod->BSIM4v7wegisl = value->rValue; mod->BSIM4v7wegislGiven = TRUE; break; case BSIM4v7_MOD_WFGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7wfgisl = value->rValue; mod->BSIM4v7wfgislGiven = TRUE; break; case BSIM4v7_MOD_WKGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7wkgisl = value->rValue; mod->BSIM4v7wkgislGiven = TRUE; break; case BSIM4v7_MOD_WRGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7wrgisl = value->rValue; mod->BSIM4v7wrgislGiven = TRUE; break; case BSIM4v7_MOD_WAIGC : mod->BSIM4v7waigc = value->rValue; mod->BSIM4v7waigcGiven = TRUE; break; case BSIM4v7_MOD_WBIGC : mod->BSIM4v7wbigc = value->rValue; mod->BSIM4v7wbigcGiven = TRUE; break; case BSIM4v7_MOD_WCIGC : mod->BSIM4v7wcigc = value->rValue; mod->BSIM4v7wcigcGiven = TRUE; break; case BSIM4v7_MOD_WAIGSD : mod->BSIM4v7waigsd = value->rValue; mod->BSIM4v7waigsdGiven = TRUE; break; case BSIM4v7_MOD_WBIGSD : mod->BSIM4v7wbigsd = value->rValue; mod->BSIM4v7wbigsdGiven = TRUE; break; case BSIM4v7_MOD_WCIGSD : mod->BSIM4v7wcigsd = value->rValue; mod->BSIM4v7wcigsdGiven = TRUE; break; case BSIM4v7_MOD_WAIGS : mod->BSIM4v7waigs = value->rValue; mod->BSIM4v7waigsGiven = TRUE; break; case BSIM4v7_MOD_WBIGS : mod->BSIM4v7wbigs = value->rValue; mod->BSIM4v7wbigsGiven = TRUE; break; case BSIM4v7_MOD_WCIGS : mod->BSIM4v7wcigs = value->rValue; mod->BSIM4v7wcigsGiven = TRUE; break; case BSIM4v7_MOD_WAIGD : mod->BSIM4v7waigd = value->rValue; mod->BSIM4v7waigdGiven = TRUE; break; case BSIM4v7_MOD_WBIGD : mod->BSIM4v7wbigd = value->rValue; mod->BSIM4v7wbigdGiven = TRUE; break; case BSIM4v7_MOD_WCIGD : mod->BSIM4v7wcigd = value->rValue; mod->BSIM4v7wcigdGiven = TRUE; break; case BSIM4v7_MOD_WAIGBACC : mod->BSIM4v7waigbacc = value->rValue; mod->BSIM4v7waigbaccGiven = TRUE; break; case BSIM4v7_MOD_WBIGBACC : mod->BSIM4v7wbigbacc = value->rValue; mod->BSIM4v7wbigbaccGiven = TRUE; break; case BSIM4v7_MOD_WCIGBACC : mod->BSIM4v7wcigbacc = value->rValue; mod->BSIM4v7wcigbaccGiven = TRUE; break; case BSIM4v7_MOD_WAIGBINV : mod->BSIM4v7waigbinv = value->rValue; mod->BSIM4v7waigbinvGiven = TRUE; break; case BSIM4v7_MOD_WBIGBINV : mod->BSIM4v7wbigbinv = value->rValue; mod->BSIM4v7wbigbinvGiven = TRUE; break; case BSIM4v7_MOD_WCIGBINV : mod->BSIM4v7wcigbinv = value->rValue; mod->BSIM4v7wcigbinvGiven = TRUE; break; case BSIM4v7_MOD_WNIGC : mod->BSIM4v7wnigc = value->rValue; mod->BSIM4v7wnigcGiven = TRUE; break; case BSIM4v7_MOD_WNIGBINV : mod->BSIM4v7wnigbinv = value->rValue; mod->BSIM4v7wnigbinvGiven = TRUE; break; case BSIM4v7_MOD_WNIGBACC : mod->BSIM4v7wnigbacc = value->rValue; mod->BSIM4v7wnigbaccGiven = TRUE; break; case BSIM4v7_MOD_WNTOX : mod->BSIM4v7wntox = value->rValue; mod->BSIM4v7wntoxGiven = TRUE; break; case BSIM4v7_MOD_WEIGBINV : mod->BSIM4v7weigbinv = value->rValue; mod->BSIM4v7weigbinvGiven = TRUE; break; case BSIM4v7_MOD_WPIGCD : mod->BSIM4v7wpigcd = value->rValue; mod->BSIM4v7wpigcdGiven = TRUE; break; case BSIM4v7_MOD_WPOXEDGE : mod->BSIM4v7wpoxedge = value->rValue; mod->BSIM4v7wpoxedgeGiven = TRUE; break; case BSIM4v7_MOD_WXRCRG1 : mod->BSIM4v7wxrcrg1 = value->rValue; mod->BSIM4v7wxrcrg1Given = TRUE; break; case BSIM4v7_MOD_WXRCRG2 : mod->BSIM4v7wxrcrg2 = value->rValue; mod->BSIM4v7wxrcrg2Given = TRUE; break; case BSIM4v7_MOD_WLAMBDA : mod->BSIM4v7wlambda = value->rValue; mod->BSIM4v7wlambdaGiven = TRUE; break; case BSIM4v7_MOD_WVTL : mod->BSIM4v7wvtl = value->rValue; mod->BSIM4v7wvtlGiven = TRUE; break; case BSIM4v7_MOD_WXN: mod->BSIM4v7wxn = value->rValue; mod->BSIM4v7wxnGiven = TRUE; break; case BSIM4v7_MOD_WVFBSDOFF: mod->BSIM4v7wvfbsdoff = value->rValue; mod->BSIM4v7wvfbsdoffGiven = TRUE; break; case BSIM4v7_MOD_WTVFBSDOFF: mod->BSIM4v7wtvfbsdoff = value->rValue; mod->BSIM4v7wtvfbsdoffGiven = TRUE; break; case BSIM4v7_MOD_WEU : mod->BSIM4v7weu = value->rValue; mod->BSIM4v7weuGiven = TRUE; break; case BSIM4v7_MOD_WUCS : mod->BSIM4v7wucs = value->rValue; mod->BSIM4v7wucsGiven = TRUE; break; case BSIM4v7_MOD_WVFB : mod->BSIM4v7wvfb = value->rValue; mod->BSIM4v7wvfbGiven = TRUE; break; case BSIM4v7_MOD_WCGSL : mod->BSIM4v7wcgsl = value->rValue; mod->BSIM4v7wcgslGiven = TRUE; break; case BSIM4v7_MOD_WCGDL : mod->BSIM4v7wcgdl = value->rValue; mod->BSIM4v7wcgdlGiven = TRUE; break; case BSIM4v7_MOD_WCKAPPAS : mod->BSIM4v7wckappas = value->rValue; mod->BSIM4v7wckappasGiven = TRUE; break; case BSIM4v7_MOD_WCKAPPAD : mod->BSIM4v7wckappad = value->rValue; mod->BSIM4v7wckappadGiven = TRUE; break; case BSIM4v7_MOD_WCF : mod->BSIM4v7wcf = value->rValue; mod->BSIM4v7wcfGiven = TRUE; break; case BSIM4v7_MOD_WCLC : mod->BSIM4v7wclc = value->rValue; mod->BSIM4v7wclcGiven = TRUE; break; case BSIM4v7_MOD_WCLE : mod->BSIM4v7wcle = value->rValue; mod->BSIM4v7wcleGiven = TRUE; break; case BSIM4v7_MOD_WVFBCV : mod->BSIM4v7wvfbcv = value->rValue; mod->BSIM4v7wvfbcvGiven = TRUE; break; case BSIM4v7_MOD_WACDE : mod->BSIM4v7wacde = value->rValue; mod->BSIM4v7wacdeGiven = TRUE; break; case BSIM4v7_MOD_WMOIN : mod->BSIM4v7wmoin = value->rValue; mod->BSIM4v7wmoinGiven = TRUE; break; case BSIM4v7_MOD_WNOFF : mod->BSIM4v7wnoff = value->rValue; mod->BSIM4v7wnoffGiven = TRUE; break; case BSIM4v7_MOD_WVOFFCV : mod->BSIM4v7wvoffcv = value->rValue; mod->BSIM4v7wvoffcvGiven = TRUE; break; /* Cross-term dependence */ case BSIM4v7_MOD_PCDSC : mod->BSIM4v7pcdsc = value->rValue; mod->BSIM4v7pcdscGiven = TRUE; break; case BSIM4v7_MOD_PCDSCB : mod->BSIM4v7pcdscb = value->rValue; mod->BSIM4v7pcdscbGiven = TRUE; break; case BSIM4v7_MOD_PCDSCD : mod->BSIM4v7pcdscd = value->rValue; mod->BSIM4v7pcdscdGiven = TRUE; break; case BSIM4v7_MOD_PCIT : mod->BSIM4v7pcit = value->rValue; mod->BSIM4v7pcitGiven = TRUE; break; case BSIM4v7_MOD_PNFACTOR : mod->BSIM4v7pnfactor = value->rValue; mod->BSIM4v7pnfactorGiven = TRUE; break; case BSIM4v7_MOD_PXJ: mod->BSIM4v7pxj = value->rValue; mod->BSIM4v7pxjGiven = TRUE; break; case BSIM4v7_MOD_PVSAT: mod->BSIM4v7pvsat = value->rValue; mod->BSIM4v7pvsatGiven = TRUE; break; case BSIM4v7_MOD_PA0: mod->BSIM4v7pa0 = value->rValue; mod->BSIM4v7pa0Given = TRUE; break; case BSIM4v7_MOD_PAGS: mod->BSIM4v7pags = value->rValue; mod->BSIM4v7pagsGiven = TRUE; break; case BSIM4v7_MOD_PA1: mod->BSIM4v7pa1 = value->rValue; mod->BSIM4v7pa1Given = TRUE; break; case BSIM4v7_MOD_PA2: mod->BSIM4v7pa2 = value->rValue; mod->BSIM4v7pa2Given = TRUE; break; case BSIM4v7_MOD_PAT: mod->BSIM4v7pat = value->rValue; mod->BSIM4v7patGiven = TRUE; break; case BSIM4v7_MOD_PKETA: mod->BSIM4v7pketa = value->rValue; mod->BSIM4v7pketaGiven = TRUE; break; case BSIM4v7_MOD_PNSUB: mod->BSIM4v7pnsub = value->rValue; mod->BSIM4v7pnsubGiven = TRUE; break; case BSIM4v7_MOD_PNDEP: mod->BSIM4v7pndep = value->rValue; mod->BSIM4v7pndepGiven = TRUE; if (mod->BSIM4v7pndep > 1.0e20) mod->BSIM4v7pndep *= 1.0e-6; break; case BSIM4v7_MOD_PNSD: mod->BSIM4v7pnsd = value->rValue; mod->BSIM4v7pnsdGiven = TRUE; if (mod->BSIM4v7pnsd > 1.0e23) mod->BSIM4v7pnsd *= 1.0e-6; break; case BSIM4v7_MOD_PNGATE: mod->BSIM4v7pngate = value->rValue; mod->BSIM4v7pngateGiven = TRUE; if (mod->BSIM4v7pngate > 1.0e23) mod->BSIM4v7pngate *= 1.0e-6; break; case BSIM4v7_MOD_PGAMMA1: mod->BSIM4v7pgamma1 = value->rValue; mod->BSIM4v7pgamma1Given = TRUE; break; case BSIM4v7_MOD_PGAMMA2: mod->BSIM4v7pgamma2 = value->rValue; mod->BSIM4v7pgamma2Given = TRUE; break; case BSIM4v7_MOD_PVBX: mod->BSIM4v7pvbx = value->rValue; mod->BSIM4v7pvbxGiven = TRUE; break; case BSIM4v7_MOD_PVBM: mod->BSIM4v7pvbm = value->rValue; mod->BSIM4v7pvbmGiven = TRUE; break; case BSIM4v7_MOD_PXT: mod->BSIM4v7pxt = value->rValue; mod->BSIM4v7pxtGiven = TRUE; break; case BSIM4v7_MOD_PK1: mod->BSIM4v7pk1 = value->rValue; mod->BSIM4v7pk1Given = TRUE; break; case BSIM4v7_MOD_PKT1: mod->BSIM4v7pkt1 = value->rValue; mod->BSIM4v7pkt1Given = TRUE; break; case BSIM4v7_MOD_PKT1L: mod->BSIM4v7pkt1l = value->rValue; mod->BSIM4v7pkt1lGiven = TRUE; break; case BSIM4v7_MOD_PKT2: mod->BSIM4v7pkt2 = value->rValue; mod->BSIM4v7pkt2Given = TRUE; break; case BSIM4v7_MOD_PK2: mod->BSIM4v7pk2 = value->rValue; mod->BSIM4v7pk2Given = TRUE; break; case BSIM4v7_MOD_PK3: mod->BSIM4v7pk3 = value->rValue; mod->BSIM4v7pk3Given = TRUE; break; case BSIM4v7_MOD_PK3B: mod->BSIM4v7pk3b = value->rValue; mod->BSIM4v7pk3bGiven = TRUE; break; case BSIM4v7_MOD_PLPE0: mod->BSIM4v7plpe0 = value->rValue; mod->BSIM4v7plpe0Given = TRUE; break; case BSIM4v7_MOD_PLPEB: mod->BSIM4v7plpeb = value->rValue; mod->BSIM4v7plpebGiven = TRUE; break; case BSIM4v7_MOD_PDVTP0: mod->BSIM4v7pdvtp0 = value->rValue; mod->BSIM4v7pdvtp0Given = TRUE; break; case BSIM4v7_MOD_PDVTP1: mod->BSIM4v7pdvtp1 = value->rValue; mod->BSIM4v7pdvtp1Given = TRUE; break; case BSIM4v7_MOD_PDVTP2: /* New DIBL/Rout */ mod->BSIM4v7pdvtp2 = value->rValue; mod->BSIM4v7pdvtp2Given = TRUE; break; case BSIM4v7_MOD_PDVTP3: mod->BSIM4v7pdvtp3 = value->rValue; mod->BSIM4v7pdvtp3Given = TRUE; break; case BSIM4v7_MOD_PDVTP4: mod->BSIM4v7pdvtp4 = value->rValue; mod->BSIM4v7pdvtp4Given = TRUE; break; case BSIM4v7_MOD_PDVTP5: mod->BSIM4v7pdvtp5 = value->rValue; mod->BSIM4v7pdvtp5Given = TRUE; break; case BSIM4v7_MOD_PW0: mod->BSIM4v7pw0 = value->rValue; mod->BSIM4v7pw0Given = TRUE; break; case BSIM4v7_MOD_PDVT0: mod->BSIM4v7pdvt0 = value->rValue; mod->BSIM4v7pdvt0Given = TRUE; break; case BSIM4v7_MOD_PDVT1: mod->BSIM4v7pdvt1 = value->rValue; mod->BSIM4v7pdvt1Given = TRUE; break; case BSIM4v7_MOD_PDVT2: mod->BSIM4v7pdvt2 = value->rValue; mod->BSIM4v7pdvt2Given = TRUE; break; case BSIM4v7_MOD_PDVT0W: mod->BSIM4v7pdvt0w = value->rValue; mod->BSIM4v7pdvt0wGiven = TRUE; break; case BSIM4v7_MOD_PDVT1W: mod->BSIM4v7pdvt1w = value->rValue; mod->BSIM4v7pdvt1wGiven = TRUE; break; case BSIM4v7_MOD_PDVT2W: mod->BSIM4v7pdvt2w = value->rValue; mod->BSIM4v7pdvt2wGiven = TRUE; break; case BSIM4v7_MOD_PDROUT: mod->BSIM4v7pdrout = value->rValue; mod->BSIM4v7pdroutGiven = TRUE; break; case BSIM4v7_MOD_PDSUB: mod->BSIM4v7pdsub = value->rValue; mod->BSIM4v7pdsubGiven = TRUE; break; case BSIM4v7_MOD_PVTH0: mod->BSIM4v7pvth0 = value->rValue; mod->BSIM4v7pvth0Given = TRUE; break; case BSIM4v7_MOD_PUA: mod->BSIM4v7pua = value->rValue; mod->BSIM4v7puaGiven = TRUE; break; case BSIM4v7_MOD_PUA1: mod->BSIM4v7pua1 = value->rValue; mod->BSIM4v7pua1Given = TRUE; break; case BSIM4v7_MOD_PUB: mod->BSIM4v7pub = value->rValue; mod->BSIM4v7pubGiven = TRUE; break; case BSIM4v7_MOD_PUB1: mod->BSIM4v7pub1 = value->rValue; mod->BSIM4v7pub1Given = TRUE; break; case BSIM4v7_MOD_PUC: mod->BSIM4v7puc = value->rValue; mod->BSIM4v7pucGiven = TRUE; break; case BSIM4v7_MOD_PUC1: mod->BSIM4v7puc1 = value->rValue; mod->BSIM4v7puc1Given = TRUE; break; case BSIM4v7_MOD_PU0 : mod->BSIM4v7pu0 = value->rValue; mod->BSIM4v7pu0Given = TRUE; break; case BSIM4v7_MOD_PUTE : mod->BSIM4v7pute = value->rValue; mod->BSIM4v7puteGiven = TRUE; break; case BSIM4v7_MOD_PUCSTE : mod->BSIM4v7pucste = value->rValue; mod->BSIM4v7pucsteGiven = TRUE; break; case BSIM4v7_MOD_PVOFF: mod->BSIM4v7pvoff = value->rValue; mod->BSIM4v7pvoffGiven = TRUE; break; case BSIM4v7_MOD_PTVOFF: mod->BSIM4v7ptvoff = value->rValue; mod->BSIM4v7ptvoffGiven = TRUE; break; case BSIM4v7_MOD_PTNFACTOR: /* v4.7 temp dep of leakage current */ mod->BSIM4v7ptnfactor = value->rValue; mod->BSIM4v7ptnfactorGiven = TRUE; break; case BSIM4v7_MOD_PTETA0: /* v4.7 temp dep of leakage current */ mod->BSIM4v7pteta0 = value->rValue; mod->BSIM4v7pteta0Given = TRUE; break; case BSIM4v7_MOD_PTVOFFCV: /* v4.7 temp dep of leakage current */ mod->BSIM4v7ptvoffcv = value->rValue; mod->BSIM4v7ptvoffcvGiven = TRUE; break; case BSIM4v7_MOD_PMINV: mod->BSIM4v7pminv = value->rValue; mod->BSIM4v7pminvGiven = TRUE; break; case BSIM4v7_MOD_PMINVCV: mod->BSIM4v7pminvcv = value->rValue; mod->BSIM4v7pminvcvGiven = TRUE; break; case BSIM4v7_MOD_PFPROUT: mod->BSIM4v7pfprout = value->rValue; mod->BSIM4v7pfproutGiven = TRUE; break; case BSIM4v7_MOD_PPDITS: mod->BSIM4v7ppdits = value->rValue; mod->BSIM4v7ppditsGiven = TRUE; break; case BSIM4v7_MOD_PPDITSD: mod->BSIM4v7ppditsd = value->rValue; mod->BSIM4v7ppditsdGiven = TRUE; break; case BSIM4v7_MOD_PDELTA : mod->BSIM4v7pdelta = value->rValue; mod->BSIM4v7pdeltaGiven = TRUE; break; case BSIM4v7_MOD_PRDSW: mod->BSIM4v7prdsw = value->rValue; mod->BSIM4v7prdswGiven = TRUE; break; case BSIM4v7_MOD_PRDW: mod->BSIM4v7prdw = value->rValue; mod->BSIM4v7prdwGiven = TRUE; break; case BSIM4v7_MOD_PRSW: mod->BSIM4v7prsw = value->rValue; mod->BSIM4v7prswGiven = TRUE; break; case BSIM4v7_MOD_PPRWB: mod->BSIM4v7pprwb = value->rValue; mod->BSIM4v7pprwbGiven = TRUE; break; case BSIM4v7_MOD_PPRWG: mod->BSIM4v7pprwg = value->rValue; mod->BSIM4v7pprwgGiven = TRUE; break; case BSIM4v7_MOD_PPRT: mod->BSIM4v7pprt = value->rValue; mod->BSIM4v7pprtGiven = TRUE; break; case BSIM4v7_MOD_PETA0: mod->BSIM4v7peta0 = value->rValue; mod->BSIM4v7peta0Given = TRUE; break; case BSIM4v7_MOD_PETAB: mod->BSIM4v7petab = value->rValue; mod->BSIM4v7petabGiven = TRUE; break; case BSIM4v7_MOD_PPCLM: mod->BSIM4v7ppclm = value->rValue; mod->BSIM4v7ppclmGiven = TRUE; break; case BSIM4v7_MOD_PPDIBL1: mod->BSIM4v7ppdibl1 = value->rValue; mod->BSIM4v7ppdibl1Given = TRUE; break; case BSIM4v7_MOD_PPDIBL2: mod->BSIM4v7ppdibl2 = value->rValue; mod->BSIM4v7ppdibl2Given = TRUE; break; case BSIM4v7_MOD_PPDIBLB: mod->BSIM4v7ppdiblb = value->rValue; mod->BSIM4v7ppdiblbGiven = TRUE; break; case BSIM4v7_MOD_PPSCBE1: mod->BSIM4v7ppscbe1 = value->rValue; mod->BSIM4v7ppscbe1Given = TRUE; break; case BSIM4v7_MOD_PPSCBE2: mod->BSIM4v7ppscbe2 = value->rValue; mod->BSIM4v7ppscbe2Given = TRUE; break; case BSIM4v7_MOD_PPVAG: mod->BSIM4v7ppvag = value->rValue; mod->BSIM4v7ppvagGiven = TRUE; break; case BSIM4v7_MOD_PWR : mod->BSIM4v7pwr = value->rValue; mod->BSIM4v7pwrGiven = TRUE; break; case BSIM4v7_MOD_PDWG : mod->BSIM4v7pdwg = value->rValue; mod->BSIM4v7pdwgGiven = TRUE; break; case BSIM4v7_MOD_PDWB : mod->BSIM4v7pdwb = value->rValue; mod->BSIM4v7pdwbGiven = TRUE; break; case BSIM4v7_MOD_PB0 : mod->BSIM4v7pb0 = value->rValue; mod->BSIM4v7pb0Given = TRUE; break; case BSIM4v7_MOD_PB1 : mod->BSIM4v7pb1 = value->rValue; mod->BSIM4v7pb1Given = TRUE; break; case BSIM4v7_MOD_PALPHA0 : mod->BSIM4v7palpha0 = value->rValue; mod->BSIM4v7palpha0Given = TRUE; break; case BSIM4v7_MOD_PALPHA1 : mod->BSIM4v7palpha1 = value->rValue; mod->BSIM4v7palpha1Given = TRUE; break; case BSIM4v7_MOD_PBETA0 : mod->BSIM4v7pbeta0 = value->rValue; mod->BSIM4v7pbeta0Given = TRUE; break; case BSIM4v7_MOD_PPHIN : mod->BSIM4v7pphin = value->rValue; mod->BSIM4v7pphinGiven = TRUE; break; case BSIM4v7_MOD_PAGIDL : mod->BSIM4v7pagidl = value->rValue; mod->BSIM4v7pagidlGiven = TRUE; break; case BSIM4v7_MOD_PBGIDL : mod->BSIM4v7pbgidl = value->rValue; mod->BSIM4v7pbgidlGiven = TRUE; break; case BSIM4v7_MOD_PCGIDL : mod->BSIM4v7pcgidl = value->rValue; mod->BSIM4v7pcgidlGiven = TRUE; break; case BSIM4v7_MOD_PEGIDL : mod->BSIM4v7pegidl = value->rValue; mod->BSIM4v7pegidlGiven = TRUE; break; case BSIM4v7_MOD_PFGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7pfgidl = value->rValue; mod->BSIM4v7pfgidlGiven = TRUE; break; case BSIM4v7_MOD_PKGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7pkgidl = value->rValue; mod->BSIM4v7pkgidlGiven = TRUE; break; case BSIM4v7_MOD_PRGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7prgidl = value->rValue; mod->BSIM4v7prgidlGiven = TRUE; break; case BSIM4v7_MOD_PAGISL : mod->BSIM4v7pagisl = value->rValue; mod->BSIM4v7pagislGiven = TRUE; break; case BSIM4v7_MOD_PBGISL : mod->BSIM4v7pbgisl = value->rValue; mod->BSIM4v7pbgislGiven = TRUE; break; case BSIM4v7_MOD_PCGISL : mod->BSIM4v7pcgisl = value->rValue; mod->BSIM4v7pcgislGiven = TRUE; break; case BSIM4v7_MOD_PEGISL : mod->BSIM4v7pegisl = value->rValue; mod->BSIM4v7pegislGiven = TRUE; break; case BSIM4v7_MOD_PFGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7pfgisl = value->rValue; mod->BSIM4v7pfgislGiven = TRUE; break; case BSIM4v7_MOD_PKGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7pkgisl = value->rValue; mod->BSIM4v7pkgislGiven = TRUE; break; case BSIM4v7_MOD_PRGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4v7prgisl = value->rValue; mod->BSIM4v7prgislGiven = TRUE; break; case BSIM4v7_MOD_PAIGC : mod->BSIM4v7paigc = value->rValue; mod->BSIM4v7paigcGiven = TRUE; break; case BSIM4v7_MOD_PBIGC : mod->BSIM4v7pbigc = value->rValue; mod->BSIM4v7pbigcGiven = TRUE; break; case BSIM4v7_MOD_PCIGC : mod->BSIM4v7pcigc = value->rValue; mod->BSIM4v7pcigcGiven = TRUE; break; case BSIM4v7_MOD_PAIGSD : mod->BSIM4v7paigsd = value->rValue; mod->BSIM4v7paigsdGiven = TRUE; break; case BSIM4v7_MOD_PBIGSD : mod->BSIM4v7pbigsd = value->rValue; mod->BSIM4v7pbigsdGiven = TRUE; break; case BSIM4v7_MOD_PCIGSD : mod->BSIM4v7pcigsd = value->rValue; mod->BSIM4v7pcigsdGiven = TRUE; break; case BSIM4v7_MOD_PAIGS : mod->BSIM4v7paigs = value->rValue; mod->BSIM4v7paigsGiven = TRUE; break; case BSIM4v7_MOD_PBIGS : mod->BSIM4v7pbigs = value->rValue; mod->BSIM4v7pbigsGiven = TRUE; break; case BSIM4v7_MOD_PCIGS : mod->BSIM4v7pcigs = value->rValue; mod->BSIM4v7pcigsGiven = TRUE; break; case BSIM4v7_MOD_PAIGD : mod->BSIM4v7paigd = value->rValue; mod->BSIM4v7paigdGiven = TRUE; break; case BSIM4v7_MOD_PBIGD : mod->BSIM4v7pbigd = value->rValue; mod->BSIM4v7pbigdGiven = TRUE; break; case BSIM4v7_MOD_PCIGD : mod->BSIM4v7pcigd = value->rValue; mod->BSIM4v7pcigdGiven = TRUE; break; case BSIM4v7_MOD_PAIGBACC : mod->BSIM4v7paigbacc = value->rValue; mod->BSIM4v7paigbaccGiven = TRUE; break; case BSIM4v7_MOD_PBIGBACC : mod->BSIM4v7pbigbacc = value->rValue; mod->BSIM4v7pbigbaccGiven = TRUE; break; case BSIM4v7_MOD_PCIGBACC : mod->BSIM4v7pcigbacc = value->rValue; mod->BSIM4v7pcigbaccGiven = TRUE; break; case BSIM4v7_MOD_PAIGBINV : mod->BSIM4v7paigbinv = value->rValue; mod->BSIM4v7paigbinvGiven = TRUE; break; case BSIM4v7_MOD_PBIGBINV : mod->BSIM4v7pbigbinv = value->rValue; mod->BSIM4v7pbigbinvGiven = TRUE; break; case BSIM4v7_MOD_PCIGBINV : mod->BSIM4v7pcigbinv = value->rValue; mod->BSIM4v7pcigbinvGiven = TRUE; break; case BSIM4v7_MOD_PNIGC : mod->BSIM4v7pnigc = value->rValue; mod->BSIM4v7pnigcGiven = TRUE; break; case BSIM4v7_MOD_PNIGBINV : mod->BSIM4v7pnigbinv = value->rValue; mod->BSIM4v7pnigbinvGiven = TRUE; break; case BSIM4v7_MOD_PNIGBACC : mod->BSIM4v7pnigbacc = value->rValue; mod->BSIM4v7pnigbaccGiven = TRUE; break; case BSIM4v7_MOD_PNTOX : mod->BSIM4v7pntox = value->rValue; mod->BSIM4v7pntoxGiven = TRUE; break; case BSIM4v7_MOD_PEIGBINV : mod->BSIM4v7peigbinv = value->rValue; mod->BSIM4v7peigbinvGiven = TRUE; break; case BSIM4v7_MOD_PPIGCD : mod->BSIM4v7ppigcd = value->rValue; mod->BSIM4v7ppigcdGiven = TRUE; break; case BSIM4v7_MOD_PPOXEDGE : mod->BSIM4v7ppoxedge = value->rValue; mod->BSIM4v7ppoxedgeGiven = TRUE; break; case BSIM4v7_MOD_PXRCRG1 : mod->BSIM4v7pxrcrg1 = value->rValue; mod->BSIM4v7pxrcrg1Given = TRUE; break; case BSIM4v7_MOD_PXRCRG2 : mod->BSIM4v7pxrcrg2 = value->rValue; mod->BSIM4v7pxrcrg2Given = TRUE; break; case BSIM4v7_MOD_PLAMBDA : mod->BSIM4v7plambda = value->rValue; mod->BSIM4v7plambdaGiven = TRUE; break; case BSIM4v7_MOD_PVTL : mod->BSIM4v7pvtl = value->rValue; mod->BSIM4v7pvtlGiven = TRUE; break; case BSIM4v7_MOD_PXN: mod->BSIM4v7pxn = value->rValue; mod->BSIM4v7pxnGiven = TRUE; break; case BSIM4v7_MOD_PVFBSDOFF: mod->BSIM4v7pvfbsdoff = value->rValue; mod->BSIM4v7pvfbsdoffGiven = TRUE; break; case BSIM4v7_MOD_PTVFBSDOFF: mod->BSIM4v7ptvfbsdoff = value->rValue; mod->BSIM4v7ptvfbsdoffGiven = TRUE; break; case BSIM4v7_MOD_PEU : mod->BSIM4v7peu = value->rValue; mod->BSIM4v7peuGiven = TRUE; break; case BSIM4v7_MOD_PUCS : mod->BSIM4v7pucs = value->rValue; mod->BSIM4v7pucsGiven = TRUE; break; case BSIM4v7_MOD_PVFB : mod->BSIM4v7pvfb = value->rValue; mod->BSIM4v7pvfbGiven = TRUE; break; case BSIM4v7_MOD_PCGSL : mod->BSIM4v7pcgsl = value->rValue; mod->BSIM4v7pcgslGiven = TRUE; break; case BSIM4v7_MOD_PCGDL : mod->BSIM4v7pcgdl = value->rValue; mod->BSIM4v7pcgdlGiven = TRUE; break; case BSIM4v7_MOD_PCKAPPAS : mod->BSIM4v7pckappas = value->rValue; mod->BSIM4v7pckappasGiven = TRUE; break; case BSIM4v7_MOD_PCKAPPAD : mod->BSIM4v7pckappad = value->rValue; mod->BSIM4v7pckappadGiven = TRUE; break; case BSIM4v7_MOD_PCF : mod->BSIM4v7pcf = value->rValue; mod->BSIM4v7pcfGiven = TRUE; break; case BSIM4v7_MOD_PCLC : mod->BSIM4v7pclc = value->rValue; mod->BSIM4v7pclcGiven = TRUE; break; case BSIM4v7_MOD_PCLE : mod->BSIM4v7pcle = value->rValue; mod->BSIM4v7pcleGiven = TRUE; break; case BSIM4v7_MOD_PVFBCV : mod->BSIM4v7pvfbcv = value->rValue; mod->BSIM4v7pvfbcvGiven = TRUE; break; case BSIM4v7_MOD_PACDE : mod->BSIM4v7pacde = value->rValue; mod->BSIM4v7pacdeGiven = TRUE; break; case BSIM4v7_MOD_PMOIN : mod->BSIM4v7pmoin = value->rValue; mod->BSIM4v7pmoinGiven = TRUE; break; case BSIM4v7_MOD_PNOFF : mod->BSIM4v7pnoff = value->rValue; mod->BSIM4v7pnoffGiven = TRUE; break; case BSIM4v7_MOD_PVOFFCV : mod->BSIM4v7pvoffcv = value->rValue; mod->BSIM4v7pvoffcvGiven = TRUE; break; case BSIM4v7_MOD_TNOM : mod->BSIM4v7tnom = value->rValue + CONSTCtoK; mod->BSIM4v7tnomGiven = TRUE; break; case BSIM4v7_MOD_CGSO : mod->BSIM4v7cgso = value->rValue; mod->BSIM4v7cgsoGiven = TRUE; break; case BSIM4v7_MOD_CGDO : mod->BSIM4v7cgdo = value->rValue; mod->BSIM4v7cgdoGiven = TRUE; break; case BSIM4v7_MOD_CGBO : mod->BSIM4v7cgbo = value->rValue; mod->BSIM4v7cgboGiven = TRUE; break; case BSIM4v7_MOD_XPART : mod->BSIM4v7xpart = value->rValue; mod->BSIM4v7xpartGiven = TRUE; break; case BSIM4v7_MOD_RSH : mod->BSIM4v7sheetResistance = value->rValue; mod->BSIM4v7sheetResistanceGiven = TRUE; break; case BSIM4v7_MOD_JSS : mod->BSIM4v7SjctSatCurDensity = value->rValue; mod->BSIM4v7SjctSatCurDensityGiven = TRUE; break; case BSIM4v7_MOD_JSWS : mod->BSIM4v7SjctSidewallSatCurDensity = value->rValue; mod->BSIM4v7SjctSidewallSatCurDensityGiven = TRUE; break; case BSIM4v7_MOD_JSWGS : mod->BSIM4v7SjctGateSidewallSatCurDensity = value->rValue; mod->BSIM4v7SjctGateSidewallSatCurDensityGiven = TRUE; break; case BSIM4v7_MOD_PBS : mod->BSIM4v7SbulkJctPotential = value->rValue; mod->BSIM4v7SbulkJctPotentialGiven = TRUE; break; case BSIM4v7_MOD_MJS : mod->BSIM4v7SbulkJctBotGradingCoeff = value->rValue; mod->BSIM4v7SbulkJctBotGradingCoeffGiven = TRUE; break; case BSIM4v7_MOD_PBSWS : mod->BSIM4v7SsidewallJctPotential = value->rValue; mod->BSIM4v7SsidewallJctPotentialGiven = TRUE; break; case BSIM4v7_MOD_MJSWS : mod->BSIM4v7SbulkJctSideGradingCoeff = value->rValue; mod->BSIM4v7SbulkJctSideGradingCoeffGiven = TRUE; break; case BSIM4v7_MOD_CJS : mod->BSIM4v7SunitAreaJctCap = value->rValue; mod->BSIM4v7SunitAreaJctCapGiven = TRUE; break; case BSIM4v7_MOD_CJSWS : mod->BSIM4v7SunitLengthSidewallJctCap = value->rValue; mod->BSIM4v7SunitLengthSidewallJctCapGiven = TRUE; break; case BSIM4v7_MOD_NJS : mod->BSIM4v7SjctEmissionCoeff = value->rValue; mod->BSIM4v7SjctEmissionCoeffGiven = TRUE; break; case BSIM4v7_MOD_PBSWGS : mod->BSIM4v7SGatesidewallJctPotential = value->rValue; mod->BSIM4v7SGatesidewallJctPotentialGiven = TRUE; break; case BSIM4v7_MOD_MJSWGS : mod->BSIM4v7SbulkJctGateSideGradingCoeff = value->rValue; mod->BSIM4v7SbulkJctGateSideGradingCoeffGiven = TRUE; break; case BSIM4v7_MOD_CJSWGS : mod->BSIM4v7SunitLengthGateSidewallJctCap = value->rValue; mod->BSIM4v7SunitLengthGateSidewallJctCapGiven = TRUE; break; case BSIM4v7_MOD_XTIS : mod->BSIM4v7SjctTempExponent = value->rValue; mod->BSIM4v7SjctTempExponentGiven = TRUE; break; case BSIM4v7_MOD_JSD : mod->BSIM4v7DjctSatCurDensity = value->rValue; mod->BSIM4v7DjctSatCurDensityGiven = TRUE; break; case BSIM4v7_MOD_JSWD : mod->BSIM4v7DjctSidewallSatCurDensity = value->rValue; mod->BSIM4v7DjctSidewallSatCurDensityGiven = TRUE; break; case BSIM4v7_MOD_JSWGD : mod->BSIM4v7DjctGateSidewallSatCurDensity = value->rValue; mod->BSIM4v7DjctGateSidewallSatCurDensityGiven = TRUE; break; case BSIM4v7_MOD_PBD : mod->BSIM4v7DbulkJctPotential = value->rValue; mod->BSIM4v7DbulkJctPotentialGiven = TRUE; break; case BSIM4v7_MOD_MJD : mod->BSIM4v7DbulkJctBotGradingCoeff = value->rValue; mod->BSIM4v7DbulkJctBotGradingCoeffGiven = TRUE; break; case BSIM4v7_MOD_PBSWD : mod->BSIM4v7DsidewallJctPotential = value->rValue; mod->BSIM4v7DsidewallJctPotentialGiven = TRUE; break; case BSIM4v7_MOD_MJSWD : mod->BSIM4v7DbulkJctSideGradingCoeff = value->rValue; mod->BSIM4v7DbulkJctSideGradingCoeffGiven = TRUE; break; case BSIM4v7_MOD_CJD : mod->BSIM4v7DunitAreaJctCap = value->rValue; mod->BSIM4v7DunitAreaJctCapGiven = TRUE; break; case BSIM4v7_MOD_CJSWD : mod->BSIM4v7DunitLengthSidewallJctCap = value->rValue; mod->BSIM4v7DunitLengthSidewallJctCapGiven = TRUE; break; case BSIM4v7_MOD_NJD : mod->BSIM4v7DjctEmissionCoeff = value->rValue; mod->BSIM4v7DjctEmissionCoeffGiven = TRUE; break; case BSIM4v7_MOD_PBSWGD : mod->BSIM4v7DGatesidewallJctPotential = value->rValue; mod->BSIM4v7DGatesidewallJctPotentialGiven = TRUE; break; case BSIM4v7_MOD_MJSWGD : mod->BSIM4v7DbulkJctGateSideGradingCoeff = value->rValue; mod->BSIM4v7DbulkJctGateSideGradingCoeffGiven = TRUE; break; case BSIM4v7_MOD_CJSWGD : mod->BSIM4v7DunitLengthGateSidewallJctCap = value->rValue; mod->BSIM4v7DunitLengthGateSidewallJctCapGiven = TRUE; break; case BSIM4v7_MOD_XTID : mod->BSIM4v7DjctTempExponent = value->rValue; mod->BSIM4v7DjctTempExponentGiven = TRUE; break; case BSIM4v7_MOD_LINT : mod->BSIM4v7Lint = value->rValue; mod->BSIM4v7LintGiven = TRUE; break; case BSIM4v7_MOD_LL : mod->BSIM4v7Ll = value->rValue; mod->BSIM4v7LlGiven = TRUE; break; case BSIM4v7_MOD_LLC : mod->BSIM4v7Llc = value->rValue; mod->BSIM4v7LlcGiven = TRUE; break; case BSIM4v7_MOD_LLN : mod->BSIM4v7Lln = value->rValue; mod->BSIM4v7LlnGiven = TRUE; break; case BSIM4v7_MOD_LW : mod->BSIM4v7Lw = value->rValue; mod->BSIM4v7LwGiven = TRUE; break; case BSIM4v7_MOD_LWC : mod->BSIM4v7Lwc = value->rValue; mod->BSIM4v7LwcGiven = TRUE; break; case BSIM4v7_MOD_LWN : mod->BSIM4v7Lwn = value->rValue; mod->BSIM4v7LwnGiven = TRUE; break; case BSIM4v7_MOD_LWL : mod->BSIM4v7Lwl = value->rValue; mod->BSIM4v7LwlGiven = TRUE; break; case BSIM4v7_MOD_LWLC : mod->BSIM4v7Lwlc = value->rValue; mod->BSIM4v7LwlcGiven = TRUE; break; case BSIM4v7_MOD_LMIN : mod->BSIM4v7Lmin = value->rValue; mod->BSIM4v7LminGiven = TRUE; break; case BSIM4v7_MOD_LMAX : mod->BSIM4v7Lmax = value->rValue; mod->BSIM4v7LmaxGiven = TRUE; break; case BSIM4v7_MOD_WINT : mod->BSIM4v7Wint = value->rValue; mod->BSIM4v7WintGiven = TRUE; break; case BSIM4v7_MOD_WL : mod->BSIM4v7Wl = value->rValue; mod->BSIM4v7WlGiven = TRUE; break; case BSIM4v7_MOD_WLC : mod->BSIM4v7Wlc = value->rValue; mod->BSIM4v7WlcGiven = TRUE; break; case BSIM4v7_MOD_WLN : mod->BSIM4v7Wln = value->rValue; mod->BSIM4v7WlnGiven = TRUE; break; case BSIM4v7_MOD_WW : mod->BSIM4v7Ww = value->rValue; mod->BSIM4v7WwGiven = TRUE; break; case BSIM4v7_MOD_WWC : mod->BSIM4v7Wwc = value->rValue; mod->BSIM4v7WwcGiven = TRUE; break; case BSIM4v7_MOD_WWN : mod->BSIM4v7Wwn = value->rValue; mod->BSIM4v7WwnGiven = TRUE; break; case BSIM4v7_MOD_WWL : mod->BSIM4v7Wwl = value->rValue; mod->BSIM4v7WwlGiven = TRUE; break; case BSIM4v7_MOD_WWLC : mod->BSIM4v7Wwlc = value->rValue; mod->BSIM4v7WwlcGiven = TRUE; break; case BSIM4v7_MOD_WMIN : mod->BSIM4v7Wmin = value->rValue; mod->BSIM4v7WminGiven = TRUE; break; case BSIM4v7_MOD_WMAX : mod->BSIM4v7Wmax = value->rValue; mod->BSIM4v7WmaxGiven = TRUE; break; case BSIM4v7_MOD_NOIA : mod->BSIM4v7oxideTrapDensityA = value->rValue; mod->BSIM4v7oxideTrapDensityAGiven = TRUE; break; case BSIM4v7_MOD_NOIB : mod->BSIM4v7oxideTrapDensityB = value->rValue; mod->BSIM4v7oxideTrapDensityBGiven = TRUE; break; case BSIM4v7_MOD_NOIC : mod->BSIM4v7oxideTrapDensityC = value->rValue; mod->BSIM4v7oxideTrapDensityCGiven = TRUE; break; case BSIM4v7_MOD_EM : mod->BSIM4v7em = value->rValue; mod->BSIM4v7emGiven = TRUE; break; case BSIM4v7_MOD_EF : mod->BSIM4v7ef = value->rValue; mod->BSIM4v7efGiven = TRUE; break; case BSIM4v7_MOD_AF : mod->BSIM4v7af = value->rValue; mod->BSIM4v7afGiven = TRUE; break; case BSIM4v7_MOD_KF : mod->BSIM4v7kf = value->rValue; mod->BSIM4v7kfGiven = TRUE; break; case BSIM4v7_MOD_VGS_MAX: mod->BSIM4v7vgsMax = value->rValue; mod->BSIM4v7vgsMaxGiven = TRUE; break; case BSIM4v7_MOD_VGD_MAX: mod->BSIM4v7vgdMax = value->rValue; mod->BSIM4v7vgdMaxGiven = TRUE; break; case BSIM4v7_MOD_VGB_MAX: mod->BSIM4v7vgbMax = value->rValue; mod->BSIM4v7vgbMaxGiven = TRUE; break; case BSIM4v7_MOD_VDS_MAX: mod->BSIM4v7vdsMax = value->rValue; mod->BSIM4v7vdsMaxGiven = TRUE; break; case BSIM4v7_MOD_VBS_MAX: mod->BSIM4v7vbsMax = value->rValue; mod->BSIM4v7vbsMaxGiven = TRUE; break; case BSIM4v7_MOD_VBD_MAX: mod->BSIM4v7vbdMax = value->rValue; mod->BSIM4v7vbdMaxGiven = TRUE; break; case BSIM4v7_MOD_VGSR_MAX: mod->BSIM4v7vgsrMax = value->rValue; mod->BSIM4v7vgsrMaxGiven = TRUE; break; case BSIM4v7_MOD_VGDR_MAX: mod->BSIM4v7vgdrMax = value->rValue; mod->BSIM4v7vgdrMaxGiven = TRUE; break; case BSIM4v7_MOD_VGBR_MAX: mod->BSIM4v7vgbrMax = value->rValue; mod->BSIM4v7vgbrMaxGiven = TRUE; break; case BSIM4v7_MOD_VBSR_MAX: mod->BSIM4v7vbsrMax = value->rValue; mod->BSIM4v7vbsrMaxGiven = TRUE; break; case BSIM4v7_MOD_VBDR_MAX: mod->BSIM4v7vbdrMax = value->rValue; mod->BSIM4v7vbdrMaxGiven = TRUE; break; case BSIM4v7_MOD_NMOS : if(value->iValue) { mod->BSIM4v7type = 1; mod->BSIM4v7typeGiven = TRUE; } break; case BSIM4v7_MOD_PMOS : if(value->iValue) { mod->BSIM4v7type = - 1; mod->BSIM4v7typeGiven = TRUE; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v7/bsim4v7init.c0000644000175000017500000000335513546075722023007 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "bsim4v7itf.h" #include "bsim4v7ext.h" #include "bsim4v7init.h" SPICEdev BSIM4v7info = { .DEVpublic = { .name = "BSIM4v7", .description = "Berkeley Short Channel IGFET Model-4", .terms = &BSIM4v7nSize, .numNames = &BSIM4v7nSize, .termNames = BSIM4v7names, .numInstanceParms = &BSIM4v7pTSize, .instanceParms = BSIM4v7pTable, .numModelParms = &BSIM4v7mPTSize, .modelParms = BSIM4v7mPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = BSIM4v7param, .DEVmodParam = BSIM4v7mParam, .DEVload = BSIM4v7load, .DEVsetup = BSIM4v7setup, .DEVunsetup = BSIM4v7unsetup, .DEVpzSetup = BSIM4v7setup, .DEVtemperature = BSIM4v7temp, .DEVtrunc = BSIM4v7trunc, .DEVfindBranch = NULL, .DEVacLoad = BSIM4v7acLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = BSIM4v7mDelete, .DEVdelete = NULL, .DEVsetic = BSIM4v7getic, .DEVask = BSIM4v7ask, .DEVmodAsk = BSIM4v7mAsk, .DEVpzLoad = BSIM4v7pzLoad, .DEVconvTest = BSIM4v7convTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = BSIM4v7noise, .DEVsoaCheck = BSIM4v7soaCheck, .DEVinstSize = &BSIM4v7iSize, .DEVmodSize = &BSIM4v7mSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_bsim4v7_info(void) { return &BSIM4v7info; } tmpk8ny_4pz/src/spicelib/devices/bsim4v7/Makefile.am0000644000175000017500000000113213546075722022507 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libbsim4v7.la libbsim4v7_la_SOURCES = \ b4v7.c \ b4v7acld.c \ b4v7ask.c \ b4v7check.c \ b4v7cvtest.c \ b4v7geo.c \ b4v7getic.c \ b4v7ld.c \ b4v7mask.c \ b4v7mdel.c \ b4v7mpar.c \ b4v7noi.c \ b4v7par.c \ b4v7pzld.c \ b4v7set.c \ b4v7soachk.c \ b4v7temp.c \ b4v7trunc.c \ bsim4v7def.h \ bsim4v7ext.h \ bsim4v7init.c \ bsim4v7init.h \ bsim4v7itf.h AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in EXTRA_DIST = B4TERMS_OF_USE tmpk8ny_4pz/src/spicelib/devices/bsim4v7/b4v7par.c0000644000175000017500000001535013546075722022113 0ustar carstencarsten/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4par.c of BSIM4.7.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "bsim4v7def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/fteext.h" int BSIM4v7param( int param, IFvalue *value, GENinstance *inst, IFvalue *select) { double scale; BSIM4v7instance *here = (BSIM4v7instance*)inst; NG_IGNORE(select); if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; switch(param) { case BSIM4v7_W: here->BSIM4v7w = value->rValue * scale; here->BSIM4v7wGiven = TRUE; break; case BSIM4v7_L: here->BSIM4v7l = value->rValue * scale; here->BSIM4v7lGiven = TRUE; break; case BSIM4v7_M: here->BSIM4v7m = value->rValue; here->BSIM4v7mGiven = TRUE; break; case BSIM4v7_NF: here->BSIM4v7nf = value->rValue; here->BSIM4v7nfGiven = TRUE; break; case BSIM4v7_MIN: here->BSIM4v7min = value->iValue; here->BSIM4v7minGiven = TRUE; break; case BSIM4v7_AS: here->BSIM4v7sourceArea = value->rValue * scale * scale; here->BSIM4v7sourceAreaGiven = TRUE; break; case BSIM4v7_AD: here->BSIM4v7drainArea = value->rValue * scale * scale; here->BSIM4v7drainAreaGiven = TRUE; break; case BSIM4v7_PS: here->BSIM4v7sourcePerimeter = value->rValue * scale; here->BSIM4v7sourcePerimeterGiven = TRUE; break; case BSIM4v7_PD: here->BSIM4v7drainPerimeter = value->rValue * scale; here->BSIM4v7drainPerimeterGiven = TRUE; break; case BSIM4v7_NRS: here->BSIM4v7sourceSquares = value->rValue; here->BSIM4v7sourceSquaresGiven = TRUE; break; case BSIM4v7_NRD: here->BSIM4v7drainSquares = value->rValue; here->BSIM4v7drainSquaresGiven = TRUE; break; case BSIM4v7_OFF: here->BSIM4v7off = value->iValue; break; case BSIM4v7_SA: here->BSIM4v7sa = value->rValue; here->BSIM4v7saGiven = TRUE; break; case BSIM4v7_SB: here->BSIM4v7sb = value->rValue; here->BSIM4v7sbGiven = TRUE; break; case BSIM4v7_SD: here->BSIM4v7sd = value->rValue; here->BSIM4v7sdGiven = TRUE; break; case BSIM4v7_SCA: here->BSIM4v7sca = value->rValue; here->BSIM4v7scaGiven = TRUE; break; case BSIM4v7_SCB: here->BSIM4v7scb = value->rValue; here->BSIM4v7scbGiven = TRUE; break; case BSIM4v7_SCC: here->BSIM4v7scc = value->rValue; here->BSIM4v7sccGiven = TRUE; break; case BSIM4v7_SC: here->BSIM4v7sc = value->rValue; here->BSIM4v7scGiven = TRUE; break; case BSIM4v7_RBSB: here->BSIM4v7rbsb = value->rValue; here->BSIM4v7rbsbGiven = TRUE; break; case BSIM4v7_RBDB: here->BSIM4v7rbdb = value->rValue; here->BSIM4v7rbdbGiven = TRUE; break; case BSIM4v7_RBPB: here->BSIM4v7rbpb = value->rValue; here->BSIM4v7rbpbGiven = TRUE; break; case BSIM4v7_RBPS: here->BSIM4v7rbps = value->rValue; here->BSIM4v7rbpsGiven = TRUE; break; case BSIM4v7_RBPD: here->BSIM4v7rbpd = value->rValue; here->BSIM4v7rbpdGiven = TRUE; break; case BSIM4v7_DELVTO: here->BSIM4v7delvto = value->rValue; here->BSIM4v7delvtoGiven = TRUE; break; case BSIM4v7_MULU0: here->BSIM4v7mulu0 = value->rValue; here->BSIM4v7mulu0Given = TRUE; break; case BSIM4v7_XGW: here->BSIM4v7xgw = value->rValue; here->BSIM4v7xgwGiven = TRUE; break; case BSIM4v7_NGCON: here->BSIM4v7ngcon = value->rValue; here->BSIM4v7ngconGiven = TRUE; break; case BSIM4v7_TRNQSMOD: here->BSIM4v7trnqsMod = value->iValue; here->BSIM4v7trnqsModGiven = TRUE; break; case BSIM4v7_ACNQSMOD: here->BSIM4v7acnqsMod = value->iValue; here->BSIM4v7acnqsModGiven = TRUE; break; case BSIM4v7_RBODYMOD: here->BSIM4v7rbodyMod = value->iValue; here->BSIM4v7rbodyModGiven = TRUE; break; case BSIM4v7_RGATEMOD: here->BSIM4v7rgateMod = value->iValue; here->BSIM4v7rgateModGiven = TRUE; break; case BSIM4v7_GEOMOD: here->BSIM4v7geoMod = value->iValue; here->BSIM4v7geoModGiven = TRUE; break; case BSIM4v7_RGEOMOD: here->BSIM4v7rgeoMod = value->iValue; here->BSIM4v7rgeoModGiven = TRUE; break; case BSIM4v7_IC_VDS: here->BSIM4v7icVDS = value->rValue; here->BSIM4v7icVDSGiven = TRUE; break; case BSIM4v7_IC_VGS: here->BSIM4v7icVGS = value->rValue; here->BSIM4v7icVGSGiven = TRUE; break; case BSIM4v7_IC_VBS: here->BSIM4v7icVBS = value->rValue; here->BSIM4v7icVBSGiven = TRUE; break; case BSIM4v7_IC: switch(value->v.numValue) { case 3: here->BSIM4v7icVBS = *(value->v.vec.rVec+2); here->BSIM4v7icVBSGiven = TRUE; case 2: here->BSIM4v7icVGS = *(value->v.vec.rVec+1); here->BSIM4v7icVGSGiven = TRUE; case 1: here->BSIM4v7icVDS = *(value->v.vec.rVec); here->BSIM4v7icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v7/b4v7trunc.c0000644000175000017500000000342613546075722022465 0ustar carstencarsten/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4trunc.c of BSIM4.7.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4v7def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4v7trunc( GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { BSIM4v7model *model = (BSIM4v7model*)inModel; BSIM4v7instance *here; #ifdef STEPDEBUG double debugtemp; #endif /* STEPDEBUG */ for (; model != NULL; model = BSIM4v7nextModel(model)) { for (here = BSIM4v7instances(model); here != NULL; here = BSIM4v7nextInstance(here)) { #ifdef STEPDEBUG debugtemp = *timeStep; #endif /* STEPDEBUG */ CKTterr(here->BSIM4v7qb,ckt,timeStep); CKTterr(here->BSIM4v7qg,ckt,timeStep); CKTterr(here->BSIM4v7qd,ckt,timeStep); if (here->BSIM4v7trnqsMod) CKTterr(here->BSIM4v7qcdump,ckt,timeStep); if (here->BSIM4v7rbodyMod) { CKTterr(here->BSIM4v7qbs,ckt,timeStep); CKTterr(here->BSIM4v7qbd,ckt,timeStep); } if (here->BSIM4v7rgateMod == 3) CKTterr(here->BSIM4v7qgmid,ckt,timeStep); #ifdef STEPDEBUG if(debugtemp != *timeStep) { printf("device %s reduces step from %g to %g\n", here->BSIM4v7name,debugtemp,*timeStep); } #endif /* STEPDEBUG */ } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v7/b4v7ask.c0000644000175000017500000003322313546075722022106 0ustar carstencarsten/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4ask.c of BSIM4.7.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "bsim4v7def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4v7ask( CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { BSIM4v7instance *here = (BSIM4v7instance*)inst; NG_IGNORE(select); switch(which) { case BSIM4v7_L: value->rValue = here->BSIM4v7l; return(OK); case BSIM4v7_W: value->rValue = here->BSIM4v7w; return(OK); case BSIM4v7_M: value->rValue = here->BSIM4v7m; return(OK); case BSIM4v7_NF: value->rValue = here->BSIM4v7nf; return(OK); case BSIM4v7_MIN: value->iValue = here->BSIM4v7min; return(OK); case BSIM4v7_AS: value->rValue = here->BSIM4v7sourceArea; return(OK); case BSIM4v7_AD: value->rValue = here->BSIM4v7drainArea; return(OK); case BSIM4v7_PS: value->rValue = here->BSIM4v7sourcePerimeter; return(OK); case BSIM4v7_PD: value->rValue = here->BSIM4v7drainPerimeter; return(OK); case BSIM4v7_NRS: value->rValue = here->BSIM4v7sourceSquares; return(OK); case BSIM4v7_NRD: value->rValue = here->BSIM4v7drainSquares; return(OK); case BSIM4v7_OFF: value->rValue = here->BSIM4v7off; return(OK); case BSIM4v7_SA: value->rValue = here->BSIM4v7sa ; return(OK); case BSIM4v7_SB: value->rValue = here->BSIM4v7sb ; return(OK); case BSIM4v7_SD: value->rValue = here->BSIM4v7sd ; return(OK); case BSIM4v7_SCA: value->rValue = here->BSIM4v7sca ; return(OK); case BSIM4v7_SCB: value->rValue = here->BSIM4v7scb ; return(OK); case BSIM4v7_SCC: value->rValue = here->BSIM4v7scc ; return(OK); case BSIM4v7_SC: value->rValue = here->BSIM4v7sc ; return(OK); case BSIM4v7_RBSB: value->rValue = here->BSIM4v7rbsb; return(OK); case BSIM4v7_RBDB: value->rValue = here->BSIM4v7rbdb; return(OK); case BSIM4v7_RBPB: value->rValue = here->BSIM4v7rbpb; return(OK); case BSIM4v7_RBPS: value->rValue = here->BSIM4v7rbps; return(OK); case BSIM4v7_RBPD: value->rValue = here->BSIM4v7rbpd; return(OK); case BSIM4v7_DELVTO: value->rValue = here->BSIM4v7delvto; return(OK); case BSIM4v7_MULU0: value->rValue = here->BSIM4v7mulu0; return(OK); case BSIM4v7_XGW: value->rValue = here->BSIM4v7xgw; return(OK); case BSIM4v7_NGCON: value->rValue = here->BSIM4v7ngcon; return(OK); case BSIM4v7_TRNQSMOD: value->iValue = here->BSIM4v7trnqsMod; return(OK); case BSIM4v7_ACNQSMOD: value->iValue = here->BSIM4v7acnqsMod; return(OK); case BSIM4v7_RBODYMOD: value->iValue = here->BSIM4v7rbodyMod; return(OK); case BSIM4v7_RGATEMOD: value->iValue = here->BSIM4v7rgateMod; return(OK); case BSIM4v7_GEOMOD: value->iValue = here->BSIM4v7geoMod; return(OK); case BSIM4v7_RGEOMOD: value->iValue = here->BSIM4v7rgeoMod; return(OK); case BSIM4v7_IC_VDS: value->rValue = here->BSIM4v7icVDS; return(OK); case BSIM4v7_IC_VGS: value->rValue = here->BSIM4v7icVGS; return(OK); case BSIM4v7_IC_VBS: value->rValue = here->BSIM4v7icVBS; return(OK); case BSIM4v7_DNODE: value->iValue = here->BSIM4v7dNode; return(OK); case BSIM4v7_GNODEEXT: value->iValue = here->BSIM4v7gNodeExt; return(OK); case BSIM4v7_SNODE: value->iValue = here->BSIM4v7sNode; return(OK); case BSIM4v7_BNODE: value->iValue = here->BSIM4v7bNode; return(OK); case BSIM4v7_DNODEPRIME: value->iValue = here->BSIM4v7dNodePrime; return(OK); case BSIM4v7_GNODEPRIME: value->iValue = here->BSIM4v7gNodePrime; return(OK); case BSIM4v7_GNODEMID: value->iValue = here->BSIM4v7gNodeMid; return(OK); case BSIM4v7_SNODEPRIME: value->iValue = here->BSIM4v7sNodePrime; return(OK); case BSIM4v7_DBNODE: value->iValue = here->BSIM4v7dbNode; return(OK); case BSIM4v7_BNODEPRIME: value->iValue = here->BSIM4v7bNodePrime; return(OK); case BSIM4v7_SBNODE: value->iValue = here->BSIM4v7sbNode; return(OK); case BSIM4v7_SOURCECONDUCT: value->rValue = here->BSIM4v7sourceConductance; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_DRAINCONDUCT: value->rValue = here->BSIM4v7drainConductance; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_VBD: value->rValue = *(ckt->CKTstate0 + here->BSIM4v7vbd); return(OK); case BSIM4v7_VBS: value->rValue = *(ckt->CKTstate0 + here->BSIM4v7vbs); return(OK); case BSIM4v7_VGS: value->rValue = *(ckt->CKTstate0 + here->BSIM4v7vgs); return(OK); case BSIM4v7_VDS: value->rValue = *(ckt->CKTstate0 + here->BSIM4v7vds); return(OK); case BSIM4v7_CD: value->rValue = here->BSIM4v7cd; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_CBS: value->rValue = here->BSIM4v7cbs; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_CBD: value->rValue = here->BSIM4v7cbd; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_CSUB: value->rValue = here->BSIM4v7csub; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_QINV: value->rValue = here-> BSIM4v7qinv; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_IGIDL: value->rValue = here->BSIM4v7Igidl; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_IGISL: value->rValue = here->BSIM4v7Igisl; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_IGS: value->rValue = here->BSIM4v7Igs; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_IGD: value->rValue = here->BSIM4v7Igd; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_IGB: value->rValue = here->BSIM4v7Igb; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_IGCS: value->rValue = here->BSIM4v7Igcs; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_IGCD: value->rValue = here->BSIM4v7Igcd; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_GM: value->rValue = here->BSIM4v7gm; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_GDS: value->rValue = here->BSIM4v7gds; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_GMBS: value->rValue = here->BSIM4v7gmbs; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_GBD: value->rValue = here->BSIM4v7gbd; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_GBS: value->rValue = here->BSIM4v7gbs; value->rValue *= here->BSIM4v7m; return(OK); /* case BSIM4v7_QB: value->rValue = *(ckt->CKTstate0 + here->BSIM4v7qb); return(OK); */ case BSIM4v7_CQB: value->rValue = *(ckt->CKTstate0 + here->BSIM4v7cqb); return(OK); /* case BSIM4v7_QG: value->rValue = *(ckt->CKTstate0 + here->BSIM4v7qg); return(OK); */ case BSIM4v7_CQG: value->rValue = *(ckt->CKTstate0 + here->BSIM4v7cqg); return(OK); /* case BSIM4v7_QD: value->rValue = *(ckt->CKTstate0 + here->BSIM4v7qd); return(OK); */ case BSIM4v7_CQD: value->rValue = *(ckt->CKTstate0 + here->BSIM4v7cqd); return(OK); /* case BSIM4v7_QS: value->rValue = *(ckt->CKTstate0 + here->BSIM4v7qs); return(OK); */ case BSIM4v7_QB: value->rValue = here->BSIM4v7qbulk; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_QG: value->rValue = here->BSIM4v7qgate; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_QS: value->rValue = here->BSIM4v7qsrc; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_QD: value->rValue = here->BSIM4v7qdrn; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_QDEF: value->rValue = *(ckt->CKTstate0 + here->BSIM4v7qdef); return(OK); case BSIM4v7_GCRG: value->rValue = here->BSIM4v7gcrg; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_GTAU: value->rValue = here->BSIM4v7gtau; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_CGGB: value->rValue = here->BSIM4v7cggb; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_CGDB: value->rValue = here->BSIM4v7cgdb; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_CGSB: value->rValue = here->BSIM4v7cgsb; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_CDGB: value->rValue = here->BSIM4v7cdgb; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_CDDB: value->rValue = here->BSIM4v7cddb; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_CDSB: value->rValue = here->BSIM4v7cdsb; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_CBGB: value->rValue = here->BSIM4v7cbgb; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_CBDB: value->rValue = here->BSIM4v7cbdb; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_CBSB: value->rValue = here->BSIM4v7cbsb; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_CSGB: value->rValue = here->BSIM4v7csgb; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_CSDB: value->rValue = here->BSIM4v7csdb; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_CSSB: value->rValue = here->BSIM4v7cssb; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_CGBB: value->rValue = here->BSIM4v7cgbb; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_CDBB: value->rValue = here->BSIM4v7cdbb; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_CSBB: value->rValue = here->BSIM4v7csbb; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_CBBB: value->rValue = here->BSIM4v7cbbb; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_CAPBD: value->rValue = here->BSIM4v7capbd; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_CAPBS: value->rValue = here->BSIM4v7capbs; value->rValue *= here->BSIM4v7m; return(OK); case BSIM4v7_VON: value->rValue = here->BSIM4v7von; return(OK); case BSIM4v7_VDSAT: value->rValue = here->BSIM4v7vdsat; return(OK); case BSIM4v7_QBS: value->rValue = *(ckt->CKTstate0 + here->BSIM4v7qbs); return(OK); case BSIM4v7_QBD: value->rValue = *(ckt->CKTstate0 + here->BSIM4v7qbd); return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim4v7/b4v7geo.c0000644000175000017500000003054313546075722022104 0ustar carstencarsten/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4geo.c of BSIM4.7.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. **********/ #include "ngspice/ngspice.h" #include "bsim4v7def.h" /* * WDLiu: * This subrutine is a special module to process the geometry dependent * parasitics for BSIM4v7, which calculates Ps, Pd, As, Ad, and Rs and Rd * for multi-fingers and varous GEO and RGEO options. */ static int BSIM4v7NumFingerDiff( double nf, int minSD, double *nuIntD, double *nuEndD, double *nuIntS, double *nuEndS) { int NF; NF = (int)nf; if ((NF%2) != 0) { *nuEndD = *nuEndS = 1.0; *nuIntD = *nuIntS = 2.0 * MAX((nf - 1.0) / 2.0, 0.0); } else { if (minSD == 1) /* minimize # of source */ { *nuEndD = 2.0; *nuIntD = 2.0 * MAX((nf / 2.0 - 1.0), 0.0); *nuEndS = 0.0; *nuIntS = nf; } else { *nuEndD = 0.0; *nuIntD = nf; *nuEndS = 2.0; *nuIntS = 2.0 * MAX((nf / 2.0 - 1.0), 0.0); } } return 0; } int BSIM4v7PAeffGeo( double nf, int geo, int minSD, double Weffcj, double DMCG, double DMCI, double DMDG, double *Ps, double *Pd, double *As, double *Ad) { double T0, T1, T2; double ADiso, ADsha, ADmer, ASiso, ASsha, ASmer; double PDiso, PDsha, PDmer, PSiso, PSsha, PSmer; double nuIntD = 0.0, nuEndD = 0.0, nuIntS = 0.0, nuEndS = 0.0; if (geo < 9) /* For geo = 9 and 10, the numbers of S/D diffusions already known */ BSIM4v7NumFingerDiff(nf, minSD, &nuIntD, &nuEndD, &nuIntS, &nuEndS); T0 = DMCG + DMCI; T1 = DMCG + DMCG; T2 = DMDG + DMDG; PSiso = PDiso = T0 + T0 + Weffcj; PSsha = PDsha = T1; PSmer = PDmer = T2; ASiso = ADiso = T0 * Weffcj; ASsha = ADsha = DMCG * Weffcj; ASmer = ADmer = DMDG * Weffcj; switch(geo) { case 0: *Ps = nuEndS * PSiso + nuIntS * PSsha; *Pd = nuEndD * PDiso + nuIntD * PDsha; *As = nuEndS * ASiso + nuIntS * ASsha; *Ad = nuEndD * ADiso + nuIntD * ADsha; break; case 1: *Ps = nuEndS * PSiso + nuIntS * PSsha; *Pd = (nuEndD + nuIntD) * PDsha; *As = nuEndS * ASiso + nuIntS * ASsha; *Ad = (nuEndD + nuIntD) * ADsha; break; case 2: *Ps = (nuEndS + nuIntS) * PSsha; *Pd = nuEndD * PDiso + nuIntD * PDsha; *As = (nuEndS + nuIntS) * ASsha; *Ad = nuEndD * ADiso + nuIntD * ADsha; break; case 3: *Ps = (nuEndS + nuIntS) * PSsha; *Pd = (nuEndD + nuIntD) * PDsha; *As = (nuEndS + nuIntS) * ASsha; *Ad = (nuEndD + nuIntD) * ADsha; break; case 4: *Ps = nuEndS * PSiso + nuIntS * PSsha; *Pd = nuEndD * PDmer + nuIntD * PDsha; *As = nuEndS * ASiso + nuIntS * ASsha; *Ad = nuEndD * ADmer + nuIntD * ADsha; break; case 5: *Ps = (nuEndS + nuIntS) * PSsha; *Pd = nuEndD * PDmer + nuIntD * PDsha; *As = (nuEndS + nuIntS) * ASsha; *Ad = nuEndD * ADmer + nuIntD * ADsha; break; case 6: *Ps = nuEndS * PSmer + nuIntS * PSsha; *Pd = nuEndD * PDiso + nuIntD * PDsha; *As = nuEndS * ASmer + nuIntS * ASsha; *Ad = nuEndD * ADiso + nuIntD * ADsha; break; case 7: *Ps = nuEndS * PSmer + nuIntS * PSsha; *Pd = (nuEndD + nuIntD) * PDsha; *As = nuEndS * ASmer + nuIntS * ASsha; *Ad = (nuEndD + nuIntD) * ADsha; break; case 8: *Ps = nuEndS * PSmer + nuIntS * PSsha; *Pd = nuEndD * PDmer + nuIntD * PDsha; *As = nuEndS * ASmer + nuIntS * ASsha; *Ad = nuEndD * ADmer + nuIntD * ADsha; break; case 9: /* geo = 9 and 10 happen only when nf = even */ *Ps = PSiso + (nf - 1.0) * PSsha; *Pd = nf * PDsha; *As = ASiso + (nf - 1.0) * ASsha; *Ad = nf * ADsha; break; case 10: *Ps = nf * PSsha; *Pd = PDiso + (nf - 1.0) * PDsha; *As = nf * ASsha; *Ad = ADiso + (nf - 1.0) * ADsha; break; default: printf("Warning: Specified GEO = %d not matched\n", geo); } return 0; } int BSIM4v7RdseffGeo( double nf, int geo, int rgeo, int minSD, double Weffcj, double Rsh, double DMCG, double DMCI, double DMDG, int Type, double *Rtot) { double Rint=0.0, Rend = 0.0; double nuIntD = 0.0, nuEndD = 0.0, nuIntS = 0.0, nuEndS = 0.0; if (geo < 9) /* since geo = 9 and 10 only happen when nf = even */ { BSIM4v7NumFingerDiff(nf, minSD, &nuIntD, &nuEndD, &nuIntS, &nuEndS); /* Internal S/D resistance -- assume shared S or D and all wide contacts */ if (Type == 1) { if (nuIntS == 0.0) Rint = 0.0; else Rint = Rsh * DMCG / ( Weffcj * nuIntS); } else { if (nuIntD == 0.0) Rint = 0.0; else Rint = Rsh * DMCG / ( Weffcj * nuIntD); } } /* End S/D resistance -- geo dependent */ switch(geo) { case 0: if (Type == 1) BSIM4v7RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else BSIM4v7RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 1: if (Type == 1) BSIM4v7RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else BSIM4v7RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 2: if (Type == 1) BSIM4v7RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else BSIM4v7RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 3: if (Type == 1) BSIM4v7RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else BSIM4v7RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 4: if (Type == 1) BSIM4v7RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else Rend = Rsh * DMDG / Weffcj; break; case 5: if (Type == 1) BSIM4v7RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else Rend = Rsh * DMDG / (Weffcj * nuEndD); break; case 6: if (Type == 1) Rend = Rsh * DMDG / Weffcj; else BSIM4v7RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 7: if (Type == 1) Rend = Rsh * DMDG / (Weffcj * nuEndS); else BSIM4v7RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 8: Rend = Rsh * DMDG / Weffcj; break; case 9: /* all wide contacts assumed for geo = 9 and 10 */ if (Type == 1) { Rend = 0.5 * Rsh * DMCG / Weffcj; if (nf == 2.0) Rint = 0.0; else Rint = Rsh * DMCG / (Weffcj * (nf - 2.0)); } else { Rend = 0.0; Rint = Rsh * DMCG / (Weffcj * nf); } break; case 10: if (Type == 1) { Rend = 0.0; Rint = Rsh * DMCG / (Weffcj * nf); } else { Rend = 0.5 * Rsh * DMCG / Weffcj;; if (nf == 2.0) Rint = 0.0; else Rint = Rsh * DMCG / (Weffcj * (nf - 2.0)); } break; default: printf("Warning: Specified GEO = %d not matched\n", geo); } if (Rint <= 0.0) *Rtot = Rend; else if (Rend <= 0.0) *Rtot = Rint; else *Rtot = Rint * Rend / (Rint + Rend); if(*Rtot==0.0) printf("Warning: Zero resistance returned from RdseffGeo\n"); return 0; } int BSIM4v7RdsEndIso( double Weffcj, double Rsh, double DMCG, double DMCI, double DMDG, double nuEnd, int rgeo, int Type, double *Rend) { NG_IGNORE(DMDG); if (Type == 1) { switch(rgeo) { case 1: case 2: case 5: if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * DMCG / (Weffcj * nuEnd); break; case 3: case 4: case 6: if ((DMCG + DMCI) == 0.0) printf("(DMCG + DMCI) can not be equal to zero\n"); if ((nuEnd == 0.0)||((DMCG+DMCI)==0.0)) *Rend = 0.0; else *Rend = Rsh * Weffcj / (3.0 * nuEnd * (DMCG + DMCI)); break; default: printf("Warning: Specified RGEO = %d not matched\n", rgeo); } } else { switch(rgeo) { case 1: case 3: case 7: if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * DMCG / (Weffcj * nuEnd); break; case 2: case 4: case 8: if ((DMCG + DMCI) == 0.0) printf("(DMCG + DMCI) can not be equal to zero\n"); if ((nuEnd == 0.0)||((DMCG + DMCI)==0.0)) *Rend = 0.0; else *Rend = Rsh * Weffcj / (3.0 * nuEnd * (DMCG + DMCI)); break; default: printf("Warning: Specified RGEO = %d not matched\n", rgeo); } } return 0; } int BSIM4v7RdsEndSha( double Weffcj, double Rsh, double DMCG, double DMCI, double DMDG, double nuEnd, int rgeo, int Type, double *Rend) { NG_IGNORE(DMCI); NG_IGNORE(DMDG); if (Type == 1) { switch(rgeo) { case 1: case 2: case 5: if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * DMCG / (Weffcj * nuEnd); break; case 3: case 4: case 6: if (DMCG == 0.0) printf("DMCG can not be equal to zero\n"); if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * Weffcj / (6.0 * nuEnd * DMCG); break; default: printf("Warning: Specified RGEO = %d not matched\n", rgeo); } } else { switch(rgeo) { case 1: case 3: case 7: if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * DMCG / (Weffcj * nuEnd); break; case 2: case 4: case 8: if (DMCG == 0.0) printf("DMCG can not be equal to zero\n"); if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * Weffcj / (6.0 * nuEnd * DMCG); break; default: printf("Warning: Specified RGEO = %d not matched\n", rgeo); } } return 0; } tmpk8ny_4pz/src/spicelib/devices/bsim4v7/b4v7check.c0000644000175000017500000012144513546075722022411 0ustar carstencarsten/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4check.c of BSIM4.7.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, 07/29/2005. * Modified by Mohan Dunga, 12/13/2006 * Modified by Mohan Dunga, Wenwei Yang, 05/18/2007. * Modified by Wenwei Yang, 07/31/2008 . * Modified by Tanvir Morshed, Darsen Lu 03/27/2011 **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4v7def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" int BSIM4v7checkModel( BSIM4v7model *model, BSIM4v7instance *here, CKTcircuit *ckt) { struct bsim4SizeDependParam *pParam; int Fatal_Flag = 0; FILE *fplog; if ((fplog = fopen("bsim4.out", "w")) != NULL) { pParam = here->pParam; fprintf(fplog, "BSIM4v7: Berkeley Short Channel IGFET Model-4\n"); fprintf(fplog, "Developed by Xuemei (Jane) Xi, Mohan Dunga, Prof. Ali Niknejad and Prof. Chenming Hu in 2003.\n"); fprintf(fplog, "\n"); fprintf(fplog, "++++++++++ BSIM4v7 PARAMETER CHECKING BELOW ++++++++++\n"); if ((strcmp(model->BSIM4v7version, "4.7.0")) && (strncmp(model->BSIM4v7version, "4.70", 4)) && (strncmp(model->BSIM4v7version, "4.7", 3))) { fprintf(fplog, "Warning: This model is BSIM4.7.0; you specified a wrong version number.\n"); printf("Warning: This model is BSIM4.7.0; you specified a wrong version number.\n"); } fprintf(fplog, "Model = %s\n", model->BSIM4v7modName); if ((here->BSIM4v7rgateMod == 2) || (here->BSIM4v7rgateMod == 3)) { if ((here->BSIM4v7trnqsMod == 1) || (here->BSIM4v7acnqsMod == 1)) { fprintf(fplog, "Warning: You've selected both Rg and charge deficit NQS; select one only.\n"); printf("Warning: You've selected both Rg and charge deficit NQS; select one only.\n"); } } if (model->BSIM4v7toxe <= 0.0) { fprintf(fplog, "Fatal: Toxe = %g is not positive.\n", model->BSIM4v7toxe); printf("Fatal: Toxe = %g is not positive.\n", model->BSIM4v7toxe); Fatal_Flag = 1; } if (model->BSIM4v7toxp <= 0.0) { fprintf(fplog, "Fatal: Toxp = %g is not positive.\n", model->BSIM4v7toxp); printf("Fatal: Toxp = %g is not positive.\n", model->BSIM4v7toxp); Fatal_Flag = 1; } if (model->BSIM4v7eot <= 0.0) { fprintf(fplog, "Fatal: EOT = %g is not positive.\n", model->BSIM4v7eot); printf("Fatal: EOT = %g is not positive.\n", model->BSIM4v7eot); Fatal_Flag = 1; } if (model->BSIM4v7epsrgate < 0.0) { fprintf(fplog, "Fatal: Epsrgate = %g is not positive.\n", model->BSIM4v7epsrgate); printf("Fatal: Epsrgate = %g is not positive.\n", model->BSIM4v7epsrgate); Fatal_Flag = 1; } if (model->BSIM4v7epsrsub < 0.0) { fprintf(fplog, "Fatal: Epsrsub = %g is not positive.\n", model->BSIM4v7epsrsub); printf("Fatal: Epsrsub = %g is not positive.\n", model->BSIM4v7epsrsub); Fatal_Flag = 1; } if (model->BSIM4v7easub < 0.0) { fprintf(fplog, "Fatal: Easub = %g is not positive.\n", model->BSIM4v7easub); printf("Fatal: Easub = %g is not positive.\n", model->BSIM4v7easub); Fatal_Flag = 1; } if (model->BSIM4v7ni0sub <= 0.0) { fprintf(fplog, "Fatal: Ni0sub = %g is not positive.\n", model->BSIM4v7ni0sub); printf("Fatal: Easub = %g is not positive.\n", model->BSIM4v7ni0sub); Fatal_Flag = 1; } if (model->BSIM4v7toxm <= 0.0) { fprintf(fplog, "Fatal: Toxm = %g is not positive.\n", model->BSIM4v7toxm); printf("Fatal: Toxm = %g is not positive.\n", model->BSIM4v7toxm); Fatal_Flag = 1; } if (model->BSIM4v7toxref <= 0.0) { fprintf(fplog, "Fatal: Toxref = %g is not positive.\n", model->BSIM4v7toxref); printf("Fatal: Toxref = %g is not positive.\n", model->BSIM4v7toxref); Fatal_Flag = 1; } if (pParam->BSIM4v7lpe0 < -pParam->BSIM4v7leff) { fprintf(fplog, "Fatal: Lpe0 = %g is less than -Leff.\n", pParam->BSIM4v7lpe0); printf("Fatal: Lpe0 = %g is less than -Leff.\n", pParam->BSIM4v7lpe0); Fatal_Flag = 1; } if (model->BSIM4v7lintnoi > pParam->BSIM4v7leff/2) { fprintf(fplog, "Fatal: Lintnoi = %g is too large - Leff for noise is negative.\n", model->BSIM4v7lintnoi); printf("Fatal: Lintnoi = %g is too large - Leff for noise is negative.\n", model->BSIM4v7lintnoi); Fatal_Flag = 1; } if (pParam->BSIM4v7lpeb < -pParam->BSIM4v7leff) { fprintf(fplog, "Fatal: Lpeb = %g is less than -Leff.\n", pParam->BSIM4v7lpeb); printf("Fatal: Lpeb = %g is less than -Leff.\n", pParam->BSIM4v7lpeb); Fatal_Flag = 1; } if (pParam->BSIM4v7ndep <= 0.0) { fprintf(fplog, "Fatal: Ndep = %g is not positive.\n", pParam->BSIM4v7ndep); printf("Fatal: Ndep = %g is not positive.\n", pParam->BSIM4v7ndep); Fatal_Flag = 1; } if (pParam->BSIM4v7phi <= 0.0) { fprintf(fplog, "Fatal: Phi = %g is not positive. Please check Phin and Ndep\n", pParam->BSIM4v7phi); fprintf(fplog, " Phin = %g Ndep = %g \n", pParam->BSIM4v7phin, pParam->BSIM4v7ndep); printf("Fatal: Phi = %g is not positive. Please check Phin and Ndep\n", pParam->BSIM4v7phi); printf(" Phin = %g Ndep = %g \n", pParam->BSIM4v7phin, pParam->BSIM4v7ndep); Fatal_Flag = 1; } if (pParam->BSIM4v7nsub <= 0.0) { fprintf(fplog, "Fatal: Nsub = %g is not positive.\n", pParam->BSIM4v7nsub); printf("Fatal: Nsub = %g is not positive.\n", pParam->BSIM4v7nsub); Fatal_Flag = 1; } if (pParam->BSIM4v7ngate < 0.0) { fprintf(fplog, "Fatal: Ngate = %g is not positive.\n", pParam->BSIM4v7ngate); printf("Fatal: Ngate = %g Ngate is not positive.\n", pParam->BSIM4v7ngate); Fatal_Flag = 1; } if (pParam->BSIM4v7ngate > 1.e25) { fprintf(fplog, "Fatal: Ngate = %g is too high.\n", pParam->BSIM4v7ngate); printf("Fatal: Ngate = %g Ngate is too high\n", pParam->BSIM4v7ngate); Fatal_Flag = 1; } if (pParam->BSIM4v7xj <= 0.0) { fprintf(fplog, "Fatal: Xj = %g is not positive.\n", pParam->BSIM4v7xj); printf("Fatal: Xj = %g is not positive.\n", pParam->BSIM4v7xj); Fatal_Flag = 1; } if (pParam->BSIM4v7dvt1 < 0.0) { fprintf(fplog, "Fatal: Dvt1 = %g is negative.\n", pParam->BSIM4v7dvt1); printf("Fatal: Dvt1 = %g is negative.\n", pParam->BSIM4v7dvt1); Fatal_Flag = 1; } if (pParam->BSIM4v7dvt1w < 0.0) { fprintf(fplog, "Fatal: Dvt1w = %g is negative.\n", pParam->BSIM4v7dvt1w); printf("Fatal: Dvt1w = %g is negative.\n", pParam->BSIM4v7dvt1w); Fatal_Flag = 1; } if (pParam->BSIM4v7w0 == -pParam->BSIM4v7weff) { fprintf(fplog, "Fatal: (W0 + Weff) = 0 causing divided-by-zero.\n"); printf("Fatal: (W0 + Weff) = 0 causing divided-by-zero.\n"); Fatal_Flag = 1; } if (pParam->BSIM4v7dsub < 0.0) { fprintf(fplog, "Fatal: Dsub = %g is negative.\n", pParam->BSIM4v7dsub); printf("Fatal: Dsub = %g is negative.\n", pParam->BSIM4v7dsub); Fatal_Flag = 1; } if (pParam->BSIM4v7b1 == -pParam->BSIM4v7weff) { fprintf(fplog, "Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); printf("Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); Fatal_Flag = 1; } if (here->BSIM4v7u0temp <= 0.0) { fprintf(fplog, "Fatal: u0 at current temperature = %g is not positive.\n", here->BSIM4v7u0temp); printf("Fatal: u0 at current temperature = %g is not positive.\n", here->BSIM4v7u0temp); Fatal_Flag = 1; } if (pParam->BSIM4v7delta < 0.0) { fprintf(fplog, "Fatal: Delta = %g is less than zero.\n", pParam->BSIM4v7delta); printf("Fatal: Delta = %g is less than zero.\n", pParam->BSIM4v7delta); Fatal_Flag = 1; } if (here->BSIM4v7vsattemp <= 0.0) { fprintf(fplog, "Fatal: Vsat at current temperature = %g is not positive.\n", here->BSIM4v7vsattemp); printf("Fatal: Vsat at current temperature = %g is not positive.\n", here->BSIM4v7vsattemp); Fatal_Flag = 1; } if (pParam->BSIM4v7pclm <= 0.0) { fprintf(fplog, "Fatal: Pclm = %g is not positive.\n", pParam->BSIM4v7pclm); printf("Fatal: Pclm = %g is not positive.\n", pParam->BSIM4v7pclm); Fatal_Flag = 1; } if (pParam->BSIM4v7drout < 0.0) { fprintf(fplog, "Fatal: Drout = %g is negative.\n", pParam->BSIM4v7drout); printf("Fatal: Drout = %g is negative.\n", pParam->BSIM4v7drout); Fatal_Flag = 1; } if (here->BSIM4v7m < 1.0) { fprintf(fplog, "Fatal: Number of multiplier = %g is smaller than one.\n", here->BSIM4v7m); printf("Fatal: Number of multiplier = %g is smaller than one.\n", here->BSIM4v7m); Fatal_Flag = 1; } if (here->BSIM4v7nf < 1.0) { fprintf(fplog, "Fatal: Number of finger = %g is smaller than one.\n", here->BSIM4v7nf); printf("Fatal: Number of finger = %g is smaller than one.\n", here->BSIM4v7nf); Fatal_Flag = 1; } if((here->BSIM4v7sa > 0.0) && (here->BSIM4v7sb > 0.0) && ((here->BSIM4v7nf == 1.0) || ((here->BSIM4v7nf > 1.0) && (here->BSIM4v7sd > 0.0))) ) { if (model->BSIM4v7saref <= 0.0) { fprintf(fplog, "Fatal: SAref = %g is not positive.\n",model->BSIM4v7saref); printf("Fatal: SAref = %g is not positive.\n",model->BSIM4v7saref); Fatal_Flag = 1; } if (model->BSIM4v7sbref <= 0.0) { fprintf(fplog, "Fatal: SBref = %g is not positive.\n",model->BSIM4v7sbref); printf("Fatal: SBref = %g is not positive.\n",model->BSIM4v7sbref); Fatal_Flag = 1; } } if ((here->BSIM4v7l + model->BSIM4v7xl) <= model->BSIM4v7xgl) { fprintf(fplog, "Fatal: The parameter xgl must be smaller than Ldrawn+XL.\n"); printf("Fatal: The parameter xgl must be smaller than Ldrawn+XL.\n"); Fatal_Flag = 1; } if (here->BSIM4v7ngcon < 1.0) { fprintf(fplog, "Fatal: The parameter ngcon cannot be smaller than one.\n"); printf("Fatal: The parameter ngcon cannot be smaller than one.\n"); Fatal_Flag = 1; } if ((here->BSIM4v7ngcon != 1.0) && (here->BSIM4v7ngcon != 2.0)) { here->BSIM4v7ngcon = 1.0; fprintf(fplog, "Warning: Ngcon must be equal to one or two; reset to 1.0.\n"); printf("Warning: Ngcon must be equal to one or two; reset to 1.0.\n"); } if (model->BSIM4v7gbmin < 1.0e-20) { fprintf(fplog, "Warning: Gbmin = %g is too small.\n", model->BSIM4v7gbmin); printf("Warning: Gbmin = %g is too small.\n", model->BSIM4v7gbmin); } /* Check saturation parameters */ if (pParam->BSIM4v7fprout < 0.0) { fprintf(fplog, "Fatal: fprout = %g is negative.\n", pParam->BSIM4v7fprout); printf("Fatal: fprout = %g is negative.\n", pParam->BSIM4v7fprout); Fatal_Flag = 1; } if (pParam->BSIM4v7pdits < 0.0) { fprintf(fplog, "Fatal: pdits = %g is negative.\n", pParam->BSIM4v7pdits); printf("Fatal: pdits = %g is negative.\n", pParam->BSIM4v7pdits); Fatal_Flag = 1; } if (model->BSIM4v7pditsl < 0.0) { fprintf(fplog, "Fatal: pditsl = %g is negative.\n", model->BSIM4v7pditsl); printf("Fatal: pditsl = %g is negative.\n", model->BSIM4v7pditsl); Fatal_Flag = 1; } /* Check gate current parameters */ if (model->BSIM4v7igbMod) { if (pParam->BSIM4v7nigbinv <= 0.0) { fprintf(fplog, "Fatal: nigbinv = %g is non-positive.\n", pParam->BSIM4v7nigbinv); printf("Fatal: nigbinv = %g is non-positive.\n", pParam->BSIM4v7nigbinv); Fatal_Flag = 1; } if (pParam->BSIM4v7nigbacc <= 0.0) { fprintf(fplog, "Fatal: nigbacc = %g is non-positive.\n", pParam->BSIM4v7nigbacc); printf("Fatal: nigbacc = %g is non-positive.\n", pParam->BSIM4v7nigbacc); Fatal_Flag = 1; } } if (model->BSIM4v7igcMod) { if (pParam->BSIM4v7nigc <= 0.0) { fprintf(fplog, "Fatal: nigc = %g is non-positive.\n", pParam->BSIM4v7nigc); printf("Fatal: nigc = %g is non-positive.\n", pParam->BSIM4v7nigc); Fatal_Flag = 1; } if (pParam->BSIM4v7poxedge <= 0.0) { fprintf(fplog, "Fatal: poxedge = %g is non-positive.\n", pParam->BSIM4v7poxedge); printf("Fatal: poxedge = %g is non-positive.\n", pParam->BSIM4v7poxedge); Fatal_Flag = 1; } if (pParam->BSIM4v7pigcd <= 0.0) { fprintf(fplog, "Fatal: pigcd = %g is non-positive.\n", pParam->BSIM4v7pigcd); printf("Fatal: pigcd = %g is non-positive.\n", pParam->BSIM4v7pigcd); Fatal_Flag = 1; } } /* Check capacitance parameters */ if (pParam->BSIM4v7clc < 0.0) { fprintf(fplog, "Fatal: Clc = %g is negative.\n", pParam->BSIM4v7clc); printf("Fatal: Clc = %g is negative.\n", pParam->BSIM4v7clc); Fatal_Flag = 1; } /* Check overlap capacitance parameters */ if (pParam->BSIM4v7ckappas < 0.02) { fprintf(fplog, "Warning: ckappas = %g is too small. Set to 0.02\n", pParam->BSIM4v7ckappas); printf("Warning: ckappas = %g is too small.\n", pParam->BSIM4v7ckappas); pParam->BSIM4v7ckappas = 0.02; } if (pParam->BSIM4v7ckappad < 0.02) { fprintf(fplog, "Warning: ckappad = %g is too small. Set to 0.02\n", pParam->BSIM4v7ckappad); printf("Warning: ckappad = %g is too small.\n", pParam->BSIM4v7ckappad); pParam->BSIM4v7ckappad = 0.02; } if (model->BSIM4v7vtss < 0.0) { fprintf(fplog, "Fatal: Vtss = %g is negative.\n", model->BSIM4v7vtss); printf("Fatal: Vtss = %g is negative.\n", model->BSIM4v7vtss); Fatal_Flag = 1; } if (model->BSIM4v7vtsd < 0.0) { fprintf(fplog, "Fatal: Vtsd = %g is negative.\n", model->BSIM4v7vtsd); printf("Fatal: Vtsd = %g is negative.\n", model->BSIM4v7vtsd); Fatal_Flag = 1; } if (model->BSIM4v7vtssws < 0.0) { fprintf(fplog, "Fatal: Vtssws = %g is negative.\n", model->BSIM4v7vtssws); printf("Fatal: Vtssws = %g is negative.\n", model->BSIM4v7vtssws); Fatal_Flag = 1; } if (model->BSIM4v7vtsswd < 0.0) { fprintf(fplog, "Fatal: Vtsswd = %g is negative.\n", model->BSIM4v7vtsswd); printf("Fatal: Vtsswd = %g is negative.\n", model->BSIM4v7vtsswd); Fatal_Flag = 1; } if (model->BSIM4v7vtsswgs < 0.0) { fprintf(fplog, "Fatal: Vtsswgs = %g is negative.\n", model->BSIM4v7vtsswgs); printf("Fatal: Vtsswgs = %g is negative.\n", model->BSIM4v7vtsswgs); Fatal_Flag = 1; } if (model->BSIM4v7vtsswgd < 0.0) { fprintf(fplog, "Fatal: Vtsswgd = %g is negative.\n", model->BSIM4v7vtsswgd); printf("Fatal: Vtsswgd = %g is negative.\n", model->BSIM4v7vtsswgd); Fatal_Flag = 1; } if (model->BSIM4v7paramChk ==1) { /* Check L and W parameters */ if (pParam->BSIM4v7leff <= 1.0e-9) { fprintf(fplog, "Warning: Leff = %g <= 1.0e-9. Recommended Leff >= 1e-8 \n", pParam->BSIM4v7leff); printf("Warning: Leff = %g <= 1.0e-9. Recommended Leff >= 1e-8 \n", pParam->BSIM4v7leff); } if (pParam->BSIM4v7leffCV <= 1.0e-9) { fprintf(fplog, "Warning: Leff for CV = %g <= 1.0e-9. Recommended LeffCV >=1e-8 \n", pParam->BSIM4v7leffCV); printf("Warning: Leff for CV = %g <= 1.0e-9. Recommended LeffCV >=1e-8 \n", pParam->BSIM4v7leffCV); } if (pParam->BSIM4v7weff <= 1.0e-9) { fprintf(fplog, "Warning: Weff = %g <= 1.0e-9. Recommended Weff >=1e-7 \n", pParam->BSIM4v7weff); printf("Warning: Weff = %g <= 1.0e-9. Recommended Weff >=1e-7 \n", pParam->BSIM4v7weff); } if (pParam->BSIM4v7weffCV <= 1.0e-9) { fprintf(fplog, "Warning: Weff for CV = %g <= 1.0e-9. Recommended WeffCV >= 1e-7 \n", pParam->BSIM4v7weffCV); printf("Warning: Weff for CV = %g <= 1.0e-9. Recommended WeffCV >= 1e-7 \n", pParam->BSIM4v7weffCV); } /* Check threshold voltage parameters */ if (model->BSIM4v7toxe < 1.0e-10) { fprintf(fplog, "Warning: Toxe = %g is less than 1A. Recommended Toxe >= 5A\n", model->BSIM4v7toxe); printf("Warning: Toxe = %g is less than 1A. Recommended Toxe >= 5A\n", model->BSIM4v7toxe); } if (model->BSIM4v7toxp < 1.0e-10) { fprintf(fplog, "Warning: Toxp = %g is less than 1A. Recommended Toxp >= 5A\n", model->BSIM4v7toxp); printf("Warning: Toxp = %g is less than 1A. Recommended Toxp >= 5A\n", model->BSIM4v7toxp); } if (model->BSIM4v7toxm < 1.0e-10) { fprintf(fplog, "Warning: Toxm = %g is less than 1A. Recommended Toxm >= 5A\n", model->BSIM4v7toxm); printf("Warning: Toxm = %g is less than 1A. Recommended Toxm >= 5A\n", model->BSIM4v7toxm); } if (pParam->BSIM4v7ndep <= 1.0e12) { fprintf(fplog, "Warning: Ndep = %g may be too small.\n", pParam->BSIM4v7ndep); printf("Warning: Ndep = %g may be too small.\n", pParam->BSIM4v7ndep); } else if (pParam->BSIM4v7ndep >= 1.0e21) { fprintf(fplog, "Warning: Ndep = %g may be too large.\n", pParam->BSIM4v7ndep); printf("Warning: Ndep = %g may be too large.\n", pParam->BSIM4v7ndep); } if (pParam->BSIM4v7nsub <= 1.0e14) { fprintf(fplog, "Warning: Nsub = %g may be too small.\n", pParam->BSIM4v7nsub); printf("Warning: Nsub = %g may be too small.\n", pParam->BSIM4v7nsub); } else if (pParam->BSIM4v7nsub >= 1.0e21) { fprintf(fplog, "Warning: Nsub = %g may be too large.\n", pParam->BSIM4v7nsub); printf("Warning: Nsub = %g may be too large.\n", pParam->BSIM4v7nsub); } if ((pParam->BSIM4v7ngate > 0.0) && (pParam->BSIM4v7ngate <= 1.e18)) { fprintf(fplog, "Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->BSIM4v7ngate); printf("Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->BSIM4v7ngate); } if (pParam->BSIM4v7dvt0 < 0.0) { fprintf(fplog, "Warning: Dvt0 = %g is negative.\n", pParam->BSIM4v7dvt0); printf("Warning: Dvt0 = %g is negative.\n", pParam->BSIM4v7dvt0); } if (fabs(1.0e-8 / (pParam->BSIM4v7w0 + pParam->BSIM4v7weff)) > 10.0) { fprintf(fplog, "Warning: (W0 + Weff) may be too small.\n"); printf("Warning: (W0 + Weff) may be too small.\n"); } /* Check subthreshold parameters */ if (pParam->BSIM4v7nfactor < 0.0) { fprintf(fplog, "Warning: Nfactor = %g is negative.\n", pParam->BSIM4v7nfactor); printf("Warning: Nfactor = %g is negative.\n", pParam->BSIM4v7nfactor); } if (pParam->BSIM4v7cdsc < 0.0) { fprintf(fplog, "Warning: Cdsc = %g is negative.\n", pParam->BSIM4v7cdsc); printf("Warning: Cdsc = %g is negative.\n", pParam->BSIM4v7cdsc); } if (pParam->BSIM4v7cdscd < 0.0) { fprintf(fplog, "Warning: Cdscd = %g is negative.\n", pParam->BSIM4v7cdscd); printf("Warning: Cdscd = %g is negative.\n", pParam->BSIM4v7cdscd); } /* Check DIBL parameters */ if (here->BSIM4v7eta0 < 0.0) { fprintf(fplog, "Warning: Eta0 = %g is negative.\n", here->BSIM4v7eta0); printf("Warning: Eta0 = %g is negative.\n", here->BSIM4v7eta0); } /* Check Abulk parameters */ if (fabs(1.0e-8 / (pParam->BSIM4v7b1 + pParam->BSIM4v7weff)) > 10.0) { fprintf(fplog, "Warning: (B1 + Weff) may be too small.\n"); printf("Warning: (B1 + Weff) may be too small.\n"); } /* Check Saturation parameters */ if (pParam->BSIM4v7a2 < 0.01) { fprintf(fplog, "Warning: A2 = %g is too small. Set to 0.01.\n", pParam->BSIM4v7a2); printf("Warning: A2 = %g is too small. Set to 0.01.\n", pParam->BSIM4v7a2); pParam->BSIM4v7a2 = 0.01; } else if (pParam->BSIM4v7a2 > 1.0) { fprintf(fplog, "Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->BSIM4v7a2); printf("Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->BSIM4v7a2); pParam->BSIM4v7a2 = 1.0; pParam->BSIM4v7a1 = 0.0; } if (pParam->BSIM4v7prwg < 0.0) { fprintf(fplog, "Warning: Prwg = %g is negative. Set to zero.\n", pParam->BSIM4v7prwg); printf("Warning: Prwg = %g is negative. Set to zero.\n", pParam->BSIM4v7prwg); pParam->BSIM4v7prwg = 0.0; } if (pParam->BSIM4v7rdsw < 0.0) { fprintf(fplog, "Warning: Rdsw = %g is negative. Set to zero.\n", pParam->BSIM4v7rdsw); printf("Warning: Rdsw = %g is negative. Set to zero.\n", pParam->BSIM4v7rdsw); pParam->BSIM4v7rdsw = 0.0; pParam->BSIM4v7rds0 = 0.0; } if (pParam->BSIM4v7rds0 < 0.0) { fprintf(fplog, "Warning: Rds at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4v7rds0); printf("Warning: Rds at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4v7rds0); pParam->BSIM4v7rds0 = 0.0; } if (pParam->BSIM4v7rdswmin < 0.0) { fprintf(fplog, "Warning: Rdswmin at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4v7rdswmin); printf("Warning: Rdswmin at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4v7rdswmin); pParam->BSIM4v7rdswmin = 0.0; } if (pParam->BSIM4v7pscbe2 <= 0.0) { fprintf(fplog, "Warning: Pscbe2 = %g is not positive.\n", pParam->BSIM4v7pscbe2); printf("Warning: Pscbe2 = %g is not positive.\n", pParam->BSIM4v7pscbe2); } if (pParam->BSIM4v7vsattemp < 1.0e3) { fprintf(fplog, "Warning: Vsat at current temperature = %g may be too small.\n", pParam->BSIM4v7vsattemp); printf("Warning: Vsat at current temperature = %g may be too small.\n", pParam->BSIM4v7vsattemp); } if((model->BSIM4v7lambdaGiven) && (pParam->BSIM4v7lambda > 0.0) ) { if (pParam->BSIM4v7lambda > 1.0e-9) { fprintf(fplog, "Warning: Lambda = %g may be too large.\n", pParam->BSIM4v7lambda); printf("Warning: Lambda = %g may be too large.\n", pParam->BSIM4v7lambda); } } if((model->BSIM4v7vtlGiven) && (pParam->BSIM4v7vtl > 0.0) ) { if (pParam->BSIM4v7vtl < 6.0e4) { fprintf(fplog, "Warning: Thermal velocity vtl = %g may be too small.\n", pParam->BSIM4v7vtl); printf("Warning: Thermal velocity vtl = %g may be too small.\n", pParam->BSIM4v7vtl); } if (pParam->BSIM4v7xn < 3.0) { fprintf(fplog, "Warning: back scattering coeff xn = %g is too small.\n", pParam->BSIM4v7xn); printf("Warning: back scattering coeff xn = %g is too small. Reset to 3.0 \n", pParam->BSIM4v7xn); pParam->BSIM4v7xn = 3.0; } if (model->BSIM4v7lc < 0.0) { fprintf(fplog, "Warning: back scattering coeff lc = %g is too small.\n", model->BSIM4v7lc); printf("Warning: back scattering coeff lc = %g is too small. Reset to 0.0\n", model->BSIM4v7lc); pParam->BSIM4v7lc = 0.0; } } if (pParam->BSIM4v7pdibl1 < 0.0) { fprintf(fplog, "Warning: Pdibl1 = %g is negative.\n", pParam->BSIM4v7pdibl1); printf("Warning: Pdibl1 = %g is negative.\n", pParam->BSIM4v7pdibl1); } if (pParam->BSIM4v7pdibl2 < 0.0) { fprintf(fplog, "Warning: Pdibl2 = %g is negative.\n", pParam->BSIM4v7pdibl2); printf("Warning: Pdibl2 = %g is negative.\n", pParam->BSIM4v7pdibl2); } /* Check stress effect parameters */ if((here->BSIM4v7sa > 0.0) && (here->BSIM4v7sb > 0.0) && ((here->BSIM4v7nf == 1.0) || ((here->BSIM4v7nf > 1.0) && (here->BSIM4v7sd > 0.0))) ) { if (model->BSIM4v7lodk2 <= 0.0) { fprintf(fplog, "Warning: LODK2 = %g is not positive.\n",model->BSIM4v7lodk2); printf("Warning: LODK2 = %g is not positive.\n",model->BSIM4v7lodk2); } if (model->BSIM4v7lodeta0 <= 0.0) { fprintf(fplog, "Warning: LODETA0 = %g is not positive.\n",model->BSIM4v7lodeta0); printf("Warning: LODETA0 = %g is not positive.\n",model->BSIM4v7lodeta0); } } /* Check gate resistance parameters */ if (here->BSIM4v7rgateMod == 1) { if (model->BSIM4v7rshg <= 0.0) printf("Warning: rshg should be positive for rgateMod = 1.\n"); } else if (here->BSIM4v7rgateMod == 2) { if (model->BSIM4v7rshg <= 0.0) printf("Warning: rshg <= 0.0 for rgateMod = 2.\n"); else if (pParam->BSIM4v7xrcrg1 <= 0.0) printf("Warning: xrcrg1 <= 0.0 for rgateMod = 2.\n"); } if (here->BSIM4v7rgateMod == 3) { if (model->BSIM4v7rshg <= 0.0) printf("Warning: rshg should be positive for rgateMod = 3.\n"); else if (pParam->BSIM4v7xrcrg1 <= 0.0) printf("Warning: xrcrg1 should be positive for rgateMod = 3.\n"); } /* Check capacitance parameters */ if (pParam->BSIM4v7noff < 0.1) { fprintf(fplog, "Warning: Noff = %g is too small.\n", pParam->BSIM4v7noff); printf("Warning: Noff = %g is too small.\n", pParam->BSIM4v7noff); } if (pParam->BSIM4v7voffcv < -0.5) { fprintf(fplog, "Warning: Voffcv = %g is too small.\n", pParam->BSIM4v7voffcv); printf("Warning: Voffcv = %g is too small.\n", pParam->BSIM4v7voffcv); } if (pParam->BSIM4v7moin < 5.0) { fprintf(fplog, "Warning: Moin = %g is too small.\n", pParam->BSIM4v7moin); printf("Warning: Moin = %g is too small.\n", pParam->BSIM4v7moin); } if (pParam->BSIM4v7moin > 25.0) { fprintf(fplog, "Warning: Moin = %g is too large.\n", pParam->BSIM4v7moin); printf("Warning: Moin = %g is too large.\n", pParam->BSIM4v7moin); } if(model->BSIM4v7capMod ==2) { if (pParam->BSIM4v7acde < 0.1) { fprintf(fplog, "Warning: Acde = %g is too small.\n", pParam->BSIM4v7acde); printf("Warning: Acde = %g is too small.\n", pParam->BSIM4v7acde); } if (pParam->BSIM4v7acde > 1.6) { fprintf(fplog, "Warning: Acde = %g is too large.\n", pParam->BSIM4v7acde); printf("Warning: Acde = %g is too large.\n", pParam->BSIM4v7acde); } } /* Check overlap capacitance parameters */ if (model->BSIM4v7cgdo < 0.0) { fprintf(fplog, "Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM4v7cgdo); printf("Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM4v7cgdo); model->BSIM4v7cgdo = 0.0; } if (model->BSIM4v7cgso < 0.0) { fprintf(fplog, "Warning: cgso = %g is negative. Set to zero.\n", model->BSIM4v7cgso); printf("Warning: cgso = %g is negative. Set to zero.\n", model->BSIM4v7cgso); model->BSIM4v7cgso = 0.0; } if (model->BSIM4v7cgbo < 0.0) { fprintf(fplog, "Warning: cgbo = %g is negative. Set to zero.\n", model->BSIM4v7cgbo); printf("Warning: cgbo = %g is negative. Set to zero.\n", model->BSIM4v7cgbo); model->BSIM4v7cgbo = 0.0; } /* v4.7 */ if (model->BSIM4v7tnoiMod == 1 || model->BSIM4v7tnoiMod == 2) { if (model->BSIM4v7tnoia < 0.0) { fprintf(fplog, "Warning: tnoia = %g is negative. Set to zero.\n", model->BSIM4v7tnoia); printf("Warning: tnoia = %g is negative. Set to zero.\n", model->BSIM4v7tnoia); model->BSIM4v7tnoia = 0.0; } if (model->BSIM4v7tnoib < 0.0) { fprintf(fplog, "Warning: tnoib = %g is negative. Set to zero.\n", model->BSIM4v7tnoib); printf("Warning: tnoib = %g is negative. Set to zero.\n", model->BSIM4v7tnoib); model->BSIM4v7tnoib = 0.0; } if (model->BSIM4v7rnoia < 0.0) { fprintf(fplog, "Warning: rnoia = %g is negative. Set to zero.\n", model->BSIM4v7rnoia); printf("Warning: rnoia = %g is negative. Set to zero.\n", model->BSIM4v7rnoia); model->BSIM4v7rnoia = 0.0; } if (model->BSIM4v7rnoib < 0.0) { fprintf(fplog, "Warning: rnoib = %g is negative. Set to zero.\n", model->BSIM4v7rnoib); printf("Warning: rnoib = %g is negative. Set to zero.\n", model->BSIM4v7rnoib); model->BSIM4v7rnoib = 0.0; } } /* v4.7 */ if (model->BSIM4v7tnoiMod == 2) { if (model->BSIM4v7tnoic < 0.0) { fprintf(fplog, "Warning: tnoic = %g is negative. Set to zero.\n", model->BSIM4v7tnoic); printf("Warning: tnoic = %g is negative. Set to zero.\n", model->BSIM4v7tnoic); model->BSIM4v7tnoic = 0.0; } if (model->BSIM4v7rnoic < 0.0) { fprintf(fplog, "Warning: rnoic = %g is negative. Set to zero.\n", model->BSIM4v7rnoic); printf("Warning: rnoic = %g is negative. Set to zero.\n", model->BSIM4v7rnoic); model->BSIM4v7rnoic = 0.0; } } /* Limits of Njs and Njd modified in BSIM4v7.7 */ if (model->BSIM4v7SjctEmissionCoeff < 0.1) { fprintf(fplog, "Warning: Njs = %g is less than 0.1. Setting Njs to 0.1.\n", model->BSIM4v7SjctEmissionCoeff); printf("Warning: Njs = %g is less than 0.1. Setting Njs to 0.1.\n", model->BSIM4v7SjctEmissionCoeff); model->BSIM4v7SjctEmissionCoeff = 0.1; } else if (model->BSIM4v7SjctEmissionCoeff < 0.7) { fprintf(fplog, "Warning: Njs = %g is less than 0.7.\n", model->BSIM4v7SjctEmissionCoeff); printf("Warning: Njs = %g is less than 0.7.\n", model->BSIM4v7SjctEmissionCoeff); } if (model->BSIM4v7DjctEmissionCoeff < 0.1) { fprintf(fplog, "Warning: Njd = %g is less than 0.1. Setting Njd to 0.1.\n", model->BSIM4v7DjctEmissionCoeff); printf("Warning: Njd = %g is less than 0.1. Setting Njd to 0.1.\n", model->BSIM4v7DjctEmissionCoeff); model->BSIM4v7DjctEmissionCoeff = 0.1; } else if (model->BSIM4v7DjctEmissionCoeff < 0.7) { fprintf(fplog, "Warning: Njd = %g is less than 0.7.\n", model->BSIM4v7DjctEmissionCoeff); printf("Warning: Njd = %g is less than 0.7.\n", model->BSIM4v7DjctEmissionCoeff); } if (model->BSIM4v7njtsstemp < 0.0) { fprintf(fplog, "Warning: Njts = %g is negative at temperature = %g.\n", model->BSIM4v7njtsstemp, ckt->CKTtemp); printf("Warning: Njts = %g is negative at temperature = %g.\n", model->BSIM4v7njtsstemp, ckt->CKTtemp); } if (model->BSIM4v7njtsswstemp < 0.0) { fprintf(fplog, "Warning: Njtssw = %g is negative at temperature = %g.\n", model->BSIM4v7njtsswstemp, ckt->CKTtemp); printf("Warning: Njtssw = %g is negative at temperature = %g.\n", model->BSIM4v7njtsswstemp, ckt->CKTtemp); } if (model->BSIM4v7njtsswgstemp < 0.0) { fprintf(fplog, "Warning: Njtsswg = %g is negative at temperature = %g.\n", model->BSIM4v7njtsswgstemp, ckt->CKTtemp); printf("Warning: Njtsswg = %g is negative at temperature = %g.\n", model->BSIM4v7njtsswgstemp, ckt->CKTtemp); } if (model->BSIM4v7njtsdGiven && model->BSIM4v7njtsdtemp < 0.0) { fprintf(fplog, "Warning: Njtsd = %g is negative at temperature = %g.\n", model->BSIM4v7njtsdtemp, ckt->CKTtemp); printf("Warning: Njtsd = %g is negative at temperature = %g.\n", model->BSIM4v7njtsdtemp, ckt->CKTtemp); } if (model->BSIM4v7njtsswdGiven && model->BSIM4v7njtsswdtemp < 0.0) { fprintf(fplog, "Warning: Njtsswd = %g is negative at temperature = %g.\n", model->BSIM4v7njtsswdtemp, ckt->CKTtemp); printf("Warning: Njtsswd = %g is negative at temperature = %g.\n", model->BSIM4v7njtsswdtemp, ckt->CKTtemp); } if (model->BSIM4v7njtsswgdGiven && model->BSIM4v7njtsswgdtemp < 0.0) { fprintf(fplog, "Warning: Njtsswgd = %g is negative at temperature = %g.\n", model->BSIM4v7njtsswgdtemp, ckt->CKTtemp); printf("Warning: Njtsswgd = %g is negative at temperature = %g.\n", model->BSIM4v7njtsswgdtemp, ckt->CKTtemp); } if (model->BSIM4v7ntnoi < 0.0) { fprintf(fplog, "Warning: ntnoi = %g is negative. Set to zero.\n", model->BSIM4v7ntnoi); printf("Warning: ntnoi = %g is negative. Set to zero.\n", model->BSIM4v7ntnoi); model->BSIM4v7ntnoi = 0.0; } /* diode model */ if (model->BSIM4v7SbulkJctBotGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJS = %g is too big. Set to 0.99.\n", model->BSIM4v7SbulkJctBotGradingCoeff); printf("Warning: MJS = %g is too big. Set to 0.99.\n", model->BSIM4v7SbulkJctBotGradingCoeff); model->BSIM4v7SbulkJctBotGradingCoeff = 0.99; } if (model->BSIM4v7SbulkJctSideGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJSWS = %g is too big. Set to 0.99.\n", model->BSIM4v7SbulkJctSideGradingCoeff); printf("Warning: MJSWS = %g is too big. Set to 0.99.\n", model->BSIM4v7SbulkJctSideGradingCoeff); model->BSIM4v7SbulkJctSideGradingCoeff = 0.99; } if (model->BSIM4v7SbulkJctGateSideGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJSWGS = %g is too big. Set to 0.99.\n", model->BSIM4v7SbulkJctGateSideGradingCoeff); printf("Warning: MJSWGS = %g is too big. Set to 0.99.\n", model->BSIM4v7SbulkJctGateSideGradingCoeff); model->BSIM4v7SbulkJctGateSideGradingCoeff = 0.99; } if (model->BSIM4v7DbulkJctBotGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJD = %g is too big. Set to 0.99.\n", model->BSIM4v7DbulkJctBotGradingCoeff); printf("Warning: MJD = %g is too big. Set to 0.99.\n", model->BSIM4v7DbulkJctBotGradingCoeff); model->BSIM4v7DbulkJctBotGradingCoeff = 0.99; } if (model->BSIM4v7DbulkJctSideGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJSWD = %g is too big. Set to 0.99.\n", model->BSIM4v7DbulkJctSideGradingCoeff); printf("Warning: MJSWD = %g is too big. Set to 0.99.\n", model->BSIM4v7DbulkJctSideGradingCoeff); model->BSIM4v7DbulkJctSideGradingCoeff = 0.99; } if (model->BSIM4v7DbulkJctGateSideGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJSWGD = %g is too big. Set to 0.99.\n", model->BSIM4v7DbulkJctGateSideGradingCoeff); printf("Warning: MJSWGD = %g is too big. Set to 0.99.\n", model->BSIM4v7DbulkJctGateSideGradingCoeff); model->BSIM4v7DbulkJctGateSideGradingCoeff = 0.99; } if (model->BSIM4v7wpemod == 1) { if (model->BSIM4v7scref <= 0.0) { fprintf(fplog, "Warning: SCREF = %g is not positive. Set to 1e-6.\n", model->BSIM4v7scref); printf("Warning: SCREF = %g is not positive. Set to 1e-6.\n", model->BSIM4v7scref); model->BSIM4v7scref = 1e-6; } /*Move these checks to temp.c for sceff calculation*/ /* if (here->BSIM4v7sca < 0.0) { fprintf(fplog, "Warning: SCA = %g is negative. Set to 0.0.\n", here->BSIM4v7sca); printf("Warning: SCA = %g is negative. Set to 0.0.\n", here->BSIM4v7sca); here->BSIM4v7sca = 0.0; } if (here->BSIM4v7scb < 0.0) { fprintf(fplog, "Warning: SCB = %g is negative. Set to 0.0.\n", here->BSIM4v7scb); printf("Warning: SCB = %g is negative. Set to 0.0.\n", here->BSIM4v7scb); here->BSIM4v7scb = 0.0; } if (here->BSIM4v7scc < 0.0) { fprintf(fplog, "Warning: SCC = %g is negative. Set to 0.0.\n", here->BSIM4v7scc); printf("Warning: SCC = %g is negative. Set to 0.0.\n", here->BSIM4v7scc); here->BSIM4v7scc = 0.0; } if (here->BSIM4v7sc < 0.0) { fprintf(fplog, "Warning: SC = %g is negative. Set to 0.0.\n", here->BSIM4v7sc); printf("Warning: SC = %g is negative. Set to 0.0.\n", here->BSIM4v7sc); here->BSIM4v7sc = 0.0; } */ } }/* loop for the parameter check for warning messages */ fclose(fplog); } else { fprintf(stderr, "Warning: Can't open log file. Parameter checking skipped.\n"); } return(Fatal_Flag); } tmpk8ny_4pz/src/spicelib/devices/bsim4v7/b4v7.c0000644000175000017500000023027013546075722021410 0ustar carstencarsten/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4.c of BSIM4.7.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Authors: 2008- Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. * Modified by Mohan Dunga, 12/13/2006. * Modified by Mohan Dunga, Wenwei Yang, 05/18/2007. * Modified by Wenwei Yang, 07/31/2008. * Modified by Tanvir Morshed, Darsen Lu 03/27/2011 **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "bsim4v7def.h" #include "ngspice/suffix.h" IFparm BSIM4v7pTable[] = { /* parameters */ IOP( "l", BSIM4v7_L, IF_REAL , "Length"), IOP( "w", BSIM4v7_W, IF_REAL , "Width"), IOP( "m", BSIM4v7_M, IF_REAL , "Separate Parallel multiplier"), IOP( "nf", BSIM4v7_NF, IF_REAL , "Number of fingers"), IOP( "sa", BSIM4v7_SA, IF_REAL , "distance between OD edge to poly of one side "), IOP( "sb", BSIM4v7_SB, IF_REAL , "distance between OD edge to poly of the other side"), IOP( "sd", BSIM4v7_SD, IF_REAL , "distance between neighbour fingers"), IOP( "sca", BSIM4v7_SCA, IF_REAL , "Integral of the first distribution function for scattered well dopant"), IOP( "scb", BSIM4v7_SCB, IF_REAL , "Integral of the second distribution function for scattered well dopant"), IOP( "scc", BSIM4v7_SCC, IF_REAL , "Integral of the third distribution function for scattered well dopant"), IOP( "sc", BSIM4v7_SC, IF_REAL , "Distance to a single well edge "), IOP( "min", BSIM4v7_MIN, IF_INTEGER , "Minimize either D or S"), IOP( "ad", BSIM4v7_AD, IF_REAL , "Drain area"), IOP( "as", BSIM4v7_AS, IF_REAL , "Source area"), IOP( "pd", BSIM4v7_PD, IF_REAL , "Drain perimeter"), IOP( "ps", BSIM4v7_PS, IF_REAL , "Source perimeter"), IOP( "nrd", BSIM4v7_NRD, IF_REAL , "Number of squares in drain"), IOP( "nrs", BSIM4v7_NRS, IF_REAL , "Number of squares in source"), IOP( "off", BSIM4v7_OFF, IF_FLAG , "Device is initially off"), IOP( "rbdb", BSIM4v7_RBDB, IF_REAL , "Body resistance"), IOP( "rbsb", BSIM4v7_RBSB, IF_REAL , "Body resistance"), IOP( "rbpb", BSIM4v7_RBPB, IF_REAL , "Body resistance"), IOP( "rbps", BSIM4v7_RBPS, IF_REAL , "Body resistance"), IOP( "rbpd", BSIM4v7_RBPD, IF_REAL , "Body resistance"), IOP( "delvto", BSIM4v7_DELVTO, IF_REAL , "Zero bias threshold voltage variation"), IOPR( "delvt0", BSIM4v7_DELVTO, IF_REAL , "Zero bias threshold voltage variation"), IOP( "mulu0", BSIM4v7_MULU0, IF_REAL, "Low field mobility multiplier"), IOP( "xgw", BSIM4v7_XGW, IF_REAL, "Distance from gate contact center to device edge"), IOP( "ngcon", BSIM4v7_NGCON, IF_REAL, "Number of gate contacts"), IOP( "trnqsmod", BSIM4v7_TRNQSMOD, IF_INTEGER, "Transient NQS model selector"), IOP( "acnqsmod", BSIM4v7_ACNQSMOD, IF_INTEGER, "AC NQS model selector"), IOP( "rbodymod", BSIM4v7_RBODYMOD, IF_INTEGER, "Distributed body R model selector"), IOP( "rgatemod", BSIM4v7_RGATEMOD, IF_INTEGER, "Gate resistance model selector"), IOP( "geomod", BSIM4v7_GEOMOD, IF_INTEGER, "Geometry dependent parasitics model selector"), IOP( "rgeomod", BSIM4v7_RGEOMOD, IF_INTEGER, "S/D resistance and contact model selector"), IP( "ic", BSIM4v7_IC, IF_REALVEC , "Vector of DS,GS,BS initial voltages"), OP( "gmbs", BSIM4v7_GMBS, IF_REAL, "Gmb"), OP( "gm", BSIM4v7_GM, IF_REAL, "Gm"), OP( "gds", BSIM4v7_GDS, IF_REAL, "Gds"), OP( "vdsat", BSIM4v7_VDSAT, IF_REAL, "Vdsat"), OP( "vth", BSIM4v7_VON, IF_REAL, "Vth"), OP( "id", BSIM4v7_CD, IF_REAL, "Ids"), OP( "ibd", BSIM4v7_CBD, IF_REAL, "Ibd"), OP( "ibs", BSIM4v7_CBS, IF_REAL, "Ibs"), OP( "gbd", BSIM4v7_GBD, IF_REAL, "gbd"), OP( "gbs", BSIM4v7_GBS, IF_REAL, "gbs"), OP( "isub", BSIM4v7_CSUB, IF_REAL, "Isub"), OP( "igidl", BSIM4v7_IGIDL, IF_REAL, "Igidl"), OP( "igisl", BSIM4v7_IGISL, IF_REAL, "Igisl"), OP( "igs", BSIM4v7_IGS, IF_REAL, "Igs"), OP( "igd", BSIM4v7_IGD, IF_REAL, "Igd"), OP( "igb", BSIM4v7_IGB, IF_REAL, "Igb"), OP( "igcs", BSIM4v7_IGCS, IF_REAL, "Igcs"), OP( "igcd", BSIM4v7_IGCD, IF_REAL, "Igcd"), OP( "vbs", BSIM4v7_VBS, IF_REAL, "Vbs"), OP( "vgs", BSIM4v7_VGS, IF_REAL, "Vgs"), OP( "vds", BSIM4v7_VDS, IF_REAL, "Vds"), OP( "cgg", BSIM4v7_CGGB, IF_REAL, "Cggb"), OP( "cgs", BSIM4v7_CGSB, IF_REAL, "Cgsb"), OP( "cgd", BSIM4v7_CGDB, IF_REAL, "Cgdb"), OP( "cbg", BSIM4v7_CBGB, IF_REAL, "Cbgb"), OP( "cbd", BSIM4v7_CBDB, IF_REAL, "Cbdb"), OP( "cbs", BSIM4v7_CBSB, IF_REAL, "Cbsb"), OP( "cdg", BSIM4v7_CDGB, IF_REAL, "Cdgb"), OP( "cdd", BSIM4v7_CDDB, IF_REAL, "Cddb"), OP( "cds", BSIM4v7_CDSB, IF_REAL, "Cdsb"), OP( "csg", BSIM4v7_CSGB, IF_REAL, "Csgb"), OP( "csd", BSIM4v7_CSDB, IF_REAL, "Csdb"), OP( "css", BSIM4v7_CSSB, IF_REAL, "Cssb"), OP( "cgb", BSIM4v7_CGBB, IF_REAL, "Cgbb"), OP( "cdb", BSIM4v7_CDBB, IF_REAL, "Cdbb"), OP( "csb", BSIM4v7_CSBB, IF_REAL, "Csbb"), OP( "cbb", BSIM4v7_CBBB, IF_REAL, "Cbbb"), OP( "capbd", BSIM4v7_CAPBD, IF_REAL, "Capbd"), OP( "capbs", BSIM4v7_CAPBS, IF_REAL, "Capbs"), OP( "qg", BSIM4v7_QG, IF_REAL, "Qgate"), OP( "qb", BSIM4v7_QB, IF_REAL, "Qbulk"), OP( "qd", BSIM4v7_QD, IF_REAL, "Qdrain"), OP( "qs", BSIM4v7_QS, IF_REAL, "Qsource"), OP( "qinv", BSIM4v7_QINV, IF_REAL, "Qinversion"), OP( "qdef", BSIM4v7_QDEF, IF_REAL, "Qdef"), OP( "gcrg", BSIM4v7_GCRG, IF_REAL, "Gcrg"), OP( "gtau", BSIM4v7_GTAU, IF_REAL, "Gtau"), }; IFparm BSIM4v7mPTable[] = { /* model parameters */ IOP( "cvchargemod", BSIM4v7_MOD_CVCHARGEMOD, IF_INTEGER, "Capacitance Charge model selector"), IOP( "capmod", BSIM4v7_MOD_CAPMOD, IF_INTEGER, "Capacitance model selector"), IOP( "diomod", BSIM4v7_MOD_DIOMOD, IF_INTEGER, "Diode IV model selector"), IOP( "rdsmod", BSIM4v7_MOD_RDSMOD, IF_INTEGER, "Bias-dependent S/D resistance model selector"), IOP( "trnqsmod", BSIM4v7_MOD_TRNQSMOD, IF_INTEGER, "Transient NQS model selector"), IOP( "acnqsmod", BSIM4v7_MOD_ACNQSMOD, IF_INTEGER, "AC NQS model selector"), IOP( "mobmod", BSIM4v7_MOD_MOBMOD, IF_INTEGER, "Mobility model selector"), IOP( "rbodymod", BSIM4v7_MOD_RBODYMOD, IF_INTEGER, "Distributed body R model selector"), IOP( "rgatemod", BSIM4v7_MOD_RGATEMOD, IF_INTEGER, "Gate R model selector"), IOP( "permod", BSIM4v7_MOD_PERMOD, IF_INTEGER, "Pd and Ps model selector"), IOP( "geomod", BSIM4v7_MOD_GEOMOD, IF_INTEGER, "Geometry dependent parasitics model selector"), IOP( "rgeomod", BSIM4v7_MOD_RGEOMOD, IF_INTEGER, "S/D resistance and contact model selector"), IOP( "fnoimod", BSIM4v7_MOD_FNOIMOD, IF_INTEGER, "Flicker noise model selector"), IOP( "tnoimod", BSIM4v7_MOD_TNOIMOD, IF_INTEGER, "Thermal noise model selector"), IOP( "mtrlmod", BSIM4v7_MOD_MTRLMOD, IF_INTEGER, "parameter for non-silicon substrate or metal gate selector"), IOP( "mtrlcompatmod", BSIM4v7_MOD_MTRLCOMPATMOD, IF_INTEGER, "New Material Mod backward compatibility selector"), IOP( "igcmod", BSIM4v7_MOD_IGCMOD, IF_INTEGER, "Gate-to-channel Ig model selector"), IOP( "igbmod", BSIM4v7_MOD_IGBMOD, IF_INTEGER, "Gate-to-body Ig model selector"), IOP( "tempmod", BSIM4v7_MOD_TEMPMOD, IF_INTEGER, "Temperature model selector"), IOP( "gidlmod", BSIM4v7_MOD_GIDLMOD, IF_INTEGER, "parameter for GIDL selector"), /* v4.7 New GIDL/GISL */ IOP( "paramchk", BSIM4v7_MOD_PARAMCHK, IF_INTEGER, "Model parameter checking selector"), IOP( "binunit", BSIM4v7_MOD_BINUNIT, IF_INTEGER, "Bin unit selector"), IOP( "version", BSIM4v7_MOD_VERSION, IF_STRING, "parameter for model version"), IOP( "eot", BSIM4v7_MOD_EOT, IF_REAL, "Equivalent gate oxide thickness in meters"), IOP( "vddeot", BSIM4v7_MOD_VDDEOT, IF_REAL, "Voltage for extraction of Equivalent gate oxide thickness"), IOP( "tempeot", BSIM4v7_MOD_TEMPEOT, IF_REAL, " Temperature for extraction of EOT"), IOP( "leffeot", BSIM4v7_MOD_LEFFEOT, IF_REAL, " Effective length for extraction of EOT"), IOP( "weffeot", BSIM4v7_MOD_WEFFEOT, IF_REAL, "Effective width for extraction of EOT"), IOP( "ados", BSIM4v7_MOD_ADOS, IF_REAL, "Charge centroid parameter"), IOP( "bdos", BSIM4v7_MOD_BDOS, IF_REAL, "Charge centroid parameter"), IOP( "toxe", BSIM4v7_MOD_TOXE, IF_REAL, "Electrical gate oxide thickness in meters"), IOP( "toxp", BSIM4v7_MOD_TOXP, IF_REAL, "Physical gate oxide thickness in meters"), IOP( "toxm", BSIM4v7_MOD_TOXM, IF_REAL, "Gate oxide thickness at which parameters are extracted"), IOP( "toxref", BSIM4v7_MOD_TOXREF, IF_REAL, "Target tox value"), IOP( "dtox", BSIM4v7_MOD_DTOX, IF_REAL, "Defined as (toxe - toxp) "), IOP( "epsrox", BSIM4v7_MOD_EPSROX, IF_REAL, "Dielectric constant of the gate oxide relative to vacuum"), IOP( "cdsc", BSIM4v7_MOD_CDSC, IF_REAL, "Drain/Source and channel coupling capacitance"), IOP( "cdscb", BSIM4v7_MOD_CDSCB, IF_REAL, "Body-bias dependence of cdsc"), IOP( "cdscd", BSIM4v7_MOD_CDSCD, IF_REAL, "Drain-bias dependence of cdsc"), IOP( "cit", BSIM4v7_MOD_CIT, IF_REAL, "Interface state capacitance"), IOP( "nfactor", BSIM4v7_MOD_NFACTOR, IF_REAL, "Subthreshold swing Coefficient"), IOP( "xj", BSIM4v7_MOD_XJ, IF_REAL, "Junction depth in meters"), IOP( "vsat", BSIM4v7_MOD_VSAT, IF_REAL, "Saturation velocity at tnom"), IOP( "at", BSIM4v7_MOD_AT, IF_REAL, "Temperature coefficient of vsat"), IOP( "a0", BSIM4v7_MOD_A0, IF_REAL, "Non-uniform depletion width effect coefficient."), IOP( "ags", BSIM4v7_MOD_AGS, IF_REAL, "Gate bias coefficient of Abulk."), IOP( "a1", BSIM4v7_MOD_A1, IF_REAL, "Non-saturation effect coefficient"), IOP( "a2", BSIM4v7_MOD_A2, IF_REAL, "Non-saturation effect coefficient"), IOP( "keta", BSIM4v7_MOD_KETA, IF_REAL, "Body-bias coefficient of non-uniform depletion width effect."), IOP( "phig", BSIM4v7_MOD_PHIG, IF_REAL, "Work function of gate"), IOP( "epsrgate", BSIM4v7_MOD_EPSRGATE, IF_REAL, "Dielectric constant of gate relative to vacuum"), IOP( "easub",BSIM4v7_MOD_EASUB, IF_REAL, "Electron affinity of substrate"), IOP( "epsrsub", BSIM4v7_MOD_EPSRSUB, IF_REAL, "Dielectric constant of substrate relative to vacuum"), IOP( "ni0sub", BSIM4v7_MOD_NI0SUB, IF_REAL, "Intrinsic carrier concentration of substrate at 300.15K"), IOP( "bg0sub", BSIM4v7_MOD_BG0SUB, IF_REAL, "Band-gap of substrate at T=0K"), IOP( "tbgasub", BSIM4v7_MOD_TBGASUB, IF_REAL, "First parameter of band-gap change due to temperature"), IOP( "tbgbsub", BSIM4v7_MOD_TBGBSUB, IF_REAL, "Second parameter of band-gap change due to temperature"), IOP( "nsub", BSIM4v7_MOD_NSUB, IF_REAL, "Substrate doping concentration"), IOP( "ndep", BSIM4v7_MOD_NDEP, IF_REAL, "Channel doping concentration at the depletion edge"), IOP( "nsd", BSIM4v7_MOD_NSD, IF_REAL, "S/D doping concentration"), IOP( "phin", BSIM4v7_MOD_PHIN, IF_REAL, "Adjusting parameter for surface potential due to non-uniform vertical doping"), IOP( "ngate", BSIM4v7_MOD_NGATE, IF_REAL, "Poly-gate doping concentration"), IOP( "gamma1", BSIM4v7_MOD_GAMMA1, IF_REAL, "Vth body coefficient"), IOP( "gamma2", BSIM4v7_MOD_GAMMA2, IF_REAL, "Vth body coefficient"), IOP( "vbx", BSIM4v7_MOD_VBX, IF_REAL, "Vth transition body Voltage"), IOP( "vbm", BSIM4v7_MOD_VBM, IF_REAL, "Maximum body voltage"), IOP( "xt", BSIM4v7_MOD_XT, IF_REAL, "Doping depth"), IOP( "k1", BSIM4v7_MOD_K1, IF_REAL, "Bulk effect coefficient 1"), IOP( "kt1", BSIM4v7_MOD_KT1, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt1l", BSIM4v7_MOD_KT1L, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt2", BSIM4v7_MOD_KT2, IF_REAL, "Body-coefficient of kt1"), IOP( "k2", BSIM4v7_MOD_K2, IF_REAL, "Bulk effect coefficient 2"), IOP( "k3", BSIM4v7_MOD_K3, IF_REAL, "Narrow width effect coefficient"), IOP( "k3b", BSIM4v7_MOD_K3B, IF_REAL, "Body effect coefficient of k3"), IOP( "w0", BSIM4v7_MOD_W0, IF_REAL, "Narrow width effect parameter"), IOP( "dvtp0", BSIM4v7_MOD_DVTP0, IF_REAL, "First parameter for Vth shift due to pocket"), IOP( "dvtp1", BSIM4v7_MOD_DVTP1, IF_REAL, "Second parameter for Vth shift due to pocket"), IOP( "dvtp2", BSIM4v7_MOD_DVTP2, IF_REAL, "3rd parameter for Vth shift due to pocket"), IOP( "dvtp3", BSIM4v7_MOD_DVTP3, IF_REAL, "4th parameter for Vth shift due to pocket"), IOP( "dvtp4", BSIM4v7_MOD_DVTP4, IF_REAL, "5th parameter for Vth shift due to pocket"), IOP( "dvtp5", BSIM4v7_MOD_DVTP5, IF_REAL, "6th parameter for Vth shift due to pocket"), IOP( "lpe0", BSIM4v7_MOD_LPE0, IF_REAL, "Equivalent length of pocket region at zero bias"), IOP( "lpeb", BSIM4v7_MOD_LPEB, IF_REAL, "Equivalent length of pocket region accounting for body bias"), IOP( "dvt0", BSIM4v7_MOD_DVT0, IF_REAL, "Short channel effect coeff. 0"), IOP( "dvt1", BSIM4v7_MOD_DVT1, IF_REAL, "Short channel effect coeff. 1"), IOP( "dvt2", BSIM4v7_MOD_DVT2, IF_REAL, "Short channel effect coeff. 2"), IOP( "dvt0w", BSIM4v7_MOD_DVT0W, IF_REAL, "Narrow Width coeff. 0"), IOP( "dvt1w", BSIM4v7_MOD_DVT1W, IF_REAL, "Narrow Width effect coeff. 1"), IOP( "dvt2w", BSIM4v7_MOD_DVT2W, IF_REAL, "Narrow Width effect coeff. 2"), IOP( "drout", BSIM4v7_MOD_DROUT, IF_REAL, "DIBL coefficient of output resistance"), IOP( "dsub", BSIM4v7_MOD_DSUB, IF_REAL, "DIBL coefficient in the subthreshold region"), IOP( "vth0", BSIM4v7_MOD_VTH0, IF_REAL,"Threshold voltage"), IOPR("vtho", BSIM4v7_MOD_VTH0, IF_REAL,"Threshold voltage"), IOP( "ua", BSIM4v7_MOD_UA, IF_REAL, "Linear gate dependence of mobility"), IOP( "ua1", BSIM4v7_MOD_UA1, IF_REAL, "Temperature coefficient of ua"), IOP( "ub", BSIM4v7_MOD_UB, IF_REAL, "Quadratic gate dependence of mobility"), IOP( "ub1", BSIM4v7_MOD_UB1, IF_REAL, "Temperature coefficient of ub"), IOP( "uc", BSIM4v7_MOD_UC, IF_REAL, "Body-bias dependence of mobility"), IOP( "uc1", BSIM4v7_MOD_UC1, IF_REAL, "Temperature coefficient of uc"), IOP( "ud", BSIM4v7_MOD_UD, IF_REAL, "Coulomb scattering factor of mobility"), IOP( "ud1", BSIM4v7_MOD_UD1, IF_REAL, "Temperature coefficient of ud"), IOP( "up", BSIM4v7_MOD_UP, IF_REAL, "Channel length linear factor of mobility"), IOP( "lp", BSIM4v7_MOD_LP, IF_REAL, "Channel length exponential factor of mobility"), IOP( "u0", BSIM4v7_MOD_U0, IF_REAL, "Low-field mobility at Tnom"), IOP( "eu", BSIM4v7_MOD_EU, IF_REAL, "Mobility exponent"), IOP( "ucs", BSIM4v7_MOD_UCS, IF_REAL, "Colombic scattering exponent"), IOP( "ute", BSIM4v7_MOD_UTE, IF_REAL, "Temperature coefficient of mobility"), IOP( "ucste", BSIM4v7_MOD_UCSTE, IF_REAL,"Temperature coefficient of colombic mobility"), IOP( "voff", BSIM4v7_MOD_VOFF, IF_REAL, "Threshold voltage offset"), IOP( "minv", BSIM4v7_MOD_MINV, IF_REAL, "Fitting parameter for moderate inversion in Vgsteff"), IOP( "minvcv", BSIM4v7_MOD_MINVCV, IF_REAL, "Fitting parameter for moderate inversion in Vgsteffcv"), IOP( "voffl", BSIM4v7_MOD_VOFFL, IF_REAL, "Length dependence parameter for Vth offset"), IOP( "voffcvl", BSIM4v7_MOD_VOFFCVL, IF_REAL, "Length dependence parameter for Vth offset in CV"), IOP( "tnom", BSIM4v7_MOD_TNOM, IF_REAL, "Parameter measurement temperature"), IOP( "cgso", BSIM4v7_MOD_CGSO, IF_REAL, "Gate-source overlap capacitance per width"), IOP( "cgdo", BSIM4v7_MOD_CGDO, IF_REAL, "Gate-drain overlap capacitance per width"), IOP( "cgbo", BSIM4v7_MOD_CGBO, IF_REAL, "Gate-bulk overlap capacitance per length"), IOP( "xpart", BSIM4v7_MOD_XPART, IF_REAL, "Channel charge partitioning"), IOP( "delta", BSIM4v7_MOD_DELTA, IF_REAL, "Effective Vds parameter"), IOP( "rsh", BSIM4v7_MOD_RSH, IF_REAL, "Source-drain sheet resistance"), IOP( "rdsw", BSIM4v7_MOD_RDSW, IF_REAL, "Source-drain resistance per width"), IOP( "rdswmin", BSIM4v7_MOD_RDSWMIN, IF_REAL, "Source-drain resistance per width at high Vg"), IOP( "rsw", BSIM4v7_MOD_RSW, IF_REAL, "Source resistance per width"), IOP( "rdw", BSIM4v7_MOD_RDW, IF_REAL, "Drain resistance per width"), IOP( "rdwmin", BSIM4v7_MOD_RDWMIN, IF_REAL, "Drain resistance per width at high Vg"), IOP( "rswmin", BSIM4v7_MOD_RSWMIN, IF_REAL, "Source resistance per width at high Vg"), IOP( "prwg", BSIM4v7_MOD_PRWG, IF_REAL, "Gate-bias effect on parasitic resistance "), IOP( "prwb", BSIM4v7_MOD_PRWB, IF_REAL, "Body-effect on parasitic resistance "), IOP( "prt", BSIM4v7_MOD_PRT, IF_REAL, "Temperature coefficient of parasitic resistance "), IOP( "eta0", BSIM4v7_MOD_ETA0, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "etab", BSIM4v7_MOD_ETAB, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "pclm", BSIM4v7_MOD_PCLM, IF_REAL, "Channel length modulation Coefficient"), IOP( "pdiblc1", BSIM4v7_MOD_PDIBL1, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblc2", BSIM4v7_MOD_PDIBL2, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblcb", BSIM4v7_MOD_PDIBLB, IF_REAL, "Body-effect on drain-induced barrier lowering"), IOP( "fprout", BSIM4v7_MOD_FPROUT, IF_REAL, "Rout degradation coefficient for pocket devices"), IOP( "pdits", BSIM4v7_MOD_PDITS, IF_REAL, "Coefficient for drain-induced Vth shifts"), IOP( "pditsl", BSIM4v7_MOD_PDITSL, IF_REAL, "Length dependence of drain-induced Vth shifts"), IOP( "pditsd", BSIM4v7_MOD_PDITSD, IF_REAL, "Vds dependence of drain-induced Vth shifts"), IOP( "pscbe1", BSIM4v7_MOD_PSCBE1, IF_REAL, "Substrate current body-effect coefficient"), IOP( "pscbe2", BSIM4v7_MOD_PSCBE2, IF_REAL, "Substrate current body-effect coefficient"), IOP( "pvag", BSIM4v7_MOD_PVAG, IF_REAL, "Gate dependence of output resistance parameter"), IOP( "jss", BSIM4v7_MOD_JSS, IF_REAL, "Bottom source junction reverse saturation current density"), IOP( "jsws", BSIM4v7_MOD_JSWS, IF_REAL, "Isolation edge sidewall source junction reverse saturation current density"), IOP( "jswgs", BSIM4v7_MOD_JSWGS, IF_REAL, "Gate edge source junction reverse saturation current density"), IOP( "pbs", BSIM4v7_MOD_PBS, IF_REAL, "Source junction built-in potential"), IOP( "njs", BSIM4v7_MOD_NJS, IF_REAL, "Source junction emission coefficient"), IOP( "xtis", BSIM4v7_MOD_XTIS, IF_REAL, "Source junction current temperature exponent"), IOP( "mjs", BSIM4v7_MOD_MJS, IF_REAL, "Source bottom junction capacitance grading coefficient"), IOP( "pbsws", BSIM4v7_MOD_PBSWS, IF_REAL, "Source sidewall junction capacitance built in potential"), IOP( "mjsws", BSIM4v7_MOD_MJSWS, IF_REAL, "Source sidewall junction capacitance grading coefficient"), IOP( "pbswgs", BSIM4v7_MOD_PBSWGS, IF_REAL, "Source (gate side) sidewall junction capacitance built in potential"), IOP( "mjswgs", BSIM4v7_MOD_MJSWGS, IF_REAL, "Source (gate side) sidewall junction capacitance grading coefficient"), IOP( "cjs", BSIM4v7_MOD_CJS, IF_REAL, "Source bottom junction capacitance per unit area"), IOP( "cjsws", BSIM4v7_MOD_CJSWS, IF_REAL, "Source sidewall junction capacitance per unit periphery"), IOP( "cjswgs", BSIM4v7_MOD_CJSWGS, IF_REAL, "Source (gate side) sidewall junction capacitance per unit width"), IOP( "jsd", BSIM4v7_MOD_JSD, IF_REAL, "Bottom drain junction reverse saturation current density"), IOP( "jswd", BSIM4v7_MOD_JSWD, IF_REAL, "Isolation edge sidewall drain junction reverse saturation current density"), IOP( "jswgd", BSIM4v7_MOD_JSWGD, IF_REAL, "Gate edge drain junction reverse saturation current density"), IOP( "pbd", BSIM4v7_MOD_PBD, IF_REAL, "Drain junction built-in potential"), IOP( "njd", BSIM4v7_MOD_NJD, IF_REAL, "Drain junction emission coefficient"), IOP( "xtid", BSIM4v7_MOD_XTID, IF_REAL, "Drainjunction current temperature exponent"), IOP( "mjd", BSIM4v7_MOD_MJD, IF_REAL, "Drain bottom junction capacitance grading coefficient"), IOP( "pbswd", BSIM4v7_MOD_PBSWD, IF_REAL, "Drain sidewall junction capacitance built in potential"), IOP( "mjswd", BSIM4v7_MOD_MJSWD, IF_REAL, "Drain sidewall junction capacitance grading coefficient"), IOP( "pbswgd", BSIM4v7_MOD_PBSWGD, IF_REAL, "Drain (gate side) sidewall junction capacitance built in potential"), IOP( "mjswgd", BSIM4v7_MOD_MJSWGD, IF_REAL, "Drain (gate side) sidewall junction capacitance grading coefficient"), IOP( "cjd", BSIM4v7_MOD_CJD, IF_REAL, "Drain bottom junction capacitance per unit area"), IOP( "cjswd", BSIM4v7_MOD_CJSWD, IF_REAL, "Drain sidewall junction capacitance per unit periphery"), IOP( "cjswgd", BSIM4v7_MOD_CJSWGD, IF_REAL, "Drain (gate side) sidewall junction capacitance per unit width"), IOP( "vfbcv", BSIM4v7_MOD_VFBCV, IF_REAL, "Flat Band Voltage parameter for capmod=0 only"), IOP( "vfb", BSIM4v7_MOD_VFB, IF_REAL, "Flat Band Voltage"), IOP( "tpb", BSIM4v7_MOD_TPB, IF_REAL, "Temperature coefficient of pb"), IOP( "tcj", BSIM4v7_MOD_TCJ, IF_REAL, "Temperature coefficient of cj"), IOP( "tpbsw", BSIM4v7_MOD_TPBSW, IF_REAL, "Temperature coefficient of pbsw"), IOP( "tcjsw", BSIM4v7_MOD_TCJSW, IF_REAL, "Temperature coefficient of cjsw"), IOP( "tpbswg", BSIM4v7_MOD_TPBSWG, IF_REAL, "Temperature coefficient of pbswg"), IOP( "tcjswg", BSIM4v7_MOD_TCJSWG, IF_REAL, "Temperature coefficient of cjswg"), IOP( "acde", BSIM4v7_MOD_ACDE, IF_REAL, "Exponential coefficient for finite charge thickness"), IOP( "moin", BSIM4v7_MOD_MOIN, IF_REAL, "Coefficient for gate-bias dependent surface potential"), IOP( "noff", BSIM4v7_MOD_NOFF, IF_REAL, "C-V turn-on/off parameter"), IOP( "voffcv", BSIM4v7_MOD_VOFFCV, IF_REAL, "C-V lateral-shift parameter"), IOP( "dmcg", BSIM4v7_MOD_DMCG, IF_REAL, "Distance of Mid-Contact to Gate edge"), IOP( "dmci", BSIM4v7_MOD_DMCI, IF_REAL, "Distance of Mid-Contact to Isolation"), IOP( "dmdg", BSIM4v7_MOD_DMDG, IF_REAL, "Distance of Mid-Diffusion to Gate edge"), IOP( "dmcgt", BSIM4v7_MOD_DMCGT, IF_REAL, "Distance of Mid-Contact to Gate edge in Test structures"), IOP( "xgw", BSIM4v7_MOD_XGW, IF_REAL, "Distance from gate contact center to device edge"), IOP( "xgl", BSIM4v7_MOD_XGL, IF_REAL, "Variation in Ldrawn"), IOP( "rshg", BSIM4v7_MOD_RSHG, IF_REAL, "Gate sheet resistance"), IOP( "ngcon", BSIM4v7_MOD_NGCON, IF_REAL, "Number of gate contacts"), IOP( "xrcrg1", BSIM4v7_MOD_XRCRG1, IF_REAL, "First fitting parameter the bias-dependent Rg"), IOP( "xrcrg2", BSIM4v7_MOD_XRCRG2, IF_REAL, "Second fitting parameter the bias-dependent Rg"), IOP( "lambda", BSIM4v7_MOD_LAMBDA, IF_REAL, " Velocity overshoot parameter"), IOP( "vtl", BSIM4v7_MOD_VTL, IF_REAL, " thermal velocity"), IOP( "lc", BSIM4v7_MOD_LC, IF_REAL, " back scattering parameter"), IOP( "xn", BSIM4v7_MOD_XN, IF_REAL, " back scattering parameter"), IOP( "vfbsdoff", BSIM4v7_MOD_VFBSDOFF, IF_REAL, "S/D flatband voltage offset"), IOP( "tvfbsdoff", BSIM4v7_MOD_TVFBSDOFF, IF_REAL, "Temperature parameter for vfbsdoff"), IOP( "tvoff", BSIM4v7_MOD_TVOFF, IF_REAL, "Temperature parameter for voff"), IOP( "tnfactor", BSIM4v7_MOD_TNFACTOR, IF_REAL, "Temperature parameter for nfactor"), /* v4.7 Tanvir*/ IOP( "teta0", BSIM4v7_MOD_TETA0, IF_REAL, "Temperature parameter for eta0"), /* v4.7 Tanvir*/ IOP( "tvoffcv", BSIM4v7_MOD_TVOFFCV, IF_REAL, "Temperature parameter for tvoffcv"), /* v4.7 Tanvir*/ IOP( "lintnoi", BSIM4v7_MOD_LINTNOI, IF_REAL, "lint offset for noise calculation"), IOP( "lint", BSIM4v7_MOD_LINT, IF_REAL, "Length reduction parameter"), IOP( "ll", BSIM4v7_MOD_LL, IF_REAL, "Length reduction parameter"), IOP( "llc", BSIM4v7_MOD_LLC, IF_REAL, "Length reduction parameter for CV"), IOP( "lln", BSIM4v7_MOD_LLN, IF_REAL, "Length reduction parameter"), IOP( "lw", BSIM4v7_MOD_LW, IF_REAL, "Length reduction parameter"), IOP( "lwc", BSIM4v7_MOD_LWC, IF_REAL, "Length reduction parameter for CV"), IOP( "lwn", BSIM4v7_MOD_LWN, IF_REAL, "Length reduction parameter"), IOP( "lwl", BSIM4v7_MOD_LWL, IF_REAL, "Length reduction parameter"), IOP( "lwlc", BSIM4v7_MOD_LWLC, IF_REAL, "Length reduction parameter for CV"), IOP( "lmin", BSIM4v7_MOD_LMIN, IF_REAL, "Minimum length for the model"), IOP( "lmax", BSIM4v7_MOD_LMAX, IF_REAL, "Maximum length for the model"), IOP( "wr", BSIM4v7_MOD_WR, IF_REAL, "Width dependence of rds"), IOP( "wint", BSIM4v7_MOD_WINT, IF_REAL, "Width reduction parameter"), IOP( "dwg", BSIM4v7_MOD_DWG, IF_REAL, "Width reduction parameter"), IOP( "dwb", BSIM4v7_MOD_DWB, IF_REAL, "Width reduction parameter"), IOP( "wl", BSIM4v7_MOD_WL, IF_REAL, "Width reduction parameter"), IOP( "wlc", BSIM4v7_MOD_WLC, IF_REAL, "Width reduction parameter for CV"), IOP( "wln", BSIM4v7_MOD_WLN, IF_REAL, "Width reduction parameter"), IOP( "ww", BSIM4v7_MOD_WW, IF_REAL, "Width reduction parameter"), IOP( "wwc", BSIM4v7_MOD_WWC, IF_REAL, "Width reduction parameter for CV"), IOP( "wwn", BSIM4v7_MOD_WWN, IF_REAL, "Width reduction parameter"), IOP( "wwl", BSIM4v7_MOD_WWL, IF_REAL, "Width reduction parameter"), IOP( "wwlc", BSIM4v7_MOD_WWLC, IF_REAL, "Width reduction parameter for CV"), IOP( "wmin", BSIM4v7_MOD_WMIN, IF_REAL, "Minimum width for the model"), IOP( "wmax", BSIM4v7_MOD_WMAX, IF_REAL, "Maximum width for the model"), IOP( "b0", BSIM4v7_MOD_B0, IF_REAL, "Abulk narrow width parameter"), IOP( "b1", BSIM4v7_MOD_B1, IF_REAL, "Abulk narrow width parameter"), IOP( "cgsl", BSIM4v7_MOD_CGSL, IF_REAL, "New C-V model parameter"), IOP( "cgdl", BSIM4v7_MOD_CGDL, IF_REAL, "New C-V model parameter"), IOP( "ckappas", BSIM4v7_MOD_CKAPPAS, IF_REAL, "S/G overlap C-V parameter "), IOP( "ckappad", BSIM4v7_MOD_CKAPPAD, IF_REAL, "D/G overlap C-V parameter"), IOP( "cf", BSIM4v7_MOD_CF, IF_REAL, "Fringe capacitance parameter"), IOP( "clc", BSIM4v7_MOD_CLC, IF_REAL, "Vdsat parameter for C-V model"), IOP( "cle", BSIM4v7_MOD_CLE, IF_REAL, "Vdsat parameter for C-V model"), IOP( "dwc", BSIM4v7_MOD_DWC, IF_REAL, "Delta W for C-V model"), IOP( "dlc", BSIM4v7_MOD_DLC, IF_REAL, "Delta L for C-V model"), IOP( "xw", BSIM4v7_MOD_XW, IF_REAL, "W offset for channel width due to mask/etch effect"), IOP( "xl", BSIM4v7_MOD_XL, IF_REAL, "L offset for channel length due to mask/etch effect"), IOP( "dlcig", BSIM4v7_MOD_DLCIG, IF_REAL, "Delta L for Ig model"), IOP( "dlcigd", BSIM4v7_MOD_DLCIGD, IF_REAL, "Delta L for Ig model drain side"), IOP( "dwj", BSIM4v7_MOD_DWJ, IF_REAL, "Delta W for S/D junctions"), IOP( "alpha0", BSIM4v7_MOD_ALPHA0, IF_REAL, "substrate current model parameter"), IOP( "alpha1", BSIM4v7_MOD_ALPHA1, IF_REAL, "substrate current model parameter"), IOP( "beta0", BSIM4v7_MOD_BETA0, IF_REAL, "substrate current model parameter"), IOP( "agidl", BSIM4v7_MOD_AGIDL, IF_REAL, "Pre-exponential constant for GIDL"), IOP( "bgidl", BSIM4v7_MOD_BGIDL, IF_REAL, "Exponential constant for GIDL"), IOP( "cgidl", BSIM4v7_MOD_CGIDL, IF_REAL, "Parameter for body-bias dependence of GIDL"), IOP( "rgidl", BSIM4v7_MOD_RGIDL, IF_REAL, "GIDL vg parameter"), /* v4.7 New GIDL/GISL */ IOP( "kgidl", BSIM4v7_MOD_KGIDL, IF_REAL, "GIDL vb parameter"), /* v4.7 New GIDL/GISL */ IOP( "fgidl", BSIM4v7_MOD_FGIDL, IF_REAL, "GIDL vb parameter"), /* v4.7 New GIDL/GISL */ IOP( "egidl", BSIM4v7_MOD_EGIDL, IF_REAL, "Fitting parameter for Bandbending"), IOP( "agisl", BSIM4v7_MOD_AGISL, IF_REAL, "Pre-exponential constant for GISL"), IOP( "bgisl", BSIM4v7_MOD_BGISL, IF_REAL, "Exponential constant for GISL"), IOP( "cgisl", BSIM4v7_MOD_CGISL, IF_REAL, "Parameter for body-bias dependence of GISL"), IOP( "rgisl", BSIM4v7_MOD_RGISL, IF_REAL, "GISL vg parameter"), /* v4.7 New GIDL/GISL */ IOP( "kgisl", BSIM4v7_MOD_KGISL, IF_REAL, "GISL vb parameter"), /* v4.7 New GIDL/GISL */ IOP( "fgisl", BSIM4v7_MOD_FGISL, IF_REAL, "GISL vb parameter"), /* v4.7 New GIDL/GISL */ IOP( "egisl", BSIM4v7_MOD_EGISL, IF_REAL, "Fitting parameter for Bandbending"), IOP( "aigc", BSIM4v7_MOD_AIGC, IF_REAL, "Parameter for Igc"), IOP( "bigc", BSIM4v7_MOD_BIGC, IF_REAL, "Parameter for Igc"), IOP( "cigc", BSIM4v7_MOD_CIGC, IF_REAL, "Parameter for Igc"), IOP( "aigsd", BSIM4v7_MOD_AIGSD, IF_REAL, "Parameter for Igs,d"), IOP( "bigsd", BSIM4v7_MOD_BIGSD, IF_REAL, "Parameter for Igs,d"), IOP( "cigsd", BSIM4v7_MOD_CIGSD, IF_REAL, "Parameter for Igs,d"), IOP( "aigs", BSIM4v7_MOD_AIGS, IF_REAL, "Parameter for Igs"), IOP( "bigs", BSIM4v7_MOD_BIGS, IF_REAL, "Parameter for Igs"), IOP( "cigs", BSIM4v7_MOD_CIGS, IF_REAL, "Parameter for Igs"), IOP( "aigd", BSIM4v7_MOD_AIGD, IF_REAL, "Parameter for Igd"), IOP( "bigd", BSIM4v7_MOD_BIGD, IF_REAL, "Parameter for Igd"), IOP( "cigd", BSIM4v7_MOD_CIGD, IF_REAL, "Parameter for Igd"), IOP( "aigbacc", BSIM4v7_MOD_AIGBACC, IF_REAL, "Parameter for Igb"), IOP( "bigbacc", BSIM4v7_MOD_BIGBACC, IF_REAL, "Parameter for Igb"), IOP( "cigbacc", BSIM4v7_MOD_CIGBACC, IF_REAL, "Parameter for Igb"), IOP( "aigbinv", BSIM4v7_MOD_AIGBINV, IF_REAL, "Parameter for Igb"), IOP( "bigbinv", BSIM4v7_MOD_BIGBINV, IF_REAL, "Parameter for Igb"), IOP( "cigbinv", BSIM4v7_MOD_CIGBINV, IF_REAL, "Parameter for Igb"), IOP( "nigc", BSIM4v7_MOD_NIGC, IF_REAL, "Parameter for Igc slope"), IOP( "nigbinv", BSIM4v7_MOD_NIGBINV, IF_REAL, "Parameter for Igbinv slope"), IOP( "nigbacc", BSIM4v7_MOD_NIGBACC, IF_REAL, "Parameter for Igbacc slope"), IOP( "ntox", BSIM4v7_MOD_NTOX, IF_REAL, "Exponent for Tox ratio"), IOP( "eigbinv", BSIM4v7_MOD_EIGBINV, IF_REAL, "Parameter for the Si bandgap for Igbinv"), IOP( "pigcd", BSIM4v7_MOD_PIGCD, IF_REAL, "Parameter for Igc partition"), IOP( "poxedge", BSIM4v7_MOD_POXEDGE, IF_REAL, "Factor for the gate edge Tox"), IOP( "ijthdfwd", BSIM4v7_MOD_IJTHDFWD, IF_REAL, "Forward drain diode forward limiting current"), IOP( "ijthsfwd", BSIM4v7_MOD_IJTHSFWD, IF_REAL, "Forward source diode forward limiting current"), IOP( "ijthdrev", BSIM4v7_MOD_IJTHDREV, IF_REAL, "Reverse drain diode forward limiting current"), IOP( "ijthsrev", BSIM4v7_MOD_IJTHSREV, IF_REAL, "Reverse source diode forward limiting current"), IOP( "xjbvd", BSIM4v7_MOD_XJBVD, IF_REAL, "Fitting parameter for drain diode breakdown current"), IOP( "xjbvs", BSIM4v7_MOD_XJBVS, IF_REAL, "Fitting parameter for source diode breakdown current"), IOP( "bvd", BSIM4v7_MOD_BVD, IF_REAL, "Drain diode breakdown voltage"), IOP( "bvs", BSIM4v7_MOD_BVS, IF_REAL, "Source diode breakdown voltage"), IOP( "jtss", BSIM4v7_MOD_JTSS, IF_REAL, "Source bottom trap-assisted saturation current density"), IOP( "jtsd", BSIM4v7_MOD_JTSD, IF_REAL, "Drain bottom trap-assisted saturation current density"), IOP( "jtssws", BSIM4v7_MOD_JTSSWS, IF_REAL, "Source STI sidewall trap-assisted saturation current density"), IOP( "jtsswd", BSIM4v7_MOD_JTSSWD, IF_REAL, "Drain STI sidewall trap-assisted saturation current density"), IOP( "jtsswgs", BSIM4v7_MOD_JTSSWGS, IF_REAL, "Source gate-edge sidewall trap-assisted saturation current density"), IOP( "jtsswgd", BSIM4v7_MOD_JTSSWGD, IF_REAL, "Drain gate-edge sidewall trap-assisted saturation current density"), IOP( "jtweff", BSIM4v7_MOD_JTWEFF, IF_REAL, "TAT current width dependence"), IOP( "njts", BSIM4v7_MOD_NJTS, IF_REAL, "Non-ideality factor for bottom junction"), IOP( "njtssw", BSIM4v7_MOD_NJTSSW, IF_REAL, "Non-ideality factor for STI sidewall junction"), IOP( "njtsswg", BSIM4v7_MOD_NJTSSWG, IF_REAL, "Non-ideality factor for gate-edge sidewall junction"), IOP( "njtsd", BSIM4v7_MOD_NJTSD, IF_REAL, "Non-ideality factor for bottom junction drain side"), IOP( "njtsswd", BSIM4v7_MOD_NJTSSWD, IF_REAL, "Non-ideality factor for STI sidewall junction drain side"), IOP( "njtsswgd", BSIM4v7_MOD_NJTSSWGD, IF_REAL, "Non-ideality factor for gate-edge sidewall junction drain side"), IOP( "xtss", BSIM4v7_MOD_XTSS, IF_REAL, "Power dependence of JTSS on temperature"), IOP( "xtsd", BSIM4v7_MOD_XTSD, IF_REAL, "Power dependence of JTSD on temperature"), IOP( "xtssws", BSIM4v7_MOD_XTSSWS, IF_REAL, "Power dependence of JTSSWS on temperature"), IOP( "xtsswd", BSIM4v7_MOD_XTSSWD, IF_REAL, "Power dependence of JTSSWD on temperature"), IOP( "xtsswgs", BSIM4v7_MOD_XTSSWGS, IF_REAL, "Power dependence of JTSSWGS on temperature"), IOP( "xtsswgd", BSIM4v7_MOD_XTSSWGD, IF_REAL, "Power dependence of JTSSWGD on temperature"), IOP( "tnjts", BSIM4v7_MOD_TNJTS, IF_REAL, "Temperature coefficient for NJTS"), IOP( "tnjtssw", BSIM4v7_MOD_TNJTSSW, IF_REAL, "Temperature coefficient for NJTSSW"), IOP( "tnjtsswg", BSIM4v7_MOD_TNJTSSWG, IF_REAL, "Temperature coefficient for NJTSSWG"), IOP( "tnjtsd", BSIM4v7_MOD_TNJTSD, IF_REAL, "Temperature coefficient for NJTSD"), IOP( "tnjtsswd", BSIM4v7_MOD_TNJTSSWD, IF_REAL, "Temperature coefficient for NJTSSWD"), IOP( "tnjtsswgd", BSIM4v7_MOD_TNJTSSWGD, IF_REAL, "Temperature coefficient for NJTSSWGD"), IOP( "vtss", BSIM4v7_MOD_VTSS, IF_REAL, "Source bottom trap-assisted voltage dependent parameter"), IOP( "vtsd", BSIM4v7_MOD_VTSD, IF_REAL, "Drain bottom trap-assisted voltage dependent parameter"), IOP( "vtssws", BSIM4v7_MOD_VTSSWS, IF_REAL, "Source STI sidewall trap-assisted voltage dependent parameter"), IOP( "vtsswd", BSIM4v7_MOD_VTSSWD, IF_REAL, "Drain STI sidewall trap-assisted voltage dependent parameter"), IOP( "vtsswgs", BSIM4v7_MOD_VTSSWGS, IF_REAL, "Source gate-edge sidewall trap-assisted voltage dependent parameter"), IOP( "vtsswgd", BSIM4v7_MOD_VTSSWGD, IF_REAL, "Drain gate-edge sidewall trap-assisted voltage dependent parameter"), IOP( "gbmin", BSIM4v7_MOD_GBMIN, IF_REAL, "Minimum body conductance"), IOP( "rbdb", BSIM4v7_MOD_RBDB, IF_REAL, "Resistance between bNode and dbNode"), IOP( "rbpb", BSIM4v7_MOD_RBPB, IF_REAL, "Resistance between bNodePrime and bNode"), IOP( "rbsb", BSIM4v7_MOD_RBSB, IF_REAL, "Resistance between bNode and sbNode"), IOP( "rbps", BSIM4v7_MOD_RBPS, IF_REAL, "Resistance between bNodePrime and sbNode"), IOP( "rbpd", BSIM4v7_MOD_RBPD, IF_REAL, "Resistance between bNodePrime and bNode"), IOP( "rbps0", BSIM4v7_MOD_RBPS0, IF_REAL , "Body resistance RBPS scaling"), IOP( "rbpsl", BSIM4v7_MOD_RBPSL, IF_REAL , "Body resistance RBPS L scaling"), IOP( "rbpsw", BSIM4v7_MOD_RBPSW, IF_REAL , "Body resistance RBPS W scaling"), IOP( "rbpsnf", BSIM4v7_MOD_RBPSNF, IF_REAL , "Body resistance RBPS NF scaling"), IOP( "rbpd0", BSIM4v7_MOD_RBPD0, IF_REAL , "Body resistance RBPD scaling"), IOP( "rbpdl", BSIM4v7_MOD_RBPDL, IF_REAL , "Body resistance RBPD L scaling"), IOP( "rbpdw", BSIM4v7_MOD_RBPDW, IF_REAL , "Body resistance RBPD W scaling"), IOP( "rbpdnf", BSIM4v7_MOD_RBPDNF, IF_REAL , "Body resistance RBPD NF scaling"), IOP( "rbpbx0", BSIM4v7_MOD_RBPBX0, IF_REAL , "Body resistance RBPBX scaling"), IOP( "rbpbxl", BSIM4v7_MOD_RBPBXL, IF_REAL , "Body resistance RBPBX L scaling"), IOP( "rbpbxw", BSIM4v7_MOD_RBPBXW, IF_REAL , "Body resistance RBPBX W scaling"), IOP( "rbpbxnf", BSIM4v7_MOD_RBPBXNF, IF_REAL , "Body resistance RBPBX NF scaling"), IOP( "rbpby0", BSIM4v7_MOD_RBPBY0, IF_REAL , "Body resistance RBPBY scaling"), IOP( "rbpbyl", BSIM4v7_MOD_RBPBYL, IF_REAL , "Body resistance RBPBY L scaling"), IOP( "rbpbyw", BSIM4v7_MOD_RBPBYW, IF_REAL , "Body resistance RBPBY W scaling"), IOP( "rbpbynf", BSIM4v7_MOD_RBPBYNF, IF_REAL , "Body resistance RBPBY NF scaling"), IOP( "rbsbx0", BSIM4v7_MOD_RBSBX0, IF_REAL , "Body resistance RBSBX scaling"), IOP( "rbsby0", BSIM4v7_MOD_RBSBY0, IF_REAL , "Body resistance RBSBY scaling"), IOP( "rbdbx0", BSIM4v7_MOD_RBDBX0, IF_REAL , "Body resistance RBDBX scaling"), IOP( "rbdby0", BSIM4v7_MOD_RBDBY0, IF_REAL , "Body resistance RBDBY scaling"), IOP( "rbsdbxl", BSIM4v7_MOD_RBSDBXL, IF_REAL , "Body resistance RBSDBX L scaling"), IOP( "rbsdbxw", BSIM4v7_MOD_RBSDBXW, IF_REAL , "Body resistance RBSDBX W scaling"), IOP( "rbsdbxnf", BSIM4v7_MOD_RBSDBXNF, IF_REAL , "Body resistance RBSDBX NF scaling"), IOP( "rbsdbyl", BSIM4v7_MOD_RBSDBYL, IF_REAL , "Body resistance RBSDBY L scaling"), IOP( "rbsdbyw", BSIM4v7_MOD_RBSDBYW, IF_REAL , "Body resistance RBSDBY W scaling"), IOP( "rbsdbynf", BSIM4v7_MOD_RBSDBYNF, IF_REAL , "Body resistance RBSDBY NF scaling"), IOP( "lcdsc", BSIM4v7_MOD_LCDSC, IF_REAL, "Length dependence of cdsc"), IOP( "lcdscb", BSIM4v7_MOD_LCDSCB, IF_REAL, "Length dependence of cdscb"), IOP( "lcdscd", BSIM4v7_MOD_LCDSCD, IF_REAL, "Length dependence of cdscd"), IOP( "lcit", BSIM4v7_MOD_LCIT, IF_REAL, "Length dependence of cit"), IOP( "lnfactor", BSIM4v7_MOD_LNFACTOR, IF_REAL, "Length dependence of nfactor"), IOP( "lxj", BSIM4v7_MOD_LXJ, IF_REAL, "Length dependence of xj"), IOP( "lvsat", BSIM4v7_MOD_LVSAT, IF_REAL, "Length dependence of vsat"), IOP( "lat", BSIM4v7_MOD_LAT, IF_REAL, "Length dependence of at"), IOP( "la0", BSIM4v7_MOD_LA0, IF_REAL, "Length dependence of a0"), IOP( "lags", BSIM4v7_MOD_LAGS, IF_REAL, "Length dependence of ags"), IOP( "la1", BSIM4v7_MOD_LA1, IF_REAL, "Length dependence of a1"), IOP( "la2", BSIM4v7_MOD_LA2, IF_REAL, "Length dependence of a2"), IOP( "lketa", BSIM4v7_MOD_LKETA, IF_REAL, "Length dependence of keta"), IOP( "lnsub", BSIM4v7_MOD_LNSUB, IF_REAL, "Length dependence of nsub"), IOP( "lndep", BSIM4v7_MOD_LNDEP, IF_REAL, "Length dependence of ndep"), IOP( "lnsd", BSIM4v7_MOD_LNSD, IF_REAL, "Length dependence of nsd"), IOP( "lphin", BSIM4v7_MOD_LPHIN, IF_REAL, "Length dependence of phin"), IOP( "lngate", BSIM4v7_MOD_LNGATE, IF_REAL, "Length dependence of ngate"), IOP( "lgamma1", BSIM4v7_MOD_LGAMMA1, IF_REAL, "Length dependence of gamma1"), IOP( "lgamma2", BSIM4v7_MOD_LGAMMA2, IF_REAL, "Length dependence of gamma2"), IOP( "lvbx", BSIM4v7_MOD_LVBX, IF_REAL, "Length dependence of vbx"), IOP( "lvbm", BSIM4v7_MOD_LVBM, IF_REAL, "Length dependence of vbm"), IOP( "lxt", BSIM4v7_MOD_LXT, IF_REAL, "Length dependence of xt"), IOP( "lk1", BSIM4v7_MOD_LK1, IF_REAL, "Length dependence of k1"), IOP( "lkt1", BSIM4v7_MOD_LKT1, IF_REAL, "Length dependence of kt1"), IOP( "lkt1l", BSIM4v7_MOD_LKT1L, IF_REAL, "Length dependence of kt1l"), IOP( "lkt2", BSIM4v7_MOD_LKT2, IF_REAL, "Length dependence of kt2"), IOP( "lk2", BSIM4v7_MOD_LK2, IF_REAL, "Length dependence of k2"), IOP( "lk3", BSIM4v7_MOD_LK3, IF_REAL, "Length dependence of k3"), IOP( "lk3b", BSIM4v7_MOD_LK3B, IF_REAL, "Length dependence of k3b"), IOP( "lw0", BSIM4v7_MOD_LW0, IF_REAL, "Length dependence of w0"), IOP( "ldvtp0", BSIM4v7_MOD_LDVTP0, IF_REAL, "Length dependence of dvtp0"), IOP( "ldvtp1", BSIM4v7_MOD_LDVTP1, IF_REAL, "Length dependence of dvtp1"), IOP( "ldvtp2", BSIM4v7_MOD_LDVTP2, IF_REAL, "Length dependence of dvtp2"), IOP( "ldvtp3", BSIM4v7_MOD_LDVTP3, IF_REAL, "Length dependence of dvtp3"), IOP( "ldvtp4", BSIM4v7_MOD_LDVTP4, IF_REAL, "Length dependence of dvtp4"), IOP( "ldvtp5", BSIM4v7_MOD_LDVTP5, IF_REAL, "Length dependence of dvtp5"), IOP( "llpe0", BSIM4v7_MOD_LLPE0, IF_REAL, "Length dependence of lpe0"), IOP( "llpeb", BSIM4v7_MOD_LLPEB, IF_REAL, "Length dependence of lpeb"), IOP( "ldvt0", BSIM4v7_MOD_LDVT0, IF_REAL, "Length dependence of dvt0"), IOP( "ldvt1", BSIM4v7_MOD_LDVT1, IF_REAL, "Length dependence of dvt1"), IOP( "ldvt2", BSIM4v7_MOD_LDVT2, IF_REAL, "Length dependence of dvt2"), IOP( "ldvt0w", BSIM4v7_MOD_LDVT0W, IF_REAL, "Length dependence of dvt0w"), IOP( "ldvt1w", BSIM4v7_MOD_LDVT1W, IF_REAL, "Length dependence of dvt1w"), IOP( "ldvt2w", BSIM4v7_MOD_LDVT2W, IF_REAL, "Length dependence of dvt2w"), IOP( "ldrout", BSIM4v7_MOD_LDROUT, IF_REAL, "Length dependence of drout"), IOP( "ldsub", BSIM4v7_MOD_LDSUB, IF_REAL, "Length dependence of dsub"), IOP( "lvth0", BSIM4v7_MOD_LVTH0, IF_REAL,"Length dependence of vth0"), IOPR("lvtho", BSIM4v7_MOD_LVTH0, IF_REAL,"Length dependence of vtho"), IOP( "lua", BSIM4v7_MOD_LUA, IF_REAL, "Length dependence of ua"), IOP( "lua1", BSIM4v7_MOD_LUA1, IF_REAL, "Length dependence of ua1"), IOP( "lub", BSIM4v7_MOD_LUB, IF_REAL, "Length dependence of ub"), IOP( "lub1", BSIM4v7_MOD_LUB1, IF_REAL, "Length dependence of ub1"), IOP( "luc", BSIM4v7_MOD_LUC, IF_REAL, "Length dependence of uc"), IOP( "luc1", BSIM4v7_MOD_LUC1, IF_REAL, "Length dependence of uc1"), IOP( "lud", BSIM4v7_MOD_LUD, IF_REAL, "Length dependence of ud"), IOP( "lud1", BSIM4v7_MOD_LUD1, IF_REAL, "Length dependence of ud1"), IOP( "lup", BSIM4v7_MOD_LUP, IF_REAL, "Length dependence of up"), IOP( "llp", BSIM4v7_MOD_LLP, IF_REAL, "Length dependence of lp"), IOP( "lu0", BSIM4v7_MOD_LU0, IF_REAL, "Length dependence of u0"), IOP( "lute", BSIM4v7_MOD_LUTE, IF_REAL, "Length dependence of ute"), IOP( "lucste", BSIM4v7_MOD_LUCSTE, IF_REAL, "Length dependence of ucste"), IOP( "lvoff", BSIM4v7_MOD_LVOFF, IF_REAL, "Length dependence of voff"), IOP( "lminv", BSIM4v7_MOD_LMINV, IF_REAL, "Length dependence of minv"), IOP( "lminvcv", BSIM4v7_MOD_LMINVCV, IF_REAL, "Length dependence of minvcv"), IOP( "ldelta", BSIM4v7_MOD_LDELTA, IF_REAL, "Length dependence of delta"), IOP( "lrdsw", BSIM4v7_MOD_LRDSW, IF_REAL, "Length dependence of rdsw "), IOP( "lrsw", BSIM4v7_MOD_LRSW, IF_REAL, "Length dependence of rsw"), IOP( "lrdw", BSIM4v7_MOD_LRDW, IF_REAL, "Length dependence of rdw"), IOP( "lprwg", BSIM4v7_MOD_LPRWG, IF_REAL, "Length dependence of prwg "), IOP( "lprwb", BSIM4v7_MOD_LPRWB, IF_REAL, "Length dependence of prwb "), IOP( "lprt", BSIM4v7_MOD_LPRT, IF_REAL, "Length dependence of prt "), IOP( "leta0", BSIM4v7_MOD_LETA0, IF_REAL, "Length dependence of eta0"), IOP( "letab", BSIM4v7_MOD_LETAB, IF_REAL, "Length dependence of etab"), IOP( "lpclm", BSIM4v7_MOD_LPCLM, IF_REAL, "Length dependence of pclm"), IOP( "lpdiblc1", BSIM4v7_MOD_LPDIBL1, IF_REAL, "Length dependence of pdiblc1"), IOP( "lpdiblc2", BSIM4v7_MOD_LPDIBL2, IF_REAL, "Length dependence of pdiblc2"), IOP( "lpdiblcb", BSIM4v7_MOD_LPDIBLB, IF_REAL, "Length dependence of pdiblcb"), IOP( "lfprout", BSIM4v7_MOD_LFPROUT, IF_REAL, "Length dependence of pdiblcb"), IOP( "lpdits", BSIM4v7_MOD_LPDITS, IF_REAL, "Length dependence of pdits"), IOP( "lpditsd", BSIM4v7_MOD_LPDITSD, IF_REAL, "Length dependence of pditsd"), IOP( "lpscbe1", BSIM4v7_MOD_LPSCBE1, IF_REAL, "Length dependence of pscbe1"), IOP( "lpscbe2", BSIM4v7_MOD_LPSCBE2, IF_REAL, "Length dependence of pscbe2"), IOP( "lpvag", BSIM4v7_MOD_LPVAG, IF_REAL, "Length dependence of pvag"), IOP( "lwr", BSIM4v7_MOD_LWR, IF_REAL, "Length dependence of wr"), IOP( "ldwg", BSIM4v7_MOD_LDWG, IF_REAL, "Length dependence of dwg"), IOP( "ldwb", BSIM4v7_MOD_LDWB, IF_REAL, "Length dependence of dwb"), IOP( "lb0", BSIM4v7_MOD_LB0, IF_REAL, "Length dependence of b0"), IOP( "lb1", BSIM4v7_MOD_LB1, IF_REAL, "Length dependence of b1"), IOP( "lcgsl", BSIM4v7_MOD_LCGSL, IF_REAL, "Length dependence of cgsl"), IOP( "lcgdl", BSIM4v7_MOD_LCGDL, IF_REAL, "Length dependence of cgdl"), IOP( "lckappas", BSIM4v7_MOD_LCKAPPAS, IF_REAL, "Length dependence of ckappas"), IOP( "lckappad", BSIM4v7_MOD_LCKAPPAD, IF_REAL, "Length dependence of ckappad"), IOP( "lcf", BSIM4v7_MOD_LCF, IF_REAL, "Length dependence of cf"), IOP( "lclc", BSIM4v7_MOD_LCLC, IF_REAL, "Length dependence of clc"), IOP( "lcle", BSIM4v7_MOD_LCLE, IF_REAL, "Length dependence of cle"), IOP( "lalpha0", BSIM4v7_MOD_LALPHA0, IF_REAL, "Length dependence of alpha0"), IOP( "lalpha1", BSIM4v7_MOD_LALPHA1, IF_REAL, "Length dependence of alpha1"), IOP( "lbeta0", BSIM4v7_MOD_LBETA0, IF_REAL, "Length dependence of beta0"), IOP( "lagidl", BSIM4v7_MOD_LAGIDL, IF_REAL, "Length dependence of agidl"), IOP( "lbgidl", BSIM4v7_MOD_LBGIDL, IF_REAL, "Length dependence of bgidl"), IOP( "lcgidl", BSIM4v7_MOD_LCGIDL, IF_REAL, "Length dependence of cgidl"), IOP( "lrgidl", BSIM4v7_MOD_LRGIDL, IF_REAL, "Length dependence of rgidl"), /* v4.7 New GIDL/GISL */ IOP( "lkgidl", BSIM4v7_MOD_LKGIDL, IF_REAL, "Length dependence of kgidl"), /* v4.7 New GIDL/GISL */ IOP( "lfgidl", BSIM4v7_MOD_LFGIDL, IF_REAL, "Length dependence of fgidl"), /* v4.7 New GIDL/GISL */ IOP( "legidl", BSIM4v7_MOD_LEGIDL, IF_REAL, "Length dependence of egidl"), IOP( "lagisl", BSIM4v7_MOD_LAGISL, IF_REAL, "Length dependence of agisl"), IOP( "lbgisl", BSIM4v7_MOD_LBGISL, IF_REAL, "Length dependence of bgisl"), IOP( "lcgisl", BSIM4v7_MOD_LCGISL, IF_REAL, "Length dependence of cgisl"), IOP( "lrgisl", BSIM4v7_MOD_LRGISL, IF_REAL, "Length dependence of rgisl"), /* v4.7 New GIDL/GISL */ IOP( "lkgisl", BSIM4v7_MOD_LKGISL, IF_REAL, "Length dependence of kgisl"), /* v4.7 New GIDL/GISL */ IOP( "lfgisl", BSIM4v7_MOD_LFGISL, IF_REAL, "Length dependence of fgisl"), /* v4.7 New GIDL/GISL */ IOP( "legisl", BSIM4v7_MOD_LEGISL, IF_REAL, "Length dependence of egisl"), IOP( "laigc", BSIM4v7_MOD_LAIGC, IF_REAL, "Length dependence of aigc"), IOP( "lbigc", BSIM4v7_MOD_LBIGC, IF_REAL, "Length dependence of bigc"), IOP( "lcigc", BSIM4v7_MOD_LCIGC, IF_REAL, "Length dependence of cigc"), IOP( "laigsd", BSIM4v7_MOD_LAIGSD, IF_REAL, "Length dependence of aigsd"), IOP( "lbigsd", BSIM4v7_MOD_LBIGSD, IF_REAL, "Length dependence of bigsd"), IOP( "lcigsd", BSIM4v7_MOD_LCIGSD, IF_REAL, "Length dependence of cigsd"), IOP( "laigs", BSIM4v7_MOD_LAIGS, IF_REAL, "Length dependence of aigs"), IOP( "lbigs", BSIM4v7_MOD_LBIGS, IF_REAL, "Length dependence of bigs"), IOP( "lcigs", BSIM4v7_MOD_LCIGS, IF_REAL, "Length dependence of cigs"), IOP( "laigd", BSIM4v7_MOD_LAIGD, IF_REAL, "Length dependence of aigd"), IOP( "lbigd", BSIM4v7_MOD_LBIGD, IF_REAL, "Length dependence of bigd"), IOP( "lcigd", BSIM4v7_MOD_LCIGD, IF_REAL, "Length dependence of cigd"), IOP( "laigbacc", BSIM4v7_MOD_LAIGBACC, IF_REAL, "Length dependence of aigbacc"), IOP( "lbigbacc", BSIM4v7_MOD_LBIGBACC, IF_REAL, "Length dependence of bigbacc"), IOP( "lcigbacc", BSIM4v7_MOD_LCIGBACC, IF_REAL, "Length dependence of cigbacc"), IOP( "laigbinv", BSIM4v7_MOD_LAIGBINV, IF_REAL, "Length dependence of aigbinv"), IOP( "lbigbinv", BSIM4v7_MOD_LBIGBINV, IF_REAL, "Length dependence of bigbinv"), IOP( "lcigbinv", BSIM4v7_MOD_LCIGBINV, IF_REAL, "Length dependence of cigbinv"), IOP( "lnigc", BSIM4v7_MOD_LNIGC, IF_REAL, "Length dependence of nigc"), IOP( "lnigbinv", BSIM4v7_MOD_LNIGBINV, IF_REAL, "Length dependence of nigbinv"), IOP( "lnigbacc", BSIM4v7_MOD_LNIGBACC, IF_REAL, "Length dependence of nigbacc"), IOP( "lntox", BSIM4v7_MOD_LNTOX, IF_REAL, "Length dependence of ntox"), IOP( "leigbinv", BSIM4v7_MOD_LEIGBINV, IF_REAL, "Length dependence for eigbinv"), IOP( "lpigcd", BSIM4v7_MOD_LPIGCD, IF_REAL, "Length dependence for pigcd"), IOP( "lpoxedge", BSIM4v7_MOD_LPOXEDGE, IF_REAL, "Length dependence for poxedge"), IOP( "lvfbcv", BSIM4v7_MOD_LVFBCV, IF_REAL, "Length dependence of vfbcv"), IOP( "lvfb", BSIM4v7_MOD_LVFB, IF_REAL, "Length dependence of vfb"), IOP( "lacde", BSIM4v7_MOD_LACDE, IF_REAL, "Length dependence of acde"), IOP( "lmoin", BSIM4v7_MOD_LMOIN, IF_REAL, "Length dependence of moin"), IOP( "lnoff", BSIM4v7_MOD_LNOFF, IF_REAL, "Length dependence of noff"), IOP( "lvoffcv", BSIM4v7_MOD_LVOFFCV, IF_REAL, "Length dependence of voffcv"), IOP( "lxrcrg1", BSIM4v7_MOD_LXRCRG1, IF_REAL, "Length dependence of xrcrg1"), IOP( "lxrcrg2", BSIM4v7_MOD_LXRCRG2, IF_REAL, "Length dependence of xrcrg2"), IOP( "llambda", BSIM4v7_MOD_LLAMBDA, IF_REAL, "Length dependence of lambda"), IOP( "lvtl", BSIM4v7_MOD_LVTL, IF_REAL, " Length dependence of vtl"), IOP( "lxn", BSIM4v7_MOD_LXN, IF_REAL, " Length dependence of xn"), IOP( "leu", BSIM4v7_MOD_LEU, IF_REAL, " Length dependence of eu"), IOP( "lucs", BSIM4v7_MOD_LUCS, IF_REAL, "Length dependence of lucs"), IOP( "lvfbsdoff", BSIM4v7_MOD_LVFBSDOFF, IF_REAL, "Length dependence of vfbsdoff"), IOP( "ltvfbsdoff", BSIM4v7_MOD_LTVFBSDOFF, IF_REAL, "Length dependence of tvfbsdoff"), IOP( "ltvoff", BSIM4v7_MOD_LTVOFF, IF_REAL, "Length dependence of tvoff"), IOP( "ltnfactor", BSIM4v7_MOD_LTNFACTOR, IF_REAL, "Length dependence of tnfactor"), /* v4.7 Tanvir*/ IOP( "lteta0", BSIM4v7_MOD_LTETA0, IF_REAL, "Length dependence of teta0"), /* v4.7 Tanvir*/ IOP( "ltvoffcv", BSIM4v7_MOD_LTVOFFCV, IF_REAL, "Length dependence of tvoffcv"), /* v4.7 Tanvir*/ IOP( "wcdsc", BSIM4v7_MOD_WCDSC, IF_REAL, "Width dependence of cdsc"), IOP( "wcdscb", BSIM4v7_MOD_WCDSCB, IF_REAL, "Width dependence of cdscb"), IOP( "wcdscd", BSIM4v7_MOD_WCDSCD, IF_REAL, "Width dependence of cdscd"), IOP( "wcit", BSIM4v7_MOD_WCIT, IF_REAL, "Width dependence of cit"), IOP( "wnfactor", BSIM4v7_MOD_WNFACTOR, IF_REAL, "Width dependence of nfactor"), IOP( "wxj", BSIM4v7_MOD_WXJ, IF_REAL, "Width dependence of xj"), IOP( "wvsat", BSIM4v7_MOD_WVSAT, IF_REAL, "Width dependence of vsat"), IOP( "wat", BSIM4v7_MOD_WAT, IF_REAL, "Width dependence of at"), IOP( "wa0", BSIM4v7_MOD_WA0, IF_REAL, "Width dependence of a0"), IOP( "wags", BSIM4v7_MOD_WAGS, IF_REAL, "Width dependence of ags"), IOP( "wa1", BSIM4v7_MOD_WA1, IF_REAL, "Width dependence of a1"), IOP( "wa2", BSIM4v7_MOD_WA2, IF_REAL, "Width dependence of a2"), IOP( "wketa", BSIM4v7_MOD_WKETA, IF_REAL, "Width dependence of keta"), IOP( "wnsub", BSIM4v7_MOD_WNSUB, IF_REAL, "Width dependence of nsub"), IOP( "wndep", BSIM4v7_MOD_WNDEP, IF_REAL, "Width dependence of ndep"), IOP( "wnsd", BSIM4v7_MOD_WNSD, IF_REAL, "Width dependence of nsd"), IOP( "wphin", BSIM4v7_MOD_WPHIN, IF_REAL, "Width dependence of phin"), IOP( "wngate", BSIM4v7_MOD_WNGATE, IF_REAL, "Width dependence of ngate"), IOP( "wgamma1", BSIM4v7_MOD_WGAMMA1, IF_REAL, "Width dependence of gamma1"), IOP( "wgamma2", BSIM4v7_MOD_WGAMMA2, IF_REAL, "Width dependence of gamma2"), IOP( "wvbx", BSIM4v7_MOD_WVBX, IF_REAL, "Width dependence of vbx"), IOP( "wvbm", BSIM4v7_MOD_WVBM, IF_REAL, "Width dependence of vbm"), IOP( "wxt", BSIM4v7_MOD_WXT, IF_REAL, "Width dependence of xt"), IOP( "wk1", BSIM4v7_MOD_WK1, IF_REAL, "Width dependence of k1"), IOP( "wkt1", BSIM4v7_MOD_WKT1, IF_REAL, "Width dependence of kt1"), IOP( "wkt1l", BSIM4v7_MOD_WKT1L, IF_REAL, "Width dependence of kt1l"), IOP( "wkt2", BSIM4v7_MOD_WKT2, IF_REAL, "Width dependence of kt2"), IOP( "wk2", BSIM4v7_MOD_WK2, IF_REAL, "Width dependence of k2"), IOP( "wk3", BSIM4v7_MOD_WK3, IF_REAL, "Width dependence of k3"), IOP( "wk3b", BSIM4v7_MOD_WK3B, IF_REAL, "Width dependence of k3b"), IOP( "ww0", BSIM4v7_MOD_WW0, IF_REAL, "Width dependence of w0"), IOP( "wdvtp0", BSIM4v7_MOD_WDVTP0, IF_REAL, "Width dependence of dvtp0"), IOP( "wdvtp1", BSIM4v7_MOD_WDVTP1, IF_REAL, "Width dependence of dvtp1"), IOP( "wdvtp2", BSIM4v7_MOD_WDVTP2, IF_REAL, "Width dependence of dvtp2"), IOP( "wdvtp3", BSIM4v7_MOD_WDVTP3, IF_REAL, "Width dependence of dvtp3"), IOP( "wdvtp4", BSIM4v7_MOD_WDVTP4, IF_REAL, "Width dependence of dvtp4"), IOP( "wdvtp5", BSIM4v7_MOD_WDVTP5, IF_REAL, "Width dependence of dvtp5"), IOP( "wlpe0", BSIM4v7_MOD_WLPE0, IF_REAL, "Width dependence of lpe0"), IOP( "wlpeb", BSIM4v7_MOD_WLPEB, IF_REAL, "Width dependence of lpeb"), IOP( "wdvt0", BSIM4v7_MOD_WDVT0, IF_REAL, "Width dependence of dvt0"), IOP( "wdvt1", BSIM4v7_MOD_WDVT1, IF_REAL, "Width dependence of dvt1"), IOP( "wdvt2", BSIM4v7_MOD_WDVT2, IF_REAL, "Width dependence of dvt2"), IOP( "wdvt0w", BSIM4v7_MOD_WDVT0W, IF_REAL, "Width dependence of dvt0w"), IOP( "wdvt1w", BSIM4v7_MOD_WDVT1W, IF_REAL, "Width dependence of dvt1w"), IOP( "wdvt2w", BSIM4v7_MOD_WDVT2W, IF_REAL, "Width dependence of dvt2w"), IOP( "wdrout", BSIM4v7_MOD_WDROUT, IF_REAL, "Width dependence of drout"), IOP( "wdsub", BSIM4v7_MOD_WDSUB, IF_REAL, "Width dependence of dsub"), IOP( "wvth0", BSIM4v7_MOD_WVTH0, IF_REAL,"Width dependence of vth0"), IOPR("wvtho", BSIM4v7_MOD_WVTH0, IF_REAL,"Width dependence of vtho"), IOP( "wua", BSIM4v7_MOD_WUA, IF_REAL, "Width dependence of ua"), IOP( "wua1", BSIM4v7_MOD_WUA1, IF_REAL, "Width dependence of ua1"), IOP( "wub", BSIM4v7_MOD_WUB, IF_REAL, "Width dependence of ub"), IOP( "wub1", BSIM4v7_MOD_WUB1, IF_REAL, "Width dependence of ub1"), IOP( "wuc", BSIM4v7_MOD_WUC, IF_REAL, "Width dependence of uc"), IOP( "wuc1", BSIM4v7_MOD_WUC1, IF_REAL, "Width dependence of uc1"), IOP( "wud", BSIM4v7_MOD_WUD, IF_REAL, "Width dependence of ud"), IOP( "wud1", BSIM4v7_MOD_WUD1, IF_REAL, "Width dependence of ud1"), IOP( "wup", BSIM4v7_MOD_WUP, IF_REAL, "Width dependence of up"), IOP( "wlp", BSIM4v7_MOD_WLP, IF_REAL, "Width dependence of lp"), IOP( "wu0", BSIM4v7_MOD_WU0, IF_REAL, "Width dependence of u0"), IOP( "wute", BSIM4v7_MOD_WUTE, IF_REAL, "Width dependence of ute"), IOP( "wucste", BSIM4v7_MOD_WUCSTE, IF_REAL, "Width dependence of ucste"), IOP( "wvoff", BSIM4v7_MOD_WVOFF, IF_REAL, "Width dependence of voff"), IOP( "wminv", BSIM4v7_MOD_WMINV, IF_REAL, "Width dependence of minv"), IOP( "wminvcv", BSIM4v7_MOD_WMINVCV, IF_REAL, "Width dependence of minvcv"), IOP( "wdelta", BSIM4v7_MOD_WDELTA, IF_REAL, "Width dependence of delta"), IOP( "wrdsw", BSIM4v7_MOD_WRDSW, IF_REAL, "Width dependence of rdsw "), IOP( "wrsw", BSIM4v7_MOD_WRSW, IF_REAL, "Width dependence of rsw"), IOP( "wrdw", BSIM4v7_MOD_WRDW, IF_REAL, "Width dependence of rdw"), IOP( "wprwg", BSIM4v7_MOD_WPRWG, IF_REAL, "Width dependence of prwg "), IOP( "wprwb", BSIM4v7_MOD_WPRWB, IF_REAL, "Width dependence of prwb "), IOP( "wprt", BSIM4v7_MOD_WPRT, IF_REAL, "Width dependence of prt"), IOP( "weta0", BSIM4v7_MOD_WETA0, IF_REAL, "Width dependence of eta0"), IOP( "wetab", BSIM4v7_MOD_WETAB, IF_REAL, "Width dependence of etab"), IOP( "wpclm", BSIM4v7_MOD_WPCLM, IF_REAL, "Width dependence of pclm"), IOP( "wpdiblc1", BSIM4v7_MOD_WPDIBL1, IF_REAL, "Width dependence of pdiblc1"), IOP( "wpdiblc2", BSIM4v7_MOD_WPDIBL2, IF_REAL, "Width dependence of pdiblc2"), IOP( "wpdiblcb", BSIM4v7_MOD_WPDIBLB, IF_REAL, "Width dependence of pdiblcb"), IOP( "wfprout", BSIM4v7_MOD_WFPROUT, IF_REAL, "Width dependence of pdiblcb"), IOP( "wpdits", BSIM4v7_MOD_WPDITS, IF_REAL, "Width dependence of pdits"), IOP( "wpditsd", BSIM4v7_MOD_WPDITSD, IF_REAL, "Width dependence of pditsd"), IOP( "wpscbe1", BSIM4v7_MOD_WPSCBE1, IF_REAL, "Width dependence of pscbe1"), IOP( "wpscbe2", BSIM4v7_MOD_WPSCBE2, IF_REAL, "Width dependence of pscbe2"), IOP( "wpvag", BSIM4v7_MOD_WPVAG, IF_REAL, "Width dependence of pvag"), IOP( "wwr", BSIM4v7_MOD_WWR, IF_REAL, "Width dependence of wr"), IOP( "wdwg", BSIM4v7_MOD_WDWG, IF_REAL, "Width dependence of dwg"), IOP( "wdwb", BSIM4v7_MOD_WDWB, IF_REAL, "Width dependence of dwb"), IOP( "wb0", BSIM4v7_MOD_WB0, IF_REAL, "Width dependence of b0"), IOP( "wb1", BSIM4v7_MOD_WB1, IF_REAL, "Width dependence of b1"), IOP( "wcgsl", BSIM4v7_MOD_WCGSL, IF_REAL, "Width dependence of cgsl"), IOP( "wcgdl", BSIM4v7_MOD_WCGDL, IF_REAL, "Width dependence of cgdl"), IOP( "wckappas", BSIM4v7_MOD_WCKAPPAS, IF_REAL, "Width dependence of ckappas"), IOP( "wckappad", BSIM4v7_MOD_WCKAPPAD, IF_REAL, "Width dependence of ckappad"), IOP( "wcf", BSIM4v7_MOD_WCF, IF_REAL, "Width dependence of cf"), IOP( "wclc", BSIM4v7_MOD_WCLC, IF_REAL, "Width dependence of clc"), IOP( "wcle", BSIM4v7_MOD_WCLE, IF_REAL, "Width dependence of cle"), IOP( "walpha0", BSIM4v7_MOD_WALPHA0, IF_REAL, "Width dependence of alpha0"), IOP( "walpha1", BSIM4v7_MOD_WALPHA1, IF_REAL, "Width dependence of alpha1"), IOP( "wbeta0", BSIM4v7_MOD_WBETA0, IF_REAL, "Width dependence of beta0"), IOP( "wagidl", BSIM4v7_MOD_WAGIDL, IF_REAL, "Width dependence of agidl"), IOP( "wbgidl", BSIM4v7_MOD_WBGIDL, IF_REAL, "Width dependence of bgidl"), IOP( "wcgidl", BSIM4v7_MOD_WCGIDL, IF_REAL, "Width dependence of cgidl"), IOP( "wrgidl", BSIM4v7_MOD_WRGIDL, IF_REAL, "Width dependence of rgidl"), /* v4.7 New GIDL/GISL */ IOP( "wkgidl", BSIM4v7_MOD_WKGIDL, IF_REAL, "Width dependence of kgidl"), /* v4.7 New GIDL/GISL */ IOP( "wfgidl", BSIM4v7_MOD_WFGIDL, IF_REAL, "Width dependence of fgidl"), /* v4.7 New GIDL/GISL */ IOP( "wegidl", BSIM4v7_MOD_WEGIDL, IF_REAL, "Width dependence of egidl"), IOP( "wagisl", BSIM4v7_MOD_WAGISL, IF_REAL, "Width dependence of agisl"), IOP( "wbgisl", BSIM4v7_MOD_WBGISL, IF_REAL, "Width dependence of bgisl"), IOP( "wcgisl", BSIM4v7_MOD_WCGISL, IF_REAL, "Width dependence of cgisl"), IOP( "wrgisl", BSIM4v7_MOD_WRGISL, IF_REAL, "Width dependence of rgisl"), /* v4.7 New GIDL/GISL */ IOP( "wkgisl", BSIM4v7_MOD_WKGISL, IF_REAL, "Width dependence of kgisl"), /* v4.7 New GIDL/GISL */ IOP( "wfgisl", BSIM4v7_MOD_WFGISL, IF_REAL, "Width dependence of fgisl"), /* v4.7 New GIDL/GISL */ IOP( "wegisl", BSIM4v7_MOD_WEGISL, IF_REAL, "Width dependence of egisl"), IOP( "waigc", BSIM4v7_MOD_WAIGC, IF_REAL, "Width dependence of aigc"), IOP( "wbigc", BSIM4v7_MOD_WBIGC, IF_REAL, "Width dependence of bigc"), IOP( "wcigc", BSIM4v7_MOD_WCIGC, IF_REAL, "Width dependence of cigc"), IOP( "waigsd", BSIM4v7_MOD_WAIGSD, IF_REAL, "Width dependence of aigsd"), IOP( "wbigsd", BSIM4v7_MOD_WBIGSD, IF_REAL, "Width dependence of bigsd"), IOP( "wcigsd", BSIM4v7_MOD_WCIGSD, IF_REAL, "Width dependence of cigsd"), IOP( "waigs", BSIM4v7_MOD_WAIGS, IF_REAL, "Width dependence of aigs"), IOP( "wbigs", BSIM4v7_MOD_WBIGS, IF_REAL, "Width dependence of bigs"), IOP( "wcigs", BSIM4v7_MOD_WCIGS, IF_REAL, "Width dependence of cigs"), IOP( "waigd", BSIM4v7_MOD_WAIGD, IF_REAL, "Width dependence of aigd"), IOP( "wbigd", BSIM4v7_MOD_WBIGD, IF_REAL, "Width dependence of bigd"), IOP( "wcigd", BSIM4v7_MOD_WCIGD, IF_REAL, "Width dependence of cigd"), IOP( "waigbacc", BSIM4v7_MOD_WAIGBACC, IF_REAL, "Width dependence of aigbacc"), IOP( "wbigbacc", BSIM4v7_MOD_WBIGBACC, IF_REAL, "Width dependence of bigbacc"), IOP( "wcigbacc", BSIM4v7_MOD_WCIGBACC, IF_REAL, "Width dependence of cigbacc"), IOP( "waigbinv", BSIM4v7_MOD_WAIGBINV, IF_REAL, "Width dependence of aigbinv"), IOP( "wbigbinv", BSIM4v7_MOD_WBIGBINV, IF_REAL, "Width dependence of bigbinv"), IOP( "wcigbinv", BSIM4v7_MOD_WCIGBINV, IF_REAL, "Width dependence of cigbinv"), IOP( "wnigc", BSIM4v7_MOD_WNIGC, IF_REAL, "Width dependence of nigc"), IOP( "wnigbinv", BSIM4v7_MOD_WNIGBINV, IF_REAL, "Width dependence of nigbinv"), IOP( "wnigbacc", BSIM4v7_MOD_WNIGBACC, IF_REAL, "Width dependence of nigbacc"), IOP( "wntox", BSIM4v7_MOD_WNTOX, IF_REAL, "Width dependence of ntox"), IOP( "weigbinv", BSIM4v7_MOD_WEIGBINV, IF_REAL, "Width dependence for eigbinv"), IOP( "wpigcd", BSIM4v7_MOD_WPIGCD, IF_REAL, "Width dependence for pigcd"), IOP( "wpoxedge", BSIM4v7_MOD_WPOXEDGE, IF_REAL, "Width dependence for poxedge"), IOP( "wvfbcv", BSIM4v7_MOD_WVFBCV, IF_REAL, "Width dependence of vfbcv"), IOP( "wvfb", BSIM4v7_MOD_WVFB, IF_REAL, "Width dependence of vfb"), IOP( "wacde", BSIM4v7_MOD_WACDE, IF_REAL, "Width dependence of acde"), IOP( "wmoin", BSIM4v7_MOD_WMOIN, IF_REAL, "Width dependence of moin"), IOP( "wnoff", BSIM4v7_MOD_WNOFF, IF_REAL, "Width dependence of noff"), IOP( "wvoffcv", BSIM4v7_MOD_WVOFFCV, IF_REAL, "Width dependence of voffcv"), IOP( "wxrcrg1", BSIM4v7_MOD_WXRCRG1, IF_REAL, "Width dependence of xrcrg1"), IOP( "wxrcrg2", BSIM4v7_MOD_WXRCRG2, IF_REAL, "Width dependence of xrcrg2"), IOP( "wlambda", BSIM4v7_MOD_WLAMBDA, IF_REAL, "Width dependence of lambda"), IOP( "wvtl", BSIM4v7_MOD_WVTL, IF_REAL, "Width dependence of vtl"), IOP( "wxn", BSIM4v7_MOD_WXN, IF_REAL, "Width dependence of xn"), IOP( "weu", BSIM4v7_MOD_WEU, IF_REAL, "Width dependence of eu"), IOP( "wucs", BSIM4v7_MOD_WUCS, IF_REAL, "Width dependence of ucs"), IOP( "wvfbsdoff", BSIM4v7_MOD_WVFBSDOFF, IF_REAL, "Width dependence of vfbsdoff"), IOP( "wtvfbsdoff", BSIM4v7_MOD_WTVFBSDOFF, IF_REAL, "Width dependence of tvfbsdoff"), IOP( "wtvoff", BSIM4v7_MOD_WTVOFF, IF_REAL, "Width dependence of tvoff"), IOP( "wtnfactor", BSIM4v7_MOD_WTNFACTOR, IF_REAL, "Width dependence of tnfactor"), /* v4.7 Tanvir*/ IOP( "wteta0", BSIM4v7_MOD_WTETA0, IF_REAL, "Width dependence of teta0"), /* v4.7 Tanvir*/ IOP( "wtvoffcv", BSIM4v7_MOD_WTVOFFCV, IF_REAL, "Width dependence of tvoffcv"), /* v4.7 Tanvir*/ IOP( "pcdsc", BSIM4v7_MOD_PCDSC, IF_REAL, "Cross-term dependence of cdsc"), IOP( "pcdscb", BSIM4v7_MOD_PCDSCB, IF_REAL, "Cross-term dependence of cdscb"), IOP( "pcdscd", BSIM4v7_MOD_PCDSCD, IF_REAL, "Cross-term dependence of cdscd"), IOP( "pcit", BSIM4v7_MOD_PCIT, IF_REAL, "Cross-term dependence of cit"), IOP( "pnfactor", BSIM4v7_MOD_PNFACTOR, IF_REAL, "Cross-term dependence of nfactor"), IOP( "pxj", BSIM4v7_MOD_PXJ, IF_REAL, "Cross-term dependence of xj"), IOP( "pvsat", BSIM4v7_MOD_PVSAT, IF_REAL, "Cross-term dependence of vsat"), IOP( "pat", BSIM4v7_MOD_PAT, IF_REAL, "Cross-term dependence of at"), IOP( "pa0", BSIM4v7_MOD_PA0, IF_REAL, "Cross-term dependence of a0"), IOP( "pags", BSIM4v7_MOD_PAGS, IF_REAL, "Cross-term dependence of ags"), IOP( "pa1", BSIM4v7_MOD_PA1, IF_REAL, "Cross-term dependence of a1"), IOP( "pa2", BSIM4v7_MOD_PA2, IF_REAL, "Cross-term dependence of a2"), IOP( "pketa", BSIM4v7_MOD_PKETA, IF_REAL, "Cross-term dependence of keta"), IOP( "pnsub", BSIM4v7_MOD_PNSUB, IF_REAL, "Cross-term dependence of nsub"), IOP( "pndep", BSIM4v7_MOD_PNDEP, IF_REAL, "Cross-term dependence of ndep"), IOP( "pnsd", BSIM4v7_MOD_PNSD, IF_REAL, "Cross-term dependence of nsd"), IOP( "pphin", BSIM4v7_MOD_PPHIN, IF_REAL, "Cross-term dependence of phin"), IOP( "pngate", BSIM4v7_MOD_PNGATE, IF_REAL, "Cross-term dependence of ngate"), IOP( "pgamma1", BSIM4v7_MOD_PGAMMA1, IF_REAL, "Cross-term dependence of gamma1"), IOP( "pgamma2", BSIM4v7_MOD_PGAMMA2, IF_REAL, "Cross-term dependence of gamma2"), IOP( "pvbx", BSIM4v7_MOD_PVBX, IF_REAL, "Cross-term dependence of vbx"), IOP( "pvbm", BSIM4v7_MOD_PVBM, IF_REAL, "Cross-term dependence of vbm"), IOP( "pxt", BSIM4v7_MOD_PXT, IF_REAL, "Cross-term dependence of xt"), IOP( "pk1", BSIM4v7_MOD_PK1, IF_REAL, "Cross-term dependence of k1"), IOP( "pkt1", BSIM4v7_MOD_PKT1, IF_REAL, "Cross-term dependence of kt1"), IOP( "pkt1l", BSIM4v7_MOD_PKT1L, IF_REAL, "Cross-term dependence of kt1l"), IOP( "pkt2", BSIM4v7_MOD_PKT2, IF_REAL, "Cross-term dependence of kt2"), IOP( "pk2", BSIM4v7_MOD_PK2, IF_REAL, "Cross-term dependence of k2"), IOP( "pk3", BSIM4v7_MOD_PK3, IF_REAL, "Cross-term dependence of k3"), IOP( "pk3b", BSIM4v7_MOD_PK3B, IF_REAL, "Cross-term dependence of k3b"), IOP( "pw0", BSIM4v7_MOD_PW0, IF_REAL, "Cross-term dependence of w0"), IOP( "pdvtp0", BSIM4v7_MOD_PDVTP0, IF_REAL, "Cross-term dependence of dvtp0"), IOP( "pdvtp1", BSIM4v7_MOD_PDVTP1, IF_REAL, "Cross-term dependence of dvtp1"), IOP( "pdvtp2", BSIM4v7_MOD_PDVTP2, IF_REAL, "Cross-term dependence of dvtp2"), IOP( "pdvtp3", BSIM4v7_MOD_PDVTP3, IF_REAL, "Cross-term dependence of dvtp3"), IOP( "pdvtp4", BSIM4v7_MOD_PDVTP4, IF_REAL, "Cross-term dependence of dvtp4"), IOP( "pdvtp5", BSIM4v7_MOD_PDVTP5, IF_REAL, "Cross-term dependence of dvtp5"), IOP( "plpe0", BSIM4v7_MOD_PLPE0, IF_REAL, "Cross-term dependence of lpe0"), IOP( "plpeb", BSIM4v7_MOD_PLPEB, IF_REAL, "Cross-term dependence of lpeb"), IOP( "pdvt0", BSIM4v7_MOD_PDVT0, IF_REAL, "Cross-term dependence of dvt0"), IOP( "pdvt1", BSIM4v7_MOD_PDVT1, IF_REAL, "Cross-term dependence of dvt1"), IOP( "pdvt2", BSIM4v7_MOD_PDVT2, IF_REAL, "Cross-term dependence of dvt2"), IOP( "pdvt0w", BSIM4v7_MOD_PDVT0W, IF_REAL, "Cross-term dependence of dvt0w"), IOP( "pdvt1w", BSIM4v7_MOD_PDVT1W, IF_REAL, "Cross-term dependence of dvt1w"), IOP( "pdvt2w", BSIM4v7_MOD_PDVT2W, IF_REAL, "Cross-term dependence of dvt2w"), IOP( "pdrout", BSIM4v7_MOD_PDROUT, IF_REAL, "Cross-term dependence of drout"), IOP( "pdsub", BSIM4v7_MOD_PDSUB, IF_REAL, "Cross-term dependence of dsub"), IOP( "pvth0", BSIM4v7_MOD_PVTH0, IF_REAL,"Cross-term dependence of vth0"), IOPR("pvtho", BSIM4v7_MOD_PVTH0, IF_REAL,"Cross-term dependence of vtho"), IOP( "pua", BSIM4v7_MOD_PUA, IF_REAL, "Cross-term dependence of ua"), IOP( "pua1", BSIM4v7_MOD_PUA1, IF_REAL, "Cross-term dependence of ua1"), IOP( "pub", BSIM4v7_MOD_PUB, IF_REAL, "Cross-term dependence of ub"), IOP( "pub1", BSIM4v7_MOD_PUB1, IF_REAL, "Cross-term dependence of ub1"), IOP( "puc", BSIM4v7_MOD_PUC, IF_REAL, "Cross-term dependence of uc"), IOP( "puc1", BSIM4v7_MOD_PUC1, IF_REAL, "Cross-term dependence of uc1"), IOP( "pud", BSIM4v7_MOD_PUD, IF_REAL, "Cross-term dependence of ud"), IOP( "pud1", BSIM4v7_MOD_PUD1, IF_REAL, "Cross-term dependence of ud1"), IOP( "pup", BSIM4v7_MOD_PUP, IF_REAL, "Cross-term dependence of up"), IOP( "plp", BSIM4v7_MOD_PLP, IF_REAL, "Cross-term dependence of lp"), IOP( "pu0", BSIM4v7_MOD_PU0, IF_REAL, "Cross-term dependence of u0"), IOP( "pute", BSIM4v7_MOD_PUTE, IF_REAL, "Cross-term dependence of ute"), IOP( "pucste", BSIM4v7_MOD_PUCSTE, IF_REAL, "Cross-term dependence of ucste"), IOP( "pvoff", BSIM4v7_MOD_PVOFF, IF_REAL, "Cross-term dependence of voff"), IOP( "pminv", BSIM4v7_MOD_PMINV, IF_REAL, "Cross-term dependence of minv"), IOP( "pminvcv", BSIM4v7_MOD_PMINVCV, IF_REAL, "Cross-term dependence of minvcv"), IOP( "pdelta", BSIM4v7_MOD_PDELTA, IF_REAL, "Cross-term dependence of delta"), IOP( "prdsw", BSIM4v7_MOD_PRDSW, IF_REAL, "Cross-term dependence of rdsw "), IOP( "prsw", BSIM4v7_MOD_PRSW, IF_REAL, "Cross-term dependence of rsw"), IOP( "prdw", BSIM4v7_MOD_PRDW, IF_REAL, "Cross-term dependence of rdw"), IOP( "pprwg", BSIM4v7_MOD_PPRWG, IF_REAL, "Cross-term dependence of prwg "), IOP( "pprwb", BSIM4v7_MOD_PPRWB, IF_REAL, "Cross-term dependence of prwb "), IOP( "pprt", BSIM4v7_MOD_PPRT, IF_REAL, "Cross-term dependence of prt "), IOP( "peta0", BSIM4v7_MOD_PETA0, IF_REAL, "Cross-term dependence of eta0"), IOP( "petab", BSIM4v7_MOD_PETAB, IF_REAL, "Cross-term dependence of etab"), IOP( "ppclm", BSIM4v7_MOD_PPCLM, IF_REAL, "Cross-term dependence of pclm"), IOP( "ppdiblc1", BSIM4v7_MOD_PPDIBL1, IF_REAL, "Cross-term dependence of pdiblc1"), IOP( "ppdiblc2", BSIM4v7_MOD_PPDIBL2, IF_REAL, "Cross-term dependence of pdiblc2"), IOP( "ppdiblcb", BSIM4v7_MOD_PPDIBLB, IF_REAL, "Cross-term dependence of pdiblcb"), IOP( "pfprout", BSIM4v7_MOD_PFPROUT, IF_REAL, "Cross-term dependence of pdiblcb"), IOP( "ppdits", BSIM4v7_MOD_PPDITS, IF_REAL, "Cross-term dependence of pdits"), IOP( "ppditsd", BSIM4v7_MOD_PPDITSD, IF_REAL, "Cross-term dependence of pditsd"), IOP( "ppscbe1", BSIM4v7_MOD_PPSCBE1, IF_REAL, "Cross-term dependence of pscbe1"), IOP( "ppscbe2", BSIM4v7_MOD_PPSCBE2, IF_REAL, "Cross-term dependence of pscbe2"), IOP( "ppvag", BSIM4v7_MOD_PPVAG, IF_REAL, "Cross-term dependence of pvag"), IOP( "pwr", BSIM4v7_MOD_PWR, IF_REAL, "Cross-term dependence of wr"), IOP( "pdwg", BSIM4v7_MOD_PDWG, IF_REAL, "Cross-term dependence of dwg"), IOP( "pdwb", BSIM4v7_MOD_PDWB, IF_REAL, "Cross-term dependence of dwb"), IOP( "pb0", BSIM4v7_MOD_PB0, IF_REAL, "Cross-term dependence of b0"), IOP( "pb1", BSIM4v7_MOD_PB1, IF_REAL, "Cross-term dependence of b1"), IOP( "pcgsl", BSIM4v7_MOD_PCGSL, IF_REAL, "Cross-term dependence of cgsl"), IOP( "pcgdl", BSIM4v7_MOD_PCGDL, IF_REAL, "Cross-term dependence of cgdl"), IOP( "pckappas", BSIM4v7_MOD_PCKAPPAS, IF_REAL, "Cross-term dependence of ckappas"), IOP( "pckappad", BSIM4v7_MOD_PCKAPPAD, IF_REAL, "Cross-term dependence of ckappad"), IOP( "pcf", BSIM4v7_MOD_PCF, IF_REAL, "Cross-term dependence of cf"), IOP( "pclc", BSIM4v7_MOD_PCLC, IF_REAL, "Cross-term dependence of clc"), IOP( "pcle", BSIM4v7_MOD_PCLE, IF_REAL, "Cross-term dependence of cle"), IOP( "palpha0", BSIM4v7_MOD_PALPHA0, IF_REAL, "Cross-term dependence of alpha0"), IOP( "palpha1", BSIM4v7_MOD_PALPHA1, IF_REAL, "Cross-term dependence of alpha1"), IOP( "pbeta0", BSIM4v7_MOD_PBETA0, IF_REAL, "Cross-term dependence of beta0"), IOP( "pagidl", BSIM4v7_MOD_PAGIDL, IF_REAL, "Cross-term dependence of agidl"), IOP( "pbgidl", BSIM4v7_MOD_PBGIDL, IF_REAL, "Cross-term dependence of bgidl"), IOP( "pcgidl", BSIM4v7_MOD_PCGIDL, IF_REAL, "Cross-term dependence of cgidl"), IOP( "prgidl", BSIM4v7_MOD_PRGIDL, IF_REAL, "Cross-term dependence of rgidl"), /* v4.7 New GIDL/GISL */ IOP( "pkgidl", BSIM4v7_MOD_PKGIDL, IF_REAL, "Cross-term dependence of kgidl"), /* v4.7 New GIDL/GISL */ IOP( "pfgidl", BSIM4v7_MOD_PFGIDL, IF_REAL, "Cross-term dependence of fgidl"), /* v4.7 New GIDL/GISL */ IOP( "pegidl", BSIM4v7_MOD_PEGIDL, IF_REAL, "Cross-term dependence of egidl"), IOP( "pagisl", BSIM4v7_MOD_PAGISL, IF_REAL, "Cross-term dependence of agisl"), IOP( "pbgisl", BSIM4v7_MOD_PBGISL, IF_REAL, "Cross-term dependence of bgisl"), IOP( "pcgisl", BSIM4v7_MOD_PCGISL, IF_REAL, "Cross-term dependence of cgisl"), IOP( "pegisl", BSIM4v7_MOD_PEGISL, IF_REAL, "Cross-term dependence of egisl"), IOP( "prgisl", BSIM4v7_MOD_PRGISL, IF_REAL, "Cross-term dependence of rgisl"), /* v4.7 New GIDL/GISL */ IOP( "pkgisl", BSIM4v7_MOD_PKGISL, IF_REAL, "Cross-term dependence of kgisl"), /* v4.7 New GIDL/GISL */ IOP( "pfgisl", BSIM4v7_MOD_PFGISL, IF_REAL, "Cross-term dependence of fgisl"), /* v4.7 New GIDL/GISL */ IOP( "paigc", BSIM4v7_MOD_PAIGC, IF_REAL, "Cross-term dependence of aigc"), IOP( "pbigc", BSIM4v7_MOD_PBIGC, IF_REAL, "Cross-term dependence of bigc"), IOP( "pcigc", BSIM4v7_MOD_PCIGC, IF_REAL, "Cross-term dependence of cigc"), IOP( "paigsd", BSIM4v7_MOD_PAIGSD, IF_REAL, "Cross-term dependence of aigsd"), IOP( "pbigsd", BSIM4v7_MOD_PBIGSD, IF_REAL, "Cross-term dependence of bigsd"), IOP( "pcigsd", BSIM4v7_MOD_PCIGSD, IF_REAL, "Cross-term dependence of cigsd"), IOP( "paigs", BSIM4v7_MOD_PAIGS, IF_REAL, "Cross-term dependence of aigs"), IOP( "pbigs", BSIM4v7_MOD_PBIGS, IF_REAL, "Cross-term dependence of bigs"), IOP( "pcigs", BSIM4v7_MOD_PCIGS, IF_REAL, "Cross-term dependence of cigs"), IOP( "paigd", BSIM4v7_MOD_PAIGD, IF_REAL, "Cross-term dependence of aigd"), IOP( "pbigd", BSIM4v7_MOD_PBIGD, IF_REAL, "Cross-term dependence of bigd"), IOP( "pcigd", BSIM4v7_MOD_PCIGD, IF_REAL, "Cross-term dependence of cigd"), IOP( "paigbacc", BSIM4v7_MOD_PAIGBACC, IF_REAL, "Cross-term dependence of aigbacc"), IOP( "pbigbacc", BSIM4v7_MOD_PBIGBACC, IF_REAL, "Cross-term dependence of bigbacc"), IOP( "pcigbacc", BSIM4v7_MOD_PCIGBACC, IF_REAL, "Cross-term dependence of cigbacc"), IOP( "paigbinv", BSIM4v7_MOD_PAIGBINV, IF_REAL, "Cross-term dependence of aigbinv"), IOP( "pbigbinv", BSIM4v7_MOD_PBIGBINV, IF_REAL, "Cross-term dependence of bigbinv"), IOP( "pcigbinv", BSIM4v7_MOD_PCIGBINV, IF_REAL, "Cross-term dependence of cigbinv"), IOP( "pnigc", BSIM4v7_MOD_PNIGC, IF_REAL, "Cross-term dependence of nigc"), IOP( "pnigbinv", BSIM4v7_MOD_PNIGBINV, IF_REAL, "Cross-term dependence of nigbinv"), IOP( "pnigbacc", BSIM4v7_MOD_PNIGBACC, IF_REAL, "Cross-term dependence of nigbacc"), IOP( "pntox", BSIM4v7_MOD_PNTOX, IF_REAL, "Cross-term dependence of ntox"), IOP( "peigbinv", BSIM4v7_MOD_PEIGBINV, IF_REAL, "Cross-term dependence for eigbinv"), IOP( "ppigcd", BSIM4v7_MOD_PPIGCD, IF_REAL, "Cross-term dependence for pigcd"), IOP( "ppoxedge", BSIM4v7_MOD_PPOXEDGE, IF_REAL, "Cross-term dependence for poxedge"), IOP( "pvfbcv", BSIM4v7_MOD_PVFBCV, IF_REAL, "Cross-term dependence of vfbcv"), IOP( "pvfb", BSIM4v7_MOD_PVFB, IF_REAL, "Cross-term dependence of vfb"), IOP( "pacde", BSIM4v7_MOD_PACDE, IF_REAL, "Cross-term dependence of acde"), IOP( "pmoin", BSIM4v7_MOD_PMOIN, IF_REAL, "Cross-term dependence of moin"), IOP( "pnoff", BSIM4v7_MOD_PNOFF, IF_REAL, "Cross-term dependence of noff"), IOP( "pvoffcv", BSIM4v7_MOD_PVOFFCV, IF_REAL, "Cross-term dependence of voffcv"), IOP( "pxrcrg1", BSIM4v7_MOD_PXRCRG1, IF_REAL, "Cross-term dependence of xrcrg1"), IOP( "pxrcrg2", BSIM4v7_MOD_PXRCRG2, IF_REAL, "Cross-term dependence of xrcrg2"), IOP( "plambda", BSIM4v7_MOD_PLAMBDA, IF_REAL, "Cross-term dependence of lambda"), IOP( "pvtl", BSIM4v7_MOD_PVTL, IF_REAL, "Cross-term dependence of vtl"), IOP( "pxn", BSIM4v7_MOD_PXN, IF_REAL, "Cross-term dependence of xn"), IOP( "peu", BSIM4v7_MOD_PEU, IF_REAL, "Cross-term dependence of eu"), IOP( "pucs", BSIM4v7_MOD_PUCS, IF_REAL, "Cross-term dependence of ucs"), IOP( "pvfbsdoff", BSIM4v7_MOD_PVFBSDOFF, IF_REAL, "Cross-term dependence of vfbsdoff"), IOP( "ptvfbsdoff", BSIM4v7_MOD_PTVFBSDOFF, IF_REAL, "Cross-term dependence of tvfbsdoff"), IOP( "ptvoff", BSIM4v7_MOD_PTVOFF, IF_REAL, "Cross-term dependence of tvoff"), IOP( "ptnfactor", BSIM4v7_MOD_PTNFACTOR, IF_REAL, "Cross-term dependence of tnfactor"), /* v4.7 Tanvir*/ IOP( "pteta0", BSIM4v7_MOD_PTETA0, IF_REAL, "Cross-term dependence of teta0"), /* v4.7 Tanvir*/ IOP( "ptvoffcv", BSIM4v7_MOD_PTVOFFCV, IF_REAL, "Cross-term dependence of tvoffcv"), /* v4.7 Tanvir*/ /* stress effect*/ IOP( "saref", BSIM4v7_MOD_SAREF, IF_REAL, "Reference distance between OD edge to poly of one side"), IOP( "sbref", BSIM4v7_MOD_SBREF, IF_REAL, "Reference distance between OD edge to poly of the other side"), IOP( "wlod", BSIM4v7_MOD_WLOD, IF_REAL, "Width parameter for stress effect"), IOP( "ku0", BSIM4v7_MOD_KU0, IF_REAL, "Mobility degradation/enhancement coefficient for LOD"), IOP( "kvsat", BSIM4v7_MOD_KVSAT, IF_REAL, "Saturation velocity degradation/enhancement parameter for LOD"), IOP( "kvth0", BSIM4v7_MOD_KVTH0, IF_REAL, "Threshold degradation/enhancement parameter for LOD"), IOP( "tku0", BSIM4v7_MOD_TKU0, IF_REAL, "Temperature coefficient of KU0"), IOP( "llodku0", BSIM4v7_MOD_LLODKU0, IF_REAL, "Length parameter for u0 LOD effect"), IOP( "wlodku0", BSIM4v7_MOD_WLODKU0, IF_REAL, "Width parameter for u0 LOD effect"), IOP( "llodvth", BSIM4v7_MOD_LLODVTH, IF_REAL, "Length parameter for vth LOD effect"), IOP( "wlodvth", BSIM4v7_MOD_WLODVTH, IF_REAL, "Width parameter for vth LOD effect"), IOP( "lku0", BSIM4v7_MOD_LKU0, IF_REAL, "Length dependence of ku0"), IOP( "wku0", BSIM4v7_MOD_WKU0, IF_REAL, "Width dependence of ku0"), IOP( "pku0", BSIM4v7_MOD_PKU0, IF_REAL, "Cross-term dependence of ku0"), IOP( "lkvth0", BSIM4v7_MOD_LKVTH0, IF_REAL, "Length dependence of kvth0"), IOP( "wkvth0", BSIM4v7_MOD_WKVTH0, IF_REAL, "Width dependence of kvth0"), IOP( "pkvth0", BSIM4v7_MOD_PKVTH0, IF_REAL, "Cross-term dependence of kvth0"), IOP( "stk2", BSIM4v7_MOD_STK2, IF_REAL, "K2 shift factor related to stress effect on vth"), IOP( "lodk2", BSIM4v7_MOD_LODK2, IF_REAL, "K2 shift modification factor for stress effect"), IOP( "steta0", BSIM4v7_MOD_STETA0, IF_REAL, "eta0 shift factor related to stress effect on vth"), IOP( "lodeta0", BSIM4v7_MOD_LODETA0, IF_REAL, "eta0 shift modification factor for stress effect"), /* Well Proximity Effect */ IOP( "web", BSIM4v7_MOD_WEB, IF_REAL, "Coefficient for SCB"), IOP( "wec", BSIM4v7_MOD_WEC, IF_REAL, "Coefficient for SCC"), IOP( "kvth0we", BSIM4v7_MOD_KVTH0WE, IF_REAL, "Threshold shift factor for well proximity effect"), IOP( "k2we", BSIM4v7_MOD_K2WE, IF_REAL, " K2 shift factor for well proximity effect "), IOP( "ku0we", BSIM4v7_MOD_KU0WE, IF_REAL, " Mobility degradation factor for well proximity effect "), IOP( "scref", BSIM4v7_MOD_SCREF, IF_REAL, " Reference distance to calculate SCA, SCB and SCC"), IOP( "wpemod", BSIM4v7_MOD_WPEMOD, IF_REAL, " Flag for WPE model (WPEMOD=1 to activate this model) "), IOP( "lkvth0we", BSIM4v7_MOD_LKVTH0WE, IF_REAL, "Length dependence of kvth0we"), IOP( "lk2we", BSIM4v7_MOD_LK2WE, IF_REAL, " Length dependence of k2we "), IOP( "lku0we", BSIM4v7_MOD_LKU0WE, IF_REAL, " Length dependence of ku0we "), IOP( "wkvth0we", BSIM4v7_MOD_WKVTH0WE, IF_REAL, "Width dependence of kvth0we"), IOP( "wk2we", BSIM4v7_MOD_WK2WE, IF_REAL, " Width dependence of k2we "), IOP( "wku0we", BSIM4v7_MOD_WKU0WE, IF_REAL, " Width dependence of ku0we "), IOP( "pkvth0we", BSIM4v7_MOD_PKVTH0WE, IF_REAL, "Cross-term dependence of kvth0we"), IOP( "pk2we", BSIM4v7_MOD_PK2WE, IF_REAL, " Cross-term dependence of k2we "), IOP( "pku0we", BSIM4v7_MOD_PKU0WE, IF_REAL, " Cross-term dependence of ku0we "), IOP( "noia", BSIM4v7_MOD_NOIA, IF_REAL, "Flicker noise parameter"), IOP( "noib", BSIM4v7_MOD_NOIB, IF_REAL, "Flicker noise parameter"), IOP( "noic", BSIM4v7_MOD_NOIC, IF_REAL, "Flicker noise parameter"), IOP( "tnoia", BSIM4v7_MOD_TNOIA, IF_REAL, "Thermal noise parameter"), IOP( "tnoib", BSIM4v7_MOD_TNOIB, IF_REAL, "Thermal noise parameter"), IOP( "tnoic", BSIM4v7_MOD_TNOIC, IF_REAL, "Thermal noise parameter"), IOP( "rnoia", BSIM4v7_MOD_RNOIA, IF_REAL, "Thermal noise coefficient"), IOP( "rnoib", BSIM4v7_MOD_RNOIB, IF_REAL, "Thermal noise coefficient"), IOP( "rnoic", BSIM4v7_MOD_RNOIC, IF_REAL, "Thermal noise coefficient"), IOP( "ntnoi", BSIM4v7_MOD_NTNOI, IF_REAL, "Thermal noise parameter"), IOP( "em", BSIM4v7_MOD_EM, IF_REAL, "Flicker noise parameter"), IOP( "ef", BSIM4v7_MOD_EF, IF_REAL, "Flicker noise frequency exponent"), IOP( "af", BSIM4v7_MOD_AF, IF_REAL, "Flicker noise exponent"), IOP( "kf", BSIM4v7_MOD_KF, IF_REAL, "Flicker noise coefficient"), IOP("vgs_max", BSIM4v7_MOD_VGS_MAX, IF_REAL, "maximum voltage G-S branch"), IOP("vgd_max", BSIM4v7_MOD_VGD_MAX, IF_REAL, "maximum voltage G-D branch"), IOP("vgb_max", BSIM4v7_MOD_VGB_MAX, IF_REAL, "maximum voltage G-B branch"), IOP("vds_max", BSIM4v7_MOD_VDS_MAX, IF_REAL, "maximum voltage D-S branch"), IOP("vbs_max", BSIM4v7_MOD_VBS_MAX, IF_REAL, "maximum voltage B-S branch"), IOP("vbd_max", BSIM4v7_MOD_VBD_MAX, IF_REAL, "maximum voltage B-D branch"), IOP("vgsr_max", BSIM4v7_MOD_VGSR_MAX, IF_REAL, "maximum voltage G-S branch"), IOP("vgdr_max", BSIM4v7_MOD_VGDR_MAX, IF_REAL, "maximum voltage G-D branch"), IOP("vgbr_max", BSIM4v7_MOD_VGBR_MAX, IF_REAL, "maximum voltage G-B branch"), IOP("vbsr_max", BSIM4v7_MOD_VBSR_MAX, IF_REAL, "maximum voltage B-S branch"), IOP("vbdr_max", BSIM4v7_MOD_VBDR_MAX, IF_REAL, "maximum voltage B-D branch"), IP( "nmos", BSIM4v7_MOD_NMOS, IF_FLAG, "Flag to indicate NMOS"), IP( "pmos", BSIM4v7_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"), }; char *BSIM4v7names[] = { "Drain", "Gate", "Source", "Bulk", "Charge" }; int BSIM4v7nSize = NUMELEMS(BSIM4v7names); int BSIM4v7pTSize = NUMELEMS(BSIM4v7pTable); int BSIM4v7mPTSize = NUMELEMS(BSIM4v7mPTable); int BSIM4v7iSize = sizeof(BSIM4v7instance); int BSIM4v7mSize = sizeof(BSIM4v7model); tmpk8ny_4pz/src/spicelib/devices/bsim4v7/b4v7getic.c0000644000175000017500000000300713546075722022420 0ustar carstencarsten/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4getic.c of BSIM4.7.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4v7def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4v7getic( GENmodel *inModel, CKTcircuit *ckt) { BSIM4v7model *model = (BSIM4v7model*)inModel; BSIM4v7instance *here; for (; model ; model = BSIM4v7nextModel(model)) { for (here = BSIM4v7instances(model); here; here = BSIM4v7nextInstance(here)) { if (!here->BSIM4v7icVDSGiven) { here->BSIM4v7icVDS = *(ckt->CKTrhs + here->BSIM4v7dNode) - *(ckt->CKTrhs + here->BSIM4v7sNode); } if (!here->BSIM4v7icVGSGiven) { here->BSIM4v7icVGS = *(ckt->CKTrhs + here->BSIM4v7gNodeExt) - *(ckt->CKTrhs + here->BSIM4v7sNode); } if(!here->BSIM4v7icVBSGiven) { here->BSIM4v7icVBS = *(ckt->CKTrhs + here->BSIM4v7bNode) - *(ckt->CKTrhs + here->BSIM4v7sNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v7/b4v7cvtest.c0000644000175000017500000002253613546075722022645 0ustar carstencarsten/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4cvtest.c of BSIM4.7.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 05/09/2003. **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4v7def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4v7convTest( GENmodel *inModel, CKTcircuit *ckt) { BSIM4v7model *model = (BSIM4v7model*)inModel; BSIM4v7instance *here; double delvbd, delvbs, delvds, delvgd, delvgs; double delvdbd, delvsbs; double delvbd_jct, delvbs_jct; double vds, vgs, vgd, vgdo, vbs, vbd; double vdbd, vdbs, vsbs; double cbhat, cdhat, Idtot, Ibtot; double vses, vdes, vdedo, delvses, delvded, delvdes; double Isestot, cseshat, Idedtot, cdedhat; double Igstot, cgshat, Igdtot, cgdhat, Igbtot, cgbhat; double tol0, tol1, tol2, tol3, tol4, tol5, tol6; for (; model != NULL; model = BSIM4v7nextModel(model)) { for (here = BSIM4v7instances(model); here != NULL ; here=BSIM4v7nextInstance(here)) { vds = model->BSIM4v7type * (*(ckt->CKTrhsOld + here->BSIM4v7dNodePrime) - *(ckt->CKTrhsOld + here->BSIM4v7sNodePrime)); vgs = model->BSIM4v7type * (*(ckt->CKTrhsOld + here->BSIM4v7gNodePrime) - *(ckt->CKTrhsOld + here->BSIM4v7sNodePrime)); vbs = model->BSIM4v7type * (*(ckt->CKTrhsOld + here->BSIM4v7bNodePrime) - *(ckt->CKTrhsOld + here->BSIM4v7sNodePrime)); vdbs = model->BSIM4v7type * (*(ckt->CKTrhsOld + here->BSIM4v7dbNode) - *(ckt->CKTrhsOld + here->BSIM4v7sNodePrime)); vsbs = model->BSIM4v7type * (*(ckt->CKTrhsOld + here->BSIM4v7sbNode) - *(ckt->CKTrhsOld + here->BSIM4v7sNodePrime)); vses = model->BSIM4v7type * (*(ckt->CKTrhsOld + here->BSIM4v7sNode) - *(ckt->CKTrhsOld + here->BSIM4v7sNodePrime)); vdes = model->BSIM4v7type * (*(ckt->CKTrhsOld + here->BSIM4v7dNode) - *(ckt->CKTrhsOld + here->BSIM4v7sNodePrime)); vgdo = *(ckt->CKTstate0 + here->BSIM4v7vgs) - *(ckt->CKTstate0 + here->BSIM4v7vds); vbd = vbs - vds; vdbd = vdbs - vds; vgd = vgs - vds; delvbd = vbd - *(ckt->CKTstate0 + here->BSIM4v7vbd); delvdbd = vdbd - *(ckt->CKTstate0 + here->BSIM4v7vdbd); delvgd = vgd - vgdo; delvds = vds - *(ckt->CKTstate0 + here->BSIM4v7vds); delvgs = vgs - *(ckt->CKTstate0 + here->BSIM4v7vgs); delvbs = vbs - *(ckt->CKTstate0 + here->BSIM4v7vbs); delvsbs = vsbs - *(ckt->CKTstate0 + here->BSIM4v7vsbs); delvses = vses - (*(ckt->CKTstate0 + here->BSIM4v7vses)); vdedo = *(ckt->CKTstate0 + here->BSIM4v7vdes) - *(ckt->CKTstate0 + here->BSIM4v7vds); delvdes = vdes - *(ckt->CKTstate0 + here->BSIM4v7vdes); delvded = vdes - vds - vdedo; delvbd_jct = (!here->BSIM4v7rbodyMod) ? delvbd : delvdbd; delvbs_jct = (!here->BSIM4v7rbodyMod) ? delvbs : delvsbs; if (here->BSIM4v7mode >= 0) { Idtot = here->BSIM4v7cd + here->BSIM4v7csub - here->BSIM4v7cbd + here->BSIM4v7Igidl; cdhat = Idtot - here->BSIM4v7gbd * delvbd_jct + (here->BSIM4v7gmbs + here->BSIM4v7gbbs + here->BSIM4v7ggidlb) * delvbs + (here->BSIM4v7gm + here->BSIM4v7gbgs + here->BSIM4v7ggidlg) * delvgs + (here->BSIM4v7gds + here->BSIM4v7gbds + here->BSIM4v7ggidld) * delvds; Igstot = here->BSIM4v7Igs + here->BSIM4v7Igcs; cgshat = Igstot + (here->BSIM4v7gIgsg + here->BSIM4v7gIgcsg) * delvgs + here->BSIM4v7gIgcsd * delvds + here->BSIM4v7gIgcsb * delvbs; Igdtot = here->BSIM4v7Igd + here->BSIM4v7Igcd; cgdhat = Igdtot + here->BSIM4v7gIgdg * delvgd + here->BSIM4v7gIgcdg * delvgs + here->BSIM4v7gIgcdd * delvds + here->BSIM4v7gIgcdb * delvbs; Igbtot = here->BSIM4v7Igb; cgbhat = here->BSIM4v7Igb + here->BSIM4v7gIgbg * delvgs + here->BSIM4v7gIgbd * delvds + here->BSIM4v7gIgbb * delvbs; } else { Idtot = here->BSIM4v7cd + here->BSIM4v7cbd - here->BSIM4v7Igidl; /* bugfix */ cdhat = Idtot + here->BSIM4v7gbd * delvbd_jct + here->BSIM4v7gmbs * delvbd + here->BSIM4v7gm * delvgd - (here->BSIM4v7gds + here->BSIM4v7ggidls) * delvds - here->BSIM4v7ggidlg * delvgs - here->BSIM4v7ggidlb * delvbs; Igstot = here->BSIM4v7Igs + here->BSIM4v7Igcd; cgshat = Igstot + here->BSIM4v7gIgsg * delvgs + here->BSIM4v7gIgcdg * delvgd - here->BSIM4v7gIgcdd * delvds + here->BSIM4v7gIgcdb * delvbd; Igdtot = here->BSIM4v7Igd + here->BSIM4v7Igcs; cgdhat = Igdtot + (here->BSIM4v7gIgdg + here->BSIM4v7gIgcsg) * delvgd - here->BSIM4v7gIgcsd * delvds + here->BSIM4v7gIgcsb * delvbd; Igbtot = here->BSIM4v7Igb; cgbhat = here->BSIM4v7Igb + here->BSIM4v7gIgbg * delvgd - here->BSIM4v7gIgbd * delvds + here->BSIM4v7gIgbb * delvbd; } Isestot = here->BSIM4v7gstot * (*(ckt->CKTstate0 + here->BSIM4v7vses)); cseshat = Isestot + here->BSIM4v7gstot * delvses + here->BSIM4v7gstotd * delvds + here->BSIM4v7gstotg * delvgs + here->BSIM4v7gstotb * delvbs; Idedtot = here->BSIM4v7gdtot * vdedo; cdedhat = Idedtot + here->BSIM4v7gdtot * delvded + here->BSIM4v7gdtotd * delvds + here->BSIM4v7gdtotg * delvgs + here->BSIM4v7gdtotb * delvbs; /* * Check convergence */ if ((here->BSIM4v7off == 0) || (!(ckt->CKTmode & MODEINITFIX))) { tol0 = ckt->CKTreltol * MAX(fabs(cdhat), fabs(Idtot)) + ckt->CKTabstol; tol1 = ckt->CKTreltol * MAX(fabs(cseshat), fabs(Isestot)) + ckt->CKTabstol; tol2 = ckt->CKTreltol * MAX(fabs(cdedhat), fabs(Idedtot)) + ckt->CKTabstol; tol3 = ckt->CKTreltol * MAX(fabs(cgshat), fabs(Igstot)) + ckt->CKTabstol; tol4 = ckt->CKTreltol * MAX(fabs(cgdhat), fabs(Igdtot)) + ckt->CKTabstol; tol5 = ckt->CKTreltol * MAX(fabs(cgbhat), fabs(Igbtot)) + ckt->CKTabstol; if ((fabs(cdhat - Idtot) >= tol0) || (fabs(cseshat - Isestot) >= tol1) || (fabs(cdedhat - Idedtot) >= tol2)) { ckt->CKTnoncon++; return(OK); } if ((fabs(cgshat - Igstot) >= tol3) || (fabs(cgdhat - Igdtot) >= tol4) || (fabs(cgbhat - Igbtot) >= tol5)) { ckt->CKTnoncon++; return(OK); } Ibtot = here->BSIM4v7cbs + here->BSIM4v7cbd - here->BSIM4v7Igidl - here->BSIM4v7Igisl - here->BSIM4v7csub; if (here->BSIM4v7mode >= 0) { cbhat = Ibtot + here->BSIM4v7gbd * delvbd_jct + here->BSIM4v7gbs * delvbs_jct - (here->BSIM4v7gbbs + here->BSIM4v7ggidlb) * delvbs - (here->BSIM4v7gbgs + here->BSIM4v7ggidlg) * delvgs - (here->BSIM4v7gbds + here->BSIM4v7ggidld) * delvds - here->BSIM4v7ggislg * delvgd - here->BSIM4v7ggislb* delvbd + here->BSIM4v7ggisls * delvds ; } else { cbhat = Ibtot + here->BSIM4v7gbs * delvbs_jct + here->BSIM4v7gbd * delvbd_jct - (here->BSIM4v7gbbs + here->BSIM4v7ggislb) * delvbd - (here->BSIM4v7gbgs + here->BSIM4v7ggislg) * delvgd + (here->BSIM4v7gbds + here->BSIM4v7ggisld - here->BSIM4v7ggidls) * delvds - here->BSIM4v7ggidlg * delvgs - here->BSIM4v7ggidlb * delvbs; } tol6 = ckt->CKTreltol * MAX(fabs(cbhat), fabs(Ibtot)) + ckt->CKTabstol; if (fabs(cbhat - Ibtot) > tol6) { ckt->CKTnoncon++; return(OK); } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v7/bsim4v7itf.h0000644000175000017500000000037713546075722022634 0ustar carstencarsten/********** Copyright 2004 Regents of the University of California. All rights reserved. Author: 2000 Weidong Liu. Author: 2001- Xuemei Xi File: bsim4v7itf.h **********/ #ifndef DEV_BSIM4v7 #define DEV_BSIM4v7 SPICEdev *get_bsim4v7_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/bsim4v7/bsim4v7def.h0000644000175000017500000037070313546075722022613 0ustar carstencarsten/**** BSIM4v7.6.2 Released by Wenwei Yang 07/31/2008 ****/ /********** Copyright 2006 Regents of the University of California. All rights reserved. File: bsim4v7def.h Author: 2000 Weidong Liu. Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu Authors: 2008- Wenwei Yang, Ali Niknejad, Chenming Hu Modified by Xuemei Xi, 11/15/2002. Modified by Xuemei Xi, 05/09/2003. Modified by Xuemei Xi, 03/04/2004. Modified by Xuemei Xi, Mohan Dunga, 09/24/2004. Modified by Xuemei Xi, 07/29/2005. Modified by Mohan Dunga, 12/13/2006 Modified by Mohan Dunga, Wenwei Yang, 05/18/2007. Modified by Wenwei Yang, 07/31/2008. * Modified by Tanvir Morshed, Darsen Lu 03/27/2011 **********/ #ifndef BSIM4v7 #define BSIM4v7 #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" typedef struct sBSIM4v7instance { struct GENinstance gen; #define BSIM4v7modPtr(inst) ((struct sBSIM4v7model *)((inst)->gen.GENmodPtr)) #define BSIM4v7nextInstance(inst) ((struct sBSIM4v7instance *)((inst)->gen.GENnextInstance)) #define BSIM4v7name gen.GENname #define BSIM4v7states gen.GENstate const int BSIM4v7dNode; const int BSIM4v7gNodeExt; const int BSIM4v7sNode; const int BSIM4v7bNode; int BSIM4v7dNodePrime; int BSIM4v7gNodePrime; int BSIM4v7gNodeMid; int BSIM4v7sNodePrime; int BSIM4v7bNodePrime; int BSIM4v7dbNode; int BSIM4v7sbNode; int BSIM4v7qNode; double BSIM4v7ueff; double BSIM4v7thetavth; double BSIM4v7von; double BSIM4v7vdsat; double BSIM4v7cgdo; double BSIM4v7qgdo; double BSIM4v7cgso; double BSIM4v7qgso; double BSIM4v7grbsb; double BSIM4v7grbdb; double BSIM4v7grbpb; double BSIM4v7grbps; double BSIM4v7grbpd; double BSIM4v7vjsmFwd; double BSIM4v7vjsmRev; double BSIM4v7vjdmFwd; double BSIM4v7vjdmRev; double BSIM4v7XExpBVS; double BSIM4v7XExpBVD; double BSIM4v7SslpFwd; double BSIM4v7SslpRev; double BSIM4v7DslpFwd; double BSIM4v7DslpRev; double BSIM4v7IVjsmFwd; double BSIM4v7IVjsmRev; double BSIM4v7IVjdmFwd; double BSIM4v7IVjdmRev; double BSIM4v7grgeltd; double BSIM4v7Pseff; double BSIM4v7Pdeff; double BSIM4v7Aseff; double BSIM4v7Adeff; double BSIM4v7l; double BSIM4v7w; double BSIM4v7drainArea; double BSIM4v7sourceArea; double BSIM4v7drainSquares; double BSIM4v7sourceSquares; double BSIM4v7drainPerimeter; double BSIM4v7sourcePerimeter; double BSIM4v7sourceConductance; double BSIM4v7drainConductance; /* stress effect instance param */ double BSIM4v7sa; double BSIM4v7sb; double BSIM4v7sd; double BSIM4v7sca; double BSIM4v7scb; double BSIM4v7scc; double BSIM4v7sc; double BSIM4v7rbdb; double BSIM4v7rbsb; double BSIM4v7rbpb; double BSIM4v7rbps; double BSIM4v7rbpd; double BSIM4v7delvto; double BSIM4v7mulu0; double BSIM4v7xgw; double BSIM4v7ngcon; /* added here to account stress effect instance dependence */ double BSIM4v7u0temp; double BSIM4v7vsattemp; double BSIM4v7vth0; double BSIM4v7vfb; double BSIM4v7vfbzb; double BSIM4v7vtfbphi1; double BSIM4v7vtfbphi2; double BSIM4v7k2; double BSIM4v7vbsc; double BSIM4v7k2ox; double BSIM4v7eta0; double BSIM4v7icVDS; double BSIM4v7icVGS; double BSIM4v7icVBS; double BSIM4v7m; double BSIM4v7nf; int BSIM4v7off; int BSIM4v7mode; int BSIM4v7trnqsMod; int BSIM4v7acnqsMod; int BSIM4v7rbodyMod; int BSIM4v7rgateMod; int BSIM4v7geoMod; int BSIM4v7rgeoMod; int BSIM4v7min; /* OP point */ double BSIM4v7Vgsteff; double BSIM4v7vgs_eff; double BSIM4v7vgd_eff; double BSIM4v7dvgs_eff_dvg; double BSIM4v7dvgd_eff_dvg; double BSIM4v7Vdseff; double BSIM4v7nstar; double BSIM4v7Abulk; double BSIM4v7EsatL; double BSIM4v7AbovVgst2Vtm; double BSIM4v7qinv; double BSIM4v7cd; double BSIM4v7cbs; double BSIM4v7cbd; double BSIM4v7csub; double BSIM4v7Igidl; double BSIM4v7Igisl; double BSIM4v7gm; double BSIM4v7gds; double BSIM4v7gmbs; double BSIM4v7gbd; double BSIM4v7gbs; double BSIM4v7noiGd0; /* tnoiMod=2 (v4.7) */ double BSIM4v7Coxeff; double BSIM4v7gbbs; double BSIM4v7gbgs; double BSIM4v7gbds; double BSIM4v7ggidld; double BSIM4v7ggidlg; double BSIM4v7ggidls; double BSIM4v7ggidlb; double BSIM4v7ggisld; double BSIM4v7ggislg; double BSIM4v7ggisls; double BSIM4v7ggislb; double BSIM4v7Igcs; double BSIM4v7gIgcsg; double BSIM4v7gIgcsd; double BSIM4v7gIgcss; double BSIM4v7gIgcsb; double BSIM4v7Igcd; double BSIM4v7gIgcdg; double BSIM4v7gIgcdd; double BSIM4v7gIgcds; double BSIM4v7gIgcdb; double BSIM4v7Igs; double BSIM4v7gIgsg; double BSIM4v7gIgss; double BSIM4v7Igd; double BSIM4v7gIgdg; double BSIM4v7gIgdd; double BSIM4v7Igb; double BSIM4v7gIgbg; double BSIM4v7gIgbd; double BSIM4v7gIgbs; double BSIM4v7gIgbb; double BSIM4v7grdsw; double BSIM4v7IdovVds; double BSIM4v7gcrg; double BSIM4v7gcrgd; double BSIM4v7gcrgg; double BSIM4v7gcrgs; double BSIM4v7gcrgb; double BSIM4v7gstot; double BSIM4v7gstotd; double BSIM4v7gstotg; double BSIM4v7gstots; double BSIM4v7gstotb; double BSIM4v7gdtot; double BSIM4v7gdtotd; double BSIM4v7gdtotg; double BSIM4v7gdtots; double BSIM4v7gdtotb; double BSIM4v7cggb; double BSIM4v7cgdb; double BSIM4v7cgsb; double BSIM4v7cbgb; double BSIM4v7cbdb; double BSIM4v7cbsb; double BSIM4v7cdgb; double BSIM4v7cddb; double BSIM4v7cdsb; double BSIM4v7csgb; double BSIM4v7csdb; double BSIM4v7cssb; double BSIM4v7cgbb; double BSIM4v7cdbb; double BSIM4v7csbb; double BSIM4v7cbbb; double BSIM4v7capbd; double BSIM4v7capbs; double BSIM4v7cqgb; double BSIM4v7cqdb; double BSIM4v7cqsb; double BSIM4v7cqbb; double BSIM4v7qgate; double BSIM4v7qbulk; double BSIM4v7qdrn; double BSIM4v7qsrc; double BSIM4v7qdef; double BSIM4v7qchqs; double BSIM4v7taunet; double BSIM4v7gtau; double BSIM4v7gtg; double BSIM4v7gtd; double BSIM4v7gts; double BSIM4v7gtb; double BSIM4v7SjctTempRevSatCur; double BSIM4v7DjctTempRevSatCur; double BSIM4v7SswTempRevSatCur; double BSIM4v7DswTempRevSatCur; double BSIM4v7SswgTempRevSatCur; double BSIM4v7DswgTempRevSatCur; struct bsim4SizeDependParam *pParam; unsigned BSIM4v7lGiven :1; unsigned BSIM4v7wGiven :1; unsigned BSIM4v7mGiven :1; unsigned BSIM4v7nfGiven :1; unsigned BSIM4v7minGiven :1; unsigned BSIM4v7drainAreaGiven :1; unsigned BSIM4v7sourceAreaGiven :1; unsigned BSIM4v7drainSquaresGiven :1; unsigned BSIM4v7sourceSquaresGiven :1; unsigned BSIM4v7drainPerimeterGiven :1; unsigned BSIM4v7sourcePerimeterGiven :1; unsigned BSIM4v7saGiven :1; unsigned BSIM4v7sbGiven :1; unsigned BSIM4v7sdGiven :1; unsigned BSIM4v7scaGiven :1; unsigned BSIM4v7scbGiven :1; unsigned BSIM4v7sccGiven :1; unsigned BSIM4v7scGiven :1; unsigned BSIM4v7rbdbGiven :1; unsigned BSIM4v7rbsbGiven :1; unsigned BSIM4v7rbpbGiven :1; unsigned BSIM4v7rbpdGiven :1; unsigned BSIM4v7rbpsGiven :1; unsigned BSIM4v7delvtoGiven :1; unsigned BSIM4v7mulu0Given :1; unsigned BSIM4v7xgwGiven :1; unsigned BSIM4v7ngconGiven :1; unsigned BSIM4v7icVDSGiven :1; unsigned BSIM4v7icVGSGiven :1; unsigned BSIM4v7icVBSGiven :1; unsigned BSIM4v7trnqsModGiven :1; unsigned BSIM4v7acnqsModGiven :1; unsigned BSIM4v7rbodyModGiven :1; unsigned BSIM4v7rgateModGiven :1; unsigned BSIM4v7geoModGiven :1; unsigned BSIM4v7rgeoModGiven :1; double *BSIM4v7DPdPtr; double *BSIM4v7DPdpPtr; double *BSIM4v7DPgpPtr; double *BSIM4v7DPgmPtr; double *BSIM4v7DPspPtr; double *BSIM4v7DPbpPtr; double *BSIM4v7DPdbPtr; double *BSIM4v7DdPtr; double *BSIM4v7DdpPtr; double *BSIM4v7GPdpPtr; double *BSIM4v7GPgpPtr; double *BSIM4v7GPgmPtr; double *BSIM4v7GPgePtr; double *BSIM4v7GPspPtr; double *BSIM4v7GPbpPtr; double *BSIM4v7GMdpPtr; double *BSIM4v7GMgpPtr; double *BSIM4v7GMgmPtr; double *BSIM4v7GMgePtr; double *BSIM4v7GMspPtr; double *BSIM4v7GMbpPtr; double *BSIM4v7GEdpPtr; double *BSIM4v7GEgpPtr; double *BSIM4v7GEgmPtr; double *BSIM4v7GEgePtr; double *BSIM4v7GEspPtr; double *BSIM4v7GEbpPtr; double *BSIM4v7SPdpPtr; double *BSIM4v7SPgpPtr; double *BSIM4v7SPgmPtr; double *BSIM4v7SPsPtr; double *BSIM4v7SPspPtr; double *BSIM4v7SPbpPtr; double *BSIM4v7SPsbPtr; double *BSIM4v7SspPtr; double *BSIM4v7SsPtr; double *BSIM4v7BPdpPtr; double *BSIM4v7BPgpPtr; double *BSIM4v7BPgmPtr; double *BSIM4v7BPspPtr; double *BSIM4v7BPdbPtr; double *BSIM4v7BPbPtr; double *BSIM4v7BPsbPtr; double *BSIM4v7BPbpPtr; double *BSIM4v7DBdpPtr; double *BSIM4v7DBdbPtr; double *BSIM4v7DBbpPtr; double *BSIM4v7DBbPtr; double *BSIM4v7SBspPtr; double *BSIM4v7SBbpPtr; double *BSIM4v7SBbPtr; double *BSIM4v7SBsbPtr; double *BSIM4v7BdbPtr; double *BSIM4v7BbpPtr; double *BSIM4v7BsbPtr; double *BSIM4v7BbPtr; double *BSIM4v7DgpPtr; double *BSIM4v7DspPtr; double *BSIM4v7DbpPtr; double *BSIM4v7SdpPtr; double *BSIM4v7SgpPtr; double *BSIM4v7SbpPtr; double *BSIM4v7QdpPtr; double *BSIM4v7QgpPtr; double *BSIM4v7QspPtr; double *BSIM4v7QbpPtr; double *BSIM4v7QqPtr; double *BSIM4v7DPqPtr; double *BSIM4v7GPqPtr; double *BSIM4v7SPqPtr; #ifdef USE_OMP /* per instance storage of results, to update matrix at a later stge */ double BSIM4v7rhsdPrime; double BSIM4v7rhsgPrime; double BSIM4v7rhsgExt; double BSIM4v7grhsMid; double BSIM4v7rhsbPrime; double BSIM4v7rhssPrime; double BSIM4v7rhsdb; double BSIM4v7rhssb; double BSIM4v7rhsd; double BSIM4v7rhss; double BSIM4v7rhsq; double BSIM4v7_1; double BSIM4v7_2; double BSIM4v7_3; double BSIM4v7_4; double BSIM4v7_5; double BSIM4v7_6; double BSIM4v7_7; double BSIM4v7_8; double BSIM4v7_9; double BSIM4v7_10; double BSIM4v7_11; double BSIM4v7_12; double BSIM4v7_13; double BSIM4v7_14; double BSIM4v7_15; double BSIM4v7_16; double BSIM4v7_17; double BSIM4v7_18; double BSIM4v7_19; double BSIM4v7_20; double BSIM4v7_21; double BSIM4v7_22; double BSIM4v7_23; double BSIM4v7_24; double BSIM4v7_25; double BSIM4v7_26; double BSIM4v7_27; double BSIM4v7_28; double BSIM4v7_29; double BSIM4v7_30; double BSIM4v7_31; double BSIM4v7_32; double BSIM4v7_33; double BSIM4v7_34; double BSIM4v7_35; double BSIM4v7_36; double BSIM4v7_37; double BSIM4v7_38; double BSIM4v7_39; double BSIM4v7_40; double BSIM4v7_41; double BSIM4v7_42; double BSIM4v7_43; double BSIM4v7_44; double BSIM4v7_45; double BSIM4v7_46; double BSIM4v7_47; double BSIM4v7_48; double BSIM4v7_49; double BSIM4v7_50; double BSIM4v7_51; double BSIM4v7_52; double BSIM4v7_53; double BSIM4v7_54; double BSIM4v7_55; double BSIM4v7_56; double BSIM4v7_57; double BSIM4v7_58; double BSIM4v7_59; double BSIM4v7_60; double BSIM4v7_61; double BSIM4v7_62; double BSIM4v7_63; double BSIM4v7_64; double BSIM4v7_65; double BSIM4v7_66; double BSIM4v7_67; double BSIM4v7_68; double BSIM4v7_69; double BSIM4v7_70; double BSIM4v7_71; double BSIM4v7_72; double BSIM4v7_73; double BSIM4v7_74; double BSIM4v7_75; double BSIM4v7_76; double BSIM4v7_77; double BSIM4v7_78; double BSIM4v7_79; double BSIM4v7_80; double BSIM4v7_81; double BSIM4v7_82; double BSIM4v7_83; double BSIM4v7_84; double BSIM4v7_85; double BSIM4v7_86; double BSIM4v7_87; double BSIM4v7_88; double BSIM4v7_89; double BSIM4v7_90; double BSIM4v7_91; double BSIM4v7_92; double BSIM4v7_93; double BSIM4v7_94; double BSIM4v7_95; double BSIM4v7_96; double BSIM4v7_97; double BSIM4v7_98; double BSIM4v7_99; double BSIM4v7_100; double BSIM4v7_101; double BSIM4v7_102; double BSIM4v7_103; #endif #define BSIM4v7vbd BSIM4v7states+ 0 #define BSIM4v7vbs BSIM4v7states+ 1 #define BSIM4v7vgs BSIM4v7states+ 2 #define BSIM4v7vds BSIM4v7states+ 3 #define BSIM4v7vdbs BSIM4v7states+ 4 #define BSIM4v7vdbd BSIM4v7states+ 5 #define BSIM4v7vsbs BSIM4v7states+ 6 #define BSIM4v7vges BSIM4v7states+ 7 #define BSIM4v7vgms BSIM4v7states+ 8 #define BSIM4v7vses BSIM4v7states+ 9 #define BSIM4v7vdes BSIM4v7states+ 10 #define BSIM4v7qb BSIM4v7states+ 11 #define BSIM4v7cqb BSIM4v7states+ 12 #define BSIM4v7qg BSIM4v7states+ 13 #define BSIM4v7cqg BSIM4v7states+ 14 #define BSIM4v7qd BSIM4v7states+ 15 #define BSIM4v7cqd BSIM4v7states+ 16 #define BSIM4v7qgmid BSIM4v7states+ 17 #define BSIM4v7cqgmid BSIM4v7states+ 18 #define BSIM4v7qbs BSIM4v7states+ 19 #define BSIM4v7cqbs BSIM4v7states+ 20 #define BSIM4v7qbd BSIM4v7states+ 21 #define BSIM4v7cqbd BSIM4v7states+ 22 #define BSIM4v7qcheq BSIM4v7states+ 23 #define BSIM4v7cqcheq BSIM4v7states+ 24 #define BSIM4v7qcdump BSIM4v7states+ 25 #define BSIM4v7cqcdump BSIM4v7states+ 26 #define BSIM4v7qdef BSIM4v7states+ 27 #define BSIM4v7qs BSIM4v7states+ 28 #define BSIM4v7numStates 29 /* indices to the array of BSIM4v7 NOISE SOURCES */ #define BSIM4v7RDNOIZ 0 #define BSIM4v7RSNOIZ 1 #define BSIM4v7RGNOIZ 2 #define BSIM4v7RBPSNOIZ 3 #define BSIM4v7RBPDNOIZ 4 #define BSIM4v7RBPBNOIZ 5 #define BSIM4v7RBSBNOIZ 6 #define BSIM4v7RBDBNOIZ 7 #define BSIM4v7IDNOIZ 8 #define BSIM4v7FLNOIZ 9 #define BSIM4v7IGSNOIZ 10 #define BSIM4v7IGDNOIZ 11 #define BSIM4v7IGBNOIZ 12 #define BSIM4v7CORLNOIZ 13 #define BSIM4v7TOTNOIZ 14 #define BSIM4v7NSRCS 15 /* Number of BSIM4v7 noise sources */ #ifndef NONOISE double BSIM4v7nVar[NSTATVARS][BSIM4v7NSRCS]; #else /* NONOISE */ double **BSIM4v7nVar; #endif /* NONOISE */ } BSIM4v7instance ; struct bsim4SizeDependParam { double Width; double Length; double NFinger; double BSIM4v7cdsc; double BSIM4v7cdscb; double BSIM4v7cdscd; double BSIM4v7cit; double BSIM4v7nfactor; double BSIM4v7xj; double BSIM4v7vsat; double BSIM4v7at; double BSIM4v7a0; double BSIM4v7ags; double BSIM4v7a1; double BSIM4v7a2; double BSIM4v7keta; double BSIM4v7nsub; double BSIM4v7ndep; double BSIM4v7nsd; double BSIM4v7phin; double BSIM4v7ngate; double BSIM4v7gamma1; double BSIM4v7gamma2; double BSIM4v7vbx; double BSIM4v7vbi; double BSIM4v7vbm; double BSIM4v7xt; double BSIM4v7phi; double BSIM4v7litl; double BSIM4v7k1; double BSIM4v7kt1; double BSIM4v7kt1l; double BSIM4v7kt2; double BSIM4v7k2; double BSIM4v7k3; double BSIM4v7k3b; double BSIM4v7w0; double BSIM4v7dvtp0; double BSIM4v7dvtp1; double BSIM4v7dvtp2; /* New DIBL/Rout */ double BSIM4v7dvtp3; double BSIM4v7dvtp4; double BSIM4v7dvtp5; double BSIM4v7lpe0; double BSIM4v7lpeb; double BSIM4v7dvt0; double BSIM4v7dvt1; double BSIM4v7dvt2; double BSIM4v7dvt0w; double BSIM4v7dvt1w; double BSIM4v7dvt2w; double BSIM4v7drout; double BSIM4v7dsub; double BSIM4v7vth0; double BSIM4v7ua; double BSIM4v7ua1; double BSIM4v7ub; double BSIM4v7ub1; double BSIM4v7uc; double BSIM4v7uc1; double BSIM4v7ud; double BSIM4v7ud1; double BSIM4v7up; double BSIM4v7lp; double BSIM4v7u0; double BSIM4v7eu; double BSIM4v7ucs; double BSIM4v7ute; double BSIM4v7ucste; double BSIM4v7voff; double BSIM4v7tvoff; double BSIM4v7tnfactor; /* v4.7 Temp dep of leakage current */ double BSIM4v7teta0; /* v4.7 temp dep of leakage current */ double BSIM4v7tvoffcv; /* v4.7 temp dep of leakage current */ double BSIM4v7minv; double BSIM4v7minvcv; double BSIM4v7vfb; double BSIM4v7delta; double BSIM4v7rdsw; double BSIM4v7rds0; double BSIM4v7rs0; double BSIM4v7rd0; double BSIM4v7rsw; double BSIM4v7rdw; double BSIM4v7prwg; double BSIM4v7prwb; double BSIM4v7prt; double BSIM4v7eta0; double BSIM4v7etab; double BSIM4v7pclm; double BSIM4v7pdibl1; double BSIM4v7pdibl2; double BSIM4v7pdiblb; double BSIM4v7fprout; double BSIM4v7pdits; double BSIM4v7pditsd; double BSIM4v7pscbe1; double BSIM4v7pscbe2; double BSIM4v7pvag; double BSIM4v7wr; double BSIM4v7dwg; double BSIM4v7dwb; double BSIM4v7b0; double BSIM4v7b1; double BSIM4v7alpha0; double BSIM4v7alpha1; double BSIM4v7beta0; double BSIM4v7agidl; double BSIM4v7bgidl; double BSIM4v7cgidl; double BSIM4v7egidl; double BSIM4v7fgidl; /* v4.7 New GIDL/GISL */ double BSIM4v7kgidl; /* v4.7 New GIDL/GISL */ double BSIM4v7rgidl; /* v4.7 New GIDL/GISL */ double BSIM4v7agisl; double BSIM4v7bgisl; double BSIM4v7cgisl; double BSIM4v7egisl; double BSIM4v7fgisl; /* v4.7 New GIDL/GISL */ double BSIM4v7kgisl; /* v4.7 New GIDL/GISL */ double BSIM4v7rgisl; /* v4.7 New GIDL/GISL */ double BSIM4v7aigc; double BSIM4v7bigc; double BSIM4v7cigc; double BSIM4v7aigs; double BSIM4v7bigs; double BSIM4v7cigs; double BSIM4v7aigd; double BSIM4v7bigd; double BSIM4v7cigd; double BSIM4v7aigbacc; double BSIM4v7bigbacc; double BSIM4v7cigbacc; double BSIM4v7aigbinv; double BSIM4v7bigbinv; double BSIM4v7cigbinv; double BSIM4v7nigc; double BSIM4v7nigbacc; double BSIM4v7nigbinv; double BSIM4v7ntox; double BSIM4v7eigbinv; double BSIM4v7pigcd; double BSIM4v7poxedge; double BSIM4v7xrcrg1; double BSIM4v7xrcrg2; double BSIM4v7lambda; /* overshoot */ double BSIM4v7vtl; /* thermal velocity limit */ double BSIM4v7xn; /* back scattering parameter */ double BSIM4v7lc; /* back scattering parameter */ double BSIM4v7tfactor; /* ballistic transportation factor */ double BSIM4v7vfbsdoff; /* S/D flatband offset voltage */ double BSIM4v7tvfbsdoff; /* added for stress effect */ double BSIM4v7ku0; double BSIM4v7kvth0; double BSIM4v7ku0temp; double BSIM4v7rho_ref; double BSIM4v7inv_od_ref; /* added for well proximity effect */ double BSIM4v7kvth0we; double BSIM4v7k2we; double BSIM4v7ku0we; /* CV model */ double BSIM4v7cgsl; double BSIM4v7cgdl; double BSIM4v7ckappas; double BSIM4v7ckappad; double BSIM4v7cf; double BSIM4v7clc; double BSIM4v7cle; double BSIM4v7vfbcv; double BSIM4v7noff; double BSIM4v7voffcv; double BSIM4v7acde; double BSIM4v7moin; /* Pre-calculated constants */ double BSIM4v7dw; double BSIM4v7dl; double BSIM4v7leff; double BSIM4v7weff; double BSIM4v7dwc; double BSIM4v7dlc; double BSIM4v7dwj; double BSIM4v7leffCV; double BSIM4v7weffCV; double BSIM4v7weffCJ; double BSIM4v7abulkCVfactor; double BSIM4v7cgso; double BSIM4v7cgdo; double BSIM4v7cgbo; double BSIM4v7u0temp; double BSIM4v7vsattemp; double BSIM4v7sqrtPhi; double BSIM4v7phis3; double BSIM4v7Xdep0; double BSIM4v7sqrtXdep0; double BSIM4v7theta0vb0; double BSIM4v7thetaRout; double BSIM4v7mstar; double BSIM4v7VgsteffVth; double BSIM4v7mstarcv; double BSIM4v7voffcbn; double BSIM4v7voffcbncv; double BSIM4v7rdswmin; double BSIM4v7rdwmin; double BSIM4v7rswmin; double BSIM4v7vfbsd; double BSIM4v7cof1; double BSIM4v7cof2; double BSIM4v7cof3; double BSIM4v7cof4; double BSIM4v7cdep0; double BSIM4v7ToxRatio; double BSIM4v7Aechvb; double BSIM4v7Bechvb; double BSIM4v7ToxRatioEdge; double BSIM4v7AechvbEdgeS; double BSIM4v7AechvbEdgeD; double BSIM4v7BechvbEdge; double BSIM4v7ldeb; double BSIM4v7k1ox; double BSIM4v7k2ox; double BSIM4v7vfbzbfactor; double BSIM4v7dvtp2factor; /* v4.7 */ struct bsim4SizeDependParam *pNext; }; typedef struct sBSIM4v7model { struct GENmodel gen; #define BSIM4v7modType gen.GENmodType #define BSIM4v7nextModel(inst) ((struct sBSIM4v7model *)((inst)->gen.GENnextModel)) #define BSIM4v7instances(inst) ((BSIM4v7instance *)((inst)->gen.GENinstances)) #define BSIM4v7modName gen.GENmodName int BSIM4v7type; int BSIM4v7mobMod; int BSIM4v7cvchargeMod; int BSIM4v7capMod; int BSIM4v7dioMod; int BSIM4v7trnqsMod; int BSIM4v7acnqsMod; int BSIM4v7fnoiMod; int BSIM4v7tnoiMod; int BSIM4v7rdsMod; int BSIM4v7rbodyMod; int BSIM4v7rgateMod; int BSIM4v7perMod; int BSIM4v7geoMod; int BSIM4v7rgeoMod; int BSIM4v7mtrlMod; int BSIM4v7mtrlCompatMod; /* v4.7 */ int BSIM4v7gidlMod; /* v4.7 New GIDL/GISL */ int BSIM4v7igcMod; int BSIM4v7igbMod; int BSIM4v7tempMod; int BSIM4v7binUnit; int BSIM4v7paramChk; char *BSIM4v7version; double BSIM4v7eot; double BSIM4v7vddeot; double BSIM4v7tempeot; double BSIM4v7leffeot; double BSIM4v7weffeot; double BSIM4v7ados; double BSIM4v7bdos; double BSIM4v7toxe; double BSIM4v7toxp; double BSIM4v7toxm; double BSIM4v7dtox; double BSIM4v7epsrox; double BSIM4v7cdsc; double BSIM4v7cdscb; double BSIM4v7cdscd; double BSIM4v7cit; double BSIM4v7nfactor; double BSIM4v7xj; double BSIM4v7vsat; double BSIM4v7at; double BSIM4v7a0; double BSIM4v7ags; double BSIM4v7a1; double BSIM4v7a2; double BSIM4v7keta; double BSIM4v7nsub; double BSIM4v7phig; double BSIM4v7epsrgate; double BSIM4v7easub; double BSIM4v7epsrsub; double BSIM4v7ni0sub; double BSIM4v7bg0sub; double BSIM4v7tbgasub; double BSIM4v7tbgbsub; double BSIM4v7ndep; double BSIM4v7nsd; double BSIM4v7phin; double BSIM4v7ngate; double BSIM4v7gamma1; double BSIM4v7gamma2; double BSIM4v7vbx; double BSIM4v7vbm; double BSIM4v7xt; double BSIM4v7k1; double BSIM4v7kt1; double BSIM4v7kt1l; double BSIM4v7kt2; double BSIM4v7k2; double BSIM4v7k3; double BSIM4v7k3b; double BSIM4v7w0; double BSIM4v7dvtp0; double BSIM4v7dvtp1; double BSIM4v7dvtp2; /* New DIBL/Rout */ double BSIM4v7dvtp3; double BSIM4v7dvtp4; double BSIM4v7dvtp5; double BSIM4v7lpe0; double BSIM4v7lpeb; double BSIM4v7dvt0; double BSIM4v7dvt1; double BSIM4v7dvt2; double BSIM4v7dvt0w; double BSIM4v7dvt1w; double BSIM4v7dvt2w; double BSIM4v7drout; double BSIM4v7dsub; double BSIM4v7vth0; double BSIM4v7eu; double BSIM4v7ucs; double BSIM4v7ua; double BSIM4v7ua1; double BSIM4v7ub; double BSIM4v7ub1; double BSIM4v7uc; double BSIM4v7uc1; double BSIM4v7ud; double BSIM4v7ud1; double BSIM4v7up; double BSIM4v7lp; double BSIM4v7u0; double BSIM4v7ute; double BSIM4v7ucste; double BSIM4v7voff; double BSIM4v7tvoff; double BSIM4v7tnfactor; /* v4.7 Temp dep of leakage current */ double BSIM4v7teta0; /* v4.7 temp dep of leakage current */ double BSIM4v7tvoffcv; /* v4.7 temp dep of leakage current */ double BSIM4v7minv; double BSIM4v7minvcv; double BSIM4v7voffl; double BSIM4v7voffcvl; double BSIM4v7delta; double BSIM4v7rdsw; double BSIM4v7rdswmin; double BSIM4v7rdwmin; double BSIM4v7rswmin; double BSIM4v7rsw; double BSIM4v7rdw; double BSIM4v7prwg; double BSIM4v7prwb; double BSIM4v7prt; double BSIM4v7eta0; double BSIM4v7etab; double BSIM4v7pclm; double BSIM4v7pdibl1; double BSIM4v7pdibl2; double BSIM4v7pdiblb; double BSIM4v7fprout; double BSIM4v7pdits; double BSIM4v7pditsd; double BSIM4v7pditsl; double BSIM4v7pscbe1; double BSIM4v7pscbe2; double BSIM4v7pvag; double BSIM4v7wr; double BSIM4v7dwg; double BSIM4v7dwb; double BSIM4v7b0; double BSIM4v7b1; double BSIM4v7alpha0; double BSIM4v7alpha1; double BSIM4v7beta0; double BSIM4v7agidl; double BSIM4v7bgidl; double BSIM4v7cgidl; double BSIM4v7egidl; double BSIM4v7fgidl; /* v4.7 New GIDL/GISL */ double BSIM4v7kgidl; /* v4.7 New GIDL/GISL */ double BSIM4v7rgidl; /* v4.7 New GIDL/GISL */ double BSIM4v7agisl; double BSIM4v7bgisl; double BSIM4v7cgisl; double BSIM4v7egisl; double BSIM4v7fgisl; /* v4.7 New GIDL/GISL */ double BSIM4v7kgisl; /* v4.7 New GIDL/GISL */ double BSIM4v7rgisl; /* v4.7 New GIDL/GISL */ double BSIM4v7aigc; double BSIM4v7bigc; double BSIM4v7cigc; double BSIM4v7aigsd; double BSIM4v7bigsd; double BSIM4v7cigsd; double BSIM4v7aigs; double BSIM4v7bigs; double BSIM4v7cigs; double BSIM4v7aigd; double BSIM4v7bigd; double BSIM4v7cigd; double BSIM4v7aigbacc; double BSIM4v7bigbacc; double BSIM4v7cigbacc; double BSIM4v7aigbinv; double BSIM4v7bigbinv; double BSIM4v7cigbinv; double BSIM4v7nigc; double BSIM4v7nigbacc; double BSIM4v7nigbinv; double BSIM4v7ntox; double BSIM4v7eigbinv; double BSIM4v7pigcd; double BSIM4v7poxedge; double BSIM4v7toxref; double BSIM4v7ijthdfwd; double BSIM4v7ijthsfwd; double BSIM4v7ijthdrev; double BSIM4v7ijthsrev; double BSIM4v7xjbvd; double BSIM4v7xjbvs; double BSIM4v7bvd; double BSIM4v7bvs; double BSIM4v7jtss; double BSIM4v7jtsd; double BSIM4v7jtssws; double BSIM4v7jtsswd; double BSIM4v7jtsswgs; double BSIM4v7jtsswgd; double BSIM4v7jtweff; double BSIM4v7njts; double BSIM4v7njtssw; double BSIM4v7njtsswg; double BSIM4v7njtsd; double BSIM4v7njtsswd; double BSIM4v7njtsswgd; double BSIM4v7xtss; double BSIM4v7xtsd; double BSIM4v7xtssws; double BSIM4v7xtsswd; double BSIM4v7xtsswgs; double BSIM4v7xtsswgd; double BSIM4v7tnjts; double BSIM4v7tnjtssw; double BSIM4v7tnjtsswg; double BSIM4v7tnjtsd; double BSIM4v7tnjtsswd; double BSIM4v7tnjtsswgd; double BSIM4v7vtss; double BSIM4v7vtsd; double BSIM4v7vtssws; double BSIM4v7vtsswd; double BSIM4v7vtsswgs; double BSIM4v7vtsswgd; double BSIM4v7xrcrg1; double BSIM4v7xrcrg2; double BSIM4v7lambda; double BSIM4v7vtl; double BSIM4v7lc; double BSIM4v7xn; double BSIM4v7vfbsdoff; /* S/D flatband offset voltage */ double BSIM4v7lintnoi; /* lint offset for noise calculation */ double BSIM4v7tvfbsdoff; double BSIM4v7vfb; double BSIM4v7gbmin; double BSIM4v7rbdb; double BSIM4v7rbsb; double BSIM4v7rbpb; double BSIM4v7rbps; double BSIM4v7rbpd; double BSIM4v7rbps0; double BSIM4v7rbpsl; double BSIM4v7rbpsw; double BSIM4v7rbpsnf; double BSIM4v7rbpd0; double BSIM4v7rbpdl; double BSIM4v7rbpdw; double BSIM4v7rbpdnf; double BSIM4v7rbpbx0; double BSIM4v7rbpbxl; double BSIM4v7rbpbxw; double BSIM4v7rbpbxnf; double BSIM4v7rbpby0; double BSIM4v7rbpbyl; double BSIM4v7rbpbyw; double BSIM4v7rbpbynf; double BSIM4v7rbsbx0; double BSIM4v7rbsby0; double BSIM4v7rbdbx0; double BSIM4v7rbdby0; double BSIM4v7rbsdbxl; double BSIM4v7rbsdbxw; double BSIM4v7rbsdbxnf; double BSIM4v7rbsdbyl; double BSIM4v7rbsdbyw; double BSIM4v7rbsdbynf; double BSIM4v7tnoia; double BSIM4v7tnoib; double BSIM4v7tnoic; double BSIM4v7rnoia; double BSIM4v7rnoib; double BSIM4v7rnoic; double BSIM4v7ntnoi; /* CV model and Parasitics */ double BSIM4v7cgsl; double BSIM4v7cgdl; double BSIM4v7ckappas; double BSIM4v7ckappad; double BSIM4v7cf; double BSIM4v7vfbcv; double BSIM4v7clc; double BSIM4v7cle; double BSIM4v7dwc; double BSIM4v7dlc; double BSIM4v7xw; double BSIM4v7xl; double BSIM4v7dlcig; double BSIM4v7dlcigd; double BSIM4v7dwj; double BSIM4v7noff; double BSIM4v7voffcv; double BSIM4v7acde; double BSIM4v7moin; double BSIM4v7tcj; double BSIM4v7tcjsw; double BSIM4v7tcjswg; double BSIM4v7tpb; double BSIM4v7tpbsw; double BSIM4v7tpbswg; double BSIM4v7dmcg; double BSIM4v7dmci; double BSIM4v7dmdg; double BSIM4v7dmcgt; double BSIM4v7xgw; double BSIM4v7xgl; double BSIM4v7rshg; double BSIM4v7ngcon; /* Length Dependence */ double BSIM4v7lcdsc; double BSIM4v7lcdscb; double BSIM4v7lcdscd; double BSIM4v7lcit; double BSIM4v7lnfactor; double BSIM4v7lxj; double BSIM4v7lvsat; double BSIM4v7lat; double BSIM4v7la0; double BSIM4v7lags; double BSIM4v7la1; double BSIM4v7la2; double BSIM4v7lketa; double BSIM4v7lnsub; double BSIM4v7lndep; double BSIM4v7lnsd; double BSIM4v7lphin; double BSIM4v7lngate; double BSIM4v7lgamma1; double BSIM4v7lgamma2; double BSIM4v7lvbx; double BSIM4v7lvbm; double BSIM4v7lxt; double BSIM4v7lk1; double BSIM4v7lkt1; double BSIM4v7lkt1l; double BSIM4v7lkt2; double BSIM4v7lk2; double BSIM4v7lk3; double BSIM4v7lk3b; double BSIM4v7lw0; double BSIM4v7ldvtp0; double BSIM4v7ldvtp1; double BSIM4v7ldvtp2; /* New DIBL/Rout */ double BSIM4v7ldvtp3; double BSIM4v7ldvtp4; double BSIM4v7ldvtp5; double BSIM4v7llpe0; double BSIM4v7llpeb; double BSIM4v7ldvt0; double BSIM4v7ldvt1; double BSIM4v7ldvt2; double BSIM4v7ldvt0w; double BSIM4v7ldvt1w; double BSIM4v7ldvt2w; double BSIM4v7ldrout; double BSIM4v7ldsub; double BSIM4v7lvth0; double BSIM4v7lua; double BSIM4v7lua1; double BSIM4v7lub; double BSIM4v7lub1; double BSIM4v7luc; double BSIM4v7luc1; double BSIM4v7lud; double BSIM4v7lud1; double BSIM4v7lup; double BSIM4v7llp; double BSIM4v7lu0; double BSIM4v7leu; double BSIM4v7lucs; double BSIM4v7lute; double BSIM4v7lucste; double BSIM4v7lvoff; double BSIM4v7ltvoff; double BSIM4v7ltnfactor; /* v4.7 Temp dep of leakage current */ double BSIM4v7lteta0; /* v4.7 temp dep of leakage current */ double BSIM4v7ltvoffcv; /* v4.7 temp dep of leakage current */ double BSIM4v7lminv; double BSIM4v7lminvcv; double BSIM4v7ldelta; double BSIM4v7lrdsw; double BSIM4v7lrsw; double BSIM4v7lrdw; double BSIM4v7lprwg; double BSIM4v7lprwb; double BSIM4v7lprt; double BSIM4v7leta0; double BSIM4v7letab; double BSIM4v7lpclm; double BSIM4v7lpdibl1; double BSIM4v7lpdibl2; double BSIM4v7lpdiblb; double BSIM4v7lfprout; double BSIM4v7lpdits; double BSIM4v7lpditsd; double BSIM4v7lpscbe1; double BSIM4v7lpscbe2; double BSIM4v7lpvag; double BSIM4v7lwr; double BSIM4v7ldwg; double BSIM4v7ldwb; double BSIM4v7lb0; double BSIM4v7lb1; double BSIM4v7lalpha0; double BSIM4v7lalpha1; double BSIM4v7lbeta0; double BSIM4v7lvfb; double BSIM4v7lagidl; double BSIM4v7lbgidl; double BSIM4v7lcgidl; double BSIM4v7legidl; double BSIM4v7lfgidl; /* v4.7 New GIDL/GISL */ double BSIM4v7lkgidl; /* v4.7 New GIDL/GISL */ double BSIM4v7lrgidl; /* v4.7 New GIDL/GISL */ double BSIM4v7lagisl; double BSIM4v7lbgisl; double BSIM4v7lcgisl; double BSIM4v7legisl; double BSIM4v7lfgisl; /* v4.7 New GIDL/GISL */ double BSIM4v7lkgisl; /* v4.7 New GIDL/GISL */ double BSIM4v7lrgisl; /* v4.7 New GIDL/GISL */ double BSIM4v7laigc; double BSIM4v7lbigc; double BSIM4v7lcigc; double BSIM4v7laigsd; double BSIM4v7lbigsd; double BSIM4v7lcigsd; double BSIM4v7laigs; double BSIM4v7lbigs; double BSIM4v7lcigs; double BSIM4v7laigd; double BSIM4v7lbigd; double BSIM4v7lcigd; double BSIM4v7laigbacc; double BSIM4v7lbigbacc; double BSIM4v7lcigbacc; double BSIM4v7laigbinv; double BSIM4v7lbigbinv; double BSIM4v7lcigbinv; double BSIM4v7lnigc; double BSIM4v7lnigbacc; double BSIM4v7lnigbinv; double BSIM4v7lntox; double BSIM4v7leigbinv; double BSIM4v7lpigcd; double BSIM4v7lpoxedge; double BSIM4v7lxrcrg1; double BSIM4v7lxrcrg2; double BSIM4v7llambda; double BSIM4v7lvtl; double BSIM4v7lxn; double BSIM4v7lvfbsdoff; double BSIM4v7ltvfbsdoff; /* CV model */ double BSIM4v7lcgsl; double BSIM4v7lcgdl; double BSIM4v7lckappas; double BSIM4v7lckappad; double BSIM4v7lcf; double BSIM4v7lclc; double BSIM4v7lcle; double BSIM4v7lvfbcv; double BSIM4v7lnoff; double BSIM4v7lvoffcv; double BSIM4v7lacde; double BSIM4v7lmoin; /* Width Dependence */ double BSIM4v7wcdsc; double BSIM4v7wcdscb; double BSIM4v7wcdscd; double BSIM4v7wcit; double BSIM4v7wnfactor; double BSIM4v7wxj; double BSIM4v7wvsat; double BSIM4v7wat; double BSIM4v7wa0; double BSIM4v7wags; double BSIM4v7wa1; double BSIM4v7wa2; double BSIM4v7wketa; double BSIM4v7wnsub; double BSIM4v7wndep; double BSIM4v7wnsd; double BSIM4v7wphin; double BSIM4v7wngate; double BSIM4v7wgamma1; double BSIM4v7wgamma2; double BSIM4v7wvbx; double BSIM4v7wvbm; double BSIM4v7wxt; double BSIM4v7wk1; double BSIM4v7wkt1; double BSIM4v7wkt1l; double BSIM4v7wkt2; double BSIM4v7wk2; double BSIM4v7wk3; double BSIM4v7wk3b; double BSIM4v7ww0; double BSIM4v7wdvtp0; double BSIM4v7wdvtp1; double BSIM4v7wdvtp2; /* New DIBL/Rout */ double BSIM4v7wdvtp3; double BSIM4v7wdvtp4; double BSIM4v7wdvtp5; double BSIM4v7wlpe0; double BSIM4v7wlpeb; double BSIM4v7wdvt0; double BSIM4v7wdvt1; double BSIM4v7wdvt2; double BSIM4v7wdvt0w; double BSIM4v7wdvt1w; double BSIM4v7wdvt2w; double BSIM4v7wdrout; double BSIM4v7wdsub; double BSIM4v7wvth0; double BSIM4v7wua; double BSIM4v7wua1; double BSIM4v7wub; double BSIM4v7wub1; double BSIM4v7wuc; double BSIM4v7wuc1; double BSIM4v7wud; double BSIM4v7wud1; double BSIM4v7wup; double BSIM4v7wlp; double BSIM4v7wu0; double BSIM4v7weu; double BSIM4v7wucs; double BSIM4v7wute; double BSIM4v7wucste; double BSIM4v7wvoff; double BSIM4v7wtvoff; double BSIM4v7wtnfactor; /* v4.7 Temp dep of leakage current */ double BSIM4v7wteta0; /* v4.7 temp dep of leakage current */ double BSIM4v7wtvoffcv; /* v4.7 temp dep of leakage current */ double BSIM4v7wminv; double BSIM4v7wminvcv; double BSIM4v7wdelta; double BSIM4v7wrdsw; double BSIM4v7wrsw; double BSIM4v7wrdw; double BSIM4v7wprwg; double BSIM4v7wprwb; double BSIM4v7wprt; double BSIM4v7weta0; double BSIM4v7wetab; double BSIM4v7wpclm; double BSIM4v7wpdibl1; double BSIM4v7wpdibl2; double BSIM4v7wpdiblb; double BSIM4v7wfprout; double BSIM4v7wpdits; double BSIM4v7wpditsd; double BSIM4v7wpscbe1; double BSIM4v7wpscbe2; double BSIM4v7wpvag; double BSIM4v7wwr; double BSIM4v7wdwg; double BSIM4v7wdwb; double BSIM4v7wb0; double BSIM4v7wb1; double BSIM4v7walpha0; double BSIM4v7walpha1; double BSIM4v7wbeta0; double BSIM4v7wvfb; double BSIM4v7wagidl; double BSIM4v7wbgidl; double BSIM4v7wcgidl; double BSIM4v7wegidl; double BSIM4v7wfgidl; /* v4.7 New GIDL/GISL */ double BSIM4v7wkgidl; /* v4.7 New GIDL/GISL */ double BSIM4v7wrgidl; /* v4.7 New GIDL/GISL */ double BSIM4v7wagisl; double BSIM4v7wbgisl; double BSIM4v7wcgisl; double BSIM4v7wegisl; double BSIM4v7wfgisl; /* v4.7 New GIDL/GISL */ double BSIM4v7wkgisl; /* v4.7 New GIDL/GISL */ double BSIM4v7wrgisl; /* v4.7 New GIDL/GISL */ double BSIM4v7waigc; double BSIM4v7wbigc; double BSIM4v7wcigc; double BSIM4v7waigsd; double BSIM4v7wbigsd; double BSIM4v7wcigsd; double BSIM4v7waigs; double BSIM4v7wbigs; double BSIM4v7wcigs; double BSIM4v7waigd; double BSIM4v7wbigd; double BSIM4v7wcigd; double BSIM4v7waigbacc; double BSIM4v7wbigbacc; double BSIM4v7wcigbacc; double BSIM4v7waigbinv; double BSIM4v7wbigbinv; double BSIM4v7wcigbinv; double BSIM4v7wnigc; double BSIM4v7wnigbacc; double BSIM4v7wnigbinv; double BSIM4v7wntox; double BSIM4v7weigbinv; double BSIM4v7wpigcd; double BSIM4v7wpoxedge; double BSIM4v7wxrcrg1; double BSIM4v7wxrcrg2; double BSIM4v7wlambda; double BSIM4v7wvtl; double BSIM4v7wxn; double BSIM4v7wvfbsdoff; double BSIM4v7wtvfbsdoff; /* CV model */ double BSIM4v7wcgsl; double BSIM4v7wcgdl; double BSIM4v7wckappas; double BSIM4v7wckappad; double BSIM4v7wcf; double BSIM4v7wclc; double BSIM4v7wcle; double BSIM4v7wvfbcv; double BSIM4v7wnoff; double BSIM4v7wvoffcv; double BSIM4v7wacde; double BSIM4v7wmoin; /* Cross-term Dependence */ double BSIM4v7pcdsc; double BSIM4v7pcdscb; double BSIM4v7pcdscd; double BSIM4v7pcit; double BSIM4v7pnfactor; double BSIM4v7pxj; double BSIM4v7pvsat; double BSIM4v7pat; double BSIM4v7pa0; double BSIM4v7pags; double BSIM4v7pa1; double BSIM4v7pa2; double BSIM4v7pketa; double BSIM4v7pnsub; double BSIM4v7pndep; double BSIM4v7pnsd; double BSIM4v7pphin; double BSIM4v7pngate; double BSIM4v7pgamma1; double BSIM4v7pgamma2; double BSIM4v7pvbx; double BSIM4v7pvbm; double BSIM4v7pxt; double BSIM4v7pk1; double BSIM4v7pkt1; double BSIM4v7pkt1l; double BSIM4v7pkt2; double BSIM4v7pk2; double BSIM4v7pk3; double BSIM4v7pk3b; double BSIM4v7pw0; double BSIM4v7pdvtp0; double BSIM4v7pdvtp1; double BSIM4v7pdvtp2; /* New DIBL/Rout */ double BSIM4v7pdvtp3; double BSIM4v7pdvtp4; double BSIM4v7pdvtp5; double BSIM4v7plpe0; double BSIM4v7plpeb; double BSIM4v7pdvt0; double BSIM4v7pdvt1; double BSIM4v7pdvt2; double BSIM4v7pdvt0w; double BSIM4v7pdvt1w; double BSIM4v7pdvt2w; double BSIM4v7pdrout; double BSIM4v7pdsub; double BSIM4v7pvth0; double BSIM4v7pua; double BSIM4v7pua1; double BSIM4v7pub; double BSIM4v7pub1; double BSIM4v7puc; double BSIM4v7puc1; double BSIM4v7pud; double BSIM4v7pud1; double BSIM4v7pup; double BSIM4v7plp; double BSIM4v7pu0; double BSIM4v7peu; double BSIM4v7pucs; double BSIM4v7pute; double BSIM4v7pucste; double BSIM4v7pvoff; double BSIM4v7ptvoff; double BSIM4v7ptnfactor; /* v4.7 Temp dep of leakage current */ double BSIM4v7pteta0; /* v4.7 temp dep of leakage current */ double BSIM4v7ptvoffcv; /* v4.7 temp dep of leakage current */ double BSIM4v7pminv; double BSIM4v7pminvcv; double BSIM4v7pdelta; double BSIM4v7prdsw; double BSIM4v7prsw; double BSIM4v7prdw; double BSIM4v7pprwg; double BSIM4v7pprwb; double BSIM4v7pprt; double BSIM4v7peta0; double BSIM4v7petab; double BSIM4v7ppclm; double BSIM4v7ppdibl1; double BSIM4v7ppdibl2; double BSIM4v7ppdiblb; double BSIM4v7pfprout; double BSIM4v7ppdits; double BSIM4v7ppditsd; double BSIM4v7ppscbe1; double BSIM4v7ppscbe2; double BSIM4v7ppvag; double BSIM4v7pwr; double BSIM4v7pdwg; double BSIM4v7pdwb; double BSIM4v7pb0; double BSIM4v7pb1; double BSIM4v7palpha0; double BSIM4v7palpha1; double BSIM4v7pbeta0; double BSIM4v7pvfb; double BSIM4v7pagidl; double BSIM4v7pbgidl; double BSIM4v7pcgidl; double BSIM4v7pegidl; double BSIM4v7pfgidl; /* v4.7 New GIDL/GISL */ double BSIM4v7pkgidl; /* v4.7 New GIDL/GISL */ double BSIM4v7prgidl; /* v4.7 New GIDL/GISL */ double BSIM4v7pagisl; double BSIM4v7pbgisl; double BSIM4v7pcgisl; double BSIM4v7pegisl; double BSIM4v7pfgisl; /* v4.7 New GIDL/GISL */ double BSIM4v7pkgisl; /* v4.7 New GIDL/GISL */ double BSIM4v7prgisl; /* v4.7 New GIDL/GISL */ double BSIM4v7paigc; double BSIM4v7pbigc; double BSIM4v7pcigc; double BSIM4v7paigsd; double BSIM4v7pbigsd; double BSIM4v7pcigsd; double BSIM4v7paigs; double BSIM4v7pbigs; double BSIM4v7pcigs; double BSIM4v7paigd; double BSIM4v7pbigd; double BSIM4v7pcigd; double BSIM4v7paigbacc; double BSIM4v7pbigbacc; double BSIM4v7pcigbacc; double BSIM4v7paigbinv; double BSIM4v7pbigbinv; double BSIM4v7pcigbinv; double BSIM4v7pnigc; double BSIM4v7pnigbacc; double BSIM4v7pnigbinv; double BSIM4v7pntox; double BSIM4v7peigbinv; double BSIM4v7ppigcd; double BSIM4v7ppoxedge; double BSIM4v7pxrcrg1; double BSIM4v7pxrcrg2; double BSIM4v7plambda; double BSIM4v7pvtl; double BSIM4v7pxn; double BSIM4v7pvfbsdoff; double BSIM4v7ptvfbsdoff; /* CV model */ double BSIM4v7pcgsl; double BSIM4v7pcgdl; double BSIM4v7pckappas; double BSIM4v7pckappad; double BSIM4v7pcf; double BSIM4v7pclc; double BSIM4v7pcle; double BSIM4v7pvfbcv; double BSIM4v7pnoff; double BSIM4v7pvoffcv; double BSIM4v7pacde; double BSIM4v7pmoin; double BSIM4v7tnom; double BSIM4v7cgso; double BSIM4v7cgdo; double BSIM4v7cgbo; double BSIM4v7xpart; double BSIM4v7cFringOut; double BSIM4v7cFringMax; double BSIM4v7sheetResistance; double BSIM4v7SjctSatCurDensity; double BSIM4v7DjctSatCurDensity; double BSIM4v7SjctSidewallSatCurDensity; double BSIM4v7DjctSidewallSatCurDensity; double BSIM4v7SjctGateSidewallSatCurDensity; double BSIM4v7DjctGateSidewallSatCurDensity; double BSIM4v7SbulkJctPotential; double BSIM4v7DbulkJctPotential; double BSIM4v7SbulkJctBotGradingCoeff; double BSIM4v7DbulkJctBotGradingCoeff; double BSIM4v7SbulkJctSideGradingCoeff; double BSIM4v7DbulkJctSideGradingCoeff; double BSIM4v7SbulkJctGateSideGradingCoeff; double BSIM4v7DbulkJctGateSideGradingCoeff; double BSIM4v7SsidewallJctPotential; double BSIM4v7DsidewallJctPotential; double BSIM4v7SGatesidewallJctPotential; double BSIM4v7DGatesidewallJctPotential; double BSIM4v7SunitAreaJctCap; double BSIM4v7DunitAreaJctCap; double BSIM4v7SunitLengthSidewallJctCap; double BSIM4v7DunitLengthSidewallJctCap; double BSIM4v7SunitLengthGateSidewallJctCap; double BSIM4v7DunitLengthGateSidewallJctCap; double BSIM4v7SjctEmissionCoeff; double BSIM4v7DjctEmissionCoeff; double BSIM4v7SjctTempExponent; double BSIM4v7DjctTempExponent; double BSIM4v7njtsstemp; double BSIM4v7njtsswstemp; double BSIM4v7njtsswgstemp; double BSIM4v7njtsdtemp; double BSIM4v7njtsswdtemp; double BSIM4v7njtsswgdtemp; double BSIM4v7Lint; double BSIM4v7Ll; double BSIM4v7Llc; double BSIM4v7Lln; double BSIM4v7Lw; double BSIM4v7Lwc; double BSIM4v7Lwn; double BSIM4v7Lwl; double BSIM4v7Lwlc; double BSIM4v7Lmin; double BSIM4v7Lmax; double BSIM4v7Wint; double BSIM4v7Wl; double BSIM4v7Wlc; double BSIM4v7Wln; double BSIM4v7Ww; double BSIM4v7Wwc; double BSIM4v7Wwn; double BSIM4v7Wwl; double BSIM4v7Wwlc; double BSIM4v7Wmin; double BSIM4v7Wmax; /* added for stress effect */ double BSIM4v7saref; double BSIM4v7sbref; double BSIM4v7wlod; double BSIM4v7ku0; double BSIM4v7kvsat; double BSIM4v7kvth0; double BSIM4v7tku0; double BSIM4v7llodku0; double BSIM4v7wlodku0; double BSIM4v7llodvth; double BSIM4v7wlodvth; double BSIM4v7lku0; double BSIM4v7wku0; double BSIM4v7pku0; double BSIM4v7lkvth0; double BSIM4v7wkvth0; double BSIM4v7pkvth0; double BSIM4v7stk2; double BSIM4v7lodk2; double BSIM4v7steta0; double BSIM4v7lodeta0; double BSIM4v7web; double BSIM4v7wec; double BSIM4v7kvth0we; double BSIM4v7k2we; double BSIM4v7ku0we; double BSIM4v7scref; double BSIM4v7wpemod; double BSIM4v7lkvth0we; double BSIM4v7lk2we; double BSIM4v7lku0we; double BSIM4v7wkvth0we; double BSIM4v7wk2we; double BSIM4v7wku0we; double BSIM4v7pkvth0we; double BSIM4v7pk2we; double BSIM4v7pku0we; /* Pre-calculated constants * move to size-dependent param */ double BSIM4v7Eg0; double BSIM4v7vtm; double BSIM4v7vtm0; double BSIM4v7coxe; double BSIM4v7coxp; double BSIM4v7cof1; double BSIM4v7cof2; double BSIM4v7cof3; double BSIM4v7cof4; double BSIM4v7vcrit; double BSIM4v7factor1; double BSIM4v7PhiBS; double BSIM4v7PhiBSWS; double BSIM4v7PhiBSWGS; double BSIM4v7SjctTempSatCurDensity; double BSIM4v7SjctSidewallTempSatCurDensity; double BSIM4v7SjctGateSidewallTempSatCurDensity; double BSIM4v7PhiBD; double BSIM4v7PhiBSWD; double BSIM4v7PhiBSWGD; double BSIM4v7DjctTempSatCurDensity; double BSIM4v7DjctSidewallTempSatCurDensity; double BSIM4v7DjctGateSidewallTempSatCurDensity; double BSIM4v7SunitAreaTempJctCap; double BSIM4v7DunitAreaTempJctCap; double BSIM4v7SunitLengthSidewallTempJctCap; double BSIM4v7DunitLengthSidewallTempJctCap; double BSIM4v7SunitLengthGateSidewallTempJctCap; double BSIM4v7DunitLengthGateSidewallTempJctCap; double BSIM4v7oxideTrapDensityA; double BSIM4v7oxideTrapDensityB; double BSIM4v7oxideTrapDensityC; double BSIM4v7em; double BSIM4v7ef; double BSIM4v7af; double BSIM4v7kf; double BSIM4v7vgsMax; double BSIM4v7vgdMax; double BSIM4v7vgbMax; double BSIM4v7vdsMax; double BSIM4v7vbsMax; double BSIM4v7vbdMax; double BSIM4v7vgsrMax; double BSIM4v7vgdrMax; double BSIM4v7vgbrMax; double BSIM4v7vbsrMax; double BSIM4v7vbdrMax; struct bsim4SizeDependParam *pSizeDependParamKnot; #ifdef USE_OMP int BSIM4v7InstCount; struct sBSIM4v7instance **BSIM4v7InstanceArray; #endif /* Flags */ unsigned BSIM4v7mobModGiven :1; unsigned BSIM4v7binUnitGiven :1; unsigned BSIM4v7cvchargeModGiven :1; unsigned BSIM4v7capModGiven :1; unsigned BSIM4v7dioModGiven :1; unsigned BSIM4v7rdsModGiven :1; unsigned BSIM4v7rbodyModGiven :1; unsigned BSIM4v7rgateModGiven :1; unsigned BSIM4v7perModGiven :1; unsigned BSIM4v7geoModGiven :1; unsigned BSIM4v7rgeoModGiven :1; unsigned BSIM4v7paramChkGiven :1; unsigned BSIM4v7trnqsModGiven :1; unsigned BSIM4v7acnqsModGiven :1; unsigned BSIM4v7fnoiModGiven :1; unsigned BSIM4v7tnoiModGiven :1; unsigned BSIM4v7mtrlModGiven :1; unsigned BSIM4v7mtrlCompatModGiven :1; unsigned BSIM4v7gidlModGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7igcModGiven :1; unsigned BSIM4v7igbModGiven :1; unsigned BSIM4v7tempModGiven :1; unsigned BSIM4v7typeGiven :1; unsigned BSIM4v7toxrefGiven :1; unsigned BSIM4v7eotGiven :1; unsigned BSIM4v7vddeotGiven :1; unsigned BSIM4v7tempeotGiven :1; unsigned BSIM4v7leffeotGiven :1; unsigned BSIM4v7weffeotGiven :1; unsigned BSIM4v7adosGiven :1; unsigned BSIM4v7bdosGiven :1; unsigned BSIM4v7toxeGiven :1; unsigned BSIM4v7toxpGiven :1; unsigned BSIM4v7toxmGiven :1; unsigned BSIM4v7dtoxGiven :1; unsigned BSIM4v7epsroxGiven :1; unsigned BSIM4v7versionGiven :1; unsigned BSIM4v7cdscGiven :1; unsigned BSIM4v7cdscbGiven :1; unsigned BSIM4v7cdscdGiven :1; unsigned BSIM4v7citGiven :1; unsigned BSIM4v7nfactorGiven :1; unsigned BSIM4v7xjGiven :1; unsigned BSIM4v7vsatGiven :1; unsigned BSIM4v7atGiven :1; unsigned BSIM4v7a0Given :1; unsigned BSIM4v7agsGiven :1; unsigned BSIM4v7a1Given :1; unsigned BSIM4v7a2Given :1; unsigned BSIM4v7ketaGiven :1; unsigned BSIM4v7nsubGiven :1; unsigned BSIM4v7phigGiven :1; unsigned BSIM4v7epsrgateGiven :1; unsigned BSIM4v7easubGiven :1; unsigned BSIM4v7epsrsubGiven :1; unsigned BSIM4v7ni0subGiven :1; unsigned BSIM4v7bg0subGiven :1; unsigned BSIM4v7tbgasubGiven :1; unsigned BSIM4v7tbgbsubGiven :1; unsigned BSIM4v7ndepGiven :1; unsigned BSIM4v7nsdGiven :1; unsigned BSIM4v7phinGiven :1; unsigned BSIM4v7ngateGiven :1; unsigned BSIM4v7gamma1Given :1; unsigned BSIM4v7gamma2Given :1; unsigned BSIM4v7vbxGiven :1; unsigned BSIM4v7vbmGiven :1; unsigned BSIM4v7xtGiven :1; unsigned BSIM4v7k1Given :1; unsigned BSIM4v7kt1Given :1; unsigned BSIM4v7kt1lGiven :1; unsigned BSIM4v7kt2Given :1; unsigned BSIM4v7k2Given :1; unsigned BSIM4v7k3Given :1; unsigned BSIM4v7k3bGiven :1; unsigned BSIM4v7w0Given :1; unsigned BSIM4v7dvtp0Given :1; unsigned BSIM4v7dvtp1Given :1; unsigned BSIM4v7dvtp2Given :1; /* New DIBL/Rout */ unsigned BSIM4v7dvtp3Given :1; unsigned BSIM4v7dvtp4Given :1; unsigned BSIM4v7dvtp5Given :1; unsigned BSIM4v7lpe0Given :1; unsigned BSIM4v7lpebGiven :1; unsigned BSIM4v7dvt0Given :1; unsigned BSIM4v7dvt1Given :1; unsigned BSIM4v7dvt2Given :1; unsigned BSIM4v7dvt0wGiven :1; unsigned BSIM4v7dvt1wGiven :1; unsigned BSIM4v7dvt2wGiven :1; unsigned BSIM4v7droutGiven :1; unsigned BSIM4v7dsubGiven :1; unsigned BSIM4v7vth0Given :1; unsigned BSIM4v7euGiven :1; unsigned BSIM4v7ucsGiven :1; unsigned BSIM4v7uaGiven :1; unsigned BSIM4v7ua1Given :1; unsigned BSIM4v7ubGiven :1; unsigned BSIM4v7ub1Given :1; unsigned BSIM4v7ucGiven :1; unsigned BSIM4v7uc1Given :1; unsigned BSIM4v7udGiven :1; unsigned BSIM4v7ud1Given :1; unsigned BSIM4v7upGiven :1; unsigned BSIM4v7lpGiven :1; unsigned BSIM4v7u0Given :1; unsigned BSIM4v7uteGiven :1; unsigned BSIM4v7ucsteGiven :1; unsigned BSIM4v7voffGiven :1; unsigned BSIM4v7tvoffGiven :1; unsigned BSIM4v7tnfactorGiven :1; /* v4.7 Temp dep of leakage current */ unsigned BSIM4v7teta0Given :1; /* v4.7 temp dep of leakage current */ unsigned BSIM4v7tvoffcvGiven :1; /* v4.7 temp dep of leakage current */ unsigned BSIM4v7vofflGiven :1; unsigned BSIM4v7voffcvlGiven :1; unsigned BSIM4v7minvGiven :1; unsigned BSIM4v7minvcvGiven :1; unsigned BSIM4v7rdswGiven :1; unsigned BSIM4v7rdswminGiven :1; unsigned BSIM4v7rdwminGiven :1; unsigned BSIM4v7rswminGiven :1; unsigned BSIM4v7rswGiven :1; unsigned BSIM4v7rdwGiven :1; unsigned BSIM4v7prwgGiven :1; unsigned BSIM4v7prwbGiven :1; unsigned BSIM4v7prtGiven :1; unsigned BSIM4v7eta0Given :1; unsigned BSIM4v7etabGiven :1; unsigned BSIM4v7pclmGiven :1; unsigned BSIM4v7pdibl1Given :1; unsigned BSIM4v7pdibl2Given :1; unsigned BSIM4v7pdiblbGiven :1; unsigned BSIM4v7fproutGiven :1; unsigned BSIM4v7pditsGiven :1; unsigned BSIM4v7pditsdGiven :1; unsigned BSIM4v7pditslGiven :1; unsigned BSIM4v7pscbe1Given :1; unsigned BSIM4v7pscbe2Given :1; unsigned BSIM4v7pvagGiven :1; unsigned BSIM4v7deltaGiven :1; unsigned BSIM4v7wrGiven :1; unsigned BSIM4v7dwgGiven :1; unsigned BSIM4v7dwbGiven :1; unsigned BSIM4v7b0Given :1; unsigned BSIM4v7b1Given :1; unsigned BSIM4v7alpha0Given :1; unsigned BSIM4v7alpha1Given :1; unsigned BSIM4v7beta0Given :1; unsigned BSIM4v7agidlGiven :1; unsigned BSIM4v7bgidlGiven :1; unsigned BSIM4v7cgidlGiven :1; unsigned BSIM4v7egidlGiven :1; unsigned BSIM4v7fgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7kgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7rgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7agislGiven :1; unsigned BSIM4v7bgislGiven :1; unsigned BSIM4v7cgislGiven :1; unsigned BSIM4v7egislGiven :1; unsigned BSIM4v7fgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7kgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7rgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7aigcGiven :1; unsigned BSIM4v7bigcGiven :1; unsigned BSIM4v7cigcGiven :1; unsigned BSIM4v7aigsdGiven :1; unsigned BSIM4v7bigsdGiven :1; unsigned BSIM4v7cigsdGiven :1; unsigned BSIM4v7aigsGiven :1; unsigned BSIM4v7bigsGiven :1; unsigned BSIM4v7cigsGiven :1; unsigned BSIM4v7aigdGiven :1; unsigned BSIM4v7bigdGiven :1; unsigned BSIM4v7cigdGiven :1; unsigned BSIM4v7aigbaccGiven :1; unsigned BSIM4v7bigbaccGiven :1; unsigned BSIM4v7cigbaccGiven :1; unsigned BSIM4v7aigbinvGiven :1; unsigned BSIM4v7bigbinvGiven :1; unsigned BSIM4v7cigbinvGiven :1; unsigned BSIM4v7nigcGiven :1; unsigned BSIM4v7nigbinvGiven :1; unsigned BSIM4v7nigbaccGiven :1; unsigned BSIM4v7ntoxGiven :1; unsigned BSIM4v7eigbinvGiven :1; unsigned BSIM4v7pigcdGiven :1; unsigned BSIM4v7poxedgeGiven :1; unsigned BSIM4v7ijthdfwdGiven :1; unsigned BSIM4v7ijthsfwdGiven :1; unsigned BSIM4v7ijthdrevGiven :1; unsigned BSIM4v7ijthsrevGiven :1; unsigned BSIM4v7xjbvdGiven :1; unsigned BSIM4v7xjbvsGiven :1; unsigned BSIM4v7bvdGiven :1; unsigned BSIM4v7bvsGiven :1; unsigned BSIM4v7jtssGiven :1; unsigned BSIM4v7jtsdGiven :1; unsigned BSIM4v7jtsswsGiven :1; unsigned BSIM4v7jtsswdGiven :1; unsigned BSIM4v7jtsswgsGiven :1; unsigned BSIM4v7jtsswgdGiven :1; unsigned BSIM4v7jtweffGiven :1; unsigned BSIM4v7njtsGiven :1; unsigned BSIM4v7njtsswGiven :1; unsigned BSIM4v7njtsswgGiven :1; unsigned BSIM4v7njtsdGiven :1; unsigned BSIM4v7njtsswdGiven :1; unsigned BSIM4v7njtsswgdGiven :1; unsigned BSIM4v7xtssGiven :1; unsigned BSIM4v7xtsdGiven :1; unsigned BSIM4v7xtsswsGiven :1; unsigned BSIM4v7xtsswdGiven :1; unsigned BSIM4v7xtsswgsGiven :1; unsigned BSIM4v7xtsswgdGiven :1; unsigned BSIM4v7tnjtsGiven :1; unsigned BSIM4v7tnjtsswGiven :1; unsigned BSIM4v7tnjtsswgGiven :1; unsigned BSIM4v7tnjtsdGiven :1; unsigned BSIM4v7tnjtsswdGiven :1; unsigned BSIM4v7tnjtsswgdGiven :1; unsigned BSIM4v7vtssGiven :1; unsigned BSIM4v7vtsdGiven :1; unsigned BSIM4v7vtsswsGiven :1; unsigned BSIM4v7vtsswdGiven :1; unsigned BSIM4v7vtsswgsGiven :1; unsigned BSIM4v7vtsswgdGiven :1; unsigned BSIM4v7vfbGiven :1; unsigned BSIM4v7gbminGiven :1; unsigned BSIM4v7rbdbGiven :1; unsigned BSIM4v7rbsbGiven :1; unsigned BSIM4v7rbpsGiven :1; unsigned BSIM4v7rbpdGiven :1; unsigned BSIM4v7rbpbGiven :1; unsigned BSIM4v7rbps0Given :1; unsigned BSIM4v7rbpslGiven :1; unsigned BSIM4v7rbpswGiven :1; unsigned BSIM4v7rbpsnfGiven :1; unsigned BSIM4v7rbpd0Given :1; unsigned BSIM4v7rbpdlGiven :1; unsigned BSIM4v7rbpdwGiven :1; unsigned BSIM4v7rbpdnfGiven :1; unsigned BSIM4v7rbpbx0Given :1; unsigned BSIM4v7rbpbxlGiven :1; unsigned BSIM4v7rbpbxwGiven :1; unsigned BSIM4v7rbpbxnfGiven :1; unsigned BSIM4v7rbpby0Given :1; unsigned BSIM4v7rbpbylGiven :1; unsigned BSIM4v7rbpbywGiven :1; unsigned BSIM4v7rbpbynfGiven :1; unsigned BSIM4v7rbsbx0Given :1; unsigned BSIM4v7rbsby0Given :1; unsigned BSIM4v7rbdbx0Given :1; unsigned BSIM4v7rbdby0Given :1; unsigned BSIM4v7rbsdbxlGiven :1; unsigned BSIM4v7rbsdbxwGiven :1; unsigned BSIM4v7rbsdbxnfGiven :1; unsigned BSIM4v7rbsdbylGiven :1; unsigned BSIM4v7rbsdbywGiven :1; unsigned BSIM4v7rbsdbynfGiven :1; unsigned BSIM4v7xrcrg1Given :1; unsigned BSIM4v7xrcrg2Given :1; unsigned BSIM4v7tnoiaGiven :1; unsigned BSIM4v7tnoibGiven :1; unsigned BSIM4v7tnoicGiven :1; unsigned BSIM4v7rnoiaGiven :1; unsigned BSIM4v7rnoibGiven :1; unsigned BSIM4v7rnoicGiven :1; unsigned BSIM4v7ntnoiGiven :1; unsigned BSIM4v7lambdaGiven :1; unsigned BSIM4v7vtlGiven :1; unsigned BSIM4v7lcGiven :1; unsigned BSIM4v7xnGiven :1; unsigned BSIM4v7vfbsdoffGiven :1; unsigned BSIM4v7lintnoiGiven :1; unsigned BSIM4v7tvfbsdoffGiven :1; /* CV model and parasitics */ unsigned BSIM4v7cgslGiven :1; unsigned BSIM4v7cgdlGiven :1; unsigned BSIM4v7ckappasGiven :1; unsigned BSIM4v7ckappadGiven :1; unsigned BSIM4v7cfGiven :1; unsigned BSIM4v7vfbcvGiven :1; unsigned BSIM4v7clcGiven :1; unsigned BSIM4v7cleGiven :1; unsigned BSIM4v7dwcGiven :1; unsigned BSIM4v7dlcGiven :1; unsigned BSIM4v7xwGiven :1; unsigned BSIM4v7xlGiven :1; unsigned BSIM4v7dlcigGiven :1; unsigned BSIM4v7dlcigdGiven :1; unsigned BSIM4v7dwjGiven :1; unsigned BSIM4v7noffGiven :1; unsigned BSIM4v7voffcvGiven :1; unsigned BSIM4v7acdeGiven :1; unsigned BSIM4v7moinGiven :1; unsigned BSIM4v7tcjGiven :1; unsigned BSIM4v7tcjswGiven :1; unsigned BSIM4v7tcjswgGiven :1; unsigned BSIM4v7tpbGiven :1; unsigned BSIM4v7tpbswGiven :1; unsigned BSIM4v7tpbswgGiven :1; unsigned BSIM4v7dmcgGiven :1; unsigned BSIM4v7dmciGiven :1; unsigned BSIM4v7dmdgGiven :1; unsigned BSIM4v7dmcgtGiven :1; unsigned BSIM4v7xgwGiven :1; unsigned BSIM4v7xglGiven :1; unsigned BSIM4v7rshgGiven :1; unsigned BSIM4v7ngconGiven :1; /* Length dependence */ unsigned BSIM4v7lcdscGiven :1; unsigned BSIM4v7lcdscbGiven :1; unsigned BSIM4v7lcdscdGiven :1; unsigned BSIM4v7lcitGiven :1; unsigned BSIM4v7lnfactorGiven :1; unsigned BSIM4v7lxjGiven :1; unsigned BSIM4v7lvsatGiven :1; unsigned BSIM4v7latGiven :1; unsigned BSIM4v7la0Given :1; unsigned BSIM4v7lagsGiven :1; unsigned BSIM4v7la1Given :1; unsigned BSIM4v7la2Given :1; unsigned BSIM4v7lketaGiven :1; unsigned BSIM4v7lnsubGiven :1; unsigned BSIM4v7lndepGiven :1; unsigned BSIM4v7lnsdGiven :1; unsigned BSIM4v7lphinGiven :1; unsigned BSIM4v7lngateGiven :1; unsigned BSIM4v7lgamma1Given :1; unsigned BSIM4v7lgamma2Given :1; unsigned BSIM4v7lvbxGiven :1; unsigned BSIM4v7lvbmGiven :1; unsigned BSIM4v7lxtGiven :1; unsigned BSIM4v7lk1Given :1; unsigned BSIM4v7lkt1Given :1; unsigned BSIM4v7lkt1lGiven :1; unsigned BSIM4v7lkt2Given :1; unsigned BSIM4v7lk2Given :1; unsigned BSIM4v7lk3Given :1; unsigned BSIM4v7lk3bGiven :1; unsigned BSIM4v7lw0Given :1; unsigned BSIM4v7ldvtp0Given :1; unsigned BSIM4v7ldvtp1Given :1; unsigned BSIM4v7ldvtp2Given :1; /* New DIBL/Rout */ unsigned BSIM4v7ldvtp3Given :1; unsigned BSIM4v7ldvtp4Given :1; unsigned BSIM4v7ldvtp5Given :1; unsigned BSIM4v7llpe0Given :1; unsigned BSIM4v7llpebGiven :1; unsigned BSIM4v7ldvt0Given :1; unsigned BSIM4v7ldvt1Given :1; unsigned BSIM4v7ldvt2Given :1; unsigned BSIM4v7ldvt0wGiven :1; unsigned BSIM4v7ldvt1wGiven :1; unsigned BSIM4v7ldvt2wGiven :1; unsigned BSIM4v7ldroutGiven :1; unsigned BSIM4v7ldsubGiven :1; unsigned BSIM4v7lvth0Given :1; unsigned BSIM4v7luaGiven :1; unsigned BSIM4v7lua1Given :1; unsigned BSIM4v7lubGiven :1; unsigned BSIM4v7lub1Given :1; unsigned BSIM4v7lucGiven :1; unsigned BSIM4v7luc1Given :1; unsigned BSIM4v7ludGiven :1; unsigned BSIM4v7lud1Given :1; unsigned BSIM4v7lupGiven :1; unsigned BSIM4v7llpGiven :1; unsigned BSIM4v7lu0Given :1; unsigned BSIM4v7leuGiven :1; unsigned BSIM4v7lucsGiven :1; unsigned BSIM4v7luteGiven :1; unsigned BSIM4v7lucsteGiven :1; unsigned BSIM4v7lvoffGiven :1; unsigned BSIM4v7ltvoffGiven :1; unsigned BSIM4v7ltnfactorGiven :1; /* v4.7 Temp dep of leakage current */ unsigned BSIM4v7lteta0Given :1; /* v4.7 temp dep of leakage current */ unsigned BSIM4v7ltvoffcvGiven :1; /* v4.7 temp dep of leakage current */ unsigned BSIM4v7lminvGiven :1; unsigned BSIM4v7lminvcvGiven :1; unsigned BSIM4v7lrdswGiven :1; unsigned BSIM4v7lrswGiven :1; unsigned BSIM4v7lrdwGiven :1; unsigned BSIM4v7lprwgGiven :1; unsigned BSIM4v7lprwbGiven :1; unsigned BSIM4v7lprtGiven :1; unsigned BSIM4v7leta0Given :1; unsigned BSIM4v7letabGiven :1; unsigned BSIM4v7lpclmGiven :1; unsigned BSIM4v7lpdibl1Given :1; unsigned BSIM4v7lpdibl2Given :1; unsigned BSIM4v7lpdiblbGiven :1; unsigned BSIM4v7lfproutGiven :1; unsigned BSIM4v7lpditsGiven :1; unsigned BSIM4v7lpditsdGiven :1; unsigned BSIM4v7lpscbe1Given :1; unsigned BSIM4v7lpscbe2Given :1; unsigned BSIM4v7lpvagGiven :1; unsigned BSIM4v7ldeltaGiven :1; unsigned BSIM4v7lwrGiven :1; unsigned BSIM4v7ldwgGiven :1; unsigned BSIM4v7ldwbGiven :1; unsigned BSIM4v7lb0Given :1; unsigned BSIM4v7lb1Given :1; unsigned BSIM4v7lalpha0Given :1; unsigned BSIM4v7lalpha1Given :1; unsigned BSIM4v7lbeta0Given :1; unsigned BSIM4v7lvfbGiven :1; unsigned BSIM4v7lagidlGiven :1; unsigned BSIM4v7lbgidlGiven :1; unsigned BSIM4v7lcgidlGiven :1; unsigned BSIM4v7legidlGiven :1; unsigned BSIM4v7lfgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7lkgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7lrgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7lagislGiven :1; unsigned BSIM4v7lbgislGiven :1; unsigned BSIM4v7lcgislGiven :1; unsigned BSIM4v7legislGiven :1; unsigned BSIM4v7lfgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7lkgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7lrgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7laigcGiven :1; unsigned BSIM4v7lbigcGiven :1; unsigned BSIM4v7lcigcGiven :1; unsigned BSIM4v7laigsdGiven :1; unsigned BSIM4v7lbigsdGiven :1; unsigned BSIM4v7lcigsdGiven :1; unsigned BSIM4v7laigsGiven :1; unsigned BSIM4v7lbigsGiven :1; unsigned BSIM4v7lcigsGiven :1; unsigned BSIM4v7laigdGiven :1; unsigned BSIM4v7lbigdGiven :1; unsigned BSIM4v7lcigdGiven :1; unsigned BSIM4v7laigbaccGiven :1; unsigned BSIM4v7lbigbaccGiven :1; unsigned BSIM4v7lcigbaccGiven :1; unsigned BSIM4v7laigbinvGiven :1; unsigned BSIM4v7lbigbinvGiven :1; unsigned BSIM4v7lcigbinvGiven :1; unsigned BSIM4v7lnigcGiven :1; unsigned BSIM4v7lnigbinvGiven :1; unsigned BSIM4v7lnigbaccGiven :1; unsigned BSIM4v7lntoxGiven :1; unsigned BSIM4v7leigbinvGiven :1; unsigned BSIM4v7lpigcdGiven :1; unsigned BSIM4v7lpoxedgeGiven :1; unsigned BSIM4v7lxrcrg1Given :1; unsigned BSIM4v7lxrcrg2Given :1; unsigned BSIM4v7llambdaGiven :1; unsigned BSIM4v7lvtlGiven :1; unsigned BSIM4v7lxnGiven :1; unsigned BSIM4v7lvfbsdoffGiven :1; unsigned BSIM4v7ltvfbsdoffGiven :1; /* CV model */ unsigned BSIM4v7lcgslGiven :1; unsigned BSIM4v7lcgdlGiven :1; unsigned BSIM4v7lckappasGiven :1; unsigned BSIM4v7lckappadGiven :1; unsigned BSIM4v7lcfGiven :1; unsigned BSIM4v7lclcGiven :1; unsigned BSIM4v7lcleGiven :1; unsigned BSIM4v7lvfbcvGiven :1; unsigned BSIM4v7lnoffGiven :1; unsigned BSIM4v7lvoffcvGiven :1; unsigned BSIM4v7lacdeGiven :1; unsigned BSIM4v7lmoinGiven :1; /* Width dependence */ unsigned BSIM4v7wcdscGiven :1; unsigned BSIM4v7wcdscbGiven :1; unsigned BSIM4v7wcdscdGiven :1; unsigned BSIM4v7wcitGiven :1; unsigned BSIM4v7wnfactorGiven :1; unsigned BSIM4v7wxjGiven :1; unsigned BSIM4v7wvsatGiven :1; unsigned BSIM4v7watGiven :1; unsigned BSIM4v7wa0Given :1; unsigned BSIM4v7wagsGiven :1; unsigned BSIM4v7wa1Given :1; unsigned BSIM4v7wa2Given :1; unsigned BSIM4v7wketaGiven :1; unsigned BSIM4v7wnsubGiven :1; unsigned BSIM4v7wndepGiven :1; unsigned BSIM4v7wnsdGiven :1; unsigned BSIM4v7wphinGiven :1; unsigned BSIM4v7wngateGiven :1; unsigned BSIM4v7wgamma1Given :1; unsigned BSIM4v7wgamma2Given :1; unsigned BSIM4v7wvbxGiven :1; unsigned BSIM4v7wvbmGiven :1; unsigned BSIM4v7wxtGiven :1; unsigned BSIM4v7wk1Given :1; unsigned BSIM4v7wkt1Given :1; unsigned BSIM4v7wkt1lGiven :1; unsigned BSIM4v7wkt2Given :1; unsigned BSIM4v7wk2Given :1; unsigned BSIM4v7wk3Given :1; unsigned BSIM4v7wk3bGiven :1; unsigned BSIM4v7ww0Given :1; unsigned BSIM4v7wdvtp0Given :1; unsigned BSIM4v7wdvtp1Given :1; unsigned BSIM4v7wdvtp2Given :1; /* New DIBL/Rout */ unsigned BSIM4v7wdvtp3Given :1; unsigned BSIM4v7wdvtp4Given :1; unsigned BSIM4v7wdvtp5Given :1; unsigned BSIM4v7wlpe0Given :1; unsigned BSIM4v7wlpebGiven :1; unsigned BSIM4v7wdvt0Given :1; unsigned BSIM4v7wdvt1Given :1; unsigned BSIM4v7wdvt2Given :1; unsigned BSIM4v7wdvt0wGiven :1; unsigned BSIM4v7wdvt1wGiven :1; unsigned BSIM4v7wdvt2wGiven :1; unsigned BSIM4v7wdroutGiven :1; unsigned BSIM4v7wdsubGiven :1; unsigned BSIM4v7wvth0Given :1; unsigned BSIM4v7wuaGiven :1; unsigned BSIM4v7wua1Given :1; unsigned BSIM4v7wubGiven :1; unsigned BSIM4v7wub1Given :1; unsigned BSIM4v7wucGiven :1; unsigned BSIM4v7wuc1Given :1; unsigned BSIM4v7wudGiven :1; unsigned BSIM4v7wud1Given :1; unsigned BSIM4v7wupGiven :1; unsigned BSIM4v7wlpGiven :1; unsigned BSIM4v7wu0Given :1; unsigned BSIM4v7weuGiven :1; unsigned BSIM4v7wucsGiven :1; unsigned BSIM4v7wuteGiven :1; unsigned BSIM4v7wucsteGiven :1; unsigned BSIM4v7wvoffGiven :1; unsigned BSIM4v7wtvoffGiven :1; unsigned BSIM4v7wtnfactorGiven :1; /* v4.7 Temp dep of leakage current */ unsigned BSIM4v7wteta0Given :1; /* v4.7 temp dep of leakage current */ unsigned BSIM4v7wtvoffcvGiven :1; /* v4.7 temp dep of leakage current */ unsigned BSIM4v7wminvGiven :1; unsigned BSIM4v7wminvcvGiven :1; unsigned BSIM4v7wrdswGiven :1; unsigned BSIM4v7wrswGiven :1; unsigned BSIM4v7wrdwGiven :1; unsigned BSIM4v7wprwgGiven :1; unsigned BSIM4v7wprwbGiven :1; unsigned BSIM4v7wprtGiven :1; unsigned BSIM4v7weta0Given :1; unsigned BSIM4v7wetabGiven :1; unsigned BSIM4v7wpclmGiven :1; unsigned BSIM4v7wpdibl1Given :1; unsigned BSIM4v7wpdibl2Given :1; unsigned BSIM4v7wpdiblbGiven :1; unsigned BSIM4v7wfproutGiven :1; unsigned BSIM4v7wpditsGiven :1; unsigned BSIM4v7wpditsdGiven :1; unsigned BSIM4v7wpscbe1Given :1; unsigned BSIM4v7wpscbe2Given :1; unsigned BSIM4v7wpvagGiven :1; unsigned BSIM4v7wdeltaGiven :1; unsigned BSIM4v7wwrGiven :1; unsigned BSIM4v7wdwgGiven :1; unsigned BSIM4v7wdwbGiven :1; unsigned BSIM4v7wb0Given :1; unsigned BSIM4v7wb1Given :1; unsigned BSIM4v7walpha0Given :1; unsigned BSIM4v7walpha1Given :1; unsigned BSIM4v7wbeta0Given :1; unsigned BSIM4v7wvfbGiven :1; unsigned BSIM4v7wagidlGiven :1; unsigned BSIM4v7wbgidlGiven :1; unsigned BSIM4v7wcgidlGiven :1; unsigned BSIM4v7wegidlGiven :1; unsigned BSIM4v7wfgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7wkgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7wrgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7wagislGiven :1; unsigned BSIM4v7wbgislGiven :1; unsigned BSIM4v7wcgislGiven :1; unsigned BSIM4v7wegislGiven :1; unsigned BSIM4v7wfgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7wkgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7wrgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7waigcGiven :1; unsigned BSIM4v7wbigcGiven :1; unsigned BSIM4v7wcigcGiven :1; unsigned BSIM4v7waigsdGiven :1; unsigned BSIM4v7wbigsdGiven :1; unsigned BSIM4v7wcigsdGiven :1; unsigned BSIM4v7waigsGiven :1; unsigned BSIM4v7wbigsGiven :1; unsigned BSIM4v7wcigsGiven :1; unsigned BSIM4v7waigdGiven :1; unsigned BSIM4v7wbigdGiven :1; unsigned BSIM4v7wcigdGiven :1; unsigned BSIM4v7waigbaccGiven :1; unsigned BSIM4v7wbigbaccGiven :1; unsigned BSIM4v7wcigbaccGiven :1; unsigned BSIM4v7waigbinvGiven :1; unsigned BSIM4v7wbigbinvGiven :1; unsigned BSIM4v7wcigbinvGiven :1; unsigned BSIM4v7wnigcGiven :1; unsigned BSIM4v7wnigbinvGiven :1; unsigned BSIM4v7wnigbaccGiven :1; unsigned BSIM4v7wntoxGiven :1; unsigned BSIM4v7weigbinvGiven :1; unsigned BSIM4v7wpigcdGiven :1; unsigned BSIM4v7wpoxedgeGiven :1; unsigned BSIM4v7wxrcrg1Given :1; unsigned BSIM4v7wxrcrg2Given :1; unsigned BSIM4v7wlambdaGiven :1; unsigned BSIM4v7wvtlGiven :1; unsigned BSIM4v7wxnGiven :1; unsigned BSIM4v7wvfbsdoffGiven :1; unsigned BSIM4v7wtvfbsdoffGiven :1; /* CV model */ unsigned BSIM4v7wcgslGiven :1; unsigned BSIM4v7wcgdlGiven :1; unsigned BSIM4v7wckappasGiven :1; unsigned BSIM4v7wckappadGiven :1; unsigned BSIM4v7wcfGiven :1; unsigned BSIM4v7wclcGiven :1; unsigned BSIM4v7wcleGiven :1; unsigned BSIM4v7wvfbcvGiven :1; unsigned BSIM4v7wnoffGiven :1; unsigned BSIM4v7wvoffcvGiven :1; unsigned BSIM4v7wacdeGiven :1; unsigned BSIM4v7wmoinGiven :1; /* Cross-term dependence */ unsigned BSIM4v7pcdscGiven :1; unsigned BSIM4v7pcdscbGiven :1; unsigned BSIM4v7pcdscdGiven :1; unsigned BSIM4v7pcitGiven :1; unsigned BSIM4v7pnfactorGiven :1; unsigned BSIM4v7pxjGiven :1; unsigned BSIM4v7pvsatGiven :1; unsigned BSIM4v7patGiven :1; unsigned BSIM4v7pa0Given :1; unsigned BSIM4v7pagsGiven :1; unsigned BSIM4v7pa1Given :1; unsigned BSIM4v7pa2Given :1; unsigned BSIM4v7pketaGiven :1; unsigned BSIM4v7pnsubGiven :1; unsigned BSIM4v7pndepGiven :1; unsigned BSIM4v7pnsdGiven :1; unsigned BSIM4v7pphinGiven :1; unsigned BSIM4v7pngateGiven :1; unsigned BSIM4v7pgamma1Given :1; unsigned BSIM4v7pgamma2Given :1; unsigned BSIM4v7pvbxGiven :1; unsigned BSIM4v7pvbmGiven :1; unsigned BSIM4v7pxtGiven :1; unsigned BSIM4v7pk1Given :1; unsigned BSIM4v7pkt1Given :1; unsigned BSIM4v7pkt1lGiven :1; unsigned BSIM4v7pkt2Given :1; unsigned BSIM4v7pk2Given :1; unsigned BSIM4v7pk3Given :1; unsigned BSIM4v7pk3bGiven :1; unsigned BSIM4v7pw0Given :1; unsigned BSIM4v7pdvtp0Given :1; unsigned BSIM4v7pdvtp1Given :1; unsigned BSIM4v7pdvtp2Given :1; /* New DIBL/Rout */ unsigned BSIM4v7pdvtp3Given :1; unsigned BSIM4v7pdvtp4Given :1; unsigned BSIM4v7pdvtp5Given :1; unsigned BSIM4v7plpe0Given :1; unsigned BSIM4v7plpebGiven :1; unsigned BSIM4v7pdvt0Given :1; unsigned BSIM4v7pdvt1Given :1; unsigned BSIM4v7pdvt2Given :1; unsigned BSIM4v7pdvt0wGiven :1; unsigned BSIM4v7pdvt1wGiven :1; unsigned BSIM4v7pdvt2wGiven :1; unsigned BSIM4v7pdroutGiven :1; unsigned BSIM4v7pdsubGiven :1; unsigned BSIM4v7pvth0Given :1; unsigned BSIM4v7puaGiven :1; unsigned BSIM4v7pua1Given :1; unsigned BSIM4v7pubGiven :1; unsigned BSIM4v7pub1Given :1; unsigned BSIM4v7pucGiven :1; unsigned BSIM4v7puc1Given :1; unsigned BSIM4v7pudGiven :1; unsigned BSIM4v7pud1Given :1; unsigned BSIM4v7pupGiven :1; unsigned BSIM4v7plpGiven :1; unsigned BSIM4v7pu0Given :1; unsigned BSIM4v7peuGiven :1; unsigned BSIM4v7pucsGiven :1; unsigned BSIM4v7puteGiven :1; unsigned BSIM4v7pucsteGiven :1; unsigned BSIM4v7pvoffGiven :1; unsigned BSIM4v7ptvoffGiven :1; unsigned BSIM4v7ptnfactorGiven :1; /* v4.7 Temp dep of leakage current */ unsigned BSIM4v7pteta0Given :1; /* v4.7 temp dep of leakage current */ unsigned BSIM4v7ptvoffcvGiven :1; /* v4.7 temp dep of leakage current */ unsigned BSIM4v7pminvGiven :1; unsigned BSIM4v7pminvcvGiven :1; unsigned BSIM4v7prdswGiven :1; unsigned BSIM4v7prswGiven :1; unsigned BSIM4v7prdwGiven :1; unsigned BSIM4v7pprwgGiven :1; unsigned BSIM4v7pprwbGiven :1; unsigned BSIM4v7pprtGiven :1; unsigned BSIM4v7peta0Given :1; unsigned BSIM4v7petabGiven :1; unsigned BSIM4v7ppclmGiven :1; unsigned BSIM4v7ppdibl1Given :1; unsigned BSIM4v7ppdibl2Given :1; unsigned BSIM4v7ppdiblbGiven :1; unsigned BSIM4v7pfproutGiven :1; unsigned BSIM4v7ppditsGiven :1; unsigned BSIM4v7ppditsdGiven :1; unsigned BSIM4v7ppscbe1Given :1; unsigned BSIM4v7ppscbe2Given :1; unsigned BSIM4v7ppvagGiven :1; unsigned BSIM4v7pdeltaGiven :1; unsigned BSIM4v7pwrGiven :1; unsigned BSIM4v7pdwgGiven :1; unsigned BSIM4v7pdwbGiven :1; unsigned BSIM4v7pb0Given :1; unsigned BSIM4v7pb1Given :1; unsigned BSIM4v7palpha0Given :1; unsigned BSIM4v7palpha1Given :1; unsigned BSIM4v7pbeta0Given :1; unsigned BSIM4v7pvfbGiven :1; unsigned BSIM4v7pagidlGiven :1; unsigned BSIM4v7pbgidlGiven :1; unsigned BSIM4v7pcgidlGiven :1; unsigned BSIM4v7pegidlGiven :1; unsigned BSIM4v7pfgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7pkgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7prgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7pagislGiven :1; unsigned BSIM4v7pbgislGiven :1; unsigned BSIM4v7pcgislGiven :1; unsigned BSIM4v7pegislGiven :1; unsigned BSIM4v7pfgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7pkgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7prgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4v7paigcGiven :1; unsigned BSIM4v7pbigcGiven :1; unsigned BSIM4v7pcigcGiven :1; unsigned BSIM4v7paigsdGiven :1; unsigned BSIM4v7pbigsdGiven :1; unsigned BSIM4v7pcigsdGiven :1; unsigned BSIM4v7paigsGiven :1; unsigned BSIM4v7pbigsGiven :1; unsigned BSIM4v7pcigsGiven :1; unsigned BSIM4v7paigdGiven :1; unsigned BSIM4v7pbigdGiven :1; unsigned BSIM4v7pcigdGiven :1; unsigned BSIM4v7paigbaccGiven :1; unsigned BSIM4v7pbigbaccGiven :1; unsigned BSIM4v7pcigbaccGiven :1; unsigned BSIM4v7paigbinvGiven :1; unsigned BSIM4v7pbigbinvGiven :1; unsigned BSIM4v7pcigbinvGiven :1; unsigned BSIM4v7pnigcGiven :1; unsigned BSIM4v7pnigbinvGiven :1; unsigned BSIM4v7pnigbaccGiven :1; unsigned BSIM4v7pntoxGiven :1; unsigned BSIM4v7peigbinvGiven :1; unsigned BSIM4v7ppigcdGiven :1; unsigned BSIM4v7ppoxedgeGiven :1; unsigned BSIM4v7pxrcrg1Given :1; unsigned BSIM4v7pxrcrg2Given :1; unsigned BSIM4v7plambdaGiven :1; unsigned BSIM4v7pvtlGiven :1; unsigned BSIM4v7pxnGiven :1; unsigned BSIM4v7pvfbsdoffGiven :1; unsigned BSIM4v7ptvfbsdoffGiven :1; /* CV model */ unsigned BSIM4v7pcgslGiven :1; unsigned BSIM4v7pcgdlGiven :1; unsigned BSIM4v7pckappasGiven :1; unsigned BSIM4v7pckappadGiven :1; unsigned BSIM4v7pcfGiven :1; unsigned BSIM4v7pclcGiven :1; unsigned BSIM4v7pcleGiven :1; unsigned BSIM4v7pvfbcvGiven :1; unsigned BSIM4v7pnoffGiven :1; unsigned BSIM4v7pvoffcvGiven :1; unsigned BSIM4v7pacdeGiven :1; unsigned BSIM4v7pmoinGiven :1; unsigned BSIM4v7useFringeGiven :1; unsigned BSIM4v7tnomGiven :1; unsigned BSIM4v7cgsoGiven :1; unsigned BSIM4v7cgdoGiven :1; unsigned BSIM4v7cgboGiven :1; unsigned BSIM4v7xpartGiven :1; unsigned BSIM4v7sheetResistanceGiven :1; unsigned BSIM4v7SjctSatCurDensityGiven :1; unsigned BSIM4v7SjctSidewallSatCurDensityGiven :1; unsigned BSIM4v7SjctGateSidewallSatCurDensityGiven :1; unsigned BSIM4v7SbulkJctPotentialGiven :1; unsigned BSIM4v7SbulkJctBotGradingCoeffGiven :1; unsigned BSIM4v7SsidewallJctPotentialGiven :1; unsigned BSIM4v7SGatesidewallJctPotentialGiven :1; unsigned BSIM4v7SbulkJctSideGradingCoeffGiven :1; unsigned BSIM4v7SunitAreaJctCapGiven :1; unsigned BSIM4v7SunitLengthSidewallJctCapGiven :1; unsigned BSIM4v7SbulkJctGateSideGradingCoeffGiven :1; unsigned BSIM4v7SunitLengthGateSidewallJctCapGiven :1; unsigned BSIM4v7SjctEmissionCoeffGiven :1; unsigned BSIM4v7SjctTempExponentGiven :1; unsigned BSIM4v7DjctSatCurDensityGiven :1; unsigned BSIM4v7DjctSidewallSatCurDensityGiven :1; unsigned BSIM4v7DjctGateSidewallSatCurDensityGiven :1; unsigned BSIM4v7DbulkJctPotentialGiven :1; unsigned BSIM4v7DbulkJctBotGradingCoeffGiven :1; unsigned BSIM4v7DsidewallJctPotentialGiven :1; unsigned BSIM4v7DGatesidewallJctPotentialGiven :1; unsigned BSIM4v7DbulkJctSideGradingCoeffGiven :1; unsigned BSIM4v7DunitAreaJctCapGiven :1; unsigned BSIM4v7DunitLengthSidewallJctCapGiven :1; unsigned BSIM4v7DbulkJctGateSideGradingCoeffGiven :1; unsigned BSIM4v7DunitLengthGateSidewallJctCapGiven :1; unsigned BSIM4v7DjctEmissionCoeffGiven :1; unsigned BSIM4v7DjctTempExponentGiven :1; unsigned BSIM4v7oxideTrapDensityAGiven :1; unsigned BSIM4v7oxideTrapDensityBGiven :1; unsigned BSIM4v7oxideTrapDensityCGiven :1; unsigned BSIM4v7emGiven :1; unsigned BSIM4v7efGiven :1; unsigned BSIM4v7afGiven :1; unsigned BSIM4v7kfGiven :1; unsigned BSIM4v7vgsMaxGiven :1; unsigned BSIM4v7vgdMaxGiven :1; unsigned BSIM4v7vgbMaxGiven :1; unsigned BSIM4v7vdsMaxGiven :1; unsigned BSIM4v7vbsMaxGiven :1; unsigned BSIM4v7vbdMaxGiven :1; unsigned BSIM4v7vgsrMaxGiven :1; unsigned BSIM4v7vgdrMaxGiven :1; unsigned BSIM4v7vgbrMaxGiven :1; unsigned BSIM4v7vbsrMaxGiven :1; unsigned BSIM4v7vbdrMaxGiven :1; unsigned BSIM4v7LintGiven :1; unsigned BSIM4v7LlGiven :1; unsigned BSIM4v7LlcGiven :1; unsigned BSIM4v7LlnGiven :1; unsigned BSIM4v7LwGiven :1; unsigned BSIM4v7LwcGiven :1; unsigned BSIM4v7LwnGiven :1; unsigned BSIM4v7LwlGiven :1; unsigned BSIM4v7LwlcGiven :1; unsigned BSIM4v7LminGiven :1; unsigned BSIM4v7LmaxGiven :1; unsigned BSIM4v7WintGiven :1; unsigned BSIM4v7WlGiven :1; unsigned BSIM4v7WlcGiven :1; unsigned BSIM4v7WlnGiven :1; unsigned BSIM4v7WwGiven :1; unsigned BSIM4v7WwcGiven :1; unsigned BSIM4v7WwnGiven :1; unsigned BSIM4v7WwlGiven :1; unsigned BSIM4v7WwlcGiven :1; unsigned BSIM4v7WminGiven :1; unsigned BSIM4v7WmaxGiven :1; /* added for stress effect */ unsigned BSIM4v7sarefGiven :1; unsigned BSIM4v7sbrefGiven :1; unsigned BSIM4v7wlodGiven :1; unsigned BSIM4v7ku0Given :1; unsigned BSIM4v7kvsatGiven :1; unsigned BSIM4v7kvth0Given :1; unsigned BSIM4v7tku0Given :1; unsigned BSIM4v7llodku0Given :1; unsigned BSIM4v7wlodku0Given :1; unsigned BSIM4v7llodvthGiven :1; unsigned BSIM4v7wlodvthGiven :1; unsigned BSIM4v7lku0Given :1; unsigned BSIM4v7wku0Given :1; unsigned BSIM4v7pku0Given :1; unsigned BSIM4v7lkvth0Given :1; unsigned BSIM4v7wkvth0Given :1; unsigned BSIM4v7pkvth0Given :1; unsigned BSIM4v7stk2Given :1; unsigned BSIM4v7lodk2Given :1; unsigned BSIM4v7steta0Given :1; unsigned BSIM4v7lodeta0Given :1; unsigned BSIM4v7webGiven :1; unsigned BSIM4v7wecGiven :1; unsigned BSIM4v7kvth0weGiven :1; unsigned BSIM4v7k2weGiven :1; unsigned BSIM4v7ku0weGiven :1; unsigned BSIM4v7screfGiven :1; unsigned BSIM4v7wpemodGiven :1; unsigned BSIM4v7lkvth0weGiven :1; unsigned BSIM4v7lk2weGiven :1; unsigned BSIM4v7lku0weGiven :1; unsigned BSIM4v7wkvth0weGiven :1; unsigned BSIM4v7wk2weGiven :1; unsigned BSIM4v7wku0weGiven :1; unsigned BSIM4v7pkvth0weGiven :1; unsigned BSIM4v7pk2weGiven :1; unsigned BSIM4v7pku0weGiven :1; } BSIM4v7model; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ /* Instance parameters */ #define BSIM4v7_W 1 #define BSIM4v7_L 2 #define BSIM4v7_AS 3 #define BSIM4v7_AD 4 #define BSIM4v7_PS 5 #define BSIM4v7_PD 6 #define BSIM4v7_NRS 7 #define BSIM4v7_NRD 8 #define BSIM4v7_OFF 9 #define BSIM4v7_IC 10 #define BSIM4v7_IC_VDS 11 #define BSIM4v7_IC_VGS 12 #define BSIM4v7_IC_VBS 13 #define BSIM4v7_TRNQSMOD 14 #define BSIM4v7_RBODYMOD 15 #define BSIM4v7_RGATEMOD 16 #define BSIM4v7_GEOMOD 17 #define BSIM4v7_RGEOMOD 18 #define BSIM4v7_NF 19 #define BSIM4v7_MIN 20 #define BSIM4v7_ACNQSMOD 22 #define BSIM4v7_RBDB 23 #define BSIM4v7_RBSB 24 #define BSIM4v7_RBPB 25 #define BSIM4v7_RBPS 26 #define BSIM4v7_RBPD 27 #define BSIM4v7_SA 28 #define BSIM4v7_SB 29 #define BSIM4v7_SD 30 #define BSIM4v7_DELVTO 31 #define BSIM4v7_XGW 32 #define BSIM4v7_NGCON 33 #define BSIM4v7_SCA 34 #define BSIM4v7_SCB 35 #define BSIM4v7_SCC 36 #define BSIM4v7_SC 37 #define BSIM4v7_M 38 #define BSIM4v7_MULU0 39 /* Global parameters */ #define BSIM4v7_MOD_TEMPEOT 65 #define BSIM4v7_MOD_LEFFEOT 66 #define BSIM4v7_MOD_WEFFEOT 67 #define BSIM4v7_MOD_UCSTE 68 #define BSIM4v7_MOD_LUCSTE 69 #define BSIM4v7_MOD_WUCSTE 70 #define BSIM4v7_MOD_PUCSTE 71 #define BSIM4v7_MOD_UCS 72 #define BSIM4v7_MOD_LUCS 73 #define BSIM4v7_MOD_WUCS 74 #define BSIM4v7_MOD_PUCS 75 #define BSIM4v7_MOD_CVCHARGEMOD 76 #define BSIM4v7_MOD_ADOS 77 #define BSIM4v7_MOD_BDOS 78 #define BSIM4v7_MOD_TEMPMOD 79 #define BSIM4v7_MOD_MTRLMOD 80 #define BSIM4v7_MOD_IGCMOD 81 #define BSIM4v7_MOD_IGBMOD 82 #define BSIM4v7_MOD_ACNQSMOD 83 #define BSIM4v7_MOD_FNOIMOD 84 #define BSIM4v7_MOD_RDSMOD 85 #define BSIM4v7_MOD_DIOMOD 86 #define BSIM4v7_MOD_PERMOD 87 #define BSIM4v7_MOD_GEOMOD 88 #define BSIM4v7_MOD_RGEOMOD 89 #define BSIM4v7_MOD_RGATEMOD 90 #define BSIM4v7_MOD_RBODYMOD 91 #define BSIM4v7_MOD_CAPMOD 92 #define BSIM4v7_MOD_TRNQSMOD 93 #define BSIM4v7_MOD_MOBMOD 94 #define BSIM4v7_MOD_TNOIMOD 95 #define BSIM4v7_MOD_EOT 96 #define BSIM4v7_MOD_VDDEOT 97 #define BSIM4v7_MOD_TOXE 98 #define BSIM4v7_MOD_CDSC 99 #define BSIM4v7_MOD_CDSCB 100 #define BSIM4v7_MOD_CIT 101 #define BSIM4v7_MOD_NFACTOR 102 #define BSIM4v7_MOD_XJ 103 #define BSIM4v7_MOD_VSAT 104 #define BSIM4v7_MOD_AT 105 #define BSIM4v7_MOD_A0 106 #define BSIM4v7_MOD_A1 107 #define BSIM4v7_MOD_A2 108 #define BSIM4v7_MOD_KETA 109 #define BSIM4v7_MOD_NSUB 110 #define BSIM4v7_MOD_PHIG 111 #define BSIM4v7_MOD_EPSRGATE 112 #define BSIM4v7_MOD_EASUB 113 #define BSIM4v7_MOD_EPSRSUB 114 #define BSIM4v7_MOD_NI0SUB 115 #define BSIM4v7_MOD_BG0SUB 116 #define BSIM4v7_MOD_TBGASUB 117 #define BSIM4v7_MOD_TBGBSUB 118 #define BSIM4v7_MOD_NDEP 119 #define BSIM4v7_MOD_NGATE 120 #define BSIM4v7_MOD_GAMMA1 121 #define BSIM4v7_MOD_GAMMA2 122 #define BSIM4v7_MOD_VBX 123 #define BSIM4v7_MOD_BINUNIT 124 #define BSIM4v7_MOD_VBM 125 #define BSIM4v7_MOD_XT 126 #define BSIM4v7_MOD_K1 129 #define BSIM4v7_MOD_KT1 130 #define BSIM4v7_MOD_KT1L 131 #define BSIM4v7_MOD_K2 132 #define BSIM4v7_MOD_KT2 133 #define BSIM4v7_MOD_K3 134 #define BSIM4v7_MOD_K3B 135 #define BSIM4v7_MOD_W0 136 #define BSIM4v7_MOD_LPE0 137 #define BSIM4v7_MOD_DVT0 138 #define BSIM4v7_MOD_DVT1 139 #define BSIM4v7_MOD_DVT2 140 #define BSIM4v7_MOD_DVT0W 141 #define BSIM4v7_MOD_DVT1W 142 #define BSIM4v7_MOD_DVT2W 143 #define BSIM4v7_MOD_DROUT 144 #define BSIM4v7_MOD_DSUB 145 #define BSIM4v7_MOD_VTH0 146 #define BSIM4v7_MOD_UA 147 #define BSIM4v7_MOD_UA1 148 #define BSIM4v7_MOD_UB 149 #define BSIM4v7_MOD_UB1 150 #define BSIM4v7_MOD_UC 151 #define BSIM4v7_MOD_UC1 152 #define BSIM4v7_MOD_U0 153 #define BSIM4v7_MOD_UTE 154 #define BSIM4v7_MOD_VOFF 155 #define BSIM4v7_MOD_DELTA 156 #define BSIM4v7_MOD_RDSW 157 #define BSIM4v7_MOD_PRT 158 #define BSIM4v7_MOD_LDD 159 #define BSIM4v7_MOD_ETA 160 #define BSIM4v7_MOD_ETA0 161 #define BSIM4v7_MOD_ETAB 162 #define BSIM4v7_MOD_PCLM 163 #define BSIM4v7_MOD_PDIBL1 164 #define BSIM4v7_MOD_PDIBL2 165 #define BSIM4v7_MOD_PSCBE1 166 #define BSIM4v7_MOD_PSCBE2 167 #define BSIM4v7_MOD_PVAG 168 #define BSIM4v7_MOD_WR 169 #define BSIM4v7_MOD_DWG 170 #define BSIM4v7_MOD_DWB 171 #define BSIM4v7_MOD_B0 172 #define BSIM4v7_MOD_B1 173 #define BSIM4v7_MOD_ALPHA0 174 #define BSIM4v7_MOD_BETA0 175 #define BSIM4v7_MOD_PDIBLB 178 #define BSIM4v7_MOD_PRWG 179 #define BSIM4v7_MOD_PRWB 180 #define BSIM4v7_MOD_CDSCD 181 #define BSIM4v7_MOD_AGS 182 #define BSIM4v7_MOD_FRINGE 184 #define BSIM4v7_MOD_CGSL 186 #define BSIM4v7_MOD_CGDL 187 #define BSIM4v7_MOD_CKAPPAS 188 #define BSIM4v7_MOD_CF 189 #define BSIM4v7_MOD_CLC 190 #define BSIM4v7_MOD_CLE 191 #define BSIM4v7_MOD_PARAMCHK 192 #define BSIM4v7_MOD_VERSION 193 #define BSIM4v7_MOD_VFBCV 194 #define BSIM4v7_MOD_ACDE 195 #define BSIM4v7_MOD_MOIN 196 #define BSIM4v7_MOD_NOFF 197 #define BSIM4v7_MOD_IJTHDFWD 198 #define BSIM4v7_MOD_ALPHA1 199 #define BSIM4v7_MOD_VFB 200 #define BSIM4v7_MOD_TOXM 201 #define BSIM4v7_MOD_TCJ 202 #define BSIM4v7_MOD_TCJSW 203 #define BSIM4v7_MOD_TCJSWG 204 #define BSIM4v7_MOD_TPB 205 #define BSIM4v7_MOD_TPBSW 206 #define BSIM4v7_MOD_TPBSWG 207 #define BSIM4v7_MOD_VOFFCV 208 #define BSIM4v7_MOD_GBMIN 209 #define BSIM4v7_MOD_RBDB 210 #define BSIM4v7_MOD_RBSB 211 #define BSIM4v7_MOD_RBPB 212 #define BSIM4v7_MOD_RBPS 213 #define BSIM4v7_MOD_RBPD 214 #define BSIM4v7_MOD_DMCG 215 #define BSIM4v7_MOD_DMCI 216 #define BSIM4v7_MOD_DMDG 217 #define BSIM4v7_MOD_XGW 218 #define BSIM4v7_MOD_XGL 219 #define BSIM4v7_MOD_RSHG 220 #define BSIM4v7_MOD_NGCON 221 #define BSIM4v7_MOD_AGIDL 222 #define BSIM4v7_MOD_BGIDL 223 #define BSIM4v7_MOD_EGIDL 224 #define BSIM4v7_MOD_IJTHSFWD 225 #define BSIM4v7_MOD_XJBVD 226 #define BSIM4v7_MOD_XJBVS 227 #define BSIM4v7_MOD_BVD 228 #define BSIM4v7_MOD_BVS 229 #define BSIM4v7_MOD_TOXP 230 #define BSIM4v7_MOD_DTOX 231 #define BSIM4v7_MOD_XRCRG1 232 #define BSIM4v7_MOD_XRCRG2 233 #define BSIM4v7_MOD_EU 234 #define BSIM4v7_MOD_IJTHSREV 235 #define BSIM4v7_MOD_IJTHDREV 236 #define BSIM4v7_MOD_MINV 237 #define BSIM4v7_MOD_VOFFL 238 #define BSIM4v7_MOD_PDITS 239 #define BSIM4v7_MOD_PDITSD 240 #define BSIM4v7_MOD_PDITSL 241 #define BSIM4v7_MOD_TNOIA 242 #define BSIM4v7_MOD_TNOIB 243 #define BSIM4v7_MOD_NTNOI 244 #define BSIM4v7_MOD_FPROUT 245 #define BSIM4v7_MOD_LPEB 246 #define BSIM4v7_MOD_DVTP0 247 #define BSIM4v7_MOD_DVTP1 248 #define BSIM4v7_MOD_CGIDL 249 #define BSIM4v7_MOD_PHIN 250 #define BSIM4v7_MOD_RDSWMIN 251 #define BSIM4v7_MOD_RSW 252 #define BSIM4v7_MOD_RDW 253 #define BSIM4v7_MOD_RDWMIN 254 #define BSIM4v7_MOD_RSWMIN 255 #define BSIM4v7_MOD_NSD 256 #define BSIM4v7_MOD_CKAPPAD 257 #define BSIM4v7_MOD_DMCGT 258 #define BSIM4v7_MOD_AIGC 259 #define BSIM4v7_MOD_BIGC 260 #define BSIM4v7_MOD_CIGC 261 #define BSIM4v7_MOD_AIGBACC 262 #define BSIM4v7_MOD_BIGBACC 263 #define BSIM4v7_MOD_CIGBACC 264 #define BSIM4v7_MOD_AIGBINV 265 #define BSIM4v7_MOD_BIGBINV 266 #define BSIM4v7_MOD_CIGBINV 267 #define BSIM4v7_MOD_NIGC 268 #define BSIM4v7_MOD_NIGBACC 269 #define BSIM4v7_MOD_NIGBINV 270 #define BSIM4v7_MOD_NTOX 271 #define BSIM4v7_MOD_TOXREF 272 #define BSIM4v7_MOD_EIGBINV 273 #define BSIM4v7_MOD_PIGCD 274 #define BSIM4v7_MOD_POXEDGE 275 #define BSIM4v7_MOD_EPSROX 276 #define BSIM4v7_MOD_AIGSD 277 #define BSIM4v7_MOD_BIGSD 278 #define BSIM4v7_MOD_CIGSD 279 #define BSIM4v7_MOD_JSWGS 280 #define BSIM4v7_MOD_JSWGD 281 #define BSIM4v7_MOD_LAMBDA 282 #define BSIM4v7_MOD_VTL 283 #define BSIM4v7_MOD_LC 284 #define BSIM4v7_MOD_XN 285 #define BSIM4v7_MOD_RNOIA 286 #define BSIM4v7_MOD_RNOIB 287 #define BSIM4v7_MOD_VFBSDOFF 288 #define BSIM4v7_MOD_LINTNOI 289 #define BSIM4v7_MOD_UD 290 #define BSIM4v7_MOD_UD1 291 #define BSIM4v7_MOD_UP 292 #define BSIM4v7_MOD_LP 293 #define BSIM4v7_MOD_TVOFF 294 #define BSIM4v7_MOD_TVFBSDOFF 295 #define BSIM4v7_MOD_MINVCV 296 #define BSIM4v7_MOD_VOFFCVL 297 #define BSIM4v7_MOD_MTRLCOMPATMOD 380 /* Length dependence */ #define BSIM4v7_MOD_LCDSC 301 #define BSIM4v7_MOD_LCDSCB 302 #define BSIM4v7_MOD_LCIT 303 #define BSIM4v7_MOD_LNFACTOR 304 #define BSIM4v7_MOD_LXJ 305 #define BSIM4v7_MOD_LVSAT 306 #define BSIM4v7_MOD_LAT 307 #define BSIM4v7_MOD_LA0 308 #define BSIM4v7_MOD_LA1 309 #define BSIM4v7_MOD_LA2 310 #define BSIM4v7_MOD_LKETA 311 #define BSIM4v7_MOD_LNSUB 312 #define BSIM4v7_MOD_LNDEP 313 #define BSIM4v7_MOD_LNGATE 315 #define BSIM4v7_MOD_LGAMMA1 316 #define BSIM4v7_MOD_LGAMMA2 317 #define BSIM4v7_MOD_LVBX 318 #define BSIM4v7_MOD_LVBM 320 #define BSIM4v7_MOD_LXT 322 #define BSIM4v7_MOD_LK1 325 #define BSIM4v7_MOD_LKT1 326 #define BSIM4v7_MOD_LKT1L 327 #define BSIM4v7_MOD_LK2 328 #define BSIM4v7_MOD_LKT2 329 #define BSIM4v7_MOD_LK3 330 #define BSIM4v7_MOD_LK3B 331 #define BSIM4v7_MOD_LW0 332 #define BSIM4v7_MOD_LLPE0 333 #define BSIM4v7_MOD_LDVT0 334 #define BSIM4v7_MOD_LDVT1 335 #define BSIM4v7_MOD_LDVT2 336 #define BSIM4v7_MOD_LDVT0W 337 #define BSIM4v7_MOD_LDVT1W 338 #define BSIM4v7_MOD_LDVT2W 339 #define BSIM4v7_MOD_LDROUT 340 #define BSIM4v7_MOD_LDSUB 341 #define BSIM4v7_MOD_LVTH0 342 #define BSIM4v7_MOD_LUA 343 #define BSIM4v7_MOD_LUA1 344 #define BSIM4v7_MOD_LUB 345 #define BSIM4v7_MOD_LUB1 346 #define BSIM4v7_MOD_LUC 347 #define BSIM4v7_MOD_LUC1 348 #define BSIM4v7_MOD_LU0 349 #define BSIM4v7_MOD_LUTE 350 #define BSIM4v7_MOD_LVOFF 351 #define BSIM4v7_MOD_LDELTA 352 #define BSIM4v7_MOD_LRDSW 353 #define BSIM4v7_MOD_LPRT 354 #define BSIM4v7_MOD_LLDD 355 #define BSIM4v7_MOD_LETA 356 #define BSIM4v7_MOD_LETA0 357 #define BSIM4v7_MOD_LETAB 358 #define BSIM4v7_MOD_LPCLM 359 #define BSIM4v7_MOD_LPDIBL1 360 #define BSIM4v7_MOD_LPDIBL2 361 #define BSIM4v7_MOD_LPSCBE1 362 #define BSIM4v7_MOD_LPSCBE2 363 #define BSIM4v7_MOD_LPVAG 364 #define BSIM4v7_MOD_LWR 365 #define BSIM4v7_MOD_LDWG 366 #define BSIM4v7_MOD_LDWB 367 #define BSIM4v7_MOD_LB0 368 #define BSIM4v7_MOD_LB1 369 #define BSIM4v7_MOD_LALPHA0 370 #define BSIM4v7_MOD_LBETA0 371 #define BSIM4v7_MOD_LPDIBLB 374 #define BSIM4v7_MOD_LPRWG 375 #define BSIM4v7_MOD_LPRWB 376 #define BSIM4v7_MOD_LCDSCD 377 #define BSIM4v7_MOD_LAGS 378 #define BSIM4v7_MOD_LFRINGE 381 #define BSIM4v7_MOD_LCGSL 383 #define BSIM4v7_MOD_LCGDL 384 #define BSIM4v7_MOD_LCKAPPAS 385 #define BSIM4v7_MOD_LCF 386 #define BSIM4v7_MOD_LCLC 387 #define BSIM4v7_MOD_LCLE 388 #define BSIM4v7_MOD_LVFBCV 389 #define BSIM4v7_MOD_LACDE 390 #define BSIM4v7_MOD_LMOIN 391 #define BSIM4v7_MOD_LNOFF 392 #define BSIM4v7_MOD_LALPHA1 394 #define BSIM4v7_MOD_LVFB 395 #define BSIM4v7_MOD_LVOFFCV 396 #define BSIM4v7_MOD_LAGIDL 397 #define BSIM4v7_MOD_LBGIDL 398 #define BSIM4v7_MOD_LEGIDL 399 #define BSIM4v7_MOD_LXRCRG1 400 #define BSIM4v7_MOD_LXRCRG2 401 #define BSIM4v7_MOD_LEU 402 #define BSIM4v7_MOD_LMINV 403 #define BSIM4v7_MOD_LPDITS 404 #define BSIM4v7_MOD_LPDITSD 405 #define BSIM4v7_MOD_LFPROUT 406 #define BSIM4v7_MOD_LLPEB 407 #define BSIM4v7_MOD_LDVTP0 408 #define BSIM4v7_MOD_LDVTP1 409 #define BSIM4v7_MOD_LCGIDL 410 #define BSIM4v7_MOD_LPHIN 411 #define BSIM4v7_MOD_LRSW 412 #define BSIM4v7_MOD_LRDW 413 #define BSIM4v7_MOD_LNSD 414 #define BSIM4v7_MOD_LCKAPPAD 415 #define BSIM4v7_MOD_LAIGC 416 #define BSIM4v7_MOD_LBIGC 417 #define BSIM4v7_MOD_LCIGC 418 #define BSIM4v7_MOD_LAIGBACC 419 #define BSIM4v7_MOD_LBIGBACC 420 #define BSIM4v7_MOD_LCIGBACC 421 #define BSIM4v7_MOD_LAIGBINV 422 #define BSIM4v7_MOD_LBIGBINV 423 #define BSIM4v7_MOD_LCIGBINV 424 #define BSIM4v7_MOD_LNIGC 425 #define BSIM4v7_MOD_LNIGBACC 426 #define BSIM4v7_MOD_LNIGBINV 427 #define BSIM4v7_MOD_LNTOX 428 #define BSIM4v7_MOD_LEIGBINV 429 #define BSIM4v7_MOD_LPIGCD 430 #define BSIM4v7_MOD_LPOXEDGE 431 #define BSIM4v7_MOD_LAIGSD 432 #define BSIM4v7_MOD_LBIGSD 433 #define BSIM4v7_MOD_LCIGSD 434 #define BSIM4v7_MOD_LLAMBDA 435 #define BSIM4v7_MOD_LVTL 436 #define BSIM4v7_MOD_LXN 437 #define BSIM4v7_MOD_LVFBSDOFF 438 #define BSIM4v7_MOD_LUD 439 #define BSIM4v7_MOD_LUD1 440 #define BSIM4v7_MOD_LUP 441 #define BSIM4v7_MOD_LLP 442 #define BSIM4v7_MOD_LMINVCV 443 #define BSIM4v7_MOD_FGIDL 444 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_KGIDL 445 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_RGIDL 446 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_FGISL 447 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_KGISL 448 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_RGISL 449 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_LFGIDL 450 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_LKGIDL 451 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_LRGIDL 452 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_LFGISL 453 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_LKGISL 454 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_LRGISL 455 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_WFGIDL 456 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_WKGIDL 457 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_WRGIDL 458 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_WFGISL 459 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_WKGISL 460 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_WRGISL 461 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_PFGIDL 462 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_PKGIDL 463 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_PRGIDL 464 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_PFGISL 465 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_PKGISL 466 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_PRGISL 467 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_GIDLMOD 379 /* v4.7 New GIDL/GISL*/ #define BSIM4v7_MOD_DVTP2 468 /* v4.7 NEW DIBL/Rout*/ #define BSIM4v7_MOD_DVTP3 469 /* v4.7 NEW DIBL/Rout*/ #define BSIM4v7_MOD_DVTP4 470 /* v4.7 NEW DIBL/Rout*/ #define BSIM4v7_MOD_DVTP5 471 /* v4.7 NEW DIBL/Rout*/ #define BSIM4v7_MOD_LDVTP2 472 /* v4.7 NEW DIBL/Rout*/ #define BSIM4v7_MOD_LDVTP3 473 /* v4.7 NEW DIBL/Rout*/ #define BSIM4v7_MOD_LDVTP4 474 /* v4.7 NEW DIBL/Rout*/ #define BSIM4v7_MOD_LDVTP5 475 /* v4.7 NEW DIBL/Rout*/ #define BSIM4v7_MOD_WDVTP2 476 /* v4.7 NEW DIBL/Rout*/ #define BSIM4v7_MOD_WDVTP3 477 /* v4.7 NEW DIBL/Rout*/ #define BSIM4v7_MOD_WDVTP4 478 /* v4.7 NEW DIBL/Rout*/ #define BSIM4v7_MOD_WDVTP5 479 /* v4.7 NEW DIBL/Rout*/ #define BSIM4v7_MOD_PDVTP2 480 /* v4.7 NEW DIBL/Rout*/ #define BSIM4v7_MOD_PDVTP3 298 /* v4.7 NEW DIBL/Rout*/ #define BSIM4v7_MOD_PDVTP4 299 /* v4.7 NEW DIBL/Rout*/ #define BSIM4v7_MOD_PDVTP5 300 /* v4.7 NEW DIBL/Rout*/ /* Width dependence */ #define BSIM4v7_MOD_WCDSC 481 #define BSIM4v7_MOD_WCDSCB 482 #define BSIM4v7_MOD_WCIT 483 #define BSIM4v7_MOD_WNFACTOR 484 #define BSIM4v7_MOD_WXJ 485 #define BSIM4v7_MOD_WVSAT 486 #define BSIM4v7_MOD_WAT 487 #define BSIM4v7_MOD_WA0 488 #define BSIM4v7_MOD_WA1 489 #define BSIM4v7_MOD_WA2 490 #define BSIM4v7_MOD_WKETA 491 #define BSIM4v7_MOD_WNSUB 492 #define BSIM4v7_MOD_WNDEP 493 #define BSIM4v7_MOD_WNGATE 495 #define BSIM4v7_MOD_WGAMMA1 496 #define BSIM4v7_MOD_WGAMMA2 497 #define BSIM4v7_MOD_WVBX 498 #define BSIM4v7_MOD_WVBM 500 #define BSIM4v7_MOD_WXT 502 #define BSIM4v7_MOD_WK1 505 #define BSIM4v7_MOD_WKT1 506 #define BSIM4v7_MOD_WKT1L 507 #define BSIM4v7_MOD_WK2 508 #define BSIM4v7_MOD_WKT2 509 #define BSIM4v7_MOD_WK3 510 #define BSIM4v7_MOD_WK3B 511 #define BSIM4v7_MOD_WW0 512 #define BSIM4v7_MOD_WLPE0 513 #define BSIM4v7_MOD_WDVT0 514 #define BSIM4v7_MOD_WDVT1 515 #define BSIM4v7_MOD_WDVT2 516 #define BSIM4v7_MOD_WDVT0W 517 #define BSIM4v7_MOD_WDVT1W 518 #define BSIM4v7_MOD_WDVT2W 519 #define BSIM4v7_MOD_WDROUT 520 #define BSIM4v7_MOD_WDSUB 521 #define BSIM4v7_MOD_WVTH0 522 #define BSIM4v7_MOD_WUA 523 #define BSIM4v7_MOD_WUA1 524 #define BSIM4v7_MOD_WUB 525 #define BSIM4v7_MOD_WUB1 526 #define BSIM4v7_MOD_WUC 527 #define BSIM4v7_MOD_WUC1 528 #define BSIM4v7_MOD_WU0 529 #define BSIM4v7_MOD_WUTE 530 #define BSIM4v7_MOD_WVOFF 531 #define BSIM4v7_MOD_WDELTA 532 #define BSIM4v7_MOD_WRDSW 533 #define BSIM4v7_MOD_WPRT 534 #define BSIM4v7_MOD_WLDD 535 #define BSIM4v7_MOD_WETA 536 #define BSIM4v7_MOD_WETA0 537 #define BSIM4v7_MOD_WETAB 538 #define BSIM4v7_MOD_WPCLM 539 #define BSIM4v7_MOD_WPDIBL1 540 #define BSIM4v7_MOD_WPDIBL2 541 #define BSIM4v7_MOD_WPSCBE1 542 #define BSIM4v7_MOD_WPSCBE2 543 #define BSIM4v7_MOD_WPVAG 544 #define BSIM4v7_MOD_WWR 545 #define BSIM4v7_MOD_WDWG 546 #define BSIM4v7_MOD_WDWB 547 #define BSIM4v7_MOD_WB0 548 #define BSIM4v7_MOD_WB1 549 #define BSIM4v7_MOD_WALPHA0 550 #define BSIM4v7_MOD_WBETA0 551 #define BSIM4v7_MOD_WPDIBLB 554 #define BSIM4v7_MOD_WPRWG 555 #define BSIM4v7_MOD_WPRWB 556 #define BSIM4v7_MOD_WCDSCD 557 #define BSIM4v7_MOD_WAGS 558 #define BSIM4v7_MOD_WFRINGE 561 #define BSIM4v7_MOD_WCGSL 563 #define BSIM4v7_MOD_WCGDL 564 #define BSIM4v7_MOD_WCKAPPAS 565 #define BSIM4v7_MOD_WCF 566 #define BSIM4v7_MOD_WCLC 567 #define BSIM4v7_MOD_WCLE 568 #define BSIM4v7_MOD_WVFBCV 569 #define BSIM4v7_MOD_WACDE 570 #define BSIM4v7_MOD_WMOIN 571 #define BSIM4v7_MOD_WNOFF 572 #define BSIM4v7_MOD_WALPHA1 574 #define BSIM4v7_MOD_WVFB 575 #define BSIM4v7_MOD_WVOFFCV 576 #define BSIM4v7_MOD_WAGIDL 577 #define BSIM4v7_MOD_WBGIDL 578 #define BSIM4v7_MOD_WEGIDL 579 #define BSIM4v7_MOD_WXRCRG1 580 #define BSIM4v7_MOD_WXRCRG2 581 #define BSIM4v7_MOD_WEU 582 #define BSIM4v7_MOD_WMINV 583 #define BSIM4v7_MOD_WPDITS 584 #define BSIM4v7_MOD_WPDITSD 585 #define BSIM4v7_MOD_WFPROUT 586 #define BSIM4v7_MOD_WLPEB 587 #define BSIM4v7_MOD_WDVTP0 588 #define BSIM4v7_MOD_WDVTP1 589 #define BSIM4v7_MOD_WCGIDL 590 #define BSIM4v7_MOD_WPHIN 591 #define BSIM4v7_MOD_WRSW 592 #define BSIM4v7_MOD_WRDW 593 #define BSIM4v7_MOD_WNSD 594 #define BSIM4v7_MOD_WCKAPPAD 595 #define BSIM4v7_MOD_WAIGC 596 #define BSIM4v7_MOD_WBIGC 597 #define BSIM4v7_MOD_WCIGC 598 #define BSIM4v7_MOD_WAIGBACC 599 #define BSIM4v7_MOD_WBIGBACC 600 #define BSIM4v7_MOD_WCIGBACC 601 #define BSIM4v7_MOD_WAIGBINV 602 #define BSIM4v7_MOD_WBIGBINV 603 #define BSIM4v7_MOD_WCIGBINV 604 #define BSIM4v7_MOD_WNIGC 605 #define BSIM4v7_MOD_WNIGBACC 606 #define BSIM4v7_MOD_WNIGBINV 607 #define BSIM4v7_MOD_WNTOX 608 #define BSIM4v7_MOD_WEIGBINV 609 #define BSIM4v7_MOD_WPIGCD 610 #define BSIM4v7_MOD_WPOXEDGE 611 #define BSIM4v7_MOD_WAIGSD 612 #define BSIM4v7_MOD_WBIGSD 613 #define BSIM4v7_MOD_WCIGSD 614 #define BSIM4v7_MOD_WLAMBDA 615 #define BSIM4v7_MOD_WVTL 616 #define BSIM4v7_MOD_WXN 617 #define BSIM4v7_MOD_WVFBSDOFF 618 #define BSIM4v7_MOD_WUD 619 #define BSIM4v7_MOD_WUD1 620 #define BSIM4v7_MOD_WUP 621 #define BSIM4v7_MOD_WLP 622 #define BSIM4v7_MOD_WMINVCV 623 /* Cross-term dependence */ #define BSIM4v7_MOD_PCDSC 661 #define BSIM4v7_MOD_PCDSCB 662 #define BSIM4v7_MOD_PCIT 663 #define BSIM4v7_MOD_PNFACTOR 664 #define BSIM4v7_MOD_PXJ 665 #define BSIM4v7_MOD_PVSAT 666 #define BSIM4v7_MOD_PAT 667 #define BSIM4v7_MOD_PA0 668 #define BSIM4v7_MOD_PA1 669 #define BSIM4v7_MOD_PA2 670 #define BSIM4v7_MOD_PKETA 671 #define BSIM4v7_MOD_PNSUB 672 #define BSIM4v7_MOD_PNDEP 673 #define BSIM4v7_MOD_PNGATE 675 #define BSIM4v7_MOD_PGAMMA1 676 #define BSIM4v7_MOD_PGAMMA2 677 #define BSIM4v7_MOD_PVBX 678 #define BSIM4v7_MOD_PVBM 680 #define BSIM4v7_MOD_PXT 682 #define BSIM4v7_MOD_PK1 685 #define BSIM4v7_MOD_PKT1 686 #define BSIM4v7_MOD_PKT1L 687 #define BSIM4v7_MOD_PK2 688 #define BSIM4v7_MOD_PKT2 689 #define BSIM4v7_MOD_PK3 690 #define BSIM4v7_MOD_PK3B 691 #define BSIM4v7_MOD_PW0 692 #define BSIM4v7_MOD_PLPE0 693 #define BSIM4v7_MOD_PDVT0 694 #define BSIM4v7_MOD_PDVT1 695 #define BSIM4v7_MOD_PDVT2 696 #define BSIM4v7_MOD_PDVT0W 697 #define BSIM4v7_MOD_PDVT1W 698 #define BSIM4v7_MOD_PDVT2W 699 #define BSIM4v7_MOD_PDROUT 700 #define BSIM4v7_MOD_PDSUB 701 #define BSIM4v7_MOD_PVTH0 702 #define BSIM4v7_MOD_PUA 703 #define BSIM4v7_MOD_PUA1 704 #define BSIM4v7_MOD_PUB 705 #define BSIM4v7_MOD_PUB1 706 #define BSIM4v7_MOD_PUC 707 #define BSIM4v7_MOD_PUC1 708 #define BSIM4v7_MOD_PU0 709 #define BSIM4v7_MOD_PUTE 710 #define BSIM4v7_MOD_PVOFF 711 #define BSIM4v7_MOD_PDELTA 712 #define BSIM4v7_MOD_PRDSW 713 #define BSIM4v7_MOD_PPRT 714 #define BSIM4v7_MOD_PLDD 715 #define BSIM4v7_MOD_PETA 716 #define BSIM4v7_MOD_PETA0 717 #define BSIM4v7_MOD_PETAB 718 #define BSIM4v7_MOD_PPCLM 719 #define BSIM4v7_MOD_PPDIBL1 720 #define BSIM4v7_MOD_PPDIBL2 721 #define BSIM4v7_MOD_PPSCBE1 722 #define BSIM4v7_MOD_PPSCBE2 723 #define BSIM4v7_MOD_PPVAG 724 #define BSIM4v7_MOD_PWR 725 #define BSIM4v7_MOD_PDWG 726 #define BSIM4v7_MOD_PDWB 727 #define BSIM4v7_MOD_PB0 728 #define BSIM4v7_MOD_PB1 729 #define BSIM4v7_MOD_PALPHA0 730 #define BSIM4v7_MOD_PBETA0 731 #define BSIM4v7_MOD_PPDIBLB 734 #define BSIM4v7_MOD_PPRWG 735 #define BSIM4v7_MOD_PPRWB 736 #define BSIM4v7_MOD_PCDSCD 737 #define BSIM4v7_MOD_PAGS 738 #define BSIM4v7_MOD_PFRINGE 741 #define BSIM4v7_MOD_PCGSL 743 #define BSIM4v7_MOD_PCGDL 744 #define BSIM4v7_MOD_PCKAPPAS 745 #define BSIM4v7_MOD_PCF 746 #define BSIM4v7_MOD_PCLC 747 #define BSIM4v7_MOD_PCLE 748 #define BSIM4v7_MOD_PVFBCV 749 #define BSIM4v7_MOD_PACDE 750 #define BSIM4v7_MOD_PMOIN 751 #define BSIM4v7_MOD_PNOFF 752 #define BSIM4v7_MOD_PALPHA1 754 #define BSIM4v7_MOD_PVFB 755 #define BSIM4v7_MOD_PVOFFCV 756 #define BSIM4v7_MOD_PAGIDL 757 #define BSIM4v7_MOD_PBGIDL 758 #define BSIM4v7_MOD_PEGIDL 759 #define BSIM4v7_MOD_PXRCRG1 760 #define BSIM4v7_MOD_PXRCRG2 761 #define BSIM4v7_MOD_PEU 762 #define BSIM4v7_MOD_PMINV 763 #define BSIM4v7_MOD_PPDITS 764 #define BSIM4v7_MOD_PPDITSD 765 #define BSIM4v7_MOD_PFPROUT 766 #define BSIM4v7_MOD_PLPEB 767 #define BSIM4v7_MOD_PDVTP0 768 #define BSIM4v7_MOD_PDVTP1 769 #define BSIM4v7_MOD_PCGIDL 770 #define BSIM4v7_MOD_PPHIN 771 #define BSIM4v7_MOD_PRSW 772 #define BSIM4v7_MOD_PRDW 773 #define BSIM4v7_MOD_PNSD 774 #define BSIM4v7_MOD_PCKAPPAD 775 #define BSIM4v7_MOD_PAIGC 776 #define BSIM4v7_MOD_PBIGC 777 #define BSIM4v7_MOD_PCIGC 778 #define BSIM4v7_MOD_PAIGBACC 779 #define BSIM4v7_MOD_PBIGBACC 780 #define BSIM4v7_MOD_PCIGBACC 781 #define BSIM4v7_MOD_PAIGBINV 782 #define BSIM4v7_MOD_PBIGBINV 783 #define BSIM4v7_MOD_PCIGBINV 784 #define BSIM4v7_MOD_PNIGC 785 #define BSIM4v7_MOD_PNIGBACC 786 #define BSIM4v7_MOD_PNIGBINV 787 #define BSIM4v7_MOD_PNTOX 788 #define BSIM4v7_MOD_PEIGBINV 789 #define BSIM4v7_MOD_PPIGCD 790 #define BSIM4v7_MOD_PPOXEDGE 791 #define BSIM4v7_MOD_PAIGSD 792 #define BSIM4v7_MOD_PBIGSD 793 #define BSIM4v7_MOD_PCIGSD 794 #define BSIM4v7_MOD_SAREF 795 #define BSIM4v7_MOD_SBREF 796 #define BSIM4v7_MOD_KU0 797 #define BSIM4v7_MOD_KVSAT 798 #define BSIM4v7_MOD_TKU0 799 #define BSIM4v7_MOD_LLODKU0 800 #define BSIM4v7_MOD_WLODKU0 801 #define BSIM4v7_MOD_LLODVTH 802 #define BSIM4v7_MOD_WLODVTH 803 #define BSIM4v7_MOD_LKU0 804 #define BSIM4v7_MOD_WKU0 805 #define BSIM4v7_MOD_PKU0 806 #define BSIM4v7_MOD_KVTH0 807 #define BSIM4v7_MOD_LKVTH0 808 #define BSIM4v7_MOD_WKVTH0 809 #define BSIM4v7_MOD_PKVTH0 810 #define BSIM4v7_MOD_WLOD 811 #define BSIM4v7_MOD_STK2 812 #define BSIM4v7_MOD_LODK2 813 #define BSIM4v7_MOD_STETA0 814 #define BSIM4v7_MOD_LODETA0 815 #define BSIM4v7_MOD_WEB 816 #define BSIM4v7_MOD_WEC 817 #define BSIM4v7_MOD_KVTH0WE 818 #define BSIM4v7_MOD_K2WE 819 #define BSIM4v7_MOD_KU0WE 820 #define BSIM4v7_MOD_SCREF 821 #define BSIM4v7_MOD_WPEMOD 822 #define BSIM4v7_MOD_PMINVCV 823 #define BSIM4v7_MOD_PLAMBDA 825 #define BSIM4v7_MOD_PVTL 826 #define BSIM4v7_MOD_PXN 827 #define BSIM4v7_MOD_PVFBSDOFF 828 #define BSIM4v7_MOD_TNOM 831 #define BSIM4v7_MOD_CGSO 832 #define BSIM4v7_MOD_CGDO 833 #define BSIM4v7_MOD_CGBO 834 #define BSIM4v7_MOD_XPART 835 #define BSIM4v7_MOD_RSH 836 #define BSIM4v7_MOD_JSS 837 #define BSIM4v7_MOD_PBS 838 #define BSIM4v7_MOD_MJS 839 #define BSIM4v7_MOD_PBSWS 840 #define BSIM4v7_MOD_MJSWS 841 #define BSIM4v7_MOD_CJS 842 #define BSIM4v7_MOD_CJSWS 843 #define BSIM4v7_MOD_NMOS 844 #define BSIM4v7_MOD_PMOS 845 #define BSIM4v7_MOD_NOIA 846 #define BSIM4v7_MOD_NOIB 847 #define BSIM4v7_MOD_NOIC 848 #define BSIM4v7_MOD_LINT 849 #define BSIM4v7_MOD_LL 850 #define BSIM4v7_MOD_LLN 851 #define BSIM4v7_MOD_LW 852 #define BSIM4v7_MOD_LWN 853 #define BSIM4v7_MOD_LWL 854 #define BSIM4v7_MOD_LMIN 855 #define BSIM4v7_MOD_LMAX 856 #define BSIM4v7_MOD_WINT 857 #define BSIM4v7_MOD_WL 858 #define BSIM4v7_MOD_WLN 859 #define BSIM4v7_MOD_WW 860 #define BSIM4v7_MOD_WWN 861 #define BSIM4v7_MOD_WWL 862 #define BSIM4v7_MOD_WMIN 863 #define BSIM4v7_MOD_WMAX 864 #define BSIM4v7_MOD_DWC 865 #define BSIM4v7_MOD_DLC 866 #define BSIM4v7_MOD_XL 867 #define BSIM4v7_MOD_XW 868 #define BSIM4v7_MOD_EM 869 #define BSIM4v7_MOD_EF 870 #define BSIM4v7_MOD_AF 871 #define BSIM4v7_MOD_KF 872 #define BSIM4v7_MOD_NJS 873 #define BSIM4v7_MOD_XTIS 874 #define BSIM4v7_MOD_PBSWGS 875 #define BSIM4v7_MOD_MJSWGS 876 #define BSIM4v7_MOD_CJSWGS 877 #define BSIM4v7_MOD_JSWS 878 #define BSIM4v7_MOD_LLC 879 #define BSIM4v7_MOD_LWC 880 #define BSIM4v7_MOD_LWLC 881 #define BSIM4v7_MOD_WLC 882 #define BSIM4v7_MOD_WWC 883 #define BSIM4v7_MOD_WWLC 884 #define BSIM4v7_MOD_DWJ 885 #define BSIM4v7_MOD_JSD 886 #define BSIM4v7_MOD_PBD 887 #define BSIM4v7_MOD_MJD 888 #define BSIM4v7_MOD_PBSWD 889 #define BSIM4v7_MOD_MJSWD 890 #define BSIM4v7_MOD_CJD 891 #define BSIM4v7_MOD_CJSWD 892 #define BSIM4v7_MOD_NJD 893 #define BSIM4v7_MOD_XTID 894 #define BSIM4v7_MOD_PBSWGD 895 #define BSIM4v7_MOD_MJSWGD 896 #define BSIM4v7_MOD_CJSWGD 897 #define BSIM4v7_MOD_JSWD 898 #define BSIM4v7_MOD_DLCIG 899 /* trap-assisted tunneling */ #define BSIM4v7_MOD_JTSS 900 #define BSIM4v7_MOD_JTSD 901 #define BSIM4v7_MOD_JTSSWS 902 #define BSIM4v7_MOD_JTSSWD 903 #define BSIM4v7_MOD_JTSSWGS 904 #define BSIM4v7_MOD_JTSSWGD 905 #define BSIM4v7_MOD_NJTS 906 #define BSIM4v7_MOD_NJTSSW 907 #define BSIM4v7_MOD_NJTSSWG 908 #define BSIM4v7_MOD_XTSS 909 #define BSIM4v7_MOD_XTSD 910 #define BSIM4v7_MOD_XTSSWS 911 #define BSIM4v7_MOD_XTSSWD 912 #define BSIM4v7_MOD_XTSSWGS 913 #define BSIM4v7_MOD_XTSSWGD 914 #define BSIM4v7_MOD_TNJTS 915 #define BSIM4v7_MOD_TNJTSSW 916 #define BSIM4v7_MOD_TNJTSSWG 917 #define BSIM4v7_MOD_VTSS 918 #define BSIM4v7_MOD_VTSD 919 #define BSIM4v7_MOD_VTSSWS 920 #define BSIM4v7_MOD_VTSSWD 921 #define BSIM4v7_MOD_VTSSWGS 922 #define BSIM4v7_MOD_VTSSWGD 923 #define BSIM4v7_MOD_PUD 924 #define BSIM4v7_MOD_PUD1 925 #define BSIM4v7_MOD_PUP 926 #define BSIM4v7_MOD_PLP 927 #define BSIM4v7_MOD_JTWEFF 928 /* device questions */ #define BSIM4v7_DNODE 945 #define BSIM4v7_GNODEEXT 946 #define BSIM4v7_SNODE 947 #define BSIM4v7_BNODE 948 #define BSIM4v7_DNODEPRIME 949 #define BSIM4v7_GNODEPRIME 950 #define BSIM4v7_GNODEMIDE 951 #define BSIM4v7_GNODEMID 952 #define BSIM4v7_SNODEPRIME 953 #define BSIM4v7_BNODEPRIME 954 #define BSIM4v7_DBNODE 955 #define BSIM4v7_SBNODE 956 #define BSIM4v7_VBD 957 #define BSIM4v7_VBS 958 #define BSIM4v7_VGS 959 #define BSIM4v7_VDS 960 #define BSIM4v7_CD 961 #define BSIM4v7_CBS 962 #define BSIM4v7_CBD 963 #define BSIM4v7_GM 964 #define BSIM4v7_GDS 965 #define BSIM4v7_GMBS 966 #define BSIM4v7_GBD 967 #define BSIM4v7_GBS 968 #define BSIM4v7_QB 969 #define BSIM4v7_CQB 970 #define BSIM4v7_QG 971 #define BSIM4v7_CQG 972 #define BSIM4v7_QD 973 #define BSIM4v7_CQD 974 #define BSIM4v7_CGGB 975 #define BSIM4v7_CGDB 976 #define BSIM4v7_CGSB 977 #define BSIM4v7_CBGB 978 #define BSIM4v7_CAPBD 979 #define BSIM4v7_CQBD 980 #define BSIM4v7_CAPBS 981 #define BSIM4v7_CQBS 982 #define BSIM4v7_CDGB 983 #define BSIM4v7_CDDB 984 #define BSIM4v7_CDSB 985 #define BSIM4v7_VON 986 #define BSIM4v7_VDSAT 987 #define BSIM4v7_QBS 988 #define BSIM4v7_QBD 989 #define BSIM4v7_SOURCECONDUCT 990 #define BSIM4v7_DRAINCONDUCT 991 #define BSIM4v7_CBDB 992 #define BSIM4v7_CBSB 993 #define BSIM4v7_CSUB 994 #define BSIM4v7_QINV 995 #define BSIM4v7_IGIDL 996 #define BSIM4v7_CSGB 997 #define BSIM4v7_CSDB 998 #define BSIM4v7_CSSB 999 #define BSIM4v7_CGBB 1000 #define BSIM4v7_CDBB 1001 #define BSIM4v7_CSBB 1002 #define BSIM4v7_CBBB 1003 #define BSIM4v7_QS 1004 #define BSIM4v7_IGISL 1005 #define BSIM4v7_IGS 1006 #define BSIM4v7_IGD 1007 #define BSIM4v7_IGB 1008 #define BSIM4v7_IGCS 1009 #define BSIM4v7_IGCD 1010 #define BSIM4v7_QDEF 1011 #define BSIM4v7_DELVT0 1012 #define BSIM4v7_GCRG 1013 #define BSIM4v7_GTAU 1014 #define BSIM4v7_MOD_LTVOFF 1051 #define BSIM4v7_MOD_LTVFBSDOFF 1052 #define BSIM4v7_MOD_WTVOFF 1053 #define BSIM4v7_MOD_WTVFBSDOFF 1054 #define BSIM4v7_MOD_PTVOFF 1055 #define BSIM4v7_MOD_PTVFBSDOFF 1056 #define BSIM4v7_MOD_LKVTH0WE 1061 #define BSIM4v7_MOD_LK2WE 1062 #define BSIM4v7_MOD_LKU0WE 1063 #define BSIM4v7_MOD_WKVTH0WE 1064 #define BSIM4v7_MOD_WK2WE 1065 #define BSIM4v7_MOD_WKU0WE 1066 #define BSIM4v7_MOD_PKVTH0WE 1067 #define BSIM4v7_MOD_PK2WE 1068 #define BSIM4v7_MOD_PKU0WE 1069 #define BSIM4v7_MOD_RBPS0 1101 #define BSIM4v7_MOD_RBPSL 1102 #define BSIM4v7_MOD_RBPSW 1103 #define BSIM4v7_MOD_RBPSNF 1104 #define BSIM4v7_MOD_RBPD0 1105 #define BSIM4v7_MOD_RBPDL 1106 #define BSIM4v7_MOD_RBPDW 1107 #define BSIM4v7_MOD_RBPDNF 1108 #define BSIM4v7_MOD_RBPBX0 1109 #define BSIM4v7_MOD_RBPBXL 1110 #define BSIM4v7_MOD_RBPBXW 1111 #define BSIM4v7_MOD_RBPBXNF 1112 #define BSIM4v7_MOD_RBPBY0 1113 #define BSIM4v7_MOD_RBPBYL 1114 #define BSIM4v7_MOD_RBPBYW 1115 #define BSIM4v7_MOD_RBPBYNF 1116 #define BSIM4v7_MOD_RBSBX0 1117 #define BSIM4v7_MOD_RBSBY0 1118 #define BSIM4v7_MOD_RBDBX0 1119 #define BSIM4v7_MOD_RBDBY0 1120 #define BSIM4v7_MOD_RBSDBXL 1121 #define BSIM4v7_MOD_RBSDBXW 1122 #define BSIM4v7_MOD_RBSDBXNF 1123 #define BSIM4v7_MOD_RBSDBYL 1124 #define BSIM4v7_MOD_RBSDBYW 1125 #define BSIM4v7_MOD_RBSDBYNF 1126 #define BSIM4v7_MOD_AGISL 1200 #define BSIM4v7_MOD_BGISL 1201 #define BSIM4v7_MOD_EGISL 1202 #define BSIM4v7_MOD_CGISL 1203 #define BSIM4v7_MOD_LAGISL 1204 #define BSIM4v7_MOD_LBGISL 1205 #define BSIM4v7_MOD_LEGISL 1206 #define BSIM4v7_MOD_LCGISL 1207 #define BSIM4v7_MOD_WAGISL 1208 #define BSIM4v7_MOD_WBGISL 1209 #define BSIM4v7_MOD_WEGISL 1210 #define BSIM4v7_MOD_WCGISL 1211 #define BSIM4v7_MOD_PAGISL 1212 #define BSIM4v7_MOD_PBGISL 1213 #define BSIM4v7_MOD_PEGISL 1214 #define BSIM4v7_MOD_PCGISL 1215 #define BSIM4v7_MOD_AIGS 1220 #define BSIM4v7_MOD_BIGS 1221 #define BSIM4v7_MOD_CIGS 1222 #define BSIM4v7_MOD_LAIGS 1223 #define BSIM4v7_MOD_LBIGS 1224 #define BSIM4v7_MOD_LCIGS 1225 #define BSIM4v7_MOD_WAIGS 1226 #define BSIM4v7_MOD_WBIGS 1227 #define BSIM4v7_MOD_WCIGS 1228 #define BSIM4v7_MOD_PAIGS 1229 #define BSIM4v7_MOD_PBIGS 1230 #define BSIM4v7_MOD_PCIGS 1231 #define BSIM4v7_MOD_AIGD 1232 #define BSIM4v7_MOD_BIGD 1233 #define BSIM4v7_MOD_CIGD 1234 #define BSIM4v7_MOD_LAIGD 1235 #define BSIM4v7_MOD_LBIGD 1236 #define BSIM4v7_MOD_LCIGD 1237 #define BSIM4v7_MOD_WAIGD 1238 #define BSIM4v7_MOD_WBIGD 1239 #define BSIM4v7_MOD_WCIGD 1240 #define BSIM4v7_MOD_PAIGD 1241 #define BSIM4v7_MOD_PBIGD 1242 #define BSIM4v7_MOD_PCIGD 1243 #define BSIM4v7_MOD_DLCIGD 1244 #define BSIM4v7_MOD_NJTSD 1250 #define BSIM4v7_MOD_NJTSSWD 1251 #define BSIM4v7_MOD_NJTSSWGD 1252 #define BSIM4v7_MOD_TNJTSD 1253 #define BSIM4v7_MOD_TNJTSSWD 1254 #define BSIM4v7_MOD_TNJTSSWGD 1255 /* v4.7 temp dep of leakage current */ #define BSIM4v7_MOD_TNFACTOR 1256 #define BSIM4v7_MOD_TETA0 1257 #define BSIM4v7_MOD_TVOFFCV 1258 #define BSIM4v7_MOD_LTNFACTOR 1260 #define BSIM4v7_MOD_LTETA0 1261 #define BSIM4v7_MOD_LTVOFFCV 1262 #define BSIM4v7_MOD_WTNFACTOR 1264 #define BSIM4v7_MOD_WTETA0 1265 #define BSIM4v7_MOD_WTVOFFCV 1266 #define BSIM4v7_MOD_PTNFACTOR 1268 #define BSIM4v7_MOD_PTETA0 1269 #define BSIM4v7_MOD_PTVOFFCV 1270 /* tnoiMod=2 (v4.7) */ #define BSIM4v7_MOD_TNOIC 1272 #define BSIM4v7_MOD_RNOIC 1273 #define BSIM4v7_MOD_VGS_MAX 1301 #define BSIM4v7_MOD_VGD_MAX 1302 #define BSIM4v7_MOD_VGB_MAX 1303 #define BSIM4v7_MOD_VDS_MAX 1304 #define BSIM4v7_MOD_VBS_MAX 1305 #define BSIM4v7_MOD_VBD_MAX 1306 #define BSIM4v7_MOD_VGSR_MAX 1307 #define BSIM4v7_MOD_VGDR_MAX 1308 #define BSIM4v7_MOD_VGBR_MAX 1309 #define BSIM4v7_MOD_VBSR_MAX 1310 #define BSIM4v7_MOD_VBDR_MAX 1311 #include "bsim4v7ext.h" extern void BSIM4v7evaluate(double,double,double,BSIM4v7instance*,BSIM4v7model*, double*,double*,double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, CKTcircuit*); extern int BSIM4v7debug(BSIM4v7model*, BSIM4v7instance*, CKTcircuit*, int); extern int BSIM4v7checkModel(BSIM4v7model*, BSIM4v7instance*, CKTcircuit*); extern int BSIM4v7PAeffGeo(double, int, int, double, double, double, double, double *, double *, double *, double *); extern int BSIM4v7RdseffGeo(double, int, int, int, double, double, double, double, double, int, double *); extern int BSIM4v7RdsEndIso(double, double, double, double, double, double, int, int, double *); extern int BSIM4v7RdsEndSha(double, double, double, double, double, double, int, int, double *); #endif /*BSIM4v7*/ tmpk8ny_4pz/src/spicelib/devices/bsim4v7/b4v7pzld.c0000644000175000017500000011003613546075722022277 0ustar carstencarsten/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4pzld.c of BSIM4.7.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 10/05/2001. **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "bsim4v7def.h" #include "ngspice/suffix.h" int BSIM4v7pzLoad( GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { BSIM4v7model *model = (BSIM4v7model*)inModel; BSIM4v7instance *here; double gjbd, gjbs, geltd, gcrg, gcrgg, gcrgd, gcrgs, gcrgb; double xcggb, xcgdb, xcgsb, xcgbb, xcbgb, xcbdb, xcbsb, xcbbb; double xcdgb, xcddb, xcdsb, xcdbb, xcsgb, xcsdb, xcssb, xcsbb; double gds, capbd, capbs, FwdSum, RevSum, Gm, Gmbs; double gstot, gstotd, gstotg, gstots, gstotb, gspr; double gdtot, gdtotd, gdtotg, gdtots, gdtotb, gdpr; double gIstotg, gIstotd, gIstots, gIstotb; double gIdtotg, gIdtotd, gIdtots, gIdtotb; double gIbtotg, gIbtotd, gIbtots, gIbtotb; double gIgtotg, gIgtotd, gIgtots, gIgtotb; double cgso, cgdo, cgbo; double xcdbdb=0.0, xcsbsb=0.0, xcgmgmb=0.0, xcgmdb=0.0, xcgmsb=0.0, xcdgmb=0.0, xcsgmb=0.0; double xcgmbb=0.0, xcbgmb=0.0; double dxpart, sxpart, xgtg, xgtd, xgts, xgtb, xcqgb=0.0, xcqdb=0.0, xcqsb=0.0, xcqbb=0.0; double gbspsp, gbbdp, gbbsp, gbspg, gbspb; double gbspdp, gbdpdp, gbdpg, gbdpb, gbdpsp; double ddxpart_dVd, ddxpart_dVg, ddxpart_dVb, ddxpart_dVs; double dsxpart_dVd, dsxpart_dVg, dsxpart_dVb, dsxpart_dVs; double T0=0.0, T1, CoxWL, qcheq, Cdg, Cdd, Cds, Csg, Csd, Css; double ScalingFactor = 1.0e-9; struct bsim4SizeDependParam *pParam; double ggidld, ggidlg, ggidlb, ggislg, ggislb, ggisls; double m; for (; model != NULL; model = BSIM4v7nextModel(model)) { for (here = BSIM4v7instances(model); here!= NULL; here = BSIM4v7nextInstance(here)) { pParam = here->pParam; capbd = here->BSIM4v7capbd; capbs = here->BSIM4v7capbs; cgso = here->BSIM4v7cgso; cgdo = here->BSIM4v7cgdo; cgbo = pParam->BSIM4v7cgbo; if (here->BSIM4v7mode >= 0) { Gm = here->BSIM4v7gm; Gmbs = here->BSIM4v7gmbs; FwdSum = Gm + Gmbs; RevSum = 0.0; gbbdp = -(here->BSIM4v7gbds); gbbsp = here->BSIM4v7gbds + here->BSIM4v7gbgs + here->BSIM4v7gbbs; gbdpg = here->BSIM4v7gbgs; gbdpdp = here->BSIM4v7gbds; gbdpb = here->BSIM4v7gbbs; gbdpsp = -(gbdpg + gbdpdp + gbdpb); gbspdp = 0.0; gbspg = 0.0; gbspb = 0.0; gbspsp = 0.0; if (model->BSIM4v7igcMod) { gIstotg = here->BSIM4v7gIgsg + here->BSIM4v7gIgcsg; gIstotd = here->BSIM4v7gIgcsd; gIstots = here->BSIM4v7gIgss + here->BSIM4v7gIgcss; gIstotb = here->BSIM4v7gIgcsb; gIdtotg = here->BSIM4v7gIgdg + here->BSIM4v7gIgcdg; gIdtotd = here->BSIM4v7gIgdd + here->BSIM4v7gIgcdd; gIdtots = here->BSIM4v7gIgcds; gIdtotb = here->BSIM4v7gIgcdb; } else { gIstotg = gIstotd = gIstots = gIstotb = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = 0.0; } if (model->BSIM4v7igbMod) { gIbtotg = here->BSIM4v7gIgbg; gIbtotd = here->BSIM4v7gIgbd; gIbtots = here->BSIM4v7gIgbs; gIbtotb = here->BSIM4v7gIgbb; } else gIbtotg = gIbtotd = gIbtots = gIbtotb = 0.0; if ((model->BSIM4v7igcMod != 0) || (model->BSIM4v7igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = 0.0; if (here->BSIM4v7rgateMod == 2) T0 = *(ckt->CKTstates[0] + here->BSIM4v7vges) - *(ckt->CKTstates[0] + here->BSIM4v7vgs); else if (here->BSIM4v7rgateMod == 3) T0 = *(ckt->CKTstates[0] + here->BSIM4v7vgms) - *(ckt->CKTstates[0] + here->BSIM4v7vgs); if (here->BSIM4v7rgateMod > 1) { gcrgd = here->BSIM4v7gcrgd * T0; gcrgg = here->BSIM4v7gcrgg * T0; gcrgs = here->BSIM4v7gcrgs * T0; gcrgb = here->BSIM4v7gcrgb * T0; gcrgg -= here->BSIM4v7gcrg; gcrg = here->BSIM4v7gcrg; } else gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; if (here->BSIM4v7acnqsMod == 0) { if (here->BSIM4v7rgateMod == 3) { xcgmgmb = cgdo + cgso + pParam->BSIM4v7cgbo; xcgmdb = -cgdo; xcgmsb = -cgso; xcgmbb = -pParam->BSIM4v7cgbo; xcdgmb = xcgmdb; xcsgmb = xcgmsb; xcbgmb = xcgmbb; xcggb = here->BSIM4v7cggb; xcgdb = here->BSIM4v7cgdb; xcgsb = here->BSIM4v7cgsb; xcgbb = -(xcggb + xcgdb + xcgsb); xcdgb = here->BSIM4v7cdgb; xcsgb = -(here->BSIM4v7cggb + here->BSIM4v7cbgb + here->BSIM4v7cdgb); xcbgb = here->BSIM4v7cbgb; } else { xcggb = here->BSIM4v7cggb + cgdo + cgso + pParam->BSIM4v7cgbo; xcgdb = here->BSIM4v7cgdb - cgdo; xcgsb = here->BSIM4v7cgsb - cgso; xcgbb = -(xcggb + xcgdb + xcgsb); xcdgb = here->BSIM4v7cdgb - cgdo; xcsgb = -(here->BSIM4v7cggb + here->BSIM4v7cbgb + here->BSIM4v7cdgb + cgso); xcbgb = here->BSIM4v7cbgb - pParam->BSIM4v7cgbo; xcdgmb = xcsgmb = xcbgmb = 0.0; } xcddb = here->BSIM4v7cddb + here->BSIM4v7capbd + cgdo; xcdsb = here->BSIM4v7cdsb; xcsdb = -(here->BSIM4v7cgdb + here->BSIM4v7cbdb + here->BSIM4v7cddb); xcssb = here->BSIM4v7capbs + cgso - (here->BSIM4v7cgsb + here->BSIM4v7cbsb + here->BSIM4v7cdsb); if (!here->BSIM4v7rbodyMod) { xcdbb = -(xcdgb + xcddb + xcdsb + xcdgmb); xcsbb = -(xcsgb + xcsdb + xcssb + xcsgmb); xcbdb = here->BSIM4v7cbdb - here->BSIM4v7capbd; xcbsb = here->BSIM4v7cbsb - here->BSIM4v7capbs; xcdbdb = 0.0; } else { xcdbb = -(here->BSIM4v7cddb + here->BSIM4v7cdgb + here->BSIM4v7cdsb); xcsbb = -(xcsgb + xcsdb + xcssb + xcsgmb) + here->BSIM4v7capbs; xcbdb = here->BSIM4v7cbdb; xcbsb = here->BSIM4v7cbsb; xcdbdb = -here->BSIM4v7capbd; xcsbsb = -here->BSIM4v7capbs; } xcbbb = -(xcbdb + xcbgb + xcbsb + xcbgmb); xgtg = xgtd = xgts = xgtb = 0.0; sxpart = 0.6; dxpart = 0.4; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { xcggb = xcgdb = xcgsb = xcgbb = 0.0; xcbgb = xcbdb = xcbsb = xcbbb = 0.0; xcdgb = xcddb = xcdsb = xcdbb = 0.0; xcsgb = xcsdb = xcssb = xcsbb = 0.0; xgtg = here->BSIM4v7gtg; xgtd = here->BSIM4v7gtd; xgts = here->BSIM4v7gts; xgtb = here->BSIM4v7gtb; xcqgb = here->BSIM4v7cqgb; xcqdb = here->BSIM4v7cqdb; xcqsb = here->BSIM4v7cqsb; xcqbb = here->BSIM4v7cqbb; CoxWL = model->BSIM4v7coxe * here->pParam->BSIM4v7weffCV * here->BSIM4v7nf * here->pParam->BSIM4v7leffCV; qcheq = -(here->BSIM4v7qgate + here->BSIM4v7qbulk); if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM4v7xpart < 0.5) { dxpart = 0.4; } else if (model->BSIM4v7xpart > 0.5) { dxpart = 0.0; } else { dxpart = 0.5; } ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; } else { dxpart = here->BSIM4v7qdrn / qcheq; Cdd = here->BSIM4v7cddb; Csd = -(here->BSIM4v7cgdb + here->BSIM4v7cddb + here->BSIM4v7cbdb); ddxpart_dVd = (Cdd - dxpart * (Cdd + Csd)) / qcheq; Cdg = here->BSIM4v7cdgb; Csg = -(here->BSIM4v7cggb + here->BSIM4v7cdgb + here->BSIM4v7cbgb); ddxpart_dVg = (Cdg - dxpart * (Cdg + Csg)) / qcheq; Cds = here->BSIM4v7cdsb; Css = -(here->BSIM4v7cgsb + here->BSIM4v7cdsb + here->BSIM4v7cbsb); ddxpart_dVs = (Cds - dxpart * (Cds + Css)) / qcheq; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); } sxpart = 1.0 - dxpart; dsxpart_dVd = -ddxpart_dVd; dsxpart_dVg = -ddxpart_dVg; dsxpart_dVs = -ddxpart_dVs; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); } } else { Gm = -here->BSIM4v7gm; Gmbs = -here->BSIM4v7gmbs; FwdSum = 0.0; RevSum = -(Gm + Gmbs); gbbsp = -(here->BSIM4v7gbds); gbbdp = here->BSIM4v7gbds + here->BSIM4v7gbgs + here->BSIM4v7gbbs; gbdpg = 0.0; gbdpsp = 0.0; gbdpb = 0.0; gbdpdp = 0.0; gbspg = here->BSIM4v7gbgs; gbspsp = here->BSIM4v7gbds; gbspb = here->BSIM4v7gbbs; gbspdp = -(gbspg + gbspsp + gbspb); if (model->BSIM4v7igcMod) { gIstotg = here->BSIM4v7gIgsg + here->BSIM4v7gIgcdg; gIstotd = here->BSIM4v7gIgcds; gIstots = here->BSIM4v7gIgss + here->BSIM4v7gIgcdd; gIstotb = here->BSIM4v7gIgcdb; gIdtotg = here->BSIM4v7gIgdg + here->BSIM4v7gIgcsg; gIdtotd = here->BSIM4v7gIgdd + here->BSIM4v7gIgcss; gIdtots = here->BSIM4v7gIgcsd; gIdtotb = here->BSIM4v7gIgcsb; } else { gIstotg = gIstotd = gIstots = gIstotb = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = 0.0; } if (model->BSIM4v7igbMod) { gIbtotg = here->BSIM4v7gIgbg; gIbtotd = here->BSIM4v7gIgbs; gIbtots = here->BSIM4v7gIgbd; gIbtotb = here->BSIM4v7gIgbb; } else gIbtotg = gIbtotd = gIbtots = gIbtotb = 0.0; if ((model->BSIM4v7igcMod != 0) || (model->BSIM4v7igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = 0.0; if (here->BSIM4v7rgateMod == 2) T0 = *(ckt->CKTstates[0] + here->BSIM4v7vges) - *(ckt->CKTstates[0] + here->BSIM4v7vgs); else if (here->BSIM4v7rgateMod == 3) T0 = *(ckt->CKTstates[0] + here->BSIM4v7vgms) - *(ckt->CKTstates[0] + here->BSIM4v7vgs); if (here->BSIM4v7rgateMod > 1) { gcrgd = here->BSIM4v7gcrgs * T0; gcrgg = here->BSIM4v7gcrgg * T0; gcrgs = here->BSIM4v7gcrgd * T0; gcrgb = here->BSIM4v7gcrgb * T0; gcrgg -= here->BSIM4v7gcrg; gcrg = here->BSIM4v7gcrg; } else gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; if (here->BSIM4v7acnqsMod == 0) { if (here->BSIM4v7rgateMod == 3) { xcgmgmb = cgdo + cgso + pParam->BSIM4v7cgbo; xcgmdb = -cgdo; xcgmsb = -cgso; xcgmbb = -pParam->BSIM4v7cgbo; xcdgmb = xcgmdb; xcsgmb = xcgmsb; xcbgmb = xcgmbb; xcggb = here->BSIM4v7cggb; xcgdb = here->BSIM4v7cgsb; xcgsb = here->BSIM4v7cgdb; xcgbb = -(xcggb + xcgdb + xcgsb); xcdgb = -(here->BSIM4v7cggb + here->BSIM4v7cbgb + here->BSIM4v7cdgb); xcsgb = here->BSIM4v7cdgb; xcbgb = here->BSIM4v7cbgb; } else { xcggb = here->BSIM4v7cggb + cgdo + cgso + pParam->BSIM4v7cgbo; xcgdb = here->BSIM4v7cgsb - cgdo; xcgsb = here->BSIM4v7cgdb - cgso; xcgbb = -(xcggb + xcgdb + xcgsb); xcdgb = -(here->BSIM4v7cggb + here->BSIM4v7cbgb + here->BSIM4v7cdgb + cgdo); xcsgb = here->BSIM4v7cdgb - cgso; xcbgb = here->BSIM4v7cbgb - pParam->BSIM4v7cgbo; xcdgmb = xcsgmb = xcbgmb = 0.0; } xcddb = here->BSIM4v7capbd + cgdo - (here->BSIM4v7cgsb + here->BSIM4v7cbsb + here->BSIM4v7cdsb); xcdsb = -(here->BSIM4v7cgdb + here->BSIM4v7cbdb + here->BSIM4v7cddb); xcsdb = here->BSIM4v7cdsb; xcssb = here->BSIM4v7cddb + here->BSIM4v7capbs + cgso; if (!here->BSIM4v7rbodyMod) { xcdbb = -(xcdgb + xcddb + xcdsb + xcdgmb); xcsbb = -(xcsgb + xcsdb + xcssb + xcsgmb); xcbdb = here->BSIM4v7cbsb - here->BSIM4v7capbd; xcbsb = here->BSIM4v7cbdb - here->BSIM4v7capbs; xcdbdb = 0.0; } else { xcdbb = -(xcdgb + xcddb + xcdsb + xcdgmb) + here->BSIM4v7capbd; xcsbb = -(here->BSIM4v7cddb + here->BSIM4v7cdgb + here->BSIM4v7cdsb); xcbdb = here->BSIM4v7cbsb; xcbsb = here->BSIM4v7cbdb; xcdbdb = -here->BSIM4v7capbd; xcsbsb = -here->BSIM4v7capbs; } xcbbb = -(xcbgb + xcbdb + xcbsb + xcbgmb); xgtg = xgtd = xgts = xgtb = 0.0; sxpart = 0.4; dxpart = 0.6; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { xcggb = xcgdb = xcgsb = xcgbb = 0.0; xcbgb = xcbdb = xcbsb = xcbbb = 0.0; xcdgb = xcddb = xcdsb = xcdbb = 0.0; xcsgb = xcsdb = xcssb = xcsbb = 0.0; xgtg = here->BSIM4v7gtg; xgtd = here->BSIM4v7gts; xgts = here->BSIM4v7gtd; xgtb = here->BSIM4v7gtb; xcqgb = here->BSIM4v7cqgb; xcqdb = here->BSIM4v7cqsb; xcqsb = here->BSIM4v7cqdb; xcqbb = here->BSIM4v7cqbb; CoxWL = model->BSIM4v7coxe * here->pParam->BSIM4v7weffCV * here->BSIM4v7nf * here->pParam->BSIM4v7leffCV; qcheq = -(here->BSIM4v7qgate + here->BSIM4v7qbulk); if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM4v7xpart < 0.5) { sxpart = 0.4; } else if (model->BSIM4v7xpart > 0.5) { sxpart = 0.0; } else { sxpart = 0.5; } dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { sxpart = here->BSIM4v7qdrn / qcheq; Css = here->BSIM4v7cddb; Cds = -(here->BSIM4v7cgdb + here->BSIM4v7cddb + here->BSIM4v7cbdb); dsxpart_dVs = (Css - sxpart * (Css + Cds)) / qcheq; Csg = here->BSIM4v7cdgb; Cdg = -(here->BSIM4v7cggb + here->BSIM4v7cdgb + here->BSIM4v7cbgb); dsxpart_dVg = (Csg - sxpart * (Csg + Cdg)) / qcheq; Csd = here->BSIM4v7cdsb; Cdd = -(here->BSIM4v7cgsb + here->BSIM4v7cdsb + here->BSIM4v7cbsb); dsxpart_dVd = (Csd - sxpart * (Csd + Cdd)) / qcheq; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); } dxpart = 1.0 - sxpart; ddxpart_dVd = -dsxpart_dVd; ddxpart_dVg = -dsxpart_dVg; ddxpart_dVs = -dsxpart_dVs; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); } } if (model->BSIM4v7rdsMod == 1) { gstot = here->BSIM4v7gstot; gstotd = here->BSIM4v7gstotd; gstotg = here->BSIM4v7gstotg; gstots = here->BSIM4v7gstots - gstot; gstotb = here->BSIM4v7gstotb; gdtot = here->BSIM4v7gdtot; gdtotd = here->BSIM4v7gdtotd - gdtot; gdtotg = here->BSIM4v7gdtotg; gdtots = here->BSIM4v7gdtots; gdtotb = here->BSIM4v7gdtotb; } else { gstot = gstotd = gstotg = gstots = gstotb = 0.0; gdtot = gdtotd = gdtotg = gdtots = gdtotb = 0.0; } T1 = *(ckt->CKTstate0 + here->BSIM4v7qdef) * here->BSIM4v7gtau; gds = here->BSIM4v7gds; /* * Loading PZ matrix */ m = here->BSIM4v7m; if (!model->BSIM4v7rdsMod) { gdpr = here->BSIM4v7drainConductance; gspr = here->BSIM4v7sourceConductance; } else gdpr = gspr = 0.0; if (!here->BSIM4v7rbodyMod) { gjbd = here->BSIM4v7gbd; gjbs = here->BSIM4v7gbs; } else gjbd = gjbs = 0.0; geltd = here->BSIM4v7grgeltd; if (here->BSIM4v7rgateMod == 1) { *(here->BSIM4v7GEgePtr) += m * geltd; *(here->BSIM4v7GPgePtr) -= m * geltd; *(here->BSIM4v7GEgpPtr) -= m * geltd; *(here->BSIM4v7GPgpPtr ) += m * xcggb * s->real; *(here->BSIM4v7GPgpPtr +1) += m * xcggb * s->imag; *(here->BSIM4v7GPgpPtr) += m * (geltd - xgtg + gIgtotg); *(here->BSIM4v7GPdpPtr ) += m * xcgdb * s->real; *(here->BSIM4v7GPdpPtr +1) += m * xcgdb * s->imag; *(here->BSIM4v7GPdpPtr) -= m * (xgtd - gIgtotd); *(here->BSIM4v7GPspPtr ) += m * xcgsb * s->real; *(here->BSIM4v7GPspPtr +1) += m * xcgsb * s->imag; *(here->BSIM4v7GPspPtr) -= m * (xgts - gIgtots); *(here->BSIM4v7GPbpPtr ) += m * xcgbb * s->real; *(here->BSIM4v7GPbpPtr +1) += m * xcgbb * s->imag; *(here->BSIM4v7GPbpPtr) -= m * (xgtb - gIgtotb); } else if (here->BSIM4v7rgateMod == 2) { *(here->BSIM4v7GEgePtr) += m * gcrg; *(here->BSIM4v7GEgpPtr) += m * gcrgg; *(here->BSIM4v7GEdpPtr) += m * gcrgd; *(here->BSIM4v7GEspPtr) += m * gcrgs; *(here->BSIM4v7GEbpPtr) += m * gcrgb; *(here->BSIM4v7GPgePtr) -= m * gcrg; *(here->BSIM4v7GPgpPtr ) += m * xcggb * s->real; *(here->BSIM4v7GPgpPtr +1) += m * xcggb * s->imag; *(here->BSIM4v7GPgpPtr) -= m * (gcrgg + xgtg - gIgtotg); *(here->BSIM4v7GPdpPtr ) += m * xcgdb * s->real; *(here->BSIM4v7GPdpPtr +1) += m * xcgdb * s->imag; *(here->BSIM4v7GPdpPtr) -= m * (gcrgd + xgtd - gIgtotd); *(here->BSIM4v7GPspPtr ) += m * xcgsb * s->real; *(here->BSIM4v7GPspPtr +1) += m * xcgsb * s->imag; *(here->BSIM4v7GPspPtr) -= m * (gcrgs + xgts - gIgtots); *(here->BSIM4v7GPbpPtr ) += m * xcgbb * s->real; *(here->BSIM4v7GPbpPtr +1) += m * xcgbb * s->imag; *(here->BSIM4v7GPbpPtr) -= m * (gcrgb + xgtb - gIgtotb); } else if (here->BSIM4v7rgateMod == 3) { *(here->BSIM4v7GEgePtr) += m * geltd; *(here->BSIM4v7GEgmPtr) -= m * geltd; *(here->BSIM4v7GMgePtr) -= m * geltd; *(here->BSIM4v7GMgmPtr) += m * (geltd + gcrg); *(here->BSIM4v7GMgmPtr ) += m * xcgmgmb * s->real; *(here->BSIM4v7GMgmPtr +1) += m * xcgmgmb * s->imag; *(here->BSIM4v7GMdpPtr) += m * gcrgd; *(here->BSIM4v7GMdpPtr ) += m * xcgmdb * s->real; *(here->BSIM4v7GMdpPtr +1) += m * xcgmdb * s->imag; *(here->BSIM4v7GMgpPtr) += m * gcrgg; *(here->BSIM4v7GMspPtr) += m * gcrgs; *(here->BSIM4v7GMspPtr ) += m * xcgmsb * s->real; *(here->BSIM4v7GMspPtr +1) += m * xcgmsb * s->imag; *(here->BSIM4v7GMbpPtr) += m * gcrgb; *(here->BSIM4v7GMbpPtr ) += m * xcgmbb * s->real; *(here->BSIM4v7GMbpPtr +1) += m * xcgmbb * s->imag; *(here->BSIM4v7DPgmPtr ) += m * xcdgmb * s->real; *(here->BSIM4v7DPgmPtr +1) += m * xcdgmb * s->imag; *(here->BSIM4v7GPgmPtr) -= m * gcrg; *(here->BSIM4v7SPgmPtr ) += m * xcsgmb * s->real; *(here->BSIM4v7SPgmPtr +1) += m * xcsgmb * s->imag; *(here->BSIM4v7BPgmPtr ) += m * xcbgmb * s->real; *(here->BSIM4v7BPgmPtr +1) += m * xcbgmb * s->imag; *(here->BSIM4v7GPgpPtr) -= m * (gcrgg + xgtg - gIgtotg); *(here->BSIM4v7GPgpPtr ) += m * xcggb * s->real; *(here->BSIM4v7GPgpPtr +1) += m * xcggb * s->imag; *(here->BSIM4v7GPdpPtr) -= m * (gcrgd + xgtd - gIgtotd); *(here->BSIM4v7GPdpPtr ) += m * xcgdb * s->real; *(here->BSIM4v7GPdpPtr +1) += m * xcgdb * s->imag; *(here->BSIM4v7GPspPtr) -= m * (gcrgs + xgts - gIgtots); *(here->BSIM4v7GPspPtr ) += m * xcgsb * s->real; *(here->BSIM4v7GPspPtr +1) += m * xcgsb * s->imag; *(here->BSIM4v7GPbpPtr) -= m * (gcrgb + xgtb - gIgtotb); *(here->BSIM4v7GPbpPtr ) += m * xcgbb * s->real; *(here->BSIM4v7GPbpPtr +1) += m * xcgbb * s->imag; } else { *(here->BSIM4v7GPdpPtr ) += m * xcgdb * s->real; *(here->BSIM4v7GPdpPtr +1) += m * xcgdb * s->imag; *(here->BSIM4v7GPdpPtr) -= m * (xgtd - gIgtotd); *(here->BSIM4v7GPgpPtr ) += m * xcggb * s->real; *(here->BSIM4v7GPgpPtr +1) += m * xcggb * s->imag; *(here->BSIM4v7GPgpPtr) -= m * (xgtg - gIgtotg); *(here->BSIM4v7GPspPtr ) += m * xcgsb * s->real; *(here->BSIM4v7GPspPtr +1) += m * xcgsb * s->imag; *(here->BSIM4v7GPspPtr) -= m * (xgts - gIgtots); *(here->BSIM4v7GPbpPtr ) += m * xcgbb * s->real; *(here->BSIM4v7GPbpPtr +1) += m * xcgbb * s->imag; *(here->BSIM4v7GPbpPtr) -= m * (xgtb - gIgtotb); } if (model->BSIM4v7rdsMod) { (*(here->BSIM4v7DgpPtr) += m * gdtotg); (*(here->BSIM4v7DspPtr) += m * gdtots); (*(here->BSIM4v7DbpPtr) += m * gdtotb); (*(here->BSIM4v7SdpPtr) += m * gstotd); (*(here->BSIM4v7SgpPtr) += m * gstotg); (*(here->BSIM4v7SbpPtr) += m * gstotb); } *(here->BSIM4v7DPdpPtr ) += m * xcddb * s->real; *(here->BSIM4v7DPdpPtr +1) += m * xcddb * s->imag; *(here->BSIM4v7DPdpPtr) += m * (gdpr + gds + here->BSIM4v7gbd - gdtotd + RevSum + gbdpdp - gIdtotd + dxpart * xgtd + T1 * ddxpart_dVd); *(here->BSIM4v7DPdPtr) -= m * (gdpr + gdtot); *(here->BSIM4v7DPgpPtr ) += m * xcdgb * s->real; *(here->BSIM4v7DPgpPtr +1) += m * xcdgb * s->imag; *(here->BSIM4v7DPgpPtr) += m * (Gm - gdtotg + gbdpg - gIdtotg + T1 * ddxpart_dVg + dxpart * xgtg); *(here->BSIM4v7DPspPtr ) += m * xcdsb * s->real; *(here->BSIM4v7DPspPtr +1) += m * xcdsb * s->imag; *(here->BSIM4v7DPspPtr) -= m * (gds + FwdSum + gdtots - gbdpsp + gIdtots - T1 * ddxpart_dVs - dxpart * xgts); *(here->BSIM4v7DPbpPtr ) += m * xcdbb * s->real; *(here->BSIM4v7DPbpPtr +1) += m * xcdbb * s->imag; *(here->BSIM4v7DPbpPtr) -= m * (gjbd + gdtotb - Gmbs - gbdpb + gIdtotb - T1 * ddxpart_dVb - dxpart * xgtb); *(here->BSIM4v7DdpPtr) -= m * (gdpr - gdtotd); *(here->BSIM4v7DdPtr) += m * (gdpr + gdtot); *(here->BSIM4v7SPdpPtr ) += m * xcsdb * s->real; *(here->BSIM4v7SPdpPtr +1) += m * xcsdb * s->imag; *(here->BSIM4v7SPdpPtr) -= m * (gds + gstotd + RevSum - gbspdp + gIstotd - T1 * dsxpart_dVd - sxpart * xgtd); *(here->BSIM4v7SPgpPtr ) += m * xcsgb * s->real; *(here->BSIM4v7SPgpPtr +1) += m * xcsgb * s->imag; *(here->BSIM4v7SPgpPtr) -= m * (Gm + gstotg - gbspg + gIstotg - T1 * dsxpart_dVg - sxpart * xgtg); *(here->BSIM4v7SPspPtr ) += m * xcssb * s->real; *(here->BSIM4v7SPspPtr +1) += m * xcssb * s->imag; *(here->BSIM4v7SPspPtr) += m * (gspr + gds + here->BSIM4v7gbs - gIstots - gstots + FwdSum + gbspsp + sxpart * xgts + T1 * dsxpart_dVs); *(here->BSIM4v7SPsPtr) -= m * (gspr + gstot); *(here->BSIM4v7SPbpPtr ) += m * xcsbb * s->real; *(here->BSIM4v7SPbpPtr +1) += m * xcsbb * s->imag; *(here->BSIM4v7SPbpPtr) -= m * (gjbs + gstotb + Gmbs - gbspb + gIstotb - T1 * dsxpart_dVb - sxpart * xgtb); *(here->BSIM4v7SspPtr) -= m * (gspr - gstots); *(here->BSIM4v7SsPtr) += m * (gspr + gstot); *(here->BSIM4v7BPdpPtr ) += m * xcbdb * s->real; *(here->BSIM4v7BPdpPtr +1) += m * xcbdb * s->imag; *(here->BSIM4v7BPdpPtr) -= m * (gjbd - gbbdp + gIbtotd); *(here->BSIM4v7BPgpPtr ) += m * xcbgb * s->real; *(here->BSIM4v7BPgpPtr +1) += m * xcbgb * s->imag; *(here->BSIM4v7BPgpPtr) -= m * (here->BSIM4v7gbgs + gIbtotg); *(here->BSIM4v7BPspPtr ) += m * xcbsb * s->real; *(here->BSIM4v7BPspPtr +1) += m * xcbsb * s->imag; *(here->BSIM4v7BPspPtr) -= m * (gjbs - gbbsp + gIbtots); *(here->BSIM4v7BPbpPtr ) += m * xcbbb * s->real; *(here->BSIM4v7BPbpPtr +1) += m * xcbbb * s->imag; *(here->BSIM4v7BPbpPtr) += m * (gjbd + gjbs - here->BSIM4v7gbbs - gIbtotb); ggidld = here->BSIM4v7ggidld; ggidlg = here->BSIM4v7ggidlg; ggidlb = here->BSIM4v7ggidlb; ggislg = here->BSIM4v7ggislg; ggisls = here->BSIM4v7ggisls; ggislb = here->BSIM4v7ggislb; /* stamp gidl */ (*(here->BSIM4v7DPdpPtr) += m * ggidld); (*(here->BSIM4v7DPgpPtr) += m * ggidlg); (*(here->BSIM4v7DPspPtr) -= m * ((ggidlg + ggidld) + ggidlb)); (*(here->BSIM4v7DPbpPtr) += m * ggidlb); (*(here->BSIM4v7BPdpPtr) -= m * ggidld); (*(here->BSIM4v7BPgpPtr) -= m * ggidlg); (*(here->BSIM4v7BPspPtr) += m * ((ggidlg + ggidld) + ggidlb)); (*(here->BSIM4v7BPbpPtr) -= m * ggidlb); /* stamp gisl */ (*(here->BSIM4v7SPdpPtr) -= m * ((ggisls + ggislg) + ggislb)); (*(here->BSIM4v7SPgpPtr) += m * ggislg); (*(here->BSIM4v7SPspPtr) += m * ggisls); (*(here->BSIM4v7SPbpPtr) += m * ggislb); (*(here->BSIM4v7BPdpPtr) += m * ((ggislg + ggisls) + ggislb)); (*(here->BSIM4v7BPgpPtr) -= m * ggislg); (*(here->BSIM4v7BPspPtr) -= m * ggisls); (*(here->BSIM4v7BPbpPtr) -= m * ggislb); if (here->BSIM4v7rbodyMod) { (*(here->BSIM4v7DPdbPtr ) += m * xcdbdb * s->real); (*(here->BSIM4v7DPdbPtr +1) += m * xcdbdb * s->imag); (*(here->BSIM4v7DPdbPtr) -= m * here->BSIM4v7gbd); (*(here->BSIM4v7SPsbPtr ) += m * xcsbsb * s->real); (*(here->BSIM4v7SPsbPtr +1) += m * xcsbsb * s->imag); (*(here->BSIM4v7SPsbPtr) -= m * here->BSIM4v7gbs); (*(here->BSIM4v7DBdpPtr ) += m * xcdbdb * s->real); (*(here->BSIM4v7DBdpPtr +1) += m * xcdbdb * s->imag); (*(here->BSIM4v7DBdpPtr) -= m * here->BSIM4v7gbd); (*(here->BSIM4v7DBdbPtr ) -= m * xcdbdb * s->real); (*(here->BSIM4v7DBdbPtr +1) -= m * xcdbdb * s->imag); (*(here->BSIM4v7DBdbPtr) += m * (here->BSIM4v7gbd + here->BSIM4v7grbpd + here->BSIM4v7grbdb)); (*(here->BSIM4v7DBbpPtr) -= m * here->BSIM4v7grbpd); (*(here->BSIM4v7DBbPtr) -= m * here->BSIM4v7grbdb); (*(here->BSIM4v7BPdbPtr) -= m * here->BSIM4v7grbpd); (*(here->BSIM4v7BPbPtr) -= m * here->BSIM4v7grbpb); (*(here->BSIM4v7BPsbPtr) -= m * here->BSIM4v7grbps); (*(here->BSIM4v7BPbpPtr) += m * (here->BSIM4v7grbpd + here->BSIM4v7grbps + here->BSIM4v7grbpb)); /* WDL: (-here->BSIM4v7gbbs) already added to BPbpPtr */ (*(here->BSIM4v7SBspPtr ) += m * xcsbsb * s->real); (*(here->BSIM4v7SBspPtr +1) += m * xcsbsb * s->imag); (*(here->BSIM4v7SBspPtr) -= m * here->BSIM4v7gbs); (*(here->BSIM4v7SBbpPtr) -= m * here->BSIM4v7grbps); (*(here->BSIM4v7SBbPtr) -= m * here->BSIM4v7grbsb); (*(here->BSIM4v7SBsbPtr ) -= m * xcsbsb * s->real); (*(here->BSIM4v7SBsbPtr +1) -= m * xcsbsb * s->imag); (*(here->BSIM4v7SBsbPtr) += m * (here->BSIM4v7gbs + here->BSIM4v7grbps + here->BSIM4v7grbsb)); (*(here->BSIM4v7BdbPtr) -= m * here->BSIM4v7grbdb); (*(here->BSIM4v7BbpPtr) -= m * here->BSIM4v7grbpb); (*(here->BSIM4v7BsbPtr) -= m * here->BSIM4v7grbsb); (*(here->BSIM4v7BbPtr) += m * (here->BSIM4v7grbsb + here->BSIM4v7grbdb + here->BSIM4v7grbpb)); } if (here->BSIM4v7acnqsMod) { *(here->BSIM4v7QqPtr ) += m * s->real * ScalingFactor; *(here->BSIM4v7QqPtr +1) += m * s->imag * ScalingFactor; *(here->BSIM4v7QgpPtr ) -= m * xcqgb * s->real; *(here->BSIM4v7QgpPtr +1) -= m * xcqgb * s->imag; *(here->BSIM4v7QdpPtr ) -= m * xcqdb * s->real; *(here->BSIM4v7QdpPtr +1) -= m * xcqdb * s->imag; *(here->BSIM4v7QbpPtr ) -= m * xcqbb * s->real; *(here->BSIM4v7QbpPtr +1) -= m * xcqbb * s->imag; *(here->BSIM4v7QspPtr ) -= m * xcqsb * s->real; *(here->BSIM4v7QspPtr +1) -= m * xcqsb * s->imag; *(here->BSIM4v7GPqPtr) -= m * here->BSIM4v7gtau; *(here->BSIM4v7DPqPtr) += m * dxpart * here->BSIM4v7gtau; *(here->BSIM4v7SPqPtr) += m * sxpart * here->BSIM4v7gtau; *(here->BSIM4v7QqPtr) += m * here->BSIM4v7gtau; *(here->BSIM4v7QgpPtr) += m * xgtg; *(here->BSIM4v7QdpPtr) += m * xgtd; *(here->BSIM4v7QbpPtr) += m * xgtb; *(here->BSIM4v7QspPtr) += m * xgts; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v7/b4v7temp.c0000644000175000017500000036714013546075722022305 0ustar carstencarsten/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4temp.c of BSIM4.7.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Authors: 2008- Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. * Modified by Mohan Dunga, 12/13/2006. * Modified by Mohan Dunga, Wenwei Yang, 05/18/2007. * Modified by Wenwei Yang, 07/31/2008. * Modified by Tanvir Morshed, Darsen Lu 03/27/2011 **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "bsim4v7def.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define Kb 1.3806226e-23 #define KboQ 8.617087e-5 #define EPS0 8.85418e-12 #define EPSSI 1.03594e-10 #define PI 3.141592654 #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define Charge_q 1.60219e-19 #define DELTA 1.0E-9 #define DEXP(A,B) { \ if (A > EXP_THRESHOLD) { \ B = MAX_EXP*(1.0+(A)-EXP_THRESHOLD); \ } else if (A < -EXP_THRESHOLD) { \ B = MIN_EXP; \ } else { \ B = exp(A); \ } \ } static int BSIM4v7DioIjthVjmEval( double Nvtm, double Ijth, double Isb, double XExpBV, double *Vjm) { double Tb, Tc, EVjmovNv; Tc = XExpBV; Tb = 1.0 + Ijth / Isb - Tc; EVjmovNv = 0.5 * (Tb + sqrt(Tb * Tb + 4.0 * Tc)); *Vjm = Nvtm * log(EVjmovNv); return 0; } int BSIM4v7temp( GENmodel *inModel, CKTcircuit *ckt) { BSIM4v7model *model = (BSIM4v7model*) inModel; BSIM4v7instance *here; struct bsim4SizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam=NULL; double tmp, tmp1, tmp2, tmp3, Eg, Eg0, ni, epssub; double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Lnew=0.0, Wnew; double delTemp, Temp, TRatio, Inv_L, Inv_W, Inv_LW, Vtm0, Tnom; double dumPs, dumPd, dumAs, dumAd, PowWeffWr; double DMCGeff, DMCIeff, DMDGeff; double Nvtms, Nvtmd, SourceSatCurrent, DrainSatCurrent; double T10, T11; double Inv_saref, Inv_sbref, Inv_sa, Inv_sb, rho, Ldrn, dvth0_lod; double W_tmp, Inv_ODeff, OD_offset, dk2_lod, deta0_lod; double lnl, lnw, lnnf, rbpbx, rbpby, rbsbx, rbsby, rbdbx, rbdby,bodymode; double kvsat, wlod, sceff, Wdrn; double V0, lt1, ltw, Theta0, Delt_vth, Vth_NarrowW, Lpe_Vb, Vth; double n,n0, Vgsteff, Vgs_eff, niter, toxpf, toxpi, Tcen, toxe, epsrox, vddeot; double vtfbphi2eot, phieot, TempRatioeot, Vtm0eot, Vtmeot,vbieot; int Size_Not_Found, i; /* loop through all the BSIM4v7 device models */ for (; model != NULL; model = BSIM4v7nextModel(model)) { Temp = ckt->CKTtemp; if (model->BSIM4v7SbulkJctPotential < 0.1) { model->BSIM4v7SbulkJctPotential = 0.1; fprintf(stderr, "Given pbs is less than 0.1. Pbs is set to 0.1.\n"); } if (model->BSIM4v7SsidewallJctPotential < 0.1) { model->BSIM4v7SsidewallJctPotential = 0.1; fprintf(stderr, "Given pbsws is less than 0.1. Pbsws is set to 0.1.\n"); } if (model->BSIM4v7SGatesidewallJctPotential < 0.1) { model->BSIM4v7SGatesidewallJctPotential = 0.1; fprintf(stderr, "Given pbswgs is less than 0.1. Pbswgs is set to 0.1.\n"); } if (model->BSIM4v7DbulkJctPotential < 0.1) { model->BSIM4v7DbulkJctPotential = 0.1; fprintf(stderr, "Given pbd is less than 0.1. Pbd is set to 0.1.\n"); } if (model->BSIM4v7DsidewallJctPotential < 0.1) { model->BSIM4v7DsidewallJctPotential = 0.1; fprintf(stderr, "Given pbswd is less than 0.1. Pbswd is set to 0.1.\n"); } if (model->BSIM4v7DGatesidewallJctPotential < 0.1) { model->BSIM4v7DGatesidewallJctPotential = 0.1; fprintf(stderr, "Given pbswgd is less than 0.1. Pbswgd is set to 0.1.\n"); } if(model->BSIM4v7mtrlMod == 0) { if ((model->BSIM4v7toxeGiven) && (model->BSIM4v7toxpGiven) && (model->BSIM4v7dtoxGiven) && (model->BSIM4v7toxe != (model->BSIM4v7toxp + model->BSIM4v7dtox))) printf("Warning: toxe, toxp and dtox all given and toxe != toxp + dtox; dtox ignored.\n"); else if ((model->BSIM4v7toxeGiven) && (!model->BSIM4v7toxpGiven)) model->BSIM4v7toxp = model->BSIM4v7toxe - model->BSIM4v7dtox; else if ((!model->BSIM4v7toxeGiven) && (model->BSIM4v7toxpGiven)){ model->BSIM4v7toxe = model->BSIM4v7toxp + model->BSIM4v7dtox; if (!model->BSIM4v7toxmGiven) /* v4.7 */ model->BSIM4v7toxm = model->BSIM4v7toxe; } } else if(model->BSIM4v7mtrlCompatMod != 0) /* v4.7 */ { T0 = model->BSIM4v7epsrox / 3.9; if ((model->BSIM4v7eotGiven) && (model->BSIM4v7toxpGiven) && (model->BSIM4v7dtoxGiven) && (ABS(model->BSIM4v7eot * T0 - (model->BSIM4v7toxp + model->BSIM4v7dtox)) > 1.0e-20)) { printf("Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.\n"); } else if ((model->BSIM4v7eotGiven) && (!model->BSIM4v7toxpGiven)) model->BSIM4v7toxp = T0 * model->BSIM4v7eot - model->BSIM4v7dtox; else if ((!model->BSIM4v7eotGiven) && (model->BSIM4v7toxpGiven)){ model->BSIM4v7eot = (model->BSIM4v7toxp + model->BSIM4v7dtox) / T0; if (!model->BSIM4v7toxmGiven) model->BSIM4v7toxm = model->BSIM4v7eot; } } if(model->BSIM4v7mtrlMod) { epsrox = 3.9; toxe = model->BSIM4v7eot; epssub = EPS0 * model->BSIM4v7epsrsub; } else { epsrox = model->BSIM4v7epsrox; toxe = model->BSIM4v7toxe; epssub = EPSSI; } model->BSIM4v7coxe = epsrox * EPS0 / toxe; if(model->BSIM4v7mtrlMod == 0 || model->BSIM4v7mtrlCompatMod != 0) model->BSIM4v7coxp = model->BSIM4v7epsrox * EPS0 / model->BSIM4v7toxp; if (!model->BSIM4v7cgdoGiven) { if (model->BSIM4v7dlcGiven && (model->BSIM4v7dlc > 0.0)) model->BSIM4v7cgdo = model->BSIM4v7dlc * model->BSIM4v7coxe - model->BSIM4v7cgdl ; else model->BSIM4v7cgdo = 0.6 * model->BSIM4v7xj * model->BSIM4v7coxe; } if (!model->BSIM4v7cgsoGiven) { if (model->BSIM4v7dlcGiven && (model->BSIM4v7dlc > 0.0)) model->BSIM4v7cgso = model->BSIM4v7dlc * model->BSIM4v7coxe - model->BSIM4v7cgsl ; else model->BSIM4v7cgso = 0.6 * model->BSIM4v7xj * model->BSIM4v7coxe; } if (!model->BSIM4v7cgboGiven) model->BSIM4v7cgbo = 2.0 * model->BSIM4v7dwc * model->BSIM4v7coxe; struct bsim4SizeDependParam *p = model->pSizeDependParamKnot; while (p) { struct bsim4SizeDependParam *next_p = p->pNext; FREE(p); p = next_p; } model->pSizeDependParamKnot = NULL; pLastKnot = NULL; Tnom = model->BSIM4v7tnom; TRatio = Temp / Tnom; model->BSIM4v7vcrit = CONSTvt0 * log(CONSTvt0 / (CONSTroot2 * 1.0e-14)); model->BSIM4v7factor1 = sqrt(epssub / (epsrox * EPS0)* toxe); Vtm0 = model->BSIM4v7vtm0 = KboQ * Tnom; if(model->BSIM4v7mtrlMod==0) { Eg0 = 1.16 - 7.02e-4 * Tnom * Tnom / (Tnom + 1108.0); ni = 1.45e10 * (Tnom / 300.15) * sqrt(Tnom / 300.15) * exp(21.5565981 - Eg0 / (2.0 * Vtm0)); } else { Eg0 = model->BSIM4v7bg0sub - model->BSIM4v7tbgasub * Tnom * Tnom / (Tnom + model->BSIM4v7tbgbsub); T0 = model->BSIM4v7bg0sub - model->BSIM4v7tbgasub * 90090.0225 / (300.15 + model->BSIM4v7tbgbsub); ni = model->BSIM4v7ni0sub * (Tnom / 300.15) * sqrt(Tnom / 300.15) * exp((T0 - Eg0) / (2.0 * Vtm0)); } model->BSIM4v7Eg0 = Eg0; model->BSIM4v7vtm = KboQ * Temp; if(model->BSIM4v7mtrlMod == 0) Eg = 1.16 - 7.02e-4 * Temp * Temp / (Temp + 1108.0); else Eg = model->BSIM4v7bg0sub - model->BSIM4v7tbgasub * Temp * Temp / (Temp + model->BSIM4v7tbgbsub); if (Temp != Tnom) { T0 = Eg0 / Vtm0 - Eg / model->BSIM4v7vtm; T1 = log(Temp / Tnom); T2 = T0 + model->BSIM4v7SjctTempExponent * T1; T3 = exp(T2 / model->BSIM4v7SjctEmissionCoeff); model->BSIM4v7SjctTempSatCurDensity = model->BSIM4v7SjctSatCurDensity * T3; model->BSIM4v7SjctSidewallTempSatCurDensity = model->BSIM4v7SjctSidewallSatCurDensity * T3; model->BSIM4v7SjctGateSidewallTempSatCurDensity = model->BSIM4v7SjctGateSidewallSatCurDensity * T3; T2 = T0 + model->BSIM4v7DjctTempExponent * T1; T3 = exp(T2 / model->BSIM4v7DjctEmissionCoeff); model->BSIM4v7DjctTempSatCurDensity = model->BSIM4v7DjctSatCurDensity * T3; model->BSIM4v7DjctSidewallTempSatCurDensity = model->BSIM4v7DjctSidewallSatCurDensity * T3; model->BSIM4v7DjctGateSidewallTempSatCurDensity = model->BSIM4v7DjctGateSidewallSatCurDensity * T3; } else { model->BSIM4v7SjctTempSatCurDensity = model->BSIM4v7SjctSatCurDensity; model->BSIM4v7SjctSidewallTempSatCurDensity = model->BSIM4v7SjctSidewallSatCurDensity; model->BSIM4v7SjctGateSidewallTempSatCurDensity = model->BSIM4v7SjctGateSidewallSatCurDensity; model->BSIM4v7DjctTempSatCurDensity = model->BSIM4v7DjctSatCurDensity; model->BSIM4v7DjctSidewallTempSatCurDensity = model->BSIM4v7DjctSidewallSatCurDensity; model->BSIM4v7DjctGateSidewallTempSatCurDensity = model->BSIM4v7DjctGateSidewallSatCurDensity; } if (model->BSIM4v7SjctTempSatCurDensity < 0.0) model->BSIM4v7SjctTempSatCurDensity = 0.0; if (model->BSIM4v7SjctSidewallTempSatCurDensity < 0.0) model->BSIM4v7SjctSidewallTempSatCurDensity = 0.0; if (model->BSIM4v7SjctGateSidewallTempSatCurDensity < 0.0) model->BSIM4v7SjctGateSidewallTempSatCurDensity = 0.0; if (model->BSIM4v7DjctTempSatCurDensity < 0.0) model->BSIM4v7DjctTempSatCurDensity = 0.0; if (model->BSIM4v7DjctSidewallTempSatCurDensity < 0.0) model->BSIM4v7DjctSidewallTempSatCurDensity = 0.0; if (model->BSIM4v7DjctGateSidewallTempSatCurDensity < 0.0) model->BSIM4v7DjctGateSidewallTempSatCurDensity = 0.0; /* Temperature dependence of D/B and S/B diode capacitance begins */ delTemp = ckt->CKTtemp - model->BSIM4v7tnom; T0 = model->BSIM4v7tcj * delTemp; if (T0 >= -1.0) { model->BSIM4v7SunitAreaTempJctCap = model->BSIM4v7SunitAreaJctCap *(1.0 + T0); /*bug_fix -JX */ model->BSIM4v7DunitAreaTempJctCap = model->BSIM4v7DunitAreaJctCap *(1.0 + T0); } else { if (model->BSIM4v7SunitAreaJctCap > 0.0) { model->BSIM4v7SunitAreaTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjs to be negative. Cjs is clamped to zero.\n"); } if (model->BSIM4v7DunitAreaJctCap > 0.0) { model->BSIM4v7DunitAreaTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjd to be negative. Cjd is clamped to zero.\n"); } } T0 = model->BSIM4v7tcjsw * delTemp; if (model->BSIM4v7SunitLengthSidewallJctCap < 0.0)/*4.6.2*/ {model->BSIM4v7SunitLengthSidewallJctCap = 0.0; fprintf(stderr, "CJSWS is negative. Cjsws is clamped to zero.\n");} if (model->BSIM4v7DunitLengthSidewallJctCap < 0.0) {model->BSIM4v7DunitLengthSidewallJctCap = 0.0; fprintf(stderr, "CJSWD is negative. Cjswd is clamped to zero.\n");} if (T0 >= -1.0) { model->BSIM4v7SunitLengthSidewallTempJctCap = model->BSIM4v7SunitLengthSidewallJctCap *(1.0 + T0); model->BSIM4v7DunitLengthSidewallTempJctCap = model->BSIM4v7DunitLengthSidewallJctCap *(1.0 + T0); } else { if (model->BSIM4v7SunitLengthSidewallJctCap > 0.0) { model->BSIM4v7SunitLengthSidewallTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjsws to be negative. Cjsws is clamped to zero.\n"); } if (model->BSIM4v7DunitLengthSidewallJctCap > 0.0) { model->BSIM4v7DunitLengthSidewallTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjswd to be negative. Cjswd is clamped to zero.\n"); } } T0 = model->BSIM4v7tcjswg * delTemp; if (T0 >= -1.0) { model->BSIM4v7SunitLengthGateSidewallTempJctCap = model->BSIM4v7SunitLengthGateSidewallJctCap *(1.0 + T0); model->BSIM4v7DunitLengthGateSidewallTempJctCap = model->BSIM4v7DunitLengthGateSidewallJctCap *(1.0 + T0); } else { if (model->BSIM4v7SunitLengthGateSidewallJctCap > 0.0) { model->BSIM4v7SunitLengthGateSidewallTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjswgs to be negative. Cjswgs is clamped to zero.\n"); } if (model->BSIM4v7DunitLengthGateSidewallJctCap > 0.0) { model->BSIM4v7DunitLengthGateSidewallTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjswgd to be negative. Cjswgd is clamped to zero.\n"); } } model->BSIM4v7PhiBS = model->BSIM4v7SbulkJctPotential - model->BSIM4v7tpb * delTemp; if (model->BSIM4v7PhiBS < 0.01) { model->BSIM4v7PhiBS = 0.01; fprintf(stderr, "Temperature effect has caused pbs to be less than 0.01. Pbs is clamped to 0.01.\n"); } model->BSIM4v7PhiBD = model->BSIM4v7DbulkJctPotential - model->BSIM4v7tpb * delTemp; if (model->BSIM4v7PhiBD < 0.01) { model->BSIM4v7PhiBD = 0.01; fprintf(stderr, "Temperature effect has caused pbd to be less than 0.01. Pbd is clamped to 0.01.\n"); } model->BSIM4v7PhiBSWS = model->BSIM4v7SsidewallJctPotential - model->BSIM4v7tpbsw * delTemp; if (model->BSIM4v7PhiBSWS <= 0.01) { model->BSIM4v7PhiBSWS = 0.01; fprintf(stderr, "Temperature effect has caused pbsws to be less than 0.01. Pbsws is clamped to 0.01.\n"); } model->BSIM4v7PhiBSWD = model->BSIM4v7DsidewallJctPotential - model->BSIM4v7tpbsw * delTemp; if (model->BSIM4v7PhiBSWD <= 0.01) { model->BSIM4v7PhiBSWD = 0.01; fprintf(stderr, "Temperature effect has caused pbswd to be less than 0.01. Pbswd is clamped to 0.01.\n"); } model->BSIM4v7PhiBSWGS = model->BSIM4v7SGatesidewallJctPotential - model->BSIM4v7tpbswg * delTemp; if (model->BSIM4v7PhiBSWGS <= 0.01) { model->BSIM4v7PhiBSWGS = 0.01; fprintf(stderr, "Temperature effect has caused pbswgs to be less than 0.01. Pbswgs is clamped to 0.01.\n"); } model->BSIM4v7PhiBSWGD = model->BSIM4v7DGatesidewallJctPotential - model->BSIM4v7tpbswg * delTemp; if (model->BSIM4v7PhiBSWGD <= 0.01) { model->BSIM4v7PhiBSWGD = 0.01; fprintf(stderr, "Temperature effect has caused pbswgd to be less than 0.01. Pbswgd is clamped to 0.01.\n"); } /* End of junction capacitance */ if (model->BSIM4v7ijthdfwd <= 0.0) { model->BSIM4v7ijthdfwd = 0.0; fprintf(stderr, "Ijthdfwd reset to %g.\n", model->BSIM4v7ijthdfwd); } if (model->BSIM4v7ijthsfwd <= 0.0) { model->BSIM4v7ijthsfwd = 0.0; fprintf(stderr, "Ijthsfwd reset to %g.\n", model->BSIM4v7ijthsfwd); } if (model->BSIM4v7ijthdrev <= 0.0) { model->BSIM4v7ijthdrev = 0.0; fprintf(stderr, "Ijthdrev reset to %g.\n", model->BSIM4v7ijthdrev); } if (model->BSIM4v7ijthsrev <= 0.0) { model->BSIM4v7ijthsrev = 0.0; fprintf(stderr, "Ijthsrev reset to %g.\n", model->BSIM4v7ijthsrev); } if ((model->BSIM4v7xjbvd <= 0.0) && (model->BSIM4v7dioMod == 2)) { model->BSIM4v7xjbvd = 0.0; fprintf(stderr, "Xjbvd reset to %g.\n", model->BSIM4v7xjbvd); } else if ((model->BSIM4v7xjbvd < 0.0) && (model->BSIM4v7dioMod == 0)) { model->BSIM4v7xjbvd = 0.0; fprintf(stderr, "Xjbvd reset to %g.\n", model->BSIM4v7xjbvd); } if (model->BSIM4v7bvd <= 0.0) /*4.6.2*/ { model->BSIM4v7bvd = 0.0; fprintf(stderr, "BVD reset to %g.\n", model->BSIM4v7bvd); } if ((model->BSIM4v7xjbvs <= 0.0) && (model->BSIM4v7dioMod == 2)) { model->BSIM4v7xjbvs = 0.0; fprintf(stderr, "Xjbvs reset to %g.\n", model->BSIM4v7xjbvs); } else if ((model->BSIM4v7xjbvs < 0.0) && (model->BSIM4v7dioMod == 0)) { model->BSIM4v7xjbvs = 0.0; fprintf(stderr, "Xjbvs reset to %g.\n", model->BSIM4v7xjbvs); } if (model->BSIM4v7bvs <= 0.0) { model->BSIM4v7bvs = 0.0; fprintf(stderr, "BVS reset to %g.\n", model->BSIM4v7bvs); } /* loop through all the instances of the model */ for (here = BSIM4v7instances(model); here != NULL; here = BSIM4v7nextInstance(here)) { pSizeDependParamKnot = model->pSizeDependParamKnot; Size_Not_Found = 1; while ((pSizeDependParamKnot != NULL) && Size_Not_Found) { if ((here->BSIM4v7l == pSizeDependParamKnot->Length) && (here->BSIM4v7w == pSizeDependParamKnot->Width) && (here->BSIM4v7nf == pSizeDependParamKnot->NFinger)) { Size_Not_Found = 0; here->pParam = pSizeDependParamKnot; pParam = here->pParam; /*bug-fix */ } else { pLastKnot = pSizeDependParamKnot; pSizeDependParamKnot = pSizeDependParamKnot->pNext; } } /* stress effect */ Ldrn = here->BSIM4v7l; Wdrn = here->BSIM4v7w / here->BSIM4v7nf; if (Size_Not_Found) { pParam = TMALLOC(struct bsim4SizeDependParam, 1); if (pLastKnot == NULL) model->pSizeDependParamKnot = pParam; else pLastKnot->pNext = pParam; pParam->pNext = NULL; here->pParam = pParam; pParam->Length = here->BSIM4v7l; pParam->Width = here->BSIM4v7w; pParam->NFinger = here->BSIM4v7nf; Lnew = here->BSIM4v7l + model->BSIM4v7xl ; Wnew = here->BSIM4v7w / here->BSIM4v7nf + model->BSIM4v7xw; T0 = pow(Lnew, model->BSIM4v7Lln); T1 = pow(Wnew, model->BSIM4v7Lwn); tmp1 = model->BSIM4v7Ll / T0 + model->BSIM4v7Lw / T1 + model->BSIM4v7Lwl / (T0 * T1); pParam->BSIM4v7dl = model->BSIM4v7Lint + tmp1; tmp2 = model->BSIM4v7Llc / T0 + model->BSIM4v7Lwc / T1 + model->BSIM4v7Lwlc / (T0 * T1); pParam->BSIM4v7dlc = model->BSIM4v7dlc + tmp2; T2 = pow(Lnew, model->BSIM4v7Wln); T3 = pow(Wnew, model->BSIM4v7Wwn); tmp1 = model->BSIM4v7Wl / T2 + model->BSIM4v7Ww / T3 + model->BSIM4v7Wwl / (T2 * T3); pParam->BSIM4v7dw = model->BSIM4v7Wint + tmp1; tmp2 = model->BSIM4v7Wlc / T2 + model->BSIM4v7Wwc / T3 + model->BSIM4v7Wwlc / (T2 * T3); pParam->BSIM4v7dwc = model->BSIM4v7dwc + tmp2; pParam->BSIM4v7dwj = model->BSIM4v7dwj + tmp2; pParam->BSIM4v7leff = Lnew - 2.0 * pParam->BSIM4v7dl; if (pParam->BSIM4v7leff <= 0.0) { SPfrontEnd->IFerrorf(ERR_FATAL, "BSIM4v7: mosfet %s, model %s: Effective channel length <= 0", model->BSIM4v7modName, here->BSIM4v7name); return(E_BADPARM); } pParam->BSIM4v7weff = Wnew - 2.0 * pParam->BSIM4v7dw; if (pParam->BSIM4v7weff <= 0.0) { SPfrontEnd->IFerrorf(ERR_FATAL, "BSIM4v7: mosfet %s, model %s: Effective channel width <= 0", model->BSIM4v7modName, here->BSIM4v7name); return(E_BADPARM); } pParam->BSIM4v7leffCV = Lnew - 2.0 * pParam->BSIM4v7dlc; if (pParam->BSIM4v7leffCV <= 0.0) { SPfrontEnd->IFerrorf(ERR_FATAL, "BSIM4v7: mosfet %s, model %s: Effective channel length for C-V <= 0", model->BSIM4v7modName, here->BSIM4v7name); return(E_BADPARM); } pParam->BSIM4v7weffCV = Wnew - 2.0 * pParam->BSIM4v7dwc; if (pParam->BSIM4v7weffCV <= 0.0) { SPfrontEnd->IFerrorf(ERR_FATAL, "BSIM4v7: mosfet %s, model %s: Effective channel width for C-V <= 0", model->BSIM4v7modName, here->BSIM4v7name); return(E_BADPARM); } pParam->BSIM4v7weffCJ = Wnew - 2.0 * pParam->BSIM4v7dwj; if (pParam->BSIM4v7weffCJ <= 0.0) { SPfrontEnd->IFerrorf(ERR_FATAL, "BSIM4v7: mosfet %s, model %s: Effective channel width for S/D junctions <= 0", model->BSIM4v7modName, here->BSIM4v7name); return(E_BADPARM); } if (model->BSIM4v7binUnit == 1) { Inv_L = 1.0e-6 / pParam->BSIM4v7leff; Inv_W = 1.0e-6 / pParam->BSIM4v7weff; Inv_LW = 1.0e-12 / (pParam->BSIM4v7leff * pParam->BSIM4v7weff); } else { Inv_L = 1.0 / pParam->BSIM4v7leff; Inv_W = 1.0 / pParam->BSIM4v7weff; Inv_LW = 1.0 / (pParam->BSIM4v7leff * pParam->BSIM4v7weff); } pParam->BSIM4v7cdsc = model->BSIM4v7cdsc + model->BSIM4v7lcdsc * Inv_L + model->BSIM4v7wcdsc * Inv_W + model->BSIM4v7pcdsc * Inv_LW; pParam->BSIM4v7cdscb = model->BSIM4v7cdscb + model->BSIM4v7lcdscb * Inv_L + model->BSIM4v7wcdscb * Inv_W + model->BSIM4v7pcdscb * Inv_LW; pParam->BSIM4v7cdscd = model->BSIM4v7cdscd + model->BSIM4v7lcdscd * Inv_L + model->BSIM4v7wcdscd * Inv_W + model->BSIM4v7pcdscd * Inv_LW; pParam->BSIM4v7cit = model->BSIM4v7cit + model->BSIM4v7lcit * Inv_L + model->BSIM4v7wcit * Inv_W + model->BSIM4v7pcit * Inv_LW; pParam->BSIM4v7nfactor = model->BSIM4v7nfactor + model->BSIM4v7lnfactor * Inv_L + model->BSIM4v7wnfactor * Inv_W + model->BSIM4v7pnfactor * Inv_LW; pParam->BSIM4v7tnfactor = model->BSIM4v7tnfactor /* v4.7 */ + model->BSIM4v7ltnfactor * Inv_L + model->BSIM4v7wtnfactor * Inv_W + model->BSIM4v7ptnfactor * Inv_LW; pParam->BSIM4v7xj = model->BSIM4v7xj + model->BSIM4v7lxj * Inv_L + model->BSIM4v7wxj * Inv_W + model->BSIM4v7pxj * Inv_LW; pParam->BSIM4v7vsat = model->BSIM4v7vsat + model->BSIM4v7lvsat * Inv_L + model->BSIM4v7wvsat * Inv_W + model->BSIM4v7pvsat * Inv_LW; pParam->BSIM4v7at = model->BSIM4v7at + model->BSIM4v7lat * Inv_L + model->BSIM4v7wat * Inv_W + model->BSIM4v7pat * Inv_LW; pParam->BSIM4v7a0 = model->BSIM4v7a0 + model->BSIM4v7la0 * Inv_L + model->BSIM4v7wa0 * Inv_W + model->BSIM4v7pa0 * Inv_LW; pParam->BSIM4v7ags = model->BSIM4v7ags + model->BSIM4v7lags * Inv_L + model->BSIM4v7wags * Inv_W + model->BSIM4v7pags * Inv_LW; pParam->BSIM4v7a1 = model->BSIM4v7a1 + model->BSIM4v7la1 * Inv_L + model->BSIM4v7wa1 * Inv_W + model->BSIM4v7pa1 * Inv_LW; pParam->BSIM4v7a2 = model->BSIM4v7a2 + model->BSIM4v7la2 * Inv_L + model->BSIM4v7wa2 * Inv_W + model->BSIM4v7pa2 * Inv_LW; pParam->BSIM4v7keta = model->BSIM4v7keta + model->BSIM4v7lketa * Inv_L + model->BSIM4v7wketa * Inv_W + model->BSIM4v7pketa * Inv_LW; pParam->BSIM4v7nsub = model->BSIM4v7nsub + model->BSIM4v7lnsub * Inv_L + model->BSIM4v7wnsub * Inv_W + model->BSIM4v7pnsub * Inv_LW; pParam->BSIM4v7ndep = model->BSIM4v7ndep + model->BSIM4v7lndep * Inv_L + model->BSIM4v7wndep * Inv_W + model->BSIM4v7pndep * Inv_LW; pParam->BSIM4v7nsd = model->BSIM4v7nsd + model->BSIM4v7lnsd * Inv_L + model->BSIM4v7wnsd * Inv_W + model->BSIM4v7pnsd * Inv_LW; pParam->BSIM4v7phin = model->BSIM4v7phin + model->BSIM4v7lphin * Inv_L + model->BSIM4v7wphin * Inv_W + model->BSIM4v7pphin * Inv_LW; pParam->BSIM4v7ngate = model->BSIM4v7ngate + model->BSIM4v7lngate * Inv_L + model->BSIM4v7wngate * Inv_W + model->BSIM4v7pngate * Inv_LW; pParam->BSIM4v7gamma1 = model->BSIM4v7gamma1 + model->BSIM4v7lgamma1 * Inv_L + model->BSIM4v7wgamma1 * Inv_W + model->BSIM4v7pgamma1 * Inv_LW; pParam->BSIM4v7gamma2 = model->BSIM4v7gamma2 + model->BSIM4v7lgamma2 * Inv_L + model->BSIM4v7wgamma2 * Inv_W + model->BSIM4v7pgamma2 * Inv_LW; pParam->BSIM4v7vbx = model->BSIM4v7vbx + model->BSIM4v7lvbx * Inv_L + model->BSIM4v7wvbx * Inv_W + model->BSIM4v7pvbx * Inv_LW; pParam->BSIM4v7vbm = model->BSIM4v7vbm + model->BSIM4v7lvbm * Inv_L + model->BSIM4v7wvbm * Inv_W + model->BSIM4v7pvbm * Inv_LW; pParam->BSIM4v7xt = model->BSIM4v7xt + model->BSIM4v7lxt * Inv_L + model->BSIM4v7wxt * Inv_W + model->BSIM4v7pxt * Inv_LW; pParam->BSIM4v7vfb = model->BSIM4v7vfb + model->BSIM4v7lvfb * Inv_L + model->BSIM4v7wvfb * Inv_W + model->BSIM4v7pvfb * Inv_LW; pParam->BSIM4v7k1 = model->BSIM4v7k1 + model->BSIM4v7lk1 * Inv_L + model->BSIM4v7wk1 * Inv_W + model->BSIM4v7pk1 * Inv_LW; pParam->BSIM4v7kt1 = model->BSIM4v7kt1 + model->BSIM4v7lkt1 * Inv_L + model->BSIM4v7wkt1 * Inv_W + model->BSIM4v7pkt1 * Inv_LW; pParam->BSIM4v7kt1l = model->BSIM4v7kt1l + model->BSIM4v7lkt1l * Inv_L + model->BSIM4v7wkt1l * Inv_W + model->BSIM4v7pkt1l * Inv_LW; pParam->BSIM4v7k2 = model->BSIM4v7k2 + model->BSIM4v7lk2 * Inv_L + model->BSIM4v7wk2 * Inv_W + model->BSIM4v7pk2 * Inv_LW; pParam->BSIM4v7kt2 = model->BSIM4v7kt2 + model->BSIM4v7lkt2 * Inv_L + model->BSIM4v7wkt2 * Inv_W + model->BSIM4v7pkt2 * Inv_LW; pParam->BSIM4v7k3 = model->BSIM4v7k3 + model->BSIM4v7lk3 * Inv_L + model->BSIM4v7wk3 * Inv_W + model->BSIM4v7pk3 * Inv_LW; pParam->BSIM4v7k3b = model->BSIM4v7k3b + model->BSIM4v7lk3b * Inv_L + model->BSIM4v7wk3b * Inv_W + model->BSIM4v7pk3b * Inv_LW; pParam->BSIM4v7w0 = model->BSIM4v7w0 + model->BSIM4v7lw0 * Inv_L + model->BSIM4v7ww0 * Inv_W + model->BSIM4v7pw0 * Inv_LW; pParam->BSIM4v7lpe0 = model->BSIM4v7lpe0 + model->BSIM4v7llpe0 * Inv_L + model->BSIM4v7wlpe0 * Inv_W + model->BSIM4v7plpe0 * Inv_LW; pParam->BSIM4v7lpeb = model->BSIM4v7lpeb + model->BSIM4v7llpeb * Inv_L + model->BSIM4v7wlpeb * Inv_W + model->BSIM4v7plpeb * Inv_LW; pParam->BSIM4v7dvtp0 = model->BSIM4v7dvtp0 + model->BSIM4v7ldvtp0 * Inv_L + model->BSIM4v7wdvtp0 * Inv_W + model->BSIM4v7pdvtp0 * Inv_LW; pParam->BSIM4v7dvtp1 = model->BSIM4v7dvtp1 + model->BSIM4v7ldvtp1 * Inv_L + model->BSIM4v7wdvtp1 * Inv_W + model->BSIM4v7pdvtp1 * Inv_LW; pParam->BSIM4v7dvtp2 = model->BSIM4v7dvtp2 /* v4.7 */ + model->BSIM4v7ldvtp2 * Inv_L + model->BSIM4v7wdvtp2 * Inv_W + model->BSIM4v7pdvtp2 * Inv_LW; pParam->BSIM4v7dvtp3 = model->BSIM4v7dvtp3 /* v4.7 */ + model->BSIM4v7ldvtp3 * Inv_L + model->BSIM4v7wdvtp3 * Inv_W + model->BSIM4v7pdvtp3 * Inv_LW; pParam->BSIM4v7dvtp4 = model->BSIM4v7dvtp4 /* v4.7 */ + model->BSIM4v7ldvtp4 * Inv_L + model->BSIM4v7wdvtp4 * Inv_W + model->BSIM4v7pdvtp4 * Inv_LW; pParam->BSIM4v7dvtp5 = model->BSIM4v7dvtp5 /* v4.7 */ + model->BSIM4v7ldvtp5 * Inv_L + model->BSIM4v7wdvtp5 * Inv_W + model->BSIM4v7pdvtp5 * Inv_LW; pParam->BSIM4v7dvt0 = model->BSIM4v7dvt0 + model->BSIM4v7ldvt0 * Inv_L + model->BSIM4v7wdvt0 * Inv_W + model->BSIM4v7pdvt0 * Inv_LW; pParam->BSIM4v7dvt1 = model->BSIM4v7dvt1 + model->BSIM4v7ldvt1 * Inv_L + model->BSIM4v7wdvt1 * Inv_W + model->BSIM4v7pdvt1 * Inv_LW; pParam->BSIM4v7dvt2 = model->BSIM4v7dvt2 + model->BSIM4v7ldvt2 * Inv_L + model->BSIM4v7wdvt2 * Inv_W + model->BSIM4v7pdvt2 * Inv_LW; pParam->BSIM4v7dvt0w = model->BSIM4v7dvt0w + model->BSIM4v7ldvt0w * Inv_L + model->BSIM4v7wdvt0w * Inv_W + model->BSIM4v7pdvt0w * Inv_LW; pParam->BSIM4v7dvt1w = model->BSIM4v7dvt1w + model->BSIM4v7ldvt1w * Inv_L + model->BSIM4v7wdvt1w * Inv_W + model->BSIM4v7pdvt1w * Inv_LW; pParam->BSIM4v7dvt2w = model->BSIM4v7dvt2w + model->BSIM4v7ldvt2w * Inv_L + model->BSIM4v7wdvt2w * Inv_W + model->BSIM4v7pdvt2w * Inv_LW; pParam->BSIM4v7drout = model->BSIM4v7drout + model->BSIM4v7ldrout * Inv_L + model->BSIM4v7wdrout * Inv_W + model->BSIM4v7pdrout * Inv_LW; pParam->BSIM4v7dsub = model->BSIM4v7dsub + model->BSIM4v7ldsub * Inv_L + model->BSIM4v7wdsub * Inv_W + model->BSIM4v7pdsub * Inv_LW; pParam->BSIM4v7vth0 = model->BSIM4v7vth0 + model->BSIM4v7lvth0 * Inv_L + model->BSIM4v7wvth0 * Inv_W + model->BSIM4v7pvth0 * Inv_LW; pParam->BSIM4v7ua = model->BSIM4v7ua + model->BSIM4v7lua * Inv_L + model->BSIM4v7wua * Inv_W + model->BSIM4v7pua * Inv_LW; pParam->BSIM4v7ua1 = model->BSIM4v7ua1 + model->BSIM4v7lua1 * Inv_L + model->BSIM4v7wua1 * Inv_W + model->BSIM4v7pua1 * Inv_LW; pParam->BSIM4v7ub = model->BSIM4v7ub + model->BSIM4v7lub * Inv_L + model->BSIM4v7wub * Inv_W + model->BSIM4v7pub * Inv_LW; pParam->BSIM4v7ub1 = model->BSIM4v7ub1 + model->BSIM4v7lub1 * Inv_L + model->BSIM4v7wub1 * Inv_W + model->BSIM4v7pub1 * Inv_LW; pParam->BSIM4v7uc = model->BSIM4v7uc + model->BSIM4v7luc * Inv_L + model->BSIM4v7wuc * Inv_W + model->BSIM4v7puc * Inv_LW; pParam->BSIM4v7uc1 = model->BSIM4v7uc1 + model->BSIM4v7luc1 * Inv_L + model->BSIM4v7wuc1 * Inv_W + model->BSIM4v7puc1 * Inv_LW; pParam->BSIM4v7ud = model->BSIM4v7ud + model->BSIM4v7lud * Inv_L + model->BSIM4v7wud * Inv_W + model->BSIM4v7pud * Inv_LW; pParam->BSIM4v7ud1 = model->BSIM4v7ud1 + model->BSIM4v7lud1 * Inv_L + model->BSIM4v7wud1 * Inv_W + model->BSIM4v7pud1 * Inv_LW; pParam->BSIM4v7up = model->BSIM4v7up + model->BSIM4v7lup * Inv_L + model->BSIM4v7wup * Inv_W + model->BSIM4v7pup * Inv_LW; pParam->BSIM4v7lp = model->BSIM4v7lp + model->BSIM4v7llp * Inv_L + model->BSIM4v7wlp * Inv_W + model->BSIM4v7plp * Inv_LW; pParam->BSIM4v7eu = model->BSIM4v7eu + model->BSIM4v7leu * Inv_L + model->BSIM4v7weu * Inv_W + model->BSIM4v7peu * Inv_LW; pParam->BSIM4v7u0 = model->BSIM4v7u0 + model->BSIM4v7lu0 * Inv_L + model->BSIM4v7wu0 * Inv_W + model->BSIM4v7pu0 * Inv_LW; pParam->BSIM4v7ute = model->BSIM4v7ute + model->BSIM4v7lute * Inv_L + model->BSIM4v7wute * Inv_W + model->BSIM4v7pute * Inv_LW; /*high k mobility*/ pParam->BSIM4v7ucs = model->BSIM4v7ucs + model->BSIM4v7lucs * Inv_L + model->BSIM4v7wucs * Inv_W + model->BSIM4v7pucs * Inv_LW; pParam->BSIM4v7ucste = model->BSIM4v7ucste + model->BSIM4v7lucste * Inv_L + model->BSIM4v7wucste * Inv_W + model->BSIM4v7pucste * Inv_LW; pParam->BSIM4v7voff = model->BSIM4v7voff + model->BSIM4v7lvoff * Inv_L + model->BSIM4v7wvoff * Inv_W + model->BSIM4v7pvoff * Inv_LW; pParam->BSIM4v7tvoff = model->BSIM4v7tvoff + model->BSIM4v7ltvoff * Inv_L + model->BSIM4v7wtvoff * Inv_W + model->BSIM4v7ptvoff * Inv_LW; pParam->BSIM4v7minv = model->BSIM4v7minv + model->BSIM4v7lminv * Inv_L + model->BSIM4v7wminv * Inv_W + model->BSIM4v7pminv * Inv_LW; pParam->BSIM4v7minvcv = model->BSIM4v7minvcv + model->BSIM4v7lminvcv * Inv_L + model->BSIM4v7wminvcv * Inv_W + model->BSIM4v7pminvcv * Inv_LW; pParam->BSIM4v7fprout = model->BSIM4v7fprout + model->BSIM4v7lfprout * Inv_L + model->BSIM4v7wfprout * Inv_W + model->BSIM4v7pfprout * Inv_LW; pParam->BSIM4v7pdits = model->BSIM4v7pdits + model->BSIM4v7lpdits * Inv_L + model->BSIM4v7wpdits * Inv_W + model->BSIM4v7ppdits * Inv_LW; pParam->BSIM4v7pditsd = model->BSIM4v7pditsd + model->BSIM4v7lpditsd * Inv_L + model->BSIM4v7wpditsd * Inv_W + model->BSIM4v7ppditsd * Inv_LW; pParam->BSIM4v7delta = model->BSIM4v7delta + model->BSIM4v7ldelta * Inv_L + model->BSIM4v7wdelta * Inv_W + model->BSIM4v7pdelta * Inv_LW; pParam->BSIM4v7rdsw = model->BSIM4v7rdsw + model->BSIM4v7lrdsw * Inv_L + model->BSIM4v7wrdsw * Inv_W + model->BSIM4v7prdsw * Inv_LW; pParam->BSIM4v7rdw = model->BSIM4v7rdw + model->BSIM4v7lrdw * Inv_L + model->BSIM4v7wrdw * Inv_W + model->BSIM4v7prdw * Inv_LW; pParam->BSIM4v7rsw = model->BSIM4v7rsw + model->BSIM4v7lrsw * Inv_L + model->BSIM4v7wrsw * Inv_W + model->BSIM4v7prsw * Inv_LW; pParam->BSIM4v7prwg = model->BSIM4v7prwg + model->BSIM4v7lprwg * Inv_L + model->BSIM4v7wprwg * Inv_W + model->BSIM4v7pprwg * Inv_LW; pParam->BSIM4v7prwb = model->BSIM4v7prwb + model->BSIM4v7lprwb * Inv_L + model->BSIM4v7wprwb * Inv_W + model->BSIM4v7pprwb * Inv_LW; pParam->BSIM4v7prt = model->BSIM4v7prt + model->BSIM4v7lprt * Inv_L + model->BSIM4v7wprt * Inv_W + model->BSIM4v7pprt * Inv_LW; pParam->BSIM4v7eta0 = model->BSIM4v7eta0 + model->BSIM4v7leta0 * Inv_L + model->BSIM4v7weta0 * Inv_W + model->BSIM4v7peta0 * Inv_LW; pParam->BSIM4v7teta0 = model->BSIM4v7teta0 /* v4.7 */ + model->BSIM4v7lteta0 * Inv_L + model->BSIM4v7wteta0 * Inv_W + model->BSIM4v7pteta0 * Inv_LW; pParam->BSIM4v7etab = model->BSIM4v7etab + model->BSIM4v7letab * Inv_L + model->BSIM4v7wetab * Inv_W + model->BSIM4v7petab * Inv_LW; pParam->BSIM4v7pclm = model->BSIM4v7pclm + model->BSIM4v7lpclm * Inv_L + model->BSIM4v7wpclm * Inv_W + model->BSIM4v7ppclm * Inv_LW; pParam->BSIM4v7pdibl1 = model->BSIM4v7pdibl1 + model->BSIM4v7lpdibl1 * Inv_L + model->BSIM4v7wpdibl1 * Inv_W + model->BSIM4v7ppdibl1 * Inv_LW; pParam->BSIM4v7pdibl2 = model->BSIM4v7pdibl2 + model->BSIM4v7lpdibl2 * Inv_L + model->BSIM4v7wpdibl2 * Inv_W + model->BSIM4v7ppdibl2 * Inv_LW; pParam->BSIM4v7pdiblb = model->BSIM4v7pdiblb + model->BSIM4v7lpdiblb * Inv_L + model->BSIM4v7wpdiblb * Inv_W + model->BSIM4v7ppdiblb * Inv_LW; pParam->BSIM4v7pscbe1 = model->BSIM4v7pscbe1 + model->BSIM4v7lpscbe1 * Inv_L + model->BSIM4v7wpscbe1 * Inv_W + model->BSIM4v7ppscbe1 * Inv_LW; pParam->BSIM4v7pscbe2 = model->BSIM4v7pscbe2 + model->BSIM4v7lpscbe2 * Inv_L + model->BSIM4v7wpscbe2 * Inv_W + model->BSIM4v7ppscbe2 * Inv_LW; pParam->BSIM4v7pvag = model->BSIM4v7pvag + model->BSIM4v7lpvag * Inv_L + model->BSIM4v7wpvag * Inv_W + model->BSIM4v7ppvag * Inv_LW; pParam->BSIM4v7wr = model->BSIM4v7wr + model->BSIM4v7lwr * Inv_L + model->BSIM4v7wwr * Inv_W + model->BSIM4v7pwr * Inv_LW; pParam->BSIM4v7dwg = model->BSIM4v7dwg + model->BSIM4v7ldwg * Inv_L + model->BSIM4v7wdwg * Inv_W + model->BSIM4v7pdwg * Inv_LW; pParam->BSIM4v7dwb = model->BSIM4v7dwb + model->BSIM4v7ldwb * Inv_L + model->BSIM4v7wdwb * Inv_W + model->BSIM4v7pdwb * Inv_LW; pParam->BSIM4v7b0 = model->BSIM4v7b0 + model->BSIM4v7lb0 * Inv_L + model->BSIM4v7wb0 * Inv_W + model->BSIM4v7pb0 * Inv_LW; pParam->BSIM4v7b1 = model->BSIM4v7b1 + model->BSIM4v7lb1 * Inv_L + model->BSIM4v7wb1 * Inv_W + model->BSIM4v7pb1 * Inv_LW; pParam->BSIM4v7alpha0 = model->BSIM4v7alpha0 + model->BSIM4v7lalpha0 * Inv_L + model->BSIM4v7walpha0 * Inv_W + model->BSIM4v7palpha0 * Inv_LW; pParam->BSIM4v7alpha1 = model->BSIM4v7alpha1 + model->BSIM4v7lalpha1 * Inv_L + model->BSIM4v7walpha1 * Inv_W + model->BSIM4v7palpha1 * Inv_LW; pParam->BSIM4v7beta0 = model->BSIM4v7beta0 + model->BSIM4v7lbeta0 * Inv_L + model->BSIM4v7wbeta0 * Inv_W + model->BSIM4v7pbeta0 * Inv_LW; pParam->BSIM4v7agidl = model->BSIM4v7agidl + model->BSIM4v7lagidl * Inv_L + model->BSIM4v7wagidl * Inv_W + model->BSIM4v7pagidl * Inv_LW; pParam->BSIM4v7bgidl = model->BSIM4v7bgidl + model->BSIM4v7lbgidl * Inv_L + model->BSIM4v7wbgidl * Inv_W + model->BSIM4v7pbgidl * Inv_LW; pParam->BSIM4v7cgidl = model->BSIM4v7cgidl + model->BSIM4v7lcgidl * Inv_L + model->BSIM4v7wcgidl * Inv_W + model->BSIM4v7pcgidl * Inv_LW; pParam->BSIM4v7egidl = model->BSIM4v7egidl + model->BSIM4v7legidl * Inv_L + model->BSIM4v7wegidl * Inv_W + model->BSIM4v7pegidl * Inv_LW; pParam->BSIM4v7rgidl = model->BSIM4v7rgidl /* v4.7 New GIDL/GISL */ + model->BSIM4v7lrgidl * Inv_L + model->BSIM4v7wrgidl * Inv_W + model->BSIM4v7prgidl * Inv_LW; pParam->BSIM4v7kgidl = model->BSIM4v7kgidl /* v4.7 New GIDL/GISL */ + model->BSIM4v7lkgidl * Inv_L + model->BSIM4v7wkgidl * Inv_W + model->BSIM4v7pkgidl * Inv_LW; pParam->BSIM4v7fgidl = model->BSIM4v7fgidl /* v4.7 New GIDL/GISL */ + model->BSIM4v7lfgidl * Inv_L + model->BSIM4v7wfgidl * Inv_W + model->BSIM4v7pfgidl * Inv_LW; pParam->BSIM4v7agisl = model->BSIM4v7agisl + model->BSIM4v7lagisl * Inv_L + model->BSIM4v7wagisl * Inv_W + model->BSIM4v7pagisl * Inv_LW; pParam->BSIM4v7bgisl = model->BSIM4v7bgisl + model->BSIM4v7lbgisl * Inv_L + model->BSIM4v7wbgisl * Inv_W + model->BSIM4v7pbgisl * Inv_LW; pParam->BSIM4v7cgisl = model->BSIM4v7cgisl + model->BSIM4v7lcgisl * Inv_L + model->BSIM4v7wcgisl * Inv_W + model->BSIM4v7pcgisl * Inv_LW; pParam->BSIM4v7egisl = model->BSIM4v7egisl + model->BSIM4v7legisl * Inv_L + model->BSIM4v7wegisl * Inv_W + model->BSIM4v7pegisl * Inv_LW; pParam->BSIM4v7rgisl = model->BSIM4v7rgisl /* v4.7 New GIDL/GISL */ + model->BSIM4v7lrgisl * Inv_L + model->BSIM4v7wrgisl * Inv_W + model->BSIM4v7prgisl * Inv_LW; pParam->BSIM4v7kgisl = model->BSIM4v7kgisl /* v4.7 New GIDL/GISL */ + model->BSIM4v7lkgisl * Inv_L + model->BSIM4v7wkgisl * Inv_W + model->BSIM4v7pkgisl * Inv_LW; pParam->BSIM4v7fgisl = model->BSIM4v7fgisl /* v4.7 New GIDL/GISL */ + model->BSIM4v7lfgisl * Inv_L + model->BSIM4v7wfgisl * Inv_W + model->BSIM4v7pfgisl * Inv_LW; pParam->BSIM4v7aigc = model->BSIM4v7aigc + model->BSIM4v7laigc * Inv_L + model->BSIM4v7waigc * Inv_W + model->BSIM4v7paigc * Inv_LW; pParam->BSIM4v7bigc = model->BSIM4v7bigc + model->BSIM4v7lbigc * Inv_L + model->BSIM4v7wbigc * Inv_W + model->BSIM4v7pbigc * Inv_LW; pParam->BSIM4v7cigc = model->BSIM4v7cigc + model->BSIM4v7lcigc * Inv_L + model->BSIM4v7wcigc * Inv_W + model->BSIM4v7pcigc * Inv_LW; pParam->BSIM4v7aigs = model->BSIM4v7aigs + model->BSIM4v7laigs * Inv_L + model->BSIM4v7waigs * Inv_W + model->BSIM4v7paigs * Inv_LW; pParam->BSIM4v7bigs = model->BSIM4v7bigs + model->BSIM4v7lbigs * Inv_L + model->BSIM4v7wbigs * Inv_W + model->BSIM4v7pbigs * Inv_LW; pParam->BSIM4v7cigs = model->BSIM4v7cigs + model->BSIM4v7lcigs * Inv_L + model->BSIM4v7wcigs * Inv_W + model->BSIM4v7pcigs * Inv_LW; pParam->BSIM4v7aigd = model->BSIM4v7aigd + model->BSIM4v7laigd * Inv_L + model->BSIM4v7waigd * Inv_W + model->BSIM4v7paigd * Inv_LW; pParam->BSIM4v7bigd = model->BSIM4v7bigd + model->BSIM4v7lbigd * Inv_L + model->BSIM4v7wbigd * Inv_W + model->BSIM4v7pbigd * Inv_LW; pParam->BSIM4v7cigd = model->BSIM4v7cigd + model->BSIM4v7lcigd * Inv_L + model->BSIM4v7wcigd * Inv_W + model->BSIM4v7pcigd * Inv_LW; pParam->BSIM4v7aigbacc = model->BSIM4v7aigbacc + model->BSIM4v7laigbacc * Inv_L + model->BSIM4v7waigbacc * Inv_W + model->BSIM4v7paigbacc * Inv_LW; pParam->BSIM4v7bigbacc = model->BSIM4v7bigbacc + model->BSIM4v7lbigbacc * Inv_L + model->BSIM4v7wbigbacc * Inv_W + model->BSIM4v7pbigbacc * Inv_LW; pParam->BSIM4v7cigbacc = model->BSIM4v7cigbacc + model->BSIM4v7lcigbacc * Inv_L + model->BSIM4v7wcigbacc * Inv_W + model->BSIM4v7pcigbacc * Inv_LW; pParam->BSIM4v7aigbinv = model->BSIM4v7aigbinv + model->BSIM4v7laigbinv * Inv_L + model->BSIM4v7waigbinv * Inv_W + model->BSIM4v7paigbinv * Inv_LW; pParam->BSIM4v7bigbinv = model->BSIM4v7bigbinv + model->BSIM4v7lbigbinv * Inv_L + model->BSIM4v7wbigbinv * Inv_W + model->BSIM4v7pbigbinv * Inv_LW; pParam->BSIM4v7cigbinv = model->BSIM4v7cigbinv + model->BSIM4v7lcigbinv * Inv_L + model->BSIM4v7wcigbinv * Inv_W + model->BSIM4v7pcigbinv * Inv_LW; pParam->BSIM4v7nigc = model->BSIM4v7nigc + model->BSIM4v7lnigc * Inv_L + model->BSIM4v7wnigc * Inv_W + model->BSIM4v7pnigc * Inv_LW; pParam->BSIM4v7nigbacc = model->BSIM4v7nigbacc + model->BSIM4v7lnigbacc * Inv_L + model->BSIM4v7wnigbacc * Inv_W + model->BSIM4v7pnigbacc * Inv_LW; pParam->BSIM4v7nigbinv = model->BSIM4v7nigbinv + model->BSIM4v7lnigbinv * Inv_L + model->BSIM4v7wnigbinv * Inv_W + model->BSIM4v7pnigbinv * Inv_LW; pParam->BSIM4v7ntox = model->BSIM4v7ntox + model->BSIM4v7lntox * Inv_L + model->BSIM4v7wntox * Inv_W + model->BSIM4v7pntox * Inv_LW; pParam->BSIM4v7eigbinv = model->BSIM4v7eigbinv + model->BSIM4v7leigbinv * Inv_L + model->BSIM4v7weigbinv * Inv_W + model->BSIM4v7peigbinv * Inv_LW; pParam->BSIM4v7pigcd = model->BSIM4v7pigcd + model->BSIM4v7lpigcd * Inv_L + model->BSIM4v7wpigcd * Inv_W + model->BSIM4v7ppigcd * Inv_LW; pParam->BSIM4v7poxedge = model->BSIM4v7poxedge + model->BSIM4v7lpoxedge * Inv_L + model->BSIM4v7wpoxedge * Inv_W + model->BSIM4v7ppoxedge * Inv_LW; pParam->BSIM4v7xrcrg1 = model->BSIM4v7xrcrg1 + model->BSIM4v7lxrcrg1 * Inv_L + model->BSIM4v7wxrcrg1 * Inv_W + model->BSIM4v7pxrcrg1 * Inv_LW; pParam->BSIM4v7xrcrg2 = model->BSIM4v7xrcrg2 + model->BSIM4v7lxrcrg2 * Inv_L + model->BSIM4v7wxrcrg2 * Inv_W + model->BSIM4v7pxrcrg2 * Inv_LW; pParam->BSIM4v7lambda = model->BSIM4v7lambda + model->BSIM4v7llambda * Inv_L + model->BSIM4v7wlambda * Inv_W + model->BSIM4v7plambda * Inv_LW; pParam->BSIM4v7vtl = model->BSIM4v7vtl + model->BSIM4v7lvtl * Inv_L + model->BSIM4v7wvtl * Inv_W + model->BSIM4v7pvtl * Inv_LW; pParam->BSIM4v7xn = model->BSIM4v7xn + model->BSIM4v7lxn * Inv_L + model->BSIM4v7wxn * Inv_W + model->BSIM4v7pxn * Inv_LW; pParam->BSIM4v7vfbsdoff = model->BSIM4v7vfbsdoff + model->BSIM4v7lvfbsdoff * Inv_L + model->BSIM4v7wvfbsdoff * Inv_W + model->BSIM4v7pvfbsdoff * Inv_LW; pParam->BSIM4v7tvfbsdoff = model->BSIM4v7tvfbsdoff + model->BSIM4v7ltvfbsdoff * Inv_L + model->BSIM4v7wtvfbsdoff * Inv_W + model->BSIM4v7ptvfbsdoff * Inv_LW; pParam->BSIM4v7cgsl = model->BSIM4v7cgsl + model->BSIM4v7lcgsl * Inv_L + model->BSIM4v7wcgsl * Inv_W + model->BSIM4v7pcgsl * Inv_LW; pParam->BSIM4v7cgdl = model->BSIM4v7cgdl + model->BSIM4v7lcgdl * Inv_L + model->BSIM4v7wcgdl * Inv_W + model->BSIM4v7pcgdl * Inv_LW; pParam->BSIM4v7ckappas = model->BSIM4v7ckappas + model->BSIM4v7lckappas * Inv_L + model->BSIM4v7wckappas * Inv_W + model->BSIM4v7pckappas * Inv_LW; pParam->BSIM4v7ckappad = model->BSIM4v7ckappad + model->BSIM4v7lckappad * Inv_L + model->BSIM4v7wckappad * Inv_W + model->BSIM4v7pckappad * Inv_LW; pParam->BSIM4v7cf = model->BSIM4v7cf + model->BSIM4v7lcf * Inv_L + model->BSIM4v7wcf * Inv_W + model->BSIM4v7pcf * Inv_LW; pParam->BSIM4v7clc = model->BSIM4v7clc + model->BSIM4v7lclc * Inv_L + model->BSIM4v7wclc * Inv_W + model->BSIM4v7pclc * Inv_LW; pParam->BSIM4v7cle = model->BSIM4v7cle + model->BSIM4v7lcle * Inv_L + model->BSIM4v7wcle * Inv_W + model->BSIM4v7pcle * Inv_LW; pParam->BSIM4v7vfbcv = model->BSIM4v7vfbcv + model->BSIM4v7lvfbcv * Inv_L + model->BSIM4v7wvfbcv * Inv_W + model->BSIM4v7pvfbcv * Inv_LW; pParam->BSIM4v7acde = model->BSIM4v7acde + model->BSIM4v7lacde * Inv_L + model->BSIM4v7wacde * Inv_W + model->BSIM4v7pacde * Inv_LW; pParam->BSIM4v7moin = model->BSIM4v7moin + model->BSIM4v7lmoin * Inv_L + model->BSIM4v7wmoin * Inv_W + model->BSIM4v7pmoin * Inv_LW; pParam->BSIM4v7noff = model->BSIM4v7noff + model->BSIM4v7lnoff * Inv_L + model->BSIM4v7wnoff * Inv_W + model->BSIM4v7pnoff * Inv_LW; pParam->BSIM4v7voffcv = model->BSIM4v7voffcv + model->BSIM4v7lvoffcv * Inv_L + model->BSIM4v7wvoffcv * Inv_W + model->BSIM4v7pvoffcv * Inv_LW; pParam->BSIM4v7kvth0we = model->BSIM4v7kvth0we + model->BSIM4v7lkvth0we * Inv_L + model->BSIM4v7wkvth0we * Inv_W + model->BSIM4v7pkvth0we * Inv_LW; pParam->BSIM4v7k2we = model->BSIM4v7k2we + model->BSIM4v7lk2we * Inv_L + model->BSIM4v7wk2we * Inv_W + model->BSIM4v7pk2we * Inv_LW; pParam->BSIM4v7ku0we = model->BSIM4v7ku0we + model->BSIM4v7lku0we * Inv_L + model->BSIM4v7wku0we * Inv_W + model->BSIM4v7pku0we * Inv_LW; pParam->BSIM4v7abulkCVfactor = 1.0 + pow((pParam->BSIM4v7clc / pParam->BSIM4v7leffCV), pParam->BSIM4v7cle); T0 = (TRatio - 1.0); PowWeffWr = pow(pParam->BSIM4v7weffCJ * 1.0e6, pParam->BSIM4v7wr) * here->BSIM4v7nf; T1 = T2 = T3 = T4 = 0.0; pParam->BSIM4v7ucs = pParam->BSIM4v7ucs * pow(TRatio, pParam->BSIM4v7ucste); if(model->BSIM4v7tempMod == 0) { pParam->BSIM4v7ua = pParam->BSIM4v7ua + pParam->BSIM4v7ua1 * T0; pParam->BSIM4v7ub = pParam->BSIM4v7ub + pParam->BSIM4v7ub1 * T0; pParam->BSIM4v7uc = pParam->BSIM4v7uc + pParam->BSIM4v7uc1 * T0; pParam->BSIM4v7ud = pParam->BSIM4v7ud + pParam->BSIM4v7ud1 * T0; pParam->BSIM4v7vsattemp = pParam->BSIM4v7vsat - pParam->BSIM4v7at * T0; T10 = pParam->BSIM4v7prt * T0; if(model->BSIM4v7rdsMod) { /* External Rd(V) */ T1 = pParam->BSIM4v7rdw + T10; T2 = model->BSIM4v7rdwmin + T10; /* External Rs(V) */ T3 = pParam->BSIM4v7rsw + T10; T4 = model->BSIM4v7rswmin + T10; } /* Internal Rds(V) in IV */ pParam->BSIM4v7rds0 = (pParam->BSIM4v7rdsw + T10) * here->BSIM4v7nf / PowWeffWr; pParam->BSIM4v7rdswmin = (model->BSIM4v7rdswmin + T10) * here->BSIM4v7nf / PowWeffWr; } else { if (model->BSIM4v7tempMod == 3) { pParam->BSIM4v7ua = pParam->BSIM4v7ua * pow(TRatio, pParam->BSIM4v7ua1) ; pParam->BSIM4v7ub = pParam->BSIM4v7ub * pow(TRatio, pParam->BSIM4v7ub1); pParam->BSIM4v7uc = pParam->BSIM4v7uc * pow(TRatio, pParam->BSIM4v7uc1); pParam->BSIM4v7ud = pParam->BSIM4v7ud * pow(TRatio, pParam->BSIM4v7ud1); } else { /* tempMod = 1, 2 */ pParam->BSIM4v7ua = pParam->BSIM4v7ua * (1.0 + pParam->BSIM4v7ua1 * delTemp) ; pParam->BSIM4v7ub = pParam->BSIM4v7ub * (1.0 + pParam->BSIM4v7ub1 * delTemp); pParam->BSIM4v7uc = pParam->BSIM4v7uc * (1.0 + pParam->BSIM4v7uc1 * delTemp); pParam->BSIM4v7ud = pParam->BSIM4v7ud * (1.0 + pParam->BSIM4v7ud1 * delTemp); } pParam->BSIM4v7vsattemp = pParam->BSIM4v7vsat * (1.0 - pParam->BSIM4v7at * delTemp); T10 = 1.0 + pParam->BSIM4v7prt * delTemp; if(model->BSIM4v7rdsMod) { /* External Rd(V) */ T1 = pParam->BSIM4v7rdw * T10; T2 = model->BSIM4v7rdwmin * T10; /* External Rs(V) */ T3 = pParam->BSIM4v7rsw * T10; T4 = model->BSIM4v7rswmin * T10; } /* Internal Rds(V) in IV */ pParam->BSIM4v7rds0 = pParam->BSIM4v7rdsw * T10 * here->BSIM4v7nf / PowWeffWr; pParam->BSIM4v7rdswmin = model->BSIM4v7rdswmin * T10 * here->BSIM4v7nf / PowWeffWr; } if (T1 < 0.0) { T1 = 0.0; printf("Warning: Rdw at current temperature is negative; set to 0.\n"); } if (T2 < 0.0) { T2 = 0.0; printf("Warning: Rdwmin at current temperature is negative; set to 0.\n"); } pParam->BSIM4v7rd0 = T1 / PowWeffWr; pParam->BSIM4v7rdwmin = T2 / PowWeffWr; if (T3 < 0.0) { T3 = 0.0; printf("Warning: Rsw at current temperature is negative; set to 0.\n"); } if (T4 < 0.0) { T4 = 0.0; printf("Warning: Rswmin at current temperature is negative; set to 0.\n"); } pParam->BSIM4v7rs0 = T3 / PowWeffWr; pParam->BSIM4v7rswmin = T4 / PowWeffWr; if (pParam->BSIM4v7u0 > 1.0) pParam->BSIM4v7u0 = pParam->BSIM4v7u0 / 1.0e4; /* mobility channel length dependence */ T5 = 1.0 - pParam->BSIM4v7up * exp( - pParam->BSIM4v7leff / pParam->BSIM4v7lp); pParam->BSIM4v7u0temp = pParam->BSIM4v7u0 * T5 * pow(TRatio, pParam->BSIM4v7ute); if (pParam->BSIM4v7eu < 0.0) { pParam->BSIM4v7eu = 0.0; printf("Warning: eu has been negative; reset to 0.0.\n"); } if (pParam->BSIM4v7ucs < 0.0) { pParam->BSIM4v7ucs = 0.0; printf("Warning: ucs has been negative; reset to 0.0.\n"); } pParam->BSIM4v7vfbsdoff = pParam->BSIM4v7vfbsdoff * (1.0 + pParam->BSIM4v7tvfbsdoff * delTemp); pParam->BSIM4v7voff = pParam->BSIM4v7voff * (1.0 + pParam->BSIM4v7tvoff * delTemp); pParam->BSIM4v7nfactor = pParam->BSIM4v7nfactor + pParam->BSIM4v7tnfactor * delTemp / Tnom; /* v4.7 temp dep of leakage currents */ pParam->BSIM4v7voffcv = pParam->BSIM4v7voffcv * (1.0 + pParam->BSIM4v7tvoffcv * delTemp); /* v4.7 temp dep of leakage currents */ pParam->BSIM4v7eta0 = pParam->BSIM4v7eta0 + pParam->BSIM4v7teta0 * delTemp / Tnom; /* v4.7 temp dep of leakage currents */ /* Source End Velocity Limit */ if((model->BSIM4v7vtlGiven) && (model->BSIM4v7vtl > 0.0) ) { if(model->BSIM4v7lc < 0.0) pParam->BSIM4v7lc = 0.0; else pParam->BSIM4v7lc = model->BSIM4v7lc ; T0 = pParam->BSIM4v7leff / (pParam->BSIM4v7xn * pParam->BSIM4v7leff + pParam->BSIM4v7lc); pParam->BSIM4v7tfactor = (1.0 - T0) / (1.0 + T0 ); } pParam->BSIM4v7cgdo = (model->BSIM4v7cgdo + pParam->BSIM4v7cf) * pParam->BSIM4v7weffCV; pParam->BSIM4v7cgso = (model->BSIM4v7cgso + pParam->BSIM4v7cf) * pParam->BSIM4v7weffCV; pParam->BSIM4v7cgbo = model->BSIM4v7cgbo * pParam->BSIM4v7leffCV * here->BSIM4v7nf; if (!model->BSIM4v7ndepGiven && model->BSIM4v7gamma1Given) { T0 = pParam->BSIM4v7gamma1 * model->BSIM4v7coxe; pParam->BSIM4v7ndep = 3.01248e22 * T0 * T0; } pParam->BSIM4v7phi = Vtm0 * log(pParam->BSIM4v7ndep / ni) + pParam->BSIM4v7phin + 0.4; pParam->BSIM4v7sqrtPhi = sqrt(pParam->BSIM4v7phi); pParam->BSIM4v7phis3 = pParam->BSIM4v7sqrtPhi * pParam->BSIM4v7phi; pParam->BSIM4v7Xdep0 = sqrt(2.0 * epssub / (Charge_q * pParam->BSIM4v7ndep * 1.0e6)) * pParam->BSIM4v7sqrtPhi; pParam->BSIM4v7sqrtXdep0 = sqrt(pParam->BSIM4v7Xdep0); if(model->BSIM4v7mtrlMod == 0) pParam->BSIM4v7litl = sqrt(3.0 * 3.9 / epsrox * pParam->BSIM4v7xj * toxe); else pParam->BSIM4v7litl = sqrt(model->BSIM4v7epsrsub/epsrox * pParam->BSIM4v7xj * toxe); pParam->BSIM4v7vbi = Vtm0 * log(pParam->BSIM4v7nsd * pParam->BSIM4v7ndep / (ni * ni)); if (model->BSIM4v7mtrlMod == 0) { if (pParam->BSIM4v7ngate > 0.0) { pParam->BSIM4v7vfbsd = Vtm0 * log(pParam->BSIM4v7ngate / pParam->BSIM4v7nsd); } else pParam->BSIM4v7vfbsd = 0.0; } else { T0 = Vtm0 * log(pParam->BSIM4v7nsd/ni); T1 = 0.5 * Eg0; if(T0 > T1) T0 = T1; T2 = model->BSIM4v7easub + T1 - model->BSIM4v7type * T0; pParam->BSIM4v7vfbsd = model->BSIM4v7phig - T2; } pParam->BSIM4v7cdep0 = sqrt(Charge_q * epssub * pParam->BSIM4v7ndep * 1.0e6 / 2.0 / pParam->BSIM4v7phi); pParam->BSIM4v7ToxRatio = exp(pParam->BSIM4v7ntox * log(model->BSIM4v7toxref / toxe)) / toxe / toxe; pParam->BSIM4v7ToxRatioEdge = exp(pParam->BSIM4v7ntox * log(model->BSIM4v7toxref / (toxe * pParam->BSIM4v7poxedge))) / toxe / toxe / pParam->BSIM4v7poxedge / pParam->BSIM4v7poxedge; pParam->BSIM4v7Aechvb = (model->BSIM4v7type == NMOS) ? 4.97232e-7 : 3.42537e-7; pParam->BSIM4v7Bechvb = (model->BSIM4v7type == NMOS) ? 7.45669e11 : 1.16645e12; pParam->BSIM4v7AechvbEdgeS = pParam->BSIM4v7Aechvb * pParam->BSIM4v7weff * model->BSIM4v7dlcig * pParam->BSIM4v7ToxRatioEdge; pParam->BSIM4v7AechvbEdgeD = pParam->BSIM4v7Aechvb * pParam->BSIM4v7weff * model->BSIM4v7dlcigd * pParam->BSIM4v7ToxRatioEdge; pParam->BSIM4v7BechvbEdge = -pParam->BSIM4v7Bechvb * toxe * pParam->BSIM4v7poxedge; pParam->BSIM4v7Aechvb *= pParam->BSIM4v7weff * pParam->BSIM4v7leff * pParam->BSIM4v7ToxRatio; pParam->BSIM4v7Bechvb *= -toxe; pParam->BSIM4v7mstar = 0.5 + atan(pParam->BSIM4v7minv) / PI; pParam->BSIM4v7mstarcv = 0.5 + atan(pParam->BSIM4v7minvcv) / PI; pParam->BSIM4v7voffcbn = pParam->BSIM4v7voff + model->BSIM4v7voffl / pParam->BSIM4v7leff; pParam->BSIM4v7voffcbncv = pParam->BSIM4v7voffcv + model->BSIM4v7voffcvl / pParam->BSIM4v7leff; pParam->BSIM4v7ldeb = sqrt(epssub * Vtm0 / (Charge_q * pParam->BSIM4v7ndep * 1.0e6)) / 3.0; pParam->BSIM4v7acde *= pow((pParam->BSIM4v7ndep / 2.0e16), -0.25); if (model->BSIM4v7k1Given || model->BSIM4v7k2Given) { if (!model->BSIM4v7k1Given) { if ((!ckt->CKTcurJob) || (ckt->CKTcurJob->JOBtype < 9)) /* don't print in sensitivity */ fprintf(stdout, "Warning: k1 should be specified with k2.\n"); pParam->BSIM4v7k1 = 0.53; } if (!model->BSIM4v7k2Given) { if ((!ckt->CKTcurJob) || (ckt->CKTcurJob->JOBtype < 9)) /* don't print in sensitivity */ fprintf(stdout, "Warning: k2 should be specified with k1.\n"); pParam->BSIM4v7k2 = -0.0186; } if ((!ckt->CKTcurJob) || (ckt->CKTcurJob->JOBtype < 9)) { /* don't print in sensitivity */ if (model->BSIM4v7nsubGiven) fprintf(stdout, "Warning: nsub is ignored because k1 or k2 is given.\n"); if (model->BSIM4v7xtGiven) fprintf(stdout, "Warning: xt is ignored because k1 or k2 is given.\n"); if (model->BSIM4v7vbxGiven) fprintf(stdout, "Warning: vbx is ignored because k1 or k2 is given.\n"); if (model->BSIM4v7gamma1Given) fprintf(stdout, "Warning: gamma1 is ignored because k1 or k2 is given.\n"); if (model->BSIM4v7gamma2Given) fprintf(stdout, "Warning: gamma2 is ignored because k1 or k2 is given.\n"); } } else { if (!model->BSIM4v7vbxGiven) pParam->BSIM4v7vbx = pParam->BSIM4v7phi - 7.7348e-4 * pParam->BSIM4v7ndep * pParam->BSIM4v7xt * pParam->BSIM4v7xt; if (pParam->BSIM4v7vbx > 0.0) pParam->BSIM4v7vbx = -pParam->BSIM4v7vbx; if (pParam->BSIM4v7vbm > 0.0) pParam->BSIM4v7vbm = -pParam->BSIM4v7vbm; if (!model->BSIM4v7gamma1Given) pParam->BSIM4v7gamma1 = 5.753e-12 * sqrt(pParam->BSIM4v7ndep) / model->BSIM4v7coxe; if (!model->BSIM4v7gamma2Given) pParam->BSIM4v7gamma2 = 5.753e-12 * sqrt(pParam->BSIM4v7nsub) / model->BSIM4v7coxe; T0 = pParam->BSIM4v7gamma1 - pParam->BSIM4v7gamma2; T1 = sqrt(pParam->BSIM4v7phi - pParam->BSIM4v7vbx) - pParam->BSIM4v7sqrtPhi; T2 = sqrt(pParam->BSIM4v7phi * (pParam->BSIM4v7phi - pParam->BSIM4v7vbm)) - pParam->BSIM4v7phi; pParam->BSIM4v7k2 = T0 * T1 / (2.0 * T2 + pParam->BSIM4v7vbm); pParam->BSIM4v7k1 = pParam->BSIM4v7gamma2 - 2.0 * pParam->BSIM4v7k2 * sqrt(pParam->BSIM4v7phi - pParam->BSIM4v7vbm); } if (!model->BSIM4v7vfbGiven) { if (model->BSIM4v7vth0Given) { pParam->BSIM4v7vfb = model->BSIM4v7type * pParam->BSIM4v7vth0 - pParam->BSIM4v7phi - pParam->BSIM4v7k1 * pParam->BSIM4v7sqrtPhi; } else { if ((model->BSIM4v7mtrlMod) && (model->BSIM4v7phigGiven) && (model->BSIM4v7nsubGiven)) { T0 = Vtm0 * log(pParam->BSIM4v7nsub/ni); T1 = 0.5 * Eg0; if(T0 > T1) T0 = T1; T2 = model->BSIM4v7easub + T1 + model->BSIM4v7type * T0; pParam->BSIM4v7vfb = model->BSIM4v7phig - T2; } else { pParam->BSIM4v7vfb = -1.0; } } } if (!model->BSIM4v7vth0Given) { pParam->BSIM4v7vth0 = model->BSIM4v7type * (pParam->BSIM4v7vfb + pParam->BSIM4v7phi + pParam->BSIM4v7k1 * pParam->BSIM4v7sqrtPhi); } pParam->BSIM4v7k1ox = pParam->BSIM4v7k1 * toxe / model->BSIM4v7toxm; tmp = sqrt(epssub / (epsrox * EPS0) * toxe * pParam->BSIM4v7Xdep0); T0 = pParam->BSIM4v7dsub * pParam->BSIM4v7leff / tmp; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; pParam->BSIM4v7theta0vb0 = T1 / T4; } else pParam->BSIM4v7theta0vb0 = 1.0 / (MAX_EXP - 2.0); T0 = pParam->BSIM4v7drout * pParam->BSIM4v7leff / tmp; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; T5 = T1 / T4; } else T5 = 1.0 / (MAX_EXP - 2.0); /* 3.0 * MIN_EXP omitted */ pParam->BSIM4v7thetaRout = pParam->BSIM4v7pdibl1 * T5 + pParam->BSIM4v7pdibl2; tmp = sqrt(pParam->BSIM4v7Xdep0); tmp1 = pParam->BSIM4v7vbi - pParam->BSIM4v7phi; tmp2 = model->BSIM4v7factor1 * tmp; T0 = pParam->BSIM4v7dvt1w * pParam->BSIM4v7weff * pParam->BSIM4v7leff / tmp2; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; T8 = T1 / T4; } else T8 = 1.0 / (MAX_EXP - 2.0); T0 = pParam->BSIM4v7dvt0w * T8; T8 = T0 * tmp1; T0 = pParam->BSIM4v7dvt1 * pParam->BSIM4v7leff / tmp2; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; T9 = T1 / T4; } else T9 = 1.0 / (MAX_EXP - 2.0); T9 = pParam->BSIM4v7dvt0 * T9 * tmp1; T4 = toxe * pParam->BSIM4v7phi / (pParam->BSIM4v7weff + pParam->BSIM4v7w0); T0 = sqrt(1.0 + pParam->BSIM4v7lpe0 / pParam->BSIM4v7leff); if((model->BSIM4v7tempMod == 1) || (model->BSIM4v7tempMod == 0)) T3 = (pParam->BSIM4v7kt1 + pParam->BSIM4v7kt1l / pParam->BSIM4v7leff) * (TRatio - 1.0); if((model->BSIM4v7tempMod == 2)||(model->BSIM4v7tempMod == 3)) T3 = - pParam->BSIM4v7kt1 * (TRatio - 1.0); T5 = pParam->BSIM4v7k1ox * (T0 - 1.0) * pParam->BSIM4v7sqrtPhi + T3; pParam->BSIM4v7vfbzbfactor = - T8 - T9 + pParam->BSIM4v7k3 * T4 + T5 - pParam->BSIM4v7phi - pParam->BSIM4v7k1 * pParam->BSIM4v7sqrtPhi; /* stress effect */ wlod = model->BSIM4v7wlod; if (model->BSIM4v7wlod < 0.0) { fprintf(stderr, "Warning: WLOD = %g is less than 0. 0.0 is used\n",model->BSIM4v7wlod); wlod = 0.0; } T0 = pow(Lnew, model->BSIM4v7llodku0); W_tmp = Wnew + wlod; T1 = pow(W_tmp, model->BSIM4v7wlodku0); tmp1 = model->BSIM4v7lku0 / T0 + model->BSIM4v7wku0 / T1 + model->BSIM4v7pku0 / (T0 * T1); pParam->BSIM4v7ku0 = 1.0 + tmp1; T0 = pow(Lnew, model->BSIM4v7llodvth); T1 = pow(W_tmp, model->BSIM4v7wlodvth); tmp1 = model->BSIM4v7lkvth0 / T0 + model->BSIM4v7wkvth0 / T1 + model->BSIM4v7pkvth0 / (T0 * T1); pParam->BSIM4v7kvth0 = 1.0 + tmp1; pParam->BSIM4v7kvth0 = sqrt(pParam->BSIM4v7kvth0*pParam->BSIM4v7kvth0 + DELTA); T0 = (TRatio - 1.0); pParam->BSIM4v7ku0temp = pParam->BSIM4v7ku0 * (1.0 + model->BSIM4v7tku0 *T0) + DELTA; Inv_saref = 1.0/(model->BSIM4v7saref + 0.5*Ldrn); Inv_sbref = 1.0/(model->BSIM4v7sbref + 0.5*Ldrn); pParam->BSIM4v7inv_od_ref = Inv_saref + Inv_sbref; pParam->BSIM4v7rho_ref = model->BSIM4v7ku0 / pParam->BSIM4v7ku0temp * pParam->BSIM4v7inv_od_ref; } /* End of SizeNotFound */ /* stress effect */ if( (here->BSIM4v7sa > 0.0) && (here->BSIM4v7sb > 0.0) && ((here->BSIM4v7nf == 1.0) || ((here->BSIM4v7nf > 1.0) && (here->BSIM4v7sd > 0.0))) ) { Inv_sa = 0; Inv_sb = 0; kvsat = model->BSIM4v7kvsat; if (model->BSIM4v7kvsat < -1.0 ) { fprintf(stderr, "Warning: KVSAT = %g is too small; -1.0 is used.\n",model->BSIM4v7kvsat); kvsat = -1.0; } if (model->BSIM4v7kvsat > 1.0) { fprintf(stderr, "Warning: KVSAT = %g is too big; 1.0 is used.\n",model->BSIM4v7kvsat); kvsat = 1.0; } for(i = 0; i < here->BSIM4v7nf; i++){ T0 = 1.0 / here->BSIM4v7nf / (here->BSIM4v7sa + 0.5*Ldrn + i * (here->BSIM4v7sd +Ldrn)); T1 = 1.0 / here->BSIM4v7nf / (here->BSIM4v7sb + 0.5*Ldrn + i * (here->BSIM4v7sd +Ldrn)); Inv_sa += T0; Inv_sb += T1; } Inv_ODeff = Inv_sa + Inv_sb; rho = model->BSIM4v7ku0 / pParam->BSIM4v7ku0temp * Inv_ODeff; T0 = (1.0 + rho)/(1.0 + pParam->BSIM4v7rho_ref); here->BSIM4v7u0temp = pParam->BSIM4v7u0temp * T0; T1 = (1.0 + kvsat * rho)/(1.0 + kvsat * pParam->BSIM4v7rho_ref); here->BSIM4v7vsattemp = pParam->BSIM4v7vsattemp * T1; OD_offset = Inv_ODeff - pParam->BSIM4v7inv_od_ref; dvth0_lod = model->BSIM4v7kvth0 / pParam->BSIM4v7kvth0 * OD_offset; dk2_lod = model->BSIM4v7stk2 / pow(pParam->BSIM4v7kvth0, model->BSIM4v7lodk2) * OD_offset; deta0_lod = model->BSIM4v7steta0 / pow(pParam->BSIM4v7kvth0, model->BSIM4v7lodeta0) * OD_offset; here->BSIM4v7vth0 = pParam->BSIM4v7vth0 + dvth0_lod; here->BSIM4v7eta0 = pParam->BSIM4v7eta0 + deta0_lod; here->BSIM4v7k2 = pParam->BSIM4v7k2 + dk2_lod; } else { here->BSIM4v7u0temp = pParam->BSIM4v7u0temp; here->BSIM4v7vth0 = pParam->BSIM4v7vth0; here->BSIM4v7vsattemp = pParam->BSIM4v7vsattemp; here->BSIM4v7eta0 = pParam->BSIM4v7eta0; here->BSIM4v7k2 = pParam->BSIM4v7k2; } /* Well Proximity Effect */ if (model->BSIM4v7wpemod) { if( (!here->BSIM4v7scaGiven) && (!here->BSIM4v7scbGiven) && (!here->BSIM4v7sccGiven) ) { if((here->BSIM4v7scGiven) && (here->BSIM4v7sc > 0.0) ) { T1 = here->BSIM4v7sc + Wdrn; T2 = 1.0 / model->BSIM4v7scref; here->BSIM4v7sca = model->BSIM4v7scref * model->BSIM4v7scref / (here->BSIM4v7sc * T1); here->BSIM4v7scb = ( (0.1 * here->BSIM4v7sc + 0.01 * model->BSIM4v7scref) * exp(-10.0 * here->BSIM4v7sc * T2) - (0.1 * T1 + 0.01 * model->BSIM4v7scref) * exp(-10.0 * T1 * T2) ) / Wdrn; here->BSIM4v7scc = ( (0.05 * here->BSIM4v7sc + 0.0025 * model->BSIM4v7scref) * exp(-20.0 * here->BSIM4v7sc * T2) - (0.05 * T1 + 0.0025 * model->BSIM4v7scref) * exp(-20.0 * T1 * T2) ) / Wdrn; } else { fprintf(stderr, "Warning: No WPE as none of SCA, SCB, SCC, SC is given and/or SC not positive.\n"); } } if (here->BSIM4v7sca < 0.0) { printf("Warning: SCA = %g is negative. Set to 0.0.\n", here->BSIM4v7sca); here->BSIM4v7sca = 0.0; } if (here->BSIM4v7scb < 0.0) { printf("Warning: SCB = %g is negative. Set to 0.0.\n", here->BSIM4v7scb); here->BSIM4v7scb = 0.0; } if (here->BSIM4v7scc < 0.0) { printf("Warning: SCC = %g is negative. Set to 0.0.\n", here->BSIM4v7scc); here->BSIM4v7scc = 0.0; } if (here->BSIM4v7sc < 0.0) { printf("Warning: SC = %g is negative. Set to 0.0.\n", here->BSIM4v7sc); here->BSIM4v7sc = 0.0; } /*4.6.2*/ sceff = here->BSIM4v7sca + model->BSIM4v7web * here->BSIM4v7scb + model->BSIM4v7wec * here->BSIM4v7scc; here->BSIM4v7vth0 += pParam->BSIM4v7kvth0we * sceff; here->BSIM4v7k2 += pParam->BSIM4v7k2we * sceff; T3 = 1.0 + pParam->BSIM4v7ku0we * sceff; if (T3 <= 0.0) { T3 = 0.0; fprintf(stderr, "Warning: ku0we = %g is negatively too high. Negative mobility! \n", pParam->BSIM4v7ku0we); } here->BSIM4v7u0temp *= T3; } /* adding delvto */ here->BSIM4v7vth0 += here->BSIM4v7delvto; here->BSIM4v7vfb = pParam->BSIM4v7vfb + model->BSIM4v7type * here->BSIM4v7delvto; /* low field mobility multiplier */ here->BSIM4v7u0temp = pParam->BSIM4v7u0temp * here->BSIM4v7mulu0; /* Instance variables calculation */ T3 = model->BSIM4v7type * here->BSIM4v7vth0 - here->BSIM4v7vfb - pParam->BSIM4v7phi; T4 = T3 + T3; T5 = 2.5 * T3; here->BSIM4v7vtfbphi1 = (model->BSIM4v7type == NMOS) ? T4 : T5; if (here->BSIM4v7vtfbphi1 < 0.0) here->BSIM4v7vtfbphi1 = 0.0; here->BSIM4v7vtfbphi2 = 4.0 * T3; if (here->BSIM4v7vtfbphi2 < 0.0) here->BSIM4v7vtfbphi2 = 0.0; if (here->BSIM4v7k2 < 0.0) { T0 = 0.5 * pParam->BSIM4v7k1 / here->BSIM4v7k2; here->BSIM4v7vbsc = 0.9 * (pParam->BSIM4v7phi - T0 * T0); if (here->BSIM4v7vbsc > -3.0) here->BSIM4v7vbsc = -3.0; else if (here->BSIM4v7vbsc < -30.0) here->BSIM4v7vbsc = -30.0; } else here->BSIM4v7vbsc = -30.0; if (here->BSIM4v7vbsc > pParam->BSIM4v7vbm) here->BSIM4v7vbsc = pParam->BSIM4v7vbm; here->BSIM4v7k2ox = here->BSIM4v7k2 * toxe / model->BSIM4v7toxm; here->BSIM4v7vfbzb = pParam->BSIM4v7vfbzbfactor + model->BSIM4v7type * here->BSIM4v7vth0 ; here->BSIM4v7cgso = pParam->BSIM4v7cgso; here->BSIM4v7cgdo = pParam->BSIM4v7cgdo; lnl = log(pParam->BSIM4v7leff * 1.0e6); lnw = log(pParam->BSIM4v7weff * 1.0e6); lnnf = log(here->BSIM4v7nf); bodymode = 5; if( ( !model->BSIM4v7rbps0Given) || ( !model->BSIM4v7rbpd0Given) ) bodymode = 1; else if( (!model->BSIM4v7rbsbx0Given && !model->BSIM4v7rbsby0Given) || (!model->BSIM4v7rbdbx0Given && !model->BSIM4v7rbdby0Given) ) bodymode = 3; if(here->BSIM4v7rbodyMod == 2) { if (bodymode == 5) { rbsbx = exp( log(model->BSIM4v7rbsbx0) + model->BSIM4v7rbsdbxl * lnl + model->BSIM4v7rbsdbxw * lnw + model->BSIM4v7rbsdbxnf * lnnf ); rbsby = exp( log(model->BSIM4v7rbsby0) + model->BSIM4v7rbsdbyl * lnl + model->BSIM4v7rbsdbyw * lnw + model->BSIM4v7rbsdbynf * lnnf ); here->BSIM4v7rbsb = rbsbx * rbsby / (rbsbx + rbsby); rbdbx = exp( log(model->BSIM4v7rbdbx0) + model->BSIM4v7rbsdbxl * lnl + model->BSIM4v7rbsdbxw * lnw + model->BSIM4v7rbsdbxnf * lnnf ); rbdby = exp( log(model->BSIM4v7rbdby0) + model->BSIM4v7rbsdbyl * lnl + model->BSIM4v7rbsdbyw * lnw + model->BSIM4v7rbsdbynf * lnnf ); here->BSIM4v7rbdb = rbdbx * rbdby / (rbdbx + rbdby); } if ((bodymode == 3)|| (bodymode == 5)) { here->BSIM4v7rbps = exp( log(model->BSIM4v7rbps0) + model->BSIM4v7rbpsl * lnl + model->BSIM4v7rbpsw * lnw + model->BSIM4v7rbpsnf * lnnf ); here->BSIM4v7rbpd = exp( log(model->BSIM4v7rbpd0) + model->BSIM4v7rbpdl * lnl + model->BSIM4v7rbpdw * lnw + model->BSIM4v7rbpdnf * lnnf ); } rbpbx = exp( log(model->BSIM4v7rbpbx0) + model->BSIM4v7rbpbxl * lnl + model->BSIM4v7rbpbxw * lnw + model->BSIM4v7rbpbxnf * lnnf ); rbpby = exp( log(model->BSIM4v7rbpby0) + model->BSIM4v7rbpbyl * lnl + model->BSIM4v7rbpbyw * lnw + model->BSIM4v7rbpbynf * lnnf ); here->BSIM4v7rbpb = rbpbx*rbpby/(rbpbx + rbpby); } if ((here->BSIM4v7rbodyMod == 1 ) || ((here->BSIM4v7rbodyMod == 2 ) && (bodymode == 5)) ) { if (here->BSIM4v7rbdb < 1.0e-3) here->BSIM4v7grbdb = 1.0e3; /* in mho */ else here->BSIM4v7grbdb = model->BSIM4v7gbmin + 1.0 / here->BSIM4v7rbdb; if (here->BSIM4v7rbpb < 1.0e-3) here->BSIM4v7grbpb = 1.0e3; else here->BSIM4v7grbpb = model->BSIM4v7gbmin + 1.0 / here->BSIM4v7rbpb; if (here->BSIM4v7rbps < 1.0e-3) here->BSIM4v7grbps = 1.0e3; else here->BSIM4v7grbps = model->BSIM4v7gbmin + 1.0 / here->BSIM4v7rbps; if (here->BSIM4v7rbsb < 1.0e-3) here->BSIM4v7grbsb = 1.0e3; else here->BSIM4v7grbsb = model->BSIM4v7gbmin + 1.0 / here->BSIM4v7rbsb; if (here->BSIM4v7rbpd < 1.0e-3) here->BSIM4v7grbpd = 1.0e3; else here->BSIM4v7grbpd = model->BSIM4v7gbmin + 1.0 / here->BSIM4v7rbpd; } if((here->BSIM4v7rbodyMod == 2) && (bodymode == 3)) { here->BSIM4v7grbdb = here->BSIM4v7grbsb = model->BSIM4v7gbmin; if (here->BSIM4v7rbpb < 1.0e-3) here->BSIM4v7grbpb = 1.0e3; else here->BSIM4v7grbpb = model->BSIM4v7gbmin + 1.0 / here->BSIM4v7rbpb; if (here->BSIM4v7rbps < 1.0e-3) here->BSIM4v7grbps = 1.0e3; else here->BSIM4v7grbps = model->BSIM4v7gbmin + 1.0 / here->BSIM4v7rbps; if (here->BSIM4v7rbpd < 1.0e-3) here->BSIM4v7grbpd = 1.0e3; else here->BSIM4v7grbpd = model->BSIM4v7gbmin + 1.0 / here->BSIM4v7rbpd; } if((here->BSIM4v7rbodyMod == 2) && (bodymode == 1)) { here->BSIM4v7grbdb = here->BSIM4v7grbsb = model->BSIM4v7gbmin; here->BSIM4v7grbps = here->BSIM4v7grbpd = 1.0e3; if (here->BSIM4v7rbpb < 1.0e-3) here->BSIM4v7grbpb = 1.0e3; else here->BSIM4v7grbpb = model->BSIM4v7gbmin + 1.0 / here->BSIM4v7rbpb; } /* * Process geomertry dependent parasitics */ here->BSIM4v7grgeltd = model->BSIM4v7rshg * (here->BSIM4v7xgw + pParam->BSIM4v7weffCJ / 3.0 / here->BSIM4v7ngcon) / (here->BSIM4v7ngcon * here->BSIM4v7nf * (Lnew - model->BSIM4v7xgl)); if (here->BSIM4v7grgeltd > 0.0) here->BSIM4v7grgeltd = 1.0 / here->BSIM4v7grgeltd; else { here->BSIM4v7grgeltd = 1.0e3; /* mho */ if (here->BSIM4v7rgateMod != 0) printf("Warning: The gate conductance reset to 1.0e3 mho.\n"); } DMCGeff = model->BSIM4v7dmcg - model->BSIM4v7dmcgt; DMCIeff = model->BSIM4v7dmci; DMDGeff = model->BSIM4v7dmdg - model->BSIM4v7dmcgt; /* if (here->BSIM4v7sourcePerimeterGiven) { if (model->BSIM4v7perMod == 0) here->BSIM4v7Pseff = here->BSIM4v7sourcePerimeter; else here->BSIM4v7Pseff = here->BSIM4v7sourcePerimeter - pParam->BSIM4v7weffCJ * here->BSIM4v7nf; } else BSIM4v7PAeffGeo(here->BSIM4v7nf, here->BSIM4v7geoMod, here->BSIM4v7min, pParam->BSIM4v7weffCJ, DMCGeff, DMCIeff, DMDGeff, &(here->BSIM4v7Pseff), &dumPd, &dumAs, &dumAd); if (here->BSIM4v7Pseff < 0.0) /4.6.2/ here->BSIM4v7Pseff = 0.0; */ /* New Diode Model v4.7*/ if (here->BSIM4v7sourcePerimeterGiven) { /* given */ if (here->BSIM4v7sourcePerimeter == 0.0) here->BSIM4v7Pseff = 0.0; else if (here->BSIM4v7sourcePerimeter < 0.0) { printf("Warning: Source Perimeter is specified as negative, it is set to zero.\n"); here->BSIM4v7Pseff = 0.0; } else { if (model->BSIM4v7perMod == 0) here->BSIM4v7Pseff = here->BSIM4v7sourcePerimeter; else here->BSIM4v7Pseff = here->BSIM4v7sourcePerimeter - pParam->BSIM4v7weffCJ * here->BSIM4v7nf; } } else /* not given */ BSIM4v7PAeffGeo(here->BSIM4v7nf, here->BSIM4v7geoMod, here->BSIM4v7min, pParam->BSIM4v7weffCJ, DMCGeff, DMCIeff, DMDGeff, &(here->BSIM4v7Pseff), &dumPd, &dumAs, &dumAd); if (here->BSIM4v7Pseff < 0.0){ /* v4.7 final check */ here->BSIM4v7Pseff = 0.0; printf("Warning: Pseff is negative, it is set to zero.\n"); } /* if (here->BSIM4v7drainPerimeterGiven) { if (model->BSIM4v7perMod == 0) here->BSIM4v7Pdeff = here->BSIM4v7drainPerimeter; else here->BSIM4v7Pdeff = here->BSIM4v7drainPerimeter - pParam->BSIM4v7weffCJ * here->BSIM4v7nf; } else BSIM4v7PAeffGeo(here->BSIM4v7nf, here->BSIM4v7geoMod, here->BSIM4v7min, pParam->BSIM4v7weffCJ, DMCGeff, DMCIeff, DMDGeff, &dumPs, &(here->BSIM4v7Pdeff), &dumAs, &dumAd); if (here->BSIM4v7Pdeff < 0.0) /4.6.2/ here->BSIM4v7Pdeff = 0.0; */ if (here->BSIM4v7drainPerimeterGiven) { /* given */ if (here->BSIM4v7drainPerimeter == 0.0) here->BSIM4v7Pdeff = 0.0; else if (here->BSIM4v7drainPerimeter < 0.0) { printf("Warning: Drain Perimeter is specified as negative, it is set to zero.\n"); here->BSIM4v7Pdeff = 0.0; } else { if (model->BSIM4v7perMod == 0) here->BSIM4v7Pdeff = here->BSIM4v7drainPerimeter; else here->BSIM4v7Pdeff = here->BSIM4v7drainPerimeter - pParam->BSIM4v7weffCJ * here->BSIM4v7nf; } } else /* not given */ BSIM4v7PAeffGeo(here->BSIM4v7nf, here->BSIM4v7geoMod, here->BSIM4v7min, pParam->BSIM4v7weffCJ, DMCGeff, DMCIeff, DMDGeff, &dumPs, &(here->BSIM4v7Pdeff), &dumAs, &dumAd); if (here->BSIM4v7Pdeff < 0.0){ here->BSIM4v7Pdeff = 0.0; /*New Diode v4.7*/ printf("Warning: Pdeff is negative, it is set to zero.\n"); } if (here->BSIM4v7sourceAreaGiven) here->BSIM4v7Aseff = here->BSIM4v7sourceArea; else BSIM4v7PAeffGeo(here->BSIM4v7nf, here->BSIM4v7geoMod, here->BSIM4v7min, pParam->BSIM4v7weffCJ, DMCGeff, DMCIeff, DMDGeff, &dumPs, &dumPd, &(here->BSIM4v7Aseff), &dumAd); if (here->BSIM4v7Aseff < 0.0){ here->BSIM4v7Aseff = 0.0; /* v4.7 */ printf("Warning: Aseff is negative, it is set to zero.\n"); } if (here->BSIM4v7drainAreaGiven) here->BSIM4v7Adeff = here->BSIM4v7drainArea; else BSIM4v7PAeffGeo(here->BSIM4v7nf, here->BSIM4v7geoMod, here->BSIM4v7min, pParam->BSIM4v7weffCJ, DMCGeff, DMCIeff, DMDGeff, &dumPs, &dumPd, &dumAs, &(here->BSIM4v7Adeff)); if (here->BSIM4v7Adeff < 0.0){ here->BSIM4v7Adeff = 0.0; /* v4.7 */ printf("Warning: Adeff is negative, it is set to zero.\n"); } /* Processing S/D resistance and conductance below */ if(here->BSIM4v7sNodePrime != here->BSIM4v7sNode) { here->BSIM4v7sourceConductance = 0.0; if(here->BSIM4v7sourceSquaresGiven) { here->BSIM4v7sourceConductance = model->BSIM4v7sheetResistance * here->BSIM4v7sourceSquares; } else if (here->BSIM4v7rgeoMod > 0) { BSIM4v7RdseffGeo(here->BSIM4v7nf, here->BSIM4v7geoMod, here->BSIM4v7rgeoMod, here->BSIM4v7min, pParam->BSIM4v7weffCJ, model->BSIM4v7sheetResistance, DMCGeff, DMCIeff, DMDGeff, 1, &(here->BSIM4v7sourceConductance)); } else { here->BSIM4v7sourceConductance = 0.0; } if (here->BSIM4v7sourceConductance > 0.0) here->BSIM4v7sourceConductance = 1.0 / here->BSIM4v7sourceConductance; else { here->BSIM4v7sourceConductance = 1.0e3; /* mho */ printf ("Warning: Source conductance reset to 1.0e3 mho.\n"); } } else { here->BSIM4v7sourceConductance = 0.0; } if(here->BSIM4v7dNodePrime != here->BSIM4v7dNode) { here->BSIM4v7drainConductance = 0.0; if(here->BSIM4v7drainSquaresGiven) { here->BSIM4v7drainConductance = model->BSIM4v7sheetResistance * here->BSIM4v7drainSquares; } else if (here->BSIM4v7rgeoMod > 0) { BSIM4v7RdseffGeo(here->BSIM4v7nf, here->BSIM4v7geoMod, here->BSIM4v7rgeoMod, here->BSIM4v7min, pParam->BSIM4v7weffCJ, model->BSIM4v7sheetResistance, DMCGeff, DMCIeff, DMDGeff, 0, &(here->BSIM4v7drainConductance)); } else { here->BSIM4v7drainConductance = 0.0; } if (here->BSIM4v7drainConductance > 0.0) here->BSIM4v7drainConductance = 1.0 / here->BSIM4v7drainConductance; else { here->BSIM4v7drainConductance = 1.0e3; /* mho */ printf ("Warning: Drain conductance reset to 1.0e3 mho.\n"); } } else { here->BSIM4v7drainConductance = 0.0; } /* End of Rsd processing */ Nvtms = model->BSIM4v7vtm * model->BSIM4v7SjctEmissionCoeff; if ((here->BSIM4v7Aseff <= 0.0) && (here->BSIM4v7Pseff <= 0.0)) { SourceSatCurrent = 0.0; /* v4.7 */ /* SourceSatCurrent = 1.0e-14; */ } else { SourceSatCurrent = here->BSIM4v7Aseff * model->BSIM4v7SjctTempSatCurDensity + here->BSIM4v7Pseff * model->BSIM4v7SjctSidewallTempSatCurDensity + pParam->BSIM4v7weffCJ * here->BSIM4v7nf * model->BSIM4v7SjctGateSidewallTempSatCurDensity; } if (SourceSatCurrent > 0.0) { switch(model->BSIM4v7dioMod) { case 0: if ((model->BSIM4v7bvs / Nvtms) > EXP_THRESHOLD) here->BSIM4v7XExpBVS = model->BSIM4v7xjbvs * MIN_EXP; else here->BSIM4v7XExpBVS = model->BSIM4v7xjbvs * exp(-model->BSIM4v7bvs / Nvtms); break; case 1: BSIM4v7DioIjthVjmEval(Nvtms, model->BSIM4v7ijthsfwd, SourceSatCurrent, 0.0, &(here->BSIM4v7vjsmFwd)); here->BSIM4v7IVjsmFwd = SourceSatCurrent * exp(here->BSIM4v7vjsmFwd / Nvtms); break; case 2: if ((model->BSIM4v7bvs / Nvtms) > EXP_THRESHOLD) { here->BSIM4v7XExpBVS = model->BSIM4v7xjbvs * MIN_EXP; tmp = MIN_EXP; } else { here->BSIM4v7XExpBVS = exp(-model->BSIM4v7bvs / Nvtms); tmp = here->BSIM4v7XExpBVS; here->BSIM4v7XExpBVS *= model->BSIM4v7xjbvs; } BSIM4v7DioIjthVjmEval(Nvtms, model->BSIM4v7ijthsfwd, SourceSatCurrent, here->BSIM4v7XExpBVS, &(here->BSIM4v7vjsmFwd)); T0 = exp(here->BSIM4v7vjsmFwd / Nvtms); here->BSIM4v7IVjsmFwd = SourceSatCurrent * (T0 - here->BSIM4v7XExpBVS / T0 + here->BSIM4v7XExpBVS - 1.0); here->BSIM4v7SslpFwd = SourceSatCurrent * (T0 + here->BSIM4v7XExpBVS / T0) / Nvtms; T2 = model->BSIM4v7ijthsrev / SourceSatCurrent; if (T2 < 1.0) { T2 = 10.0; fprintf(stderr, "Warning: ijthsrev too small and set to 10 times IsbSat.\n"); } here->BSIM4v7vjsmRev = -model->BSIM4v7bvs - Nvtms * log((T2 - 1.0) / model->BSIM4v7xjbvs); T1 = model->BSIM4v7xjbvs * exp(-(model->BSIM4v7bvs + here->BSIM4v7vjsmRev) / Nvtms); here->BSIM4v7IVjsmRev = SourceSatCurrent * (1.0 + T1); here->BSIM4v7SslpRev = -SourceSatCurrent * T1 / Nvtms; break; default: printf("Specified dioMod = %d not matched\n", model->BSIM4v7dioMod); } } Nvtmd = model->BSIM4v7vtm * model->BSIM4v7DjctEmissionCoeff; if ((here->BSIM4v7Adeff <= 0.0) && (here->BSIM4v7Pdeff <= 0.0)) { /* DrainSatCurrent = 1.0e-14; v4.7 */ DrainSatCurrent = 0.0; } else { DrainSatCurrent = here->BSIM4v7Adeff * model->BSIM4v7DjctTempSatCurDensity + here->BSIM4v7Pdeff * model->BSIM4v7DjctSidewallTempSatCurDensity + pParam->BSIM4v7weffCJ * here->BSIM4v7nf * model->BSIM4v7DjctGateSidewallTempSatCurDensity; } if (DrainSatCurrent > 0.0) { switch(model->BSIM4v7dioMod) { case 0: if ((model->BSIM4v7bvd / Nvtmd) > EXP_THRESHOLD) here->BSIM4v7XExpBVD = model->BSIM4v7xjbvd * MIN_EXP; else here->BSIM4v7XExpBVD = model->BSIM4v7xjbvd * exp(-model->BSIM4v7bvd / Nvtmd); break; case 1: BSIM4v7DioIjthVjmEval(Nvtmd, model->BSIM4v7ijthdfwd, DrainSatCurrent, 0.0, &(here->BSIM4v7vjdmFwd)); here->BSIM4v7IVjdmFwd = DrainSatCurrent * exp(here->BSIM4v7vjdmFwd / Nvtmd); break; case 2: if ((model->BSIM4v7bvd / Nvtmd) > EXP_THRESHOLD) { here->BSIM4v7XExpBVD = model->BSIM4v7xjbvd * MIN_EXP; tmp = MIN_EXP; } else { here->BSIM4v7XExpBVD = exp(-model->BSIM4v7bvd / Nvtmd); tmp = here->BSIM4v7XExpBVD; here->BSIM4v7XExpBVD *= model->BSIM4v7xjbvd; } BSIM4v7DioIjthVjmEval(Nvtmd, model->BSIM4v7ijthdfwd, DrainSatCurrent, here->BSIM4v7XExpBVD, &(here->BSIM4v7vjdmFwd)); T0 = exp(here->BSIM4v7vjdmFwd / Nvtmd); here->BSIM4v7IVjdmFwd = DrainSatCurrent * (T0 - here->BSIM4v7XExpBVD / T0 + here->BSIM4v7XExpBVD - 1.0); here->BSIM4v7DslpFwd = DrainSatCurrent * (T0 + here->BSIM4v7XExpBVD / T0) / Nvtmd; T2 = model->BSIM4v7ijthdrev / DrainSatCurrent; if (T2 < 1.0) { T2 = 10.0; fprintf(stderr, "Warning: ijthdrev too small and set to 10 times IdbSat.\n"); } here->BSIM4v7vjdmRev = -model->BSIM4v7bvd - Nvtmd * log((T2 - 1.0) / model->BSIM4v7xjbvd); /* bugfix */ T1 = model->BSIM4v7xjbvd * exp(-(model->BSIM4v7bvd + here->BSIM4v7vjdmRev) / Nvtmd); here->BSIM4v7IVjdmRev = DrainSatCurrent * (1.0 + T1); here->BSIM4v7DslpRev = -DrainSatCurrent * T1 / Nvtmd; break; default: printf("Specified dioMod = %d not matched\n", model->BSIM4v7dioMod); } } /* GEDL current reverse bias */ T0 = (TRatio - 1.0); model->BSIM4v7njtsstemp = model->BSIM4v7njts * (1.0 + model->BSIM4v7tnjts * T0); model->BSIM4v7njtsswstemp = model->BSIM4v7njtssw * (1.0 + model->BSIM4v7tnjtssw * T0); model->BSIM4v7njtsswgstemp = model->BSIM4v7njtsswg * (1.0 + model->BSIM4v7tnjtsswg * T0); model->BSIM4v7njtsdtemp = model->BSIM4v7njtsd * (1.0 + model->BSIM4v7tnjtsd * T0); model->BSIM4v7njtsswdtemp = model->BSIM4v7njtsswd * (1.0 + model->BSIM4v7tnjtsswd * T0); model->BSIM4v7njtsswgdtemp = model->BSIM4v7njtsswgd * (1.0 + model->BSIM4v7tnjtsswgd * T0); T7 = Eg0 / model->BSIM4v7vtm * T0; T9 = model->BSIM4v7xtss * T7; DEXP(T9, T1); T9 = model->BSIM4v7xtsd * T7; DEXP(T9, T2); T9 = model->BSIM4v7xtssws * T7; DEXP(T9, T3); T9 = model->BSIM4v7xtsswd * T7; DEXP(T9, T4); T9 = model->BSIM4v7xtsswgs * T7; DEXP(T9, T5); T9 = model->BSIM4v7xtsswgd * T7; DEXP(T9, T6); /*IBM TAT*/ if(model->BSIM4v7jtweff < 0.0) { model->BSIM4v7jtweff = 0.0; fprintf(stderr, "TAT width dependence effect is negative. Jtweff is clamped to zero.\n"); } T11 = sqrt(model->BSIM4v7jtweff / pParam->BSIM4v7weffCJ) + 1.0; T10 = pParam->BSIM4v7weffCJ * here->BSIM4v7nf; here->BSIM4v7SjctTempRevSatCur = T1 * here->BSIM4v7Aseff * model->BSIM4v7jtss; here->BSIM4v7DjctTempRevSatCur = T2 * here->BSIM4v7Adeff * model->BSIM4v7jtsd; here->BSIM4v7SswTempRevSatCur = T3 * here->BSIM4v7Pseff * model->BSIM4v7jtssws; here->BSIM4v7DswTempRevSatCur = T4 * here->BSIM4v7Pdeff * model->BSIM4v7jtsswd; here->BSIM4v7SswgTempRevSatCur = T5 * T10 * T11 * model->BSIM4v7jtsswgs; here->BSIM4v7DswgTempRevSatCur = T6 * T10 * T11 * model->BSIM4v7jtsswgd; /*high k*/ /*Calculate VgsteffVth for mobMod=3*/ if(model->BSIM4v7mobMod==3) { /*Calculate n @ Vbs=Vds=0*/ V0 = pParam->BSIM4v7vbi - pParam->BSIM4v7phi; lt1 = model->BSIM4v7factor1* pParam->BSIM4v7sqrtXdep0; ltw = lt1; T0 = pParam->BSIM4v7dvt1 * pParam->BSIM4v7leff / lt1; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; Theta0 = T1 / T4; } else Theta0 = 1.0 / (MAX_EXP - 2.0); tmp1 = epssub / pParam->BSIM4v7Xdep0; here->BSIM4v7nstar = model->BSIM4v7vtm / Charge_q * (model->BSIM4v7coxe + tmp1 + pParam->BSIM4v7cit); tmp2 = pParam->BSIM4v7nfactor * tmp1; tmp3 = (tmp2 + pParam->BSIM4v7cdsc * Theta0 + pParam->BSIM4v7cit) / model->BSIM4v7coxe; if (tmp3 >= -0.5) n0 = 1.0 + tmp3; else { T0 = 1.0 / (3.0 + 8.0 * tmp3); n0 = (1.0 + 3.0 * tmp3) * T0; } T0 = n0 * model->BSIM4v7vtm; T1 = pParam->BSIM4v7voffcbn; T2 = T1/T0; if (T2 < -EXP_THRESHOLD) { T3 = model->BSIM4v7coxe * MIN_EXP / pParam->BSIM4v7cdep0; T4 = pParam->BSIM4v7mstar + T3 * n0; } else if (T2 > EXP_THRESHOLD) { T3 = model->BSIM4v7coxe * MAX_EXP / pParam->BSIM4v7cdep0; T4 = pParam->BSIM4v7mstar + T3 * n0; } else { T3 = exp(T2)* model->BSIM4v7coxe / pParam->BSIM4v7cdep0; T4 = pParam->BSIM4v7mstar + T3 * n0; } pParam->BSIM4v7VgsteffVth = T0 * log(2.0)/T4; } /* New DITS term added in 4.7 */ T0 = -pParam->BSIM4v7dvtp3 * log(pParam->BSIM4v7leff); DEXP(T0, T1); pParam->BSIM4v7dvtp2factor = pParam->BSIM4v7dvtp5 + pParam->BSIM4v7dvtp2 * T1; if(model->BSIM4v7mtrlMod != 0 && model->BSIM4v7mtrlCompatMod == 0) { /* Calculate TOXP from EOT */ /* Calculate Vgs_eff @ Vgs = VDD with Poly Depletion Effect */ Vtm0eot = KboQ * model->BSIM4v7tempeot; Vtmeot = Vtm0eot; vbieot = Vtm0eot * log(pParam->BSIM4v7nsd * pParam->BSIM4v7ndep / (ni * ni)); phieot = Vtm0eot * log(pParam->BSIM4v7ndep / ni) + pParam->BSIM4v7phin + 0.4; tmp2 = here->BSIM4v7vfb + phieot; vddeot = model->BSIM4v7type * model->BSIM4v7vddeot; T0 = model->BSIM4v7epsrgate * EPS0; if ((pParam->BSIM4v7ngate > 1.0e18) && (pParam->BSIM4v7ngate < 1.0e25) && (vddeot > tmp2) && (T0!=0)) { T1 = 1.0e6 * CHARGE * T0 * pParam->BSIM4v7ngate / (model->BSIM4v7coxe * model->BSIM4v7coxe); T8 = vddeot - tmp2; T4 = sqrt(1.0 + 2.0 * T8 / T1); T2 = 2.0 * T8 / (T4 + 1.0); T3 = 0.5 * T2 * T2 / T1; T7 = 1.12 - T3 - 0.05; T6 = sqrt(T7 * T7 + 0.224); T5 = 1.12 - 0.5 * (T7 + T6); Vgs_eff = vddeot - T5; } else Vgs_eff = vddeot; /* Calculate Vth @ Vds=Vbs=0 */ V0 = vbieot - phieot; lt1 = model->BSIM4v7factor1* pParam->BSIM4v7sqrtXdep0; ltw = lt1; T0 = pParam->BSIM4v7dvt1 * model->BSIM4v7leffeot / lt1; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; Theta0 = T1 / T4; } else Theta0 = 1.0 / (MAX_EXP - 2.0); Delt_vth = pParam->BSIM4v7dvt0 * Theta0 * V0; T0 = pParam->BSIM4v7dvt1w * model->BSIM4v7weffeot * model->BSIM4v7leffeot / ltw; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; T5 = T1 / T4; } else T5 = 1.0 / (MAX_EXP - 2.0); /* 3.0 * MIN_EXP omitted */ T2 = pParam->BSIM4v7dvt0w * T5 * V0; TempRatioeot = model->BSIM4v7tempeot / model->BSIM4v7tnom - 1.0; T0 = sqrt(1.0 + pParam->BSIM4v7lpe0 / model->BSIM4v7leffeot); T1 = pParam->BSIM4v7k1ox * (T0 - 1.0) * sqrt(phieot) + (pParam->BSIM4v7kt1 + pParam->BSIM4v7kt1l / model->BSIM4v7leffeot) * TempRatioeot; Vth_NarrowW = toxe * phieot / (model->BSIM4v7weffeot + pParam->BSIM4v7w0); Lpe_Vb = sqrt(1.0 + pParam->BSIM4v7lpeb / model->BSIM4v7leffeot); Vth = model->BSIM4v7type * here->BSIM4v7vth0 + (pParam->BSIM4v7k1ox - pParam->BSIM4v7k1)*sqrt(phieot)*Lpe_Vb - Delt_vth - T2 + pParam->BSIM4v7k3 * Vth_NarrowW + T1; /* Calculate n */ tmp1 = epssub / pParam->BSIM4v7Xdep0; here->BSIM4v7nstar = Vtmeot / Charge_q * (model->BSIM4v7coxe + tmp1 + pParam->BSIM4v7cit); tmp2 = pParam->BSIM4v7nfactor * tmp1; tmp3 = (tmp2 + pParam->BSIM4v7cdsc * Theta0 + pParam->BSIM4v7cit) / model->BSIM4v7coxe; if (tmp3 >= -0.5) n = 1.0 + tmp3; else { T0 = 1.0 / (3.0 + 8.0 * tmp3); n = (1.0 + 3.0 * tmp3) * T0; } /* Vth correction for Pocket implant */ if (pParam->BSIM4v7dvtp0 > 0.0) { T3 = model->BSIM4v7leffeot + pParam->BSIM4v7dvtp0 * 2.0; if (model->BSIM4v7tempMod < 2) T4 = Vtmeot * log(model->BSIM4v7leffeot / T3); else T4 = Vtm0eot * log(model->BSIM4v7leffeot / T3); Vth -= n * T4; } Vgsteff = Vgs_eff-Vth; /* calculating Toxp */ T3 = model->BSIM4v7type * here->BSIM4v7vth0 - here->BSIM4v7vfb - phieot; T4 = T3 + T3; T5 = 2.5 * T3; vtfbphi2eot = 4.0 * T3; if (vtfbphi2eot < 0.0) vtfbphi2eot = 0.0; niter = 0; toxpf = toxe; do { toxpi = toxpf; tmp2 = 2.0e8 * toxpf; T0 = (Vgsteff + vtfbphi2eot) / tmp2; T1 = 1.0 + exp(model->BSIM4v7bdos * 0.7 * log(T0)); Tcen = model->BSIM4v7ados * 1.9e-9 / T1; toxpf = toxe - epsrox/model->BSIM4v7epsrsub * Tcen; niter++; } while ((niter<=4)&&(ABS(toxpf-toxpi)>1e-12)); model->BSIM4v7toxp = toxpf; model->BSIM4v7coxp = epsrox * EPS0 / model->BSIM4v7toxp; } if (BSIM4v7checkModel(model, here, ckt)) { SPfrontEnd->IFerrorf (ERR_FATAL, "Fatal error(s) detected during BSIM4v7.6.0 parameter checking for %s in model %s", model->BSIM4v7modName, here->BSIM4v7name); return(E_BADPARM); } } /* End instance */ } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v7/b4v7soachk.c0000644000175000017500000003647113546075722022610 0ustar carstencarsten/********** Copyright 2013 Dietmar Warning. All rights reserved. Author: 2013 Dietmar Warning **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4v7def.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/cpdefs.h" int BSIM4v7soaCheck(CKTcircuit *ckt, GENmodel *inModel) { BSIM4v7model *model = (BSIM4v7model *) inModel; BSIM4v7instance *here; double vgs, vgd, vgb, vds, vbs, vbd; /* actual mos voltages */ int maxwarns; static int warns_vgs = 0, warns_vgd = 0, warns_vgb = 0, warns_vds = 0, warns_vbs = 0, warns_vbd = 0; if (!ckt) { warns_vgs = 0; warns_vgd = 0; warns_vgb = 0; warns_vds = 0; warns_vbs = 0; warns_vbd = 0; return OK; } maxwarns = ckt->CKTsoaMaxWarns; for (; model; model = BSIM4v7nextModel(model)) { for (here = BSIM4v7instances(model); here; here = BSIM4v7nextInstance(here)) { vgs = ckt->CKTrhsOld [here->BSIM4v7gNodePrime] - ckt->CKTrhsOld [here->BSIM4v7sNodePrime]; vgd = ckt->CKTrhsOld [here->BSIM4v7gNodePrime] - ckt->CKTrhsOld [here->BSIM4v7dNodePrime]; vgb = ckt->CKTrhsOld [here->BSIM4v7gNodePrime] - ckt->CKTrhsOld [here->BSIM4v7bNodePrime]; vds = ckt->CKTrhsOld [here->BSIM4v7dNodePrime] - ckt->CKTrhsOld [here->BSIM4v7sNodePrime]; vbs = ckt->CKTrhsOld [here->BSIM4v7bNodePrime] - ckt->CKTrhsOld [here->BSIM4v7sNodePrime]; vbd = ckt->CKTrhsOld [here->BSIM4v7bNodePrime] - ckt->CKTrhsOld [here->BSIM4v7dNodePrime]; if (!model->BSIM4v7vgsrMaxGiven) { if (fabs(vgs) > model->BSIM4v7vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->BSIM4v7vgsMax); warns_vgs++; } if (!model->BSIM4v7vgbMaxGiven) { if (fabs(vgb) > model->BSIM4v7vgsMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgs_max=%g\n", vgb, model->BSIM4v7vgsMax); warns_vgb++; } } else { if (fabs(vgb) > model->BSIM4v7vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM4v7vgbMax); warns_vgb++; } } } else { if (model->BSIM4v7type > 0) { if (vgs > model->BSIM4v7vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->BSIM4v7vgsMax); warns_vgs++; } if (-1*vgs > model->BSIM4v7vgsrMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgsr_max=%g\n", vgs, model->BSIM4v7vgsrMax); warns_vgs++; } } else { if (vgs > model->BSIM4v7vgsrMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgsr_max=%g\n", vgs, model->BSIM4v7vgsrMax); warns_vgs++; } if (-1*vgs > model->BSIM4v7vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->BSIM4v7vgsMax); warns_vgs++; } } } if (!model->BSIM4v7vgdrMaxGiven) { if (fabs(vgd) > model->BSIM4v7vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->BSIM4v7vgdMax); warns_vgd++; } } else { if (model->BSIM4v7type > 0) { if (vgd > model->BSIM4v7vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->BSIM4v7vgdMax); warns_vgd++; } if (-1*vgd > model->BSIM4v7vgdrMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgdr_max=%g\n", vgd, model->BSIM4v7vgdrMax); warns_vgd++; } } else { if (vgd > model->BSIM4v7vgdrMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgdr_max=%g\n", vgd, model->BSIM4v7vgdrMax); warns_vgd++; } if (-1*vgd > model->BSIM4v7vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->BSIM4v7vgdMax); warns_vgd++; } } } if (fabs(vds) > model->BSIM4v7vdsMax) if (warns_vds < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vds=%g has exceeded Vds_max=%g\n", vds, model->BSIM4v7vdsMax); warns_vds++; } if (!model->BSIM4v7vgbrMaxGiven) { if (fabs(vgb) > model->BSIM4v7vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM4v7vgbMax); warns_vgb++; } } else { if (model->BSIM4v7type > 0) { if (vgb > model->BSIM4v7vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM4v7vgbMax); warns_vgb++; } if (-1*vgb > model->BSIM4v7vgbrMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgbr_max=%g\n", vgb, model->BSIM4v7vgbrMax); warns_vgb++; } } else { if (vgb > model->BSIM4v7vgbrMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgbr_max=%g\n", vgb, model->BSIM4v7vgbrMax); warns_vgb++; } if (-1*vgb > model->BSIM4v7vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM4v7vgbMax); warns_vgb++; } } } if (!model->BSIM4v7vbsrMaxGiven) { if (!model->BSIM4v7vbsMaxGiven) { if (fabs(vbs) > model->BSIM4v7vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->BSIM4v7vbdMax); warns_vbs++; } } else { if (fabs(vbs) > model->BSIM4v7vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->BSIM4v7vbsMax); warns_vbs++; } } } else { if (!model->BSIM4v7vbsMaxGiven) { if (model->BSIM4v7type > 0) { if (vbs > model->BSIM4v7vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->BSIM4v7vbdMax); warns_vbs++; } if (-1*vbs > model->BSIM4v7vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM4v7vbsrMax); warns_vbs++; } } else { if (vbs > model->BSIM4v7vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM4v7vbsrMax); warns_vbs++; } if (-1*vbs > model->BSIM4v7vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->BSIM4v7vbdMax); warns_vbs++; } } } else { if (model->BSIM4v7type > 0) { if (vbs > model->BSIM4v7vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->BSIM4v7vbsMax); warns_vbs++; } if (-1*vbs > model->BSIM4v7vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM4v7vbsrMax); warns_vbs++; } } else { if (vbs > model->BSIM4v7vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM4v7vbsrMax); warns_vbs++; } if (-1*vbs > model->BSIM4v7vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->BSIM4v7vbsMax); warns_vbs++; } } } } if (!model->BSIM4v7vbdrMaxGiven) { if (fabs(vbd) > model->BSIM4v7vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->BSIM4v7vbdMax); warns_vbd++; } } else { if (model->BSIM4v7type > 0) { if (vbd > model->BSIM4v7vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->BSIM4v7vbdMax); warns_vbd++; } if (-1*vbd > model->BSIM4v7vbdrMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbdr_max=%g\n", vbd, model->BSIM4v7vbdrMax); warns_vbd++; } } else { if (vbd > model->BSIM4v7vbdrMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbdr_max=%g\n", vbd, model->BSIM4v7vbdrMax); warns_vbd++; } if (-1*vbd > model->BSIM4v7vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->BSIM4v7vbdMax); warns_vbd++; } } } } } return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim4v7/b4v7mask.c0000644000175000017500000027646413546075722022303 0ustar carstencarsten/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4mask.c of BSIM4.7.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. * Modified by Mohan Dunga, 12/13/2006 * Modified by Mohan Dunga, Wenwei Yang, 07/31/2008. * Modified by Tanvir Morshed, Darsen Lu 03/27/2011 **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "bsim4v7def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4v7mAsk( CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { BSIM4v7model *model = (BSIM4v7model *)inst; NG_IGNORE(ckt); switch(which) { case BSIM4v7_MOD_MOBMOD : value->iValue = model->BSIM4v7mobMod; return(OK); case BSIM4v7_MOD_PARAMCHK : value->iValue = model->BSIM4v7paramChk; return(OK); case BSIM4v7_MOD_BINUNIT : value->iValue = model->BSIM4v7binUnit; return(OK); case BSIM4v7_MOD_CVCHARGEMOD : value->iValue = model->BSIM4v7cvchargeMod; return(OK); case BSIM4v7_MOD_CAPMOD : value->iValue = model->BSIM4v7capMod; return(OK); case BSIM4v7_MOD_DIOMOD : value->iValue = model->BSIM4v7dioMod; return(OK); case BSIM4v7_MOD_TRNQSMOD : value->iValue = model->BSIM4v7trnqsMod; return(OK); case BSIM4v7_MOD_ACNQSMOD : value->iValue = model->BSIM4v7acnqsMod; return(OK); case BSIM4v7_MOD_FNOIMOD : value->iValue = model->BSIM4v7fnoiMod; return(OK); case BSIM4v7_MOD_TNOIMOD : value->iValue = model->BSIM4v7tnoiMod; return(OK); case BSIM4v7_MOD_RDSMOD : value->iValue = model->BSIM4v7rdsMod; return(OK); case BSIM4v7_MOD_RBODYMOD : value->iValue = model->BSIM4v7rbodyMod; return(OK); case BSIM4v7_MOD_RGATEMOD : value->iValue = model->BSIM4v7rgateMod; return(OK); case BSIM4v7_MOD_PERMOD : value->iValue = model->BSIM4v7perMod; return(OK); case BSIM4v7_MOD_GEOMOD : value->iValue = model->BSIM4v7geoMod; return(OK); case BSIM4v7_MOD_RGEOMOD : value->iValue = model->BSIM4v7rgeoMod; return(OK); case BSIM4v7_MOD_MTRLMOD : value->iValue = model->BSIM4v7mtrlMod; return(OK); case BSIM4v7_MOD_GIDLMOD : /* v4.7 New GIDL/GISL*/ value->iValue = model->BSIM4v7gidlMod; return(OK); case BSIM4v7_MOD_MTRLCOMPATMOD : value->iValue = model->BSIM4v7mtrlCompatMod; return(OK); case BSIM4v7_MOD_IGCMOD : value->iValue = model->BSIM4v7igcMod; return(OK); case BSIM4v7_MOD_IGBMOD : value->iValue = model->BSIM4v7igbMod; return(OK); case BSIM4v7_MOD_TEMPMOD : value->iValue = model->BSIM4v7tempMod; return(OK); case BSIM4v7_MOD_VERSION : value->sValue = model->BSIM4v7version; return(OK); case BSIM4v7_MOD_TOXREF : value->rValue = model->BSIM4v7toxref; return(OK); case BSIM4v7_MOD_EOT : value->rValue = model->BSIM4v7eot; return(OK); case BSIM4v7_MOD_VDDEOT : value->rValue = model->BSIM4v7vddeot; return(OK); case BSIM4v7_MOD_TEMPEOT : value->rValue = model->BSIM4v7tempeot; return(OK); case BSIM4v7_MOD_LEFFEOT : value->rValue = model->BSIM4v7leffeot; return(OK); case BSIM4v7_MOD_WEFFEOT : value->rValue = model->BSIM4v7weffeot; return(OK); case BSIM4v7_MOD_ADOS : value->rValue = model->BSIM4v7ados; return(OK); case BSIM4v7_MOD_BDOS : value->rValue = model->BSIM4v7bdos; return(OK); case BSIM4v7_MOD_TOXE : value->rValue = model->BSIM4v7toxe; return(OK); case BSIM4v7_MOD_TOXP : value->rValue = model->BSIM4v7toxp; return(OK); case BSIM4v7_MOD_TOXM : value->rValue = model->BSIM4v7toxm; return(OK); case BSIM4v7_MOD_DTOX : value->rValue = model->BSIM4v7dtox; return(OK); case BSIM4v7_MOD_EPSROX : value->rValue = model->BSIM4v7epsrox; return(OK); case BSIM4v7_MOD_CDSC : value->rValue = model->BSIM4v7cdsc; return(OK); case BSIM4v7_MOD_CDSCB : value->rValue = model->BSIM4v7cdscb; return(OK); case BSIM4v7_MOD_CDSCD : value->rValue = model->BSIM4v7cdscd; return(OK); case BSIM4v7_MOD_CIT : value->rValue = model->BSIM4v7cit; return(OK); case BSIM4v7_MOD_NFACTOR : value->rValue = model->BSIM4v7nfactor; return(OK); case BSIM4v7_MOD_XJ: value->rValue = model->BSIM4v7xj; return(OK); case BSIM4v7_MOD_VSAT: value->rValue = model->BSIM4v7vsat; return(OK); case BSIM4v7_MOD_VTL: value->rValue = model->BSIM4v7vtl; return(OK); case BSIM4v7_MOD_XN: value->rValue = model->BSIM4v7xn; return(OK); case BSIM4v7_MOD_LC: value->rValue = model->BSIM4v7lc; return(OK); case BSIM4v7_MOD_LAMBDA: value->rValue = model->BSIM4v7lambda; return(OK); case BSIM4v7_MOD_AT: value->rValue = model->BSIM4v7at; return(OK); case BSIM4v7_MOD_A0: value->rValue = model->BSIM4v7a0; return(OK); case BSIM4v7_MOD_AGS: value->rValue = model->BSIM4v7ags; return(OK); case BSIM4v7_MOD_A1: value->rValue = model->BSIM4v7a1; return(OK); case BSIM4v7_MOD_A2: value->rValue = model->BSIM4v7a2; return(OK); case BSIM4v7_MOD_KETA: value->rValue = model->BSIM4v7keta; return(OK); case BSIM4v7_MOD_NSUB: value->rValue = model->BSIM4v7nsub; return(OK); case BSIM4v7_MOD_PHIG: value->rValue = model->BSIM4v7phig; return(OK); case BSIM4v7_MOD_EPSRGATE: value->rValue = model->BSIM4v7epsrgate; return(OK); case BSIM4v7_MOD_EASUB: value->rValue = model->BSIM4v7easub; return(OK); case BSIM4v7_MOD_EPSRSUB: value->rValue = model->BSIM4v7epsrsub; return(OK); case BSIM4v7_MOD_NI0SUB: value->rValue = model->BSIM4v7ni0sub; return(OK); case BSIM4v7_MOD_BG0SUB: value->rValue = model->BSIM4v7bg0sub; return(OK); case BSIM4v7_MOD_TBGASUB: value->rValue = model->BSIM4v7tbgasub; return(OK); case BSIM4v7_MOD_TBGBSUB: value->rValue = model->BSIM4v7tbgbsub; return(OK); case BSIM4v7_MOD_NDEP: value->rValue = model->BSIM4v7ndep; return(OK); case BSIM4v7_MOD_NSD: value->rValue = model->BSIM4v7nsd; return(OK); case BSIM4v7_MOD_NGATE: value->rValue = model->BSIM4v7ngate; return(OK); case BSIM4v7_MOD_GAMMA1: value->rValue = model->BSIM4v7gamma1; return(OK); case BSIM4v7_MOD_GAMMA2: value->rValue = model->BSIM4v7gamma2; return(OK); case BSIM4v7_MOD_VBX: value->rValue = model->BSIM4v7vbx; return(OK); case BSIM4v7_MOD_VBM: value->rValue = model->BSIM4v7vbm; return(OK); case BSIM4v7_MOD_XT: value->rValue = model->BSIM4v7xt; return(OK); case BSIM4v7_MOD_K1: value->rValue = model->BSIM4v7k1; return(OK); case BSIM4v7_MOD_KT1: value->rValue = model->BSIM4v7kt1; return(OK); case BSIM4v7_MOD_KT1L: value->rValue = model->BSIM4v7kt1l; return(OK); case BSIM4v7_MOD_KT2 : value->rValue = model->BSIM4v7kt2; return(OK); case BSIM4v7_MOD_K2 : value->rValue = model->BSIM4v7k2; return(OK); case BSIM4v7_MOD_K3: value->rValue = model->BSIM4v7k3; return(OK); case BSIM4v7_MOD_K3B: value->rValue = model->BSIM4v7k3b; return(OK); case BSIM4v7_MOD_W0: value->rValue = model->BSIM4v7w0; return(OK); case BSIM4v7_MOD_LPE0: value->rValue = model->BSIM4v7lpe0; return(OK); case BSIM4v7_MOD_LPEB: value->rValue = model->BSIM4v7lpeb; return(OK); case BSIM4v7_MOD_DVTP0: value->rValue = model->BSIM4v7dvtp0; return(OK); case BSIM4v7_MOD_DVTP1: value->rValue = model->BSIM4v7dvtp1; return(OK); case BSIM4v7_MOD_DVTP2: value->rValue = model->BSIM4v7dvtp2; /* New DIBL/Rout */ return(OK); case BSIM4v7_MOD_DVTP3: value->rValue = model->BSIM4v7dvtp3; return(OK); case BSIM4v7_MOD_DVTP4: value->rValue = model->BSIM4v7dvtp4; return(OK); case BSIM4v7_MOD_DVTP5: value->rValue = model->BSIM4v7dvtp5; return(OK); case BSIM4v7_MOD_DVT0 : value->rValue = model->BSIM4v7dvt0; return(OK); case BSIM4v7_MOD_DVT1 : value->rValue = model->BSIM4v7dvt1; return(OK); case BSIM4v7_MOD_DVT2 : value->rValue = model->BSIM4v7dvt2; return(OK); case BSIM4v7_MOD_DVT0W : value->rValue = model->BSIM4v7dvt0w; return(OK); case BSIM4v7_MOD_DVT1W : value->rValue = model->BSIM4v7dvt1w; return(OK); case BSIM4v7_MOD_DVT2W : value->rValue = model->BSIM4v7dvt2w; return(OK); case BSIM4v7_MOD_DROUT : value->rValue = model->BSIM4v7drout; return(OK); case BSIM4v7_MOD_DSUB : value->rValue = model->BSIM4v7dsub; return(OK); case BSIM4v7_MOD_VTH0: value->rValue = model->BSIM4v7vth0; return(OK); case BSIM4v7_MOD_EU: value->rValue = model->BSIM4v7eu; return(OK); case BSIM4v7_MOD_UCS: value->rValue = model->BSIM4v7ucs; return(OK); case BSIM4v7_MOD_UA: value->rValue = model->BSIM4v7ua; return(OK); case BSIM4v7_MOD_UA1: value->rValue = model->BSIM4v7ua1; return(OK); case BSIM4v7_MOD_UB: value->rValue = model->BSIM4v7ub; return(OK); case BSIM4v7_MOD_UB1: value->rValue = model->BSIM4v7ub1; return(OK); case BSIM4v7_MOD_UC: value->rValue = model->BSIM4v7uc; return(OK); case BSIM4v7_MOD_UC1: value->rValue = model->BSIM4v7uc1; return(OK); case BSIM4v7_MOD_UD: value->rValue = model->BSIM4v7ud; return(OK); case BSIM4v7_MOD_UD1: value->rValue = model->BSIM4v7ud1; return(OK); case BSIM4v7_MOD_UP: value->rValue = model->BSIM4v7up; return(OK); case BSIM4v7_MOD_LP: value->rValue = model->BSIM4v7lp; return(OK); case BSIM4v7_MOD_U0: value->rValue = model->BSIM4v7u0; return(OK); case BSIM4v7_MOD_UTE: value->rValue = model->BSIM4v7ute; return(OK); case BSIM4v7_MOD_UCSTE: value->rValue = model->BSIM4v7ucste; return(OK); case BSIM4v7_MOD_VOFF: value->rValue = model->BSIM4v7voff; return(OK); case BSIM4v7_MOD_TVOFF: value->rValue = model->BSIM4v7tvoff; return(OK); case BSIM4v7_MOD_TNFACTOR: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4v7tnfactor; return(OK); case BSIM4v7_MOD_TETA0: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4v7teta0; return(OK); case BSIM4v7_MOD_TVOFFCV: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4v7tvoffcv; return(OK); case BSIM4v7_MOD_VFBSDOFF: value->rValue = model->BSIM4v7vfbsdoff; return(OK); case BSIM4v7_MOD_TVFBSDOFF: value->rValue = model->BSIM4v7tvfbsdoff; return(OK); case BSIM4v7_MOD_VOFFL: value->rValue = model->BSIM4v7voffl; return(OK); case BSIM4v7_MOD_VOFFCVL: value->rValue = model->BSIM4v7voffcvl; return(OK); case BSIM4v7_MOD_MINV: value->rValue = model->BSIM4v7minv; return(OK); case BSIM4v7_MOD_MINVCV: value->rValue = model->BSIM4v7minvcv; return(OK); case BSIM4v7_MOD_FPROUT: value->rValue = model->BSIM4v7fprout; return(OK); case BSIM4v7_MOD_PDITS: value->rValue = model->BSIM4v7pdits; return(OK); case BSIM4v7_MOD_PDITSD: value->rValue = model->BSIM4v7pditsd; return(OK); case BSIM4v7_MOD_PDITSL: value->rValue = model->BSIM4v7pditsl; return(OK); case BSIM4v7_MOD_DELTA: value->rValue = model->BSIM4v7delta; return(OK); case BSIM4v7_MOD_RDSW: value->rValue = model->BSIM4v7rdsw; return(OK); case BSIM4v7_MOD_RDSWMIN: value->rValue = model->BSIM4v7rdswmin; return(OK); case BSIM4v7_MOD_RDWMIN: value->rValue = model->BSIM4v7rdwmin; return(OK); case BSIM4v7_MOD_RSWMIN: value->rValue = model->BSIM4v7rswmin; return(OK); case BSIM4v7_MOD_RDW: value->rValue = model->BSIM4v7rdw; return(OK); case BSIM4v7_MOD_RSW: value->rValue = model->BSIM4v7rsw; return(OK); case BSIM4v7_MOD_PRWG: value->rValue = model->BSIM4v7prwg; return(OK); case BSIM4v7_MOD_PRWB: value->rValue = model->BSIM4v7prwb; return(OK); case BSIM4v7_MOD_PRT: value->rValue = model->BSIM4v7prt; return(OK); case BSIM4v7_MOD_ETA0: value->rValue = model->BSIM4v7eta0; return(OK); case BSIM4v7_MOD_ETAB: value->rValue = model->BSIM4v7etab; return(OK); case BSIM4v7_MOD_PCLM: value->rValue = model->BSIM4v7pclm; return(OK); case BSIM4v7_MOD_PDIBL1: value->rValue = model->BSIM4v7pdibl1; return(OK); case BSIM4v7_MOD_PDIBL2: value->rValue = model->BSIM4v7pdibl2; return(OK); case BSIM4v7_MOD_PDIBLB: value->rValue = model->BSIM4v7pdiblb; return(OK); case BSIM4v7_MOD_PSCBE1: value->rValue = model->BSIM4v7pscbe1; return(OK); case BSIM4v7_MOD_PSCBE2: value->rValue = model->BSIM4v7pscbe2; return(OK); case BSIM4v7_MOD_PVAG: value->rValue = model->BSIM4v7pvag; return(OK); case BSIM4v7_MOD_WR: value->rValue = model->BSIM4v7wr; return(OK); case BSIM4v7_MOD_DWG: value->rValue = model->BSIM4v7dwg; return(OK); case BSIM4v7_MOD_DWB: value->rValue = model->BSIM4v7dwb; return(OK); case BSIM4v7_MOD_B0: value->rValue = model->BSIM4v7b0; return(OK); case BSIM4v7_MOD_B1: value->rValue = model->BSIM4v7b1; return(OK); case BSIM4v7_MOD_ALPHA0: value->rValue = model->BSIM4v7alpha0; return(OK); case BSIM4v7_MOD_ALPHA1: value->rValue = model->BSIM4v7alpha1; return(OK); case BSIM4v7_MOD_BETA0: value->rValue = model->BSIM4v7beta0; return(OK); case BSIM4v7_MOD_AGIDL: value->rValue = model->BSIM4v7agidl; return(OK); case BSIM4v7_MOD_BGIDL: value->rValue = model->BSIM4v7bgidl; return(OK); case BSIM4v7_MOD_CGIDL: value->rValue = model->BSIM4v7cgidl; return(OK); case BSIM4v7_MOD_EGIDL: value->rValue = model->BSIM4v7egidl; return(OK); case BSIM4v7_MOD_FGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7fgidl; return(OK); case BSIM4v7_MOD_KGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7kgidl; return(OK); case BSIM4v7_MOD_RGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7rgidl; return(OK); case BSIM4v7_MOD_AGISL: value->rValue = model->BSIM4v7agisl; return(OK); case BSIM4v7_MOD_BGISL: value->rValue = model->BSIM4v7bgisl; return(OK); case BSIM4v7_MOD_CGISL: value->rValue = model->BSIM4v7cgisl; return(OK); case BSIM4v7_MOD_EGISL: value->rValue = model->BSIM4v7egisl; return(OK); case BSIM4v7_MOD_FGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7fgisl; return(OK); case BSIM4v7_MOD_KGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7kgisl; return(OK); case BSIM4v7_MOD_RGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7rgisl; return(OK); case BSIM4v7_MOD_AIGC: value->rValue = model->BSIM4v7aigc; return(OK); case BSIM4v7_MOD_BIGC: value->rValue = model->BSIM4v7bigc; return(OK); case BSIM4v7_MOD_CIGC: value->rValue = model->BSIM4v7cigc; return(OK); case BSIM4v7_MOD_AIGSD: value->rValue = model->BSIM4v7aigsd; return(OK); case BSIM4v7_MOD_BIGSD: value->rValue = model->BSIM4v7bigsd; return(OK); case BSIM4v7_MOD_CIGSD: value->rValue = model->BSIM4v7cigsd; return(OK); case BSIM4v7_MOD_AIGS: value->rValue = model->BSIM4v7aigs; return(OK); case BSIM4v7_MOD_BIGS: value->rValue = model->BSIM4v7bigs; return(OK); case BSIM4v7_MOD_CIGS: value->rValue = model->BSIM4v7cigs; return(OK); case BSIM4v7_MOD_AIGD: value->rValue = model->BSIM4v7aigd; return(OK); case BSIM4v7_MOD_BIGD: value->rValue = model->BSIM4v7bigd; return(OK); case BSIM4v7_MOD_CIGD: value->rValue = model->BSIM4v7cigd; return(OK); case BSIM4v7_MOD_AIGBACC: value->rValue = model->BSIM4v7aigbacc; return(OK); case BSIM4v7_MOD_BIGBACC: value->rValue = model->BSIM4v7bigbacc; return(OK); case BSIM4v7_MOD_CIGBACC: value->rValue = model->BSIM4v7cigbacc; return(OK); case BSIM4v7_MOD_AIGBINV: value->rValue = model->BSIM4v7aigbinv; return(OK); case BSIM4v7_MOD_BIGBINV: value->rValue = model->BSIM4v7bigbinv; return(OK); case BSIM4v7_MOD_CIGBINV: value->rValue = model->BSIM4v7cigbinv; return(OK); case BSIM4v7_MOD_NIGC: value->rValue = model->BSIM4v7nigc; return(OK); case BSIM4v7_MOD_NIGBACC: value->rValue = model->BSIM4v7nigbacc; return(OK); case BSIM4v7_MOD_NIGBINV: value->rValue = model->BSIM4v7nigbinv; return(OK); case BSIM4v7_MOD_NTOX: value->rValue = model->BSIM4v7ntox; return(OK); case BSIM4v7_MOD_EIGBINV: value->rValue = model->BSIM4v7eigbinv; return(OK); case BSIM4v7_MOD_PIGCD: value->rValue = model->BSIM4v7pigcd; return(OK); case BSIM4v7_MOD_POXEDGE: value->rValue = model->BSIM4v7poxedge; return(OK); case BSIM4v7_MOD_PHIN: value->rValue = model->BSIM4v7phin; return(OK); case BSIM4v7_MOD_XRCRG1: value->rValue = model->BSIM4v7xrcrg1; return(OK); case BSIM4v7_MOD_XRCRG2: value->rValue = model->BSIM4v7xrcrg2; return(OK); case BSIM4v7_MOD_TNOIA: value->rValue = model->BSIM4v7tnoia; return(OK); case BSIM4v7_MOD_TNOIB: value->rValue = model->BSIM4v7tnoib; return(OK); case BSIM4v7_MOD_TNOIC: value->rValue = model->BSIM4v7tnoic; return(OK); case BSIM4v7_MOD_RNOIA: value->rValue = model->BSIM4v7rnoia; return(OK); case BSIM4v7_MOD_RNOIB: value->rValue = model->BSIM4v7rnoib; return(OK); case BSIM4v7_MOD_RNOIC: value->rValue = model->BSIM4v7rnoic; return(OK); case BSIM4v7_MOD_NTNOI: value->rValue = model->BSIM4v7ntnoi; return(OK); case BSIM4v7_MOD_IJTHDFWD: value->rValue = model->BSIM4v7ijthdfwd; return(OK); case BSIM4v7_MOD_IJTHSFWD: value->rValue = model->BSIM4v7ijthsfwd; return(OK); case BSIM4v7_MOD_IJTHDREV: value->rValue = model->BSIM4v7ijthdrev; return(OK); case BSIM4v7_MOD_IJTHSREV: value->rValue = model->BSIM4v7ijthsrev; return(OK); case BSIM4v7_MOD_XJBVD: value->rValue = model->BSIM4v7xjbvd; return(OK); case BSIM4v7_MOD_XJBVS: value->rValue = model->BSIM4v7xjbvs; return(OK); case BSIM4v7_MOD_BVD: value->rValue = model->BSIM4v7bvd; return(OK); case BSIM4v7_MOD_BVS: value->rValue = model->BSIM4v7bvs; return(OK); case BSIM4v7_MOD_VFB: value->rValue = model->BSIM4v7vfb; return(OK); case BSIM4v7_MOD_JTSS: value->rValue = model->BSIM4v7jtss; return(OK); case BSIM4v7_MOD_JTSD: value->rValue = model->BSIM4v7jtsd; return(OK); case BSIM4v7_MOD_JTSSWS: value->rValue = model->BSIM4v7jtssws; return(OK); case BSIM4v7_MOD_JTSSWD: value->rValue = model->BSIM4v7jtsswd; return(OK); case BSIM4v7_MOD_JTSSWGS: value->rValue = model->BSIM4v7jtsswgs; return(OK); case BSIM4v7_MOD_JTSSWGD: value->rValue = model->BSIM4v7jtsswgd; return(OK); case BSIM4v7_MOD_JTWEFF: value->rValue = model->BSIM4v7jtweff; return(OK); case BSIM4v7_MOD_NJTS: value->rValue = model->BSIM4v7njts; return(OK); case BSIM4v7_MOD_NJTSSW: value->rValue = model->BSIM4v7njtssw; return(OK); case BSIM4v7_MOD_NJTSSWG: value->rValue = model->BSIM4v7njtsswg; return(OK); case BSIM4v7_MOD_NJTSD: value->rValue = model->BSIM4v7njtsd; return(OK); case BSIM4v7_MOD_NJTSSWD: value->rValue = model->BSIM4v7njtsswd; return(OK); case BSIM4v7_MOD_NJTSSWGD: value->rValue = model->BSIM4v7njtsswgd; return(OK); case BSIM4v7_MOD_XTSS: value->rValue = model->BSIM4v7xtss; return(OK); case BSIM4v7_MOD_XTSD: value->rValue = model->BSIM4v7xtsd; return(OK); case BSIM4v7_MOD_XTSSWS: value->rValue = model->BSIM4v7xtssws; return(OK); case BSIM4v7_MOD_XTSSWD: value->rValue = model->BSIM4v7xtsswd; return(OK); case BSIM4v7_MOD_XTSSWGS: value->rValue = model->BSIM4v7xtsswgs; return(OK); case BSIM4v7_MOD_XTSSWGD: value->rValue = model->BSIM4v7xtsswgd; return(OK); case BSIM4v7_MOD_TNJTS: value->rValue = model->BSIM4v7tnjts; return(OK); case BSIM4v7_MOD_TNJTSSW: value->rValue = model->BSIM4v7tnjtssw; return(OK); case BSIM4v7_MOD_TNJTSSWG: value->rValue = model->BSIM4v7tnjtsswg; return(OK); case BSIM4v7_MOD_TNJTSD: value->rValue = model->BSIM4v7tnjtsd; return(OK); case BSIM4v7_MOD_TNJTSSWD: value->rValue = model->BSIM4v7tnjtsswd; return(OK); case BSIM4v7_MOD_TNJTSSWGD: value->rValue = model->BSIM4v7tnjtsswgd; return(OK); case BSIM4v7_MOD_VTSS: value->rValue = model->BSIM4v7vtss; return(OK); case BSIM4v7_MOD_VTSD: value->rValue = model->BSIM4v7vtsd; return(OK); case BSIM4v7_MOD_VTSSWS: value->rValue = model->BSIM4v7vtssws; return(OK); case BSIM4v7_MOD_VTSSWD: value->rValue = model->BSIM4v7vtsswd; return(OK); case BSIM4v7_MOD_VTSSWGS: value->rValue = model->BSIM4v7vtsswgs; return(OK); case BSIM4v7_MOD_VTSSWGD: value->rValue = model->BSIM4v7vtsswgd; return(OK); case BSIM4v7_MOD_GBMIN: value->rValue = model->BSIM4v7gbmin; return(OK); case BSIM4v7_MOD_RBDB: value->rValue = model->BSIM4v7rbdb; return(OK); case BSIM4v7_MOD_RBPB: value->rValue = model->BSIM4v7rbpb; return(OK); case BSIM4v7_MOD_RBSB: value->rValue = model->BSIM4v7rbsb; return(OK); case BSIM4v7_MOD_RBPS: value->rValue = model->BSIM4v7rbps; return(OK); case BSIM4v7_MOD_RBPD: value->rValue = model->BSIM4v7rbpd; return(OK); case BSIM4v7_MOD_RBPS0: value->rValue = model->BSIM4v7rbps0; return(OK); case BSIM4v7_MOD_RBPSL: value->rValue = model->BSIM4v7rbpsl; return(OK); case BSIM4v7_MOD_RBPSW: value->rValue = model->BSIM4v7rbpsw; return(OK); case BSIM4v7_MOD_RBPSNF: value->rValue = model->BSIM4v7rbpsnf; return(OK); case BSIM4v7_MOD_RBPD0: value->rValue = model->BSIM4v7rbpd0; return(OK); case BSIM4v7_MOD_RBPDL: value->rValue = model->BSIM4v7rbpdl; return(OK); case BSIM4v7_MOD_RBPDW: value->rValue = model->BSIM4v7rbpdw; return(OK); case BSIM4v7_MOD_RBPDNF: value->rValue = model->BSIM4v7rbpdnf; return(OK); case BSIM4v7_MOD_RBPBX0: value->rValue = model->BSIM4v7rbpbx0; return(OK); case BSIM4v7_MOD_RBPBXL: value->rValue = model->BSIM4v7rbpbxl; return(OK); case BSIM4v7_MOD_RBPBXW: value->rValue = model->BSIM4v7rbpbxw; return(OK); case BSIM4v7_MOD_RBPBXNF: value->rValue = model->BSIM4v7rbpbxnf; return(OK); case BSIM4v7_MOD_RBPBY0: value->rValue = model->BSIM4v7rbpby0; return(OK); case BSIM4v7_MOD_RBPBYL: value->rValue = model->BSIM4v7rbpbyl; return(OK); case BSIM4v7_MOD_RBPBYW: value->rValue = model->BSIM4v7rbpbyw; return(OK); case BSIM4v7_MOD_RBPBYNF: value->rValue = model->BSIM4v7rbpbynf; return(OK); case BSIM4v7_MOD_RBSBX0: value->rValue = model->BSIM4v7rbsbx0; return(OK); case BSIM4v7_MOD_RBSBY0: value->rValue = model->BSIM4v7rbsby0; return(OK); case BSIM4v7_MOD_RBDBX0: value->rValue = model->BSIM4v7rbdbx0; return(OK); case BSIM4v7_MOD_RBDBY0: value->rValue = model->BSIM4v7rbdby0; return(OK); case BSIM4v7_MOD_RBSDBXL: value->rValue = model->BSIM4v7rbsdbxl; return(OK); case BSIM4v7_MOD_RBSDBXW: value->rValue = model->BSIM4v7rbsdbxw; return(OK); case BSIM4v7_MOD_RBSDBXNF: value->rValue = model->BSIM4v7rbsdbxnf; return(OK); case BSIM4v7_MOD_RBSDBYL: value->rValue = model->BSIM4v7rbsdbyl; return(OK); case BSIM4v7_MOD_RBSDBYW: value->rValue = model->BSIM4v7rbsdbyw; return(OK); case BSIM4v7_MOD_RBSDBYNF: value->rValue = model->BSIM4v7rbsdbynf; return(OK); case BSIM4v7_MOD_CGSL: value->rValue = model->BSIM4v7cgsl; return(OK); case BSIM4v7_MOD_CGDL: value->rValue = model->BSIM4v7cgdl; return(OK); case BSIM4v7_MOD_CKAPPAS: value->rValue = model->BSIM4v7ckappas; return(OK); case BSIM4v7_MOD_CKAPPAD: value->rValue = model->BSIM4v7ckappad; return(OK); case BSIM4v7_MOD_CF: value->rValue = model->BSIM4v7cf; return(OK); case BSIM4v7_MOD_CLC: value->rValue = model->BSIM4v7clc; return(OK); case BSIM4v7_MOD_CLE: value->rValue = model->BSIM4v7cle; return(OK); case BSIM4v7_MOD_DWC: value->rValue = model->BSIM4v7dwc; return(OK); case BSIM4v7_MOD_DLC: value->rValue = model->BSIM4v7dlc; return(OK); case BSIM4v7_MOD_XW: value->rValue = model->BSIM4v7xw; return(OK); case BSIM4v7_MOD_XL: value->rValue = model->BSIM4v7xl; return(OK); case BSIM4v7_MOD_DLCIG: value->rValue = model->BSIM4v7dlcig; return(OK); case BSIM4v7_MOD_DLCIGD: value->rValue = model->BSIM4v7dlcigd; return(OK); case BSIM4v7_MOD_DWJ: value->rValue = model->BSIM4v7dwj; return(OK); case BSIM4v7_MOD_VFBCV: value->rValue = model->BSIM4v7vfbcv; return(OK); case BSIM4v7_MOD_ACDE: value->rValue = model->BSIM4v7acde; return(OK); case BSIM4v7_MOD_MOIN: value->rValue = model->BSIM4v7moin; return(OK); case BSIM4v7_MOD_NOFF: value->rValue = model->BSIM4v7noff; return(OK); case BSIM4v7_MOD_VOFFCV: value->rValue = model->BSIM4v7voffcv; return(OK); case BSIM4v7_MOD_DMCG: value->rValue = model->BSIM4v7dmcg; return(OK); case BSIM4v7_MOD_DMCI: value->rValue = model->BSIM4v7dmci; return(OK); case BSIM4v7_MOD_DMDG: value->rValue = model->BSIM4v7dmdg; return(OK); case BSIM4v7_MOD_DMCGT: value->rValue = model->BSIM4v7dmcgt; return(OK); case BSIM4v7_MOD_XGW: value->rValue = model->BSIM4v7xgw; return(OK); case BSIM4v7_MOD_XGL: value->rValue = model->BSIM4v7xgl; return(OK); case BSIM4v7_MOD_RSHG: value->rValue = model->BSIM4v7rshg; return(OK); case BSIM4v7_MOD_NGCON: value->rValue = model->BSIM4v7ngcon; return(OK); case BSIM4v7_MOD_TCJ: value->rValue = model->BSIM4v7tcj; return(OK); case BSIM4v7_MOD_TPB: value->rValue = model->BSIM4v7tpb; return(OK); case BSIM4v7_MOD_TCJSW: value->rValue = model->BSIM4v7tcjsw; return(OK); case BSIM4v7_MOD_TPBSW: value->rValue = model->BSIM4v7tpbsw; return(OK); case BSIM4v7_MOD_TCJSWG: value->rValue = model->BSIM4v7tcjswg; return(OK); case BSIM4v7_MOD_TPBSWG: value->rValue = model->BSIM4v7tpbswg; return(OK); /* Length dependence */ case BSIM4v7_MOD_LCDSC : value->rValue = model->BSIM4v7lcdsc; return(OK); case BSIM4v7_MOD_LCDSCB : value->rValue = model->BSIM4v7lcdscb; return(OK); case BSIM4v7_MOD_LCDSCD : value->rValue = model->BSIM4v7lcdscd; return(OK); case BSIM4v7_MOD_LCIT : value->rValue = model->BSIM4v7lcit; return(OK); case BSIM4v7_MOD_LNFACTOR : value->rValue = model->BSIM4v7lnfactor; return(OK); case BSIM4v7_MOD_LXJ: value->rValue = model->BSIM4v7lxj; return(OK); case BSIM4v7_MOD_LVSAT: value->rValue = model->BSIM4v7lvsat; return(OK); case BSIM4v7_MOD_LAT: value->rValue = model->BSIM4v7lat; return(OK); case BSIM4v7_MOD_LA0: value->rValue = model->BSIM4v7la0; return(OK); case BSIM4v7_MOD_LAGS: value->rValue = model->BSIM4v7lags; return(OK); case BSIM4v7_MOD_LA1: value->rValue = model->BSIM4v7la1; return(OK); case BSIM4v7_MOD_LA2: value->rValue = model->BSIM4v7la2; return(OK); case BSIM4v7_MOD_LKETA: value->rValue = model->BSIM4v7lketa; return(OK); case BSIM4v7_MOD_LNSUB: value->rValue = model->BSIM4v7lnsub; return(OK); case BSIM4v7_MOD_LNDEP: value->rValue = model->BSIM4v7lndep; return(OK); case BSIM4v7_MOD_LNSD: value->rValue = model->BSIM4v7lnsd; return(OK); case BSIM4v7_MOD_LNGATE: value->rValue = model->BSIM4v7lngate; return(OK); case BSIM4v7_MOD_LGAMMA1: value->rValue = model->BSIM4v7lgamma1; return(OK); case BSIM4v7_MOD_LGAMMA2: value->rValue = model->BSIM4v7lgamma2; return(OK); case BSIM4v7_MOD_LVBX: value->rValue = model->BSIM4v7lvbx; return(OK); case BSIM4v7_MOD_LVBM: value->rValue = model->BSIM4v7lvbm; return(OK); case BSIM4v7_MOD_LXT: value->rValue = model->BSIM4v7lxt; return(OK); case BSIM4v7_MOD_LK1: value->rValue = model->BSIM4v7lk1; return(OK); case BSIM4v7_MOD_LKT1: value->rValue = model->BSIM4v7lkt1; return(OK); case BSIM4v7_MOD_LKT1L: value->rValue = model->BSIM4v7lkt1l; return(OK); case BSIM4v7_MOD_LKT2 : value->rValue = model->BSIM4v7lkt2; return(OK); case BSIM4v7_MOD_LK2 : value->rValue = model->BSIM4v7lk2; return(OK); case BSIM4v7_MOD_LK3: value->rValue = model->BSIM4v7lk3; return(OK); case BSIM4v7_MOD_LK3B: value->rValue = model->BSIM4v7lk3b; return(OK); case BSIM4v7_MOD_LW0: value->rValue = model->BSIM4v7lw0; return(OK); case BSIM4v7_MOD_LLPE0: value->rValue = model->BSIM4v7llpe0; return(OK); case BSIM4v7_MOD_LLPEB: value->rValue = model->BSIM4v7llpeb; return(OK); case BSIM4v7_MOD_LDVTP0: value->rValue = model->BSIM4v7ldvtp0; return(OK); case BSIM4v7_MOD_LDVTP1: value->rValue = model->BSIM4v7ldvtp1; return(OK); case BSIM4v7_MOD_LDVTP2: value->rValue = model->BSIM4v7ldvtp2; /* New DIBL/Rout */ return(OK); case BSIM4v7_MOD_LDVTP3: value->rValue = model->BSIM4v7ldvtp3; return(OK); case BSIM4v7_MOD_LDVTP4: value->rValue = model->BSIM4v7ldvtp4; return(OK); case BSIM4v7_MOD_LDVTP5: value->rValue = model->BSIM4v7ldvtp5; return(OK); case BSIM4v7_MOD_LDVT0: value->rValue = model->BSIM4v7ldvt0; return(OK); case BSIM4v7_MOD_LDVT1 : value->rValue = model->BSIM4v7ldvt1; return(OK); case BSIM4v7_MOD_LDVT2 : value->rValue = model->BSIM4v7ldvt2; return(OK); case BSIM4v7_MOD_LDVT0W : value->rValue = model->BSIM4v7ldvt0w; return(OK); case BSIM4v7_MOD_LDVT1W : value->rValue = model->BSIM4v7ldvt1w; return(OK); case BSIM4v7_MOD_LDVT2W : value->rValue = model->BSIM4v7ldvt2w; return(OK); case BSIM4v7_MOD_LDROUT : value->rValue = model->BSIM4v7ldrout; return(OK); case BSIM4v7_MOD_LDSUB : value->rValue = model->BSIM4v7ldsub; return(OK); case BSIM4v7_MOD_LVTH0: value->rValue = model->BSIM4v7lvth0; return(OK); case BSIM4v7_MOD_LUA: value->rValue = model->BSIM4v7lua; return(OK); case BSIM4v7_MOD_LUA1: value->rValue = model->BSIM4v7lua1; return(OK); case BSIM4v7_MOD_LUB: value->rValue = model->BSIM4v7lub; return(OK); case BSIM4v7_MOD_LUB1: value->rValue = model->BSIM4v7lub1; return(OK); case BSIM4v7_MOD_LUC: value->rValue = model->BSIM4v7luc; return(OK); case BSIM4v7_MOD_LUC1: value->rValue = model->BSIM4v7luc1; return(OK); case BSIM4v7_MOD_LUD: value->rValue = model->BSIM4v7lud; return(OK); case BSIM4v7_MOD_LUD1: value->rValue = model->BSIM4v7lud1; return(OK); case BSIM4v7_MOD_LUP: value->rValue = model->BSIM4v7lup; return(OK); case BSIM4v7_MOD_LLP: value->rValue = model->BSIM4v7llp; return(OK); case BSIM4v7_MOD_LU0: value->rValue = model->BSIM4v7lu0; return(OK); case BSIM4v7_MOD_LUTE: value->rValue = model->BSIM4v7lute; return(OK); case BSIM4v7_MOD_LUCSTE: value->rValue = model->BSIM4v7lucste; return(OK); case BSIM4v7_MOD_LVOFF: value->rValue = model->BSIM4v7lvoff; return(OK); case BSIM4v7_MOD_LTVOFF: value->rValue = model->BSIM4v7ltvoff; return(OK); case BSIM4v7_MOD_LTNFACTOR: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4v7ltnfactor; return(OK); case BSIM4v7_MOD_LTETA0: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4v7lteta0; return(OK); case BSIM4v7_MOD_LTVOFFCV: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4v7ltvoffcv; return(OK); case BSIM4v7_MOD_LMINV: value->rValue = model->BSIM4v7lminv; return(OK); case BSIM4v7_MOD_LMINVCV: value->rValue = model->BSIM4v7lminvcv; return(OK); case BSIM4v7_MOD_LFPROUT: value->rValue = model->BSIM4v7lfprout; return(OK); case BSIM4v7_MOD_LPDITS: value->rValue = model->BSIM4v7lpdits; return(OK); case BSIM4v7_MOD_LPDITSD: value->rValue = model->BSIM4v7lpditsd; return(OK); case BSIM4v7_MOD_LDELTA: value->rValue = model->BSIM4v7ldelta; return(OK); case BSIM4v7_MOD_LRDSW: value->rValue = model->BSIM4v7lrdsw; return(OK); case BSIM4v7_MOD_LRDW: value->rValue = model->BSIM4v7lrdw; return(OK); case BSIM4v7_MOD_LRSW: value->rValue = model->BSIM4v7lrsw; return(OK); case BSIM4v7_MOD_LPRWB: value->rValue = model->BSIM4v7lprwb; return(OK); case BSIM4v7_MOD_LPRWG: value->rValue = model->BSIM4v7lprwg; return(OK); case BSIM4v7_MOD_LPRT: value->rValue = model->BSIM4v7lprt; return(OK); case BSIM4v7_MOD_LETA0: value->rValue = model->BSIM4v7leta0; return(OK); case BSIM4v7_MOD_LETAB: value->rValue = model->BSIM4v7letab; return(OK); case BSIM4v7_MOD_LPCLM: value->rValue = model->BSIM4v7lpclm; return(OK); case BSIM4v7_MOD_LPDIBL1: value->rValue = model->BSIM4v7lpdibl1; return(OK); case BSIM4v7_MOD_LPDIBL2: value->rValue = model->BSIM4v7lpdibl2; return(OK); case BSIM4v7_MOD_LPDIBLB: value->rValue = model->BSIM4v7lpdiblb; return(OK); case BSIM4v7_MOD_LPSCBE1: value->rValue = model->BSIM4v7lpscbe1; return(OK); case BSIM4v7_MOD_LPSCBE2: value->rValue = model->BSIM4v7lpscbe2; return(OK); case BSIM4v7_MOD_LPVAG: value->rValue = model->BSIM4v7lpvag; return(OK); case BSIM4v7_MOD_LWR: value->rValue = model->BSIM4v7lwr; return(OK); case BSIM4v7_MOD_LDWG: value->rValue = model->BSIM4v7ldwg; return(OK); case BSIM4v7_MOD_LDWB: value->rValue = model->BSIM4v7ldwb; return(OK); case BSIM4v7_MOD_LB0: value->rValue = model->BSIM4v7lb0; return(OK); case BSIM4v7_MOD_LB1: value->rValue = model->BSIM4v7lb1; return(OK); case BSIM4v7_MOD_LALPHA0: value->rValue = model->BSIM4v7lalpha0; return(OK); case BSIM4v7_MOD_LALPHA1: value->rValue = model->BSIM4v7lalpha1; return(OK); case BSIM4v7_MOD_LBETA0: value->rValue = model->BSIM4v7lbeta0; return(OK); case BSIM4v7_MOD_LAGIDL: value->rValue = model->BSIM4v7lagidl; return(OK); case BSIM4v7_MOD_LBGIDL: value->rValue = model->BSIM4v7lbgidl; return(OK); case BSIM4v7_MOD_LCGIDL: value->rValue = model->BSIM4v7lcgidl; return(OK); case BSIM4v7_MOD_LEGIDL: value->rValue = model->BSIM4v7legidl; return(OK); case BSIM4v7_MOD_LFGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7lfgidl; return(OK); case BSIM4v7_MOD_LKGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7lkgidl; return(OK); case BSIM4v7_MOD_LRGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7lrgidl; return(OK); case BSIM4v7_MOD_LAGISL: value->rValue = model->BSIM4v7lagisl; return(OK); case BSIM4v7_MOD_LBGISL: value->rValue = model->BSIM4v7lbgisl; return(OK); case BSIM4v7_MOD_LCGISL: value->rValue = model->BSIM4v7lcgisl; return(OK); case BSIM4v7_MOD_LEGISL: value->rValue = model->BSIM4v7legisl; return(OK); case BSIM4v7_MOD_LFGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7lfgisl; return(OK); case BSIM4v7_MOD_LKGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7lkgisl; return(OK); case BSIM4v7_MOD_LRGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7lrgisl; return(OK); case BSIM4v7_MOD_LAIGC: value->rValue = model->BSIM4v7laigc; return(OK); case BSIM4v7_MOD_LBIGC: value->rValue = model->BSIM4v7lbigc; return(OK); case BSIM4v7_MOD_LCIGC: value->rValue = model->BSIM4v7lcigc; return(OK); case BSIM4v7_MOD_LAIGSD: value->rValue = model->BSIM4v7laigsd; return(OK); case BSIM4v7_MOD_LBIGSD: value->rValue = model->BSIM4v7lbigsd; return(OK); case BSIM4v7_MOD_LCIGSD: value->rValue = model->BSIM4v7lcigsd; return(OK); case BSIM4v7_MOD_LAIGS: value->rValue = model->BSIM4v7laigs; return(OK); case BSIM4v7_MOD_LBIGS: value->rValue = model->BSIM4v7lbigs; return(OK); case BSIM4v7_MOD_LCIGS: value->rValue = model->BSIM4v7lcigs; return(OK); case BSIM4v7_MOD_LAIGD: value->rValue = model->BSIM4v7laigd; return(OK); case BSIM4v7_MOD_LBIGD: value->rValue = model->BSIM4v7lbigd; return(OK); case BSIM4v7_MOD_LCIGD: value->rValue = model->BSIM4v7lcigd; return(OK); case BSIM4v7_MOD_LAIGBACC: value->rValue = model->BSIM4v7laigbacc; return(OK); case BSIM4v7_MOD_LBIGBACC: value->rValue = model->BSIM4v7lbigbacc; return(OK); case BSIM4v7_MOD_LCIGBACC: value->rValue = model->BSIM4v7lcigbacc; return(OK); case BSIM4v7_MOD_LAIGBINV: value->rValue = model->BSIM4v7laigbinv; return(OK); case BSIM4v7_MOD_LBIGBINV: value->rValue = model->BSIM4v7lbigbinv; return(OK); case BSIM4v7_MOD_LCIGBINV: value->rValue = model->BSIM4v7lcigbinv; return(OK); case BSIM4v7_MOD_LNIGC: value->rValue = model->BSIM4v7lnigc; return(OK); case BSIM4v7_MOD_LNIGBACC: value->rValue = model->BSIM4v7lnigbacc; return(OK); case BSIM4v7_MOD_LNIGBINV: value->rValue = model->BSIM4v7lnigbinv; return(OK); case BSIM4v7_MOD_LNTOX: value->rValue = model->BSIM4v7lntox; return(OK); case BSIM4v7_MOD_LEIGBINV: value->rValue = model->BSIM4v7leigbinv; return(OK); case BSIM4v7_MOD_LPIGCD: value->rValue = model->BSIM4v7lpigcd; return(OK); case BSIM4v7_MOD_LPOXEDGE: value->rValue = model->BSIM4v7lpoxedge; return(OK); case BSIM4v7_MOD_LPHIN: value->rValue = model->BSIM4v7lphin; return(OK); case BSIM4v7_MOD_LXRCRG1: value->rValue = model->BSIM4v7lxrcrg1; return(OK); case BSIM4v7_MOD_LXRCRG2: value->rValue = model->BSIM4v7lxrcrg2; return(OK); case BSIM4v7_MOD_LEU: value->rValue = model->BSIM4v7leu; return(OK); case BSIM4v7_MOD_LUCS: value->rValue = model->BSIM4v7lucs; return(OK); case BSIM4v7_MOD_LVFB: value->rValue = model->BSIM4v7lvfb; return(OK); case BSIM4v7_MOD_LCGSL: value->rValue = model->BSIM4v7lcgsl; return(OK); case BSIM4v7_MOD_LCGDL: value->rValue = model->BSIM4v7lcgdl; return(OK); case BSIM4v7_MOD_LCKAPPAS: value->rValue = model->BSIM4v7lckappas; return(OK); case BSIM4v7_MOD_LCKAPPAD: value->rValue = model->BSIM4v7lckappad; return(OK); case BSIM4v7_MOD_LCF: value->rValue = model->BSIM4v7lcf; return(OK); case BSIM4v7_MOD_LCLC: value->rValue = model->BSIM4v7lclc; return(OK); case BSIM4v7_MOD_LCLE: value->rValue = model->BSIM4v7lcle; return(OK); case BSIM4v7_MOD_LVFBCV: value->rValue = model->BSIM4v7lvfbcv; return(OK); case BSIM4v7_MOD_LACDE: value->rValue = model->BSIM4v7lacde; return(OK); case BSIM4v7_MOD_LMOIN: value->rValue = model->BSIM4v7lmoin; return(OK); case BSIM4v7_MOD_LNOFF: value->rValue = model->BSIM4v7lnoff; return(OK); case BSIM4v7_MOD_LVOFFCV: value->rValue = model->BSIM4v7lvoffcv; return(OK); case BSIM4v7_MOD_LVFBSDOFF: value->rValue = model->BSIM4v7lvfbsdoff; return(OK); case BSIM4v7_MOD_LTVFBSDOFF: value->rValue = model->BSIM4v7ltvfbsdoff; return(OK); case BSIM4v7_MOD_LLAMBDA: value->rValue = model->BSIM4v7llambda; return(OK); case BSIM4v7_MOD_LVTL: value->rValue = model->BSIM4v7lvtl; return(OK); case BSIM4v7_MOD_LXN: value->rValue = model->BSIM4v7lxn; return(OK); /* Width dependence */ case BSIM4v7_MOD_WCDSC : value->rValue = model->BSIM4v7wcdsc; return(OK); case BSIM4v7_MOD_WCDSCB : value->rValue = model->BSIM4v7wcdscb; return(OK); case BSIM4v7_MOD_WCDSCD : value->rValue = model->BSIM4v7wcdscd; return(OK); case BSIM4v7_MOD_WCIT : value->rValue = model->BSIM4v7wcit; return(OK); case BSIM4v7_MOD_WNFACTOR : value->rValue = model->BSIM4v7wnfactor; return(OK); case BSIM4v7_MOD_WXJ: value->rValue = model->BSIM4v7wxj; return(OK); case BSIM4v7_MOD_WVSAT: value->rValue = model->BSIM4v7wvsat; return(OK); case BSIM4v7_MOD_WAT: value->rValue = model->BSIM4v7wat; return(OK); case BSIM4v7_MOD_WA0: value->rValue = model->BSIM4v7wa0; return(OK); case BSIM4v7_MOD_WAGS: value->rValue = model->BSIM4v7wags; return(OK); case BSIM4v7_MOD_WA1: value->rValue = model->BSIM4v7wa1; return(OK); case BSIM4v7_MOD_WA2: value->rValue = model->BSIM4v7wa2; return(OK); case BSIM4v7_MOD_WKETA: value->rValue = model->BSIM4v7wketa; return(OK); case BSIM4v7_MOD_WNSUB: value->rValue = model->BSIM4v7wnsub; return(OK); case BSIM4v7_MOD_WNDEP: value->rValue = model->BSIM4v7wndep; return(OK); case BSIM4v7_MOD_WNSD: value->rValue = model->BSIM4v7wnsd; return(OK); case BSIM4v7_MOD_WNGATE: value->rValue = model->BSIM4v7wngate; return(OK); case BSIM4v7_MOD_WGAMMA1: value->rValue = model->BSIM4v7wgamma1; return(OK); case BSIM4v7_MOD_WGAMMA2: value->rValue = model->BSIM4v7wgamma2; return(OK); case BSIM4v7_MOD_WVBX: value->rValue = model->BSIM4v7wvbx; return(OK); case BSIM4v7_MOD_WVBM: value->rValue = model->BSIM4v7wvbm; return(OK); case BSIM4v7_MOD_WXT: value->rValue = model->BSIM4v7wxt; return(OK); case BSIM4v7_MOD_WK1: value->rValue = model->BSIM4v7wk1; return(OK); case BSIM4v7_MOD_WKT1: value->rValue = model->BSIM4v7wkt1; return(OK); case BSIM4v7_MOD_WKT1L: value->rValue = model->BSIM4v7wkt1l; return(OK); case BSIM4v7_MOD_WKT2 : value->rValue = model->BSIM4v7wkt2; return(OK); case BSIM4v7_MOD_WK2 : value->rValue = model->BSIM4v7wk2; return(OK); case BSIM4v7_MOD_WK3: value->rValue = model->BSIM4v7wk3; return(OK); case BSIM4v7_MOD_WK3B: value->rValue = model->BSIM4v7wk3b; return(OK); case BSIM4v7_MOD_WW0: value->rValue = model->BSIM4v7ww0; return(OK); case BSIM4v7_MOD_WLPE0: value->rValue = model->BSIM4v7wlpe0; return(OK); case BSIM4v7_MOD_WDVTP0: value->rValue = model->BSIM4v7wdvtp0; return(OK); case BSIM4v7_MOD_WDVTP1: value->rValue = model->BSIM4v7wdvtp1; return(OK); case BSIM4v7_MOD_WDVTP2: value->rValue = model->BSIM4v7wdvtp2; /* New DIBL/Rout */ return(OK); case BSIM4v7_MOD_WDVTP3: value->rValue = model->BSIM4v7wdvtp3; return(OK); case BSIM4v7_MOD_WDVTP4: value->rValue = model->BSIM4v7wdvtp4; return(OK); case BSIM4v7_MOD_WDVTP5: value->rValue = model->BSIM4v7wdvtp5; return(OK); case BSIM4v7_MOD_WLPEB: value->rValue = model->BSIM4v7wlpeb; return(OK); case BSIM4v7_MOD_WDVT0: value->rValue = model->BSIM4v7wdvt0; return(OK); case BSIM4v7_MOD_WDVT1 : value->rValue = model->BSIM4v7wdvt1; return(OK); case BSIM4v7_MOD_WDVT2 : value->rValue = model->BSIM4v7wdvt2; return(OK); case BSIM4v7_MOD_WDVT0W : value->rValue = model->BSIM4v7wdvt0w; return(OK); case BSIM4v7_MOD_WDVT1W : value->rValue = model->BSIM4v7wdvt1w; return(OK); case BSIM4v7_MOD_WDVT2W : value->rValue = model->BSIM4v7wdvt2w; return(OK); case BSIM4v7_MOD_WDROUT : value->rValue = model->BSIM4v7wdrout; return(OK); case BSIM4v7_MOD_WDSUB : value->rValue = model->BSIM4v7wdsub; return(OK); case BSIM4v7_MOD_WVTH0: value->rValue = model->BSIM4v7wvth0; return(OK); case BSIM4v7_MOD_WUA: value->rValue = model->BSIM4v7wua; return(OK); case BSIM4v7_MOD_WUA1: value->rValue = model->BSIM4v7wua1; return(OK); case BSIM4v7_MOD_WUB: value->rValue = model->BSIM4v7wub; return(OK); case BSIM4v7_MOD_WUB1: value->rValue = model->BSIM4v7wub1; return(OK); case BSIM4v7_MOD_WUC: value->rValue = model->BSIM4v7wuc; return(OK); case BSIM4v7_MOD_WUC1: value->rValue = model->BSIM4v7wuc1; return(OK); case BSIM4v7_MOD_WUD: value->rValue = model->BSIM4v7wud; return(OK); case BSIM4v7_MOD_WUD1: value->rValue = model->BSIM4v7wud1; return(OK); case BSIM4v7_MOD_WUP: value->rValue = model->BSIM4v7wup; return(OK); case BSIM4v7_MOD_WLP: value->rValue = model->BSIM4v7wlp; return(OK); case BSIM4v7_MOD_WU0: value->rValue = model->BSIM4v7wu0; return(OK); case BSIM4v7_MOD_WUTE: value->rValue = model->BSIM4v7wute; return(OK); case BSIM4v7_MOD_WUCSTE: value->rValue = model->BSIM4v7wucste; return(OK); case BSIM4v7_MOD_WVOFF: value->rValue = model->BSIM4v7wvoff; return(OK); case BSIM4v7_MOD_WTVOFF: value->rValue = model->BSIM4v7wtvoff; return(OK); case BSIM4v7_MOD_WTNFACTOR: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4v7wtnfactor; return(OK); case BSIM4v7_MOD_WTETA0: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4v7wteta0; return(OK); case BSIM4v7_MOD_WTVOFFCV: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4v7wtvoffcv; return(OK); case BSIM4v7_MOD_WMINV: value->rValue = model->BSIM4v7wminv; return(OK); case BSIM4v7_MOD_WMINVCV: value->rValue = model->BSIM4v7wminvcv; return(OK); case BSIM4v7_MOD_WFPROUT: value->rValue = model->BSIM4v7wfprout; return(OK); case BSIM4v7_MOD_WPDITS: value->rValue = model->BSIM4v7wpdits; return(OK); case BSIM4v7_MOD_WPDITSD: value->rValue = model->BSIM4v7wpditsd; return(OK); case BSIM4v7_MOD_WDELTA: value->rValue = model->BSIM4v7wdelta; return(OK); case BSIM4v7_MOD_WRDSW: value->rValue = model->BSIM4v7wrdsw; return(OK); case BSIM4v7_MOD_WRDW: value->rValue = model->BSIM4v7wrdw; return(OK); case BSIM4v7_MOD_WRSW: value->rValue = model->BSIM4v7wrsw; return(OK); case BSIM4v7_MOD_WPRWB: value->rValue = model->BSIM4v7wprwb; return(OK); case BSIM4v7_MOD_WPRWG: value->rValue = model->BSIM4v7wprwg; return(OK); case BSIM4v7_MOD_WPRT: value->rValue = model->BSIM4v7wprt; return(OK); case BSIM4v7_MOD_WETA0: value->rValue = model->BSIM4v7weta0; return(OK); case BSIM4v7_MOD_WETAB: value->rValue = model->BSIM4v7wetab; return(OK); case BSIM4v7_MOD_WPCLM: value->rValue = model->BSIM4v7wpclm; return(OK); case BSIM4v7_MOD_WPDIBL1: value->rValue = model->BSIM4v7wpdibl1; return(OK); case BSIM4v7_MOD_WPDIBL2: value->rValue = model->BSIM4v7wpdibl2; return(OK); case BSIM4v7_MOD_WPDIBLB: value->rValue = model->BSIM4v7wpdiblb; return(OK); case BSIM4v7_MOD_WPSCBE1: value->rValue = model->BSIM4v7wpscbe1; return(OK); case BSIM4v7_MOD_WPSCBE2: value->rValue = model->BSIM4v7wpscbe2; return(OK); case BSIM4v7_MOD_WPVAG: value->rValue = model->BSIM4v7wpvag; return(OK); case BSIM4v7_MOD_WWR: value->rValue = model->BSIM4v7wwr; return(OK); case BSIM4v7_MOD_WDWG: value->rValue = model->BSIM4v7wdwg; return(OK); case BSIM4v7_MOD_WDWB: value->rValue = model->BSIM4v7wdwb; return(OK); case BSIM4v7_MOD_WB0: value->rValue = model->BSIM4v7wb0; return(OK); case BSIM4v7_MOD_WB1: value->rValue = model->BSIM4v7wb1; return(OK); case BSIM4v7_MOD_WALPHA0: value->rValue = model->BSIM4v7walpha0; return(OK); case BSIM4v7_MOD_WALPHA1: value->rValue = model->BSIM4v7walpha1; return(OK); case BSIM4v7_MOD_WBETA0: value->rValue = model->BSIM4v7wbeta0; return(OK); case BSIM4v7_MOD_WAGIDL: value->rValue = model->BSIM4v7wagidl; return(OK); case BSIM4v7_MOD_WBGIDL: value->rValue = model->BSIM4v7wbgidl; return(OK); case BSIM4v7_MOD_WCGIDL: value->rValue = model->BSIM4v7wcgidl; return(OK); case BSIM4v7_MOD_WEGIDL: value->rValue = model->BSIM4v7wegidl; return(OK); case BSIM4v7_MOD_WFGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7wfgidl; return(OK); case BSIM4v7_MOD_WKGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7wkgidl; return(OK); case BSIM4v7_MOD_WRGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7wrgidl; return(OK); case BSIM4v7_MOD_WAGISL: value->rValue = model->BSIM4v7wagisl; return(OK); case BSIM4v7_MOD_WBGISL: value->rValue = model->BSIM4v7wbgisl; return(OK); case BSIM4v7_MOD_WCGISL: value->rValue = model->BSIM4v7wcgisl; return(OK); case BSIM4v7_MOD_WEGISL: value->rValue = model->BSIM4v7wegisl; return(OK); case BSIM4v7_MOD_WFGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7wfgisl; return(OK); case BSIM4v7_MOD_WKGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7wkgisl; return(OK); case BSIM4v7_MOD_WRGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7wrgisl; return(OK); case BSIM4v7_MOD_WAIGC: value->rValue = model->BSIM4v7waigc; return(OK); case BSIM4v7_MOD_WBIGC: value->rValue = model->BSIM4v7wbigc; return(OK); case BSIM4v7_MOD_WCIGC: value->rValue = model->BSIM4v7wcigc; return(OK); case BSIM4v7_MOD_WAIGSD: value->rValue = model->BSIM4v7waigsd; return(OK); case BSIM4v7_MOD_WBIGSD: value->rValue = model->BSIM4v7wbigsd; return(OK); case BSIM4v7_MOD_WCIGSD: value->rValue = model->BSIM4v7wcigsd; return(OK); case BSIM4v7_MOD_WAIGS: value->rValue = model->BSIM4v7waigs; return(OK); case BSIM4v7_MOD_WBIGS: value->rValue = model->BSIM4v7wbigs; return(OK); case BSIM4v7_MOD_WCIGS: value->rValue = model->BSIM4v7wcigs; return(OK); case BSIM4v7_MOD_WAIGD: value->rValue = model->BSIM4v7waigd; return(OK); case BSIM4v7_MOD_WBIGD: value->rValue = model->BSIM4v7wbigd; return(OK); case BSIM4v7_MOD_WCIGD: value->rValue = model->BSIM4v7wcigd; return(OK); case BSIM4v7_MOD_WAIGBACC: value->rValue = model->BSIM4v7waigbacc; return(OK); case BSIM4v7_MOD_WBIGBACC: value->rValue = model->BSIM4v7wbigbacc; return(OK); case BSIM4v7_MOD_WCIGBACC: value->rValue = model->BSIM4v7wcigbacc; return(OK); case BSIM4v7_MOD_WAIGBINV: value->rValue = model->BSIM4v7waigbinv; return(OK); case BSIM4v7_MOD_WBIGBINV: value->rValue = model->BSIM4v7wbigbinv; return(OK); case BSIM4v7_MOD_WCIGBINV: value->rValue = model->BSIM4v7wcigbinv; return(OK); case BSIM4v7_MOD_WNIGC: value->rValue = model->BSIM4v7wnigc; return(OK); case BSIM4v7_MOD_WNIGBACC: value->rValue = model->BSIM4v7wnigbacc; return(OK); case BSIM4v7_MOD_WNIGBINV: value->rValue = model->BSIM4v7wnigbinv; return(OK); case BSIM4v7_MOD_WNTOX: value->rValue = model->BSIM4v7wntox; return(OK); case BSIM4v7_MOD_WEIGBINV: value->rValue = model->BSIM4v7weigbinv; return(OK); case BSIM4v7_MOD_WPIGCD: value->rValue = model->BSIM4v7wpigcd; return(OK); case BSIM4v7_MOD_WPOXEDGE: value->rValue = model->BSIM4v7wpoxedge; return(OK); case BSIM4v7_MOD_WPHIN: value->rValue = model->BSIM4v7wphin; return(OK); case BSIM4v7_MOD_WXRCRG1: value->rValue = model->BSIM4v7wxrcrg1; return(OK); case BSIM4v7_MOD_WXRCRG2: value->rValue = model->BSIM4v7wxrcrg2; return(OK); case BSIM4v7_MOD_WEU: value->rValue = model->BSIM4v7weu; return(OK); case BSIM4v7_MOD_WUCS: value->rValue = model->BSIM4v7wucs; return(OK); case BSIM4v7_MOD_WVFB: value->rValue = model->BSIM4v7wvfb; return(OK); case BSIM4v7_MOD_WCGSL: value->rValue = model->BSIM4v7wcgsl; return(OK); case BSIM4v7_MOD_WCGDL: value->rValue = model->BSIM4v7wcgdl; return(OK); case BSIM4v7_MOD_WCKAPPAS: value->rValue = model->BSIM4v7wckappas; return(OK); case BSIM4v7_MOD_WCKAPPAD: value->rValue = model->BSIM4v7wckappad; return(OK); case BSIM4v7_MOD_WCF: value->rValue = model->BSIM4v7wcf; return(OK); case BSIM4v7_MOD_WCLC: value->rValue = model->BSIM4v7wclc; return(OK); case BSIM4v7_MOD_WCLE: value->rValue = model->BSIM4v7wcle; return(OK); case BSIM4v7_MOD_WVFBCV: value->rValue = model->BSIM4v7wvfbcv; return(OK); case BSIM4v7_MOD_WACDE: value->rValue = model->BSIM4v7wacde; return(OK); case BSIM4v7_MOD_WMOIN: value->rValue = model->BSIM4v7wmoin; return(OK); case BSIM4v7_MOD_WNOFF: value->rValue = model->BSIM4v7wnoff; return(OK); case BSIM4v7_MOD_WVOFFCV: value->rValue = model->BSIM4v7wvoffcv; return(OK); case BSIM4v7_MOD_WVFBSDOFF: value->rValue = model->BSIM4v7wvfbsdoff; return(OK); case BSIM4v7_MOD_WTVFBSDOFF: value->rValue = model->BSIM4v7wtvfbsdoff; return(OK); case BSIM4v7_MOD_WLAMBDA: value->rValue = model->BSIM4v7wlambda; return(OK); case BSIM4v7_MOD_WVTL: value->rValue = model->BSIM4v7wvtl; return(OK); case BSIM4v7_MOD_WXN: value->rValue = model->BSIM4v7wxn; return(OK); /* Cross-term dependence */ case BSIM4v7_MOD_PCDSC : value->rValue = model->BSIM4v7pcdsc; return(OK); case BSIM4v7_MOD_PCDSCB : value->rValue = model->BSIM4v7pcdscb; return(OK); case BSIM4v7_MOD_PCDSCD : value->rValue = model->BSIM4v7pcdscd; return(OK); case BSIM4v7_MOD_PCIT : value->rValue = model->BSIM4v7pcit; return(OK); case BSIM4v7_MOD_PNFACTOR : value->rValue = model->BSIM4v7pnfactor; return(OK); case BSIM4v7_MOD_PXJ: value->rValue = model->BSIM4v7pxj; return(OK); case BSIM4v7_MOD_PVSAT: value->rValue = model->BSIM4v7pvsat; return(OK); case BSIM4v7_MOD_PAT: value->rValue = model->BSIM4v7pat; return(OK); case BSIM4v7_MOD_PA0: value->rValue = model->BSIM4v7pa0; return(OK); case BSIM4v7_MOD_PAGS: value->rValue = model->BSIM4v7pags; return(OK); case BSIM4v7_MOD_PA1: value->rValue = model->BSIM4v7pa1; return(OK); case BSIM4v7_MOD_PA2: value->rValue = model->BSIM4v7pa2; return(OK); case BSIM4v7_MOD_PKETA: value->rValue = model->BSIM4v7pketa; return(OK); case BSIM4v7_MOD_PNSUB: value->rValue = model->BSIM4v7pnsub; return(OK); case BSIM4v7_MOD_PNDEP: value->rValue = model->BSIM4v7pndep; return(OK); case BSIM4v7_MOD_PNSD: value->rValue = model->BSIM4v7pnsd; return(OK); case BSIM4v7_MOD_PNGATE: value->rValue = model->BSIM4v7pngate; return(OK); case BSIM4v7_MOD_PGAMMA1: value->rValue = model->BSIM4v7pgamma1; return(OK); case BSIM4v7_MOD_PGAMMA2: value->rValue = model->BSIM4v7pgamma2; return(OK); case BSIM4v7_MOD_PVBX: value->rValue = model->BSIM4v7pvbx; return(OK); case BSIM4v7_MOD_PVBM: value->rValue = model->BSIM4v7pvbm; return(OK); case BSIM4v7_MOD_PXT: value->rValue = model->BSIM4v7pxt; return(OK); case BSIM4v7_MOD_PK1: value->rValue = model->BSIM4v7pk1; return(OK); case BSIM4v7_MOD_PKT1: value->rValue = model->BSIM4v7pkt1; return(OK); case BSIM4v7_MOD_PKT1L: value->rValue = model->BSIM4v7pkt1l; return(OK); case BSIM4v7_MOD_PKT2 : value->rValue = model->BSIM4v7pkt2; return(OK); case BSIM4v7_MOD_PK2 : value->rValue = model->BSIM4v7pk2; return(OK); case BSIM4v7_MOD_PK3: value->rValue = model->BSIM4v7pk3; return(OK); case BSIM4v7_MOD_PK3B: value->rValue = model->BSIM4v7pk3b; return(OK); case BSIM4v7_MOD_PW0: value->rValue = model->BSIM4v7pw0; return(OK); case BSIM4v7_MOD_PLPE0: value->rValue = model->BSIM4v7plpe0; return(OK); case BSIM4v7_MOD_PLPEB: value->rValue = model->BSIM4v7plpeb; return(OK); case BSIM4v7_MOD_PDVTP0: value->rValue = model->BSIM4v7pdvtp0; return(OK); case BSIM4v7_MOD_PDVTP1: value->rValue = model->BSIM4v7pdvtp1; return(OK); case BSIM4v7_MOD_PDVTP2: value->rValue = model->BSIM4v7pdvtp2; /* New DIBL/Rout */ return(OK); case BSIM4v7_MOD_PDVTP3: value->rValue = model->BSIM4v7pdvtp3; return(OK); case BSIM4v7_MOD_PDVTP4: value->rValue = model->BSIM4v7pdvtp4; return(OK); case BSIM4v7_MOD_PDVTP5: value->rValue = model->BSIM4v7pdvtp5; return(OK); case BSIM4v7_MOD_PDVT0 : value->rValue = model->BSIM4v7pdvt0; return(OK); case BSIM4v7_MOD_PDVT1 : value->rValue = model->BSIM4v7pdvt1; return(OK); case BSIM4v7_MOD_PDVT2 : value->rValue = model->BSIM4v7pdvt2; return(OK); case BSIM4v7_MOD_PDVT0W : value->rValue = model->BSIM4v7pdvt0w; return(OK); case BSIM4v7_MOD_PDVT1W : value->rValue = model->BSIM4v7pdvt1w; return(OK); case BSIM4v7_MOD_PDVT2W : value->rValue = model->BSIM4v7pdvt2w; return(OK); case BSIM4v7_MOD_PDROUT : value->rValue = model->BSIM4v7pdrout; return(OK); case BSIM4v7_MOD_PDSUB : value->rValue = model->BSIM4v7pdsub; return(OK); case BSIM4v7_MOD_PVTH0: value->rValue = model->BSIM4v7pvth0; return(OK); case BSIM4v7_MOD_PUA: value->rValue = model->BSIM4v7pua; return(OK); case BSIM4v7_MOD_PUA1: value->rValue = model->BSIM4v7pua1; return(OK); case BSIM4v7_MOD_PUB: value->rValue = model->BSIM4v7pub; return(OK); case BSIM4v7_MOD_PUB1: value->rValue = model->BSIM4v7pub1; return(OK); case BSIM4v7_MOD_PUC: value->rValue = model->BSIM4v7puc; return(OK); case BSIM4v7_MOD_PUC1: value->rValue = model->BSIM4v7puc1; return(OK); case BSIM4v7_MOD_PUD: value->rValue = model->BSIM4v7pud; return(OK); case BSIM4v7_MOD_PUD1: value->rValue = model->BSIM4v7pud1; return(OK); case BSIM4v7_MOD_PUP: value->rValue = model->BSIM4v7pup; return(OK); case BSIM4v7_MOD_PLP: value->rValue = model->BSIM4v7plp; return(OK); case BSIM4v7_MOD_PU0: value->rValue = model->BSIM4v7pu0; return(OK); case BSIM4v7_MOD_PUTE: value->rValue = model->BSIM4v7pute; return(OK); case BSIM4v7_MOD_PUCSTE: value->rValue = model->BSIM4v7pucste; return(OK); case BSIM4v7_MOD_PVOFF: value->rValue = model->BSIM4v7pvoff; return(OK); case BSIM4v7_MOD_PTVOFF: value->rValue = model->BSIM4v7ptvoff; return(OK); case BSIM4v7_MOD_PTNFACTOR: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4v7ptnfactor; return(OK); case BSIM4v7_MOD_PTETA0: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4v7pteta0; return(OK); case BSIM4v7_MOD_PTVOFFCV: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4v7ptvoffcv; return(OK); case BSIM4v7_MOD_PMINV: value->rValue = model->BSIM4v7pminv; return(OK); case BSIM4v7_MOD_PMINVCV: value->rValue = model->BSIM4v7pminvcv; return(OK); case BSIM4v7_MOD_PFPROUT: value->rValue = model->BSIM4v7pfprout; return(OK); case BSIM4v7_MOD_PPDITS: value->rValue = model->BSIM4v7ppdits; return(OK); case BSIM4v7_MOD_PPDITSD: value->rValue = model->BSIM4v7ppditsd; return(OK); case BSIM4v7_MOD_PDELTA: value->rValue = model->BSIM4v7pdelta; return(OK); case BSIM4v7_MOD_PRDSW: value->rValue = model->BSIM4v7prdsw; return(OK); case BSIM4v7_MOD_PRDW: value->rValue = model->BSIM4v7prdw; return(OK); case BSIM4v7_MOD_PRSW: value->rValue = model->BSIM4v7prsw; return(OK); case BSIM4v7_MOD_PPRWB: value->rValue = model->BSIM4v7pprwb; return(OK); case BSIM4v7_MOD_PPRWG: value->rValue = model->BSIM4v7pprwg; return(OK); case BSIM4v7_MOD_PPRT: value->rValue = model->BSIM4v7pprt; return(OK); case BSIM4v7_MOD_PETA0: value->rValue = model->BSIM4v7peta0; return(OK); case BSIM4v7_MOD_PETAB: value->rValue = model->BSIM4v7petab; return(OK); case BSIM4v7_MOD_PPCLM: value->rValue = model->BSIM4v7ppclm; return(OK); case BSIM4v7_MOD_PPDIBL1: value->rValue = model->BSIM4v7ppdibl1; return(OK); case BSIM4v7_MOD_PPDIBL2: value->rValue = model->BSIM4v7ppdibl2; return(OK); case BSIM4v7_MOD_PPDIBLB: value->rValue = model->BSIM4v7ppdiblb; return(OK); case BSIM4v7_MOD_PPSCBE1: value->rValue = model->BSIM4v7ppscbe1; return(OK); case BSIM4v7_MOD_PPSCBE2: value->rValue = model->BSIM4v7ppscbe2; return(OK); case BSIM4v7_MOD_PPVAG: value->rValue = model->BSIM4v7ppvag; return(OK); case BSIM4v7_MOD_PWR: value->rValue = model->BSIM4v7pwr; return(OK); case BSIM4v7_MOD_PDWG: value->rValue = model->BSIM4v7pdwg; return(OK); case BSIM4v7_MOD_PDWB: value->rValue = model->BSIM4v7pdwb; return(OK); case BSIM4v7_MOD_PB0: value->rValue = model->BSIM4v7pb0; return(OK); case BSIM4v7_MOD_PB1: value->rValue = model->BSIM4v7pb1; return(OK); case BSIM4v7_MOD_PALPHA0: value->rValue = model->BSIM4v7palpha0; return(OK); case BSIM4v7_MOD_PALPHA1: value->rValue = model->BSIM4v7palpha1; return(OK); case BSIM4v7_MOD_PBETA0: value->rValue = model->BSIM4v7pbeta0; return(OK); case BSIM4v7_MOD_PAGIDL: value->rValue = model->BSIM4v7pagidl; return(OK); case BSIM4v7_MOD_PBGIDL: value->rValue = model->BSIM4v7pbgidl; return(OK); case BSIM4v7_MOD_PCGIDL: value->rValue = model->BSIM4v7pcgidl; return(OK); case BSIM4v7_MOD_PEGIDL: value->rValue = model->BSIM4v7pegidl; return(OK); case BSIM4v7_MOD_PFGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7pfgidl; return(OK); case BSIM4v7_MOD_PKGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7pkgidl; return(OK); case BSIM4v7_MOD_PRGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7prgidl; return(OK); case BSIM4v7_MOD_PAGISL: value->rValue = model->BSIM4v7pagisl; return(OK); case BSIM4v7_MOD_PBGISL: value->rValue = model->BSIM4v7pbgisl; return(OK); case BSIM4v7_MOD_PCGISL: value->rValue = model->BSIM4v7pcgisl; return(OK); case BSIM4v7_MOD_PEGISL: value->rValue = model->BSIM4v7pegisl; return(OK); case BSIM4v7_MOD_PFGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7pfgisl; return(OK); case BSIM4v7_MOD_PKGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7pkgisl; return(OK); case BSIM4v7_MOD_PRGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4v7prgisl; return(OK); case BSIM4v7_MOD_PAIGC: value->rValue = model->BSIM4v7paigc; return(OK); case BSIM4v7_MOD_PBIGC: value->rValue = model->BSIM4v7pbigc; return(OK); case BSIM4v7_MOD_PCIGC: value->rValue = model->BSIM4v7pcigc; return(OK); case BSIM4v7_MOD_PAIGSD: value->rValue = model->BSIM4v7paigsd; return(OK); case BSIM4v7_MOD_PBIGSD: value->rValue = model->BSIM4v7pbigsd; return(OK); case BSIM4v7_MOD_PCIGSD: value->rValue = model->BSIM4v7pcigsd; return(OK); case BSIM4v7_MOD_PAIGS: value->rValue = model->BSIM4v7paigs; return(OK); case BSIM4v7_MOD_PBIGS: value->rValue = model->BSIM4v7pbigs; return(OK); case BSIM4v7_MOD_PCIGS: value->rValue = model->BSIM4v7pcigs; return(OK); case BSIM4v7_MOD_PAIGD: value->rValue = model->BSIM4v7paigd; return(OK); case BSIM4v7_MOD_PBIGD: value->rValue = model->BSIM4v7pbigd; return(OK); case BSIM4v7_MOD_PCIGD: value->rValue = model->BSIM4v7pcigd; return(OK); case BSIM4v7_MOD_PAIGBACC: value->rValue = model->BSIM4v7paigbacc; return(OK); case BSIM4v7_MOD_PBIGBACC: value->rValue = model->BSIM4v7pbigbacc; return(OK); case BSIM4v7_MOD_PCIGBACC: value->rValue = model->BSIM4v7pcigbacc; return(OK); case BSIM4v7_MOD_PAIGBINV: value->rValue = model->BSIM4v7paigbinv; return(OK); case BSIM4v7_MOD_PBIGBINV: value->rValue = model->BSIM4v7pbigbinv; return(OK); case BSIM4v7_MOD_PCIGBINV: value->rValue = model->BSIM4v7pcigbinv; return(OK); case BSIM4v7_MOD_PNIGC: value->rValue = model->BSIM4v7pnigc; return(OK); case BSIM4v7_MOD_PNIGBACC: value->rValue = model->BSIM4v7pnigbacc; return(OK); case BSIM4v7_MOD_PNIGBINV: value->rValue = model->BSIM4v7pnigbinv; return(OK); case BSIM4v7_MOD_PNTOX: value->rValue = model->BSIM4v7pntox; return(OK); case BSIM4v7_MOD_PEIGBINV: value->rValue = model->BSIM4v7peigbinv; return(OK); case BSIM4v7_MOD_PPIGCD: value->rValue = model->BSIM4v7ppigcd; return(OK); case BSIM4v7_MOD_PPOXEDGE: value->rValue = model->BSIM4v7ppoxedge; return(OK); case BSIM4v7_MOD_PPHIN: value->rValue = model->BSIM4v7pphin; return(OK); case BSIM4v7_MOD_PXRCRG1: value->rValue = model->BSIM4v7pxrcrg1; return(OK); case BSIM4v7_MOD_PXRCRG2: value->rValue = model->BSIM4v7pxrcrg2; return(OK); case BSIM4v7_MOD_PEU: value->rValue = model->BSIM4v7peu; return(OK); case BSIM4v7_MOD_PUCS: value->rValue = model->BSIM4v7pucs; return(OK); case BSIM4v7_MOD_PVFB: value->rValue = model->BSIM4v7pvfb; return(OK); case BSIM4v7_MOD_PCGSL: value->rValue = model->BSIM4v7pcgsl; return(OK); case BSIM4v7_MOD_PCGDL: value->rValue = model->BSIM4v7pcgdl; return(OK); case BSIM4v7_MOD_PCKAPPAS: value->rValue = model->BSIM4v7pckappas; return(OK); case BSIM4v7_MOD_PCKAPPAD: value->rValue = model->BSIM4v7pckappad; return(OK); case BSIM4v7_MOD_PCF: value->rValue = model->BSIM4v7pcf; return(OK); case BSIM4v7_MOD_PCLC: value->rValue = model->BSIM4v7pclc; return(OK); case BSIM4v7_MOD_PCLE: value->rValue = model->BSIM4v7pcle; return(OK); case BSIM4v7_MOD_PVFBCV: value->rValue = model->BSIM4v7pvfbcv; return(OK); case BSIM4v7_MOD_PACDE: value->rValue = model->BSIM4v7pacde; return(OK); case BSIM4v7_MOD_PMOIN: value->rValue = model->BSIM4v7pmoin; return(OK); case BSIM4v7_MOD_PNOFF: value->rValue = model->BSIM4v7pnoff; return(OK); case BSIM4v7_MOD_PVOFFCV: value->rValue = model->BSIM4v7pvoffcv; return(OK); case BSIM4v7_MOD_PVFBSDOFF: value->rValue = model->BSIM4v7pvfbsdoff; return(OK); case BSIM4v7_MOD_PTVFBSDOFF: value->rValue = model->BSIM4v7ptvfbsdoff; return(OK); case BSIM4v7_MOD_PLAMBDA: value->rValue = model->BSIM4v7plambda; return(OK); case BSIM4v7_MOD_PVTL: value->rValue = model->BSIM4v7pvtl; return(OK); case BSIM4v7_MOD_PXN: value->rValue = model->BSIM4v7pxn; return(OK); case BSIM4v7_MOD_TNOM : value->rValue = model->BSIM4v7tnom; return(OK); case BSIM4v7_MOD_CGSO: value->rValue = model->BSIM4v7cgso; return(OK); case BSIM4v7_MOD_CGDO: value->rValue = model->BSIM4v7cgdo; return(OK); case BSIM4v7_MOD_CGBO: value->rValue = model->BSIM4v7cgbo; return(OK); case BSIM4v7_MOD_XPART: value->rValue = model->BSIM4v7xpart; return(OK); case BSIM4v7_MOD_RSH: value->rValue = model->BSIM4v7sheetResistance; return(OK); case BSIM4v7_MOD_JSS: value->rValue = model->BSIM4v7SjctSatCurDensity; return(OK); case BSIM4v7_MOD_JSWS: value->rValue = model->BSIM4v7SjctSidewallSatCurDensity; return(OK); case BSIM4v7_MOD_JSWGS: value->rValue = model->BSIM4v7SjctGateSidewallSatCurDensity; return(OK); case BSIM4v7_MOD_PBS: value->rValue = model->BSIM4v7SbulkJctPotential; return(OK); case BSIM4v7_MOD_MJS: value->rValue = model->BSIM4v7SbulkJctBotGradingCoeff; return(OK); case BSIM4v7_MOD_PBSWS: value->rValue = model->BSIM4v7SsidewallJctPotential; return(OK); case BSIM4v7_MOD_MJSWS: value->rValue = model->BSIM4v7SbulkJctSideGradingCoeff; return(OK); case BSIM4v7_MOD_CJS: value->rValue = model->BSIM4v7SunitAreaJctCap; return(OK); case BSIM4v7_MOD_CJSWS: value->rValue = model->BSIM4v7SunitLengthSidewallJctCap; return(OK); case BSIM4v7_MOD_PBSWGS: value->rValue = model->BSIM4v7SGatesidewallJctPotential; return(OK); case BSIM4v7_MOD_MJSWGS: value->rValue = model->BSIM4v7SbulkJctGateSideGradingCoeff; return(OK); case BSIM4v7_MOD_CJSWGS: value->rValue = model->BSIM4v7SunitLengthGateSidewallJctCap; return(OK); case BSIM4v7_MOD_NJS: value->rValue = model->BSIM4v7SjctEmissionCoeff; return(OK); case BSIM4v7_MOD_XTIS: value->rValue = model->BSIM4v7SjctTempExponent; return(OK); case BSIM4v7_MOD_JSD: value->rValue = model->BSIM4v7DjctSatCurDensity; return(OK); case BSIM4v7_MOD_JSWD: value->rValue = model->BSIM4v7DjctSidewallSatCurDensity; return(OK); case BSIM4v7_MOD_JSWGD: value->rValue = model->BSIM4v7DjctGateSidewallSatCurDensity; return(OK); case BSIM4v7_MOD_PBD: value->rValue = model->BSIM4v7DbulkJctPotential; return(OK); case BSIM4v7_MOD_MJD: value->rValue = model->BSIM4v7DbulkJctBotGradingCoeff; return(OK); case BSIM4v7_MOD_PBSWD: value->rValue = model->BSIM4v7DsidewallJctPotential; return(OK); case BSIM4v7_MOD_MJSWD: value->rValue = model->BSIM4v7DbulkJctSideGradingCoeff; return(OK); case BSIM4v7_MOD_CJD: value->rValue = model->BSIM4v7DunitAreaJctCap; return(OK); case BSIM4v7_MOD_CJSWD: value->rValue = model->BSIM4v7DunitLengthSidewallJctCap; return(OK); case BSIM4v7_MOD_PBSWGD: value->rValue = model->BSIM4v7DGatesidewallJctPotential; return(OK); case BSIM4v7_MOD_MJSWGD: value->rValue = model->BSIM4v7DbulkJctGateSideGradingCoeff; return(OK); case BSIM4v7_MOD_CJSWGD: value->rValue = model->BSIM4v7DunitLengthGateSidewallJctCap; return(OK); case BSIM4v7_MOD_NJD: value->rValue = model->BSIM4v7DjctEmissionCoeff; return(OK); case BSIM4v7_MOD_XTID: value->rValue = model->BSIM4v7DjctTempExponent; return(OK); case BSIM4v7_MOD_LINTNOI: value->rValue = model->BSIM4v7lintnoi; return(OK); case BSIM4v7_MOD_LINT: value->rValue = model->BSIM4v7Lint; return(OK); case BSIM4v7_MOD_LL: value->rValue = model->BSIM4v7Ll; return(OK); case BSIM4v7_MOD_LLC: value->rValue = model->BSIM4v7Llc; return(OK); case BSIM4v7_MOD_LLN: value->rValue = model->BSIM4v7Lln; return(OK); case BSIM4v7_MOD_LW: value->rValue = model->BSIM4v7Lw; return(OK); case BSIM4v7_MOD_LWC: value->rValue = model->BSIM4v7Lwc; return(OK); case BSIM4v7_MOD_LWN: value->rValue = model->BSIM4v7Lwn; return(OK); case BSIM4v7_MOD_LWL: value->rValue = model->BSIM4v7Lwl; return(OK); case BSIM4v7_MOD_LWLC: value->rValue = model->BSIM4v7Lwlc; return(OK); case BSIM4v7_MOD_LMIN: value->rValue = model->BSIM4v7Lmin; return(OK); case BSIM4v7_MOD_LMAX: value->rValue = model->BSIM4v7Lmax; return(OK); case BSIM4v7_MOD_WINT: value->rValue = model->BSIM4v7Wint; return(OK); case BSIM4v7_MOD_WL: value->rValue = model->BSIM4v7Wl; return(OK); case BSIM4v7_MOD_WLC: value->rValue = model->BSIM4v7Wlc; return(OK); case BSIM4v7_MOD_WLN: value->rValue = model->BSIM4v7Wln; return(OK); case BSIM4v7_MOD_WW: value->rValue = model->BSIM4v7Ww; return(OK); case BSIM4v7_MOD_WWC: value->rValue = model->BSIM4v7Wwc; return(OK); case BSIM4v7_MOD_WWN: value->rValue = model->BSIM4v7Wwn; return(OK); case BSIM4v7_MOD_WWL: value->rValue = model->BSIM4v7Wwl; return(OK); case BSIM4v7_MOD_WWLC: value->rValue = model->BSIM4v7Wwlc; return(OK); case BSIM4v7_MOD_WMIN: value->rValue = model->BSIM4v7Wmin; return(OK); case BSIM4v7_MOD_WMAX: value->rValue = model->BSIM4v7Wmax; return(OK); /* stress effect */ case BSIM4v7_MOD_SAREF: value->rValue = model->BSIM4v7saref; return(OK); case BSIM4v7_MOD_SBREF: value->rValue = model->BSIM4v7sbref; return(OK); case BSIM4v7_MOD_WLOD: value->rValue = model->BSIM4v7wlod; return(OK); case BSIM4v7_MOD_KU0: value->rValue = model->BSIM4v7ku0; return(OK); case BSIM4v7_MOD_KVSAT: value->rValue = model->BSIM4v7kvsat; return(OK); case BSIM4v7_MOD_KVTH0: value->rValue = model->BSIM4v7kvth0; return(OK); case BSIM4v7_MOD_TKU0: value->rValue = model->BSIM4v7tku0; return(OK); case BSIM4v7_MOD_LLODKU0: value->rValue = model->BSIM4v7llodku0; return(OK); case BSIM4v7_MOD_WLODKU0: value->rValue = model->BSIM4v7wlodku0; return(OK); case BSIM4v7_MOD_LLODVTH: value->rValue = model->BSIM4v7llodvth; return(OK); case BSIM4v7_MOD_WLODVTH: value->rValue = model->BSIM4v7wlodvth; return(OK); case BSIM4v7_MOD_LKU0: value->rValue = model->BSIM4v7lku0; return(OK); case BSIM4v7_MOD_WKU0: value->rValue = model->BSIM4v7wku0; return(OK); case BSIM4v7_MOD_PKU0: value->rValue = model->BSIM4v7pku0; return(OK); case BSIM4v7_MOD_LKVTH0: value->rValue = model->BSIM4v7lkvth0; return(OK); case BSIM4v7_MOD_WKVTH0: value->rValue = model->BSIM4v7wkvth0; return(OK); case BSIM4v7_MOD_PKVTH0: value->rValue = model->BSIM4v7pkvth0; return(OK); case BSIM4v7_MOD_STK2: value->rValue = model->BSIM4v7stk2; return(OK); case BSIM4v7_MOD_LODK2: value->rValue = model->BSIM4v7lodk2; return(OK); case BSIM4v7_MOD_STETA0: value->rValue = model->BSIM4v7steta0; return(OK); case BSIM4v7_MOD_LODETA0: value->rValue = model->BSIM4v7lodeta0; return(OK); /* Well Proximity Effect */ case BSIM4v7_MOD_WEB: value->rValue = model->BSIM4v7web; return(OK); case BSIM4v7_MOD_WEC: value->rValue = model->BSIM4v7wec; return(OK); case BSIM4v7_MOD_KVTH0WE: value->rValue = model->BSIM4v7kvth0we; return(OK); case BSIM4v7_MOD_K2WE: value->rValue = model->BSIM4v7k2we; return(OK); case BSIM4v7_MOD_KU0WE: value->rValue = model->BSIM4v7ku0we; return(OK); case BSIM4v7_MOD_SCREF: value->rValue = model->BSIM4v7scref; return(OK); case BSIM4v7_MOD_WPEMOD: value->rValue = model->BSIM4v7wpemod; return(OK); case BSIM4v7_MOD_LKVTH0WE: value->rValue = model->BSIM4v7lkvth0we; return(OK); case BSIM4v7_MOD_LK2WE: value->rValue = model->BSIM4v7lk2we; return(OK); case BSIM4v7_MOD_LKU0WE: value->rValue = model->BSIM4v7lku0we; return(OK); case BSIM4v7_MOD_WKVTH0WE: value->rValue = model->BSIM4v7wkvth0we; return(OK); case BSIM4v7_MOD_WK2WE: value->rValue = model->BSIM4v7wk2we; return(OK); case BSIM4v7_MOD_WKU0WE: value->rValue = model->BSIM4v7wku0we; return(OK); case BSIM4v7_MOD_PKVTH0WE: value->rValue = model->BSIM4v7pkvth0we; return(OK); case BSIM4v7_MOD_PK2WE: value->rValue = model->BSIM4v7pk2we; return(OK); case BSIM4v7_MOD_PKU0WE: value->rValue = model->BSIM4v7pku0we; return(OK); case BSIM4v7_MOD_NOIA: value->rValue = model->BSIM4v7oxideTrapDensityA; return(OK); case BSIM4v7_MOD_NOIB: value->rValue = model->BSIM4v7oxideTrapDensityB; return(OK); case BSIM4v7_MOD_NOIC: value->rValue = model->BSIM4v7oxideTrapDensityC; return(OK); case BSIM4v7_MOD_EM: value->rValue = model->BSIM4v7em; return(OK); case BSIM4v7_MOD_EF: value->rValue = model->BSIM4v7ef; return(OK); case BSIM4v7_MOD_AF: value->rValue = model->BSIM4v7af; return(OK); case BSIM4v7_MOD_KF: value->rValue = model->BSIM4v7kf; return(OK); case BSIM4v7_MOD_VGS_MAX: value->rValue = model->BSIM4v7vgsMax; return(OK); case BSIM4v7_MOD_VGD_MAX: value->rValue = model->BSIM4v7vgdMax; return(OK); case BSIM4v7_MOD_VGB_MAX: value->rValue = model->BSIM4v7vgbMax; return(OK); case BSIM4v7_MOD_VDS_MAX: value->rValue = model->BSIM4v7vdsMax; return(OK); case BSIM4v7_MOD_VBS_MAX: value->rValue = model->BSIM4v7vbsMax; return(OK); case BSIM4v7_MOD_VBD_MAX: value->rValue = model->BSIM4v7vbdMax; return(OK); case BSIM4v7_MOD_VGSR_MAX: value->rValue = model->BSIM4v7vgsrMax; return(OK); case BSIM4v7_MOD_VGDR_MAX: value->rValue = model->BSIM4v7vgdrMax; return(OK); case BSIM4v7_MOD_VGBR_MAX: value->rValue = model->BSIM4v7vgbrMax; return(OK); case BSIM4v7_MOD_VBSR_MAX: value->rValue = model->BSIM4v7vbsrMax; return(OK); case BSIM4v7_MOD_VBDR_MAX: value->rValue = model->BSIM4v7vbdrMax; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim4v7/b4v7ld.c0000644000175000017500000073353313546075722021742 0ustar carstencarsten/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/ /**** OpenMP support ngspice 06/28/2010 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4ld.c of BSIM4.7.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Authors: 2008- Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. * Modified by Mohan Dunga, 12/13/2006. * Modified by Mohan Dunga, Wenwei Yang, 05/18/2007. * Modified by Wenwei Yang, 07/31/2008. * Modified by Tanvir Morshed, Darsen Lu 03/27/2011 **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4v7def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" #define MAX_EXPL 2.688117142e+43 #define MIN_EXPL 3.720075976e-44 #define EXPL_THRESHOLD 100.0 #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define EPS0 8.85418e-12 #define EPSSI 1.03594e-10 #define Charge_q 1.60219e-19 #define DELTA_1 0.02 #define DELTA_2 0.02 #define DELTA_3 0.02 #define DELTA_4 0.02 #define MM 3 /* smooth coeff */ #define DEXP(A,B,C) { \ if (A > EXP_THRESHOLD) { \ B = MAX_EXP*(1.0+(A)-EXP_THRESHOLD); \ C = MAX_EXP; \ } else if (A < -EXP_THRESHOLD) { \ B = MIN_EXP; \ C = 0; \ } else { \ B = exp(A); \ C = B; \ } \ } #ifdef USE_OMP int BSIM4v7LoadOMP(BSIM4v7instance *here, CKTcircuit *ckt); void BSIM4v7LoadRhsMat(GENmodel *inModel, CKTcircuit *ckt); #endif int BSIM4v7polyDepletion(double phi, double ngate,double epsgate, double coxe, double Vgs, double *Vgs_eff, double *dVgs_eff_dVg); int BSIM4v7load( GENmodel *inModel, CKTcircuit *ckt) { #ifdef USE_OMP int idx; BSIM4v7model *model = (BSIM4v7model*)inModel; int error = 0; BSIM4v7instance **InstArray; InstArray = model->BSIM4v7InstanceArray; #pragma omp parallel for for (idx = 0; idx < model->BSIM4v7InstCount; idx++) { BSIM4v7instance *here = InstArray[idx]; int local_error = BSIM4v7LoadOMP(here, ckt); if (local_error) error = local_error; } BSIM4v7LoadRhsMat(inModel, ckt); return error; } int BSIM4v7LoadOMP(BSIM4v7instance *here, CKTcircuit *ckt) { BSIM4v7model *model = BSIM4v7modPtr(here); #else BSIM4v7model *model = (BSIM4v7model*)inModel; BSIM4v7instance *here; #endif double ceqgstot, dgstot_dvd, dgstot_dvg, dgstot_dvs, dgstot_dvb; double ceqgdtot, dgdtot_dvd, dgdtot_dvg, dgdtot_dvs, dgdtot_dvb; double gstot, gstotd, gstotg, gstots, gstotb, gspr, Rs, Rd; double gdtot, gdtotd, gdtotg, gdtots, gdtotb, gdpr; double vgs_eff, vgd_eff, dvgs_eff_dvg, dvgd_eff_dvg; double dRs_dvg, dRd_dvg, dRs_dvb, dRd_dvb; double dT0_dvg, dT1_dvb, dT3_dvg, dT3_dvb; double vses, vdes, vdedo, delvses, delvded, delvdes; double Isestot, cseshat, Idedtot, cdedhat; #ifndef NEWCONV double tol0, tol1, tol2, tol3, tol4, tol5, tol6; #endif double geltd, gcrg, gcrgg, gcrgd, gcrgs, gcrgb, ceqgcrg; double vges, vgms, vgedo, vgmdo, vged, vgmd, delvged, delvgmd; double delvges, delvgms, vgmb; double gcgmgmb=0.0, gcgmdb=0.0, gcgmsb=0.0, gcdgmb, gcsgmb; double gcgmbb=0.0, gcbgmb, qgmb, qgmid=0.0, ceqqgmid; double vbd, vbs, vds, vgb, vgd, vgs, vgdo; #ifndef PREDICTOR double xfact; #endif double vdbs, vdbd, vsbs, vsbdo, vsbd; double delvdbs, delvdbd, delvsbs; double delvbd_jct, delvbs_jct, vbs_jct, vbd_jct; double SourceSatCurrent, DrainSatCurrent; double ag0, qgb, von, cbhat, VgstNVt, ExpVgst; double ceqqb, ceqqd, ceqqg, ceqqjd=0.0, ceqqjs=0.0, ceq, geq; double cdrain, cdhat, ceqdrn, ceqbd, ceqbs, ceqjd, ceqjs, gjbd, gjbs; double czbd, czbdsw, czbdswg, czbs, czbssw, czbsswg, evbd, evbs, arg, sarg; double delvbd, delvbs, delvds, delvgd, delvgs; double Vfbeff, dVfbeff_dVg, dVfbeff_dVb, V3, V4; double gcbdb, gcbgb, gcbsb, gcddb, gcdgb, gcdsb, gcgdb, gcggb, gcgsb, gcsdb; double gcgbb, gcdbb, gcsbb, gcbbb; double gcdbdb, gcsbsb; double gcsgb, gcssb, MJD, MJSWD, MJSWGD, MJS, MJSWS, MJSWGS; double qgate=0.0, qbulk=0.0, qdrn=0.0, qsrc, cqgate, cqbody, cqdrn; double Vdb, Vds, Vgs, Vbs, Gmbs, FwdSum, RevSum; double Igidl, Ggidld, Ggidlg, Ggidlb; double Voxacc=0.0, dVoxacc_dVg=0.0, dVoxacc_dVb=0.0; double Voxdepinv=0.0, dVoxdepinv_dVg=0.0, dVoxdepinv_dVd=0.0, dVoxdepinv_dVb=0.0; double VxNVt=0.0, ExpVxNVt, Vaux=0.0, dVaux_dVg=0.0, dVaux_dVd=0.0, dVaux_dVb=0.0; double Igc, dIgc_dVg, dIgc_dVd, dIgc_dVb; double Igcs, dIgcs_dVg, dIgcs_dVd, dIgcs_dVb; double Igcd, dIgcd_dVg, dIgcd_dVd, dIgcd_dVb; double Igs, dIgs_dVg, dIgs_dVs, Igd, dIgd_dVg, dIgd_dVd; double Igbacc, dIgbacc_dVg, dIgbacc_dVb; double Igbinv, dIgbinv_dVg, dIgbinv_dVd, dIgbinv_dVb; double Pigcd, dPigcd_dVg, dPigcd_dVd, dPigcd_dVb; double Istoteq, gIstotg, gIstotd, gIstots, gIstotb; double Idtoteq, gIdtotg, gIdtotd, gIdtots, gIdtotb; double Ibtoteq, gIbtotg, gIbtotd, gIbtots, gIbtotb; double Igtoteq, gIgtotg, gIgtotd, gIgtots, gIgtotb; double Igstot, cgshat, Igdtot, cgdhat, Igbtot, cgbhat; double Vgs_eff, Vfb=0.0, Vth_NarrowW; /* double Vgd_eff, dVgd_eff_dVg; v4.7.0 */ double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth, dVth_dVb, dVth_dVd; double Vgst, dVgst_dVg, dVgst_dVb, dVgs_eff_dVg, Nvtms, Nvtmd; double Vtm, Vtm0; double n, dn_dVb, dn_dVd, voffcv, noff, dnoff_dVd, dnoff_dVb; double V0, CoxWLcen, QovCox, LINK; double DeltaPhi, dDeltaPhi_dVg, VgDP, dVgDP_dVg; double Cox, Tox, Tcen, dTcen_dVg, dTcen_dVd, dTcen_dVb; double Ccen, Coxeff, dCoxeff_dVd, dCoxeff_dVg, dCoxeff_dVb; double Denomi, dDenomi_dVg, dDenomi_dVd, dDenomi_dVb; double ueff, dueff_dVg, dueff_dVd, dueff_dVb; double Esat, Vdsat; double EsatL, dEsatL_dVg, dEsatL_dVd, dEsatL_dVb; double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, Vasat, dAlphaz_dVg, dAlphaz_dVb; double dVasat_dVg, dVasat_dVb, dVasat_dVd, Va, dVa_dVd, dVa_dVg, dVa_dVb; double Vbseff, dVbseff_dVb, VbseffCV, dVbseffCV_dVb; double VgsteffVth, dT11_dVg; double Arg1, One_Third_CoxWL, Two_Third_CoxWL, Alphaz, CoxWL; double T0=0.0, dT0_dVg, dT0_dVd, dT0_dVb; double T1, dT1_dVg, dT1_dVd, dT1_dVb; double T2, dT2_dVg, dT2_dVd, dT2_dVb; double T3, dT3_dVg, dT3_dVd, dT3_dVb; double T4, dT4_dVd, dT4_dVb; double T5, dT5_dVg, dT5_dVd, dT5_dVb; double T6, dT6_dVg, dT6_dVd, dT6_dVb; double T7, dT7_dVg, dT7_dVd, dT7_dVb; double T8, dT8_dVg, dT8_dVd, dT8_dVb; double T9, dT9_dVg, dT9_dVd, dT9_dVb; double T10, dT10_dVg, dT10_dVb, dT10_dVd; double T11, T12, T13, T14; double tmp, Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVb; double Cclm, dCclm_dVg, dCclm_dVd, dCclm_dVb; double FP, dFP_dVg, PvagTerm, dPvagTerm_dVg, dPvagTerm_dVd, dPvagTerm_dVb; double VADITS, dVADITS_dVg, dVADITS_dVd; double Lpe_Vb, dDITS_Sft_dVb, dDITS_Sft_dVd; double DITS_Sft2, dDITS_Sft2_dVd; /* v4.7 New DITS */ double VACLM, dVACLM_dVg, dVACLM_dVd, dVACLM_dVb; double VADIBL, dVADIBL_dVg, dVADIBL_dVd, dVADIBL_dVb; double Xdep, dXdep_dVb, lt1, dlt1_dVb, ltw, dltw_dVb, Delt_vth, dDelt_vth_dVb; double Theta0, dTheta0_dVb; double TempRatio, tmp1, tmp2, tmp3, tmp4; double DIBL_Sft, dDIBL_Sft_dVd, Lambda, dLambda_dVg; double Idtot, Ibtot, a1, ScalingFactor; double Vgsteff, dVgsteff_dVg, dVgsteff_dVd, dVgsteff_dVb; double Vdseff, dVdseff_dVg, dVdseff_dVd, dVdseff_dVb; double VdseffCV, dVdseffCV_dVg, dVdseffCV_dVd, dVdseffCV_dVb; double diffVds, dAbulk_dVg; double beta, dbeta_dVg, dbeta_dVd, dbeta_dVb; double gche, dgche_dVg, dgche_dVd, dgche_dVb; double fgche1, dfgche1_dVg, dfgche1_dVd, dfgche1_dVb; double fgche2, dfgche2_dVg, dfgche2_dVd, dfgche2_dVb; double Idl, dIdl_dVg, dIdl_dVd, dIdl_dVb; double Idsa, dIdsa_dVg, dIdsa_dVd, dIdsa_dVb; double Ids, Gm, Gds, Gmb, devbs_dvb, devbd_dvb; double Isub, Gbd, Gbg, Gbb; double VASCBE, dVASCBE_dVg, dVASCBE_dVd, dVASCBE_dVb; double CoxeffWovL; double Rds, dRds_dVg, dRds_dVb, WVCox, WVCoxRds; double Vgst2Vtm, VdsatCV; double Leff, Weff, dWeff_dVg, dWeff_dVb; double AbulkCV, dAbulkCV_dVb; double qcheq, qdef, gqdef=0.0, cqdef=0.0, cqcheq=0.0; double gcqdb=0.0, gcqsb=0.0, gcqgb=0.0, gcqbb=0.0; double dxpart, sxpart, ggtg, ggtd, ggts, ggtb; double ddxpart_dVd, ddxpart_dVg, ddxpart_dVb, ddxpart_dVs; double dsxpart_dVd, dsxpart_dVg, dsxpart_dVb, dsxpart_dVs; double gbspsp, gbbdp, gbbsp, gbspg, gbspb, gbspdp; double gbdpdp, gbdpg, gbdpb, gbdpsp; double qgdo, qgso, cgdo, cgso; double Cgg, Cgd, Cgb, Cdg, Cdd, Cds; double Csg, Csd, Css, Csb, Cbg, Cbd, Cbb; double Cgg1, Cgd1, Cgb1, Cbg1, Cbb1, Cbd1, Qac0, Qsub0; double dQac0_dVg, dQac0_dVb, dQsub0_dVg, dQsub0_dVd, dQsub0_dVb; double ggidld, ggidlg, ggidlb, ggislg, ggislb, ggisls; double Igisl, Ggislg, Ggislb, Ggisls; double Nvtmrss, Nvtmrssws, Nvtmrsswgs; double Nvtmrsd, Nvtmrsswd, Nvtmrsswgd; double vs, Fsevl, dvs_dVg, dvs_dVd, dvs_dVb, dFsevl_dVg, dFsevl_dVd, dFsevl_dVb; double vgdx, vgsx, epssub, toxe, epsrox; struct bsim4SizeDependParam *pParam; int ByPass, ChargeComputationNeeded, error, Check, Check1, Check2; double m; ScalingFactor = 1.0e-9; ChargeComputationNeeded = ((ckt->CKTmode & (MODEDCTRANCURVE | MODEAC | MODETRAN | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) ? 1 : 0; #ifndef USE_OMP for (; model != NULL; model = BSIM4v7nextModel(model)) { for (here = BSIM4v7instances(model); here != NULL; here = BSIM4v7nextInstance(here)) { #endif Check = Check1 = Check2 = 1; ByPass = 0; pParam = here->pParam; if ((ckt->CKTmode & MODEINITSMSIG)) { vds = *(ckt->CKTstate0 + here->BSIM4v7vds); vgs = *(ckt->CKTstate0 + here->BSIM4v7vgs); vbs = *(ckt->CKTstate0 + here->BSIM4v7vbs); vges = *(ckt->CKTstate0 + here->BSIM4v7vges); vgms = *(ckt->CKTstate0 + here->BSIM4v7vgms); vdbs = *(ckt->CKTstate0 + here->BSIM4v7vdbs); vsbs = *(ckt->CKTstate0 + here->BSIM4v7vsbs); vses = *(ckt->CKTstate0 + here->BSIM4v7vses); vdes = *(ckt->CKTstate0 + here->BSIM4v7vdes); qdef = *(ckt->CKTstate0 + here->BSIM4v7qdef); } else if ((ckt->CKTmode & MODEINITTRAN)) { vds = *(ckt->CKTstate1 + here->BSIM4v7vds); vgs = *(ckt->CKTstate1 + here->BSIM4v7vgs); vbs = *(ckt->CKTstate1 + here->BSIM4v7vbs); vges = *(ckt->CKTstate1 + here->BSIM4v7vges); vgms = *(ckt->CKTstate1 + here->BSIM4v7vgms); vdbs = *(ckt->CKTstate1 + here->BSIM4v7vdbs); vsbs = *(ckt->CKTstate1 + here->BSIM4v7vsbs); vses = *(ckt->CKTstate1 + here->BSIM4v7vses); vdes = *(ckt->CKTstate1 + here->BSIM4v7vdes); qdef = *(ckt->CKTstate1 + here->BSIM4v7qdef); } else if ((ckt->CKTmode & MODEINITJCT) && !here->BSIM4v7off) { vds = model->BSIM4v7type * here->BSIM4v7icVDS; vgs = vges = vgms = model->BSIM4v7type * here->BSIM4v7icVGS; vbs = vdbs = vsbs = model->BSIM4v7type * here->BSIM4v7icVBS; if (vds > 0.0) { vdes = vds + 0.01; vses = -0.01; } else if (vds < 0.0) { vdes = vds - 0.01; vses = 0.01; } else vdes = vses = 0.0; qdef = 0.0; if ((vds == 0.0) && (vgs == 0.0) && (vbs == 0.0) && ((ckt->CKTmode & (MODETRAN | MODEAC|MODEDCOP | MODEDCTRANCURVE)) || (!(ckt->CKTmode & MODEUIC)))) { vds = 0.1; vdes = 0.11; vses = -0.01; vgs = vges = vgms = model->BSIM4v7type * here->BSIM4v7vth0 + 0.1; vbs = vdbs = vsbs = 0.0; } } else if ((ckt->CKTmode & (MODEINITJCT | MODEINITFIX)) && (here->BSIM4v7off)) { vds = vgs = vbs = vges = vgms = 0.0; vdbs = vsbs = vdes = vses = qdef = 0.0; } else { #ifndef PREDICTOR if ((ckt->CKTmode & MODEINITPRED)) { xfact = ckt->CKTdelta / ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->BSIM4v7vds) = *(ckt->CKTstate1 + here->BSIM4v7vds); vds = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v7vds)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v7vds))); *(ckt->CKTstate0 + here->BSIM4v7vgs) = *(ckt->CKTstate1 + here->BSIM4v7vgs); vgs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v7vgs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v7vgs))); *(ckt->CKTstate0 + here->BSIM4v7vges) = *(ckt->CKTstate1 + here->BSIM4v7vges); vges = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v7vges)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v7vges))); *(ckt->CKTstate0 + here->BSIM4v7vgms) = *(ckt->CKTstate1 + here->BSIM4v7vgms); vgms = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v7vgms)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v7vgms))); *(ckt->CKTstate0 + here->BSIM4v7vbs) = *(ckt->CKTstate1 + here->BSIM4v7vbs); vbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v7vbs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v7vbs))); *(ckt->CKTstate0 + here->BSIM4v7vbd) = *(ckt->CKTstate0 + here->BSIM4v7vbs) - *(ckt->CKTstate0 + here->BSIM4v7vds); *(ckt->CKTstate0 + here->BSIM4v7vdbs) = *(ckt->CKTstate1 + here->BSIM4v7vdbs); vdbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v7vdbs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v7vdbs))); *(ckt->CKTstate0 + here->BSIM4v7vdbd) = *(ckt->CKTstate0 + here->BSIM4v7vdbs) - *(ckt->CKTstate0 + here->BSIM4v7vds); *(ckt->CKTstate0 + here->BSIM4v7vsbs) = *(ckt->CKTstate1 + here->BSIM4v7vsbs); vsbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v7vsbs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v7vsbs))); *(ckt->CKTstate0 + here->BSIM4v7vses) = *(ckt->CKTstate1 + here->BSIM4v7vses); vses = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v7vses)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v7vses))); *(ckt->CKTstate0 + here->BSIM4v7vdes) = *(ckt->CKTstate1 + here->BSIM4v7vdes); vdes = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v7vdes)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v7vdes))); *(ckt->CKTstate0 + here->BSIM4v7qdef) = *(ckt->CKTstate1 + here->BSIM4v7qdef); qdef = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v7qdef)) -(xfact * (*(ckt->CKTstate2 + here->BSIM4v7qdef))); } else { #endif /* PREDICTOR */ vds = model->BSIM4v7type * (*(ckt->CKTrhsOld + here->BSIM4v7dNodePrime) - *(ckt->CKTrhsOld + here->BSIM4v7sNodePrime)); vgs = model->BSIM4v7type * (*(ckt->CKTrhsOld + here->BSIM4v7gNodePrime) - *(ckt->CKTrhsOld + here->BSIM4v7sNodePrime)); vbs = model->BSIM4v7type * (*(ckt->CKTrhsOld + here->BSIM4v7bNodePrime) - *(ckt->CKTrhsOld + here->BSIM4v7sNodePrime)); vges = model->BSIM4v7type * (*(ckt->CKTrhsOld + here->BSIM4v7gNodeExt) - *(ckt->CKTrhsOld + here->BSIM4v7sNodePrime)); vgms = model->BSIM4v7type * (*(ckt->CKTrhsOld + here->BSIM4v7gNodeMid) - *(ckt->CKTrhsOld + here->BSIM4v7sNodePrime)); vdbs = model->BSIM4v7type * (*(ckt->CKTrhsOld + here->BSIM4v7dbNode) - *(ckt->CKTrhsOld + here->BSIM4v7sNodePrime)); vsbs = model->BSIM4v7type * (*(ckt->CKTrhsOld + here->BSIM4v7sbNode) - *(ckt->CKTrhsOld + here->BSIM4v7sNodePrime)); vses = model->BSIM4v7type * (*(ckt->CKTrhsOld + here->BSIM4v7sNode) - *(ckt->CKTrhsOld + here->BSIM4v7sNodePrime)); vdes = model->BSIM4v7type * (*(ckt->CKTrhsOld + here->BSIM4v7dNode) - *(ckt->CKTrhsOld + here->BSIM4v7sNodePrime)); qdef = model->BSIM4v7type * (*(ckt->CKTrhsOld + here->BSIM4v7qNode)); #ifndef PREDICTOR } #endif /* PREDICTOR */ vgdo = *(ckt->CKTstate0 + here->BSIM4v7vgs) - *(ckt->CKTstate0 + here->BSIM4v7vds); vgedo = *(ckt->CKTstate0 + here->BSIM4v7vges) - *(ckt->CKTstate0 + here->BSIM4v7vds); vgmdo = *(ckt->CKTstate0 + here->BSIM4v7vgms) - *(ckt->CKTstate0 + here->BSIM4v7vds); vbd = vbs - vds; vdbd = vdbs - vds; vgd = vgs - vds; vged = vges - vds; vgmd = vgms - vds; delvbd = vbd - *(ckt->CKTstate0 + here->BSIM4v7vbd); delvdbd = vdbd - *(ckt->CKTstate0 + here->BSIM4v7vdbd); delvgd = vgd - vgdo; delvged = vged - vgedo; delvgmd = vgmd - vgmdo; delvds = vds - *(ckt->CKTstate0 + here->BSIM4v7vds); delvgs = vgs - *(ckt->CKTstate0 + here->BSIM4v7vgs); delvges = vges - *(ckt->CKTstate0 + here->BSIM4v7vges); delvgms = vgms - *(ckt->CKTstate0 + here->BSIM4v7vgms); delvbs = vbs - *(ckt->CKTstate0 + here->BSIM4v7vbs); delvdbs = vdbs - *(ckt->CKTstate0 + here->BSIM4v7vdbs); delvsbs = vsbs - *(ckt->CKTstate0 + here->BSIM4v7vsbs); delvses = vses - (*(ckt->CKTstate0 + here->BSIM4v7vses)); vdedo = *(ckt->CKTstate0 + here->BSIM4v7vdes) - *(ckt->CKTstate0 + here->BSIM4v7vds); delvdes = vdes - *(ckt->CKTstate0 + here->BSIM4v7vdes); delvded = vdes - vds - vdedo; delvbd_jct = (!here->BSIM4v7rbodyMod) ? delvbd : delvdbd; delvbs_jct = (!here->BSIM4v7rbodyMod) ? delvbs : delvsbs; if (here->BSIM4v7mode >= 0) { Idtot = here->BSIM4v7cd + here->BSIM4v7csub - here->BSIM4v7cbd + here->BSIM4v7Igidl; cdhat = Idtot - here->BSIM4v7gbd * delvbd_jct + (here->BSIM4v7gmbs + here->BSIM4v7gbbs + here->BSIM4v7ggidlb) * delvbs + (here->BSIM4v7gm + here->BSIM4v7gbgs + here->BSIM4v7ggidlg) * delvgs + (here->BSIM4v7gds + here->BSIM4v7gbds + here->BSIM4v7ggidld) * delvds; Ibtot = here->BSIM4v7cbs + here->BSIM4v7cbd - here->BSIM4v7Igidl - here->BSIM4v7Igisl - here->BSIM4v7csub; cbhat = Ibtot + here->BSIM4v7gbd * delvbd_jct + here->BSIM4v7gbs * delvbs_jct - (here->BSIM4v7gbbs + here->BSIM4v7ggidlb) * delvbs - (here->BSIM4v7gbgs + here->BSIM4v7ggidlg) * delvgs - (here->BSIM4v7gbds + here->BSIM4v7ggidld - here->BSIM4v7ggisls) * delvds - here->BSIM4v7ggislg * delvgd - here->BSIM4v7ggislb* delvbd; Igstot = here->BSIM4v7Igs + here->BSIM4v7Igcs; cgshat = Igstot + (here->BSIM4v7gIgsg + here->BSIM4v7gIgcsg) * delvgs + here->BSIM4v7gIgcsd * delvds + here->BSIM4v7gIgcsb * delvbs; Igdtot = here->BSIM4v7Igd + here->BSIM4v7Igcd; cgdhat = Igdtot + here->BSIM4v7gIgdg * delvgd + here->BSIM4v7gIgcdg * delvgs + here->BSIM4v7gIgcdd * delvds + here->BSIM4v7gIgcdb * delvbs; Igbtot = here->BSIM4v7Igb; cgbhat = here->BSIM4v7Igb + here->BSIM4v7gIgbg * delvgs + here->BSIM4v7gIgbd * delvds + here->BSIM4v7gIgbb * delvbs; } else { Idtot = here->BSIM4v7cd + here->BSIM4v7cbd - here->BSIM4v7Igidl; /* bugfix */ cdhat = Idtot + here->BSIM4v7gbd * delvbd_jct + here->BSIM4v7gmbs * delvbd + here->BSIM4v7gm * delvgd - (here->BSIM4v7gds + here->BSIM4v7ggidls) * delvds - here->BSIM4v7ggidlg * delvgs - here->BSIM4v7ggidlb * delvbs; Ibtot = here->BSIM4v7cbs + here->BSIM4v7cbd - here->BSIM4v7Igidl - here->BSIM4v7Igisl - here->BSIM4v7csub; cbhat = Ibtot + here->BSIM4v7gbs * delvbs_jct + here->BSIM4v7gbd * delvbd_jct - (here->BSIM4v7gbbs + here->BSIM4v7ggislb) * delvbd - (here->BSIM4v7gbgs + here->BSIM4v7ggislg) * delvgd + (here->BSIM4v7gbds + here->BSIM4v7ggisld - here->BSIM4v7ggidls) * delvds - here->BSIM4v7ggidlg * delvgs - here->BSIM4v7ggidlb * delvbs; Igstot = here->BSIM4v7Igs + here->BSIM4v7Igcd; cgshat = Igstot + here->BSIM4v7gIgsg * delvgs + here->BSIM4v7gIgcdg * delvgd - here->BSIM4v7gIgcdd * delvds + here->BSIM4v7gIgcdb * delvbd; Igdtot = here->BSIM4v7Igd + here->BSIM4v7Igcs; cgdhat = Igdtot + (here->BSIM4v7gIgdg + here->BSIM4v7gIgcsg) * delvgd - here->BSIM4v7gIgcsd * delvds + here->BSIM4v7gIgcsb * delvbd; Igbtot = here->BSIM4v7Igb; cgbhat = here->BSIM4v7Igb + here->BSIM4v7gIgbg * delvgd - here->BSIM4v7gIgbd * delvds + here->BSIM4v7gIgbb * delvbd; } Isestot = here->BSIM4v7gstot * (*(ckt->CKTstate0 + here->BSIM4v7vses)); cseshat = Isestot + here->BSIM4v7gstot * delvses + here->BSIM4v7gstotd * delvds + here->BSIM4v7gstotg * delvgs + here->BSIM4v7gstotb * delvbs; Idedtot = here->BSIM4v7gdtot * vdedo; cdedhat = Idedtot + here->BSIM4v7gdtot * delvded + here->BSIM4v7gdtotd * delvds + here->BSIM4v7gdtotg * delvgs + here->BSIM4v7gdtotb * delvbs; #ifndef NOBYPASS /* Following should be one IF statement, but some C compilers * can't handle that all at once, so we split it into several * successive IF's */ if ((!(ckt->CKTmode & MODEINITPRED)) && (ckt->CKTbypass)) if ((fabs(delvds) < (ckt->CKTreltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0 + here->BSIM4v7vds))) + ckt->CKTvoltTol))) if ((fabs(delvgs) < (ckt->CKTreltol * MAX(fabs(vgs), fabs(*(ckt->CKTstate0 + here->BSIM4v7vgs))) + ckt->CKTvoltTol))) if ((fabs(delvbs) < (ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0 + here->BSIM4v7vbs))) + ckt->CKTvoltTol))) if ((fabs(delvbd) < (ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0 + here->BSIM4v7vbd))) + ckt->CKTvoltTol))) if ((here->BSIM4v7rgateMod == 0) || (here->BSIM4v7rgateMod == 1) || (fabs(delvges) < (ckt->CKTreltol * MAX(fabs(vges), fabs(*(ckt->CKTstate0 + here->BSIM4v7vges))) + ckt->CKTvoltTol))) if ((here->BSIM4v7rgateMod != 3) || (fabs(delvgms) < (ckt->CKTreltol * MAX(fabs(vgms), fabs(*(ckt->CKTstate0 + here->BSIM4v7vgms))) + ckt->CKTvoltTol))) if ((!here->BSIM4v7rbodyMod) || (fabs(delvdbs) < (ckt->CKTreltol * MAX(fabs(vdbs), fabs(*(ckt->CKTstate0 + here->BSIM4v7vdbs))) + ckt->CKTvoltTol))) if ((!here->BSIM4v7rbodyMod) || (fabs(delvdbd) < (ckt->CKTreltol * MAX(fabs(vdbd), fabs(*(ckt->CKTstate0 + here->BSIM4v7vdbd))) + ckt->CKTvoltTol))) if ((!here->BSIM4v7rbodyMod) || (fabs(delvsbs) < (ckt->CKTreltol * MAX(fabs(vsbs), fabs(*(ckt->CKTstate0 + here->BSIM4v7vsbs))) + ckt->CKTvoltTol))) if ((!model->BSIM4v7rdsMod) || (fabs(delvses) < (ckt->CKTreltol * MAX(fabs(vses), fabs(*(ckt->CKTstate0 + here->BSIM4v7vses))) + ckt->CKTvoltTol))) if ((!model->BSIM4v7rdsMod) || (fabs(delvdes) < (ckt->CKTreltol * MAX(fabs(vdes), fabs(*(ckt->CKTstate0 + here->BSIM4v7vdes))) + ckt->CKTvoltTol))) if ((fabs(cdhat - Idtot) < ckt->CKTreltol * MAX(fabs(cdhat), fabs(Idtot)) + ckt->CKTabstol)) if ((fabs(cbhat - Ibtot) < ckt->CKTreltol * MAX(fabs(cbhat), fabs(Ibtot)) + ckt->CKTabstol)) if ((!model->BSIM4v7igcMod) || ((fabs(cgshat - Igstot) < ckt->CKTreltol * MAX(fabs(cgshat), fabs(Igstot)) + ckt->CKTabstol))) if ((!model->BSIM4v7igcMod) || ((fabs(cgdhat - Igdtot) < ckt->CKTreltol * MAX(fabs(cgdhat), fabs(Igdtot)) + ckt->CKTabstol))) if ((!model->BSIM4v7igbMod) || ((fabs(cgbhat - Igbtot) < ckt->CKTreltol * MAX(fabs(cgbhat), fabs(Igbtot)) + ckt->CKTabstol))) if ((!model->BSIM4v7rdsMod) || ((fabs(cseshat - Isestot) < ckt->CKTreltol * MAX(fabs(cseshat), fabs(Isestot)) + ckt->CKTabstol))) if ((!model->BSIM4v7rdsMod) || ((fabs(cdedhat - Idedtot) < ckt->CKTreltol * MAX(fabs(cdedhat), fabs(Idedtot)) + ckt->CKTabstol))) { vds = *(ckt->CKTstate0 + here->BSIM4v7vds); vgs = *(ckt->CKTstate0 + here->BSIM4v7vgs); vbs = *(ckt->CKTstate0 + here->BSIM4v7vbs); vges = *(ckt->CKTstate0 + here->BSIM4v7vges); vgms = *(ckt->CKTstate0 + here->BSIM4v7vgms); vbd = *(ckt->CKTstate0 + here->BSIM4v7vbd); vdbs = *(ckt->CKTstate0 + here->BSIM4v7vdbs); vdbd = *(ckt->CKTstate0 + here->BSIM4v7vdbd); vsbs = *(ckt->CKTstate0 + here->BSIM4v7vsbs); vses = *(ckt->CKTstate0 + here->BSIM4v7vses); vdes = *(ckt->CKTstate0 + here->BSIM4v7vdes); vgd = vgs - vds; vgb = vgs - vbs; vged = vges - vds; vgmd = vgms - vds; vgmb = vgms - vbs; vbs_jct = (!here->BSIM4v7rbodyMod) ? vbs : vsbs; vbd_jct = (!here->BSIM4v7rbodyMod) ? vbd : vdbd; /*** qdef should not be kept fixed even if vgs, vds & vbs has converged **** qdef = *(ckt->CKTstate0 + here->BSIM4v7qdef); ***/ cdrain = here->BSIM4v7cd; if ((ckt->CKTmode & (MODETRAN | MODEAC)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) { ByPass = 1; qgate = here->BSIM4v7qgate; qbulk = here->BSIM4v7qbulk; qdrn = here->BSIM4v7qdrn; cgdo = here->BSIM4v7cgdo; qgdo = here->BSIM4v7qgdo; cgso = here->BSIM4v7cgso; qgso = here->BSIM4v7qgso; goto line755; } else goto line850; } #endif /*NOBYPASS*/ von = here->BSIM4v7von; if (*(ckt->CKTstate0 + here->BSIM4v7vds) >= 0.0) { vgs = DEVfetlim(vgs, *(ckt->CKTstate0 + here->BSIM4v7vgs), von); vds = vgs - vgd; vds = DEVlimvds(vds, *(ckt->CKTstate0 + here->BSIM4v7vds)); vgd = vgs - vds; if (here->BSIM4v7rgateMod == 3) { vges = DEVfetlim(vges, *(ckt->CKTstate0 + here->BSIM4v7vges), von); vgms = DEVfetlim(vgms, *(ckt->CKTstate0 + here->BSIM4v7vgms), von); vged = vges - vds; vgmd = vgms - vds; } else if ((here->BSIM4v7rgateMod == 1) || (here->BSIM4v7rgateMod == 2)) { vges = DEVfetlim(vges, *(ckt->CKTstate0 + here->BSIM4v7vges), von); vged = vges - vds; } if (model->BSIM4v7rdsMod) { vdes = DEVlimvds(vdes, *(ckt->CKTstate0 + here->BSIM4v7vdes)); vses = -DEVlimvds(-vses, -(*(ckt->CKTstate0 + here->BSIM4v7vses))); } } else { vgd = DEVfetlim(vgd, vgdo, von); vds = vgs - vgd; vds = -DEVlimvds(-vds, -(*(ckt->CKTstate0 + here->BSIM4v7vds))); vgs = vgd + vds; if (here->BSIM4v7rgateMod == 3) { vged = DEVfetlim(vged, vgedo, von); vges = vged + vds; vgmd = DEVfetlim(vgmd, vgmdo, von); vgms = vgmd + vds; } if ((here->BSIM4v7rgateMod == 1) || (here->BSIM4v7rgateMod == 2)) { vged = DEVfetlim(vged, vgedo, von); vges = vged + vds; } if (model->BSIM4v7rdsMod) { vdes = -DEVlimvds(-vdes, -(*(ckt->CKTstate0 + here->BSIM4v7vdes))); vses = DEVlimvds(vses, *(ckt->CKTstate0 + here->BSIM4v7vses)); } } if (vds >= 0.0) { vbs = DEVpnjlim(vbs, *(ckt->CKTstate0 + here->BSIM4v7vbs), CONSTvt0, model->BSIM4v7vcrit, &Check); vbd = vbs - vds; if (here->BSIM4v7rbodyMod) { vdbs = DEVpnjlim(vdbs, *(ckt->CKTstate0 + here->BSIM4v7vdbs), CONSTvt0, model->BSIM4v7vcrit, &Check1); vdbd = vdbs - vds; vsbs = DEVpnjlim(vsbs, *(ckt->CKTstate0 + here->BSIM4v7vsbs), CONSTvt0, model->BSIM4v7vcrit, &Check2); if ((Check1 == 0) && (Check2 == 0)) Check = 0; else Check = 1; } } else { vbd = DEVpnjlim(vbd, *(ckt->CKTstate0 + here->BSIM4v7vbd), CONSTvt0, model->BSIM4v7vcrit, &Check); vbs = vbd + vds; if (here->BSIM4v7rbodyMod) { vdbd = DEVpnjlim(vdbd, *(ckt->CKTstate0 + here->BSIM4v7vdbd), CONSTvt0, model->BSIM4v7vcrit, &Check1); vdbs = vdbd + vds; vsbdo = *(ckt->CKTstate0 + here->BSIM4v7vsbs) - *(ckt->CKTstate0 + here->BSIM4v7vds); vsbd = vsbs - vds; vsbd = DEVpnjlim(vsbd, vsbdo, CONSTvt0, model->BSIM4v7vcrit, &Check2); vsbs = vsbd + vds; if ((Check1 == 0) && (Check2 == 0)) Check = 0; else Check = 1; } } } /* Calculate DC currents and their derivatives */ vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; vged = vges - vds; vgmd = vgms - vds; vgmb = vgms - vbs; vdbd = vdbs - vds; vbs_jct = (!here->BSIM4v7rbodyMod) ? vbs : vsbs; vbd_jct = (!here->BSIM4v7rbodyMod) ? vbd : vdbd; /* Source/drain junction diode DC model begins */ Nvtms = model->BSIM4v7vtm * model->BSIM4v7SjctEmissionCoeff; /* if ((here->BSIM4v7Aseff <= 0.0) && (here->BSIM4v7Pseff <= 0.0)) { SourceSatCurrent = 1.0e-14; } v4.7 */ if ((here->BSIM4v7Aseff <= 0.0) && (here->BSIM4v7Pseff <= 0.0)) { SourceSatCurrent = 0.0; } else { SourceSatCurrent = here->BSIM4v7Aseff * model->BSIM4v7SjctTempSatCurDensity + here->BSIM4v7Pseff * model->BSIM4v7SjctSidewallTempSatCurDensity + pParam->BSIM4v7weffCJ * here->BSIM4v7nf * model->BSIM4v7SjctGateSidewallTempSatCurDensity; } if (SourceSatCurrent <= 0.0) { here->BSIM4v7gbs = ckt->CKTgmin; here->BSIM4v7cbs = here->BSIM4v7gbs * vbs_jct; } else { switch(model->BSIM4v7dioMod) { case 0: evbs = exp(vbs_jct / Nvtms); T1 = model->BSIM4v7xjbvs * exp(-(model->BSIM4v7bvs + vbs_jct) / Nvtms); /* WDLiu: Magic T1 in this form; different from BSIM4v7 beta. */ here->BSIM4v7gbs = SourceSatCurrent * (evbs + T1) / Nvtms + ckt->CKTgmin; here->BSIM4v7cbs = SourceSatCurrent * (evbs + here->BSIM4v7XExpBVS - T1 - 1.0) + ckt->CKTgmin * vbs_jct; break; case 1: T2 = vbs_jct / Nvtms; if (T2 < -EXP_THRESHOLD) { here->BSIM4v7gbs = ckt->CKTgmin; here->BSIM4v7cbs = SourceSatCurrent * (MIN_EXP - 1.0) + ckt->CKTgmin * vbs_jct; } else if (vbs_jct <= here->BSIM4v7vjsmFwd) { evbs = exp(T2); here->BSIM4v7gbs = SourceSatCurrent * evbs / Nvtms + ckt->CKTgmin; here->BSIM4v7cbs = SourceSatCurrent * (evbs - 1.0) + ckt->CKTgmin * vbs_jct; } else { T0 = here->BSIM4v7IVjsmFwd / Nvtms; here->BSIM4v7gbs = T0 + ckt->CKTgmin; here->BSIM4v7cbs = here->BSIM4v7IVjsmFwd - SourceSatCurrent + T0 * (vbs_jct - here->BSIM4v7vjsmFwd) + ckt->CKTgmin * vbs_jct; } break; case 2: if (vbs_jct < here->BSIM4v7vjsmRev) { T0 = vbs_jct / Nvtms; if (T0 < -EXP_THRESHOLD) { evbs = MIN_EXP; devbs_dvb = 0.0; } else { evbs = exp(T0); devbs_dvb = evbs / Nvtms; } T1 = evbs - 1.0; T2 = here->BSIM4v7IVjsmRev + here->BSIM4v7SslpRev * (vbs_jct - here->BSIM4v7vjsmRev); here->BSIM4v7gbs = devbs_dvb * T2 + T1 * here->BSIM4v7SslpRev + ckt->CKTgmin; here->BSIM4v7cbs = T1 * T2 + ckt->CKTgmin * vbs_jct; } else if (vbs_jct <= here->BSIM4v7vjsmFwd) { T0 = vbs_jct / Nvtms; if (T0 < -EXP_THRESHOLD) { evbs = MIN_EXP; devbs_dvb = 0.0; } else { evbs = exp(T0); devbs_dvb = evbs / Nvtms; } T1 = (model->BSIM4v7bvs + vbs_jct) / Nvtms; if (T1 > EXP_THRESHOLD) { T2 = MIN_EXP; T3 = 0.0; } else { T2 = exp(-T1); T3 = -T2 /Nvtms; } here->BSIM4v7gbs = SourceSatCurrent * (devbs_dvb - model->BSIM4v7xjbvs * T3) + ckt->CKTgmin; here->BSIM4v7cbs = SourceSatCurrent * (evbs + here->BSIM4v7XExpBVS - 1.0 - model->BSIM4v7xjbvs * T2) + ckt->CKTgmin * vbs_jct; } else { here->BSIM4v7gbs = here->BSIM4v7SslpFwd + ckt->CKTgmin; here->BSIM4v7cbs = here->BSIM4v7IVjsmFwd + here->BSIM4v7SslpFwd * (vbs_jct - here->BSIM4v7vjsmFwd) + ckt->CKTgmin * vbs_jct; } break; default: break; } } Nvtmd = model->BSIM4v7vtm * model->BSIM4v7DjctEmissionCoeff; /* if ((here->BSIM4v7Adeff <= 0.0) && (here->BSIM4v7Pdeff <= 0.0)) { DrainSatCurrent = 1.0e-14; } v4.7 */ if ((here->BSIM4v7Adeff <= 0.0) && (here->BSIM4v7Pdeff <= 0.0)) { DrainSatCurrent = 0.0; } else { DrainSatCurrent = here->BSIM4v7Adeff * model->BSIM4v7DjctTempSatCurDensity + here->BSIM4v7Pdeff * model->BSIM4v7DjctSidewallTempSatCurDensity + pParam->BSIM4v7weffCJ * here->BSIM4v7nf * model->BSIM4v7DjctGateSidewallTempSatCurDensity; } if (DrainSatCurrent <= 0.0) { here->BSIM4v7gbd = ckt->CKTgmin; here->BSIM4v7cbd = here->BSIM4v7gbd * vbd_jct; } else { switch(model->BSIM4v7dioMod) { case 0: evbd = exp(vbd_jct / Nvtmd); T1 = model->BSIM4v7xjbvd * exp(-(model->BSIM4v7bvd + vbd_jct) / Nvtmd); /* WDLiu: Magic T1 in this form; different from BSIM4v7 beta. */ here->BSIM4v7gbd = DrainSatCurrent * (evbd + T1) / Nvtmd + ckt->CKTgmin; here->BSIM4v7cbd = DrainSatCurrent * (evbd + here->BSIM4v7XExpBVD - T1 - 1.0) + ckt->CKTgmin * vbd_jct; break; case 1: T2 = vbd_jct / Nvtmd; if (T2 < -EXP_THRESHOLD) { here->BSIM4v7gbd = ckt->CKTgmin; here->BSIM4v7cbd = DrainSatCurrent * (MIN_EXP - 1.0) + ckt->CKTgmin * vbd_jct; } else if (vbd_jct <= here->BSIM4v7vjdmFwd) { evbd = exp(T2); here->BSIM4v7gbd = DrainSatCurrent * evbd / Nvtmd + ckt->CKTgmin; here->BSIM4v7cbd = DrainSatCurrent * (evbd - 1.0) + ckt->CKTgmin * vbd_jct; } else { T0 = here->BSIM4v7IVjdmFwd / Nvtmd; here->BSIM4v7gbd = T0 + ckt->CKTgmin; here->BSIM4v7cbd = here->BSIM4v7IVjdmFwd - DrainSatCurrent + T0 * (vbd_jct - here->BSIM4v7vjdmFwd) + ckt->CKTgmin * vbd_jct; } break; case 2: if (vbd_jct < here->BSIM4v7vjdmRev) { T0 = vbd_jct / Nvtmd; if (T0 < -EXP_THRESHOLD) { evbd = MIN_EXP; devbd_dvb = 0.0; } else { evbd = exp(T0); devbd_dvb = evbd / Nvtmd; } T1 = evbd - 1.0; T2 = here->BSIM4v7IVjdmRev + here->BSIM4v7DslpRev * (vbd_jct - here->BSIM4v7vjdmRev); here->BSIM4v7gbd = devbd_dvb * T2 + T1 * here->BSIM4v7DslpRev + ckt->CKTgmin; here->BSIM4v7cbd = T1 * T2 + ckt->CKTgmin * vbd_jct; } else if (vbd_jct <= here->BSIM4v7vjdmFwd) { T0 = vbd_jct / Nvtmd; if (T0 < -EXP_THRESHOLD) { evbd = MIN_EXP; devbd_dvb = 0.0; } else { evbd = exp(T0); devbd_dvb = evbd / Nvtmd; } T1 = (model->BSIM4v7bvd + vbd_jct) / Nvtmd; if (T1 > EXP_THRESHOLD) { T2 = MIN_EXP; T3 = 0.0; } else { T2 = exp(-T1); T3 = -T2 /Nvtmd; } here->BSIM4v7gbd = DrainSatCurrent * (devbd_dvb - model->BSIM4v7xjbvd * T3) + ckt->CKTgmin; here->BSIM4v7cbd = DrainSatCurrent * (evbd + here->BSIM4v7XExpBVD - 1.0 - model->BSIM4v7xjbvd * T2) + ckt->CKTgmin * vbd_jct; } else { here->BSIM4v7gbd = here->BSIM4v7DslpFwd + ckt->CKTgmin; here->BSIM4v7cbd = here->BSIM4v7IVjdmFwd + here->BSIM4v7DslpFwd * (vbd_jct - here->BSIM4v7vjdmFwd) + ckt->CKTgmin * vbd_jct; } break; default: break; } } /* trap-assisted tunneling and recombination current for reverse bias */ Nvtmrssws = model->BSIM4v7vtm0 * model->BSIM4v7njtsswstemp; Nvtmrsswgs = model->BSIM4v7vtm0 * model->BSIM4v7njtsswgstemp; Nvtmrss = model->BSIM4v7vtm0 * model->BSIM4v7njtsstemp; Nvtmrsswd = model->BSIM4v7vtm0 * model->BSIM4v7njtsswdtemp; Nvtmrsswgd = model->BSIM4v7vtm0 * model->BSIM4v7njtsswgdtemp; Nvtmrsd = model->BSIM4v7vtm0 * model->BSIM4v7njtsdtemp; if ((model->BSIM4v7vtss - vbs_jct) < (model->BSIM4v7vtss * 1e-3)) { T9 = 1.0e3; T0 = - vbs_jct / Nvtmrss * T9; DEXP(T0, T1, T10); dT1_dVb = T10 / Nvtmrss * T9; } else { T9 = 1.0 / (model->BSIM4v7vtss - vbs_jct); T0 = -vbs_jct / Nvtmrss * model->BSIM4v7vtss * T9; dT0_dVb = model->BSIM4v7vtss / Nvtmrss * (T9 + vbs_jct * T9 * T9) ; DEXP(T0, T1, T10); dT1_dVb = T10 * dT0_dVb; } if ((model->BSIM4v7vtsd - vbd_jct) < (model->BSIM4v7vtsd * 1e-3) ) { T9 = 1.0e3; T0 = -vbd_jct / Nvtmrsd * T9; DEXP(T0, T2, T10); dT2_dVb = T10 / Nvtmrsd * T9; } else { T9 = 1.0 / (model->BSIM4v7vtsd - vbd_jct); T0 = -vbd_jct / Nvtmrsd * model->BSIM4v7vtsd * T9; dT0_dVb = model->BSIM4v7vtsd / Nvtmrsd * (T9 + vbd_jct * T9 * T9) ; DEXP(T0, T2, T10); dT2_dVb = T10 * dT0_dVb; } if ((model->BSIM4v7vtssws - vbs_jct) < (model->BSIM4v7vtssws * 1e-3) ) { T9 = 1.0e3; T0 = -vbs_jct / Nvtmrssws * T9; DEXP(T0, T3, T10); dT3_dVb = T10 / Nvtmrssws * T9; } else { T9 = 1.0 / (model->BSIM4v7vtssws - vbs_jct); T0 = -vbs_jct / Nvtmrssws * model->BSIM4v7vtssws * T9; dT0_dVb = model->BSIM4v7vtssws / Nvtmrssws * (T9 + vbs_jct * T9 * T9) ; DEXP(T0, T3, T10); dT3_dVb = T10 * dT0_dVb; } if ((model->BSIM4v7vtsswd - vbd_jct) < (model->BSIM4v7vtsswd * 1e-3) ) { T9 = 1.0e3; T0 = -vbd_jct / Nvtmrsswd * T9; DEXP(T0, T4, T10); dT4_dVb = T10 / Nvtmrsswd * T9; } else { T9 = 1.0 / (model->BSIM4v7vtsswd - vbd_jct); T0 = -vbd_jct / Nvtmrsswd * model->BSIM4v7vtsswd * T9; dT0_dVb = model->BSIM4v7vtsswd / Nvtmrsswd * (T9 + vbd_jct * T9 * T9) ; DEXP(T0, T4, T10); dT4_dVb = T10 * dT0_dVb; } if ((model->BSIM4v7vtsswgs - vbs_jct) < (model->BSIM4v7vtsswgs * 1e-3) ) { T9 = 1.0e3; T0 = -vbs_jct / Nvtmrsswgs * T9; DEXP(T0, T5, T10); dT5_dVb = T10 / Nvtmrsswgs * T9; } else { T9 = 1.0 / (model->BSIM4v7vtsswgs - vbs_jct); T0 = -vbs_jct / Nvtmrsswgs * model->BSIM4v7vtsswgs * T9; dT0_dVb = model->BSIM4v7vtsswgs / Nvtmrsswgs * (T9 + vbs_jct * T9 * T9) ; DEXP(T0, T5, T10); dT5_dVb = T10 * dT0_dVb; } if ((model->BSIM4v7vtsswgd - vbd_jct) < (model->BSIM4v7vtsswgd * 1e-3) ) { T9 = 1.0e3; T0 = -vbd_jct / Nvtmrsswgd * T9; DEXP(T0, T6, T10); dT6_dVb = T10 / Nvtmrsswgd * T9; } else { T9 = 1.0 / (model->BSIM4v7vtsswgd - vbd_jct); T0 = -vbd_jct / Nvtmrsswgd * model->BSIM4v7vtsswgd * T9; dT0_dVb = model->BSIM4v7vtsswgd / Nvtmrsswgd * (T9 + vbd_jct * T9 * T9) ; DEXP(T0, T6, T10); dT6_dVb = T10 * dT0_dVb; } here->BSIM4v7gbs += here->BSIM4v7SjctTempRevSatCur * dT1_dVb + here->BSIM4v7SswTempRevSatCur * dT3_dVb + here->BSIM4v7SswgTempRevSatCur * dT5_dVb; here->BSIM4v7cbs -= here->BSIM4v7SjctTempRevSatCur * (T1 - 1.0) + here->BSIM4v7SswTempRevSatCur * (T3 - 1.0) + here->BSIM4v7SswgTempRevSatCur * (T5 - 1.0); here->BSIM4v7gbd += here->BSIM4v7DjctTempRevSatCur * dT2_dVb + here->BSIM4v7DswTempRevSatCur * dT4_dVb + here->BSIM4v7DswgTempRevSatCur * dT6_dVb; here->BSIM4v7cbd -= here->BSIM4v7DjctTempRevSatCur * (T2 - 1.0) + here->BSIM4v7DswTempRevSatCur * (T4 - 1.0) + here->BSIM4v7DswgTempRevSatCur * (T6 - 1.0); /* End of diode DC model */ if (vds >= 0.0) { here->BSIM4v7mode = 1; Vds = vds; Vgs = vgs; Vbs = vbs; Vdb = vds - vbs; /* WDLiu: for GIDL */ } else { here->BSIM4v7mode = -1; Vds = -vds; Vgs = vgd; Vbs = vbd; Vdb = -vbs; } /* dunga */ if(model->BSIM4v7mtrlMod) { epsrox = 3.9; toxe = model->BSIM4v7eot; epssub = EPS0 * model->BSIM4v7epsrsub; } else { epsrox = model->BSIM4v7epsrox; toxe = model->BSIM4v7toxe; epssub = EPSSI; } T0 = Vbs - here->BSIM4v7vbsc - 0.001; T1 = sqrt(T0 * T0 - 0.004 * here->BSIM4v7vbsc); if (T0 >= 0.0) { Vbseff = here->BSIM4v7vbsc + 0.5 * (T0 + T1); dVbseff_dVb = 0.5 * (1.0 + T0 / T1); } else { T2 = -0.002 / (T1 - T0); Vbseff = here->BSIM4v7vbsc * (1.0 + T2); dVbseff_dVb = T2 * here->BSIM4v7vbsc / T1; } /* JX: Correction to forward body bias */ T9 = 0.95 * pParam->BSIM4v7phi; T0 = T9 - Vbseff - 0.001; T1 = sqrt(T0 * T0 + 0.004 * T9); Vbseff = T9 - 0.5 * (T0 + T1); dVbseff_dVb *= 0.5 * (1.0 + T0 / T1); Phis = pParam->BSIM4v7phi - Vbseff; dPhis_dVb = -1.0; sqrtPhis = sqrt(Phis); dsqrtPhis_dVb = -0.5 / sqrtPhis; Xdep = pParam->BSIM4v7Xdep0 * sqrtPhis / pParam->BSIM4v7sqrtPhi; dXdep_dVb = (pParam->BSIM4v7Xdep0 / pParam->BSIM4v7sqrtPhi) * dsqrtPhis_dVb; Leff = pParam->BSIM4v7leff; Vtm = model->BSIM4v7vtm; Vtm0 = model->BSIM4v7vtm0; /* Vth Calculation */ T3 = sqrt(Xdep); V0 = pParam->BSIM4v7vbi - pParam->BSIM4v7phi; T0 = pParam->BSIM4v7dvt2 * Vbseff; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->BSIM4v7dvt2; } else { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->BSIM4v7dvt2 * T4 * T4; } lt1 = model->BSIM4v7factor1 * T3 * T1; dlt1_dVb = model->BSIM4v7factor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * T2); T0 = pParam->BSIM4v7dvt2w * Vbseff; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->BSIM4v7dvt2w; } else { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->BSIM4v7dvt2w * T4 * T4; } ltw = model->BSIM4v7factor1 * T3 * T1; dltw_dVb = model->BSIM4v7factor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * T2); T0 = pParam->BSIM4v7dvt1 * Leff / lt1; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; Theta0 = T1 / T4; dT1_dVb = -T0 * T1 * dlt1_dVb / lt1; dTheta0_dVb = dT1_dVb * (T4 - 2.0 * T1 * (T2 + MIN_EXP)) / T4 / T4; } else { Theta0 = 1.0 / (MAX_EXP - 2.0); /* 3.0 * MIN_EXP omitted */ dTheta0_dVb = 0.0; } here->BSIM4v7thetavth = pParam->BSIM4v7dvt0 * Theta0; Delt_vth = here->BSIM4v7thetavth * V0; dDelt_vth_dVb = pParam->BSIM4v7dvt0 * dTheta0_dVb * V0; T0 = pParam->BSIM4v7dvt1w * pParam->BSIM4v7weff * Leff / ltw; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; T5 = T1 / T4; dT1_dVb = -T0 * T1 * dltw_dVb / ltw; dT5_dVb = dT1_dVb * (T4 - 2.0 * T1 * (T2 + MIN_EXP)) / T4 / T4; } else { T5 = 1.0 / (MAX_EXP - 2.0); /* 3.0 * MIN_EXP omitted */ dT5_dVb = 0.0; } T0 = pParam->BSIM4v7dvt0w * T5; T2 = T0 * V0; dT2_dVb = pParam->BSIM4v7dvt0w * dT5_dVb * V0; TempRatio = ckt->CKTtemp / model->BSIM4v7tnom - 1.0; T0 = sqrt(1.0 + pParam->BSIM4v7lpe0 / Leff); T1 = pParam->BSIM4v7k1ox * (T0 - 1.0) * pParam->BSIM4v7sqrtPhi + (pParam->BSIM4v7kt1 + pParam->BSIM4v7kt1l / Leff + pParam->BSIM4v7kt2 * Vbseff) * TempRatio; Vth_NarrowW = toxe * pParam->BSIM4v7phi / (pParam->BSIM4v7weff + pParam->BSIM4v7w0); T3 = here->BSIM4v7eta0 + pParam->BSIM4v7etab * Vbseff; if (T3 < 1.0e-4) { T9 = 1.0 / (3.0 - 2.0e4 * T3); T3 = (2.0e-4 - T3) * T9; T4 = T9 * T9; } else { T4 = 1.0; } dDIBL_Sft_dVd = T3 * pParam->BSIM4v7theta0vb0; DIBL_Sft = dDIBL_Sft_dVd * Vds; Lpe_Vb = sqrt(1.0 + pParam->BSIM4v7lpeb / Leff); Vth = model->BSIM4v7type * here->BSIM4v7vth0 + (pParam->BSIM4v7k1ox * sqrtPhis - pParam->BSIM4v7k1 * pParam->BSIM4v7sqrtPhi) * Lpe_Vb - here->BSIM4v7k2ox * Vbseff - Delt_vth - T2 + (pParam->BSIM4v7k3 + pParam->BSIM4v7k3b * Vbseff) * Vth_NarrowW + T1 - DIBL_Sft; dVth_dVb = Lpe_Vb * pParam->BSIM4v7k1ox * dsqrtPhis_dVb - here->BSIM4v7k2ox - dDelt_vth_dVb - dT2_dVb + pParam->BSIM4v7k3b * Vth_NarrowW - pParam->BSIM4v7etab * Vds * pParam->BSIM4v7theta0vb0 * T4 + pParam->BSIM4v7kt2 * TempRatio; dVth_dVd = -dDIBL_Sft_dVd; /* Calculate n */ tmp1 = epssub / Xdep; here->BSIM4v7nstar = model->BSIM4v7vtm / Charge_q * (model->BSIM4v7coxe + tmp1 + pParam->BSIM4v7cit); tmp2 = pParam->BSIM4v7nfactor * tmp1; tmp3 = pParam->BSIM4v7cdsc + pParam->BSIM4v7cdscb * Vbseff + pParam->BSIM4v7cdscd * Vds; tmp4 = (tmp2 + tmp3 * Theta0 + pParam->BSIM4v7cit) / model->BSIM4v7coxe; if (tmp4 >= -0.5) { n = 1.0 + tmp4; dn_dVb = (-tmp2 / Xdep * dXdep_dVb + tmp3 * dTheta0_dVb + pParam->BSIM4v7cdscb * Theta0) / model->BSIM4v7coxe; dn_dVd = pParam->BSIM4v7cdscd * Theta0 / model->BSIM4v7coxe; } else { T0 = 1.0 / (3.0 + 8.0 * tmp4); n = (1.0 + 3.0 * tmp4) * T0; T0 *= T0; dn_dVb = (-tmp2 / Xdep * dXdep_dVb + tmp3 * dTheta0_dVb + pParam->BSIM4v7cdscb * Theta0) / model->BSIM4v7coxe * T0; dn_dVd = pParam->BSIM4v7cdscd * Theta0 / model->BSIM4v7coxe * T0; } /* Vth correction for Pocket implant */ if (pParam->BSIM4v7dvtp0 > 0.0) { T0 = -pParam->BSIM4v7dvtp1 * Vds; if (T0 < -EXP_THRESHOLD) { T2 = MIN_EXP; dT2_dVd = 0.0; } else { T2 = exp(T0); dT2_dVd = -pParam->BSIM4v7dvtp1 * T2; } T3 = Leff + pParam->BSIM4v7dvtp0 * (1.0 + T2); dT3_dVd = pParam->BSIM4v7dvtp0 * dT2_dVd; if (model->BSIM4v7tempMod < 2) { T4 = Vtm * log(Leff / T3); dT4_dVd = -Vtm * dT3_dVd / T3; } else { T4 = model->BSIM4v7vtm0 * log(Leff / T3); dT4_dVd = -model->BSIM4v7vtm0 * dT3_dVd / T3; } dDITS_Sft_dVd = dn_dVd * T4 + n * dT4_dVd; dDITS_Sft_dVb = T4 * dn_dVb; Vth -= n * T4; dVth_dVd -= dDITS_Sft_dVd; dVth_dVb -= dDITS_Sft_dVb; } /* v4.7 DITS_SFT2 */ if ((pParam->BSIM4v7dvtp4 == 0.0) || (pParam->BSIM4v7dvtp2factor == 0.0)) { T0 = 0.0; DITS_Sft2 = 0.0; } else { //T0 = exp(2.0 * pParam->BSIM4v7dvtp4 * Vds); /* beta code */ T1 = 2.0 * pParam->BSIM4v7dvtp4 * Vds; DEXP(T1, T0, T10); DITS_Sft2 = pParam->BSIM4v7dvtp2factor * (T0-1) / (T0+1); //dDITS_Sft2_dVd = pParam->BSIM4v7dvtp2factor * pParam->BSIM4v7dvtp4 * 4.0 * T0 / ((T0+1) * (T0+1)); /* beta code */ dDITS_Sft2_dVd = pParam->BSIM4v7dvtp2factor * pParam->BSIM4v7dvtp4 * 4.0 * T10 / ((T0+1) * (T0+1)); Vth -= DITS_Sft2; dVth_dVd -= dDITS_Sft2_dVd; } here->BSIM4v7von = Vth; /* Poly Gate Si Depletion Effect */ T0 = here->BSIM4v7vfb + pParam->BSIM4v7phi; if(model->BSIM4v7mtrlMod == 0) T1 = EPSSI; else T1 = model->BSIM4v7epsrgate * EPS0; BSIM4v7polyDepletion(T0, pParam->BSIM4v7ngate, T1, model->BSIM4v7coxe, vgs, &vgs_eff, &dvgs_eff_dvg); BSIM4v7polyDepletion(T0, pParam->BSIM4v7ngate, T1, model->BSIM4v7coxe, vgd, &vgd_eff, &dvgd_eff_dvg); if(here->BSIM4v7mode>0) { Vgs_eff = vgs_eff; dVgs_eff_dVg = dvgs_eff_dvg; } else { Vgs_eff = vgd_eff; dVgs_eff_dVg = dvgd_eff_dvg; } here->BSIM4v7vgs_eff = vgs_eff; here->BSIM4v7vgd_eff = vgd_eff; here->BSIM4v7dvgs_eff_dvg = dvgs_eff_dvg; here->BSIM4v7dvgd_eff_dvg = dvgd_eff_dvg; Vgst = Vgs_eff - Vth; /* Calculate Vgsteff */ T0 = n * Vtm; T1 = pParam->BSIM4v7mstar * Vgst; T2 = T1 / T0; if (T2 > EXP_THRESHOLD) { T10 = T1; dT10_dVg = pParam->BSIM4v7mstar * dVgs_eff_dVg; dT10_dVd = -dVth_dVd * pParam->BSIM4v7mstar; dT10_dVb = -dVth_dVb * pParam->BSIM4v7mstar; } else if (T2 < -EXP_THRESHOLD) { T10 = Vtm * log(1.0 + MIN_EXP); dT10_dVg = 0.0; dT10_dVd = T10 * dn_dVd; dT10_dVb = T10 * dn_dVb; T10 *= n; } else { ExpVgst = exp(T2); T3 = Vtm * log(1.0 + ExpVgst); T10 = n * T3; dT10_dVg = pParam->BSIM4v7mstar * ExpVgst / (1.0 + ExpVgst); dT10_dVb = T3 * dn_dVb - dT10_dVg * (dVth_dVb + Vgst * dn_dVb / n); dT10_dVd = T3 * dn_dVd - dT10_dVg * (dVth_dVd + Vgst * dn_dVd / n); dT10_dVg *= dVgs_eff_dVg; } T1 = pParam->BSIM4v7voffcbn - (1.0 - pParam->BSIM4v7mstar) * Vgst; T2 = T1 / T0; if (T2 < -EXP_THRESHOLD) { T3 = model->BSIM4v7coxe * MIN_EXP / pParam->BSIM4v7cdep0; T9 = pParam->BSIM4v7mstar + T3 * n; dT9_dVg = 0.0; dT9_dVd = dn_dVd * T3; dT9_dVb = dn_dVb * T3; } else if (T2 > EXP_THRESHOLD) { T3 = model->BSIM4v7coxe * MAX_EXP / pParam->BSIM4v7cdep0; T9 = pParam->BSIM4v7mstar + T3 * n; dT9_dVg = 0.0; dT9_dVd = dn_dVd * T3; dT9_dVb = dn_dVb * T3; } else { ExpVgst = exp(T2); T3 = model->BSIM4v7coxe / pParam->BSIM4v7cdep0; T4 = T3 * ExpVgst; T5 = T1 * T4 / T0; T9 = pParam->BSIM4v7mstar + n * T4; dT9_dVg = T3 * (pParam->BSIM4v7mstar - 1.0) * ExpVgst / Vtm; dT9_dVb = T4 * dn_dVb - dT9_dVg * dVth_dVb - T5 * dn_dVb; dT9_dVd = T4 * dn_dVd - dT9_dVg * dVth_dVd - T5 * dn_dVd; dT9_dVg *= dVgs_eff_dVg; } here->BSIM4v7Vgsteff = Vgsteff = T10 / T9; T11 = T9 * T9; dVgsteff_dVg = (T9 * dT10_dVg - T10 * dT9_dVg) / T11; dVgsteff_dVd = (T9 * dT10_dVd - T10 * dT9_dVd) / T11; dVgsteff_dVb = (T9 * dT10_dVb - T10 * dT9_dVb) / T11; /* Calculate Effective Channel Geometry */ T9 = sqrtPhis - pParam->BSIM4v7sqrtPhi; Weff = pParam->BSIM4v7weff - 2.0 * (pParam->BSIM4v7dwg * Vgsteff + pParam->BSIM4v7dwb * T9); dWeff_dVg = -2.0 * pParam->BSIM4v7dwg; dWeff_dVb = -2.0 * pParam->BSIM4v7dwb * dsqrtPhis_dVb; if (Weff < 2.0e-8) /* to avoid the discontinuity problem due to Weff*/ { T0 = 1.0 / (6.0e-8 - 2.0 * Weff); Weff = 2.0e-8 * (4.0e-8 - Weff) * T0; T0 *= T0 * 4.0e-16; dWeff_dVg *= T0; dWeff_dVb *= T0; } if (model->BSIM4v7rdsMod == 1) Rds = dRds_dVg = dRds_dVb = 0.0; else { T0 = 1.0 + pParam->BSIM4v7prwg * Vgsteff; dT0_dVg = -pParam->BSIM4v7prwg / T0 / T0; T1 = pParam->BSIM4v7prwb * T9; dT1_dVb = pParam->BSIM4v7prwb * dsqrtPhis_dVb; T2 = 1.0 / T0 + T1; T3 = T2 + sqrt(T2 * T2 + 0.01); /* 0.01 = 4.0 * 0.05 * 0.05 */ dT3_dVg = 1.0 + T2 / (T3 - T2); dT3_dVb = dT3_dVg * dT1_dVb; dT3_dVg *= dT0_dVg; T4 = pParam->BSIM4v7rds0 * 0.5; Rds = pParam->BSIM4v7rdswmin + T3 * T4; dRds_dVg = T4 * dT3_dVg; dRds_dVb = T4 * dT3_dVb; if (Rds > 0.0) here->BSIM4v7grdsw = 1.0 / Rds* here->BSIM4v7nf; /*4.6.2*/ else here->BSIM4v7grdsw = 0.0; } /* Calculate Abulk */ T9 = 0.5 * pParam->BSIM4v7k1ox * Lpe_Vb / sqrtPhis; T1 = T9 + here->BSIM4v7k2ox - pParam->BSIM4v7k3b * Vth_NarrowW; dT1_dVb = -T9 / sqrtPhis * dsqrtPhis_dVb; T9 = sqrt(pParam->BSIM4v7xj * Xdep); tmp1 = Leff + 2.0 * T9; T5 = Leff / tmp1; tmp2 = pParam->BSIM4v7a0 * T5; tmp3 = pParam->BSIM4v7weff + pParam->BSIM4v7b1; tmp4 = pParam->BSIM4v7b0 / tmp3; T2 = tmp2 + tmp4; dT2_dVb = -T9 / tmp1 / Xdep * dXdep_dVb; T6 = T5 * T5; T7 = T5 * T6; Abulk0 = 1.0 + T1 * T2; dAbulk0_dVb = T1 * tmp2 * dT2_dVb + T2 * dT1_dVb; T8 = pParam->BSIM4v7ags * pParam->BSIM4v7a0 * T7; dAbulk_dVg = -T1 * T8; Abulk = Abulk0 + dAbulk_dVg * Vgsteff; dAbulk_dVb = dAbulk0_dVb - T8 * Vgsteff * (dT1_dVb + 3.0 * T1 * dT2_dVb); if (Abulk0 < 0.1) /* added to avoid the problems caused by Abulk0 */ { T9 = 1.0 / (3.0 - 20.0 * Abulk0); Abulk0 = (0.2 - Abulk0) * T9; dAbulk0_dVb *= T9 * T9; } if (Abulk < 0.1) { T9 = 1.0 / (3.0 - 20.0 * Abulk); Abulk = (0.2 - Abulk) * T9; T10 = T9 * T9; dAbulk_dVb *= T10; dAbulk_dVg *= T10; } here->BSIM4v7Abulk = Abulk; T2 = pParam->BSIM4v7keta * Vbseff; if (T2 >= -0.9) { T0 = 1.0 / (1.0 + T2); dT0_dVb = -pParam->BSIM4v7keta * T0 * T0; } else { T1 = 1.0 / (0.8 + T2); T0 = (17.0 + 20.0 * T2) * T1; dT0_dVb = -pParam->BSIM4v7keta * T1 * T1; } dAbulk_dVg *= T0; dAbulk_dVb = dAbulk_dVb * T0 + Abulk * dT0_dVb; dAbulk0_dVb = dAbulk0_dVb * T0 + Abulk0 * dT0_dVb; Abulk *= T0; Abulk0 *= T0; /* Mobility calculation */ if (model->BSIM4v7mtrlMod && model->BSIM4v7mtrlCompatMod == 0) T14 = 2.0 * model->BSIM4v7type *(model->BSIM4v7phig - model->BSIM4v7easub - 0.5*model->BSIM4v7Eg0 + 0.45); else T14 = 0.0; if (model->BSIM4v7mobMod == 0) { T0 = Vgsteff + Vth + Vth - T14; T2 = pParam->BSIM4v7ua + pParam->BSIM4v7uc * Vbseff; T3 = T0 / toxe; T12 = sqrt(Vth * Vth + 0.0001); T9 = 1.0/(Vgsteff + 2*T12); T10 = T9*toxe; T8 = pParam->BSIM4v7ud * T10 * T10 * Vth; T6 = T8 * Vth; T5 = T3 * (T2 + pParam->BSIM4v7ub * T3) + T6; T7 = - 2.0 * T6 * T9; T11 = T7 * Vth/T12; dDenomi_dVg = (T2 + 2.0 * pParam->BSIM4v7ub * T3) / toxe; T13 = 2.0 * (dDenomi_dVg + T11 + T8); dDenomi_dVd = T13 * dVth_dVd; dDenomi_dVb = T13 * dVth_dVb + pParam->BSIM4v7uc * T3; dDenomi_dVg+= T7; } else if (model->BSIM4v7mobMod == 1) { T0 = Vgsteff + Vth + Vth - T14; T2 = 1.0 + pParam->BSIM4v7uc * Vbseff; T3 = T0 / toxe; T4 = T3 * (pParam->BSIM4v7ua + pParam->BSIM4v7ub * T3); T12 = sqrt(Vth * Vth + 0.0001); T9 = 1.0/(Vgsteff + 2*T12); T10 = T9*toxe; T8 = pParam->BSIM4v7ud * T10 * T10 * Vth; T6 = T8 * Vth; T5 = T4 * T2 + T6; T7 = - 2.0 * T6 * T9; T11 = T7 * Vth/T12; dDenomi_dVg = (pParam->BSIM4v7ua + 2.0 * pParam->BSIM4v7ub * T3) * T2 / toxe; T13 = 2.0 * (dDenomi_dVg + T11 + T8); dDenomi_dVd = T13 * dVth_dVd; dDenomi_dVb = T13 * dVth_dVb + pParam->BSIM4v7uc * T4; dDenomi_dVg+= T7; } else if (model->BSIM4v7mobMod == 2) { T0 = (Vgsteff + here->BSIM4v7vtfbphi1) / toxe; T1 = exp(pParam->BSIM4v7eu * log(T0)); dT1_dVg = T1 * pParam->BSIM4v7eu / T0 / toxe; T2 = pParam->BSIM4v7ua + pParam->BSIM4v7uc * Vbseff; T3 = T0 / toxe; /*Do we need it?*/ T12 = sqrt(Vth * Vth + 0.0001); T9 = 1.0/(Vgsteff + 2*T12); T10 = T9*toxe; T8 = pParam->BSIM4v7ud * T10 * T10 * Vth; T6 = T8 * Vth; T5 = T1 * T2 + T6; T7 = - 2.0 * T6 * T9; T11 = T7 * Vth/T12; dDenomi_dVg = T2 * dT1_dVg + T7; T13 = 2.0 * (T11 + T8); dDenomi_dVd = T13 * dVth_dVd; dDenomi_dVb = T13 * dVth_dVb + T1 * pParam->BSIM4v7uc; } /*high K mobility*/ else { /*univsersal mobility*/ T0 = (Vgsteff + here->BSIM4v7vtfbphi1)* 1.0e-8 / toxe/6.0; T1 = exp(pParam->BSIM4v7eu * log(T0)); dT1_dVg = T1 * pParam->BSIM4v7eu * 1.0e-8/ T0 / toxe/6.0; T2 = pParam->BSIM4v7ua + pParam->BSIM4v7uc * Vbseff; /*Coulombic*/ VgsteffVth = pParam->BSIM4v7VgsteffVth; T10 = exp(pParam->BSIM4v7ucs * log(0.5 + 0.5 * Vgsteff/VgsteffVth)); T11 = pParam->BSIM4v7ud/T10; dT11_dVg = - 0.5 * pParam->BSIM4v7ucs * T11 /(0.5 + 0.5*Vgsteff/VgsteffVth)/VgsteffVth; dDenomi_dVg = T2 * dT1_dVg + dT11_dVg; dDenomi_dVd = 0.0; dDenomi_dVb = T1 * pParam->BSIM4v7uc; T5 = T1 * T2 + T11; } if (T5 >= -0.8) { Denomi = 1.0 + T5; } else { T9 = 1.0 / (7.0 + 10.0 * T5); Denomi = (0.6 + T5) * T9; T9 *= T9; dDenomi_dVg *= T9; dDenomi_dVd *= T9; dDenomi_dVb *= T9; } here->BSIM4v7ueff = ueff = here->BSIM4v7u0temp / Denomi; T9 = -ueff / Denomi; dueff_dVg = T9 * dDenomi_dVg; dueff_dVd = T9 * dDenomi_dVd; dueff_dVb = T9 * dDenomi_dVb; /* Saturation Drain Voltage Vdsat */ WVCox = Weff * here->BSIM4v7vsattemp * model->BSIM4v7coxe; WVCoxRds = WVCox * Rds; Esat = 2.0 * here->BSIM4v7vsattemp / ueff; here->BSIM4v7EsatL = EsatL = Esat * Leff; T0 = -EsatL /ueff; dEsatL_dVg = T0 * dueff_dVg; dEsatL_dVd = T0 * dueff_dVd; dEsatL_dVb = T0 * dueff_dVb; /* Sqrt() */ a1 = pParam->BSIM4v7a1; if (a1 == 0.0) { Lambda = pParam->BSIM4v7a2; dLambda_dVg = 0.0; } else if (a1 > 0.0) { T0 = 1.0 - pParam->BSIM4v7a2; T1 = T0 - pParam->BSIM4v7a1 * Vgsteff - 0.0001; T2 = sqrt(T1 * T1 + 0.0004 * T0); Lambda = pParam->BSIM4v7a2 + T0 - 0.5 * (T1 + T2); dLambda_dVg = 0.5 * pParam->BSIM4v7a1 * (1.0 + T1 / T2); } else { T1 = pParam->BSIM4v7a2 + pParam->BSIM4v7a1 * Vgsteff - 0.0001; T2 = sqrt(T1 * T1 + 0.0004 * pParam->BSIM4v7a2); Lambda = 0.5 * (T1 + T2); dLambda_dVg = 0.5 * pParam->BSIM4v7a1 * (1.0 + T1 / T2); } Vgst2Vtm = Vgsteff + 2.0 * Vtm; if (Rds > 0) { tmp2 = dRds_dVg / Rds + dWeff_dVg / Weff; tmp3 = dRds_dVb / Rds + dWeff_dVb / Weff; } else { tmp2 = dWeff_dVg / Weff; tmp3 = dWeff_dVb / Weff; } if ((Rds == 0.0) && (Lambda == 1.0)) { T0 = 1.0 / (Abulk * EsatL + Vgst2Vtm); tmp1 = 0.0; T1 = T0 * T0; T2 = Vgst2Vtm * T0; T3 = EsatL * Vgst2Vtm; Vdsat = T3 * T0; dT0_dVg = -(Abulk * dEsatL_dVg + EsatL * dAbulk_dVg + 1.0) * T1; dT0_dVd = -(Abulk * dEsatL_dVd) * T1; dT0_dVb = -(Abulk * dEsatL_dVb + dAbulk_dVb * EsatL) * T1; dVdsat_dVg = T3 * dT0_dVg + T2 * dEsatL_dVg + EsatL * T0; dVdsat_dVd = T3 * dT0_dVd + T2 * dEsatL_dVd; dVdsat_dVb = T3 * dT0_dVb + T2 * dEsatL_dVb; } else { tmp1 = dLambda_dVg / (Lambda * Lambda); T9 = Abulk * WVCoxRds; T8 = Abulk * T9; T7 = Vgst2Vtm * T9; T6 = Vgst2Vtm * WVCoxRds; T0 = 2.0 * Abulk * (T9 - 1.0 + 1.0 / Lambda); dT0_dVg = 2.0 * (T8 * tmp2 - Abulk * tmp1 + (2.0 * T9 + 1.0 / Lambda - 1.0) * dAbulk_dVg); dT0_dVb = 2.0 * (T8 * (2.0 / Abulk * dAbulk_dVb + tmp3) + (1.0 / Lambda - 1.0) * dAbulk_dVb); dT0_dVd = 0.0; T1 = Vgst2Vtm * (2.0 / Lambda - 1.0) + Abulk * EsatL + 3.0 * T7; dT1_dVg = (2.0 / Lambda - 1.0) - 2.0 * Vgst2Vtm * tmp1 + Abulk * dEsatL_dVg + EsatL * dAbulk_dVg + 3.0 * (T9 + T7 * tmp2 + T6 * dAbulk_dVg); dT1_dVb = Abulk * dEsatL_dVb + EsatL * dAbulk_dVb + 3.0 * (T6 * dAbulk_dVb + T7 * tmp3); dT1_dVd = Abulk * dEsatL_dVd; T2 = Vgst2Vtm * (EsatL + 2.0 * T6); dT2_dVg = EsatL + Vgst2Vtm * dEsatL_dVg + T6 * (4.0 + 2.0 * Vgst2Vtm * tmp2); dT2_dVb = Vgst2Vtm * (dEsatL_dVb + 2.0 * T6 * tmp3); dT2_dVd = Vgst2Vtm * dEsatL_dVd; T3 = sqrt(T1 * T1 - 2.0 * T0 * T2); Vdsat = (T1 - T3) / T0; dT3_dVg = (T1 * dT1_dVg - 2.0 * (T0 * dT2_dVg + T2 * dT0_dVg)) / T3; dT3_dVd = (T1 * dT1_dVd - 2.0 * (T0 * dT2_dVd + T2 * dT0_dVd)) / T3; dT3_dVb = (T1 * dT1_dVb - 2.0 * (T0 * dT2_dVb + T2 * dT0_dVb)) / T3; dVdsat_dVg = (dT1_dVg - (T1 * dT1_dVg - dT0_dVg * T2 - T0 * dT2_dVg) / T3 - Vdsat * dT0_dVg) / T0; dVdsat_dVb = (dT1_dVb - (T1 * dT1_dVb - dT0_dVb * T2 - T0 * dT2_dVb) / T3 - Vdsat * dT0_dVb) / T0; dVdsat_dVd = (dT1_dVd - (T1 * dT1_dVd - T0 * dT2_dVd) / T3) / T0; } here->BSIM4v7vdsat = Vdsat; /* Calculate Vdseff */ T1 = Vdsat - Vds - pParam->BSIM4v7delta; dT1_dVg = dVdsat_dVg; dT1_dVd = dVdsat_dVd - 1.0; dT1_dVb = dVdsat_dVb; T2 = sqrt(T1 * T1 + 4.0 * pParam->BSIM4v7delta * Vdsat); T0 = T1 / T2; T9 = 2.0 * pParam->BSIM4v7delta; T3 = T9 / T2; dT2_dVg = T0 * dT1_dVg + T3 * dVdsat_dVg; dT2_dVd = T0 * dT1_dVd + T3 * dVdsat_dVd; dT2_dVb = T0 * dT1_dVb + T3 * dVdsat_dVb; if (T1 >= 0.0) { Vdseff = Vdsat - 0.5 * (T1 + T2); dVdseff_dVg = dVdsat_dVg - 0.5 * (dT1_dVg + dT2_dVg); dVdseff_dVd = dVdsat_dVd - 0.5 * (dT1_dVd + dT2_dVd); dVdseff_dVb = dVdsat_dVb - 0.5 * (dT1_dVb + dT2_dVb); } else { T4 = T9 / (T2 - T1); T5 = 1.0 - T4; T6 = Vdsat * T4 / (T2 - T1); Vdseff = Vdsat * T5; dVdseff_dVg = dVdsat_dVg * T5 + T6 * (dT2_dVg - dT1_dVg); dVdseff_dVd = dVdsat_dVd * T5 + T6 * (dT2_dVd - dT1_dVd); dVdseff_dVb = dVdsat_dVb * T5 + T6 * (dT2_dVb - dT1_dVb); } if (Vds == 0.0) { Vdseff = 0.0; dVdseff_dVg = 0.0; dVdseff_dVb = 0.0; } if (Vdseff > Vds) Vdseff = Vds; diffVds = Vds - Vdseff; here->BSIM4v7Vdseff = Vdseff; /* Velocity Overshoot */ if((model->BSIM4v7lambdaGiven) && (model->BSIM4v7lambda > 0.0) ) { T1 = Leff * ueff; T2 = pParam->BSIM4v7lambda / T1; T3 = -T2 / T1 * Leff; dT2_dVd = T3 * dueff_dVd; dT2_dVg = T3 * dueff_dVg; dT2_dVb = T3 * dueff_dVb; T5 = 1.0 / (Esat * pParam->BSIM4v7litl); T4 = -T5 / EsatL; dT5_dVg = dEsatL_dVg * T4; dT5_dVd = dEsatL_dVd * T4; dT5_dVb = dEsatL_dVb * T4; T6 = 1.0 + diffVds * T5; dT6_dVg = dT5_dVg * diffVds - dVdseff_dVg * T5; dT6_dVd = dT5_dVd * diffVds + (1.0 - dVdseff_dVd) * T5; dT6_dVb = dT5_dVb * diffVds - dVdseff_dVb * T5; T7 = 2.0 / (T6 * T6 + 1.0); T8 = 1.0 - T7; T9 = T6 * T7 * T7; dT8_dVg = T9 * dT6_dVg; dT8_dVd = T9 * dT6_dVd; dT8_dVb = T9 * dT6_dVb; T10 = 1.0 + T2 * T8; dT10_dVg = dT2_dVg * T8 + T2 * dT8_dVg; dT10_dVd = dT2_dVd * T8 + T2 * dT8_dVd; dT10_dVb = dT2_dVb * T8 + T2 * dT8_dVb; if(T10 == 1.0) dT10_dVg = dT10_dVd = dT10_dVb = 0.0; dEsatL_dVg *= T10; dEsatL_dVg += EsatL * dT10_dVg; dEsatL_dVd *= T10; dEsatL_dVd += EsatL * dT10_dVd; dEsatL_dVb *= T10; dEsatL_dVb += EsatL * dT10_dVb; EsatL *= T10; Esat = EsatL / Leff; /* bugfix by Wenwei Yang (4.6.4) */ here->BSIM4v7EsatL = EsatL; } /* Calculate Vasat */ tmp4 = 1.0 - 0.5 * Abulk * Vdsat / Vgst2Vtm; T9 = WVCoxRds * Vgsteff; T8 = T9 / Vgst2Vtm; T0 = EsatL + Vdsat + 2.0 * T9 * tmp4; T7 = 2.0 * WVCoxRds * tmp4; dT0_dVg = dEsatL_dVg + dVdsat_dVg + T7 * (1.0 + tmp2 * Vgsteff) - T8 * (Abulk * dVdsat_dVg - Abulk * Vdsat / Vgst2Vtm + Vdsat * dAbulk_dVg); dT0_dVb = dEsatL_dVb + dVdsat_dVb + T7 * tmp3 * Vgsteff - T8 * (dAbulk_dVb * Vdsat + Abulk * dVdsat_dVb); dT0_dVd = dEsatL_dVd + dVdsat_dVd - T8 * Abulk * dVdsat_dVd; T9 = WVCoxRds * Abulk; T1 = 2.0 / Lambda - 1.0 + T9; dT1_dVg = -2.0 * tmp1 + WVCoxRds * (Abulk * tmp2 + dAbulk_dVg); dT1_dVb = dAbulk_dVb * WVCoxRds + T9 * tmp3; Vasat = T0 / T1; dVasat_dVg = (dT0_dVg - Vasat * dT1_dVg) / T1; dVasat_dVb = (dT0_dVb - Vasat * dT1_dVb) / T1; dVasat_dVd = dT0_dVd / T1; /* Calculate Idl first */ tmp1 = here->BSIM4v7vtfbphi2; tmp2 = 2.0e8 * model->BSIM4v7toxp; dT0_dVg = 1.0 / tmp2; T0 = (Vgsteff + tmp1) * dT0_dVg; tmp3 = exp(model->BSIM4v7bdos * 0.7 * log(T0)); T1 = 1.0 + tmp3; T2 = model->BSIM4v7bdos * 0.7 * tmp3 / T0; Tcen = model->BSIM4v7ados * 1.9e-9 / T1; dTcen_dVg = -Tcen * T2 * dT0_dVg / T1; Coxeff = epssub * model->BSIM4v7coxp / (epssub + model->BSIM4v7coxp * Tcen); here->BSIM4v7Coxeff = Coxeff; dCoxeff_dVg = -Coxeff * Coxeff * dTcen_dVg / epssub; CoxeffWovL = Coxeff * Weff / Leff; beta = ueff * CoxeffWovL; T3 = ueff / Leff; dbeta_dVg = CoxeffWovL * dueff_dVg + T3 * (Weff * dCoxeff_dVg + Coxeff * dWeff_dVg); dbeta_dVd = CoxeffWovL * dueff_dVd; dbeta_dVb = CoxeffWovL * dueff_dVb + T3 * Coxeff * dWeff_dVb; here->BSIM4v7AbovVgst2Vtm = Abulk / Vgst2Vtm; T0 = 1.0 - 0.5 * Vdseff * here->BSIM4v7AbovVgst2Vtm; dT0_dVg = -0.5 * (Abulk * dVdseff_dVg - Abulk * Vdseff / Vgst2Vtm + Vdseff * dAbulk_dVg) / Vgst2Vtm; dT0_dVd = -0.5 * Abulk * dVdseff_dVd / Vgst2Vtm; dT0_dVb = -0.5 * (Abulk * dVdseff_dVb + dAbulk_dVb * Vdseff) / Vgst2Vtm; fgche1 = Vgsteff * T0; dfgche1_dVg = Vgsteff * dT0_dVg + T0; dfgche1_dVd = Vgsteff * dT0_dVd; dfgche1_dVb = Vgsteff * dT0_dVb; T9 = Vdseff / EsatL; fgche2 = 1.0 + T9; dfgche2_dVg = (dVdseff_dVg - T9 * dEsatL_dVg) / EsatL; dfgche2_dVd = (dVdseff_dVd - T9 * dEsatL_dVd) / EsatL; dfgche2_dVb = (dVdseff_dVb - T9 * dEsatL_dVb) / EsatL; gche = beta * fgche1 / fgche2; dgche_dVg = (beta * dfgche1_dVg + fgche1 * dbeta_dVg - gche * dfgche2_dVg) / fgche2; dgche_dVd = (beta * dfgche1_dVd + fgche1 * dbeta_dVd - gche * dfgche2_dVd) / fgche2; dgche_dVb = (beta * dfgche1_dVb + fgche1 * dbeta_dVb - gche * dfgche2_dVb) / fgche2; T0 = 1.0 + gche * Rds; Idl = gche / T0; T1 = (1.0 - Idl * Rds) / T0; T2 = Idl * Idl; dIdl_dVg = T1 * dgche_dVg - T2 * dRds_dVg; dIdl_dVd = T1 * dgche_dVd; dIdl_dVb = T1 * dgche_dVb - T2 * dRds_dVb; /* Calculate degradation factor due to pocket implant */ if (pParam->BSIM4v7fprout <= 0.0) { FP = 1.0; dFP_dVg = 0.0; } else { T9 = pParam->BSIM4v7fprout * sqrt(Leff) / Vgst2Vtm; FP = 1.0 / (1.0 + T9); dFP_dVg = FP * FP * T9 / Vgst2Vtm; } /* Calculate VACLM */ T8 = pParam->BSIM4v7pvag / EsatL; T9 = T8 * Vgsteff; if (T9 > -0.9) { PvagTerm = 1.0 + T9; dPvagTerm_dVg = T8 * (1.0 - Vgsteff * dEsatL_dVg / EsatL); dPvagTerm_dVb = -T9 * dEsatL_dVb / EsatL; dPvagTerm_dVd = -T9 * dEsatL_dVd / EsatL; } else { T4 = 1.0 / (17.0 + 20.0 * T9); PvagTerm = (0.8 + T9) * T4; T4 *= T4; dPvagTerm_dVg = T8 * (1.0 - Vgsteff * dEsatL_dVg / EsatL) * T4; T9 *= T4 / EsatL; dPvagTerm_dVb = -T9 * dEsatL_dVb; dPvagTerm_dVd = -T9 * dEsatL_dVd; } if ((pParam->BSIM4v7pclm > MIN_EXP) && (diffVds > 1.0e-10)) { T0 = 1.0 + Rds * Idl; dT0_dVg = dRds_dVg * Idl + Rds * dIdl_dVg; dT0_dVd = Rds * dIdl_dVd; dT0_dVb = dRds_dVb * Idl + Rds * dIdl_dVb; T2 = Vdsat / Esat; T1 = Leff + T2; dT1_dVg = (dVdsat_dVg - T2 * dEsatL_dVg / Leff) / Esat; dT1_dVd = (dVdsat_dVd - T2 * dEsatL_dVd / Leff) / Esat; dT1_dVb = (dVdsat_dVb - T2 * dEsatL_dVb / Leff) / Esat; Cclm = FP * PvagTerm * T0 * T1 / (pParam->BSIM4v7pclm * pParam->BSIM4v7litl); dCclm_dVg = Cclm * (dFP_dVg / FP + dPvagTerm_dVg / PvagTerm + dT0_dVg / T0 + dT1_dVg / T1); dCclm_dVb = Cclm * (dPvagTerm_dVb / PvagTerm + dT0_dVb / T0 + dT1_dVb / T1); dCclm_dVd = Cclm * (dPvagTerm_dVd / PvagTerm + dT0_dVd / T0 + dT1_dVd / T1); VACLM = Cclm * diffVds; dVACLM_dVg = dCclm_dVg * diffVds - dVdseff_dVg * Cclm; dVACLM_dVb = dCclm_dVb * diffVds - dVdseff_dVb * Cclm; dVACLM_dVd = dCclm_dVd * diffVds + (1.0 - dVdseff_dVd) * Cclm; } else { VACLM = Cclm = MAX_EXP; dVACLM_dVd = dVACLM_dVg = dVACLM_dVb = 0.0; dCclm_dVd = dCclm_dVg = dCclm_dVb = 0.0; } /* Calculate VADIBL */ if (pParam->BSIM4v7thetaRout > MIN_EXP) { T8 = Abulk * Vdsat; T0 = Vgst2Vtm * T8; dT0_dVg = Vgst2Vtm * Abulk * dVdsat_dVg + T8 + Vgst2Vtm * Vdsat * dAbulk_dVg; dT0_dVb = Vgst2Vtm * (dAbulk_dVb * Vdsat + Abulk * dVdsat_dVb); dT0_dVd = Vgst2Vtm * Abulk * dVdsat_dVd; T1 = Vgst2Vtm + T8; dT1_dVg = 1.0 + Abulk * dVdsat_dVg + Vdsat * dAbulk_dVg; dT1_dVb = Abulk * dVdsat_dVb + dAbulk_dVb * Vdsat; dT1_dVd = Abulk * dVdsat_dVd; T9 = T1 * T1; T2 = pParam->BSIM4v7thetaRout; VADIBL = (Vgst2Vtm - T0 / T1) / T2; dVADIBL_dVg = (1.0 - dT0_dVg / T1 + T0 * dT1_dVg / T9) / T2; dVADIBL_dVb = (-dT0_dVb / T1 + T0 * dT1_dVb / T9) / T2; dVADIBL_dVd = (-dT0_dVd / T1 + T0 * dT1_dVd / T9) / T2; T7 = pParam->BSIM4v7pdiblb * Vbseff; if (T7 >= -0.9) { T3 = 1.0 / (1.0 + T7); VADIBL *= T3; dVADIBL_dVg *= T3; dVADIBL_dVb = (dVADIBL_dVb - VADIBL * pParam->BSIM4v7pdiblb) * T3; dVADIBL_dVd *= T3; } else { T4 = 1.0 / (0.8 + T7); T3 = (17.0 + 20.0 * T7) * T4; dVADIBL_dVg *= T3; dVADIBL_dVb = dVADIBL_dVb * T3 - VADIBL * pParam->BSIM4v7pdiblb * T4 * T4; dVADIBL_dVd *= T3; VADIBL *= T3; } dVADIBL_dVg = dVADIBL_dVg * PvagTerm + VADIBL * dPvagTerm_dVg; dVADIBL_dVb = dVADIBL_dVb * PvagTerm + VADIBL * dPvagTerm_dVb; dVADIBL_dVd = dVADIBL_dVd * PvagTerm + VADIBL * dPvagTerm_dVd; VADIBL *= PvagTerm; } else { VADIBL = MAX_EXP; dVADIBL_dVd = dVADIBL_dVg = dVADIBL_dVb = 0.0; } /* Calculate Va */ Va = Vasat + VACLM; dVa_dVg = dVasat_dVg + dVACLM_dVg; dVa_dVb = dVasat_dVb + dVACLM_dVb; dVa_dVd = dVasat_dVd + dVACLM_dVd; /* Calculate VADITS */ T0 = pParam->BSIM4v7pditsd * Vds; if (T0 > EXP_THRESHOLD) { T1 = MAX_EXP; dT1_dVd = 0; } else { T1 = exp(T0); dT1_dVd = T1 * pParam->BSIM4v7pditsd; } if (pParam->BSIM4v7pdits > MIN_EXP) { T2 = 1.0 + model->BSIM4v7pditsl * Leff; VADITS = (1.0 + T2 * T1) / pParam->BSIM4v7pdits; dVADITS_dVg = VADITS * dFP_dVg; dVADITS_dVd = FP * T2 * dT1_dVd / pParam->BSIM4v7pdits; VADITS *= FP; } else { VADITS = MAX_EXP; dVADITS_dVg = dVADITS_dVd = 0; } /* Calculate VASCBE */ if ((pParam->BSIM4v7pscbe2 > 0.0)&&(pParam->BSIM4v7pscbe1>=0.0)) /*4.6.2*/ { if (diffVds > pParam->BSIM4v7pscbe1 * pParam->BSIM4v7litl / EXP_THRESHOLD) { T0 = pParam->BSIM4v7pscbe1 * pParam->BSIM4v7litl / diffVds; VASCBE = Leff * exp(T0) / pParam->BSIM4v7pscbe2; T1 = T0 * VASCBE / diffVds; dVASCBE_dVg = T1 * dVdseff_dVg; dVASCBE_dVd = -T1 * (1.0 - dVdseff_dVd); dVASCBE_dVb = T1 * dVdseff_dVb; } else { VASCBE = MAX_EXP * Leff/pParam->BSIM4v7pscbe2; dVASCBE_dVg = dVASCBE_dVd = dVASCBE_dVb = 0.0; } } else { VASCBE = MAX_EXP; dVASCBE_dVg = dVASCBE_dVd = dVASCBE_dVb = 0.0; } /* Add DIBL to Ids */ T9 = diffVds / VADIBL; T0 = 1.0 + T9; Idsa = Idl * T0; dIdsa_dVg = T0 * dIdl_dVg - Idl * (dVdseff_dVg + T9 * dVADIBL_dVg) / VADIBL; dIdsa_dVd = T0 * dIdl_dVd + Idl * (1.0 - dVdseff_dVd - T9 * dVADIBL_dVd) / VADIBL; dIdsa_dVb = T0 * dIdl_dVb - Idl * (dVdseff_dVb + T9 * dVADIBL_dVb) / VADIBL; /* Add DITS to Ids */ T9 = diffVds / VADITS; T0 = 1.0 + T9; dIdsa_dVg = T0 * dIdsa_dVg - Idsa * (dVdseff_dVg + T9 * dVADITS_dVg) / VADITS; dIdsa_dVd = T0 * dIdsa_dVd + Idsa * (1.0 - dVdseff_dVd - T9 * dVADITS_dVd) / VADITS; dIdsa_dVb = T0 * dIdsa_dVb - Idsa * dVdseff_dVb / VADITS; Idsa *= T0; /* Add CLM to Ids */ T0 = log(Va / Vasat); dT0_dVg = dVa_dVg / Va - dVasat_dVg / Vasat; dT0_dVb = dVa_dVb / Va - dVasat_dVb / Vasat; dT0_dVd = dVa_dVd / Va - dVasat_dVd / Vasat; T1 = T0 / Cclm; T9 = 1.0 + T1; dT9_dVg = (dT0_dVg - T1 * dCclm_dVg) / Cclm; dT9_dVb = (dT0_dVb - T1 * dCclm_dVb) / Cclm; dT9_dVd = (dT0_dVd - T1 * dCclm_dVd) / Cclm; dIdsa_dVg = dIdsa_dVg * T9 + Idsa * dT9_dVg; dIdsa_dVb = dIdsa_dVb * T9 + Idsa * dT9_dVb; dIdsa_dVd = dIdsa_dVd * T9 + Idsa * dT9_dVd; Idsa *= T9; /* Substrate current begins */ tmp = pParam->BSIM4v7alpha0 + pParam->BSIM4v7alpha1 * Leff; if ((tmp <= 0.0) || (pParam->BSIM4v7beta0 <= 0.0)) { Isub = Gbd = Gbb = Gbg = 0.0; } else { T2 = tmp / Leff; if (diffVds > pParam->BSIM4v7beta0 / EXP_THRESHOLD) { T0 = -pParam->BSIM4v7beta0 / diffVds; T1 = T2 * diffVds * exp(T0); T3 = T1 / diffVds * (T0 - 1.0); dT1_dVg = T3 * dVdseff_dVg; dT1_dVd = T3 * (dVdseff_dVd - 1.0); dT1_dVb = T3 * dVdseff_dVb; } else { T3 = T2 * MIN_EXP; T1 = T3 * diffVds; dT1_dVg = -T3 * dVdseff_dVg; dT1_dVd = T3 * (1.0 - dVdseff_dVd); dT1_dVb = -T3 * dVdseff_dVb; } T4 = Idsa * Vdseff; Isub = T1 * T4; Gbg = T1 * (dIdsa_dVg * Vdseff + Idsa * dVdseff_dVg) + T4 * dT1_dVg; Gbd = T1 * (dIdsa_dVd * Vdseff + Idsa * dVdseff_dVd) + T4 * dT1_dVd; Gbb = T1 * (dIdsa_dVb * Vdseff + Idsa * dVdseff_dVb) + T4 * dT1_dVb; Gbd += Gbg * dVgsteff_dVd; Gbb += Gbg * dVgsteff_dVb; Gbg *= dVgsteff_dVg; Gbb *= dVbseff_dVb; } here->BSIM4v7csub = Isub; here->BSIM4v7gbbs = Gbb; here->BSIM4v7gbgs = Gbg; here->BSIM4v7gbds = Gbd; /* Add SCBE to Ids */ T9 = diffVds / VASCBE; T0 = 1.0 + T9; Ids = Idsa * T0; Gm = T0 * dIdsa_dVg - Idsa * (dVdseff_dVg + T9 * dVASCBE_dVg) / VASCBE; Gds = T0 * dIdsa_dVd + Idsa * (1.0 - dVdseff_dVd - T9 * dVASCBE_dVd) / VASCBE; Gmb = T0 * dIdsa_dVb - Idsa * (dVdseff_dVb + T9 * dVASCBE_dVb) / VASCBE; tmp1 = Gds + Gm * dVgsteff_dVd; tmp2 = Gmb + Gm * dVgsteff_dVb; tmp3 = Gm; Gm = (Ids * dVdseff_dVg + Vdseff * tmp3) * dVgsteff_dVg; Gds = Ids * (dVdseff_dVd + dVdseff_dVg * dVgsteff_dVd) + Vdseff * tmp1; Gmb = (Ids * (dVdseff_dVb + dVdseff_dVg * dVgsteff_dVb) + Vdseff * tmp2) * dVbseff_dVb; cdrain = Ids * Vdseff; /* Source End Velocity Limit */ if((model->BSIM4v7vtlGiven) && (model->BSIM4v7vtl > 0.0) ) { T12 = 1.0 / Leff / CoxeffWovL; T11 = T12 / Vgsteff; T10 = -T11 / Vgsteff; vs = cdrain * T11; /* vs */ dvs_dVg = Gm * T11 + cdrain * T10 * dVgsteff_dVg; dvs_dVd = Gds * T11 + cdrain * T10 * dVgsteff_dVd; dvs_dVb = Gmb * T11 + cdrain * T10 * dVgsteff_dVb; T0 = 2 * MM; T1 = vs / (pParam->BSIM4v7vtl * pParam->BSIM4v7tfactor); if(T1 > 0.0) { T2 = 1.0 + exp(T0 * log(T1)); T3 = (T2 - 1.0) * T0 / vs; Fsevl = 1.0 / exp(log(T2)/ T0); dT2_dVg = T3 * dvs_dVg; dT2_dVd = T3 * dvs_dVd; dT2_dVb = T3 * dvs_dVb; T4 = -1.0 / T0 * Fsevl / T2; dFsevl_dVg = T4 * dT2_dVg; dFsevl_dVd = T4 * dT2_dVd; dFsevl_dVb = T4 * dT2_dVb; } else { Fsevl = 1.0; dFsevl_dVg = 0.0; dFsevl_dVd = 0.0; dFsevl_dVb = 0.0; } Gm *=Fsevl; Gm += cdrain * dFsevl_dVg; Gmb *=Fsevl; Gmb += cdrain * dFsevl_dVb; Gds *=Fsevl; Gds += cdrain * dFsevl_dVd; cdrain *= Fsevl; } here->BSIM4v7gds = Gds; here->BSIM4v7gm = Gm; here->BSIM4v7gmbs = Gmb; here->BSIM4v7IdovVds = Ids; if( here->BSIM4v7IdovVds <= 1.0e-9) here->BSIM4v7IdovVds = 1.0e-9; /* Calculate Rg */ if ((here->BSIM4v7rgateMod > 1) || (here->BSIM4v7trnqsMod != 0) || (here->BSIM4v7acnqsMod != 0)) { T9 = pParam->BSIM4v7xrcrg2 * model->BSIM4v7vtm; T0 = T9 * beta; dT0_dVd = (dbeta_dVd + dbeta_dVg * dVgsteff_dVd) * T9; dT0_dVb = (dbeta_dVb + dbeta_dVg * dVgsteff_dVb) * T9; dT0_dVg = dbeta_dVg * T9; here->BSIM4v7gcrg = pParam->BSIM4v7xrcrg1 * ( T0 + Ids); here->BSIM4v7gcrgd = pParam->BSIM4v7xrcrg1 * (dT0_dVd + tmp1); here->BSIM4v7gcrgb = pParam->BSIM4v7xrcrg1 * (dT0_dVb + tmp2) * dVbseff_dVb; here->BSIM4v7gcrgg = pParam->BSIM4v7xrcrg1 * (dT0_dVg + tmp3) * dVgsteff_dVg; if (here->BSIM4v7nf != 1.0) { here->BSIM4v7gcrg *= here->BSIM4v7nf; here->BSIM4v7gcrgg *= here->BSIM4v7nf; here->BSIM4v7gcrgd *= here->BSIM4v7nf; here->BSIM4v7gcrgb *= here->BSIM4v7nf; } if (here->BSIM4v7rgateMod == 2) { T10 = here->BSIM4v7grgeltd * here->BSIM4v7grgeltd; T11 = here->BSIM4v7grgeltd + here->BSIM4v7gcrg; here->BSIM4v7gcrg = here->BSIM4v7grgeltd * here->BSIM4v7gcrg / T11; T12 = T10 / T11 / T11; here->BSIM4v7gcrgg *= T12; here->BSIM4v7gcrgd *= T12; here->BSIM4v7gcrgb *= T12; } here->BSIM4v7gcrgs = -(here->BSIM4v7gcrgg + here->BSIM4v7gcrgd + here->BSIM4v7gcrgb); } /* Calculate bias-dependent external S/D resistance */ if (model->BSIM4v7rdsMod) { /* Rs(V) */ T0 = vgs - pParam->BSIM4v7vfbsd; T1 = sqrt(T0 * T0 + 1.0e-4); vgs_eff = 0.5 * (T0 + T1); dvgs_eff_dvg = vgs_eff / T1; T0 = 1.0 + pParam->BSIM4v7prwg * vgs_eff; dT0_dvg = -pParam->BSIM4v7prwg / T0 / T0 * dvgs_eff_dvg; T1 = -pParam->BSIM4v7prwb * vbs; dT1_dvb = -pParam->BSIM4v7prwb; T2 = 1.0 / T0 + T1; T3 = T2 + sqrt(T2 * T2 + 0.01); dT3_dvg = T3 / (T3 - T2); dT3_dvb = dT3_dvg * dT1_dvb; dT3_dvg *= dT0_dvg; T4 = pParam->BSIM4v7rs0 * 0.5; Rs = pParam->BSIM4v7rswmin + T3 * T4; dRs_dvg = T4 * dT3_dvg; dRs_dvb = T4 * dT3_dvb; T0 = 1.0 + here->BSIM4v7sourceConductance * Rs; here->BSIM4v7gstot = here->BSIM4v7sourceConductance / T0; T0 = -here->BSIM4v7gstot * here->BSIM4v7gstot; dgstot_dvd = 0.0; /* place holder */ dgstot_dvg = T0 * dRs_dvg; dgstot_dvb = T0 * dRs_dvb; dgstot_dvs = -(dgstot_dvg + dgstot_dvb + dgstot_dvd); /* Rd(V) */ T0 = vgd - pParam->BSIM4v7vfbsd; T1 = sqrt(T0 * T0 + 1.0e-4); vgd_eff = 0.5 * (T0 + T1); dvgd_eff_dvg = vgd_eff / T1; T0 = 1.0 + pParam->BSIM4v7prwg * vgd_eff; dT0_dvg = -pParam->BSIM4v7prwg / T0 / T0 * dvgd_eff_dvg; T1 = -pParam->BSIM4v7prwb * vbd; dT1_dvb = -pParam->BSIM4v7prwb; T2 = 1.0 / T0 + T1; T3 = T2 + sqrt(T2 * T2 + 0.01); dT3_dvg = T3 / (T3 - T2); dT3_dvb = dT3_dvg * dT1_dvb; dT3_dvg *= dT0_dvg; T4 = pParam->BSIM4v7rd0 * 0.5; Rd = pParam->BSIM4v7rdwmin + T3 * T4; dRd_dvg = T4 * dT3_dvg; dRd_dvb = T4 * dT3_dvb; T0 = 1.0 + here->BSIM4v7drainConductance * Rd; here->BSIM4v7gdtot = here->BSIM4v7drainConductance / T0; T0 = -here->BSIM4v7gdtot * here->BSIM4v7gdtot; dgdtot_dvs = 0.0; dgdtot_dvg = T0 * dRd_dvg; dgdtot_dvb = T0 * dRd_dvb; dgdtot_dvd = -(dgdtot_dvg + dgdtot_dvb + dgdtot_dvs); here->BSIM4v7gstotd = vses * dgstot_dvd; here->BSIM4v7gstotg = vses * dgstot_dvg; here->BSIM4v7gstots = vses * dgstot_dvs; here->BSIM4v7gstotb = vses * dgstot_dvb; T2 = vdes - vds; here->BSIM4v7gdtotd = T2 * dgdtot_dvd; here->BSIM4v7gdtotg = T2 * dgdtot_dvg; here->BSIM4v7gdtots = T2 * dgdtot_dvs; here->BSIM4v7gdtotb = T2 * dgdtot_dvb; } else /* WDLiu: for bypass */ { here->BSIM4v7gstot = here->BSIM4v7gstotd = here->BSIM4v7gstotg = 0.0; here->BSIM4v7gstots = here->BSIM4v7gstotb = 0.0; here->BSIM4v7gdtot = here->BSIM4v7gdtotd = here->BSIM4v7gdtotg = 0.0; here->BSIM4v7gdtots = here->BSIM4v7gdtotb = 0.0; } /* GIDL/GISL Models */ if(model->BSIM4v7mtrlMod == 0) T0 = 3.0 * toxe; else T0 = model->BSIM4v7epsrsub * toxe / epsrox; /* Calculate GIDL current */ vgs_eff = here->BSIM4v7vgs_eff; dvgs_eff_dvg = here->BSIM4v7dvgs_eff_dvg; vgd_eff = here->BSIM4v7vgd_eff; dvgd_eff_dvg = here->BSIM4v7dvgd_eff_dvg; if (model->BSIM4v7gidlMod==0){ if(model->BSIM4v7mtrlMod ==0) T1 = (vds - vgs_eff - pParam->BSIM4v7egidl ) / T0; else T1 = (vds - vgs_eff - pParam->BSIM4v7egidl + pParam->BSIM4v7vfbsd) / T0; if ((pParam->BSIM4v7agidl <= 0.0) || (pParam->BSIM4v7bgidl <= 0.0) || (T1 <= 0.0) || (pParam->BSIM4v7cgidl <= 0.0) || (vbd > 0.0)) Igidl = Ggidld = Ggidlg = Ggidlb = 0.0; else { dT1_dVd = 1.0 / T0; dT1_dVg = -dvgs_eff_dvg * dT1_dVd; T2 = pParam->BSIM4v7bgidl / T1; if (T2 < 100.0) { Igidl = pParam->BSIM4v7agidl * pParam->BSIM4v7weffCJ * T1 * exp(-T2); T3 = Igidl * (1.0 + T2) / T1; Ggidld = T3 * dT1_dVd; Ggidlg = T3 * dT1_dVg; } else { Igidl = pParam->BSIM4v7agidl * pParam->BSIM4v7weffCJ * 3.720075976e-44; Ggidld = Igidl * dT1_dVd; Ggidlg = Igidl * dT1_dVg; Igidl *= T1; } T4 = vbd * vbd; T5 = -vbd * T4; T6 = pParam->BSIM4v7cgidl + T5; T7 = T5 / T6; T8 = 3.0 * pParam->BSIM4v7cgidl * T4 / T6 / T6; Ggidld = Ggidld * T7 + Igidl * T8; Ggidlg = Ggidlg * T7; Ggidlb = -Igidl * T8; Igidl *= T7; } here->BSIM4v7Igidl = Igidl; here->BSIM4v7ggidld = Ggidld; here->BSIM4v7ggidlg = Ggidlg; here->BSIM4v7ggidlb = Ggidlb; /* Calculate GISL current */ if(model->BSIM4v7mtrlMod ==0) T1 = (-vds - vgd_eff - pParam->BSIM4v7egisl ) / T0; else T1 = (-vds - vgd_eff - pParam->BSIM4v7egisl + pParam->BSIM4v7vfbsd ) / T0; if ((pParam->BSIM4v7agisl <= 0.0) || (pParam->BSIM4v7bgisl <= 0.0) || (T1 <= 0.0) || (pParam->BSIM4v7cgisl <= 0.0) || (vbs > 0.0)) Igisl = Ggisls = Ggislg = Ggislb = 0.0; else { dT1_dVd = 1.0 / T0; dT1_dVg = -dvgd_eff_dvg * dT1_dVd; T2 = pParam->BSIM4v7bgisl / T1; if (T2 < 100.0) { Igisl = pParam->BSIM4v7agisl * pParam->BSIM4v7weffCJ * T1 * exp(-T2); T3 = Igisl * (1.0 + T2) / T1; Ggisls = T3 * dT1_dVd; Ggislg = T3 * dT1_dVg; } else { Igisl = pParam->BSIM4v7agisl * pParam->BSIM4v7weffCJ * 3.720075976e-44; Ggisls = Igisl * dT1_dVd; Ggislg = Igisl * dT1_dVg; Igisl *= T1; } T4 = vbs * vbs; T5 = -vbs * T4; T6 = pParam->BSIM4v7cgisl + T5; T7 = T5 / T6; T8 = 3.0 * pParam->BSIM4v7cgisl * T4 / T6 / T6; Ggisls = Ggisls * T7 + Igisl * T8; Ggislg = Ggislg * T7; Ggislb = -Igisl * T8; Igisl *= T7; } here->BSIM4v7Igisl = Igisl; here->BSIM4v7ggisls = Ggisls; here->BSIM4v7ggislg = Ggislg; here->BSIM4v7ggislb = Ggislb; } else{ /* v4.7 New Gidl/GISL model */ /* GISL */ if (model->BSIM4v7mtrlMod==0) T1 = (-vds - pParam->BSIM4v7rgisl * vgd_eff - pParam->BSIM4v7egisl) / T0; else T1 = (-vds - pParam->BSIM4v7rgisl * vgd_eff - pParam->BSIM4v7egisl + pParam->BSIM4v7vfbsd) / T0; if ((pParam->BSIM4v7agisl <= 0.0) || (pParam->BSIM4v7bgisl <= 0.0) || (T1 <= 0.0) || (pParam->BSIM4v7cgisl < 0.0) ) Igisl = Ggisls = Ggislg = Ggislb = 0.0; else { dT1_dVd = 1 / T0; dT1_dVg = - pParam->BSIM4v7rgisl * dT1_dVd * dvgd_eff_dvg; T2 = pParam->BSIM4v7bgisl / T1; if (T2 < EXPL_THRESHOLD) { Igisl = pParam->BSIM4v7weffCJ * pParam->BSIM4v7agisl * T1 * exp(-T2); T3 = Igisl / T1 * (T2 + 1); Ggisls = T3 * dT1_dVd; Ggislg = T3 * dT1_dVg; } else { T3 = pParam->BSIM4v7weffCJ * pParam->BSIM4v7agisl * MIN_EXPL; Igisl = T3 * T1 ; Ggisls = T3 * dT1_dVd; Ggislg = T3 * dT1_dVg; } T4 = vbs - pParam->BSIM4v7fgisl; if (T4==0) T5 = EXPL_THRESHOLD; else T5 = pParam->BSIM4v7kgisl / T4; if (T5BSIM4v7Igisl = Igisl; here->BSIM4v7ggisls = Ggisls; here->BSIM4v7ggislg = Ggislg; here->BSIM4v7ggislb = Ggislb; /* End of GISL */ /* GIDL */ if (model->BSIM4v7mtrlMod==0) T1 = (vds - pParam->BSIM4v7rgidl * vgs_eff - pParam->BSIM4v7egidl) / T0; else T1 = (vds - pParam->BSIM4v7rgidl * vgs_eff - pParam->BSIM4v7egidl + pParam->BSIM4v7vfbsd) / T0; if ((pParam->BSIM4v7agidl <= 0.0) || (pParam->BSIM4v7bgidl <= 0.0) || (T1 <= 0.0) || (pParam->BSIM4v7cgidl < 0.0) ) Igidl = Ggidld = Ggidlg = Ggidlb = 0.0; else { dT1_dVd = 1 / T0; dT1_dVg = - pParam->BSIM4v7rgidl * dT1_dVd * dvgs_eff_dvg; T2 = pParam->BSIM4v7bgidl / T1; if (T2 < EXPL_THRESHOLD) { Igidl = pParam->BSIM4v7weffCJ * pParam->BSIM4v7agidl * T1 * exp(-T2); T3 = Igidl / T1 * (T2 + 1); Ggidld = T3 * dT1_dVd; Ggidlg = T3 * dT1_dVg; } else { T3 = pParam->BSIM4v7weffCJ * pParam->BSIM4v7agidl * MIN_EXPL; Igidl = T3 * T1 ; Ggidld = T3 * dT1_dVd; Ggidlg = T3 * dT1_dVg; } T4 = vbd - pParam->BSIM4v7fgidl; if (T4==0) T5 = EXPL_THRESHOLD; else T5 = pParam->BSIM4v7kgidl / T4; if (T5BSIM4v7Igidl = Igidl; here->BSIM4v7ggidld = Ggidld; here->BSIM4v7ggidlg = Ggidlg; here->BSIM4v7ggidlb = Ggidlb; /* End of New GIDL */ } /*End of Gidl*/ /* Calculate gate tunneling current */ if ((model->BSIM4v7igcMod != 0) || (model->BSIM4v7igbMod != 0)) { Vfb = here->BSIM4v7vfbzb; V3 = Vfb - Vgs_eff + Vbseff - DELTA_3; if (Vfb <= 0.0) T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * Vfb); else T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * Vfb); T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = Vfb - 0.5 * (V3 + T0); dVfbeff_dVg = T1 * dVgs_eff_dVg; dVfbeff_dVb = -T1; /* WDLiu: -No surprise? No. -Good! */ Voxacc = Vfb - Vfbeff; dVoxacc_dVg = -dVfbeff_dVg; dVoxacc_dVb = -dVfbeff_dVb; if (Voxacc < 0.0) /* WDLiu: Avoiding numerical instability. */ Voxacc = dVoxacc_dVg = dVoxacc_dVb = 0.0; T0 = 0.5 * pParam->BSIM4v7k1ox; T3 = Vgs_eff - Vfbeff - Vbseff - Vgsteff; if (pParam->BSIM4v7k1ox == 0.0) Voxdepinv = dVoxdepinv_dVg = dVoxdepinv_dVd = dVoxdepinv_dVb = 0.0; else if (T3 < 0.0) { Voxdepinv = -T3; dVoxdepinv_dVg = -dVgs_eff_dVg + dVfbeff_dVg + dVgsteff_dVg; dVoxdepinv_dVd = dVgsteff_dVd; dVoxdepinv_dVb = dVfbeff_dVb + 1.0 + dVgsteff_dVb; } else { T1 = sqrt(T0 * T0 + T3); T2 = T0 / T1; Voxdepinv = pParam->BSIM4v7k1ox * (T1 - T0); dVoxdepinv_dVg = T2 * (dVgs_eff_dVg - dVfbeff_dVg - dVgsteff_dVg); dVoxdepinv_dVd = -T2 * dVgsteff_dVd; dVoxdepinv_dVb = -T2 * (dVfbeff_dVb + 1.0 + dVgsteff_dVb); } Voxdepinv += Vgsteff; dVoxdepinv_dVg += dVgsteff_dVg; dVoxdepinv_dVd += dVgsteff_dVd; dVoxdepinv_dVb += dVgsteff_dVb; } if(model->BSIM4v7tempMod < 2) tmp = Vtm; else /* model->BSIM4v7tempMod = 2 , 3*/ tmp = Vtm0; if (model->BSIM4v7igcMod) { T0 = tmp * pParam->BSIM4v7nigc; if(model->BSIM4v7igcMod == 1) { VxNVt = (Vgs_eff - model->BSIM4v7type * here->BSIM4v7vth0) / T0; if (VxNVt > EXP_THRESHOLD) { Vaux = Vgs_eff - model->BSIM4v7type * here->BSIM4v7vth0; dVaux_dVg = dVgs_eff_dVg; dVaux_dVd = 0.0; dVaux_dVb = 0.0; } } else if (model->BSIM4v7igcMod == 2) { VxNVt = (Vgs_eff - here->BSIM4v7von) / T0; if (VxNVt > EXP_THRESHOLD) { Vaux = Vgs_eff - here->BSIM4v7von; dVaux_dVg = dVgs_eff_dVg; dVaux_dVd = -dVth_dVd; dVaux_dVb = -dVth_dVb; } } if (VxNVt < -EXP_THRESHOLD) { Vaux = T0 * log(1.0 + MIN_EXP); dVaux_dVg = dVaux_dVd = dVaux_dVb = 0.0; } else if ((VxNVt >= -EXP_THRESHOLD) && (VxNVt <= EXP_THRESHOLD)) { ExpVxNVt = exp(VxNVt); Vaux = T0 * log(1.0 + ExpVxNVt); dVaux_dVg = ExpVxNVt / (1.0 + ExpVxNVt); if(model->BSIM4v7igcMod == 1) { dVaux_dVd = 0.0; dVaux_dVb = 0.0; } else if (model->BSIM4v7igcMod == 2) { dVaux_dVd = -dVgs_eff_dVg * dVth_dVd; dVaux_dVb = -dVgs_eff_dVg * dVth_dVb; } dVaux_dVg *= dVgs_eff_dVg; } T2 = Vgs_eff * Vaux; dT2_dVg = dVgs_eff_dVg * Vaux + Vgs_eff * dVaux_dVg; dT2_dVd = Vgs_eff * dVaux_dVd; dT2_dVb = Vgs_eff * dVaux_dVb; T11 = pParam->BSIM4v7Aechvb; T12 = pParam->BSIM4v7Bechvb; T3 = pParam->BSIM4v7aigc * pParam->BSIM4v7cigc - pParam->BSIM4v7bigc; T4 = pParam->BSIM4v7bigc * pParam->BSIM4v7cigc; T5 = T12 * (pParam->BSIM4v7aigc + T3 * Voxdepinv - T4 * Voxdepinv * Voxdepinv); if (T5 > EXP_THRESHOLD) { T6 = MAX_EXP; dT6_dVg = dT6_dVd = dT6_dVb = 0.0; } else if (T5 < -EXP_THRESHOLD) { T6 = MIN_EXP; dT6_dVg = dT6_dVd = dT6_dVb = 0.0; } else { T6 = exp(T5); dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * Voxdepinv); dT6_dVd = dT6_dVg * dVoxdepinv_dVd; dT6_dVb = dT6_dVg * dVoxdepinv_dVb; dT6_dVg *= dVoxdepinv_dVg; } Igc = T11 * T2 * T6; dIgc_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg); dIgc_dVd = T11 * (T2 * dT6_dVd + T6 * dT2_dVd); dIgc_dVb = T11 * (T2 * dT6_dVb + T6 * dT2_dVb); if (model->BSIM4v7pigcdGiven) { Pigcd = pParam->BSIM4v7pigcd; dPigcd_dVg = dPigcd_dVd = dPigcd_dVb = 0.0; } else { /* T11 = pParam->BSIM4v7Bechvb * toxe; v4.7 */ T11 = -pParam->BSIM4v7Bechvb; T12 = Vgsteff + 1.0e-20; T13 = T11 / T12 / T12; T14 = -T13 / T12; Pigcd = T13 * (1.0 - 0.5 * Vdseff / T12); dPigcd_dVg = T14 * (2.0 + 0.5 * (dVdseff_dVg - 3.0 * Vdseff / T12)); dPigcd_dVd = 0.5 * T14 * dVdseff_dVd; dPigcd_dVb = 0.5 * T14 * dVdseff_dVb; } T7 = -Pigcd * Vdseff; /* bugfix */ dT7_dVg = -Vdseff * dPigcd_dVg - Pigcd * dVdseff_dVg; dT7_dVd = -Vdseff * dPigcd_dVd - Pigcd * dVdseff_dVd + dT7_dVg * dVgsteff_dVd; dT7_dVb = -Vdseff * dPigcd_dVb - Pigcd * dVdseff_dVb + dT7_dVg * dVgsteff_dVb; dT7_dVg *= dVgsteff_dVg; dT7_dVb *= dVbseff_dVb; T8 = T7 * T7 + 2.0e-4; dT8_dVg = 2.0 * T7; dT8_dVd = dT8_dVg * dT7_dVd; dT8_dVb = dT8_dVg * dT7_dVb; dT8_dVg *= dT7_dVg; if (T7 > EXP_THRESHOLD) { T9 = MAX_EXP; dT9_dVg = dT9_dVd = dT9_dVb = 0.0; } else if (T7 < -EXP_THRESHOLD) { T9 = MIN_EXP; dT9_dVg = dT9_dVd = dT9_dVb = 0.0; } else { T9 = exp(T7); dT9_dVg = T9 * dT7_dVg; dT9_dVd = T9 * dT7_dVd; dT9_dVb = T9 * dT7_dVb; } T0 = T8 * T8; T1 = T9 - 1.0 + 1.0e-4; T10 = (T1 - T7) / T8; dT10_dVg = (dT9_dVg - dT7_dVg - T10 * dT8_dVg) / T8; dT10_dVd = (dT9_dVd - dT7_dVd - T10 * dT8_dVd) / T8; dT10_dVb = (dT9_dVb - dT7_dVb - T10 * dT8_dVb) / T8; Igcs = Igc * T10; dIgcs_dVg = dIgc_dVg * T10 + Igc * dT10_dVg; dIgcs_dVd = dIgc_dVd * T10 + Igc * dT10_dVd; dIgcs_dVb = dIgc_dVb * T10 + Igc * dT10_dVb; T1 = T9 - 1.0 - 1.0e-4; T10 = (T7 * T9 - T1) / T8; dT10_dVg = (dT7_dVg * T9 + (T7 - 1.0) * dT9_dVg - T10 * dT8_dVg) / T8; dT10_dVd = (dT7_dVd * T9 + (T7 - 1.0) * dT9_dVd - T10 * dT8_dVd) / T8; dT10_dVb = (dT7_dVb * T9 + (T7 - 1.0) * dT9_dVb - T10 * dT8_dVb) / T8; Igcd = Igc * T10; dIgcd_dVg = dIgc_dVg * T10 + Igc * dT10_dVg; dIgcd_dVd = dIgc_dVd * T10 + Igc * dT10_dVd; dIgcd_dVb = dIgc_dVb * T10 + Igc * dT10_dVb; here->BSIM4v7Igcs = Igcs; here->BSIM4v7gIgcsg = dIgcs_dVg; here->BSIM4v7gIgcsd = dIgcs_dVd; here->BSIM4v7gIgcsb = dIgcs_dVb * dVbseff_dVb; here->BSIM4v7Igcd = Igcd; here->BSIM4v7gIgcdg = dIgcd_dVg; here->BSIM4v7gIgcdd = dIgcd_dVd; here->BSIM4v7gIgcdb = dIgcd_dVb * dVbseff_dVb; T0 = vgs - (pParam->BSIM4v7vfbsd + pParam->BSIM4v7vfbsdoff); vgs_eff = sqrt(T0 * T0 + 1.0e-4); dvgs_eff_dvg = T0 / vgs_eff; T2 = vgs * vgs_eff; dT2_dVg = vgs * dvgs_eff_dvg + vgs_eff; T11 = pParam->BSIM4v7AechvbEdgeS; T12 = pParam->BSIM4v7BechvbEdge; T3 = pParam->BSIM4v7aigs * pParam->BSIM4v7cigs - pParam->BSIM4v7bigs; T4 = pParam->BSIM4v7bigs * pParam->BSIM4v7cigs; T5 = T12 * (pParam->BSIM4v7aigs + T3 * vgs_eff - T4 * vgs_eff * vgs_eff); if (T5 > EXP_THRESHOLD) { T6 = MAX_EXP; dT6_dVg = 0.0; } else if (T5 < -EXP_THRESHOLD) { T6 = MIN_EXP; dT6_dVg = 0.0; } else { T6 = exp(T5); dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * vgs_eff) * dvgs_eff_dvg; } Igs = T11 * T2 * T6; dIgs_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg); dIgs_dVs = -dIgs_dVg; T0 = vgd - (pParam->BSIM4v7vfbsd + pParam->BSIM4v7vfbsdoff); vgd_eff = sqrt(T0 * T0 + 1.0e-4); dvgd_eff_dvg = T0 / vgd_eff; T2 = vgd * vgd_eff; dT2_dVg = vgd * dvgd_eff_dvg + vgd_eff; T11 = pParam->BSIM4v7AechvbEdgeD; T3 = pParam->BSIM4v7aigd * pParam->BSIM4v7cigd - pParam->BSIM4v7bigd; T4 = pParam->BSIM4v7bigd * pParam->BSIM4v7cigd; T5 = T12 * (pParam->BSIM4v7aigd + T3 * vgd_eff - T4 * vgd_eff * vgd_eff); if (T5 > EXP_THRESHOLD) { T6 = MAX_EXP; dT6_dVg = 0.0; } else if (T5 < -EXP_THRESHOLD) { T6 = MIN_EXP; dT6_dVg = 0.0; } else { T6 = exp(T5); dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * vgd_eff) * dvgd_eff_dvg; } Igd = T11 * T2 * T6; dIgd_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg); dIgd_dVd = -dIgd_dVg; here->BSIM4v7Igs = Igs; here->BSIM4v7gIgsg = dIgs_dVg; here->BSIM4v7gIgss = dIgs_dVs; here->BSIM4v7Igd = Igd; here->BSIM4v7gIgdg = dIgd_dVg; here->BSIM4v7gIgdd = dIgd_dVd; } else { here->BSIM4v7Igcs = here->BSIM4v7gIgcsg = here->BSIM4v7gIgcsd = here->BSIM4v7gIgcsb = 0.0; here->BSIM4v7Igcd = here->BSIM4v7gIgcdg = here->BSIM4v7gIgcdd = here->BSIM4v7gIgcdb = 0.0; here->BSIM4v7Igs = here->BSIM4v7gIgsg = here->BSIM4v7gIgss = 0.0; here->BSIM4v7Igd = here->BSIM4v7gIgdg = here->BSIM4v7gIgdd = 0.0; } if (model->BSIM4v7igbMod) { T0 = tmp * pParam->BSIM4v7nigbacc; T1 = -Vgs_eff + Vbseff + Vfb; VxNVt = T1 / T0; if (VxNVt > EXP_THRESHOLD) { Vaux = T1; dVaux_dVg = -dVgs_eff_dVg; dVaux_dVb = 1.0; } else if (VxNVt < -EXP_THRESHOLD) { Vaux = T0 * log(1.0 + MIN_EXP); dVaux_dVg = dVaux_dVb = 0.0; } else { ExpVxNVt = exp(VxNVt); Vaux = T0 * log(1.0 + ExpVxNVt); dVaux_dVb = ExpVxNVt / (1.0 + ExpVxNVt); dVaux_dVg = -dVaux_dVb * dVgs_eff_dVg; } T2 = (Vgs_eff - Vbseff) * Vaux; dT2_dVg = dVgs_eff_dVg * Vaux + (Vgs_eff - Vbseff) * dVaux_dVg; dT2_dVb = -Vaux + (Vgs_eff - Vbseff) * dVaux_dVb; T11 = 4.97232e-7 * pParam->BSIM4v7weff * pParam->BSIM4v7leff * pParam->BSIM4v7ToxRatio; T12 = -7.45669e11 * toxe; T3 = pParam->BSIM4v7aigbacc * pParam->BSIM4v7cigbacc - pParam->BSIM4v7bigbacc; T4 = pParam->BSIM4v7bigbacc * pParam->BSIM4v7cigbacc; T5 = T12 * (pParam->BSIM4v7aigbacc + T3 * Voxacc - T4 * Voxacc * Voxacc); if (T5 > EXP_THRESHOLD) { T6 = MAX_EXP; dT6_dVg = dT6_dVb = 0.0; } else if (T5 < -EXP_THRESHOLD) { T6 = MIN_EXP; dT6_dVg = dT6_dVb = 0.0; } else { T6 = exp(T5); dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * Voxacc); dT6_dVb = dT6_dVg * dVoxacc_dVb; dT6_dVg *= dVoxacc_dVg; } Igbacc = T11 * T2 * T6; dIgbacc_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg); dIgbacc_dVb = T11 * (T2 * dT6_dVb + T6 * dT2_dVb); T0 = tmp * pParam->BSIM4v7nigbinv; T1 = Voxdepinv - pParam->BSIM4v7eigbinv; VxNVt = T1 / T0; if (VxNVt > EXP_THRESHOLD) { Vaux = T1; dVaux_dVg = dVoxdepinv_dVg; dVaux_dVd = dVoxdepinv_dVd; dVaux_dVb = dVoxdepinv_dVb; } else if (VxNVt < -EXP_THRESHOLD) { Vaux = T0 * log(1.0 + MIN_EXP); dVaux_dVg = dVaux_dVd = dVaux_dVb = 0.0; } else { ExpVxNVt = exp(VxNVt); Vaux = T0 * log(1.0 + ExpVxNVt); dVaux_dVg = ExpVxNVt / (1.0 + ExpVxNVt); dVaux_dVd = dVaux_dVg * dVoxdepinv_dVd; dVaux_dVb = dVaux_dVg * dVoxdepinv_dVb; dVaux_dVg *= dVoxdepinv_dVg; } T2 = (Vgs_eff - Vbseff) * Vaux; dT2_dVg = dVgs_eff_dVg * Vaux + (Vgs_eff - Vbseff) * dVaux_dVg; dT2_dVd = (Vgs_eff - Vbseff) * dVaux_dVd; dT2_dVb = -Vaux + (Vgs_eff - Vbseff) * dVaux_dVb; T11 *= 0.75610; T12 *= 1.31724; T3 = pParam->BSIM4v7aigbinv * pParam->BSIM4v7cigbinv - pParam->BSIM4v7bigbinv; T4 = pParam->BSIM4v7bigbinv * pParam->BSIM4v7cigbinv; T5 = T12 * (pParam->BSIM4v7aigbinv + T3 * Voxdepinv - T4 * Voxdepinv * Voxdepinv); if (T5 > EXP_THRESHOLD) { T6 = MAX_EXP; dT6_dVg = dT6_dVd = dT6_dVb = 0.0; } else if (T5 < -EXP_THRESHOLD) { T6 = MIN_EXP; dT6_dVg = dT6_dVd = dT6_dVb = 0.0; } else { T6 = exp(T5); dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * Voxdepinv); dT6_dVd = dT6_dVg * dVoxdepinv_dVd; dT6_dVb = dT6_dVg * dVoxdepinv_dVb; dT6_dVg *= dVoxdepinv_dVg; } Igbinv = T11 * T2 * T6; dIgbinv_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg); dIgbinv_dVd = T11 * (T2 * dT6_dVd + T6 * dT2_dVd); dIgbinv_dVb = T11 * (T2 * dT6_dVb + T6 * dT2_dVb); here->BSIM4v7Igb = Igbinv + Igbacc; here->BSIM4v7gIgbg = dIgbinv_dVg + dIgbacc_dVg; here->BSIM4v7gIgbd = dIgbinv_dVd; here->BSIM4v7gIgbb = (dIgbinv_dVb + dIgbacc_dVb) * dVbseff_dVb; } else { here->BSIM4v7Igb = here->BSIM4v7gIgbg = here->BSIM4v7gIgbd = here->BSIM4v7gIgbs = here->BSIM4v7gIgbb = 0.0; } /* End of Gate current */ if (here->BSIM4v7nf != 1.0) { cdrain *= here->BSIM4v7nf; here->BSIM4v7gds *= here->BSIM4v7nf; here->BSIM4v7gm *= here->BSIM4v7nf; here->BSIM4v7gmbs *= here->BSIM4v7nf; here->BSIM4v7IdovVds *= here->BSIM4v7nf; here->BSIM4v7gbbs *= here->BSIM4v7nf; here->BSIM4v7gbgs *= here->BSIM4v7nf; here->BSIM4v7gbds *= here->BSIM4v7nf; here->BSIM4v7csub *= here->BSIM4v7nf; here->BSIM4v7Igidl *= here->BSIM4v7nf; here->BSIM4v7ggidld *= here->BSIM4v7nf; here->BSIM4v7ggidlg *= here->BSIM4v7nf; here->BSIM4v7ggidlb *= here->BSIM4v7nf; here->BSIM4v7Igisl *= here->BSIM4v7nf; here->BSIM4v7ggisls *= here->BSIM4v7nf; here->BSIM4v7ggislg *= here->BSIM4v7nf; here->BSIM4v7ggislb *= here->BSIM4v7nf; here->BSIM4v7Igcs *= here->BSIM4v7nf; here->BSIM4v7gIgcsg *= here->BSIM4v7nf; here->BSIM4v7gIgcsd *= here->BSIM4v7nf; here->BSIM4v7gIgcsb *= here->BSIM4v7nf; here->BSIM4v7Igcd *= here->BSIM4v7nf; here->BSIM4v7gIgcdg *= here->BSIM4v7nf; here->BSIM4v7gIgcdd *= here->BSIM4v7nf; here->BSIM4v7gIgcdb *= here->BSIM4v7nf; here->BSIM4v7Igs *= here->BSIM4v7nf; here->BSIM4v7gIgsg *= here->BSIM4v7nf; here->BSIM4v7gIgss *= here->BSIM4v7nf; here->BSIM4v7Igd *= here->BSIM4v7nf; here->BSIM4v7gIgdg *= here->BSIM4v7nf; here->BSIM4v7gIgdd *= here->BSIM4v7nf; here->BSIM4v7Igb *= here->BSIM4v7nf; here->BSIM4v7gIgbg *= here->BSIM4v7nf; here->BSIM4v7gIgbd *= here->BSIM4v7nf; here->BSIM4v7gIgbb *= here->BSIM4v7nf; } here->BSIM4v7ggidls = -(here->BSIM4v7ggidld + here->BSIM4v7ggidlg + here->BSIM4v7ggidlb); here->BSIM4v7ggisld = -(here->BSIM4v7ggisls + here->BSIM4v7ggislg + here->BSIM4v7ggislb); here->BSIM4v7gIgbs = -(here->BSIM4v7gIgbg + here->BSIM4v7gIgbd + here->BSIM4v7gIgbb); here->BSIM4v7gIgcss = -(here->BSIM4v7gIgcsg + here->BSIM4v7gIgcsd + here->BSIM4v7gIgcsb); here->BSIM4v7gIgcds = -(here->BSIM4v7gIgcdg + here->BSIM4v7gIgcdd + here->BSIM4v7gIgcdb); here->BSIM4v7cd = cdrain; /* Calculations for noise analysis */ if (model->BSIM4v7tnoiMod == 0) { Abulk = Abulk0 * pParam->BSIM4v7abulkCVfactor; Vdsat = Vgsteff / Abulk; T0 = Vdsat - Vds - DELTA_4; T1 = sqrt(T0 * T0 + 4.0 * DELTA_4 * Vdsat); if (T0 >= 0.0) Vdseff = Vdsat - 0.5 * (T0 + T1); else { T3 = (DELTA_4 + DELTA_4) / (T1 - T0); T4 = 1.0 - T3; T5 = Vdsat * T3 / (T1 - T0); Vdseff = Vdsat * T4; } if (Vds == 0.0) Vdseff = 0.0; T0 = Abulk * Vdseff; T1 = 12.0 * (Vgsteff - 0.5 * T0 + 1.0e-20); T2 = Vdseff / T1; T3 = T0 * T2; here->BSIM4v7qinv = Coxeff * pParam->BSIM4v7weffCV * here->BSIM4v7nf * pParam->BSIM4v7leffCV * (Vgsteff - 0.5 * T0 + Abulk * T3); } else if(model->BSIM4v7tnoiMod == 2) { here->BSIM4v7noiGd0 = here->BSIM4v7nf * beta * Vgsteff / (1.0 + gche * Rds); } /* * BSIM4v7 C-V begins */ if ((model->BSIM4v7xpart < 0) || (!ChargeComputationNeeded)) { qgate = qdrn = qsrc = qbulk = 0.0; here->BSIM4v7cggb = here->BSIM4v7cgsb = here->BSIM4v7cgdb = 0.0; here->BSIM4v7cdgb = here->BSIM4v7cdsb = here->BSIM4v7cddb = 0.0; here->BSIM4v7cbgb = here->BSIM4v7cbsb = here->BSIM4v7cbdb = 0.0; here->BSIM4v7csgb = here->BSIM4v7cssb = here->BSIM4v7csdb = 0.0; here->BSIM4v7cgbb = here->BSIM4v7csbb = here->BSIM4v7cdbb = here->BSIM4v7cbbb = 0.0; here->BSIM4v7cqdb = here->BSIM4v7cqsb = here->BSIM4v7cqgb = here->BSIM4v7cqbb = 0.0; here->BSIM4v7gtau = 0.0; goto finished; } else if (model->BSIM4v7capMod == 0) { if (Vbseff < 0.0) { VbseffCV = Vbs; /*4.6.2*/ dVbseffCV_dVb = 1.0; } else { VbseffCV = pParam->BSIM4v7phi - Phis; dVbseffCV_dVb = -dPhis_dVb * dVbseff_dVb; /*4.6.2*/ } Vfb = pParam->BSIM4v7vfbcv; Vth = Vfb + pParam->BSIM4v7phi + pParam->BSIM4v7k1ox * sqrtPhis; Vgst = Vgs_eff - Vth; dVth_dVb = pParam->BSIM4v7k1ox * dsqrtPhis_dVb *dVbseff_dVb; /*4.6.2*/ dVgst_dVb = -dVth_dVb; dVgst_dVg = dVgs_eff_dVg; CoxWL = model->BSIM4v7coxe * pParam->BSIM4v7weffCV * pParam->BSIM4v7leffCV * here->BSIM4v7nf; Arg1 = Vgs_eff - VbseffCV - Vfb; if (Arg1 <= 0.0) { qgate = CoxWL * Arg1; qbulk = -qgate; qdrn = 0.0; here->BSIM4v7cggb = CoxWL * dVgs_eff_dVg; here->BSIM4v7cgdb = 0.0; here->BSIM4v7cgsb = CoxWL * (dVbseffCV_dVb - dVgs_eff_dVg); here->BSIM4v7cdgb = 0.0; here->BSIM4v7cddb = 0.0; here->BSIM4v7cdsb = 0.0; here->BSIM4v7cbgb = -CoxWL * dVgs_eff_dVg; here->BSIM4v7cbdb = 0.0; here->BSIM4v7cbsb = -here->BSIM4v7cgsb; } /* Arg1 <= 0.0, end of accumulation */ else if (Vgst <= 0.0) { T1 = 0.5 * pParam->BSIM4v7k1ox; T2 = sqrt(T1 * T1 + Arg1); qgate = CoxWL * pParam->BSIM4v7k1ox * (T2 - T1); qbulk = -qgate; qdrn = 0.0; T0 = CoxWL * T1 / T2; here->BSIM4v7cggb = T0 * dVgs_eff_dVg; here->BSIM4v7cgdb = 0.0; here->BSIM4v7cgsb = T0 * (dVbseffCV_dVb - dVgs_eff_dVg); here->BSIM4v7cdgb = 0.0; here->BSIM4v7cddb = 0.0; here->BSIM4v7cdsb = 0.0; here->BSIM4v7cbgb = -here->BSIM4v7cggb; here->BSIM4v7cbdb = 0.0; here->BSIM4v7cbsb = -here->BSIM4v7cgsb; } /* Vgst <= 0.0, end of depletion */ else { One_Third_CoxWL = CoxWL / 3.0; Two_Third_CoxWL = 2.0 * One_Third_CoxWL; AbulkCV = Abulk0 * pParam->BSIM4v7abulkCVfactor; dAbulkCV_dVb = pParam->BSIM4v7abulkCVfactor * dAbulk0_dVb*dVbseff_dVb; dVdsat_dVg = 1.0 / AbulkCV; /*4.6.2*/ Vdsat = Vgst * dVdsat_dVg; dVdsat_dVb = - (Vdsat * dAbulkCV_dVb + dVth_dVb)* dVdsat_dVg; if (model->BSIM4v7xpart > 0.5) { /* 0/100 Charge partition model */ if (Vdsat <= Vds) { /* saturation region */ T1 = Vdsat / 3.0; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4v7phi - T1); T2 = -Two_Third_CoxWL * Vgst; qbulk = -(qgate + T2); qdrn = 0.0; here->BSIM4v7cggb = One_Third_CoxWL * (3.0 - dVdsat_dVg) * dVgs_eff_dVg; T2 = -One_Third_CoxWL * dVdsat_dVb; here->BSIM4v7cgsb = -(here->BSIM4v7cggb + T2); here->BSIM4v7cgdb = 0.0; here->BSIM4v7cdgb = 0.0; here->BSIM4v7cddb = 0.0; here->BSIM4v7cdsb = 0.0; here->BSIM4v7cbgb = -(here->BSIM4v7cggb - Two_Third_CoxWL * dVgs_eff_dVg); T3 = -(T2 + Two_Third_CoxWL * dVth_dVb); here->BSIM4v7cbsb = -(here->BSIM4v7cbgb + T3); here->BSIM4v7cbdb = 0.0; } else { /* linear region */ Alphaz = Vgst / Vdsat; T1 = 2.0 * Vdsat - Vds; T2 = Vds / (3.0 * T1); T3 = T2 * Vds; T9 = 0.25 * CoxWL; T4 = T9 * Alphaz; T7 = 2.0 * Vds - T1 - 3.0 * T3; T8 = T3 - T1 - 2.0 * Vds; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4v7phi - 0.5 * (Vds - T3)); T10 = T4 * T8; qdrn = T4 * T7; qbulk = -(qgate + qdrn + T10); T5 = T3 / T1; here->BSIM4v7cggb = CoxWL * (1.0 - T5 * dVdsat_dVg) * dVgs_eff_dVg; T11 = -CoxWL * T5 * dVdsat_dVb; here->BSIM4v7cgdb = CoxWL * (T2 - 0.5 + 0.5 * T5); here->BSIM4v7cgsb = -(here->BSIM4v7cggb + T11 + here->BSIM4v7cgdb); T6 = 1.0 / Vdsat; dAlphaz_dVg = T6 * (1.0 - Alphaz * dVdsat_dVg); dAlphaz_dVb = -T6 * (dVth_dVb + Alphaz * dVdsat_dVb); T7 = T9 * T7; T8 = T9 * T8; T9 = 2.0 * T4 * (1.0 - 3.0 * T5); here->BSIM4v7cdgb = (T7 * dAlphaz_dVg - T9 * dVdsat_dVg) * dVgs_eff_dVg; T12 = T7 * dAlphaz_dVb - T9 * dVdsat_dVb; here->BSIM4v7cddb = T4 * (3.0 - 6.0 * T2 - 3.0 * T5); here->BSIM4v7cdsb = -(here->BSIM4v7cdgb + T12 + here->BSIM4v7cddb); T9 = 2.0 * T4 * (1.0 + T5); T10 = (T8 * dAlphaz_dVg - T9 * dVdsat_dVg) * dVgs_eff_dVg; T11 = T8 * dAlphaz_dVb - T9 * dVdsat_dVb; T12 = T4 * (2.0 * T2 + T5 - 1.0); T0 = -(T10 + T11 + T12); here->BSIM4v7cbgb = -(here->BSIM4v7cggb + here->BSIM4v7cdgb + T10); here->BSIM4v7cbdb = -(here->BSIM4v7cgdb + here->BSIM4v7cddb + T12); here->BSIM4v7cbsb = -(here->BSIM4v7cgsb + here->BSIM4v7cdsb + T0); } } else if (model->BSIM4v7xpart < 0.5) { /* 40/60 Charge partition model */ if (Vds >= Vdsat) { /* saturation region */ T1 = Vdsat / 3.0; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4v7phi - T1); T2 = -Two_Third_CoxWL * Vgst; qbulk = -(qgate + T2); qdrn = 0.4 * T2; here->BSIM4v7cggb = One_Third_CoxWL * (3.0 - dVdsat_dVg) * dVgs_eff_dVg; T2 = -One_Third_CoxWL * dVdsat_dVb; here->BSIM4v7cgsb = -(here->BSIM4v7cggb + T2); here->BSIM4v7cgdb = 0.0; T3 = 0.4 * Two_Third_CoxWL; here->BSIM4v7cdgb = -T3 * dVgs_eff_dVg; here->BSIM4v7cddb = 0.0; T4 = T3 * dVth_dVb; here->BSIM4v7cdsb = -(T4 + here->BSIM4v7cdgb); here->BSIM4v7cbgb = -(here->BSIM4v7cggb - Two_Third_CoxWL * dVgs_eff_dVg); T3 = -(T2 + Two_Third_CoxWL * dVth_dVb); here->BSIM4v7cbsb = -(here->BSIM4v7cbgb + T3); here->BSIM4v7cbdb = 0.0; } else { /* linear region */ Alphaz = Vgst / Vdsat; T1 = 2.0 * Vdsat - Vds; T2 = Vds / (3.0 * T1); T3 = T2 * Vds; T9 = 0.25 * CoxWL; T4 = T9 * Alphaz; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4v7phi - 0.5 * (Vds - T3)); T5 = T3 / T1; here->BSIM4v7cggb = CoxWL * (1.0 - T5 * dVdsat_dVg) * dVgs_eff_dVg; tmp = -CoxWL * T5 * dVdsat_dVb; here->BSIM4v7cgdb = CoxWL * (T2 - 0.5 + 0.5 * T5); here->BSIM4v7cgsb = -(here->BSIM4v7cggb + here->BSIM4v7cgdb + tmp); T6 = 1.0 / Vdsat; dAlphaz_dVg = T6 * (1.0 - Alphaz * dVdsat_dVg); dAlphaz_dVb = -T6 * (dVth_dVb + Alphaz * dVdsat_dVb); T6 = 8.0 * Vdsat * Vdsat - 6.0 * Vdsat * Vds + 1.2 * Vds * Vds; T8 = T2 / T1; T7 = Vds - T1 - T8 * T6; qdrn = T4 * T7; T7 *= T9; tmp = T8 / T1; tmp1 = T4 * (2.0 - 4.0 * tmp * T6 + T8 * (16.0 * Vdsat - 6.0 * Vds)); here->BSIM4v7cdgb = (T7 * dAlphaz_dVg - tmp1 * dVdsat_dVg) * dVgs_eff_dVg; T10 = T7 * dAlphaz_dVb - tmp1 * dVdsat_dVb; here->BSIM4v7cddb = T4 * (2.0 - (1.0 / (3.0 * T1 * T1) + 2.0 * tmp) * T6 + T8 * (6.0 * Vdsat - 2.4 * Vds)); here->BSIM4v7cdsb = -(here->BSIM4v7cdgb + T10 + here->BSIM4v7cddb); T7 = 2.0 * (T1 + T3); qbulk = -(qgate - T4 * T7); T7 *= T9; T0 = 4.0 * T4 * (1.0 - T5); T12 = (-T7 * dAlphaz_dVg - T0 * dVdsat_dVg) * dVgs_eff_dVg - here->BSIM4v7cdgb; /*4.6.2*/ T11 = -T7 * dAlphaz_dVb - T10 - T0 * dVdsat_dVb; T10 = -4.0 * T4 * (T2 - 0.5 + 0.5 * T5) - here->BSIM4v7cddb; tmp = -(T10 + T11 + T12); here->BSIM4v7cbgb = -(here->BSIM4v7cggb + here->BSIM4v7cdgb + T12); here->BSIM4v7cbdb = -(here->BSIM4v7cgdb + here->BSIM4v7cddb + T10); here->BSIM4v7cbsb = -(here->BSIM4v7cgsb + here->BSIM4v7cdsb + tmp); } } else { /* 50/50 partitioning */ if (Vds >= Vdsat) { /* saturation region */ T1 = Vdsat / 3.0; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4v7phi - T1); T2 = -Two_Third_CoxWL * Vgst; qbulk = -(qgate + T2); qdrn = 0.5 * T2; here->BSIM4v7cggb = One_Third_CoxWL * (3.0 - dVdsat_dVg) * dVgs_eff_dVg; T2 = -One_Third_CoxWL * dVdsat_dVb; here->BSIM4v7cgsb = -(here->BSIM4v7cggb + T2); here->BSIM4v7cgdb = 0.0; here->BSIM4v7cdgb = -One_Third_CoxWL * dVgs_eff_dVg; here->BSIM4v7cddb = 0.0; T4 = One_Third_CoxWL * dVth_dVb; here->BSIM4v7cdsb = -(T4 + here->BSIM4v7cdgb); here->BSIM4v7cbgb = -(here->BSIM4v7cggb - Two_Third_CoxWL * dVgs_eff_dVg); T3 = -(T2 + Two_Third_CoxWL * dVth_dVb); here->BSIM4v7cbsb = -(here->BSIM4v7cbgb + T3); here->BSIM4v7cbdb = 0.0; } else { /* linear region */ Alphaz = Vgst / Vdsat; T1 = 2.0 * Vdsat - Vds; T2 = Vds / (3.0 * T1); T3 = T2 * Vds; T9 = 0.25 * CoxWL; T4 = T9 * Alphaz; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4v7phi - 0.5 * (Vds - T3)); T5 = T3 / T1; here->BSIM4v7cggb = CoxWL * (1.0 - T5 * dVdsat_dVg) * dVgs_eff_dVg; tmp = -CoxWL * T5 * dVdsat_dVb; here->BSIM4v7cgdb = CoxWL * (T2 - 0.5 + 0.5 * T5); here->BSIM4v7cgsb = -(here->BSIM4v7cggb + here->BSIM4v7cgdb + tmp); T6 = 1.0 / Vdsat; dAlphaz_dVg = T6 * (1.0 - Alphaz * dVdsat_dVg); dAlphaz_dVb = -T6 * (dVth_dVb + Alphaz * dVdsat_dVb); T7 = T1 + T3; qdrn = -T4 * T7; qbulk = - (qgate + qdrn + qdrn); T7 *= T9; T0 = T4 * (2.0 * T5 - 2.0); here->BSIM4v7cdgb = (T0 * dVdsat_dVg - T7 * dAlphaz_dVg) * dVgs_eff_dVg; T12 = T0 * dVdsat_dVb - T7 * dAlphaz_dVb; here->BSIM4v7cddb = T4 * (1.0 - 2.0 * T2 - T5); here->BSIM4v7cdsb = -(here->BSIM4v7cdgb + T12 + here->BSIM4v7cddb); here->BSIM4v7cbgb = -(here->BSIM4v7cggb + 2.0 * here->BSIM4v7cdgb); here->BSIM4v7cbdb = -(here->BSIM4v7cgdb + 2.0 * here->BSIM4v7cddb); here->BSIM4v7cbsb = -(here->BSIM4v7cgsb + 2.0 * here->BSIM4v7cdsb); } /* end of linear region */ } /* end of 50/50 partition */ } /* end of inversion */ } /* end of capMod=0 */ else { if (Vbseff < 0.0) { VbseffCV = Vbseff; dVbseffCV_dVb = 1.0; } else { VbseffCV = pParam->BSIM4v7phi - Phis; dVbseffCV_dVb = -dPhis_dVb; } CoxWL = model->BSIM4v7coxe * pParam->BSIM4v7weffCV * pParam->BSIM4v7leffCV * here->BSIM4v7nf; if(model->BSIM4v7cvchargeMod == 0) { /* Seperate VgsteffCV with noff and voffcv */ noff = n * pParam->BSIM4v7noff; dnoff_dVd = pParam->BSIM4v7noff * dn_dVd; dnoff_dVb = pParam->BSIM4v7noff * dn_dVb; T0 = Vtm * noff; voffcv = pParam->BSIM4v7voffcv; VgstNVt = (Vgst - voffcv) / T0; if (VgstNVt > EXP_THRESHOLD) { Vgsteff = Vgst - voffcv; dVgsteff_dVg = dVgs_eff_dVg; dVgsteff_dVd = -dVth_dVd; dVgsteff_dVb = -dVth_dVb; } else if (VgstNVt < -EXP_THRESHOLD) { Vgsteff = T0 * log(1.0 + MIN_EXP); dVgsteff_dVg = 0.0; dVgsteff_dVd = Vgsteff / noff; dVgsteff_dVb = dVgsteff_dVd * dnoff_dVb; dVgsteff_dVd *= dnoff_dVd; } else { ExpVgst = exp(VgstNVt); Vgsteff = T0 * log(1.0 + ExpVgst); dVgsteff_dVg = ExpVgst / (1.0 + ExpVgst); dVgsteff_dVd = -dVgsteff_dVg * (dVth_dVd + (Vgst - voffcv) / noff * dnoff_dVd) + Vgsteff / noff * dnoff_dVd; dVgsteff_dVb = -dVgsteff_dVg * (dVth_dVb + (Vgst - voffcv) / noff * dnoff_dVb) + Vgsteff / noff * dnoff_dVb; dVgsteff_dVg *= dVgs_eff_dVg; } /* End of VgsteffCV for cvchargeMod = 0 */ } else { T0 = n * Vtm; T1 = pParam->BSIM4v7mstarcv * Vgst; T2 = T1 / T0; if (T2 > EXP_THRESHOLD) { T10 = T1; dT10_dVg = pParam->BSIM4v7mstarcv * dVgs_eff_dVg; dT10_dVd = -dVth_dVd * pParam->BSIM4v7mstarcv; dT10_dVb = -dVth_dVb * pParam->BSIM4v7mstarcv; } else if (T2 < -EXP_THRESHOLD) { T10 = Vtm * log(1.0 + MIN_EXP); dT10_dVg = 0.0; dT10_dVd = T10 * dn_dVd; dT10_dVb = T10 * dn_dVb; T10 *= n; } else { ExpVgst = exp(T2); T3 = Vtm * log(1.0 + ExpVgst); T10 = n * T3; dT10_dVg = pParam->BSIM4v7mstarcv * ExpVgst / (1.0 + ExpVgst); dT10_dVb = T3 * dn_dVb - dT10_dVg * (dVth_dVb + Vgst * dn_dVb / n); dT10_dVd = T3 * dn_dVd - dT10_dVg * (dVth_dVd + Vgst * dn_dVd / n); dT10_dVg *= dVgs_eff_dVg; } T1 = pParam->BSIM4v7voffcbncv - (1.0 - pParam->BSIM4v7mstarcv) * Vgst; T2 = T1 / T0; if (T2 < -EXP_THRESHOLD) { T3 = model->BSIM4v7coxe * MIN_EXP / pParam->BSIM4v7cdep0; T9 = pParam->BSIM4v7mstarcv + T3 * n; dT9_dVg = 0.0; dT9_dVd = dn_dVd * T3; dT9_dVb = dn_dVb * T3; } else if (T2 > EXP_THRESHOLD) { T3 = model->BSIM4v7coxe * MAX_EXP / pParam->BSIM4v7cdep0; T9 = pParam->BSIM4v7mstarcv + T3 * n; dT9_dVg = 0.0; dT9_dVd = dn_dVd * T3; dT9_dVb = dn_dVb * T3; } else { ExpVgst = exp(T2); T3 = model->BSIM4v7coxe / pParam->BSIM4v7cdep0; T4 = T3 * ExpVgst; T5 = T1 * T4 / T0; T9 = pParam->BSIM4v7mstarcv + n * T4; dT9_dVg = T3 * (pParam->BSIM4v7mstarcv - 1.0) * ExpVgst / Vtm; dT9_dVb = T4 * dn_dVb - dT9_dVg * dVth_dVb - T5 * dn_dVb; dT9_dVd = T4 * dn_dVd - dT9_dVg * dVth_dVd - T5 * dn_dVd; dT9_dVg *= dVgs_eff_dVg; } Vgsteff = T10 / T9; T11 = T9 * T9; dVgsteff_dVg = (T9 * dT10_dVg - T10 * dT9_dVg) / T11; dVgsteff_dVd = (T9 * dT10_dVd - T10 * dT9_dVd) / T11; dVgsteff_dVb = (T9 * dT10_dVb - T10 * dT9_dVb) / T11; /* End of VgsteffCV for cvchargeMod = 1 */ } if (model->BSIM4v7capMod == 1) { Vfb = here->BSIM4v7vfbzb; V3 = Vfb - Vgs_eff + VbseffCV - DELTA_3; if (Vfb <= 0.0) T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * Vfb); else T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * Vfb); T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = Vfb - 0.5 * (V3 + T0); dVfbeff_dVg = T1 * dVgs_eff_dVg; dVfbeff_dVb = -T1 * dVbseffCV_dVb; Qac0 = CoxWL * (Vfbeff - Vfb); dQac0_dVg = CoxWL * dVfbeff_dVg; dQac0_dVb = CoxWL * dVfbeff_dVb; T0 = 0.5 * pParam->BSIM4v7k1ox; T3 = Vgs_eff - Vfbeff - VbseffCV - Vgsteff; if (pParam->BSIM4v7k1ox == 0.0) { T1 = 0.0; T2 = 0.0; } else if (T3 < 0.0) { T1 = T0 + T3 / pParam->BSIM4v7k1ox; T2 = CoxWL; } else { T1 = sqrt(T0 * T0 + T3); T2 = CoxWL * T0 / T1; } Qsub0 = CoxWL * pParam->BSIM4v7k1ox * (T1 - T0); dQsub0_dVg = T2 * (dVgs_eff_dVg - dVfbeff_dVg - dVgsteff_dVg); dQsub0_dVd = -T2 * dVgsteff_dVd; dQsub0_dVb = -T2 * (dVfbeff_dVb + dVbseffCV_dVb + dVgsteff_dVb); AbulkCV = Abulk0 * pParam->BSIM4v7abulkCVfactor; dAbulkCV_dVb = pParam->BSIM4v7abulkCVfactor * dAbulk0_dVb; VdsatCV = Vgsteff / AbulkCV; T0 = VdsatCV - Vds - DELTA_4; dT0_dVg = 1.0 / AbulkCV; dT0_dVb = -VdsatCV * dAbulkCV_dVb / AbulkCV; T1 = sqrt(T0 * T0 + 4.0 * DELTA_4 * VdsatCV); dT1_dVg = (T0 + DELTA_4 + DELTA_4) / T1; dT1_dVd = -T0 / T1; dT1_dVb = dT1_dVg * dT0_dVb; dT1_dVg *= dT0_dVg; if (T0 >= 0.0) { VdseffCV = VdsatCV - 0.5 * (T0 + T1); dVdseffCV_dVg = 0.5 * (dT0_dVg - dT1_dVg); dVdseffCV_dVd = 0.5 * (1.0 - dT1_dVd); dVdseffCV_dVb = 0.5 * (dT0_dVb - dT1_dVb); } else { T3 = (DELTA_4 + DELTA_4) / (T1 - T0); T4 = 1.0 - T3; T5 = VdsatCV * T3 / (T1 - T0); VdseffCV = VdsatCV * T4; dVdseffCV_dVg = dT0_dVg * T4 + T5 * (dT1_dVg - dT0_dVg); dVdseffCV_dVd = T5 * (dT1_dVd + 1.0); dVdseffCV_dVb = dT0_dVb * (T4 - T5) + T5 * dT1_dVb; } if (Vds == 0.0) { VdseffCV = 0.0; dVdseffCV_dVg = 0.0; dVdseffCV_dVb = 0.0; } T0 = AbulkCV * VdseffCV; T1 = 12.0 * (Vgsteff - 0.5 * T0 + 1.0e-20); T2 = VdseffCV / T1; T3 = T0 * T2; T4 = (1.0 - 12.0 * T2 * T2 * AbulkCV); T5 = (6.0 * T0 * (4.0 * Vgsteff - T0) / (T1 * T1) - 0.5); T6 = 12.0 * T2 * T2 * Vgsteff; qgate = CoxWL * (Vgsteff - 0.5 * VdseffCV + T3); Cgg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); Cgd1 = CoxWL * T5 * dVdseffCV_dVd + Cgg1 * dVgsteff_dVd; Cgb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Cgg1 * dVgsteff_dVb; Cgg1 *= dVgsteff_dVg; T7 = 1.0 - AbulkCV; qbulk = CoxWL * T7 * (0.5 * VdseffCV - T3); T4 = -T7 * (T4 - 1.0); T5 = -T7 * T5; T6 = -(T7 * T6 + (0.5 * VdseffCV - T3)); Cbg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); Cbd1 = CoxWL * T5 * dVdseffCV_dVd + Cbg1 * dVgsteff_dVd; Cbb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Cbg1 * dVgsteff_dVb; Cbg1 *= dVgsteff_dVg; if (model->BSIM4v7xpart > 0.5) { /* 0/100 Charge petition model */ T1 = T1 + T1; qsrc = -CoxWL * (0.5 * Vgsteff + 0.25 * T0 - T0 * T0 / T1); T7 = (4.0 * Vgsteff - T0) / (T1 * T1); T4 = -(0.5 + 24.0 * T0 * T0 / (T1 * T1)); T5 = -(0.25 * AbulkCV - 12.0 * AbulkCV * T0 * T7); T6 = -(0.25 * VdseffCV - 12.0 * T0 * VdseffCV * T7); Csg = CoxWL * (T4 + T5 * dVdseffCV_dVg); Csd = CoxWL * T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd; Csb = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Csg * dVgsteff_dVb; Csg *= dVgsteff_dVg; } else if (model->BSIM4v7xpart < 0.5) { /* 40/60 Charge petition model */ T1 = T1 / 12.0; T2 = 0.5 * CoxWL / (T1 * T1); T3 = Vgsteff * (2.0 * T0 * T0 / 3.0 + Vgsteff * (Vgsteff - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T2 * T3; T7 = 4.0 / 3.0 * Vgsteff * (Vgsteff - T0) + 0.4 * T0 * T0; T4 = -2.0 * qsrc / T1 - T2 * (Vgsteff * (3.0 * Vgsteff - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0); T5 = (qsrc / T1 + T2 * T7) * AbulkCV; T6 = (qsrc / T1 * VdseffCV + T2 * T7 * VdseffCV); Csg = (T4 + T5 * dVdseffCV_dVg); Csd = T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd; Csb = (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Csg * dVgsteff_dVb; Csg *= dVgsteff_dVg; } else { /* 50/50 Charge petition model */ qsrc = -0.5 * (qgate + qbulk); Csg = -0.5 * (Cgg1 + Cbg1); Csb = -0.5 * (Cgb1 + Cbb1); Csd = -0.5 * (Cgd1 + Cbd1); } qgate += Qac0 + Qsub0; qbulk -= (Qac0 + Qsub0); qdrn = -(qgate + qbulk + qsrc); Cgg = dQac0_dVg + dQsub0_dVg + Cgg1; Cgd = dQsub0_dVd + Cgd1; Cgb = dQac0_dVb + dQsub0_dVb + Cgb1; Cbg = Cbg1 - dQac0_dVg - dQsub0_dVg; Cbd = Cbd1 - dQsub0_dVd; Cbb = Cbb1 - dQac0_dVb - dQsub0_dVb; Cgb *= dVbseff_dVb; Cbb *= dVbseff_dVb; Csb *= dVbseff_dVb; here->BSIM4v7cggb = Cgg; here->BSIM4v7cgsb = -(Cgg + Cgd + Cgb); here->BSIM4v7cgdb = Cgd; here->BSIM4v7cdgb = -(Cgg + Cbg + Csg); here->BSIM4v7cdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb + Csg + Csd + Csb); here->BSIM4v7cddb = -(Cgd + Cbd + Csd); here->BSIM4v7cbgb = Cbg; here->BSIM4v7cbsb = -(Cbg + Cbd + Cbb); here->BSIM4v7cbdb = Cbd; } /* Charge-Thickness capMod (CTM) begins */ else if (model->BSIM4v7capMod == 2) { V3 = here->BSIM4v7vfbzb - Vgs_eff + VbseffCV - DELTA_3; if (here->BSIM4v7vfbzb <= 0.0) T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * here->BSIM4v7vfbzb); else T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * here->BSIM4v7vfbzb); T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = here->BSIM4v7vfbzb - 0.5 * (V3 + T0); dVfbeff_dVg = T1 * dVgs_eff_dVg; dVfbeff_dVb = -T1 * dVbseffCV_dVb; Cox = model->BSIM4v7coxp; Tox = 1.0e8 * model->BSIM4v7toxp; T0 = (Vgs_eff - VbseffCV - here->BSIM4v7vfbzb) / Tox; dT0_dVg = dVgs_eff_dVg / Tox; dT0_dVb = -dVbseffCV_dVb / Tox; tmp = T0 * pParam->BSIM4v7acde; if ((-EXP_THRESHOLD < tmp) && (tmp < EXP_THRESHOLD)) { Tcen = pParam->BSIM4v7ldeb * exp(tmp); dTcen_dVg = pParam->BSIM4v7acde * Tcen; dTcen_dVb = dTcen_dVg * dT0_dVb; dTcen_dVg *= dT0_dVg; } else if (tmp <= -EXP_THRESHOLD) { Tcen = pParam->BSIM4v7ldeb * MIN_EXP; dTcen_dVg = dTcen_dVb = 0.0; } else { Tcen = pParam->BSIM4v7ldeb * MAX_EXP; dTcen_dVg = dTcen_dVb = 0.0; } LINK = 1.0e-3 * model->BSIM4v7toxp; V3 = pParam->BSIM4v7ldeb - Tcen - LINK; V4 = sqrt(V3 * V3 + 4.0 * LINK * pParam->BSIM4v7ldeb); Tcen = pParam->BSIM4v7ldeb - 0.5 * (V3 + V4); T1 = 0.5 * (1.0 + V3 / V4); dTcen_dVg *= T1; dTcen_dVb *= T1; Ccen = epssub / Tcen; T2 = Cox / (Cox + Ccen); Coxeff = T2 * Ccen; T3 = -Ccen / Tcen; dCoxeff_dVg = T2 * T2 * T3; dCoxeff_dVb = dCoxeff_dVg * dTcen_dVb; dCoxeff_dVg *= dTcen_dVg; CoxWLcen = CoxWL * Coxeff / model->BSIM4v7coxe; Qac0 = CoxWLcen * (Vfbeff - here->BSIM4v7vfbzb); QovCox = Qac0 / Coxeff; dQac0_dVg = CoxWLcen * dVfbeff_dVg + QovCox * dCoxeff_dVg; dQac0_dVb = CoxWLcen * dVfbeff_dVb + QovCox * dCoxeff_dVb; T0 = 0.5 * pParam->BSIM4v7k1ox; T3 = Vgs_eff - Vfbeff - VbseffCV - Vgsteff; if (pParam->BSIM4v7k1ox == 0.0) { T1 = 0.0; T2 = 0.0; } else if (T3 < 0.0) { T1 = T0 + T3 / pParam->BSIM4v7k1ox; T2 = CoxWLcen; } else { T1 = sqrt(T0 * T0 + T3); T2 = CoxWLcen * T0 / T1; } Qsub0 = CoxWLcen * pParam->BSIM4v7k1ox * (T1 - T0); QovCox = Qsub0 / Coxeff; dQsub0_dVg = T2 * (dVgs_eff_dVg - dVfbeff_dVg - dVgsteff_dVg) + QovCox * dCoxeff_dVg; dQsub0_dVd = -T2 * dVgsteff_dVd; dQsub0_dVb = -T2 * (dVfbeff_dVb + dVbseffCV_dVb + dVgsteff_dVb) + QovCox * dCoxeff_dVb; /* Gate-bias dependent delta Phis begins */ if (pParam->BSIM4v7k1ox <= 0.0) { Denomi = 0.25 * pParam->BSIM4v7moin * Vtm; T0 = 0.5 * pParam->BSIM4v7sqrtPhi; } else { Denomi = pParam->BSIM4v7moin * Vtm * pParam->BSIM4v7k1ox * pParam->BSIM4v7k1ox; T0 = pParam->BSIM4v7k1ox * pParam->BSIM4v7sqrtPhi; } T1 = 2.0 * T0 + Vgsteff; DeltaPhi = Vtm * log(1.0 + T1 * Vgsteff / Denomi); dDeltaPhi_dVg = 2.0 * Vtm * (T1 -T0) / (Denomi + T1 * Vgsteff); /* End of delta Phis */ /* VgDP = Vgsteff - DeltaPhi */ T0 = Vgsteff - DeltaPhi - 0.001; dT0_dVg = 1.0 - dDeltaPhi_dVg; T1 = sqrt(T0 * T0 + Vgsteff * 0.004); VgDP = 0.5 * (T0 + T1); dVgDP_dVg = 0.5 * (dT0_dVg + (T0 * dT0_dVg + 0.002) / T1); Tox += Tox; /* WDLiu: Tcen reevaluated below due to different Vgsteff */ T0 = (Vgsteff + here->BSIM4v7vtfbphi2) / Tox; tmp = exp(model->BSIM4v7bdos * 0.7 * log(T0)); T1 = 1.0 + tmp; T2 = model->BSIM4v7bdos * 0.7 * tmp / (T0 * Tox); Tcen = model->BSIM4v7ados * 1.9e-9 / T1; dTcen_dVg = -Tcen * T2 / T1; dTcen_dVd = dTcen_dVg * dVgsteff_dVd; dTcen_dVb = dTcen_dVg * dVgsteff_dVb; dTcen_dVg *= dVgsteff_dVg; Ccen = epssub / Tcen; T0 = Cox / (Cox + Ccen); Coxeff = T0 * Ccen; T1 = -Ccen / Tcen; dCoxeff_dVg = T0 * T0 * T1; dCoxeff_dVd = dCoxeff_dVg * dTcen_dVd; dCoxeff_dVb = dCoxeff_dVg * dTcen_dVb; dCoxeff_dVg *= dTcen_dVg; CoxWLcen = CoxWL * Coxeff / model->BSIM4v7coxe; AbulkCV = Abulk0 * pParam->BSIM4v7abulkCVfactor; dAbulkCV_dVb = pParam->BSIM4v7abulkCVfactor * dAbulk0_dVb; VdsatCV = VgDP / AbulkCV; T0 = VdsatCV - Vds - DELTA_4; dT0_dVg = dVgDP_dVg / AbulkCV; dT0_dVb = -VdsatCV * dAbulkCV_dVb / AbulkCV; T1 = sqrt(T0 * T0 + 4.0 * DELTA_4 * VdsatCV); dT1_dVg = (T0 + DELTA_4 + DELTA_4) / T1; dT1_dVd = -T0 / T1; dT1_dVb = dT1_dVg * dT0_dVb; dT1_dVg *= dT0_dVg; if (T0 >= 0.0) { VdseffCV = VdsatCV - 0.5 * (T0 + T1); dVdseffCV_dVg = 0.5 * (dT0_dVg - dT1_dVg); dVdseffCV_dVd = 0.5 * (1.0 - dT1_dVd); dVdseffCV_dVb = 0.5 * (dT0_dVb - dT1_dVb); } else { T3 = (DELTA_4 + DELTA_4) / (T1 - T0); T4 = 1.0 - T3; T5 = VdsatCV * T3 / (T1 - T0); VdseffCV = VdsatCV * T4; dVdseffCV_dVg = dT0_dVg * T4 + T5 * (dT1_dVg - dT0_dVg); dVdseffCV_dVd = T5 * (dT1_dVd + 1.0); dVdseffCV_dVb = dT0_dVb * (T4 - T5) + T5 * dT1_dVb; } if (Vds == 0.0) { VdseffCV = 0.0; dVdseffCV_dVg = 0.0; dVdseffCV_dVb = 0.0; } T0 = AbulkCV * VdseffCV; T1 = VgDP; T2 = 12.0 * (T1 - 0.5 * T0 + 1.0e-20); T3 = T0 / T2; T4 = 1.0 - 12.0 * T3 * T3; T5 = AbulkCV * (6.0 * T0 * (4.0 * T1 - T0) / (T2 * T2) - 0.5); T6 = T5 * VdseffCV / AbulkCV; qgate = CoxWLcen * (T1 - T0 * (0.5 - T3)); QovCox = qgate / Coxeff; Cgg1 = CoxWLcen * (T4 * dVgDP_dVg + T5 * dVdseffCV_dVg); Cgd1 = CoxWLcen * T5 * dVdseffCV_dVd + Cgg1 * dVgsteff_dVd + QovCox * dCoxeff_dVd; Cgb1 = CoxWLcen * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Cgg1 * dVgsteff_dVb + QovCox * dCoxeff_dVb; Cgg1 = Cgg1 * dVgsteff_dVg + QovCox * dCoxeff_dVg; T7 = 1.0 - AbulkCV; T8 = T2 * T2; T9 = 12.0 * T7 * T0 * T0 / (T8 * AbulkCV); T10 = T9 * dVgDP_dVg; T11 = -T7 * T5 / AbulkCV; T12 = -(T9 * T1 / AbulkCV + VdseffCV * (0.5 - T0 / T2)); qbulk = CoxWLcen * T7 * (0.5 * VdseffCV - T0 * VdseffCV / T2); QovCox = qbulk / Coxeff; Cbg1 = CoxWLcen * (T10 + T11 * dVdseffCV_dVg); Cbd1 = CoxWLcen * T11 * dVdseffCV_dVd + Cbg1 * dVgsteff_dVd + QovCox * dCoxeff_dVd; Cbb1 = CoxWLcen * (T11 * dVdseffCV_dVb + T12 * dAbulkCV_dVb) + Cbg1 * dVgsteff_dVb + QovCox * dCoxeff_dVb; Cbg1 = Cbg1 * dVgsteff_dVg + QovCox * dCoxeff_dVg; if (model->BSIM4v7xpart > 0.5) { /* 0/100 partition */ qsrc = -CoxWLcen * (T1 / 2.0 + T0 / 4.0 - 0.5 * T0 * T0 / T2); QovCox = qsrc / Coxeff; T2 += T2; T3 = T2 * T2; T7 = -(0.25 - 12.0 * T0 * (4.0 * T1 - T0) / T3); T4 = -(0.5 + 24.0 * T0 * T0 / T3) * dVgDP_dVg; T5 = T7 * AbulkCV; T6 = T7 * VdseffCV; Csg = CoxWLcen * (T4 + T5 * dVdseffCV_dVg); Csd = CoxWLcen * T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd + QovCox * dCoxeff_dVd; Csb = CoxWLcen * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Csg * dVgsteff_dVb + QovCox * dCoxeff_dVb; Csg = Csg * dVgsteff_dVg + QovCox * dCoxeff_dVg; } else if (model->BSIM4v7xpart < 0.5) { /* 40/60 partition */ T2 = T2 / 12.0; T3 = 0.5 * CoxWLcen / (T2 * T2); T4 = T1 * (2.0 * T0 * T0 / 3.0 + T1 * (T1 - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T3 * T4; QovCox = qsrc / Coxeff; T8 = 4.0 / 3.0 * T1 * (T1 - T0) + 0.4 * T0 * T0; T5 = -2.0 * qsrc / T2 - T3 * (T1 * (3.0 * T1 - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0); T6 = AbulkCV * (qsrc / T2 + T3 * T8); T7 = T6 * VdseffCV / AbulkCV; Csg = T5 * dVgDP_dVg + T6 * dVdseffCV_dVg; Csd = Csg * dVgsteff_dVd + T6 * dVdseffCV_dVd + QovCox * dCoxeff_dVd; Csb = Csg * dVgsteff_dVb + T6 * dVdseffCV_dVb + T7 * dAbulkCV_dVb + QovCox * dCoxeff_dVb; Csg = Csg * dVgsteff_dVg + QovCox * dCoxeff_dVg; } else { /* 50/50 partition */ qsrc = -0.5 * qgate; Csg = -0.5 * Cgg1; Csd = -0.5 * Cgd1; Csb = -0.5 * Cgb1; } qgate += Qac0 + Qsub0 - qbulk; qbulk -= (Qac0 + Qsub0); qdrn = -(qgate + qbulk + qsrc); Cbg = Cbg1 - dQac0_dVg - dQsub0_dVg; Cbd = Cbd1 - dQsub0_dVd; Cbb = Cbb1 - dQac0_dVb - dQsub0_dVb; Cgg = Cgg1 - Cbg; Cgd = Cgd1 - Cbd; Cgb = Cgb1 - Cbb; Cgb *= dVbseff_dVb; Cbb *= dVbseff_dVb; Csb *= dVbseff_dVb; here->BSIM4v7cggb = Cgg; here->BSIM4v7cgsb = -(Cgg + Cgd + Cgb); here->BSIM4v7cgdb = Cgd; here->BSIM4v7cdgb = -(Cgg + Cbg + Csg); here->BSIM4v7cdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb + Csg + Csd + Csb); here->BSIM4v7cddb = -(Cgd + Cbd + Csd); here->BSIM4v7cbgb = Cbg; here->BSIM4v7cbsb = -(Cbg + Cbd + Cbb); here->BSIM4v7cbdb = Cbd; } /* End of CTM */ } here->BSIM4v7csgb = - here->BSIM4v7cggb - here->BSIM4v7cdgb - here->BSIM4v7cbgb; here->BSIM4v7csdb = - here->BSIM4v7cgdb - here->BSIM4v7cddb - here->BSIM4v7cbdb; here->BSIM4v7cssb = - here->BSIM4v7cgsb - here->BSIM4v7cdsb - here->BSIM4v7cbsb; here->BSIM4v7cgbb = - here->BSIM4v7cgdb - here->BSIM4v7cggb - here->BSIM4v7cgsb; here->BSIM4v7cdbb = - here->BSIM4v7cddb - here->BSIM4v7cdgb - here->BSIM4v7cdsb; here->BSIM4v7cbbb = - here->BSIM4v7cbgb - here->BSIM4v7cbdb - here->BSIM4v7cbsb; here->BSIM4v7csbb = - here->BSIM4v7cgbb - here->BSIM4v7cdbb - here->BSIM4v7cbbb; here->BSIM4v7qgate = qgate; here->BSIM4v7qbulk = qbulk; here->BSIM4v7qdrn = qdrn; here->BSIM4v7qsrc = -(qgate + qbulk + qdrn); /* NQS begins */ if ((here->BSIM4v7trnqsMod) || (here->BSIM4v7acnqsMod)) { here->BSIM4v7qchqs = qcheq = -(qbulk + qgate); here->BSIM4v7cqgb = -(here->BSIM4v7cggb + here->BSIM4v7cbgb); here->BSIM4v7cqdb = -(here->BSIM4v7cgdb + here->BSIM4v7cbdb); here->BSIM4v7cqsb = -(here->BSIM4v7cgsb + here->BSIM4v7cbsb); here->BSIM4v7cqbb = -(here->BSIM4v7cqgb + here->BSIM4v7cqdb + here->BSIM4v7cqsb); CoxWL = model->BSIM4v7coxe * pParam->BSIM4v7weffCV * here->BSIM4v7nf * pParam->BSIM4v7leffCV; T1 = here->BSIM4v7gcrg / CoxWL; /* 1 / tau */ here->BSIM4v7gtau = T1 * ScalingFactor; if (here->BSIM4v7acnqsMod) here->BSIM4v7taunet = 1.0 / T1; *(ckt->CKTstate0 + here->BSIM4v7qcheq) = qcheq; if (ckt->CKTmode & MODEINITTRAN) *(ckt->CKTstate1 + here->BSIM4v7qcheq) = *(ckt->CKTstate0 + here->BSIM4v7qcheq); if (here->BSIM4v7trnqsMod) { error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v7qcheq); if (error) return(error); } } finished: /* Calculate junction C-V */ if (ChargeComputationNeeded) { czbd = model->BSIM4v7DunitAreaTempJctCap * here->BSIM4v7Adeff; /* bug fix */ czbs = model->BSIM4v7SunitAreaTempJctCap * here->BSIM4v7Aseff; czbdsw = model->BSIM4v7DunitLengthSidewallTempJctCap * here->BSIM4v7Pdeff; czbdswg = model->BSIM4v7DunitLengthGateSidewallTempJctCap * pParam->BSIM4v7weffCJ * here->BSIM4v7nf; czbssw = model->BSIM4v7SunitLengthSidewallTempJctCap * here->BSIM4v7Pseff; czbsswg = model->BSIM4v7SunitLengthGateSidewallTempJctCap * pParam->BSIM4v7weffCJ * here->BSIM4v7nf; MJS = model->BSIM4v7SbulkJctBotGradingCoeff; MJSWS = model->BSIM4v7SbulkJctSideGradingCoeff; MJSWGS = model->BSIM4v7SbulkJctGateSideGradingCoeff; MJD = model->BSIM4v7DbulkJctBotGradingCoeff; MJSWD = model->BSIM4v7DbulkJctSideGradingCoeff; MJSWGD = model->BSIM4v7DbulkJctGateSideGradingCoeff; /* Source Bulk Junction */ if (vbs_jct == 0.0) { *(ckt->CKTstate0 + here->BSIM4v7qbs) = 0.0; here->BSIM4v7capbs = czbs + czbssw + czbsswg; } else if (vbs_jct < 0.0) { if (czbs > 0.0) { arg = 1.0 - vbs_jct / model->BSIM4v7PhiBS; if (MJS == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJS * log(arg)); *(ckt->CKTstate0 + here->BSIM4v7qbs) = model->BSIM4v7PhiBS * czbs * (1.0 - arg * sarg) / (1.0 - MJS); here->BSIM4v7capbs = czbs * sarg; } else { *(ckt->CKTstate0 + here->BSIM4v7qbs) = 0.0; here->BSIM4v7capbs = 0.0; } if (czbssw > 0.0) { arg = 1.0 - vbs_jct / model->BSIM4v7PhiBSWS; if (MJSWS == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSWS * log(arg)); *(ckt->CKTstate0 + here->BSIM4v7qbs) += model->BSIM4v7PhiBSWS * czbssw * (1.0 - arg * sarg) / (1.0 - MJSWS); here->BSIM4v7capbs += czbssw * sarg; } if (czbsswg > 0.0) { arg = 1.0 - vbs_jct / model->BSIM4v7PhiBSWGS; if (MJSWGS == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSWGS * log(arg)); *(ckt->CKTstate0 + here->BSIM4v7qbs) += model->BSIM4v7PhiBSWGS * czbsswg * (1.0 - arg * sarg) / (1.0 - MJSWGS); here->BSIM4v7capbs += czbsswg * sarg; } } else { T0 = czbs + czbssw + czbsswg; T1 = vbs_jct * (czbs * MJS / model->BSIM4v7PhiBS + czbssw * MJSWS / model->BSIM4v7PhiBSWS + czbsswg * MJSWGS / model->BSIM4v7PhiBSWGS); *(ckt->CKTstate0 + here->BSIM4v7qbs) = vbs_jct * (T0 + 0.5 * T1); here->BSIM4v7capbs = T0 + T1; } /* Drain Bulk Junction */ if (vbd_jct == 0.0) { *(ckt->CKTstate0 + here->BSIM4v7qbd) = 0.0; here->BSIM4v7capbd = czbd + czbdsw + czbdswg; } else if (vbd_jct < 0.0) { if (czbd > 0.0) { arg = 1.0 - vbd_jct / model->BSIM4v7PhiBD; if (MJD == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJD * log(arg)); *(ckt->CKTstate0 + here->BSIM4v7qbd) = model->BSIM4v7PhiBD* czbd * (1.0 - arg * sarg) / (1.0 - MJD); here->BSIM4v7capbd = czbd * sarg; } else { *(ckt->CKTstate0 + here->BSIM4v7qbd) = 0.0; here->BSIM4v7capbd = 0.0; } if (czbdsw > 0.0) { arg = 1.0 - vbd_jct / model->BSIM4v7PhiBSWD; if (MJSWD == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSWD * log(arg)); *(ckt->CKTstate0 + here->BSIM4v7qbd) += model->BSIM4v7PhiBSWD * czbdsw * (1.0 - arg * sarg) / (1.0 - MJSWD); here->BSIM4v7capbd += czbdsw * sarg; } if (czbdswg > 0.0) { arg = 1.0 - vbd_jct / model->BSIM4v7PhiBSWGD; if (MJSWGD == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSWGD * log(arg)); *(ckt->CKTstate0 + here->BSIM4v7qbd) += model->BSIM4v7PhiBSWGD * czbdswg * (1.0 - arg * sarg) / (1.0 - MJSWGD); here->BSIM4v7capbd += czbdswg * sarg; } } else { T0 = czbd + czbdsw + czbdswg; T1 = vbd_jct * (czbd * MJD / model->BSIM4v7PhiBD + czbdsw * MJSWD / model->BSIM4v7PhiBSWD + czbdswg * MJSWGD / model->BSIM4v7PhiBSWGD); *(ckt->CKTstate0 + here->BSIM4v7qbd) = vbd_jct * (T0 + 0.5 * T1); here->BSIM4v7capbd = T0 + T1; } } /* * check convergence */ if ((here->BSIM4v7off == 0) || (!(ckt->CKTmode & MODEINITFIX))) { if (Check == 1) { ckt->CKTnoncon++; #ifndef NEWCONV } else { if (here->BSIM4v7mode >= 0) { Idtot = here->BSIM4v7cd + here->BSIM4v7csub + here->BSIM4v7Igidl - here->BSIM4v7cbd; } else { Idtot = here->BSIM4v7cd + here->BSIM4v7cbd - here->BSIM4v7Igidl; /* bugfix */ } tol0 = ckt->CKTreltol * MAX(fabs(cdhat), fabs(Idtot)) + ckt->CKTabstol; tol1 = ckt->CKTreltol * MAX(fabs(cseshat), fabs(Isestot)) + ckt->CKTabstol; tol2 = ckt->CKTreltol * MAX(fabs(cdedhat), fabs(Idedtot)) + ckt->CKTabstol; tol3 = ckt->CKTreltol * MAX(fabs(cgshat), fabs(Igstot)) + ckt->CKTabstol; tol4 = ckt->CKTreltol * MAX(fabs(cgdhat), fabs(Igdtot)) + ckt->CKTabstol; tol5 = ckt->CKTreltol * MAX(fabs(cgbhat), fabs(Igbtot)) + ckt->CKTabstol; if ((fabs(cdhat - Idtot) >= tol0) || (fabs(cseshat - Isestot) >= tol1) || (fabs(cdedhat - Idedtot) >= tol2)) { ckt->CKTnoncon++; } else if ((fabs(cgshat - Igstot) >= tol3) || (fabs(cgdhat - Igdtot) >= tol4) || (fabs(cgbhat - Igbtot) >= tol5)) { ckt->CKTnoncon++; } else { Ibtot = here->BSIM4v7cbs + here->BSIM4v7cbd - here->BSIM4v7Igidl - here->BSIM4v7Igisl - here->BSIM4v7csub; tol6 = ckt->CKTreltol * MAX(fabs(cbhat), fabs(Ibtot)) + ckt->CKTabstol; if (fabs(cbhat - Ibtot) > tol6) { ckt->CKTnoncon++; } } #endif /* NEWCONV */ } } *(ckt->CKTstate0 + here->BSIM4v7vds) = vds; *(ckt->CKTstate0 + here->BSIM4v7vgs) = vgs; *(ckt->CKTstate0 + here->BSIM4v7vbs) = vbs; *(ckt->CKTstate0 + here->BSIM4v7vbd) = vbd; *(ckt->CKTstate0 + here->BSIM4v7vges) = vges; *(ckt->CKTstate0 + here->BSIM4v7vgms) = vgms; *(ckt->CKTstate0 + here->BSIM4v7vdbs) = vdbs; *(ckt->CKTstate0 + here->BSIM4v7vdbd) = vdbd; *(ckt->CKTstate0 + here->BSIM4v7vsbs) = vsbs; *(ckt->CKTstate0 + here->BSIM4v7vses) = vses; *(ckt->CKTstate0 + here->BSIM4v7vdes) = vdes; *(ckt->CKTstate0 + here->BSIM4v7qdef) = qdef; if (!ChargeComputationNeeded) goto line850; if (here->BSIM4v7rgateMod == 3) { vgdx = vgmd; vgsx = vgms; } else /* For rgateMod == 0, 1 and 2 */ { vgdx = vgd; vgsx = vgs; } if (model->BSIM4v7capMod == 0) { cgdo = pParam->BSIM4v7cgdo; qgdo = pParam->BSIM4v7cgdo * vgdx; cgso = pParam->BSIM4v7cgso; qgso = pParam->BSIM4v7cgso * vgsx; } else /* For both capMod == 1 and 2 */ { T0 = vgdx + DELTA_1; T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); T3 = pParam->BSIM4v7weffCV * pParam->BSIM4v7cgdl; T4 = sqrt(1.0 - 4.0 * T2 / pParam->BSIM4v7ckappad); cgdo = pParam->BSIM4v7cgdo + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgdo = (pParam->BSIM4v7cgdo + T3) * vgdx - T3 * (T2 + 0.5 * pParam->BSIM4v7ckappad * (T4 - 1.0)); T0 = vgsx + DELTA_1; T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); T3 = pParam->BSIM4v7weffCV * pParam->BSIM4v7cgsl; T4 = sqrt(1.0 - 4.0 * T2 / pParam->BSIM4v7ckappas); cgso = pParam->BSIM4v7cgso + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgso = (pParam->BSIM4v7cgso + T3) * vgsx - T3 * (T2 + 0.5 * pParam->BSIM4v7ckappas * (T4 - 1.0)); } if (here->BSIM4v7nf != 1.0) { cgdo *= here->BSIM4v7nf; cgso *= here->BSIM4v7nf; qgdo *= here->BSIM4v7nf; qgso *= here->BSIM4v7nf; } here->BSIM4v7cgdo = cgdo; here->BSIM4v7qgdo = qgdo; here->BSIM4v7cgso = cgso; here->BSIM4v7qgso = qgso; #ifndef NOBYPASS line755: #endif ag0 = ckt->CKTag[0]; if (here->BSIM4v7mode > 0) { if (here->BSIM4v7trnqsMod == 0) { qdrn -= qgdo; if (here->BSIM4v7rgateMod == 3) { gcgmgmb = (cgdo + cgso + pParam->BSIM4v7cgbo) * ag0; gcgmdb = -cgdo * ag0; gcgmsb = -cgso * ag0; gcgmbb = -pParam->BSIM4v7cgbo * ag0; gcdgmb = gcgmdb; gcsgmb = gcgmsb; gcbgmb = gcgmbb; gcggb = here->BSIM4v7cggb * ag0; gcgdb = here->BSIM4v7cgdb * ag0; gcgsb = here->BSIM4v7cgsb * ag0; gcgbb = -(gcggb + gcgdb + gcgsb); gcdgb = here->BSIM4v7cdgb * ag0; gcsgb = -(here->BSIM4v7cggb + here->BSIM4v7cbgb + here->BSIM4v7cdgb) * ag0; gcbgb = here->BSIM4v7cbgb * ag0; qgmb = pParam->BSIM4v7cgbo * vgmb; qgmid = qgdo + qgso + qgmb; qbulk -= qgmb; qsrc = -(qgate + qgmid + qbulk + qdrn); } else { gcggb = (here->BSIM4v7cggb + cgdo + cgso + pParam->BSIM4v7cgbo ) * ag0; gcgdb = (here->BSIM4v7cgdb - cgdo) * ag0; gcgsb = (here->BSIM4v7cgsb - cgso) * ag0; gcgbb = -(gcggb + gcgdb + gcgsb); gcdgb = (here->BSIM4v7cdgb - cgdo) * ag0; gcsgb = -(here->BSIM4v7cggb + here->BSIM4v7cbgb + here->BSIM4v7cdgb + cgso) * ag0; gcbgb = (here->BSIM4v7cbgb - pParam->BSIM4v7cgbo) * ag0; gcdgmb = gcsgmb = gcbgmb = 0.0; qgb = pParam->BSIM4v7cgbo * vgb; qgate += qgdo + qgso + qgb; qbulk -= qgb; qsrc = -(qgate + qbulk + qdrn); } gcddb = (here->BSIM4v7cddb + here->BSIM4v7capbd + cgdo) * ag0; gcdsb = here->BSIM4v7cdsb * ag0; gcsdb = -(here->BSIM4v7cgdb + here->BSIM4v7cbdb + here->BSIM4v7cddb) * ag0; gcssb = (here->BSIM4v7capbs + cgso - (here->BSIM4v7cgsb + here->BSIM4v7cbsb + here->BSIM4v7cdsb)) * ag0; if (!here->BSIM4v7rbodyMod) { gcdbb = -(gcdgb + gcddb + gcdsb + gcdgmb); gcsbb = -(gcsgb + gcsdb + gcssb + gcsgmb); gcbdb = (here->BSIM4v7cbdb - here->BSIM4v7capbd) * ag0; gcbsb = (here->BSIM4v7cbsb - here->BSIM4v7capbs) * ag0; gcdbdb = 0.0; gcsbsb = 0.0; } else { gcdbb = -(here->BSIM4v7cddb + here->BSIM4v7cdgb + here->BSIM4v7cdsb) * ag0; gcsbb = -(gcsgb + gcsdb + gcssb + gcsgmb) + here->BSIM4v7capbs * ag0; gcbdb = here->BSIM4v7cbdb * ag0; gcbsb = here->BSIM4v7cbsb * ag0; gcdbdb = -here->BSIM4v7capbd * ag0; gcsbsb = -here->BSIM4v7capbs * ag0; } gcbbb = -(gcbdb + gcbgb + gcbsb + gcbgmb); ggtg = ggtd = ggtb = ggts = 0.0; sxpart = 0.6; dxpart = 0.4; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { qcheq = here->BSIM4v7qchqs; CoxWL = model->BSIM4v7coxe * pParam->BSIM4v7weffCV * here->BSIM4v7nf * pParam->BSIM4v7leffCV; T0 = qdef * ScalingFactor / CoxWL; ggtg = here->BSIM4v7gtg = T0 * here->BSIM4v7gcrgg; ggtd = here->BSIM4v7gtd = T0 * here->BSIM4v7gcrgd; ggts = here->BSIM4v7gts = T0 * here->BSIM4v7gcrgs; ggtb = here->BSIM4v7gtb = T0 * here->BSIM4v7gcrgb; gqdef = ScalingFactor * ag0; gcqgb = here->BSIM4v7cqgb * ag0; gcqdb = here->BSIM4v7cqdb * ag0; gcqsb = here->BSIM4v7cqsb * ag0; gcqbb = here->BSIM4v7cqbb * ag0; if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM4v7xpart < 0.5) { dxpart = 0.4; } else if (model->BSIM4v7xpart > 0.5) { dxpart = 0.0; } else { dxpart = 0.5; } ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; } else { dxpart = qdrn / qcheq; Cdd = here->BSIM4v7cddb; Csd = -(here->BSIM4v7cgdb + here->BSIM4v7cddb + here->BSIM4v7cbdb); ddxpart_dVd = (Cdd - dxpart * (Cdd + Csd)) / qcheq; Cdg = here->BSIM4v7cdgb; Csg = -(here->BSIM4v7cggb + here->BSIM4v7cdgb + here->BSIM4v7cbgb); ddxpart_dVg = (Cdg - dxpart * (Cdg + Csg)) / qcheq; Cds = here->BSIM4v7cdsb; Css = -(here->BSIM4v7cgsb + here->BSIM4v7cdsb + here->BSIM4v7cbsb); ddxpart_dVs = (Cds - dxpart * (Cds + Css)) / qcheq; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); } sxpart = 1.0 - dxpart; dsxpart_dVd = -ddxpart_dVd; dsxpart_dVg = -ddxpart_dVg; dsxpart_dVs = -ddxpart_dVs; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); if (here->BSIM4v7rgateMod == 3) { gcgmgmb = (cgdo + cgso + pParam->BSIM4v7cgbo) * ag0; gcgmdb = -cgdo * ag0; gcgmsb = -cgso * ag0; gcgmbb = -pParam->BSIM4v7cgbo * ag0; gcdgmb = gcgmdb; gcsgmb = gcgmsb; gcbgmb = gcgmbb; gcdgb = gcsgb = gcbgb = 0.0; gcggb = gcgdb = gcgsb = gcgbb = 0.0; qgmb = pParam->BSIM4v7cgbo * vgmb; qgmid = qgdo + qgso + qgmb; qgate = 0.0; qbulk = -qgmb; qdrn = -qgdo; qsrc = -(qgmid + qbulk + qdrn); } else { gcggb = (cgdo + cgso + pParam->BSIM4v7cgbo ) * ag0; gcgdb = -cgdo * ag0; gcgsb = -cgso * ag0; gcgbb = -pParam->BSIM4v7cgbo * ag0; gcdgb = gcgdb; gcsgb = gcgsb; gcbgb = gcgbb; gcdgmb = gcsgmb = gcbgmb = 0.0; qgb = pParam->BSIM4v7cgbo * vgb; qgate = qgdo + qgso + qgb; qbulk = -qgb; qdrn = -qgdo; qsrc = -(qgate + qbulk + qdrn); } gcddb = (here->BSIM4v7capbd + cgdo) * ag0; gcdsb = gcsdb = 0.0; gcssb = (here->BSIM4v7capbs + cgso) * ag0; if (!here->BSIM4v7rbodyMod) { gcdbb = -(gcdgb + gcddb + gcdgmb); gcsbb = -(gcsgb + gcssb + gcsgmb); gcbdb = -here->BSIM4v7capbd * ag0; gcbsb = -here->BSIM4v7capbs * ag0; gcdbdb = 0.0; gcsbsb = 0.0; } else { gcdbb = gcsbb = gcbdb = gcbsb = 0.0; gcdbdb = -here->BSIM4v7capbd * ag0; gcsbsb = -here->BSIM4v7capbs * ag0; } gcbbb = -(gcbdb + gcbgb + gcbsb + gcbgmb); } } else { if (here->BSIM4v7trnqsMod == 0) { qsrc = qdrn - qgso; if (here->BSIM4v7rgateMod == 3) { gcgmgmb = (cgdo + cgso + pParam->BSIM4v7cgbo) * ag0; gcgmdb = -cgdo * ag0; gcgmsb = -cgso * ag0; gcgmbb = -pParam->BSIM4v7cgbo * ag0; gcdgmb = gcgmdb; gcsgmb = gcgmsb; gcbgmb = gcgmbb; gcggb = here->BSIM4v7cggb * ag0; gcgdb = here->BSIM4v7cgsb * ag0; gcgsb = here->BSIM4v7cgdb * ag0; gcgbb = -(gcggb + gcgdb + gcgsb); gcdgb = -(here->BSIM4v7cggb + here->BSIM4v7cbgb + here->BSIM4v7cdgb) * ag0; gcsgb = here->BSIM4v7cdgb * ag0; gcbgb = here->BSIM4v7cbgb * ag0; qgmb = pParam->BSIM4v7cgbo * vgmb; qgmid = qgdo + qgso + qgmb; qbulk -= qgmb; qdrn = -(qgate + qgmid + qbulk + qsrc); } else { gcggb = (here->BSIM4v7cggb + cgdo + cgso + pParam->BSIM4v7cgbo ) * ag0; gcgdb = (here->BSIM4v7cgsb - cgdo) * ag0; gcgsb = (here->BSIM4v7cgdb - cgso) * ag0; gcgbb = -(gcggb + gcgdb + gcgsb); gcdgb = -(here->BSIM4v7cggb + here->BSIM4v7cbgb + here->BSIM4v7cdgb + cgdo) * ag0; gcsgb = (here->BSIM4v7cdgb - cgso) * ag0; gcbgb = (here->BSIM4v7cbgb - pParam->BSIM4v7cgbo) * ag0; gcdgmb = gcsgmb = gcbgmb = 0.0; qgb = pParam->BSIM4v7cgbo * vgb; qgate += qgdo + qgso + qgb; qbulk -= qgb; qdrn = -(qgate + qbulk + qsrc); } gcddb = (here->BSIM4v7capbd + cgdo - (here->BSIM4v7cgsb + here->BSIM4v7cbsb + here->BSIM4v7cdsb)) * ag0; gcdsb = -(here->BSIM4v7cgdb + here->BSIM4v7cbdb + here->BSIM4v7cddb) * ag0; gcsdb = here->BSIM4v7cdsb * ag0; gcssb = (here->BSIM4v7cddb + here->BSIM4v7capbs + cgso) * ag0; if (!here->BSIM4v7rbodyMod) { gcdbb = -(gcdgb + gcddb + gcdsb + gcdgmb); gcsbb = -(gcsgb + gcsdb + gcssb + gcsgmb); gcbdb = (here->BSIM4v7cbsb - here->BSIM4v7capbd) * ag0; gcbsb = (here->BSIM4v7cbdb - here->BSIM4v7capbs) * ag0; gcdbdb = 0.0; gcsbsb = 0.0; } else { gcdbb = -(gcdgb + gcddb + gcdsb + gcdgmb) + here->BSIM4v7capbd * ag0; gcsbb = -(here->BSIM4v7cddb + here->BSIM4v7cdgb + here->BSIM4v7cdsb) * ag0; gcbdb = here->BSIM4v7cbsb * ag0; gcbsb = here->BSIM4v7cbdb * ag0; gcdbdb = -here->BSIM4v7capbd * ag0; gcsbsb = -here->BSIM4v7capbs * ag0; } gcbbb = -(gcbgb + gcbdb + gcbsb + gcbgmb); ggtg = ggtd = ggtb = ggts = 0.0; sxpart = 0.4; dxpart = 0.6; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { qcheq = here->BSIM4v7qchqs; CoxWL = model->BSIM4v7coxe * pParam->BSIM4v7weffCV * here->BSIM4v7nf * pParam->BSIM4v7leffCV; T0 = qdef * ScalingFactor / CoxWL; ggtg = here->BSIM4v7gtg = T0 * here->BSIM4v7gcrgg; ggts = here->BSIM4v7gts = T0 * here->BSIM4v7gcrgd; ggtd = here->BSIM4v7gtd = T0 * here->BSIM4v7gcrgs; ggtb = here->BSIM4v7gtb = T0 * here->BSIM4v7gcrgb; gqdef = ScalingFactor * ag0; gcqgb = here->BSIM4v7cqgb * ag0; gcqdb = here->BSIM4v7cqsb * ag0; gcqsb = here->BSIM4v7cqdb * ag0; gcqbb = here->BSIM4v7cqbb * ag0; if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM4v7xpart < 0.5) { sxpart = 0.4; } else if (model->BSIM4v7xpart > 0.5) { sxpart = 0.0; } else { sxpart = 0.5; } dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { sxpart = qdrn / qcheq; Css = here->BSIM4v7cddb; Cds = -(here->BSIM4v7cgdb + here->BSIM4v7cddb + here->BSIM4v7cbdb); dsxpart_dVs = (Css - sxpart * (Css + Cds)) / qcheq; Csg = here->BSIM4v7cdgb; Cdg = -(here->BSIM4v7cggb + here->BSIM4v7cdgb + here->BSIM4v7cbgb); dsxpart_dVg = (Csg - sxpart * (Csg + Cdg)) / qcheq; Csd = here->BSIM4v7cdsb; Cdd = -(here->BSIM4v7cgsb + here->BSIM4v7cdsb + here->BSIM4v7cbsb); dsxpart_dVd = (Csd - sxpart * (Csd + Cdd)) / qcheq; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); } dxpart = 1.0 - sxpart; ddxpart_dVd = -dsxpart_dVd; ddxpart_dVg = -dsxpart_dVg; ddxpart_dVs = -dsxpart_dVs; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); if (here->BSIM4v7rgateMod == 3) { gcgmgmb = (cgdo + cgso + pParam->BSIM4v7cgbo) * ag0; gcgmdb = -cgdo * ag0; gcgmsb = -cgso * ag0; gcgmbb = -pParam->BSIM4v7cgbo * ag0; gcdgmb = gcgmdb; gcsgmb = gcgmsb; gcbgmb = gcgmbb; gcdgb = gcsgb = gcbgb = 0.0; gcggb = gcgdb = gcgsb = gcgbb = 0.0; qgmb = pParam->BSIM4v7cgbo * vgmb; qgmid = qgdo + qgso + qgmb; qgate = 0.0; qbulk = -qgmb; qdrn = -qgdo; qsrc = -qgso; } else { gcggb = (cgdo + cgso + pParam->BSIM4v7cgbo ) * ag0; gcgdb = -cgdo * ag0; gcgsb = -cgso * ag0; gcgbb = -pParam->BSIM4v7cgbo * ag0; gcdgb = gcgdb; gcsgb = gcgsb; gcbgb = gcgbb; gcdgmb = gcsgmb = gcbgmb = 0.0; qgb = pParam->BSIM4v7cgbo * vgb; qgate = qgdo + qgso + qgb; qbulk = -qgb; qdrn = -qgdo; qsrc = -qgso; } gcddb = (here->BSIM4v7capbd + cgdo) * ag0; gcdsb = gcsdb = 0.0; gcssb = (here->BSIM4v7capbs + cgso) * ag0; if (!here->BSIM4v7rbodyMod) { gcdbb = -(gcdgb + gcddb + gcdgmb); gcsbb = -(gcsgb + gcssb + gcsgmb); gcbdb = -here->BSIM4v7capbd * ag0; gcbsb = -here->BSIM4v7capbs * ag0; gcdbdb = 0.0; gcsbsb = 0.0; } else { gcdbb = gcsbb = gcbdb = gcbsb = 0.0; gcdbdb = -here->BSIM4v7capbd * ag0; gcsbsb = -here->BSIM4v7capbs * ag0; } gcbbb = -(gcbdb + gcbgb + gcbsb + gcbgmb); } } if (here->BSIM4v7trnqsMod) { *(ckt->CKTstate0 + here->BSIM4v7qcdump) = qdef * ScalingFactor; if (ckt->CKTmode & MODEINITTRAN) *(ckt->CKTstate1 + here->BSIM4v7qcdump) = *(ckt->CKTstate0 + here->BSIM4v7qcdump); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v7qcdump); if (error) return(error); } if (ByPass) goto line860; *(ckt->CKTstate0 + here->BSIM4v7qg) = qgate; *(ckt->CKTstate0 + here->BSIM4v7qd) = qdrn - *(ckt->CKTstate0 + here->BSIM4v7qbd); *(ckt->CKTstate0 + here->BSIM4v7qs) = qsrc - *(ckt->CKTstate0 + here->BSIM4v7qbs); if (here->BSIM4v7rgateMod == 3) *(ckt->CKTstate0 + here->BSIM4v7qgmid) = qgmid; if (!here->BSIM4v7rbodyMod) { *(ckt->CKTstate0 + here->BSIM4v7qb) = qbulk + *(ckt->CKTstate0 + here->BSIM4v7qbd) + *(ckt->CKTstate0 + here->BSIM4v7qbs); } else *(ckt->CKTstate0 + here->BSIM4v7qb) = qbulk; /* Store small signal parameters */ if (ckt->CKTmode & MODEINITSMSIG) { goto line1000; } if (!ChargeComputationNeeded) goto line850; if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->BSIM4v7qb) = *(ckt->CKTstate0 + here->BSIM4v7qb); *(ckt->CKTstate1 + here->BSIM4v7qg) = *(ckt->CKTstate0 + here->BSIM4v7qg); *(ckt->CKTstate1 + here->BSIM4v7qd) = *(ckt->CKTstate0 + here->BSIM4v7qd); if (here->BSIM4v7rgateMod == 3) *(ckt->CKTstate1 + here->BSIM4v7qgmid) = *(ckt->CKTstate0 + here->BSIM4v7qgmid); if (here->BSIM4v7rbodyMod) { *(ckt->CKTstate1 + here->BSIM4v7qbs) = *(ckt->CKTstate0 + here->BSIM4v7qbs); *(ckt->CKTstate1 + here->BSIM4v7qbd) = *(ckt->CKTstate0 + here->BSIM4v7qbd); } } error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v7qb); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v7qg); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v7qd); if (error) return(error); if (here->BSIM4v7rgateMod == 3) { error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v7qgmid); if (error) return(error); } if (here->BSIM4v7rbodyMod) { error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v7qbs); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v7qbd); if (error) return(error); } goto line860; line850: /* Zero gcap and ceqcap if (!ChargeComputationNeeded) */ ceqqg = ceqqb = ceqqd = 0.0; ceqqjd = ceqqjs = 0.0; cqcheq = cqdef = 0.0; gcdgb = gcddb = gcdsb = gcdbb = 0.0; gcsgb = gcsdb = gcssb = gcsbb = 0.0; gcggb = gcgdb = gcgsb = gcgbb = 0.0; gcbdb = gcbgb = gcbsb = gcbbb = 0.0; gcgmgmb = gcgmdb = gcgmsb = gcgmbb = 0.0; gcdgmb = gcsgmb = gcbgmb = ceqqgmid = 0.0; gcdbdb = gcsbsb = 0.0; gqdef = gcqgb = gcqdb = gcqsb = gcqbb = 0.0; ggtg = ggtd = ggtb = ggts = 0.0; sxpart = (1.0 - (dxpart = (here->BSIM4v7mode > 0) ? 0.4 : 0.6)); ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; if (here->BSIM4v7trnqsMod) { CoxWL = model->BSIM4v7coxe * pParam->BSIM4v7weffCV * here->BSIM4v7nf * pParam->BSIM4v7leffCV; T1 = here->BSIM4v7gcrg / CoxWL; here->BSIM4v7gtau = T1 * ScalingFactor; } else here->BSIM4v7gtau = 0.0; goto line900; line860: /* Calculate equivalent charge current */ cqgate = *(ckt->CKTstate0 + here->BSIM4v7cqg); cqbody = *(ckt->CKTstate0 + here->BSIM4v7cqb); cqdrn = *(ckt->CKTstate0 + here->BSIM4v7cqd); ceqqg = cqgate - gcggb * vgb + gcgdb * vbd + gcgsb * vbs; ceqqd = cqdrn - gcdgb * vgb - gcdgmb * vgmb + (gcddb + gcdbdb) * vbd - gcdbdb * vbd_jct + gcdsb * vbs; ceqqb = cqbody - gcbgb * vgb - gcbgmb * vgmb + gcbdb * vbd + gcbsb * vbs; if (here->BSIM4v7rgateMod == 3) ceqqgmid = *(ckt->CKTstate0 + here->BSIM4v7cqgmid) + gcgmdb * vbd + gcgmsb * vbs - gcgmgmb * vgmb; else ceqqgmid = 0.0; if (here->BSIM4v7rbodyMod) { ceqqjs = *(ckt->CKTstate0 + here->BSIM4v7cqbs) + gcsbsb * vbs_jct; ceqqjd = *(ckt->CKTstate0 + here->BSIM4v7cqbd) + gcdbdb * vbd_jct; } if (here->BSIM4v7trnqsMod) { T0 = ggtg * vgb - ggtd * vbd - ggts * vbs; ceqqg += T0; T1 = qdef * here->BSIM4v7gtau; ceqqd -= dxpart * T0 + T1 * (ddxpart_dVg * vgb - ddxpart_dVd * vbd - ddxpart_dVs * vbs); cqdef = *(ckt->CKTstate0 + here->BSIM4v7cqcdump) - gqdef * qdef; cqcheq = *(ckt->CKTstate0 + here->BSIM4v7cqcheq) - (gcqgb * vgb - gcqdb * vbd - gcqsb * vbs) + T0; } if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->BSIM4v7cqb) = *(ckt->CKTstate0 + here->BSIM4v7cqb); *(ckt->CKTstate1 + here->BSIM4v7cqg) = *(ckt->CKTstate0 + here->BSIM4v7cqg); *(ckt->CKTstate1 + here->BSIM4v7cqd) = *(ckt->CKTstate0 + here->BSIM4v7cqd); if (here->BSIM4v7rgateMod == 3) *(ckt->CKTstate1 + here->BSIM4v7cqgmid) = *(ckt->CKTstate0 + here->BSIM4v7cqgmid); if (here->BSIM4v7rbodyMod) { *(ckt->CKTstate1 + here->BSIM4v7cqbs) = *(ckt->CKTstate0 + here->BSIM4v7cqbs); *(ckt->CKTstate1 + here->BSIM4v7cqbd) = *(ckt->CKTstate0 + here->BSIM4v7cqbd); } } /* * Load current vector */ line900: if (here->BSIM4v7mode >= 0) { Gm = here->BSIM4v7gm; Gmbs = here->BSIM4v7gmbs; FwdSum = Gm + Gmbs; RevSum = 0.0; ceqdrn = model->BSIM4v7type * (cdrain - here->BSIM4v7gds * vds - Gm * vgs - Gmbs * vbs); ceqbd = model->BSIM4v7type * (here->BSIM4v7csub + here->BSIM4v7Igidl - (here->BSIM4v7gbds + here->BSIM4v7ggidld) * vds - (here->BSIM4v7gbgs + here->BSIM4v7ggidlg) * vgs - (here->BSIM4v7gbbs + here->BSIM4v7ggidlb) * vbs); ceqbs = model->BSIM4v7type * (here->BSIM4v7Igisl + here->BSIM4v7ggisls * vds - here->BSIM4v7ggislg * vgd - here->BSIM4v7ggislb * vbd); gbbdp = -(here->BSIM4v7gbds); gbbsp = here->BSIM4v7gbds + here->BSIM4v7gbgs + here->BSIM4v7gbbs; gbdpg = here->BSIM4v7gbgs; gbdpdp = here->BSIM4v7gbds; gbdpb = here->BSIM4v7gbbs; gbdpsp = -(gbdpg + gbdpdp + gbdpb); gbspg = 0.0; gbspdp = 0.0; gbspb = 0.0; gbspsp = 0.0; if (model->BSIM4v7igcMod) { gIstotg = here->BSIM4v7gIgsg + here->BSIM4v7gIgcsg; gIstotd = here->BSIM4v7gIgcsd; gIstots = here->BSIM4v7gIgss + here->BSIM4v7gIgcss; gIstotb = here->BSIM4v7gIgcsb; Istoteq = model->BSIM4v7type * (here->BSIM4v7Igs + here->BSIM4v7Igcs - gIstotg * vgs - here->BSIM4v7gIgcsd * vds - here->BSIM4v7gIgcsb * vbs); gIdtotg = here->BSIM4v7gIgdg + here->BSIM4v7gIgcdg; gIdtotd = here->BSIM4v7gIgdd + here->BSIM4v7gIgcdd; gIdtots = here->BSIM4v7gIgcds; gIdtotb = here->BSIM4v7gIgcdb; Idtoteq = model->BSIM4v7type * (here->BSIM4v7Igd + here->BSIM4v7Igcd - here->BSIM4v7gIgdg * vgd - here->BSIM4v7gIgcdg * vgs - here->BSIM4v7gIgcdd * vds - here->BSIM4v7gIgcdb * vbs); } else { gIstotg = gIstotd = gIstots = gIstotb = Istoteq = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = Idtoteq = 0.0; } if (model->BSIM4v7igbMod) { gIbtotg = here->BSIM4v7gIgbg; gIbtotd = here->BSIM4v7gIgbd; gIbtots = here->BSIM4v7gIgbs; gIbtotb = here->BSIM4v7gIgbb; Ibtoteq = model->BSIM4v7type * (here->BSIM4v7Igb - here->BSIM4v7gIgbg * vgs - here->BSIM4v7gIgbd * vds - here->BSIM4v7gIgbb * vbs); } else gIbtotg = gIbtotd = gIbtots = gIbtotb = Ibtoteq = 0.0; if ((model->BSIM4v7igcMod != 0) || (model->BSIM4v7igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; Igtoteq = Istoteq + Idtoteq + Ibtoteq; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = Igtoteq = 0.0; if (here->BSIM4v7rgateMod == 2) T0 = vges - vgs; else if (here->BSIM4v7rgateMod == 3) T0 = vgms - vgs; if (here->BSIM4v7rgateMod > 1) { gcrgd = here->BSIM4v7gcrgd * T0; gcrgg = here->BSIM4v7gcrgg * T0; gcrgs = here->BSIM4v7gcrgs * T0; gcrgb = here->BSIM4v7gcrgb * T0; ceqgcrg = -(gcrgd * vds + gcrgg * vgs + gcrgb * vbs); gcrgg -= here->BSIM4v7gcrg; gcrg = here->BSIM4v7gcrg; } else ceqgcrg = gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; } else { Gm = -here->BSIM4v7gm; Gmbs = -here->BSIM4v7gmbs; FwdSum = 0.0; RevSum = -(Gm + Gmbs); ceqdrn = -model->BSIM4v7type * (cdrain + here->BSIM4v7gds * vds + Gm * vgd + Gmbs * vbd); ceqbs = model->BSIM4v7type * (here->BSIM4v7csub + here->BSIM4v7Igisl + (here->BSIM4v7gbds + here->BSIM4v7ggisls) * vds - (here->BSIM4v7gbgs + here->BSIM4v7ggislg) * vgd - (here->BSIM4v7gbbs + here->BSIM4v7ggislb) * vbd); ceqbd = model->BSIM4v7type * (here->BSIM4v7Igidl - here->BSIM4v7ggidld * vds - here->BSIM4v7ggidlg * vgs - here->BSIM4v7ggidlb * vbs); gbbsp = -(here->BSIM4v7gbds); gbbdp = here->BSIM4v7gbds + here->BSIM4v7gbgs + here->BSIM4v7gbbs; gbdpg = 0.0; gbdpsp = 0.0; gbdpb = 0.0; gbdpdp = 0.0; gbspg = here->BSIM4v7gbgs; gbspsp = here->BSIM4v7gbds; gbspb = here->BSIM4v7gbbs; gbspdp = -(gbspg + gbspsp + gbspb); if (model->BSIM4v7igcMod) { gIstotg = here->BSIM4v7gIgsg + here->BSIM4v7gIgcdg; gIstotd = here->BSIM4v7gIgcds; gIstots = here->BSIM4v7gIgss + here->BSIM4v7gIgcdd; gIstotb = here->BSIM4v7gIgcdb; Istoteq = model->BSIM4v7type * (here->BSIM4v7Igs + here->BSIM4v7Igcd - here->BSIM4v7gIgsg * vgs - here->BSIM4v7gIgcdg * vgd + here->BSIM4v7gIgcdd * vds - here->BSIM4v7gIgcdb * vbd); gIdtotg = here->BSIM4v7gIgdg + here->BSIM4v7gIgcsg; gIdtotd = here->BSIM4v7gIgdd + here->BSIM4v7gIgcss; gIdtots = here->BSIM4v7gIgcsd; gIdtotb = here->BSIM4v7gIgcsb; Idtoteq = model->BSIM4v7type * (here->BSIM4v7Igd + here->BSIM4v7Igcs - (here->BSIM4v7gIgdg + here->BSIM4v7gIgcsg) * vgd + here->BSIM4v7gIgcsd * vds - here->BSIM4v7gIgcsb * vbd); } else { gIstotg = gIstotd = gIstots = gIstotb = Istoteq = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = Idtoteq = 0.0; } if (model->BSIM4v7igbMod) { gIbtotg = here->BSIM4v7gIgbg; gIbtotd = here->BSIM4v7gIgbs; gIbtots = here->BSIM4v7gIgbd; gIbtotb = here->BSIM4v7gIgbb; Ibtoteq = model->BSIM4v7type * (here->BSIM4v7Igb - here->BSIM4v7gIgbg * vgd + here->BSIM4v7gIgbd * vds - here->BSIM4v7gIgbb * vbd); } else gIbtotg = gIbtotd = gIbtots = gIbtotb = Ibtoteq = 0.0; if ((model->BSIM4v7igcMod != 0) || (model->BSIM4v7igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; Igtoteq = Istoteq + Idtoteq + Ibtoteq; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = Igtoteq = 0.0; if (here->BSIM4v7rgateMod == 2) T0 = vges - vgs; else if (here->BSIM4v7rgateMod == 3) T0 = vgms - vgs; if (here->BSIM4v7rgateMod > 1) { gcrgd = here->BSIM4v7gcrgs * T0; gcrgg = here->BSIM4v7gcrgg * T0; gcrgs = here->BSIM4v7gcrgd * T0; gcrgb = here->BSIM4v7gcrgb * T0; ceqgcrg = -(gcrgg * vgd - gcrgs * vds + gcrgb * vbd); gcrgg -= here->BSIM4v7gcrg; gcrg = here->BSIM4v7gcrg; } else ceqgcrg = gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; } if (model->BSIM4v7rdsMod == 1) { ceqgstot = model->BSIM4v7type * (here->BSIM4v7gstotd * vds + here->BSIM4v7gstotg * vgs + here->BSIM4v7gstotb * vbs); /* WDLiu: ceqgstot flowing away from sNodePrime */ gstot = here->BSIM4v7gstot; gstotd = here->BSIM4v7gstotd; gstotg = here->BSIM4v7gstotg; gstots = here->BSIM4v7gstots - gstot; gstotb = here->BSIM4v7gstotb; ceqgdtot = -model->BSIM4v7type * (here->BSIM4v7gdtotd * vds + here->BSIM4v7gdtotg * vgs + here->BSIM4v7gdtotb * vbs); /* WDLiu: ceqgdtot defined as flowing into dNodePrime */ gdtot = here->BSIM4v7gdtot; gdtotd = here->BSIM4v7gdtotd - gdtot; gdtotg = here->BSIM4v7gdtotg; gdtots = here->BSIM4v7gdtots; gdtotb = here->BSIM4v7gdtotb; } else { gstot = gstotd = gstotg = gstots = gstotb = ceqgstot = 0.0; gdtot = gdtotd = gdtotg = gdtots = gdtotb = ceqgdtot = 0.0; } if (model->BSIM4v7type > 0) { ceqjs = (here->BSIM4v7cbs - here->BSIM4v7gbs * vbs_jct); ceqjd = (here->BSIM4v7cbd - here->BSIM4v7gbd * vbd_jct); } else { ceqjs = -(here->BSIM4v7cbs - here->BSIM4v7gbs * vbs_jct); ceqjd = -(here->BSIM4v7cbd - here->BSIM4v7gbd * vbd_jct); ceqqg = -ceqqg; ceqqd = -ceqqd; ceqqb = -ceqqb; ceqgcrg = -ceqgcrg; if (here->BSIM4v7trnqsMod) { cqdef = -cqdef; cqcheq = -cqcheq; } if (here->BSIM4v7rbodyMod) { ceqqjs = -ceqqjs; ceqqjd = -ceqqjd; } if (here->BSIM4v7rgateMod == 3) ceqqgmid = -ceqqgmid; } /* * Loading RHS */ m = here->BSIM4v7m; #ifdef USE_OMP here->BSIM4v7rhsdPrime = m * (ceqjd - ceqbd + ceqgdtot - ceqdrn - ceqqd + Idtoteq); here->BSIM4v7rhsgPrime = m * (ceqqg - ceqgcrg + Igtoteq); if (here->BSIM4v7rgateMod == 2) here->BSIM4v7rhsgExt = m * ceqgcrg; else if (here->BSIM4v7rgateMod == 3) here->BSIM4v7grhsMid = m * (ceqqgmid + ceqgcrg); if (!here->BSIM4v7rbodyMod) { here->BSIM4v7rhsbPrime = m * (ceqbd + ceqbs - ceqjd - ceqjs - ceqqb + Ibtoteq); here->BSIM4v7rhssPrime = m * (ceqdrn - ceqbs + ceqjs + ceqqg + ceqqb + ceqqd + ceqqgmid - ceqgstot + Istoteq); } else { here->BSIM4v7rhsdb = m * (ceqjd + ceqqjd); here->BSIM4v7rhsbPrime = m * (ceqbd + ceqbs - ceqqb + Ibtoteq); here->BSIM4v7rhssb = m * (ceqjs + ceqqjs); here->BSIM4v7rhssPrime = m * (ceqdrn - ceqbs + ceqjs + ceqqd + ceqqg + ceqqb + ceqqjd + ceqqjs + ceqqgmid - ceqgstot + Istoteq); } if (model->BSIM4v7rdsMod) { here->BSIM4v7rhsd = m * ceqgdtot; here->BSIM4v7rhss = m * ceqgstot; } if (here->BSIM4v7trnqsMod) here->BSIM4v7rhsq = m * (cqcheq - cqdef); #else (*(ckt->CKTrhs + here->BSIM4v7dNodePrime) += m * (ceqjd - ceqbd + ceqgdtot - ceqdrn - ceqqd + Idtoteq)); (*(ckt->CKTrhs + here->BSIM4v7gNodePrime) -= m * (ceqqg - ceqgcrg + Igtoteq)); if (here->BSIM4v7rgateMod == 2) (*(ckt->CKTrhs + here->BSIM4v7gNodeExt) -= m * ceqgcrg); else if (here->BSIM4v7rgateMod == 3) (*(ckt->CKTrhs + here->BSIM4v7gNodeMid) -= m * (ceqqgmid + ceqgcrg)); if (!here->BSIM4v7rbodyMod) { (*(ckt->CKTrhs + here->BSIM4v7bNodePrime) += m * (ceqbd + ceqbs - ceqjd - ceqjs - ceqqb + Ibtoteq)); (*(ckt->CKTrhs + here->BSIM4v7sNodePrime) += m * (ceqdrn - ceqbs + ceqjs + ceqqg + ceqqb + ceqqd + ceqqgmid - ceqgstot + Istoteq)); } else { (*(ckt->CKTrhs + here->BSIM4v7dbNode) -= m * (ceqjd + ceqqjd)); (*(ckt->CKTrhs + here->BSIM4v7bNodePrime) += m * (ceqbd + ceqbs - ceqqb + Ibtoteq)); (*(ckt->CKTrhs + here->BSIM4v7sbNode) -= m * (ceqjs + ceqqjs)); (*(ckt->CKTrhs + here->BSIM4v7sNodePrime) += m * (ceqdrn - ceqbs + ceqjs + ceqqd + ceqqg + ceqqb + ceqqjd + ceqqjs + ceqqgmid - ceqgstot + Istoteq)); } if (model->BSIM4v7rdsMod) { (*(ckt->CKTrhs + here->BSIM4v7dNode) -= m * ceqgdtot); (*(ckt->CKTrhs + here->BSIM4v7sNode) += m * ceqgstot); } if (here->BSIM4v7trnqsMod) *(ckt->CKTrhs + here->BSIM4v7qNode) += m * (cqcheq - cqdef); #endif /* * Loading matrix */ if (!here->BSIM4v7rbodyMod) { gjbd = here->BSIM4v7gbd; gjbs = here->BSIM4v7gbs; } else gjbd = gjbs = 0.0; if (!model->BSIM4v7rdsMod) { gdpr = here->BSIM4v7drainConductance; gspr = here->BSIM4v7sourceConductance; } else gdpr = gspr = 0.0; geltd = here->BSIM4v7grgeltd; T1 = qdef * here->BSIM4v7gtau; #ifdef USE_OMP if (here->BSIM4v7rgateMod == 1) { here->BSIM4v7_1 = m * geltd; here->BSIM4v7_2 = m * geltd; here->BSIM4v7_3 = m * geltd; here->BSIM4v7_4 = m * (gcggb + geltd - ggtg + gIgtotg); here->BSIM4v7_5 = m * (gcgdb - ggtd + gIgtotd); here->BSIM4v7_6 = m * (gcgsb - ggts + gIgtots); here->BSIM4v7_7 = m * (gcgbb - ggtb + gIgtotb); } /* WDLiu: gcrg already subtracted from all gcrgg below */ else if (here->BSIM4v7rgateMod == 2) { here->BSIM4v7_8 = m * gcrg; here->BSIM4v7_9 = m * gcrgg; here->BSIM4v7_10 = m * gcrgd; here->BSIM4v7_11 = m * gcrgs; here->BSIM4v7_12 = m * gcrgb; here->BSIM4v7_13 = m * gcrg; here->BSIM4v7_14 = m * (gcggb - gcrgg - ggtg + gIgtotg); here->BSIM4v7_15 = m * (gcgdb - gcrgd - ggtd + gIgtotd); here->BSIM4v7_16 = m * (gcgsb - gcrgs - ggts + gIgtots); here->BSIM4v7_17 = m * (gcgbb - gcrgb - ggtb + gIgtotb); } else if (here->BSIM4v7rgateMod == 3) { here->BSIM4v7_18 = m * geltd; here->BSIM4v7_19 = m * geltd; here->BSIM4v7_20 = m * geltd; here->BSIM4v7_21 = m * (geltd + gcrg + gcgmgmb); here->BSIM4v7_22 = m * (gcrgd + gcgmdb); here->BSIM4v7_23 = m * gcrgg; here->BSIM4v7_24 = m * (gcrgs + gcgmsb); here->BSIM4v7_25 = m * (gcrgb + gcgmbb); here->BSIM4v7_26 = m * gcdgmb; here->BSIM4v7_27 = m * gcrg; here->BSIM4v7_28 = m * gcsgmb; here->BSIM4v7_29 = m * gcbgmb; here->BSIM4v7_30 = m * (gcggb - gcrgg - ggtg + gIgtotg); here->BSIM4v7_31 = m * (gcgdb - gcrgd - ggtd + gIgtotd); here->BSIM4v7_32 = m * (gcgsb - gcrgs - ggts + gIgtots); here->BSIM4v7_33 = m * (gcgbb - gcrgb - ggtb + gIgtotb); } else { here->BSIM4v7_34 = m * (gcggb - ggtg + gIgtotg); here->BSIM4v7_35 = m * (gcgdb - ggtd + gIgtotd); here->BSIM4v7_36 = m * (gcgsb - ggts + gIgtots); here->BSIM4v7_37 = m * (gcgbb - ggtb + gIgtotb); } if (model->BSIM4v7rdsMod) { here->BSIM4v7_38 = m * gdtotg; here->BSIM4v7_39 = m * gdtots; here->BSIM4v7_40 = m * gdtotb; here->BSIM4v7_41 = m * gstotd; here->BSIM4v7_42 = m * gstotg; here->BSIM4v7_43 = m * gstotb; } here->BSIM4v7_44 = m * (gdpr + here->BSIM4v7gds + here->BSIM4v7gbd + T1 * ddxpart_dVd - gdtotd + RevSum + gcddb + gbdpdp + dxpart * ggtd - gIdtotd); here->BSIM4v7_45 = m * (gdpr + gdtot); here->BSIM4v7_46 = m * (Gm + gcdgb - gdtotg + gbdpg - gIdtotg + dxpart * ggtg + T1 * ddxpart_dVg); here->BSIM4v7_47 = m * (here->BSIM4v7gds + gdtots - dxpart * ggts + gIdtots - T1 * ddxpart_dVs + FwdSum - gcdsb - gbdpsp); here->BSIM4v7_48 = m * (gjbd + gdtotb - Gmbs - gcdbb - gbdpb + gIdtotb - T1 * ddxpart_dVb - dxpart * ggtb); here->BSIM4v7_49 = m * (gdpr - gdtotd); here->BSIM4v7_50 = m * (gdpr + gdtot); here->BSIM4v7_51 = m * (here->BSIM4v7gds + gstotd + RevSum - gcsdb - gbspdp - T1 * dsxpart_dVd - sxpart * ggtd + gIstotd); here->BSIM4v7_52 = m * (gcsgb - Gm - gstotg + gbspg + sxpart * ggtg + T1 * dsxpart_dVg - gIstotg); here->BSIM4v7_53 = m * (gspr + here->BSIM4v7gds + here->BSIM4v7gbs + T1 * dsxpart_dVs - gstots + FwdSum + gcssb + gbspsp + sxpart * ggts - gIstots); here->BSIM4v7_54 = m * (gspr + gstot); here->BSIM4v7_55 = m * (gjbs + gstotb + Gmbs - gcsbb - gbspb - sxpart * ggtb - T1 * dsxpart_dVb + gIstotb); here->BSIM4v7_56 = m * (gspr - gstots); here->BSIM4v7_57 = m * (gspr + gstot); here->BSIM4v7_58 = m * (gcbdb - gjbd + gbbdp - gIbtotd); here->BSIM4v7_59 = m * (gcbgb - here->BSIM4v7gbgs - gIbtotg); here->BSIM4v7_60 = m * (gcbsb - gjbs + gbbsp - gIbtots); here->BSIM4v7_61 = m * (gjbd + gjbs + gcbbb - here->BSIM4v7gbbs - gIbtotb); ggidld = here->BSIM4v7ggidld; ggidlg = here->BSIM4v7ggidlg; ggidlb = here->BSIM4v7ggidlb; ggislg = here->BSIM4v7ggislg; ggisls = here->BSIM4v7ggisls; ggislb = here->BSIM4v7ggislb; /* stamp gidl */ here->BSIM4v7_62 = m * ggidld; here->BSIM4v7_63 = m * ggidlg; here->BSIM4v7_64 = m * (ggidlg + ggidld + ggidlb); here->BSIM4v7_65 = m * ggidlb; here->BSIM4v7_66 = m * ggidld; here->BSIM4v7_67 = m * ggidlg; here->BSIM4v7_68 = m * (ggidlg + ggidld + ggidlb); here->BSIM4v7_69 = m * ggidlb; /* stamp gisl */ here->BSIM4v7_70 = m * (ggisls + ggislg + ggislb); here->BSIM4v7_71 = m * ggislg; here->BSIM4v7_72 = m * ggisls; here->BSIM4v7_73 = m * ggislb; here->BSIM4v7_74 = m * (ggislg + ggisls + ggislb); here->BSIM4v7_75 = m * ggislg; here->BSIM4v7_76 = m * ggisls; here->BSIM4v7_77 = m * ggislb; if (here->BSIM4v7rbodyMod) { here->BSIM4v7_78 = m * (gcdbdb - here->BSIM4v7gbd); here->BSIM4v7_79 = m * (here->BSIM4v7gbs - gcsbsb); here->BSIM4v7_80 = m * (gcdbdb - here->BSIM4v7gbd); here->BSIM4v7_81 = m * (here->BSIM4v7gbd - gcdbdb + here->BSIM4v7grbpd + here->BSIM4v7grbdb); here->BSIM4v7_82 = m * here->BSIM4v7grbpd; here->BSIM4v7_83 = m * here->BSIM4v7grbdb; here->BSIM4v7_84 = m * here->BSIM4v7grbpd; here->BSIM4v7_85 = m * here->BSIM4v7grbpb; here->BSIM4v7_86 = m * here->BSIM4v7grbps; here->BSIM4v7_87 = m * (here->BSIM4v7grbpd + here->BSIM4v7grbps + here->BSIM4v7grbpb); /* WDLiu: (gcbbb - here->BSIM4v7gbbs) already added to BPbpPtr */ here->BSIM4v7_88 = m * (gcsbsb - here->BSIM4v7gbs); here->BSIM4v7_89 = m * here->BSIM4v7grbps; here->BSIM4v7_90 = m * here->BSIM4v7grbsb; here->BSIM4v7_91 = m * (here->BSIM4v7gbs - gcsbsb + here->BSIM4v7grbps + here->BSIM4v7grbsb); here->BSIM4v7_92 = m * here->BSIM4v7grbdb; here->BSIM4v7_93 = m * here->BSIM4v7grbpb; here->BSIM4v7_94 = m * here->BSIM4v7grbsb; here->BSIM4v7_95 = m * (here->BSIM4v7grbsb + here->BSIM4v7grbdb + here->BSIM4v7grbpb); } if (here->BSIM4v7trnqsMod) { here->BSIM4v7_96 = m * (gqdef + here->BSIM4v7gtau); here->BSIM4v7_97 = m * (ggtg - gcqgb); here->BSIM4v7_98 = m * (ggtd - gcqdb); here->BSIM4v7_99 = m * (ggts - gcqsb); here->BSIM4v7_100 = m * (ggtb - gcqbb); here->BSIM4v7_101 = m * dxpart * here->BSIM4v7gtau; here->BSIM4v7_102 = m * sxpart * here->BSIM4v7gtau; here->BSIM4v7_103 = m * here->BSIM4v7gtau; } #else if (here->BSIM4v7rgateMod == 1) { (*(here->BSIM4v7GEgePtr) += m * geltd); (*(here->BSIM4v7GPgePtr) -= m * geltd); (*(here->BSIM4v7GEgpPtr) -= m * geltd); (*(here->BSIM4v7GPgpPtr) += m * (gcggb + geltd - ggtg + gIgtotg)); (*(here->BSIM4v7GPdpPtr) += m * (gcgdb - ggtd + gIgtotd)); (*(here->BSIM4v7GPspPtr) += m * (gcgsb - ggts + gIgtots)); (*(here->BSIM4v7GPbpPtr) += m * (gcgbb - ggtb + gIgtotb)); } /* WDLiu: gcrg already subtracted from all gcrgg below */ else if (here->BSIM4v7rgateMod == 2) { (*(here->BSIM4v7GEgePtr) += m * gcrg); (*(here->BSIM4v7GEgpPtr) += m * gcrgg); (*(here->BSIM4v7GEdpPtr) += m * gcrgd); (*(here->BSIM4v7GEspPtr) += m * gcrgs); (*(here->BSIM4v7GEbpPtr) += m * gcrgb); (*(here->BSIM4v7GPgePtr) -= m * gcrg); (*(here->BSIM4v7GPgpPtr) += m * (gcggb - gcrgg - ggtg + gIgtotg)); (*(here->BSIM4v7GPdpPtr) += m * (gcgdb - gcrgd - ggtd + gIgtotd)); (*(here->BSIM4v7GPspPtr) += m * (gcgsb - gcrgs - ggts + gIgtots)); (*(here->BSIM4v7GPbpPtr) += m * (gcgbb - gcrgb - ggtb + gIgtotb)); } else if (here->BSIM4v7rgateMod == 3) { (*(here->BSIM4v7GEgePtr) += m * geltd); (*(here->BSIM4v7GEgmPtr) -= m * geltd); (*(here->BSIM4v7GMgePtr) -= m * geltd); (*(here->BSIM4v7GMgmPtr) += m * (geltd + gcrg + gcgmgmb)); (*(here->BSIM4v7GMdpPtr) += m * (gcrgd + gcgmdb)); (*(here->BSIM4v7GMgpPtr) += m * gcrgg); (*(here->BSIM4v7GMspPtr) += m * (gcrgs + gcgmsb)); (*(here->BSIM4v7GMbpPtr) += m * (gcrgb + gcgmbb)); (*(here->BSIM4v7DPgmPtr) += m * gcdgmb); (*(here->BSIM4v7GPgmPtr) -= m * gcrg); (*(here->BSIM4v7SPgmPtr) += m * gcsgmb); (*(here->BSIM4v7BPgmPtr) += m * gcbgmb); (*(here->BSIM4v7GPgpPtr) += m * (gcggb - gcrgg - ggtg + gIgtotg)); (*(here->BSIM4v7GPdpPtr) += m * (gcgdb - gcrgd - ggtd + gIgtotd)); (*(here->BSIM4v7GPspPtr) += m * (gcgsb - gcrgs - ggts + gIgtots)); (*(here->BSIM4v7GPbpPtr) += m * (gcgbb - gcrgb - ggtb + gIgtotb)); } else { (*(here->BSIM4v7GPgpPtr) += m * (gcggb - ggtg + gIgtotg)); (*(here->BSIM4v7GPdpPtr) += m * (gcgdb - ggtd + gIgtotd)); (*(here->BSIM4v7GPspPtr) += m * (gcgsb - ggts + gIgtots)); (*(here->BSIM4v7GPbpPtr) += m * (gcgbb - ggtb + gIgtotb)); } if (model->BSIM4v7rdsMod) { (*(here->BSIM4v7DgpPtr) += m * gdtotg); (*(here->BSIM4v7DspPtr) += m * gdtots); (*(here->BSIM4v7DbpPtr) += m * gdtotb); (*(here->BSIM4v7SdpPtr) += m * gstotd); (*(here->BSIM4v7SgpPtr) += m * gstotg); (*(here->BSIM4v7SbpPtr) += m * gstotb); } (*(here->BSIM4v7DPdpPtr) += m * (gdpr + here->BSIM4v7gds + here->BSIM4v7gbd + T1 * ddxpart_dVd - gdtotd + RevSum + gcddb + gbdpdp + dxpart * ggtd - gIdtotd)); (*(here->BSIM4v7DPdPtr) -= m * (gdpr + gdtot)); (*(here->BSIM4v7DPgpPtr) += m * (Gm + gcdgb - gdtotg + gbdpg - gIdtotg + dxpart * ggtg + T1 * ddxpart_dVg)); (*(here->BSIM4v7DPspPtr) -= m * (here->BSIM4v7gds + gdtots - dxpart * ggts + gIdtots - T1 * ddxpart_dVs + FwdSum - gcdsb - gbdpsp)); (*(here->BSIM4v7DPbpPtr) -= m * (gjbd + gdtotb - Gmbs - gcdbb - gbdpb + gIdtotb - T1 * ddxpart_dVb - dxpart * ggtb)); (*(here->BSIM4v7DdpPtr) -= m * (gdpr - gdtotd)); (*(here->BSIM4v7DdPtr) += m * (gdpr + gdtot)); (*(here->BSIM4v7SPdpPtr) -= m * (here->BSIM4v7gds + gstotd + RevSum - gcsdb - gbspdp - T1 * dsxpart_dVd - sxpart * ggtd + gIstotd)); (*(here->BSIM4v7SPgpPtr) += m * (gcsgb - Gm - gstotg + gbspg + sxpart * ggtg + T1 * dsxpart_dVg - gIstotg)); (*(here->BSIM4v7SPspPtr) += m * (gspr + here->BSIM4v7gds + here->BSIM4v7gbs + T1 * dsxpart_dVs - gstots + FwdSum + gcssb + gbspsp + sxpart * ggts - gIstots)); (*(here->BSIM4v7SPsPtr) -= m * (gspr + gstot)); (*(here->BSIM4v7SPbpPtr) -= m * (gjbs + gstotb + Gmbs - gcsbb - gbspb - sxpart * ggtb - T1 * dsxpart_dVb + gIstotb)); (*(here->BSIM4v7SspPtr) -= m * (gspr - gstots)); (*(here->BSIM4v7SsPtr) += m * (gspr + gstot)); (*(here->BSIM4v7BPdpPtr) += m * (gcbdb - gjbd + gbbdp - gIbtotd)); (*(here->BSIM4v7BPgpPtr) += m * (gcbgb - here->BSIM4v7gbgs - gIbtotg)); (*(here->BSIM4v7BPspPtr) += m * (gcbsb - gjbs + gbbsp - gIbtots)); (*(here->BSIM4v7BPbpPtr) += m * (gjbd + gjbs + gcbbb - here->BSIM4v7gbbs - gIbtotb)); ggidld = here->BSIM4v7ggidld; ggidlg = here->BSIM4v7ggidlg; ggidlb = here->BSIM4v7ggidlb; ggislg = here->BSIM4v7ggislg; ggisls = here->BSIM4v7ggisls; ggislb = here->BSIM4v7ggislb; /* stamp gidl */ (*(here->BSIM4v7DPdpPtr) += m * ggidld); (*(here->BSIM4v7DPgpPtr) += m * ggidlg); (*(here->BSIM4v7DPspPtr) -= m * (ggidlg + ggidld + ggidlb)); (*(here->BSIM4v7DPbpPtr) += m * ggidlb); (*(here->BSIM4v7BPdpPtr) -= m * ggidld); (*(here->BSIM4v7BPgpPtr) -= m * ggidlg); (*(here->BSIM4v7BPspPtr) += m * (ggidlg + ggidld + ggidlb)); (*(here->BSIM4v7BPbpPtr) -= m * ggidlb); /* stamp gisl */ (*(here->BSIM4v7SPdpPtr) -= m * (ggisls + ggislg + ggislb)); (*(here->BSIM4v7SPgpPtr) += m * ggislg); (*(here->BSIM4v7SPspPtr) += m * ggisls); (*(here->BSIM4v7SPbpPtr) += m * ggislb); (*(here->BSIM4v7BPdpPtr) += m * (ggislg + ggisls + ggislb)); (*(here->BSIM4v7BPgpPtr) -= m * ggislg); (*(here->BSIM4v7BPspPtr) -= m * ggisls); (*(here->BSIM4v7BPbpPtr) -= m * ggislb); if (here->BSIM4v7rbodyMod) { (*(here->BSIM4v7DPdbPtr) += m * (gcdbdb - here->BSIM4v7gbd)); (*(here->BSIM4v7SPsbPtr) -= m * (here->BSIM4v7gbs - gcsbsb)); (*(here->BSIM4v7DBdpPtr) += m * (gcdbdb - here->BSIM4v7gbd)); (*(here->BSIM4v7DBdbPtr) += m * (here->BSIM4v7gbd - gcdbdb + here->BSIM4v7grbpd + here->BSIM4v7grbdb)); (*(here->BSIM4v7DBbpPtr) -= m * here->BSIM4v7grbpd); (*(here->BSIM4v7DBbPtr) -= m * here->BSIM4v7grbdb); (*(here->BSIM4v7BPdbPtr) -= m * here->BSIM4v7grbpd); (*(here->BSIM4v7BPbPtr) -= m * here->BSIM4v7grbpb); (*(here->BSIM4v7BPsbPtr) -= m * here->BSIM4v7grbps); (*(here->BSIM4v7BPbpPtr) += m * (here->BSIM4v7grbpd + here->BSIM4v7grbps + here->BSIM4v7grbpb)); /* WDLiu: (gcbbb - here->BSIM4v7gbbs) already added to BPbpPtr */ (*(here->BSIM4v7SBspPtr) += m * (gcsbsb - here->BSIM4v7gbs)); (*(here->BSIM4v7SBbpPtr) -= m * here->BSIM4v7grbps); (*(here->BSIM4v7SBbPtr) -= m * here->BSIM4v7grbsb); (*(here->BSIM4v7SBsbPtr) += m * (here->BSIM4v7gbs - gcsbsb + here->BSIM4v7grbps + here->BSIM4v7grbsb)); (*(here->BSIM4v7BdbPtr) -= m * here->BSIM4v7grbdb); (*(here->BSIM4v7BbpPtr) -= m * here->BSIM4v7grbpb); (*(here->BSIM4v7BsbPtr) -= m * here->BSIM4v7grbsb); (*(here->BSIM4v7BbPtr) += m * (here->BSIM4v7grbsb + here->BSIM4v7grbdb + here->BSIM4v7grbpb)); } if (here->BSIM4v7trnqsMod) { (*(here->BSIM4v7QqPtr) += m * (gqdef + here->BSIM4v7gtau)); (*(here->BSIM4v7QgpPtr) += m * (ggtg - gcqgb)); (*(here->BSIM4v7QdpPtr) += m * (ggtd - gcqdb)); (*(here->BSIM4v7QspPtr) += m * (ggts - gcqsb)); (*(here->BSIM4v7QbpPtr) += m * (ggtb - gcqbb)); (*(here->BSIM4v7DPqPtr) += m * dxpart * here->BSIM4v7gtau); (*(here->BSIM4v7SPqPtr) += m * sxpart * here->BSIM4v7gtau); (*(here->BSIM4v7GPqPtr) -= m * here->BSIM4v7gtau); } #endif line1000: ; #ifndef USE_OMP } /* End of MOSFET Instance */ } /* End of Model Instance */ #endif return(OK); } /* function to compute poly depletion effect */ int BSIM4v7polyDepletion( double phi, double ngate, double epsgate, double coxe, double Vgs, double *Vgs_eff, double *dVgs_eff_dVg) { double T1, T2, T3, T4, T5, T6, T7, T8; /* Poly Gate Si Depletion Effect */ if ((ngate > 1.0e18) && (ngate < 1.0e25) && (Vgs > phi) && (epsgate!=0) ){ T1 = 1.0e6 * CHARGE * epsgate * ngate / (coxe * coxe); T8 = Vgs - phi; T4 = sqrt(1.0 + 2.0 * T8 / T1); T2 = 2.0 * T8 / (T4 + 1.0); T3 = 0.5 * T2 * T2 / T1; /* T3 = Vpoly */ T7 = 1.12 - T3 - 0.05; T6 = sqrt(T7 * T7 + 0.224); T5 = 1.12 - 0.5 * (T7 + T6); *Vgs_eff = Vgs - T5; *dVgs_eff_dVg = 1.0 - (0.5 - 0.5 / T4) * (1.0 + T7 / T6); } else { *Vgs_eff = Vgs; *dVgs_eff_dVg = 1.0; } return(0); } #ifdef USE_OMP void BSIM4v7LoadRhsMat(GENmodel *inModel, CKTcircuit *ckt) { int InstCount, idx; BSIM4v7instance **InstArray; BSIM4v7instance *here; BSIM4v7model *model = (BSIM4v7model*)inModel; InstArray = model->BSIM4v7InstanceArray; InstCount = model->BSIM4v7InstCount; for(idx = 0; idx < InstCount; idx++) { here = InstArray[idx]; model = BSIM4v7modPtr(here); /* Update b for Ax = b */ (*(ckt->CKTrhs + here->BSIM4v7dNodePrime) += here->BSIM4v7rhsdPrime); (*(ckt->CKTrhs + here->BSIM4v7gNodePrime) -= here->BSIM4v7rhsgPrime); if (here->BSIM4v7rgateMod == 2) (*(ckt->CKTrhs + here->BSIM4v7gNodeExt) -= here->BSIM4v7rhsgExt); else if (here->BSIM4v7rgateMod == 3) (*(ckt->CKTrhs + here->BSIM4v7gNodeMid) -= here->BSIM4v7grhsMid); if (!here->BSIM4v7rbodyMod) { (*(ckt->CKTrhs + here->BSIM4v7bNodePrime) += here->BSIM4v7rhsbPrime); (*(ckt->CKTrhs + here->BSIM4v7sNodePrime) += here->BSIM4v7rhssPrime); } else { (*(ckt->CKTrhs + here->BSIM4v7dbNode) -= here->BSIM4v7rhsdb); (*(ckt->CKTrhs + here->BSIM4v7bNodePrime) += here->BSIM4v7rhsbPrime); (*(ckt->CKTrhs + here->BSIM4v7sbNode) -= here->BSIM4v7rhssb); (*(ckt->CKTrhs + here->BSIM4v7sNodePrime) += here->BSIM4v7rhssPrime); } if (model->BSIM4v7rdsMod) { (*(ckt->CKTrhs + here->BSIM4v7dNode) -= here->BSIM4v7rhsd); (*(ckt->CKTrhs + here->BSIM4v7sNode) += here->BSIM4v7rhss); } if (here->BSIM4v7trnqsMod) *(ckt->CKTrhs + here->BSIM4v7qNode) += here->BSIM4v7rhsq; /* Update A for Ax = b */ if (here->BSIM4v7rgateMod == 1) { (*(here->BSIM4v7GEgePtr) += here->BSIM4v7_1); (*(here->BSIM4v7GPgePtr) -= here->BSIM4v7_2); (*(here->BSIM4v7GEgpPtr) -= here->BSIM4v7_3); (*(here->BSIM4v7GPgpPtr) += here->BSIM4v7_4); (*(here->BSIM4v7GPdpPtr) += here->BSIM4v7_5); (*(here->BSIM4v7GPspPtr) += here->BSIM4v7_6); (*(here->BSIM4v7GPbpPtr) += here->BSIM4v7_7); } else if (here->BSIM4v7rgateMod == 2) { (*(here->BSIM4v7GEgePtr) += here->BSIM4v7_8); (*(here->BSIM4v7GEgpPtr) += here->BSIM4v7_9); (*(here->BSIM4v7GEdpPtr) += here->BSIM4v7_10); (*(here->BSIM4v7GEspPtr) += here->BSIM4v7_11); (*(here->BSIM4v7GEbpPtr) += here->BSIM4v7_12); (*(here->BSIM4v7GPgePtr) -= here->BSIM4v7_13); (*(here->BSIM4v7GPgpPtr) += here->BSIM4v7_14); (*(here->BSIM4v7GPdpPtr) += here->BSIM4v7_15); (*(here->BSIM4v7GPspPtr) += here->BSIM4v7_16); (*(here->BSIM4v7GPbpPtr) += here->BSIM4v7_17); } else if (here->BSIM4v7rgateMod == 3) { (*(here->BSIM4v7GEgePtr) += here->BSIM4v7_18); (*(here->BSIM4v7GEgmPtr) -= here->BSIM4v7_19); (*(here->BSIM4v7GMgePtr) -= here->BSIM4v7_20); (*(here->BSIM4v7GMgmPtr) += here->BSIM4v7_21); (*(here->BSIM4v7GMdpPtr) += here->BSIM4v7_22); (*(here->BSIM4v7GMgpPtr) += here->BSIM4v7_23); (*(here->BSIM4v7GMspPtr) += here->BSIM4v7_24); (*(here->BSIM4v7GMbpPtr) += here->BSIM4v7_25); (*(here->BSIM4v7DPgmPtr) += here->BSIM4v7_26); (*(here->BSIM4v7GPgmPtr) -= here->BSIM4v7_27); (*(here->BSIM4v7SPgmPtr) += here->BSIM4v7_28); (*(here->BSIM4v7BPgmPtr) += here->BSIM4v7_29); (*(here->BSIM4v7GPgpPtr) += here->BSIM4v7_30); (*(here->BSIM4v7GPdpPtr) += here->BSIM4v7_31); (*(here->BSIM4v7GPspPtr) += here->BSIM4v7_32); (*(here->BSIM4v7GPbpPtr) += here->BSIM4v7_33); } else { (*(here->BSIM4v7GPgpPtr) += here->BSIM4v7_34); (*(here->BSIM4v7GPdpPtr) += here->BSIM4v7_35); (*(here->BSIM4v7GPspPtr) += here->BSIM4v7_36); (*(here->BSIM4v7GPbpPtr) += here->BSIM4v7_37); } if (model->BSIM4v7rdsMod) { (*(here->BSIM4v7DgpPtr) += here->BSIM4v7_38); (*(here->BSIM4v7DspPtr) += here->BSIM4v7_39); (*(here->BSIM4v7DbpPtr) += here->BSIM4v7_40); (*(here->BSIM4v7SdpPtr) += here->BSIM4v7_41); (*(here->BSIM4v7SgpPtr) += here->BSIM4v7_42); (*(here->BSIM4v7SbpPtr) += here->BSIM4v7_43); } (*(here->BSIM4v7DPdpPtr) += here->BSIM4v7_44); (*(here->BSIM4v7DPdPtr) -= here->BSIM4v7_45); (*(here->BSIM4v7DPgpPtr) += here->BSIM4v7_46); (*(here->BSIM4v7DPspPtr) -= here->BSIM4v7_47); (*(here->BSIM4v7DPbpPtr) -= here->BSIM4v7_48); (*(here->BSIM4v7DdpPtr) -= here->BSIM4v7_49); (*(here->BSIM4v7DdPtr) += here->BSIM4v7_50); (*(here->BSIM4v7SPdpPtr) -= here->BSIM4v7_51); (*(here->BSIM4v7SPgpPtr) += here->BSIM4v7_52); (*(here->BSIM4v7SPspPtr) += here->BSIM4v7_53); (*(here->BSIM4v7SPsPtr) -= here->BSIM4v7_54); (*(here->BSIM4v7SPbpPtr) -= here->BSIM4v7_55); (*(here->BSIM4v7SspPtr) -= here->BSIM4v7_56); (*(here->BSIM4v7SsPtr) += here->BSIM4v7_57); (*(here->BSIM4v7BPdpPtr) += here->BSIM4v7_58); (*(here->BSIM4v7BPgpPtr) += here->BSIM4v7_59); (*(here->BSIM4v7BPspPtr) += here->BSIM4v7_60); (*(here->BSIM4v7BPbpPtr) += here->BSIM4v7_61); /* stamp gidl */ (*(here->BSIM4v7DPdpPtr) += here->BSIM4v7_62); (*(here->BSIM4v7DPgpPtr) += here->BSIM4v7_63); (*(here->BSIM4v7DPspPtr) -= here->BSIM4v7_64); (*(here->BSIM4v7DPbpPtr) += here->BSIM4v7_65); (*(here->BSIM4v7BPdpPtr) -= here->BSIM4v7_66); (*(here->BSIM4v7BPgpPtr) -= here->BSIM4v7_67); (*(here->BSIM4v7BPspPtr) += here->BSIM4v7_68); (*(here->BSIM4v7BPbpPtr) -= here->BSIM4v7_69); /* stamp gisl */ (*(here->BSIM4v7SPdpPtr) -= here->BSIM4v7_70); (*(here->BSIM4v7SPgpPtr) += here->BSIM4v7_71); (*(here->BSIM4v7SPspPtr) += here->BSIM4v7_72); (*(here->BSIM4v7SPbpPtr) += here->BSIM4v7_73); (*(here->BSIM4v7BPdpPtr) += here->BSIM4v7_74); (*(here->BSIM4v7BPgpPtr) -= here->BSIM4v7_75); (*(here->BSIM4v7BPspPtr) -= here->BSIM4v7_76); (*(here->BSIM4v7BPbpPtr) -= here->BSIM4v7_77); if (here->BSIM4v7rbodyMod) { (*(here->BSIM4v7DPdbPtr) += here->BSIM4v7_78); (*(here->BSIM4v7SPsbPtr) -= here->BSIM4v7_79); (*(here->BSIM4v7DBdpPtr) += here->BSIM4v7_80); (*(here->BSIM4v7DBdbPtr) += here->BSIM4v7_81); (*(here->BSIM4v7DBbpPtr) -= here->BSIM4v7_82); (*(here->BSIM4v7DBbPtr) -= here->BSIM4v7_83); (*(here->BSIM4v7BPdbPtr) -= here->BSIM4v7_84); (*(here->BSIM4v7BPbPtr) -= here->BSIM4v7_85); (*(here->BSIM4v7BPsbPtr) -= here->BSIM4v7_86); (*(here->BSIM4v7BPbpPtr) += here->BSIM4v7_87); (*(here->BSIM4v7SBspPtr) += here->BSIM4v7_88); (*(here->BSIM4v7SBbpPtr) -= here->BSIM4v7_89); (*(here->BSIM4v7SBbPtr) -= here->BSIM4v7_90); (*(here->BSIM4v7SBsbPtr) += here->BSIM4v7_91); (*(here->BSIM4v7BdbPtr) -= here->BSIM4v7_92); (*(here->BSIM4v7BbpPtr) -= here->BSIM4v7_93); (*(here->BSIM4v7BsbPtr) -= here->BSIM4v7_94); (*(here->BSIM4v7BbPtr) += here->BSIM4v7_95); } if (here->BSIM4v7trnqsMod) { (*(here->BSIM4v7QqPtr) += here->BSIM4v7_96); (*(here->BSIM4v7QgpPtr) += here->BSIM4v7_97); (*(here->BSIM4v7QdpPtr) += here->BSIM4v7_98); (*(here->BSIM4v7QspPtr) += here->BSIM4v7_99); (*(here->BSIM4v7QbpPtr) += here->BSIM4v7_100); (*(here->BSIM4v7DPqPtr) += here->BSIM4v7_101); (*(here->BSIM4v7SPqPtr) += here->BSIM4v7_102); (*(here->BSIM4v7GPqPtr) -= here->BSIM4v7_103); } } } #endif tmpk8ny_4pz/src/spicelib/devices/bsim4v7/b4v7set.c0000644000175000017500000032674513546075722022141 0ustar carstencarsten/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4set.c of BSIM4.7.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Authors: 2008- Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. * Modified by Mohan Dunga, 12/13/2006 * Modified by Mohan Dunga, Wenwei Yang, 05/18/2007. * Modified by Wenwei Yang, 07/31/2008. * Modified by Tanvir Morshed, Darsen Lu 03/27/2011 **********/ #include "ngspice/ngspice.h" #include "ngspice/jobdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "bsim4v7def.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #ifdef USE_OMP #include "ngspice/cpextern.h" #endif #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define EPS0 8.85418e-12 #define EPSSI 1.03594e-10 #define PI 3.141592654 #define Charge_q 1.60219e-19 int BSIM4v7setup( SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { BSIM4v7model *model = (BSIM4v7model*)inModel; BSIM4v7instance *here; int error; CKTnode *tmp; int noiseAnalGiven = 0, createNode; /* Criteria for new node creation */ double Rtot, DMCGeff, DMCIeff, DMDGeff; JOB *job; #ifdef USE_OMP int idx, InstCount; BSIM4v7instance **InstArray; #endif /* Search for a noise analysis request */ for (job = ((TSKtask *)ft_curckt->ci_curTask)->jobs;job;job = job->JOBnextJob) { if(strcmp(job->JOBname,"Noise Analysis")==0) { noiseAnalGiven = 1; break; } } /* loop through all the BSIM4v7 device models */ for( ; model != NULL; model = BSIM4v7nextModel(model)) { /* process defaults of model parameters */ if (!model->BSIM4v7typeGiven) model->BSIM4v7type = NMOS; if (!model->BSIM4v7mobModGiven) model->BSIM4v7mobMod = 0; else if ((model->BSIM4v7mobMod != 0) && (model->BSIM4v7mobMod != 1) && (model->BSIM4v7mobMod != 2)&& (model->BSIM4v7mobMod != 3)) { model->BSIM4v7mobMod = 0; printf("Warning: mobMod has been set to its default value: 0.\n"); } if (!model->BSIM4v7binUnitGiven) model->BSIM4v7binUnit = 1; if (!model->BSIM4v7paramChkGiven) model->BSIM4v7paramChk = 1; if (!model->BSIM4v7dioModGiven) model->BSIM4v7dioMod = 1; else if ((model->BSIM4v7dioMod != 0) && (model->BSIM4v7dioMod != 1) && (model->BSIM4v7dioMod != 2)) { model->BSIM4v7dioMod = 1; printf("Warning: dioMod has been set to its default value: 1.\n"); } if (!model->BSIM4v7cvchargeModGiven) model->BSIM4v7cvchargeMod = 0; if (!model->BSIM4v7capModGiven) model->BSIM4v7capMod = 2; else if ((model->BSIM4v7capMod != 0) && (model->BSIM4v7capMod != 1) && (model->BSIM4v7capMod != 2)) { model->BSIM4v7capMod = 2; printf("Warning: capMod has been set to its default value: 2.\n"); } if (!model->BSIM4v7rdsModGiven) model->BSIM4v7rdsMod = 0; else if ((model->BSIM4v7rdsMod != 0) && (model->BSIM4v7rdsMod != 1)) { model->BSIM4v7rdsMod = 0; printf("Warning: rdsMod has been set to its default value: 0.\n"); } if (!model->BSIM4v7rbodyModGiven) model->BSIM4v7rbodyMod = 0; else if ((model->BSIM4v7rbodyMod != 0) && (model->BSIM4v7rbodyMod != 1) && (model->BSIM4v7rbodyMod != 2)) { model->BSIM4v7rbodyMod = 0; printf("Warning: rbodyMod has been set to its default value: 0.\n"); } if (!model->BSIM4v7rgateModGiven) model->BSIM4v7rgateMod = 0; else if ((model->BSIM4v7rgateMod != 0) && (model->BSIM4v7rgateMod != 1) && (model->BSIM4v7rgateMod != 2) && (model->BSIM4v7rgateMod != 3)) { model->BSIM4v7rgateMod = 0; printf("Warning: rgateMod has been set to its default value: 0.\n"); } if (!model->BSIM4v7perModGiven) model->BSIM4v7perMod = 1; else if ((model->BSIM4v7perMod != 0) && (model->BSIM4v7perMod != 1)) { model->BSIM4v7perMod = 1; printf("Warning: perMod has been set to its default value: 1.\n"); } if (!model->BSIM4v7geoModGiven) model->BSIM4v7geoMod = 0; if (!model->BSIM4v7rgeoModGiven) model->BSIM4v7rgeoMod = 0; else if ((model->BSIM4v7rgeoMod != 0) && (model->BSIM4v7rgeoMod != 1)) { model->BSIM4v7rgeoMod = 1; printf("Warning: rgeoMod has been set to its default value: 1.\n"); } if (!model->BSIM4v7fnoiModGiven) model->BSIM4v7fnoiMod = 1; else if ((model->BSIM4v7fnoiMod != 0) && (model->BSIM4v7fnoiMod != 1)) { model->BSIM4v7fnoiMod = 1; printf("Warning: fnoiMod has been set to its default value: 1.\n"); } if (!model->BSIM4v7tnoiModGiven) model->BSIM4v7tnoiMod = 0; /* WDLiu: tnoiMod=1 needs to set internal S/D nodes */ else if ((model->BSIM4v7tnoiMod != 0) && (model->BSIM4v7tnoiMod != 1) && (model->BSIM4v7tnoiMod != 2)) /* v4.7 */ { model->BSIM4v7tnoiMod = 0; printf("Warning: tnoiMod has been set to its default value: 0.\n"); } if (!model->BSIM4v7trnqsModGiven) model->BSIM4v7trnqsMod = 0; else if ((model->BSIM4v7trnqsMod != 0) && (model->BSIM4v7trnqsMod != 1)) { model->BSIM4v7trnqsMod = 0; printf("Warning: trnqsMod has been set to its default value: 0.\n"); } if (!model->BSIM4v7acnqsModGiven) model->BSIM4v7acnqsMod = 0; else if ((model->BSIM4v7acnqsMod != 0) && (model->BSIM4v7acnqsMod != 1)) { model->BSIM4v7acnqsMod = 0; printf("Warning: acnqsMod has been set to its default value: 0.\n"); } if (!model->BSIM4v7mtrlModGiven) model->BSIM4v7mtrlMod = 0; else if((model->BSIM4v7mtrlMod != 0) && (model->BSIM4v7mtrlMod != 1)) { model->BSIM4v7mtrlMod = 0; printf("Warning: mtrlMod has been set to its default value: 0.\n"); } if (!model->BSIM4v7mtrlCompatModGiven) model->BSIM4v7mtrlCompatMod = 0; else if((model->BSIM4v7mtrlCompatMod != 0) && (model->BSIM4v7mtrlCompatMod != 1)) { model->BSIM4v7mtrlCompatMod = 0; printf("Warning: mtrlCompatMod has been set to its default value: 0.\n"); } if (!model->BSIM4v7igcModGiven) model->BSIM4v7igcMod = 0; else if ((model->BSIM4v7igcMod != 0) && (model->BSIM4v7igcMod != 1) && (model->BSIM4v7igcMod != 2)) { model->BSIM4v7igcMod = 0; printf("Warning: igcMod has been set to its default value: 0.\n"); } if (!model->BSIM4v7igbModGiven) model->BSIM4v7igbMod = 0; else if ((model->BSIM4v7igbMod != 0) && (model->BSIM4v7igbMod != 1)) { model->BSIM4v7igbMod = 0; printf("Warning: igbMod has been set to its default value: 0.\n"); } if (!model->BSIM4v7tempModGiven) model->BSIM4v7tempMod = 0; else if ((model->BSIM4v7tempMod != 0) && (model->BSIM4v7tempMod != 1) && (model->BSIM4v7tempMod != 2) && (model->BSIM4v7tempMod != 3)) { model->BSIM4v7tempMod = 0; printf("Warning: tempMod has been set to its default value: 0.\n"); } if (!model->BSIM4v7versionGiven) model->BSIM4v7version = copy("4.7.0"); if (!model->BSIM4v7toxrefGiven) model->BSIM4v7toxref = 30.0e-10; if (!model->BSIM4v7eotGiven) model->BSIM4v7eot = 15.0e-10; if (!model->BSIM4v7vddeotGiven) model->BSIM4v7vddeot = (model->BSIM4v7type == NMOS) ? 1.5 : -1.5; if (!model->BSIM4v7tempeotGiven) model->BSIM4v7tempeot = 300.15; if (!model->BSIM4v7leffeotGiven) model->BSIM4v7leffeot = 1; if (!model->BSIM4v7weffeotGiven) model->BSIM4v7weffeot = 10; if (!model->BSIM4v7adosGiven) model->BSIM4v7ados = 1.0; if (!model->BSIM4v7bdosGiven) model->BSIM4v7bdos = 1.0; if (!model->BSIM4v7toxeGiven) model->BSIM4v7toxe = 30.0e-10; if (!model->BSIM4v7toxpGiven) model->BSIM4v7toxp = model->BSIM4v7toxe; if (!model->BSIM4v7toxmGiven) model->BSIM4v7toxm = model->BSIM4v7toxe; if (!model->BSIM4v7dtoxGiven) model->BSIM4v7dtox = 0.0; if (!model->BSIM4v7epsroxGiven) model->BSIM4v7epsrox = 3.9; if (!model->BSIM4v7cdscGiven) model->BSIM4v7cdsc = 2.4e-4; /* unit Q/V/m^2 */ if (!model->BSIM4v7cdscbGiven) model->BSIM4v7cdscb = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM4v7cdscdGiven) model->BSIM4v7cdscd = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM4v7citGiven) model->BSIM4v7cit = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM4v7nfactorGiven) model->BSIM4v7nfactor = 1.0; if (!model->BSIM4v7xjGiven) model->BSIM4v7xj = .15e-6; if (!model->BSIM4v7vsatGiven) model->BSIM4v7vsat = 8.0e4; /* unit m/s */ if (!model->BSIM4v7atGiven) model->BSIM4v7at = 3.3e4; /* unit m/s */ if (!model->BSIM4v7a0Given) model->BSIM4v7a0 = 1.0; if (!model->BSIM4v7agsGiven) model->BSIM4v7ags = 0.0; if (!model->BSIM4v7a1Given) model->BSIM4v7a1 = 0.0; if (!model->BSIM4v7a2Given) model->BSIM4v7a2 = 1.0; if (!model->BSIM4v7ketaGiven) model->BSIM4v7keta = -0.047; /* unit / V */ if (!model->BSIM4v7nsubGiven) model->BSIM4v7nsub = 6.0e16; /* unit 1/cm3 */ if (!model->BSIM4v7phigGiven) model->BSIM4v7phig = 4.05; if (!model->BSIM4v7epsrgateGiven) model->BSIM4v7epsrgate = 11.7; if (!model->BSIM4v7easubGiven) model->BSIM4v7easub = 4.05; if (!model->BSIM4v7epsrsubGiven) model->BSIM4v7epsrsub = 11.7; if (!model->BSIM4v7ni0subGiven) model->BSIM4v7ni0sub = 1.45e10; /* unit 1/cm3 */ if (!model->BSIM4v7bg0subGiven) model->BSIM4v7bg0sub = 1.16; /* unit eV */ if (!model->BSIM4v7tbgasubGiven) model->BSIM4v7tbgasub = 7.02e-4; if (!model->BSIM4v7tbgbsubGiven) model->BSIM4v7tbgbsub = 1108.0; if (!model->BSIM4v7ndepGiven) model->BSIM4v7ndep = 1.7e17; /* unit 1/cm3 */ if (!model->BSIM4v7nsdGiven) model->BSIM4v7nsd = 1.0e20; /* unit 1/cm3 */ if (!model->BSIM4v7phinGiven) model->BSIM4v7phin = 0.0; /* unit V */ if (!model->BSIM4v7ngateGiven) model->BSIM4v7ngate = 0; /* unit 1/cm3 */ if (!model->BSIM4v7vbmGiven) model->BSIM4v7vbm = -3.0; if (!model->BSIM4v7xtGiven) model->BSIM4v7xt = 1.55e-7; if (!model->BSIM4v7kt1Given) model->BSIM4v7kt1 = -0.11; /* unit V */ if (!model->BSIM4v7kt1lGiven) model->BSIM4v7kt1l = 0.0; /* unit V*m */ if (!model->BSIM4v7kt2Given) model->BSIM4v7kt2 = 0.022; /* No unit */ if (!model->BSIM4v7k3Given) model->BSIM4v7k3 = 80.0; if (!model->BSIM4v7k3bGiven) model->BSIM4v7k3b = 0.0; if (!model->BSIM4v7w0Given) model->BSIM4v7w0 = 2.5e-6; if (!model->BSIM4v7lpe0Given) model->BSIM4v7lpe0 = 1.74e-7; if (!model->BSIM4v7lpebGiven) model->BSIM4v7lpeb = 0.0; if (!model->BSIM4v7dvtp0Given) model->BSIM4v7dvtp0 = 0.0; if (!model->BSIM4v7dvtp1Given) model->BSIM4v7dvtp1 = 0.0; if (!model->BSIM4v7dvtp2Given) /* New DIBL/Rout */ model->BSIM4v7dvtp2 = 0.0; if (!model->BSIM4v7dvtp3Given) model->BSIM4v7dvtp3 = 0.0; if (!model->BSIM4v7dvtp4Given) model->BSIM4v7dvtp4 = 0.0; if (!model->BSIM4v7dvtp5Given) model->BSIM4v7dvtp5 = 0.0; if (!model->BSIM4v7dvt0Given) model->BSIM4v7dvt0 = 2.2; if (!model->BSIM4v7dvt1Given) model->BSIM4v7dvt1 = 0.53; if (!model->BSIM4v7dvt2Given) model->BSIM4v7dvt2 = -0.032; /* unit 1 / V */ if (!model->BSIM4v7dvt0wGiven) model->BSIM4v7dvt0w = 0.0; if (!model->BSIM4v7dvt1wGiven) model->BSIM4v7dvt1w = 5.3e6; if (!model->BSIM4v7dvt2wGiven) model->BSIM4v7dvt2w = -0.032; if (!model->BSIM4v7droutGiven) model->BSIM4v7drout = 0.56; if (!model->BSIM4v7dsubGiven) model->BSIM4v7dsub = model->BSIM4v7drout; if (!model->BSIM4v7vth0Given) model->BSIM4v7vth0 = (model->BSIM4v7type == NMOS) ? 0.7 : -0.7; if (!model->BSIM4v7vfbGiven) model->BSIM4v7vfb = -1.0; if (!model->BSIM4v7euGiven) model->BSIM4v7eu = (model->BSIM4v7type == NMOS) ? 1.67 : 1.0; if (!model->BSIM4v7ucsGiven) model->BSIM4v7ucs = (model->BSIM4v7type == NMOS) ? 1.67 : 1.0; if (!model->BSIM4v7uaGiven) model->BSIM4v7ua = ((model->BSIM4v7mobMod == 2)) ? 1.0e-15 : 1.0e-9; /* unit m/V */ if (!model->BSIM4v7ua1Given) model->BSIM4v7ua1 = 1.0e-9; /* unit m/V */ if (!model->BSIM4v7ubGiven) model->BSIM4v7ub = 1.0e-19; /* unit (m/V)**2 */ if (!model->BSIM4v7ub1Given) model->BSIM4v7ub1 = -1.0e-18; /* unit (m/V)**2 */ if (!model->BSIM4v7ucGiven) model->BSIM4v7uc = (model->BSIM4v7mobMod == 1) ? -0.0465 : -0.0465e-9; if (!model->BSIM4v7uc1Given) model->BSIM4v7uc1 = (model->BSIM4v7mobMod == 1) ? -0.056 : -0.056e-9; if (!model->BSIM4v7udGiven) model->BSIM4v7ud = 0.0; /* unit m**(-2) */ if (!model->BSIM4v7ud1Given) model->BSIM4v7ud1 = 0.0; if (!model->BSIM4v7upGiven) model->BSIM4v7up = 0.0; if (!model->BSIM4v7lpGiven) model->BSIM4v7lp = 1.0e-8; if (!model->BSIM4v7u0Given) model->BSIM4v7u0 = (model->BSIM4v7type == NMOS) ? 0.067 : 0.025; if (!model->BSIM4v7uteGiven) model->BSIM4v7ute = -1.5; if (!model->BSIM4v7ucsteGiven) model->BSIM4v7ucste = -4.775e-3; if (!model->BSIM4v7voffGiven) model->BSIM4v7voff = -0.08; if (!model->BSIM4v7vofflGiven) model->BSIM4v7voffl = 0.0; if (!model->BSIM4v7voffcvlGiven) model->BSIM4v7voffcvl = 0.0; if (!model->BSIM4v7minvGiven) model->BSIM4v7minv = 0.0; if (!model->BSIM4v7minvcvGiven) model->BSIM4v7minvcv = 0.0; if (!model->BSIM4v7fproutGiven) model->BSIM4v7fprout = 0.0; if (!model->BSIM4v7pditsGiven) model->BSIM4v7pdits = 0.0; if (!model->BSIM4v7pditsdGiven) model->BSIM4v7pditsd = 0.0; if (!model->BSIM4v7pditslGiven) model->BSIM4v7pditsl = 0.0; if (!model->BSIM4v7deltaGiven) model->BSIM4v7delta = 0.01; if (!model->BSIM4v7rdswminGiven) model->BSIM4v7rdswmin = 0.0; if (!model->BSIM4v7rdwminGiven) model->BSIM4v7rdwmin = 0.0; if (!model->BSIM4v7rswminGiven) model->BSIM4v7rswmin = 0.0; if (!model->BSIM4v7rdswGiven) model->BSIM4v7rdsw = 200.0; /* in ohm*um */ if (!model->BSIM4v7rdwGiven) model->BSIM4v7rdw = 100.0; if (!model->BSIM4v7rswGiven) model->BSIM4v7rsw = 100.0; if (!model->BSIM4v7prwgGiven) model->BSIM4v7prwg = 1.0; /* in 1/V */ if (!model->BSIM4v7prwbGiven) model->BSIM4v7prwb = 0.0; if (!model->BSIM4v7prtGiven) model->BSIM4v7prt = 0.0; if (!model->BSIM4v7eta0Given) model->BSIM4v7eta0 = 0.08; /* no unit */ if (!model->BSIM4v7etabGiven) model->BSIM4v7etab = -0.07; /* unit 1/V */ if (!model->BSIM4v7pclmGiven) model->BSIM4v7pclm = 1.3; /* no unit */ if (!model->BSIM4v7pdibl1Given) model->BSIM4v7pdibl1 = 0.39; /* no unit */ if (!model->BSIM4v7pdibl2Given) model->BSIM4v7pdibl2 = 0.0086; /* no unit */ if (!model->BSIM4v7pdiblbGiven) model->BSIM4v7pdiblb = 0.0; /* 1/V */ if (!model->BSIM4v7pscbe1Given) model->BSIM4v7pscbe1 = 4.24e8; if (!model->BSIM4v7pscbe2Given) model->BSIM4v7pscbe2 = 1.0e-5; if (!model->BSIM4v7pvagGiven) model->BSIM4v7pvag = 0.0; if (!model->BSIM4v7wrGiven) model->BSIM4v7wr = 1.0; if (!model->BSIM4v7dwgGiven) model->BSIM4v7dwg = 0.0; if (!model->BSIM4v7dwbGiven) model->BSIM4v7dwb = 0.0; if (!model->BSIM4v7b0Given) model->BSIM4v7b0 = 0.0; if (!model->BSIM4v7b1Given) model->BSIM4v7b1 = 0.0; if (!model->BSIM4v7alpha0Given) model->BSIM4v7alpha0 = 0.0; if (!model->BSIM4v7alpha1Given) model->BSIM4v7alpha1 = 0.0; if (!model->BSIM4v7beta0Given) model->BSIM4v7beta0 = 0.0; if (!model->BSIM4v7gidlModGiven) model->BSIM4v7gidlMod = 0; /* v4.7 New GIDL/GISL */ if (!model->BSIM4v7agidlGiven) model->BSIM4v7agidl = 0.0; if (!model->BSIM4v7bgidlGiven) model->BSIM4v7bgidl = 2.3e9; /* V/m */ if (!model->BSIM4v7cgidlGiven) model->BSIM4v7cgidl = 0.5; /* V^3 */ if (!model->BSIM4v7egidlGiven) model->BSIM4v7egidl = 0.8; /* V */ if (!model->BSIM4v7rgidlGiven) /* v4.7 New GIDL/GISL */ model->BSIM4v7rgidl = 1.0; if (!model->BSIM4v7kgidlGiven) /* v4.7 New GIDL/GISL */ model->BSIM4v7kgidl = 0.0; if (!model->BSIM4v7fgidlGiven) /* v4.7 New GIDL/GISL */ model->BSIM4v7fgidl = 0.0; if (!model->BSIM4v7agislGiven) { if (model->BSIM4v7agidlGiven) model->BSIM4v7agisl = model->BSIM4v7agidl; else model->BSIM4v7agisl = 0.0; } if (!model->BSIM4v7bgislGiven) { if (model->BSIM4v7bgidlGiven) model->BSIM4v7bgisl = model->BSIM4v7bgidl; else model->BSIM4v7bgisl = 2.3e9; /* V/m */ } if (!model->BSIM4v7cgislGiven) { if (model->BSIM4v7cgidlGiven) model->BSIM4v7cgisl = model->BSIM4v7cgidl; else model->BSIM4v7cgisl = 0.5; /* V^3 */ } if (!model->BSIM4v7egislGiven) { if (model->BSIM4v7egidlGiven) model->BSIM4v7egisl = model->BSIM4v7egidl; else model->BSIM4v7egisl = 0.8; /* V */ } if (!model->BSIM4v7rgislGiven) /* v4.7 New GIDL/GISL */ model->BSIM4v7rgisl = model->BSIM4v7rgidl; if (!model->BSIM4v7kgislGiven) /* v4.7 New GIDL/GISL */ model->BSIM4v7kgisl = model->BSIM4v7kgidl; if (!model->BSIM4v7fgislGiven) /* v4.7 New GIDL/GISL */ model->BSIM4v7fgisl = model->BSIM4v7fgidl; if (!model->BSIM4v7aigcGiven) model->BSIM4v7aigc = (model->BSIM4v7type == NMOS) ? 1.36e-2 : 9.80e-3; if (!model->BSIM4v7bigcGiven) model->BSIM4v7bigc = (model->BSIM4v7type == NMOS) ? 1.71e-3 : 7.59e-4; if (!model->BSIM4v7cigcGiven) model->BSIM4v7cigc = (model->BSIM4v7type == NMOS) ? 0.075 : 0.03; if (model->BSIM4v7aigsdGiven) { model->BSIM4v7aigs = model->BSIM4v7aigd = model->BSIM4v7aigsd; } else { model->BSIM4v7aigsd = (model->BSIM4v7type == NMOS) ? 1.36e-2 : 9.80e-3; if (!model->BSIM4v7aigsGiven) model->BSIM4v7aigs = (model->BSIM4v7type == NMOS) ? 1.36e-2 : 9.80e-3; if (!model->BSIM4v7aigdGiven) model->BSIM4v7aigd = (model->BSIM4v7type == NMOS) ? 1.36e-2 : 9.80e-3; } if (model->BSIM4v7bigsdGiven) { model->BSIM4v7bigs = model->BSIM4v7bigd = model->BSIM4v7bigsd; } else { model->BSIM4v7bigsd = (model->BSIM4v7type == NMOS) ? 1.71e-3 : 7.59e-4; if (!model->BSIM4v7bigsGiven) model->BSIM4v7bigs = (model->BSIM4v7type == NMOS) ? 1.71e-3 : 7.59e-4; if (!model->BSIM4v7bigdGiven) model->BSIM4v7bigd = (model->BSIM4v7type == NMOS) ? 1.71e-3 : 7.59e-4; } if (model->BSIM4v7cigsdGiven) { model->BSIM4v7cigs = model->BSIM4v7cigd = model->BSIM4v7cigsd; } else { model->BSIM4v7cigsd = (model->BSIM4v7type == NMOS) ? 0.075 : 0.03; if (!model->BSIM4v7cigsGiven) model->BSIM4v7cigs = (model->BSIM4v7type == NMOS) ? 0.075 : 0.03; if (!model->BSIM4v7cigdGiven) model->BSIM4v7cigd = (model->BSIM4v7type == NMOS) ? 0.075 : 0.03; } if (!model->BSIM4v7aigbaccGiven) model->BSIM4v7aigbacc = 1.36e-2; if (!model->BSIM4v7bigbaccGiven) model->BSIM4v7bigbacc = 1.71e-3; if (!model->BSIM4v7cigbaccGiven) model->BSIM4v7cigbacc = 0.075; if (!model->BSIM4v7aigbinvGiven) model->BSIM4v7aigbinv = 1.11e-2; if (!model->BSIM4v7bigbinvGiven) model->BSIM4v7bigbinv = 9.49e-4; if (!model->BSIM4v7cigbinvGiven) model->BSIM4v7cigbinv = 0.006; if (!model->BSIM4v7nigcGiven) model->BSIM4v7nigc = 1.0; if (!model->BSIM4v7nigbinvGiven) model->BSIM4v7nigbinv = 3.0; if (!model->BSIM4v7nigbaccGiven) model->BSIM4v7nigbacc = 1.0; if (!model->BSIM4v7ntoxGiven) model->BSIM4v7ntox = 1.0; if (!model->BSIM4v7eigbinvGiven) model->BSIM4v7eigbinv = 1.1; if (!model->BSIM4v7pigcdGiven) model->BSIM4v7pigcd = 1.0; if (!model->BSIM4v7poxedgeGiven) model->BSIM4v7poxedge = 1.0; if (!model->BSIM4v7xrcrg1Given) model->BSIM4v7xrcrg1 = 12.0; if (!model->BSIM4v7xrcrg2Given) model->BSIM4v7xrcrg2 = 1.0; if (!model->BSIM4v7ijthsfwdGiven) model->BSIM4v7ijthsfwd = 0.1; /* unit A */ if (!model->BSIM4v7ijthdfwdGiven) model->BSIM4v7ijthdfwd = model->BSIM4v7ijthsfwd; if (!model->BSIM4v7ijthsrevGiven) model->BSIM4v7ijthsrev = 0.1; /* unit A */ if (!model->BSIM4v7ijthdrevGiven) model->BSIM4v7ijthdrev = model->BSIM4v7ijthsrev; if (!model->BSIM4v7tnoiaGiven) model->BSIM4v7tnoia = 1.5; if (!model->BSIM4v7tnoibGiven) model->BSIM4v7tnoib = 3.5; if (!model->BSIM4v7tnoicGiven) model->BSIM4v7tnoic = 0.0; if (!model->BSIM4v7rnoiaGiven) model->BSIM4v7rnoia = 0.577; if (!model->BSIM4v7rnoibGiven) model->BSIM4v7rnoib = 0.5164; if (!model->BSIM4v7rnoicGiven) model->BSIM4v7rnoic = 0.395; if (!model->BSIM4v7ntnoiGiven) model->BSIM4v7ntnoi = 1.0; if (!model->BSIM4v7lambdaGiven) model->BSIM4v7lambda = 0.0; if (!model->BSIM4v7vtlGiven) model->BSIM4v7vtl = 2.0e5; /* unit m/s */ if (!model->BSIM4v7xnGiven) model->BSIM4v7xn = 3.0; if (!model->BSIM4v7lcGiven) model->BSIM4v7lc = 5.0e-9; if (!model->BSIM4v7vfbsdoffGiven) model->BSIM4v7vfbsdoff = 0.0; /* unit v */ if (!model->BSIM4v7tvfbsdoffGiven) model->BSIM4v7tvfbsdoff = 0.0; if (!model->BSIM4v7tvoffGiven) model->BSIM4v7tvoff = 0.0; if (!model->BSIM4v7tnfactorGiven) /* v4.7 temp dep of leakage current */ model->BSIM4v7tnfactor = 0.0; if (!model->BSIM4v7teta0Given) /* v4.7 temp dep of leakage current */ model->BSIM4v7teta0 = 0.0; if (!model->BSIM4v7tvoffcvGiven) /* v4.7 temp dep of leakage current */ model->BSIM4v7tvoffcv = 0.0; if (!model->BSIM4v7lintnoiGiven) model->BSIM4v7lintnoi = 0.0; /* unit m */ if (!model->BSIM4v7xjbvsGiven) model->BSIM4v7xjbvs = 1.0; /* no unit */ if (!model->BSIM4v7xjbvdGiven) model->BSIM4v7xjbvd = model->BSIM4v7xjbvs; if (!model->BSIM4v7bvsGiven) model->BSIM4v7bvs = 10.0; /* V */ if (!model->BSIM4v7bvdGiven) model->BSIM4v7bvd = model->BSIM4v7bvs; if (!model->BSIM4v7gbminGiven) model->BSIM4v7gbmin = 1.0e-12; /* in mho */ if (!model->BSIM4v7rbdbGiven) model->BSIM4v7rbdb = 50.0; /* in ohm */ if (!model->BSIM4v7rbpbGiven) model->BSIM4v7rbpb = 50.0; if (!model->BSIM4v7rbsbGiven) model->BSIM4v7rbsb = 50.0; if (!model->BSIM4v7rbpsGiven) model->BSIM4v7rbps = 50.0; if (!model->BSIM4v7rbpdGiven) model->BSIM4v7rbpd = 50.0; if (!model->BSIM4v7rbps0Given) model->BSIM4v7rbps0 = 50.0; if (!model->BSIM4v7rbpslGiven) model->BSIM4v7rbpsl = 0.0; if (!model->BSIM4v7rbpswGiven) model->BSIM4v7rbpsw = 0.0; if (!model->BSIM4v7rbpsnfGiven) model->BSIM4v7rbpsnf = 0.0; if (!model->BSIM4v7rbpd0Given) model->BSIM4v7rbpd0 = 50.0; if (!model->BSIM4v7rbpdlGiven) model->BSIM4v7rbpdl = 0.0; if (!model->BSIM4v7rbpdwGiven) model->BSIM4v7rbpdw = 0.0; if (!model->BSIM4v7rbpdnfGiven) model->BSIM4v7rbpdnf = 0.0; if (!model->BSIM4v7rbpbx0Given) model->BSIM4v7rbpbx0 = 100.0; if (!model->BSIM4v7rbpbxlGiven) model->BSIM4v7rbpbxl = 0.0; if (!model->BSIM4v7rbpbxwGiven) model->BSIM4v7rbpbxw = 0.0; if (!model->BSIM4v7rbpbxnfGiven) model->BSIM4v7rbpbxnf = 0.0; if (!model->BSIM4v7rbpby0Given) model->BSIM4v7rbpby0 = 100.0; if (!model->BSIM4v7rbpbylGiven) model->BSIM4v7rbpbyl = 0.0; if (!model->BSIM4v7rbpbywGiven) model->BSIM4v7rbpbyw = 0.0; if (!model->BSIM4v7rbpbynfGiven) model->BSIM4v7rbpbynf = 0.0; if (!model->BSIM4v7rbsbx0Given) model->BSIM4v7rbsbx0 = 100.0; if (!model->BSIM4v7rbsby0Given) model->BSIM4v7rbsby0 = 100.0; if (!model->BSIM4v7rbdbx0Given) model->BSIM4v7rbdbx0 = 100.0; if (!model->BSIM4v7rbdby0Given) model->BSIM4v7rbdby0 = 100.0; if (!model->BSIM4v7rbsdbxlGiven) model->BSIM4v7rbsdbxl = 0.0; if (!model->BSIM4v7rbsdbxwGiven) model->BSIM4v7rbsdbxw = 0.0; if (!model->BSIM4v7rbsdbxnfGiven) model->BSIM4v7rbsdbxnf = 0.0; if (!model->BSIM4v7rbsdbylGiven) model->BSIM4v7rbsdbyl = 0.0; if (!model->BSIM4v7rbsdbywGiven) model->BSIM4v7rbsdbyw = 0.0; if (!model->BSIM4v7rbsdbynfGiven) model->BSIM4v7rbsdbynf = 0.0; if (!model->BSIM4v7cgslGiven) model->BSIM4v7cgsl = 0.0; if (!model->BSIM4v7cgdlGiven) model->BSIM4v7cgdl = 0.0; if (!model->BSIM4v7ckappasGiven) model->BSIM4v7ckappas = 0.6; if (!model->BSIM4v7ckappadGiven) model->BSIM4v7ckappad = model->BSIM4v7ckappas; if (!model->BSIM4v7clcGiven) model->BSIM4v7clc = 0.1e-6; if (!model->BSIM4v7cleGiven) model->BSIM4v7cle = 0.6; if (!model->BSIM4v7vfbcvGiven) model->BSIM4v7vfbcv = -1.0; if (!model->BSIM4v7acdeGiven) model->BSIM4v7acde = 1.0; if (!model->BSIM4v7moinGiven) model->BSIM4v7moin = 15.0; if (!model->BSIM4v7noffGiven) model->BSIM4v7noff = 1.0; if (!model->BSIM4v7voffcvGiven) model->BSIM4v7voffcv = 0.0; if (!model->BSIM4v7dmcgGiven) model->BSIM4v7dmcg = 0.0; if (!model->BSIM4v7dmciGiven) model->BSIM4v7dmci = model->BSIM4v7dmcg; if (!model->BSIM4v7dmdgGiven) model->BSIM4v7dmdg = 0.0; if (!model->BSIM4v7dmcgtGiven) model->BSIM4v7dmcgt = 0.0; if (!model->BSIM4v7xgwGiven) model->BSIM4v7xgw = 0.0; if (!model->BSIM4v7xglGiven) model->BSIM4v7xgl = 0.0; if (!model->BSIM4v7rshgGiven) model->BSIM4v7rshg = 0.1; if (!model->BSIM4v7ngconGiven) model->BSIM4v7ngcon = 1.0; if (!model->BSIM4v7tcjGiven) model->BSIM4v7tcj = 0.0; if (!model->BSIM4v7tpbGiven) model->BSIM4v7tpb = 0.0; if (!model->BSIM4v7tcjswGiven) model->BSIM4v7tcjsw = 0.0; if (!model->BSIM4v7tpbswGiven) model->BSIM4v7tpbsw = 0.0; if (!model->BSIM4v7tcjswgGiven) model->BSIM4v7tcjswg = 0.0; if (!model->BSIM4v7tpbswgGiven) model->BSIM4v7tpbswg = 0.0; /* Length dependence */ if (!model->BSIM4v7lcdscGiven) model->BSIM4v7lcdsc = 0.0; if (!model->BSIM4v7lcdscbGiven) model->BSIM4v7lcdscb = 0.0; if (!model->BSIM4v7lcdscdGiven) model->BSIM4v7lcdscd = 0.0; if (!model->BSIM4v7lcitGiven) model->BSIM4v7lcit = 0.0; if (!model->BSIM4v7lnfactorGiven) model->BSIM4v7lnfactor = 0.0; if (!model->BSIM4v7lxjGiven) model->BSIM4v7lxj = 0.0; if (!model->BSIM4v7lvsatGiven) model->BSIM4v7lvsat = 0.0; if (!model->BSIM4v7latGiven) model->BSIM4v7lat = 0.0; if (!model->BSIM4v7la0Given) model->BSIM4v7la0 = 0.0; if (!model->BSIM4v7lagsGiven) model->BSIM4v7lags = 0.0; if (!model->BSIM4v7la1Given) model->BSIM4v7la1 = 0.0; if (!model->BSIM4v7la2Given) model->BSIM4v7la2 = 0.0; if (!model->BSIM4v7lketaGiven) model->BSIM4v7lketa = 0.0; if (!model->BSIM4v7lnsubGiven) model->BSIM4v7lnsub = 0.0; if (!model->BSIM4v7lndepGiven) model->BSIM4v7lndep = 0.0; if (!model->BSIM4v7lnsdGiven) model->BSIM4v7lnsd = 0.0; if (!model->BSIM4v7lphinGiven) model->BSIM4v7lphin = 0.0; if (!model->BSIM4v7lngateGiven) model->BSIM4v7lngate = 0.0; if (!model->BSIM4v7lvbmGiven) model->BSIM4v7lvbm = 0.0; if (!model->BSIM4v7lxtGiven) model->BSIM4v7lxt = 0.0; if (!model->BSIM4v7lkt1Given) model->BSIM4v7lkt1 = 0.0; if (!model->BSIM4v7lkt1lGiven) model->BSIM4v7lkt1l = 0.0; if (!model->BSIM4v7lkt2Given) model->BSIM4v7lkt2 = 0.0; if (!model->BSIM4v7lk3Given) model->BSIM4v7lk3 = 0.0; if (!model->BSIM4v7lk3bGiven) model->BSIM4v7lk3b = 0.0; if (!model->BSIM4v7lw0Given) model->BSIM4v7lw0 = 0.0; if (!model->BSIM4v7llpe0Given) model->BSIM4v7llpe0 = 0.0; if (!model->BSIM4v7llpebGiven) model->BSIM4v7llpeb = 0.0; if (!model->BSIM4v7ldvtp0Given) model->BSIM4v7ldvtp0 = 0.0; if (!model->BSIM4v7ldvtp1Given) model->BSIM4v7ldvtp1 = 0.0; if (!model->BSIM4v7ldvtp2Given) /* New DIBL/Rout */ model->BSIM4v7ldvtp2 = 0.0; if (!model->BSIM4v7ldvtp3Given) model->BSIM4v7ldvtp3 = 0.0; if (!model->BSIM4v7ldvtp4Given) model->BSIM4v7ldvtp4 = 0.0; if (!model->BSIM4v7ldvtp5Given) model->BSIM4v7ldvtp5 = 0.0; if (!model->BSIM4v7ldvt0Given) model->BSIM4v7ldvt0 = 0.0; if (!model->BSIM4v7ldvt1Given) model->BSIM4v7ldvt1 = 0.0; if (!model->BSIM4v7ldvt2Given) model->BSIM4v7ldvt2 = 0.0; if (!model->BSIM4v7ldvt0wGiven) model->BSIM4v7ldvt0w = 0.0; if (!model->BSIM4v7ldvt1wGiven) model->BSIM4v7ldvt1w = 0.0; if (!model->BSIM4v7ldvt2wGiven) model->BSIM4v7ldvt2w = 0.0; if (!model->BSIM4v7ldroutGiven) model->BSIM4v7ldrout = 0.0; if (!model->BSIM4v7ldsubGiven) model->BSIM4v7ldsub = 0.0; if (!model->BSIM4v7lvth0Given) model->BSIM4v7lvth0 = 0.0; if (!model->BSIM4v7luaGiven) model->BSIM4v7lua = 0.0; if (!model->BSIM4v7lua1Given) model->BSIM4v7lua1 = 0.0; if (!model->BSIM4v7lubGiven) model->BSIM4v7lub = 0.0; if (!model->BSIM4v7lub1Given) model->BSIM4v7lub1 = 0.0; if (!model->BSIM4v7lucGiven) model->BSIM4v7luc = 0.0; if (!model->BSIM4v7luc1Given) model->BSIM4v7luc1 = 0.0; if (!model->BSIM4v7ludGiven) model->BSIM4v7lud = 0.0; if (!model->BSIM4v7lud1Given) model->BSIM4v7lud1 = 0.0; if (!model->BSIM4v7lupGiven) model->BSIM4v7lup = 0.0; if (!model->BSIM4v7llpGiven) model->BSIM4v7llp = 0.0; if (!model->BSIM4v7lu0Given) model->BSIM4v7lu0 = 0.0; if (!model->BSIM4v7luteGiven) model->BSIM4v7lute = 0.0; if (!model->BSIM4v7lucsteGiven) model->BSIM4v7lucste = 0.0; if (!model->BSIM4v7lvoffGiven) model->BSIM4v7lvoff = 0.0; if (!model->BSIM4v7lminvGiven) model->BSIM4v7lminv = 0.0; if (!model->BSIM4v7lminvcvGiven) model->BSIM4v7lminvcv = 0.0; if (!model->BSIM4v7lfproutGiven) model->BSIM4v7lfprout = 0.0; if (!model->BSIM4v7lpditsGiven) model->BSIM4v7lpdits = 0.0; if (!model->BSIM4v7lpditsdGiven) model->BSIM4v7lpditsd = 0.0; if (!model->BSIM4v7ldeltaGiven) model->BSIM4v7ldelta = 0.0; if (!model->BSIM4v7lrdswGiven) model->BSIM4v7lrdsw = 0.0; if (!model->BSIM4v7lrdwGiven) model->BSIM4v7lrdw = 0.0; if (!model->BSIM4v7lrswGiven) model->BSIM4v7lrsw = 0.0; if (!model->BSIM4v7lprwbGiven) model->BSIM4v7lprwb = 0.0; if (!model->BSIM4v7lprwgGiven) model->BSIM4v7lprwg = 0.0; if (!model->BSIM4v7lprtGiven) model->BSIM4v7lprt = 0.0; if (!model->BSIM4v7leta0Given) model->BSIM4v7leta0 = 0.0; if (!model->BSIM4v7letabGiven) model->BSIM4v7letab = -0.0; if (!model->BSIM4v7lpclmGiven) model->BSIM4v7lpclm = 0.0; if (!model->BSIM4v7lpdibl1Given) model->BSIM4v7lpdibl1 = 0.0; if (!model->BSIM4v7lpdibl2Given) model->BSIM4v7lpdibl2 = 0.0; if (!model->BSIM4v7lpdiblbGiven) model->BSIM4v7lpdiblb = 0.0; if (!model->BSIM4v7lpscbe1Given) model->BSIM4v7lpscbe1 = 0.0; if (!model->BSIM4v7lpscbe2Given) model->BSIM4v7lpscbe2 = 0.0; if (!model->BSIM4v7lpvagGiven) model->BSIM4v7lpvag = 0.0; if (!model->BSIM4v7lwrGiven) model->BSIM4v7lwr = 0.0; if (!model->BSIM4v7ldwgGiven) model->BSIM4v7ldwg = 0.0; if (!model->BSIM4v7ldwbGiven) model->BSIM4v7ldwb = 0.0; if (!model->BSIM4v7lb0Given) model->BSIM4v7lb0 = 0.0; if (!model->BSIM4v7lb1Given) model->BSIM4v7lb1 = 0.0; if (!model->BSIM4v7lalpha0Given) model->BSIM4v7lalpha0 = 0.0; if (!model->BSIM4v7lalpha1Given) model->BSIM4v7lalpha1 = 0.0; if (!model->BSIM4v7lbeta0Given) model->BSIM4v7lbeta0 = 0.0; if (!model->BSIM4v7lagidlGiven) model->BSIM4v7lagidl = 0.0; if (!model->BSIM4v7lbgidlGiven) model->BSIM4v7lbgidl = 0.0; if (!model->BSIM4v7lcgidlGiven) model->BSIM4v7lcgidl = 0.0; if (!model->BSIM4v7legidlGiven) model->BSIM4v7legidl = 0.0; if (!model->BSIM4v7lrgidlGiven) /* v4.7 New GIDL/GISL */ model->BSIM4v7lrgidl = 0.0; if (!model->BSIM4v7lkgidlGiven) /* v4.7 New GIDL/GISL */ model->BSIM4v7lkgidl = 0.0; if (!model->BSIM4v7lfgidlGiven) /* v4.7 New GIDL/GISL */ model->BSIM4v7lfgidl = 0.0; if (!model->BSIM4v7lagislGiven) { if (model->BSIM4v7lagidlGiven) model->BSIM4v7lagisl = model->BSIM4v7lagidl; else model->BSIM4v7lagisl = 0.0; } if (!model->BSIM4v7lbgislGiven) { if (model->BSIM4v7lbgidlGiven) model->BSIM4v7lbgisl = model->BSIM4v7lbgidl; else model->BSIM4v7lbgisl = 0.0; } if (!model->BSIM4v7lcgislGiven) { if (model->BSIM4v7lcgidlGiven) model->BSIM4v7lcgisl = model->BSIM4v7lcgidl; else model->BSIM4v7lcgisl = 0.0; } if (!model->BSIM4v7legislGiven) { if (model->BSIM4v7legidlGiven) model->BSIM4v7legisl = model->BSIM4v7legidl; else model->BSIM4v7legisl = 0.0; } if (!model->BSIM4v7lrgislGiven) /* v4.7 New GIDL/GISL */ { if (model->BSIM4v7lrgidlGiven) model->BSIM4v7lrgisl = model->BSIM4v7lrgidl; } if (!model->BSIM4v7lkgislGiven) /* v4.7 New GIDL/GISL */ { if (model->BSIM4v7lkgidlGiven) model->BSIM4v7lkgisl = model->BSIM4v7lkgidl; } if (!model->BSIM4v7lfgislGiven) /* v4.7 New GIDL/GISL */ { if (model->BSIM4v7lfgidlGiven) model->BSIM4v7lfgisl = model->BSIM4v7lfgidl; } if (!model->BSIM4v7laigcGiven) model->BSIM4v7laigc = 0.0; if (!model->BSIM4v7lbigcGiven) model->BSIM4v7lbigc = 0.0; if (!model->BSIM4v7lcigcGiven) model->BSIM4v7lcigc = 0.0; if (!model->BSIM4v7aigsdGiven && (model->BSIM4v7aigsGiven || model->BSIM4v7aigdGiven)) { if (!model->BSIM4v7laigsGiven) model->BSIM4v7laigs = 0.0; if (!model->BSIM4v7laigdGiven) model->BSIM4v7laigd = 0.0; } else { if (!model->BSIM4v7laigsdGiven) model->BSIM4v7laigsd = 0.0; model->BSIM4v7laigs = model->BSIM4v7laigd = model->BSIM4v7laigsd; } if (!model->BSIM4v7bigsdGiven && (model->BSIM4v7bigsGiven || model->BSIM4v7bigdGiven)) { if (!model->BSIM4v7lbigsGiven) model->BSIM4v7lbigs = 0.0; if (!model->BSIM4v7lbigdGiven) model->BSIM4v7lbigd = 0.0; } else { if (!model->BSIM4v7lbigsdGiven) model->BSIM4v7lbigsd = 0.0; model->BSIM4v7lbigs = model->BSIM4v7lbigd = model->BSIM4v7lbigsd; } if (!model->BSIM4v7cigsdGiven && (model->BSIM4v7cigsGiven || model->BSIM4v7cigdGiven)) { if (!model->BSIM4v7lcigsGiven) model->BSIM4v7lcigs = 0.0; if (!model->BSIM4v7lcigdGiven) model->BSIM4v7lcigd = 0.0; } else { if (!model->BSIM4v7lcigsdGiven) model->BSIM4v7lcigsd = 0.0; model->BSIM4v7lcigs = model->BSIM4v7lcigd = model->BSIM4v7lcigsd; } if (!model->BSIM4v7laigbaccGiven) model->BSIM4v7laigbacc = 0.0; if (!model->BSIM4v7lbigbaccGiven) model->BSIM4v7lbigbacc = 0.0; if (!model->BSIM4v7lcigbaccGiven) model->BSIM4v7lcigbacc = 0.0; if (!model->BSIM4v7laigbinvGiven) model->BSIM4v7laigbinv = 0.0; if (!model->BSIM4v7lbigbinvGiven) model->BSIM4v7lbigbinv = 0.0; if (!model->BSIM4v7lcigbinvGiven) model->BSIM4v7lcigbinv = 0.0; if (!model->BSIM4v7lnigcGiven) model->BSIM4v7lnigc = 0.0; if (!model->BSIM4v7lnigbinvGiven) model->BSIM4v7lnigbinv = 0.0; if (!model->BSIM4v7lnigbaccGiven) model->BSIM4v7lnigbacc = 0.0; if (!model->BSIM4v7lntoxGiven) model->BSIM4v7lntox = 0.0; if (!model->BSIM4v7leigbinvGiven) model->BSIM4v7leigbinv = 0.0; if (!model->BSIM4v7lpigcdGiven) model->BSIM4v7lpigcd = 0.0; if (!model->BSIM4v7lpoxedgeGiven) model->BSIM4v7lpoxedge = 0.0; if (!model->BSIM4v7lxrcrg1Given) model->BSIM4v7lxrcrg1 = 0.0; if (!model->BSIM4v7lxrcrg2Given) model->BSIM4v7lxrcrg2 = 0.0; if (!model->BSIM4v7leuGiven) model->BSIM4v7leu = 0.0; if (!model->BSIM4v7lucsGiven) model->BSIM4v7lucs = 0.0; if (!model->BSIM4v7lvfbGiven) model->BSIM4v7lvfb = 0.0; if (!model->BSIM4v7llambdaGiven) model->BSIM4v7llambda = 0.0; if (!model->BSIM4v7lvtlGiven) model->BSIM4v7lvtl = 0.0; if (!model->BSIM4v7lxnGiven) model->BSIM4v7lxn = 0.0; if (!model->BSIM4v7lvfbsdoffGiven) model->BSIM4v7lvfbsdoff = 0.0; if (!model->BSIM4v7ltvfbsdoffGiven) model->BSIM4v7ltvfbsdoff = 0.0; if (!model->BSIM4v7ltvoffGiven) model->BSIM4v7ltvoff = 0.0; if (!model->BSIM4v7ltnfactorGiven) /* v4.7 temp dep of leakage current */ model->BSIM4v7ltnfactor = 0.0; if (!model->BSIM4v7lteta0Given) /* v4.7 temp dep of leakage current */ model->BSIM4v7lteta0 = 0.0; if (!model->BSIM4v7ltvoffcvGiven) /* v4.7 temp dep of leakage current */ model->BSIM4v7ltvoffcv = 0.0; if (!model->BSIM4v7lcgslGiven) model->BSIM4v7lcgsl = 0.0; if (!model->BSIM4v7lcgdlGiven) model->BSIM4v7lcgdl = 0.0; if (!model->BSIM4v7lckappasGiven) model->BSIM4v7lckappas = 0.0; if (!model->BSIM4v7lckappadGiven) model->BSIM4v7lckappad = 0.0; if (!model->BSIM4v7lclcGiven) model->BSIM4v7lclc = 0.0; if (!model->BSIM4v7lcleGiven) model->BSIM4v7lcle = 0.0; if (!model->BSIM4v7lcfGiven) model->BSIM4v7lcf = 0.0; if (!model->BSIM4v7lvfbcvGiven) model->BSIM4v7lvfbcv = 0.0; if (!model->BSIM4v7lacdeGiven) model->BSIM4v7lacde = 0.0; if (!model->BSIM4v7lmoinGiven) model->BSIM4v7lmoin = 0.0; if (!model->BSIM4v7lnoffGiven) model->BSIM4v7lnoff = 0.0; if (!model->BSIM4v7lvoffcvGiven) model->BSIM4v7lvoffcv = 0.0; /* Width dependence */ if (!model->BSIM4v7wcdscGiven) model->BSIM4v7wcdsc = 0.0; if (!model->BSIM4v7wcdscbGiven) model->BSIM4v7wcdscb = 0.0; if (!model->BSIM4v7wcdscdGiven) model->BSIM4v7wcdscd = 0.0; if (!model->BSIM4v7wcitGiven) model->BSIM4v7wcit = 0.0; if (!model->BSIM4v7wnfactorGiven) model->BSIM4v7wnfactor = 0.0; if (!model->BSIM4v7wxjGiven) model->BSIM4v7wxj = 0.0; if (!model->BSIM4v7wvsatGiven) model->BSIM4v7wvsat = 0.0; if (!model->BSIM4v7watGiven) model->BSIM4v7wat = 0.0; if (!model->BSIM4v7wa0Given) model->BSIM4v7wa0 = 0.0; if (!model->BSIM4v7wagsGiven) model->BSIM4v7wags = 0.0; if (!model->BSIM4v7wa1Given) model->BSIM4v7wa1 = 0.0; if (!model->BSIM4v7wa2Given) model->BSIM4v7wa2 = 0.0; if (!model->BSIM4v7wketaGiven) model->BSIM4v7wketa = 0.0; if (!model->BSIM4v7wnsubGiven) model->BSIM4v7wnsub = 0.0; if (!model->BSIM4v7wndepGiven) model->BSIM4v7wndep = 0.0; if (!model->BSIM4v7wnsdGiven) model->BSIM4v7wnsd = 0.0; if (!model->BSIM4v7wphinGiven) model->BSIM4v7wphin = 0.0; if (!model->BSIM4v7wngateGiven) model->BSIM4v7wngate = 0.0; if (!model->BSIM4v7wvbmGiven) model->BSIM4v7wvbm = 0.0; if (!model->BSIM4v7wxtGiven) model->BSIM4v7wxt = 0.0; if (!model->BSIM4v7wkt1Given) model->BSIM4v7wkt1 = 0.0; if (!model->BSIM4v7wkt1lGiven) model->BSIM4v7wkt1l = 0.0; if (!model->BSIM4v7wkt2Given) model->BSIM4v7wkt2 = 0.0; if (!model->BSIM4v7wk3Given) model->BSIM4v7wk3 = 0.0; if (!model->BSIM4v7wk3bGiven) model->BSIM4v7wk3b = 0.0; if (!model->BSIM4v7ww0Given) model->BSIM4v7ww0 = 0.0; if (!model->BSIM4v7wlpe0Given) model->BSIM4v7wlpe0 = 0.0; if (!model->BSIM4v7wlpebGiven) model->BSIM4v7wlpeb = 0.0; if (!model->BSIM4v7wdvtp0Given) model->BSIM4v7wdvtp0 = 0.0; if (!model->BSIM4v7wdvtp1Given) model->BSIM4v7wdvtp1 = 0.0; if (!model->BSIM4v7wdvtp2Given) /* New DIBL/Rout */ model->BSIM4v7wdvtp2 = 0.0; if (!model->BSIM4v7wdvtp3Given) model->BSIM4v7wdvtp3 = 0.0; if (!model->BSIM4v7wdvtp4Given) model->BSIM4v7wdvtp4 = 0.0; if (!model->BSIM4v7wdvtp5Given) model->BSIM4v7wdvtp5 = 0.0; if (!model->BSIM4v7wdvt0Given) model->BSIM4v7wdvt0 = 0.0; if (!model->BSIM4v7wdvt1Given) model->BSIM4v7wdvt1 = 0.0; if (!model->BSIM4v7wdvt2Given) model->BSIM4v7wdvt2 = 0.0; if (!model->BSIM4v7wdvt0wGiven) model->BSIM4v7wdvt0w = 0.0; if (!model->BSIM4v7wdvt1wGiven) model->BSIM4v7wdvt1w = 0.0; if (!model->BSIM4v7wdvt2wGiven) model->BSIM4v7wdvt2w = 0.0; if (!model->BSIM4v7wdroutGiven) model->BSIM4v7wdrout = 0.0; if (!model->BSIM4v7wdsubGiven) model->BSIM4v7wdsub = 0.0; if (!model->BSIM4v7wvth0Given) model->BSIM4v7wvth0 = 0.0; if (!model->BSIM4v7wuaGiven) model->BSIM4v7wua = 0.0; if (!model->BSIM4v7wua1Given) model->BSIM4v7wua1 = 0.0; if (!model->BSIM4v7wubGiven) model->BSIM4v7wub = 0.0; if (!model->BSIM4v7wub1Given) model->BSIM4v7wub1 = 0.0; if (!model->BSIM4v7wucGiven) model->BSIM4v7wuc = 0.0; if (!model->BSIM4v7wuc1Given) model->BSIM4v7wuc1 = 0.0; if (!model->BSIM4v7wudGiven) model->BSIM4v7wud = 0.0; if (!model->BSIM4v7wud1Given) model->BSIM4v7wud1 = 0.0; if (!model->BSIM4v7wupGiven) model->BSIM4v7wup = 0.0; if (!model->BSIM4v7wlpGiven) model->BSIM4v7wlp = 0.0; if (!model->BSIM4v7wu0Given) model->BSIM4v7wu0 = 0.0; if (!model->BSIM4v7wuteGiven) model->BSIM4v7wute = 0.0; if (!model->BSIM4v7wucsteGiven) model->BSIM4v7wucste = 0.0; if (!model->BSIM4v7wvoffGiven) model->BSIM4v7wvoff = 0.0; if (!model->BSIM4v7wminvGiven) model->BSIM4v7wminv = 0.0; if (!model->BSIM4v7wminvcvGiven) model->BSIM4v7wminvcv = 0.0; if (!model->BSIM4v7wfproutGiven) model->BSIM4v7wfprout = 0.0; if (!model->BSIM4v7wpditsGiven) model->BSIM4v7wpdits = 0.0; if (!model->BSIM4v7wpditsdGiven) model->BSIM4v7wpditsd = 0.0; if (!model->BSIM4v7wdeltaGiven) model->BSIM4v7wdelta = 0.0; if (!model->BSIM4v7wrdswGiven) model->BSIM4v7wrdsw = 0.0; if (!model->BSIM4v7wrdwGiven) model->BSIM4v7wrdw = 0.0; if (!model->BSIM4v7wrswGiven) model->BSIM4v7wrsw = 0.0; if (!model->BSIM4v7wprwbGiven) model->BSIM4v7wprwb = 0.0; if (!model->BSIM4v7wprwgGiven) model->BSIM4v7wprwg = 0.0; if (!model->BSIM4v7wprtGiven) model->BSIM4v7wprt = 0.0; if (!model->BSIM4v7weta0Given) model->BSIM4v7weta0 = 0.0; if (!model->BSIM4v7wetabGiven) model->BSIM4v7wetab = 0.0; if (!model->BSIM4v7wpclmGiven) model->BSIM4v7wpclm = 0.0; if (!model->BSIM4v7wpdibl1Given) model->BSIM4v7wpdibl1 = 0.0; if (!model->BSIM4v7wpdibl2Given) model->BSIM4v7wpdibl2 = 0.0; if (!model->BSIM4v7wpdiblbGiven) model->BSIM4v7wpdiblb = 0.0; if (!model->BSIM4v7wpscbe1Given) model->BSIM4v7wpscbe1 = 0.0; if (!model->BSIM4v7wpscbe2Given) model->BSIM4v7wpscbe2 = 0.0; if (!model->BSIM4v7wpvagGiven) model->BSIM4v7wpvag = 0.0; if (!model->BSIM4v7wwrGiven) model->BSIM4v7wwr = 0.0; if (!model->BSIM4v7wdwgGiven) model->BSIM4v7wdwg = 0.0; if (!model->BSIM4v7wdwbGiven) model->BSIM4v7wdwb = 0.0; if (!model->BSIM4v7wb0Given) model->BSIM4v7wb0 = 0.0; if (!model->BSIM4v7wb1Given) model->BSIM4v7wb1 = 0.0; if (!model->BSIM4v7walpha0Given) model->BSIM4v7walpha0 = 0.0; if (!model->BSIM4v7walpha1Given) model->BSIM4v7walpha1 = 0.0; if (!model->BSIM4v7wbeta0Given) model->BSIM4v7wbeta0 = 0.0; if (!model->BSIM4v7wagidlGiven) model->BSIM4v7wagidl = 0.0; if (!model->BSIM4v7wbgidlGiven) model->BSIM4v7wbgidl = 0.0; if (!model->BSIM4v7wcgidlGiven) model->BSIM4v7wcgidl = 0.0; if (!model->BSIM4v7wegidlGiven) model->BSIM4v7wegidl = 0.0; if (!model->BSIM4v7wrgidlGiven) /* v4.7 New GIDL/GISL */ model->BSIM4v7wrgidl = 0.0; if (!model->BSIM4v7wkgidlGiven) /* v4.7 New GIDL/GISL */ model->BSIM4v7wkgidl = 0.0; if (!model->BSIM4v7wfgidlGiven) /* v4.7 New GIDL/GISL */ model->BSIM4v7wfgidl = 0.0; if (!model->BSIM4v7wagislGiven) { if (model->BSIM4v7wagidlGiven) model->BSIM4v7wagisl = model->BSIM4v7wagidl; else model->BSIM4v7wagisl = 0.0; } if (!model->BSIM4v7wbgislGiven) { if (model->BSIM4v7wbgidlGiven) model->BSIM4v7wbgisl = model->BSIM4v7wbgidl; else model->BSIM4v7wbgisl = 0.0; } if (!model->BSIM4v7wcgislGiven) { if (model->BSIM4v7wcgidlGiven) model->BSIM4v7wcgisl = model->BSIM4v7wcgidl; else model->BSIM4v7wcgisl = 0.0; } if (!model->BSIM4v7wegislGiven) { if (model->BSIM4v7wegidlGiven) model->BSIM4v7wegisl = model->BSIM4v7wegidl; else model->BSIM4v7wegisl = 0.0; } if (!model->BSIM4v7wrgislGiven) /* v4.7 New GIDL/GISL */ { if (model->BSIM4v7wrgidlGiven) model->BSIM4v7wrgisl = model->BSIM4v7wrgidl; } if (!model->BSIM4v7wkgislGiven) /* v4.7 New GIDL/GISL */ { if (model->BSIM4v7wkgidlGiven) model->BSIM4v7wkgisl = model->BSIM4v7wkgidl; } if (!model->BSIM4v7wfgislGiven) /* v4.7 New GIDL/GISL */ { if (model->BSIM4v7wfgidlGiven) model->BSIM4v7wfgisl = model->BSIM4v7wfgidl; } if (!model->BSIM4v7waigcGiven) model->BSIM4v7waigc = 0.0; if (!model->BSIM4v7wbigcGiven) model->BSIM4v7wbigc = 0.0; if (!model->BSIM4v7wcigcGiven) model->BSIM4v7wcigc = 0.0; if (!model->BSIM4v7aigsdGiven && (model->BSIM4v7aigsGiven || model->BSIM4v7aigdGiven)) { if (!model->BSIM4v7waigsGiven) model->BSIM4v7waigs = 0.0; if (!model->BSIM4v7waigdGiven) model->BSIM4v7waigd = 0.0; } else { if (!model->BSIM4v7waigsdGiven) model->BSIM4v7waigsd = 0.0; model->BSIM4v7waigs = model->BSIM4v7waigd = model->BSIM4v7waigsd; } if (!model->BSIM4v7bigsdGiven && (model->BSIM4v7bigsGiven || model->BSIM4v7bigdGiven)) { if (!model->BSIM4v7wbigsGiven) model->BSIM4v7wbigs = 0.0; if (!model->BSIM4v7wbigdGiven) model->BSIM4v7wbigd = 0.0; } else { if (!model->BSIM4v7wbigsdGiven) model->BSIM4v7wbigsd = 0.0; model->BSIM4v7wbigs = model->BSIM4v7wbigd = model->BSIM4v7wbigsd; } if (!model->BSIM4v7cigsdGiven && (model->BSIM4v7cigsGiven || model->BSIM4v7cigdGiven)) { if (!model->BSIM4v7wcigsGiven) model->BSIM4v7wcigs = 0.0; if (!model->BSIM4v7wcigdGiven) model->BSIM4v7wcigd = 0.0; } else { if (!model->BSIM4v7wcigsdGiven) model->BSIM4v7wcigsd = 0.0; model->BSIM4v7wcigs = model->BSIM4v7wcigd = model->BSIM4v7wcigsd; } if (!model->BSIM4v7waigbaccGiven) model->BSIM4v7waigbacc = 0.0; if (!model->BSIM4v7wbigbaccGiven) model->BSIM4v7wbigbacc = 0.0; if (!model->BSIM4v7wcigbaccGiven) model->BSIM4v7wcigbacc = 0.0; if (!model->BSIM4v7waigbinvGiven) model->BSIM4v7waigbinv = 0.0; if (!model->BSIM4v7wbigbinvGiven) model->BSIM4v7wbigbinv = 0.0; if (!model->BSIM4v7wcigbinvGiven) model->BSIM4v7wcigbinv = 0.0; if (!model->BSIM4v7wnigcGiven) model->BSIM4v7wnigc = 0.0; if (!model->BSIM4v7wnigbinvGiven) model->BSIM4v7wnigbinv = 0.0; if (!model->BSIM4v7wnigbaccGiven) model->BSIM4v7wnigbacc = 0.0; if (!model->BSIM4v7wntoxGiven) model->BSIM4v7wntox = 0.0; if (!model->BSIM4v7weigbinvGiven) model->BSIM4v7weigbinv = 0.0; if (!model->BSIM4v7wpigcdGiven) model->BSIM4v7wpigcd = 0.0; if (!model->BSIM4v7wpoxedgeGiven) model->BSIM4v7wpoxedge = 0.0; if (!model->BSIM4v7wxrcrg1Given) model->BSIM4v7wxrcrg1 = 0.0; if (!model->BSIM4v7wxrcrg2Given) model->BSIM4v7wxrcrg2 = 0.0; if (!model->BSIM4v7weuGiven) model->BSIM4v7weu = 0.0; if (!model->BSIM4v7wucsGiven) model->BSIM4v7wucs = 0.0; if (!model->BSIM4v7wvfbGiven) model->BSIM4v7wvfb = 0.0; if (!model->BSIM4v7wlambdaGiven) model->BSIM4v7wlambda = 0.0; if (!model->BSIM4v7wvtlGiven) model->BSIM4v7wvtl = 0.0; if (!model->BSIM4v7wxnGiven) model->BSIM4v7wxn = 0.0; if (!model->BSIM4v7wvfbsdoffGiven) model->BSIM4v7wvfbsdoff = 0.0; if (!model->BSIM4v7wtvfbsdoffGiven) model->BSIM4v7wtvfbsdoff = 0.0; if (!model->BSIM4v7wtvoffGiven) model->BSIM4v7wtvoff = 0.0; if (!model->BSIM4v7wtnfactorGiven) /* v4.7 temp dep of leakage current */ model->BSIM4v7wtnfactor = 0.0; if (!model->BSIM4v7wteta0Given) /* v4.7 temp dep of leakage current */ model->BSIM4v7wteta0 = 0.0; if (!model->BSIM4v7wtvoffcvGiven) /* v4.7 temp dep of leakage current */ model->BSIM4v7wtvoffcv = 0.0; if (!model->BSIM4v7wcgslGiven) model->BSIM4v7wcgsl = 0.0; if (!model->BSIM4v7wcgdlGiven) model->BSIM4v7wcgdl = 0.0; if (!model->BSIM4v7wckappasGiven) model->BSIM4v7wckappas = 0.0; if (!model->BSIM4v7wckappadGiven) model->BSIM4v7wckappad = 0.0; if (!model->BSIM4v7wcfGiven) model->BSIM4v7wcf = 0.0; if (!model->BSIM4v7wclcGiven) model->BSIM4v7wclc = 0.0; if (!model->BSIM4v7wcleGiven) model->BSIM4v7wcle = 0.0; if (!model->BSIM4v7wvfbcvGiven) model->BSIM4v7wvfbcv = 0.0; if (!model->BSIM4v7wacdeGiven) model->BSIM4v7wacde = 0.0; if (!model->BSIM4v7wmoinGiven) model->BSIM4v7wmoin = 0.0; if (!model->BSIM4v7wnoffGiven) model->BSIM4v7wnoff = 0.0; if (!model->BSIM4v7wvoffcvGiven) model->BSIM4v7wvoffcv = 0.0; /* Cross-term dependence */ if (!model->BSIM4v7pcdscGiven) model->BSIM4v7pcdsc = 0.0; if (!model->BSIM4v7pcdscbGiven) model->BSIM4v7pcdscb = 0.0; if (!model->BSIM4v7pcdscdGiven) model->BSIM4v7pcdscd = 0.0; if (!model->BSIM4v7pcitGiven) model->BSIM4v7pcit = 0.0; if (!model->BSIM4v7pnfactorGiven) model->BSIM4v7pnfactor = 0.0; if (!model->BSIM4v7pxjGiven) model->BSIM4v7pxj = 0.0; if (!model->BSIM4v7pvsatGiven) model->BSIM4v7pvsat = 0.0; if (!model->BSIM4v7patGiven) model->BSIM4v7pat = 0.0; if (!model->BSIM4v7pa0Given) model->BSIM4v7pa0 = 0.0; if (!model->BSIM4v7pagsGiven) model->BSIM4v7pags = 0.0; if (!model->BSIM4v7pa1Given) model->BSIM4v7pa1 = 0.0; if (!model->BSIM4v7pa2Given) model->BSIM4v7pa2 = 0.0; if (!model->BSIM4v7pketaGiven) model->BSIM4v7pketa = 0.0; if (!model->BSIM4v7pnsubGiven) model->BSIM4v7pnsub = 0.0; if (!model->BSIM4v7pndepGiven) model->BSIM4v7pndep = 0.0; if (!model->BSIM4v7pnsdGiven) model->BSIM4v7pnsd = 0.0; if (!model->BSIM4v7pphinGiven) model->BSIM4v7pphin = 0.0; if (!model->BSIM4v7pngateGiven) model->BSIM4v7pngate = 0.0; if (!model->BSIM4v7pvbmGiven) model->BSIM4v7pvbm = 0.0; if (!model->BSIM4v7pxtGiven) model->BSIM4v7pxt = 0.0; if (!model->BSIM4v7pkt1Given) model->BSIM4v7pkt1 = 0.0; if (!model->BSIM4v7pkt1lGiven) model->BSIM4v7pkt1l = 0.0; if (!model->BSIM4v7pkt2Given) model->BSIM4v7pkt2 = 0.0; if (!model->BSIM4v7pk3Given) model->BSIM4v7pk3 = 0.0; if (!model->BSIM4v7pk3bGiven) model->BSIM4v7pk3b = 0.0; if (!model->BSIM4v7pw0Given) model->BSIM4v7pw0 = 0.0; if (!model->BSIM4v7plpe0Given) model->BSIM4v7plpe0 = 0.0; if (!model->BSIM4v7plpebGiven) model->BSIM4v7plpeb = 0.0; if (!model->BSIM4v7pdvtp0Given) model->BSIM4v7pdvtp0 = 0.0; if (!model->BSIM4v7pdvtp1Given) model->BSIM4v7pdvtp1 = 0.0; if (!model->BSIM4v7pdvtp2Given) /* New DIBL/Rout */ model->BSIM4v7pdvtp2 = 0.0; if (!model->BSIM4v7pdvtp3Given) model->BSIM4v7pdvtp3 = 0.0; if (!model->BSIM4v7pdvtp4Given) model->BSIM4v7pdvtp4 = 0.0; if (!model->BSIM4v7pdvtp5Given) model->BSIM4v7pdvtp5 = 0.0; if (!model->BSIM4v7pdvt0Given) model->BSIM4v7pdvt0 = 0.0; if (!model->BSIM4v7pdvt1Given) model->BSIM4v7pdvt1 = 0.0; if (!model->BSIM4v7pdvt2Given) model->BSIM4v7pdvt2 = 0.0; if (!model->BSIM4v7pdvt0wGiven) model->BSIM4v7pdvt0w = 0.0; if (!model->BSIM4v7pdvt1wGiven) model->BSIM4v7pdvt1w = 0.0; if (!model->BSIM4v7pdvt2wGiven) model->BSIM4v7pdvt2w = 0.0; if (!model->BSIM4v7pdroutGiven) model->BSIM4v7pdrout = 0.0; if (!model->BSIM4v7pdsubGiven) model->BSIM4v7pdsub = 0.0; if (!model->BSIM4v7pvth0Given) model->BSIM4v7pvth0 = 0.0; if (!model->BSIM4v7puaGiven) model->BSIM4v7pua = 0.0; if (!model->BSIM4v7pua1Given) model->BSIM4v7pua1 = 0.0; if (!model->BSIM4v7pubGiven) model->BSIM4v7pub = 0.0; if (!model->BSIM4v7pub1Given) model->BSIM4v7pub1 = 0.0; if (!model->BSIM4v7pucGiven) model->BSIM4v7puc = 0.0; if (!model->BSIM4v7puc1Given) model->BSIM4v7puc1 = 0.0; if (!model->BSIM4v7pudGiven) model->BSIM4v7pud = 0.0; if (!model->BSIM4v7pud1Given) model->BSIM4v7pud1 = 0.0; if (!model->BSIM4v7pupGiven) model->BSIM4v7pup = 0.0; if (!model->BSIM4v7plpGiven) model->BSIM4v7plp = 0.0; if (!model->BSIM4v7pu0Given) model->BSIM4v7pu0 = 0.0; if (!model->BSIM4v7puteGiven) model->BSIM4v7pute = 0.0; if (!model->BSIM4v7pucsteGiven) model->BSIM4v7pucste = 0.0; if (!model->BSIM4v7pvoffGiven) model->BSIM4v7pvoff = 0.0; if (!model->BSIM4v7pminvGiven) model->BSIM4v7pminv = 0.0; if (!model->BSIM4v7pminvcvGiven) model->BSIM4v7pminvcv = 0.0; if (!model->BSIM4v7pfproutGiven) model->BSIM4v7pfprout = 0.0; if (!model->BSIM4v7ppditsGiven) model->BSIM4v7ppdits = 0.0; if (!model->BSIM4v7ppditsdGiven) model->BSIM4v7ppditsd = 0.0; if (!model->BSIM4v7pdeltaGiven) model->BSIM4v7pdelta = 0.0; if (!model->BSIM4v7prdswGiven) model->BSIM4v7prdsw = 0.0; if (!model->BSIM4v7prdwGiven) model->BSIM4v7prdw = 0.0; if (!model->BSIM4v7prswGiven) model->BSIM4v7prsw = 0.0; if (!model->BSIM4v7pprwbGiven) model->BSIM4v7pprwb = 0.0; if (!model->BSIM4v7pprwgGiven) model->BSIM4v7pprwg = 0.0; if (!model->BSIM4v7pprtGiven) model->BSIM4v7pprt = 0.0; if (!model->BSIM4v7peta0Given) model->BSIM4v7peta0 = 0.0; if (!model->BSIM4v7petabGiven) model->BSIM4v7petab = 0.0; if (!model->BSIM4v7ppclmGiven) model->BSIM4v7ppclm = 0.0; if (!model->BSIM4v7ppdibl1Given) model->BSIM4v7ppdibl1 = 0.0; if (!model->BSIM4v7ppdibl2Given) model->BSIM4v7ppdibl2 = 0.0; if (!model->BSIM4v7ppdiblbGiven) model->BSIM4v7ppdiblb = 0.0; if (!model->BSIM4v7ppscbe1Given) model->BSIM4v7ppscbe1 = 0.0; if (!model->BSIM4v7ppscbe2Given) model->BSIM4v7ppscbe2 = 0.0; if (!model->BSIM4v7ppvagGiven) model->BSIM4v7ppvag = 0.0; if (!model->BSIM4v7pwrGiven) model->BSIM4v7pwr = 0.0; if (!model->BSIM4v7pdwgGiven) model->BSIM4v7pdwg = 0.0; if (!model->BSIM4v7pdwbGiven) model->BSIM4v7pdwb = 0.0; if (!model->BSIM4v7pb0Given) model->BSIM4v7pb0 = 0.0; if (!model->BSIM4v7pb1Given) model->BSIM4v7pb1 = 0.0; if (!model->BSIM4v7palpha0Given) model->BSIM4v7palpha0 = 0.0; if (!model->BSIM4v7palpha1Given) model->BSIM4v7palpha1 = 0.0; if (!model->BSIM4v7pbeta0Given) model->BSIM4v7pbeta0 = 0.0; if (!model->BSIM4v7pagidlGiven) model->BSIM4v7pagidl = 0.0; if (!model->BSIM4v7pbgidlGiven) model->BSIM4v7pbgidl = 0.0; if (!model->BSIM4v7pcgidlGiven) model->BSIM4v7pcgidl = 0.0; if (!model->BSIM4v7pegidlGiven) model->BSIM4v7pegidl = 0.0; if (!model->BSIM4v7prgidlGiven) /* v4.7 New GIDL/GISL */ model->BSIM4v7prgidl = 0.0; if (!model->BSIM4v7pkgidlGiven) /* v4.7 New GIDL/GISL */ model->BSIM4v7pkgidl = 0.0; if (!model->BSIM4v7pfgidlGiven) /* v4.7 New GIDL/GISL */ model->BSIM4v7pfgidl = 0.0; if (!model->BSIM4v7pagislGiven) { if (model->BSIM4v7pagidlGiven) model->BSIM4v7pagisl = model->BSIM4v7pagidl; else model->BSIM4v7pagisl = 0.0; } if (!model->BSIM4v7pbgislGiven) { if (model->BSIM4v7pbgidlGiven) model->BSIM4v7pbgisl = model->BSIM4v7pbgidl; else model->BSIM4v7pbgisl = 0.0; } if (!model->BSIM4v7pcgislGiven) { if (model->BSIM4v7pcgidlGiven) model->BSIM4v7pcgisl = model->BSIM4v7pcgidl; else model->BSIM4v7pcgisl = 0.0; } if (!model->BSIM4v7pegislGiven) { if (model->BSIM4v7pegidlGiven) model->BSIM4v7pegisl = model->BSIM4v7pegidl; else model->BSIM4v7pegisl = 0.0; } if (!model->BSIM4v7prgislGiven) /* v4.7 New GIDL/GISL */ { if (model->BSIM4v7prgidlGiven) model->BSIM4v7prgisl = model->BSIM4v7prgidl; } if (!model->BSIM4v7pkgislGiven) /* v4.7 New GIDL/GISL */ { if (model->BSIM4v7pkgidlGiven) model->BSIM4v7pkgisl = model->BSIM4v7pkgidl; } if (!model->BSIM4v7pfgislGiven) /* v4.7 New GIDL/GISL */ { if (model->BSIM4v7pfgidlGiven) model->BSIM4v7pfgisl = model->BSIM4v7pfgidl; } if (!model->BSIM4v7paigcGiven) model->BSIM4v7paigc = 0.0; if (!model->BSIM4v7pbigcGiven) model->BSIM4v7pbigc = 0.0; if (!model->BSIM4v7pcigcGiven) model->BSIM4v7pcigc = 0.0; if (!model->BSIM4v7aigsdGiven && (model->BSIM4v7aigsGiven || model->BSIM4v7aigdGiven)) { if (!model->BSIM4v7paigsGiven) model->BSIM4v7paigs = 0.0; if (!model->BSIM4v7paigdGiven) model->BSIM4v7paigd = 0.0; } else { if (!model->BSIM4v7paigsdGiven) model->BSIM4v7paigsd = 0.0; model->BSIM4v7paigs = model->BSIM4v7paigd = model->BSIM4v7paigsd; } if (!model->BSIM4v7bigsdGiven && (model->BSIM4v7bigsGiven || model->BSIM4v7bigdGiven)) { if (!model->BSIM4v7pbigsGiven) model->BSIM4v7pbigs = 0.0; if (!model->BSIM4v7pbigdGiven) model->BSIM4v7pbigd = 0.0; } else { if (!model->BSIM4v7pbigsdGiven) model->BSIM4v7pbigsd = 0.0; model->BSIM4v7pbigs = model->BSIM4v7pbigd = model->BSIM4v7pbigsd; } if (!model->BSIM4v7cigsdGiven && (model->BSIM4v7cigsGiven || model->BSIM4v7cigdGiven)) { if (!model->BSIM4v7pcigsGiven) model->BSIM4v7pcigs = 0.0; if (!model->BSIM4v7pcigdGiven) model->BSIM4v7pcigd = 0.0; } else { if (!model->BSIM4v7pcigsdGiven) model->BSIM4v7pcigsd = 0.0; model->BSIM4v7pcigs = model->BSIM4v7pcigd = model->BSIM4v7pcigsd; } if (!model->BSIM4v7paigbaccGiven) model->BSIM4v7paigbacc = 0.0; if (!model->BSIM4v7pbigbaccGiven) model->BSIM4v7pbigbacc = 0.0; if (!model->BSIM4v7pcigbaccGiven) model->BSIM4v7pcigbacc = 0.0; if (!model->BSIM4v7paigbinvGiven) model->BSIM4v7paigbinv = 0.0; if (!model->BSIM4v7pbigbinvGiven) model->BSIM4v7pbigbinv = 0.0; if (!model->BSIM4v7pcigbinvGiven) model->BSIM4v7pcigbinv = 0.0; if (!model->BSIM4v7pnigcGiven) model->BSIM4v7pnigc = 0.0; if (!model->BSIM4v7pnigbinvGiven) model->BSIM4v7pnigbinv = 0.0; if (!model->BSIM4v7pnigbaccGiven) model->BSIM4v7pnigbacc = 0.0; if (!model->BSIM4v7pntoxGiven) model->BSIM4v7pntox = 0.0; if (!model->BSIM4v7peigbinvGiven) model->BSIM4v7peigbinv = 0.0; if (!model->BSIM4v7ppigcdGiven) model->BSIM4v7ppigcd = 0.0; if (!model->BSIM4v7ppoxedgeGiven) model->BSIM4v7ppoxedge = 0.0; if (!model->BSIM4v7pxrcrg1Given) model->BSIM4v7pxrcrg1 = 0.0; if (!model->BSIM4v7pxrcrg2Given) model->BSIM4v7pxrcrg2 = 0.0; if (!model->BSIM4v7peuGiven) model->BSIM4v7peu = 0.0; if (!model->BSIM4v7pucsGiven) model->BSIM4v7pucs = 0.0; if (!model->BSIM4v7pvfbGiven) model->BSIM4v7pvfb = 0.0; if (!model->BSIM4v7plambdaGiven) model->BSIM4v7plambda = 0.0; if (!model->BSIM4v7pvtlGiven) model->BSIM4v7pvtl = 0.0; if (!model->BSIM4v7pxnGiven) model->BSIM4v7pxn = 0.0; if (!model->BSIM4v7pvfbsdoffGiven) model->BSIM4v7pvfbsdoff = 0.0; if (!model->BSIM4v7ptvfbsdoffGiven) model->BSIM4v7ptvfbsdoff = 0.0; if (!model->BSIM4v7ptvoffGiven) model->BSIM4v7ptvoff = 0.0; if (!model->BSIM4v7ptnfactorGiven) /* v4.7 temp dep of leakage current */ model->BSIM4v7ptnfactor = 0.0; if (!model->BSIM4v7pteta0Given) /* v4.7 temp dep of leakage current */ model->BSIM4v7pteta0 = 0.0; if (!model->BSIM4v7ptvoffcvGiven) /* v4.7 temp dep of leakage current */ model->BSIM4v7ptvoffcv = 0.0; if (!model->BSIM4v7pcgslGiven) model->BSIM4v7pcgsl = 0.0; if (!model->BSIM4v7pcgdlGiven) model->BSIM4v7pcgdl = 0.0; if (!model->BSIM4v7pckappasGiven) model->BSIM4v7pckappas = 0.0; if (!model->BSIM4v7pckappadGiven) model->BSIM4v7pckappad = 0.0; if (!model->BSIM4v7pcfGiven) model->BSIM4v7pcf = 0.0; if (!model->BSIM4v7pclcGiven) model->BSIM4v7pclc = 0.0; if (!model->BSIM4v7pcleGiven) model->BSIM4v7pcle = 0.0; if (!model->BSIM4v7pvfbcvGiven) model->BSIM4v7pvfbcv = 0.0; if (!model->BSIM4v7pacdeGiven) model->BSIM4v7pacde = 0.0; if (!model->BSIM4v7pmoinGiven) model->BSIM4v7pmoin = 0.0; if (!model->BSIM4v7pnoffGiven) model->BSIM4v7pnoff = 0.0; if (!model->BSIM4v7pvoffcvGiven) model->BSIM4v7pvoffcv = 0.0; if (!model->BSIM4v7gamma1Given) model->BSIM4v7gamma1 = 0.0; if (!model->BSIM4v7lgamma1Given) model->BSIM4v7lgamma1 = 0.0; if (!model->BSIM4v7wgamma1Given) model->BSIM4v7wgamma1 = 0.0; if (!model->BSIM4v7pgamma1Given) model->BSIM4v7pgamma1 = 0.0; if (!model->BSIM4v7gamma2Given) model->BSIM4v7gamma2 = 0.0; if (!model->BSIM4v7lgamma2Given) model->BSIM4v7lgamma2 = 0.0; if (!model->BSIM4v7wgamma2Given) model->BSIM4v7wgamma2 = 0.0; if (!model->BSIM4v7pgamma2Given) model->BSIM4v7pgamma2 = 0.0; if (!model->BSIM4v7vbxGiven) model->BSIM4v7vbx = 0.0; if (!model->BSIM4v7lvbxGiven) model->BSIM4v7lvbx = 0.0; if (!model->BSIM4v7wvbxGiven) model->BSIM4v7wvbx = 0.0; if (!model->BSIM4v7pvbxGiven) model->BSIM4v7pvbx = 0.0; /* unit degree celcius */ if (!model->BSIM4v7tnomGiven) model->BSIM4v7tnom = ckt->CKTnomTemp; if (!model->BSIM4v7LintGiven) model->BSIM4v7Lint = 0.0; if (!model->BSIM4v7LlGiven) model->BSIM4v7Ll = 0.0; if (!model->BSIM4v7LlcGiven) model->BSIM4v7Llc = model->BSIM4v7Ll; if (!model->BSIM4v7LlnGiven) model->BSIM4v7Lln = 1.0; if (!model->BSIM4v7LwGiven) model->BSIM4v7Lw = 0.0; if (!model->BSIM4v7LwcGiven) model->BSIM4v7Lwc = model->BSIM4v7Lw; if (!model->BSIM4v7LwnGiven) model->BSIM4v7Lwn = 1.0; if (!model->BSIM4v7LwlGiven) model->BSIM4v7Lwl = 0.0; if (!model->BSIM4v7LwlcGiven) model->BSIM4v7Lwlc = model->BSIM4v7Lwl; if (!model->BSIM4v7LminGiven) model->BSIM4v7Lmin = 0.0; if (!model->BSIM4v7LmaxGiven) model->BSIM4v7Lmax = 1.0; if (!model->BSIM4v7WintGiven) model->BSIM4v7Wint = 0.0; if (!model->BSIM4v7WlGiven) model->BSIM4v7Wl = 0.0; if (!model->BSIM4v7WlcGiven) model->BSIM4v7Wlc = model->BSIM4v7Wl; if (!model->BSIM4v7WlnGiven) model->BSIM4v7Wln = 1.0; if (!model->BSIM4v7WwGiven) model->BSIM4v7Ww = 0.0; if (!model->BSIM4v7WwcGiven) model->BSIM4v7Wwc = model->BSIM4v7Ww; if (!model->BSIM4v7WwnGiven) model->BSIM4v7Wwn = 1.0; if (!model->BSIM4v7WwlGiven) model->BSIM4v7Wwl = 0.0; if (!model->BSIM4v7WwlcGiven) model->BSIM4v7Wwlc = model->BSIM4v7Wwl; if (!model->BSIM4v7WminGiven) model->BSIM4v7Wmin = 0.0; if (!model->BSIM4v7WmaxGiven) model->BSIM4v7Wmax = 1.0; if (!model->BSIM4v7dwcGiven) model->BSIM4v7dwc = model->BSIM4v7Wint; if (!model->BSIM4v7dlcGiven) model->BSIM4v7dlc = model->BSIM4v7Lint; if (!model->BSIM4v7xlGiven) model->BSIM4v7xl = 0.0; if (!model->BSIM4v7xwGiven) model->BSIM4v7xw = 0.0; if (!model->BSIM4v7dlcigGiven) model->BSIM4v7dlcig = model->BSIM4v7Lint; if (!model->BSIM4v7dlcigdGiven) { if (model->BSIM4v7dlcigGiven) model->BSIM4v7dlcigd = model->BSIM4v7dlcig; else model->BSIM4v7dlcigd = model->BSIM4v7Lint; } if (!model->BSIM4v7dwjGiven) model->BSIM4v7dwj = model->BSIM4v7dwc; if (!model->BSIM4v7cfGiven) model->BSIM4v7cf = 2.0 * model->BSIM4v7epsrox * EPS0 / PI * log(1.0 + 0.4e-6 / model->BSIM4v7toxe); if (!model->BSIM4v7xpartGiven) model->BSIM4v7xpart = 0.0; if (!model->BSIM4v7sheetResistanceGiven) model->BSIM4v7sheetResistance = 0.0; if (!model->BSIM4v7SunitAreaJctCapGiven) model->BSIM4v7SunitAreaJctCap = 5.0E-4; if (!model->BSIM4v7DunitAreaJctCapGiven) model->BSIM4v7DunitAreaJctCap = model->BSIM4v7SunitAreaJctCap; if (!model->BSIM4v7SunitLengthSidewallJctCapGiven) model->BSIM4v7SunitLengthSidewallJctCap = 5.0E-10; if (!model->BSIM4v7DunitLengthSidewallJctCapGiven) model->BSIM4v7DunitLengthSidewallJctCap = model->BSIM4v7SunitLengthSidewallJctCap; if (!model->BSIM4v7SunitLengthGateSidewallJctCapGiven) model->BSIM4v7SunitLengthGateSidewallJctCap = model->BSIM4v7SunitLengthSidewallJctCap ; if (!model->BSIM4v7DunitLengthGateSidewallJctCapGiven) model->BSIM4v7DunitLengthGateSidewallJctCap = model->BSIM4v7SunitLengthGateSidewallJctCap; if (!model->BSIM4v7SjctSatCurDensityGiven) model->BSIM4v7SjctSatCurDensity = 1.0E-4; if (!model->BSIM4v7DjctSatCurDensityGiven) model->BSIM4v7DjctSatCurDensity = model->BSIM4v7SjctSatCurDensity; if (!model->BSIM4v7SjctSidewallSatCurDensityGiven) model->BSIM4v7SjctSidewallSatCurDensity = 0.0; if (!model->BSIM4v7DjctSidewallSatCurDensityGiven) model->BSIM4v7DjctSidewallSatCurDensity = model->BSIM4v7SjctSidewallSatCurDensity; if (!model->BSIM4v7SjctGateSidewallSatCurDensityGiven) model->BSIM4v7SjctGateSidewallSatCurDensity = 0.0; if (!model->BSIM4v7DjctGateSidewallSatCurDensityGiven) model->BSIM4v7DjctGateSidewallSatCurDensity = model->BSIM4v7SjctGateSidewallSatCurDensity; if (!model->BSIM4v7SbulkJctPotentialGiven) model->BSIM4v7SbulkJctPotential = 1.0; if (!model->BSIM4v7DbulkJctPotentialGiven) model->BSIM4v7DbulkJctPotential = model->BSIM4v7SbulkJctPotential; if (!model->BSIM4v7SsidewallJctPotentialGiven) model->BSIM4v7SsidewallJctPotential = 1.0; if (!model->BSIM4v7DsidewallJctPotentialGiven) model->BSIM4v7DsidewallJctPotential = model->BSIM4v7SsidewallJctPotential; if (!model->BSIM4v7SGatesidewallJctPotentialGiven) model->BSIM4v7SGatesidewallJctPotential = model->BSIM4v7SsidewallJctPotential; if (!model->BSIM4v7DGatesidewallJctPotentialGiven) model->BSIM4v7DGatesidewallJctPotential = model->BSIM4v7SGatesidewallJctPotential; if (!model->BSIM4v7SbulkJctBotGradingCoeffGiven) model->BSIM4v7SbulkJctBotGradingCoeff = 0.5; if (!model->BSIM4v7DbulkJctBotGradingCoeffGiven) model->BSIM4v7DbulkJctBotGradingCoeff = model->BSIM4v7SbulkJctBotGradingCoeff; if (!model->BSIM4v7SbulkJctSideGradingCoeffGiven) model->BSIM4v7SbulkJctSideGradingCoeff = 0.33; if (!model->BSIM4v7DbulkJctSideGradingCoeffGiven) model->BSIM4v7DbulkJctSideGradingCoeff = model->BSIM4v7SbulkJctSideGradingCoeff; if (!model->BSIM4v7SbulkJctGateSideGradingCoeffGiven) model->BSIM4v7SbulkJctGateSideGradingCoeff = model->BSIM4v7SbulkJctSideGradingCoeff; if (!model->BSIM4v7DbulkJctGateSideGradingCoeffGiven) model->BSIM4v7DbulkJctGateSideGradingCoeff = model->BSIM4v7SbulkJctGateSideGradingCoeff; if (!model->BSIM4v7SjctEmissionCoeffGiven) model->BSIM4v7SjctEmissionCoeff = 1.0; if (!model->BSIM4v7DjctEmissionCoeffGiven) model->BSIM4v7DjctEmissionCoeff = model->BSIM4v7SjctEmissionCoeff; if (!model->BSIM4v7SjctTempExponentGiven) model->BSIM4v7SjctTempExponent = 3.0; if (!model->BSIM4v7DjctTempExponentGiven) model->BSIM4v7DjctTempExponent = model->BSIM4v7SjctTempExponent; if (!model->BSIM4v7jtssGiven) model->BSIM4v7jtss = 0.0; if (!model->BSIM4v7jtsdGiven) model->BSIM4v7jtsd = model->BSIM4v7jtss; if (!model->BSIM4v7jtsswsGiven) model->BSIM4v7jtssws = 0.0; if (!model->BSIM4v7jtsswdGiven) model->BSIM4v7jtsswd = model->BSIM4v7jtssws; if (!model->BSIM4v7jtsswgsGiven) model->BSIM4v7jtsswgs = 0.0; if (!model->BSIM4v7jtsswgdGiven) model->BSIM4v7jtsswgd = model->BSIM4v7jtsswgs; if (!model->BSIM4v7jtweffGiven) model->BSIM4v7jtweff = 0.0; if (!model->BSIM4v7njtsGiven) model->BSIM4v7njts = 20.0; if (!model->BSIM4v7njtsswGiven) model->BSIM4v7njtssw = 20.0; if (!model->BSIM4v7njtsswgGiven) model->BSIM4v7njtsswg = 20.0; if (!model->BSIM4v7njtsdGiven) { if (model->BSIM4v7njtsGiven) model->BSIM4v7njtsd = model->BSIM4v7njts; else model->BSIM4v7njtsd = 20.0; } if (!model->BSIM4v7njtsswdGiven) { if (model->BSIM4v7njtsswGiven) model->BSIM4v7njtsswd = model->BSIM4v7njtssw; else model->BSIM4v7njtsswd = 20.0; } if (!model->BSIM4v7njtsswgdGiven) { if (model->BSIM4v7njtsswgGiven) model->BSIM4v7njtsswgd = model->BSIM4v7njtsswg; else model->BSIM4v7njtsswgd = 20.0; } if (!model->BSIM4v7xtssGiven) model->BSIM4v7xtss = 0.02; if (!model->BSIM4v7xtsdGiven) model->BSIM4v7xtsd = model->BSIM4v7xtss; if (!model->BSIM4v7xtsswsGiven) model->BSIM4v7xtssws = 0.02; if (!model->BSIM4v7xtsswdGiven) model->BSIM4v7xtsswd = model->BSIM4v7xtssws; if (!model->BSIM4v7xtsswgsGiven) model->BSIM4v7xtsswgs = 0.02; if (!model->BSIM4v7xtsswgdGiven) model->BSIM4v7xtsswgd = model->BSIM4v7xtsswgs; if (!model->BSIM4v7tnjtsGiven) model->BSIM4v7tnjts = 0.0; if (!model->BSIM4v7tnjtsswGiven) model->BSIM4v7tnjtssw = 0.0; if (!model->BSIM4v7tnjtsswgGiven) model->BSIM4v7tnjtsswg = 0.0; if (!model->BSIM4v7tnjtsdGiven) { if (model->BSIM4v7tnjtsGiven) model->BSIM4v7tnjtsd = model->BSIM4v7tnjts; else model->BSIM4v7tnjtsd = 0.0; } if (!model->BSIM4v7tnjtsswdGiven) { if (model->BSIM4v7tnjtsswGiven) model->BSIM4v7tnjtsswd = model->BSIM4v7tnjtssw; else model->BSIM4v7tnjtsswd = 0.0; } if (!model->BSIM4v7tnjtsswgdGiven) { if (model->BSIM4v7tnjtsswgGiven) model->BSIM4v7tnjtsswgd = model->BSIM4v7tnjtsswg; else model->BSIM4v7tnjtsswgd = 0.0; } if (!model->BSIM4v7vtssGiven) model->BSIM4v7vtss = 10.0; if (!model->BSIM4v7vtsdGiven) model->BSIM4v7vtsd = model->BSIM4v7vtss; if (!model->BSIM4v7vtsswsGiven) model->BSIM4v7vtssws = 10.0; if (!model->BSIM4v7vtsswdGiven) model->BSIM4v7vtsswd = model->BSIM4v7vtssws; if (!model->BSIM4v7vtsswgsGiven) model->BSIM4v7vtsswgs = 10.0; if (!model->BSIM4v7vtsswgdGiven) model->BSIM4v7vtsswgd = model->BSIM4v7vtsswgs; if (!model->BSIM4v7oxideTrapDensityAGiven) { if (model->BSIM4v7type == NMOS) model->BSIM4v7oxideTrapDensityA = 6.25e41; else model->BSIM4v7oxideTrapDensityA= 6.188e40; } if (!model->BSIM4v7oxideTrapDensityBGiven) { if (model->BSIM4v7type == NMOS) model->BSIM4v7oxideTrapDensityB = 3.125e26; else model->BSIM4v7oxideTrapDensityB = 1.5e25; } if (!model->BSIM4v7oxideTrapDensityCGiven) model->BSIM4v7oxideTrapDensityC = 8.75e9; if (!model->BSIM4v7emGiven) model->BSIM4v7em = 4.1e7; /* V/m */ if (!model->BSIM4v7efGiven) model->BSIM4v7ef = 1.0; if (!model->BSIM4v7afGiven) model->BSIM4v7af = 1.0; if (!model->BSIM4v7kfGiven) model->BSIM4v7kf = 0.0; if (!model->BSIM4v7vgsMaxGiven) model->BSIM4v7vgsMax = 1e99; if (!model->BSIM4v7vgdMaxGiven) model->BSIM4v7vgdMax = 1e99; if (!model->BSIM4v7vgbMaxGiven) model->BSIM4v7vgbMax = 1e99; if (!model->BSIM4v7vdsMaxGiven) model->BSIM4v7vdsMax = 1e99; if (!model->BSIM4v7vbsMaxGiven) model->BSIM4v7vbsMax = 1e99; if (!model->BSIM4v7vbdMaxGiven) model->BSIM4v7vbdMax = 1e99; if (!model->BSIM4v7vgsrMaxGiven) model->BSIM4v7vgsrMax = 1e99; if (!model->BSIM4v7vgdrMaxGiven) model->BSIM4v7vgdrMax = 1e99; if (!model->BSIM4v7vgbrMaxGiven) model->BSIM4v7vgbrMax = 1e99; if (!model->BSIM4v7vbsrMaxGiven) model->BSIM4v7vbsrMax = 1e99; if (!model->BSIM4v7vbdrMaxGiven) model->BSIM4v7vbdrMax = 1e99; /* stress effect */ if (!model->BSIM4v7sarefGiven) model->BSIM4v7saref = 1e-6; /* m */ if (!model->BSIM4v7sbrefGiven) model->BSIM4v7sbref = 1e-6; /* m */ if (!model->BSIM4v7wlodGiven) model->BSIM4v7wlod = 0; /* m */ if (!model->BSIM4v7ku0Given) model->BSIM4v7ku0 = 0; /* 1/m */ if (!model->BSIM4v7kvsatGiven) model->BSIM4v7kvsat = 0; if (!model->BSIM4v7kvth0Given) /* m */ model->BSIM4v7kvth0 = 0; if (!model->BSIM4v7tku0Given) model->BSIM4v7tku0 = 0; if (!model->BSIM4v7llodku0Given) model->BSIM4v7llodku0 = 0; if (!model->BSIM4v7wlodku0Given) model->BSIM4v7wlodku0 = 0; if (!model->BSIM4v7llodvthGiven) model->BSIM4v7llodvth = 0; if (!model->BSIM4v7wlodvthGiven) model->BSIM4v7wlodvth = 0; if (!model->BSIM4v7lku0Given) model->BSIM4v7lku0 = 0; if (!model->BSIM4v7wku0Given) model->BSIM4v7wku0 = 0; if (!model->BSIM4v7pku0Given) model->BSIM4v7pku0 = 0; if (!model->BSIM4v7lkvth0Given) model->BSIM4v7lkvth0 = 0; if (!model->BSIM4v7wkvth0Given) model->BSIM4v7wkvth0 = 0; if (!model->BSIM4v7pkvth0Given) model->BSIM4v7pkvth0 = 0; if (!model->BSIM4v7stk2Given) model->BSIM4v7stk2 = 0; if (!model->BSIM4v7lodk2Given) model->BSIM4v7lodk2 = 1.0; if (!model->BSIM4v7steta0Given) model->BSIM4v7steta0 = 0; if (!model->BSIM4v7lodeta0Given) model->BSIM4v7lodeta0 = 1.0; /* Well Proximity Effect */ if (!model->BSIM4v7webGiven) model->BSIM4v7web = 0.0; if (!model->BSIM4v7wecGiven) model->BSIM4v7wec = 0.0; if (!model->BSIM4v7kvth0weGiven) model->BSIM4v7kvth0we = 0.0; if (!model->BSIM4v7k2weGiven) model->BSIM4v7k2we = 0.0; if (!model->BSIM4v7ku0weGiven) model->BSIM4v7ku0we = 0.0; if (!model->BSIM4v7screfGiven) model->BSIM4v7scref = 1.0E-6; /* m */ if (!model->BSIM4v7wpemodGiven) model->BSIM4v7wpemod = 0; else if ((model->BSIM4v7wpemod != 0) && (model->BSIM4v7wpemod != 1)) { model->BSIM4v7wpemod = 0; printf("Warning: wpemod has been set to its default value: 0.\n"); } if (!model->BSIM4v7lkvth0weGiven) model->BSIM4v7lkvth0we = 0; if (!model->BSIM4v7lk2weGiven) model->BSIM4v7lk2we = 0; if (!model->BSIM4v7lku0weGiven) model->BSIM4v7lku0we = 0; if (!model->BSIM4v7wkvth0weGiven) model->BSIM4v7wkvth0we = 0; if (!model->BSIM4v7wk2weGiven) model->BSIM4v7wk2we = 0; if (!model->BSIM4v7wku0weGiven) model->BSIM4v7wku0we = 0; if (!model->BSIM4v7pkvth0weGiven) model->BSIM4v7pkvth0we = 0; if (!model->BSIM4v7pk2weGiven) model->BSIM4v7pk2we = 0; if (!model->BSIM4v7pku0weGiven) model->BSIM4v7pku0we = 0; DMCGeff = model->BSIM4v7dmcg - model->BSIM4v7dmcgt; DMCIeff = model->BSIM4v7dmci; DMDGeff = model->BSIM4v7dmdg - model->BSIM4v7dmcgt; /* * End processing models and begin to loop * through all the instances of the model */ for (here = BSIM4v7instances(model); here != NULL ; here=BSIM4v7nextInstance(here)) { /* allocate a chunk of the state vector */ here->BSIM4v7states = *states; *states += BSIM4v7numStates; /* perform the parameter defaulting */ if (!here->BSIM4v7lGiven) here->BSIM4v7l = 5.0e-6; if (!here->BSIM4v7wGiven) here->BSIM4v7w = 5.0e-6; if (!here->BSIM4v7mGiven) here->BSIM4v7m = 1.0; if (!here->BSIM4v7nfGiven) here->BSIM4v7nf = 1.0; if (!here->BSIM4v7minGiven) here->BSIM4v7min = 0; /* integer */ if (!here->BSIM4v7icVDSGiven) here->BSIM4v7icVDS = 0.0; if (!here->BSIM4v7icVGSGiven) here->BSIM4v7icVGS = 0.0; if (!here->BSIM4v7icVBSGiven) here->BSIM4v7icVBS = 0.0; if (!here->BSIM4v7drainAreaGiven) here->BSIM4v7drainArea = 0.0; if (!here->BSIM4v7drainPerimeterGiven) here->BSIM4v7drainPerimeter = 0.0; if (!here->BSIM4v7drainSquaresGiven) here->BSIM4v7drainSquares = 1.0; if (!here->BSIM4v7sourceAreaGiven) here->BSIM4v7sourceArea = 0.0; if (!here->BSIM4v7sourcePerimeterGiven) here->BSIM4v7sourcePerimeter = 0.0; if (!here->BSIM4v7sourceSquaresGiven) here->BSIM4v7sourceSquares = 1.0; if (!here->BSIM4v7rbdbGiven) here->BSIM4v7rbdb = model->BSIM4v7rbdb; /* in ohm */ if (!here->BSIM4v7rbsbGiven) here->BSIM4v7rbsb = model->BSIM4v7rbsb; if (!here->BSIM4v7rbpbGiven) here->BSIM4v7rbpb = model->BSIM4v7rbpb; if (!here->BSIM4v7rbpsGiven) here->BSIM4v7rbps = model->BSIM4v7rbps; if (!here->BSIM4v7rbpdGiven) here->BSIM4v7rbpd = model->BSIM4v7rbpd; if (!here->BSIM4v7delvtoGiven) here->BSIM4v7delvto = 0.0; if (!here->BSIM4v7mulu0Given) here->BSIM4v7mulu0 = 1.0; if (!here->BSIM4v7xgwGiven) here->BSIM4v7xgw = model->BSIM4v7xgw; if (!here->BSIM4v7ngconGiven) here->BSIM4v7ngcon = model->BSIM4v7ngcon; /* Process instance model selectors, some * may override their global counterparts */ if (!here->BSIM4v7rbodyModGiven) here->BSIM4v7rbodyMod = model->BSIM4v7rbodyMod; else if ((here->BSIM4v7rbodyMod != 0) && (here->BSIM4v7rbodyMod != 1) && (here->BSIM4v7rbodyMod != 2)) { here->BSIM4v7rbodyMod = model->BSIM4v7rbodyMod; printf("Warning: rbodyMod has been set to its global value %d.\n", model->BSIM4v7rbodyMod); } if (!here->BSIM4v7rgateModGiven) here->BSIM4v7rgateMod = model->BSIM4v7rgateMod; else if ((here->BSIM4v7rgateMod != 0) && (here->BSIM4v7rgateMod != 1) && (here->BSIM4v7rgateMod != 2) && (here->BSIM4v7rgateMod != 3)) { here->BSIM4v7rgateMod = model->BSIM4v7rgateMod; printf("Warning: rgateMod has been set to its global value %d.\n", model->BSIM4v7rgateMod); } if (!here->BSIM4v7geoModGiven) here->BSIM4v7geoMod = model->BSIM4v7geoMod; if (!here->BSIM4v7rgeoModGiven) here->BSIM4v7rgeoMod = model->BSIM4v7rgeoMod; else if ((here->BSIM4v7rgeoMod != 0) && (here->BSIM4v7rgeoMod != 1)) { here->BSIM4v7rgeoMod = model->BSIM4v7rgeoMod; printf("Warning: rgeoMod has been set to its global value %d.\n", model->BSIM4v7rgeoMod); } if (!here->BSIM4v7trnqsModGiven) here->BSIM4v7trnqsMod = model->BSIM4v7trnqsMod; else if ((here->BSIM4v7trnqsMod != 0) && (here->BSIM4v7trnqsMod != 1)) { here->BSIM4v7trnqsMod = model->BSIM4v7trnqsMod; printf("Warning: trnqsMod has been set to its global value %d.\n", model->BSIM4v7trnqsMod); } if (!here->BSIM4v7acnqsModGiven) here->BSIM4v7acnqsMod = model->BSIM4v7acnqsMod; else if ((here->BSIM4v7acnqsMod != 0) && (here->BSIM4v7acnqsMod != 1)) { here->BSIM4v7acnqsMod = model->BSIM4v7acnqsMod; printf("Warning: acnqsMod has been set to its global value %d.\n", model->BSIM4v7acnqsMod); } /* stress effect */ if (!here->BSIM4v7saGiven) here->BSIM4v7sa = 0.0; if (!here->BSIM4v7sbGiven) here->BSIM4v7sb = 0.0; if (!here->BSIM4v7sdGiven) here->BSIM4v7sd = 2 * model->BSIM4v7dmcg; /* Well Proximity Effect */ if (!here->BSIM4v7scaGiven) here->BSIM4v7sca = 0.0; if (!here->BSIM4v7scbGiven) here->BSIM4v7scb = 0.0; if (!here->BSIM4v7sccGiven) here->BSIM4v7scc = 0.0; if (!here->BSIM4v7scGiven) here->BSIM4v7sc = 0.0; /* m */ /* process drain series resistance */ createNode = 0; if ( (model->BSIM4v7rdsMod != 0) || (model->BSIM4v7tnoiMod == 1 && noiseAnalGiven)) { createNode = 1; } else if (model->BSIM4v7sheetResistance > 0) { if (here->BSIM4v7drainSquaresGiven && here->BSIM4v7drainSquares > 0) { createNode = 1; } else if (!here->BSIM4v7drainSquaresGiven && (here->BSIM4v7rgeoMod != 0)) { BSIM4v7RdseffGeo(here->BSIM4v7nf*here->BSIM4v7m, here->BSIM4v7geoMod, here->BSIM4v7rgeoMod, here->BSIM4v7min, here->BSIM4v7w, model->BSIM4v7sheetResistance, DMCGeff, DMCIeff, DMDGeff, 0, &Rtot); if(Rtot > 0) createNode = 1; } } if ( createNode != 0 ) { if ( here->BSIM4v7dNodePrime == 0 ) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v7name,"drain"); if(error) return(error); here->BSIM4v7dNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->BSIM4v7dNodePrime = here->BSIM4v7dNode; } /* process source series resistance */ createNode = 0; if ( (model->BSIM4v7rdsMod != 0) || (model->BSIM4v7tnoiMod == 1 && noiseAnalGiven)) { createNode = 1; } else if (model->BSIM4v7sheetResistance > 0) { if (here->BSIM4v7sourceSquaresGiven && here->BSIM4v7sourceSquares > 0) { createNode = 1; } else if (!here->BSIM4v7sourceSquaresGiven && (here->BSIM4v7rgeoMod != 0)) { BSIM4v7RdseffGeo(here->BSIM4v7nf*here->BSIM4v7m, here->BSIM4v7geoMod, here->BSIM4v7rgeoMod, here->BSIM4v7min, here->BSIM4v7w, model->BSIM4v7sheetResistance, DMCGeff, DMCIeff, DMDGeff, 1, &Rtot); if(Rtot > 0) createNode = 1; } } if ( createNode != 0 ) { if ( here->BSIM4v7sNodePrime == 0 ) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v7name,"source"); if(error) return(error); here->BSIM4v7sNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else here->BSIM4v7sNodePrime = here->BSIM4v7sNode; if ( here->BSIM4v7rgateMod > 0 ) { if ( here->BSIM4v7gNodePrime == 0 ) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v7name,"gate"); if(error) return(error); here->BSIM4v7gNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,2,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else here->BSIM4v7gNodePrime = here->BSIM4v7gNodeExt; if ( here->BSIM4v7rgateMod == 3 ) { if ( here->BSIM4v7gNodeMid == 0 ) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v7name,"midgate"); if(error) return(error); here->BSIM4v7gNodeMid = tmp->number; } } else here->BSIM4v7gNodeMid = here->BSIM4v7gNodeExt; /* internal body nodes for body resistance model */ if ((here->BSIM4v7rbodyMod ==1) || (here->BSIM4v7rbodyMod ==2)) { if (here->BSIM4v7dbNode == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v7name,"dbody"); if(error) return(error); here->BSIM4v7dbNode = tmp->number; } if (here->BSIM4v7bNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v7name,"body"); if(error) return(error); here->BSIM4v7bNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,4,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } if (here->BSIM4v7sbNode == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v7name,"sbody"); if(error) return(error); here->BSIM4v7sbNode = tmp->number; } } else here->BSIM4v7dbNode = here->BSIM4v7bNodePrime = here->BSIM4v7sbNode = here->BSIM4v7bNode; /* NQS node */ if ( here->BSIM4v7trnqsMod ) { if ( here->BSIM4v7qNode == 0 ) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v7name,"charge"); if(error) return(error); here->BSIM4v7qNode = tmp->number; } } else here->BSIM4v7qNode = 0; /* set Sparse Matrix Pointers * macro to make elements with built-in out-of-memory test */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(BSIM4v7DPbpPtr, BSIM4v7dNodePrime, BSIM4v7bNodePrime); TSTALLOC(BSIM4v7GPbpPtr, BSIM4v7gNodePrime, BSIM4v7bNodePrime); TSTALLOC(BSIM4v7SPbpPtr, BSIM4v7sNodePrime, BSIM4v7bNodePrime); TSTALLOC(BSIM4v7BPdpPtr, BSIM4v7bNodePrime, BSIM4v7dNodePrime); TSTALLOC(BSIM4v7BPgpPtr, BSIM4v7bNodePrime, BSIM4v7gNodePrime); TSTALLOC(BSIM4v7BPspPtr, BSIM4v7bNodePrime, BSIM4v7sNodePrime); TSTALLOC(BSIM4v7BPbpPtr, BSIM4v7bNodePrime, BSIM4v7bNodePrime); TSTALLOC(BSIM4v7DdPtr, BSIM4v7dNode, BSIM4v7dNode); TSTALLOC(BSIM4v7GPgpPtr, BSIM4v7gNodePrime, BSIM4v7gNodePrime); TSTALLOC(BSIM4v7SsPtr, BSIM4v7sNode, BSIM4v7sNode); TSTALLOC(BSIM4v7DPdpPtr, BSIM4v7dNodePrime, BSIM4v7dNodePrime); TSTALLOC(BSIM4v7SPspPtr, BSIM4v7sNodePrime, BSIM4v7sNodePrime); TSTALLOC(BSIM4v7DdpPtr, BSIM4v7dNode, BSIM4v7dNodePrime); TSTALLOC(BSIM4v7GPdpPtr, BSIM4v7gNodePrime, BSIM4v7dNodePrime); TSTALLOC(BSIM4v7GPspPtr, BSIM4v7gNodePrime, BSIM4v7sNodePrime); TSTALLOC(BSIM4v7SspPtr, BSIM4v7sNode, BSIM4v7sNodePrime); TSTALLOC(BSIM4v7DPspPtr, BSIM4v7dNodePrime, BSIM4v7sNodePrime); TSTALLOC(BSIM4v7DPdPtr, BSIM4v7dNodePrime, BSIM4v7dNode); TSTALLOC(BSIM4v7DPgpPtr, BSIM4v7dNodePrime, BSIM4v7gNodePrime); TSTALLOC(BSIM4v7SPgpPtr, BSIM4v7sNodePrime, BSIM4v7gNodePrime); TSTALLOC(BSIM4v7SPsPtr, BSIM4v7sNodePrime, BSIM4v7sNode); TSTALLOC(BSIM4v7SPdpPtr, BSIM4v7sNodePrime, BSIM4v7dNodePrime); TSTALLOC(BSIM4v7QqPtr, BSIM4v7qNode, BSIM4v7qNode); TSTALLOC(BSIM4v7QbpPtr, BSIM4v7qNode, BSIM4v7bNodePrime) ; TSTALLOC(BSIM4v7QdpPtr, BSIM4v7qNode, BSIM4v7dNodePrime); TSTALLOC(BSIM4v7QspPtr, BSIM4v7qNode, BSIM4v7sNodePrime); TSTALLOC(BSIM4v7QgpPtr, BSIM4v7qNode, BSIM4v7gNodePrime); TSTALLOC(BSIM4v7DPqPtr, BSIM4v7dNodePrime, BSIM4v7qNode); TSTALLOC(BSIM4v7SPqPtr, BSIM4v7sNodePrime, BSIM4v7qNode); TSTALLOC(BSIM4v7GPqPtr, BSIM4v7gNodePrime, BSIM4v7qNode); if (here->BSIM4v7rgateMod != 0) { TSTALLOC(BSIM4v7GEgePtr, BSIM4v7gNodeExt, BSIM4v7gNodeExt); TSTALLOC(BSIM4v7GEgpPtr, BSIM4v7gNodeExt, BSIM4v7gNodePrime); TSTALLOC(BSIM4v7GPgePtr, BSIM4v7gNodePrime, BSIM4v7gNodeExt); TSTALLOC(BSIM4v7GEdpPtr, BSIM4v7gNodeExt, BSIM4v7dNodePrime); TSTALLOC(BSIM4v7GEspPtr, BSIM4v7gNodeExt, BSIM4v7sNodePrime); TSTALLOC(BSIM4v7GEbpPtr, BSIM4v7gNodeExt, BSIM4v7bNodePrime); TSTALLOC(BSIM4v7GMdpPtr, BSIM4v7gNodeMid, BSIM4v7dNodePrime); TSTALLOC(BSIM4v7GMgpPtr, BSIM4v7gNodeMid, BSIM4v7gNodePrime); TSTALLOC(BSIM4v7GMgmPtr, BSIM4v7gNodeMid, BSIM4v7gNodeMid); TSTALLOC(BSIM4v7GMgePtr, BSIM4v7gNodeMid, BSIM4v7gNodeExt); TSTALLOC(BSIM4v7GMspPtr, BSIM4v7gNodeMid, BSIM4v7sNodePrime); TSTALLOC(BSIM4v7GMbpPtr, BSIM4v7gNodeMid, BSIM4v7bNodePrime); TSTALLOC(BSIM4v7DPgmPtr, BSIM4v7dNodePrime, BSIM4v7gNodeMid); TSTALLOC(BSIM4v7GPgmPtr, BSIM4v7gNodePrime, BSIM4v7gNodeMid); TSTALLOC(BSIM4v7GEgmPtr, BSIM4v7gNodeExt, BSIM4v7gNodeMid); TSTALLOC(BSIM4v7SPgmPtr, BSIM4v7sNodePrime, BSIM4v7gNodeMid); TSTALLOC(BSIM4v7BPgmPtr, BSIM4v7bNodePrime, BSIM4v7gNodeMid); } if ((here->BSIM4v7rbodyMod ==1) || (here->BSIM4v7rbodyMod ==2)) { TSTALLOC(BSIM4v7DPdbPtr, BSIM4v7dNodePrime, BSIM4v7dbNode); TSTALLOC(BSIM4v7SPsbPtr, BSIM4v7sNodePrime, BSIM4v7sbNode); TSTALLOC(BSIM4v7DBdpPtr, BSIM4v7dbNode, BSIM4v7dNodePrime); TSTALLOC(BSIM4v7DBdbPtr, BSIM4v7dbNode, BSIM4v7dbNode); TSTALLOC(BSIM4v7DBbpPtr, BSIM4v7dbNode, BSIM4v7bNodePrime); TSTALLOC(BSIM4v7DBbPtr, BSIM4v7dbNode, BSIM4v7bNode); TSTALLOC(BSIM4v7BPdbPtr, BSIM4v7bNodePrime, BSIM4v7dbNode); TSTALLOC(BSIM4v7BPbPtr, BSIM4v7bNodePrime, BSIM4v7bNode); TSTALLOC(BSIM4v7BPsbPtr, BSIM4v7bNodePrime, BSIM4v7sbNode); TSTALLOC(BSIM4v7SBspPtr, BSIM4v7sbNode, BSIM4v7sNodePrime); TSTALLOC(BSIM4v7SBbpPtr, BSIM4v7sbNode, BSIM4v7bNodePrime); TSTALLOC(BSIM4v7SBbPtr, BSIM4v7sbNode, BSIM4v7bNode); TSTALLOC(BSIM4v7SBsbPtr, BSIM4v7sbNode, BSIM4v7sbNode); TSTALLOC(BSIM4v7BdbPtr, BSIM4v7bNode, BSIM4v7dbNode); TSTALLOC(BSIM4v7BbpPtr, BSIM4v7bNode, BSIM4v7bNodePrime); TSTALLOC(BSIM4v7BsbPtr, BSIM4v7bNode, BSIM4v7sbNode); TSTALLOC(BSIM4v7BbPtr, BSIM4v7bNode, BSIM4v7bNode); } if (model->BSIM4v7rdsMod) { TSTALLOC(BSIM4v7DgpPtr, BSIM4v7dNode, BSIM4v7gNodePrime); TSTALLOC(BSIM4v7DspPtr, BSIM4v7dNode, BSIM4v7sNodePrime); TSTALLOC(BSIM4v7DbpPtr, BSIM4v7dNode, BSIM4v7bNodePrime); TSTALLOC(BSIM4v7SdpPtr, BSIM4v7sNode, BSIM4v7dNodePrime); TSTALLOC(BSIM4v7SgpPtr, BSIM4v7sNode, BSIM4v7gNodePrime); TSTALLOC(BSIM4v7SbpPtr, BSIM4v7sNode, BSIM4v7bNodePrime); } } } #ifdef USE_OMP InstCount = 0; model = (BSIM4v7model*)inModel; /* loop through all the BSIM4v7 device models to count the number of instances */ for( ; model != NULL; model = BSIM4v7nextModel(model)) { /* loop through all the instances of the model */ for (here = BSIM4v7instances(model); here != NULL ; here=BSIM4v7nextInstance(here)) { InstCount++; } model->BSIM4v7InstCount = 0; model->BSIM4v7InstanceArray = NULL; } InstArray = TMALLOC(BSIM4v7instance*, InstCount); model = (BSIM4v7model*)inModel; /* store this in the first model only */ model->BSIM4v7InstCount = InstCount; model->BSIM4v7InstanceArray = InstArray; idx = 0; for( ; model != NULL; model = BSIM4v7nextModel(model)) { /* loop through all the instances of the model */ for (here = BSIM4v7instances(model); here != NULL ; here=BSIM4v7nextInstance(here)) { InstArray[idx] = here; idx++; } } #endif return(OK); } int BSIM4v7unsetup( GENmodel *inModel, CKTcircuit *ckt) { #ifndef HAS_BATCHSIM BSIM4v7model *model; BSIM4v7instance *here; #ifdef USE_OMP model = (BSIM4v7model*)inModel; tfree(model->BSIM4v7InstanceArray); #endif for (model = (BSIM4v7model *)inModel; model != NULL; model = BSIM4v7nextModel(model)) { for (here = BSIM4v7instances(model); here != NULL; here=BSIM4v7nextInstance(here)) { if (here->BSIM4v7qNode > 0) CKTdltNNum(ckt, here->BSIM4v7qNode); here->BSIM4v7qNode = 0; if (here->BSIM4v7sbNode > 0 && here->BSIM4v7sbNode != here->BSIM4v7bNode) CKTdltNNum(ckt, here->BSIM4v7sbNode); here->BSIM4v7sbNode = 0; if (here->BSIM4v7bNodePrime > 0 && here->BSIM4v7bNodePrime != here->BSIM4v7bNode) CKTdltNNum(ckt, here->BSIM4v7bNodePrime); here->BSIM4v7bNodePrime = 0; if (here->BSIM4v7dbNode > 0 && here->BSIM4v7dbNode != here->BSIM4v7bNode) CKTdltNNum(ckt, here->BSIM4v7dbNode); here->BSIM4v7dbNode = 0; if (here->BSIM4v7gNodeMid > 0 && here->BSIM4v7gNodeMid != here->BSIM4v7gNodeExt) CKTdltNNum(ckt, here->BSIM4v7gNodeMid); here->BSIM4v7gNodeMid = 0; if (here->BSIM4v7gNodePrime > 0 && here->BSIM4v7gNodePrime != here->BSIM4v7gNodeExt) CKTdltNNum(ckt, here->BSIM4v7gNodePrime); here->BSIM4v7gNodePrime = 0; if (here->BSIM4v7sNodePrime > 0 && here->BSIM4v7sNodePrime != here->BSIM4v7sNode) CKTdltNNum(ckt, here->BSIM4v7sNodePrime); here->BSIM4v7sNodePrime = 0; if (here->BSIM4v7dNodePrime > 0 && here->BSIM4v7dNodePrime != here->BSIM4v7dNode) CKTdltNNum(ckt, here->BSIM4v7dNodePrime); here->BSIM4v7dNodePrime = 0; } } #endif return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim4v7/b4v7acld.c0000644000175000017500000007200213546075722022231 0ustar carstencarsten/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4acld.c of BSIM4.7.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 10/05/2001. **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4v7def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4v7acLoad( GENmodel *inModel, CKTcircuit *ckt) { BSIM4v7model *model = (BSIM4v7model*)inModel; BSIM4v7instance *here; double gjbd, gjbs, geltd, gcrg, gcrgg, gcrgd, gcrgs, gcrgb; double xcbgb, xcbdb, xcbsb, xcbbb; double xcggbr, xcgdbr, xcgsbr, xcgbbr, xcggbi, xcgdbi, xcgsbi, xcgbbi; double Cggr, Cgdr, Cgsr, Cgbr, Cggi, Cgdi, Cgsi, Cgbi; double xcddbr, xcdgbr, xcdsbr, xcdbbr, xcsdbr, xcsgbr, xcssbr, xcsbbr; double xcddbi, xcdgbi, xcdsbi, xcdbbi, xcsdbi, xcsgbi, xcssbi, xcsbbi; double xcdbdb, xcsbsb=0.0, xcgmgmb=0.0, xcgmdb=0.0, xcgmsb=0.0, xcdgmb, xcsgmb; double xcgmbb=0.0, xcbgmb; double capbd, capbs, omega; double gstot, gstotd, gstotg, gstots, gstotb, gspr; double gdtot, gdtotd, gdtotg, gdtots, gdtotb, gdpr; double gIstotg, gIstotd, gIstots, gIstotb; double gIdtotg, gIdtotd, gIdtots, gIdtotb; double gIbtotg, gIbtotd, gIbtots, gIbtotb; double gIgtotg, gIgtotd, gIgtots, gIgtotb; double cgso, cgdo, cgbo; double gbspsp, gbbdp, gbbsp, gbspg, gbspb; double gbspdp, gbdpdp, gbdpg, gbdpb, gbdpsp; double T0=0.0, T1, T2, T3; double Csg, Csd, Css; double Cdgr, Cddr, Cdsr, Cdbr, Csgr, Csdr, Cssr, Csbr; double Cdgi, Cddi, Cdsi, Cdbi, Csgi, Csdi, Cssi, Csbi; double gmr, gmi, gmbsr, gmbsi, gdsr, gdsi; double FwdSumr, RevSumr, Gmr, Gmbsr; double FwdSumi, RevSumi, Gmi, Gmbsi; struct bsim4SizeDependParam *pParam; double ggidld, ggidlg, ggidlb, ggislg, ggislb, ggisls; double m; omega = ckt->CKTomega; for (; model != NULL; model = BSIM4v7nextModel(model)) { for (here = BSIM4v7instances(model); here!= NULL; here = BSIM4v7nextInstance(here)) { pParam = here->pParam; capbd = here->BSIM4v7capbd; capbs = here->BSIM4v7capbs; cgso = here->BSIM4v7cgso; cgdo = here->BSIM4v7cgdo; cgbo = pParam->BSIM4v7cgbo; Csd = -(here->BSIM4v7cddb + here->BSIM4v7cgdb + here->BSIM4v7cbdb); Csg = -(here->BSIM4v7cdgb + here->BSIM4v7cggb + here->BSIM4v7cbgb); Css = -(here->BSIM4v7cdsb + here->BSIM4v7cgsb + here->BSIM4v7cbsb); if (here->BSIM4v7acnqsMod) { T0 = omega * here->BSIM4v7taunet; T1 = T0 * T0; T2 = 1.0 / (1.0 + T1); T3 = T0 * T2; gmr = here->BSIM4v7gm * T2; gmbsr = here->BSIM4v7gmbs * T2; gdsr = here->BSIM4v7gds * T2; gmi = -here->BSIM4v7gm * T3; gmbsi = -here->BSIM4v7gmbs * T3; gdsi = -here->BSIM4v7gds * T3; Cddr = here->BSIM4v7cddb * T2; Cdgr = here->BSIM4v7cdgb * T2; Cdsr = here->BSIM4v7cdsb * T2; Cdbr = -(Cddr + Cdgr + Cdsr); /* WDLiu: Cxyi mulitplied by jomega below, and actually to be of conductance */ Cddi = here->BSIM4v7cddb * T3 * omega; Cdgi = here->BSIM4v7cdgb * T3 * omega; Cdsi = here->BSIM4v7cdsb * T3 * omega; Cdbi = -(Cddi + Cdgi + Cdsi); Csdr = Csd * T2; Csgr = Csg * T2; Cssr = Css * T2; Csbr = -(Csdr + Csgr + Cssr); Csdi = Csd * T3 * omega; Csgi = Csg * T3 * omega; Cssi = Css * T3 * omega; Csbi = -(Csdi + Csgi + Cssi); Cgdr = -(Cddr + Csdr + here->BSIM4v7cbdb); Cggr = -(Cdgr + Csgr + here->BSIM4v7cbgb); Cgsr = -(Cdsr + Cssr + here->BSIM4v7cbsb); Cgbr = -(Cgdr + Cggr + Cgsr); Cgdi = -(Cddi + Csdi); Cggi = -(Cdgi + Csgi); Cgsi = -(Cdsi + Cssi); Cgbi = -(Cgdi + Cggi + Cgsi); } else /* QS */ { gmr = here->BSIM4v7gm; gmbsr = here->BSIM4v7gmbs; gdsr = here->BSIM4v7gds; gmi = gmbsi = gdsi = 0.0; Cddr = here->BSIM4v7cddb; Cdgr = here->BSIM4v7cdgb; Cdsr = here->BSIM4v7cdsb; Cdbr = -(Cddr + Cdgr + Cdsr); Cddi = Cdgi = Cdsi = Cdbi = 0.0; Csdr = Csd; Csgr = Csg; Cssr = Css; Csbr = -(Csdr + Csgr + Cssr); Csdi = Csgi = Cssi = Csbi = 0.0; Cgdr = here->BSIM4v7cgdb; Cggr = here->BSIM4v7cggb; Cgsr = here->BSIM4v7cgsb; Cgbr = -(Cgdr + Cggr + Cgsr); Cgdi = Cggi = Cgsi = Cgbi = 0.0; } if (here->BSIM4v7mode >= 0) { Gmr = gmr; Gmbsr = gmbsr; FwdSumr = Gmr + Gmbsr; RevSumr = 0.0; Gmi = gmi; Gmbsi = gmbsi; FwdSumi = Gmi + Gmbsi; RevSumi = 0.0; gbbdp = -(here->BSIM4v7gbds); gbbsp = here->BSIM4v7gbds + here->BSIM4v7gbgs + here->BSIM4v7gbbs; gbdpg = here->BSIM4v7gbgs; gbdpdp = here->BSIM4v7gbds; gbdpb = here->BSIM4v7gbbs; gbdpsp = -(gbdpg + gbdpdp + gbdpb); gbspdp = 0.0; gbspg = 0.0; gbspb = 0.0; gbspsp = 0.0; if (model->BSIM4v7igcMod) { gIstotg = here->BSIM4v7gIgsg + here->BSIM4v7gIgcsg; gIstotd = here->BSIM4v7gIgcsd; gIstots = here->BSIM4v7gIgss + here->BSIM4v7gIgcss; gIstotb = here->BSIM4v7gIgcsb; gIdtotg = here->BSIM4v7gIgdg + here->BSIM4v7gIgcdg; gIdtotd = here->BSIM4v7gIgdd + here->BSIM4v7gIgcdd; gIdtots = here->BSIM4v7gIgcds; gIdtotb = here->BSIM4v7gIgcdb; } else { gIstotg = gIstotd = gIstots = gIstotb = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = 0.0; } if (model->BSIM4v7igbMod) { gIbtotg = here->BSIM4v7gIgbg; gIbtotd = here->BSIM4v7gIgbd; gIbtots = here->BSIM4v7gIgbs; gIbtotb = here->BSIM4v7gIgbb; } else gIbtotg = gIbtotd = gIbtots = gIbtotb = 0.0; if ((model->BSIM4v7igcMod != 0) || (model->BSIM4v7igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = 0.0; if (here->BSIM4v7rgateMod == 2) T0 = *(ckt->CKTstates[0] + here->BSIM4v7vges) - *(ckt->CKTstates[0] + here->BSIM4v7vgs); else if (here->BSIM4v7rgateMod == 3) T0 = *(ckt->CKTstates[0] + here->BSIM4v7vgms) - *(ckt->CKTstates[0] + here->BSIM4v7vgs); if (here->BSIM4v7rgateMod > 1) { gcrgd = here->BSIM4v7gcrgd * T0; gcrgg = here->BSIM4v7gcrgg * T0; gcrgs = here->BSIM4v7gcrgs * T0; gcrgb = here->BSIM4v7gcrgb * T0; gcrgg -= here->BSIM4v7gcrg; gcrg = here->BSIM4v7gcrg; } else gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; if (here->BSIM4v7rgateMod == 3) { xcgmgmb = (cgdo + cgso + pParam->BSIM4v7cgbo) * omega; xcgmdb = -cgdo * omega; xcgmsb = -cgso * omega; xcgmbb = -pParam->BSIM4v7cgbo * omega; xcdgmb = xcgmdb; xcsgmb = xcgmsb; xcbgmb = xcgmbb; xcggbr = Cggr * omega; xcgdbr = Cgdr * omega; xcgsbr = Cgsr * omega; xcgbbr = -(xcggbr + xcgdbr + xcgsbr); xcdgbr = Cdgr * omega; xcsgbr = Csgr * omega; xcbgb = here->BSIM4v7cbgb * omega; } else { xcggbr = (Cggr + cgdo + cgso + pParam->BSIM4v7cgbo ) * omega; xcgdbr = (Cgdr - cgdo) * omega; xcgsbr = (Cgsr - cgso) * omega; xcgbbr = -(xcggbr + xcgdbr + xcgsbr); xcdgbr = (Cdgr - cgdo) * omega; xcsgbr = (Csgr - cgso) * omega; xcbgb = (here->BSIM4v7cbgb - pParam->BSIM4v7cgbo) * omega; xcdgmb = xcsgmb = xcbgmb = 0.0; } xcddbr = (Cddr + here->BSIM4v7capbd + cgdo) * omega; xcdsbr = Cdsr * omega; xcsdbr = Csdr * omega; xcssbr = (here->BSIM4v7capbs + cgso + Cssr) * omega; if (!here->BSIM4v7rbodyMod) { xcdbbr = -(xcdgbr + xcddbr + xcdsbr + xcdgmb); xcsbbr = -(xcsgbr + xcsdbr + xcssbr + xcsgmb); xcbdb = (here->BSIM4v7cbdb - here->BSIM4v7capbd) * omega; xcbsb = (here->BSIM4v7cbsb - here->BSIM4v7capbs) * omega; xcdbdb = 0.0; } else { xcdbbr = Cdbr * omega; xcsbbr = -(xcsgbr + xcsdbr + xcssbr + xcsgmb) + here->BSIM4v7capbs * omega; xcbdb = here->BSIM4v7cbdb * omega; xcbsb = here->BSIM4v7cbsb * omega; xcdbdb = -here->BSIM4v7capbd * omega; xcsbsb = -here->BSIM4v7capbs * omega; } xcbbb = -(xcbdb + xcbgb + xcbsb + xcbgmb); xcdgbi = Cdgi; xcsgbi = Csgi; xcddbi = Cddi; xcdsbi = Cdsi; xcsdbi = Csdi; xcssbi = Cssi; xcdbbi = Cdbi; xcsbbi = Csbi; xcggbi = Cggi; xcgdbi = Cgdi; xcgsbi = Cgsi; xcgbbi = Cgbi; } else /* Reverse mode */ { Gmr = -gmr; Gmbsr = -gmbsr; FwdSumr = 0.0; RevSumr = -(Gmr + Gmbsr); Gmi = -gmi; Gmbsi = -gmbsi; FwdSumi = 0.0; RevSumi = -(Gmi + Gmbsi); gbbsp = -(here->BSIM4v7gbds); gbbdp = here->BSIM4v7gbds + here->BSIM4v7gbgs + here->BSIM4v7gbbs; gbdpg = 0.0; gbdpsp = 0.0; gbdpb = 0.0; gbdpdp = 0.0; gbspg = here->BSIM4v7gbgs; gbspsp = here->BSIM4v7gbds; gbspb = here->BSIM4v7gbbs; gbspdp = -(gbspg + gbspsp + gbspb); if (model->BSIM4v7igcMod) { gIstotg = here->BSIM4v7gIgsg + here->BSIM4v7gIgcdg; gIstotd = here->BSIM4v7gIgcds; gIstots = here->BSIM4v7gIgss + here->BSIM4v7gIgcdd; gIstotb = here->BSIM4v7gIgcdb; gIdtotg = here->BSIM4v7gIgdg + here->BSIM4v7gIgcsg; gIdtotd = here->BSIM4v7gIgdd + here->BSIM4v7gIgcss; gIdtots = here->BSIM4v7gIgcsd; gIdtotb = here->BSIM4v7gIgcsb; } else { gIstotg = gIstotd = gIstots = gIstotb = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = 0.0; } if (model->BSIM4v7igbMod) { gIbtotg = here->BSIM4v7gIgbg; gIbtotd = here->BSIM4v7gIgbs; gIbtots = here->BSIM4v7gIgbd; gIbtotb = here->BSIM4v7gIgbb; } else gIbtotg = gIbtotd = gIbtots = gIbtotb = 0.0; if ((model->BSIM4v7igcMod != 0) || (model->BSIM4v7igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = 0.0; if (here->BSIM4v7rgateMod == 2) T0 = *(ckt->CKTstates[0] + here->BSIM4v7vges) - *(ckt->CKTstates[0] + here->BSIM4v7vgs); else if (here->BSIM4v7rgateMod == 3) T0 = *(ckt->CKTstates[0] + here->BSIM4v7vgms) - *(ckt->CKTstates[0] + here->BSIM4v7vgs); if (here->BSIM4v7rgateMod > 1) { gcrgd = here->BSIM4v7gcrgs * T0; gcrgg = here->BSIM4v7gcrgg * T0; gcrgs = here->BSIM4v7gcrgd * T0; gcrgb = here->BSIM4v7gcrgb * T0; gcrgg -= here->BSIM4v7gcrg; gcrg = here->BSIM4v7gcrg; } else gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; if (here->BSIM4v7rgateMod == 3) { xcgmgmb = (cgdo + cgso + pParam->BSIM4v7cgbo) * omega; xcgmdb = -cgdo * omega; xcgmsb = -cgso * omega; xcgmbb = -pParam->BSIM4v7cgbo * omega; xcdgmb = xcgmdb; xcsgmb = xcgmsb; xcbgmb = xcgmbb; xcggbr = Cggr * omega; xcgdbr = Cgsr * omega; xcgsbr = Cgdr * omega; xcgbbr = -(xcggbr + xcgdbr + xcgsbr); xcdgbr = Csgr * omega; xcsgbr = Cdgr * omega; xcbgb = here->BSIM4v7cbgb * omega; } else { xcggbr = (Cggr + cgdo + cgso + pParam->BSIM4v7cgbo ) * omega; xcgdbr = (Cgsr - cgdo) * omega; xcgsbr = (Cgdr - cgso) * omega; xcgbbr = -(xcggbr + xcgdbr + xcgsbr); xcdgbr = (Csgr - cgdo) * omega; xcsgbr = (Cdgr - cgso) * omega; xcbgb = (here->BSIM4v7cbgb - pParam->BSIM4v7cgbo) * omega; xcdgmb = xcsgmb = xcbgmb = 0.0; } xcddbr = (here->BSIM4v7capbd + cgdo + Cssr) * omega; xcdsbr = Csdr * omega; xcsdbr = Cdsr * omega; xcssbr = (Cddr + here->BSIM4v7capbs + cgso) * omega; if (!here->BSIM4v7rbodyMod) { xcdbbr = -(xcdgbr + xcddbr + xcdsbr + xcdgmb); xcsbbr = -(xcsgbr + xcsdbr + xcssbr + xcsgmb); xcbdb = (here->BSIM4v7cbsb - here->BSIM4v7capbd) * omega; xcbsb = (here->BSIM4v7cbdb - here->BSIM4v7capbs) * omega; xcdbdb = 0.0; } else { xcdbbr = -(xcdgbr + xcddbr + xcdsbr + xcdgmb) + here->BSIM4v7capbd * omega; xcsbbr = Cdbr * omega; xcbdb = here->BSIM4v7cbsb * omega; xcbsb = here->BSIM4v7cbdb * omega; xcdbdb = -here->BSIM4v7capbd * omega; xcsbsb = -here->BSIM4v7capbs * omega; } xcbbb = -(xcbgb + xcbdb + xcbsb + xcbgmb); xcdgbi = Csgi; xcsgbi = Cdgi; xcddbi = Cssi; xcdsbi = Csdi; xcsdbi = Cdsi; xcssbi = Cddi; xcdbbi = Csbi; xcsbbi = Cdbi; xcggbi = Cggi; xcgdbi = Cgsi; xcgsbi = Cgdi; xcgbbi = Cgbi; } if (model->BSIM4v7rdsMod == 1) { gstot = here->BSIM4v7gstot; gstotd = here->BSIM4v7gstotd; gstotg = here->BSIM4v7gstotg; gstots = here->BSIM4v7gstots - gstot; gstotb = here->BSIM4v7gstotb; gdtot = here->BSIM4v7gdtot; gdtotd = here->BSIM4v7gdtotd - gdtot; gdtotg = here->BSIM4v7gdtotg; gdtots = here->BSIM4v7gdtots; gdtotb = here->BSIM4v7gdtotb; } else { gstot = gstotd = gstotg = gstots = gstotb = 0.0; gdtot = gdtotd = gdtotg = gdtots = gdtotb = 0.0; } /* * Loading AC matrix */ m = here->BSIM4v7m; if (!model->BSIM4v7rdsMod) { gdpr = here->BSIM4v7drainConductance; gspr = here->BSIM4v7sourceConductance; } else gdpr = gspr = 0.0; if (!here->BSIM4v7rbodyMod) { gjbd = here->BSIM4v7gbd; gjbs = here->BSIM4v7gbs; } else gjbd = gjbs = 0.0; geltd = here->BSIM4v7grgeltd; if (here->BSIM4v7rgateMod == 1) { *(here->BSIM4v7GEgePtr) += m * geltd; *(here->BSIM4v7GPgePtr) -= m * geltd; *(here->BSIM4v7GEgpPtr) -= m * geltd; *(here->BSIM4v7GPgpPtr +1) += m * xcggbr; *(here->BSIM4v7GPgpPtr) += m * (geltd + xcggbi + gIgtotg); *(here->BSIM4v7GPdpPtr +1) += m * xcgdbr; *(here->BSIM4v7GPdpPtr) += m * (xcgdbi + gIgtotd); *(here->BSIM4v7GPspPtr +1) += m * xcgsbr; *(here->BSIM4v7GPspPtr) += m * (xcgsbi + gIgtots); *(here->BSIM4v7GPbpPtr +1) += m * xcgbbr; *(here->BSIM4v7GPbpPtr) += m * (xcgbbi + gIgtotb); } /* WDLiu: gcrg already subtracted from all gcrgg below */ else if (here->BSIM4v7rgateMod == 2) { *(here->BSIM4v7GEgePtr) += m * gcrg; *(here->BSIM4v7GEgpPtr) += m * gcrgg; *(here->BSIM4v7GEdpPtr) += m * gcrgd; *(here->BSIM4v7GEspPtr) += m * gcrgs; *(here->BSIM4v7GEbpPtr) += m * gcrgb; *(here->BSIM4v7GPgePtr) -= m * gcrg; *(here->BSIM4v7GPgpPtr +1) += m * xcggbr; *(here->BSIM4v7GPgpPtr) -= m * (gcrgg - xcggbi - gIgtotg); *(here->BSIM4v7GPdpPtr +1) += m * xcgdbr; *(here->BSIM4v7GPdpPtr) -= m * (gcrgd - xcgdbi - gIgtotd); *(here->BSIM4v7GPspPtr +1) += m * xcgsbr; *(here->BSIM4v7GPspPtr) -= m * (gcrgs - xcgsbi - gIgtots); *(here->BSIM4v7GPbpPtr +1) += m * xcgbbr; *(here->BSIM4v7GPbpPtr) -= m * (gcrgb - xcgbbi - gIgtotb); } else if (here->BSIM4v7rgateMod == 3) { *(here->BSIM4v7GEgePtr) += m * geltd; *(here->BSIM4v7GEgmPtr) -= m * geltd; *(here->BSIM4v7GMgePtr) -= m * geltd; *(here->BSIM4v7GMgmPtr) += m * (geltd + gcrg); *(here->BSIM4v7GMgmPtr +1) += m * xcgmgmb; *(here->BSIM4v7GMdpPtr) += m * gcrgd; *(here->BSIM4v7GMdpPtr +1) += m * xcgmdb; *(here->BSIM4v7GMgpPtr) += m * gcrgg; *(here->BSIM4v7GMspPtr) += m * gcrgs; *(here->BSIM4v7GMspPtr +1) += m * xcgmsb; *(here->BSIM4v7GMbpPtr) += m * gcrgb; *(here->BSIM4v7GMbpPtr +1) += m * xcgmbb; *(here->BSIM4v7DPgmPtr +1) += m * xcdgmb; *(here->BSIM4v7GPgmPtr) -= m * gcrg; *(here->BSIM4v7SPgmPtr +1) += m * xcsgmb; *(here->BSIM4v7BPgmPtr +1) += m * xcbgmb; *(here->BSIM4v7GPgpPtr) -= m * (gcrgg - xcggbi - gIgtotg); *(here->BSIM4v7GPgpPtr +1) += m * xcggbr; *(here->BSIM4v7GPdpPtr) -= m * (gcrgd - xcgdbi - gIgtotd); *(here->BSIM4v7GPdpPtr +1) += m * xcgdbr; *(here->BSIM4v7GPspPtr) -= m * (gcrgs - xcgsbi - gIgtots); *(here->BSIM4v7GPspPtr +1) += m * xcgsbr; *(here->BSIM4v7GPbpPtr) -= m * (gcrgb - xcgbbi - gIgtotb); *(here->BSIM4v7GPbpPtr +1) += m * xcgbbr; } else { *(here->BSIM4v7GPgpPtr +1) += m * xcggbr; *(here->BSIM4v7GPgpPtr) += m * (xcggbi + gIgtotg); *(here->BSIM4v7GPdpPtr +1) += m * xcgdbr; *(here->BSIM4v7GPdpPtr) += m * (xcgdbi + gIgtotd); *(here->BSIM4v7GPspPtr +1) += m * xcgsbr; *(here->BSIM4v7GPspPtr) += m * (xcgsbi + gIgtots); *(here->BSIM4v7GPbpPtr +1) += m * xcgbbr; *(here->BSIM4v7GPbpPtr) += m * (xcgbbi + gIgtotb); } if (model->BSIM4v7rdsMod) { (*(here->BSIM4v7DgpPtr) += m * gdtotg); (*(here->BSIM4v7DspPtr) += m * gdtots); (*(here->BSIM4v7DbpPtr) += m * gdtotb); (*(here->BSIM4v7SdpPtr) += m * gstotd); (*(here->BSIM4v7SgpPtr) += m * gstotg); (*(here->BSIM4v7SbpPtr) += m * gstotb); } *(here->BSIM4v7DPdpPtr +1) += m * (xcddbr + gdsi + RevSumi); *(here->BSIM4v7DPdpPtr) += m * (gdpr + xcddbi + gdsr + here->BSIM4v7gbd - gdtotd + RevSumr + gbdpdp - gIdtotd); *(here->BSIM4v7DPdPtr) -= m * (gdpr + gdtot); *(here->BSIM4v7DPgpPtr +1) += m * (xcdgbr + Gmi); *(here->BSIM4v7DPgpPtr) += m * (Gmr + xcdgbi - gdtotg + gbdpg - gIdtotg); *(here->BSIM4v7DPspPtr +1) += m * (xcdsbr - gdsi - FwdSumi); *(here->BSIM4v7DPspPtr) -= m * (gdsr - xcdsbi + FwdSumr + gdtots - gbdpsp + gIdtots); *(here->BSIM4v7DPbpPtr +1) += m * (xcdbbr + Gmbsi); *(here->BSIM4v7DPbpPtr) -= m * (gjbd + gdtotb - xcdbbi - Gmbsr - gbdpb + gIdtotb); *(here->BSIM4v7DdpPtr) -= m * (gdpr - gdtotd); *(here->BSIM4v7DdPtr) += m * (gdpr + gdtot); *(here->BSIM4v7SPdpPtr +1) += m * (xcsdbr - gdsi - RevSumi); *(here->BSIM4v7SPdpPtr) -= m * (gdsr - xcsdbi + gstotd + RevSumr - gbspdp + gIstotd); *(here->BSIM4v7SPgpPtr +1) += m * (xcsgbr - Gmi); *(here->BSIM4v7SPgpPtr) -= m * (Gmr - xcsgbi + gstotg - gbspg + gIstotg); *(here->BSIM4v7SPspPtr +1) += m * (xcssbr + gdsi + FwdSumi); *(here->BSIM4v7SPspPtr) += m * (gspr + xcssbi + gdsr + here->BSIM4v7gbs - gstots + FwdSumr + gbspsp - gIstots); *(here->BSIM4v7SPsPtr) -= m * (gspr + gstot); *(here->BSIM4v7SPbpPtr +1) += m * (xcsbbr - Gmbsi); *(here->BSIM4v7SPbpPtr) -= m * (gjbs + gstotb - xcsbbi + Gmbsr - gbspb + gIstotb); *(here->BSIM4v7SspPtr) -= m * (gspr - gstots); *(here->BSIM4v7SsPtr) += m * (gspr + gstot); *(here->BSIM4v7BPdpPtr +1) += m * xcbdb; *(here->BSIM4v7BPdpPtr) -= m * (gjbd - gbbdp + gIbtotd); *(here->BSIM4v7BPgpPtr +1) += m * xcbgb; *(here->BSIM4v7BPgpPtr) -= m * (here->BSIM4v7gbgs + gIbtotg); *(here->BSIM4v7BPspPtr +1) += m * xcbsb; *(here->BSIM4v7BPspPtr) -= m * (gjbs - gbbsp + gIbtots); *(here->BSIM4v7BPbpPtr +1) += m * xcbbb; *(here->BSIM4v7BPbpPtr) += m * (gjbd + gjbs - here->BSIM4v7gbbs - gIbtotb); ggidld = here->BSIM4v7ggidld; ggidlg = here->BSIM4v7ggidlg; ggidlb = here->BSIM4v7ggidlb; ggislg = here->BSIM4v7ggislg; ggisls = here->BSIM4v7ggisls; ggislb = here->BSIM4v7ggislb; /* stamp gidl */ (*(here->BSIM4v7DPdpPtr) += m * ggidld); (*(here->BSIM4v7DPgpPtr) += m * ggidlg); (*(here->BSIM4v7DPspPtr) -= m * ((ggidlg + ggidld) + ggidlb)); (*(here->BSIM4v7DPbpPtr) += m * ggidlb); (*(here->BSIM4v7BPdpPtr) -= m * ggidld); (*(here->BSIM4v7BPgpPtr) -= m * ggidlg); (*(here->BSIM4v7BPspPtr) += m * ((ggidlg + ggidld) + ggidlb)); (*(here->BSIM4v7BPbpPtr) -= m * ggidlb); /* stamp gisl */ (*(here->BSIM4v7SPdpPtr) -= m * ((ggisls + ggislg) + ggislb)); (*(here->BSIM4v7SPgpPtr) += m * ggislg); (*(here->BSIM4v7SPspPtr) += m * ggisls); (*(here->BSIM4v7SPbpPtr) += m * ggislb); (*(here->BSIM4v7BPdpPtr) += m * ((ggislg + ggisls) + ggislb)); (*(here->BSIM4v7BPgpPtr) -= m * ggislg); (*(here->BSIM4v7BPspPtr) -= m * ggisls); (*(here->BSIM4v7BPbpPtr) -= m * ggislb); if (here->BSIM4v7rbodyMod) { (*(here->BSIM4v7DPdbPtr +1) += m * xcdbdb); (*(here->BSIM4v7DPdbPtr) -= m * here->BSIM4v7gbd); (*(here->BSIM4v7SPsbPtr +1) += m * xcsbsb); (*(here->BSIM4v7SPsbPtr) -= m * here->BSIM4v7gbs); (*(here->BSIM4v7DBdpPtr +1) += m * xcdbdb); (*(here->BSIM4v7DBdpPtr) -= m * here->BSIM4v7gbd); (*(here->BSIM4v7DBdbPtr +1) -= m * xcdbdb); (*(here->BSIM4v7DBdbPtr) += m * (here->BSIM4v7gbd + here->BSIM4v7grbpd + here->BSIM4v7grbdb)); (*(here->BSIM4v7DBbpPtr) -= m * here->BSIM4v7grbpd); (*(here->BSIM4v7DBbPtr) -= m * here->BSIM4v7grbdb); (*(here->BSIM4v7BPdbPtr) -= m * here->BSIM4v7grbpd); (*(here->BSIM4v7BPbPtr) -= m * here->BSIM4v7grbpb); (*(here->BSIM4v7BPsbPtr) -= m * here->BSIM4v7grbps); (*(here->BSIM4v7BPbpPtr) += m * (here->BSIM4v7grbpd + here->BSIM4v7grbps + here->BSIM4v7grbpb)); /* WDLiu: (-here->BSIM4v7gbbs) already added to BPbpPtr */ (*(here->BSIM4v7SBspPtr +1) += m * xcsbsb); (*(here->BSIM4v7SBspPtr) -= m * here->BSIM4v7gbs); (*(here->BSIM4v7SBbpPtr) -= m * here->BSIM4v7grbps); (*(here->BSIM4v7SBbPtr) -= m * here->BSIM4v7grbsb); (*(here->BSIM4v7SBsbPtr +1) -= m * xcsbsb); (*(here->BSIM4v7SBsbPtr) += m * (here->BSIM4v7gbs + here->BSIM4v7grbps + here->BSIM4v7grbsb)); (*(here->BSIM4v7BdbPtr) -= m * here->BSIM4v7grbdb); (*(here->BSIM4v7BbpPtr) -= m * here->BSIM4v7grbpb); (*(here->BSIM4v7BsbPtr) -= m * here->BSIM4v7grbsb); (*(here->BSIM4v7BbPtr) += m * (here->BSIM4v7grbsb + here->BSIM4v7grbdb + here->BSIM4v7grbpb)); } /* * WDLiu: The internal charge node generated for transient NQS is not needed for * AC NQS. The following is not doing a real job, but we have to keep it; * otherwise a singular AC NQS matrix may occur if the transient NQS is on. * The charge node is isolated from the instance. */ if (here->BSIM4v7trnqsMod) { (*(here->BSIM4v7QqPtr) += m * 1.0); (*(here->BSIM4v7QgpPtr) += 0.0); (*(here->BSIM4v7QdpPtr) += 0.0); (*(here->BSIM4v7QspPtr) += 0.0); (*(here->BSIM4v7QbpPtr) += 0.0); (*(here->BSIM4v7DPqPtr) += 0.0); (*(here->BSIM4v7SPqPtr) += 0.0); (*(here->BSIM4v7GPqPtr) += 0.0); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v7/bsim4v7init.h0000644000175000017500000000042613546075722023010 0ustar carstencarsten#ifndef _BSIM4v7INIT_H #define _BSIM4v7INIT_H extern IFparm BSIM4v7pTable[ ]; extern IFparm BSIM4v7mPTable[ ]; extern char *BSIM4v7names[ ]; extern int BSIM4v7pTSize; extern int BSIM4v7mPTSize; extern int BSIM4v7nSize; extern int BSIM4v7iSize; extern int BSIM4v7mSize; #endif tmpk8ny_4pz/src/spicelib/devices/bsim4v7/B4TERMS_OF_USE0000644000175000017500000000254413546075722022566 0ustar carstencarsten The terms under which the software is provided are as the following. Software is distributed as is, completely without warranty or service support. The University of California and its employees are not liable for the condition or performance of the software. The University owns the copyright but shall not be liable for any infringement of copyright or other proprietary rights brought by third parties against the users of the software. The University of California hereby disclaims all implied warranties. The University of California grants the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions: 1. The users agree not to charge for the University of California code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge the UC Berkeley BSIM Research Group that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to obey all U.S. Government restrictions governing redistribution or export of the software. 4. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others. Chenming Hu, and Weidong Liu Mar. 2000 tmpk8ny_4pz/src/spicelib/devices/bsim4v7/b4v7noi.c0000644000175000017500000010251213546075722022113 0ustar carstencarsten/**** BSIM4.7.0 Released by Darsen Lu 04/08/2011 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4noi.c of BSIM4.7.0. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Authors: 2008- Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, 07/29/2005. * Modified by Mohan Dunga, 12/13/2006 * Modified by Wenwei Yang, 07/31/2008. * Modified by Tanvir Morshed, Darsen Lu 03/27/2011 **********/ #include "ngspice/ngspice.h" #include "bsim4v7def.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" #include "ngspice/const.h" /* * WDL: 1/f noise model has been smoothed out and enhanced with * bulk charge effect as well as physical N* equ. and necessary * conversion into the SI unit system. */ static double Eval1ovFNoise( double Vds, BSIM4v7model *model, BSIM4v7instance *here, double freq, double temp) { struct bsim4SizeDependParam *pParam; double cd, esat, DelClm, EffFreq, N0, Nl, Leff, Leffsq; double T0=0.0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi; pParam = here->pParam; cd = fabs(here->BSIM4v7cd); Leff = pParam->BSIM4v7leff - 2.0 * model->BSIM4v7lintnoi; Leffsq = Leff * Leff; esat = 2.0 * here->BSIM4v7vsattemp / here->BSIM4v7ueff; if(model->BSIM4v7em<=0.0) DelClm = 0.0; /* flicker noise modified -JX */ else { T0 = ((((Vds - here->BSIM4v7Vdseff) / pParam->BSIM4v7litl) + model->BSIM4v7em) / esat); DelClm = pParam->BSIM4v7litl * log (MAX(T0, N_MINLOG)); if (DelClm < 0.0) DelClm = 0.0; /* bugfix */ } EffFreq = pow(freq, model->BSIM4v7ef); T1 = CHARGE * CHARGE * CONSTboltz * cd * temp * here->BSIM4v7ueff; T2 = 1.0e10 * EffFreq * here->BSIM4v7Abulk * model->BSIM4v7coxe * Leffsq; N0 = model->BSIM4v7coxe * here->BSIM4v7Vgsteff / CHARGE; Nl = model->BSIM4v7coxe * here->BSIM4v7Vgsteff * (1.0 - here->BSIM4v7AbovVgst2Vtm * here->BSIM4v7Vdseff) / CHARGE; T3 = model->BSIM4v7oxideTrapDensityA * log(MAX(((N0 + here->BSIM4v7nstar) / (Nl + here->BSIM4v7nstar)), N_MINLOG)); T4 = model->BSIM4v7oxideTrapDensityB * (N0 - Nl); T5 = model->BSIM4v7oxideTrapDensityC * 0.5 * (N0 * N0 - Nl * Nl); T6 = CONSTboltz * temp * cd * cd; T7 = 1.0e10 * EffFreq * Leffsq * pParam->BSIM4v7weff * here->BSIM4v7nf; T8 = model->BSIM4v7oxideTrapDensityA + model->BSIM4v7oxideTrapDensityB * Nl + model->BSIM4v7oxideTrapDensityC * Nl * Nl; T9 = (Nl + here->BSIM4v7nstar) * (Nl + here->BSIM4v7nstar); Ssi = T1 / T2 * (T3 + T4 + T5) + T6 / T7 * DelClm * T8 / T9; return Ssi; } int BSIM4v7noise ( int mode, int operation, GENmodel *inModel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; BSIM4v7model *model = (BSIM4v7model *)inModel; BSIM4v7instance *here; struct bsim4SizeDependParam *pParam; double tempOnoise; double tempInoise; double noizDens[BSIM4v7NSRCS]; double lnNdens[BSIM4v7NSRCS]; double T0, T1, T2, T3, T4, T5, T6, T7, T8, T10, T11; double Vds, Ssi, Swi; double tmp=0.0, gdpr, gspr, npart_theta=0.0, npart_beta=0.0, igsquare, bodymode; /* tnoiMod=2 (v4.7) */ double eta, Leff, Lvsat, gamma, delta, epsilon, GammaGd0=0.0; double npart_c, sigrat=0.0, C0, omega, ctnoi=0.0; int i; double m; /* define the names of the noise sources */ static char *BSIM4v7nNames[BSIM4v7NSRCS] = { /* Note that we have to keep the order */ ".rd", /* noise due to rd */ ".rs", /* noise due to rs */ ".rg", /* noise due to rgeltd */ ".rbps", /* noise due to rbps */ ".rbpd", /* noise due to rbpd */ ".rbpb", /* noise due to rbpb */ ".rbsb", /* noise due to rbsb */ ".rbdb", /* noise due to rbdb */ ".id", /* noise due to id (for tnoiMod2: uncorrelated portion only) */ ".1overf", /* flicker (1/f) noise */ ".igs", /* shot noise due to IGS */ ".igd", /* shot noise due to IGD */ ".igb", /* shot noise due to IGB */ ".corl", /* contribution of correlated drain and induced gate noise */ "" /* total transistor noise */ }; for (; model != NULL; model = BSIM4v7nextModel(model)) { if(model->BSIM4v7tnoiMod != 2) { noizDens[BSIM4v7CORLNOIZ] = 0.0; lnNdens[BSIM4v7CORLNOIZ] = N_MINLOG; } for (here = BSIM4v7instances(model); here != NULL; here = BSIM4v7nextInstance(here)) { pParam = here->pParam; switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i = 0; i < BSIM4v7NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise.%s%s", here->BSIM4v7name, BSIM4v7nNames[i]); } break; case INT_NOIZ: for (i = 0; i < BSIM4v7NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total.%s%s", here->BSIM4v7name, BSIM4v7nNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total.%s%s", here->BSIM4v7name, BSIM4v7nNames[i]); } break; } } break; case N_CALC: m = here->BSIM4v7m; switch (mode) { case N_DENS: if (model->BSIM4v7tnoiMod == 0) { if (model->BSIM4v7rdsMod == 0) { gspr = here->BSIM4v7sourceConductance; gdpr = here->BSIM4v7drainConductance; if (here->BSIM4v7grdsw > 0.0) tmp = 1.0 / here->BSIM4v7grdsw; /* tmp used below */ else tmp = 0.0; } else { gspr = here->BSIM4v7gstot; gdpr = here->BSIM4v7gdtot; tmp = 0.0; } } else if(model->BSIM4v7tnoiMod == 1) { T5 = here->BSIM4v7Vgsteff / here->BSIM4v7EsatL; T5 *= T5; npart_beta = model->BSIM4v7rnoia * (1.0 + T5 * model->BSIM4v7tnoia * pParam->BSIM4v7leff); npart_theta = model->BSIM4v7rnoib * (1.0 + T5 * model->BSIM4v7tnoib * pParam->BSIM4v7leff); if(npart_theta > 0.9) npart_theta = 0.9; if(npart_theta > 0.9 * npart_beta) npart_theta = 0.9 * npart_beta; //4.6.2 if (model->BSIM4v7rdsMod == 0) { gspr = here->BSIM4v7sourceConductance; gdpr = here->BSIM4v7drainConductance; } else { gspr = here->BSIM4v7gstot; gdpr = here->BSIM4v7gdtot; } if ((*(ckt->CKTstates[0] + here->BSIM4v7vds)) >= 0.0) gspr = gspr * (1.0 + npart_theta * npart_theta * gspr / here->BSIM4v7IdovVds); else gdpr = gdpr * (1.0 + npart_theta * npart_theta * gdpr / here->BSIM4v7IdovVds); } else { /* tnoiMod=2 (v4.7) */ if (model->BSIM4v7rdsMod == 0) { gspr = here->BSIM4v7sourceConductance; gdpr = here->BSIM4v7drainConductance; } else { gspr = here->BSIM4v7gstot; gdpr = here->BSIM4v7gdtot; } } NevalSrc(&noizDens[BSIM4v7RDNOIZ], &lnNdens[BSIM4v7RDNOIZ], ckt, THERMNOISE, here->BSIM4v7dNodePrime, here->BSIM4v7dNode, gdpr * m); NevalSrc(&noizDens[BSIM4v7RSNOIZ], &lnNdens[BSIM4v7RSNOIZ], ckt, THERMNOISE, here->BSIM4v7sNodePrime, here->BSIM4v7sNode, gspr * m); if (here->BSIM4v7rgateMod == 1) { NevalSrc(&noizDens[BSIM4v7RGNOIZ], &lnNdens[BSIM4v7RGNOIZ], ckt, THERMNOISE, here->BSIM4v7gNodePrime, here->BSIM4v7gNodeExt, here->BSIM4v7grgeltd * m); } else if (here->BSIM4v7rgateMod == 2) { T0 = 1.0 + here->BSIM4v7grgeltd/here->BSIM4v7gcrg; T1 = T0 * T0; NevalSrc(&noizDens[BSIM4v7RGNOIZ], &lnNdens[BSIM4v7RGNOIZ], ckt, THERMNOISE, here->BSIM4v7gNodePrime, here->BSIM4v7gNodeExt, here->BSIM4v7grgeltd * m / T1); } else if (here->BSIM4v7rgateMod == 3) { NevalSrc(&noizDens[BSIM4v7RGNOIZ], &lnNdens[BSIM4v7RGNOIZ], ckt, THERMNOISE, here->BSIM4v7gNodeMid, here->BSIM4v7gNodeExt, here->BSIM4v7grgeltd * m); } else { noizDens[BSIM4v7RGNOIZ] = 0.0; lnNdens[BSIM4v7RGNOIZ] = log(MAX(noizDens[BSIM4v7RGNOIZ], N_MINLOG)); } bodymode = 5; if (here->BSIM4v7rbodyMod == 2) { if( ( !model->BSIM4v7rbps0Given) || ( !model->BSIM4v7rbpd0Given) ) bodymode = 1; else if( (!model->BSIM4v7rbsbx0Given && !model->BSIM4v7rbsby0Given) || (!model->BSIM4v7rbdbx0Given && !model->BSIM4v7rbdby0Given) ) bodymode = 3; } if (here->BSIM4v7rbodyMod) { if(bodymode == 5) { NevalSrc(&noizDens[BSIM4v7RBPSNOIZ], &lnNdens[BSIM4v7RBPSNOIZ], ckt, THERMNOISE, here->BSIM4v7bNodePrime, here->BSIM4v7sbNode, here->BSIM4v7grbps * m); NevalSrc(&noizDens[BSIM4v7RBPDNOIZ], &lnNdens[BSIM4v7RBPDNOIZ], ckt, THERMNOISE, here->BSIM4v7bNodePrime, here->BSIM4v7dbNode, here->BSIM4v7grbpd * m); NevalSrc(&noizDens[BSIM4v7RBPBNOIZ], &lnNdens[BSIM4v7RBPBNOIZ], ckt, THERMNOISE, here->BSIM4v7bNodePrime, here->BSIM4v7bNode, here->BSIM4v7grbpb * m); NevalSrc(&noizDens[BSIM4v7RBSBNOIZ], &lnNdens[BSIM4v7RBSBNOIZ], ckt, THERMNOISE, here->BSIM4v7bNode, here->BSIM4v7sbNode, here->BSIM4v7grbsb * m); NevalSrc(&noizDens[BSIM4v7RBDBNOIZ], &lnNdens[BSIM4v7RBDBNOIZ], ckt, THERMNOISE, here->BSIM4v7bNode, here->BSIM4v7dbNode, here->BSIM4v7grbdb * m); } if(bodymode == 3) { NevalSrc(&noizDens[BSIM4v7RBPSNOIZ], &lnNdens[BSIM4v7RBPSNOIZ], ckt, THERMNOISE, here->BSIM4v7bNodePrime, here->BSIM4v7sbNode, here->BSIM4v7grbps * m); NevalSrc(&noizDens[BSIM4v7RBPDNOIZ], &lnNdens[BSIM4v7RBPDNOIZ], ckt, THERMNOISE, here->BSIM4v7bNodePrime, here->BSIM4v7dbNode, here->BSIM4v7grbpd * m); NevalSrc(&noizDens[BSIM4v7RBPBNOIZ], &lnNdens[BSIM4v7RBPBNOIZ], ckt, THERMNOISE, here->BSIM4v7bNodePrime, here->BSIM4v7bNode, here->BSIM4v7grbpb * m); noizDens[BSIM4v7RBSBNOIZ] = noizDens[BSIM4v7RBDBNOIZ] = 0.0; lnNdens[BSIM4v7RBSBNOIZ] = log(MAX(noizDens[BSIM4v7RBSBNOIZ], N_MINLOG)); lnNdens[BSIM4v7RBDBNOIZ] = log(MAX(noizDens[BSIM4v7RBDBNOIZ], N_MINLOG)); } if(bodymode == 1) { NevalSrc(&noizDens[BSIM4v7RBPBNOIZ], &lnNdens[BSIM4v7RBPBNOIZ], ckt, THERMNOISE, here->BSIM4v7bNodePrime, here->BSIM4v7bNode, here->BSIM4v7grbpb * m); noizDens[BSIM4v7RBPSNOIZ] = noizDens[BSIM4v7RBPDNOIZ] = 0.0; noizDens[BSIM4v7RBSBNOIZ] = noizDens[BSIM4v7RBDBNOIZ] = 0.0; lnNdens[BSIM4v7RBPSNOIZ] = log(MAX(noizDens[BSIM4v7RBPSNOIZ], N_MINLOG)); lnNdens[BSIM4v7RBPDNOIZ] = log(MAX(noizDens[BSIM4v7RBPDNOIZ], N_MINLOG)); lnNdens[BSIM4v7RBSBNOIZ] = log(MAX(noizDens[BSIM4v7RBSBNOIZ], N_MINLOG)); lnNdens[BSIM4v7RBDBNOIZ] = log(MAX(noizDens[BSIM4v7RBDBNOIZ], N_MINLOG)); } } else { noizDens[BSIM4v7RBPSNOIZ] = noizDens[BSIM4v7RBPDNOIZ] = 0.0; noizDens[BSIM4v7RBPBNOIZ] = 0.0; noizDens[BSIM4v7RBSBNOIZ] = noizDens[BSIM4v7RBDBNOIZ] = 0.0; lnNdens[BSIM4v7RBPSNOIZ] = log(MAX(noizDens[BSIM4v7RBPSNOIZ], N_MINLOG)); lnNdens[BSIM4v7RBPDNOIZ] = log(MAX(noizDens[BSIM4v7RBPDNOIZ], N_MINLOG)); lnNdens[BSIM4v7RBPBNOIZ] = log(MAX(noizDens[BSIM4v7RBPBNOIZ], N_MINLOG)); lnNdens[BSIM4v7RBSBNOIZ] = log(MAX(noizDens[BSIM4v7RBSBNOIZ], N_MINLOG)); lnNdens[BSIM4v7RBDBNOIZ] = log(MAX(noizDens[BSIM4v7RBDBNOIZ], N_MINLOG)); } if(model->BSIM4v7tnoiMod == 2) { eta = 1.0 - here->BSIM4v7Vdseff * here->BSIM4v7AbovVgst2Vtm; T0 = 1.0 - eta; T1 = 1.0 + eta; T2 = T1 + 2.0 * here->BSIM4v7Abulk * model->BSIM4v7vtm / here->BSIM4v7Vgsteff; Leff = pParam->BSIM4v7leff; Lvsat = Leff * (1.0 + here->BSIM4v7Vdseff / here->BSIM4v7EsatL); T6 = Leff / Lvsat; T5 = here->BSIM4v7Vgsteff / here->BSIM4v7EsatL; T5 = T5 * T5; gamma = T6 * (0.5 * T1 + T0 * T0 / (6.0 * T2)); T3 = T2 * T2; T4 = T0 * T0; T5 = T3 * T3; delta = (T1 / T3 - (5.0 * T1 + T2) * T4 / (15.0 * T5) + T4 * T4 / (9.0 * T5 * T2)) / (6.0 * T6 * T6 * T6); T7 = T0 / T2; epsilon = (T7 - T7 * T7 * T7 / 3.0) / (6.0 * T6); T8 = here->BSIM4v7Vgsteff / here->BSIM4v7EsatL; T8 *= T8; npart_c = model->BSIM4v7rnoic * (1.0 + T8 * model->BSIM4v7tnoic * Leff); ctnoi = epsilon / sqrt(gamma * delta) * (2.5316 * npart_c); npart_beta = model->BSIM4v7rnoia * (1.0 + T8 * model->BSIM4v7tnoia * Leff); npart_theta = model->BSIM4v7rnoib * (1.0 + T8 * model->BSIM4v7tnoib * Leff); gamma = gamma * (3.0 * npart_beta * npart_beta); delta = delta * (3.75 * npart_theta * npart_theta); GammaGd0 = gamma * here->BSIM4v7noiGd0; C0 = here->BSIM4v7Coxeff * pParam->BSIM4v7weffCV * here->BSIM4v7nf * pParam->BSIM4v7leffCV; T0 = C0 / here->BSIM4v7noiGd0; sigrat = T0 * sqrt(delta / gamma); } switch(model->BSIM4v7tnoiMod) { case 0: T0 = here->BSIM4v7ueff * fabs(here->BSIM4v7qinv); T1 = T0 * tmp + pParam->BSIM4v7leff * pParam->BSIM4v7leff; NevalSrc(&noizDens[BSIM4v7IDNOIZ], &lnNdens[BSIM4v7IDNOIZ], ckt, THERMNOISE, here->BSIM4v7dNodePrime, here->BSIM4v7sNodePrime, (T0 / T1) * model->BSIM4v7ntnoi * m); break; case 1: T0 = here->BSIM4v7gm + here->BSIM4v7gmbs + here->BSIM4v7gds; T0 *= T0; igsquare = npart_theta * npart_theta * T0 / here->BSIM4v7IdovVds; T1 = npart_beta * (here->BSIM4v7gm + here->BSIM4v7gmbs) + here->BSIM4v7gds; T2 = T1 * T1 / here->BSIM4v7IdovVds; NevalSrc(&noizDens[BSIM4v7IDNOIZ], &lnNdens[BSIM4v7IDNOIZ], ckt, THERMNOISE, here->BSIM4v7dNodePrime, here->BSIM4v7sNodePrime, (T2 - igsquare) * m); break; case 2: T2 = GammaGd0; T3 = ctnoi * ctnoi; T4 = 1.0 - T3; NevalSrc(&noizDens[BSIM4v7IDNOIZ], &lnNdens[BSIM4v7IDNOIZ], ckt, THERMNOISE, here->BSIM4v7dNodePrime, here->BSIM4v7sNodePrime, T2 * T4 * m); /* Evaluate output noise due to two correlated noise sources */ omega = 2.0 * M_PI * data->freq; T5 = omega * sigrat; T6 = T5 * T5; T7 = T6 / (1.0 + T6); if (here->BSIM4v7mode >= 0) { NevalSrc2(&noizDens[BSIM4v7CORLNOIZ], &lnNdens[BSIM4v7CORLNOIZ], ckt, THERMNOISE, here->BSIM4v7dNodePrime, here->BSIM4v7sNodePrime, T2 * T3 * m, here->BSIM4v7gNodePrime, here->BSIM4v7sNodePrime, T2 * T7 * m, 0.5 * M_PI); } else { NevalSrc2(&noizDens[BSIM4v7CORLNOIZ], &lnNdens[BSIM4v7CORLNOIZ], ckt, THERMNOISE, here->BSIM4v7sNodePrime, here->BSIM4v7dNodePrime, T2 * T3 * m, here->BSIM4v7gNodePrime, here->BSIM4v7dNodePrime, T2 * T7 * m, 0.5 * M_PI); } break; } NevalSrc(&noizDens[BSIM4v7FLNOIZ], (double*) NULL, ckt, N_GAIN, here->BSIM4v7dNodePrime, here->BSIM4v7sNodePrime, (double) 0.0); switch(model->BSIM4v7fnoiMod) { case 0: noizDens[BSIM4v7FLNOIZ] *= m * model->BSIM4v7kf * exp(model->BSIM4v7af * log(MAX(fabs(here->BSIM4v7cd), N_MINLOG))) / (pow(data->freq, model->BSIM4v7ef) * pParam->BSIM4v7leff * pParam->BSIM4v7leff * model->BSIM4v7coxe); break; case 1: Vds = *(ckt->CKTstates[0] + here->BSIM4v7vds); if (Vds < 0.0) Vds = -Vds; Ssi = Eval1ovFNoise(Vds, model, here, data->freq, ckt->CKTtemp); T10 = model->BSIM4v7oxideTrapDensityA * CONSTboltz * ckt->CKTtemp; T11 = pParam->BSIM4v7weff * here->BSIM4v7nf * pParam->BSIM4v7leff * pow(data->freq, model->BSIM4v7ef) * 1.0e10 * here->BSIM4v7nstar * here->BSIM4v7nstar; Swi = T10 / T11 * here->BSIM4v7cd * here->BSIM4v7cd; T1 = Swi + Ssi; if (T1 > 0.0) noizDens[BSIM4v7FLNOIZ] *= m * (Ssi * Swi) / T1; else noizDens[BSIM4v7FLNOIZ] *= 0.0; break; } lnNdens[BSIM4v7FLNOIZ] = log(MAX(noizDens[BSIM4v7FLNOIZ], N_MINLOG)); if(here->BSIM4v7mode >= 0) { /* bugfix */ NevalSrc(&noizDens[BSIM4v7IGSNOIZ], &lnNdens[BSIM4v7IGSNOIZ], ckt, SHOTNOISE, here->BSIM4v7gNodePrime, here->BSIM4v7sNodePrime, m * (here->BSIM4v7Igs + here->BSIM4v7Igcs)); NevalSrc(&noizDens[BSIM4v7IGDNOIZ], &lnNdens[BSIM4v7IGDNOIZ], ckt, SHOTNOISE, here->BSIM4v7gNodePrime, here->BSIM4v7dNodePrime, m * (here->BSIM4v7Igd + here->BSIM4v7Igcd)); } else { NevalSrc(&noizDens[BSIM4v7IGSNOIZ], &lnNdens[BSIM4v7IGSNOIZ], ckt, SHOTNOISE, here->BSIM4v7gNodePrime, here->BSIM4v7sNodePrime, m * (here->BSIM4v7Igs + here->BSIM4v7Igcd)); NevalSrc(&noizDens[BSIM4v7IGDNOIZ], &lnNdens[BSIM4v7IGDNOIZ], ckt, SHOTNOISE, here->BSIM4v7gNodePrime, here->BSIM4v7dNodePrime, m * (here->BSIM4v7Igd + here->BSIM4v7Igcs)); } NevalSrc(&noizDens[BSIM4v7IGBNOIZ], &lnNdens[BSIM4v7IGBNOIZ], ckt, SHOTNOISE, here->BSIM4v7gNodePrime, here->BSIM4v7bNodePrime, m * here->BSIM4v7Igb); noizDens[BSIM4v7TOTNOIZ] = noizDens[BSIM4v7RDNOIZ] + noizDens[BSIM4v7RSNOIZ] + noizDens[BSIM4v7RGNOIZ] + noizDens[BSIM4v7RBPSNOIZ] + noizDens[BSIM4v7RBPDNOIZ] + noizDens[BSIM4v7RBPBNOIZ] + noizDens[BSIM4v7RBSBNOIZ] + noizDens[BSIM4v7RBDBNOIZ] + noizDens[BSIM4v7IDNOIZ] + noizDens[BSIM4v7FLNOIZ] + noizDens[BSIM4v7IGSNOIZ] + noizDens[BSIM4v7IGDNOIZ] + noizDens[BSIM4v7IGBNOIZ] + noizDens[BSIM4v7CORLNOIZ]; lnNdens[BSIM4v7TOTNOIZ] = log(MAX(noizDens[BSIM4v7TOTNOIZ], N_MINLOG)); *OnDens += noizDens[BSIM4v7TOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to initialize our "history" variables. */ for (i = 0; i < BSIM4v7NSRCS; i++) { here->BSIM4v7nVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i = 0; i < BSIM4v7NSRCS; i++) { here->BSIM4v7nVar[OUTNOIZ][i] = 0.0; here->BSIM4v7nVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0, we have to integrate. */ for (i = 0; i < BSIM4v7NSRCS; i++) { if (i != BSIM4v7TOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], here->BSIM4v7nVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv, lnNdens[i] + data->lnGainInv, here->BSIM4v7nVar[LNLSTDENS][i] + data->lnGainInv, data); here->BSIM4v7nVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { here->BSIM4v7nVar[OUTNOIZ][i] += tempOnoise; here->BSIM4v7nVar[OUTNOIZ][BSIM4v7TOTNOIZ] += tempOnoise; here->BSIM4v7nVar[INNOIZ][i] += tempInoise; here->BSIM4v7nVar[INNOIZ][BSIM4v7TOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i = 0; i < BSIM4v7NSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i = 0; i < BSIM4v7NSRCS; i++) { data->outpVector[data->outNumber++] = here->BSIM4v7nVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = here->BSIM4v7nVar[INNOIZ][i]; } } break; } break; case N_CLOSE: /* do nothing, the main calling routine will close */ return (OK); break; /* the plots */ } /* switch (operation) */ } /* for here */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v7/bsim4v7ext.h0000644000175000017500000000260613546075722022647 0ustar carstencarsten/********** Copyright 2004 Regents of the University of California. All rights reserved. Author: 2000 Weidong Liu Author: 2001- Xuemei Xi File: bsim4v7ext.h **********/ extern int BSIM4v7acLoad(GENmodel *,CKTcircuit*); extern int BSIM4v7ask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*); extern int BSIM4v7convTest(GENmodel *,CKTcircuit*); extern int BSIM4v7getic(GENmodel*,CKTcircuit*); extern int BSIM4v7load(GENmodel*,CKTcircuit*); extern int BSIM4v7mAsk(CKTcircuit*,GENmodel *,int, IFvalue*); extern int BSIM4v7mDelete(GENmodel*); extern int BSIM4v7mParam(int,IFvalue*,GENmodel*); extern void BSIM4v7mosCap(CKTcircuit*, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*); extern int BSIM4v7param(int,IFvalue*,GENinstance*,IFvalue*); extern int BSIM4v7pzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int BSIM4v7setup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int BSIM4v7temp(GENmodel*,CKTcircuit*); extern int BSIM4v7trunc(GENmodel*,CKTcircuit*,double*); extern int BSIM4v7noise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int BSIM4v7unsetup(GENmodel*,CKTcircuit*); extern int BSIM4v7soaCheck(CKTcircuit *, GENmodel *); tmpk8ny_4pz/src/spicelib/devices/sw/0000755000175000017500000000000013546075722017614 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/sw/swask.c0000644000175000017500000000376113546075722021117 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ /* * This routine gives access to the internal device parameters * of voltage controlled SWitch */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "swdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int SWask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { SWinstance *here = (SWinstance *) inst; static char *msg = "Current and power not available in ac analysis"; NG_IGNORE(select); switch (which) { case SW_POS_NODE: value->iValue = here->SWposNode; return OK; case SW_NEG_NODE: value->iValue = here->SWnegNode; return OK; case SW_POS_CONT_NODE: value->iValue = here->SWposCntrlNode; return OK; case SW_NEG_CONT_NODE: value->iValue = here->SWnegCntrlNode; return OK; case SW_CURRENT: if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "SWask"; strcpy(errMsg, msg); return E_ASKCURRENT; } else { value->rValue = (ckt->CKTrhsOld[here->SWposNode] - ckt->CKTrhsOld[here->SWnegNode]) * here->SWcond; } return OK; case SW_POWER: if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "SWask"; strcpy(errMsg, msg); return E_ASKPOWER; } else { value->rValue = (ckt->CKTrhsOld[here->SWposNode] - ckt->CKTrhsOld[here->SWnegNode]) * (ckt->CKTrhsOld[here->SWposNode] - ckt->CKTrhsOld[here->SWnegNode]) * here->SWcond; } return OK; default: return E_BADPARM; } } tmpk8ny_4pz/src/spicelib/devices/sw/swload.c0000644000175000017500000001475513546075722021265 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Gordon Jacobs Modified: 2001 Jon Engelbert **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/fteext.h" #include "swdefs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int SWload(GENmodel *inModel, CKTcircuit *ckt) { SWmodel *model = (SWmodel *) inModel; SWinstance *here; double g_now; double v_ctrl; double previous_state = -1; double current_state = -1; double old_current_state = -1; double REALLY_OFF = 0, REALLY_ON = 1; // switch is on or off, not in hysteresis region. double HYST_OFF = 2, HYST_ON = 3; // switch is on or off while control value is in hysteresis region. // double previous_region = -1; // double current_region = -1; for (; model; model = SWnextModel(model)) for (here = SWinstances(model); here; here = SWnextInstance(here)) { old_current_state = ckt->CKTstate0[here->SWswitchstate]; previous_state = ckt->CKTstate1[here->SWswitchstate]; v_ctrl = ckt->CKTrhsOld[here->SWposCntrlNode] - ckt->CKTrhsOld[here->SWnegCntrlNode]; /* decide the state of the switch */ if (ckt->CKTmode & (MODEINITFIX | MODEINITJCT)) { if (here->SWzero_stateGiven) { /* switch specified "on" */ if (model->SWvHysteresis >= 0 && v_ctrl > model->SWvThreshold + model->SWvHysteresis) current_state = REALLY_ON; else if (model->SWvHysteresis < 0 && v_ctrl > model->SWvThreshold - model->SWvHysteresis) current_state = REALLY_ON; else current_state = HYST_ON; } else { if (model->SWvHysteresis >= 0 && v_ctrl < model->SWvThreshold - model->SWvHysteresis) current_state = REALLY_OFF; else if (model->SWvHysteresis < 0 && v_ctrl < model->SWvThreshold + model->SWvHysteresis) current_state = REALLY_OFF; else current_state = HYST_OFF; } } else if (ckt->CKTmode & (MODEINITSMSIG)) { current_state = previous_state; } else if (ckt->CKTmode & (MODEINITFLOAT)) { /* use state0 since INITTRAN or INITPRED already called */ if (model->SWvHysteresis > 0) { if (v_ctrl > (model->SWvThreshold + model->SWvHysteresis)) current_state = REALLY_ON; else if (v_ctrl < (model->SWvThreshold - model->SWvHysteresis)) current_state = REALLY_OFF; else current_state = old_current_state; } else { // negative hysteresis case. if (v_ctrl > (model->SWvThreshold - model->SWvHysteresis)) current_state = REALLY_ON; else if (v_ctrl < (model->SWvThreshold + model->SWvHysteresis)) current_state = REALLY_OFF; else { // in hysteresis... change value if going from low to hysteresis, or from hi to hysteresis. // if previous state was in hysteresis, then don't change the state.. if (previous_state == HYST_OFF || previous_state == HYST_ON) current_state = previous_state; else if (previous_state == REALLY_ON) current_state = HYST_OFF; else if (previous_state == REALLY_OFF) current_state = HYST_ON; else internalerror("bad value for previous state in swload"); } } if (current_state != old_current_state) { ckt->CKTnoncon++; /* ensure one more iteration */ ckt->CKTtroubleElt = (GENinstance *) here; } } else if (ckt->CKTmode & (MODEINITTRAN | MODEINITPRED)) { if (model->SWvHysteresis > 0) { if (v_ctrl > (model->SWvThreshold + model->SWvHysteresis)) current_state = REALLY_ON; else if (v_ctrl < (model->SWvThreshold - model->SWvHysteresis)) current_state = REALLY_OFF; else current_state = previous_state; } else { // negative hysteresis case. if (v_ctrl > (model->SWvThreshold - model->SWvHysteresis)) current_state = REALLY_ON; else if (v_ctrl < (model->SWvThreshold + model->SWvHysteresis)) current_state = REALLY_OFF; else { current_state = 0.0; if (previous_state == HYST_ON || previous_state == HYST_OFF) current_state = previous_state; else if (previous_state == REALLY_ON) current_state = REALLY_OFF; else if (previous_state == REALLY_OFF) current_state = REALLY_ON; } } } // code added to force the state to be updated. // there is a possible problem. What if, during the transient analysis, the time is stepped // forward enough to change the switch's state, but that time point is rejected as being too // distant and then the time is pushed back to a time before the switch changed states. // After analyzing the transient code, it seems that this is not a problem because state updating // occurs before the convergence loop in transient processing. ckt->CKTstate0[here->SWswitchstate] = current_state; ckt->CKTstate0[here->SWctrlvalue] = v_ctrl; if (current_state == REALLY_ON || current_state == HYST_ON) g_now = model->SWonConduct; else g_now = model->SWoffConduct; here->SWcond = g_now; *(here->SWposPosPtr) += g_now; *(here->SWposNegPtr) -= g_now; *(here->SWnegPosPtr) -= g_now; *(here->SWnegNegPtr) += g_now; } return OK; } tmpk8ny_4pz/src/spicelib/devices/sw/swsetup.c0000644000175000017500000000344713546075722021502 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Gordon Jacobs **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "swdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define TSTALLOC(ptr, first, second) \ do { \ if (!(here->ptr = SMPmakeElt(matrix, here->first, here->second))) \ return E_NOMEM; \ } while (0) int SWsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { SWmodel *model = (SWmodel *) inModel; SWinstance *here; for (; model; model = SWnextModel(model)) { /* Default Value Processing for Switch Model */ if (!model->SWthreshGiven) model->SWvThreshold = 0; if (!model->SWhystGiven) model->SWvHysteresis = 0; if (!model->SWonGiven) { model->SWonConduct = SW_ON_CONDUCTANCE; model->SWonResistance = 1.0 / model->SWonConduct; } if (!model->SWoffGiven) { model->SWoffConduct = SW_OFF_CONDUCTANCE; model->SWoffResistance = 1.0 / model->SWoffConduct; } for (here = SWinstances(model); here; here = SWnextInstance(here)) { here->SWstate = *states; *states += SW_NUM_STATES; /* Default Value Processing for Switch Instance */ /* none */ TSTALLOC(SWposPosPtr, SWposNode, SWposNode); TSTALLOC(SWposNegPtr, SWposNode, SWnegNode); TSTALLOC(SWnegPosPtr, SWnegNode, SWposNode); TSTALLOC(SWnegNegPtr, SWnegNode, SWnegNode); } } return OK; } tmpk8ny_4pz/src/spicelib/devices/sw/swtrunc.c0000644000175000017500000000337613546075722021476 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "swdefs.h" int SWtrunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { SWmodel *model = (SWmodel *) inModel; SWinstance *here; double lastChange, maxChange, maxStep, ref; for (; model; model = SWnextModel(model)) for (here = SWinstances(model); here; here = SWnextInstance(here)) { lastChange = ckt->CKTstate0[here->SWctrlvalue] - ckt->CKTstate1[here->SWctrlvalue]; if (ckt->CKTstate0[here->SWswitchstate] == 0) { ref = model->SWvThreshold + model->SWvHysteresis; if (ckt->CKTstate0[here->SWctrlvalue] < ref && lastChange > 0) { maxChange = (ref - ckt->CKTstate0[here->SWctrlvalue]) * 0.75 + 0.05; maxStep = maxChange / lastChange * ckt->CKTdeltaOld[0]; if (*timeStep > maxStep) *timeStep = maxStep; } } else { ref = model->SWvThreshold - model->SWvHysteresis; if (ckt->CKTstate0[here->SWctrlvalue] > ref && lastChange < 0) { maxChange = (ref - ckt->CKTstate0[here->SWctrlvalue]) * 0.75 - 0.05; maxStep = maxChange / lastChange * ckt->CKTdeltaOld[0]; if (*timeStep > maxStep) *timeStep = maxStep; } } } return OK; } tmpk8ny_4pz/src/spicelib/devices/sw/Makefile.am0000644000175000017500000000065013546075722021651 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libsw.la libsw_la_SOURCES = \ sw.c \ swacload.c \ swask.c \ swdefs.h \ swext.h \ swinit.c \ swinit.h \ switf.h \ swload.c \ swmask.c \ swmparam.c \ swnoise.c \ swparam.c \ swpzload.c \ swsetup.c \ swtrunc.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/sw/swmask.c0000644000175000017500000000220213546075722021261 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ /* * This routine gives access to the internal model parameter * of voltage controlled SWitch */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "swdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int SWmAsk(CKTcircuit *ckt, GENmodel *inModel, int which, IFvalue *value) { SWmodel *model = (SWmodel *) inModel; NG_IGNORE(ckt); switch (which) { case SW_MOD_RON: value->rValue = model->SWonResistance; return OK; case SW_MOD_ROFF: value->rValue = model->SWoffResistance; return OK; case SW_MOD_VTH: value->rValue = model->SWvThreshold; return OK; case SW_MOD_VHYS: value->rValue = model->SWvHysteresis; return OK; case SW_MOD_GON: value->rValue = model->SWonConduct; return OK; case SW_MOD_GOFF: value->rValue = model->SWoffConduct; return OK; default: return E_BADPARM; } } tmpk8ny_4pz/src/spicelib/devices/sw/swinit.h0000644000175000017500000000034113546075722021300 0ustar carstencarsten#ifndef _SWINIT_H #define _SWINIT_H extern IFparm SWpTable[]; extern IFparm SWmPTable[]; extern char *SWnames[]; extern int SWpTSize; extern int SWmPTSize; extern int SWnSize; extern int SWiSize; extern int SWmSize; #endif tmpk8ny_4pz/src/spicelib/devices/sw/swacload.c0000644000175000017500000000170213546075722021555 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Gordon Jacobs **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "swdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int SWacLoad(GENmodel *inModel, CKTcircuit *ckt) { SWmodel *model = (SWmodel *) inModel; SWinstance *here; double g_now; int current_state; for (; model; model = SWnextModel(model)) for (here = SWinstances(model); here; here = SWnextInstance(here)) { /* In AC analysis, just propogate the state... */ current_state = (int) ckt->CKTstate0[here->SWswitchstate]; g_now = current_state ? model->SWonConduct : model->SWoffConduct; *(here->SWposPosPtr) += g_now; *(here->SWposNegPtr) -= g_now; *(here->SWnegPosPtr) -= g_now; *(here->SWnegNegPtr) += g_now; } return OK; } tmpk8ny_4pz/src/spicelib/devices/sw/swinit.c0000644000175000017500000000307513546075722021302 0ustar carstencarsten/* Modified: Alansfixes */ #include "ngspice/config.h" #include "ngspice/devdefs.h" #include "switf.h" #include "swext.h" #include "swinit.h" SPICEdev SWinfo = { .DEVpublic = { .name = "Switch", .description = "Ideal voltage controlled switch", .terms = &SWnSize, .numNames = &SWnSize, .termNames = SWnames, .numInstanceParms = &SWpTSize, .instanceParms = SWpTable, .numModelParms = &SWmPTSize, .modelParms = SWmPTable, .flags = 0, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = SWparam, .DEVmodParam = SWmParam, .DEVload = SWload, .DEVsetup = SWsetup, .DEVunsetup = NULL, .DEVpzSetup = SWsetup, .DEVtemperature = NULL, .DEVtrunc = SWtrunc, .DEVfindBranch = NULL, .DEVacLoad = SWacLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = NULL, .DEVask = SWask, .DEVmodAsk = SWmAsk, .DEVpzLoad = SWpzLoad, .DEVconvTest = NULL, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = SWnoise, .DEVsoaCheck = NULL, .DEVinstSize = &SWiSize, .DEVmodSize = &SWmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_sw_info(void) { return &SWinfo; } tmpk8ny_4pz/src/spicelib/devices/sw/sw.c0000644000175000017500000000317113546075722020413 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "swdefs.h" #include "ngspice/suffix.h" IFparm SWpTable[] = { /* parameters */ IP("on", SW_IC_ON, IF_FLAG, "Switch initially closed"), IP("off", SW_IC_OFF, IF_FLAG, "Switch initially open"), IOPU("pos_node", SW_POS_NODE, IF_INTEGER, "Positive node of switch"), IOPU("neg_node", SW_NEG_NODE, IF_INTEGER, "Negative node of switch"), OPU("cont_p_node", SW_POS_CONT_NODE, IF_INTEGER, "Positive contr. node of switch"), OPU("cont_n_node", SW_NEG_CONT_NODE, IF_INTEGER, "Positive contr. node of switch"), OP("i", SW_CURRENT, IF_REAL, "Switch current"), OP("p", SW_POWER, IF_REAL, "Switch power") }; IFparm SWmPTable[] = { /* model parameters */ IOPU("sw", SW_MOD_SW, IF_FLAG, "Switch model"), IOPU("vt", SW_MOD_VTH, IF_REAL, "Threshold voltage"), IOPU("vh", SW_MOD_VHYS, IF_REAL, "Hysteresis voltage"), IOPU("ron", SW_MOD_RON, IF_REAL, "Resistance when closed"), OPU("gon", SW_MOD_GON, IF_REAL, "Conductance when closed"), IOPU("roff", SW_MOD_ROFF, IF_REAL, "Resistance when open"), OPU("goff", SW_MOD_GOFF, IF_REAL, "Conductance when open") }; char *SWnames[] = { "S+", "S-", "SC+", "SC-" }; int SWnSize = NUMELEMS(SWnames); int SWpTSize = NUMELEMS(SWpTable); int SWmPTSize = NUMELEMS(SWmPTable); int SWiSize = sizeof(SWinstance); int SWmSize = sizeof(SWmodel); tmpk8ny_4pz/src/spicelib/devices/sw/swnoise.c0000644000175000017500000001050413546075722021447 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Gary W. Ng **********/ #include "ngspice/ngspice.h" #include "swdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" /* * SWnoise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with voltage- controlled switches. It starts with the * model *firstModel and traverses all of its instances. It then * proceeds to any other models on the linked list. The total output * noise density generated by the SW's is summed in the variable * "OnDens". */ int SWnoise(int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; SWmodel *firstModel = (SWmodel *) genmodel; SWmodel *model; SWinstance *inst; double tempOutNoise; double tempInNoise; double noizDens; double lnNdens; int current_state; for (model = firstModel; model; model = SWnextModel(model)) for (inst = SWinstances(model); inst; inst = SWnextInstance(inst)) { switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name the noise generator */ if (job->NStpsSm != 0) switch (mode) { case N_DENS: NOISE_ADD_OUTVAR(ckt, data, "onoise_%s%s", inst->SWname, ""); break; case INT_NOIZ: NOISE_ADD_OUTVAR(ckt, data, "onoise_total_%s%s", inst->SWname, ""); NOISE_ADD_OUTVAR(ckt, data, "inoise_total_%s%s", inst->SWname, ""); break; } break; case N_CALC: switch (mode) { case N_DENS: current_state = (int) ckt->CKTstate0[inst->SWswitchstate]; NevalSrc(&noizDens, &lnNdens, ckt, THERMNOISE, inst->SWposNode, inst->SWnegNode, current_state ? model->SWonConduct : model->SWoffConduct); *OnDens += noizDens; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to */ /* initialize our "history" variables */ inst->SWnVar[LNLSTDENS] = lnNdens; /* clear out our integration variable if it's the first pass */ if (data->freq == job->NstartFreq) inst->SWnVar[OUTNOIZ] = 0.0; } else { /* data->delFreq != 0.0 (we have to integrate) */ tempOutNoise = Nintegrate(noizDens, lnNdens, inst->SWnVar[LNLSTDENS], data); tempInNoise = Nintegrate(noizDens * data->GainSqInv, lnNdens + data->lnGainInv, inst->SWnVar[LNLSTDENS] + data->lnGainInv, data); inst->SWnVar[OUTNOIZ] += tempOutNoise; inst->SWnVar[INNOIZ] += tempInNoise; data->outNoiz += tempOutNoise; data->inNoise += tempInNoise; inst->SWnVar[LNLSTDENS] = lnNdens; } if (data->prtSummary) data->outpVector[data->outNumber++] = noizDens; break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { data->outpVector[data->outNumber++] = inst->SWnVar[OUTNOIZ]; data->outpVector[data->outNumber++] = inst->SWnVar[INNOIZ]; } break; } break; case N_CLOSE: return OK; /* do nothing, the main calling routine will close */ break; /* the plots */ } } return OK; } tmpk8ny_4pz/src/spicelib/devices/sw/swpzload.c0000644000175000017500000000200013546075722021613 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Gordon Jacobs **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "swdefs.h" #include "ngspice/sperror.h" #include "ngspice/complex.h" #include "ngspice/suffix.h" int SWpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { SWmodel *model = (SWmodel *) inModel; SWinstance *here; double g_now; int current_state; NG_IGNORE(s); for (; model; model = SWnextModel(model)) for (here = SWinstances(model); here; here = SWnextInstance(here)) { /* In AC analysis, just propogate the state... */ current_state = (int) ckt->CKTstate0[here->SWswitchstate]; g_now = current_state ? model->SWonConduct : model->SWoffConduct; *(here->SWposPosPtr) += g_now; *(here->SWposNegPtr) -= g_now; *(here->SWnegPosPtr) -= g_now; *(here->SWnegNegPtr) += g_now; } return OK; } tmpk8ny_4pz/src/spicelib/devices/sw/swmparam.c0000644000175000017500000000254213546075722021612 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Gordon Jacobs Modified: 2001 Jon Engelbert **********/ #include "ngspice/ngspice.h" #include "swdefs.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int SWmParam(int param, IFvalue *value, GENmodel *inModel) { SWmodel *model = (SWmodel *) inModel; switch (param) { case SW_MOD_SW: /* just says that this is a switch */ break; case SW_MOD_RON: model->SWonResistance = value->rValue; model->SWonConduct = 1.0 / value->rValue; model->SWonGiven = TRUE; break; case SW_MOD_ROFF: model->SWoffResistance = value->rValue; model->SWoffConduct = 1.0 / value->rValue; model->SWoffGiven = TRUE; break; case SW_MOD_VTH: /* take absolute value of hysteresis voltage */ model->SWvThreshold = value->rValue; model->SWthreshGiven = TRUE; break; case SW_MOD_VHYS: /* take absolute value of hysteresis voltage */ // model->SWvHysteresis = (value->rValue < 0) ? -(value->rValue) : // value->rValue; model->SWvHysteresis = value->rValue; model->SWhystGiven = TRUE; break; default: return E_BADPARM; } return OK; } tmpk8ny_4pz/src/spicelib/devices/sw/switf.h0000644000175000017500000000026113546075722021120 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_SW #define DEV_SW extern SPICEdev *get_sw_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/sw/swext.h0000644000175000017500000000136213546075722021141 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Gordon M. Jacobs Modified: 2000 AlansFixes **********/ extern int SWacLoad(GENmodel *, CKTcircuit *); extern int SWask(CKTcircuit *, GENinstance *, int, IFvalue *, IFvalue *); extern int SWload(GENmodel *, CKTcircuit *); extern int SWmAsk(CKTcircuit *, GENmodel *, int, IFvalue *); extern int SWmParam(int, IFvalue *, GENmodel *); extern int SWparam(int, IFvalue *, GENinstance *, IFvalue *); extern int SWpzLoad(GENmodel *, CKTcircuit *, SPcomplex *); extern int SWsetup(SMPmatrix *, GENmodel *, CKTcircuit *, int *); extern int SWnoise(int, int, GENmodel *, CKTcircuit *, Ndata *, double *); extern int SWtrunc(GENmodel *, CKTcircuit *, double *); tmpk8ny_4pz/src/spicelib/devices/sw/swparam.c0000644000175000017500000000130313546075722021427 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Gordon Jacobs **********/ #include "ngspice/ngspice.h" #include "swdefs.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int SWparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { SWinstance *here = (SWinstance *) inst; NG_IGNORE(select); switch (param) { case SW_IC_ON: if (value->iValue) here->SWzero_stateGiven = TRUE; break; case SW_IC_OFF: if (value->iValue) here->SWzero_stateGiven = FALSE; break; default: return E_BADPARM; } return OK; } tmpk8ny_4pz/src/spicelib/devices/sw/swdefs.h0000644000175000017500000000661313546075722021266 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Gordon M. Jacobs Modified: 2000 AlansFixes **********/ #ifndef SW #define SW #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" /* structures used to describe voltage controlled switches */ /* information to describe each instance */ typedef struct sSWinstance { struct GENinstance gen; #define SWmodPtr(inst) ((struct sSWmodel *)((inst)->gen.GENmodPtr)) #define SWnextInstance(inst) ((struct sSWinstance *)((inst)->gen.GENnextInstance)) #define SWname gen.GENname #define SWstate gen.GENstate const int SWposNode; /* number of positive node of switch */ const int SWnegNode; /* number of negative node of switch */ const int SWposCntrlNode; /* number of positive controlling node of switch */ const int SWnegCntrlNode; /* number of negative controlling node of switch */ double *SWposPosPtr; /* pointer to sparse matrix diagonal at (positive,positive) for switch conductance */ double *SWnegPosPtr; /* pointer to sparse matrix offdiagonal at (neagtive,positive) for switch conductance */ double *SWposNegPtr; /* pointer to sparse matrix offdiagonal at (positive,neagtive) for switch conductance */ double *SWnegNegPtr; /* pointer to sparse matrix diagonal at (neagtive,neagtive) for switch conductance */ double SWcond; /* conductance of the switch now */ unsigned SWzero_stateGiven : 1; /* flag to indicate initial state */ #ifndef NONOISE double SWnVar[NSTATVARS]; #else double *SWnVar; #endif } SWinstance; /* data per model */ #define SW_ON_CONDUCTANCE 1.0 /* default on conductance = 1 mho */ #define SW_OFF_CONDUCTANCE ckt->CKTgmin /* default off conductance */ #define SW_NUM_STATES 2 #define SWswitchstate SWstate+0 #define SWctrlvalue SWstate+1 typedef struct sSWmodel { /* model structure for a switch */ struct GENmodel gen; #define SWmodType gen.GENmodType #define SWnextModel(inst) ((struct sSWmodel *)((inst)->gen.GENnextModel)) #define SWinstances(inst) ((SWinstance *) ((inst)->gen.GENinstances)) #define SWmodName gen.GENmodName double SWonResistance; /* switch "on" resistance */ double SWoffResistance; /* switch "off" resistance */ double SWvThreshold; /* switching threshold voltage */ double SWvHysteresis; /* switching hysteresis voltage */ double SWonConduct; /* switch "on" conductance */ double SWoffConduct; /* switch "off" conductance */ unsigned SWonGiven : 1; /* flag to indicate on-resistance was specified */ unsigned SWoffGiven : 1; /* flag to indicate off-resistance was " */ unsigned SWthreshGiven : 1; /* flag to indicate threshold volt was given */ unsigned SWhystGiven : 1; /* flag to indicate hysteresis volt was given */ } SWmodel; /* device parameters */ enum { SW_IC_ON = 1, SW_IC_OFF, SW_POS_NODE, SW_NEG_NODE, SW_POS_CONT_NODE, SW_NEG_CONT_NODE, SW_CURRENT, SW_POWER, }; /* model parameters */ enum { SW_MOD_SW = 101, SW_MOD_RON, SW_MOD_ROFF, SW_MOD_VTH, SW_MOD_VHYS, SW_MOD_GON, SW_MOD_GOFF, }; /* device questions */ /* model questions */ #include "swext.h" #endif tmpk8ny_4pz/src/spicelib/devices/numd/0000755000175000017500000000000013546075722020126 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/numd/numdset.c0000644000175000017500000001565413546075722021764 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "numddefs.h" #include "ngspice/numconst.h" #include "ngspice/numenum.h" #include "ngspice/sperror.h" #include "../../../ciderlib/oned/onedext.h" #include "ngspice/cidersupt.h" #include "ngspice/ciderinp.h" #include "ngspice/suffix.h" #include "ngspice/meshext.h" #define TSCALLOC(var, size, type)\ if (size && (var =(type *)calloc(1, (unsigned)(size)*sizeof(type))) == NULL) {\ return(E_NOMEM);\ } int NUMDsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* * load the structure with those pointers needed later for fast matrix * loading */ { register NUMDmodel *model = (NUMDmodel *) inModel; register NUMDinstance *inst; METHcard *methods; MODLcard *models; OPTNcard *options; OUTPcard *outputs; int error; int xMeshSize; ONEdevice *pDevice; ONEcoord *xCoordList = NULL; ONEdomain *domainList = NULL; ONEmaterial *pM, *pMaterial = NULL, *materialList = NULL; DOPprofile *profileList = NULL; DOPtable *dopTableList = NULL; double startTime; /* loop through all the models */ for (; model != NULL; model = NUMDnextModel(model)) { if (!model->NUMDpInfo) { TSCALLOC(model->NUMDpInfo, 1, ONEtranInfo); } methods = model->NUMDmethods; if (!methods) { TSCALLOC(methods, 1, METHcard); model->NUMDmethods = methods; } models = model->NUMDmodels; if (!models) { TSCALLOC(models, 1, MODLcard); model->NUMDmodels = models; } options = model->NUMDoptions; if (!options) { TSCALLOC(options, 1, OPTNcard); model->NUMDoptions = options; } outputs = model->NUMDoutputs; if (!outputs) { TSCALLOC(outputs, 1, OUTPcard); model->NUMDoutputs = outputs; } if (!methods->METHvoltPredGiven) { methods->METHvoltPred = FALSE; } if (!methods->METHmobDerivGiven) { methods->METHmobDeriv = TRUE; } if (!methods->METHoneCarrierGiven) { methods->METHoneCarrier = FALSE; } if (!methods->METHacAnalysisMethodGiven) { methods->METHacAnalysisMethod = SOR; } if (!methods->METHdabstolGiven) { methods->METHdabstol = DABSTOL1D; } if (!methods->METHdreltolGiven) { methods->METHdreltol = ckt->CKTreltol; } if (!methods->METHitLimGiven) { methods->METHitLim = 20; } if (!methods->METHomegaGiven || methods->METHomega <= 0.0) { methods->METHomega = 2.0 * M_PI /* radians/sec */ ; } if (!options->OPTNdefaGiven || options->OPTNdefa <= 0.0) { options->OPTNdefa = 1.0e4 /* cm^2 */ ; } if (!options->OPTNdeviceTypeGiven) { options->OPTNdeviceType = OPTN_DIODE; } if (!options->OPTNicFileGiven) { options->OPTNicFile = NULL; options->OPTNunique = FALSE; /* Can't form a unique name. */ } if (!options->OPTNuniqueGiven) { options->OPTNunique = FALSE; } /* Set up the rest of the card lists */ if ((error = MODLsetup(model->NUMDmodels)) != 0) return (error); BandGapNarrowing = models->MODLbandGapNarrowing; ConcDepLifetime = models->MODLconcDepLifetime; TempDepMobility = models->MODLtempDepMobility; ConcDepMobility = models->MODLconcDepMobility; if ((error = OUTPsetup(model->NUMDoutputs)) != 0) return (error); if ((error = MATLsetup(model->NUMDmaterials, &materialList)) != 0) return (error); if ((error = MOBsetup(model->NUMDmobility, materialList)) != 0) return (error); if ((error = MESHsetup('x', model->NUMDxMeshes, &xCoordList, &xMeshSize)) != 0) return (error); if ((error = DOMNsetup(model->NUMDdomains, &domainList, xCoordList, NULL, materialList)) != 0) return (error); if ((error = BDRYsetup(model->NUMDboundaries, xCoordList, NULL, domainList)) != 0) return (error); if ((error = CONTsetup(model->NUMDcontacts, NULL)) != 0) return (error); if ((error = DOPsetup(model->NUMDdopings, &profileList, &dopTableList, xCoordList, NULL)) != 0) return (error); model->NUMDmatlInfo = materialList; model->NUMDprofiles = profileList; model->NUMDdopTables = dopTableList; /* loop through all the instances of the model */ for (inst = NUMDinstances(model); inst != NULL; inst = NUMDnextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); if ((!inst->NUMDprintGiven)) { inst->NUMDprint = 0; } else if (inst->NUMDprint <= 0) { inst->NUMDprint = 1; } if ((!inst->NUMDicFileGiven)) { if (options->OPTNunique) { inst->NUMDicFile = tprintf("%s.%s", options->OPTNicFile, inst->NUMDname); } else if (options->OPTNicFile != NULL) { inst->NUMDicFile = tprintf("%s", options->OPTNicFile); } else { inst->NUMDicFile = NULL; } } inst->NUMDstate = *states; *states += NUMDnumStates; if (!inst->NUMDpDevice) { /* Assign the mesh info to each instance. */ TSCALLOC(pDevice, 1, ONEdevice); TSCALLOC(pDevice->pStats, 1, ONEstats); pDevice->name = inst->NUMDname; pDevice->solverType = SLV_NONE; pDevice->numNodes = xMeshSize; pDevice->abstol = methods->METHdabstol; pDevice->reltol = methods->METHdreltol; pDevice->rhsImag = NULL; TSCALLOC(pDevice->elemArray, pDevice->numNodes, ONEelem *); /* Create a copy of material data that can change with temperature. */ pDevice->pMaterials = NULL; for (pM = materialList; pM != NULL; pM = pM->next) { if (pDevice->pMaterials == NULL) { TSCALLOC(pMaterial, 1, ONEmaterial); pDevice->pMaterials = pMaterial; } else { TSCALLOC(pMaterial->next, 1, ONEmaterial); pMaterial = pMaterial->next; } /* Copy everything, then fix the incorrect pointer. */ memcpy(pMaterial, pM, sizeof(ONEmaterial)); pMaterial->next = NULL; } /* generate the mesh structure for the device */ ONEbuildMesh(pDevice, xCoordList, domainList, pDevice->pMaterials); /* store the device info in the instance */ inst->NUMDpDevice = pDevice; } /* Now update the state pointers. */ ONEgetStatePointers(inst->NUMDpDevice, states); /* Wipe out statistics from previous runs (if any). */ memset(inst->NUMDpDevice->pStats, 0, sizeof(ONEstats)); inst->NUMDpDevice->pStats->totalTime[STAT_SETUP] += SPfrontEnd->IFseconds() - startTime; /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if ((inst->ptr = SMPmakeElt(matrix, inst->first, inst->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(NUMDposPosPtr, NUMDposNode, NUMDposNode); TSTALLOC(NUMDnegNegPtr, NUMDnegNode, NUMDnegNode); TSTALLOC(NUMDnegPosPtr, NUMDnegNode, NUMDposNode); TSTALLOC(NUMDposNegPtr, NUMDposNode, NUMDnegNode); } /* Clean up lists */ killCoordInfo(xCoordList); killDomainInfo(domainList); } return (OK); } tmpk8ny_4pz/src/spicelib/devices/numd/numddel.c0000644000175000017500000000071413546075722021724 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "numddefs.h" #include "../../../ciderlib/oned/onedext.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int NUMDdelete(GENinstance *gen_inst) { NUMDinstance *inst = (NUMDinstance *) gen_inst; ONEdestroy(inst->NUMDpDevice); return OK; } tmpk8ny_4pz/src/spicelib/devices/numd/numddefs.h0000644000175000017500000001030113546075722022077 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors: 1987 Karti Mayaram, 1991 David Gates **********/ #ifndef NUMD_H #define NUMD_H /* data structures used to describe 1D numerical diodes */ /* circuit level includes */ #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" /* device level includes */ #include "ngspice/onemesh.h" #include "ngspice/onedev.h" #include "ngspice/profile.h" #include "ngspice/numglobs.h" #include "ngspice/carddefs.h" /* information needed per instance */ typedef struct sNUMDinstance { struct GENinstance gen; #define NUMDmodPtr(inst) ((struct sNUMDmodel *)((inst)->gen.GENmodPtr)) #define NUMDnextInstance(inst) ((struct sNUMDinstance *)((inst)->gen.GENnextInstance)) #define NUMDname gen.GENname #define NUMDstate gen.GENstate #define NUMDvoltage NUMDstate #define NUMDid NUMDstate+1 #define NUMDconduct NUMDstate+2 #define NUMDnumStates 3 const int NUMDposNode; /* number of positive node of diode */ const int NUMDnegNode; /* number of negative node of diode */ ONEdevice *NUMDpDevice; GLOBvalues NUMDglobals; /* Temp.-Dep. Global Parameters */ int NUMDtype; /* device type pn or np */ double NUMDarea; /* area factor for the diode */ double NUMDtemp; /* instance temperature */ double NUMDc11; /* small-signal capacitance */ double NUMDy11r; /* small-signal admittance, real part */ double NUMDy11i; /* small-signal admittance, imag part */ int NUMDprint; /* number of timesteps after which print * internal */ char *NUMDicFile; /* Name of initial condition file */ double *NUMDnegPosPtr; /* pointer to sparse matrix at * (negative,positive) */ double *NUMDposNegPtr; /* pointer to sparse matrix at * (positive,negative) */ double *NUMDposPosPtr; /* pointer to sparse matrix at * (positive,positive) */ double *NUMDnegNegPtr; /* pointer to sparse matrix at * (negative,negative) */ int NUMDoff; /* 'off' flag for diode */ unsigned NUMDsmSigAvail:1; /* flag to indicate small-signal done */ unsigned NUMDareaGiven:1; /* flag to indicate area was specified */ unsigned NUMDicFileGiven:1; /* flag to indicate init. cond. file given */ unsigned NUMDtempGiven:1; /* flag to indicate temp was specified */ unsigned NUMDprintGiven:1; /* flag to indicate if print was specified */ } NUMDinstance; /* per model data */ typedef struct sNUMDmodel { /* model structure for a diode */ struct GENmodel gen; #define NUMDmodType gen.GENmodType #define NUMDnextModel(inst) ((struct sNUMDmodel *)((inst)->gen.GENnextModel)) #define NUMDinstances(inst) ((NUMDinstance *)((inst)->gen.GENinstances)) #define NUMDmodName gen.GENmodName MESHcard *NUMDxMeshes; /* list of xmesh cards */ MESHcard *NUMDyMeshes; /* list of ymesh cards */ DOMNcard *NUMDdomains; /* list of domain cards */ BDRYcard *NUMDboundaries; /* list of boundary cards */ DOPcard *NUMDdopings; /* list of doping cards */ ELCTcard *NUMDelectrodes; /* list of electrode cards */ CONTcard *NUMDcontacts; /* list of contact cards */ MODLcard *NUMDmodels; /* list of model cards */ MATLcard *NUMDmaterials; /* list of material cards */ MOBcard *NUMDmobility; /* list of mobility cards */ METHcard *NUMDmethods; /* list of method cards */ OPTNcard *NUMDoptions; /* list of option cards */ OUTPcard *NUMDoutputs; /* list of output cards */ ONEtranInfo *NUMDpInfo; /* transient analysis information */ DOPprofile *NUMDprofiles; /* expanded list of doping profiles */ DOPtable *NUMDdopTables; /* list of tables used by profiles */ ONEmaterial *NUMDmatlInfo; /* list of material info structures */ } NUMDmodel; /* type of 1D diode */ #define PN 1 #define NP -1 /* device parameters */ enum { NUMD_AREA = 1, NUMD_IC_FILE, NUMD_OFF, NUMD_PRINT, NUMD_TEMP, NUMD_VD, NUMD_ID, NUMD_G11, NUMD_C11, NUMD_Y11, NUMD_G12, NUMD_C12, NUMD_Y12, NUMD_G21, NUMD_C21, NUMD_Y21, NUMD_G22, NUMD_C22, NUMD_Y22, }; /* model parameters */ /* NOTE: all true model parameters have been moved to IFcardInfo structures */ #define NUMD_MOD_NUMD 101 /* device questions */ /* model questions */ #include "numdext.h" #endif /* NUMD_H */ tmpk8ny_4pz/src/spicelib/devices/numd/Makefile.am0000644000175000017500000000071313546075722022163 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libnumd.la libnumd_la_SOURCES = \ numd.c \ numdacld.c \ numdask.c \ numddefs.h \ numddel.c \ numddump.c \ numdext.h \ numdinit.c \ numdinit.h \ numditf.h \ numdload.c \ numdmpar.c \ numdparm.c \ numdpzld.c \ numdset.c \ numdtemp.c \ numdtrun.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/numd/numditf.h0000644000175000017500000000027013546075722021744 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_NUMD #define DEV_NUMD extern SPICEdev *get_numd_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/numd/numdparm.c0000644000175000017500000000176613546075722022127 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/const.h" #include "numddefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int NUMDparam(int param, IFvalue *value, GENinstance *inInst, IFvalue *select) { NUMDinstance *inst = (NUMDinstance *) inInst; NG_IGNORE(select); switch (param) { case NUMD_AREA: inst->NUMDarea = value->rValue; inst->NUMDareaGiven = TRUE; break; case NUMD_OFF: inst->NUMDoff = TRUE; break; case NUMD_IC_FILE: inst->NUMDicFile = value->sValue; inst->NUMDicFileGiven = TRUE; break; case NUMD_PRINT: inst->NUMDprint = value->iValue; inst->NUMDprintGiven = TRUE; break; case NUMD_TEMP: inst->NUMDtemp = value->rValue + CONSTCtoK; inst->NUMDtempGiven = TRUE; break; default: return (E_BADPARM); } return (OK); } tmpk8ny_4pz/src/spicelib/devices/numd/numdload.c0000644000175000017500000002747213546075722022111 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/cktdefs.h" #include "numddefs.h" #include "ngspice/numenum.h" #include "ngspice/trandefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "../../../ciderlib/oned/onedext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" /* Forward declarations */ int NUMDinitSmSig(NUMDinstance *); /* External Declarations */ extern int ONEdcDebug; extern int ONEtranDebug; extern int ONEacDebug; int NUMDload(GENmodel *inModel, CKTcircuit *ckt) { register NUMDmodel *model = (NUMDmodel *) inModel; register NUMDinstance *inst; register ONEdevice *pDevice; double startTime, startTime2, totalTime, totalTime2; double tol; /* temporary for tolerance calculations */ double id; double ideq; double idhat = 0.0; double delVd; double vd; /* current diode voltage */ double gd; double xfact; int check; int i; double deltaNorm[7]; int devConverged = FALSE; int numDevNonCon; int deviceType; int doInitSolve; int doVoltPred; char *initStateName; /* loop through all the diode models */ for (; model != NULL; model = NUMDnextModel(model)) { /* Do model things */ FieldDepMobility = model->NUMDmodels->MODLfieldDepMobility; Srh = model->NUMDmodels->MODLsrh; Auger = model->NUMDmodels->MODLauger; AvalancheGen = model->NUMDmodels->MODLavalancheGen; MobDeriv = model->NUMDmethods->METHmobDeriv; MaxIterations = model->NUMDmethods->METHitLim; ONEdcDebug = model->NUMDoutputs->OUTPdcDebug; ONEtranDebug = model->NUMDoutputs->OUTPtranDebug; ONEacDebug = model->NUMDoutputs->OUTPacDebug; deviceType = model->NUMDoptions->OPTNdeviceType; doVoltPred = model->NUMDmethods->METHvoltPred; if (ckt->CKTmode & MODEINITPRED) { /* compute normalized deltas and predictor coeff */ if (!(ckt->CKTmode & MODEDCTRANCURVE)) { model->NUMDpInfo->order = ckt->CKTorder; model->NUMDpInfo->method = ckt->CKTintegrateMethod; for (i = 0; i <= ckt->CKTmaxOrder; i++) { deltaNorm[i] = ckt->CKTdeltaOld[i] / TNorm; } computeIntegCoeff(ckt->CKTintegrateMethod, ckt->CKTorder, model->NUMDpInfo->intCoeff, deltaNorm); computePredCoeff(ckt->CKTintegrateMethod, ckt->CKTorder, model->NUMDpInfo->predCoeff, deltaNorm); } } else if (ckt->CKTmode & MODEINITTRAN) { model->NUMDpInfo->order = ckt->CKTorder; model->NUMDpInfo->method = ckt->CKTintegrateMethod; for (i = 0; i <= ckt->CKTmaxOrder; i++) { deltaNorm[i] = ckt->CKTdeltaOld[i] / TNorm; } computeIntegCoeff(ckt->CKTintegrateMethod, ckt->CKTorder, model->NUMDpInfo->intCoeff, deltaNorm); } /* Now do instance things */ for (inst = NUMDinstances(model); inst != NULL; inst = NUMDnextInstance(inst)) { pDevice = inst->NUMDpDevice; totalTime = 0.0; startTime = SPfrontEnd->IFseconds(); /* Get Temp.-Dep. Global Parameters */ GLOBgetGlobals(&(inst->NUMDglobals)); /* * this routine loads diodes for dc and transient analyses. */ pDevice->devStates = ckt->CKTstates; /* * initialization */ check = 1; doInitSolve = FALSE; initStateName = NULL; if (ckt->CKTmode & MODEINITSMSIG) { vd = *(ckt->CKTstate0 + inst->NUMDvoltage); delVd = 0.0; NUMDsetBCs(pDevice, vd); } else if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate0 + inst->NUMDvoltage) = *(ckt->CKTstate1 + inst->NUMDvoltage); vd = *(ckt->CKTstate1 + inst->NUMDvoltage); ONEsaveState(pDevice); delVd = 0.0; } else if ((ckt->CKTmode & MODEINITJCT) && (ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) { doInitSolve = TRUE; initStateName = inst->NUMDicFile; vd = 0.0; delVd = vd; } else if ((ckt->CKTmode & MODEINITJCT) && inst->NUMDoff) { doInitSolve = TRUE; vd = 0.0; delVd = vd; } else if (ckt->CKTmode & MODEINITJCT) { doInitSolve = TRUE; initStateName = inst->NUMDicFile; if (deviceType == OPTN_DIODE) { vd = inst->NUMDtype * 0.5; } else if (deviceType == OPTN_MOSCAP) { vd = inst->NUMDtype * 0.8; } else { vd = 0.0; } delVd = vd; } else if (ckt->CKTmode & MODEINITFIX && inst->NUMDoff) { vd = 0.0; delVd = vd; } else { if (ckt->CKTmode & MODEINITPRED) { *(ckt->CKTstate0 + inst->NUMDvoltage) = *(ckt->CKTstate1 + inst->NUMDvoltage); *(ckt->CKTstate0 + inst->NUMDid) = *(ckt->CKTstate1 + inst->NUMDid); *(ckt->CKTstate0 + inst->NUMDconduct) = *(ckt->CKTstate1 + inst->NUMDconduct); /* compute the normalized deltas */ if (!(ckt->CKTmode & MODEDCTRANCURVE)) { /* no linear prediction on device voltages */ vd = *(ckt->CKTstate1 + inst->NUMDvoltage); ONEpredict(pDevice, model->NUMDpInfo); } else { if (doVoltPred) { /* linear prediction */ xfact=ckt->CKTdelta/ckt->CKTdeltaOld[1]; vd = (1+xfact) * (*(ckt->CKTstate1 + inst->NUMDvoltage)) - (xfact) * (*(ckt->CKTstate2 + inst->NUMDvoltage)); } else { vd = *(ckt->CKTstate1 + inst->NUMDvoltage); } } } else { vd = *(ckt->CKTrhsOld + inst->NUMDposNode) - *(ckt->CKTrhsOld + inst->NUMDnegNode); } delVd = vd - *(ckt->CKTstate0 + inst->NUMDvoltage); idhat = *(ckt->CKTstate0 + inst->NUMDid) + *(ckt->CKTstate0 + inst->NUMDconduct) * delVd; /* * bypass if solution has not changed */ if ((ckt->CKTbypass) && pDevice->converged && !(ckt->CKTmode & MODEINITPRED)) { tol = ckt->CKTvoltTol + ckt->CKTreltol * MAX(fabs(vd), fabs(*(ckt->CKTstate0 + inst->NUMDvoltage))); if (fabs(delVd) < tol) { tol = ckt->CKTreltol * MAX(fabs(idhat), fabs(*(ckt->CKTstate0 + inst->NUMDid))) + ckt->CKTabstol; if (fabs(idhat - *(ckt->CKTstate0 + inst->NUMDid)) < tol) { vd = *(ckt->CKTstate0 + inst->NUMDvoltage); id = *(ckt->CKTstate0 + inst->NUMDid); gd = *(ckt->CKTstate0 + inst->NUMDconduct); goto load; } } } /* * limit new junction voltage */ if (deviceType == OPTN_DIODE) { vd = inst->NUMDtype * limitJunctionVoltage(inst->NUMDtype * vd, inst->NUMDtype * *(ckt->CKTstate0 + inst->NUMDvoltage), &check); } else if (deviceType == OPTN_MOSCAP) { vd = inst->NUMDtype * limitVgb(inst->NUMDtype * vd, inst->NUMDtype * *(ckt->CKTstate0 + inst->NUMDvoltage), &check); } else { vd = inst->NUMDtype * limitResistorVoltage(inst->NUMDtype * vd, inst->NUMDtype * *(ckt->CKTstate0 + inst->NUMDvoltage), &check); } delVd = vd - *(ckt->CKTstate0 + inst->NUMDvoltage); } if (doInitSolve) { if (ONEdcDebug) { printVoltages(stdout, model->NUMDmodName, inst->NUMDname, deviceType, 1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); } startTime2 = SPfrontEnd->IFseconds(); ONEequilSolve(pDevice); totalTime2 = SPfrontEnd->IFseconds() - startTime2; pDevice->pStats->totalTime[STAT_SETUP] += totalTime2; pDevice->pStats->totalTime[STAT_DC] -= totalTime2; ONEbiasSolve(pDevice, MaxIterations, FALSE, NULL); *(ckt->CKTstate0 + inst->NUMDvoltage) = 0.0; if (initStateName != NULL) { if (ONEreadState(pDevice, initStateName, 1, &vd, NULL ) < 0) { fprintf(stderr, "NUMDload: trouble reading state-file %s\n", initStateName); } else { NUMDsetBCs(pDevice, vd); delVd = 0.0; } } } /* * compute dc current and derivatives */ /* use the routines for numerical simulation */ if (ckt->CKTmode & (MODEDCOP | MODETRANOP | MODEDCTRANCURVE | MODEINITSMSIG)) { numDevNonCon = 0; inst->NUMDc11 = inst->NUMDy11r = inst->NUMDy11i = 0.0; inst->NUMDsmSigAvail = FALSE; devNonCon: NUMDproject(pDevice, delVd); if (ONEdcDebug) { printVoltages(stdout, model->NUMDmodName, inst->NUMDname, deviceType, 1, vd, delVd, 0.0, 0.0, 0.0, 0.0); } ONEbiasSolve(pDevice, MaxIterations, FALSE, NULL); devConverged = pDevice->converged; if (devConverged && finite(pDevice->rhsNorm)) { /* Get the current and conductance information. */ NUMDcurrent(pDevice, FALSE, NULL, &id); NUMDconductance(pDevice, FALSE, NULL, &gd); } else { /* reduce the voltage step until converged */ /* restore the boundary potential to previous value */ NUMDsetBCs(pDevice, vd - delVd); ONEstoreInitialGuess(pDevice); ONEresetJacobian(pDevice); delVd *= 0.5; vd = delVd + *(ckt->CKTstate0 + inst->NUMDvoltage); numDevNonCon++; check = 1; if (numDevNonCon > 10) { printVoltages(stderr, model->NUMDmodName, inst->NUMDname, deviceType, 1, vd, delVd, 0.0, 0.0, 0.0, 0.0); fprintf(stderr, "*** Non-convergence during load ***\n"); totalTime += SPfrontEnd->IFseconds() - startTime; pDevice->pStats->totalTime[STAT_DC] += totalTime; ckt->CKTtroubleElt = (GENinstance *) inst; return (E_BADMATRIX); } else { goto devNonCon; } } } if ( (ckt->CKTmode & (MODETRAN | MODEAC | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) { /* * store small-signal parameters */ if ((!(ckt->CKTmode & MODETRANOP)) || (!(ckt->CKTmode & MODEUIC))) { if (ckt->CKTmode & MODEINITSMSIG) { totalTime = SPfrontEnd->IFseconds() - startTime; pDevice->pStats->totalTime[STAT_DC] += totalTime; startTime2 = SPfrontEnd->IFseconds(); NUMDinitSmSig(inst); pDevice->pStats->totalTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime2; continue; } else { inst->NUMDsmSigAvail = FALSE; } /* * transient analysis */ if (ckt->CKTmode & MODEINITPRED) { NUMDsetBCs(pDevice, vd); ONEstoreInitialGuess(pDevice); } else { NUMDupdate(pDevice, delVd, TRUE); } if (ONEtranDebug) { printVoltages(stdout, model->NUMDmodName, inst->NUMDname, deviceType, 1, vd, delVd, 0.0, 0.0, 0.0, 0.0); } ONEbiasSolve(pDevice, 0, TRUE, model->NUMDpInfo); if (!finite(pDevice->rhsNorm)) { totalTime += SPfrontEnd->IFseconds() - startTime; pDevice->pStats->totalTime[STAT_TRAN] += totalTime; ckt->CKTtroubleElt = (GENinstance *) inst; return (E_BADMATRIX); } pDevice->converged = devConverged = ONEdeviceConverged(pDevice); /* extract the current and conductance information */ NUMDcurrent(pDevice, TRUE, model->NUMDpInfo->intCoeff, &id); NUMDconductance(pDevice, TRUE, model->NUMDpInfo->intCoeff, &gd); } } /* * check convergence */ if ((!(ckt->CKTmode & MODEINITFIX)) || (!(inst->NUMDoff))) { if (check == 1 || !devConverged) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) inst; } else { tol = ckt->CKTreltol * MAX(fabs(idhat), fabs(id)) + ckt->CKTabstol; if (fabs(idhat - id) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) inst; } } } *(ckt->CKTstate0 + inst->NUMDvoltage) = vd; *(ckt->CKTstate0 + inst->NUMDid) = id; *(ckt->CKTstate0 + inst->NUMDconduct) = gd; load: /* * load current vector */ ideq = id - gd * vd; *(ckt->CKTrhs + inst->NUMDnegNode) += ideq; *(ckt->CKTrhs + inst->NUMDposNode) -= ideq; /* * load matrix */ *(inst->NUMDposPosPtr) += gd; *(inst->NUMDnegNegPtr) += gd; *(inst->NUMDnegPosPtr) -= gd; *(inst->NUMDposNegPtr) -= gd; totalTime += SPfrontEnd->IFseconds() - startTime; if (ckt->CKTmode & MODETRAN) { pDevice->pStats->totalTime[STAT_TRAN] += totalTime; } else { pDevice->pStats->totalTime[STAT_DC] += totalTime; } } } return (OK); } int NUMDinitSmSig(NUMDinstance *inst) { SPcomplex yd; double omega = NUMDmodPtr(inst)->NUMDmethods->METHomega; AcAnalysisMethod = SOR_ONLY; (void) NUMDadmittance(inst->NUMDpDevice, omega, &yd); inst->NUMDc11 = yd.imag / omega; inst->NUMDy11r = yd.real; inst->NUMDy11i = yd.imag; inst->NUMDsmSigAvail = TRUE; return (OK); } tmpk8ny_4pz/src/spicelib/devices/numd/numdext.h0000644000175000017500000000161413546075722021765 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Karti Mayaram **********/ #ifndef NUMDEXT_H #define NUMDEXT_H extern int NUMDacLoad(GENmodel *, CKTcircuit *); extern int NUMDask(CKTcircuit *, GENinstance *, int, IFvalue *, IFvalue *); extern int NUMDdelete(GENinstance *); extern int NUMDgetic(GENmodel *, CKTcircuit *); extern int NUMDload(GENmodel *, CKTcircuit *); extern int NUMDmParam(int, IFvalue *, GENmodel *); extern int NUMDparam(int, IFvalue *, GENinstance *, IFvalue *); extern int NUMDpzLoad(GENmodel *, CKTcircuit *, SPcomplex *); extern int NUMDsetup(SMPmatrix *, GENmodel *, CKTcircuit *, int *); extern int NUMDtemp(GENmodel *, CKTcircuit *); extern int NUMDtrunc(GENmodel *, CKTcircuit *, double *); extern void NUMDdump(GENmodel *, CKTcircuit *); extern void NUMDacct(GENmodel *, CKTcircuit *, FILE *); #endif /* NUMDEXT_H */ tmpk8ny_4pz/src/spicelib/devices/numd/numdask.c0000644000175000017500000000572713546075722021747 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "numddefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* Check out this one */ extern int NUMDinitSmSig(NUMDinstance *); /* ARGSUSED */ int NUMDask(CKTcircuit *ckt, GENinstance *inInst, int which, IFvalue *value, IFvalue *select) { NUMDinstance *inst = (NUMDinstance *) inInst; NG_IGNORE(select); switch (which) { case NUMD_AREA: value->rValue = inst->NUMDarea; return (OK); case NUMD_TEMP: value->rValue = inst->NUMDtemp - CONSTCtoK; return (OK); case NUMD_VD: value->rValue = *(ckt->CKTstate0 + inst->NUMDvoltage); return (OK); case NUMD_ID: value->rValue = *(ckt->CKTstate0 + inst->NUMDid); return (OK); case NUMD_G11: value->rValue = *(ckt->CKTstate0 + inst->NUMDconduct); return (OK); case NUMD_G12: value->rValue = -*(ckt->CKTstate0 + inst->NUMDconduct); return (OK); case NUMD_G21: value->rValue = -*(ckt->CKTstate0 + inst->NUMDconduct); return (OK); case NUMD_G22: value->rValue = *(ckt->CKTstate0 + inst->NUMDconduct); return (OK); case NUMD_C11: if (!inst->NUMDsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMDinitSmSig(inst); } value->rValue = inst->NUMDc11; return (OK); case NUMD_C12: if (!inst->NUMDsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMDinitSmSig(inst); } value->rValue = -inst->NUMDc11; return (OK); case NUMD_C21: if (!inst->NUMDsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMDinitSmSig(inst); } value->rValue = -inst->NUMDc11; return (OK); case NUMD_C22: if (!inst->NUMDsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMDinitSmSig(inst); } value->rValue = inst->NUMDc11; return (OK); case NUMD_Y11: if (!inst->NUMDsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMDinitSmSig(inst); } value->cValue.real = inst->NUMDy11r; value->cValue.imag = inst->NUMDy11i; return (OK); case NUMD_Y12: if (!inst->NUMDsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMDinitSmSig(inst); } value->cValue.real = -inst->NUMDy11r; value->cValue.imag = -inst->NUMDy11i; return (OK); case NUMD_Y21: if (!inst->NUMDsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMDinitSmSig(inst); } value->cValue.real = -inst->NUMDy11r; value->cValue.imag = -inst->NUMDy11i; return (OK); case NUMD_Y22: if (!inst->NUMDsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMDinitSmSig(inst); } value->cValue.real = inst->NUMDy11r; value->cValue.imag = inst->NUMDy11i; return (OK); default: return (E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/numd/numdtemp.c0000644000175000017500000000707213546075722022131 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1992 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "numddefs.h" #include "ngspice/numenum.h" #include "ngspice/carddefs.h" #include "ngspice/sperror.h" #include "../../../ciderlib/oned/onedext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" int NUMDtemp(GENmodel *inModel, CKTcircuit *ckt) /* * perform the temperature update to the diode */ { register NUMDmodel *model = (NUMDmodel *) inModel; register NUMDinstance *inst; METHcard *methods; MODLcard *models; OPTNcard *options; OUTPcard *outputs; ONEmaterial *pM, *pMaterial, *pNextMaterial; double startTime; /* loop through all the diode models */ for (; model != NULL; model = NUMDnextModel(model)) { methods = model->NUMDmethods; models = model->NUMDmodels; options = model->NUMDoptions; outputs = model->NUMDoutputs; if (!options->OPTNtnomGiven) { options->OPTNtnom = ckt->CKTnomTemp; } for (pM = model->NUMDmatlInfo; pM != NULL; pM = pM->next) { pM->tnom = options->OPTNtnom; } BandGapNarrowing = models->MODLbandGapNarrowing; ConcDepLifetime = models->MODLconcDepLifetime; TempDepMobility = models->MODLtempDepMobility; ConcDepMobility = models->MODLconcDepMobility; for (inst = NUMDinstances(model); inst != NULL; inst = NUMDnextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); if (!inst->NUMDtempGiven) { inst->NUMDtemp = ckt->CKTtemp; } if (!inst->NUMDareaGiven || inst->NUMDarea <= 0.0) { inst->NUMDarea = 1.0; } inst->NUMDpDevice->area = inst->NUMDarea * options->OPTNdefa; /* Compute and save globals for this instance. */ GLOBcomputeGlobals(&(inst->NUMDglobals), inst->NUMDtemp); if (outputs->OUTPglobals) { GLOBprnGlobals(stdout, &(inst->NUMDglobals)); } /* Calculate new sets of material parameters. */ pM = model->NUMDmatlInfo; pMaterial = inst->NUMDpDevice->pMaterials; for (; pM != NULL; pM = pM->next, pMaterial = pMaterial->next) { /* Copy the original values, then fix the incorrect pointer. */ pNextMaterial = pMaterial->next; memcpy(pMaterial, pM, sizeof(ONEmaterial)); pMaterial->next = pNextMaterial; /* Now do the temperature dependence. */ MATLtempDep(pMaterial, pMaterial->tnom); if (outputs->OUTPmaterial) { printMaterialInfo(pMaterial); } } /* Assign doping to the mesh. */ ONEsetDoping(inst->NUMDpDevice, model->NUMDprofiles, model->NUMDdopTables); /* Assign other physical parameters to the mesh. */ ONEsetup(inst->NUMDpDevice); /* Assign boundary condition parameters. */ ONEsetBCparams(inst->NUMDpDevice, model->NUMDboundaries, model->NUMDcontacts); /* Normalize everything. */ ONEnormalize(inst->NUMDpDevice); /* Find the device's polarity type. */ switch (options->OPTNdeviceType) { case OPTN_DIODE: if (inst->NUMDpDevice->elemArray[1] ->pNodes[0]->netConc < 0.0) { inst->NUMDtype = PN; } else { inst->NUMDtype = NP; } break; case OPTN_MOSCAP: if (inst->NUMDpDevice->elemArray[inst->NUMDpDevice->numNodes - 1] ->pNodes[1]->netConc < 0.0) { inst->NUMDtype = PN; } else { inst->NUMDtype = NP; } break; default: inst->NUMDtype = PN; break; } inst->NUMDpDevice->pStats->totalTime[STAT_SETUP] += SPfrontEnd->IFseconds() - startTime; } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/numd/numd.c0000644000175000017500000000367613546075722021251 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "numddefs.h" #include "ngspice/suffix.h" IFparm NUMDpTable[] = { /* parameters */ IP("off", NUMD_OFF, IF_FLAG, "Initially off"), IP("ic.file", NUMD_IC_FILE, IF_REAL, "Initial conditions file"), IOP("area", NUMD_AREA, IF_REAL, "Area factor"), IP("save", NUMD_PRINT, IF_INTEGER, "Save Solutions"), IPR("print", NUMD_PRINT, IF_INTEGER, "Print Solutions"), OP("vd", NUMD_VD, IF_REAL, "Voltage"), OPR("voltage", NUMD_VD, IF_REAL, "Voltage"), OP("id", NUMD_ID, IF_REAL, "Current"), OPR("current", NUMD_ID, IF_REAL, "Current"), OP("g11", NUMD_G11, IF_REAL, "Conductance"), OPR("conductance", NUMD_G11, IF_REAL, "Conductance"), OP("c11", NUMD_C11, IF_REAL, "Capacitance"), OPR("capacitance", NUMD_C11, IF_REAL, "Capacitance"), OP("y11", NUMD_Y11, IF_COMPLEX, "Admittance"), OPU("g12", NUMD_G12, IF_REAL, "Conductance"), OPU("c12", NUMD_C12, IF_REAL, "Capacitance"), OPU("y12", NUMD_Y12, IF_COMPLEX, "Admittance"), OPU("g21", NUMD_G21, IF_REAL, "Conductance"), OPU("c21", NUMD_C21, IF_REAL, "Capacitance"), OPU("y21", NUMD_Y21, IF_COMPLEX, "Admittance"), OPU("g22", NUMD_G22, IF_REAL, "Conductance"), OPU("c22", NUMD_C22, IF_REAL, "Capacitance"), OPU("y22", NUMD_Y22, IF_COMPLEX, "Admittance"), IOP("temp", NUMD_TEMP, IF_REAL, "Instance Temperature") }; IFparm NUMDmPTable[] = { /* model parameters */ /* numerical-device models no longer have parameters */ /* one is left behind to keep the table from being empty */ IP("numd", NUMD_MOD_NUMD, IF_REAL, "Numerical Diode") }; char *NUMDnames[] = { "D+", "D-" }; int NUMDnSize = NUMELEMS(NUMDnames); int NUMDpTSize = NUMELEMS(NUMDpTable); int NUMDmPTSize = NUMELEMS(NUMDmPTable); int NUMDiSize = sizeof(NUMDinstance); int NUMDmSize = sizeof(NUMDmodel); tmpk8ny_4pz/src/spicelib/devices/numd/numdmpar.c0000644000175000017500000000133613546075722022120 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * This routine sets model parameters for NUMDs in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "numddefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int NUMDmParam(int param, IFvalue *value, GENmodel *inModel) { NG_IGNORE(value); NG_IGNORE(inModel); switch (param) { case NUMD_MOD_NUMD: /* no action - already know it is a 1d-numerical diode, but this */ /* makes life easier for spice-2 like parsers */ break; default: return (E_BADPARM); } return (OK); } tmpk8ny_4pz/src/spicelib/devices/numd/numdacld.c0000644000175000017500000000441113546075722022061 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * Function to load the COMPLEX circuit matrix using the small signal * parameters saved during a previous DC operating point analysis. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "numddefs.h" #include "ngspice/sperror.h" #include "ngspice/complex.h" #include "../../../ciderlib/oned/onedext.h" #include "ngspice/cidersupt.h" #include "ngspice/numglobs.h" #include "ngspice/suffix.h" /* External Declarations */ extern int ONEacDebug; int NUMDacLoad(GENmodel *inModel, CKTcircuit *ckt) { register NUMDmodel *model = (NUMDmodel *) inModel; register NUMDinstance *inst; SPcomplex y; double startTime; /* loop through all the diode models */ for (; model != NULL; model = NUMDnextModel(model)) { FieldDepMobility = model->NUMDmodels->MODLfieldDepMobility; Srh = model->NUMDmodels->MODLsrh; Auger = model->NUMDmodels->MODLauger; AvalancheGen = model->NUMDmodels->MODLavalancheGen; AcAnalysisMethod = model->NUMDmethods->METHacAnalysisMethod; MobDeriv = model->NUMDmethods->METHmobDeriv; ONEacDebug = model->NUMDoutputs->OUTPacDebug; for (inst = NUMDinstances(model); inst != NULL; inst = NUMDnextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); /* Get Temp.-Dep. Global Parameters */ GLOBgetGlobals(&(inst->NUMDglobals)); model->NUMDmethods->METHacAnalysisMethod = NUMDadmittance(inst->NUMDpDevice, ckt->CKTomega, &y); *(inst->NUMDposPosPtr) += y.real; *(inst->NUMDposPosPtr + 1) += y.imag; *(inst->NUMDnegNegPtr) += y.real; *(inst->NUMDnegNegPtr + 1) += y.imag; *(inst->NUMDnegPosPtr) -= y.real; *(inst->NUMDnegPosPtr + 1) -= y.imag; *(inst->NUMDposNegPtr) -= y.real; *(inst->NUMDposNegPtr + 1) -= y.imag; if (ckt->CKTomega != 0.0) { inst->NUMDc11 = y.imag / ckt->CKTomega; } else { inst->NUMDc11 = 0.0; /* XXX What else can be done?! */ } inst->NUMDy11r = y.real; inst->NUMDy11i = y.imag; inst->NUMDsmSigAvail = TRUE; inst->NUMDpDevice->pStats->totalTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/numd/numdpzld.c0000644000175000017500000000347313546075722022136 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "numddefs.h" #include "../../../ciderlib/oned/onedext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" /* External Declarations */ extern int ONEacDebug; int NUMDpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { register NUMDmodel *model = (NUMDmodel *) inModel; register NUMDinstance *inst; SPcomplex y; double startTime; NG_IGNORE(ckt); /* loop through all the diode models */ for (; model != NULL; model = NUMDnextModel(model)) { FieldDepMobility = model->NUMDmodels->MODLfieldDepMobility; Srh = model->NUMDmodels->MODLsrh; Auger = model->NUMDmodels->MODLauger; AvalancheGen = model->NUMDmodels->MODLavalancheGen; AcAnalysisMethod = model->NUMDmethods->METHacAnalysisMethod; MobDeriv = model->NUMDmethods->METHmobDeriv; ONEacDebug = model->NUMDoutputs->OUTPacDebug; for (inst = NUMDinstances(model); inst != NULL; inst = NUMDnextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); /* Get Temp.-Dep. Global Parameters */ GLOBgetGlobals(&(inst->NUMDglobals)); NUMDys(inst->NUMDpDevice, s, &y); *(inst->NUMDposPosPtr) += y.real; *(inst->NUMDposPosPtr + 1) += y.imag; *(inst->NUMDnegNegPtr) += y.real; *(inst->NUMDnegNegPtr + 1) += y.imag; *(inst->NUMDnegPosPtr) -= y.real; *(inst->NUMDnegPosPtr + 1) -= y.imag; *(inst->NUMDposNegPtr) -= y.real; *(inst->NUMDposNegPtr + 1) -= y.imag; inst->NUMDpDevice->pStats->totalTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/numd/numdinit.c0000644000175000017500000000315113546075722022121 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "numditf.h" #include "numdext.h" #include "numdinit.h" SPICEdev NUMDinfo = { .DEVpublic = { .name = "NUMD", .description = "1D Numerical Junction Diode model", .terms = &NUMDnSize, .numNames = &NUMDnSize, .termNames = NUMDnames, .numInstanceParms = &NUMDpTSize, .instanceParms = NUMDpTable, .numModelParms = &NUMDmPTSize, .modelParms = NUMDmPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = NUMDparam, .DEVmodParam = NUMDmParam, .DEVload = NUMDload, .DEVsetup = NUMDsetup, .DEVunsetup = NULL, .DEVpzSetup = NUMDsetup, .DEVtemperature = NUMDtemp, .DEVtrunc = NUMDtrunc, .DEVfindBranch = NULL, .DEVacLoad = NUMDacLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NUMDdelete, .DEVsetic = NULL, .DEVask = NUMDask, .DEVmodAsk = NULL, .DEVpzLoad = NUMDpzLoad, .DEVconvTest = NULL, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &NUMDiSize, .DEVmodSize = &NUMDmSize, #ifdef CIDER .DEVdump = NUMDdump, .DEVacct = NUMDacct, #endif }; SPICEdev * get_numd_info(void) { return &NUMDinfo; } tmpk8ny_4pz/src/spicelib/devices/numd/numdinit.h0000644000175000017500000000037013546075722022126 0ustar carstencarsten#ifndef _NUMDINIT_H #define _NUMDINIT_H extern IFparm NUMDpTable[ ]; extern IFparm NUMDmPTable[ ]; extern char *NUMDnames[ ]; extern int NUMDpTSize; extern int NUMDmPTSize; extern int NUMDnSize; extern int NUMDiSize; extern int NUMDmSize; #endif tmpk8ny_4pz/src/spicelib/devices/numd/numddump.c0000644000175000017500000001021613546075722022123 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ /* * This is a simple routine to dump the internal device states. It produces * states for .OP, .DC, & .TRAN simulations. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "numddefs.h" #include "../../../ciderlib/oned/onedext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" /* Forward Declarations */ static void NUMDputHeader(FILE *, CKTcircuit *, NUMDinstance *); /* State Counter */ static int state_numOP = 0; static int state_numDC = 0; static int state_numTR = 0; void NUMDdump(GENmodel *inModel, CKTcircuit *ckt) { register NUMDmodel *model = (NUMDmodel *) inModel; register NUMDinstance *inst; OUTPcard *output; FILE *fpState; char fileName[BSIZE_SP]; char description[BSIZE_SP]; char *prefix; int *state_num; int anyOutput = 0; if (ckt->CKTmode & MODEDCOP) { prefix = "OP"; state_num = &state_numOP; sprintf(description, "..."); } else if (ckt->CKTmode & MODEDCTRANCURVE) { prefix = "DC"; state_num = &state_numDC; sprintf(description, "sweep = % e", ckt->CKTtime); } else if (ckt->CKTmode & MODETRAN) { prefix = "TR"; state_num = &state_numTR; sprintf(description, "time = % e", ckt->CKTtime); } else { /* Not a recognized CKT mode. */ return; } for (; model != NULL; model = NUMDnextModel(model)) { output = model->NUMDoutputs; for (inst = NUMDinstances(model); inst != NULL; inst = NUMDnextInstance(inst)) { if (inst->NUMDprintGiven) { if ((ckt->CKTmode & MODETRAN) && ((ckt->CKTstat->STATaccepted - 1) % inst->NUMDprint != 0)) { continue; } anyOutput = 1; sprintf(fileName, "%s%s.%d.%s", output->OUTProotFile, prefix, *state_num, inst->NUMDname); if ((fpState = fopen(fileName, "wb")) == NULL) { perror(fileName); } else { NUMDputHeader(fpState, ckt, inst); ONEprnSolution(fpState, inst->NUMDpDevice, model->NUMDoutputs); fclose(fpState); LOGmakeEntry(fileName, description); } } } } if (anyOutput) { (*state_num)++; } } #define NUMDnumOutputs 4 static void NUMDputHeader(FILE *file, CKTcircuit *ckt, NUMDinstance *inst) { char *reference; double refVal = 0.0; int numVars = NUMDnumOutputs; if (ckt->CKTmode & MODEDCOP) { reference = NULL; } else if (ckt->CKTmode & MODEDCTRANCURVE) { reference = "sweep"; refVal = ckt->CKTtime; numVars++; } else if (ckt->CKTmode & MODETRAN) { reference = "time"; refVal = ckt->CKTtime; numVars++; } else { reference = NULL; } fprintf(file, "Title: Device %s external state\n", inst->NUMDname); fprintf(file, "Plotname: Device Operating Point\n"); fprintf(file, "Command: deftype v conductance S\n"); fprintf(file, "Flags: real\n"); fprintf(file, "No. Variables: %d\n", numVars); fprintf(file, "No. Points: 1\n"); numVars = 0; fprintf(file, "Variables:\n"); if (reference) { fprintf(file, "\t%d %s unknown\n", numVars++, reference); } fprintf(file, "\t%d v12 voltage\n", numVars++); fprintf(file, "\t%d i1 current\n", numVars++); fprintf(file, "\t%d i2 current\n", numVars++); fprintf(file, "\t%d g11 conductance\n", numVars++); fprintf(file, "Values:\n0"); if (reference) { fprintf(file, "\t% e\n", refVal); } fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NUMDvoltage)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NUMDid)); fprintf(file, "\t% e\n", - *(ckt->CKTstate0 + inst->NUMDid)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NUMDconduct)); } void NUMDacct(GENmodel *inModel, CKTcircuit *ckt, FILE *file) { register NUMDmodel *model = (NUMDmodel *) inModel; register NUMDinstance *inst; OUTPcard *output; NG_IGNORE(ckt); for (; model != NULL; model = NUMDnextModel(model)) { output = model->NUMDoutputs; for (inst = NUMDinstances(model); inst != NULL; inst = NUMDnextInstance(inst)) { if (output->OUTPstats) { ONEmemStats(file, inst->NUMDpDevice); ONEcpuStats(file, inst->NUMDpDevice); } } } } tmpk8ny_4pz/src/spicelib/devices/numd/numdtrun.c0000644000175000017500000000241413546075722022147 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "numddefs.h" #include "ngspice/sperror.h" #include "../../../ciderlib/oned/onedext.h" #include "ngspice/suffix.h" #include "ngspice/cidersupt.h" int NUMDtrunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { register NUMDmodel *model = (NUMDmodel *) inModel; register NUMDinstance *inst; double deltaNew; double deltaNorm[7]; double startTime; int i; for (i = 0; i <= ckt->CKTmaxOrder; i++) { deltaNorm[i] = ckt->CKTdeltaOld[i] / TNorm; } for (; model != NULL; model = NUMDnextModel(model)) { model->NUMDpInfo->order = ckt->CKTorder; model->NUMDpInfo->delta = deltaNorm; model->NUMDpInfo->lteCoeff = computeLTECoeff(model->NUMDpInfo); for (inst = NUMDinstances(model); inst != NULL; inst = NUMDnextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); deltaNew = ONEtrunc(inst->NUMDpDevice, model->NUMDpInfo, ckt->CKTdelta); *timeStep = MIN(*timeStep, deltaNew); inst->NUMDpDevice->pStats->totalTime[STAT_TRAN] += SPfrontEnd->IFseconds() - startTime; } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/cpl/0000755000175000017500000000000013546075722017741 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/cpl/Makefile.am0000644000175000017500000000061113546075722021773 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libcpl.la libcpl_la_SOURCES = \ cpl.c \ cplask.c \ cpldefs.h \ cplext.h \ cplinit.h \ cplitf.h \ cplmask.c \ cplparam.c \ cplload.c \ cplmpar.c \ cplsetup.c \ cplinit.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/cpl/cplparam.c0000644000175000017500000000165113546075722021707 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 Charles Hough **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "cpldefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int CPLparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { CPLinstance *here = (CPLinstance *)inst; NG_IGNORE(select); switch(param) { case CPL_POS_NODE: here->in_node_names = value->v.vec.sVec; break; case CPL_NEG_NODE: here->out_node_names = value->v.vec.sVec; break; case CPL_DIM: here->dimension = value->iValue; break; case CPL_LENGTH: here->CPLlength = value->rValue; here->CPLlengthGiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/cpl/cplsetup.c0000644000175000017500000015745313546075722021763 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 Charles Hough Modified: 2004 Paolo Nenzi - (ng)spice integration **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "cpldefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/multi_line.h" #define VECTOR_ALLOC(type, vec, n) { \ vec = TMALLOC(type *, n); \ } #define MATRIX_ALLOC(type, mat, m, j) { \ int k; \ mat = TMALLOC(type **, m); \ for (k = 0; k < m; k++) { \ VECTOR_ALLOC(type, mat[k], j); \ } \ } #define VECTOR_FREE(vec) tfree(vec) #define MATRIX_FREE(mat, m, j) { \ int k; \ for (k = 0; k < m; k++) { \ tfree(mat[k]); \ } \ tfree(mat); \ } #define MAX_DEG 8 #define epsilon 1.0e-88 #define MAX_STRING 128 static double ZY[MAX_DIM][MAX_DIM]; static double Sv[MAX_DIM][MAX_DIM]; static double D[MAX_DIM]; static double Y5[MAX_DIM][MAX_DIM]; static double Y5_1[MAX_DIM][MAX_DIM]; static double Sv_1[MAX_DIM][MAX_DIM]; static double R_m[MAX_DIM][MAX_DIM]; static double G_m[MAX_DIM][MAX_DIM]; static double L_m[MAX_DIM][MAX_DIM]; static double C_m[MAX_DIM][MAX_DIM]; static double length; static double TAU[MAX_DIM]; static double A[MAX_DIM][2*MAX_DIM]; static double frequency[MAX_DEG]; static double Si[MAX_DIM][MAX_DIM]; static double Si_1[MAX_DIM][MAX_DIM]; /* MacLaurin Series */ static double *SiSv_1[MAX_DIM][MAX_DIM]; static double *Sip[MAX_DIM][MAX_DIM]; static double *Si_1p[MAX_DIM][MAX_DIM]; static double *Sv_1p[MAX_DIM][MAX_DIM]; static double *W[MAX_DIM]; static Mult_Out IWI[MAX_DIM][MAX_DIM]; static Mult_Out IWV[MAX_DIM][MAX_DIM]; static Single_Out SIV[MAX_DIM][MAX_DIM]; static double At[4][4]; static double Scaling_F; static double Scaling_F2; /* misc.c match */ static void new_memory(int, int, int); static double *vector(int, int); static void free_vector(double*, int, int); static void polint(double*, double*, int, double, double*, double*); static int match(int, double*, double*, double*); /* static int match_x(int, double*, double*, double*); */ static int Gaussian_Elimination2(int, int); static void eval_Si_Si_1(int, double); static void loop_ZY(int, double); static void poly_matrix(double *A[MAX_DIM][MAX_DIM], int dim, int deg); /* static int checkW(double*, double); */ static void poly_W(int, int); static void eval_frequency(int, int); static void store(int, int); static void store_SiSv_1(int, int); /*static int check(); quale è il prototipo ?*/ static int coupled(int); static int generate_out(int, int); static int ReadCpL(CPLinstance*, CKTcircuit*); /* static int divC(double, double, double, double, double*, double*); */ /* mult */ static void mult_p(double*, double*, double*, int, int, int); static void matrix_p_mult(double *A[MAX_DIM][MAX_DIM], double *D[MAX_DIM], double *B[MAX_DIM][MAX_DIM], int dim, int deg, int deg_o, Mult_Out X[MAX_DIM][MAX_DIM]); static double approx_mode(double*, double*, double); static double eval2(double, double, double, double); static int get_c(double, double, double, double, double, double, double, double*, double*); static int Pade_apx(double, double*, double*, double*, double*, double*, double*, double*); static int Gaussian_Elimination(int); static double root3(double, double, double, double); static int div3(double, double, double, double, double*, double*); static int find_roots(double, double, double, double*, double*, double*); static NODE* insert_node(char*); static NDnamePt insert_ND(char*, NDnamePt*); static NODE* NEW_node(void); static NDnamePt ndn_btree; static NODE *node_tab; #define epsi_mult 1e-28 /* diag */ static MAXE_PTR sort(MAXE_PTR, double, int, int, MAXE_PTR); static void ordering(void); static MAXE_PTR delete_1(MAXE_PTR*, int); static void reordering(int, int); static void diag(int); static int rotate(int, int, int); #define epsi 1.0e-16 static char *message = "tau of coupled lines is larger than max time step"; /* ARGSUSED */ int CPLsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *state) { CPLmodel *model = (CPLmodel *)inModel; CPLinstance *here; CKTnode *tmp, *node; int error, m, p; char **branchname; int noL; NG_IGNORE(state); /* loop through all the models */ for( ; model != NULL; model = CPLnextModel(model)) { if (!model->Rmgiven) { SPfrontEnd->IFerrorf (ERR_FATAL, "model %s: lossy line series resistance not given", model->CPLmodName); return(E_BADPARM); } if (!model->Gmgiven) { SPfrontEnd->IFerrorf (ERR_FATAL, "model %s: lossy line parallel conductance not given", model->CPLmodName); return(E_BADPARM); } if (!model->Lmgiven) { SPfrontEnd->IFerrorf (ERR_FATAL, "model %s: lossy line series inductance not given", model->CPLmodName); return (E_BADPARM); } if (!model->Cmgiven) { SPfrontEnd->IFerrorf (ERR_FATAL, "model %s: lossy line parallel capacitance not given", model->CPLmodName); return (E_BADPARM); } if (!model->lengthgiven) { SPfrontEnd->IFerrorf (ERR_FATAL, "model %s: lossy line length must be given", model->CPLmodName); return (E_BADPARM); } /* loop through all the instances of the model */ for (here = CPLinstances(model); here != NULL ; here=CPLnextInstance(here)) { if (!here->CPLlengthGiven) here->CPLlength=0.0; /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) noL = here->dimension; here->CPLposNodes = TMALLOC(int, noL); here->CPLnegNodes = TMALLOC(int, noL); here->CPLibr1 = TMALLOC(int, noL); here->CPLibr2 = TMALLOC(int, noL); VECTOR_ALLOC(double, here->CPLibr1Ibr1Ptr, noL); VECTOR_ALLOC(double, here->CPLibr2Ibr2Ptr, noL); VECTOR_ALLOC(double, here->CPLposIbr1Ptr, noL); VECTOR_ALLOC(double, here->CPLnegIbr2Ptr, noL); VECTOR_ALLOC(double, here->CPLposPosPtr, noL); VECTOR_ALLOC(double, here->CPLnegNegPtr, noL); VECTOR_ALLOC(double, here->CPLnegPosPtr, noL); VECTOR_ALLOC(double, here->CPLposNegPtr, noL); MATRIX_ALLOC(double, here->CPLibr1PosPtr, noL, noL); MATRIX_ALLOC(double, here->CPLibr2NegPtr, noL, noL); MATRIX_ALLOC(double, here->CPLibr1NegPtr, noL, noL); MATRIX_ALLOC(double, here->CPLibr2PosPtr, noL, noL); MATRIX_ALLOC(double, here->CPLibr1Ibr2Ptr, noL, noL); MATRIX_ALLOC(double, here->CPLibr2Ibr1Ptr, noL, noL); branchname = TMALLOC(char *, here->dimension); if (! here->CPLibr1Given) { for (m = 0; m < here->dimension; m++) { branchname[m] = TMALLOC(char, MAX_STRING); sprintf(branchname[m], "branch1_%d", m); error = CKTmkCur(ckt, &tmp, here->CPLname, branchname[m]); if (error) return (error); here->CPLibr1[m] = tmp->number; tfree(branchname[m]); } here->CPLibr1Given = 1; } tfree(branchname); branchname = TMALLOC(char *, here->dimension); if (! here->CPLibr2Given) { for (m = 0; m < here->dimension; m++) { branchname[m] = TMALLOC(char, MAX_STRING); sprintf(branchname[m], "branch2_%d", m); error = CKTmkCur(ckt, &tmp, here->CPLname, branchname[m]); if (error) return (error); here->CPLibr2[m] = tmp->number; tfree(branchname[m]); } here->CPLibr2Given = 1; } tfree(branchname); for (m = 0; m < here->dimension; m++) { for (node = ckt->CKTnodes; node; node = node->next) { if (strcmp(here->in_node_names[m], node->name) == 0) { here->CPLposNodes[m] = node->number; } } } for (m = 0; m < here->dimension; m++) { for (node = ckt->CKTnodes; node; node = node->next) { if (strcmp(here->out_node_names[m], node->name) == 0) { here->CPLnegNodes[m] = node->number; } } } for (m = 0; m < here->dimension; m++) { TSTALLOC(CPLibr1Ibr1Ptr[m],CPLibr1[m],CPLibr1[m]); TSTALLOC(CPLibr2Ibr2Ptr[m],CPLibr2[m],CPLibr2[m]); TSTALLOC(CPLposIbr1Ptr[m],CPLposNodes[m],CPLibr1[m]); TSTALLOC(CPLnegIbr2Ptr[m],CPLnegNodes[m],CPLibr2[m]); TSTALLOC(CPLposPosPtr[m],CPLposNodes[m],CPLposNodes[m]); TSTALLOC(CPLnegNegPtr[m],CPLnegNodes[m],CPLnegNodes[m]); TSTALLOC(CPLnegPosPtr[m],CPLnegNodes[m],CPLposNodes[m]); TSTALLOC(CPLposNegPtr[m],CPLposNodes[m],CPLnegNodes[m]); for (p = 0; p < here->dimension; p++) { TSTALLOC(CPLibr1PosPtr[m][p],CPLibr1[m],CPLposNodes[p]); TSTALLOC(CPLibr2NegPtr[m][p],CPLibr2[m],CPLnegNodes[p]); TSTALLOC(CPLibr1NegPtr[m][p],CPLibr1[m],CPLnegNodes[p]); TSTALLOC(CPLibr2PosPtr[m][p],CPLibr2[m],CPLposNodes[p]); TSTALLOC(CPLibr1Ibr2Ptr[m][p],CPLibr1[m],CPLibr2[p]); TSTALLOC(CPLibr2Ibr1Ptr[m][p],CPLibr2[m],CPLibr1[p]); } } ReadCpL(here, ckt); } } return(OK); } int CPLunsetup(GENmodel *inModel, CKTcircuit *ckt) { CPLmodel *model; CPLinstance *here; int m; int noL; for (model = (CPLmodel *) inModel; model != NULL; model = CPLnextModel(model)) { for (here = CPLinstances(model); here != NULL; here = CPLnextInstance(here)) { noL = here->dimension; VECTOR_FREE(here->CPLibr1Ibr1Ptr); VECTOR_FREE(here->CPLibr2Ibr2Ptr); VECTOR_FREE(here->CPLposIbr1Ptr); VECTOR_FREE(here->CPLnegIbr2Ptr); VECTOR_FREE(here->CPLposPosPtr); VECTOR_FREE(here->CPLnegNegPtr); VECTOR_FREE(here->CPLnegPosPtr); VECTOR_FREE(here->CPLposNegPtr); MATRIX_FREE(here->CPLibr1PosPtr, noL, noL); MATRIX_FREE(here->CPLibr2NegPtr, noL, noL); MATRIX_FREE(here->CPLibr1NegPtr, noL, noL); MATRIX_FREE(here->CPLibr2PosPtr, noL, noL); MATRIX_FREE(here->CPLibr1Ibr2Ptr, noL, noL); MATRIX_FREE(here->CPLibr2Ibr1Ptr, noL, noL); for (m = 0; m < noL; m++) { if (here->CPLibr2[m]) { CKTdltNNum(ckt, here->CPLibr2[m]); here->CPLibr2[m] = 0; } } for (m = 0; m < noL; m++) { if (here->CPLibr1[m]) { CKTdltNNum(ckt, here->CPLibr1[m]); here->CPLibr1[m] = 0; } } tfree(here->CPLposNodes); tfree(here->CPLnegNodes); tfree(here->CPLibr1); tfree(here->CPLibr2); /* reset switches */ here->CPLdcGiven=0; here->CPLibr1Given = 0; here->CPLibr2Given = 0; } } return OK; } static int ReadCpL(CPLinstance *here, CKTcircuit *ckt) { int i, j, noL, counter; double f; char *name; CPLine *c, *c2; ECPLine *ec; NODE *nd; RLINE *lines[MAX_CP_TX_LINES]; ERLINE *er; c = TMALLOC(CPLine, 1); c2 = TMALLOC(CPLine, 1); c->vi_head = c->vi_tail = NULL; noL = c->noL = here->dimension; here->cplines = c; here->cplines2 = c2; for (i = 0; i < noL; i++) { ec = TMALLOC(ECPLine, 1); name = here->in_node_names[i]; nd = insert_node(name); ec->link = nd->cplptr; nd->cplptr = ec; ec->line = c; c->in_node[i] = nd; c2->in_node[i] = nd; er = TMALLOC(ERLINE, 1); er->link = nd->rlptr; nd->rlptr = er; er->rl = lines[i] = TMALLOC(RLINE, 1); er->rl->in_node = nd; c->dc1[i] = c->dc2[i] = 0.0; } for (i = 0; i < noL; i++) { ec = TMALLOC(ECPLine, 1); name = here->out_node_names[i]; nd = insert_node(name); ec->link = nd->cplptr; nd->cplptr = ec; ec->line = c; c->out_node[i] = nd; c2->out_node[i] = nd; er = TMALLOC(ERLINE, 1); er->link = nd->rlptr; nd->rlptr = er; er->rl = lines[i]; er->rl->out_node = nd; } counter = 0; for (i = 0; i < noL; i++) { for (j = 0; j < noL; j++) { if (i > j) { R_m[i][j] = R_m[j][i]; G_m[i][j] = G_m[j][i]; C_m[i][j] = C_m[j][i]; L_m[i][j] = L_m[j][i]; } else { f = CPLmodPtr(here)->Rm[counter]; R_m[i][j] = CPLmodPtr(here)->Rm[counter] = MAX(f, 1.0e-4); G_m[i][j] = CPLmodPtr(here)->Gm[counter]; L_m[i][j] = CPLmodPtr(here)->Lm[counter]; C_m[i][j] = CPLmodPtr(here)->Cm[counter]; counter++; } } } if (here->CPLlengthGiven) length = here->CPLlength; else length = CPLmodPtr(here)->length; for (i = 0; i < noL; i++) lines[i]->g = 1.0 / (R_m[i][i] * length); coupled(noL); for (i = 0; i < noL; i++) { double d, t; int k; c->taul[i] = TAU[i] * 1.0e+12; for (j = 0; j < noL; j++) { if (SIV[i][j].C_0 == 0.0) c->h1t[i][j] = NULL; else { c->h1t[i][j] = TMALLOC(TMS, 1); d = c->h1t[i][j]->aten = SIV[i][j].C_0; c->h1t[i][j]->ifImg = (int) (SIV[i][j].Poly[6] - 1.0); /* since originally 2 for img 1 for noimg */ c->h1t[i][j]->tm[0].c = SIV[i][j].Poly[0] * d; c->h1t[i][j]->tm[1].c = SIV[i][j].Poly[1] * d; c->h1t[i][j]->tm[2].c = SIV[i][j].Poly[2] * d; c->h1t[i][j]->tm[0].x = SIV[i][j].Poly[3]; c->h1t[i][j]->tm[1].x = SIV[i][j].Poly[4]; c->h1t[i][j]->tm[2].x = SIV[i][j].Poly[5]; if (c->h1t[i][j]->ifImg) c->h1C[i][j] = c->h1t[i][j]->tm[0].c + 2.0 * c->h1t[i][j]->tm[1].c; else { t = 0.0; for (k = 0; k < 3; k++) t += c->h1t[i][j]->tm[k].c; c->h1C[i][j] = t; } } for (k = 0; k < noL; k++) { if (IWI[i][j].C_0[k] == 0.0) c->h2t[i][j][k] = NULL; else { c->h2t[i][j][k] = TMALLOC(TMS, 1); d = c->h2t[i][j][k]->aten = IWI[i][j].C_0[k]; c->h2t[i][j][k]->ifImg = (int) (IWI[i][j].Poly[k][6] - 1.0); /* since originally 2 for img 1 for noimg */ c->h2t[i][j][k]->tm[0].c = IWI[i][j].Poly[k][0] * d; c->h2t[i][j][k]->tm[1].c = IWI[i][j].Poly[k][1] * d; c->h2t[i][j][k]->tm[2].c = IWI[i][j].Poly[k][2] * d; c->h2t[i][j][k]->tm[0].x = IWI[i][j].Poly[k][3]; c->h2t[i][j][k]->tm[1].x = IWI[i][j].Poly[k][4]; c->h2t[i][j][k]->tm[2].x = IWI[i][j].Poly[k][5]; if (c->h2t[i][j][k]->ifImg) c->h2C[i][j][k] = c->h2t[i][j][k]->tm[0].c + 2.0 * c->h2t[i][j][k]->tm[1].c; else c->h2C[i][j][k] = c->h2t[i][j][k]->tm[0].c + c->h2t[i][j][k]->tm[1].c + c->h2t[i][j][k]->tm[2].c; } if (IWV[i][j].C_0[k] == 0.0) c->h3t[i][j][k] = NULL; else { c->h3t[i][j][k] = TMALLOC(TMS, 1); d = c->h3t[i][j][k]->aten = IWV[i][j].C_0[k]; c->h3t[i][j][k]->ifImg = (int) (IWV[i][j].Poly[k][6] - 1.0); /* since originally 2 for img 1 for noimg */ c->h3t[i][j][k]->tm[0].c = IWV[i][j].Poly[k][0] * d; c->h3t[i][j][k]->tm[1].c = IWV[i][j].Poly[k][1] * d; c->h3t[i][j][k]->tm[2].c = IWV[i][j].Poly[k][2] * d; c->h3t[i][j][k]->tm[0].x = IWV[i][j].Poly[k][3]; c->h3t[i][j][k]->tm[1].x = IWV[i][j].Poly[k][4]; c->h3t[i][j][k]->tm[2].x = IWV[i][j].Poly[k][5]; if (c->h3t[i][j][k]->ifImg) c->h3C[i][j][k] = c->h3t[i][j][k]->tm[0].c + 2.0 * c->h3t[i][j][k]->tm[1].c; else c->h3C[i][j][k] = c->h3t[i][j][k]->tm[0].c + c->h3t[i][j][k]->tm[1].c + c->h3t[i][j][k]->tm[2].c; } } } } for (i = 0; i < noL; i++) { if (c->taul[i] < ckt->CKTmaxStep) { errMsg = TMALLOC(char, strlen(message) + 1); strcpy(errMsg,message); return(-1); } } return(1); } /**************************************************************** misc.c Miscellaneous procedures for simulation of coupled transmission lines. ****************************************************************/ static void new_memory(int dim, int deg, int deg_o) { int i, j; NG_IGNORE(deg); for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) SiSv_1[i][j] = (double *) calloc((size_t) (deg_o+1), sizeof(double)); for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) Sip[i][j] = (double *) calloc((size_t) (deg_o+1), sizeof(double)); for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) Si_1p[i][j] = (double *) calloc((size_t) (deg_o+1), sizeof(double)); for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) Sv_1p[i][j] = (double *) calloc((size_t) (deg_o+1), sizeof(double)); for (i = 0; i < dim; i++) W[i] = (double *) calloc(MAX_DEG, sizeof(double)); } /*** ***/ /**************************************************************** match Create a polynomial matching given data points ****************************************************************/ static double * vector(int nl, int nh) { double *v = TMALLOC(double, nh - nl + 1); if (!v) { fprintf(stderr, "Memory Allocation Error by tmalloc in vector().\n"); fprintf(stderr, "...now exiting to system ...\n"); controlled_exit(EXIT_FAILURE); } return v - nl; } static void free_vector(double *v, int nl, int nh) { NG_IGNORE(nh); double *freev = v + nl; tfree(freev); } static void polint(double *xa, double *ya, int n, double x, double *y, double *dy) /* Given arrays xa[1..n] and ya[1..n], and given a value x, this routine returns a value y, and an error estimate dy. If P(x) is the polynomial of degree n-1 such that P(xa) = ya, then the returned value y = P(x) */ { int i, m, ns = 1; double den, dif, dift, ho, hp, w; double *c, *d; dif = ABS(x - xa[1]); c = vector(1, n); d = vector(1, n); for (i = 1; i <= n; i++) { if ((dift = ABS(x - xa[i])) < dif) { ns = i; dif = dift; } c[i] = ya[i]; d[i] = ya[i]; } *y = ya[ns--]; for (m = 1; m < n; m++) { for (i = 1; i <= n-m; i++) { ho = xa[i]-x; hp = xa[i+m]-x; w = c[i+1]-d[i]; if ((den=ho-hp) == 0.0) { fprintf(stderr, "(Error) in routine POLINT\n"); fprintf(stderr, "...now exiting to system ...\n"); controlled_exit(EXIT_FAILURE); } den = w/den; d[i] = hp * den; c[i] = ho * den; } *y += (*dy = (2*ns < (n-m) ? c[ns+1] : d[ns--])); } free_vector(d, 1, n); free_vector(c, 1, n); } static int match(int n, double *cof, double *xa, double *ya) /* Given arrays xa[0..n] and ya[0..n] containing a tabulated function ya = f(xa), this routine returns an array of coefficients cof[0..n], such that ya[i] = sum_j {cof[j]*xa[i]**j}. */ { int k, j, i; double xmin, dy, *x, *y, *xx; x = vector(0, n); y = vector(0, n); xx = vector(0, n); for (j = 0; j <= n; j++) { x[j] = xa[j]; xx[j] = y[j] = ya[j]; } for (j = 0; j <= n; j++) { polint(x-1, y-1, n+1-j, 0.0, &cof[j], &dy); xmin = 1.0e38; k = -1; for (i = 0; i <= n-j; i++) { if (ABS(x[i]) < xmin) { xmin = ABS(x[i]); k = i; } if (x[i]) y[i] = (y[i] - cof[j]) / x[i]; } for (i = k+1; i <= n-j; i++) { y[i-1] = y[i]; x[i-1] = x[i]; } } free_vector(y, 0, n); free_vector(x, 0, n); free_vector(xx, 0, n); /**** check ****/ /* for (i = 0; i <= n; i++) { xmin = xa[i]; dy = cof[0]; for (j = 1; j <= n; j++) { dy += xmin * cof[j]; xmin *= xa[i]; } printf("*** real x = %e y = %e\n", xa[i], xx[i]); printf("*** calculated y = %e\n", dy); printf("*** error = %e \% \n", (dy-xx[i])/xx[i]); } */ return 0; } /*** ***/ /*** static int match_x(int dim, double *Alfa, double *X, double *Y) { int i, j; double f; double scale; **** check **** double xx[16]; for (i = 0; i <= dim; i++) xx[i] = Y[i]; if (Y[1] == Y[0]) scale = 1.0; else scale = X[1] / (Y[1] - Y[0]); for (i = 0; i < dim; i++) { f = X[i+1]; for (j = dim-1; j >= 0; j--) { A[i][j] = f; f *= X[i+1]; } A[i][dim] = (Y[i+1] - Y[0])*scale; } Gaussian_Elimination2(dim, 1); Alfa[0] = Y[0]; for (i = 1; i <= dim; i++) Alfa[i] = A[dim-i][dim] / scale; **** check **** * for (i = 0; i <= dim; i++) { f = X[i]; scale = Alfa[0]; for (j = 1; j <= dim; j++) { scale += f * Alfa[j]; f *= X[i]; } printf("*** real x = %e y = %e\n", X[i], xx[i]); printf("*** calculated y = %e\n", scale); printf("*** error = %e \% \n", (scale-xx[i])/xx[i]); } * return(1); } ***/ /*** ***/ static int Gaussian_Elimination2(int dims, int type) /* type = 1 : to solve a linear system -1 : to inverse a matrix */ { int i, j, k, dim; double f; double max; int imax; if (type == -1) dim = 2 * dims; else dim = dims; for (i = 0; i < dims; i++) { imax = i; max = ABS(A[i][i]); for (j = i+1; j < dim; j++) if (ABS(A[j][i]) > max) { imax = j; max = ABS(A[j][i]); } if (max < epsilon) { fprintf(stderr, " can not choose a pivot (misc)\n"); controlled_exit(EXIT_FAILURE); } if (imax != i) for (k = i; k <= dim; k++) { SWAP(double, A[i][k], A[imax][k]); } f = 1.0 / A[i][i]; A[i][i] = 1.0; for (j = i+1; j <= dim; j++) A[i][j] *= f; for (j = 0; j < dims ; j++) { if (i == j) continue; f = A[j][i]; A[j][i] = 0.0; for (k = i+1; k <= dim; k++) A[j][k] -= f * A[i][k]; } } return(1); } /*** static void eval_Si_Si_1(int dim, double y) { int i, j, k; for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { Si_1[i][j] = 0.0; for (k = 0; k < dim; k++) if (k == j) Si_1[i][j] += Sv_1[i][k] * (y * R_m[k][j] + Scaling_F * L_m[k][j]); else Si_1[i][j] += Sv_1[i][k] * L_m[k][j] * Scaling_F; / Si_1[i][j] *= Scaling_F; / } for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) Si_1[i][j] /= sqrt((double) D[i]); for (i = 0; i < dim; i++) { for (j = 0; j < dim; j++) A[i][j] = Si_1[i][j]; for (j = dim; j < 2* dim; j++) A[i][j] = 0.0; A[i][i+dim] = 1.0; } Gaussian_Elimination2(dim, -1); for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) Si[i][j] = A[i][j+dim]; } ***/ static void eval_Si_Si_1(int dim, double y) { int i, j, k; for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { Si_1[i][j] = 0.0; for (k = 0; k < dim; k++) Si_1[i][j] += Sv_1[i][k] * (y * R_m[k][j] + Scaling_F * L_m[k][j]); /* else Si_1[i][j] += Sv_1[i][k] * L_m[k][j] * Scaling_F; Si_1[i][j] *= Scaling_F; */ } for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) Si_1[i][j] /= sqrt(D[i]); for (i = 0; i < dim; i++) { for (j = 0; j < dim; j++) A[i][j] = Si_1[i][j]; for (j = dim; j < 2* dim; j++) A[i][j] = 0.0; A[i][i+dim] = 1.0; } Gaussian_Elimination2(dim, -1); for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) Si[i][j] = A[i][j+dim]; } /*** static void loop_ZY(int dim, double y) { int i, j, k; double fmin, fmin1; for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) if (i == j) ZY[i][j] = Scaling_F * C_m[i][i] + G_m[i] * y; else ZY[i][j] = Scaling_F * C_m[i][j]; diag(dim); fmin = D[0]; for (i = 1; i < dim; i++) if (D[i] < fmin) fmin = D[i]; if (fmin < 0) { fprintf(stderr, "(Error) The capacitance matrix of the multiconductor system is not positive definite.\n"); exit(0); } else { fmin = sqrt(fmin); fmin1 = 1 / fmin; } for (i = 0; i < dim; i++) D[i] = sqrt((double) D[i]); for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { Y5[i][j] = D[i] * Sv[j][i]; Y5_1[i][j] = Sv[j][i] / D[i]; } for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { Sv_1[i][j] = 0.0; for (k = 0; k < dim; k++) Sv_1[i][j] += Sv[i][k] * Y5[k][j]; } for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) Y5[i][j] = Sv_1[i][j]; for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { Sv_1[i][j] = 0.0; for (k = 0; k < dim; k++) Sv_1[i][j] += Sv[i][k] * Y5_1[k][j]; } for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) Y5_1[i][j] = Sv_1[i][j]; for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { ZY[i][j] = 0.0; for (k = 0; k < dim; k++) if (k == i) ZY[i][j] += (Scaling_F * L_m[i][i] + R_m[i] * y) * Y5[k][j]; else ZY[i][j] += L_m[i][k] * Y5[k][j] * Scaling_F; } for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { Sv_1[i][j] = 0.0; for (k = 0; k < dim; k++) Sv_1[i][j] += Y5[i][k] * ZY[k][j]; } for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) ZY[i][j] = Sv_1[i][j]; diag(dim); for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { Sv_1[i][j] = 0.0; for (k = 0; k < dim; k++) Sv_1[i][j] += Sv[k][i] * Y5[k][j]; Sv_1[i][j] *= fmin1; } for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { ZY[i][j] = 0.0; for (k = 0; k < dim; k++) ZY[i][j] += Y5_1[i][k] * Sv[k][j]; ZY[i][j] *= fmin; } for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) Sv[i][j] = ZY[i][j]; } ***/ static void loop_ZY(int dim, double y) { int i, j, k; double fmin, fmin1=0.0; for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) ZY[i][j] = Scaling_F * C_m[i][j] + G_m[i][j] * y; /* else ZY[i][j] = Scaling_F * C_m[i][j]; */ diag(dim); fmin = D[0]; for (i = 1; i < dim; i++) if (D[i] < fmin) fmin = D[i]; if (fmin < 0) { fprintf(stderr, "(Error) The capacitance matrix of the multiconductor system is not positive definite.\n"); controlled_exit(EXIT_FAILURE); } else { fmin = sqrt(fmin); fmin1 = 1 / fmin; } for (i = 0; i < dim; i++) D[i] = sqrt(D[i]); for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { Y5[i][j] = D[i] * Sv[j][i]; Y5_1[i][j] = Sv[j][i] / D[i]; } for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { Sv_1[i][j] = 0.0; for (k = 0; k < dim; k++) Sv_1[i][j] += Sv[i][k] * Y5[k][j]; } for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) Y5[i][j] = Sv_1[i][j]; for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { Sv_1[i][j] = 0.0; for (k = 0; k < dim; k++) Sv_1[i][j] += Sv[i][k] * Y5_1[k][j]; } for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) Y5_1[i][j] = Sv_1[i][j]; for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { ZY[i][j] = 0.0; for (k = 0; k < dim; k++) ZY[i][j] += (Scaling_F * L_m[i][k] + R_m[i][k] * y) * Y5[k][j]; /* else ZY[i][j] += L_m[i][k] * Y5[k][j] * Scaling_F; */ } for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { Sv_1[i][j] = 0.0; for (k = 0; k < dim; k++) Sv_1[i][j] += Y5[i][k] * ZY[k][j]; } for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) ZY[i][j] = Sv_1[i][j]; diag(dim); for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { Sv_1[i][j] = 0.0; for (k = 0; k < dim; k++) Sv_1[i][j] += Sv[k][i] * Y5[k][j]; Sv_1[i][j] *= fmin1; } for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { ZY[i][j] = 0.0; for (k = 0; k < dim; k++) ZY[i][j] += Y5_1[i][k] * Sv[k][j]; ZY[i][j] *= fmin; } for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) Sv[i][j] = ZY[i][j]; } /*** ***/ static void poly_matrix( double *A[MAX_DIM][MAX_DIM], int dim, int deg) { int i, j; for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) match(deg, A[i][j], frequency, A[i][j]); } /*** ***/ /*** static int checkW(double *W, double d) { double f, y; float y1; int k; printf("(W)y ="); scanf("%f", &y1); f = W[0]; y = y1; f += y * W[1]; for (k = 2; k < 6; k++) { y *= y1; f += y * W[k]; } printf("W[i]= %e\n ", f*exp((double)-d/y1)); return(1); } ***/ /*** ***/ static void poly_W(int dim, int deg) { int i; for (i = 0; i < dim; i++) { match(deg, W[i], frequency, W[i]); TAU[i] = approx_mode(W[i], W[i], length); /* checkW(W[i], TAU[i]); */ } } /*** ***/ static void eval_frequency(int dim, int deg_o) { int i; double min; min = D[0]; for (i = 1; i < dim; i++) if (D[i] < min) { min = D[i]; } if (min <= 0) { fprintf(stderr, "A mode frequency is not positive. Abort!\n"); controlled_exit(EXIT_FAILURE); } Scaling_F2 = 1.0 / min; Scaling_F = sqrt(Scaling_F2); min = length * 8.0; /* min *= 1.0e18; min = sqrt(min)*1.0e-9*length/8.0; */ frequency[0] = 0.0; for (i = 1; i <= deg_o; i++) frequency[i] = frequency[i-1] + min; for (i = 0; i < dim; i++) D[i] *= Scaling_F2; } /*** ***/ static void store(int dim, int ind) { int i, j; for (i = 0; i < dim; i++) { for (j = 0; j < dim; j++) { /* store_Sip */ Sip[i][j][ind] = Si[i][j]; /* store_Si_1p */ Si_1p[i][j][ind] = Si_1[i][j]; /* store_Sv_1p */ Sv_1p[i][j][ind] = Sv_1[i][j]; } /* store_W */ W[i][ind] = D[i]; } } /*** ***/ static void store_SiSv_1(int dim, int ind) { int i, j, k; double temp; for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { temp = 0.0; for (k = 0; k < dim; k++) temp += Si[i][k] * Sv_1[k][j]; SiSv_1[i][j][ind] = temp; } } /*** ***/ /*** static int check(Sip, Si_1p, Sv_1p, SiSv_1p) double *Sip[MAX_DIM][MAX_DIM]; double *Si_1p[MAX_DIM][MAX_DIM]; double *Sv_1p[MAX_DIM][MAX_DIM]; double *SiSv_1p[MAX_DIM][MAX_DIM]; { double f, y; float y1; int i, j, k; printf("y ="); scanf("%f", &y1); printf("\n"); printf("Si =\n"); for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { f = Sip[i][j][0]; y = y1; f += y * Sip[i][j][1]; for (k = 2; k < 8; k++) { y *= y1; f += y * Sip[i][j][k]; } printf("%e ", f); } printf("\n"); } printf("\n"); printf("Si_1 =\n"); for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { f = Si_1p[i][j][0]; y = y1; f += y * Si_1p[i][j][1]; for (k = 2; k < 8; k++) { y *= y1; f += y * Si_1p[i][j][k]; } printf("%e ", f); } printf("\n"); } printf("\n"); printf("Sv_1 =\n"); for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { f = Sv_1p[i][j][0]; y = y1; f += y * Sv_1p[i][j][1]; for (k = 2; k < 8; k++) { y *= y1; f += y * Sv_1p[i][j][k]; } printf("%e ", f); } printf("\n"); } printf("\n"); printf("SiSv_1 =\n"); for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { f = SiSv_1p[i][j][0]; y = y1; f += y * SiSv_1p[i][j][1]; for (k = 2; k < 8; k++) { y *= y1; f += y * SiSv_1p[i][j][k]; } printf("%e ", f); } printf("\n"); } return(1); } ***/ /*** ***/ static int coupled(int dim) { int deg, deg_o; int i; deg = Right_deg; deg_o = Left_deg; new_memory(dim, deg, deg_o); Scaling_F = Scaling_F2 = 1.0; /*** y = 0 : ZY = LC ***/ loop_ZY(dim, 0.0); eval_frequency(dim, deg_o); eval_Si_Si_1(dim, 0.0); store_SiSv_1(dim, 0); store(dim, 0); /*** Step 1 ***/ /*** Step 2 ***/ for (i = 1; i <= deg_o; i++) { loop_ZY(dim, frequency[i]); eval_Si_Si_1(dim, frequency[i]); store_SiSv_1(dim, i); store(dim, i); } poly_matrix(Sip, dim, deg_o); poly_matrix(Si_1p, dim, deg_o); poly_matrix(Sv_1p, dim, deg_o); poly_W(dim, deg_o); matrix_p_mult(Sip, W, Si_1p, dim, deg_o, deg_o, IWI); matrix_p_mult(Sip, W, Sv_1p, dim, deg_o, deg_o, IWV); poly_matrix(SiSv_1, dim, deg_o); /*** check(Sip, Si_1p, Sv_1p, SiSv_1); ***/ generate_out(dim, deg_o); return(1); } /*** ***/ static int generate_out(int dim, int deg_o) { int i, j, k, rtv; double C; double *p; double c1, c2, c3, x1, x2, x3; for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { p = SiSv_1[i][j]; SIV[i][j].C_0 = C = p[0]; if (C == 0.0) continue; for (k = 0; k <= deg_o; k++) p[k] /= C; if (i == j) { rtv = Pade_apx(sqrt(G_m[i][i] / R_m[i][i]) / C, p, &c1, &c2, &c3, &x1, &x2, &x3); if (rtv == 0) { SIV[i][j].C_0 = 0.0; printf("SIV\n"); continue; } } else { rtv = Pade_apx(0.0, p, &c1, &c2, &c3, &x1, &x2, &x3); if (rtv == 0) { SIV[i][j].C_0 = 0.0; printf("SIV\n"); continue; } } p = SIV[i][j].Poly = (double *) calloc(7, sizeof(double)); p[0] = c1; p[1] = c2; p[2] = c3; p[3] = x1; p[4] = x2; p[5] = x3; p[6] = rtv; } for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) for (k = 0; k < dim; k++) { p = IWI[i][j].Poly[k]; C = IWI[i][j].C_0[k]; if (C == 0.0) continue; if (i == j && k == i) { rtv = Pade_apx( exp(- sqrt(G_m[i][i] * R_m[i][i]) * length) / C, p, &c1, &c2, &c3, &x1, &x2, &x3); if (rtv == 0) { IWI[i][j].C_0[k] = 0.0; printf("IWI %d %d %d\n", i, j, k); continue; } } else { rtv = Pade_apx(0.0, p, &c1, &c2, &c3, &x1, &x2, &x3); if (rtv == 0) { IWI[i][j].C_0[k] = 0.0; printf("IWI %d %d %d\n", i, j, k); continue; } } p[0] = c1; p[1] = c2; p[2] = c3; p[3] = x1; p[4] = x2; p[5] = x3; p[6] = rtv; } for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) for (k = 0; k < dim; k++) { p = IWV[i][j].Poly[k]; C = IWV[i][j].C_0[k]; if (C == 0.0) continue; if (i == j && k == i) { rtv = Pade_apx(sqrt(G_m[i][i] / R_m[i][i]) * exp(- sqrt(G_m[i][i] * R_m[i][i]) * length) / C, p, &c1, &c2, &c3, &x1, &x2, &x3); if (rtv == 0) { IWV[i][j].C_0[k] = 0.0; printf("IWV %d %d %d\n", i, j, k); continue; } } else { rtv = Pade_apx(0.0, p, &c1, &c2, &c3, &x1, &x2, &x3); if (rtv == 0) { IWV[i][j].C_0[k] = 0.0; printf("IWV %d %d %d\n", i, j, k); continue; } } p[0] = c1; p[1] = c2; p[2] = c3; p[3] = x1; p[4] = x2; p[5] = x3; p[6] = rtv; } return(1); } /**************************************************************** mult.c Multiplication for Matrix of Polynomial X(y) = A(y) D(y) B(y), where D(y) is a diagonal matrix with each diagonal entry of the form e^{-a_i s}d(y), for which s = 1/y and i = 1..N. Each entry of X(y) will be of the form \sum_{i=1}^N c_i e^{-a_i s} b_i(y), where b_i(0) = 1; therefore, those b_i(y)'s will be each entry's output. ****************************************************************/ static void mult_p(double *p1, double *p2, double *p3, int d1, int d2, int d3) /* p3 = p1 * p2 */ { int i, j, k; for (i = 0; i <= d3; i++) p3[i] = 0.0; for (i = 0; i <= d1; i++) for (j = i, k = 0; k <= d2; j++, k++) { if (j > d3) break; p3[j] += p1[i] * p2[k]; } } static void matrix_p_mult( double *A[MAX_DIM][MAX_DIM], double *D[MAX_DIM], double *B[MAX_DIM][MAX_DIM], int dim, int deg, int deg_o, Mult_Out X[MAX_DIM][MAX_DIM]) { int i, j, k, l; double *p; double *T[MAX_DIM][MAX_DIM]; double t1; for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { p = T[i][j] = (double *) calloc((size_t) (deg_o+1), sizeof(double)); mult_p(B[i][j], D[i], p, deg, deg_o, deg_o); } for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) for (k = 0; k < dim; k++) { p = X[i][j].Poly[k] = (double *) calloc((size_t) (deg_o+1), sizeof(double)); mult_p(A[i][k], T[k][j], p, deg, deg_o, deg_o); t1 = X[i][j].C_0[k] = p[0]; if (t1 != 0.0) { p[0] = 1.0; for (l = 1; l <= deg_o; l++) p[l] /= t1; } } for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) tfree(T[i][j]); /********** for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { for (k = 0; k < dim; k++) { fprintf(outFile, "(%5.3f)", X[i][j].C_0[k]); p = X[i][j].Poly[k]; for (l = 0; l <= deg_o; l++) fprintf(outFile, "%5.3f ", p[l]); fprintf(outFile, "\n"); } fprintf(outFile, "\n"); } ***********/ } /**************************************************************** mode approximation ****************************************************************/ /*** ***/ static double approx_mode(double *X, double *b, double length) { double w0, w1, w2, w3, w4, w5; double a[8]; double delay, atten; double y1, y2, y3, y4, y5, y6; int i, j; w0 = X[0]; w1 = X[1] / w0; /* a */ w2 = X[2] / w0; /* b */ w3 = X[3] / w0; /* c */ w4 = X[4] / w0; /* d */ w5 = X[5] / w0; /* e */ y1 = 0.5 * w1; y2 = w2 - y1 * y1; y3 = 3 * w3 - 3.0 * y1 * y2; y4 = 12.0 * w4 - 3.0 * y2 * y2 - 4.0 * y1 * y3; y5 = 60.0 * w5 - 5.0 * y1 * y4 -10.0 * y2 * y3; y6 = -10.0 * y3 * y3 - 15.0 * y2 * y4 - 6.0 * y1 * y5; delay = sqrt(w0) * length / Scaling_F; atten = exp(- delay * y1); a[1] = y2 / 2.0; a[2] = y3 / 6.0; a[3] = y4 / 24.0; a[4] = y5 / 120.0; a[5] = y6 / 720.0; a[1] *= -delay; a[2] *= -delay; a[3] *= -delay; a[4] *= -delay; a[5] *= -delay; b[0] = 1.0; b[1] = a[1]; for (i = 2; i <= 5; i++) { b[i] = 0.0; for (j = 1; j <= i; j++) b[i] += j * a[j] * b[i-j]; b[i] = b[i] / (double) i; } for (i = 0; i <= 5; i++) b[i] *= atten; return(delay); } /*** ***/ static double eval2(double a, double b, double c, double x) { return(a*x*x + b*x + c); } /*** ***/ static int get_c(double q1, double q2, double q3, double p1, double p2, double a, double b, double *cr, double *ci) { double d, n; d = (3.0*(a*a-b*b)+2.0*p1*a+p2)*(3.0*(a*a-b*b)+2.0*p1*a+p2); d += (6.0*a*b+2.0*p1*b)*(6.0*a*b+2.0*p1*b); n = -(q1*(a*a-b*b)+q2*a+q3)*(6.0*a*b+2.0*p1*b); n += (2.0*q1*a*b+q2*b)*(3.0*(a*a-b*b)+2.0*p1*a+p2); *ci = n/d; n = (3.0*(a*a-b*b)+2.0*p1*a+p2)*(q1*(a*a-b*b)+q2*a+q3); n += (6.0*a*b+2.0*p1*b)*(2.0*q1*a*b+q2*b); *cr = n/d; return(1); } static int Pade_apx(double a_b, double *b, double *c1, double *c2, double *c3, double *x1, double *x2, double *x3) /* b[0] + b[1]*y + b[2]*y^2 + ... + b[5]*y^5 + ... = (q3*y^3 + q2*y^2 + q1*y + 1) / (p3*y^3 + p2*y^2 + p1*y + 1) where b[0] is always equal to 1.0 and neglected, and y = 1/s. (q3*y^3 + q2*y^2 + q1*y + 1) / (p3*y^3 + p2*y^2 + p1*y + 1) = (s^3 + q1*s^2 + q2*s + q3) / (s^3 + p1*s^2 + p2*s + p3) = c1 / (s - x1) + c2 / (s - x2) + c3 / (s - x3) + 1.0 */ { double p1, p2, p3, q1, q2, q3; At[0][0] = 1.0 - a_b; At[0][1] = b[1]; At[0][2] = b[2]; At[0][3] = -b[3]; At[1][0] = b[1]; At[1][1] = b[2]; At[1][2] = b[3]; At[1][3] = -b[4]; At[2][0] = b[2]; At[2][1] = b[3]; At[2][2] = b[4]; At[2][3] = -b[5]; Gaussian_Elimination(3); p3 = At[0][3]; p2 = At[1][3]; p1 = At[2][3]; /* if (p3 < 0.0 || p2 < 0.0 || p1 < 0.0 || p1*p2 <= p3) return(0); */ q1 = p1 + b[1]; q2 = b[1] * p1 + p2 + b[2]; q3 = p3 * a_b; if (find_roots(p1, p2, p3, x1, x2, x3)) { /* printf("complex roots : %e %e %e \n", *x1, *x2, *x3); */ *c1 = eval2(q1 - p1, q2 - p2, q3 - p3, *x1) / eval2(3.0, 2.0 * p1, p2, *x1); get_c(q1 - p1, q2 - p2, q3 - p3, p1, p2, *x2, *x3, c2, c3); return(2); } else { /* new printf("roots are %e %e %e \n", *x1, *x2, *x3); */ *c1 = eval2(q1 - p1, q2 - p2, q3 - p3, *x1) / eval2(3.0, 2.0 * p1, p2, *x1); *c2 = eval2(q1 - p1, q2 - p2, q3 - p3, *x2) / eval2(3.0, 2.0 * p1, p2, *x2); *c3 = eval2(q1 - p1, q2 - p2, q3 - p3, *x3) / eval2(3.0, 2.0 * p1, p2, *x3); return(1); } } static int Gaussian_Elimination(int dims) { int i, j, k, dim; double f; double max; int imax; dim = dims; for (i = 0; i < dim; i++) { imax = i; max = ABS(At[i][i]); for (j = i+1; j < dim; j++) if (ABS(At[j][i]) > max) { imax = j; max = ABS(At[j][i]); } if (max < epsi_mult) { fprintf(stderr, " can not choose a pivot (mult)\n"); controlled_exit(EXIT_FAILURE); } if (imax != i) for (k = i; k <= dim; k++) { SWAP(double, At[i][k], At[imax][k]); } f = 1.0 / At[i][i]; At[i][i] = 1.0; for (j = i+1; j <= dim; j++) At[i][j] *= f; for (j = 0; j < dim ; j++) { if (i == j) continue; f = At[j][i]; At[j][i] = 0.0; for (k = i+1; k <= dim; k++) At[j][k] -= f * At[i][k]; } } return(1); } static double root3(double a1, double a2, double a3, double x) { double t1, t2; t1 = x * (x * (x + a1) + a2) + a3; t2 = x * (2.0*a1 + 3.0*x) + a2; return(x - t1 / t2); } static int div3(double a1, double a2, double a3, double x, double *p1, double *p2) { NG_IGNORE(a2); *p1 = a1 + x; /* *p2 = a2 + (a1 + x) * x; */ *p2 = - a3 / x; return(1); } static int find_roots(double a1, double a2, double a3, double *x1, double *x2, double *x3) { double x, t; double p, q; /*********************************************** double m,n; p = a1*a1/3.0 - a2; q = a1*a2/3.0 - a3 - 2.0*a1*a1*a1/27.0; p = p*p*p/27.0; t = q*q - 4.0*p; if (t < 0.0) { if (q != 0.0) { t = atan(sqrt((double)-t)/q); if (t < 0.0) t += M_PI; t /= 3.0; x = 2.0 * pow(p, 0.16666667) * cos(t) - a1 / 3.0; } else { t /= -4.0; x = pow(t, 0.16666667) * 1.732 - a1 / 3.0; } } else { t = sqrt(t); m = 0.5*(q - t); n = 0.5*(q + t); if (m < 0.0) m = -pow((double) -m, (double) 0.3333333); else m = pow((double) m, (double) 0.3333333); if (n < 0.0) n = -pow((double) -n, (double) 0.3333333); else n = pow((double) n, (double) 0.3333333); x = m + n - a1 / 3.0; } ************************************************/ q = (a1*a1-3.0*a2) / 9.0; p = (2.0*a1*a1*a1-9.0*a1*a2+27.0*a3) / 54.0; t = q*q*q - p*p; if (t >= 0.0) { t = acos(p /(q * sqrt(q))); x = -2.0*sqrt(q)*cos(t / 3.0) - a1/3.0; } else { if (p > 0.0) { t = pow(sqrt(-t)+p, 1.0 / 3.0); x = -(t + q / t) - a1/3.0; } else if (p == 0.0) { x = -a1/3.0; } else { t = pow(sqrt(-t)-p, 1.0 / 3.0); x = (t + q / t) - a1/3.0; } } /* fprintf(stderr, "..1.. %e\n", x*x*x+a1*x*x+a2*x+a3); */ { double x_backup = x; int i = 0; for (t = root3(a1, a2, a3, x); ABS(t-x) > 5.0e-4; t = root3(a1, a2, a3, x)) if (++i == 32) { x = x_backup; break; } else x = t; } /* fprintf(stderr, "..2.. %e\n", x*x*x+a1*x*x+a2*x+a3); */ *x1 = x; div3(a1, a2, a3, x, &a1, &a2); t = a1 * a1 - 4.0 * a2; if (t < 0) { /* fprintf(stderr, "***** Two Imaginary Roots.\n Update.\n"); *x2 = -0.5 * a1; *x3 = a2 / *x2; */ *x3 = 0.5 * sqrt(-t); *x2 = -0.5 * a1; return(1); } else { t = sqrt(t); if (a1 >= 0.0) *x2 = t = -0.5 * (a1 + t); else *x2 = t = -0.5 * (a1 - t); *x3 = a2 / t; return(0); } } static NDnamePt insert_ND(char *name, NDnamePt *ndn) { int cmp; NDnamePt p; if (*ndn == NULL) { p = *ndn = TMALLOC(NDname, 1); p->nd = NULL; p->right = p->left = NULL; strcpy(p->id, name); return(p); } cmp = strcmp((*ndn)->id, name); if (cmp == 0) return(*ndn); else { if (cmp < 0) return(insert_ND(name, &((*ndn)->left))); else return(insert_ND(name, &((*ndn)->right))); } } static NODE * insert_node(char *name) { NDnamePt n; NODE *p; n = insert_ND(name, &ndn_btree); if (n->nd == NULL) { p = NEW_node(); p->name = n; n->nd = p; p->next = node_tab; node_tab = p; return(p); } else return(n->nd); } /*** static int divC(double ar, double ai, double br, double bi, double *cr, double *ci) { double t; t = br*br + bi*bi; *cr = (ar*br + ai*bi) / t; *ci = (ai*br - ar*bi) / t; return(1); } ***/ static NODE *NEW_node(void) { NODE *n; n = TMALLOC(NODE, 1); n->mptr = NULL; n->gptr = NULL; n->cptr = NULL; n->rptr = NULL; n->tptr = NULL; n->cplptr = NULL; n->rlptr = NULL; n->ddptr = NULL; n->cvccsptr = NULL; n->vccsptr = NULL; n->CL = 0.001; n->V = n->dv = 0.0; n->gsum = n->cgsum = 0; n->is = 0; n->tag = 0; n->flag = 0; n->region = NULL; n->ofile = NULL; n->dvtag = 0; return(n); } /**************************************************************** diag.c This file contains the main(). ****************************************************************/ #define epsi2 1.0e-8 static int dim; static MAXE_PTR row; static MAXE_PTR sort(MAXE_PTR list, double val, int r, int c, MAXE_PTR e) { if (list == NULL || list->value < val) { e->row = r; e->col = c; e->value = val; e->next = list; return(e); } else { list->next = sort(list->next, val, r, c, e); return(list); } } static void ordering(void) { MAXE_PTR e; int i, j, m; double mv; for (i = 0; i < dim-1; i++) { m = i+1; mv = ABS(ZY[i][m]); for (j = m+1; j < dim; j++) if ((int)(ABS(ZY[i][j]) * 1e7) > (int) (1e7 *mv)) { mv = ABS(ZY[i][j]); m = j; } e = TMALLOC(MAXE, 1); row = sort(row, mv, i, m, e); } } static MAXE_PTR delete_1(MAXE_PTR *list, int rc) { MAXE_PTR list1, e; list1 = *list; if ((*list)->row == rc) { *list = (*list)->next; return(list1); } for (e = list1->next; e->row != rc; e = e->next) list1 = e; list1->next = e->next; return(e); } static void reordering(int p, int q) { MAXE_PTR e; int j, m; double mv; m = p+1; mv = ABS(ZY[p][m]); for (j = m+1; j < dim; j++) if ((int)(ABS(ZY[p][j]) * 1e7) > (int) (1e7 *mv)) { mv = ABS(ZY[p][j]); m = j; } e = delete_1(&row, p); row = sort(row, mv, p, m, e); m = q+1; if (m != dim) { mv = ABS(ZY[q][m]); for (j = m+1; j < dim; j++) if ((int)(ABS(ZY[q][j]) * 1e7) > (int) (1e7 *mv)) { mv = ABS(ZY[q][j]); m = j; } e = delete_1(&row, q); row = sort(row, mv, q, m, e); } } static void diag(int dims) { int i, j, c; double fmin, fmax; dim = dims; row = NULL; fmin = fmax = ABS(ZY[0][0]); for (i = 0; i < dim; i++) for (j = i; j < dim; j++) if (ABS(ZY[i][j]) > fmax) fmax = ABS(ZY[i][j]); else if (ABS(ZY[i][j]) < fmin) fmin = ABS(ZY[i][j]); fmin = 2.0 / (fmin + fmax); for (i = 0; i < dim; i++) for (j = i; j < dim; j++) ZY[i][j] *= fmin; for (i = 0; i < dim; i++) { for (j = 0; j < dim; j++) if (i == j) Sv[i][i] = 1.0; else Sv[i][j] = 0.0; } ordering(); if (row) for (c = 0; row->value > epsi2; c++) { int p, q; p = row->row; q = row->col; rotate(dim, p, q); reordering(p, q); } for (i = 0; i < dim; i++) D[i] = ZY[i][i] / fmin; while (row) { MAXE_PTR tmp_row = row->next; tfree(row); row = tmp_row; } } /**************************************************************** rotate() rotation of the Jacobi's method ****************************************************************/ static int rotate(int dim, int p, int q) { int j; double co, si; double ve, mu, ld; double T[MAX_DIM]; double t; ld = - ZY[p][q]; mu = 0.5 * (ZY[p][p] - ZY[q][q]); ve = sqrt(ld*ld + mu*mu); co = sqrt((ve + ABS(mu)) / (2.0 * ve)); si = SGN(mu) * ld / (2.0 * ve * co); for (j = p+1; j < dim; j++) T[j] = ZY[p][j]; for (j = 0; j < p; j++) T[j] = ZY[j][p]; for (j = p+1; j < dim; j++) { if (j == q) continue; if (j > q) ZY[p][j] = T[j] * co - ZY[q][j] * si; else ZY[p][j] = T[j] * co - ZY[j][q] * si; } for (j = q+1; j < dim; j++) { if (j == p) continue; ZY[q][j] = T[j] * si + ZY[q][j] * co; } for (j = 0; j < p; j++) { if (j == q) continue; ZY[j][p] = T[j] * co - ZY[j][q] * si; } for (j = 0; j < q; j++) { if (j == p) continue; ZY[j][q] = T[j] * si + ZY[j][q] * co; } t = ZY[p][p]; ZY[p][p] = t * co * co + ZY[q][q] * si * si - 2.0 * ZY[p][q] * si * co; ZY[q][q] = t * si * si + ZY[q][q] * co * co + 2.0 * ZY[p][q] * si * co; ZY[p][q] = 0.0; { double R[MAX_DIM]; for (j = 0; j < dim; j++) { T[j] = Sv[j][p]; R[j] = Sv[j][q]; } for (j = 0; j < dim; j++) { Sv[j][p] = T[j] * co - R[j] * si; Sv[j][q] = T[j] * si + R[j] * co; } } return(1); } tmpk8ny_4pz/src/spicelib/devices/cpl/cplmpar.c0000644000175000017500000000303013546075722021537 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 Charles Hough **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "cpldefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" static void copy_coeffs(double **dst, IFvalue *value) { int n = value->v.numValue; if(*dst) tfree(*dst); *dst = TMALLOC(double, n); memcpy(*dst, value->v.vec.rVec, (size_t) n * sizeof(double)); } int CPLmParam(int param, IFvalue *value, GENmodel *inModel) { register CPLmodel *model = (CPLmodel *)inModel; switch(param) { case CPL_R: copy_coeffs(& model->Rm, value); model->Rm_counter = value->v.numValue; model->Rmgiven = TRUE; break; case CPL_L: copy_coeffs(& model->Lm, value); model->Lm_counter = value->v.numValue; model->Lmgiven = TRUE; break; case CPL_G: copy_coeffs(& model->Gm, value); model->Gm_counter = value->v.numValue; model->Gmgiven = TRUE; break; case CPL_C: copy_coeffs(& model->Cm, value); model->Cm_counter = value->v.numValue; model->Cmgiven = TRUE; break; case CPL_length: model->length = value->rValue; model->lengthgiven = TRUE; break; case CPL_MOD_R: break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/cpl/cplinit.h0000644000175000017500000000035613546075722021560 0ustar carstencarsten#ifndef _CPLINIT_H #define _CPLINIT_H extern IFparm CPLpTable[ ]; extern IFparm CPLmPTable[ ]; extern int CPLmPTSize; extern int CPLpTSize; extern char *CPLnames[ ]; extern int CPLiSize; extern int CPLmSize; extern int CPLnSize; #endif tmpk8ny_4pz/src/spicelib/devices/cpl/cplext.h0000644000175000017500000000104113546075722021405 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. **********/ /* extern int CPLaccept(CKTcircuit*, GENmodel*); */ extern int CPLask(CKTcircuit*, GENinstance*, int, IFvalue*, IFvalue*); extern int CPLload(GENmodel*, CKTcircuit*); extern int CPLmAsk(CKTcircuit*, GENmodel*, int, IFvalue*); extern int CPLmParam(int,IFvalue*, GENmodel*); extern int CPLparam(int,IFvalue*, GENinstance*, IFvalue*); extern int CPLsetup(SMPmatrix*, GENmodel*, CKTcircuit*, int*); extern int CPLunsetup(GENmodel*, CKTcircuit*); tmpk8ny_4pz/src/spicelib/devices/cpl/cplitf.h0000644000175000017500000000010713546075722021371 0ustar carstencarsten#ifndef DEV_CPL #define DEV_CPL SPICEdev *get_cpl_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/cpl/cplask.c0000644000175000017500000000206113546075722021361 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 2004 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "cpldefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CPLask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { CPLinstance *here = (CPLinstance *)inst; NG_IGNORE(ckt); NG_IGNORE(select); switch(which) { case CPL_POS_NODE: value->v.vec.sVec = here->in_node_names; value->v.numValue = here->dimension; return(OK); case CPL_NEG_NODE: value->v.vec.sVec = here->out_node_names; value->v.numValue = here->dimension; return(OK); case CPL_DIM: value->iValue = here->dimension; return(OK); case CPL_LENGTH: value->rValue = here->CPLlength; return(OK); default: return(E_BADPARM); } } tmpk8ny_4pz/src/spicelib/devices/cpl/cplload.c0000644000175000017500000005634613546075722021541 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 Charles Hough **********/ #include "ngspice/ngspice.h" #include "cpldefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" VI_list *pool_vi; static double ratio[MAX_CP_TX_LINES]; static VI_list *new_vi(void); static void free_vi(VI_list*); static int get_pvs_vi(int t1, int t2, CPLine *cp, double v1_i[MAX_CP_TX_LINES][MAX_CP_TX_LINES], double v2_i[MAX_CP_TX_LINES][MAX_CP_TX_LINES], double i1_i[MAX_CP_TX_LINES][MAX_CP_TX_LINES], double i2_i[MAX_CP_TX_LINES][MAX_CP_TX_LINES], double v1_o[MAX_CP_TX_LINES][MAX_CP_TX_LINES], double v2_o[MAX_CP_TX_LINES][MAX_CP_TX_LINES], double i1_o[MAX_CP_TX_LINES][MAX_CP_TX_LINES], double i2_o[MAX_CP_TX_LINES][MAX_CP_TX_LINES]); static int update_cnv(CPLine*, double); static int add_new_vi(CPLinstance*, CKTcircuit*, int); static int right_consts(CPLinstance*, CPLine*, int, int, double, double, int*, int*, CKTcircuit*); static int update_delayed_cnv(CPLine*, double); static int multC(double, double, double, double, double*, double*); static int expC(double, double, double, double*, double*); static int divC(double, double, double, double, double*, double*); static void update_cnv_a(TMS*, double, double, double, double, double, double, double); static void copy_cp(CPLine*, CPLine*); /*ARGSUSED*/ int CPLload(GENmodel *inModel, CKTcircuit *ckt) { CPLmodel *model = (CPLmodel *)inModel; CPLinstance *here; CPLine *cp, *cp2; int *k_p, *l_p; int time, time2; double h, h1, f; /* int hint; never used */ double hf; NODE *nd; double v, v1, g; int i, j, k, l; int cond1; int noL, m, p, q; CKTnode *node; VI_list *vi, *vi_before; int before, delta; int resindex; double gmin; /* dc solution */ h = ckt->CKTdelta; h1 = 0.5 * h; time2 = (int) (ckt->CKTtime * 1e12); /* hint = (int)(h * 1e12); never used */ hf = h * 1e12; time = (int) ((ckt->CKTtime - ckt->CKTdelta) * 1e12); cond1= ckt->CKTmode & MODEDC; gmin = 0.1 * ckt->CKTgmin; /* dc solution */ for( ; model != NULL; model = CPLnextModel(model)) { for (here = CPLinstances(model); here != NULL ; here=CPLnextInstance(here)) { cp = here->cplines; noL = cp->noL = here->dimension; for(m = 0 ; m < noL ; m++) /* dc solution */ { *here->CPLposPosPtr[m] += gmin; *here->CPLnegNegPtr[m] += gmin; *here->CPLnegPosPtr[m] += gmin; *here->CPLposNegPtr[m] += gmin; } if (cond1 || cp->vi_head == NULL) continue; if (cp->vi_tail->time > time) { time = cp->vi_tail->time; /* hint = time2 - time; never used */ } before = cp->vi_tail->time; vi_before = cp->vi_tail; if (time > cp->vi_tail->time) { copy_cp(cp, here->cplines2); add_new_vi(here, ckt, time); delta = time - before; for (m = 0; m < noL; m++) { nd = cp->in_node[m]; v = vi_before->v_i[m]; v1 = nd->V = cp->vi_tail->v_i[m]; nd->dv = (v1 - v) / delta; } for (m = 0; m < noL; m++) { nd = cp->out_node[m]; v = vi_before->v_o[m]; v1 = nd->V = cp->vi_tail->v_o[m]; nd->dv = (v1 - v) / delta; } update_cnv(cp, delta); if (cp->ext) update_delayed_cnv(cp, delta); } } } model = (CPLmodel *)inModel; /* loop through all the models */ for( ; model != NULL; model = CPLnextModel(model)) { /* loop through all the instances of the model */ for (here = CPLinstances(model); here != NULL ; here=CPLnextInstance(here)) { double mintaul = 123456789.0; cp = here->cplines; cp2 = here->cplines2; for (i = 0; i < cp->noL; i++) { if (mintaul > cp->taul[i]) mintaul = cp->taul[i]; } if (mintaul < hf) { fprintf(stderr, "your time step was too large for CPL tau.\n"); /* fprintf(stderr, "please decrease max time step in .tran card.\n"); fprintf(stderr, ".tran tstep tstop tstart tmax.\n"); fprintf(stderr, "make tmax smaller than %e and try again.\n", mintaul * 1e-12); return (1111); */ fprintf(stderr, "tmax is now set to %e.\n", 0.9 * mintaul * 1e-12); ckt->CKTmaxStep = 0.9 * mintaul * 1e-12; } noL = cp->noL = here->dimension; if (cond1) { resindex = 0; for (m = 0; m < noL; m++) { if (here->CPLlengthGiven) g = model->Rm[resindex] * here->CPLlength; else g = model->Rm[resindex] * CPLmodPtr(here)->length; *(here->CPLposIbr1Ptr[m]) += 1.0; *(here->CPLnegIbr2Ptr[m]) += 1.0; *(here->CPLibr1Ibr1Ptr[m]) += 1.0; *(here->CPLibr1Ibr2Ptr[m][m]) += 1.0; *(here->CPLibr2PosPtr[m][m]) += 1.0; *(here->CPLibr2NegPtr[m][m]) -= 1.0; *(here->CPLibr2Ibr1Ptr[m][m]) -= g; resindex = resindex + noL - m; } continue; } /* dc setup */ if (here->CPLdcGiven == 0 && !cond1) { for (i = 0; i < cp->noL; i++) { nd = cp->in_node[i]; for(node = ckt->CKTnodes;node; node = node->next) { if (strcmp(nd->name->id, node->name) == 0) { cp->dc1[i] = ckt->CKTrhsOld[node->number]; cp2->dc1[i] = nd->V = cp->dc1[i]; break; } } nd = cp->out_node[i]; for(node = ckt->CKTnodes;node; node = node->next) { if (strcmp(nd->name->id, node->name) == 0) { cp->dc2[i] = ckt->CKTrhsOld[node->number]; cp2->dc2[i] = nd->V = cp->dc2[i]; break; } } } here->CPLdcGiven = 1; vi = new_vi(); vi->time = 0; { for (i = 0; i < cp->noL; i++) { for (j = 0; j < cp->noL; j++) { TMS *tms; double a, b; tms = cp->h1t[i][j]; if (tms->ifImg) { tms->tm[0].cnv_i = - cp->dc1[j] * tms->tm[0].c / tms->tm[0].x; tms->tm[0].cnv_o = - cp->dc2[j] * tms->tm[0].c / tms->tm[0].x; divC(tms->tm[1].c, tms->tm[2].c, tms->tm[1].x, tms->tm[2].x, &a, &b); tms->tm[1].cnv_i = - cp->dc1[j] * a; tms->tm[1].cnv_o = - cp->dc2[j] * a; tms->tm[2].cnv_i = - cp->dc1[j] * b; tms->tm[2].cnv_o = - cp->dc2[j] * b; } else for (k = 0; k < 3; k++) { tms->tm[k].cnv_i = - cp->dc1[j] * tms->tm[k].c / tms->tm[k].x; tms->tm[k].cnv_o = - cp->dc2[j] * tms->tm[k].c / tms->tm[k].x; } for (l = 0; l < cp->noL; l++) { tms = cp->h2t[i][j][l]; for (k = 0; k < 3; k++) { tms->tm[k].cnv_i = 0.0; tms->tm[k].cnv_o = 0.0; } } for (l = 0; l < cp->noL; l++) { tms = cp->h3t[i][j][l]; if (tms->ifImg) { tms->tm[0].cnv_i = - cp->dc1[j] * tms->tm[0].c / tms->tm[0].x; tms->tm[0].cnv_o = - cp->dc2[j] * tms->tm[0].c / tms->tm[0].x; divC(tms->tm[1].c, tms->tm[2].c, tms->tm[1].x, tms->tm[2].x, &a, &b); tms->tm[1].cnv_i = - cp->dc1[j] * a; tms->tm[1].cnv_o = - cp->dc2[j] * a; tms->tm[2].cnv_i = - cp->dc1[j] * b; tms->tm[2].cnv_o = - cp->dc2[j] * b; } else for (k = 0; k < 3; k++) { tms->tm[k].cnv_i = - cp->dc1[j] * tms->tm[k].c / tms->tm[k].x; tms->tm[k].cnv_o = - cp->dc2[j] * tms->tm[k].c / tms->tm[k].x; } } } for (j = 0; j < cp->noL; j++) { vi->i_i[j] = vi->i_o[j] = 0.0; vi->v_i[j] = cp->dc1[j]; vi->v_o[j] = cp->dc2[j]; } } vi->next = NULL; cp->vi_tail = vi; cp->vi_head = vi; cp2->vi_tail = vi; cp2->vi_head = vi; } } for (m = 0; m < noL; m++) { *(here->CPLibr1Ibr1Ptr[m]) = -1.0; *(here->CPLibr2Ibr2Ptr[m]) = -1.0; } for (m = 0; m < noL; m++) { *(here->CPLposIbr1Ptr[m]) = 1.0; *(here->CPLnegIbr2Ptr[m]) = 1.0; } for (m = 0; m < noL; m++) { for (p = 0; p < noL; p++) { *(here->CPLibr1PosPtr[m][p]) = cp->h1t[m][p]->aten + h1 * cp->h1C[m][p]; *(here->CPLibr2NegPtr[m][p]) = cp->h1t[m][p]->aten + h1 * cp->h1C[m][p]; } } k_p = here->CPLibr1; l_p = here->CPLibr2; copy_cp(cp2, cp); if (right_consts(here,cp2, time,time2,h,h1,k_p,l_p,ckt)) { cp2->ext = 1; for (q = 0; q < noL; q++) { cp->ratio[q] = ratio[q]; if (ratio[q] > 0.0) { for (m = 0; m < noL; m++) { for (p = 0; p < noL; p++) { if (cp->h3t[m][p][q]) { f = ratio[q] * (h1 * cp->h3C[m][p][q] + cp->h3t[m][p][q]->aten); *(here->CPLibr1NegPtr[m][p]) = -f; *(here->CPLibr2PosPtr[m][p]) = -f; } if (cp->h2t[m][p][q]) { f = ratio[q] * (h1 * cp->h2C[m][p][q] + cp->h2t[m][p][q]->aten); *(here->CPLibr1Ibr2Ptr[m][p]) = -f; *(here->CPLibr2Ibr1Ptr[m][p]) = -f; } } } } } } else cp->ext = 0; } } return(OK); } static void copy_cp(CPLine *new, CPLine *old) { int i, j, k, l, m; VI_list *temp; new->noL = m = old->noL; new->ext = old->ext; for (i = 0; i < m; i++) { new->ratio[i] = old->ratio[i]; new->taul[i] = old->taul[i]; for (j = 0; j < m; j++) { if (new->h1t[i][j] == NULL) new->h1t[i][j] = TMALLOC(TMS, 1); new->h1t[i][j]->ifImg = old->h1t[i][j]->ifImg; new->h1t[i][j]->aten = old->h1t[i][j]->aten; new->h1C[i][j] = old->h1C[i][j]; for (k = 0; k < 3; k++) { new->h1t[i][j]->tm[k].c = old->h1t[i][j]->tm[k].c; new->h1t[i][j]->tm[k].x = old->h1t[i][j]->tm[k].x; new->h1t[i][j]->tm[k].cnv_i = old->h1t[i][j]->tm[k].cnv_i; new->h1t[i][j]->tm[k].cnv_o = old->h1t[i][j]->tm[k].cnv_o; new->h1e[i][j][k] = old->h1e[i][j][k]; } for (l = 0; l < m; l++) { if (new->h2t[i][j][l] == NULL) new->h2t[i][j][l] = TMALLOC(TMS, 1); new->h2t[i][j][l]->ifImg = old->h2t[i][j][l]->ifImg; new->h2t[i][j][l]->aten = old->h2t[i][j][l]->aten; new->h2C[i][j][l] = old->h2C[i][j][l]; new->h3C[i][j][l] = old->h3C[i][j][l]; for (k = 0; k < 3; k++) { new->h2t[i][j][l]->tm[k].c = old->h2t[i][j][l]->tm[k].c; new->h2t[i][j][l]->tm[k].x = old->h2t[i][j][l]->tm[k].x; new->h2t[i][j][l]->tm[k].cnv_i = old->h2t[i][j][l]->tm[k].cnv_i; new->h2t[i][j][l]->tm[k].cnv_o = old->h2t[i][j][l]->tm[k].cnv_o; } if (new->h3t[i][j][l] == NULL) new->h3t[i][j][l] = TMALLOC(TMS, 1); new->h3t[i][j][l]->ifImg = old->h3t[i][j][l]->ifImg; new->h3t[i][j][l]->aten = old->h3t[i][j][l]->aten; for (k = 0; k < 3; k++) { new->h3t[i][j][l]->tm[k].c = old->h3t[i][j][l]->tm[k].c; new->h3t[i][j][l]->tm[k].x = old->h3t[i][j][l]->tm[k].x; new->h3t[i][j][l]->tm[k].cnv_i = old->h3t[i][j][l]->tm[k].cnv_i; new->h3t[i][j][l]->tm[k].cnv_o = old->h3t[i][j][l]->tm[k].cnv_o; } } } } while (new->vi_head->time < old->vi_head->time) { temp = new->vi_head; new->vi_head = new->vi_head->next; free_vi(temp); } } static int right_consts(CPLinstance *here, CPLine *cp, int t, int time, double h, double h1, int *l1, int *l2, CKTcircuit *ckt) { int i, j, k, l; double e; double ff[MAX_CP_TX_LINES], gg[MAX_CP_TX_LINES]; double v1_i[MAX_CP_TX_LINES][MAX_CP_TX_LINES]; double v2_i[MAX_CP_TX_LINES][MAX_CP_TX_LINES]; double i1_i[MAX_CP_TX_LINES][MAX_CP_TX_LINES]; double i2_i[MAX_CP_TX_LINES][MAX_CP_TX_LINES]; double v1_o[MAX_CP_TX_LINES][MAX_CP_TX_LINES]; double v2_o[MAX_CP_TX_LINES][MAX_CP_TX_LINES]; double i1_o[MAX_CP_TX_LINES][MAX_CP_TX_LINES]; double i2_o[MAX_CP_TX_LINES][MAX_CP_TX_LINES]; int ext; int noL; NG_IGNORE(here); noL = cp->noL; for (j = 0; j < noL; j++) { double ff1; ff[j] = 0.0; gg[j] = 0.0; for (k = 0; k < noL; k++) if (cp->h1t[j][k]) { if (cp->h1t[j][k]->ifImg) { double er, ei, a, b, a1, b1; TMS *tms; tms = cp->h1t[j][k]; cp->h1e[j][k][0] = e = exp(tms->tm[0].x * h); expC(tms->tm[1].x, tms->tm[2].x, h, &er, &ei); cp->h1e[j][k][1] = er; cp->h1e[j][k][2] = ei; ff1 = tms->tm[0].c * e * h1; ff[j] -= tms->tm[0].cnv_i * e; gg[j] -= tms->tm[0].cnv_o * e; ff[j] -= ff1 * cp->in_node[k]->V; gg[j] -= ff1 * cp->out_node[k]->V; multC(tms->tm[1].c, tms->tm[2].c, er, ei, &a1, &b1); multC(tms->tm[1].cnv_i, tms->tm[2].cnv_i, er, ei, &a, &b); ff[j] -= 2.0 * (a1 * h1 * cp->in_node[k]->V + a); multC(tms->tm[1].cnv_o, tms->tm[2].cnv_o, er, ei, &a, &b); gg[j] -= 2.0 * (a1 * h1 * cp->out_node[k]->V + a); } else { ff1 = 0.0; for (i = 0; i < 3; i++) { cp->h1e[j][k][i] = e = exp(cp->h1t[j][k]->tm[i].x * h); ff1 -= cp->h1t[j][k]->tm[i].c * e; ff[j] -= cp->h1t[j][k]->tm[i].cnv_i * e; gg[j] -= cp->h1t[j][k]->tm[i].cnv_o * e; } ff[j] += ff1 * h1 * cp->in_node[k]->V; gg[j] += ff1 * h1 * cp->out_node[k]->V; } } } ext = get_pvs_vi(t, time, cp, v1_i, v2_i, i1_i, i2_i, v1_o, v2_o, i1_o, i2_o); for (j = 0; j < noL; j++) { /** current eqn **/ TERM *tm; for (k = 0; k < noL; k++) /** node voltage **/ for (l = 0; l < noL; l++) /** different mode **/ if (cp->h3t[j][k][l]) { if (cp->h3t[j][k][l]->ifImg) { double er, ei, a, b, a1, b1, a2, b2; TMS *tms; tms = cp->h3t[j][k][l]; expC(tms->tm[1].x, tms->tm[2].x, h, &er, &ei); a2 = h1 * tms->tm[1].c; b2 = h1 * tms->tm[2].c; a = tms->tm[1].cnv_i; b = tms->tm[2].cnv_i; multC(a, b, er, ei, &a, &b); multC(a2, b2, v1_i[l][k] * er + v2_i[l][k], v1_i[l][k] * ei, &a1, &b1); tms->tm[1].cnv_i = a + a1; tms->tm[2].cnv_i = b + b1; a = tms->tm[1].cnv_o; b = tms->tm[2].cnv_o; multC(a, b, er, ei, &a, &b); multC(a2, b2, v1_o[l][k] * er + v2_o[l][k], v1_o[l][k] * ei, &a1, &b1); tms->tm[1].cnv_o = a + a1; tms->tm[2].cnv_o = b + b1; tm = &(tms->tm[0]); e = exp(tm->x * h); tm->cnv_i = tm->cnv_i * e + h1 * tm->c * (v1_i[l][k] * e + v2_i[l][k]); tm->cnv_o = tm->cnv_o * e + h1 * tm->c * (v1_o[l][k] * e + v2_o[l][k]); ff[j] += tms->aten * v2_o[l][k] + tm->cnv_o + 2.0 * tms->tm[1].cnv_o; gg[j] += tms->aten * v2_i[l][k] + tm->cnv_i + 2.0 * tms->tm[1].cnv_i; } else { for (i = 0; i < 3; i++) { /** 3 poles **/ tm = &(cp->h3t[j][k][l]->tm[i]); e = exp(tm->x * h); tm->cnv_i = tm->cnv_i * e + h1 * tm->c * (v1_i[l][k] * e + v2_i[l][k]); tm->cnv_o = tm->cnv_o * e + h1 * tm->c * (v1_o[l][k] * e + v2_o[l][k]); ff[j] += tm->cnv_o; gg[j] += tm->cnv_i; } ff[j] += cp->h3t[j][k][l]->aten * v2_o[l][k]; gg[j] += cp->h3t[j][k][l]->aten * v2_i[l][k]; } } for (k = 0; k < noL; k++) /** line current **/ for (l = 0; l < noL; l++) /** different mode **/ if (cp->h2t[j][k][l]) { if (cp->h2t[j][k][l]->ifImg) { double er, ei, a, b, a1, b1, a2, b2; TMS *tms; tms = cp->h2t[j][k][l]; expC(tms->tm[1].x, tms->tm[2].x, h, &er, &ei); a2 = h1 * tms->tm[1].c; b2 = h1 * tms->tm[2].c; a = tms->tm[1].cnv_i; b = tms->tm[2].cnv_i; multC(a, b, er, ei, &a, &b); multC(a2, b2, i1_i[l][k] * er + i2_i[l][k], i1_i[l][k] * ei, &a1, &b1); tms->tm[1].cnv_i = a + a1; tms->tm[2].cnv_i = b + b1; a = tms->tm[1].cnv_o; b = tms->tm[2].cnv_o; multC(a, b, er, ei, &a, &b); multC(a2, b2, i1_o[l][k] * er + i2_o[l][k], i1_o[l][k] * ei, &a1, &b1); tms->tm[1].cnv_o = a + a1; tms->tm[2].cnv_o = b + b1; tm = &(tms->tm[0]); e = exp(tm->x * h); tm->cnv_i = tm->cnv_i * e + h1 * tm->c * (i1_i[l][k] * e + i2_i[l][k]); tm->cnv_o = tm->cnv_o * e + h1 * tm->c * (i1_o[l][k] * e + i2_o[l][k]); ff[j] += tms->aten * i2_o[l][k] + tm->cnv_o + 2.0 * tms->tm[1].cnv_o; gg[j] += tms->aten * i2_i[l][k] + tm->cnv_i + 2.0 * tms->tm[1].cnv_i; } else { for (i = 0; i < 3; i++) { /** 3 poles **/ tm = &(cp->h2t[j][k][l]->tm[i]); e = exp(tm->x * h); tm->cnv_i = tm->cnv_i * e + h1 * tm->c * (i1_i[l][k] * e + i2_i[l][k]); tm->cnv_o = tm->cnv_o * e + h1 * tm->c * (i1_o[l][k] * e + i2_o[l][k]); ff[j] += tm->cnv_o; gg[j] += tm->cnv_i; } ff[j] += cp->h2t[j][k][l]->aten * i2_o[l][k]; gg[j] += cp->h2t[j][k][l]->aten * i2_i[l][k]; } } } for (i = 0; i < noL; i++) { *(ckt->CKTrhs + l1[i]) = ff[i]; *(ckt->CKTrhs + l2[i]) = gg[i]; } return(ext); } static int update_cnv(CPLine *cp, double h) { int i, j, k; int noL; double ai, bi, ao, bo; double e, t; TMS *tms; TERM *tm; noL = cp->noL; for (j = 0; j < noL; j++) for (k = 0; k < noL; k++) { ai = cp->in_node[k]->V; ao = cp->out_node[k]->V; bi = cp->in_node[k]->dv; bo = cp->out_node[k]->dv; if (cp->h1t[j][k]) { if (cp->h1t[j][k]->ifImg) { tms = cp->h1t[j][k]; if (tms == NULL) continue; tm = &(tms->tm[0]); e = cp->h1e[j][k][0]; t = tm->c / tm->x; update_cnv_a(tms, h, ai, ao, ai - bi * h, ao - bo * h, cp->h1e[j][k][1], cp->h1e[j][k][2]); bi *= t; bo *= t; tm->cnv_i = (tm->cnv_i - bi*h) * e + (e - 1.0)*(ai*t + 1.0e+12*bi/tm->x); tm->cnv_o = (tm->cnv_o - bo*h) * e + (e - 1.0)*(ao*t + 1.0e+12*bo/tm->x); } else for (i = 0; i < 3; i++) { tm = &(cp->h1t[j][k]->tm[i]); e = cp->h1e[j][k][i]; t = tm->c / tm->x; bi *= t; bo *= t; tm->cnv_i = (tm->cnv_i - bi*h) * e + (e - 1.0)*(ai*t + 1.0e+12*bi/tm->x); tm->cnv_o = (tm->cnv_o - bo*h) * e + (e - 1.0)*(ao*t + 1.0e+12*bo/tm->x); } } } return 0; } static VI_list *new_vi(void) { VI_list *q; if (pool_vi) { q = pool_vi; pool_vi = pool_vi->pool; return(q); } else return(TMALLOC(VI_list, 1)); } static void free_vi(VI_list *q) { q->pool = pool_vi; pool_vi = q; } static int add_new_vi(CPLinstance *here, CKTcircuit *ckt, int time) { VI_list *vi; int i, noL; CPLine *cp, *cp2; cp = here->cplines; cp2 = here->cplines2; vi = new_vi(); vi->time = time; noL = cp->noL; for (i = 0; i < noL; i++) { /* vi->v_i[i] = cp->in_node[i]->V; vi->v_o[i] = cp->out_node[i]->V; */ vi->v_i[i] = *(ckt->CKTrhsOld + here->CPLposNodes[i]); vi->v_o[i] = *(ckt->CKTrhsOld + here->CPLnegNodes[i]); vi->i_i[i] = *(ckt->CKTrhsOld + here->CPLibr1[i]); vi->i_o[i] = *(ckt->CKTrhsOld + here->CPLibr2[i]); } cp->vi_tail->next = vi; cp2->vi_tail->next = vi; vi->next = NULL; cp->vi_tail = vi; cp2->vi_tail = vi; return(1); } static int get_pvs_vi(int t1, int t2, CPLine *cp, double v1_i[MAX_CP_TX_LINES][MAX_CP_TX_LINES], double v2_i[MAX_CP_TX_LINES][MAX_CP_TX_LINES], double i1_i[MAX_CP_TX_LINES][MAX_CP_TX_LINES], double i2_i[MAX_CP_TX_LINES][MAX_CP_TX_LINES], double v1_o[MAX_CP_TX_LINES][MAX_CP_TX_LINES], double v2_o[MAX_CP_TX_LINES][MAX_CP_TX_LINES], double i1_o[MAX_CP_TX_LINES][MAX_CP_TX_LINES], double i2_o[MAX_CP_TX_LINES][MAX_CP_TX_LINES]) { double ta[MAX_CP_TX_LINES], tb[MAX_CP_TX_LINES]; VI_list *vi, *vi1; double f; int i, j; int mini = -1; double minta = 123456789.0; int ext = 0; int noL; noL = cp->noL; for (i = 0; i < noL; i++) { ta[i] = t1 - cp->taul[i]; tb[i] = t2 - cp->taul[i]; if (ta[i] < minta) { minta = ta[i]; mini = i; } } for (i = 0; i < noL; i++) { ratio[i] = 0.0; if (tb[i] <= 0) { for (j = 0; j < noL; j++) { i1_i[i][j] = i2_i[i][j] = i1_o[i][j] = i2_o[i][j] = 0.0; v1_i[i][j] = v2_i[i][j] = cp->dc1[j]; v1_o[i][j] = v2_o[i][j] = cp->dc2[j]; } } else { if (ta[i] <= 0) { for (j = 0; j < noL; j++) { i1_i[i][j] = i1_o[i][j] = 0.0; v1_i[i][j] = cp->dc1[j]; v1_o[i][j] = cp->dc2[j]; } vi1 = cp->vi_head; vi = vi1->next; } else { vi1 = cp->vi_head; for (vi = vi1->next; vi->time < ta[i]; ) { /* if (i == mini) free_vi(vi1); */ vi1 = vi; /* new */ vi = vi->next; if (vi == NULL) goto errordetect; } f = (ta[i] - vi1->time) / (vi->time - vi1->time); for (j = 0; j < noL; j++) { v1_i[i][j] = vi1->v_i[j] + f * (vi->v_i[j] - vi1->v_i[j]); v1_o[i][j] = vi1->v_o[j] + f * (vi->v_o[j] - vi1->v_o[j]); i1_i[i][j] = vi1->i_i[j] + f * (vi->i_i[j] - vi1->i_i[j]); i1_o[i][j] = vi1->i_o[j] + f * (vi->i_o[j] - vi1->i_o[j]); } if (i == mini) cp->vi_head = vi1; } if (tb[i] > t1) { /* fprintf(stderr, "pvs: time = %d\n", t2); */ ext = 1; ratio[i] = f = (tb[i] - t1) / (t2 - t1); if (vi) for (; vi->next; vi = vi->next) ; else vi = vi1; f = 1 - f; for (j = 0; j < noL; j++) { v2_i[i][j] = vi->v_i[j] * f; v2_o[i][j] = vi->v_o[j] * f; i2_i[i][j] = vi->i_i[j] * f; i2_o[i][j] = vi->i_o[j] * f; } } else { for (; vi->time < tb[i];) { vi1 = vi; /* new */ vi = vi->next; if (vi == NULL) goto errordetect; } f = (tb[i] - vi1->time) / (vi->time - vi1->time); for (j = 0; j < noL; j++) { v2_i[i][j] = vi1->v_i[j] + f * (vi->v_i[j] - vi1->v_i[j]); v2_o[i][j] = vi1->v_o[j] + f * (vi->v_o[j] - vi1->v_o[j]); i2_i[i][j] = vi1->i_i[j] + f * (vi->i_i[j] - vi1->i_i[j]); i2_o[i][j] = vi1->i_o[j] + f * (vi->i_o[j] - vi1->i_o[j]); } } } } return(ext); errordetect: fprintf(stderr, "your maximum time step is too large for tau.\n"); fprintf(stderr, "decrease max time step in .tran card and try again\n"); controlled_exit(0); } static int update_delayed_cnv(CPLine *cp, double h) { int i, j, k; double *ratio; double f; VI_list *vi; TMS *tms; int noL; h *= 0.5e-12; ratio = cp->ratio; vi = cp->vi_tail; noL = cp->noL; for (k = 0; k < noL; k++) /* mode */ if (ratio[k] > 0.0) for (i = 0; i < noL; i++) /* current eqn */ for (j = 0; j < noL; j++) { tms = cp->h3t[i][j][k]; if (tms == NULL) continue; f = h * ratio[k] * vi->v_i[j]; tms->tm[0].cnv_i += f * tms->tm[0].c; tms->tm[1].cnv_i += f * tms->tm[1].c; tms->tm[2].cnv_i += f * tms->tm[2].c; f = h * ratio[k] * vi->v_o[j]; tms->tm[0].cnv_o += f * tms->tm[0].c; tms->tm[1].cnv_o += f * tms->tm[1].c; tms->tm[2].cnv_o += f * tms->tm[2].c; tms = cp->h2t[i][j][k]; f = h * ratio[k] * vi->i_i[j]; tms->tm[0].cnv_i += f * tms->tm[0].c; tms->tm[1].cnv_i += f * tms->tm[1].c; tms->tm[2].cnv_i += f * tms->tm[2].c; f = h * ratio[k] * vi->i_o[j]; tms->tm[0].cnv_o += f * tms->tm[0].c; tms->tm[1].cnv_o += f * tms->tm[1].c; tms->tm[2].cnv_o += f * tms->tm[2].c; } return(1); } static int expC(double ar, double ai, double h, double *cr, double *ci) { double e, cs, si; e = exp(ar * h); cs = cos(ai * h); si = sin(ai * h); *cr = e * cs; *ci = e * si; return(1); } static int multC(double ar, double ai, double br, double bi, double *cr, double *ci) { double tp; tp = ar*br - ai*bi; *ci = ar*bi+ai*br; *cr = tp; return (1); } static void update_cnv_a(TMS *tms, double h, double ai, double ao, double bi, double bo, double er, double ei) { double a, b, a1, b1; h *= 0.5e-12; multC(tms->tm[1].c, tms->tm[2].c, er, ei, &a1, &b1); multC(tms->tm[1].cnv_i, tms->tm[2].cnv_i, er, ei, &a, &b); tms->tm[1].cnv_i = a + h * (a1 * bi + ai * tms->tm[1].c); tms->tm[2].cnv_i = b + h * (b1 * bi + ai * tms->tm[2].c); multC(tms->tm[1].cnv_o, tms->tm[2].cnv_o, er, ei, &a, &b); tms->tm[1].cnv_o = a + h * (a1 * bo + ao * tms->tm[1].c); tms->tm[2].cnv_o = b + h * (b1 * bo + ao * tms->tm[2].c); } static int divC(double ar, double ai, double br, double bi, double *cr, double *ci) { double t; t = br*br + bi*bi; *cr = (ar*br + ai*bi) / t; *ci = (ai*br - ar*bi) / t; return(1); } tmpk8ny_4pz/src/spicelib/devices/cpl/cpl.c0000644000175000017500000000257213546075722020671 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 Charles Hough **********/ #include "ngspice/ngspice.h" #include "cpldefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "ngspice/suffix.h" IFparm CPLpTable[] = { IOPU("pos_nodes", CPL_POS_NODE, IF_VECTOR|IF_STRING, "in nodes"), IOPU("neg_nodes", CPL_NEG_NODE, IF_VECTOR|IF_STRING, "out nodes"), IOP("dimension", CPL_DIM, IF_INTEGER, "number of coupled lines"), IOP("length", CPL_LENGTH, IF_REAL, "length of lines"), }; IFparm CPLmPTable[] = { /* model parameters */ IOP( "r", CPL_R, IF_REALVEC,"resistance per length"), IOP( "l", CPL_L, IF_REALVEC,"inductance per length"), IOP( "c", CPL_C, IF_REALVEC,"capacitance per length"), IOP( "g", CPL_G, IF_REALVEC,"conductance per length"), IOP( "length", CPL_length, IF_REAL,"length"), /* txl devices can be transformed to cpl devices in inpdomod.c * Then we need to be able to swallow the 'txl' flag on a 'cpl' .model line */ IP( "cpl", CPL_MOD_R, IF_FLAG,"Device is a cpl model"), IPR( "txl", CPL_MOD_R, IF_FLAG,"Device is a cpl model"), }; char *CPLnames[] = { "P+", "P-" }; int CPLnSize = NUMELEMS(CPLnames); int CPLiSize = sizeof(CPLinstance); int CPLmSize = sizeof(CPLmodel); int CPLmPTSize = NUMELEMS(CPLmPTable); int CPLpTSize = NUMELEMS(CPLpTable); tmpk8ny_4pz/src/spicelib/devices/cpl/cplinit.c0000644000175000017500000000267113546075722021555 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "cplitf.h" #include "cplext.h" #include "cplinit.h" SPICEdev CPLinfo = { .DEVpublic = { .name = "CplLines", .description = "Simple Coupled Multiconductor Lines", .terms = &CPLnSize, .numNames = &CPLnSize, .termNames = CPLnames, .numInstanceParms = &CPLpTSize, .instanceParms = CPLpTable, .numModelParms = &CPLmPTSize, .modelParms = CPLmPTable, .flags = 0, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = CPLparam, .DEVmodParam = CPLmParam, .DEVload = CPLload, .DEVsetup = CPLsetup, .DEVunsetup = CPLunsetup, .DEVpzSetup = NULL, .DEVtemperature = NULL, .DEVtrunc = NULL, .DEVfindBranch = NULL, .DEVacLoad = NULL, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = NULL, .DEVask = CPLask, .DEVmodAsk = CPLmAsk, .DEVpzLoad = NULL, .DEVconvTest = NULL, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &CPLiSize, .DEVmodSize = &CPLmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_cpl_info(void) { return &CPLinfo; } tmpk8ny_4pz/src/spicelib/devices/cpl/cplmask.c0000644000175000017500000000243113546075722021537 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 2004 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "cpldefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int CPLmAsk(CKTcircuit *ckt, GENmodel *inModel, int which, IFvalue *value) { CPLmodel *model = (CPLmodel *)inModel; NG_IGNORE(ckt); switch(which) { case CPL_R: value->v.vec.rVec = model->Rm; value->v.numValue = model->Rm_counter; return(OK); case CPL_L: value->v.vec.rVec = model->Lm; value->v.numValue = model->Lm_counter; return(OK); case CPL_G: value->v.vec.rVec = model->Gm; value->v.numValue = model->Gm_counter; return(OK); case CPL_C: value->v.vec.rVec = model->Cm; value->v.numValue = model->Cm_counter; return(OK); case CPL_length: value->rValue = model->length; return(OK); case CPL_MOD_R: /* No op */ return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/cpl/cpldefs.h0000644000175000017500000000445213546075722021537 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. **********/ #ifndef CPL #define CPL #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" #include "ngspice/swec.h" /* information used to describe a single instance */ typedef struct sCPLinstance { struct GENinstance gen; #define CPLmodPtr(inst) ((struct sCPLmodel *)((inst)->gen.GENmodPtr)) #define CPLnextInstance(inst) ((struct sCPLinstance *)((inst)->gen.GENnextInstance)) #define CPLname gen.GENname #define CPLstate gen.GENstate int *CPLposNodes; int *CPLnegNodes; int dimension; double CPLlength; int *CPLibr1; int *CPLibr2; CPLine *cplines; /* pointer to SWEC cplines type */ CPLine *cplines2; /* temporary pointer to SWEC cplines type */ char **in_node_names; char **out_node_names; double **CPLibr1Ibr1Ptr; double **CPLibr2Ibr2Ptr; double **CPLposIbr1Ptr; double **CPLnegIbr2Ptr; /* trial */ double **CPLposPosPtr; double **CPLnegNegPtr; double **CPLposNegPtr; double **CPLnegPosPtr; double ***CPLibr1PosPtr; double ***CPLibr2NegPtr; double ***CPLibr1NegPtr; double ***CPLibr2PosPtr; double ***CPLibr1Ibr2Ptr; double ***CPLibr2Ibr1Ptr; unsigned CPLibr1Given : 1; unsigned CPLibr2Given : 1; unsigned CPLdcGiven : 1; unsigned CPLlengthGiven : 1; } CPLinstance ; /* per model data */ typedef struct sCPLmodel { /* model structure for a cpl */ struct GENmodel gen; #define CPLmodType gen.GENmodType #define CPLnextModel(inst) ((struct sCPLmodel *)((inst)->gen.GENnextModel)) #define CPLinstances(inst) ((CPLinstance *)((inst)->gen.GENinstances)) #define CPLmodName gen.GENmodName double *Rm; int Rm_counter; double *Gm; int Gm_counter; double *Lm; int Lm_counter; double *Cm; int Cm_counter; double length; unsigned Rmgiven : 1; unsigned Lmgiven : 1; unsigned Gmgiven : 1; unsigned Cmgiven : 1; unsigned lengthgiven : 1; } CPLmodel; /* instance parameters */ enum { CPL_POS_NODE = 1, CPL_NEG_NODE, CPL_DIM, CPL_LENGTH, }; /* model parameters */ enum { CPL_R = 101, CPL_C, CPL_G, CPL_L, CPL_length, CPL_MOD_R, }; #include "cplext.h" extern VI_list *pool_vi; #endif /*CPL*/ tmpk8ny_4pz/src/spicelib/devices/adms/0000755000175000017500000000000013546075722020107 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/adms/hicum0/0000755000175000017500000000000013546075722021274 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/adms/hicum0/admsva/0000755000175000017500000000000013546075722022547 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/adms/hicum0/admsva/hicum0.va0000644000175000017500000007537413546075722024304 0ustar carstencarsten// HICUM Level_0 Version_1.12: A Verilog-A description // (A simplified version of HICUM Level2 model for BJT) // ## It is modified after the first version of HICUM/L0 code ## // 12/08: Modifications for ngspice and adms2.2.7 DW // Changed VT0 in Vt0 to prevent conflict in compiled C version. // Made a temporary variable cjei_i for cjei output purpose only. // Minor code related changes // 03/08: Quick Fix: Default value of TFH has been changed from infinity to zero and modified the default value limits to [0, inf) to include zero // 12/06: Upper limit of FGEO is changed to infinity // 06/06: Thermal node "tnode" set as external // Flag FLSH introduced for controlling Self-heating calculation // all if-else blocks marked with begin-end // all series resistors and RTH are allowed to have a minimum value MIN_R // 07/06: QCJMOD deleted, QJMODF introduced along with with HICJQ // ddx() operator used with QJMOD and QJMODF wherever needed // aj is kept at 2.4 except BE depletion charge // Substrate transistor transfer current added. // Gmin added to (bi,ei) and (bi,ci) branches. // hyperbolic smoothing used in rbi computation to avoid devide-by-zero. // ********************************************************************************* // 06/06: Comment on NODE COLLAPSING: // Presently this verilog code permits a minimum of 1 milli-Ohm resistance for any // series resistance as well as for thermal resistance RTH. If any of the resistance // values drops below this minimum value, the corresponding nodes are shorted with // zero voltage contribution. We want the model compilers/simulators deal this // situation in such a manner that the corresponding node is COLLAPSED. // We expect that the simulators should permit current contribution statement // for any branch with resistance value more than (or equal to) 1 milli-Ohm without // any convergence problem. In fact, we wish NOT to have to use a voltage contribution // statement in our Verilog code, except as an indication for the model compiler/simulator // to interprete a zero branch voltage as NODE-COLLAPSING action. // ********************************************************************************** //Default simulator: Spectre `ifdef insideADMS `define P(p) (*p*) `define PGIVEN(p) $given(p) `define INITIAL_MODEL @(initial_model) `else `define P(p) `define PGIVEN(p) p `define INITIAL_MODEL @(initial_step) `endif //ADS //`include "constants.vams" //`include "disciplines.vams" //`include "compact.vams" //Spectre `include "constants.h" `include "discipline.h" `define NPN +1 `define PNP -1 `define VPT_thresh 1.0e2 `define EXPLIM 80.0 `define INF 1.0e6 `define TMAX 326.85 `define TMIN -100.0 `define MIN_R 0.001 //`define Gmin 1.0e-12 `define QCMODF(vj,cj0,vd,z,aj,cjf)\ if(cj0 > 0.0) begin\ vf = vd*(1.0-exp(-ln(aj)/z));\ xvf = (vf-vj)/VT;\ xvf2 = sqrt(xvf*xvf+1.921812);\ v_j = vf-VT*(xvf+xvf2)*0.5;\ dvj = 0.5*(xvf+xvf2)/xvf2;\ cjf = cj0*exp(-z*ln(1-v_j/vd))*dvj+aj*cj0*(1-dvj);\ end else begin\ cjf = 0.0;\ end // DEPLETION CHARGE CALCULATION // Hyperbolic smoothing used; no punch-through `define QJMODF(vj,cj0,vd,z,aj,qjf)\ if(cj0 > 0.0) begin\ vf = vd*(1.0-exp(-ln(aj)/z));\ xvf = (vf-vj)/VT;\ xvf2 = sqrt(xvf*xvf+1.921812);\ v_j = vf-VT*(xvf+xvf2)*0.5;\ x = 1.0-z;\ y = 1.0-exp(x*ln(1.0-v_j/vd));\ qjf = cj0*vd*y/x+aj*cj0*(vj-v_j);\ end else begin\ qjf = 0.0;\ end // Depletion Charge : with punch through `define QJMOD(vj,cj0,vd,z,vpt,aj,qjf)\ if(cj0 > 0.0) begin\ zr = z/4.0;\ vp = vpt-vd;\ vf = vd*(1.0-exp(-ln(aj)/z));\ cmax = aj*cj0;\ cr = cj0*exp((z-zr)*ln(vd/vpt));\ a = VT;\ ve = (vf-vj)/a;\ if (ve <= `EXPLIM) begin\ ex1 = exp(ve);\ ee1 = 1.0+ex1;\ vj1 = vf-a*ln(ee1);\ end else begin\ vj1 = vj;\ end\ a = 0.1*vp+4.0*VT;\ vr = (vp+vj1)/a;\ if (vr <= `EXPLIM) begin\ ex1 = exp(vr);\ ee1 = 1.0+ex1;\ vj2 = -vp+a*ln(ee1);\ end else begin\ vj2 = vj1;\ end\ vj4 = vj-vj1;\ ez = 1.0-z;\ ezr = 1.0-zr;\ vdj1 = ln(1.0-vj1/vd);\ vdj2 = ln(1.0-vj2/vd);\ qj1 = cj0*(1.0-exp(vdj2*ez))/ez;\ qj2 = cr*(1.0-exp(vdj1*ezr))/ezr;\ qj3 = cr*(1.0-exp(vdj2*ezr))/ezr;\ qjf = (qj1+qj2-qj3)*vd+cmax*vj4;\ end else begin\ qjf = 0.0;\ end // DEPLETION CHARGE CALCULATION SELECTOR: // Dependent on junction punch-through voltage // Important for collector related junctions `define HICJQ(vj,cj0,vd,z,vpt,qjf)\ if(vpt < `VPT_thresh) begin\ `QJMOD(vj,cj0,vd,z,vpt,2.4,qjf)\ end else begin\ `QJMODF(vj,cj0,vd,z,2.4,qjf)\ end //Temperature dependence of depletion capacitance parameters `define TMPHICJ(cj0,vd,z,vg,cj0_t,vd_t)\ arg = 0.5*vd/Vt0;\ vdj0 = 2*Vt0*ln(exp(arg)-exp(-arg));\ vdjt = vdj0*qtt0+vg*(1-qtt0)-mg*VT*ln_qtt0;\ vd_t = vdjt+2*VT*ln(0.5*(1+sqrt(1+4*exp(-vdjt/VT))));\ cj0_t = cj0*exp(z*ln(vd/vd_t)); //Limiting exponential `define LIN_EXP(le, arg)\ if(arg > 80) begin\ le = (1 + ((arg) - 80));\ arg = 80;\ end else begin\ le=1;\ end\ le = le*limexp(arg); // IDEAL DIODE (WITHOUT CAPACITANCE): // conductance not calculated // INPUT: // IS, IST : saturation currents (model parameter related) // UM1 : ideality factor // U : branch voltage // IMPLICIT INPUT: // VT : thermal voltage // OUTPUT: // Iz : diode current `define HICDIO(IS,IST,UM1,U,Iz)\ DIOY = U/(UM1*VT);\ if (IS > 0.0) begin\ if (DIOY > 80) begin\ le = (1 + ((DIOY) - 80));\ DIOY = 80;\ end else begin\ le = 1;\ end\ le = le*limexp(DIOY);\ Iz = IST*(le-1.0);\ if(DIOY <= -14.0) begin\ Iz = -IST;\ end\ end else begin\ Iz = 0.0;\ end module hic0_full (c,b,e,s,tnode); //Node definitions inout c,b,e,s,tnode; electrical c `P(info="external collector node"); electrical b `P(info="external base node"); electrical e `P(info="external emitter node"); electrical s `P(info="external substrate node"); electrical ci `P(info="internal collector node"); electrical bi `P(info="internal base node"); electrical ei `P(info="internal emitter node"); electrical tnode `P(info="local temperature rise node"); //Branch definitions branch (ci,c) br_cic_i; branch (ci,c) br_cic_v; branch (ei,e) br_eie_i; branch (ei,e) br_eie_v; branch (bi,ei) br_biei; branch (bi,ci) br_bici; branch (ci,ei) br_ciei; branch (b,bi) br_bbi_i; branch (b,bi) br_bbi_v; branch (b,e) br_be; branch (b,ci) br_bci; branch (b,s) br_bs; branch (s,ci) br_sci; branch (tnode ) br_sht; // // Parameter initialization with default values // Collector current parameter real is = 1.0e-16 from [0:1] `P(spice:name="is" info="(Modified) saturation current" m:factor="yes" unit="A"); parameter real mcf = 1.00 from (0:10] `P(spice:name="mcf" info="Non-ideality coefficient of forward collector current"); parameter real mcr = 1.00 from (0:10] `P(spice:name="mcr" info="Non-ideality coefficient of reverse collector current"); parameter real vef = `INF from (0:`INF] `P(spice:name="vef" info="forward Early voltage (normalization volt.)" unit="V" default:value="infinity"); parameter real iqf = `INF from (0:`INF] `P(spice:name="iqf" info="forward d.c. high-injection toll-off current" unit="A" m:factor="yes" default:value="infinity"); parameter real iqr = `INF from (0:`INF] `P(spice:name="iqr" info="inverse d.c. high-injection roll-off current" unit="A" m:factor="yes" default:value="infinity"); parameter real iqfh = `INF from (0:`INF] `P(spice:name="iqfh" info="high-injection correction current" unit="A" m:factor="yes"); parameter real tfh = 0.0 from [0:`INF) `P(spice:name="tfh" info="high-injection correction factor" test:value="2e-9" m:factor="yes"); // Base current parameter real ibes = 1e-18 from [0:1] `P(spice:name="ibes" info="BE saturation current" unit="A" m:factor="yes"); parameter real mbe = 1.0 from (0:10] `P(spice:name="mbe" info="BE non-ideality factor"); parameter real ires = 0.0 from [0:1] `P(spice:name="ires" info="BE recombination saturation current" test:value="1e-16" unit="A" m:factor="yes"); parameter real mre = 2.0 from (0:10] `P(spice:name="mre" info="BE recombination non-ideality factor"); parameter real ibcs = 0.0 from [0:1] `P(spice:name="ibcs" info="BC saturation current" test:value="1e-16" unit="A" m:factor="yes"); parameter real mbc = 1.0 from (0:10] `P(spice:name="mbc" info="BC non-ideality factor"); // BE depletion cap parameter real cje0 = 1.0e-20 from (0:`INF) `P(spice:name="cje0" info="Zero-bias BE depletion capacitance" unit="F" test:value="2e-14" m:factor="yes"); parameter real vde = 0.9 from (0:10] `P(spice:name="vde" info="BE built-in voltage" unit="V"); parameter real ze = 0.5 from (0:1] `P(spice:name="ze" info="BE exponent factor"); parameter real aje = 2.5 from [1:`INF) `P(spice:name="aje" info="Ratio of maximum to zero-bias value"); // Transit time parameter real t0 = 0.0 from [0:`INF) `P(spice:name="t0" info="low current transit time at Vbici=0" test:value="5e-12" unit="s"); parameter real dt0h = 0.0; // from [0:`INF) `P(spice:name="dt0h" info="Base width modulation contribution" test:value="2e-12" unit="s"); parameter real tbvl = 0.0 from [0:`INF) `P(spice:name="tbvl" info="SCR width modulation contribution" test:value="4e-12" unit="s"); parameter real tef0 = 0.0 from [0:`INF) `P(spice:name="tef0" info="Storage time in neutral emitter" test:value="1e-12" unit="s"); parameter real gte = 1.0 from (0:10] `P(spice:name="gte" info="Exponent factor for emmiter transit time"); parameter real thcs = 0.0 from [0:`INF) `P(spice:name="thcs" info="Saturation time at high current densities" test:value="3e-11" unit="s"); parameter real ahc = 0.1 from (0:10] `P(spice:name="ahc" info="Smoothing facor for current dependence"); parameter real tr = 0.0 from [0:`INF) `P(spice:name="tr" info="Storage time at inverse operation" unit="s"); // Critical current parameter real rci0 = 150 from (0:`INF) `P(spice:name="rci0" info="Low-field collector resistance under emitter" test:value="50" unit="Ohm" m:inverse_factor="yes"); parameter real vlim = 0.5 from (0:10] `P(spice:name="vlim" info="Voltage dividing ohmic and satur.region" unit="V"); parameter real vpt = 100 from (0:100] `P(spice:name="vpt" info="Punch-through voltage" test:value="10" unit="V" default="infinity"); parameter real vces = 0.1 from [0:1] `P(spice:name="vces" info="Saturation voltage" unit="V"); // BC depletion cap intern parameter real cjci0 = 1.0e-20 from (0:`INF) `P(spice:name="cjci0" info="Total zero-bias BC depletion capacitance" test:value="1e-15" unit="F" m:factor="yes"); parameter real vdci = 0.7 from (0:10] `P(spice:name="vdci" info="BC built-in voltage" test:value="0.7" unit="V"); parameter real zci = 0.333 from (0:1] `P(spice:name="zci" info="BC exponent factor" test:value="0.4"); parameter real vptci = 100 from (0:100] `P(spice:name="vptci" info="Punch-through voltage of BC junction" test:value="50" unit="V"); // BC depletion cap extern parameter real cjcx0 = 1.0e-20 from [0:`INF) `P(spice:name="cjcx0" info="Zero-bias external BC depletion capacitance" unit="F" test:value="1e-15" m:factor="yes"); parameter real vdcx = 0.7 from (0:10] `P(spice:name="vdcx" info="External BC built-in voltage" unit="V"); parameter real zcx = 0.333 from (0:1] `P(spice:name="zcx" info="External BC exponent factor"); parameter real vptcx = 100 from (0:100] `P(spice:name="vptcx" info="Punch-through voltage" unit="V" test:value="5.0" default="infinity"); parameter real fbc = 1.0 from [0:1] `P(spice:name="fbc" info="Split factor = Cjci0/Cjc0" test:value="0.5"); // Base resistance parameter real rbi0 = 0.0 from [0:`INF) `P(spice:name="rbi0" info="Internal base resistance at zero-bias" test:value="100" unit="Ohm" m:inverse_factor="yes"); parameter real vr0e = 2.5 from (0:`INF] `P(spice:name="vr0e" info="forward Early voltage (normalization volt.)" unit="V"); parameter real vr0c = `INF from (0:`INF] `P(spice:name="vr0c" info="forward Early voltage (normalization volt.)" unit="V" default="infinity" test:value="25.0"); parameter real fgeo = 0.656 from [0:`INF] `P(spice:name="fgeo" info="Geometry factor" test:value="0.73"); // Series resistances parameter real rbx = 0.0 from [0:`INF) `P(spice:name="rbx" info="External base series resistance" test:value="8.8" unit="Ohm" m:inverse_factor="yes"); parameter real rcx = 0.0 from [0:`INF) `P(spice:name="rcx" info="Emitter series resistance" test:value="12.5" unit="Ohm" m:inverse_factor="yes"); parameter real re = 0.0 from [0:`INF) `P(spice:name="re" info="External collector series resistance" test:value="9.16" unit="Ohm" m:inverse_factor="yes"); // Substrate transfer current, diode current and cap parameter real itss = 0.0 from [0:1.0] `P(spice:name="itss" info="Substrate transistor transfer saturation current" unit="A" test:value="1e-17" m:factor="yes"); parameter real msf = 1.0 from (0:10] `P(spice:name="msf" info="Substrate transistor transfer current non-ideality factor"); parameter real iscs = 0.0 from [0:1.0] `P(spice:name="iscs" info="SC saturation current" unit="A" test:value="1e-17" m:factor="yes"); parameter real msc = 1.0 from (0:10] `P(spice:name="msc" info="SC non-ideality factor"); parameter real cjs0 = 1.0e-20 from [0:`INF) `P(spice:name="cjs0" info="Zero-bias SC depletion capacitance" unit="F" test:value="1e-15" m:factor="yes"); parameter real vds = 0.3 from (0:10] `P(spice:name="vds" info="SC built-in voltage" unit="V"); parameter real zs = 0.3 from (0:1] `P(spice:name="zs" info="External SC exponent factor"); parameter real vpts = 100 from (0:100] `P(spice:name="vpts" info="SC punch-through voltage" unit="V" test:value="5.0" default="infinity"); // Parasitic caps parameter real cbcpar = 0.0 from [0:`INF) `P(spice:name="cbcpar" info="Collector-base isolation (overlap) capacitance" unit="F" m:factor="yes" test:value="1e-15"); parameter real cbepar = 0.0 from [0:`INF) `P(spice:name="cbepar" info="Emitter-base oxide capacitance" unit="F" m:factor="yes" test:value="2e-15"); // BC avalanche current parameter real eavl = 0.0 from [0:inf) `P(spice:name="eavl" info="Exponent factor" test:value="1e-14"); parameter real kavl = 0.0 from [0:`INF) `P(spice:name="kavl" info="Prefactor" test:value="1.19"); // Flicker noise parameter real kf = 0.0 from [0:`INF) `P(spice:name="kf" info="flicker noise coefficient" unit="M^(1-AF)"); parameter real af = 2.0 from (0:10] `P(spice:name="af" info="flicker noise exponent factor"); // Temperature dependence parameter real vgb = 1.2 from (0:10] `P(spice:name="vgb" info="Bandgap-voltage" unit="V" test:value="1.17"); parameter real vge = 1.17 from (0:10] `P(spice:name="vge" info="Effective emitter bandgap-voltage" unit="V" test:value="1.07"); parameter real vgc = 1.17 from (0:10] `P(spice:name="vgc" info="Effective collector bandgap-voltage" unit="V" test:value="1.14"); parameter real vgs = 1.17 from (0:10] `P(spice:name="vgs" info="Effective substrate bandgap-voltage" unit="V" test:value="1.17"); parameter real f1vg =-1.02377e-4 `P(spice:name="f1vg" info="Coefficient K1 in T-dependent bandgap equation" unit="V/K"); parameter real f2vg = 4.3215e-4 `P(spice:name="f2vg" info="Coefficient K2 in T-dependent bandgap equation" unit="V/K"); parameter real alt0 = 0.0 `P(spice:name="alt0" info="Frist-order TC of tf0" unit="1/K"); parameter real kt0 = 0.0 `P(spice:name="kt0" info="Second-order TC of tf0" unit="1/K^2"); parameter real zetact = 3.0 `P(spice:name="zetact" info="Exponent coefficient in transfer current temperature dependence" test:value="3.5"); parameter real zetabet = 3.5 `P(spice:name="zetabet" info="Exponent coefficient in BE junction current temperature dependence" test:value="4.0"); parameter real zetaci = 0.0 `P(spice:name="zetaci" info="TC of epi-collector diffusivity" test:value="1.6"); parameter real alvs = 0.0 `P(spice:name="alvs" info="Relative TC of satur.drift velocity" unit="1/K" test:value="1e-3"); parameter real alces = 0.0 `P(spice:name="alces" info="Relative TC of vces" unit="1/K" test:value="4e-4"); parameter real zetarbi = 0.0 `P(spice:name="zetarbi" info="TC of internal base resistance" test:value="0.6"); parameter real zetarbx = 0.0 `P(spice:name="zetarbx" info="TC of external base resistance" test:value="0.2"); parameter real zetarcx = 0.0 `P(spice:name="zetarcx" info="TC of external collector resistance" test:value="0.2"); parameter real zetare = 0.0 `P(spice:name="zetare" info="TC of emitter resistances"); parameter real alkav = 0.0 `P(spice:name="alkav" info="TC of avalanche prefactor" unit="1/K"); parameter real aleav = 0.0 `P(spice:name="aleav" info="TC of avalanche exponential factor" unit="1/K"); // Self-heating parameter integer flsh = 0 from [0:2] `P(spice:name="flsh" info="Flag for self-heating calculation" test:value="2"); parameter real rth = 0.0 from [0:`INF) `P(spice:name="rth" info="Thermal resistance" test:value="200.0" unit="K/W" m:inverse_factor="yes"); parameter real cth = 0.0 from [0:`INF) `P(spice:name="cth" info="Thermal capacitance" test:value="0.1" unit="Ws/K" m:factor="yes"); // Transistor type parameter integer npn = 1 from [0:1] `P(spice:isflag="yes" info="model type flag for npn" ); parameter integer pnp = 0 from [0:1] `P(info="model type flag for pnp" ); //Circuit simulator specific parameters parameter real tnom = 27 `P(spice:name="tnom" info="Temperature for which parameters are valid" unit="C"); parameter real dt = 0.0 `P(spice:name="dt" type="instance" info="Temperature change for particular transistor" unit="K"); // Declaration of the variables: begin real _circuit_gmin; real HICUMtype `P(spice:name="type" info="Device type from npn or pnp flags" unit="no" ask="yes"); // QCJMOD real cj0,vd,z,aj; real zr,vp; real cmax,cr,ve; real ee1,ez,ezr,vdj1,vdj2,ex1,vr,vj1,vj2,vj4; real qj1,qj2,qj3,qjf; //Cjfun *** VT, removed: BA real cj1,cj2,cj3,cjf; //cjtfun *** tnom,VT,mg,Vt0, removed: BA real vg; real vdj0,vdjt,cj0_t,vd_t,aj_t; // temperature and drift real VT,Tamb,Tdev,Tnom,dT,qtt0,ln_qtt0; real vde_t,vdci_t,vdcx_t,vds_t; real is_t,ires_t,ibes_t,ibcs_t; real itss_t,iscs_t,cje0_t,cjci0_t,cjcx0_t; real cjs0_t,rci0_t,vlim_t; real vces_t,thcs_t,tef0_t,rbi0_t; real rbx_t,rcx_t,re_t,t0_t,eavl_t,kavl_t; real aje_t; // bc charge and cap real qjci `P(ask="yes" info="B-C internal junction charge" unit="C"); real qjcx,qjcii,cjcii,qjcxi,qjciii; //cjcx real cjci0_t_ii,cjcx0_t_ii,cjcx0_t_i,v_j; // be junction real qjei `P(ask="yes" info="B-E internal junction charge" unit="C"); real cjei_i `P(ask="yes" info="B-E internal junction capacitance" unit="F"); // dw: adms2.2.7 problem real cjei,vf,vj,x,y,e1,e2; // transfer and internal base current real cc,qj_2,facl; real tf0,ickf,ickr,itfi,itri,qm; real qpt,itf,itr; real it `P(ask="yes" info="Transfer Current" unit="A"); real ibe,ire,ibi; real itfl,itrl,al,s3l,wl,d_qfh; // be diffusion charge real qf,qf0,dqfh,dqef; real dtef,dtfh,tf,ick; real vc,vceff,s3,w,a,tww; // bc diffusion charge real qr; // avalanche current source real v_bord,a_iavl,lncc; // base resistance real rb,eta,rbi,qje,Qz_nom,fQz; // substrate transistor, diode and cap real qjs,HSa,HSb,HSI_Tsu,HSUM; // self heating real pterm; // new for temperature dependence real mg,zetabci,zetasct,zetatef,avs; real k1,k2,vgbe,vgbc,vgsc,dvg; real xvf,xvf2,dvj,uvc,Vt0; // noise real flicker_Pwr,fourkt,twoq; // LIN_EXP real le,arg,le1,arg1,le2,arg2; //HICDIO real IS,IST,UM1,U,Iz,DIOY; // branch voltages real Vbci,Vbici,Vbiei,Vciei,Vsci,Veie,Vbbi,Vcic,Vbe,Vrth; //Output to be seen real ijbc `P(ask="yes" info="Base-collector diode current" unit="A"); real iavl `P(ask="yes" info="Avalanche current" unit="A"); real ijsc `P(ask="yes" info="Substrate-collector diode current" unit="A"); real Ieei `P(ask="yes" info="Current through external to internal emitter node" unit="A"); real Icci `P(ask="yes" info="Current through external to internal collector node" unit="A"); real Ibbi `P(ask="yes" info="Current through external to internal base node" unit="A"); real Ibici `P(ask="yes" info="Base-collector diode current minus the avalanche current" unit="A"); real ijbe `P(ask="yes" info="Base-emitter diode current" unit="A"); real Qbci,Qbe,Qbici,Qbiei; //Declaration of the variables: end // //======================== calculation of the transistor =================== // analog begin // assign voltages with regard to transistor type `INITIAL_MODEL begin if (`PGIVEN(npn)) HICUMtype = `NPN; else if (`PGIVEN(pnp)) HICUMtype = `PNP; else HICUMtype = `NPN; end Vbci = HICUMtype*V(br_bci); Vbici = HICUMtype*V(br_bici); Vbiei = HICUMtype*V(br_biei); Vciei = HICUMtype*V(br_ciei); Vsci = HICUMtype*V(br_sci); Veie = V(br_eie_v); Vcic = V(br_cic_v); Vbbi = V(br_bbi_v); Vbe = HICUMtype*V(br_be); Vrth = V(br_sht); // // temperature and resulting parameter drift // Tnom = tnom+273.15; Tamb = $temperature; Tdev = Tamb+dt+Vrth; // Limit temperature to avoid FPE's in equations if(Tdev < `TMIN + 273.15) begin Tdev = `TMIN + 273.15; end else begin if (Tdev > `TMAX + 273.15) begin Tdev = `TMAX + 273.15; end end Vt0 = `P_K*Tnom /`P_Q; VT = `P_K*Tdev /`P_Q; dT = Tdev-Tnom; qtt0 = Tdev/Tnom; ln_qtt0 = ln(qtt0); k1 = f1vg*Tnom; k2 = f2vg*Tnom+k1*ln(Tnom); avs = alvs*Tnom; vgbe = (vgb+vge)/2; vgbc = (vgb+vgc)/2; vgsc = (vgs+vgc)/2; mg = 3-`P_Q*f1vg/`P_K; zetabci = mg+1-zetaci; zetasct = mg-1.5; //+1-m_upS with m_upS=2.5 is_t = is*exp(zetact*ln_qtt0+vgb/VT*(qtt0-1)); ibes_t = ibes*exp(zetabet*ln_qtt0+vge/VT*(qtt0-1)); ires_t = ires*exp(0.5*mg*ln_qtt0+0.5*vgbe/VT*(qtt0-1)); ibcs_t = ibcs*exp(zetabci*ln_qtt0+vgc/VT*(qtt0-1)); itss_t = itss*exp(zetasct*ln_qtt0+vgc/VT*(qtt0-1)); iscs_t = iscs*exp(zetasct*ln_qtt0+vgs/VT*(qtt0-1)); `TMPHICJ(cje0,vde,ze,vgbe,cje0_t,vde_t) aje_t = aje*vde_t/vde; `TMPHICJ(cjci0,vdci,zci,vgbc,cjci0_t,vdci_t) `TMPHICJ(cjcx0,vdcx,zcx,vgbc,cjcx0_t,vdcx_t) `TMPHICJ(cjs0,vds,zs,vgsc,cjs0_t,vds_t) rci0_t = rci0*exp(zetaci*ln_qtt0); vlim_t = vlim*exp((zetaci-avs)*ln_qtt0); vces_t = vces*(1+alces*dT); t0_t = t0*(1+alt0*dT+kt0*dT*dT); thcs_t = thcs*exp((zetaci-1)*ln_qtt0); zetatef = zetabet-zetact-0.5; dvg = vgb-vge; tef0_t = tef0*exp(zetatef*ln_qtt0-dvg/VT*(qtt0-1)); rbx_t = rbx*exp(zetarbx*ln_qtt0); rcx_t = rcx*exp(zetarcx*ln_qtt0); rbi0_t = rbi0*exp(zetarbi*ln_qtt0); re_t = re*exp(zetare*ln_qtt0); eavl_t = eavl*exp(aleav*dT); kavl_t = kavl*exp(alkav*dT); // // Calculation of intrinsic transistor elements // // BC charge and cap (internal and external) // The cjcx0 value is used to switch between one (cjcx0=0) and two bc parameter sets // 1. For one parameter set only the internal bc set is partitioned by fbc // 2. For two independent sets only the external set is partitioned by fbc if (cjcx0_t==0) begin cjci0_t_ii = cjci0_t*fbc; // zero bias internal portion qjcxi = 0; cjcx0_t_i = cjci0_t*(1-fbc); // zero bias external portion `HICJQ(Vbci,cjcx0_t_i,vdci_t,zci,vptci,qjcx) end else begin cjci0_t_ii = cjci0_t; // zero bias internal portion cjcx0_t_ii = cjcx0_t*fbc; `HICJQ(Vbici,cjcx0_t_ii,vdcx_t,zcx,vptcx,qjcxi) cjcx0_t_i = cjcx0_t*(1-fbc); // zero bias external portion `HICJQ(Vbci,cjcx0_t_i,vdcx_t,zcx,vptcx,qjcx) end `HICJQ(Vbici,cjci0_t_ii,vdci_t,zci,vptci,qjci) qjcii = qjci+qjcxi; //Internal bc cap without punch through for cc //`HICJQ(Vbici,cjci0_t_ii,vdci_t,zci,100,qjciii) `QCMODF(Vbici,cjci0_t_ii,vdci_t,zci,2.4,cjcii) //cjcii = ddx(qjciii,V(bi)); //Internal be cap and charge `QJMODF(Vbiei,cje0_t,vde_t,ze,aje_t,qjei) cjei = ddx(qjei,V(bi)); cjei_i = cjei; // dw: adms2.2.7 problem // Critical current: ick vc = Vciei-vces_t; uvc = vc/VT-1; vceff = VT*(1+0.5*(uvc+sqrt(uvc*uvc+1.921812))); x = (vceff-vlim_t)/vpt; ick = vceff*(1+0.5*(x+sqrt(x*x+1e-3)))/rci0_t/sqrt(1+vceff*vceff/vlim_t/vlim_t); // Transfer current // Normalized BC cap and carge cc = cjci0_t_ii/cjcii; qjci = qjci/cjci0_t_ii; qj_2 = (1+qjci/vef)/2; // Minority charge transit time tf0 = t0_t+dt0h*(cc-1)+tbvl*(1/cc-1); // DC critical currents ickf = iqf; ickr = iqr; // Ideal transfer currents arg1 = Vbiei/(mcf*VT); `LIN_EXP(le1,arg1) itfi=is_t*le1; arg2 = Vbici/(mcr*VT); `LIN_EXP(le2,arg2) itri=is_t*le2; // Normalized minority charge qm = (itfi/ickf+itri/ickr); // Normalized total hole charge qpt = qj_2+sqrt((qj_2)*(qj_2)+qm); if (qpt<=1e-20) begin qpt=1e-20; end // Low transfer current itfl = itfi/qpt; itrl = itri/qpt; // Normalized injection width with low transfer current // and normalized charge component if (itfl<=1e-20) begin itfl = 1e-20; end al = 1-ick/itfl; s3l = sqrt(al*al+ahc); wl = (al+s3l)/(1+sqrt(1+ahc)); d_qfh = (wl*wl+tfh*itfl/ick)*itfl/iqfh; // Transfer current facl = 1/(1+d_qfh/qpt); itf = itfl*facl; itr = itrl*facl; if (itf<=1e-20) begin itf = 1e-20; end it = itf-itr; // BE diffusion charge // Calculation of low-current portion qf0 = tf0*itf; // Current dependent component a = 1-ick/itf; s3 = sqrt(a*a+ahc); w = (a+s3)/(1+sqrt(1+ahc)); tww = thcs_t*w*w; dqfh = tww*itf; dtfh = tww*(1+2*ick/itf/s3); // Emitter component dtef = tef0_t*exp(gte*ln(itf/ick)); dqef = dtef*itf/(gte+1.0); // Total minority charge and transit time qf = qf0+dqef+dqfh; tf = tf0+dtfh+dtef; // BC diffusion charge qr = tr*itr; // Internal base current // BE diode `HICDIO(ibes,ibes_t,mbe,Vbiei,ibe) `HICDIO(ires,ires_t,mre,Vbiei,ire) ijbe = ibe+ire; // BC diode `HICDIO(ibcs,ibcs_t,mbc,Vbici,ijbc) // Total base current ibi = ijbe+ijbc; // Avalanche current if (Vbici < 0) begin : HICAVL v_bord = eavl_t*vdci_t; if (vdci_t-Vbici>v_bord) begin a_iavl = kavl_t/vdci_t*exp(-cc); iavl = itf*a_iavl*(v_bord+(1+cc)*(vdci_t-Vbici-v_bord)); end else begin lncc = ln(1/cc); iavl = kavl_t*itf*exp(-1/zci*lncc-eavl_t*exp((1/zci-1)*lncc)); end end else begin iavl = 0; end // // Additional elements for external transistor // // Base resistance if(rbi0_t > 0.0) begin : HICRBI // Conductivity modulation with hyperbolic smoothing qje = qjei/cje0_t; Qz_nom = 1+qje/vr0e+qjci/vr0c+itf/ickf+itr/ickr; fQz = 0.5*(Qz_nom+sqrt(Qz_nom*Qz_nom+0.01));; rbi = rbi0_t/fQz; // Emitter current crowding if (ibi > 0.0) begin eta = fgeo*rbi*ibi/VT; if (eta < 1e-6) begin rbi = rbi*(1-0.5*eta); end else begin rbi = rbi*ln(eta+1)/eta; end end end else begin rbi = 0.0; end // Total base resistance rb = rbi+rbx_t; // Parasitic substrate transistor transfer current if(itss > 0.0) begin : Sub_Transfer HSUM = msf*VT; HSa = limexp(Vbci/HSUM); HSb = limexp(Vsci/HSUM); HSI_Tsu = itss_t*(HSa-HSb); end else begin HSI_Tsu = 0.0; end // Substrate diode and cap and charge `HICDIO(iscs,iscs_t,msc,Vsci,ijsc) `HICJQ(Vsci,cjs0_t,vds_t,zs,vpts,qjs) // Self heating if (flsh == 1 && rth >= `MIN_R) begin pterm = it*Vciei+iavl*(vdci_t-Vbici); end else if (flsh == 2 && rth >= `MIN_R) begin pterm = Vciei*it + (vdci_t-Vbici)*iavl + ijbe*Vbiei + ijbc*Vbici + ijsc*Vsci; if (rb >= `MIN_R) begin pterm = pterm + Vbbi*Vbbi/rb; end if (re_t >= `MIN_R) begin pterm = pterm + Veie*Veie/re_t; end if (rcx_t >= `MIN_R) begin pterm = pterm + Vcic*Vcic/rcx_t; end end // // Compute branch sources // Ibici = ijbc - iavl; Qbci = cbcpar*Vbci; Qbe = cbepar*Vbe; Qbici = qjcii+qr; Qbiei = qjei+qf; ijsc = HICUMtype*ijsc; qjs = HICUMtype*qjs; qjcx = HICUMtype*qjcx; Qbci = HICUMtype*Qbci; Qbe = HICUMtype*Qbe; Ibici = HICUMtype*Ibici; Qbici = HICUMtype*Qbici; ijbe = HICUMtype*ijbe; Qbiei = HICUMtype*Qbiei; it = HICUMtype*it; // // Define branch sources // I(br_biei) <+ _circuit_gmin*V(br_biei); I(br_bici) <+ _circuit_gmin*V(br_bici); I(br_bs) <+ HSI_Tsu; I(br_sci) <+ ijsc + _circuit_gmin*V(br_sci); //`P(spectre:gmin="add" spectre:pwl_passive="1e10"); I(br_sci) <+ ddt(qjs); I(br_bci) <+ ddt(qjcx); I(br_bci) <+ ddt(Qbci); I(br_be) <+ ddt(Qbe); if (re >= `MIN_R) begin I(br_eie_i) <+ Veie/re_t + _circuit_gmin*V(br_eie_i);//`P(spectre:gmin="add"); end else begin V(br_eie_v) <+ 0.0; end if (rcx >= `MIN_R) begin I(br_cic_i) <+ Vcic/rcx_t + _circuit_gmin*V(br_cic_i);//`P(spectre:gmin="add"); end else begin V(br_cic_v) <+ 0.0; end if (rbi0 >= `MIN_R || rbx >= `MIN_R) begin I(br_bbi_i) <+ Vbbi/rb + _circuit_gmin*V(br_bbi_i); //`P(spectre:gmin="add"); end else begin V(br_bbi_v) <+ 0.0; end I(br_bici) <+ Ibici + _circuit_gmin*V(br_bici); //`P(spectre:gmin="add" spectre:pwl_sat_current="IMAX" spectre:pwl_sat_cond="imax/0.025" spectre:pwl_rev_current="imax" spectre:pwl_rev_cond="IMAX/0.025"); I(br_bici) <+ ddt(Qbici); I(br_biei) <+ ijbe + _circuit_gmin*V(br_biei); //`P(spectre:gmin="add" spectre:pwl_fwd_current="IBEIS*exp(25.0)" spectre:pwl_fwd_node="bi" spectre:pwl_fwd_cond="IBEIS*exp(25.0)/0.025" spectre:pwl_sat_current="IMAX" spectre:pwl_sat_cond="IMAX/0.025" spectre:pwl_passive="1e10"); I(br_biei) <+ ddt(Qbiei); I(br_ciei) <+ it `P(spectre:pwl_fwd_current="IS*exp(25.0)" spectre:pwl_fwd_node="bi" spectre:pwl_fwd_cond="IS*exp(25.0)/0.025" spectre:pwl_rev_current="IMAX" spectre:pwl_rev_cond="IMAX/0.025" spectre:pwl_passive="1e10"); // Following code is an intermediate solution: // ****************************************** if(flsh == 0 || rth < `MIN_R) begin I(br_sht) <+ Vrth/`MIN_R; end else begin I(br_sht) <+ Vrth/rth-pterm + _circuit_gmin*V(br_sht);//`P(spectre:gmin="add"); I(br_sht) <+ ddt(cth*Vrth); end // ****************************************** // For simulators having no problem with V(br_sht) <+ 0.0 // with external thermal node, follwing code may be used. // This external thermal node should remain accessible. // ******************************************** //if(flsh == 0 || rth < `MIN_R) begin // V(br_sht) <+ 0.0; //end else begin // I(br_sht) <+ Vrth/rth-pterm `P(spectre:gmin="add"); // I(br_sht) <+ ddt(cth*Vrth); //end // ******************************************** // Noise sources // Thermal noise fourkt = 4.0 * `P_K * Tdev; if(rbx >= `MIN_R || rbi0 >= `MIN_R) begin I(br_bbi_i) <+ white_noise(fourkt/rb); end if(rcx >= `MIN_R) begin I(br_cic_i) <+ white_noise(fourkt/rcx_t); end if(re >= `MIN_R) begin I(br_eie_i) <+ white_noise(fourkt/re_t); end // Shot noise twoq = 2.0 * `P_Q; I(br_biei) <+ white_noise(twoq*ijbe); I(br_ciei) <+ white_noise(twoq*it); // Flicker noise flicker_Pwr = kf*pow(ijbe,af); I(br_biei) <+ flicker_noise(flicker_Pwr,1.0); end // analog endmodule tmpk8ny_4pz/src/spicelib/devices/adms/ekv/0000755000175000017500000000000013546075722020674 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/adms/ekv/admsva/0000755000175000017500000000000013546075722022147 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/adms/ekv/admsva/ekv.va0000644000175000017500000005437513546075722023302 0ustar carstencarsten// EPFL-EKV version 2.6: A Verilog-A description. // The intrinsic device is coded according to the official manual // (revision II) available at http://legwww.epfl.ch/ekv. // contribution of Ivan Riis Nielsen 11/2006, modified by Dietmar Warning 01/2009 //Default simulator: Spectre `ifdef insideADMS `define P(txt) (*txt*) `define PGIVEN(p) $given(p) `define INITIAL_MODEL @(initial_model) `define INSTANCE @(initial_instance) `define NOISE @(noise) `else `define P(txt) (txt) `define PGIVEN(p) p `define INITIAL_MODEL `define INSTANCE `define NOISE `endif //ADS //`include "constants.vams" //`include "disciplines.vams" //`include "compact.vams" //Spectre `include "constants.h" `include "discipline.h" `define NMOS 1 `define PMOS -1 `define EPSSI `P_EPS0*11.7 `define EPSOX `P_EPS0*3.9 `define TREF 300.15 `define SQR(x) ((x)*(x)) `define VT(temp) (`P_K*temp/`P_Q) `define EG(temp) (1.16-0.000702*`SQR(temp)/(temp+1108)) `define NI(temp) (1.45e16*(temp/`TREF)*exp(`EG(`TREF)/(2*`VT(`TREF))-`EG(temp)/(2*`VT(temp)))) `define oneThird 3.3333333333333333e-01 // Constants needed in safe exponential function (called "expl") `define se05 2.3025850929940458e+02 `define ke05 1.0e-100 `define ke05inv 1.0e100 // P3 3rd order polynomial expansion of exp() `define P3(u) (1.0 + (u) * (1.0 + 0.5 * ((u) * (1.0 + (u) * `oneThird)))) // expl exp() with 3rd order polynomial extrapolation // to avoid overflows and underflows and retain C-3 continuity `define expl(x, res) \ if (abs(x) < `se05) begin\ res = exp(x); \ end else begin \ if ((x) < -`se05) begin\ res = `ke05 / `P3(-`se05 - (x)); \ end else begin\ res = `ke05inv * `P3((x) - `se05); \ end \ end module ekv (d,g,s,b); // Node definitions inout d,g,s,b; electrical d,g,s,b,di,si; // Model parameters parameter integer nmos=1 from [0:1] `P(info="MOS type : nmos:0"); parameter integer pmos=1 from [0:1] `P(info="MOS type : pmos:0"); parameter integer MTYPE=(nmos==0 ? (pmos==0 ? 0 : 1) : (pmos==0 ? -1 : 1)); parameter real TNOM=27 from (-273.15:inf) `P(info="Nominal temperature [degC]"); parameter real IMAX=1 from (0:inf) `P(info="Maximum forward junction current before linearization [A]"); // - intrinsic model (optional, section 4.2.1) parameter real TOX=0 from [0:inf) `P(info="Oxide thickness [m]"); parameter real NSUB=0 from [0:inf) `P(info="Channel doping [cm^-3]"); parameter real VFB=1001.0 from (-inf:inf) // use 1001V as "not specified" `P(info="Flat-band voltage [V]"); parameter real UO=0 from [0:inf) `P(info="Low-field mobility [cm^2/Vs]"); parameter real VMAX=0 from [0:inf) `P(info="Saturation velocity [m/s]"); parameter real THETA=0 from [0:inf) `P(info="Mobility reduction coefficient [V^-1]"); // - intrinsic model (process related, section 4.1) parameter real COX=((TOX>0) ? (`EPSOX/TOX) : 0.7m) from [0:inf) `P(info="Oxide capacitance [F/m^2]"); parameter real XJ=0.1u from [1n:inf) `P(info="Junction depth [m]"); parameter real DL=0 from (-inf:inf) `P(info="Length correction [m]"); parameter real DW=0 from (-inf:inf) `P(info="Width correction [m]"); // - intrinsic model (basic, section 4.2) parameter real GAMMA=((NSUB>0) ? (sqrt(2*`P_Q*`EPSSI*NSUB*1e6)/COX) : 1) from [0:inf) `P(info="Body effect parameter [V^0.5]"); parameter real PHI=((NSUB>0) ? (2*`VT((TNOM+273.15))*ln(max(NSUB,1)*1e6/`NI((TNOM+273.15)))) : 0.7) from [0.1:inf) `P(info="Bulk Fermi potential (*2) [V]"); parameter real VTO=((VFB<1000.0) ? (VFB+MTYPE*(PHI+GAMMA*sqrt(PHI))) : 0.5) from (-inf:inf) `P(info="Long-channel threshold voltage [V]"); parameter real KP=((UO>0) ? (UO*1e-4*COX) : 50u) from (0:inf) `P(info="Transconductance parameter [A/V^2]"); parameter real UCRIT=(((VMAX>0) && (UO>0)) ? (VMAX/(UO*1e-4)) : 2e6 ) from [100k:inf) `P(info="Longitudinal critical field [V/m]"); parameter real E0=((THETA>0) ? 0 : 1e12) from [100k:inf) `P(info="Mobility reduction coefficient [V/m]"); // - intrinsic model (channel length modulation and charge sharing, section 4.3) parameter real LAMBDA=0.5 from [0:inf) `P(info="Depletion length coefficient (CLM)"); parameter real WETA=0.25 from (-inf:inf) `P(info="Narrow-channel effect coefficient"); parameter real LETA=0.1 from (-inf:inf) `P(info="Short-channel effect coefficient"); // - intrinsic model (reverse short channel effect, section 4.4) parameter real Q0=0 from (-inf:inf) `P(info="RSCE peak charge density [C/m^2]"); parameter real LK=0.29u from [10n:inf) `P(info="RSCE characteristic length [m]"); // - intrinsic model (impact ionization, section 4.5) parameter real IBA=0 from (-inf:inf) `P(info="First impact ionization coefficient [m^-1]"); parameter real IBB=3e8 from [1e8:inf) `P(info="Second impact ionization coefficient [V/m]"); parameter real IBN=1 from [0.1:inf) `P(info="Saturation voltage factor for impact ionization"); // - intrinsic model (temperature, section 4.6) parameter real TCV=1m from (-inf:inf) `P(info="Threshold voltage TC [V/K]"); parameter real BEX=-1.5 from (-inf:inf) `P(info="Mobility temperature exponent"); parameter real UCEX=0.8 from (-inf:inf) `P(info="Longitudinal critical field temperature exponent"); parameter real IBBT=9e-4 from (-inf:inf) `P(info="Temperature coefficient for IBB [K^-1]"); // - intrinsic model (matching, section 4.7) parameter real AVTO=0 from (-inf:inf) `P(info="Area related VTO mismatch parameter [Vm]"); parameter real AKP=0 from (-inf:inf) `P(info="Area related KP mismatch parameter [m]"); parameter real AGAMMA=0 from (-inf:inf) `P(info="Area related GAMMA mismatch parameter [V^0.5*m]"); // - intrinsic model (flicker noise, section 4.8) parameter real KF=0 from [0:inf) `P(info="Flicker noise coefficient"); parameter real AF=1 from (-inf:inf) `P(info="Flicker noise exponent"); // - intrinsic model (setup, section 4.9) parameter real NQS=0 from [0:1] `P(info="Non-quasi-static operation switch"); parameter real SATLIM=exp(4) from (0:inf) `P(info="Saturation limit (if/ir)"); parameter real XQC=0.4 from [0:1] `P(info="Charge/capacitance model selector"); // - external parasitic parameters parameter real HDIF=0 from [0:inf) `P(info="S/D diffusion length (/2) [m]"); parameter real RSH=0 from [0:inf) `P(info="S/D sheet resistance [ohm]"); parameter real JS=0 from [0:inf) `P(info="S/D junction saturation current density [A/m^2]"); parameter real JSW=0 from [0:inf) `P(info="S/D junction sidewall saturation current density [A/m]"); parameter real XTI=0 from [0:inf) `P(info="S/D diode saturation current temperature exponent"); parameter real N=1 from [0.5:10] `P(info="S/D diode emission coefficient"); parameter real CJ=0 from [0:inf) `P(info="S/D zero-bias junction capacitance per area [F/m^2]"); parameter real CJSW=0 from [0:inf) `P(info="S/D zero-bias junction capacitance per perimeter [F/m]"); parameter real PB=0.8 from (0:inf) `P(info="S/D bottom junction builtin potential [V]"); parameter real PBSW=PB from (0:inf) `P(info="S/D sidewall junction builtin potential [V]"); parameter real MJ=0.5 from (0:inf) `P(info="S/D bottom junction grading coefficient"); parameter real MJSW=0.333 from (0:inf) `P(info="S/D sidewall junction grading coefficient"); parameter real FC=0.5 from (0:inf) `P(info="S/D bottom junction forward-bias threshold"); parameter real FCSW=FC from (0:inf) `P(info="S/D sidewall junction forward-bias threshold"); parameter real CGSO=0 from [0:inf) `P(info="Gate-source overlap capacitance per width [F/m]"); parameter real CGDO=0 from [0:inf) `P(info="Gate-drain overlap capacitance per width [F/m]"); parameter real CGBO=0 from [0:inf) `P(info="Gate-bulk overlap capacitance per length [F/m]"); // Instance parameters // - intrinsic model parameter real L=10u from [0:inf] `P(type="instance" info="Drawn length [m]" unit="m"); parameter real W=10u from [0:inf] `P(type="instance" info="Drawn width [m]" unit="m"); parameter real M=1 from [0:inf] `P(type="instance" info="Parallel multiplier" unit="m"); // parameter real N=1 from [0:inf] // `P(type="instance" info="Series multiplier" unit="m"); // - external parasitics parameter real AD=((HDIF>0) ? (2*HDIF*W) : 0) from [0:inf) `P(info="Drain area [m^2]" type="instance"); parameter real AS=((HDIF>0) ? (2*HDIF*W) : 0) from [0:inf) `P(info="Source area [m^2]" type="instance"); parameter real PD=((HDIF>0) ? (4*HDIF+2*W) : 0) from [0:inf) `P(info="Drain perimeter [m]" type="instance"); parameter real PS=((HDIF>0) ? (4*HDIF+2*W) : 0) from [0:inf) `P(info="Source perimeter [m]" type="instance"); parameter real NRD=((HDIF>0) ? (HDIF/W) : 0) from [0:inf) `P(info="Drain no. squares" type="instance"); parameter real NRS=((HDIF>0) ? (HDIF/W) : 0) from [0:inf) `P(info="Source no. squares" type="instance"); parameter real RS=((RSH>0) ? (RSH*NRS) : 0) from [0:inf) `P(info="Source resistance [ohms]" type="instance"); parameter real RD=((RSH>0) ? (RSH*NRD) : 0) from [0:inf) `P(info="Drain resistance [ohms]" type="instance"); // Declaration of variables integer mode; real lc,isat_s,vexp_s,gexp_s,isat_d,vexp_d,gexp_d,fact, weff,leff,np,ns,lmin,rd,rs,ceps,ca,xsi,dvrsce, tempk,vt,sqrt_A,vto_a,kp_a,gamma_a,ucrit,phi,ibb,vc,qb0, vg,vd,vs,tmp,vgprime,vp0,vsprime,vdprime,gamma0,gammaprime,vp,n,ifwd, vdss,vdssprime,dv,vds,vip,dl,lprime,leq,irprime,irev,beta0,nau, nq,xf,xr,qd,qs,qi,qb,qg,beta0prime,beta,vpprime,is,ids,vib, idb,ibdj,ibsj,coxt,qdt,qst,qgt,qbt, cbs0,cbs0sw,cbs,cbd0,cbd0sw,cbd, fv,z0,z1,y; real cgso,cgdo,cgbo; analog begin `INITIAL_MODEL begin // Model Initialization lc = sqrt(`EPSSI/COX*XJ); end // INITIAL_MODEL `INSTANCE begin // temperature independent device initialization weff = W+DW; leff = L+DL; np = M; ns = 1; // eq. 54 lmin = 0.1*ns*leff; rs = ns/np*RS; rd = ns/np*RD; ceps = 4*22e-3*22e-3; ca = 0.028; xsi = ca*(10*leff/LK-1); dvrsce = 2*Q0/COX/`SQR(1+0.5*(xsi+sqrt(xsi*xsi+ceps))); coxt = np*ns*COX*weff*leff; end // temperature independent `INSTANCE begin // temperature dependent device initialization tempk = $temperature; vt = `VT(tempk); sqrt_A = sqrt(np*weff*ns*leff); vto_a = MTYPE*(VTO+TCV*(tempk-(TNOM+273.15)))+AVTO/sqrt_A; kp_a = KP*pow(tempk/(TNOM+273.15),BEX)*(1+AKP/sqrt_A); gamma_a = GAMMA+AGAMMA/sqrt_A; ucrit = UCRIT*pow(tempk/(TNOM+273.15),UCEX); phi = PHI*tempk/(TNOM+273.15)-3*vt*ln(tempk/(TNOM+273.15))-`EG(TNOM+273.15)*tempk/(TNOM+273.15)+`EG(tempk); ibb = IBB*(1+IBBT*(tempk-(TNOM+273.15))); vc = ucrit*ns*leff; // eq. 60 qb0 = gamma_a*sqrt(phi); fact = (`EG(TNOM+273.15)/`VT(TNOM+273.15)-`EG(tempk)/vt) * pow(tempk/(TNOM+273.15),XTI); `expl(fact,tmp) isat_s = np*ns*(JS*AS+JSW*PS)*tmp; isat_d = np*ns*(JS*AD+JSW*PD)*tmp; if (isat_s>0) begin vexp_s = vt*ln(IMAX/isat_s+1); gexp_s = (IMAX+isat_s)/vt; end else begin vexp_s = -1e9; gexp_s = 0; end if (isat_d>0) begin vexp_d = vt*ln(IMAX/isat_d+1); gexp_d = (IMAX+isat_d)/vt; end else begin vexp_d = -1e9; gexp_d = 0; end cbs0 = np*ns*CJ*AS; cbd0 = np*ns*CJ*AD; cbs0sw = np*ns*CJSW*PS; cbd0sw = np*ns*CJSW*PD; cgso = np*ns*CGSO*weff; cgdo = np*ns*CGDO*weff; cgbo = np*ns*CGBO*leff; end // temperature dependent begin //Bias-dependent model evaluation vg = MTYPE*V(g,b); vd = MTYPE*V(di,b); vs = MTYPE*V(si,b); // $strobe("vg=%e vd=%e vs=%e",vg,vd,vs); if (vd>=vs) mode = 1; else begin mode = -1; tmp = vs; vs = vd; vd = tmp; end // eq. 33 vgprime = vg-vto_a-dvrsce+phi+gamma_a*sqrt(phi); // eq. 35 vsprime = 0.5*(vs+phi+sqrt(`SQR(vs+phi)+16*`SQR(vt))); vdprime = 0.5*(vd+phi+sqrt(`SQR(vd+phi)+16*`SQR(vt))); // $strobe("vgprime=%e vdprime=%e vsprime=%e",vgprime,vdprime,vsprime); // eq. 34 if (vgprime>=0) begin vp0 = vgprime-phi-gamma_a*(sqrt(vgprime+0.25*`SQR(gamma_a))-0.5*gamma_a); // eq. 36 gamma0 = gamma_a-`EPSSI/COX*(LETA/leff*(sqrt(vsprime)+sqrt(vdprime))-3*WETA/weff*sqrt(vp0+phi)); end else begin vp0 = -phi; // eq. 36 - skipped sqrt(vp0+phi) here, it produces inf on derivative gamma0 = gamma_a-`EPSSI/COX*(LETA/leff*(sqrt(vsprime)+sqrt(vdprime)) ); end // eq. 37 gammaprime = 0.5*(gamma0+sqrt(`SQR(gamma0)+0.1*vt)); // eq. 38 if (vgprime>=0) vp = vgprime-phi-gammaprime*(sqrt(vgprime+0.25*`SQR(gammaprime))-0.5*gammaprime); else vp = -phi; // $strobe("vp0=%e vp=%e gamma0=%e gammaprime=%e",vp0,vp,gamma0,gammaprime); // eq. 39 n = 1+gamma_a*0.5/sqrt(vp+phi+4*vt); // Forward current (43-44) fv=(vp-vs)/vt; if (fv > -0.35) begin z0 = 2.0/(1.3 + fv - ln(fv+1.6)); z1 = (2.0 + z0) / (1.0 + fv + ln(z0)); y = (1.0 + fv + ln(z1)) / (2.0 + z1); end else if (fv > -15) begin `expl(-fv,tmp) z0 = 1.55 + tmp; z1 = (2.0 + z0) / (1.0 + fv + ln(z0)); y = (1.0 + fv + ln(z1)) / (2.0 + z1); end else if (fv > -23.0) begin `expl(-fv,tmp) y = 1.0 / (2.0 + tmp); end else begin `expl(fv,tmp) y = tmp + 1.0e-64; end ifwd = y*(1.0 + y); z0 = 1; z1 = 1; // eq. 46 vdss = vc*(sqrt(0.25+vt/vc*sqrt(ifwd))-0.5); // eq. 47 vdssprime = vc*(sqrt(0.25+vt/vc*(sqrt(ifwd)-0.75*ln(ifwd)))-0.5)+vt*(ln(0.5*vc/vt)-0.6); // $strobe("ifwd=%e vdss=%e vdssprime=%e",ifwd,vdss,vdssprime); // eq. 48 dv = 4*vt*sqrt(LAMBDA*(sqrt(ifwd)-vdss/vt)+1.0/64); // eq. 49 vds = 0.5*(vd-vs); // eq. 50 vip = sqrt(`SQR(vdss)+`SQR(dv))-sqrt(`SQR(vds-vdss)+`SQR(dv)); // eq. 52 dl = LAMBDA*lc*ln(1+(vds-vip)/(lc*ucrit)); // eq. 53 lprime = ns*leff-dl+(vds+vip)/ucrit; // eq. 55 leq = 0.5*(lprime+sqrt(`SQR(lprime)+`SQR(lmin))); // eq. 56 fv=(vp-vds-vs-sqrt(`SQR(vdssprime)+`SQR(dv))+sqrt(`SQR(vds-vdssprime)+`SQR(dv)))/vt; if (fv > -0.35) begin z0 = 2.0/(1.3 + fv - ln(fv+1.6)); z1 = (2.0 + z0) / (1.0 + fv + ln(z0)); y = (1.0 + fv + ln(z1)) / (2.0 + z1); end else if (fv > -15) begin `expl(-fv,tmp) z0 = 1.55 + tmp; z1 = (2.0 + z0) / (1.0 + fv + ln(z0)); y = (1.0 + fv + ln(z1)) / (2.0 + z1); end else if (fv > -23.0) begin `expl(-fv,tmp) y = 1.0 / (2.0 + tmp); end else begin `expl(fv,tmp) y = tmp + 1.0e-64; end irprime = y*(1.0 + y); z0 = 1; z1 = 1; // eq. 57 fv=(vp-vd)/vt; if (fv > -0.35) begin z0 = 2.0/(1.3 + fv - ln(fv+1.6)); z1 = (2.0 + z0) / (1.0 + fv + ln(z0)); y = (1.0 + fv + ln(z1)) / (2.0 + z1); end else if (fv > -15) begin `expl(-fv,tmp) z0 = 1.55 + tmp; z1 = (2.0 + z0) / (1.0 + fv + ln(z0)); y = (1.0 + fv + ln(z1)) / (2.0 + z1); end else if (fv > -23.0) begin `expl(-fv,tmp) y = 1.0 / (2.0 + tmp); end else begin `expl(fv,tmp) y = tmp + 1.0e-64; end irev = y*(1.0 + y); // eq. 58 beta0 = kp_a*np*weff/leq; // eq. 59 nau = (5+MTYPE)/12.0; // eq. 69 nq = 1+0.5*gamma_a/sqrt(vp+phi+1e-6); // eq. 70 xf = sqrt(0.25+ifwd); // eq. 71 xr = sqrt(0.25+irev); // eq. 72 qd = -nq*(4.0/15*(3*`SQR(xr)*(xr+2*xf)+2*`SQR(xf)*(xf+2*xr))/`SQR(xf+xr)-0.5); // eq. 73 qs = -nq*(4.0/15*(3*`SQR(xf)*(xf+2*xr)+2*`SQR(xr)*(xr+2*xf))/`SQR(xf+xr)-0.5); // eq. 74 qi = qs+qd; // eq. 75 if (vgprime>=0) qb = (-gamma_a*sqrt(vp+phi+1e-6))/vt-(nq-1)/nq*qi; else qb = -vgprime/vt; // eq. 76 (qox removed since it is assumed to be zero) qg = -qi-qb; if (E0!=0) begin // eq. 61 beta0prime = beta0*(1+COX/(E0*`EPSSI)*qb0); // eq. 62 beta = beta0prime/(1+COX/(E0*`EPSSI)*vt*abs(qb+nau*qi)); end else begin // eq. 63 vpprime = 0.5*(vp+sqrt(`SQR(vp)+2*`SQR(vt))); // eq. 64 beta = beta0/(1+THETA*vpprime); end // else: !if(e0!=0) // eq. 65 is = 2*n*beta*`SQR(vt); // $strobe("beta0=%e beta0prime=%e beta=%e E0=%e qb0=%e qb=%e qi=%e",beta0,beta0prime,beta,E0,qb0,qb,qi); // eq. 66 ids = is*(ifwd-irprime); // eq. 67 vib = vd-vs-IBN*2*vdss; // eq. 68 if (vib>0) begin `expl((-ibb*lc)/vib,tmp) idb = ids*IBA/ibb*vib*tmp; end else idb = 0; // $strobe("ids=%e idb=%e",ids,idb); if (mode>1) begin if (isat_s>0) begin if (-vs>vexp_s) ibsj = IMAX+gexp_s*(-vs-vexp_s); else begin `expl(-vs/(N*vt),tmp) ibsj = isat_s*(tmp-1); end end else ibsj = 0; if (isat_d>0) begin if (-vd>vexp_d) ibdj = IMAX+gexp_d*(-vd-vexp_d); else begin `expl(-vd/(N*vt),tmp) ibdj = isat_d*(tmp-1); end end else ibdj = 0; end else begin // if (mode>1) if (isat_s>0) begin if (-vd>vexp_s) ibsj = IMAX+gexp_s*(-vd-vexp_s); else begin `expl(-vd/(N*vt),tmp) ibsj = isat_s*(tmp-1); end end else ibsj = 0; if (isat_d>0) begin if (-vs>vexp_d) ibdj = IMAX+gexp_d*(-vs-vexp_d); else begin `expl(-vs/(N*vt),tmp) ibdj = isat_d*(tmp-1); end end else ibdj = 0; end // else: !if(mode>1) qdt = coxt*vt*qd; qst = coxt*vt*qs; qgt = coxt*vt*qg; qbt = coxt*vt*qb; cbs = 0; cbd = 0; if (cbs0>0) begin if (MTYPE*V(b,si)>FC*PB) cbs = cbs+cbs0/pow(1-FC,MJ)*(1+MJ*(MTYPE*V(b,si)-PB*FC))/(PB*(1-FC)); else cbs = cbs+cbs0/pow(1-MTYPE*V(b,si),MJ); end if (cbd0>0) begin if (MTYPE*V(b,di)>FC*PB) cbd = cbd+cbd0/pow(1-FC,MJ)*(1+MJ*(MTYPE*V(b,di)-PB*FC))/(PB*(1-FC)); else cbd = cbd+cbd0/pow(1-MTYPE*V(b,di),MJ); end if (cbs0sw>0) begin if (MTYPE*V(b,si)>FCSW*PBSW) cbs = cbs+cbs0sw/pow(1-FCSW,MJSW)*(1+MJSW*(MTYPE*V(b,si)-PBSW*FCSW))/(PBSW*(1-FCSW)); else cbs = cbs+cbs0sw/pow(1-MTYPE*V(b,si),MJSW); end if (cbd0sw>0) begin if (MTYPE*V(b,di)>FCSW*PBSW) cbd = cbd+cbd0sw/pow(1-FCSW,MJSW)*(1+MJSW*(MTYPE*V(b,di)-PBSW*FCSW))/(PBSW*(1-FCSW)); else cbd = cbd+cbd0sw/pow(1-MTYPE*V(b,di),MJSW); end end //Bias-dependent model evaluation begin //Define branch sources I(di,si) <+ MTYPE*mode*ids; if (mode>0) begin I(di,b) <+ MTYPE*idb; I(di,g) <+ MTYPE*ddt(qdt); I(si,g) <+ MTYPE*ddt(qst); end else begin I(si,b) <+ MTYPE*idb; I(si,g) <+ MTYPE*ddt(qdt); I(di,g) <+ MTYPE*ddt(qst); end // else: !if(mode>0) I(b,si) <+ MTYPE*ibsj; I(b,di) <+ MTYPE*ibdj; I(b,g) <+ MTYPE*ddt(qbt); I(g,si) <+ cgso*ddt(V(g,si)); I(g,di) <+ cgdo*ddt(V(g,di)); I(g,b) <+ cgbo*ddt(V(g,b)); if (RD>0) I(d,di) <+ V(d,di)/rd; else V(d,di) <+ 0.0; if (RS>0) I(s,si) <+ V(s,si)/rs; else V(s,si) <+ 0.0; I(b,si) <+ cbs*ddt(V(b,si)); I(b,di) <+ cbd*ddt(V(b,di)); end // begin // `NOISE begin //Define noise sources // // end // noise end //analog endmodule tmpk8ny_4pz/src/spicelib/devices/adms/admst/0000755000175000017500000000000013546075722021217 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceMODULEtemp.c.xml0000644000175000017500000000633513546075722025415 0ustar carstencarsten #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "$(module)defs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/ifsim.h" #include "ngspice/suffix.h" #define _STATIC #define _DYNAMIC int $(module)temp(GENmodel *inModel, CKTcircuit *ckt) { $(module)model *model = ($(module)model*)inModel; $(module)instance *here; NG_IGNOREABLE(ckt); for ( ; model != NULL; model = $(module)nextModel(model) ) { /* loop through all the instances of the model */ for (here = $(module)instances(model); here != NULL ; here = $(module)nextInstance(here)) { } /* End of MOSFET Instance */ } /* End of Model Instance */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceMODULEpar.c.xml0000644000175000017500000000635613546075722025235 0ustar carstencarsten #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "$(module)defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int $(module)par(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { $(module)instance *myinstance = ($(module)instance*)inst; NG_IGNOREABLE(value); NG_IGNOREABLE(select); NG_IGNOREABLE(myinstance); switch (param) { default: return(-1); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceMODULEinit.c.xml0000644000175000017500000000740413546075722025411 0ustar carstencarsten #include "ngspice/config.h" #include "ngspice/devdefs.h" #include "$(module)itf.h" #include "$(module)ext.h" #include "$(module)init.h" SPICEdev $(module)info = { .DEVpublic = { .name = "$module", .description = "$module created by adms", .terms = &$(module)nSize, .numNames = &$(module)nSize, .termNames = $(module)names, .numInstanceParms = &$(module)pTSize, .instanceParms = $(module)pTable, .numModelParms = &$(module)mPTSize, .modelParms = $(module)mPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = $(module)par, .DEVmodParam = $(module)mParam, .DEVload = $(module)load, .DEVsetup = $(module)setup, .DEVunsetup = $(module)unsetup, .DEVpzSetup = $(module)setup, .DEVtemperature = $(module)temp, .DEVtrunc = $(module)trunc, .DEVfindBranch = NULL, .DEVacLoad = $(module)acLoad, .DEVaccept = NULL, .DEVdestroy = $(module)destroy, .DEVmodDelete = $(module)mDelete, .DEVdelete = $(module)delete, .DEVsetic = NULL, .DEVask = $(module)ask, .DEVmodAsk = $(module)mAsk, .DEVpzLoad = $(module)pzLoad, .DEVconvTest = NULL, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &$(module)iSize, .DEVmodSize = &$(module)mSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_$(module)_info(void) { return &$(module)info; } tmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceMODULEacld.c.xml0000644000175000017500000000730213546075722025346 0ustar carstencarsten #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "$(module)defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int $(module)acLoad(GENmodel *inModel, CKTcircuit *ckt) { $(module)model *model = ($(module)model*)inModel; $(module)instance *here; for ( ; model != NULL; model = $(module)nextModel(model) ) { /* loop through all the instances of the model */ for (here = $(module)instances(model); here != NULL ; here = $(module)nextInstance(here)) { } /* End of MOSFET Instance */ } /* End of Model Instance */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceMODULE.c.xml0000644000175000017500000001100213546075722024512 0ustar carstencarsten #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "$(module)defs.h" #include "ngspice/suffix.h" char *$(module)names[] = { }; int $(module)nSize = NUMELEMS($(module)names); int $(module)pTSize = NUMELEMS($(module)pTable); int $(module)mPTSize = NUMELEMS($(module)mPTable); int $(module)iSize = sizeof($(module)instance); int $(module)mSize = sizeof($(module)model); tmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceMODULEguesstopology.c.xml0000644000175000017500000003466313546075722027400 0ustar carstencarsten #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "$(module)defs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/ifsim.h" #include "ngspice/suffix.h" #define jacobian(a,b) here->PTR_J_##a##_##b##_required=1; #define static_jacobian4(p,q,r,s) jacobian(p,r) jacobian(p,s) jacobian(q,r) jacobian(q,s) #define static_jacobian2s(p,q,r) jacobian(p,r) jacobian(q,r) #define static_jacobian2p(p,r,s) jacobian(p,r) jacobian(p,s) #define static_jacobian1(p,r) jacobian(p,r) #define dynamic_jacobian4(p,q,r,s) jacobian(p,r) jacobian(p,s) jacobian(q,r) jacobian(q,s) #define dynamic_jacobian2s(p,q,r) jacobian(p,r) jacobian(q,r) #define dynamic_jacobian2p(p,r,s) jacobian(p,r) jacobian(p,s) #define dynamic_jacobian1(p,r) jacobian(p,r) #define whitenoise_jacobian4(p,q,r,s) #define whitenoise_jacobian2s(p,q,r) #define whitenoise_jacobian2p(p,r,s) #define whitenoise_jacobian1(p) #define flickernoise_jacobian4(p,q,r,s) #define flickernoise_jacobian2s(p,q,r) #define flickernoise_jacobian2p(p,r,s) #define flickernoise_jacobian1(p) int $(module)guesstopology (SMPmatrix *matrix, CKTcircuit *ckt, $(module)model *model, $(module)instance *here) /* guess topology */ { NG_IGNOREABLE(matrix); NG_IGNOREABLE(ckt); int %(name);\n double %(name)=0.0/0.0;\n char* %(name);\n return(OK); } tmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceMODULEdel.c.xml0000644000175000017500000000477413546075722025221 0ustar carstencarsten #include "ngspice/ngspice.h" #include "$(module)defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int $(module)delete(GENinstance *gen_inst) { NG_IGNORE(gen_inst); return OK; } tmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceMODULEext.h.xml0000644000175000017500000000617513546075722025257 0ustar carstencarsten #ifndef __$(module)EXT_H #define __$(module)EXT_H #include "$(module)defs.h" extern int $(module)par(int,IFvalue*,GENinstance*,IFvalue*); extern int $(module)mParam(int,IFvalue*,GENmodel*); extern int $(module)load(GENmodel*,CKTcircuit*); extern int $(module)setup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int $(module)guesstopology(SMPmatrix *, CKTcircuit *, $(module)model *, $(module)instance *); extern int $(module)temp(GENmodel*,CKTcircuit*); extern int $(module)ask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*); extern int $(module)mAsk(CKTcircuit*,GENmodel *,int, IFvalue*); extern int $(module)acLoad(GENmodel *,CKTcircuit*); extern int $(module)convTest(GENmodel *,CKTcircuit*); extern int $(module)delete(GENinstance*); extern int $(module)getic(GENmodel*,CKTcircuit*); extern int $(module)mDelete(GENmodel*); extern int $(module)noise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int $(module)pzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int $(module)trunc(GENmodel*,CKTcircuit*,double*); extern int $(module)unsetup(GENmodel*,CKTcircuit*); extern void $(module)destroy(void); #endif tmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceMODULEnoise.c.xml0000644000175000017500000000574613546075722025572 0ustar carstencarsten #include "ngspice/ngspice.h" #include "$(module)defs.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" extern void NevalSrc(); extern double Nintegrate(); static char* $(module)nNames []= { }; int $(module)noise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata *data, double *OnDens) { $(module)model *firstModel = ($(module)model *) genmodel; $(module)model *model; $(module)instance *inst; for (model=firstModel; model != NULL; model=$(module)nextModel(model)) { for (inst=$(module)instances(model); inst != NULL; inst=$(module)nextInstance(inst)) { switch (operation) { case N_OPEN: break; case N_CALC: switch (mode) { case N_DENS: break; case INT_NOIZ: break; } break; case N_CLOSE: return (OK); break; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceMODULE.hxx.xml0000644000175000017500000036413113546075722025115 0ustar carstencarsten /* arithmetics */ #define EXP90 1.220403294317841e+039 #define m00_hypot(v00,x,y) v00 = sqrt((x)*(x)+(y)*(y)); #define m10_hypot(v10,v00,x,y) v10 = (x)/(v00); #define m11_hypot(v11,v00,x,y) v11 = (y)/(v00); #define m00_max(v00,x,y) v00 = ((x)>(y))?(x):(y); #define m10_max(v10,v00,x,y) v10 = ((x)>(y))?1.0:0.0; #define m11_max(v11,v00,x,y) v11 = ((x)>(y))?0.0:1.0; #define m00_min(v00,x,y) v00 = ((x)<(y))?(x):(y); #define m10_min(v10,v00,x,y) v10 = ((x)<(y))?1.0:0.0; #define m11_min(v11,v00,x,y) v11 = ((x)<(y))?0.0:1.0; #define m00_pow(v00,x,y) v00 = pow(x,y); #define m10_pow(v10,v00,x,y) v10 = (x==0.0)?0.0:(v00)*(y)/(x); #define m11_pow(v11,v00,x,y) v11 = (x==0.0)?0.0:(log(x)*(v00)); #define m00_div(v00,v10,x,y) double v10=1/(y); double v00=(x)*v10; #define m10_div(v10,v00,vv,x,y) #define m11_div(v11,v00,vv,x,y) double v11 = -v00*vv; #define m00_mult(v00,v10,v11,x,y) double v10=(x); double v11=(y); double v00=v10*v11; #define m00_add(v00,x,y) double v00=(x)+(y); #define m00_cos(v00,x) v00 = cos(x); #define m10_cos(v10,v00,x) v10 = (-sin(x)); #define m00_sin(v00,x) v00 = sin(x); #define m10_sin(v10,v00,x) v10 = (cos(x)); #define m00_tan(v00,x) v00 = tan(x); #define m10_tan(v10,v00,x) v10 = (1.0/cos(x)/cos(x)); #define m00_cosh(v00,x) v00 = cosh(x); #define m10_cosh(v10,v00,x) v10 = (sinh(x)); #define m00_sinh(v00,x) v00 = sinh(x); #define m10_sinh(v10,v00,x) v10 = (cosh(x)); #define m00_tanh(v00,x) v00 = tanh(x); #define m10_tanh(v10,v00,x) v10 = (1.0/cosh(x)/cosh(x)); #define m00_acos(v00,x) v00 = acos(x); #define m10_acos(v10,v00,x) v10 = (-1.0/sqrt(1-x*x)); #define m00_asin(v00,x) v00 = asin(x); #define m10_asin(v10,v00,x) v10 = (+1.0/sqrt(1-x*x)); #define m00_atan(v00,x) v00 = atan(x); #define m10_atan(v10,v00,x) v10 = (+1.0/(1+x*x)); #define m00_logE(v00,x) v00 = log(x); #define m10_logE(v10,v00,x) v10 = (1.0/x); #define m00_log10(v00,x) v00 = log10(x); #define m10_log10(v10,v00,x) v10 = (1.0/x/log(10)); #define m00_sqrt(v00,x) v00 = sqrt(x); #define m10_sqrt(v10,v00,x) v10 = (0.5/v00); #define m00_fabs(v00,x) v00 = fabs(x); #define m10_fabs(v10,v00,x) v10 = (((x)>=0)?(+1.0):(-1.0)); #define m00_exp(v00,x) v00 = exp(x); #define m10_exp(v10,v00,x) v10 = v00; #define m00_abs(v00) ((v00)<(0)?(-(v00)):(v00)) #define m00_limexp(v00,x) v00 = ((x)<90.0?exp(x):EXP90*(x-89.0)); #define m10_limexp(v10,v00,x) v10 = ((x)<90.0?(v00):EXP90); #define m20_logE(v00) (-1.0/v00/v00) #define m20_exp(v00) exp(v00) #define m20_limexp(v00) ((v00)<90.0?exp(v00):0.0) #define m20_sqrt(v00) (-0.25/(v00)/sqrt(v00)) #define m20_fabs(v00) 0.0 /*wrapper*/ #define pModel model #define pInst here #define mint_get_circuit_tempK() _circuit_temp #define voltages(n) NP(n) #define _DDT(q) q #define _DDX #define _DERIVATEFORDDX #define _DERIVATE2 inline double _cos(double arg) { return cos(arg); } inline double _d0_cos(double arg) { return (-sin(arg)); } inline double _sin(double arg) { return sin(arg); } inline double _d0_sin(double arg) { return (cos(arg)); } inline double _tan(double arg) { return tan(arg); } inline double _d0_tan(double arg) { return (1.0/cos(arg)/cos(arg)); } inline double _cosh(double arg) { return cosh(arg); } inline double _d0_cosh(double arg) { return (sinh(arg)); } inline double _sinh(double arg) { return sinh(arg); } inline double _d0_sinh(double arg) { return (cosh(arg)); } inline double _tanh(double arg) { return tanh(arg); } inline double _d0_tanh(double arg) { return (1.0/cosh(arg)/cosh(arg)); } inline double _acos(double arg) { return acos(arg); } inline double _d0_acos(double arg) { return (-1.0/sqrt(1-arg*arg)); } inline double _asin(double arg) { return asin(arg); } inline double _d0_asin(double arg) { return (+1.0/sqrt(1-arg*arg)); } inline double _atan(double arg) { return atan(arg); } inline double _d0_atan(double arg) { return (+1.0/(1+arg*arg)); } inline double _logE(double arg) { return log(arg); } inline double _d0_logE(double arg) { return (1.0/arg); } inline double _log10(double arg) { return log10(arg); } inline double _d0_log10(double arg) { return (1.0/arg/log(10)); } inline double _exp(double arg) { return exp(arg); } inline double _d0_exp(double arg) { return exp(arg); } inline double _sqrt(double arg) { return sqrt(arg); } inline double _d0_sqrt(double arg) { return (1.0/sqrt(arg)/2.0); } inline double _abs(double arg) { return fabs(arg); } inline double _d0_abs(double arg) { return (((arg)>=0)?(+1.0):(-1.0)); } inline double _hypot(double x,double y) { return sqrt((x)*(x)+(y)*(y)); } inline double _d0_hypot(double x,double y) { return (x)/sqrt((x)*(x)+(y)*(y)); } inline double _d1_hypot(double x,double y) { return (y)/sqrt((x)*(x)+(y)*(y)); } inline double _max(double x,double y) { return ((x)>(y))?(x):(y); } inline double _d0_max(double x,double y) { return ((x)>(y))?1.0:0.0; } inline double _d1_max(double x,double y) { return ((x)>(y))?0.0:1.0; } inline double _min(double x,double y) { return ((x)<(y))?(x):(y); } inline double _d0_min(double x,double y) { return ((x)<(y))?1.0:0.0; } inline double _d1_min(double x,double y) { return ((x)<(y))?0.0:1.0; } inline double _pow(double x,double y) { return pow(x,y); } inline double _d0_pow(double x,double y) { return (x==0.0)?0.0:((y/x)*pow(x,y)); } inline double _d1_pow(double x,double y) { return (x==0.0)?0.0:((log(x)/exp(0.0))*pow(x,y)); } #define _limexp(arg) _exp(val,arg) #define _d_limexp(arg) _d_exp(val,dval,arg) int double char* fabs shrinkl shrinka log10 logE limexp limexp %(name) $e printf( _warning( _error( _finish( _stop( %(e(tree)) "\\n" tmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceMODULEtrunc.c.xml0000644000175000017500000000674713546075722025612 0ustar carstencarsten #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "$(module)defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int $(module)trunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { $(module)model *model = ($(module)model*)inModel; $(module)instance *here; #ifdef STEPDEBUG double debugtemp; #endif /* STEPDEBUG */ for ( ; model != NULL; model = $(module)nextModel(model) ) { /* loop through all the instances of the model */ for (here = $(module)instances(model); here != NULL ; here = $(module)nextInstance(here)) { #ifdef STEPDEBUG debugtemp = *timeStep; #endif /* STEPDEBUG */ CKTterr(here->state_%s_%s, ckt, timeStep); #ifdef STEPDEBUG if(debugtemp != *timeStep) { printf("device %%s reduces step from %%g to %%g\\n", here->$(module)name,debugtemp,*timeStep); } #endif /* STEPDEBUG */ } /* End of Instance */ } /* End of Model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceMODULEdest.c.xml0000644000175000017500000000464013546075722025404 0ustar carstencarsten #include "ngspice/ngspice.h" #include "$(module)defs.h" #include "ngspice/suffix.h" void $(module)destroy(void) { } tmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceMODULEmpar.c.xml0000644000175000017500000000615513546075722025407 0ustar carstencarsten #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "$(module)defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int $(module)mParam(int param, IFvalue *value, GENmodel *inMod) { $(module)model *mod = ($(module)model*)inMod; switch (param) { default: return(-1); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceMODULEpzld.c.xml0000644000175000017500000001026613546075722025417 0ustar carstencarsten #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "$(module)defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int $(module)pzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { $(module)model *model = ($(module)model*)inModel; $(module)instance *here; NG_IGNOREABLE(ckt); for ( ; model != NULL; model = $(module)nextModel(model) ) { /* loop through all the instances of the model */ for (here = $(module)instances(model); here != NULL ; here = $(module)nextInstance(here)) { } /* End of MOSFET Instance */ } /* End of Model Instance */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/adms/admst/COPYING0000644000175000017500000005666613546075722022275 0ustar carstencarstenGNU Lesser General Public License Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS /* tmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceMODULEask.c.xml0000644000175000017500000000632713546075722025227 0ustar carstencarsten #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/cktdefs.h" #include "$(module)defs.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int $(module)ask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { $(module)instance *instance = ($(module)instance*)inst; NG_IGNOREABLE(ckt); NG_IGNOREABLE(value); NG_IGNOREABLE(select); NG_IGNOREABLE(instance); switch (which) { default: return(-1); } return(-1); } tmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceMODULEitf.h.xml0000644000175000017500000000400513546075722025227 0ustar carstencarsten #ifndef DEV_$(module) #define DEV_$(module) extern SPICEdev *get_$(module)_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceMODULEsetup.c.xml0000644000175000017500000001641113546075722025604 0ustar carstencarsten #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "$(module)defs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/ifsim.h" #include "ngspice/suffix.h" int $(module)setup (SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* load the $(module) device structure with those pointers needed later * for fast matrix loading */ { $(module)model *model = ($(module)model*)inModel; $(module)instance *here; /* loop through all the $(module) device models */ for ( ;model != NULL ;model = $(module)nextModel(model) ) { if(model->%s_Given == FALSE) model->%s=%s; for ( here = $(module)instances(model) ;here != NULL ; here = $(module)nextInstance(here) ) { if(here->%s_Given == FALSE) here->%s=%s; /* Internal Nodes */ { here->%sNode = -1; } /* set states */ here->state_%s_%s = *states; *states += 2; /* set Sparse Matrix Pointers */ here->PTR_J_%s_%s_required=0; $(module)guesstopology(matrix,ckt,model,here); /* Internal Nodes */ { int error; CKTnode *tmp; if(here->%sNode == -1) { error=CKTmkVolt(ckt,&tmp,here->$(module)name,"$info"); if(error) return(error); here->%sNode = tmp->number; } } if(here->PTR_J_%s_%s_required==1) { here->PTR_J_%s_%s=SMPmakeElt(matrix,here->%sNode,here->%sNode); } } } return(OK); } int $(module)unsetup(GENmodel *inModel, CKTcircuit *ckt) { $(module)model *model = ($(module)model*)inModel; $(module)instance *here; /* loop through all the $(module) device models */ for ( ;model != NULL ;model = $(module)nextModel(model) ) { for ( here = $(module)instances(model) ;here != NULL ; here = $(module)nextInstance(here) ) { if (here->%sNode > 0) { CKTdltNNum(ckt, here->%sNode); here->%sNode = -1; } } } return OK; } tmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceVersion.xml0000644000175000017500000027050513546075722024750 0ustar carstencarsten #if defined(_DYNAMIC)\n int %s;\n double %s=0.0/0.0;\n char* %s;\n #endif /*_DYNAMIC*/\n int %(name);\n double %(name);\n char* %(name);\n %s tmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceMakefile.am.xml0000644000175000017500000001246713546075722025435 0ustar carstencarsten ## Process this file with automake to produce Makefile.in ADMSXMLINTERFACE=\$(srcdir)/../admst noinst_LTLIBRARIES = lib$(module).la BUILT_SOURCES = \\ $(module).c \\ $(module).hxx \\ $(module)acld.c \\ $(module)ask.c \\ $(module)defs.h \\ $(module)del.c \\ $(module)dest.c \\ $(module)ext.h \\ $(module)guesstopology.c \\ $(module)init.c \\ $(module)init.h \\ $(module)itf.h \\ $(module)load.c \\ $(module)mask.c \\ $(module)mdel.c \\ $(module)mpar.c \\ $(module)par.c \\ $(module)pzld.c \\ $(module)setup.c \\ $(module)temp.c \\ $(module)trunc.c lib$(module)_la_SOURCES = \\ \$(BUILT_SOURCES) CLEANFILES = \\ \$(BUILT_SOURCES) \\ $(module)noise.c \\ .$(module).va.adms \\ .adms.implicit.xml \\ .interface.xml \\ *.h \\ *.xml #TODO (not implemented) \\ $(module)conv.c \\ $(module)getic.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I\$(top_srcdir)/src/include AM_CFLAGS = \$(STATIC) MAINTAINERCLEANFILES = Makefile.in \\ Makefile.am DISTCLEANFILES = Makefile.am \\ Makefile.in \%.c \%.hxx \\ \%acld.c \%ask.c \%defs.h \%del.c \%dest.c \%ext.h \%guesstopology.c \\ \%init.c \%init.h \%itf.h \%load.c \%mask.c \%mdel.c \%mpar.c \%par.c \\ \%pzld.c \%setup.c \%temp.c \%trunc.c \\ : \$(srcdir)/admsva/\%.va \\ \$(ADMSXMLINTERFACE)/ngspiceVersion.xml \\ \$(ADMSXMLINTERFACE)/ngspiceMODULEitf.h.xml \\ \$(ADMSXMLINTERFACE)/ngspiceMODULEinit.c.xml \\ \$(ADMSXMLINTERFACE)/ngspiceMODULEinit.h.xml \\ \$(ADMSXMLINTERFACE)/ngspiceMODULEext.h.xml \\ \$(ADMSXMLINTERFACE)/ngspiceMODULEdefs.h.xml \\ \$(ADMSXMLINTERFACE)/ngspiceMODULEask.c.xml \\ \$(ADMSXMLINTERFACE)/ngspiceMODULEmask.c.xml \\ \$(ADMSXMLINTERFACE)/ngspiceMODULEpar.c.xml \\ \$(ADMSXMLINTERFACE)/ngspiceMODULEmpar.c.xml \\ \$(ADMSXMLINTERFACE)/ngspiceMODULEload.c.xml \\ \$(ADMSXMLINTERFACE)/ngspiceMODULEacld.c.xml \\ \$(ADMSXMLINTERFACE)/ngspiceMODULEpzld.c.xml \\ \$(ADMSXMLINTERFACE)/ngspiceMODULEtemp.c.xml \\ \$(ADMSXMLINTERFACE)/ngspiceMODULEtrunc.c.xml \\ \$(ADMSXMLINTERFACE)/ngspiceMODULEsetup.c.xml \\ \$(ADMSXMLINTERFACE)/ngspiceMODULEdel.c.xml \\ \$(ADMSXMLINTERFACE)/ngspiceMODULEmdel.c.xml \\ \$(ADMSXMLINTERFACE)/ngspiceMODULEdest.c.xml \\ \$(ADMSXMLINTERFACE)/ngspiceMODULEnoise.c.xml \\ \$(ADMSXMLINTERFACE)/ngspiceMODULEguesstopology.c.xml \\ \$(ADMSXMLINTERFACE)/ngspiceMODULE.hxx.xml \\ \$(ADMSXMLINTERFACE)/ngspiceMODULE.c.xml \$(ADMSXML) -I\$(srcdir) -I\$(srcdir)/admsva \$< \\ -e \$(ADMSXMLINTERFACE)/ngspiceVersion.xml \\ -e \$(ADMSXMLINTERFACE)/ngspiceMODULEitf.h.xml \\ -e \$(ADMSXMLINTERFACE)/ngspiceMODULEinit.c.xml \\ -e \$(ADMSXMLINTERFACE)/ngspiceMODULEinit.h.xml \\ -e \$(ADMSXMLINTERFACE)/ngspiceMODULEext.h.xml \\ -e \$(ADMSXMLINTERFACE)/ngspiceMODULEdefs.h.xml \\ -e \$(ADMSXMLINTERFACE)/ngspiceMODULEask.c.xml \\ -e \$(ADMSXMLINTERFACE)/ngspiceMODULEmask.c.xml \\ -e \$(ADMSXMLINTERFACE)/ngspiceMODULEpar.c.xml \\ -e \$(ADMSXMLINTERFACE)/ngspiceMODULEmpar.c.xml \\ -e \$(ADMSXMLINTERFACE)/ngspiceMODULEload.c.xml \\ -e \$(ADMSXMLINTERFACE)/ngspiceMODULEacld.c.xml \\ -e \$(ADMSXMLINTERFACE)/ngspiceMODULEpzld.c.xml \\ -e \$(ADMSXMLINTERFACE)/ngspiceMODULEtemp.c.xml \\ -e \$(ADMSXMLINTERFACE)/ngspiceMODULEtrunc.c.xml \\ -e \$(ADMSXMLINTERFACE)/ngspiceMODULEsetup.c.xml \\ -e \$(ADMSXMLINTERFACE)/ngspiceMODULEdel.c.xml \\ -e \$(ADMSXMLINTERFACE)/ngspiceMODULEmdel.c.xml \\ -e \$(ADMSXMLINTERFACE)/ngspiceMODULEdest.c.xml \\ -e \$(ADMSXMLINTERFACE)/ngspiceMODULEnoise.c.xml \\ -e \$(ADMSXMLINTERFACE)/ngspiceMODULEguesstopology.c.xml \\ -e \$(ADMSXMLINTERFACE)/ngspiceMODULE.hxx.xml \\ -e \$(ADMSXMLINTERFACE)/ngspiceMODULE.c.xml tmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceMODULEdefs.h.xml0000644000175000017500000003404013546075722025370 0ustar carstencarsten #ifndef $(module) #define $(module) #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" #ifdef $(variable) #warning conflict: $(variable) is declared as a variable of module '$(module)'. #warning conflict: However in the API of ngspice '$(variable)' is also defined as a pragma. #warning conflict: Pragma '$(variable)' will be undefined. #warning conflict: You can solve the confict by renaming variable '$(variable)' in module '$(module)'. #undef $(variable) #endif #ifdef $(variable) #warning conflict: $(node) is declared as a node of module '$(module)'. #warning conflict: However in the API of ngspice '$(node)' is also defined as a pragma. #warning conflict: Pragma '$(node)' will be undefined. #warning conflict: You can solve the confict by renaming variable '$(node)' in module '$(module)'. #undef $(variable) #endif #ifdef NGSPICE_DEBUG_OK #define NGSPICE_DEBUG \\ { \\ if(getenv("ngspice_debug")) \\ $(module)debug(ckt,model,here); \\ else \\ { \\ printf(" To get more info run your simulation after setting shell variable ngspice_debug to 1\\n"); \\ printf(" For example in sh shell just type: export ngspice_debug=1\\n"); \\ } \\ } #else #define NGSPICE_DEBUG #endif #define EXIT_IF_ISNAN(var) \\ if(isnan((double) var)) \\ { \\ printf("%%s:%%i:bug:isnan:"#var"\\n",__FILE__,__LINE__); \\ printf("Please send this message to laurent.lemaitre@freescale.com\\n"); \\ NGSPICE_DEBUG \\ exit(1); /*__asm__ __volatile__ ("int \$03");*/ \\ } \\ if(isinf((double) var)) \\ { \\ printf("%%s:%%i:bug:isinf:"#var"\\n",__FILE__,__LINE__); \\ printf("Please send this message to laurent.lemaitre@freescale.com\\n"); \\ NGSPICE_DEBUG \\ exit(1); /*__asm__ __volatile__ ("int \$03");*/ \\ } /* ngspice \$simparam variables gdev (1/Ohms): Additional conductance to be added to nonlinear branches for conductance homotopy convergence algorithm. gmin (1/Ohms): Minimum conductance placed in parallel with nonlinear branches. imax (Amps) : Branch current threshold above which the constitutive relation of a nonlinear branch should be linearized. imelt (Amps) : Branch current threshold indicating device failure. iteration : Iteration number of the analog solver. scale : Scale factor for device instance geometry parameters. shrink : Optical linear shrink factor. simulatorSubversion : The simulator sub-version. simulatorVersion : The simulator version. sourceScaleFactor : Multiplicative factor for independent sources for source stepping homotopy convergence algorithm. tnom degrees (Celsius): Default value of temperature at which model parameters were extracted. */ #define _circuit_gdev ckt->CKTgmin #define _circuit_gmin ((ckt->CKTgmin)>(ckt->CKTdiagGmin))?(ckt->CKTgmin):(ckt->CKTdiagGmin) #define _circuit_imax 1.0 #define _circuit_imelt 1.0 #define _circuit_iteration 1.0 #define _circuit_scale 1.0 #define _circuit_shrink 1.0 #define _circuit_simulatorSubversion 0 #define _circuit_simulatorVersion 3.5 #define _circuit_sourceScaleFactor 1.0 #define _circuit_tnom ckt->CKTnomTemp #define _circuit_temp ckt->CKTtemp #define _scale 1.0 #define _cos(val,arg) val = cos(arg); #define _d_cos(val,dval,arg) val = cos(arg); dval = (-sin(arg)); #define _sin(val,arg) val = sin(arg); #define _d_sin(val,dval,arg) val = sin(arg); dval = (cos(arg)); #define _tan(val,arg) val = tan(arg); #define _d_tan(val,dval,arg) val = tan(arg); dval = (1.0/cos(arg)/cos(arg)); #define _hypot(xy,x,y) xy = sqrt((x)*(x)+(y)*(y)); #define _dx_hypot(dx,xy,x,y) dx = (x)/(xy); #define _dy_hypot(dy,xy,x,y) dy = (y)/(xy); #define _max(xy,x,y) xy = ((x)>(y))?(x):(y); #define _dx_max(dx,xy,x,y) dx = ((x)>(y))?1.0:0.0; #define _dy_max(dy,xy,x,y) dy = ((x)>(y))?0.0:1.0; #define _min(xy,x,y) xy = ((x)<(y))?(x):(y); #define _dx_min(dx,xy,x,y) dx = ((x)<(y))?1.0:0.0; #define _dy_min(dy,xy,x,y) dy = ((x)<(y))?0.0:1.0; #define _cosh(val,arg) val = cosh(arg); #define _d_cosh(val,dval,arg) val = cosh(arg); dval = (sinh(arg)); #define _sinh(val,arg) val = sinh(arg); #define _d_sinh(val,dval,arg) val = sinh(arg); dval = (cosh(arg)); #define _tanh(val,arg) val = tanh(arg); #define _d_tanh(val,dval,arg) val = tanh(arg); dval = (1.0/cosh(arg)/cosh(arg)); #define _acos(val,arg) val = acos(arg); #define _d_acos(val,dval,arg) val = acos(arg); dval = (-1.0/sqrt(1-arg*arg)); #define _asin(val,arg) val = asin(arg); #define _d_asin(val,dval,arg) val = asin(arg); dval = (+1.0/sqrt(1-arg*arg)); #define _atan(val,arg) val = atan(arg); #define _d_atan(val,dval,arg) val = atan(arg); dval = (+1.0/(1+arg*arg)); #define _logE(val,arg) val = log(arg); #define _d_logE(val,dval,arg) val = log(arg); dval = (1.0/arg); #define _log10(val,arg) val = log10(arg); #define _d_log10(val,dval,arg) val = log10(arg); dval = (1.0/arg/log(10)); #define _exp(val,arg) val = exp(arg); #define _d_exp(val,dval,arg) val = exp(arg); dval = val; #define _sqrt(val,arg) val = sqrt(arg); #define _d_sqrt(val,dval,arg) val = sqrt(arg); dval = (1.0/val/2.0); #define _pow(xy,x,y) xy = pow(x,y); #define _dx_pow(dx,xy,x,y) dx = (x==0.0)?0.0:((y/x)*xy); #define _dy_pow(dy,xy,x,y) dy = (x==0.0)?0.0:((log(x)/exp(0.0))*xy); #define _div1(x,y) ((x)/(y)) #define _div0(xy,x,y) xy=(x)/(y); #define _div(xy,dx,x,y) dx=1/(y); xy=(x)*dx; #define _dx_div(dx,xy,x,y) #define _dy_div(dy,dx,xy,x,y) dy = -xy*dx; #define _limexp(val,arg) val = ((arg)<(90)) ? (exp(arg)) : (exp(90)*(1.0+(arg-90))); #define _d_limexp(val,dval,arg) val = ((arg)<(90)) ? (exp(arg)) : (exp(90)*(1.0+(arg-90))); dval = val; #define _fabs(val,arg) val = fabs(arg); #define _d_fabs(val,dval,arg) val = fabs(arg); dval = (((val)>=0)?(+1.0):(-1.0)); #define _abs(val) ((val)<(0) ? (-(val)):(val)) /* declarations for $(module) MOSFETs */ /* information needed for each instance */ typedef struct s$(module)instance { struct GENinstance gen; #define $(module)modPtr(inst) (($(module)model *)((inst)->gen.GENmodPtr)) #define $(module)nextInstance(inst) (($(module)instance *)((inst)->gen.GENnextInstance)) #define $(module)name gen.GENname #define $(module)states gen.GENstate /* node */ /* instance parameters */ // noise\n /* variables */ /* states */ /* pointer to sparse matrix (+ values)*/ #define $(module)numStates 0 } $(module)instance ; /* per model data */ typedef struct s$(module)model { /* model structure */ struct GENmodel gen; #define $(module)modType gen.GENmodType #define $(module)nextModel(inst) (($(module)model*)((inst)->gen.GENnextModel)) #define $(module)instances(inst) (($(module)instance*)((inst)->gen.GENinstances)) #define $(module)modName gen.GENmodName /* model parameters */ /* variable */ } $(module)model; #include "$(module)ext.h" #include "analogfunction.h" #endif /*$(module)*/ tmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceMODULEload.c.xml0000644000175000017500000003123113546075722025360 0ustar carstencarsten #define NGSPICE_DEBUG_OK #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "$(module)defs.h" #include "ngspice/const.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" /*fixme: noise not implemented in ngspice*/ #define ngspice_flickernoise(p,n,mag,freq,info)\\ {\\ } #define ngspice_whitenoise(p,n,mag,info)\\ {\\ } #define NP(p) *(ckt->CKTrhsOld+here->p ## Node) #define BP(p,n) (NP(p)-NP(n)) #define DBGNODE(p) printf(#p "=%i - v=%e\\n",here->p ## Node,NP(p)); #define _STATIC #define _DYNAMIC #define _DERIVATE #define _load_static_residual2(p,n,v)\\ *(ckt->CKTrhs+here->p ## Node)-=v;\\ *(ckt->CKTrhs+here->n ## Node)+=v; #define _load_static_residual1(p,v)\\ *(ckt->CKTrhs+here->p ## Node)-=v; #define _load_static_jacobian4(Sp,Sn,Pp,Pn,v)\\ _load_static_residual2(Sp,Sn,-v*BP(Pp,Pn))\\ *(here->PTR_J_ ## Sp ## _ ## Pp)+=v;\\ *(here->PTR_J_ ## Sn ## _ ## Pn)+=v;\\ *(here->PTR_J_ ## Sp ## _ ## Pn)-=v;\\ *(here->PTR_J_ ## Sn ## _ ## Pp)-=v;\\ (here->JSVAL_ ## Sp ## _ ## Pp)+=v;\\ (here->JSVAL_ ## Sn ## _ ## Pn)+=v;\\ (here->JSVAL_ ## Sp ## _ ## Pn)-=v;\\ (here->JSVAL_ ## Sn ## _ ## Pp)-=v; #define _load_static_jacobian2s(Sp,Sn,Pp,v)\\ _load_static_residual2(Sp,Sn,-v*NP(Pp))\\ *(here->PTR_J_ ## Sp ## _ ## Pp)+=v;\\ *(here->PTR_J_ ## Sn ## _ ## Pp)-=v;\\ (here->JSVAL_ ## Sp ## _ ## Pp)+=v;\\ (here->JSVAL_ ## Sn ## _ ## Pp)-=v; #define _load_static_jacobian2p(Sp,Pp,Pn,v)\\ _load_static_residual1(Sp,-v*BP(Pp,Pn))\\ *(here->PTR_J_ ## Sp ## _ ## Pp)+=v;\\ *(here->PTR_J_ ## Sp ## _ ## Pn)-=v;\\ (here->JSVAL_ ## Sp ## _ ## Pp)+=v;\\ (here->JSVAL_ ## Sp ## _ ## Pn)-=v; #define _load_static_jacobian1(Sp,Pp,v)\\ _load_static_residual1(Sp,-v*NP(Pp))\\ *(here->PTR_J_ ## Sp ## _ ## Pp)+=v;\\ (here->JSVAL_ ## Sp ## _ ## Pp)+=v; #define _load_dynamic_residual2(p,n,v)\\ if(ChargeComputationNeeded)\\ {\\ int error;\\ double unused;\\ *(ckt->CKTstate0+here->state_##p##_##n)=v;\\ if(ckt->CKTmode & MODEINITTRAN)\\ *(ckt->CKTstate1+here->state_##p##_##n)=*(ckt->CKTstate0+here->state_##p##_##n);\\ error = NIintegrate(ckt,&unused,&unused,0.0,here->state_##p##_##n);\\ if(error) return(error);\\ if(ckt->CKTmode & MODEINITTRAN)\\ *(ckt->CKTstate1+here->state_##p##_##n+1) = *(ckt->CKTstate0+here->state_##p##_##n+1);\\ *(ckt->CKTrhs+here->p##Node)-=*(ckt->CKTstate0+here->state_##p##_##n+1);\\ *(ckt->CKTrhs+here->n##Node)+=*(ckt->CKTstate0+here->state_##p##_##n+1);\\ } #define _load_dynamic_residual1(p,v)\\ if(ChargeComputationNeeded)\\ {\\ int error;\\ double unused;\\ *(ckt->CKTstate0+here->state_##p##_GND)=v;\\ if(ckt->CKTmode & MODEINITTRAN)\\ *(ckt->CKTstate1+here->state_##p##_GND)=*(ckt->CKTstate0+here->state_##p##_GND);\\ error = NIintegrate(ckt,&unused,&unused,0.0,here->state_##p##_GND);\\ if(error) return(error);\\ if(ckt->CKTmode & MODEINITTRAN)\\ *(ckt->CKTstate1+here->state_##p##_GND+1) = *(ckt->CKTstate0+here->state_##p##_GND+1);\\ *(ckt->CKTrhs+here->p##Node)-=*(ckt->CKTstate0+here->state_##p##_GND+1);\\ } #define _load_dynamic_jacobian4(Sp,Sn,Pp,Pn,v)\\ if(ChargeComputationNeeded)\\ {\\ double geq=(v)*ckt->CKTag[0];\\ double ceq=geq*BP(Pp,Pn);\\ *(ckt->CKTrhs+here->Sp##Node)+=ceq;\\ *(ckt->CKTrhs+here->Sn##Node)-=ceq;\\ *(here->PTR_J_ ## Sp ## _ ## Pp)+=geq;\\ *(here->PTR_J_ ## Sn ## _ ## Pn)+=geq;\\ *(here->PTR_J_ ## Sp ## _ ## Pn)-=geq;\\ *(here->PTR_J_ ## Sn ## _ ## Pp)-=geq;\\ }\\ (here->JDVAL_ ## Sp ## _ ## Pp)+=v;\\ (here->JDVAL_ ## Sn ## _ ## Pn)+=v;\\ (here->JDVAL_ ## Sp ## _ ## Pn)-=v;\\ (here->JDVAL_ ## Sn ## _ ## Pp)-=v; #define _load_dynamic_jacobian2s(Sp,Sn,Pp,v)\\ if(ChargeComputationNeeded)\\ {\\ double geq=(v)*ckt->CKTag[0];\\ double ceq=geq*NP(Pp);\\ *(ckt->CKTrhs+here->Sp##Node)+=ceq;\\ *(ckt->CKTrhs+here->Sn##Node)-=ceq;\\ *(here->PTR_J_ ## Sp ## _ ## Pp)+=geq;\\ *(here->PTR_J_ ## Sn ## _ ## Pp)-=geq;\\ }\\ (here->JDVAL_ ## Sp ## _ ## Pp)+=v;\\ (here->JDVAL_ ## Sn ## _ ## Pp)-=v; #define _load_dynamic_jacobian2p(Sp,Pp,Pn,v)\\ if(ChargeComputationNeeded)\\ {\\ double geq=(v)*ckt->CKTag[0];\\ double ceq=geq*BP(Pp,Pn);\\ *(ckt->CKTrhs+here->Sp##Node)+=ceq;\\ *(here->PTR_J_ ## Sp ## _ ## Pp)+=geq;\\ *(here->PTR_J_ ## Sp ## _ ## Pn)-=geq;\\ }\\ (here->JDVAL_ ## Sp ## _ ## Pp)+=v;\\ (here->JDVAL_ ## Sp ## _ ## Pn)-=v; #define _load_dynamic_jacobian1(Sp,Pp,v)\\ if(ChargeComputationNeeded)\\ {\\ double geq=(v)*ckt->CKTag[0];\\ double ceq=geq*NP(Pp);\\ *(ckt->CKTrhs+here->Sp##Node)+=ceq;\\ *(here->PTR_J_ ## Sp ## _ ## Pp)+=geq;\\ }\\ (here->JDVAL_ ## Sp ## _ ## Pp)+=v; int $(module)load(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current value into the * sparse matrix previously provided */ { $(module)model *model = ($(module)model*)inModel; $(module)instance *here; int ChargeComputationNeeded = ((ckt->CKTmode & (MODEAC | MODETRAN | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) ? 1 : 0; for ( ; model != NULL; model = $(module)nextModel(model) ) { /* loop through all the instances of the model */ for (here = $(module)instances(model); here != NULL ; here = $(module)nextInstance(here)) { { } { #include "$module.hxx" } } /* End of Instance */ } /* End of Model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceMODULEmask.c.xml0000644000175000017500000000621513546075722025400 0ustar carstencarsten #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "$(module)defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int $(module)mAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { $(module)model *model = ($(module)model *)inst; NG_IGNOREABLE(ckt); switch (which) { default: return(-1); } return(-1); } tmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceMODULEmdel.c.xml0000644000175000017500000000477613546075722025400 0ustar carstencarsten #include "ngspice/ngspice.h" #include "$(module)defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int $(module)mDelete(GENmodel *gen_model) { NG_IGNORE(gen_model); return OK; } tmpk8ny_4pz/src/spicelib/devices/adms/admst/ngspiceMODULEinit.h.xml0000644000175000017500000000432113546075722025411 0ustar carstencarsten #ifndef _$(module)INIT_H #define _$(module)INIT_H extern IFparm $(module)pTable[ ]; extern IFparm $(module)mPTable[ ]; extern char *$(module)names[ ]; extern int $(module)pTSize; extern int $(module)mPTSize; extern int $(module)nSize; extern int $(module)iSize; extern int $(module)mSize; #endif tmpk8ny_4pz/src/spicelib/devices/adms/psp102/0000755000175000017500000000000013546075722021134 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/adms/hicum2/0000755000175000017500000000000013546075722021276 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/adms/hicum2/admsva/0000755000175000017500000000000013546075722022551 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/adms/hicum2/admsva/hicum2.va0000644000175000017500000025222513546075722024300 0ustar carstencarsten/* ****************************************************************************** **************** COPYRIGHT NOTICE(Originator: Michael Schroter)*************** ****************************************************************************** The terms under which the HICUM/L2 software is provided are as follows: Software is distributed as is, completely without warranty or service support. Michael Schroter and his team members are not liable for the condition or performance of the software. Michael Schroter owns the copyright and grants users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Michael Schroter hereby disclaims all implied warranties. Michael Schroter grants the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions. 1. The users agree not to charge for the model owner's code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Michael Schroter who developed the model and software. This acknowledgment shall appear in the product documentation. 3. Redistributions to others of source code and documentation must retain the copyright notice, disclaimer, and list of conditions. 4. Redistributions to others in binary form must reproduce the copyright notice, disclaimer, and list of conditions in the documentation and/or other materials provided with the distribution */ //****************************************************************************** //****************************************************************************** //dw 04/19: Modifications for ngspice and adms: // all V(...) <+ 0.0; are replaced by I(...) < V(...)/`MIN_R; // using GMIN from ngspice: _circuit_gmin // don't like local variable declaration //HICUM Level/2 Version 2.4.0: A Verilog-A Description /* ****** 28-03-2017, update to HICUM/L2 v2.4.0 ******************************* 01/17 (AP): Increased the maximum values of ibets and ahc. Replaced calculation of Vciei by Vbiei and Vbici to avoid the dependence on the ci-ei branch. 03/17 (AP): Increased ranges for the parameters ahc and ibets. Added Gmin to all operating point conductances. Futher added a conditional statement for BETAAC to prevent division by zero Added new model for avalanche breakdown for high-voltages Changed conditional statement for avalanche breakdown calculation Changed versioning scheme */ /* ****** 31-08-2015, update to HICUM/L2 v2.34 ******************************** 03/15 (AP): Added Qbf=0 to transit time calculation for low currents. Changed parameter range for grading factors of capacitances (excluding 1). Added parameter aick for smoothing the ICK(VCEi) curve. 08/15 (AP): Fixed wrong calculation of go when including avalanche breakdown Changed conditional statement for NQS effects (is now enabled only if both alit AND alqf are greater than zero). Implementation of the peripheral substrate capacitance. Added a term to avoid numerical issues in the QJCMOD macro. */ /* ****** 11-06-2013, update to HICUM/L2 v2.33 ******************************** 05/13 (AP): Moved OP-value calculation out of noise block. Added TK and DTSH to the operating point values. Avoided division by zero for BETADC and BETAAC. Added an additional compiler flag for enabling operating point values also during transient simulations. 08/13 (AP): Simplified betadc section for noise calculations. 09/13 (AP): Changed ranges of alit and alqf back to including 0. Altered the conditional statements for correlated noise and NQS accordingly. Also, added correct backward compatibility for NQS effects in 2.1. Moved assignment of voltage variables after the Model_Initialization block. Added check for ibets > 0 to all blocks using tunneling current. Added more descriptive names for noise sources. Added abs() to all white-noise sources. */ /* ****** 27-03-2013, update to HICUM/L2 v2.32 ******************************** 11/12 (AP): Calculation of operating point values inside the VA-code. Calculation can be removed completely from the code by removing the compiler flag CALC_OP. 03/13 (AP): Change of the conditional statement for turning barrier effects on and off. 04/13 (AP): Corrected the bug for the flicker noise calculation. */ //******** 11-05-2012, update to HICUM/L2 v2.31 ******************************** //03/12: Introduction of "type" model parameter to switch between "NPN" & "PNP" // type of devices //03/12: Correlated Noise: Conditional loop for preventing negative values under // square root //02/12: Correlated Noise implementation but without Filter approach (small code) // Changed to temperature dependence of Rth now using alrth // Simplification of the lateral NQS modeling in order to reduce the number of // calculated derivatives. // Changed to default values of the vertical NQS effect parameters. //********** Update to HICUM/L2 v2.30 ****************************************** // The code contains the following new implementation compared to v2.24: // Accurate modeling of transfer current and gm in medium current range with. // Bias dependent weight factor hjEi. // Weight factor hf0 for low current minority charge. // Explicit physics-based formulation for BC barrier effect on minority charge. // Improved formulation for the critical current. // Added flicker noise across emitter resistance. // Added temperature dependence of RTH. // Use of mrei and mrep for temperature dependence of IREIs and IREPs. // Added Gmin also between internal collector and emitter node. // Usage of "ddx" operator only for determination of capacitances from the // corresponding diffusion charges (Qdei, Qdci). // The following effects are turned on by setting flcomp = 2.3 (as larger) // * Temperature dependence of tef0 has been turned off. // * Temperature dependence of hfe and hfc is turned on. // * Modified formulation of temperature dependent internal BE recombination current & // peripheral current //*********End Update Hicum/L2 v2.30******************************************** //****************************************************************************** //This code contains a Verilog-A implementation of Vertical Non-Quasi-Static(NQS) //Effects using adjunct gyrator networks. To turn on this effect please set FLNQS=1. //Although Vertical NQS effects have been taken into account in HICUM from the very //beginning (see original FTN code and built-in v2.1 HICUM model inside most of the //existing circuit simulators) their implementation has been based on Weil's approach. //However, using Verilog, it is presently not possible to implement Weil's approach, //since there does not exist access to previous time-steps of the simulator. //The nearly available Verilog-A solution reproduces the results of previous //HICUM versions (cf. documentation). //****************************************************************************** // ***************Bug fix and optimization************* // 04/08: New range has been defined for FDQR0. // 11/07: Bugs have been fixed in macro HICFCI and HICQFC // 10/06: in @(initial_model), external if-block for HICTUN_T removed // 11/06: within HICQFC, minor changes made for LATB<=0.01; // also HICFCI and HICFCT are changed accordingly // to ensure correct derivatives // Upper limit of FGEO parameter was changed to infinity. // 12/06: expressions for Cdei and Cdci are corrected not to include // Ccdei and Cbdci respectively (used in Crbi expression). // 01/06: FCdf1_dw assigned expression (missing in v2.21) // FCa and FCa1 are found to have same expression: FCa is omitted in those cases // FCa1 written instead of FCa in the expression for FCf_ci // Thermal node "tnode" set as external // zetasct = mg+1-2.5 changed to zetasct = mg-1.5; // Code optimization: Temperature dependent parts are modeled in two separate blocks: // within @(initial_model) when self-heating is OFF // outside @(initial_model) when self-heating is ON // 03/06 : Further fix // vlim_t,ibcis_t,ibcxs_t,itss_t,iscs_t considered in compatibility block // ddt() operators are separated in contribution expressions. // FLCOMP parameter is given different values // 05/06: // all if-else blocks marked with begin-end // unused variables deleted // all series resistors and RTH are allowed to have a minimum value MIN_R // only tunneling current source contribution within if-then-else // 06/06: HICRBI deleted and instead the code changed (hyperbolic smoothing in // conductivity modulation part) and put in relevant portion of the code. // 07/06: ddx() operator used to find out capacitances from charges: // QJMODF,QJMOD,HICJQ changed accordingly // Lateral NQS effect modified with ddx() operator. // HICFCT included for downward compatibility reason. // Few macros are taken inside the code: HICICK, HICAVL, HICTUN (more optimized), // internal base resistance (Qjci included under conductivity modulation, hyperbolic smoothing used) // Gmin added at (bi,ei) and (bi,ci) branches. // 08/06: Units added in the parameter descriptions. // ********************************************************************************* // 06/06: Comment on NODE COLLAPSING: // Presently this verilog code permits a minimum of 1 milli-Ohm resistance for any // series resistance as well as for thermal resistance RTH. If any of the resistance // values drops below this minimum value, the corresponding nodes are shorted with // zero voltage contribution. We want the model compilers/simulators deal this // situation in such a manner that the corresponding node is COLLAPSED. // We expect that the simulators should permit current contribution statement // for any branch with resistance value more than (or equal to) 1 milli-Ohm without // any convergence problem. In fact, we wish NOT to have to use a voltage contribution // statement in our Verilog code, except as an indication for the model compiler/simulator // to interpret a zero branch voltage as NODE-COLLAPSING action. // ********************************************************************************** `ifdef insideADMS `define MODEL @(initial_model) `define NOISE @(noise) `define ATTR(txt) (*txt*) `else `define MODEL `define NOISE `define ATTR(txt) `endif // Comment this line, if calculation of operating point values should be omitted //`define CALC_OP // Uncomment this line to reduce calculation of OP values only for DC simulations //`define OP_STATIC `define VPT_thresh 1.0e2 `define Dexp_lim 80.0 `define Cexp_lim 80.0 `define DFa_fj 1.921812 `define RTOLC 1.0e-5 `define l_itmax 100 `define TMAX 326.85 `define TMIN -100.0 `define LN_EXP_LIMIT 11.0 `define MIN_R 0.001 //`define Gmin 1.0e-12 //`define Gmin $simparam("gmin",1e-12) //suggested by L.L `define Gmin _circuit_gmin //ADS //`include "constants.vams" //`include "disciplines.vams" //`include "compact.vams" //Spectre `include "constants.h" `include "discipline.h" //////////////Explicit Capacitance and Charge Expression/////////////// // DEPLETION CHARGE CALCULATION // Hyperbolic smoothing used; no punch-through // INPUT: // c_0 : zero-bias capacitance // u_d : built-in voltage // z : exponent coefficient // a_j : control parameter for C peak value at high forward bias // U_cap : voltage across junction // IMPLICIT INPUT: // VT : thermal voltage // OUTPUT: // Qz : depletion Charge // C : depletion capacitance `define QJMODF(c_0,u_d,z,a_j,U_cap,C,Qz)\ if(c_0 > 0.0) begin\ DFV_f = u_d*(1.0-exp(-ln(a_j)/z));\ DFv_e = (DFV_f-U_cap)/VT;\ DFs_q = sqrt(DFv_e*DFv_e+`DFa_fj);\ DFs_q2 = (DFv_e+DFs_q)*0.5;\ DFv_j = DFV_f-VT*DFs_q2;\ DFdvj_dv = DFs_q2/DFs_q;\ DFb = ln(1.0-DFv_j/u_d);\ DFC_j1 = c_0*exp(-z*DFb)*DFdvj_dv;\ C = DFC_j1+a_j*c_0*(1.0-DFdvj_dv);\ DFQ_j = c_0*u_d*(1.0-exp(DFb*(1.0-z)))/(1.0-z);\ Qz = DFQ_j+a_j*c_0*(U_cap-DFv_j);\ end else begin\ C = 0.0;\ Qz = 0.0;\ end //////////////////////////////////////////////////////////////// //////////////Explicit Capacitance and Charge Expression/////////////// // DEPLETION CHARGE CALCULATION CONSIDERING PUNCH THROUGH // smoothing of reverse bias region (punch-through) // and limiting to a_j=Cj,max/Cj0 for forward bias. // Important for base-collector and collector-substrate junction // INPUT: // c_0 : zero-bias capacitance // u_d : built-in voltage // z : exponent coefficient // a_j : control parameter for C peak value at high forward bias // v_pt : punch-through voltage (defined as qNw^2/2e) // U_cap : voltage across junction // IMPLICIT INPUT: // VT : thermal voltage // OUTPUT: // Qz : depletion charge // C : depletion capacitance `define QJMOD(c_0,u_d,z,a_j,v_pt,U_cap,C,Qz)\ if(c_0 > 0.0) begin\ Dz_r = z/4.0;\ Dv_p = v_pt-u_d;\ DV_f = u_d*(1.0-exp(-ln(a_j)/z));\ DC_max = a_j*c_0;\ DC_c = c_0*exp((Dz_r-z)*ln(v_pt/u_d));\ Dv_e = (DV_f-U_cap)/VT;\ if(Dv_e < `Cexp_lim) begin\ De = exp(Dv_e);\ De_1 = De/(1.0+De);\ Dv_j1 = DV_f-VT*ln(1.0+De);\ end else begin\ De_1 = 1.0;\ Dv_j1 = U_cap;\ end\ Da = 0.1*Dv_p+4.0*VT;\ Dv_r = (Dv_p+Dv_j1)/Da;\ if(Dv_r < `Cexp_lim) begin\ De = exp(Dv_r);\ De_2 = De/(1.0+De);\ Dv_j2 = -Dv_p+Da*(ln(1.0+De)-exp(-(Dv_p+DV_f)/Da));\ end else begin\ De_2 = 1.0;\ Dv_j2 = Dv_j1;\ end\ Dv_j4 = U_cap-Dv_j1;\ DCln1 = ln(1.0-Dv_j1/u_d);\ DCln2 = ln(1.0-Dv_j2/u_d);\ Dz1 = 1.0-z;\ Dzr1 = 1.0-Dz_r;\ DC_j1 = c_0*exp(DCln2*(-z))*De_1*De_2;\ DC_j2 = DC_c*exp(DCln1*(-Dz_r))*(1.0-De_2);\ DC_j3 = DC_max*(1.0-De_1);\ C = DC_j1+DC_j2+DC_j3;\ DQ_j1 = c_0*(1.0-exp(DCln2*Dz1))/Dz1;\ DQ_j2 = DC_c*(1.0-exp(DCln1*Dzr1))/Dzr1;\ DQ_j3 = DC_c*(1.0-exp(DCln2*Dzr1))/Dzr1;\ Qz = (DQ_j1+DQ_j2-DQ_j3)*u_d+DC_max*Dv_j4;\ end else begin\ C = 0.0;\ Qz = 0.0;\ end // DEPLETION CHARGE & CAPACITANCE CALCULATION SELECTOR // Dependent on junction punch-through voltage // Important for collector related junctions `define HICJQ(c_0,u_d,z,v_pt,U_cap,C,Qz)\ if(v_pt < `VPT_thresh) begin\ `QJMOD(c_0,u_d,z,2.4,v_pt,U_cap,C,Qz)\ end else begin\ `QJMODF(c_0,u_d,z,2.4,U_cap,C,Qz)\ end // A CALCULATION NEEDED FOR COLLECTOR MINORITY CHARGE FORMULATION // INPUT: // zb,zl : zeta_b and zeta_l (model parameters, TED 10/96) // w : normalized injection width // OUTPUT: // hicfcio : function of equation (2.1.17-10) `define HICFCI(zb,zl,w,hicfcio,dhicfcio_dw)\ z = zb*w;\ lnzb = ln(1+zb*w);\ if(z > 1.0e-6) begin\ x = 1.0+z;\ a = x*x;\ a2 = 0.250*(a*(2.0*lnzb-1.0)+1.0);\ a3 = (a*x*(3.0*lnzb-1.0)+1.0)/9.0;\ r = zl/zb;\ hicfcio = ((1.0-r)*a2+r*a3)/zb;\ dhicfcio_dw = ((1.0-r)*x+r*a)*lnzb;\ end else begin\ a = z*z;\ a2 = 3.0+z-0.25*a+0.10*z*a;\ a3 = 2.0*z+0.75*a-0.20*a*z;\ hicfcio = (zb*a2+zl*a3)*w*w/6.0;\ dhicfcio_dw = (1+zl*w)*(1+z)*lnzb;\ end // NEEDED TO CALCULATE WEIGHTED ICCR COLLECTOR MINORITY CHARGE // INPUT: // z : zeta_b or zeta_l // w : normalized injection width // OUTPUT: // hicfcto : output // dhicfcto_dw : derivative of output wrt w `define HICFCT(z,w,hicfcto,dhicfcto_dw)\ a = z*w;\ lnz = ln(1+z*w);\ if (a > 1.0e-6) begin\ hicfcto = (a - lnz)/z;\ dhicfcto_dw = a / (1.0 + a);\ end else begin\ hicfcto = 0.5 * a * w;\ dhicfcto_dw = a;\ end // COLLECTOR CURRENT SPREADING CALCULATION // collector minority charge incl. 2D/3D current spreading (TED 10/96) // INPUT: // Ix : forward transport current component (itf) // I_CK : critical current // FFT_pcS : dependent on fthc and thcs (parameters) // IMPLICIT INPUT: // ahc, latl, latb : model parameters // VT : thermal voltage // OUTPUT: // Q_fC, Q_CT: actual and ICCR (weighted) hole charge // T_fC, T_cT: actual and ICCR (weighted) transit time // Derivative dfCT_ditf not properly implemented yet `define HICQFC(Ix,I_CK,FFT_pcS,Q_fC,Q_CT,T_fC,T_cT)\ Q_fC = FFT_pcS*Ix;\ FCa = 1.0-I_CK/Ix;\ FCrt = sqrt(FCa*FCa+ahc);\ FCa_ck = 1.0-(FCa+FCrt)/(1.0+sqrt(1.0+ahc));\ FCdaick_ditf = (FCa_ck-1.0)*(1-FCa)/(FCrt*Ix);\ if(latb > latl) begin\ FCz = latb-latl;\ FCxl = 1.0+latl;\ FCxb = 1.0+latb;\ if(latb > 0.01) begin\ FCln = ln(FCxb/FCxl);\ FCa1 = exp((FCa_ck-1.0)*FCln);\ FCd_a = 1.0/(latl-FCa1*latb);\ FCw = (FCa1-1.0)*FCd_a;\ FCdw_daick = -FCz*FCa1*FCln*FCd_a*FCd_a;\ FCa1 = ln((1.0+latb*FCw)/(1.0+latl*FCw));\ FCda1_dw = latb/(1.0+latb*FCw) - latl/(1.0+latl*FCw);\ end else begin\ FCf1 = 1.0-FCa_ck;\ FCd_a = 1.0/(1.0+FCa_ck*latb);\ FCw = FCf1*FCd_a;\ FCdw_daick = -1.0*FCd_a*FCd_a*FCxb*FCd_a;\ FCa1 = FCz*FCw;\ FCda1_dw = FCz;\ end\ FCf_CT = 2.0/FCz;\ FCw2 = FCw*FCw;\ FCf1 = latb*latl*FCw*FCw2/3.0+(latb+latl)*FCw2/2.0+FCw;\ FCdf1_dw = latb*latl*FCw2 + (latb+latl)*FCw + 1.0;\ `HICFCI(latb,latl,FCw,FCf2,FCdf2_dw)\ `HICFCI(latl,latb,FCw,FCf3,FCdf3_dw)\ FCf_ci = FCf_CT*(FCa1*FCf1-FCf2+FCf3);\ FCdfc_dw = FCf_CT*(FCa1*FCdf1_dw+FCda1_dw*FCf1-FCdf2_dw+FCdf3_dw);\ FCdw_ditf = FCdw_daick*FCdaick_ditf;\ FCdfc_ditf = FCdfc_dw*FCdw_ditf;\ if(flcomp == 0.0 || flcomp == 2.1) begin\ `HICFCT(latb,FCw,FCf2,FCdf2_dw)\ `HICFCT(latl,FCw,FCf3,FCdf3_dw)\ FCf_CT = FCf_CT*(FCf2-FCf3);\ FCdfCT_dw = FCf_CT*(FCdf2_dw-FCdf3_dw);\ FCdfCT_ditf = FCdfCT_dw*FCdw_ditf;\ end else begin\ FCf_CT = FCf_ci;\ FCdfCT_ditf = FCdfc_ditf;\ end\ end else begin\ if(latb > 0.01) begin\ FCd_a = 1.0/(1.0+FCa_ck*latb);\ FCw = (1.0-FCa_ck)*FCd_a;\ FCdw_daick = -(1.0+latb)*FCd_a*FCd_a;\ end else begin\ FCw = 1.0-FCa_ck-FCa_ck*latb;\ FCdw_daick = -(1.0+latb);\ end\ FCw2 = FCw*FCw;\ FCz = latb*FCw;\ FCz_1 = 1.0+FCz;\ FCd_f = 1.0/(FCz_1);\ FCf_ci = FCw2*(1.0+FCz/3.0)*FCd_f;\ FCdfc_dw = 2.0*FCw*(FCz_1+FCz*FCz/3.0)*FCd_f*FCd_f;\ FCdw_ditf = FCdw_daick*FCdaick_ditf;\ FCdfc_ditf = FCdfc_dw*FCdw_ditf;\ if(flcomp == 0.0 || flcomp == 2.1) begin\ if (FCz > 0.001) begin\ FCf_CT = 2.0*(FCz_1*ln(FCz_1)-FCz)/(latb*latb*FCz_1);\ FCdfCT_dw = 2.0*FCw*FCd_f*FCd_f;\ end else begin\ FCf_CT = FCw2*(1.0-FCz/3.0)*FCd_f;\ FCdfCT_dw = 2.0*FCw*(1.0-FCz*FCz/3.0)*FCd_f*FCd_f;\ end\ FCdfCT_ditf = FCdfCT_dw*FCdw_ditf;\ end else begin\ FCf_CT = FCf_ci;\ FCdfCT_ditf = FCdfc_ditf;\ end\ end\ Q_CT = Q_fC*FCf_CT*exp((FFdVc-vcbar)/VT);\ Q_fC = Q_fC*FCf_ci*exp((FFdVc-vcbar)/VT);\ T_fC = FFT_pcS*exp((FFdVc-vcbar)/VT)*(FCf_ci+Ix*FCdfc_ditf)+Q_fC/VT*FFdVc_ditf;\ T_cT = FFT_pcS*exp((FFdVc-vcbar)/VT)*(FCf_CT+Ix*FCdfCT_ditf)+Q_CT/VT*FFdVc_ditf; // TRANSIT-TIME AND STORED MINORITY CHARGE // INPUT: // itf : forward transport current // I_CK : critical current // T_f : transit time \ // Q_f : minority charge / for low current // IMPLICIT INPUT: // tef0, gtfe, fthc, thcs, ahc, latl, latb : model parameters // OUTPUT: // T_f : transit time \ // Q_f : minority charge / transient analysis // T_fT : transit time \ // Q_fT : minority charge / ICCR (transfer current) // Q_bf : excess base charge `define HICQFF(itf,I_CK,T_f,Q_f,T_fT,Q_fT,Q_bf)\ if(itf < 1.0e-6*I_CK) begin\ Q_fT = Q_f;\ T_fT = T_f;\ Q_bf = 0;\ end else begin\ FFitf_ick = itf/I_CK;\ FFdTef = tef0_t*exp(gtfe*ln(FFitf_ick));\ FFdQef = FFdTef*itf/(1+gtfe);\ if (icbar<0.05*(vlim/rci0)) begin\ FFdVc = 0;\ FFdVc_ditf = 0;\ end else begin\ FFib = (itf-I_CK)/icbar;\ if (FFib < -1.0e10) begin\ FFib = -1.0e10;\ end\ FFfcbar = (FFib+sqrt(FFib*FFib+acbar))/2.0;\ FFdib_ditf = FFfcbar/sqrt(FFib*FFib+acbar)/icbar;\ FFdVc = vcbar*exp(-1.0/FFfcbar);\ FFdVc_ditf = FFdVc/(FFfcbar*FFfcbar)*FFdib_ditf;\ end\ FFdQbfb = (1-fthc)*thcs_t*itf*(exp(FFdVc/VT)-1);\ FFdTbfb = FFdQbfb/itf+(1-fthc)*thcs_t*itf*exp(FFdVc/VT)/VT*FFdVc_ditf;\ FFic = 1-1.0/FFitf_ick;\ FFw = (FFic+sqrt(FFic*FFic+ahc))/(1+sqrt(1+ahc));\ FFdQfhc = thcs_t*itf*FFw*FFw*exp((FFdVc-vcbar)/VT);\ FFdTfhc = FFdQfhc*(1.0/itf*(1.0+2.0/(FFitf_ick*sqrt(FFic*FFic+ahc)))+1.0/VT*FFdVc_ditf);\ if(latb <= 0.0 && latl <= 0.0) begin\ FFdQcfc = fthc*FFdQfhc;\ FFdTcfc = fthc*FFdTfhc;\ FFdQcfcT = FFdQcfc;\ FFdTcfcT = FFdTcfc;\ end else begin\ `HICQFC(itf,I_CK,fthc*thcs_t,FFdQcfc,FFdQcfcT,FFdTcfc,FFdTcfcT)\ end\ FFdQbfc = (1-fthc)*FFdQfhc;\ FFdTbfc = (1-fthc)*FFdTfhc;\ Q_fT = hf0_t*Q_f+FFdQbfb+FFdQbfc+hfe_t*FFdQef+hfc_t*FFdQcfcT;\ T_fT = hf0_t*T_f+FFdTbfb+FFdTbfc+hfe_t*FFdTef+hfc_t*FFdTcfcT;\ Q_f = Q_f+(FFdQbfb+FFdQbfc)+FFdQef+FFdQcfc;\ T_f = T_f+(FFdTbfb+FFdTbfc)+FFdTef+FFdTcfc;\ Q_bf = FFdQbfb+FFdQbfc;\ end // IDEAL DIODE (WITHOUT CAPACITANCE): // conductance calculation not required // INPUT: // IS, IST : saturation currents (model parameter related) // UM1 : ideality factor // U : branch voltage // IMPLICIT INPUT: // VT : thermal voltage // OUTPUT: // Iz : diode current `define HICDIO(IS,IST,UM1,U,Iz)\ DIOY = U/(UM1*VT);\ if (IS > 0.0) begin\ if (DIOY > `Dexp_lim) begin\ le = (1 + (DIOY - `Dexp_lim));\ DIOY = `Dexp_lim;\ end else begin\ le = 1;\ end\ le = le*limexp(DIOY);\ Iz = IST*(le-1.0);\ if(DIOY <= -14.0) begin\ Iz = -IST;\ end\ end else begin\ Iz = 0.0;\ end // TEMPERATURE UPDATE OF JUNCTION CAPACITANCE RELATED PARAMETERS // INPUT: // mostly model parameters // x : zero bias junction capacitance // y : junction built-in potential // z : grading co-efficient // w : ratio of maximum to zero-bias value of capacitance or punch-through voltage // is_al : condition factor to check what "w" stands for // vgeff : band-gap voltage // IMPLICIT INPUT: // VT : thermal voltage // vt0,qtt0,ln_qtt0,mg : other model variables // OUTPUT: // c_j_t : temperature update of "c_j" // vd_t : temperature update of "vd0" // w_t : temperature update of "w" `define TMPHICJ(c_j,vd0,z,w,is_al,vgeff,c_j_t,vd_t,w_t)\ if (c_j > 0.0) begin\ vdj0 = 2*vt0*ln(exp(vd0*0.5/vt0)-exp(-0.5*vd0/vt0));\ vdjt = vdj0*qtt0+vgeff*(1-qtt0)-mg*VT*ln_qtt0;\ vdt = vdjt+2*VT*ln(0.5*(1+sqrt(1+4*exp(-vdjt/VT))));\ vd_t = vdt;\ c_j_t = c_j*exp(z*ln(vd0/vd_t));\ if (is_al == 1) begin\ w_t = w*vd_t/vd0;\ end else begin\ w_t = w;\ end\ end else begin\ c_j_t = c_j;\ vd_t = vd0;\ w_t = w;\ end module hic2_full (c,b,e,s,tnode); //Node definitions inout c,b,e,s,tnode; electrical c,b,e,s,ci,ei,bp,bi,si; electrical xf1,xf2; electrical xf; //RC nw electrical tnode; electrical n1,n2; //Branch definitions branch (b,bp) br_bbp_i; branch (b,bp) br_bbp_v; branch (ci,c) br_cic_i; branch (ci,c) br_cic_v; branch (ei,e) br_eie_i; branch (ei,e) br_eie_v; branch (bp,bi) br_bpbi_i; branch (bp,bi) br_bpbi_v; branch (si,s) br_sis_i; branch (si,s) br_sis_v; branch (bi,ei) br_biei; branch (bi,ci) br_bici; branch (ci,bi) br_cibi; branch (ci,ei) br_ciei; branch (ei,ci) br_eici; branch (bp,e) br_bpe; branch (b,e) br_be; branch (bp,ei) br_bpei; branch (bp,ci) br_bpci; branch (b,ci) br_bci; branch (si,ci) br_sici; branch (s,c) br_sc; // External SC branch required for CSCp branch (bp,si) br_bpsi; branch (tnode ) br_sht; //Excess phase network for ITF branch (xf1 ) br_bxf1; branch (xf1 ) br_cxf1; branch (xf2 ) br_bxf2; branch (xf2 ) br_cxf2; //Excess phase network for QF branch (xf ) br_bxf; //for RC nw branch (xf ) br_cxf; //for RC nw branch (n1 ) b_n1; branch (n2 ) b_n2; // -- ########################################################### // -- ########### Parameters initialization ################ // -- ########################################################### //Transfer current parameter real c10 = 2.0E-30 from [0:1] `ATTR(info="GICCR constant" unit="A^2s"); parameter real qp0 = 2.0E-14 from (0:1] `ATTR(info="Zero-bias hole charge" unit="Coul"); parameter real ich = 0.0 from [0:inf) `ATTR(info="High-current correction for 2D and 3D effects" unit="A"); //`0' signifies infinity parameter real hf0 = 1.0 from [0:inf) `ATTR(info="Weight factor for the low current minority charge"); parameter real hfe = 1.0 from [0:inf] `ATTR(info="Emitter minority charge weighting factor in HBTs"); parameter real hfc = 1.0 from [0:inf] `ATTR(info="Collector minority charge weighting factor in HBTs"); parameter real hjei = 1.0 from [0:100] `ATTR(info="B-E depletion charge weighting factor in HBTs"); parameter real ahjei = 0.0 from [0:100] `ATTR(info="Parameter describing the slope of hjEi(VBE)"); parameter real rhjei = 1.0 from (0:10] `ATTR(info="Smoothing parameter for hjEi(VBE) at high voltage"); parameter real hjci = 1.0 from [0:100] `ATTR(info="B-C depletion charge weighting factor in HBTs"); //Base-Emitter diode currents parameter real ibeis = 1.0E-18 from [0:1] `ATTR(info="Internal B-E saturation current" unit="A"); parameter real mbei = 1.0 from (0:10] `ATTR(info="Internal B-E current ideality factor"); parameter real ireis = 0.0 from [0:1] `ATTR(info="Internal B-E recombination saturation current" unit="A"); parameter real mrei = 2.0 from (0:10] `ATTR(info="Internal B-E recombination current ideality factor"); parameter real ibeps = 0.0 from [0:1] `ATTR(info="Peripheral B-E saturation current" unit="A"); parameter real mbep = 1.0 from (0:10] `ATTR(info="Peripheral B-E current ideality factor"); parameter real ireps = 0.0 from [0:1] `ATTR(info="Peripheral B-E recombination saturation current" unit="A"); parameter real mrep = 2.0 from (0:10] `ATTR(info="Peripheral B-E recombination current ideality factor"); parameter real mcf = 1.0 from (0:10] `ATTR(info="Non-ideality factor for III-V HBTs"); //Transit time for excess recombination current at b-c barrier parameter real tbhrec = 0.0 from [0:inf) `ATTR(info="Base current recombination time constant at B-C barrier for high forward injection" unit="s"); //Base-Collector diode currents parameter real ibcis = 1.0E-16 from [0:1.0] `ATTR(info="Internal B-C saturation current" unit="A"); parameter real mbci = 1.0 from (0:10] `ATTR(info="Internal B-C current ideality factor"); parameter real ibcxs = 0.0 from [0:1.0] `ATTR(info="External B-C saturation current" unit="A"); parameter real mbcx = 1.0 from (0:10] `ATTR(info="External B-C current ideality factor"); //Base-Emitter tunneling current parameter real ibets = 0.0 from [0:50] `ATTR(info="B-E tunneling saturation current" unit="A"); parameter real abet = 40 from [0:inf) `ATTR(info="Exponent factor for tunneling current"); parameter integer tunode= 1 from [0:1] `ATTR(info="Specifies the base node connection for the tunneling current"); // =1 signifies perimeter node //Base-Collector avalanche current parameter real favl = 0.0 from [0:inf) `ATTR(info="Avalanche current factor" unit="1/V"); parameter real qavl = 0.0 from [0:inf) `ATTR(info="Exponent factor for avalanche current" unit="Coul"); parameter real kavl = 0.0 from [0:3] `ATTR(info="Flag/factor for turning strong avalanche on"); parameter real alfav = 0.0 `ATTR(info="Relative TC for FAVL" unit="1/K"); parameter real alqav = 0.0 `ATTR(info="Relative TC for QAVL" unit="1/K"); parameter real alkav = 0.0 `ATTR(info="Relative TC for KAVL" unit="1/K"); //Series resistances parameter real rbi0 = 0.0 from [0:inf) `ATTR(info="Zero bias internal base resistance" unit="Ohm"); parameter real rbx = 0.0 from [0:inf) `ATTR(info="External base series resistance" unit="Ohm"); parameter real fgeo = 0.6557 from [0:inf] `ATTR(info="Factor for geometry dependence of emitter current crowding"); parameter real fdqr0 = 0.0 from [-0.5:100] `ATTR(info="Correction factor for modulation by B-E and B-C space charge layer"); parameter real fcrbi = 0.0 from [0:1] `ATTR(info="Ratio of HF shunt to total internal capacitance (lateral NQS effect)"); parameter real fqi = 1.0 from [0:1] `ATTR(info="Ration of internal to total minority charge"); parameter real re = 0.0 from [0:inf) `ATTR(info="Emitter series resistance" unit="Ohm"); parameter real rcx = 0.0 from [0:inf) `ATTR(info="External collector series resistance" unit="Ohm"); //Substrate transistor parameter real itss = 0.0 from [0:1.0] `ATTR(info="Substrate transistor transfer saturation current" unit="A"); parameter real msf = 1.0 from (0:10] `ATTR(info="Forward ideality factor of substrate transfer current"); parameter real iscs = 0.0 from [0:1.0] `ATTR(info="C-S diode saturation current" unit="A"); parameter real msc = 1.0 from (0:10] `ATTR(info="Ideality factor of C-S diode current"); parameter real tsf = 0.0 from [0:inf) `ATTR(info="Transit time for forward operation of substrate transistor" unit="s"); //Intra-device substrate coupling parameter real rsu = 0.0 from [0:inf) `ATTR(info="Substrate series resistance" unit="Ohm"); parameter real csu = 0.0 from [0:inf) `ATTR(info="Substrate shunt capacitance" unit="F"); //Depletion Capacitances parameter real cjei0 = 1.0E-20 from [0:inf) `ATTR(info="Internal B-E zero-bias depletion capacitance" unit="F"); parameter real vdei = 0.9 from (0:10] `ATTR(info="Internal B-E built-in potential" unit="V"); parameter real zei = 0.5 from (0:1) `ATTR(info="Internal B-E grading coefficient"); parameter real ajei = 2.5 from [1:inf) `ATTR(info="Ratio of maximum to zero-bias value of internal B-E capacitance"); parameter real cjep0 = 1.0E-20 from [0:inf) `ATTR(info="Peripheral B-E zero-bias depletion capacitance" unit="F"); parameter real vdep = 0.9 from (0:10] `ATTR(info="Peripheral B-E built-in potential" unit="V"); parameter real zep = 0.5 from (0:1) `ATTR(info="Peripheral B-E grading coefficient"); parameter real ajep = 2.5 from [1:inf) `ATTR(info="Ratio of maximum to zero-bias value of peripheral B-E capacitance"); parameter real cjci0 = 1.0E-20 from [0:inf) `ATTR(info="Internal B-C zero-bias depletion capacitance" unit="F"); parameter real vdci = 0.7 from (0:10] `ATTR(info="Internal B-C built-in potential" unit="V"); parameter real zci = 0.4 from (0:1) `ATTR(info="Internal B-C grading coefficient"); parameter real vptci = 100 from (0:100] `ATTR(info="Internal B-C punch-through voltage" unit="V"); parameter real cjcx0 = 1.0E-20 from [0:inf) `ATTR(info="External B-C zero-bias depletion capacitance" unit="F"); parameter real vdcx = 0.7 from (0:10] `ATTR(info="External B-C built-in potential" unit="V"); parameter real zcx = 0.4 from (0:1) `ATTR(info="External B-C grading coefficient"); parameter real vptcx = 100 from (0:100] `ATTR(info="External B-C punch-through voltage" unit="V"); parameter real fbcpar = 0.0 from [0:1] `ATTR(info="Partitioning factor of parasitic B-C cap"); parameter real fbepar = 1.0 from [0:1] `ATTR(info="Partitioning factor of parasitic B-E cap"); parameter real cjs0 = 0.0 from [0:inf) `ATTR(info="C-S zero-bias depletion capacitance" unit="F"); parameter real vds = 0.6 from (0:10] `ATTR(info="C-S built-in potential" unit="V"); parameter real zs = 0.5 from (0:1) `ATTR(info="C-S grading coefficient"); parameter real vpts = 100 from (0:100] `ATTR(info="C-S punch-through voltage" unit="V"); parameter real cscp0 = 0.0 from [0:inf) `ATTR(info="Perimeter S-C zero-bias depletion capacitance" unit="F"); parameter real vdsp = 0.6 from [0:10] `ATTR(info="Perimeter S-C built-in potential" unit="V"); parameter real zsp = 0.5 from (0:1) `ATTR(info="Perimeter S-C grading coefficient"); parameter real vptsp = 100 from (0:100] `ATTR(info="Perimeter S-C punch-through voltage" unit="V"); //Diffusion Capacitances parameter real t0 = 0.0 from [0:inf) `ATTR(info="Low current forward transit time at VBC=0V" unit="s"); parameter real dt0h = 0.0 from (-inf:inf) `ATTR(info="Time constant for base and B-C space charge layer width modulation" unit="s"); parameter real tbvl = 0.0 from (-inf:inf) `ATTR(info="Time constant for modeling carrier jam at low VCE" unit="s"); parameter real tef0 = 0.0 from [0:inf) `ATTR(info="Neutral emitter storage time" unit="s"); parameter real gtfe = 1.0 from (0:10] `ATTR(info="Exponent factor for current dependence of neutral emitter storage time"); parameter real thcs = 0.0 from [0:inf) `ATTR(info="Saturation time constant at high current densities" unit="s"); parameter real ahc = 0.1 from (0:50] `ATTR(info="Smoothing factor for current dependence of base and collector transit time"); parameter real fthc = 0.0 from [0:1] `ATTR(info="Partitioning factor for base and collector portion"); parameter real rci0 = 150 from (0:inf) `ATTR(info="Internal collector resistance at low electric field" unit="Ohm"); parameter real vlim = 0.5 from (0:10] `ATTR(info="Voltage separating ohmic and saturation velocity regime" unit="V"); parameter real vces = 0.1 from [0:1] `ATTR(info="Internal C-E saturation voltage" unit="V"); parameter real vpt = 100.0 from (0:inf] `ATTR(info="Collector punch-through voltage" unit="V"); // `0' signifies infinity parameter real aick = 1e-3 from (0:10] `ATTR(info="Smoothing term for ICK"); parameter real delck = 2.0 from (0:10] `ATTR(info="Fitting factor for critical current"); parameter real tr = 0.0 from [0:inf) `ATTR(info="Storage time for inverse operation" unit="s"); parameter real vcbar = 0.0 from [0:1] `ATTR(info="Barrier voltage" unit="V"); parameter real icbar = 0.0 from [0:1] `ATTR(info="Normalization parameter" unit="A"); parameter real acbar = 0.01 from (0:10] `ATTR(info="Smoothing parameter for barrier voltage"); //Isolation Capacitances parameter real cbepar = 0.0 from [0:inf) `ATTR(info="Total parasitic B-E capacitance" unit="F"); parameter real cbcpar = 0.0 from [0:inf) `ATTR(info="Total parasitic B-C capacitance" unit="F"); //Non-quasi-static Effect parameter real alqf = 0.167 from [0:1] `ATTR(info="Factor for additional delay time of minority charge"); parameter real alit = 0.333 from [0:1] `ATTR(info="Factor for additional delay time of transfer current"); parameter integer flnqs = 0 from [0:1] `ATTR(info="Flag for turning on and off of vertical NQS effect"); //Noise parameter real kf = 0.0 from [0:inf) `ATTR(info="Flicker noise coefficient"); parameter real af = 2.0 from (0:10] `ATTR(info="Flicker noise exponent factor"); parameter integer cfbe = -1 from [-2:-1] `ATTR(info="Flag for determining where to tag the flicker noise source"); parameter integer flcono = 0 from [0:1] `ATTR(info="Flag for turning on and off of correlated noise implementation"); parameter real kfre = 0.0 from [0:inf) `ATTR(info="Emitter resistance flicker noise coefficient"); parameter real afre = 2.0 from (0:10] `ATTR(info="Emitter resistance flicker noise exponent factor"); //Lateral Geometry Scaling (at high current densities) parameter real latb = 0.0 from [0:inf) `ATTR(info="Scaling factor for collector minority charge in direction of emitter width"); parameter real latl = 0.0 from [0:inf) `ATTR(info="Scaling factor for collector minority charge in direction of emitter length"); //Temperature dependence parameter real vgb = 1.17 from (0:10] `ATTR(info="Bandgap voltage extrapolated to 0 K" unit="V"); parameter real alt0 = 0.0 `ATTR(info="First order relative TC of parameter T0" unit="1/K"); parameter real kt0 = 0.0 `ATTR(info="Second order relative TC of parameter T0"); parameter real zetaci = 0.0 from [-10:10] `ATTR(info="Temperature exponent for RCI0"); parameter real alvs = 0.0 `ATTR(info="Relative TC of saturation drift velocity" unit="1/K"); parameter real alces = 0.0 `ATTR(info="Relative TC of VCES" unit="1/K"); parameter real zetarbi = 0.0 from [-10:10] `ATTR(info="Temperature exponent of internal base resistance"); parameter real zetarbx = 0.0 from [-10:10] `ATTR(info="Temperature exponent of external base resistance"); parameter real zetarcx = 0.0 from [-10:10] `ATTR(info="Temperature exponent of external collector resistance"); parameter real zetare = 0.0 from [-10:10] `ATTR(info="Temperature exponent of emitter resistance"); parameter real zetacx = 1.0 from [-10:10] `ATTR(info="Temperature exponent of mobility in substrate transistor transit time"); parameter real vge = 1.17 from (0:10] `ATTR(info="Effective emitter bandgap voltage" unit="V"); parameter real vgc = 1.17 from (0:10] `ATTR(info="Effective collector bandgap voltage" unit="V"); parameter real vgs = 1.17 from (0:10] `ATTR(info="Effective substrate bandgap voltage" unit="V"); parameter real f1vg =-1.02377e-4 `ATTR(info="Coefficient K1 in T-dependent band-gap equation"); parameter real f2vg = 4.3215e-4 `ATTR(info="Coefficient K2 in T-dependent band-gap equation"); parameter real zetact = 3.0 from [-10:10] `ATTR(info="Exponent coefficient in transfer current temperature dependence"); parameter real zetabet = 3.5 from [-10:10] `ATTR(info="Exponent coefficient in B-E junction current temperature dependence"); parameter real alb = 0.0 `ATTR(info="Relative TC of forward current gain for V2.1 model" unit="1/K"); parameter real dvgbe = 0 from [-10:10] `ATTR(info="Bandgap difference between B and B-E junction used for hjEi0 and hf0" unit="V"); parameter real zetahjei = 1 from [-10:10] `ATTR(info="Temperature coefficient for ahjEi"); parameter real zetavgbe = 1 from [-10:10] `ATTR(info="Temperature coefficient for hjEi0"); //Self-Heating parameter integer flsh = 0 from [0:2] `ATTR(info="Flag for turning on and off self-heating effect"); parameter real rth = 0.0 from [0:inf) `ATTR(info="Thermal resistance" unit="K/W"); parameter real zetarth = 0.0 from [-10:10] `ATTR(info="Temperature coefficient for Rth"); parameter real alrth = 0.0 from [-10:10] `ATTR(info="First order relative TC of parameter Rth" unit="1/K"); parameter real cth = 0.0 from [0:inf) `ATTR(info="Thermal capacitance" unit="J/W"); //Compatibility with V2.1 parameter real flcomp = 0.0 from [0:inf) `ATTR(info="Flag for compatibility with v2.1 model (0=v2.1)"); //Circuit simulator specific parameters parameter real tnom = 27.0 `ATTR(info="Temperature at which parameters are specified" unit="C"); parameter real dt = 0.0 `ATTR(info="Temperature change w.r.t. chip temperature for particular transistor" unit="K"); parameter integer type = 1 from [-1:1] exclude 0 `ATTR(info="For transistor type NPN(+1) or PNP (-1)"); // //======================== Transistor model formulation =================== // //Declaration of variables real _circuit_gmin; //Temperature and drift real VT,Tdev,qtt0,ln_qtt0,r_VgVT,V_gT,dT,k; real ireis_t,ibeis_t,ibcxs_t,ibcis_t,iscs_t,cjci0_t; real cjs0_t,cscp0_t,rci0_t,vlim_t,vces_t,thcs_t,tef0_t,rbi0_t; real t0_t,vdei_t,vdci_t,vpts_t,vptsp_t,itss_t,tsf_t; real c10_t,cjei0_t,qp0_t,vdcx_t,vptcx_t,cjcx01_t,cjcx02_t; real qjcx0_t_i,qjcx0_t_ii,cratio_t; real ibeps_t,ireps_t,cjep0_t; real ajei_t,qavl_t,favl_t,kavl_t,ibets_t,abet_t,vptci_t,vdep_t,ajep_t,zetatef; real k1,k2,dvg0,vge_t,vgb_t,vgbe_t,vds_t,vdsp_t,vt0,Tnom,Tamb,a,avs; real zetabci,zetabcxt,zetasct,vgbe0,mg,vgb_t0,vge_t0,vgbe_t0,vgbc0,vgsc0; real cbcpar1,cbcpar2,cbepar2,cbepar1,Oich,Ovpt,Otbhrec; //Charges, capacitances and currents real Qjci,Qjei,Qjep; real it,ibei,irei,ibci,ibep,irep,ibh_rec; real Qdei,Qdci,qrbi; real ibet,iavl; real ijbcx,ijsc,Qjs,Qscp,HSUM,HSI_Tsu,Qdsu; //Base resistance and self-heating power real pterm,rth_t; //Variables for macro TMPHICJ real vdj0,vdjt,vdt; //Model initialization real k10,k20,C_1; //Model evaluation real Cjci,Cjcit,cc,Cjei,Cjep,CjCx_i,CjCx_ii,Cjs,Cscp; real itf,itr,Tf,Tr,VT_f,i_0f,i_0r,a_bpt,Q_0,Q_p,Q_bpt; real Orci0_t,b_q,I_Tf1,T_f0,Q_fT,T_fT,Q_bf; real ICKa,d1,a1,a11,Odelck,ick1,ick2; real A,a_h,Q_pT,d_Q,d_Q0; real Qf,Cdei,Qr,Cdci,Crbi; real ick,vc,vceff,cjcx01,cjcx02,HSa,HSb; integer l_it; //Variables for macros real DIOY,le;//HICDIO real FFfcbar,FFitf_ick,FFdQef,FFdTef,FFdQbfb,FFdTbfb,FFdQfhc,FFdTfhc,FFdQbfc,FFdTbfc,FFdQcfc,FFdTcfc,FFdQcfcT,FFdTcfcT,FFib,FFic,FFw,FFdVc,FFdVc_ditf,FFdib_ditf;//HICQFF real FCz,FCw2,FCf1,FCf2,FCf3,FCf_ci,FCz_1,FCa1,FCa_ck,FCxl,FCxb;//HICQFC real FCd_a,FCdaick_ditf,FCa,FCw,FCdw_daick,FCdfc_dw,FCdw_ditf,FCdfc_ditf,FCf_CT,FCdfCT_ditf,FCrt,FCln,lnz,FCda1_dw,FCdf1_dw,FCdf2_dw,FCdf3_dw,FCd_f,FCdfCT_dw;//HICQFC real Dz_r,Dv_p,DV_f,DC_max,DC_c,Da,Dv_e,De,De_1,Dv_j1,Dv_r,De_2,Dv_j2,Dv_j4,DQ_j1,DQ_j2,DQ_j3,DCln1,DCln2,Dz1,Dzr1,DC_j1,DC_j2,DC_j3;//QJMOD real DFV_f,DFv_e,DFv_j,DFb,DFQ_j,DFs_q,DFs_q2,DFdvj_dv,DFC_j1;//QJMODF real z,a2,a3,r,x;//HICFCI real lnzb; //HICFCT //Noise real fourkt,twoq,flicker_Pwr; real betadc; real n_w,n_1,n_2,sqrt_n2; //NQS real Ixf1,Ixf2,Qxf1,Qxf2,Vxf1,Vxf2,Itxf,Qdeix; real Vxf, Ixf, Qxf,fact; real hjei_vbe,vj,vj_z; real hjei0_t, ahjei_t, hf0_t, hfe_t, hfc_t; real i_re; real Vbiei, Vbici, Vciei, Vbpei, Vbpci, Vbci, Vsici, Vsc; // Model flags integer use_aval; real rbx_t; real a_eg,ab,aa; real cV_f,cv_e,cs_q,cs_q2,cv_j,cdvj_dv; real v_bord,v_q,U0,av,avl; real Qz_nom,f_QR,ETA,Qz0,fQz; real pocce,czz; real denom,sq_smooth,hl; `ifdef CALC_OP (* desc="External (saturated) collector series resistance", units="Ohm" *) real rcx_t; (* desc="Emitter series resistance", units="Ohm" *) real re_t; (* desc="Internal base resistance as calculated in the model", units="Ohm" *) real rbi; (* desc="Total base resistance as calculated in the model", units="Ohm" *) real rb; `else real rcx_t, re_t, rbi; `endif `ifdef CALC_OP (* desc="Base terminal current", units="A" *) real IB; (* desc="Collector terminal current", units="A" *) real IC; (* desc="Substrate terminal current", units="A" *) real IS; (* desc="Avalanche current", units="A" *) real IAVL; (* desc="External BE voltage", units="V" *) real VBE; (* desc="External BC voltage", units="V" *) real VBC; (* desc="External CE voltage", units="V" *) real VCE; (* desc="External SC voltage", units="V" *) real VSC; (* desc="Common emitter forward current gain" *) real BETADC; (* desc="Internal transconductance", units="A/V" *) real GMi; (* desc="Transconductance of the parasitic substrate PNP", units="A/V" *) real GMS; (* desc="Internal base-emitter (input) resistance", units="Ohm" *) real RPIi; (* desc="External base-emitter (input) resistance", units="Ohm" *) real RPIx; (* desc="Internal feedback resistance", units="Ohm" *) real RMUi; (* desc="External feedback resistance", units="Ohm" *) real RMUx; (* desc="Output resistance", units="Ohm" *) real ROi; (* desc="Total internal BE capacitance", units="F" *) real CPIi; (* desc="Total external BE capacitance", units="F" *) real CPIx; (* desc="Total internal BC capacitance", units="F" *) real CMUi; (* desc="Total external BC capacitance", units="F" *) real CMUx; (* desc="CS junction capacitance", units="F" *) real CCS; (* desc="Small signal current gain" *) real BETAAC; (* desc="Shunt capacitance across RBI as calculated in the model", units="F" *) real CRBI; (* desc="Forward transit time", units="s" *) real TF; (* desc="Transit frequency", units="Hz" *) real FT; (* desc="Actual device temperature", units="K" *) real TK; (* desc="Temperature increase due to self-heating", units="K" *) real DTSH; `endif //end of variables analog begin `MODEL begin : Model_initialization Tnom = tnom+`P_CELSIUS0; Tamb = $temperature; vt0 = `P_K*Tnom /`P_Q; k10 = f1vg*Tnom*ln(Tnom); k20 = f2vg*Tnom; avs = alvs*Tnom; vgb_t0 = vgb+k10+k20; vge_t0 = vge+k10+k20; vgbe_t0 = (vgb_t0+vge_t0)/2; vgbe0 = (vgb+vge)/2; vgbc0 = (vgb+vgc)/2; vgsc0 = (vgs+vgc)/2; mg = 3-`P_Q*f1vg/`P_K; zetabci = mg+1-zetaci; zetabcxt= mg+1-zetacx; zetasct = mg-1.5; //Depletion capacitance splitting at b-c junction //Capacitances at peripheral and external base node C_1 = (1.0-fbcpar)*(cjcx0+cbcpar); if (C_1 >= cbcpar) begin cbcpar1 = cbcpar; cbcpar2 = 0.0; cjcx01 = C_1-cbcpar; cjcx02 = cjcx0-cjcx01; end else begin cbcpar1 = C_1; cbcpar2 = cbcpar-cbcpar1; cjcx01 = 0.0; cjcx02 = cjcx0; end //Parasitic b-e capacitance partitioning: No temperature dependence cbepar2 = fbepar*cbepar; cbepar1 = cbepar-cbepar2; //Avoid divide-by-zero and define infinity other way //High current correction for 2D and 3D effects if (ich != 0.0) begin Oich = 1.0/ich; end else begin Oich = 0.0; end //Base current recombination time constant at b-c barrier if (tbhrec != 0.0) begin Otbhrec = 1.0/tbhrec; end else begin Otbhrec = 0.0; end // Turn avalanche calculation on depending of parameters if ((favl > 0.0) && (cjci0 > 0.0)) begin use_aval = 1; end else begin use_aval = 0; iavl = 0.0; // Set iavl to zero in this case here, this avoids the else block later end // Temperature and resulting parameter drift if (flsh==0 || rth < `MIN_R) begin : Thermal_updat_without_self_heating Tdev = Tamb+dt; if(Tdev < `TMIN + 273.15) begin Tdev = `TMIN + 273.15; end else begin if (Tdev > `TMAX + 273.15) begin Tdev = `TMAX + 273.15; end end VT = `P_K*Tdev /`P_Q; dT = Tdev-Tnom; qtt0 = Tdev/Tnom; ln_qtt0 = ln(qtt0); k1 = f1vg*Tdev*ln(Tdev); k2 = f2vg*Tdev; vgb_t = vgb+k1+k2; vge_t = vge+k1+k2; vgbe_t = (vgb_t+vge_t)/2; //Internal b-e junction capacitance `TMPHICJ(cjei0,vdei,zei,ajei,1,vgbe0,cjei0_t,vdei_t,ajei_t) if (flcomp == 0.0 || flcomp == 2.1) begin V_gT = 3.0*VT*ln_qtt0 + vgb*(qtt0-1.0); r_VgVT = V_gT/VT; //Internal b-e diode saturation currents a = mcf*r_VgVT/mbei - alb*dT; ibeis_t = ibeis*exp(a); a = mcf*r_VgVT/mrei - alb*dT; ireis_t = ireis*exp(a); a = mcf*r_VgVT/mbep - alb*dT; //Peripheral b-e diode saturation currents ibeps_t = ibeps*exp(a); a = mcf*r_VgVT/mrep - alb*dT; ireps_t = ireps*exp(a); //Internal b-c diode saturation current a = r_VgVT/mbci; ibcis_t = ibcis*exp(a); //External b-c diode saturation currents a = r_VgVT/mbcx; ibcxs_t = ibcxs*exp(a); //Saturation transfer current for substrate transistor a = r_VgVT/msf; itss_t = itss*exp(a); //Saturation current for c-s diode a = r_VgVT/msc; iscs_t = iscs*exp(a); //Zero bias hole charge a = vdei_t/vdei; qp0_t = qp0*(1.0+0.5*zei*(1.0-a)); //Voltage separating ohmic and saturation velocity regime a = vlim*(1.0-alvs*dT)*exp(zetaci*ln_qtt0); k = (a-VT)/VT; if (k < `LN_EXP_LIMIT) begin vlim_t = VT + VT*ln(1.0+exp(k)); end else begin vlim_t = a; end //Neutral emitter storage time a = 1.0+alb*dT; k = 0.5*(a+sqrt(a*a+0.01)); tef0_t = tef0*qtt0/k; end else begin //Internal b-e diode saturation currents ibeis_t = ibeis*exp(zetabet*ln_qtt0+vge/VT*(qtt0-1)); if (flcomp>=2.3) begin ireis_t = ireis*exp(mg/mrei*ln_qtt0+vgbe0/(mrei*VT)*(qtt0-1)); end else begin ireis_t = ireis*exp(0.5*mg*ln_qtt0+0.5*vgbe0/VT*(qtt0-1)); end //Peripheral b-e diode saturation currents ibeps_t = ibeps*exp(zetabet*ln_qtt0+vge/VT*(qtt0-1)); if (flcomp>=2.3) begin ireps_t = ireps*exp(mg/mrep*ln_qtt0+vgbe0/(mrep*VT)*(qtt0-1)); end else begin ireps_t = ireps*exp(0.5*mg*ln_qtt0+0.5*vgbe0/VT*(qtt0-1)); end //Internal b-c diode saturation currents ibcis_t = ibcis*exp(zetabci*ln_qtt0+vgc/VT*(qtt0-1)); //External b-c diode saturation currents ibcxs_t = ibcxs*exp(zetabcxt*ln_qtt0+vgc/VT*(qtt0-1)); //Saturation transfer current for substrate transistor itss_t = itss*exp(zetasct*ln_qtt0+vgc/VT*(qtt0-1)); //Saturation current for c-s diode iscs_t = iscs*exp(zetasct*ln_qtt0+vgs/VT*(qtt0-1)); //Zero bias hole charge a = exp(zei*ln(vdei_t/vdei)); qp0_t = qp0*(2.0-a); //Voltage separating ohmic and saturation velocity regime vlim_t = vlim*exp((zetaci-avs)*ln_qtt0); //Neutral emitter storage time if (flcomp >= 2.3) begin tef0_t = tef0; end else begin zetatef = zetabet-zetact-0.5; dvg0 = vgb-vge; tef0_t = tef0*exp(zetatef*ln_qtt0-dvg0/VT*(qtt0-1)); end end //GICCR prefactor c10_t = c10*exp(zetact*ln_qtt0+vgb/VT*(qtt0-1)); // Low-field internal collector resistance rci0_t = rci0*exp(zetaci*ln_qtt0); //Voltage separating ohmic and saturation velocity regime //vlim_t = vlim*exp((zetaci-avs)*ln_qtt0); //Internal c-e saturation voltage vces_t = vces*(1+alces*dT); //Internal b-c diode saturation current //ibcis_t = ibcis*exp(zetabci*ln_qtt0+vgc/VT*(qtt0-1)); //Internal b-c junction capacitance `TMPHICJ(cjci0,vdci,zci,vptci,0,vgbc0,cjci0_t,vdci_t,vptci_t) //Low-current forward transit time t0_t = t0*(1+alt0*dT+kt0*dT*dT); //Saturation time constant at high current densities thcs_t = thcs*exp((zetaci-1)*ln_qtt0); //Avalanche current factors favl_t = favl*exp(alfav*dT); qavl_t = qavl*exp(alqav*dT); kavl_t = kavl*exp(alkav*dT); //Zero bias internal base resistance rbi0_t = rbi0*exp(zetarbi*ln_qtt0); //Peripheral b-e junction capacitance `TMPHICJ(cjep0,vdep,zep,ajep,1,vgbe0,cjep0_t,vdep_t,ajep_t) //Tunneling current factors if (ibets > 0) begin : HICTUN_T ab = 1.0; aa = 1.0; a_eg=vgbe_t0/vgbe_t; if(tunode==1 && cjep0 > 0.0 && vdep >0.0) begin ab = (cjep0_t/cjep0)*sqrt(a_eg)*vdep_t*vdep_t/(vdep*vdep); aa = (vdep/vdep_t)*(cjep0/cjep0_t)*pow(a_eg,-1.5); end else if (tunode==0 && cjei0 > 0.0 && vdei >0.0) begin ab = (cjei0_t/cjei0)*sqrt(a_eg)*vdei_t*vdei_t/(vdei*vdei); aa = (vdei/vdei_t)*(cjei0/cjei0_t)*pow(a_eg,-1.5); end ibets_t = ibets*ab; abet_t = abet*aa; end else begin ibets_t = 0; abet_t = 1; end //Temperature mapping for tunneling current is done inside HICTUN `TMPHICJ(1.0,vdcx,zcx,vptcx,0,vgbc0,cratio_t,vdcx_t,vptcx_t) cjcx01_t=cratio_t*cjcx01; cjcx02_t=cratio_t*cjcx02; //External b-c diode saturation currents //ibcxs_t = ibcxs*exp(zetabcxt*ln_qtt0+vgc/VT*(qtt0-1)); //Constant external series resistances rcx_t = rcx*exp(zetarcx*ln_qtt0); rbx_t = rbx*exp(zetarbx*ln_qtt0); re_t = re*exp(zetare*ln_qtt0); //Forward transit time in substrate transistor tsf_t = tsf*exp((zetacx-1.0)*ln_qtt0); //Capacitance for c-s junction `TMPHICJ(cjs0,vds,zs,vpts,0,vgsc0,cjs0_t,vds_t,vpts_t) /*Peripheral s-c capacitance * Note, thermal update only required for vds > 0 * Save computional effort otherwise */ if (vdsp > 0) begin `TMPHICJ(cscp0,vdsp,zsp,vptsp,0,vgsc0,cscp0_t,vdsp_t,vptsp_t) end else begin // Avoid uninitialized variables cscp0_t = cscp0; vdsp_t = vdsp; vptsp_t = vptsp; end ahjei_t = ahjei*exp(zetahjei*ln_qtt0); hjei0_t = hjei*exp(dvgbe/VT*(exp(zetavgbe*ln(qtt0))-1)); hf0_t = hf0*exp(dvgbe/VT*(qtt0-1)); if (flcomp >= 2.3) begin hfe_t = hfe*exp((vgb-vge)/VT*(qtt0-1)); hfc_t = hfc*exp((vgb-vgc)/VT*(qtt0-1)); end else begin hfe_t = hfe; hfc_t = hfc; end rth_t = rth*exp(zetarth*ln_qtt0)*(1+alrth*dT); end // of Thermal_update_without_self_heating end //of Model_initialization Vbiei = type*V(br_biei); Vbici = type*V(br_bici); Vciei = Vbiei-Vbici; Vbpei = type*V(br_bpei); Vbpci = type*V(br_bpci); Vbci = type*V(br_bci); Vsici = type*V(br_sici); Vsc = type*V(br_sc); if (flsh!=0 && rth >= `MIN_R) begin : Thermal_update_with_self_heating Tdev = Tamb+dt+V(br_sht); // Limit temperature to avoid FPEs in equations if(Tdev < `TMIN + 273.15) begin Tdev = `TMIN + 273.15; end else begin if (Tdev > `TMAX + 273.15) begin Tdev = `TMAX + 273.15; end end VT = `P_K*Tdev /`P_Q; dT = Tdev-Tnom; qtt0 = Tdev/Tnom; ln_qtt0 = ln(qtt0); k1 = f1vg*Tdev*ln(Tdev); k2 = f2vg*Tdev; vgb_t = vgb+k1+k2; vge_t = vge+k1+k2; vgbe_t = (vgb_t+vge_t)/2; //Internal b-e junction capacitance `TMPHICJ(cjei0,vdei,zei,ajei,1,vgbe0,cjei0_t,vdei_t,ajei_t) if (flcomp == 0.0 || flcomp == 2.1) begin V_gT = 3.0*VT*ln_qtt0 + vgb*(qtt0-1.0); r_VgVT = V_gT/VT; //Internal b-e diode saturation currents a = mcf*r_VgVT/mbei - alb*dT; ibeis_t = ibeis*exp(a); a = mcf*r_VgVT/mrei - alb*dT; ireis_t = ireis*exp(a); a = mcf*r_VgVT/mbep - alb*dT; //Peripheral b-e diode saturation currents ibeps_t = ibeps*exp(a); a = mcf*r_VgVT/mrep - alb*dT; ireps_t = ireps*exp(a); //Internal b-c diode saturation current a = r_VgVT/mbci; ibcis_t = ibcis*exp(a); //External b-c diode saturation currents a = r_VgVT/mbcx; ibcxs_t = ibcxs*exp(a); //Saturation transfer current for substrate transistor a = r_VgVT/msf; itss_t = itss*exp(a); //Saturation current for c-s diode a = r_VgVT/msc; iscs_t = iscs*exp(a); //Zero bias hole charge a = vdei_t/vdei; qp0_t = qp0*(1.0+0.5*zei*(1.0-a)); //Voltage separating ohmic and saturation velocity regime a = vlim*(1.0-alvs*dT)*exp(zetaci*ln_qtt0); k = (a-VT)/VT; if (k < `LN_EXP_LIMIT) begin vlim_t = VT + VT*ln(1.0+exp(k)); end else begin vlim_t = a; end //Neutral emitter storage time a = 1.0+alb*dT; k = 0.5*(a+sqrt(a*a+0.01)); tef0_t = tef0*qtt0/k; end else begin //Internal b-e diode saturation currents ibeis_t = ibeis*exp(zetabet*ln_qtt0+vge/VT*(qtt0-1)); if (flcomp>=2.3) begin ireis_t = ireis*exp(mg/mrei*ln_qtt0+vgbe0/(mrei*VT)*(qtt0-1)); end else begin ireis_t = ireis*exp(0.5*mg*ln_qtt0+0.5*vgbe0/VT*(qtt0-1)); end //Peripheral b-e diode saturation currents ibeps_t = ibeps*exp(zetabet*ln_qtt0+vge/VT*(qtt0-1)); if (flcomp>=2.3) begin ireps_t = ireps*exp(mg/mrep*ln_qtt0+vgbe0/(mrep*VT)*(qtt0-1)); end else begin ireps_t = ireps*exp(0.5*mg*ln_qtt0+0.5*vgbe0/VT*(qtt0-1)); end //Internal b-c diode saturation currents ibcis_t = ibcis*exp(zetabci*ln_qtt0+vgc/VT*(qtt0-1)); //External b-c diode saturation currents ibcxs_t = ibcxs*exp(zetabcxt*ln_qtt0+vgc/VT*(qtt0-1)); //Saturation transfer current for substrate transistor itss_t = itss*exp(zetasct*ln_qtt0+vgc/VT*(qtt0-1)); //Saturation current for c-s diode iscs_t = iscs*exp(zetasct*ln_qtt0+vgs/VT*(qtt0-1)); //Zero bias hole charge a = exp(zei*ln(vdei_t/vdei)); qp0_t = qp0*(2.0-a); //Voltage separating ohmic and saturation velocity regime vlim_t = vlim*exp((zetaci-avs)*ln_qtt0); //Neutral emitter storage time if (flcomp >= 2.3) begin tef0_t = tef0; end else begin zetatef = zetabet-zetact-0.5; dvg0 = vgb-vge; tef0_t = tef0*exp(zetatef*ln_qtt0-dvg0/VT*(qtt0-1)); end end //GICCR prefactor c10_t = c10*exp(zetact*ln_qtt0+vgb/VT*(qtt0-1)); // Low-field internal collector resistance rci0_t = rci0*exp(zetaci*ln_qtt0); //Voltage separating ohmic and saturation velocity regime //vlim_t = vlim*exp((zetaci-avs)*ln_qtt0); //Internal c-e saturation voltage vces_t = vces*(1+alces*dT); //Internal b-c diode saturation current //ibcis_t = ibcis*exp(zetabci*ln_qtt0+vgc/VT*(qtt0-1)); //Internal b-c junction capacitance `TMPHICJ(cjci0,vdci,zci,vptci,0,vgbc0,cjci0_t,vdci_t,vptci_t) //Low-current forward transit time t0_t = t0*(1+alt0*dT+kt0*dT*dT); //Saturation time constant at high current densities thcs_t = thcs*exp((zetaci-1)*ln_qtt0); //Avalanche current factors favl_t = favl*exp(alfav*dT); qavl_t = qavl*exp(alqav*dT); kavl_t = kavl*exp(alkav*dT); //Zero bias internal base resistance rbi0_t = rbi0*exp(zetarbi*ln_qtt0); //Peripheral b-e junction capacitance `TMPHICJ(cjep0,vdep,zep,ajep,1,vgbe0,cjep0_t,vdep_t,ajep_t) //Tunneling current factors if (ibets > 0 && (Vbpei < 0.0 || Vbiei < 0.0)) begin : HICTUN_T ab = 1.0; aa = 1.0; a_eg=vgbe_t0/vgbe_t; if(tunode==1 && cjep0 > 0.0 && vdep >0.0) begin ab = (cjep0_t/cjep0)*sqrt(a_eg)*vdep_t*vdep_t/(vdep*vdep); aa = (vdep/vdep_t)*(cjep0/cjep0_t)*pow(a_eg,-1.5); end else if (tunode==0 && cjei0 > 0.0 && vdei >0.0) begin ab = (cjei0_t/cjei0)*sqrt(a_eg)*vdei_t*vdei_t/(vdei*vdei); aa = (vdei/vdei_t)*(cjei0/cjei0_t)*pow(a_eg,-1.5); end ibets_t = ibets*ab; abet_t = abet*aa; end else begin ibets_t = 0; abet_t = 1; end //Temperature mapping for tunneling current is done inside HICTUN `TMPHICJ(1.0,vdcx,zcx,vptcx,0,vgbc0,cratio_t,vdcx_t,vptcx_t) cjcx01_t=cratio_t*cjcx01; cjcx02_t=cratio_t*cjcx02; //External b-c diode saturation currents //ibcxs_t = ibcxs*exp(zetabcxt*ln_qtt0+vgc/VT*(qtt0-1)); //Constant external series resistances rcx_t = rcx*exp(zetarcx*ln_qtt0); rbx_t = rbx*exp(zetarbx*ln_qtt0); re_t = re*exp(zetare*ln_qtt0); //Forward transit time in substrate transistor tsf_t = tsf*exp((zetacx-1.0)*ln_qtt0); //Capacitance for c-s junction `TMPHICJ(cjs0,vds,zs,vpts,0,vgsc0,cjs0_t,vds_t,vpts_t) /*Peripheral s-c capacitance * Note, thermal update only required for vds > 0 * Save computional effort otherwise */ if (vdsp > 0) begin `TMPHICJ(cscp0,vdsp,zsp,vptsp,0,vgsc0,cscp0_t,vdsp_t,vptsp_t) end else begin // Avoid uninitialized variables cscp0_t = cscp0; vdsp_t = vdsp; vptsp_t = vptsp; end ahjei_t = ahjei*exp(zetahjei*ln_qtt0); hjei0_t = hjei*exp(dvgbe/VT*(exp(zetavgbe*ln(qtt0))-1)); hf0_t = hf0*exp(dvgbe/VT*(qtt0-1)); if (flcomp >= 2.3) begin hfe_t = hfe*exp((vgb-vge)/VT*(qtt0-1)); hfc_t = hfc*exp((vgb-vgc)/VT*(qtt0-1)); end else begin hfe_t = hfe; hfc_t = hfc; end rth_t = rth*exp(zetarth*ln_qtt0)*(1+alrth*dT); end //of Thermal_update_with_self_heating begin : Model_evaluation //Intrinsic transistor //Internal base currents across b-e junction `HICDIO(ibeis,ibeis_t,mbei,Vbiei,ibei) `HICDIO(ireis,ireis_t,mrei,Vbiei,irei) //HICCR: begin //Inverse of low-field internal collector resistance: needed in HICICK Orci0_t = 1.0/rci0_t; //Initialization //Transfer current, minority charges and transit times Tr = tr; VT_f = mcf*VT; i_0f = c10_t * limexp(Vbiei/VT_f); i_0r = c10_t * limexp(Vbici/VT); //Internal b-e and b-c junction capacitances and charges //`QJMODF(cjei0_t,vdei_t,zei,ajei_t,V(br_biei),Qjei) //Cjei = ddx(Qjei,V(bi)); `QJMODF(cjei0_t,vdei_t,zei,ajei_t,Vbiei,Cjei,Qjei) if (ahjei == 0.0) begin hjei_vbe = hjei; end else begin //vendhjei = vdei_t*(1.0-exp(-ln(ajei_t)/z_h)); vj = (vdei_t-Vbiei)/(rhjei*VT); vj = vdei_t-rhjei*VT*(vj+sqrt(vj*vj+`DFa_fj))*0.5; vj = (vj-VT)/VT; vj = VT*(1.0+(vj+sqrt(vj*vj+`DFa_fj))*0.5); vj_z = (1.0-exp(zei*ln(1.0-vj/vdei_t)))*ahjei_t; hjei_vbe = hjei0_t*(exp(vj_z)-1.0)/vj_z; end //`HICJQ(cjci0_t,vdci_t,zci,vptci_t,V(br_bici),Qjci) //Cjci = ddx(Qjci,V(bi)); `HICJQ(cjci0_t,vdci_t,zci,vptci_t,Vbici,Cjci,Qjci) //Hole charge at low bias a_bpt = 0.05; Q_0 = qp0_t + hjei_vbe*Qjei + hjci*Qjci; Q_bpt = a_bpt*qp0_t; b_q = Q_0/Q_bpt-1; Q_0 = Q_bpt*(1+(b_q +sqrt(b_q*b_q+1.921812))/2); //Transit time calculation at low current density if(cjci0_t > 0.0) begin : CJMODF cV_f = vdci_t*(1.0-exp(-ln(2.4)/zci)); cv_e = (cV_f-Vbici)/VT; cs_q = sqrt(cv_e*cv_e+1.921812); cs_q2 = (cv_e+cs_q)*0.5; cv_j = cV_f-VT*cs_q2; cdvj_dv = cs_q2/cs_q; Cjcit = cjci0_t*exp(-zci*ln(1.0-cv_j/vdci_t))*cdvj_dv+2.4*cjci0_t*(1.0-cdvj_dv); end else begin Cjcit = 0.0; end if(Cjcit > 0.0) begin cc = cjci0_t/Cjcit; end else begin cc = 1.0; end T_f0 = t0_t+dt0h*(cc-1.0)+tbvl*(1/cc-1.0); //Effective collector voltage vc = Vciei-vces_t; //Critical current for onset of high-current effects begin : HICICK Ovpt = 1.0/vpt; a = vc/VT; d1 = a-1; vceff = (1.0+((d1+sqrt(d1*d1+1.921812))/2))*VT; // a = vceff/vlim_t; // ick = vceff*Orci0_t/sqrt(1.0+a*a); // ICKa = (vceff-vlim_t)*Ovpt; // ick = ick*(1.0+0.5*(ICKa+sqrt(ICKa*ICKa+1.0e-3))); a1 = vceff/vlim_t; a11 = vceff*Orci0_t; Odelck = 1/delck; ick1 = exp(Odelck*ln(1+exp(delck*ln(a1)))); ick2 = a11/ick1; ICKa = (vceff-vlim_t)*Ovpt; ick = ick2*(1.0+0.5*(ICKa+sqrt(ICKa*ICKa+aick))); end //Initial formulation of forward and reverse component of transfer current Q_p = Q_0; if (T_f0 > 0.0 || Tr > 0.0) begin A = 0.5*Q_0; Q_p = A+sqrt(A*A+T_f0*i_0f+Tr*i_0r); end I_Tf1 =i_0f/Q_p; a_h = Oich*I_Tf1; itf = I_Tf1*(1.0+a_h); itr = i_0r/Q_p; //Initial formulation of forward transit time, diffusion, GICCR and excess b-c charge Q_bf = 0.0; Tf = T_f0; Qf = T_f0*itf; `HICQFF(itf,ick,Tf,Qf,T_fT,Q_fT,Q_bf) //Initial formulation of reverse diffusion charge Qr = Tr*itr; //Preparation for iteration to get total hole charge and related variables l_it = 0; if(Qf > `RTOLC*Q_p || a_h > `RTOLC) begin //Iteration for Q_pT is required for improved initial solution Qf = sqrt(T_f0*itf*Q_fT); Q_pT = Q_0+Qf+Qr; d_Q = Q_pT; while (abs(d_Q) >= `RTOLC*abs(Q_pT) && l_it <= `l_itmax) begin d_Q0 = d_Q; I_Tf1 = i_0f/Q_pT; a_h = Oich*I_Tf1; itf = I_Tf1*(1.0+a_h); itr = i_0r/Q_pT; Tf = T_f0; Qf = T_f0*itf; `HICQFF(itf,ick,Tf,Qf,T_fT,Q_fT,Q_bf) Qr = Tr*itr; if(Oich == 0.0) begin a = 1.0+(T_fT*itf+Qr)/Q_pT; end else begin a = 1.0+(T_fT*I_Tf1*(1.0+2.0*a_h)+Qr)/Q_pT; end d_Q = -(Q_pT-(Q_0+Q_fT+Qr))/a; //Limit maximum change of Q_pT a = abs(0.3*Q_pT); if(abs(d_Q) > a) begin if (d_Q>=0) begin d_Q = a; end else begin d_Q = -a; end end Q_pT = Q_pT+d_Q; l_it = l_it+1; end //while I_Tf1 = i_0f/Q_pT; a_h = Oich*I_Tf1; itf = I_Tf1*(1.0+a_h); itr = i_0r/Q_pT; //Final transit times, charges and transport current components Tf = T_f0; Qf = T_f0*itf; `HICQFF(itf,ick,Tf,Qf,T_fT,Q_fT,Q_bf) Qr = Tr*itr; end //if //NQS effect implemented with LCR networks //Once the delay in ITF is considered, IT_NQS is calculated afterwards it = itf-itr; //Diffusion charges for further use Qdei = Qf; Qdci = Qr; //High-frequency emitter current crowding (lateral NQS) Cdei = T_f0*itf/VT; Cdci = tr*itr/VT; Crbi = fcrbi*(Cjei+Cjci+Cdei+Cdci); qrbi = Crbi*V(br_bpbi_v); // qrbi = fcrbi*(Qjei+Qjci+Qdei+Qdci); //HICCR: end //Internal base current across b-c junction `HICDIO(ibcis,ibcis_t,mbci,Vbici,ibci) //Avalanche current if (use_aval == 1) begin : HICAVL v_bord = vdci_t-Vbici; if (v_bord > 0) begin v_q = qavl_t/Cjci; U0 = qavl_t/cjci0_t; if(v_bord > U0) begin av = favl_t*exp(-v_q/U0); avl = av*(U0+(1.0+v_q/U0)*(v_bord-U0)); end else begin avl = favl_t*v_bord*exp(-v_q/v_bord); end /* This model turns strong avalanche on. The parameter kavl can turn this * model extension off (kavl = 0). Although this is numerically stable, a * conditional statement is applied in order to reduce the numerical over- * head for simulations without the new model. */ if (kavl > 0) begin : HICAVLHIGH denom = 1-kavl_t*avl; // Avoid denom < 0 using a smoothing function sq_smooth = sqrt(denom*denom+0.01); hl = 0.5*(denom+sq_smooth); iavl = itf*avl/hl; end else begin iavl = itf*avl; end end else begin iavl = 0.0; end end // Note that iavl = 0.0 is already set in the initialization block for use_aval == 0 //Excess base current from recombination at the b-c barrier ibh_rec = Q_bf*Otbhrec; //Internal base resistance if(rbi0_t > 0.0) begin : HICRBI // Consideration of conductivity modulation // To avoid convergence problem hyperbolic smoothing used f_QR = (1+fdqr0)*qp0_t; Qz0 = Qjei+Qjci+Qf; Qz_nom = 1+Qz0/f_QR; fQz = 0.5*(Qz_nom+sqrt(Qz_nom*Qz_nom+0.01)); rbi = rbi0_t/fQz; // Consideration of emitter current crowding if( ibei > 0.0) begin ETA = rbi*ibei*fgeo/VT; if(ETA < 1.0e-6) begin rbi = rbi*(1.0-0.5*ETA); end else begin rbi = rbi*ln(1.0+ETA)/ETA; end end // Consideration of peripheral charge if(Qf > 0.0) begin rbi = rbi*(Qjei+Qf*fqi)/(Qjei+Qf); end end else begin rbi = 0.0; end //Base currents across peripheral b-e junction `HICDIO(ibeps,ibeps_t,mbep,Vbpei,ibep) `HICDIO(ireps,ireps_t,mrep,Vbpei,irep) //Peripheral b-e junction capacitance and charge `QJMODF(cjep0_t,vdep_t,zep,ajep_t,Vbpei,Cjep,Qjep) //Tunneling current if (ibets > 0 && (Vbpei <0.0 || Vbiei < 0.0)) begin : HICTUN if(tunode==1 && cjep0_t > 0.0 && vdep_t >0.0) begin pocce = exp((1-1/zep)*ln(Cjep/cjep0_t)); czz = -(Vbpei/vdep_t)*ibets_t*pocce; ibet = czz*exp(-abet_t/pocce); end else if (tunode==0 && cjei0_t > 0.0 && vdei_t >0.0) begin pocce = exp((1-1/zei)*ln(Cjei/cjei0_t)); czz = -(Vbiei/vdei_t)*ibets_t*pocce; ibet = czz*exp(-abet_t/pocce); end else begin ibet = 0.0; end end else begin ibet = 0.0; end //Depletion capacitance and charge at peripheral b-c junction (bp,ci) `HICJQ(cjcx02_t,vdcx_t,zcx,vptcx_t,Vbpci,CjCx_ii,qjcx0_t_ii) //Base currents across peripheral b-c junction (bp,ci) `HICDIO(ibcxs,ibcxs_t,mbcx,Vbpci,ijbcx) //Depletion capacitance and charge at external b-c junction (b,ci) `HICJQ(cjcx01_t,vdcx_t,zcx,vptcx_t,Vbci,CjCx_i,qjcx0_t_i) //Depletion substrate capacitance and charge at s-c junction (si,ci) `HICJQ(cjs0_t,vds_t,zs,vpts_t,Vsici,Cjs,Qjs) /* Peripheral substrate capacitance and charge at s-c junction (s,c) * Bias dependent only if vdsp > 0 */ if (vdsp > 0) begin `HICJQ(cscp0_t,vdsp_t,zsp,vptsp_t,Vsc,Cscp,Qscp) end else begin // Constant, temperature independent capacitance Cscp = cscp0; Qscp = cscp0*Vsc; end //Parasitic substrate transistor transfer current and diffusion charge if(itss > 0.0) begin : Sub_Transfer HSUM = msf*VT; HSa = limexp(Vbpci/HSUM); HSb = limexp(Vsici/HSUM); HSI_Tsu = itss_t*(HSa-HSb); if(tsf > 0.0) begin Qdsu = tsf_t*itss_t*HSa; end else begin Qdsu = 0.0; end end else begin HSI_Tsu = 0.0; Qdsu = 0.0; end // Current gain computation for correlated noise implementation if (ibei > 0.0) begin betadc=it/ibei; end else begin betadc=0.0; end //Diode current for s-c junction (si,ci) `HICDIO(iscs,iscs_t,msc,Vsici,ijsc) //Self-heating calculation if (flsh == 1 && rth >= `MIN_R) begin pterm = Vciei*it + (vdci_t-Vbici)*iavl; end else if (flsh == 2 && rth >= `MIN_R) begin pterm = Vciei*it + (vdci_t-Vbici)*iavl + ibei*Vbiei + ibci*Vbici + ibep*Vbpei + ijbcx*Vbpci + ijsc*Vsici; if (rbi >= `MIN_R) begin pterm = pterm + V(br_bpbi_i)*V(br_bpbi_i)/rbi; end if (re_t >= `MIN_R) begin pterm = pterm + V(br_eie_i)*V(br_eie_i)/re_t; end if (rcx_t >= `MIN_R) begin pterm = pterm + V(br_cic_i)*V(br_cic_i)/rcx_t; end if (rbx_t >= `MIN_R) begin pterm = pterm + V(br_bbp_i)*V(br_bbp_i)/rbx_t; end end Itxf = itf; Qdeix = Qdei; // Excess Phase calculation if ((flnqs != 0 || flcomp == 0.0 || flcomp == 2.1) && Tf != 0 && (alit > 0 || alqf > 0)) begin Vxf1 = V(br_bxf1); Vxf2 = V(br_bxf2); Ixf1 = (Vxf2-itf)/Tf*t0; Ixf2 = (Vxf2-Vxf1)/Tf*t0; Qxf1 = alit*Vxf1*t0; Qxf2 = alit*Vxf2/3*t0; Itxf = Vxf2; Vxf = V(br_bxf); //for RC nw fact = t0/Tf; //for RC nw Ixf = (Vxf - Qdei)*fact; //for RC nw Qxf = alqf*Vxf*t0; //for RC nw Qdeix = Vxf; //for RC nw end else begin Ixf1 = V(br_bxf1); Ixf2 = V(br_bxf2); Qxf1 = 0; Qxf2 = 0; Ixf = V(br_bxf); Qxf = 0; end end //of Model_evaluation begin : Load_sources I(br_biei) <+ `Gmin*V(br_biei); I(br_bici) <+ `Gmin*V(br_bici); I(br_ciei) <+ `Gmin*V(br_ciei); I(br_bci) <+ ddt(type*qjcx0_t_i); I(br_bci) <+ ddt(cbcpar1*V(br_bci)); I(br_bpci) <+ ddt(cbcpar2*V(br_bpci)); if (rbx >= `MIN_R) begin I(br_bbp_i) <+ V(br_bbp_i)/rbx_t; end else begin V(br_bbp_v) <+ 0.0; end if(rbi0 >= `MIN_R) begin I(br_bpbi_i) <+ V(br_bpbi_i)/rbi; I(br_bpbi_i) <+ ddt(qrbi); end else begin V(br_bpbi_v) <+ 0.0; end if (tunode==1.0) begin I(br_bpei) <+ -type*ibet; end else begin I(br_biei) <+ -type*ibet; end I(br_bpei) <+ type*ibep; I(br_bpei) <+ type*irep; I(br_bpei) <+ ddt(type*Qjep); I(br_biei) <+ type*ibei; I(br_biei) <+ type*irei; I(br_biei) <+ type*ibh_rec; I(br_biei) <+ ddt(type*(Qdeix+Qjei)); I(br_bpsi) <+ type*HSI_Tsu; I(br_bpci) <+ type*ijbcx; I(br_bpci) <+ ddt(type*(qjcx0_t_ii+Qdsu)); I(br_be) <+ ddt(cbepar1*V(br_be)); I(br_bpe) <+ ddt(cbepar2*V(br_bpe)); I(br_bici) <+ type*(ibci-iavl); I(br_bici) <+ ddt(type*(Qdci+Qjci)); I(br_sici) <+ type*ijsc; I(br_sici) <+ ddt(type*Qjs); I(br_sc) <+ ddt(type*Qscp); I(br_ciei) <+ type*Itxf; I(br_eici) <+ type*itr; if (rcx >= `MIN_R) begin I(br_cic_i) <+ V(br_cic_i)/rcx_t; end else begin // V(br_cic_v) <+ 0.0; I(br_cic_i) <+ V(br_cic_i)/`MIN_R; end if (re >= `MIN_R) begin I(br_eie_i) <+ V(br_eie_i)/re_t; end else begin // V(br_eie_v) <+ 0.0; I(br_eie_i) <+ V(br_eie_i)/`MIN_R; end if(rsu >= `MIN_R) begin I(br_sis_i) <+ V(br_sis_i)/rsu; I(br_sis_i) <+ ddt(csu*V(br_sis_i)); end else begin // V(br_sis_v) <+ 0.0; I(br_sis_i) <+ V(br_sis_i)/`MIN_R; end // Following code is an intermediate solution (if branch contribution is not supported): // ****************************************** if(flsh == 0 || rth < `MIN_R) begin I(br_sht) <+ V(br_sht)/`MIN_R; end else begin I(br_sht) <+ V(br_sht)/rth_t-pterm; I(br_sht) <+ ddt(cth*V(br_sht)); end // ****************************************** // For simulators having no problem with V(br_sht) <+ 0.0 // with external thermal node, following code may be used. // Note that external thermal node should remain accessible // even without self-heating. // ******************************************** //if(flsh == 0 || rth < `MIN_R) begin // V(br_sht) <+ 0.0; //end else begin // I(br_sht) <+ V(br_sht)/rth_t-pterm; // I(br_sht) <+ ddt(cth*V(br_sht)); //end // ******************************************** // NQS effect I(br_bxf1) <+ Ixf1; I(br_cxf1) <+ ddt(Qxf1); I(br_bxf2) <+ Ixf2; I(br_cxf2) <+ ddt(Qxf2); I(br_bxf) <+ Ixf; //for RC nw I(br_cxf) <+ ddt(Qxf); //for RC nw end //of Load_sources `NOISE begin : Noise_sources //Thermal noise fourkt = 4.0 * `P_K * Tdev; if(rbx >= `MIN_R) begin I(br_bbp_i) <+ white_noise(fourkt/rbx_t, "rbx"); end if(rbi0 >= `MIN_R) begin I(br_bpbi_i) <+ white_noise(fourkt/rbi, "rbi"); end if(rcx >= `MIN_R) begin I(br_cic_i) <+ white_noise(fourkt/rcx_t, "rcx"); end if(re >= `MIN_R) begin I(br_eie_i) <+ white_noise(fourkt/re_t, "re"); end if(rsu >= `MIN_R) begin I(br_sis_i) <+ white_noise(fourkt/rsu, "rsu"); end //Flicker noise : Fully correlated between the perimeter and internal base-node flicker_Pwr = kf*pow(abs(ibei+ibep),af); if (cfbe == -1) begin I(br_biei) <+ flicker_noise(flicker_Pwr,1.0, "flicker"); end else begin I(br_bpei) <+ flicker_noise(flicker_Pwr,1.0, "flicker"); end if (re >= `MIN_R) begin i_re = V(br_eie_i)/re_t; flicker_Pwr = kfre*pow(abs(i_re),afre); I(br_eie_i) <+ flicker_noise(flicker_Pwr,1.0, "flicker_re"); end //Shot noise twoq = 2.0 * `P_Q; I(br_cibi) <+ white_noise(twoq*iavl, "iavl"); I(br_bici) <+ white_noise(twoq*abs(ibci), "ibci"); I(br_bpei) <+ white_noise(twoq*abs(ibep), "ibep"); I(br_bpci) <+ white_noise(twoq*abs(ijbcx), "ijbcx"); I(br_sici) <+ white_noise(twoq*abs(ijsc), "ijsc"); // Code section for correlated noise if ( flcono==1 && (alit > 0 && alqf > 0)) begin // parameter definition n_w = 1; n_1 = Tf*alit; sqrt_n2 = betadc*(2*alqf-alit*alit); if (sqrt_n2 > 0.0) begin n_2 = Tf*sqrt(sqrt_n2); end else begin n_2 = 0; end // realization of modified base shot noise source I1(bi,ei) I(b_n1) <+ white_noise(2*`P_Q*abs(ibei),"ibei"); I(b_n1) <+ -V(b_n1); I(bi,ei) <+ V(b_n1)+n_2/n_w*ddt(n_w*V(b_n1)); // realization of controlled base noise source I2(bi,ei) I(bi,ei) <+ n_1/n_w*ddt(n_w*V(b_n2)); // realization of modified collector shot noise source I(ci,ei) (uncontrolled) I(b_n2) <+ white_noise(2*`P_Q*abs(it),"it"); I(b_n2) <+ -V(b_n2); I(ci,ei) <+ V(b_n2); // end "Correlated noise in BJT" end else begin // Applying the base & collector shot noise sources to appropriate branches I(br_ciei) <+ white_noise(twoq*abs(it), "it"); I(br_biei) <+ white_noise(twoq*abs(ibei), "ibei"); I(b_n1) <+ V(b_n1); I(b_n2) <+ V(b_n2); end // end of flcono section end //of Noise_sources // Operating point calculations `ifdef CALC_OP `ifdef OP_STATIC if (analysis("static")) begin: OPERATING_POINT `else begin: OPERATING_POINT `endif real gPIi, gPIx, gBt; real gMUi, gMUx, gAVL; real gOi; real CdEi_ddx, CdCi_ddx, CdS_ddx; IB = I(); IC = I(); IS = I(); IAVL = type*iavl; VBE = V(b,e); VBC = V(b,c); VCE = V(c,e); VSC = V(s,c); if (IB != 0) begin BETADC = IC/IB; end else begin BETADC = 0; end GMi = type*ddx(it,V(bi))+`Gmin; GMS = -type*ddx(HSI_Tsu,V(ci))+`Gmin; gPIi = type*ddx(ibei,V(bi))+type*ddx(irei,V(bi))+`Gmin; gPIx = type*ddx(ibep,V(bp))+type*ddx(irep,V(bp))+`Gmin; if (tunode == 1) begin gBt = type*ddx(ibet,V(bp)); RPIi = 1.0/gPIi; RPIx = 1.0/(gPIx-gBt); end else begin gBt = type*ddx(ibet,V(bi)); RPIi = 1.0/(gPIi-gBt); RPIx = 1.0/gPIx; end gMUi = -type*ddx(ibci, V(ci))+`Gmin; gMUx = -type*ddx(ijbcx,V(ci))+`Gmin; gAVL = type*ddx(iavl, V(ci))+`Gmin; RMUi = 1/(gMUi-gAVL); RMUx = 1/gMUx; gOi = type*ddx(it,V(ci)); ROi = 1/(gOi+gAVL); CdEi_ddx = -type*ddx(Qdei,V(ei)); CdCi_ddx = -type*ddx(Qdci,V(ci)); CPIi = Cjei+CdEi_ddx; CPIx = Cjep+cbepar; CdS_ddx = -type*ddx(Qdsu,V(ci)); CMUi = Cjci+CdCi_ddx; CMUx = CjCx_i+CjCx_ii+cbcpar+CdS_ddx; CCS = Cjs+Cscp; rb = rbi+rbx_t; if (gPIi+gPIx > 0.0) begin BETAAC = GMi/(gPIi+gPIx); end else begin BETAAC = 0.0; end CRBI = Crbi; TF = Tf; FT = GMi/(2*`M_PI*(CPIi+CPIx+CMUi+CMUx+(rcx_t+re_t+(re_t+rb)/BETAAC)*GMi*(CMUi+CMUx))); TK = Tdev; DTSH = V(br_sht); end `endif end //analog endmodule tmpk8ny_4pz/src/spicelib/devices/res/0000755000175000017500000000000013546075722017754 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/res/resnoise.c0000644000175000017500000001723513546075722021757 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Gary W. Ng Modified: Apr 2000 - Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "resdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" /* * RESnoise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with resistors. It starts with the model *firstModel * and traverses all of its instances. It then proceeds to any other * models on the linked list. The total output noise density * generated by all the resistors is summed in the variable "OnDens". * * Paolo Nenzi 2003: * Added flicker noise (Kf-Af) calculation to simulate * carbon resistors. * * Added "noisy" switch to simulate noiseless resistors. */ int RESnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; RESmodel *firstModel = (RESmodel *) genmodel; RESmodel *model; RESinstance *inst; double tempOutNoise; double tempInNoise; double noizDens[RESNSRCS]; double lnNdens[RESNSRCS]; int i; /* define the names of the noise sources */ static char *RESnNames[RESNSRCS] = { /* Note that we have to keep the order consistent with the * strchr definitions in RESdefs.h */ "_thermal", /* Thermal noise */ "_1overf", /* flicker (1/f) noise */ "" /* total resistor noise */ }; for (model = firstModel; model != NULL; model = RESnextModel(model)) { for (inst = RESinstances(model); inst != NULL; inst = RESnextInstance(inst)) { if(!inst->RESnoisy) continue; /* Quiet resistors are skipped */ switch (operation) { case N_OPEN: /* * See if we have to to produce a summary report * if so, name the noise generator */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i=0; i < RESNSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_%s%s", inst->RESname, RESnNames[i]); } break; case INT_NOIZ: for (i=0; i < RESNSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total_%s%s", inst->RESname, RESnNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total_%s%s", inst->RESname, RESnNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: NevalSrcInstanceTemp(&noizDens[RESTHNOIZ],&lnNdens[RESTHNOIZ], ckt,THERMNOISE, inst->RESposNode,inst->RESnegNode, inst->RESconduct, inst->RESdtemp); NevalSrcInstanceTemp(&noizDens[RESFLNOIZ], NULL, ckt, N_GAIN,inst->RESposNode, inst->RESnegNode, (double)0.0, (double)0.0); #if 0 printf("DC current in resistor %s: %e\n",inst->RESname, inst->REScurrent); #endif noizDens[RESFLNOIZ] *= inst->RESm * model->RESfNcoef * pow(fabs(inst->REScurrent / inst->RESm), model->RESfNexp) / (inst->RESeffNoiseArea * pow(data->freq, model->RESef)); lnNdens[RESFLNOIZ] = log(MAX(noizDens[RESFLNOIZ],N_MINLOG)); noizDens[RESTOTNOIZ] = noizDens[RESTHNOIZ] + noizDens[RESFLNOIZ]; lnNdens[RESTOTNOIZ] = log(noizDens[RESTOTNOIZ]); *OnDens += noizDens[RESTOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to */ /* initialize our "history" variables */ for (i=0; i < RESNSRCS; i++) { inst->RESnVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variable if it's the first pass */ if (data->freq == job->NstartFreq) { for (i=0; i < RESNSRCS; i++) { inst->RESnVar[OUTNOIZ][i] = 0.0; /* Clear output noise */ inst->RESnVar[INNOIZ][i] = 0.0; /* Clear input noise */ } } } else { /* data->delFreq != 0.0 (we have to integrate) */ /* In order to get the best curve fit, we have to integrate each component separately */ for (i = 0; i < RESNSRCS; i++) { if (i != RESTOTNOIZ) { tempOutNoise = Nintegrate(noizDens[i], lnNdens[i], inst->RESnVar[LNLSTDENS][i], data); tempInNoise = Nintegrate(noizDens[i] * data->GainSqInv ,lnNdens[i] + data->lnGainInv, inst->RESnVar[LNLSTDENS][i] + data->lnGainInv, data); inst->RESnVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOutNoise; data->inNoise += tempInNoise; if (job->NStpsSm != 0) { inst->RESnVar[OUTNOIZ][i] += tempOutNoise; inst->RESnVar[OUTNOIZ][RESTOTNOIZ] += tempOutNoise; inst->RESnVar[INNOIZ][i] += tempInNoise; inst->RESnVar[INNOIZ][RESTOTNOIZ] += tempInNoise; } } } } if (data->prtSummary) { for (i=0; i < RESNSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i=0; i < RESNSRCS; i++) { data->outpVector[data->outNumber++] = inst->RESnVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = inst->RESnVar[INNOIZ][i]; } } /* if */ break; } /* switch (mode) */ break; case N_CLOSE: return (OK); /* do nothing, the main calling routine will close */ break; /* the plots */ } /* switch (operation) */ } /* for inst */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/res/ressacl.c0000644000175000017500000000356013546075722021560 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Apr 2000 - Paolo Nenzi This function is obsolete (was used by an old sensitivity analysis) **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "resdefs.h" #include "ngspice/sperror.h" int RESsAcLoad(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current ac sensitivity info into the * array previously provided */ { RESmodel *model = (RESmodel *)inModel; RESinstance *here; double value; double ivalue; /* loop through all the resistor models */ for( ; model != NULL; model = RESnextModel(model)) { /* loop through all the instances of the model */ for (here = RESinstances(model); here != NULL ; here=RESnextInstance(here)) { if(here->RESsenParmNo){ value = *(ckt->CKTrhsOld+here->RESposNode) - *(ckt->CKTrhsOld+here->RESnegNode); ivalue = *(ckt->CKTirhsOld+here->RESposNode) - *(ckt->CKTirhsOld+here->RESnegNode); value *= here->RESacConduct; value *= here->RESacConduct; ivalue *= here->RESacConduct; ivalue *= here->RESacConduct; /* load the RHS matrix */ *(ckt->CKTsenInfo->SEN_RHS[here->RESposNode] + here->RESsenParmNo) += value; *(ckt->CKTsenInfo->SEN_iRHS[here->RESposNode] + here->RESsenParmNo) += ivalue; *(ckt->CKTsenInfo->SEN_RHS[here->RESnegNode] + here->RESsenParmNo) -= value; *(ckt->CKTsenInfo->SEN_iRHS[here->RESnegNode] + here->RESsenParmNo) -= ivalue; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/res/ressoachk.c0000644000175000017500000000227513546075722022110 0ustar carstencarsten/********** Copyright 2013 Dietmar Warning. All rights reserved. Author: 2013 Dietmar Warning **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "resdefs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/cpdefs.h" int RESsoaCheck(CKTcircuit *ckt, GENmodel *inModel) { RESmodel *model = (RESmodel *) inModel; RESinstance *here; double vr; /* current resistor voltage */ int maxwarns; static int warns_bv = 0; if (!ckt) { warns_bv = 0; return OK; } maxwarns = ckt->CKTsoaMaxWarns; for (; model; model = RESnextModel(model)) { for (here = RESinstances(model); here; here = RESnextInstance(here)) { vr = fabs(ckt->CKTrhsOld [here->RESposNode] - ckt->CKTrhsOld [here->RESnegNode]); if (vr > here->RESbv_max) if (warns_bv < maxwarns) { soa_printf(ckt, (GENinstance*) here, "|Vr|=%g has exceeded Bv_max=%g\n", vr, here->RESbv_max); warns_bv++; } } } return OK; } tmpk8ny_4pz/src/spicelib/devices/res/Makefile.am0000644000175000017500000000074713546075722022020 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libres.la libres_la_SOURCES = \ res.c \ resask.c \ resdefs.h \ resext.h \ resinit.c \ resinit.h \ resitf.h \ resload.c \ resmask.c \ resmpar.c \ resnoise.c \ resparam.c \ respzld.c \ ressacl.c \ ressetup.c \ ressoachk.c \ ressload.c \ ressprt.c \ ressset.c \ restemp.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/res/respzld.c0000644000175000017500000000227213546075722021606 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Apr 2000 - Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "resdefs.h" int RESpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) /* actually load the current resistance value into the * sparse matrix previously provided */ { RESmodel *model = (RESmodel *)inModel; RESinstance *here; double g; NG_IGNORE(s); NG_IGNORE(ckt); /* loop through all the resistor models */ for( ; model != NULL; model = RESnextModel(model)) { /* loop through all the instances of the model */ for (here = RESinstances(model); here != NULL ; here=RESnextInstance(here)) { if (here->RESacresGiven) g = here->RESacConduct; else g = here->RESconduct; *(here->RESposPosPtr) += g; *(here->RESnegNegPtr) += g; *(here->RESposNegPtr) -= g; *(here->RESnegPosPtr) -= g; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/res/resload.c0000644000175000017500000000374613546075722021563 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Apr 2000 - Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "resdefs.h" #include "ngspice/sperror.h" /* actually load the current resistance value into the sparse matrix * previously provided */ int RESload(GENmodel *inModel, CKTcircuit *ckt) { RESmodel *model = (RESmodel *)inModel; /* loop through all the resistor models */ for( ; model != NULL; model = RESnextModel(model)) { RESinstance *here; /* loop through all the instances of the model */ for (here = RESinstances(model); here != NULL ; here = RESnextInstance(here)) { here->REScurrent = (*(ckt->CKTrhsOld+here->RESposNode) - *(ckt->CKTrhsOld+here->RESnegNode)) * here->RESconduct; *(here->RESposPosPtr) += here->RESconduct; *(here->RESnegNegPtr) += here->RESconduct; *(here->RESposNegPtr) -= here->RESconduct; *(here->RESnegPosPtr) -= here->RESconduct; } } return(OK); } /* actually load the current resistance value into the sparse matrix * previously provided */ int RESacload(GENmodel *inModel, CKTcircuit *ckt) { RESmodel *model = (RESmodel *)inModel; double g; NG_IGNORE(ckt); /* loop through all the resistor models */ for( ; model != NULL; model = RESnextModel(model)) { RESinstance *here; /* loop through all the instances of the model */ for (here = RESinstances(model); here != NULL ; here = RESnextInstance(here)) { if (here->RESacresGiven) g = here->RESacConduct; else g = here->RESconduct; *(here->RESposPosPtr) += g; *(here->RESnegNegPtr) += g; *(here->RESposNegPtr) -= g; *(here->RESnegPosPtr) -= g; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/res/resdefs.h0000644000175000017500000001733013546075722021564 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #ifndef RES #define RES #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" /* definitions used to describe resistors */ /* indices to array of RES noise sources */ enum { RESTHNOIZ = 0, /* Thermal noise source */ RESFLNOIZ, /* Flicker noise source */ RESTOTNOIZ, /* Total noise */ /* finally, the number of noise sources */ RESNSRCS }; /* information used to describe a single instance */ typedef struct sRESinstance { struct GENinstance gen; #define RESmodPtr(inst) ((struct sRESmodel *)((inst)->gen.GENmodPtr)) #define RESnextInstance(inst) ((struct sRESinstance *)((inst)->gen.GENnextInstance)) #define RESname gen.GENname #define RESstate gen.GENstate const int RESposNode; /* number of positive node of resistor */ const int RESnegNode; /* number of negative node of resistor */ double REStemp; /* temperature at which this resistor operates */ double RESdtemp; /* delta-temperature of a particular instance */ double RESconduct; /* conductance at current analysis temperature */ double RESresist; /* resistance at temperature Tnom */ double REScurrent; /* The dc current in the resistor */ /* serban */ double RESacResist; /* AC resistance, useful for fancy .ac analyses */ double RESacConduct; /* AC conductance */ double RESwidth; /* width of the resistor */ double RESlength; /* length of the resistor */ double RESscale; /* Scale factor */ double RESm; /* Multiplicity factor for this instance */ double REStc1; /* first temperature coefficient of resistors */ double REStc2; /* second temperature coefficient of resistors */ double REStce; /* exponential temperature coefficient of resistors */ double RESbv_max; /* Maximum resistor voltage */ int RESnoisy; /* Set if the resistor generates noise */ double RESeffNoiseArea; /* effective resistor area for noise calculation */ double *RESposPosPtr; /* pointer to sparse matrix diagonal at * (positive,positive) */ double *RESnegNegPtr; /* pointer to sparse matrix diagonal at * (negative,negative) */ double *RESposNegPtr; /* pointer to sparse matrix offdiagonal at * (positive,negative) */ double *RESnegPosPtr; /* pointer to sparse matrix offdiagonal at * (negative,positive) */ unsigned RESresGiven : 1; /* flag to indicate resistance was specified */ unsigned RESwidthGiven : 1; /* flag to indicate width given */ unsigned RESlengthGiven : 1; /* flag to indicate length given */ unsigned RESscaleGiven : 1; /* flag to indicate scale given */ unsigned REStempGiven : 1; /* indicates temperature specified */ unsigned RESdtempGiven : 1; /* indicates delta-temp specified */ /* serban */ unsigned RESacresGiven : 1; /* indicates AC value specified */ unsigned RESmGiven : 1; /* indicates M parameter specified */ unsigned REStc1Given : 1; /* indicates tc1 parameter specified */ unsigned REStc2Given : 1; /* indicates tc2 parameter specified */ unsigned REStceGiven : 1; /* indicates tce parameter specified */ unsigned RESnoisyGiven : 1; /* indicates if noisy is specified */ unsigned RESbv_maxGiven : 1; /* flags indicates maximum voltage is given */ int RESsenParmNo; /* parameter # for sensitivity use; * set equal to 0 if not a design parameter*/ #ifndef NONOISE double RESnVar[NSTATVARS][RESNSRCS]; #else /* NONOISE */ double **RESnVar; #endif /* NONOISE */ } RESinstance ; /* per model data */ typedef struct sRESmodel { /* model structure for a resistor */ struct GENmodel gen; #define RESmodType gen.GENmodType #define RESnextModel(inst) ((struct sRESmodel *)((inst)->gen.GENnextModel)) #define RESinstances(inst) ((RESinstance *)((inst)->gen.GENinstances)) #define RESmodName gen.GENmodName double REStnom; /* temperature at which resistance measured */ double REStempCoeff1; /* first temperature coefficient of resistors */ double REStempCoeff2; /* second temperature coefficient of resistors */ double REStempCoeffe; /* exponential temperature coefficient of resistors */ double RESsheetRes; /* sheet resistance of devices in ohms/square */ double RESdefWidth; /* default width of a resistor */ double RESdefLength; /* default length of a resistor */ double RESnarrow; /* amount by which device is narrower than drawn */ double RESshort; /* amount by which device is shorter than drawn */ double RESfNcoef; /* Flicker noise coefficient */ double RESfNexp; /* Flicker noise exponent */ double RESres; /* Default model resistance */ double RESbv_max; /* Maximum resistor voltage */ double RESlf; /* length exponent for noise calculation */ double RESwf; /* width exponent for noise calculation */ double RESef; /* frequncy exponent for noise calculation */ unsigned REStnomGiven :1; /* flag to indicate nominal temp. was given */ unsigned REStc1Given :1; /* flag to indicate tc1 was specified */ unsigned REStc2Given :1; /* flag to indicate tc2 was specified */ unsigned REStceGiven :1; /* flag to indicate tce was specified */ unsigned RESsheetResGiven :1; /* flag to indicate sheet resistance given*/ unsigned RESdefWidthGiven :1; /* flag to indicate default width given */ unsigned RESdefLengthGiven :1; /* flag to indicate default length given */ unsigned RESnarrowGiven :1; /* flag to indicate narrow effect given */ unsigned RESshortGiven :1; /* flag to indicate short effect given */ unsigned RESfNcoefGiven :1; /* flag to indicate kf given */ unsigned RESfNexpGiven :1; /* flag to indicate af given */ unsigned RESresGiven :1; /* flag to indicate model resistance given */ unsigned RESbv_maxGiven :1; /* flags indicates maximum voltage is given */ unsigned RESlfGiven :1; /* flags indicates lf is given */ unsigned RESwfGiven :1; /* flags indicates wf is given */ unsigned RESefGiven :1; /* flags indicates ef is given */ } RESmodel; /* device parameters */ enum { RES_RESIST = 1, RES_WIDTH, RES_LENGTH, RES_CONDUCT, RES_RESIST_SENS, RES_CURRENT, RES_POWER, RES_TEMP, }; /* serban */ enum { RES_ACRESIST = 10, RES_ACCONDUCT, RES_M, RES_SCALE, RES_DTEMP, RES_NOISY, RES_TC1, RES_TC2, RES_BV_MAX, RES_TCE, }; /* model parameters */ enum { RES_MOD_TC1 = 101, RES_MOD_TC2, RES_MOD_RSH, RES_MOD_DEFWIDTH, RES_MOD_DEFLENGTH, RES_MOD_NARROW, RES_MOD_R, RES_MOD_TNOM, RES_MOD_SHORT, RES_MOD_KF, RES_MOD_AF, RES_MOD_BV_MAX, RES_MOD_LF, RES_MOD_WF, RES_MOD_EF, RES_MOD_TCE, }; /* device questions */ enum { RES_QUEST_SENS_REAL = 201, RES_QUEST_SENS_IMAG, RES_QUEST_SENS_MAG, RES_QUEST_SENS_PH, RES_QUEST_SENS_CPLX, RES_QUEST_SENS_DC, }; /* model questions */ #include "resext.h" extern void RESupdate_conduct(RESinstance *, bool spill_warnings); #endif /*RES*/ tmpk8ny_4pz/src/spicelib/devices/res/resmask.c0000644000175000017500000000447413546075722021576 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Apr 2000 - Paolo Nenzi Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "resdefs.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" int RESmodAsk(CKTcircuit *ckt, GENmodel *inModel, int which, IFvalue *value) { RESmodel *model = (RESmodel *)inModel; NG_IGNORE(ckt); switch(which) { case RES_MOD_TNOM: value->rValue = model->REStnom-CONSTCtoK; return(OK); case RES_MOD_TC1: value->rValue = model->REStempCoeff1; return(OK); case RES_MOD_TC2: value->rValue = model->REStempCoeff2; return(OK); case RES_MOD_TCE: value->rValue = model->REStempCoeffe; return(OK); case RES_MOD_RSH: value->rValue = model->RESsheetRes; return(OK); case RES_MOD_DEFWIDTH: value->rValue = model->RESdefWidth; return(OK); case RES_MOD_DEFLENGTH: value->rValue = model->RESdefLength; return(OK); case RES_MOD_NARROW: value->rValue = model->RESnarrow; return(OK); case RES_MOD_SHORT: value->rValue = model->RESshort; return(OK); case RES_MOD_KF: if (model->RESfNcoefGiven) value->rValue = model->RESfNcoef; else value->rValue = 0.0; return(OK); case RES_MOD_AF: if (model->RESfNexpGiven) value->rValue = model->RESfNexp; else value->rValue = 0.0; return(OK); case RES_MOD_BV_MAX: value->rValue = model->RESbv_max; return(OK); case RES_MOD_R: value->rValue = model->RESres; return(OK); case RES_MOD_LF: value->rValue = model->RESlf; return(OK); case RES_MOD_WF: value->rValue = model->RESwf; return(OK); case RES_MOD_EF: value->rValue = model->RESef; return(OK); default: return(E_BADPARM); } } tmpk8ny_4pz/src/spicelib/devices/res/ressetup.c0000644000175000017500000000607613546075722022003 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Apr 2000 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "resdefs.h" #include "ngspice/sperror.h" int RESsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit*ckt, int *state) /* load the resistor structure with those pointers needed later * for fast matrix loading */ { RESmodel *model = (RESmodel *)inModel; RESinstance *here; NG_IGNORE(state); NG_IGNORE(ckt); /* loop through all the resistor models */ for( ; model != NULL; model = RESnextModel(model)) { /* Default Value Processing for Resistor Models */ if(!model->REStnomGiven) model->REStnom = ckt->CKTnomTemp; if(!model->RESsheetResGiven) model->RESsheetRes = 0.0; if(!model->RESdefWidthGiven) model->RESdefWidth = 10e-6; /*M*/ if(!model->RESdefLengthGiven) model->RESdefLength = 10e-6; if(!model->REStc1Given) model->REStempCoeff1 = 0.0; if(!model->REStc2Given) model->REStempCoeff2 = 0.0; if(!model->REStceGiven) model->REStempCoeffe = 0.0; if(!model->RESnarrowGiven) model->RESnarrow = 0.0; if(!model->RESshortGiven) model->RESshort = 0.0; if(!model->RESfNcoefGiven) model->RESfNcoef = 0.0; if(!model->RESfNexpGiven) model->RESfNexp = 1.0; if(!model->RESlfGiven) model->RESlf = 1.0; if(!model->RESwfGiven) model->RESwf = 1.0; if(!model->RESefGiven) model->RESef = 1.0; if(!model->RESbv_maxGiven) model->RESbv_max = 1e99; /* loop through all the instances of the model */ for (here = RESinstances(model); here != NULL ; here=RESnextInstance(here)) { if(!here->RESwidthGiven) here->RESwidth = model->RESdefWidth; if(!here->RESlengthGiven) here->RESlength = model->RESdefLength; if(!here->RESscaleGiven) here->RESscale = 1.0; if(!here->RESmGiven) here->RESm = 1.0; if(!here->RESnoisyGiven) here->RESnoisy = 1; if(!here->RESbv_maxGiven) here->RESbv_max = model->RESbv_max; if((here->RESwidthGiven)||(here->RESlengthGiven)) here->RESeffNoiseArea = pow(here->RESlength - 2 * model->RESshort, model->RESlf) *pow(here->RESwidth - 2 * model->RESnarrow, model->RESwf); else here->RESeffNoiseArea = 1.0; /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(RESposPosPtr, RESposNode, RESposNode); TSTALLOC(RESnegNegPtr, RESnegNode, RESnegNode); TSTALLOC(RESposNegPtr, RESposNode, RESnegNode); TSTALLOC(RESnegPosPtr, RESnegNode, RESposNode); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/res/resparam.c0000644000175000017500000000463613546075722021743 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Apr 2000 - Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "resdefs.h" #include "ngspice/sperror.h" #include "ngspice/missing_math.h" #include "ngspice/fteext.h" int RESparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { double scale; RESinstance *here = (RESinstance *)inst; NG_IGNORE(select); if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; switch(param) { case RES_TEMP: here->REStemp = value->rValue + CONSTCtoK; here->REStempGiven = TRUE; break; case RES_DTEMP: here->RESdtemp = value->rValue; here->RESdtempGiven = TRUE; break; case RES_RESIST: /* 0 valued resistor causes ngspice to hang -- can't solve for initial voltage */ if ( AlmostEqualUlps( value->rValue, 0, 3 ) ) value->rValue = 0.001; /* 0.001 should be sufficiently small */ here->RESresist = value->rValue; here->RESresGiven = TRUE; break; case RES_ACRESIST: here->RESacResist = value->rValue; here->RESacresGiven = TRUE; break; case RES_WIDTH: here->RESwidth = value->rValue * scale; here->RESwidthGiven = TRUE; break; case RES_LENGTH: here->RESlength = value->rValue * scale; here->RESlengthGiven = TRUE; break; case RES_SCALE: here->RESscale = value->rValue; here->RESscaleGiven = TRUE; break; case RES_RESIST_SENS: here->RESsenParmNo = value->iValue; break; case RES_M: here->RESm = value->rValue; here->RESmGiven = TRUE; break; case RES_TC1: here->REStc1 = value->rValue; here->REStc1Given = TRUE; break; case RES_TC2: here->REStc2 = value->rValue; here->REStc2Given = TRUE; break; case RES_TCE: here->REStce = value->rValue; here->REStceGiven = TRUE; break; case RES_NOISY: here->RESnoisy = value->iValue; here->RESnoisyGiven = TRUE; break; case RES_BV_MAX: here->RESbv_max = value->rValue; here->RESbv_maxGiven = TRUE; break; default: return(E_BADPARM); } RESupdate_conduct(here, FALSE); return(OK); } tmpk8ny_4pz/src/spicelib/devices/res/resext.h0000644000175000017500000000161213546075722021437 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ extern int RESask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int RESload(GENmodel*,CKTcircuit*); extern int RESacload(GENmodel*,CKTcircuit*); extern int RESmodAsk(CKTcircuit*,GENmodel*,int,IFvalue*); extern int RESmParam(int,IFvalue*,GENmodel*); extern int RESparam(int,IFvalue*,GENinstance*,IFvalue*); extern int RESpzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int RESsAcLoad(GENmodel*,CKTcircuit*); extern int RESsLoad(GENmodel*,CKTcircuit*); extern int RESsSetup(SENstruct*,GENmodel*); extern void RESsPrint(GENmodel*,CKTcircuit*); extern int RESsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int REStemp(GENmodel*,CKTcircuit*); extern int RESnoise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int RESsoaCheck(CKTcircuit *, GENmodel *); tmpk8ny_4pz/src/spicelib/devices/res/resitf.h0000644000175000017500000000025513546075722021423 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_RES #define DEV_RES SPICEdev *get_res_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/res/resask.c0000644000175000017500000001316013546075722021411 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Apr 2000 - Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "resdefs.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" /* TODO : there are "double" value compared with 0 (eg: vm == 0) * Need to substitute this check with a suitable eps. * PN 2003 */ int RESask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { RESinstance *fast = (RESinstance *)inst; double vr; double vi; double sr; double si; double vm; static char *msg = "Current and power not available for ac analysis"; switch(which) { case RES_TEMP: value->rValue = fast->REStemp - CONSTCtoK; return(OK); case RES_DTEMP: value->rValue = fast->RESdtemp; return(OK); case RES_CONDUCT: value->rValue = fast->RESconduct; return(OK); case RES_RESIST: value->rValue = fast->RESresist; return(OK); case RES_ACCONDUCT: value->rValue = fast->RESacConduct; return (OK); case RES_ACRESIST: value->rValue = fast->RESacResist; return(OK); case RES_LENGTH: value->rValue = fast->RESlength; return(OK); case RES_WIDTH: value->rValue = fast->RESwidth; return(OK); case RES_SCALE: value->rValue = fast->RESscale; return(OK); case RES_M: value->rValue = fast->RESm; return(OK); case RES_TC1: value->rValue = fast->REStc1; return(OK); case RES_TC2: value->rValue = fast->REStc2; return(OK); case RES_TCE: value->rValue = fast->REStce; return(OK); case RES_BV_MAX: value->rValue = fast->RESbv_max; return(OK); case RES_NOISY: value->iValue = fast->RESnoisy; return(OK); case RES_QUEST_SENS_DC: if (ckt->CKTsenInfo) { value->rValue = *(ckt->CKTsenInfo->SEN_Sap[select->iValue + 1] + fast->RESsenParmNo); } return(OK); case RES_QUEST_SENS_REAL: if (ckt->CKTsenInfo) { value->rValue = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1] + fast->RESsenParmNo); } return(OK); case RES_QUEST_SENS_IMAG: if (ckt->CKTsenInfo) { value->rValue = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1] + fast->RESsenParmNo); } return(OK); case RES_QUEST_SENS_MAG: if (ckt->CKTsenInfo) { vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = sqrt(vr*vr + vi*vi); if (vm == 0) { value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1] + fast->RESsenParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1] + fast->RESsenParmNo); value->rValue = (vr * sr + vi * si) / vm; } return(OK); case RES_QUEST_SENS_PH: if (ckt->CKTsenInfo) { vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = vr*vr + vi*vi; if (vm == 0) { value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1] + fast->RESsenParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1] + fast->RESsenParmNo); value->rValue = (vr * si - vi * sr) / vm; } return(OK); case RES_QUEST_SENS_CPLX: if (ckt->CKTsenInfo) { value->cValue.real= *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1] + fast->RESsenParmNo); value->cValue.imag= *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1] + fast->RESsenParmNo); } return(OK); case RES_CURRENT: if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "RESask"; strcpy(errMsg, msg); return(E_ASKCURRENT); } else if (ckt->CKTrhsOld) { value->rValue = (*(ckt->CKTrhsOld + fast->RESposNode) - *(ckt->CKTrhsOld + fast->RESnegNode)); value->rValue *= fast->RESconduct; return(OK); } else { errMsg = tprintf("No current values available for %s", fast->RESname); errRtn = "RESask"; return(E_ASKCURRENT); } case RES_POWER: if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "RESask"; strcpy(errMsg, msg); return(E_ASKPOWER); } else if (ckt->CKTrhsOld) { value->rValue = (*(ckt->CKTrhsOld + fast->RESposNode) - *(ckt->CKTrhsOld + fast->RESnegNode)) * (*(ckt->CKTrhsOld + fast->RESposNode) - *(ckt->CKTrhsOld + fast->RESnegNode)); value->rValue *= fast->RESconduct; return(OK); } else { errMsg = tprintf("No power values available for %s", fast->RESname); errRtn = "RESask"; return(E_ASKCURRENT); } default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/res/ressload.c0000644000175000017500000000266013546075722021740 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Apr 2000 - Paolo Nenzi This function is obsolete (was used by an old sensitivity analysis) **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "resdefs.h" #include "ngspice/sperror.h" int RESsLoad(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current resistance sensitivity value into * the array previously provided. */ { RESmodel *model = (RESmodel *)inModel; RESinstance *here; /* loop through all the resistor models */ for( ; model != NULL; model = RESnextModel(model)) { /* loop through all the instances of the model */ for (here = RESinstances(model); here != NULL ; here=RESnextInstance(here)) { if(here->RESsenParmNo){ double value; value = *(ckt->CKTrhsOld+here->RESposNode) - *(ckt->CKTrhsOld+here->RESnegNode); value *= here->RESconduct; value *= here->RESconduct; /* load the RHS matrix */ *(ckt->CKTsenInfo->SEN_RHS[here->RESposNode] + here->RESsenParmNo) += value; *(ckt->CKTsenInfo->SEN_RHS[here->RESnegNode] + here->RESsenParmNo) -= value; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/res/res.c0000644000175000017500000001037313546075722020715 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Apr 2000 - Paolo Nenzi Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "resdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" IFparm RESpTable[] = { /* parameters */ IOPP( "resistance", RES_RESIST, IF_REAL, "Resistance"), IOPPR( "r", RES_RESIST, IF_REAL, "Resistance"), IOPAA( "ac", RES_ACRESIST, IF_REAL, "AC resistance value"), IOPZU( "temp", RES_TEMP, IF_REAL, "Instance operating temperature"), IOPZ( "dtemp", RES_DTEMP, IF_REAL, "Instance temperature difference with the rest of the circuit"), IOPQU( "l", RES_LENGTH, IF_REAL, "Length"), IOPZU( "w", RES_WIDTH, IF_REAL, "Width"), IOPU( "m", RES_M, IF_REAL, "Multiplication factor"), IOPU( "tc", RES_TC1, IF_REAL, "First order temp. coefficient"), IOPUR( "tc1", RES_TC1, IF_REAL, "First order temp. coefficient"), IOPU( "tc2", RES_TC2, IF_REAL, "Second order temp. coefficient"), IOPU( "tce", RES_TCE, IF_REAL, "exponential temp. coefficient"), IOP( "bv_max", RES_BV_MAX, IF_REAL, "maximum voltage over resistor"), IOPU( "scale", RES_SCALE, IF_REAL, "Scale factor"), IOP( "noisy", RES_NOISY, IF_INTEGER, "Resistor generate noise"), IOPR( "noise", RES_NOISY, IF_INTEGER, "Resistor generate noise"), IP( "sens_resist", RES_RESIST_SENS, IF_FLAG, "flag to request sensitivity WRT resistance"), OP( "i", RES_CURRENT, IF_REAL, "Current"), OP( "p", RES_POWER, IF_REAL, "Power"), OPU( "sens_dc", RES_QUEST_SENS_DC, IF_REAL, "dc sensitivity "), OPU( "sens_real", RES_QUEST_SENS_REAL, IF_REAL, "dc sensitivity and real part of ac sensitivity"), OPU( "sens_imag", RES_QUEST_SENS_IMAG, IF_REAL, "dc sensitivity and imag part of ac sensitivity"), OPU( "sens_mag", RES_QUEST_SENS_MAG, IF_REAL, "ac sensitivity of magnitude"), OPU( "sens_ph", RES_QUEST_SENS_PH, IF_REAL, "ac sensitivity of phase"), OPU( "sens_cplx", RES_QUEST_SENS_CPLX, IF_COMPLEX, "ac sensitivity") }; IFparm RESmPTable[] = { /* model parameters */ IOPQ( "rsh", RES_MOD_RSH, IF_REAL,"Sheet resistance"), IOPZ( "narrow", RES_MOD_NARROW, IF_REAL,"Narrowing of resistor"), IOPZR( "dw", RES_MOD_NARROW, IF_REAL,"Narrowing of resistor"), IOPZ( "short", RES_MOD_SHORT, IF_REAL,"Shortening of resistor"), IOPZR( "dlr", RES_MOD_SHORT, IF_REAL,"Shortening of resistor"), IOPQ( "tc1", RES_MOD_TC1, IF_REAL,"First order temp. coefficient"), IOPQR( "tc1r", RES_MOD_TC1, IF_REAL,"First order temp. coefficient"), IOPQO( "tc2", RES_MOD_TC2, IF_REAL,"Second order temp. coefficient"), IOPQOR("tc2r", RES_MOD_TC2, IF_REAL,"Second order temp. coefficient"), IOPQ( "tce", RES_MOD_TCE, IF_REAL,"exponential temp. coefficient"), IOPX( "defw", RES_MOD_DEFWIDTH, IF_REAL,"Default device width"), IOPXR( "w", RES_MOD_DEFWIDTH, IF_REAL,"Default device width"), IOPX( "l", RES_MOD_DEFLENGTH,IF_REAL,"Default device length"), IOPQ( "kf", RES_MOD_KF, IF_REAL,"Flicker noise coefficient"), IOPQ( "af", RES_MOD_AF, IF_REAL,"Flicker noise exponent"), IOPXU( "tnom", RES_MOD_TNOM, IF_REAL,"Parameter measurement temperature"), IOP( "r", RES_MOD_R, IF_REAL,"Resistor model default value"), IOPR( "res", RES_MOD_R, IF_REAL,"Resistor model default value"), IOP( "bv_max", RES_MOD_BV_MAX, IF_REAL,"maximum voltage over resistor"), IOP( "lf", RES_MOD_LF, IF_REAL,"noise area length exponent"), IOP( "wf", RES_MOD_WF, IF_REAL,"noise area width exponent"), IOP( "ef", RES_MOD_EF, IF_REAL,"noise frequency exponent") }; char *RESnames[] = { "R+", "R-" }; int RESnSize = NUMELEMS(RESnames); int RESpTSize = NUMELEMS(RESpTable); int RESmPTSize = NUMELEMS(RESmPTable); int RESiSize = sizeof(RESinstance); int RESmSize = sizeof(RESmodel); tmpk8ny_4pz/src/spicelib/devices/res/resinit.c0000644000175000017500000000312113546075722021572 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "resitf.h" #include "resext.h" #include "resinit.h" SPICEdev RESinfo = { .DEVpublic = { .name = "Resistor", .description = "Simple linear resistor", .terms = &RESnSize, .numNames = &RESnSize, .termNames = RESnames, .numInstanceParms = &RESpTSize, .instanceParms = RESpTable, .numModelParms = &RESmPTSize, .modelParms = RESmPTable, .flags = 0, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = RESparam, .DEVmodParam = RESmParam, .DEVload = RESload, .DEVsetup = RESsetup, .DEVunsetup = NULL, .DEVpzSetup = RESsetup, .DEVtemperature = REStemp, .DEVtrunc = NULL, .DEVfindBranch = NULL, .DEVacLoad = RESacload, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = NULL, .DEVask = RESask, .DEVmodAsk = RESmodAsk, .DEVpzLoad = RESpzLoad, .DEVconvTest = NULL, .DEVsenSetup = RESsSetup, .DEVsenLoad = RESsLoad, .DEVsenUpdate = NULL, .DEVsenAcLoad = RESsAcLoad, .DEVsenPrint = RESsPrint, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = RESnoise, .DEVsoaCheck = RESsoaCheck, .DEVinstSize = &RESiSize, .DEVmodSize = &RESmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_res_info(void) { return &RESinfo; } tmpk8ny_4pz/src/spicelib/devices/res/ressprt.c0000644000175000017500000000270313546075722021624 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Apr 2002 - Paolo Nenzi This function is obsolete (was used by an old sensitivity analysis) **********/ /* Pretty print the sensitivity info for all * the resistors in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "resdefs.h" #include "ngspice/sperror.h" void RESsPrint(GENmodel *inModel, CKTcircuit *ckt) { RESmodel *model = (RESmodel *)inModel; RESinstance *here; printf("RESISTORS-----------------\n"); /* loop through all the resistor models */ for( ; model != NULL; model = RESnextModel(model)) { printf("Model name:%s\n",model->RESmodName); /* loop through all the instances of the model */ for (here = RESinstances(model); here != NULL ; here=RESnextInstance(here)) { printf(" Instance name:%s\n",here->RESname); printf(" Positive, negative nodes: %s, %s\n", CKTnodName(ckt,here->RESposNode),CKTnodName(ckt,here->RESnegNode)); printf(" Multiplier: %g ",here->RESm); printf(here->RESmGiven ? "(specified)\n" : "(default)\n"); printf(" Resistance: %f ",here->RESresist); printf(here->RESresGiven ? "(specified)\n" : "(default)\n"); printf(" RESsenParmNo:%d\n",here->RESsenParmNo); } } } tmpk8ny_4pz/src/spicelib/devices/res/resmpar.c0000644000175000017500000000462113546075722021574 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Apr 2000 - Paolo Nenzi Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "resdefs.h" #include "ngspice/sperror.h" int RESmParam(int param, IFvalue *value, GENmodel *inModel) { RESmodel *model = (RESmodel *)inModel; switch(param) { case RES_MOD_TNOM: model->REStnom = value->rValue+CONSTCtoK; model->REStnomGiven = TRUE; break; case RES_MOD_TC1: model->REStempCoeff1 = value->rValue; model->REStc1Given = TRUE; break; case RES_MOD_TC2: model->REStempCoeff2 = value->rValue; model->REStc2Given = TRUE; break; case RES_MOD_TCE: model->REStempCoeffe = value->rValue; model->REStceGiven = TRUE; break; case RES_MOD_RSH: model->RESsheetRes = value->rValue; model->RESsheetResGiven = TRUE; break; case RES_MOD_DEFWIDTH: model->RESdefWidth = value->rValue; model->RESdefWidthGiven = TRUE; break; case RES_MOD_DEFLENGTH: model->RESdefLength = value->rValue; model->RESdefLengthGiven = TRUE; break; case RES_MOD_NARROW: model->RESnarrow = value->rValue; model->RESnarrowGiven = TRUE; break; case RES_MOD_SHORT: model->RESshort = value->rValue; model->RESshortGiven = TRUE; break; case RES_MOD_KF: model->RESfNcoef = value->rValue; model->RESfNcoefGiven = TRUE; break; case RES_MOD_AF: model->RESfNexp = value->rValue; model->RESfNexpGiven = TRUE; break; case RES_MOD_BV_MAX: model->RESbv_max = value->rValue; model->RESbv_maxGiven = TRUE; break; case RES_MOD_LF: model->RESlf = value->rValue; model->RESlfGiven = TRUE; break; case RES_MOD_WF: model->RESwf = value->rValue; model->RESwfGiven = TRUE; break; case RES_MOD_EF: model->RESef = value->rValue; model->RESefGiven = TRUE; break; case RES_MOD_R: if ( value->rValue > 1e-03 ) { model->RESres = value->rValue; model->RESresGiven = TRUE; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/res/ressset.c0000644000175000017500000000176113546075722021615 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: Apr 2000 - Paolo Nenzi This function is obsolete (was used by an old sensitivity analysis) **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "resdefs.h" #include "ngspice/sperror.h" #include "ngspice/cktdefs.h" int RESsSetup(SENstruct *info, GENmodel *inModel) /* loop through all the devices and * assign parameter #s to design parameters */ { RESmodel *model = (RESmodel *)inModel; RESinstance *here; /* loop through all the resistor models */ for( ; model != NULL; model = RESnextModel(model)) { /* loop through all the instances of the model */ for (here = RESinstances(model); here != NULL ; here=RESnextInstance(here)) { if(here->RESsenParmNo){ here->RESsenParmNo = ++(info->SENparms); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/res/restemp.c0000644000175000017500000000636113546075722021605 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified Apr 2000 - Paolo Nenzi Modified: 2000 AlanSfixes **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "resdefs.h" #include "ngspice/sperror.h" int REStemp(GENmodel *inModel, CKTcircuit *ckt) /* perform the temperature update to the resistors * calculate the conductance as a function of the * given nominal and current temperatures - the * resistance given in the struct is the nominal * temperature resistance */ { RESmodel *model = (RESmodel *)inModel; RESinstance *here; /* loop through all the resistor models */ for( ; model != NULL; model = RESnextModel(model)) { /* loop through all the instances of the model */ for (here = RESinstances(model); here != NULL ; here=RESnextInstance(here)) { /* Default Value Processing for Resistor Instance */ if (!here->REStempGiven) { here->REStemp = ckt->CKTtemp; if (!here->RESdtempGiven) here->RESdtemp = 0.0; } else { here->RESdtemp = 0.0; if (here->RESdtempGiven) printf("%s: Instance temperature specified, dtemp ignored\n", here->RESname); } RESupdate_conduct(here, TRUE); } } return OK; } void RESupdate_conduct(RESinstance *here, bool spill_warnings) { RESmodel *model = RESmodPtr(here); double factor; double difference; double tc1, tc2, tce; if (!here->RESresGiven) { if (here->RESlength * here->RESwidth * model->RESsheetRes > 0.0) { here->RESresist = (here->RESlength - 2 * model->RESshort) / (here->RESwidth - 2 * model->RESnarrow) * model->RESsheetRes; } else if (model->RESresGiven) { here->RESresist = model->RESres; } else { if (spill_warnings) SPfrontEnd->IFerrorf (ERR_WARNING, "%s: resistance to low, set to 1 mOhm", here->RESname); here->RESresist = 1e-03; } } difference = (here->REStemp + here->RESdtemp) - model->REStnom; /* instance parameters tc1,tc2 and tce will override model parameters tc1,tc2 and tce */ if (here->REStc1Given) tc1 = here->REStc1; /* instance */ else tc1 = model->REStempCoeff1; /* model */ if (here->REStc2Given) tc2 = here->REStc2; else tc2 = model->REStempCoeff2; if (here->REStceGiven) tce = here->REStce; else tce = model->REStempCoeffe; if (here->REStceGiven || model->REStceGiven) factor = pow(1.01, tce * difference); else factor = (((tc2 * difference) + tc1) * difference) + 1.0; if (!here->RESscaleGiven) here->RESscale = 1; here->RESconduct = here->RESm / (here->RESresist * factor * here->RESscale); /* Paolo Nenzi: AC value */ if (here->RESacresGiven) { here->RESacConduct = here->RESm / (here->RESacResist * factor * here->RESscale); } else { here->RESacConduct = here->RESconduct; here->RESacResist = here->RESresist; } } tmpk8ny_4pz/src/spicelib/devices/res/resinit.h0000644000175000017500000000035613546075722021606 0ustar carstencarsten#ifndef _RESINIT_H #define _RESINIT_H extern IFparm RESpTable[ ]; extern IFparm RESmPTable[ ]; extern char *RESnames[ ]; extern int RESpTSize; extern int RESmPTSize; extern int RESnSize; extern int RESiSize; extern int RESmSize; #endif tmpk8ny_4pz/src/spicelib/devices/numos/0000755000175000017500000000000013546075722020324 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/numos/numosext.h0000644000175000017500000000163413546075722022363 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Karti Mayaram **********/ #ifndef NUMOSEXT_H #define NUMOSEXT_H extern int NUMOSacLoad(GENmodel *, CKTcircuit *); extern int NUMOSask(CKTcircuit *, GENinstance *, int, IFvalue *, IFvalue *); extern int NUMOSdelete(GENinstance *); extern int NUMOSgetic(GENmodel *, CKTcircuit *); extern int NUMOSload(GENmodel *, CKTcircuit *); extern int NUMOSmParam(int, IFvalue *, GENmodel *); extern int NUMOSparam(int, IFvalue *, GENinstance *, IFvalue *); extern int NUMOSpzLoad(GENmodel *, CKTcircuit *, SPcomplex *); extern int NUMOSsetup(SMPmatrix *, GENmodel *, CKTcircuit *, int *); extern int NUMOStemp(GENmodel *, CKTcircuit *); extern int NUMOStrunc(GENmodel *, CKTcircuit *, double *); extern void NUMOSdump(GENmodel *, CKTcircuit *); extern void NUMOSacct(GENmodel *, CKTcircuit *, FILE *); #endif /* NUMOSEXT_H */ tmpk8ny_4pz/src/spicelib/devices/numos/Makefile.am0000644000175000017500000000072213546075722022361 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libnumos.la libnumos_la_SOURCES = \ numm.c \ nummacld.c \ nummask.c \ numosdef.h \ nummdel.c \ nummdump.c \ numosext.h \ numosinit.c \ numosinit.h \ numositf.h \ nummload.c \ nummmpar.c \ nummparm.c \ nummpzld.c \ nummset.c \ nummtemp.c \ nummtrun.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/numos/nummload.c0000644000175000017500000005341013546075722022307 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * This is the function called each iteration to evaluate the 2d numerical * MOSFETs in the circuit and load them into the matrix as appropriate */ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/cktdefs.h" #include "numosdef.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" /* Forward Declarations */ int NUMOSinitSmSig(NUMOSinstance *inst); int NUMOSload(GENmodel *inModel, CKTcircuit *ckt) { register NUMOSmodel *model = (NUMOSmodel *) inModel; register NUMOSinstance *inst; register TWOdevice *pDevice; double startTime, startTime2, totalTime, totalTime2; double tol; double xfact; double id, is, ig; double ideq, iseq, igeq; double idhat = 0.0, ishat = 0.0, ighat = 0.0; double delVdb, delVsb, delVgb; double vdb, vsb, vgb; struct mosConductances g; int icheck; int icheck1; int i; double deltaNorm[7]; int devConverged = 0; int numDevNonCon; int deviceType; int doInitSolve; int doVoltPred; char *initStateName; /* loop through all the models */ for (; model != NULL; model = NUMOSnextModel(model)) { FieldDepMobility = model->NUMOSmodels->MODLfieldDepMobility; TransDepMobility = model->NUMOSmodels->MODLtransDepMobility; SurfaceMobility = model->NUMOSmodels->MODLsurfaceMobility; Srh = model->NUMOSmodels->MODLsrh; Auger = model->NUMOSmodels->MODLauger; AvalancheGen = model->NUMOSmodels->MODLavalancheGen; OneCarrier = model->NUMOSmethods->METHoneCarrier; MobDeriv = model->NUMOSmethods->METHmobDeriv; MaxIterations = model->NUMOSmethods->METHitLim; TWOdcDebug = model->NUMOSoutputs->OUTPdcDebug; TWOtranDebug = model->NUMOSoutputs->OUTPtranDebug; TWOacDebug = model->NUMOSoutputs->OUTPacDebug; deviceType = model->NUMOSoptions->OPTNdeviceType; doVoltPred = model->NUMOSmethods->METHvoltPred; if (ckt->CKTmode & MODEINITPRED) { /* compute normalized deltas and predictor coeff */ if (!(ckt->CKTmode & MODEDCTRANCURVE)) { model->NUMOSpInfo->order = ckt->CKTorder; model->NUMOSpInfo->method = ckt->CKTintegrateMethod; for (i = 0; i <= ckt->CKTmaxOrder; i++) { deltaNorm[i] = ckt->CKTdeltaOld[i] / TNorm; } computeIntegCoeff(ckt->CKTintegrateMethod, ckt->CKTorder, model->NUMOSpInfo->intCoeff, deltaNorm); computePredCoeff(ckt->CKTintegrateMethod, ckt->CKTorder, model->NUMOSpInfo->predCoeff, deltaNorm); } } else if (ckt->CKTmode & MODEINITTRAN) { model->NUMOSpInfo->order = ckt->CKTorder; model->NUMOSpInfo->method = ckt->CKTintegrateMethod; for (i = 0; i <= ckt->CKTmaxOrder; i++) { deltaNorm[i] = ckt->CKTdeltaOld[i] / TNorm; } computeIntegCoeff(ckt->CKTintegrateMethod, ckt->CKTorder, model->NUMOSpInfo->intCoeff, deltaNorm); } /* loop through all the instances of the model */ for (inst = NUMOSinstances(model); inst != NULL; inst = NUMOSnextInstance(inst)) { pDevice = inst->NUMOSpDevice; totalTime = 0.0; startTime = SPfrontEnd->IFseconds(); /* Get Temp.-Dep. Global Parameters */ GLOBgetGlobals(&(inst->NUMOSglobals)); /* * initialization */ pDevice->devStates = ckt->CKTstates; icheck = 1; doInitSolve = FALSE; initStateName = NULL; if (ckt->CKTmode & MODEINITSMSIG) { vdb = *(ckt->CKTstate0 + inst->NUMOSvdb); vsb = *(ckt->CKTstate0 + inst->NUMOSvsb); vgb = *(ckt->CKTstate0 + inst->NUMOSvgb); delVdb = 0.0; delVsb = 0.0; delVgb = 0.0; NUMOSsetBCs(pDevice, vdb, vsb, vgb); } else if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate0 + inst->NUMOSvdb) = *(ckt->CKTstate1 + inst->NUMOSvdb); *(ckt->CKTstate0 + inst->NUMOSvsb) = *(ckt->CKTstate1 + inst->NUMOSvsb); *(ckt->CKTstate0 + inst->NUMOSvgb) = *(ckt->CKTstate1 + inst->NUMOSvgb); vdb = *(ckt->CKTstate1 + inst->NUMOSvdb); vsb = *(ckt->CKTstate1 + inst->NUMOSvsb); vgb = *(ckt->CKTstate1 + inst->NUMOSvgb); TWOsaveState(pDevice); delVdb = 0.0; delVsb = 0.0; delVgb = 0.0; } else if ((ckt->CKTmode & MODEINITJCT) && (ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) { doInitSolve = TRUE; initStateName = inst->NUMOSicFile; vdb = 0.0; vsb = 0.0; vgb = 0.0; delVdb = vdb; delVsb = vsb; delVgb = vgb; } else if ((ckt->CKTmode & MODEINITJCT) && (inst->NUMOSoff == 0)) { doInitSolve = TRUE; initStateName = inst->NUMOSicFile; if (deviceType == OPTN_BIPOLAR) { /* d,g,s,b => c,b,e,s */ vdb = 0.0; vsb = -inst->NUMOStype * 1.0; vgb = -inst->NUMOStype * (1.0 - 0.6); } else if (deviceType == OPTN_JFET) { vdb = inst->NUMOStype * 0.5; vsb = 0.0; vgb = 0.0; } else { vdb = inst->NUMOStype * 0.5; vsb = 0.0; vgb = inst->NUMOStype * 1.0; } delVdb = vdb; delVsb = vsb; delVgb = vgb; } else if (ckt->CKTmode & MODEINITJCT) { doInitSolve = TRUE; vdb = 0.0; vsb = 0.0; vgb = 0.0; delVdb = vdb; delVsb = vsb; delVgb = vgb; } else if ((ckt->CKTmode & MODEINITFIX) && inst->NUMOSoff) { vdb = 0.0; vsb = 0.0; vgb = 0.0; delVdb = vdb; delVsb = vsb; delVgb = vgb; } else { if (ckt->CKTmode & MODEINITPRED) { *(ckt->CKTstate0 + inst->NUMOSvdb) = *(ckt->CKTstate1 + inst->NUMOSvdb); *(ckt->CKTstate0 + inst->NUMOSvsb) = *(ckt->CKTstate1 + inst->NUMOSvsb); *(ckt->CKTstate0 + inst->NUMOSvgb) = *(ckt->CKTstate1 + inst->NUMOSvgb); *(ckt->CKTstate0 + inst->NUMOSid) = *(ckt->CKTstate1 + inst->NUMOSid); *(ckt->CKTstate0 + inst->NUMOSis) = *(ckt->CKTstate1 + inst->NUMOSis); *(ckt->CKTstate0 + inst->NUMOSig) = *(ckt->CKTstate1 + inst->NUMOSig); *(ckt->CKTstate0 + inst->NUMOSdIdDVdb) = *(ckt->CKTstate1 + inst->NUMOSdIdDVdb); *(ckt->CKTstate0 + inst->NUMOSdIdDVsb) = *(ckt->CKTstate1 + inst->NUMOSdIdDVsb); *(ckt->CKTstate0 + inst->NUMOSdIdDVgb) = *(ckt->CKTstate1 + inst->NUMOSdIdDVgb); *(ckt->CKTstate0 + inst->NUMOSdIsDVdb) = *(ckt->CKTstate1 + inst->NUMOSdIsDVdb); *(ckt->CKTstate0 + inst->NUMOSdIsDVsb) = *(ckt->CKTstate1 + inst->NUMOSdIsDVsb); *(ckt->CKTstate0 + inst->NUMOSdIsDVgb) = *(ckt->CKTstate1 + inst->NUMOSdIsDVgb); *(ckt->CKTstate0 + inst->NUMOSdIgDVdb) = *(ckt->CKTstate1 + inst->NUMOSdIgDVdb); *(ckt->CKTstate0 + inst->NUMOSdIgDVsb) = *(ckt->CKTstate1 + inst->NUMOSdIgDVsb); *(ckt->CKTstate0 + inst->NUMOSdIgDVgb) = *(ckt->CKTstate1 + inst->NUMOSdIgDVgb); if (!(ckt->CKTmode & MODEDCTRANCURVE)) { /* no linear prediction on device voltages */ vdb = *(ckt->CKTstate1 + inst->NUMOSvdb); vsb = *(ckt->CKTstate1 + inst->NUMOSvsb); vgb = *(ckt->CKTstate1 + inst->NUMOSvgb); TWOpredict(pDevice, model->NUMOSpInfo); } else { if (doVoltPred) { /* linear prediction */ xfact=ckt->CKTdelta/ckt->CKTdeltaOld[1]; vdb = (1+xfact) * (*(ckt->CKTstate1 + inst->NUMOSvdb)) - (xfact) * (*(ckt->CKTstate2 + inst->NUMOSvdb)); vsb = (1+xfact) * (*(ckt->CKTstate1 + inst->NUMOSvsb)) - (xfact) * (*(ckt->CKTstate2 + inst->NUMOSvsb)); vgb = (1+xfact) * (*(ckt->CKTstate1 + inst->NUMOSvgb)) - (xfact) * (*(ckt->CKTstate2 + inst->NUMOSvgb)); } else { vdb = *(ckt->CKTstate1 + inst->NUMOSvdb); vsb = *(ckt->CKTstate1 + inst->NUMOSvsb); vgb = *(ckt->CKTstate1 + inst->NUMOSvgb); } } } else { /* * compute new nonlinear branch voltages */ vdb = *(ckt->CKTrhsOld + inst->NUMOSdrainNode) - *(ckt->CKTrhsOld + inst->NUMOSbulkNode); vsb = *(ckt->CKTrhsOld + inst->NUMOSsourceNode) - *(ckt->CKTrhsOld + inst->NUMOSbulkNode); vgb = *(ckt->CKTrhsOld + inst->NUMOSgateNode) - *(ckt->CKTrhsOld + inst->NUMOSbulkNode); } delVdb = vdb - *(ckt->CKTstate0 + inst->NUMOSvdb); delVsb = vsb - *(ckt->CKTstate0 + inst->NUMOSvsb); delVgb = vgb - *(ckt->CKTstate0 + inst->NUMOSvgb); idhat = *(ckt->CKTstate0 + inst->NUMOSid) + *(ckt->CKTstate0 + inst->NUMOSdIdDVdb) * delVdb + *(ckt->CKTstate0 + inst->NUMOSdIdDVsb) * delVsb + *(ckt->CKTstate0 + inst->NUMOSdIdDVgb) * delVgb; ishat = *(ckt->CKTstate0 + inst->NUMOSis) + *(ckt->CKTstate0 + inst->NUMOSdIsDVdb) * delVdb + *(ckt->CKTstate0 + inst->NUMOSdIsDVsb) * delVsb + *(ckt->CKTstate0 + inst->NUMOSdIsDVgb) * delVgb; ighat = *(ckt->CKTstate0 + inst->NUMOSig) + *(ckt->CKTstate0 + inst->NUMOSdIgDVdb) * delVdb + *(ckt->CKTstate0 + inst->NUMOSdIgDVsb) * delVsb + *(ckt->CKTstate0 + inst->NUMOSdIgDVgb) * delVgb; #ifndef NOBYPASS /* * bypass if solution has not changed */ /* * the following collections of if's would be just one if the average * compiler could handle it, but many find the expression too * complicated, thus the split. */ if ((ckt->CKTbypass) && pDevice->converged && (!(ckt->CKTmode & MODEINITPRED)) && (fabs(delVdb) < (ckt->CKTreltol * MAX(fabs(vdb), fabs(*(ckt->CKTstate0 + inst->NUMOSvdb))) + ckt->CKTvoltTol))) if ((fabs(delVsb) < ckt->CKTreltol * MAX(fabs(vsb), fabs(*(ckt->CKTstate0 + inst->NUMOSvsb))) + ckt->CKTvoltTol)) if ((fabs(delVgb) < ckt->CKTreltol * MAX(fabs(vgb), fabs(*(ckt->CKTstate0 + inst->NUMOSvgb))) + ckt->CKTvoltTol)) if ((fabs(idhat - *(ckt->CKTstate0 + inst->NUMOSid)) < ckt->CKTreltol * MAX(fabs(idhat), fabs(*(ckt->CKTstate0 + inst->NUMOSid))) + ckt->CKTabstol)) if ((fabs(ishat - *(ckt->CKTstate0 + inst->NUMOSis)) < ckt->CKTreltol * MAX(fabs(ishat), fabs(*(ckt->CKTstate0 + inst->NUMOSis))) + ckt->CKTabstol)) if ((fabs(ighat - *(ckt->CKTstate0 + inst->NUMOSig)) < ckt->CKTreltol * MAX(fabs(ighat), fabs(*(ckt->CKTstate0 + inst->NUMOSig))) + ckt->CKTabstol)) { /* * bypassing.... */ vdb = *(ckt->CKTstate0 + inst->NUMOSvdb); vsb = *(ckt->CKTstate0 + inst->NUMOSvsb); vgb = *(ckt->CKTstate0 + inst->NUMOSvgb); id = *(ckt->CKTstate0 + inst->NUMOSid); is = *(ckt->CKTstate0 + inst->NUMOSis); ig = *(ckt->CKTstate0 + inst->NUMOSig); g.dIdDVdb = *(ckt->CKTstate0 + inst->NUMOSdIdDVdb); g.dIdDVsb = *(ckt->CKTstate0 + inst->NUMOSdIdDVsb); g.dIdDVgb = *(ckt->CKTstate0 + inst->NUMOSdIdDVgb); g.dIsDVdb = *(ckt->CKTstate0 + inst->NUMOSdIsDVdb); g.dIsDVsb = *(ckt->CKTstate0 + inst->NUMOSdIsDVsb); g.dIsDVgb = *(ckt->CKTstate0 + inst->NUMOSdIsDVgb); g.dIgDVdb = *(ckt->CKTstate0 + inst->NUMOSdIgDVdb); g.dIgDVsb = *(ckt->CKTstate0 + inst->NUMOSdIgDVsb); g.dIgDVgb = *(ckt->CKTstate0 + inst->NUMOSdIgDVgb); goto load; } #endif /* NOBYPASS */ /* * limit nonlinear branch voltages */ icheck1 = 1; if (deviceType == OPTN_BIPOLAR) { double vbe, vbe0; double vce, vce0; vdb = -inst->NUMOStype * limitJunctionVoltage(-inst->NUMOStype * vdb, -inst->NUMOStype * *(ckt->CKTstate0 + inst->NUMOSvdb), &icheck); vce = vdb - vsb; vce0 = *(ckt->CKTstate0 + inst->NUMOSvdb) - *(ckt->CKTstate0 + inst->NUMOSvsb); vce = inst->NUMOStype * limitVce(inst->NUMOStype * vce, inst->NUMOStype * vce0, &icheck1); if (icheck1 == 1) icheck = 1; vsb = vdb - vce; vbe = vgb - vsb; vbe0 = *(ckt->CKTstate0 + inst->NUMOSvgb) - *(ckt->CKTstate0 + inst->NUMOSvsb); vbe = inst->NUMOStype * limitVbe(inst->NUMOStype * vbe, inst->NUMOStype * vbe0, &icheck1); if (icheck1 == 1) icheck = 1; vgb = vbe + vsb; } else { vdb = -inst->NUMOStype * limitJunctionVoltage(-inst->NUMOStype * vdb, -inst->NUMOStype * *(ckt->CKTstate0 + inst->NUMOSvdb), &icheck); vsb = -inst->NUMOStype * limitJunctionVoltage(-inst->NUMOStype * vsb, -inst->NUMOStype * *(ckt->CKTstate0 + inst->NUMOSvsb), &icheck1); if (icheck1 == 1) icheck = 1; vgb = inst->NUMOStype * limitVgb(inst->NUMOStype * vgb, inst->NUMOStype * *(ckt->CKTstate0 + inst->NUMOSvgb), &icheck1); if (icheck1 == 1) icheck = 1; } delVdb = vdb - *(ckt->CKTstate0 + inst->NUMOSvdb); delVsb = vsb - *(ckt->CKTstate0 + inst->NUMOSvsb); delVgb = vgb - *(ckt->CKTstate0 + inst->NUMOSvgb); NUMOSsetBCs(pDevice, vdb - delVdb, vsb - delVsb, vgb - delVgb); } if (doInitSolve) { if (TWOdcDebug) { printVoltages(stdout, model->NUMOSmodName, inst->NUMOSname, deviceType, 3, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); } startTime2 = SPfrontEnd->IFseconds(); TWOequilSolve(pDevice); totalTime2 = SPfrontEnd->IFseconds() - startTime2; pDevice->pStats->totalTime[STAT_SETUP] += totalTime2; pDevice->pStats->totalTime[STAT_DC] -= totalTime2; TWObiasSolve(pDevice, MaxIterations, FALSE, NULL); *(ckt->CKTstate0 + inst->NUMOSvdb) = 0.0; *(ckt->CKTstate0 + inst->NUMOSvsb) = 0.0; *(ckt->CKTstate0 + inst->NUMOSvgb) = 0.0; if (initStateName != NULL) { if (TWOreadState(pDevice, initStateName, 3, &vdb, &vgb, &vsb ) < 0) { fprintf(stderr, "NUMOSload: trouble reading state-file %s\n", initStateName); } else { NUMOSsetBCs(pDevice, vdb, vsb, vgb); delVdb = delVsb = delVgb = 0.0; } } } /* * determine dc current and derivatives using the numerical routines */ if (ckt->CKTmode & (MODEDCOP | MODETRANOP | MODEDCTRANCURVE | MODEINITSMSIG)) { numDevNonCon = 0; inst->NUMOSc11 = inst->NUMOSy11r = inst->NUMOSy11i = 0.0; inst->NUMOSc12 = inst->NUMOSy12r = inst->NUMOSy12i = 0.0; inst->NUMOSc13 = inst->NUMOSy13r = inst->NUMOSy13i = 0.0; inst->NUMOSc21 = inst->NUMOSy21r = inst->NUMOSy21i = 0.0; inst->NUMOSc22 = inst->NUMOSy22r = inst->NUMOSy22i = 0.0; inst->NUMOSc23 = inst->NUMOSy23r = inst->NUMOSy23i = 0.0; inst->NUMOSc31 = inst->NUMOSy31r = inst->NUMOSy31i = 0.0; inst->NUMOSc32 = inst->NUMOSy32r = inst->NUMOSy32i = 0.0; inst->NUMOSc33 = inst->NUMOSy33r = inst->NUMOSy33i = 0.0; inst->NUMOSsmSigAvail = FALSE; devNonCon: NUMOSproject(pDevice, delVdb, delVsb, delVgb); if (TWOdcDebug) { printVoltages(stdout, model->NUMOSmodName, inst->NUMOSname, deviceType, 3, vdb, delVdb, vgb, delVgb, vsb, delVsb); } TWObiasSolve(pDevice, MaxIterations, FALSE, model->NUMOSpInfo); devConverged = pDevice->converged; if (devConverged && finite(pDevice->rhsNorm)) { /* compute the currents */ NUMOScurrent(pDevice, FALSE, NULL, &id, &is, &ig); NUMOSconductance(pDevice, FALSE, NULL, &g); /* * Add gmin to the gate conductance terms since they will be zero. * XXX This messes up the gXY output values, but we choose not to * correct this error, because it shouldn't cause practical problems. */ g.dIgDVdb += ckt->CKTgmin; g.dIgDVsb += ckt->CKTgmin; g.dIgDVgb += ckt->CKTgmin; } else { /* reduce the voltage step until converged */ /* restore boundary nodes to previous potential */ NUMOSsetBCs(pDevice, vdb - delVdb, vsb - delVsb, vgb - delVgb); TWOstoreInitialGuess(pDevice); TWOresetJacobian(pDevice); delVdb *= 0.5; delVsb *= 0.5; delVgb *= 0.5; vdb = delVdb + *(ckt->CKTstate0 + inst->NUMOSvdb); vsb = delVsb + *(ckt->CKTstate0 + inst->NUMOSvsb); vgb = delVgb + *(ckt->CKTstate0 + inst->NUMOSvgb); numDevNonCon++; icheck = 1; if (numDevNonCon > 10) { printVoltages(stderr, model->NUMOSmodName, inst->NUMOSname, deviceType, 3, vdb, delVdb, vgb, delVgb, vsb, delVsb); fprintf(stderr, "*** Non-convergence during load ***\n"); totalTime += SPfrontEnd->IFseconds() - startTime; pDevice->pStats->totalTime[STAT_DC] += totalTime; ckt->CKTtroubleElt = (GENinstance *) inst; return (E_BADMATRIX); } else { goto devNonCon; } } } if ((ckt->CKTmode & (MODETRAN | MODEAC)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) || (ckt->CKTmode & MODEINITSMSIG)) { /* * store small-signal parameters */ if ((!(ckt->CKTmode & MODETRANOP)) || (!(ckt->CKTmode & MODEUIC))) { if (ckt->CKTmode & MODEINITSMSIG) { totalTime += SPfrontEnd->IFseconds() - startTime; pDevice->pStats->totalTime[STAT_DC] += totalTime; startTime2 = SPfrontEnd->IFseconds(); NUMOSinitSmSig(inst); pDevice->pStats->totalTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime2; continue; } else { inst->NUMOSsmSigAvail = FALSE; } /* * transient analysis */ if (ckt->CKTmode & MODEINITPRED) { NUMOSsetBCs(pDevice, vdb, vsb, vgb); TWOstoreInitialGuess(pDevice); } else { NUMOSupdate(pDevice, delVdb, delVsb, delVgb, TRUE); } if (TWOtranDebug) { printVoltages(stdout, model->NUMOSmodName, inst->NUMOSname, deviceType, 3, vdb, delVdb, vgb, delVgb, vsb, delVsb); } TWObiasSolve(pDevice, 0, TRUE, model->NUMOSpInfo); if (!finite(pDevice->rhsNorm)) { totalTime += SPfrontEnd->IFseconds() - startTime; pDevice->pStats->totalTime[STAT_TRAN] += totalTime; ckt->CKTtroubleElt = (GENinstance *) inst; return (E_BADMATRIX); } devConverged = TWOdeviceConverged(pDevice); pDevice->converged = devConverged; /* compute the currents and conductances */ NUMOScurrent(pDevice, TRUE, model->NUMOSpInfo->intCoeff, &id, &is, &ig); NUMOSconductance(pDevice, TRUE, model->NUMOSpInfo->intCoeff, &g); } } /* * check convergence */ if ((!(ckt->CKTmode & MODEINITFIX)) || (!(inst->NUMOSoff))) { if (icheck == 1 || !devConverged) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) inst; } else { tol = ckt->CKTreltol * MAX(fabs(idhat), fabs(id)) + ckt->CKTabstol; if (fabs(idhat - id) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) inst; } else { tol = ckt->CKTreltol * MAX(fabs(ishat), fabs(is)) + ckt->CKTabstol; if (fabs(ishat - is) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) inst; } else { tol = ckt->CKTreltol * MAX(fabs(ighat), fabs(ig)) + ckt->CKTabstol; if (fabs(ighat - ig) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) inst; } } } } } *(ckt->CKTstate0 + inst->NUMOSvdb) = vdb; *(ckt->CKTstate0 + inst->NUMOSvsb) = vsb; *(ckt->CKTstate0 + inst->NUMOSvgb) = vgb; *(ckt->CKTstate0 + inst->NUMOSid) = id; *(ckt->CKTstate0 + inst->NUMOSis) = is; *(ckt->CKTstate0 + inst->NUMOSig) = ig; *(ckt->CKTstate0 + inst->NUMOSdIdDVdb) = g.dIdDVdb; *(ckt->CKTstate0 + inst->NUMOSdIdDVsb) = g.dIdDVsb; *(ckt->CKTstate0 + inst->NUMOSdIdDVgb) = g.dIdDVgb; *(ckt->CKTstate0 + inst->NUMOSdIsDVdb) = g.dIsDVdb; *(ckt->CKTstate0 + inst->NUMOSdIsDVsb) = g.dIsDVsb; *(ckt->CKTstate0 + inst->NUMOSdIsDVgb) = g.dIsDVgb; *(ckt->CKTstate0 + inst->NUMOSdIgDVdb) = g.dIgDVdb; *(ckt->CKTstate0 + inst->NUMOSdIgDVsb) = g.dIgDVsb; *(ckt->CKTstate0 + inst->NUMOSdIgDVgb) = g.dIgDVgb; load: /* * load current excitation vector */ ideq = id - g.dIdDVdb * vdb - g.dIdDVsb * vsb - g.dIdDVgb * vgb; iseq = is - g.dIsDVdb * vdb - g.dIsDVsb * vsb - g.dIsDVgb * vgb; igeq = ig - g.dIgDVdb * vdb - g.dIgDVsb * vsb - g.dIgDVgb * vgb; *(ckt->CKTrhs + inst->NUMOSdrainNode) -= ideq; *(ckt->CKTrhs + inst->NUMOSsourceNode) -= iseq; *(ckt->CKTrhs + inst->NUMOSgateNode) -= igeq; *(ckt->CKTrhs + inst->NUMOSbulkNode) += ideq + iseq + igeq; /* * load y matrix */ *(inst->NUMOSdrainDrainPtr) += g.dIdDVdb; *(inst->NUMOSdrainSourcePtr) += g.dIdDVsb; *(inst->NUMOSdrainGatePtr) += g.dIdDVgb; *(inst->NUMOSdrainBulkPtr) -= g.dIdDVdb + g.dIdDVsb + g.dIdDVgb; *(inst->NUMOSsourceDrainPtr) += g.dIsDVdb; *(inst->NUMOSsourceSourcePtr) += g.dIsDVsb; *(inst->NUMOSsourceGatePtr) += g.dIsDVgb; *(inst->NUMOSsourceBulkPtr) -= g.dIsDVdb + g.dIsDVsb + g.dIsDVgb; *(inst->NUMOSgateDrainPtr) += g.dIgDVdb; *(inst->NUMOSgateSourcePtr) += g.dIgDVsb; *(inst->NUMOSgateGatePtr) += g.dIgDVgb; *(inst->NUMOSgateBulkPtr) -= g.dIgDVdb + g.dIgDVsb + g.dIgDVgb; *(inst->NUMOSbulkDrainPtr) -= g.dIdDVdb + g.dIsDVdb + g.dIgDVdb; *(inst->NUMOSbulkSourcePtr) -= g.dIdDVsb + g.dIsDVsb + g.dIgDVsb; *(inst->NUMOSbulkGatePtr) -= g.dIdDVgb + g.dIsDVgb + g.dIgDVgb; *(inst->NUMOSbulkBulkPtr) += g.dIdDVdb + g.dIdDVsb + g.dIdDVgb + g.dIsDVdb + g.dIsDVsb + g.dIsDVgb + g.dIgDVdb + g.dIgDVsb + g.dIgDVgb; totalTime += SPfrontEnd->IFseconds() - startTime; if (ckt->CKTmode & MODETRAN) { pDevice->pStats->totalTime[STAT_TRAN] += totalTime; } else { pDevice->pStats->totalTime[STAT_DC] += totalTime; } } } return (OK); } int NUMOSinitSmSig(NUMOSinstance *inst) { struct mosAdmittances yAc; double omega = NUMOSmodPtr(inst)->NUMOSmethods->METHomega; AcAnalysisMethod = SOR_ONLY; (void) NUMOSadmittance(inst->NUMOSpDevice, omega, &yAc); inst->NUMOSc11 = yAc.yIdVdb.imag / omega; inst->NUMOSc12 = yAc.yIdVgb.imag / omega; inst->NUMOSc13 = yAc.yIdVsb.imag / omega; inst->NUMOSc21 = yAc.yIgVdb.imag / omega; inst->NUMOSc22 = yAc.yIgVgb.imag / omega; inst->NUMOSc23 = yAc.yIgVsb.imag / omega; inst->NUMOSc31 = yAc.yIsVdb.imag / omega; inst->NUMOSc32 = yAc.yIsVgb.imag / omega; inst->NUMOSc33 = yAc.yIsVsb.imag / omega; inst->NUMOSy11r = yAc.yIdVdb.real; inst->NUMOSy11i = yAc.yIdVdb.imag; inst->NUMOSy12r = yAc.yIdVgb.real; inst->NUMOSy12i = yAc.yIdVgb.imag; inst->NUMOSy13r = yAc.yIdVsb.real; inst->NUMOSy13i = yAc.yIdVsb.imag; inst->NUMOSy21r = yAc.yIgVdb.real; inst->NUMOSy21i = yAc.yIgVdb.imag; inst->NUMOSy22r = yAc.yIgVgb.real; inst->NUMOSy22i = yAc.yIgVgb.imag; inst->NUMOSy23r = yAc.yIgVsb.real; inst->NUMOSy23i = yAc.yIgVsb.imag; inst->NUMOSy31r = yAc.yIsVdb.real; inst->NUMOSy31i = yAc.yIsVdb.imag; inst->NUMOSy32r = yAc.yIsVgb.real; inst->NUMOSy32i = yAc.yIsVgb.imag; inst->NUMOSy33r = yAc.yIsVsb.real; inst->NUMOSy33i = yAc.yIsVsb.imag; inst->NUMOSsmSigAvail = TRUE; return (OK); } tmpk8ny_4pz/src/spicelib/devices/numos/numm.c0000644000175000017500000000736213546075722021454 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "numosdef.h" #include "ngspice/suffix.h" /* * This file defines the 2d Numerical MOSFET data structures that are * available to the next level(s) up the calling hierarchy */ IFparm NUMOSpTable[] = { /* parameters */ IP("off", NUMOS_OFF, IF_FLAG, "Device initially off"), IP("ic.file", NUMOS_IC_FILE, IF_STRING, "Initial condition file"), IOP("area", NUMOS_AREA, IF_REAL, "Area factor"), IOP("w", NUMOS_WIDTH, IF_REAL, "Width factor"), IOP("l", NUMOS_LENGTH, IF_REAL, "Length factor"), IP("save", NUMOS_PRINT, IF_INTEGER, "Save solutions"), IPR("print", NUMOS_PRINT, IF_INTEGER, "Print solutions"), OP("g11", NUMOS_G11, IF_REAL, "Conductance"), OP("c11", NUMOS_C11, IF_REAL, "Capacitance"), OP("y11", NUMOS_Y11, IF_COMPLEX, "Admittance"), OP("g12", NUMOS_G12, IF_REAL, "Conductance"), OP("c12", NUMOS_C12, IF_REAL, "Capacitance"), OP("y12", NUMOS_Y12, IF_COMPLEX, "Admittance"), OP("g13", NUMOS_G13, IF_REAL, "Conductance"), OP("c13", NUMOS_C13, IF_REAL, "Capacitance"), OP("y13", NUMOS_Y13, IF_COMPLEX, "Admittance"), OPU("g14", NUMOS_G14, IF_REAL, "Conductance"), OPU("c14", NUMOS_C14, IF_REAL, "Capacitance"), OPU("y14", NUMOS_Y14, IF_COMPLEX, "Admittance"), OP("g21", NUMOS_G21, IF_REAL, "Conductance"), OP("c21", NUMOS_C21, IF_REAL, "Capacitance"), OP("y21", NUMOS_Y21, IF_COMPLEX, "Admittance"), OP("g22", NUMOS_G22, IF_REAL, "Conductance"), OP("c22", NUMOS_C22, IF_REAL, "Capacitance"), OP("y22", NUMOS_Y22, IF_COMPLEX, "Admittance"), OP("g23", NUMOS_G23, IF_REAL, "Conductance"), OP("c23", NUMOS_C23, IF_REAL, "Capacitance"), OP("y23", NUMOS_Y23, IF_COMPLEX, "Admittance"), OPU("g24", NUMOS_G24, IF_REAL, "Conductance"), OPU("c24", NUMOS_C24, IF_REAL, "Capacitance"), OPU("y24", NUMOS_Y24, IF_COMPLEX, "Admittance"), OP("g31", NUMOS_G31, IF_REAL, "Conductance"), OP("c31", NUMOS_C31, IF_REAL, "Capacitance"), OP("y31", NUMOS_Y31, IF_COMPLEX, "Admittance"), OP("g32", NUMOS_G32, IF_REAL, "Conductance"), OP("c32", NUMOS_C32, IF_REAL, "Capacitance"), OP("y32", NUMOS_Y32, IF_COMPLEX, "Admittance"), OP("g33", NUMOS_G33, IF_REAL, "Conductance"), OP("c33", NUMOS_C33, IF_REAL, "Capacitance"), OP("y33", NUMOS_Y33, IF_COMPLEX, "Admittance"), OPU("g34", NUMOS_G34, IF_REAL, "Conductance"), OPU("c34", NUMOS_C34, IF_REAL, "Capacitance"), OPU("y34", NUMOS_Y34, IF_COMPLEX, "Admittance"), OPU("g41", NUMOS_G41, IF_REAL, "Conductance"), OPU("c41", NUMOS_C41, IF_REAL, "Capacitance"), OPU("y41", NUMOS_Y41, IF_COMPLEX, "Admittance"), OPU("g42", NUMOS_G42, IF_REAL, "Conductance"), OPU("c42", NUMOS_C42, IF_REAL, "Capacitance"), OPU("y42", NUMOS_Y42, IF_COMPLEX, "Admittance"), OPU("g43", NUMOS_G43, IF_REAL, "Conductance"), OPU("c43", NUMOS_C43, IF_REAL, "Capacitance"), OPU("y43", NUMOS_Y43, IF_COMPLEX, "Admittance"), OPU("g44", NUMOS_G44, IF_REAL, "Conductance"), OPU("c44", NUMOS_C44, IF_REAL, "Capacitance"), OPU("y44", NUMOS_Y44, IF_COMPLEX, "Admittance"), IOP("temp", NUMOS_TEMP, IF_REAL, "Instance temperature") }; IFparm NUMOSmPTable[] = { /* model parameters */ /* numerical-device models no longer have parameters */ /* one is left behind to keep the table from being empty */ IP("numos", NUMOS_MOD_NUMOS, IF_FLAG, "Numerical MOSFET"), }; char *NUMOSnames[] = { "Drain", "Gate", "Source", "Substrate" }; int NUMOSnSize = NUMELEMS(NUMOSnames); int NUMOSpTSize = NUMELEMS(NUMOSpTable); int NUMOSmPTSize = NUMELEMS(NUMOSmPTable); int NUMOSiSize = sizeof(NUMOSinstance); int NUMOSmSize = sizeof(NUMOSmodel); tmpk8ny_4pz/src/spicelib/devices/numos/nummparm.c0000644000175000017500000000245513546075722022332 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * This routine sets instance parameters for NUMOSs in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "numosdef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int NUMOSparam(int param, IFvalue *value, GENinstance *inInst, IFvalue *select) { register NUMOSinstance *inst = (NUMOSinstance *) inInst; NG_IGNORE(select); switch (param) { case NUMOS_AREA: inst->NUMOSarea = value->rValue; inst->NUMOSareaGiven = TRUE; break; case NUMOS_WIDTH: inst->NUMOSwidth = value->rValue; inst->NUMOSwidthGiven = TRUE; break; case NUMOS_LENGTH: inst->NUMOSlength = value->rValue; inst->NUMOSlengthGiven = TRUE; break; case NUMOS_OFF: inst->NUMOSoff = TRUE; break; case NUMOS_IC_FILE: inst->NUMOSicFile = value->sValue; inst->NUMOSicFileGiven = TRUE; break; case NUMOS_PRINT: inst->NUMOSprint = value->iValue; inst->NUMOSprintGiven = TRUE; break; case NUMOS_TEMP: inst->NUMOStemp = value->rValue + CONSTCtoK; inst->NUMOStempGiven = TRUE; break; default: return (E_BADPARM); } return (OK); } tmpk8ny_4pz/src/spicelib/devices/numos/numosdef.h0000644000175000017500000002006513546075722022320 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors: 1987 Karti Mayaram, 1991 David Gates **********/ #ifndef NUMOS_H #define NUMOS_H /* data structures used to describe 2D Numerical MOSFETs */ /* circuit level includes */ #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" /* device level includes */ #include "ngspice/twomesh.h" #include "ngspice/twodev.h" #include "ngspice/profile.h" #include "ngspice/numglobs.h" #include "ngspice/carddefs.h" /* information needed per instance */ typedef struct sNUMOSinstance { struct GENinstance gen; #define NUMOSmodPtr(inst) ((struct sNUMOSmodel *)((inst)->gen.GENmodPtr)) #define NUMOSnextInstance(inst) ((struct sNUMOSinstance *)((inst)->gen.GENnextInstance)) #define NUMOSname gen.GENname #define NUMOSstate gen.GENstate #define NUMOSvdb NUMOSstate #define NUMOSvsb NUMOSstate+1 #define NUMOSvgb NUMOSstate+2 #define NUMOSid NUMOSstate+3 #define NUMOSis NUMOSstate+4 #define NUMOSig NUMOSstate+5 #define NUMOSdIdDVdb NUMOSstate+6 #define NUMOSdIdDVsb NUMOSstate+7 #define NUMOSdIdDVgb NUMOSstate+8 #define NUMOSdIsDVdb NUMOSstate+9 #define NUMOSdIsDVsb NUMOSstate+10 #define NUMOSdIsDVgb NUMOSstate+11 #define NUMOSdIgDVdb NUMOSstate+12 #define NUMOSdIgDVsb NUMOSstate+13 #define NUMOSdIgDVgb NUMOSstate+14 #define NUMOSnumStates 15 const int NUMOSdrainNode; /* number of drain node of MOSFET */ const int NUMOSgateNode; /* number of gate node of MOSFET */ const int NUMOSsourceNode; /* number of source node of MOSFET */ const int NUMOSbulkNode; /* number of bulk node of MOSFET */ double NUMOSarea; /* area factor for the mosfet */ double NUMOSwidth; /* width factor for the mosfet */ double NUMOSlength; /* length factor for the mosfet */ TWOdevice *NUMOSpDevice; int NUMOStype; double NUMOStemp; /* Instance Temperature */ double NUMOSc11; /* small-signal capacitance */ double NUMOSy11r; /* small-signal admittance, real part */ double NUMOSy11i; /* small-signal admittance, imag part */ double NUMOSc12; /* small-signal capacitance */ double NUMOSy12r; /* small-signal admittance, real part */ double NUMOSy12i; /* small-signal admittance, imag part */ double NUMOSc13; /* small-signal capacitance */ double NUMOSy13r; /* small-signal admittance, real part */ double NUMOSy13i; /* small-signal admittance, imag part */ double NUMOSc21; /* small-signal capacitance */ double NUMOSy21r; /* small-signal admittance, real part */ double NUMOSy21i; /* small-signal admittance, imag part */ double NUMOSc22; /* small-signal capacitance */ double NUMOSy22r; /* small-signal admittance, real part */ double NUMOSy22i; /* small-signal admittance, imag part */ double NUMOSc23; /* small-signal capacitance */ double NUMOSy23r; /* small-signal admittance, real part */ double NUMOSy23i; /* small-signal admittance, imag part */ double NUMOSc31; /* small-signal capacitance */ double NUMOSy31r; /* small-signal admittance, real part */ double NUMOSy31i; /* small-signal admittance, imag part */ double NUMOSc32; /* small-signal capacitance */ double NUMOSy32r; /* small-signal admittance, real part */ double NUMOSy32i; /* small-signal admittance, imag part */ double NUMOSc33; /* small-signal capacitance */ double NUMOSy33r; /* small-signal admittance, real part */ double NUMOSy33i; /* small-signal admittance, imag part */ GLOBvalues NUMOSglobals; /* Temp.-Dep. Global Parameters */ int NUMOSprint; /* print timepoints */ char *NUMOSicFile; /* Name of initial condition file */ double *NUMOSdrainDrainPtr; /* pointer to sparse matrix at (drain,drain) */ double *NUMOSdrainSourcePtr; /* pointer to sparse matrix at (drain,source) */ double *NUMOSdrainGatePtr; /* pointer to sparse matrix at (drain,gate) */ double *NUMOSdrainBulkPtr; /* pointer to sparse matrix at (drain,bulk) */ double *NUMOSsourceDrainPtr; /* pointer to sparse matrix at (source,drain) */ double *NUMOSsourceSourcePtr; /* pointer to sparse matrix at * (source,source) */ double *NUMOSsourceGatePtr; /* pointer to sparse matrix at (source,gate) */ double *NUMOSsourceBulkPtr; /* pointer to sparse matrix at (source,bulk) */ double *NUMOSgateDrainPtr; /* pointer to sparse matrix at (gate,drain) */ double *NUMOSgateSourcePtr; /* pointer to sparse matrix at (gate,source) */ double *NUMOSgateGatePtr; /* pointer to sparse matrix at (gate,gate) */ double *NUMOSgateBulkPtr; /* pointer to sparse matrix at (gate,bulk) */ double *NUMOSbulkDrainPtr; /* pointer to sparse matrix at (bulk,drain) */ double *NUMOSbulkSourcePtr; /* pointer to sparse matrix at (bulk,source) */ double *NUMOSbulkGatePtr; /* pointer to sparse matrix at (bulk,gate) */ double *NUMOSbulkBulkPtr; /* pointer to sparse matrix at (bulk,bulk) */ int NUMOSoff; /* 'off' flag for mosfet */ unsigned NUMOSsmSigAvail:1; /* flag to indicate small-signal done */ unsigned NUMOSareaGiven:1; /* flag to indicate area was specified */ unsigned NUMOSwidthGiven:1; /* flag to indicate width was specified */ unsigned NUMOSlengthGiven:1; /* flag to indicate length was specified */ unsigned NUMOSicFileGiven:1; /* flag to indicate init. cond. file given */ unsigned NUMOSprintGiven:1; /* flag to indicate print was given */ unsigned NUMOStempGiven:1; /* flag to indicate temp was given */ } NUMOSinstance; /* per model data */ typedef struct sNUMOSmodel { /* model structure for a numerical device */ struct GENmodel gen; #define NUMOSmodType gen.GENmodType #define NUMOSnextModel(inst) ((struct sNUMOSmodel *)((inst)->gen.GENnextModel)) #define NUMOSinstances(inst) ((NUMOSinstance *)((inst)->gen.GENinstances)) #define NUMOSmodName gen.GENmodName MESHcard *NUMOSxMeshes; /* list of xmesh cards */ MESHcard *NUMOSyMeshes; /* list of ymesh cards */ DOMNcard *NUMOSdomains; /* list of domain cards */ BDRYcard *NUMOSboundaries; /* list of boundary cards */ DOPcard *NUMOSdopings; /* list of doping cards */ ELCTcard *NUMOSelectrodes; /* list of electrode cards */ CONTcard *NUMOScontacts; /* list of contact cards */ MODLcard *NUMOSmodels; /* list of model cards */ MATLcard *NUMOSmaterials; /* list of material cards */ MOBcard *NUMOSmobility; /* list of mobility cards */ METHcard *NUMOSmethods; /* list of method cards */ OPTNcard *NUMOSoptions; /* list of option cards */ OUTPcard *NUMOSoutputs; /* list of output cards */ TWOtranInfo *NUMOSpInfo; /* transient analysis information */ DOPprofile *NUMOSprofiles; /* expanded list of doping profiles */ DOPtable *NUMOSdopTables; /* list of tables used by profiles */ TWOmaterial *NUMOSmatlInfo; /* list of material info structures */ } NUMOSmodel; /* type of 2D MOSFET */ #define N_CH 1 #define P_CH -1 /* device parameters */ #define NUMOS_AREA 1 #define NUMOS_WIDTH 2 #define NUMOS_LENGTH 3 #define NUMOS_OFF 4 #define NUMOS_IC_FILE 5 #define NUMOS_PRINT 9 #define NUMOS_TEMP 10 #define NUMOS_G11 11 #define NUMOS_C11 12 #define NUMOS_Y11 13 #define NUMOS_G12 14 #define NUMOS_C12 15 #define NUMOS_Y12 16 #define NUMOS_G13 17 #define NUMOS_C13 18 #define NUMOS_Y13 19 #define NUMOS_G14 20 #define NUMOS_C14 21 #define NUMOS_Y14 22 #define NUMOS_G21 23 #define NUMOS_C21 24 #define NUMOS_Y21 25 #define NUMOS_G22 26 #define NUMOS_C22 27 #define NUMOS_Y22 28 #define NUMOS_G23 29 #define NUMOS_C23 30 #define NUMOS_Y23 31 #define NUMOS_G24 32 #define NUMOS_C24 33 #define NUMOS_Y24 34 #define NUMOS_G31 35 #define NUMOS_C31 36 #define NUMOS_Y31 37 #define NUMOS_G32 38 #define NUMOS_C32 39 #define NUMOS_Y32 40 #define NUMOS_G33 41 #define NUMOS_C33 42 #define NUMOS_Y33 43 #define NUMOS_G34 44 #define NUMOS_C34 45 #define NUMOS_Y34 46 #define NUMOS_G41 47 #define NUMOS_C41 48 #define NUMOS_Y41 49 #define NUMOS_G42 50 #define NUMOS_C42 51 #define NUMOS_Y42 52 #define NUMOS_G43 53 #define NUMOS_C43 54 #define NUMOS_Y43 55 #define NUMOS_G44 56 #define NUMOS_C44 57 #define NUMOS_Y44 58 /* model parameters */ /* NOTE: all true model parameters have been moved to IFcardInfo structures */ #define NUMOS_MOD_NUMOS 1 /* device questions */ /* model questions */ #include "numosext.h" #endif /* NUMOS_H */ tmpk8ny_4pz/src/spicelib/devices/numos/numositf.h0000644000175000017500000000027313546075722022343 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_NUMOS #define DEV_NUMOS extern SPICEdev *get_numos_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/numos/nummask.c0000644000175000017500000002540513546075722022151 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "numosdef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* Externals Declarations */ extern int NUMOSinitSmSig(NUMOSinstance *); /* ARGSUSED */ int NUMOSask(CKTcircuit *ckt, GENinstance *inInst, int which, IFvalue *value, IFvalue *select) { NUMOSinstance *inst = (NUMOSinstance *) inInst; NG_IGNORE(select); switch (which) { case NUMOS_AREA: value->rValue = inst->NUMOSarea; return (OK); case NUMOS_WIDTH: value->rValue = inst->NUMOSwidth; return (OK); case NUMOS_LENGTH: value->rValue = inst->NUMOSlength; return (OK); case NUMOS_TEMP: value->rValue = inst->NUMOStemp - CONSTCtoK; return (OK); case NUMOS_G11: value->rValue = *(ckt->CKTstate0 + inst->NUMOSdIdDVdb); return (OK); case NUMOS_G12: value->rValue = *(ckt->CKTstate0 + inst->NUMOSdIdDVgb); return (OK); case NUMOS_G13: value->rValue = *(ckt->CKTstate0 + inst->NUMOSdIdDVsb); return (OK); case NUMOS_G14: value->rValue = -*(ckt->CKTstate0 + inst->NUMOSdIdDVdb) - *(ckt->CKTstate0 + inst->NUMOSdIdDVgb) - *(ckt->CKTstate0 + inst->NUMOSdIdDVsb); return (OK); case NUMOS_G21: value->rValue = *(ckt->CKTstate0 + inst->NUMOSdIgDVdb); return (OK); case NUMOS_G22: value->rValue = *(ckt->CKTstate0 + inst->NUMOSdIgDVgb); return (OK); case NUMOS_G23: value->rValue = *(ckt->CKTstate0 + inst->NUMOSdIgDVsb); return (OK); case NUMOS_G24: value->rValue = -*(ckt->CKTstate0 + inst->NUMOSdIgDVdb) - *(ckt->CKTstate0 + inst->NUMOSdIgDVgb) - *(ckt->CKTstate0 + inst->NUMOSdIgDVsb); return (OK); case NUMOS_G31: value->rValue = *(ckt->CKTstate0 + inst->NUMOSdIsDVdb); return (OK); case NUMOS_G32: value->rValue = *(ckt->CKTstate0 + inst->NUMOSdIsDVgb); return (OK); case NUMOS_G33: value->rValue = *(ckt->CKTstate0 + inst->NUMOSdIsDVsb); return (OK); case NUMOS_G34: value->rValue = -*(ckt->CKTstate0 + inst->NUMOSdIsDVdb) - *(ckt->CKTstate0 + inst->NUMOSdIsDVgb) - *(ckt->CKTstate0 + inst->NUMOSdIsDVsb); return (OK); case NUMOS_G41: value->rValue = -*(ckt->CKTstate0 + inst->NUMOSdIdDVdb) - *(ckt->CKTstate0 + inst->NUMOSdIgDVdb) - *(ckt->CKTstate0 + inst->NUMOSdIsDVdb); return (OK); case NUMOS_G42: value->rValue = -*(ckt->CKTstate0 + inst->NUMOSdIdDVgb) - *(ckt->CKTstate0 + inst->NUMOSdIgDVgb) - *(ckt->CKTstate0 + inst->NUMOSdIsDVgb); return (OK); case NUMOS_G43: value->rValue = -*(ckt->CKTstate0 + inst->NUMOSdIdDVsb) - *(ckt->CKTstate0 + inst->NUMOSdIgDVsb) - *(ckt->CKTstate0 + inst->NUMOSdIsDVsb); return (OK); case NUMOS_G44: value->rValue = *(ckt->CKTstate0 + inst->NUMOSdIdDVdb) + *(ckt->CKTstate0 + inst->NUMOSdIgDVdb) + *(ckt->CKTstate0 + inst->NUMOSdIsDVdb) + *(ckt->CKTstate0 + inst->NUMOSdIdDVgb) + *(ckt->CKTstate0 + inst->NUMOSdIgDVgb) + *(ckt->CKTstate0 + inst->NUMOSdIsDVgb) + *(ckt->CKTstate0 + inst->NUMOSdIdDVsb) + *(ckt->CKTstate0 + inst->NUMOSdIgDVsb) + *(ckt->CKTstate0 + inst->NUMOSdIsDVsb); return (OK); case NUMOS_C11: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->rValue = inst->NUMOSc11; return (OK); case NUMOS_C12: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->rValue = inst->NUMOSc12; return (OK); case NUMOS_C13: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->rValue = inst->NUMOSc13; return (OK); case NUMOS_C14: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->rValue = -inst->NUMOSc11 - inst->NUMOSc12 - inst->NUMOSc13; return (OK); case NUMOS_C21: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->rValue = inst->NUMOSc21; return (OK); case NUMOS_C22: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->rValue = inst->NUMOSc22; return (OK); case NUMOS_C23: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->rValue = inst->NUMOSc23; return (OK); case NUMOS_C24: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->rValue = -inst->NUMOSc21 - inst->NUMOSc22 - inst->NUMOSc23; return (OK); case NUMOS_C31: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->rValue = inst->NUMOSc31; return (OK); case NUMOS_C32: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->rValue = inst->NUMOSc32; return (OK); case NUMOS_C33: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->rValue = inst->NUMOSc33; return (OK); case NUMOS_C34: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->rValue = -inst->NUMOSc31 - inst->NUMOSc32 - inst->NUMOSc33; return (OK); case NUMOS_C41: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->rValue = -inst->NUMOSc11 - inst->NUMOSc21 - inst->NUMOSc31; return (OK); case NUMOS_C42: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->rValue = -inst->NUMOSc12 - inst->NUMOSc22 - inst->NUMOSc32; return (OK); case NUMOS_C43: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->rValue = -inst->NUMOSc13 - inst->NUMOSc23 - inst->NUMOSc33; return (OK); case NUMOS_C44: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->rValue = inst->NUMOSc11 + inst->NUMOSc12 + inst->NUMOSc13 + inst->NUMOSc21 + inst->NUMOSc22 + inst->NUMOSc23 + inst->NUMOSc31 + inst->NUMOSc32 + inst->NUMOSc33; return (OK); case NUMOS_Y11: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->cValue.real = inst->NUMOSy11r; value->cValue.imag = inst->NUMOSy11i; return (OK); case NUMOS_Y12: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->cValue.real = inst->NUMOSy12r; value->cValue.imag = inst->NUMOSy12i; return (OK); case NUMOS_Y13: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->cValue.real = inst->NUMOSy13r; value->cValue.imag = inst->NUMOSy13i; return (OK); case NUMOS_Y14: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->cValue.real = -inst->NUMOSy11r - inst->NUMOSy11r - inst->NUMOSy11r; value->cValue.imag = -inst->NUMOSy11i - inst->NUMOSy11i - inst->NUMOSy11i; return (OK); case NUMOS_Y21: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->cValue.real = inst->NUMOSy21r; value->cValue.imag = inst->NUMOSy21i; return (OK); case NUMOS_Y22: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->cValue.real = inst->NUMOSy22r; value->cValue.imag = inst->NUMOSy22i; return (OK); case NUMOS_Y23: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->cValue.real = inst->NUMOSy23r; value->cValue.imag = inst->NUMOSy23i; return (OK); case NUMOS_Y24: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->cValue.real = -inst->NUMOSy21r - inst->NUMOSy22r - inst->NUMOSy23r; value->cValue.imag = -inst->NUMOSy21i - inst->NUMOSy22i - inst->NUMOSy23i; return (OK); case NUMOS_Y31: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->cValue.real = inst->NUMOSy31r; value->cValue.imag = inst->NUMOSy31i; return (OK); case NUMOS_Y32: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->cValue.real = inst->NUMOSy32r; value->cValue.imag = inst->NUMOSy32i; return (OK); case NUMOS_Y33: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->cValue.real = inst->NUMOSy33r; value->cValue.imag = inst->NUMOSy33i; return (OK); case NUMOS_Y34: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->cValue.real = -inst->NUMOSy31r - inst->NUMOSy32r - inst->NUMOSy33r; value->cValue.imag = -inst->NUMOSy31i - inst->NUMOSy32i - inst->NUMOSy33i; return (OK); case NUMOS_Y41: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->cValue.real = -inst->NUMOSy11r - inst->NUMOSy21r - inst->NUMOSy31r; value->cValue.imag = -inst->NUMOSy11i - inst->NUMOSy21i - inst->NUMOSy31i; return (OK); case NUMOS_Y42: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->cValue.real = -inst->NUMOSy12r - inst->NUMOSy22r - inst->NUMOSy32r; value->cValue.imag = -inst->NUMOSy12i - inst->NUMOSy22i - inst->NUMOSy32i; return (OK); case NUMOS_Y43: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->cValue.real = -inst->NUMOSy13r - inst->NUMOSy23r - inst->NUMOSy33r; value->cValue.imag = -inst->NUMOSy13i - inst->NUMOSy23i - inst->NUMOSy33i; return (OK); case NUMOS_Y44: if (!inst->NUMOSsmSigAvail && ckt->CKTcurrentAnalysis != DOING_TRAN) { NUMOSinitSmSig(inst); } value->cValue.real = inst->NUMOSy11r + inst->NUMOSy21r + inst->NUMOSy31r + inst->NUMOSy12r + inst->NUMOSy22r + inst->NUMOSy32r + inst->NUMOSy13r + inst->NUMOSy23r + inst->NUMOSy33r; value->cValue.imag = inst->NUMOSy11i + inst->NUMOSy21i + inst->NUMOSy31i + inst->NUMOSy12i + inst->NUMOSy22i + inst->NUMOSy32i + inst->NUMOSy13i + inst->NUMOSy23i + inst->NUMOSy33i; return (OK); default: return (E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/numos/nummdump.c0000644000175000017500000001174113546075722022336 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ /* * This is a simple routine to dump the internal device states. It produces * states for .OP, .DC, & .TRAN simulations. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "numosdef.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" /* Forward Declarations */ static void NUMOSputHeader(FILE *, CKTcircuit *, NUMOSinstance *); /* State Counter */ static int state_numOP = 0; static int state_numDC = 0; static int state_numTR = 0; void NUMOSdump(GENmodel *inModel, CKTcircuit *ckt) { register NUMOSmodel *model = (NUMOSmodel *) inModel; register NUMOSinstance *inst; OUTPcard *output; FILE *fpState; char fileName[BSIZE_SP]; char description[BSIZE_SP]; char *prefix; int *state_num; int anyOutput = 0; if (ckt->CKTmode & MODEDCOP) { prefix = "OP"; state_num = &state_numOP; sprintf(description, "..."); } else if (ckt->CKTmode & MODEDCTRANCURVE) { prefix = "DC"; state_num = &state_numDC; sprintf(description, "sweep = % e", ckt->CKTtime); } else if (ckt->CKTmode & MODETRAN) { prefix = "TR"; state_num = &state_numTR; sprintf(description, "time = % e", ckt->CKTtime); } else { /* Not a recognized CKT mode. */ return; } for (; model != NULL; model = NUMOSnextModel(model)) { output = model->NUMOSoutputs; for (inst = NUMOSinstances(model); inst != NULL; inst = NUMOSnextInstance(inst)) { if (inst->NUMOSprintGiven) { if ((ckt->CKTmode & MODETRAN) && ((ckt->CKTstat->STATaccepted - 1) % inst->NUMOSprint != 0)) { continue; } anyOutput = 1; sprintf(fileName, "%s%s.%d.%s", output->OUTProotFile, prefix, *state_num, inst->NUMOSname); if ((fpState = fopen(fileName, "wb")) == NULL) { perror(fileName); } else { NUMOSputHeader(fpState, ckt, inst); TWOprnSolution(fpState, inst->NUMOSpDevice, model->NUMOSoutputs); fclose(fpState); LOGmakeEntry(fileName, description); } } } } if (anyOutput) { (*state_num)++; } } #define NUMOSnumOutputs 10 static void NUMOSputHeader(FILE *file, CKTcircuit *ckt, NUMOSinstance *inst) { char *reference; double refVal = 0.0; int numVars = NUMOSnumOutputs; if (ckt->CKTmode & MODEDCOP) { reference = NULL; } else if (ckt->CKTmode & MODEDCTRANCURVE) { reference = "sweep"; refVal = ckt->CKTtime; numVars++; } else if (ckt->CKTmode & MODETRAN) { reference = "time"; refVal = ckt->CKTtime; numVars++; } else { reference = NULL; } fprintf(file, "Title: Device %s external state\n", inst->NUMOSname); fprintf(file, "Plotname: Device Operating Point\n"); fprintf(file, "Command: deftype v conductance S\n"); fprintf(file, "Flags: real\n"); fprintf(file, "No. Variables: %d\n", numVars); fprintf(file, "No. Points: 1\n"); numVars = 0; fprintf(file, "Variables:\n"); if (reference) { fprintf(file, "\t%d %s unknown\n", numVars++, reference); } fprintf(file, "\t%d v14 voltage\n", numVars++); fprintf(file, "\t%d v24 voltage\n", numVars++); fprintf(file, "\t%d v34 voltage\n", numVars++); fprintf(file, "\t%d i1 current\n", numVars++); fprintf(file, "\t%d i2 current\n", numVars++); fprintf(file, "\t%d i3 current\n", numVars++); fprintf(file, "\t%d i4 current\n", numVars++); fprintf(file, "\t%d g11 conductance\n", numVars++); fprintf(file, "\t%d g12 conductance\n", numVars++); fprintf(file, "\t%d g13 conductance\n", numVars++); fprintf(file, "Values:\n0"); if (reference) { fprintf(file, "\t% e\n", refVal); } fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NUMOSvdb)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NUMOSvgb)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NUMOSvsb)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NUMOSid)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NUMOSig)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NUMOSis)); fprintf(file, "\t% e\n", -*(ckt->CKTstate0 + inst->NUMOSid) - *(ckt->CKTstate0 + inst->NUMOSig) - *(ckt->CKTstate0 + inst->NUMOSis)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NUMOSdIdDVdb)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NUMOSdIdDVgb)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NUMOSdIdDVsb)); } void NUMOSacct(GENmodel *inModel, CKTcircuit *ckt, FILE *file) { register NUMOSmodel *model = (NUMOSmodel *) inModel; register NUMOSinstance *inst; OUTPcard *output; NG_IGNORE(ckt); for (; model != NULL; model = NUMOSnextModel(model)) { output = model->NUMOSoutputs; for (inst = NUMOSinstances(model); inst != NULL; inst = NUMOSnextInstance(inst)) { if (output->OUTPstats) { TWOmemStats(file, inst->NUMOSpDevice); TWOcpuStats(file, inst->NUMOSpDevice); } } } } tmpk8ny_4pz/src/spicelib/devices/numos/nummpzld.c0000644000175000017500000001021413546075722022334 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "numosdef.h" #include "ngspice/sperror.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" int NUMOSpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { register NUMOSmodel *model = (NUMOSmodel *) inModel; register NUMOSinstance *inst; struct mosAdmittances yAc; double startTime; NG_IGNORE(ckt); for (; model != NULL; model = NUMOSnextModel(model)) { FieldDepMobility = model->NUMOSmodels->MODLfieldDepMobility; TransDepMobility = model->NUMOSmodels->MODLtransDepMobility; SurfaceMobility = model->NUMOSmodels->MODLsurfaceMobility; Srh = model->NUMOSmodels->MODLsrh; Auger = model->NUMOSmodels->MODLauger; AvalancheGen = model->NUMOSmodels->MODLavalancheGen; OneCarrier = model->NUMOSmethods->METHoneCarrier; AcAnalysisMethod = model->NUMOSmethods->METHacAnalysisMethod; MobDeriv = model->NUMOSmethods->METHmobDeriv; TWOacDebug = model->NUMOSoutputs->OUTPacDebug; for (inst = NUMOSinstances(model); inst != NULL; inst = NUMOSnextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); /* Get Temp.-Dep. Global Parameters */ GLOBgetGlobals(&(inst->NUMOSglobals)); NUMOSys(inst->NUMOSpDevice, s, &yAc); *(inst->NUMOSdrainDrainPtr) += yAc.yIdVdb.real; *(inst->NUMOSdrainDrainPtr + 1) += yAc.yIdVdb.imag; *(inst->NUMOSdrainSourcePtr) += yAc.yIdVsb.real; *(inst->NUMOSdrainSourcePtr + 1) += yAc.yIdVsb.imag; *(inst->NUMOSdrainGatePtr) += yAc.yIdVgb.real; *(inst->NUMOSdrainGatePtr + 1) += yAc.yIdVgb.imag; *(inst->NUMOSdrainBulkPtr) -= yAc.yIdVdb.real + yAc.yIdVsb.real + yAc.yIdVgb.real; *(inst->NUMOSdrainBulkPtr + 1) -= yAc.yIdVdb.imag + yAc.yIdVsb.imag + yAc.yIdVgb.imag; *(inst->NUMOSsourceDrainPtr) += yAc.yIsVdb.real; *(inst->NUMOSsourceDrainPtr + 1) += yAc.yIsVdb.imag; *(inst->NUMOSsourceSourcePtr) += yAc.yIsVsb.real; *(inst->NUMOSsourceSourcePtr + 1) += yAc.yIsVsb.imag; *(inst->NUMOSsourceGatePtr) += yAc.yIsVgb.real; *(inst->NUMOSsourceGatePtr + 1) += yAc.yIsVgb.imag; *(inst->NUMOSsourceBulkPtr) -= yAc.yIsVdb.real + yAc.yIsVsb.real + yAc.yIsVgb.real; *(inst->NUMOSsourceBulkPtr + 1) -= yAc.yIsVdb.imag + yAc.yIsVsb.imag + yAc.yIsVgb.imag; *(inst->NUMOSgateDrainPtr) += yAc.yIgVdb.real; *(inst->NUMOSgateDrainPtr + 1) += yAc.yIgVdb.imag; *(inst->NUMOSgateSourcePtr) += yAc.yIgVsb.real; *(inst->NUMOSgateSourcePtr + 1) += yAc.yIgVsb.imag; *(inst->NUMOSgateGatePtr) += yAc.yIgVgb.real; *(inst->NUMOSgateGatePtr + 1) += yAc.yIgVgb.imag; *(inst->NUMOSgateBulkPtr) -= yAc.yIgVdb.real + yAc.yIgVsb.real + yAc.yIgVgb.real; *(inst->NUMOSgateBulkPtr + 1) -= yAc.yIgVdb.imag + yAc.yIgVsb.imag + yAc.yIgVgb.imag; *(inst->NUMOSbulkDrainPtr) -= yAc.yIdVdb.real + yAc.yIsVdb.real + yAc.yIgVdb.real; *(inst->NUMOSbulkDrainPtr + 1) -= yAc.yIdVdb.imag + yAc.yIsVdb.imag + yAc.yIgVdb.imag; *(inst->NUMOSbulkSourcePtr) -= yAc.yIdVsb.real + yAc.yIsVsb.real + yAc.yIgVsb.real; *(inst->NUMOSbulkSourcePtr + 1) -= yAc.yIdVsb.imag + yAc.yIsVsb.imag + yAc.yIgVsb.imag; *(inst->NUMOSbulkGatePtr) -= yAc.yIdVgb.real + yAc.yIsVgb.real + yAc.yIgVgb.real; *(inst->NUMOSbulkGatePtr + 1) -= yAc.yIdVgb.imag + yAc.yIsVgb.imag + yAc.yIgVgb.imag; *(inst->NUMOSbulkBulkPtr) += yAc.yIdVdb.real + yAc.yIdVsb.real + yAc.yIdVgb.real + yAc.yIsVdb.real + yAc.yIsVsb.real + yAc.yIsVgb.real + yAc.yIgVdb.real + yAc.yIgVsb.real + yAc.yIgVgb.real; *(inst->NUMOSbulkBulkPtr + 1) -= yAc.yIdVdb.imag + yAc.yIdVsb.imag + yAc.yIdVgb.imag + yAc.yIsVdb.imag + yAc.yIsVsb.imag + yAc.yIsVgb.imag + yAc.yIgVdb.imag + yAc.yIgVsb.imag + yAc.yIgVgb.imag; inst->NUMOSpDevice->pStats->totalTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/numos/numosinit.h0000644000175000017500000000040213546075722022516 0ustar carstencarsten#ifndef _NUMOSINIT_H #define _NUMOSINIT_H extern IFparm NUMOSpTable[ ]; extern IFparm NUMOSmPTable[ ]; extern char *NUMOSnames[ ]; extern int NUMOSpTSize; extern int NUMOSmPTSize; extern int NUMOSnSize; extern int NUMOSiSize; extern int NUMOSmSize; #endif tmpk8ny_4pz/src/spicelib/devices/numos/numosinit.c0000644000175000017500000000322313546075722022515 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "numositf.h" #include "numosext.h" #include "numosinit.h" SPICEdev NUMOSinfo = { .DEVpublic = { .name = "NUMOS", .description = "2D Numerical MOS Field Effect Transistor model", .terms = &NUMOSnSize, .numNames = &NUMOSnSize, .termNames = NUMOSnames, .numInstanceParms = &NUMOSpTSize, .instanceParms = NUMOSpTable, .numModelParms = &NUMOSmPTSize, .modelParms = NUMOSmPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = NUMOSparam, .DEVmodParam = NUMOSmParam, .DEVload = NUMOSload, .DEVsetup = NUMOSsetup, .DEVunsetup = NULL, .DEVpzSetup = NUMOSsetup, .DEVtemperature = NUMOStemp, .DEVtrunc = NUMOStrunc, .DEVfindBranch = NULL, .DEVacLoad = NUMOSacLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NUMOSdelete, .DEVsetic = NULL, .DEVask = NUMOSask, .DEVmodAsk = NULL, .DEVpzLoad = NUMOSpzLoad, .DEVconvTest = NULL, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &NUMOSiSize, .DEVmodSize = &NUMOSmSize, #ifdef CIDER .DEVdump = NUMOSdump, .DEVacct = NUMOSacct, #endif }; SPICEdev * get_numos_info(void) { return &NUMOSinfo; } tmpk8ny_4pz/src/spicelib/devices/numos/nummtemp.c0000644000175000017500000000706613546075722022343 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "numosdef.h" #include "ngspice/numenum.h" #include "ngspice/carddefs.h" #include "ngspice/sperror.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" int NUMOStemp(GENmodel *inModel, CKTcircuit *ckt) /* * perform the temperature update */ { register NUMOSmodel *model = (NUMOSmodel *) inModel; register NUMOSinstance *inst; METHcard *methods; MODLcard *models; OPTNcard *options; OUTPcard *outputs; TWOmaterial *pM, *pMaterial, *pNextMaterial; double startTime; /* loop through all the models */ for (; model != NULL; model = NUMOSnextModel(model)) { methods = model->NUMOSmethods; models = model->NUMOSmodels; options = model->NUMOSoptions; outputs = model->NUMOSoutputs; if (!options->OPTNtnomGiven) { options->OPTNtnom = ckt->CKTnomTemp; } for (pM = model->NUMOSmatlInfo; pM != NULL; pM = pM->next) { pM->tnom = options->OPTNtnom; } BandGapNarrowing = models->MODLbandGapNarrowing; ConcDepLifetime = models->MODLconcDepLifetime; TempDepMobility = models->MODLtempDepMobility; ConcDepMobility = models->MODLconcDepMobility; SurfaceMobility = models->MODLsurfaceMobility; MatchingMobility = models->MODLmatchingMobility; OneCarrier = methods->METHoneCarrier; for (inst = NUMOSinstances(model); inst != NULL; inst = NUMOSnextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); if (!inst->NUMOStempGiven) { inst->NUMOStemp = ckt->CKTtemp; } if (!inst->NUMOSareaGiven || inst->NUMOSarea <= 0.0) { inst->NUMOSarea = 1.0; } if (!inst->NUMOSwidthGiven || inst->NUMOSwidth <= 0.0) { inst->NUMOSwidth = 1.0; } inst->NUMOSpDevice->width = inst->NUMOSarea * inst->NUMOSwidth * options->OPTNdefw; /* Compute and save globals for this instance. */ GLOBcomputeGlobals(&(inst->NUMOSglobals), inst->NUMOStemp); /* Calculate new sets of material parameters. */ pM = model->NUMOSmatlInfo; pMaterial = inst->NUMOSpDevice->pMaterials; for (; pM != NULL; pM = pM->next, pMaterial = pMaterial->next) { /* Copy everything, then fix the incorrect pointer. */ pNextMaterial = pMaterial->next; memcpy(pMaterial, pM, sizeof(TWOmaterial)); pMaterial->next = pNextMaterial; /* Now do the temperature dependence. */ MATLtempDep(pMaterial, pMaterial->tnom); if (outputs->OUTPmaterial) { printMaterialInfo(pMaterial); } } /* Assign doping to the mesh. */ TWOsetDoping(inst->NUMOSpDevice, model->NUMOSprofiles, model->NUMOSdopTables); /* Assign physical parameters to the mesh. */ TWOsetup(inst->NUMOSpDevice); /* Assign boundary condition parameters. */ TWOsetBCparams(inst->NUMOSpDevice, model->NUMOSboundaries); /* Normalize everything. */ TWOnormalize(inst->NUMOSpDevice); /* Find the device's type. */ if (inst->NUMOSpDevice->pFirstContact->pNodes[0]->netConc < 0.0) { inst->NUMOStype = P_CH; if (OneCarrier) { methods->METHoneCarrier = P_TYPE; } } else { inst->NUMOStype = N_CH; if (OneCarrier) { methods->METHoneCarrier = N_TYPE; } } inst->NUMOSpDevice->pStats->totalTime[STAT_SETUP] += SPfrontEnd->IFseconds() - startTime; } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/numos/nummmpar.c0000644000175000017500000000134013546075722022322 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * This routine sets model parameters for NUMOSs in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "numosdef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int NUMOSmParam(int param, IFvalue *value, GENmodel *inModel) { NG_IGNORE(value); NG_IGNORE(inModel); switch (param) { case NUMOS_MOD_NUMOS: /* no action - already know it is a 2d-numerical MOS, but this */ /* makes life easier for spice-2 like parsers */ break; default: return (E_BADPARM); } return (OK); } tmpk8ny_4pz/src/spicelib/devices/numos/nummdel.c0000644000175000017500000000114613546075722022133 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * This routine deletes a NUMOS instance from the circuit and frees the * storage it was using. */ #include "ngspice/ngspice.h" #include "numosdef.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int NUMOSdelete(GENinstance *gen_inst) { NUMOSinstance *inst = (NUMOSinstance *) gen_inst; TWOdestroy(inst->NUMOSpDevice); return OK; } tmpk8ny_4pz/src/spicelib/devices/numos/nummtrun.c0000644000175000017500000000273513546075722022364 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * This routine performs truncation error calculations for NUMOSs in the * circuit. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "numosdef.h" #include "ngspice/sperror.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" int NUMOStrunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { register NUMOSmodel *model = (NUMOSmodel *) inModel; register NUMOSinstance *inst; double deltaNew; double deltaNorm[7]; double startTime; int i; for (i = 0; i <= ckt->CKTmaxOrder; i++) { deltaNorm[i] = ckt->CKTdeltaOld[i] / TNorm; } for (; model != NULL; model = NUMOSnextModel(model)) { OneCarrier = model->NUMOSmethods->METHoneCarrier; model->NUMOSpInfo->order = ckt->CKTorder; model->NUMOSpInfo->delta = deltaNorm; model->NUMOSpInfo->lteCoeff = computeLTECoeff(model->NUMOSpInfo); for (inst = NUMOSinstances(model); inst != NULL; inst = NUMOSnextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); deltaNew = TWOtrunc(inst->NUMOSpDevice, model->NUMOSpInfo, ckt->CKTdelta); *timeStep = MIN(*timeStep, deltaNew); inst->NUMOSpDevice->pStats->totalTime[STAT_TRAN] += SPfrontEnd->IFseconds() - startTime; } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/numos/nummset.c0000644000175000017500000002203713546075722022164 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "numosdef.h" #include "ngspice/numconst.h" #include "ngspice/numenum.h" #include "ngspice/meshext.h" #include "ngspice/sperror.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/cidersupt.h" #include "ngspice/ciderinp.h" #include "ngspice/suffix.h" #define TSCALLOC(var, size, type)\ if (size && (var = (type *)calloc(1, (unsigned)(size)*sizeof(type))) == NULL) {\ return(E_NOMEM);\ } int NUMOSsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* * load the structure with those pointers needed later for fast matrix * loading */ { register NUMOSmodel *model = (NUMOSmodel *) inModel; register NUMOSinstance *inst; METHcard *methods; MODLcard *models; OPTNcard *options; OUTPcard *outputs; int error, xIndex; int xMeshSize, yMeshSize; TWOdevice *pDevice; TWOcoord *xCoordList = NULL; TWOcoord *yCoordList = NULL; TWOdomain *domainList = NULL; TWOelectrode *electrodeList = NULL; TWOmaterial *pM, *pMaterial = NULL, *materialList = NULL; DOPprofile *profileList = NULL; DOPtable *dopTableList = NULL; double startTime; /* loop through all the models */ for (; model != NULL; model = NUMOSnextModel(model)) { if (!model->NUMOSpInfo) { TSCALLOC(model->NUMOSpInfo, 1, TWOtranInfo); } methods = model->NUMOSmethods; if (!methods) { TSCALLOC(methods, 1, METHcard); model->NUMOSmethods = methods; } models = model->NUMOSmodels; if (!models) { TSCALLOC(models, 1, MODLcard); model->NUMOSmodels = models; } options = model->NUMOSoptions; if (!options) { TSCALLOC(options, 1, OPTNcard); model->NUMOSoptions = options; } outputs = model->NUMOSoutputs; if (!outputs) { TSCALLOC(outputs, 1, OUTPcard); model->NUMOSoutputs = outputs; } if (!methods->METHvoltPredGiven) { methods->METHvoltPred = FALSE; } if (!methods->METHmobDerivGiven) { methods->METHmobDeriv = TRUE; } if (!methods->METHoneCarrierGiven) { methods->METHoneCarrier = FALSE; } if (!methods->METHacAnalysisMethodGiven) { methods->METHacAnalysisMethod = SOR; } if (!methods->METHdabstolGiven) { methods->METHdabstol = DABSTOL2D; } if (!methods->METHdreltolGiven) { methods->METHdreltol = ckt->CKTreltol; } if (!methods->METHitLimGiven) { methods->METHitLim = 50; } if (!methods->METHomegaGiven || methods->METHomega <= 0.0) { methods->METHomega = 2.0 * M_PI /* radians/sec */ ; } if (!options->OPTNdefaGiven || options->OPTNdefa <= 0.0) { options->OPTNdefa = 1.0e4 /* cm^2 */ ; } if (!options->OPTNdeflGiven || options->OPTNdefl <= 0.0) { options->OPTNdefl = 1.0e2 /* cm */ ; } if (!options->OPTNdefwGiven && options->OPTNdefaGiven) { options->OPTNdefw = options->OPTNdefa / options->OPTNdefl; } else if (!options->OPTNdefwGiven || options->OPTNdefw <= 0.0) { options->OPTNdefw = 1.0e2 /* cm */ ; } if (!options->OPTNdeviceTypeGiven) { options->OPTNdeviceType = OPTN_MOSFET; } if (!options->OPTNicFileGiven) { options->OPTNicFile = NULL; options->OPTNunique = FALSE; /* Can't form a unique name. */ } if (!options->OPTNuniqueGiven) { options->OPTNunique = FALSE; } OneCarrier = methods->METHoneCarrier; /* Set up the rest of the card lists */ if ((error = MODLsetup(model->NUMOSmodels)) != 0) return (error); BandGapNarrowing = models->MODLbandGapNarrowing; ConcDepLifetime = models->MODLconcDepLifetime; TempDepMobility = models->MODLtempDepMobility; ConcDepMobility = models->MODLconcDepMobility; SurfaceMobility = models->MODLsurfaceMobility; if ((error = OUTPsetup(model->NUMOSoutputs)) != 0) return (error); if ((error = MATLsetup(model->NUMOSmaterials, &materialList)) != 0) return (error); if ((error = MOBsetup(model->NUMOSmobility, materialList)) != 0) return (error); if ((error = MESHsetup('x', model->NUMOSxMeshes, &xCoordList, &xMeshSize)) != 0) return (error); if ((error = MESHsetup('y', model->NUMOSyMeshes, &yCoordList, &yMeshSize)) != 0) return (error); if ((error = DOMNsetup(model->NUMOSdomains, &domainList, xCoordList, yCoordList, materialList)) != 0) return (error); if ((error = BDRYsetup(model->NUMOSboundaries, xCoordList, yCoordList, domainList)) != 0) return (error); if ((error = ELCTsetup(model->NUMOSelectrodes, &electrodeList, xCoordList, yCoordList)) != 0) return (error); /* Make sure electrodes are OK. */ checkElectrodes(electrodeList, 4); /* NUMOS has 4 electrodes */ if ((error = CONTsetup(model->NUMOScontacts, electrodeList)) != 0) return (error); if ((error = DOPsetup(model->NUMOSdopings, &profileList, &dopTableList, xCoordList, yCoordList)) != 0) return (error); model->NUMOSmatlInfo = materialList; model->NUMOSprofiles = profileList; model->NUMOSdopTables = dopTableList; /* loop through all the instances of the model */ for (inst = NUMOSinstances(model); inst != NULL; inst = NUMOSnextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); if (!inst->NUMOSprintGiven) { inst->NUMOSprint = 0; } else if (inst->NUMOSprint <= 0) { inst->NUMOSprint = 1; } if (!inst->NUMOSicFileGiven) { if (options->OPTNunique) { inst->NUMOSicFile = tprintf("%s.%s", options->OPTNicFile, inst->NUMOSname); } else if (options->OPTNicFile != NULL) { inst->NUMOSicFile = tprintf("%s", options->OPTNicFile); } else { inst->NUMOSicFile = NULL; } } inst->NUMOSstate = *states; *states += NUMOSnumStates; if (!inst->NUMOSpDevice) { /* Assign the mesh info to each instance. */ TSCALLOC(pDevice, 1, TWOdevice); TSCALLOC(pDevice->pStats, 1, TWOstats); pDevice->name = inst->NUMOSname; pDevice->solverType = SLV_NONE; pDevice->numXNodes = xMeshSize; pDevice->numYNodes = yMeshSize; pDevice->xScale = MESHmkArray(xCoordList, xMeshSize); pDevice->yScale = MESHmkArray(yCoordList, yMeshSize); pDevice->abstol = methods->METHdabstol; pDevice->reltol = methods->METHdreltol; TSCALLOC(pDevice->elemArray, pDevice->numXNodes, TWOelem **); for (xIndex = 1; xIndex < pDevice->numXNodes; xIndex++) { TSCALLOC(pDevice->elemArray[xIndex], pDevice->numYNodes, TWOelem *); } /* Create a copy of material data that can change with temperature. */ pDevice->pMaterials = NULL; for (pM = materialList; pM != NULL; pM = pM->next) { if (pDevice->pMaterials == NULL) { TSCALLOC(pMaterial, 1, TWOmaterial); pDevice->pMaterials = pMaterial; } else { TSCALLOC(pMaterial->next, 1, TWOmaterial); pMaterial = pMaterial->next; } /* Copy everything, then fix the incorrect pointer. */ memcpy(pMaterial, pM, sizeof(TWOmaterial)); pMaterial->next = NULL; } /* Generate the mesh structure for the device. */ TWObuildMesh(pDevice, domainList, electrodeList, pDevice->pMaterials); /* Store the device info in the instance. */ inst->NUMOSpDevice = pDevice; } /* Now update the state pointers. */ TWOgetStatePointers(inst->NUMOSpDevice, states); /* Wipe out statistics from previous runs (if any). */ memset(inst->NUMOSpDevice->pStats, 0, sizeof(TWOstats)); inst->NUMOSpDevice->pStats->totalTime[STAT_SETUP] += SPfrontEnd->IFseconds() - startTime; /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if ((inst->ptr = SMPmakeElt(matrix, inst->first, inst->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(NUMOSdrainDrainPtr, NUMOSdrainNode, NUMOSdrainNode); TSTALLOC(NUMOSdrainSourcePtr, NUMOSdrainNode, NUMOSsourceNode); TSTALLOC(NUMOSdrainGatePtr, NUMOSdrainNode, NUMOSgateNode); TSTALLOC(NUMOSdrainBulkPtr, NUMOSdrainNode, NUMOSbulkNode); TSTALLOC(NUMOSsourceDrainPtr, NUMOSsourceNode, NUMOSdrainNode); TSTALLOC(NUMOSsourceSourcePtr, NUMOSsourceNode, NUMOSsourceNode); TSTALLOC(NUMOSsourceGatePtr, NUMOSsourceNode, NUMOSgateNode); TSTALLOC(NUMOSsourceBulkPtr, NUMOSsourceNode, NUMOSbulkNode); TSTALLOC(NUMOSgateDrainPtr, NUMOSgateNode, NUMOSdrainNode); TSTALLOC(NUMOSgateSourcePtr, NUMOSgateNode, NUMOSsourceNode); TSTALLOC(NUMOSgateGatePtr, NUMOSgateNode, NUMOSgateNode); TSTALLOC(NUMOSgateBulkPtr, NUMOSgateNode, NUMOSbulkNode); TSTALLOC(NUMOSbulkDrainPtr, NUMOSbulkNode, NUMOSdrainNode); TSTALLOC(NUMOSbulkSourcePtr, NUMOSbulkNode, NUMOSsourceNode); TSTALLOC(NUMOSbulkGatePtr, NUMOSbulkNode, NUMOSgateNode); TSTALLOC(NUMOSbulkBulkPtr, NUMOSbulkNode, NUMOSbulkNode); } /* Clean up lists */ killCoordInfo(xCoordList); killCoordInfo(yCoordList); killDomainInfo(domainList); killElectrodeInfo(electrodeList); } return (OK); } tmpk8ny_4pz/src/spicelib/devices/numos/nummacld.c0000644000175000017500000001412213546075722022270 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * Function to load the COMPLEX circuit matrix using the small signal * parameters saved during a previous DC operating point analysis. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "numosdef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/complex.h" #include "../../../ciderlib/twod/twoddefs.h" #include "../../../ciderlib/twod/twodext.h" #include "ngspice/cidersupt.h" int NUMOSacLoad(GENmodel *inModel, CKTcircuit *ckt) { register NUMOSmodel *model = (NUMOSmodel *) inModel; register NUMOSinstance *inst; struct mosAdmittances yAc; double startTime; for (; model != NULL; model = NUMOSnextModel(model)) { FieldDepMobility = model->NUMOSmodels->MODLfieldDepMobility; TransDepMobility = model->NUMOSmodels->MODLtransDepMobility; SurfaceMobility = model->NUMOSmodels->MODLsurfaceMobility; Srh = model->NUMOSmodels->MODLsrh; Auger = model->NUMOSmodels->MODLauger; AvalancheGen = model->NUMOSmodels->MODLavalancheGen; OneCarrier = model->NUMOSmethods->METHoneCarrier; AcAnalysisMethod = model->NUMOSmethods->METHacAnalysisMethod; MobDeriv = model->NUMOSmethods->METHmobDeriv; TWOacDebug = model->NUMOSoutputs->OUTPacDebug; for (inst = NUMOSinstances(model); inst != NULL; inst = NUMOSnextInstance(inst)) { startTime = SPfrontEnd->IFseconds(); /* Get Temp.-Dep. Global Parameters */ GLOBgetGlobals(&(inst->NUMOSglobals)); model->NUMOSmethods->METHacAnalysisMethod = NUMOSadmittance(inst->NUMOSpDevice, ckt->CKTomega, &yAc); *(inst->NUMOSdrainDrainPtr) += yAc.yIdVdb.real; *(inst->NUMOSdrainDrainPtr + 1) += yAc.yIdVdb.imag; *(inst->NUMOSdrainSourcePtr) += yAc.yIdVsb.real; *(inst->NUMOSdrainSourcePtr + 1) += yAc.yIdVsb.imag; *(inst->NUMOSdrainGatePtr) += yAc.yIdVgb.real; *(inst->NUMOSdrainGatePtr + 1) += yAc.yIdVgb.imag; *(inst->NUMOSdrainBulkPtr) -= yAc.yIdVdb.real + yAc.yIdVsb.real + yAc.yIdVgb.real; *(inst->NUMOSdrainBulkPtr + 1) -= yAc.yIdVdb.imag + yAc.yIdVsb.imag + yAc.yIdVgb.imag; *(inst->NUMOSsourceDrainPtr) += yAc.yIsVdb.real; *(inst->NUMOSsourceDrainPtr + 1) += yAc.yIsVdb.imag; *(inst->NUMOSsourceSourcePtr) += yAc.yIsVsb.real; *(inst->NUMOSsourceSourcePtr + 1) += yAc.yIsVsb.imag; *(inst->NUMOSsourceGatePtr) += yAc.yIsVgb.real; *(inst->NUMOSsourceGatePtr + 1) += yAc.yIsVgb.imag; *(inst->NUMOSsourceBulkPtr) -= yAc.yIsVdb.real + yAc.yIsVsb.real + yAc.yIsVgb.real; *(inst->NUMOSsourceBulkPtr + 1) -= yAc.yIsVdb.imag + yAc.yIsVsb.imag + yAc.yIsVgb.imag; *(inst->NUMOSgateDrainPtr) += yAc.yIgVdb.real; *(inst->NUMOSgateDrainPtr + 1) += yAc.yIgVdb.imag; *(inst->NUMOSgateSourcePtr) += yAc.yIgVsb.real; *(inst->NUMOSgateSourcePtr + 1) += yAc.yIgVsb.imag; *(inst->NUMOSgateGatePtr) += yAc.yIgVgb.real; *(inst->NUMOSgateGatePtr + 1) += yAc.yIgVgb.imag; *(inst->NUMOSgateBulkPtr) -= yAc.yIgVdb.real + yAc.yIgVsb.real + yAc.yIgVgb.real; *(inst->NUMOSgateBulkPtr + 1) -= yAc.yIgVdb.imag + yAc.yIgVsb.imag + yAc.yIgVgb.imag; *(inst->NUMOSbulkDrainPtr) -= yAc.yIdVdb.real + yAc.yIsVdb.real + yAc.yIgVdb.real; *(inst->NUMOSbulkDrainPtr + 1) -= yAc.yIdVdb.imag + yAc.yIsVdb.imag + yAc.yIgVdb.imag; *(inst->NUMOSbulkSourcePtr) -= yAc.yIdVsb.real + yAc.yIsVsb.real + yAc.yIgVsb.real; *(inst->NUMOSbulkSourcePtr + 1) -= yAc.yIdVsb.imag + yAc.yIsVsb.imag + yAc.yIgVsb.imag; *(inst->NUMOSbulkGatePtr) -= yAc.yIdVgb.real + yAc.yIsVgb.real + yAc.yIgVgb.real; *(inst->NUMOSbulkGatePtr + 1) -= yAc.yIdVgb.imag + yAc.yIsVgb.imag + yAc.yIgVgb.imag; *(inst->NUMOSbulkBulkPtr) += yAc.yIdVdb.real + yAc.yIdVsb.real + yAc.yIdVgb.real + yAc.yIsVdb.real + yAc.yIsVsb.real + yAc.yIsVgb.real + yAc.yIgVdb.real + yAc.yIgVsb.real + yAc.yIgVgb.real; *(inst->NUMOSbulkBulkPtr + 1) -= yAc.yIdVdb.imag + yAc.yIdVsb.imag + yAc.yIdVgb.imag + yAc.yIsVdb.imag + yAc.yIsVsb.imag + yAc.yIsVgb.imag + yAc.yIgVdb.imag + yAc.yIgVsb.imag + yAc.yIgVgb.imag; if (ckt->CKTomega != 0.0) { inst->NUMOSc11 = yAc.yIdVdb.imag / ckt->CKTomega; inst->NUMOSc12 = yAc.yIdVgb.imag / ckt->CKTomega; inst->NUMOSc13 = yAc.yIdVsb.imag / ckt->CKTomega; inst->NUMOSc21 = yAc.yIgVdb.imag / ckt->CKTomega; inst->NUMOSc22 = yAc.yIgVgb.imag / ckt->CKTomega; inst->NUMOSc23 = yAc.yIgVsb.imag / ckt->CKTomega; inst->NUMOSc31 = yAc.yIsVdb.imag / ckt->CKTomega; inst->NUMOSc32 = yAc.yIsVgb.imag / ckt->CKTomega; inst->NUMOSc33 = yAc.yIsVsb.imag / ckt->CKTomega; } else { inst->NUMOSc11 = 0.0; /* XXX What else can be done?! */ inst->NUMOSc12 = 0.0; /* XXX What else can be done?! */ inst->NUMOSc13 = 0.0; /* XXX What else can be done?! */ inst->NUMOSc21 = 0.0; /* XXX What else can be done?! */ inst->NUMOSc22 = 0.0; /* XXX What else can be done?! */ inst->NUMOSc23 = 0.0; /* XXX What else can be done?! */ inst->NUMOSc31 = 0.0; /* XXX What else can be done?! */ inst->NUMOSc32 = 0.0; /* XXX What else can be done?! */ inst->NUMOSc33 = 0.0; /* XXX What else can be done?! */ } inst->NUMOSy11r = yAc.yIdVdb.real; inst->NUMOSy11i = yAc.yIdVdb.imag; inst->NUMOSy12r = yAc.yIdVgb.real; inst->NUMOSy12i = yAc.yIdVgb.imag; inst->NUMOSy13r = yAc.yIdVsb.real; inst->NUMOSy13i = yAc.yIdVsb.imag; inst->NUMOSy21r = yAc.yIgVdb.real; inst->NUMOSy21i = yAc.yIgVdb.imag; inst->NUMOSy22r = yAc.yIgVgb.real; inst->NUMOSy22i = yAc.yIgVgb.imag; inst->NUMOSy23r = yAc.yIgVsb.real; inst->NUMOSy23i = yAc.yIgVsb.imag; inst->NUMOSy31r = yAc.yIsVdb.real; inst->NUMOSy31i = yAc.yIsVdb.imag; inst->NUMOSy32r = yAc.yIsVgb.real; inst->NUMOSy32i = yAc.yIsVgb.imag; inst->NUMOSy33r = yAc.yIsVsb.real; inst->NUMOSy33i = yAc.yIsVsb.imag; inst->NUMOSsmSigAvail = TRUE; inst->NUMOSpDevice->pStats->totalTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/mos1/0000755000175000017500000000000013546075722020042 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/mos1/mos1init.h0000644000175000017500000000037013546075722021756 0ustar carstencarsten#ifndef _MOS1INIT_H #define _MOS1INIT_H extern IFparm MOS1pTable[ ]; extern IFparm MOS1mPTable[ ]; extern char *MOS1names[ ]; extern int MOS1pTSize; extern int MOS1mPTSize; extern int MOS1nSize; extern int MOS1iSize; extern int MOS1mSize; #endif tmpk8ny_4pz/src/spicelib/devices/mos1/mos1dset.c0000644000175000017500000004560313546075722021755 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "mos1defs.h" #include "ngspice/distodef.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS1dSetup(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current value into the * sparse matrix previously provided */ { MOS1model *model = (MOS1model *) inModel; MOS1instance *here; double Beta; double DrainSatCur; double EffectiveLength; double GateBulkOverlapCap; double GateDrainOverlapCap; double GateSourceOverlapCap; double OxideCap; double SourceSatCur; double gm; double gds; double gb; double ebd; double vgst; double evbs; double sargsw; double vbd; double vbs; double vds; double arg; double sarg; double vdsat; double vgd; double vgs; double von; double vt; double lgbs; double lgbs2; double lgbs3; double lgbd; double lgbd2; double lgbd3; double gm2; double gds2; double gb2; double gmds; double gmb; double gbds; double gm3; double gds3; double gb3; double gm2ds; double gmds2; double gm2b; double gmb2; double gb2ds; double gbds2; double lcapgb2; double lcapgb3; double lcapgs2; double lcapgs3; double lcapgd2; double lcapgd3; double lcapbs2; double lcapbs3; double lcapbd2; double lcapbd3; double gmbds = 0.0; /* loop through all the MOS1 device models */ for( ; model != NULL; model = MOS1nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS1instances(model); here != NULL ; here=MOS1nextInstance(here)) { vt = CONSTKoverQ * here->MOS1temp; EffectiveLength=here->MOS1l - 2*model->MOS1latDiff; if( (here->MOS1tSatCurDens == 0) || (here->MOS1drainArea == 0) || (here->MOS1sourceArea == 0)) { DrainSatCur = here->MOS1m * here->MOS1tSatCur; SourceSatCur = here->MOS1m * here->MOS1tSatCur; } else { DrainSatCur = here->MOS1tSatCurDens * here->MOS1m * here->MOS1drainArea; SourceSatCur = here->MOS1tSatCurDens * here->MOS1m * here->MOS1sourceArea; } GateSourceOverlapCap = model->MOS1gateSourceOverlapCapFactor * here->MOS1m * here->MOS1w; GateDrainOverlapCap = model->MOS1gateDrainOverlapCapFactor * here->MOS1m * here->MOS1w; GateBulkOverlapCap = model->MOS1gateBulkOverlapCapFactor * here->MOS1m * EffectiveLength; Beta = here->MOS1tTransconductance * here->MOS1m * here->MOS1w/EffectiveLength; OxideCap = model->MOS1oxideCapFactor * EffectiveLength * here->MOS1m * here->MOS1w; vbs = model->MOS1type * ( *(ckt->CKTrhsOld+here->MOS1bNode) - *(ckt->CKTrhsOld+here->MOS1sNodePrime)); vgs = model->MOS1type * ( *(ckt->CKTrhsOld+here->MOS1gNode) - *(ckt->CKTrhsOld+here->MOS1sNodePrime)); vds = model->MOS1type * ( *(ckt->CKTrhsOld+here->MOS1dNodePrime) - *(ckt->CKTrhsOld+here->MOS1sNodePrime)); /* now some common crunching for some more useful quantities */ vbd=vbs-vds; vgd=vgs-vds; /* * bulk-source and bulk-drain diodes * here we just evaluate the ideal diode current and the * corresponding derivative (conductance). */ if(vbs <= 0) { lgbs = SourceSatCur/vt; lgbs += ckt->CKTgmin; lgbs2 = lgbs3 = 0; } else { evbs = exp(MIN(MAX_EXP_ARG,vbs/vt)); lgbs = SourceSatCur*evbs/vt + ckt->CKTgmin; lgbs2 = model->MOS1type *0.5 * (lgbs - ckt->CKTgmin)/vt; lgbs3 = model->MOS1type *lgbs2/(vt*3); } if(vbd <= 0) { lgbd = DrainSatCur/vt; lgbd += ckt->CKTgmin; lgbd2 = lgbd3 = 0; } else { ebd = exp(MIN(MAX_EXP_ARG,vbd/vt)); lgbd = DrainSatCur*ebd/vt +ckt->CKTgmin; lgbd2 = model->MOS1type *0.5 * (lgbd - ckt->CKTgmin)/vt; lgbd3 = model->MOS1type *lgbd2/(vt*3); } /* now to determine whether the user was able to correctly * identify the source and drain of his device */ if(vds >= 0) { /* normal mode */ here->MOS1mode = 1; } else { /* inverse mode */ here->MOS1mode = -1; } /* * this block of code evaluates the drain current and its * derivatives using the shichman-hodges model and the * charges associated with the gate, channel and bulk for * mosfets * */ /* the following variables are local to this code block until * it is obvious that they can be made global */ { double betap; double dvondvbs; double d2vondvbs2; double d3vondvbs3; if ((here->MOS1mode==1?vbs:vbd) <= 0 ) { sarg=sqrt(here->MOS1tPhi-(here->MOS1mode==1?vbs:vbd)); if (-model->MOS1gamma != 0.0) { dvondvbs = -model->MOS1gamma*0.5/sarg; d2vondvbs2 = - dvondvbs*0.5/(sarg*sarg); d3vondvbs3 = 1.5*d2vondvbs2/(sarg*sarg); } else { dvondvbs = d2vondvbs2 = d3vondvbs3 = 0.0; } } else { sarg=sqrt(here->MOS1tPhi); if (model->MOS1gamma != 0.0) { dvondvbs = -model->MOS1gamma/(sarg+sarg); } else { dvondvbs = 0.0; } d2vondvbs2 = d3vondvbs3 = 0; sarg=sarg-(here->MOS1mode==1?vbs:vbd)/(sarg+sarg); sarg=MAX(0,sarg); dvondvbs = (sarg<=0?0:dvondvbs); } von=(here->MOS1tVbi*model->MOS1type)+model->MOS1gamma*sarg; vgst=(here->MOS1mode==1?vgs:vgd)-von; vdsat=MAX(vgst,0); /* if (sarg <= 0) { arg=0; } else { arg=model->MOS1gamma/(sarg+sarg); } */ if (vgst <= 0) { /* * cutoff region */ /* cdrain = 0 */ gm=0; gds=0; gb=0; gm2=gb2=gds2=0; gmds=gbds=gmb=0; gm3=gb3=gds3=0; gm2ds=gmds2=gm2b=gmb2=gb2ds=gbds2=0; } else{ /* * saturation region */ betap=Beta*(1+model->MOS1lambda*(vds*here->MOS1mode)); /* cdrain = betap * vgst * vgst * 0.5; */ if (vgst <= (vds*here->MOS1mode)){ gm=betap*vgst; gds=model->MOS1lambda*Beta*vgst*vgst*.5; /* gb=here->MOS1gm*arg; */ gb= -gm*dvondvbs; gm2 = betap; gds2 = 0; gb2 = -(gm*d2vondvbs2 - betap*dvondvbs*dvondvbs); gmds = vgst*model->MOS1lambda*Beta; gbds = - gmds*dvondvbs; gmb = -betap*dvondvbs; gm3 = 0; gb3 = -(gmb*d2vondvbs2 + gm*d3vondvbs3 - betap*2*dvondvbs*d2vondvbs2); gds3 = 0; gm2ds = Beta * model->MOS1lambda; gm2b = 0; gmb2 = -betap*d2vondvbs2; gb2ds = -(gmds*d2vondvbs2 - dvondvbs*dvondvbs* Beta * model->MOS1lambda); gmds2 = 0; gbds2 = 0; gmbds = -Beta * model->MOS1lambda*dvondvbs; } else { /* * linear region */ /* cdrain = betap * vds * (vgst - vds/2); */ gm=betap*(vds*here->MOS1mode); gds= Beta * model->MOS1lambda*(vgst* vds*here->MOS1mode - vds*vds*0.5) + betap*(vgst - vds*here->MOS1mode); /* gb=gm*arg; */ gb = - gm*dvondvbs; gm2 = 0; gb2 = -(gm*d2vondvbs2); gds2 = 2*Beta * model->MOS1lambda*(vgst - vds*here->MOS1mode) - betap; gmds = Beta * model->MOS1lambda* vds * here->MOS1mode + betap; gbds = - gmds*dvondvbs; gmb=0; gm3=0; gb3 = -gm*d3vondvbs3; gds3 = -Beta*model->MOS1lambda*3.; gm2ds=gm2b=gmb2=0; gmds2 = 2*model->MOS1lambda*Beta; gb2ds = -(gmds*d2vondvbs2); gbds2 = -gmds2*dvondvbs; gmbds = 0; } } /* * finished */ } /* code block */ /* * COMPUTE EQUIVALENT DRAIN CURRENT SOURCE */ /* * now we do the hard part of the bulk-drain and bulk-source * diode - we evaluate the non-linear capacitance and * charge * * the basic equations are not hard, but the implementation * is somewhat long in an attempt to avoid log/exponential * evaluations */ /* * charge storage elements * *.. bulk-drain and bulk-source depletion capacitances */ if (vbs < here->MOS1tDepCap){ arg=1-vbs/here->MOS1tBulkPot; /* * the following block looks somewhat long and messy, * but since most users use the default grading * coefficients of .5, and sqrt is MUCH faster than an * exp(log()) we use this special case code to buy time. * (as much as 10% of total job time!) */ if(model->MOS1bulkJctBotGradingCoeff == model->MOS1bulkJctSideGradingCoeff) { if(model->MOS1bulkJctBotGradingCoeff == .5) { sarg = sargsw = 1/sqrt(arg); } else { sarg = sargsw = exp(-model->MOS1bulkJctBotGradingCoeff* log(arg)); } } else { if(model->MOS1bulkJctBotGradingCoeff == .5) { sarg = 1/sqrt(arg); } else { sarg = exp(-model->MOS1bulkJctBotGradingCoeff* log(arg)); } if(model->MOS1bulkJctSideGradingCoeff == .5) { sargsw = 1/sqrt(arg); } else { sargsw =exp(-model->MOS1bulkJctSideGradingCoeff* log(arg)); } } /* lcapbs=here->MOS1Cbs*sarg+ here->MOS1Cbssw*sargsw; */ lcapbs2 = model->MOS1type*0.5/here->MOS1tBulkPot*( here->MOS1Cbs*model->MOS1bulkJctBotGradingCoeff* sarg/arg + here->MOS1Cbssw* model->MOS1bulkJctSideGradingCoeff*sargsw/arg); lcapbs3 = here->MOS1Cbs*sarg* model->MOS1bulkJctBotGradingCoeff* (model->MOS1bulkJctBotGradingCoeff+1); lcapbs3 += here->MOS1Cbssw*sargsw* model->MOS1bulkJctSideGradingCoeff* (model->MOS1bulkJctSideGradingCoeff+1); lcapbs3 = lcapbs3/(6*here->MOS1tBulkPot* here->MOS1tBulkPot*arg*arg); } else { /* *(ckt->CKTstate0 + here->MOS1qbs)= here->MOS1f4s + vbs*(here->MOS1f2s+vbs*(here->MOS1f3s/2));*/ /* lcapbs=here->MOS1f2s+here->MOS1f3s*vbs; */ lcapbs2 = 0.5*here->MOS1f3s; lcapbs3 = 0; } if (vbd < here->MOS1tDepCap) { arg=1-vbd/here->MOS1tBulkPot; /* * the following block looks somewhat long and messy, * but since most users use the default grading * coefficients of .5, and sqrt is MUCH faster than an * exp(log()) we use this special case code to buy time. * (as much as 10% of total job time!) */ #ifndef NOSQRT if(model->MOS1bulkJctBotGradingCoeff == .5 && model->MOS1bulkJctSideGradingCoeff == .5) { sarg = sargsw = 1/sqrt(arg); } else { if(model->MOS1bulkJctBotGradingCoeff == .5) { sarg = 1/sqrt(arg); } else { #endif /*NOSQRT*/ sarg = exp(-model->MOS1bulkJctBotGradingCoeff* log(arg)); #ifndef NOSQRT } if(model->MOS1bulkJctSideGradingCoeff == .5) { sargsw = 1/sqrt(arg); } else { #endif /*NOSQRT*/ sargsw =exp(-model->MOS1bulkJctSideGradingCoeff* log(arg)); #ifndef NOSQRT } } #endif /*NOSQRT*/ /* lcapbd=here->MOS1Cbd*sarg+ here->MOS1Cbdsw*sargsw; */ lcapbd2 = model->MOS1type*0.5/here->MOS1tBulkPot*( here->MOS1Cbd*model->MOS1bulkJctBotGradingCoeff* sarg/arg + here->MOS1Cbdsw* model->MOS1bulkJctSideGradingCoeff*sargsw/arg); lcapbd3 = here->MOS1Cbd*sarg* model->MOS1bulkJctBotGradingCoeff* (model->MOS1bulkJctBotGradingCoeff+1); lcapbd3 += here->MOS1Cbdsw*sargsw* model->MOS1bulkJctSideGradingCoeff* (model->MOS1bulkJctSideGradingCoeff+1); lcapbd3 = lcapbd3/(6*here->MOS1tBulkPot* here->MOS1tBulkPot*arg*arg); } else { /* lcapbd=here->MOS1f2d + vbd * here->MOS1f3d; */ lcapbd2=0.5*here->MOS1f3d; lcapbd3=0; } /* * meyer's capacitor model */ /* * the meyer capacitance equations are in DEVqmeyer * these expressions are derived from those equations. * these expressions are incorrect; they assume just one * controlling variable for each charge storage element * while actually there are several; the MOS1 small * signal ac linear model is also wrong because it * ignores controlled capacitive elements. these can be * corrected (as can the linear ss ac model) if the * expressions for the charge are available */ { double phi; double cox; double vddif; double vddif1; double vddif2; /* von, vgst and vdsat have already been adjusted for possible source-drain interchange */ phi = here->MOS1tPhi; cox = OxideCap; if (vgst <= -phi) { lcapgb2=lcapgb3=lcapgs2=lcapgs3=lcapgd2=lcapgd3=0; } else if (vgst <= -phi/2) { lcapgb2= -cox/(4*phi); lcapgb3=lcapgs2=lcapgs3=lcapgd2=lcapgd3=0; } else if (vgst <= 0) { lcapgb2= -cox/(4*phi); lcapgb3=lcapgs3=lcapgd2=lcapgd3=0; lcapgs2 = cox/(3*phi); } else { /* the MOS1modes are around because vds has not been adjusted */ if (vdsat <= here->MOS1mode*vds) { lcapgb2=lcapgb3=lcapgs2=lcapgs3=lcapgd2=lcapgd3=0; } else { vddif = 2.0*vdsat-here->MOS1mode*vds; vddif1 = vdsat-here->MOS1mode*vds/*-1.0e-12*/; vddif2 = vddif*vddif; lcapgd2 = -vdsat*here->MOS1mode*vds*cox/(3*vddif*vddif2); lcapgd3 = - here->MOS1mode*vds*cox*(vddif - 6*vdsat)/(9*vddif2*vddif2); lcapgs2 = -vddif1*here->MOS1mode*vds*cox/(3*vddif*vddif2); lcapgs3 = - here->MOS1mode*vds*cox*(vddif - 6*vddif1)/(9*vddif2*vddif2); lcapgb2=lcapgb3=0; } } } /* the b-s and b-d diodes need no processing ... */ here->capbs2 = lcapbs2; here->capbs3 = lcapbs3; here->capbd2 = lcapbd2; here->capbd3 = lcapbd3; here->gbs2 = lgbs2; here->gbs3 = lgbs3; here->gbd2 = lgbd2; here->gbd3 = lgbd3; here->capgb2 = model->MOS1type*lcapgb2; here->capgb3 = lcapgb3; /* * process to get Taylor coefficients, taking into * account type and mode. */ if (here->MOS1mode == 1) { /* normal mode - no source-drain interchange */ here->cdr_x2 = gm2; here->cdr_y2 = gb2;; here->cdr_z2 = gds2;; here->cdr_xy = gmb; here->cdr_yz = gbds; here->cdr_xz = gmds; here->cdr_x3 = gm3; here->cdr_y3 = gb3; here->cdr_z3 = gds3; here->cdr_x2z = gm2ds; here->cdr_x2y = gm2b; here->cdr_y2z = gb2ds; here->cdr_xy2 = gmb2; here->cdr_xz2 = gmds2; here->cdr_yz2 = gbds2; here->cdr_xyz = gmbds; /* the gate caps have been divided and made into Taylor coeffs., but not adjusted for type */ here->capgs2 = model->MOS1type*lcapgs2; here->capgs3 = lcapgs3; here->capgd2 = model->MOS1type*lcapgd2; here->capgd3 = lcapgd3; } else { /* * inverse mode - source and drain interchanged */ here->cdr_x2 = -gm2; here->cdr_y2 = -gb2; here->cdr_z2 = -(gm2 + gb2 + gds2 + 2*(gmb + gmds + gbds)); here->cdr_xy = -gmb; here->cdr_yz = gmb + gb2 + gbds; here->cdr_xz = gm2 + gmb + gmds; here->cdr_x3 = -gm3; here->cdr_y3 = -gb3; here->cdr_z3 = gm3 + gb3 + gds3 + 3*(gm2b + gm2ds + gmb2 + gb2ds + gmds2 + gbds2) + 6*gmbds ; here->cdr_x2z = gm3 + gm2b + gm2ds; here->cdr_x2y = -gm2b; here->cdr_y2z = gmb2 + gb3 + gb2ds; here->cdr_xy2 = -gmb2; here->cdr_xz2 = -(gm3 + 2*(gm2b + gm2ds + gmbds) + gmb2 + gmds2); here->cdr_yz2 = -(gb3 + 2*(gmb2 + gb2ds + gmbds) + gm2b + gbds2); here->cdr_xyz = gm2b + gmb2 + gmbds; here->capgs2 = model->MOS1type*lcapgd2; here->capgs3 = lcapgd3; here->capgd2 = model->MOS1type*lcapgs2; here->capgd3 = lcapgs3; } /* now to adjust for type and multiply by factors to convert to Taylor coeffs. */ here->cdr_x2 = 0.5*model->MOS1type*here->cdr_x2; here->cdr_y2 = 0.5*model->MOS1type*here->cdr_y2; here->cdr_z2 = 0.5*model->MOS1type*here->cdr_z2; here->cdr_xy = model->MOS1type*here->cdr_xy; here->cdr_yz = model->MOS1type*here->cdr_yz; here->cdr_xz = model->MOS1type*here->cdr_xz; here->cdr_x3 = here->cdr_x3/6.; here->cdr_y3 = here->cdr_y3/6.; here->cdr_z3 = here->cdr_z3/6.; here->cdr_x2z = 0.5*here->cdr_x2z; here->cdr_x2y = 0.5*here->cdr_x2y; here->cdr_y2z = 0.5*here->cdr_y2z; here->cdr_xy2 = 0.5*here->cdr_xy2; here->cdr_xz2 = 0.5*here->cdr_xz2; here->cdr_yz2 = 0.5*here->cdr_yz2; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos1/Makefile.am0000644000175000017500000000112213546075722022072 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libmos1.la libmos1_la_SOURCES = \ mos1.c \ mos1acld.c \ mos1ask.c \ mos1conv.c \ mos1defs.h \ mos1del.c \ mos1dist.c \ mos1dset.c \ mos1ext.h \ mos1ic.c \ mos1init.c \ mos1init.h \ mos1itf.h \ mos1load.c \ mos1mask.c \ mos1mpar.c \ mos1noi.c \ mos1par.c \ mos1pzld.c \ mos1sacl.c \ mos1set.c \ mos1sld.c \ mos1sprt.c \ mos1sset.c \ mos1supd.c \ mos1temp.c \ mos1trun.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/mos1/mos1par.c0000644000175000017500000000710513546075722021573 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "mos1defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/fteext.h" /* ARGSUSED */ int MOS1param(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { double scale; MOS1instance *here = (MOS1instance *)inst; NG_IGNORE(select); if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; switch(param) { case MOS1_TEMP: here->MOS1temp = value->rValue+CONSTCtoK; here->MOS1tempGiven = TRUE; break; case MOS1_DTEMP: here->MOS1dtemp = value->rValue; here->MOS1dtempGiven = TRUE; break; case MOS1_M: here->MOS1m = value->rValue; here->MOS1mGiven = TRUE; break; case MOS1_W: here->MOS1w = value->rValue * scale; here->MOS1wGiven = TRUE; break; case MOS1_L: here->MOS1l = value->rValue * scale; here->MOS1lGiven = TRUE; break; case MOS1_AS: here->MOS1sourceArea = value->rValue * scale * scale; here->MOS1sourceAreaGiven = TRUE; break; case MOS1_AD: here->MOS1drainArea = value->rValue * scale * scale; here->MOS1drainAreaGiven = TRUE; break; case MOS1_PS: here->MOS1sourcePerimiter = value->rValue * scale; here->MOS1sourcePerimiterGiven = TRUE; break; case MOS1_PD: here->MOS1drainPerimiter = value->rValue * scale; here->MOS1drainPerimiterGiven = TRUE; break; case MOS1_NRS: here->MOS1sourceSquares = value->rValue; here->MOS1sourceSquaresGiven = TRUE; break; case MOS1_NRD: here->MOS1drainSquares = value->rValue; here->MOS1drainSquaresGiven = TRUE; break; case MOS1_OFF: here->MOS1off = (value->iValue != 0); break; case MOS1_IC_VBS: here->MOS1icVBS = value->rValue; here->MOS1icVBSGiven = TRUE; break; case MOS1_IC_VDS: here->MOS1icVDS = value->rValue; here->MOS1icVDSGiven = TRUE; break; case MOS1_IC_VGS: here->MOS1icVGS = value->rValue; here->MOS1icVGSGiven = TRUE; break; case MOS1_IC: switch(value->v.numValue){ case 3: here->MOS1icVBS = *(value->v.vec.rVec+2); here->MOS1icVBSGiven = TRUE; case 2: here->MOS1icVGS = *(value->v.vec.rVec+1); here->MOS1icVGSGiven = TRUE; case 1: here->MOS1icVDS = *(value->v.vec.rVec); here->MOS1icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; case MOS1_L_SENS: if(value->iValue) { here->MOS1senParmNo = 1; here->MOS1sens_l = 1; } break; case MOS1_W_SENS: if(value->iValue) { here->MOS1senParmNo = 1; here->MOS1sens_w = 1; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos1/mos1defs.h0000644000175000017500000004304513546075722021742 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #ifndef MOS1 #define MOS1 #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" /* declarations for level 1 MOSFETs */ /* indices to the array of MOSFET(1) noise sources */ enum { MOS1RDNOIZ = 0, MOS1RSNOIZ, MOS1IDNOIZ, MOS1FLNOIZ, MOS1TOTNOIZ, /* finally, the number of noise sources */ MOS1NSRCS }; /* information needed for each instance */ typedef struct sMOS1instance { struct GENinstance gen; #define MOS1modPtr(inst) ((struct sMOS1model *)((inst)->gen.GENmodPtr)) #define MOS1nextInstance(inst) ((struct sMOS1instance *)((inst)->gen.GENnextInstance)) #define MOS1name gen.GENname #define MOS1states gen.GENstate const int MOS1dNode; /* number of the gate node of the mosfet */ const int MOS1gNode; /* number of the gate node of the mosfet */ const int MOS1sNode; /* number of the source node of the mosfet */ const int MOS1bNode; /* number of the bulk node of the mosfet */ int MOS1dNodePrime; /* number of the internal drain node of the mosfet */ int MOS1sNodePrime; /* number of the internal source node of the mosfet */ double MOS1m; /* parallel device multiplier */ double MOS1l; /* the length of the channel region */ double MOS1w; /* the width of the channel region */ double MOS1drainArea; /* the area of the drain diffusion */ double MOS1sourceArea; /* the area of the source diffusion */ double MOS1drainSquares; /* the length of the drain in squares */ double MOS1sourceSquares; /* the length of the source in squares */ double MOS1drainPerimiter; double MOS1sourcePerimiter; double MOS1sourceConductance; /*conductance of source(or 0):set in setup*/ double MOS1drainConductance; /*conductance of drain(or 0):set in setup*/ double MOS1temp; /* operating temperature of this instance */ double MOS1dtemp; /* operating temperature of the instance relative to circuit temperature*/ double MOS1tTransconductance; /* temperature corrected transconductance*/ double MOS1tSurfMob; /* temperature corrected surface mobility */ double MOS1tPhi; /* temperature corrected Phi */ double MOS1tVto; /* temperature corrected Vto */ double MOS1tSatCur; /* temperature corrected saturation Cur. */ double MOS1tSatCurDens; /* temperature corrected saturation Cur. density*/ double MOS1tCbd; /* temperature corrected B-D Capacitance */ double MOS1tCbs; /* temperature corrected B-S Capacitance */ double MOS1tCj; /* temperature corrected Bulk bottom Capacitance */ double MOS1tCjsw; /* temperature corrected Bulk side Capacitance */ double MOS1tBulkPot; /* temperature corrected Bulk potential */ double MOS1tDepCap; /* temperature adjusted transition point in */ /* the cureve matching Fc * Vj */ double MOS1tVbi; /* temperature adjusted Vbi */ double MOS1icVBS; /* initial condition B-S voltage */ double MOS1icVDS; /* initial condition D-S voltage */ double MOS1icVGS; /* initial condition G-S voltage */ double MOS1von; double MOS1vdsat; double MOS1sourceVcrit; /* Vcrit for pos. vds */ double MOS1drainVcrit; /* Vcrit for pos. vds */ double MOS1cd; double MOS1cbs; double MOS1cbd; double MOS1gmbs; double MOS1gm; double MOS1gds; double MOS1gbd; double MOS1gbs; double MOS1capbd; double MOS1capbs; double MOS1Cbd; double MOS1Cbdsw; double MOS1Cbs; double MOS1Cbssw; double MOS1f2d; double MOS1f3d; double MOS1f4d; double MOS1f2s; double MOS1f3s; double MOS1f4s; /* * naming convention: * x = vgs * y = vbs * z = vds * cdr = cdrain */ #define MOS1NDCOEFFS 30 #ifndef NODISTO double MOS1dCoeffs[MOS1NDCOEFFS]; #else /* NODISTO */ double *MOS1dCoeffs; #endif /* NODISTO */ #ifndef CONFIG #define capbs2 MOS1dCoeffs[0] #define capbs3 MOS1dCoeffs[1] #define capbd2 MOS1dCoeffs[2] #define capbd3 MOS1dCoeffs[3] #define gbs2 MOS1dCoeffs[4] #define gbs3 MOS1dCoeffs[5] #define gbd2 MOS1dCoeffs[6] #define gbd3 MOS1dCoeffs[7] #define capgb2 MOS1dCoeffs[8] #define capgb3 MOS1dCoeffs[9] #define cdr_x2 MOS1dCoeffs[10] #define cdr_y2 MOS1dCoeffs[11] #define cdr_z2 MOS1dCoeffs[12] #define cdr_xy MOS1dCoeffs[13] #define cdr_yz MOS1dCoeffs[14] #define cdr_xz MOS1dCoeffs[15] #define cdr_x3 MOS1dCoeffs[16] #define cdr_y3 MOS1dCoeffs[17] #define cdr_z3 MOS1dCoeffs[18] #define cdr_x2z MOS1dCoeffs[19] #define cdr_x2y MOS1dCoeffs[20] #define cdr_y2z MOS1dCoeffs[21] #define cdr_xy2 MOS1dCoeffs[22] #define cdr_xz2 MOS1dCoeffs[23] #define cdr_yz2 MOS1dCoeffs[24] #define cdr_xyz MOS1dCoeffs[25] #define capgs2 MOS1dCoeffs[26] #define capgs3 MOS1dCoeffs[27] #define capgd2 MOS1dCoeffs[28] #define capgd3 MOS1dCoeffs[29] #endif #ifndef NONOISE double MOS1nVar[NSTATVARS][MOS1NSRCS]; #else /* NONOISE */ double **MOS1nVar; #endif /* NONOISE */ int MOS1mode; /* device mode : 1 = normal, -1 = inverse */ unsigned MOS1off:1; /* non-zero to indicate device is off for dc analysis*/ unsigned MOS1tempGiven :1; /* instance temperature specified */ unsigned MOS1dtempGiven :1; /* instance delta temperature specified */ unsigned MOS1mGiven :1; unsigned MOS1lGiven :1; unsigned MOS1wGiven :1; unsigned MOS1drainAreaGiven :1; unsigned MOS1sourceAreaGiven :1; unsigned MOS1drainSquaresGiven :1; unsigned MOS1sourceSquaresGiven :1; unsigned MOS1drainPerimiterGiven :1; unsigned MOS1sourcePerimiterGiven :1; unsigned MOS1dNodePrimeSet :1; unsigned MOS1sNodePrimeSet :1; unsigned MOS1icVBSGiven :1; unsigned MOS1icVDSGiven :1; unsigned MOS1icVGSGiven :1; unsigned MOS1vonGiven :1; unsigned MOS1vdsatGiven :1; unsigned MOS1modeGiven :1; double *MOS1DdPtr; /* pointer to sparse matrix element at * (Drain node,drain node) */ double *MOS1GgPtr; /* pointer to sparse matrix element at * (gate node,gate node) */ double *MOS1SsPtr; /* pointer to sparse matrix element at * (source node,source node) */ double *MOS1BbPtr; /* pointer to sparse matrix element at * (bulk node,bulk node) */ double *MOS1DPdpPtr; /* pointer to sparse matrix element at * (drain prime node,drain prime node) */ double *MOS1SPspPtr; /* pointer to sparse matrix element at * (source prime node,source prime node) */ double *MOS1DdpPtr; /* pointer to sparse matrix element at * (drain node,drain prime node) */ double *MOS1GbPtr; /* pointer to sparse matrix element at * (gate node,bulk node) */ double *MOS1GdpPtr; /* pointer to sparse matrix element at * (gate node,drain prime node) */ double *MOS1GspPtr; /* pointer to sparse matrix element at * (gate node,source prime node) */ double *MOS1SspPtr; /* pointer to sparse matrix element at * (source node,source prime node) */ double *MOS1BdpPtr; /* pointer to sparse matrix element at * (bulk node,drain prime node) */ double *MOS1BspPtr; /* pointer to sparse matrix element at * (bulk node,source prime node) */ double *MOS1DPspPtr; /* pointer to sparse matrix element at * (drain prime node,source prime node) */ double *MOS1DPdPtr; /* pointer to sparse matrix element at * (drain prime node,drain node) */ double *MOS1BgPtr; /* pointer to sparse matrix element at * (bulk node,gate node) */ double *MOS1DPgPtr; /* pointer to sparse matrix element at * (drain prime node,gate node) */ double *MOS1SPgPtr; /* pointer to sparse matrix element at * (source prime node,gate node) */ double *MOS1SPsPtr; /* pointer to sparse matrix element at * (source prime node,source node) */ double *MOS1DPbPtr; /* pointer to sparse matrix element at * (drain prime node,bulk node) */ double *MOS1SPbPtr; /* pointer to sparse matrix element at * (source prime node,bulk node) */ double *MOS1SPdpPtr; /* pointer to sparse matrix element at * (source prime node,drain prime node) */ int MOS1senParmNo; /* parameter # for sensitivity use; set equal to 0 if neither length nor width of the mosfet is a design parameter */ unsigned MOS1sens_l :1; /* field which indicates whether length of the mosfet is a design parameter or not */ unsigned MOS1sens_w :1; /* field which indicates whether width of the mosfet is a design parameter or not */ unsigned MOS1senPertFlag :1; /* indictes whether the the parameter of the particular instance is to be perturbed */ double MOS1cgs; double MOS1cgd; double MOS1cgb; double *MOS1sens; #define MOS1senCgs MOS1sens /* contains pertured values of cgs */ #define MOS1senCgd MOS1sens + 6 /* contains perturbed values of cgd*/ #define MOS1senCgb MOS1sens + 12 /* contains perturbed values of cgb*/ #define MOS1senCbd MOS1sens + 18 /* contains perturbed values of cbd*/ #define MOS1senCbs MOS1sens + 24 /* contains perturbed values of cbs*/ #define MOS1senGds MOS1sens + 30 /* contains perturbed values of gds*/ #define MOS1senGbs MOS1sens + 36 /* contains perturbed values of gbs*/ #define MOS1senGbd MOS1sens + 42 /* contains perturbed values of gbd*/ #define MOS1senGm MOS1sens + 48 /* contains perturbed values of gm*/ #define MOS1senGmbs MOS1sens + 54 /* contains perturbed values of gmbs*/ #define MOS1dphigs_dl MOS1sens + 60 #define MOS1dphigd_dl MOS1sens + 61 #define MOS1dphigb_dl MOS1sens + 62 #define MOS1dphibs_dl MOS1sens + 63 #define MOS1dphibd_dl MOS1sens + 64 #define MOS1dphigs_dw MOS1sens + 65 #define MOS1dphigd_dw MOS1sens + 66 #define MOS1dphigb_dw MOS1sens + 67 #define MOS1dphibs_dw MOS1sens + 68 #define MOS1dphibd_dw MOS1sens + 69 } MOS1instance ; #define MOS1vbd MOS1states+ 0 /* bulk-drain voltage */ #define MOS1vbs MOS1states+ 1 /* bulk-source voltage */ #define MOS1vgs MOS1states+ 2 /* gate-source voltage */ #define MOS1vds MOS1states+ 3 /* drain-source voltage */ #define MOS1capgs MOS1states+4 /* gate-source capacitor value */ #define MOS1qgs MOS1states+ 5 /* gate-source capacitor charge */ #define MOS1cqgs MOS1states+ 6 /* gate-source capacitor current */ #define MOS1capgd MOS1states+ 7 /* gate-drain capacitor value */ #define MOS1qgd MOS1states+ 8 /* gate-drain capacitor charge */ #define MOS1cqgd MOS1states+ 9 /* gate-drain capacitor current */ #define MOS1capgb MOS1states+10 /* gate-bulk capacitor value */ #define MOS1qgb MOS1states+ 11 /* gate-bulk capacitor charge */ #define MOS1cqgb MOS1states+ 12 /* gate-bulk capacitor current */ #define MOS1qbd MOS1states+ 13 /* bulk-drain capacitor charge */ #define MOS1cqbd MOS1states+ 14 /* bulk-drain capacitor current */ #define MOS1qbs MOS1states+ 15 /* bulk-source capacitor charge */ #define MOS1cqbs MOS1states+ 16 /* bulk-source capacitor current */ #define MOS1numStates 17 #define MOS1sensxpgs MOS1states+17 /* charge sensitivities and their derivatives. * +18 for the derivatives * pointer to the beginning of the array */ #define MOS1sensxpgd MOS1states+19 #define MOS1sensxpgb MOS1states+21 #define MOS1sensxpbs MOS1states+23 #define MOS1sensxpbd MOS1states+25 #define MOS1numSenStates 10 /* per model data */ /* NOTE: parameters marked 'input - use xxxx' are paramters for * which a temperature correction is applied in MOS1temp, thus * the MOS1xxxx value in the per-instance structure should be used * instead in all calculations */ typedef struct sMOS1model { /* model structure for a resistor */ struct GENmodel gen; #define MOS1modType gen.GENmodType #define MOS1nextModel(inst) ((struct sMOS1model *)((inst)->gen.GENnextModel)) #define MOS1instances(inst) ((MOS1instance *)((inst)->gen.GENinstances)) #define MOS1modName gen.GENmodName int MOS1type; /* device type : 1 = nmos, -1 = pmos */ double MOS1tnom; /* temperature at which parameters measured */ double MOS1latDiff; double MOS1jctSatCurDensity; /* input - use tSatCurDens */ double MOS1jctSatCur; /* input - use tSatCur */ double MOS1drainResistance; double MOS1sourceResistance; double MOS1sheetResistance; double MOS1transconductance; /* input - use tTransconductance */ double MOS1gateSourceOverlapCapFactor; double MOS1gateDrainOverlapCapFactor; double MOS1gateBulkOverlapCapFactor; double MOS1oxideCapFactor; double MOS1vt0; /* input - use tVto */ double MOS1capBD; /* input - use tCbd */ double MOS1capBS; /* input - use tCbs */ double MOS1bulkCapFactor; /* input - use tCj */ double MOS1sideWallCapFactor; /* input - use tCjsw */ double MOS1bulkJctPotential; /* input - use tBulkPot */ double MOS1bulkJctBotGradingCoeff; double MOS1bulkJctSideGradingCoeff; double MOS1fwdCapDepCoeff; double MOS1phi; /* input - use tPhi */ double MOS1gamma; double MOS1lambda; double MOS1substrateDoping; int MOS1gateType; double MOS1surfaceStateDensity; double MOS1oxideThickness; double MOS1surfaceMobility; /* input - use tSurfMob */ double MOS1fNcoef; double MOS1fNexp; unsigned MOS1typeGiven :1; unsigned MOS1latDiffGiven :1; unsigned MOS1jctSatCurDensityGiven :1; unsigned MOS1jctSatCurGiven :1; unsigned MOS1drainResistanceGiven :1; unsigned MOS1sourceResistanceGiven :1; unsigned MOS1sheetResistanceGiven :1; unsigned MOS1transconductanceGiven :1; unsigned MOS1gateSourceOverlapCapFactorGiven :1; unsigned MOS1gateDrainOverlapCapFactorGiven :1; unsigned MOS1gateBulkOverlapCapFactorGiven :1; unsigned MOS1vt0Given :1; unsigned MOS1capBDGiven :1; unsigned MOS1capBSGiven :1; unsigned MOS1bulkCapFactorGiven :1; unsigned MOS1sideWallCapFactorGiven :1; unsigned MOS1bulkJctPotentialGiven :1; unsigned MOS1bulkJctBotGradingCoeffGiven :1; unsigned MOS1bulkJctSideGradingCoeffGiven :1; unsigned MOS1fwdCapDepCoeffGiven :1; unsigned MOS1phiGiven :1; unsigned MOS1gammaGiven :1; unsigned MOS1lambdaGiven :1; unsigned MOS1substrateDopingGiven :1; unsigned MOS1gateTypeGiven :1; unsigned MOS1surfaceStateDensityGiven :1; unsigned MOS1oxideThicknessGiven :1; unsigned MOS1surfaceMobilityGiven :1; unsigned MOS1tnomGiven :1; unsigned MOS1fNcoefGiven :1; unsigned MOS1fNexpGiven :1; } MOS1model; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ /* device parameters */ enum { MOS1_W = 1, MOS1_L, MOS1_AS, MOS1_AD, MOS1_PS, MOS1_PD, MOS1_NRS, MOS1_NRD, MOS1_OFF, MOS1_IC, MOS1_IC_VBS, MOS1_IC_VDS, MOS1_IC_VGS, MOS1_W_SENS, MOS1_L_SENS, MOS1_CB, MOS1_CG, MOS1_CS, MOS1_POWER, MOS1_TEMP, MOS1_M, MOS1_DTEMP, }; /* model paramerers */ enum { MOS1_MOD_VTO = 101, MOS1_MOD_KP, MOS1_MOD_GAMMA, MOS1_MOD_PHI, MOS1_MOD_LAMBDA, MOS1_MOD_RD, MOS1_MOD_RS, MOS1_MOD_CBD, MOS1_MOD_CBS, MOS1_MOD_IS, MOS1_MOD_PB, MOS1_MOD_CGSO, MOS1_MOD_CGDO, MOS1_MOD_CGBO, MOS1_MOD_CJ, MOS1_MOD_MJ, MOS1_MOD_CJSW, MOS1_MOD_MJSW, MOS1_MOD_JS, MOS1_MOD_TOX, MOS1_MOD_LD, MOS1_MOD_RSH, MOS1_MOD_U0, MOS1_MOD_FC, MOS1_MOD_NSUB, MOS1_MOD_TPG, MOS1_MOD_NSS, MOS1_MOD_NMOS, MOS1_MOD_PMOS, MOS1_MOD_TNOM, MOS1_MOD_KF, MOS1_MOD_AF, MOS1_MOD_TYPE, }; /* device questions */ enum { MOS1_CGS = 201, MOS1_CGD, MOS1_DNODE, MOS1_GNODE, MOS1_SNODE, MOS1_BNODE, MOS1_DNODEPRIME, MOS1_SNODEPRIME, MOS1_SOURCECONDUCT, MOS1_DRAINCONDUCT, MOS1_VON, MOS1_VDSAT, MOS1_SOURCEVCRIT, MOS1_DRAINVCRIT, MOS1_CD, MOS1_CBS, MOS1_CBD, MOS1_GMBS, MOS1_GM, MOS1_GDS, MOS1_GBD, MOS1_GBS, MOS1_CAPBD, MOS1_CAPBS, MOS1_CAPZEROBIASBD, MOS1_CAPZEROBIASBDSW, MOS1_CAPZEROBIASBS, MOS1_CAPZEROBIASBSSW, MOS1_VBD, MOS1_VBS, MOS1_VGS, MOS1_VDS, MOS1_CAPGS, MOS1_QGS, MOS1_CQGS, MOS1_CAPGD, MOS1_QGD, MOS1_CQGD, MOS1_CAPGB, MOS1_QGB, MOS1_CQGB, MOS1_QBD, MOS1_CQBD, MOS1_QBS, MOS1_CQBS, MOS1_L_SENS_REAL, MOS1_L_SENS_IMAG, MOS1_L_SENS_MAG, MOS1_L_SENS_PH, MOS1_L_SENS_CPLX, MOS1_W_SENS_REAL, MOS1_W_SENS_IMAG, MOS1_W_SENS_MAG, MOS1_W_SENS_PH, MOS1_W_SENS_CPLX, MOS1_L_SENS_DC, MOS1_W_SENS_DC, MOS1_SOURCERESIST, MOS1_DRAINRESIST, }; /* model questions */ #include "mos1ext.h" #endif /*MOS1*/ tmpk8ny_4pz/src/spicelib/devices/mos1/mos1sset.c0000644000175000017500000000261013546075722021763 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mos1defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS1sSetup(SENstruct *info, GENmodel *inModel) /* loop through all the devices and * allocate parameter #s to design parameters */ { MOS1model *model = (MOS1model *)inModel; MOS1instance *here; /* loop through all the models */ for( ; model != NULL; model = MOS1nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS1instances(model); here != NULL ; here=MOS1nextInstance(here)) { if(here->MOS1senParmNo){ if((here->MOS1sens_l)&&(here->MOS1sens_w)){ here->MOS1senParmNo = ++(info->SENparms); ++(info->SENparms);/* MOS has two design parameters */ } else{ here->MOS1senParmNo = ++(info->SENparms); } } if((here->MOS1sens = TMALLOC(double, 70)) == NULL) { return(E_NOMEM); } here->MOS1senPertFlag = OFF; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos1/mos1conv.c0000644000175000017500000000634713546075722021765 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos1defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS1convTest(GENmodel *inModel, CKTcircuit *ckt) { MOS1model *model = (MOS1model*)inModel; MOS1instance *here; double delvbs; double delvbd; double delvgs; double delvds; double delvgd; double cbhat; double cdhat; double vbs; double vbd; double vgs; double vds; double vgd; double vgdo; double tol; for( ; model != NULL; model = MOS1nextModel(model)) { for(here = MOS1instances(model); here!= NULL; here = MOS1nextInstance(here)) { vbs = model->MOS1type * ( *(ckt->CKTrhs+here->MOS1bNode) - *(ckt->CKTrhs+here->MOS1sNodePrime)); vgs = model->MOS1type * ( *(ckt->CKTrhs+here->MOS1gNode) - *(ckt->CKTrhs+here->MOS1sNodePrime)); vds = model->MOS1type * ( *(ckt->CKTrhs+here->MOS1dNodePrime) - *(ckt->CKTrhs+here->MOS1sNodePrime)); vbd=vbs-vds; vgd=vgs-vds; vgdo = *(ckt->CKTstate0 + here->MOS1vgs) - *(ckt->CKTstate0 + here->MOS1vds); delvbs = vbs - *(ckt->CKTstate0 + here->MOS1vbs); delvbd = vbd - *(ckt->CKTstate0 + here->MOS1vbd); delvgs = vgs - *(ckt->CKTstate0 + here->MOS1vgs); delvds = vds - *(ckt->CKTstate0 + here->MOS1vds); delvgd = vgd-vgdo; /* these are needed for convergence testing */ if (here->MOS1mode >= 0) { cdhat= here->MOS1cd- here->MOS1gbd * delvbd + here->MOS1gmbs * delvbs + here->MOS1gm * delvgs + here->MOS1gds * delvds ; } else { cdhat= here->MOS1cd - ( here->MOS1gbd - here->MOS1gmbs) * delvbd - here->MOS1gm * delvgd + here->MOS1gds * delvds ; } cbhat= here->MOS1cbs + here->MOS1cbd + here->MOS1gbd * delvbd + here->MOS1gbs * delvbs ; /* * check convergence */ tol=ckt->CKTreltol*MAX(fabs(cdhat),fabs(here->MOS1cd))+ ckt->CKTabstol; if (fabs(cdhat-here->MOS1cd) >= tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue, we haven't converged */ } else { tol=ckt->CKTreltol* MAX(fabs(cbhat),fabs(here->MOS1cbs+here->MOS1cbd))+ ckt->CKTabstol; if (fabs(cbhat-(here->MOS1cbs+here->MOS1cbd)) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue, we haven't converged*/ } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos1/mos1sld.c0000644000175000017500000006440113546075722021575 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ /* actually load the current sensitivity * information into the array previously provided */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mos1defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS1sLoad(GENmodel *inModel, CKTcircuit *ckt) { MOS1model *model = (MOS1model *)inModel; MOS1instance *here; double SaveState[44]; int save_mode; int i; int iparmno; int error; int flag; double A0; double DELA; double Apert; double DELAinv; double gspr0; double gspr; double gdpr0; double gdpr; double cdpr0; double cspr0; double cd0; double cbd0; double cbs0; double cd; double cbd; double cbs; double DcdprDp; double DcsprDp; double DcbDp; double DcdDp; double DcbsDp; double DcbdDp; double DcdprmDp; double DcsprmDp; double qgs0; double qgd0; double qgb0; double qbd0; double qbd; double qbs0; double qbs; double DqgsDp; double DqgdDp; double DqgbDp; double DqbdDp; double DqbsDp; double Osxpgs; double Osxpgd; double Osxpgb; double Osxpbd; double Osxpbs; double tag0; double tag1; double arg; double sarg; double sargsw; int offset; double EffectiveLength; SENstruct *info; #ifdef SENSDEBUG printf("MOS1senload \n"); printf("CKTtime = %.5e\n",ckt->CKTtime); printf("CKTorder = %d\n",ckt->CKTorder); #endif /* SENSDEBUG */ info = ckt->CKTsenInfo; info->SENstatus = PERTURBATION; tag0 = ckt->CKTag[0]; tag1 = ckt->CKTag[1]; if(ckt->CKTorder == 1){ tag1 = 0; } /* loop through all the models */ for( ; model != NULL; model = MOS1nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS1instances(model); here != NULL ; here=MOS1nextInstance(here)) { #ifdef SENSDEBUG printf("senload instance name %s\n",here->MOS1name); printf("gate = %d ,drain = %d, drainprm = %d\n", here->MOS1gNode,here->MOS1dNode,here->MOS1dNodePrime); printf("source = %d , sourceprm = %d ,body = %d, senparmno = %d\n", here->MOS1sNode ,here->MOS1sNodePrime, here->MOS1bNode,here->MOS1senParmNo); #endif /* SENSDEBUG */ /* save the unperturbed values in the state vector */ for(i=0; i <= 16; i++){ *(SaveState + i) = *(ckt->CKTstate0 + here->MOS1states + i); } *(SaveState + 17) = here->MOS1sourceConductance; *(SaveState + 18) = here->MOS1drainConductance; *(SaveState + 19) = here->MOS1cd; *(SaveState + 20) = here->MOS1cbs; *(SaveState + 21) = here->MOS1cbd; *(SaveState + 22) = here->MOS1gmbs; *(SaveState + 23) = here->MOS1gm; *(SaveState + 24) = here->MOS1gds; *(SaveState + 25) = here->MOS1gbd; *(SaveState + 26) = here->MOS1gbs; *(SaveState + 27) = here->MOS1capbd; *(SaveState + 28) = here->MOS1capbs; *(SaveState + 29) = here->MOS1Cbd; *(SaveState + 30) = here->MOS1Cbdsw; *(SaveState + 31) = here->MOS1Cbs; *(SaveState + 32) = here->MOS1Cbssw; *(SaveState + 33) = here->MOS1f2d; *(SaveState + 34) = here->MOS1f3d; *(SaveState + 35) = here->MOS1f4d; *(SaveState + 36) = here->MOS1f2s; *(SaveState + 37) = here->MOS1f3s; *(SaveState + 38) = here->MOS1f4s; *(SaveState + 39) = here->MOS1cgs; *(SaveState + 40) = here->MOS1cgd; *(SaveState + 41) = here->MOS1cgb; *(SaveState + 42) = here->MOS1vdsat; *(SaveState + 43) = here->MOS1von; save_mode = here->MOS1mode; if(here->MOS1senParmNo == 0) goto next1; #ifdef SENSDEBUG printf("without perturbation \n"); printf("gbd =%.5e\n",here->MOS1gbd); printf("satCur =%.5e\n",here->MOS1tSatCur); printf("satCurDens =%.5e\n",here->MOS1tSatCurDens); printf("vbd =%.5e\n",*(ckt->CKTstate0 + here->MOS1vbd)); #endif /* SENSDEBUG */ cdpr0= here->MOS1cd; cspr0= -(here->MOS1cd + here->MOS1cbd + here->MOS1cbs); if((info->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)){ qgs0 = *(ckt->CKTstate1 + here->MOS1qgs); qgd0 = *(ckt->CKTstate1 + here->MOS1qgd); qgb0 = *(ckt->CKTstate1 + here->MOS1qgb); } else{ qgs0 = *(ckt->CKTstate0 + here->MOS1qgs); qgd0 = *(ckt->CKTstate0 + here->MOS1qgd); qgb0 = *(ckt->CKTstate0 + here->MOS1qgb); } here->MOS1senPertFlag = ON; error = MOS1load((GENmodel*)model,ckt); if(error) return(error); cd0 = here->MOS1cd ; cbd0 = here->MOS1cbd ; cbs0 = here->MOS1cbs ; gspr0= here->MOS1sourceConductance ; gdpr0= here->MOS1drainConductance ; qbs0 = *(ckt->CKTstate0 + here->MOS1qbs); qbd0 = *(ckt->CKTstate0 + here->MOS1qbd); for( flag = 0 ; flag <= 1 ; flag++){ if(here->MOS1sens_l == 0) if(flag == 0) goto next2; if(here->MOS1sens_w == 0) if(flag == 1) goto next2; if(flag == 0){ A0 = here->MOS1l; DELA = info->SENpertfac * A0; DELAinv = 1.0/DELA; Apert = A0 + DELA; here->MOS1l = Apert; } else{ A0 = here->MOS1w; DELA = info->SENpertfac * A0; DELAinv = 1.0/DELA; Apert = A0 + DELA; here->MOS1w = Apert; here->MOS1drainArea *= (1 + info->SENpertfac); here->MOS1sourceArea *= (1 + info->SENpertfac); here->MOS1Cbd *= (1 + info->SENpertfac); here->MOS1Cbs *= (1 + info->SENpertfac); if(here->MOS1drainPerimiter){ here->MOS1Cbdsw += here->MOS1Cbdsw * DELA/here->MOS1drainPerimiter; } if(here->MOS1sourcePerimiter){ here->MOS1Cbssw += here->MOS1Cbssw * DELA/here->MOS1sourcePerimiter; } if(*(ckt->CKTstate0 + here->MOS1vbd) >= here->MOS1tDepCap){ arg = 1-model->MOS1fwdCapDepCoeff; sarg = exp( (-model->MOS1bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS1bulkJctSideGradingCoeff) * log(arg) ); here->MOS1f2d = here->MOS1Cbd* (1-model->MOS1fwdCapDepCoeff* (1+model->MOS1bulkJctBotGradingCoeff))* sarg/arg + here->MOS1Cbdsw*(1-model->MOS1fwdCapDepCoeff* (1+model->MOS1bulkJctSideGradingCoeff))* sargsw/arg; here->MOS1f3d = here->MOS1Cbd * model->MOS1bulkJctBotGradingCoeff * sarg/arg/ here->MOS1tBulkPot + here->MOS1Cbdsw * model->MOS1bulkJctSideGradingCoeff * sargsw/arg/ here->MOS1tBulkPot; here->MOS1f4d = here->MOS1Cbd* here->MOS1tBulkPot*(1-arg*sarg)/ (1-model->MOS1bulkJctBotGradingCoeff) + here->MOS1Cbdsw*here->MOS1tBulkPot* (1-arg*sargsw)/ (1-model->MOS1bulkJctSideGradingCoeff) -here->MOS1f3d/2* (here->MOS1tDepCap*here->MOS1tDepCap) -here->MOS1tDepCap * here->MOS1f2d; } if(*(ckt->CKTstate0 + here->MOS1vbs) >= here->MOS1tDepCap){ arg = 1-model->MOS1fwdCapDepCoeff; sarg = exp( (-model->MOS1bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS1bulkJctSideGradingCoeff) * log(arg) ); here->MOS1f2s = here->MOS1Cbs* (1-model->MOS1fwdCapDepCoeff* (1+model->MOS1bulkJctBotGradingCoeff))* sarg/arg + here->MOS1Cbssw*(1-model->MOS1fwdCapDepCoeff* (1+model->MOS1bulkJctSideGradingCoeff))* sargsw/arg; here->MOS1f3s = here->MOS1Cbs * model->MOS1bulkJctBotGradingCoeff * sarg/arg/ here->MOS1tBulkPot + here->MOS1Cbssw * model->MOS1bulkJctSideGradingCoeff * sargsw/arg/ here->MOS1tBulkPot; here->MOS1f4s = here->MOS1Cbs* here->MOS1tBulkPot*(1-arg*sarg)/ (1-model->MOS1bulkJctBotGradingCoeff) + here->MOS1Cbssw*here->MOS1tBulkPot* (1-arg*sargsw)/ (1-model->MOS1bulkJctSideGradingCoeff) -here->MOS1f3s/2* (here->MOS1tDepCap*here->MOS1tDepCap) -here->MOS1tDepCap * here->MOS1f2s; } here->MOS1drainConductance *= Apert/A0; here->MOS1sourceConductance *= Apert/A0; } #ifdef SENSDEBUG if(flag == 0) printf("perturbation of l\n"); if(flag == 1) printf("perturbation of w\n"); #endif /* SENSDEBUG */ error = MOS1load((GENmodel*)model,ckt); if(error) return(error); if(flag == 0){ here->MOS1l = A0; } else{ here->MOS1w = A0; here->MOS1drainArea /= (1 + info->SENpertfac); here->MOS1sourceArea /= (1 + info->SENpertfac); here->MOS1drainConductance *= A0/Apert; here->MOS1sourceConductance *= A0/Apert; } cd = here->MOS1cd ; cbd = here->MOS1cbd ; cbs = here->MOS1cbs ; gspr= here->MOS1sourceConductance ; gdpr= here->MOS1drainConductance ; DcdDp = (cd - cd0) * DELAinv; DcbsDp = (cbs - cbs0) * DELAinv; DcbdDp = (cbd - cbd0) * DELAinv; DcbDp = ( DcbsDp + DcbdDp ); DcdprDp = 0; DcsprDp = 0; if(here->MOS1dNode != here->MOS1dNodePrime) if(gdpr0) DcdprDp = cdpr0 * (gdpr - gdpr0)/gdpr0 * DELAinv; if(here->MOS1sNode != here->MOS1sNodePrime) if(gspr0) DcsprDp = cspr0 * (gspr - gspr0)/gspr0 * DELAinv; DcdprmDp = ( - DcdprDp + DcdDp); DcsprmDp = ( - DcbsDp - DcdDp - DcbdDp - DcsprDp); if(flag == 0){ EffectiveLength = here->MOS1l - 2*model->MOS1latDiff; if(EffectiveLength == 0){ DqgsDp = 0; DqgdDp = 0; DqgbDp = 0; } else{ DqgsDp = model->MOS1type * qgs0 / EffectiveLength; DqgdDp = model->MOS1type * qgd0 / EffectiveLength; DqgbDp = model->MOS1type * qgb0 / EffectiveLength; } } else{ DqgsDp = model->MOS1type * qgs0 / here->MOS1w; DqgdDp = model->MOS1type * qgd0 / here->MOS1w; DqgbDp = model->MOS1type * qgb0 / here->MOS1w; } qbd = *(ckt->CKTstate0 + here->MOS1qbd); qbs = *(ckt->CKTstate0 + here->MOS1qbs); DqbsDp = model->MOS1type * (qbs - qbs0)*DELAinv; DqbdDp = model->MOS1type * (qbd - qbd0)*DELAinv; if(flag == 0){ *(here->MOS1dphigs_dl) = DqgsDp; *(here->MOS1dphigd_dl) = DqgdDp; *(here->MOS1dphibs_dl) = DqbsDp; *(here->MOS1dphibd_dl) = DqbdDp; *(here->MOS1dphigb_dl) = DqgbDp; } else{ *(here->MOS1dphigs_dw) = DqgsDp; *(here->MOS1dphigd_dw) = DqgdDp; *(here->MOS1dphibs_dw) = DqbsDp; *(here->MOS1dphibd_dw) = DqbdDp; *(here->MOS1dphigb_dw) = DqgbDp; } #ifdef SENSDEBUG printf("CKTag[0]=%.7e,CKTag[1]=%.7e,flag= %d\n", ckt->CKTag[0],ckt->CKTag[1],flag); printf("cd0 = %.7e ,cd = %.7e,\n",cd0,cd); printf("cbs0 = %.7e ,cbs = %.7e,\n",cbs0,cbs); printf("cbd0 = %.7e ,cbd = %.7e,\n",cbd0,cbd); printf("DcdprmDp = %.7e,\n",DcdprmDp); printf("DcsprmDp = %.7e,\n",DcsprmDp); printf("DcdprDp = %.7e,\n",DcdprDp); printf("DcsprDp = %.7e,\n",DcsprDp); printf("qgs0 = %.7e \n",qgs0); printf("qgd0 = %.7e \n",qgd0); printf("qgb0 = %.7e \n",qgb0); printf("qbs0 = %.7e ,qbs = %.7e,\n",qbs0,qbs); printf("qbd0 = %.7e ,qbd = %.7e,\n",qbd0,qbd); printf("DqgsDp = %.7e \n",DqgsDp); printf("DqgdDp = %.7e \n",DqgdDp); printf("DqgbDp = %.7e \n",DqgbDp); printf("DqbsDp = %.7e \n",DqbsDp); printf("DqbdDp = %.7e \n",DqbdDp); printf("EffectiveLength = %.7e \n",EffectiveLength); printf("tdepCap = %.7e \n",here->MOS1tDepCap); printf("\n"); #endif /* SENSDEBUG*/ if((info->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)) goto next2; /* * load RHS matrix */ if(flag == 0){ *(info->SEN_RHS[here->MOS1bNode] + here->MOS1senParmNo) -= model->MOS1type * DcbDp; *(info->SEN_RHS[here->MOS1dNode] + here->MOS1senParmNo) -= model->MOS1type * DcdprDp; *(info->SEN_RHS[here->MOS1dNodePrime] + here->MOS1senParmNo) -= model->MOS1type * DcdprmDp; *(info->SEN_RHS[here->MOS1sNode] + here->MOS1senParmNo) -= model->MOS1type * DcsprDp; *(info->SEN_RHS[here->MOS1sNodePrime] + here->MOS1senParmNo) -= model->MOS1type * DcsprmDp; } else{ offset = here->MOS1sens_l; *(info->SEN_RHS[here->MOS1bNode] + here->MOS1senParmNo + offset) -= model->MOS1type * DcbDp; *(info->SEN_RHS[here->MOS1dNode] + here->MOS1senParmNo + offset) -= model->MOS1type * DcdprDp; *(info->SEN_RHS[here->MOS1dNodePrime] + here->MOS1senParmNo + offset) -= model->MOS1type * DcdprmDp; *(info->SEN_RHS[here->MOS1sNode] + here->MOS1senParmNo + offset) -= model->MOS1type * DcsprDp; *(info->SEN_RHS[here->MOS1sNodePrime] + here->MOS1senParmNo + offset) -= model->MOS1type * DcsprmDp; } #ifdef SENSDEBUG printf("after loading\n"); if(flag == 0){ printf("DcbDp=%.7e\n", *(info->SEN_RHS[here->MOS1bNode] + here->MOS1senParmNo)); printf("DcdprDp=%.7e\n", *(info->SEN_RHS[here->MOS1dNode] + here->MOS1senParmNo)); printf("DcsprDp=%.7e\n", *(info->SEN_RHS[here->MOS1sNode] + here->MOS1senParmNo)); printf("DcdprmDp=%.7e\n", *(info->SEN_RHS[here->MOS1dNodePrime] + here->MOS1senParmNo)); printf("DcsprmDp=%.7e\n", *(info->SEN_RHS[here->MOS1sNodePrime] + here->MOS1senParmNo)); printf("\n"); } else{ printf("DcbDp=%.7e\n", *(info->SEN_RHS[here->MOS1bNode] + here->MOS1senParmNo + here->MOS1sens_l)); printf("DcdprDp=%.7e\n", *(info->SEN_RHS[here->MOS1dNode] + here->MOS1senParmNo + here->MOS1sens_l)); printf("DcsprDp=%.7e\n", *(info->SEN_RHS[here->MOS1sNode] + here->MOS1senParmNo + here->MOS1sens_l)); printf("DcdprmDp=%.7e\n", *(info->SEN_RHS[here->MOS1dNodePrime] + here->MOS1senParmNo + here->MOS1sens_l)); printf("DcsprmDp=%.7e\n", *(info->SEN_RHS[here->MOS1sNodePrime] + here->MOS1senParmNo + here->MOS1sens_l)); } #endif /* SENSDEBUG*/ next2: ; } next1: if((info->SENmode == DCSEN) || (ckt->CKTmode&MODETRANOP) ) goto restore; if((info->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)) goto restore; for(iparmno = 1;iparmno<=info->SENparms;iparmno++){ #ifdef SENSDEBUG printf("after conductive currents\n"); printf("iparmno = %d\n",iparmno); printf("DcbDp=%.7e\n", *(info->SEN_RHS[here->MOS1bNode] + iparmno)); printf("DcdprDp=%.7e\n", *(info->SEN_RHS[here->MOS1dNode] + iparmno)); printf("DcdprmDp=%.7e\n", *(info->SEN_RHS[here->MOS1dNodePrime] + iparmno)); printf("DcsprDp=%.7e\n", *(info->SEN_RHS[here->MOS1sNode] + iparmno)); printf("DcsprmDp=%.7e\n", *(info->SEN_RHS[here->MOS1sNodePrime] + iparmno)); printf("\n"); #endif /* SENSDEBUG */ Osxpgs = tag0 * *(ckt->CKTstate1 + here->MOS1sensxpgs + 10*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->MOS1sensxpgs + 10*(iparmno - 1) + 1); Osxpgd = tag0 * *(ckt->CKTstate1 + here->MOS1sensxpgd + 10*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->MOS1sensxpgd + 10*(iparmno - 1) + 1); Osxpbs = tag0 * *(ckt->CKTstate1 + here->MOS1sensxpbs + 10*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->MOS1sensxpbs + 10*(iparmno - 1) + 1); Osxpbd =tag0 * *(ckt->CKTstate1 + here->MOS1sensxpbd + 10*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->MOS1sensxpbd + 10*(iparmno - 1) + 1); Osxpgb = tag0 * *(ckt->CKTstate1 + here->MOS1sensxpgb + 10*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->MOS1sensxpgb + 10*(iparmno - 1) + 1); #ifdef SENSDEBUG printf("iparmno=%d\n",iparmno); printf("sxpgs=%.7e,sdgs=%.7e\n", *(ckt->CKTstate1 + here->MOS1sensxpgs + 10*(iparmno - 1)), *(ckt->CKTstate1 + here->MOS1sensxpgs + 10*(iparmno - 1) + 1)); printf("sxpgd=%.7e,sdgd=%.7e\n", *(ckt->CKTstate1 + here->MOS1sensxpgd + 10*(iparmno - 1)), *(ckt->CKTstate1 + here->MOS1sensxpgd + 10*(iparmno - 1) + 1)); printf("sxpbs=%.7e,sdbs=%.7e\n", *(ckt->CKTstate1 + here->MOS1sensxpbs + 10*(iparmno - 1)), *(ckt->CKTstate1 + here->MOS1sensxpbs + 10*(iparmno - 1) + 1)); printf("sxpbd=%.7e,sdbd=%.7e\n", *(ckt->CKTstate1 + here->MOS1sensxpbd + 10*(iparmno - 1)), *(ckt->CKTstate1 + here->MOS1sensxpbd + 10*(iparmno - 1) + 1)); printf("sxpgb=%.7e,sdgb=%.7e\n", *(ckt->CKTstate1 + here->MOS1sensxpgb + 10*(iparmno - 1)), *(ckt->CKTstate1 + here->MOS1sensxpgb + 10*(iparmno - 1) + 1)); printf("before loading DqDp\n"); printf("Osxpgs=%.7e,Osxpgd=%.7e\n",Osxpgs,Osxpgd); printf("Osxpbs=%.7e,Osxpbd=%.7e,Osxpgb=%.7e\n", Osxpbs,Osxpbd,Osxpgb); printf("\n"); #endif /* SENSDEBUG */ if(here->MOS1sens_l && (iparmno == here->MOS1senParmNo)){ Osxpgs -= tag0 * *(here->MOS1dphigs_dl); Osxpgd -= tag0 * *(here->MOS1dphigd_dl); Osxpbs -= tag0 * *(here->MOS1dphibs_dl); Osxpbd -= tag0 * *(here->MOS1dphibd_dl); Osxpgb -= tag0 * *(here->MOS1dphigb_dl); } if(here->MOS1sens_w && (iparmno == (here->MOS1senParmNo + (int) here->MOS1sens_l))){ Osxpgs -= tag0 * *(here->MOS1dphigs_dw); Osxpgd -= tag0 * *(here->MOS1dphigd_dw); Osxpbs -= tag0 * *(here->MOS1dphibs_dw); Osxpbd -= tag0 * *(here->MOS1dphibd_dw); Osxpgb -= tag0 * *(here->MOS1dphigb_dw); } #ifdef SENSDEBUG printf("after loading DqDp\n"); printf("DqgsDp=%.7e",DqgsDp); printf("Osxpgs=%.7e,Osxpgd=%.7e\n",Osxpgs,Osxpgd); printf("Osxpbs=%.7e,Osxpbd=%.7e,Osxpgb=%.7e\n", Osxpbs,Osxpbd,Osxpgb); #endif /* SENSDEBUG */ *(info->SEN_RHS[here->MOS1bNode] + iparmno) += Osxpbs + Osxpbd -Osxpgb; *(info->SEN_RHS[here->MOS1gNode] + iparmno) += Osxpgs + Osxpgd + Osxpgb; *(info->SEN_RHS[here->MOS1dNodePrime] + iparmno) -= Osxpgd + Osxpbd ; *(info->SEN_RHS[here->MOS1sNodePrime] + iparmno) -= Osxpgs + Osxpbs; #ifdef SENSDEBUG printf("after capacitive currents\n"); printf("DcbDp=%.7e\n", *(info->SEN_RHS[here->MOS1bNode] + iparmno)); printf("DcdprDp=%.7e\n", *(info->SEN_RHS[here->MOS1dNode] + iparmno)); printf("DcdprmDp=%.7e\n", *(info->SEN_RHS[here->MOS1dNodePrime] + iparmno)); printf("DcsprDp=%.7e\n", *(info->SEN_RHS[here->MOS1sNode] + iparmno)); printf("DcsprmDp=%.7e\n", *(info->SEN_RHS[here->MOS1sNodePrime] + iparmno)); #endif /* SENSDEBUG */ } restore: /* put the unperturbed values back into the state vector */ for(i=0; i <= 16; i++) *(ckt->CKTstate0 + here->MOS1states + i) = *(SaveState + i); here->MOS1sourceConductance = *(SaveState + 17) ; here->MOS1drainConductance = *(SaveState + 18) ; here->MOS1cd = *(SaveState + 19) ; here->MOS1cbs = *(SaveState + 20) ; here->MOS1cbd = *(SaveState + 21) ; here->MOS1gmbs = *(SaveState + 22) ; here->MOS1gm = *(SaveState + 23) ; here->MOS1gds = *(SaveState + 24) ; here->MOS1gbd = *(SaveState + 25) ; here->MOS1gbs = *(SaveState + 26) ; here->MOS1capbd = *(SaveState + 27) ; here->MOS1capbs = *(SaveState + 28) ; here->MOS1Cbd = *(SaveState + 29) ; here->MOS1Cbdsw = *(SaveState + 30) ; here->MOS1Cbs = *(SaveState + 31) ; here->MOS1Cbssw = *(SaveState + 32) ; here->MOS1f2d = *(SaveState + 33) ; here->MOS1f3d = *(SaveState + 34) ; here->MOS1f4d = *(SaveState + 35) ; here->MOS1f2s = *(SaveState + 36) ; here->MOS1f3s = *(SaveState + 37) ; here->MOS1f4s = *(SaveState + 38) ; here->MOS1cgs = *(SaveState + 39) ; here->MOS1cgd = *(SaveState + 40) ; here->MOS1cgb = *(SaveState + 41) ; here->MOS1vdsat = *(SaveState + 42) ; here->MOS1von = *(SaveState + 43) ; here->MOS1mode = save_mode ; here->MOS1senPertFlag = OFF; } } info->SENstatus = NORMAL; #ifdef SENSDEBUG printf("MOS1senload end\n"); #endif /* SENSDEBUG */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos1/mos1supd.c0000644000175000017500000001566713546075722022000 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mos1defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* update the charge sensitivities and their derivatives */ int MOS1sUpdate(GENmodel *inModel, CKTcircuit *ckt) { MOS1model *model = (MOS1model *)inModel; MOS1instance *here; int iparmno; double sb; double sg; double sdprm; double ssprm; double sxpgs; double sxpgd; double sxpbs; double sxpbd; double sxpgb; double dummy1; double dummy2; SENstruct *info; if(ckt->CKTtime == 0) return(OK); info = ckt->CKTsenInfo; #ifdef SENSDEBUG printf("MOS1senupdate\n"); printf("CKTtime = %.5e\n",ckt->CKTtime); #endif /* SENSDEBUG */ sxpgs = 0; sxpgd = 0; sxpbs = 0; sxpbd = 0; sxpgb = 0; dummy1 = 0; dummy2 = 0; /* loop through all the MOS1 models */ for( ; model != NULL; model = MOS1nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS1instances(model); here != NULL ; here=MOS1nextInstance(here)) { #ifdef SENSDEBUG printf("senupdate instance name %s\n",here->MOS1name); printf("before loading\n"); printf("CKTag[0] = %.2e,CKTag[1] = %.2e\n", ckt->CKTag[0],ckt->CKTag[1]); printf("capgs = %.7e\n",here->MOS1cgs); printf("capgd = %.7e\n",here->MOS1cgd); printf("capgb = %.7e\n",here->MOS1cgb); printf("capbs = %.7e\n",here->MOS1capbs); printf("capbd = %.7e\n",here->MOS1capbd); #endif /* SENSDEBUG */ for(iparmno = 1;iparmno<=info->SENparms;iparmno++){ sb = *(info->SEN_Sap[here->MOS1bNode] + iparmno); sg = *(info->SEN_Sap[here->MOS1gNode] + iparmno); ssprm = *(info->SEN_Sap[here->MOS1sNodePrime] + iparmno); sdprm = *(info->SEN_Sap[here->MOS1dNodePrime] + iparmno); #ifdef SENSDEBUG printf("iparmno = %d\n",iparmno); printf("sb = %.7e,sg = %.7e\n",sb,sg); printf("ssprm = %.7e,sdprm = %.7e\n",ssprm,sdprm); #endif /* SENSDEBUG */ sxpgs = (sg - ssprm) * here->MOS1cgs ; sxpgd = (sg - sdprm) * here->MOS1cgd ; sxpgb = (sg - sb) * here->MOS1cgb ; sxpbs = (sb - ssprm) * here->MOS1capbs ; sxpbd = (sb - sdprm) * here->MOS1capbd ; if(here->MOS1sens_l && (iparmno == here->MOS1senParmNo)){ sxpgs += *(here->MOS1dphigs_dl); sxpgd += *(here->MOS1dphigd_dl); sxpbs += *(here->MOS1dphibs_dl); sxpbd += *(here->MOS1dphibd_dl); sxpgb += *(here->MOS1dphigb_dl); } if(here->MOS1sens_w && (iparmno == (here->MOS1senParmNo + (int) here->MOS1sens_l))){ sxpgs += *(here->MOS1dphigs_dw); sxpgd += *(here->MOS1dphigd_dw); sxpbs += *(here->MOS1dphibs_dw); sxpbd += *(here->MOS1dphibd_dw); sxpgb += *(here->MOS1dphigb_dw); } if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->MOS1sensxpgs + 10 * (iparmno - 1)) = sxpgs; *(ckt->CKTstate1 + here->MOS1sensxpgd + 10 * (iparmno - 1)) = sxpgd; *(ckt->CKTstate1 + here->MOS1sensxpbs + 10 * (iparmno - 1)) = sxpbs; *(ckt->CKTstate1 + here->MOS1sensxpbd + 10 * (iparmno - 1)) = sxpbd; *(ckt->CKTstate1 + here->MOS1sensxpgb + 10 * (iparmno - 1)) = sxpgb; *(ckt->CKTstate1 + here->MOS1sensxpgs + 10 * (iparmno - 1) + 1) = 0; *(ckt->CKTstate1 + here->MOS1sensxpgd + 10 * (iparmno - 1) + 1) = 0; *(ckt->CKTstate1 + here->MOS1sensxpbs + 10 * (iparmno - 1) + 1) = 0; *(ckt->CKTstate1 + here->MOS1sensxpbd + 10 * (iparmno - 1) + 1) = 0; *(ckt->CKTstate1 + here->MOS1sensxpgb + 10 * (iparmno - 1) + 1) = 0; goto next; } *(ckt->CKTstate0 + here->MOS1sensxpgs + 10 * (iparmno - 1)) = sxpgs; *(ckt->CKTstate0 + here->MOS1sensxpgd + 10 * (iparmno - 1)) = sxpgd; *(ckt->CKTstate0 + here->MOS1sensxpbs + 10 * (iparmno - 1)) = sxpbs; *(ckt->CKTstate0 + here->MOS1sensxpbd + 10 * (iparmno - 1)) = sxpbd; *(ckt->CKTstate0 + here->MOS1sensxpgb + 10 * (iparmno - 1)) = sxpgb; NIintegrate(ckt,&dummy1,&dummy2,here->MOS1cgs, here->MOS1sensxpgs + 10*(iparmno -1)); NIintegrate(ckt,&dummy1,&dummy2,here->MOS1cgd, here->MOS1sensxpgd + 10*(iparmno -1)); NIintegrate(ckt,&dummy1,&dummy2,here->MOS1cgb, here->MOS1sensxpgb + 10*(iparmno -1)); NIintegrate(ckt,&dummy1,&dummy2,here->MOS1capbs, here->MOS1sensxpbs + 10*(iparmno -1)); NIintegrate(ckt,&dummy1,&dummy2,here->MOS1capbd, here->MOS1sensxpbd + 10*(iparmno -1)); next: ; #ifdef SENSDEBUG printf("after loading\n"); printf("sxpgs = %.7e,sdotxpgs = %.7e\n", sxpgs,*(ckt->CKTstate0 + here->MOS1sensxpgs + 10 * (iparmno - 1) + 1)); printf("sxpgd = %.7e,sdotxpgd = %.7e\n", sxpgd,*(ckt->CKTstate0 + here->MOS1sensxpgd + 10 * (iparmno - 1) + 1)); printf("sxpgb = %.7e,sdotxpgb = %.7e\n", sxpgb,*(ckt->CKTstate0 + here->MOS1sensxpgb + 10 * (iparmno - 1) + 1)); printf("sxpbs = %.7e,sdotxpbs = %.7e\n", sxpbs,*(ckt->CKTstate0 + here->MOS1sensxpbs + 10 * (iparmno - 1) + 1)); printf("sxpbd = %.7e,sdotxpbd = %.7e\n", sxpbd,*(ckt->CKTstate0 + here->MOS1sensxpbd + 10 * (iparmno - 1) + 1)); #endif /* SENSDEBUG */ } } } #ifdef SENSDEBUG printf("MOS1senupdate end\n"); #endif /* SENSDEBUG */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos1/mos1sprt.c0000644000175000017500000000417413546075722022004 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes This function is obsolete (was used by an old sensitivity analysis) **********/ /* Pretty print the sensitivity info for all * the MOS1 devices in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mos1defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" void MOS1sPrint(GENmodel *inModel, CKTcircuit *ckt) /* Pretty print the sensitivity info for all the MOS1 * devices in the circuit. */ { MOS1model *model = (MOS1model *)inModel; MOS1instance *here; printf("LEVEL 1 MOSFETS-----------------\n"); /* loop through all the MOS1 models */ for( ; model != NULL; model = MOS1nextModel(model)) { printf("Model name:%s\n",model->MOS1modName); /* loop through all the instances of the model */ for (here = MOS1instances(model); here != NULL ; here=MOS1nextInstance(here)) { printf(" Instance name:%s\n",here->MOS1name); printf(" Drain, Gate , Source nodes: %s, %s ,%s\n", CKTnodName(ckt,here->MOS1dNode),CKTnodName(ckt,here->MOS1gNode), CKTnodName(ckt,here->MOS1sNode)); printf(" Multiplier: %g ",here->MOS1m); printf(here->MOS1mGiven ? "(specified)\n" : "(default)\n"); printf(" Length: %g ",here->MOS1l); printf(here->MOS1lGiven ? "(specified)\n" : "(default)\n"); printf(" Width: %g ",here->MOS1w); printf(here->MOS1wGiven ? "(specified)\n" : "(default)\n"); if(here->MOS1sens_l == 1){ printf(" MOS1senParmNo:l = %d ",here->MOS1senParmNo); } else{ printf(" MOS1senParmNo:l = 0 "); } if(here->MOS1sens_w == 1){ printf(" w = %d \n",here->MOS1senParmNo + here->MOS1sens_l); } else{ printf(" w = 0 \n"); } } } } tmpk8ny_4pz/src/spicelib/devices/mos1/mos1mpar.c0000644000175000017500000001226113546075722021747 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "mos1defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS1mParam(int param, IFvalue *value, GENmodel *inModel) { MOS1model *model = (MOS1model *)inModel; switch(param) { case MOS1_MOD_TNOM: model->MOS1tnom = value->rValue + CONSTCtoK; model->MOS1tnomGiven = TRUE; break; case MOS1_MOD_VTO: model->MOS1vt0 = value->rValue; model->MOS1vt0Given = TRUE; break; case MOS1_MOD_KP: model->MOS1transconductance = value->rValue; model->MOS1transconductanceGiven = TRUE; break; case MOS1_MOD_GAMMA: model->MOS1gamma = value->rValue; model->MOS1gammaGiven = TRUE; break; case MOS1_MOD_PHI: model->MOS1phi = value->rValue; model->MOS1phiGiven = TRUE; break; case MOS1_MOD_LAMBDA: model->MOS1lambda = value->rValue; model->MOS1lambdaGiven = TRUE; break; case MOS1_MOD_RD: model->MOS1drainResistance = value->rValue; model->MOS1drainResistanceGiven = TRUE; break; case MOS1_MOD_RS: model->MOS1sourceResistance = value->rValue; model->MOS1sourceResistanceGiven = TRUE; break; case MOS1_MOD_CBD: model->MOS1capBD = value->rValue; model->MOS1capBDGiven = TRUE; break; case MOS1_MOD_CBS: model->MOS1capBS = value->rValue; model->MOS1capBSGiven = TRUE; break; case MOS1_MOD_IS: model->MOS1jctSatCur = value->rValue; model->MOS1jctSatCurGiven = TRUE; break; case MOS1_MOD_PB: model->MOS1bulkJctPotential = value->rValue; model->MOS1bulkJctPotentialGiven = TRUE; break; case MOS1_MOD_CGSO: model->MOS1gateSourceOverlapCapFactor = value->rValue; model->MOS1gateSourceOverlapCapFactorGiven = TRUE; break; case MOS1_MOD_CGDO: model->MOS1gateDrainOverlapCapFactor = value->rValue; model->MOS1gateDrainOverlapCapFactorGiven = TRUE; break; case MOS1_MOD_CGBO: model->MOS1gateBulkOverlapCapFactor = value->rValue; model->MOS1gateBulkOverlapCapFactorGiven = TRUE; break; case MOS1_MOD_CJ: model->MOS1bulkCapFactor = value->rValue; model->MOS1bulkCapFactorGiven = TRUE; break; case MOS1_MOD_MJ: model->MOS1bulkJctBotGradingCoeff = value->rValue; model->MOS1bulkJctBotGradingCoeffGiven = TRUE; break; case MOS1_MOD_CJSW: model->MOS1sideWallCapFactor = value->rValue; model->MOS1sideWallCapFactorGiven = TRUE; break; case MOS1_MOD_MJSW: model->MOS1bulkJctSideGradingCoeff = value->rValue; model->MOS1bulkJctSideGradingCoeffGiven = TRUE; break; case MOS1_MOD_JS: model->MOS1jctSatCurDensity = value->rValue; model->MOS1jctSatCurDensityGiven = TRUE; break; case MOS1_MOD_TOX: model->MOS1oxideThickness = value->rValue; model->MOS1oxideThicknessGiven = TRUE; break; case MOS1_MOD_LD: model->MOS1latDiff = value->rValue; model->MOS1latDiffGiven = TRUE; break; case MOS1_MOD_RSH: model->MOS1sheetResistance = value->rValue; model->MOS1sheetResistanceGiven = TRUE; break; case MOS1_MOD_U0: model->MOS1surfaceMobility = value->rValue; model->MOS1surfaceMobilityGiven = TRUE; break; case MOS1_MOD_FC: model->MOS1fwdCapDepCoeff = value->rValue; model->MOS1fwdCapDepCoeffGiven = TRUE; break; case MOS1_MOD_NSS: model->MOS1surfaceStateDensity = value->rValue; model->MOS1surfaceStateDensityGiven = TRUE; break; case MOS1_MOD_NSUB: model->MOS1substrateDoping = value->rValue; model->MOS1substrateDopingGiven = TRUE; break; case MOS1_MOD_TPG: model->MOS1gateType = value->iValue; model->MOS1gateTypeGiven = TRUE; break; case MOS1_MOD_NMOS: if(value->iValue) { model->MOS1type = 1; model->MOS1typeGiven = TRUE; } break; case MOS1_MOD_PMOS: if(value->iValue) { model->MOS1type = -1; model->MOS1typeGiven = TRUE; } break; case MOS1_MOD_KF: model->MOS1fNcoef = value->rValue; model->MOS1fNcoefGiven = TRUE; break; case MOS1_MOD_AF: model->MOS1fNexp = value->rValue; model->MOS1fNexpGiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos1/mos1pzld.c0000644000175000017500000001205413546075722021761 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "mos1defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS1pzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { MOS1model *model = (MOS1model*)inModel; MOS1instance *here; int xnrm; int xrev; double xgs; double xgd; double xgb; double xbd; double xbs; double capgs; double capgd; double capgb; double GateBulkOverlapCap; double GateDrainOverlapCap; double GateSourceOverlapCap; double EffectiveLength; for( ; model != NULL; model = MOS1nextModel(model)) { for(here = MOS1instances(model); here!= NULL; here = MOS1nextInstance(here)) { if (here->MOS1mode < 0) { xnrm=0; xrev=1; } else { xnrm=1; xrev=0; } /* * meyer's model parameters */ EffectiveLength=here->MOS1l - 2*model->MOS1latDiff; GateSourceOverlapCap = model->MOS1gateSourceOverlapCapFactor * here->MOS1m * here->MOS1w; GateDrainOverlapCap = model->MOS1gateDrainOverlapCapFactor * here->MOS1m * here->MOS1w; GateBulkOverlapCap = model->MOS1gateBulkOverlapCapFactor * here->MOS1m * EffectiveLength; capgs = ( 2* *(ckt->CKTstate0+here->MOS1capgs)+ GateSourceOverlapCap ); capgd = ( 2* *(ckt->CKTstate0+here->MOS1capgd)+ GateDrainOverlapCap ); capgb = ( 2* *(ckt->CKTstate0+here->MOS1capgb)+ GateBulkOverlapCap ); xgs = capgs; xgd = capgd; xgb = capgb; xbd = here->MOS1capbd; xbs = here->MOS1capbs; /*printf("mos1: xgs=%g, xgd=%g, xgb=%g, xbd=%g, xbs=%g\n", xgs,xgd,xgb,xbd,xbs);*/ /* * load matrix */ *(here->MOS1GgPtr ) += (xgd+xgs+xgb)*s->real; *(here->MOS1GgPtr +1) += (xgd+xgs+xgb)*s->imag; *(here->MOS1BbPtr ) += (xgb+xbd+xbs)*s->real; *(here->MOS1BbPtr +1) += (xgb+xbd+xbs)*s->imag; *(here->MOS1DPdpPtr ) += (xgd+xbd)*s->real; *(here->MOS1DPdpPtr +1) += (xgd+xbd)*s->imag; *(here->MOS1SPspPtr ) += (xgs+xbs)*s->real; *(here->MOS1SPspPtr +1) += (xgs+xbs)*s->imag; *(here->MOS1GbPtr ) -= xgb*s->real; *(here->MOS1GbPtr +1) -= xgb*s->imag; *(here->MOS1GdpPtr ) -= xgd*s->real; *(here->MOS1GdpPtr +1) -= xgd*s->imag; *(here->MOS1GspPtr ) -= xgs*s->real; *(here->MOS1GspPtr +1) -= xgs*s->imag; *(here->MOS1BgPtr ) -= xgb*s->real; *(here->MOS1BgPtr +1) -= xgb*s->imag; *(here->MOS1BdpPtr ) -= xbd*s->real; *(here->MOS1BdpPtr +1) -= xbd*s->imag; *(here->MOS1BspPtr ) -= xbs*s->real; *(here->MOS1BspPtr +1) -= xbs*s->imag; *(here->MOS1DPgPtr ) -= xgd*s->real; *(here->MOS1DPgPtr +1) -= xgd*s->imag; *(here->MOS1DPbPtr ) -= xbd*s->real; *(here->MOS1DPbPtr +1) -= xbd*s->imag; *(here->MOS1SPgPtr ) -= xgs*s->real; *(here->MOS1SPgPtr +1) -= xgs*s->imag; *(here->MOS1SPbPtr ) -= xbs*s->real; *(here->MOS1SPbPtr +1) -= xbs*s->imag; *(here->MOS1DdPtr) += here->MOS1drainConductance; *(here->MOS1SsPtr) += here->MOS1sourceConductance; *(here->MOS1BbPtr) += here->MOS1gbd+here->MOS1gbs; *(here->MOS1DPdpPtr) += here->MOS1drainConductance+ here->MOS1gds+here->MOS1gbd+ xrev*(here->MOS1gm+here->MOS1gmbs); *(here->MOS1SPspPtr) += here->MOS1sourceConductance+ here->MOS1gds+here->MOS1gbs+ xnrm*(here->MOS1gm+here->MOS1gmbs); *(here->MOS1DdpPtr) -= here->MOS1drainConductance; *(here->MOS1SspPtr) -= here->MOS1sourceConductance; *(here->MOS1BdpPtr) -= here->MOS1gbd; *(here->MOS1BspPtr) -= here->MOS1gbs; *(here->MOS1DPdPtr) -= here->MOS1drainConductance; *(here->MOS1DPgPtr) += (xnrm-xrev)*here->MOS1gm; *(here->MOS1DPbPtr) += -here->MOS1gbd+(xnrm-xrev)*here->MOS1gmbs; *(here->MOS1DPspPtr) -= here->MOS1gds+ xnrm*(here->MOS1gm+here->MOS1gmbs); *(here->MOS1SPgPtr) -= (xnrm-xrev)*here->MOS1gm; *(here->MOS1SPsPtr) -= here->MOS1sourceConductance; *(here->MOS1SPbPtr) -= here->MOS1gbs+(xnrm-xrev)*here->MOS1gmbs; *(here->MOS1SPdpPtr) -= here->MOS1gds+ xrev*(here->MOS1gm+here->MOS1gmbs); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos1/mos1del.c0000644000175000017500000000057313546075722021557 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "mos1defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS1delete(GENinstance *gen_inst) { MOS1instance *inst = (MOS1instance *) gen_inst; FREE(inst->MOS1sens); return OK; } tmpk8ny_4pz/src/spicelib/devices/mos1/mos1set.c0000644000175000017500000001735113546075722021610 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* load the MOS1 device structure with those pointers needed later * for fast matrix loading */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mos1defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS1setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { MOS1model *model = (MOS1model *)inModel; MOS1instance *here; int error; CKTnode *tmp; /* loop through all the MOS1 device models */ for( ; model != NULL; model = MOS1nextModel(model)) { if(!model->MOS1typeGiven) { model->MOS1type = NMOS; } if(!model->MOS1latDiffGiven) { model->MOS1latDiff = 0; } if(!model->MOS1jctSatCurDensityGiven) { model->MOS1jctSatCurDensity = 0; } if(!model->MOS1jctSatCurGiven) { model->MOS1jctSatCur = 1e-14; } if(!model->MOS1transconductanceGiven) { model->MOS1transconductance = 2e-5; } if(!model->MOS1gateSourceOverlapCapFactorGiven) { model->MOS1gateSourceOverlapCapFactor = 0; } if(!model->MOS1gateDrainOverlapCapFactorGiven) { model->MOS1gateDrainOverlapCapFactor = 0; } if(!model->MOS1gateBulkOverlapCapFactorGiven) { model->MOS1gateBulkOverlapCapFactor = 0; } if(!model->MOS1vt0Given) { model->MOS1vt0 = 0; } if(!model->MOS1bulkCapFactorGiven) { model->MOS1bulkCapFactor = 0; } if(!model->MOS1sideWallCapFactorGiven) { model->MOS1sideWallCapFactor = 0; } if(!model->MOS1bulkJctPotentialGiven) { model->MOS1bulkJctPotential = .8; } if(!model->MOS1bulkJctBotGradingCoeffGiven) { model->MOS1bulkJctBotGradingCoeff = .5; } if(!model->MOS1bulkJctSideGradingCoeffGiven) { model->MOS1bulkJctSideGradingCoeff = .5; } if(!model->MOS1fwdCapDepCoeffGiven) { model->MOS1fwdCapDepCoeff = .5; } if(!model->MOS1phiGiven) { model->MOS1phi = .6; } if(!model->MOS1lambdaGiven) { model->MOS1lambda = 0; } if(!model->MOS1gammaGiven) { model->MOS1gamma = 0; } if(!model->MOS1fNcoefGiven) { model->MOS1fNcoef = 0; } if(!model->MOS1fNexpGiven) { model->MOS1fNexp = 1; } /* loop through all the instances of the model */ for (here = MOS1instances(model); here != NULL ; here=MOS1nextInstance(here)) { /* allocate a chunk of the state vector */ here->MOS1states = *states; *states += MOS1numStates; if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN) ){ *states += MOS1numSenStates * (ckt->CKTsenInfo->SENparms); } if(!here->MOS1drainPerimiterGiven) { here->MOS1drainPerimiter = 0; } if(!here->MOS1icVBSGiven) { here->MOS1icVBS = 0; } if(!here->MOS1icVDSGiven) { here->MOS1icVDS = 0; } if(!here->MOS1icVGSGiven) { here->MOS1icVGS = 0; } if(!here->MOS1sourcePerimiterGiven) { here->MOS1sourcePerimiter = 0; } if(!here->MOS1vdsatGiven) { here->MOS1vdsat = 0; } if(!here->MOS1vonGiven) { here->MOS1von = 0; } if(!here->MOS1drainSquaresGiven) { here->MOS1drainSquares=1; } if(!here->MOS1sourceSquaresGiven) { here->MOS1sourceSquares=1; } if ((model->MOS1drainResistance != 0 || (model->MOS1sheetResistance != 0 && here->MOS1drainSquares != 0) )) { if (here->MOS1dNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->MOS1name,"drain"); if(error) return(error); here->MOS1dNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->MOS1dNodePrime = here->MOS1dNode; } if((model->MOS1sourceResistance != 0 || (model->MOS1sheetResistance != 0 && here->MOS1sourceSquares != 0) )) { if (here->MOS1sNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->MOS1name,"source"); if(error) return(error); here->MOS1sNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->MOS1sNodePrime = here->MOS1sNode; } /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(MOS1DdPtr,MOS1dNode,MOS1dNode); TSTALLOC(MOS1GgPtr,MOS1gNode,MOS1gNode); TSTALLOC(MOS1SsPtr,MOS1sNode,MOS1sNode); TSTALLOC(MOS1BbPtr,MOS1bNode,MOS1bNode); TSTALLOC(MOS1DPdpPtr,MOS1dNodePrime,MOS1dNodePrime); TSTALLOC(MOS1SPspPtr,MOS1sNodePrime,MOS1sNodePrime); TSTALLOC(MOS1DdpPtr,MOS1dNode,MOS1dNodePrime); TSTALLOC(MOS1GbPtr,MOS1gNode,MOS1bNode); TSTALLOC(MOS1GdpPtr,MOS1gNode,MOS1dNodePrime); TSTALLOC(MOS1GspPtr,MOS1gNode,MOS1sNodePrime); TSTALLOC(MOS1SspPtr,MOS1sNode,MOS1sNodePrime); TSTALLOC(MOS1BdpPtr,MOS1bNode,MOS1dNodePrime); TSTALLOC(MOS1BspPtr,MOS1bNode,MOS1sNodePrime); TSTALLOC(MOS1DPspPtr,MOS1dNodePrime,MOS1sNodePrime); TSTALLOC(MOS1DPdPtr,MOS1dNodePrime,MOS1dNode); TSTALLOC(MOS1BgPtr,MOS1bNode,MOS1gNode); TSTALLOC(MOS1DPgPtr,MOS1dNodePrime,MOS1gNode); TSTALLOC(MOS1SPgPtr,MOS1sNodePrime,MOS1gNode); TSTALLOC(MOS1SPsPtr,MOS1sNodePrime,MOS1sNode); TSTALLOC(MOS1DPbPtr,MOS1dNodePrime,MOS1bNode); TSTALLOC(MOS1SPbPtr,MOS1sNodePrime,MOS1bNode); TSTALLOC(MOS1SPdpPtr,MOS1sNodePrime,MOS1dNodePrime); } } return(OK); } int MOS1unsetup(GENmodel *inModel, CKTcircuit *ckt) { MOS1model *model; MOS1instance *here; for (model = (MOS1model *)inModel; model != NULL; model = MOS1nextModel(model)) { for (here = MOS1instances(model); here != NULL; here=MOS1nextInstance(here)) { if (here->MOS1sNodePrime > 0 && here->MOS1sNodePrime != here->MOS1sNode) CKTdltNNum(ckt, here->MOS1sNodePrime); here->MOS1sNodePrime= 0; if (here->MOS1dNodePrime > 0 && here->MOS1dNodePrime != here->MOS1dNode) CKTdltNNum(ckt, here->MOS1dNodePrime); here->MOS1dNodePrime= 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/mos1/mos1ext.h0000644000175000017500000000236513546075722021621 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ extern int MOS1acLoad(GENmodel *,CKTcircuit*); extern int MOS1ask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int MOS1delete(GENinstance*); extern int MOS1getic(GENmodel*,CKTcircuit*); extern int MOS1load(GENmodel*,CKTcircuit*); extern int MOS1mAsk(CKTcircuit *,GENmodel *,int,IFvalue*); extern int MOS1mParam(int,IFvalue*,GENmodel*); extern int MOS1param(int,IFvalue*,GENinstance*,IFvalue*); extern int MOS1pzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int MOS1sAcLoad(GENmodel*,CKTcircuit*); extern int MOS1sLoad(GENmodel*,CKTcircuit*); extern void MOS1sPrint(GENmodel*,CKTcircuit*); extern int MOS1sSetup(SENstruct*,GENmodel*); extern int MOS1sUpdate(GENmodel*,CKTcircuit*); extern int MOS1setup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int MOS1unsetup(GENmodel*,CKTcircuit*); extern int MOS1temp(GENmodel*,CKTcircuit*); extern int MOS1trunc(GENmodel*,CKTcircuit*,double*); extern int MOS1convTest(GENmodel*,CKTcircuit*); extern int MOS1disto(int,GENmodel*,CKTcircuit*); extern int MOS1noise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int MOS1dSetup(GENmodel*,CKTcircuit*); tmpk8ny_4pz/src/spicelib/devices/mos1/mos1noi.c0000644000175000017500000001364513546075722021604 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Gary W. Ng Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "mos1defs.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" /* * MOS1noise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with MOSFET's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the MOSFET's is summed with the variable "OnDens". */ int MOS1noise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; MOS1model *firstModel = (MOS1model *) genmodel; MOS1model *model; MOS1instance *inst; double coxSquared; double tempOnoise; double tempInoise; double noizDens[MOS1NSRCS]; double lnNdens[MOS1NSRCS]; int i; /* define the names of the noise sources */ static char *MOS1nNames[MOS1NSRCS] = { /* Note that we have to keep the order */ "_rd", /* noise due to rd */ /* consistent with thestrchr definitions */ "_rs", /* noise due to rs */ /* in MOS1defs.h */ "_id", /* noise due to id */ "_1overf", /* flicker (1/f) noise */ "" /* total transistor noise */ }; for (model=firstModel; model != NULL; model=MOS1nextModel(model)) { /* Oxide capacitance can be zero in MOS level 1. Since this will give us problems in our 1/f */ /* noise model, we ASSUME an actual "tox" of 1e-7 */ if (model->MOS1oxideCapFactor == 0.0) { coxSquared = 3.9 * 8.854214871e-12 / 1e-7; } else { coxSquared = model->MOS1oxideCapFactor; } coxSquared *= coxSquared; for (inst=MOS1instances(model); inst != NULL; inst=MOS1nextInstance(inst)) { switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i=0; i < MOS1NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_%s%s", inst->MOS1name, MOS1nNames[i]); } break; case INT_NOIZ: for (i=0; i < MOS1NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total_%s%s", inst->MOS1name, MOS1nNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total_%s%s", inst->MOS1name, MOS1nNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: NevalSrc(&noizDens[MOS1RDNOIZ],&lnNdens[MOS1RDNOIZ], ckt,THERMNOISE,inst->MOS1dNodePrime,inst->MOS1dNode, inst->MOS1drainConductance); NevalSrc(&noizDens[MOS1RSNOIZ],&lnNdens[MOS1RSNOIZ], ckt,THERMNOISE,inst->MOS1sNodePrime,inst->MOS1sNode, inst->MOS1sourceConductance); NevalSrc(&noizDens[MOS1IDNOIZ],&lnNdens[MOS1IDNOIZ], ckt,THERMNOISE,inst->MOS1dNodePrime,inst->MOS1sNodePrime, (2.0/3.0 * fabs(inst->MOS1gm))); NevalSrc(&noizDens[MOS1FLNOIZ], NULL, ckt, N_GAIN,inst->MOS1dNodePrime, inst->MOS1sNodePrime, (double)0.0); noizDens[MOS1FLNOIZ] *= model->MOS1fNcoef * exp(model->MOS1fNexp * log(MAX(fabs(inst->MOS1cd),N_MINLOG))) / (data->freq * inst->MOS1w * inst->MOS1m * (inst->MOS1l - 2*model->MOS1latDiff) * coxSquared); lnNdens[MOS1FLNOIZ] = log(MAX(noizDens[MOS1FLNOIZ],N_MINLOG)); noizDens[MOS1TOTNOIZ] = noizDens[MOS1RDNOIZ] + noizDens[MOS1RSNOIZ] + noizDens[MOS1IDNOIZ] + noizDens[MOS1FLNOIZ]; lnNdens[MOS1TOTNOIZ] = log(MAX(noizDens[MOS1TOTNOIZ], N_MINLOG)); *OnDens += noizDens[MOS1TOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to */ /* initialize our "history" variables */ for (i=0; i < MOS1NSRCS; i++) { inst->MOS1nVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i=0; i < MOS1NSRCS; i++) { inst->MOS1nVar[OUTNOIZ][i] = 0.0; inst->MOS1nVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0 (we have to integrate) */ for (i=0; i < MOS1NSRCS; i++) { if (i != MOS1TOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], inst->MOS1nVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv , lnNdens[i] + data->lnGainInv, inst->MOS1nVar[LNLSTDENS][i] + data->lnGainInv, data); inst->MOS1nVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { inst->MOS1nVar[OUTNOIZ][i] += tempOnoise; inst->MOS1nVar[OUTNOIZ][MOS1TOTNOIZ] += tempOnoise; inst->MOS1nVar[INNOIZ][i] += tempInoise; inst->MOS1nVar[INNOIZ][MOS1TOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i=0; i < MOS1NSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i=0; i < MOS1NSRCS; i++) { data->outpVector[data->outNumber++] = inst->MOS1nVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = inst->MOS1nVar[INNOIZ][i]; } } /* if */ break; } /* switch (mode) */ break; case N_CLOSE: return (OK); /* do nothing, the main calling routine will close */ break; /* the plots */ } /* switch (operation) */ } /* for inst */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos1/mos1acld.c0000644000175000017500000001045413546075722021715 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos1defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS1acLoad(GENmodel *inModel, CKTcircuit *ckt) { MOS1model *model = (MOS1model*)inModel; MOS1instance *here; int xnrm; int xrev; double xgs; double xgd; double xgb; double xbd; double xbs; double capgs; double capgd; double capgb; double GateBulkOverlapCap; double GateDrainOverlapCap; double GateSourceOverlapCap; double EffectiveLength; for( ; model != NULL; model = MOS1nextModel(model)) { for(here = MOS1instances(model); here!= NULL; here = MOS1nextInstance(here)) { if (here->MOS1mode < 0) { xnrm=0; xrev=1; } else { xnrm=1; xrev=0; } /* * meyer's model parameters */ EffectiveLength=here->MOS1l - 2*model->MOS1latDiff; GateSourceOverlapCap = model->MOS1gateSourceOverlapCapFactor * here->MOS1m * here->MOS1w; GateDrainOverlapCap = model->MOS1gateDrainOverlapCapFactor * here->MOS1m * here->MOS1w; GateBulkOverlapCap = model->MOS1gateBulkOverlapCapFactor * here->MOS1m * EffectiveLength; capgs = ( *(ckt->CKTstate0+here->MOS1capgs)+ *(ckt->CKTstate0+here->MOS1capgs) + GateSourceOverlapCap ); capgd = ( *(ckt->CKTstate0+here->MOS1capgd)+ *(ckt->CKTstate0+here->MOS1capgd) + GateDrainOverlapCap ); capgb = ( *(ckt->CKTstate0+here->MOS1capgb)+ *(ckt->CKTstate0+here->MOS1capgb) + GateBulkOverlapCap ); xgs = capgs * ckt->CKTomega; xgd = capgd * ckt->CKTomega; xgb = capgb * ckt->CKTomega; xbd = here->MOS1capbd * ckt->CKTomega; xbs = here->MOS1capbs * ckt->CKTomega; /* * load matrix */ *(here->MOS1GgPtr +1) += xgd+xgs+xgb; *(here->MOS1BbPtr +1) += xgb+xbd+xbs; *(here->MOS1DPdpPtr +1) += xgd+xbd; *(here->MOS1SPspPtr +1) += xgs+xbs; *(here->MOS1GbPtr +1) -= xgb; *(here->MOS1GdpPtr +1) -= xgd; *(here->MOS1GspPtr +1) -= xgs; *(here->MOS1BgPtr +1) -= xgb; *(here->MOS1BdpPtr +1) -= xbd; *(here->MOS1BspPtr +1) -= xbs; *(here->MOS1DPgPtr +1) -= xgd; *(here->MOS1DPbPtr +1) -= xbd; *(here->MOS1SPgPtr +1) -= xgs; *(here->MOS1SPbPtr +1) -= xbs; *(here->MOS1DdPtr) += here->MOS1drainConductance; *(here->MOS1SsPtr) += here->MOS1sourceConductance; *(here->MOS1BbPtr) += here->MOS1gbd+here->MOS1gbs; *(here->MOS1DPdpPtr) += here->MOS1drainConductance+ here->MOS1gds+here->MOS1gbd+ xrev*(here->MOS1gm+here->MOS1gmbs); *(here->MOS1SPspPtr) += here->MOS1sourceConductance+ here->MOS1gds+here->MOS1gbs+ xnrm*(here->MOS1gm+here->MOS1gmbs); *(here->MOS1DdpPtr) -= here->MOS1drainConductance; *(here->MOS1SspPtr) -= here->MOS1sourceConductance; *(here->MOS1BdpPtr) -= here->MOS1gbd; *(here->MOS1BspPtr) -= here->MOS1gbs; *(here->MOS1DPdPtr) -= here->MOS1drainConductance; *(here->MOS1DPgPtr) += (xnrm-xrev)*here->MOS1gm; *(here->MOS1DPbPtr) += -here->MOS1gbd+(xnrm-xrev)*here->MOS1gmbs; *(here->MOS1DPspPtr) -= here->MOS1gds+ xnrm*(here->MOS1gm+here->MOS1gmbs); *(here->MOS1SPgPtr) -= (xnrm-xrev)*here->MOS1gm; *(here->MOS1SPsPtr) -= here->MOS1sourceConductance; *(here->MOS1SPbPtr) -= here->MOS1gbs+(xnrm-xrev)*here->MOS1gmbs; *(here->MOS1SPdpPtr) -= here->MOS1gds+ xrev*(here->MOS1gm+here->MOS1gmbs); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos1/mos1itf.h0000644000175000017500000000026713546075722021602 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_MOS1 #define DEV_MOS1 extern SPICEdev *get_mos1_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/mos1/mos1ic.c0000644000175000017500000000245313546075722021405 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos1defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS1getic(GENmodel *inModel, CKTcircuit *ckt) { MOS1model *model = (MOS1model *)inModel; MOS1instance *here; /* * grab initial conditions out of rhs array. User specified, so use * external nodes to get values */ for( ; model ; model = MOS1nextModel(model)) { for(here = MOS1instances(model); here ; here = MOS1nextInstance(here)) { if(!here->MOS1icVBSGiven) { here->MOS1icVBS = *(ckt->CKTrhs + here->MOS1bNode) - *(ckt->CKTrhs + here->MOS1sNode); } if(!here->MOS1icVDSGiven) { here->MOS1icVDS = *(ckt->CKTrhs + here->MOS1dNode) - *(ckt->CKTrhs + here->MOS1sNode); } if(!here->MOS1icVGSGiven) { here->MOS1icVGS = *(ckt->CKTrhs + here->MOS1gNode) - *(ckt->CKTrhs + here->MOS1sNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos1/mos1.c0000644000175000017500000002220113546075722021062 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "mos1defs.h" #include "ngspice/suffix.h" IFparm MOS1pTable[] = { /* parameters */ IOPU("m", MOS1_M, IF_REAL , "Multiplier"), IOPU("l", MOS1_L, IF_REAL , "Length"), IOPU("w", MOS1_W, IF_REAL , "Width"), IOPU("ad", MOS1_AD, IF_REAL , "Drain area"), IOPU("as", MOS1_AS, IF_REAL , "Source area"), IOPU("pd", MOS1_PD, IF_REAL , "Drain perimeter"), IOPU("ps", MOS1_PS, IF_REAL , "Source perimeter"), IOPU("nrd", MOS1_NRD, IF_REAL , "Drain squares"), IOPU("nrs", MOS1_NRS, IF_REAL , "Source squares"), IP("off", MOS1_OFF, IF_FLAG , "Device initially off"), IOPU("icvds", MOS1_IC_VDS, IF_REAL , "Initial D-S voltage"), IOPU("icvgs", MOS1_IC_VGS, IF_REAL , "Initial G-S voltage"), IOPU("icvbs", MOS1_IC_VBS, IF_REAL , "Initial B-S voltage"), IOPU("temp", MOS1_TEMP, IF_REAL, "Instance temperature"), IOPU("dtemp", MOS1_DTEMP, IF_REAL, "Instance temperature difference"), IP( "ic", MOS1_IC, IF_REALVEC, "Vector of D-S, G-S, B-S voltages"), IP( "sens_l", MOS1_L_SENS, IF_FLAG, "flag to request sensitivity WRT length"), IP( "sens_w", MOS1_W_SENS, IF_FLAG, "flag to request sensitivity WRT width"), OP( "id", MOS1_CD, IF_REAL, "Drain current"), OP( "is", MOS1_CS, IF_REAL, "Source current"), OP( "ig", MOS1_CG, IF_REAL, "Gate current "), OP( "ib", MOS1_CB, IF_REAL, "Bulk current "), OPU( "ibd", MOS1_CBD, IF_REAL, "B-D junction current"), OPU( "ibs", MOS1_CBS, IF_REAL, "B-S junction current"), OP( "vgs", MOS1_VGS, IF_REAL, "Gate-Source voltage"), OP( "vds", MOS1_VDS, IF_REAL, "Drain-Source voltage"), OP( "vbs", MOS1_VBS, IF_REAL, "Bulk-Source voltage"), OPU( "vbd", MOS1_VBD, IF_REAL, "Bulk-Drain voltage"), /* OP( "cgs", MOS1_CGS, IF_REAL , "Gate-Source capacitance"), OP( "cgd", MOS1_CGD, IF_REAL , "Gate-Drain capacitance"), */ OPU( "dnode", MOS1_DNODE, IF_INTEGER, "Number of the drain node "), OPU( "gnode", MOS1_GNODE, IF_INTEGER, "Number of the gate node "), OPU( "snode", MOS1_SNODE, IF_INTEGER, "Number of the source node "), OPU( "bnode", MOS1_BNODE, IF_INTEGER, "Number of the node "), OPU( "dnodeprime", MOS1_DNODEPRIME, IF_INTEGER, "Number of int. drain node"), OPU( "snodeprime", MOS1_SNODEPRIME, IF_INTEGER, "Number of int. source node "), OP( "von", MOS1_VON, IF_REAL, " "), OP( "vdsat", MOS1_VDSAT, IF_REAL, "Saturation drain voltage"), OPU( "sourcevcrit", MOS1_SOURCEVCRIT,IF_REAL, "Critical source voltage"), OPU( "drainvcrit", MOS1_DRAINVCRIT, IF_REAL, "Critical drain voltage"), OP( "rs", MOS1_SOURCERESIST, IF_REAL, "Source resistance"), OPU("sourceconductance", MOS1_SOURCECONDUCT, IF_REAL, "Conductance of source"), OP( "rd", MOS1_DRAINRESIST, IF_REAL, "Drain conductance"), OPU("drainconductance", MOS1_DRAINCONDUCT, IF_REAL, "Conductance of drain"), OP( "gm", MOS1_GM, IF_REAL, "Transconductance"), OP( "gds", MOS1_GDS, IF_REAL, "Drain-Source conductance"), OP( "gmb", MOS1_GMBS, IF_REAL, "Bulk-Source transconductance"), OPR( "gmbs", MOS1_GMBS, IF_REAL, ""), OPU( "gbd", MOS1_GBD, IF_REAL, "Bulk-Drain conductance"), OPU( "gbs", MOS1_GBS, IF_REAL, "Bulk-Source conductance"), OP( "cbd", MOS1_CAPBD, IF_REAL, "Bulk-Drain capacitance"), OP( "cbs", MOS1_CAPBS, IF_REAL, "Bulk-Source capacitance"), OP( "cgs", MOS1_CAPGS, IF_REAL, "Gate-Source capacitance"), OP( "cgd", MOS1_CAPGD, IF_REAL, "Gate-Drain capacitance"), OP( "cgb", MOS1_CAPGB, IF_REAL, "Gate-Bulk capacitance"), OPU( "cqgs",MOS1_CQGS,IF_REAL,"Capacitance due to gate-source charge storage"), OPU( "cqgd",MOS1_CQGD,IF_REAL,"Capacitance due to gate-drain charge storage"), OPU( "cqgb",MOS1_CQGB,IF_REAL,"Capacitance due to gate-bulk charge storage"), OPU( "cqbd",MOS1_CQBD,IF_REAL,"Capacitance due to bulk-drain charge storage"), OPU( "cqbs",MOS1_CQBS,IF_REAL,"Capacitance due to bulk-source charge storage"), OP( "cbd0", MOS1_CAPZEROBIASBD, IF_REAL, "Zero-Bias B-D junction capacitance"), OP( "cbdsw0", MOS1_CAPZEROBIASBDSW, IF_REAL, " "), OP( "cbs0", MOS1_CAPZEROBIASBS, IF_REAL, "Zero-Bias B-S junction capacitance"), OP( "cbssw0", MOS1_CAPZEROBIASBSSW, IF_REAL, " "), OPU( "qgs", MOS1_QGS, IF_REAL, "Gate-Source charge storage"), OPU( "qgd", MOS1_QGD, IF_REAL, "Gate-Drain charge storage"), OPU( "qgb", MOS1_QGB, IF_REAL, "Gate-Bulk charge storage"), OPU( "qbd", MOS1_QBD, IF_REAL, "Bulk-Drain charge storage"), OPU( "qbs", MOS1_QBS, IF_REAL, "Bulk-Source charge storage"), OPU( "p", MOS1_POWER, IF_REAL, "Instaneous power"), OPU( "sens_l_dc", MOS1_L_SENS_DC, IF_REAL, "dc sensitivity wrt length"), OPU( "sens_l_real", MOS1_L_SENS_REAL,IF_REAL, "real part of ac sensitivity wrt length"), OPU( "sens_l_imag", MOS1_L_SENS_IMAG,IF_REAL, "imag part of ac sensitivity wrt length"), OPU( "sens_l_mag", MOS1_L_SENS_MAG, IF_REAL, "sensitivity wrt l of ac magnitude"), OPU( "sens_l_ph", MOS1_L_SENS_PH, IF_REAL, "sensitivity wrt l of ac phase"), OPU( "sens_l_cplx", MOS1_L_SENS_CPLX,IF_COMPLEX, "ac sensitivity wrt length"), OPU( "sens_w_dc", MOS1_W_SENS_DC, IF_REAL, "dc sensitivity wrt width"), OPU( "sens_w_real", MOS1_W_SENS_REAL,IF_REAL, "real part of ac sensitivity wrt width"), OPU( "sens_w_imag", MOS1_W_SENS_IMAG,IF_REAL, "imag part of ac sensitivity wrt width"), OPU( "sens_w_mag", MOS1_W_SENS_MAG, IF_REAL, "sensitivity wrt w of ac magnitude"), OPU( "sens_w_ph", MOS1_W_SENS_PH, IF_REAL, "sensitivity wrt w of ac phase"), OPU( "sens_w_cplx", MOS1_W_SENS_CPLX,IF_COMPLEX, "ac sensitivity wrt width") }; IFparm MOS1mPTable[] = { /* model parameters */ OP("type", MOS1_MOD_TYPE, IF_STRING, "N-channel or P-channel MOS"), IOP("vto", MOS1_MOD_VTO, IF_REAL ,"Threshold voltage"), IOPR("vt0", MOS1_MOD_VTO, IF_REAL ,"Threshold voltage"), IOP("kp", MOS1_MOD_KP, IF_REAL ,"Transconductance parameter"), IOP("gamma", MOS1_MOD_GAMMA, IF_REAL ,"Bulk threshold parameter"), IOP("phi", MOS1_MOD_PHI, IF_REAL ,"Surface potential"), IOP("lambda",MOS1_MOD_LAMBDA,IF_REAL ,"Channel length modulation"), IOP("rd", MOS1_MOD_RD, IF_REAL ,"Drain ohmic resistance"), IOP("rs", MOS1_MOD_RS, IF_REAL ,"Source ohmic resistance"), IOPA("cbd", MOS1_MOD_CBD, IF_REAL ,"B-D junction capacitance"), IOPA("cbs", MOS1_MOD_CBS, IF_REAL ,"B-S junction capacitance"), IOP("is", MOS1_MOD_IS, IF_REAL ,"Bulk junction sat. current"), IOP("pb", MOS1_MOD_PB, IF_REAL ,"Bulk junction potential"), IOPA("cgso", MOS1_MOD_CGSO, IF_REAL ,"Gate-source overlap cap."), IOPA("cgdo", MOS1_MOD_CGDO, IF_REAL ,"Gate-drain overlap cap."), IOPA("cgbo", MOS1_MOD_CGBO, IF_REAL ,"Gate-bulk overlap cap."), IOP("rsh", MOS1_MOD_RSH, IF_REAL ,"Sheet resistance"), IOPA("cj", MOS1_MOD_CJ, IF_REAL ,"Bottom junction cap per area"), IOP("mj", MOS1_MOD_MJ, IF_REAL ,"Bottom grading coefficient"), IOPA("cjsw", MOS1_MOD_CJSW, IF_REAL ,"Side junction cap per area"), IOP("mjsw", MOS1_MOD_MJSW, IF_REAL ,"Side grading coefficient"), IOP("js", MOS1_MOD_JS, IF_REAL ,"Bulk jct. sat. current density"), IOP("tox", MOS1_MOD_TOX, IF_REAL ,"Oxide thickness"), IOP("ld", MOS1_MOD_LD, IF_REAL ,"Lateral diffusion"), IOP("u0", MOS1_MOD_U0, IF_REAL ,"Surface mobility"), IOPR("uo", MOS1_MOD_U0, IF_REAL ,"Surface mobility"), IOP("fc", MOS1_MOD_FC, IF_REAL ,"Forward bias jct. fit parm."), IP("nmos", MOS1_MOD_NMOS, IF_FLAG ,"N type MOSfet model"), IP("pmos", MOS1_MOD_PMOS, IF_FLAG ,"P type MOSfet model"), IOP("nsub", MOS1_MOD_NSUB, IF_REAL ,"Substrate doping"), IOP("tpg", MOS1_MOD_TPG, IF_INTEGER,"Gate type"), IOP("nss", MOS1_MOD_NSS, IF_REAL ,"Surface state density"), IOP("tnom", MOS1_MOD_TNOM, IF_REAL ,"Parameter measurement temperature"), IOP("kf", MOS1_MOD_KF, IF_REAL ,"Flicker noise coefficient"), IOP("af", MOS1_MOD_AF, IF_REAL ,"Flicker noise exponent") }; char *MOS1names[] = { "Drain", "Gate", "Source", "Bulk" }; int MOS1nSize = NUMELEMS(MOS1names); int MOS1pTSize = NUMELEMS(MOS1pTable); int MOS1mPTSize = NUMELEMS(MOS1mPTable); int MOS1iSize = sizeof(MOS1instance); int MOS1mSize = sizeof(MOS1model); tmpk8ny_4pz/src/spicelib/devices/mos1/mos1ask.c0000644000175000017500000004071013546075722021566 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "mos1defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int MOS1ask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { MOS1instance *here = (MOS1instance*)inst; double vr; double vi; double sr; double si; double vm; static char *msg = "Current and power not available for ac analysis"; switch(which) { case MOS1_TEMP: value->rValue = here->MOS1temp - CONSTCtoK; return(OK); case MOS1_DTEMP: value->rValue = here->MOS1dtemp; return(OK); case MOS1_CGS: value->rValue = 2* *(ckt->CKTstate0 + here->MOS1capgs); return(OK); case MOS1_CGD: value->rValue = 2* *(ckt->CKTstate0 + here->MOS1capgd); return(OK); case MOS1_M: value->rValue = here->MOS1m; return(OK); case MOS1_L: value->rValue = here->MOS1l; return(OK); case MOS1_W: value->rValue = here->MOS1w; return(OK); case MOS1_AS: value->rValue = here->MOS1sourceArea; return(OK); case MOS1_AD: value->rValue = here->MOS1drainArea; return(OK); case MOS1_PS: value->rValue = here->MOS1sourcePerimiter; return(OK); case MOS1_PD: value->rValue = here->MOS1drainPerimiter; return(OK); case MOS1_NRS: value->rValue = here->MOS1sourceSquares; return(OK); case MOS1_NRD: value->rValue = here->MOS1drainSquares; return(OK); case MOS1_OFF: value->rValue = here->MOS1off; return(OK); case MOS1_IC_VBS: value->rValue = here->MOS1icVBS; return(OK); case MOS1_IC_VDS: value->rValue = here->MOS1icVDS; return(OK); case MOS1_IC_VGS: value->rValue = here->MOS1icVGS; return(OK); case MOS1_DNODE: value->iValue = here->MOS1dNode; return(OK); case MOS1_GNODE: value->iValue = here->MOS1gNode; return(OK); case MOS1_SNODE: value->iValue = here->MOS1sNode; return(OK); case MOS1_BNODE: value->iValue = here->MOS1bNode; return(OK); case MOS1_DNODEPRIME: value->iValue = here->MOS1dNodePrime; return(OK); case MOS1_SNODEPRIME: value->iValue = here->MOS1sNodePrime; return(OK); case MOS1_SOURCECONDUCT: value->rValue = here->MOS1sourceConductance; return(OK); case MOS1_SOURCERESIST: if (here->MOS1sNodePrime != here->MOS1sNode) value->rValue = 1.0 / here->MOS1sourceConductance; else value->rValue = 0.0; return(OK); case MOS1_DRAINCONDUCT: value->rValue = here->MOS1drainConductance; return(OK); case MOS1_DRAINRESIST: if (here->MOS1dNodePrime != here->MOS1dNode) value->rValue = 1.0 / here->MOS1drainConductance; else value->rValue = 0.0; return(OK); case MOS1_VON: value->rValue = here->MOS1von; return(OK); case MOS1_VDSAT: value->rValue = here->MOS1vdsat; return(OK); case MOS1_SOURCEVCRIT: value->rValue = here->MOS1sourceVcrit; return(OK); case MOS1_DRAINVCRIT: value->rValue = here->MOS1drainVcrit; return(OK); case MOS1_CD: value->rValue = here->MOS1cd; return(OK); case MOS1_CBS: value->rValue = here->MOS1cbs; return(OK); case MOS1_CBD: value->rValue = here->MOS1cbd; return(OK); case MOS1_GMBS: value->rValue = here->MOS1gmbs; return(OK); case MOS1_GM: value->rValue = here->MOS1gm; return(OK); case MOS1_GDS: value->rValue = here->MOS1gds; return(OK); case MOS1_GBD: value->rValue = here->MOS1gbd; return(OK); case MOS1_GBS: value->rValue = here->MOS1gbs; return(OK); case MOS1_CAPBD: value->rValue = here->MOS1capbd; return(OK); case MOS1_CAPBS: value->rValue = here->MOS1capbs; return(OK); case MOS1_CAPZEROBIASBD: value->rValue = here->MOS1Cbd; return(OK); case MOS1_CAPZEROBIASBDSW: value->rValue = here->MOS1Cbdsw; return(OK); case MOS1_CAPZEROBIASBS: value->rValue = here->MOS1Cbs; return(OK); case MOS1_CAPZEROBIASBSSW: value->rValue = here->MOS1Cbssw; return(OK); case MOS1_VBD: value->rValue = *(ckt->CKTstate0 + here->MOS1vbd); return(OK); case MOS1_VBS: value->rValue = *(ckt->CKTstate0 + here->MOS1vbs); return(OK); case MOS1_VGS: value->rValue = *(ckt->CKTstate0 + here->MOS1vgs); return(OK); case MOS1_VDS: value->rValue = *(ckt->CKTstate0 + here->MOS1vds); return(OK); case MOS1_CAPGS: value->rValue = 2* *(ckt->CKTstate0 + here->MOS1capgs); /* add overlap capacitance */ value->rValue += (MOS1modPtr(here)->MOS1gateSourceOverlapCapFactor) * here->MOS1m * (here->MOS1w); return(OK); case MOS1_QGS: value->rValue = *(ckt->CKTstate0 + here->MOS1qgs); return(OK); case MOS1_CQGS: value->rValue = *(ckt->CKTstate0 + here->MOS1cqgs); return(OK); case MOS1_CAPGD: value->rValue = 2* *(ckt->CKTstate0 + here->MOS1capgd); /* add overlap capacitance */ value->rValue += (MOS1modPtr(here)->MOS1gateDrainOverlapCapFactor) * here->MOS1m * (here->MOS1w); return(OK); case MOS1_QGD: value->rValue = *(ckt->CKTstate0 + here->MOS1qgd); return(OK); case MOS1_CQGD: value->rValue = *(ckt->CKTstate0 + here->MOS1cqgd); return(OK); case MOS1_CAPGB: value->rValue = 2* *(ckt->CKTstate0 + here->MOS1capgb); /* add overlap capacitance */ value->rValue += (MOS1modPtr(here)->MOS1gateBulkOverlapCapFactor) * here->MOS1m * (here->MOS1l -2*(MOS1modPtr(here)->MOS1latDiff)); return(OK); case MOS1_QGB: value->rValue = *(ckt->CKTstate0 + here->MOS1qgb); return(OK); case MOS1_CQGB: value->rValue = *(ckt->CKTstate0 + here->MOS1cqgb); return(OK); case MOS1_QBD: value->rValue = *(ckt->CKTstate0 + here->MOS1qbd); return(OK); case MOS1_CQBD: value->rValue = *(ckt->CKTstate0 + here->MOS1cqbd); return(OK); case MOS1_QBS: value->rValue = *(ckt->CKTstate0 + here->MOS1qbs); return(OK); case MOS1_CQBS: value->rValue = *(ckt->CKTstate0 + here->MOS1cqbs); return(OK); case MOS1_L_SENS_DC: if(ckt->CKTsenInfo && here->MOS1sens_l){ value->rValue = *(ckt->CKTsenInfo->SEN_Sap[select->iValue + 1]+ here->MOS1senParmNo); } return(OK); case MOS1_L_SENS_REAL: if(ckt->CKTsenInfo && here->MOS1sens_l){ value->rValue = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS1senParmNo); } return(OK); case MOS1_L_SENS_IMAG: if(ckt->CKTsenInfo && here->MOS1sens_l){ value->rValue = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS1senParmNo); } return(OK); case MOS1_L_SENS_MAG: if(ckt->CKTsenInfo && here->MOS1sens_l){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = sqrt(vr*vr + vi*vi); if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS1senParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS1senParmNo); value->rValue = (vr * sr + vi * si)/vm; } return(OK); case MOS1_L_SENS_PH: if(ckt->CKTsenInfo && here->MOS1sens_l){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = vr*vr + vi*vi; if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS1senParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS1senParmNo); value->rValue = (vr * si - vi * sr)/vm; } return(OK); case MOS1_L_SENS_CPLX: if(ckt->CKTsenInfo && here->MOS1sens_l){ value->cValue.real= *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS1senParmNo); value->cValue.imag= *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS1senParmNo); } return(OK); case MOS1_W_SENS_DC: if(ckt->CKTsenInfo && here->MOS1sens_w){ value->rValue = *(ckt->CKTsenInfo->SEN_Sap[select->iValue + 1]+ here->MOS1senParmNo + here->MOS1sens_l); } return(OK); case MOS1_W_SENS_REAL: if(ckt->CKTsenInfo && here->MOS1sens_w){ value->rValue = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS1senParmNo + here->MOS1sens_l); } return(OK); case MOS1_W_SENS_IMAG: if(ckt->CKTsenInfo && here->MOS1sens_w){ value->rValue = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS1senParmNo + here->MOS1sens_l); } return(OK); case MOS1_W_SENS_MAG: if(ckt->CKTsenInfo && here->MOS1sens_w){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = sqrt(vr*vr + vi*vi); if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS1senParmNo + here->MOS1sens_l); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS1senParmNo + here->MOS1sens_l); value->rValue = (vr * sr + vi * si)/vm; } return(OK); case MOS1_W_SENS_PH: if(ckt->CKTsenInfo && here->MOS1sens_w){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = vr*vr + vi*vi; if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS1senParmNo + here->MOS1sens_l); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS1senParmNo + here->MOS1sens_l); value->rValue = (vr * si - vi * sr)/vm; } return(OK); case MOS1_W_SENS_CPLX: if(ckt->CKTsenInfo && here->MOS1sens_w){ value->cValue.real= *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS1senParmNo + here->MOS1sens_l); value->cValue.imag= *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS1senParmNo + here->MOS1sens_l); } return(OK); case MOS1_CB : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MOS1ask.c"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = here->MOS1cbd + here->MOS1cbs - *(ckt->CKTstate0 + here->MOS1cqgb); } return(OK); case MOS1_CG : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MOS1ask.c"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else if (ckt->CKTcurrentAnalysis & (DOING_DCOP | DOING_TRCV)) { value->rValue = 0; } else if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && (ckt->CKTmode & MODETRANOP)) { value->rValue = 0; } else { value->rValue = *(ckt->CKTstate0 + here->MOS1cqgb) + *(ckt->CKTstate0 + here->MOS1cqgd) + *(ckt->CKTstate0 + here->MOS1cqgs); } return(OK); case MOS1_CS : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MOS1ask.c"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = -here->MOS1cd; value->rValue -= here->MOS1cbd + here->MOS1cbs - *(ckt->CKTstate0 + here->MOS1cqgb); if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { value->rValue -= *(ckt->CKTstate0 + here->MOS1cqgb) + *(ckt->CKTstate0 + here->MOS1cqgd) + *(ckt->CKTstate0 + here->MOS1cqgs); } } return(OK); case MOS1_POWER : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MOS1ask.c"; strcpy(errMsg,msg); return(E_ASKPOWER); } else { double temp; value->rValue = here->MOS1cd * *(ckt->CKTrhsOld + here->MOS1dNode); value->rValue += (here->MOS1cbd + here->MOS1cbs - *(ckt->CKTstate0 + here->MOS1cqgb)) * *(ckt->CKTrhsOld + here->MOS1bNode); if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { value->rValue += (*(ckt->CKTstate0 + here->MOS1cqgb) + *(ckt->CKTstate0 + here->MOS1cqgd) + *(ckt->CKTstate0 + here->MOS1cqgs)) * *(ckt->CKTrhsOld + here->MOS1gNode); } temp = -here->MOS1cd; temp -= here->MOS1cbd + here->MOS1cbs ; if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { temp -= *(ckt->CKTstate0 + here->MOS1cqgb) + *(ckt->CKTstate0 + here->MOS1cqgd) + *(ckt->CKTstate0 + here->MOS1cqgs); } value->rValue += temp * *(ckt->CKTrhsOld + here->MOS1sNode); } return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/mos1/mos1mask.c0000644000175000017500000000720013546075722021740 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "mos1defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int MOS1mAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { MOS1model *model = (MOS1model *)inst; NG_IGNORE(ckt); switch(which) { case MOS1_MOD_TNOM: value->rValue = model->MOS1tnom-CONSTCtoK; return(OK); case MOS1_MOD_VTO: value->rValue = model->MOS1vt0; return(OK); case MOS1_MOD_KP: value->rValue = model->MOS1transconductance; return(OK); case MOS1_MOD_GAMMA: value->rValue = model->MOS1gamma; return(OK); case MOS1_MOD_PHI: value->rValue = model->MOS1phi; return(OK); case MOS1_MOD_LAMBDA: value->rValue = model->MOS1lambda; return(OK); case MOS1_MOD_RD: value->rValue = model->MOS1drainResistance; return(OK); case MOS1_MOD_RS: value->rValue = model->MOS1sourceResistance; return(OK); case MOS1_MOD_CBD: value->rValue = model->MOS1capBD; return(OK); case MOS1_MOD_CBS: value->rValue = model->MOS1capBS; return(OK); case MOS1_MOD_IS: value->rValue = model->MOS1jctSatCur; return(OK); case MOS1_MOD_PB: value->rValue = model->MOS1bulkJctPotential; return(OK); case MOS1_MOD_CGSO: value->rValue = model->MOS1gateSourceOverlapCapFactor; return(OK); case MOS1_MOD_CGDO: value->rValue = model->MOS1gateDrainOverlapCapFactor; return(OK); case MOS1_MOD_CGBO: value->rValue = model->MOS1gateBulkOverlapCapFactor; return(OK); case MOS1_MOD_CJ: value->rValue = model->MOS1bulkCapFactor; return(OK); case MOS1_MOD_MJ: value->rValue = model->MOS1bulkJctBotGradingCoeff; return(OK); case MOS1_MOD_CJSW: value->rValue = model->MOS1sideWallCapFactor; return(OK); case MOS1_MOD_MJSW: value->rValue = model->MOS1bulkJctSideGradingCoeff; return(OK); case MOS1_MOD_JS: value->rValue = model->MOS1jctSatCurDensity; return(OK); case MOS1_MOD_TOX: value->rValue = model->MOS1oxideThickness; return(OK); case MOS1_MOD_LD: value->rValue = model->MOS1latDiff; return(OK); case MOS1_MOD_RSH: value->rValue = model->MOS1sheetResistance; return(OK); case MOS1_MOD_U0: value->rValue = model->MOS1surfaceMobility; return(OK); case MOS1_MOD_FC: value->rValue = model->MOS1fwdCapDepCoeff; return(OK); case MOS1_MOD_NSUB: value->rValue = model->MOS1substrateDoping; return(OK); case MOS1_MOD_TPG: value->iValue = model->MOS1gateType; return(OK); case MOS1_MOD_NSS: value->rValue = model->MOS1surfaceStateDensity; return(OK); case MOS1_MOD_TYPE: if (model->MOS1type > 0) value->sValue = "nmos"; else value->sValue = "pmos"; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/mos1/mos1temp.c0000644000175000017500000003425413546075722021763 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos1defs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS1temp(GENmodel *inModel, CKTcircuit *ckt) { MOS1model *model = (MOS1model *)inModel; MOS1instance *here; double egfet,egfet1; double fact1,fact2; double kt,kt1; double arg1; double ratio,ratio4; double phio; double pbo; double gmanew,gmaold; double capfact; double pbfact1,pbfact; double vt,vtnom; double wkfngs; double wkfng; double fermig; double fermis; double vfb; /* loop through all the resistor models */ for( ; model != NULL; model = MOS1nextModel(model)) { /* perform model defaulting */ if(!model->MOS1tnomGiven) { model->MOS1tnom = ckt->CKTnomTemp; } fact1 = model->MOS1tnom/REFTEMP; vtnom = model->MOS1tnom*CONSTKoverQ; kt1 = CONSTboltz * model->MOS1tnom; egfet1 = 1.16-(7.02e-4*model->MOS1tnom*model->MOS1tnom)/ (model->MOS1tnom+1108); arg1 = -egfet1/(kt1+kt1)+1.1150877/(CONSTboltz*(REFTEMP+REFTEMP)); pbfact1 = -2*vtnom *(1.5*log(fact1)+CHARGE*arg1); /* now model parameter preprocessing */ if (model->MOS1phi <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "%s: Phi is not positive.", model->MOS1modName); return(E_BADPARM); } if(!model->MOS1oxideThicknessGiven || model->MOS1oxideThickness == 0) { model->MOS1oxideCapFactor = 0; } else { model->MOS1oxideCapFactor = 3.9 * 8.854214871e-12/ model->MOS1oxideThickness; if(!model->MOS1transconductanceGiven) { if(!model->MOS1surfaceMobilityGiven) { model->MOS1surfaceMobility=600; } model->MOS1transconductance = model->MOS1surfaceMobility * model->MOS1oxideCapFactor * 1e-4 /*(m**2/cm**2)*/; } if(model->MOS1substrateDopingGiven) { if(model->MOS1substrateDoping*1e6 /*(cm**3/m**3)*/ >1.45e16) { if(!model->MOS1phiGiven) { model->MOS1phi = 2*vtnom* log(model->MOS1substrateDoping* 1e6/*(cm**3/m**3)*//1.45e16); model->MOS1phi = MAX(.1,model->MOS1phi); } fermis = model->MOS1type * .5 * model->MOS1phi; wkfng = 3.2; if(!model->MOS1gateTypeGiven) model->MOS1gateType=1; if(model->MOS1gateType != 0) { fermig = model->MOS1type *model->MOS1gateType*.5*egfet1; wkfng = 3.25 + .5 * egfet1 - fermig; } wkfngs = wkfng - (3.25 + .5 * egfet1 +fermis); if(!model->MOS1gammaGiven) { model->MOS1gamma = sqrt(2 * 11.70 * 8.854214871e-12 * CHARGE * model->MOS1substrateDoping* 1e6/*(cm**3/m**3)*/)/ model->MOS1oxideCapFactor; } if(!model->MOS1vt0Given) { if(!model->MOS1surfaceStateDensityGiven) model->MOS1surfaceStateDensity=0; vfb = wkfngs - model->MOS1surfaceStateDensity * 1e4 /*(cm**2/m**2)*/ * CHARGE/model->MOS1oxideCapFactor; model->MOS1vt0 = vfb + model->MOS1type * (model->MOS1gamma * sqrt(model->MOS1phi)+ model->MOS1phi); } } else { model->MOS1substrateDoping = 0; SPfrontEnd->IFerrorf (ERR_FATAL, "%s: Nsub < Ni", model->MOS1modName); return(E_BADPARM); } } } /* loop through all instances of the model */ for(here = MOS1instances(model); here!= NULL; here = MOS1nextInstance(here)) { double czbd; /* zero voltage bulk-drain capacitance */ double czbdsw; /* zero voltage bulk-drain sidewall capacitance */ double czbs; /* zero voltage bulk-source capacitance */ double czbssw; /* zero voltage bulk-source sidewall capacitance */ double arg; /* 1 - fc */ double sarg; /* (1-fc) ^^ (-mj) */ double sargsw; /* (1-fc) ^^ (-mjsw) */ /* perform the parameter defaulting */ if(!here->MOS1dtempGiven) { here->MOS1dtemp = 0.0; } if(!here->MOS1tempGiven) { here->MOS1temp = ckt->CKTtemp + here->MOS1dtemp; } vt = here->MOS1temp * CONSTKoverQ; ratio = here->MOS1temp/model->MOS1tnom; fact2 = here->MOS1temp/REFTEMP; kt = here->MOS1temp * CONSTboltz; egfet = 1.16-(7.02e-4*here->MOS1temp*here->MOS1temp)/ (here->MOS1temp+1108); arg = -egfet/(kt+kt)+1.1150877/(CONSTboltz*(REFTEMP+REFTEMP)); pbfact = -2*vt *(1.5*log(fact2)+CHARGE*arg); if(!here->MOS1drainAreaGiven) { here->MOS1drainArea = ckt->CKTdefaultMosAD; } if(!here->MOS1mGiven) { here->MOS1m = ckt->CKTdefaultMosM; } if(!here->MOS1lGiven) { here->MOS1l = ckt->CKTdefaultMosL; } if(!here->MOS1sourceAreaGiven) { here->MOS1sourceArea = ckt->CKTdefaultMosAS; } if(!here->MOS1wGiven) { here->MOS1w = ckt->CKTdefaultMosW; } if(here->MOS1l - 2 * model->MOS1latDiff <=0) { SPfrontEnd->IFerrorf (ERR_WARNING, "%s: effective channel length less than zero", model->MOS1modName); } ratio4 = ratio * sqrt(ratio); here->MOS1tTransconductance = model->MOS1transconductance / ratio4; here->MOS1tSurfMob = model->MOS1surfaceMobility/ratio4; phio= (model->MOS1phi-pbfact1)/fact1; here->MOS1tPhi = fact2 * phio + pbfact; here->MOS1tVbi = model->MOS1vt0 - model->MOS1type * (model->MOS1gamma* sqrt(model->MOS1phi)) +.5*(egfet1-egfet) + model->MOS1type*.5* (here->MOS1tPhi-model->MOS1phi); here->MOS1tVto = here->MOS1tVbi + model->MOS1type * model->MOS1gamma * sqrt(here->MOS1tPhi); here->MOS1tSatCur = model->MOS1jctSatCur* exp(-egfet/vt+egfet1/vtnom); here->MOS1tSatCurDens = model->MOS1jctSatCurDensity * exp(-egfet/vt+egfet1/vtnom); pbo = (model->MOS1bulkJctPotential - pbfact1)/fact1; gmaold = (model->MOS1bulkJctPotential-pbo)/pbo; capfact = 1/(1+model->MOS1bulkJctBotGradingCoeff* (4e-4*(model->MOS1tnom-REFTEMP)-gmaold)); here->MOS1tCbd = model->MOS1capBD * capfact; here->MOS1tCbs = model->MOS1capBS * capfact; here->MOS1tCj = model->MOS1bulkCapFactor * capfact; capfact = 1/(1+model->MOS1bulkJctSideGradingCoeff* (4e-4*(model->MOS1tnom-REFTEMP)-gmaold)); here->MOS1tCjsw = model->MOS1sideWallCapFactor * capfact; here->MOS1tBulkPot = fact2 * pbo+pbfact; gmanew = (here->MOS1tBulkPot-pbo)/pbo; capfact = (1+model->MOS1bulkJctBotGradingCoeff* (4e-4*(here->MOS1temp-REFTEMP)-gmanew)); here->MOS1tCbd *= capfact; here->MOS1tCbs *= capfact; here->MOS1tCj *= capfact; capfact = (1+model->MOS1bulkJctSideGradingCoeff* (4e-4*(here->MOS1temp-REFTEMP)-gmanew)); here->MOS1tCjsw *= capfact; here->MOS1tDepCap = model->MOS1fwdCapDepCoeff * here->MOS1tBulkPot; if( (here->MOS1tSatCurDens == 0) || (here->MOS1drainArea == 0) || (here->MOS1sourceArea == 0) ) { here->MOS1sourceVcrit = here->MOS1drainVcrit = vt*log(vt/(CONSTroot2*here->MOS1m*here->MOS1tSatCur)); } else { here->MOS1drainVcrit = vt * log( vt / (CONSTroot2 * here->MOS1m * here->MOS1tSatCurDens * here->MOS1drainArea)); here->MOS1sourceVcrit = vt * log( vt / (CONSTroot2 * here->MOS1m * here->MOS1tSatCurDens * here->MOS1sourceArea)); } if(model->MOS1capBDGiven) { czbd = here->MOS1tCbd * here->MOS1m; } else { if(model->MOS1bulkCapFactorGiven) { czbd=here->MOS1tCj*here->MOS1m*here->MOS1drainArea; } else { czbd=0; } } if(model->MOS1sideWallCapFactorGiven) { czbdsw= here->MOS1tCjsw * here->MOS1drainPerimiter * here->MOS1m; } else { czbdsw=0; } arg = 1-model->MOS1fwdCapDepCoeff; sarg = exp( (-model->MOS1bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS1bulkJctSideGradingCoeff) * log(arg) ); here->MOS1Cbd = czbd; here->MOS1Cbdsw = czbdsw; here->MOS1f2d = czbd*(1-model->MOS1fwdCapDepCoeff* (1+model->MOS1bulkJctBotGradingCoeff))* sarg/arg + czbdsw*(1-model->MOS1fwdCapDepCoeff* (1+model->MOS1bulkJctSideGradingCoeff))* sargsw/arg; here->MOS1f3d = czbd * model->MOS1bulkJctBotGradingCoeff * sarg/arg/ here->MOS1tBulkPot + czbdsw * model->MOS1bulkJctSideGradingCoeff * sargsw/arg / here->MOS1tBulkPot; here->MOS1f4d = czbd*here->MOS1tBulkPot*(1-arg*sarg)/ (1-model->MOS1bulkJctBotGradingCoeff) + czbdsw*here->MOS1tBulkPot*(1-arg*sargsw)/ (1-model->MOS1bulkJctSideGradingCoeff) -here->MOS1f3d/2* (here->MOS1tDepCap*here->MOS1tDepCap) -here->MOS1tDepCap * here->MOS1f2d; if(model->MOS1capBSGiven) { czbs=here->MOS1tCbs * here->MOS1m; } else { if(model->MOS1bulkCapFactorGiven) { czbs=here->MOS1tCj*here->MOS1sourceArea * here->MOS1m; } else { czbs=0; } } if(model->MOS1sideWallCapFactorGiven) { czbssw = here->MOS1tCjsw * here->MOS1sourcePerimiter * here->MOS1m; } else { czbssw=0; } arg = 1-model->MOS1fwdCapDepCoeff; sarg = exp( (-model->MOS1bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS1bulkJctSideGradingCoeff) * log(arg) ); here->MOS1Cbs = czbs; here->MOS1Cbssw = czbssw; here->MOS1f2s = czbs*(1-model->MOS1fwdCapDepCoeff* (1+model->MOS1bulkJctBotGradingCoeff))* sarg/arg + czbssw*(1-model->MOS1fwdCapDepCoeff* (1+model->MOS1bulkJctSideGradingCoeff))* sargsw/arg; here->MOS1f3s = czbs * model->MOS1bulkJctBotGradingCoeff * sarg/arg/ here->MOS1tBulkPot + czbssw * model->MOS1bulkJctSideGradingCoeff * sargsw/arg / here->MOS1tBulkPot; here->MOS1f4s = czbs*here->MOS1tBulkPot*(1-arg*sarg)/ (1-model->MOS1bulkJctBotGradingCoeff) + czbssw*here->MOS1tBulkPot*(1-arg*sargsw)/ (1-model->MOS1bulkJctSideGradingCoeff) -here->MOS1f3s/2* (here->MOS1tDepCap*here->MOS1tDepCap) -here->MOS1tDepCap * here->MOS1f2s; if(model->MOS1drainResistanceGiven) { if(model->MOS1drainResistance != 0) { here->MOS1drainConductance = here->MOS1m / model->MOS1drainResistance; } else { here->MOS1drainConductance = 0; } } else if (model->MOS1sheetResistanceGiven) { if(model->MOS1sheetResistance != 0) { here->MOS1drainConductance = here->MOS1m / (model->MOS1sheetResistance*here->MOS1drainSquares); } else { here->MOS1drainConductance = 0; } } else { here->MOS1drainConductance = 0; } if(model->MOS1sourceResistanceGiven) { if(model->MOS1sourceResistance != 0) { here->MOS1sourceConductance = here->MOS1m / model->MOS1sourceResistance; } else { here->MOS1sourceConductance = 0; } } else if (model->MOS1sheetResistanceGiven) { if ((model->MOS1sheetResistance != 0) && (here->MOS1sourceSquares != 0)) { here->MOS1sourceConductance = here->MOS1m / (model->MOS1sheetResistance*here->MOS1sourceSquares); } else { here->MOS1sourceConductance = 0; } } else { here->MOS1sourceConductance = 0; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos1/mos1init.c0000644000175000017500000000326213546075722021754 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "mos1itf.h" #include "mos1ext.h" #include "mos1init.h" SPICEdev MOS1info = { .DEVpublic = { .name = "Mos1", .description = "Level 1 MOSfet model with Meyer capacitance model", .terms = &MOS1nSize, .numNames = &MOS1nSize, .termNames = MOS1names, .numInstanceParms = &MOS1pTSize, .instanceParms = MOS1pTable, .numModelParms = &MOS1mPTSize, .modelParms = MOS1mPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = MOS1param, .DEVmodParam = MOS1mParam, .DEVload = MOS1load, .DEVsetup = MOS1setup, .DEVunsetup = MOS1unsetup, .DEVpzSetup = MOS1setup, .DEVtemperature = MOS1temp, .DEVtrunc = MOS1trunc, .DEVfindBranch = NULL, .DEVacLoad = MOS1acLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = MOS1delete, .DEVsetic = MOS1getic, .DEVask = MOS1ask, .DEVmodAsk = MOS1mAsk, .DEVpzLoad = MOS1pzLoad, .DEVconvTest = MOS1convTest, .DEVsenSetup = MOS1sSetup, .DEVsenLoad = MOS1sLoad, .DEVsenUpdate = MOS1sUpdate, .DEVsenAcLoad = MOS1sAcLoad, .DEVsenPrint = MOS1sPrint, .DEVsenTrunc = NULL, .DEVdisto = MOS1disto, .DEVnoise = MOS1noise, .DEVsoaCheck = NULL, .DEVinstSize = &MOS1iSize, .DEVmodSize = &MOS1mSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_mos1_info(void) { return &MOS1info; } tmpk8ny_4pz/src/spicelib/devices/mos1/mos1trun.c0000644000175000017500000000135513546075722022002 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos1defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS1trunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { MOS1model *model = (MOS1model *)inModel; MOS1instance *here; for( ; model != NULL; model = MOS1nextModel(model)) { for(here=MOS1instances(model);here!=NULL;here = MOS1nextInstance(here)){ CKTterr(here->MOS1qgs,ckt,timeStep); CKTterr(here->MOS1qgd,ckt,timeStep); CKTterr(here->MOS1qgb,ckt,timeStep); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos1/mos1sacl.c0000644000175000017500000007420513546075722021740 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/const.h" #include "mos1defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* actually load the current ac sensitivity * information into the array previously provided */ int MOS1sAcLoad(GENmodel *inModel, CKTcircuit *ckt) { MOS1model *model = (MOS1model*)inModel; MOS1instance *here; int xnrm; int xrev; double A0; double Apert = 0.0; double DELA; double DELAinv; double gdpr0; double gspr0; double gds0; double gbs0; double gbd0; double gm0; double gmbs0; double gdpr; double gspr; double gds; double gbs; double gbd; double gm; double gmbs; double xcgs0; double xcgd0; double xcgb0; double xbd0; double xbs0; double xcgs; double xcgd; double xcgb; double xbd; double xbs; double vbsOp; double vbdOp; double vspr; double vdpr; double vgs; double vgd; double vgb; double vbs; double vbd; double vds; double ivspr; double ivdpr; double ivgs; double ivgd; double ivgb; double ivbs; double ivbd; double ivds; double cspr; double cdpr; double cgs; double cgd; double cgb; double cbs; double cbd; double cds; double cs0; double csprm0; double cd0; double cdprm0; double cg0; double cb0; double cs; double csprm; double cd; double cdprm; double cg; double cb; double icspr; double icdpr; double icgs; double icgd; double icgb; double icbs; double icbd; double icds; double ics0; double icsprm0; double icd0; double icdprm0; double icg0; double icb0; double ics; double icsprm; double icd; double icdprm; double icg; double icb; double DvDp = 0.0; int i; int flag; int error; int iparmno; double arg; double sarg; double sargsw; double SaveState[44]; int save_mode; SENstruct *info; #ifdef SENSDEBUG printf("MOS1senacload\n"); printf("CKTomega = %.5e\n",ckt->CKTomega); #endif /* SENSDEBUG */ info = ckt->CKTsenInfo; info->SENstatus = PERTURBATION; for( ; model != NULL; model = MOS1nextModel(model)) { for(here = MOS1instances(model); here!= NULL; here = MOS1nextInstance(here)) { /* save the unperturbed values in the state vector */ for(i=0; i <= 16; i++) *(SaveState + i) = *(ckt->CKTstate0 + here->MOS1states + i); *(SaveState + 17) = here->MOS1sourceConductance; *(SaveState + 18) = here->MOS1drainConductance; *(SaveState + 19) = here->MOS1cd; *(SaveState + 20) = here->MOS1cbs; *(SaveState + 21) = here->MOS1cbd; *(SaveState + 22) = here->MOS1gmbs; *(SaveState + 23) = here->MOS1gm; *(SaveState + 24) = here->MOS1gds; *(SaveState + 25) = here->MOS1gbd; *(SaveState + 26) = here->MOS1gbs; *(SaveState + 27) = here->MOS1capbd; *(SaveState + 28) = here->MOS1capbs; *(SaveState + 29) = here->MOS1Cbd; *(SaveState + 30) = here->MOS1Cbdsw; *(SaveState + 31) = here->MOS1Cbs; *(SaveState + 32) = here->MOS1Cbssw; *(SaveState + 33) = here->MOS1f2d; *(SaveState + 34) = here->MOS1f3d; *(SaveState + 35) = here->MOS1f4d; *(SaveState + 36) = here->MOS1f2s; *(SaveState + 37) = here->MOS1f3s; *(SaveState + 38) = here->MOS1f4s; *(SaveState + 39) = here->MOS1cgs; *(SaveState + 40) = here->MOS1cgd; *(SaveState + 41) = here->MOS1cgb; *(SaveState + 42) = here->MOS1vdsat; *(SaveState + 43) = here->MOS1von; save_mode = here->MOS1mode; xnrm=1; xrev=0; if (here->MOS1mode < 0) { xnrm=0; xrev=1; } vbsOp = model->MOS1type * ( *(ckt->CKTrhsOp+here->MOS1bNode) - *(ckt->CKTrhsOp+here->MOS1sNodePrime)); vbdOp = model->MOS1type * ( *(ckt->CKTrhsOp+here->MOS1bNode) - *(ckt->CKTrhsOp+here->MOS1dNodePrime)); vspr = *(ckt->CKTrhsOld + here->MOS1sNode) - *(ckt->CKTrhsOld + here->MOS1sNodePrime) ; ivspr = *(ckt->CKTirhsOld + here->MOS1sNode) - *(ckt->CKTirhsOld + here->MOS1sNodePrime) ; vdpr = *(ckt->CKTrhsOld + here->MOS1dNode) - *(ckt->CKTrhsOld + here->MOS1dNodePrime) ; ivdpr = *(ckt->CKTirhsOld + here->MOS1dNode) - *(ckt->CKTirhsOld + here->MOS1dNodePrime) ; vgb = *(ckt->CKTrhsOld + here->MOS1gNode) - *(ckt->CKTrhsOld + here->MOS1bNode) ; ivgb = *(ckt->CKTirhsOld + here->MOS1gNode) - *(ckt->CKTirhsOld + here->MOS1bNode) ; vbs = *(ckt->CKTrhsOld + here->MOS1bNode) - *(ckt->CKTrhsOld + here->MOS1sNodePrime) ; ivbs = *(ckt->CKTirhsOld + here->MOS1bNode) - *(ckt->CKTirhsOld + here->MOS1sNodePrime) ; vbd = *(ckt->CKTrhsOld + here->MOS1bNode) - *(ckt->CKTrhsOld + here->MOS1dNodePrime) ; ivbd = *(ckt->CKTirhsOld + here->MOS1bNode) - *(ckt->CKTirhsOld + here->MOS1dNodePrime) ; vds = vbs - vbd ; ivds = ivbs - ivbd ; vgs = vgb + vbs ; ivgs = ivgb + ivbs ; vgd = vgb + vbd ; ivgd = ivgb + ivbd ; #ifdef SENSDEBUG printf("senacload instance name %s\n",here->MOS1name); printf("gate = %d ,drain = %d, drainprm = %d\n", here->MOS1gNode,here->MOS1dNode,here->MOS1dNodePrime); printf("source = %d , sourceprm = %d ,body = %d, senparmno = %d\n", here->MOS1sNode ,here->MOS1sNodePrime,here->MOS1bNode, here->MOS1senParmNo); printf("\n without perturbation \n"); #endif /* SENSDEBUG */ /* without perturbation */ *(ckt->CKTstate0 + here->MOS1vbs) = vbsOp; *(ckt->CKTstate0 + here->MOS1vbd) = vbdOp; here->MOS1senPertFlag = ON ; if(info->SENacpertflag == 1){ /* store the unperturbed values of small signal parameters */ if((error = MOS1load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS1senCgs) = here->MOS1cgs; *(here->MOS1senCgd) = here->MOS1cgd; *(here->MOS1senCgb) = here->MOS1cgb; *(here->MOS1senCbd) = here->MOS1capbd; *(here->MOS1senCbs) = here->MOS1capbs; *(here->MOS1senGds) = here->MOS1gds; *(here->MOS1senGbs) = here->MOS1gbs; *(here->MOS1senGbd) = here->MOS1gbd; *(here->MOS1senGm) = here->MOS1gm; *(here->MOS1senGmbs) = here->MOS1gmbs; } xcgs0= *(here->MOS1senCgs) * ckt->CKTomega; xcgd0= *(here->MOS1senCgd) * ckt->CKTomega; xcgb0= *(here->MOS1senCgb) * ckt->CKTomega; xbd0= *(here->MOS1senCbd) * ckt->CKTomega; xbs0= *(here->MOS1senCbs) * ckt->CKTomega; gds0= *(here->MOS1senGds); gbs0= *(here->MOS1senGbs); gbd0= *(here->MOS1senGbd); gm0= *(here->MOS1senGm); gmbs0= *(here->MOS1senGmbs); gdpr0 = here->MOS1drainConductance; gspr0 = here->MOS1sourceConductance; cspr = gspr0 * vspr ; icspr = gspr0 * ivspr ; cdpr = gdpr0 * vdpr ; icdpr = gdpr0 * ivdpr ; cgs = ( - xcgs0 * ivgs ); icgs = xcgs0 * vgs ; cgd = ( - xcgd0 * ivgd ); icgd = xcgd0 * vgd ; cgb = ( - xcgb0 * ivgb ); icgb = xcgb0 * vgb ; cbs = ( gbs0 * vbs - xbs0 * ivbs ); icbs = ( xbs0 * vbs + gbs0 * ivbs ); cbd = ( gbd0 * vbd - xbd0 * ivbd ); icbd = ( xbd0 * vbd + gbd0 * ivbd ); cds = ( gds0 * vds + xnrm * (gm0 * vgs + gmbs0 * vbs) - xrev * (gm0 * vgd + gmbs0 * vbd) ); icds = ( gds0 * ivds + xnrm * (gm0 * ivgs + gmbs0 * ivbs) - xrev * (gm0 * ivgd + gmbs0 * ivbd) ); cs0 = cspr; ics0 = icspr; csprm0 = ( -cspr - cgs - cbs - cds ) ; icsprm0 = ( -icspr - icgs - icbs - icds ) ; cd0 = cdpr; icd0 = icdpr; cdprm0 = ( -cdpr - cgd - cbd + cds ) ; icdprm0 = ( -icdpr - icgd - icbd + icds ) ; cg0 = cgs + cgd + cgb ; icg0 = icgs + icgd + icgb ; cb0 = cbs + cbd - cgb ; icb0 = icbs + icbd - icgb ; #ifdef SENSDEBUG printf("gspr0 = %.7e , gdpr0 = %.7e , gds0 = %.7e, gbs0 = %.7e\n", gspr0,gdpr0,gds0,gbs0); printf("gbd0 = %.7e , gm0 = %.7e , gmbs0 = %.7e\n",gbd0,gm0,gmbs0); printf("xcgs0 = %.7e , xcgd0 = %.7e , xcgb0 = %.7e,", xcgs0,xcgd0,xcgb0); printf("xbd0 = %.7e,xbs0 = %.7e\n",xbd0,xbs0); printf("vbs = %.7e , vbd = %.7e , vgb = %.7e\n",vbs,vbd,vgb); printf("ivbs = %.7e , ivbd = %.7e , ivgb = %.7e\n",ivbs,ivbd,ivgb); printf("cbs0 = %.7e , cbd0 = %.7e , cgb0 = %.7e\n",cbs,cbd,cgb); printf("cb0 = %.7e , cg0 = %.7e , cs0 = %.7e\n",cb0,cg0,cs0); printf("csprm0 = %.7e, cd0 = %.7e, cdprm0 = %.7e\n", csprm0,cd0,cdprm0); printf("icb0 = %.7e , icg0 = %.7e , ics0 = %.7e\n",icb0,icg0,ics0); printf("icsprm0 = %.7e, icd0 = %.7e, icdprm0 = %.7e\n", icsprm0,icd0,icdprm0); printf("\nPerturbation of vbs\n"); #endif /* SENSDEBUG */ /* Perturbation of vbs */ flag = 1; A0 = vbsOp; DELA = info->SENpertfac * here->MOS1tVto ; DELAinv = 1.0/DELA; if(info->SENacpertflag == 1){ /* store the values of small signal parameters * corresponding to perturbed vbs */ Apert = A0 + DELA; *(ckt->CKTstate0 + here->MOS1vbs) = Apert; *(ckt->CKTstate0 + here->MOS1vbd) = vbdOp; if((error = MOS1load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS1senCgs + 1) = here->MOS1cgs; *(here->MOS1senCgd + 1) = here->MOS1cgd; *(here->MOS1senCgb + 1) = here->MOS1cgb; *(here->MOS1senCbd + 1) = here->MOS1capbd; *(here->MOS1senCbs + 1) = here->MOS1capbs; *(here->MOS1senGds + 1) = here->MOS1gds; *(here->MOS1senGbs + 1) = here->MOS1gbs; *(here->MOS1senGbd + 1) = here->MOS1gbd; *(here->MOS1senGm + 1) = here->MOS1gm; *(here->MOS1senGmbs + 1) = here->MOS1gmbs; *(ckt->CKTstate0 + here->MOS1vbs) = A0; } goto load; pertvbd: /* Perturbation of vbd */ #ifdef SENSDEBUG printf("\nPerturbation of vbd\n"); #endif /* SENSDEBUG */ flag = 2; A0 = vbdOp; DELA = info->SENpertfac * here->MOS1tVto + 1e-8; DELAinv = 1.0/DELA; if(info->SENacpertflag == 1){ /* store the values of small signal parameters * corresponding to perturbed vbd */ Apert = A0 + DELA; *(ckt->CKTstate0 + here->MOS1vbs) = vbsOp; *(ckt->CKTstate0 + here->MOS1vbd) = Apert; if((error = MOS1load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS1senCgs + 2) = here->MOS1cgs; *(here->MOS1senCgd + 2) = here->MOS1cgd; *(here->MOS1senCgb + 2) = here->MOS1cgb; *(here->MOS1senCbd + 2) = here->MOS1capbd; *(here->MOS1senCbs + 2) = here->MOS1capbs; *(here->MOS1senGds + 2) = here->MOS1gds; *(here->MOS1senGbs + 2) = here->MOS1gbs; *(here->MOS1senGbd + 2) = here->MOS1gbd; *(here->MOS1senGm + 2) = here->MOS1gm; *(here->MOS1senGmbs + 2) = here->MOS1gmbs; *(ckt->CKTstate0 + here->MOS1vbd) = A0; } goto load; pertvgb: /* Perturbation of vgb */ #ifdef SENSDEBUG printf("\nPerturbation of vgb\n"); #endif /* SENSDEBUG */ flag = 3; A0 = model->MOS1type * (*(ckt->CKTrhsOp + here->MOS1gNode) - *(ckt->CKTrhsOp + here->MOS1bNode)); DELA = info->SENpertfac * A0 + 1e-8; DELAinv = model->MOS1type * 1.0/DELA; if(info->SENacpertflag == 1){ /* store the values of small signal parameters * corresponding to perturbed vgb */ *(ckt->CKTstate0 + here->MOS1vbs) = vbsOp; *(ckt->CKTstate0 + here->MOS1vbd) = vbdOp; *(ckt->CKTrhsOp + here->MOS1bNode) -= DELA; if((error = MOS1load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS1senCgs + 3) = here->MOS1cgs; *(here->MOS1senCgd + 3) = here->MOS1cgd; *(here->MOS1senCgb + 3) = here->MOS1cgb; *(here->MOS1senCbd + 3) = here->MOS1capbd; *(here->MOS1senCbs + 3) = here->MOS1capbs; *(here->MOS1senGds + 3) = here->MOS1gds; *(here->MOS1senGbs + 3) = here->MOS1gbs; *(here->MOS1senGbd + 3) = here->MOS1gbd; *(here->MOS1senGm + 3) = here->MOS1gm; *(here->MOS1senGmbs + 3) = here->MOS1gmbs; *(ckt->CKTrhsOp + here->MOS1bNode) += DELA; } goto load; pertl: /* Perturbation of length */ if(here->MOS1sens_l == 0){ goto pertw; } #ifdef SENSDEBUG printf("\nPerturbation of length\n"); #endif /* SENSDEBUG */ flag = 4; A0 = here->MOS1l; DELA = info->SENpertfac * A0; DELAinv = 1.0/DELA; if(info->SENacpertflag == 1){ /* store the values of small signal parameters * corresponding to perturbed length */ Apert = A0 + DELA; here->MOS1l = Apert; *(ckt->CKTstate0 + here->MOS1vbs) = vbsOp; *(ckt->CKTstate0 + here->MOS1vbd) = vbdOp; if ((error = MOS1load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS1senCgs + 4) = here->MOS1cgs; *(here->MOS1senCgd + 4) = here->MOS1cgd; *(here->MOS1senCgb + 4) = here->MOS1cgb; *(here->MOS1senCbd + 4) = here->MOS1capbd; *(here->MOS1senCbs + 4) = here->MOS1capbs; *(here->MOS1senGds + 4) = here->MOS1gds; *(here->MOS1senGbs + 4) = here->MOS1gbs; *(here->MOS1senGbd + 4) = here->MOS1gbd; *(here->MOS1senGm + 4) = here->MOS1gm; *(here->MOS1senGmbs + 4) = here->MOS1gmbs; here->MOS1l = A0; } goto load; pertw: /* Perturbation of width */ if(here->MOS1sens_w == 0) goto next; #ifdef SENSDEBUG printf("\nPerturbation of width\n"); #endif /* SENSDEBUG */ flag = 5; A0 = here->MOS1w; DELA = info->SENpertfac * A0; DELAinv = 1.0/DELA; Apert = A0 + DELA; if(info->SENacpertflag == 1){ /* store the values of small signal parameters * corresponding to perturbed width */ here->MOS1w = Apert; here->MOS1drainArea *= (1 + info->SENpertfac); here->MOS1sourceArea *= (1 + info->SENpertfac); here->MOS1Cbd *= (1 + info->SENpertfac); here->MOS1Cbs *= (1 + info->SENpertfac); if(here->MOS1drainPerimiter){ here->MOS1Cbdsw += here->MOS1Cbdsw * DELA/here->MOS1drainPerimiter; } if(here->MOS1sourcePerimiter){ here->MOS1Cbssw += here->MOS1Cbssw * DELA/here->MOS1sourcePerimiter; } if(vbdOp >= here->MOS1tDepCap){ arg = 1-model->MOS1fwdCapDepCoeff; sarg = exp( (-model->MOS1bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS1bulkJctSideGradingCoeff) * log(arg) ); here->MOS1f2d = here->MOS1Cbd*(1-model->MOS1fwdCapDepCoeff* (1+model->MOS1bulkJctBotGradingCoeff))* sarg/arg + here->MOS1Cbdsw*(1-model->MOS1fwdCapDepCoeff* (1+model->MOS1bulkJctSideGradingCoeff))* sargsw/arg; here->MOS1f3d = here->MOS1Cbd * model->MOS1bulkJctBotGradingCoeff * sarg/arg/ here->MOS1tBulkPot + here->MOS1Cbdsw * model->MOS1bulkJctSideGradingCoeff * sargsw/arg / here->MOS1tBulkPot; here->MOS1f4d = here->MOS1Cbd*here->MOS1tBulkPot* (1-arg*sarg)/ (1-model->MOS1bulkJctBotGradingCoeff) + here->MOS1Cbdsw*here->MOS1tBulkPot*(1-arg*sargsw)/ (1-model->MOS1bulkJctSideGradingCoeff) -here->MOS1f3d/2* (here->MOS1tDepCap*here->MOS1tDepCap) -here->MOS1tDepCap * here->MOS1f2d; } if(vbsOp >= here->MOS1tDepCap){ arg = 1-model->MOS1fwdCapDepCoeff; sarg = exp( (-model->MOS1bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS1bulkJctSideGradingCoeff) * log(arg) ); here->MOS1f2s = here->MOS1Cbs*(1-model->MOS1fwdCapDepCoeff* (1+model->MOS1bulkJctBotGradingCoeff))* sarg/arg + here->MOS1Cbssw*(1-model->MOS1fwdCapDepCoeff* (1+model->MOS1bulkJctSideGradingCoeff))* sargsw/arg; here->MOS1f3s = here->MOS1Cbs * model->MOS1bulkJctBotGradingCoeff * sarg/arg/ here->MOS1tBulkPot + here->MOS1Cbssw * model->MOS1bulkJctSideGradingCoeff * sargsw/arg / here->MOS1tBulkPot; here->MOS1f4s = here->MOS1Cbs* here->MOS1tBulkPot*(1-arg*sarg)/ (1-model->MOS1bulkJctBotGradingCoeff) + here->MOS1Cbssw*here->MOS1tBulkPot*(1-arg*sargsw)/ (1-model->MOS1bulkJctSideGradingCoeff) -here->MOS1f3s/2* (here->MOS1tDepCap*here->MOS1tDepCap) -here->MOS1tDepCap * here->MOS1f2s; } *(ckt->CKTstate0 + here->MOS1vbs) = vbsOp; *(ckt->CKTstate0 + here->MOS1vbd) = vbdOp; if ((error = MOS1load((GENmodel*)model,ckt)) != 0) return(error); *(here->MOS1senCgs + 5) = here->MOS1cgs; *(here->MOS1senCgd + 5) = here->MOS1cgd; *(here->MOS1senCgb + 5) = here->MOS1cgb; *(here->MOS1senCbd + 5) = here->MOS1capbd; *(here->MOS1senCbs + 5) = here->MOS1capbs; *(here->MOS1senGds + 5) = here->MOS1gds; *(here->MOS1senGbs + 5) = here->MOS1gbs; *(here->MOS1senGbd + 5) = here->MOS1gbd; *(here->MOS1senGm + 5) = here->MOS1gm; *(here->MOS1senGmbs + 5) = here->MOS1gmbs; here->MOS1w = A0; here->MOS1drainArea /= (1 + info->SENpertfac); here->MOS1sourceArea /= (1 + info->SENpertfac); } load: gds= *(here->MOS1senGds + flag); gbs= *(here->MOS1senGbs + flag); gbd= *(here->MOS1senGbd + flag); gm= *(here->MOS1senGm + flag); gmbs= *(here->MOS1senGmbs + flag); if(flag == 5){ gdpr = here->MOS1drainConductance * Apert/A0; gspr = here->MOS1sourceConductance * Apert/A0; } else{ gdpr = here->MOS1drainConductance; gspr = here->MOS1sourceConductance; } xcgs= *(here->MOS1senCgs + flag) * ckt->CKTomega; xcgd= *(here->MOS1senCgd + flag) * ckt->CKTomega; xcgb= *(here->MOS1senCgb + flag) * ckt->CKTomega; xbd= *(here->MOS1senCbd + flag) * ckt->CKTomega; xbs= *(here->MOS1senCbs + flag) * ckt->CKTomega; #ifdef SENSDEBUG printf("flag = %d \n",flag); printf("gspr = %.7e , gdpr = %.7e , gds = %.7e, gbs = %.7e\n", gspr,gdpr,gds,gbs); printf("gbd = %.7e , gm = %.7e , gmbs = %.7e\n",gbd,gm,gmbs); printf("xcgs = %.7e , xcgd = %.7e , xcgb = %.7e,", xcgs,xcgd,xcgb); printf("xbd = %.7e,xbs = %.7e\n",xbd,xbs); #endif /* SENSDEBUG */ cspr = gspr * vspr ; icspr = gspr * ivspr ; cdpr = gdpr * vdpr ; icdpr = gdpr * ivdpr ; cgs = ( - xcgs * ivgs ); icgs = xcgs * vgs ; cgd = ( - xcgd * ivgd ); icgd = xcgd * vgd ; cgb = ( - xcgb * ivgb ); icgb = xcgb * vgb ; cbs = ( gbs * vbs - xbs * ivbs ); icbs = ( xbs * vbs + gbs * ivbs ); cbd = ( gbd * vbd - xbd * ivbd ); icbd = ( xbd * vbd + gbd * ivbd ); cds = ( gds * vds + xnrm * (gm * vgs + gmbs * vbs) - xrev * (gm * vgd + gmbs * vbd) ); icds = ( gds * ivds + xnrm * (gm * ivgs + gmbs * ivbs) - xrev * (gm * ivgd + gmbs * ivbd) ); cs = cspr; ics = icspr; csprm = ( -cspr - cgs - cbs - cds ) ; icsprm = ( -icspr - icgs - icbs - icds ) ; cd = cdpr; icd = icdpr; cdprm = ( -cdpr - cgd - cbd + cds ) ; icdprm = ( -icdpr - icgd - icbd + icds ) ; cg = cgs + cgd + cgb ; icg = icgs + icgd + icgb ; cb = cbs + cbd - cgb ; icb = icbs + icbd - icgb ; #ifdef SENSDEBUG printf("vbs = %.7e , vbd = %.7e , vgb = %.7e\n",vbs,vbd,vgb); printf("ivbs = %.7e , ivbd = %.7e , ivgb = %.7e\n",ivbs,ivbd,ivgb); printf("cbs = %.7e , cbd = %.7e , cgb = %.7e\n",cbs,cbd,cgb); printf("cb = %.7e , cg = %.7e , cs = %.7e\n",cb,cg,cs); printf("csprm = %.7e, cd = %.7e, cdprm = %.7e\n",csprm,cd,cdprm); printf("icb = %.7e , icg = %.7e , ics = %.7e\n",icb,icg,ics); printf("icsprm = %.7e, icd = %.7e, icdprm = %.7e\n", icsprm,icd,icdprm); #endif /* SENSDEBUG */ for(iparmno = 1;iparmno<=info->SENparms;iparmno++){ if((flag == 4) && (iparmno != here->MOS1senParmNo)) continue; if( (flag == 5) && (iparmno != (here->MOS1senParmNo + (int) here->MOS1sens_l))) continue; switch(flag){ case 1: DvDp = model->MOS1type * (info->SEN_Sap[here->MOS1bNode][iparmno] - info->SEN_Sap[here->MOS1sNodePrime][iparmno]); break; case 2: DvDp = model->MOS1type * ( info->SEN_Sap[here->MOS1bNode][iparmno] - info->SEN_Sap[here->MOS1dNodePrime][iparmno]); break; case 3: DvDp = model->MOS1type * ( info->SEN_Sap[here->MOS1gNode][iparmno] - info->SEN_Sap[here->MOS1bNode][iparmno]); break; case 4: DvDp = 1; break; case 5: DvDp = 1; break; } *(info->SEN_RHS[here->MOS1bNode] + iparmno) -= ( cb - cb0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS1bNode] + iparmno) -= ( icb - icb0) * DELAinv * DvDp; *(info->SEN_RHS[here->MOS1gNode] + iparmno) -= ( cg - cg0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS1gNode] + iparmno) -= ( icg - icg0) * DELAinv * DvDp; if(here->MOS1sNode != here->MOS1sNodePrime){ *(info->SEN_RHS[here->MOS1sNode] + iparmno) -= ( cs - cs0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS1sNode] + iparmno) -= ( ics - ics0) * DELAinv * DvDp; } *(info->SEN_RHS[here->MOS1sNodePrime] + iparmno) -= ( csprm - csprm0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS1sNodePrime] + iparmno) -= ( icsprm - icsprm0) * DELAinv * DvDp; if(here->MOS1dNode != here->MOS1dNodePrime){ *(info->SEN_RHS[here->MOS1dNode] + iparmno) -= ( cd - cd0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS1dNode] + iparmno) -= ( icd - icd0) * DELAinv * DvDp; } *(info->SEN_RHS[here->MOS1dNodePrime] + iparmno) -= ( cdprm - cdprm0) * DELAinv * DvDp; *(info->SEN_iRHS[here->MOS1dNodePrime] + iparmno) -= ( icdprm - icdprm0) * DELAinv * DvDp; #ifdef SENSDEBUG printf("after loading\n"); printf("DvDp = %.5e , DELAinv = %.5e ,flag = %d ,", DvDp,DELAinv,flag); printf("iparmno = %d,senparmno = %d\n", iparmno,here->MOS1senParmNo); printf("A0 = %.5e , Apert = %.5e ,CONSTvt = %.5e \n", A0,Apert,here->MOS1tVto); printf("senb = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS1bNode] + iparmno), *(info->SEN_iRHS[here->MOS1bNode] + iparmno)); printf("seng = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS1gNode] + iparmno), *(info->SEN_iRHS[here->MOS1gNode] + iparmno)); printf("sens = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS1sNode] + iparmno), *(info->SEN_iRHS[here->MOS1sNode] + iparmno)); printf("sensprm = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS1sNodePrime] + iparmno), *(info->SEN_iRHS[here->MOS1sNodePrime] + iparmno)); printf("send = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS1dNode] + iparmno), *(info->SEN_iRHS[here->MOS1dNode] + iparmno)); printf("sendprm = %.7e + j%.7e ", *(info->SEN_RHS[here->MOS1dNodePrime] + iparmno), *(info->SEN_iRHS[here->MOS1dNodePrime] + iparmno)); #endif /* SENSDEBUG */ } switch(flag){ case 1: goto pertvbd ; case 2: goto pertvgb ; case 3: goto pertl ; case 4: goto pertw ; case 5: break; } next: ; /* put the unperturbed values back into the state vector */ for(i=0; i <= 16; i++) *(ckt->CKTstate0 + here->MOS1states + i) = *(SaveState + i); here->MOS1sourceConductance = *(SaveState + 17) ; here->MOS1drainConductance = *(SaveState + 18) ; here->MOS1cd = *(SaveState + 19) ; here->MOS1cbs = *(SaveState + 20) ; here->MOS1cbd = *(SaveState + 21) ; here->MOS1gmbs = *(SaveState + 22) ; here->MOS1gm = *(SaveState + 23) ; here->MOS1gds = *(SaveState + 24) ; here->MOS1gbd = *(SaveState + 25) ; here->MOS1gbs = *(SaveState + 26) ; here->MOS1capbd = *(SaveState + 27) ; here->MOS1capbs = *(SaveState + 28) ; here->MOS1Cbd = *(SaveState + 29) ; here->MOS1Cbdsw = *(SaveState + 30) ; here->MOS1Cbs = *(SaveState + 31) ; here->MOS1Cbssw = *(SaveState + 32) ; here->MOS1f2d = *(SaveState + 33) ; here->MOS1f3d = *(SaveState + 34) ; here->MOS1f4d = *(SaveState + 35) ; here->MOS1f2s = *(SaveState + 36) ; here->MOS1f3s = *(SaveState + 37) ; here->MOS1f4s = *(SaveState + 38) ; here->MOS1cgs = *(SaveState + 39) ; here->MOS1cgd = *(SaveState + 40) ; here->MOS1cgb = *(SaveState + 41) ; here->MOS1vdsat = *(SaveState + 42) ; here->MOS1von = *(SaveState + 43) ; here->MOS1mode = save_mode ; here->MOS1senPertFlag = OFF; } } info->SENstatus = NORMAL; #ifdef SENSDEBUG printf("MOS1senacload end\n"); #endif /* SENSDEBUG */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos1/mos1dist.c0000644000175000017500000007716713546075722021773 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos1defs.h" #include "ngspice/sperror.h" #include "ngspice/distodef.h" #include "ngspice/suffix.h" int MOS1disto(int mode, GENmodel *genmodel, CKTcircuit *ckt) /* assuming here that ckt->CKTomega has been initialised to * the correct value */ { MOS1model *model = (MOS1model *) genmodel; DISTOAN* job = (DISTOAN*) ckt->CKTcurJob; DpassStr pass; double r1h1x,i1h1x; double r1h1y,i1h1y; double r1h1z, i1h1z; double r1h2x, i1h2x; double r1h2y, i1h2y; double r1h2z, i1h2z; double r1hm2x,i1hm2x; double r1hm2y,i1hm2y; double r1hm2z, i1hm2z; double r2h11x,i2h11x; double r2h11y,i2h11y; double r2h11z, i2h11z; double r2h1m2x,i2h1m2x; double r2h1m2y,i2h1m2y; double r2h1m2z, i2h1m2z; double temp, itemp; MOS1instance *here; if (mode == D_SETUP) return(MOS1dSetup(genmodel,ckt)); if ((mode == D_TWOF1) || (mode == D_THRF1) || (mode == D_F1PF2) || (mode == D_F1MF2) || (mode == D_2F1MF2)) { /* loop through all the MOS1 models */ for( ; model != NULL; model = MOS1nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS1instances(model); here != NULL ; here=MOS1nextInstance(here)) { /* loading starts here */ switch (mode) { case D_TWOF1: /* x = vgs, y = vbs z = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MOS1gNode)) - *(job->r1H1ptr + (here->MOS1sNodePrime)); i1h1x = *(job->i1H1ptr + (here->MOS1gNode)) - *(job->i1H1ptr + (here->MOS1sNodePrime)); r1h1y = *(job->r1H1ptr + (here->MOS1bNode)) - *(job->r1H1ptr + (here->MOS1sNodePrime)); i1h1y = *(job->i1H1ptr + (here->MOS1bNode)) - *(job->i1H1ptr + (here->MOS1sNodePrime)); r1h1z = *(job->r1H1ptr + (here->MOS1dNodePrime)) - *(job->r1H1ptr + (here->MOS1sNodePrime)); i1h1z = *(job->i1H1ptr + (here->MOS1dNodePrime)) - *(job->i1H1ptr + (here->MOS1sNodePrime)); /* loading starts here */ /* loading cdrain term */ temp = DFn2F1(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z); itemp = DFi2F1(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z); *(ckt->CKTrhs + (here->MOS1dNodePrime)) -= temp; *(ckt->CKTirhs + (here->MOS1dNodePrime)) -= itemp; *(ckt->CKTrhs + (here->MOS1sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1sNodePrime)) += itemp; /* cdrain term over */ /* loading gbs term */ temp = D1n2F1(here->gbs2, r1h1y, i1h1y); itemp = D1i2F1(here->gbs2, r1h1y, i1h1y); *(ckt->CKTrhs + (here->MOS1bNode)) -= temp; *(ckt->CKTirhs + (here->MOS1bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1sNodePrime)) += itemp; /* gbs over */ /* loading gbd term */ temp = D1n2F1(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z); itemp = D1i2F1(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z); *(ckt->CKTrhs + (here->MOS1bNode)) -= temp; *(ckt->CKTirhs + (here->MOS1bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1dNodePrime)) += itemp; /* gbd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1i2F1(here->capgs2, r1h1x, i1h1x); itemp = ckt->CKTomega * D1n2F1(here->capgs2, r1h1x, i1h1x); *(ckt->CKTrhs + (here->MOS1gNode)) -= temp; *(ckt->CKTirhs + (here->MOS1gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1sNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1i2F1(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z); itemp = ckt->CKTomega * D1n2F1(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z); *(ckt->CKTrhs + (here->MOS1gNode)) -= temp; *(ckt->CKTirhs + (here->MOS1gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1dNodePrime)) += itemp; /* capgd over */ /* loading capgb term */ temp = -ckt->CKTomega * D1i2F1(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y); itemp = ckt->CKTomega * D1n2F1(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y); *(ckt->CKTrhs + (here->MOS1gNode)) -= temp; *(ckt->CKTirhs + (here->MOS1gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1bNode)) += temp; *(ckt->CKTirhs + (here->MOS1bNode)) += itemp; /* capgb over */ /* loading capbs term */ temp = -ckt->CKTomega * D1i2F1(here->capbs2, r1h1y, i1h1y); itemp = ckt->CKTomega * D1n2F1(here->capbs2, r1h1y, i1h1y); *(ckt->CKTrhs + (here->MOS1bNode)) -= temp; *(ckt->CKTirhs + (here->MOS1bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1sNodePrime)) += itemp; /* capbs over */ /* loading capbd term */ temp = -ckt->CKTomega * D1i2F1(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z); itemp = ckt->CKTomega * D1n2F1(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z); *(ckt->CKTrhs + (here->MOS1bNode)) -= temp; *(ckt->CKTirhs + (here->MOS1bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1dNodePrime)) += itemp; /* capbd over */ /* all done */ break; case D_THRF1: /* x = vgs, y = vbs z = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MOS1gNode)) - *(job->r1H1ptr + (here->MOS1sNodePrime)); i1h1x = *(job->i1H1ptr + (here->MOS1gNode)) - *(job->i1H1ptr + (here->MOS1sNodePrime)); r1h1y = *(job->r1H1ptr + (here->MOS1bNode)) - *(job->r1H1ptr + (here->MOS1sNodePrime)); i1h1y = *(job->i1H1ptr + (here->MOS1bNode)) - *(job->i1H1ptr + (here->MOS1sNodePrime)); r1h1z = *(job->r1H1ptr + (here->MOS1dNodePrime)) - *(job->r1H1ptr + (here->MOS1sNodePrime)); i1h1z = *(job->i1H1ptr + (here->MOS1dNodePrime)) - *(job->i1H1ptr + (here->MOS1sNodePrime)); r2h11x = *(job->r2H11ptr + (here->MOS1gNode)) - *(job->r2H11ptr + (here->MOS1sNodePrime)); i2h11x = *(job->i2H11ptr + (here->MOS1gNode)) - *(job->i2H11ptr + (here->MOS1sNodePrime)); r2h11y = *(job->r2H11ptr + (here->MOS1bNode)) - *(job->r2H11ptr + (here->MOS1sNodePrime)); i2h11y = *(job->i2H11ptr + (here->MOS1bNode)) - *(job->i2H11ptr + (here->MOS1sNodePrime)); r2h11z = *(job->r2H11ptr + (here->MOS1dNodePrime)) - *(job->r2H11ptr + (here->MOS1sNodePrime)); i2h11z = *(job->i2H11ptr + (here->MOS1dNodePrime)) - *(job->i2H11ptr + (here->MOS1sNodePrime)); /* loading starts here */ /* loading cdrain term */ temp = DFn3F1(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, here->cdr_x3, here->cdr_y3, here->cdr_z3, here->cdr_x2y, here->cdr_x2z, here->cdr_xy2, here->cdr_y2z, here->cdr_xz2, here->cdr_yz2, here->cdr_xyz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r2h11x, i2h11x, r2h11y, i2h11y, r2h11z, i2h11z); itemp = DFi3F1(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, here->cdr_x3, here->cdr_y3, here->cdr_z3, here->cdr_x2y, here->cdr_x2z, here->cdr_xy2, here->cdr_y2z, here->cdr_xz2, here->cdr_yz2, here->cdr_xyz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r2h11x, i2h11x, r2h11y, i2h11y, r2h11z, i2h11z); *(ckt->CKTrhs + (here->MOS1dNodePrime)) -= temp; *(ckt->CKTirhs + (here->MOS1dNodePrime)) -= itemp; *(ckt->CKTrhs + (here->MOS1sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1sNodePrime)) += itemp; /* cdrain term over */ /* loading gbs term */ temp = D1n3F1(here->gbs2, here->gbs3, r1h1y, i1h1y, r2h11y, i2h11y); itemp = D1i3F1(here->gbs2, here->gbs3, r1h1y, i1h1y, r2h11y, i2h11y); *(ckt->CKTrhs + (here->MOS1bNode)) -= temp; *(ckt->CKTirhs + (here->MOS1bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1sNodePrime)) += itemp; /* gbs over */ /* loading gbd term */ temp = D1n3F1(here->gbd2, here->gbd3, r1h1y - r1h1z, i1h1y - i1h1z, r2h11y - r2h11z, i2h11y - i2h11z); itemp = D1i3F1(here->gbd2, here->gbd3, r1h1y - r1h1z, i1h1y - i1h1z, r2h11y - r2h11z, i2h11y - i2h11z); *(ckt->CKTrhs + (here->MOS1bNode)) -= temp; *(ckt->CKTirhs + (here->MOS1bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1dNodePrime)) += itemp; /* gbd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1i3F1(here->capgs2, here->capgs3, r1h1x, i1h1x, r2h11x, i2h11x); itemp = ckt->CKTomega * D1n3F1(here->capgs2, here->capgs3, r1h1x, i1h1x, r2h11x, i2h11x); *(ckt->CKTrhs + (here->MOS1gNode)) -= temp; *(ckt->CKTirhs + (here->MOS1gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1sNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1i3F1(here->capgd2, here->capgd3, r1h1x - r1h1z, i1h1x - i1h1z, r2h11x - r2h11z, i2h11x - i2h11z); itemp = ckt->CKTomega * D1n3F1(here->capgd2, here->capgd3, r1h1x - r1h1z, i1h1x - i1h1z, r2h11x - r2h11z, i2h11x - i2h11z); *(ckt->CKTrhs + (here->MOS1gNode)) -= temp; *(ckt->CKTirhs + (here->MOS1gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1dNodePrime)) += itemp; /* capgd over */ /* loading capgb term */ temp = -ckt->CKTomega * D1i3F1(here->capgb2, here->capgb3, r1h1x - r1h1y, i1h1x - i1h1y, r2h11x - r2h11y, i2h11x - i2h11y); itemp = ckt->CKTomega * D1n3F1(here->capgb2, here->capgb3, r1h1x - r1h1y, i1h1x - i1h1y, r2h11x - r2h11y, i2h11x - i2h11y); *(ckt->CKTrhs + (here->MOS1gNode)) -= temp; *(ckt->CKTirhs + (here->MOS1gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1bNode)) += temp; *(ckt->CKTirhs + (here->MOS1bNode)) += itemp; /* capgb over */ /* loading capbs term */ temp = -ckt->CKTomega * D1i3F1(here->capbs2, here->capbs3, r1h1y, i1h1y, r2h11y, i2h11y); itemp = ckt->CKTomega * D1n3F1(here->capbs2, here->capbs3, r1h1y, i1h1y, r2h11y, i2h11y); *(ckt->CKTrhs + (here->MOS1bNode)) -= temp; *(ckt->CKTirhs + (here->MOS1bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1sNodePrime)) += itemp; /* capbs over */ /* loading capbd term */ temp = -ckt->CKTomega * D1i3F1(here->capbd2, here->capbd3, r1h1y - r1h1z, i1h1y - i1h1z, r2h11y - r2h11z, i2h11y - i2h11z); itemp = ckt->CKTomega * D1n3F1(here->capbd2, here->capbd3, r1h1y - r1h1z, i1h1y - i1h1z, r2h11y - r2h11z, i2h11y - i2h11z); *(ckt->CKTrhs + (here->MOS1bNode)) -= temp; *(ckt->CKTirhs + (here->MOS1bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1dNodePrime)) += itemp; /* capbd over */ /* all done */ break; case D_F1PF2: /* x = vgs, y = vbs z = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MOS1gNode)) - *(job->r1H1ptr + (here->MOS1sNodePrime)); i1h1x = *(job->i1H1ptr + (here->MOS1gNode)) - *(job->i1H1ptr + (here->MOS1sNodePrime)); r1h1y = *(job->r1H1ptr + (here->MOS1bNode)) - *(job->r1H1ptr + (here->MOS1sNodePrime)); i1h1y = *(job->i1H1ptr + (here->MOS1bNode)) - *(job->i1H1ptr + (here->MOS1sNodePrime)); r1h1z = *(job->r1H1ptr + (here->MOS1dNodePrime)) - *(job->r1H1ptr + (here->MOS1sNodePrime)); i1h1z = *(job->i1H1ptr + (here->MOS1dNodePrime)) - *(job->i1H1ptr + (here->MOS1sNodePrime)); r1h2x = *(job->r1H2ptr + (here->MOS1gNode)) - *(job->r1H2ptr + (here->MOS1sNodePrime)); i1h2x = *(job->i1H2ptr + (here->MOS1gNode)) - *(job->i1H2ptr + (here->MOS1sNodePrime)); r1h2y = *(job->r1H2ptr + (here->MOS1bNode)) - *(job->r1H2ptr + (here->MOS1sNodePrime)); i1h2y = *(job->i1H2ptr + (here->MOS1bNode)) - *(job->i1H2ptr + (here->MOS1sNodePrime)); r1h2z = *(job->r1H2ptr + (here->MOS1dNodePrime)) - *(job->r1H2ptr + (here->MOS1sNodePrime)); i1h2z = *(job->i1H2ptr + (here->MOS1dNodePrime)) - *(job->i1H2ptr + (here->MOS1sNodePrime)); /* loading starts here */ /* loading cdrain term */ temp = DFnF12(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1h2x, i1h2x, r1h2y, i1h2y, r1h2z, i1h2z); itemp = DFiF12(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1h2x, i1h2x, r1h2y, i1h2y, r1h2z, i1h2z); *(ckt->CKTrhs + (here->MOS1dNodePrime)) -= temp; *(ckt->CKTirhs + (here->MOS1dNodePrime)) -= itemp; *(ckt->CKTrhs + (here->MOS1sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1sNodePrime)) += itemp; /* cdrain term over */ /* loading gbs term */ temp = D1nF12(here->gbs2, r1h1y, i1h1y, r1h2y, i1h2y); itemp = D1iF12(here->gbs2, r1h1y, i1h1y, r1h2y, i1h2y); *(ckt->CKTrhs + (here->MOS1bNode)) -= temp; *(ckt->CKTirhs + (here->MOS1bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1sNodePrime)) += itemp; /* gbs over */ /* loading gbd term */ temp = D1nF12(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1h2y - r1h2z, i1h2y - i1h2z); itemp = D1iF12(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1h2y - r1h2z, i1h2y - i1h2z); *(ckt->CKTrhs + (here->MOS1bNode)) -= temp; *(ckt->CKTirhs + (here->MOS1bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1dNodePrime)) += itemp; /* gbd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1iF12(here->capgs2, r1h1x, i1h1x, r1h2x, i1h2x); itemp = ckt->CKTomega * D1nF12(here->capgs2, r1h1x, i1h1x, r1h2x, i1h2x); *(ckt->CKTrhs + (here->MOS1gNode)) -= temp; *(ckt->CKTirhs + (here->MOS1gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1sNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1iF12(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z, r1h2x - r1h2z, i1h2x - i1h2z); itemp = ckt->CKTomega * D1nF12(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z, r1h2x - r1h2z, i1h2x - i1h2z); *(ckt->CKTrhs + (here->MOS1gNode)) -= temp; *(ckt->CKTirhs + (here->MOS1gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1dNodePrime)) += itemp; /* capgd over */ /* loading capgb term */ temp = -ckt->CKTomega * D1iF12(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y, r1h2x - r1h2y, i1h2x - i1h2y); itemp = ckt->CKTomega * D1nF12(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y, r1h2x - r1h2y, i1h2x - i1h2y); *(ckt->CKTrhs + (here->MOS1gNode)) -= temp; *(ckt->CKTirhs + (here->MOS1gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1bNode)) += temp; *(ckt->CKTirhs + (here->MOS1bNode)) += itemp; /* capgb over */ /* loading capbs term */ temp = -ckt->CKTomega * D1iF12(here->capbs2, r1h1y, i1h1y, r1h2y, i1h2y); itemp = ckt->CKTomega * D1nF12(here->capbs2, r1h1y, i1h1y, r1h2y, i1h2y); *(ckt->CKTrhs + (here->MOS1bNode)) -= temp; *(ckt->CKTirhs + (here->MOS1bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1sNodePrime)) += itemp; /* capbs over */ /* loading capbd term */ temp = -ckt->CKTomega * D1iF12(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1h2y - r1h2z, i1h2y - i1h2z); itemp = ckt->CKTomega * D1nF12(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1h2y - r1h2z, i1h2y - i1h2z); *(ckt->CKTrhs + (here->MOS1bNode)) -= temp; *(ckt->CKTirhs + (here->MOS1bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1dNodePrime)) += itemp; /* capbd over */ /* all done */ break; case D_F1MF2: /* x = vgs, y = vbs z = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MOS1gNode)) - *(job->r1H1ptr + (here->MOS1sNodePrime)); i1h1x = *(job->i1H1ptr + (here->MOS1gNode)) - *(job->i1H1ptr + (here->MOS1sNodePrime)); r1h1y = *(job->r1H1ptr + (here->MOS1bNode)) - *(job->r1H1ptr + (here->MOS1sNodePrime)); i1h1y = *(job->i1H1ptr + (here->MOS1bNode)) - *(job->i1H1ptr + (here->MOS1sNodePrime)); r1h1z = *(job->r1H1ptr + (here->MOS1dNodePrime)) - *(job->r1H1ptr + (here->MOS1sNodePrime)); i1h1z = *(job->i1H1ptr + (here->MOS1dNodePrime)) - *(job->i1H1ptr + (here->MOS1sNodePrime)); r1hm2x = *(job->r1H2ptr + (here->MOS1gNode)) - *(job->r1H2ptr + (here->MOS1sNodePrime)); i1hm2x = -(*(job->i1H2ptr + (here->MOS1gNode)) - *(job->i1H2ptr + (here->MOS1sNodePrime))); r1hm2y = *(job->r1H2ptr + (here->MOS1bNode)) - *(job->r1H2ptr + (here->MOS1sNodePrime)); i1hm2y = -(*(job->i1H2ptr + (here->MOS1bNode)) - *(job->i1H2ptr + (here->MOS1sNodePrime))); r1hm2z = *(job->r1H2ptr + (here->MOS1dNodePrime)) - *(job->r1H2ptr + (here->MOS1sNodePrime)); i1hm2z = -(*(job->i1H2ptr + (here->MOS1dNodePrime)) - *(job->i1H2ptr + (here->MOS1sNodePrime))); /* loading starts here */ /* loading cdrain term */ temp = DFnF12(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1hm2x, i1hm2x, r1hm2y, i1hm2y, r1hm2z, i1hm2z); itemp = DFiF12(here->cdr_x2, here->cdr_y2, here->cdr_z2, here->cdr_xy, here->cdr_yz, here->cdr_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1hm2x, i1hm2x, r1hm2y, i1hm2y, r1hm2z, i1hm2z); *(ckt->CKTrhs + (here->MOS1dNodePrime)) -= temp; *(ckt->CKTirhs + (here->MOS1dNodePrime)) -= itemp; *(ckt->CKTrhs + (here->MOS1sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1sNodePrime)) += itemp; /* cdrain term over */ /* loading gbs term */ temp = D1nF12(here->gbs2, r1h1y, i1h1y, r1hm2y, i1hm2y); itemp = D1iF12(here->gbs2, r1h1y, i1h1y, r1hm2y, i1hm2y); *(ckt->CKTrhs + (here->MOS1bNode)) -= temp; *(ckt->CKTirhs + (here->MOS1bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1sNodePrime)) += itemp; /* gbs over */ /* loading gbd term */ temp = D1nF12(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z); itemp = D1iF12(here->gbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z); *(ckt->CKTrhs + (here->MOS1bNode)) -= temp; *(ckt->CKTirhs + (here->MOS1bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1dNodePrime)) += itemp; /* gbd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1iF12(here->capgs2, r1h1x, i1h1x, r1hm2x, i1hm2x); itemp = ckt->CKTomega * D1nF12(here->capgs2, r1h1x, i1h1x, r1hm2x, i1hm2x); *(ckt->CKTrhs + (here->MOS1gNode)) -= temp; *(ckt->CKTirhs + (here->MOS1gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1sNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1iF12(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z, r1hm2x - r1hm2z, i1hm2x - i1hm2z); itemp = ckt->CKTomega * D1nF12(here->capgd2, r1h1x - r1h1z, i1h1x - i1h1z, r1hm2x - r1hm2z, i1hm2x - i1hm2z); *(ckt->CKTrhs + (here->MOS1gNode)) -= temp; *(ckt->CKTirhs + (here->MOS1gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1dNodePrime)) += itemp; /* capgd over */ /* loading capgb term */ temp = -ckt->CKTomega * D1iF12(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y); itemp = ckt->CKTomega * D1nF12(here->capgb2, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y); *(ckt->CKTrhs + (here->MOS1gNode)) -= temp; *(ckt->CKTirhs + (here->MOS1gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1bNode)) += temp; *(ckt->CKTirhs + (here->MOS1bNode)) += itemp; /* capgb over */ /* loading capbs term */ temp = -ckt->CKTomega * D1iF12(here->capbs2, r1h1y, i1h1y, r1hm2y, i1hm2y); itemp = ckt->CKTomega * D1nF12(here->capbs2, r1h1y, i1h1y, r1hm2y, i1hm2y); *(ckt->CKTrhs + (here->MOS1bNode)) -= temp; *(ckt->CKTirhs + (here->MOS1bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1sNodePrime)) += itemp; /* capbs over */ /* loading capbd term */ temp = -ckt->CKTomega * D1iF12(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z); itemp = ckt->CKTomega * D1nF12(here->capbd2, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z); *(ckt->CKTrhs + (here->MOS1bNode)) -= temp; *(ckt->CKTirhs + (here->MOS1bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1dNodePrime)) += itemp; /* capbd over */ /* all done */ break; case D_2F1MF2: /* x = vgs, y = vbs z = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->MOS1gNode)) - *(job->r1H1ptr + (here->MOS1sNodePrime)); i1h1x = *(job->i1H1ptr + (here->MOS1gNode)) - *(job->i1H1ptr + (here->MOS1sNodePrime)); r1h1y = *(job->r1H1ptr + (here->MOS1bNode)) - *(job->r1H1ptr + (here->MOS1sNodePrime)); i1h1y = *(job->i1H1ptr + (here->MOS1bNode)) - *(job->i1H1ptr + (here->MOS1sNodePrime)); r1h1z = *(job->r1H1ptr + (here->MOS1dNodePrime)) - *(job->r1H1ptr + (here->MOS1sNodePrime)); i1h1z = *(job->i1H1ptr + (here->MOS1dNodePrime)) - *(job->i1H1ptr + (here->MOS1sNodePrime)); r1hm2x = *(job->r1H2ptr + (here->MOS1gNode)) - *(job->r1H2ptr + (here->MOS1sNodePrime)); i1hm2x = -(*(job->i1H2ptr + (here->MOS1gNode)) - *(job->i1H2ptr + (here->MOS1sNodePrime))); r1hm2y = *(job->r1H2ptr + (here->MOS1bNode)) - *(job->r1H2ptr + (here->MOS1sNodePrime)); i1hm2y = -(*(job->i1H2ptr + (here->MOS1bNode)) - *(job->i1H2ptr + (here->MOS1sNodePrime))); r1hm2z = *(job->r1H2ptr + (here->MOS1dNodePrime)) - *(job->r1H2ptr + (here->MOS1sNodePrime)); i1hm2z = -(*(job->i1H2ptr + (here->MOS1dNodePrime)) - *(job->i1H2ptr + (here->MOS1sNodePrime))); r2h11x = *(job->r1H1ptr + (here->MOS1gNode)) - *(job->r1H1ptr + (here->MOS1sNodePrime)); i2h11x = *(job->i1H1ptr + (here->MOS1gNode)) - *(job->i1H1ptr + (here->MOS1sNodePrime)); r2h11y = *(job->r1H1ptr + (here->MOS1bNode)) - *(job->r1H1ptr + (here->MOS1sNodePrime)); i2h11y = *(job->i1H1ptr + (here->MOS1bNode)) - *(job->i1H1ptr + (here->MOS1sNodePrime)); r2h11z = *(job->r1H1ptr + (here->MOS1dNodePrime)) - *(job->r1H1ptr + (here->MOS1sNodePrime)); i2h11z = *(job->i1H1ptr + (here->MOS1dNodePrime)) - *(job->i1H1ptr + (here->MOS1sNodePrime)); r2h1m2x = *(job->r2H1m2ptr + (here->MOS1gNode)) - *(job->r2H1m2ptr + (here->MOS1sNodePrime)); i2h1m2x = *(job->i2H1m2ptr + (here->MOS1gNode)) - *(job->i2H1m2ptr + (here->MOS1sNodePrime)); r2h1m2y = *(job->r2H1m2ptr + (here->MOS1bNode)) - *(job->r2H1m2ptr + (here->MOS1sNodePrime)); i2h1m2y = *(job->i2H1m2ptr + (here->MOS1bNode)) - *(job->i2H1m2ptr + (here->MOS1sNodePrime)); r2h1m2z = *(job->r2H1m2ptr + (here->MOS1dNodePrime)) - *(job->r2H1m2ptr + (here->MOS1sNodePrime)); i2h1m2z = *(job->i2H1m2ptr + (here->MOS1dNodePrime)) - *(job->i2H1m2ptr + (here->MOS1sNodePrime)); /* loading starts here */ /* loading cdrain term */ pass.cxx = here->cdr_x2; pass.cyy = here->cdr_y2; pass.czz = here->cdr_z2; pass.cxy = here->cdr_xy; pass.cyz = here->cdr_yz; pass.cxz = here->cdr_xz; pass.cxxx = here->cdr_x3; pass.cyyy = here->cdr_y3; pass.czzz = here->cdr_z3; pass.cxxy = here->cdr_x2y; pass.cxxz = here->cdr_x2z; pass.cxyy = here->cdr_xy2; pass.cyyz = here->cdr_y2z; pass.cxzz = here->cdr_xz2; pass.cyzz = here->cdr_yz2; pass.cxyz = here->cdr_xyz; pass.r1h1x = r1h1x; pass.i1h1x = i1h1x; pass.r1h1y = r1h1y; pass.i1h1y = i1h1y; pass.r1h1z = r1h1z; pass.i1h1z = i1h1z; pass.r1h2x = r1hm2x; pass.i1h2x = i1hm2x; pass.r1h2y = r1hm2y; pass.i1h2y = i1hm2y; pass.r1h2z = r1hm2z; pass.i1h2z = i1hm2z; pass.r2h11x = r2h11x; pass.i2h11x = i2h11x; pass.r2h11y = r2h11y; pass.i2h11y = i2h11y; pass.r2h11z = r2h11z; pass.i2h11z = i2h11z; pass.h2f1f2x = r2h1m2x; pass.ih2f1f2x = i2h1m2x; pass.h2f1f2y = r2h1m2y; pass.ih2f1f2y = i2h1m2y; pass.h2f1f2z = r2h1m2z; pass.ih2f1f2z = i2h1m2z; temp = DFn2F12(&pass); itemp = DFi2F12(&pass); *(ckt->CKTrhs + (here->MOS1dNodePrime)) -= temp; *(ckt->CKTirhs + (here->MOS1dNodePrime)) -= itemp; *(ckt->CKTrhs + (here->MOS1sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1sNodePrime)) += itemp; /* cdrain term over */ /* loading gbs term */ temp = D1n2F12(here->gbs2, here->gbs3, r1h1y, i1h1y, r1hm2y, i1hm2y, r2h11y, i2h11y, r2h1m2y, i2h1m2y); itemp = D1i2F12(here->gbs2, here->gbs3, r1h1y, i1h1y, r1hm2y, i1hm2y, r2h11y, i2h11y, r2h1m2y, i2h1m2y); *(ckt->CKTrhs + (here->MOS1bNode)) -= temp; *(ckt->CKTirhs + (here->MOS1bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1sNodePrime)) += itemp; /* gbs over */ /* loading gbd term */ temp = D1n2F12(here->gbd2, here->gbd3, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z, r2h11y - r2h11z, i2h11y - i2h11z, r2h1m2y - r2h1m2z, i2h1m2y - i2h1m2z); itemp = D1i2F12(here->gbd2, here->gbd3, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z, r2h11y - r2h11z, i2h11y - i2h11z, r2h1m2y - r2h1m2z, i2h1m2y - i2h1m2z); *(ckt->CKTrhs + (here->MOS1bNode)) -= temp; *(ckt->CKTirhs + (here->MOS1bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1dNodePrime)) += itemp; /* gbd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1i2F12(here->capgs2, here->capgs3, r1h1x, i1h1x, r1hm2x, i1hm2x, r2h11x, i2h11x, r2h1m2x, i2h1m2x); itemp = ckt->CKTomega * D1n2F12(here->capgs2, here->capgs3, r1h1x, i1h1x, r1hm2x, i1hm2x, r2h11x, i2h11x, r2h1m2x, i2h1m2x); *(ckt->CKTrhs + (here->MOS1gNode)) -= temp; *(ckt->CKTirhs + (here->MOS1gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1sNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1i2F12(here->capgd2, here->capgd3, r1h1x - r1h1z, i1h1x - i1h1z, r1hm2x - r1hm2z, i1hm2x - i1hm2z, r2h11x - r2h11z, i2h11x - i2h11z, r2h1m2x - r2h1m2z, i2h1m2x - i2h1m2z); itemp = ckt->CKTomega * D1n2F12(here->capgd2, here->capgd3, r1h1x - r1h1z, i1h1x - i1h1z, r1hm2x - r1hm2z, i1hm2x - i1hm2z, r2h11x - r2h11z, i2h11x - i2h11z, r2h1m2x - r2h1m2z, i2h1m2x - i2h1m2z); *(ckt->CKTrhs + (here->MOS1gNode)) -= temp; *(ckt->CKTirhs + (here->MOS1gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1dNodePrime)) += itemp; /* capgd over */ /* loading capgb term */ temp = -ckt->CKTomega * D1i2F12(here->capgb2, here->capgb3, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y, r2h11x - r2h11y, i2h11x - i2h11y, r2h1m2x - r2h1m2y, i2h1m2x - i2h1m2y); itemp = ckt->CKTomega * D1n2F12(here->capgb2, here->capgb3, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y, r2h11x - r2h11y, i2h11x - i2h11y, r2h1m2x - r2h1m2y, i2h1m2x - i2h1m2y); *(ckt->CKTrhs + (here->MOS1gNode)) -= temp; *(ckt->CKTirhs + (here->MOS1gNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1bNode)) += temp; *(ckt->CKTirhs + (here->MOS1bNode)) += itemp; /* capgb over */ /* loading capbs term */ temp = -ckt->CKTomega * D1i2F12(here->capbs2, here->capbs3, r1h1y, i1h1y, r1hm2y, i1hm2y, r2h11y, i2h11y, r2h1m2y, i2h1m2y); itemp = ckt->CKTomega * D1n2F12(here->capbs2, here->capbs3, r1h1y, i1h1y, r1hm2y, i1hm2y, r2h11y, i2h11y, r2h1m2y, i2h1m2y); *(ckt->CKTrhs + (here->MOS1bNode)) -= temp; *(ckt->CKTirhs + (here->MOS1bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1sNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1sNodePrime)) += itemp; /* capbs over */ /* loading capbd term */ temp = -ckt->CKTomega * D1i2F12(here->capbd2, here->capbd3, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z, r2h11y - r2h11z, i2h11y - i2h11z, r2h1m2y - r2h1m2z, i2h1m2y - i2h1m2z); itemp = ckt->CKTomega * D1n2F12(here->capbd2, here->capbd3, r1h1y - r1h1z, i1h1y - i1h1z, r1hm2y - r1hm2z, i1hm2y - i1hm2z, r2h11y - r2h11z, i2h11y - i2h11z, r2h1m2y - r2h1m2z, i2h1m2y - i2h1m2z); *(ckt->CKTrhs + (here->MOS1bNode)) -= temp; *(ckt->CKTirhs + (here->MOS1bNode)) -= itemp; *(ckt->CKTrhs + (here->MOS1dNodePrime)) += temp; *(ckt->CKTirhs + (here->MOS1dNodePrime)) += itemp; /* capbd over */ /* all done */ break; default: ; } } } return(OK); } else return(E_BADPARM); } tmpk8ny_4pz/src/spicelib/devices/mos1/mos1load.c0000644000175000017500000011323613546075722021733 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "mos1defs.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS1load(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current value into the * sparse matrix previously provided */ { MOS1model *model = (MOS1model *) inModel; MOS1instance *here; double Beta; double DrainSatCur; double EffectiveLength; double GateBulkOverlapCap; double GateDrainOverlapCap; double GateSourceOverlapCap; double OxideCap; double SourceSatCur; double cbhat; double cdhat; double cdrain; double cdreq; double ceq; double ceqbd; double ceqbs; double ceqgb; double ceqgd; double ceqgs; double delvbd; double delvbs; double delvds; double delvgd; double delvgs; double evbd; double evbs; double gcgb; double gcgd; double gcgs; double geq; double sargsw; double vbd; double vbs; double vds; double vdsat; double vgb1; double vgb; double vgd1; double vgd; double vgdo; double vgs1; double vgs; double von; double vt; #ifndef PREDICTOR double xfact = 0.0; #endif int xnrm; int xrev; double capgs = 0.0; /* total gate-source capacitance */ double capgd = 0.0; /* total gate-drain capacitance */ double capgb = 0.0; /* total gate-bulk capacitance */ int Check; #ifndef NOBYPASS double tempv; #endif /*NOBYPASS*/ int error; #ifdef CAPBYPASS int senflag; #endif /*CAPBYPASS*/ int SenCond; #ifdef CAPBYPASS senflag = 0; if(ckt->CKTsenInfo && ckt->CKTsenInfo->SENstatus == PERTURBATION && (ckt->CKTsenInfo->SENmode & (ACSEN | TRANSEN))) { senflag = 1; } #endif /* CAPBYPASS */ /* loop through all the MOS1 device models */ for( ; model != NULL; model = MOS1nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS1instances(model); here != NULL ; here=MOS1nextInstance(here)) { vt = CONSTKoverQ * here->MOS1temp; Check=1; if(ckt->CKTsenInfo){ #ifdef SENSDEBUG printf("MOS1load \n"); #endif /* SENSDEBUG */ if((ckt->CKTsenInfo->SENstatus == PERTURBATION)&& (here->MOS1senPertFlag == OFF))continue; } SenCond = ckt->CKTsenInfo && here->MOS1senPertFlag; /* */ /* first, we compute a few useful values - these could be * pre-computed, but for historical reasons are still done * here. They may be moved at the expense of instance size */ EffectiveLength=here->MOS1l - 2*model->MOS1latDiff; if( (here->MOS1tSatCurDens == 0) || (here->MOS1drainArea == 0) || (here->MOS1sourceArea == 0)) { DrainSatCur = here->MOS1m * here->MOS1tSatCur; SourceSatCur = here->MOS1m * here->MOS1tSatCur; } else { DrainSatCur = here->MOS1tSatCurDens * here->MOS1m * here->MOS1drainArea; SourceSatCur = here->MOS1tSatCurDens * here->MOS1m * here->MOS1sourceArea; } GateSourceOverlapCap = model->MOS1gateSourceOverlapCapFactor * here->MOS1m * here->MOS1w; GateDrainOverlapCap = model->MOS1gateDrainOverlapCapFactor * here->MOS1m * here->MOS1w; GateBulkOverlapCap = model->MOS1gateBulkOverlapCapFactor * here->MOS1m * EffectiveLength; Beta = here->MOS1tTransconductance * here->MOS1m * here->MOS1w/EffectiveLength; OxideCap = model->MOS1oxideCapFactor * EffectiveLength * here->MOS1m * here->MOS1w; /* * ok - now to do the start-up operations * * we must get values for vbs, vds, and vgs from somewhere * so we either predict them or recover them from last iteration * These are the two most common cases - either a prediction * step or the general iteration step and they * share some code, so we put them first - others later on */ if(SenCond){ #ifdef SENSDEBUG printf("MOS1senPertFlag = ON \n"); #endif /* SENSDEBUG */ if((ckt->CKTsenInfo->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)) { vgs = *(ckt->CKTstate1 + here->MOS1vgs); vds = *(ckt->CKTstate1 + here->MOS1vds); vbs = *(ckt->CKTstate1 + here->MOS1vbs); vbd = *(ckt->CKTstate1 + here->MOS1vbd); vgb = vgs - vbs; vgd = vgs - vds; } else if (ckt->CKTsenInfo->SENmode == ACSEN){ vgb = model->MOS1type * ( *(ckt->CKTrhsOp+here->MOS1gNode) - *(ckt->CKTrhsOp+here->MOS1bNode)); vbs = *(ckt->CKTstate0 + here->MOS1vbs); vbd = *(ckt->CKTstate0 + here->MOS1vbd); vgd = vgb + vbd ; vgs = vgb + vbs ; vds = vbs - vbd ; } else{ vgs = *(ckt->CKTstate0 + here->MOS1vgs); vds = *(ckt->CKTstate0 + here->MOS1vds); vbs = *(ckt->CKTstate0 + here->MOS1vbs); vbd = *(ckt->CKTstate0 + here->MOS1vbd); vgb = vgs - vbs; vgd = vgs - vds; } #ifdef SENSDEBUG printf(" vbs = %.7e ,vbd = %.7e,vgb = %.7e\n",vbs,vbd,vgb); printf(" vgs = %.7e ,vds = %.7e,vgd = %.7e\n",vgs,vds,vgd); #endif /* SENSDEBUG */ goto next1; } if((ckt->CKTmode & (MODEINITFLOAT | MODEINITPRED | MODEINITSMSIG | MODEINITTRAN)) || ( (ckt->CKTmode & MODEINITFIX) && (!here->MOS1off) ) ) { #ifndef PREDICTOR if(ckt->CKTmode & (MODEINITPRED | MODEINITTRAN) ) { /* predictor step */ xfact=ckt->CKTdelta/ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->MOS1vbs) = *(ckt->CKTstate1 + here->MOS1vbs); vbs = (1+xfact)* (*(ckt->CKTstate1 + here->MOS1vbs)) -(xfact * (*(ckt->CKTstate2 + here->MOS1vbs))); *(ckt->CKTstate0 + here->MOS1vgs) = *(ckt->CKTstate1 + here->MOS1vgs); vgs = (1+xfact)* (*(ckt->CKTstate1 + here->MOS1vgs)) -(xfact * (*(ckt->CKTstate2 + here->MOS1vgs))); *(ckt->CKTstate0 + here->MOS1vds) = *(ckt->CKTstate1 + here->MOS1vds); vds = (1+xfact)* (*(ckt->CKTstate1 + here->MOS1vds)) -(xfact * (*(ckt->CKTstate2 + here->MOS1vds))); *(ckt->CKTstate0 + here->MOS1vbd) = *(ckt->CKTstate0 + here->MOS1vbs)- *(ckt->CKTstate0 + here->MOS1vds); } else { #endif /* PREDICTOR */ /* general iteration */ vbs = model->MOS1type * ( *(ckt->CKTrhsOld+here->MOS1bNode) - *(ckt->CKTrhsOld+here->MOS1sNodePrime)); vgs = model->MOS1type * ( *(ckt->CKTrhsOld+here->MOS1gNode) - *(ckt->CKTrhsOld+here->MOS1sNodePrime)); vds = model->MOS1type * ( *(ckt->CKTrhsOld+here->MOS1dNodePrime) - *(ckt->CKTrhsOld+here->MOS1sNodePrime)); #ifndef PREDICTOR } #endif /* PREDICTOR */ /* now some common crunching for some more useful quantities */ vbd=vbs-vds; vgd=vgs-vds; vgdo = *(ckt->CKTstate0 + here->MOS1vgs) - *(ckt->CKTstate0 + here->MOS1vds); delvbs = vbs - *(ckt->CKTstate0 + here->MOS1vbs); delvbd = vbd - *(ckt->CKTstate0 + here->MOS1vbd); delvgs = vgs - *(ckt->CKTstate0 + here->MOS1vgs); delvds = vds - *(ckt->CKTstate0 + here->MOS1vds); delvgd = vgd-vgdo; /* these are needed for convergence testing */ if (here->MOS1mode >= 0) { cdhat= here->MOS1cd- here->MOS1gbd * delvbd + here->MOS1gmbs * delvbs + here->MOS1gm * delvgs + here->MOS1gds * delvds ; } else { cdhat= here->MOS1cd - ( here->MOS1gbd - here->MOS1gmbs) * delvbd - here->MOS1gm * delvgd + here->MOS1gds * delvds ; } cbhat= here->MOS1cbs + here->MOS1cbd + here->MOS1gbd * delvbd + here->MOS1gbs * delvbs ; /* */ #ifndef NOBYPASS /* now lets see if we can bypass (ugh) */ tempv = (MAX(fabs(cbhat), fabs(here->MOS1cbs + here->MOS1cbd)) + ckt->CKTabstol); if ((!(ckt->CKTmode & (MODEINITPRED|MODEINITTRAN|MODEINITSMSIG))) && (ckt->CKTbypass) && (fabs(cbhat-(here->MOS1cbs + here->MOS1cbd)) < ckt->CKTreltol * tempv) && (fabs(delvbs) < (ckt->CKTreltol * MAX(fabs(vbs), fabs( *(ckt->CKTstate0 + here->MOS1vbs))) + ckt->CKTvoltTol)) && (fabs(delvbd) < (ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0 + here->MOS1vbd))) + ckt->CKTvoltTol)) && (fabs(delvgs) < (ckt->CKTreltol * MAX(fabs(vgs), fabs(*(ckt->CKTstate0 + here->MOS1vgs)))+ ckt->CKTvoltTol)) && (fabs(delvds) < (ckt->CKTreltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0 + here->MOS1vds))) + ckt->CKTvoltTol)) && (fabs(cdhat- here->MOS1cd) < (ckt->CKTreltol * MAX(fabs(cdhat), fabs(here->MOS1cd)) + ckt->CKTabstol))) { /* bypass code */ /* nothing interesting has changed since last * iteration on this device, so we just * copy all the values computed last iteration out * and keep going */ vbs = *(ckt->CKTstate0 + here->MOS1vbs); vbd = *(ckt->CKTstate0 + here->MOS1vbd); vgs = *(ckt->CKTstate0 + here->MOS1vgs); vds = *(ckt->CKTstate0 + here->MOS1vds); vgd = vgs - vds; vgb = vgs - vbs; cdrain = here->MOS1mode * (here->MOS1cd + here->MOS1cbd); if(ckt->CKTmode & (MODETRAN | MODETRANOP)) { capgs = ( *(ckt->CKTstate0+here->MOS1capgs)+ *(ckt->CKTstate1+here->MOS1capgs) + GateSourceOverlapCap ); capgd = ( *(ckt->CKTstate0+here->MOS1capgd)+ *(ckt->CKTstate1+here->MOS1capgd) + GateDrainOverlapCap ); capgb = ( *(ckt->CKTstate0+here->MOS1capgb)+ *(ckt->CKTstate1+here->MOS1capgb) + GateBulkOverlapCap ); if(ckt->CKTsenInfo){ here->MOS1cgs = capgs; here->MOS1cgd = capgd; here->MOS1cgb = capgb; } } goto bypass; } #endif /*NOBYPASS*/ /* */ /* ok - bypass is out, do it the hard way */ von = model->MOS1type * here->MOS1von; #ifndef NODELIMITING /* * limiting * we want to keep device voltages from changing * so fast that the exponentials churn out overflows * and similar rudeness */ if(*(ckt->CKTstate0 + here->MOS1vds) >=0) { vgs = DEVfetlim(vgs,*(ckt->CKTstate0 + here->MOS1vgs) ,von); vds = vgs - vgd; vds = DEVlimvds(vds,*(ckt->CKTstate0 + here->MOS1vds)); vgd = vgs - vds; } else { vgd = DEVfetlim(vgd,vgdo,von); vds = vgs - vgd; if(!(ckt->CKTfixLimit)) { vds = -DEVlimvds(-vds,-(*(ckt->CKTstate0 + here->MOS1vds))); } vgs = vgd + vds; } if(vds >= 0) { vbs = DEVpnjlim(vbs,*(ckt->CKTstate0 + here->MOS1vbs), vt,here->MOS1sourceVcrit,&Check); vbd = vbs-vds; } else { vbd = DEVpnjlim(vbd,*(ckt->CKTstate0 + here->MOS1vbd), vt,here->MOS1drainVcrit,&Check); vbs = vbd + vds; } #endif /*NODELIMITING*/ /* */ } else { /* ok - not one of the simple cases, so we have to * look at all of the possibilities for why we were * called. We still just initialize the three voltages */ if((ckt->CKTmode & MODEINITJCT) && !here->MOS1off) { vds= model->MOS1type * here->MOS1icVDS; vgs= model->MOS1type * here->MOS1icVGS; vbs= model->MOS1type * here->MOS1icVBS; if((vds==0) && (vgs==0) && (vbs==0) && ((ckt->CKTmode & (MODETRAN|MODEDCOP|MODEDCTRANCURVE)) || (!(ckt->CKTmode & MODEUIC)))) { vbs = -1; vgs = model->MOS1type * here->MOS1tVto; vds = 0; } } else { vbs=vgs=vds=0; } } /* */ /* * now all the preliminaries are over - we can start doing the * real work */ vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; /* * bulk-source and bulk-drain diodes * here we just evaluate the ideal diode current and the * corresponding derivative (conductance). */ next1: if(vbs <= -3*vt) { here->MOS1gbs = ckt->CKTgmin; here->MOS1cbs = here->MOS1gbs*vbs-SourceSatCur; } else { evbs = exp(MIN(MAX_EXP_ARG,vbs/vt)); here->MOS1gbs = SourceSatCur*evbs/vt + ckt->CKTgmin; here->MOS1cbs = SourceSatCur*(evbs-1) + ckt->CKTgmin*vbs; } if(vbd <= -3*vt) { here->MOS1gbd = ckt->CKTgmin; here->MOS1cbd = here->MOS1gbd*vbd-DrainSatCur; } else { evbd = exp(MIN(MAX_EXP_ARG,vbd/vt)); here->MOS1gbd = DrainSatCur*evbd/vt + ckt->CKTgmin; here->MOS1cbd = DrainSatCur*(evbd-1) + ckt->CKTgmin*vbd; } /* now to determine whether the user was able to correctly * identify the source and drain of his device */ if(vds >= 0) { /* normal mode */ here->MOS1mode = 1; } else { /* inverse mode */ here->MOS1mode = -1; } /* */ { /* * this block of code evaluates the drain current and its * derivatives using the shichman-hodges model and the * charges associated with the gate, channel and bulk for * mosfets * */ /* the following 4 variables are local to this code block until * it is obvious that they can be made global */ double arg; double betap; double sarg; double vgst; if ((here->MOS1mode==1?vbs:vbd) <= 0 ) { sarg=sqrt(here->MOS1tPhi-(here->MOS1mode==1?vbs:vbd)); } else { sarg=sqrt(here->MOS1tPhi); sarg=sarg-(here->MOS1mode==1?vbs:vbd)/(sarg+sarg); sarg=MAX(0,sarg); } von=(here->MOS1tVbi*model->MOS1type)+model->MOS1gamma*sarg; vgst=(here->MOS1mode==1?vgs:vgd)-von; vdsat=MAX(vgst,0); if (sarg <= 0) { arg=0; } else { arg=model->MOS1gamma/(sarg+sarg); } if (vgst <= 0) { /* * cutoff region */ cdrain=0; here->MOS1gm=0; here->MOS1gds=0; here->MOS1gmbs=0; } else{ /* * saturation region */ betap=Beta*(1+model->MOS1lambda*(vds*here->MOS1mode)); if (vgst <= (vds*here->MOS1mode)){ cdrain=betap*vgst*vgst*.5; here->MOS1gm=betap*vgst; here->MOS1gds=model->MOS1lambda*Beta*vgst*vgst*.5; here->MOS1gmbs=here->MOS1gm*arg; } else { /* * linear region */ cdrain=betap*(vds*here->MOS1mode)* (vgst-.5*(vds*here->MOS1mode)); here->MOS1gm=betap*(vds*here->MOS1mode); here->MOS1gds=betap*(vgst-(vds*here->MOS1mode))+ model->MOS1lambda*Beta* (vds*here->MOS1mode)* (vgst-.5*(vds*here->MOS1mode)); here->MOS1gmbs=here->MOS1gm*arg; } } /* * finished */ } /* */ /* now deal with n vs p polarity */ here->MOS1von = model->MOS1type * von; here->MOS1vdsat = model->MOS1type * vdsat; /* line 490 */ /* * COMPUTE EQUIVALENT DRAIN CURRENT SOURCE */ here->MOS1cd=here->MOS1mode * cdrain - here->MOS1cbd; if (ckt->CKTmode & (MODETRAN | MODETRANOP | MODEINITSMSIG)) { /* * now we do the hard part of the bulk-drain and bulk-source * diode - we evaluate the non-linear capacitance and * charge * * the basic equations are not hard, but the implementation * is somewhat long in an attempt to avoid log/exponential * evaluations */ /* * charge storage elements * *.. bulk-drain and bulk-source depletion capacitances */ #ifdef CAPBYPASS if(((ckt->CKTmode & (MODEINITPRED | MODEINITTRAN) ) || fabs(delvbs) >= ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->MOS1vbs)))+ ckt->CKTvoltTol)|| senflag) #endif /*CAPBYPASS*/ { /* can't bypass the diode capacitance calculations */ if(here->MOS1Cbs != 0 || here->MOS1Cbssw != 0 ) { if (vbs < here->MOS1tDepCap){ const double arg=1-vbs/here->MOS1tBulkPot; double sarg; /* * the following block looks somewhat long and messy, * but since most users use the default grading * coefficients of .5, and sqrt is MUCH faster than an * exp(log()) we use this special case code to buy time. * (as much as 10% of total job time!) */ if(model->MOS1bulkJctBotGradingCoeff == model->MOS1bulkJctSideGradingCoeff) { if(model->MOS1bulkJctBotGradingCoeff == .5) { sarg = sargsw = 1/sqrt(arg); } else { sarg = sargsw = exp(-model->MOS1bulkJctBotGradingCoeff* log(arg)); } } else { if(model->MOS1bulkJctBotGradingCoeff == .5) { sarg = 1/sqrt(arg); } else { sarg = exp(-model->MOS1bulkJctBotGradingCoeff* log(arg)); } if(model->MOS1bulkJctSideGradingCoeff == .5) { sargsw = 1/sqrt(arg); } else { sargsw =exp(-model->MOS1bulkJctSideGradingCoeff* log(arg)); } } *(ckt->CKTstate0 + here->MOS1qbs) = here->MOS1tBulkPot*(here->MOS1Cbs* (1-arg*sarg)/(1-model->MOS1bulkJctBotGradingCoeff) +here->MOS1Cbssw* (1-arg*sargsw)/ (1-model->MOS1bulkJctSideGradingCoeff)); here->MOS1capbs=here->MOS1Cbs*sarg+ here->MOS1Cbssw*sargsw; } else { *(ckt->CKTstate0 + here->MOS1qbs) = here->MOS1f4s + vbs*(here->MOS1f2s+vbs*(here->MOS1f3s/2)); here->MOS1capbs=here->MOS1f2s+here->MOS1f3s*vbs; } } else { *(ckt->CKTstate0 + here->MOS1qbs) = 0; here->MOS1capbs=0; } } #ifdef CAPBYPASS if(((ckt->CKTmode & (MODEINITPRED | MODEINITTRAN) ) || fabs(delvbd) >= ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0+here->MOS1vbd)))+ ckt->CKTvoltTol)|| senflag) #endif /*CAPBYPASS*/ /* can't bypass the diode capacitance calculations */ { if(here->MOS1Cbd != 0 || here->MOS1Cbdsw != 0 ) { if (vbd < here->MOS1tDepCap) { const double arg=1-vbd/here->MOS1tBulkPot; double sarg; /* * the following block looks somewhat long and messy, * but since most users use the default grading * coefficients of .5, and sqrt is MUCH faster than an * exp(log()) we use this special case code to buy time. * (as much as 10% of total job time!) */ if(model->MOS1bulkJctBotGradingCoeff == .5 && model->MOS1bulkJctSideGradingCoeff == .5) { sarg = sargsw = 1/sqrt(arg); } else { if(model->MOS1bulkJctBotGradingCoeff == .5) { sarg = 1/sqrt(arg); } else { sarg = exp(-model->MOS1bulkJctBotGradingCoeff* log(arg)); } if(model->MOS1bulkJctSideGradingCoeff == .5) { sargsw = 1/sqrt(arg); } else { sargsw =exp(-model->MOS1bulkJctSideGradingCoeff* log(arg)); } } *(ckt->CKTstate0 + here->MOS1qbd) = here->MOS1tBulkPot*(here->MOS1Cbd* (1-arg*sarg) /(1-model->MOS1bulkJctBotGradingCoeff) +here->MOS1Cbdsw* (1-arg*sargsw) /(1-model->MOS1bulkJctSideGradingCoeff)); here->MOS1capbd=here->MOS1Cbd*sarg+ here->MOS1Cbdsw*sargsw; } else { *(ckt->CKTstate0 + here->MOS1qbd) = here->MOS1f4d + vbd * (here->MOS1f2d + vbd * here->MOS1f3d/2); here->MOS1capbd=here->MOS1f2d + vbd * here->MOS1f3d; } } else { *(ckt->CKTstate0 + here->MOS1qbd) = 0; here->MOS1capbd = 0; } } /* */ if(SenCond && (ckt->CKTsenInfo->SENmode==TRANSEN)) goto next2; if ( (ckt->CKTmode & MODETRAN) || ( (ckt->CKTmode&MODEINITTRAN) && !(ckt->CKTmode&MODEUIC)) ) { /* (above only excludes tranop, since we're only at this * point if tran or tranop ) */ /* * calculate equivalent conductances and currents for * depletion capacitors */ /* integrate the capacitors and save results */ error = NIintegrate(ckt,&geq,&ceq,here->MOS1capbd, here->MOS1qbd); if(error) return(error); here->MOS1gbd += geq; here->MOS1cbd += *(ckt->CKTstate0 + here->MOS1cqbd); here->MOS1cd -= *(ckt->CKTstate0 + here->MOS1cqbd); error = NIintegrate(ckt,&geq,&ceq,here->MOS1capbs, here->MOS1qbs); if(error) return(error); here->MOS1gbs += geq; here->MOS1cbs += *(ckt->CKTstate0 + here->MOS1cqbs); } } /* */ if(SenCond) goto next2; /* * check convergence */ if ( (here->MOS1off == 0) || (!(ckt->CKTmode & (MODEINITFIX|MODEINITSMSIG))) ){ if (Check == 1) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; } } /* */ /* save things away for next time */ next2: *(ckt->CKTstate0 + here->MOS1vbs) = vbs; *(ckt->CKTstate0 + here->MOS1vbd) = vbd; *(ckt->CKTstate0 + here->MOS1vgs) = vgs; *(ckt->CKTstate0 + here->MOS1vds) = vds; /* */ /* * meyer's capacitor model */ if ( ckt->CKTmode & (MODETRAN | MODETRANOP | MODEINITSMSIG) ) { /* * calculate meyer's capacitors */ /* * new cmeyer - this just evaluates at the current time, * expects you to remember values from previous time * returns 1/2 of non-constant portion of capacitance * you must add in the other half from previous time * and the constant part */ if (here->MOS1mode > 0){ DEVqmeyer (vgs,vgd,vgb,von,vdsat, (ckt->CKTstate0 + here->MOS1capgs), (ckt->CKTstate0 + here->MOS1capgd), (ckt->CKTstate0 + here->MOS1capgb), here->MOS1tPhi,OxideCap); } else { DEVqmeyer (vgd,vgs,vgb,von,vdsat, (ckt->CKTstate0 + here->MOS1capgd), (ckt->CKTstate0 + here->MOS1capgs), (ckt->CKTstate0 + here->MOS1capgb), here->MOS1tPhi,OxideCap); } vgs1 = *(ckt->CKTstate1 + here->MOS1vgs); vgd1 = vgs1 - *(ckt->CKTstate1 + here->MOS1vds); vgb1 = vgs1 - *(ckt->CKTstate1 + here->MOS1vbs); if(ckt->CKTmode & (MODETRANOP|MODEINITSMSIG)) { capgs = 2 * *(ckt->CKTstate0+here->MOS1capgs)+ GateSourceOverlapCap ; capgd = 2 * *(ckt->CKTstate0+here->MOS1capgd)+ GateDrainOverlapCap ; capgb = 2 * *(ckt->CKTstate0+here->MOS1capgb)+ GateBulkOverlapCap ; } else { capgs = ( *(ckt->CKTstate0+here->MOS1capgs)+ *(ckt->CKTstate1+here->MOS1capgs) + GateSourceOverlapCap ); capgd = ( *(ckt->CKTstate0+here->MOS1capgd)+ *(ckt->CKTstate1+here->MOS1capgd) + GateDrainOverlapCap ); capgb = ( *(ckt->CKTstate0+here->MOS1capgb)+ *(ckt->CKTstate1+here->MOS1capgb) + GateBulkOverlapCap ); } if(ckt->CKTsenInfo){ here->MOS1cgs = capgs; here->MOS1cgd = capgd; here->MOS1cgb = capgb; } /* */ /* * store small-signal parameters (for meyer's model) * all parameters already stored, so done... */ if(SenCond){ if((ckt->CKTsenInfo->SENmode == DCSEN)|| (ckt->CKTsenInfo->SENmode == ACSEN)){ continue; } } #ifndef PREDICTOR if (ckt->CKTmode & (MODEINITPRED | MODEINITTRAN) ) { *(ckt->CKTstate0 + here->MOS1qgs) = (1+xfact) * *(ckt->CKTstate1 + here->MOS1qgs) - xfact * *(ckt->CKTstate2 + here->MOS1qgs); *(ckt->CKTstate0 + here->MOS1qgd) = (1+xfact) * *(ckt->CKTstate1 + here->MOS1qgd) - xfact * *(ckt->CKTstate2 + here->MOS1qgd); *(ckt->CKTstate0 + here->MOS1qgb) = (1+xfact) * *(ckt->CKTstate1 + here->MOS1qgb) - xfact * *(ckt->CKTstate2 + here->MOS1qgb); } else { #endif /*PREDICTOR*/ if(ckt->CKTmode & MODETRAN) { *(ckt->CKTstate0 + here->MOS1qgs) = (vgs-vgs1)*capgs + *(ckt->CKTstate1 + here->MOS1qgs) ; *(ckt->CKTstate0 + here->MOS1qgd) = (vgd-vgd1)*capgd + *(ckt->CKTstate1 + here->MOS1qgd) ; *(ckt->CKTstate0 + here->MOS1qgb) = (vgb-vgb1)*capgb + *(ckt->CKTstate1 + here->MOS1qgb) ; } else { /* TRANOP only */ *(ckt->CKTstate0 + here->MOS1qgs) = vgs*capgs; *(ckt->CKTstate0 + here->MOS1qgd) = vgd*capgd; *(ckt->CKTstate0 + here->MOS1qgb) = vgb*capgb; } #ifndef PREDICTOR } #endif /*PREDICTOR*/ } #ifndef NOBYPASS bypass: #endif if(SenCond) continue; if ( (ckt->CKTmode & (MODEINITTRAN)) || (! (ckt->CKTmode & (MODETRAN)) ) ) { /* * initialize to zero charge conductances * and current */ gcgs=0; ceqgs=0; gcgd=0; ceqgd=0; gcgb=0; ceqgb=0; } else { if(capgs == 0) *(ckt->CKTstate0 + here->MOS1cqgs) =0; if(capgd == 0) *(ckt->CKTstate0 + here->MOS1cqgd) =0; if(capgb == 0) *(ckt->CKTstate0 + here->MOS1cqgb) =0; /* * calculate equivalent conductances and currents for * meyer"s capacitors */ error = NIintegrate(ckt,&gcgs,&ceqgs,capgs,here->MOS1qgs); if(error) return(error); error = NIintegrate(ckt,&gcgd,&ceqgd,capgd,here->MOS1qgd); if(error) return(error); error = NIintegrate(ckt,&gcgb,&ceqgb,capgb,here->MOS1qgb); if(error) return(error); ceqgs=ceqgs-gcgs*vgs+ckt->CKTag[0]* *(ckt->CKTstate0 + here->MOS1qgs); ceqgd=ceqgd-gcgd*vgd+ckt->CKTag[0]* *(ckt->CKTstate0 + here->MOS1qgd); ceqgb=ceqgb-gcgb*vgb+ckt->CKTag[0]* *(ckt->CKTstate0 + here->MOS1qgb); } /* * store charge storage info for meyer's cap in lx table */ /* * load current vector */ ceqbs = model->MOS1type * (here->MOS1cbs-(here->MOS1gbs)*vbs); ceqbd = model->MOS1type * (here->MOS1cbd-(here->MOS1gbd)*vbd); if (here->MOS1mode >= 0) { xnrm=1; xrev=0; cdreq=model->MOS1type*(cdrain-here->MOS1gds*vds- here->MOS1gm*vgs-here->MOS1gmbs*vbs); } else { xnrm=0; xrev=1; cdreq = -(model->MOS1type)*(cdrain-here->MOS1gds*(-vds)- here->MOS1gm*vgd-here->MOS1gmbs*vbd); } *(ckt->CKTrhs + here->MOS1gNode) -= (model->MOS1type * (ceqgs + ceqgb + ceqgd)); *(ckt->CKTrhs + here->MOS1bNode) -= (ceqbs + ceqbd - model->MOS1type * ceqgb); *(ckt->CKTrhs + here->MOS1dNodePrime) += (ceqbd - cdreq + model->MOS1type * ceqgd); *(ckt->CKTrhs + here->MOS1sNodePrime) += cdreq + ceqbs + model->MOS1type * ceqgs; /* * load y matrix */ *(here->MOS1DdPtr) += (here->MOS1drainConductance); *(here->MOS1GgPtr) += ((gcgd+gcgs+gcgb)); *(here->MOS1SsPtr) += (here->MOS1sourceConductance); *(here->MOS1BbPtr) += (here->MOS1gbd+here->MOS1gbs+gcgb); *(here->MOS1DPdpPtr) += (here->MOS1drainConductance+here->MOS1gds+ here->MOS1gbd+xrev*(here->MOS1gm+here->MOS1gmbs)+gcgd); *(here->MOS1SPspPtr) += (here->MOS1sourceConductance+here->MOS1gds+ here->MOS1gbs+xnrm*(here->MOS1gm+here->MOS1gmbs)+gcgs); *(here->MOS1DdpPtr) += (-here->MOS1drainConductance); *(here->MOS1GbPtr) -= gcgb; *(here->MOS1GdpPtr) -= gcgd; *(here->MOS1GspPtr) -= gcgs; *(here->MOS1SspPtr) += (-here->MOS1sourceConductance); *(here->MOS1BgPtr) -= gcgb; *(here->MOS1BdpPtr) -= here->MOS1gbd; *(here->MOS1BspPtr) -= here->MOS1gbs; *(here->MOS1DPdPtr) += (-here->MOS1drainConductance); *(here->MOS1DPgPtr) += ((xnrm-xrev)*here->MOS1gm-gcgd); *(here->MOS1DPbPtr) += (-here->MOS1gbd+(xnrm-xrev)*here->MOS1gmbs); *(here->MOS1DPspPtr) += (-here->MOS1gds-xnrm* (here->MOS1gm+here->MOS1gmbs)); *(here->MOS1SPgPtr) += (-(xnrm-xrev)*here->MOS1gm-gcgs); *(here->MOS1SPsPtr) += (-here->MOS1sourceConductance); *(here->MOS1SPbPtr) += (-here->MOS1gbs-(xnrm-xrev)*here->MOS1gmbs); *(here->MOS1SPdpPtr) += (-here->MOS1gds-xrev* (here->MOS1gm+here->MOS1gmbs)); } } return(OK); } /* end of function MOS1load */ tmpk8ny_4pz/src/spicelib/devices/hisimhv1/0000755000175000017500000000000013546075722020713 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhvtemp.c0000644000175000017500000003767513546075722023114 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2012 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 1 SUBVERSION : 2 REVISION : 4 ) Model Parameter VERSION : 1.23 FILE : hsmhvtemp.c DATE : 2013.04.30 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "hsmhvdef.h" #include "hsmhvevalenv.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define RANGECHECK(param, min, max, pname) \ if ( (param) < (min) || (param) > (max) ) { \ printf("warning(HiSIMHV): The model/instance parameter %s (= %e) must be in the range [%e , %e].\n", \ (pname), (param), (min), (max) ); \ } #define Fn_SU( y , x , xmax , delta , dx ) { \ TMF1 = ( xmax ) - ( x ) - ( delta ) ; \ TMF2 = 4.0 * ( xmax ) * ( delta ) ; \ TMF2 = TMF2 > 0.0 ? TMF2 : -( TMF2) ; \ TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \ dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \ y = ( xmax ) - 0.5 * ( TMF1 + TMF2 ) ; \ } #define Fn_SL( y , x , xmin , delta , dx ) { \ TMF1 = ( x ) - ( xmin ) - ( delta ) ; \ TMF2 = 4.0 * ( xmin ) * ( delta ) ; \ TMF2 = TMF2 > 0.0 ? TMF2 : -( TMF2 ); \ TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \ dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \ y = ( xmin ) + 0.5 * ( TMF1 + TMF2 ) ; \ } #ifdef POW_TO_EXP_AND_LOG #define Fn_Pow( x , y ) exp( y * log( x ) ) #else #define Fn_Pow( x , y ) pow( x , y ) #endif #define C_m2cm (1.0e2) int HSMHVtemp( GENmodel *inModel, CKTcircuit *ckt) { register HSMHVmodel *model = (HSMHVmodel *)inModel ; register HSMHVinstance *here ; HSMHVbinningParam *pParam ; HSMHVmodelMKSParam *modelMKS ; HSMHVhereMKSParam *hereMKS ; double mueph =0.0 ; double Leff=0.0, dL =0.0, dLLD=0.0, LG=0.0, Weff=0.0, dW =0.0, dWLD=0.0, dWCV=0.0, WG =0.0, WL =0.0, Lgate =0.0, Wgate =0.0 ; double Nsubpp=0.0, Nsubps=0.0, Nsub=0.0, q_Nsub=0.0, Nsubb=0.0, Npext =0.0 ; double Lod_half=0.0, Lod_half_ref =0.0 ; double T0, T1, T2, T3, T4, T5, T6, T7 ; /* temperature-dependent variables */ double Eg =0.0, TTEMP0=0.0, TTEMP=0.0, beta=0.0, Nin=0.0 ; double /*Tdiff0 = 0.0, Tdiff0_2 = 0.0,*/ Tdiff = 0.0, Tdiff_2 = 0.0 ; double js=0.0, jssw=0.0, js2=0.0, jssw2 =0.0 ; int i=0 ; double TMF1 , TMF2 ; const double small = 1.0e-50 ; const double dlt_rd23 = 1.0e-6 / C_m2cm ; const double large_arg = 80 ; for ( ;model ;model = HSMHVnextModel(model)) { modelMKS = &model->modelMKS ; model->HSMHV_vcrit = CONSTvt0 * log( CONSTvt0 / (CONSTroot2 * 1.0e-14) ) ; /* Quantum Mechanical Effect */ if ( ( model->HSMHV_qme1 == 0.0 && model->HSMHV_qme3 == 0.0 ) || model->HSMHV_qme2 == 0.0 ) { model->HSMHV_flg_qme = 0 ; } else { model->HSMHV_flg_qme = 1 ; model->HSMHV_qme12 = model->HSMHV_qme1 / ( model->HSMHV_qme2 * model->HSMHV_qme2 ) ; } for ( here = HSMHVinstances(model); here; here = HSMHVnextInstance(here)) { pParam = &here->pParam ; hereMKS = &here->hereMKS ; here->HSMHV_lgate = Lgate = here->HSMHV_l + model->HSMHV_xl ; Wgate = here->HSMHV_w / here->HSMHV_nf + model->HSMHV_xw ; LG = Lgate * C_m2um ; here->HSMHV_wg = WG = Wgate * C_m2um ; WL = WG * LG ; /* Band gap */ here->HSMHV_egtnom = pParam->HSMHV_eg0 - model->HSMHV_ktnom * ( 90.25e-6 + model->HSMHV_ktnom * 1.0e-7 ) ; /* C_EOX */ here->HSMHV_cecox = C_VAC * model->HSMHV_kappa ; /* Vth reduction for small Vds */ here->HSMHV_msc = model->HSMHV_scp22 ; /* Poly-Si Gate Depletion */ if ( pParam->HSMHV_pgd1 == 0.0 ) { here->HSMHV_flg_pgd = 0 ; } else { here->HSMHV_flg_pgd = 1 ; } /* CLM5 & CLM6 */ here->HSMHV_clmmod = 1e0 + pow( LG , model->HSMHV_clm5 ) * model->HSMHV_clm6 ; /* Half length of diffusion */ T1 = 1.0 / (model->HSMHV_saref + 0.5 * here->HSMHV_l) + 1.0 / (model->HSMHV_sbref + 0.5 * here->HSMHV_l); Lod_half_ref = 2.0 / T1 ; if (here->HSMHV_sa > 0.0 && here->HSMHV_sb > 0.0 && (here->HSMHV_nf == 1.0 || (here->HSMHV_nf > 1.0 && here->HSMHV_sd > 0.0))) { T1 = 0.0; for (i = 0; i < here->HSMHV_nf; i++) { T1 += 1.0 / (here->HSMHV_sa + 0.5 * here->HSMHV_l + i * (here->HSMHV_sd + here->HSMHV_l)) + 1.0 / (here->HSMHV_sb + 0.5 * here->HSMHV_l + i * (here->HSMHV_sd + here->HSMHV_l)); } Lod_half = 2.0 * here->HSMHV_nf / T1; } else { Lod_half = 0.0; } Npext = pParam->HSMHV_npext ; here->HSMHV_mueph1 = pParam->HSMHV_mueph1 ; here->HSMHV_nsubp = pParam->HSMHV_nsubp ; here->HSMHV_nsubc = pParam->HSMHV_nsubc ; /* DFM */ if ( model->HSMHV_codfm == 1 && here->HSMHV_nsubcdfm_Given ) { RANGECHECK(hereMKS->HSMHV_nsubcdfm, 1.0e16, 1.0e19, "NSUBCDFM") ; here->HSMHV_mueph1 *= model->HSMHV_mphdfm * ( log(hereMKS->HSMHV_nsubcdfm) - log(here->HSMHV_nsubc) ) + 1.0 ; here->HSMHV_nsubp += hereMKS->HSMHV_nsubcdfm - here->HSMHV_nsubc ; Npext += hereMKS->HSMHV_nsubcdfm - here->HSMHV_nsubc ; here->HSMHV_nsubc = hereMKS->HSMHV_nsubcdfm ; } /* Phonon Scattering (temperature-independent part) */ mueph = here->HSMHV_mueph1 * (1.0e0 + (model->HSMHV_muephw / pow( WG, model->HSMHV_muepwp))) * (1.0e0 + (model->HSMHV_muephl / pow( LG, model->HSMHV_mueplp))) * (1.0e0 + (model->HSMHV_muephs / pow( WL, model->HSMHV_muepsp))); if (Lod_half > 0.0) { T1 = 1.0e0 / (1.0e0 + pParam->HSMHV_muesti2) ; T2 = pow (pParam->HSMHV_muesti1 / Lod_half, pParam->HSMHV_muesti3) ; T3 = pow (pParam->HSMHV_muesti1 / Lod_half_ref, pParam->HSMHV_muesti3) ; here->HSMHV_mueph = mueph * (1.0e0 + T1 * T2) / (1.0e0 + T1 * T3); } else { here->HSMHV_mueph = mueph; } /* Surface Roughness Scattering */ here->HSMHV_muesr = model->HSMHV_muesr0 * (1.0e0 + (model->HSMHV_muesrl / pow (LG, model->HSMHV_mueslp))) * (1.0e0 + (model->HSMHV_muesrw / pow (WG, model->HSMHV_mueswp))) ; /* Coefficients of Qbm for Eeff */ T1 = pow( LG, model->HSMHV_ndeplp ) ; here->HSMHV_ndep_o_esi = ( pParam->HSMHV_ndep * T1 ) / ( T1 + model->HSMHV_ndepl ) / C_ESI ; here->HSMHV_ninv_o_esi = pParam->HSMHV_ninv / C_ESI ; here->HSMHV_ninvd0 = model->HSMHV_ninvd * ( 1.0 + (model->HSMHV_ninvdw / pow( WG, model->HSMHV_ninvdwp))); /* Metallurgical channel geometry */ dL = model->HSMHV_xld + (modelMKS->HSMHV_ll / pow (Lgate + model->HSMHV_lld, model->HSMHV_lln)) ; dLLD = model->HSMHV_xldld + (modelMKS->HSMHV_ll / pow (Lgate + model->HSMHV_lld, model->HSMHV_lln)) ; dW = model->HSMHV_xwd + (modelMKS->HSMHV_wl / pow (Wgate + model->HSMHV_wld, model->HSMHV_wln)) ; dWLD = model->HSMHV_xwdld + (modelMKS->HSMHV_wl / pow (Wgate + model->HSMHV_wld, model->HSMHV_wln)) ; dWCV = model->HSMHV_xwdc + (modelMKS->HSMHV_wl / pow (Wgate + model->HSMHV_wld, model->HSMHV_wln)) ; Leff = Lgate - ( dL + dLLD ) ; if ( Leff <= 0.0 ) { SPfrontEnd->IFerrorf ( ERR_FATAL, "HiSIM_HV: MOSFET(%s) MODEL(%s): effective channel length is negative or 0", model->HSMHVmodName, here->HSMHVname); return (E_BADPARM); } here->HSMHV_leff = Leff ; /* Wg dependence for short channel devices */ here->HSMHV_lgatesm = Lgate + model->HSMHV_wl1 / pow( WL , model->HSMHV_wl1p ) ; here->HSMHV_dVthsm = pParam->HSMHV_wl2 / pow( WL , model->HSMHV_wl2p ) ; /* Lg dependence of wsti */ T1 = 1.0e0 + model->HSMHV_wstil / pow( here->HSMHV_lgatesm * C_m2um , model->HSMHV_wstilp ) ; T2 = 1.0e0 + model->HSMHV_wstiw / pow( WG , model->HSMHV_wstiwp ) ; here->HSMHV_wsti = pParam->HSMHV_wsti * T1 * T2 ; here->HSMHV_weff = Weff = Wgate - 2.0e0 * dW ; here->HSMHV_weff_ld = Wgate - 2.0e0 * dWLD ; here->HSMHV_weff_cv = Wgate - 2.0e0 * dWCV ; if ( Weff <= 0.0 ) { SPfrontEnd->IFerrorf ( ERR_FATAL, "HiSIM_HV: MOSFET(%s) MODEL(%s): effective channel width is negative or 0", model->HSMHVmodName, here->HSMHVname); return (E_BADPARM); } here->HSMHV_weff_nf = Weff * here->HSMHV_nf ; here->HSMHV_weffcv_nf = here->HSMHV_weff_cv * here->HSMHV_nf ; /* Surface impurity profile */ /* Note: Sign Changed --> */ Nsubpp = here->HSMHV_nsubp * (1.0e0 + (model->HSMHV_nsubp0 / pow (WG, model->HSMHV_nsubwp))) ; /* <-- Note: Sign Changed */ if (Lod_half > 0.0) { T1 = 1.0e0 / (1.0e0 + pParam->HSMHV_nsubpsti2) ; T2 = pow (pParam->HSMHV_nsubpsti1 / Lod_half, pParam->HSMHV_nsubpsti3) ; T3 = pow (pParam->HSMHV_nsubpsti1 / Lod_half_ref, pParam->HSMHV_nsubpsti3) ; Nsubps = Nsubpp * (1.0e0 + T1 * T2) / (1.0e0 + T1 * T3) ; } else { Nsubps = Nsubpp ; } here->HSMHV_nsubc *= 1.0e0 + ( model->HSMHV_nsubcw / pow ( WG, model->HSMHV_nsubcwp )) ; if( Lgate > model->HSMHV_lp ){ Nsub = (here->HSMHV_nsubc * (Lgate - model->HSMHV_lp) + Nsubps * model->HSMHV_lp) / Lgate ; } else { Nsub = Nsubps + (Nsubps - here->HSMHV_nsubc) * (model->HSMHV_lp - Lgate) / model->HSMHV_lp ; } T3 = 0.5e0 * Lgate - model->HSMHV_lp ; T1 = 1.0e0 / ( 1.0e0 / T3 + 1.0e0 / model->HSMHV_lpext ) ; T2 = Fn_Max (0.0e0, T1) ; here->HSMHV_nsub = Nsub = Nsub + T2 * (Npext - here->HSMHV_nsubc) / Lgate ; here->HSMHV_qnsub = q_Nsub = C_QE * Nsub ; here->HSMHV_qnsub_esi = q_Nsub * C_ESI ; here->HSMHV_2qnsub_esi = 2.0 * here->HSMHV_qnsub_esi ; /* Pocket Overlap (temperature-independent part) */ if ( Lgate <= 2.0e0 * model->HSMHV_lp ) { Nsubb = 2.0e0 * Nsubps - (Nsubps - here->HSMHV_nsubc) * Lgate / model->HSMHV_lp - here->HSMHV_nsubc ; here->HSMHV_ptovr0 = log (Nsubb / here->HSMHV_nsubc) ; /* here->HSMHV_ptovr0 will be divided by beta later. */ } else { here->HSMHV_ptovr0 = 0.0e0 ; } /* costi0 and costi1 for STI transistor model (temperature-independent part) */ here->HSMHV_costi00 = sqrt (2.0 * C_QE * pParam->HSMHV_nsti * C_ESI ) ; here->HSMHV_nsti_p2 = 1.0 / ( pParam->HSMHV_nsti * pParam->HSMHV_nsti ) ; /* Velocity Temperature Dependence (Temperature-dependent part will be multiplied later.) */ here->HSMHV_vmax0 = (1.0e0 + (pParam->HSMHV_vover / pow (LG, model->HSMHV_voverp))) * (1.0e0 + (model->HSMHV_vovers / pow (WL, model->HSMHV_voversp))) ; /* 2 phi_B (temperature-independent) */ /* @300K, with pocket */ here->HSMHV_pb20 = 2.0e0 / C_b300 * log (Nsub / C_Nin0) ; /* @300K, w/o pocket */ here->HSMHV_pb2c = 2.0e0 / C_b300 * log (here->HSMHV_nsubc / C_Nin0) ; /* constant for Poly depletion */ here->HSMHV_cnstpgd = pow ( 1e0 + 1e0 / LG , model->HSMHV_pgd4 ) * pParam->HSMHV_pgd1 ; /* Gate resistance */ if ( here->HSMHV_corg == 1 ) { T1 = here->HSMHV_xgw + Weff / (3.0e0 * here->HSMHV_ngcon); T2 = Lgate - here->HSMHV_xgl; here->HSMHV_grg = model->HSMHV_rshg * T1 / (here->HSMHV_ngcon * T2 * here->HSMHV_nf); if (here->HSMHV_grg > 1.0e-3) here->HSMHV_grg = here->HSMHV_m / here->HSMHV_grg; else { here->HSMHV_grg = here->HSMHV_m * 1.0e3; printf("warning(HiSIM_HV): The gate conductance reset to 1.0e3 mho.\n"); } } /* Process source/drain series resistamce */ if ( model->HSMHV_rsh > 0.0 ) { here->HSMHV_rd0 = model->HSMHV_rsh * here->HSMHV_nrd ; } else { here->HSMHV_rd0 = 0.0 ; } if ( pParam->HSMHV_rd > 0.0 || pParam->HSMHV_rs > 0.0 ) { here->HSMHV_rdtemp0 = 1.0 + model->HSMHV_rds / pow( WL , model->HSMHV_rdsp ) ; if( pParam->HSMHV_rdvd != 0.0 ){ T7 = ( 1.0 + model->HSMHV_rdvds / pow( WL , model->HSMHV_rdvdsp ) ); T6 = ( - model->HSMHV_rdvdl * pow( LG , model->HSMHV_rdvdlp ) ) ; if(T6 > large_arg) T6 = large_arg ; T6 = exp( T6 ) ; here->HSMHV_rdvdtemp0 = T6 * T7 ; } } if( pParam->HSMHV_rd23 != 0.0 ){ T2 = ( 1.0 + model->HSMHV_rd23s / pow( WL , model->HSMHV_rd23sp ) ); T1 = ( - model->HSMHV_rd23l * pow( LG , model->HSMHV_rd23lp ) ) ; if(T1 > large_arg) T1 = large_arg ; T1 = exp( T1 ) ; T3 = pParam->HSMHV_rd23 * T2 * T1 ; here->HSMHV_rd23 = 0.5 * ( T3 + sqrt ( T3 * T3 + 4.0 * dlt_rd23 * dlt_rd23 ) ) ; } else { here->HSMHV_rd23 = 0.0 ; } if ( model->HSMHV_rsh > 0.0 ) { here->HSMHV_rs0 = model->HSMHV_rsh * here->HSMHV_nrs ; } else { here->HSMHV_rs0 = 0.0 ; } /* Body resistance */ if ( here->HSMHV_corbnet == 1 ) { if (here->HSMHV_rbpb < 1.0e-3) here->HSMHV_grbpb = here->HSMHV_m * 1.0e3 ; else here->HSMHV_grbpb = here->HSMHV_m * ( model->HSMHV_gbmin + 1.0 / here->HSMHV_rbpb ) ; if (here->HSMHV_rbps < 1.0e-3) here->HSMHV_grbps = here->HSMHV_m * 1.0e3 ; else here->HSMHV_grbps = here->HSMHV_m * ( model->HSMHV_gbmin + 1.0 / here->HSMHV_rbps ) ; if (here->HSMHV_rbpd < 1.0e-3) here->HSMHV_grbpd = here->HSMHV_m * 1.0e3 ; else here->HSMHV_grbpd = here->HSMHV_m * ( model->HSMHV_gbmin + 1.0 / here->HSMHV_rbpd ) ; } /* Vdseff */ T1 = model->HSMHV_ddltslp * LG + model->HSMHV_ddltict ; if ( T1 < 0.0 ) { T1 = 0.0 ; } here->HSMHV_ddlt = T1 * model->HSMHV_ddltmax / ( T1 + model->HSMHV_ddltmax ) + 1.0 ; /* Isub */ T2 = pow( Weff , model->HSMHV_svgswp ) ; here->HSMHV_vg2const = pParam->HSMHV_svgs * ( 1.0e0 + modelMKS->HSMHV_svgsl / pow( here->HSMHV_lgate , model->HSMHV_svgslp ) ) * ( T2 / ( T2 + modelMKS->HSMHV_svgsw ) ) ; here->HSMHV_xvbs = pParam->HSMHV_svbs * ( 1.0e0 + modelMKS->HSMHV_svbsl / pow( here->HSMHV_lgate , model->HSMHV_svbslp ) ) ; here->HSMHV_xgate = modelMKS->HSMHV_slg * ( 1.0 + modelMKS->HSMHV_slgl / pow( here->HSMHV_lgate , model->HSMHV_slglp ) ) ; here->HSMHV_xsub1 = pParam->HSMHV_sub1 * ( 1.0 + modelMKS->HSMHV_sub1l / pow( here->HSMHV_lgate , model->HSMHV_sub1lp ) ) ; here->HSMHV_xsub2 = pParam->HSMHV_sub2 * ( 1.0 + modelMKS->HSMHV_sub2l / here->HSMHV_lgate ) ; /* Fringing capacitance */ here->HSMHV_cfrng = C_EOX / ( C_Pi / 2.0e0 ) * here->HSMHV_weff_nf * log( 1.0e0 + model->HSMHV_tpoly / model->HSMHV_tox ) ; /* Additional term of lateral-field-induced capacitance */ here->HSMHV_cqyb0 = C_m2um * here->HSMHV_weff_nf * model->HSMHV_xqy1 / pow( LG , model->HSMHV_xqy2 ) ; /* Self heating */ pParam->HSMHV_rth = pParam->HSMHV_rth0 / ( here->HSMHV_m * here->HSMHV_weff_nf ) * ( 1.0 + model->HSMHV_rth0w / pow( WG , model->HSMHV_rth0wp ) ); pParam->HSMHV_cth = modelMKS->HSMHV_cth0 * ( here->HSMHV_m * here->HSMHV_weff_nf ) ; pParam->HSMHV_rth *= ( 1.0 / pow( here->HSMHV_nf , model->HSMHV_rth0nf ) ) ; here->HSMHV_rthtemp0 = 1.0 / pow( here->HSMHV_nf , model->HSMHV_rth0nf ) / ( here->HSMHV_m * here->HSMHV_weff_nf ) * ( 1.0 + model->HSMHV_rth0w / pow( WG , model->HSMHV_rth0wp ) ); /*-----------------------------------------------------------* * Temperature dependent constants. *-----------------*/ if ( here->HSMHVtempNode < 0 || pParam->HSMHV_rth0 == 0.0 ) { #include "hsmhvtemp_eval.h" } /* end of if ( here->HSMHVtempNode < 0 || pParam->HSMHV_rth0 == 0.0 ) */ } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhvpzld.c0000644000175000017500000004275313546075722023111 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2012 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 1 SUBVERSION : 2 REVISION : 4 ) Model Parameter VERSION : 1.23 FILE : hsmhvpzld.c DATE : 2013.04.30 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "hsmhvdef.h" #include "ngspice/suffix.h" int HSMHVpzLoad( GENmodel *inModel, register CKTcircuit *ckt, register SPcomplex *s) { register HSMHVmodel *model = (HSMHVmodel*)inModel; register HSMHVinstance *here; int flg_nqs =0 ; NG_IGNORE(ckt); #define dNode 0 #define dNodePrime 1 #define gNode 2 #define gNodePrime 3 #define sNode 4 #define sNodePrime 5 #define bNodePrime 6 #define bNode 7 #define dbNode 8 #define sbNode 9 #define tempNode 10 #define qiNode 11 #define qbNode 12 for ( ;model != NULL ;model = HSMHVnextModel(model)) { for ( here = HSMHVinstances(model);here!= NULL ; here = HSMHVnextInstance(here)) { flg_nqs = model->HSMHV_conqs ; /* stamp matrix */ /*drain*/ *(here->HSMHVDdPtr) += here->HSMHV_ydc_d[dNode] + here->HSMHV_ydyn_d[dNode] * s->real; *(here->HSMHVDdPtr +1) += here->HSMHV_ydyn_d[dNode] * s->imag; *(here->HSMHVDdpPtr) += here->HSMHV_ydc_d[dNodePrime] + here->HSMHV_ydyn_d[dNodePrime] * s->real; *(here->HSMHVDdpPtr +1) += here->HSMHV_ydyn_d[dNodePrime] * s->imag; *(here->HSMHVDgpPtr) += here->HSMHV_ydc_d[gNodePrime] + here->HSMHV_ydyn_d[gNodePrime] * s->real; *(here->HSMHVDgpPtr +1) += here->HSMHV_ydyn_d[gNodePrime] * s->imag; *(here->HSMHVDsPtr) += here->HSMHV_ydc_d[sNode] + here->HSMHV_ydyn_d[sNode] * s->real; *(here->HSMHVDsPtr +1) += here->HSMHV_ydyn_d[sNode] * s->imag; *(here->HSMHVDbpPtr) += here->HSMHV_ydc_d[bNodePrime] + here->HSMHV_ydyn_d[bNodePrime] * s->real; *(here->HSMHVDbpPtr +1) += here->HSMHV_ydyn_d[bNodePrime] * s->imag; *(here->HSMHVDdbPtr) += here->HSMHV_ydc_d[dbNode] + here->HSMHV_ydyn_d[dbNode] * s->real; *(here->HSMHVDdbPtr +1) += here->HSMHV_ydyn_d[dbNode] * s->imag; if( here->HSMHVtempNode > 0) { *(here->HSMHVDtempPtr) += model->HSMHV_type * (here->HSMHV_ydc_d[tempNode] + here->HSMHV_ydyn_d[tempNode] * s->real); *(here->HSMHVDtempPtr +1) += model->HSMHV_type * here->HSMHV_ydyn_d[tempNode] * s->imag; } /*drain prime*/ *(here->HSMHVDPdPtr) += here->HSMHV_ydc_dP[dNode] + here->HSMHV_ydyn_dP[dNode] * s->real; *(here->HSMHVDPdPtr +1) += here->HSMHV_ydyn_dP[dNode] * s->imag; *(here->HSMHVDPdpPtr) += here->HSMHV_ydc_dP[dNodePrime] + here->HSMHV_ydyn_dP[dNodePrime] * s->real; *(here->HSMHVDPdpPtr +1) += here->HSMHV_ydyn_dP[dNodePrime] * s->imag; *(here->HSMHVDPgpPtr) += here->HSMHV_ydc_dP[gNodePrime] + here->HSMHV_ydyn_dP[gNodePrime] * s->real; *(here->HSMHVDPgpPtr +1) += here->HSMHV_ydyn_dP[gNodePrime] * s->imag; *(here->HSMHVDPsPtr) += here->HSMHV_ydc_dP[sNode] + here->HSMHV_ydyn_dP[sNode] * s->real; *(here->HSMHVDPsPtr +1) += here->HSMHV_ydyn_dP[sNode] * s->imag; *(here->HSMHVDPspPtr) += here->HSMHV_ydc_dP[sNodePrime] + here->HSMHV_ydyn_dP[sNodePrime] * s->real; *(here->HSMHVDPspPtr +1) += here->HSMHV_ydyn_dP[sNodePrime] * s->imag; *(here->HSMHVDPbpPtr) += here->HSMHV_ydc_dP[bNodePrime] + here->HSMHV_ydyn_dP[bNodePrime] * s->real; *(here->HSMHVDPbpPtr +1) += here->HSMHV_ydyn_dP[bNodePrime] * s->imag; if( here->HSMHVtempNode > 0) { *(here->HSMHVDPtempPtr) += model->HSMHV_type * (here->HSMHV_ydc_dP[tempNode] + here->HSMHV_ydyn_dP[tempNode] * s->real); *(here->HSMHVDPtempPtr +1) += model->HSMHV_type * here->HSMHV_ydyn_dP[tempNode] * s->imag; } if (flg_nqs) { *(here->HSMHVDPqiPtr) += model->HSMHV_type * (here->HSMHV_ydc_dP[qiNode] + here->HSMHV_ydyn_dP[qiNode] * s->real); *(here->HSMHVDPqiPtr+1) += model->HSMHV_type * here->HSMHV_ydyn_dP[qiNode] * s->imag; } /*gate*/ *(here->HSMHVGgPtr) += here->HSMHV_ydc_g[gNode] + here->HSMHV_ydyn_g[gNode] * s->real; *(here->HSMHVGgPtr +1) += here->HSMHV_ydyn_g[gNode] * s->imag; *(here->HSMHVGgpPtr) += here->HSMHV_ydc_g[gNodePrime] + here->HSMHV_ydyn_g[gNodePrime] * s->real; *(here->HSMHVGgpPtr +1) += here->HSMHV_ydyn_g[gNodePrime] * s->imag; /*gate prime*/ *(here->HSMHVGPdPtr) += here->HSMHV_ydc_gP[dNode] + here->HSMHV_ydyn_gP[dNode] * s->real; *(here->HSMHVGPdPtr +1) += here->HSMHV_ydyn_gP[dNode] * s->imag; *(here->HSMHVGPdpPtr) += here->HSMHV_ydc_gP[dNodePrime] + here->HSMHV_ydyn_gP[dNodePrime] * s->real; *(here->HSMHVGPdpPtr +1) += here->HSMHV_ydyn_gP[dNodePrime] * s->imag; *(here->HSMHVGPgPtr) += here->HSMHV_ydc_gP[gNode] + here->HSMHV_ydyn_gP[gNode] * s->real; *(here->HSMHVGPgPtr +1) += here->HSMHV_ydyn_gP[gNode] * s->imag; *(here->HSMHVGPgpPtr) += here->HSMHV_ydc_gP[gNodePrime] + here->HSMHV_ydyn_gP[gNodePrime] * s->real; *(here->HSMHVGPgpPtr +1) += here->HSMHV_ydyn_gP[gNodePrime] * s->imag; *(here->HSMHVGPsPtr) += here->HSMHV_ydc_gP[sNode] + here->HSMHV_ydyn_gP[sNode] * s->real; *(here->HSMHVGPsPtr +1) += here->HSMHV_ydyn_gP[sNode] * s->imag; *(here->HSMHVGPspPtr) += here->HSMHV_ydc_gP[sNodePrime] + here->HSMHV_ydyn_gP[sNodePrime] * s->real; *(here->HSMHVGPspPtr +1) += here->HSMHV_ydyn_gP[sNodePrime] * s->imag; *(here->HSMHVGPbpPtr) += here->HSMHV_ydc_gP[bNodePrime] + here->HSMHV_ydyn_gP[bNodePrime] * s->real; *(here->HSMHVGPbpPtr +1) += here->HSMHV_ydyn_gP[bNodePrime] * s->imag; if( here->HSMHVtempNode > 0) { *(here->HSMHVGPtempPtr) += model->HSMHV_type * (here->HSMHV_ydc_gP[tempNode] + here->HSMHV_ydyn_gP[tempNode] * s->real); *(here->HSMHVGPtempPtr +1) += model->HSMHV_type * here->HSMHV_ydyn_gP[tempNode] * s->imag; } if (flg_nqs) { *(here->HSMHVGPqiPtr) += model->HSMHV_type * (here->HSMHV_ydc_gP[qiNode] + here->HSMHV_ydyn_gP[qiNode] * s->real); *(here->HSMHVGPqiPtr+1) += model->HSMHV_type * here->HSMHV_ydyn_gP[qiNode] * s->imag; *(here->HSMHVGPqbPtr) += model->HSMHV_type * (here->HSMHV_ydc_gP[qbNode] + here->HSMHV_ydyn_gP[qbNode] * s->real); *(here->HSMHVGPqbPtr+1) += model->HSMHV_type * here->HSMHV_ydyn_gP[qbNode] * s->imag; } /*source*/ *(here->HSMHVSdPtr) += here->HSMHV_ydc_s[dNode] + here->HSMHV_ydyn_s[dNode] * s->real; *(here->HSMHVSdPtr +1) += here->HSMHV_ydyn_s[dNode] * s->imag; *(here->HSMHVSgpPtr) += here->HSMHV_ydc_s[gNodePrime] + here->HSMHV_ydyn_s[gNodePrime] * s->real; *(here->HSMHVSgpPtr +1) += here->HSMHV_ydyn_s[gNodePrime] * s->imag; *(here->HSMHVSsPtr) += here->HSMHV_ydc_s[sNode] + here->HSMHV_ydyn_s[sNode] * s->real; *(here->HSMHVSsPtr +1) += here->HSMHV_ydyn_s[sNode] * s->imag; *(here->HSMHVSspPtr) += here->HSMHV_ydc_s[sNodePrime] + here->HSMHV_ydyn_s[sNodePrime] * s->real; *(here->HSMHVSspPtr +1) += here->HSMHV_ydyn_s[sNodePrime] * s->imag; *(here->HSMHVSbpPtr) += here->HSMHV_ydc_s[bNodePrime] + here->HSMHV_ydyn_s[bNodePrime] * s->real; *(here->HSMHVSbpPtr +1) += here->HSMHV_ydyn_s[bNodePrime] * s->imag; *(here->HSMHVSsbPtr) += here->HSMHV_ydc_s[sbNode] + here->HSMHV_ydyn_s[sbNode] * s->real; *(here->HSMHVSsbPtr +1) += here->HSMHV_ydyn_s[sbNode] * s->imag; if( here->HSMHVtempNode > 0) { *(here->HSMHVStempPtr) += model->HSMHV_type * (here->HSMHV_ydc_s[tempNode] + here->HSMHV_ydyn_s[tempNode] * s->real); *(here->HSMHVStempPtr +1) += model->HSMHV_type * here->HSMHV_ydyn_s[tempNode] * s->imag; } /*source prime*/ *(here->HSMHVSPdPtr) += here->HSMHV_ydc_sP[dNode] + here->HSMHV_ydyn_sP[dNode] * s->real; *(here->HSMHVSPdPtr +1) += here->HSMHV_ydyn_sP[dNode] * s->imag; *(here->HSMHVSPdpPtr) += here->HSMHV_ydc_sP[dNodePrime] + here->HSMHV_ydyn_sP[dNodePrime] * s->real; *(here->HSMHVSPdpPtr +1) += here->HSMHV_ydyn_sP[dNodePrime] * s->imag; *(here->HSMHVSPgpPtr) += here->HSMHV_ydc_sP[gNodePrime] + here->HSMHV_ydyn_sP[gNodePrime] * s->real; *(here->HSMHVSPgpPtr +1) += here->HSMHV_ydyn_sP[gNodePrime] * s->imag; *(here->HSMHVSPsPtr) += here->HSMHV_ydc_sP[sNode] + here->HSMHV_ydyn_sP[sNode] * s->real; *(here->HSMHVSPsPtr +1) += here->HSMHV_ydyn_sP[sNode] * s->imag; *(here->HSMHVSPspPtr) += here->HSMHV_ydc_sP[sNodePrime] + here->HSMHV_ydyn_sP[sNodePrime] * s->real; *(here->HSMHVSPspPtr +1) += here->HSMHV_ydyn_sP[sNodePrime] * s->imag; *(here->HSMHVSPbpPtr) += here->HSMHV_ydc_sP[bNodePrime] + here->HSMHV_ydyn_sP[bNodePrime] * s->real; *(here->HSMHVSPbpPtr +1) += here->HSMHV_ydyn_sP[bNodePrime] * s->imag; if( here->HSMHVtempNode > 0) { *(here->HSMHVSPtempPtr) += model->HSMHV_type * (here->HSMHV_ydc_sP[tempNode] + here->HSMHV_ydyn_sP[tempNode] * s->real); *(here->HSMHVSPtempPtr +1) += model->HSMHV_type * here->HSMHV_ydyn_sP[tempNode] * s->imag; } if (flg_nqs) { *(here->HSMHVSPqiPtr) += model->HSMHV_type * (here->HSMHV_ydc_sP[qiNode] + here->HSMHV_ydyn_sP[qiNode] * s->real); *(here->HSMHVSPqiPtr+1) += model->HSMHV_type * here->HSMHV_ydyn_sP[qiNode] * s->imag; } /*bulk prime*/ *(here->HSMHVBPdpPtr) += here->HSMHV_ydc_bP[dNodePrime] + here->HSMHV_ydyn_bP[dNodePrime] * s->real; *(here->HSMHVBPdpPtr +1) += here->HSMHV_ydyn_bP[dNodePrime] * s->imag; *(here->HSMHVBPgpPtr) += here->HSMHV_ydc_bP[gNodePrime] + here->HSMHV_ydyn_bP[gNodePrime] * s->real; *(here->HSMHVBPgpPtr +1) += here->HSMHV_ydyn_bP[gNodePrime] * s->imag; *(here->HSMHVBPspPtr) += here->HSMHV_ydc_bP[sNodePrime] + here->HSMHV_ydyn_bP[sNodePrime] * s->real; *(here->HSMHVBPspPtr +1) += here->HSMHV_ydyn_bP[sNodePrime] * s->imag; *(here->HSMHVBPbpPtr) += here->HSMHV_ydc_bP[bNodePrime] + here->HSMHV_ydyn_bP[bNodePrime] * s->real; *(here->HSMHVBPbpPtr +1) += here->HSMHV_ydyn_bP[bNodePrime] * s->imag; *(here->HSMHVBPbPtr) += here->HSMHV_ydc_bP[bNode] + here->HSMHV_ydyn_bP[bNode] * s->real; *(here->HSMHVBPbPtr +1) += here->HSMHV_ydyn_bP[bNode] * s->imag; *(here->HSMHVBPdbPtr) += here->HSMHV_ydc_bP[dbNode] + here->HSMHV_ydyn_bP[dbNode] * s->real; *(here->HSMHVBPdbPtr +1) += here->HSMHV_ydyn_bP[dbNode] * s->imag; *(here->HSMHVBPsbPtr) += here->HSMHV_ydc_bP[sbNode] + here->HSMHV_ydyn_bP[sbNode] * s->real; *(here->HSMHVBPsbPtr +1) += here->HSMHV_ydyn_bP[sbNode] * s->imag; if( here->HSMHVtempNode > 0) { *(here->HSMHVBPtempPtr) += model->HSMHV_type * (here->HSMHV_ydc_bP[tempNode] + here->HSMHV_ydyn_bP[tempNode] * s->real); *(here->HSMHVBPtempPtr +1) += model->HSMHV_type * here->HSMHV_ydyn_bP[tempNode] * s->imag; } if (flg_nqs) { *(here->HSMHVBPqbPtr) += model->HSMHV_type * (here->HSMHV_ydc_bP[qbNode] + here->HSMHV_ydyn_bP[qbNode] * s->real); *(here->HSMHVBPqbPtr+1) += model->HSMHV_type * here->HSMHV_ydyn_bP[qbNode] * s->imag; } /*bulk*/ *(here->HSMHVBbpPtr) += here->HSMHV_ydc_b[bNodePrime] + here->HSMHV_ydyn_b[bNodePrime] * s->real; *(here->HSMHVBbpPtr +1) += here->HSMHV_ydyn_b[bNodePrime] * s->imag; *(here->HSMHVBbPtr) += here->HSMHV_ydc_b[bNode] + here->HSMHV_ydyn_b[bNode] * s->real; *(here->HSMHVBbPtr +1) += here->HSMHV_ydyn_b[bNode] * s->imag; /*drain bulk*/ *(here->HSMHVDBdPtr) += here->HSMHV_ydc_db[dNode] + here->HSMHV_ydyn_db[dNode] * s->real; *(here->HSMHVDBdPtr +1) += here->HSMHV_ydyn_db[dNode] * s->imag; *(here->HSMHVDBbpPtr) += here->HSMHV_ydc_db[bNodePrime] + here->HSMHV_ydyn_db[bNodePrime] * s->real; *(here->HSMHVDBbpPtr +1) += here->HSMHV_ydyn_db[bNodePrime] * s->imag; *(here->HSMHVDBdbPtr) += here->HSMHV_ydc_db[dbNode] + here->HSMHV_ydyn_db[dbNode] * s->real; *(here->HSMHVDBdbPtr +1) += here->HSMHV_ydyn_db[dbNode] * s->imag; if( here->HSMHVtempNode > 0) { *(here->HSMHVDBtempPtr) += model->HSMHV_type * (here->HSMHV_ydc_db[tempNode] + here->HSMHV_ydyn_db[tempNode] * s->real); *(here->HSMHVDBtempPtr +1) += model->HSMHV_type * here->HSMHV_ydyn_db[tempNode] * s->imag; } /*source bulk*/ *(here->HSMHVSBsPtr) += here->HSMHV_ydc_sb[sNode] + here->HSMHV_ydyn_sb[sNode] * s->real; *(here->HSMHVSBsPtr +1) += here->HSMHV_ydyn_sb[sNode] * s->imag; *(here->HSMHVSBbpPtr) += here->HSMHV_ydc_sb[bNodePrime] + here->HSMHV_ydyn_sb[bNodePrime] * s->real; *(here->HSMHVSBbpPtr +1) += here->HSMHV_ydyn_sb[bNodePrime] * s->imag; *(here->HSMHVSBsbPtr) += here->HSMHV_ydc_sb[sbNode] + here->HSMHV_ydyn_sb[sbNode] * s->real; *(here->HSMHVSBsbPtr +1) += here->HSMHV_ydyn_sb[sbNode] * s->imag; if( here->HSMHVtempNode > 0) { *(here->HSMHVSBtempPtr) += model->HSMHV_type * (here->HSMHV_ydc_sb[tempNode] + here->HSMHV_ydyn_sb[tempNode] * s->real); *(here->HSMHVSBtempPtr +1) += model->HSMHV_type * here->HSMHV_ydyn_sb[tempNode] * s->imag; } /*temp*/ if( here->HSMHVtempNode > 0) { *(here->HSMHVTempdPtr) += model->HSMHV_type * (here->HSMHV_ydc_t[dNode] + here->HSMHV_ydyn_t[dNode] * s->real); *(here->HSMHVTempdPtr +1) += model->HSMHV_type * here->HSMHV_ydyn_t[dNode] * s->imag; *(here->HSMHVTempdpPtr) += model->HSMHV_type * (here->HSMHV_ydc_t[dNodePrime] + here->HSMHV_ydyn_t[dNodePrime] * s->real); *(here->HSMHVTempdpPtr +1) += model->HSMHV_type * here->HSMHV_ydyn_t[dNodePrime] * s->imag; *(here->HSMHVTempgpPtr) += model->HSMHV_type * (here->HSMHV_ydc_t[gNodePrime] + here->HSMHV_ydyn_t[gNodePrime] * s->real); *(here->HSMHVTempgpPtr +1) += model->HSMHV_type * here->HSMHV_ydyn_t[gNodePrime] * s->imag; *(here->HSMHVTempsPtr) += model->HSMHV_type * (here->HSMHV_ydc_t[sNode] + here->HSMHV_ydyn_t[sNode] * s->real); *(here->HSMHVTempsPtr +1) += model->HSMHV_type * here->HSMHV_ydyn_t[sNode] * s->imag; *(here->HSMHVTempspPtr) += model->HSMHV_type * (here->HSMHV_ydc_t[sNodePrime] + here->HSMHV_ydyn_t[sNodePrime] * s->real); *(here->HSMHVTempspPtr +1) += model->HSMHV_type * here->HSMHV_ydyn_t[sNodePrime] * s->imag; *(here->HSMHVTempbpPtr) += model->HSMHV_type * (here->HSMHV_ydc_t[bNodePrime] + here->HSMHV_ydyn_t[bNodePrime] * s->real); *(here->HSMHVTempbpPtr +1) += model->HSMHV_type * here->HSMHV_ydyn_t[bNodePrime] * s->imag; *(here->HSMHVTemptempPtr) += here->HSMHV_ydc_t[tempNode] + here->HSMHV_ydyn_t[tempNode] * s->real; *(here->HSMHVTemptempPtr +1) += here->HSMHV_ydyn_t[tempNode] * s->imag; } /* additional entries for flat nqs handling */ if ( flg_nqs ) { /*qi*/ *(here->HSMHVQIdpPtr) += model->HSMHV_type * (here->HSMHV_ydc_qi[dNodePrime] + here->HSMHV_ydyn_qi[dNodePrime] * s->real); *(here->HSMHVQIdpPtr+1) += model->HSMHV_type * here->HSMHV_ydyn_qi[dNodePrime] * s->imag; *(here->HSMHVQIgpPtr) += model->HSMHV_type * (here->HSMHV_ydc_qi[gNodePrime] + here->HSMHV_ydyn_qi[gNodePrime] * s->real); *(here->HSMHVQIgpPtr+1) += model->HSMHV_type * here->HSMHV_ydyn_qi[gNodePrime] * s->imag; *(here->HSMHVQIspPtr) += model->HSMHV_type * (here->HSMHV_ydc_qi[sNodePrime] + here->HSMHV_ydyn_qi[sNodePrime] * s->real); *(here->HSMHVQIspPtr+1) += model->HSMHV_type * here->HSMHV_ydyn_qi[sNodePrime] * s->imag; *(here->HSMHVQIbpPtr) += model->HSMHV_type * (here->HSMHV_ydc_qi[bNodePrime] + here->HSMHV_ydyn_qi[bNodePrime] * s->real); *(here->HSMHVQIbpPtr+1) += model->HSMHV_type * here->HSMHV_ydyn_qi[bNodePrime] * s->imag; *(here->HSMHVQIqiPtr) += here->HSMHV_ydc_qi[qiNode] + here->HSMHV_ydyn_qi[qiNode] * s->real; *(here->HSMHVQIqiPtr+1) += here->HSMHV_ydyn_qi[qiNode] * s->imag; if ( here->HSMHVtempNode > 0 ) { *(here->HSMHVQItempPtr) += here->HSMHV_ydc_qi[tempNode] + here->HSMHV_ydyn_qi[tempNode] * s->real; *(here->HSMHVQItempPtr+1) += here->HSMHV_ydyn_qi[tempNode] * s->imag; } /*qb*/ *(here->HSMHVQBdpPtr) += model->HSMHV_type * (here->HSMHV_ydc_qb[dNodePrime] + here->HSMHV_ydyn_qb[dNodePrime] * s->real); *(here->HSMHVQBdpPtr+1) += model->HSMHV_type * here->HSMHV_ydyn_qb[dNodePrime] * s->imag; *(here->HSMHVQBgpPtr) += model->HSMHV_type * (here->HSMHV_ydc_qb[gNodePrime] + here->HSMHV_ydyn_qb[gNodePrime] * s->real); *(here->HSMHVQBgpPtr+1) += model->HSMHV_type * here->HSMHV_ydyn_qb[gNodePrime] * s->imag; *(here->HSMHVQBspPtr) += model->HSMHV_type * (here->HSMHV_ydc_qb[sNodePrime] + here->HSMHV_ydyn_qb[sNodePrime] * s->real); *(here->HSMHVQBspPtr+1) += model->HSMHV_type * here->HSMHV_ydyn_qb[sNodePrime] * s->imag; *(here->HSMHVQBbpPtr) += model->HSMHV_type * (here->HSMHV_ydc_qb[bNodePrime] + here->HSMHV_ydyn_qb[bNodePrime] * s->real); *(here->HSMHVQBbpPtr+1) += model->HSMHV_type * here->HSMHV_ydyn_qb[bNodePrime] * s->imag; *(here->HSMHVQBqbPtr) += here->HSMHV_ydc_qb[qbNode] + here->HSMHV_ydyn_qb[qbNode] * s->real; *(here->HSMHVQBqbPtr+1) += here->HSMHV_ydyn_qb[qbNode] * s->imag; if ( here->HSMHVtempNode > 0 ) { *(here->HSMHVQBtempPtr) += here->HSMHV_ydc_qb[tempNode] + here->HSMHV_ydyn_qb[tempNode] * s->real; *(here->HSMHVQBtempPtr+1) += here->HSMHV_ydyn_qb[tempNode] * s->imag; } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhveval_qover.h0000644000175000017500000006052713546075722024307 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2012 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 1 SUBVERSION : 2 REVISION : 4 ) Model Parameter VERSION : 1.23 FILE : hsmhveval_qover.h DATE : 2013.04.30 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /* Begin HSMHVevalQover */ /*---------------------------------------------------* * Clamp -Vxbgmt. *-----------------*/ T0 = - Vxbgmt; if ( T0 > Vbs_bnd ) { T1 = T0 - Vbs_bnd; T1_dT = - Vbs_bnd_dT; T2 = Vbs_max - Vbs_bnd; T2_dT = Vbs_max_dT - Vbs_bnd_dT; Fn_SUPoly4m( TY, T1, T2, T11, T0 ); TY_dT = T1_dT * T11 + T2_dT * T0; T10 = Vbs_bnd + TY ; T10_dT = Vbs_bnd_dT + TY_dT ; } else { T10 = T0 ; T11 = 1.0 ; T10_dT = 0.0; } Vxbgmtcl = - T10 - small2 ; Vxbgmtcl_dVxbgmt = T11; Vxbgmtcl_dT = - T10_dT; fac1 = cnst0over_func * Cox0_inv ; fac1_dVbs = 0.0; fac1_dVds = 0.0; fac1_dVgs = 0.0; fac1_dT = cnst0over_func_dT * Cox0_inv ; fac1p2 = fac1 * fac1 ; fac1p2_dT = 2.0 * fac1 * fac1_dT ; VgpLD = - Vgbgmt + pParam->HSMHV_vfbover; VgpLD_dVgb = - 1.0e0 ; T0 = Nover_func / here->HSMHV_nin ; Pb2over = 2.0 / beta * log( T0 ) ; T0_dT = - T0 / here->HSMHV_nin * Nin_dT ; Pb2over_dT = - Pb2over / beta * beta_dT + 2.0 / beta / T0 * T0_dT ; Vgb_fb_LD = - Vxbgmtcl ; /*-----------------------------------* * QsuLD: total charge = Accumulation | Depletion+inversion *-----------------*/ if ( VgpLD < Vgb_fb_LD ){ /*---------------------------* * Accumulation *-----------------*/ flg_ovzone = -1 ; T1 = 1.0 / ( beta * cnst0over_func ) ; T1_dT = - T1 * T1 * ( beta_dT * cnst0over_func + beta * cnst0over_func_dT ) ; TY = T1 * Cox0 ; Ac41 = 2.0 + 3.0 * C_SQRT_2 * TY ; Ac4 = 8.0 * Ac41 * Ac41 * Ac41 ; TY_dT = T1_dT * Cox0 ; Ac41_dT = 3.0 * C_SQRT_2 * TY_dT ; Ac4_dT = 8.0 * 3.0 * Ac41 * Ac41 * Ac41_dT ; Ps0_min = here->HSMHV_eg - Pb2over ; Ps0_min_dT = Eg_dT - Pb2over_dT ; TX = beta * ( VgpLD + Vxbgmtcl ) ; TX_dVxb = beta * Vxbgmtcl_dVxbgmt ; TX_dVgb = beta * VgpLD_dVgb ; TX_dT = beta_dT * ( VgpLD + Vxbgmtcl ) + beta * Vxbgmtcl_dT; Ac31 = 7.0 * C_SQRT_2 - 9.0 * TY * ( TX - 2.0 ) ; Ac31_dVxb = - 9.0 * TY * TX_dVxb ; Ac31_dVgb = - 9.0 * TY * TX_dVgb ; Ac31_dT = - 9.0 * ( TY_dT * ( TX - 2.0 ) + TY * TX_dT ); Ac3 = Ac31 * Ac31 ; T1 = 2.0 * Ac31 ; Ac3_dVxb = T1 * Ac31_dVxb ; Ac3_dVgb = T1 * Ac31_dVgb ; Ac3_dT = T1 * Ac31_dT ; Ac2 = sqrt( Ac4 + Ac3 ) ; T1 = 0.5 / Ac2 ; Ac2_dVxb = T1 * Ac3_dVxb ; Ac2_dVgb = T1 * Ac3_dVgb ; Ac2_dT = T1 * ( Ac4_dT + Ac3_dT ); Ac1 = -7.0 * C_SQRT_2 + Ac2 + 9.0 * TY * ( TX - 2.0 ) ; Ac1_dVxb = Ac2_dVxb + 9.0 * TY * TX_dVxb ; Ac1_dVgb = Ac2_dVgb + 9.0 * TY * TX_dVgb ; Ac1_dT = Ac2_dT + 9.0 * ( TY_dT * ( TX - 2.0 ) + TY * TX_dT ) ; Acd = pow( Ac1 , C_1o3 ) ; T1 = C_1o3 / ( Acd * Acd ) ; Acd_dVxb = Ac1_dVxb * T1 ; Acd_dVgb = Ac1_dVgb * T1 ; Acd_dT = Ac1_dT * T1 ; Acn = -4.0 * C_SQRT_2 - 12.0 * TY + 2.0 * Acd + C_SQRT_2 * Acd * Acd ; T1 = 2.0 + 2.0 * C_SQRT_2 * Acd ; Acn_dVxb = T1 * Acd_dVxb ; Acn_dVgb = T1 * Acd_dVgb ; Acn_dT = - 12.0 * TY_dT + T1 * Acd_dT ; Chi = Acn / Acd ; T1 = 1.0 / ( Acd * Acd ) ; Chi_dVxb = ( Acn_dVxb * Acd - Acn * Acd_dVxb ) * T1 ; Chi_dVgb = ( Acn_dVgb * Acd - Acn * Acd_dVgb ) * T1 ; Chi_dT = ( Acn_dT * Acd - Acn * Acd_dT ) * T1 ; Psa = Chi * beta_inv - Vxbgmtcl ; Psa_dVxb = Chi_dVxb * beta_inv - Vxbgmtcl_dVxbgmt ; Psa_dVgb = Chi_dVgb * beta_inv ; Psa_dT = Chi_dT * beta_inv + Chi * beta_inv_dT - Vxbgmtcl_dT ; T1 = Psa + Vxbgmtcl ; T1_dT = Psa_dT + Vxbgmtcl_dT ; T2 = T1 / Ps0_min ; T2_dT = ( T1_dT * Ps0_min - T1 * Ps0_min_dT ) / ( Ps0_min * Ps0_min ) ; T3 = sqrt( 1.0 + ( T2 * T2 ) ) ; T9 = T2 / T3 / Ps0_min ; T3_dVd = T9 * ( Psa_dVxb + Vxbgmtcl_dVxbgmt ) ; T3_dVg = T9 * Psa_dVgb ; T3_dT = T2_dT * T2 / T3; Ps0LD = T1 / T3 - Vxbgmtcl ; T9 = 1.0 / ( T3 * T3 ) ; Ps0LD_dVxb = T9 * ( ( Psa_dVxb + Vxbgmtcl_dVxbgmt ) * T3 - T1 * T3_dVd ) - Vxbgmtcl_dVxbgmt ; Ps0LD_dVgb = T9 * ( Psa_dVgb * T3 - T1 * T3_dVg ); Ps0LD_dT = T9 * ( T1_dT * T3 - T1 * T3_dT ) - Vxbgmtcl_dT; T2 = ( VgpLD - Ps0LD ) ; QsuLD = Cox0 * T2 ; QsuLD_dVxb = - Cox0 * Ps0LD_dVxb ; QsuLD_dVgb = Cox0 * ( VgpLD_dVgb - Ps0LD_dVgb ) ; QsuLD_dT = Cox0 * ( - Ps0LD_dT ) ; QbuLD = QsuLD ; QbuLD_dVxb = QsuLD_dVxb ; QbuLD_dVgb = QsuLD_dVgb ; QbuLD_dT = QsuLD_dT ; } else { /*---------------------------* * Depletion and inversion *-----------------*/ /* initial value for a few fixpoint iterations to get Ps0_iniA from simplified Poisson equation: */ flg_ovzone = 2 ; Chi = znbd3 ; Chi_dVxb = 0.0 ; Chi_dVgb = 0.0 ; Chi_dT = 0.0 ; Ps0_iniA= Chi/beta - Vxbgmtcl ; Ps0_iniA_dVxb = Chi_dVxb/beta - Vxbgmtcl_dVxbgmt ; Ps0_iniA_dVgb = Chi_dVgb/beta ; Ps0_iniA_dT = Chi_dT/beta - Chi*beta_dT/(beta*beta) - Vxbgmtcl_dT; /* 1 .. 2 relaxation steps should be sufficient */ for ( lp_ld = 1; lp_ld <= 2; lp_ld ++ ) { TY = exp(-Chi); TY_dVxb = -Chi_dVxb * TY; TY_dVgb = -Chi_dVgb * TY; TY_dT = - Chi_dT * TY; TX = 1.0e0 + 4.0e0 * ( beta * ( VgpLD + Vxbgmtcl ) - 1.0e0 + TY ) / ( fac1p2 * beta2 ) ; TX_dVxb = 4.0e0 * ( beta * ( Vxbgmtcl_dVxbgmt ) + TY_dVxb ) / ( fac1p2 * beta2 ); TX_dVgb = 4.0e0 * ( beta * ( VgpLD_dVgb ) + TY_dVgb ) / ( fac1p2 * beta2 ); T1 = ( beta * ( VgpLD + Vxbgmtcl ) - 1.0e0 + TY ); T1_dT = beta_dT * ( VgpLD + Vxbgmtcl ) + beta * Vxbgmtcl_dT + TY_dT; T3 = fac1p2 * beta2 ; T3_dT = fac1p2_dT * beta2 + fac1p2 * ( 2 * beta * beta_dT ) ; TX_dT = 4 * ( T1_dT * T3 - T1 * T3_dT ) / ( T3 * T3 ); if ( TX < epsm10) { TX = epsm10; TX_dVxb = TX_dVgb = TX_dT = 0.0; } Ps0_iniA = VgpLD + fac1p2 * beta / 2.0e0 * ( 1.0e0 - sqrt( TX ) ) ; Ps0_iniA_dVxb = - fac1p2 * beta / 2.0e0 * TX_dVxb * 0.5 / sqrt( TX ); Ps0_iniA_dVgb = VgpLD_dVgb - fac1p2 * beta / 2.0e0 * TX_dVgb * 0.5 / sqrt( TX ); T1 = fac1p2 * beta ; T1_dT = fac1p2_dT * beta + fac1p2 * beta_dT ; T2 = 1.0 - sqrt( TX ); T2_dT = - 1.0e0 / ( 2.0e0 * sqrt( TX ) ) * TX_dT ; Ps0_iniA_dT = ( T1_dT * T2 + T1 * T2_dT ) / 2.0e0 ; Chi = beta * ( Ps0_iniA + Vxbgmtcl ) ; Chi_dVxb = beta * ( Ps0_iniA_dVxb + Vxbgmtcl_dVxbgmt ) ; Chi_dVgb = beta * ( Ps0_iniA_dVgb ) ; Chi_dT = beta_dT * ( Ps0_iniA + Vxbgmtcl ) + beta * ( Ps0_iniA_dT + Vxbgmtcl_dT ); } /* End of iteration */ if ( Chi < znbd3 ) { flg_ovzone = 1 ; /*-----------------------------------* * zone-D1 * - Ps0_iniA is the analytical solution of QovLD=Qb0 with * Qb0 being approximated by 3-degree polynomial. * * new: Inclusion of exp(-Chi) term at right border *-----------------*/ Ta = 1.0/(9.0*sqrt(2.0)) - (5.0+7.0*exp(-3.0)) / (54.0*sqrt(2.0+exp(-3.0))); Tb = (1.0+exp(-3.0)) / (2.0*sqrt(2.0+exp(-3.0))) - sqrt(2.0) / 3.0; Tc = 1.0/sqrt(2.0) + 1.0/(beta*fac1); Tc_dT = - (beta_dT*fac1 + beta*fac1_dT)/(beta2*fac1p2); Td = - (VgpLD + Vxbgmtcl) / fac1; Td_dVxb = - Vxbgmtcl_dVxbgmt / fac1; Td_dVgb = - VgpLD_dVgb / fac1; Td_dT = - (Vxbgmtcl_dT*fac1 - (VgpLD+Vxbgmtcl)*fac1_dT)/fac1p2; Tq = Tb*Tb*Tb / (27.0*Ta*Ta*Ta) - Tb*Tc/(6.0*Ta*Ta) + Td/(2.0*Ta); Tq_dVxb = Td_dVxb/(2.0*Ta); Tq_dVgb = Td_dVgb / (2.0*Ta); Tq_dT = - Tb/(6.0*Ta*Ta)*Tc_dT + Td_dT/(2.0*Ta); Tp = (3.0*Ta*Tc-Tb*Tb)/(9.0*Ta*Ta); Tp_dT = Tc_dT/(3.0*Ta); T5 = sqrt(Tq*Tq + Tp*Tp*Tp); T5_dVxb = 2.0*Tq*Tq_dVxb / (2.0*T5); T5_dVgb = 2.0*Tq*Tq_dVgb / (2.0*T5); T5_dT = (2.0*Tq*Tq_dT + 3.0*Tp*Tp*Tp_dT) / (2.0*T5); Tu = pow(-Tq + T5,C_1o3); Tu_dVxb = Tu / (3.0 * (-Tq + T5)) * (-Tq_dVxb + T5_dVxb); Tu_dVgb = Tu / (3.0 * (-Tq + T5)) * (-Tq_dVgb + T5_dVgb); Tu_dT = Tu / (3.0 * (-Tq + T5)) * (-Tq_dT + T5_dT); Tv = -pow(Tq + T5,C_1o3); Tv_dVxb = Tv / (3.0 * (-Tq - T5)) * (-Tq_dVxb - T5_dVxb); Tv_dVgb = Tv / (3.0 * (-Tq - T5)) * (-Tq_dVgb - T5_dVgb); Tv_dT = Tv / (3.0 * (-Tq - T5)) * (-Tq_dT - T5_dT ); TX = Tu + Tv - Tb/(3.0*Ta); TX_dVxb = Tu_dVxb + Tv_dVxb; TX_dVgb = Tu_dVgb + Tv_dVgb; TX_dT = Tu_dT + Tv_dT ; Ps0_iniA = TX * beta_inv - Vxbgmtcl ; Ps0_iniA_dVxb = TX_dVxb * beta_inv - Vxbgmtcl_dVxbgmt; Ps0_iniA_dVgb = TX_dVgb * beta_inv; Ps0_iniA_dT = TX_dT * beta_inv + TX * beta_inv_dT - Vxbgmtcl_dT; Chi = beta * ( Ps0_iniA + Vxbgmtcl ) ; Chi_dVxb = beta * ( Ps0_iniA_dVxb + Vxbgmtcl_dVxbgmt ) ; Chi_dVgb = beta * ( Ps0_iniA_dVgb ) ; Chi_dT = beta_dT * ( Ps0_iniA + Vxbgmtcl ) + beta * ( Ps0_iniA_dT + Vxbgmtcl_dT ); } if ( model->HSMHV_coqovsm > 0 ) { /*-----------------------------------* * - Ps0_iniB : upper bound. *-----------------*/ flg_ovzone += 2; VgpLD_shift = VgpLD + Vxbgmtcl + 0.1; VgpLD_shift_dVgb = VgpLD_dVgb; VgpLD_shift_dVxb = Vxbgmtcl_dVxbgmt; VgpLD_shift_dT = Vxbgmtcl_dT; exp_bVbs = exp( beta * - Vxbgmtcl ) + small ; exp_bVbs_dVxb = - exp_bVbs * beta * Vxbgmtcl_dVxbgmt; exp_bVbs_dT = - exp_bVbs * (beta_dT*Vxbgmtcl + beta*Vxbgmtcl_dT); T0 = here->HSMHV_nin / Nover_func; T0_dT = Nin_dT / Nover_func; cnst1over = T0 * T0; cnst1over_dT = 2.0 * T0 * T0_dT; gamma = cnst1over * exp_bVbs ; gamma_dVxb = cnst1over * exp_bVbs_dVxb; gamma_dT = cnst1over_dT * exp_bVbs + cnst1over * exp_bVbs_dT; T0 = beta2 * fac1p2; T0_dT = 2.0 * beta * fac1 * (beta_dT*fac1+beta*fac1_dT); psi = beta*VgpLD_shift; psi_dVgb = beta*VgpLD_shift_dVgb; psi_dVxb = beta*VgpLD_shift_dVxb; psi_dT = beta_dT*VgpLD_shift + beta*VgpLD_shift_dT; Chi_1 = log(gamma*T0 + psi*psi) - log(cnst1over*T0) + beta*Vxbgmtcl; Chi_1_dVgb = 2.0*psi*psi_dVgb/ (gamma*T0 + psi*psi); Chi_1_dVxb = (gamma_dVxb*T0+2.0*psi*psi_dVxb)/(gamma*T0+psi*psi) + beta*Vxbgmtcl_dVxbgmt; Chi_1_dT = (gamma_dT*T0+gamma*T0_dT+2.0*psi*psi_dT)/(gamma*T0+psi*psi) - (cnst1over_dT*T0 + cnst1over*T0_dT)/(cnst1over*T0) + beta_dT*Vxbgmtcl + beta*Vxbgmtcl_dT; Fn_SU2( Chi_1, Chi_1, psi, 1.0, T1, T2 ); Chi_1_dVgb = Chi_1_dVgb*T1 + psi_dVgb*T2; Chi_1_dVxb = Chi_1_dVxb*T1 + psi_dVxb*T2; Chi_1_dT = Chi_1_dT *T1 + psi_dT *T2; /* 1 fixpoint step for getting more accurate Chi_B */ psi -= Chi_1 ; psi_dVgb -= Chi_1_dVgb ; psi_dVxb -= Chi_1_dVxb ; psi_dT -= Chi_1_dT ; psi += beta*0.1 ; psi_dT += beta_dT*0.1 ; /* psi_B = psi;*/ /* arg_B = psi*psi/(gamma*T0);*/ Chi_B = log(gamma*T0 + psi*psi) - log(cnst1over*T0) + beta*Vxbgmtcl; Chi_B_dVgb = 2.0*psi*psi_dVgb/ (gamma*T0 + psi*psi); Chi_B_dVxb = (gamma_dVxb*T0+2.0*psi*psi_dVxb)/(gamma*T0+psi*psi) + beta*Vxbgmtcl_dVxbgmt; Chi_B_dT = (gamma_dT*T0+gamma*T0_dT+2.0*psi*psi_dT)/(gamma*T0+psi*psi) - (cnst1over_dT*T0 + cnst1over*T0_dT)/(cnst1over*T0) + beta_dT*Vxbgmtcl + beta*Vxbgmtcl_dT; Ps0_iniB = Chi_B/beta - Vxbgmtcl ; /* Ps0_iniB_dVgb = Chi_B_dVgb/beta; Ps0_iniB_dVxb = Chi_B_dVxb/beta- Vxbgmtcl_dVxbgmt; Ps0_iniB_dT = Chi_B_dT/beta - Chi_B/(beta*beta)*beta_dT - Vxbgmtcl_dT; */ /* construction of Ps0LD by taking Ps0_iniB as an upper limit of Ps0_iniA * * Limiting is done for Chi rather than for Ps0LD, to avoid shifting * for Fn_SU2 */ Chi_A = Chi; Chi_A_dVxb = Chi_dVxb; Chi_A_dVgb = Chi_dVgb; Chi_A_dT = Chi_dT; Fn_SU2( Chi, Chi_A, Chi_B, c_ps0ini_2*75.00, T1, T2 ); /* org: 50 */ Chi_dVgb = Chi_A_dVgb * T1 + Chi_B_dVgb * T2; Chi_dVxb = Chi_A_dVxb * T1 + Chi_B_dVxb * T2; Chi_dT = Chi_A_dT * T1 + Chi_B_dT * T2; } /* updating Ps0LD */ Ps0LD= Chi/beta - Vxbgmtcl ; Ps0LD_dVgb = Chi_dVgb/beta; Ps0LD_dVxb = Chi_dVxb/beta- Vxbgmtcl_dVxbgmt; Ps0LD_dT = Chi_dT/beta - Chi/(beta*beta)*beta_dT - Vxbgmtcl_dT; T1 = Chi - 1.0 + exp(-Chi); T1_dVxb = (1.0 - exp(-Chi)) * Chi_dVxb ; T1_dVgb = (1.0 - exp(-Chi)) * Chi_dVgb ; T1_dT = (1.0 - exp(-Chi)) * Chi_dT ; if (T1 < epsm10) { T1 = epsm10 ; T1_dVxb = 0.0 ; T1_dVgb = 0.0 ; T1_dT = 0.0 ; } T2 = sqrt(T1); QbuLD = cnst0over_func * T2 ; T3 = cnst0over_func * 0.5 / T2 ; QbuLD_dVxb = T3 * T1_dVxb ; QbuLD_dVgb = T3 * T1_dVgb ; QbuLD_dT = T3 * T1_dT + cnst0over_func_dT * T2 ; /*-----------------------------------------------------------* * QsuLD : Qovs or Qovd in unit area. * note: QsuLD = Qdep+Qinv. *-----------------*/ QsuLD = Cox0 * ( VgpLD - Ps0LD ) ; QsuLD_dVxb = Cox0 * ( - Ps0LD_dVxb ) ; QsuLD_dVgb = Cox0 * ( VgpLD_dVgb - Ps0LD_dVgb ) ; QsuLD_dT = Cox0 * ( - Ps0LD_dT ) ; if ( model->HSMHV_coqovsm == 1 ) { /* take initial values from analytical model */ /*---------------------------------------------------* * Calculation of Ps0LD. (beginning of Newton loop) * - Fs0 : Fs0 = 0 is the equation to be solved. * - dPs0 : correction value. *-----------------*/ /* initial value too close to flat band should not be used */ // if (Ps0LD+Vxbgmtcl < 1.0e-2) Ps0LD = 1.0e-2 - Vxbgmtcl; exp_bVbs = exp( beta * - Vxbgmtcl ) ; T0 = here->HSMHV_nin / Nover_func; cnst1over = T0 * T0; cnst1over_dT = 2.0 * T0 * ( Nin_dT / Nover_func ); cfs1 = cnst1over * exp_bVbs ; flg_conv = 0 ; for ( lp_s0 = 1 ; lp_s0 <= 2*lp_s0_max + 1 ; lp_s0 ++ ) { Chi = beta * ( Ps0LD + Vxbgmtcl ) ; if ( Chi < znbd5 ) { /*-------------------------------------------* * zone-D1/D2. (Ps0LD) *-----------------*/ fi = Chi * Chi * Chi * ( cn_im53 + Chi * ( cn_im54 + Chi * cn_im55 ) ) ; fi_dChi = Chi * Chi * ( 3 * cn_im53 + Chi * ( 4 * cn_im54 + Chi * 5 * cn_im55 ) ) ; fs01 = cfs1 * fi * fi ; fs01_dPs0 = cfs1 * beta * 2 * fi * fi_dChi ; fb = Chi * ( cn_nc51 + Chi * ( cn_nc52 + Chi * ( cn_nc53 + Chi * ( cn_nc54 + Chi * cn_nc55 ) ) ) ) ; fb_dChi = cn_nc51 + Chi * ( 2 * cn_nc52 + Chi * ( 3 * cn_nc53 + Chi * ( 4 * cn_nc54 + Chi * 5 * cn_nc55 ) ) ) ; fs02 = sqrt( fb * fb + fs01 + small ) ; fs02_dPs0 = ( beta * fb_dChi * 2 * fb + fs01_dPs0 ) / ( fs02 + fs02 ) ; } else { /*-------------------------------------------* * zone-D3. (Ps0LD) *-----------------*/ if ( Chi < large_arg ) { /* avoid exp_Chi to become extremely large */ exp_Chi = exp( Chi ) ; fs01 = cfs1 * ( exp_Chi - 1.0e0 ) ; fs01_dPs0 = cfs1 * beta * ( exp_Chi ) ; } else { exp_bPs0 = exp( beta*Ps0LD ) ; fs01 = cnst1over * ( exp_bPs0 - exp_bVbs ) ; fs01_dPs0 = cnst1over * beta * exp_bPs0 ; } fs02 = sqrt( Chi - 1.0 + fs01 ) ; fs02_dPs0 = ( beta + fs01_dPs0 ) / fs02 * 0.5 ; } /* end of if ( Chi ... ) block */ /*-----------------------------------------------------------* * Fs0 *-----------------*/ Fs0 = VgpLD - Ps0LD - fac1 * fs02 ; Fs0_dPs0 = - 1.0e0 - fac1 * fs02_dPs0 ; if ( flg_conv == 1 ) break ; dPs0 = - Fs0 / Fs0_dPs0 ; /*-------------------------------------------* * Update Ps0LD . *-----------------*/ dPlim = 0.5*dP_max*(1.0 + Fn_Max(1.e0,fabs(Ps0LD))) ; if ( fabs( dPs0 ) > dPlim ) dPs0 = dPlim * Fn_Sgn( dPs0 ) ; Ps0LD = Ps0LD + dPs0 ; TX = -Vxbgmtcl + ps_conv / 2 ; if ( Ps0LD < TX ) Ps0LD = TX ; /*-------------------------------------------* * Check convergence. *-----------------*/ if ( fabs( dPs0 ) <= ps_conv && fabs( Fs0 ) <= gs_conv ) { flg_conv = 1 ; } } /* end of Ps0LD Newton loop */ /*-------------------------------------------* * Procedure for diverged case. *-----------------*/ if ( flg_conv == 0 ) { fprintf( stderr , "*** warning(HiSIM_HV): Went Over Iteration Maximum (Ps0LD)\n" ) ; fprintf( stderr , " -Vxbgmtcl = %e Vgbgmt = %e\n" , -Vxbgmtcl , Vgbgmt ) ; } /*---------------------------------------------------* * Evaluate derivatives of Ps0LD. *-----------------*/ Chi_dT = beta_dT * ( Ps0LD + Vxbgmtcl ) + beta * Vxbgmtcl_dT; exp_bVbs_dT = - ( beta_dT * Vxbgmtcl + beta * Vxbgmtcl_dT ) * exp_bVbs; cfs1_dT = exp_bVbs * cnst1over_dT + exp_bVbs_dT * cnst1over; if ( Chi < znbd5 ) { fs01_dVbs = cfs1 * beta * fi * ( - fi + 2 * fi_dChi ) ; /* fs01_dVxbgmtcl */ fs01_dT = cfs1 * 2 * fi * fi_dChi * Chi_dT + fi * fi * cfs1_dT ; T2 = 1.0e0 / ( fs02 + fs02 ) ; fs02_dVbs = ( + beta * fb_dChi * 2 * fb + fs01_dVbs ) * T2 ; /* fs02_dVxbgmtcl */ fs02_dT = ( 2 * fb * fb_dChi * Chi_dT + fs01_dT ) * T2 ; } else { if ( Chi < large_arg ) { fs01_dVbs = + cfs1 * beta ; /* fs01_dVxbgmtcl */ exp_Chi_dT = exp_Chi * Chi_dT ; fs01_dT = ( exp_Chi - 1.0e0 ) * cfs1_dT + cfs1 * exp_Chi_dT ; } else { fs01_dVbs = + cfs1 * beta ; exp_bPs0_dT = exp_bPs0 * Ps0LD * beta_dT ; fs01_dT = cnst1over_dT*(exp_bPs0-exp_bVbs) + cnst1over*(exp_bPs0_dT-exp_bVbs_dT) ; } T2 = 0.5e0 / fs02 ; fs02_dVbs = ( + beta + fs01_dVbs ) * T2 ; /* fs02_dVxbgmtcl */ fs02_dT = T2 * ( Chi_dT + fs01_dT ) ; } T1 = 1.0 / Fs0_dPs0 ; Ps0LD_dVxb = - ( - fac1 * fs02_dVbs ) * T1 ; Ps0LD_dVds = 0.0 ; Ps0LD_dVgb = - ( VgpLD_dVgb - fac1_dVgs * fs02 ) * T1 ; Ps0LD_dT = - ( - ( fac1 * fs02_dT + fac1_dT * fs02 ) ) * T1; Chi_dT = beta_dT * ( Ps0LD + Vxbgmtcl ) + beta * ( Ps0LD_dT + Vxbgmtcl_dT ); if ( Chi < znbd5 ) { /*-------------------------------------------* * zone-D1/D2. (Ps0LD) *-----------------*/ if ( Chi < znbd3 ) { flg_ovzone = 1; } else { flg_ovzone = 2; } Xi0 = fb * fb + epsm10 ; T1 = 2 * fb * fb_dChi * beta ; Xi0_dVbs = T1 * ( Ps0LD_dVxb + 1.0 ) ; /* Xi0_dVxbgmtcl */ Xi0_dVds = T1 * Ps0LD_dVds ; Xi0_dVgs = T1 * Ps0LD_dVgb ; Xi0_dT = 2 * fb * fb_dChi * Chi_dT ; Xi0p12 = fb + epsm10 ; T1 = fb_dChi * beta ; Xi0p12_dVbs = T1 * ( Ps0LD_dVxb + 1.0 ) ; /* Xi0p12_dVxbgmtcl */ Xi0p12_dVds = T1 * Ps0LD_dVds ; Xi0p12_dVgs = T1 * Ps0LD_dVgb ; Xi0p12_dT = fb_dChi * Chi_dT ; Xi0p32 = fb * fb * fb + epsm10 ; T1 = 3 * fb * fb * fb_dChi * beta ; Xi0p32_dVbs = T1 * ( Ps0LD_dVxb + 1.0 ) ; /* Xi0p32_dVxbgmtcl */ Xi0p32_dVds = T1 * Ps0LD_dVds ; Xi0p32_dVgs = T1 * Ps0LD_dVgb ; Xi0p32_dT = 3 * fb * fb * fb_dChi * Chi_dT ; } else { /*-------------------------------------------* * zone-D3. (Ps0LD) *-----------------*/ flg_ovzone = 3 ; Xi0 = Chi - 1.0e0 ; Xi0_dVbs = beta * ( Ps0LD_dVxb + 1.0e0 ) ; /* Xi0_dVxbgmtcl */ Xi0_dVds = beta * Ps0LD_dVds ; Xi0_dVgs = beta * Ps0LD_dVgb ; Xi0_dT = Chi_dT ; Xi0p12 = sqrt( Xi0 ) ; T1 = 0.5e0 / Xi0p12 ; Xi0p12_dVbs = T1 * Xi0_dVbs ; Xi0p12_dVds = T1 * Xi0_dVds ; Xi0p12_dVgs = T1 * Xi0_dVgs ; Xi0p12_dT = T1 * Xi0_dT ; Xi0p32 = Xi0 * Xi0p12 ; T1 = 1.5e0 * Xi0p12 ; Xi0p32_dVbs = T1 * Xi0_dVbs ; Xi0p32_dVds = T1 * Xi0_dVds ; Xi0p32_dVgs = T1 * Xi0_dVgs ; Xi0p32_dT = T1 * Xi0_dT ; } /* end of if ( Chi ... ) block */ /*-----------------------------------------------------------* * - Recalculate the derivatives of fs01 and fs02. *-----------------*/ fs01_dVbs = Ps0LD_dVxb * fs01_dPs0 + fs01_dVbs ; fs01_dVds = Ps0LD_dVds * fs01_dPs0 ; fs01_dVgs = Ps0LD_dVgb * fs01_dPs0 ; fs01_dT = Ps0LD_dT * fs01_dPs0 + fs01_dT; fs02_dVbs = Ps0LD_dVxb * fs02_dPs0 + fs02_dVbs ; /* fs02_dVxb = Ps0LD_dVds * fs02_dPs0 ;*/ fs02_dVgb = Ps0LD_dVgb * fs02_dPs0 ; fs02_dT = Ps0LD_dT * fs02_dPs0 + fs02_dT; /*-----------------------------------------------------------* * QbuLD and QiuLD *-----------------*/ QbuLD = cnst0over_func * Xi0p12 ; QbuLD_dVxb = cnst0over_func * Xi0p12_dVbs ; QbuLD_dVgb = cnst0over_func * Xi0p12_dVgs ; QbuLD_dT = cnst0over_func * Xi0p12_dT + cnst0over_func_dT * Xi0p12; T1 = 1.0 / ( fs02 + Xi0p12 ) ; QiuLD = cnst0over_func * fs01 * T1 ; T2 = 1.0 / ( fs01 + epsm10 ) ; QiuLD_dVbs = QiuLD * ( fs01_dVbs * T2 - ( fs02_dVbs + Xi0p12_dVbs ) * T1 ) ; QiuLD_dVgs = QiuLD * ( fs01_dVgs * T2 - ( fs02_dVgb + Xi0p12_dVgs ) * T1 ) ; T1_dT = - T1 * T1 * ( fs02_dT + Xi0p12_dT ); QiuLD_dT = cnst0over_func * ( fs01 * T1_dT + T1 * fs01_dT ) + fs01 * T1 * cnst0over_func_dT; /*-----------------------------------------------------------* * Extrapolation: X_dVxbgmt = X_dVxbgmtcl * Vxbgmtcl_dVxbgmt *-----------------*/ QbuLD_dVxb *= Vxbgmtcl_dVxbgmt ; QiuLD_dVbs *= Vxbgmtcl_dVxbgmt ; /*-----------------------------------------------------------* * Total overlap charge *-----------------*/ QsuLD = QbuLD + QiuLD; QsuLD_dVxb = QbuLD_dVxb + QiuLD_dVbs; QsuLD_dVgb = QbuLD_dVgb + QiuLD_dVgs; QsuLD_dT = QbuLD_dT + QiuLD_dT; } /* end of COQOVSM branches */ } /* end of Vgbgmt region blocks */ /* convert to source ref. */ /* Ps0LD_dVbs = Ps0LD_dVxb * Vxbgmt_dVbs + Ps0LD_dVgb * Vgbgmt_dVbs ;*/ Ps0LD_dVds = Ps0LD_dVxb * Vxbgmt_dVds + Ps0LD_dVgb * Vgbgmt_dVds ; /* Ps0LD_dVgs = Ps0LD_dVxb * Vxbgmt_dVgs + Ps0LD_dVgb * Vgbgmt_dVgs ;*/ QsuLD_dVbs = QsuLD_dVxb * Vxbgmt_dVbs + QsuLD_dVgb * Vgbgmt_dVbs ; QsuLD_dVds = QsuLD_dVxb * Vxbgmt_dVds + QsuLD_dVgb * Vgbgmt_dVds ; QsuLD_dVgs = QsuLD_dVxb * Vxbgmt_dVgs + QsuLD_dVgb * Vgbgmt_dVgs ; QbuLD_dVbs = QbuLD_dVxb * Vxbgmt_dVbs + QbuLD_dVgb * Vgbgmt_dVbs ; QbuLD_dVds = QbuLD_dVxb * Vxbgmt_dVds + QbuLD_dVgb * Vgbgmt_dVds ; QbuLD_dVgs = QbuLD_dVxb * Vxbgmt_dVgs + QbuLD_dVgb * Vgbgmt_dVgs ; /* inversion charge = total - depletion */ QiuLD = QsuLD - QbuLD ; QiuLD_dVbs = QsuLD_dVbs - QbuLD_dVbs ; QiuLD_dVds = QsuLD_dVds - QbuLD_dVds ; QiuLD_dVgs = QsuLD_dVgs - QbuLD_dVgs ; QiuLD_dT = QsuLD_dT - QbuLD_dT ; /* End HSMHVevalQover */ tmpk8ny_4pz/src/spicelib/devices/hisimhv1/Makefile.am0000644000175000017500000000127413546075722022753 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libhisimhv1.la libhisimhv1_la_SOURCES = hisimhv.h \ hsmhv.c \ hsmhvacld.c \ hsmhvask.c \ hsmhvcvtest.c \ hsmhvdef.h \ hsmhveval.c \ hsmhveval_qover.h \ hsmhvevalenv.h \ hsmhvext.h \ hsmhvgetic.c \ hsmhvinit.c \ hsmhvinit.h \ hsmhvitf.h \ hsmhvld.c \ hsmhvld_info_eval.h \ hsmhvmask.c \ hsmhvmpar.c \ hsmhvnoi.c \ hsmhvpar.c \ hsmhvpzld.c \ hsmhvset.c \ hsmhvsoachk.c \ hsmhvtemp.c \ hsmhvtemp_eval.h \ hsmhvtrunc.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhveval.c0000644000175000017500000072415213546075722023067 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2012 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 1 SUBVERSION : 2 REVISION : 4 ) Model Parameter VERSION : 1.23 FILE : hsmhveval.c DATE : 2013.04.30 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM_HV model. -----HISIM_HV Distribution Statement and Copyright Notice-------------- Hiroshima University and/or Semiconductor Technology Academic Research Center ("STARC") grants to Licensee a worldwide, royalty-free, sub-licensable, retroactive, perpetual, irrevocable license to make, have made, offer to sell, sell, import, export, use, copy, redistribute, perform, display and incorporate HiSIM_HV intellectual property (the "License") subject to the conditions set forth below. This License includes rights to use and modify copyrighted material for any purpose if the copyright is acknowledged as well as the use of related patents which STARC owns, has applied for or will apply for in connection with HiSIM_HV intellectual property for the purpose of implementing and using he HiSIM_HV intellectual property in connection with the standard. This license applies to all past and future versions of HiSIM_HV. 1. HiSIM_HV intellectual property is offered "as is" without any warranty, explicit or implied, or service support. Hiroshima University, STARC, its University staff and employees assume no liability for the quality and performance of HiSIM_HV intellectual property. 2. As the owner of the HiSIM_HV intellectual property, and all other related rights, Hiroshima University and/or STARC grant the License as set forth above. 3. A Licensee may not charge an end user a fee for the HiSIM_HV source code, which Hiroshima University and STARC own, by itself, however, a Licensee may charge an end user a fee for alterations or additions to the HiSIM_HV source code or for maintenance service. 4. A Licensee of HiSIM_HV intellectual property agrees that Hiroshima University and STARC are the developers of HiSIM_HV in all products containing HiSIM_HV and the alteration thereof (subject to Licensee's ownership of the alterations). If future versions of HiSIM_HV incorporate elements of other CMC models the copyrights of those elements remains with the original developers. For this purpose the copyright notice as shown below shall be used. "The HiSIM_HV source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code, is owned by Hiroshima University and/or STARC." 5. A Licensee of HiSIM_HV intellectual property will comply with the export obligations pertaining to the export of the HiSIM_HV intellectual property. 6. By using HiSIM_HV intellectual property owned by Hiroshima University and/or STARC, Licensee agrees not to prosecute any patents or patent held by Licensee that are required for implementation of HiSIM_HV against any party who is infringing those patents solely by implementing and/or using the HiSIM_HV standard. Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June. 2008 (revised in June 2011) *************************************************************************/ /********************************************************************* * Memorandum on programming * * (1) Bias (x: b|d|g) * . vxs : Input arguments: Outer branch voltages. * . vxsi: Input arguments: Inner branch voltages. * . deltemp: Input argument: delta temperature. * . Vxse: Internal name for outer branch voltages. * . Vxs: Internal name for inner branch voltages. * . Vbscl:Inner bulk source voltage is clamped within a specified region. * . Y_dVxs denotes the partial derivative of Y w.r.t. Vxs. * . Y_dVxse denotes the partial derivative of Y w.r.t. Vxse. * . Y_dT denotes derivatives with respect to deltemp. * * (2) Device Mode * . Normal mode (Vds>=0 for nMOS) is assumed. * . The sign of Vdse is assumed to be changed simultaneously, if the sign of Vds is changed; * hence Vdse may become negative even thogh Vds >=0. * . In case of reverse mode, parent routines have to properly * transform or interchange inputs and outputs except ones * related to junction diodes, which are regarded as being * fixed to the nodal S/D. * * (3) Modification for symmetry at Vds=0 * . Vxsz: Modified bias. (x: b|d|g) * . Ps0z: Modified Ps0. * . The following variables are calculated as a function of * modified biases or potential. * Tox, Cox, (-- with quantum effect) * Vth*, dVth*, dPpg, Igate, Igidl, Igisl. * . The following variables are calculated using a transform * function. * Lred * * (4) Zones and Cases (terminology) * * Chi:=beta*(Ps0-Vbs)= 0 3 5 * * Zone: A | D1 | D2 | D3 * | * (accumulation)|(depletion) * | * Vgs = Vgs_fb Vth * / / * Case: Nonconductive / Conductive * / * VgVt:=Qn0/Cox= VgVt_small * * . Ids is regarded as zero in zone-A. * . Procedure to calculate Psl and dependent variables is * omitted in the nonconductive case. Ids and Qi are regarded * as zero in this case. * *********************************************************************/ /*===========================================================* * Preamble. *=================*/ /*---------------------------------------------------* * Header files. *-----------------*/ #include "ngspice/ngspice.h" #ifdef __STDC__ /* #include */ #endif /*-----------------------------------* * HiSIM macros *-----------------*/ #include "hisimhv.h" #include "hsmhvevalenv.h" #define C_IDD_MIN 1.0e-15 #define C_sub_delta 0.1 /* CHECK! */ #define C_sub_delta2 1.0e-9 /* CHECK! */ #define C_gidl_delta 0.5 /* local variables used in macro functions */ static double TMF0 , TMF1 , TMF2 , TMF3 , TMF4 ; /*===========================================================* * pow *=================*/ #ifdef POW_TO_EXP_AND_LOG #define Fn_Pow( x , y ) exp( y * log( x ) ) #else #define Fn_Pow( x , y ) pow( x , y ) #endif /*===========================================================* * Exp() for PGD. * - ExpLim(-3)=0 *=================*/ #define Fn_ExpLim( y , x , dx ) { \ if ( (x) < -3.0 ) { \ dx = 0.0 ; \ y = 0.0 ; \ } else if ( (x) < 0.0 ) { \ dx = 1.0 + (x) * ( 2 * (1.0/3.0) + (x) * 3 * (1.0/27.0) ) ; \ y = 1.0 + (x) * ( 1.0 + (x) * ( (1.0/3.0) + (x) * (1.0/27.0) ) ) ; \ } else { \ dx = 1.0 + (x) * ( 2 * (1.0/3.0) + (x) * ( 3 * 0.0402052934513951 \ + (x) * 4 * 0.148148111111111 ) ) ; \ y = 1.0 + (x) * ( 1.0 + (x) * ( (1.0/3.0) + (x) * ( 0.0402052934513951 \ + (x) * 0.148148111111111 ) ) ) ; \ } \ } /*===========================================================* * Macro Functions for ceiling/flooring/symmetrization. *=================*/ /*---------------------------------------------------* * smoothUpper: ceiling. * y = xmax - 0.5 ( arg + sqrt( arg^2 + 4 xmax delta ) ) * arg = xmax - x - delta *-----------------*/ #define Fn_SU( y , x , xmax , delta , dx ) { \ TMF1 = ( xmax ) - ( x ) - ( delta ) ; \ TMF2 = 4.0 * ( xmax ) * ( delta) ; \ TMF2 = TMF2 > 0.0 ? TMF2 : - ( TMF2 ) ; \ TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \ dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \ y = ( xmax ) - 0.5 * ( TMF1 + TMF2 ) ; \ } #define Fn_SU2( y , x , xmax , delta , dy_dx , dy_dxmax ) { \ TMF1 = ( xmax ) - ( x ) - ( delta ) ; \ TMF2 = 4.0 * ( xmax ) * ( delta) ; \ TMF2 = TMF2 > 0.0 ? TMF2 : - ( TMF2 ) ; \ TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \ dy_dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \ dy_dxmax = 0.5 * ( 1.0 - ( TMF1 + 2.0 * delta ) / TMF2 ) ; \ y = ( xmax ) - 0.5 * ( TMF1 + TMF2 ) ; \ } /*---------------------------------------------------* * smoothLower: flooring. * y = xmin + 0.5 ( arg + sqrt( arg^2 + 4 xmin delta ) ) * arg = x - xmin - delta *-----------------*/ #define Fn_SL( y , x , xmin , delta , dx ) { \ TMF1 = ( x ) - ( xmin ) - ( delta ) ; \ TMF2 = 4.0 * ( xmin ) * ( delta ) ; \ TMF2 = TMF2 > 0.0 ? TMF2 : - ( TMF2 ) ; \ TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \ dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \ y = ( xmin ) + 0.5 * ( TMF1 + TMF2 ) ; \ } #define Fn_SL2( y , x , xmin , delta , dy_dx, dy_dxmin ) { \ TMF1 = ( x ) - ( xmin ) - ( delta ) ; \ TMF2 = 4.0 * ( xmin ) * ( delta ) ; \ TMF2 = TMF2 > 0.0 ? TMF2 : - ( TMF2 ) ; \ TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \ dy_dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \ dy_dxmin = 0.5 * ( 1.0 - ( TMF1 - 2.0 * delta ) / TMF2 ) ; \ y = ( xmin ) + 0.5 * ( TMF1 + TMF2 ) ; \ } /*---------------------------------------------------* * smoothZero: flooring to zero. * y = 0.5 ( x + sqrt( x^2 + 4 delta^2 ) ) *-----------------*/ #define Fn_SZ( y , x , delta , dx ) { \ TMF2 = sqrt ( ( x ) * ( x ) + 4.0 * ( delta ) * ( delta) ) ; \ dx = 0.5 * ( 1.0 + ( x ) / TMF2 ) ; \ y = 0.5 * ( ( x ) + TMF2 ) ; \ if( y < 0.0 ) { y=0.0; dx=0.0; } \ } /*---------------------------------------------------* * CeilingPow: ceiling for positive x, flooring for negative x. * y = x * xmax / ( x^{2m} + xmax^{2m} )^{1/(2m)} * note: * - xmax has to be positive. * - -xmax < y < xmax. * - dy/dx|_{x=0} = 1. *-----------------*/ #define Fn_CP( y , x , xmax , pw , dx ) { \ double x2 = (x) * (x) ; \ double xmax2 = (xmax) * (xmax) ; \ double xp = 1.0 , xmp = 1.0 ; \ int m =0, mm =0; \ double arg_cp =0.0, dnm =0.0; \ for ( m = 0 ; m < pw ; m ++ ) { xp *= x2 ; xmp *= xmax2 ; } \ arg_cp = xp + xmp ; \ dnm = arg_cp ; \ if ( pw == 1 || pw == 2 || pw == 4 || pw == 8 ) { \ if ( pw == 1 ) { mm = 1 ; \ } else if ( pw == 2 ) { mm = 2 ; \ } else if ( pw == 4 ) { mm = 3 ; \ } else if ( pw == 8 ) { mm = 4 ; } \ for ( m = 0 ; m < mm ; m ++ ) { dnm = sqrt( dnm ) ; } \ } else { dnm = Fn_Pow( dnm , 1.0 / ( 2.0 * pw ) ) ; } \ dnm = 1.0 / dnm ; \ y = (x) * (xmax) * dnm ; \ dx = (xmax) * xmp * dnm / arg_cp ; \ } /*---------------------------------------------------* * Declining function using a polynomial. *-----------------*/ #define Fn_DclPoly4( y , x , dx ) { \ TMF2 = (x) * (x) ; \ TMF3 = TMF2 * (x) ; \ TMF4 = TMF2 * TMF2 ; \ y = 1.0 / ( 1.0 + (x) + TMF2 + TMF3 + TMF4 ) ; \ dx = - ( 1.0 + 2.0 * (x) + 3.0 * TMF2 + 4.0 * TMF3 ) * y * y ; \ } #define Fn_DclPoly6( y , x , dx ) { \ TMF2 = (x) * (x) ; \ TMF3 = TMF2 * (x) ; \ TMF4 = TMF2 * TMF2 ; \ TMF5 = TMF2 * TMF3 ; \ TMF6 = TMF3 * TMF3 ; \ y = 1.0 / ( 1.0 + (x) + TMF2 + TMF3 + TMF4 + TMF5 + TMF6 ) ; \ dx = - ( 1.0 + 2.0 * (x) + 3.0 * TMF2 + 4.0 * TMF3 \ + 5.0 * TMF4 + 6.0 * TMF5 ) * y * y ; \ } /*---------------------------------------------------* * "smoothUpper" using a polynomial *-----------------*/ #define Fn_SUPoly4( y , x , xmax , dx ) { \ TMF1 = (x) / xmax ; \ Fn_DclPoly4( y , TMF1 , dx ) ; \ y = xmax * ( 1.0 - y ) ; \ dx = - dx ; \ } #define Fn_SUPoly4m( y , x , xmax , dx , dxmax ) { \ TMF1 = (x) / xmax ; \ Fn_DclPoly4( TMF0 , TMF1 , dx ) ; \ y = xmax * ( 1.0 - TMF0 ) ; \ dxmax = 1.0 - TMF0 + TMF1 * dx ; \ dx = - dx ; \ } #define Fn_SUPoly6m( y , x , xmax , dx , dxmax ) { \ TMF1 = (x) / xmax ; \ Fn_DclPoly6( TMF0 , TMF1 , dx ) ; \ y = xmax * ( 1.0 - TMF0 ) ; \ dxmax = 1.0 - TMF0 + TMF1 * dx ; \ dx = - dx ; \ } /*---------------------------------------------------* * SymAdd: evaluate additional term for symmetry. *-----------------*/ #define Fn_SymAdd( y , x , add0 , dx ) \ { \ TMF1 = 2.0 * ( x ) / ( add0 ) ; \ TMF2 = 1.0 + TMF1 * ( (1.0/2) + TMF1 * ( (1.0/6) \ + TMF1 * ( (1.0/24) + TMF1 * ( (1.0/120) \ + TMF1 * ( (1.0/720) + TMF1 * (1.0/5040) ) ) ) ) ) ; \ TMF3 = (1.0/2) + TMF1 * ( (1.0/3) \ + TMF1 * ( (1.0/8) + TMF1 * ( (1.0/30) \ + TMF1 * ( (1.0/144) + TMF1 * (1.0/840) ) ) ) ) ; \ y = add0 / TMF2 ; \ dx = - 2.0 * TMF3 / ( TMF2 * TMF2 ) ; \ } /*===========================================================* * Function hsmhvevaluate. *=================*/ int HSMHVevaluate ( double Vdse, /* external branch voltage ( Vds >= 0 are assumed -> Vdse might be negative.) */ double Vgse, /* external branch voltage */ double Vbse, /* external branch voltage */ double Vds, /* inner branch voltage */ double Vgs, /* inner branch voltage */ double Vbs, /* inner branch voltage */ double vbs_jct, double vbd_jct, double Vsubs, /* substrate-source voltage */ double deltemp, HSMHVinstance *here, HSMHVmodel *model, CKTcircuit *ckt ) { HSMHVbinningParam *pParam = &here->pParam ; HSMHVmodelMKSParam *modelMKS = &model->modelMKS ; HSMHVhereMKSParam *hereMKS = &here->hereMKS ; /*-----------------------------------* * Constants for Smoothing functions *---------------*/ const double vth_dlt = 1.0e-3 ; /* const double cclmmdf = 1.0e-2 ;*/ const double cclmmdf = 1.0e-1 ; const double C_cm2m = 1.0e-2 ; const double qme_dlt = 1.0e-9 * C_cm2m ; const double rdsl2_dlt = 10.0e-3 * C_cm2m ; const double rdsu2_dlt = 50.0e-6 * C_cm2m ; const double rdsz_dlt = 0.1e-3 * C_cm2m ; const double qme2_dlt = 5.0e-2 ; const double eef_dlt = 1.0e-2 / C_cm2m ; const double sti2_dlt = 2.0e-3 ; const double pol_dlt = 5.0e-2 ; const double psia_dlt = 1.0e-3 ; const double psia2_dlt = 5.0e-3 ; const double psisti_dlt = 5.0e-3 ; /*---------------------------------------------------* * Local variables. *-----------------*/ /* Constants ----------------------- */ const int lp_s0_max = 20 ; const int lp_sl_max = 40 ; const double dP_max = 0.1e0 ; const double ps_conv = 1.0e-12 ; /* double ps_conv = 1.0e-13 ;*/ const double gs_conv = 1.0e-8 ; /** depletion **/ const double znbd3 = 3.0e0 ; const double znbd5 = 5.0e0 ; const double cn_nc3 = C_SQRT_2 / 108e0 ; /* 5-degree, contact:Chi=5 */ const double cn_nc51 = 0.707106781186548 ; /* sqrt(2)/2 */ const double cn_nc52 = -0.117851130197758 ; /* -sqrt(2)/12 */ const double cn_nc53 = 0.0178800506338833 ; /* (187 - 112*sqrt(2))/1600 */ const double cn_nc54 = -0.00163730162779191 ; /* (-131 + 88*sqrt(2))/4000 */ const double cn_nc55 = 6.36964918866352e-5 ; /* (1509-1040*sqrt(2))/600000 */ /** inversion **/ /* 3-degree polynomial approx for ( exp[Chi]-1 )^{1/2} */ const double cn_im53 = 2.9693154855770998e-1 ; const double cn_im54 = -7.0536542840097616e-2 ; const double cn_im55 = 6.1152888951331797e-3 ; /** initial guess **/ const double c_ps0ini_2 = 8.0e-4 ; const double c_pslini_1 = 0.3e0 ; const double c_pslini_2 = 3.0e-2 ; const double VgVt_small = 1.0e-12 ; /* const double Vbs_min = model->HSMHV_vbsmin ; */ /* const double Vds_max = 10.5e0 ; */ /* const double Vgs_max = 10.5e0 ; */ const double epsm10 = 10.0e0 * C_EPS_M ; const double small = 1.0e-50 ; const double small2= 1e-12 ; /* for Ra(Vdse) dependence */ const double c_exp_2 = 7.38905609893065 ; const double large_arg = 80 ; // log(1.0e100) ; double Vbs_max = 0.8e0, Vbs_max_dT =0.0 ; double Vbs_bnd = 0.4e0, Vbs_bnd_dT =0.0 ; /* start point of positive Vbs bending */ double Gdsmin = 0.0 ; double Gjmin = ckt->CKTgmin ; /* Internal flags --------------------*/ int flg_err = 0 ; /* error level */ int flg_rsrd = 0 ; /* Flag for handling Rs and Rd */ /* int flg_iprv = 0 ; */ /* Flag for initial guess of Ids -> not necessary any more */ int flg_pprv = 0 ; /* Flag for initial guesses of Ps0 and Pds */ int flg_noqi =0; /* Flag for the cases regarding Qi=Qd=0 */ /* int flg_vbsc = 0 ; */ /* Flag for Vbs confining -> not necessary any more */ int flg_info = 0 ; int flg_conv = 0 ; /* Flag for Poisson loop convergence */ int flg_qme = 0 ; /* Flag for QME */ int flg_nqs=0 ; /* Flag for NQS calculation */ /* Important Variables in HiSIM -------*/ /* confined bias */ double Vbscl=0.0, Vbscl_dVbs=0.0, Vbscl_dT=0.0, Vbscl_dVbs_dVbs = 0.0, Vbscl_dVbs_dT = 0.0 ; double Vgp =0.0, Vgp_dVbs =0.0, Vgp_dVds =0.0, Vgp_dVgs =0.0, Vgp_dT =0.0 ; double Vgs_fb =0.0 ; /* Ps0 : surface potential at the source side */ double Ps0 =0.0, Ps0_dVbs =0.0, Ps0_dVds =0.0, Ps0_dVgs =0.0, Ps0_dT =0.0 ; double Ps0_ini =0.0 ; double Ps0_iniA =0.0, Ps0_iniA_dVxb =0.0, Ps0_iniA_dVgb =0.0, Ps0_iniA_dT =0.0 ; double Ps0_iniB =0.0;/*, Ps0_iniB_dVxb =0.0, Ps0_iniB_dVgb =0.0, Ps0_iniB_dT =0.0 ;*/ /* Psl : surface potential at the drain side */ double Psl =0.0, Psl_dVbs =0.0, Psl_dVds =0.0, Psl_dVgs =0.0, Psl_dT =0.0 ; double Psl_lim =0.0, dPlim =0.0 ; /* Pds := Psl - Ps0 */ double Pds = 0.0, Pds_dVbs = 0.0, Pds_dVds = 0.0, Pds_dVgs =0.0, Pds_dT =0.0 ; double Pds_ini =0.0 ; double Pds_max =0.0 ; /* iteration numbers of Ps0 and Psl equations. */ int lp_s0 = 0 , lp_sl = 0 ; /* Xi0 := beta * ( Ps0 - Vbs ) - 1. */ double Xi0 =0.0, Xi0_dVbs =0.0, Xi0_dVds =0.0, Xi0_dVgs =0.0, Xi0_dT =0.0 ; double Xi0p12 =0.0, Xi0p12_dVbs =0.0, Xi0p12_dVds =0.0, Xi0p12_dVgs =0.0, Xi0p12_dT =0.0 ; double Xi0p32 =0.0, Xi0p32_dVbs =0.0, Xi0p32_dVds =0.0, Xi0p32_dVgs =0.0, Xi0p32_dT =0.0 ; /* Xil := beta * ( Psl - Vbs ) - 1. */ double Xil =0.0, Xil_dVbs =0.0, Xil_dVds =0.0, Xil_dVgs =0.0, Xil_dT =0.0 ; double Xilp12 =0.0, Xilp12_dVbs =0.0, Xilp12_dVds =0.0, Xilp12_dVgs =0.0, Xilp12_dT =0.0 ; double Xilp32 =0.0, Xilp32_dVbs =0.0, Xilp32_dVds =0.0, Xilp32_dVgs =0.0, Xilp32_dT =0.0 ; /* modified bias and potential for sym.*/ double Vbsz =0.0, Vbsz_dVbs =0.0, Vbsz_dVds =0.0, Vbsz_dT =0.0 ; double Vdsz =0.0, Vdsz_dVbs =0.0, Vdsz_dVds =0.0, Vdsz_dT =0.0 ; double Vgsz =0.0, Vgsz_dVbs =0.0, Vgsz_dVds =0.0, Vgsz_dVgs =0.0, Vgsz_dT =0.0 ; double Vzadd =0.0, Vzadd_dVbs =0.0, Vzadd_dVds = 0.0, Vzadd_dT = 0.0 ; double Ps0z =0.0, Ps0z_dVbs =0.0, Ps0z_dVds =0.0, Ps0z_dVgs =0.0, Ps0z_dT =0.0 ; double Pzadd =0.0, Pzadd_dVbs =0.0, Pzadd_dVds =0.0, Pzadd_dVgs =0.0, Pzadd_dT =0.0 ; /* IBPC */ double dVbsIBPC =0.0, dVbsIBPC_dVbs =0.0, dVbsIBPC_dVds =0.0, dVbsIBPC_dVgs =0.0, dVbsIBPC_dT =0.0 ; double dG3 =0.0, dG3_dVbs =0.0, dG3_dVds =0.0, dG3_dVgs =0.0, dG3_dT =0.0 ; double dG4 =0.0, dG4_dVbs =0.0, dG4_dVds =0.0, dG4_dVgs =0.0, dG4_dT =0.0 ; double dIdd =0.0, dIdd_dVbs =0.0, dIdd_dVds =0.0, dIdd_dVgs =0.0, dIdd_dT =0.0 ; double betaWL =0.0, betaWL_dVbs =0.0, betaWL_dVds =0.0, betaWL_dVgs =0.0, betaWL_dT =0.0 ; /* Chi := beta * ( Ps{0/l} - Vbs ) */ double Chi =0.0, Chi_dVbs =0.0, Chi_dVds =0.0, Chi_dVgs =0.0, Chi_dT =0.0 ; /* Rho := beta * ( Psl - Vds ) */ double Rho =0.0, Rho_dT =0.0 ; /* threshold voltage */ double Vth =0.0 ; double Vth0 =0.0, Vth0_dVb =0.0, Vth0_dVd =0.0, Vth0_dVg =0.0, Vth0_dT =0.0 ; /* variation of threshold voltage */ double dVth =0.0, dVth_dVb =0.0, dVth_dVd =0.0, dVth_dVg =0.0, dVth_dT = 0.0 ; double dVth0 =0.0 ; double dVth0_dVb =0.0, dVth0_dVd =0.0, dVth0_dVg =0.0, dVth0_dT =0.0 ; double dVthSC =0.0 ; double dVthSC_dVb =0.0, dVthSC_dVd =0.0, dVthSC_dVg =0.0, dVthSC_dT =0.0 ; double delta0 = 5.0e-3 ; double Psi_a =0.0, Psi_a_dVg =0.0, Psi_a_dVb =0.0, Psi_a_dVd =0.0, Psi_a_dT =0.0 ; double Pb20a =0.0, Pb20a_dVg =0.0, Pb20a_dVb =0.0, Pb20a_dVd =0.0, Pb20a_dT =0.0 ; double Pb20b =0.0, Pb20b_dVg =0.0, Pb20b_dVb =0.0, Pb20b_dVd =0.0, Pb20b_dT =0.0 ; double dVthW =0.0, dVthW_dVb =0.0, dVthW_dVd =0.0, dVthW_dVg =0.0, dVthW_dT =0.0 ; /* Alpha and related parameters */ double Alpha =0.0, Alpha_dVbs =0.0, Alpha_dVds =0.0, Alpha_dVgs =0.0, Alpha_dT =0.0 ; double Achi =0.0, Achi_dVbs =0.0, Achi_dVds =0.0, Achi_dVgs =0.0, Achi_dT =0.0 ; double VgVt =0.0, VgVt_dVbs =0.0, VgVt_dVds =0.0, VgVt_dVgs =0.0, VgVt_dT =0.0 ; double Pslsat =0.0 ; double Vdsat =0.0 ; double VdsatS =0.0, VdsatS_dVbs =0.0, VdsatS_dVds =0.0, VdsatS_dVgs =0.0, VdsatS_dT =0.0 ; double Delta =0.0 ; /* Q_B and capacitances */ double Qb =0.0, Qb_dVbs =0.0, Qb_dVds =0.0, Qb_dVgs =0.0, Qb_dT=0.0 ; double Qbu =0.0, Qbu_dVbs =0.0, Qbu_dVds =0.0, Qbu_dVgs =0.0, Qbu_dT =0.0 ; /* Q_I and capacitances */ double Qi =0.0, Qi_dVbs =0.0, Qi_dVds =0.0, Qi_dVgs =0.0, Qi_dT=0.0 ; double Qiu =0.0, Qiu_dVbs =0.0, Qiu_dVds =0.0, Qiu_dVgs =0.0, Qiu_dT =0.0 ; /* Q_D and capacitances */ double Qd =0.0, Qd_dVbs =0.0, Qd_dVds =0.0, Qd_dVgs =0.0, Qd_dT =0.0 ; /* channel current */ double Ids =0.0, Ids_dVbs =0.0, Ids_dVds =0.0, Ids_dVgs =0.0, Ids_dT =0.0, Ids_dRa =0.0 ; double Ids0 =0.0, Ids0_dVbs =0.0, Ids0_dVds =0.0, Ids0_dVgs =0.0, Ids0_dT =0.0 ; /* STI */ double dVthSCSTI =0.0, dVthSCSTI_dVg =0.0, dVthSCSTI_dVd =0.0, dVthSCSTI_dVb =0.0, dVthSCSTI_dT =0.0 ; double Vgssti =0.0, Vgssti_dVbs =0.0, Vgssti_dVds =0.0, Vgssti_dVgs =0.0, Vgssti_dT =0.0 ; double costi0 =0.0 ; double costi1 =0.0, costi1_dT =0.0 ; double costi3 =0.0, costi3_dVb =0.0, costi3_dVd =0.0, costi3_dVg =0.0, costi3_dT =0.0 ; double costi3_dVb_c3 =0.0, costi3_dVd_c3 =0.0, costi3_dVg_c3 =0.0;/*, costi3_dT_c3 =0.0 ;*/ double costi4 =0.0, costi4_dT =0.0 ; double costi5 =0.0, costi5_dT =0.0 ; double costi6 =0.0, costi6_dT =0.0 ; double costi7 =0.0, costi7_dT =0.0 ; double Psasti =0.0, Psasti_dVbs =0.0, Psasti_dVds =0.0, Psasti_dVgs =0.0, Psasti_dT =0.0 ; double Psbsti =0.0, Psbsti_dVbs =0.0, Psbsti_dVds =0.0, Psbsti_dVgs =0.0, Psbsti_dT =0.0 ; double Psab =0.0, Psab_dVbs =0.0, Psab_dVds =0.0, Psab_dVgs =0.0, Psab_dT =0.0 ; double Psti =0.0, Psti_dVbs =0.0, Psti_dVds =0.0, Psti_dVgs =0.0, Psti_dT =0.0 ; double sq1sti =0.0, sq1sti_dVbs =0.0, sq1sti_dVds =0.0, sq1sti_dVgs =0.0, sq1sti_dT =0.0 ; double sq2sti =0.0, sq2sti_dVbs =0.0, sq2sti_dVds =0.0, sq2sti_dVgs =0.0, sq2sti_dT =0.0 ; double Qn0sti =0.0, Qn0sti_dVbs =0.0, Qn0sti_dVds =0.0, Qn0sti_dVgs =0.0, Qn0sti_dT =0.0 ; double Idssti =0.0, Idssti_dVbs =0.0, Idssti_dVds =0.0, Idssti_dVgs =0.0, Idssti_dT=0.0 ; /* constants */ double beta =0.0, beta_dT =0.0 ; double beta_inv =0.0, beta_inv_dT =0.0 ; double beta2 =0.0 ; double Pb2 =0.0, Pb2_dT =0.0 ; double Pb20 =0.0 ; double Pb2c =0.0 ; double Vfb =0.0 ; double c_eox =0.0 ; double Leff =0.0, Weff =0.0, WeffLD_nf =0.0, Ldrift =0.0 ; double Ldrift0 =0.0 ; double q_Nsub =0.0 ; /* PART-1 */ /* Accumulation zone */ double Psa =0.0 ; double Psa_dVbs =0.0, Psa_dVds =0.0, Psa_dVgs =0.0, Psa_dT =0.0 ; /* CLM*/ double Psdl =0.0, Psdl_dVbs =0.0, Psdl_dVds =0.0, Psdl_dVgs =0.0, Psdl_dT =0.0 ; double Lred =0.0, Lred_dVbs =0.0, Lred_dVds =0.0, Lred_dVgs =0.0, Lred_dT =0.0 ; double Lch =0.0, Lch_dVbs =0.0, Lch_dVds =0.0, Lch_dVgs =0.0, Lch_dT =0.0 ; double Wd =0.0, Wd_dVbs =0.0, Wd_dVds =0.0, Wd_dVgs =0.0, Wd_dT =0.0 ; double Aclm =0.0 ; /* Pocket Implant */ double Vthp=0.0, Vthp_dVb=0.0, Vthp_dVd=0.0, Vthp_dVg =0.0, Vthp_dT =0.0 ; double dVthLP=0.0, dVthLP_dVb=0.0, dVthLP_dVd=0.0, dVthLP_dVg =0.0, dVthLP_dT =0.0 ; double bs12=0.0, bs12_dVb=0.0, bs12_dVd =0.0, bs12_dVg =0.0, bs12_dT =0.0 ; double Qbmm=0.0, Qbmm_dVb=0.0, Qbmm_dVd =0.0, Qbmm_dVg =0.0, Qbmm_dT =0.0 ; double dqb=0.0, dqb_dVb=0.0, dqb_dVg=0.0, dqb_dVd =0.0, dqb_dT =0.0 ; double Vdx=0.0, Vdx_dVbs=0.0;/*, Vdx_dT=0.0 ;*/ double Vdx2=0.0, Vdx2_dVbs=0.0;/*, Vdx2_dT=0.0 ;*/ double Pbsum=0.0, Pbsum_dVb=0.0, Pbsum_dVd=0.0, Pbsum_dVg =0.0, Pbsum_dT =0.0 ; double sqrt_Pbsum =0.0 ; /* Poly-Depletion Effect */ const double pol_b = 1.0 ; double dPpg =0.0, dPpg_dVb =0.0, dPpg_dVd =0.0, dPpg_dVg =0.0, dPpg_dT = 0.0 ; /* Quantum Effect */ double Tox =0.0, Tox_dVb =0.0, Tox_dVd =0.0, Tox_dVg =0.0, Tox_dT =0.0 ; double dTox =0.0, dTox_dVb =0.0, dTox_dVd =0.0, dTox_dVg =0.0, dTox_dT =0.0 ; double Cox =0.0, Cox_dVb =0.0, Cox_dVd =0.0, Cox_dVg =0.0, Cox_dT =0.0 ; double Cox_inv =0.0, Cox_inv_dVb =0.0, Cox_inv_dVd =0.0, Cox_inv_dVg =0.0, Cox_inv_dT =0.0 ; double Tox0 =0.0, Cox0 =0.0, Cox0_inv =0.0 ; double Vthq=0.0, Vthq_dVb =0.0, Vthq_dVd =0.0 ; /* Igate , Igidl , Igisl */ const double igate_dlt = 1.0e-2 / C_cm2m ; const double gidlvds_dlt = 1.0e-5 ; const double gidla = 100.0 ; double Psdlz =0.0, Psdlz_dVbs =0.0, Psdlz_dVds =0.0, Psdlz_dVgs =0.0, Psdlz_dT =0.0 ; double Egp12 =0.0, Egp12_dT =0.0 ; double Egp32 =0.0, Egp32_dT =0.0 ; double E1 =0.0, E1_dVb =0.0, E1_dVd =0.0, E1_dVg =0.0, E1_dT =0.0 ; double Etun =0.0, Etun_dVbs =0.0, Etun_dVds =0.0, Etun_dVgs =0.0, Etun_dT =0.0 ; double Vdsp=0.0, Vdsp_dVd =0.0 ; double Egidl =0.0, Egidl_dVb =0.0, Egidl_dVd =0.0, Egidl_dVg =0.0, Egidl_dT =0.0 ; double Egisl =0.0, Egisl_dVb =0.0, Egisl_dVd =0.0, Egisl_dVg =0.0, Egisl_dT =0.0 ; double Igate =0.0, Igate_dVbs =0.0, Igate_dVds =0.0, Igate_dVgs =0.0, Igate_dT =0.0 ; double Igs =0.0, Igs_dVbs =0.0, Igs_dVds =0.0, Igs_dVgs =0.0, Igs_dT =0.0 ; double Igd =0.0, Igd_dVbs =0.0, Igd_dVds =0.0, Igd_dVgs =0.0, Igd_dT =0.0 ; double Igb =0.0, Igb_dVbs =0.0, Igb_dVds =0.0, Igb_dVgs =0.0, Igb_dT =0.0 ; double Igidl =0.0, Igidl_dVbs =0.0, Igidl_dVds =0.0, Igidl_dVgs =0.0, Igidl_dT =0.0 ; double Igisl =0.0, Igisl_dVbs =0.0, Igisl_dVds =0.0, Igisl_dVgs =0.0, Igisl_dT =0.0 ; double Vdb =0.0, Vsb =0.0 ; /* connecting function */ double FD2 =0.0, FD2_dVbs =0.0, FD2_dVds =0.0, FD2_dVgs =0.0, FD2_dT =0.0 ; double FMDVDS =0.0, FMDVDS_dVbs =0.0, FMDVDS_dVds =0.0, FMDVDS_dVgs =0.0, FMDVDS_dT =0.0 ; double FMDVGS =0.0, FMDVGS_dVgs =0.0 ; double FMDPG =0.0, FMDPG_dVbs =0.0, FMDPG_dVds =0.0, FMDPG_dVgs =0.0, FMDPG_dT =0.0 ; double cnst0 =0.0, cnst0_dT =0.0; double cnst1 =0.0, cnst1_dT =0.0; double cnstCoxi =0.0, cnstCoxi_dVb =0.0, cnstCoxi_dVd =0.0, cnstCoxi_dVg =0.0, cnstCoxi_dT =0.0 ; double fac1 =0.0, fac1_dVbs =0.0, fac1_dVds =0.0, fac1_dVgs =0.0, fac1_dT =0.0 ; double fac1p2 =0.0, fac1p2_dT =0.0 ; double fs01 =0.0, fs01_dVbs =0.0, fs01_dVds =0.0, fs01_dVgs =0.0, fs01_dT =0.0, fs01_dPs0 =0.0 ; double fs02 =0.0, fs02_dVbs =0.0, fs02_dVds =0.0, fs02_dVgs =0.0, fs02_dT =0.0, fs02_dPs0 =0.0 ; double fsl1 =0.0, fsl1_dVbs =0.0, fsl1_dVds =0.0, fsl1_dVgs =0.0, fsl1_dT =0.0, fsl1_dPsl =0.0 ; double fsl2 =0.0, fsl2_dVbs =0.0, fsl2_dVds =0.0, fsl2_dVgs =0.0, fsl2_dT =0.0, fsl2_dPsl =0.0 ; double cfs1 =0.0, cfs1_dT =0.0 ; double fb =0.0, fb_dChi =0.0 ; double fi =0.0, fi_dChi =0.0 ; double exp_Chi =0.0, exp_Chi_dT =0.0 ; double exp_Rho =0.0, exp_Rho_dT =0.0 ; double exp_bVbs =0.0, exp_bVbs_dT =0.0 ; double exp_bVbsVds =0.0, exp_bVbsVds_dT =0.0 ; double exp_bPs0 =0.0, exp_bPs0_dT =0.0 ; double Fs0 =0.0, Fs0_dPs0 =0.0 ; double Fsl =0.0, Fsl_dPsl =0.0 ; double dPs0 =0.0, dPsl =0.0 ; double Qn0 =0.0, Qn0_dVbs =0.0, Qn0_dVds =0.0, Qn0_dVgs =0.0, Qn0_dT =0.0 ; double Qb0 =0.0, Qb0_dVb =0.0, Qb0_dVd =0.0, Qb0_dVg =0.0, Qb0_dT =0.0 ; double Qbnm =0.0, Qbnm_dVbs =0.0, Qbnm_dVds =0.0, Qbnm_dVgs =0.0, Qbnm_dT =0.0 ; double DtPds =0.0, DtPds_dVbs =0.0, DtPds_dVds =0.0, DtPds_dVgs =0.0, DtPds_dT =0.0 ; double Qinm =0.0, Qinm_dVbs =0.0, Qinm_dVds =0.0, Qinm_dVgs =0.0, Qinm_dT =0.0 ; double Qidn =0.0, Qidn_dVbs =0.0, Qidn_dVds =0.0, Qidn_dVgs =0.0, Qidn_dT =0.0 ; double Qdnm =0.0, Qdnm_dVbs =0.0, Qdnm_dVds =0.0, Qdnm_dVgs =0.0, Qdnm_dT =0.0 ; double Qddn =0.0, Qddn_dVbs =0.0, Qddn_dVds =0.0, Qddn_dVgs =0.0, Qddn_dT =0.0 ; double Quot =0.0 ; double Qdrat =0.5, Qdrat_dVbs =0.0, Qdrat_dVds =0.0, Qdrat_dVgs =0.0, Qdrat_dT =0.0 ; double Idd =0.0, Idd_dVbs =0.0, Idd_dVds =0.0, Idd_dVgs =0.0, Idd_dT =0.0 ; double Fdd =0.0, Fdd_dVbs =0.0, Fdd_dVds =0.0, Fdd_dVgs =0.0, Fdd_dT =0.0 ; double Eeff =0.0, Eeff_dVbs =0.0, Eeff_dVds =0.0, Eeff_dVgs =0.0, Eeff_dT =0.0 ; double Rns =0.0, Rns_dT =0.0 ; double Mu = 0.0, Mu_dVbs =0.0, Mu_dVds =0.0, Mu_dVgs =0.0, Mu_dT =0.0 ; double Muun =0.0, Muun_dVbs =0.0, Muun_dVds =0.0, Muun_dVgs =0.0, Muun_dT =0.0 ; double Ey =0.0, Ey_dVbs =0.0, Ey_dVds =0.0, Ey_dVgs =0.0, Ey_dT =0.0 ; double Em =0.0, Em_dVbs =0.0, Em_dVds =0.0, Em_dVgs =0.0, Em_dT =0.0 ; double Vmax =0.0, Vmax_dT =0.0 ; double Eta =0.0, Eta_dVbs =0.0, Eta_dVds =0.0, Eta_dVgs =0.0, Eta_dT =0.0 ; double Eta1 =0.0, Eta1_dT =0.0 ; double Eta1p12 =0.0, Eta1p12_dT =0.0 ; double Eta1p32 =0.0, Eta1p32_dT =0.0 ; double Eta1p52 =0.0, Eta1p52_dT =0.0 ; double Zeta12 =0.0, Zeta12_dT =0.0 ; double Zeta32 =0.0, Zeta32_dT =0.0 ; double Zeta52 =0.0, Zeta52_dT =0.0 ; double F00 =0.0, F00_dVbs =0.0, F00_dVds =0.0, F00_dVgs =0.0, F00_dT =0.0 ; double F10 =0.0, F10_dVbs =0.0, F10_dVds =0.0, F10_dVgs =0.0, F10_dT =0.0 ; double F30 =0.0, F30_dVbs =0.0, F30_dVds =0.0, F30_dVgs =0.0, F30_dT =0.0 ; double F11 =0.0, F11_dVbs =0.0, F11_dVds =0.0, F11_dVgs =0.0, F11_dT =0.0 ; double Ps0_min =0.0, Ps0_min_dT =0.0 ; double Acn =0.0, Acn_dVbs =0.0, Acn_dVds =0.0, Acn_dVgs =0.0, Acn_dT =0.0 ; double Acd =0.0, Acd_dVbs =0.0, Acd_dVds =0.0, Acd_dVgs =0.0, Acd_dT =0.0 ; double Ac1 =0.0, Ac1_dVbs =0.0, Ac1_dVds =0.0, Ac1_dVgs =0.0, Ac1_dT =0.0 ; double Ac2 =0.0, Ac2_dVbs =0.0, Ac2_dVds =0.0, Ac2_dVgs =0.0, Ac2_dT =0.0 ; double Ac3 =0.0, Ac3_dVbs =0.0, Ac3_dVds =0.0, Ac3_dVgs =0.0, Ac3_dT =0.0 ; double Ac4 =0.0, Ac4_dVbs =0.0, Ac4_dVds =0.0, Ac4_dVgs =0.0, Ac4_dT =0.0 ; double Ac31 =0.0, Ac31_dVbs =0.0, Ac31_dVds =0.0, Ac31_dVgs =0.0, Ac31_dT =0.0 ; double Ac41 =0.0, Ac41_dT =0.0 ; double ninvd_dT =0.0 ; /* PART-2 (Isub) */ double Isub =0.0, Isub_dVbs =0.0, Isub_dVds =0.0, Isub_dVgs =0.0, Isub_dT=0.0 ; double Isub_dVdse = 0.0 ; double Psislsat =0.0, Psislsat_dVb =0.0, Psislsat_dVd =0.0, Psislsat_dVg =0.0, Psislsat_dT =0.0 ; double Psisubsat =0.0, Psisubsat_dVb =0.0, Psisubsat_dVd =0.0, Psisubsat_dVg =0.0, Psisubsat_dT =0.0 ; double Ifn =0.0, Ifn_dVb =0.0, Ifn_dVd=0.0, Ifn_dVg=0.0, Ifn_dT = 0.0 ; double Eg12=0.0, Eg32 =0.0 ; /* PART-3 (overlap) */ /* const double cov_dlt = 1.0e-1 ; */ /* const double covvgmax = 5.0 ; */ double cov_slp =0.0, cov_mag =0.0 ; double Qgos =0.0, Qgos_dVbs =0.0, Qgos_dVds =0.0, Qgos_dVgs =0.0, Qgos_dT =0.0 ; double Qgod =0.0, Qgod_dVbs =0.0, Qgod_dVds =0.0, Qgod_dVgs =0.0, Qgod_dT =0.0 ; double Qgbo =0.0, Qgbo_dVbs =0.0, Qgbo_dVds =0.0, Qgbo_dVgs =0.0, Qgbo_dT = 0.0 ; double Cgdo =0.0, Cgso =0.0, Cgbo_loc =0.0 ; double Qgso =0.0, Qgso_dVbse =0.0, Qgso_dVdse =0.0, Qgso_dVgse =0.0 ; double Qgdo =0.0, Qgdo_dVbse =0.0, Qgdo_dVdse =0.0, Qgdo_dVgse =0.0 ; /* fringe capacitance */ double Qfd =0.0, Cfd =0.0 ; double Qfs =0.0, Cfs =0.0 ; /* Cqy */ double Ec =0.0, Ec_dVbs =0.0, Ec_dVds =0.0, Ec_dVgs =0.0, Ec_dT =0.0 ; double Pslk =0.0, Pslk_dVbs =0.0, Pslk_dVds =0.0, Pslk_dVgs =0.0, Pslk_dT =0.0 ; double Qy =0.0, Qy_dVbs =0.0, Qy_dVds =0.0, Qy_dVgs =0.0, Qy_dT =0.0 ; /* PART-4 (junction diode) */ double Ibs =0.0, Gbs =0.0, Gbse =0.0, Ibs_dT =0.0 ; double Ibd =0.0, Gbd =0.0, Gbde =0.0, Ibd_dT =0.0 ; /* double Nvtm =0.0 ;*/ /* junction capacitance */ double Qbs =0.0, Capbs =0.0, Capbse =0.0, Qbs_dT =0.0 ; double Qbd =0.0, Capbd =0.0, Capbde =0.0, Qbd_dT =0.0 ; double czbd =0.0, czbd_dT=0.0 ; double czbdsw =0.0, czbdsw_dT=0.0 ; double czbdswg =0.0, czbdswg_dT=0.0 ; double czbs =0.0, czbs_dT=0.0 ; double czbssw =0.0, czbssw_dT=0.0 ; double czbsswg =0.0, czbsswg_dT=0.0 ; double arg =0.0, sarg =0.0 ; /* PART-5 (NQS) */ double tau =0.0, tau_dVbs=0.0, tau_dVds=0.0, tau_dVgs =0.0, tau_dT=0.0 ; double taub =0.0, taub_dVbs=0.0, taub_dVds=0.0, taub_dVgs =0.0, taub_dT =0.0 ; /* PART-6 (noise) */ /* 1/f */ double NFalp =0.0, NFtrp =0.0, Cit =0.0, Nflic =0.0 ; /* thermal */ double Eyd =0.0, Mu_Ave= 0.0, Nthrml =0.0, Mud_hoso =0.0 ; /* induced gate noise ( Part 0/3 ) */ double kusai00 =0.0, kusaidd =0.0, kusaiL =0.0, kusai00L =0.0 ; int flg_ign = 0 ; double sqrtkusaiL =0.0, kusai_ig =0.0, gds0_ign =0.0, gds0_h2 =0.0, GAMMA =0.0, crl_f =0.0 ; const double c_sqrt_15 =3.872983346207417e0 ; /* sqrt(15) */ const double Cox_small =1.0e-6 ; const double c_16o135 =1.185185185185185e-1 ; /* 16/135 */ double Nign0 =0.0, MuModA =0.0, MuModB =0.0, correct_w1 =0.0 ; /* usage of previously calculated values */ double vtol_pprv =1.01e-1 ; double Vbsc_dif =0.0, Vdsc_dif =0.0, Vgsc_dif =0.0, sum_vdif =0.0 ; double Vbsc_dif2 =0.0, Vdsc_dif2 =0.0, Vgsc_dif2 =0.0, sum_vdif2 =0.0 ; double dVbs =0.0, dVds =0.0, dVgs =0.0 ; /* temporary vars. & derivatives*/ double TX =0.0, TX_dVbs =0.0, TX_dVds =0.0, TX_dVgs =0.0, TX_dT =0.0 ; double TY =0.0, TY_dVbs =0.0, TY_dVds =0.0, TY_dVgs =0.0, TY_dT =0.0 ; double T0 =0.0, T0_dVb =0.0, T0_dVd =0.0, T0_dVg =0.0, T0_dT =0.0 ; double T1 =0.0, T1_dVb =0.0, T1_dVd =0.0, T1_dVg =0.0, T1_dT =0.0, T1_dVdse_eff =0.0 ; double T2 =0.0, T2_dVb =0.0, T2_dVd =0.0, T2_dVg =0.0, T2_dT =0.0 ; double T3 =0.0, T3_dVb =0.0, T3_dVd =0.0, T3_dVg =0.0, T3_dT =0.0 ; double T4 =0.0, T4_dVb =0.0, T4_dVd =0.0, T4_dVg =0.0, T4_dT =0.0 ; double T5 =0.0, T5_dVb =0.0, T5_dVd =0.0, T5_dVg =0.0, T5_dT =0.0 ; double T6 =0.0, T6_dVb =0.0, T6_dVd =0.0, T6_dVg =0.0, T6_dT =0.0 ; double T7 =0.0, T7_dVb =0.0, T7_dVd =0.0, T7_dVg =0.0, T7_dT =0.0 ; double T8 =0.0, T8_dVb =0.0, T8_dVd =0.0, T8_dVg =0.0, T8_dT =0.0 ; double T9 =0.0, T9_dVb =0.0, T9_dVd =0.0, T9_dVg =0.0, T9_dT =0.0, T9_dVdse_eff =0.0 ; double T10 =0.0, T10_dVb =0.0, T10_dVd =0.0, T10_dVg =0.0, T10_dT =0.0 ; double T11 =0.0, T11_dT =0.0 ; double T12 =0.0, T12_dT =0.0 ; double T15 =0.0, T16 =0.0, T17 =0.0 ; double T2_dVdse = 0.0, T5_dVdse = 0.0 ; double T4_dVb_dT, T5_dVb_dT, T6_dVb_dT, T7_dVb_dT ; int flg_zone =0 ; double Vfbsft =0.0, Vfbsft_dVbs =0.0, Vfbsft_dVds =0.0, Vfbsft_dVgs =0.0, Vfbsft_dT =0.0 ; /* Vdseff */ double Vdseff =0.0, Vdseff_dVbs =0.0, Vdseff_dVds =0.0, Vdseff_dVgs =0.0, Vdseff_dT =0.0 ; double Vdsorg =0.0 ; /* D/S Overlap Charges: Qovd/Qovs */ double CVDSOVER =0.0 ; double Qovdext =0.0, Qovdext_dVbse =0.0, Qovdext_dVdse =0.0, Qovdext_dVgse =0.0, Qovdext_dT =0.0 ; double Qovsext =0.0, Qovsext_dVbse =0.0, Qovsext_dVdse =0.0, Qovsext_dVgse =0.0, Qovsext_dT =0.0 ; double Qovd =0.0, Qovd_dVbs =0.0, Qovd_dVds =0.0, Qovd_dVgs =0.0, Qovd_dT =0.0 ; double Qovs =0.0, Qovs_dVbs =0.0, Qovs_dVds =0.0, Qovs_dVgs =0.0, Qovs_dT =0.0 ; double QbuLD =0.0, QbuLD_dVbs =0.0, QbuLD_dVds =0.0, QbuLD_dVgs =0.0, QbuLD_dT =0.0 ; double QbdLD =0.0, QbdLD_dVbs =0.0, QbdLD_dVds =0.0, QbdLD_dVgs =0.0, QbdLD_dT =0.0 ; double QbsLD =0.0;/*, QbsLD_dVbs =0.0, QbsLD_dVds =0.0, QbsLD_dVgs =0.0, QbsLD_dT =0.0 ;*/ double QbdLDext =0.0, QbdLDext_dVbse =0.0, QbdLDext_dVdse =0.0, QbdLDext_dVgse =0.0, QbdLDext_dT =0.0 ; double QbsLDext =0.0;/*, QbsLDext_dVbse =0.0, QbsLDext_dVdse =0.0, QbsLDext_dVgse =0.0, QbsLDext_dT =0.0 ;*/ /* Vgsz for SCE and PGD */ double dmpacc =0.0, dmpacc_dVbs =0.0, dmpacc_dVds =0.0, dmpacc_dVgs =0.0 ; double Vbsz2 =0.0, Vbsz2_dVbs =0.0, Vbsz2_dVds =0.0, Vbsz2_dVgs =0.0 , Vbsz2_dT =0.0; /* Multiplication factor * number of gate fingers */ double Mfactor = here->HSMHV_m ; /*-----------------------------------------------------------* * HiSIM-HV *-----------------*/ /* bias-dependent Rd, Rs */ double Rdrift =0.0, Rdrift_dVbse =0.0, Rdrift_dVdse =0.0, Rdrift_dVgse =0.0, Rdrift_dT =0.0 ; double Rsdrift =0.0, Rsdrift_dVbse =0.0, Rsdrift_dVdse =0.0, Rsdrift_dVgse =0.0, Rsdrift_dT =0.0 ; double Rd =0.0, Rd_dVbse =0.0, Rd_dVdse =0.0, Rd_dVgse =0.0, Rd_dT =0.0 ; double Rs =0.0, Rs_dVbse =0.0, Rs_dVdse =0.0, Rs_dVgse =0.0, Rs_dT =0.0 ; double Ra =0.0, Ra_dVbse =0.0, Ra_dVdse =0.0, Ra_dVgse =0.0 ; double Ra_dVbs =0.0, Ra_dVds =0.0, Ra_dVgs =0.0 ; double Ra_dVdse_eff =0.0 ; const double delta_rd = 10e-3 * C_cm2m ; const double Ra_N = 20.0; /* smoothing parameter for Ra */ const double Res_min = 1.0e-4 ; double Rd0_dT =0.0, Rs0_dT =0.0, Rdvd_dT =0.0, Rsvd_dT =0.0 ; double Vdse_eff =0.0, Vdse_eff_dVbse =0.0, Vdse_eff_dVdse =0.0, Vdse_eff_dVgse =0.0, Vdse_eff_dVbs =0.0, Vdse_eff_dVds =0.0, Vdse_eff_dVgs =0.0 ; double VdseModeNML =0.0, VdseModeRVS =0.0 ; double Vbsegmt =0.0, Vdsegmt =0.0, Vgsegmt =0.0 ; double Vbserev =0.0, Vdserev =0.0, Vgserev =0.0 ; double Ra_alpha, Ra_beta ; /* modified external biases for symmetry */ double /*Vzadd_ext = 0.0,*/ Vzadd_ext_dVd = 0.0 ; double Vdserevz = 0.0, Vdserevz_dVd = 0.0 ; double Vgserevz = 0.0, Vgserevz_dVd = 0.0 ; double Vbserevz = 0.0, Vbserevz_dVd = 0.0 ; /* Substrate Effect */ const double RDVSUB = model->HSMHV_rdvsub ; const double RDVDSUB = model->HSMHV_rdvdsub ; const double DDRIFT = model->HSMHV_ddrift ; const double VBISUB = model->HSMHV_vbisub ; const double NSUBSUB = modelMKS->HSMHV_nsubsub ; double Vsubsrev = 0.0 ; double Wdep = 0.0, Wdep_dVdserev = 0.0, Wdep_dVsubsrev = 0.0 ; double T1_dVdserev = 0.0, T1_dVsubsrev = 0.0, T6_dVdserev = 0.0, T6_dVsubsrev = 0.0 ; double Rs_dVsubs = 0.0, Rd_dVsubs = 0.0, Rdrift_dVsubs = 0.0, Rsdrift_dVsubs = 0.0 ; /* temperature-dependent variables for SHE model */ double TTEMP =0.0, TTEMP0 =0.0 ; double/* Tdiff0 = 0.0, Tdiff0_2 = 0.0,*/ Tdiff = 0.0, Tdiff_2 = 0.0 ; double Eg =0.0, Eg_dT =0.0 ; double Nin =0.0, Nin_dT =0.0 ; double js =0.0, js_dT =0.0 ; double jssw =0.0, jssw_dT =0.0 ; double js2 =0.0, js2_dT =0.0 ; double jssw2 =0.0, jssw2_dT =0.0 ; /* Qover 5/1 ckt-bias use */ double Vgbgmt =0.0, Vgbgmt_dVbs =0.0, Vgbgmt_dVds =0.0, Vgbgmt_dVgs =0.0 ; double Vxbgmt =0.0, Vxbgmt_dVbs =0.0, Vxbgmt_dVds =0.0, Vxbgmt_dVgs =0.0 ; double Vxbgmtcl =0.0, Vxbgmtcl_dVxbgmt =0.0, Vxbgmtcl_dT =0.0 ; double ModeNML =0.0, ModeRVS =0.0 ; double QsuLD =0.0, QsuLD_dVbs =0.0, QsuLD_dVds =0.0, QsuLD_dVgs =0.0, QsuLD_dT =0.0 ; double QiuLD =0.0, QiuLD_dVbs =0.0, QiuLD_dVds =0.0, QiuLD_dVgs =0.0, QiuLD_dT =0.0 ; double /*QidLD =0.0,*/ QidLD_dVbs =0.0, QidLD_dVds =0.0, QidLD_dVgs =0.0, QidLD_dT =0.0 ; double /*QisLD =0.0,*/ QisLD_dVbs =0.0, QisLD_dVds =0.0, QisLD_dVgs =0.0, QisLD_dT =0.0 ; double /*QidLDext =0.0,*/ QidLDext_dVbse =0.0, QidLDext_dVdse =0.0, QidLDext_dVgse =0.0, QidLDext_dT =0.0 ; double /*QisLDext =0.0,*/ QisLDext_dVbse =0.0, QisLDext_dVdse =0.0, QisLDext_dVgse =0.0, QisLDext_dT =0.0 ; /* Self heating */ double mphn0_dT =0.0 ; double ps0ldinib_dT =0.0, cnst0over_dT =0.0 ; double ps0ldinibs_dT =0.0, cnst0overs_dT =0.0 ; double Temp_dif =0.0 ; /* for SCE */ double ptovr_dT =0.0 ; /* IBPC */ double IdsIBPC =0.0, IdsIBPC_dVbs =0.0, IdsIBPC_dVds =0.0, IdsIBPC_dVgs =0.0, IdsIBPC_dT =0.0 ; /* Qover */ int flg_ovzone = 0 ; double VgpLD =0.0, VgpLD_dVgb =0.0 ; double /*VthLD =0.0,*/ Vgb_fb_LD =0.0 ; double Ac31_dVgb =0.0, Ac31_dVxb =0.0 ; double Ac1_dVgb =0.0, Ac1_dVxb =0.0 ; double Ac2_dVgb =0.0, Ac2_dVxb =0.0 ; double Ac3_dVgb =0.0, Ac3_dVxb =0.0 ; double Acn_dVgb =0.0, Acn_dVxb =0.0 ; double Acd_dVgb =0.0, Acd_dVxb =0.0 ; double Chi_dVgb =0.0, Chi_dVxb =0.0 ; double Psa_dVgb =0.0, Psa_dVxb =0.0 ; double QsuLD_dVgb =0.0, QsuLD_dVxb =0.0 ; double QbuLD_dVgb =0.0, QbuLD_dVxb =0.0 ; double fs02_dVgb =0.0 ;/*, fs02_dVxb =0.0 ;*/ double TX_dVgb =0.0, TX_dVxb =0.0 ; double TY_dVgb =0.0, TY_dVxb =0.0 ; double Ps0LD =0.0, Ps0LD_dVgb =0.0, Ps0LD_dVxb =0.0, Ps0LD_dT =0.0 ; double /*Ps0LD_dVbs =0.0,*/ Ps0LD_dVds =0.0; /*Ps0LD_dVgs =0.0 ;*/ double Pb2over =0.0, Pb2over_dT =0.0 ; int flg_overgiven =0 ; int Coovlps =0, Coovlpd =0 ; double Lovers =0.0, Loverd =0.0 ; double Novers =0.0, Noverd =0.0 ; double Nover_func =0.0 ; /* double ps0ldinib_func =0.0, ps0ldinib_func_dT =0.0 ;*/ double cnst0over_func =0.0, cnst0over_func_dT =0.0 ; double cnst1over =0.0, cnst1over_dT =0.0; /* Qover Analytical Model */ int lp_ld; double Ta = 9.3868e-3, Tb = -0.1047839 ; double Tc, Tc_dT ; double Td, Td_dVxb, Td_dVgb, Td_dT ; double Tv, Tv_dVxb, Tv_dVgb, Tv_dT ; double Tu, Tu_dVxb, Tu_dVgb, Tu_dT ; double Tp, Tp_dT ; double Tq, Tq_dVxb, Tq_dVgb, Tq_dT ; double T1_dVxb, T1_dVgb ; /* double T2_dVxb, T2_dVgb ;*/ /* double T3_dVxb, T3_dVgb ;*/ double T5_dVxb, T5_dVgb ; double VgpLD_shift, VgpLD_shift_dT ; double VgpLD_shift_dVgb, VgpLD_shift_dVxb, exp_bVbs_dVxb ; double gamma, gamma_dVxb, gamma_dT ; double psi , psi_dVgb , psi_dVxb , psi_dT ; /* double psi_B, arg_B ;*/ double Chi_1, Chi_1_dVgb, Chi_1_dVxb ,Chi_1_dT ; double Chi_A, Chi_A_dVgb, Chi_A_dVxb, Chi_A_dT ; double Chi_B, Chi_B_dVgb, Chi_B_dVxb, Chi_B_dT;/*, Chi_B_dpsi , Chi_B_dgamma ;*/ /* X_dT for leakage currents & junction diodes */ double isbd_dT =0.0, isbs_dT =0.0 ; double isbd2_dT =0.0, isbs2_dT =0.0 ; double vbdt_dT =0.0, vbst_dT = 0.0 ; double jd_expcd_dT =0.0 , jd_expcs_dT =0.0 ; double jd_nvtm_inv_dT =0.0 ; double exptemp_dT = 0.0 ; double tcjbd =0.0, tcjbs =0.0, tcjbdsw =0.0, tcjbssw =0.0, tcjbdswg =0.0, tcjbsswg =0.0 ; /*================ Start of executable code.=================*/ if (here->HSMHV_mode == HiSIM_NORMAL_MODE) { ModeNML = 1.0 ; ModeRVS = 0.0 ; } else { ModeNML = 0.0 ; ModeRVS = 1.0 ; } T1 = Vdse + Vgse + Vbse + Vds + Vgs + Vbs + vbd_jct + vbs_jct ; if ( ! finite (T1) ) { fprintf (stderr , "*** warning(HiSIM_HV): Unacceptable Bias(es).\n" ) ; fprintf (stderr , "----- bias information (HiSIM_HV)\n" ) ; fprintf (stderr , "name: %s\n" , here->HSMHVname ) ; fprintf (stderr , "states: %d\n" , here->HSMHVstates ) ; fprintf (stderr , "Vdse= %.3e Vgse=%.3e Vbse=%.3e\n" , Vdse , Vgse , Vbse ) ; fprintf (stderr , "Vdsi= %.3e Vgsi=%.3e Vbsi=%.3e\n" , Vds , Vgs , Vbs ) ; fprintf (stderr , "vbs_jct= %12.5e vbd_jct= %12.5e\n" , vbs_jct , vbd_jct ) ; fprintf (stderr , "vd= %.3e vs= %.3e vdp= %.3e vgp= %.3e vbp= %.3e vsp= %.3e\n" , *( ckt->CKTrhsOld + here->HSMHVdNode ) , *( ckt->CKTrhsOld + here->HSMHVsNode ) , *( ckt->CKTrhsOld + here->HSMHVdNodePrime ) , *( ckt->CKTrhsOld + here->HSMHVgNodePrime ) , *( ckt->CKTrhsOld + here->HSMHVbNodePrime ) , *( ckt->CKTrhsOld + here->HSMHVsNodePrime ) ) ; fprintf (stderr , "----- bias information (end)\n" ) ; return ( HiSIM_ERROR ) ; } flg_info = model->HSMHV_info ; flg_nqs = model->HSMHV_conqs ; /*-----------------------------------------------------------* * Start of the routine. (label) *-----------------*/ /* start_of_routine: */ /*-----------------------------------------------------------* * Temperature dependent constants. *-----------------*/ if ( here->HSMHVtempNode > 0 && pParam->HSMHV_rth0 != 0.0 ) { #define HSMHVEVAL #include "hsmhvtemp_eval.h" } else { beta = here->HSMHV_beta ; TTEMP = ckt->CKTtemp ; if ( here->HSMHV_dtemp_Given ) { TTEMP = TTEMP + here->HSMHV_dtemp ; } Eg_dT = 0.0 ; beta_dT = 0.0 ; beta_inv_dT = 0.0 ; mphn0_dT = 0.0 ; ptovr_dT = 0.0 ; Vmax_dT = 0.0 ; Pb2_dT = 0.0 ; cnst0_dT = 0.0 ; cnst1_dT = 0.0 ; } /* Inverse of the thermal voltage */ beta_inv = here->HSMHV_beta_inv ; beta2 = here->HSMHV_beta2 ; /* Bandgap */ Egp12 = here->HSMHV_egp12 ; Egp32 = here->HSMHV_egp32 ; /* Metallurgical channel geometry */ Leff = here->HSMHV_leff ; Weff = here->HSMHV_weff ; WeffLD_nf = here->HSMHV_weff_ld * here->HSMHV_nf ; Ldrift0 = here->HSMHV_ldrift1 + here->HSMHV_ldrift2 ; Ldrift = (model->HSMHV_coldrift) ? Ldrift0 : Ldrift0 + here->HSMHV_loverld ; /* Flat band voltage */ Vfb = pParam->HSMHV_vfbc ; /* Surface impurity profile */ q_Nsub = here->HSMHV_qnsub ; /* Velocity Temperature Dependence */ Vmax = here->HSMHV_vmax ; /* 2 phi_B */ Pb2 = here->HSMHV_pb2 ; Pb20 = here->HSMHV_pb20 ; Pb2c = here->HSMHV_pb2c ; /* Coefficient of the F function for bulk charge */ cnst0 = here->HSMHV_cnst0 ; /* cnst1: n_{p0} / p_{p0} */ cnst1 = here->HSMHV_cnst1 ; /* c_eox: Permitivity in ox */ c_eox = here->HSMHV_cecox ; /* Tox and Cox without QME */ Tox0 = model->HSMHV_tox ; Cox0 = c_eox / Tox0 ; Cox0_inv = 1.0 / Cox0 ; /*---------------------------------------------------* * Determine clamping limits for too large Vbs (internal). *-----------------*/ Fn_SU( T1 , Pb2 - model->HSMHV_vzadd0 , Vbs_max , 0.1 , T0 ) ; Vbs_max = T1 ; Vbs_max_dT = Pb2_dT * T0 ; if ( Pb20 - model->HSMHV_vzadd0 < Vbs_max ) { Vbs_max = Pb20 - model->HSMHV_vzadd0 ; Vbs_max_dT = 0.0 ; } if ( Pb2c - model->HSMHV_vzadd0 < Vbs_max ) { Vbs_max = Pb2c - model->HSMHV_vzadd0 ; Vbs_max_dT = 0.0 ; } if ( Vbs_bnd > Vbs_max * 0.5 ) { Vbs_bnd = 0.5 * Vbs_max ; Vbs_bnd_dT = 0.5 * Vbs_max_dT ; } if (here->HSMHV_rs > 0.0 || here->HSMHV_rd > 0.0) { if ( model->HSMHV_corsrd == 1 ) flg_rsrd = 1 ; if ( model->HSMHV_corsrd == 2 ) flg_rsrd = 2 ; if ( model->HSMHV_corsrd == 3 ) flg_rsrd = 3 ; } /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * PART-1: Basic device characteristics. *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++* * Prepare for potential initial guesses using previous values *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ flg_pprv = 0 ; if ( here->HSMHV_called >= 1 ) { Vbsc_dif = Vbs - here->HSMHV_vbsc_prv ; Vdsc_dif = Vds - here->HSMHV_vdsc_prv ; Vgsc_dif = Vgs- here->HSMHV_vgsc_prv ; sum_vdif = fabs( Vbsc_dif ) + fabs( Vdsc_dif ) + fabs( Vgsc_dif ) ; if ( model->HSMHV_copprv >= 1 && sum_vdif <= vtol_pprv && here->HSMHV_mode * here->HSMHV_mode_prv > 0 ) { flg_pprv = 1 ;} if ( here->HSMHV_called >= 2 && flg_pprv == 1 ) { Vbsc_dif2 = here->HSMHV_vbsc_prv - here->HSMHV_vbsc_prv2 ; Vdsc_dif2 = here->HSMHV_vdsc_prv - here->HSMHV_vdsc_prv2 ; Vgsc_dif2 = here->HSMHV_vgsc_prv - here->HSMHV_vgsc_prv2 ; sum_vdif2 = fabs( Vbsc_dif2 ) + fabs( Vdsc_dif2 ) + fabs( Vgsc_dif2 ) ; if ( epsm10 < sum_vdif2 && sum_vdif2 <= vtol_pprv && here->HSMHV_mode_prv * here->HSMHV_mode_prv2 > 0 ) { flg_pprv = 2 ; } } Temp_dif = TTEMP - here->HSMHV_temp_prv ; } else { Vbsc_dif = 0.0 ; Vdsc_dif = 0.0 ; Vgsc_dif = 0.0 ; sum_vdif = 0.0 ; Vbsc_dif2 = 0.0 ; Vdsc_dif2 = 0.0 ; Vgsc_dif2 = 0.0 ; sum_vdif2 = 0.0 ; flg_pprv = 0 ; Temp_dif = 0.0 ; } dVbs = Vbsc_dif ; dVds = Vdsc_dif ; dVgs = Vgsc_dif ; if ( flg_pprv >= 1 ) { Ps0 = here->HSMHV_ps0_prv ; Ps0_dVbs = here->HSMHV_ps0_dvbs_prv ; Ps0_dVds = here->HSMHV_ps0_dvds_prv ; Ps0_dVgs = here->HSMHV_ps0_dvgs_prv ; Pds = here->HSMHV_pds_prv ; Pds_dVbs = here->HSMHV_pds_dvbs_prv ; Pds_dVds = here->HSMHV_pds_dvds_prv ; Pds_dVgs = here->HSMHV_pds_dvgs_prv ; } if ( flg_rsrd == 1 || flg_rsrd == 3 ) { /*----------------------------------------------------------* * Considering these special cases: * ( here->HSMHV_mode == HiSIM_NORMAL_MODE && Vdse < 0.0 ) * ( here->HSMHV_mode == HiSIM_REVERSE_MODE && Vdse < 0.0 ) *----------------------------------------------------------*/ Vdsegmt = here->HSMHV_mode * Vdse ; /* geometrical outer bias */ Vgsegmt = Vgse - ModeRVS * Vdse ; /* geometrical outer bias */ Vbsegmt = Vbse - ModeRVS * Vdse ; /* geometrical outer bias */ if ( Vdsegmt >= 0.0 ) { /* vdse normal mode */ VdseModeNML = 1 ; VdseModeRVS = 0 ; Vdserev = Vdsegmt ; Vgserev = Vgsegmt ; Vbserev = Vbsegmt ; Vsubsrev = Vsubs ; } else { /* vdse reverse mode */ VdseModeNML = 0 ; VdseModeRVS = 1 ; Vdserev = - Vdsegmt ; Vgserev = Vgsegmt - Vdsegmt ; Vbserev = Vbsegmt - Vdsegmt ; Vsubsrev = Vsubs - Vdsegmt ; } if ( here->HSMHV_rdvd > 0.0 || here->HSMHV_rsvd > 0.0 || pParam->HSMHV_rdvg11 > 0.0 || pParam->HSMHV_rdvb > 0.0 || here->HSMHVsubNode >= 0 ) { /*-----------------------------------------------------------* * Vxserevz: Modified bias introduced to realize symmetry at Vds=0. *-----------------*/ Fn_SymAdd( Vzadd , Vdserev / 2 , model->HSMHV_vzadd0 , T2 ) ; Vzadd_ext_dVd = T2 / 2 ; if ( Vzadd < ps_conv ) { Vzadd = ps_conv ; Vzadd_ext_dVd = 0.0 ; } Vdserevz = Vdserev + 2.0 * Vzadd ; Vdserevz_dVd = 1.0 + 2.0 * Vzadd_ext_dVd ; Vgserevz = Vgserev + Vzadd ; Vgserevz_dVd = Vzadd_ext_dVd ; Vbserevz = Vbserev + Vzadd ; Vbserevz_dVd = Vzadd_ext_dVd ; /* bias-dependent Rdrift for HVMOS/LDMOS */ if ( model->HSMHV_cosym == 1 || VdseModeNML == 1 ) { /* HVMOS or normal mode LDMOS: */ /* ... Vdse dependence */ T1 = VdseModeNML * here->HSMHV_rd + VdseModeRVS * here->HSMHV_rs ; T1_dT = VdseModeNML * Rd0_dT + VdseModeRVS * Rs0_dT ; T0 = VdseModeNML * here->HSMHV_rdvd + VdseModeRVS * here->HSMHV_rsvd ; T0_dT = VdseModeNML * Rdvd_dT + VdseModeRVS * Rsvd_dT ; T4 = T1 + T0 * Vdserevz ; T4_dVd = T0 * Vdserevz_dVd ; T4_dT = T1_dT + T0_dT * Vdserevz ; /* ... Vgse dependence */ T10 = model->HSMHV_rdvg12 + small ; T1 = T4 * ( 1.0 + pParam->HSMHV_rdvg11 * ( 1.0 - Vgserevz / T10 ) ) ; T1_dVd = T4_dVd * ( 1.0 + pParam->HSMHV_rdvg11 * ( 1.0 - Vgserevz / T10 ) ) + T4 * pParam->HSMHV_rdvg11 * ( - Vgserevz_dVd / T10 ) ; T1_dVg = T4 * pParam->HSMHV_rdvg11 * ( - 1.0 ) / T10 ; T1_dT = T4_dT * ( 1.0 + pParam->HSMHV_rdvg11 * ( 1.0 - Vgserevz / T10 ) ) ; Fn_SL2( T2 , T1 , T4 , rdsl2_dlt , T0 , T5 ) ; T2_dVd = T0 * T1_dVd + T5 * T4_dVd ; T2_dVg = T0 * T1_dVg ; T2_dT = T0 * T1_dT + T5 * T4_dT ; T3 = T4 * ( 1.0 + pParam->HSMHV_rdvg11 ) ; T3_dVd = T4_dVd * ( 1.0 + pParam->HSMHV_rdvg11 ) ; T3_dT = T4_dT * ( 1.0 + pParam->HSMHV_rdvg11 ) ; Fn_SU2( Rdrift , T2 , T3 , rdsu2_dlt , T0, T5 ) ; Rdrift_dVdse = T0 * T2_dVd + T5 * T3_dVd ; Rdrift_dVgse = T0 * T2_dVg ; Rdrift_dT = T0 * T2_dT + T5 * T3_dT ; /* ... Vbse dependence */ T1 = 1.0 - pParam->HSMHV_rdvb * Vbserevz ; T1_dVb = - pParam->HSMHV_rdvb ; T1_dVd = - pParam->HSMHV_rdvb * Vbserevz_dVd ; Fn_SZ( T3 , T1 , rdsz_dlt , T4 ) ; T3_dVb = T4 * T1_dVb ; T3_dVd = T4 * T1_dVd ; T0 = Rdrift ; Rdrift = Rdrift * T3 ; Rdrift_dVdse = Rdrift_dVdse * T3 + T0 * T3_dVd ; Rdrift_dVgse = Rdrift_dVgse * T3 ; Rdrift_dVbse = + T0 * T3_dVb ; Rdrift_dT = Rdrift_dT * T3 ; } else { /* reverse mode LDMOS: */ Rdrift = here->HSMHV_rs ; Rdrift_dVdse = 0.0 ; Rdrift_dVgse = 0.0 ; Rdrift_dVbse = 0.0 ; Rdrift_dT = Rs0_dT ; } /* Rsdrift */ T4 = ( VdseModeNML * here->HSMHV_rs + VdseModeRVS * here->HSMHV_rd ) ; T4_dT = VdseModeNML * Rs0_dT + VdseModeRVS * Rd0_dT ; T4_dVd = 0.0 ; if ( model->HSMHV_cosym == 1 || VdseModeRVS == 1 ) { /* HVMOS or reverse mode LDMOS: */ /* ... Vdse dependence */ T0 = VdseModeNML * here->HSMHV_rsvd + VdseModeRVS * here->HSMHV_rdvd ; T0_dT = VdseModeNML * Rsvd_dT + VdseModeRVS * Rdvd_dT ; /* if ( model->HSMHV_cosym == 2 ) { /\* latest case with bugfix: *\/ */ /* T4 = T4 + T0 * Vdserevz ; */ /* T4_dVd = T0 * Vdserevz_dVd ; */ /* T4_dT = T4_dT + T0_dT * Vdserevz ; */ /* } else { /\* HiSIM_HV 1.1.1 compatible case *\/ */ T4 = T4 + T0 * ( 2.0 * model->HSMHV_vzadd0 ) ; /* 2.0 * Fn_SymAdd( x=0, add0=model->HSMHV_vzadd0 ) */ T4_dT = T4_dT + T0_dT * ( 2.0 * model->HSMHV_vzadd0 ) ; /* } */ /* ... Vgse dependence */ T10 = model->HSMHV_rdvg12 + small ; T1 = T4 * ( 1.0 + pParam->HSMHV_rdvg11 * ( 1.0 - Vgserevz / T10 ) ) ; T1_dVd = T4_dVd * ( 1.0 + pParam->HSMHV_rdvg11 * ( 1.0 - Vgserevz / T10 ) ) + T4 * pParam->HSMHV_rdvg11 * ( - Vgserevz_dVd / T10 ) ; T1_dVg = T4 * pParam->HSMHV_rdvg11 * ( - 1.0 ) / T10 ; T1_dT = T4_dT * ( 1.0 + pParam->HSMHV_rdvg11 * ( 1.0 - Vgserevz / T10 ) ) ; Fn_SL2( T2 , T1 , T4 , rdsl2_dlt , T0 , T5 ) ; T2_dVd = T0 * T1_dVd + T5 * T4_dVd ; T2_dVg = T0 * T1_dVg ; T2_dT = T0 * T1_dT + T5 * T4_dT ; T3 = T4 * ( 1.0 + pParam->HSMHV_rdvg11 ) ; T3_dVd = T4_dVd * ( 1.0 + pParam->HSMHV_rdvg11 ) ; T3_dT = T4_dT * ( 1.0 + pParam->HSMHV_rdvg11 ) ; Fn_SU2( Rsdrift , T2 , T3 , rdsu2_dlt , T0, T5 ) ; Rsdrift_dVdse = T0 * T2_dVd + T5 * T3_dVd ; Rsdrift_dVgse = T0 * T2_dVg ; Rsdrift_dT = T0 * T2_dT + T5 * T3_dT ; /* ... Vbse dependence */ T1 = 1.0 - pParam->HSMHV_rdvb * Vbserevz ; T1_dVb = - pParam->HSMHV_rdvb ; T1_dVd = - pParam->HSMHV_rdvb * Vbserevz_dVd ; Fn_SZ( T3 , T1 , rdsz_dlt , T4 ) ; T3_dVb = T4 * T1_dVb ; T3_dVd = T4 * T1_dVd ; T0 = Rsdrift ; Rsdrift = Rsdrift * T3 ; Rsdrift_dVdse = Rsdrift_dVdse * T3 + T0 * T3_dVd ; Rsdrift_dVgse = Rsdrift_dVgse * T3 ; Rsdrift_dVbse = + T0 * T3_dVb ; Rsdrift_dT = Rsdrift_dT * T3 ; } else { /* LDMOS normal mode: */ Rsdrift = here->HSMHV_rs ; Rsdrift_dVdse = 0.0 ; Rsdrift_dVgse = 0.0 ; Rsdrift_dVbse = 0.0 ; Rsdrift_dT = Rs0_dT ; } if ( here->HSMHVsubNode >= 0 && model->HSMHV_cosym == 0 && ( pParam->HSMHV_nover * ( NSUBSUB + pParam->HSMHV_nover ) ) > 0 ) { /* external substrate node exists && LDMOS case: */ /* Substrate Effect */ T0 = VBISUB - RDVDSUB * Vdserevz - RDVSUB * Vsubsrev ; Fn_SZ( T1, T0, 10.0, T2 ) ; T1_dVdserev = - RDVDSUB * Vdserevz_dVd * T2 ; T1_dVsubsrev = - RDVSUB * T2 ; T0 = NSUBSUB / ( pParam->HSMHV_nover * ( NSUBSUB + pParam->HSMHV_nover ) ) ; T4 = 2 * C_ESI / C_QE * T0 ; Wdep = sqrt ( T4 * T1 ) + small ; Wdep_dVdserev = 0.5 * T4 * T1_dVdserev / Wdep ; Wdep_dVsubsrev = 0.5 * T4 * T1_dVsubsrev / Wdep ; Fn_SU( Wdep, Wdep, DDRIFT, C_sub_delta * DDRIFT, T0 ) ; Wdep_dVdserev *= T0 ; Wdep_dVsubsrev *= T0 ; T0 = DDRIFT - Wdep ; Fn_SZ( T0, T0, C_sub_delta2, T2 ) ; T6 = Ldrift0 / T0 ; T6_dVdserev = T2 * Wdep_dVdserev * T6 / T0 ; T6_dVsubsrev = T2 * Wdep_dVsubsrev * T6 / T0 ; if ( VdseModeNML == 1 ) { /* Vdse normal mode: */ T0 = Rdrift ; Rdrift = T0 * T6 ; Rdrift_dVdse = Rdrift_dVdse * T6 + T0 * T6_dVdserev ; Rdrift_dVgse = Rdrift_dVgse * T6 ; Rdrift_dVbse = Rdrift_dVbse * T6 ; Rdrift_dVsubs= T0 * T6_dVsubsrev ; Rdrift_dT = Rdrift_dT * T6 ; } else { /* Vdse reverse mode: */ T0 = Rsdrift ; Rsdrift = T0 * T6 ; Rsdrift_dVdse = Rsdrift_dVdse * T6 + T0 * T6_dVdserev ; Rsdrift_dVgse = Rsdrift_dVgse * T6 ; Rsdrift_dVbse = Rsdrift_dVbse * T6 ; Rsdrift_dVsubs = T0 * T6_dVsubsrev ; Rsdrift_dT = Rsdrift_dT * T6 ; } } Rd = Rdrift ; Rd_dVgse = Rdrift_dVgse ; Rd_dVdse = Rdrift_dVdse ; Rd_dVbse = Rdrift_dVbse ; Rd_dVsubs = Rdrift_dVsubs ; Rd_dT = Rdrift_dT ; Rs = Rsdrift ; Rs_dVgse = Rsdrift_dVgse ; Rs_dVdse = Rsdrift_dVdse ; Rs_dVbse = Rsdrift_dVbse ; Rs_dVsubs = Rsdrift_dVsubs ; Rs_dT = Rsdrift_dT ; } else { /* bias-independent Rs/Rd */ Rd = VdseModeNML * here->HSMHV_rd + VdseModeRVS * here->HSMHV_rs ; Rd_dT = VdseModeNML * Rd0_dT + VdseModeRVS * Rs0_dT ; Rs = VdseModeNML * here->HSMHV_rs + VdseModeRVS * here->HSMHV_rd ; Rs_dT = VdseModeNML * Rs0_dT + VdseModeRVS * Rd0_dT ; } /* Weff dependence of the resistances */ Rd = Rd / WeffLD_nf ; Rd_dVgse /= WeffLD_nf ; Rd_dVdse /= WeffLD_nf ; Rd_dVbse /= WeffLD_nf ; Rd_dVsubs /= WeffLD_nf ; Rd_dT /= WeffLD_nf ; Rs = Rs / WeffLD_nf ; Rs_dVgse /= WeffLD_nf ; Rs_dVdse /= WeffLD_nf ; Rs_dVbse /= WeffLD_nf ; Rs_dVsubs /= WeffLD_nf ; Rs_dT /= WeffLD_nf ; /* Sheet resistances are added. */ Rd += VdseModeNML * here->HSMHV_rd0 + VdseModeRVS * here->HSMHV_rs0 ; Rs += VdseModeNML * here->HSMHV_rs0 + VdseModeRVS * here->HSMHV_rd0 ; /* Re-stamps for hsmhvnoi.c */ /* Please see hsmhvnoi.c */ T0 = VdseModeNML * Rd + VdseModeRVS * Rs ; /* mode-dependent --> geometrical */ if ( T0 > 0.0 && model->HSMHV_cothrml != 0 ) here->HSMHVdrainConductance = Mfactor / T0 ; else here->HSMHVdrainConductance = 0.0 ; T0 = VdseModeNML * Rs + VdseModeRVS * Rd ; /* mode-dependent --> geometrical */ if ( T0 > 0.0 && model->HSMHV_cothrml != 0 ) here->HSMHVsourceConductance = Mfactor / T0 ; else here->HSMHVsourceConductance = 0.0 ; } /* end of case flg_rsrd=1 or flg_rsrd=3 */ /* Clamping for Vbs > Vbs_bnd */ if ( Vbs > Vbs_bnd ) { T1 = Vbs - Vbs_bnd ; T2 = Vbs_max - Vbs_bnd ; T1_dT = - Vbs_bnd_dT ; T2_dT = Vbs_max_dT - Vbs_bnd_dT ; Fn_SUPoly4m( TY , T1 , T2 , Vbscl_dVbs , T0 ) ; TY_dT = T1_dT * Vbscl_dVbs + T2_dT * T0 ; Vbscl = Vbs_bnd + TY ; Vbscl_dT = Vbs_bnd_dT + TY_dT ; T3 = 1 / T2 ; /* x/xmax */ T4 = T1 * T3 ; T4_dVb = T3 ; T4_dT = T1_dT * T3 - T1*T3*T3*T2_dT; T4_dVb_dT = -T3*T3*T2_dT ; T5 = T4 * T4; T5_dVb = 2 * T4_dVb * T4 ; T5_dT = 2.0*T4*T4_dT; T5_dVb_dT = 2 * T4_dVb_dT * T4 + 2 * T4_dVb * T4_dT ; T15 = 2 * T4_dVb * T4_dVb ; /* T15 = T5_dVb_dVb */ T6 = T4 * T5 ; T6_dVb = T4_dVb * T5 + T4 * T5_dVb ; T6_dT = T4_dT * T5 + T4 * T5_dT ; T6_dVb_dT = T4_dVb_dT * T5 + T4_dVb * T5_dT + T4_dT * T5_dVb + T4*T5_dVb_dT ; T16 = T4_dVb * T5_dVb + T4_dVb * T5_dVb + T4 * T15 ; /* T16 = T6_dVb_dVb */ /* T7 = Z T7_dVb = dZ_dVb T17 = dZ_dVb_dVb */ T7 = 1 + T4 + T5 + T6 + T5 * T5 ; T7_dVb = T4_dVb + T5_dVb + T6_dVb + 2 * T5_dVb * T5 ; T7_dT = T4_dT + T5_dT + T6_dT + 2 * T5_dT * T5 ; T7_dVb_dT = T4_dVb_dT + T5_dVb_dT + T6_dVb_dT + 2 * T5_dVb_dT * T5 + 2 * T5_dVb * T5_dT ; T17 = T15 + T16 + 2 * T15 * T5 + 2 * T5_dVb * T5_dVb ; T8 = T7 * T7 ; T8_dVb = 2 * T7_dVb * T7 ; T8_dT = 2 * T7_dT * T7 ; T9 = 1 / T8 ; T9_dVb = - T8_dVb * T9 * T9 ; T9_dT = - T8_dT * T9 * T9 ; Vbscl_dVbs = T2 * T7_dVb * T9 ; Vbscl_dVbs_dT = T2_dT * T7_dVb * T9 + T2*(T7_dVb_dT * T9+ T7_dVb * T9_dT); Vbscl_dVbs_dVbs = T2 * ( T17 * T9 + T7_dVb * T9_dVb ) ; } else { Vbscl = Vbs ; Vbscl_dVbs = 1.0 ; Vbscl_dT = 0.0 ; Vbscl_dVbs_dVbs = 0.0 ; } /*-----------------------------------------------------------* * Vxsz: Modified bias introduced to realize symmetry at Vds=0. *-----------------*/ T1 = Vbscl_dVbs * Vds / 2 ; Fn_SymAdd( Vzadd , T1 , model->HSMHV_vzadd0 , T2 ) ; Vzadd_dVbs = T2 * Vbscl_dVbs_dVbs * Vds / 2 ; Vzadd_dT = T2 * Vbscl_dVbs_dT * Vds / 2 ; T2 *= Vbscl_dVbs / 2 ; Vzadd_dVds = T2 ; if ( Vzadd < ps_conv ) { Vzadd = ps_conv ; Vzadd_dVds = 0.0 ; Vzadd_dVbs = 0.0 ; Vzadd_dT = 0.0 ; } Vbsz = Vbscl + Vzadd ; Vbsz_dVbs = Vbscl_dVbs + Vzadd_dVbs ; Vbsz_dVds = Vzadd_dVds ; Vbsz_dT = Vbscl_dT + Vzadd_dT; Vdsz = Vds + 2.0 * Vzadd ; Vdsz_dVbs = 2.0 * Vzadd_dVbs ; Vdsz_dVds = 1.0 + 2.0 * Vzadd_dVds ; Vdsz_dT = 2.0 * Vzadd_dT ; Vgsz = Vgs + Vzadd ; Vgsz_dVbs = Vzadd_dVbs ; Vgsz_dVgs = 1.0 ; Vgsz_dVds = Vzadd_dVds ; Vgsz_dT = Vzadd_dT ; /*---------------------------------------------------* * Factor of modification for symmetry. *-----------------*/ T1 = here->HSMHV_qnsub_esi * Cox0_inv * Cox0_inv ; T2 = Vgs - Vfb ; T3 = 1 + 2.0 / T1 * ( T2 - 1.0 / here->HSMHV_betatnom - Vbscl ) ; Fn_SZ( T4 , T3 , 1e-3 , T5 ) ; TX = sqrt( T4 ) ; Pslsat = T2 + T1 * ( 1.0 - TX ) ; VdsatS = Pslsat - Pb2c ; Fn_SL( VdsatS , VdsatS , 0.1 , 5e-2 , T6 ) ; VdsatS_dVbs = ( TX ? (T6 * T5 / TX * Vbscl_dVbs) : 0.0 ) ; VdsatS_dVds = 0.0 ; VdsatS_dVgs = ( TX ? (T6 * ( 1.0 - T5 / TX )) : 0.0 ) ; VdsatS_dT = (TX ? (T6* T5/TX * Vbscl_dT) : 0) ; T1 = Vds / VdsatS ; Fn_SUPoly4( TX , T1 , 1.0 , T0 ) ; FMDVDS = TX * TX ; T2 = 2 * TX * T0 ; T3 = T2 / ( VdsatS * VdsatS ) ; FMDVDS_dVbs = T3 * ( - Vds * VdsatS_dVbs ) ; FMDVDS_dVds = T3 * ( 1.0 * VdsatS - Vds * VdsatS_dVds ) ; FMDVDS_dVgs = T3 * ( - Vds * VdsatS_dVgs ) ; FMDVDS_dT = T3 * ( - Vds * VdsatS_dT ) ; /*-----------------------------------------------------------* * Quantum effect *-----------------*/ if ( model->HSMHV_flg_qme == 0 ) { flg_qme = 0 ; } else { flg_qme = 1 ; } T1 = here->HSMHV_2qnsub_esi ; T2 = sqrt( T1 * Pb20 ) ; Vthq = Pb20 + Vfb + T2 * Cox0_inv ; Vthq_dVb = 0.0 ; Vthq_dVd = 0.0 ; if ( flg_qme == 0 ) { Tox = Tox0 ; Tox_dVb = 0.0 ; Tox_dVd = 0.0 ; Tox_dVg = 0.0 ; Cox = Cox0 ; Cox_dVb = 0.0 ; Cox_dVd = 0.0 ; Cox_dVg = 0.0 ; Cox_inv = Cox0_inv ; Cox_inv_dVb = 0.0 ; Cox_inv_dVd = 0.0 ; Cox_inv_dVg = 0.0 ; T0 = cnst0 * cnst0 * Cox_inv ; cnstCoxi = T0 * Cox_inv ; cnstCoxi_dVb = 0.0 ; cnstCoxi_dVd = 0.0 ; cnstCoxi_dVg = 0.0 ; cnstCoxi_dT = 2.0 * cnst0 * cnst0_dT * Cox_inv * Cox_inv ; } else { T1 = - model->HSMHV_qme2 ; T5 = Vgsz - Vthq - model->HSMHV_qme2 ; T5_dVb = Vgsz_dVbs - Vthq_dVb ; T5_dVd = Vgsz_dVds - Vthq_dVd ; T5_dVg = Vgsz_dVgs ; T5_dT = Vgsz_dT ; Fn_SZ( T2 , - T5 , qme2_dlt, T3) ; T2 = T2 + small ; T2_dVb = - T3 * T5_dVb ; T2_dVd = - T3 * T5_dVd ; T2_dVg = - T3 * T5_dVg ; T2_dT = - T3 * T5_dT ; T3 = model->HSMHV_qme12 * T1 * T1 ; T4 = model->HSMHV_qme12 * T2 * T2 + model->HSMHV_qme3 ; Fn_SU( dTox , T4 , T3 , qme_dlt , T6 ) ; T7 = 2 * model->HSMHV_qme12 * T2 * T6 ; dTox_dVb = T7 * T2_dVb ; dTox_dVd = T7 * T2_dVd ; dTox_dVg = T7 * T2_dVg ; dTox_dT = T7 * T2_dT ; if ( dTox * 1.0e12 < Tox0 ) { dTox = 0.0 ; dTox_dVb = 0.0 ; dTox_dVd = 0.0 ; dTox_dVg = 0.0 ; dTox_dT = 0.0 ; flg_qme = 0 ; } Tox = Tox0 + dTox ; Tox_dVb = dTox_dVb ; Tox_dVd = dTox_dVd ; Tox_dVg = dTox_dVg ; Tox_dT = dTox_dT ; Cox = c_eox / Tox ; T1 = - c_eox / ( Tox * Tox ) ; Cox_dVb = T1 * Tox_dVb ; Cox_dVd = T1 * Tox_dVd ; Cox_dVg = T1 * Tox_dVg ; Cox_dT = T1 * Tox_dT ; Cox_inv = Tox / c_eox ; T1 = 1.0 / c_eox ; Cox_inv_dVb = T1 * Tox_dVb ; Cox_inv_dVd = T1 * Tox_dVd ; Cox_inv_dVg = T1 * Tox_dVg ; Cox_inv_dT = T1 * Tox_dT ; T0 = cnst0 * cnst0 * Cox_inv ; cnstCoxi = T0 * Cox_inv ; T1 = 2.0 * T0 ; cnstCoxi_dVb = T1 * Cox_inv_dVb ; cnstCoxi_dVd = T1 * Cox_inv_dVd ; cnstCoxi_dVg = T1 * Cox_inv_dVg ; cnstCoxi_dT = 2.0 * cnst0 * cnst0_dT * Cox_inv * Cox_inv + T1 * Cox_inv_dT; } /*---------------------------------------------------* * Vbsz2 : Vbs for dVth *-----------------*/ Vbsz2 = Vbsz ; Vbsz2_dVbs = Vbsz_dVbs ; Vbsz2_dVds = Vbsz_dVds ; Vbsz2_dVgs = 0.0 ; Vbsz2_dT = Vbsz_dT ; /*---------------------------------------------------* * Vthp : Vth with pocket. *-----------------*/ T1 = here->HSMHV_2qnsub_esi ; Qb0 = sqrt (T1 * (Pb20 - Vbsz2)) ; T2 = 0.5 * T1 / Qb0 ; Qb0_dVb = T2 * (- Vbsz2_dVbs) ; Qb0_dVd = T2 * (- Vbsz2_dVds) ; Qb0_dVg = T2 * (- Vbsz2_dVgs) ; Qb0_dT = T2 * (- Vbsz2_dT) ; Vthp = Pb20 + Vfb + Qb0 * Cox_inv + here->HSMHV_ptovr; Vthp_dVb = Qb0_dVb * Cox_inv + Qb0 * Cox_inv_dVb ; Vthp_dVd = Qb0_dVd * Cox_inv + Qb0 * Cox_inv_dVd ; Vthp_dVg = Qb0_dVg * Cox_inv + Qb0 * Cox_inv_dVg ; Vthp_dT = Qb0_dT * Cox_inv + Qb0 * Cox_inv_dT + ptovr_dT ; if ( pParam->HSMHV_pthrou != 0.0 ) { /* Modify Pb20 to Pb20b */ T11 = beta * 0.25 ; T10 = beta_inv - cnstCoxi * T11 + small ; T10_dVg = - T11 * cnstCoxi_dVg ; T10_dVd = - T11 * cnstCoxi_dVd ; T10_dVb = - T11 * cnstCoxi_dVb ; T10_dT = beta_inv_dT - ( T11 * cnstCoxi_dT + beta_dT * 0.25 * cnstCoxi ) ; T1 = Vgsz - T10 - psia2_dlt ; T1_dVg = Vgsz_dVgs - T10_dVg ; T1_dVd = Vgsz_dVds - T10_dVd ; T1_dVb = Vgsz_dVbs - T10_dVb ; T1_dT = Vgsz_dT - T10_dT ; T0 = Fn_Sgn (T10) ; T2 = sqrt (T1 * T1 + T0 * 4.0 * T10 * psia2_dlt) ; T3 = T10 + 0.5 * (T1 + T2) - Vfb ; /* Vgpa for sqrt calc. */ T4 = T1 / T2 ; T5 = T0 * 2.0 * psia2_dlt / T2 ; T3_dVg = T10_dVg + 0.5 * (T1_dVg + (T4 * T1_dVg + T5 * T10_dVg ) ) ; T3_dVd = T10_dVd + 0.5 * (T1_dVd + (T4 * T1_dVd + T5 * T10_dVd ) ) ; T3_dVb = T10_dVb + 0.5 * (T1_dVb + (T4 * T1_dVb + T5 * T10_dVb ) ) ; T3_dT = T10_dT + 0.5 * (T1_dT + (T4 * T1_dT + T5 * T10_dT ) ) ; T4 = 4.0 / cnstCoxi * beta_inv * beta_inv ; T8 = 4.0 / cnstCoxi ; T9 = beta_inv * beta_inv ; T4_dT = - 4.0 * cnstCoxi_dT / ( cnstCoxi * cnstCoxi ) * T9 + T8 * 2.0 * beta_inv * beta_inv_dT ; T5 = beta * T3 - 1.0 ; T5_dT = beta_dT * T3 + beta * T3_dT ; T6 = T5 / cnstCoxi ; T1 = 1.0 + T5 * T4 ; T2 = beta * T4 ; T6 = T6 * T4 ; T1_dVg = (T2 * T3_dVg - T6 * cnstCoxi_dVg ) ; T1_dVd = (T2 * T3_dVd - T6 * cnstCoxi_dVd ) ; T1_dVb = (T2 * T3_dVb - T6 * cnstCoxi_dVb ) ; T1_dT = T5_dT * T4 + T5 * T4_dT ; Fn_SZ( T1 ,T1, psia_dlt, T7) ; T1 += epsm10 ; T1_dVg *= T7 ; T1_dVd *= T7 ; T1_dVb *= T7 ; T1_dT *= T7 ; T2 = sqrt (T1) ; T5 = 0.5 / T2 ; T2_dVg = T1_dVg * T5 ; T2_dVd = T1_dVd * T5 ; T2_dVb = T1_dVb * T5 ; T2_dT = T1_dT * T5 ; T4 = 0.5 * beta ; Psi_a = T3 + cnstCoxi * T4 * (1.0 - T2) ; T5 = T4 * (1.0 - T2) ; T6 = T4 * cnstCoxi ; Psi_a_dVg = T3_dVg + (cnstCoxi_dVg * T5 - T6 * T2_dVg) ; Psi_a_dVd = T3_dVd + (cnstCoxi_dVd * T5 - T6 * T2_dVd) ; Psi_a_dVb = T3_dVb + (cnstCoxi_dVb * T5 - T6 * T2_dVb) ; Psi_a_dT = T3_dT + (cnstCoxi_dT * T5 - T6 * T2_dT) + cnstCoxi * 0.5 * beta_dT * ( 1.0 - T2 ) ; Fn_SU( Pb20a , Psi_a, Pb20, delta0, T2) ; Pb20a_dVb = T2 * Psi_a_dVb ; Pb20a_dVd = T2 * Psi_a_dVd ; Pb20a_dVg = T2 * Psi_a_dVg ; Pb20a_dT = T2 * Psi_a_dT ; } T1 = pParam->HSMHV_pthrou ; Pb20b = Pb20 + T1 * (Pb20a - Pb20) ; Pb20b_dVb = T1 * Pb20a_dVb ; Pb20b_dVd = T1 * Pb20a_dVd ; Pb20b_dVg = T1 * Pb20a_dVg ; Pb20b_dT = T1 * Pb20a_dT ; T0 = 0.95 ; T1 = T0 * Pb20b - Vbsz2 - 1.0e-3 ; T1_dVb = T0 * Pb20b_dVb - Vbsz2_dVbs ; T1_dVd = T0 * Pb20b_dVd - Vbsz2_dVds ; T1_dVg = T0 * Pb20b_dVg - Vbsz2_dVgs ; T1_dT = T0 * Pb20b_dT - Vbsz2_dT ; T2 = sqrt (T1 * T1 + 4.0 * T0 * Pb20b * 1.0e-3) ; T3 = T0 * Pb20b - 0.5 * (T1 + T2) ; T4 = 2.0 * T0 * 1.0e-3 ; T5 = T1 / T2 ; T6 = T4 / T2 ; T3_dVb = T0 * Pb20b_dVb - 0.5 * (T1_dVb + (T1_dVb * T5 + T6 * Pb20b_dVb ) ) ; T3_dVd = T0 * Pb20b_dVd - 0.5 * (T1_dVd + (T1_dVd * T5 + T6 * Pb20b_dVd ) ) ; T3_dVg = T0 * Pb20b_dVg - 0.5 * (T1_dVg + (T1_dVg * T5 + T6 * Pb20b_dVg ) ) ; T3_dT = T0 * Pb20b_dT - 0.5 * (T1_dT + (T1_dT * T5 + T6 * Pb20b_dT ) ) ; Pbsum = Pb20b - T3 ; Pbsum_dVb = Pb20b_dVb - T3_dVb ; Pbsum_dVd = Pb20b_dVd - T3_dVd ; Pbsum_dVg = Pb20b_dVg - T3_dVg ; Pbsum_dT = Pb20b_dT - T3_dT ; sqrt_Pbsum = sqrt( Pbsum ) ; /*-------------------------------------------* * dVthLP : Short-channel effect induced by pocket. * - Vth0 : Vth without pocket. *-----------------*/ if ( model->HSMHV_lp != 0.0 ) { T1 = here->HSMHV_2qnsub_esi ; T2 = model->HSMHV_bs2 - Vbsz2 ; T3 = T2 + small ; T4 = sqrt (T3 * T3 + 4.0 * vth_dlt) ; T5 = 0.5 * (T3 + T4) ; T6 = 0.5 * (1.0 + T3 / T4) ; T5_dVb = - Vbsz2_dVbs * T6 ; T5_dVd = - Vbsz2_dVds * T6 ; T5_dVg = - Vbsz2_dVgs * T6 ; T5_dT = - Vbsz2_dT * T6 ; T7 = 1.0 / T5 ; bs12 = model->HSMHV_bs1 * T7 ; T8 = - bs12 * T7 ; bs12_dVb = T8 * T5_dVb ; bs12_dVd = T8 * T5_dVd ; bs12_dVg = T8 * T5_dVg ; bs12_dT = T8 * T5_dT ; Fn_SU( T10 , Vbsz2 + bs12, 0.93 * Pb20, vth_dlt, T0) ; Qbmm = sqrt (T1 * (Pb20 - T10 )) ; T9 = T0 / Qbmm ; Qbmm_dVb = 0.5 * T1 * - (Vbsz2_dVbs + bs12_dVb) * T9 ; Qbmm_dVd = 0.5 * T1 * - (Vbsz2_dVds + bs12_dVd) * T9 ; Qbmm_dVg = 0.5 * T1 * - (Vbsz2_dVgs + bs12_dVg) * T9 ; Qbmm_dT = 0.5 * T1 * - (Vbsz2_dT + bs12_dT) * T9 ; dqb = (Qb0 - Qbmm) * Cox_inv ; dqb_dVb = Vthp_dVb - Qbmm_dVb * Cox_inv - Qbmm * Cox_inv_dVb ; dqb_dVd = Vthp_dVd - Qbmm_dVd * Cox_inv - Qbmm * Cox_inv_dVd ; dqb_dVg = Vthp_dVg - Qbmm_dVg * Cox_inv - Qbmm * Cox_inv_dVg ; dqb_dT = Qb0_dT * Cox_inv + Qb0 * Cox_inv_dT - Qbmm_dT * Cox_inv - Qbmm * Cox_inv_dT ; T1 = 2.0 * C_QE * here->HSMHV_nsubc * C_ESI ; T2 = sqrt( T1 * ( Pb2c - Vbsz2 ) ) ; Vth0 = Pb2c + Vfb + T2 * Cox_inv ; T3 = 0.5 * T1 / T2 * Cox_inv ; Vth0_dVb = T3 * ( - Vbsz2_dVbs ) + T2 * Cox_inv_dVb ; Vth0_dVd = T3 * ( - Vbsz2_dVds ) + T2 * Cox_inv_dVd ; Vth0_dVg = T3 * ( - Vbsz2_dVgs ) + T2 * Cox_inv_dVg ; Vth0_dT = T3 * ( - Vbsz2_dT ) + T2 * Cox_inv_dT ; T1 = C_ESI * Cox_inv ; T2 = here->HSMHV_wdplp ; T4 = 1.0e0 / ( model->HSMHV_lp * model->HSMHV_lp ) ; T5 = 2.0e0 * ( model->HSMHV_vbi - Pb20b ) * T1 * T2 * T4 ; dVth0 = T5 * sqrt_Pbsum ; T6 = 0.5 * T5 / sqrt_Pbsum ; T7 = 2.0e0 * ( model->HSMHV_vbi - Pb20b ) * C_ESI * T2 * T4 * sqrt_Pbsum ; T8 = - 2.0e0 * T1 * T2 * T4 * sqrt_Pbsum ; dVth0_dVb = T6 * Pbsum_dVb + T7 * Cox_inv_dVb + T8 * Pb20b_dVb ; dVth0_dVd = T6 * Pbsum_dVd + T7 * Cox_inv_dVd + T8 * Pb20b_dVd ; dVth0_dVg = T6 * Pbsum_dVg + T7 * Cox_inv_dVg + T8 * Pb20b_dVg ; dVth0_dT = T6 * Pbsum_dT + T7 * Cox_inv_dT + T8 * Pb20b_dT ; T1 = Vthp - Vth0 ; T1_dVb = Vthp_dVb - Vth0_dVb ; T2 = pParam->HSMHV_scp1 + pParam->HSMHV_scp3 * Pbsum / model->HSMHV_lp ; T2_dVb = pParam->HSMHV_scp3 * Pbsum_dVb / model->HSMHV_lp ; T3 = T2 + pParam->HSMHV_scp2 * Vdsz ; T3_dVb = T2_dVb + pParam->HSMHV_scp2 * Vdsz_dVbs ; Vdx = model->HSMHV_scp21 + Vdsz ; Vdx_dVbs = Vdsz_dVbs ; /* Vdx_dT = Vdsz_dT ;*/ Vdx2 = Vdx * Vdx ; Vdx2_dVbs = 2 * Vdx_dVbs * Vdx ; /* Vdx2_dT = 2 * Vdx_dT * Vdx ;*/ dVthLP = T1 * dVth0 * T3 + dqb - here->HSMHV_msc / Vdx2 ; dVthLP_dVb = T1_dVb * dVth0 * T3 + T1 * dVth0_dVb * T3 + T1 * dVth0 * T3_dVb + dqb_dVb + here->HSMHV_msc / Vdx2 /Vdx2 *Vdx2_dVbs; T4 = T1 * dVth0 * pParam->HSMHV_scp3 / model->HSMHV_lp ; dVthLP_dVd = (Vthp_dVd - Vth0_dVd) * dVth0 * T3 + T1 * dVth0_dVd * T3 + T4 * Pbsum_dVd + T1 * dVth0 * pParam->HSMHV_scp2 * Vdsz_dVds + dqb_dVd + 2.0e0 * here->HSMHV_msc * Vdx * Vdsz_dVds / ( Vdx2 * Vdx2 ) ; dVthLP_dVg = (Vthp_dVg - Vth0_dVg) * dVth0 * T3 + T1 * dVth0_dVg * T3 + T4 * Pbsum_dVg + dqb_dVg ; dVthLP_dT = (Vthp_dT - Vth0_dT) * dVth0 * T3 + T1 * dVth0_dT * T3 + T4 * Pbsum_dT + T1 * dVth0 * pParam->HSMHV_scp2 * Vdsz_dT + dqb_dT + 2.0e0 * here->HSMHV_msc * Vdx * Vdsz_dT / ( Vdx2 * Vdx2 ); } else { dVthLP = 0.0e0 ; dVthLP_dVb = 0.0e0 ; dVthLP_dVd = 0.0e0 ; dVthLP_dVg = 0.0e0 ; dVthLP_dT = 0.0e0 ; } /*---------------------------------------------------* * dVthSC : Short-channel effect induced by Vds. *-----------------*/ T1 = C_ESI * Cox_inv ; T2 = here->HSMHV_wdpl ; T3 = here->HSMHV_lgate - model->HSMHV_parl2 ; T4 = 1.0e0 / ( T3 * T3 ) ; T5 = 2.0e0 * ( model->HSMHV_vbi - Pb20b ) * T1 * T2 * T4 ; dVth0 = T5 * sqrt_Pbsum ; T6 = T5 / 2.0 / sqrt_Pbsum ; T7 = 2.0e0 * ( model->HSMHV_vbi - Pb20b ) * C_ESI * T2 * T4 * sqrt_Pbsum ; T8 = - 2.0e0 * T1 * T2 * T4 * sqrt_Pbsum ; dVth0_dVb = T6 * Pbsum_dVb + T7 * Cox_inv_dVb + T8 * Pb20b_dVb ; dVth0_dVd = T6 * Pbsum_dVd + T7 * Cox_inv_dVd + T8 * Pb20b_dVd ; dVth0_dVg = T6 * Pbsum_dVg + T7 * Cox_inv_dVg + T8 * Pb20b_dVg ; dVth0_dT = T6 * Pbsum_dT + T7 * Cox_inv_dT + T8 * Pb20b_dT ; T1 = pParam->HSMHV_sc3 / here->HSMHV_lgate ; T4 = pParam->HSMHV_sc1 + T1 * Pbsum ; T4_dVb = T1 * Pbsum_dVb ; T4_dVd = T1 * Pbsum_dVd ; T4_dVg = T1 * Pbsum_dVg ; T4_dT = T1 * Pbsum_dT ; T5 = T4 + pParam->HSMHV_sc2 * Vdsz * ( 1.0 + model->HSMHV_sc4 * Pbsum ); T5_dVb = T4_dVb + pParam->HSMHV_sc2 * Vdsz * model->HSMHV_sc4 * Pbsum_dVb + pParam->HSMHV_sc2 * Vdsz_dVbs * model->HSMHV_sc4 * Pbsum; T5_dVd = T4_dVd + pParam->HSMHV_sc2 * Vdsz_dVds * ( 1.0 + model->HSMHV_sc4 * Pbsum ) + pParam->HSMHV_sc2 * Vdsz * model->HSMHV_sc4 * Pbsum_dVd; T5_dVg = T4_dVg + pParam->HSMHV_sc2 * Vdsz * model->HSMHV_sc4 * Pbsum_dVg; T5_dT = T4_dT + pParam->HSMHV_sc2 * Vdsz * model->HSMHV_sc4 * Pbsum_dT + pParam->HSMHV_sc2 * Vdsz_dT * model->HSMHV_sc4 * Pbsum; dVthSC = dVth0 * T5 ; dVthSC_dVb = dVth0_dVb * T5 + dVth0 * T5_dVb ; dVthSC_dVd = dVth0_dVd * T5 + dVth0 * T5_dVd ; dVthSC_dVg = dVth0_dVg * T5 + dVth0 * T5_dVg ; dVthSC_dT = dVth0_dT * T5 + dVth0 * T5_dT ; /*---------------------------------------------------* * dVthW : narrow-channel effect. *-----------------*/ T1 = 1.0 / Cox ; T2 = T1 * T1 ; T3 = 1.0 / ( Cox + pParam->HSMHV_wfc / Weff ) ; T4 = T3 * T3 ; T5 = T1 - T3 ; T6 = Qb0 * ( T2 - T4 ) ; dVthW = Qb0 * T5 + pParam->HSMHV_wvth0 / here->HSMHV_wg ; dVthW_dVb = Qb0_dVb * T5 - Cox_dVb * T6 ; dVthW_dVd = Qb0_dVd * T5 - Cox_dVd * T6 ; dVthW_dVg = - Cox_dVg * T6 ; dVthW_dT = Qb0_dT * T5 - Cox_dT * T6 ; /*---------------------------------------------------* * dVth : Total variation. * - Positive dVth means the decrease in Vth. *-----------------*/ dVth = dVthSC + dVthLP + dVthW + here->HSMHV_dVthsm ; dVth_dVb = dVthSC_dVb + dVthLP_dVb + dVthW_dVb ; dVth_dVd = dVthSC_dVd + dVthLP_dVd + dVthW_dVd ; dVth_dVg = dVthSC_dVg + dVthLP_dVg + dVthW_dVg ; dVth_dT = dVthSC_dT + dVthLP_dT + dVthW_dT ; /*---------------------------------------------------* * Vth : Threshold voltage. *-----------------*/ Vth = Vthq - dVth ; /*-----------------------------------------------------------* * Constants in the equation of Ps0 . *-----------------*/ fac1 = cnst0 * Cox_inv ; fac1_dVbs = cnst0 * Cox_inv_dVb ; fac1_dVds = cnst0 * Cox_inv_dVd ; fac1_dVgs = cnst0 * Cox_inv_dVg ; fac1p2 = fac1 * fac1 ; fac1_dT = Cox_inv * cnst0_dT ; fac1p2_dT = 2.0 * fac1 * fac1_dT ; /*---------------------------------------------------* * Poly-Depletion Effect *-----------------*/ if ( here->HSMHV_flg_pgd == 0 ) { dPpg = 0.0 ; dPpg_dVb = 0.0 ; dPpg_dVd = 0.0 ; dPpg_dVg = 0.0 ; dPpg_dT = 0.0 ; } else { T7 = Vgs ; T7_dVd = 0.0 ; T7_dVg = 1.0 ; T8 = Vds ; T8_dVd = 1.0 ; T0 = here->HSMHV_cnstpgd ; TX = pParam->HSMHV_pgd3 ; TY = FMDVDS * TX + ( 1.0 - FMDVDS ) * 0.5 ; T1 = TX - 0.5 ; TY_dVbs = T1 * FMDVDS_dVbs ; TY_dVds = T1 * FMDVDS_dVds ; TY_dVgs = T1 * FMDVDS_dVgs ; FMDVGS = 1.0 ; FMDVGS_dVgs = 0.0 ; if ( model->HSMHV_pgd2 > Vfb ) { T1 = model->HSMHV_pgd2 - Vfb ; T2 = ( Vgs - Vfb ) / T1 ; Fn_SZ( T3 , T2 , 1e-3 , T4 ) ; Fn_SU( T5 , T3 , 1.0 , 1e-3 , T6 ) ; T5_dVg = T4 * T6 / T1 ; FMDVGS = T5 * T5 ; FMDVGS_dVgs = 2 * T5 * T5_dVg ; } FMDPG = FMDVDS * FMDVGS ; FMDPG_dVbs = FMDVDS_dVbs * FMDVGS ; FMDPG_dVds = FMDVDS_dVds * FMDVGS ; FMDPG_dVgs = FMDVDS_dVgs * FMDVGS + FMDVDS * FMDVGS_dVgs ; FMDPG_dT = FMDVDS_dT * FMDVGS ; TX = pParam->HSMHV_pgd3 ; TY = FMDPG * TX + ( 1.0 - FMDPG ) * 0.5 ; T1 = TX - 0.5 ; TY_dVbs = T1 * FMDPG_dVbs ; TY_dVds = T1 * FMDPG_dVds ; TY_dVgs = T1 * FMDPG_dVgs ; TY_dT = T1 * FMDPG_dT ; if ( TX == 0.0 ) { TY =0.0 ; TY_dVbs =0.0 ; TY_dVds =0.0 ; TY_dVgs =0.0 ; TY_dT =0.0 ; } T3 = T7 - model->HSMHV_pgd2 - TY * T8 ; T3_dVb = - TY_dVbs * T8 ; T3_dVd = T7_dVd - ( TY_dVds * T8 + TY * T8_dVd ) ; T3_dVg = T7_dVg - ( TY_dVgs * T8 ) ; T3_dT = - TY_dT * T8; Fn_ExpLim( dPpg , T3 , T6 ) ; dPpg *= T0 ; dPpg_dVb = T0 * T6 * T3_dVb ; dPpg_dVd = T0 * T6 * T3_dVd ; dPpg_dVg = T0 * T6 * T3_dVg ; dPpg_dT = T0 * T6 * T3_dT ; Fn_SU( dPpg , dPpg , pol_b , pol_dlt , T9 ) ; dPpg_dVb *= T9 ; dPpg_dVd *= T9 ; dPpg_dVg *= T9 ; dPpg_dT *= T9 ; /* damping in accumulation zone */ T0 = Vfb + Vbsz ; T0_dVb = Vbsz_dVbs ; T1 = 0.6 * ( Vthq - T0 ) ; T1_dVb = 0.6 * ( Vthq_dVb - Vbsz_dVbs ) ; T1_dVd = 0.6 * ( Vthq_dVd - Vbsz_dVds ) ; Fn_SZ( T1 , T1 , 1e-2 , T2 ) ; T1_dVb *= T2 ; T1_dVd *= T2 ; T1 += T0 ; T1_dVb += Vbsz_dVbs ; T4 = 1.0 / ( T1 - T0 ) ; T5 = T4 * T4 ; T4_dVb = - ( T1_dVb - Vbsz_dVbs ) * T5 ; T4_dVd = - ( T1_dVd ) * T5 ; T6 = Vgsz - T0 ; T6_dVb = Vgsz_dVbs - T0_dVb ; dmpacc = T6 * T4 ; dmpacc_dVbs = T6 * T4_dVb + T6_dVb * T4 ; dmpacc_dVds = T6 * T4_dVd + ( Vgsz_dVds - Vbsz_dVds ) * T4 ; dmpacc_dVgs = Vgsz_dVgs * T4 ; Fn_SZ( dmpacc , dmpacc , 0.3 , T1 ) ; dmpacc_dVbs *= T1 ; dmpacc_dVds *= T1 ; dmpacc_dVgs *= T1 ; Fn_SU( dmpacc , dmpacc ,1.0 , 0.1 , T1 ) ; dmpacc_dVbs *= T1 ; dmpacc_dVds *= T1 ; dmpacc_dVgs *= T1 ; } /*---------------------------------------------------* * Vgp : Effective gate bias with SCE & RSCE & flatband. *-----------------*/ Vgp = Vgs - Vfb + dVth - dPpg ; Vgp_dVbs = dVth_dVb - dPpg_dVb ; Vgp_dVds = dVth_dVd - dPpg_dVd ; Vgp_dVgs = 1.0e0 + dVth_dVg - dPpg_dVg ; Vgp_dT = dVth_dT - dPpg_dT ; /*---------------------------------------------------* * Vgs_fb : Actual flatband voltage taking account Vbscl. * - note: if Vgs == Vgs_fb then Vgp == Ps0 == Vbscl . *------------------*/ Vgs_fb = Vfb - dVth + dPpg + Vbscl ; /*---------------------------------------------------* * Vfbsft : Vfb shift (trial for Vbscl >> 0) *-----------------*/ Vfbsft = 0.0 ; Vfbsft_dVbs = 0.0 ; Vfbsft_dVds = 0.0 ; Vfbsft_dVgs = 0.0 ; if ( Vbscl > 0.0 ) { /* values at D2/D3 boundary + beta */ /* Ps0 */ T1 = Vbscl + ( znbd5 + 1 ) * beta_inv ; T1_dT = Vbscl_dT + ( znbd5 + 1 ) * beta_inv_dT ; /* Qb0 */ /* T2 = cnst0 * sqrt( znbd5 ) */ T2 = cnst0 * 2.23606797749979 ; T2_dT = cnst0_dT * 2.23606797749979 ; /* Vgp assuming Qn0=0 */ T3 = T2 * Cox_inv + T1 ; T3_dT = T2_dT * Cox_inv + T1_dT ; /* Vgp difference */ TX = T3 - Vgp ; TX_dVbs = T2 * Cox_inv_dVb + Vbscl_dVbs - Vgp_dVbs ; TX_dVds = T2 * Cox_inv_dVd - Vgp_dVds ; TX_dVgs = T2 * Cox_inv_dVg - Vgp_dVgs ; TX_dT = T3_dT - Vgp_dT ; /* set lower limit to 0 */ Fn_SZ( TX , TX , 0.1 , T4 ) ; TX_dVbs *= T4 ; TX_dVds *= T4 ; TX_dVgs *= T4 ; TX_dT *= T4 ; /* TY: damping factor */ T1 = 0.5 ; T5 = Vbscl / T1 ; T5_dVb = Vbscl_dVbs / T1 ; T5_dT = Vbscl_dT / T1 ; T0 = T5 * T5 ; T6 = T0 * T0 ; T6_dVb = 4 * T0 * T5 * T5_dVb ; T6_dT = 4 * T0 * T5 * T5_dT ; T7 = 1.0 / ( 1.0 + T6 ) ; T8 = T7 * T7 ; TY = 1.0 - T7 ; TY_dVbs = T8 * T6_dVb ; TY_dT = T8 * T6_dT ; TX = TY = 0.0 ; Vfbsft = TX * TY ; Vfbsft_dVbs = TX_dVbs * TY + TX * TY_dVbs ; Vfbsft_dVds = TX_dVds * TY ; Vfbsft_dVgs = TX_dVgs * TY ; Vfbsft_dT = TX_dT * TY + TX * TY_dT ; Vgs_fb -= Vfbsft ; Vgp += Vfbsft ; Vgp_dVbs += Vfbsft_dVbs ; Vgp_dVds += Vfbsft_dVds ; Vgp_dVgs += Vfbsft_dVgs ; Vgp_dT += Vfbsft_dT ; } /*-----------------------------------------------------------* * Accumulation zone. (zone-A) * - evaluate basic characteristics and exit from this part. *-----------------*/ if ( Vgs < Vgs_fb ) { flg_zone = -1 ; /*---------------------------------------------------* * Evaluation of Ps0. * - Psa : Analytical solution of * Cox( Vgp - Psa ) = cnst0 * Qacc * where Qacc is the 3-degree series of (fdep)^{1/2}. * The unkown is transformed to Chi=beta(Ps0-Vbs). * - Ps0_min : |Ps0_min| when Vbs=0. *-----------------*/ Ps0_min = here->HSMHV_eg - Pb2 ; Ps0_min_dT = Eg_dT - Pb2_dT ; TX = beta * ( Vgp - Vbscl ) ; TX_dVbs = beta * ( Vgp_dVbs - Vbscl_dVbs ) ; TX_dVds = beta * Vgp_dVds ; TX_dVgs = beta * Vgp_dVgs ; TX_dT = beta_dT * ( Vgp - Vbscl ) + beta * ( Vgp_dT - Vbscl_dT ); T1 = 1.0 / ( beta * cnst0 ) ; TY = T1 * Cox ; TY_dVbs = T1 * Cox_dVb ; TY_dVds = T1 * Cox_dVd ; TY_dVgs = T1 * Cox_dVg ; T1_dT = - T1 / ( beta * cnst0 ) * ( beta_dT * cnst0 + beta * cnst0_dT ) ; TY_dT = T1_dT * Cox ; Ac41 = 2.0 + 3.0 * C_SQRT_2 * TY ; Ac4 = 8.0 * Ac41 * Ac41 * Ac41 ; T1 = 72.0 * Ac41 * Ac41 * C_SQRT_2 ; Ac4_dVbs = T1 * TY_dVbs ; Ac4_dVds = T1 * TY_dVds ; Ac4_dVgs = T1 * TY_dVgs ; Ac4_dT = T1 * TY_dT ; T4 = ( TX - 2.0 ) ; T5 = 9.0 * TY * T4 ; T5_dVb = 9.0 * ( TY_dVbs * T4 + TY * TX_dVbs ) ; T5_dVd = 9.0 * ( TY_dVds * T4 + TY * TX_dVds ) ; T5_dVg = 9.0 * ( TY_dVgs * T4 + TY * TX_dVgs ) ; T5_dT = 9.0 * ( TY_dT * T4 + TY * TX_dT ) ; Ac31 = 7.0 * C_SQRT_2 - T5 ; Ac31_dVbs = -T5_dVb ; Ac31_dVds = -T5_dVd ; Ac31_dVgs = -T5_dVg ; Ac31_dT = -T5_dT ; Ac3 = Ac31 * Ac31 ; T1 = 2.0 * Ac31 ; Ac3_dVbs = T1 * Ac31_dVbs ; Ac3_dVds = T1 * Ac31_dVds ; Ac3_dVgs = T1 * Ac31_dVgs ; Ac3_dT = T1 * Ac31_dT ; Ac2 = sqrt( Ac4 + Ac3 ) ; T1 = 0.5 / Ac2 ; Ac2_dVbs = T1 * ( Ac4_dVbs + Ac3_dVbs ) ; Ac2_dVds = T1 * ( Ac4_dVds + Ac3_dVds ) ; Ac2_dVgs = T1 * ( Ac4_dVgs + Ac3_dVgs ) ; Ac2_dT = T1 * ( Ac4_dT + Ac3_dT ) ; Ac1 = -7.0 * C_SQRT_2 + Ac2 + T5 ; Ac1_dVbs = Ac2_dVbs + T5_dVb ; Ac1_dVds = Ac2_dVds + T5_dVd ; Ac1_dVgs = Ac2_dVgs + T5_dVg ; Ac1_dT = Ac2_dT + T5_dT ; Acd = Fn_Pow( Ac1 , C_1o3 ) ; T1 = C_1o3 / ( Acd * Acd ) ; Acd_dVbs = Ac1_dVbs * T1 ; Acd_dVds = Ac1_dVds * T1 ; Acd_dVgs = Ac1_dVgs * T1 ; Acd_dT = Ac1_dT * T1 ; Acn = -4.0 * C_SQRT_2 - 12.0 * TY + 2.0 * Acd + C_SQRT_2 * Acd * Acd ; T1 = 2.0 + 2.0 * C_SQRT_2 * Acd ; Acn_dVbs = - 12.0 * TY_dVbs + T1 * Acd_dVbs ; Acn_dVds = - 12.0 * TY_dVds + T1 * Acd_dVds ; Acn_dVgs = - 12.0 * TY_dVgs + T1 * Acd_dVgs ; Acn_dT = - 12.0 * TY_dT + T1 * Acd_dT ; T1 = 1.0 / Acd ; Chi = Acn * T1 ; Chi_dVbs = ( Acn_dVbs - Chi * Acd_dVbs ) * T1 ; Chi_dVds = ( Acn_dVds - Chi * Acd_dVds ) * T1 ; Chi_dVgs = ( Acn_dVgs - Chi * Acd_dVgs ) * T1 ; Chi_dT = ( Acn_dT - Chi * Acd_dT ) * T1 ; Psa = Chi * beta_inv + Vbscl ; Psa_dVbs = Chi_dVbs * beta_inv + Vbscl_dVbs ; Psa_dVds = Chi_dVds * beta_inv ; Psa_dVgs = Chi_dVgs * beta_inv ; Psa_dT = Chi_dT * beta_inv + Chi * beta_inv_dT + Vbscl_dT; T1 = Psa - Vbscl ; T1_dT = Psa_dT - Vbscl_dT ; T2 = T1 / Ps0_min ; T2_dT = ( T1_dT * Ps0_min - T1 * Ps0_min_dT ) / ( Ps0_min * Ps0_min ) ; T3 = sqrt( 1.0 + ( T2 * T2 ) ) ; T3_dT = 1.0 / T3 * T2 * T2_dT ; T9 = T2 / T3 / Ps0_min ; T3_dVb = T9 * ( Psa_dVbs - Vbscl_dVbs ) ; T3_dVd = T9 * ( Psa_dVds ) ; T3_dVg = T9 * ( Psa_dVgs ) ; Ps0 = T1 / T3 + Vbscl ; T9 = 1.0 / ( T3 * T3 ) ; Ps0_dVbs = T9 * ( ( Psa_dVbs - Vbscl_dVbs ) * T3 - T1 * T3_dVb ) + Vbscl_dVbs ; Ps0_dVds = T9 * ( Psa_dVds * T3 - T1 * T3_dVd ) ; Ps0_dVgs = T9 * ( Psa_dVgs * T3 - T1 * T3_dVg ) ; Ps0_dT = T9 * ( ( Psa_dT - Vbscl_dT )* T3 - T1 * T3_dT ) + Vbscl_dT; /*---------------------------------------------------* * Characteristics. *-----------------*/ Psl = Ps0 ; Psl_dVbs = Ps0_dVbs ; Psl_dVds = Ps0_dVds ; Psl_dVgs = Ps0_dVgs ; Psl_dT = Ps0_dT ; /** (reminder) Psdl = Psl ; Psdl_dVbs = Psl_dVbs ; Psdl_dVds = Psl_dVds ; Psdl_dVgs = Psl_dVgs ; **/ T2 = ( Vgp - Ps0 ) ; T2_dT = Vgp_dT - Ps0_dT ; Qbu = Cox * T2 ; Qbu_dVbs = Cox * ( Vgp_dVbs - Ps0_dVbs ) + Cox_dVb * T2 ; Qbu_dVds = Cox * ( Vgp_dVds - Ps0_dVds ) + Cox_dVd * T2 ; Qbu_dVgs = Cox * ( Vgp_dVgs - Ps0_dVgs ) + Cox_dVg * T2 ; Qbu_dT = Cox * T2_dT ; Qiu = 0.0e0 ; Qiu_dVbs = 0.0e0 ; Qiu_dVds = 0.0e0 ; Qiu_dVgs = 0.0e0 ; Qiu_dT = 0.0e0 ; Qdrat = 0.0e0 ; Qdrat_dVbs = 0.0e0 ; Qdrat_dVds = 0.0e0 ; Qdrat_dVgs = 0.0e0 ; Qdrat_dT = 0.0 ; Lred = 0.0e0 ; Lred_dVbs = 0.0e0 ; Lred_dVds = 0.0e0 ; Lred_dVgs = 0.0e0 ; Lred_dT = 0.0e0 ; Ids = 0.0e0 ; Ids_dVbs = 0.0e0 ; Ids_dVds = 0.0e0 ; Ids_dVgs = 0.0e0 ; Ids_dT = 0.0e0 ; VgVt = 0.0 ; flg_noqi = 1 ; goto end_of_part_1 ; } /*-----------------------------------------------------------* * Initial guess for Ps0. *-----------------*/ /*---------------------------------------------------* * Ps0_iniA: solution of subthreshold equation assuming zone-D1/D2. *-----------------*/ TX = 1.0e0 + 4.0e0 * ( beta * ( Vgp - Vbscl ) - 1.0e0 ) / ( fac1p2 * beta2 ) ; TX = Fn_Max( TX , epsm10 ) ; Ps0_iniA = Vgp + fac1p2 * beta * 0.5 * ( 1.0e0 - sqrt( TX ) ) ; /* use analytical value in subthreshold region. */ if ( Vgs < ( Vfb + Vth ) * 0.5 ) { flg_pprv = 0 ; } if ( flg_pprv >= 1 ) { /*---------------------------------------------------* * Use previous value. *-----------------*/ T1 = Ps0_dVbs * dVbs + Ps0_dVds * dVds + Ps0_dVgs * dVgs ; Ps0_ini = Ps0 + T1 ; T2 = here->HSMHV_ps0_dtemp_prv * Temp_dif ; if ( fabs( T1 + T2 ) < dP_max ) { Ps0_ini += T2 ; } if ( flg_pprv == 2 ) { /* TX_dVxs = d^2 Ps0 / d Vxs^2 here */ if ( Vbsc_dif2 > epsm10 ) { TX_dVbs = ( here->HSMHV_ps0_dvbs_prv - here->HSMHV_ps0_dvbs_prv2 ) / Vbsc_dif2 ; } else { TX_dVbs = 0.0 ; } if ( Vdsc_dif2 > epsm10 ) { TX_dVds = ( here->HSMHV_ps0_dvds_prv - here->HSMHV_ps0_dvds_prv2 ) / Vdsc_dif2 ; } else { TX_dVds = 0.0 ; } if ( Vgsc_dif2 > epsm10 ) { TX_dVgs = ( here->HSMHV_ps0_dvgs_prv - here->HSMHV_ps0_dvgs_prv2 ) / Vgsc_dif2 ; } else { TX_dVgs = 0.0 ; } T2 = ( dVbs * dVbs ) / 2 * TX_dVbs + ( dVds * dVds ) / 2 * TX_dVds + ( dVgs * dVgs ) / 2 * TX_dVgs ; if ( fabs( T2 ) < fabs( 0.5 * T1 ) ) { Ps0_ini += T2 ; } else { flg_pprv = 1 ; } } T1 = Ps0_ini - Ps0 ; if ( T1 < - dP_max || T1 > dP_max ) { flg_pprv = 0 ; /* flag changes to analytical */ } else { Ps0_iniA = Fn_Max( Ps0_ini , Ps0_iniA ) ; } } /* end of (flg_pprv >=1) if-block */ if ( flg_pprv == 0 ) { /*---------------------------------------------------* * Analytical initial guess. *-----------------*/ /*-------------------------------------------* * Common part. *-----------------*/ Chi = beta * ( Ps0_iniA - Vbscl ) ; if ( Chi < znbd3 ) { /*-----------------------------------* * zone-D1/D2 * - Ps0_ini is the analytical solution of Qs=Qb0 with * Qb0 being approximated to 3-degree polynomial. *-----------------*/ TY = beta * ( Vgp - Vbscl ) ; T1 = 1.0e0 / ( cn_nc3 * beta * fac1 ) ; T2 = 81.0 + 3.0 * T1 ; T3 = -2916.0 - 81.0 * T1 + 27.0 * T1 * TY ; T4 = 1458.0 - 81.0 * ( 54.0 + T1 ) + 27.0 * T1 * TY ; T4 = T4 * T4 ; T5 = Fn_Pow( T3 + sqrt( 4 * T2 * T2 * T2 + T4 ) , C_1o3 ) ; TX = 3.0 - ( C_2p_1o3 * T2 ) / ( 3.0 * T5 ) + 1 / ( 3.0 * C_2p_1o3 ) * T5 ; Ps0_iniA = TX * beta_inv + Vbscl ; Ps0_ini = Ps0_iniA ; } else if ( Vgs <= Vth ) { /*-----------------------------------* * Weak inversion zone. *-----------------*/ Ps0_ini = Ps0_iniA ; } else { /*-----------------------------------* * Strong inversion zone. * - Ps0_iniB : upper bound. *-----------------*/ T1 = 1.0 / cnst1 / cnstCoxi ; T2 = T1 * Vgp * Vgp ; T3 = beta + 2.0 / Vgp ; Ps0_iniB = log( T2 ) / T3 ; Fn_SU( Ps0_ini , Ps0_iniA, Ps0_iniB, c_ps0ini_2, T1) ; } } TX = Vbscl + ps_conv / 2 ; if ( Ps0_ini < TX ) Ps0_ini = TX ; /*---------------------------------------------------* * Assign initial guess. *-----------------*/ Ps0 = Ps0_ini ; Psl_lim = Ps0_iniA ; /*---------------------------------------------------* * Calculation of Ps0. (beginning of Newton loop) * - Fs0 : Fs0 = 0 is the equation to be solved. * - dPs0 : correction value. *-----------------*/ exp_bVbs = exp( beta * Vbscl ) ; cfs1 = cnst1 * exp_bVbs ; flg_conv = 0 ; for ( lp_s0 = 1 ; lp_s0 <= lp_s0_max + 1 ; lp_s0 ++ ) { Chi = beta * ( Ps0 - Vbscl ) ; if ( Chi < znbd5 ) { /*-------------------------------------------* * zone-D1/D2. (Ps0) * - Qb0 is approximated to 5-degree polynomial. *-----------------*/ fi = Chi * Chi * Chi * ( cn_im53 + Chi * ( cn_im54 + Chi * cn_im55 ) ) ; fi_dChi = Chi * Chi * ( 3 * cn_im53 + Chi * ( 4 * cn_im54 + Chi * 5 * cn_im55 ) ) ; fs01 = cfs1 * fi * fi ; fs01_dPs0 = cfs1 * beta * 2 * fi * fi_dChi ; fb = Chi * ( cn_nc51 + Chi * ( cn_nc52 + Chi * ( cn_nc53 + Chi * ( cn_nc54 + Chi * cn_nc55 ) ) ) ) ; fb_dChi = cn_nc51 + Chi * ( 2 * cn_nc52 + Chi * ( 3 * cn_nc53 + Chi * ( 4 * cn_nc54 + Chi * 5 * cn_nc55 ) ) ) ; fs02 = sqrt( fb * fb + fs01 ) ; fs02_dPs0 = ( beta * fb_dChi * 2 * fb + fs01_dPs0 ) / ( fs02 + fs02 ) ; } else { /*-------------------------------------------* * zone-D3. (Ps0) *-----------------*/ if ( Chi < large_arg ) { /* avoid exp_Chi to become extremely large */ exp_Chi = exp( Chi ) ; fs01 = cfs1 * ( exp_Chi - 1.0e0 ) ; fs01_dPs0 = cfs1 * beta * ( exp_Chi ) ; } else { exp_bPs0 = exp( beta*Ps0 ) ; fs01 = cnst1 * ( exp_bPs0 - exp_bVbs ) ; fs01_dPs0 = cnst1 * beta * exp_bPs0 ; } fs02 = sqrt( Chi - 1.0 + fs01 ) ; fs02_dPs0 = ( beta + fs01_dPs0 ) / ( fs02 + fs02 ) ; } /* end of if ( Chi ... ) else block */ Fs0 = Vgp - Ps0 - fac1 * fs02 ; Fs0_dPs0 = - 1.0e0 - fac1 * fs02_dPs0 ; if ( flg_conv == 1 ) break ; dPs0 = - Fs0 / Fs0_dPs0 ; /*-------------------------------------------* * Update Ps0 . * - clamped to Vbscl if Ps0 < Vbscl . *-----------------*/ dPlim = 0.5*dP_max*(1.0 + Fn_Max(1.e0,fabs(Ps0))) ; if ( fabs( dPs0 ) > dPlim ) dPs0 = dPlim * Fn_Sgn( dPs0 ) ; Ps0 = Ps0 + dPs0 ; TX = Vbscl + ps_conv / 2 ; if ( Ps0 < TX ) Ps0 = TX ; /*-------------------------------------------* * Check convergence. * NOTE: This condition may be too rigid. *-----------------*/ if ( fabs( dPs0 ) <= ps_conv && fabs( Fs0 ) <= gs_conv ) { flg_conv = 1 ; } } /* end of Ps0 Newton loop */ /* Reduce loop count to exclude the sweep for derivative calculation */ lp_s0 -- ; /*-------------------------------------------* * Procedure for diverged case. *-----------------*/ if ( flg_conv == 0 ) { fprintf( stderr , "*** warning(HiSIM_HV): Went Over Iteration Maximum (Ps0)\n" ) ; fprintf( stderr , " Vbse = %7.3f Vdse = %7.3f Vgse = %7.3f\n" , Vbse , Vdse , Vgse ) ; if ( flg_info >= 2 ) { printf( "*** warning(HiSIM_HV): Went Over Iteration Maximum (Ps0)\n" ) ; } } /*---------------------------------------------------* * Evaluate derivatives of Ps0. * - note: Here, fs01_dVbs and fs02_dVbs are derivatives * w.r.t. explicit Vbs. So, Ps0 in the fs01 and fs02 * expressions is regarded as a constant. *-----------------*/ /* self heating */ Chi_dT = beta_dT *( Ps0 - Vbscl ) - beta * Vbscl_dT ; exp_bVbs_dT = ( beta_dT * Vbscl + beta * Vbscl_dT ) * exp_bVbs ; cfs1_dT = exp_bVbs * cnst1_dT + exp_bVbs_dT * cnst1 ; /* derivatives of fs0* w.r.t. explicit Vbs */ if ( Chi < znbd5 ) { fs01_dVbs = cfs1 * beta * fi * ( fi - 2 * fi_dChi ) * Vbscl_dVbs ; fs01_dT = cfs1 * 2 * fi * fi_dChi * Chi_dT + fi * fi * cfs1_dT ; T2 = 1.0e0 / ( fs02 + fs02 ) ; fs02_dVbs = ( - beta * Vbscl_dVbs * fb_dChi * 2 * fb + fs01_dVbs ) * T2 ; fs02_dT = ( 2 * fb * fb_dChi * Chi_dT + fs01_dT ) * T2 ; } else { if ( Chi < large_arg ) { fs01_dVbs = - cfs1 * beta * Vbscl_dVbs ; exp_Chi_dT = exp_Chi * Chi_dT ; fs01_dT = ( exp_Chi - 1.0e0 ) * cfs1_dT + cfs1 * exp_Chi_dT ; } else { fs01_dVbs = - cfs1 * beta * Vbscl_dVbs ; exp_bPs0_dT = exp_bPs0 * Ps0 * beta_dT ; fs01_dT = cnst1_dT*(exp_bPs0-exp_bVbs) + cnst1*(exp_bPs0_dT-exp_bVbs_dT) ; } T2 = 0.5e0 / fs02 ; fs02_dVbs = ( - beta * Vbscl_dVbs + fs01_dVbs ) * T2 ; fs02_dT = T2 * ( Chi_dT + fs01_dT ) ; } T1 = 1.0 / Fs0_dPs0 ; Ps0_dVbs = - ( Vgp_dVbs - ( fac1 * fs02_dVbs + fac1_dVbs * fs02 ) ) * T1 ; Ps0_dVds = - ( Vgp_dVds - fac1_dVds * fs02 ) * T1 ; Ps0_dVgs = - ( Vgp_dVgs - fac1_dVgs * fs02 ) * T1 ; Ps0_dT = - ( Vgp_dT - ( fac1 * fs02_dT + fac1_dT * fs02 ) ) * T1 ; Chi_dT = beta_dT *( Ps0 - Vbscl ) + beta * ( Ps0_dT - Vbscl_dT ) ; if ( Chi < znbd5 ) { /*-------------------------------------------* * zone-D1/D2. (Ps0) * Xi0 := fdep0^2 = fb * fb [D1,D2] *-----------------*/ Xi0 = fb * fb + epsm10 ; T1 = 2 * fb * fb_dChi * beta ; Xi0_dVbs = T1 * ( Ps0_dVbs - Vbscl_dVbs ) ; Xi0_dVds = T1 * Ps0_dVds ; Xi0_dVgs = T1 * Ps0_dVgs ; Xi0_dT = 2 * fb * fb_dChi * Chi_dT ; Xi0p12 = fb + epsm10 ; T1 = fb_dChi * beta ; Xi0p12_dVbs = T1 * ( Ps0_dVbs - Vbscl_dVbs ) ; Xi0p12_dVds = T1 * Ps0_dVds ; Xi0p12_dVgs = T1 * Ps0_dVgs ; Xi0p12_dT = fb_dChi * Chi_dT ; Xi0p32 = fb * fb * fb + epsm10 ; T1 = 3 * fb * fb * fb_dChi * beta ; Xi0p32_dVbs = T1 * ( Ps0_dVbs - Vbscl_dVbs ) ; Xi0p32_dVds = T1 * Ps0_dVds ; Xi0p32_dVgs = T1 * Ps0_dVgs ; Xi0p32_dT = 3 * fb * fb * fb_dChi * Chi_dT ; fs01_dT = cfs1 * 2 * fi * fi_dChi * Chi_dT + fi * fi * cfs1_dT ; fs02_dT = ( 2 * fb * fb_dChi * Chi_dT + fs01_dT ) * T2 ; } else { /*-------------------------------------------* * zone-D3. (Ps0) *-----------------*/ flg_zone = 3 ; flg_noqi = 0 ; /*-----------------------------------* * Xi0 := fdep0^2 = Chi - 1 = beta * ( Ps0 - Vbscl ) - 1 [D3] *-----------------*/ Xi0 = Chi - 1.0e0 ; Xi0_dVbs = beta * ( Ps0_dVbs - Vbscl_dVbs ) ; Xi0_dVds = beta * Ps0_dVds ; Xi0_dVgs = beta * Ps0_dVgs ; Xi0_dT = Chi_dT ; Xi0p12 = sqrt( Xi0 ) ; T1 = 0.5e0 / Xi0p12 ; Xi0p12_dVbs = T1 * Xi0_dVbs ; Xi0p12_dVds = T1 * Xi0_dVds ; Xi0p12_dVgs = T1 * Xi0_dVgs ; Xi0p12_dT = T1 * Xi0_dT ; Xi0p32 = Xi0 * Xi0p12 ; T1 = 1.5e0 * Xi0p12 ; Xi0p32_dVbs = T1 * Xi0_dVbs ; Xi0p32_dVds = T1 * Xi0_dVds ; Xi0p32_dVgs = T1 * Xi0_dVgs ; Xi0p32_dT = T1 * Xi0_dT ; if ( Chi < large_arg ) { exp_Chi_dT = exp_Chi * Chi_dT ; fs01_dT = ( exp_Chi - 1.0e0 ) * cfs1_dT + cfs1 * exp_Chi_dT ; } else { exp_bPs0_dT = exp_bPs0 * (beta_dT * Ps0 + beta * Ps0_dT) ; fs01_dT = cnst1_dT*(exp_bPs0-exp_bVbs) + cnst1*(exp_bPs0_dT-exp_bVbs_dT) ; } fs02_dT = T2 * ( Chi_dT + fs01_dT ) ; } /* end of if ( Chi ... ) block */ /*-----------------------------------------------------------* * - Recalculate the derivatives of fs01 and fs02. * note: fs01 = cnst1 * exp( Vbs ) * ( exp( Chi ) - Chi - 1.0e0 ) ; * fs02 = sqrt( Xi0 + fs01 ) ; *-----------------*/ fs01_dVbs = Ps0_dVbs * fs01_dPs0 + fs01_dVbs ; fs01_dVds = Ps0_dVds * fs01_dPs0 ; fs01_dVgs = Ps0_dVgs * fs01_dPs0 ; fs02_dVbs = Ps0_dVbs * fs02_dPs0 + fs02_dVbs ; fs02_dVds = Ps0_dVds * fs02_dPs0 ; fs02_dVgs = Ps0_dVgs * fs02_dPs0 ; /*-----------------------------------------------------------* * Qb0 : Qb at source side. * Qn0 : Qi at source side. *-----------------*/ Qb0 = cnst0 * Xi0p12 ; Qb0_dVb = cnst0 * Xi0p12_dVbs ; Qb0_dVd = cnst0 * Xi0p12_dVds ; Qb0_dVg = cnst0 * Xi0p12_dVgs ; Qb0_dT = cnst0 * Xi0p12_dT + cnst0_dT * Xi0p12 ; T1 = 1.0 / ( fs02 + Xi0p12 ) ; Qn0 = cnst0 * fs01 * T1 ; T1_dT = - T1 * T1 * ( fs02_dT + Xi0p12_dT ) ; Qn0_dT = cnst0 * ( fs01 * T1_dT + T1 * fs01_dT ) + fs01 * T1 * cnst0_dT ; T2 = 1.0 / ( fs01 + epsm10 ) ; Qn0_dVbs = Qn0 * ( fs01_dVbs * T2 - ( fs02_dVbs + Xi0p12_dVbs ) * T1 ) ; Qn0_dVds = Qn0 * ( fs01_dVds * T2 - ( fs02_dVds + Xi0p12_dVds ) * T1 ) ; Qn0_dVgs = Qn0 * ( fs01_dVgs * T2 - ( fs02_dVgs + Xi0p12_dVgs ) * T1 ) ; /*-----------------------------------------------------------* * zone-D1 and D2 *-----------------*/ if ( Chi < znbd5 ) { if ( Chi < znbd3 ) { /*-------------------------------------------* * zone-D1. (Ps0) *-----------------*/ flg_zone = 1 ; flg_noqi = 1 ; /** !! to be revisited !! **/ Qiu = Qn0 ; Qiu_dVbs = Qn0_dVbs ; Qiu_dVds = Qn0_dVds ; Qiu_dVgs = Qn0_dVgs ; Qiu_dT = Qn0_dT; Qbu = Qb0 ; Qbu_dVbs = Qb0_dVb ; Qbu_dVds = Qb0_dVd ; Qbu_dVgs = Qb0_dVg ; Qbu_dT = Qb0_dT ; Qdrat = 0.5 ; Qdrat_dVbs = 0.0 ; Qdrat_dVds = 0.0 ; Qdrat_dVgs = 0.0 ; Qdrat_dT = 0.0; Lred = 0.0e0 ; Lred_dVbs = 0.0e0 ; Lred_dVds = 0.0e0 ; Lred_dVgs = 0.0e0 ; Lred_dT = 0.0e0 ; /** (reminder) *Psdl = Psl ; *Psdl_dVbs = Psl_dVbs ; *Psdl_dVds = Psl_dVds ; *Psdl_dVgs = Psl_dVgs ; **/ } else { /*-------------------------------------------* * zone-D2 (Ps0) *-----------------*/ flg_zone = 2 ; flg_noqi = 0 ; /*-----------------------------------------------------------* * FD2 : connecting function for zone-D2. * - Qiu, Qbu, Qdrat and Lred should be interpolated later. *-----------------*/ T1 = 1.0 / ( znbd5 - znbd3 ) ; TX = T1 * ( Chi - znbd3 ) ; TX_dVbs = beta * T1 * ( Ps0_dVbs - Vbscl_dVbs ) ; TX_dVds = beta * T1 * Ps0_dVds ; TX_dVgs = beta * T1 * Ps0_dVgs ; TX_dT = T1 * Chi_dT ; FD2 = TX * TX * TX * ( 10.0 + TX * ( -15.0 + TX * 6.0 ) ) ; T4 = TX * TX * ( 30.0 + TX * ( -60.0 + TX * 30.0 ) ) ; FD2_dVbs = T4 * TX_dVbs ; FD2_dVds = T4 * TX_dVds ; FD2_dVgs = T4 * TX_dVgs ; FD2_dT = T4 * TX_dT ; } /* end of zone-D2 */ } /*---------------------------------------------------* * VgVt : Vgp - Vth_qi. ( Vth_qi is Vth for Qi evaluation. ) *-----------------*/ VgVt = Qn0 * Cox_inv ; VgVt_dVbs = Qn0_dVbs * Cox_inv + Qn0 * Cox_inv_dVb ; VgVt_dVds = Qn0_dVds * Cox_inv + Qn0 * Cox_inv_dVd ; VgVt_dVgs = Qn0_dVgs * Cox_inv + Qn0 * Cox_inv_dVg ; VgVt_dT = Qn0_dT * Cox_inv ; /*-----------------------------------------------------------* * make Qi=Qd=Ids=0 if VgVt <= VgVt_small *-----------------*/ if ( VgVt <= VgVt_small ) { flg_zone = 4 ; flg_noqi = 1 ; Psl = Ps0 ; Psl_dVbs = Ps0_dVbs ; Psl_dVds = Ps0_dVds ; Psl_dVgs = Ps0_dVgs ; Psl_dT = Ps0_dT ; /** (reminder) *Psdl = Psl ; *Psdl_dVbs = Psl_dVbs ; *Psdl_dVds = Psl_dVds ; *Psdl_dVgs = Psl_dVgs ; **/ Pds = 0.0 ; Pds_dVbs = 0.0 ; Pds_dVds = 0.0 ; Pds_dVgs = 0.0 ; Pds_dT = 0.0 ; Qbu = Qb0 ; Qbu_dVbs = Qb0_dVb ; Qbu_dVds = Qb0_dVd ; Qbu_dVgs = Qb0_dVg ; Qbu_dT = Qb0_dT ; Qiu = 0.0 ; Qiu_dVbs = 0.0 ; Qiu_dVds = 0.0 ; Qiu_dVgs = 0.0 ; Qiu_dT = 0.0 ; Qdrat = 0.5 ; Qdrat_dVbs = 0.0 ; Qdrat_dVds = 0.0 ; Qdrat_dVgs = 0.0 ; Qdrat_dT = 0.0 ; Lred = 0.0 ; Lred_dVbs = 0.0 ; Lred_dVds = 0.0 ; Lred_dVgs = 0.0 ; Lred_dT = 0.0 ; Ids = 0.0e0 ; Ids_dVbs = 0.0e0 ; Ids_dVds = 0.0e0 ; Ids_dVgs = 0.0e0 ; Ids_dT = 0.0e0 ; goto end_of_part_1 ; } /*-----------------------------------------------------------* * Start point of Psl (= Ps0 + Pds) calculation. (label) *-----------------*/ /* start_of_Psl: */ /* Vdseff (begin) */ Vdsorg = Vds ; T2 = here->HSMHV_qnsub_esi / ( Cox * Cox ) ; T4 = - 2.0e0 * T2 / Cox ; T2_dVb = T4 * Cox_dVb ; T2_dVd = T4 * Cox_dVd ; T2_dVg = T4 * Cox_dVg ; T2_dT = T4 * Cox_dT ; T0 = Vgp - beta_inv - Vbsz ; T0_dT = Vgp_dT - beta_inv_dT - Vbsz_dT ; Fn_SZ( T9, 1.0e0 + 2.0e0 / T2 * T0, 1e-3, TX ) ; T3 = sqrt( T9 ) ; T4 = 0.5e0 / T3 ; T5 = 1.0e0 / ( T2 * T2 ) ; T6 = T4 * 2.0e0 * T5 * TX ; T7 = T6 * T0 ; T8 = T6 * T2 ; T3_dVb = - T2_dVb * T7 + T8 * ( Vgp_dVbs - Vbsz_dVbs ) ; T3_dVd = - T2_dVd * T7 + T8 * ( Vgp_dVds - Vbsz_dVds ) ; T3_dVg = - T2_dVg * T7 + T8 * Vgp_dVgs ; T3_dT = - T2_dT * T7 + T8 * T0_dT ; T10 = Vgp + T2 * ( 1.0e0 - T3 ) ; T10_dVb = Vgp_dVbs + T2_dVb * ( 1.0e0 - T3 ) - T2 * T3_dVb ; T10_dVd = Vgp_dVds + T2_dVd * ( 1.0e0 - T3 ) - T2 * T3_dVd ; T10_dVg = Vgp_dVgs + T2_dVg * ( 1.0e0 - T3 ) - T2 * T3_dVg ; T10_dT = Vgp_dT + T2_dT * ( 1.0e0 - T3 ) - T2 * T3_dT ; Fn_SZ( T10 , T10 , 0.01 , T0 ) ; T10 += epsm10 ; T10_dVb *= T0 ; T10_dVd *= T0 ; T10_dVg *= T0 ; T10_dT *= T0 ; T1 = Vds / T10 ; T2 = Fn_Pow( T1 , here->HSMHV_ddlt - 1.0e0 ) ; T7 = T2 * T1 ; T0 = here->HSMHV_ddlt * T2 / ( T10 * T10 ) ; T7_dVb = T0 * ( - Vds * T10_dVb ) ; T7_dVd = T0 * ( T10 - Vds * T10_dVd ) ; T7_dVg = T0 * ( - Vds * T10_dVg ) ; T7_dT = T0 * ( - Vds * T10_dT ) ; T3 = 1.0 + T7 ; T4 = Fn_Pow( T3 , 1.0 / here->HSMHV_ddlt - 1.0 ) ; T6 = T4 * T3 ; T0 = T4 / here->HSMHV_ddlt ; T6_dVb = T0 * T7_dVb ; T6_dVd = T0 * T7_dVd ; T6_dVg = T0 * T7_dVg ; T6_dT = T0 * T7_dT ; Vdseff = Vds / T6 ; T0 = 1.0 / ( T6 * T6 ) ; Vdseff_dVbs = - Vds * T6_dVb * T0 ; Vdseff_dVds = ( T6 - Vds * T6_dVd ) * T0 ; Vdseff_dVgs = - Vds * T6_dVg * T0 ; Vdseff_dT = - Vds * T6_dT * T0 ; Vds = Vdseff ; /* Vdseff (end) */ exp_bVbsVds = exp( beta * ( Vbscl - Vds ) ) ; exp_bVbsVds_dT = ( beta_dT * ( Vbscl - Vds ) + beta * (Vbscl_dT - Vdseff_dT) ) * exp_bVbsVds ; /*---------------------------------------------------* * Skip Psl calculation when Vds is very small. *-----------------*/ if ( Vds <= 0.0 ) { Pds = 0.0 ; Psl = Ps0 ; // flg_conv = 1 ; goto start_of_loopl ; } /*-----------------------------------------------------------* * Initial guess for Pds ( = Psl - Ps0 ). *-----------------*/ if ( flg_pprv >= 1 ) { /*---------------------------------------------------* * Use previous value. *-----------------*/ T1 = Pds_dVbs * dVbs + Pds_dVds * dVds + Pds_dVgs * dVgs ; Pds_ini = Pds + T1 ; /* self heating */ T2 = here->HSMHV_pds_dtemp_prv * Temp_dif ; if ( fabs( T1 + T2 ) < dP_max ) { Pds_ini += T2 ; } if ( flg_pprv == 2 ) { /* TX_dVxs = d^2 Pds / d Vxs^2 here */ if ( Vbsc_dif2 > epsm10 ) { TX_dVbs = ( here->HSMHV_pds_dvbs_prv - here->HSMHV_pds_dvbs_prv2 ) / Vbsc_dif2 ; } else { TX_dVbs = 0.0 ; } if ( Vdsc_dif2 > epsm10 ) { TX_dVds = ( here->HSMHV_pds_dvds_prv - here->HSMHV_pds_dvds_prv2 ) / Vdsc_dif2 ; } else { TX_dVds = 0.0 ; } if ( Vgsc_dif2 > epsm10 ) { TX_dVgs = ( here->HSMHV_pds_dvgs_prv - here->HSMHV_pds_dvgs_prv2 ) / Vgsc_dif2 ; } else { TX_dVgs = 0.0 ; } T2 = ( dVbs * dVbs ) / 2 * TX_dVbs + ( dVds * dVds ) / 2 * TX_dVds + ( dVgs * dVgs ) / 2 * TX_dVgs ; if ( fabs( T2 ) < fabs( 0.5 * T1 ) ) { Pds_ini += T2 ; } else { flg_pprv = 1 ; } } T1 = Pds_ini - Pds ; if ( T1 < - dP_max || T1 > dP_max ) flg_pprv = 0 ; /* flag changes */ } /* end of (flg_pprv>=1) if-block */ if ( flg_pprv == 0 ) { /*---------------------------------------------------* * Analytical initial guess. *-----------------*/ Pds_max = Fn_Max( Psl_lim - Ps0 , 0.0e0 ) ; Fn_SU( Pds_ini , Vds, (1.0e0 + c_pslini_1) * Pds_max, c_pslini_2, T1 ) ; Pds_ini = Fn_Min( Pds_ini , Pds_max ) ; } if ( Pds_ini < 0.0 ) Pds_ini = 0.0 ; else if ( Pds_ini > Vds ) Pds_ini = Vds ; /*---------------------------------------------------* * Assign initial guess. *-----------------*/ Pds = Pds_ini ; Psl = Ps0 + Pds ; TX = Vbscl + ps_conv / 2 ; if ( Psl < TX ) Psl = TX ; /*---------------------------------------------------* * Calculation of Psl by solving Poisson eqn. * (beginning of Newton loop) * - Fsl : Fsl = 0 is the equation to be solved. * - dPsl : correction value. *-----------------*/ flg_conv = 0 ; /*---------------------------------------------------* * start of Psl calculation. (label) *-----------------*/ start_of_loopl: for ( lp_sl = 1 ; lp_sl <= lp_sl_max + 1 ; lp_sl ++ ) { Chi = beta * ( Psl - Vbscl ) ; if ( Chi < znbd5 ) { /*-------------------------------------------* * zone-D2. (Psl) * - Qb0 is approximated to 5-degree polynomial. *-----------------*/ fi = Chi * Chi * Chi * ( cn_im53 + Chi * ( cn_im54 + Chi * cn_im55 ) ) ; fi_dChi = Chi * Chi * ( 3 * cn_im53 + Chi * ( 4 * cn_im54 + Chi * 5 * cn_im55 ) ) ; cfs1 = cnst1 * exp_bVbsVds ; fsl1 = cfs1 * fi * fi ; fsl1_dPsl = cfs1 * beta * 2 * fi * fi_dChi ; fb = Chi * ( cn_nc51 + Chi * ( cn_nc52 + Chi * ( cn_nc53 + Chi * ( cn_nc54 + Chi * cn_nc55 ) ) ) ) ; fb_dChi = cn_nc51 + Chi * ( 2 * cn_nc52 + Chi * ( 3 * cn_nc53 + Chi * ( 4 * cn_nc54 + Chi * 5 * cn_nc55 ) ) ) ; fsl2 = sqrt( fb * fb + fsl1 ) ; fsl2_dPsl = ( beta * fb_dChi * 2 * fb + fsl1_dPsl ) / ( fsl2 + fsl2 ) ; } else { /*-------------------------------------------* * zone-D3. (Psl) *-----------------*/ Rho = beta * ( Psl - Vds ) ; exp_Rho = exp( Rho ) ; fsl1 = cnst1 * ( exp_Rho - exp_bVbsVds ) ; fsl1_dPsl = cnst1 * beta * ( exp_Rho ) ; Xil = Chi - 1.0e0 ; fsl2 = sqrt( Xil + fsl1 ) ; fsl2_dPsl = ( beta + fsl1_dPsl ) / ( fsl2 + fsl2 ) ; } Fsl = Vgp - Psl - fac1 * fsl2 ; Fsl_dPsl = - 1.0e0 - fac1 * fsl2_dPsl ; if ( flg_conv == 1 ) break ; dPsl = - Fsl / Fsl_dPsl ; /*-------------------------------------------* * Update Psl . * - clamped to Vbscl if Psl < Vbscl . *-----------------*/ dPlim = 0.5*dP_max*(1.0 + Fn_Max(1.e0,fabs(Psl))) ; if ( fabs( dPsl ) > dPlim ) dPsl = dPlim * Fn_Sgn( dPsl ) ; if (Psl + dPsl < Ps0 ) { dPsl = Ps0 - Psl; Psl = Ps0 ; } else { Psl = Psl + dPsl ; } TX = Vbscl + ps_conv / 2 ; if ( Psl < TX ) Psl = TX ; /*-------------------------------------------* * Check convergence. * NOTE: This condition may be too rigid. *-----------------*/ if ( fabs( dPsl ) <= ps_conv && fabs( Fsl ) <= gs_conv ) { flg_conv = 1 ; } } /* end of Psl Newton loop */ /* Reduce loop count to exclude derivative calculation sweep */ lp_sl -- ; /*-------------------------------------------* * Procedure for diverged case. *-----------------*/ if ( flg_conv == 0 ) { fprintf( stderr , "*** warning(HiSIM_HV): Went Over Iteration Maximum (Psl)\n" ) ; fprintf( stderr , " Vbse = %7.3f Vdse = %7.3f Vgse = %7.3f\n" , Vbse , Vdse , Vgse ) ; if ( flg_info >= 2 ) { printf("*** warning(HiSIM_HV): Went Over Iteration Maximum (Psl)\n" ) ; } } /*---------------------------------------------------* * Evaluate derivatives of Psl. * - note: Here, fsl1_dVbs and fsl2_dVbs are derivatives * w.r.t. explicit Vbscl. So, Psl in the fsl1 and fsl2 * expressions is regarded as a constant. *-----------------*/ Chi_dT = ( Psl - Vbscl ) * beta_dT - Vbscl_dT * beta ; if ( Chi < znbd5 ) { T1 = cfs1 * beta * fi ; fsl1_dVbs = T1 * ( ( Vbscl_dVbs - Vdseff_dVbs ) * fi - 2.0 * fi_dChi * Vbscl_dVbs ) ; fsl1_dVds = - T1 * fi * Vdseff_dVds ; fsl1_dVgs = - T1 * fi * Vdseff_dVgs ; cfs1_dT = exp_bVbsVds * cnst1_dT + cnst1 * exp_bVbsVds_dT ; fsl1_dT = fi * fi * cfs1_dT + 2 * cfs1 * fi * fi_dChi * Chi_dT ; T2 = 0.5 / fsl2 ; fsl2_dVbs = ( - beta * fb_dChi * 2 * fb * Vbscl_dVbs + fsl1_dVbs ) * T2 ; fsl2_dVds = fsl1_dVds * T2 ; fsl2_dVgs = fsl1_dVgs * T2 ; fsl2_dT = ( 2 * fb * fb_dChi * Chi_dT + fsl1_dT ) * T2 ; } else { Rho_dT = beta_dT * ( Psl - Vds ) - beta * Vdseff_dT ; exp_Rho_dT = Rho_dT * exp_Rho ; T1 = cnst1 * beta ; fsl1_dVbs = - T1 * ( exp_Rho * Vdseff_dVbs + ( Vbscl_dVbs - Vdseff_dVbs ) * exp_bVbsVds ); fsl1_dVds = - T1 * Vdseff_dVds * ( exp_Rho - exp_bVbsVds ); fsl1_dVgs = T1 * Vdseff_dVgs * ( - exp_Rho + exp_bVbsVds ); fsl1_dT = cnst1 * ( exp_Rho_dT - exp_bVbsVds_dT ) + cnst1_dT * ( exp_Rho - exp_bVbsVds ) ; T2 = 0.5e0 / fsl2 ; fsl2_dVbs = ( - beta * Vbscl_dVbs + fsl1_dVbs ) * T2 ; fsl2_dVds = ( fsl1_dVds ) * T2 ; fsl2_dVgs = ( fsl1_dVgs ) * T2 ; fsl2_dT = ( Chi_dT + fsl1_dT ) * T2 ; } T1 = 1.0 / Fsl_dPsl ; Psl_dVbs = - ( Vgp_dVbs - ( fac1 * fsl2_dVbs + fac1_dVbs * fsl2 ) ) * T1 ; Psl_dVds = - ( Vgp_dVds - ( fac1 * fsl2_dVds + fac1_dVds * fsl2 ) ) * T1 ; Psl_dVgs = - ( Vgp_dVgs - ( fac1 * fsl2_dVgs + fac1_dVgs * fsl2 ) ) * T1 ; Psl_dT = - ( Vgp_dT - ( fac1 * fsl2_dT + fac1_dT * fsl2 ) ) * T1 ; Chi_dT = ( Psl - Vbscl ) * beta_dT + beta * ( Psl_dT - Vbscl_dT ); exp_Chi_dT = exp_Chi * Chi_dT ; if ( Chi < znbd5 ) { /*-------------------------------------------* * zone-D1/D2. (Psl) *-----------------*/ Xil = fb * fb + epsm10 ; T1 = 2 * fb * fb_dChi * beta ; Xil_dVbs = T1 * ( Psl_dVbs - Vbscl_dVbs ) ; Xil_dVds = T1 * Psl_dVds ; Xil_dVgs = T1 * Psl_dVgs ; Xil_dT = 2 * fb * fb_dChi * Chi_dT ; Xilp12 = fb + epsm10 ; T1 = fb_dChi * beta ; Xilp12_dVbs = T1 * ( Psl_dVbs - Vbscl_dVbs ) ; Xilp12_dVds = T1 * Psl_dVds ; Xilp12_dVgs = T1 * Psl_dVgs ; Xilp12_dT = fb_dChi * Chi_dT ; Xilp32 = fb * fb * fb + epsm10 ; T1 = 3 * fb * fb * fb_dChi * beta ; Xilp32_dVbs = T1 * ( Psl_dVbs - Vbscl_dVbs ) ; Xilp32_dVds = T1 * Psl_dVds ; Xilp32_dVgs = T1 * Psl_dVgs ; Xilp32_dT = 3 * fb * fb * fb_dChi * Chi_dT ; } else { /*-------------------------------------------* * zone-D3. (Psl) *-----------------*/ Xil = Chi - 1.0e0 ; Xil_dVbs = beta * ( Psl_dVbs - Vbscl_dVbs ) ; Xil_dVds = beta * Psl_dVds ; Xil_dVgs = beta * Psl_dVgs ; Xil_dT = Chi_dT ; Xilp12 = sqrt( Xil ) ; T1 = 0.5e0 / Xilp12 ; Xilp12_dVbs = T1 * Xil_dVbs ; Xilp12_dVds = T1 * Xil_dVds ; Xilp12_dVgs = T1 * Xil_dVgs ; Xilp12_dT = T1 * Xil_dT ; Xilp32 = Xil * Xilp12 ; T1 = 1.5e0 * Xilp12 ; Xilp32_dVbs = T1 * Xil_dVbs ; Xilp32_dVds = T1 * Xil_dVds ; Xilp32_dVgs = T1 * Xil_dVgs ; Xilp32_dT = T1 * Xil_dT ; } /*---------------------------------------------------* * Assign Pds. *-----------------*/ Pds = Psl - Ps0 ; /* if ( Pds < ps_conv ) { */ if ( Pds < 0.0 ) { /* take care of numerical noise */ Pds = 0.0 ; Psl = Ps0 ; } Pds_dVbs = Psl_dVbs - Ps0_dVbs ; Pds_dVds = Psl_dVds - Ps0_dVds ; Pds_dVgs = Psl_dVgs - Ps0_dVgs ; Pds_dT = Psl_dT - Ps0_dT ; /* if ( Pds < ps_conv ) { */ if ( Pds < 0.0 ) { Pds_dVbs = 0.0 ; Pds_dVgs = 0.0 ; Psl_dVbs = Ps0_dVbs ; Psl_dVgs = Ps0_dVgs ; Pds_dT = 0.0 ; Psl_dT = Ps0_dT ; } /* Vdseff */ Vds = Vdsorg; /*-----------------------------------------------------------* * Evaluate Idd. * - Eta : substantial variable of QB'/Pds and Idd/Pds. * - note: Eta = 4 * GAMMA_{hisim_0} *-----------------*/ T1 = beta / Xi0 ; Eta = T1 * Pds ; T2 = Eta * beta_inv ; Eta_dVbs = T1 * ( Pds_dVbs - Xi0_dVbs * T2 ) ; Eta_dVds = T1 * ( Pds_dVds - Xi0_dVds * T2 ) ; Eta_dVgs = T1 * ( Pds_dVgs - Xi0_dVgs * T2 ) ; T1_dT = ( beta_dT * Xi0 - beta * Xi0_dT ) / Xi0 / Xi0 ; Eta_dT = T1_dT * Pds + T1 * Pds_dT ; /* ( Eta + 1 )^n */ Eta1 = Eta + 1.0e0 ; Eta1p12 = sqrt( Eta1 ) ; Eta1p32 = Eta1p12 * Eta1 ; Eta1p52 = Eta1p32 * Eta1 ; Eta1_dT = Eta_dT ; Eta1p12_dT = 0.5e0 / Eta1p12 * Eta1_dT ; Eta1p32_dT = Eta1p12_dT * Eta1 + Eta1p12 * Eta1_dT ; Eta1p52_dT = Eta1p32_dT * Eta1 + Eta1p32 * Eta1_dT ; /* 1 / ( ( Eta + 1 )^n + 1 ) */ Zeta12 = 1.0e0 / ( Eta1p12 + 1.0e0 ) ; Zeta32 = 1.0e0 / ( Eta1p32 + 1.0e0 ) ; Zeta52 = 1.0e0 / ( Eta1p52 + 1.0e0 ) ; Zeta12_dT = - 1.0e0 / ( Eta1p12 + 1.0e0 ) / ( Eta1p12 + 1.0e0 ) * Eta1p12_dT ; Zeta32_dT = - 1.0e0 / ( Eta1p32 + 1.0e0 ) / ( Eta1p32 + 1.0e0 ) * Eta1p32_dT ; Zeta52_dT = - 1.0e0 / ( Eta1p52 + 1.0e0 ) / ( Eta1p52 + 1.0e0 ) * Eta1p52_dT ; /*---------------------------------------------------* * F00 := PS00/Pds (n=1/2) *-----------------*/ F00 = Zeta12 / Xi0p12 ; T3 = - 1 / Xi0 ; T4 = - 0.5e0 / Eta1p12 * F00 ; T5 = Zeta12 * T3 ; T6 = Zeta12 * T4 ; F00_dVbs = ( Xi0p12_dVbs * T5 + Eta_dVbs * T6 ) ; F00_dVds = ( Xi0p12_dVds * T5 + Eta_dVds * T6 ) ; F00_dVgs = ( Xi0p12_dVgs * T5 + Eta_dVgs * T6 ) ; F00_dT = ( Zeta12_dT * Xi0p12 - Zeta12 * Xi0p12_dT ) / Xi0p12 / Xi0p12 ; /*---------------------------------------------------* * F10 := PS10/Pds (n=3/2) *-----------------*/ T1 = 3.0e0 + Eta * ( 3.0e0 + Eta ) ; F10 = C_2o3 * Xi0p12 * Zeta32 * T1 ; T2 = 3.0e0 + Eta * 2.0e0 ; T3 = C_2o3 * T1 ; T4 = - 1.5e0 * Eta1p12 * F10 + C_2o3 * Xi0p12 * T2 ; T5 = Zeta32 * T3 ; T6 = Zeta32 * T4 ; F10_dVbs = ( Xi0p12_dVbs * T5 + Eta_dVbs * T6 ) ; F10_dVds = ( Xi0p12_dVds * T5 + Eta_dVds * T6 ) ; F10_dVgs = ( Xi0p12_dVgs * T5 + Eta_dVgs * T6 ) ; T1_dT = Eta_dT * ( 3.0e0 + Eta ) + Eta * Eta_dT ; F10_dT = C_2o3 * Xi0p12 * Zeta32 * T1_dT + C_2o3 * T1 * ( Xi0p12 * Zeta32_dT + Zeta32 * Xi0p12_dT ) ; /*---------------------------------------------------* * F30 := PS30/Pds (n=5/2) *-----------------*/ T1 = 5e0 + Eta * ( 10e0 + Eta * ( 10e0 + Eta * ( 5e0 + Eta ) ) ) ; F30 = 4e0 / ( 15e0 * beta ) * Xi0p32 * Zeta52 * T1 ; T2 = 10e0 + Eta * ( 20e0 + Eta * ( 15e0 + Eta * 4e0 ) ) ; T3 = 4e0 / ( 15e0 * beta ) * T1 ; T4 = - ( 5e0 / 2e0 ) * Eta1p32 * F30 + 4e0 / ( 15e0 * beta ) * Xi0p32 * T2 ; T5 = Zeta52 * T3 ; T6 = Zeta52 * T4 ; F30_dVbs = ( Xi0p32_dVbs * T5 + Eta_dVbs * T6 ) ; F30_dVds = ( Xi0p32_dVds * T5 + Eta_dVds * T6 ) ; F30_dVgs = ( Xi0p32_dVgs * T5 + Eta_dVgs * T6 ) ; T1_dT = ( 10e0 + 20e0 * Eta + 15e0 * Eta * Eta + 4e0 * Eta * Eta * Eta ) * Eta_dT ; F30_dT = 4e0 / 15e0 * beta_inv_dT * ( Xi0p32 * Zeta52 * T1 ) + 4e0 / 15e0 * beta_inv * ( Xi0p32_dT * Zeta52 * T1 + Xi0p32 * Zeta52_dT * T1 + Xi0p32 * Zeta52 * T1_dT ) ; /*---------------------------------------------------* * F11 := PS11/Pds. *-----------------*/ F11 = Ps0 * F10 + C_2o3 * beta_inv * Xilp32 - F30 ; T1 = C_2o3 * beta_inv ; F11_dVbs = Ps0_dVbs * F10 + Ps0 * F10_dVbs + T1 * Xilp32_dVbs - F30_dVbs ; F11_dVds = Ps0_dVds * F10 + Ps0 * F10_dVds + T1 * Xilp32_dVds - F30_dVds ; F11_dVgs = Ps0_dVgs * F10 + Ps0 * F10_dVgs + T1 * Xilp32_dVgs - F30_dVgs ; F11_dT = Ps0_dT * F10 + Ps0 * F10_dT + C_2o3 *( beta_inv_dT * Xilp32 + beta_inv * Xilp32_dT ) - F30_dT ; /*---------------------------------------------------* * Fdd := Idd/Pds. *-----------------*/ T1 = Vgp + beta_inv - 0.5e0 * ( 2.0e0 * Ps0 + Pds ) ; T2 = - F10 + F00 ; T3 = beta * Cox ; T4 = beta * cnst0 ; Fdd = T3 * T1 + T4 * T2 ; Fdd_dVbs = T3 * ( Vgp_dVbs - Ps0_dVbs - 0.5e0 * Pds_dVbs ) + beta * Cox_dVb * T1 + T4 * ( - F10_dVbs + F00_dVbs ) ; Fdd_dVds = T3 * ( Vgp_dVds - Ps0_dVds - 0.5e0 * Pds_dVds ) + beta * Cox_dVd * T1 + T4 * ( - F10_dVds + F00_dVds ) ; Fdd_dVgs = T3 * ( Vgp_dVgs - Ps0_dVgs - 0.5e0 * Pds_dVgs ) + beta * Cox_dVg * T1 + T4 * ( - F10_dVgs + F00_dVgs ) ; T1_dT = Vgp_dT + beta_inv_dT - 0.5e0 * ( 2.0e0 * Ps0_dT + Pds_dT ) ; T2_dT = -F10_dT + F00_dT ; T3_dT = Cox * beta_dT ; T4_dT = beta * cnst0_dT + cnst0 * beta_dT ; Fdd_dT = T1 * T3_dT + T3 * T1_dT + T2 * T4_dT + T4 * T2_dT ; /*---------------------------------------------------* * Idd: *-----------------*/ Idd = Pds * Fdd ; Idd_dVbs = Pds_dVbs * Fdd + Pds * Fdd_dVbs ; Idd_dVds = Pds_dVds * Fdd + Pds * Fdd_dVds ; Idd_dVgs = Pds_dVgs * Fdd + Pds * Fdd_dVgs ; Idd_dT = Fdd * Pds_dT + Pds * Fdd_dT ; /*-----------------------------------------------------------* * Skip CLM and integrated charges if zone==D1 *-----------------*/ if( flg_zone == 1 ) { goto start_of_mobility ; } /*-----------------------------------------------------------* * Channel Length Modulation. Lred: \Delta L *-----------------*/ if( pParam->HSMHV_clm2 < epsm10 && pParam->HSMHV_clm3 < epsm10 ) { Lred = 0.0e0 ; Lred_dVbs = 0.0e0 ; Lred_dVds = 0.0e0 ; Lred_dVgs = 0.0e0 ; Lred_dT = 0.0e0 ; Psdl = Psl ; Psdl_dVbs = Psl_dVbs ; Psdl_dVds = Psl_dVds ; Psdl_dVgs = Psl_dVgs ; Psdl_dT = Psl_dT ; if ( Psdl > Ps0 + Vds - epsm10 ) { Psdl = Ps0 + Vds - epsm10 ; Psdl_dVbs = Ps0_dVbs ; Psdl_dVds = Ps0_dVds + 1.0 ; Psdl_dVgs = Ps0_dVgs ; Psdl_dT = Ps0_dT ; } } else { T1 = here->HSMHV_wdpl ; T8 = sqrt (Psl - Vbscl) ; Wd = T1 * T8 ; T9 = 0.5 * T1 / T8 ; Wd_dVbs = T9 * (Psl_dVbs - Vbscl_dVbs) ; Wd_dVds = T9 * Psl_dVds ; Wd_dVgs = T9 * Psl_dVgs ; Wd_dT = T9 * (Psl_dT - Vbscl_dT) ; T0 = 1.0 / Wd ; T1 = Qn0 * T0 ; T2 = pParam->HSMHV_clm3 * T1 ; T3 = pParam->HSMHV_clm3 * T0 ; T2_dVb = T3 * (Qn0_dVbs - T1 * Wd_dVbs) ; T2_dVd = T3 * (Qn0_dVds - T1 * Wd_dVds) ; T2_dVg = T3 * (Qn0_dVgs - T1 * Wd_dVgs) ; T2_dT = T3 * (Qn0_dT - T1 * Wd_dT) ; T5 = pParam->HSMHV_clm2 * q_Nsub + T2 ; T1 = 1.0 / T5 ; T4 = C_ESI * T1 ; T4_dVb = - T4 * T2_dVb * T1 ; T4_dVd = - T4 * T2_dVd * T1 ; T4_dVg = - T4 * T2_dVg * T1 ; T4_dT = -T4 * T2_dT * T1 ; T1 = (1.0e0 - pParam->HSMHV_clm1) ; Psdl = pParam->HSMHV_clm1 * (Vds + Ps0) + T1 * Psl ; Psdl_dVbs = pParam->HSMHV_clm1 * Ps0_dVbs + T1 * Psl_dVbs ; Psdl_dVds = pParam->HSMHV_clm1 * (1.0 + Ps0_dVds) + T1 * Psl_dVds ; Psdl_dVgs = pParam->HSMHV_clm1 * Ps0_dVgs + T1 * Psl_dVgs ; Psdl_dT = pParam->HSMHV_clm1 * Ps0_dT + T1 * Psl_dT ; if ( Psdl > Ps0 + Vds - epsm10 ) { Psdl = Ps0 + Vds - epsm10 ; Psdl_dVbs = Ps0_dVbs ; Psdl_dVds = Ps0_dVds + 1.0 ; Psdl_dVgs = Ps0_dVgs ; Psdl_dT = Ps0_dT ; } T6 = Psdl - Psl ; T6_dVb = Psdl_dVbs - Psl_dVbs ; T6_dVd = Psdl_dVds - Psl_dVds ; T6_dVg = Psdl_dVgs - Psl_dVgs ; T6_dT = Psdl_dT - Psl_dT ; T3 = beta * Qn0 ; T1 = 1.0 / T3 ; T5 = Idd * T1 ; T3_dT = beta * Qn0_dT + beta_dT * Qn0 ; T1_dT = - T1 * T1 * T3_dT ; T5_dT = Idd_dT * T1 + Idd * T1_dT ; T2 = T5 * beta ; T5_dVb = (Idd_dVbs - T2 * Qn0_dVbs) * T1 ; T5_dVd = (Idd_dVds - T2 * Qn0_dVds) * T1 ; T5_dVg = (Idd_dVgs - T2 * Qn0_dVgs) * T1 ; T10 = q_Nsub / C_ESI ; T1 = 1.0e5 ; T2 = 1.0 / Leff ; T11 = (2.0 * T5 + 2.0 * T10 * T6 * T4 + T1 * T4) * T2 ; T3 = T2 * T4 ; T7 = T11 * T4 ; T7_dVb = (2.0 * T5_dVb + 2.0 * T10 * (T6_dVb * T4 + T6 * T4_dVb) + T1 * T4_dVb) * T3 + T11 * T4_dVb ; T7_dVd = (2.0 * T5_dVd + 2.0 * T10 * (T6_dVd * T4 + T6 * T4_dVd) + T1 * T4_dVd) * T3 + T11 * T4_dVd ; T7_dVg = (2.0 * T5_dVg + 2.0 * T10 * (T6_dVg * T4 + T6 * T4_dVg) + T1 * T4_dVg) * T3 + T11 * T4_dVg ; T7_dT = (2.0 * T5_dT + 2.0 * T10 * ( T6_dT * T4 + T6 * T4_dT ) + T1 * T4_dT ) * T3 + T11 * T4_dT ; T11 = 4.0 * (2.0 * T10 * T6 + T1) ; T1 = 8.0 * T10 * T4 * T4 ; T2 = 2.0 * T11 * T4 ; T8 = T11 * T4 * T4 ; T8_dVb = ( T1 * T6_dVb + T2 * T4_dVb) ; T8_dVd = ( T1 * T6_dVd + T2 * T4_dVd) ; T8_dVg = ( T1 * T6_dVg + T2 * T4_dVg) ; T8_dT = ( T1 * T6_dT + T2 * T4_dT) ; T9 = sqrt (T7 * T7 + T8); T1 = 1.0 / T9 ; T2 = T7 * T1 ; T3 = 0.5 * T1 ; T9_dVb = (T2 * T7_dVb + T3 * T8_dVb) ; T9_dVd = (T2 * T7_dVd + T3 * T8_dVd) ; T9_dVg = (T2 * T7_dVg + T3 * T8_dVg) ; T9_dT = (T2 * T7_dT + T3 * T8_dT) ; Lred = 0.5 * (- T7 + T9) ; Lred_dVbs = 0.5 * (- T7_dVb + T9_dVb) ; Lred_dVds = 0.5 * (- T7_dVd + T9_dVd) ; Lred_dVgs = 0.5 * (- T7_dVg + T9_dVg) ; Lred_dT = 0.5 * (- T7_dT + T9_dT ) ; /*---------------------------------------------------* * Modify Lred for symmetry. *-----------------*/ T1 = Lred ; Lred = FMDVDS * T1 ; Lred_dVbs = FMDVDS_dVbs * T1 + FMDVDS * Lred_dVbs ; Lred_dVds = FMDVDS_dVds * T1 + FMDVDS * Lred_dVds ; Lred_dVgs = FMDVDS_dVgs * T1 + FMDVDS * Lred_dVgs ; Lred_dT = FMDVDS_dT * T1 + FMDVDS * Lred_dT ; } /* CLM5 & CLM6 */ Lred *= here->HSMHV_clmmod ; Lred_dVbs *= here->HSMHV_clmmod ; Lred_dVds *= here->HSMHV_clmmod ; Lred_dVgs *= here->HSMHV_clmmod ; Lred_dT *= here->HSMHV_clmmod ; /*---------------------------------------------------* * Qbu : -Qb in unit area. *-----------------*/ T1 = Vgp + beta_inv ; T2 = T1 * F10 - F11 ; T1_dT = Vgp_dT + beta_inv_dT ; T2_dT = T1_dT * F10 + T1 * F10_dT - F11_dT ; Qbnm = cnst0 * ( cnst0 * ( 1.5e0 - ( Xi0 + 1.0e0 ) - 0.5e0 * beta * Pds ) + Cox * T2 ) ; Qbnm_dVbs = cnst0 * ( cnst0 * ( - Xi0_dVbs - 0.5e0 * beta * Pds_dVbs ) + Cox * ( Vgp_dVbs * F10 + T1 * F10_dVbs - F11_dVbs ) + Cox_dVb * T2 ) ; Qbnm_dVds = cnst0 * ( cnst0 * ( - Xi0_dVds - 0.5e0 * beta * Pds_dVds ) + Cox * ( Vgp_dVds * F10 + T1 * F10_dVds - F11_dVds ) + Cox_dVd * T2 ) ; Qbnm_dVgs = cnst0 * ( cnst0 * ( - Xi0_dVgs - 0.5e0 * beta * Pds_dVgs ) + Cox * ( Vgp_dVgs * F10 + T1 * F10_dVgs - F11_dVgs ) + Cox_dVg * T2 ) ; Qbnm_dT = cnst0_dT * ( cnst0 * ( 1.5e0 - ( Xi0 + 1.0e0 ) - 0.5e0 * beta * Pds ) + Cox * T2 ) + cnst0 * ( cnst0_dT * ( 1.5e0 - ( Xi0 + 1.0e0 ) - 0.5e0 * beta * Pds ) + cnst0 * ( - Xi0_dT - 0.5 * beta_dT * Pds - 0.5 * beta * Pds_dT ) + Cox * T2_dT ); T1 = beta ; Qbu = T1 * Qbnm / Fdd ; T2 = T1 / ( Fdd * Fdd ) ; Qbu_dVbs = T2 * ( Fdd * Qbnm_dVbs - Qbnm * Fdd_dVbs ) ; Qbu_dVds = T2 * ( Fdd * Qbnm_dVds - Qbnm * Fdd_dVds ) ; Qbu_dVgs = T2 * ( Fdd * Qbnm_dVgs - Qbnm * Fdd_dVgs ) ; T1_dT = beta_dT ; Qbu_dT = ( Fdd * ( T1_dT * Qbnm + T1 * Qbnm_dT ) - T1 * Qbnm * Fdd_dT ) / ( Fdd * Fdd ) ; /*---------------------------------------------------* * preparation for Qi and Qd. * - DtPds: Delta * Pds ; * - Achi: (1+Delta) * Pds ; *-----------------*/ T1 = 2.0e0 * fac1 ; DtPds = T1 * ( F10 - Xi0p12 ) ; T2 = 2.0 * ( F10 - Xi0p12 ) ; DtPds_dVbs = T1 * ( F10_dVbs - Xi0p12_dVbs ) + T2 * fac1_dVbs ; DtPds_dVds = T1 * ( F10_dVds - Xi0p12_dVds ) + T2 * fac1_dVds ; DtPds_dVgs = T1 * ( F10_dVgs - Xi0p12_dVgs ) + T2 * fac1_dVgs ; T1_dT = 2.0e0 * fac1_dT ; DtPds_dT = T1_dT * ( F10 - Xi0p12 ) + T1 * ( F10_dT -Xi0p12_dT ) ; Achi = Pds + DtPds ; Achi_dVbs = Pds_dVbs + DtPds_dVbs ; Achi_dVds = Pds_dVds + DtPds_dVds ; Achi_dVgs = Pds_dVgs + DtPds_dVgs ; Achi_dT = Pds_dT + DtPds_dT ; /*-----------------------------------------------------------* * Alpha : parameter to evaluate charges. * - Achi: (1+Delta) * Pds ; * - clamped to 0 if Alpha < 0. *-----------------*/ T1 = 1.0 / VgVt ; T2 = Achi * T1 ; T3 = 1.0e0 - T2 ; TX = 1.0 - T3 ; Fn_CP( TY , TX , 1.0 , 4 , T4 ) ; Alpha = 1.0 - TY ; T5 = T1 * T4 ; Alpha_dVbs = - ( Achi_dVbs - T2 * VgVt_dVbs ) * T5 ; Alpha_dVds = - ( Achi_dVds - T2 * VgVt_dVds ) * T5 ; Alpha_dVgs = - ( Achi_dVgs - T2 * VgVt_dVgs ) * T5 ; Alpha_dT = - ( Achi_dT - T2 * VgVt_dT ) * T5 ; /*-----------------------------------------------------------* * Qiu : -Qi in unit area. *-----------------*/ Qinm = 1.0e0 + Alpha * ( 1.0e0 + Alpha ) ; T1 = 1.0e0 + Alpha + Alpha ; Qinm_dVbs = Alpha_dVbs * T1 ; Qinm_dVds = Alpha_dVds * T1 ; Qinm_dVgs = Alpha_dVgs * T1 ; Qinm_dT = Alpha_dT * T1 ; Qidn = Fn_Max( 1.0e0 + Alpha , epsm10 ) ; Qidn_dVbs = Alpha_dVbs ; Qidn_dVds = Alpha_dVds ; Qidn_dVgs = Alpha_dVgs ; Qidn_dT = Alpha_dT ; T1 = C_2o3 * VgVt * Qinm / Qidn ; Qiu = T1 * Cox ; T2 = 1.0 / VgVt ; T3 = 1.0 / Qinm ; T4 = 1.0 / Qidn ; Qiu_dVbs = Qiu * ( VgVt_dVbs * T2 + Qinm_dVbs * T3 - Qidn_dVbs * T4 ) + T1 * Cox_dVb ; Qiu_dVds = Qiu * ( VgVt_dVds * T2 + Qinm_dVds * T3 - Qidn_dVds * T4) + T1 * Cox_dVd ; Qiu_dVgs = Qiu * ( VgVt_dVgs * T2 + Qinm_dVgs * T3 - Qidn_dVgs * T4) + T1 * Cox_dVg ; T1_dT = C_2o3 * ( Qidn * ( VgVt_dT * Qinm + VgVt * Qinm_dT ) - Qidn_dT * VgVt * Qinm ) / ( Qidn * Qidn ) ; Qiu_dT = Cox * T1_dT ; /*-----------------------------------------------------------* * Qdrat : Qd/Qi *-----------------*/ Qdnm = 0.5e0 + Alpha ; Qdnm_dVbs = Alpha_dVbs ; Qdnm_dVds = Alpha_dVds ; Qdnm_dVgs = Alpha_dVgs ; Qdnm_dT = Alpha_dT ; Qddn = Qidn * Qinm ; Qddn_dVbs = Qidn_dVbs * Qinm + Qidn * Qinm_dVbs ; Qddn_dVds = Qidn_dVds * Qinm + Qidn * Qinm_dVds ; Qddn_dVgs = Qidn_dVgs * Qinm + Qidn * Qinm_dVgs ; Qddn_dT = Qidn_dT * Qinm + Qidn * Qinm_dT ; Quot = 0.4e0 * Qdnm / Qddn ; Qdrat = 0.6e0 - Quot ; if ( Qdrat <= 0.5e0 ) { T1 = 1.0 / Qddn ; T2 = 1.0 / Qdnm ; Qdrat_dVbs = Quot * ( Qddn_dVbs * T1 - Qdnm_dVbs * T2 ) ; Qdrat_dVds = Quot * ( Qddn_dVds * T1 - Qdnm_dVds * T2 ) ; Qdrat_dVgs = Quot * ( Qddn_dVgs * T1 - Qdnm_dVgs * T2 ) ; Qdrat_dT = Quot * ( Qddn_dT * T1 - Qdnm_dT * T2 ) ; } else { Qdrat = 0.5e0 ; Qdrat_dVbs = 0.0e0 ; Qdrat_dVds = 0.0e0 ; Qdrat_dVgs = 0.0e0 ; Qdrat_dT = 0.0e0 ; } /*-----------------------------------------------------------* * Interpolate charges and CLM for zone-D2. *-----------------*/ if ( flg_zone == 2 ) { T1 = Qbu ; Qbu = FD2 * Qbu + ( 1.0 - FD2 ) * Qb0 ; Qbu_dVbs = FD2 * Qbu_dVbs + FD2_dVbs * T1 + ( 1.0 - FD2 ) * Qb0_dVb - FD2_dVbs * Qb0 ; Qbu_dVds = FD2 * Qbu_dVds + FD2_dVds * T1 + ( 1.0 - FD2 ) * Qb0_dVd - FD2_dVds * Qb0 ; Qbu_dVgs = FD2 * Qbu_dVgs + FD2_dVgs * T1 + ( 1.0 - FD2 ) * Qb0_dVg - FD2_dVgs * Qb0 ; Qbu_dT = FD2 * Qbu_dT + FD2_dT * T1 + ( 1.0 - FD2 ) * Qb0_dT - FD2_dT * Qb0 ; if ( Qbu < 0.0 ) { Qbu = 0.0 ; Qbu_dVbs = 0.0 ; Qbu_dVds = 0.0 ; Qbu_dVgs = 0.0 ; Qbu_dT = 0.0 ; } T1 = Qiu ; Qiu = FD2 * Qiu + ( 1.0 - FD2 ) * Qn0 ; Qiu_dVbs = FD2 * Qiu_dVbs + FD2_dVbs * T1 + ( 1.0 - FD2 ) * Qn0_dVbs - FD2_dVbs * Qn0 ; Qiu_dVds = FD2 * Qiu_dVds + FD2_dVds * T1 + ( 1.0 - FD2 ) * Qn0_dVds - FD2_dVds * Qn0 ; Qiu_dVgs = FD2 * Qiu_dVgs + FD2_dVgs * T1 + ( 1.0 - FD2 ) * Qn0_dVgs - FD2_dVgs * Qn0 ; Qiu_dT = FD2 * Qiu_dT + FD2_dT * T1 + ( 1.0 - FD2 ) * Qn0_dT - FD2_dT * Qn0 ; if ( Qiu < 0.0 ) { Qiu = 0.0 ; Qiu_dVbs = 0.0 ; Qiu_dVds = 0.0 ; Qiu_dVgs = 0.0 ; Qiu_dT = 0.0 ; } T1 = Qdrat ; Qdrat = FD2 * Qdrat + ( 1.0 - FD2 ) * 0.5e0 ; Qdrat_dVbs = FD2 * Qdrat_dVbs + FD2_dVbs * T1 - FD2_dVbs * 0.5e0 ; Qdrat_dVds = FD2 * Qdrat_dVds + FD2_dVds * T1 - FD2_dVds * 0.5e0 ; Qdrat_dVgs = FD2 * Qdrat_dVgs + FD2_dVgs * T1 - FD2_dVgs * 0.5e0 ; Qdrat_dT = FD2 * Qdrat_dT + FD2_dT * T1 - FD2_dT * 0.5e0 ; /* note: Lred=0 in zone-D1 */ T1 = Lred ; Lred = FD2 * Lred ; Lred_dVbs = FD2 * Lred_dVbs + FD2_dVbs * T1 ; Lred_dVds = FD2 * Lred_dVds + FD2_dVds * T1 ; Lred_dVgs = FD2 * Lred_dVgs + FD2_dVgs * T1 ; Lred_dT = FD2 * Lred_dT + FD2_dT * T1 ; } /* end of flg_zone==2 if-block */ start_of_mobility: Lch = Leff - Lred ; if ( Lch < 1.0e-9 ) { fprintf ( stderr , "*** warning(HiSIM_HV): actual channel length is too small. (Lch=%e[m])\n" , Lch ) ; fprintf ( stderr , " CLM5 and/or CLM6 might be too large.\n" ) ; Lch = 1.0e-9 ; Lch_dVbs = Lch_dVds = Lch_dVgs = 0.0 ; Lch_dT = 0.0 ; } else { Lch_dVbs = - Lred_dVbs ; Lch_dVds = - Lred_dVds ; Lch_dVgs = - Lred_dVgs ; Lch_dT = - Lred_dT ; } /*-----------------------------------------------------------* * Muun : universal mobility. (CGS unit) *-----------------*/ T1 = here->HSMHV_ndep_o_esi ; T2 = here->HSMHV_ninv_o_esi ; T0 = here->HSMHV_ninvd ; T4 = 1.0 + ( Psl - Ps0 ) * T0 ; T4_dVb = ( Psl_dVbs - Ps0_dVbs ) * T0 ; T4_dVd = ( Psl_dVds - Ps0_dVds ) * T0 ; T4_dVg = ( Psl_dVgs - Ps0_dVgs ) * T0 ; T4_dT = ( Psl_dT - Ps0_dT ) * T0 + ( Psl - Ps0 ) * ninvd_dT ; T5 = T1 * Qbu + T2 * Qiu ; T5_dVb = T1 * Qbu_dVbs + T2 * Qiu_dVbs ; T5_dVd = T1 * Qbu_dVds + T2 * Qiu_dVds ; T5_dVg = T1 * Qbu_dVgs + T2 * Qiu_dVgs ; T5_dT = T1 * Qbu_dT + T2 * Qiu_dT ; T3 = T5 / T4 ; T3_dVb = ( - T4_dVb * T5 + T4 * T5_dVb ) / T4 / T4 ; T3_dVd = ( - T4_dVd * T5 + T4 * T5_dVd ) / T4 / T4 ; T3_dVg = ( - T4_dVg * T5 + T4 * T5_dVg ) / T4 / T4 ; T3_dT = ( - T4_dT * T5 + T4 * T5_dT ) / T4 / T4 ; Eeff = T3 ; Eeff_dVbs = T3_dVb ; Eeff_dVds = T3_dVd ; Eeff_dVgs = T3_dVg ; Eeff_dT = T3_dT ; T5 = Fn_Pow( Eeff , model->HSMHV_mueph0 - 1.0e0 ) ; T8 = T5 * Eeff ; T7 = Fn_Pow( Eeff , here->HSMHV_muesr - 1.0e0 ) ; T6 = T7 * Eeff ; T8_dT = model->HSMHV_mueph0 * T5 * Eeff_dT ; T6_dT = here->HSMHV_muesr * T7 * Eeff_dT ; T9 = C_QE * C_m2cm_p2 ; Rns = Qiu / T9 ; Rns_dT = Qiu_dT / T9 ; T1 = 1.0e0 / ( pParam->HSMHV_muecb0 + pParam->HSMHV_muecb1 * Rns / 1.0e11 ) + here->HSMHV_mphn0 * T8 + T6 / pParam->HSMHV_muesr1 ; T1_dT = - 1.0e0 / ( pParam->HSMHV_muecb0 + pParam->HSMHV_muecb1 * Rns / 1.0e11 ) / ( pParam->HSMHV_muecb0 + pParam->HSMHV_muecb1 * Rns / 1.0e11 ) * pParam->HSMHV_muecb1 * Rns_dT / 1.0e11 + here->HSMHV_mphn0 * T8_dT + mphn0_dT * T8 + T6_dT / pParam->HSMHV_muesr1 ; Muun = 1.0e0 / T1 ; Muun_dT = - Muun / T1 * T1_dT ; T1 = 1.0e0 / ( T1 * T1 ) ; T2 = pParam->HSMHV_muecb0 + pParam->HSMHV_muecb1 * Rns / 1.0e11 ; T2 = 1.0e0 / ( T2 * T2 ) ; T3 = here->HSMHV_mphn1 * T5 ; T4 = here->HSMHV_muesr * T7 / pParam->HSMHV_muesr1 ; T5 = - 1.0e-11 * pParam->HSMHV_muecb1 / C_QE * T2 / C_m2cm_p2 ; Muun_dVbs = - ( T5 * Qiu_dVbs + Eeff_dVbs * T3 + Eeff_dVbs * T4 ) * T1 ; Muun_dVds = - ( T5 * Qiu_dVds + Eeff_dVds * T3 + Eeff_dVds * T4 ) * T1 ; Muun_dVgs = - ( T5 * Qiu_dVgs + Eeff_dVgs * T3 + Eeff_dVgs * T4 ) * T1 ; /* Change to MKS unit */ Muun /= C_m2cm_p2 ; Muun_dT /= C_m2cm_p2 ; Muun_dVbs /= C_m2cm_p2 ; Muun_dVds /= C_m2cm_p2 ; Muun_dVgs /= C_m2cm_p2 ; /*-----------------------------------------------------------* * Mu : mobility *-----------------*/ T2 = beta * (Qn0 + small) * Lch ; T1 = 1.0e0 / T2 ; T3 = T1 * T1 ; T4 = - beta * T3 ; T5 = T4 * Lch ; T6 = T4 * (Qn0 + small) ; T1_dVb = ( T5 * Qn0_dVbs + T6 * Lch_dVbs) ; T1_dVd = ( T5 * Qn0_dVds + T6 * Lch_dVds) ; T1_dVg = ( T5 * Qn0_dVgs + T6 * Lch_dVgs) ; T2_dT = beta_dT * (Qn0 + small) * Lch + beta * Qn0_dT * Lch + beta * (Qn0 + small) * Lch_dT ; T1_dT = - T1 / T2 * T2_dT ; TY = Idd * T1 ; TY_dVbs = Idd_dVbs * T1 + Idd * T1_dVb ; TY_dVds = Idd_dVds * T1 + Idd * T1_dVd ; TY_dVgs = Idd_dVgs * T1 + Idd * T1_dVg ; TY_dT = Idd_dT * T1 + Idd * T1_dT ; T2 = 0.2 * Vmax / Muun ; T3 = - T2 / Muun ; T2_dVb = T3 * Muun_dVbs ; T2_dVd = T3 * Muun_dVds ; T2_dVg = T3 * Muun_dVgs ; T2_dT = 0.2 * ( Vmax_dT * Muun - Muun_dT * Vmax )/ ( Muun * Muun ) ; Ey = sqrt( TY * TY + T2 * T2 ) ; T4 = 1.0 / Ey ; Ey_dVbs = T4 * ( TY * TY_dVbs + T2 * T2_dVb ) ; Ey_dVds = T4 * ( TY * TY_dVds + T2 * T2_dVd ) ; Ey_dVgs = T4 * ( TY * TY_dVgs + T2 * T2_dVg ) ; Ey_dT = T4 * ( TY * TY_dT + T2 * T2_dT ) ; Em = Muun * Ey ; Em_dVbs = Muun_dVbs * Ey + Muun * Ey_dVbs ; Em_dVds = Muun_dVds * Ey + Muun * Ey_dVds ; Em_dVgs = Muun_dVgs * Ey + Muun * Ey_dVgs ; Em_dT = Ey * Muun_dT + Ey_dT * Muun ; T1 = Em / Vmax ; T1_dT = ( Em_dT * Vmax - Vmax_dT * Em ) / ( Vmax * Vmax ); /* note: model->HSMHV_bb = 2 (electron) ;1 (hole) */ if ( 1.0e0 - epsm10 <= model->HSMHV_bb && model->HSMHV_bb <= 1.0e0 + epsm10 ) { T3 = 1.0e0 ; T3_dT = 0.0e0 ; } else if ( 2.0e0 - epsm10 <= model->HSMHV_bb && model->HSMHV_bb <= 2.0e0 + epsm10 ) { T3 = T1 ; T3_dT = T1_dT ; } else { T3 = Fn_Pow( T1 , model->HSMHV_bb - 1.0e0 ) ; T3_dT = ( model->HSMHV_bb - 1.0e0 )* Fn_Pow( T1 , model->HSMHV_bb - 2.0e0 ) * T1_dT ; } T2 = T1 * T3 ; T4 = 1.0e0 + T2 ; T2_dT = T1 * T3_dT + T3 * T1_dT ; T4_dT = T2_dT ; if ( 1.0e0 - epsm10 <= model->HSMHV_bb && model->HSMHV_bb <= 1.0e0 + epsm10 ) { T5 = 1.0 / T4 ; T6 = T5 / T4 ; T5_dT = - T5 * T5 * T4_dT ; T6_dT = T5 * T5 * ( T5_dT * T4 - T5 * T4_dT ) ; } else if ( 2.0e0 - epsm10 <= model->HSMHV_bb && model->HSMHV_bb <= 2.0e0 + epsm10 ) { T5 = 1.0 / sqrt( T4 ) ; T6 = T5 / T4 ; T5_dT = - 0.5e0 / ( T4 * sqrt(T4)) * T4_dT ; T6_dT = ( T5_dT * T4 - T5 * T4_dT ) / T4 / T4 ; } else { T6 = Fn_Pow( T4 , ( - 1.0e0 / model->HSMHV_bb - 1.0e0 ) ) ; T5 = T4 * T6 ; T6_dT =( - 1.0e0 / model->HSMHV_bb - 1.0e0 ) * Fn_Pow( T4 , ( - 1.0e0 / model->HSMHV_bb - 2.0e0 ) ) * T4_dT ; T5_dT = T4_dT * T6 + T4 * T6_dT ; } T7 = Muun / Vmax * T6 * T3 ; Mu = Muun * T5 ; Mu_dVbs = Muun_dVbs * T5 - T7 * Em_dVbs ; Mu_dVds = Muun_dVds * T5 - T7 * Em_dVds ; Mu_dVgs = Muun_dVgs * T5 - T7 * Em_dVgs ; Mu_dT = Muun_dT * T5 + Muun * T5_dT ; /* end_of_mobility : */ /*-----------------------------------------------------------* * Ids: channel current. *-----------------*/ betaWL = here->HSMHV_weff_nf * beta_inv / Lch ; T1 = - betaWL / Lch ; betaWL_dVbs = T1 * Lch_dVbs ; betaWL_dVds = T1 * Lch_dVds ; betaWL_dVgs = T1 * Lch_dVgs ; betaWL_dT = here->HSMHV_weff_nf * ( beta_inv_dT * Lch - beta_inv * Lch_dT ) / ( Lch * Lch ) ; Ids0 = betaWL * Idd * Mu ; T1 = betaWL * Idd ; T2 = Idd * Mu ; T3 = Mu * betaWL ; Ids0_dVbs = T3 * Idd_dVbs + T1 * Mu_dVbs + T2 * betaWL_dVbs ; Ids0_dVds = T3 * Idd_dVds + T1 * Mu_dVds + T2 * betaWL_dVds ; Ids0_dVgs = T3 * Idd_dVgs + T1 * Mu_dVgs + T2 * betaWL_dVgs ; Ids0_dT = T3 * Idd_dT + T1 * Mu_dT + T2 * betaWL_dT ; /* note: rpock procedure was removed. */ if( flg_rsrd == 2 || flg_rsrd == 3 ){ if( model->HSMHV_rd20 > 0.0 ){ T4 = here->HSMHV_rd23 ; T1 = pParam->HSMHV_rd24 * ( Vgse - model->HSMHV_rd25 ) ; T1_dVg = pParam->HSMHV_rd24 ; Fn_SL( T2 , T1 , T4 , delta_rd , T0 ) ; T2_dVg = T1_dVg * T0 ; T3 = T4 * ( model->HSMHV_rd20 + 1.0 ) ; Fn_SU( T7 , T2 , T3 , delta_rd , T0 ) ; T7_dVg = T2_dVg * T0 ; }else{ T7 = here->HSMHV_rd23; T7_dVg = 0.0e0 ; } /* after testing we can remove Vdse_eff_dVbs, Vdse_eff_dVds, Vdse_eff_dVgs and Vdse_eff_dVbse, Vdse_eff_dVgse */ if (Vdse >= 0.0) { Vdse_eff = Vdse ; /* Vdse_eff_dVbs = 0.0 ; */ /* Vdse_eff_dVds = 0.0 ; */ /* Vdse_eff_dVgs = 0.0 ; */ /* Vdse_eff_dVbse = 0.0 ; */ Vdse_eff_dVdse = 1.0 ; /* Vdse_eff_dVgse = 0.0 ; */ } else { Vdse_eff = 0.0 ; /* Vdse_eff_dVbs = 0.0 ; */ /* Vdse_eff_dVds = 0.0 ; */ /* Vdse_eff_dVgs = 0.0 ; */ /* Vdse_eff_dVbse = 0.0 ; */ Vdse_eff_dVdse = 0.0 ; /* Vdse_eff_dVgse = 0.0 ; */ } /* smoothing of Ra for Vdse_eff close to zero */ /* ... smoothing parameter is Ra_N */ if (Vdse_eff < Ra_N * small2) { Ra_alpha = pow( Ra_N+1.0 , model->HSMHV_rd21-1.0 ) * (Ra_N+1.0-0.5*model->HSMHV_rd21*Ra_N) * pow( small2,model->HSMHV_rd21 ); Ra_beta = 0.5*model->HSMHV_rd21 * pow( Ra_N+1.0 , model->HSMHV_rd21-1.0 ) / Ra_N * pow( small2, model->HSMHV_rd21-2.0 ); T1 = Ra_alpha + Ra_beta*Vdse_eff*Vdse_eff; T1_dVdse_eff = 2.0 * Ra_beta * Vdse_eff; } else { T1 = pow( Vdse_eff + small2 , model->HSMHV_rd21 ) ; T1_dVdse_eff = model->HSMHV_rd21 * pow( Vdse_eff + small2 , model->HSMHV_rd21 - 1.0 ) ; } T9 = pow( Vdse_eff + small2 , model->HSMHV_rd22d ) ; T9_dVdse_eff = model->HSMHV_rd22d * pow( Vdse_eff + small2 , model->HSMHV_rd22d - 1.0 ) ; Ra = ( T7 * T1 + Vbse * pParam->HSMHV_rd22 * T9 ) / here->HSMHV_weff_nf ; Ra_dVdse_eff = ( T7 * T1_dVdse_eff + Vbse * pParam->HSMHV_rd22 * T9_dVdse_eff ) / here->HSMHV_weff_nf ; Ra_dVbs = Ra_dVdse_eff * Vdse_eff_dVbs ; Ra_dVds = Ra_dVdse_eff * Vdse_eff_dVds ; Ra_dVgs = Ra_dVdse_eff * Vdse_eff_dVgs + T7_dVg * T1 / here->HSMHV_weff_nf ; Ra_dVbse = Ra_dVdse_eff * Vdse_eff_dVbse + pParam->HSMHV_rd22 * T9 / here->HSMHV_weff_nf ; Ra_dVdse = Ra_dVdse_eff * Vdse_eff_dVdse ; Ra_dVgse = Ra_dVdse_eff * Vdse_eff_dVgse ; T0 = Ra * Ids0 ; T0_dVb = Ra_dVbs * Ids0 + Ra * Ids0_dVbs ; T0_dVd = Ra_dVds * Ids0 + Ra * Ids0_dVds ; T0_dVg = Ra_dVgs * Ids0 + Ra * Ids0_dVgs ; T0_dT = Ra * Ids0_dT ; T1 = Vds + small2 ; T2 = 1.0 / T1 ; T3 = 1.0 + T0 * T2 ; T3_dVb = T0_dVb * T2 ; T3_dVd = ( T0_dVd * T1 - T0 ) * T2 * T2 ; T3_dVg = T0_dVg * T2 ; T3_dT = T0_dT * T2 ; T4 = 1.0 / T3 ; Ids = Ids0 * T4 ; T5 = T4 * T4 ; Ids_dVbs = ( Ids0_dVbs * T3 - Ids0 * T3_dVb ) * T5 ; Ids_dVds = ( Ids0_dVds * T3 - Ids0 * T3_dVd ) * T5 ; Ids_dVgs = ( Ids0_dVgs * T3 - Ids0 * T3_dVg ) * T5 ; Ids_dT = ( Ids0_dT * T3 - Ids0 * T3_dT ) * T5 ; Ids_dRa = - Ids * Ids / ( Vds + small ) ; } else { Ids = Ids0 ; Ids_dVbs = Ids0_dVbs ; Ids_dVds = Ids0_dVds ; Ids_dVgs = Ids0_dVgs ; Ids_dT = Ids0_dT ; Ra = 0.0 ; Ra_dVbs = Ra_dVds = Ra_dVgs = 0.0 ; Ra_dVbse = Ra_dVdse = Ra_dVgse = 0.0 ; Ids_dRa = 0.0 ; } /* just for testing -- can be removed */ /* if (!(ckt->CKTmode & MODEINITPRED)) printf("rrb %e %e %e %e %e %e\n",ckt->CKTtime,here->HSMHV_mode*Vdse,Ra,Ra_dVdse, Vdse_eff,Vdse_eff_dVdse) ; */ /* if ( Pds < ps_conv ) { */ if ( Pds < 0.0 ) { Ids_dVbs = 0.0 ; Ids_dVgs = 0.0 ; Ids_dT = 0.0 ; } Ids += Gdsmin * Vds ; Ids_dVds += Gdsmin ; /*-----------------------------------------------------------* * STI *-----------------*/ if ( model->HSMHV_coisti != 0 ) { /*---------------------------------------------------* * dVthSCSTI : Short-channel effect induced by Vds (STI). *-----------------*/ T1 = C_ESI * Cox_inv ; T2 = here->HSMHV_wdpl ; T3 = here->HSMHV_lgatesm - model->HSMHV_parl2 ; T4 = 1.0 / (T3 * T3) ; T5 = 2.0 * (model->HSMHV_vbi - Pb20b) * T1 * T2 * T4 ; dVth0 = T5 * sqrt_Pbsum ; T6 = T5 * 0.5 / sqrt_Pbsum ; T7 = 2.0 * (model->HSMHV_vbi - Pb20b) * C_ESI * T2 * T4 * sqrt_Pbsum ; T8 = - 2.0 * T1 * T2 * T4 * sqrt_Pbsum ; dVth0_dVb = T6 * Pbsum_dVb + T7 * Cox_inv_dVb + T8 * Pb20b_dVb ; dVth0_dVd = T6 * Pbsum_dVd + T7 * Cox_inv_dVd + T8 * Pb20b_dVd ; dVth0_dVg = T6 * Pbsum_dVg + T7 * Cox_inv_dVg + T8 * Pb20b_dVg ; dVth0_dT = T6 * Pbsum_dT + T8 * Pb20b_dT ; T4 = pParam->HSMHV_scsti1 ; T6 = pParam->HSMHV_scsti2 ; T1 = T4 + T6 * Vdsz ; dVthSCSTI = dVth0 * T1 ; dVthSCSTI_dVb = dVth0_dVb * T1 + dVth0 * T6 * Vdsz_dVbs ; dVthSCSTI_dVd = dVth0_dVd * T1 + dVth0 * T6 * Vdsz_dVds ; dVthSCSTI_dVg = dVth0_dVg * T1 ; dVthSCSTI_dT = dVth0_dT * T1 + dVth0 * T6 * Vdsz_dT ; T1 = pParam->HSMHV_vthsti - model->HSMHV_vdsti * Vds ; T1_dVd = - model->HSMHV_vdsti ; Vgssti = Vgsz - Vfb + T1 + dVthSCSTI ; Vgssti_dVbs = Vgsz_dVbs + dVthSCSTI_dVb ; Vgssti_dVds = Vgsz_dVds + T1_dVd + dVthSCSTI_dVd ; Vgssti_dVgs = Vgsz_dVgs + dVthSCSTI_dVg ; Vgssti_dT = Vgsz_dT + dVthSCSTI_dT ; costi0 = here->HSMHV_costi0 ; costi1 = here->HSMHV_costi1 ; costi3 = here->HSMHV_costi0_p2 * Cox_inv * Cox_inv ; T1 = 2.0 * here->HSMHV_costi0_p2 * Cox_inv ; costi3_dVb = T1 * Cox_inv_dVb ; costi3_dVd = T1 * Cox_inv_dVd ; costi3_dVg = T1 * Cox_inv_dVg ; costi3_dT = 2 * here->HSMHV_costi0 * here->HSMHV_costi00 * 0.5 / sqrt(here->HSMHV_beta_inv) * beta_inv_dT * Cox_inv * Cox_inv ; T2 = 1.0 / costi3 ; costi3_dVb_c3 = costi3_dVb * T2 ; costi3_dVd_c3 = costi3_dVd * T2 ; costi3_dVg_c3 = costi3_dVg * T2 ; /* costi3_dT_c3 = costi3_dT * T2 ;*/ costi4 = costi3 * beta * 0.5 ; costi4_dT = ( costi3_dT * beta + costi3 * beta_dT ) * 0.5 ; costi5 = costi4 * beta * 2.0 ; costi5_dT = ( costi4_dT * beta + costi4 * beta_dT ) * 2.0 ; T11 = beta * 0.25 ; T11_dT = beta_dT * 0.25 ; T10 = beta_inv - costi3 * T11 + Vfb - pParam->HSMHV_vthsti - dVthSCSTI + small ; T10_dVb = - T11 * costi3_dVb - dVthSCSTI_dVb ; T10_dVd = - T11 * costi3_dVd - dVthSCSTI_dVd ; T10_dVg = - T11 * costi3_dVg - dVthSCSTI_dVg ; T10_dT = beta_inv_dT - ( costi3_dT * T11 + costi3 * T11_dT ) - dVthSCSTI_dT ; T1 = Vgsz - T10 - psisti_dlt ; T1_dVb = Vgsz_dVbs - T10_dVb ; T1_dVd = Vgsz_dVds - T10_dVd ; T1_dVg = Vgsz_dVgs - T10_dVg ; T1_dT = - T10_dT ; T0 = Fn_Sgn(T10) ; T2 = sqrt (T1 * T1 + T0 * 4.0 * T10 * psisti_dlt) ; T3 = T10 + 0.5 * (T1 + T2) - Vfb + pParam->HSMHV_vthsti + dVthSCSTI - Vbsz ; T3_dVb = T10_dVb + 0.5 * (T1_dVb + (T1 * T1_dVb + T0 * 2.0 * T10_dVb * psisti_dlt) / T2) + dVthSCSTI_dVb - Vbsz_dVbs ; T3_dVd = T10_dVd + 0.5 * (T1_dVd + (T1 * T1_dVd + T0 * 2.0 * T10_dVd * psisti_dlt) / T2) + dVthSCSTI_dVd - Vbsz_dVds ; T3_dVg = T10_dVg + 0.5 * (T1_dVg + (T1 * T1_dVg + T0 * 2.0 * T10_dVg * psisti_dlt) / T2) + dVthSCSTI_dVg ; T3_dT = T10_dT + 0.5 * (T1_dT + (T1 * T1_dT + T0 * 2.0 * T10_dT * psisti_dlt) / T2) + dVthSCSTI_dT - Vbsz_dT ; T4 = beta * T3 - 1.0 ; T4_dT = beta_dT * T3 + beta * T3_dT ; T5 = 4.0 / costi5 ; T5_dT = - 4.0 / ( costi5 * costi5 ) * costi5_dT ; T1 = 1.0 + T4 * T5 ; T6 = beta * T5 ; T7 = T4 * T5 ; T1_dVb = (T6 * T3_dVb - T7 * costi3_dVb_c3) ; T1_dVd = (T6 * T3_dVd - T7 * costi3_dVd_c3) ; T1_dVg = (T6 * T3_dVg - T7 * costi3_dVg_c3) ; T1_dT = T4_dT * T5 + T4 * T5_dT ; Fn_SZ( T1 , T1, 1.0e-2, T2) ; T1_dVb *= T2 ; T1_dVd *= T2 ; T1_dVg *= T2 ; T1_dT *= T2 ; costi6 = sqrt(T1) ; costi6_dT = 0.5 / sqrt(T1) * T1_dT ; T0 = costi4 * (1.0 - costi6) ; T0_dT = costi4_dT * (1.0 - costi6) + costi4 * ( - costi6_dT ) ; Psasti = Vgssti + T0 ; T2 = 0.5 * costi4 / costi6 ; Psasti_dVbs = Vgssti_dVbs + costi3_dVb_c3 * T0 - T2 * T1_dVb ; Psasti_dVds = Vgssti_dVds + costi3_dVd_c3 * T0 - T2 * T1_dVd ; Psasti_dVgs = Vgssti_dVgs + costi3_dVg_c3 * T0 - T2 * T1_dVg ; Psasti_dT = Vgssti_dT + T0_dT ; T0 = 1.0 / (beta + 2.0 / (Vgssti + small)) ; T0_dT = - 1.0 / ((beta + 2.0 / (Vgssti + small)) * (beta + 2.0 / (Vgssti + small))) * ( beta_dT - 2 / ((Vgssti + small) * (Vgssti + small)) * Vgssti_dT ); Psbsti = log (1.0 / costi1 / costi3 * (Vgssti * Vgssti)) * T0 ; T1 = 1 / costi1 / costi3 * (Vgssti * Vgssti) ; costi1_dT = 2 * here->HSMHV_nin * Nin_dT * here->HSMHV_nsti_p2 ; T1_dT = ( - 1 / costi1 / costi1 * costi1_dT / costi3 - 1 / costi3 / costi3 * costi3_dT / costi1 ) * Vgssti * Vgssti + 1 / costi1 / costi3 * 2 * Vgssti * Vgssti_dT ; T2 = 2.0 * T0 / (Vgssti + small) ; T3 = Psbsti / (Vgssti + small) ; Psbsti_dVbs = T2 * (Vgssti_dVbs - 0.5 * costi3_dVb_c3 * Vgssti + T3 * Vgssti_dVbs ) ; Psbsti_dVds = T2 * (Vgssti_dVds - 0.5 * costi3_dVd_c3 * Vgssti + T3 * Vgssti_dVds ) ; Psbsti_dVgs = T2 * (Vgssti_dVgs - 0.5 * costi3_dVg_c3 * Vgssti + T3 * Vgssti_dVgs ) ; Psbsti_dT = 1 / T1 * T1_dT * T0 + log( T1 ) * T0_dT ; Psab = Psbsti - Psasti - sti2_dlt ; Psab_dVbs = Psbsti_dVbs - Psasti_dVbs ; Psab_dVds = Psbsti_dVds - Psasti_dVds ; Psab_dVgs = Psbsti_dVgs - Psasti_dVgs ; Psab_dT = Psbsti_dT - Psasti_dT ; T0 = sqrt (Psab * Psab + 4.0 * sti2_dlt * Psbsti) ; Psti = Psbsti - 0.5 * (Psab + T0) ; T1 = 1.0 / T0 ; Psti_dVbs = Psbsti_dVbs - 0.5 * ( Psab_dVbs + ( Psab * Psab_dVbs + 2.0 * sti2_dlt * Psbsti_dVbs ) * T1 ) ; Psti_dVds = Psbsti_dVds - 0.5 * ( Psab_dVds + ( Psab * Psab_dVds + 2.0 * sti2_dlt * Psbsti_dVds ) * T1 ) ; Psti_dVgs = Psbsti_dVgs - 0.5 * ( Psab_dVgs + ( Psab * Psab_dVgs + 2.0 * sti2_dlt * Psbsti_dVgs ) * T1 ) ; Psti_dT = Psbsti_dT - 0.5 * ( Psab_dT + ( Psab * Psab_dT + 2.0 * sti2_dlt * Psbsti_dT ) * T1 ) ; T0 = costi1 * exp (beta * Psti) ; T0_dT = costi1_dT * exp(beta * Psti) + costi1 * exp(beta * Psti) * ( beta_dT * Psti + beta * Psti_dT ) ; T1 = beta * (Psti - Vbsz) - 1.0 + T0 ; T1_dVb = beta * ((Psti_dVbs - Vbsz_dVbs) + T0 * Psti_dVbs) ; T1_dVd = beta * ((Psti_dVds - Vbsz_dVds) + T0 * Psti_dVds) ; T1_dVg = beta * (Psti_dVgs + T0 * Psti_dVgs) ; T1_dT = beta_dT * (Psti - Vbsz) + beta * (Psti_dT - Vbsz_dT) + T0_dT ; Fn_SZ ( T1 , T1, 1.0e-2, T0) ; T1 += epsm10 ; T1_dVb *= T0 ; T1_dVd *= T0 ; T1_dVg *= T0 ; T1_dT *= T0 ; sq1sti = sqrt (T1); T2 = 0.5 / sq1sti ; sq1sti_dVbs = T2 * T1_dVb ; sq1sti_dVds = T2 * T1_dVd ; sq1sti_dVgs = T2 * T1_dVg ; sq1sti_dT = T2 * T1_dT ; T1 = beta * (Psti - Vbsz) - 1.0; T1_dVb = beta * (Psti_dVbs - Vbsz_dVbs) ; T1_dVd = beta * (Psti_dVds - Vbsz_dVds) ; T1_dVg = beta * Psti_dVgs ; T1_dT = beta_dT * ( Psti - Vbsz ) + beta * (Psti_dT - Vbsz_dT) ; Fn_SZ( T1 , T1, 1.0e-2, T0) ; T1 += epsm10 ; T1_dVb *= T0 ; T1_dVd *= T0 ; T1_dVg *= T0 ; T1_dT *= T0 ; sq2sti = sqrt (T1); T2 = 0.5 / sq2sti ; sq2sti_dVbs = T2 * T1_dVb ; sq2sti_dVds = T2 * T1_dVd ; sq2sti_dVgs = T2 * T1_dVg ; sq2sti_dT = T2 * T1_dT ; Qn0sti = costi0 * (sq1sti - sq2sti) ; Qn0sti_dVbs = costi0 * (sq1sti_dVbs - sq2sti_dVbs) ; Qn0sti_dVds = costi0 * (sq1sti_dVds - sq2sti_dVds) ; Qn0sti_dVgs = costi0 * (sq1sti_dVgs - sq2sti_dVgs) ; Qn0sti_dT = costi0 * (sq1sti_dT - sq2sti_dT) + here->HSMHV_costi00 * 0.5 / sqrt( here->HSMHV_beta_inv ) * beta_inv_dT * (sq1sti - sq2sti) ; /* T1: Vdsatsti */ T1 = Psasti - Psti ; T1_dVb = Psasti_dVbs - Psti_dVbs ; T1_dVd = Psasti_dVds - Psti_dVds ; T1_dVg = Psasti_dVgs - Psti_dVgs ; T1_dT = Psasti_dT - Psti_dT ; Fn_SZ( T1 , T1 , 1.0e-1 , T2 ) ; T1_dVb *= T2 ; T1_dVd *= T2 ; T1_dVg *= T2 ; T1_dT *= T2 ; TX = Vds / T1 ; T2 = 1.0 / ( T1 * T1 ) ; TX_dVbs = T2 * ( - Vds * T1_dVb ) ; TX_dVds = T2 * ( T1 - Vds * T1_dVd ) ; TX_dVgs = T2 * ( - Vds * T1_dVg ) ; TX_dT = T2 * ( - Vds * T1_dT ) ; Fn_CP( TY , TX , 1.0 , 4 , T2 ) ; TY_dVbs = T2 * TX_dVbs ; TY_dVds = T2 * TX_dVds ; TY_dVgs = T2 * TX_dVgs ; TY_dT = T2 * TX_dT ; costi7 = 2.0 * here->HSMHV_wsti * here->HSMHV_nf * beta_inv ; costi7_dT = 2.0 * here->HSMHV_wsti * here->HSMHV_nf * beta_inv_dT ; T1 = Lch ; Idssti = costi7 * Mu * Qn0sti * TY / T1 ; T3 = 1.0 / T1 ; T4 = Mu * Qn0sti * TY / T1 / T1 ; T5 = Mu * Qn0sti ; Idssti_dVbs = costi7 * (((Mu_dVbs * Qn0sti + Mu * Qn0sti_dVbs) * TY + T5 * TY_dVbs ) * T3 - Lch_dVbs * T4 ) ; Idssti_dVds = costi7 * (((Mu_dVds * Qn0sti + Mu * Qn0sti_dVds) * TY + T5 * TY_dVds ) * T3 - Lch_dVds * T4 ) ; Idssti_dVgs = costi7 * (((Mu_dVgs * Qn0sti + Mu * Qn0sti_dVgs) * TY + T5 * TY_dVgs ) * T3 - Lch_dVgs * T4 ) ; Idssti_dT = costi7 * (((Mu_dT * Qn0sti + Mu * Qn0sti_dT) * TY + T5 * TY_dT ) * T3 - Lch_dT * T4 ) + costi7_dT * Mu * Qn0sti * TY / T1 ; Ids = Ids + Idssti ; Ids_dVbs = Ids_dVbs + Idssti_dVbs ; Ids_dVds = Ids_dVds + Idssti_dVds ; Ids_dVgs = Ids_dVgs + Idssti_dVgs ; Ids_dT = Ids_dT + Idssti_dT ; } /*----------------------------------------------------------* * induced gate noise. ( Part 1/3 ) *----------------------*/ if ( model->HSMHV_coign != 0 && model->HSMHV_cothrml != 0 ) { kusai00 = VgVt * VgVt ; kusaidd = 2.0e0 * beta_inv * Cox_inv * Idd ; kusaiL = kusai00 - kusaidd ; Fn_SZ( kusai00 , kusai00 , 1.0e-3 , T0 ) ; Fn_SZ( kusaiL , kusaiL , 1.0e-3 , T0 ) ; kusai00L = kusai00 - kusaiL ; if ( Qn0 < epsm10 || kusai00L < epsm10 ) flg_ign = 0 ; else flg_ign = 1 ; } /*-----------------------------------------------------------* * End of PART-1. (label) *-----------------*/ end_of_part_1: /*----------------------------------------------------------* * Evaluate integrated charges in unit [C]. *----------------------*/ T1 = - here->HSMHV_weffcv_nf * Leff ; Qb = T1 * Qbu ; Qb_dVbs = T1 * Qbu_dVbs ; Qb_dVds = T1 * Qbu_dVds ; Qb_dVgs = T1 * Qbu_dVgs ; Qb_dT = T1 * Qbu_dT ; Qi = T1 * Qiu ; Qi_dVbs = T1 * Qiu_dVbs ; Qi_dVds = T1 * Qiu_dVds ; Qi_dVgs = T1 * Qiu_dVgs ; Qi_dT = T1 * Qiu_dT ; Qd = Qi * Qdrat ; Qd_dVbs = Qi_dVbs * Qdrat + Qi * Qdrat_dVbs ; Qd_dVds = Qi_dVds * Qdrat + Qi * Qdrat_dVds ; Qd_dVgs = Qi_dVgs * Qdrat + Qi * Qdrat_dVgs ; Qd_dT = Qi_dT * Qdrat + Qi * Qdrat_dT ; /*-----------------------------------------------------------* * Modified potential for symmetry. *-----------------*/ T1 = ( Vds - Pds ) / 2 ; Fn_SymAdd( Pzadd , T1 , model->HSMHV_pzadd0 , T2 ) ; T2 /= 2 ; Pzadd_dVbs = T2 * ( - Pds_dVbs ) ; Pzadd_dVds = T2 * ( 1.0 - Pds_dVds ) ; Pzadd_dVgs = T2 * ( - Pds_dVgs ) ; Pzadd_dT = T2 * ( -Pds_dT ); if ( Pzadd < epsm10 ) { Pzadd = epsm10 ; Pzadd_dVbs = 0.0 ; Pzadd_dVds = 0.0 ; Pzadd_dVgs = 0.0 ; Pzadd_dT = 0.0 ; } Ps0z = Ps0 + Pzadd ; Ps0z_dVbs = Ps0_dVbs + Pzadd_dVbs ; Ps0z_dVds = Ps0_dVds + Pzadd_dVds ; Ps0z_dVgs = Ps0_dVgs + Pzadd_dVgs ; Ps0z_dT = Ps0_dT + Pzadd_dT ; /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * PART-2: Substrate / gate / leak currents *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /*-----------------------------------------------------------* * Isub : substrate current induced by impact ionization. *-----------------*/ if ( flg_noqi == 1 || model->HSMHV_coisub == 0 ) { /* Accumulation zone or nonconductive case, in which Ids==0. */ Isub = 0.0e0 ; Isub_dVbs = Isub_dVds = Isub_dVgs = 0.0e0 ; Isub_dT = 0.0; } else { /*-------------------------------------------* * Conductive case. *-----------------*/ if ( pParam->HSMHV_sub1 > 0.0e0 && pParam->HSMHV_vmax > 0.0e0 ) { T0 = here->HSMHV_vg2const ; T1 = T0 * Vgp ; T1_dVd = T0 * Vgp_dVds ; T1_dVg = T0 * Vgp_dVgs ; T1_dVb = T0 * Vgp_dVbs ; T1_dT = T0 * Vgp_dT ; T7 = Cox0 * Cox0 ; T8 = here->HSMHV_qnsub_esi ; T3 = T8 / T7 ; T9 = 2.0 / T8 ; T4 = 1.0e0 + T9 * T7 ; T2 = here->HSMHV_xvbs ; T5 = T1 - beta_inv - T2 * Vbsz ; T5_dVd = T1_dVd - T2 * Vbsz_dVds; T5_dVg = T1_dVg ; T5_dVb = T1_dVb - T2 * Vbsz_dVbs; T5_dT = - beta_inv_dT + T1_dT - T2 * Vbsz_dT ; T6 = T4 * T5 ; T6_dVd = T4 * T5_dVd ; T6_dVg = T4 * T5_dVg ; T6_dVb = T4 * T5_dVb ; T6_dT = T4 * T5_dT ; Fn_SZ( T6 , T6, 1.0e-3, T9) ; T6 += small ; T6_dVd *= T9 ; T6_dVg *= T9 ; T6_dVb *= T9 ; T6_dT *= T9 ; T6 = sqrt( T6 ) ; T9 = 0.5 / T6 ; T6_dVd = T9 * T6_dVd ; T6_dVg = T9 * T6_dVg ; T6_dVb = T9 * T6_dVb ; T6_dT = T9 * T6_dT ; Psislsat = T1 + T3 * ( 1.0 - T6 ) ; Psislsat_dVd = T1_dVd - T3 * T6_dVd ; Psislsat_dVg = T1_dVg - T3 * T6_dVg ; Psislsat_dVb = T1_dVb - T3 * T6_dVb ; Psislsat_dT = T1_dT - T3 * T6_dT ; T2 = here->HSMHV_lgate / (here->HSMHV_xgate + here->HSMHV_lgate) ; Psisubsat = pParam->HSMHV_svds * Vdsz + Ps0z - T2 * Psislsat ; Psisubsat_dVd = pParam->HSMHV_svds * Vdsz_dVds + Ps0z_dVds - T2 * Psislsat_dVd ; Psisubsat_dVg = Ps0z_dVgs - T2 * Psislsat_dVg ; Psisubsat_dVb = pParam->HSMHV_svds * Vdsz_dVbs + Ps0z_dVbs - T2 * Psislsat_dVb ; Psisubsat_dT = pParam->HSMHV_svds * Vdsz_dT + Ps0z_dT - T2 * Psislsat_dT ; Fn_SZ( Psisubsat , Psisubsat, 1.0e-3, T9 ) ; Psisubsat += small ; Psisubsat_dVd *= T9 ; Psisubsat_dVg *= T9 ; Psisubsat_dVb *= T9 ; Psisubsat_dT *= T9 ; T5 = here->HSMHV_xsub1 ; T6 = here->HSMHV_xsub2 ; T2 = exp( - T6 / Psisubsat ) ; T3 = T2 * T6 / ( Psisubsat * Psisubsat ) ; T2_dVd = T3 * Psisubsat_dVd ; T2_dVg = T3 * Psisubsat_dVg ; T2_dVb = T3 * Psisubsat_dVb ; T2_dT = T3 * Psisubsat_dT ; Isub = T5 * Psisubsat * Ids * T2 ; Isub_dVds = T5 * ( Psisubsat_dVd * Ids * T2 + Psisubsat * Ids_dVds * T2 + Psisubsat * Ids * T2_dVd ) ; Isub_dVgs = T5 * ( Psisubsat_dVg * Ids * T2 + Psisubsat * Ids_dVgs * T2 + Psisubsat * Ids * T2_dVg ) ; Isub_dVbs = T5 * ( Psisubsat_dVb * Ids * T2 + Psisubsat * Ids_dVbs * T2 + Psisubsat * Ids * T2_dVb ) ; Isub_dT = T5 * ( Psisubsat_dT * Ids * T2 + Psisubsat * Ids_dT * T2 + Psisubsat * Ids * T2_dT ) ; } else { Isub = 0.0e0 ; Isub_dVbs = Isub_dVds = Isub_dVgs = 0.0e0 ; Isub_dT = 0.0e0 ; } /* end of if ( pParam->HSMHV_sub1 ... ) else block. */ /*---------------------------------------------------* * Impact-Ionization Current in the Drift Region *-----------------*/ T8 = here->HSMHV_subld1 ; if ( T8 != 0.0 ) { T0 = ( Vdse + Ps0 - Psdl ) ; T0_dVb = Ps0_dVbs - Psdl_dVbs ; T0_dVd = Ps0_dVds - Psdl_dVds ; T0_dVg = Ps0_dVgs - Psdl_dVgs ; T0_dT = Ps0_dT - Psdl_dT ; Fn_SZ( T0, T0, 1e-6, T1 ) ; T0_dVb *= T1 ; T0_dVd *= T1 ; T0_dVg *= T1 ; T0_dT *= T1 ; T1 = sqrt( VgVt + small ) ; T3 = 1.0 / ( 2.0 * T1 ) ; T1_dVb = VgVt_dVbs * T3 ; T1_dVd = VgVt_dVds * T3 ; T1_dVg = VgVt_dVgs * T3 ; T1_dT = VgVt_dT * T3 ; T4 = 1.0 / ( T0 * T1 ) ; T7 = Ldrift * hereMKS->HSMHV_subld2 ; T2= exp( - T7 * T4 ); T6 = T7 * T2 * T4 * T4 ; T2_dVb = ( T0_dVb * T1 + T0 * T1_dVb ) * T6 ; T2_dVd = ( T0_dVd * T1 + T0 * T1_dVd ) * T6 ; T2_dVg = ( T0_dVg * T1 + T0 * T1_dVg ) * T6 ; T2_dT = ( T0_dT * T1 + T0 * T1_dT ) * T6 ; T2_dVdse = T1 * T6 ; T5 = T8 * Ids * T0 * T2 ; T5_dVb = T8 * ( Ids_dVbs * T0 * T2 + Ids * T0_dVb * T2 + Ids * T0 * T2_dVb ) ; T5_dVd = T8 * ( Ids_dVds * T0 * T2 + Ids * T0_dVd * T2 + Ids * T0 * T2_dVd ) ; T5_dVg = T8 * ( Ids_dVgs * T0 * T2 + Ids * T0_dVg * T2 + Ids * T0 * T2_dVg ) ; T5_dT = T8 * ( Ids_dT * T0 * T2 + Ids * T0_dT * T2 + Ids * T0 * T2_dT ) ; T5_dVdse = T8 * ( Ids_dRa * Ra_dVdse * T0 * T2 + Ids * T2 + Ids * T0 * T2_dVdse ) ; Isub += T5 ; Isub_dVgs += T5_dVg ; Isub_dVds += T5_dVd ; Isub_dVbs += T5_dVb ; Isub_dT += T5_dT ; Isub_dVdse += T5_dVdse ; } } /*---------------------------------------------------* * Impact-Ionization Induced Bulk Potential Change (IBPC) *-----------------*/ if ( flg_noqi == 0 && Isub > 0e0 && pParam->HSMHV_ibpc1 != 0e0 ) { /* delta Vbs */ T0 = 1e0 + pParam->HSMHV_ibpc2 * dVth ; dVbsIBPC = pParam->HSMHV_ibpc1 * T0 * Isub ; dVbsIBPC_dVbs = pParam->HSMHV_ibpc1 * ( pParam->HSMHV_ibpc2 * dVth_dVb * Isub + T0 * Isub_dVbs ) ; dVbsIBPC_dVds = pParam->HSMHV_ibpc1 * ( pParam->HSMHV_ibpc2 * dVth_dVd * Isub + T0 * Isub_dVds ) ; dVbsIBPC_dVgs = pParam->HSMHV_ibpc1 * ( pParam->HSMHV_ibpc2 * dVth_dVg * Isub + T0 * Isub_dVgs ) ; dVbsIBPC_dT = pParam->HSMHV_ibpc1 * ( pParam->HSMHV_ibpc2 * dVth_dT * Isub + T0 * Isub_dT ) ; /* dG3 & dG4 */ T10 = 1e0 / Xi0 ; T10_dT = - T10 / Xi0 * Xi0_dT ; T1 = beta * dVbsIBPC * T10 ; T11 = T10 * T10; T1_dVb = beta * ( dVbsIBPC_dVbs * Xi0 - dVbsIBPC * Xi0_dVbs ) * T11 ; T1_dVd = beta * ( dVbsIBPC_dVds * Xi0 - dVbsIBPC * Xi0_dVds ) * T11 ; T1_dVg = beta * ( dVbsIBPC_dVgs * Xi0 - dVbsIBPC * Xi0_dVgs ) * T11 ; T1_dT = beta_dT * dVbsIBPC * T10 + beta * dVbsIBPC_dT * T10 + beta * dVbsIBPC * T10_dT ; T10 = 1e0 / Xil ; T10_dT = - T10 / Xil * Xil_dT ; T2 = beta * dVbsIBPC * T10 ; T11 = T10 * T10; T2_dVb = beta * ( dVbsIBPC_dVbs * Xil - dVbsIBPC * Xil_dVbs ) * T11 ; T2_dVd = beta * ( dVbsIBPC_dVds * Xil - dVbsIBPC * Xil_dVds ) * T11 ; T2_dVg = beta * ( dVbsIBPC_dVgs * Xil - dVbsIBPC * Xil_dVgs ) * T11 ; T2_dT = beta_dT * dVbsIBPC * T10 + beta * dVbsIBPC_dT * T10 + beta * dVbsIBPC * T10_dT ; dG3 = cnst0 * ( Xilp32 * T2 - Xi0p32 * T1 ) ; dG3_dVbs = cnst0 * ( Xilp32_dVbs * T2 + Xilp32 * T2_dVb - Xi0p32_dVbs * T1 - Xi0p32 * T1_dVb ) ; dG3_dVds = cnst0 * ( Xilp32_dVds * T2 + Xilp32 * T2_dVd - Xi0p32_dVds * T1 - Xi0p32 * T1_dVd ) ; dG3_dVgs = cnst0 * ( Xilp32_dVgs * T2 + Xilp32 * T2_dVg - Xi0p32_dVgs * T1 - Xi0p32 * T1_dVg ) ; dG3_dT = cnst0 * ( Xilp32_dT * T2 + Xilp32 * T2_dT - Xi0p32_dT * T1 - Xi0p32 * T1_dT ) + cnst0_dT * ( Xilp32 * T2 - Xi0p32 * T1 ) ; dG4 = cnst0 * 0.5 * ( - Xilp12 * T2 + Xi0p12 * T1 ) ; dG4_dVbs = cnst0 * 0.5 * ( - Xilp12_dVbs * T2 - Xilp12 * T2_dVb + Xi0p12_dVbs * T1 + Xi0p12 * T1_dVb ) ; dG4_dVds = cnst0 * 0.5 * ( - Xilp12_dVds * T2 - Xilp12 * T2_dVd + Xi0p12_dVds * T1 + Xi0p12 * T1_dVd ) ; dG4_dVgs = cnst0 * 0.5 * ( - Xilp12_dVgs * T2 - Xilp12 * T2_dVg + Xi0p12_dVgs * T1 + Xi0p12 * T1_dVg ) ; dG4_dT = cnst0 * 0.5 * ( - Xilp12_dT * T2 - Xilp12 * T2_dT + Xi0p12_dT * T1 + Xi0p12 * T1_dT ) + cnst0_dT *0.5 * ( - Xilp12 * T2 + Xi0p12 * T1 ) ; /* Add IBPC current into Ids */ dIdd = dG3 + dG4 ; dIdd_dVbs = dG3_dVbs + dG4_dVbs ; dIdd_dVds = dG3_dVds + dG4_dVds ; dIdd_dVgs = dG3_dVgs + dG4_dVgs ; dIdd_dT = dG3_dT + dG4_dT ; IdsIBPC = betaWL * dIdd * Mu ; IdsIBPC_dVbs = betaWL * ( Mu * dIdd_dVbs + dIdd * Mu_dVbs ) + betaWL_dVbs * Mu * dIdd ; IdsIBPC_dVds = betaWL * ( Mu * dIdd_dVds + dIdd * Mu_dVds ) + betaWL_dVds * Mu * dIdd ; IdsIBPC_dVgs = betaWL * ( Mu * dIdd_dVgs + dIdd * Mu_dVgs ) + betaWL_dVgs * Mu * dIdd ; IdsIBPC_dT = betaWL * ( Mu * dIdd_dT + dIdd * Mu_dT ) + betaWL_dT * Mu * dIdd ; } /* End if (IBPC) */ T3 = 1 / TTEMP ; T0 =- model->HSMHV_igtemp2 * T3 * T3 - 2 * model->HSMHV_igtemp3 * T3 * T3 * T3 ; Egp12_dT = 0.5 * T0 / Egp12; Egp32_dT = 1.5 * T0 * Egp12; /*-----------------------------------------------------------* * Igate : Gate current induced by tunneling. *-----------------*/ if ( model->HSMHV_coiigs != 0 ) { /* Igate */ if ( flg_noqi == 0 ) { Psdlz = Ps0z + Vdsz - epsm10 ; Psdlz_dVbs = Ps0z_dVbs + Vdsz_dVbs ; Psdlz_dVds = Ps0z_dVds + Vdsz_dVds ; Psdlz_dVgs = Ps0z_dVgs ; Psdlz_dT = Ps0z_dT ; T1 = Vgsz - Vfb + modelMKS->HSMHV_gleak4 * (dVth - dPpg) * Leff - Psdlz * pParam->HSMHV_gleak3 ; T3 = modelMKS->HSMHV_gleak4 * Leff ; T1_dVg = Vgsz_dVgs + T3 * (dVth_dVg - dPpg_dVg) - Psdlz_dVgs * pParam->HSMHV_gleak3 ; T1_dVd = Vgsz_dVds + T3 * (dVth_dVd - dPpg_dVd) - Psdlz_dVds * pParam->HSMHV_gleak3 ; T1_dVb = Vgsz_dVbs + T3 * ( dVth_dVb - dPpg_dVb ) - Psdlz_dVbs * pParam->HSMHV_gleak3 ; T1_dT = Vgsz_dT + T3 * ( dVth_dT - dPpg_dT ) - Psdlz_dT * pParam->HSMHV_gleak3 ; T3 = 2.0 * T1 ; T1_dVg = T3 * T1_dVg ; T1_dVd = T3 * T1_dVd ; T1_dVb = T3 * T1_dVb ; T1_dT = T3 * T1_dT ; T1 *= T1 ; T3 = 1.0 / Tox0 ; T2 = T1 * T3 ; T2_dVg = (T1_dVg ) * T3 ; T2_dVd = (T1_dVd ) * T3 ; T2_dVb = (T1_dVb ) * T3 ; T2_dT = T1_dT * T3 ; T3 = 1.0 / modelMKS->HSMHV_gleak5 ; T7 = 1.0 + Ey * T3 ; T7_dVg = Ey_dVgs * T3 ; T7_dVd = Ey_dVds * T3 ; T7_dVb = Ey_dVbs * T3 ; T7_dT = Ey_dT * T3 ; Etun = T2 * T7 ; Etun_dVgs = T2_dVg * T7 + T7_dVg * T2 ; Etun_dVds = T2_dVd * T7 + T7_dVd * T2 ; Etun_dVbs = T2_dVb * T7 + T7_dVb * T2 ; Etun_dT = T2_dT * T7 + T7_dT * T2 ; Fn_SZ( Etun , Etun , igate_dlt , T5 ) ; Etun_dVgs *= T5 ; Etun_dVds *= T5 ; Etun_dVbs *= T5 ; Etun_dT *= T5 ; Fn_SZ( T3 , Vgsz , 1.0e-3 , T4 ) ; T3 -= model->HSMHV_vzadd0 ; T3_dVb = 0.5 * (Vgsz_dVbs + Vgsz * Vgsz_dVbs/TMF2); TX = T3 / cclmmdf ; TX_dVbs = T3_dVb / cclmmdf ; T2 = 1.0 + TX * TX ; T2_dVb = 2 * TX_dVbs * TX ; T1 = 1.0 - 1.0 / T2 ; T1_dVb = T2_dVb / T2 / T2 ; T1_dVg = 2.0 * TX * T4 / ( T2 * T2 * cclmmdf ) ; T1_dVd = T1_dVg * Vgsz_dVds ; Etun_dVgs = T1 * Etun_dVgs + Etun * T1_dVg ; Etun_dVds = T1 * Etun_dVds + Etun * T1_dVd ; Etun_dVbs = Etun_dVbs * T1 + Etun * T1_dVb ; Etun_dT *= T1 ; Etun *= T1 ; T0 = Leff * here->HSMHV_weff_nf ; T7 = modelMKS->HSMHV_gleak7 / (modelMKS->HSMHV_gleak7 + T0) ; T6 = pParam->HSMHV_gleak6 ; T9 = T6 / (T6 + Vdsz) ; T9_dVb = - T9 / (T6 + Vdsz) * Vdsz_dVbs ; T9_dVd = - T9 / (T6 + Vdsz) * Vdsz_dVds ; T4 = 1 / (Etun + small ) ; T1 = - pParam->HSMHV_gleak2 * Egp32 * T4 ; T3 = pParam->HSMHV_gleak2 * T4 * T4; T1_dT = T3 * (Egp32 * Etun_dT - Egp32_dT * (Etun + small )) ; if ( T1 < - EXP_THR ) { Igate = 0.0 ; Igate_dVbs = Igate_dVds = Igate_dVgs = Igate_dT = 0.0 ; } else { T2 = exp ( T1 ) ; T2_dT = T1_dT * T2 ; T3 = pParam->HSMHV_gleak1 / Egp12 * C_QE * T0 ; T3_dT = - Egp12_dT * pParam->HSMHV_gleak1 / Egp12 / Egp12 * C_QE * T0 ; T5 = 1 / cnst0 ; T6 = sqrt ((Qiu + Cox0 * VgVt_small )* T5 ) ; T6_dT = ( ( ( cnst0 * Qiu_dT - cnst0_dT * ( Qiu + Cox0 * VgVt_small ) ) * T5 * T5 ) ) / T6 * 0.5 ; T4 = T2 * T3 * T6 ; T4_dT = T2_dT * T3 * T6 + T2 * T3_dT * T6 + T2 * T3 * T6_dT; T5 = T4 * Etun ; T6 = 0.5 * Etun / (Qiu + Cox0 * VgVt_small ) ; T10 = T5 * Etun ; T10_dVb = T5 * (2.0 * Etun_dVbs - T1 * Etun_dVbs + T6 * Qiu_dVbs) ; T10_dVd = T5 * (2.0 * Etun_dVds - T1 * Etun_dVds + T6 * Qiu_dVds) ; T10_dVg = T5 * (2.0 * Etun_dVgs - T1 * Etun_dVgs + T6 * Qiu_dVgs) ; T10_dT = 2 * T5 * Etun_dT + T4_dT * Etun * Etun ; Igate = T7 * T9 * T10 ; Igate_dVbs = T7 * (T9 * T10_dVb + T9_dVb * T10) ; Igate_dVds = T7 * (T9_dVd * T10 + T9 * T10_dVd) ; Igate_dVgs = T7 * T9 * T10_dVg ; Igate_dT = T7 * T9 * T10_dT ; } } /* Igs */ T0 = - pParam->HSMHV_glksd2 * Vgs + modelMKS->HSMHV_glksd3 ; T2 = exp (Tox0 * T0); T2_dVg = (- Tox0 * pParam->HSMHV_glksd2) * T2; T0 = Vgs / Tox0 / Tox0 ; T3 = Vgs * T0 ; T3_dVg = 2.0 * T0 * (1.0 ) ; T4 = pParam->HSMHV_glksd1 / 1.0e6 * here->HSMHV_weff_nf ; Igs = T4 * T2 * T3 ; Igs_dVgs = T4 * (T2_dVg * T3 + T2 * T3_dVg) ; Igs_dVds = 0.0 ; Igs_dVbs = 0.0 ; Igs_dT = 0.0 ; if ( Vgs >= 0.0e0 ){ Igs *= -1.0 ; Igs_dVgs *= -1.0 ; Igs_dVds *= -1.0 ; Igs_dVbs *= -1.0 ; } /* Igd */ T1 = Vgs - Vds ; T0 = - pParam->HSMHV_glksd2 * T1 + modelMKS->HSMHV_glksd3 ; T2 = exp (Tox0 * T0); T2_dVg = (- Tox0 * pParam->HSMHV_glksd2) * T2; T2_dVd = (+ Tox0 * pParam->HSMHV_glksd2) * T2; T2_dVb = 0.0 ; T0 = T1 / Tox0 / Tox0 ; T3 = T1 * T0 ; T3_dVg = 2.0 * T0 ; T3_dVd = - 2.0 * T0 ; T3_dVb = 0.0 ; T4 = pParam->HSMHV_glksd1 / 1.0e6 * here->HSMHV_weff_nf ; Igd = T4 * T2 * T3 ; Igd_dVgs = T4 * (T2_dVg * T3 + T2 * T3_dVg) ; Igd_dVds = T4 * (T2_dVd * T3 + T2 * T3_dVd) ; Igd_dVbs = 0.0 ; Igd_dT = 0.0 ; if( T1 >= 0.0e0 ){ Igd *= -1.0 ; Igd_dVgs *= -1.0 ; Igd_dVds *= -1.0 ; Igd_dVbs *= -1.0 ; } /* Igb */ Etun = ( - ( Vgs - Vbs ) + Vfb + model->HSMHV_glkb3 ) / Tox0 ; Etun_dVgs = - 1.0 / Tox0 ; Etun_dVds = 0.0 ; Etun_dVbs = 1.0 / Tox0 ; Fn_SZ( Etun , Etun, igate_dlt, T5) ; Etun += small ; Etun_dVgs *= T5 ; Etun_dVbs *= T5 ; T1 = - pParam->HSMHV_glkb2 / Etun ; if ( T1 < - EXP_THR ) { Igb = 0.0 ; Igb_dVgs = Igb_dVds = Igb_dVbs = Igb_dT = 0.0 ; } else { T2 = exp ( T1 ); T3 = pParam->HSMHV_glkb2 / ( Etun * Etun ) * T2 ; T2_dVg = T3 * Etun_dVgs ; T2_dVb = T3 * Etun_dVbs ; T3 = pParam->HSMHV_glkb1 * here->HSMHV_weff_nf * Leff ; Igb = T3 * Etun * Etun * T2 ; Igb_dVgs = T3 * (2.0 * Etun * Etun_dVgs * T2 + Etun * Etun * T2_dVg); Igb_dVds = 0.0 ; Igb_dVbs = T3 * (2.0 * Etun * Etun_dVbs * T2 + Etun * Etun * T2_dVb); Igb_dT = 0.0; } /* Ifn: Fowler-Nordheim tunneling current */ Eg12 = here->HSMHV_sqrt_eg ; Eg32 = here->HSMHV_eg * Eg12 ; T2 = - ( pParam->HSMHV_fvbs * Vbsz - Vgsz + dVthSC + dVthLP - pParam->HSMHV_fn3 ) / Tox0 ; T2_dVd = - ( pParam->HSMHV_fvbs * Vbsz_dVds - Vgsz_dVds + dVthSC_dVd + dVthLP_dVd ) / Tox0 ; T2_dVg = - ( - Vgsz_dVgs + dVthSC_dVg + dVthLP_dVg ) / Tox0 ; T2_dVb = - ( pParam->HSMHV_fvbs * Vbsz_dVbs -Vgsz_dVbs + dVthSC_dVb + dVthLP_dVb ) / Tox0 ; T2_dT = - ( pParam->HSMHV_fvbs * Vbsz_dT -Vgsz_dT + dVthSC_dT + dVthLP_dT ) / Tox0 ; T0 = T2 * T2 ; T1 = pParam->HSMHV_fn2 * Eg32 ; T1_dT = 1.5 * Eg_dT * pParam->HSMHV_fn2 * Eg12 ; T3 = - T1 / T2 ; if ( T3 < - EXP_THR ) { T5 = 0.0 ; T5_dVd = T5_dVg = T5_dVb = T5_dT = 0.0 ; } else { T5 = exp( T3 ) ; T5_dVd = T5 * T1 * T2_dVd / T0 ; T5_dVg = T5 * T1 * T2_dVg / T0 ; T5_dVb = T5 * T1 * T2_dVb / T0 ; T5_dT = T5 * T1 * T2_dT / T0 ; } T4 = C_QE * pParam->HSMHV_fn1 * here->HSMHV_weff_nf * here->HSMHV_lgate / Eg12 ; T4_dT = (- 0.5) * Eg_dT * T4 / here->HSMHV_eg ; if ( 2e0 * T2 + T1 < 0e0 ){ Ifn = 0.25e0 * T4 * T1 * T1 * c_exp_2 ; /* minimum value */ Ifn_dVd = 0e0 ; Ifn_dVg = 0e0 ; Ifn_dVb = 0e0 ; Ifn_dT = 0.25e0 * T4_dT * T1 * T1 * c_exp_2 ; } else { Ifn = T4 * T0 * T5 ; Ifn_dVd = T4 * ( 2.0 * T2 * T2_dVd * T5 + T0 * T5_dVd ) ; Ifn_dVg = T4 * ( 2.0 * T2 * T2_dVg * T5 + T0 * T5_dVg ) ; Ifn_dVb = T4 * ( 2.0 * T2 * T2_dVb * T5 + T0 * T5_dVb ) ; Ifn_dT = T4 * ( 2.0 * T2 * T2_dT * T5 + T0 * T5_dT ) +T4_dT * T0 * T5; } Igb -= Ifn ; Igb_dVbs -= Ifn_dVb ; Igb_dVds -= Ifn_dVd ; Igb_dVgs -= Ifn_dVg ; Igb_dT -= Ifn_dT ; } /* if ( model->HSMHV_coiigs == 0 ) */ /*-----------------------------------------------------------* * Vdsp : Vds modification for GIDL/GISL *-----------------*/ if ( model->HSMHV_cogidl != 0 ) { T1 = Vds * (1.0 - gidla * Vds) - gidlvds_dlt ; T2 = sqrt (T1 * T1 + 4.0 * gidlvds_dlt * Vds) ; Vdsp = Vds - 0.5 * (T1 + T2) ; T3 = 1.0 - 2.0 * gidla * Vds ; Vdsp_dVd = 1.0 - 0.5 * (T3 + (T1 * T3 + 2.0 * gidlvds_dlt) / T2) ; } /*-----------------------------------------------------------* * Igidl : GIDL *-----------------*/ if( model->HSMHV_cogidl == 0 ){ Igidl = 0.0e0 ; Igidl_dVbs = 0.0e0 ; Igidl_dVds = 0.0e0 ; Igidl_dVgs = 0.0e0 ; Igidl_dT = 0.0e0 ; } else { T1 = model->HSMHV_gidl3 * (Vdsp + model->HSMHV_gidl4) - Vgs + (dVthSC + dVthLP) * model->HSMHV_gidl5 ; T1_dT = (dVthSC_dT + dVthLP_dT) * model->HSMHV_gidl5 ; T2 = 1.0 / Tox0 ; E1 = T1 * T2 ; E1_dVb = ((model->HSMHV_gidl5 * (dVthSC_dVb + dVthLP_dVb)) ) * T2 ; E1_dVd = ((model->HSMHV_gidl3 * Vdsp_dVd) + model->HSMHV_gidl5 * (dVthSC_dVd + dVthLP_dVd)) * T2 ; E1_dVg = (-1.0 + model->HSMHV_gidl5 * (dVthSC_dVg + dVthLP_dVg) ) * T2 ; E1_dT = T1_dT * T2 ; Fn_SZ( Egidl , E1, eef_dlt, T5) ; Egidl_dVb = T5 * E1_dVb ; Egidl_dVd = T5 * E1_dVd ; Egidl_dVg = T5 * E1_dVg ; Egidl_dT = T5 * E1_dT ; T3 = 1 / (Egidl + small) ; T0 = - pParam->HSMHV_gidl2 * Egp32 * T3 ; T0_dT = - pParam->HSMHV_gidl2 * T3 *( Egp32_dT - Egidl_dT * T3 * Egp32 ) ; if ( T0 < - EXP_THR ) { Igidl = 0.0 ; Igidl_dVbs = Igidl_dVds = Igidl_dVgs = Igidl_dT = 0.0 ; } else { T1 = exp ( T0 ) ; T1_dT = T0_dT * T1 ; T2 = pParam->HSMHV_gidl1 / Egp12 * C_QE * here->HSMHV_weff_nf ; T2_dT = - Egp12_dT * pParam->HSMHV_gidl1 / Egp12 / Egp12 * C_QE * here->HSMHV_weff_nf ; Igidl = T2 * Egidl * Egidl * T1 ; T3 = T2 * T1 * Egidl * (2.0 + pParam->HSMHV_gidl2 * Egp32 * Egidl / (Egidl + small) / (Egidl + small)) ; Igidl_dVbs = T3 * Egidl_dVb ; Igidl_dVds = T3 * Egidl_dVd ; Igidl_dVgs = T3 * Egidl_dVg ; Igidl_dT = T2 * T1 * Egidl * 2.0 * Egidl_dT + T2 * Egidl * Egidl * T1_dT + T2_dT * Egidl * Egidl * T1; } /* bug-fix */ Vdb = Vds - Vbs ; if ( Vdb > 0.0 ) { T2 = Vdb * Vdb ; T4 = T2 * Vdb ; T0 = T4 + C_gidl_delta ; T5 = T4 / T0 ; T7 = ( 3.0 * T2 * T0 - T4 * 3.0 * T2 ) / ( T0 * T0 ) ; /* == T5_dVdb */ Igidl_dVbs = Igidl_dVbs * T5 + Igidl * T7 * ( - 1.0 ) ; /* Vdb_dVbs = -1 */ Igidl_dVds = Igidl_dVds * T5 + Igidl * T7 * ( + 1.0 ) ; /* Vdb_dVds = +1 */ Igidl_dVgs = Igidl_dVgs * T5 ; /* Vdb_dVgs = 0 */ Igidl_dT = Igidl_dT * T5 ; /* Vdb_dT = 0 */ Igidl *= T5 ; } else { Igidl = 0.0 ; Igidl_dVbs = Igidl_dVds = Igidl_dVgs = Igidl_dT = 0.0 ; } } /*-----------------------------------------------------------* * Igisl : GISL *-----------------*/ if( model->HSMHV_cogidl == 0){ Igisl = 0.0e0 ; Igisl_dVbs = 0.0e0 ; Igisl_dVds = 0.0e0 ; Igisl_dVgs = 0.0e0 ; Igisl_dT = 0.0e0 ; } else { T1 = model->HSMHV_gidl3 * ( - Vdsp + model->HSMHV_gidl4 ) - ( Vgs - Vdsp ) + ( dVthSC + dVthLP ) * model->HSMHV_gidl5 ; T1_dT = ( dVthSC_dT + dVthLP_dT ) * model->HSMHV_gidl5 ; T2 = 1.0 / Tox0 ; E1 = T1 * T2 ; E1_dVb = ((model->HSMHV_gidl5 * (dVthSC_dVb + dVthLP_dVb)) ) * T2 ; E1_dVd = (((1.0-model->HSMHV_gidl3 ) * Vdsp_dVd) + model->HSMHV_gidl5 * (dVthSC_dVd + dVthLP_dVd)) * T2 ; E1_dVg = (-1.0 + model->HSMHV_gidl5 * (dVthSC_dVg + dVthLP_dVg) ) * T2 ; E1_dT = T1_dT * T2 ; Fn_SZ( Egisl , E1, eef_dlt, T5) ; Egisl_dVb = T5 * E1_dVb ; Egisl_dVd = T5 * E1_dVd ; Egisl_dVg = T5 * E1_dVg ; Egisl_dT = T5 * E1_dT ; T3 = 1 / (Egisl + small) ; T0 = - pParam->HSMHV_gidl2 * Egp32 * T3 ; T0_dT = - pParam->HSMHV_gidl2 * T3 * ( Egp32_dT - Egisl_dT * T3 * Egp32 ) ; if ( T0 < - EXP_THR ) { Igisl = 0.0 ; Igisl_dVbs = Igisl_dVds = Igisl_dVgs = Igisl_dT = 0.0 ; } else { T1 = exp ( T0 ) ; T1_dT = T0_dT * T1 ; T3 = 1 / Egp12 ; T2 = pParam->HSMHV_gidl1 * T3 * C_QE * here->HSMHV_weff_nf ; T2_dT = - pParam->HSMHV_gidl1 * Egp12_dT * T3 * T3 * C_QE * here->HSMHV_weff_nf ; Igisl = T2 * Egisl * Egisl * T1 ; T3 = T2 * T1 * Egisl * (2.0 + pParam->HSMHV_gidl2 * Egp32 * Egisl / (Egisl + small) / (Egisl + small)) ; Igisl_dVbs = T3 * Egisl_dVb ; Igisl_dVds = T3 * Egisl_dVd ; Igisl_dVgs = T3 * Egisl_dVg ; Igisl_dT = T2 * T1 * Egisl * 2.0 * Egisl_dT + T2_dT * Egisl * Egisl * T1 + T2 * Egisl * Egisl * T1_dT ; } /* bug-fix */ Vsb = - Vbs ; if ( Vsb > 0.0 ) { T2 = Vsb * Vsb ; T4 = T2 * Vsb ; T0 = T4 + C_gidl_delta ; T5 = T4 / T0 ; T7 = ( 3.0 * T2 * T0 - T4 * 3.0 * T2 ) / ( T0 * T0 ) ; /* == T5_dVsb */ Igisl_dVbs = Igisl_dVbs * T5 + Igisl * T7 * ( - 1.0 ) ; /* Vsb_dVbs = -1 */ Igisl_dVds = Igisl_dVds * T5 ; /* Vsb_dVds = 0 */ Igisl_dVgs = Igisl_dVgs * T5 ; /* Vsb_dVgs = 0 */ Igisl_dT = Igisl_dT * T5 ; /* Vsb_dT = 0 */ Igisl *= T5 ; } else { Igisl = 0.0 ; Igisl_dVbs = Igisl_dVds = Igisl_dVgs = Igisl_dT = 0.0 ; } } /*-----------------------------------------------------------* * End of PART-2. (label) *-----------------*/ /* end_of_part_2: */ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * PART-3: Overlap charge *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ Aclm = pParam->HSMHV_clm1 ; if ( flg_noqi != 0 ) { /*-------------------------------------------* * Calculation of Psdl for cases of flg_noqi==1. *-----------------*/ Psdl = Aclm * (Vds + Ps0) + (1.0e0 - Aclm) * Psl ; Psdl_dVbs = Aclm * Ps0_dVbs + (1.0e0 - Aclm) * Psl_dVbs ; Psdl_dVds = Aclm * (1.0e0 + Ps0_dVds) + (1.0e0 - Aclm) * Psl_dVds ; Psdl_dVgs = Aclm * Ps0_dVgs + (1.0e0 - Aclm) * Psl_dVgs ; if ( Psdl > Ps0 + Vds - epsm10 ) { Psdl = Ps0 + Vds - epsm10 ; Psdl_dVbs = Ps0_dVbs ; Psdl_dVds = Ps0_dVds + 1.0 ; Psdl_dVgs = Ps0_dVgs ; } if (model->HSMHV_xqy !=0) { Ec = 0.0e0 ; Ec_dVbs =0.0e0 ; Ec_dVds =0.0e0 ; Ec_dVgs =0.0e0 ; Ec_dT =0.0e0 ; } } else { /* Ec is removed from Lred calc. part */ if (model->HSMHV_xqy !=0) { if ( Idd < C_IDD_MIN ) { Ec = 0.0e0 ; Ec_dVbs =0.0e0 ; Ec_dVds =0.0e0 ; Ec_dVgs =0.0e0 ; } else { T1 = beta_inv / Leff ; T1_dT = beta_inv_dT / Leff ; T2 = 1.0 / Qn0 ; T3 = T2 * T2 ; Ec = Idd * T1 * T2 ; Ec_dVbs = T1 * (Idd_dVbs * T2 - Idd * Qn0_dVbs * T3 ) ; Ec_dVds = T1 * (Idd_dVds * T2 - Idd * Qn0_dVds * T3 ) ; Ec_dVgs = T1 * (Idd_dVgs * T2 - Idd * Qn0_dVgs * T3 ) ; Ec_dT = T1 * (Idd_dT * T2 - Idd * Qn0_dT * T3 ) + T1_dT * Idd * T2 ; } } } /*-----------------------------------------------------------* * Overlap charges *-----------------*/ Coovlps = (int)ModeNML * model->HSMHV_coovlps + (int)ModeRVS * model->HSMHV_coovlp ; Coovlpd = (int)ModeRVS * model->HSMHV_coovlps + (int)ModeNML * model->HSMHV_coovlp ; Lovers = ModeNML * here->HSMHV_lovers + ModeRVS * here->HSMHV_loverld ; Loverd = ModeRVS * here->HSMHV_lovers + ModeNML * here->HSMHV_loverld ; Novers = ModeNML * pParam->HSMHV_novers + ModeRVS * pParam->HSMHV_nover ; Noverd = ModeRVS * pParam->HSMHV_novers + ModeNML * pParam->HSMHV_nover ; CVDSOVER = pParam->HSMHV_cvdsover ; /*---------------------------------------------------* * Source side (mode-dependent) *-----------------*/ /*-----------------------------------* * Constant capacitance model *-----------------*/ if ( Coovlps == 0 ) { flg_overgiven = ( (int)ModeNML * model->HSMHV_cgso_Given + (int)ModeRVS * model->HSMHV_cgdo_Given ) ; if ( flg_overgiven ) { Cgso = ModeNML * pParam->HSMHV_cgso + ModeRVS * pParam->HSMHV_cgdo ; Cgso *= - here->HSMHV_weffcv_nf ; } else { Cgso = - Cox0 * Lovers * here->HSMHV_weffcv_nf ; } Qgso = - Cgso * Vgse ; Qgso_dVbse = 0.0 ; Qgso_dVdse = 0.0 ; Qgso_dVgse = - Cgso ; /*-----------------------------------* * Simplified model *-----------------*/ } else { /* Coovlps != 0 begin */ if ( Lovers > 0.0 && Novers == 0.0 ){ cov_slp = modelMKS->HSMHV_ovslp ; cov_mag = model->HSMHV_ovmag ; T1 = Cox0 * here->HSMHV_weffcv_nf ; T4 = cov_slp * T1 * ( cov_mag + Vgs ) ; T4_dVg = cov_slp * T1 ; T4_dVd = 0.0 ; T5 = Lovers * T1 ; T9 = 1.2e0 - Ps0 ; Qgos = Vgs * T5 - T4 * T9 ; Qgos_dVbs = T4 * Ps0_dVbs ; Qgos_dVds = T4 * Ps0_dVds - T9 * T4_dVd ; Qgos_dVgs = T5 + T4 * Ps0_dVgs - T9 * T4_dVg ; Qgos_dT = T4 * Ps0_dT; /*-----------------------------------* * Surface potential model *------------------------*/ } else if ( Lovers > 0.0 && Novers >= 0.0 ) { Vgbgmt = Vgs - Vbs ; Vgbgmt_dVbs = -1.0 ; Vgbgmt_dVds = 0.0 ; Vgbgmt_dVgs = 1.0 ; Vxbgmt = - Vbs ; Vxbgmt_dVbs = -1.0 ; Vxbgmt_dVds = 0.0 ; Vxbgmt_dVgs = 0.0 ; Nover_func = Novers ; cnst0over_func = ModeNML * here->HSMHV_cnst0overs + ModeRVS * here->HSMHV_cnst0over ; cnst0over_func_dT = ModeNML * cnst0overs_dT + ModeRVS * cnst0over_dT ; /* ps0ldinib_func = ModeNML * here->HSMHV_ps0ldinibs + ModeRVS * here->HSMHV_ps0ldinib ;*/ /* ps0ldinib_func_dT = ModeNML * ps0ldinibs_dT + ModeRVS * ps0ldinib_dT ;*/ #include "hsmhveval_qover.h" T4 = here->HSMHV_weffcv_nf * Lovers * ( 1 - CVDSOVER ) ; Qovs = T4 * QsuLD ; Qovs_dVds = T4 * QsuLD_dVds ; Qovs_dVgs = T4 * QsuLD_dVgs ; Qovs_dVbs = T4 * QsuLD_dVbs ; Qovs_dT = T4 * QsuLD_dT ; /* QisLD = T4 * QiuLD ;*/ QisLD_dVbs = T4 * QiuLD_dVbs ; QisLD_dVds = T4 * QiuLD_dVds ; QisLD_dVgs = T4 * QiuLD_dVgs ; QisLD_dT = T4 * QiuLD_dT ; QbsLD = T4 * QbuLD ; /* QbsLD_dVbs = T4 * QbuLD_dVbs ; QbsLD_dVds = T4 * QbuLD_dVds ; QbsLD_dVgs = T4 * QbuLD_dVgs ; QbsLD_dT = T4 * QbuLD_dT ; */ if ( CVDSOVER != 0.0 ) { /* Qovsext begin */ Vgbgmt = Vgse - Vbse ; Vgbgmt_dVbs = -1.0 ; Vgbgmt_dVds = 0.0 ; Vgbgmt_dVgs = 1.0 ; Vxbgmt = - Vbse ; Vxbgmt_dVbs = -1.0 ; Vxbgmt_dVds = 0.0 ; Vxbgmt_dVgs = 0.0 ; #include "hsmhveval_qover.h" T4 = here->HSMHV_weffcv_nf * Lovers * CVDSOVER ; Qovsext = T4 * QsuLD ; Qovsext_dVdse = T4 * QsuLD_dVds ; Qovsext_dVgse = T4 * QsuLD_dVgs ; Qovsext_dVbse = T4 * QsuLD_dVbs ; Qovsext_dT = T4 * QsuLD_dT ; /* QisLDext = T4 * QiuLD ;*/ QisLDext_dVbse = T4 * QiuLD_dVbs ; QisLDext_dVdse = T4 * QiuLD_dVds ; QisLDext_dVgse = T4 * QiuLD_dVgs ; QisLDext_dT = T4 * QiuLD_dT ; QbsLDext = T4 * QbuLD ; /* QbsLDext_dVbse = T4 * QbuLD_dVbs ; QbsLDext_dVdse = T4 * QbuLD_dVds ; QbsLDext_dVgse = T4 * QbuLD_dVgs ; QbsLDext_dT = T4 * QbuLD_dT ; */ } /* Qovsext end */ } /*-----------------------------------* * Additional constant capacitance model *-----------------*/ flg_overgiven = ( (int)ModeNML * model->HSMHV_cgso_Given + (int)ModeRVS * model->HSMHV_cgdo_Given ) ; if ( flg_overgiven ) { Cgso = ModeNML * pParam->HSMHV_cgso + ModeRVS * pParam->HSMHV_cgdo ; Cgso *= - here->HSMHV_weffcv_nf ; } Qgso = - Cgso * Vgse ; Qgso_dVbse = 0.0 ; Qgso_dVdse = 0.0 ; Qgso_dVgse = - Cgso ; } /* Coovlps != 0 end */ /*---------------------------------------------------* * Drain side (mode-dependent) *-----------------*/ /*-----------------------------------* * Constant capacitance model *-----------------*/ if ( Coovlpd == 0 ) { flg_overgiven = ( (int)ModeRVS * model->HSMHV_cgso_Given + (int)ModeNML * model->HSMHV_cgdo_Given ) ; if ( flg_overgiven ) { Cgdo = ModeRVS * pParam->HSMHV_cgso + ModeNML * pParam->HSMHV_cgdo ; Cgdo *= - here->HSMHV_weffcv_nf ; } else { Cgdo = - Cox0 * Loverd * here->HSMHV_weffcv_nf ; } Qgdo = - Cgdo * (Vgse - Vdse) ; Qgdo_dVbse = 0.0 ; Qgdo_dVdse = Cgdo ; Qgdo_dVgse = - Cgdo ; /*-----------------------------------* * Simplified model *-----------------*/ } else { /* Coovlpd != 0 begin */ if ( Loverd > 0.0 && Noverd == 0.0 ){ cov_slp = modelMKS->HSMHV_ovslp ; cov_mag = model->HSMHV_ovmag ; T1 = Cox0 * here->HSMHV_weffcv_nf ; T4 = cov_slp * T1 * ( cov_mag + Vgs - Vds ) ; T4_dVg = cov_slp * T1 ; T4_dVd = - cov_slp * T1 ; T5 = Loverd * T1 ; T9 = 1.2e0 + Vds - Psl ; Qgod = ( Vgs - Vds ) * T5 - T4 * T9 ; Qgod_dVbs = + T4 * Psl_dVbs ; Qgod_dVds = - T5 + T4 * ( -1.0 + Psl_dVds ) - T9 * T4_dVd ; Qgod_dVgs = + T5 + T4 * Psl_dVgs - T9 * T4_dVg ; Qgod_dT = T4 * Psl_dT; /*-----------------------------------* * Surface potential model *------------------------*/ } else if ( Loverd > 0.0 && Noverd >= 0.0 ) { Vgbgmt = Vgs - Vbs ; Vgbgmt_dVbs = -1.0 ; Vgbgmt_dVds = 0.0 ; Vgbgmt_dVgs = 1.0 ; Vxbgmt = Vds - Vbs ; Vxbgmt_dVbs = -1.0 ; Vxbgmt_dVds = 1.0 ; Vxbgmt_dVgs = 0.0 ; Nover_func = Noverd ; cnst0over_func = ModeNML * here->HSMHV_cnst0over + ModeRVS * here->HSMHV_cnst0overs ; cnst0over_func_dT = ModeNML * cnst0over_dT + ModeRVS * cnst0overs_dT ; /* ps0ldinib_func = ModeNML * here->HSMHV_ps0ldinib + ModeRVS * here->HSMHV_ps0ldinibs ;*/ /* ps0ldinib_func_dT = ModeNML * ps0ldinib_dT + ModeRVS * ps0ldinibs_dT ;*/ #include "hsmhveval_qover.h" T4 = here->HSMHV_weffcv_nf * Loverd * ( 1 - CVDSOVER ) ; Qovd = T4 * QsuLD ; Qovd_dVds = T4 * QsuLD_dVds ; Qovd_dVgs = T4 * QsuLD_dVgs ; Qovd_dVbs = T4 * QsuLD_dVbs ; Qovd_dT = T4 * QsuLD_dT ; /* QidLD = T4 * QiuLD ;*/ QidLD_dVbs = T4 * QiuLD_dVbs ; QidLD_dVds = T4 * QiuLD_dVds ; QidLD_dVgs = T4 * QiuLD_dVgs ; QidLD_dT = T4 * QiuLD_dT ; QbdLD = T4 * QbuLD ; QbdLD_dVbs = T4 * QbuLD_dVbs ; QbdLD_dVds = T4 * QbuLD_dVds ; QbdLD_dVgs = T4 * QbuLD_dVgs ; QbdLD_dT = T4 * QbuLD_dT ; if ( CVDSOVER != 0.0 ) { /* Qovdext begin */ Vgbgmt = Vgse - Vbse ; Vgbgmt_dVbs = -1.0 ; Vgbgmt_dVds = 0.0 ; Vgbgmt_dVgs = 1.0 ; Vxbgmt = Vdse - Vbse ; Vxbgmt_dVbs = -1.0 ; Vxbgmt_dVds = 1.0 ; Vxbgmt_dVgs = 0.0 ; #include "hsmhveval_qover.h" T4 = here->HSMHV_weffcv_nf * Loverd * CVDSOVER ; Qovdext = T4 * QsuLD ; Qovdext_dVdse = T4 * QsuLD_dVds ; Qovdext_dVgse = T4 * QsuLD_dVgs ; Qovdext_dVbse = T4 * QsuLD_dVbs ; Qovdext_dT = T4 * QsuLD_dT ; /* QidLDext = T4 * QiuLD ;*/ QidLDext_dVbse = T4 * QiuLD_dVbs ; QidLDext_dVdse = T4 * QiuLD_dVds ; QidLDext_dVgse = T4 * QiuLD_dVgs ; QidLDext_dT = T4 * QiuLD_dT ; QbdLDext = T4 * QbuLD ; QbdLDext_dVbse = T4 * QbuLD_dVbs ; QbdLDext_dVdse= T4 * QbuLD_dVds ; QbdLDext_dVgse= T4 * QbuLD_dVgs ; QbdLDext_dT = T4 * QbuLD_dT ; } /* Qovdext end */ } /*-----------------------------------* * Additional constant capacitance model *-----------------*/ flg_overgiven = ( (int)ModeRVS * model->HSMHV_cgso_Given + (int)ModeNML * model->HSMHV_cgdo_Given ) ; if ( flg_overgiven ) { Cgdo = ModeRVS * pParam->HSMHV_cgso + ModeNML * pParam->HSMHV_cgdo ; Cgdo *= - here->HSMHV_weffcv_nf ; } Qgdo = - Cgdo * (Vgse - Vdse) ; Qgdo_dVbse = 0.0 ; Qgdo_dVdse = Cgdo ; Qgdo_dVgse = - Cgdo ; } /* Coovlpd != 0 end */ /*-------------------------------------------* * Gate/Bulk overlap charge: Qgbo *-----------------*/ Cgbo_loc = - pParam->HSMHV_cgbo * here->HSMHV_lgate ; Qgbo = - Cgbo_loc * (Vgs -Vbs) ; Qgbo_dVgs = - Cgbo_loc ; Qgbo_dVbs = Cgbo_loc ; Qgbo_dVds = 0.0 ; /*---------------------------------------------------* * Lateral-field-induced capacitance. *-----------------*/ if ( model->HSMHV_xqy == 0 ){ Qy = 0.0e0 ; Qy_dVds = 0.0e0 ; Qy_dVgs = 0.0e0 ; Qy_dVbs = 0.0e0 ; Qy_dT = 0.0e0 ; } else { Pslk = Ec * Leff + Ps0 ; Pslk_dVbs = Ec_dVbs * Leff + Ps0_dVbs; Pslk_dVds = Ec_dVds * Leff + Ps0_dVds; Pslk_dVgs = Ec_dVgs * Leff + Ps0_dVgs; Pslk_dT = Ec_dT * Leff + Ps0_dT; T1 = Aclm * ( Vds + Ps0 ) + ( 1.0e0 - Aclm ) * Pslk ; T1_dVb = Aclm * ( Ps0_dVbs ) + ( 1.0e0 - Aclm ) * Pslk_dVbs ; T1_dVd = Aclm * ( 1.0 + Ps0_dVds ) + ( 1.0e0 - Aclm ) * Pslk_dVds ; T1_dVg = Aclm * ( Ps0_dVgs ) + ( 1.0e0 - Aclm ) * Pslk_dVgs ; T1_dT = Aclm * ( Ps0_dT ) + ( 1.0e0 - Aclm ) * Pslk_dT ; T10 = here->HSMHV_wdpl ; T3 = T10 * 1.3 ; T2 = C_ESI * here->HSMHV_weffcv_nf * T3 ; Qy = - ( ( Ps0 + Vds - T1 ) / model->HSMHV_xqy ) * T2 ; Qy_dVds = - ( ( Ps0_dVds + 1.0e0 - T1_dVd ) / model->HSMHV_xqy ) * T2 ; Qy_dVgs = - ( ( Ps0_dVgs - T1_dVg ) / model->HSMHV_xqy ) * T2 ; Qy_dVbs = - ( ( Ps0_dVbs - T1_dVb ) / model->HSMHV_xqy ) * T2 ; Qy_dT = - ( ( Ps0_dT - T1_dT ) / model->HSMHV_xqy ) * T2 ; } if ( model->HSMHV_xqy1 != 0.0 ){ Qy += here->HSMHV_cqyb0 * Vbs ; Qy_dVbs += here->HSMHV_cqyb0 ; } /*---------------------------------------------------* * Fringing capacitance. *-----------------*/ Cfd = here->HSMHV_cfrng ; Cfs = here->HSMHV_cfrng ; Qfd = Cfd * ( Vgse - Vdse ) ; Qfs = Cfs * Vgse ; /*-----------------------------------------------------------* * End of PART-3. (label) *-----------------*/ /* end_of_part_3: */ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * PART-4: Substrate-source/drain junction diode. *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /*-----------------------------------------------------------* * Cbsj, Cbdj: node-base S/D biases. *-----------------*/ T10 = model->HSMHV_cvb * here->HSMHV_jd_nvtm_inv ; T11 = model->HSMHV_cvbk * here->HSMHV_jd_nvtm_inv ; T9 = model->HSMHV_cisb * here->HSMHV_exptemp ; T0 = here->HSMHV_isbd2 * T9 ; T2 = exp (- vbd_jct * T10 ); T2_dVb = - T2 * T10 ; T3 = exp (- vbd_jct * T11 ); T3_dVb = - T3 * T11 ; /* self heating */ T10_dT = model->HSMHV_cvb * beta_dT / pParam->HSMHV_nj ; T11_dT = model->HSMHV_cvbk * beta_dT / pParam->HSMHV_nj ; T9_dT = model->HSMHV_cisb * exptemp_dT ; T0_dT = here->HSMHV_isbd2 * T9_dT + isbd2_dT * T9 ; T2_dT = -vbd_jct * T10 * T2 * beta_dT * beta_inv ; T3_dT = -vbd_jct * T11 * T3 * beta_dT * beta_inv ; /* ibd */ if ( vbd_jct < here->HSMHV_vbdt ) { TX = vbd_jct * here->HSMHV_jd_nvtm_inv ; if ( TX < - EXP_THR ) { T1 = 0.0 ; T1_dVb = 0.0 ; T1_dT = 0.0 ; } else { T1 = exp ( TX ) ; T1_dVb = T1 * here->HSMHV_jd_nvtm_inv ; T1_dT = T1 * TX * beta_dT * beta_inv ; } Ibd = here->HSMHV_isbd * (T1 - 1.0) + T0 * (T2 - 1.0) + pParam->HSMHV_cisbk * (T3 - 1.0); Gbd = here->HSMHV_isbd * T1_dVb + T0 * T2_dVb + pParam->HSMHV_cisbk * T3_dVb ; Ibd_dT = here->HSMHV_isbd * T1_dT + isbd_dT * ( T1 - 1.0 ) + T0 * T2_dT + T0_dT * ( T2 - 1.0 ) + pParam->HSMHV_cisbk * T3_dT ; } else { T1 = here->HSMHV_jd_expcd ; T4 = here->HSMHV_isbd * here->HSMHV_jd_nvtm_inv * T1 ; Ibd = here->HSMHV_isbd * (T1 - 1.0) + T4 * (vbd_jct - here->HSMHV_vbdt) + T0 * (T2 - 1.0) + pParam->HSMHV_cisbk * (T3 - 1.0) ; Gbd = T4 + T0 * T2_dVb + pParam->HSMHV_cisbk * T3_dVb ; T1_dT = jd_expcd_dT ; T4_dT = isbd_dT * here->HSMHV_jd_nvtm_inv * T1 + here->HSMHV_isbd * jd_nvtm_inv_dT * T1 + here->HSMHV_isbd * here->HSMHV_jd_nvtm_inv * T1_dT ; Ibd_dT = isbd_dT * ( T1 - 1.0 ) + here->HSMHV_isbd * T1_dT + T4_dT * ( vbd_jct - here->HSMHV_vbdt ) - T4 * vbdt_dT + T0_dT * ( T2 - 1.0 ) + T0 * T2_dT + pParam->HSMHV_cisbk * T3_dT ; } T12 = model->HSMHV_divx * here->HSMHV_isbd2 ; Ibd += T12 * vbd_jct ; Gbd += T12 ; T12_dT = model->HSMHV_divx * isbd2_dT ; Ibd_dT += T12_dT * vbd_jct ; /* ibs */ T0 = here->HSMHV_isbs2 * T9 ; T0_dT = here->HSMHV_isbs2 * T9_dT + isbs2_dT * T9 ; TX = - vbs_jct * T10 ; if ( TX < - EXP_THR ) { T2 = 0.0 ; T2_dVb = 0.0 ; T2_dT = 0.0 ; } else { T2 = exp ( TX ); T2_dVb = - T2 * T10 ; T2_dT = T2 * TX * beta_dT * beta_inv ; } TX = - vbs_jct * T11 ; if ( TX < - EXP_THR ) { T3 = 0.0 ; T3_dVb = 0.0 ; T3_dT = 0.0 ; } else { T3 = exp ( TX ); T3_dVb = - T3 * T11 ; T3_dT = T3 * TX * beta_dT * beta_inv ; } if ( vbs_jct < here->HSMHV_vbst ) { TX = vbs_jct * here->HSMHV_jd_nvtm_inv ; if ( TX < - EXP_THR ) { T1 = 0.0 ; T1_dVb = 0.0 ; T1_dT = 0.0 ; } else { T1 = exp ( TX ) ; T1_dVb = T1 * here->HSMHV_jd_nvtm_inv ; T1_dT = T1 * TX * beta_dT * beta_inv ; } Ibs = here->HSMHV_isbs * (T1 - 1.0) + T0 * (T2 - 1.0) + pParam->HSMHV_cisbk * (T3 - 1.0); Gbs = here->HSMHV_isbs * T1_dVb + T0 * T2_dVb + pParam->HSMHV_cisbk * T3_dVb ; Ibs_dT = here->HSMHV_isbs * T1_dT + isbs_dT * ( T1 - 1.0 ) + T0 * T2_dT + T0_dT * ( T2 - 1.0 ) + pParam->HSMHV_cisbk * T3_dT ; } else { T1 = here->HSMHV_jd_expcs ; T4 = here->HSMHV_isbs * here->HSMHV_jd_nvtm_inv * T1 ; Ibs = here->HSMHV_isbs * (T1 - 1.0) + T4 * (vbs_jct - here->HSMHV_vbst) + T0 * (T2 - 1.0) + pParam->HSMHV_cisbk * (T3 - 1.0) ; Gbs = T4 + T0 * T2_dVb + pParam->HSMHV_cisbk * T3_dVb ; T1_dT = jd_expcs_dT ; T4_dT = isbs_dT * here->HSMHV_jd_nvtm_inv * T1 + here->HSMHV_isbs * jd_nvtm_inv_dT * T1 + here->HSMHV_isbs * here->HSMHV_jd_nvtm_inv * T1_dT ; Ibs_dT = isbs_dT * ( T1 - 1.0 ) + here->HSMHV_isbs * T1_dT + T4_dT * ( vbs_jct - here->HSMHV_vbst) - T4 * vbst_dT + T0_dT * ( T2 - 1.0 ) + T0 * T2_dT + pParam->HSMHV_cisbk * T3_dT ; } T12 = model->HSMHV_divx * here->HSMHV_isbs2 ; Ibs += T12 * vbs_jct ; Gbs += T12 ; T12_dT = model->HSMHV_divx * isbs2_dT ; Ibs_dT += T12_dT * vbs_jct ; /*-----------------------------------------------------------* * Charges and Capacitances. *-----------------*/ /* charge storage elements * bulk-drain and bulk-source depletion capacitances * czbd : zero bias drain junction capacitance * czbs : zero bias source junction capacitance * czbdsw:zero bias drain junction sidewall capacitance * czbssw:zero bias source junction sidewall capacitance */ tcjbd = model->HSMHV_tcjbd ; tcjbs = model->HSMHV_tcjbs ; tcjbdsw = model->HSMHV_tcjbdsw ; tcjbssw = model->HSMHV_tcjbssw ; tcjbdswg = model->HSMHV_tcjbdswg ; tcjbsswg = model->HSMHV_tcjbsswg ; czbs = model->HSMHV_cj * here->HSMHV_as ; czbs = czbs * ( 1.0 + tcjbs * ( TTEMP - model->HSMHV_ktnom )) ; czbs_dT = ( model->HSMHV_cj * here->HSMHV_as ) * tcjbs ; czbd = model->HSMHV_cj * here->HSMHV_ad ; czbd = czbd * ( 1.0 + tcjbd * ( TTEMP - model->HSMHV_ktnom )) ; czbd_dT = ( model->HSMHV_cj * here->HSMHV_ad ) * tcjbd ; /* Source Bulk Junction */ if (here->HSMHV_ps > here->HSMHV_weff_nf) { czbssw = model->HSMHV_cjsw * ( here->HSMHV_ps - here->HSMHV_weff_nf ) ; czbssw = czbssw * ( 1.0 + tcjbssw * ( TTEMP - model->HSMHV_ktnom )) ; czbssw_dT = ( model->HSMHV_cjsw * ( here->HSMHV_ps - here->HSMHV_weff_nf )) * tcjbssw ; czbsswg = model->HSMHV_cjswg * here->HSMHV_weff_nf ; czbsswg = czbsswg * ( 1.0 + tcjbsswg * ( TTEMP - model->HSMHV_ktnom )) ; czbsswg_dT = ( model->HSMHV_cjswg * here->HSMHV_weff_nf ) * tcjbsswg ; // if (vbs_jct == 0.0) { if (0) { Qbs = 0.0 ; Qbs_dT = 0.0 ; Capbs = czbs + czbssw + czbsswg ; } else if (vbs_jct < 0.0) { if (czbs > 0.0) { arg = 1.0 - vbs_jct / model->HSMHV_pb ; if (model->HSMHV_mj == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSMHV_mj ) ; Qbs = model->HSMHV_pb * czbs * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mj) ; Qbs_dT = model->HSMHV_pb * czbs_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mj) ; Capbs = czbs * sarg ; } else { Qbs = 0.0 ; Qbs_dT = 0.0 ; Capbs = 0.0 ; } if (czbssw > 0.0) { arg = 1.0 - vbs_jct / model->HSMHV_pbsw ; if (model->HSMHV_mjsw == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSMHV_mjsw ) ; Qbs += model->HSMHV_pbsw * czbssw * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjsw) ; Qbs_dT += model->HSMHV_pbsw * czbssw_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjsw) ; Capbs += czbssw * sarg ; } if (czbsswg > 0.0) { arg = 1.0 - vbs_jct / model->HSMHV_pbswg ; if (model->HSMHV_mjswg == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSMHV_mjswg ) ; Qbs += model->HSMHV_pbswg * czbsswg * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjswg) ; Qbs_dT += model->HSMHV_pbswg * czbsswg_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjswg) ; Capbs += czbsswg * sarg ; } } else { T1 = czbs + czbssw + czbsswg ; T1_dT = czbs_dT + czbssw_dT + czbsswg_dT ; T2 = czbs * model->HSMHV_mj / model->HSMHV_pb + czbssw * model->HSMHV_mjsw / model->HSMHV_pbsw + czbsswg * model->HSMHV_mjswg / model->HSMHV_pbswg ; T2_dT = czbs_dT * model->HSMHV_mj / model->HSMHV_pb + czbssw_dT * model->HSMHV_mjsw / model->HSMHV_pbsw + czbsswg_dT * model->HSMHV_mjswg / model->HSMHV_pbswg ; Qbs = vbs_jct * (T1 + vbs_jct * 0.5 * T2) ; Qbs_dT = vbs_jct * (T1_dT + vbs_jct * 0.5 * T2_dT) ; Capbs = T1 + vbs_jct * T2 ; } } else { czbsswg = model->HSMHV_cjswg * here->HSMHV_ps ; czbsswg = czbsswg * ( 1.0 + tcjbsswg * ( TTEMP - model->HSMHV_ktnom )) ; czbsswg_dT = ( model->HSMHV_cjswg * here->HSMHV_ps ) * tcjbsswg ; // if (vbs_jct == 0.0) { if (0) { Qbs = 0.0 ; Qbs_dT = 0.0 ; Capbs = czbs + czbsswg ; } else if (vbs_jct < 0.0) { if (czbs > 0.0) { arg = 1.0 - vbs_jct / model->HSMHV_pb ; if (model->HSMHV_mj == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSMHV_mj ) ; Qbs = model->HSMHV_pb * czbs * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mj) ; Qbs_dT = model->HSMHV_pb * czbs_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mj) ; Capbs = czbs * sarg ; } else { Qbs = 0.0 ; Qbs_dT = 0.0 ; Capbs = 0.0 ; } if (czbsswg > 0.0) { arg = 1.0 - vbs_jct / model->HSMHV_pbswg ; if (model->HSMHV_mjswg == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSMHV_mjswg ) ; Qbs += model->HSMHV_pbswg * czbsswg * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjswg) ; Qbs_dT += model->HSMHV_pbswg * czbsswg_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjswg) ; Capbs += czbsswg * sarg ; } } else { T1 = czbs + czbsswg ; T1_dT = czbs_dT + czbsswg_dT ; T2 = czbs * model->HSMHV_mj / model->HSMHV_pb + czbsswg * model->HSMHV_mjswg / model->HSMHV_pbswg ; T2_dT = czbs_dT * model->HSMHV_mj / model->HSMHV_pb + czbsswg_dT * model->HSMHV_mjswg / model->HSMHV_pbswg ; Qbs = vbs_jct * (T1 + vbs_jct * 0.5 * T2) ; Qbs_dT = vbs_jct * (T1_dT + vbs_jct * 0.5 * T2_dT) ; Capbs = T1 + vbs_jct * T2 ; } } /* Drain Bulk Junction */ if (here->HSMHV_pd > here->HSMHV_weff_nf) { czbdsw = model->HSMHV_cjsw * ( here->HSMHV_pd - here->HSMHV_weff_nf ) ; czbdsw = czbdsw * ( 1.0 + tcjbdsw * ( TTEMP - model->HSMHV_ktnom )) ; czbdsw_dT = ( model->HSMHV_cjsw * ( here->HSMHV_pd - here->HSMHV_weff_nf )) * tcjbdsw ; czbdswg = model->HSMHV_cjswg * here->HSMHV_weff_nf ; czbdswg = czbdswg * ( 1.0 + tcjbdswg * ( TTEMP - model->HSMHV_ktnom )) ; czbdswg_dT = ( model->HSMHV_cjswg * here->HSMHV_weff_nf ) * tcjbdswg ; // if (vbd_jct == 0.0) { if (0) { Qbd = 0.0 ; Qbd_dT = 0.0 ; Capbd = czbd + czbdsw + czbdswg ; } else if (vbd_jct < 0.0) { if (czbd > 0.0) { arg = 1.0 - vbd_jct / model->HSMHV_pb ; if (model->HSMHV_mj == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSMHV_mj ) ; Qbd = model->HSMHV_pb * czbd * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mj) ; Qbd_dT = model->HSMHV_pb * czbd_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mj) ; Capbd = czbd * sarg ; } else { Qbd = 0.0 ; Qbd_dT = 0.0 ; Capbd = 0.0 ; } if (czbdsw > 0.0) { arg = 1.0 - vbd_jct / model->HSMHV_pbsw ; if (model->HSMHV_mjsw == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSMHV_mjsw ) ; Qbd += model->HSMHV_pbsw * czbdsw * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjsw) ; Qbd_dT += model->HSMHV_pbsw * czbdsw_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjsw) ; Capbd += czbdsw * sarg ; } if (czbdswg > 0.0) { arg = 1.0 - vbd_jct / model->HSMHV_pbswg ; if (model->HSMHV_mjswg == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSMHV_mjswg ) ; Qbd += model->HSMHV_pbswg * czbdswg * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjswg) ; Qbd_dT += model->HSMHV_pbswg * czbdswg_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjswg) ; Capbd += czbdswg * sarg ; } } else { T1 = czbd + czbdsw + czbdswg ; T1_dT = czbd_dT + czbdsw_dT + czbdswg_dT ; T2 = czbd * model->HSMHV_mj / model->HSMHV_pb + czbdsw * model->HSMHV_mjsw / model->HSMHV_pbsw + czbdswg * model->HSMHV_mjswg / model->HSMHV_pbswg ; T2_dT = czbd_dT * model->HSMHV_mj / model->HSMHV_pb + czbdsw_dT * model->HSMHV_mjsw / model->HSMHV_pbsw + czbdswg_dT * model->HSMHV_mjswg / model->HSMHV_pbswg ; Qbd = vbd_jct * (T1 + vbd_jct * 0.5 * T2) ; Qbd_dT = vbd_jct * (T1_dT + vbd_jct * 0.5 * T2_dT) ; Capbd = T1 + vbd_jct * T2 ; } } else { czbdswg = model->HSMHV_cjswg * here->HSMHV_pd ; czbdswg = czbdswg * ( 1.0 + tcjbdswg * ( TTEMP - model->HSMHV_ktnom )) ; czbdswg_dT = ( model->HSMHV_cjswg * here->HSMHV_pd ) * tcjbdswg ; // if (vbd_jct == 0.0) { if (0) { Qbd = 0.0 ; Qbd_dT = 0.0 ; Capbd = czbd + czbdswg ; } else if (vbd_jct < 0.0) { if (czbd > 0.0) { arg = 1.0 - vbd_jct / model->HSMHV_pb ; if (model->HSMHV_mj == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSMHV_mj ) ; Qbd = model->HSMHV_pb * czbd * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mj) ; Qbd_dT = model->HSMHV_pb * czbd_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mj) ; Capbd = czbd * sarg ; } else { Qbd = 0.0 ; Qbd_dT = 0.0 ; Capbd = 0.0 ; } if (czbdswg > 0.0) { arg = 1.0 - vbd_jct / model->HSMHV_pbswg ; if (model->HSMHV_mjswg == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSMHV_mjswg ) ; Qbd += model->HSMHV_pbswg * czbdswg * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjswg) ; Qbd_dT += model->HSMHV_pbswg * czbdswg_dT * (1.0 - arg * sarg) / (1.0 - model->HSMHV_mjswg) ; Capbd += czbdswg * sarg ; } } else { T1 = czbd + czbdswg ; T1_dT = czbd_dT + czbdswg_dT ; T2 = czbd * model->HSMHV_mj / model->HSMHV_pb + czbdswg * model->HSMHV_mjswg / model->HSMHV_pbswg ; T2_dT = czbd_dT * model->HSMHV_mj / model->HSMHV_pb + czbdswg_dT * model->HSMHV_mjswg / model->HSMHV_pbswg ; Qbd = vbd_jct * (T1 + vbd_jct * 0.5 * T2) ; Qbd_dT = vbd_jct * (T1_dT + vbd_jct * 0.5 * T2_dT) ; Capbd = T1 + vbd_jct * T2 ; } } /*-----------------------------------------------------------* * End of PART-4. (label) *-----------------*/ /* end_of_part_4: */ /*-----------------------------------------------------------* * PART-5: NQS. (label) *-----------------*/ if (flg_nqs) { if(ckt->CKTmode & MODETRAN){ if( ckt->CKTmode & MODEINITTRAN ){ tau = tau_dVds = tau_dVgs = tau_dVbs = tau_dT = 0.0 ; taub = taub_dVds = taub_dVgs = taub_dVbs = taub_dT = 0.0 ; } else { /* tau for inversion charge */ if (flg_noqi == 0) { T12 = model->HSMHV_dly1; T10 = model->HSMHV_dly2; T3 = Lch ; T1 = T10 * T12 * T3 * T3 ; T2 = Mu * VgVt * T12 + T10 * T3 * T3 + small ; tau = T1 / T2 ; T1_dVg = T10 * T12 * 2.0 * T3 * Lch_dVgs ; T1_dVd = T10 * T12 * 2.0 * T3 * Lch_dVds ; T1_dVb = T10 * T12 * 2.0 * T3 * Lch_dVbs ; T1_dT = T10 * T12 * 2.0 * T3 * Lch_dT ; T2_dVg = T12 * Mu_dVgs * VgVt + T12 * Mu * VgVt_dVgs + T10 * 2.0 * T3 * Lch_dVgs ; T2_dVd = T12 * Mu_dVds * VgVt + T12 * Mu * VgVt_dVds + T10 * 2.0 * T3 * Lch_dVds ; T2_dVb = T12 * Mu_dVbs * VgVt + T12 * Mu * VgVt_dVbs + T10 * 2.0 * T3 * Lch_dVbs ; T2_dT = T12 * Mu_dT * VgVt + T12 * Mu * VgVt_dT + T10 * 2.0 * T3 * Lch_dT ; T4 = 1.0 / T2 ; tau_dVgs = ( T1_dVg - tau * T2_dVg ) * T4 ; tau_dVds = ( T1_dVd - tau * T2_dVd ) * T4 ; tau_dVbs = ( T1_dVb - tau * T2_dVb ) * T4 ; tau_dT = ( T1_dT - tau * T2_dT ) * T4 ; } else { tau = model->HSMHV_dly1 ; tau_dVgs = tau_dVds = tau_dVbs = tau_dT = 0.0 ; } T1 = ckt->CKTdelta ; /* tau for bulk charge */ T2 = modelMKS->HSMHV_dly3 ; taub = T2 * Cox ; taub_dVgs = T2 * Cox_dVg ; taub_dVds = T2 * Cox_dVd ; taub_dVbs = T2 * Cox_dVb ; taub_dT = 0.0 ; } } else { /* !(CKT_mode & MODETRAN) */ tau = tau_dVds = tau_dVgs = tau_dVbs = tau_dT = 0.0 ; taub = taub_dVds = taub_dVgs = taub_dVbs = taub_dT = 0.0 ; } } if ( flg_nqs && (ckt->CKTmode & (MODEDCOP | MODEINITSMSIG)) ) { /* ACNQS */ if (flg_noqi == 0) { T12 = model->HSMHV_dly1 ; T10 = model->HSMHV_dly2 ; T3 = Lch ; T1 = T12 * T10 * T3 * T3 ; T2 = Mu * VgVt * T12 + T10 * T3 * T3 + small ; tau = T1 / T2 ; T1_dVg = T10 * T12 * 2.0 * T3 * Lch_dVgs ; T1_dVd = T10 * T12 * 2.0 * T3 * Lch_dVds ; T1_dVb = T10 * T12 * 2.0 * T3 * Lch_dVbs ; T1_dT = T10 * T12 * 2.0 * T3 * Lch_dT ; T2_dVg = T12 * Mu_dVgs * VgVt + T12 * Mu * VgVt_dVgs + T10 * 2.0 * T3 * Lch_dVgs ; T2_dVd = T12 * Mu_dVds * VgVt + T12 * Mu * VgVt_dVds + T10 * 2.0 * T3 * Lch_dVds ; T2_dVb = T12 * Mu_dVbs * VgVt + T12 * Mu * VgVt_dVbs + T10 * 2.0 * T3 * Lch_dVbs ; T2_dT = T12 * Mu_dT * VgVt + T12 * Mu * VgVt_dT + T10 * 2.0 * T3 * Lch_dT ; T4 = 1.0 / T2 ; tau_dVgs = (T1_dVg - tau * T2_dVg) * T4 ; tau_dVds = (T1_dVd - tau * T2_dVd) * T4 ; tau_dVbs = (T1_dVb - tau * T2_dVb) * T4 ; tau_dT = (T1_dT - tau * T2_dT) * T4 ; } else { tau = model->HSMHV_dly1 ; tau_dVgs = tau_dVds = tau_dVbs = tau_dT = 0.0 ; } T2 = modelMKS->HSMHV_dly3 ; taub = T2 * Cox; taub_dVgs = T2 * Cox_dVg ; taub_dVds = T2 * Cox_dVd ; taub_dVbs = T2 * Cox_dVb ; taub_dT = 0.0 ; } /*-----------------------------------------------------------* * End of PART-5. (label) *-----------------*/ /* end_of_part_5: */ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * PART-6: Noise Calculation. *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /*-----------------------------------------------------------* * 1/f noise. *-----------------*/ if ( model->HSMHV_coflick != 0 && !flg_noqi ) { NFalp = pParam->HSMHV_nfalp ; NFtrp = pParam->HSMHV_nftrp ; Cit = modelMKS->HSMHV_cit ; T1 = Qn0 / C_QE ; T2 = ( Cox + Qn0 / ( Ps0 - Vbscl ) + Cit ) * beta_inv / C_QE ; T3 = -2.0E0 * Qi / C_QE / Lch / here->HSMHV_weff_nf - T1 ; if ( T3 != T1 ) { T4 = 1.0E0 / ( T1 + T2 ) / ( T3 + T2 ) + 2.0E0 * NFalp * Ey * Mu / ( T3 - T1 ) * log( ( T3 + T2 ) / ( T1 + T2 ) ) + NFalp * Ey * Mu * NFalp * Ey * Mu ; } else { T4 = 1.0 / ( T1 + T2 ) / ( T3 + T2 ) + 2.0 * NFalp * Ey * Mu / ( T1 + T2 ) + NFalp * Ey * Mu * NFalp * Ey * Mu; } Nflic = Ids * Ids * NFtrp / ( Lch * beta * here->HSMHV_weff_nf ) * T4 ; } else { Nflic = 0.0 ; } /*-----------------------------------------------------------* * thermal noise. *-----------------*/ if ( model->HSMHV_cothrml != 0 && !flg_noqi ) { Eyd = ( Psdl - Ps0 ) / Lch + small ; T12 = Muun * Eyd / 1.0e7 ; /* note: model->HSMHV_bb = 2 (electron) ;1 (hole) */ if ( 1.0e0 - epsm10 <= model->HSMHV_bb && model->HSMHV_bb <= 1.0e0 + epsm10 ) { T7 = 1.0e0 ; } else if ( 2.0e0 - epsm10 <= model->HSMHV_bb && model->HSMHV_bb <= 2.0e0 + epsm10 ) { T7 = T12 ; } else { T7 = Fn_Pow( Eyd, model->HSMHV_bb - 1.0e0 ) ; } T8 = T12 * T7 ; T9 = 1.0e0 + T8 ; T10 = Fn_Pow( T9, ( - 1.0e0 / model->HSMHV_bb - 1.0e0 ) ) ; T11 = T9 * T10 ; Mud_hoso = Muun * T11 ; Mu_Ave = ( Mu + Mud_hoso ) / 2.0 ; /* Sid_h = GAMMA * 4.0 * C_KB * model->HSMHV_temp * gds0_h2; */ T0 = Alpha * Alpha ; Nthrml = here->HSMHV_weff_nf * Cox * VgVt * Mu * ( ( 1e0 + 3e0 * Alpha + 6e0 * T0 ) * Mud_hoso * Mud_hoso + ( 3e0 + 4e0 * Alpha + 3e0 * T0 ) * Mud_hoso * Mu + ( 6e0 + 3e0 * Alpha + T0 ) * Mu * Mu ) / ( 15e0 * Lch * ( 1e0 + Alpha ) * Mu_Ave * Mu_Ave ) ; } else { Nthrml = 0e0 ; } /*----------------------------------------------------------* * induced gate noise. ( Part 2/3 ) *----------------------*/ if ( model->HSMHV_coign != 0 && model->HSMHV_cothrml != 0 && flg_ign == 1 && !flg_noqi ) { sqrtkusaiL = sqrt( kusaiL ) ; T2 = VgVt + sqrtkusaiL ; T3 = kusai00 * kusai00 ; T4 = kusaiL * kusaiL ; T5 = 42.0e0 * kusai00 * kusaiL ; T5 += 4.0e0 * ( T3 + T4 ) ; T5 += 20.0e0 * sqrtkusaiL * VgVt * ( kusai00 + kusaiL ) ; T10 = T2 * T2 ; T10 *= T10 ; kusai_ig = T5 / ( T10 * T2 ) ; /* Induced Gate Noise parameter */ gds0_ign = here->HSMHV_weff_nf / Lch * Mu * Cox ; gds0_h2 = gds0_ign * VgVt ; GAMMA = Nthrml / gds0_h2 ; T7 = kusai00 + 4.0e0 * VgVt * sqrtkusaiL + kusaiL ; /* cross-correlation coefficient (= Sigid/sqrt(Sig*Sid) ) */ crl_f = c_sqrt_15 * kusai00L * T7 / ( 6.0e0 * T2 * sqrt( GAMMA * T2 * VgVt * T5 ) ) ; } /*-----------------------------------------------------------* * End of PART-6. (label) *-----------------*/ /* end_of_part_6: */ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * PART-7: Evaluation of outputs. *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /*-----------------------------------------------------------* * Implicit quantities related to Alpha. *-----------------*/ if ( flg_noqi == 0 && VgVt > VgVt_small ) { Delta = fac1 * beta / ( 2 * Xi0p12 ) ; Pslsat = VgVt / ( 1.0 + Delta ) + Ps0 ; } else { Pslsat = 0.0 ; } Vdsat = Pslsat - Pb2 ; if ( Vdsat < 0.0 ) { Vdsat = 0.0 ; } /*-----------------------------------------------------------* * Evaluate the derivatives w.r.t. external biases. * -> not to be done for the flat and Schur version! *-----------------*/ Ids += IdsIBPC ; Ids_dVbs += IdsIBPC_dVbs ; Ids_dVds += IdsIBPC_dVds ; Ids_dVgs += IdsIBPC_dVgs ; Ids_dT += IdsIBPC_dT ; /*---------------------------------------------------* * Derivatives of junction diode currents and charges. * - NOTE: These quantities are regarded as functions of * external biases. * - NOTE: node-base S/D *-----------------*/ Gbse = Gbs ; Gbde = Gbd ; Capbse = Capbs ; Capbde = Capbd ; /*---------------------------------------------------* * Extrapolate quantities if external biases are out of bounds. * -> not necessary here *-----------------*/ /*-----------------------------------------------------------* * Warn negative conductance. * - T1 ( = d Ids / d Vds ) is the derivative w.r.t. circuit bias. *-----------------*/ T1 = ModeNML * Ids_dVds + ModeRVS * ( Ids_dVbs + Ids_dVds + Ids_dVgs ) ; if ( flg_info >= 1 && (Ids_dVbs < 0.0 || T1 < 0.0 || Ids_dVgs < 0.0) ) { printf( "*** warning(HiSIM_HV): Negative Conductance\n" ) ; printf( " type = %d mode = %d\n" , model->HSMHV_type , here->HSMHV_mode ) ; printf( " Vbs = %12.5e Vds = %12.5e Vgse= %12.5e\n" , Vbs , Vds , Vgs ) ; printf( " Ids_dVbs = %12.5e\n" , Ids_dVbs ) ; printf( " Ids_dVds = %12.5e\n" , T1 ) ; printf( " Ids_dVgs = %12.5e\n" , Ids_dVgs ) ; } /*-----------------------------------------------------------* * Assign outputs. *-----------------*/ /*---------------------------------------------------* * Channel current and conductances. *-----------------*/ here->HSMHV_ids = Mfactor * Ids ; here->HSMHV_dIds_dVdsi = Mfactor * Ids_dVds ; here->HSMHV_dIds_dVgsi = Mfactor * Ids_dVgs ; here->HSMHV_dIds_dVbsi = Mfactor * Ids_dVbs ; here->HSMHV_dIds_dTi = Mfactor * Ids_dT ; /* -------------------------------------* * Intrinsic charges / capacitances. *-----------------*/ if (flg_nqs) { /* for flat handling of NQS: the NQS charges are added in hsmhvld */ here->HSMHV_qg = 0.0 ; here->HSMHV_qd = 0.0 ; here->HSMHV_qs = 0.0 ; here->HSMHV_qdp = 0.0 ; here->HSMHV_qsp = 0.0 ; here->HSMHV_dqdp_dVdse = 0.0 ; here->HSMHV_dqdp_dVgse = 0.0 ; here->HSMHV_dqdp_dVbse = 0.0 ; here->HSMHV_dqdp_dTi = 0.0 ; here->HSMHV_dqsp_dVdse = 0.0 ; here->HSMHV_dqsp_dVgse = 0.0 ; here->HSMHV_dqsp_dVbse = 0.0 ; here->HSMHV_dqsp_dTi = 0.0 ; here->HSMHV_dQdi_dVdsi = 0.0 ; here->HSMHV_dQdi_dVgsi = 0.0 ; here->HSMHV_dQdi_dVbsi = 0.0 ; here->HSMHV_dQdi_dTi = 0.0 ; here->HSMHV_dQg_dVdsi = 0.0 ; here->HSMHV_dQg_dVgsi = 0.0 ; here->HSMHV_dQg_dVbsi = 0.0 ; here->HSMHV_dQg_dTi = 0.0 ; here->HSMHV_dQb_dVdsi = 0.0 ; here->HSMHV_dQb_dVgsi = 0.0 ; here->HSMHV_dQb_dVbsi = 0.0 ; here->HSMHV_dQb_dTi = 0.0 ; here->HSMHV_qgext = 0.0 ; here->HSMHV_qdext = 0.0 ; here->HSMHV_qsext = 0.0 ; here->HSMHV_dQdext_dVdse = 0.0 ; here->HSMHV_dQdext_dVgse = 0.0 ; here->HSMHV_dQdext_dVbse = 0.0 ; here->HSMHV_dQdext_dTi = 0.0 ; here->HSMHV_dQgext_dVdse = 0.0 ; here->HSMHV_dQgext_dVgse = 0.0 ; here->HSMHV_dQgext_dVbse = 0.0 ; here->HSMHV_dQgext_dTi = 0.0 ; here->HSMHV_dQbext_dVdse = 0.0 ; here->HSMHV_dQbext_dVgse = 0.0 ; here->HSMHV_dQbext_dVbse = 0.0 ; here->HSMHV_dQbext_dTi = 0.0 ; here->HSMHV_tau = tau ; here->HSMHV_tau_dVgsi = tau_dVgs ; here->HSMHV_tau_dVdsi = tau_dVds ; here->HSMHV_tau_dVbsi = tau_dVbs ; here->HSMHV_tau_dTi = tau_dT ; here->HSMHV_taub = taub ; here->HSMHV_taub_dVgsi = taub_dVgs ; here->HSMHV_taub_dVdsi = taub_dVds ; here->HSMHV_taub_dVbsi = taub_dVbs ; here->HSMHV_taub_dTi = taub_dT ; here->HSMHV_Xd = Qdrat; here->HSMHV_Xd_dVgsi = Qdrat_dVgs ; here->HSMHV_Xd_dVdsi = Qdrat_dVds ; here->HSMHV_Xd_dVbsi = Qdrat_dVbs ; here->HSMHV_Xd_dTi = Qdrat_dT ; here->HSMHV_Qbulk = Mfactor * Qb ; here->HSMHV_Qbulk_dVgsi = Mfactor * Qb_dVgs ; here->HSMHV_Qbulk_dVdsi = Mfactor * Qb_dVds ; here->HSMHV_Qbulk_dVbsi = Mfactor * Qb_dVbs ; here->HSMHV_Qbulk_dTi = Mfactor * Qb_dT ; here->HSMHV_Qi = Mfactor * Qi ; here->HSMHV_Qi_dVgsi = Mfactor * Qi_dVgs ; here->HSMHV_Qi_dVdsi = Mfactor * Qi_dVds ; here->HSMHV_Qi_dVbsi = Mfactor * Qi_dVbs ; here->HSMHV_Qi_dTi = Mfactor * Qi_dT ; } else { /* QS */ here->HSMHV_qg = Mfactor * - (Qb + Qi) ; here->HSMHV_qd = Mfactor * Qd ; here->HSMHV_qs = Mfactor * ( Qi - Qd ) ; here->HSMHV_qdp = 0.0 ; here->HSMHV_qsp = 0.0 ; here->HSMHV_dqdp_dVdse = 0.0 ; here->HSMHV_dqdp_dVgse = 0.0 ; here->HSMHV_dqdp_dVbse = 0.0 ; here->HSMHV_dqdp_dTi = 0.0 ; here->HSMHV_dqsp_dVdse = 0.0 ; here->HSMHV_dqsp_dVgse = 0.0 ; here->HSMHV_dqsp_dVbse = 0.0 ; here->HSMHV_dqsp_dTi = 0.0 ; here->HSMHV_qgext = 0.0 ; here->HSMHV_qdext = 0.0 ; here->HSMHV_qsext = 0.0 ; here->HSMHV_dQdext_dVdse = 0.0 ; here->HSMHV_dQdext_dVgse = 0.0 ; here->HSMHV_dQdext_dVbse = 0.0 ; here->HSMHV_dQdext_dTi = 0.0 ; here->HSMHV_dQgext_dVdse = 0.0 ; here->HSMHV_dQgext_dVgse = 0.0 ; here->HSMHV_dQgext_dVbse = 0.0 ; here->HSMHV_dQgext_dTi = 0.0 ; here->HSMHV_dQbext_dVdse = 0.0 ; here->HSMHV_dQbext_dVgse = 0.0 ; here->HSMHV_dQbext_dVbse = 0.0 ; here->HSMHV_dQbext_dTi = 0.0 ; here->HSMHV_dQdi_dVdsi = Mfactor * Qd_dVds ; here->HSMHV_dQdi_dVgsi = Mfactor * Qd_dVgs ; here->HSMHV_dQdi_dVbsi = Mfactor * Qd_dVbs ; here->HSMHV_dQdi_dTi = Mfactor * Qd_dT ; here->HSMHV_dQg_dVdsi = Mfactor * ( - Qb_dVds - Qi_dVds ) ; here->HSMHV_dQg_dVgsi = Mfactor * ( - Qb_dVgs - Qi_dVgs ) ; here->HSMHV_dQg_dVbsi = Mfactor * ( - Qb_dVbs - Qi_dVbs ) ; here->HSMHV_dQg_dTi = Mfactor * ( - Qb_dT - Qi_dT ) ; here->HSMHV_dQb_dVdsi = Mfactor * Qb_dVds ; here->HSMHV_dQb_dVgsi = Mfactor * Qb_dVgs ; here->HSMHV_dQb_dVbsi = Mfactor * Qb_dVbs ; here->HSMHV_dQb_dTi = Mfactor * Qb_dT ; } /*---------------------------------------------------* * Add S/D overlap charges/capacitances to intrinsic ones. * - NOTE: This function depends on coadov, a control option. *-----------------*/ if ( model->HSMHV_coadov == 1 ) { here->HSMHV_qg += Mfactor * ( Qgod + Qgos + Qgbo + Qy - Qovd - Qovs ) ; here->HSMHV_qd += Mfactor * ( - Qgod - Qy + QbdLD ) ; here->HSMHV_qs += Mfactor * ( - Qgos + QbsLD ) ; here->HSMHV_qdp += Mfactor * ( - Qfd - Qgdo ) ; here->HSMHV_qsp += Mfactor * ( - Qfs - Qgso ) ; here->HSMHV_cddo = Mfactor * ( - Qgod_dVds - Qy_dVds + QbdLD_dVds ) ; here->HSMHV_dQdi_dVdsi += here->HSMHV_cddo ; here->HSMHV_cdgo = Mfactor * ( - Qgod_dVgs - Qy_dVgs + QbdLD_dVgs ) ; here->HSMHV_dQdi_dVgsi += here->HSMHV_cdgo ; here->HSMHV_cdbo = Mfactor * ( - Qgod_dVbs - Qy_dVbs + QbdLD_dVbs ) ; here->HSMHV_dQdi_dVbsi += here->HSMHV_cdbo ; here->HSMHV_dQdi_dTi += Mfactor * ( - Qgod_dT - Qy_dT + QbdLD_dT ) ; here->HSMHV_cgdo = Mfactor * ( Qgod_dVds + Qgos_dVds + Qgbo_dVds + Qy_dVds - Qovd_dVds - Qovs_dVds ) ; here->HSMHV_dQg_dVdsi += here->HSMHV_cgdo ; here->HSMHV_cggo = Mfactor * ( Qgod_dVgs + Qgos_dVgs + Qgbo_dVgs + Qy_dVgs - Qovd_dVgs - Qovs_dVgs ) ; here->HSMHV_dQg_dVgsi += here->HSMHV_cggo ; here->HSMHV_cgbo = Mfactor * ( Qgod_dVbs + Qgos_dVbs + Qgbo_dVbs + Qy_dVbs - Qovd_dVbs - Qovs_dVbs ) ; here->HSMHV_dQg_dVbsi += here->HSMHV_cgbo ; here->HSMHV_dQg_dTi += Mfactor * ( Qgod_dT + Qgos_dT + Qgbo_dT + Qy_dT - Qovd_dT - Qovs_dT ) ; here->HSMHV_cbdo = Mfactor * ( - Qgbo_dVds + QidLD_dVds + QisLD_dVds ) ; here->HSMHV_dQb_dVdsi += here->HSMHV_cbdo ; here->HSMHV_cbgo = Mfactor * ( - Qgbo_dVgs + QidLD_dVgs + QisLD_dVgs ) ; here->HSMHV_dQb_dVgsi += here->HSMHV_cbgo ; here->HSMHV_cbbo = Mfactor * ( - Qgbo_dVbs + QidLD_dVbs + QisLD_dVbs ) ; here->HSMHV_dQb_dVbsi += here->HSMHV_cbbo ; here->HSMHV_dQb_dTi += Mfactor * ( - Qgbo_dT + QidLD_dT + QisLD_dT ) ; /* for fringing capacitances */ here->HSMHV_dqdp_dVdse += Mfactor * ( Cfd - Qgdo_dVdse ) ; here->HSMHV_dqdp_dVgse += Mfactor * ( - Cfd - Qgdo_dVgse ) ; here->HSMHV_dqdp_dVbse += Mfactor * ( - Qgdo_dVbse ) ; here->HSMHV_dqdp_dTi += 0.0 ; here->HSMHV_dqsp_dVdse += Mfactor * ( - Qgso_dVdse ) ; here->HSMHV_dqsp_dVgse += Mfactor * ( - Cfs - Qgso_dVgse ) ; here->HSMHV_dqsp_dVbse += Mfactor * ( - Qgso_dVbse ) ; here->HSMHV_dqsp_dTi += 0.0 ; here->HSMHV_qgext += Mfactor * ( - Qovdext - Qovsext ) ; here->HSMHV_qdext += Mfactor * QbdLDext ; here->HSMHV_qsext += Mfactor * QbsLDext ; here->HSMHV_dQdext_dVdse += Mfactor * ( QbdLDext_dVdse ) ; here->HSMHV_dQdext_dVgse += Mfactor * ( QbdLDext_dVgse ) ; here->HSMHV_dQdext_dVbse += Mfactor * ( QbdLDext_dVbse ) ; here->HSMHV_dQdext_dTi += Mfactor * ( QbdLDext_dT ) ; here->HSMHV_dQgext_dVdse += Mfactor * ( - Qovdext_dVdse - Qovsext_dVdse ) ; here->HSMHV_dQgext_dVgse += Mfactor * ( - Qovdext_dVgse - Qovsext_dVgse ) ; here->HSMHV_dQgext_dVbse += Mfactor * ( - Qovdext_dVbse - Qovsext_dVbse ) ; here->HSMHV_dQgext_dTi += Mfactor * ( - Qovdext_dT - Qovsext_dT ) ; here->HSMHV_dQbext_dVdse += Mfactor * ( QidLDext_dVdse + QisLDext_dVdse ) ; here->HSMHV_dQbext_dVgse += Mfactor * ( QidLDext_dVgse + QisLDext_dVgse ) ; here->HSMHV_dQbext_dVbse += Mfactor * ( QidLDext_dVbse + QisLDext_dVbse ) ; here->HSMHV_dQbext_dTi += Mfactor * ( QidLDext_dT + QisLDext_dT ) ; } here->HSMHV_dQsi_dVdsi = - (here->HSMHV_dQdi_dVdsi + here->HSMHV_dQg_dVdsi + here->HSMHV_dQb_dVdsi) ; here->HSMHV_dQsi_dVgsi = - (here->HSMHV_dQdi_dVgsi + here->HSMHV_dQg_dVgsi + here->HSMHV_dQb_dVgsi) ; here->HSMHV_dQsi_dVbsi = - (here->HSMHV_dQdi_dVbsi + here->HSMHV_dQg_dVbsi + here->HSMHV_dQb_dVbsi) ; here->HSMHV_dQsi_dTi = - (here->HSMHV_dQdi_dTi + here->HSMHV_dQg_dTi + here->HSMHV_dQb_dTi ) ; here->HSMHV_dQsext_dVdse = - (here->HSMHV_dQdext_dVdse + here->HSMHV_dQgext_dVdse + here->HSMHV_dQbext_dVdse) ; here->HSMHV_dQsext_dVgse = - (here->HSMHV_dQdext_dVgse + here->HSMHV_dQgext_dVgse + here->HSMHV_dQbext_dVgse) ; here->HSMHV_dQsext_dVbse = - (here->HSMHV_dQdext_dVbse + here->HSMHV_dQgext_dVbse + here->HSMHV_dQbext_dVbse) ; here->HSMHV_dQsext_dTi = - (here->HSMHV_dQdext_dTi + here->HSMHV_dQgext_dTi + here->HSMHV_dQbext_dTi ) ; /*---------------------------------------------------* * Substrate/gate/leak currents. *-----------------*/ here->HSMHV_isub = Mfactor * Isub ; here->HSMHV_dIsub_dVdsi = Mfactor * Isub_dVds ; here->HSMHV_dIsub_dVgsi = Mfactor * Isub_dVgs ; here->HSMHV_dIsub_dVbsi = Mfactor * Isub_dVbs ; here->HSMHV_dIsub_dTi = Mfactor * Isub_dT ; here->HSMHV_dIsub_dVdse = Mfactor * Isub_dVdse ; here->HSMHV_igb = Mfactor * -Igb ; here->HSMHV_dIgb_dVdsi = - Mfactor * Igb_dVds ; here->HSMHV_dIgb_dVgsi = - Mfactor * Igb_dVgs ; here->HSMHV_dIgb_dVbsi = - Mfactor * Igb_dVbs ; here->HSMHV_dIgb_dTi = - Mfactor * Igb_dT ; if (here->HSMHV_mode == HiSIM_NORMAL_MODE) { here->HSMHV_igd = Mfactor * ( model->HSMHV_glpart1 * Igate - Igd ) ; } else { here->HSMHV_igd = Mfactor * ( (1.0e0 - model->HSMHV_glpart1 ) * Igate - Igs ) ; } if (here->HSMHV_mode == HiSIM_NORMAL_MODE) { here->HSMHV_igs = Mfactor * ( (1.0e0 - model->HSMHV_glpart1) * Igate - Igs ) ; } else { here->HSMHV_igs = Mfactor * ( model->HSMHV_glpart1 * Igate - Igd ) ; } /* note: here->HSMHV_igd and here->HSMHV_igs are already subjected to mode handling, while the following derivatives here->HSMHV_dIgd_dVdsi, ... are not! */ here->HSMHV_dIgd_dVdsi = Mfactor * ( model->HSMHV_glpart1 * Igate_dVds - Igd_dVds ) ; here->HSMHV_dIgd_dVgsi = Mfactor * ( model->HSMHV_glpart1 * Igate_dVgs - Igd_dVgs ) ; here->HSMHV_dIgd_dVbsi = Mfactor * ( model->HSMHV_glpart1 * Igate_dVbs - Igd_dVbs ) ; here->HSMHV_dIgd_dTi = Mfactor * ( model->HSMHV_glpart1 * Igate_dT - Igd_dT ) ; here->HSMHV_dIgs_dVdsi = Mfactor * ( (1.0 - model->HSMHV_glpart1) * Igate_dVds - Igs_dVds ) ; here->HSMHV_dIgs_dVgsi = Mfactor * ( (1.0 - model->HSMHV_glpart1) * Igate_dVgs - Igs_dVgs ) ; here->HSMHV_dIgs_dVbsi = Mfactor * ( (1.0 - model->HSMHV_glpart1) * Igate_dVbs - Igs_dVbs ) ; here->HSMHV_dIgs_dTi = Mfactor * ( (1.0 - model->HSMHV_glpart1) * Igate_dT - Igs_dT ) ; here->HSMHV_igidl = Mfactor * Igidl ; here->HSMHV_dIgidl_dVdsi = Mfactor * Igidl_dVds ; here->HSMHV_dIgidl_dVgsi = Mfactor * Igidl_dVgs ; here->HSMHV_dIgidl_dVbsi = Mfactor * Igidl_dVbs ; here->HSMHV_dIgidl_dTi = Mfactor * Igidl_dT ; here->HSMHV_igisl = Mfactor * Igisl ; here->HSMHV_dIgisl_dVdsi = Mfactor * Igisl_dVds ; here->HSMHV_dIgisl_dVgsi = Mfactor * Igisl_dVgs ; here->HSMHV_dIgisl_dVbsi = Mfactor * Igisl_dVbs ; here->HSMHV_dIgisl_dTi = Mfactor * Igisl_dT ; /*---------------------------------------------------* * Von, Vdsat. *-----------------*/ here->HSMHV_von = Vth ; here->HSMHV_vdsat = Vdsat ; /*---------------------------------------------------* * Junction diode. *-----------------*/ here->HSMHV_ibs = Mfactor * Ibs ; here->HSMHV_ibd = Mfactor * Ibd ; here->HSMHV_gbs = Mfactor * Gbse ; here->HSMHV_gbd = Mfactor * Gbde ; *(ckt->CKTstate0 + here->HSMHVqbs) = Mfactor * Qbs ; *(ckt->CKTstate0 + here->HSMHVqbd) = Mfactor * Qbd ; here->HSMHV_capbs = Mfactor * Capbse ; here->HSMHV_capbd = Mfactor * Capbde ; here->HSMHV_gbdT = Mfactor * Ibd_dT ; here->HSMHV_gbsT = Mfactor * Ibs_dT ; here->HSMHV_gcbdT = Mfactor * Qbd_dT ; here->HSMHV_gcbsT = Mfactor * Qbs_dT ; /*---------------------------------------------------* * Add Gjmin (gmin). *-----------------*/ here->HSMHV_ibs += Mfactor * Gjmin * vbs_jct ; here->HSMHV_ibd += Mfactor * Gjmin * vbd_jct ; here->HSMHV_gbs += Mfactor * Gjmin ; here->HSMHV_gbd += Mfactor * Gjmin ; /*-----------------------------------------------------------* * Warn floating-point exceptions. * - Function finite() in libm is called. * - Go to start with info==5. *-----------------*/ T1 = here->HSMHV_ids + here->HSMHV_dIds_dVdsi + here->HSMHV_dIds_dVgsi + here->HSMHV_dIds_dVbsi ; T1 = T1 + here->HSMHV_qd - (here->HSMHV_dQdi_dVdsi + here->HSMHV_dQdi_dVgsi + here->HSMHV_dQdi_dVbsi) ; if ( ! finite (T1) ) { flg_err = 1 ; fprintf (stderr , "*** warning(HiSIM_HV): FP-exception (PART-1)\n" ) ; if ( flg_info >= 1 ) { printf ( "*** warning(HiSIM_HV): FP-exception\n") ; printf ( "Ids = %e\n" , here->HSMHV_ids ) ; printf ( "Gmbs = %e\n" , here->HSMHV_dIds_dVbsi ) ; printf ( "Gds = %e\n" , here->HSMHV_dIds_dVdsi ) ; printf ( "Gm = %e\n" , here->HSMHV_dIds_dVgsi ) ; printf ( "Qd = %e\n" , here->HSMHV_qd ) ; printf ( "Cds = %e\n" , -(here->HSMHV_dQdi_dVdsi + here->HSMHV_dQdi_dVgsi + here->HSMHV_dQdi_dVbsi) ) ; } } T1 = here->HSMHV_isub + here->HSMHV_dIsub_dVbsi + here->HSMHV_dIsub_dVdsi + here->HSMHV_dIsub_dVgsi ; if ( ! finite (T1) ) { flg_err = 1 ; fprintf (stderr , "*** warning(HiSIM_HV): FP-exception (PART-2)\n") ; if ( flg_info >= 1 ) { printf ("*** warning(HiSIM_HV): FP-exception\n") ; } } T1 = here->HSMHV_dQg_dVdsi + here->HSMHV_dQg_dVgsi + here->HSMHV_dQg_dVbsi ; if ( ! finite (T1) ) { flg_err = 1 ; fprintf(stderr , "*** warning(HiSIM_HV): FP-exception (PART-3)\n") ; if ( flg_info >= 1 ) { printf ("*** warning(HiSIM_HV): FP-exception\n") ; } } T1 = here->HSMHV_ibs + here->HSMHV_ibd + here->HSMHV_gbs + here->HSMHV_gbd ; T1 = T1 + *(ckt->CKTstate0 + here->HSMHVqbs) + *(ckt->CKTstate0 + here->HSMHVqbd) + here->HSMHV_capbs + here->HSMHV_capbd ; if ( ! finite (T1) ) { flg_err = 1 ; fprintf(stderr , "*** warning(HiSIM_HV): FP-exception (PART-4)\n") ; if ( flg_info >= 1 ) { printf ("*** warning(HiSIM_HV): FP-exception\n") ; } } /*-----------------------------------------------------------* * Exit for error case. *-----------------*/ if ( flg_err != 0 ) { fprintf (stderr , "----- bias information (HiSIM_HV)\n" ) ; fprintf (stderr , "name: %s\n" , here->HSMHVname ) ; fprintf (stderr , "states: %d\n" , here->HSMHVstates ) ; fprintf (stderr , "Vdse= %.3e Vgse=%.3e Vbse=%.3e\n" , Vdse , Vgse , Vbse ) ; fprintf (stderr , "Vdsi= %.3e Vgsi=%.3e Vbsi=%.3e\n" , Vds , Vgs , Vbs ) ; fprintf (stderr , "vbs_jct= %12.5e vbd_jct= %12.5e\n" , vbs_jct , vbd_jct ) ; fprintf (stderr , "vd= %.3e vs= %.3e vdp= %.3e vgp= %.3e vbp= %.3e vsp= %.3e\n" , *( ckt->CKTrhsOld + here->HSMHVdNode ) , *( ckt->CKTrhsOld + here->HSMHVsNode ) , *( ckt->CKTrhsOld + here->HSMHVdNodePrime ) , *( ckt->CKTrhsOld + here->HSMHVgNodePrime ) , *( ckt->CKTrhsOld + here->HSMHVbNodePrime ) , *( ckt->CKTrhsOld + here->HSMHVsNodePrime ) ) ; fprintf (stderr , "----- bias information (end)\n" ) ; return ( HiSIM_ERROR ) ; } /*-----------------------------------------------------------* * Noise. *-----------------*/ here->HSMHV_noiflick = Mfactor * Nflic ; here->HSMHV_noithrml = Mfactor * Nthrml ; /*----------------------------------------------------------* * induced gate noise. ( Part 3/3 ) *----------------------*/ if ( model->HSMHV_coign != 0 && model->HSMHV_cothrml != 0 && flg_ign == 1 && !flg_noqi ) { T0 = Cox_small * Cox * here->HSMHV_weff_nf * Leff ; T1 = -( here->HSMHV_dQg_dVdsi + here->HSMHV_dQg_dVgsi + here->HSMHV_dQg_dVbsi ) / Mfactor ; /* NQS case is not supported. */ if( - T1 > T0 ){ Nign0 = c_16o135 * C_QE * beta_inv * T1 * T1 / gds0_ign ; if ( kusai00L > epsm10 && Vds > epsm10 ) { MuModA = Muun / Mu ; MuModB = ( Muun / Mud_hoso - MuModA ) / Vds ; correct_w1 = MuModA + C_2o3 * MuModB * ( kusai00 + VgVt * sqrtkusaiL + kusaiL ) / ( VgVt + sqrtkusaiL ) ; } else { correct_w1 = Muun / Mud_hoso ; } here->HSMHV_noiigate = Mfactor * Nign0 * kusai_ig * correct_w1 ; here->HSMHV_noicross = crl_f ; if ( here->HSMHV_noiigate < 0.0 ) here->HSMHV_noiigate = 0.0e0 ; }else{ here->HSMHV_noiigate = 0.0e0 ; here->HSMHV_noicross = 0.0e0 ; } }else{ here->HSMHV_noiigate = 0.0e0 ; here->HSMHV_noicross = 0.0e0 ; } /*-----------------------------------------------------------* * Store values for next calculation. *-----------------*/ /* Internal biases */ if ( here->HSMHV_called >= 1 ) { here->HSMHV_vbsc_prv2 = here->HSMHV_vbsc_prv ; here->HSMHV_vdsc_prv2 = here->HSMHV_vdsc_prv ; here->HSMHV_vgsc_prv2 = here->HSMHV_vgsc_prv ; here->HSMHV_mode_prv2 = here->HSMHV_mode_prv ; } here->HSMHV_vbsc_prv = Vbs ; here->HSMHV_vdsc_prv = Vds ; here->HSMHV_vgsc_prv = Vgs ; here->HSMHV_mode_prv = here->HSMHV_mode ; here->HSMHV_temp_prv = TTEMP ; /* Surface potentials and derivatives w.r.t. internal biases */ if ( here->HSMHV_called >= 1 ) { here->HSMHV_ps0_prv2 = here->HSMHV_ps0_prv ; here->HSMHV_ps0_dvbs_prv2 = here->HSMHV_ps0_dvbs_prv ; here->HSMHV_ps0_dvds_prv2 = here->HSMHV_ps0_dvds_prv ; here->HSMHV_ps0_dvgs_prv2 = here->HSMHV_ps0_dvgs_prv ; here->HSMHV_pds_prv2 = here->HSMHV_pds_prv ; here->HSMHV_pds_dvbs_prv2 = here->HSMHV_pds_dvbs_prv ; here->HSMHV_pds_dvds_prv2 = here->HSMHV_pds_dvds_prv ; here->HSMHV_pds_dvgs_prv2 = here->HSMHV_pds_dvgs_prv ; } here->HSMHV_ps0_prv = Ps0 ; here->HSMHV_ps0_dvbs_prv = Ps0_dVbs ; here->HSMHV_ps0_dvds_prv = Ps0_dVds ; here->HSMHV_ps0_dvgs_prv = Ps0_dVgs ; here->HSMHV_ps0_dtemp_prv = Ps0_dT ; here->HSMHV_pds_prv = Pds ; here->HSMHV_pds_dvbs_prv = Pds_dVbs ; here->HSMHV_pds_dvds_prv = Pds_dVds ; here->HSMHV_pds_dvgs_prv = Pds_dVgs ; here->HSMHV_pds_dtemp_prv = Pds_dT ; /* derivatives of channel current w.r.t. external bias (only due to Ra-dependencies!) */ here->HSMHV_dIds_dVdse = Ids_dRa * Ra_dVdse * Mfactor ; here->HSMHV_dIds_dVgse = Ids_dRa * Ra_dVgse * Mfactor ; here->HSMHV_dIds_dVbse = Ids_dRa * Ra_dVbse * Mfactor ; if ( VdseModeNML > 0.0 ) { here->HSMHV_Rd = Rd / Mfactor ; here->HSMHV_dRd_dVdse = Rd_dVdse / Mfactor ; here->HSMHV_dRd_dVgse = Rd_dVgse / Mfactor ; here->HSMHV_dRd_dVbse = Rd_dVbse / Mfactor ; here->HSMHV_dRd_dVsubs = Rd_dVsubs / Mfactor ; here->HSMHV_dRd_dTi = Rd_dT / Mfactor ; here->HSMHV_Rs = Rs / Mfactor ; here->HSMHV_dRs_dVdse = Rs_dVdse / Mfactor ; here->HSMHV_dRs_dVgse = Rs_dVgse / Mfactor ; here->HSMHV_dRs_dVbse = Rs_dVbse / Mfactor ; here->HSMHV_dRs_dVsubs = Rs_dVsubs / Mfactor ; here->HSMHV_dRs_dTi = Rs_dT / Mfactor ; } else { here->HSMHV_Rd = Rs / Mfactor ; here->HSMHV_dRd_dVdse = - ( Rs_dVdse + Rs_dVgse + Rs_dVbse + Rs_dVsubs ) / Mfactor ; here->HSMHV_dRd_dVgse = Rs_dVgse / Mfactor ; here->HSMHV_dRd_dVbse = Rs_dVbse / Mfactor ; here->HSMHV_dRd_dVsubs = Rs_dVsubs / Mfactor ; here->HSMHV_dRd_dTi = Rs_dT / Mfactor ; here->HSMHV_Rs = Rd / Mfactor ; here->HSMHV_dRs_dVdse = - ( Rd_dVdse + Rd_dVgse + Rd_dVbse + Rd_dVsubs ) / Mfactor ; here->HSMHV_dRs_dVgse = Rd_dVgse / Mfactor ; here->HSMHV_dRs_dVbse = Rd_dVbse / Mfactor ; here->HSMHV_dRs_dVsubs = Rd_dVsubs / Mfactor ; here->HSMHV_dRs_dTi = Rd_dT / Mfactor ; } /* Clamping to Res_min */ if(here->HSMHV_Rd < Res_min) { here->HSMHV_Rd = Res_min ; here->HSMHV_dRd_dVdse = 0.0 ; here->HSMHV_dRd_dVgse = 0.0 ; here->HSMHV_dRd_dVbse = 0.0 ; here->HSMHV_dRd_dVsubs = 0.0 ; here->HSMHV_dRd_dTi = 0.0 ; } if(here->HSMHV_Rs < Res_min) { here->HSMHV_Rs = Res_min ; here->HSMHV_dRs_dVdse = 0.0 ; here->HSMHV_dRs_dVgse = 0.0 ; here->HSMHV_dRs_dVbse = 0.0 ; here->HSMHV_dRs_dVsubs = 0.0 ; here->HSMHV_dRs_dTi = 0.0 ; } /*-----------------------------------------------------------* * End of PART-7. (label) *-----------------*/ /* end_of_part_7: */ /*-----------------------------------------------------------* * Bottom of hsmhveval. *-----------------*/ return ( HiSIM_OK ) ; } /* end of hsmhveval */ tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhvpar.c0000644000175000017500000001303013546075722022704 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2012 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 1 SUBVERSION : 2 REVISION : 4 ) Model Parameter VERSION : 1.23 FILE : hsmhvpar.c DATE : 2013.04.30 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "hsmhvdef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/fteext.h" int HSMHVparam( int param, IFvalue *value, GENinstance *inst, IFvalue *select) { double scale; HSMHVinstance *here = (HSMHVinstance*)inst; NG_IGNORE(select); if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; switch (param) { case HSMHV_COSELFHEAT: here->HSMHV_coselfheat = value->iValue; here->HSMHV_coselfheat_Given = TRUE; break; case HSMHV_COSUBNODE: here->HSMHV_cosubnode = value->iValue; here->HSMHV_cosubnode_Given = TRUE; break; case HSMHV_W: here->HSMHV_w = value->rValue * scale; here->HSMHV_w_Given = TRUE; break; case HSMHV_L: here->HSMHV_l = value->rValue * scale; here->HSMHV_l_Given = TRUE; break; case HSMHV_AS: here->HSMHV_as = value->rValue * scale * scale; here->HSMHV_as_Given = TRUE; break; case HSMHV_AD: here->HSMHV_ad = value->rValue * scale * scale; here->HSMHV_ad_Given = TRUE; break; case HSMHV_PS: here->HSMHV_ps = value->rValue * scale; here->HSMHV_ps_Given = TRUE; break; case HSMHV_PD: here->HSMHV_pd = value->rValue * scale; here->HSMHV_pd_Given = TRUE; break; case HSMHV_NRS: here->HSMHV_nrs = value->rValue; here->HSMHV_nrs_Given = TRUE; break; case HSMHV_NRD: here->HSMHV_nrd = value->rValue; here->HSMHV_nrd_Given = TRUE; break; case HSMHV_DTEMP: here->HSMHV_dtemp = value->rValue; here->HSMHV_dtemp_Given = TRUE; break; case HSMHV_OFF: here->HSMHV_off = value->iValue; break; case HSMHV_IC_VBS: here->HSMHV_icVBS = value->rValue; here->HSMHV_icVBS_Given = TRUE; break; case HSMHV_IC_VDS: here->HSMHV_icVDS = value->rValue; here->HSMHV_icVDS_Given = TRUE; break; case HSMHV_IC_VGS: here->HSMHV_icVGS = value->rValue; here->HSMHV_icVGS_Given = TRUE; break; case HSMHV_IC: switch (value->v.numValue) { case 3: here->HSMHV_icVBS = *(value->v.vec.rVec + 2); here->HSMHV_icVBS_Given = TRUE; case 2: here->HSMHV_icVGS = *(value->v.vec.rVec + 1); here->HSMHV_icVGS_Given = TRUE; case 1: here->HSMHV_icVDS = *(value->v.vec.rVec); here->HSMHV_icVDS_Given = TRUE; break; default: return(E_BADPARM); } break; case HSMHV_CORBNET: here->HSMHV_corbnet = value->iValue; here->HSMHV_corbnet_Given = TRUE; break; case HSMHV_RBPB: here->HSMHV_rbpb = value->rValue; here->HSMHV_rbpb_Given = TRUE; break; case HSMHV_RBPD: here->HSMHV_rbpd = value->rValue; here->HSMHV_rbpd_Given = TRUE; break; case HSMHV_RBPS: here->HSMHV_rbps = value->rValue; here->HSMHV_rbps_Given = TRUE; break; case HSMHV_RBDB: here->HSMHV_rbdb = value->rValue; here->HSMHV_rbdb_Given = TRUE; break; case HSMHV_RBSB: here->HSMHV_rbsb = value->rValue; here->HSMHV_rbsb_Given = TRUE; break; case HSMHV_CORG: here->HSMHV_corg = value->iValue; here->HSMHV_corg_Given = TRUE; break; case HSMHV_NGCON: here->HSMHV_ngcon = value->rValue; here->HSMHV_ngcon_Given = TRUE; break; case HSMHV_XGW: here->HSMHV_xgw = value->rValue; here->HSMHV_xgw_Given = TRUE; break; case HSMHV_XGL: here->HSMHV_xgl = value->rValue; here->HSMHV_xgl_Given = TRUE; break; case HSMHV_NF: here->HSMHV_nf = value->rValue; here->HSMHV_nf_Given = TRUE; break; case HSMHV_SA: here->HSMHV_sa = value->rValue; here->HSMHV_sa_Given = TRUE; break; case HSMHV_SB: here->HSMHV_sb = value->rValue; here->HSMHV_sb_Given = TRUE; break; case HSMHV_SD: here->HSMHV_sd = value->rValue; here->HSMHV_sd_Given = TRUE; break; case HSMHV_NSUBCDFM: here->HSMHV_nsubcdfm = value->rValue; here->HSMHV_nsubcdfm_Given = TRUE; break; case HSMHV_M: here->HSMHV_m = value->rValue; here->HSMHV_m_Given = TRUE; break; case HSMHV_SUBLD1: here->HSMHV_subld1 = value->rValue; here->HSMHV_subld1_Given = TRUE; break; case HSMHV_SUBLD2: here->HSMHV_subld2 = value->rValue; here->HSMHV_subld2_Given = TRUE; break; case HSMHV_LOVER: here->HSMHV_lover = value->rValue; here->HSMHV_lover_Given = TRUE; break; case HSMHV_LOVERS: here->HSMHV_lovers = value->rValue; here->HSMHV_lovers_Given = TRUE; break; case HSMHV_LOVERLD: here->HSMHV_loverld = value->rValue; here->HSMHV_loverld_Given = TRUE; break; case HSMHV_LDRIFT1: here->HSMHV_ldrift1 = value->rValue; here->HSMHV_ldrift1_Given = TRUE; break; case HSMHV_LDRIFT2: here->HSMHV_ldrift2 = value->rValue; here->HSMHV_ldrift2_Given = TRUE; break; case HSMHV_LDRIFT1S: here->HSMHV_ldrift1s = value->rValue; here->HSMHV_ldrift1s_Given = TRUE; break; case HSMHV_LDRIFT2S: here->HSMHV_ldrift2s = value->rValue; here->HSMHV_ldrift2s_Given = TRUE; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhvask.c0000644000175000017500000003341313546075722022707 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2012 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 1 SUBVERSION : 2 REVISION : 4 ) Model Parameter VERSION : 1.23 FILE : hsmhvask.c DATE : 2013.04.30 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "hsmhvdef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HSMHVask( CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { HSMHVinstance *here = (HSMHVinstance*)inst; int flg_nqs ; double cggb_nqs, cgdb_nqs, cgsb_nqs, cdgb_nqs, cddb_nqs, cdsb_nqs, cbgb_nqs, cbdb_nqs, cbsb_nqs ; double Qi_nqs, dQi_nqs_dVds, dQi_nqs_dVgs, dQi_nqs_dVbs, dQb_nqs_dVds, dQb_nqs_dVgs, dQb_nqs_dVbs ; double Qdrat, dQdrat_dVds, dQdrat_dVgs, dQdrat_dVbs, dQi_dVds, dQi_dVgs, dQi_dVbs, dQbulk_dVds, dQbulk_dVgs, dQbulk_dVbs ; double dQd_nqs_dVds, dQd_nqs_dVgs, dQd_nqs_dVbs, dQd_nqs_dQi_nqs ; double dQg_nqs_dQi_nqs, dQg_nqs_dQb_nqs ; NG_IGNORE(select); here->HSMHV_csdo = - (here->HSMHV_cddo + here->HSMHV_cgdo + here->HSMHV_cbdo) ; here->HSMHV_csgo = - (here->HSMHV_cdgo + here->HSMHV_cggo + here->HSMHV_cbgo) ; here->HSMHV_csbo = - (here->HSMHV_cdbo + here->HSMHV_cgbo + here->HSMHV_cbbo) ; here->HSMHV_cdso = - (here->HSMHV_cddo + here->HSMHV_cdgo + here->HSMHV_cdbo) ; here->HSMHV_cgso = - (here->HSMHV_cgdo + here->HSMHV_cggo + here->HSMHV_cgbo) ; here->HSMHV_csso = - (here->HSMHV_csdo + here->HSMHV_csgo + here->HSMHV_csbo) ; /* NQS? */ if (here->HSMHVQIqiPtr == NULL) { flg_nqs = 0 ; } else { flg_nqs = 1 ; } /* printf("HSMHVask: flg_nqs = %d\n", flg_nqs) ; */ if (flg_nqs) { /* collect data for NQS case (DC operating point only!) */ Qi_nqs = *(ckt->CKTstate0 + here->HSMHVqi_nqs) ; if ( here->HSMHV_mode > 0 ) { /* forward mode */ Qdrat = here->HSMHV_Xd ; dQdrat_dVds = here->HSMHV_Xd_dVdsi ; dQdrat_dVgs = here->HSMHV_Xd_dVgsi ; dQdrat_dVbs = here->HSMHV_Xd_dVbsi ; dQi_dVds = here->HSMHV_Qi_dVdsi ; dQi_dVgs = here->HSMHV_Qi_dVgsi ; dQi_dVbs = here->HSMHV_Qi_dVbsi ; dQbulk_dVds = here->HSMHV_Qbulk_dVdsi ; dQbulk_dVgs = here->HSMHV_Qbulk_dVgsi ; dQbulk_dVbs = here->HSMHV_Qbulk_dVbsi ; } else { /* reverse mode */ Qdrat = 1.0 - here->HSMHV_Xd ; dQdrat_dVds = +(here->HSMHV_Xd_dVdsi + here->HSMHV_Xd_dVgsi + here->HSMHV_Xd_dVbsi) ; dQdrat_dVgs = - here->HSMHV_Xd_dVgsi ; dQdrat_dVbs = - here->HSMHV_Xd_dVbsi ; dQi_dVds = -(here->HSMHV_Qi_dVdsi + here->HSMHV_Qi_dVgsi + here->HSMHV_Qi_dVbsi) ; dQi_dVgs = here->HSMHV_Qi_dVgsi ; dQi_dVbs = here->HSMHV_Qi_dVbsi ; dQbulk_dVds = -(here->HSMHV_Qbulk_dVdsi + here->HSMHV_Qbulk_dVgsi + here->HSMHV_Qbulk_dVbsi) ; dQbulk_dVgs = here->HSMHV_Qbulk_dVgsi ; dQbulk_dVbs = here->HSMHV_Qbulk_dVbsi ; } /* from Qg_nqs = - Qi_nqs - Qb_nqs: */ dQg_nqs_dQi_nqs = - 1.0 ; dQg_nqs_dQb_nqs = - 1.0 ; /* from Qd_nqs = Qi_nqs * Qdrat: */ dQd_nqs_dVds = Qi_nqs * dQdrat_dVds ; dQd_nqs_dVgs = Qi_nqs * dQdrat_dVgs ; dQd_nqs_dVbs = Qi_nqs * dQdrat_dVbs ; dQd_nqs_dQi_nqs = Qdrat ; /* by implicit differentiation of the NQS equations (DC operating point only!): */ dQi_nqs_dVds = dQi_dVds ; dQi_nqs_dVgs = dQi_dVgs ; dQi_nqs_dVbs = dQi_dVbs ; dQb_nqs_dVds = dQbulk_dVds ; dQb_nqs_dVgs = dQbulk_dVgs ; dQb_nqs_dVbs = dQbulk_dVbs ; cggb_nqs = dQg_nqs_dQi_nqs * dQi_nqs_dVgs + dQg_nqs_dQb_nqs * dQb_nqs_dVgs ; cgdb_nqs = dQg_nqs_dQi_nqs * dQi_nqs_dVds + dQg_nqs_dQb_nqs * dQb_nqs_dVds ; cgsb_nqs = - dQg_nqs_dQi_nqs * (dQi_nqs_dVds + dQi_nqs_dVgs + dQi_nqs_dVbs) - dQg_nqs_dQb_nqs * (dQb_nqs_dVds + dQb_nqs_dVgs + dQb_nqs_dVbs) ; cdgb_nqs = dQd_nqs_dVgs + dQd_nqs_dQi_nqs * dQi_nqs_dVgs ; cddb_nqs = dQd_nqs_dVds + dQd_nqs_dQi_nqs * dQi_nqs_dVds ; cdsb_nqs = -(dQd_nqs_dVds + dQd_nqs_dVgs + dQd_nqs_dVbs) - dQd_nqs_dQi_nqs * (dQi_nqs_dVds + dQi_nqs_dVgs + dQi_nqs_dVbs) ; cbgb_nqs = dQb_nqs_dVgs ; cbdb_nqs = dQb_nqs_dVds ; cbsb_nqs = -(dQb_nqs_dVds + dQb_nqs_dVgs + dQb_nqs_dVbs) ; } else { /* QS case */ cggb_nqs = cgdb_nqs = cgsb_nqs = cdgb_nqs = cddb_nqs = cdsb_nqs = cbgb_nqs = cbdb_nqs = cbsb_nqs = 0.0 ; } switch (which) { case HSMHV_COSELFHEAT: value->iValue = here->HSMHV_coselfheat; return(OK); case HSMHV_COSUBNODE: value->iValue = here->HSMHV_cosubnode; return(OK); case HSMHV_L: value->rValue = here->HSMHV_l; return(OK); case HSMHV_W: value->rValue = here->HSMHV_w; return(OK); case HSMHV_AS: value->rValue = here->HSMHV_as; return(OK); case HSMHV_AD: value->rValue = here->HSMHV_ad; return(OK); case HSMHV_PS: value->rValue = here->HSMHV_ps; return(OK); case HSMHV_PD: value->rValue = here->HSMHV_pd; return(OK); case HSMHV_NRS: value->rValue = here->HSMHV_nrs; return(OK); case HSMHV_NRD: value->rValue = here->HSMHV_nrd; return(OK); case HSMHV_DTEMP: value->rValue = here->HSMHV_dtemp; return(OK); case HSMHV_OFF: value->iValue = here->HSMHV_off; return(OK); case HSMHV_IC_VBS: value->rValue = here->HSMHV_icVBS; return(OK); case HSMHV_IC_VDS: value->rValue = here->HSMHV_icVDS; return(OK); case HSMHV_IC_VGS: value->rValue = here->HSMHV_icVGS; return(OK); case HSMHV_DNODE: value->iValue = here->HSMHVdNode; return(OK); case HSMHV_GNODE: value->iValue = here->HSMHVgNode; return(OK); case HSMHV_SNODE: value->iValue = here->HSMHVsNode; return(OK); case HSMHV_BNODE: value->iValue = here->HSMHVbNode; return(OK); case HSMHV_DNODEPRIME: value->iValue = here->HSMHVdNodePrime; return(OK); case HSMHV_SNODEPRIME: value->iValue = here->HSMHVsNodePrime; return(OK); case HSMHV_SOURCECONDUCT: value->rValue = here->HSMHVsourceConductance; return(OK); case HSMHV_DRAINCONDUCT: value->rValue = here->HSMHVdrainConductance; return(OK); case HSMHV_VBD: value->rValue = *(ckt->CKTstate0 + here->HSMHVvbd); return(OK); case HSMHV_VBS: value->rValue = *(ckt->CKTstate0 + here->HSMHVvbs); return(OK); case HSMHV_VGS: value->rValue = *(ckt->CKTstate0 + here->HSMHVvgs); return(OK); case HSMHV_VDS: value->rValue = *(ckt->CKTstate0 + here->HSMHVvds); return(OK); case HSMHV_CD: value->rValue = here->HSMHV_ids; return(OK); case HSMHV_ISUB: value->rValue = here->HSMHV_isub; return(OK); case HSMHV_IGIDL: value->rValue = here->HSMHV_igidl; return(OK); case HSMHV_IGISL: value->rValue = here->HSMHV_igisl; return(OK); case HSMHV_IGD: value->rValue = here->HSMHV_igd; return(OK); case HSMHV_IGS: value->rValue = here->HSMHV_igs; return(OK); case HSMHV_IGB: value->rValue = here->HSMHV_igb; return(OK); case HSMHV_CBS: value->rValue = here->HSMHV_ibs; return(OK); case HSMHV_CBD: value->rValue = here->HSMHV_ibd; return(OK); case HSMHV_GM: value->rValue = here->HSMHV_dIds_dVgsi; return(OK); case HSMHV_GMT: value->rValue = here->HSMHV_dIds_dTi; return(OK); case HSMHV_GDS: value->rValue = here->HSMHV_dIds_dVdsi; return(OK); case HSMHV_GMBS: value->rValue = here->HSMHV_dIds_dVbsi; return(OK); case HSMHV_GBD: value->rValue = here->HSMHV_gbd; return(OK); case HSMHV_GBS: value->rValue = here->HSMHV_gbs; return(OK); case HSMHV_QB: value->rValue = *(ckt->CKTstate0 + here->HSMHVqb); return(OK); case HSMHV_CQB: value->rValue = *(ckt->CKTstate0 + here->HSMHVcqb); return(OK); case HSMHV_QG: value->rValue = *(ckt->CKTstate0 + here->HSMHVqg); return(OK); case HSMHV_CQG: value->rValue = *(ckt->CKTstate0 + here->HSMHVcqg); return(OK); case HSMHV_QD: value->rValue = *(ckt->CKTstate0 + here->HSMHVqd); return(OK); case HSMHV_CQD: value->rValue = *(ckt->CKTstate0 + here->HSMHVcqd); return(OK); case HSMHV_CGG: value->rValue = here->HSMHV_dQg_dVgsi - here->HSMHV_cggo; if (flg_nqs) value->rValue += cggb_nqs; return(OK); case HSMHV_CGD: value->rValue = (here->HSMHV_mode > 0) ? here->HSMHV_dQg_dVdsi - here->HSMHV_cgdo : - (here->HSMHV_dQg_dVdsi + here->HSMHV_dQg_dVgsi + here->HSMHV_dQg_dVbsi) - here->HSMHV_cgso; if (flg_nqs) value->rValue += cgdb_nqs; return(OK); case HSMHV_CGS: value->rValue = (here->HSMHV_mode > 0) ? - (here->HSMHV_dQg_dVdsi + here->HSMHV_dQg_dVgsi + here->HSMHV_dQg_dVbsi) - here->HSMHV_cgso : here->HSMHV_dQg_dVdsi - here->HSMHV_cgdo; if (flg_nqs) value->rValue += cgsb_nqs; return(OK); case HSMHV_CDG: value->rValue = (here->HSMHV_mode > 0) ? here->HSMHV_dQdi_dVgsi - here->HSMHV_cdgo : here->HSMHV_dQsi_dVgsi - here->HSMHV_csgo; if (flg_nqs) value->rValue += cdgb_nqs; return(OK); case HSMHV_CDD: value->rValue = (here->HSMHV_mode > 0) ? here->HSMHV_dQdi_dVdsi - here->HSMHV_cddo : - (here->HSMHV_dQsi_dVdsi + here->HSMHV_dQsi_dVgsi + here->HSMHV_dQsi_dVbsi) - here->HSMHV_csso; if (flg_nqs) value->rValue += cddb_nqs; return(OK); case HSMHV_CDS: value->rValue = (here->HSMHV_mode > 0) ? - (here->HSMHV_dQdi_dVdsi + here->HSMHV_dQdi_dVgsi + here->HSMHV_dQdi_dVbsi) - here->HSMHV_cdso : here->HSMHV_dQsi_dVdsi - here->HSMHV_csdo; if (flg_nqs) value->rValue += cdsb_nqs; return(OK); case HSMHV_CBG: value->rValue = here->HSMHV_dQb_dVgsi - here->HSMHV_cbgo; if (flg_nqs) value->rValue += cbgb_nqs; return(OK); case HSMHV_CBDB: value->rValue = (here->HSMHV_mode > 0) ? here->HSMHV_dQb_dVdsi - here->HSMHV_cbdo : - (here->HSMHV_dQb_dVdsi + here->HSMHV_dQb_dVgsi + here->HSMHV_dQb_dVbsi) + (here->HSMHV_cbdo+here->HSMHV_cbgo+here->HSMHV_cbbo); if (flg_nqs) value->rValue += cbdb_nqs; return(OK); case HSMHV_CBSB: value->rValue = (here->HSMHV_mode > 0) ? - (here->HSMHV_dQb_dVdsi + here->HSMHV_dQb_dVgsi + here->HSMHV_dQb_dVbsi) + (here->HSMHV_cbdo + here->HSMHV_cbgo + here->HSMHV_cbbo) : here->HSMHV_dQb_dVdsi - here->HSMHV_cbdo; if (flg_nqs) value->rValue += cbsb_nqs; return(OK); case HSMHV_CGDO: value->rValue = (here->HSMHV_mode > 0) ? here->HSMHV_cgdo : here->HSMHV_cgso; return(OK); case HSMHV_CGSO: value->rValue = (here->HSMHV_mode > 0) ? here->HSMHV_cgso : here->HSMHV_cgdo; return(OK); case HSMHV_CGBO: value->rValue = here->HSMHV_cgbo; return(OK); case HSMHV_CAPBD: value->rValue = here->HSMHV_capbd; return(OK); case HSMHV_CAPBS: value->rValue = here->HSMHV_capbs; return(OK); case HSMHV_VON: value->rValue = here->HSMHV_von; return(OK); case HSMHV_VDSAT: value->rValue = here->HSMHV_vdsat; return(OK); case HSMHV_QBS: value->rValue = *(ckt->CKTstate0 + here->HSMHVqbs); return(OK); case HSMHV_QBD: value->rValue = *(ckt->CKTstate0 + here->HSMHVqbd); return(OK); case HSMHV_CORBNET: value->iValue = here->HSMHV_corbnet; return(OK); case HSMHV_RBPB: value->rValue = here->HSMHV_rbpb; return (OK); case HSMHV_RBPD: value->rValue = here->HSMHV_rbpd; return(OK); case HSMHV_RBPS: value->rValue = here->HSMHV_rbps; return(OK); case HSMHV_RBDB: value->rValue = here->HSMHV_rbdb; return(OK); case HSMHV_RBSB: value->rValue = here->HSMHV_rbsb; return(OK); case HSMHV_CORG: value->iValue = here->HSMHV_corg; return(OK); case HSMHV_NGCON: value->rValue = here->HSMHV_ngcon; return(OK); case HSMHV_XGW: value->rValue = here->HSMHV_xgw; return(OK); case HSMHV_XGL: value->rValue = here->HSMHV_xgl; return(OK); case HSMHV_NF: value->rValue = here->HSMHV_nf; return(OK); case HSMHV_SA: value->rValue = here->HSMHV_sa; return(OK); case HSMHV_SB: value->rValue = here->HSMHV_sb; return(OK); case HSMHV_SD: value->rValue = here->HSMHV_sd; return(OK); case HSMHV_NSUBCDFM: value->rValue = here->HSMHV_nsubcdfm; return(OK); case HSMHV_M: value->rValue = here->HSMHV_m; return(OK); case HSMHV_SUBLD1: value->rValue = here->HSMHV_subld1; return(OK); case HSMHV_SUBLD2: value->rValue = here->HSMHV_subld2; return(OK); case HSMHV_LOVER: value->rValue = here->HSMHV_lover; return(OK); case HSMHV_LOVERS: value->rValue = here->HSMHV_lovers; return(OK); case HSMHV_LOVERLD: value->rValue = here->HSMHV_loverld; return(OK); case HSMHV_LDRIFT1: value->rValue = here->HSMHV_ldrift1; return(OK); case HSMHV_LDRIFT2: value->rValue = here->HSMHV_ldrift2; return(OK); case HSMHV_LDRIFT1S: value->rValue = here->HSMHV_ldrift1s; return(OK); case HSMHV_LDRIFT2S: value->rValue = here->HSMHV_ldrift2s; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhvmask.c0000644000175000017500000014465413546075722023076 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2012 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 1 SUBVERSION : 2 REVISION : 4 ) Model Parameter VERSION : 1.23 FILE : hsmhvmask.c DATE : 2013.04.30 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "hsmhvdef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HSMHVmAsk( CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { HSMHVmodel *model = (HSMHVmodel *)inst; NG_IGNORE(ckt); switch (which) { case HSMHV_MOD_NMOS: value->iValue = model->HSMHV_type; return(OK); case HSMHV_MOD_PMOS: value->iValue = model->HSMHV_type; return(OK); case HSMHV_MOD_LEVEL: value->iValue = model->HSMHV_level; return(OK); case HSMHV_MOD_INFO: value->iValue = model->HSMHV_info; return(OK); case HSMHV_MOD_NOISE: value->iValue = model->HSMHV_noise; return(OK); case HSMHV_MOD_VERSION: value->sValue = model->HSMHV_version; return(OK); case HSMHV_MOD_SHOW: value->iValue = model->HSMHV_show; return(OK); case HSMHV_MOD_CORSRD: value->iValue = model->HSMHV_corsrd; return(OK); case HSMHV_MOD_CORG: value->iValue = model->HSMHV_corg; return(OK); case HSMHV_MOD_COIPRV: value->iValue = model->HSMHV_coiprv; return(OK); case HSMHV_MOD_COPPRV: value->iValue = model->HSMHV_copprv; return(OK); case HSMHV_MOD_COADOV: value->iValue = model->HSMHV_coadov; return(OK); case HSMHV_MOD_COISUB: value->iValue = model->HSMHV_coisub; return(OK); case HSMHV_MOD_COIIGS: value->iValue = model->HSMHV_coiigs; return(OK); case HSMHV_MOD_COGIDL: value->iValue = model->HSMHV_cogidl; return(OK); case HSMHV_MOD_COOVLP: value->iValue = model->HSMHV_coovlp; return(OK); case HSMHV_MOD_COOVLPS: value->iValue = model->HSMHV_coovlps; return(OK); case HSMHV_MOD_COFLICK: value->iValue = model->HSMHV_coflick; return(OK); case HSMHV_MOD_COISTI: value->iValue = model->HSMHV_coisti; return(OK); case HSMHV_MOD_CONQS: value->iValue = model->HSMHV_conqs; return(OK); case HSMHV_MOD_CORBNET: value->iValue = model->HSMHV_corbnet; return(OK); case HSMHV_MOD_COTHRML: value->iValue = model->HSMHV_cothrml; return(OK); case HSMHV_MOD_COIGN: value->iValue = model->HSMHV_coign; return(OK); case HSMHV_MOD_CODFM: value->iValue = model->HSMHV_codfm; return(OK); case HSMHV_MOD_COQOVSM: value->iValue = model->HSMHV_coqovsm; return(OK); case HSMHV_MOD_COSELFHEAT: /* Self-heating model */ value->iValue = model->HSMHV_coselfheat; return(OK); case HSMHV_MOD_COSUBNODE: value->iValue = model->HSMHV_cosubnode; return(OK); case HSMHV_MOD_COSYM: /* Symmetry model for HV */ value->iValue = model->HSMHV_cosym; return(OK); case HSMHV_MOD_COTEMP: value->iValue = model->HSMHV_cotemp; return(OK); case HSMHV_MOD_COLDRIFT: value->iValue = model->HSMHV_coldrift; return(OK); case HSMHV_MOD_VMAX: value->rValue = model->HSMHV_vmax; return(OK); case HSMHV_MOD_VMAXT1: value->rValue = model->HSMHV_vmaxt1; return(OK); case HSMHV_MOD_VMAXT2: value->rValue = model->HSMHV_vmaxt2; return(OK); case HSMHV_MOD_BGTMP1: value->rValue = model->HSMHV_bgtmp1; return(OK); case HSMHV_MOD_BGTMP2: value->rValue = model->HSMHV_bgtmp2; return(OK); case HSMHV_MOD_EG0: value->rValue = model->HSMHV_eg0; return(OK); case HSMHV_MOD_TOX: value->rValue = model->HSMHV_tox; return(OK); case HSMHV_MOD_XLD: value->rValue = model->HSMHV_xld; return(OK); case HSMHV_MOD_LOVER: value->rValue = model->HSMHV_lover; return(OK); case HSMHV_MOD_LOVERS: value->rValue = model->HSMHV_lovers; return(OK); case HSMHV_MOD_RDOV11: value->rValue = model->HSMHV_rdov11; return(OK); case HSMHV_MOD_RDOV12: value->rValue = model->HSMHV_rdov12; return(OK); case HSMHV_MOD_RDOV13: value->rValue = model->HSMHV_rdov13; return(OK); case HSMHV_MOD_RDSLP1: value->rValue = model->HSMHV_rdslp1; return(OK); case HSMHV_MOD_RDICT1: value->rValue = model->HSMHV_rdict1; return(OK); case HSMHV_MOD_RDSLP2: value->rValue = model->HSMHV_rdslp2; return(OK); case HSMHV_MOD_RDICT2: value->rValue = model->HSMHV_rdict2; return(OK); case HSMHV_MOD_LOVERLD: value->rValue = model->HSMHV_loverld; return(OK); case HSMHV_MOD_LDRIFT1: value->rValue = model->HSMHV_ldrift1; return(OK); case HSMHV_MOD_LDRIFT2: value->rValue = model->HSMHV_ldrift2; return(OK); case HSMHV_MOD_LDRIFT1S: value->rValue = model->HSMHV_ldrift1s; return(OK); case HSMHV_MOD_LDRIFT2S: value->rValue = model->HSMHV_ldrift2s; return(OK); case HSMHV_MOD_SUBLD1: value->rValue = model->HSMHV_subld1; return(OK); case HSMHV_MOD_SUBLD2: value->rValue = model->HSMHV_subld2; return(OK); case HSMHV_MOD_DDLTMAX: /* Vdseff */ value->rValue = model->HSMHV_ddltmax; return(OK); case HSMHV_MOD_DDLTSLP: /* Vdseff */ value->rValue = model->HSMHV_ddltslp; return(OK); case HSMHV_MOD_DDLTICT: /* Vdseff */ value->rValue = model->HSMHV_ddltict; return(OK); case HSMHV_MOD_VFBOVER: value->rValue = model->HSMHV_vfbover; return(OK); case HSMHV_MOD_NOVER: value->rValue = model->HSMHV_nover; return(OK); case HSMHV_MOD_NOVERS: value->rValue = model->HSMHV_novers; return(OK); case HSMHV_MOD_XWD: value->rValue = model->HSMHV_xwd; return(OK); case HSMHV_MOD_XWDC: value->rValue = model->HSMHV_xwdc; return(OK); case HSMHV_MOD_XL: value->rValue = model->HSMHV_xl; return(OK); case HSMHV_MOD_XW: value->rValue = model->HSMHV_xw; return(OK); case HSMHV_MOD_SAREF: value->rValue = model->HSMHV_saref; return(OK); case HSMHV_MOD_SBREF: value->rValue = model->HSMHV_sbref; return(OK); case HSMHV_MOD_LL: value->rValue = model->HSMHV_ll; return(OK); case HSMHV_MOD_LLD: value->rValue = model->HSMHV_lld; return(OK); case HSMHV_MOD_LLN: value->rValue = model->HSMHV_lln; return(OK); case HSMHV_MOD_WL: value->rValue = model->HSMHV_wl; return(OK); case HSMHV_MOD_WL1: value->rValue = model->HSMHV_wl1; return(OK); case HSMHV_MOD_WL1P: value->rValue = model->HSMHV_wl1p; return(OK); case HSMHV_MOD_WL2: value->rValue = model->HSMHV_wl2; return(OK); case HSMHV_MOD_WL2P: value->rValue = model->HSMHV_wl2p; return(OK); case HSMHV_MOD_WLD: value->rValue = model->HSMHV_wld; return(OK); case HSMHV_MOD_WLN: value->rValue = model->HSMHV_wln; return(OK); case HSMHV_MOD_XQY: value->rValue = model->HSMHV_xqy; return(OK); case HSMHV_MOD_XQY1: value->rValue = model->HSMHV_xqy1; return(OK); case HSMHV_MOD_XQY2: value->rValue = model->HSMHV_xqy2; return(OK); case HSMHV_MOD_RS: value->rValue = model->HSMHV_rs; return(OK); case HSMHV_MOD_RD: value->rValue = model->HSMHV_rd; return(OK); case HSMHV_MOD_RSH: value->rValue = model->HSMHV_rsh; return(OK); case HSMHV_MOD_RSHG: value->rValue = model->HSMHV_rshg; return(OK); case HSMHV_MOD_VFBC: value->rValue = model->HSMHV_vfbc; return(OK); case HSMHV_MOD_VBI: value->rValue = model->HSMHV_vbi; return(OK); case HSMHV_MOD_NSUBC: value->rValue = model->HSMHV_nsubc; return(OK); case HSMHV_MOD_PARL2: value->rValue = model->HSMHV_parl2; return(OK); case HSMHV_MOD_LP: value->rValue = model->HSMHV_lp; return(OK); case HSMHV_MOD_NSUBP: value->rValue = model->HSMHV_nsubp; return(OK); case HSMHV_MOD_NSUBP0: value->rValue = model->HSMHV_nsubp0; return(OK); case HSMHV_MOD_NSUBWP: value->rValue = model->HSMHV_nsubwp; return(OK); case HSMHV_MOD_SCP1: value->rValue = model->HSMHV_scp1; return(OK); case HSMHV_MOD_SCP2: value->rValue = model->HSMHV_scp2; return(OK); case HSMHV_MOD_SCP3: value->rValue = model->HSMHV_scp3; return(OK); case HSMHV_MOD_SC1: value->rValue = model->HSMHV_sc1; return(OK); case HSMHV_MOD_SC2: value->rValue = model->HSMHV_sc2; return(OK); case HSMHV_MOD_SC3: value->rValue = model->HSMHV_sc3; return(OK); case HSMHV_MOD_SC4: value->rValue = model->HSMHV_sc4; return(OK); case HSMHV_MOD_PGD1: value->rValue = model->HSMHV_pgd1; return(OK); case HSMHV_MOD_PGD2: value->rValue = model->HSMHV_pgd2; return(OK); case HSMHV_MOD_PGD3: value->rValue = model->HSMHV_pgd3; return(OK); case HSMHV_MOD_PGD4: value->rValue = model->HSMHV_pgd4; return(OK); case HSMHV_MOD_NDEP: value->rValue = model->HSMHV_ndep; return(OK); case HSMHV_MOD_NDEPL: value->rValue = model->HSMHV_ndepl; return(OK); case HSMHV_MOD_NDEPLP: value->rValue = model->HSMHV_ndeplp; return(OK); case HSMHV_MOD_NINV: value->rValue = model->HSMHV_ninv; return(OK); case HSMHV_MOD_MUECB0: value->rValue = model->HSMHV_muecb0; return(OK); case HSMHV_MOD_MUECB1: value->rValue = model->HSMHV_muecb1; return(OK); case HSMHV_MOD_MUEPH1: value->rValue = model->HSMHV_mueph1; return(OK); case HSMHV_MOD_MUEPH0: value->rValue = model->HSMHV_mueph0; return(OK); case HSMHV_MOD_MUEPHW: value->rValue = model->HSMHV_muephw; return(OK); case HSMHV_MOD_MUEPWP: value->rValue = model->HSMHV_muepwp; return(OK); case HSMHV_MOD_MUEPHL: value->rValue = model->HSMHV_muephl; return(OK); case HSMHV_MOD_MUEPLP: value->rValue = model->HSMHV_mueplp; return(OK); case HSMHV_MOD_MUEPHS: value->rValue = model->HSMHV_muephs; return(OK); case HSMHV_MOD_MUEPSP: value->rValue = model->HSMHV_muepsp; return(OK); case HSMHV_MOD_VTMP: value->rValue = model->HSMHV_vtmp; return(OK); case HSMHV_MOD_WVTH0: value->rValue = model->HSMHV_wvth0; return(OK); case HSMHV_MOD_MUESR1: value->rValue = model->HSMHV_muesr1; return(OK); case HSMHV_MOD_MUESR0: value->rValue = model->HSMHV_muesr0; return(OK); case HSMHV_MOD_MUESRL: value->rValue = model->HSMHV_muesrl; return(OK); case HSMHV_MOD_MUESLP: value->rValue = model->HSMHV_mueslp; return(OK); case HSMHV_MOD_MUESRW: value->rValue = model->HSMHV_muesrw; return(OK); case HSMHV_MOD_MUESWP: value->rValue = model->HSMHV_mueswp; return(OK); case HSMHV_MOD_BB: value->rValue = model->HSMHV_bb; return(OK); case HSMHV_MOD_SUB1: value->rValue = model->HSMHV_sub1; return(OK); case HSMHV_MOD_SUB2: value->rValue = model->HSMHV_sub2; return(OK); case HSMHV_MOD_SVGS: value->rValue = model->HSMHV_svgs; return(OK); case HSMHV_MOD_SVGSL: value->rValue = model->HSMHV_svgsl; return(OK); case HSMHV_MOD_SVGSLP: value->rValue = model->HSMHV_svgslp; return(OK); case HSMHV_MOD_SVGSW: value->rValue = model->HSMHV_svgsw; return(OK); case HSMHV_MOD_SVGSWP: value->rValue = model->HSMHV_svgswp; return(OK); case HSMHV_MOD_SVBS: value->rValue = model->HSMHV_svbs; return(OK); case HSMHV_MOD_SVBSL: value->rValue = model->HSMHV_svbsl; return(OK); case HSMHV_MOD_SVBSLP: value->rValue = model->HSMHV_svbslp; return(OK); case HSMHV_MOD_SVDS: value->rValue = model->HSMHV_svds; return(OK); case HSMHV_MOD_SLG: value->rValue = model->HSMHV_slg; return(OK); case HSMHV_MOD_SLGL: value->rValue = model->HSMHV_slgl; return(OK); case HSMHV_MOD_SLGLP: value->rValue = model->HSMHV_slglp; return(OK); case HSMHV_MOD_SUB1L: value->rValue = model->HSMHV_sub1l; return(OK); case HSMHV_MOD_SUB1LP: value->rValue = model->HSMHV_sub1lp; return(OK); case HSMHV_MOD_SUB2L: value->rValue = model->HSMHV_sub2l; return(OK); case HSMHV_MOD_FN1: value->rValue = model->HSMHV_fn1; return(OK); case HSMHV_MOD_FN2: value->rValue = model->HSMHV_fn2; return(OK); case HSMHV_MOD_FN3: value->rValue = model->HSMHV_fn3; return(OK); case HSMHV_MOD_FVBS: value->rValue = model->HSMHV_fvbs; return(OK); case HSMHV_MOD_NSTI: value->rValue = model->HSMHV_nsti; return(OK); case HSMHV_MOD_WSTI: value->rValue = model->HSMHV_wsti; return(OK); case HSMHV_MOD_WSTIL: value->rValue = model->HSMHV_wstil; return(OK); case HSMHV_MOD_WSTILP: value->rValue = model->HSMHV_wstilp; return(OK); case HSMHV_MOD_WSTIW: value->rValue = model->HSMHV_wstiw; return(OK); case HSMHV_MOD_WSTIWP: value->rValue = model->HSMHV_wstiwp; return(OK); case HSMHV_MOD_SCSTI1: value->rValue = model->HSMHV_scsti1; return(OK); case HSMHV_MOD_SCSTI2: value->rValue = model->HSMHV_scsti2; return(OK); case HSMHV_MOD_VTHSTI: value->rValue = model->HSMHV_vthsti; return(OK); case HSMHV_MOD_VDSTI: value->rValue = model->HSMHV_vdsti; return(OK); case HSMHV_MOD_MUESTI1: value->rValue = model->HSMHV_muesti1; return(OK); case HSMHV_MOD_MUESTI2: value->rValue = model->HSMHV_muesti2; return(OK); case HSMHV_MOD_MUESTI3: value->rValue = model->HSMHV_muesti3; return(OK); case HSMHV_MOD_NSUBPSTI1: value->rValue = model->HSMHV_nsubpsti1; return(OK); case HSMHV_MOD_NSUBPSTI2: value->rValue = model->HSMHV_nsubpsti2; return(OK); case HSMHV_MOD_NSUBPSTI3: value->rValue = model->HSMHV_nsubpsti3; return(OK); case HSMHV_MOD_LPEXT: value->rValue = model->HSMHV_lpext; return(OK); case HSMHV_MOD_NPEXT: value->rValue = model->HSMHV_npext; return(OK); case HSMHV_MOD_SCP22: value->rValue = model->HSMHV_scp22; return(OK); case HSMHV_MOD_SCP21: value->rValue = model->HSMHV_scp21; return(OK); case HSMHV_MOD_BS1: value->rValue = model->HSMHV_bs1; return(OK); case HSMHV_MOD_BS2: value->rValue = model->HSMHV_bs2; return(OK); case HSMHV_MOD_CGSO: value->rValue = model->HSMHV_cgso; return(OK); case HSMHV_MOD_CGDO: value->rValue = model->HSMHV_cgdo; return(OK); case HSMHV_MOD_CGBO: value->rValue = model->HSMHV_cgbo; return(OK); case HSMHV_MOD_TPOLY: value->rValue = model->HSMHV_tpoly; return(OK); case HSMHV_MOD_JS0: value->rValue = model->HSMHV_js0; return(OK); case HSMHV_MOD_JS0SW: value->rValue = model->HSMHV_js0sw; return(OK); case HSMHV_MOD_NJ: value->rValue = model->HSMHV_nj; return(OK); case HSMHV_MOD_NJSW: value->rValue = model->HSMHV_njsw; return(OK); case HSMHV_MOD_XTI: value->rValue = model->HSMHV_xti; return(OK); case HSMHV_MOD_CJ: value->rValue = model->HSMHV_cj; return(OK); case HSMHV_MOD_CJSW: value->rValue = model->HSMHV_cjsw; return(OK); case HSMHV_MOD_CJSWG: value->rValue = model->HSMHV_cjswg; return(OK); case HSMHV_MOD_MJ: value->rValue = model->HSMHV_mj; return(OK); case HSMHV_MOD_MJSW: value->rValue = model->HSMHV_mjsw; return(OK); case HSMHV_MOD_MJSWG: value->rValue = model->HSMHV_mjswg; return(OK); case HSMHV_MOD_PB: value->rValue = model->HSMHV_pb; return(OK); case HSMHV_MOD_PBSW: value->rValue = model->HSMHV_pbsw; return(OK); case HSMHV_MOD_PBSWG: value->rValue = model->HSMHV_pbswg; return(OK); case HSMHV_MOD_XTI2: value->rValue = model->HSMHV_xti2; return(OK); case HSMHV_MOD_CISB: value->rValue = model->HSMHV_cisb; return(OK); case HSMHV_MOD_CVB: value->rValue = model->HSMHV_cvb; return(OK); case HSMHV_MOD_CTEMP: value->rValue = model->HSMHV_ctemp; return(OK); case HSMHV_MOD_CISBK: value->rValue = model->HSMHV_cisbk; return(OK); case HSMHV_MOD_CVBK: value->rValue = model->HSMHV_cvbk; return(OK); case HSMHV_MOD_DIVX: value->rValue = model->HSMHV_divx; return(OK); case HSMHV_MOD_CLM1: value->rValue = model->HSMHV_clm1; return(OK); case HSMHV_MOD_CLM2: value->rValue = model->HSMHV_clm2; return(OK); case HSMHV_MOD_CLM3: value->rValue = model->HSMHV_clm3; return(OK); case HSMHV_MOD_CLM5: value->rValue = model->HSMHV_clm5; return(OK); case HSMHV_MOD_CLM6: value->rValue = model->HSMHV_clm6; return(OK); case HSMHV_MOD_MUETMP: value->rValue = model->HSMHV_muetmp; return(OK); case HSMHV_MOD_VOVER: value->rValue = model->HSMHV_vover; return(OK); case HSMHV_MOD_VOVERP: value->rValue = model->HSMHV_voverp; return(OK); case HSMHV_MOD_VOVERS: value->rValue = model->HSMHV_vovers; return(OK); case HSMHV_MOD_VOVERSP: value->rValue = model->HSMHV_voversp; return(OK); case HSMHV_MOD_WFC: value->rValue = model->HSMHV_wfc; return(OK); case HSMHV_MOD_NSUBCW: value->rValue = model->HSMHV_nsubcw; return(OK); case HSMHV_MOD_NSUBCWP: value->rValue = model->HSMHV_nsubcwp; return(OK); case HSMHV_MOD_QME1: value->rValue = model->HSMHV_qme1; return(OK); case HSMHV_MOD_QME2: value->rValue = model->HSMHV_qme2; return(OK); case HSMHV_MOD_QME3: value->rValue = model->HSMHV_qme3; return(OK); case HSMHV_MOD_GIDL1: value->rValue = model->HSMHV_gidl1; return(OK); case HSMHV_MOD_GIDL2: value->rValue = model->HSMHV_gidl2; return(OK); case HSMHV_MOD_GIDL3: value->rValue = model->HSMHV_gidl3; return(OK); case HSMHV_MOD_GIDL4: value->rValue = model->HSMHV_gidl4; return(OK); case HSMHV_MOD_GIDL5: value->rValue = model->HSMHV_gidl5; return(OK); case HSMHV_MOD_GLEAK1: value->rValue = model->HSMHV_gleak1; return(OK); case HSMHV_MOD_GLEAK2: value->rValue = model->HSMHV_gleak2; return(OK); case HSMHV_MOD_GLEAK3: value->rValue = model->HSMHV_gleak3; return(OK); case HSMHV_MOD_GLEAK4: value->rValue = model->HSMHV_gleak4; return(OK); case HSMHV_MOD_GLEAK5: value->rValue = model->HSMHV_gleak5; return(OK); case HSMHV_MOD_GLEAK6: value->rValue = model->HSMHV_gleak6; return(OK); case HSMHV_MOD_GLEAK7: value->rValue = model->HSMHV_gleak7; return(OK); case HSMHV_MOD_GLPART1: value->rValue = model->HSMHV_glpart1; return(OK); case HSMHV_MOD_GLKSD1: value->rValue = model->HSMHV_glksd1; return(OK); case HSMHV_MOD_GLKSD2: value->rValue = model->HSMHV_glksd2; return(OK); case HSMHV_MOD_GLKSD3: value->rValue = model->HSMHV_glksd3; return(OK); case HSMHV_MOD_GLKB1: value->rValue = model->HSMHV_glkb1; return(OK); case HSMHV_MOD_GLKB2: value->rValue = model->HSMHV_glkb2; return(OK); case HSMHV_MOD_GLKB3: value->rValue = model->HSMHV_glkb3; return(OK); case HSMHV_MOD_EGIG: value->rValue = model->HSMHV_egig; return(OK); case HSMHV_MOD_IGTEMP2: value->rValue = model->HSMHV_igtemp2; return(OK); case HSMHV_MOD_IGTEMP3: value->rValue = model->HSMHV_igtemp3; return(OK); case HSMHV_MOD_VZADD0: value->rValue = model->HSMHV_vzadd0; return(OK); case HSMHV_MOD_PZADD0: value->rValue = model->HSMHV_pzadd0; return(OK); case HSMHV_MOD_NFTRP: value->rValue = model->HSMHV_nftrp; return(OK); case HSMHV_MOD_NFALP: value->rValue = model->HSMHV_nfalp; return(OK); case HSMHV_MOD_CIT: value->rValue = model->HSMHV_cit; return(OK); case HSMHV_MOD_FALPH: value->rValue = model->HSMHV_falph; return(OK); case HSMHV_MOD_KAPPA: value->rValue = model->HSMHV_kappa; return(OK); case HSMHV_MOD_PTHROU: value->rValue = model->HSMHV_pthrou; return(OK); case HSMHV_MOD_VDIFFJ: value->rValue = model->HSMHV_vdiffj; return(OK); case HSMHV_MOD_DLY1: value->rValue = model->HSMHV_dly1; return(OK); case HSMHV_MOD_DLY2: value->rValue = model->HSMHV_dly2; return(OK); case HSMHV_MOD_DLY3: value->rValue = model->HSMHV_dly3; return(OK); case HSMHV_MOD_DLYOV: value->rValue = model->HSMHV_dlyov; return(OK); case HSMHV_MOD_TNOM: value->rValue = model->HSMHV_tnom; return(OK); case HSMHV_MOD_OVSLP: value->rValue = model->HSMHV_ovslp; return(OK); case HSMHV_MOD_OVMAG: value->rValue = model->HSMHV_ovmag; return(OK); case HSMHV_MOD_GBMIN: value->rValue = model->HSMHV_gbmin; return(OK); case HSMHV_MOD_RBPB: value->rValue = model->HSMHV_rbpb; return(OK); case HSMHV_MOD_RBPD: value->rValue = model->HSMHV_rbpd; return(OK); case HSMHV_MOD_RBPS: value->rValue = model->HSMHV_rbps; return(OK); case HSMHV_MOD_RBDB: value->rValue = model->HSMHV_rbdb; return(OK); case HSMHV_MOD_RBSB: value->rValue = model->HSMHV_rbsb; return(OK); case HSMHV_MOD_IBPC1: value->rValue = model->HSMHV_ibpc1; return(OK); case HSMHV_MOD_IBPC2: value->rValue = model->HSMHV_ibpc2; return(OK); case HSMHV_MOD_MPHDFM: value->rValue = model->HSMHV_mphdfm; return(OK); case HSMHV_MOD_RDVG11: value->rValue = model->HSMHV_rdvg11; return(OK); case HSMHV_MOD_RDVG12: value->rValue = model->HSMHV_rdvg12; return(OK); case HSMHV_MOD_RTH0: /* Self-heating model */ value->rValue = model->HSMHV_rth0; return(OK); case HSMHV_MOD_CTH0: /* Self-heating model */ value->rValue = model->HSMHV_cth0; return(OK); case HSMHV_MOD_POWRAT: /* Self-heating model */ value->rValue = model->HSMHV_powrat; return(OK); case HSMHV_MOD_RTHTEMP1: /* Self-heating model */ value->rValue = model->HSMHV_rthtemp1; return(OK); case HSMHV_MOD_RTHTEMP2: /* Self-heating model */ value->rValue = model->HSMHV_rthtemp2; return(OK); case HSMHV_MOD_PRATTEMP1: /* Self-heating model */ value->rValue = model->HSMHV_prattemp1; return(OK); case HSMHV_MOD_PRATTEMP2: /* Self-heating model */ value->rValue = model->HSMHV_prattemp2; return(OK); case HSMHV_MOD_TCJBD: /* Self-heating model */ value->rValue = model->HSMHV_tcjbd; return(OK); case HSMHV_MOD_TCJBS: /* Self-heating model */ value->rValue = model->HSMHV_tcjbs; return(OK); case HSMHV_MOD_TCJBDSW: /* Self-heating model */ value->rValue = model->HSMHV_tcjbdsw; return(OK); case HSMHV_MOD_TCJBSSW: /* Self-heating model */ value->rValue = model->HSMHV_tcjbssw; return(OK); case HSMHV_MOD_TCJBDSWG: /* Self-heating model */ value->rValue = model->HSMHV_tcjbdswg; return(OK); case HSMHV_MOD_TCJBSSWG: /* Self-heating model */ value->rValue = model->HSMHV_tcjbsswg; return(OK); /* case HSMHV_MOD_WTH0: */ /* value->rValue = model->HSMHV_wth0; */ /* return(OK); */ case HSMHV_MOD_QDFTVD: value->rValue = model->HSMHV_qdftvd; return(OK); case HSMHV_MOD_XLDLD: value->rValue = model->HSMHV_xldld; return(OK); case HSMHV_MOD_XWDLD: value->rValue = model->HSMHV_xwdld; return(OK); case HSMHV_MOD_RDVD: value->rValue = model->HSMHV_rdvd; return(OK); case HSMHV_MOD_RD20: value->rValue = model->HSMHV_rd20; return(OK); case HSMHV_MOD_QOVSM: value->rValue = model->HSMHV_qovsm; return(OK); case HSMHV_MOD_LDRIFT: value->rValue = model->HSMHV_ldrift; return(OK); case HSMHV_MOD_RD21: value->rValue = model->HSMHV_rd21; return(OK); case HSMHV_MOD_RD22: value->rValue = model->HSMHV_rd22; return(OK); case HSMHV_MOD_RD22D: value->rValue = model->HSMHV_rd22d; return(OK); case HSMHV_MOD_RD23: value->rValue = model->HSMHV_rd23; return(OK); case HSMHV_MOD_RD24: value->rValue = model->HSMHV_rd24; return(OK); case HSMHV_MOD_RD25: value->rValue = model->HSMHV_rd25; return(OK); case HSMHV_MOD_RD26: value->rValue = model->HSMHV_rd26; return(OK); case HSMHV_MOD_RDVDL: value->rValue = model->HSMHV_rdvdl; return(OK); case HSMHV_MOD_RDVDLP: value->rValue = model->HSMHV_rdvdlp; return(OK); case HSMHV_MOD_RDVDS: value->rValue = model->HSMHV_rdvds; return(OK); case HSMHV_MOD_RDVDSP: value->rValue = model->HSMHV_rdvdsp; return(OK); case HSMHV_MOD_RD23L: value->rValue = model->HSMHV_rd23l; return(OK); case HSMHV_MOD_RD23LP: value->rValue = model->HSMHV_rd23lp; return(OK); case HSMHV_MOD_RD23S: value->rValue = model->HSMHV_rd23s; return(OK); case HSMHV_MOD_RD23SP: value->rValue = model->HSMHV_rd23sp; return(OK); case HSMHV_MOD_RDS: value->rValue = model->HSMHV_rds; return(OK); case HSMHV_MOD_RDSP: value->rValue = model->HSMHV_rdsp; return(OK); case HSMHV_MOD_RDTEMP1: value->rValue = model->HSMHV_rdtemp1; return(OK); case HSMHV_MOD_RDTEMP2: value->rValue = model->HSMHV_rdtemp2; return(OK); case HSMHV_MOD_RTH0R: value->rValue = model->HSMHV_rth0r; return(OK); case HSMHV_MOD_RDVDTEMP1: value->rValue = model->HSMHV_rdvdtemp1; return(OK); case HSMHV_MOD_RDVDTEMP2: value->rValue = model->HSMHV_rdvdtemp2; return(OK); case HSMHV_MOD_RTH0W: value->rValue = model->HSMHV_rth0w; return(OK); case HSMHV_MOD_RTH0WP: value->rValue = model->HSMHV_rth0wp; return(OK); case HSMHV_MOD_CVDSOVER: value->rValue = model->HSMHV_cvdsover; return(OK); case HSMHV_MOD_NINVD: value->rValue = model->HSMHV_ninvd; return(OK); case HSMHV_MOD_NINVDW: value->rValue = model->HSMHV_ninvdw; return(OK); case HSMHV_MOD_NINVDWP: value->rValue = model->HSMHV_ninvdwp; return(OK); case HSMHV_MOD_NINVDT1: value->rValue = model->HSMHV_ninvdt1; return(OK); case HSMHV_MOD_NINVDT2: value->rValue = model->HSMHV_ninvdt2; return(OK); case HSMHV_MOD_VBSMIN: value->rValue = model->HSMHV_vbsmin; return(OK); case HSMHV_MOD_RDVB: value->rValue = model->HSMHV_rdvb; return(OK); case HSMHV_MOD_RTH0NF: value->rValue = model->HSMHV_rth0nf; return(OK); case HSMHV_MOD_RDVSUB: value->rValue = model->HSMHV_rdvsub; return(OK); case HSMHV_MOD_RDVDSUB: value->rValue = model->HSMHV_rdvdsub; return(OK); case HSMHV_MOD_DDRIFT: value->rValue = model->HSMHV_ddrift; return(OK); case HSMHV_MOD_VBISUB: value->rValue = model->HSMHV_vbisub; return(OK); case HSMHV_MOD_NSUBSUB: value->rValue = model->HSMHV_nsubsub; return(OK); case HSMHV_MOD_SHEMAX: value->rValue = model->HSMHV_shemax; return(OK); /* binning parameters */ case HSMHV_MOD_LMIN: value->rValue = model->HSMHV_lmin; return(OK); case HSMHV_MOD_LMAX: value->rValue = model->HSMHV_lmax; return(OK); case HSMHV_MOD_WMIN: value->rValue = model->HSMHV_wmin; return(OK); case HSMHV_MOD_WMAX: value->rValue = model->HSMHV_wmax; return(OK); case HSMHV_MOD_LBINN: value->rValue = model->HSMHV_lbinn; return(OK); case HSMHV_MOD_WBINN: value->rValue = model->HSMHV_wbinn; return(OK); /* Length dependence */ case HSMHV_MOD_LVMAX: value->rValue = model->HSMHV_lvmax; return(OK); case HSMHV_MOD_LBGTMP1: value->rValue = model->HSMHV_lbgtmp1; return(OK); case HSMHV_MOD_LBGTMP2: value->rValue = model->HSMHV_lbgtmp2; return(OK); case HSMHV_MOD_LEG0: value->rValue = model->HSMHV_leg0; return(OK); case HSMHV_MOD_LVFBOVER: value->rValue = model->HSMHV_lvfbover; return(OK); case HSMHV_MOD_LNOVER: value->rValue = model->HSMHV_lnover; return(OK); case HSMHV_MOD_LNOVERS: value->rValue = model->HSMHV_lnovers; return(OK); case HSMHV_MOD_LWL2: value->rValue = model->HSMHV_lwl2; return(OK); case HSMHV_MOD_LVFBC: value->rValue = model->HSMHV_lvfbc; return(OK); case HSMHV_MOD_LNSUBC: value->rValue = model->HSMHV_lnsubc; return(OK); case HSMHV_MOD_LNSUBP: value->rValue = model->HSMHV_lnsubp; return(OK); case HSMHV_MOD_LSCP1: value->rValue = model->HSMHV_lscp1; return(OK); case HSMHV_MOD_LSCP2: value->rValue = model->HSMHV_lscp2; return(OK); case HSMHV_MOD_LSCP3: value->rValue = model->HSMHV_lscp3; return(OK); case HSMHV_MOD_LSC1: value->rValue = model->HSMHV_lsc1; return(OK); case HSMHV_MOD_LSC2: value->rValue = model->HSMHV_lsc2; return(OK); case HSMHV_MOD_LSC3: value->rValue = model->HSMHV_lsc3; return(OK); case HSMHV_MOD_LPGD1: value->rValue = model->HSMHV_lpgd1; return(OK); case HSMHV_MOD_LPGD3: value->rValue = model->HSMHV_lpgd3; return(OK); case HSMHV_MOD_LNDEP: value->rValue = model->HSMHV_lndep; return(OK); case HSMHV_MOD_LNINV: value->rValue = model->HSMHV_lninv; return(OK); case HSMHV_MOD_LMUECB0: value->rValue = model->HSMHV_lmuecb0; return(OK); case HSMHV_MOD_LMUECB1: value->rValue = model->HSMHV_lmuecb1; return(OK); case HSMHV_MOD_LMUEPH1: value->rValue = model->HSMHV_lmueph1; return(OK); case HSMHV_MOD_LVTMP: value->rValue = model->HSMHV_lvtmp; return(OK); case HSMHV_MOD_LWVTH0: value->rValue = model->HSMHV_lwvth0; return(OK); case HSMHV_MOD_LMUESR1: value->rValue = model->HSMHV_lmuesr1; return(OK); case HSMHV_MOD_LMUETMP: value->rValue = model->HSMHV_lmuetmp; return(OK); case HSMHV_MOD_LSUB1: value->rValue = model->HSMHV_lsub1; return(OK); case HSMHV_MOD_LSUB2: value->rValue = model->HSMHV_lsub2; return(OK); case HSMHV_MOD_LSVDS: value->rValue = model->HSMHV_lsvds; return(OK); case HSMHV_MOD_LSVBS: value->rValue = model->HSMHV_lsvbs; return(OK); case HSMHV_MOD_LSVGS: value->rValue = model->HSMHV_lsvgs; return(OK); case HSMHV_MOD_LFN1: value->rValue = model->HSMHV_lfn1; return(OK); case HSMHV_MOD_LFN2: value->rValue = model->HSMHV_lfn2; return(OK); case HSMHV_MOD_LFN3: value->rValue = model->HSMHV_lfn3; return(OK); case HSMHV_MOD_LFVBS: value->rValue = model->HSMHV_lfvbs; return(OK); case HSMHV_MOD_LNSTI: value->rValue = model->HSMHV_lnsti; return(OK); case HSMHV_MOD_LWSTI: value->rValue = model->HSMHV_lwsti; return(OK); case HSMHV_MOD_LSCSTI1: value->rValue = model->HSMHV_lscsti1; return(OK); case HSMHV_MOD_LSCSTI2: value->rValue = model->HSMHV_lscsti2; return(OK); case HSMHV_MOD_LVTHSTI: value->rValue = model->HSMHV_lvthsti; return(OK); case HSMHV_MOD_LMUESTI1: value->rValue = model->HSMHV_lmuesti1; return(OK); case HSMHV_MOD_LMUESTI2: value->rValue = model->HSMHV_lmuesti2; return(OK); case HSMHV_MOD_LMUESTI3: value->rValue = model->HSMHV_lmuesti3; return(OK); case HSMHV_MOD_LNSUBPSTI1: value->rValue = model->HSMHV_lnsubpsti1; return(OK); case HSMHV_MOD_LNSUBPSTI2: value->rValue = model->HSMHV_lnsubpsti2; return(OK); case HSMHV_MOD_LNSUBPSTI3: value->rValue = model->HSMHV_lnsubpsti3; return(OK); case HSMHV_MOD_LCGSO: value->rValue = model->HSMHV_lcgso; return(OK); case HSMHV_MOD_LCGDO: value->rValue = model->HSMHV_lcgdo; return(OK); case HSMHV_MOD_LJS0: value->rValue = model->HSMHV_ljs0; return(OK); case HSMHV_MOD_LJS0SW: value->rValue = model->HSMHV_ljs0sw; return(OK); case HSMHV_MOD_LNJ: value->rValue = model->HSMHV_lnj; return(OK); case HSMHV_MOD_LCISBK: value->rValue = model->HSMHV_lcisbk; return(OK); case HSMHV_MOD_LCLM1: value->rValue = model->HSMHV_lclm1; return(OK); case HSMHV_MOD_LCLM2: value->rValue = model->HSMHV_lclm2; return(OK); case HSMHV_MOD_LCLM3: value->rValue = model->HSMHV_lclm3; return(OK); case HSMHV_MOD_LWFC: value->rValue = model->HSMHV_lwfc; return(OK); case HSMHV_MOD_LGIDL1: value->rValue = model->HSMHV_lgidl1; return(OK); case HSMHV_MOD_LGIDL2: value->rValue = model->HSMHV_lgidl2; return(OK); case HSMHV_MOD_LGLEAK1: value->rValue = model->HSMHV_lgleak1; return(OK); case HSMHV_MOD_LGLEAK2: value->rValue = model->HSMHV_lgleak2; return(OK); case HSMHV_MOD_LGLEAK3: value->rValue = model->HSMHV_lgleak3; return(OK); case HSMHV_MOD_LGLEAK6: value->rValue = model->HSMHV_lgleak6; return(OK); case HSMHV_MOD_LGLKSD1: value->rValue = model->HSMHV_lglksd1; return(OK); case HSMHV_MOD_LGLKSD2: value->rValue = model->HSMHV_lglksd2; return(OK); case HSMHV_MOD_LGLKB1: value->rValue = model->HSMHV_lglkb1; return(OK); case HSMHV_MOD_LGLKB2: value->rValue = model->HSMHV_lglkb2; return(OK); case HSMHV_MOD_LNFTRP: value->rValue = model->HSMHV_lnftrp; return(OK); case HSMHV_MOD_LNFALP: value->rValue = model->HSMHV_lnfalp; return(OK); case HSMHV_MOD_LPTHROU: value->rValue = model->HSMHV_lpthrou; return(OK); case HSMHV_MOD_LVDIFFJ: value->rValue = model->HSMHV_lvdiffj; return(OK); case HSMHV_MOD_LIBPC1: value->rValue = model->HSMHV_libpc1; return(OK); case HSMHV_MOD_LIBPC2: value->rValue = model->HSMHV_libpc2; return(OK); case HSMHV_MOD_LCGBO: value->rValue = model->HSMHV_lcgbo; return(OK); case HSMHV_MOD_LCVDSOVER: value->rValue = model->HSMHV_lcvdsover; return(OK); case HSMHV_MOD_LFALPH: value->rValue = model->HSMHV_lfalph; return(OK); case HSMHV_MOD_LNPEXT: value->rValue = model->HSMHV_lnpext; return(OK); case HSMHV_MOD_LPOWRAT: value->rValue = model->HSMHV_lpowrat; return(OK); case HSMHV_MOD_LRD: value->rValue = model->HSMHV_lrd; return(OK); case HSMHV_MOD_LRD22: value->rValue = model->HSMHV_lrd22; return(OK); case HSMHV_MOD_LRD23: value->rValue = model->HSMHV_lrd23; return(OK); case HSMHV_MOD_LRD24: value->rValue = model->HSMHV_lrd24; return(OK); case HSMHV_MOD_LRDICT1: value->rValue = model->HSMHV_lrdict1; return(OK); case HSMHV_MOD_LRDOV13: value->rValue = model->HSMHV_lrdov13; return(OK); case HSMHV_MOD_LRDSLP1: value->rValue = model->HSMHV_lrdslp1; return(OK); case HSMHV_MOD_LRDVB: value->rValue = model->HSMHV_lrdvb; return(OK); case HSMHV_MOD_LRDVD: value->rValue = model->HSMHV_lrdvd; return(OK); case HSMHV_MOD_LRDVG11: value->rValue = model->HSMHV_lrdvg11; return(OK); case HSMHV_MOD_LRS: value->rValue = model->HSMHV_lrs; return(OK); case HSMHV_MOD_LRTH0: value->rValue = model->HSMHV_lrth0; return(OK); case HSMHV_MOD_LVOVER: value->rValue = model->HSMHV_lvover; return(OK); /* Width dependence */ case HSMHV_MOD_WVMAX: value->rValue = model->HSMHV_wvmax; return(OK); case HSMHV_MOD_WBGTMP1: value->rValue = model->HSMHV_wbgtmp1; return(OK); case HSMHV_MOD_WBGTMP2: value->rValue = model->HSMHV_wbgtmp2; return(OK); case HSMHV_MOD_WEG0: value->rValue = model->HSMHV_weg0; return(OK); case HSMHV_MOD_WVFBOVER: value->rValue = model->HSMHV_wvfbover; return(OK); case HSMHV_MOD_WNOVER: value->rValue = model->HSMHV_wnover; return(OK); case HSMHV_MOD_WNOVERS: value->rValue = model->HSMHV_wnovers; return(OK); case HSMHV_MOD_WWL2: value->rValue = model->HSMHV_wwl2; return(OK); case HSMHV_MOD_WVFBC: value->rValue = model->HSMHV_wvfbc; return(OK); case HSMHV_MOD_WNSUBC: value->rValue = model->HSMHV_wnsubc; return(OK); case HSMHV_MOD_WNSUBP: value->rValue = model->HSMHV_wnsubp; return(OK); case HSMHV_MOD_WSCP1: value->rValue = model->HSMHV_wscp1; return(OK); case HSMHV_MOD_WSCP2: value->rValue = model->HSMHV_wscp2; return(OK); case HSMHV_MOD_WSCP3: value->rValue = model->HSMHV_wscp3; return(OK); case HSMHV_MOD_WSC1: value->rValue = model->HSMHV_wsc1; return(OK); case HSMHV_MOD_WSC2: value->rValue = model->HSMHV_wsc2; return(OK); case HSMHV_MOD_WSC3: value->rValue = model->HSMHV_wsc3; return(OK); case HSMHV_MOD_WPGD1: value->rValue = model->HSMHV_wpgd1; return(OK); case HSMHV_MOD_WPGD3: value->rValue = model->HSMHV_wpgd3; return(OK); case HSMHV_MOD_WNDEP: value->rValue = model->HSMHV_wndep; return(OK); case HSMHV_MOD_WNINV: value->rValue = model->HSMHV_wninv; return(OK); case HSMHV_MOD_WMUECB0: value->rValue = model->HSMHV_wmuecb0; return(OK); case HSMHV_MOD_WMUECB1: value->rValue = model->HSMHV_wmuecb1; return(OK); case HSMHV_MOD_WMUEPH1: value->rValue = model->HSMHV_wmueph1; return(OK); case HSMHV_MOD_WVTMP: value->rValue = model->HSMHV_wvtmp; return(OK); case HSMHV_MOD_WWVTH0: value->rValue = model->HSMHV_wwvth0; return(OK); case HSMHV_MOD_WMUESR1: value->rValue = model->HSMHV_wmuesr1; return(OK); case HSMHV_MOD_WMUETMP: value->rValue = model->HSMHV_wmuetmp; return(OK); case HSMHV_MOD_WSUB1: value->rValue = model->HSMHV_wsub1; return(OK); case HSMHV_MOD_WSUB2: value->rValue = model->HSMHV_wsub2; return(OK); case HSMHV_MOD_WSVDS: value->rValue = model->HSMHV_wsvds; return(OK); case HSMHV_MOD_WSVBS: value->rValue = model->HSMHV_wsvbs; return(OK); case HSMHV_MOD_WSVGS: value->rValue = model->HSMHV_wsvgs; return(OK); case HSMHV_MOD_WFN1: value->rValue = model->HSMHV_wfn1; return(OK); case HSMHV_MOD_WFN2: value->rValue = model->HSMHV_wfn2; return(OK); case HSMHV_MOD_WFN3: value->rValue = model->HSMHV_wfn3; return(OK); case HSMHV_MOD_WFVBS: value->rValue = model->HSMHV_wfvbs; return(OK); case HSMHV_MOD_WNSTI: value->rValue = model->HSMHV_wnsti; return(OK); case HSMHV_MOD_WWSTI: value->rValue = model->HSMHV_wwsti; return(OK); case HSMHV_MOD_WSCSTI1: value->rValue = model->HSMHV_wscsti1; return(OK); case HSMHV_MOD_WSCSTI2: value->rValue = model->HSMHV_wscsti2; return(OK); case HSMHV_MOD_WVTHSTI: value->rValue = model->HSMHV_wvthsti; return(OK); case HSMHV_MOD_WMUESTI1: value->rValue = model->HSMHV_wmuesti1; return(OK); case HSMHV_MOD_WMUESTI2: value->rValue = model->HSMHV_wmuesti2; return(OK); case HSMHV_MOD_WMUESTI3: value->rValue = model->HSMHV_wmuesti3; return(OK); case HSMHV_MOD_WNSUBPSTI1: value->rValue = model->HSMHV_wnsubpsti1; return(OK); case HSMHV_MOD_WNSUBPSTI2: value->rValue = model->HSMHV_wnsubpsti2; return(OK); case HSMHV_MOD_WNSUBPSTI3: value->rValue = model->HSMHV_wnsubpsti3; return(OK); case HSMHV_MOD_WCGSO: value->rValue = model->HSMHV_wcgso; return(OK); case HSMHV_MOD_WCGDO: value->rValue = model->HSMHV_wcgdo; return(OK); case HSMHV_MOD_WJS0: value->rValue = model->HSMHV_wjs0; return(OK); case HSMHV_MOD_WJS0SW: value->rValue = model->HSMHV_wjs0sw; return(OK); case HSMHV_MOD_WNJ: value->rValue = model->HSMHV_wnj; return(OK); case HSMHV_MOD_WCISBK: value->rValue = model->HSMHV_wcisbk; return(OK); case HSMHV_MOD_WCLM1: value->rValue = model->HSMHV_wclm1; return(OK); case HSMHV_MOD_WCLM2: value->rValue = model->HSMHV_wclm2; return(OK); case HSMHV_MOD_WCLM3: value->rValue = model->HSMHV_wclm3; return(OK); case HSMHV_MOD_WWFC: value->rValue = model->HSMHV_wwfc; return(OK); case HSMHV_MOD_WGIDL1: value->rValue = model->HSMHV_wgidl1; return(OK); case HSMHV_MOD_WGIDL2: value->rValue = model->HSMHV_wgidl2; return(OK); case HSMHV_MOD_WGLEAK1: value->rValue = model->HSMHV_wgleak1; return(OK); case HSMHV_MOD_WGLEAK2: value->rValue = model->HSMHV_wgleak2; return(OK); case HSMHV_MOD_WGLEAK3: value->rValue = model->HSMHV_wgleak3; return(OK); case HSMHV_MOD_WGLEAK6: value->rValue = model->HSMHV_wgleak6; return(OK); case HSMHV_MOD_WGLKSD1: value->rValue = model->HSMHV_wglksd1; return(OK); case HSMHV_MOD_WGLKSD2: value->rValue = model->HSMHV_wglksd2; return(OK); case HSMHV_MOD_WGLKB1: value->rValue = model->HSMHV_wglkb1; return(OK); case HSMHV_MOD_WGLKB2: value->rValue = model->HSMHV_wglkb2; return(OK); case HSMHV_MOD_WNFTRP: value->rValue = model->HSMHV_wnftrp; return(OK); case HSMHV_MOD_WNFALP: value->rValue = model->HSMHV_wnfalp; return(OK); case HSMHV_MOD_WPTHROU: value->rValue = model->HSMHV_wpthrou; return(OK); case HSMHV_MOD_WVDIFFJ: value->rValue = model->HSMHV_wvdiffj; return(OK); case HSMHV_MOD_WIBPC1: value->rValue = model->HSMHV_wibpc1; return(OK); case HSMHV_MOD_WIBPC2: value->rValue = model->HSMHV_wibpc2; return(OK); case HSMHV_MOD_WCGBO: value->rValue = model->HSMHV_wcgbo; return(OK); case HSMHV_MOD_WCVDSOVER: value->rValue = model->HSMHV_wcvdsover; return(OK); case HSMHV_MOD_WFALPH: value->rValue = model->HSMHV_wfalph; return(OK); case HSMHV_MOD_WNPEXT: value->rValue = model->HSMHV_wnpext; return(OK); case HSMHV_MOD_WPOWRAT: value->rValue = model->HSMHV_wpowrat; return(OK); case HSMHV_MOD_WRD: value->rValue = model->HSMHV_wrd; return(OK); case HSMHV_MOD_WRD22: value->rValue = model->HSMHV_wrd22; return(OK); case HSMHV_MOD_WRD23: value->rValue = model->HSMHV_wrd23; return(OK); case HSMHV_MOD_WRD24: value->rValue = model->HSMHV_wrd24; return(OK); case HSMHV_MOD_WRDICT1: value->rValue = model->HSMHV_wrdict1; return(OK); case HSMHV_MOD_WRDOV13: value->rValue = model->HSMHV_wrdov13; return(OK); case HSMHV_MOD_WRDSLP1: value->rValue = model->HSMHV_wrdslp1; return(OK); case HSMHV_MOD_WRDVB: value->rValue = model->HSMHV_wrdvb; return(OK); case HSMHV_MOD_WRDVD: value->rValue = model->HSMHV_wrdvd; return(OK); case HSMHV_MOD_WRDVG11: value->rValue = model->HSMHV_wrdvg11; return(OK); case HSMHV_MOD_WRS: value->rValue = model->HSMHV_wrs; return(OK); case HSMHV_MOD_WRTH0: value->rValue = model->HSMHV_wrth0; return(OK); case HSMHV_MOD_WVOVER: value->rValue = model->HSMHV_wvover; return(OK); /* Cross-term dependence */ case HSMHV_MOD_PVMAX: value->rValue = model->HSMHV_pvmax; return(OK); case HSMHV_MOD_PBGTMP1: value->rValue = model->HSMHV_pbgtmp1; return(OK); case HSMHV_MOD_PBGTMP2: value->rValue = model->HSMHV_pbgtmp2; return(OK); case HSMHV_MOD_PEG0: value->rValue = model->HSMHV_peg0; return(OK); case HSMHV_MOD_PVFBOVER: value->rValue = model->HSMHV_pvfbover; return(OK); case HSMHV_MOD_PNOVER: value->rValue = model->HSMHV_pnover; return(OK); case HSMHV_MOD_PNOVERS: value->rValue = model->HSMHV_pnovers; return(OK); case HSMHV_MOD_PWL2: value->rValue = model->HSMHV_pwl2; return(OK); case HSMHV_MOD_PVFBC: value->rValue = model->HSMHV_pvfbc; return(OK); case HSMHV_MOD_PNSUBC: value->rValue = model->HSMHV_pnsubc; return(OK); case HSMHV_MOD_PNSUBP: value->rValue = model->HSMHV_pnsubp; return(OK); case HSMHV_MOD_PSCP1: value->rValue = model->HSMHV_pscp1; return(OK); case HSMHV_MOD_PSCP2: value->rValue = model->HSMHV_pscp2; return(OK); case HSMHV_MOD_PSCP3: value->rValue = model->HSMHV_pscp3; return(OK); case HSMHV_MOD_PSC1: value->rValue = model->HSMHV_psc1; return(OK); case HSMHV_MOD_PSC2: value->rValue = model->HSMHV_psc2; return(OK); case HSMHV_MOD_PSC3: value->rValue = model->HSMHV_psc3; return(OK); case HSMHV_MOD_PPGD1: value->rValue = model->HSMHV_ppgd1; return(OK); case HSMHV_MOD_PPGD3: value->rValue = model->HSMHV_ppgd3; return(OK); case HSMHV_MOD_PNDEP: value->rValue = model->HSMHV_pndep; return(OK); case HSMHV_MOD_PNINV: value->rValue = model->HSMHV_pninv; return(OK); case HSMHV_MOD_PMUECB0: value->rValue = model->HSMHV_pmuecb0; return(OK); case HSMHV_MOD_PMUECB1: value->rValue = model->HSMHV_pmuecb1; return(OK); case HSMHV_MOD_PMUEPH1: value->rValue = model->HSMHV_pmueph1; return(OK); case HSMHV_MOD_PVTMP: value->rValue = model->HSMHV_pvtmp; return(OK); case HSMHV_MOD_PWVTH0: value->rValue = model->HSMHV_pwvth0; return(OK); case HSMHV_MOD_PMUESR1: value->rValue = model->HSMHV_pmuesr1; return(OK); case HSMHV_MOD_PMUETMP: value->rValue = model->HSMHV_pmuetmp; return(OK); case HSMHV_MOD_PSUB1: value->rValue = model->HSMHV_psub1; return(OK); case HSMHV_MOD_PSUB2: value->rValue = model->HSMHV_psub2; return(OK); case HSMHV_MOD_PSVDS: value->rValue = model->HSMHV_psvds; return(OK); case HSMHV_MOD_PSVBS: value->rValue = model->HSMHV_psvbs; return(OK); case HSMHV_MOD_PSVGS: value->rValue = model->HSMHV_psvgs; return(OK); case HSMHV_MOD_PFN1: value->rValue = model->HSMHV_pfn1; return(OK); case HSMHV_MOD_PFN2: value->rValue = model->HSMHV_pfn2; return(OK); case HSMHV_MOD_PFN3: value->rValue = model->HSMHV_pfn3; return(OK); case HSMHV_MOD_PFVBS: value->rValue = model->HSMHV_pfvbs; return(OK); case HSMHV_MOD_PNSTI: value->rValue = model->HSMHV_pnsti; return(OK); case HSMHV_MOD_PWSTI: value->rValue = model->HSMHV_pwsti; return(OK); case HSMHV_MOD_PSCSTI1: value->rValue = model->HSMHV_pscsti1; return(OK); case HSMHV_MOD_PSCSTI2: value->rValue = model->HSMHV_pscsti2; return(OK); case HSMHV_MOD_PVTHSTI: value->rValue = model->HSMHV_pvthsti; return(OK); case HSMHV_MOD_PMUESTI1: value->rValue = model->HSMHV_pmuesti1; return(OK); case HSMHV_MOD_PMUESTI2: value->rValue = model->HSMHV_pmuesti2; return(OK); case HSMHV_MOD_PMUESTI3: value->rValue = model->HSMHV_pmuesti3; return(OK); case HSMHV_MOD_PNSUBPSTI1: value->rValue = model->HSMHV_pnsubpsti1; return(OK); case HSMHV_MOD_PNSUBPSTI2: value->rValue = model->HSMHV_pnsubpsti2; return(OK); case HSMHV_MOD_PNSUBPSTI3: value->rValue = model->HSMHV_pnsubpsti3; return(OK); case HSMHV_MOD_PCGSO: value->rValue = model->HSMHV_pcgso; return(OK); case HSMHV_MOD_PCGDO: value->rValue = model->HSMHV_pcgdo; return(OK); case HSMHV_MOD_PJS0: value->rValue = model->HSMHV_pjs0; return(OK); case HSMHV_MOD_PJS0SW: value->rValue = model->HSMHV_pjs0sw; return(OK); case HSMHV_MOD_PNJ: value->rValue = model->HSMHV_pnj; return(OK); case HSMHV_MOD_PCISBK: value->rValue = model->HSMHV_pcisbk; return(OK); case HSMHV_MOD_PCLM1: value->rValue = model->HSMHV_pclm1; return(OK); case HSMHV_MOD_PCLM2: value->rValue = model->HSMHV_pclm2; return(OK); case HSMHV_MOD_PCLM3: value->rValue = model->HSMHV_pclm3; return(OK); case HSMHV_MOD_PWFC: value->rValue = model->HSMHV_pwfc; return(OK); case HSMHV_MOD_PGIDL1: value->rValue = model->HSMHV_pgidl1; return(OK); case HSMHV_MOD_PGIDL2: value->rValue = model->HSMHV_pgidl2; return(OK); case HSMHV_MOD_PGLEAK1: value->rValue = model->HSMHV_pgleak1; return(OK); case HSMHV_MOD_PGLEAK2: value->rValue = model->HSMHV_pgleak2; return(OK); case HSMHV_MOD_PGLEAK3: value->rValue = model->HSMHV_pgleak3; return(OK); case HSMHV_MOD_PGLEAK6: value->rValue = model->HSMHV_pgleak6; return(OK); case HSMHV_MOD_PGLKSD1: value->rValue = model->HSMHV_pglksd1; return(OK); case HSMHV_MOD_PGLKSD2: value->rValue = model->HSMHV_pglksd2; return(OK); case HSMHV_MOD_PGLKB1: value->rValue = model->HSMHV_pglkb1; return(OK); case HSMHV_MOD_PGLKB2: value->rValue = model->HSMHV_pglkb2; return(OK); case HSMHV_MOD_PNFTRP: value->rValue = model->HSMHV_pnftrp; return(OK); case HSMHV_MOD_PNFALP: value->rValue = model->HSMHV_pnfalp; return(OK); case HSMHV_MOD_PPTHROU: value->rValue = model->HSMHV_ppthrou; return(OK); case HSMHV_MOD_PVDIFFJ: value->rValue = model->HSMHV_pvdiffj; return(OK); case HSMHV_MOD_PIBPC1: value->rValue = model->HSMHV_pibpc1; return(OK); case HSMHV_MOD_PIBPC2: value->rValue = model->HSMHV_pibpc2; return(OK); case HSMHV_MOD_PCGBO: value->rValue = model->HSMHV_pcgbo; return(OK); case HSMHV_MOD_PCVDSOVER: value->rValue = model->HSMHV_pcvdsover; return(OK); case HSMHV_MOD_PFALPH: value->rValue = model->HSMHV_pfalph; return(OK); case HSMHV_MOD_PNPEXT: value->rValue = model->HSMHV_pnpext; return(OK); case HSMHV_MOD_PPOWRAT: value->rValue = model->HSMHV_ppowrat; return(OK); case HSMHV_MOD_PRD: value->rValue = model->HSMHV_prd; return(OK); case HSMHV_MOD_PRD22: value->rValue = model->HSMHV_prd22; return(OK); case HSMHV_MOD_PRD23: value->rValue = model->HSMHV_prd23; return(OK); case HSMHV_MOD_PRD24: value->rValue = model->HSMHV_prd24; return(OK); case HSMHV_MOD_PRDICT1: value->rValue = model->HSMHV_prdict1; return(OK); case HSMHV_MOD_PRDOV13: value->rValue = model->HSMHV_prdov13; return(OK); case HSMHV_MOD_PRDSLP1: value->rValue = model->HSMHV_prdslp1; return(OK); case HSMHV_MOD_PRDVB: value->rValue = model->HSMHV_prdvb; return(OK); case HSMHV_MOD_PRDVD: value->rValue = model->HSMHV_prdvd; return(OK); case HSMHV_MOD_PRDVG11: value->rValue = model->HSMHV_prdvg11; return(OK); case HSMHV_MOD_PRS: value->rValue = model->HSMHV_prs; return(OK); case HSMHV_MOD_PRTH0: value->rValue = model->HSMHV_prth0; return(OK); case HSMHV_MOD_PVOVER: value->rValue = model->HSMHV_pvover; return(OK); case HSMHV_MOD_VGS_MAX: value->rValue = model->HSMHVvgsMax; return(OK); case HSMHV_MOD_VGD_MAX: value->rValue = model->HSMHVvgdMax; return(OK); case HSMHV_MOD_VGB_MAX: value->rValue = model->HSMHVvgbMax; return(OK); case HSMHV_MOD_VDS_MAX: value->rValue = model->HSMHVvdsMax; return(OK); case HSMHV_MOD_VBS_MAX: value->rValue = model->HSMHVvbsMax; return(OK); case HSMHV_MOD_VBD_MAX: value->rValue = model->HSMHVvbdMax; return(OK); case HSMHV_MOD_VGSR_MAX: value->rValue = model->HSMHVvgsrMax; return(OK); case HSMHV_MOD_VGDR_MAX: value->rValue = model->HSMHVvgdrMax; return(OK); case HSMHV_MOD_VGBR_MAX: value->rValue = model->HSMHVvgbrMax; return(OK); case HSMHV_MOD_VBSR_MAX: value->rValue = model->HSMHVvbsrMax; return(OK); case HSMHV_MOD_VBDR_MAX: value->rValue = model->HSMHVvbdrMax; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhvext.h0000644000175000017500000000312313546075722022731 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2012 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 1 SUBVERSION : 2 REVISION : 4 ) Model Parameter VERSION : 1.23 FILE : hsmhvext.h DATE : 2013.04.30 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ extern int HSMHVacLoad(GENmodel *,CKTcircuit*); extern int HSMHVask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*); extern int HSMHVconvTest(GENmodel *,CKTcircuit*); extern int HSMHVgetic(GENmodel*,CKTcircuit*); extern int HSMHVload(GENmodel*,CKTcircuit*); extern int HSMHVmAsk(CKTcircuit*,GENmodel *,int, IFvalue*); extern int HSMHVmParam(int,IFvalue*,GENmodel*); extern void HSMHVmosCap(CKTcircuit*, double, double, double, double*, double, double, double, double, double, double, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*); extern int HSMHVparam(int,IFvalue*,GENinstance*,IFvalue*); extern int HSMHVpzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int HSMHVsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int HSMHVunsetup(GENmodel*,CKTcircuit*); extern int HSMHVtemp(GENmodel*,CKTcircuit*); extern int HSMHVtrunc(GENmodel*,CKTcircuit*,double*); extern int HSMHVnoise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int HSMHVsoaCheck(CKTcircuit *, GENmodel *); tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhvevalenv.h0000644000175000017500000000456213546075722023601 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2012 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 1 SUBVERSION : 2 REVISION : 4 ) Model Parameter VERSION : 1.23 FILE : hsmhvevalenv.h DATE : 2013.04.30 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ #ifndef HSMHV_EVAL_ENV_H #define HSMHV_EVAL_ENV_H /* macros and constants used in hsmhveval2yz.c */ /*---------------------------------------------------* * Numerical constants. (macro) *-----------------*/ /* machine epsilon */ #if defined(_FLOAT_H) && defined(DBL_EPSILON) #define C_EPS_M (DBL_EPSILON) #else #define C_EPS_M (2.2204460492503131e-16) #endif #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THR 34.0 /* sqrt(2) */ #define C_SQRT_2 (1.414213562373095e+00) /* 1/3 */ #define C_1o3 (3.333333333333333e-01) /* 2/3 */ #define C_2o3 (6.666666666666667e-01) /* 2^(1/3) */ #define C_2p_1o3 (1.259921049894873e+00) /* Pi */ #define C_Pi (3.141592653589793) #define C_Pio2 (1.570796326794897) /* Unit change */ #define C_m2cm_p2 (1.0e4) #define C_m2um (1.0e6) /*---------------------------------------------------* * Physical constants/properties. (macro) *-----------------*/ /* Elemental charge */ #define C_QE (1.6021918e-19) /* Boltzmann constant */ #define C_KB (1.3806226e-23) /* Permitivity of Si, SiO2 and vacuum */ #define C_ESI (1.034943e-10) #define C_EOX (3.453133e-11) #define C_VAC (8.8541878e-12) /* Room temperature constants */ #define C_T300 (300e+00) #define C_b300 (3.868283e+01) /* #define C_Eg0 (1.1785e0) */ /*changed to parameter sIN.eg0*/ /* Build-in potential */ /*#define C_Vbi (1.0e0)*/ /* changed to parameter sIN.vbi */ /* Intrinsic carrier density at 300K */ #define C_Nin0 (1.04e+16) /*---------------------------------------------------* * Functions. (macro) Take care of the arguments. *-----------------*/ #define Fn_Sqr(x) ( (x)*(x) ) /* x^2 */ #define Fn_Max(x,y) ( (x) >= (y) ? (x) : (y) ) /* max[x,y] */ #define Fn_Min(x,y) ( (x) <= (y) ? (x) : (y) ) /* min[x,y] */ #define Fn_Sgn(x) ( (x) >= 0 ? (1) : (-1) ) /* sign[x] */ #endif /* HSMHV_EVAL_ENV_H */ tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhv.c0000644000175000017500000014464113546075722022216 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2012 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 1 SUBVERSION : 2 REVISION : 4 ) Model Parameter VERSION : 1.23 FILE : hsmhv.c DATE : 2013.04.30 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "hsmhvdef.h" #include "ngspice/suffix.h" IFparm HSMHVpTable[] = { /* parameters */ IOP( "coselfheat", HSMHV_COSELFHEAT, IF_INTEGER, "Calculation of self heating model"), IOP( "cosubnode", HSMHV_COSUBNODE, IF_INTEGER, "Switch tempNode to subNode"), IOP( "l", HSMHV_L, IF_REAL , "Length"), IOP( "w", HSMHV_W, IF_REAL , "Width"), IOP( "ad", HSMHV_AD, IF_REAL , "Drain area"), IOP( "as", HSMHV_AS, IF_REAL , "Source area"), IOP( "pd", HSMHV_PD, IF_REAL , "Drain perimeter"), IOP( "ps", HSMHV_PS, IF_REAL , "Source perimeter"), IOP( "nrd", HSMHV_NRD, IF_REAL , "Number of squares in drain"), IOP( "nrs", HSMHV_NRS, IF_REAL , "Number of squares in source"), IOP( "dtemp", HSMHV_DTEMP,IF_REAL , ""), IOP( "off", HSMHV_OFF, IF_FLAG , "Device is initially off"), IP ( "ic", HSMHV_IC, IF_REALVEC , "Vector of DS,GS,BS initial voltages"), IOP("corbnet", HSMHV_CORBNET, IF_INTEGER, "Activate body resistance (1) or not (0)"), IOP("rbpb", HSMHV_RBPB, IF_REAL, ""), IOP("rbpd", HSMHV_RBPD, IF_REAL, ""), IOP("rbps", HSMHV_RBPS, IF_REAL, ""), IOP("rbdb", HSMHV_RBDB, IF_REAL, ""), IOP("rbsb", HSMHV_RBSB, IF_REAL, ""), IOP("corg", HSMHV_CORG, IF_INTEGER, "Activate gate resistance (1) or not (0)"), IOP("ngcon", HSMHV_NGCON, IF_REAL, "Number of gate contacts"), IOP("xgw", HSMHV_XGW, IF_REAL, "Distance from gate contact to channel edge"), IOP("xgl", HSMHV_XGL, IF_REAL, "Offset of gate length due to variation in patterning"), IOP("nf", HSMHV_NF, IF_REAL, "Number of fingers"), IOP("sa", HSMHV_SA, IF_REAL, "Distance from STI edge to Gate edge [m]"), IOP("sb", HSMHV_SB, IF_REAL, "Distance from STI edge to Gate edge [m]"), IOP("sd", HSMHV_SD, IF_REAL, "Distance from Gate edge to Gate edge [m]"), IOP("nsubcdfm", HSMHV_NSUBCDFM, IF_REAL, "Constant part of Nsub for DFM [1/cm^3]"), IOP("m", HSMHV_M, IF_REAL, "Multiplication factor [-]"), IOP("subld1", HSMHV_SUBLD1, IF_REAL, "Parameter for impact-ionization current in the drift region [-]"), IOP("subld2", HSMHV_SUBLD2, IF_REAL, "Parameter for impact-ionization current in the drift region [m^{-1}*V^{3/2}]"), IOP("lover", HSMHV_LOVER, IF_REAL, "Overlap length on source side [m]"), IOP("lovers", HSMHV_LOVERS, IF_REAL, "Overlap length on source side [m]"), IOP("loverld", HSMHV_LOVERLD, IF_REAL, "Overlap length on drain side [m]"), IOP("ldrift1", HSMHV_LDRIFT1, IF_REAL, "Parameter for drift region length-1 [m]"), IOP("ldrift2", HSMHV_LDRIFT2, IF_REAL, "Parameter for drift region length-2 [m]"), IOP("ldrift1s", HSMHV_LDRIFT1S, IF_REAL, "Parameter for drift region length-1 on source side[m]"), IOP("ldrift2s", HSMHV_LDRIFT2S, IF_REAL, "Parameter for drift region length-2 on source side[m]"), /* Output Physical Values: */ OP ( "ids", HSMHV_CD, IF_REAL , "Ids"), /* Drain-Source current */ OP ( "isub", HSMHV_ISUB, IF_REAL , "Isub"), /* Substrate current */ OP ( "igidl", HSMHV_IGIDL, IF_REAL , "Igidl"), /* Gate-Induced Drain Leakage current */ OP ( "igisl", HSMHV_IGISL, IF_REAL , "Igisl"), /* Gate-Induced Source Leakage current */ OP ( "igd", HSMHV_IGD, IF_REAL , "Igd"), /* Gate-Drain current */ OP ( "igs", HSMHV_IGS, IF_REAL , "Igs"), /* Gate-Source current */ OP ( "igb", HSMHV_IGB, IF_REAL , "Igb"), /* Gate-Substrate current */ OP ( "gm", HSMHV_GM, IF_REAL , "Gm"), /* Transconductance */ OP ( "gds", HSMHV_GDS, IF_REAL , "Gds"), /* Channel conductance */ OP ( "gmbs", HSMHV_GMBS, IF_REAL , "Gmbs"), /* Body effect (Back gate) transconductance */ OP ( "gmt", HSMHV_GMT, IF_REAL , "GmT"), /* Temp - transconductance ----SHE----*/ OP ( "von", HSMHV_VON, IF_REAL , "Von"), /* Threshold voltage */ OP ( "vdsat", HSMHV_VDSAT, IF_REAL , "Vdsat"), /* Saturation voltage */ OP ( "qb", HSMHV_QB, IF_REAL , "Qb"), /* Bulk charge */ OP ( "qg", HSMHV_QG, IF_REAL , "Qg"), /* Gate charge */ OP ( "qd", HSMHV_QD, IF_REAL , "Qd"), /* Drain charge */ OP ( "cgg", HSMHV_CGG, IF_REAL , "Cgg"), /* MOSFET capacitance */ OP ( "cgd", HSMHV_CGD, IF_REAL , "Cgd"), /* MOSFET capacitance */ OP ( "cgs", HSMHV_CGS, IF_REAL , "Cgs"), /* MOSFET capacitance */ OP ( "cbg", HSMHV_CBG, IF_REAL , "Cbg"), /* MOSFET capacitance */ OP ( "cbs", HSMHV_CBSB, IF_REAL , "Cbs"), /* MOSFET capacitance */ OP ( "cbd", HSMHV_CBDB, IF_REAL , "Cbd"), /* MOSFET capacitance */ OP ( "cdg", HSMHV_CDG, IF_REAL , "Cdg"), /* MOSFET capacitance */ OP ( "cdd", HSMHV_CDD, IF_REAL , "Cdd"), /* MOSFET capacitance */ OP ( "cds", HSMHV_CDS, IF_REAL , "Cds"), /* MOSFET capacitance */ OP ( "cgdo", HSMHV_CGDO, IF_REAL , "Cgdo"), /* MOSFET overlap capacitance */ OP ( "cgso", HSMHV_CGSO, IF_REAL , "Cgso"), /* MOSFET overlap capacitance */ OP ( "cgbo", HSMHV_CGBO, IF_REAL , "Cgbo"), /* MOSFET overlap capacitance */ OP ( "ibd", HSMHV_CBD, IF_REAL , "Ibd"), /* Diode current */ OP ( "ibs", HSMHV_CBS, IF_REAL , "Ibs"), /* Diode current */ OP ( "gbd", HSMHV_GBD, IF_REAL , "Gbd"), /* Diode conductance */ OP ( "gbs", HSMHV_GBS, IF_REAL , "Gbs"), /* Diode conductance */ OP ( "capbd", HSMHV_CAPBD, IF_REAL , "Capbd"), /* Diode capacitance */ OP ( "capbs", HSMHV_CAPBS, IF_REAL , "Capbs") /* Diode capacitance */ }; IFparm HSMHVmPTable[] = { /* model parameters */ IP("nmos", HSMHV_MOD_NMOS, IF_FLAG, ""), IP("pmos", HSMHV_MOD_PMOS, IF_FLAG, ""), IOP("level", HSMHV_MOD_LEVEL, IF_INTEGER, ""), IOP("info", HSMHV_MOD_INFO, IF_INTEGER, "Information level (for debug, etc.)"), IOP("noise", HSMHV_MOD_NOISE, IF_INTEGER, "Noise model selector"), IOP("version", HSMHV_MOD_VERSION, IF_STRING, "Model version"), IOP("show", HSMHV_MOD_SHOW, IF_INTEGER, "Show physical value"), IOP("corsrd", HSMHV_MOD_CORSRD, IF_INTEGER, "Handling of Rs and Rd"), IOP("corg", HSMHV_MOD_CORG, IF_INTEGER, "Activate gate resistance (1) or not (0)"), IOP("coiprv", HSMHV_MOD_COIPRV, IF_INTEGER, "Use ids_prv as initial guess of Ids (internal flag)"), IOP("copprv", HSMHV_MOD_COPPRV, IF_INTEGER, "Use ps{0/l}_prv as initial guess of Ps{0/l} (internal flag)"), IOP("coadov", HSMHV_MOD_COADOV, IF_INTEGER, "Add overlap to intrisic"), IOP("coisub", HSMHV_MOD_COISUB, IF_INTEGER, "Calculate isub"), IOP("coiigs", HSMHV_MOD_COIIGS, IF_INTEGER, "Calculate igate"), IOP("cogidl", HSMHV_MOD_COGIDL, IF_INTEGER, "Calculate igidl"), IOP("coovlp", HSMHV_MOD_COOVLP, IF_INTEGER, "Calculate overlap charge on the drain side"), IOP("coovlps", HSMHV_MOD_COOVLPS, IF_INTEGER, "Calculate overlap charge on the source side"), IOP("coflick", HSMHV_MOD_COFLICK, IF_INTEGER, "Calculate 1/f noise"), IOP("coisti", HSMHV_MOD_COISTI, IF_INTEGER, "Calculate STI"), IOP("conqs", HSMHV_MOD_CONQS, IF_INTEGER, "Calculate in nqs mode or qs mode"), IOP("corbnet", HSMHV_MOD_CORBNET, IF_INTEGER, ""), IOP("cothrml", HSMHV_MOD_COTHRML, IF_INTEGER, "Calculate thermal noise"), IOP("coign", HSMHV_MOD_COIGN, IF_INTEGER, "Calculate induced gate noise"), IOP("codfm", HSMHV_MOD_CODFM, IF_INTEGER, "Calculation of model for DFM"), IOP("coqovsm", HSMHV_MOD_COQOVSM, IF_INTEGER, "select smoothing method of Qover"), IOP("coselfheat", HSMHV_MOD_COSELFHEAT, IF_INTEGER, "Calculation of self heating model"), IOP("cosubnode", HSMHV_MOD_COSUBNODE, IF_INTEGER, "Switch tempNode to subNode"), IOP("cosym", HSMHV_MOD_COSYM, IF_INTEGER, "Model selector for symmetry device"), IOP("cotemp", HSMHV_MOD_COTEMP, IF_INTEGER, "Model flag for temperature dependence"), IOP("coldrift", HSMHV_MOD_COLDRIFT, IF_INTEGER, "selector for Ldrift parameter"), IOP("vbsmin", HSMHV_MOD_VBSMIN, IF_REAL, "Minimum back bias voltage to be treated in hsmhveval [V]"), IOP("vmax", HSMHV_MOD_VMAX, IF_REAL, "Saturation velocity [cm/s]"), IOP("vmaxt1", HSMHV_MOD_VMAXT1, IF_REAL, "Saturation velocity coeff. [-]"), IOP("vmaxt2", HSMHV_MOD_VMAXT2, IF_REAL, "Saturation velocity coeff. [-]"), IOP("bgtmp1", HSMHV_MOD_BGTMP1, IF_REAL, "First order temp. coeff. for band gap [V/K]"), IOP("bgtmp2", HSMHV_MOD_BGTMP2, IF_REAL, "Second order temp. coeff. for band gap [V/K^2]"), IOP("eg0", HSMHV_MOD_EG0, IF_REAL, ""), IOP("tox", HSMHV_MOD_TOX, IF_REAL, "Oxide thickness [m]"), IOP("xld", HSMHV_MOD_XLD, IF_REAL, "Lateral diffusion of S/D under the gate [m]"), IOP("xldld", HSMHV_MOD_XLDLD, IF_REAL, "Lateral diffusion of Drain under the gate [m]"), IOP("xwdld", HSMHV_MOD_XWDLD, IF_REAL, ""), IOP("lover", HSMHV_MOD_LOVER, IF_REAL, "Overlap length on source side [m], alias for lovers"), IOP("lovers", HSMHV_MOD_LOVERS, IF_REAL, "Overlap length on source side [m]"), IOP("rdov11", HSMHV_MOD_RDOV11, IF_REAL, "Dependence coeff. for overlap length"), IOP("rdov12", HSMHV_MOD_RDOV12, IF_REAL, "Dependence coeff. for overlap length"), IOP("rdov13", HSMHV_MOD_RDOV13, IF_REAL, "Dependence coeff. for overlap length"), IOP("rdslp1", HSMHV_MOD_RDSLP1, IF_REAL, "LDRIFT1 dependence of resistance for CORSRD=1,3"), IOP("rdict1", HSMHV_MOD_RDICT1, IF_REAL, "LDRIFT1 dependence of resistance for CORSRD=1,3"), IOP("rdslp2", HSMHV_MOD_RDSLP2, IF_REAL, "LDRIFT2 dependence of resistance for CORSRD=1,3"), IOP("rdict2", HSMHV_MOD_RDICT2, IF_REAL, "LDRIFT2 dependence of resistance for CORSRD=1,3"), IOP("loverld", HSMHV_MOD_LOVERLD, IF_REAL, "Overlap length on the drain side"), IOP("ldrift1", HSMHV_MOD_LDRIFT1, IF_REAL, "Drift region length-1 on the drain side[m]"), IOP("ldrift2", HSMHV_MOD_LDRIFT2, IF_REAL, "Drift region length-2 on the drain side[m]"), IOP("ldrift1s", HSMHV_MOD_LDRIFT1S, IF_REAL, "Drift region length-1 on the source side[m]"), IOP("ldrift2s", HSMHV_MOD_LDRIFT2S, IF_REAL, "Drift region length-2 on the source side[m]"), IOP("subld1", HSMHV_MOD_SUBLD1, IF_REAL, "Impact-ionization current in the drift region [-]"), IOP("subld2", HSMHV_MOD_SUBLD2, IF_REAL, "Impact-ionization current in the drift region [m^{-1}*V^{3/2}]"), IOP("ddltmax", HSMHV_MOD_DDLTMAX, IF_REAL, ""), /* Vdseff */ IOP("ddltslp", HSMHV_MOD_DDLTSLP, IF_REAL, ""), /* Vdseff */ IOP("ddltict", HSMHV_MOD_DDLTICT, IF_REAL, ""), /* Vdseff */ IOP("vfbover", HSMHV_MOD_VFBOVER, IF_REAL, ""), IOP("nover", HSMHV_MOD_NOVER, IF_REAL, ""), IOP("novers", HSMHV_MOD_NOVERS, IF_REAL, ""), IOP("xwd", HSMHV_MOD_XWD, IF_REAL, "Lateral diffusion along the width dir. [m]"), IOP("xwdc", HSMHV_MOD_XWDC, IF_REAL, "Lateral diffusion along the width dir. for capacitance [m]"), IOP("xl", HSMHV_MOD_XL, IF_REAL, "Gate length offset due to mask/etch effect [m]"), IOP("xw", HSMHV_MOD_XW, IF_REAL, "Gate width offset due to mask/etch effect [m]"), IOP("saref", HSMHV_MOD_SAREF, IF_REAL, "Reference distance from STI edge to Gate edge [m]"), IOP("sbref", HSMHV_MOD_SBREF, IF_REAL, "Reference distance from STI edge to Gate edge [m]"), IOP("ll", HSMHV_MOD_LL, IF_REAL, "Gate length parameter"), IOP("lld", HSMHV_MOD_LLD, IF_REAL, "Gate length parameter"), IOP("lln", HSMHV_MOD_LLN, IF_REAL, "Gate length parameter"), IOP("wl", HSMHV_MOD_WL, IF_REAL, "Gate width parameter"), IOP("wl1", HSMHV_MOD_WL1, IF_REAL, "Gate width parameter"), IOP("wl1p", HSMHV_MOD_WL1P, IF_REAL, "Gate width parameter"), IOP("wl2", HSMHV_MOD_WL2, IF_REAL, "Gate width parameter"), IOP("wl2p", HSMHV_MOD_WL2P, IF_REAL, "Gate width parameter"), IOP("wld", HSMHV_MOD_WLD, IF_REAL, "Gate width parameter"), IOP("wln", HSMHV_MOD_WLN, IF_REAL, "Gate width parameter"), IOP("xqy", HSMHV_MOD_XQY, IF_REAL, "[m]"), IOP("xqy1", HSMHV_MOD_XQY1, IF_REAL, "[F m^{XQY2}]"), IOP("xqy2", HSMHV_MOD_XQY2, IF_REAL, "[-]"), IOP("rs", HSMHV_MOD_RS, IF_REAL, "Source contact resistance [ohm m]"), IOP("rd", HSMHV_MOD_RD, IF_REAL, "Drain contact resistance [ohm m]"), IOP("rsh", HSMHV_MOD_RSH, IF_REAL, "Source/drain diffusion sheet resistance [ohm]"), IOP("rshg", HSMHV_MOD_RSHG, IF_REAL, "Gate-elecrode sheet resistance"), IOP("vfbc", HSMHV_MOD_VFBC, IF_REAL, "Constant part of Vfb [V]"), IOP("vbi", HSMHV_MOD_VBI, IF_REAL, "Built-in potential [V]"), IOP("nsubc", HSMHV_MOD_NSUBC, IF_REAL, "Constant part of Nsub [1/cm^3]"), IOP("parl2", HSMHV_MOD_PARL2, IF_REAL, "Under diffusion [m]"), IOP("lp", HSMHV_MOD_LP, IF_REAL, "Length of pocket potential [m]"), IOP("nsubp", HSMHV_MOD_NSUBP, IF_REAL, "[1/cm^3]"), IOP("nsubp0", HSMHV_MOD_NSUBP0, IF_REAL, "Pocket implant parameter"), IOP("nsubwp", HSMHV_MOD_NSUBWP, IF_REAL, "Pocket implant parameter"), IOP("scp1", HSMHV_MOD_SCP1, IF_REAL, "Parameter for pocket [-]"), IOP("scp2", HSMHV_MOD_SCP2, IF_REAL, "Parameter for pocket [1/V]"), IOP("scp3", HSMHV_MOD_SCP3, IF_REAL, "Parameter for pocket [m/V]"), IOP("sc1", HSMHV_MOD_SC1, IF_REAL, "Parameter for SCE [-]"), IOP("sc2", HSMHV_MOD_SC2, IF_REAL, "Parameter for SCE [1/V]"), IOP("sc3", HSMHV_MOD_SC3, IF_REAL, "Parameter for SCE [m/V]"), IOP("sc4", HSMHV_MOD_SC4, IF_REAL, "Parameter for SCE [1/V]"), IOP("pgd1", HSMHV_MOD_PGD1, IF_REAL, "Parameter for gate-poly depletion [V]"), IOP("pgd2", HSMHV_MOD_PGD2, IF_REAL, "Parameter for gate-poly depletion [V]"), IOP("pgd3", HSMHV_MOD_PGD3, IF_REAL, "Parameter for gate-poly depletion [-]"), IOP("pgd4", HSMHV_MOD_PGD4, IF_REAL, "Parameter for gate-poly depletion [-]"), IOP("ndep", HSMHV_MOD_NDEP, IF_REAL, "Coeff. of Qbm for Eeff [-]"), IOP("ndepl", HSMHV_MOD_NDEPL, IF_REAL, "Coeff. of Qbm for Eeff [-]"), IOP("ndeplp", HSMHV_MOD_NDEPLP, IF_REAL, "Coeff. of Qbm for Eeff [-]"), IOP("ninv", HSMHV_MOD_NINV, IF_REAL, "Coeff. of Qnm for Eeff [-]"), IOP("ninvd", HSMHV_MOD_NINVD, IF_REAL, "Modification of Vdse dependence on Eeff [1/V]"), IOP("ninvdw", HSMHV_MOD_NINVDW, IF_REAL, "Coeff of modification of Vdse dependence on Eeff [-]"), IOP("ninvdwp", HSMHV_MOD_NINVDWP, IF_REAL, "Coeff of modification of Vdse dependence on Eeff [-]"), IOP("ninvdt1", HSMHV_MOD_NINVDT1, IF_REAL, "Coeff of modification of Vdse dependence on Eeff [-]"), IOP("ninvdt2", HSMHV_MOD_NINVDT2, IF_REAL, "Coeff of modification of Vdse dependence on Eeff [-]"), IOP("muecb0", HSMHV_MOD_MUECB0, IF_REAL, "Const. part of coulomb scattering [cm^2/Vs]"), IOP("muecb1", HSMHV_MOD_MUECB1, IF_REAL, "Coeff. for coulomb scattering [cm^2/Vs]"), IOP("mueph0", HSMHV_MOD_MUEPH0, IF_REAL, "Power of Eeff for phonon scattering [-]"), IOP("mueph1", HSMHV_MOD_MUEPH1, IF_REAL, ""), IOP("muephw", HSMHV_MOD_MUEPHW, IF_REAL, ""), IOP("muepwp", HSMHV_MOD_MUEPWP, IF_REAL, "Phonon scattering parameter"), IOP("muephl", HSMHV_MOD_MUEPHL, IF_REAL, "Phonon scattering parameter"), IOP("mueplp", HSMHV_MOD_MUEPLP, IF_REAL, "Phonon scattering parameter"), IOP("muephs", HSMHV_MOD_MUEPHS, IF_REAL, ""), IOP("muepsp", HSMHV_MOD_MUEPSP, IF_REAL, ""), IOP("vtmp", HSMHV_MOD_VTMP, IF_REAL, ""), IOP("wvth0", HSMHV_MOD_WVTH0, IF_REAL, ""), IOP("muesr0", HSMHV_MOD_MUESR0, IF_REAL, "Power of Eeff for S.R. scattering [-]"), IOP("muesr1", HSMHV_MOD_MUESR1, IF_REAL, "Coeff. for S.R. scattering [-]"), IOP("muesrl", HSMHV_MOD_MUESRL, IF_REAL, "Surface roughness parameter"), IOP("muesrw", HSMHV_MOD_MUESRW, IF_REAL, "Change of surface roughness related mobility"), IOP("mueswp", HSMHV_MOD_MUESWP, IF_REAL, "Change of surface roughness related mobility"), IOP("mueslp", HSMHV_MOD_MUESLP, IF_REAL, "Surface roughness parameter"), IOP("muetmp", HSMHV_MOD_MUETMP, IF_REAL, "Parameter for mobility [-]"), IOP("bb", HSMHV_MOD_BB, IF_REAL, "Empirical mobility model coefficient [-]"), IOP("sub1", HSMHV_MOD_SUB1, IF_REAL, "Parameter for Isub [1/V]"), IOP("sub2", HSMHV_MOD_SUB2, IF_REAL, "Parameter for Isub [V]"), IOP("svgs", HSMHV_MOD_SVGS, IF_REAL, "Coefficient for Vg of Psislsat"), IOP("svbs", HSMHV_MOD_SVBS, IF_REAL, "Coefficient for Vbs of Psislsat"), IOP("svbsl", HSMHV_MOD_SVBSL, IF_REAL, " "), IOP("svds", HSMHV_MOD_SVDS, IF_REAL, " "), IOP("slg", HSMHV_MOD_SLG, IF_REAL, " "), IOP("sub1l", HSMHV_MOD_SUB1L, IF_REAL, " "), IOP("sub2l", HSMHV_MOD_SUB2L, IF_REAL, " "), IOP("fn1", HSMHV_MOD_FN1, IF_REAL, " "), IOP("fn2", HSMHV_MOD_FN2, IF_REAL, " "), IOP("fn3", HSMHV_MOD_FN3, IF_REAL, " "), IOP("fvbs", HSMHV_MOD_FVBS, IF_REAL, " "), IOP("svgsl", HSMHV_MOD_SVGSL, IF_REAL, " "), IOP("svgslp", HSMHV_MOD_SVGSLP, IF_REAL, " "), IOP("svgswp", HSMHV_MOD_SVGSWP, IF_REAL, " "), IOP("svgsw", HSMHV_MOD_SVGSW, IF_REAL, " "), IOP("svbslp", HSMHV_MOD_SVBSLP, IF_REAL, " "), IOP("slgl", HSMHV_MOD_SLGL, IF_REAL, " "), IOP("slglp", HSMHV_MOD_SLGLP, IF_REAL, " "), IOP("sub1lp", HSMHV_MOD_SUB1LP, IF_REAL, " "), IOP("nsti", HSMHV_MOD_NSTI, IF_REAL, "Parameter for STI [1/cm^3]"), IOP("wsti", HSMHV_MOD_WSTI, IF_REAL, "Parameter for STI [m]"), IOP("wstil", HSMHV_MOD_WSTIL, IF_REAL, "Parameter for STI [?]"), IOP("wstilp", HSMHV_MOD_WSTILP, IF_REAL, "Parameter for STI [?]"), IOP("wstiw", HSMHV_MOD_WSTIW, IF_REAL, "Parameter for STI [?]"), IOP("wstiwp", HSMHV_MOD_WSTIWP, IF_REAL, "Parameter for STI [?]"), IOP("scsti1", HSMHV_MOD_SCSTI1, IF_REAL, "Parameter for STI [-]"), IOP("scsti2", HSMHV_MOD_SCSTI2, IF_REAL, "Parameter for STI [1/V]"), IOP("vthsti", HSMHV_MOD_VTHSTI, IF_REAL, "Parameter for STI"), IOP("vdsti", HSMHV_MOD_VDSTI, IF_REAL, "Parameter for STI [-]"), IOP("muesti1", HSMHV_MOD_MUESTI1, IF_REAL, "STI Stress mobility parameter"), IOP("muesti2", HSMHV_MOD_MUESTI2, IF_REAL, "STI Stress mobility parameter"), IOP("muesti3", HSMHV_MOD_MUESTI3, IF_REAL, "STI Stress mobility parameter"), IOP("nsubpsti1", HSMHV_MOD_NSUBPSTI1, IF_REAL, "STI Stress pocket implant parameter"), IOP("nsubpsti2", HSMHV_MOD_NSUBPSTI2, IF_REAL, "STI Stress pocket implant parameter"), IOP("nsubpsti3", HSMHV_MOD_NSUBPSTI3, IF_REAL, "STI Stress pocket implant parameter"), IOP("lpext", HSMHV_MOD_LPEXT, IF_REAL, "Pocket extension"), IOP("npext", HSMHV_MOD_NPEXT, IF_REAL, "Pocket extension"), IOP("scp22", HSMHV_MOD_SCP22, IF_REAL, ""), IOP("scp21", HSMHV_MOD_SCP21, IF_REAL, ""), IOP("bs1", HSMHV_MOD_BS1, IF_REAL, ""), IOP("bs2", HSMHV_MOD_BS2, IF_REAL, ""), IOP("cgso", HSMHV_MOD_CGSO, IF_REAL, "G-S overlap capacitance per unit W [F/m]"), IOP("cgdo", HSMHV_MOD_CGDO, IF_REAL, "G-D overlap capacitance per unit W [F/m]"), IOP("cgbo", HSMHV_MOD_CGBO, IF_REAL, "G-B overlap capacitance per unit L [F/m]"), IOP("tpoly", HSMHV_MOD_TPOLY, IF_REAL, "Height of poly gate on the source side[m]"), IOP("js0", HSMHV_MOD_JS0, IF_REAL, "Saturation current density [A/m^2]"), IOP("js0sw", HSMHV_MOD_JS0SW, IF_REAL, "Side wall saturation current density [A/m]"), IOP("nj", HSMHV_MOD_NJ, IF_REAL, "Emission coefficient [-]"), IOP("njsw", HSMHV_MOD_NJSW, IF_REAL, "Sidewall emission coefficient"), IOP("xti", HSMHV_MOD_XTI, IF_REAL, "Junction current temparature exponent coefficient [-]"), IOP("cj", HSMHV_MOD_CJ, IF_REAL, "Bottom junction capacitance per unit area at zero bias [F/m^2]"), IOP("cjsw", HSMHV_MOD_CJSW, IF_REAL, "Source/drain sidewall junction capacitance grading coefficient per unit length at zero bias [F/m]"), IOP("cjswg", HSMHV_MOD_CJSWG, IF_REAL, "Source/drain gate sidewall junction capacitance per unit length at zero bias [F/m]"), IOP("mj", HSMHV_MOD_MJ, IF_REAL, "Bottom junction capacitance grading coefficient"), IOP("mjsw", HSMHV_MOD_MJSW, IF_REAL, "Source/drain sidewall junction capacitance grading coefficient"), IOP("mjswg", HSMHV_MOD_MJSWG, IF_REAL, "Source/drain gate sidewall junction capacitance grading coefficient"), IOP("pb", HSMHV_MOD_PB, IF_REAL, "Bottom junction build-in potential [V]"), IOP("pbsw", HSMHV_MOD_PBSW, IF_REAL, "Source/drain sidewall junction build-in potential [V]"), IOP("pbswg", HSMHV_MOD_PBSWG, IF_REAL, "Source/drain gate sidewall junction build-in potential [V]"), IOP("xti2", HSMHV_MOD_XTI2, IF_REAL, "Temperature coefficient [-]"), IOP("cisb", HSMHV_MOD_CISB, IF_REAL, "Reverse bias saturation current [-]"), IOP("cvb", HSMHV_MOD_CVB, IF_REAL, "Bias dependence coefficient of cisb [-]"), IOP("ctemp", HSMHV_MOD_CTEMP, IF_REAL, "Temperature coefficient [-]"), IOP("cisbk", HSMHV_MOD_CISBK, IF_REAL, "Reverse bias saturation current [A]"), IOP("cvbk", HSMHV_MOD_CVBK, IF_REAL, "Bias dependence coefficient of cisb [-]"), IOP("divx", HSMHV_MOD_DIVX, IF_REAL, " [1/V]"), IOP("clm1", HSMHV_MOD_CLM1, IF_REAL, "Parameter for CLM [-]"), IOP("clm2", HSMHV_MOD_CLM2, IF_REAL, "Parameter for CLM [1/m]"), IOP("clm3", HSMHV_MOD_CLM3, IF_REAL, "Parameter for CLM [-]"), IOP("clm5", HSMHV_MOD_CLM5, IF_REAL, "Parameter for CLM [-]"), IOP("clm6", HSMHV_MOD_CLM6, IF_REAL, "Parameter for CLM [um^{-clm5}]"), IOP("vover", HSMHV_MOD_VOVER, IF_REAL, "Parameter for overshoot [m^{voverp}]"), IOP("voverp", HSMHV_MOD_VOVERP, IF_REAL, "Parameter for overshoot [-]"), IOP("vovers", HSMHV_MOD_VOVERS, IF_REAL, "Parameter for overshoot [-]"), IOP("voversp", HSMHV_MOD_VOVERSP, IF_REAL, "Parameter for overshoot [-]"), IOP("wfc", HSMHV_MOD_WFC, IF_REAL, "Parameter for narrow channel effect [m*F/(cm^2)]"), IOP("nsubcw", HSMHV_MOD_NSUBCW, IF_REAL, "Parameter for narrow channel effect "), IOP("nsubcwp", HSMHV_MOD_NSUBCWP, IF_REAL, "Parameter for narrow channel effect "), IOP("qme1", HSMHV_MOD_QME1, IF_REAL, "Parameter for quantum effect [mV]"), IOP("qme2", HSMHV_MOD_QME2, IF_REAL, "Parameter for quantum effect [V]"), IOP("qme3", HSMHV_MOD_QME3, IF_REAL, "Parameter for quantum effect [m]"), IOP("gidl1", HSMHV_MOD_GIDL1, IF_REAL, "Parameter for GIDL [?]"), IOP("gidl2", HSMHV_MOD_GIDL2, IF_REAL, "Parameter for GIDL [?]"), IOP("gidl3", HSMHV_MOD_GIDL3, IF_REAL, "Parameter for GIDL [?]"), IOP("gidl4", HSMHV_MOD_GIDL4, IF_REAL, "Parameter for GIDL [?]"), IOP("gidl5", HSMHV_MOD_GIDL5, IF_REAL, "Parameter for GIDL [?]"), IOP("glpart1", HSMHV_MOD_GLPART1, IF_REAL, "Parameter for gate current [-]"), IOP("gleak1", HSMHV_MOD_GLEAK1, IF_REAL, "Parameter for gate current [A*V^(-3/2)/C]"), IOP("gleak2", HSMHV_MOD_GLEAK2, IF_REAL, "Parameter for gate current [V^(-1/2)/m ]"), IOP("gleak3", HSMHV_MOD_GLEAK3, IF_REAL, "Parameter for gate current [-]"), IOP("gleak4", HSMHV_MOD_GLEAK4, IF_REAL, "Parameter for gate current [1/m]"), IOP("gleak5", HSMHV_MOD_GLEAK5, IF_REAL, "Parameter for gate current [V/m]"), IOP("gleak6", HSMHV_MOD_GLEAK6, IF_REAL, "Parameter for gate current [V]"), IOP("gleak7", HSMHV_MOD_GLEAK7, IF_REAL, "Parameter for gate current [m^2]"), IOP("glksd1", HSMHV_MOD_GLKSD1, IF_REAL, "Parameter for gate current [A*m/V^2]"), IOP("glksd2", HSMHV_MOD_GLKSD2, IF_REAL, "Parameter for gate current [1/(V*m)]"), IOP("glksd3", HSMHV_MOD_GLKSD3, IF_REAL, "Parameter for gate current [1/m]"), IOP("glkb1", HSMHV_MOD_GLKB1, IF_REAL, "Parameter for gate current [A/V^2]"), IOP("glkb2", HSMHV_MOD_GLKB2, IF_REAL, "Parameter for gate current [m/V]"), IOP("glkb3", HSMHV_MOD_GLKB3, IF_REAL, "Parameter for gate current [V]"), IOP("egig", HSMHV_MOD_EGIG, IF_REAL, "Parameter for gate current [V]"), IOP("igtemp2", HSMHV_MOD_IGTEMP2, IF_REAL, "Parameter for gate current [V*k]"), IOP("igtemp3", HSMHV_MOD_IGTEMP3, IF_REAL, "Parameter for gate current [V*k^2]"), IOP("vzadd0", HSMHV_MOD_VZADD0, IF_REAL, "Vzadd at Vds=0 [V]"), IOP("pzadd0", HSMHV_MOD_PZADD0, IF_REAL, "Pzadd at Vds=0 [V]"), IOP("nftrp", HSMHV_MOD_NFTRP, IF_REAL, ""), IOP("nfalp", HSMHV_MOD_NFALP, IF_REAL, ""), IOP("cit", HSMHV_MOD_CIT, IF_REAL, ""), IOP("falph", HSMHV_MOD_FALPH, IF_REAL, "Parameter for 1/f noise"), IOP("kappa", HSMHV_MOD_KAPPA, IF_REAL, "Dielectric constant for high-k stacked gate"), IOP("pthrou", HSMHV_MOD_PTHROU, IF_REAL, "Modify subthreshold slope [-]"), IOP("vdiffj", HSMHV_MOD_VDIFFJ, IF_REAL, "Threshold voltage for S/D junction diode [V]"), IOP("dly1", HSMHV_MOD_DLY1, IF_REAL, "Parameter for transit time [-]"), IOP("dly2", HSMHV_MOD_DLY2, IF_REAL, "Parameter for transit time [-]"), IOP("dly3", HSMHV_MOD_DLY3, IF_REAL, "Parameter for transforming bulk charge [s/F]"), IOP("dlyov", HSMHV_MOD_DLYOV, IF_REAL, "Parameter for transforming overlap charge [s/F]"), /* not used */ IOP("tnom", HSMHV_MOD_TNOM, IF_REAL, "Nominal temperature [K]"), IOP("ovslp", HSMHV_MOD_OVSLP, IF_REAL, ""), IOP("ovmag", HSMHV_MOD_OVMAG, IF_REAL, ""), IOP("gbmin", HSMHV_MOD_GBMIN, IF_REAL, ""), IOP("rbpb", HSMHV_MOD_RBPB, IF_REAL, ""), IOP("rbpd", HSMHV_MOD_RBPD, IF_REAL, ""), /* not used */ IOP("rbps", HSMHV_MOD_RBPS, IF_REAL, ""), /* not used */ IOP("rbdb", HSMHV_MOD_RBDB, IF_REAL, ""), IOP("rbsb", HSMHV_MOD_RBSB, IF_REAL, ""), IOP("ibpc1", HSMHV_MOD_IBPC1, IF_REAL, "Parameter for impact-ionization induced bulk potential change"), IOP("ibpc2", HSMHV_MOD_IBPC2, IF_REAL, "Parameter for impact-ionization induced bulk potential change"), IOP("mphdfm", HSMHV_MOD_MPHDFM, IF_REAL, "NSUBCDFM dependence of phonon scattering for DFM"), IOP("rdvg11", HSMHV_MOD_RDVG11, IF_REAL, ""), IOP("rdvg12", HSMHV_MOD_RDVG12, IF_REAL, ""), IOP("rth0", HSMHV_MOD_RTH0, IF_REAL, "Thermal resistance"), /* Self-heating model --SHE---*/ IOP("cth0", HSMHV_MOD_CTH0, IF_REAL, "Thermal capacitance"), /* Self-heating model --SHE--- */ IOP("powrat", HSMHV_MOD_POWRAT, IF_REAL, ""), /* Self-heating model --SHE--- */ IOP("rthtemp1", HSMHV_MOD_RTHTEMP1, IF_REAL, "Thermal resistance"), /* Self-heating model --SHE---*/ IOP("rthtemp2", HSMHV_MOD_RTHTEMP2, IF_REAL, "Thermal resistance"), /* Self-heating model --SHE---*/ IOP("prattemp1", HSMHV_MOD_PRATTEMP1, IF_REAL, ""), /* Self-heating model --SHE--- */ IOP("prattemp2", HSMHV_MOD_PRATTEMP2, IF_REAL, ""), /* Self-heating model --SHE--- */ IOP("tcjbd", HSMHV_MOD_TCJBD, IF_REAL, "Temperature dependence of cjbd"), /* Self-heating model --SHE--- */ IOP("tcjbs", HSMHV_MOD_TCJBS, IF_REAL, "Temperature dependence of cjbs"), /* Self-heating model --SHE--- */ IOP("tcjbdsw", HSMHV_MOD_TCJBDSW, IF_REAL, "Temperature dependence of cjbdsw"), /* Self-heating model --SHE--- */ IOP("tcjbssw", HSMHV_MOD_TCJBSSW, IF_REAL, "Temperature dependence of cjbssw"), /* Self-heating model --SHE--- */ IOP("tcjbdswg", HSMHV_MOD_TCJBDSWG, IF_REAL, "Temperature dependence of cjbdswg"), /* Self-heating model --SHE--- */ IOP("tcjbsswg", HSMHV_MOD_TCJBSSWG, IF_REAL, "Temperature dependence of cjbsswg"), /* Self-heating model --SHE--- */ IOP("qdftvd", HSMHV_MOD_QDFTVD, IF_REAL, "Qdrift Vd dependence "), IOP("rdvd", HSMHV_MOD_RDVD, IF_REAL, ""), IOP("rdvb", HSMHV_MOD_RDVB, IF_REAL, ""), IOP("rd20", HSMHV_MOD_RD20, IF_REAL, ""), IOP("rd21", HSMHV_MOD_RD21, IF_REAL, ""), IOP("rd22", HSMHV_MOD_RD22, IF_REAL, ""), IOP("rd22d", HSMHV_MOD_RD22D, IF_REAL, ""), IOP("rd23", HSMHV_MOD_RD23, IF_REAL, ""), IOP("rd24", HSMHV_MOD_RD24, IF_REAL, ""), IOP("rd25", HSMHV_MOD_RD25, IF_REAL, ""), IOP("rd26", HSMHV_MOD_RD26, IF_REAL, "alias for qovsm"), IOP("rdvdl", HSMHV_MOD_RDVDL, IF_REAL, ""), IOP("rdvdlp", HSMHV_MOD_RDVDLP, IF_REAL, ""), IOP("rdvds", HSMHV_MOD_RDVDS, IF_REAL, ""), IOP("rdvdsp", HSMHV_MOD_RDVDSP, IF_REAL, ""), IOP("rd23l", HSMHV_MOD_RD23L, IF_REAL, ""), IOP("rd23lp", HSMHV_MOD_RD23LP, IF_REAL, ""), IOP("rd23s", HSMHV_MOD_RD23S, IF_REAL, ""), IOP("rd23sp", HSMHV_MOD_RD23SP, IF_REAL, ""), IOP("rds", HSMHV_MOD_RDS, IF_REAL, ""), IOP("rdsp", HSMHV_MOD_RDSP, IF_REAL, ""), IOP("qovsm", HSMHV_MOD_QOVSM, IF_REAL, "Smoothing Qover at depletion/inversion transition"), IOP("ldrift", HSMHV_MOD_LDRIFT, IF_REAL, "alias for ldrift2"), IOP("rdtemp1", HSMHV_MOD_RDTEMP1, IF_REAL, "Temperature-dependence of Rd"), IOP("rdtemp2", HSMHV_MOD_RDTEMP2, IF_REAL, "Temperature-dependence of Rd"), IOP("rth0r", HSMHV_MOD_RTH0R, IF_REAL, "Heat radiation for SHE"), /* not used */ IOP("rdvdtemp1", HSMHV_MOD_RDVDTEMP1, IF_REAL, "Temperature-dependence of RDVD"), IOP("rdvdtemp2", HSMHV_MOD_RDVDTEMP2, IF_REAL, "Temperature-dependence of RDVD"), IOP("rth0w", HSMHV_MOD_RTH0W, IF_REAL, "Width-dependence of RTH0"), IOP("rth0wp", HSMHV_MOD_RTH0WP, IF_REAL, "Width-dependence of RTH0"), IOP("rth0nf", HSMHV_MOD_RTH0NF, IF_REAL, "nf-dependence of RTH0"), IOP("cvdsover", HSMHV_MOD_CVDSOVER, IF_REAL, "vds drop along the overlap"), IOP("rdvsub", HSMHV_MOD_RDVSUB, IF_REAL, "model parameter for the substrate effect"), IOP("rdvdsub", HSMHV_MOD_RDVDSUB, IF_REAL, "model parameter for the substrate effect"), IOP("ddrift", HSMHV_MOD_DDRIFT, IF_REAL, "model parameter for the substrate effect"), IOP("vbisub", HSMHV_MOD_VBISUB, IF_REAL, "model parameter for the substrate effect"), IOP("nsubsub", HSMHV_MOD_NSUBSUB, IF_REAL, "model parameter for the substrate effect"), IOP("shemax", HSMHV_MOD_SHEMAX, IF_REAL, "Maximum rise temperatue for SHE [C]"), /* binning parameters */ IOP("lmin", HSMHV_MOD_LMIN, IF_REAL, "Minimum length for the model"), IOP("lmax", HSMHV_MOD_LMAX, IF_REAL, "Maximum length for the model"), IOP("wmin", HSMHV_MOD_WMIN, IF_REAL, "Minimum width for the model"), IOP("wmax", HSMHV_MOD_WMAX, IF_REAL, "Maximum width for the model"), IOP("lbinn", HSMHV_MOD_LBINN, IF_REAL, "L modulation coefficient for binning"), IOP("wbinn", HSMHV_MOD_WBINN, IF_REAL, "W modulation coefficient for binning"), /* Length dependence */ IOP("lvmax", HSMHV_MOD_LVMAX, IF_REAL, "Length dependence of vmax"), IOP("lbgtmp1", HSMHV_MOD_LBGTMP1, IF_REAL, "Length dependence of bgtmp1"), IOP("lbgtmp2", HSMHV_MOD_LBGTMP2, IF_REAL, "Length dependence of bgtmp2"), IOP("leg0", HSMHV_MOD_LEG0, IF_REAL, "Length dependence of eg0"), IOP("lvfbover", HSMHV_MOD_LVFBOVER, IF_REAL, "Length dependence of vfbover"), IOP("lnover", HSMHV_MOD_LNOVER, IF_REAL, "Length dependence of nover"), IOP("lnovers", HSMHV_MOD_LNOVERS, IF_REAL, "Length dependence of nover on source size"), IOP("lwl2", HSMHV_MOD_LWL2, IF_REAL, "Length dependence of wl2"), IOP("lvfbc", HSMHV_MOD_LVFBC, IF_REAL, "Length dependence of vfbc"), IOP("lnsubc", HSMHV_MOD_LNSUBC, IF_REAL, "Length dependence of nsubc"), IOP("lnsubp", HSMHV_MOD_LNSUBP, IF_REAL, "Length dependence of nsubp"), IOP("lscp1", HSMHV_MOD_LSCP1, IF_REAL, "Length dependence of scp1"), IOP("lscp2", HSMHV_MOD_LSCP2, IF_REAL, "Length dependence of scp2"), IOP("lscp3", HSMHV_MOD_LSCP3, IF_REAL, "Length dependence of scp3"), IOP("lsc1", HSMHV_MOD_LSC1, IF_REAL, "Length dependence of sc1"), IOP("lsc2", HSMHV_MOD_LSC2, IF_REAL, "Length dependence of sc2"), IOP("lsc3", HSMHV_MOD_LSC3, IF_REAL, "Length dependence of sc3"), IOP("lpgd1", HSMHV_MOD_LPGD1, IF_REAL, "Length dependence of pgd1"), IOP("lpgd3", HSMHV_MOD_LPGD3, IF_REAL, "Length dependence of pgd3"), IOP("lndep", HSMHV_MOD_LNDEP, IF_REAL, "Length dependence of ndep"), IOP("lninv", HSMHV_MOD_LNINV, IF_REAL, "Length dependence of ninv"), IOP("lmuecb0", HSMHV_MOD_LMUECB0, IF_REAL, "Length dependence of muecb0"), IOP("lmuecb1", HSMHV_MOD_LMUECB1, IF_REAL, "Length dependence of muecb1"), IOP("lmueph1", HSMHV_MOD_LMUEPH1, IF_REAL, "Length dependence of mueph1"), IOP("lvtmp", HSMHV_MOD_LVTMP, IF_REAL, "Length dependence of vtmp"), IOP("lwvth0", HSMHV_MOD_LWVTH0, IF_REAL, "Length dependence of wvth0"), IOP("lmuesr1", HSMHV_MOD_LMUESR1, IF_REAL, "Length dependence of muesr1"), IOP("lmuetmp", HSMHV_MOD_LMUETMP, IF_REAL, "Length dependence of muetmp"), IOP("lsub1", HSMHV_MOD_LSUB1, IF_REAL, "Length dependence of sub1"), IOP("lsub2", HSMHV_MOD_LSUB2, IF_REAL, "Length dependence of sub2"), IOP("lsvds", HSMHV_MOD_LSVDS, IF_REAL, "Length dependence of svds"), IOP("lsvbs", HSMHV_MOD_LSVBS, IF_REAL, "Length dependence of svbs"), IOP("lsvgs", HSMHV_MOD_LSVGS, IF_REAL, "Length dependence of svgs"), IOP("lfn1", HSMHV_MOD_LFN1, IF_REAL, "Length dependence of fn1"), IOP("lfn2", HSMHV_MOD_LFN2, IF_REAL, "Length dependence of fn2"), IOP("lfn3", HSMHV_MOD_LFN3, IF_REAL, "Length dependence of fn3"), IOP("lfvbs", HSMHV_MOD_LFVBS, IF_REAL, "Length dependence of fvbs"), IOP("lnsti", HSMHV_MOD_LNSTI, IF_REAL, "Length dependence of nsti"), IOP("lwsti", HSMHV_MOD_LWSTI, IF_REAL, "Length dependence of wsti"), IOP("lscsti1", HSMHV_MOD_LSCSTI1, IF_REAL, "Length dependence of scsti1"), IOP("lscsti2", HSMHV_MOD_LSCSTI2, IF_REAL, "Length dependence of scsti2"), IOP("lvthsti", HSMHV_MOD_LVTHSTI, IF_REAL, "Length dependence of vthsti"), IOP("lmuesti1", HSMHV_MOD_LMUESTI1, IF_REAL, "Length dependence of muesti1"), IOP("lmuesti2", HSMHV_MOD_LMUESTI2, IF_REAL, "Length dependence of muesti2"), IOP("lmuesti3", HSMHV_MOD_LMUESTI3, IF_REAL, "Length dependence of muesti3"), IOP("lnsubpsti1", HSMHV_MOD_LNSUBPSTI1, IF_REAL, "Length dependence of nsubpsti1"), IOP("lnsubpsti2", HSMHV_MOD_LNSUBPSTI2, IF_REAL, "Length dependence of nsubpsti2"), IOP("lnsubpsti3", HSMHV_MOD_LNSUBPSTI3, IF_REAL, "Length dependence of nsubpsti3"), IOP("lcgso", HSMHV_MOD_LCGSO, IF_REAL, "Length dependence of cgso"), IOP("lcgdo", HSMHV_MOD_LCGDO, IF_REAL, "Length dependence of cgdo"), IOP("ljs0", HSMHV_MOD_LJS0, IF_REAL, "Length dependence of js0"), IOP("ljs0sw", HSMHV_MOD_LJS0SW, IF_REAL, "Length dependence of js0sw"), IOP("lnj", HSMHV_MOD_LNJ, IF_REAL, "Length dependence of nj"), IOP("lcisbk", HSMHV_MOD_LCISBK, IF_REAL, "Length dependence of cisbk"), IOP("lclm1", HSMHV_MOD_LCLM1, IF_REAL, "Length dependence of clm1"), IOP("lclm2", HSMHV_MOD_LCLM2, IF_REAL, "Length dependence of clm2"), IOP("lclm3", HSMHV_MOD_LCLM3, IF_REAL, "Length dependence of clm3"), IOP("lwfc", HSMHV_MOD_LWFC, IF_REAL, "Length dependence of wfc"), IOP("lgidl1", HSMHV_MOD_LGIDL1, IF_REAL, "Length dependence of gidl1"), IOP("lgidl2", HSMHV_MOD_LGIDL2, IF_REAL, "Length dependence of gidl2"), IOP("lgleak1", HSMHV_MOD_LGLEAK1, IF_REAL, "Length dependence of gleak1"), IOP("lgleak2", HSMHV_MOD_LGLEAK2, IF_REAL, "Length dependence of gleak2"), IOP("lgleak3", HSMHV_MOD_LGLEAK3, IF_REAL, "Length dependence of gleak3"), IOP("lgleak6", HSMHV_MOD_LGLEAK6, IF_REAL, "Length dependence of gleak6"), IOP("lglksd1", HSMHV_MOD_LGLKSD1, IF_REAL, "Length dependence of glksd1"), IOP("lglksd2", HSMHV_MOD_LGLKSD2, IF_REAL, "Length dependence of glksd2"), IOP("lglkb1", HSMHV_MOD_LGLKB1, IF_REAL, "Length dependence of glkb1"), IOP("lglkb2", HSMHV_MOD_LGLKB2, IF_REAL, "Length dependence of glkb2"), IOP("lnftrp", HSMHV_MOD_LNFTRP, IF_REAL, "Length dependence of nftrp"), IOP("lnfalp", HSMHV_MOD_LNFALP, IF_REAL, "Length dependence of nfalp"), IOP("lpthrou", HSMHV_MOD_LPTHROU, IF_REAL, "Length dependence of pthrou"), IOP("lvdiffj", HSMHV_MOD_LVDIFFJ, IF_REAL, "Length dependence of vdiffj"), IOP("libpc1", HSMHV_MOD_LIBPC1, IF_REAL, "Length dependence of ibpc1"), IOP("libpc2", HSMHV_MOD_LIBPC2, IF_REAL, "Length dependence of ibpc2"), IOP("lcgbo", HSMHV_MOD_LCGBO, IF_REAL, "Length dependence of cgbo"), IOP("lcvdsover", HSMHV_MOD_LCVDSOVER, IF_REAL, "Length dependence of cvdsover"), IOP("lfalph", HSMHV_MOD_LFALPH, IF_REAL, "Length dependence of falph"), IOP("lnpext", HSMHV_MOD_LNPEXT, IF_REAL, "Length dependence of npext"), IOP("lpowrat", HSMHV_MOD_LPOWRAT, IF_REAL, "Length dependence of powrat"), IOP("lrd", HSMHV_MOD_LRD, IF_REAL, "Length dependence of rd"), IOP("lrd22", HSMHV_MOD_LRD22, IF_REAL, "Length dependence of rd22"), IOP("lrd23", HSMHV_MOD_LRD23, IF_REAL, "Length dependence of rd23"), IOP("lrd24", HSMHV_MOD_LRD24, IF_REAL, "Length dependence of rd24"), IOP("lrdict1", HSMHV_MOD_LRDICT1, IF_REAL, "Length dependence of rdict1"), IOP("lrdov13", HSMHV_MOD_LRDOV13, IF_REAL, "Length dependence of rdov13"), IOP("lrdslp1", HSMHV_MOD_LRDSLP1, IF_REAL, "Length dependence of rdslp1"), IOP("lrdvb", HSMHV_MOD_LRDVB, IF_REAL, "Length dependence of rdvb"), IOP("lrdvd", HSMHV_MOD_LRDVD, IF_REAL, "Length dependence of rdvd"), IOP("lrdvg11", HSMHV_MOD_LRDVG11, IF_REAL, "Length dependence of rdvg11"), IOP("lrs", HSMHV_MOD_LRS, IF_REAL, "Length dependence of rs"), IOP("lrth0", HSMHV_MOD_LRTH0, IF_REAL, "Length dependence of rth0"), IOP("lvover", HSMHV_MOD_LVOVER, IF_REAL, "Length dependence of vover"), /* Width dependence */ IOP("wvmax", HSMHV_MOD_WVMAX, IF_REAL, "Width dependence of vmax"), IOP("wbgtmp1", HSMHV_MOD_WBGTMP1, IF_REAL, "Width dependence of bgtmp1"), IOP("wbgtmp2", HSMHV_MOD_WBGTMP2, IF_REAL, "Width dependence of bgtmp2"), IOP("weg0", HSMHV_MOD_WEG0, IF_REAL, "Width dependence of eg0"), IOP("wvfbover", HSMHV_MOD_WVFBOVER, IF_REAL, "Width dependence of vfbover"), IOP("wnover", HSMHV_MOD_WNOVER, IF_REAL, "Width dependence of nover"), IOP("wnovers", HSMHV_MOD_WNOVERS, IF_REAL, "Width dependence of novers on source size"), IOP("wwl2", HSMHV_MOD_WWL2, IF_REAL, "Width dependence of wl2"), IOP("wvfbc", HSMHV_MOD_WVFBC, IF_REAL, "Width dependence of vfbc"), IOP("wnsubc", HSMHV_MOD_WNSUBC, IF_REAL, "Width dependence of nsubc"), IOP("wnsubp", HSMHV_MOD_WNSUBP, IF_REAL, "Width dependence of nsubp"), IOP("wscp1", HSMHV_MOD_WSCP1, IF_REAL, "Width dependence of scp1"), IOP("wscp2", HSMHV_MOD_WSCP2, IF_REAL, "Width dependence of scp2"), IOP("wscp3", HSMHV_MOD_WSCP3, IF_REAL, "Width dependence of scp3"), IOP("wsc1", HSMHV_MOD_WSC1, IF_REAL, "Width dependence of sc1"), IOP("wsc2", HSMHV_MOD_WSC2, IF_REAL, "Width dependence of sc2"), IOP("wsc3", HSMHV_MOD_WSC3, IF_REAL, "Width dependence of sc3"), IOP("wpgd1", HSMHV_MOD_WPGD1, IF_REAL, "Width dependence of pgd1"), IOP("wpgd3", HSMHV_MOD_WPGD3, IF_REAL, "Width dependence of pgd3"), IOP("wndep", HSMHV_MOD_WNDEP, IF_REAL, "Width dependence of ndep"), IOP("wninv", HSMHV_MOD_WNINV, IF_REAL, "Width dependence of ninv"), IOP("wmuecb0", HSMHV_MOD_WMUECB0, IF_REAL, "Width dependence of muecb0"), IOP("wmuecb1", HSMHV_MOD_WMUECB1, IF_REAL, "Width dependence of muecb1"), IOP("wmueph1", HSMHV_MOD_WMUEPH1, IF_REAL, "Width dependence of mueph1"), IOP("wvtmp", HSMHV_MOD_WVTMP, IF_REAL, "Width dependence of vtmp"), IOP("wwvth0", HSMHV_MOD_WWVTH0, IF_REAL, "Width dependence of wvth0"), IOP("wmuesr1", HSMHV_MOD_WMUESR1, IF_REAL, "Width dependence of muesr1"), IOP("wmuetmp", HSMHV_MOD_WMUETMP, IF_REAL, "Width dependence of muetmp"), IOP("wsub1", HSMHV_MOD_WSUB1, IF_REAL, "Width dependence of sub1"), IOP("wsub2", HSMHV_MOD_WSUB2, IF_REAL, "Width dependence of sub2"), IOP("wsvds", HSMHV_MOD_WSVDS, IF_REAL, "Width dependence of svds"), IOP("wsvbs", HSMHV_MOD_WSVBS, IF_REAL, "Width dependence of svbs"), IOP("wsvgs", HSMHV_MOD_WSVGS, IF_REAL, "Width dependence of svgs"), IOP("wfn1", HSMHV_MOD_WFN1, IF_REAL, "Width dependence of fn1"), IOP("wfn2", HSMHV_MOD_WFN2, IF_REAL, "Width dependence of fn2"), IOP("wfn3", HSMHV_MOD_WFN3, IF_REAL, "Width dependence of fn3"), IOP("wfvbs", HSMHV_MOD_WFVBS, IF_REAL, "Width dependence of fvbs"), IOP("wnsti", HSMHV_MOD_WNSTI, IF_REAL, "Width dependence of nsti"), IOP("wwsti", HSMHV_MOD_WWSTI, IF_REAL, "Width dependence of wsti"), IOP("wscsti1", HSMHV_MOD_WSCSTI1, IF_REAL, "Width dependence of scsti1"), IOP("wscsti2", HSMHV_MOD_WSCSTI2, IF_REAL, "Width dependence of scsti2"), IOP("wvthsti", HSMHV_MOD_WVTHSTI, IF_REAL, "Width dependence of vthsti"), IOP("wmuesti1", HSMHV_MOD_WMUESTI1, IF_REAL, "Width dependence of muesti1"), IOP("wmuesti2", HSMHV_MOD_WMUESTI2, IF_REAL, "Width dependence of muesti2"), IOP("wmuesti3", HSMHV_MOD_WMUESTI3, IF_REAL, "Width dependence of muesti3"), IOP("wnsubpsti1", HSMHV_MOD_WNSUBPSTI1, IF_REAL, "Width dependence of nsubpsti1"), IOP("wnsubpsti2", HSMHV_MOD_WNSUBPSTI2, IF_REAL, "Width dependence of nsubpsti2"), IOP("wnsubpsti3", HSMHV_MOD_WNSUBPSTI3, IF_REAL, "Width dependence of nsubpsti3"), IOP("wcgso", HSMHV_MOD_WCGSO, IF_REAL, "Width dependence of cgso"), IOP("wcgdo", HSMHV_MOD_WCGDO, IF_REAL, "Width dependence of cgdo"), IOP("wjs0", HSMHV_MOD_WJS0, IF_REAL, "Width dependence of js0"), IOP("wjs0sw", HSMHV_MOD_WJS0SW, IF_REAL, "Width dependence of js0sw"), IOP("wnj", HSMHV_MOD_WNJ, IF_REAL, "Width dependence of nj"), IOP("wcisbk", HSMHV_MOD_WCISBK, IF_REAL, "Width dependence of cisbk"), IOP("wclm1", HSMHV_MOD_WCLM1, IF_REAL, "Width dependence of clm1"), IOP("wclm2", HSMHV_MOD_WCLM2, IF_REAL, "Width dependence of clm2"), IOP("wclm3", HSMHV_MOD_WCLM3, IF_REAL, "Width dependence of clm3"), IOP("wwfc", HSMHV_MOD_WWFC, IF_REAL, "Width dependence of wfc"), IOP("wgidl1", HSMHV_MOD_WGIDL1, IF_REAL, "Width dependence of gidl1"), IOP("wgidl2", HSMHV_MOD_WGIDL2, IF_REAL, "Width dependence of gidl2"), IOP("wgleak1", HSMHV_MOD_WGLEAK1, IF_REAL, "Width dependence of gleak1"), IOP("wgleak2", HSMHV_MOD_WGLEAK2, IF_REAL, "Width dependence of gleak2"), IOP("wgleak3", HSMHV_MOD_WGLEAK3, IF_REAL, "Width dependence of gleak3"), IOP("wgleak6", HSMHV_MOD_WGLEAK6, IF_REAL, "Width dependence of gleak6"), IOP("wglksd1", HSMHV_MOD_WGLKSD1, IF_REAL, "Width dependence of glksd1"), IOP("wglksd2", HSMHV_MOD_WGLKSD2, IF_REAL, "Width dependence of glksd2"), IOP("wglkb1", HSMHV_MOD_WGLKB1, IF_REAL, "Width dependence of glkb1"), IOP("wglkb2", HSMHV_MOD_WGLKB2, IF_REAL, "Width dependence of glkb2"), IOP("wnftrp", HSMHV_MOD_WNFTRP, IF_REAL, "Width dependence of nftrp"), IOP("wnfalp", HSMHV_MOD_WNFALP, IF_REAL, "Width dependence of nfalp"), IOP("wpthrou", HSMHV_MOD_WPTHROU, IF_REAL, "Width dependence of pthrou"), IOP("wvdiffj", HSMHV_MOD_WVDIFFJ, IF_REAL, "Width dependence of vdiffj"), IOP("wibpc1", HSMHV_MOD_WIBPC1, IF_REAL, "Width dependence of ibpc1"), IOP("wibpc2", HSMHV_MOD_WIBPC2, IF_REAL, "Width dependence of ibpc2"), IOP("wcgbo", HSMHV_MOD_WCGBO, IF_REAL, "Width dependence of cgbo"), IOP("wcvdsover", HSMHV_MOD_WCVDSOVER, IF_REAL, "Width dependence of cvdsover"), IOP("wfalph", HSMHV_MOD_WFALPH, IF_REAL, "Width dependence of falph"), IOP("wnpext", HSMHV_MOD_WNPEXT, IF_REAL, "Width dependence of npext"), IOP("wpowrat", HSMHV_MOD_WPOWRAT, IF_REAL, "Width dependence of powrat"), IOP("wrd", HSMHV_MOD_WRD, IF_REAL, "Width dependence of rd"), IOP("wrd22", HSMHV_MOD_WRD22, IF_REAL, "Width dependence of rd22"), IOP("wrd23", HSMHV_MOD_WRD23, IF_REAL, "Width dependence of rd23"), IOP("wrd24", HSMHV_MOD_WRD24, IF_REAL, "Width dependence of rd24"), IOP("wrdict1", HSMHV_MOD_WRDICT1, IF_REAL, "Width dependence of rdict1"), IOP("wrdov13", HSMHV_MOD_WRDOV13, IF_REAL, "Width dependence of rdov13"), IOP("wrdslp1", HSMHV_MOD_WRDSLP1, IF_REAL, "Width dependence of rdslp1"), IOP("wrdvb", HSMHV_MOD_WRDVB, IF_REAL, "Width dependence of rdvb"), IOP("wrdvd", HSMHV_MOD_WRDVD, IF_REAL, "Width dependence of rdvd"), IOP("wrdvg11", HSMHV_MOD_WRDVG11, IF_REAL, "Width dependence of rdvg11"), IOP("wrs", HSMHV_MOD_WRS, IF_REAL, "Width dependence of rs"), IOP("wrth0", HSMHV_MOD_WRTH0, IF_REAL, "Width dependence of rth0"), IOP("wvover", HSMHV_MOD_WVOVER, IF_REAL, "Width dependence of vover"), /* Cross-term dependence */ IOP("pvmax", HSMHV_MOD_PVMAX, IF_REAL, "Cross-term dependence of vmax"), IOP("pbgtmp1", HSMHV_MOD_PBGTMP1, IF_REAL, "Cross-term dependence of bgtmp1"), IOP("pbgtmp2", HSMHV_MOD_PBGTMP2, IF_REAL, "Cross-term dependence of bgtmp2"), IOP("peg0", HSMHV_MOD_PEG0, IF_REAL, "Cross-term dependence of eg0"), IOP("pvfbover", HSMHV_MOD_PVFBOVER, IF_REAL, "Cross-term dependence of vfbover"), IOP("pnover", HSMHV_MOD_PNOVER, IF_REAL, "Cross-term dependence of nover"), IOP("pnovers", HSMHV_MOD_PNOVERS, IF_REAL, "Cross-term dependence of nover on source size"), IOP("pwl2", HSMHV_MOD_PWL2, IF_REAL, "Cross-term dependence of wl2"), IOP("pvfbc", HSMHV_MOD_PVFBC, IF_REAL, "Cross-term dependence of vfbc"), IOP("pnsubc", HSMHV_MOD_PNSUBC, IF_REAL, "Cross-term dependence of nsubc"), IOP("pnsubp", HSMHV_MOD_PNSUBP, IF_REAL, "Cross-term dependence of nsubp"), IOP("pscp1", HSMHV_MOD_PSCP1, IF_REAL, "Cross-term dependence of scp1"), IOP("pscp2", HSMHV_MOD_PSCP2, IF_REAL, "Cross-term dependence of scp2"), IOP("pscp3", HSMHV_MOD_PSCP3, IF_REAL, "Cross-term dependence of scp3"), IOP("psc1", HSMHV_MOD_PSC1, IF_REAL, "Cross-term dependence of sc1"), IOP("psc2", HSMHV_MOD_PSC2, IF_REAL, "Cross-term dependence of sc2"), IOP("psc3", HSMHV_MOD_PSC3, IF_REAL, "Cross-term dependence of sc3"), IOP("ppgd1", HSMHV_MOD_PPGD1, IF_REAL, "Cross-term dependence of pgd1"), IOP("ppgd3", HSMHV_MOD_PPGD3, IF_REAL, "Cross-term dependence of pgd3"), IOP("pndep", HSMHV_MOD_PNDEP, IF_REAL, "Cross-term dependence of ndep"), IOP("pninv", HSMHV_MOD_PNINV, IF_REAL, "Cross-term dependence of ninv"), IOP("pmuecb0", HSMHV_MOD_PMUECB0, IF_REAL, "Cross-term dependence of muecb0"), IOP("pmuecb1", HSMHV_MOD_PMUECB1, IF_REAL, "Cross-term dependence of muecb1"), IOP("pmueph1", HSMHV_MOD_PMUEPH1, IF_REAL, "Cross-term dependence of mueph1"), IOP("pvtmp", HSMHV_MOD_PVTMP, IF_REAL, "Cross-term dependence of vtmp"), IOP("pwvth0", HSMHV_MOD_PWVTH0, IF_REAL, "Cross-term dependence of wvth0"), IOP("pmuesr1", HSMHV_MOD_PMUESR1, IF_REAL, "Cross-term dependence of muesr1"), IOP("pmuetmp", HSMHV_MOD_PMUETMP, IF_REAL, "Cross-term dependence of muetmp"), IOP("psub1", HSMHV_MOD_PSUB1, IF_REAL, "Cross-term dependence of sub1"), IOP("psub2", HSMHV_MOD_PSUB2, IF_REAL, "Cross-term dependence of sub2"), IOP("psvds", HSMHV_MOD_PSVDS, IF_REAL, "Cross-term dependence of svds"), IOP("psvbs", HSMHV_MOD_PSVBS, IF_REAL, "Cross-term dependence of svbs"), IOP("psvgs", HSMHV_MOD_PSVGS, IF_REAL, "Cross-term dependence of svgs"), IOP("pfn1", HSMHV_MOD_PFN1, IF_REAL, "Cross-term dependence of fn1"), IOP("pfn2", HSMHV_MOD_PFN2, IF_REAL, "Cross-term dependence of fn2"), IOP("pfn3", HSMHV_MOD_PFN3, IF_REAL, "Cross-term dependence of fn3"), IOP("pfvbs", HSMHV_MOD_PFVBS, IF_REAL, "Cross-term dependence of fvbs"), IOP("pnsti", HSMHV_MOD_PNSTI, IF_REAL, "Cross-term dependence of nsti"), IOP("pwsti", HSMHV_MOD_PWSTI, IF_REAL, "Cross-term dependence of wsti"), IOP("pscsti1", HSMHV_MOD_PSCSTI1, IF_REAL, "Cross-term dependence of scsti1"), IOP("pscsti2", HSMHV_MOD_PSCSTI2, IF_REAL, "Cross-term dependence of scsti2"), IOP("pvthsti", HSMHV_MOD_PVTHSTI, IF_REAL, "Cross-term dependence of vthsti"), IOP("pmuesti1", HSMHV_MOD_PMUESTI1, IF_REAL, "Cross-term dependence of muesti1"), IOP("pmuesti2", HSMHV_MOD_PMUESTI2, IF_REAL, "Cross-term dependence of muesti2"), IOP("pmuesti3", HSMHV_MOD_PMUESTI3, IF_REAL, "Cross-term dependence of muesti3"), IOP("pnsubpsti1", HSMHV_MOD_PNSUBPSTI1, IF_REAL, "Cross-term dependence of nsubpsti1"), IOP("pnsubpsti2", HSMHV_MOD_PNSUBPSTI2, IF_REAL, "Cross-term dependence of nsubpsti2"), IOP("pnsubpsti3", HSMHV_MOD_PNSUBPSTI3, IF_REAL, "Cross-term dependence of nsubpsti3"), IOP("pcgso", HSMHV_MOD_PCGSO, IF_REAL, "Cross-term dependence of cgso"), IOP("pcgdo", HSMHV_MOD_PCGDO, IF_REAL, "Cross-term dependence of cgdo"), IOP("pjs0", HSMHV_MOD_PJS0, IF_REAL, "Cross-term dependence of js0"), IOP("pjs0sw", HSMHV_MOD_PJS0SW, IF_REAL, "Cross-term dependence of js0sw"), IOP("pnj", HSMHV_MOD_PNJ, IF_REAL, "Cross-term dependence of nj"), IOP("pcisbk", HSMHV_MOD_PCISBK, IF_REAL, "Cross-term dependence of cisbk"), IOP("pclm1", HSMHV_MOD_PCLM1, IF_REAL, "Cross-term dependence of clm1"), IOP("pclm2", HSMHV_MOD_PCLM2, IF_REAL, "Cross-term dependence of clm2"), IOP("pclm3", HSMHV_MOD_PCLM3, IF_REAL, "Cross-term dependence of clm3"), IOP("pwfc", HSMHV_MOD_PWFC, IF_REAL, "Cross-term dependence of wfc"), IOP("pgidl1", HSMHV_MOD_PGIDL1, IF_REAL, "Cross-term dependence of gidl1"), IOP("pgidl2", HSMHV_MOD_PGIDL2, IF_REAL, "Cross-term dependence of gidl2"), IOP("pgleak1", HSMHV_MOD_PGLEAK1, IF_REAL, "Cross-term dependence of gleak1"), IOP("pgleak2", HSMHV_MOD_PGLEAK2, IF_REAL, "Cross-term dependence of gleak2"), IOP("pgleak3", HSMHV_MOD_PGLEAK3, IF_REAL, "Cross-term dependence of gleak3"), IOP("pgleak6", HSMHV_MOD_PGLEAK6, IF_REAL, "Cross-term dependence of gleak6"), IOP("pglksd1", HSMHV_MOD_PGLKSD1, IF_REAL, "Cross-term dependence of glksd1"), IOP("pglksd2", HSMHV_MOD_PGLKSD2, IF_REAL, "Cross-term dependence of glksd2"), IOP("pglkb1", HSMHV_MOD_PGLKB1, IF_REAL, "Cross-term dependence of glkb1"), IOP("pglkb2", HSMHV_MOD_PGLKB2, IF_REAL, "Cross-term dependence of glkb2"), IOP("pnftrp", HSMHV_MOD_PNFTRP, IF_REAL, "Cross-term dependence of nftrp"), IOP("pnfalp", HSMHV_MOD_PNFALP, IF_REAL, "Cross-term dependence of nfalp"), IOP("ppthrou", HSMHV_MOD_PPTHROU, IF_REAL, "Cross-term dependence of pthrou"), IOP("pvdiffj", HSMHV_MOD_PVDIFFJ, IF_REAL, "Cross-term dependence of vdiffj"), IOP("pibpc1", HSMHV_MOD_PIBPC1, IF_REAL, "Cross-term dependence of ibpc1"), IOP("pibpc2", HSMHV_MOD_PIBPC2, IF_REAL, "Cross-term dependence of ibpc2"), IOP("pcgbo", HSMHV_MOD_PCGBO, IF_REAL, "Cross-term dependence of cgbo"), IOP("pcvdsover", HSMHV_MOD_PCVDSOVER, IF_REAL, "Cross-term dependence of cvdsover"), IOP("pfalph", HSMHV_MOD_PFALPH, IF_REAL, "Cross-term dependence of falph"), IOP("pnpext", HSMHV_MOD_PNPEXT, IF_REAL, "Cross-term dependence of npext"), IOP("ppowrat", HSMHV_MOD_PPOWRAT, IF_REAL, "Cross-term dependence of powrat"), IOP("prd", HSMHV_MOD_PRD, IF_REAL, "Cross-term dependence of rd"), IOP("prd22", HSMHV_MOD_PRD22, IF_REAL, "Cross-term dependence of rd22"), IOP("prd23", HSMHV_MOD_PRD23, IF_REAL, "Cross-term dependence of rd23"), IOP("prd24", HSMHV_MOD_PRD24, IF_REAL, "Cross-term dependence of rd24"), IOP("prdict1", HSMHV_MOD_PRDICT1, IF_REAL, "Cross-term dependence of rdict1"), IOP("prdov13", HSMHV_MOD_PRDOV13, IF_REAL, "Cross-term dependence of rdov13"), IOP("prdslp1", HSMHV_MOD_PRDSLP1, IF_REAL, "Cross-term dependence of rdslp1"), IOP("prdvb", HSMHV_MOD_PRDVB, IF_REAL, "Cross-term dependence of rdvb"), IOP("prdvd", HSMHV_MOD_PRDVD, IF_REAL, "Cross-term dependence of rdvd"), IOP("prdvg11", HSMHV_MOD_PRDVG11, IF_REAL, "Cross-term dependence of rdvg11"), IOP("prs", HSMHV_MOD_PRS, IF_REAL, "Cross-term dependence of rs"), IOP("prth0", HSMHV_MOD_PRTH0, IF_REAL, "Cross-term dependence of rth0"), IOP("pvover", HSMHV_MOD_PVOVER, IF_REAL, "Cross-term dependence of vover"), IOP("vgs_max", HSMHV_MOD_VGS_MAX, IF_REAL, "maximum voltage G-S branch"), IOP("vgd_max", HSMHV_MOD_VGD_MAX, IF_REAL, "maximum voltage G-D branch"), IOP("vgb_max", HSMHV_MOD_VGB_MAX, IF_REAL, "maximum voltage G-B branch"), IOP("vds_max", HSMHV_MOD_VDS_MAX, IF_REAL, "maximum voltage D-S branch"), IOP("vbs_max", HSMHV_MOD_VBS_MAX, IF_REAL, "maximum voltage B-S branch"), IOP("vbd_max", HSMHV_MOD_VBD_MAX, IF_REAL, "maximum voltage B-D branch"), IOP("vgsr_max", HSMHV_MOD_VGSR_MAX, IF_REAL, "maximum voltage G-S branch"), IOP("vgdr_max", HSMHV_MOD_VGDR_MAX, IF_REAL, "maximum voltage G-D branch"), IOP("vgbr_max", HSMHV_MOD_VGBR_MAX, IF_REAL, "maximum voltage G-B branch"), IOP("vbsr_max", HSMHV_MOD_VBSR_MAX, IF_REAL, "maximum voltage B-S branch"), IOP("vbdr_max", HSMHV_MOD_VBDR_MAX, IF_REAL, "maximum voltage B-D branch") }; char *HSMHVnames[] = { "Drain", "Gate", "Source", "Bulk", "Substrate", "Temp" }; int HSMHVnSize = NUMELEMS(HSMHVnames); int HSMHVpTSize = NUMELEMS(HSMHVpTable); int HSMHVmPTSize = NUMELEMS(HSMHVmPTable); int HSMHViSize = sizeof(HSMHVinstance); int HSMHVmSize = sizeof(HSMHVmodel); tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhvacld.c0000644000175000017500000003502713546075722023037 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2012 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 1 SUBVERSION : 2 REVISION : 4 ) Model Parameter VERSION : 1.23 FILE : hsmhvacld.c DATE : 2013.04.30 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "hsmhvdef.h" int HSMHVacLoad( GENmodel *inModel, register CKTcircuit *ckt) { register HSMHVmodel *model = (HSMHVmodel*)inModel; register HSMHVinstance *here; double omega=0.0 ; int flg_nqs =0 ; int flg_subNode = 0 ; #define dNode 0 #define dNodePrime 1 #define gNode 2 #define gNodePrime 3 #define sNode 4 #define sNodePrime 5 #define bNodePrime 6 #define bNode 7 #define dbNode 8 #define sbNode 9 #define subNode 10 #define tempNode 11 #define qiNode 12 #define qbNode 13 omega = ckt->CKTomega; for ( ; model != NULL; model = HSMHVnextModel(model)) { for ( here = HSMHVinstances(model); here!= NULL; here = HSMHVnextInstance(here)) { flg_nqs = model->HSMHV_conqs ; flg_subNode = here->HSMHVsubNode ; /* if flg_subNode > 0, external(/internal) substrate node exists */ /* stamp matrix */ /*drain*/ *(here->HSMHVDdPtr) += here->HSMHV_ydc_d[dNode] ; *(here->HSMHVDdPtr +1) += omega*here->HSMHV_ydyn_d[dNode] ; *(here->HSMHVDdpPtr) += here->HSMHV_ydc_d[dNodePrime] ; *(here->HSMHVDdpPtr +1) += omega*here->HSMHV_ydyn_d[dNodePrime]; *(here->HSMHVDgpPtr) += here->HSMHV_ydc_d[gNodePrime]; *(here->HSMHVDgpPtr +1) += omega*here->HSMHV_ydyn_d[gNodePrime]; *(here->HSMHVDsPtr) += here->HSMHV_ydc_d[sNode]; *(here->HSMHVDsPtr +1) += omega*here->HSMHV_ydyn_d[sNode]; *(here->HSMHVDbpPtr) += here->HSMHV_ydc_d[bNodePrime]; *(here->HSMHVDbpPtr +1) += omega*here->HSMHV_ydyn_d[bNodePrime]; *(here->HSMHVDdbPtr) += here->HSMHV_ydc_d[dbNode]; *(here->HSMHVDdbPtr +1) += omega*here->HSMHV_ydyn_d[dbNode]; if (flg_subNode > 0) { *(here->HSMHVDsubPtr) += here->HSMHV_ydc_d[subNode]; } if( here->HSMHVtempNode > 0) { *(here->HSMHVDtempPtr) += model->HSMHV_type*here->HSMHV_ydc_d[tempNode]; *(here->HSMHVDtempPtr +1) += model->HSMHV_type*omega*here->HSMHV_ydyn_d[tempNode]; } /*drain prime*/ *(here->HSMHVDPdPtr) += here->HSMHV_ydc_dP[dNode] ; *(here->HSMHVDPdPtr +1) += omega*here->HSMHV_ydyn_dP[dNode]; *(here->HSMHVDPdpPtr) += here->HSMHV_ydc_dP[dNodePrime]; *(here->HSMHVDPdpPtr +1) += omega*here->HSMHV_ydyn_dP[dNodePrime]; *(here->HSMHVDPgpPtr) += here->HSMHV_ydc_dP[gNodePrime]; *(here->HSMHVDPgpPtr +1) += omega*here->HSMHV_ydyn_dP[gNodePrime]; *(here->HSMHVDPsPtr) += here->HSMHV_ydc_dP[sNode] ; *(here->HSMHVDPsPtr +1) += omega*here->HSMHV_ydyn_dP[sNode]; *(here->HSMHVDPspPtr) += here->HSMHV_ydc_dP[sNodePrime] ; *(here->HSMHVDPspPtr +1) += omega*here->HSMHV_ydyn_dP[sNodePrime]; *(here->HSMHVDPbpPtr) += here->HSMHV_ydc_dP[bNodePrime] ; *(here->HSMHVDPbpPtr +1) += omega*here->HSMHV_ydyn_dP[bNodePrime]; if (flg_subNode > 0) { *(here->HSMHVDPsubPtr) += here->HSMHV_ydc_dP[subNode]; } if( here->HSMHVtempNode > 0) { *(here->HSMHVDPtempPtr) += model->HSMHV_type*here->HSMHV_ydc_dP[tempNode]; *(here->HSMHVDPtempPtr +1) += model->HSMHV_type*omega*here->HSMHV_ydyn_dP[tempNode]; } if (flg_nqs) { *(here->HSMHVDPqiPtr) += model->HSMHV_type*here->HSMHV_ydc_dP[qiNode]; *(here->HSMHVDPqiPtr+1) += model->HSMHV_type*omega*here->HSMHV_ydyn_dP[qiNode]; } /*gate*/ *(here->HSMHVGgPtr) += here->HSMHV_ydc_g[gNode] ; *(here->HSMHVGgPtr +1) += omega*here->HSMHV_ydyn_g[gNode]; *(here->HSMHVGgpPtr) += here->HSMHV_ydc_g[gNodePrime] ; *(here->HSMHVGgpPtr +1) += omega*here->HSMHV_ydyn_g[gNodePrime]; /*gate prime*/ *(here->HSMHVGPdPtr) += here->HSMHV_ydc_gP[dNode] ; *(here->HSMHVGPdPtr +1) += omega*here->HSMHV_ydyn_gP[dNode]; *(here->HSMHVGPdpPtr) += here->HSMHV_ydc_gP[dNodePrime] ; *(here->HSMHVGPdpPtr +1) += omega*here->HSMHV_ydyn_gP[dNodePrime]; *(here->HSMHVGPgPtr) += here->HSMHV_ydc_gP[gNode]; *(here->HSMHVGPgPtr +1) += omega*here->HSMHV_ydyn_gP[gNode]; *(here->HSMHVGPgpPtr) += here->HSMHV_ydc_gP[gNodePrime] ; *(here->HSMHVGPgpPtr +1) += omega*here->HSMHV_ydyn_gP[gNodePrime]; *(here->HSMHVGPsPtr) += here->HSMHV_ydc_gP[sNode]; *(here->HSMHVGPsPtr +1) += omega*here->HSMHV_ydyn_gP[sNode]; *(here->HSMHVGPspPtr) += here->HSMHV_ydc_gP[sNodePrime] ; *(here->HSMHVGPspPtr +1) += omega*here->HSMHV_ydyn_gP[sNodePrime]; *(here->HSMHVGPbpPtr) += here->HSMHV_ydc_gP[bNodePrime] ; *(here->HSMHVGPbpPtr +1) += omega*here->HSMHV_ydyn_gP[bNodePrime]; if( here->HSMHVtempNode > 0) { *(here->HSMHVGPtempPtr) += model->HSMHV_type*here->HSMHV_ydc_gP[tempNode] ; *(here->HSMHVGPtempPtr +1) += model->HSMHV_type*omega*here->HSMHV_ydyn_gP[tempNode]; } if (flg_nqs) { *(here->HSMHVGPqiPtr) += model->HSMHV_type*here->HSMHV_ydc_gP[qiNode]; *(here->HSMHVGPqiPtr+1) += model->HSMHV_type*omega*here->HSMHV_ydyn_gP[qiNode]; *(here->HSMHVGPqbPtr) += model->HSMHV_type*here->HSMHV_ydc_gP[qbNode]; *(here->HSMHVGPqbPtr+1) += model->HSMHV_type*omega*here->HSMHV_ydyn_gP[qbNode]; } /*source*/ *(here->HSMHVSdPtr) += here->HSMHV_ydc_s[dNode]; *(here->HSMHVSdPtr +1) += omega*here->HSMHV_ydyn_s[dNode]; *(here->HSMHVSgpPtr) += here->HSMHV_ydc_s[gNodePrime]; *(here->HSMHVSgpPtr +1) += omega*here->HSMHV_ydyn_s[gNodePrime]; *(here->HSMHVSsPtr) += here->HSMHV_ydc_s[sNode] ; *(here->HSMHVSsPtr +1) += omega*here->HSMHV_ydyn_s[sNode]; *(here->HSMHVSspPtr) += here->HSMHV_ydc_s[sNodePrime] ; *(here->HSMHVSspPtr +1) += omega*here->HSMHV_ydyn_s[sNodePrime]; *(here->HSMHVSbpPtr) += here->HSMHV_ydc_s[bNodePrime]; *(here->HSMHVSbpPtr +1) += omega*here->HSMHV_ydyn_s[bNodePrime]; *(here->HSMHVSsbPtr) += here->HSMHV_ydc_s[sbNode] ; *(here->HSMHVSsbPtr +1) += omega*here->HSMHV_ydyn_s[sbNode]; if (flg_subNode > 0) { *(here->HSMHVSsubPtr) += here->HSMHV_ydc_s[subNode]; } if( here->HSMHVtempNode > 0) { *(here->HSMHVStempPtr) += model->HSMHV_type*here->HSMHV_ydc_s[tempNode]; *(here->HSMHVStempPtr +1) += model->HSMHV_type*omega*here->HSMHV_ydyn_s[tempNode]; } /*source prime*/ *(here->HSMHVSPdPtr) += here->HSMHV_ydc_sP[dNode] ; *(here->HSMHVSPdPtr +1) += omega*here->HSMHV_ydyn_sP[dNode]; *(here->HSMHVSPdpPtr) += here->HSMHV_ydc_sP[dNodePrime] ; *(here->HSMHVSPdpPtr +1) += omega*here->HSMHV_ydyn_sP[dNodePrime]; *(here->HSMHVSPgpPtr) += here->HSMHV_ydc_sP[gNodePrime] ; *(here->HSMHVSPgpPtr +1) += omega*here->HSMHV_ydyn_sP[gNodePrime]; *(here->HSMHVSPsPtr) += here->HSMHV_ydc_sP[sNode] ; *(here->HSMHVSPsPtr +1) += omega*here->HSMHV_ydyn_sP[sNode]; *(here->HSMHVSPspPtr) += here->HSMHV_ydc_sP[sNodePrime] ; *(here->HSMHVSPspPtr +1) += omega*here->HSMHV_ydyn_sP[sNodePrime]; *(here->HSMHVSPbpPtr) += here->HSMHV_ydc_sP[bNodePrime]; *(here->HSMHVSPbpPtr +1) += omega*here->HSMHV_ydyn_sP[bNodePrime]; if (flg_subNode > 0) { *(here->HSMHVSPsubPtr) += here->HSMHV_ydc_sP[subNode]; } if( here->HSMHVtempNode > 0) { *(here->HSMHVSPtempPtr) += model->HSMHV_type*here->HSMHV_ydc_sP[tempNode] ; *(here->HSMHVSPtempPtr +1) += model->HSMHV_type*omega*here->HSMHV_ydyn_sP[tempNode]; } if (flg_nqs) { *(here->HSMHVSPqiPtr) += model->HSMHV_type*here->HSMHV_ydc_sP[qiNode]; *(here->HSMHVSPqiPtr+1) += model->HSMHV_type*omega*here->HSMHV_ydyn_sP[qiNode]; } /*bulk prime*/ *(here->HSMHVBPdPtr) += here->HSMHV_ydc_bP[dNode]; *(here->HSMHVBPdPtr +1) += omega*here->HSMHV_ydyn_bP[dNode]; *(here->HSMHVBPsPtr) += here->HSMHV_ydc_bP[sNode]; *(here->HSMHVBPsPtr +1) += omega*here->HSMHV_ydyn_bP[sNode]; *(here->HSMHVBPdpPtr) += here->HSMHV_ydc_bP[dNodePrime]; *(here->HSMHVBPdpPtr +1) += omega*here->HSMHV_ydyn_bP[dNodePrime]; *(here->HSMHVBPgpPtr) += here->HSMHV_ydc_bP[gNodePrime] ; *(here->HSMHVBPgpPtr +1) += omega*here->HSMHV_ydyn_bP[gNodePrime]; *(here->HSMHVBPspPtr) += here->HSMHV_ydc_bP[sNodePrime]; *(here->HSMHVBPspPtr +1) += omega*here->HSMHV_ydyn_bP[sNodePrime]; *(here->HSMHVBPbpPtr) += here->HSMHV_ydc_bP[bNodePrime]; *(here->HSMHVBPbpPtr +1) += omega*here->HSMHV_ydyn_bP[bNodePrime]; *(here->HSMHVBPbPtr) += here->HSMHV_ydc_bP[bNode]; *(here->HSMHVBPbPtr +1) += omega*here->HSMHV_ydyn_bP[bNode]; *(here->HSMHVBPdbPtr) += here->HSMHV_ydc_bP[dbNode] ; *(here->HSMHVBPdbPtr +1) += omega*here->HSMHV_ydyn_bP[dbNode]; *(here->HSMHVBPsbPtr) += here->HSMHV_ydc_bP[sbNode] ; *(here->HSMHVBPsbPtr +1) += omega*here->HSMHV_ydyn_bP[sbNode]; if( here->HSMHVtempNode > 0) { *(here->HSMHVBPtempPtr) += model->HSMHV_type*here->HSMHV_ydc_bP[tempNode] ; *(here->HSMHVBPtempPtr +1) += model->HSMHV_type*omega*here->HSMHV_ydyn_bP[tempNode]; } if (flg_nqs) { *(here->HSMHVBPqbPtr) += model->HSMHV_type*here->HSMHV_ydc_bP[qbNode]; *(here->HSMHVBPqbPtr+1) += model->HSMHV_type*omega*here->HSMHV_ydyn_bP[qbNode]; } /*bulk*/ *(here->HSMHVBbpPtr) += here->HSMHV_ydc_b[bNodePrime] ; *(here->HSMHVBbpPtr +1) += omega*here->HSMHV_ydyn_b[bNodePrime]; *(here->HSMHVBbPtr) += here->HSMHV_ydc_b[bNode] ; *(here->HSMHVBbPtr +1) += omega*here->HSMHV_ydyn_b[bNode]; /*drain bulk*/ *(here->HSMHVDBdPtr) += here->HSMHV_ydc_db[dNode] ; *(here->HSMHVDBdPtr +1) += omega*here->HSMHV_ydyn_db[dNode]; *(here->HSMHVDBbpPtr) += here->HSMHV_ydc_db[bNodePrime] ; *(here->HSMHVDBbpPtr +1) += omega*here->HSMHV_ydyn_db[bNodePrime]; *(here->HSMHVDBdbPtr) += here->HSMHV_ydc_db[dbNode] ; *(here->HSMHVDBdbPtr +1) += omega*here->HSMHV_ydyn_db[dbNode]; if( here->HSMHVtempNode > 0) { *(here->HSMHVDBtempPtr) += model->HSMHV_type*here->HSMHV_ydc_db[tempNode] ; *(here->HSMHVDBtempPtr +1) += model->HSMHV_type*omega*here->HSMHV_ydyn_db[tempNode]; } /*source bulk*/ *(here->HSMHVSBsPtr) += here->HSMHV_ydc_sb[sNode] ; *(here->HSMHVSBsPtr +1) += omega*here->HSMHV_ydyn_sb[sNode]; *(here->HSMHVSBbpPtr) += here->HSMHV_ydc_sb[bNodePrime]; *(here->HSMHVSBbpPtr +1) += omega*here->HSMHV_ydyn_sb[bNodePrime]; *(here->HSMHVSBsbPtr) += here->HSMHV_ydc_sb[sbNode] ; *(here->HSMHVSBsbPtr +1) += omega*here->HSMHV_ydyn_sb[sbNode]; if( here->HSMHVtempNode > 0) { *(here->HSMHVSBtempPtr) += model->HSMHV_type*here->HSMHV_ydc_sb[tempNode]; *(here->HSMHVSBtempPtr +1) += model->HSMHV_type*omega*here->HSMHV_ydyn_sb[tempNode]; } /*temp*/ if( here->HSMHVtempNode > 0) { *(here->HSMHVTempdPtr) += model->HSMHV_type*here->HSMHV_ydc_t[dNode] ; *(here->HSMHVTempdPtr +1) += model->HSMHV_type*omega*here->HSMHV_ydyn_t[dNode]; *(here->HSMHVTempdpPtr) += model->HSMHV_type*here->HSMHV_ydc_t[dNodePrime] ; *(here->HSMHVTempdpPtr +1) += model->HSMHV_type*omega*here->HSMHV_ydyn_t[dNodePrime]; *(here->HSMHVTempgpPtr) += model->HSMHV_type*here->HSMHV_ydc_t[gNodePrime]; *(here->HSMHVTempgpPtr +1) += model->HSMHV_type*omega*here->HSMHV_ydyn_t[gNodePrime]; *(here->HSMHVTempsPtr) += model->HSMHV_type*here->HSMHV_ydc_t[sNode] ; *(here->HSMHVTempsPtr +1) += model->HSMHV_type*omega*here->HSMHV_ydyn_t[sNode]; *(here->HSMHVTempspPtr) += model->HSMHV_type*here->HSMHV_ydc_t[sNodePrime] ; *(here->HSMHVTempspPtr +1) += model->HSMHV_type*omega*here->HSMHV_ydyn_t[sNodePrime]; *(here->HSMHVTempbpPtr) += model->HSMHV_type*here->HSMHV_ydc_t[bNodePrime] ; *(here->HSMHVTempbpPtr +1) += model->HSMHV_type*omega*here->HSMHV_ydyn_t[bNodePrime]; *(here->HSMHVTemptempPtr) += here->HSMHV_ydc_t[tempNode] ; *(here->HSMHVTemptempPtr +1) += omega*here->HSMHV_ydyn_t[tempNode]; } /* additional entries for flat nqs handling */ if ( flg_nqs ) { /*qi*/ *(here->HSMHVQIdpPtr) += model->HSMHV_type*here->HSMHV_ydc_qi[dNodePrime]; *(here->HSMHVQIdpPtr+1) += model->HSMHV_type*omega*here->HSMHV_ydyn_qi[dNodePrime]; *(here->HSMHVQIgpPtr) += model->HSMHV_type*here->HSMHV_ydc_qi[gNodePrime]; *(here->HSMHVQIgpPtr+1) += model->HSMHV_type*omega*here->HSMHV_ydyn_qi[gNodePrime]; *(here->HSMHVQIspPtr) += model->HSMHV_type*here->HSMHV_ydc_qi[sNodePrime]; *(here->HSMHVQIspPtr+1) += model->HSMHV_type*omega*here->HSMHV_ydyn_qi[sNodePrime]; *(here->HSMHVQIbpPtr) += model->HSMHV_type*here->HSMHV_ydc_qi[bNodePrime]; *(here->HSMHVQIbpPtr+1) += model->HSMHV_type*omega*here->HSMHV_ydyn_qi[bNodePrime]; *(here->HSMHVQIqiPtr) += here->HSMHV_ydc_qi[qiNode]; *(here->HSMHVQIqiPtr+1) += omega*here->HSMHV_ydyn_qi[qiNode]; if ( here->HSMHVtempNode > 0 ) { *(here->HSMHVQItempPtr) += here->HSMHV_ydc_qi[tempNode]; *(here->HSMHVQItempPtr+1) += omega*here->HSMHV_ydyn_qi[tempNode]; } /*qb*/ *(here->HSMHVQBdpPtr) += model->HSMHV_type*here->HSMHV_ydc_qb[dNodePrime]; *(here->HSMHVQBdpPtr+1) += model->HSMHV_type*omega*here->HSMHV_ydyn_qb[dNodePrime]; *(here->HSMHVQBgpPtr) += model->HSMHV_type*here->HSMHV_ydc_qb[gNodePrime]; *(here->HSMHVQBgpPtr+1) += model->HSMHV_type*omega*here->HSMHV_ydyn_qb[gNodePrime]; *(here->HSMHVQBspPtr) += model->HSMHV_type*here->HSMHV_ydc_qb[sNodePrime]; *(here->HSMHVQBspPtr+1) += model->HSMHV_type*omega*here->HSMHV_ydyn_qb[sNodePrime]; *(here->HSMHVQBbpPtr) += model->HSMHV_type*here->HSMHV_ydc_qb[bNodePrime]; *(here->HSMHVQBbpPtr+1) += model->HSMHV_type*omega*here->HSMHV_ydyn_qb[bNodePrime]; *(here->HSMHVQBqbPtr) += here->HSMHV_ydc_qb[qbNode]; *(here->HSMHVQBqbPtr+1) += omega*here->HSMHV_ydyn_qb[qbNode]; if ( here->HSMHVtempNode > 0 ) { *(here->HSMHVQBtempPtr) += here->HSMHV_ydc_qb[tempNode]; *(here->HSMHVQBtempPtr+1) += omega*here->HSMHV_ydyn_qb[tempNode]; } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhvgetic.c0000644000175000017500000000273313546075722023225 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2012 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 1 SUBVERSION : 2 REVISION : 4 ) Model Parameter VERSION : 1.23 FILE : hsmhvgetic.c DATE : 2013.04.30 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "hsmhvdef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HSMHVgetic( GENmodel *inModel, CKTcircuit *ckt) { HSMHVmodel *model = (HSMHVmodel*)inModel; HSMHVinstance *here; /* * grab initial conditions out of rhs array. User specified, so use * external nodes to get values */ for ( ;model ;model = HSMHVnextModel(model)) { for ( here = HSMHVinstances(model); here ;here = HSMHVnextInstance(here)) { if (!here->HSMHV_icVBS_Given) { here->HSMHV_icVBS = *(ckt->CKTrhs + here->HSMHVbNode) - *(ckt->CKTrhs + here->HSMHVsNode); } if (!here->HSMHV_icVDS_Given) { here->HSMHV_icVDS = *(ckt->CKTrhs + here->HSMHVdNode) - *(ckt->CKTrhs + here->HSMHVsNode); } if (!here->HSMHV_icVGS_Given) { here->HSMHV_icVGS = *(ckt->CKTrhs + here->HSMHVgNode) - *(ckt->CKTrhs + here->HSMHVsNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhvsoachk.c0000644000175000017500000003613113546075722023401 0ustar carstencarsten/********** Copyright 2013 Dietmar Warning. All rights reserved. Author: 2013 Dietmar Warning **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "hsmhvdef.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/cpdefs.h" int HSMHVsoaCheck(CKTcircuit *ckt, GENmodel *inModel) { HSMHVmodel *model = (HSMHVmodel *) inModel; HSMHVinstance *here; double vgs, vgd, vgb, vds, vbs, vbd; /* actual mos voltages */ int maxwarns; static int warns_vgs = 0, warns_vgd = 0, warns_vgb = 0, warns_vds = 0, warns_vbs = 0, warns_vbd = 0; if (!ckt) { warns_vgs = 0; warns_vgd = 0; warns_vgb = 0; warns_vds = 0; warns_vbs = 0; warns_vbd = 0; return OK; } maxwarns = ckt->CKTsoaMaxWarns; for (; model; model = HSMHVnextModel(model)) { for (here = HSMHVinstances(model); here; here = HSMHVnextInstance(here)) { vgs = ckt->CKTrhsOld [here->HSMHVgNode] - ckt->CKTrhsOld [here->HSMHVsNodePrime]; vgd = ckt->CKTrhsOld [here->HSMHVgNode] - ckt->CKTrhsOld [here->HSMHVdNodePrime]; vgb = ckt->CKTrhsOld [here->HSMHVgNode] - ckt->CKTrhsOld [here->HSMHVbNodePrime]; vds = ckt->CKTrhsOld [here->HSMHVdNode] - ckt->CKTrhsOld [here->HSMHVsNodePrime]; vbs = ckt->CKTrhsOld [here->HSMHVbNode] - ckt->CKTrhsOld [here->HSMHVsNodePrime]; vbd = ckt->CKTrhsOld [here->HSMHVbNode] - ckt->CKTrhsOld [here->HSMHVdNodePrime]; if (!model->HSMHVvgsrMaxGiven) { if (fabs(vgs) > model->HSMHVvgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->HSMHVvgsMax); warns_vgs++; } if (!model->HSMHVvgbMaxGiven) { if (fabs(vgb) > model->HSMHVvgsMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgs_max=%g\n", vgb, model->HSMHVvgsMax); warns_vgb++; } } else { if (fabs(vgb) > model->HSMHVvgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->HSMHVvgbMax); warns_vgb++; } } } else { if (model->HSMHV_type > 0) { if (vgs > model->HSMHVvgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->HSMHVvgsMax); warns_vgs++; } if (-1*vgs > model->HSMHVvgsrMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgsr_max=%g\n", vgs, model->HSMHVvgsrMax); warns_vgs++; } } else { if (vgs > model->HSMHVvgsrMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgsr_max=%g\n", vgs, model->HSMHVvgsrMax); warns_vgs++; } if (-1*vgs > model->HSMHVvgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->HSMHVvgsMax); warns_vgs++; } } } if (!model->HSMHVvgdrMaxGiven) { if (fabs(vgd) > model->HSMHVvgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->HSMHVvgdMax); warns_vgd++; } } else { if (model->HSMHV_type > 0) { if (vgd > model->HSMHVvgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->HSMHVvgdMax); warns_vgd++; } if (-1*vgd > model->HSMHVvgdrMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgdr_max=%g\n", vgd, model->HSMHVvgdrMax); warns_vgd++; } } else { if (vgd > model->HSMHVvgdrMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgdr_max=%g\n", vgd, model->HSMHVvgdrMax); warns_vgd++; } if (-1*vgd > model->HSMHVvgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->HSMHVvgdMax); warns_vgd++; } } } if (fabs(vds) > model->HSMHVvdsMax) if (warns_vds < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vds=%g has exceeded Vds_max=%g\n", vds, model->HSMHVvdsMax); warns_vds++; } if (!model->HSMHVvgbrMaxGiven) { if (fabs(vgb) > model->HSMHVvgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->HSMHVvgbMax); warns_vgb++; } } else { if (model->HSMHV_type > 0) { if (vgb > model->HSMHVvgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->HSMHVvgbMax); warns_vgb++; } if (-1*vgb > model->HSMHVvgbrMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgbr_max=%g\n", vgb, model->HSMHVvgbrMax); warns_vgb++; } } else { if (vgb > model->HSMHVvgbrMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgbr_max=%g\n", vgb, model->HSMHVvgbrMax); warns_vgb++; } if (-1*vgb > model->HSMHVvgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->HSMHVvgbMax); warns_vgb++; } } } if (!model->HSMHVvbsrMaxGiven) { if (!model->HSMHVvbsMaxGiven) { if (fabs(vbs) > model->HSMHVvbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->HSMHVvbdMax); warns_vbs++; } } else { if (fabs(vbs) > model->HSMHVvbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->HSMHVvbsMax); warns_vbs++; } } } else { if (!model->HSMHVvbsMaxGiven) { if (model->HSMHV_type > 0) { if (vbs > model->HSMHVvbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->HSMHVvbdMax); warns_vbs++; } if (-1*vbs > model->HSMHVvbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->HSMHVvbsrMax); warns_vbs++; } } else { if (vbs > model->HSMHVvbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->HSMHVvbsrMax); warns_vbs++; } if (-1*vbs > model->HSMHVvbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->HSMHVvbdMax); warns_vbs++; } } } else { if (model->HSMHV_type > 0) { if (vbs > model->HSMHVvbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->HSMHVvbsMax); warns_vbs++; } if (-1*vbs > model->HSMHVvbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->HSMHVvbsrMax); warns_vbs++; } } else { if (vbs > model->HSMHVvbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->HSMHVvbsrMax); warns_vbs++; } if (-1*vbs > model->HSMHVvbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->HSMHVvbsMax); warns_vbs++; } } } } if (!model->HSMHVvbdrMaxGiven) { if (fabs(vbd) > model->HSMHVvbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->HSMHVvbdMax); warns_vbd++; } } else { if (model->HSMHV_type > 0) { if (vbd > model->HSMHVvbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->HSMHVvbdMax); warns_vbd++; } if (-1*vbd > model->HSMHVvbdrMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbdr_max=%g\n", vbd, model->HSMHVvbdrMax); warns_vbd++; } } else { if (vbd > model->HSMHVvbdrMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbdr_max=%g\n", vbd, model->HSMHVvbdrMax); warns_vbd++; } if (-1*vbd > model->HSMHVvbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->HSMHVvbdMax); warns_vbd++; } } } } } return OK; } tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhvinit.h0000644000175000017500000000040213546075722023071 0ustar carstencarsten#ifndef _HISIMINIT_H #define _HISIMINIT_H extern IFparm HSMHVpTable[ ]; extern IFparm HSMHVmPTable[ ]; extern char *HSMHVnames[ ]; extern int HSMHVpTSize; extern int HSMHVmPTSize; extern int HSMHVnSize; extern int HSMHViSize; extern int HSMHVmSize; #endif tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhvtrunc.c0000644000175000017500000000313413546075722023261 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2012 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 1 SUBVERSION : 2 REVISION : 4 ) Model Parameter VERSION : 1.23 FILE : hsmhvtrunc.c DATE : 2013.04.30 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "hsmhvdef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HSMHVtrunc( GENmodel *inModel, register CKTcircuit *ckt, double *timeStep) { register HSMHVmodel *model = (HSMHVmodel*)inModel; register HSMHVinstance *here; #ifdef STEPDEBUG double debugtemp=0.0 ; #endif /* STEPDEBUG */ for ( ;model != NULL ;model = HSMHVnextModel(model)) { for ( here=HSMHVinstances(model);here!=NULL ; here = HSMHVnextInstance(here)) { #ifdef STEPDEBUG debugtemp = *timeStep; #endif /* STEPDEBUG */ CKTterr(here->HSMHVqb,ckt,timeStep); CKTterr(here->HSMHVqg,ckt,timeStep); CKTterr(here->HSMHVqd,ckt,timeStep); CKTterr(here->HSMHVqbs,ckt,timeStep); CKTterr(here->HSMHVqbd,ckt,timeStep); CKTterr(here->HSMHVqfd,ckt,timeStep); CKTterr(here->HSMHVqfs,ckt,timeStep); #ifdef STEPDEBUG if ( debugtemp != *timeStep ) printf("device %s reduces step from %g to %g\n", here->HSMHVname, debugtemp, *timeStep); #endif /* STEPDEBUG */ } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhvdef.h0000644000175000017500000026777113546075722022714 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2012 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 1 SUBVERSION : 2 REVISION : 4 ) Model Parameter VERSION : 1.23 FILE : hsmhvdef DATE : 2013.04.30 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ #ifndef HSMHV #define HSMHV #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" /* declarations for HiSIMHV MOSFETs */ /* unit-converted model parameters */ typedef struct sHSMHVmodelMKSParam { double HSMHV_npext ; double HSMHV_vmax ; double HSMHV_ll ; double HSMHV_wl ; double HSMHV_svgsl ; double HSMHV_svgsw ; double HSMHV_svbsl ; double HSMHV_slgl ; double HSMHV_sub1l ; double HSMHV_slg ; double HSMHV_sub2l ; double HSMHV_subld2 ; double HSMHV_rd22 ; double HSMHV_rd23 ; double HSMHV_rd24 ; double HSMHV_rdtemp1 ; double HSMHV_rdtemp2 ; double HSMHV_rdvd ; double HSMHV_rdvdtemp1 ; double HSMHV_rdvdtemp2 ; //double HSMHV_muecb0 ; //double HSMHV_muecb1 ; //double HSMHV_muesr1 ; //double HSMHV_mueph1 ; double HSMHV_nsubsub ; double HSMHV_nsubpsti1 ; double HSMHV_muesti1 ; double HSMHV_wfc ; double HSMHV_glksd1 ; double HSMHV_glksd2 ; double HSMHV_glksd3 ; double HSMHV_gleak2 ; double HSMHV_gleak4 ; double HSMHV_gleak5 ; double HSMHV_gleak7 ; double HSMHV_glkb2 ; double HSMHV_fn2 ; double HSMHV_gidl1 ; double HSMHV_gidl2 ; double HSMHV_nfalp ; double HSMHV_nftrp ; double HSMHV_cit ; double HSMHV_ovslp ; double HSMHV_dly3 ; double HSMHV_rth0 ; double HSMHV_cth0 ; } HSMHVmodelMKSParam ; /* binning parameters */ typedef struct sHSMHVbinningParam { double HSMHV_vmax ; double HSMHV_bgtmp1 ; double HSMHV_bgtmp2 ; double HSMHV_eg0 ; double HSMHV_vfbover ; double HSMHV_nover ; double HSMHV_novers ; double HSMHV_wl2 ; double HSMHV_vfbc ; double HSMHV_nsubc ; double HSMHV_nsubp ; double HSMHV_scp1 ; double HSMHV_scp2 ; double HSMHV_scp3 ; double HSMHV_sc1 ; double HSMHV_sc2 ; double HSMHV_sc3 ; double HSMHV_pgd1 ; double HSMHV_pgd3 ; double HSMHV_ndep ; double HSMHV_ninv ; double HSMHV_muecb0 ; double HSMHV_muecb1 ; double HSMHV_mueph1 ; double HSMHV_vtmp ; double HSMHV_wvth0 ; double HSMHV_muesr1 ; double HSMHV_muetmp ; double HSMHV_sub1 ; double HSMHV_sub2 ; double HSMHV_svds ; double HSMHV_svbs ; double HSMHV_svgs ; double HSMHV_fn1 ; double HSMHV_fn2 ; double HSMHV_fn3 ; double HSMHV_fvbs ; double HSMHV_nsti ; double HSMHV_wsti ; double HSMHV_scsti1 ; double HSMHV_scsti2 ; double HSMHV_vthsti ; double HSMHV_muesti1 ; double HSMHV_muesti2 ; double HSMHV_muesti3 ; double HSMHV_nsubpsti1 ; double HSMHV_nsubpsti2 ; double HSMHV_nsubpsti3 ; double HSMHV_cgso ; double HSMHV_cgdo ; double HSMHV_js0 ; double HSMHV_js0sw ; double HSMHV_nj ; double HSMHV_cisbk ; double HSMHV_clm1 ; double HSMHV_clm2 ; double HSMHV_clm3 ; double HSMHV_wfc ; double HSMHV_gidl1 ; double HSMHV_gidl2 ; double HSMHV_gleak1 ; double HSMHV_gleak2 ; double HSMHV_gleak3 ; double HSMHV_gleak6 ; double HSMHV_glksd1 ; double HSMHV_glksd2 ; double HSMHV_glkb1 ; double HSMHV_glkb2 ; double HSMHV_nftrp ; double HSMHV_nfalp ; double HSMHV_pthrou ; double HSMHV_vdiffj ; double HSMHV_ibpc1 ; double HSMHV_ibpc2 ; double HSMHV_cgbo ; double HSMHV_cvdsover ; double HSMHV_falph ; double HSMHV_npext ; double HSMHV_powrat ; double HSMHV_rd ; double HSMHV_rd22 ; double HSMHV_rd23 ; double HSMHV_rd24 ; double HSMHV_rdict1 ; double HSMHV_rdov13 ; double HSMHV_rdslp1 ; double HSMHV_rdvb ; double HSMHV_rdvd ; double HSMHV_rdvg11 ; double HSMHV_rs ; double HSMHV_rth0 ; double HSMHV_vover ; /*-----------SHE--------------*/ double HSMHV_rth ; double HSMHV_cth ; /*-----------------------------*/ } HSMHVbinningParam ; /* unit-converted parameters for each instance */ typedef struct sHSMHVhereMKSParam { double HSMHV_vmax ; double HSMHV_subld2 ; //double HSMHV_muecb0 ; //double HSMHV_muecb1 ; //double HSMHV_muesr1 ; //double HSMHV_mueph1 ; double HSMHV_ndep ; double HSMHV_ninv ; double HSMHV_nsubc ; double HSMHV_nsubcdfm ; double HSMHV_nsubp ; double HSMHV_nsubpsti1 ; double HSMHV_muesti1 ; double HSMHV_nsti ; double HSMHV_npext ; double HSMHV_nover ; double HSMHV_novers ; double HSMHV_wfc ; double HSMHV_glksd1 ; double HSMHV_glksd2 ; double HSMHV_gleak2 ; double HSMHV_glkb2 ; double HSMHV_fn2 ; double HSMHV_gidl1 ; double HSMHV_gidl2 ; double HSMHV_nfalp ; double HSMHV_nftrp ; } HSMHVhereMKSParam ; /* information needed for each instance */ typedef struct sHSMHVinstance { struct GENinstance gen; #define HSMHVmodPtr(inst) ((struct sHSMHVmodel *)((inst)->gen.GENmodPtr)) #define HSMHVnextInstance(inst) ((struct sHSMHVinstance *)((inst)->gen.GENnextInstance)) #define HSMHVname gen.GENname #define HSMHVstates gen.GENstate const int HSMHVdNode; /* number of the drain node of the mosfet */ const int HSMHVgNode; /* number of the gate node of the mosfet */ const int HSMHVsNode; /* number of the source node of the mosfet */ const int HSMHVbNode; /* number of the bulk node of the mosfet */ const int HSMHVsubNodeExt; /* number of the substrate node */ const int HSMHVtempNodeExt;/* number of the temp node----------SHE--------*/ int HSMHVsubNode; /* number of the substrate node */ int HSMHVtempNode; /* number of the temp node */ int HSMHVdNodePrime; /* number od the inner drain node */ int HSMHVgNodePrime; /* number of the inner gate node */ int HSMHVsNodePrime; /* number od the inner source node */ int HSMHVbNodePrime; int HSMHVdbNode; int HSMHVsbNode; int HSMHVqiNode; /* number of the qi node in case of NQS */ int HSMHVqbNode; /* number of the qb node in case of NQS */ double HSMHV_noiflick; /* for 1/f noise calc. */ double HSMHV_noithrml; /* for thrmal noise calc. */ double HSMHV_noiigate; /* for induced gate noise */ double HSMHV_noicross; /* for induced gate noise */ /* instance */ int HSMHV_coselfheat; /* Self-heating model */ int HSMHV_cosubnode; /* switch tempNode to subNode */ double HSMHV_l; /* the length of the channel region */ double HSMHV_w; /* the width of the channel region */ double HSMHV_ad; /* the area of the drain diffusion */ double HSMHV_as; /* the area of the source diffusion */ double HSMHV_pd; /* perimeter of drain junction [m] */ double HSMHV_ps; /* perimeter of source junction [m] */ double HSMHV_nrd; /* equivalent num of squares of drain [-] (unused) */ double HSMHV_nrs; /* equivalent num of squares of source [-] (unused) */ double HSMHV_dtemp; double HSMHV_weff; /* the effective width of the channel region */ double HSMHV_weff_ld; /* the effective width of the drift region */ double HSMHV_weff_cv; /* the effective width of the drift region for capacitance */ double HSMHV_weff_nf; /* Weff * NF */ double HSMHV_weffcv_nf; /* Weffcv * NF */ double HSMHV_leff; /* the effective length of the channel region */ int HSMHV_corbnet ; double HSMHV_rbpb ; double HSMHV_rbpd ; double HSMHV_rbps ; double HSMHV_rbdb ; double HSMHV_rbsb ; int HSMHV_corg ; double HSMHV_ngcon; double HSMHV_xgw; double HSMHV_xgl; double HSMHV_nf; double HSMHV_sa; double HSMHV_sb; double HSMHV_sd; double HSMHV_nsubcdfm; double HSMHV_m; double HSMHV_subld1; double HSMHV_subld2; double HSMHV_lover; double HSMHV_lovers; double HSMHV_loverld; double HSMHV_ldrift1; double HSMHV_ldrift2; double HSMHV_ldrift1s; double HSMHV_ldrift2s; int HSMHV_called; /* flag to check the first call */ /* previous values to evaluate initial guess */ double HSMHV_mode_prv; double HSMHV_vbsc_prv; double HSMHV_vdsc_prv; double HSMHV_vgsc_prv; double HSMHV_ps0_prv; double HSMHV_ps0_dvbs_prv; double HSMHV_ps0_dvds_prv; double HSMHV_ps0_dvgs_prv; double HSMHV_ps0_dtemp_prv; double HSMHV_pds_prv; double HSMHV_pds_dvbs_prv; double HSMHV_pds_dvds_prv; double HSMHV_pds_dvgs_prv; double HSMHV_pds_dtemp_prv; /* double HSMHV_ids_prv; not used */ /* double HSMHV_ids_dvbs_prv; not used */ /* double HSMHV_ids_dvds_prv; not used */ /* double HSMHV_ids_dvgs_prv; not used */ /* double HSMHV_ids_dtemp_prv; not used */ double HSMHV_mode_prv2; double HSMHV_vbsc_prv2; double HSMHV_vdsc_prv2; double HSMHV_vgsc_prv2; double HSMHV_ps0_prv2; /* assigned but not used */ double HSMHV_ps0_dvbs_prv2; double HSMHV_ps0_dvds_prv2; double HSMHV_ps0_dvgs_prv2; double HSMHV_pds_prv2; /* assigned but not used */ double HSMHV_pds_dvbs_prv2; double HSMHV_pds_dvds_prv2; double HSMHV_pds_dvgs_prv2; double HSMHV_temp_prv; /* double HSMHV_time; /\* for debug print *\/ */ /* output */ /* int HSMHV_capop; not used */ /* double HSMHV_gd; not used */ /* double HSMHV_gs; not used */ double HSMHV_cgso; /* can be made local */ double HSMHV_cgdo; double HSMHV_cgbo; double HSMHV_cggo; double HSMHV_cdso; /* can be made local */ double HSMHV_cddo; double HSMHV_cdgo; double HSMHV_cdbo; double HSMHV_csso; /* can be made local */ double HSMHV_csdo; /* can be made local */ double HSMHV_csgo; /* can be made local */ double HSMHV_csbo; /* can be made local */ double HSMHV_cbdo; double HSMHV_cbgo; double HSMHV_cbbo; /* double HSMHV_cqyd; not used */ /* double HSMHV_cqyg; not used */ /* double HSMHV_cqyb; not used */ double HSMHV_von; /* vth */ double HSMHV_vdsat; /* double HSMHV_capgs; not used */ /* double HSMHV_capgd; not used */ /* double HSMHV_capgb; not used */ /* double HSMHV_rth0; not used */ /* double HSMHV_cth0; not used */ /* double HSMHV_cth; not used */ #define XDIM 14 double HSMHV_ydc_d[XDIM], HSMHV_ydc_dP[XDIM], HSMHV_ydc_g[XDIM], HSMHV_ydc_gP[XDIM], HSMHV_ydc_s[XDIM], HSMHV_ydc_sP[XDIM], HSMHV_ydc_bP[XDIM], HSMHV_ydc_b[XDIM], HSMHV_ydc_db[XDIM], HSMHV_ydc_sb[XDIM], HSMHV_ydc_t[XDIM], HSMHV_ydc_qi[XDIM], HSMHV_ydc_qb[XDIM]; double HSMHV_ydyn_d[XDIM], HSMHV_ydyn_dP[XDIM], HSMHV_ydyn_g[XDIM], HSMHV_ydyn_gP[XDIM], HSMHV_ydyn_s[XDIM], HSMHV_ydyn_sP[XDIM], HSMHV_ydyn_bP[XDIM], HSMHV_ydyn_b[XDIM], HSMHV_ydyn_db[XDIM], HSMHV_ydyn_sb[XDIM], HSMHV_ydyn_t[XDIM], HSMHV_ydyn_qi[XDIM], HSMHV_ydyn_qb[XDIM]; /* resistances */ double HSMHV_Rd ; /* different from HSMHV_rd */ double HSMHV_dRd_dVdse ; double HSMHV_dRd_dVgse ; double HSMHV_dRd_dVbse ; double HSMHV_dRd_dVsubs ; double HSMHV_dRd_dTi ; double HSMHV_Rs ; /* different from HSMHV_rs */ double HSMHV_dRs_dVdse ; double HSMHV_dRs_dVgse ; double HSMHV_dRs_dVbse ; double HSMHV_dRs_dVsubs ; double HSMHV_dRs_dTi ; /* drain current */ double HSMHV_ids; double HSMHV_gds; /* used for printout, but not loaded */ double HSMHV_gm; /* used for printout, but not loaded */ double HSMHV_gmbs; /* used for printout, but not loaded */ double HSMHV_dIds_dVdse ; double HSMHV_dIds_dVgse ; double HSMHV_dIds_dVbse ; double HSMHV_dIds_dVdsi ; double HSMHV_dIds_dVgsi ; double HSMHV_dIds_dVbsi ; double HSMHV_dIds_dTi ; /* substrate current */ double HSMHV_isub; /* double HSMHV_gbgs; not used */ /* double HSMHV_gbds; not used */ /* double HSMHV_gbbs; not used */ double HSMHV_dIsub_dVdsi ; double HSMHV_dIsub_dVgsi ; double HSMHV_dIsub_dVbsi ; double HSMHV_dIsub_dTi ; double HSMHV_dIsub_dVdse ; /* gidl and gisl current */ double HSMHV_igidl; /* gate induced drain leakage */ /* double HSMHV_gigidlgs; not used */ /* double HSMHV_gigidlds; not used */ /* double HSMHV_gigidlbs; not used */ double HSMHV_dIgidl_dVdsi ; double HSMHV_dIgidl_dVgsi ; double HSMHV_dIgidl_dVbsi ; double HSMHV_dIgidl_dTi ; double HSMHV_igisl; /* gate induced source leakage */ /* double HSMHV_gigislgd; not used */ /* double HSMHV_gigislsd; not used */ /* double HSMHV_gigislbd; not used */ double HSMHV_dIgisl_dVdsi ; double HSMHV_dIgisl_dVgsi ; double HSMHV_dIgisl_dVbsi ; double HSMHV_dIgisl_dTi ; /* gate leakage currents */ double HSMHV_igb; /* gate tunneling current (gate to bulk) */ /* double HSMHV_gigbg; not used */ /* double HSMHV_gigbd; not used */ /* double HSMHV_gigbb; not used */ /* double HSMHV_gigbs; not used */ double HSMHV_dIgb_dVdsi ; double HSMHV_dIgb_dVgsi ; double HSMHV_dIgb_dVbsi ; double HSMHV_dIgb_dTi ; double HSMHV_igd; /* gate tunneling current (gate to drain) */ /* double HSMHV_gigdg; not used */ /* double HSMHV_gigdd; not used */ /* double HSMHV_gigdb; not used */ /* double HSMHV_gigds; not used */ double HSMHV_dIgd_dVdsi ; double HSMHV_dIgd_dVgsi ; double HSMHV_dIgd_dVbsi ; double HSMHV_dIgd_dTi ; double HSMHV_igs; /* gate tunneling current (gate to source) */ /* double HSMHV_gigsg; not used */ /* double HSMHV_gigsd; not used */ /* double HSMHV_gigsb; not used */ /* double HSMHV_gigss; not used */ double HSMHV_dIgs_dVdsi ; double HSMHV_dIgs_dVgsi ; double HSMHV_dIgs_dVbsi ; double HSMHV_dIgs_dTi ; /* charges */ double HSMHV_qd; double HSMHV_cdgb; /* used for printout, but not loaded */ /* double HSMHV_cddb; not used */ /* double HSMHV_cdsb; not used */ /* double HSMHVcdT; not used */ double HSMHV_dQdi_dVdsi ; double HSMHV_dQdi_dVgsi ; double HSMHV_dQdi_dVbsi ; double HSMHV_dQdi_dTi ; double HSMHV_qg; double HSMHV_cggb; /* used for printout, but not loaded */ double HSMHV_cgdb; /* used for printout, but not loaded */ double HSMHV_cgsb; /* used for printout, but not loaded */ /* double HSMHVcgT; not used */ double HSMHV_dQg_dVdsi ; double HSMHV_dQg_dVgsi ; double HSMHV_dQg_dVbsi ; double HSMHV_dQg_dTi ; double HSMHV_qs; double HSMHV_dQsi_dVdsi ; double HSMHV_dQsi_dVgsi ; double HSMHV_dQsi_dVbsi ; double HSMHV_dQsi_dTi ; double HSMHV_qb; /* bulk charge qb = -(qg + qd + qs) */ double HSMHV_cbgb; /* used for printout, but not loaded */ /* double HSMHV_cbdb; not used */ /* double HSMHV_cbsb; not used */ /* double HSMHVcbT; not used */ double HSMHV_dQb_dVdsi ; /* Qb: bulk charge inclusive overlaps, Qbulk: bulk charge without overlaps (see above) */ double HSMHV_dQb_dVgsi ; double HSMHV_dQb_dVbsi ; double HSMHV_dQb_dTi ; /* outer charges (fringing etc.) */ double HSMHV_qdp ; double HSMHV_dqdp_dVdse ; double HSMHV_dqdp_dVgse ; double HSMHV_dqdp_dVbse ; double HSMHV_dqdp_dTi ; double HSMHV_qsp ; double HSMHV_dqsp_dVdse ; double HSMHV_dqsp_dVgse ; double HSMHV_dqsp_dVbse ; double HSMHV_dqsp_dTi ; double HSMHV_qgext ; double HSMHV_dQgext_dVdse ; double HSMHV_dQgext_dVgse ; double HSMHV_dQgext_dVbse ; double HSMHV_dQgext_dTi ; double HSMHV_qdext ; double HSMHV_dQdext_dVdse ; double HSMHV_dQdext_dVgse ; double HSMHV_dQdext_dVbse ; double HSMHV_dQdext_dTi ; double HSMHV_qbext ; double HSMHV_dQbext_dVdse ; double HSMHV_dQbext_dVgse ; double HSMHV_dQbext_dVbse ; double HSMHV_dQbext_dTi ; double HSMHV_qsext ; double HSMHV_dQsext_dVdse ; double HSMHV_dQsext_dVgse ; double HSMHV_dQsext_dVbse ; double HSMHV_dQsext_dTi ; /* junctions */ double HSMHV_ibd; double HSMHV_gbd; double HSMHV_gbdT; double HSMHV_ibs; double HSMHV_gbs; double HSMHV_gbsT; double HSMHV_qbd; double HSMHV_capbd; double HSMHV_gcbdT; double HSMHV_qbs; double HSMHV_capbs; double HSMHV_gcbsT; /* double HSMHV_gtempg; not used */ /* double HSMHV_gtempt; not used */ /* double HSMHV_gtempd; not used */ /* double HSMHV_gtempb; not used */ /* double HSMHV_gmt; not used */ /* double HSMHV_isubt; not used */ /* NQS */ double HSMHV_tau ; double HSMHV_tau_dVgsi ; double HSMHV_tau_dVdsi ; double HSMHV_tau_dVbsi ; double HSMHV_tau_dTi ; double HSMHV_Xd ; double HSMHV_Xd_dVgsi ; double HSMHV_Xd_dVdsi ; double HSMHV_Xd_dVbsi ; double HSMHV_Xd_dTi ; double HSMHV_Qi ; double HSMHV_Qi_dVgsi ; double HSMHV_Qi_dVdsi ; double HSMHV_Qi_dVbsi ; double HSMHV_Qi_dTi ; double HSMHV_taub ; double HSMHV_taub_dVgsi ; double HSMHV_taub_dVdsi ; double HSMHV_taub_dVbsi ; double HSMHV_taub_dTi ; double HSMHV_Qbulk ; /* Qbulk: without overlaps, Qb: inclusive overlaps (see below) */ double HSMHV_Qbulk_dVgsi ; double HSMHV_Qbulk_dVdsi ; double HSMHV_Qbulk_dVbsi ; double HSMHV_Qbulk_dTi ; /* internal variables */ double HSMHV_eg ; double HSMHV_beta ; double HSMHV_beta_inv ; double HSMHV_beta2 ; double HSMHV_betatnom ; double HSMHV_nin ; double HSMHV_egp12 ; double HSMHV_egp32 ; double HSMHV_lgate ; double HSMHV_wg ; double HSMHV_mueph ; double HSMHV_mphn0 ; double HSMHV_mphn1 ; double HSMHV_muesr ; double HSMHV_rdvd ; double HSMHV_rsvd ; /* for the reverse mode */ double HSMHV_rd23 ; double HSMHV_ninvd ; double HSMHV_ninvd0 ; double HSMHV_nsub ; double HSMHV_qnsub ; double HSMHV_qnsub_esi ; double HSMHV_2qnsub_esi ; double HSMHV_ptovr0 ; double HSMHV_ptovr ; double HSMHV_vmax0 ; double HSMHV_vmax ; double HSMHV_pb2 ; double HSMHV_pb20 ; double HSMHV_pb2c ; double HSMHV_cnst0 ; double HSMHV_cnst1 ; double HSMHV_isbd ; double HSMHV_isbd2 ; double HSMHV_isbs ; double HSMHV_isbs2 ; double HSMHV_vbdt ; double HSMHV_vbst ; double HSMHV_exptemp ; double HSMHV_wsti ; double HSMHV_cnstpgd ; /* double HSMHV_ninvp0 ; not used */ /* double HSMHV_ninv0 ; not used */ double HSMHV_grbpb ; double HSMHV_grbpd ; double HSMHV_grbps ; double HSMHV_grg ; double HSMHV_rs ; double HSMHV_rs0 ; double HSMHV_rd ; double HSMHV_rd0 ; double HSMHV_rdtemp0 ; double HSMHV_clmmod ; double HSMHV_lgatesm ; double HSMHV_dVthsm ; double HSMHV_ddlt ; double HSMHV_xsub1 ; double HSMHV_xsub2 ; double HSMHV_xgate ; double HSMHV_xvbs ; double HSMHV_vg2const ; double HSMHV_wdpl ; double HSMHV_wdplp ; double HSMHV_cfrng ; double HSMHV_jd_nvtm_inv ; double HSMHV_jd_expcd ; double HSMHV_jd_expcs ; double HSMHV_sqrt_eg ; double HSMHV_egtnom ; double HSMHV_cecox ; double HSMHV_msc ; int HSMHV_flg_pgd ; double HSMHV_ndep_o_esi ; double HSMHV_ninv_o_esi ; double HSMHV_cqyb0 ; double HSMHV_cnst0over ; double HSMHV_cnst0overs ; double HSMHV_costi00 ; double HSMHV_nsti_p2 ; double HSMHV_costi0 ; double HSMHV_costi0_p2 ; double HSMHV_costi1 ; double HSMHV_ps0ldinib ; double HSMHV_ps0ldinibs ; double HSMHV_rdvdtemp0 ; double HSMHV_rthtemp0 ; double HSMHV_powratio ; double HSMHV_mueph1 ; double HSMHV_nsubp; double HSMHV_nsubc; HSMHVhereMKSParam hereMKS ; /* unit-converted parameters */ HSMHVbinningParam pParam ; /* binning parameters */ /* no use in SPICE3f5 double HSMHVdrainSquares; the length of the drain in squares double HSMHVsourceSquares; the length of the source in squares */ double HSMHVsourceConductance; /* cond. of source (or 0): set in setup */ double HSMHVdrainConductance; /* cond. of drain (or 0): set in setup */ double HSMHV_icVBS; /* initial condition B-S voltage */ double HSMHV_icVDS; /* initial condition D-S voltage */ double HSMHV_icVGS; /* initial condition G-S voltage */ int HSMHV_off; /* non-zero to indicate device is off for dc analysis */ int HSMHV_mode; /* device mode : 1 = normal, -1 = inverse */ unsigned HSMHV_coselfheat_Given :1; unsigned HSMHV_cosubnode_Given :1; unsigned HSMHV_l_Given :1; unsigned HSMHV_w_Given :1; unsigned HSMHV_ad_Given :1; unsigned HSMHV_as_Given :1; unsigned HSMHV_pd_Given :1; unsigned HSMHV_ps_Given :1; unsigned HSMHV_nrd_Given :1; unsigned HSMHV_nrs_Given :1; unsigned HSMHV_dtemp_Given :1; unsigned HSMHV_icVBS_Given :1; unsigned HSMHV_icVDS_Given :1; unsigned HSMHV_icVGS_Given :1; unsigned HSMHV_corbnet_Given :1; unsigned HSMHV_rbpb_Given :1; unsigned HSMHV_rbpd_Given :1; unsigned HSMHV_rbps_Given :1; unsigned HSMHV_rbdb_Given :1; unsigned HSMHV_rbsb_Given :1; unsigned HSMHV_corg_Given :1; unsigned HSMHV_ngcon_Given :1; unsigned HSMHV_xgw_Given :1; unsigned HSMHV_xgl_Given :1; unsigned HSMHV_nf_Given :1; unsigned HSMHV_sa_Given :1; unsigned HSMHV_sb_Given :1; unsigned HSMHV_sd_Given :1; unsigned HSMHV_nsubcdfm_Given :1; unsigned HSMHV_m_Given :1; unsigned HSMHV_subld1_Given :1; unsigned HSMHV_subld2_Given :1; unsigned HSMHV_lover_Given :1; unsigned HSMHV_lovers_Given :1; unsigned HSMHV_loverld_Given :1; unsigned HSMHV_ldrift1_Given :1; unsigned HSMHV_ldrift2_Given :1; unsigned HSMHV_ldrift1s_Given :1; unsigned HSMHV_ldrift2s_Given :1; /* unsigned HSMHV_rth0_Given :1; not used */ /* unsigned HSMHV_cth0_Given :1; not used */ /* pointers to sparse matrix */ double *HSMHVGgPtr; /* pointer to sparse matrix element at (gate node,gate node) */ double *HSMHVGgpPtr; /* pointer to sparse matrix element at (gate node,gate prime node) */ /* double *HSMHVGdpPtr; not used */ /* double *HSMHVGspPtr; not used */ /* double *HSMHVGbpPtr; not used */ double *HSMHVGPgPtr; /* pointer to sparse matrix element at (gate prime node,gate node) */ double *HSMHVGPgpPtr; /* pointer to sparse matrix element at (gate prime node,gate prime node) */ double *HSMHVGPdpPtr; /* pointer to sparse matrix element at (gate prime node,drain prime node) */ double *HSMHVGPspPtr; /* pointer to sparse matrix element at (gate prime node,source prime node) */ double *HSMHVGPbpPtr; /* pointer to sparse matrix element at (gate prime node,bulk prime node) */ double *HSMHVDPdPtr; /* pointer to sparse matrix element at (drain prime node,drain node) */ double *HSMHVDPdpPtr; /* pointer to sparse matrix element at (drain prime node,drain prime node) */ double *HSMHVDPgpPtr; /* pointer to sparse matrix element at (drain prime node,gate prime node) */ double *HSMHVDPspPtr; /* pointer to sparse matrix element at (drain prime node,source prime node) */ double *HSMHVDPbpPtr; /* pointer to sparse matrix element at (drain prime node,bulk prime node) */ double *HSMHVDdPtr; /* pointer to sparse matrix element at (Drain node,drain node) */ double *HSMHVDdpPtr; /* pointer to sparse matrix element at (drain node,drain prime node) */ double *HSMHVDspPtr; /* pointer to sparse matrix element at (drain node,source prime node) */ double *HSMHVDdbPtr; /* pointer to sparse matrix element at (drain node,drain body node) */ double *HSMHVSPsPtr; /* pointer to sparse matrix element at (source prime node,source node) */ double *HSMHVSPspPtr; /* pointer to sparse matrix element at (source prime node,source prime node) */ double *HSMHVSPgpPtr; /* pointer to sparse matrix element at (source prime node,gate prime node) */ double *HSMHVSPdpPtr; /* pointer to sparse matrix element at (source prime node,drain prime node) */ double *HSMHVSPbpPtr; /* pointer to sparse matrix element at (source prime node,bulk prime node) */ double *HSMHVSsPtr; /* pointer to sparse matrix element at (source node,source node) */ double *HSMHVSspPtr; /* pointer to sparse matrix element at (source node,source prime node) */ double *HSMHVSdpPtr; /* pointer to sparse matrix element at (source node,drain prime node) */ double *HSMHVSsbPtr; /* pointer to sparse matrix element at (source node,source body node) */ double *HSMHVBPgpPtr; /* pointer to sparse matrix element at (bulk prime node,gate prime node) */ double *HSMHVBPbpPtr; /* pointer to sparse matrix element at (bulk prime node,bulk prime node) */ double *HSMHVBPdPtr; /* pointer to sparse matrix element at (bulk prime node,drain node) */ double *HSMHVBPdpPtr; /* pointer to sparse matrix element at (bulk prime node,drain prime node) */ double *HSMHVBPspPtr; /* pointer to sparse matrix element at (bulk prime node,source prime node) */ double *HSMHVBPsPtr; /* pointer to sparse matrix element at (bulk prime node,source node) */ double *HSMHVBPbPtr; /* pointer to sparse matrix element at (bulk prime node,bulk node) */ double *HSMHVBPdbPtr; /* pointer to sparse matrix element at (bulk prime node,source body node) */ double *HSMHVBPsbPtr; /* pointer to sparse matrix element at (bulk prime node,source body node) */ double *HSMHVDBdPtr; /* pointer to sparse matrix element at (drain body node,drain node) */ double *HSMHVDBdbPtr; /* pointer to sparse matrix element at (drain body node,drain body node) */ double *HSMHVDBbpPtr; /* pointer to sparse matrix element at (drain body node,bulk prime node) */ /* double *HSMHVDBbPtr; not used */ double *HSMHVSBsPtr; /* pointer to sparse matrix element at (source body node,source node) */ double *HSMHVSBbpPtr; /* pointer to sparse matrix element at (source body node,bulk prime node) */ /* double *HSMHVSBbPtr; not used */ double *HSMHVSBsbPtr; /* pointer to sparse matrix element at (source body node,source body node) */ /* double *HSMHVBsbPtr; not used */ double *HSMHVBbpPtr; /* pointer to sparse matrix element at (bulk node,bulk prime node) */ /* double *HSMHVBdbPtr; not used */ double *HSMHVBbPtr; /* pointer to sparse matrix element at (bulk node,bulk node) */ double *HSMHVTemptempPtr; /* pointer to sparse matrix element at (temp node, temp node) */ double *HSMHVTempdPtr; /* pointer to sparse matrix element at (temp node, drain node) */ double *HSMHVTempdpPtr; /* pointer to sparse matrix element at (temp node, drain prime node) */ double *HSMHVTempsPtr; /* pointer to sparse matrix element at (temp node, source node) */ double *HSMHVTempspPtr; /* pointer to sparse matrix element at (temp node, source prime node) */ /* double *HSMHVTempgPtr; not used */ double *HSMHVTempgpPtr; /* pointer to sparse matrix element at (temp node, gate prime node) */ /* double *HSMHVTempbPtr; not used */ double *HSMHVTempbpPtr; /* pointer to sparse matrix element at (temp node, bulk prime node) */ /* double *HSMHVGtempPtr; not used */ double *HSMHVGPtempPtr; /* pointer to sparse matrix element at (gate prime node, temp node) */ double *HSMHVDPtempPtr; /* pointer to sparse matrix element at (drain prime node, temp node) */ double *HSMHVSPtempPtr; /* pointer to sparse matrix element at (source prime node, temp node) */ /* double *HSMHVBtempPtr; not used */ double *HSMHVBPtempPtr; /* pointer to sparse matrix element at (bulk prime node, temp node) */ double *HSMHVDBtempPtr; /* pointer to sparse matrix element at (drain bulk node, temp node) */ double *HSMHVSBtempPtr; /* pointer to sparse matrix element at (source bulk node, temp node) */ double *HSMHVDgpPtr; /* pointer to sparse matrix element at (drain node, gate prime node) */ double *HSMHVDsPtr; /* pointer to sparse matrix element at (drain node, source node) */ double *HSMHVDbpPtr; /* pointer to sparse matrix element at (drain node, bulk prime node) */ double *HSMHVDtempPtr; /* pointer to sparse matrix element at (drain node, temp node) */ double *HSMHVDPsPtr; /* pointer to sparse matrix element at (drain prime node, source node) */ double *HSMHVGPdPtr; /* pointer to sparse matrix element at (gate prime node, drain node) */ double *HSMHVGPsPtr; /* pointer to sparse matrix element at (gate prime node, source node) */ double *HSMHVSdPtr; /* pointer to sparse matrix element at (source node, drain node) */ double *HSMHVSgpPtr; /* pointer to sparse matrix element at (source node, gate prime node) */ double *HSMHVSbpPtr; /* pointer to sparse matrix element at (source node, bulk prime node) */ double *HSMHVStempPtr; /* pointer to sparse matrix element at (source node, temp node) */ double *HSMHVSPdPtr; /* pointer to sparse matrix element at (source prime node, drain node) */ /* nqs related pointers */ double *HSMHVDPqiPtr; /* pointer to sparse matrix element at (drain prime node, qi_nqs node) */ double *HSMHVGPqiPtr; /* pointer to sparse matrix element at (gate prime node, qi_nqs node) */ double *HSMHVGPqbPtr; /* pointer to sparse matrix element at (gate prime node, qb_nqs node) */ double *HSMHVSPqiPtr; /* pointer to sparse matrix element at (source prime node, qi_nqs node) */ double *HSMHVBPqbPtr; /* pointer to sparse matrix element at (bulk prime node, qb_nqs node) */ double *HSMHVQIdpPtr; /* pointer to sparse matrix element at (qi_nqs node, drain prime node) */ double *HSMHVQIgpPtr; /* pointer to sparse matrix element at (qi_nqs node, gate prime node) */ double *HSMHVQIspPtr; /* pointer to sparse matrix element at (qi_nqs node, source prime node) */ double *HSMHVQIbpPtr; /* pointer to sparse matrix element at (qi_nqs node, bulk prime node) */ double *HSMHVQIqiPtr; /* pointer to sparse matrix element at (qi_nqs node, qi_nqs node) */ double *HSMHVQBdpPtr; /* pointer to sparse matrix element at (qb_nqs node, drain prime node) */ double *HSMHVQBgpPtr; /* pointer to sparse matrix element at (qb_nqs node, gate prime node) */ double *HSMHVQBspPtr; /* pointer to sparse matrix element at (qb_nqs node, source prime node) */ double *HSMHVQBbpPtr; /* pointer to sparse matrix element at (qb_nqs node, bulk prime node) */ double *HSMHVQBqbPtr; /* pointer to sparse matrix element at (qb_nqs node, qb_nqs node) */ double *HSMHVQItempPtr; /* pointer to sparse matrix element at (qi_nqs node, temp node) */ double *HSMHVQBtempPtr; /* pointer to sparse matrix element at (qb_nqs node, temp node) */ /* Substrate effect related pointers */ double *HSMHVDsubPtr; /* pointer to sparse matrix element at (drain node, substrate node) */ double *HSMHVDPsubPtr; /* pointer to sparse matrix element at (drain prime node, substrate node) */ double *HSMHVSsubPtr; /* pointer to sparse matrix element at (source node, substrate node) */ double *HSMHVSPsubPtr; /* pointer to sparse matrix element at (source prime node, substrate node) */ /* common state values in hisim module */ #define HSMHVvbd HSMHVstates+ 0 #define HSMHVvbs HSMHVstates+ 1 #define HSMHVvgs HSMHVstates+ 2 #define HSMHVvds HSMHVstates+ 3 #define HSMHVvdbs HSMHVstates+ 4 #define HSMHVvdbd HSMHVstates+ 5 #define HSMHVvsbs HSMHVstates+ 6 #define HSMHVvges HSMHVstates+ 7 #define HSMHVvsubs HSMHVstates+ 8 /* substrate bias */ #define HSMHVdeltemp HSMHVstates+ 9 #define HSMHVvdse HSMHVstates+ 10 #define HSMHVvgse HSMHVstates+ 11 #define HSMHVvbse HSMHVstates+ 12 #define HSMHVqb HSMHVstates+ 13 #define HSMHVcqb HSMHVstates+ 14 #define HSMHVqg HSMHVstates+ 15 #define HSMHVcqg HSMHVstates+ 16 #define HSMHVqd HSMHVstates+ 17 #define HSMHVcqd HSMHVstates+ 18 #define HSMHVqbs HSMHVstates+ 19 #define HSMHVcqbs HSMHVstates+ 20 #define HSMHVqbd HSMHVstates+ 21 #define HSMHVcqbd HSMHVstates+ 22 #define HSMHVqth HSMHVstates+ 23 #define HSMHVcqth HSMHVstates+ 24 /*add fringing capacitance*/ #define HSMHVqfd HSMHVstates+ 25 #define HSMHVcqfd HSMHVstates+ 26 #define HSMHVqfs HSMHVstates+ 27 #define HSMHVcqfs HSMHVstates+ 28 /*add external drain capacitance*/ #define HSMHVqdE HSMHVstates+ 29 #define HSMHVcqdE HSMHVstates+ 30 #define HSMHVnumStates 31 /* nqs charges */ #define HSMHVqi_nqs HSMHVstates+ 32 #define HSMHVdotqi_nqs HSMHVstates + 33 #define HSMHVqb_nqs HSMHVstates+ 34 #define HSMHVdotqb_nqs HSMHVstates + 35 #define HSMHVnumStatesNqs 36 /* indices to the array of HiSIMHV NOISE SOURCES */ #define HSMHVRDNOIZ 0 #define HSMHVRSNOIZ 1 #define HSMHVIDNOIZ 2 #define HSMHVFLNOIZ 3 #define HSMHVIGNOIZ 4 #define HSMHVTOTNOIZ 5 #define HSMHVNSRCS 6 /* the number of HiSIMHV MOSFET noise sources */ #ifndef NONOISE double HSMHVnVar[NSTATVARS][HSMHVNSRCS]; #else /* NONOISE */ double **HSMHVnVar; #endif /* NONOISE */ } HSMHVinstance ; /* per model data */ typedef struct sHSMHVmodel { /* model structure for a resistor */ struct GENmodel gen; #define HSMHVmodType gen.GENmodType #define HSMHVnextModel(inst) ((struct sHSMHVmodel *)((inst)->gen.GENnextModel)) #define HSMHVinstances(inst) ((HSMHVinstance *)((inst)->gen.GENinstances)) #define HSMHVmodName gen.GENmodName int HSMHV_type; /* device type: 1 = nmos, -1 = pmos */ int HSMHV_level; /* level */ int HSMHV_info; /* information */ int HSMHV_noise; /* noise model selecter see hsmhvnoi.c */ char *HSMHV_version; /* model version */ int HSMHV_show; /* show physical value 1, 2, ... , 11 */ int HSMHV_corsrd ; int HSMHV_corg ; int HSMHV_coiprv ; int HSMHV_copprv ; int HSMHV_coadov ; int HSMHV_coisub ; int HSMHV_coiigs ; int HSMHV_cogidl ; int HSMHV_coovlp ; int HSMHV_coovlps ; int HSMHV_coflick ; int HSMHV_coisti ; int HSMHV_conqs ; int HSMHV_corbnet ; int HSMHV_cothrml; int HSMHV_coign; /* Induced gate noise */ int HSMHV_codfm; /* DFM */ int HSMHV_coqovsm ; int HSMHV_coselfheat; /* Self-heating model */ int HSMHV_cosubnode; /* switch tempNode to subNode */ int HSMHV_cosym; /* Symmetry model for HV */ int HSMHV_cotemp; int HSMHV_coldrift; double HSMHV_vmax ; double HSMHV_vmaxt1 ; double HSMHV_vmaxt2 ; double HSMHV_bgtmp1 ; double HSMHV_bgtmp2 ; double HSMHV_eg0 ; double HSMHV_tox ; double HSMHV_xld ; double HSMHV_xldld ; double HSMHV_xwdld ; double HSMHV_lover ; double HSMHV_lovers ; double HSMHV_rdov11 ; double HSMHV_rdov12 ; double HSMHV_rdov13 ; double HSMHV_rdslp1 ; double HSMHV_rdict1 ; double HSMHV_rdslp2 ; double HSMHV_rdict2 ; double HSMHV_loverld ; double HSMHV_ldrift1 ; double HSMHV_ldrift2 ; double HSMHV_ldrift1s ; double HSMHV_ldrift2s ; double HSMHV_subld1 ; double HSMHV_subld2 ; double HSMHV_ddltmax ; double HSMHV_ddltslp ; double HSMHV_ddltict ; double HSMHV_vfbover ; double HSMHV_nover ; double HSMHV_novers ; double HSMHV_xwd ; double HSMHV_xwdc ; double HSMHV_xl ; double HSMHV_xw ; double HSMHV_saref ; double HSMHV_sbref ; double HSMHV_ll ; double HSMHV_lld ; double HSMHV_lln ; double HSMHV_wl ; double HSMHV_wl1 ; double HSMHV_wl1p ; double HSMHV_wl2 ; double HSMHV_wl2p ; double HSMHV_wld ; double HSMHV_wln ; double HSMHV_xqy ; double HSMHV_xqy1 ; double HSMHV_xqy2 ; double HSMHV_rs; /* source contact resistance */ double HSMHV_rd; /* drain contact resistance */ double HSMHV_rsh; /* source/drain diffusion sheet resistance */ double HSMHV_rshg; /* double HSMHV_ngcon; */ /* double HSMHV_xgw; */ /* double HSMHV_xgl; */ /* double HSMHV_nf; */ double HSMHV_vfbc ; double HSMHV_vbi ; double HSMHV_nsubc ; double HSMHV_qdftvd ; double HSMHV_parl2 ; double HSMHV_lp ; double HSMHV_nsubp ; double HSMHV_nsubp0 ; double HSMHV_nsubwp ; double HSMHV_scp1 ; double HSMHV_scp2 ; double HSMHV_scp3 ; double HSMHV_sc1 ; double HSMHV_sc2 ; double HSMHV_sc3 ; double HSMHV_sc4 ; double HSMHV_pgd1 ; double HSMHV_pgd2 ; double HSMHV_pgd3 ; double HSMHV_pgd4 ; double HSMHV_ndep ; double HSMHV_ndepl ; double HSMHV_ndeplp ; double HSMHV_ninv ; double HSMHV_ninvd ; double HSMHV_ninvdw ; double HSMHV_ninvdwp ; double HSMHV_ninvdt1 ; double HSMHV_ninvdt2 ; double HSMHV_muecb0 ; double HSMHV_muecb1 ; double HSMHV_mueph1 ; double HSMHV_mueph0 ; double HSMHV_muephw ; double HSMHV_muepwp ; double HSMHV_muephl ; double HSMHV_mueplp ; double HSMHV_muephs ; double HSMHV_muepsp ; double HSMHV_vtmp ; double HSMHV_wvth0 ; double HSMHV_muesr1 ; double HSMHV_muesr0 ; double HSMHV_muesrw ; double HSMHV_mueswp ; double HSMHV_muesrl ; double HSMHV_mueslp ; double HSMHV_bb ; double HSMHV_sub1 ; double HSMHV_sub2 ; double HSMHV_svgs ; double HSMHV_svbs ; double HSMHV_svbsl ; double HSMHV_svds ; double HSMHV_slg ; double HSMHV_sub1l ; double HSMHV_sub2l ; double HSMHV_fn1 ; double HSMHV_fn2 ; double HSMHV_fn3 ; double HSMHV_fvbs ; double HSMHV_svgsl ; double HSMHV_svgslp ; double HSMHV_svgswp ; double HSMHV_svgsw ; double HSMHV_svbslp ; double HSMHV_slgl ; double HSMHV_slglp ; double HSMHV_sub1lp ; double HSMHV_nsti ; double HSMHV_wsti ; double HSMHV_wstil ; double HSMHV_wstilp ; double HSMHV_wstiw ; double HSMHV_wstiwp ; double HSMHV_scsti1 ; double HSMHV_scsti2 ; double HSMHV_vthsti ; double HSMHV_vdsti ; double HSMHV_muesti1 ; double HSMHV_muesti2 ; double HSMHV_muesti3 ; double HSMHV_nsubpsti1 ; double HSMHV_nsubpsti2 ; double HSMHV_nsubpsti3 ; double HSMHV_lpext ; double HSMHV_npext ; double HSMHV_scp22 ; double HSMHV_scp21 ; double HSMHV_bs1 ; double HSMHV_bs2 ; double HSMHV_cgso ; double HSMHV_cgdo ; double HSMHV_cgbo ; double HSMHV_tpoly ; double HSMHV_js0 ; double HSMHV_js0sw ; double HSMHV_nj ; double HSMHV_njsw ; double HSMHV_xti ; double HSMHV_cj ; double HSMHV_cjsw ; double HSMHV_cjswg ; double HSMHV_mj ; double HSMHV_mjsw ; double HSMHV_mjswg ; double HSMHV_xti2 ; double HSMHV_cisb ; double HSMHV_cvb ; double HSMHV_ctemp ; double HSMHV_cisbk ; double HSMHV_cvbk ; double HSMHV_divx ; double HSMHV_pb ; double HSMHV_pbsw ; double HSMHV_pbswg ; double HSMHV_clm1 ; double HSMHV_clm2 ; double HSMHV_clm3 ; double HSMHV_clm5 ; double HSMHV_clm6 ; double HSMHV_muetmp ; double HSMHV_vover ; double HSMHV_voverp ; double HSMHV_vovers ; double HSMHV_voversp ; double HSMHV_wfc ; double HSMHV_nsubcw ; double HSMHV_nsubcwp ; double HSMHV_qme1 ; double HSMHV_qme2 ; double HSMHV_qme3 ; double HSMHV_gidl1 ; double HSMHV_gidl2 ; double HSMHV_gidl3 ; double HSMHV_gidl4 ; double HSMHV_gidl5 ; double HSMHV_gleak1 ; double HSMHV_gleak2 ; double HSMHV_gleak3 ; double HSMHV_gleak4 ; double HSMHV_gleak5 ; double HSMHV_gleak6 ; double HSMHV_gleak7 ; double HSMHV_glpart1 ; double HSMHV_glksd1 ; double HSMHV_glksd2 ; double HSMHV_glksd3 ; double HSMHV_glkb1 ; double HSMHV_glkb2 ; double HSMHV_glkb3 ; double HSMHV_egig; double HSMHV_igtemp2; double HSMHV_igtemp3; double HSMHV_vzadd0 ; double HSMHV_pzadd0 ; double HSMHV_nftrp ; double HSMHV_nfalp ; double HSMHV_cit ; double HSMHV_falph ; double HSMHV_kappa ; double HSMHV_pthrou ; double HSMHV_vdiffj ; double HSMHV_dly1 ; double HSMHV_dly2 ; double HSMHV_dly3 ; double HSMHV_dlyov; double HSMHV_tnom ; double HSMHV_ovslp ; double HSMHV_ovmag ; /* substrate resistances */ double HSMHV_gbmin; double HSMHV_rbpb ; double HSMHV_rbpd ; double HSMHV_rbps ; double HSMHV_rbdb ; double HSMHV_rbsb ; /* IBPC */ double HSMHV_ibpc1 ; double HSMHV_ibpc2 ; /* DFM */ double HSMHV_mphdfm ; double HSMHV_vbsmin ; double HSMHV_rdvg11 ; double HSMHV_rdvg12 ; double HSMHV_rd20 ; double HSMHV_qovsm ; double HSMHV_ldrift ; double HSMHV_rd21 ; double HSMHV_rd22 ; double HSMHV_rd22d ; double HSMHV_rd23 ; double HSMHV_rd24 ; double HSMHV_rd25 ; double HSMHV_rd26 ; double HSMHV_rdvdl ; double HSMHV_rdvdlp ; double HSMHV_rdvds ; double HSMHV_rdvdsp ; double HSMHV_rd23l ; double HSMHV_rd23lp ; double HSMHV_rd23s ; double HSMHV_rd23sp ; double HSMHV_rds ; double HSMHV_rdsp ; double HSMHV_rdvd ; double HSMHV_rdvb ; double HSMHV_rdvsub ; /* substrate effect */ double HSMHV_rdvdsub ; /* substrate effect */ double HSMHV_ddrift ; /* substrate effect */ double HSMHV_vbisub ; /* substrate effect */ double HSMHV_nsubsub ; /* substrate effect */ double HSMHV_rth0 ; double HSMHV_cth0 ; double HSMHV_powrat ; double HSMHV_tcjbd ; double HSMHV_tcjbs ; double HSMHV_tcjbdsw ; double HSMHV_tcjbssw ; double HSMHV_tcjbdswg ; double HSMHV_tcjbsswg ; double HSMHV_rdtemp1 ; double HSMHV_rdtemp2 ; double HSMHV_rth0r ; /* heat radiation for SHE */ double HSMHV_rdvdtemp1 ; double HSMHV_rdvdtemp2 ; double HSMHV_rth0w ; double HSMHV_rth0wp ; double HSMHV_rth0nf ; double HSMHV_rthtemp1 ; double HSMHV_rthtemp2 ; double HSMHV_prattemp1 ; double HSMHV_prattemp2 ; double HSMHV_cvdsover ; double HSMHV_shemax; /* binning parameters */ double HSMHV_lmin ; double HSMHV_lmax ; double HSMHV_wmin ; double HSMHV_wmax ; double HSMHV_lbinn ; double HSMHV_wbinn ; /* Length dependence */ double HSMHV_lvmax ; double HSMHV_lbgtmp1 ; double HSMHV_lbgtmp2 ; double HSMHV_leg0 ; double HSMHV_lvfbover ; double HSMHV_lnover ; double HSMHV_lnovers ; double HSMHV_lwl2 ; double HSMHV_lvfbc ; double HSMHV_lnsubc ; double HSMHV_lnsubp ; double HSMHV_lscp1 ; double HSMHV_lscp2 ; double HSMHV_lscp3 ; double HSMHV_lsc1 ; double HSMHV_lsc2 ; double HSMHV_lsc3 ; double HSMHV_lpgd1 ; double HSMHV_lpgd3 ; double HSMHV_lndep ; double HSMHV_lninv ; double HSMHV_lmuecb0 ; double HSMHV_lmuecb1 ; double HSMHV_lmueph1 ; double HSMHV_lvtmp ; double HSMHV_lwvth0 ; double HSMHV_lmuesr1 ; double HSMHV_lmuetmp ; double HSMHV_lsub1 ; double HSMHV_lsub2 ; double HSMHV_lsvds ; double HSMHV_lsvbs ; double HSMHV_lsvgs ; double HSMHV_lfn1 ; double HSMHV_lfn2 ; double HSMHV_lfn3 ; double HSMHV_lfvbs ; double HSMHV_lnsti ; double HSMHV_lwsti ; double HSMHV_lscsti1 ; double HSMHV_lscsti2 ; double HSMHV_lvthsti ; double HSMHV_lmuesti1 ; double HSMHV_lmuesti2 ; double HSMHV_lmuesti3 ; double HSMHV_lnsubpsti1 ; double HSMHV_lnsubpsti2 ; double HSMHV_lnsubpsti3 ; double HSMHV_lcgso ; double HSMHV_lcgdo ; double HSMHV_ljs0 ; double HSMHV_ljs0sw ; double HSMHV_lnj ; double HSMHV_lcisbk ; double HSMHV_lclm1 ; double HSMHV_lclm2 ; double HSMHV_lclm3 ; double HSMHV_lwfc ; double HSMHV_lgidl1 ; double HSMHV_lgidl2 ; double HSMHV_lgleak1 ; double HSMHV_lgleak2 ; double HSMHV_lgleak3 ; double HSMHV_lgleak6 ; double HSMHV_lglksd1 ; double HSMHV_lglksd2 ; double HSMHV_lglkb1 ; double HSMHV_lglkb2 ; double HSMHV_lnftrp ; double HSMHV_lnfalp ; double HSMHV_lpthrou ; double HSMHV_lvdiffj ; double HSMHV_libpc1 ; double HSMHV_libpc2 ; double HSMHV_lcgbo ; double HSMHV_lcvdsover ; double HSMHV_lfalph ; double HSMHV_lnpext ; double HSMHV_lpowrat ; double HSMHV_lrd ; double HSMHV_lrd22 ; double HSMHV_lrd23 ; double HSMHV_lrd24 ; double HSMHV_lrdict1 ; double HSMHV_lrdov13 ; double HSMHV_lrdslp1 ; double HSMHV_lrdvb ; double HSMHV_lrdvd ; double HSMHV_lrdvg11 ; double HSMHV_lrs ; double HSMHV_lrth0 ; double HSMHV_lvover ; /* Width dependence */ double HSMHV_wvmax ; double HSMHV_wbgtmp1 ; double HSMHV_wbgtmp2 ; double HSMHV_weg0 ; double HSMHV_wvfbover ; double HSMHV_wnover ; double HSMHV_wnovers ; double HSMHV_wwl2 ; double HSMHV_wvfbc ; double HSMHV_wnsubc ; double HSMHV_wnsubp ; double HSMHV_wscp1 ; double HSMHV_wscp2 ; double HSMHV_wscp3 ; double HSMHV_wsc1 ; double HSMHV_wsc2 ; double HSMHV_wsc3 ; double HSMHV_wpgd1 ; double HSMHV_wpgd3 ; double HSMHV_wndep ; double HSMHV_wninv ; double HSMHV_wmuecb0 ; double HSMHV_wmuecb1 ; double HSMHV_wmueph1 ; double HSMHV_wvtmp ; double HSMHV_wwvth0 ; double HSMHV_wmuesr1 ; double HSMHV_wmuetmp ; double HSMHV_wsub1 ; double HSMHV_wsub2 ; double HSMHV_wsvds ; double HSMHV_wsvbs ; double HSMHV_wsvgs ; double HSMHV_wfn1 ; double HSMHV_wfn2 ; double HSMHV_wfn3 ; double HSMHV_wfvbs ; double HSMHV_wnsti ; double HSMHV_wwsti ; double HSMHV_wscsti1 ; double HSMHV_wscsti2 ; double HSMHV_wvthsti ; double HSMHV_wmuesti1 ; double HSMHV_wmuesti2 ; double HSMHV_wmuesti3 ; double HSMHV_wnsubpsti1 ; double HSMHV_wnsubpsti2 ; double HSMHV_wnsubpsti3 ; double HSMHV_wcgso ; double HSMHV_wcgdo ; double HSMHV_wjs0 ; double HSMHV_wjs0sw ; double HSMHV_wnj ; double HSMHV_wcisbk ; double HSMHV_wclm1 ; double HSMHV_wclm2 ; double HSMHV_wclm3 ; double HSMHV_wwfc ; double HSMHV_wgidl1 ; double HSMHV_wgidl2 ; double HSMHV_wgleak1 ; double HSMHV_wgleak2 ; double HSMHV_wgleak3 ; double HSMHV_wgleak6 ; double HSMHV_wglksd1 ; double HSMHV_wglksd2 ; double HSMHV_wglkb1 ; double HSMHV_wglkb2 ; double HSMHV_wnftrp ; double HSMHV_wnfalp ; double HSMHV_wpthrou ; double HSMHV_wvdiffj ; double HSMHV_wibpc1 ; double HSMHV_wibpc2 ; double HSMHV_wcgbo ; double HSMHV_wcvdsover ; double HSMHV_wfalph ; double HSMHV_wnpext ; double HSMHV_wpowrat ; double HSMHV_wrd ; double HSMHV_wrd22 ; double HSMHV_wrd23 ; double HSMHV_wrd24 ; double HSMHV_wrdict1 ; double HSMHV_wrdov13 ; double HSMHV_wrdslp1 ; double HSMHV_wrdvb ; double HSMHV_wrdvd ; double HSMHV_wrdvg11 ; double HSMHV_wrs ; double HSMHV_wrth0 ; double HSMHV_wvover ; /* Cross-term dependence */ double HSMHV_pvmax ; double HSMHV_pbgtmp1 ; double HSMHV_pbgtmp2 ; double HSMHV_peg0 ; double HSMHV_pvfbover ; double HSMHV_pnover ; double HSMHV_pnovers ; double HSMHV_pwl2 ; double HSMHV_pvfbc ; double HSMHV_pnsubc ; double HSMHV_pnsubp ; double HSMHV_pscp1 ; double HSMHV_pscp2 ; double HSMHV_pscp3 ; double HSMHV_psc1 ; double HSMHV_psc2 ; double HSMHV_psc3 ; double HSMHV_ppgd1 ; double HSMHV_ppgd3 ; double HSMHV_pndep ; double HSMHV_pninv ; double HSMHV_pmuecb0 ; double HSMHV_pmuecb1 ; double HSMHV_pmueph1 ; double HSMHV_pvtmp ; double HSMHV_pwvth0 ; double HSMHV_pmuesr1 ; double HSMHV_pmuetmp ; double HSMHV_psub1 ; double HSMHV_psub2 ; double HSMHV_psvds ; double HSMHV_psvbs ; double HSMHV_psvgs ; double HSMHV_pfn1 ; double HSMHV_pfn2 ; double HSMHV_pfn3 ; double HSMHV_pfvbs ; double HSMHV_pnsti ; double HSMHV_pwsti ; double HSMHV_pscsti1 ; double HSMHV_pscsti2 ; double HSMHV_pvthsti ; double HSMHV_pmuesti1 ; double HSMHV_pmuesti2 ; double HSMHV_pmuesti3 ; double HSMHV_pnsubpsti1 ; double HSMHV_pnsubpsti2 ; double HSMHV_pnsubpsti3 ; double HSMHV_pcgso ; double HSMHV_pcgdo ; double HSMHV_pjs0 ; double HSMHV_pjs0sw ; double HSMHV_pnj ; double HSMHV_pcisbk ; double HSMHV_pclm1 ; double HSMHV_pclm2 ; double HSMHV_pclm3 ; double HSMHV_pwfc ; double HSMHV_pgidl1 ; double HSMHV_pgidl2 ; double HSMHV_pgleak1 ; double HSMHV_pgleak2 ; double HSMHV_pgleak3 ; double HSMHV_pgleak6 ; double HSMHV_pglksd1 ; double HSMHV_pglksd2 ; double HSMHV_pglkb1 ; double HSMHV_pglkb2 ; double HSMHV_pnftrp ; double HSMHV_pnfalp ; double HSMHV_ppthrou ; double HSMHV_pvdiffj ; double HSMHV_pibpc1 ; double HSMHV_pibpc2 ; double HSMHV_pcgbo ; double HSMHV_pcvdsover ; double HSMHV_pfalph ; double HSMHV_pnpext ; double HSMHV_ppowrat ; double HSMHV_prd ; double HSMHV_prd22 ; double HSMHV_prd23 ; double HSMHV_prd24 ; double HSMHV_prdict1 ; double HSMHV_prdov13 ; double HSMHV_prdslp1 ; double HSMHV_prdvb ; double HSMHV_prdvd ; double HSMHV_prdvg11 ; double HSMHV_prs ; double HSMHV_prth0 ; double HSMHV_pvover ; /* internal variables */ double HSMHV_vcrit ; int HSMHV_flg_qme ; double HSMHV_qme12 ; double HSMHV_ktnom ; double HSMHVvgsMax; double HSMHVvgdMax; double HSMHVvgbMax; double HSMHVvdsMax; double HSMHVvbsMax; double HSMHVvbdMax; double HSMHVvgsrMax; double HSMHVvgdrMax; double HSMHVvgbrMax; double HSMHVvbsrMax; double HSMHVvbdrMax; HSMHVmodelMKSParam modelMKS ; /* unit-converted parameters */ /* flag for model */ unsigned HSMHV_type_Given :1; unsigned HSMHV_level_Given :1; unsigned HSMHV_info_Given :1; unsigned HSMHV_noise_Given :1; unsigned HSMHV_version_Given :1; unsigned HSMHV_show_Given :1; unsigned HSMHV_corsrd_Given :1; unsigned HSMHV_corg_Given :1; unsigned HSMHV_coiprv_Given :1; unsigned HSMHV_copprv_Given :1; unsigned HSMHV_coadov_Given :1; unsigned HSMHV_coisub_Given :1; unsigned HSMHV_coiigs_Given :1; unsigned HSMHV_cogidl_Given :1; unsigned HSMHV_coovlp_Given :1; unsigned HSMHV_coovlps_Given :1; unsigned HSMHV_coflick_Given :1; unsigned HSMHV_coisti_Given :1; unsigned HSMHV_conqs_Given :1; unsigned HSMHV_corbnet_Given :1; unsigned HSMHV_cothrml_Given :1; unsigned HSMHV_coign_Given :1; /* Induced gate noise */ unsigned HSMHV_codfm_Given :1; /* DFM */ unsigned HSMHV_coqovsm_Given :1; unsigned HSMHV_coselfheat_Given :1; /* Self-heating model */ unsigned HSMHV_cosubnode_Given :1; /* switch tempNode to subNode */ unsigned HSMHV_cosym_Given :1; /* Symmetry model for HV */ unsigned HSMHV_cotemp_Given :1; unsigned HSMHV_coldrift_Given :1; unsigned HSMHV_kappa_Given :1; unsigned HSMHV_pthrou_Given :1; unsigned HSMHV_vdiffj_Given :1; unsigned HSMHV_vmax_Given :1; unsigned HSMHV_vmaxt1_Given :1; unsigned HSMHV_vmaxt2_Given :1; unsigned HSMHV_bgtmp1_Given :1; unsigned HSMHV_bgtmp2_Given :1; unsigned HSMHV_eg0_Given :1; unsigned HSMHV_tox_Given :1; unsigned HSMHV_xld_Given :1; unsigned HSMHV_xldld_Given :1; unsigned HSMHV_xwdld_Given :1; unsigned HSMHV_lover_Given :1; unsigned HSMHV_lovers_Given :1; unsigned HSMHV_rdov11_Given :1; unsigned HSMHV_rdov12_Given :1; unsigned HSMHV_rdov13_Given :1; unsigned HSMHV_rdslp1_Given :1; unsigned HSMHV_rdict1_Given :1; unsigned HSMHV_rdslp2_Given :1; unsigned HSMHV_rdict2_Given :1; unsigned HSMHV_loverld_Given :1; unsigned HSMHV_ldrift1_Given :1; unsigned HSMHV_ldrift2_Given :1; unsigned HSMHV_ldrift1s_Given :1; unsigned HSMHV_ldrift2s_Given :1; unsigned HSMHV_subld1_Given :1; unsigned HSMHV_subld2_Given :1; unsigned HSMHV_ddltmax_Given :1; unsigned HSMHV_ddltslp_Given :1; unsigned HSMHV_ddltict_Given :1; unsigned HSMHV_vfbover_Given :1; unsigned HSMHV_nover_Given :1; unsigned HSMHV_novers_Given :1; unsigned HSMHV_xwd_Given :1; unsigned HSMHV_xwdc_Given :1; unsigned HSMHV_xl_Given :1; unsigned HSMHV_xw_Given :1; unsigned HSMHV_saref_Given :1; unsigned HSMHV_sbref_Given :1; unsigned HSMHV_ll_Given :1; unsigned HSMHV_lld_Given :1; unsigned HSMHV_lln_Given :1; unsigned HSMHV_wl_Given :1; unsigned HSMHV_wl1_Given :1; unsigned HSMHV_wl1p_Given :1; unsigned HSMHV_wl2_Given :1; unsigned HSMHV_wl2p_Given :1; unsigned HSMHV_wld_Given :1; unsigned HSMHV_wln_Given :1; unsigned HSMHV_xqy_Given :1; unsigned HSMHV_xqy1_Given :1; unsigned HSMHV_xqy2_Given :1; unsigned HSMHV_rs_Given :1; unsigned HSMHV_rd_Given :1; unsigned HSMHV_rsh_Given :1; unsigned HSMHV_rshg_Given :1; /* unsigned HSMHV_ngcon_Given :1; */ /* unsigned HSMHV_xgw_Given :1; */ /* unsigned HSMHV_xgl_Given :1; */ /* unsigned HSMHV_nf_Given :1; */ unsigned HSMHV_vfbc_Given :1; unsigned HSMHV_vbi_Given :1; unsigned HSMHV_nsubc_Given :1; unsigned HSMHV_parl2_Given :1; unsigned HSMHV_lp_Given :1; unsigned HSMHV_nsubp_Given :1; unsigned HSMHV_nsubp0_Given :1; unsigned HSMHV_nsubwp_Given :1; unsigned HSMHV_scp1_Given :1; unsigned HSMHV_scp2_Given :1; unsigned HSMHV_scp3_Given :1; unsigned HSMHV_sc1_Given :1; unsigned HSMHV_sc2_Given :1; unsigned HSMHV_sc3_Given :1; unsigned HSMHV_sc4_Given :1; unsigned HSMHV_pgd1_Given :1; unsigned HSMHV_pgd2_Given :1; unsigned HSMHV_pgd3_Given :1; unsigned HSMHV_pgd4_Given :1; unsigned HSMHV_ndep_Given :1; unsigned HSMHV_ndepl_Given :1; unsigned HSMHV_ndeplp_Given :1; unsigned HSMHV_ninv_Given :1; unsigned HSMHV_muecb0_Given :1; unsigned HSMHV_muecb1_Given :1; unsigned HSMHV_mueph1_Given :1; unsigned HSMHV_mueph0_Given :1; unsigned HSMHV_muephw_Given :1; unsigned HSMHV_muepwp_Given :1; unsigned HSMHV_muephl_Given :1; unsigned HSMHV_mueplp_Given :1; unsigned HSMHV_muephs_Given :1; unsigned HSMHV_muepsp_Given :1; unsigned HSMHV_vtmp_Given :1; unsigned HSMHV_wvth0_Given :1; unsigned HSMHV_muesr1_Given :1; unsigned HSMHV_muesr0_Given :1; unsigned HSMHV_muesrl_Given :1; unsigned HSMHV_mueslp_Given :1; unsigned HSMHV_muesrw_Given :1; unsigned HSMHV_mueswp_Given :1; unsigned HSMHV_bb_Given :1; unsigned HSMHV_sub1_Given :1; unsigned HSMHV_sub2_Given :1; unsigned HSMHV_svgs_Given :1; unsigned HSMHV_svbs_Given :1; unsigned HSMHV_svbsl_Given :1; unsigned HSMHV_svds_Given :1; unsigned HSMHV_slg_Given :1; unsigned HSMHV_sub1l_Given :1; unsigned HSMHV_sub2l_Given :1; unsigned HSMHV_fn1_Given :1; unsigned HSMHV_fn2_Given :1; unsigned HSMHV_fn3_Given :1; unsigned HSMHV_fvbs_Given :1; unsigned HSMHV_svgsl_Given :1; unsigned HSMHV_svgslp_Given :1; unsigned HSMHV_svgswp_Given :1; unsigned HSMHV_svgsw_Given :1; unsigned HSMHV_svbslp_Given :1; unsigned HSMHV_slgl_Given :1; unsigned HSMHV_slglp_Given :1; unsigned HSMHV_sub1lp_Given :1; unsigned HSMHV_nsti_Given :1; unsigned HSMHV_wsti_Given :1; unsigned HSMHV_wstil_Given :1; unsigned HSMHV_wstilp_Given :1; unsigned HSMHV_wstiw_Given :1; unsigned HSMHV_wstiwp_Given :1; unsigned HSMHV_scsti1_Given :1; unsigned HSMHV_scsti2_Given :1; unsigned HSMHV_vthsti_Given :1; unsigned HSMHV_vdsti_Given :1; unsigned HSMHV_muesti1_Given :1; unsigned HSMHV_muesti2_Given :1; unsigned HSMHV_muesti3_Given :1; unsigned HSMHV_nsubpsti1_Given :1; unsigned HSMHV_nsubpsti2_Given :1; unsigned HSMHV_nsubpsti3_Given :1; unsigned HSMHV_lpext_Given :1; unsigned HSMHV_npext_Given :1; unsigned HSMHV_scp22_Given :1; unsigned HSMHV_scp21_Given :1; unsigned HSMHV_bs1_Given :1; unsigned HSMHV_bs2_Given :1; unsigned HSMHV_cgso_Given :1; unsigned HSMHV_cgdo_Given :1; unsigned HSMHV_cgbo_Given :1; unsigned HSMHV_tpoly_Given :1; unsigned HSMHV_js0_Given :1; unsigned HSMHV_js0sw_Given :1; unsigned HSMHV_nj_Given :1; unsigned HSMHV_njsw_Given :1; unsigned HSMHV_xti_Given :1; unsigned HSMHV_cj_Given :1; unsigned HSMHV_cjsw_Given :1; unsigned HSMHV_cjswg_Given :1; unsigned HSMHV_mj_Given :1; unsigned HSMHV_mjsw_Given :1; unsigned HSMHV_mjswg_Given :1; unsigned HSMHV_xti2_Given :1; unsigned HSMHV_cisb_Given :1; unsigned HSMHV_cvb_Given :1; unsigned HSMHV_ctemp_Given :1; unsigned HSMHV_cisbk_Given :1; unsigned HSMHV_cvbk_Given :1; unsigned HSMHV_divx_Given :1; unsigned HSMHV_pb_Given :1; unsigned HSMHV_pbsw_Given :1; unsigned HSMHV_pbswg_Given :1; unsigned HSMHV_clm1_Given :1; unsigned HSMHV_clm2_Given :1; unsigned HSMHV_clm3_Given :1; unsigned HSMHV_clm5_Given :1; unsigned HSMHV_clm6_Given :1; unsigned HSMHV_muetmp_Given :1; unsigned HSMHV_vover_Given :1; unsigned HSMHV_voverp_Given :1; unsigned HSMHV_vovers_Given :1; unsigned HSMHV_voversp_Given :1; unsigned HSMHV_wfc_Given :1; unsigned HSMHV_nsubcw_Given :1; unsigned HSMHV_nsubcwp_Given :1; unsigned HSMHV_qme1_Given :1; unsigned HSMHV_qme2_Given :1; unsigned HSMHV_qme3_Given :1; unsigned HSMHV_gidl1_Given :1; unsigned HSMHV_gidl2_Given :1; unsigned HSMHV_gidl3_Given :1; unsigned HSMHV_gidl4_Given :1; unsigned HSMHV_gidl5_Given :1; unsigned HSMHV_gleak1_Given :1; unsigned HSMHV_gleak2_Given :1; unsigned HSMHV_gleak3_Given :1; unsigned HSMHV_gleak4_Given :1; unsigned HSMHV_gleak5_Given :1; unsigned HSMHV_gleak6_Given :1; unsigned HSMHV_gleak7_Given :1; unsigned HSMHV_glpart1_Given :1; unsigned HSMHV_glksd1_Given :1; unsigned HSMHV_glksd2_Given :1; unsigned HSMHV_glksd3_Given :1; unsigned HSMHV_glkb1_Given :1; unsigned HSMHV_glkb2_Given :1; unsigned HSMHV_glkb3_Given :1; unsigned HSMHV_egig_Given :1; unsigned HSMHV_igtemp2_Given :1; unsigned HSMHV_igtemp3_Given :1; unsigned HSMHV_vzadd0_Given :1; unsigned HSMHV_pzadd0_Given :1; unsigned HSMHV_nftrp_Given :1; unsigned HSMHV_nfalp_Given :1; unsigned HSMHV_cit_Given :1; unsigned HSMHV_falph_Given :1; unsigned HSMHV_dly1_Given :1; unsigned HSMHV_dly2_Given :1; unsigned HSMHV_dly3_Given :1; unsigned HSMHV_dlyov_Given :1; unsigned HSMHV_tnom_Given :1; unsigned HSMHV_ovslp_Given :1; unsigned HSMHV_ovmag_Given :1; unsigned HSMHV_gbmin_Given :1; unsigned HSMHV_rbpb_Given :1; unsigned HSMHV_rbpd_Given :1; unsigned HSMHV_rbps_Given :1; unsigned HSMHV_rbdb_Given :1; unsigned HSMHV_rbsb_Given :1; unsigned HSMHV_ibpc1_Given :1; unsigned HSMHV_ibpc2_Given :1; unsigned HSMHV_mphdfm_Given :1; unsigned HSMHV_rdvg11_Given :1; unsigned HSMHV_rdvg12_Given :1; unsigned HSMHV_qovsm_Given :1; unsigned HSMHV_ldrift_Given :1; unsigned HSMHV_rd20_Given :1; unsigned HSMHV_rd21_Given :1; unsigned HSMHV_rd22_Given :1; unsigned HSMHV_rd22d_Given :1; unsigned HSMHV_rd23_Given :1; unsigned HSMHV_rd24_Given :1; unsigned HSMHV_rd25_Given :1; unsigned HSMHV_rd26_Given :1; unsigned HSMHV_rdvdl_Given :1; unsigned HSMHV_rdvdlp_Given :1; unsigned HSMHV_rdvds_Given :1; unsigned HSMHV_rdvdsp_Given :1; unsigned HSMHV_rd23l_Given :1; unsigned HSMHV_rd23lp_Given :1; unsigned HSMHV_rd23s_Given :1; unsigned HSMHV_rd23sp_Given :1; unsigned HSMHV_rds_Given :1; unsigned HSMHV_rdsp_Given :1; unsigned HSMHV_vbsmin_Given :1; unsigned HSMHV_ninvd_Given :1; unsigned HSMHV_ninvdw_Given :1; unsigned HSMHV_ninvdwp_Given :1; unsigned HSMHV_ninvdt1_Given :1; unsigned HSMHV_ninvdt2_Given :1; unsigned HSMHV_rdvb_Given :1; unsigned HSMHV_rth0nf_Given :1; unsigned HSMHV_rthtemp1_Given :1; unsigned HSMHV_rthtemp2_Given :1; unsigned HSMHV_prattemp1_Given :1; unsigned HSMHV_prattemp2_Given :1; unsigned HSMHV_rth0_Given :1; unsigned HSMHV_cth0_Given :1; unsigned HSMHV_powrat_Given :1; unsigned HSMHV_tcjbd_Given :1; unsigned HSMHV_tcjbs_Given :1; unsigned HSMHV_tcjbdsw_Given :1; unsigned HSMHV_tcjbssw_Given :1; unsigned HSMHV_tcjbdswg_Given :1; unsigned HSMHV_tcjbsswg_Given :1; /* unsigned HSMHV_wth0_Given :1; */ unsigned HSMHV_qdftvd_Given :1; unsigned HSMHV_rdvd_Given :1; unsigned HSMHV_rdtemp1_Given :1; unsigned HSMHV_rdtemp2_Given :1; unsigned HSMHV_rth0r_Given :1; unsigned HSMHV_rdvdtemp1_Given :1; unsigned HSMHV_rdvdtemp2_Given :1; unsigned HSMHV_rth0w_Given :1; unsigned HSMHV_rth0wp_Given :1; unsigned HSMHV_cvdsover_Given :1; /* substrate effect */ unsigned HSMHV_rdvsub_Given :1; /* substrate effect */ unsigned HSMHV_rdvdsub_Given :1; /* substrate effect */ unsigned HSMHV_ddrift_Given :1; /* substrate effect */ unsigned HSMHV_vbisub_Given :1; /* substrate effect */ unsigned HSMHV_nsubsub_Given :1; /* substrate effect */ unsigned HSMHV_shemax_Given :1; /* binning parameters */ unsigned HSMHV_lmin_Given :1; unsigned HSMHV_lmax_Given :1; unsigned HSMHV_wmin_Given :1; unsigned HSMHV_wmax_Given :1; unsigned HSMHV_lbinn_Given :1; unsigned HSMHV_wbinn_Given :1; /* Length dependence */ unsigned HSMHV_lvmax_Given :1; unsigned HSMHV_lbgtmp1_Given :1; unsigned HSMHV_lbgtmp2_Given :1; unsigned HSMHV_leg0_Given :1; unsigned HSMHV_lvfbover_Given :1; unsigned HSMHV_lnover_Given :1; unsigned HSMHV_lnovers_Given :1; unsigned HSMHV_lwl2_Given :1; unsigned HSMHV_lvfbc_Given :1; unsigned HSMHV_lnsubc_Given :1; unsigned HSMHV_lnsubp_Given :1; unsigned HSMHV_lscp1_Given :1; unsigned HSMHV_lscp2_Given :1; unsigned HSMHV_lscp3_Given :1; unsigned HSMHV_lsc1_Given :1; unsigned HSMHV_lsc2_Given :1; unsigned HSMHV_lsc3_Given :1; unsigned HSMHV_lpgd1_Given :1; unsigned HSMHV_lpgd3_Given :1; unsigned HSMHV_lndep_Given :1; unsigned HSMHV_lninv_Given :1; unsigned HSMHV_lmuecb0_Given :1; unsigned HSMHV_lmuecb1_Given :1; unsigned HSMHV_lmueph1_Given :1; unsigned HSMHV_lvtmp_Given :1; unsigned HSMHV_lwvth0_Given :1; unsigned HSMHV_lmuesr1_Given :1; unsigned HSMHV_lmuetmp_Given :1; unsigned HSMHV_lsub1_Given :1; unsigned HSMHV_lsub2_Given :1; unsigned HSMHV_lsvds_Given :1; unsigned HSMHV_lsvbs_Given :1; unsigned HSMHV_lsvgs_Given :1; unsigned HSMHV_lfn1_Given :1; unsigned HSMHV_lfn2_Given :1; unsigned HSMHV_lfn3_Given :1; unsigned HSMHV_lfvbs_Given :1; unsigned HSMHV_lnsti_Given :1; unsigned HSMHV_lwsti_Given :1; unsigned HSMHV_lscsti1_Given :1; unsigned HSMHV_lscsti2_Given :1; unsigned HSMHV_lvthsti_Given :1; unsigned HSMHV_lmuesti1_Given :1; unsigned HSMHV_lmuesti2_Given :1; unsigned HSMHV_lmuesti3_Given :1; unsigned HSMHV_lnsubpsti1_Given :1; unsigned HSMHV_lnsubpsti2_Given :1; unsigned HSMHV_lnsubpsti3_Given :1; unsigned HSMHV_lcgso_Given :1; unsigned HSMHV_lcgdo_Given :1; unsigned HSMHV_ljs0_Given :1; unsigned HSMHV_ljs0sw_Given :1; unsigned HSMHV_lnj_Given :1; unsigned HSMHV_lcisbk_Given :1; unsigned HSMHV_lclm1_Given :1; unsigned HSMHV_lclm2_Given :1; unsigned HSMHV_lclm3_Given :1; unsigned HSMHV_lwfc_Given :1; unsigned HSMHV_lgidl1_Given :1; unsigned HSMHV_lgidl2_Given :1; unsigned HSMHV_lgleak1_Given :1; unsigned HSMHV_lgleak2_Given :1; unsigned HSMHV_lgleak3_Given :1; unsigned HSMHV_lgleak6_Given :1; unsigned HSMHV_lglksd1_Given :1; unsigned HSMHV_lglksd2_Given :1; unsigned HSMHV_lglkb1_Given :1; unsigned HSMHV_lglkb2_Given :1; unsigned HSMHV_lnftrp_Given :1; unsigned HSMHV_lnfalp_Given :1; unsigned HSMHV_lpthrou_Given :1; unsigned HSMHV_lvdiffj_Given :1; unsigned HSMHV_libpc1_Given :1; unsigned HSMHV_libpc2_Given :1; unsigned HSMHV_lcgbo_Given :1; unsigned HSMHV_lcvdsover_Given :1; unsigned HSMHV_lfalph_Given :1; unsigned HSMHV_lnpext_Given :1; unsigned HSMHV_lpowrat_Given :1; unsigned HSMHV_lrd_Given :1; unsigned HSMHV_lrd22_Given :1; unsigned HSMHV_lrd23_Given :1; unsigned HSMHV_lrd24_Given :1; unsigned HSMHV_lrdict1_Given :1; unsigned HSMHV_lrdov13_Given :1; unsigned HSMHV_lrdslp1_Given :1; unsigned HSMHV_lrdvb_Given :1; unsigned HSMHV_lrdvd_Given :1; unsigned HSMHV_lrdvg11_Given :1; unsigned HSMHV_lrs_Given :1; unsigned HSMHV_lrth0_Given :1; unsigned HSMHV_lvover_Given :1; /* Width dependence */ unsigned HSMHV_wvmax_Given :1; unsigned HSMHV_wbgtmp1_Given :1; unsigned HSMHV_wbgtmp2_Given :1; unsigned HSMHV_weg0_Given :1; unsigned HSMHV_wvfbover_Given :1; unsigned HSMHV_wnover_Given :1; unsigned HSMHV_wnovers_Given :1; unsigned HSMHV_wwl2_Given :1; unsigned HSMHV_wvfbc_Given :1; unsigned HSMHV_wnsubc_Given :1; unsigned HSMHV_wnsubp_Given :1; unsigned HSMHV_wscp1_Given :1; unsigned HSMHV_wscp2_Given :1; unsigned HSMHV_wscp3_Given :1; unsigned HSMHV_wsc1_Given :1; unsigned HSMHV_wsc2_Given :1; unsigned HSMHV_wsc3_Given :1; unsigned HSMHV_wpgd1_Given :1; unsigned HSMHV_wpgd3_Given :1; unsigned HSMHV_wndep_Given :1; unsigned HSMHV_wninv_Given :1; unsigned HSMHV_wmuecb0_Given :1; unsigned HSMHV_wmuecb1_Given :1; unsigned HSMHV_wmueph1_Given :1; unsigned HSMHV_wvtmp_Given :1; unsigned HSMHV_wwvth0_Given :1; unsigned HSMHV_wmuesr1_Given :1; unsigned HSMHV_wmuetmp_Given :1; unsigned HSMHV_wsub1_Given :1; unsigned HSMHV_wsub2_Given :1; unsigned HSMHV_wsvds_Given :1; unsigned HSMHV_wsvbs_Given :1; unsigned HSMHV_wsvgs_Given :1; unsigned HSMHV_wfn1_Given :1; unsigned HSMHV_wfn2_Given :1; unsigned HSMHV_wfn3_Given :1; unsigned HSMHV_wfvbs_Given :1; unsigned HSMHV_wnsti_Given :1; unsigned HSMHV_wwsti_Given :1; unsigned HSMHV_wscsti1_Given :1; unsigned HSMHV_wscsti2_Given :1; unsigned HSMHV_wvthsti_Given :1; unsigned HSMHV_wmuesti1_Given :1; unsigned HSMHV_wmuesti2_Given :1; unsigned HSMHV_wmuesti3_Given :1; unsigned HSMHV_wnsubpsti1_Given :1; unsigned HSMHV_wnsubpsti2_Given :1; unsigned HSMHV_wnsubpsti3_Given :1; unsigned HSMHV_wcgso_Given :1; unsigned HSMHV_wcgdo_Given :1; unsigned HSMHV_wjs0_Given :1; unsigned HSMHV_wjs0sw_Given :1; unsigned HSMHV_wnj_Given :1; unsigned HSMHV_wcisbk_Given :1; unsigned HSMHV_wclm1_Given :1; unsigned HSMHV_wclm2_Given :1; unsigned HSMHV_wclm3_Given :1; unsigned HSMHV_wwfc_Given :1; unsigned HSMHV_wgidl1_Given :1; unsigned HSMHV_wgidl2_Given :1; unsigned HSMHV_wgleak1_Given :1; unsigned HSMHV_wgleak2_Given :1; unsigned HSMHV_wgleak3_Given :1; unsigned HSMHV_wgleak6_Given :1; unsigned HSMHV_wglksd1_Given :1; unsigned HSMHV_wglksd2_Given :1; unsigned HSMHV_wglkb1_Given :1; unsigned HSMHV_wglkb2_Given :1; unsigned HSMHV_wnftrp_Given :1; unsigned HSMHV_wnfalp_Given :1; unsigned HSMHV_wpthrou_Given :1; unsigned HSMHV_wvdiffj_Given :1; unsigned HSMHV_wibpc1_Given :1; unsigned HSMHV_wibpc2_Given :1; unsigned HSMHV_wcgbo_Given :1; unsigned HSMHV_wcvdsover_Given :1; unsigned HSMHV_wfalph_Given :1; unsigned HSMHV_wnpext_Given :1; unsigned HSMHV_wpowrat_Given :1; unsigned HSMHV_wrd_Given :1; unsigned HSMHV_wrd22_Given :1; unsigned HSMHV_wrd23_Given :1; unsigned HSMHV_wrd24_Given :1; unsigned HSMHV_wrdict1_Given :1; unsigned HSMHV_wrdov13_Given :1; unsigned HSMHV_wrdslp1_Given :1; unsigned HSMHV_wrdvb_Given :1; unsigned HSMHV_wrdvd_Given :1; unsigned HSMHV_wrdvg11_Given :1; unsigned HSMHV_wrs_Given :1; unsigned HSMHV_wrth0_Given :1; unsigned HSMHV_wvover_Given :1; /* Cross-term dependence */ unsigned HSMHV_pvmax_Given :1; unsigned HSMHV_pbgtmp1_Given :1; unsigned HSMHV_pbgtmp2_Given :1; unsigned HSMHV_peg0_Given :1; unsigned HSMHV_pvfbover_Given :1; unsigned HSMHV_pnover_Given :1; unsigned HSMHV_pnovers_Given :1; unsigned HSMHV_pwl2_Given :1; unsigned HSMHV_pvfbc_Given :1; unsigned HSMHV_pnsubc_Given :1; unsigned HSMHV_pnsubp_Given :1; unsigned HSMHV_pscp1_Given :1; unsigned HSMHV_pscp2_Given :1; unsigned HSMHV_pscp3_Given :1; unsigned HSMHV_psc1_Given :1; unsigned HSMHV_psc2_Given :1; unsigned HSMHV_psc3_Given :1; unsigned HSMHV_ppgd1_Given :1; unsigned HSMHV_ppgd3_Given :1; unsigned HSMHV_pndep_Given :1; unsigned HSMHV_pninv_Given :1; unsigned HSMHV_pmuecb0_Given :1; unsigned HSMHV_pmuecb1_Given :1; unsigned HSMHV_pmueph1_Given :1; unsigned HSMHV_pvtmp_Given :1; unsigned HSMHV_pwvth0_Given :1; unsigned HSMHV_pmuesr1_Given :1; unsigned HSMHV_pmuetmp_Given :1; unsigned HSMHV_psub1_Given :1; unsigned HSMHV_psub2_Given :1; unsigned HSMHV_psvds_Given :1; unsigned HSMHV_psvbs_Given :1; unsigned HSMHV_psvgs_Given :1; unsigned HSMHV_pfn1_Given :1; unsigned HSMHV_pfn2_Given :1; unsigned HSMHV_pfn3_Given :1; unsigned HSMHV_pfvbs_Given :1; unsigned HSMHV_pnsti_Given :1; unsigned HSMHV_pwsti_Given :1; unsigned HSMHV_pscsti1_Given :1; unsigned HSMHV_pscsti2_Given :1; unsigned HSMHV_pvthsti_Given :1; unsigned HSMHV_pmuesti1_Given :1; unsigned HSMHV_pmuesti2_Given :1; unsigned HSMHV_pmuesti3_Given :1; unsigned HSMHV_pnsubpsti1_Given :1; unsigned HSMHV_pnsubpsti2_Given :1; unsigned HSMHV_pnsubpsti3_Given :1; unsigned HSMHV_pcgso_Given :1; unsigned HSMHV_pcgdo_Given :1; unsigned HSMHV_pjs0_Given :1; unsigned HSMHV_pjs0sw_Given :1; unsigned HSMHV_pnj_Given :1; unsigned HSMHV_pcisbk_Given :1; unsigned HSMHV_pclm1_Given :1; unsigned HSMHV_pclm2_Given :1; unsigned HSMHV_pclm3_Given :1; unsigned HSMHV_pwfc_Given :1; unsigned HSMHV_pgidl1_Given :1; unsigned HSMHV_pgidl2_Given :1; unsigned HSMHV_pgleak1_Given :1; unsigned HSMHV_pgleak2_Given :1; unsigned HSMHV_pgleak3_Given :1; unsigned HSMHV_pgleak6_Given :1; unsigned HSMHV_pglksd1_Given :1; unsigned HSMHV_pglksd2_Given :1; unsigned HSMHV_pglkb1_Given :1; unsigned HSMHV_pglkb2_Given :1; unsigned HSMHV_pnftrp_Given :1; unsigned HSMHV_pnfalp_Given :1; unsigned HSMHV_ppthrou_Given :1; unsigned HSMHV_pvdiffj_Given :1; unsigned HSMHV_pibpc1_Given :1; unsigned HSMHV_pibpc2_Given :1; unsigned HSMHV_pcgbo_Given :1; unsigned HSMHV_pcvdsover_Given :1; unsigned HSMHV_pfalph_Given :1; unsigned HSMHV_pnpext_Given :1; unsigned HSMHV_ppowrat_Given :1; unsigned HSMHV_prd_Given :1; unsigned HSMHV_prd22_Given :1; unsigned HSMHV_prd23_Given :1; unsigned HSMHV_prd24_Given :1; unsigned HSMHV_prdict1_Given :1; unsigned HSMHV_prdov13_Given :1; unsigned HSMHV_prdslp1_Given :1; unsigned HSMHV_prdvb_Given :1; unsigned HSMHV_prdvd_Given :1; unsigned HSMHV_prdvg11_Given :1; unsigned HSMHV_prs_Given :1; unsigned HSMHV_prth0_Given :1; unsigned HSMHV_pvover_Given :1; unsigned HSMHVvgsMaxGiven :1; unsigned HSMHVvgdMaxGiven :1; unsigned HSMHVvgbMaxGiven :1; unsigned HSMHVvdsMaxGiven :1; unsigned HSMHVvbsMaxGiven :1; unsigned HSMHVvbdMaxGiven :1; unsigned HSMHVvgsrMaxGiven :1; unsigned HSMHVvgdrMaxGiven :1; unsigned HSMHVvgbrMaxGiven :1; unsigned HSMHVvbsrMaxGiven :1; unsigned HSMHVvbdrMaxGiven :1; } HSMHVmodel; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ #define HSMHV_BAD_PARAM -1 /* flags */ #define HSMHV_MOD_NMOS 1 #define HSMHV_MOD_PMOS 2 #define HSMHV_MOD_LEVEL 3 #define HSMHV_MOD_INFO 4 #define HSMHV_MOD_NOISE 5 #define HSMHV_MOD_VERSION 6 #define HSMHV_MOD_SHOW 7 #define HSMHV_MOD_CORSRD 11 #define HSMHV_MOD_COIPRV 12 #define HSMHV_MOD_COPPRV 13 #define HSMHV_MOD_COADOV 17 #define HSMHV_MOD_COISUB 21 #define HSMHV_MOD_COIIGS 22 #define HSMHV_MOD_COGIDL 23 #define HSMHV_MOD_COOVLP 24 #define HSMHV_MOD_COOVLPS 8 #define HSMHV_MOD_COFLICK 25 #define HSMHV_MOD_COISTI 26 #define HSMHV_MOD_CONQS 29 #define HSMHV_MOD_COTHRML 30 #define HSMHV_MOD_COIGN 31 /* Induced gate noise */ #define HSMHV_MOD_CORG 32 #define HSMHV_MOD_CORBNET 33 #define HSMHV_MOD_CODFM 36 /* DFM */ #define HSMHV_MOD_COQOVSM 34 #define HSMHV_MOD_COSELFHEAT 35 /* Self-heating model--SHE-- */ #define HSMHV_MOD_COSUBNODE 48 #define HSMHV_MOD_COSYM 37 /* Symmery model for HV */ #define HSMHV_MOD_COTEMP 38 #define HSMHV_MOD_COLDRIFT 39 /* device parameters */ #define HSMHV_COSELFHEAT 49 #define HSMHV_COSUBNODE 50 #define HSMHV_L 51 #define HSMHV_W 52 #define HSMHV_AD 53 #define HSMHV_AS 54 #define HSMHV_PD 55 #define HSMHV_PS 56 #define HSMHV_NRD 57 #define HSMHV_NRS 58 /* #define HSMHV_TEMP 59 not used */ #define HSMHV_DTEMP 60 #define HSMHV_OFF 61 #define HSMHV_IC_VBS 62 #define HSMHV_IC_VDS 63 #define HSMHV_IC_VGS 64 #define HSMHV_IC 65 #define HSMHV_CORBNET 66 #define HSMHV_RBPB 67 #define HSMHV_RBPD 68 #define HSMHV_RBPS 69 #define HSMHV_RBDB 70 #define HSMHV_RBSB 71 #define HSMHV_CORG 72 /* #define HSMHV_RSHG 73 */ #define HSMHV_NGCON 74 #define HSMHV_XGW 75 #define HSMHV_XGL 76 #define HSMHV_NF 77 #define HSMHV_SA 78 #define HSMHV_SB 79 #define HSMHV_SD 80 #define HSMHV_NSUBCDFM 82 #define HSMHV_M 83 #define HSMHV_SUBLD1 86 #define HSMHV_SUBLD2 87 #define HSMHV_LOVER 41 #define HSMHV_LOVERS 42 #define HSMHV_LOVERLD 43 #define HSMHV_LDRIFT1 88 #define HSMHV_LDRIFT2 89 #define HSMHV_LDRIFT1S 90 #define HSMHV_LDRIFT2S 91 /* #define HSMHV_RTH0 84 not used */ /* #define HSMHV_CTH0 85 not used */ /* model parameters */ #define HSMHV_MOD_VBSMIN 198 #define HSMHV_MOD_VMAX 500 #define HSMHV_MOD_VMAXT1 503 #define HSMHV_MOD_VMAXT2 504 #define HSMHV_MOD_BGTMP1 101 #define HSMHV_MOD_BGTMP2 102 #define HSMHV_MOD_EG0 103 #define HSMHV_MOD_TOX 104 #define HSMHV_MOD_XLD 105 #define HSMHV_MOD_LOVER 106 #define HSMHV_MOD_LOVERS 385 #define HSMHV_MOD_RDOV11 313 #define HSMHV_MOD_RDOV12 314 #define HSMHV_MOD_RDOV13 476 #define HSMHV_MOD_RDSLP1 315 #define HSMHV_MOD_RDICT1 316 #define HSMHV_MOD_RDSLP2 317 #define HSMHV_MOD_RDICT2 318 #define HSMHV_MOD_LOVERLD 436 #define HSMHV_MOD_LDRIFT1 319 #define HSMHV_MOD_LDRIFT2 320 #define HSMHV_MOD_LDRIFT1S 324 #define HSMHV_MOD_LDRIFT2S 325 #define HSMHV_MOD_SUBLD1 321 #define HSMHV_MOD_SUBLD2 322 #define HSMHV_MOD_DDLTMAX 421 /* Vdseff */ #define HSMHV_MOD_DDLTSLP 422 /* Vdseff */ #define HSMHV_MOD_DDLTICT 423 /* Vdseff */ #define HSMHV_MOD_VFBOVER 428 #define HSMHV_MOD_NOVER 430 #define HSMHV_MOD_NOVERS 431 #define HSMHV_MOD_XWD 107 #define HSMHV_MOD_XWDC 513 #define HSMHV_MOD_XL 112 #define HSMHV_MOD_XW 117 #define HSMHV_MOD_SAREF 433 #define HSMHV_MOD_SBREF 434 #define HSMHV_MOD_LL 108 #define HSMHV_MOD_LLD 109 #define HSMHV_MOD_LLN 110 #define HSMHV_MOD_WL 111 #define HSMHV_MOD_WL1 113 #define HSMHV_MOD_WL1P 114 #define HSMHV_MOD_WL2 407 #define HSMHV_MOD_WL2P 408 #define HSMHV_MOD_WLD 115 #define HSMHV_MOD_WLN 116 #define HSMHV_MOD_XQY 178 #define HSMHV_MOD_XQY1 118 #define HSMHV_MOD_XQY2 120 #define HSMHV_MOD_RSH 119 #define HSMHV_MOD_RSHG 384 /* #define HSMHV_MOD_NGCON 385 */ /* #define HSMHV_MOD_XGW 386 */ /* #define HSMHV_MOD_XGL 387 */ /* #define HSMHV_MOD_NF 388 */ #define HSMHV_MOD_RS 398 #define HSMHV_MOD_RD 399 #define HSMHV_MOD_VFBC 121 #define HSMHV_MOD_VBI 122 #define HSMHV_MOD_NSUBC 123 #define HSMHV_MOD_TNOM 124 #define HSMHV_MOD_PARL2 125 #define HSMHV_MOD_SC1 126 #define HSMHV_MOD_SC2 127 #define HSMHV_MOD_SC3 128 #define HSMHV_MOD_SC4 248 #define HSMHV_MOD_NDEP 129 #define HSMHV_MOD_NDEPL 419 #define HSMHV_MOD_NDEPLP 420 #define HSMHV_MOD_NINV 130 #define HSMHV_MOD_NINVD 505 #define HSMHV_MOD_NINVDW 506 #define HSMHV_MOD_NINVDWP 507 #define HSMHV_MOD_NINVDT1 508 #define HSMHV_MOD_NINVDT2 509 #define HSMHV_MOD_MUECB0 131 #define HSMHV_MOD_MUECB1 132 #define HSMHV_MOD_MUEPH1 133 #define HSMHV_MOD_MUEPH0 134 #define HSMHV_MOD_MUEPHW 135 #define HSMHV_MOD_MUEPWP 136 #define HSMHV_MOD_MUEPHL 137 #define HSMHV_MOD_MUEPLP 138 #define HSMHV_MOD_MUEPHS 139 #define HSMHV_MOD_MUEPSP 140 #define HSMHV_MOD_VTMP 141 #define HSMHV_MOD_WVTH0 142 #define HSMHV_MOD_MUESR1 143 #define HSMHV_MOD_MUESR0 144 #define HSMHV_MOD_MUESRL 145 #define HSMHV_MOD_MUESLP 146 #define HSMHV_MOD_MUESRW 147 #define HSMHV_MOD_MUESWP 148 #define HSMHV_MOD_BB 149 #define HSMHV_MOD_SUB1 151 #define HSMHV_MOD_SUB2 152 #define HSMHV_MOD_CGSO 154 #define HSMHV_MOD_CGDO 155 #define HSMHV_MOD_CGBO 156 #define HSMHV_MOD_JS0 157 #define HSMHV_MOD_JS0SW 158 #define HSMHV_MOD_NJ 159 #define HSMHV_MOD_NJSW 160 #define HSMHV_MOD_XTI 161 #define HSMHV_MOD_CJ 162 #define HSMHV_MOD_CJSW 163 #define HSMHV_MOD_CJSWG 164 #define HSMHV_MOD_MJ 165 #define HSMHV_MOD_MJSW 166 #define HSMHV_MOD_MJSWG 167 #define HSMHV_MOD_XTI2 168 #define HSMHV_MOD_CISB 169 #define HSMHV_MOD_CVB 170 #define HSMHV_MOD_CTEMP 171 #define HSMHV_MOD_CISBK 172 #define HSMHV_MOD_CVBK 173 #define HSMHV_MOD_DIVX 174 #define HSMHV_MOD_PB 175 #define HSMHV_MOD_PBSW 176 #define HSMHV_MOD_PBSWG 177 #define HSMHV_MOD_TPOLY 179 /* #define HSMHV_MOD_TPOLYLD 477 not used */ #define HSMHV_MOD_LP 180 #define HSMHV_MOD_NSUBP 181 #define HSMHV_MOD_NSUBP0 182 #define HSMHV_MOD_NSUBWP 183 #define HSMHV_MOD_SCP1 184 #define HSMHV_MOD_SCP2 185 #define HSMHV_MOD_SCP3 186 #define HSMHV_MOD_PGD1 187 #define HSMHV_MOD_PGD2 188 #define HSMHV_MOD_PGD3 189 #define HSMHV_MOD_PGD4 190 #define HSMHV_MOD_CLM1 191 #define HSMHV_MOD_CLM2 192 #define HSMHV_MOD_CLM3 193 #define HSMHV_MOD_CLM5 402 #define HSMHV_MOD_CLM6 403 #define HSMHV_MOD_MUETMP 195 #define HSMHV_MOD_VOVER 199 #define HSMHV_MOD_VOVERP 200 #define HSMHV_MOD_WFC 201 #define HSMHV_MOD_NSUBCW 249 #define HSMHV_MOD_NSUBCWP 250 #define HSMHV_MOD_QME1 202 #define HSMHV_MOD_QME2 203 #define HSMHV_MOD_QME3 204 #define HSMHV_MOD_GIDL1 205 #define HSMHV_MOD_GIDL2 206 #define HSMHV_MOD_GIDL3 207 #define HSMHV_MOD_GLEAK1 208 #define HSMHV_MOD_GLEAK2 209 #define HSMHV_MOD_GLEAK3 210 #define HSMHV_MOD_GLEAK4 211 #define HSMHV_MOD_GLEAK5 212 #define HSMHV_MOD_GLEAK6 213 #define HSMHV_MOD_GLEAK7 214 #define HSMHV_MOD_GLPART1 406 #define HSMHV_MOD_GLKSD1 215 #define HSMHV_MOD_GLKSD2 216 #define HSMHV_MOD_GLKSD3 217 #define HSMHV_MOD_GLKB1 218 #define HSMHV_MOD_GLKB2 219 #define HSMHV_MOD_GLKB3 429 #define HSMHV_MOD_EGIG 220 #define HSMHV_MOD_IGTEMP2 221 #define HSMHV_MOD_IGTEMP3 222 #define HSMHV_MOD_VZADD0 223 #define HSMHV_MOD_PZADD0 224 #define HSMHV_MOD_NSTI 225 #define HSMHV_MOD_WSTI 226 #define HSMHV_MOD_WSTIL 227 #define HSMHV_MOD_WSTILP 231 #define HSMHV_MOD_WSTIW 234 #define HSMHV_MOD_WSTIWP 228 #define HSMHV_MOD_SCSTI1 229 #define HSMHV_MOD_SCSTI2 230 #define HSMHV_MOD_VTHSTI 232 #define HSMHV_MOD_VDSTI 233 #define HSMHV_MOD_MUESTI1 235 #define HSMHV_MOD_MUESTI2 236 #define HSMHV_MOD_MUESTI3 237 #define HSMHV_MOD_NSUBPSTI1 238 #define HSMHV_MOD_NSUBPSTI2 239 #define HSMHV_MOD_NSUBPSTI3 240 #define HSMHV_MOD_LPEXT 241 #define HSMHV_MOD_NPEXT 242 #define HSMHV_MOD_SCP22 243 #define HSMHV_MOD_SCP21 244 #define HSMHV_MOD_BS1 245 #define HSMHV_MOD_BS2 246 #define HSMHV_MOD_KAPPA 251 #define HSMHV_MOD_PTHROU 253 #define HSMHV_MOD_VDIFFJ 254 #define HSMHV_MOD_DLY1 255 #define HSMHV_MOD_DLY2 256 #define HSMHV_MOD_DLY3 257 #define HSMHV_MOD_NFTRP 258 #define HSMHV_MOD_NFALP 259 #define HSMHV_MOD_CIT 260 #define HSMHV_MOD_FALPH 263 #define HSMHV_MOD_OVSLP 261 #define HSMHV_MOD_OVMAG 262 #define HSMHV_MOD_GIDL4 281 #define HSMHV_MOD_GIDL5 282 #define HSMHV_MOD_SVGS 283 #define HSMHV_MOD_SVBS 284 #define HSMHV_MOD_SVBSL 285 #define HSMHV_MOD_SVDS 286 #define HSMHV_MOD_SLG 287 #define HSMHV_MOD_SUB1L 290 #define HSMHV_MOD_SUB2L 292 #define HSMHV_MOD_FN1 294 #define HSMHV_MOD_FN2 295 #define HSMHV_MOD_FN3 296 #define HSMHV_MOD_FVBS 297 #define HSMHV_MOD_VOVERS 303 #define HSMHV_MOD_VOVERSP 304 #define HSMHV_MOD_SVGSL 305 #define HSMHV_MOD_SVGSLP 306 #define HSMHV_MOD_SVGSWP 307 #define HSMHV_MOD_SVGSW 308 #define HSMHV_MOD_SVBSLP 309 #define HSMHV_MOD_SLGL 310 #define HSMHV_MOD_SLGLP 311 #define HSMHV_MOD_SUB1LP 312 #define HSMHV_MOD_IBPC1 404 #define HSMHV_MOD_IBPC2 405 #define HSMHV_MOD_MPHDFM 409 #define HSMHV_MOD_RDVG11 424 #define HSMHV_MOD_RDVG12 425 #define HSMHV_MOD_RTH0 432 #define HSMHV_MOD_CTH0 462 #define HSMHV_MOD_POWRAT 463 /* #define HSMHV_MOD_WTH0 463 /\*---------SHE----------*\/ */ #define HSMHV_MOD_DLYOV 437 #define HSMHV_MOD_QDFTVD 438 #define HSMHV_MOD_XLDLD 439 #define HSMHV_MOD_XWDLD 494 #define HSMHV_MOD_RDVD 510 #define HSMHV_MOD_RDVB 301 #define HSMHV_MOD_RDVSUB 481 /* substrate effect */ #define HSMHV_MOD_RDVDSUB 482 /* substrate effect */ #define HSMHV_MOD_DDRIFT 483 /* substrate effect */ #define HSMHV_MOD_VBISUB 484 /* substrate effect */ #define HSMHV_MOD_NSUBSUB 485 /* substrate effect */ #define HSMHV_MOD_QOVSM 323 #define HSMHV_MOD_LDRIFT 458 #define HSMHV_MOD_RD20 447 #define HSMHV_MOD_RD21 441 #define HSMHV_MOD_RD22 442 #define HSMHV_MOD_RD22D 478 #define HSMHV_MOD_RD23 443 #define HSMHV_MOD_RD24 444 #define HSMHV_MOD_RD25 445 #define HSMHV_MOD_RD26 446 #define HSMHV_MOD_RDVDL 448 #define HSMHV_MOD_RDVDLP 449 #define HSMHV_MOD_RDVDS 450 #define HSMHV_MOD_RDVDSP 451 #define HSMHV_MOD_RD23L 452 #define HSMHV_MOD_RD23LP 453 #define HSMHV_MOD_RD23S 454 #define HSMHV_MOD_RD23SP 455 #define HSMHV_MOD_RDS 456 #define HSMHV_MOD_RDSP 457 #define HSMHV_MOD_RDTEMP1 461 #define HSMHV_MOD_RDTEMP2 464 #define HSMHV_MOD_RTH0R 470 #define HSMHV_MOD_RDVDTEMP1 471 #define HSMHV_MOD_RDVDTEMP2 472 #define HSMHV_MOD_RTH0W 473 #define HSMHV_MOD_RTH0WP 474 #define HSMHV_MOD_RTH0NF 475 #define HSMHV_MOD_RTHTEMP1 490 #define HSMHV_MOD_RTHTEMP2 491 #define HSMHV_MOD_PRATTEMP1 492 #define HSMHV_MOD_PRATTEMP2 493 #define HSMHV_MOD_CVDSOVER 480 #define HSMHV_MOD_SHEMAX 100 /* binning parameters */ #define HSMHV_MOD_LMIN 1000 #define HSMHV_MOD_LMAX 1001 #define HSMHV_MOD_WMIN 1002 #define HSMHV_MOD_WMAX 1003 #define HSMHV_MOD_LBINN 1004 #define HSMHV_MOD_WBINN 1005 /* Length dependence */ #define HSMHV_MOD_LVMAX 1100 #define HSMHV_MOD_LBGTMP1 1101 #define HSMHV_MOD_LBGTMP2 1102 #define HSMHV_MOD_LEG0 1103 #define HSMHV_MOD_LVFBOVER 1428 #define HSMHV_MOD_LNOVER 1430 #define HSMHV_MOD_LNOVERS 1431 #define HSMHV_MOD_LWL2 1407 #define HSMHV_MOD_LVFBC 1121 #define HSMHV_MOD_LNSUBC 1123 #define HSMHV_MOD_LNSUBP 1181 #define HSMHV_MOD_LSCP1 1184 #define HSMHV_MOD_LSCP2 1185 #define HSMHV_MOD_LSCP3 1186 #define HSMHV_MOD_LSC1 1126 #define HSMHV_MOD_LSC2 1127 #define HSMHV_MOD_LSC3 1128 #define HSMHV_MOD_LPGD1 1187 #define HSMHV_MOD_LPGD3 1189 #define HSMHV_MOD_LNDEP 1129 #define HSMHV_MOD_LNINV 1130 #define HSMHV_MOD_LMUECB0 1131 #define HSMHV_MOD_LMUECB1 1132 #define HSMHV_MOD_LMUEPH1 1133 #define HSMHV_MOD_LVTMP 1141 #define HSMHV_MOD_LWVTH0 1142 #define HSMHV_MOD_LMUESR1 1143 #define HSMHV_MOD_LMUETMP 1195 #define HSMHV_MOD_LSUB1 1151 #define HSMHV_MOD_LSUB2 1152 #define HSMHV_MOD_LSVDS 1286 #define HSMHV_MOD_LSVBS 1284 #define HSMHV_MOD_LSVGS 1283 #define HSMHV_MOD_LFN1 1294 #define HSMHV_MOD_LFN2 1295 #define HSMHV_MOD_LFN3 1296 #define HSMHV_MOD_LFVBS 1297 #define HSMHV_MOD_LNSTI 1225 #define HSMHV_MOD_LWSTI 1226 #define HSMHV_MOD_LSCSTI1 1229 #define HSMHV_MOD_LSCSTI2 1230 #define HSMHV_MOD_LVTHSTI 1232 #define HSMHV_MOD_LMUESTI1 1235 #define HSMHV_MOD_LMUESTI2 1236 #define HSMHV_MOD_LMUESTI3 1237 #define HSMHV_MOD_LNSUBPSTI1 1238 #define HSMHV_MOD_LNSUBPSTI2 1239 #define HSMHV_MOD_LNSUBPSTI3 1240 #define HSMHV_MOD_LCGSO 1154 #define HSMHV_MOD_LCGDO 1155 #define HSMHV_MOD_LJS0 1157 #define HSMHV_MOD_LJS0SW 1158 #define HSMHV_MOD_LNJ 1159 #define HSMHV_MOD_LCISBK 1172 #define HSMHV_MOD_LCLM1 1191 #define HSMHV_MOD_LCLM2 1192 #define HSMHV_MOD_LCLM3 1193 #define HSMHV_MOD_LWFC 1201 #define HSMHV_MOD_LGIDL1 1205 #define HSMHV_MOD_LGIDL2 1206 #define HSMHV_MOD_LGLEAK1 1208 #define HSMHV_MOD_LGLEAK2 1209 #define HSMHV_MOD_LGLEAK3 1210 #define HSMHV_MOD_LGLEAK6 1213 #define HSMHV_MOD_LGLKSD1 1215 #define HSMHV_MOD_LGLKSD2 1216 #define HSMHV_MOD_LGLKB1 1218 #define HSMHV_MOD_LGLKB2 1219 #define HSMHV_MOD_LNFTRP 1258 #define HSMHV_MOD_LNFALP 1259 #define HSMHV_MOD_LPTHROU 1253 #define HSMHV_MOD_LVDIFFJ 1254 #define HSMHV_MOD_LIBPC1 1404 #define HSMHV_MOD_LIBPC2 1405 #define HSMHV_MOD_LCGBO 1156 #define HSMHV_MOD_LCVDSOVER 1480 #define HSMHV_MOD_LFALPH 1263 #define HSMHV_MOD_LNPEXT 1242 #define HSMHV_MOD_LPOWRAT 1463 #define HSMHV_MOD_LRD 1399 #define HSMHV_MOD_LRD22 1442 #define HSMHV_MOD_LRD23 1443 #define HSMHV_MOD_LRD24 1444 #define HSMHV_MOD_LRDICT1 1316 #define HSMHV_MOD_LRDOV13 1476 #define HSMHV_MOD_LRDSLP1 1315 #define HSMHV_MOD_LRDVB 1301 #define HSMHV_MOD_LRDVD 1510 #define HSMHV_MOD_LRDVG11 1424 #define HSMHV_MOD_LRS 1398 #define HSMHV_MOD_LRTH0 1432 #define HSMHV_MOD_LVOVER 1199 /* Width dependence */ #define HSMHV_MOD_WVMAX 2100 #define HSMHV_MOD_WBGTMP1 2101 #define HSMHV_MOD_WBGTMP2 2102 #define HSMHV_MOD_WEG0 2103 #define HSMHV_MOD_WVFBOVER 2428 #define HSMHV_MOD_WNOVER 2430 #define HSMHV_MOD_WNOVERS 2431 #define HSMHV_MOD_WWL2 2407 #define HSMHV_MOD_WVFBC 2121 #define HSMHV_MOD_WNSUBC 2123 #define HSMHV_MOD_WNSUBP 2181 #define HSMHV_MOD_WSCP1 2184 #define HSMHV_MOD_WSCP2 2185 #define HSMHV_MOD_WSCP3 2186 #define HSMHV_MOD_WSC1 2126 #define HSMHV_MOD_WSC2 2127 #define HSMHV_MOD_WSC3 2128 #define HSMHV_MOD_WPGD1 2187 #define HSMHV_MOD_WPGD3 2189 #define HSMHV_MOD_WNDEP 2129 #define HSMHV_MOD_WNINV 2130 #define HSMHV_MOD_WMUECB0 2131 #define HSMHV_MOD_WMUECB1 2132 #define HSMHV_MOD_WMUEPH1 2133 #define HSMHV_MOD_WVTMP 2141 #define HSMHV_MOD_WWVTH0 2142 #define HSMHV_MOD_WMUESR1 2143 #define HSMHV_MOD_WMUETMP 2195 #define HSMHV_MOD_WSUB1 2151 #define HSMHV_MOD_WSUB2 2152 #define HSMHV_MOD_WSVDS 2286 #define HSMHV_MOD_WSVBS 2284 #define HSMHV_MOD_WSVGS 2283 #define HSMHV_MOD_WFN1 2294 #define HSMHV_MOD_WFN2 2295 #define HSMHV_MOD_WFN3 2296 #define HSMHV_MOD_WFVBS 2297 #define HSMHV_MOD_WNSTI 2225 #define HSMHV_MOD_WWSTI 2226 #define HSMHV_MOD_WSCSTI1 2229 #define HSMHV_MOD_WSCSTI2 2230 #define HSMHV_MOD_WVTHSTI 2232 #define HSMHV_MOD_WMUESTI1 2235 #define HSMHV_MOD_WMUESTI2 2236 #define HSMHV_MOD_WMUESTI3 2237 #define HSMHV_MOD_WNSUBPSTI1 2238 #define HSMHV_MOD_WNSUBPSTI2 2239 #define HSMHV_MOD_WNSUBPSTI3 2240 #define HSMHV_MOD_WCGSO 2154 #define HSMHV_MOD_WCGDO 2155 #define HSMHV_MOD_WJS0 2157 #define HSMHV_MOD_WJS0SW 2158 #define HSMHV_MOD_WNJ 2159 #define HSMHV_MOD_WCISBK 2172 #define HSMHV_MOD_WCLM1 2191 #define HSMHV_MOD_WCLM2 2192 #define HSMHV_MOD_WCLM3 2193 #define HSMHV_MOD_WWFC 2201 #define HSMHV_MOD_WGIDL1 2205 #define HSMHV_MOD_WGIDL2 2206 #define HSMHV_MOD_WGLEAK1 2208 #define HSMHV_MOD_WGLEAK2 2209 #define HSMHV_MOD_WGLEAK3 2210 #define HSMHV_MOD_WGLEAK6 2213 #define HSMHV_MOD_WGLKSD1 2215 #define HSMHV_MOD_WGLKSD2 2216 #define HSMHV_MOD_WGLKB1 2218 #define HSMHV_MOD_WGLKB2 2219 #define HSMHV_MOD_WNFTRP 2258 #define HSMHV_MOD_WNFALP 2259 #define HSMHV_MOD_WPTHROU 2253 #define HSMHV_MOD_WVDIFFJ 2254 #define HSMHV_MOD_WIBPC1 2404 #define HSMHV_MOD_WIBPC2 2405 #define HSMHV_MOD_WCGBO 2156 #define HSMHV_MOD_WCVDSOVER 2480 #define HSMHV_MOD_WFALPH 2263 #define HSMHV_MOD_WNPEXT 2242 #define HSMHV_MOD_WPOWRAT 2463 #define HSMHV_MOD_WRD 2399 #define HSMHV_MOD_WRD22 2442 #define HSMHV_MOD_WRD23 2443 #define HSMHV_MOD_WRD24 2444 #define HSMHV_MOD_WRDICT1 2316 #define HSMHV_MOD_WRDOV13 2476 #define HSMHV_MOD_WRDSLP1 2315 #define HSMHV_MOD_WRDVB 2301 #define HSMHV_MOD_WRDVD 2510 #define HSMHV_MOD_WRDVG11 2424 #define HSMHV_MOD_WRS 2398 #define HSMHV_MOD_WRTH0 2432 #define HSMHV_MOD_WVOVER 2199 /* Cross-term dependence */ #define HSMHV_MOD_PVMAX 3100 #define HSMHV_MOD_PBGTMP1 3101 #define HSMHV_MOD_PBGTMP2 3102 #define HSMHV_MOD_PEG0 3103 #define HSMHV_MOD_PVFBOVER 3428 #define HSMHV_MOD_PNOVER 3430 #define HSMHV_MOD_PNOVERS 3431 #define HSMHV_MOD_PWL2 3407 #define HSMHV_MOD_PVFBC 3121 #define HSMHV_MOD_PNSUBC 3123 #define HSMHV_MOD_PNSUBP 3181 #define HSMHV_MOD_PSCP1 3184 #define HSMHV_MOD_PSCP2 3185 #define HSMHV_MOD_PSCP3 3186 #define HSMHV_MOD_PSC1 3126 #define HSMHV_MOD_PSC2 3127 #define HSMHV_MOD_PSC3 3128 #define HSMHV_MOD_PPGD1 3187 #define HSMHV_MOD_PPGD3 3189 #define HSMHV_MOD_PNDEP 3129 #define HSMHV_MOD_PNINV 3130 #define HSMHV_MOD_PMUECB0 3131 #define HSMHV_MOD_PMUECB1 3132 #define HSMHV_MOD_PMUEPH1 3133 #define HSMHV_MOD_PVTMP 3141 #define HSMHV_MOD_PWVTH0 3142 #define HSMHV_MOD_PMUESR1 3143 #define HSMHV_MOD_PMUETMP 3195 #define HSMHV_MOD_PSUB1 3151 #define HSMHV_MOD_PSUB2 3152 #define HSMHV_MOD_PSVDS 3286 #define HSMHV_MOD_PSVBS 3284 #define HSMHV_MOD_PSVGS 3283 #define HSMHV_MOD_PFN1 3294 #define HSMHV_MOD_PFN2 3295 #define HSMHV_MOD_PFN3 3296 #define HSMHV_MOD_PFVBS 3297 #define HSMHV_MOD_PNSTI 3225 #define HSMHV_MOD_PWSTI 3226 #define HSMHV_MOD_PSCSTI1 3229 #define HSMHV_MOD_PSCSTI2 3230 #define HSMHV_MOD_PVTHSTI 3232 #define HSMHV_MOD_PMUESTI1 3235 #define HSMHV_MOD_PMUESTI2 3236 #define HSMHV_MOD_PMUESTI3 3237 #define HSMHV_MOD_PNSUBPSTI1 3238 #define HSMHV_MOD_PNSUBPSTI2 3239 #define HSMHV_MOD_PNSUBPSTI3 3240 #define HSMHV_MOD_PCGSO 3154 #define HSMHV_MOD_PCGDO 3155 #define HSMHV_MOD_PJS0 3157 #define HSMHV_MOD_PJS0SW 3158 #define HSMHV_MOD_PNJ 3159 #define HSMHV_MOD_PCISBK 3172 #define HSMHV_MOD_PCLM1 3191 #define HSMHV_MOD_PCLM2 3192 #define HSMHV_MOD_PCLM3 3193 #define HSMHV_MOD_PWFC 3201 #define HSMHV_MOD_PGIDL1 3205 #define HSMHV_MOD_PGIDL2 3206 #define HSMHV_MOD_PGLEAK1 3208 #define HSMHV_MOD_PGLEAK2 3209 #define HSMHV_MOD_PGLEAK3 3210 #define HSMHV_MOD_PGLEAK6 3213 #define HSMHV_MOD_PGLKSD1 3215 #define HSMHV_MOD_PGLKSD2 3216 #define HSMHV_MOD_PGLKB1 3218 #define HSMHV_MOD_PGLKB2 3219 #define HSMHV_MOD_PNFTRP 3258 #define HSMHV_MOD_PNFALP 3259 #define HSMHV_MOD_PPTHROU 3253 #define HSMHV_MOD_PVDIFFJ 3254 #define HSMHV_MOD_PIBPC1 3404 #define HSMHV_MOD_PIBPC2 3405 #define HSMHV_MOD_PCGBO 3156 #define HSMHV_MOD_PCVDSOVER 3480 #define HSMHV_MOD_PFALPH 3263 #define HSMHV_MOD_PNPEXT 3242 #define HSMHV_MOD_PPOWRAT 3463 #define HSMHV_MOD_PRD 3399 #define HSMHV_MOD_PRD22 3442 #define HSMHV_MOD_PRD23 3443 #define HSMHV_MOD_PRD24 3444 #define HSMHV_MOD_PRDICT1 3316 #define HSMHV_MOD_PRDOV13 3476 #define HSMHV_MOD_PRDSLP1 3315 #define HSMHV_MOD_PRDVB 3301 #define HSMHV_MOD_PRDVD 3510 #define HSMHV_MOD_PRDVG11 3424 #define HSMHV_MOD_PRS 3398 #define HSMHV_MOD_PRTH0 3432 #define HSMHV_MOD_PVOVER 3199 /* device requests */ #define HSMHV_DNODE 341 #define HSMHV_GNODE 342 #define HSMHV_SNODE 343 #define HSMHV_BNODE 344 /* #define HSMHV_TEMPNODE 345 not used */ #define HSMHV_DNODEPRIME 346 #define HSMHV_SNODEPRIME 347 /* #define HSMHV_BNODEPRIME 395 not used */ /* #define HSMHV_DBNODE 396 not used */ /* #define HSMHV_SBNODE 397 not used */ /* #define HSMHV_VBD 347 */ #define HSMHV_VBD 466 #define HSMHV_VBS 348 #define HSMHV_VGS 349 #define HSMHV_VDS 350 #define HSMHV_CD 351 #define HSMHV_CBS 352 #define HSMHV_CBD 353 #define HSMHV_GM 354 #define HSMHV_GDS 355 #define HSMHV_GMBS 356 #define HSMHV_GMT 465 /* #define HSMHV_ISUBT 466 */ #define HSMHV_GBD 357 #define HSMHV_GBS 358 #define HSMHV_QB 359 #define HSMHV_CQB 360 /* #define HSMHV_QTH 467 not used */ /* #define HSMHV_CQTH 468 not used */ /* #define HSMHV_CTH 469 not used */ #define HSMHV_QG 361 #define HSMHV_CQG 362 #define HSMHV_QD 363 #define HSMHV_CQD 364 #define HSMHV_CGG 365 #define HSMHV_CGD 366 #define HSMHV_CGS 367 #define HSMHV_CBG 368 #define HSMHV_CAPBD 369 /* #define HSMHV_CQBD 370 not used */ #define HSMHV_CAPBS 371 /* #define HSMHV_CQBS 372 not used */ #define HSMHV_CDG 373 #define HSMHV_CDD 374 #define HSMHV_CDS 375 #define HSMHV_VON 376 #define HSMHV_VDSAT 377 #define HSMHV_QBS 378 #define HSMHV_QBD 379 #define HSMHV_SOURCECONDUCT 380 #define HSMHV_DRAINCONDUCT 381 #define HSMHV_CBDB 382 #define HSMHV_CBSB 383 #define HSMHV_MOD_RBPB 389 #define HSMHV_MOD_RBPD 390 #define HSMHV_MOD_RBPS 391 #define HSMHV_MOD_RBDB 392 #define HSMHV_MOD_RBSB 393 #define HSMHV_MOD_GBMIN 394 #define HSMHV_ISUB 410 #define HSMHV_IGIDL 411 #define HSMHV_IGISL 412 #define HSMHV_IGD 413 #define HSMHV_IGS 414 #define HSMHV_IGB 415 #define HSMHV_CGSO 416 #define HSMHV_CGBO 417 #define HSMHV_CGDO 418 #define HSMHV_MOD_TCJBD 92 #define HSMHV_MOD_TCJBS 93 #define HSMHV_MOD_TCJBDSW 94 #define HSMHV_MOD_TCJBSSW 95 #define HSMHV_MOD_TCJBDSWG 96 #define HSMHV_MOD_TCJBSSWG 97 #define HSMHV_MOD_VGS_MAX 4001 #define HSMHV_MOD_VGD_MAX 4002 #define HSMHV_MOD_VGB_MAX 4003 #define HSMHV_MOD_VDS_MAX 4004 #define HSMHV_MOD_VBS_MAX 4005 #define HSMHV_MOD_VBD_MAX 4006 #define HSMHV_MOD_VGSR_MAX 4007 #define HSMHV_MOD_VGDR_MAX 4008 #define HSMHV_MOD_VGBR_MAX 4009 #define HSMHV_MOD_VBSR_MAX 4010 #define HSMHV_MOD_VBDR_MAX 4011 #include "hsmhvext.h" /* Prototype has to be adapted! extern void HSMHVevaluate(double,double,double,HSMHVinstance*,HSMHVmodel*, double*,double*,double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, CKTcircuit*); */ #endif /*HSMHV*/ tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhvtemp_eval.h0000644000175000017500000004230713546075722024114 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2012 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 1 SUBVERSION : 2 REVISION : 4 ) Model Parameter VERSION : 1.23 FILE : hsmhvtemp_eval.h DATE : 2013.04.30 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ #define C_rdtemp_min 5.0e-3 #define C_rdtemp_dlt 1.0e-2 TTEMP = ckt->CKTtemp; if ( here->HSMHV_dtemp_Given ) { TTEMP = TTEMP + here->HSMHV_dtemp ; } TTEMP0 = TTEMP ; #ifdef HSMHVEVAL /* Self heating */ TTEMP = TTEMP + deltemp ; #endif /*Tdiff0 = TTEMP0 - model->HSMHV_ktnom ;*/ /*Tdiff0_2 = TTEMP0 * TTEMP0 - model->HSMHV_ktnom * model->HSMHV_ktnom ;*/ Tdiff = TTEMP - model->HSMHV_ktnom ; Tdiff_2 = TTEMP * TTEMP - model->HSMHV_ktnom * model->HSMHV_ktnom ; /* Band gap */ T1 = TTEMP - model->HSMHV_ktnom ; T2 = TTEMP * TTEMP - model->HSMHV_ktnom * model->HSMHV_ktnom ; here->HSMHV_eg = Eg = here->HSMHV_egtnom - pParam->HSMHV_bgtmp1 * T1 - pParam->HSMHV_bgtmp2 * T2 ; here->HSMHV_sqrt_eg = sqrt( Eg ) ; #ifdef HSMHVEVAL Eg_dT = -pParam->HSMHV_bgtmp1 - 2.0e0 * TTEMP * pParam->HSMHV_bgtmp2 ; #endif T1 = 1.0 / TTEMP ; T2 = 1.0 / model->HSMHV_ktnom ; T3 = here->HSMHV_egtnom + model->HSMHV_egig + model->HSMHV_igtemp2 * ( T1 - T2 ) + model->HSMHV_igtemp3 * ( T1 * T1 - T2 * T2 ) ; here->HSMHV_egp12 = sqrt ( T3 ) ; here->HSMHV_egp32 = T3 * here->HSMHV_egp12 ; /* Inverse of the thermal voltage */ here->HSMHV_beta = beta = C_QE / (C_KB * TTEMP) ; here->HSMHV_beta_inv = 1.0 / beta ; here->HSMHV_beta2 = beta * beta ; here->HSMHV_betatnom = C_QE / (C_KB * model->HSMHV_ktnom) ; #ifdef HSMHVEVAL beta_dT=-C_QE/(C_KB*TTEMP*TTEMP); beta_inv_dT = C_KB / C_QE ; #endif /* Intrinsic carrier concentration */ here->HSMHV_nin = Nin = C_Nin0 * Fn_Pow (TTEMP / model->HSMHV_ktnom, 1.5e0) * exp (- Eg / 2.0e0 * beta + here->HSMHV_egtnom / 2.0e0 * here->HSMHV_betatnom) ; #ifdef HSMHVEVAL Nin_dT = C_Nin0 * exp (- Eg / 2.0e0 * beta + here->HSMHV_egtnom / 2.0e0 * here->HSMHV_betatnom) * 1.5e0 * Fn_Pow ( TTEMP / model->HSMHV_ktnom , 0.5e0 ) / model->HSMHV_ktnom + C_Nin0 * Fn_Pow (TTEMP / model->HSMHV_ktnom, 1.5e0) * exp (- Eg / 2.0e0 * beta + here->HSMHV_egtnom / 2.0e0 * here->HSMHV_betatnom) * ( - Eg / 2.0e0 * beta_dT - beta / 2.0e0 * Eg_dT ); #endif /* Phonon Scattering (temperature-dependent part) */ T1 = Fn_Pow (TTEMP / model->HSMHV_ktnom, pParam->HSMHV_muetmp) ; here->HSMHV_mphn0 = T1 / here->HSMHV_mueph ; here->HSMHV_mphn1 = here->HSMHV_mphn0 * model->HSMHV_mueph0 ; #ifdef HSMHVEVAL T1_dT = pParam->HSMHV_muetmp * Fn_Pow(TTEMP / model->HSMHV_ktnom, pParam->HSMHV_muetmp - 1.0 ) / model->HSMHV_ktnom ; mphn0_dT = T1_dT / here->HSMHV_mueph ; #endif /* Pocket Overlap (temperature-dependent part) */ here->HSMHV_ptovr = here->HSMHV_ptovr0 / beta ; #ifdef HSMHVEVAL ptovr_dT = here->HSMHV_ptovr0 * beta_inv_dT ; #endif /* Velocity Temperature Dependence */ T1 = TTEMP / model->HSMHV_ktnom ; T3 = TTEMP0 - model->HSMHV_ktnom ; T4 = TTEMP0 * TTEMP0 - model->HSMHV_ktnom * model->HSMHV_ktnom ; T0 = 1.8 + 0.4 * T1 + 0.1 * T1 * T1 - pParam->HSMHV_vtmp * (1.0 - T1) ; if ( model->HSMHV_cotemp != 2 ) { /* without deltemp (COTEMP=0,1,3) */ here->HSMHV_vmax = here->HSMHV_vmax0 * pParam->HSMHV_vmax / T0 * ( 1.0 + model->HSMHV_vmaxt1 * T3 + model->HSMHV_vmaxt2 * T4 ) ; #ifdef HSMHVEVAL Vmax_dT=-here->HSMHV_vmax0 * pParam->HSMHV_vmax / ( T0 * T0 ) * ( 1.0 + model->HSMHV_vmaxt1 * T3 + model->HSMHV_vmaxt2 * T4 ) * 1/model->HSMHV_ktnom * (0.4 + 0.2 * T1 + pParam->HSMHV_vtmp) ; #endif } else { /* with deltemp (COTEMP=2) */ here->HSMHV_vmax = here->HSMHV_vmax0 * pParam->HSMHV_vmax / T0 * ( 1.0 + model->HSMHV_vmaxt1 * Tdiff + model->HSMHV_vmaxt2 * Tdiff_2 ) ; #ifdef HSMHVEVAL /* under development */ Vmax_dT = here->HSMHV_vmax0 * pParam->HSMHV_vmax / ( T0 * T0 ) * ( ( model->HSMHV_vmaxt1 + 2.0 * TTEMP * model->HSMHV_vmaxt2 ) * T0 - ( 1.0 + model->HSMHV_vmaxt1 * Tdiff + model->HSMHV_vmaxt2 * Tdiff_2 ) * 1/model->HSMHV_ktnom * (0.4 + 0.2 * T1 + pParam->HSMHV_vtmp) ) ; #endif } if ( model->HSMHV_cotemp != 2 ) { /* without deltemp (COTEMP=0,1,3) */ here->HSMHV_ninvd = here->HSMHV_ninvd0 * ( 1.0 + model->HSMHV_ninvdt1 * T3 + model->HSMHV_ninvdt2 * T4 ) ; #ifdef HSMHVEVAL ninvd_dT = 0.0 ; #endif } else { /* with deltemp (COTEMP=2) */ /* under development */ here->HSMHV_ninvd = here->HSMHV_ninvd0 * ( 1.0 + model->HSMHV_ninvdt1 * Tdiff + model->HSMHV_ninvdt2 * Tdiff_2 ) ; #ifdef HSMHVEVAL ninvd_dT = here->HSMHV_ninvd0 * ( model->HSMHV_ninvdt1 + 2.0 * TTEMP * model->HSMHV_ninvdt2 ) ; #endif } /* Temperature Dependence of RTH0 */ pParam->HSMHV_rth = ( pParam->HSMHV_rth0 + model->HSMHV_rthtemp1 * T3 + model->HSMHV_rthtemp2 * T4 ) * here->HSMHV_rthtemp0 ; /* Temperature Dependence of POWRAT */ T2 = pParam->HSMHV_powrat + model->HSMHV_prattemp1 * T3 + model->HSMHV_prattemp2 * T4 ; Fn_SL( T2 , T2 , 0 , 0.05 , T0 ); Fn_SU( here->HSMHV_powratio , T2 , 1 , 0.05 , T0 ); /* 2 phi_B (temperature-dependent) */ /* @temp, with pocket */ here->HSMHV_pb2 = 2.0e0 / beta * log (here->HSMHV_nsub / Nin) ; #ifdef HSMHVEVAL Pb2_dT = - (here->HSMHV_pb2 * beta_dT + 2.0e0 / Nin * Nin_dT ) / beta ; #endif /* Depletion Width */ T1 = 2.0e0 * C_ESI / C_QE ; here->HSMHV_wdpl = sqrt ( T1 / here->HSMHV_nsub ) ; here->HSMHV_wdplp = sqrt( T1 / ( here->HSMHV_nsubp ) ) ; /* Coefficient of the F function for bulk charge */ here->HSMHV_cnst0 = sqrt ( 2.0 * C_ESI * C_QE * here->HSMHV_nsub / beta ) ; /* cnst1: n_{p0} / p_{p0} */ T1 = Nin / here->HSMHV_nsub ; here->HSMHV_cnst1 = T1 * T1 ; #ifdef HSMHVEVAL cnst0_dT = 0.5e0 / here->HSMHV_cnst0 * 2.0 * C_ESI * C_QE * here->HSMHV_nsub * beta_inv_dT ; cnst1_dT = 2.0e0 * Nin * Nin_dT / here->HSMHV_nsub / here->HSMHV_nsub ; #endif if ( pParam->HSMHV_nover != 0.0 ) { here->HSMHV_cnst0over = here->HSMHV_cnst0 * sqrt( pParam->HSMHV_nover / here->HSMHV_nsub ) ; #ifdef HSMHVEVAL cnst0over_dT = cnst0_dT * sqrt( pParam->HSMHV_nover / here->HSMHV_nsub ) ; #endif /* ps0ldinib : Ps0_iniB for Ps0LD */ T1 = here->HSMHV_cnst0over * model->HSMHV_tox / here->HSMHV_cecox ; T2 = pParam->HSMHV_nover / Nin ; here->HSMHV_ps0ldinib = T2 * T2 / ( T1 * T1 ); #ifdef HSMHVEVAL T1_dT = cnst0over_dT * model->HSMHV_tox / here->HSMHV_cecox ; T2_dT = - Nin_dT * T2 / Nin; ps0ldinib_dT = 2.0 * here->HSMHV_ps0ldinib * ( T2_dT * T1 - T2 * T1_dT ) / ( T1 * T2 ); #endif } if ( pParam->HSMHV_novers != 0.0 ) { here->HSMHV_cnst0overs = here->HSMHV_cnst0 * sqrt( pParam->HSMHV_novers / here->HSMHV_nsub ) ; #ifdef HSMHVEVAL cnst0overs_dT = cnst0_dT * sqrt( pParam->HSMHV_novers / here->HSMHV_nsub ) ; #endif /* ps0ldinib : Ps0_iniB for Ps0LD */ T1 = here->HSMHV_cnst0overs * model->HSMHV_tox / here->HSMHV_cecox ; T2 = pParam->HSMHV_novers / Nin ; here->HSMHV_ps0ldinibs = T2 * T2 / ( T1 * T1 ); #ifdef HSMHVEVAL T1_dT = cnst0overs_dT * model->HSMHV_tox / here->HSMHV_cecox ; T2_dT = - Nin_dT * T2 / Nin; ps0ldinibs_dT = 2.0 * here->HSMHV_ps0ldinibs * ( T2_dT * T1 - T2 * T1_dT ) / ( T1 * T2 ); #endif } /* temperature-dependent resistance model */ T3 = model->HSMHV_ktnom ; T1 = TTEMP0 - T3 ; T4 = TTEMP0 * TTEMP0 - T3 * T3 ; /* drain side */ if ( pParam->HSMHV_rd > 0.0 ) { T2 = here->HSMHV_rdtemp0 * ( here->HSMHV_ldrift1 * pParam->HSMHV_rdslp1 * C_m2um + pParam->HSMHV_rdict1 ) * ( here->HSMHV_ldrift2 * model->HSMHV_rdslp2 * C_m2um + model->HSMHV_rdict2 ) ; if ( model->HSMHV_cotemp == 1 ) { /* without deltemp (COTEMP=1) */ here->HSMHV_rd = ( pParam->HSMHV_rd + T1 * modelMKS->HSMHV_rdtemp1 + modelMKS->HSMHV_rdtemp2 * T4 ) * T2 ; Fn_SL( here->HSMHV_rd, here->HSMHV_rd, C_rdtemp_min * pParam->HSMHV_rd, C_rdtemp_dlt * pParam->HSMHV_rd, T0 ); #ifdef HSMHVEVAL Rd0_dT = 0.0 ; #endif } else { /* with deltemp (COTEMP=0,2,3) */ here->HSMHV_rd = ( pParam->HSMHV_rd + modelMKS->HSMHV_rdtemp1 * Tdiff + modelMKS->HSMHV_rdtemp2 * Tdiff_2 ) * T2 ; Fn_SL( here->HSMHV_rd, here->HSMHV_rd, C_rdtemp_min * pParam->HSMHV_rd, C_rdtemp_dlt * pParam->HSMHV_rd, T0 ); #ifdef HSMHVEVAL Rd0_dT = ( modelMKS->HSMHV_rdtemp1 + 2.0 * TTEMP * modelMKS->HSMHV_rdtemp2 ) * T2 * T0 ; #endif } } else { here->HSMHV_rd = 0.0 ; } /* source side (asymmetric case) */ if ( pParam->HSMHV_rs > 0.0 ) { T2 = here->HSMHV_rdtemp0 * ( here->HSMHV_ldrift1s * pParam->HSMHV_rdslp1 * C_m2um + pParam->HSMHV_rdict1 ) * ( here->HSMHV_ldrift2s * model->HSMHV_rdslp2 * C_m2um + model->HSMHV_rdict2 ) ; if ( model->HSMHV_cotemp == 1 ) { /* without deltemp (COTEMP=1) */ here->HSMHV_rs = ( pParam->HSMHV_rs + T1 * modelMKS->HSMHV_rdtemp1 + modelMKS->HSMHV_rdtemp2 * T4 ) * T2 ; Fn_SL( here->HSMHV_rs, here->HSMHV_rs, C_rdtemp_min * pParam->HSMHV_rs, C_rdtemp_dlt * pParam->HSMHV_rs, T0 ); #ifdef HSMHVEVAL Rs0_dT = 0.0 ; #endif } else { /* with deltemp (COTEMP=0,2,3) */ here->HSMHV_rs = ( pParam->HSMHV_rs + modelMKS->HSMHV_rdtemp1 * Tdiff + modelMKS->HSMHV_rdtemp2 * Tdiff_2 ) * T2 ; Fn_SL( here->HSMHV_rs, here->HSMHV_rs, C_rdtemp_min * pParam->HSMHV_rs, C_rdtemp_dlt * pParam->HSMHV_rs, T0 ); #ifdef HSMHVEVAL Rs0_dT = ( modelMKS->HSMHV_rdtemp1 + 2.0 * TTEMP * modelMKS->HSMHV_rdtemp2 ) * T2 * T0 ; #endif } } else { here->HSMHV_rs = 0.0 ; } if ( pParam->HSMHV_rdvd > 0.0 ) { T4 = here->HSMHV_rdvdtemp0 * ( here->HSMHV_ldrift1 * pParam->HSMHV_rdslp1 * C_m2um + pParam->HSMHV_rdict1 ) * ( here->HSMHV_ldrift2 * model->HSMHV_rdslp2 * C_m2um + model->HSMHV_rdict2 ) ; T1 = ( 1 - pParam->HSMHV_rdov13 ) * here->HSMHV_loverld * C_m2um ; T0 = - model->HSMHV_rdov11 / ( model->HSMHV_rdov12 + small ) ; T3 = ( T0 * here->HSMHV_loverld * C_m2um + 1.0 + model->HSMHV_rdov11 ) ; Fn_SL( T5 , T3 * T4 , T4 , 10.0e-3 , T6 ) ; Fn_SU( T7 , T5 , T4 * ( model->HSMHV_rdov11 + 1.0) , 50.0e-6 , T6 ) ; Fn_SL( T2 , T7 + T1 * T4 , 0, 50.0e-6 , T6 ) ; T3 = model->HSMHV_ktnom ; T1 = TTEMP0 - T3 ; if ( model->HSMHV_cotemp == 0 || model->HSMHV_cotemp == 1 ) { /* without deltemp (COTEMP=0,1) */ here->HSMHV_rdvd = ( pParam->HSMHV_rdvd + T1 * modelMKS->HSMHV_rdvdtemp1 + modelMKS->HSMHV_rdvdtemp2 * ( TTEMP0 * TTEMP0 - T3 * T3 ) ) * T2 ; Fn_SL( here->HSMHV_rdvd, here->HSMHV_rdvd, C_rdtemp_min * pParam->HSMHV_rdvd, C_rdtemp_dlt * pParam->HSMHV_rdvd, T0 ); #ifdef HSMHVEVAL Rdvd_dT = 0.0 ; #endif } else { /* with deltemp (COTEMP=2,3) */ here->HSMHV_rdvd = ( pParam->HSMHV_rdvd + modelMKS->HSMHV_rdvdtemp1 * Tdiff + modelMKS->HSMHV_rdvdtemp2 * Tdiff_2 ) * T2 ; Fn_SL( here->HSMHV_rdvd, here->HSMHV_rdvd, C_rdtemp_min * pParam->HSMHV_rdvd, C_rdtemp_dlt * pParam->HSMHV_rdvd, T0 ); #ifdef HSMHVEVAL Rdvd_dT = ( modelMKS->HSMHV_rdvdtemp1 + 2.0 * TTEMP * modelMKS->HSMHV_rdvdtemp2 ) * T2 * T0 ; #endif } T4 = here->HSMHV_rdvdtemp0 * ( here->HSMHV_ldrift1s * pParam->HSMHV_rdslp1 * C_m2um + pParam->HSMHV_rdict1 ) * ( here->HSMHV_ldrift2s * model->HSMHV_rdslp2 * C_m2um + model->HSMHV_rdict2 ) ; T1 = ( 1 - pParam->HSMHV_rdov13 ) * here->HSMHV_lovers * C_m2um ; T0 = - model->HSMHV_rdov11 / ( model->HSMHV_rdov12 + small ) ; T3 = ( T0 * here->HSMHV_lovers * C_m2um + 1.0 + model->HSMHV_rdov11 ) ; Fn_SL( T5 , T3 * T4 , T4 , 10.0e-3 , T6 ) ; Fn_SU( T7 , T5 , T4 * ( model->HSMHV_rdov11 + 1.0) , 50.0e-6 , T6 ) ; Fn_SL( T2 , T7 + T1 * T4 , 0, 50.0e-6 , T6 ) ; T3 = model->HSMHV_ktnom ; T1 = TTEMP0 - T3 ; if ( model->HSMHV_cotemp == 0 || model->HSMHV_cotemp == 1 ) { /* without deltemp (COTEMP=0,1) */ here->HSMHV_rsvd = ( pParam->HSMHV_rdvd + T1 * modelMKS->HSMHV_rdvdtemp1 + modelMKS->HSMHV_rdvdtemp2 * ( TTEMP0 * TTEMP0 - T3 * T3 ) ) * T2 ; Fn_SL( here->HSMHV_rsvd, here->HSMHV_rsvd, C_rdtemp_min * pParam->HSMHV_rdvd, C_rdtemp_dlt * pParam->HSMHV_rdvd, T0 ); #ifdef HSMHVEVAL Rsvd_dT = 0.0 ; #endif } else { /* with deltemp (COTEMP=2,3) */ here->HSMHV_rsvd = ( pParam->HSMHV_rdvd + modelMKS->HSMHV_rdvdtemp1 * Tdiff + modelMKS->HSMHV_rdvdtemp2 * Tdiff_2 ) * T2 ; Fn_SL( here->HSMHV_rsvd, here->HSMHV_rsvd, C_rdtemp_min * pParam->HSMHV_rdvd, C_rdtemp_dlt * pParam->HSMHV_rdvd, T0 ); #ifdef HSMHVEVAL Rsvd_dT = ( modelMKS->HSMHV_rdvdtemp1 + 2.0 * TTEMP * modelMKS->HSMHV_rdvdtemp2 ) * T2 * T0 ; #endif } } else { here->HSMHV_rdvd = 0.0 ; here->HSMHV_rsvd = 0.0 ; } /* for substrate-source/drain junction diode. */ js = pParam->HSMHV_js0 * exp ((here->HSMHV_egtnom * here->HSMHV_betatnom - Eg * beta + model->HSMHV_xti * log (TTEMP / model->HSMHV_ktnom)) / pParam->HSMHV_nj) ; jssw = pParam->HSMHV_js0sw * exp ((here->HSMHV_egtnom * here->HSMHV_betatnom - Eg * beta + model->HSMHV_xti * log (TTEMP / model->HSMHV_ktnom)) / model->HSMHV_njsw) ; js2 = pParam->HSMHV_js0 * exp ((here->HSMHV_egtnom * here->HSMHV_betatnom - Eg * beta + model->HSMHV_xti2 * log (TTEMP / model->HSMHV_ktnom)) / pParam->HSMHV_nj) ; jssw2 = pParam->HSMHV_js0sw * exp ((here->HSMHV_egtnom * here->HSMHV_betatnom - Eg * beta + model->HSMHV_xti2 * log (TTEMP / model->HSMHV_ktnom)) / model->HSMHV_njsw) ; #ifdef HSMHVEVAL T0 = - Eg * beta_dT - Eg_dT * beta ; /* Self heating */ T1 = T0 + model->HSMHV_xti / TTEMP ; /* Self heating */ T2 = T0 + model->HSMHV_xti2 / TTEMP ; /* Self heating */ js_dT = js * T1 / pParam->HSMHV_nj; /* Self heating */ jssw_dT = jssw * T1/ model->HSMHV_njsw ; /* Self heating */ js2_dT = js2 * T2 / pParam->HSMHV_nj; /* Self heating */ jssw2_dT = jssw2 * T2 / model->HSMHV_njsw; /* Self heating */ #endif here->HSMHV_isbd = here->HSMHV_ad * js + here->HSMHV_pd * jssw ; here->HSMHV_isbd2 = here->HSMHV_ad * js2 + here->HSMHV_pd * jssw2 ; here->HSMHV_isbs = here->HSMHV_as * js + here->HSMHV_ps * jssw ; here->HSMHV_isbs2 = here->HSMHV_as * js2 + here->HSMHV_ps * jssw2 ; #ifdef HSMHVEVAL isbd_dT = here->HSMHV_ad * js_dT + here->HSMHV_pd * jssw_dT ; /* Self heating */ isbd2_dT = here->HSMHV_ad * js2_dT + here->HSMHV_pd * jssw2_dT ; /* Self heating */ isbs_dT = here->HSMHV_as * js_dT + here->HSMHV_ps * jssw_dT ; /* Self heating */ isbs2_dT = here->HSMHV_as * js2_dT + here->HSMHV_ps * jssw2_dT ; /* Self heating */ #endif T1 = TTEMP / model->HSMHV_ktnom ; T0 = T1 * T1 ; T2 = here->HSMHV_isbd + small ; T3 = here->HSMHV_isbs + small ; #ifdef HSMHVEVAL T1_dT = 1.0 / model->HSMHV_ktnom ; /* Self heating */ T0_dT = 2.0 * T1 * T1_dT ; /* Self heating */ T2_dT = isbd_dT ; /* Self heating */ T3_dT = isbs_dT ; /* Self heating */ #endif here->HSMHV_vbdt = pParam->HSMHV_nj / beta * log ( pParam->HSMHV_vdiffj * T0 / T2 + 1.0 ) ; here->HSMHV_vbst = pParam->HSMHV_nj / beta * log ( pParam->HSMHV_vdiffj * T0 / T3 + 1.0 ) ; here->HSMHV_exptemp = exp (( T1 - 1.0 ) * model->HSMHV_ctemp ) ; #ifdef HSMHVEVAL vbdt_dT = - beta_dT / beta * here->HSMHV_vbdt + pParam->HSMHV_nj / beta * pParam->HSMHV_vdiffj / ( pParam->HSMHV_vdiffj * T0 / T2 + 1.0 ) * ( T0_dT / T2 - T0 / T2 / T2 * T2_dT ) ; /* Self heating */ vbst_dT = - beta_dT / beta * here->HSMHV_vbst + pParam->HSMHV_nj / beta * pParam->HSMHV_vdiffj / ( pParam->HSMHV_vdiffj * T0 / T3 + 1.0 ) * ( T0_dT / T3 - T0 / T3 / T3 * T3_dT ) ; /* Self heating */ #endif here->HSMHV_jd_nvtm_inv = 1.0 / ( pParam->HSMHV_nj / beta ) ; here->HSMHV_jd_expcd = exp (here->HSMHV_vbdt * here->HSMHV_jd_nvtm_inv ) ; here->HSMHV_jd_expcs = exp (here->HSMHV_vbst * here->HSMHV_jd_nvtm_inv ) ; #ifdef HSMHVEVAL exptemp_dT = model->HSMHV_ctemp / model->HSMHV_ktnom * here->HSMHV_exptemp ; /* Self heating */ jd_nvtm_inv_dT = beta_dT / pParam->HSMHV_nj ; /* Self heating */ jd_expcd_dT = here->HSMHV_jd_expcd * ( vbdt_dT * here->HSMHV_jd_nvtm_inv + here->HSMHV_vbdt * jd_nvtm_inv_dT ) ; /* Self heating */ jd_expcs_dT = here->HSMHV_jd_expcs * ( vbst_dT * here->HSMHV_jd_nvtm_inv + here->HSMHV_vbst * jd_nvtm_inv_dT ) ; /* Self heating */ #endif /* costi0 and costi1 for STI transistor model (temperature-dependent part) */ here->HSMHV_costi0 = here->HSMHV_costi00 * sqrt(here->HSMHV_beta_inv) ; here->HSMHV_costi0_p2 = here->HSMHV_costi0 * here->HSMHV_costi0 ; here->HSMHV_costi1 = here->HSMHV_nin * here->HSMHV_nin * here->HSMHV_nsti_p2 ; /* end of HSMHVtemp_eval.h */ tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hisimhv.h0000644000175000017500000000300113546075722022525 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2012 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 1 SUBVERSION : 2 REVISION : 4 ) Model Parameter VERSION : 1.23 FILE : hisimhv.h DATE : 2013.04.30 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ #include "hsmhvdef.h" #include "ngspice/cktdefs.h" #ifndef _HiSIMHV_H #define _HiSIMHV_H /* return value */ #ifndef OK #define HiSIM_OK 0 #define HiSIM_ERROR 1 #else #define HiSIM_OK OK #define HiSIM_ERROR E_PANIC #endif /* MOS type */ #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /* device working mode */ #ifndef CMI_NORMAL_MODE #define HiSIM_NORMAL_MODE 1 #define HiSIM_REVERSE_MODE -1 #else #define HiSIM_NORMAL_MODE CMI_NORMAL_MODE #define HiSIM_REVERSE_MODE CMI_REVERSE_MODE #endif /* others */ #ifndef NULL #define NULL 0 #endif #define HiSIM_FALSE 0 #define HiSIM_TRUE 1 #ifndef return_if_error #define return_if_error(s) { int error = s; if(error) return(error); } #endif extern int HSMHVevaluate ( double ivds, double ivgs, double ivbs, double ivdsi, double ivgsi, double ivbsi, double vbs_jct, double vbd_jct, double vsubs, double deltemp, HSMHVinstance *here, HSMHVmodel *model, CKTcircuit *ckt ) ; #endif /* _HiSIMHV_H */ tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhvcvtest.c0000644000175000017500000002742113546075722023443 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2012 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 1 SUBVERSION : 2 REVISION : 4 ) Model Parameter VERSION : 1.23 FILE : hsmhvcvtest.c DATE : 2013.04.30 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "hsmhvdef.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HSMHVconvTest( GENmodel *inModel, register CKTcircuit *ckt) { register HSMHVmodel *model = (HSMHVmodel*)inModel; register HSMHVinstance *here; double vds=0.0, vgs=0.0, vbs=0.0, vdse=0.0, vgse=0.0, vbse=0.0, vdbd=0.0, vsbs=0.0, deltemp =0.0 ; double delvds=0.0, delvgs=0.0, delvbs=0.0, delvdse=0.0, delvgse=0.0, delvbse=0.0, delvdbd=0.0, delvsbs=0.0, deldeltemp =0.0 ; double Ids=0.0, gds=0.0, gm=0.0, gmbs=0.0, gmT=0.0, gmbs_ext=0.0, gds_ext=0.0, gm_ext=0.0, Isub=0.0, dIsub_dVds=0.0, dIsub_dVgs=0.0, dIsub_dVbs=0.0, dIsub_dT=0.0, Isubs=0.0, dIsubs_dVds=0.0, dIsubs_dVgs=0.0, dIsubs_dVbs=0.0, dIsubs_dT=0.0, Igidl=0.0, dIgidl_dVds=0.0, dIgidl_dVgs=0.0, dIgidl_dVbs=0.0, dIgidl_dT=0.0, Igisl=0.0, dIgisl_dVds=0.0, dIgisl_dVgs=0.0, dIgisl_dVbs=0.0, dIgisl_dT=0.0, Igd=0.0, dIgd_dVd=0.0, dIgd_dVg=0.0, dIgd_dVb=0.0, dIgd_dT=0.0, Igs=0.0, dIgs_dVd=0.0, dIgs_dVg=0.0, dIgs_dVb=0.0, dIgs_dT=0.0, Igb=0.0, dIgb_dVd=0.0, dIgb_dVg=0.0, dIgb_dVb=0.0, dIgb_dT=0.0, Ibd=0.0, Gbd=0.0, Gbdt=0.0, Ibs=0.0, Gbs=0.0, Gbst =0.0 ; double i_dP=0.0, i_gP=0.0, i_sP=0.0, i_db=0.0, i_sb=0.0, i_dP_hat=0.0, i_gP_hat=0.0, i_sP_hat=0.0, i_db_hat=0.0, i_sb_hat =0.0 ; double tol0=0.0, tol1=0.0, tol2=0.0, tol3=0.0, tol4 =0.0 ; /* loop through all the HSMHV device models */ for ( ; model != NULL; model = HSMHVnextModel(model)) { /* loop through all the instances of the model */ for ( here = HSMHVinstances(model); here != NULL ; here = HSMHVnextInstance(here)) { vds = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVdNodePrime) - *(ckt->CKTrhsOld+here->HSMHVsNodePrime)); vgs = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVgNodePrime) - *(ckt->CKTrhsOld+here->HSMHVsNodePrime)); vbs = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVbNodePrime) - *(ckt->CKTrhsOld+here->HSMHVsNodePrime)); vdse = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVdNode) - *(ckt->CKTrhsOld+here->HSMHVsNode)); vgse = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVgNodePrime) - *(ckt->CKTrhsOld+here->HSMHVsNode)); vbse = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVbNodePrime) - *(ckt->CKTrhsOld+here->HSMHVsNode)); vdbd = model->HSMHV_type * (*(ckt->CKTrhsOld + here->HSMHVdbNode) - *(ckt->CKTrhsOld + here->HSMHVdNode)); vsbs = model->HSMHV_type * (*(ckt->CKTrhsOld + here->HSMHVsbNode) - *(ckt->CKTrhsOld + here->HSMHVsNode)); if( here->HSMHVtempNode > 0 ){ deltemp = *(ckt->CKTrhsOld + here->HSMHVtempNode); } else { deltemp = 0.0 ; } delvds = vds - *(ckt->CKTstate0 + here->HSMHVvds) ; delvgs = vgs - *(ckt->CKTstate0 + here->HSMHVvgs) ; delvbs = vbs - *(ckt->CKTstate0 + here->HSMHVvbs) ; delvdse = vdse - *(ckt->CKTstate0 + here->HSMHVvdse) ; delvgse = vgse - *(ckt->CKTstate0 + here->HSMHVvgse) ; delvbse = vbse - *(ckt->CKTstate0 + here->HSMHVvbse) ; delvdbd = vdbd - *(ckt->CKTstate0 + here->HSMHVvdbd) ; delvsbs = vsbs - *(ckt->CKTstate0 + here->HSMHVvsbs) ; if( here->HSMHVtempNode > 0 ){ deldeltemp = deltemp - *(ckt->CKTstate0 + here->HSMHVdeltemp) ; } else { deldeltemp = 0.0 ; } if ( here->HSMHV_mode > 0 ) { /* forward mode */ Ids = here->HSMHV_ids ; gds = here->HSMHV_dIds_dVdsi ; gm = here->HSMHV_dIds_dVgsi ; gmbs = here->HSMHV_dIds_dVbsi ; gmT = (here->HSMHVtempNode > 0) ? here->HSMHV_dIds_dTi : 0.0 ; gmbs_ext = here->HSMHV_dIds_dVbse; gds_ext = here->HSMHV_dIds_dVdse ; gm_ext = here->HSMHV_dIds_dVgse; Isub = here->HSMHV_isub ; dIsub_dVds = here->HSMHV_dIsub_dVdsi ; dIsub_dVgs = here->HSMHV_dIsub_dVgsi ; dIsub_dVbs = here->HSMHV_dIsub_dVbsi ; dIsub_dT = (here->HSMHVtempNode > 0) ? here->HSMHV_dIsub_dTi : 0.0 ; Isubs = 0.0 ; dIsubs_dVds = 0.0 ; dIsubs_dVgs = 0.0 ; dIsubs_dVbs = 0.0 ; dIsubs_dT = 0.0 ; Igidl = here->HSMHV_igidl ; dIgidl_dVds = here->HSMHV_dIgidl_dVdsi ; dIgidl_dVgs = here->HSMHV_dIgidl_dVgsi ; dIgidl_dVbs = here->HSMHV_dIgidl_dVbsi ; dIgidl_dT = (here->HSMHVtempNode > 0) ? here->HSMHV_dIgidl_dTi : 0.0 ; Igisl = here->HSMHV_igisl ; dIgisl_dVds = here->HSMHV_dIgisl_dVdsi ; dIgisl_dVgs = here->HSMHV_dIgisl_dVgsi ; dIgisl_dVbs = here->HSMHV_dIgisl_dVbsi ; dIgisl_dT = (here->HSMHVtempNode > 0) ? here->HSMHV_dIgisl_dTi : 0.0 ; Igd = here->HSMHV_igd ; dIgd_dVd = here->HSMHV_dIgd_dVdsi ; dIgd_dVg = here->HSMHV_dIgd_dVgsi ; dIgd_dVb = here->HSMHV_dIgd_dVbsi ; dIgd_dT = (here->HSMHVtempNode > 0) ? here->HSMHV_dIgd_dTi : 0.0 ; Igs = here->HSMHV_igs ; dIgs_dVd = here->HSMHV_dIgs_dVdsi ; dIgs_dVg = here->HSMHV_dIgs_dVgsi ; dIgs_dVb = here->HSMHV_dIgs_dVbsi ; dIgs_dT = (here->HSMHVtempNode > 0) ? here->HSMHV_dIgs_dTi : 0.0 ; Igb = here->HSMHV_igb ; dIgb_dVd = here->HSMHV_dIgb_dVdsi ; dIgb_dVg = here->HSMHV_dIgb_dVgsi ; dIgb_dVb = here->HSMHV_dIgb_dVbsi ; dIgb_dT = (here->HSMHVtempNode > 0) ? here->HSMHV_dIgb_dTi : 0.0 ; Ibd = here->HSMHV_ibd ; Gbd = here->HSMHV_gbd ; Gbdt = (here->HSMHVtempNode > 0) ? here->HSMHV_gbdT : 0.0 ; Ibs = here->HSMHV_ibs ; Gbs = here->HSMHV_gbs ; Gbst = (here->HSMHVtempNode > 0) ? here->HSMHV_gbsT : 0.0 ; } else { /* reverse mode */ Ids = - here->HSMHV_ids ; gds = + (here->HSMHV_dIds_dVdsi + here->HSMHV_dIds_dVgsi + here->HSMHV_dIds_dVbsi) ; gm = - here->HSMHV_dIds_dVgsi ; gmbs = - here->HSMHV_dIds_dVbsi ; gmT = (here->HSMHVtempNode > 0) ? - here->HSMHV_dIds_dTi : 0.0 ; gds_ext = + (here->HSMHV_dIds_dVdse + here->HSMHV_dIds_dVgse + here->HSMHV_dIds_dVbse) ; gm_ext = - here->HSMHV_dIds_dVgse; gmbs_ext = - here->HSMHV_dIds_dVbse; Isub = 0.0 ; dIsub_dVds = 0.0 ; dIsub_dVgs = 0.0 ; dIsub_dVbs = 0.0 ; dIsub_dT = 0.0 ; Isubs = here->HSMHV_isub ; dIsubs_dVds = - (here->HSMHV_dIsub_dVdsi + here->HSMHV_dIsub_dVgsi + here->HSMHV_dIsub_dVbsi) ; dIsubs_dVgs = here->HSMHV_dIsub_dVgsi ; dIsubs_dVbs = here->HSMHV_dIsub_dVbsi ; dIsubs_dT = (here->HSMHVtempNode > 0) ? here->HSMHV_dIsub_dTi : 0.0 ; Igidl = here->HSMHV_igisl ; dIgidl_dVds = - (here->HSMHV_dIgisl_dVdsi + here->HSMHV_dIgisl_dVgsi + here->HSMHV_dIgisl_dVbsi) ; dIgidl_dVgs = here->HSMHV_dIgisl_dVgsi ; dIgidl_dVbs = here->HSMHV_dIgisl_dVbsi ; dIgidl_dT = (here->HSMHVtempNode > 0) ? here->HSMHV_dIgisl_dTi : 0.0 ; Igisl = here->HSMHV_igidl ; dIgisl_dVds = - (here->HSMHV_dIgidl_dVdsi + here->HSMHV_dIgidl_dVgsi + here->HSMHV_dIgidl_dVbsi) ; dIgisl_dVgs = here->HSMHV_dIgidl_dVgsi ; dIgisl_dVbs = here->HSMHV_dIgidl_dVbsi ; dIgisl_dT = (here->HSMHVtempNode > 0) ? here->HSMHV_dIgidl_dTi : 0.0 ; Igd = here->HSMHV_igd ; dIgd_dVd = - (here->HSMHV_dIgs_dVdsi + here->HSMHV_dIgs_dVgsi + here->HSMHV_dIgs_dVbsi) ; dIgd_dVg = here->HSMHV_dIgs_dVgsi ; dIgd_dVb = here->HSMHV_dIgs_dVbsi ; dIgd_dT = (here->HSMHVtempNode > 0) ? here->HSMHV_dIgs_dTi : 0.0 ; Igs = here->HSMHV_igs ; dIgs_dVd = - (here->HSMHV_dIgd_dVdsi + here->HSMHV_dIgd_dVgsi + here->HSMHV_dIgd_dVbsi) ; dIgs_dVg = here->HSMHV_dIgd_dVgsi ; dIgs_dVb = here->HSMHV_dIgd_dVbsi ; dIgs_dT = (here->HSMHVtempNode > 0) ? here->HSMHV_dIgd_dTi : 0.0 ; Igb = here->HSMHV_igb ; dIgb_dVd = - (here->HSMHV_dIgb_dVdsi + here->HSMHV_dIgb_dVgsi + here->HSMHV_dIgb_dVbsi) ; dIgb_dVg = here->HSMHV_dIgb_dVgsi ; dIgb_dVb = here->HSMHV_dIgb_dVbsi ; dIgb_dT = (here->HSMHVtempNode > 0) ? here->HSMHV_dIgb_dTi : 0.0 ; Ibd = here->HSMHV_ibd ; Gbd = here->HSMHV_gbd ; Gbdt = (here->HSMHVtempNode > 0) ? here->HSMHV_gbdT : 0.0 ; Ibs = here->HSMHV_ibs ; Gbs = here->HSMHV_gbs ; Gbst = (here->HSMHVtempNode > 0) ? here->HSMHV_gbsT : 0.0 ; } /* end of reverse mode */ /* for convergence control, only nonlinear static currents are considered: */ i_dP = Ids + Isub + Igidl - Igd ; i_dP_hat = i_dP + gm *delvgs + gds *delvds + gmbs *delvbs + gmT *deldeltemp + dIsub_dVgs *delvgs + dIsub_dVds *delvds + dIsub_dVbs *delvbs + dIsub_dT *deldeltemp + dIgidl_dVgs*delvgs + dIgidl_dVds*delvds + dIgidl_dVbs*delvbs + dIgidl_dT*deldeltemp -(dIgd_dVg *delvgs + dIgd_dVd *delvds + dIgd_dVb *delvbs + dIgd_dT *deldeltemp) + gm_ext *delvgse + gds_ext *delvdse + gmbs_ext *delvbse ; i_gP = Igd + Igs + Igb ; i_gP_hat = i_gP + dIgd_dVg *delvgs + dIgd_dVd *delvds + dIgd_dVb *delvbs + dIgd_dT *deldeltemp + dIgs_dVg *delvgs + dIgs_dVd *delvds + dIgs_dVb *delvbs + dIgs_dT *deldeltemp + dIgb_dVg *delvgs + dIgb_dVd *delvds + dIgb_dVb *delvbs + dIgb_dT *deldeltemp ; i_sP =-Ids + Isubs + Igisl - Igs ; i_sP_hat = i_sP -(gm *delvgs + gds *delvds + gmbs *delvbs + gmT *deldeltemp) + dIsubs_dVgs*delvgs + dIsubs_dVds*delvds + dIsubs_dVbs*delvbs + dIsubs_dT*deldeltemp + dIgisl_dVgs*delvgs + dIgisl_dVds*delvds + dIgisl_dVbs*delvbs + dIgisl_dT*deldeltemp -(dIgs_dVg *delvgs + dIgs_dVd *delvds + dIgs_dVb *delvbs + dIgs_dT *deldeltemp) -(gm_ext *delvgse + gds_ext *delvdse + gmbs_ext *delvbse) ; i_db = Ibd ; i_db_hat = i_db + Gbd*delvdbd + Gbdt*deldeltemp ; i_sb = Ibs ; i_sb_hat = i_sb + Gbs*delvsbs + Gbst*deldeltemp ; /* to be added: power source for thermal network */ /* * check convergence */ if ( here->HSMHV_off == 0 || !(ckt->CKTmode & MODEINITFIX) ) { tol0 = ckt->CKTreltol * MAX(fabs(i_dP_hat), fabs(i_dP)) + ckt->CKTabstol; tol1 = ckt->CKTreltol * MAX(fabs(i_gP_hat), fabs(i_gP)) + ckt->CKTabstol; tol2 = ckt->CKTreltol * MAX(fabs(i_sP_hat), fabs(i_sP)) + ckt->CKTabstol; tol3 = ckt->CKTreltol * MAX(fabs(i_db_hat), fabs(i_db)) + ckt->CKTabstol; tol4 = ckt->CKTreltol * MAX(fabs(i_sb_hat), fabs(i_sb)) + ckt->CKTabstol; if ( (fabs(i_dP_hat - i_dP) >= tol0) || (fabs(i_gP_hat - i_gP) >= tol1) || (fabs(i_sP_hat - i_sP) >= tol2) || (fabs(i_db_hat - i_db) >= tol3) || (fabs(i_sb_hat - i_sb) >= tol4) ) { ckt->CKTnoncon++; return(OK); } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhvmpar.c0000644000175000017500000020625113546075722023072 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2012 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 1 SUBVERSION : 2 REVISION : 4 ) Model Parameter VERSION : 1.23 FILE : hsmhvmpar.c DATE : 2013.04.30 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ #include "ngspice/ngspice.h" #include "hsmhvdef.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HSMHVmParam( int param, IFvalue *value, GENmodel *inMod) { HSMHVmodel *mod = (HSMHVmodel*)inMod; switch (param) { case HSMHV_MOD_NMOS : if (value->iValue) { mod->HSMHV_type = 1; mod->HSMHV_type_Given = TRUE; } break; case HSMHV_MOD_PMOS : if (value->iValue) { mod->HSMHV_type = - 1; mod->HSMHV_type_Given = TRUE; } break; case HSMHV_MOD_LEVEL: mod->HSMHV_level = value->iValue; mod->HSMHV_level_Given = TRUE; break; case HSMHV_MOD_INFO: mod->HSMHV_info = value->iValue; mod->HSMHV_info_Given = TRUE; break; case HSMHV_MOD_NOISE: mod->HSMHV_noise = value->iValue; mod->HSMHV_noise_Given = TRUE; break; case HSMHV_MOD_VERSION: mod->HSMHV_version = value->sValue; mod->HSMHV_version_Given = TRUE; break; case HSMHV_MOD_SHOW: mod->HSMHV_show = value->iValue; mod->HSMHV_show_Given = TRUE; break; case HSMHV_MOD_CORSRD: mod->HSMHV_corsrd = value->iValue; mod->HSMHV_corsrd_Given = TRUE; break; case HSMHV_MOD_CORG: mod->HSMHV_corg = value->iValue; mod->HSMHV_corg_Given = TRUE; break; case HSMHV_MOD_COIPRV: mod->HSMHV_coiprv = value->iValue; mod->HSMHV_coiprv_Given = TRUE; break; case HSMHV_MOD_COPPRV: mod->HSMHV_copprv = value->iValue; mod->HSMHV_copprv_Given = TRUE; break; case HSMHV_MOD_COADOV: mod->HSMHV_coadov = value->iValue; mod->HSMHV_coadov_Given = TRUE; break; case HSMHV_MOD_COISUB: mod->HSMHV_coisub = value->iValue; mod->HSMHV_coisub_Given = TRUE; break; case HSMHV_MOD_COIIGS: mod->HSMHV_coiigs = value->iValue; mod->HSMHV_coiigs_Given = TRUE; break; case HSMHV_MOD_COGIDL: mod->HSMHV_cogidl = value->iValue; mod->HSMHV_cogidl_Given = TRUE; break; case HSMHV_MOD_COOVLP: mod->HSMHV_coovlp = value->iValue; mod->HSMHV_coovlp_Given = TRUE; break; case HSMHV_MOD_COOVLPS: mod->HSMHV_coovlps = value->iValue; mod->HSMHV_coovlps_Given = TRUE; break; case HSMHV_MOD_COFLICK: mod->HSMHV_coflick = value->iValue; mod->HSMHV_coflick_Given = TRUE; break; case HSMHV_MOD_COISTI: mod->HSMHV_coisti = value->iValue; mod->HSMHV_coisti_Given = TRUE; break; case HSMHV_MOD_CONQS: /* HiSIMHV */ mod->HSMHV_conqs = value->iValue; mod->HSMHV_conqs_Given = TRUE; break; case HSMHV_MOD_CORBNET: mod->HSMHV_corbnet = value->iValue; mod->HSMHV_corbnet_Given = TRUE; break; case HSMHV_MOD_COTHRML: mod->HSMHV_cothrml = value->iValue; mod->HSMHV_cothrml_Given = TRUE; break; case HSMHV_MOD_COIGN: mod->HSMHV_coign = value->iValue; mod->HSMHV_coign_Given = TRUE; break; case HSMHV_MOD_CODFM: mod->HSMHV_codfm = value->iValue; mod->HSMHV_codfm_Given = TRUE; break; case HSMHV_MOD_COQOVSM: mod->HSMHV_coqovsm = value->iValue; mod->HSMHV_coqovsm_Given = TRUE; break; case HSMHV_MOD_COSELFHEAT: /* Self-heating model */ mod->HSMHV_coselfheat = value->iValue; mod->HSMHV_coselfheat_Given = TRUE; break; case HSMHV_MOD_COSUBNODE: mod->HSMHV_cosubnode = value->iValue; mod->HSMHV_cosubnode_Given = TRUE; break; case HSMHV_MOD_COSYM: /* Symmetry model for HV */ mod->HSMHV_cosym = value->iValue; mod->HSMHV_cosym_Given = TRUE; break; case HSMHV_MOD_COTEMP: mod->HSMHV_cotemp = value->iValue; mod->HSMHV_cotemp_Given = TRUE; break; case HSMHV_MOD_COLDRIFT: mod->HSMHV_coldrift = value->iValue; mod->HSMHV_coldrift_Given = TRUE; break; case HSMHV_MOD_VMAX: mod->HSMHV_vmax = value->rValue; mod->HSMHV_vmax_Given = TRUE; break; case HSMHV_MOD_VMAXT1: mod->HSMHV_vmaxt1 = value->rValue; mod->HSMHV_vmaxt1_Given = TRUE; break; case HSMHV_MOD_VMAXT2: mod->HSMHV_vmaxt2 = value->rValue; mod->HSMHV_vmaxt2_Given = TRUE; break; case HSMHV_MOD_BGTMP1: mod->HSMHV_bgtmp1 = value->rValue; mod->HSMHV_bgtmp1_Given = TRUE; break; case HSMHV_MOD_BGTMP2: mod->HSMHV_bgtmp2 = value->rValue; mod->HSMHV_bgtmp2_Given = TRUE; break; case HSMHV_MOD_EG0: mod->HSMHV_eg0 = value->rValue; mod->HSMHV_eg0_Given = TRUE; break; case HSMHV_MOD_TOX: mod->HSMHV_tox = value->rValue; mod->HSMHV_tox_Given = TRUE; break; case HSMHV_MOD_XLD: mod->HSMHV_xld = value->rValue; mod->HSMHV_xld_Given = TRUE; break; case HSMHV_MOD_LOVER: mod->HSMHV_lover = value->rValue; mod->HSMHV_lover_Given = TRUE; break; case HSMHV_MOD_LOVERS: mod->HSMHV_lovers = value->rValue; mod->HSMHV_lovers_Given = TRUE; break; case HSMHV_MOD_RDOV11: mod->HSMHV_rdov11 = value->rValue; mod->HSMHV_rdov11_Given = TRUE; break; case HSMHV_MOD_RDOV12: mod->HSMHV_rdov12 = value->rValue; mod->HSMHV_rdov12_Given = TRUE; break; case HSMHV_MOD_RDOV13: mod->HSMHV_rdov13 = value->rValue; mod->HSMHV_rdov13_Given = TRUE; break; case HSMHV_MOD_RDSLP1: mod->HSMHV_rdslp1 = value->rValue; mod->HSMHV_rdslp1_Given = TRUE; break; case HSMHV_MOD_RDICT1: mod->HSMHV_rdict1= value->rValue; mod->HSMHV_rdict1_Given = TRUE; break; case HSMHV_MOD_RDSLP2: mod->HSMHV_rdslp2 = value->rValue; mod->HSMHV_rdslp2_Given = TRUE; break; case HSMHV_MOD_RDICT2: mod->HSMHV_rdict2 = value->rValue; mod->HSMHV_rdict2_Given = TRUE; break; case HSMHV_MOD_LOVERLD: mod->HSMHV_loverld = value->rValue; mod->HSMHV_loverld_Given = TRUE; break; case HSMHV_MOD_LDRIFT1: mod->HSMHV_ldrift1 = value->rValue; mod->HSMHV_ldrift1_Given = TRUE; break; case HSMHV_MOD_LDRIFT2: mod->HSMHV_ldrift2 = value->rValue; mod->HSMHV_ldrift2_Given = TRUE; break; case HSMHV_MOD_LDRIFT1S: mod->HSMHV_ldrift1s = value->rValue; mod->HSMHV_ldrift1s_Given = TRUE; break; case HSMHV_MOD_LDRIFT2S: mod->HSMHV_ldrift2s = value->rValue; mod->HSMHV_ldrift2s_Given = TRUE; break; case HSMHV_MOD_SUBLD1: mod->HSMHV_subld1 = value->rValue; mod->HSMHV_subld1_Given = TRUE; break; case HSMHV_MOD_SUBLD2: mod->HSMHV_subld2 = value->rValue; mod->HSMHV_subld2_Given = TRUE; break; case HSMHV_MOD_DDLTMAX: /* Vdseff */ mod->HSMHV_ddltmax = value->rValue; mod->HSMHV_ddltmax_Given = TRUE; break; case HSMHV_MOD_DDLTSLP: /* Vdseff */ mod->HSMHV_ddltslp = value->rValue; mod->HSMHV_ddltslp_Given = TRUE; break; case HSMHV_MOD_DDLTICT: /* Vdseff */ mod->HSMHV_ddltict = value->rValue; mod->HSMHV_ddltict_Given = TRUE; break; case HSMHV_MOD_VFBOVER: mod->HSMHV_vfbover = value->rValue; mod->HSMHV_vfbover_Given = TRUE; break; case HSMHV_MOD_NOVER: mod->HSMHV_nover = value->rValue; mod->HSMHV_nover_Given = TRUE; break; case HSMHV_MOD_NOVERS: mod->HSMHV_novers = value->rValue; mod->HSMHV_novers_Given = TRUE; break; case HSMHV_MOD_XWD: mod->HSMHV_xwd = value->rValue; mod->HSMHV_xwd_Given = TRUE; break; case HSMHV_MOD_XWDC: mod->HSMHV_xwdc = value->rValue; mod->HSMHV_xwdc_Given = TRUE; break; case HSMHV_MOD_XL: mod->HSMHV_xl = value->rValue; mod->HSMHV_xl_Given = TRUE; break; case HSMHV_MOD_XW: mod->HSMHV_xw = value->rValue; mod->HSMHV_xw_Given = TRUE; break; case HSMHV_MOD_SAREF: mod->HSMHV_saref = value->rValue; mod->HSMHV_saref_Given = TRUE; break; case HSMHV_MOD_SBREF: mod->HSMHV_sbref = value->rValue; mod->HSMHV_sbref_Given = TRUE; break; case HSMHV_MOD_LL: mod->HSMHV_ll = value->rValue; mod->HSMHV_ll_Given = TRUE; break; case HSMHV_MOD_LLD: mod->HSMHV_lld = value->rValue; mod->HSMHV_lld_Given = TRUE; break; case HSMHV_MOD_LLN: mod->HSMHV_lln = value->rValue; mod->HSMHV_lln_Given = TRUE; break; case HSMHV_MOD_WL: mod->HSMHV_wl = value->rValue; mod->HSMHV_wl_Given = TRUE; break; case HSMHV_MOD_WL1: mod->HSMHV_wl1 = value->rValue; mod->HSMHV_wl1_Given = TRUE; break; case HSMHV_MOD_WL1P: mod->HSMHV_wl1p = value->rValue; mod->HSMHV_wl1p_Given = TRUE; break; case HSMHV_MOD_WL2: mod->HSMHV_wl2 = value->rValue; mod->HSMHV_wl2_Given = TRUE; break; case HSMHV_MOD_WL2P: mod->HSMHV_wl2p = value->rValue; mod->HSMHV_wl2p_Given = TRUE; break; case HSMHV_MOD_WLD: mod->HSMHV_wld = value->rValue; mod->HSMHV_wld_Given = TRUE; break; case HSMHV_MOD_WLN: mod->HSMHV_wln = value->rValue; mod->HSMHV_wln_Given = TRUE; break; case HSMHV_MOD_XQY: mod->HSMHV_xqy = value->rValue; mod->HSMHV_xqy_Given = TRUE; break; case HSMHV_MOD_XQY1: mod->HSMHV_xqy1 = value->rValue; mod->HSMHV_xqy1_Given = TRUE; break; case HSMHV_MOD_XQY2: mod->HSMHV_xqy2 = value->rValue; mod->HSMHV_xqy2_Given = TRUE; break; case HSMHV_MOD_RS: mod->HSMHV_rs = value->rValue; mod->HSMHV_rs_Given = TRUE; break; case HSMHV_MOD_RD: mod->HSMHV_rd = value->rValue; mod->HSMHV_rd_Given = TRUE; break; case HSMHV_MOD_RSH: mod->HSMHV_rsh = value->rValue; mod->HSMHV_rsh_Given = TRUE; break; case HSMHV_MOD_RSHG: mod->HSMHV_rshg = value->rValue; mod->HSMHV_rshg_Given = TRUE; break; case HSMHV_MOD_VFBC: mod->HSMHV_vfbc = value->rValue; mod->HSMHV_vfbc_Given = TRUE; break; case HSMHV_MOD_VBI: mod->HSMHV_vbi = value->rValue; mod->HSMHV_vbi_Given = TRUE; break; case HSMHV_MOD_NSUBC: mod->HSMHV_nsubc = value->rValue; mod->HSMHV_nsubc_Given = TRUE; break; case HSMHV_MOD_PARL2: mod->HSMHV_parl2 = value->rValue; mod->HSMHV_parl2_Given = TRUE; break; case HSMHV_MOD_LP: mod->HSMHV_lp = value->rValue; mod->HSMHV_lp_Given = TRUE; break; case HSMHV_MOD_NSUBP: mod->HSMHV_nsubp = value->rValue; mod->HSMHV_nsubp_Given = TRUE; break; case HSMHV_MOD_NSUBP0: mod->HSMHV_nsubp0 = value->rValue; mod->HSMHV_nsubp0_Given = TRUE; break; case HSMHV_MOD_NSUBWP: mod->HSMHV_nsubwp = value->rValue; mod->HSMHV_nsubwp_Given = TRUE; break; case HSMHV_MOD_SCP1: mod->HSMHV_scp1 = value->rValue; mod->HSMHV_scp1_Given = TRUE; break; case HSMHV_MOD_SCP2: mod->HSMHV_scp2 = value->rValue; mod->HSMHV_scp2_Given = TRUE; break; case HSMHV_MOD_SCP3: mod->HSMHV_scp3 = value->rValue; mod->HSMHV_scp3_Given = TRUE; break; case HSMHV_MOD_SC1: mod->HSMHV_sc1 = value->rValue; mod->HSMHV_sc1_Given = TRUE; break; case HSMHV_MOD_SC2: mod->HSMHV_sc2 = value->rValue; mod->HSMHV_sc2_Given = TRUE; break; case HSMHV_MOD_SC3: mod->HSMHV_sc3 = value->rValue; mod->HSMHV_sc3_Given = TRUE; break; case HSMHV_MOD_SC4: mod->HSMHV_sc4 = value->rValue; mod->HSMHV_sc4_Given = TRUE; break; case HSMHV_MOD_PGD1: mod->HSMHV_pgd1 = value->rValue; mod->HSMHV_pgd1_Given = TRUE; break; case HSMHV_MOD_PGD2: mod->HSMHV_pgd2 = value->rValue; mod->HSMHV_pgd2_Given = TRUE; break; case HSMHV_MOD_PGD3: mod->HSMHV_pgd3 = value->rValue; mod->HSMHV_pgd3_Given = TRUE; break; case HSMHV_MOD_PGD4: mod->HSMHV_pgd4 = value->rValue; mod->HSMHV_pgd4_Given = TRUE; break; case HSMHV_MOD_NDEP: mod->HSMHV_ndep = value->rValue; mod->HSMHV_ndep_Given = TRUE; break; case HSMHV_MOD_NDEPL: mod->HSMHV_ndepl = value->rValue; mod->HSMHV_ndepl_Given = TRUE; break; case HSMHV_MOD_NDEPLP: mod->HSMHV_ndeplp = value->rValue; mod->HSMHV_ndeplp_Given = TRUE; break; case HSMHV_MOD_NINV: mod->HSMHV_ninv = value->rValue; mod->HSMHV_ninv_Given = TRUE; break; case HSMHV_MOD_MUECB0: mod->HSMHV_muecb0 = value->rValue; mod->HSMHV_muecb0_Given = TRUE; break; case HSMHV_MOD_MUECB1: mod->HSMHV_muecb1 = value->rValue; mod->HSMHV_muecb1_Given = TRUE; break; case HSMHV_MOD_MUEPH1: mod->HSMHV_mueph1 = value->rValue; mod->HSMHV_mueph1_Given = TRUE; break; case HSMHV_MOD_MUEPH0: mod->HSMHV_mueph0 = value->rValue; mod->HSMHV_mueph0_Given = TRUE; break; case HSMHV_MOD_MUEPHW: mod->HSMHV_muephw = value->rValue; mod->HSMHV_muephw_Given = TRUE; break; case HSMHV_MOD_MUEPWP: mod->HSMHV_muepwp = value->rValue; mod->HSMHV_muepwp_Given = TRUE; break; case HSMHV_MOD_MUEPHL: mod->HSMHV_muephl = value->rValue; mod->HSMHV_muephl_Given = TRUE; break; case HSMHV_MOD_MUEPLP: mod->HSMHV_mueplp = value->rValue; mod->HSMHV_mueplp_Given = TRUE; break; case HSMHV_MOD_MUEPHS: mod->HSMHV_muephs = value->rValue; mod->HSMHV_muephs_Given = TRUE; break; case HSMHV_MOD_MUEPSP: mod->HSMHV_muepsp = value->rValue; mod->HSMHV_muepsp_Given = TRUE; break; case HSMHV_MOD_VTMP: mod->HSMHV_vtmp = value->rValue; mod->HSMHV_vtmp_Given = TRUE; break; case HSMHV_MOD_WVTH0: mod->HSMHV_wvth0 = value->rValue; mod->HSMHV_wvth0_Given = TRUE; break; case HSMHV_MOD_MUESR1: mod->HSMHV_muesr1 = value->rValue; mod->HSMHV_muesr1_Given = TRUE; break; case HSMHV_MOD_MUESR0: mod->HSMHV_muesr0 = value->rValue; mod->HSMHV_muesr0_Given = TRUE; break; case HSMHV_MOD_MUESRL: mod->HSMHV_muesrl = value->rValue; mod->HSMHV_muesrl_Given = TRUE; break; case HSMHV_MOD_MUESLP: mod->HSMHV_mueslp = value->rValue; mod->HSMHV_mueslp_Given = TRUE; break; case HSMHV_MOD_MUESRW: mod->HSMHV_muesrw = value->rValue; mod->HSMHV_muesrw_Given = TRUE; break; case HSMHV_MOD_MUESWP: mod->HSMHV_mueswp = value->rValue; mod->HSMHV_mueswp_Given = TRUE; break; case HSMHV_MOD_BB: mod->HSMHV_bb = value->rValue; mod->HSMHV_bb_Given = TRUE; break; case HSMHV_MOD_SUB1: mod->HSMHV_sub1 = value->rValue; mod->HSMHV_sub1_Given = TRUE; break; case HSMHV_MOD_SUB2: mod->HSMHV_sub2 = value->rValue; mod->HSMHV_sub2_Given = TRUE; break; case HSMHV_MOD_SVGS: mod->HSMHV_svgs = value->rValue; mod->HSMHV_svgs_Given = TRUE; break; case HSMHV_MOD_SVBS: mod->HSMHV_svbs = value->rValue; mod->HSMHV_svbs_Given = TRUE; break; case HSMHV_MOD_SVBSL: mod->HSMHV_svbsl = value->rValue; mod->HSMHV_svbsl_Given = TRUE; break; case HSMHV_MOD_SVDS: mod->HSMHV_svds = value->rValue; mod->HSMHV_svds_Given = TRUE; break; case HSMHV_MOD_SLG: mod->HSMHV_slg = value->rValue; mod->HSMHV_slg_Given = TRUE; break; case HSMHV_MOD_SUB1L: mod->HSMHV_sub1l = value->rValue; mod->HSMHV_sub1l_Given = TRUE; break; case HSMHV_MOD_SUB2L: mod->HSMHV_sub2l = value->rValue; mod->HSMHV_sub2l_Given = TRUE; break; case HSMHV_MOD_FN1: mod->HSMHV_fn1 = value->rValue; mod->HSMHV_fn1_Given = TRUE; break; case HSMHV_MOD_FN2: mod->HSMHV_fn2 = value->rValue; mod->HSMHV_fn2_Given = TRUE; break; case HSMHV_MOD_FN3: mod->HSMHV_fn3 = value->rValue; mod->HSMHV_fn3_Given = TRUE; break; case HSMHV_MOD_FVBS: mod->HSMHV_fvbs = value->rValue; mod->HSMHV_fvbs_Given = TRUE; break; case HSMHV_MOD_SVGSL: mod->HSMHV_svgsl = value->rValue; mod->HSMHV_svgsl_Given = TRUE; break; case HSMHV_MOD_SVGSLP: mod->HSMHV_svgslp = value->rValue; mod->HSMHV_svgslp_Given = TRUE; break; case HSMHV_MOD_SVGSWP: mod->HSMHV_svgswp = value->rValue; mod->HSMHV_svgswp_Given = TRUE; break; case HSMHV_MOD_SVGSW: mod->HSMHV_svgsw = value->rValue; mod->HSMHV_svgsw_Given = TRUE; break; case HSMHV_MOD_SVBSLP: mod->HSMHV_svbslp = value->rValue; mod->HSMHV_svbslp_Given = TRUE; break; case HSMHV_MOD_SLGL: mod->HSMHV_slgl = value->rValue; mod->HSMHV_slgl_Given = TRUE; break; case HSMHV_MOD_SLGLP: mod->HSMHV_slglp = value->rValue; mod->HSMHV_slglp_Given = TRUE; break; case HSMHV_MOD_SUB1LP: mod->HSMHV_sub1lp = value->rValue; mod->HSMHV_sub1lp_Given = TRUE; break; case HSMHV_MOD_NSTI: mod->HSMHV_nsti = value->rValue; mod->HSMHV_nsti_Given = TRUE; break; case HSMHV_MOD_WSTI: mod->HSMHV_wsti = value->rValue; mod->HSMHV_wsti_Given = TRUE; break; case HSMHV_MOD_WSTIL: mod->HSMHV_wstil = value->rValue; mod->HSMHV_wstil_Given = TRUE; break; case HSMHV_MOD_WSTILP: mod->HSMHV_wstilp = value->rValue; mod->HSMHV_wstilp_Given = TRUE; break; case HSMHV_MOD_WSTIW: mod->HSMHV_wstiw = value->rValue; mod->HSMHV_wstiw_Given = TRUE; break; case HSMHV_MOD_WSTIWP: mod->HSMHV_wstiwp = value->rValue; mod->HSMHV_wstiwp_Given = TRUE; break; case HSMHV_MOD_SCSTI1: mod->HSMHV_scsti1 = value->rValue; mod->HSMHV_scsti1_Given = TRUE; break; case HSMHV_MOD_SCSTI2: mod->HSMHV_scsti2 = value->rValue; mod->HSMHV_scsti2_Given = TRUE; break; case HSMHV_MOD_VTHSTI: mod->HSMHV_vthsti = value->rValue; mod->HSMHV_vthsti_Given = TRUE; break; case HSMHV_MOD_VDSTI: mod->HSMHV_vdsti = value->rValue; mod->HSMHV_vdsti_Given = TRUE; break; case HSMHV_MOD_MUESTI1: mod->HSMHV_muesti1 = value->rValue; mod->HSMHV_muesti1_Given = TRUE; break; case HSMHV_MOD_MUESTI2: mod->HSMHV_muesti2 = value->rValue; mod->HSMHV_muesti2_Given = TRUE; break; case HSMHV_MOD_MUESTI3: mod->HSMHV_muesti3 = value->rValue; mod->HSMHV_muesti3_Given = TRUE; break; case HSMHV_MOD_NSUBPSTI1: mod->HSMHV_nsubpsti1 = value->rValue; mod->HSMHV_nsubpsti1_Given = TRUE; break; case HSMHV_MOD_NSUBPSTI2: mod->HSMHV_nsubpsti2 = value->rValue; mod->HSMHV_nsubpsti2_Given = TRUE; break; case HSMHV_MOD_NSUBPSTI3: mod->HSMHV_nsubpsti3 = value->rValue; mod->HSMHV_nsubpsti3_Given = TRUE; break; case HSMHV_MOD_LPEXT: mod->HSMHV_lpext = value->rValue; mod->HSMHV_lpext_Given = TRUE; break; case HSMHV_MOD_NPEXT: mod->HSMHV_npext = value->rValue; mod->HSMHV_npext_Given = TRUE; break; case HSMHV_MOD_SCP22: mod->HSMHV_scp22 = value->rValue; mod->HSMHV_scp22_Given = TRUE; break; case HSMHV_MOD_SCP21: mod->HSMHV_scp21 = value->rValue; mod->HSMHV_scp21_Given = TRUE; break; case HSMHV_MOD_BS1: mod->HSMHV_bs1 = value->rValue; mod->HSMHV_bs1_Given = TRUE; break; case HSMHV_MOD_BS2: mod->HSMHV_bs2 = value->rValue; mod->HSMHV_bs2_Given = TRUE; break; case HSMHV_MOD_CGSO: mod->HSMHV_cgso = value->rValue; mod->HSMHV_cgso_Given = TRUE; break; case HSMHV_MOD_CGDO: mod->HSMHV_cgdo = value->rValue; mod->HSMHV_cgdo_Given = TRUE; break; case HSMHV_MOD_CGBO: mod->HSMHV_cgbo = value->rValue; mod->HSMHV_cgbo_Given = TRUE; break; case HSMHV_MOD_TPOLY: mod->HSMHV_tpoly = value->rValue; mod->HSMHV_tpoly_Given = TRUE; break; case HSMHV_MOD_JS0: mod->HSMHV_js0 = value->rValue; mod->HSMHV_js0_Given = TRUE; break; case HSMHV_MOD_JS0SW: mod->HSMHV_js0sw = value->rValue; mod->HSMHV_js0sw_Given = TRUE; break; case HSMHV_MOD_NJ: mod->HSMHV_nj = value->rValue; mod->HSMHV_nj_Given = TRUE; break; case HSMHV_MOD_NJSW: mod->HSMHV_njsw = value->rValue; mod->HSMHV_njsw_Given = TRUE; break; case HSMHV_MOD_XTI: mod->HSMHV_xti = value->rValue; mod->HSMHV_xti_Given = TRUE; break; case HSMHV_MOD_CJ: mod->HSMHV_cj = value->rValue; mod->HSMHV_cj_Given = TRUE; break; case HSMHV_MOD_CJSW: mod->HSMHV_cjsw = value->rValue; mod->HSMHV_cjsw_Given = TRUE; break; case HSMHV_MOD_CJSWG: mod->HSMHV_cjswg = value->rValue; mod->HSMHV_cjswg_Given = TRUE; break; case HSMHV_MOD_MJ: mod->HSMHV_mj = value->rValue; mod->HSMHV_mj_Given = TRUE; break; case HSMHV_MOD_MJSW: mod->HSMHV_mjsw = value->rValue; mod->HSMHV_mjsw_Given = TRUE; break; case HSMHV_MOD_MJSWG: mod->HSMHV_mjswg = value->rValue; mod->HSMHV_mjswg_Given = TRUE; break; case HSMHV_MOD_PB: mod->HSMHV_pb = value->rValue; mod->HSMHV_pb_Given = TRUE; break; case HSMHV_MOD_PBSW: mod->HSMHV_pbsw = value->rValue; mod->HSMHV_pbsw_Given = TRUE; break; case HSMHV_MOD_PBSWG: mod->HSMHV_pbswg = value->rValue; mod->HSMHV_pbswg_Given = TRUE; break; case HSMHV_MOD_XTI2: mod->HSMHV_xti2 = value->rValue; mod->HSMHV_xti2_Given = TRUE; break; case HSMHV_MOD_CISB: mod->HSMHV_cisb = value->rValue; mod->HSMHV_cisb_Given = TRUE; break; case HSMHV_MOD_CVB: mod->HSMHV_cvb = value->rValue; mod->HSMHV_cvb_Given = TRUE; break; case HSMHV_MOD_CTEMP: mod->HSMHV_ctemp = value->rValue; mod->HSMHV_ctemp_Given = TRUE; break; case HSMHV_MOD_CISBK: mod->HSMHV_cisbk = value->rValue; mod->HSMHV_cisbk_Given = TRUE; break; case HSMHV_MOD_CVBK: mod->HSMHV_cvbk = value->rValue; mod->HSMHV_cvbk_Given = TRUE; break; case HSMHV_MOD_DIVX: mod->HSMHV_divx = value->rValue; mod->HSMHV_divx_Given = TRUE; break; case HSMHV_MOD_CLM1: mod->HSMHV_clm1 = value->rValue; mod->HSMHV_clm1_Given = TRUE; break; case HSMHV_MOD_CLM2: mod->HSMHV_clm2 = value->rValue; mod->HSMHV_clm2_Given = TRUE; break; case HSMHV_MOD_CLM3: mod->HSMHV_clm3 = value->rValue; mod->HSMHV_clm3_Given = TRUE; break; case HSMHV_MOD_CLM5: mod->HSMHV_clm5 = value->rValue; mod->HSMHV_clm5_Given = TRUE; break; case HSMHV_MOD_CLM6: mod->HSMHV_clm6 = value->rValue; mod->HSMHV_clm6_Given = TRUE; break; case HSMHV_MOD_MUETMP: mod->HSMHV_muetmp = value->rValue; mod->HSMHV_muetmp_Given = TRUE; break; case HSMHV_MOD_VOVER: mod->HSMHV_vover = value->rValue; mod->HSMHV_vover_Given = TRUE; break; case HSMHV_MOD_VOVERP: mod->HSMHV_voverp = value->rValue; mod->HSMHV_voverp_Given = TRUE; break; case HSMHV_MOD_VOVERS: mod->HSMHV_vovers = value->rValue; mod->HSMHV_vovers_Given = TRUE; break; case HSMHV_MOD_VOVERSP: mod->HSMHV_voversp = value->rValue; mod->HSMHV_voversp_Given = TRUE; break; case HSMHV_MOD_WFC: mod->HSMHV_wfc = value->rValue; mod->HSMHV_wfc_Given = TRUE; break; case HSMHV_MOD_NSUBCW: mod->HSMHV_nsubcw = value->rValue; mod->HSMHV_nsubcw_Given = TRUE; break; case HSMHV_MOD_NSUBCWP: mod->HSMHV_nsubcwp = value->rValue; mod->HSMHV_nsubcwp_Given = TRUE; break; case HSMHV_MOD_QME1: mod->HSMHV_qme1 = value->rValue; mod->HSMHV_qme1_Given = TRUE; break; case HSMHV_MOD_QME2: mod->HSMHV_qme2 = value->rValue; mod->HSMHV_qme2_Given = TRUE; break; case HSMHV_MOD_QME3: mod->HSMHV_qme3 = value->rValue; mod->HSMHV_qme3_Given = TRUE; break; case HSMHV_MOD_GIDL1: mod->HSMHV_gidl1 = value->rValue; mod->HSMHV_gidl1_Given = TRUE; break; case HSMHV_MOD_GIDL2: mod->HSMHV_gidl2 = value->rValue; mod->HSMHV_gidl2_Given = TRUE; break; case HSMHV_MOD_GIDL3: mod->HSMHV_gidl3 = value->rValue; mod->HSMHV_gidl3_Given = TRUE; break; case HSMHV_MOD_GIDL4: mod->HSMHV_gidl4 = value->rValue; mod->HSMHV_gidl4_Given = TRUE; break; case HSMHV_MOD_GIDL5: mod->HSMHV_gidl5 = value->rValue; mod->HSMHV_gidl5_Given = TRUE; break; case HSMHV_MOD_GLEAK1: mod->HSMHV_gleak1 = value->rValue; mod->HSMHV_gleak1_Given = TRUE; break; case HSMHV_MOD_GLEAK2: mod->HSMHV_gleak2 = value->rValue; mod->HSMHV_gleak2_Given = TRUE; break; case HSMHV_MOD_GLEAK3: mod->HSMHV_gleak3 = value->rValue; mod->HSMHV_gleak3_Given = TRUE; break; case HSMHV_MOD_GLEAK4: mod->HSMHV_gleak4 = value->rValue; mod->HSMHV_gleak4_Given = TRUE; break; case HSMHV_MOD_GLEAK5: mod->HSMHV_gleak5 = value->rValue; mod->HSMHV_gleak5_Given = TRUE; break; case HSMHV_MOD_GLEAK6: mod->HSMHV_gleak6 = value->rValue; mod->HSMHV_gleak6_Given = TRUE; break; case HSMHV_MOD_GLEAK7: mod->HSMHV_gleak7 = value->rValue; mod->HSMHV_gleak7_Given = TRUE; break; case HSMHV_MOD_GLPART1: mod->HSMHV_glpart1 = value->rValue; mod->HSMHV_glpart1_Given = TRUE; break; case HSMHV_MOD_GLKSD1: mod->HSMHV_glksd1 = value->rValue; mod->HSMHV_glksd1_Given = TRUE; break; case HSMHV_MOD_GLKSD2: mod->HSMHV_glksd2 = value->rValue; mod->HSMHV_glksd2_Given = TRUE; break; case HSMHV_MOD_GLKSD3: mod->HSMHV_glksd3 = value->rValue; mod->HSMHV_glksd3_Given = TRUE; break; case HSMHV_MOD_GLKB1: mod->HSMHV_glkb1 = value->rValue; mod->HSMHV_glkb1_Given = TRUE; break; case HSMHV_MOD_GLKB2: mod->HSMHV_glkb2 = value->rValue; mod->HSMHV_glkb2_Given = TRUE; break; case HSMHV_MOD_GLKB3: mod->HSMHV_glkb3 = value->rValue; mod->HSMHV_glkb3_Given = TRUE; break; case HSMHV_MOD_EGIG: mod->HSMHV_egig = value->rValue; mod->HSMHV_egig_Given = TRUE; break; case HSMHV_MOD_IGTEMP2: mod->HSMHV_igtemp2 = value->rValue; mod->HSMHV_igtemp2_Given = TRUE; break; case HSMHV_MOD_IGTEMP3: mod->HSMHV_igtemp3 = value->rValue; mod->HSMHV_igtemp3_Given = TRUE; break; case HSMHV_MOD_VZADD0: mod->HSMHV_vzadd0 = value->rValue; mod->HSMHV_vzadd0_Given = TRUE; break; case HSMHV_MOD_PZADD0: mod->HSMHV_pzadd0 = value->rValue; mod->HSMHV_pzadd0_Given = TRUE; break; case HSMHV_MOD_NFTRP: mod->HSMHV_nftrp = value->rValue; mod->HSMHV_nftrp_Given = TRUE; break; case HSMHV_MOD_NFALP: mod->HSMHV_nfalp = value->rValue; mod->HSMHV_nfalp_Given = TRUE; break; case HSMHV_MOD_CIT: mod->HSMHV_cit = value->rValue; mod->HSMHV_cit_Given = TRUE; break; case HSMHV_MOD_FALPH: mod->HSMHV_falph = value->rValue; mod->HSMHV_falph_Given = TRUE; break; case HSMHV_MOD_KAPPA: mod->HSMHV_kappa = value->rValue; mod->HSMHV_kappa_Given = TRUE; break; case HSMHV_MOD_PTHROU: mod->HSMHV_pthrou = value->rValue; mod->HSMHV_pthrou_Given = TRUE; break; case HSMHV_MOD_VDIFFJ: mod->HSMHV_vdiffj = value->rValue; mod->HSMHV_vdiffj_Given = TRUE; break; case HSMHV_MOD_DLY1: mod->HSMHV_dly1 = value->rValue; mod->HSMHV_dly1_Given = TRUE; break; case HSMHV_MOD_DLY2: mod->HSMHV_dly2 = value->rValue; mod->HSMHV_dly2_Given = TRUE; break; case HSMHV_MOD_DLY3: mod->HSMHV_dly3 = value->rValue; mod->HSMHV_dly3_Given = TRUE; break; case HSMHV_MOD_TNOM: mod->HSMHV_tnom = value->rValue; mod->HSMHV_tnom_Given = TRUE; break; case HSMHV_MOD_OVSLP: mod->HSMHV_ovslp = value->rValue; mod->HSMHV_ovslp_Given = TRUE; break; case HSMHV_MOD_OVMAG: mod->HSMHV_ovmag = value->rValue; mod->HSMHV_ovmag_Given = TRUE; break; case HSMHV_MOD_GBMIN: mod->HSMHV_gbmin = value->rValue; mod->HSMHV_gbmin_Given = TRUE; break; case HSMHV_MOD_RBPB: mod->HSMHV_rbpb = value->rValue; mod->HSMHV_rbpb_Given = TRUE; break; case HSMHV_MOD_RBPD: mod->HSMHV_rbpd = value->rValue; mod->HSMHV_rbpd_Given = TRUE; break; case HSMHV_MOD_RBPS: mod->HSMHV_rbps = value->rValue; mod->HSMHV_rbps_Given = TRUE; break; case HSMHV_MOD_RBDB: mod->HSMHV_rbdb = value->rValue; mod->HSMHV_rbdb_Given = TRUE; break; case HSMHV_MOD_RBSB: mod->HSMHV_rbsb = value->rValue; mod->HSMHV_rbsb_Given = TRUE; break; case HSMHV_MOD_IBPC1: mod->HSMHV_ibpc1 = value->rValue; mod->HSMHV_ibpc1_Given = TRUE; break; case HSMHV_MOD_IBPC2: mod->HSMHV_ibpc2 = value->rValue; mod->HSMHV_ibpc2_Given = TRUE; break; case HSMHV_MOD_MPHDFM: mod->HSMHV_mphdfm = value->rValue; mod->HSMHV_mphdfm_Given = TRUE; break; case HSMHV_MOD_RDVG11: mod->HSMHV_rdvg11 = value->rValue; mod->HSMHV_rdvg11_Given = TRUE; break; case HSMHV_MOD_RDVG12: mod->HSMHV_rdvg12 = value->rValue; mod->HSMHV_rdvg12_Given = TRUE; break; case HSMHV_MOD_RD20: mod->HSMHV_rd20 = value->rValue; mod->HSMHV_rd20_Given = TRUE; break; case HSMHV_MOD_QOVSM: mod->HSMHV_qovsm = value->rValue; mod->HSMHV_qovsm_Given = TRUE; break; case HSMHV_MOD_LDRIFT: mod->HSMHV_ldrift = value->rValue; mod->HSMHV_ldrift_Given = TRUE; break; case HSMHV_MOD_RD21: mod->HSMHV_rd21 = value->rValue; mod->HSMHV_rd21_Given = TRUE; break; case HSMHV_MOD_RD22: mod->HSMHV_rd22 = value->rValue; mod->HSMHV_rd22_Given = TRUE; break; case HSMHV_MOD_RD22D: mod->HSMHV_rd22d = value->rValue; mod->HSMHV_rd22d_Given = TRUE; break; case HSMHV_MOD_RD23: mod->HSMHV_rd23 = value->rValue; mod->HSMHV_rd23_Given = TRUE; break; case HSMHV_MOD_RD24: mod->HSMHV_rd24 = value->rValue; mod->HSMHV_rd24_Given = TRUE; break; case HSMHV_MOD_RD25: mod->HSMHV_rd25 = value->rValue; mod->HSMHV_rd25_Given = TRUE; break; case HSMHV_MOD_RD26: mod->HSMHV_rd26 = value->rValue; mod->HSMHV_rd26_Given = TRUE; break; case HSMHV_MOD_RDVDL: mod->HSMHV_rdvdl = value->rValue; mod->HSMHV_rdvdl_Given = TRUE; break; case HSMHV_MOD_RDVDLP: mod->HSMHV_rdvdlp = value->rValue; mod->HSMHV_rdvdlp_Given = TRUE; break; case HSMHV_MOD_RDVDS: mod->HSMHV_rdvds = value->rValue; mod->HSMHV_rdvds_Given = TRUE; break; case HSMHV_MOD_RDVDSP: mod->HSMHV_rdvdsp = value->rValue; mod->HSMHV_rdvdsp_Given = TRUE; break; case HSMHV_MOD_RD23L: mod->HSMHV_rd23l = value->rValue; mod->HSMHV_rd23l_Given = TRUE; break; case HSMHV_MOD_RD23LP: mod->HSMHV_rd23lp = value->rValue; mod->HSMHV_rd23lp_Given = TRUE; break; case HSMHV_MOD_RD23S: mod->HSMHV_rd23s = value->rValue; mod->HSMHV_rd23s_Given = TRUE; break; case HSMHV_MOD_RD23SP: mod->HSMHV_rd23sp = value->rValue; mod->HSMHV_rd23sp_Given = TRUE; break; case HSMHV_MOD_RDS: mod->HSMHV_rds = value->rValue; mod->HSMHV_rds_Given = TRUE; break; case HSMHV_MOD_RDSP: mod->HSMHV_rdsp = value->rValue; mod->HSMHV_rdsp_Given = TRUE; break; case HSMHV_MOD_RTH0: /* Self-heating model */ mod->HSMHV_rth0 = value->rValue; mod->HSMHV_rth0_Given = TRUE; break; case HSMHV_MOD_CTH0: /* Self-heating model */ mod->HSMHV_cth0 = value->rValue; mod->HSMHV_cth0_Given = TRUE; break; case HSMHV_MOD_POWRAT: /* Self-heating model */ mod->HSMHV_powrat = value->rValue; mod->HSMHV_powrat_Given = TRUE; break; case HSMHV_MOD_TCJBD: /* Self-heating model */ mod->HSMHV_tcjbd = value->rValue; mod->HSMHV_tcjbd_Given = TRUE; break; case HSMHV_MOD_TCJBS: /* Self-heating model */ mod->HSMHV_tcjbs = value->rValue; mod->HSMHV_tcjbs_Given = TRUE; break; case HSMHV_MOD_TCJBDSW: /* Self-heating model */ mod->HSMHV_tcjbdsw = value->rValue; mod->HSMHV_tcjbdsw_Given = TRUE; break; case HSMHV_MOD_TCJBSSW: /* Self-heating model */ mod->HSMHV_tcjbssw = value->rValue; mod->HSMHV_tcjbssw_Given = TRUE; break; case HSMHV_MOD_TCJBDSWG: /* Self-heating model */ mod->HSMHV_tcjbdswg = value->rValue; mod->HSMHV_tcjbdswg_Given = TRUE; break; case HSMHV_MOD_TCJBSSWG: /* Self-heating model */ mod->HSMHV_tcjbsswg = value->rValue; mod->HSMHV_tcjbsswg_Given = TRUE; break; case HSMHV_MOD_DLYOV: mod->HSMHV_dlyov = value->rValue; mod->HSMHV_dlyov_Given = TRUE; break; case HSMHV_MOD_QDFTVD: mod->HSMHV_qdftvd = value->rValue; mod->HSMHV_qdftvd_Given = TRUE; break; case HSMHV_MOD_XLDLD: mod->HSMHV_xldld = value->rValue; mod->HSMHV_xldld_Given = TRUE; break; case HSMHV_MOD_XWDLD: mod->HSMHV_xwdld = value->rValue; mod->HSMHV_xwdld_Given = TRUE; break; case HSMHV_MOD_RDVD: mod->HSMHV_rdvd = value->rValue; mod->HSMHV_rdvd_Given = TRUE; break; case HSMHV_MOD_RDTEMP1: mod->HSMHV_rdtemp1 = value->rValue; mod->HSMHV_rdtemp1_Given = TRUE; break; case HSMHV_MOD_RDTEMP2: mod->HSMHV_rdtemp2 = value->rValue; mod->HSMHV_rdtemp2_Given = TRUE; break; case HSMHV_MOD_RTH0R: mod->HSMHV_rth0r = value->rValue; mod->HSMHV_rth0r_Given = TRUE; break; case HSMHV_MOD_RDVDTEMP1: mod->HSMHV_rdvdtemp1 = value->rValue; mod->HSMHV_rdvdtemp1_Given = TRUE; break; case HSMHV_MOD_RDVDTEMP2: mod->HSMHV_rdvdtemp2 = value->rValue; mod->HSMHV_rdvdtemp2_Given = TRUE; break; case HSMHV_MOD_RTH0W: mod->HSMHV_rth0w = value->rValue; mod->HSMHV_rth0w_Given = TRUE; break; case HSMHV_MOD_RTH0WP: mod->HSMHV_rth0wp = value->rValue; mod->HSMHV_rth0wp_Given = TRUE; break; case HSMHV_MOD_CVDSOVER: mod->HSMHV_cvdsover = value->rValue; mod->HSMHV_cvdsover_Given = TRUE; break; case HSMHV_MOD_NINVD: mod->HSMHV_ninvd = value->rValue; mod->HSMHV_ninvd_Given = TRUE; break; case HSMHV_MOD_NINVDW: mod->HSMHV_ninvdw = value->rValue; mod->HSMHV_ninvdw_Given = TRUE; break; case HSMHV_MOD_NINVDWP: mod->HSMHV_ninvdwp = value->rValue; mod->HSMHV_ninvdwp_Given = TRUE; break; case HSMHV_MOD_NINVDT1: mod->HSMHV_ninvdt1 = value->rValue; mod->HSMHV_ninvdt1_Given = TRUE; break; case HSMHV_MOD_NINVDT2: mod->HSMHV_ninvdt2 = value->rValue; mod->HSMHV_ninvdt2_Given = TRUE; break; case HSMHV_MOD_VBSMIN: mod->HSMHV_vbsmin = value->rValue; mod->HSMHV_vbsmin_Given = TRUE; break; case HSMHV_MOD_RDVB: mod->HSMHV_rdvb = value->rValue; mod->HSMHV_rdvb_Given = TRUE; break; case HSMHV_MOD_RTH0NF: mod->HSMHV_rth0nf = value->rValue; mod->HSMHV_rth0nf_Given = TRUE; break; case HSMHV_MOD_RTHTEMP1: mod->HSMHV_rthtemp1 = value->rValue; mod->HSMHV_rthtemp1_Given = TRUE; break; case HSMHV_MOD_RTHTEMP2: mod->HSMHV_rthtemp2 = value->rValue; mod->HSMHV_rthtemp2_Given = TRUE; break; case HSMHV_MOD_PRATTEMP1: mod->HSMHV_prattemp1 = value->rValue; mod->HSMHV_prattemp1_Given = TRUE; break; case HSMHV_MOD_PRATTEMP2: mod->HSMHV_prattemp2 = value->rValue; mod->HSMHV_prattemp2_Given = TRUE; break; case HSMHV_MOD_RDVSUB: /* substrate effect */ mod->HSMHV_rdvsub = value->rValue; mod->HSMHV_rdvsub_Given = TRUE; break; case HSMHV_MOD_RDVDSUB: mod->HSMHV_rdvdsub = value->rValue; mod->HSMHV_rdvdsub_Given = TRUE; break; case HSMHV_MOD_DDRIFT: mod->HSMHV_ddrift = value->rValue; mod->HSMHV_ddrift_Given = TRUE; break; case HSMHV_MOD_VBISUB: mod->HSMHV_vbisub = value->rValue; mod->HSMHV_vbisub_Given = TRUE; break; case HSMHV_MOD_NSUBSUB: mod->HSMHV_nsubsub = value->rValue; mod->HSMHV_nsubsub_Given = TRUE; break; case HSMHV_MOD_SHEMAX: mod->HSMHV_shemax = value->rValue; mod->HSMHV_shemax_Given = TRUE; break; /* binning parameters */ case HSMHV_MOD_LMIN: mod->HSMHV_lmin = value->rValue; mod->HSMHV_lmin_Given = TRUE; break; case HSMHV_MOD_LMAX: mod->HSMHV_lmax = value->rValue; mod->HSMHV_lmax_Given = TRUE; break; case HSMHV_MOD_WMIN: mod->HSMHV_wmin = value->rValue; mod->HSMHV_wmin_Given = TRUE; break; case HSMHV_MOD_WMAX: mod->HSMHV_wmax = value->rValue; mod->HSMHV_wmax_Given = TRUE; break; case HSMHV_MOD_LBINN: mod->HSMHV_lbinn = value->rValue; mod->HSMHV_lbinn_Given = TRUE; break; case HSMHV_MOD_WBINN: mod->HSMHV_wbinn = value->rValue; mod->HSMHV_wbinn_Given = TRUE; break; /* Length dependence */ case HSMHV_MOD_LVMAX: mod->HSMHV_lvmax = value->rValue; mod->HSMHV_lvmax_Given = TRUE; break; case HSMHV_MOD_LBGTMP1: mod->HSMHV_lbgtmp1 = value->rValue; mod->HSMHV_lbgtmp1_Given = TRUE; break; case HSMHV_MOD_LBGTMP2: mod->HSMHV_lbgtmp2 = value->rValue; mod->HSMHV_lbgtmp2_Given = TRUE; break; case HSMHV_MOD_LEG0: mod->HSMHV_leg0 = value->rValue; mod->HSMHV_leg0_Given = TRUE; break; case HSMHV_MOD_LVFBOVER: mod->HSMHV_lvfbover = value->rValue; mod->HSMHV_lvfbover_Given = TRUE; break; case HSMHV_MOD_LNOVER: mod->HSMHV_lnover = value->rValue; mod->HSMHV_lnover_Given = TRUE; break; case HSMHV_MOD_LNOVERS: mod->HSMHV_lnovers = value->rValue; mod->HSMHV_lnovers_Given = TRUE; break; case HSMHV_MOD_LWL2: mod->HSMHV_lwl2 = value->rValue; mod->HSMHV_lwl2_Given = TRUE; break; case HSMHV_MOD_LVFBC: mod->HSMHV_lvfbc = value->rValue; mod->HSMHV_lvfbc_Given = TRUE; break; case HSMHV_MOD_LNSUBC: mod->HSMHV_lnsubc = value->rValue; mod->HSMHV_lnsubc_Given = TRUE; break; case HSMHV_MOD_LNSUBP: mod->HSMHV_lnsubp = value->rValue; mod->HSMHV_lnsubp_Given = TRUE; break; case HSMHV_MOD_LSCP1: mod->HSMHV_lscp1 = value->rValue; mod->HSMHV_lscp1_Given = TRUE; break; case HSMHV_MOD_LSCP2: mod->HSMHV_lscp2 = value->rValue; mod->HSMHV_lscp2_Given = TRUE; break; case HSMHV_MOD_LSCP3: mod->HSMHV_lscp3 = value->rValue; mod->HSMHV_lscp3_Given = TRUE; break; case HSMHV_MOD_LSC1: mod->HSMHV_lsc1 = value->rValue; mod->HSMHV_lsc1_Given = TRUE; break; case HSMHV_MOD_LSC2: mod->HSMHV_lsc2 = value->rValue; mod->HSMHV_lsc2_Given = TRUE; break; case HSMHV_MOD_LSC3: mod->HSMHV_lsc3 = value->rValue; mod->HSMHV_lsc3_Given = TRUE; break; case HSMHV_MOD_LPGD1: mod->HSMHV_lpgd1 = value->rValue; mod->HSMHV_lpgd1_Given = TRUE; break; case HSMHV_MOD_LPGD3: mod->HSMHV_lpgd3 = value->rValue; mod->HSMHV_lpgd3_Given = TRUE; break; case HSMHV_MOD_LNDEP: mod->HSMHV_lndep = value->rValue; mod->HSMHV_lndep_Given = TRUE; break; case HSMHV_MOD_LNINV: mod->HSMHV_lninv = value->rValue; mod->HSMHV_lninv_Given = TRUE; break; case HSMHV_MOD_LMUECB0: mod->HSMHV_lmuecb0 = value->rValue; mod->HSMHV_lmuecb0_Given = TRUE; break; case HSMHV_MOD_LMUECB1: mod->HSMHV_lmuecb1 = value->rValue; mod->HSMHV_lmuecb1_Given = TRUE; break; case HSMHV_MOD_LMUEPH1: mod->HSMHV_lmueph1 = value->rValue; mod->HSMHV_lmueph1_Given = TRUE; break; case HSMHV_MOD_LVTMP: mod->HSMHV_lvtmp = value->rValue; mod->HSMHV_lvtmp_Given = TRUE; break; case HSMHV_MOD_LWVTH0: mod->HSMHV_lwvth0 = value->rValue; mod->HSMHV_lwvth0_Given = TRUE; break; case HSMHV_MOD_LMUESR1: mod->HSMHV_lmuesr1 = value->rValue; mod->HSMHV_lmuesr1_Given = TRUE; break; case HSMHV_MOD_LMUETMP: mod->HSMHV_lmuetmp = value->rValue; mod->HSMHV_lmuetmp_Given = TRUE; break; case HSMHV_MOD_LSUB1: mod->HSMHV_lsub1 = value->rValue; mod->HSMHV_lsub1_Given = TRUE; break; case HSMHV_MOD_LSUB2: mod->HSMHV_lsub2 = value->rValue; mod->HSMHV_lsub2_Given = TRUE; break; case HSMHV_MOD_LSVDS: mod->HSMHV_lsvds = value->rValue; mod->HSMHV_lsvds_Given = TRUE; break; case HSMHV_MOD_LSVBS: mod->HSMHV_lsvbs = value->rValue; mod->HSMHV_lsvbs_Given = TRUE; break; case HSMHV_MOD_LSVGS: mod->HSMHV_lsvgs = value->rValue; mod->HSMHV_lsvgs_Given = TRUE; break; case HSMHV_MOD_LFN1: mod->HSMHV_lfn1 = value->rValue; mod->HSMHV_lfn1_Given = TRUE; break; case HSMHV_MOD_LFN2: mod->HSMHV_lfn2 = value->rValue; mod->HSMHV_lfn2_Given = TRUE; break; case HSMHV_MOD_LFN3: mod->HSMHV_lfn3 = value->rValue; mod->HSMHV_lfn3_Given = TRUE; break; case HSMHV_MOD_LFVBS: mod->HSMHV_lfvbs = value->rValue; mod->HSMHV_lfvbs_Given = TRUE; break; case HSMHV_MOD_LNSTI: mod->HSMHV_lnsti = value->rValue; mod->HSMHV_lnsti_Given = TRUE; break; case HSMHV_MOD_LWSTI: mod->HSMHV_lwsti = value->rValue; mod->HSMHV_lwsti_Given = TRUE; break; case HSMHV_MOD_LSCSTI1: mod->HSMHV_lscsti1 = value->rValue; mod->HSMHV_lscsti1_Given = TRUE; break; case HSMHV_MOD_LSCSTI2: mod->HSMHV_lscsti2 = value->rValue; mod->HSMHV_lscsti2_Given = TRUE; break; case HSMHV_MOD_LVTHSTI: mod->HSMHV_lvthsti = value->rValue; mod->HSMHV_lvthsti_Given = TRUE; break; case HSMHV_MOD_LMUESTI1: mod->HSMHV_lmuesti1 = value->rValue; mod->HSMHV_lmuesti1_Given = TRUE; break; case HSMHV_MOD_LMUESTI2: mod->HSMHV_lmuesti2 = value->rValue; mod->HSMHV_lmuesti2_Given = TRUE; break; case HSMHV_MOD_LMUESTI3: mod->HSMHV_lmuesti3 = value->rValue; mod->HSMHV_lmuesti3_Given = TRUE; break; case HSMHV_MOD_LNSUBPSTI1: mod->HSMHV_lnsubpsti1 = value->rValue; mod->HSMHV_lnsubpsti1_Given = TRUE; break; case HSMHV_MOD_LNSUBPSTI2: mod->HSMHV_lnsubpsti2 = value->rValue; mod->HSMHV_lnsubpsti2_Given = TRUE; break; case HSMHV_MOD_LNSUBPSTI3: mod->HSMHV_lnsubpsti3 = value->rValue; mod->HSMHV_lnsubpsti3_Given = TRUE; break; case HSMHV_MOD_LCGSO: mod->HSMHV_lcgso = value->rValue; mod->HSMHV_lcgso_Given = TRUE; break; case HSMHV_MOD_LCGDO: mod->HSMHV_lcgdo = value->rValue; mod->HSMHV_lcgdo_Given = TRUE; break; case HSMHV_MOD_LJS0: mod->HSMHV_ljs0 = value->rValue; mod->HSMHV_ljs0_Given = TRUE; break; case HSMHV_MOD_LJS0SW: mod->HSMHV_ljs0sw = value->rValue; mod->HSMHV_ljs0sw_Given = TRUE; break; case HSMHV_MOD_LNJ: mod->HSMHV_lnj = value->rValue; mod->HSMHV_lnj_Given = TRUE; break; case HSMHV_MOD_LCISBK: mod->HSMHV_lcisbk = value->rValue; mod->HSMHV_lcisbk_Given = TRUE; break; case HSMHV_MOD_LCLM1: mod->HSMHV_lclm1 = value->rValue; mod->HSMHV_lclm1_Given = TRUE; break; case HSMHV_MOD_LCLM2: mod->HSMHV_lclm2 = value->rValue; mod->HSMHV_lclm2_Given = TRUE; break; case HSMHV_MOD_LCLM3: mod->HSMHV_lclm3 = value->rValue; mod->HSMHV_lclm3_Given = TRUE; break; case HSMHV_MOD_LWFC: mod->HSMHV_lwfc = value->rValue; mod->HSMHV_lwfc_Given = TRUE; break; case HSMHV_MOD_LGIDL1: mod->HSMHV_lgidl1 = value->rValue; mod->HSMHV_lgidl1_Given = TRUE; break; case HSMHV_MOD_LGIDL2: mod->HSMHV_lgidl2 = value->rValue; mod->HSMHV_lgidl2_Given = TRUE; break; case HSMHV_MOD_LGLEAK1: mod->HSMHV_lgleak1 = value->rValue; mod->HSMHV_lgleak1_Given = TRUE; break; case HSMHV_MOD_LGLEAK2: mod->HSMHV_lgleak2 = value->rValue; mod->HSMHV_lgleak2_Given = TRUE; break; case HSMHV_MOD_LGLEAK3: mod->HSMHV_lgleak3 = value->rValue; mod->HSMHV_lgleak3_Given = TRUE; break; case HSMHV_MOD_LGLEAK6: mod->HSMHV_lgleak6 = value->rValue; mod->HSMHV_lgleak6_Given = TRUE; break; case HSMHV_MOD_LGLKSD1: mod->HSMHV_lglksd1 = value->rValue; mod->HSMHV_lglksd1_Given = TRUE; break; case HSMHV_MOD_LGLKSD2: mod->HSMHV_lglksd2 = value->rValue; mod->HSMHV_lglksd2_Given = TRUE; break; case HSMHV_MOD_LGLKB1: mod->HSMHV_lglkb1 = value->rValue; mod->HSMHV_lglkb1_Given = TRUE; break; case HSMHV_MOD_LGLKB2: mod->HSMHV_lglkb2 = value->rValue; mod->HSMHV_lglkb2_Given = TRUE; break; case HSMHV_MOD_LNFTRP: mod->HSMHV_lnftrp = value->rValue; mod->HSMHV_lnftrp_Given = TRUE; break; case HSMHV_MOD_LNFALP: mod->HSMHV_lnfalp = value->rValue; mod->HSMHV_lnfalp_Given = TRUE; break; case HSMHV_MOD_LPTHROU: mod->HSMHV_lpthrou = value->rValue; mod->HSMHV_lpthrou_Given = TRUE; break; case HSMHV_MOD_LVDIFFJ: mod->HSMHV_lvdiffj = value->rValue; mod->HSMHV_lvdiffj_Given = TRUE; break; case HSMHV_MOD_LIBPC1: mod->HSMHV_libpc1 = value->rValue; mod->HSMHV_libpc1_Given = TRUE; break; case HSMHV_MOD_LIBPC2: mod->HSMHV_libpc2 = value->rValue; mod->HSMHV_libpc2_Given = TRUE; break; break; case HSMHV_MOD_LCGBO: mod->HSMHV_lcgbo = value->rValue; mod->HSMHV_lcgbo_Given = TRUE; break; case HSMHV_MOD_LCVDSOVER: mod->HSMHV_lcvdsover = value->rValue; mod->HSMHV_lcvdsover_Given = TRUE; break; case HSMHV_MOD_LFALPH: mod->HSMHV_lfalph = value->rValue; mod->HSMHV_lfalph_Given = TRUE; break; case HSMHV_MOD_LNPEXT: mod->HSMHV_lnpext = value->rValue; mod->HSMHV_lnpext_Given = TRUE; break; case HSMHV_MOD_LPOWRAT: mod->HSMHV_lpowrat = value->rValue; mod->HSMHV_lpowrat_Given = TRUE; break; case HSMHV_MOD_LRD: mod->HSMHV_lrd = value->rValue; mod->HSMHV_lrd_Given = TRUE; break; case HSMHV_MOD_LRD22: mod->HSMHV_lrd22 = value->rValue; mod->HSMHV_lrd22_Given = TRUE; break; case HSMHV_MOD_LRD23: mod->HSMHV_lrd23 = value->rValue; mod->HSMHV_lrd23_Given = TRUE; break; case HSMHV_MOD_LRD24: mod->HSMHV_lrd24 = value->rValue; mod->HSMHV_lrd24_Given = TRUE; break; case HSMHV_MOD_LRDICT1: mod->HSMHV_lrdict1 = value->rValue; mod->HSMHV_lrdict1_Given = TRUE; break; case HSMHV_MOD_LRDOV13: mod->HSMHV_lrdov13 = value->rValue; mod->HSMHV_lrdov13_Given = TRUE; break; case HSMHV_MOD_LRDSLP1: mod->HSMHV_lrdslp1 = value->rValue; mod->HSMHV_lrdslp1_Given = TRUE; break; case HSMHV_MOD_LRDVB: mod->HSMHV_lrdvb = value->rValue; mod->HSMHV_lrdvb_Given = TRUE; break; case HSMHV_MOD_LRDVD: mod->HSMHV_lrdvd = value->rValue; mod->HSMHV_lrdvd_Given = TRUE; break; case HSMHV_MOD_LRDVG11: mod->HSMHV_lrdvg11 = value->rValue; mod->HSMHV_lrdvg11_Given = TRUE; break; case HSMHV_MOD_LRS: mod->HSMHV_lrs = value->rValue; mod->HSMHV_lrs_Given = TRUE; break; case HSMHV_MOD_LRTH0: mod->HSMHV_lrth0 = value->rValue; mod->HSMHV_lrth0_Given = TRUE; break; case HSMHV_MOD_LVOVER: mod->HSMHV_lvover = value->rValue; mod->HSMHV_lvover_Given = TRUE; break; /* Width dependence */ case HSMHV_MOD_WVMAX: mod->HSMHV_wvmax = value->rValue; mod->HSMHV_wvmax_Given = TRUE; break; case HSMHV_MOD_WBGTMP1: mod->HSMHV_wbgtmp1 = value->rValue; mod->HSMHV_wbgtmp1_Given = TRUE; break; case HSMHV_MOD_WBGTMP2: mod->HSMHV_wbgtmp2 = value->rValue; mod->HSMHV_wbgtmp2_Given = TRUE; break; case HSMHV_MOD_WEG0: mod->HSMHV_weg0 = value->rValue; mod->HSMHV_weg0_Given = TRUE; break; case HSMHV_MOD_WVFBOVER: mod->HSMHV_wvfbover = value->rValue; mod->HSMHV_wvfbover_Given = TRUE; break; case HSMHV_MOD_WNOVER: mod->HSMHV_wnover = value->rValue; mod->HSMHV_wnover_Given = TRUE; break; case HSMHV_MOD_WNOVERS: mod->HSMHV_wnovers = value->rValue; mod->HSMHV_wnovers_Given = TRUE; break; case HSMHV_MOD_WWL2: mod->HSMHV_wwl2 = value->rValue; mod->HSMHV_wwl2_Given = TRUE; break; case HSMHV_MOD_WVFBC: mod->HSMHV_wvfbc = value->rValue; mod->HSMHV_wvfbc_Given = TRUE; break; case HSMHV_MOD_WNSUBC: mod->HSMHV_wnsubc = value->rValue; mod->HSMHV_wnsubc_Given = TRUE; break; case HSMHV_MOD_WNSUBP: mod->HSMHV_wnsubp = value->rValue; mod->HSMHV_wnsubp_Given = TRUE; break; case HSMHV_MOD_WSCP1: mod->HSMHV_wscp1 = value->rValue; mod->HSMHV_wscp1_Given = TRUE; break; case HSMHV_MOD_WSCP2: mod->HSMHV_wscp2 = value->rValue; mod->HSMHV_wscp2_Given = TRUE; break; case HSMHV_MOD_WSCP3: mod->HSMHV_wscp3 = value->rValue; mod->HSMHV_wscp3_Given = TRUE; break; case HSMHV_MOD_WSC1: mod->HSMHV_wsc1 = value->rValue; mod->HSMHV_wsc1_Given = TRUE; break; case HSMHV_MOD_WSC2: mod->HSMHV_wsc2 = value->rValue; mod->HSMHV_wsc2_Given = TRUE; break; case HSMHV_MOD_WSC3: mod->HSMHV_wsc3 = value->rValue; mod->HSMHV_wsc3_Given = TRUE; break; case HSMHV_MOD_WPGD1: mod->HSMHV_wpgd1 = value->rValue; mod->HSMHV_wpgd1_Given = TRUE; break; case HSMHV_MOD_WPGD3: mod->HSMHV_wpgd3 = value->rValue; mod->HSMHV_wpgd3_Given = TRUE; break; case HSMHV_MOD_WNDEP: mod->HSMHV_wndep = value->rValue; mod->HSMHV_wndep_Given = TRUE; break; case HSMHV_MOD_WNINV: mod->HSMHV_wninv = value->rValue; mod->HSMHV_wninv_Given = TRUE; break; case HSMHV_MOD_WMUECB0: mod->HSMHV_wmuecb0 = value->rValue; mod->HSMHV_wmuecb0_Given = TRUE; break; case HSMHV_MOD_WMUECB1: mod->HSMHV_wmuecb1 = value->rValue; mod->HSMHV_wmuecb1_Given = TRUE; break; case HSMHV_MOD_WMUEPH1: mod->HSMHV_wmueph1 = value->rValue; mod->HSMHV_wmueph1_Given = TRUE; break; case HSMHV_MOD_WVTMP: mod->HSMHV_wvtmp = value->rValue; mod->HSMHV_wvtmp_Given = TRUE; break; case HSMHV_MOD_WWVTH0: mod->HSMHV_wwvth0 = value->rValue; mod->HSMHV_wwvth0_Given = TRUE; break; case HSMHV_MOD_WMUESR1: mod->HSMHV_wmuesr1 = value->rValue; mod->HSMHV_wmuesr1_Given = TRUE; break; case HSMHV_MOD_WMUETMP: mod->HSMHV_wmuetmp = value->rValue; mod->HSMHV_wmuetmp_Given = TRUE; break; case HSMHV_MOD_WSUB1: mod->HSMHV_wsub1 = value->rValue; mod->HSMHV_wsub1_Given = TRUE; break; case HSMHV_MOD_WSUB2: mod->HSMHV_wsub2 = value->rValue; mod->HSMHV_wsub2_Given = TRUE; break; case HSMHV_MOD_WSVDS: mod->HSMHV_wsvds = value->rValue; mod->HSMHV_wsvds_Given = TRUE; break; case HSMHV_MOD_WSVBS: mod->HSMHV_wsvbs = value->rValue; mod->HSMHV_wsvbs_Given = TRUE; break; case HSMHV_MOD_WSVGS: mod->HSMHV_wsvgs = value->rValue; mod->HSMHV_wsvgs_Given = TRUE; break; case HSMHV_MOD_WFN1: mod->HSMHV_wfn1 = value->rValue; mod->HSMHV_wfn1_Given = TRUE; break; case HSMHV_MOD_WFN2: mod->HSMHV_wfn2 = value->rValue; mod->HSMHV_wfn2_Given = TRUE; break; case HSMHV_MOD_WFN3: mod->HSMHV_wfn3 = value->rValue; mod->HSMHV_wfn3_Given = TRUE; break; case HSMHV_MOD_WFVBS: mod->HSMHV_wfvbs = value->rValue; mod->HSMHV_wfvbs_Given = TRUE; break; case HSMHV_MOD_WNSTI: mod->HSMHV_wnsti = value->rValue; mod->HSMHV_wnsti_Given = TRUE; break; case HSMHV_MOD_WWSTI: mod->HSMHV_wwsti = value->rValue; mod->HSMHV_wwsti_Given = TRUE; break; case HSMHV_MOD_WSCSTI1: mod->HSMHV_wscsti1 = value->rValue; mod->HSMHV_wscsti1_Given = TRUE; break; case HSMHV_MOD_WSCSTI2: mod->HSMHV_wscsti2 = value->rValue; mod->HSMHV_wscsti2_Given = TRUE; break; case HSMHV_MOD_WVTHSTI: mod->HSMHV_wvthsti = value->rValue; mod->HSMHV_wvthsti_Given = TRUE; break; case HSMHV_MOD_WMUESTI1: mod->HSMHV_wmuesti1 = value->rValue; mod->HSMHV_wmuesti1_Given = TRUE; break; case HSMHV_MOD_WMUESTI2: mod->HSMHV_wmuesti2 = value->rValue; mod->HSMHV_wmuesti2_Given = TRUE; break; case HSMHV_MOD_WMUESTI3: mod->HSMHV_wmuesti3 = value->rValue; mod->HSMHV_wmuesti3_Given = TRUE; break; case HSMHV_MOD_WNSUBPSTI1: mod->HSMHV_wnsubpsti1 = value->rValue; mod->HSMHV_wnsubpsti1_Given = TRUE; break; case HSMHV_MOD_WNSUBPSTI2: mod->HSMHV_wnsubpsti2 = value->rValue; mod->HSMHV_wnsubpsti2_Given = TRUE; break; case HSMHV_MOD_WNSUBPSTI3: mod->HSMHV_wnsubpsti3 = value->rValue; mod->HSMHV_wnsubpsti3_Given = TRUE; break; case HSMHV_MOD_WCGSO: mod->HSMHV_wcgso = value->rValue; mod->HSMHV_wcgso_Given = TRUE; break; case HSMHV_MOD_WCGDO: mod->HSMHV_wcgdo = value->rValue; mod->HSMHV_wcgdo_Given = TRUE; break; case HSMHV_MOD_WJS0: mod->HSMHV_wjs0 = value->rValue; mod->HSMHV_wjs0_Given = TRUE; break; case HSMHV_MOD_WJS0SW: mod->HSMHV_wjs0sw = value->rValue; mod->HSMHV_wjs0sw_Given = TRUE; break; case HSMHV_MOD_WNJ: mod->HSMHV_wnj = value->rValue; mod->HSMHV_wnj_Given = TRUE; break; case HSMHV_MOD_WCISBK: mod->HSMHV_wcisbk = value->rValue; mod->HSMHV_wcisbk_Given = TRUE; break; case HSMHV_MOD_WCLM1: mod->HSMHV_wclm1 = value->rValue; mod->HSMHV_wclm1_Given = TRUE; break; case HSMHV_MOD_WCLM2: mod->HSMHV_wclm2 = value->rValue; mod->HSMHV_wclm2_Given = TRUE; break; case HSMHV_MOD_WCLM3: mod->HSMHV_wclm3 = value->rValue; mod->HSMHV_wclm3_Given = TRUE; break; case HSMHV_MOD_WWFC: mod->HSMHV_wwfc = value->rValue; mod->HSMHV_wwfc_Given = TRUE; break; case HSMHV_MOD_WGIDL1: mod->HSMHV_wgidl1 = value->rValue; mod->HSMHV_wgidl1_Given = TRUE; break; case HSMHV_MOD_WGIDL2: mod->HSMHV_wgidl2 = value->rValue; mod->HSMHV_wgidl2_Given = TRUE; break; case HSMHV_MOD_WGLEAK1: mod->HSMHV_wgleak1 = value->rValue; mod->HSMHV_wgleak1_Given = TRUE; break; case HSMHV_MOD_WGLEAK2: mod->HSMHV_wgleak2 = value->rValue; mod->HSMHV_wgleak2_Given = TRUE; break; case HSMHV_MOD_WGLEAK3: mod->HSMHV_wgleak3 = value->rValue; mod->HSMHV_wgleak3_Given = TRUE; break; case HSMHV_MOD_WGLEAK6: mod->HSMHV_wgleak6 = value->rValue; mod->HSMHV_wgleak6_Given = TRUE; break; case HSMHV_MOD_WGLKSD1: mod->HSMHV_wglksd1 = value->rValue; mod->HSMHV_wglksd1_Given = TRUE; break; case HSMHV_MOD_WGLKSD2: mod->HSMHV_wglksd2 = value->rValue; mod->HSMHV_wglksd2_Given = TRUE; break; case HSMHV_MOD_WGLKB1: mod->HSMHV_wglkb1 = value->rValue; mod->HSMHV_wglkb1_Given = TRUE; break; case HSMHV_MOD_WGLKB2: mod->HSMHV_wglkb2 = value->rValue; mod->HSMHV_wglkb2_Given = TRUE; break; case HSMHV_MOD_WNFTRP: mod->HSMHV_wnftrp = value->rValue; mod->HSMHV_wnftrp_Given = TRUE; break; case HSMHV_MOD_WNFALP: mod->HSMHV_wnfalp = value->rValue; mod->HSMHV_wnfalp_Given = TRUE; break; case HSMHV_MOD_WPTHROU: mod->HSMHV_wpthrou = value->rValue; mod->HSMHV_wpthrou_Given = TRUE; break; case HSMHV_MOD_WVDIFFJ: mod->HSMHV_wvdiffj = value->rValue; mod->HSMHV_wvdiffj_Given = TRUE; break; case HSMHV_MOD_WIBPC1: mod->HSMHV_wibpc1 = value->rValue; mod->HSMHV_wibpc1_Given = TRUE; break; case HSMHV_MOD_WIBPC2: mod->HSMHV_wibpc2 = value->rValue; mod->HSMHV_wibpc2_Given = TRUE; break; break; case HSMHV_MOD_WCGBO: mod->HSMHV_wcgbo = value->rValue; mod->HSMHV_wcgbo_Given = TRUE; break; case HSMHV_MOD_WCVDSOVER: mod->HSMHV_wcvdsover = value->rValue; mod->HSMHV_wcvdsover_Given = TRUE; break; case HSMHV_MOD_WFALPH: mod->HSMHV_wfalph = value->rValue; mod->HSMHV_wfalph_Given = TRUE; break; case HSMHV_MOD_WNPEXT: mod->HSMHV_wnpext = value->rValue; mod->HSMHV_wnpext_Given = TRUE; break; case HSMHV_MOD_WPOWRAT: mod->HSMHV_wpowrat = value->rValue; mod->HSMHV_wpowrat_Given = TRUE; break; case HSMHV_MOD_WRD: mod->HSMHV_wrd = value->rValue; mod->HSMHV_wrd_Given = TRUE; break; case HSMHV_MOD_WRD22: mod->HSMHV_wrd22 = value->rValue; mod->HSMHV_wrd22_Given = TRUE; break; case HSMHV_MOD_WRD23: mod->HSMHV_wrd23 = value->rValue; mod->HSMHV_wrd23_Given = TRUE; break; case HSMHV_MOD_WRD24: mod->HSMHV_wrd24 = value->rValue; mod->HSMHV_wrd24_Given = TRUE; break; case HSMHV_MOD_WRDICT1: mod->HSMHV_wrdict1 = value->rValue; mod->HSMHV_wrdict1_Given = TRUE; break; case HSMHV_MOD_WRDOV13: mod->HSMHV_wrdov13 = value->rValue; mod->HSMHV_wrdov13_Given = TRUE; break; case HSMHV_MOD_WRDSLP1: mod->HSMHV_wrdslp1 = value->rValue; mod->HSMHV_wrdslp1_Given = TRUE; break; case HSMHV_MOD_WRDVB: mod->HSMHV_wrdvb = value->rValue; mod->HSMHV_wrdvb_Given = TRUE; break; case HSMHV_MOD_WRDVD: mod->HSMHV_wrdvd = value->rValue; mod->HSMHV_wrdvd_Given = TRUE; break; case HSMHV_MOD_WRDVG11: mod->HSMHV_wrdvg11 = value->rValue; mod->HSMHV_wrdvg11_Given = TRUE; break; case HSMHV_MOD_WRS: mod->HSMHV_wrs = value->rValue; mod->HSMHV_wrs_Given = TRUE; break; case HSMHV_MOD_WRTH0: mod->HSMHV_wrth0 = value->rValue; mod->HSMHV_wrth0_Given = TRUE; break; case HSMHV_MOD_WVOVER: mod->HSMHV_wvover = value->rValue; mod->HSMHV_wvover_Given = TRUE; break; /* Cross-term dependence */ case HSMHV_MOD_PVMAX: mod->HSMHV_pvmax = value->rValue; mod->HSMHV_pvmax_Given = TRUE; break; case HSMHV_MOD_PBGTMP1: mod->HSMHV_pbgtmp1 = value->rValue; mod->HSMHV_pbgtmp1_Given = TRUE; break; case HSMHV_MOD_PBGTMP2: mod->HSMHV_pbgtmp2 = value->rValue; mod->HSMHV_pbgtmp2_Given = TRUE; break; case HSMHV_MOD_PEG0: mod->HSMHV_peg0 = value->rValue; mod->HSMHV_peg0_Given = TRUE; break; case HSMHV_MOD_PVFBOVER: mod->HSMHV_pvfbover = value->rValue; mod->HSMHV_pvfbover_Given = TRUE; break; case HSMHV_MOD_PNOVER: mod->HSMHV_pnover = value->rValue; mod->HSMHV_pnover_Given = TRUE; break; case HSMHV_MOD_PNOVERS: mod->HSMHV_pnovers = value->rValue; mod->HSMHV_pnovers_Given = TRUE; break; case HSMHV_MOD_PWL2: mod->HSMHV_pwl2 = value->rValue; mod->HSMHV_pwl2_Given = TRUE; break; case HSMHV_MOD_PVFBC: mod->HSMHV_pvfbc = value->rValue; mod->HSMHV_pvfbc_Given = TRUE; break; case HSMHV_MOD_PNSUBC: mod->HSMHV_pnsubc = value->rValue; mod->HSMHV_pnsubc_Given = TRUE; break; case HSMHV_MOD_PNSUBP: mod->HSMHV_pnsubp = value->rValue; mod->HSMHV_pnsubp_Given = TRUE; break; case HSMHV_MOD_PSCP1: mod->HSMHV_pscp1 = value->rValue; mod->HSMHV_pscp1_Given = TRUE; break; case HSMHV_MOD_PSCP2: mod->HSMHV_pscp2 = value->rValue; mod->HSMHV_pscp2_Given = TRUE; break; case HSMHV_MOD_PSCP3: mod->HSMHV_pscp3 = value->rValue; mod->HSMHV_pscp3_Given = TRUE; break; case HSMHV_MOD_PSC1: mod->HSMHV_psc1 = value->rValue; mod->HSMHV_psc1_Given = TRUE; break; case HSMHV_MOD_PSC2: mod->HSMHV_psc2 = value->rValue; mod->HSMHV_psc2_Given = TRUE; break; case HSMHV_MOD_PSC3: mod->HSMHV_psc3 = value->rValue; mod->HSMHV_psc3_Given = TRUE; break; case HSMHV_MOD_PPGD1: mod->HSMHV_ppgd1 = value->rValue; mod->HSMHV_ppgd1_Given = TRUE; break; case HSMHV_MOD_PPGD3: mod->HSMHV_ppgd3 = value->rValue; mod->HSMHV_ppgd3_Given = TRUE; break; case HSMHV_MOD_PNDEP: mod->HSMHV_pndep = value->rValue; mod->HSMHV_pndep_Given = TRUE; break; case HSMHV_MOD_PNINV: mod->HSMHV_pninv = value->rValue; mod->HSMHV_pninv_Given = TRUE; break; case HSMHV_MOD_PMUECB0: mod->HSMHV_pmuecb0 = value->rValue; mod->HSMHV_pmuecb0_Given = TRUE; break; case HSMHV_MOD_PMUECB1: mod->HSMHV_pmuecb1 = value->rValue; mod->HSMHV_pmuecb1_Given = TRUE; break; case HSMHV_MOD_PMUEPH1: mod->HSMHV_pmueph1 = value->rValue; mod->HSMHV_pmueph1_Given = TRUE; break; case HSMHV_MOD_PVTMP: mod->HSMHV_pvtmp = value->rValue; mod->HSMHV_pvtmp_Given = TRUE; break; case HSMHV_MOD_PWVTH0: mod->HSMHV_pwvth0 = value->rValue; mod->HSMHV_pwvth0_Given = TRUE; break; case HSMHV_MOD_PMUESR1: mod->HSMHV_pmuesr1 = value->rValue; mod->HSMHV_pmuesr1_Given = TRUE; break; case HSMHV_MOD_PMUETMP: mod->HSMHV_pmuetmp = value->rValue; mod->HSMHV_pmuetmp_Given = TRUE; break; case HSMHV_MOD_PSUB1: mod->HSMHV_psub1 = value->rValue; mod->HSMHV_psub1_Given = TRUE; break; case HSMHV_MOD_PSUB2: mod->HSMHV_psub2 = value->rValue; mod->HSMHV_psub2_Given = TRUE; break; case HSMHV_MOD_PSVDS: mod->HSMHV_psvds = value->rValue; mod->HSMHV_psvds_Given = TRUE; break; case HSMHV_MOD_PSVBS: mod->HSMHV_psvbs = value->rValue; mod->HSMHV_psvbs_Given = TRUE; break; case HSMHV_MOD_PSVGS: mod->HSMHV_psvgs = value->rValue; mod->HSMHV_psvgs_Given = TRUE; break; case HSMHV_MOD_PFN1: mod->HSMHV_pfn1 = value->rValue; mod->HSMHV_pfn1_Given = TRUE; break; case HSMHV_MOD_PFN2: mod->HSMHV_pfn2 = value->rValue; mod->HSMHV_pfn2_Given = TRUE; break; case HSMHV_MOD_PFN3: mod->HSMHV_pfn3 = value->rValue; mod->HSMHV_pfn3_Given = TRUE; break; case HSMHV_MOD_PFVBS: mod->HSMHV_pfvbs = value->rValue; mod->HSMHV_pfvbs_Given = TRUE; break; case HSMHV_MOD_PNSTI: mod->HSMHV_pnsti = value->rValue; mod->HSMHV_pnsti_Given = TRUE; break; case HSMHV_MOD_PWSTI: mod->HSMHV_pwsti = value->rValue; mod->HSMHV_pwsti_Given = TRUE; break; case HSMHV_MOD_PSCSTI1: mod->HSMHV_pscsti1 = value->rValue; mod->HSMHV_pscsti1_Given = TRUE; break; case HSMHV_MOD_PSCSTI2: mod->HSMHV_pscsti2 = value->rValue; mod->HSMHV_pscsti2_Given = TRUE; break; case HSMHV_MOD_PVTHSTI: mod->HSMHV_pvthsti = value->rValue; mod->HSMHV_pvthsti_Given = TRUE; break; case HSMHV_MOD_PMUESTI1: mod->HSMHV_pmuesti1 = value->rValue; mod->HSMHV_pmuesti1_Given = TRUE; break; case HSMHV_MOD_PMUESTI2: mod->HSMHV_pmuesti2 = value->rValue; mod->HSMHV_pmuesti2_Given = TRUE; break; case HSMHV_MOD_PMUESTI3: mod->HSMHV_pmuesti3 = value->rValue; mod->HSMHV_pmuesti3_Given = TRUE; break; case HSMHV_MOD_PNSUBPSTI1: mod->HSMHV_pnsubpsti1 = value->rValue; mod->HSMHV_pnsubpsti1_Given = TRUE; break; case HSMHV_MOD_PNSUBPSTI2: mod->HSMHV_pnsubpsti2 = value->rValue; mod->HSMHV_pnsubpsti2_Given = TRUE; break; case HSMHV_MOD_PNSUBPSTI3: mod->HSMHV_pnsubpsti3 = value->rValue; mod->HSMHV_pnsubpsti3_Given = TRUE; break; case HSMHV_MOD_PCGSO: mod->HSMHV_pcgso = value->rValue; mod->HSMHV_pcgso_Given = TRUE; break; case HSMHV_MOD_PCGDO: mod->HSMHV_pcgdo = value->rValue; mod->HSMHV_pcgdo_Given = TRUE; break; case HSMHV_MOD_PJS0: mod->HSMHV_pjs0 = value->rValue; mod->HSMHV_pjs0_Given = TRUE; break; case HSMHV_MOD_PJS0SW: mod->HSMHV_pjs0sw = value->rValue; mod->HSMHV_pjs0sw_Given = TRUE; break; case HSMHV_MOD_PNJ: mod->HSMHV_pnj = value->rValue; mod->HSMHV_pnj_Given = TRUE; break; case HSMHV_MOD_PCISBK: mod->HSMHV_pcisbk = value->rValue; mod->HSMHV_pcisbk_Given = TRUE; break; case HSMHV_MOD_PCLM1: mod->HSMHV_pclm1 = value->rValue; mod->HSMHV_pclm1_Given = TRUE; break; case HSMHV_MOD_PCLM2: mod->HSMHV_pclm2 = value->rValue; mod->HSMHV_pclm2_Given = TRUE; break; case HSMHV_MOD_PCLM3: mod->HSMHV_pclm3 = value->rValue; mod->HSMHV_pclm3_Given = TRUE; break; case HSMHV_MOD_PWFC: mod->HSMHV_pwfc = value->rValue; mod->HSMHV_pwfc_Given = TRUE; break; case HSMHV_MOD_PGIDL1: mod->HSMHV_pgidl1 = value->rValue; mod->HSMHV_pgidl1_Given = TRUE; break; case HSMHV_MOD_PGIDL2: mod->HSMHV_pgidl2 = value->rValue; mod->HSMHV_pgidl2_Given = TRUE; break; case HSMHV_MOD_PGLEAK1: mod->HSMHV_pgleak1 = value->rValue; mod->HSMHV_pgleak1_Given = TRUE; break; case HSMHV_MOD_PGLEAK2: mod->HSMHV_pgleak2 = value->rValue; mod->HSMHV_pgleak2_Given = TRUE; break; case HSMHV_MOD_PGLEAK3: mod->HSMHV_pgleak3 = value->rValue; mod->HSMHV_pgleak3_Given = TRUE; break; case HSMHV_MOD_PGLEAK6: mod->HSMHV_pgleak6 = value->rValue; mod->HSMHV_pgleak6_Given = TRUE; break; case HSMHV_MOD_PGLKSD1: mod->HSMHV_pglksd1 = value->rValue; mod->HSMHV_pglksd1_Given = TRUE; break; case HSMHV_MOD_PGLKSD2: mod->HSMHV_pglksd2 = value->rValue; mod->HSMHV_pglksd2_Given = TRUE; break; case HSMHV_MOD_PGLKB1: mod->HSMHV_pglkb1 = value->rValue; mod->HSMHV_pglkb1_Given = TRUE; break; case HSMHV_MOD_PGLKB2: mod->HSMHV_pglkb2 = value->rValue; mod->HSMHV_pglkb2_Given = TRUE; break; case HSMHV_MOD_PNFTRP: mod->HSMHV_pnftrp = value->rValue; mod->HSMHV_pnftrp_Given = TRUE; break; case HSMHV_MOD_PNFALP: mod->HSMHV_pnfalp = value->rValue; mod->HSMHV_pnfalp_Given = TRUE; break; case HSMHV_MOD_PPTHROU: mod->HSMHV_ppthrou = value->rValue; mod->HSMHV_ppthrou_Given = TRUE; break; case HSMHV_MOD_PVDIFFJ: mod->HSMHV_pvdiffj = value->rValue; mod->HSMHV_pvdiffj_Given = TRUE; break; case HSMHV_MOD_PIBPC1: mod->HSMHV_pibpc1 = value->rValue; mod->HSMHV_pibpc1_Given = TRUE; break; case HSMHV_MOD_PIBPC2: mod->HSMHV_pibpc2 = value->rValue; mod->HSMHV_pibpc2_Given = TRUE; break; break; case HSMHV_MOD_PCGBO: mod->HSMHV_pcgbo = value->rValue; mod->HSMHV_pcgbo_Given = TRUE; break; case HSMHV_MOD_PCVDSOVER: mod->HSMHV_pcvdsover = value->rValue; mod->HSMHV_pcvdsover_Given = TRUE; break; case HSMHV_MOD_PFALPH: mod->HSMHV_pfalph = value->rValue; mod->HSMHV_pfalph_Given = TRUE; break; case HSMHV_MOD_PNPEXT: mod->HSMHV_pnpext = value->rValue; mod->HSMHV_pnpext_Given = TRUE; break; case HSMHV_MOD_PPOWRAT: mod->HSMHV_ppowrat = value->rValue; mod->HSMHV_ppowrat_Given = TRUE; break; case HSMHV_MOD_PRD: mod->HSMHV_prd = value->rValue; mod->HSMHV_prd_Given = TRUE; break; case HSMHV_MOD_PRD22: mod->HSMHV_prd22 = value->rValue; mod->HSMHV_prd22_Given = TRUE; break; case HSMHV_MOD_PRD23: mod->HSMHV_prd23 = value->rValue; mod->HSMHV_prd23_Given = TRUE; break; case HSMHV_MOD_PRD24: mod->HSMHV_prd24 = value->rValue; mod->HSMHV_prd24_Given = TRUE; break; case HSMHV_MOD_PRDICT1: mod->HSMHV_prdict1 = value->rValue; mod->HSMHV_prdict1_Given = TRUE; break; case HSMHV_MOD_PRDOV13: mod->HSMHV_prdov13 = value->rValue; mod->HSMHV_prdov13_Given = TRUE; break; case HSMHV_MOD_PRDSLP1: mod->HSMHV_prdslp1 = value->rValue; mod->HSMHV_prdslp1_Given = TRUE; break; case HSMHV_MOD_PRDVB: mod->HSMHV_prdvb = value->rValue; mod->HSMHV_prdvb_Given = TRUE; break; case HSMHV_MOD_PRDVD: mod->HSMHV_prdvd = value->rValue; mod->HSMHV_prdvd_Given = TRUE; break; case HSMHV_MOD_PRDVG11: mod->HSMHV_prdvg11 = value->rValue; mod->HSMHV_prdvg11_Given = TRUE; break; case HSMHV_MOD_PRS: mod->HSMHV_prs = value->rValue; mod->HSMHV_prs_Given = TRUE; break; case HSMHV_MOD_PRTH0: mod->HSMHV_prth0 = value->rValue; mod->HSMHV_prth0_Given = TRUE; break; case HSMHV_MOD_PVOVER: mod->HSMHV_pvover = value->rValue; mod->HSMHV_pvover_Given = TRUE; break; case HSMHV_MOD_VGS_MAX: mod->HSMHVvgsMax = value->rValue; mod->HSMHVvgsMaxGiven = TRUE; break; case HSMHV_MOD_VGD_MAX: mod->HSMHVvgdMax = value->rValue; mod->HSMHVvgdMaxGiven = TRUE; break; case HSMHV_MOD_VGB_MAX: mod->HSMHVvgbMax = value->rValue; mod->HSMHVvgbMaxGiven = TRUE; break; case HSMHV_MOD_VDS_MAX: mod->HSMHVvdsMax = value->rValue; mod->HSMHVvdsMaxGiven = TRUE; break; case HSMHV_MOD_VBS_MAX: mod->HSMHVvbsMax = value->rValue; mod->HSMHVvbsMaxGiven = TRUE; break; case HSMHV_MOD_VBD_MAX: mod->HSMHVvbdMax = value->rValue; mod->HSMHVvbdMaxGiven = TRUE; break; case HSMHV_MOD_VGSR_MAX: mod->HSMHVvgsrMax = value->rValue; mod->HSMHVvgsrMaxGiven = TRUE; break; case HSMHV_MOD_VGDR_MAX: mod->HSMHVvgdrMax = value->rValue; mod->HSMHVvgdrMaxGiven = TRUE; break; case HSMHV_MOD_VGBR_MAX: mod->HSMHVvgbrMax = value->rValue; mod->HSMHVvgbrMaxGiven = TRUE; break; case HSMHV_MOD_VBSR_MAX: mod->HSMHVvbsrMax = value->rValue; mod->HSMHVvbsrMaxGiven = TRUE; break; case HSMHV_MOD_VBDR_MAX: mod->HSMHVvbdrMax = value->rValue; mod->HSMHVvbdrMaxGiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhvinit.c0000644000175000017500000000326713546075722023100 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "hsmhvdef.h" #include "hsmhvitf.h" #include "hsmhvinit.h" SPICEdev HSMHVinfo = { .DEVpublic = { .name = "HiSIMHV1", .description = "Hiroshima University STARC IGFET Model - HiSIM_HV v.1", .terms = &HSMHVnSize, .numNames = &HSMHVnSize, .termNames = HSMHVnames, .numInstanceParms = &HSMHVpTSize, .instanceParms = HSMHVpTable, .numModelParms = &HSMHVmPTSize, .modelParms = HSMHVmPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = HSMHVparam, .DEVmodParam = HSMHVmParam, .DEVload = HSMHVload, .DEVsetup = HSMHVsetup, .DEVunsetup = HSMHVunsetup, .DEVpzSetup = HSMHVsetup, .DEVtemperature = HSMHVtemp, .DEVtrunc = HSMHVtrunc, .DEVfindBranch = NULL, .DEVacLoad = HSMHVacLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = HSMHVgetic, .DEVask = HSMHVask, .DEVmodAsk = HSMHVmAsk, .DEVpzLoad = HSMHVpzLoad, .DEVconvTest = HSMHVconvTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = HSMHVnoise, .DEVsoaCheck = HSMHVsoaCheck, .DEVinstSize = &HSMHViSize, .DEVmodSize = &HSMHVmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_hsmhv_info(void) { return &HSMHVinfo; } tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhvitf.h0000644000175000017500000000112313546075722022711 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2012 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 1 SUBVERSION : 2 REVISION : 4 ) Model Parameter VERSION : 1.23 FILE : hsmhvitf DATE : 2013.04.30 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ #ifndef DEV_HISIMHV #define DEV_HISIMHV SPICEdev *get_hsmhv_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhvld.c0000644000175000017500000034344213546075722022536 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2012 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 1 SUBVERSION : 2 REVISION : 4 ) Model Parameter VERSION : 1.23 FILE : hsmhvld.c DATE : 2013.04.30 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ #include "ngspice/ngspice.h" #include "hisimhv.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" #define SHOW_EPS_QUANT 1.0e-15 static void ShowPhysVals ( HSMHVinstance *here, HSMHVmodel *model, int isFirst, double vds, double vgs, double vbs, double vgd, double vbd, double vgb ) { NG_IGNORE(vgd); NG_IGNORE(vbd); /* */ /* */ /* Note: This function is not yet adapted to the flat version */ /* */ /* */ /* regard the epsilon-quantity as 0.0 */ vds = (fabs(vds) < SHOW_EPS_QUANT) ? 0.0 : vds; vgs = (fabs(vgs) < SHOW_EPS_QUANT) ? 0.0 : vgs; vbs = (fabs(vbs) < SHOW_EPS_QUANT) ? 0.0 : vbs; vgb = (fabs(vgb) < SHOW_EPS_QUANT) ? 0.0 : vgb; switch (model->HSMHV_show) { case 1: if (isFirst) printf("Vds Ids\n"); printf("%e %e\n", model->HSMHV_type*vds, here->HSMHV_mode*here->HSMHV_ids); break; case 2: if (isFirst) printf("Vgs Ids\n"); printf("%e %e\n", model->HSMHV_type*vgs, here->HSMHV_mode*here->HSMHV_ids); break; case 3: if (isFirst) printf("Vgs log10(|Ids|)\n"); printf("%e %e\n", model->HSMHV_type*vgs, log10(here->HSMHV_ids)); break; case 4: if (isFirst) printf("log10(|Ids|) gm/|Ids|\n"); if (here->HSMHV_ids == 0.0) printf("I can't show gm/Ids - log10(Ids), because Ids = 0.\n"); else printf("%e %e\n", log10(here->HSMHV_ids), here->HSMHV_gm/here->HSMHV_ids); break; case 5: if (isFirst) printf("Vds gds\n"); printf("%e %e\n", model->HSMHV_type*vds, here->HSMHV_gds); break; case 6: if (isFirst) printf("Vgs gm\n"); printf("%e %e\n", model->HSMHV_type*vgs, here->HSMHV_gm); break; case 7: if (isFirst) printf("Vbs gbs\n"); printf("%e %e\n", model->HSMHV_type*vbs, here->HSMHV_gmbs); break; case 8: if (isFirst) printf("Vgs Cgg\n"); printf("%e %e\n", model->HSMHV_type*vgs, here->HSMHV_cggb); break; case 9: if (isFirst) printf("Vgs Cgs\n"); printf("%e %e\n", model->HSMHV_type*vgs, here->HSMHV_cgsb); break; case 10: if (isFirst) printf("Vgs Cgd\n"); printf("%e %e\n", model->HSMHV_type*vgs, here->HSMHV_cgdb); break; case 11: if (isFirst) printf("Vgs Cgb\n"); printf("%e %e\n", model->HSMHV_type*vgs, -(here->HSMHV_cggb+here->HSMHV_cgsb+here->HSMHV_cgdb)); break; case 12: if (isFirst) printf("Vds Csg\n"); printf("%e %e\n", model->HSMHV_type*vds, -(here->HSMHV_cggb+here->HSMHV_cbgb+here->HSMHV_cdgb)); break; case 13: if (isFirst) printf("Vds Cdg\n"); printf("%e %e\n", model->HSMHV_type*vds, here->HSMHV_cdgb); break; case 14: if (isFirst) printf("Vds Cbg\n"); printf("%e %e\n", model->HSMHV_type*vds, here->HSMHV_cbgb); break; case 15: if (isFirst) printf("Vds Cgg\n"); printf("%e %e\n", model->HSMHV_type*vds, here->HSMHV_cggb); break; case 16: if (isFirst) printf("Vds Cgs\n"); printf("%e %e\n", model->HSMHV_type*vds, here->HSMHV_cgsb); break; case 17: if (isFirst) printf("Vds Cgd\n"); printf("%e %e\n", model->HSMHV_type*vds, here->HSMHV_cgdb); break; case 18: if (isFirst) printf("Vds Cgb\n"); printf("%e %e\n", model->HSMHV_type*vds, -(here->HSMHV_cggb+here->HSMHV_cgsb+here->HSMHV_cgdb)); break; case 19: if (isFirst) printf("Vgs Csg\n"); printf("%e %e\n", model->HSMHV_type*vgs, -(here->HSMHV_cggb+here->HSMHV_cbgb+here->HSMHV_cdgb)); break; case 20: if (isFirst) printf("Vgs Cdg\n"); printf("%e %e\n", model->HSMHV_type*vgs, here->HSMHV_cdgb); break; case 21: if (isFirst) printf("Vgs Cbg\n"); printf("%e %e\n", model->HSMHV_type*vgs, here->HSMHV_cbgb); break; case 22: if (isFirst) printf("Vgb Cgb\n"); printf("%e %e\n", model->HSMHV_type*vgb, -(here->HSMHV_cggb+here->HSMHV_cgsb+here->HSMHV_cgdb)); break; case 50: if (isFirst) printf("Vgs Vds Vbs Vgb Ids log10(|Ids|) gm/|Ids| gm gds gbs Cgg Cgs Cgb Cgd Csg Cbg Cdg\n"); printf("%e %e %e %e %e %e %e %e %e %e %e %e %e %e %e %e %e\n", model->HSMHV_type*vgs, model->HSMHV_type*vds, model->HSMHV_type*vbs, model->HSMHV_type*vgb, here->HSMHV_mode*here->HSMHV_ids, log10(here->HSMHV_ids), here->HSMHV_gm/here->HSMHV_ids, here->HSMHV_gm, here->HSMHV_gds, here->HSMHV_gmbs, here->HSMHV_cggb, here->HSMHV_cgsb, -(here->HSMHV_cggb+here->HSMHV_cgsb+here->HSMHV_cgdb), here->HSMHV_cgdb, -(here->HSMHV_cggb+here->HSMHV_cbgb+here->HSMHV_cdgb), here->HSMHV_cbgb, here->HSMHV_cdgb); break; default: /* printf("There is no physical value corrsponding to %d\n", flag); */ break; } } int HSMHVload( GENmodel *inModel, register CKTcircuit *ckt) /* actually load the current value into the * sparse matrix previously provided */ { register HSMHVmodel *model = (HSMHVmodel*)inModel; register HSMHVinstance *here; HSMHVbinningParam *pParam; /* HSMHVmodelMKSParam *modelMKS ;*/ /* HSMHVhereMKSParam *hereMKS ;*/ /* node voltages */ #define XDIM 14 double x[XDIM] ; /* branch voltages */ double vbd=0.0, vbs=0.0, vds=0.0, vgb=0.0, vgd=0.0, vgdo=0.0, vgs=0.0 ; double vdbs=0.0, vsbs=0.0, vdbd=0.0 ; double vges=0.0, vged=0.0, vgedo=0.0 ; double vbs_jct=0.0, vbd_jct=0.0; double deltemp = 0.0 , deltemp_old = 0.0 ; double vggp=0, vddp=0, vssp=0, vbpb=0, vbpsb=0, vbpdb=0 ; double vdse=0.0, vgse=0.0, vbse=0.0 ; double vsubs=0.0 ; /* substrate bias */ double ivds=0.0, ivgs=0.0, ivbs=0.0 ; double ivgse=0.0, ivdse=0.0, ivbse=0.0 ; /* delta of branch voltages */ double delvbs=0.0, delvds=0.0, delvgs=0.0, delvsbs=0.0, delvdbd=0.0, deldeltemp = 0.0 ; double delvdse=0.0, delvgse=0.0, delvbse=0.0, delvddp=0.0, delvssp=0.0, delvggp=0.0, delvbpb=0.0, delvbpdb=0.0, delvbpsb =0.0 ; double delvsubs=0.0; /* substrate bias change */ /* branch currents */ double Ids=0.0, gds=0.0, gm=0.0, gmbs=0.0, gmT=0.0, gds_ext=0.0, gm_ext=0.0, gmbs_ext=0.0 ; double Igd=0.0, dIgd_dVd=0.0, dIgd_dVg=0.0, dIgd_dVb=0.0, dIgd_dVs=0.0, dIgd_dT=0.0 ; double Igs=0.0, dIgs_dVd=0.0, dIgs_dVg=0.0, dIgs_dVb=0.0, dIgs_dVs=0.0, dIgs_dT=0.0 ; double Igb=0.0, dIgb_dVd=0.0, dIgb_dVg=0.0, dIgb_dVb=0.0, dIgb_dVs=0.0, dIgb_dT=0.0 ; double Isub=0.0, dIsub_dVds=0.0, dIsub_dVgs=0.0, dIsub_dVbs=0.0, dIsub_dT=0.0 ; double Isubs=0.0, dIsubs_dVds=0.0, dIsubs_dVgs=0.0, dIsubs_dVbs=0.0, dIsubs_dT=0.0 ; double dIsub_dVdse=0.0, dIsubs_dVdse=0.0 ; double Igidl=0.0, dIgidl_dVds=0.0, dIgidl_dVgs=0.0, dIgidl_dVbs=0.0, dIgidl_dT=0.0 ; double Igisl=0.0, dIgisl_dVds=0.0, dIgisl_dVgs=0.0, dIgisl_dVbs=0.0, dIgisl_dT=0.0 ; double Ibd=0.0, Gbd=0.0, Gbdt=0.0 ; double Ibs=0.0, Gbs=0.0, Gbst=0.0 ; double Iddp=0.0, dIddp_dVddp=0.0, dIddp_dVdse=0.0, dIddp_dVgse=0.0, dIddp_dVbse=0.0, dIddp_dVsubs=0.0, dIddp_dT =0.0 ; double Issp=0.0, dIssp_dVssp=0.0, dIssp_dVdse=0.0, dIssp_dVgse=0.0, dIssp_dVbse=0.0, dIssp_dVsubs=0.0, dIssp_dT =0.0 ; double Iggp=0.0, dIggp_dVggp =0.0 ; double Ibpb=0.0, dIbpb_dVbpb =0.0 ; double Ibpdb=0.0, dIbpdb_dVbpdb =0.0 ; double Ibpsb=0.0, dIbpsb_dVbpsb =0.0 ; double Ith=0.0, dIth_dT =0.0 ; /* displacement currents */ double cq_d=0.0, cq_dP=0.0, cq_g=0.0, cq_gP=0.0, cq_s=0.0, cq_sP=0.0, cq_bP=0.0, cq_b=0.0, cq_db=0.0, cq_sb=0.0, cq_t=0.0 ; double cq_dE=0.0, cq_gE=0.0, cq_sE=0.0, cq_bE=0.0 ; /* node currents */ double cur_d=0.0, cur_dP=0.0, cur_g=0.0, cur_gP=0.0, cur_s=0.0, cur_sP=0.0, cur_bP=0.0, cur_b=0.0, cur_db=0.0, cur_sb=0.0, cur_t=0.0 ; double i_d=0.0, i_dP=0.0, i_g=0.0, i_gP=0.0, i_s=0.0, i_sP=0.0, i_bP=0.0, i_b=0.0, i_db=0.0, i_sb=0.0, i_t=0.0 ; /* resistances and conductances */ double Rd=0.0, dRd_dVdse=0.0, dRd_dVgse=0.0, dRd_dVbse=0.0, dRd_dVsubs=0.0, dRd_dT=0.0 ; double Rs=0.0, dRs_dVdse=0.0, dRs_dVgse=0.0, dRs_dVbse=0.0, dRs_dVsubs=0.0, dRs_dT=0.0 ; double GD=0.0, GD_dVds=0.0, GD_dVgs=0.0, GD_dVbs=0.0, GD_dVsubs=0.0, GD_dT=0.0 ; double GS=0.0, GS_dVds=0.0, GS_dVgs=0.0, GS_dVbs=0.0, GS_dVsubs=0.0, GS_dT=0.0 ; double Gth=0.0 ; double GG=0.0, GRBPD=0.0, GRBPS=0.0, GRBPB=0.0; /* charges */ double Qd=0.0, dQd_dVds=0.0, dQd_dVgs=0.0, dQd_dVbs=0.0, dQd_dT=0.0 ; double Qg=0.0, dQg_dVds=0.0, dQg_dVgs=0.0, dQg_dVbs=0.0, dQg_dT=0.0 ; double Qs=0.0, dQs_dVds=0.0, dQs_dVgs=0.0, dQs_dVbs=0.0, dQs_dT=0.0 ; double Qb=0.0, dQb_dVds=0.0, dQb_dVgs=0.0, dQb_dVbs=0.0, dQb_dT=0.0 ; double Qbd=0.0, Cbd=0.0, Cbdt=0.0, Qbs=0.0, Cbs=0.0, Cbst=0.0 ; double Qth=0.0, Cth =0.0 ; double Qfd=0.0, dQfd_dVdse=0.0, dQfd_dVgse=0.0, dQfd_dVbse=0.0, dQfd_dT=0.0 ; double Qfs=0.0, dQfs_dVdse=0.0, dQfs_dVgse=0.0, dQfs_dVbse=0.0, dQfs_dT=0.0 ; double Qdext=0.0, dQdext_dVdse=0.0, dQdext_dVgse=0.0, dQdext_dVbse=0.0, dQdext_dT=0.0 ; double Qgext=0.0, dQgext_dVdse=0.0, dQgext_dVgse=0.0, dQgext_dVbse=0.0, dQgext_dT=0.0 ; double /*Qsext=0.0,*/ dQsext_dVdse=0.0, dQsext_dVgse=0.0, dQsext_dVbse=0.0, dQsext_dT=0.0 ; double Qbext=0.0, dQbext_dVdse=0.0, dQbext_dVgse=0.0, dQbext_dVbse=0.0, dQbext_dT=0.0 ; /* 5th substrate node */ int flg_subNode = 0 ; /* self heating */ double Veffpower=0.0, dVeffpower_dVds=0.0, dVeffpower_dVdse =0.0 ; double P=0.0, dP_dVds=0.0, dP_dVgs=0.0, dP_dVbs=0.0, dP_dT =0.0, dP_dVdse=0.0, dP_dVgse=0.0, dP_dVbse =0.0 ; int flg_tempNode = 0 ; double T0 , T1 , T2 ; #define SHE_MAX_dlt 0.1 #define C_RTH_MIN 1.0e-4 double TMF1 , TMF2 ; /*---------------------------------------------------* * smoothUpper: ceiling. * y = xmax - 0.5 ( arg + sqrt( arg^2 + 4 xmax delta ) ) * arg = xmax - x - delta *-----------------*/ #define Fn_SU( y , x , xmax , delta , dx ) { \ TMF1 = ( xmax ) - ( x ) - ( delta ) ; \ TMF2 = 4.0 * ( xmax ) * ( delta) ; \ TMF2 = TMF2 > 0.0 ? TMF2 : -( TMF2 ) ; \ TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \ dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \ y = ( xmax ) - 0.5 * ( TMF1 + TMF2 ) ; \ } /* NQS related variables */ int flg_nqs =0 ; double Qi_nqs=0.0, Qb_nqs=0.0, delQi_nqs=0.0, delQb_nqs=0.0, i_qi=0.0, i_qb=0.0, cq_qi=0.0, cq_qb=0.0, cur_qi=0.0, cur_qb =0.0 ; double Iqi_nqs=0.0, dIqi_nqs_dVds=0.0, dIqi_nqs_dVgs=0.0, dIqi_nqs_dVbs=0.0, dIqi_nqs_dT=0.0, dIqi_nqs_dQi_nqs =0.0 ; double Iqb_nqs=0.0, dIqb_nqs_dVds=0.0, dIqb_nqs_dVgs=0.0, dIqb_nqs_dVbs=0.0, dIqb_nqs_dT=0.0, dIqb_nqs_dQb_nqs =0.0 ; double Qd_nqs=0.0, dQd_nqs_dVds=0.0, dQd_nqs_dVgs=0.0, dQd_nqs_dVbs=0.0, dQd_nqs_dT=0.0, dQd_nqs_dQi_nqs =0.0 ; double Qs_nqs=0.0, dQs_nqs_dVds=0.0, dQs_nqs_dVgs=0.0, dQs_nqs_dVbs=0.0, dQs_nqs_dT=0.0, dQs_nqs_dQi_nqs =0.0 ; double Qg_nqs=0.0, dQg_nqs_dQi_nqs=0.0, dQg_nqs_dQb_nqs =0.0 ; double tau=0.0, dtau_dVds=0.0, dtau_dVgs=0.0, dtau_dVbs=0.0, dtau_dT =0.0 ; double taub=0.0, dtaub_dVds=0.0, dtaub_dVgs=0.0, dtaub_dVbs=0.0, dtaub_dT =0.0 ; double Qdrat=0.0, dQdrat_dVds=0.0, dQdrat_dVgs=0.0, dQdrat_dVbs=0.0, dQdrat_dT =0.0 ; double Qi=0.0, dQi_dVds=0.0, dQi_dVgs=0.0, dQi_dVbs=0.0, dQi_dT =0.0 ; double Qbulk=0.0, dQbulk_dVds=0.0, dQbulk_dVgs=0.0, dQbulk_dVbs=0.0, dQbulk_dT =0.0 ; /* output related variables */ double dQi_nqs_dVds=0.0, dQi_nqs_dVgs=0.0, dQi_nqs_dVbs=0.0, dQb_nqs_dVds=0.0, dQb_nqs_dVgs=0.0, dQb_nqs_dVbs=0.0 ; double cgdb_nqs=0.0, cggb_nqs=0.0, cgsb_nqs=0.0, cbdb_nqs=0.0, cbgb_nqs=0.0, cbsb_nqs=0.0, cddb_nqs=0.0, cdgb_nqs=0.0, cdsb_nqs=0.0 ; double cgdb=0.0, cggb=0.0, cgsb=0.0, cbdb=0.0, cbgb=0.0, cbsb=0.0, cddb=0.0, cdgb=0.0, cdsb=0.0 ; /* rows of conductance and capacitance matrix stamp */ double ydc_d[XDIM], ydc_dP[XDIM], ydc_g[XDIM], ydc_gP[XDIM], ydc_s[XDIM], ydc_sP[XDIM] ; double ydc_bP[XDIM], ydc_b[XDIM], ydc_db[XDIM], ydc_sb[XDIM], ydc_t[XDIM], ydc_qi[XDIM], ydc_qb[XDIM] ; double ydyn_d[XDIM], ydyn_dP[XDIM], ydyn_g[XDIM], ydyn_gP[XDIM], ydyn_s[XDIM], ydyn_sP[XDIM] ; double ydyn_bP[XDIM], ydyn_b[XDIM], ydyn_db[XDIM], ydyn_sb[XDIM], ydyn_t[XDIM], ydyn_qi[XDIM], ydyn_qb[XDIM] ; /* limiter, bypass, and convergence */ int ByPass=0, Check=0, Check1=0, Check2=0, Check3=0 ; double von=0.0, limval =0.0 ; double i_dP_hat=0.0, i_gP_hat=0.0, i_sP_hat=0.0, i_db_hat=0.0, i_sb_hat =0.0 ; #define LIM_TOL 1.0e0 #define LIM_TOL2 1.0e0 /* predictor and numerical integration stuff */ double ag0=0.0, xfact=0.0 ; double ceq=0.0, geq=0.0 ; int ChargeComputationNeeded = ((ckt->CKTmode & (MODEAC | MODETRAN | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) ? 1 : 0; int showPhysVal=0 ; int isConv=0 ; double vds_pre=0.0 ; int i=0, noncon_old=0 ; #define dNode 0 #define dNodePrime 1 #define gNode 2 #define gNodePrime 3 #define sNode 4 #define sNodePrime 5 #define bNodePrime 6 #define bNode 7 #define dbNode 8 #define sbNode 9 #define subNode 10 #define tempNode 11 #define qiNode 12 #define qbNode 13 #define lastNode 13 /* must be the last node! */ #define SPICE_rhs 1 /* set to 0 if rhs to be loaded for standard Newton */ /* set to 1 if rhs_eq to be loaded, e.g. for SPICE */ if (SPICE_rhs) { for (i=0; imodelMKS ;*/ for (here = HSMHVinstances(model); here != NULL ; here = HSMHVnextInstance(here)) { /* hereMKS = &here->hereMKS ;*/ pParam = &here->pParam ; showPhysVal = 0; Check=1; ByPass = 0; vsubs = 0.0 ; /* substrate bias */ deltemp = 0.0 ; noncon_old = ckt->CKTnoncon; flg_nqs = model->HSMHV_conqs ; flg_subNode = here->HSMHVsubNode ; /* if flg_subNode > 0, external(/internal) substrate node exists */ flg_tempNode = here->HSMHVtempNode ; /* if flg_tempNode > 0, external/internal temperature node exists */ #ifdef DEBUG_HISIMHVLD_VX printf("mode = %x\n", ckt->CKTmode); printf("Vd Vg Vs Vb %e %e %e %e\n", *(ckt->CKTrhsOld+here->HSMHVdNodePrime), *(ckt->CKTrhsOld+here->HSMHVgNodePrime), *(ckt->CKTrhsOld+here->HSMHVsNodePrime), *(ckt->CKTrhsOld+here->HSMHVbNodePrime)); #endif if ( ckt->CKTmode & MODEINITSMSIG ) { vbs = *(ckt->CKTstate0 + here->HSMHVvbs); vgs = *(ckt->CKTstate0 + here->HSMHVvgs); vds = *(ckt->CKTstate0 + here->HSMHVvds); vges = *(ckt->CKTstate0 + here->HSMHVvges); vdbd = *(ckt->CKTstate0 + here->HSMHVvdbd); vsbs = *(ckt->CKTstate0 + here->HSMHVvsbs); if (flg_subNode > 0) vsubs = *(ckt->CKTstate0 + here->HSMHVvsubs); if( flg_tempNode > 0 ){ deltemp = *(ckt->CKTstate0 + here->HSMHVdeltemp); } vdse = *(ckt->CKTstate0 + here->HSMHVvdse) ; vgse = *(ckt->CKTstate0 + here->HSMHVvgse) ; vbse = *(ckt->CKTstate0 + here->HSMHVvbse) ; if ( flg_nqs ) { Qi_nqs = *(ckt->CKTstate0 + here->HSMHVqi_nqs) ; Qb_nqs = *(ckt->CKTstate0 + here->HSMHVqb_nqs) ; } else { Qi_nqs = 0.0 ; Qb_nqs = 0.0 ; } /* printf("HSMHV_load: (from state0) vds.. = %e %e %e %e %e %e\n", vds,vgs,vbs,vdse,vgse,vbse); */ } else if ( ckt->CKTmode & MODEINITTRAN ) { /* #include "printf_ld_converged.inc" */ vbs = *(ckt->CKTstate1 + here->HSMHVvbs); vgs = *(ckt->CKTstate1 + here->HSMHVvgs); vds = *(ckt->CKTstate1 + here->HSMHVvds); vges = *(ckt->CKTstate1 + here->HSMHVvges); vdbd = *(ckt->CKTstate1 + here->HSMHVvdbd); vsbs = *(ckt->CKTstate1 + here->HSMHVvsbs); if (flg_subNode > 0) vsubs = *(ckt->CKTstate1 + here->HSMHVvsubs); if( flg_tempNode > 0 ){ deltemp = *(ckt->CKTstate1 + here->HSMHVdeltemp); } vdse = *(ckt->CKTstate1 + here->HSMHVvdse) ; vgse = *(ckt->CKTstate1 + here->HSMHVvgse) ; vbse = *(ckt->CKTstate1 + here->HSMHVvbse) ; if ( flg_nqs ) { Qi_nqs = *(ckt->CKTstate1 + here->HSMHVqi_nqs) ; Qb_nqs = *(ckt->CKTstate1 + here->HSMHVqb_nqs) ; } else { Qi_nqs = 0.0 ; Qb_nqs = 0.0 ; } } else if ( (ckt->CKTmode & MODEINITJCT) && !here->HSMHV_off ) { vds = model->HSMHV_type * here->HSMHV_icVDS; vgs = vges = model->HSMHV_type * here->HSMHV_icVGS; vbs = vsbs = model->HSMHV_type * here->HSMHV_icVBS; vdbd = 0.0 ; if ( (vds == 0.0) && (vgs == 0.0) && (vbs == 0.0) && ( (ckt->CKTmode & (MODETRAN|MODEAC|MODEDCOP|MODEDCTRANCURVE)) || !(ckt->CKTmode & MODEUIC) ) ) { /* set biases for starting analysis */ vbs = vdbd = vsbs = 0.0; vgs = vges = 0.1; vds = 0.1; } if (flg_subNode > 0) vsubs = 0.0; if( flg_tempNode > 0 ) deltemp=0.0; vdse = vds ; vgse = vgs ; Qi_nqs = Qb_nqs = 0.0 ; } else if ( ( ckt->CKTmode & (MODEINITJCT | MODEINITFIX) ) && here->HSMHV_off ) { vbs = vgs = vds = 0.0; vges = 0.0; vdbd = vsbs = 0.0; if (flg_subNode > 0) vsubs = 0.0; if( flg_tempNode > 0 ) deltemp=0.0; vdse = vds ; vgse = vgs ; Qi_nqs = Qb_nqs = 0.0 ; } else { #ifndef PREDICTOR /* BSIM3 style */ if (ckt->CKTmode & MODEINITPRED) { /* #include "printf_ld_converged.inc" */ /* if (here->HSMHV_mode > 0) { gds_ext = here->HSMHV_dIds_dVdse ; } else { gds_ext = + (here->HSMHV_dIds_dVdse + here->HSMHV_dIds_dVgse + here->HSMHV_dIds_dVbse) ; } printf("zzz %e %e\n",ckt->CKTtime,gds_ext) ; */ xfact = ckt->CKTdelta / ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->HSMHVvbs) = *(ckt->CKTstate1 + here->HSMHVvbs); vbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHVvbs)) -(xfact * (*(ckt->CKTstate2 + here->HSMHVvbs))); *(ckt->CKTstate0 + here->HSMHVvgs) = *(ckt->CKTstate1 + here->HSMHVvgs); vgs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHVvgs)) -(xfact * (*(ckt->CKTstate2 + here->HSMHVvgs))); *(ckt->CKTstate0 + here->HSMHVvds) = *(ckt->CKTstate1 + here->HSMHVvds); vds = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHVvds)) -(xfact * (*(ckt->CKTstate2 + here->HSMHVvds))); *(ckt->CKTstate0 + here->HSMHVvbd) = *(ckt->CKTstate0 + here->HSMHVvbs)- *(ckt->CKTstate0 + here->HSMHVvds); *(ckt->CKTstate0 + here->HSMHVvges) = *(ckt->CKTstate1 + here->HSMHVvges); vges = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHVvges)) -(xfact * (*(ckt->CKTstate2 + here->HSMHVvges))); *(ckt->CKTstate0 + here->HSMHVvdbd) = *(ckt->CKTstate1 + here->HSMHVvdbd); vdbd = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHVvdbd)) - (xfact * (*(ckt->CKTstate2 + here->HSMHVvdbd))); *(ckt->CKTstate0 + here->HSMHVvdbs) = *(ckt->CKTstate0 + here->HSMHVvdbd) + *(ckt->CKTstate0 + here->HSMHVvds); *(ckt->CKTstate0 + here->HSMHVvsbs) = *(ckt->CKTstate1 + here->HSMHVvsbs); vsbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHVvsbs)) - (xfact * (*(ckt->CKTstate2 + here->HSMHVvsbs))); if (flg_subNode > 0){ vsubs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHVvsubs)) - ( xfact * (*(ckt->CKTstate2 + here->HSMHVvsubs))); } if( flg_tempNode > 0 ){ deltemp = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHVdeltemp)) - ( xfact * (*(ckt->CKTstate2 + here->HSMHVdeltemp))); *(ckt->CKTstate0 + here->HSMHVdeltemp) = *(ckt->CKTstate1 + here->HSMHVdeltemp); } *(ckt->CKTstate0 + here->HSMHVvdse) = *(ckt->CKTstate1 + here->HSMHVvdse); vdse = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHVvdse)) -(xfact * (*(ckt->CKTstate2 + here->HSMHVvdse))); *(ckt->CKTstate0 + here->HSMHVvgse) = *(ckt->CKTstate1 + here->HSMHVvgse); vgse = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHVvgse)) -(xfact * (*(ckt->CKTstate2 + here->HSMHVvgse))); *(ckt->CKTstate0 + here->HSMHVvbse) = *(ckt->CKTstate1 + here->HSMHVvbse); vbse = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHVvbse)) -(xfact * (*(ckt->CKTstate2 + here->HSMHVvbse))); if (flg_nqs) { *(ckt->CKTstate0 + here->HSMHVqi_nqs) = *(ckt->CKTstate1 + here->HSMHVqi_nqs); Qi_nqs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHVqi_nqs)) -(xfact * (*(ckt->CKTstate2 + here->HSMHVqi_nqs))); *(ckt->CKTstate0 + here->HSMHVqb_nqs) = *(ckt->CKTstate1 + here->HSMHVqb_nqs); Qb_nqs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSMHVqb_nqs)) -(xfact * (*(ckt->CKTstate2 + here->HSMHVqb_nqs))); } else { Qi_nqs = Qb_nqs = 0.0 ; } } else { #endif /* PREDICTOR */ /* here->HSMHV_time = ckt->CKTtime; /\* for debug print *\/ */ /* get biases from CKT */ vbs = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVbNodePrime) - *(ckt->CKTrhsOld+here->HSMHVsNodePrime)); vgs = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVgNodePrime) - *(ckt->CKTrhsOld+here->HSMHVsNodePrime)); vds = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVdNodePrime) - *(ckt->CKTrhsOld+here->HSMHVsNodePrime)); vges = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVgNode) - *(ckt->CKTrhsOld+here->HSMHVsNodePrime)); vdbd = model->HSMHV_type * (*(ckt->CKTrhsOld + here->HSMHVdbNode) - *(ckt->CKTrhsOld + here->HSMHVdNode)); vsbs = model->HSMHV_type * (*(ckt->CKTrhsOld + here->HSMHVsbNode) - *(ckt->CKTrhsOld + here->HSMHVsNode)); if (flg_subNode > 0){ vsubs = model->HSMHV_type * (*(ckt->CKTrhsOld + here->HSMHVsubNode) - *(ckt->CKTrhsOld + here->HSMHVsNode)); } if( flg_tempNode > 0 ){ deltemp = *(ckt->CKTrhsOld + here->HSMHVtempNode); } vbse = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVbNodePrime) - *(ckt->CKTrhsOld+here->HSMHVsNode)); vgse = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVgNodePrime) - *(ckt->CKTrhsOld+here->HSMHVsNode)); vdse = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVdNode) - *(ckt->CKTrhsOld+here->HSMHVsNode)); if ( flg_nqs ) { Qi_nqs = *(ckt->CKTrhsOld + here->HSMHVqiNode); Qb_nqs = *(ckt->CKTrhsOld + here->HSMHVqbNode); } else { Qi_nqs = Qb_nqs = 0.0 ; } #ifndef PREDICTOR } #endif /* PREDICTOR */ /* printf("HSMHV_load: (from rhs ) vds.. = %e %e %e %e %e %e\n", vds,vgs,vbs,vdse,vgse,vbse); */ vbd = vbs - vds; vgd = vgs - vds; vged = vges - vds; vdbs = vdbd + vdse; vgdo = *(ckt->CKTstate0 + here->HSMHVvgs) - *(ckt->CKTstate0 + here->HSMHVvds); vgedo = *(ckt->CKTstate0 + here->HSMHVvges) - *(ckt->CKTstate0 + here->HSMHVvds); vds_pre = vds; #ifndef NOBYPASS /* start of bypass section ... no bypass in case of selfheating */ if ( !(ckt->CKTmode & MODEINITPRED) && ckt->CKTbypass && !model->HSMHV_coselfheat) { delvds = vds - *(ckt->CKTstate0 + here->HSMHVvds) ; delvgs = vgs - *(ckt->CKTstate0 + here->HSMHVvgs) ; delvbs = vbs - *(ckt->CKTstate0 + here->HSMHVvbs) ; delvdse = vdse - *(ckt->CKTstate0 + here->HSMHVvdse) ; delvgse = vgse - *(ckt->CKTstate0 + here->HSMHVvgse) ; delvbse = vbse - *(ckt->CKTstate0 + here->HSMHVvbse) ; delvdbd = vdbd - *(ckt->CKTstate0 + here->HSMHVvdbd) ; delvsbs = vsbs - *(ckt->CKTstate0 + here->HSMHVvsbs) ; if (flg_subNode > 0) delvsubs = vsubs - *(ckt->CKTstate0 + here->HSMHVvsubs) ; /* substrate bias change */ deldeltemp = deltemp - *(ckt->CKTstate0 + here->HSMHVdeltemp) ; if (flg_nqs) { delQi_nqs = Qi_nqs - *(ckt->CKTstate0 + here->HSMHVqi_nqs) ; delQb_nqs = Qb_nqs - *(ckt->CKTstate0 + here->HSMHVqb_nqs) ; } else { delQi_nqs = delQb_nqs = 0.0 ; } /* now let's see if we can bypass */ /* ... first perform the easy cheap bypass checks ... */ /* 1 2 3 3 3 4 4 4 5 543 2 1 */ if ( ( fabs(delvds ) < ckt->CKTreltol * MAX(fabs(vds ),fabs(*(ckt->CKTstate0 + here->HSMHVvds ))) + ckt->CKTvoltTol ) && ( fabs(delvgs ) < ckt->CKTreltol * MAX(fabs(vgs ),fabs(*(ckt->CKTstate0 + here->HSMHVvgs ))) + ckt->CKTvoltTol ) && ( fabs(delvbs ) < ckt->CKTreltol * MAX(fabs(vbs ),fabs(*(ckt->CKTstate0 + here->HSMHVvbs ))) + ckt->CKTvoltTol ) && ( fabs(delvdse) < ckt->CKTreltol * MAX(fabs(vdse),fabs(*(ckt->CKTstate0 + here->HSMHVvdse))) + ckt->CKTvoltTol ) && ( fabs(delvgse) < ckt->CKTreltol * MAX(fabs(vgse),fabs(*(ckt->CKTstate0 + here->HSMHVvgse))) + ckt->CKTvoltTol ) && ( fabs(delvbse) < ckt->CKTreltol * MAX(fabs(vbse),fabs(*(ckt->CKTstate0 + here->HSMHVvbse))) + ckt->CKTvoltTol ) && ( fabs(delvdbd) < ckt->CKTreltol * MAX(fabs(vdbd),fabs(*(ckt->CKTstate0 + here->HSMHVvdbd))) + ckt->CKTvoltTol ) && ( fabs(delvsbs) < ckt->CKTreltol * MAX(fabs(vsbs),fabs(*(ckt->CKTstate0 + here->HSMHVvsbs))) + ckt->CKTvoltTol ) && ( fabs(delvsubs) < ckt->CKTreltol * MAX(fabs(vsubs),fabs(*(ckt->CKTstate0 + here->HSMHVvsubs))) + ckt->CKTvoltTol ) && ( fabs(delQi_nqs) < ckt->CKTreltol * fabs(Qi_nqs) + ckt->CKTchgtol*ckt->CKTabstol + 1.0e-20 ) && ( fabs(delQb_nqs) < ckt->CKTreltol * fabs(Qb_nqs) + ckt->CKTchgtol*ckt->CKTabstol + 1.0e-20 ) ) /* 1.0e-20: heuristic value, must be small enough */ /* to ensure that bypass does not destroy convergence */ { /* ... the first bypass checks are passed -> now do the more expensive checks ...*/ if ( here->HSMHV_mode > 0 ) { /* forward mode */ Ids = here->HSMHV_ids ; gds = here->HSMHV_dIds_dVdsi ; gm = here->HSMHV_dIds_dVgsi ; gmbs = here->HSMHV_dIds_dVbsi ; gmT = (flg_tempNode > 0) ? here->HSMHV_dIds_dTi : 0.0 ; gmbs_ext = here->HSMHV_dIds_dVbse; gds_ext = here->HSMHV_dIds_dVdse ; gm_ext = here->HSMHV_dIds_dVgse; Isub = here->HSMHV_isub ; dIsub_dVds = here->HSMHV_dIsub_dVdsi ; dIsub_dVgs = here->HSMHV_dIsub_dVgsi ; dIsub_dVbs = here->HSMHV_dIsub_dVbsi ; dIsub_dT = (flg_tempNode > 0) ? here->HSMHV_dIsub_dTi : 0.0 ; dIsub_dVdse = here->HSMHV_dIsub_dVdse ; Isubs = 0.0 ; dIsubs_dVds = 0.0 ; dIsubs_dVgs = 0.0 ; dIsubs_dVbs = 0.0 ; dIsubs_dT = 0.0 ; dIsubs_dVdse = 0.0 ; Igidl = here->HSMHV_igidl ; dIgidl_dVds = here->HSMHV_dIgidl_dVdsi ; dIgidl_dVgs = here->HSMHV_dIgidl_dVgsi ; dIgidl_dVbs = here->HSMHV_dIgidl_dVbsi ; dIgidl_dT = (flg_tempNode > 0) ? here->HSMHV_dIgidl_dTi : 0.0 ; Igisl = here->HSMHV_igisl ; dIgisl_dVds = here->HSMHV_dIgisl_dVdsi ; dIgisl_dVgs = here->HSMHV_dIgisl_dVgsi ; dIgisl_dVbs = here->HSMHV_dIgisl_dVbsi ; dIgisl_dT = (flg_tempNode > 0) ? here->HSMHV_dIgisl_dTi : 0.0 ; Igd = here->HSMHV_igd ; dIgd_dVd = here->HSMHV_dIgd_dVdsi ; dIgd_dVg = here->HSMHV_dIgd_dVgsi ; dIgd_dVb = here->HSMHV_dIgd_dVbsi ; dIgd_dT = (flg_tempNode > 0) ? here->HSMHV_dIgd_dTi : 0.0 ; Igs = here->HSMHV_igs ; dIgs_dVd = here->HSMHV_dIgs_dVdsi ; dIgs_dVg = here->HSMHV_dIgs_dVgsi ; dIgs_dVb = here->HSMHV_dIgs_dVbsi ; dIgs_dT = (flg_tempNode > 0) ? here->HSMHV_dIgs_dTi : 0.0 ; Igb = here->HSMHV_igb ; dIgb_dVd = here->HSMHV_dIgb_dVdsi ; dIgb_dVg = here->HSMHV_dIgb_dVgsi ; dIgb_dVb = here->HSMHV_dIgb_dVbsi ; dIgb_dT = (flg_tempNode > 0) ? here->HSMHV_dIgb_dTi : 0.0 ; Ibd = here->HSMHV_ibd ; Gbd = here->HSMHV_gbd ; Gbdt = (flg_tempNode > 0) ? here->HSMHV_gbdT : 0.0 ; Ibs = here->HSMHV_ibs ; Gbs = here->HSMHV_gbs ; Gbst = (flg_tempNode > 0) ? here->HSMHV_gbsT : 0.0 ; } else { /* reverse mode */ Ids = - here->HSMHV_ids ; gds = + (here->HSMHV_dIds_dVdsi + here->HSMHV_dIds_dVgsi + here->HSMHV_dIds_dVbsi) ; gm = - here->HSMHV_dIds_dVgsi ; gmbs = - here->HSMHV_dIds_dVbsi ; gmT = (flg_tempNode > 0) ? - here->HSMHV_dIds_dTi : 0.0 ; gds_ext = + (here->HSMHV_dIds_dVdse + here->HSMHV_dIds_dVgse + here->HSMHV_dIds_dVbse) ; gm_ext = - here->HSMHV_dIds_dVgse; gmbs_ext = - here->HSMHV_dIds_dVbse; Isub = 0.0 ; dIsub_dVds = 0.0 ; dIsub_dVgs = 0.0 ; dIsub_dVbs = 0.0 ; dIsub_dT = 0.0 ; dIsub_dVdse = 0.0 ; Isubs = here->HSMHV_isub ; dIsubs_dVds = - (here->HSMHV_dIsub_dVdsi + here->HSMHV_dIsub_dVgsi + here->HSMHV_dIsub_dVbsi) ; dIsubs_dVgs = here->HSMHV_dIsub_dVgsi ; dIsubs_dVbs = here->HSMHV_dIsub_dVbsi ; dIsubs_dT = (flg_tempNode > 0) ? here->HSMHV_dIsub_dTi : 0.0 ; dIsubs_dVdse = - here->HSMHV_dIsub_dVdse ; /* = - (dIsub_dVdse + dIsub_dVbse + dIsub_dVgse) */ Igidl = here->HSMHV_igisl ; dIgidl_dVds = - (here->HSMHV_dIgisl_dVdsi + here->HSMHV_dIgisl_dVgsi + here->HSMHV_dIgisl_dVbsi) ; dIgidl_dVgs = here->HSMHV_dIgisl_dVgsi ; dIgidl_dVbs = here->HSMHV_dIgisl_dVbsi ; dIgidl_dT = (flg_tempNode > 0) ? here->HSMHV_dIgisl_dTi : 0.0 ; Igisl = here->HSMHV_igidl ; dIgisl_dVds = - (here->HSMHV_dIgidl_dVdsi + here->HSMHV_dIgidl_dVgsi + here->HSMHV_dIgidl_dVbsi) ; dIgisl_dVgs = here->HSMHV_dIgidl_dVgsi ; dIgisl_dVbs = here->HSMHV_dIgidl_dVbsi ; dIgisl_dT = (flg_tempNode > 0) ? here->HSMHV_dIgidl_dTi : 0.0 ; Igd = here->HSMHV_igd ; dIgd_dVd = - (here->HSMHV_dIgs_dVdsi + here->HSMHV_dIgs_dVgsi + here->HSMHV_dIgs_dVbsi) ; dIgd_dVg = here->HSMHV_dIgs_dVgsi ; dIgd_dVb = here->HSMHV_dIgs_dVbsi ; dIgd_dT = (flg_tempNode > 0) ? here->HSMHV_dIgs_dTi : 0.0 ; Igs = here->HSMHV_igs ; dIgs_dVd = - (here->HSMHV_dIgd_dVdsi + here->HSMHV_dIgd_dVgsi + here->HSMHV_dIgd_dVbsi) ; dIgs_dVg = here->HSMHV_dIgd_dVgsi ; dIgs_dVb = here->HSMHV_dIgd_dVbsi ; dIgs_dT = (flg_tempNode > 0) ? here->HSMHV_dIgd_dTi : 0.0 ; Igb = here->HSMHV_igb ; dIgb_dVd = - (here->HSMHV_dIgb_dVdsi + here->HSMHV_dIgb_dVgsi + here->HSMHV_dIgb_dVbsi) ; dIgb_dVg = here->HSMHV_dIgb_dVgsi ; dIgb_dVb = here->HSMHV_dIgb_dVbsi ; dIgb_dT = (flg_tempNode > 0) ? here->HSMHV_dIgb_dTi : 0.0 ; Ibd = here->HSMHV_ibd ; Gbd = here->HSMHV_gbd ; Gbdt = (flg_tempNode > 0) ? here->HSMHV_gbdT : 0.0 ; Ibs = here->HSMHV_ibs ; Gbs = here->HSMHV_gbs ; Gbst = (flg_tempNode > 0) ? here->HSMHV_gbsT : 0.0 ; } /* end of reverse mode */ /* for bypass control, only nonlinear static currents are considered: */ i_dP = Ids + Isub + Igidl - Igd ; i_dP_hat = i_dP + gm *delvgs + gds *delvds + gmbs *delvbs + gmT *deldeltemp + dIsub_dVgs *delvgs + dIsub_dVds *delvds + dIsub_dVbs *delvbs + dIsub_dT *deldeltemp + dIsub_dVdse*delvdse + dIgidl_dVgs*delvgs + dIgidl_dVds*delvds + dIgidl_dVbs*delvbs + dIgidl_dT*deldeltemp -(dIgd_dVg *delvgs + dIgd_dVd *delvds + dIgd_dVb *delvbs + dIgd_dT *deldeltemp) + gm_ext *delvgse + gds_ext *delvdse + gmbs_ext *delvbse ; i_gP = Igd + Igs + Igb ; i_gP_hat = i_gP + dIgd_dVg *delvgs + dIgd_dVd *delvds + dIgd_dVb *delvbs + dIgd_dT *deldeltemp + dIgs_dVg *delvgs + dIgs_dVd *delvds + dIgs_dVb *delvbs + dIgs_dT *deldeltemp + dIgb_dVg *delvgs + dIgb_dVd *delvds + dIgb_dVb *delvbs + dIgb_dT *deldeltemp ; i_sP =-Ids + Isubs + Igisl - Igs ; i_sP_hat = i_sP -(gm *delvgs + gds *delvds + gmbs *delvbs + gmT *deldeltemp) + dIsubs_dVgs*delvgs + dIsubs_dVds*delvds + dIsubs_dVbs*delvbs + dIsubs_dT*deldeltemp + dIsubs_dVdse*delvdse + dIgisl_dVgs*delvgs + dIgisl_dVds*delvds + dIgisl_dVbs*delvbs + dIgisl_dT*deldeltemp -(dIgs_dVg *delvgs + dIgs_dVd *delvds + dIgs_dVb *delvbs + dIgs_dT *deldeltemp) -(gm_ext *delvgse + gds_ext *delvdse + gmbs_ext *delvbse) ; i_db = Ibd ; i_db_hat = i_db + Gbd*delvdbd + Gbdt*deldeltemp ; i_sb = Ibs ; i_sb_hat = i_sb + Gbs*delvsbs + Gbst*deldeltemp ; /* ... second part of bypass checks: */ /* 1 2 3 3 3 4 4 4 43 2 1 */ if ( ( fabs(i_dP_hat - i_dP) < ckt->CKTreltol * MAX(fabs(i_dP_hat),fabs(i_dP)) + ckt->CKTabstol ) && ( fabs(i_gP_hat - i_gP) < ckt->CKTreltol * MAX(fabs(i_gP_hat),fabs(i_gP)) + ckt->CKTabstol ) && ( fabs(i_sP_hat - i_sP) < ckt->CKTreltol * MAX(fabs(i_sP_hat),fabs(i_sP)) + ckt->CKTabstol ) && ( fabs(i_db_hat - i_db) < ckt->CKTreltol * MAX(fabs(i_db_hat),fabs(i_db)) + ckt->CKTabstol ) && ( fabs(i_sb_hat - i_sb) < ckt->CKTreltol * MAX(fabs(i_sb_hat),fabs(i_sb)) + ckt->CKTabstol ) ) { /* bypass code */ vds = *(ckt->CKTstate0 + here->HSMHVvds ); vgs = *(ckt->CKTstate0 + here->HSMHVvgs ); vbs = *(ckt->CKTstate0 + here->HSMHVvbs ); vdse = *(ckt->CKTstate0 + here->HSMHVvdse); vgse = *(ckt->CKTstate0 + here->HSMHVvgse); vbse = *(ckt->CKTstate0 + here->HSMHVvbse); vdbd = *(ckt->CKTstate0 + here->HSMHVvdbd); vsbs = *(ckt->CKTstate0 + here->HSMHVvsbs); vsubs = *(ckt->CKTstate0 + here->HSMHVvsubs); deltemp = *(ckt->CKTstate0 + here->HSMHVdeltemp); if ( flg_nqs ) { Qi_nqs = *(ckt->CKTstate0 + here->HSMHVqi_nqs); Qb_nqs = *(ckt->CKTstate0 + here->HSMHVqb_nqs); } vges = *(ckt->CKTstate0 + here->HSMHVvges); vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; vged = vges - vds; vbs_jct = vsbs; vbd_jct = vdbd; /* linear branch currents */ vddp = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVdNode) - *(ckt->CKTrhsOld+here->HSMHVdNodePrime)); vggp = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVgNode) - *(ckt->CKTrhsOld+here->HSMHVgNodePrime)); vssp = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVsNode) - *(ckt->CKTrhsOld+here->HSMHVsNodePrime)); vbpb = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVbNodePrime) - *(ckt->CKTrhsOld+here->HSMHVbNode)); vbpdb = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVbNodePrime) - *(ckt->CKTrhsOld+here->HSMHVdbNode)); vbpsb = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVbNodePrime) - *(ckt->CKTrhsOld+here->HSMHVsbNode)); ByPass = 1; goto line755; } } } /* end of Bypass section */ #endif /*NOBYPASS*/ #ifdef DEBUG_HISIMHVLD_VX printf( "vbd_p = %12.5e\n" , vbd ); printf( "vbs_p = %12.5e\n" , vbs ); printf( "vgs_p = %12.5e\n" , vgs ); printf( "vds_p = %12.5e\n" , vds ); #endif /* start limiting of nonlinear branch voltages */ von = here->HSMHV_von; Check3 = 0 ; if(*(ckt->CKTstate0 + here->HSMHVvds) >= 0.0) { /* case vds>=0 for limiting */ limval = DEVfetlim(vgs, *(ckt->CKTstate0 + here->HSMHVvgs), von); if (vgs != limval) { vgs = limval ; Check3 = 1 ; } if (Check3) vds = vgs - vgd; limval = DEVlimvds(vds, *(ckt->CKTstate0 + here->HSMHVvds)); if (vds != limval) { vds = limval ; Check3 = 2 ; } vgd = vgs - vds; if (here->HSMHV_corg == 1) { limval = DEVfetlim(vges, *(ckt->CKTstate0 + here->HSMHVvges), von); if (vges != limval) { vges = limval ; Check3 = 3 ; } vged = vges - vds; } } else { /* case vds < 0 for limiting */ limval = DEVfetlim(vgd, vgdo, von); if (vgd != limval) { vgd = limval ; Check3 = 4 ; } if (Check3) vds = vgs - vgd; limval = -DEVlimvds(-vds, -(*(ckt->CKTstate0 + here->HSMHVvds))); if (vds != limval) { vds = limval ; Check3 = 5 ; } vgs = vgd + vds; if (here->HSMHV_corg == 1) { limval = DEVfetlim(vged, vgedo, von); if (vged != limval) { vged = limval ; Check3 = 6 ; } vges = vged + vds; } } /* end of case vds< 0 for limiting */ if (vds >= 0.0) { /* case vds >=0 for limiting of junctions */ vbs = DEVpnjlim(vbs, *(ckt->CKTstate0 + here->HSMHVvbs), CONSTvt0, model->HSMHV_vcrit, &Check1); if (Check1) Check3 = 7 ; vbd = vbs - vds; if (here->HSMHV_corbnet) { vsbs = DEVpnjlim(vsbs, *(ckt->CKTstate0 + here->HSMHVvsbs), CONSTvt0, model->HSMHV_vcrit, &Check2); if (Check2) Check3 = 8 ; } } else { /* case vds < 0 for limiting of junctions */ vbd = DEVpnjlim(vbd, *(ckt->CKTstate0 + here->HSMHVvbd), CONSTvt0, model->HSMHV_vcrit, &Check1); if (Check1) Check3 = 9 ; vbs = vbd + vds; if (here->HSMHV_corbnet) { vdbd = DEVpnjlim(vdbd, *(ckt->CKTstate0 + here->HSMHVvdbd), CONSTvt0, model->HSMHV_vcrit, &Check2); if (Check2) { Check3 = 10 ; vdbs = vdbd + vdse; } } } if( flg_tempNode > 0 ){ /* Logarithmic damping of deltemp beyond LIM_TOL */ deltemp_old = *(ckt->CKTstate0 + here->HSMHVdeltemp); if (deltemp > deltemp_old + LIM_TOL) {deltemp = deltemp_old + LIM_TOL + log10((deltemp-deltemp_old)/LIM_TOL); Check3 = 11;} else if (deltemp < deltemp_old - LIM_TOL) {deltemp = deltemp_old - LIM_TOL - log10((deltemp_old-deltemp)/LIM_TOL); Check3 = 12;} } /* if (Check3) printf("HSMHV_load: Check3=%d\n",Check3) ; */ /* limiting completed */ if (Check3 == 0 ) Check = 0 ; } /* loading and limiting of nonlinear branch voltages is completed */ vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; vged = vges - vds; vbs_jct = vsbs; vbd_jct = vdbd; /* linear branch voltages */ vddp = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVdNode) - *(ckt->CKTrhsOld+here->HSMHVdNodePrime)); vggp = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVgNode) - *(ckt->CKTrhsOld+here->HSMHVgNodePrime)); vssp = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVsNode) - *(ckt->CKTrhsOld+here->HSMHVsNodePrime)); vbpdb = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVbNodePrime) - *(ckt->CKTrhsOld+here->HSMHVdbNode)); vbpb = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVbNodePrime) - *(ckt->CKTrhsOld+here->HSMHVbNode)); vbpsb = model->HSMHV_type * (*(ckt->CKTrhsOld+here->HSMHVbNodePrime) - *(ckt->CKTrhsOld+here->HSMHVsbNode)); #ifdef DEBUG_HISIMHVLD_VX printf( "vbd = %12.5e\n" , vbd ); printf( "vbs = %12.5e\n" , vbs ); printf( "vgs = %12.5e\n" , vgs ); printf( "vds = %12.5e\n" , vds ); #endif /* After loading (and limiting of branch voltages: Start model evaluation */ /* printf("HSMHV_load: vds=%e vgs=%e vbs=%e vsd=%e vgd=%e vbd=%e\n", vds,vgs,vbs,-vds,vgs-vds,vbs-vds); */ if (vds >= 0) { /* normal mode */ here->HSMHV_mode = 1; ivds = vds; ivgs = vgs; ivbs = vbs; ivdse = vdse; ivgse = vgse; ivbse = vbse; } else { /* reverse mode */ here->HSMHV_mode = -1; ivds = -vds; ivgs = vgd; ivbs = vbd; ivdse = -vdse; ivgse = vgse - vdse; ivbse = vbse - vdse; } if ( model->HSMHV_info >= 5 ) { /* mode, bias conditions ... */ printf( "--- variables given to HSMHVevaluate() ----\n" ); printf( "type = %s\n" , (model->HSMHV_type>0) ? "NMOS" : "PMOS" ); printf( "mode = %s\n" , (here->HSMHV_mode>0) ? "NORMAL" : "REVERSE" ); printf( "vbse vbs = %12.5e %12.5e\n" , vbse, ivbs ); printf( "vdse vds = %12.5e %12.5e\n" , vdse, ivds ); printf( "vgse vgs = %12.5e %12.5e\n" , vgse, ivgs ); } if ( model->HSMHV_info >= 6 ) { /* input flags */ printf( "corsrd = %s\n" , (model->HSMHV_corsrd) ? "true" : "false" ) ; printf( "coadov = %s\n" , (model->HSMHV_coadov) ? "true" : "false" ) ; printf( "coisub = %s\n" , (model->HSMHV_coisub) ? "true" : "false" ) ; printf( "coiigs = %s\n" , (model->HSMHV_coiigs) ? "true" : "false" ) ; printf( "cogidl = %s\n" , (model->HSMHV_cogidl) ? "true" : "false" ) ; printf( "coovlp = %s\n" , (model->HSMHV_coovlp) ? "true" : "false" ) ; printf( "coovlps = %s\n" , (model->HSMHV_coovlps) ? "true" : "false" ) ; printf( "coflick = %s\n", (model->HSMHV_coflick) ? "true" : "false" ) ; printf( "coisti = %s\n" , (model->HSMHV_coisti) ? "true" : "false" ) ; printf( "conqs = %s\n" , (model->HSMHV_conqs) ? "true" : "false" ) ; printf( "cothrml = %s\n", (model->HSMHV_cothrml) ? "true" : "false" ) ; printf( "coign = %s\n" , (model->HSMHV_coign) ? "true" : "false" ) ; printf( "cosym = %s\n" , (model->HSMHV_cosym) ? "true" : "false" ) ; printf( "coselfheat = %s\n" , (model->HSMHV_coselfheat) ? "true" : "false" ) ; } /* print inputs ------------AA */ #ifdef DEBUG_HISIMHVCGG /* Print convergence flag */ printf("isConv %d ", isConv ); printf("CKTtime %e ", ckt->CKTtime ); printf("Vb %1.3e ", (model->HSMHV_type>0) ? vbs:-vbs ); printf("Vd %1.3e ", (model->HSMHV_type>0) ? vds:-vds ); printf("Vg %1.3e ", (model->HSMHV_type>0) ? vgs:-vgs ); #endif /* call model evaluation */ if ( HSMHVevaluate(ivdse,ivgse,ivbse,ivds, ivgs, ivbs, vbs_jct, vbd_jct, vsubs, deltemp, here, model, ckt) == HiSIM_ERROR ) return (HiSIM_ERROR); #ifdef DEBUG_HISIMHVCGG printf("HSMHV_ids %e ", here->HSMHV_ids ) ; printf("HSMHV_cggb %e ", here->HSMHV_cggb ) ; printf("\n") ; #endif here->HSMHV_called += 1; line755: /* standard entry if HSMHVevaluate is bypassed */ /* (could be shifted a bit forward ...) */ if ( here->HSMHV_mode > 0 ) { /* forward mode */ Rd = here->HSMHV_Rd ; dRd_dVdse = here->HSMHV_dRd_dVdse ; dRd_dVgse = here->HSMHV_dRd_dVgse ; dRd_dVbse = here->HSMHV_dRd_dVbse ; dRd_dVsubs = (flg_subNode > 0) ? here->HSMHV_dRd_dVsubs : 0.0 ; /* derivative w.r.t. Vsubs */ dRd_dT = (flg_tempNode > 0) ? here->HSMHV_dRd_dTi : 0.0 ; Rs = here->HSMHV_Rs ; dRs_dVdse = here->HSMHV_dRs_dVdse ; dRs_dVgse = here->HSMHV_dRs_dVgse ; dRs_dVbse = here->HSMHV_dRs_dVbse ; dRs_dVsubs = (flg_subNode > 0) ? here->HSMHV_dRs_dVsubs : 0.0 ; /* derivative w.r.t. Vsubs */ dRs_dT = (flg_tempNode > 0) ? here->HSMHV_dRs_dTi : 0.0 ; Ids = here->HSMHV_ids ; gds = here->HSMHV_dIds_dVdsi ; gm = here->HSMHV_dIds_dVgsi ; gmbs = here->HSMHV_dIds_dVbsi ; gmT = (flg_tempNode > 0) ? here->HSMHV_dIds_dTi : 0.0 ; gmbs_ext = here->HSMHV_dIds_dVbse ; gds_ext = here->HSMHV_dIds_dVdse ; gm_ext = here->HSMHV_dIds_dVgse ; Qd = here->HSMHV_qd ; dQd_dVds = here->HSMHV_dQdi_dVdsi ; dQd_dVgs = here->HSMHV_dQdi_dVgsi ; dQd_dVbs = here->HSMHV_dQdi_dVbsi ; dQd_dT = (flg_tempNode > 0) ? here->HSMHV_dQdi_dTi : 0.0 ; Qg = here->HSMHV_qg ; dQg_dVds = here->HSMHV_dQg_dVdsi ; dQg_dVgs = here->HSMHV_dQg_dVgsi ; dQg_dVbs = here->HSMHV_dQg_dVbsi ; dQg_dT = (flg_tempNode > 0) ? here->HSMHV_dQg_dTi : 0.0 ; Qs = here->HSMHV_qs ; dQs_dVds = here->HSMHV_dQsi_dVdsi ; dQs_dVgs = here->HSMHV_dQsi_dVgsi ; dQs_dVbs = here->HSMHV_dQsi_dVbsi ; dQs_dT = (flg_tempNode > 0) ? here->HSMHV_dQsi_dTi : 0.0 ; Qb = - (here->HSMHV_qg + here->HSMHV_qd + here->HSMHV_qs) ; dQb_dVds = here->HSMHV_dQb_dVdsi ; dQb_dVgs = here->HSMHV_dQb_dVgsi ; dQb_dVbs = here->HSMHV_dQb_dVbsi ; dQb_dT = (flg_tempNode > 0) ? here->HSMHV_dQb_dTi : 0.0 ; Qfd = here->HSMHV_qdp ; dQfd_dVdse = here->HSMHV_dqdp_dVdse ; dQfd_dVgse = here->HSMHV_dqdp_dVgse ; dQfd_dVbse = here->HSMHV_dqdp_dVbse ; dQfd_dT = (flg_tempNode > 0) ? here->HSMHV_dqdp_dTi : 0.0 ; Qfs = here->HSMHV_qsp ; dQfs_dVdse = here->HSMHV_dqsp_dVdse ; dQfs_dVgse = here->HSMHV_dqsp_dVgse ; dQfs_dVbse = here->HSMHV_dqsp_dVbse ; dQfs_dT = (flg_tempNode > 0) ? here->HSMHV_dqsp_dTi : 0.0 ; Qdext = here->HSMHV_qdext ; dQdext_dVdse = here->HSMHV_dQdext_dVdse ; dQdext_dVgse = here->HSMHV_dQdext_dVgse ; dQdext_dVbse = here->HSMHV_dQdext_dVbse ; dQdext_dT = (here->HSMHV_coselfheat > 0) ? here->HSMHV_dQdext_dTi : 0.0 ; Qgext = here->HSMHV_qgext ; dQgext_dVdse = here->HSMHV_dQgext_dVdse ; dQgext_dVgse = here->HSMHV_dQgext_dVgse ; dQgext_dVbse = here->HSMHV_dQgext_dVbse ; dQgext_dT = (here->HSMHV_coselfheat > 0) ? here->HSMHV_dQgext_dTi : 0.0 ; /* Qsext = here->HSMHV_qsext ;*/ dQsext_dVdse = here->HSMHV_dQsext_dVdse ; dQsext_dVgse = here->HSMHV_dQsext_dVgse ; dQsext_dVbse = here->HSMHV_dQsext_dVbse ; dQsext_dT = (here->HSMHV_coselfheat > 0) ? here->HSMHV_dQsext_dTi : 0.0 ; Qbext = - (here->HSMHV_qgext + here->HSMHV_qdext + here->HSMHV_qsext) ; dQbext_dVdse = here->HSMHV_dQbext_dVdse ; dQbext_dVgse = here->HSMHV_dQbext_dVgse ; dQbext_dVbse = here->HSMHV_dQbext_dVbse ; dQbext_dT = (here->HSMHV_coselfheat > 0) ? here->HSMHV_dQbext_dTi : 0.0 ; Isub = here->HSMHV_isub ; dIsub_dVds = here->HSMHV_dIsub_dVdsi ; dIsub_dVgs = here->HSMHV_dIsub_dVgsi ; dIsub_dVbs = here->HSMHV_dIsub_dVbsi ; dIsub_dT = (flg_tempNode > 0) ? here->HSMHV_dIsub_dTi : 0.0 ; dIsub_dVdse = here->HSMHV_dIsub_dVdse ; Isubs = 0.0 ; dIsubs_dVds = 0.0 ; dIsubs_dVgs = 0.0 ; dIsubs_dVbs = 0.0 ; dIsubs_dT = 0.0 ; dIsubs_dVdse = 0.0 ; Igidl = here->HSMHV_igidl ; dIgidl_dVds = here->HSMHV_dIgidl_dVdsi ; dIgidl_dVgs = here->HSMHV_dIgidl_dVgsi ; dIgidl_dVbs = here->HSMHV_dIgidl_dVbsi ; dIgidl_dT = (flg_tempNode > 0) ? here->HSMHV_dIgidl_dTi : 0.0 ; Igisl = here->HSMHV_igisl ; dIgisl_dVds = here->HSMHV_dIgisl_dVdsi ; dIgisl_dVgs = here->HSMHV_dIgisl_dVgsi ; dIgisl_dVbs = here->HSMHV_dIgisl_dVbsi ; dIgisl_dT = (flg_tempNode > 0) ? here->HSMHV_dIgisl_dTi : 0.0 ; Igd = here->HSMHV_igd ; dIgd_dVd = here->HSMHV_dIgd_dVdsi ; dIgd_dVg = here->HSMHV_dIgd_dVgsi ; dIgd_dVb = here->HSMHV_dIgd_dVbsi ; dIgd_dT = (flg_tempNode > 0) ? here->HSMHV_dIgd_dTi : 0.0 ; Igs = here->HSMHV_igs ; dIgs_dVd = here->HSMHV_dIgs_dVdsi ; dIgs_dVg = here->HSMHV_dIgs_dVgsi ; dIgs_dVb = here->HSMHV_dIgs_dVbsi ; dIgs_dT = (flg_tempNode > 0) ? here->HSMHV_dIgs_dTi : 0.0 ; Igb = here->HSMHV_igb ; dIgb_dVd = here->HSMHV_dIgb_dVdsi ; dIgb_dVg = here->HSMHV_dIgb_dVgsi ; dIgb_dVb = here->HSMHV_dIgb_dVbsi ; dIgb_dT = (flg_tempNode > 0) ? here->HSMHV_dIgb_dTi : 0.0 ; /*---------------------------------------------------* * Junction diode. *-----------------*/ Ibd = here->HSMHV_ibd ; Gbd = here->HSMHV_gbd ; Gbdt = (flg_tempNode > 0) ? here->HSMHV_gbdT : 0.0 ; /* Qbd = here->HSMHV_qbd ; */ Qbd = *(ckt->CKTstate0 + here->HSMHVqbd) ; Cbd = here->HSMHV_capbd ; Cbdt = (flg_tempNode > 0) ? here->HSMHV_gcbdT : 0.0 ; Ibs = here->HSMHV_ibs ; Gbs = here->HSMHV_gbs ; Gbst = (flg_tempNode > 0) ? here->HSMHV_gbsT : 0.0 ; /* Qbs = here->HSMHV_qbs ; */ Qbs = *(ckt->CKTstate0 + here->HSMHVqbs) ; Cbs = here->HSMHV_capbs ; Cbst = (flg_tempNode > 0) ? here->HSMHV_gcbsT : 0.0 ; if (flg_nqs) { tau = here->HSMHV_tau ; dtau_dVds = here->HSMHV_tau_dVdsi ; dtau_dVgs = here->HSMHV_tau_dVgsi ; dtau_dVbs = here->HSMHV_tau_dVbsi ; dtau_dT = here->HSMHV_tau_dTi ; taub = here->HSMHV_taub ; dtaub_dVds = here->HSMHV_taub_dVdsi ; dtaub_dVgs = here->HSMHV_taub_dVgsi ; dtaub_dVbs = here->HSMHV_taub_dVbsi ; dtaub_dT = here->HSMHV_taub_dTi ; Qdrat = here->HSMHV_Xd ; dQdrat_dVds = here->HSMHV_Xd_dVdsi ; dQdrat_dVgs = here->HSMHV_Xd_dVgsi ; dQdrat_dVbs = here->HSMHV_Xd_dVbsi ; dQdrat_dT = here->HSMHV_Xd_dTi ; Qi = here->HSMHV_Qi ; dQi_dVds = here->HSMHV_Qi_dVdsi ; dQi_dVgs = here->HSMHV_Qi_dVgsi ; dQi_dVbs = here->HSMHV_Qi_dVbsi ; dQi_dT = here->HSMHV_Qi_dTi ; Qbulk = here->HSMHV_Qbulk ; dQbulk_dVds = here->HSMHV_Qbulk_dVdsi ; dQbulk_dVgs = here->HSMHV_Qbulk_dVgsi ; dQbulk_dVbs = here->HSMHV_Qbulk_dVbsi ; dQbulk_dT = here->HSMHV_Qbulk_dTi ; } } else { /* reverse mode */ /* note: here->HSMHV_Rd and here->HSMHV_Rs are already subjected to mode handling, while the following derivatives here->HSMHV_Rd_dVdse, ... are not! */ Rd = here->HSMHV_Rd ; dRd_dVdse = here->HSMHV_dRd_dVdse ; dRd_dVgse = here->HSMHV_dRd_dVgse ; dRd_dVbse = here->HSMHV_dRd_dVbse ; dRd_dVsubs= (flg_subNode > 0) ? here->HSMHV_dRd_dVsubs : 0.0 ; /* derivative w.r.t. Vsubs */ dRd_dT = (flg_tempNode > 0) ? here->HSMHV_dRd_dTi : 0.0 ; Rs = here->HSMHV_Rs ; dRs_dVdse = here->HSMHV_dRs_dVdse ; dRs_dVgse = here->HSMHV_dRs_dVgse ; dRs_dVbse = here->HSMHV_dRs_dVbse ; dRs_dVsubs= (flg_subNode > 0) ? here->HSMHV_dRs_dVsubs : 0.0 ; /* derivative w.r.t. Vsubs */ dRs_dT = (flg_tempNode > 0) ? here->HSMHV_dRs_dTi : 0.0 ; Ids = - here->HSMHV_ids ; gds = + (here->HSMHV_dIds_dVdsi + here->HSMHV_dIds_dVgsi + here->HSMHV_dIds_dVbsi) ; gm = - here->HSMHV_dIds_dVgsi ; gmbs = - here->HSMHV_dIds_dVbsi ; gmT = (flg_tempNode > 0) ? - here->HSMHV_dIds_dTi : 0.0 ; gds_ext = + (here->HSMHV_dIds_dVdse + here->HSMHV_dIds_dVgse + here->HSMHV_dIds_dVbse) ; gm_ext = - here->HSMHV_dIds_dVgse; gmbs_ext = - here->HSMHV_dIds_dVbse; Qd = here->HSMHV_qs ; dQd_dVds = - (here->HSMHV_dQsi_dVdsi + here->HSMHV_dQsi_dVgsi + here->HSMHV_dQsi_dVbsi) ; dQd_dVgs = here->HSMHV_dQsi_dVgsi ; dQd_dVbs = here->HSMHV_dQsi_dVbsi ; dQd_dT = (flg_tempNode > 0) ? here->HSMHV_dQsi_dTi : 0.0 ; Qg = here->HSMHV_qg ; dQg_dVds = - (here->HSMHV_dQg_dVdsi + here->HSMHV_dQg_dVgsi + here->HSMHV_dQg_dVbsi) ; dQg_dVgs = here->HSMHV_dQg_dVgsi ; dQg_dVbs = here->HSMHV_dQg_dVbsi ; dQg_dT = (flg_tempNode > 0) ? here->HSMHV_dQg_dTi : 0.0 ; Qs = here->HSMHV_qd ; dQs_dVds = - (here->HSMHV_dQdi_dVdsi + here->HSMHV_dQdi_dVgsi + here->HSMHV_dQdi_dVbsi) ; dQs_dVgs = here->HSMHV_dQdi_dVgsi ; dQs_dVbs = here->HSMHV_dQdi_dVbsi ; dQs_dT = (flg_tempNode > 0) ? here->HSMHV_dQdi_dTi : 0.0 ; Qb = - (here->HSMHV_qg + here->HSMHV_qd + here->HSMHV_qs) ; dQb_dVds = - (here->HSMHV_dQb_dVdsi + here->HSMHV_dQb_dVgsi + here->HSMHV_dQb_dVbsi) ; dQb_dVgs = here->HSMHV_dQb_dVgsi ; dQb_dVbs = here->HSMHV_dQb_dVbsi ; dQb_dT = (flg_tempNode > 0) ? here->HSMHV_dQb_dTi : 0.0 ; Qfd = here->HSMHV_qsp ; dQfd_dVdse = - (here->HSMHV_dqsp_dVdse + here->HSMHV_dqsp_dVgse + here->HSMHV_dqsp_dVbse) ; dQfd_dVgse = here->HSMHV_dqsp_dVgse ; dQfd_dVbse = here->HSMHV_dqsp_dVbse ; dQfd_dT = (flg_tempNode > 0) ? here->HSMHV_dqsp_dTi : 0.0 ; Qfs = here->HSMHV_qdp ; dQfs_dVdse = - (here->HSMHV_dqdp_dVdse + here->HSMHV_dqdp_dVgse + here->HSMHV_dqdp_dVbse) ; dQfs_dVgse = here->HSMHV_dqdp_dVgse ; dQfs_dVbse = here->HSMHV_dqdp_dVbse ; dQfs_dT = (flg_tempNode > 0) ? here->HSMHV_dqdp_dTi : 0.0 ; Qdext = here->HSMHV_qsext ; dQdext_dVdse = - (here->HSMHV_dQsext_dVdse + here->HSMHV_dQsext_dVgse + here->HSMHV_dQsext_dVbse); dQdext_dVgse = here->HSMHV_dQsext_dVgse ; dQdext_dVbse = here->HSMHV_dQsext_dVbse ; dQdext_dT = (here->HSMHV_coselfheat > 0) ? here->HSMHV_dQsext_dTi : 0.0 ; Qgext = here->HSMHV_qgext ; dQgext_dVdse = - (here->HSMHV_dQgext_dVdse + here->HSMHV_dQgext_dVgse + here->HSMHV_dQgext_dVbse); dQgext_dVgse = here->HSMHV_dQgext_dVgse ; dQgext_dVbse = here->HSMHV_dQgext_dVbse ; dQgext_dT = (here->HSMHV_coselfheat > 0) ? here->HSMHV_dQgext_dTi : 0.0 ; /* Qsext = here->HSMHV_qdext ;*/ dQsext_dVdse = - (here->HSMHV_dQdext_dVdse + here->HSMHV_dQdext_dVgse + here->HSMHV_dQdext_dVbse); dQsext_dVgse = here->HSMHV_dQdext_dVgse ; dQsext_dVbse = here->HSMHV_dQdext_dVbse ; dQsext_dT = (here->HSMHV_coselfheat > 0) ? here->HSMHV_dQdext_dTi : 0.0 ; Qbext = - (here->HSMHV_qgext + here->HSMHV_qdext + here->HSMHV_qsext) ; dQbext_dVdse = - (here->HSMHV_dQbext_dVdse + here->HSMHV_dQbext_dVgse + here->HSMHV_dQbext_dVbse); dQbext_dVgse = here->HSMHV_dQbext_dVgse ; dQbext_dVbse = here->HSMHV_dQbext_dVbse ; dQbext_dT = (here->HSMHV_coselfheat > 0) ? here->HSMHV_dQbext_dTi : 0.0 ; Isub = 0.0 ; dIsub_dVds = 0.0 ; dIsub_dVgs = 0.0 ; dIsub_dVbs = 0.0 ; dIsub_dT = 0.0 ; dIsub_dVdse = 0.0 ; Isubs = here->HSMHV_isub ; dIsubs_dVds = - (here->HSMHV_dIsub_dVdsi + here->HSMHV_dIsub_dVgsi + here->HSMHV_dIsub_dVbsi) ; dIsubs_dVgs = here->HSMHV_dIsub_dVgsi ; dIsubs_dVbs = here->HSMHV_dIsub_dVbsi ; dIsubs_dT = (flg_tempNode > 0) ? here->HSMHV_dIsub_dTi : 0.0 ; dIsubs_dVdse = - here->HSMHV_dIsub_dVdse ; /* = - (dIsub_dVdse + dIsub_dVbse + dIsub_dVgse) */ Igidl = here->HSMHV_igisl ; dIgidl_dVds = - (here->HSMHV_dIgisl_dVdsi + here->HSMHV_dIgisl_dVgsi + here->HSMHV_dIgisl_dVbsi) ; dIgidl_dVgs = here->HSMHV_dIgisl_dVgsi ; dIgidl_dVbs = here->HSMHV_dIgisl_dVbsi ; dIgidl_dT = (flg_tempNode > 0) ? here->HSMHV_dIgisl_dTi : 0.0 ; Igisl = here->HSMHV_igidl ; dIgisl_dVds = - (here->HSMHV_dIgidl_dVdsi + here->HSMHV_dIgidl_dVgsi + here->HSMHV_dIgidl_dVbsi) ; dIgisl_dVgs = here->HSMHV_dIgidl_dVgsi ; dIgisl_dVbs = here->HSMHV_dIgidl_dVbsi ; dIgisl_dT = (flg_tempNode > 0) ? here->HSMHV_dIgidl_dTi : 0.0 ; /* note: here->HSMHV_igd and here->HSMHV_igs are already subjected to mode handling, while the following derivatives here->HSMHV_dIgd_dVdsi, ... are not! */ Igd = here->HSMHV_igd ; dIgd_dVd = - (here->HSMHV_dIgs_dVdsi + here->HSMHV_dIgs_dVgsi + here->HSMHV_dIgs_dVbsi) ; dIgd_dVg = here->HSMHV_dIgs_dVgsi ; dIgd_dVb = here->HSMHV_dIgs_dVbsi ; dIgd_dT = (flg_tempNode > 0) ? here->HSMHV_dIgs_dTi : 0.0 ; Igs = here->HSMHV_igs ; dIgs_dVd = - (here->HSMHV_dIgd_dVdsi + here->HSMHV_dIgd_dVgsi + here->HSMHV_dIgd_dVbsi) ; dIgs_dVg = here->HSMHV_dIgd_dVgsi ; dIgs_dVb = here->HSMHV_dIgd_dVbsi ; dIgs_dT = (flg_tempNode > 0) ? here->HSMHV_dIgd_dTi : 0.0 ; Igb = here->HSMHV_igb ; dIgb_dVd = - (here->HSMHV_dIgb_dVdsi + here->HSMHV_dIgb_dVgsi + here->HSMHV_dIgb_dVbsi) ; dIgb_dVg = here->HSMHV_dIgb_dVgsi ; dIgb_dVb = here->HSMHV_dIgb_dVbsi ; dIgb_dT = (flg_tempNode > 0) ? here->HSMHV_dIgb_dTi : 0.0 ; /*---------------------------------------------------* * Junction diode. *-----------------*/ Ibd = here->HSMHV_ibd ; Gbd = here->HSMHV_gbd ; Gbdt = (flg_tempNode > 0) ? here->HSMHV_gbdT : 0.0 ; /* Qbd = here->HSMHV_qbd ; */ Qbd = *(ckt->CKTstate0 + here->HSMHVqbd) ; Cbd = here->HSMHV_capbd ; Cbdt = (flg_tempNode > 0) ? here->HSMHV_gcbdT : 0.0 ; Ibs = here->HSMHV_ibs ; Gbs = here->HSMHV_gbs ; Gbst = (flg_tempNode > 0) ? here->HSMHV_gbsT : 0.0 ; /* Qbs = here->HSMHV_qbs ; */ Qbs = *(ckt->CKTstate0 + here->HSMHVqbs) ; Cbs = here->HSMHV_capbs ; Cbst = (flg_tempNode > 0) ? here->HSMHV_gcbsT : 0.0 ; if (flg_nqs) { tau = here->HSMHV_tau ; dtau_dVds = -(here->HSMHV_tau_dVdsi + here->HSMHV_tau_dVgsi + here->HSMHV_tau_dVbsi) ; dtau_dVgs = here->HSMHV_tau_dVgsi ; dtau_dVbs = here->HSMHV_tau_dVbsi ; dtau_dT = here->HSMHV_tau_dTi ; taub = here->HSMHV_taub ; dtaub_dVds = -(here->HSMHV_taub_dVdsi + here->HSMHV_taub_dVgsi + here->HSMHV_taub_dVbsi); dtaub_dVgs = here->HSMHV_taub_dVgsi ; dtaub_dVbs = here->HSMHV_taub_dVbsi ; dtaub_dT = here->HSMHV_taub_dTi ; Qdrat = 1.0 - here->HSMHV_Xd ; dQdrat_dVds = +(here->HSMHV_Xd_dVdsi + here->HSMHV_Xd_dVgsi + here->HSMHV_Xd_dVbsi) ; dQdrat_dVgs = - here->HSMHV_Xd_dVgsi ; dQdrat_dVbs = - here->HSMHV_Xd_dVbsi ; dQdrat_dT = - here->HSMHV_Xd_dTi ; Qi = here->HSMHV_Qi ; dQi_dVds = -(here->HSMHV_Qi_dVdsi + here->HSMHV_Qi_dVgsi + here->HSMHV_Qi_dVbsi) ; dQi_dVgs = here->HSMHV_Qi_dVgsi ; dQi_dVbs = here->HSMHV_Qi_dVbsi ; dQi_dT = here->HSMHV_Qi_dTi ; Qbulk = here->HSMHV_Qbulk ; dQbulk_dVds = -(here->HSMHV_Qbulk_dVdsi + here->HSMHV_Qbulk_dVgsi + here->HSMHV_Qbulk_dVbsi) ; dQbulk_dVgs = here->HSMHV_Qbulk_dVgsi ; dQbulk_dVbs = here->HSMHV_Qbulk_dVbsi ; dQbulk_dT = here->HSMHV_Qbulk_dTi ; } } /* end of reverse mode */ if (flg_tempNode > 0) { if (pParam->HSMHV_rth > C_RTH_MIN) { Gth = 1.0/pParam->HSMHV_rth ; } else { Gth = 1.0/C_RTH_MIN ; } Ith = Gth * deltemp ; dIth_dT = Gth ; Cth = pParam->HSMHV_cth ; Qth = Cth * deltemp ; /* P = Ids * (Vdsi + param * ( Vdse - Vdsi)) */ /* = Ids * Veffpower */ if ( vds * (vdse - vds) >= 0.0) { if ( pParam->HSMHV_powrat == 1.0 ) { Veffpower = vdse ; dVeffpower_dVds = 0.0 ; dVeffpower_dVdse = 1.0 ; } else { Veffpower = vds + here->HSMHV_powratio * (vdse - vds) ; dVeffpower_dVds = (1.0 - here->HSMHV_powratio) ; dVeffpower_dVdse = here->HSMHV_powratio ; } } else { Veffpower = vds ; dVeffpower_dVds = 1.0 ; dVeffpower_dVdse = 0.0 ; } P = Ids * Veffpower ; dP_dVds = gds * Veffpower + Ids * dVeffpower_dVds; dP_dVgs = gm * Veffpower ; dP_dVbs = gmbs * Veffpower ; dP_dT = gmT * Veffpower ; dP_dVdse = gds_ext * Veffpower + Ids * dVeffpower_dVdse ; dP_dVgse = gm_ext * Veffpower ; dP_dVbse = gmbs_ext * Veffpower ; /* Clamping the maximum rise tempaerarure (SHEMAX) */ T1 = model->HSMHV_shemax * Gth ; Fn_SU( T2 , P , T1 , SHE_MAX_dlt * Gth , T0 ) ; P = T2 ; dP_dVds = T0 * dP_dVds ; dP_dVgs = T0 * dP_dVgs ; dP_dVbs = T0 * dP_dVbs ; dP_dT = T0 * dP_dT ; dP_dVdse = T0 * dP_dVdse ; dP_dVgse = T0 * dP_dVgse ; dP_dVbse = T0 * dP_dVbse ; } else { Gth = 0.0 ; Ith = 0.0 ; dIth_dT = 0.0 ; Cth = 0.0 ; Qth = 0.0 ; P = 0.0 ; dP_dVds = 0.0 ; dP_dVgs = 0.0 ; dP_dVbs = 0.0 ; dP_dT = 0.0 ; dP_dVdse = 0.0 ; dP_dVgse = 0.0 ; dP_dVbse = 0.0 ; } /* in case of nqs: construct static contributions to the nqs equations (Iqi_nqs, Iqb_nqs) */ /* and nqs charge contributions to inner drain, gate and source node (Qd_nqs, Qg_nqs, Qs_nqs) */ if (flg_nqs) { /* .. tau, taub must be > 0 */ if (tau < 1.0e-18) { tau = 1.e-18 ; dtau_dVds = dtau_dVgs = dtau_dVbs = dtau_dT = 0.0 ; } if (taub < 1.0e-18) { taub = 1.0e-18 ; dtaub_dVds = dtaub_dVgs = dtaub_dVbs = dtaub_dT = 0.0 ; } Iqi_nqs = (Qi_nqs - Qi) / tau ; dIqi_nqs_dVds = - (dQi_dVds + Iqi_nqs * dtau_dVds) / tau ; dIqi_nqs_dVgs = - (dQi_dVgs + Iqi_nqs * dtau_dVgs) / tau ; dIqi_nqs_dVbs = - (dQi_dVbs + Iqi_nqs * dtau_dVbs) / tau ; dIqi_nqs_dT = - (dQi_dT + Iqi_nqs * dtau_dT ) / tau ; dIqi_nqs_dQi_nqs = 1.0 / tau ; Iqb_nqs = (Qb_nqs - Qbulk) / taub ; dIqb_nqs_dVds = - (dQbulk_dVds + Iqb_nqs * dtaub_dVds) / taub ; dIqb_nqs_dVgs = - (dQbulk_dVgs + Iqb_nqs * dtaub_dVgs) / taub ; dIqb_nqs_dVbs = - (dQbulk_dVbs + Iqb_nqs * dtaub_dVbs) / taub ; dIqb_nqs_dT = - (dQbulk_dT + Iqb_nqs * dtaub_dT ) / taub ; dIqb_nqs_dQb_nqs = 1.0 / taub ; Qd_nqs = Qi_nqs * Qdrat ; dQd_nqs_dVds = Qi_nqs * dQdrat_dVds ; dQd_nqs_dVgs = Qi_nqs * dQdrat_dVgs ; dQd_nqs_dVbs = Qi_nqs * dQdrat_dVbs ; dQd_nqs_dT = Qi_nqs * dQdrat_dT ; dQd_nqs_dQi_nqs = Qdrat ; Qg_nqs = - Qi_nqs - Qb_nqs ; dQg_nqs_dQi_nqs = - 1.0 ; dQg_nqs_dQb_nqs = - 1.0 ; Qs_nqs = Qi_nqs * (1.0 - Qdrat) ; dQs_nqs_dVds = - Qi_nqs * dQdrat_dVds ; dQs_nqs_dVgs = - Qi_nqs * dQdrat_dVgs ; dQs_nqs_dVbs = - Qi_nqs * dQdrat_dVbs ; dQs_nqs_dT = - Qi_nqs * dQdrat_dT ; dQs_nqs_dQi_nqs = 1.0 - Qdrat ; } else { Iqi_nqs = Iqb_nqs = Qd_nqs = Qg_nqs = Qs_nqs = 0.0 ; } dIgd_dVs = - (dIgd_dVd + dIgd_dVg + dIgd_dVb) ; dIgs_dVs = - (dIgs_dVd + dIgs_dVg + dIgs_dVb) ; dIgb_dVs = - (dIgb_dVd + dIgb_dVg + dIgb_dVb) ; /*---------------------------------------------------* * External Resistances *-----------------*/ if(model->HSMHV_corsrd == 1 || model->HSMHV_corsrd == 3 ) { if(Rd > 0){ GD = 1.0/Rd; GD_dVgs = - dRd_dVgse /Rd/Rd; GD_dVds = - dRd_dVdse /Rd/Rd; GD_dVbs = - dRd_dVbse /Rd/Rd; GD_dVsubs = - dRd_dVsubs /Rd/Rd; GD_dT = - dRd_dT /Rd/Rd; }else{ GD=0.0; GD_dVgs=0.0; GD_dVds=0.0; GD_dVbs=0.0; GD_dVsubs=0.0; GD_dT =0.0; } if(Rs > 0){ GS = 1.0/Rs; GS_dVgs = - dRs_dVgse /Rs/Rs; GS_dVds = - dRs_dVdse /Rs/Rs; GS_dVbs = - dRs_dVbse /Rs/Rs; GS_dVsubs = - dRs_dVsubs /Rs/Rs; GS_dT = - dRs_dT /Rs/Rs; }else{ GS=0.0; GS_dVgs=0.0; GS_dVds=0.0; GS_dVbs=0.0; GS_dVsubs=0.0; GS_dT =0.0; } } Iddp = GD * vddp; dIddp_dVddp = GD; dIddp_dVdse = GD_dVds * vddp; dIddp_dVgse = GD_dVgs * vddp; dIddp_dVbse = GD_dVbs * vddp; dIddp_dVsubs= GD_dVsubs * vddp; dIddp_dT = GD_dT * vddp; Issp = GS * vssp; dIssp_dVssp = GS; dIssp_dVdse = GS_dVds * vssp ; dIssp_dVgse = GS_dVgs * vssp; dIssp_dVbse = GS_dVbs * vssp; dIssp_dVsubs= GS_dVsubs * vssp; dIssp_dT = GS_dT * vssp; if( model->HSMHV_corg > 0.0 ){ GG = here->HSMHV_grg ; }else{ GG = 0.0 ; } Iggp = GG * vggp; dIggp_dVggp = GG; if(model->HSMHV_corbnet == 1 && here->HSMHV_rbpb > 0.0 ){ GRBPB = here->HSMHV_grbpb ; }else{ GRBPB = 0.0 ; } Ibpb = GRBPB * vbpb; dIbpb_dVbpb = GRBPB; if(model->HSMHV_corbnet == 1 && here->HSMHV_rbpd > 0.0 ){ GRBPD = here->HSMHV_grbpd ; }else{ GRBPD = 0.0 ; } Ibpdb = GRBPD * vbpdb; dIbpdb_dVbpdb = GRBPD; if(model->HSMHV_corbnet == 1 && here->HSMHV_rbps > 0.0 ){ GRBPS = here->HSMHV_grbps ; }else{ GRBPS = 0.0 ; } Ibpsb = GRBPS * vbpsb; dIbpsb_dVbpsb = GRBPS; /* printf("HSMHV_load: ByPass=%d\n",ByPass) ; */ if (!ByPass) { /* no convergence check in case of Bypass */ /* * check convergence */ isConv = 1; if ( (here->HSMHV_off == 0) || !(ckt->CKTmode & MODEINITFIX) ) { if (Check == 1) { ckt->CKTnoncon++; isConv = 0; #ifndef NEWCONV } else { /* convergence check for branch currents is done in function HSMHVconvTest */ #endif /* NEWCONV */ } } *(ckt->CKTstate0 + here->HSMHVvbs) = vbs; *(ckt->CKTstate0 + here->HSMHVvbd) = vbd; *(ckt->CKTstate0 + here->HSMHVvgs) = vgs; *(ckt->CKTstate0 + here->HSMHVvds) = vds; *(ckt->CKTstate0 + here->HSMHVvsbs) = vsbs; *(ckt->CKTstate0 + here->HSMHVvdbs) = vdbs; *(ckt->CKTstate0 + here->HSMHVvdbd) = vdbd; *(ckt->CKTstate0 + here->HSMHVvges) = vges; *(ckt->CKTstate0 + here->HSMHVvsubs) = vsubs; *(ckt->CKTstate0 + here->HSMHVdeltemp) = deltemp; *(ckt->CKTstate0 + here->HSMHVvdse) = vdse; *(ckt->CKTstate0 + here->HSMHVvgse) = vgse; *(ckt->CKTstate0 + here->HSMHVvbse) = vbse; if ( flg_nqs ) { *(ckt->CKTstate0 + here->HSMHVqi_nqs) = Qi_nqs; *(ckt->CKTstate0 + here->HSMHVqb_nqs) = Qb_nqs; } /* printf("HSMHV_load: (into state0) vds.. = %e %e %e %e %e %e\n", vds,vgs,vbs,vdse,vgse,vbse); */ if ((ckt->CKTmode & MODEDC) && !(ckt->CKTmode & MODEINITFIX) && !(ckt->CKTmode & MODEINITJCT)) showPhysVal = 1; if (model->HSMHV_show_Given && showPhysVal && isConv) { static int isFirst = 1; if (vds != vds_pre) ShowPhysVals(here, model, isFirst, vds_pre, vgs, vbs, vgd, vbd, vgb); else ShowPhysVals(here, model, isFirst, vds, vgs, vbs, vgd, vbd, vgb); if (isFirst) isFirst = 0; } } #include "hsmhvld_info_eval.h" /* For standard Newton method (SPICE_rhs == 0): */ /* if currents (and charges) are limited -> extrapolate onto x-values */ /* in SPICE mode (SPICE_rhs == 1): */ /* extrapolate onto x = 0 (-> rhs_eq) */ /* */ /* note that */ /* the charge extrapolation is replaced by extrapolation of displacement */ /* currents, see below */ /* ...... just for easier handling: collect node voltages in vector x: */ if (!SPICE_rhs) { x[dNode] = model->HSMHV_type *( *(ckt->CKTrhsOld+here->HSMHVdNode)); x[dNodePrime] = model->HSMHV_type *( *(ckt->CKTrhsOld+here->HSMHVdNodePrime)); x[gNode] = model->HSMHV_type *( *(ckt->CKTrhsOld+here->HSMHVgNode)); x[gNodePrime] = model->HSMHV_type *( *(ckt->CKTrhsOld+here->HSMHVgNodePrime)); x[sNode] = model->HSMHV_type *( *(ckt->CKTrhsOld+here->HSMHVsNode)); x[sNodePrime] = model->HSMHV_type *( *(ckt->CKTrhsOld+here->HSMHVsNodePrime)); x[bNodePrime] = model->HSMHV_type *( *(ckt->CKTrhsOld+here->HSMHVbNodePrime)); x[bNode] = model->HSMHV_type *( *(ckt->CKTrhsOld+here->HSMHVbNode)); x[dbNode] = model->HSMHV_type *( *(ckt->CKTrhsOld+here->HSMHVdbNode)); x[sbNode] = model->HSMHV_type *( *(ckt->CKTrhsOld+here->HSMHVsbNode)); if (flg_subNode > 0) x[subNode] = model->HSMHV_type *( *(ckt->CKTrhsOld+here->HSMHVsubNode)); /* previous vsub */ else x[subNode] = 0.0; if (flg_tempNode > 0) x[tempNode] = *(ckt->CKTrhsOld+here->HSMHVtempNode); else x[tempNode] = 0.0; if ( flg_nqs ) { x[qiNode] = *(ckt->CKTrhsOld+here->HSMHVqiNode); x[qbNode] = *(ckt->CKTrhsOld+here->HSMHVqbNode); } else { x[qiNode] = 0.0; x[qbNode] = 0.0; } } delvgs = (x[gNodePrime] - x[sNodePrime]) - vgs; delvds = (x[dNodePrime] - x[sNodePrime]) - vds; delvbs = (x[bNodePrime] - x[sNodePrime]) - vbs; deldeltemp = x[tempNode] - deltemp; if (delvgs || delvds || delvbs ||deldeltemp) { Ids += gm *delvgs + gds *delvds + gmbs *delvbs + gmT *deldeltemp ; Isub += dIsub_dVgs *delvgs + dIsub_dVds *delvds + dIsub_dVbs *delvbs + dIsub_dT *deldeltemp ; Isubs+= dIsubs_dVgs*delvgs + dIsubs_dVds*delvds + dIsubs_dVbs*delvbs + dIsubs_dT*deldeltemp ; Igd += dIgd_dVg *delvgs + dIgd_dVd *delvds + dIgd_dVb *delvbs + dIgd_dT *deldeltemp ; Igs += dIgs_dVg *delvgs + dIgs_dVd *delvds + dIgs_dVb *delvbs + dIgs_dT *deldeltemp ; Igb += dIgb_dVg *delvgs + dIgb_dVd *delvds + dIgb_dVb *delvbs + dIgb_dT *deldeltemp ; Igidl+= dIgidl_dVgs*delvgs + dIgidl_dVds*delvds + dIgidl_dVbs*delvbs + dIgidl_dT*deldeltemp ; Igisl+= dIgisl_dVgs*delvgs + dIgisl_dVds*delvds + dIgisl_dVbs*delvbs + dIgisl_dT*deldeltemp ; P += dP_dVgs *delvgs + dP_dVds *delvds + dP_dVbs *delvbs + dP_dT *deldeltemp ; if (flg_nqs) { Iqi_nqs += dIqi_nqs_dVgs*delvgs + dIqi_nqs_dVds*delvds + dIqi_nqs_dVbs*delvbs + dIqi_nqs_dT*deldeltemp ; Iqb_nqs += dIqb_nqs_dVgs*delvgs + dIqb_nqs_dVds*delvds + dIqb_nqs_dVbs*delvbs + dIqb_nqs_dT*deldeltemp ; } } delvgse = (x[gNodePrime] - x[sNode]) - vgse; delvdse = (x[dNode] - x[sNode]) - vdse; delvbse = (x[bNodePrime] - x[sNode]) - vbse; if (flg_subNode > 0) delvsubs = (x[subNode] - x[sNode]) - vsubs; /* substrate bias change */ if (delvgse || delvdse || delvbse ) { Ids += gm_ext *delvgse + gds_ext *delvdse + gmbs_ext *delvbse ; Isub += dIsub_dVdse*delvdse ; Isubs+= dIsubs_dVdse*delvdse ; P += dP_dVgse *delvgse + dP_dVdse *delvdse + dP_dVbse *delvbse ; Iddp += dIddp_dVgse*delvgse + dIddp_dVdse*delvdse + dIddp_dVbse*delvbse ; Issp += dIssp_dVgse*delvgse + dIssp_dVdse*delvdse + dIssp_dVbse*delvbse ; } if (delvsubs) { Iddp += dIddp_dVsubs*delvsubs ; Issp += dIssp_dVsubs*delvsubs ; } if (deldeltemp) { Iddp += dIddp_dT*deldeltemp ; Issp += dIssp_dT*deldeltemp ; Ith += dIth_dT *deldeltemp ; } delvdbd = (x[dbNode] - x[dNode]) - vbd_jct ; if (delvdbd || deldeltemp) { Ibd += Gbd*delvdbd + Gbdt*deldeltemp ; } delvsbs = (x[sbNode] - x[sNode]) - vbs_jct ; if (delvsbs || deldeltemp) { Ibs += Gbs*delvsbs + Gbst*deldeltemp ; } delvddp = (x[dNode] - x[dNodePrime]) - vddp ; if (delvddp) { Iddp += dIddp_dVddp * delvddp ; } delvssp = (x[sNode] - x[sNodePrime]) - vssp ; if (delvssp) { Issp += dIssp_dVssp * delvssp ; } delvggp = (x[gNode] - x[gNodePrime]) - vggp ; if (delvggp) { Iggp += dIggp_dVggp * delvggp ; } delvbpb = (x[bNodePrime] - x[bNode]) - vbpb ; if (delvbpb) { Ibpb += dIbpb_dVbpb * delvbpb ; } delvbpdb = (x[bNodePrime] - x[dbNode]) - vbpdb ; if (delvbpdb) { Ibpdb += dIbpdb_dVbpdb * delvbpdb ; } delvbpsb = (x[bNodePrime] - x[sbNode]) - vbpsb ; if (delvbpsb) { Ibpsb += dIbpsb_dVbpsb * delvbpsb ; } if (flg_nqs) { delQi_nqs = x[qiNode] - Qi_nqs ; if (delQi_nqs) { Iqi_nqs += dIqi_nqs_dQi_nqs * delQi_nqs ; } delQb_nqs = x[qbNode] - Qb_nqs ; if (delQb_nqs) { Iqb_nqs += dIqb_nqs_dQb_nqs * delQb_nqs ; } } /* Assemble currents into nodes */ /* ... static part */ /* drain node */ i_d = Iddp - Ibd ; /* intrinsic drain node */ i_dP = -Iddp + Ids + Isub + Igidl - Igd ; /* gate node */ i_g = Iggp ; /* intrinsic gate node */ i_gP = - Iggp + Igd + Igs + Igb ; /* source node */ i_s = Issp - Ibs ; /* intrinsic source node */ i_sP = - Issp - Ids + Isubs + Igisl - Igs ; /* intrinsic bulk node */ i_bP = - Isub - Isubs - Igidl -Igb - Igisl + Ibpdb + Ibpb + Ibpsb ; /* base node */ i_b = - Ibpb ; /* drain bulk node */ i_db = Ibd - Ibpdb ; /* source bulk node */ i_sb = Ibs - Ibpsb ; /* temp node */ if (flg_tempNode > 0){ i_t = Ith - P ; } else { i_t = 0.0; } /* nqs equations */ i_qi = Iqi_nqs ; i_qb = Iqb_nqs ; for (i = 0; i < XDIM; i++) { ydc_d[i] = ydc_dP[i] = ydc_g[i] = ydc_gP[i] = ydc_s[i] = ydc_sP[i] = ydc_bP[i] = ydc_b[i] = ydc_db[i] = ydc_sb[i] = ydc_t[i] = 0.0; } if (flg_nqs) { for (i = 0; i < XDIM; i++) { ydc_qi[i] = ydc_qb[i] = 0.0; } } /* drain node */ ydc_d[dNode] = dIddp_dVddp + dIddp_dVdse + Gbd ; ydc_d[dNodePrime] = -dIddp_dVddp ; /* ydc_d[gNode] = 0.0 ; */ ydc_d[gNodePrime] = dIddp_dVgse ; ydc_d[sNode] = - ( dIddp_dVdse + dIddp_dVgse + dIddp_dVbse ) - dIddp_dVsubs ; /* ydc_d[sNodePrime] = 0.0 ; */ ydc_d[bNodePrime] = dIddp_dVbse ; /* ydc_d[bNode] = 0.0 ; */ ydc_d[dbNode] = - Gbd ; /* ydc_d[sbNode] = 0.0 ; */ ydc_d[subNode] = dIddp_dVsubs ; ydc_d[tempNode] = dIddp_dT - Gbdt ; /* intrinsic drain node */ ydc_dP[dNode] = - (dIddp_dVddp + dIddp_dVdse) + gds_ext + dIsub_dVdse ; ydc_dP[dNodePrime] = dIddp_dVddp + gds + dIsub_dVds + dIgidl_dVds - dIgd_dVd ; /* ydc_dP[gNode] = 0.0; */ ydc_dP[gNodePrime] = -dIddp_dVgse + gm_ext + gm + dIsub_dVgs + dIgidl_dVgs - dIgd_dVg ; ydc_dP[sNode] = dIddp_dVdse + dIddp_dVgse + dIddp_dVbse + dIddp_dVsubs + (-gds_ext -gm_ext -gmbs_ext) - dIsub_dVdse; ydc_dP[sNodePrime] = -( gds + dIsub_dVds + dIgidl_dVds ) - ( gm + dIsub_dVgs + dIgidl_dVgs ) - ( gmbs + dIsub_dVbs + dIgidl_dVbs ) - dIgd_dVs ; ydc_dP[bNodePrime] = - dIddp_dVbse + gmbs_ext + gmbs + dIsub_dVbs + dIgidl_dVbs - dIgd_dVb; /* ydc_dP[bNode] = 0.0; */ /* ydc_dP[dbNode] = 0.0 ; */ /* ydc_dP[sbNode] = 0.0 ; */ ydc_dP[subNode] = - dIddp_dVsubs ; ydc_dP[tempNode] = - dIddp_dT + gmT + dIsub_dT + dIgidl_dT - dIgd_dT ; /* gate node */ /* ydc_g[dNode] = 0.0 ; */ /* ydc_g[dNodePrime] = 0.0 ; */ ydc_g[gNode] = dIggp_dVggp ; ydc_g[gNodePrime] = - dIggp_dVggp ; /* ydc_g[sNode] = 0.0 ; */ /* ydc_g[sNodePrime] = 0.0 ; */ /* ydc_g[bNodePrime] = 0.0 ; */ /* ydc_g[bNode] = 0.0 ; */ /* ydc_g[dbNode] = 0.0 ; */ /* ydc_g[sbNode] = 0.0 ; */ /* ydc_g[tempNode] = 0.0 ; */ /* intrinsic gate node */ /* ydc_gP[dNode] = 0.0 ; */ ydc_gP[dNodePrime] = dIgd_dVd + dIgs_dVd + dIgb_dVd ; ydc_gP[gNode] = - dIggp_dVggp ; ydc_gP[gNodePrime] = dIggp_dVggp + dIgd_dVg + dIgs_dVg + dIgb_dVg ; /* ydc_gP[sNode] = 0.0 ; */ ydc_gP[sNodePrime] = dIgd_dVs + dIgs_dVs + dIgb_dVs ; ydc_gP[bNodePrime] = dIgd_dVb + dIgs_dVb + dIgb_dVb ; /* ydc_gP[bNode] = 0.0 ; */ /* ydc_gP[dbNode] = 0.0 ; */ /* ydc_gP[sbNode] = 0.0 ; */ ydc_gP[tempNode] = dIgd_dT + dIgs_dT + dIgb_dT ; /* source node */ ydc_s[dNode] = dIssp_dVdse; /* ydc_s[dNodePrime] = 0.0 */ /* ydc_s[gNode] = 0.0 */ ydc_s[gNodePrime] = dIssp_dVgse; ydc_s[sNode] = dIssp_dVssp - ( dIssp_dVgse + dIssp_dVdse + dIssp_dVbse ) - dIssp_dVsubs + Gbs; ydc_s[sNodePrime] = - dIssp_dVssp; ydc_s[bNodePrime] = dIssp_dVbse ; /* ydc_s[bNode] = 0.0 */ /* ydc_s[dbNode] = 0.0 */ ydc_s[sbNode] = - Gbs ; ydc_s[subNode] = dIssp_dVsubs; ydc_s[tempNode] = dIssp_dT - Gbst; /* intrinsic source node */ ydc_sP[dNode] = - dIssp_dVdse -gds_ext + dIsubs_dVdse ; ydc_sP[dNodePrime] = - gds + dIsubs_dVds + dIgisl_dVds - dIgs_dVd ; /* ydc_sP[gNode] = 0.0 ; */ ydc_sP[gNodePrime] = -dIssp_dVgse -gm_ext - gm + dIsubs_dVgs + dIgisl_dVgs - dIgs_dVg ; ydc_sP[sNode] = - dIssp_dVssp - ( - dIssp_dVdse - dIssp_dVgse - dIssp_dVbse ) + dIssp_dVsubs +(gds_ext + gm_ext + gmbs_ext) - dIsubs_dVdse; ydc_sP[sNodePrime] = dIssp_dVssp - ( - gds + dIsubs_dVds + dIgisl_dVds ) - ( - gm + dIsubs_dVgs + dIgisl_dVgs ) - ( - gmbs + dIsubs_dVbs + dIgisl_dVbs ) - dIgs_dVs ; ydc_sP[bNodePrime] = -dIssp_dVbse -gmbs_ext - gmbs + dIsubs_dVbs + dIgisl_dVbs - dIgs_dVb ; /* ydc_sP[bNode] = 0.0 ; */ /* ydc_sP[dbNode] = 0.0 ; */ /* ydc_sP[sbNode] = 0.0 ; */ ydc_sP[subNode] = - dIssp_dVsubs; ydc_sP[tempNode] = -dIssp_dT - gmT + dIsubs_dT + dIgisl_dT - dIgs_dT; /* intrinsic bulk node */ ydc_bP[dNode] = - dIsub_dVdse - dIsubs_dVdse ; ydc_bP[dNodePrime] = - dIsub_dVds - dIsubs_dVds - dIgidl_dVds - dIgb_dVd - dIgisl_dVds ; /* ydc_bP[gNode] = 0.0 ; */ ydc_bP[gNodePrime] = - dIsub_dVgs - dIsubs_dVgs - dIgidl_dVgs - dIgb_dVg - dIgisl_dVgs ; ydc_bP[sNode] = dIsub_dVdse + dIsubs_dVdse; ydc_bP[sNodePrime] = - ( - dIsub_dVds - dIsubs_dVds - dIgidl_dVds - dIgisl_dVds ) - ( - dIsub_dVgs - dIsubs_dVgs - dIgidl_dVgs - dIgisl_dVgs ) - ( - dIsub_dVbs - dIsubs_dVbs - dIgidl_dVbs - dIgisl_dVbs ) - dIgb_dVs ; ydc_bP[bNodePrime] = - dIsub_dVbs - dIsubs_dVbs - dIgidl_dVbs - dIgb_dVb - dIgisl_dVbs + dIbpdb_dVbpdb + dIbpb_dVbpb + dIbpsb_dVbpsb ; ydc_bP[bNode] = - dIbpb_dVbpb ; ydc_bP[dbNode] = - dIbpdb_dVbpdb ; ydc_bP[sbNode] = - dIbpsb_dVbpsb ; ydc_bP[tempNode] = - dIsub_dT - dIsubs_dT - dIgidl_dT - dIgb_dT - dIgisl_dT ; /* bulk node */ /* ydc_b[dNode] = 0.0 ; */ /* ydc_b[dNodePrime] = 0.0 ; */ /* ydc_b[gNode] = 0.0 ; */ /* ydc_b[gNodePrime] = 0.0 ; */ /* ydc_b[sNode] = 0.0 ; */ /* ydc_b[sNodePrime] = 0.0 ; */ ydc_b[bNodePrime] = - dIbpb_dVbpb ; ydc_b[bNode] = dIbpb_dVbpb ; /* ydc_b[dbNode] = 0.0 ; */ /* ydc_b[sbNode] = 0.0 ; */ /* ydc_b[tempNode] = 0.0 ; */ /* drain bulk node */ ydc_db[dNode] = - Gbd ; /* ydc_db[dNodePrime] = 0.0 ; */ /* ydc_db[gNode] = 0.0 ; */ /* ydc_db[gNodePrime] = 0.0 ; */ /* ydc_db[sNode] = 0.0 ; */ /* ydc_db[sNodePrime] = 0.0 ; */ ydc_db[bNodePrime] = - dIbpdb_dVbpdb ; /* ydc_db[bNode] = 0.0 ; */ ydc_db[dbNode] = Gbd + dIbpdb_dVbpdb ; /* ydc_db[sbNode] = 0.0 ; */ ydc_db[tempNode] = Gbdt ; /* source bulk node */ /* ydc_sb[dNode] = 0.0 ; */ /* ydc_sb[dNodePrime] = 0.0 ; */ /* ydc_sb[gNode] = 0.0 ; */ /* ydc_sb[gNodePrime] = 0.0 ; */ ydc_sb[sNode] = - Gbs ; /* ydc_sb[sNodePrime] = 0.0 ; */ ydc_sb[bNodePrime] = - dIbpsb_dVbpsb ; /* ydc_sb[bNode] = 0.0 ; */ /* ydc_sb[dbNode] = 0.0 ; */ ydc_sb[sbNode] = Gbs + dIbpsb_dVbpsb ; ydc_sb[tempNode] = Gbst ; /* temp node */ ydc_t[dNode] = - dP_dVdse ; ydc_t[dNodePrime] = - dP_dVds ; /* ydc_t[gNode] = 0.0 ; */ ydc_t[gNodePrime] = - dP_dVgs - dP_dVgse ; ydc_t[sNode] = - ( - dP_dVdse - dP_dVgse - dP_dVbse ) ; ydc_t[sNodePrime] = - ( - dP_dVds - dP_dVgs - dP_dVbs ) ; ydc_t[bNodePrime] = - dP_dVbs - dP_dVbse ; /* ydc_t[bNode] = 0.0 ; */ /* ydc_t[dbNode] = 0.0 ; */ /* ydc_t[sbNode] = 0.0 ; */ ydc_t[tempNode] = dIth_dT - dP_dT ; /* additional entries for flat nqs handling */ if ( flg_nqs ) { ydc_qi[dNodePrime] = dIqi_nqs_dVds ; ydc_qi[gNodePrime] = dIqi_nqs_dVgs ; ydc_qi[sNodePrime] = -(dIqi_nqs_dVds + dIqi_nqs_dVgs + dIqi_nqs_dVbs) ; ydc_qi[bNodePrime] = dIqi_nqs_dVbs ; ydc_qi[tempNode] = dIqi_nqs_dT ; ydc_qi[qiNode] = dIqi_nqs_dQi_nqs ; /* ydc_qi[qbNode]= 0.0 ; */ ydc_qb[dNodePrime] = dIqb_nqs_dVds ; ydc_qb[gNodePrime] = dIqb_nqs_dVgs ; ydc_qb[sNodePrime] = -(dIqb_nqs_dVds + dIqb_nqs_dVgs + dIqb_nqs_dVbs) ; ydc_qb[bNodePrime] = dIqb_nqs_dVbs ; ydc_qb[tempNode] = dIqb_nqs_dT ; /* ydc_qb[qiNode]= 0.0 ; */ ydc_qb[qbNode] = dIqb_nqs_dQb_nqs ; } /* Preset vectors and matrix for dynamic part */ cq_d = cq_dP = cq_g = cq_gP = cq_s = cq_sP = cq_bP = cq_b = cq_db = cq_sb = cq_t = cq_qi = cq_qb = 0.0 ; for (i = 0; i < XDIM ; i++) { ydyn_d[i] = ydyn_dP[i] = ydyn_g[i] = ydyn_gP[i] = ydyn_s[i] = ydyn_sP[i] = ydyn_bP[i] = ydyn_b[i] = ydyn_db[i] = ydyn_sb[i] = ydyn_t[i] = 0.0; } if (flg_nqs) { for (i = 0; i < XDIM ; i++) { ydyn_qi[i] = ydyn_qb[i] = 0.0; } } ag0 = ckt->CKTag[0]; if (ChargeComputationNeeded) { /* start handling of dynamic part */ if (!ByPass) { /* loading of state vector not necessary in case of Bypass */ /* intrinsic gate node (without fringing charges) */ *(ckt->CKTstate0 + here->HSMHVqg) = Qg + Qg_nqs + Qgext; /* intrinsic drain node */ *(ckt->CKTstate0 + here->HSMHVqd) = Qd + Qd_nqs ; /* intrinsic bulk node */ *(ckt->CKTstate0 + here->HSMHVqb) = Qb + Qb_nqs + Qbext; /* drain bulk node */ *(ckt->CKTstate0 + here->HSMHVqbd) = Qbd ; /* source bulk node */ *(ckt->CKTstate0 + here->HSMHVqbs) = Qbs ; /* temp node */ *(ckt->CKTstate0 + here->HSMHVqth) = Qth ; /* fringing charges */ *(ckt->CKTstate0 + here->HSMHVqfd) = Qfd ; *(ckt->CKTstate0 + here->HSMHVqfs) = Qfs ; /* external drain node */ *(ckt->CKTstate0 + here->HSMHVqdE) = Qdext; /* nqs charges Qi_nqs, Qb_nqs: already loaded above */ /* if ( flg_nqs ) { */ /* *(ckt->CKTstate0 + here->HSMHVqi_nqs) = Qi_nqs; */ /* *(ckt->CKTstate0 + here->HSMHVqb_nqs) = Qb_nqs; */ /* } */ } /* ... assemble capacitance matrix */ /* ...... drain node */ ydyn_d[dNode] = dQfd_dVdse + Cbd + dQdext_dVdse ; /* ydyn_d[dNodePrime] = 0.0 ; */ /* ydyn_d[gNode] = 0.0 ; */ ydyn_d[gNodePrime] = dQfd_dVgse + dQdext_dVgse ; ydyn_d[sNode] = - (dQfd_dVdse + dQfd_dVgse+ dQfd_dVbse) - ( dQdext_dVdse + dQdext_dVgse + dQdext_dVbse ) ; /* ydyn_d[sNodePrime ] = 0.0 ; */ ydyn_d[bNodePrime] = dQfd_dVbse + dQdext_dVbse; /* ydyn_d[bNode ] = 0.0 ; */ ydyn_d[dbNode] = - Cbd ; /* ydyn_d[sbNode ] = 0.0 ; */ ydyn_d[tempNode] = dQfd_dT - Cbdt + dQdext_dT ; /* ...... intrinsic drain node */ /* ydyn_dP[dNode] = 0.0 ; */ ydyn_dP[dNodePrime] = dQd_dVds ; /* ydyn_dP[gNode] = 0.0 ; */ ydyn_dP[gNodePrime] = dQd_dVgs ; /* ydyn_dP[sNode] = 0.0 ; */ ydyn_dP[sNodePrime] = - ( dQd_dVds + dQd_dVgs + dQd_dVbs ) ; ydyn_dP[bNodePrime] = dQd_dVbs ; /* ydyn_dP[bNode] = 0.0 ; */ /* ydyn_dP[dbNode] = 0.0 ; */ /* ydyn_dP[sbNode] = 0.0 ; */ ydyn_dP[tempNode] = dQd_dT ; /* ...... gate node */ /* (no entry) */ /* ...... intrinsic gate node */ ydyn_gP[dNode] = -dQfd_dVdse - dQfs_dVdse + dQgext_dVdse ; ydyn_gP[dNodePrime] = dQg_dVds ; /* ydyn_gP[gNode] = 0.0 ; */ ydyn_gP[gNodePrime] = dQg_dVgs -dQfd_dVgse - dQfs_dVgse + dQgext_dVgse ; ydyn_gP[sNode] = dQfd_dVdse + dQfs_dVdse + dQfd_dVgse + dQfs_dVgse + dQfd_dVbse + dQfs_dVbse - ( dQgext_dVdse + dQgext_dVgse + dQgext_dVbse ) ; ydyn_gP[sNodePrime] = -( dQg_dVds + dQg_dVgs + dQg_dVbs ) ; ydyn_gP[bNodePrime] = dQg_dVbs -dQfd_dVbse - dQfs_dVbse + dQgext_dVbse ; /* ydyn_gP[bNode] = 0.0 ; */ /* ydyn_gP[dbNode] = 0.0 ; */ /* ydyn_gP[sbNode] = 0.0 ; */ ydyn_gP[tempNode] = dQg_dT - dQfd_dT - dQfs_dT + dQgext_dT ; /* ...... source node */ ydyn_s[dNode] = dQfs_dVdse + dQsext_dVdse ; /* ydyn_d[dNodePrime ] = 0.0 ; */ /* ydyn_d[gNode ] = 0.0 ; */ ydyn_s[gNodePrime] = dQfs_dVgse + dQsext_dVgse ; ydyn_s[sNode] = Cbs - (dQfs_dVdse + dQfs_dVgse+ dQfs_dVbse) - ( dQsext_dVdse + dQsext_dVgse + dQsext_dVbse ) ; /* ydyn_d[sNodePrime ] = 0.0 ; */ ydyn_s[bNodePrime] = dQfs_dVbse + dQsext_dVbse ; /* ydyn_d[bNode ] = 0.0 ; */ /* ydyn_d[dbNode ] = 0.0 ; */ ydyn_s[sbNode] = - Cbs ; ydyn_s[tempNode] = dQfs_dT - Cbst + dQsext_dT ; /* ...... intrinsic source node */ /* ydyn_sP[dNode] = 0.0 ; */ ydyn_sP[dNodePrime] = dQs_dVds ; /* ydyn_sP[gNode] = 0.0 ; */ ydyn_sP[gNodePrime] = dQs_dVgs ; /* ydyn_sP[sNode] = 0.0 ; */ ydyn_sP[sNodePrime] = - ( dQs_dVds + dQs_dVgs + dQs_dVbs ); ydyn_sP[bNodePrime] = dQs_dVbs ; /* ydyn_sP[bNode] = 0.0 ; */ /* ydyn_sP[dbNode] = 0.0 ; */ /* ydyn_sP[sbNode] = 0.0 ; */ ydyn_sP[tempNode] = dQs_dT ; /* ...... intrinsic bulk node */ ydyn_bP[dNode] = dQbext_dVdse ; ydyn_bP[dNodePrime] = dQb_dVds ; /* ydyn_bP[gNode] = 0.0 ; */ ydyn_bP[gNodePrime] = dQb_dVgs + dQbext_dVgse ; ydyn_bP[sNode] = - ( dQbext_dVdse + dQbext_dVgse + dQbext_dVbse ) ; ydyn_bP[sNodePrime] = - ( dQb_dVds + dQb_dVgs + dQb_dVbs ); ydyn_bP[bNodePrime] = dQb_dVbs + dQbext_dVbse ; /* ydyn_bP[bNode] = 0.0 ; */ /* ydyn_bP[dbNode] = 0.0 ; */ /* ydyn_bP[sbNode] = 0.0 ; */ ydyn_bP[tempNode] = dQb_dT + dQbext_dT ; /* ...... bulk node */ /* (no entry) */ /* ...... drain bulk node */ ydyn_db[dNode] = - Cbd ; /* ydyn_db[dNodePrime] = 0.0 ; */ /* ydyn_db[gNode] = 0.0 ; */ /* ydyn_db[gNodePrime] = 0.0 ; */ /* ydyn_db[sNode] = 0.0 ; */ /* ydyn_db[sNodePrime] = 0.0 ; */ /* ydyn_db[bNodePrime] = 0.0 ; */ /* ydyn_db[bNode] = 0.0 ; */ ydyn_db[dbNode] = Cbd ; /* ydyn_db[sbNode] = 0.0 ; */ ydyn_db[tempNode] = Cbdt ; /* ...... source bulk node */ /* ydyn_sb[dNode] = 0.0 ; */ /* ydyn_sb[dNodePrime] = 0.0 ; */ /* ydyn_sb[gNode] = 0.0 ; */ /* ydyn_sb[gNodePrime] = 0.0 ; */ ydyn_sb[sNode] = - Cbs ; /* ydyn_sb[sNodePrime] = 0.0 ; */ /* ydyn_sb[bNodePrime] = 0.0 ; */ /* ydyn_sb[bNode] = 0.0 ; */ /* ydyn_sb[dbNode] = 0.0 ; */ ydyn_sb[sbNode] = Cbs ; ydyn_sb[tempNode] = Cbst ; /* ...... temp node */ /* ydyn_t[dNode] = 0.0 ; */ /* ydyn_t[dNodePrime] = 0.0 ; */ /* ydyn_t[gNode] = 0.0 ; */ /* ydyn_t[gNodePrime] = 0.0 ; */ /* ydyn_t[sNode] = 0.0 ; */ /* ydyn_t[sNodePrime] = 0.0 ; */ /* ydyn_t[bNodePrime] = 0.0 ; */ /* ydyn_t[bNode] = 0.0 ; */ /* ydyn_t[dbNode] = 0.0 ; */ /* ydyn_t[sbNode] = 0.0 ; */ ydyn_t[tempNode] = Cth ; /* additional entries for flat nqs handling */ if (flg_nqs) { /* ...... intrinsic drain node */ /* ydyn_dP[dNode] += 0.0 ; */ ydyn_dP[dNodePrime] += dQd_nqs_dVds ; /* ydyn_dP[gNode] += 0.0 ; */ ydyn_dP[gNodePrime] += dQd_nqs_dVgs ; /* ydyn_dP[sNode] += 0.0 ; */ ydyn_dP[sNodePrime] += - ( dQd_nqs_dVds + dQd_nqs_dVgs + dQd_nqs_dVbs ) ; ydyn_dP[bNodePrime] += dQd_nqs_dVbs ; /* ydyn_dP[bNode] += 0.0 ; */ /* ydyn_dP[dbNode] += 0.0 ; */ /* ydyn_dP[sbNode] += 0.0 ; */ ydyn_dP[tempNode] += dQd_nqs_dT ; ydyn_dP[qiNode] = dQd_nqs_dQi_nqs ; /* ...... intrinsic gate node */ /* ydyn_gP[dNode] += 0.0 ; */ /* ydyn_gP[dNodePrime] += 0.0 ; */ /* ydyn_gP[gNode] += 0.0 ; */ /* ydyn_gP[gNodePrime] += 0.0 ; */ /* ydyn_gP[sNode] += 0.0 ; */ /* ydyn_gP[sNodePrime] += 0.0 ; */ /* ydyn_gP[bNodePrime] += 0.0 ; */ /* ydyn_gP[bNode] += 0.0 ; */ /* ydyn_gP[dbNode] += 0.0 ; */ /* ydyn_gP[sbNode] += 0.0 ; */ /* ydyn_gP[tempNode] += 0.0 ; */ ydyn_gP[qiNode] = dQg_nqs_dQi_nqs ; ydyn_gP[qbNode] = dQg_nqs_dQb_nqs ; /* ...... intrinsic source node */ /* ydyn_sP[dNode] += 0.0 ; */ ydyn_sP[dNodePrime] += dQs_nqs_dVds ; /* ydyn_sP[gNode] += 0.0 ; */ ydyn_sP[gNodePrime] += dQs_nqs_dVgs ; /* ydyn_sP[sNode] += 0.0 ; */ ydyn_sP[sNodePrime] += - ( dQs_nqs_dVds + dQs_nqs_dVgs + dQs_nqs_dVbs ); ydyn_sP[bNodePrime] += dQs_nqs_dVbs ; /* ydyn_sP[bNode] += 0.0 ; */ /* ydyn_sP[dbNode] += 0.0 ; */ /* ydyn_sP[sbNode] += 0.0 ; */ ydyn_sP[tempNode] += dQs_nqs_dT ; ydyn_sP[qiNode] = dQs_nqs_dQi_nqs ; /* ...... intrinsic bulk node */ /* ydyn_bP[dNode] += 0.0 ; */ /* ydyn_bP[dNodePrime] += 0.0 ; */ /* ydyn_bP[gNode] += 0.0 ; */ /* ydyn_bP[gNodePrime] += 0.0 ; */ /* ydyn_bP[sNode] += 0.0 ; */ /* ydyn_bP[sNodePrime] += 0.0 ; */ /* ydyn_bP[bNodePrime] += 0.0 ; */ /* ydyn_bP[bNode] += 0.0 ; */ /* ydyn_bP[dbNode] += 0.0 ; */ /* ydyn_bP[sbNode] += 0.0 ; */ /* ydyn_bP[tempNode] += 0.0 ; */ ydyn_bP[qbNode] = 1.0 ; /* ...... qi node */ /* ydyn_qi[dNodePrime] = 0.0 ; */ /* ydyn_qi[gNodePrime] = 0.0 ; */ /* ydyn_qi[sNodePrime] = 0.0 ; */ /* ydyn_qi[bNodePrime] = 0.0 ; */ /* ydyn_qi[tempNode] = 0.0 ; */ ydyn_qi[qiNode] = 1.0 ; /* ydyn_qi[qbNode] = 0.0 ; */ /* ...... qb node */ /* ydyn_qb[dNodePrime] = 0.0 ; */ /* ydyn_qb[gNodePrime] = 0.0 ; */ /* ydyn_qb[sNodePrime] = 0.0 ; */ /* ydyn_qb[bNodePrime] = 0.0 ; */ /* ydyn_qb[tempNode] = 0.0 ; */ /* ydyn_qb[qiNode] = 0.0 ; */ ydyn_qb[qbNode] = 1.0 ; } if (!ByPass) { /* integrate etc. only necessary if not in Bypass mode! */ /* store small signal parameters */ if (ckt->CKTmode & MODEINITSMSIG) { /* printf("HSMHV_load: (small signal) ByPass=%d\n",ByPass); */ /* printf("HSMHV_load: ydc_dP=%e %e %e %e %e %e %e %e\n", ydc_dP[0],ydc_dP[1],ydc_dP[2],ydc_dP[3],ydc_dP[4],ydc_dP[5],ydc_dP[6],ydc_dP[7]); printf("HSMHV_load: ych_dP=%e %e %e %e %e %e %e %e\n", ydyn_dP[0],ydyn_dP[1],ydyn_dP[2],ydyn_dP[3],ydyn_dP[4],ydyn_dP[5],ydyn_dP[6],ydyn_dP[7]); */ /* dc matrix into structure 0724*/ for (i = 0; i < XDIM; i++) { here->HSMHV_ydc_d[i] = ydc_d[i]; here->HSMHV_ydc_dP[i] = ydc_dP[i]; here->HSMHV_ydc_g[i] = ydc_g[i]; here->HSMHV_ydc_gP[i] = ydc_gP[i]; here->HSMHV_ydc_s[i] = ydc_s[i]; here->HSMHV_ydc_sP[i] = ydc_sP[i]; here->HSMHV_ydc_bP[i] = ydc_bP[i]; here->HSMHV_ydc_b[i] = ydc_b[i]; here->HSMHV_ydc_db[i] = ydc_db[i]; here->HSMHV_ydc_sb[i] = ydc_sb[i]; here->HSMHV_ydc_t[i] = ydc_t[i]; } /* capacitance matrix into structure 0724*/ for (i = 0; i < XDIM; i++) { here->HSMHV_ydyn_d[i] = ydyn_d[i]; here->HSMHV_ydyn_dP[i] = ydyn_dP[i]; here->HSMHV_ydyn_g[i] = ydyn_g[i]; here->HSMHV_ydyn_gP[i] = ydyn_gP[i]; here->HSMHV_ydyn_s[i] = ydyn_s[i]; here->HSMHV_ydyn_sP[i] = ydyn_sP[i]; here->HSMHV_ydyn_bP[i] = ydyn_bP[i]; here->HSMHV_ydyn_b[i] = ydyn_b[i]; here->HSMHV_ydyn_db[i] = ydyn_db[i]; here->HSMHV_ydyn_sb[i] = ydyn_sb[i]; here->HSMHV_ydyn_t[i] = ydyn_t[i]; } if (flg_nqs) { for (i = 0; i < XDIM; i++) { here->HSMHV_ydc_qi[i] = ydc_qi[i]; here->HSMHV_ydc_qb[i] = ydc_qb[i]; here->HSMHV_ydyn_qi[i] = ydyn_qi[i]; here->HSMHV_ydyn_qb[i] = ydyn_qb[i]; } } goto line1000; /* that's all for small signal analyses */ } /* Continue handling of dynamic part: */ /* ... calculate time derivatives of node charges */ if (ckt->CKTmode & MODEINITTRAN) { /* at the very first iteration of the first timepoint: copy charges into previous state -> the integrator may use them ... */ *(ckt->CKTstate1 + here->HSMHVqb) = *(ckt->CKTstate0 + here->HSMHVqb); *(ckt->CKTstate1 + here->HSMHVqg) = *(ckt->CKTstate0 + here->HSMHVqg); *(ckt->CKTstate1 + here->HSMHVqd) = *(ckt->CKTstate0 + here->HSMHVqd); *(ckt->CKTstate1 + here->HSMHVqth) = *(ckt->CKTstate0 + here->HSMHVqth); *(ckt->CKTstate1 + here->HSMHVqbs) = *(ckt->CKTstate0 + here->HSMHVqbs); *(ckt->CKTstate1 + here->HSMHVqbd) = *(ckt->CKTstate0 + here->HSMHVqbd); *(ckt->CKTstate1 + here->HSMHVqfd) = *(ckt->CKTstate0 + here->HSMHVqfd); *(ckt->CKTstate1 + here->HSMHVqfs) = *(ckt->CKTstate0 + here->HSMHVqfs); *(ckt->CKTstate1 + here->HSMHVqdE) = *(ckt->CKTstate0 + here->HSMHVqdE); if (flg_nqs) { *(ckt->CKTstate1 + here->HSMHVqi_nqs) = *(ckt->CKTstate0 + here->HSMHVqi_nqs); *(ckt->CKTstate1 + here->HSMHVqb_nqs) = *(ckt->CKTstate0 + here->HSMHVqb_nqs); } } return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSMHVqb)); return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSMHVqg)); return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSMHVqd)); return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSMHVqbs)); return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSMHVqbd)); return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSMHVqth)); return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSMHVqfd)); return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSMHVqfs)); return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSMHVqdE)); if (flg_nqs) { return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSMHVqi_nqs)); return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSMHVqb_nqs)); } if (ckt->CKTmode & MODEINITTRAN) { /* at the very first iteration of the first timepoint: copy currents into previous state -> the integrator may use them ... */ *(ckt->CKTstate1 + here->HSMHVcqb) = *(ckt->CKTstate0 + here->HSMHVcqb); *(ckt->CKTstate1 + here->HSMHVcqg) = *(ckt->CKTstate0 + here->HSMHVcqg); *(ckt->CKTstate1 + here->HSMHVcqd) = *(ckt->CKTstate0 + here->HSMHVcqd); *(ckt->CKTstate1 + here->HSMHVcqth) = *(ckt->CKTstate0 + here->HSMHVcqth); *(ckt->CKTstate1 + here->HSMHVcqbs) = *(ckt->CKTstate0 + here->HSMHVcqbs); *(ckt->CKTstate1 + here->HSMHVcqbd) = *(ckt->CKTstate0 + here->HSMHVcqbd); *(ckt->CKTstate1 + here->HSMHVcqfd) = *(ckt->CKTstate0 + here->HSMHVcqfd); *(ckt->CKTstate1 + here->HSMHVcqfs) = *(ckt->CKTstate0 + here->HSMHVcqfs); *(ckt->CKTstate1 + here->HSMHVcqdE) = *(ckt->CKTstate0 + here->HSMHVcqdE); if (flg_nqs) { *(ckt->CKTstate1 + here->HSMHVdotqi_nqs) = *(ckt->CKTstate0 + here->HSMHVdotqi_nqs); *(ckt->CKTstate1 + here->HSMHVdotqb_nqs) = *(ckt->CKTstate0 + here->HSMHVdotqb_nqs); } } } /* ... finally gather displacement currents from data structures */ cq_dP = *(ckt->CKTstate0 + here->HSMHVcqd); cq_gP = *(ckt->CKTstate0 + here->HSMHVcqg); cq_bP = *(ckt->CKTstate0 + here->HSMHVcqb); cq_sP = - *(ckt->CKTstate0 + here->HSMHVcqg) - *(ckt->CKTstate0 + here->HSMHVcqb) - *(ckt->CKTstate0 + here->HSMHVcqd); cq_dE = *(ckt->CKTstate0 + here->HSMHVcqdE); cq_db = *(ckt->CKTstate0 + here->HSMHVcqbd); cq_sb = *(ckt->CKTstate0 + here->HSMHVcqbs); cq_g = 0.0 ; cq_b = 0.0 ; /* displacement currents at outer drain/source node (fringing part only!) */ cq_d = *(ckt->CKTstate0 + here->HSMHVcqfd); cq_s = *(ckt->CKTstate0 + here->HSMHVcqfs); cq_t = *(ckt->CKTstate0 + here->HSMHVcqth); /* displacement currents due to nqs */ if (flg_nqs) { cq_qi = *(ckt->CKTstate0 + here->HSMHVdotqi_nqs); cq_qb = *(ckt->CKTstate0 + here->HSMHVdotqb_nqs); } else { cq_qi = cq_qb = 0.0 ; } /* ... and, if necessary: Extrapolate displacement currents onto x-values */ if (delvdbd || deldeltemp) { cq_db += ag0*(Cbd*delvdbd + Cbdt*deldeltemp) ; } if (delvsbs || deldeltemp) { cq_sb += ag0*(Cbs*delvsbs + Cbst*deldeltemp) ; } if (delvgs || delvds || delvbs || deldeltemp) { cq_gP += ag0*(dQg_dVgs*delvgs + dQg_dVds*delvds + dQg_dVbs*delvbs + dQg_dT*deldeltemp) ; cq_dP += ag0*(dQd_dVgs*delvgs + dQd_dVds*delvds + dQd_dVbs*delvbs + dQd_dT*deldeltemp) ; cq_sP += ag0*(dQs_dVgs*delvgs + dQs_dVds*delvds + dQs_dVbs*delvbs + dQs_dT*deldeltemp) ; cq_bP = - ( cq_gP + cq_dP + cq_sP ); } if (deldeltemp) { cq_t += ag0*Cth *deldeltemp ; cq_d += ag0*dQfd_dT*deldeltemp ; cq_s += ag0*dQfs_dT*deldeltemp ; cq_gE += ag0*dQgext_dT*deldeltemp ; cq_dE += ag0*dQdext_dT*deldeltemp ; cq_bE += ag0*dQbext_dT*deldeltemp ; cq_sE = - ( cq_gE + cq_dE + cq_bE ); } if (delvgse || delvdse || delvbse) { cq_d += ag0*(dQfd_dVgse*delvgse + dQfd_dVdse*delvdse + dQfd_dVbse*delvbse) ; cq_s += ag0*(dQfs_dVgse*delvgse + dQfs_dVdse*delvdse + dQfs_dVbse*delvbse) ; cq_gE += ag0*(dQgext_dVgse*delvgse + dQgext_dVdse*delvdse + dQgext_dVbse*delvbse) ; cq_dE += ag0*(dQdext_dVgse*delvgse + dQdext_dVdse*delvdse + dQdext_dVbse*delvbse) ; cq_bE += ag0*(dQbext_dVgse*delvgse + dQbext_dVdse*delvdse + dQbext_dVbse*delvbse) ; cq_sE = - ( cq_gE + cq_dE + cq_bE ); } if (flg_nqs) { if (delvgs || delvds || delvbs || deldeltemp) { cq_dP += ag0*(dQd_nqs_dVgs*delvgs + dQd_nqs_dVds*delvds + dQd_nqs_dVbs*delvbs + dQd_nqs_dT*deldeltemp) ; cq_sP += ag0*(dQs_nqs_dVgs*delvgs + dQs_nqs_dVds*delvds + dQs_nqs_dVbs*delvbs + dQs_nqs_dT*deldeltemp) ; cq_bP = - ( cq_gP + cq_dP + cq_sP ); /* should be superfluous ? */ } if (delQi_nqs) { cq_dP += ag0*dQd_nqs_dQi_nqs*delQi_nqs ; cq_gP += ag0*dQg_nqs_dQi_nqs*delQi_nqs ; cq_sP += ag0*dQs_nqs_dQi_nqs*delQi_nqs ; cq_qi += ag0* 1.0 *delQi_nqs ; } if (delQb_nqs) { cq_gP += ag0*dQg_nqs_dQb_nqs*delQb_nqs ; cq_bP += ag0* 1.0 *delQb_nqs ; cq_qb += ag0* 1.0 *delQb_nqs ; } } } /* End of handling dynamic part */ /* Assemble total node currents (type-handling shifted to stamping) */ cur_d = i_d + cq_d - cq_db + cq_dE ; cur_dP = i_dP + cq_dP ; cur_g = i_g + cq_g ; cur_gP = i_gP + cq_gP - cq_d - cq_s + cq_gE ; cur_s = i_s + cq_s - cq_sb + cq_sE ; cur_sP = i_sP + cq_sP; cur_bP = i_bP + cq_bP + cq_bE ; cur_b = i_b + cq_b; cur_db = i_db + cq_db; cur_sb = i_sb + cq_sb; cur_t = i_t + cq_t; cur_qi = i_qi + cq_qi; cur_qb = i_qb + cq_qb; /* Now we can start stamping ... */ /* ... right hand side: subtract total node currents */ *(ckt->CKTrhs + here->HSMHVdNode) -= model->HSMHV_type * cur_d; *(ckt->CKTrhs + here->HSMHVdNodePrime) -= model->HSMHV_type * cur_dP; *(ckt->CKTrhs + here->HSMHVgNode) -= model->HSMHV_type * cur_g; *(ckt->CKTrhs + here->HSMHVgNodePrime) -= model->HSMHV_type * cur_gP; *(ckt->CKTrhs + here->HSMHVsNode) -= model->HSMHV_type * cur_s; *(ckt->CKTrhs + here->HSMHVsNodePrime) -= model->HSMHV_type * cur_sP; *(ckt->CKTrhs + here->HSMHVbNodePrime) -= model->HSMHV_type * cur_bP; *(ckt->CKTrhs + here->HSMHVbNode) -= model->HSMHV_type * cur_b; *(ckt->CKTrhs + here->HSMHVdbNode) -= model->HSMHV_type * cur_db; *(ckt->CKTrhs + here->HSMHVsbNode) -= model->HSMHV_type * cur_sb; if( flg_tempNode > 0) { *(ckt->CKTrhs + here->HSMHVtempNode) -= cur_t; /* temp node independent of model type! */ } if (flg_nqs) { *(ckt->CKTrhs + here->HSMHVqiNode) -= cur_qi; *(ckt->CKTrhs + here->HSMHVqbNode) -= cur_qb; } /* ... finally stamp matrix */ /*drain*/ *(here->HSMHVDdPtr) += ydc_d[dNode] + ag0*ydyn_d[dNode]; *(here->HSMHVDdpPtr) += ydc_d[dNodePrime] + ag0*ydyn_d[dNodePrime]; *(here->HSMHVDgpPtr) += ydc_d[gNodePrime] + ag0*ydyn_d[gNodePrime]; *(here->HSMHVDsPtr) += ydc_d[sNode] + ag0*ydyn_d[sNode]; *(here->HSMHVDspPtr) += ydc_d[sNodePrime] + ag0*ydyn_d[sNodePrime]; *(here->HSMHVDbpPtr) += ydc_d[bNodePrime] + ag0*ydyn_d[bNodePrime]; *(here->HSMHVDdbPtr) += ydc_d[dbNode] + ag0*ydyn_d[dbNode]; if (flg_subNode > 0) { *(here->HSMHVDsubPtr) += ydc_d[subNode]; } if( flg_tempNode > 0) { /* temp entries in matrix dependent on model type */ *(here->HSMHVDtempPtr) += model->HSMHV_type * (ydc_d[tempNode] + ag0*ydyn_d[tempNode]); } /*drain prime*/ *(here->HSMHVDPdPtr) += ydc_dP[dNode] + ag0*ydyn_dP[dNode]; *(here->HSMHVDPdpPtr) += ydc_dP[dNodePrime] + ag0*ydyn_dP[dNodePrime]; *(here->HSMHVDPgpPtr) += ydc_dP[gNodePrime] + ag0*ydyn_dP[gNodePrime]; *(here->HSMHVDPsPtr) += ydc_dP[sNode] + ag0*ydyn_dP[sNode]; *(here->HSMHVDPspPtr) += ydc_dP[sNodePrime] + ag0*ydyn_dP[sNodePrime]; *(here->HSMHVDPbpPtr) += ydc_dP[bNodePrime] + ag0*ydyn_dP[bNodePrime]; if (flg_subNode > 0) { *(here->HSMHVDPsubPtr) += ydc_dP[subNode]; } if( flg_tempNode > 0) { /* temp entries in matrix dependent on model type */ *(here->HSMHVDPtempPtr) += model->HSMHV_type * (ydc_dP[tempNode] + ag0*ydyn_dP[tempNode]); } if (flg_nqs) { *(here->HSMHVDPqiPtr) += model->HSMHV_type * (ydc_dP[qiNode] + ag0*ydyn_dP[qiNode]); } /*gate*/ *(here->HSMHVGgPtr) += ydc_g[gNode] + ag0*ydyn_g[gNode]; *(here->HSMHVGgpPtr) += ydc_g[gNodePrime] + ag0*ydyn_g[gNodePrime]; /*gate prime*/ *(here->HSMHVGPdPtr) += ydc_gP[dNode] + ag0*ydyn_gP[dNode]; *(here->HSMHVGPdpPtr) += ydc_gP[dNodePrime] + ag0*ydyn_gP[dNodePrime]; *(here->HSMHVGPgPtr) += ydc_gP[gNode] + ag0*ydyn_gP[gNode]; *(here->HSMHVGPgpPtr) += ydc_gP[gNodePrime] + ag0*ydyn_gP[gNodePrime]; *(here->HSMHVGPsPtr) += ydc_gP[sNode] + ag0*ydyn_gP[sNode]; *(here->HSMHVGPspPtr) += ydc_gP[sNodePrime] + ag0*ydyn_gP[sNodePrime]; *(here->HSMHVGPbpPtr) += ydc_gP[bNodePrime] + ag0*ydyn_gP[bNodePrime]; if( flg_tempNode > 0) { /* temp entries in matrix dependent on model type */ *(here->HSMHVGPtempPtr) += model->HSMHV_type * (ydc_gP[tempNode] + ag0*ydyn_gP[tempNode]); } if (flg_nqs) { *(here->HSMHVGPqiPtr) += model->HSMHV_type * (ydc_gP[qiNode] + ag0*ydyn_gP[qiNode]); *(here->HSMHVGPqbPtr) += model->HSMHV_type * (ydc_gP[qbNode] + ag0*ydyn_gP[qbNode]); } /*source*/ *(here->HSMHVSdPtr) += ydc_s[dNode] + ag0*ydyn_s[dNode]; *(here->HSMHVSsPtr) += ydc_s[sNode] + ag0*ydyn_s[sNode]; *(here->HSMHVSdpPtr) += ydc_s[dNodePrime] + ag0*ydyn_s[dNodePrime]; *(here->HSMHVSgpPtr) += ydc_s[gNodePrime] + ag0*ydyn_s[gNodePrime]; *(here->HSMHVSspPtr) += ydc_s[sNodePrime] + ag0*ydyn_s[sNodePrime]; *(here->HSMHVSbpPtr) += ydc_s[bNodePrime] + ag0*ydyn_s[bNodePrime]; *(here->HSMHVSsbPtr) += ydc_s[sbNode] + ag0*ydyn_s[sbNode]; if (flg_subNode > 0) { *(here->HSMHVSsubPtr) += ydc_s[subNode]; } if( flg_tempNode > 0) { /* temp entries in matrix dependent on model type */ *(here->HSMHVStempPtr) += model->HSMHV_type * (ydc_s[tempNode]+ ag0*ydyn_s[tempNode]); } /*source prime*/ *(here->HSMHVSPdPtr) += ydc_sP[dNode] + ag0*ydyn_sP[dNode]; *(here->HSMHVSPdpPtr) += ydc_sP[dNodePrime] + ag0*ydyn_sP[dNodePrime]; *(here->HSMHVSPgpPtr) += ydc_sP[gNodePrime] + ag0*ydyn_sP[gNodePrime]; *(here->HSMHVSPsPtr) += ydc_sP[sNode] + ag0*ydyn_sP[sNode]; *(here->HSMHVSPspPtr) += ydc_sP[sNodePrime] + ag0*ydyn_sP[sNodePrime]; *(here->HSMHVSPbpPtr) += ydc_sP[bNodePrime] + ag0*ydyn_sP[bNodePrime]; if (flg_subNode > 0) { *(here->HSMHVSPsubPtr) += ydc_sP[subNode]; } if( flg_tempNode > 0) { /* temp entries in matrix dependent on model type */ *(here->HSMHVSPtempPtr) += model->HSMHV_type * (ydc_sP[tempNode] + ag0*ydyn_sP[tempNode]); } if (flg_nqs) { *(here->HSMHVSPqiPtr) += model->HSMHV_type * (ydc_sP[qiNode] + ag0*ydyn_sP[qiNode]); } /*bulk prime*/ *(here->HSMHVBPdPtr) += ydc_bP[dNode] + ag0*ydyn_bP[dNode]; *(here->HSMHVBPdpPtr) += ydc_bP[dNodePrime] + ag0*ydyn_bP[dNodePrime]; *(here->HSMHVBPgpPtr) += ydc_bP[gNodePrime] + ag0*ydyn_bP[gNodePrime]; *(here->HSMHVBPspPtr) += ydc_bP[sNodePrime] + ag0*ydyn_bP[sNodePrime]; *(here->HSMHVBPsPtr) += ydc_bP[sNode] + ag0*ydyn_bP[sNode]; *(here->HSMHVBPbpPtr) += ydc_bP[bNodePrime] + ag0*ydyn_bP[bNodePrime]; *(here->HSMHVBPbPtr) += ydc_bP[bNode] + ag0*ydyn_bP[bNode]; *(here->HSMHVBPdbPtr) += ydc_bP[dbNode] + ag0*ydyn_bP[dbNode]; *(here->HSMHVBPsbPtr) += ydc_bP[sbNode] + ag0*ydyn_bP[sbNode]; if( flg_tempNode > 0) { /* temp entries in matrix dependent on model type */ *(here->HSMHVBPtempPtr) += model->HSMHV_type * (ydc_bP[tempNode] + ag0*ydyn_bP[tempNode]); } if (flg_nqs) { *(here->HSMHVBPqbPtr) += model->HSMHV_type * (ydc_bP[qbNode] + ag0*ydyn_bP[qbNode]); } /*bulk*/ *(here->HSMHVBbpPtr) += ydc_b[bNodePrime] + ag0*ydyn_b[bNodePrime]; *(here->HSMHVBbPtr) += ydc_b[bNode] + ag0*ydyn_b[bNode]; /*drain bulk*/ *(here->HSMHVDBdPtr) += ydc_db[dNode] + ag0*ydyn_db[dNode]; *(here->HSMHVDBbpPtr) += ydc_db[bNodePrime] + ag0*ydyn_db[bNodePrime]; *(here->HSMHVDBdbPtr) += ydc_db[dbNode] + ag0*ydyn_db[dbNode]; if( flg_tempNode > 0) { /* temp entries in matrix dependent on model type */ *(here->HSMHVDBtempPtr) += model->HSMHV_type * (ydc_db[tempNode] + ag0*ydyn_db[tempNode]); } /*source bulk*/ *(here->HSMHVSBsPtr) += ydc_sb[sNode] + ag0*ydyn_sb[sNode]; *(here->HSMHVSBbpPtr) += ydc_sb[bNodePrime] + ag0*ydyn_sb[bNodePrime]; *(here->HSMHVSBsbPtr) += ydc_sb[sbNode] + ag0*ydyn_sb[sbNode]; if( flg_tempNode > 0) { /* temp entries in matrix dependent on model type */ *(here->HSMHVSBtempPtr) += model->HSMHV_type * (ydc_sb[tempNode] + ag0*ydyn_sb[tempNode]); } /*temp*/ if( flg_tempNode > 0) { /* temp entries in matrix dependent on model type */ *(here->HSMHVTempdPtr) += model->HSMHV_type * (ydc_t[dNode] + ag0*ydyn_t[dNode] ); *(here->HSMHVTempdpPtr) += model->HSMHV_type * (ydc_t[dNodePrime] + ag0*ydyn_t[dNodePrime]); *(here->HSMHVTempgpPtr) += model->HSMHV_type * (ydc_t[gNodePrime] + ag0*ydyn_t[gNodePrime]); *(here->HSMHVTempsPtr) += model->HSMHV_type * (ydc_t[sNode] + ag0*ydyn_t[sNode] ); *(here->HSMHVTempspPtr) += model->HSMHV_type * (ydc_t[sNodePrime] + ag0*ydyn_t[sNodePrime]); *(here->HSMHVTempbpPtr) += model->HSMHV_type * (ydc_t[bNodePrime] + ag0*ydyn_t[bNodePrime]); /* no type factor at main diagonal temp entry! */ *(here->HSMHVTemptempPtr) += ydc_t[tempNode] + ag0*ydyn_t[tempNode]; } /* additional entries for flat nqs handling */ if ( flg_nqs ) { /*qi*/ *(here->HSMHVQIdpPtr) += model->HSMHV_type * (ydc_qi[dNodePrime] + ag0*ydyn_qi[dNodePrime]); *(here->HSMHVQIgpPtr) += model->HSMHV_type * (ydc_qi[gNodePrime] + ag0*ydyn_qi[gNodePrime]); *(here->HSMHVQIspPtr) += model->HSMHV_type * (ydc_qi[sNodePrime] + ag0*ydyn_qi[sNodePrime]); *(here->HSMHVQIbpPtr) += model->HSMHV_type * (ydc_qi[bNodePrime] + ag0*ydyn_qi[bNodePrime]); *(here->HSMHVQIqiPtr) += (ydc_qi[qiNode] + ag0*ydyn_qi[qiNode]); if ( flg_tempNode > 0 ) { /* self heating */ *(here->HSMHVQItempPtr) += (ydc_qi[tempNode] + ag0*ydyn_qi[tempNode]); } /*qb*/ *(here->HSMHVQBdpPtr) += model->HSMHV_type * (ydc_qb[dNodePrime] + ag0*ydyn_qb[dNodePrime]); *(here->HSMHVQBgpPtr) += model->HSMHV_type * (ydc_qb[gNodePrime] + ag0*ydyn_qb[gNodePrime]); *(here->HSMHVQBspPtr) += model->HSMHV_type * (ydc_qb[sNodePrime] + ag0*ydyn_qb[sNodePrime]); *(here->HSMHVQBbpPtr) += model->HSMHV_type * (ydc_qb[bNodePrime] + ag0*ydyn_qb[bNodePrime]); *(here->HSMHVQBqbPtr) += (ydc_qb[qbNode] + ag0*ydyn_qb[qbNode]); if ( flg_tempNode > 0 ) { /* self heating */ *(here->HSMHVQBtempPtr) += (ydc_qb[tempNode] + ag0*ydyn_qb[tempNode]); } } line1000: if (ckt->CKTnoncon != noncon_old) { ckt->CKTtroubleElt = (GENinstance *) here; } } /* End of MOSFET Instance */ } /* End of Model Instance */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhvnoi.c0000644000175000017500000001674113546075722022723 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2012 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 1 SUBVERSION : 2 REVISION : 4 ) Model Parameter VERSION : 1.23 FILE : hsmhvnoi.c DATE : 2013.04.30 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ #include "ngspice/ngspice.h" #include "hsmhvdef.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" #include "ngspice/const.h" /* jwan */ #include "hsmhvevalenv.h" /* #include "hsmhvmacro.h" */ /* * HSMHVnoise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with MOSFET's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the MOSFET's is summed with the variable "OnDens". */ int HSMHVnoise ( int mode, int operation, GENmodel *inModel, CKTcircuit *ckt, register Ndata *data, double *OnDens) { register HSMHVmodel *model = (HSMHVmodel *)inModel; register HSMHVinstance *here; double tempOnoise=0.0 ; double tempInoise=0.0 ; double noizDens[HSMHVNSRCS] ; double lnNdens[HSMHVNSRCS] ; register int i; double G =0.0 ; double TTEMP = 0.0 ; /* define the names of the noise sources */ static char * HSMHVnNames[HSMHVNSRCS] = { /* Note that we have to keep the order consistent with the index definitions in hsmhvdefs.h */ ".rd", /* noise due to rd */ ".rs", /* noise due to rs */ ".id", /* noise due to id */ ".1ovf", /* flicker (1/f) noise */ ".ign", /* induced gate noise component at the drain node */ "" /* total transistor noise */ }; for ( ;model != NULL; model = HSMHVnextModel(model)) { for ( here = HSMHVinstances(model); here != NULL; here = HSMHVnextInstance(here)) { switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (((NOISEAN*)ckt->CKTcurJob)->NStpsSm != 0) { switch (mode) { case N_DENS: for ( i = 0; i < HSMHVNSRCS; i++ ) { NOISE_ADD_OUTVAR(ckt, data, "onoise.%s%s", here->HSMHVname, HSMHVnNames[i]); } break; case INT_NOIZ: for ( i = 0; i < HSMHVNSRCS; i++ ) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total.%s%s", here->HSMHVname, HSMHVnNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total.%s%s", here->HSMHVname, HSMHVnNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: /* temperature */ TTEMP = ckt->CKTtemp; if ( here->HSMHV_dtemp_Given ) { TTEMP = TTEMP + here->HSMHV_dtemp ; } TTEMP = TTEMP + *(ckt->CKTstate0 + here->HSMHVdeltemp) ; /* rs/rd thermal noise */ if ( model->HSMHV_corsrd == 1 || model->HSMHV_corsrd == 3 ) { NevalSrc(&noizDens[HSMHVRDNOIZ], NULL, ckt, N_GAIN, here->HSMHVdNodePrime, here->HSMHVdNode, 0.0); noizDens[HSMHVRDNOIZ] *= 4 * C_KB * TTEMP * here->HSMHVdrainConductance ; lnNdens[HSMHVRDNOIZ] = log( MAX(noizDens[HSMHVRDNOIZ],N_MINLOG) ); NevalSrc(&noizDens[HSMHVRSNOIZ], NULL, ckt, N_GAIN, here->HSMHVsNodePrime, here->HSMHVsNode, 0.0); noizDens[HSMHVRSNOIZ] *= 4 * C_KB * TTEMP * here->HSMHVsourceConductance ; lnNdens[HSMHVRSNOIZ] = log( MAX(noizDens[HSMHVRSNOIZ],N_MINLOG) ); } else { noizDens[HSMHVRDNOIZ] = 0e0 ; lnNdens[HSMHVRDNOIZ] = N_MINLOG ; noizDens[HSMHVRSNOIZ] = 0e0 ; lnNdens[HSMHVRSNOIZ] = N_MINLOG ; } /* channel thermal noise */ NevalSrc(&noizDens[HSMHVIDNOIZ], NULL, ckt, N_GAIN, here->HSMHVdNodePrime, here->HSMHVsNodePrime, 0.0); switch( model->HSMHV_noise ) { case 1: /* HiSIMHV model */ G = here->HSMHV_noithrml ; noizDens[HSMHVIDNOIZ] *= 4 * C_KB * TTEMP * G ; lnNdens[HSMHVIDNOIZ] = log( MAX(noizDens[HSMHVIDNOIZ],N_MINLOG) ); break; } /* flicker noise */ NevalSrc(&noizDens[HSMHVFLNOIZ], NULL, ckt, N_GAIN, here->HSMHVdNodePrime, here->HSMHVsNodePrime, 0.0); switch ( model->HSMHV_noise ) { case 1: /* HiSIM model */ noizDens[HSMHVFLNOIZ] *= here->HSMHV_noiflick / pow(data->freq, model->HSMHV_falph) ; lnNdens[HSMHVFLNOIZ] = log(MAX(noizDens[HSMHVFLNOIZ], N_MINLOG)); break; } /* induced gate noise */ NevalSrc(&noizDens[HSMHVIGNOIZ], NULL, ckt, N_GAIN, here->HSMHVdNodePrime, here->HSMHVsNodePrime, 0.0); switch ( model->HSMHV_noise ) { case 1: /* HiSIM model */ noizDens[HSMHVIGNOIZ] *= here->HSMHV_noiigate * here->HSMHV_noicross * here->HSMHV_noicross * data->freq * data->freq; lnNdens[HSMHVIGNOIZ] = log(MAX(noizDens[HSMHVIGNOIZ], N_MINLOG)); break; } /* total */ noizDens[HSMHVTOTNOIZ] = noizDens[HSMHVRDNOIZ] + noizDens[HSMHVRSNOIZ] + noizDens[HSMHVIDNOIZ] + noizDens[HSMHVFLNOIZ] + noizDens[HSMHVIGNOIZ]; lnNdens[HSMHVTOTNOIZ] = log(MAX(noizDens[HSMHVTOTNOIZ], N_MINLOG)); *OnDens += noizDens[HSMHVTOTNOIZ]; if ( data->delFreq == 0.0 ) { /* if we haven't done any previous integration, we need to initialize our "history" variables. */ for ( i = 0; i < HSMHVNSRCS; i++ ) here->HSMHVnVar[LNLSTDENS][i] = lnNdens[i]; /* clear out our integration variables if it's the first pass */ if (data->freq == ((NOISEAN*) ckt->CKTcurJob)->NstartFreq) { for (i = 0; i < HSMHVNSRCS; i++) { here->HSMHVnVar[OUTNOIZ][i] = 0.0; here->HSMHVnVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0, we have to integrate. */ for ( i = 0; i < HSMHVNSRCS; i++ ) { if ( i != HSMHVTOTNOIZ ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], here->HSMHVnVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv, lnNdens[i] + data->lnGainInv, here->HSMHVnVar[LNLSTDENS][i] + data->lnGainInv, data); here->HSMHVnVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if ( ((NOISEAN*)ckt->CKTcurJob)->NStpsSm != 0 ) { here->HSMHVnVar[OUTNOIZ][i] += tempOnoise; here->HSMHVnVar[OUTNOIZ][HSMHVTOTNOIZ] += tempOnoise; here->HSMHVnVar[INNOIZ][i] += tempInoise; here->HSMHVnVar[INNOIZ][HSMHVTOTNOIZ] += tempInoise; } } } } if ( data->prtSummary ) { for (i = 0; i < HSMHVNSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if ( ((NOISEAN*)ckt->CKTcurJob)->NStpsSm != 0 ) { for ( i = 0; i < HSMHVNSRCS; i++ ) { data->outpVector[data->outNumber++] = here->HSMHVnVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = here->HSMHVnVar[INNOIZ][i]; } } break; } break; case N_CLOSE: /* do nothing, the main calling routine will close */ return (OK); break; /* the plots */ } /* switch (operation) */ } /* for here */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhvset.c0000644000175000017500000023577513546075722022743 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2012 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 1 SUBVERSION : 2 REVISION : 4 ) Model Parameter VERSION : 1.23 FILE : hsmhvset.c DATE : 2013.04.30 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "hsmhvdef.h" #include "hsmhvevalenv.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define C_m2cm (1.0e2) #define C_cm2m_p3 (1.0e-6) #define C_m2cm_p1o2 (1.0e1) #define BINNING(param) pParam->HSMHV_##param = model->HSMHV_##param \ + model->HSMHV_l##param / Lbin + model->HSMHV_w##param / Wbin \ + model->HSMHV_p##param / LWbin ; #define RANGECHECK(param, min, max, pname) \ if ( (param) < (min) || (param) > (max) ) { \ printf("warning(HiSIMHV): The model/instance parameter %s (= %e) must be in the range [%e , %e].\n", \ (pname), (param), (double) (min), (double) (max) ); \ } #define MINCHECK(param, min, pname) \ if ( (param) < (min) ) { \ printf("warning(HiSIMHV): The model/instance parameter %s (= %e) must be greater than %e.\n", \ (pname), (param), (min) ); \ } int HSMHVsetup( register SMPmatrix *matrix, register GENmodel *inModel, register CKTcircuit *ckt, int *states) /* load the HSMHV device structure with those pointers needed later * for fast matrix loading */ { register HSMHVmodel *model = (HSMHVmodel*)inModel; register HSMHVinstance *here; int error=0 ; CKTnode *tmp; double T2, Rd, Rs ; HSMHVbinningParam *pParam ; HSMHVmodelMKSParam *modelMKS ; HSMHVhereMKSParam *hereMKS ; double LG=0.0, WG =0.0, Lgate =0.0, Wgate =0.0 ; double Lbin=0.0, Wbin=0.0, LWbin =0.0; /* binning */ /* loop through all the HSMHV device models */ for ( ;model != NULL ;model = HSMHVnextModel(model)) { /* Default value Processing for HVMOS Models */ if ( !model->HSMHV_type_Given ) model->HSMHV_type = NMOS ; if ( !model->HSMHV_info_Given ) model->HSMHV_info = 0 ; model->HSMHV_noise = 1; if ( !model->HSMHV_version_Given) { model->HSMHV_version = "1.24" ; printf(" 1.24 is selected for VERSION. (default) \n"); } else { if (strncmp(model->HSMHV_version,"1.24", 4) != 0 ) { model->HSMHV_version = "1.24" ; printf(" 1.24 is selected for VERSION. (default) \n"); } else { printf(" %s is selected for VERSION \n", model->HSMHV_version); } } if ( !model->HSMHV_corsrd_Given ) model->HSMHV_corsrd = 3 ; if ( !model->HSMHV_corg_Given ) model->HSMHV_corg = 0 ; if ( !model->HSMHV_coiprv_Given ) model->HSMHV_coiprv = 1 ; if ( !model->HSMHV_copprv_Given ) model->HSMHV_copprv = 1 ; if ( !model->HSMHV_coadov_Given ) model->HSMHV_coadov = 1 ; if ( !model->HSMHV_coisub_Given ) model->HSMHV_coisub = 0 ; if ( !model->HSMHV_coiigs_Given ) model->HSMHV_coiigs = 0 ; if ( !model->HSMHV_cogidl_Given ) model->HSMHV_cogidl = 0 ; if ( !model->HSMHV_coovlp_Given ) model->HSMHV_coovlp = 1 ; if ( !model->HSMHV_coovlps_Given ) model->HSMHV_coovlps = 0 ; if ( !model->HSMHV_coflick_Given ) model->HSMHV_coflick = 0 ; if ( !model->HSMHV_coisti_Given ) model->HSMHV_coisti = 0 ; if ( !model->HSMHV_conqs_Given ) model->HSMHV_conqs = 0 ; /* QS (default) */ if ( !model->HSMHV_cothrml_Given ) model->HSMHV_cothrml = 0 ; if ( !model->HSMHV_coign_Given ) model->HSMHV_coign = 0 ; /* induced gate noise */ if ( !model->HSMHV_codfm_Given ) model->HSMHV_codfm = 0 ; /* DFM */ if ( !model->HSMHV_coqovsm_Given ) model->HSMHV_coqovsm = 1 ; if ( !model->HSMHV_corbnet_Given ) model->HSMHV_corbnet = 0 ; else if ( model->HSMHV_corbnet != 0 && model->HSMHV_corbnet != 1 ) { model->HSMHV_corbnet = 0; printf("warning(HiSIMHV): CORBNET has been set to its default value: %d.\n", model->HSMHV_corbnet); } if ( !model->HSMHV_coselfheat_Given ) model->HSMHV_coselfheat = 0 ; /* Self-heating model */ if ( !model->HSMHV_cosubnode_Given ) model->HSMHV_cosubnode = 0 ; if ( !model->HSMHV_cosym_Given ) model->HSMHV_cosym = 0 ; /* Symmetry model for HV */ if ( !model->HSMHV_cotemp_Given ) model->HSMHV_cotemp = 0 ; if ( !model->HSMHV_coldrift_Given ) model->HSMHV_coldrift = 0 ; if ( !model->HSMHV_vmax_Given ) model->HSMHV_vmax = 1.0e7 ; if ( !model->HSMHV_vmaxt1_Given ) model->HSMHV_vmaxt1 = 0.0 ; if ( !model->HSMHV_vmaxt2_Given ) model->HSMHV_vmaxt2 = 0.0 ; if ( !model->HSMHV_bgtmp1_Given ) model->HSMHV_bgtmp1 = 90.25e-6 ; if ( !model->HSMHV_bgtmp2_Given ) model->HSMHV_bgtmp2 = 1.0e-7 ; if ( !model->HSMHV_eg0_Given ) model->HSMHV_eg0 = 1.1785e0 ; if ( !model->HSMHV_tox_Given ) model->HSMHV_tox = 30e-9 ; if ( !model->HSMHV_xld_Given ) model->HSMHV_xld = 0.0 ; if ( !model->HSMHV_lovers_Given ) model->HSMHV_lovers = 30e-9 ; if ( model->HSMHV_lover_Given ) model->HSMHV_lovers = model->HSMHV_lover ; if ( !model->HSMHV_rdov11_Given ) model->HSMHV_rdov11 = 0.0 ; if ( !model->HSMHV_rdov12_Given ) model->HSMHV_rdov12 = 1.0 ; if ( !model->HSMHV_rdov13_Given ) model->HSMHV_rdov13 = 1.0 ; if ( !model->HSMHV_rdslp1_Given ) model->HSMHV_rdslp1 = 1.0 ; if ( !model->HSMHV_rdict1_Given ) model->HSMHV_rdict1 = 1.0 ; if ( !model->HSMHV_rdslp2_Given ) model->HSMHV_rdslp2 = 1.0 ; if ( !model->HSMHV_rdict2_Given ) model->HSMHV_rdict2 = 0.0 ; if ( !model->HSMHV_loverld_Given ) model->HSMHV_loverld = 1.0e-6 ; if ( !model->HSMHV_ldrift1_Given ) model->HSMHV_ldrift1 = 1.0e-6 ; if ( !model->HSMHV_ldrift2_Given ) model->HSMHV_ldrift2 = 1.0e-6 ; if ( !model->HSMHV_ldrift1s_Given ) model->HSMHV_ldrift1s = 0.0 ; if ( !model->HSMHV_ldrift2s_Given ) model->HSMHV_ldrift2s = 1.0e-6 ; if ( !model->HSMHV_subld1_Given ) model->HSMHV_subld1 = 0.0 ; if ( !model->HSMHV_subld2_Given ) model->HSMHV_subld2 = 0.0 ; if ( !model->HSMHV_ddltmax_Given ) model->HSMHV_ddltmax = 10.0 ; /* Vdseff */ if ( !model->HSMHV_ddltslp_Given ) model->HSMHV_ddltslp = 0.0 ; /* Vdseff */ if ( !model->HSMHV_ddltict_Given ) model->HSMHV_ddltict = 10.0 ; /* Vdseff */ if ( !model->HSMHV_vfbover_Given ) model->HSMHV_vfbover = -0.5 ; if ( !model->HSMHV_nover_Given ) model->HSMHV_nover = 3.0e16 ; if ( !model->HSMHV_novers_Given ) model->HSMHV_novers = 0.0 ; if ( !model->HSMHV_xwd_Given ) model->HSMHV_xwd = 0.0 ; if ( !model->HSMHV_xwdc_Given ) model->HSMHV_xwdc = model->HSMHV_xwd ; if ( !model->HSMHV_xl_Given ) model->HSMHV_xl = 0.0 ; if ( !model->HSMHV_xw_Given ) model->HSMHV_xw = 0.0 ; if ( !model->HSMHV_saref_Given ) model->HSMHV_saref = 1e-6 ; if ( !model->HSMHV_sbref_Given ) model->HSMHV_sbref = 1e-6 ; if ( !model->HSMHV_ll_Given ) model->HSMHV_ll = 0.0 ; if ( !model->HSMHV_lld_Given ) model->HSMHV_lld = 0.0 ; if ( !model->HSMHV_lln_Given ) model->HSMHV_lln = 0.0 ; if ( !model->HSMHV_wl_Given ) model->HSMHV_wl = 0.0 ; if ( !model->HSMHV_wl1_Given ) model->HSMHV_wl1 = 0.0 ; if ( !model->HSMHV_wl1p_Given ) model->HSMHV_wl1p = 1.0 ; if ( !model->HSMHV_wl2_Given ) model->HSMHV_wl2 = 0.0 ; if ( !model->HSMHV_wl2p_Given ) model->HSMHV_wl2p = 1.0 ; if ( !model->HSMHV_wld_Given ) model->HSMHV_wld = 0.0 ; if ( !model->HSMHV_wln_Given ) model->HSMHV_wln = 0.0 ; if ( !model->HSMHV_rsh_Given ) model->HSMHV_rsh = 0.0 ; if ( !model->HSMHV_rshg_Given ) model->HSMHV_rshg = 0.0 ; if ( !model->HSMHV_xqy_Given ) model->HSMHV_xqy = 0.0 ; if ( !model->HSMHV_xqy1_Given ) model->HSMHV_xqy1 = 0.0 ; if ( !model->HSMHV_xqy2_Given ) model->HSMHV_xqy2 = 0.0 ; if ( !model->HSMHV_rs_Given ) model->HSMHV_rs = 0.0 ; if ( !model->HSMHV_rd_Given ) model->HSMHV_rd = 5.0e-3 ; if ( !model->HSMHV_vfbc_Given ) model->HSMHV_vfbc = -1.0 ; if ( !model->HSMHV_vbi_Given ) model->HSMHV_vbi = 1.1 ; if ( !model->HSMHV_nsubc_Given ) model->HSMHV_nsubc = 5.0e17 ; if ( !model->HSMHV_parl2_Given ) model->HSMHV_parl2 = 10.0e-9 ; if ( !model->HSMHV_lp_Given ) model->HSMHV_lp = 0.0 ; if ( !model->HSMHV_nsubp_Given ) model->HSMHV_nsubp = 1.0e18 ; if ( !model->HSMHV_nsubp0_Given ) model->HSMHV_nsubp0 = 0.0 ; if ( !model->HSMHV_nsubwp_Given ) model->HSMHV_nsubwp = 1.0 ; if ( !model->HSMHV_scp1_Given ) model->HSMHV_scp1 = 1.0 ; if ( !model->HSMHV_scp2_Given ) model->HSMHV_scp2 = 0.0 ; if ( !model->HSMHV_scp3_Given ) model->HSMHV_scp3 = 0.0 ; if ( !model->HSMHV_sc1_Given ) model->HSMHV_sc1 = 1.0 ; if ( !model->HSMHV_sc2_Given ) model->HSMHV_sc2 = 0.0 ; if ( !model->HSMHV_sc3_Given ) model->HSMHV_sc3 = 0.0 ; if ( !model->HSMHV_sc4_Given ) model->HSMHV_sc4 = 0.0 ; if ( !model->HSMHV_pgd1_Given ) model->HSMHV_pgd1 = 0.0 ; if ( !model->HSMHV_pgd2_Given ) model->HSMHV_pgd2 = 1.0 ; if ( !model->HSMHV_pgd3_Given ) model->HSMHV_pgd3 = 0.8 ; if ( !model->HSMHV_pgd4_Given ) model->HSMHV_pgd4 = 0.0 ; if ( !model->HSMHV_ndep_Given ) model->HSMHV_ndep = 1.0 ; if ( !model->HSMHV_ndepl_Given ) model->HSMHV_ndepl = 0.0 ; if ( !model->HSMHV_ndeplp_Given ) model->HSMHV_ndeplp = 1.0 ; if ( !model->HSMHV_ninv_Given ) model->HSMHV_ninv = 0.5 ; if ( !model->HSMHV_muecb0_Given ) model->HSMHV_muecb0 = 1.0e3 ; if ( !model->HSMHV_muecb1_Given ) model->HSMHV_muecb1 = 100.0 ; if ( !model->HSMHV_mueph0_Given ) model->HSMHV_mueph0 = 300.0e-3 ; if ( !model->HSMHV_mueph1_Given ) { if (model->HSMHV_type == NMOS) model->HSMHV_mueph1 = 25.0e3 ; else model->HSMHV_mueph1 = 9.0e3 ; } if ( !model->HSMHV_muephw_Given ) model->HSMHV_muephw = 0.0 ; if ( !model->HSMHV_muepwp_Given ) model->HSMHV_muepwp = 1.0 ; if ( !model->HSMHV_muephl_Given ) model->HSMHV_muephl = 0.0 ; if ( !model->HSMHV_mueplp_Given ) model->HSMHV_mueplp = 1.0 ; if ( !model->HSMHV_muephs_Given ) model->HSMHV_muephs = 0.0 ; if ( !model->HSMHV_muepsp_Given ) model->HSMHV_muepsp = 1.0 ; if ( !model->HSMHV_vtmp_Given ) model->HSMHV_vtmp = 0.0 ; if ( !model->HSMHV_wvth0_Given ) model->HSMHV_wvth0 = 0.0 ; if ( !model->HSMHV_muesr0_Given ) model->HSMHV_muesr0 = 2.0 ; if ( !model->HSMHV_muesr1_Given ) model->HSMHV_muesr1 = 1.0e16 ; if ( !model->HSMHV_muesrl_Given ) model->HSMHV_muesrl = 0.0 ; if ( !model->HSMHV_muesrw_Given ) model->HSMHV_muesrw = 0.0 ; if ( !model->HSMHV_mueswp_Given ) model->HSMHV_mueswp = 1.0 ; if ( !model->HSMHV_mueslp_Given ) model->HSMHV_mueslp = 1.0 ; if ( !model->HSMHV_muetmp_Given ) model->HSMHV_muetmp = 1.5 ; if ( !model->HSMHV_bb_Given ) { if (model->HSMHV_type == NMOS) model->HSMHV_bb = 2.0 ; else model->HSMHV_bb = 1.0 ; } if ( !model->HSMHV_sub1_Given ) model->HSMHV_sub1 = 10.0 ; if ( !model->HSMHV_sub2_Given ) model->HSMHV_sub2 = 25.0 ; if ( !model->HSMHV_svgs_Given ) model->HSMHV_svgs = 0.8e0 ; if ( !model->HSMHV_svbs_Given ) model->HSMHV_svbs = 0.5e0 ; if ( !model->HSMHV_svbsl_Given ) model->HSMHV_svbsl = 0e0 ; if ( !model->HSMHV_svds_Given ) model->HSMHV_svds = 0.8e0 ; if ( !model->HSMHV_slg_Given ) model->HSMHV_slg = 30e-9 ; if ( !model->HSMHV_sub1l_Given ) model->HSMHV_sub1l = 2.5e-3 ; if ( !model->HSMHV_sub2l_Given ) model->HSMHV_sub2l = 2e-6 ; if ( !model->HSMHV_fn1_Given ) model->HSMHV_fn1 = 50e0 ; if ( !model->HSMHV_fn2_Given ) model->HSMHV_fn2 = 170e-6 ; if ( !model->HSMHV_fn3_Given ) model->HSMHV_fn3 = 0e0 ; if ( !model->HSMHV_fvbs_Given ) model->HSMHV_fvbs = 12e-3 ; if ( !model->HSMHV_svgsl_Given ) model->HSMHV_svgsl = 0.0 ; if ( !model->HSMHV_svgslp_Given ) model->HSMHV_svgslp = 1.0 ; if ( !model->HSMHV_svgswp_Given ) model->HSMHV_svgswp = 1.0 ; if ( !model->HSMHV_svgsw_Given ) model->HSMHV_svgsw = 0.0 ; if ( !model->HSMHV_svbslp_Given ) model->HSMHV_svbslp = 1.0 ; if ( !model->HSMHV_slgl_Given ) model->HSMHV_slgl = 0.0 ; if ( !model->HSMHV_slglp_Given ) model->HSMHV_slglp = 1.0 ; if ( !model->HSMHV_sub1lp_Given ) model->HSMHV_sub1lp = 1.0 ; if ( !model->HSMHV_nsti_Given ) model->HSMHV_nsti = 1.0e17 ; if ( !model->HSMHV_wsti_Given ) model->HSMHV_wsti = 0.0 ; if ( !model->HSMHV_wstil_Given ) model->HSMHV_wstil = 0.0 ; if ( !model->HSMHV_wstilp_Given ) model->HSMHV_wstilp = 1.0 ; if ( !model->HSMHV_wstiw_Given ) model->HSMHV_wstiw = 0.0 ; if ( !model->HSMHV_wstiwp_Given ) model->HSMHV_wstiwp = 1.0 ; if ( !model->HSMHV_scsti1_Given ) model->HSMHV_scsti1 = 0.0 ; if ( !model->HSMHV_scsti2_Given ) model->HSMHV_scsti2 = 0.0 ; if ( !model->HSMHV_vthsti_Given ) model->HSMHV_vthsti = 0.0 ; if ( !model->HSMHV_vdsti_Given ) model->HSMHV_vdsti = 0.0 ; if ( !model->HSMHV_muesti1_Given ) model->HSMHV_muesti1 = 0.0 ; if ( !model->HSMHV_muesti2_Given ) model->HSMHV_muesti2 = 0.0 ; if ( !model->HSMHV_muesti3_Given ) model->HSMHV_muesti3 = 1.0 ; if ( !model->HSMHV_nsubpsti1_Given ) model->HSMHV_nsubpsti1 = 0.0 ; if ( !model->HSMHV_nsubpsti2_Given ) model->HSMHV_nsubpsti2 = 0.0 ; if ( !model->HSMHV_nsubpsti3_Given ) model->HSMHV_nsubpsti3 = 1.0 ; if ( !model->HSMHV_lpext_Given ) model->HSMHV_lpext = 1.0e-50 ; if ( !model->HSMHV_npext_Given ) model->HSMHV_npext = 1.0e17 ; if ( !model->HSMHV_scp21_Given ) model->HSMHV_scp21 = 0.0 ; if ( !model->HSMHV_scp22_Given ) model->HSMHV_scp22 = 0.0 ; if ( !model->HSMHV_bs1_Given ) model->HSMHV_bs1 = 0.0 ; if ( !model->HSMHV_bs2_Given ) model->HSMHV_bs2 = 0.9 ; if ( !model->HSMHV_tpoly_Given ) model->HSMHV_tpoly = 200e-9 ; if ( !model->HSMHV_cgbo_Given ) model->HSMHV_cgbo = 0.0 ; if ( !model->HSMHV_js0_Given ) model->HSMHV_js0 = 0.5e-6 ; if ( !model->HSMHV_js0sw_Given ) model->HSMHV_js0sw = 0.0 ; if ( !model->HSMHV_nj_Given ) model->HSMHV_nj = 1.0 ; if ( !model->HSMHV_njsw_Given ) model->HSMHV_njsw = 1.0 ; if ( !model->HSMHV_xti_Given ) model->HSMHV_xti = 2.0 ; if ( !model->HSMHV_cj_Given ) model->HSMHV_cj = 5.0e-04 ; if ( !model->HSMHV_cjsw_Given ) model->HSMHV_cjsw = 5.0e-10 ; if ( !model->HSMHV_cjswg_Given ) model->HSMHV_cjswg = 5.0e-10 ; if ( !model->HSMHV_mj_Given ) model->HSMHV_mj = 0.5e0 ; if ( !model->HSMHV_mjsw_Given ) model->HSMHV_mjsw = 0.33e0 ; if ( !model->HSMHV_mjswg_Given ) model->HSMHV_mjswg = 0.33e0 ; if ( !model->HSMHV_pb_Given ) model->HSMHV_pb = 1.0e0 ; if ( !model->HSMHV_pbsw_Given ) model->HSMHV_pbsw = 1.0e0 ; if ( !model->HSMHV_pbswg_Given ) model->HSMHV_pbswg = 1.0e0 ; if ( !model->HSMHV_xti2_Given ) model->HSMHV_xti2 = 0.0e0 ; if ( !model->HSMHV_cisb_Given ) model->HSMHV_cisb = 0.0e0 ; if ( !model->HSMHV_cvb_Given ) model->HSMHV_cvb = 0.0e0 ; if ( !model->HSMHV_ctemp_Given ) model->HSMHV_ctemp = 0.0e0 ; if ( !model->HSMHV_cisbk_Given ) model->HSMHV_cisbk = 0.0e0 ; if ( !model->HSMHV_cvbk_Given ) model->HSMHV_cvbk = 0.0e0 ; if ( !model->HSMHV_divx_Given ) model->HSMHV_divx = 0.0e0 ; if ( !model->HSMHV_clm1_Given ) model->HSMHV_clm1 = 0.7 ; if ( !model->HSMHV_clm2_Given ) model->HSMHV_clm2 = 2.0 ; if ( !model->HSMHV_clm3_Given ) model->HSMHV_clm3 = 1.0 ; if ( !model->HSMHV_clm5_Given ) model->HSMHV_clm5 = 1.0 ; if ( !model->HSMHV_clm6_Given ) model->HSMHV_clm6 = 0.0 ; if ( !model->HSMHV_vover_Given ) model->HSMHV_vover = 0.3 ; if ( !model->HSMHV_voverp_Given ) model->HSMHV_voverp = 0.3 ; if ( !model->HSMHV_wfc_Given ) model->HSMHV_wfc = 0.0 ; if ( !model->HSMHV_nsubcw_Given ) model->HSMHV_nsubcw = 0.0 ; if ( !model->HSMHV_nsubcwp_Given ) model->HSMHV_nsubcwp = 1.0 ; if ( !model->HSMHV_qme1_Given ) model->HSMHV_qme1 = 0.0 ; if ( !model->HSMHV_qme2_Given ) model->HSMHV_qme2 = 0.0 ; if ( !model->HSMHV_qme3_Given ) model->HSMHV_qme3 = 0.0 ; if ( !model->HSMHV_vovers_Given ) model->HSMHV_vovers = 0.0 ; if ( !model->HSMHV_voversp_Given ) model->HSMHV_voversp = 0.0 ; if ( !model->HSMHV_gidl1_Given ) model->HSMHV_gidl1 = 2e0 ; if ( !model->HSMHV_gidl2_Given ) model->HSMHV_gidl2 = 3e7 ; if ( !model->HSMHV_gidl3_Given ) model->HSMHV_gidl3 = 0.9e0 ; if ( !model->HSMHV_gidl4_Given ) model->HSMHV_gidl4 = 0.0 ; if ( !model->HSMHV_gidl5_Given ) model->HSMHV_gidl5 = 0.2e0 ; if ( !model->HSMHV_gleak1_Given ) model->HSMHV_gleak1 = 50e0 ; if ( !model->HSMHV_gleak2_Given ) model->HSMHV_gleak2 = 10e6 ; if ( !model->HSMHV_gleak3_Given ) model->HSMHV_gleak3 = 60e-3 ; if ( !model->HSMHV_gleak4_Given ) model->HSMHV_gleak4 = 4e0 ; if ( !model->HSMHV_gleak5_Given ) model->HSMHV_gleak5 = 7.5e3 ; if ( !model->HSMHV_gleak6_Given ) model->HSMHV_gleak6 = 250e-3 ; if ( !model->HSMHV_gleak7_Given ) model->HSMHV_gleak7 = 1e-6 ; if ( !model->HSMHV_glpart1_Given ) model->HSMHV_glpart1 = 0.5 ; if ( !model->HSMHV_glksd1_Given ) model->HSMHV_glksd1 = 1.0e-15 ; if ( !model->HSMHV_glksd2_Given ) model->HSMHV_glksd2 = 5e6 ; if ( !model->HSMHV_glksd3_Given ) model->HSMHV_glksd3 = -5e6 ; if ( !model->HSMHV_glkb1_Given ) model->HSMHV_glkb1 = 5e-16 ; if ( !model->HSMHV_glkb2_Given ) model->HSMHV_glkb2 = 1e0 ; if ( !model->HSMHV_glkb3_Given ) model->HSMHV_glkb3 = 0e0 ; if ( !model->HSMHV_egig_Given ) model->HSMHV_egig = 0e0 ; if ( !model->HSMHV_igtemp2_Given ) model->HSMHV_igtemp2 = 0e0 ; if ( !model->HSMHV_igtemp3_Given ) model->HSMHV_igtemp3 = 0e0 ; if ( !model->HSMHV_vzadd0_Given ) model->HSMHV_vzadd0 = 10.0e-3 ; if ( !model->HSMHV_pzadd0_Given ) model->HSMHV_pzadd0 = 5.0e-3 ; if ( !model->HSMHV_nftrp_Given ) model->HSMHV_nftrp = 10e9 ; if ( !model->HSMHV_nfalp_Given ) model->HSMHV_nfalp = 1.0e-19 ; if ( !model->HSMHV_cit_Given ) model->HSMHV_cit = 0e0 ; if ( !model->HSMHV_falph_Given ) model->HSMHV_falph = 1.0 ; if ( !model->HSMHV_kappa_Given ) model->HSMHV_kappa = 3.90e0 ; if ( !model->HSMHV_cgso_Given ) model->HSMHV_cgso = 0.0 ; if ( !model->HSMHV_cgdo_Given ) model->HSMHV_cgdo = 0.0 ; if ( !model->HSMHV_pthrou_Given ) model->HSMHV_pthrou = 0.0 ; if ( !model->HSMHV_vdiffj_Given ) model->HSMHV_vdiffj = 0.6e-3 ; if ( !model->HSMHV_dly1_Given ) model->HSMHV_dly1 = 100.0e-12 ; if ( !model->HSMHV_dly2_Given ) model->HSMHV_dly2 = 0.7e0 ; if ( !model->HSMHV_dly3_Given ) model->HSMHV_dly3 = 0.8e-6 ; if ( !model->HSMHV_tnom_Given ) model->HSMHV_tnom = 27.0 ; /* [C] */ if ( !model->HSMHV_ovslp_Given ) model->HSMHV_ovslp = 2.1e-7 ; if ( !model->HSMHV_ovmag_Given ) model->HSMHV_ovmag = 0.6 ; if ( !model->HSMHV_gbmin_Given ) model->HSMHV_gbmin = 1.0e-12; /* in mho */ if ( !model->HSMHV_rbpb_Given ) model->HSMHV_rbpb = 50.0e0 ; if ( !model->HSMHV_rbpd_Given ) model->HSMHV_rbpd = 50.0e0 ; if ( !model->HSMHV_rbps_Given ) model->HSMHV_rbps = 50.0e0 ; if ( !model->HSMHV_rbdb_Given ) model->HSMHV_rbdb = 50.0e0 ; if ( !model->HSMHV_rbsb_Given ) model->HSMHV_rbsb = 50.0e0 ; if ( !model->HSMHV_ibpc1_Given ) model->HSMHV_ibpc1 = 0.0 ; if ( !model->HSMHV_ibpc2_Given ) model->HSMHV_ibpc2 = 0.0 ; if ( !model->HSMHV_mphdfm_Given ) model->HSMHV_mphdfm = -0.3 ; if ( !model->HSMHV_rdvg11_Given ) model->HSMHV_rdvg11 = 0.0 ; if ( !model->HSMHV_rdvg12_Given ) model->HSMHV_rdvg12 = 100.0 ; if ( !model->HSMHV_rth0_Given ) model->HSMHV_rth0 = 0.1 ; /* Self-heating model */ if ( !model->HSMHV_cth0_Given ) model->HSMHV_cth0 = 1.0e-7 ; /* Self-heating model */ if ( !model->HSMHV_powrat_Given ) model->HSMHV_powrat = 1.0 ; /* Self-heating model */ if ( !model->HSMHV_tcjbd_Given ) model->HSMHV_tcjbd = 0.0 ; /* Self-heating model */ if ( !model->HSMHV_tcjbs_Given ) model->HSMHV_tcjbs = 0.0 ; /* Self-heating model */ if ( !model->HSMHV_tcjbdsw_Given ) model->HSMHV_tcjbdsw = 0.0 ; /* Self-heating model */ if ( !model->HSMHV_tcjbssw_Given ) model->HSMHV_tcjbssw = 0.0 ; /* Self-heating model */ if ( !model->HSMHV_tcjbdswg_Given ) model->HSMHV_tcjbdswg = 0.0 ; /* Self-heating model */ if ( !model->HSMHV_tcjbsswg_Given ) model->HSMHV_tcjbsswg = 0.0 ; /* Self-heating model */ /* value reset to switch off NQS for QbdLD: */ model->HSMHV_dlyov = 0.0 ; /* 1.0e3 ; */ if ( !model->HSMHV_qdftvd_Given ) model->HSMHV_qdftvd = 1.0 ; if ( !model->HSMHV_xldld_Given ) model->HSMHV_xldld = 1.0e-6 ; if ( !model->HSMHV_xwdld_Given ) model->HSMHV_xwdld = model->HSMHV_xwd ; if ( !model->HSMHV_rdvd_Given ) model->HSMHV_rdvd = 7.0e-2 ; if ( !model->HSMHV_qovsm_Given ) model->HSMHV_qovsm = 0.2 ; if ( !model->HSMHV_rd20_Given ) model->HSMHV_rd20 = 0.0 ; if ( !model->HSMHV_rd21_Given ) model->HSMHV_rd21 = 1.0 ; if ( !model->HSMHV_rd22_Given ) model->HSMHV_rd22 = 0.0 ; if ( !model->HSMHV_rd22d_Given ) model->HSMHV_rd22d = 0.0 ; if ( !model->HSMHV_rd23_Given ) model->HSMHV_rd23 = 5e-3 ; if ( !model->HSMHV_rd24_Given ) model->HSMHV_rd24 = 0.0 ; if ( !model->HSMHV_rd25_Given ) model->HSMHV_rd25 = 0.0 ; if ( !model->HSMHV_rdvdl_Given ) model->HSMHV_rdvdl = 0.0 ; if ( !model->HSMHV_rdvdlp_Given ) model->HSMHV_rdvdlp = 1.0 ; if ( !model->HSMHV_rdvds_Given ) model->HSMHV_rdvds = 0.0 ; if ( !model->HSMHV_rdvdsp_Given ) model->HSMHV_rdvdsp = 1.0 ; if ( !model->HSMHV_rd23l_Given ) model->HSMHV_rd23l = 0.0 ; if ( !model->HSMHV_rd23lp_Given ) model->HSMHV_rd23lp = 1.0 ; if ( !model->HSMHV_rd23s_Given ) model->HSMHV_rd23s = 0.0 ; if ( !model->HSMHV_rd23sp_Given ) model->HSMHV_rd23sp = 1.0 ; if ( !model->HSMHV_rds_Given ) model->HSMHV_rds = 0.0 ; if ( !model->HSMHV_rdsp_Given ) model->HSMHV_rdsp = 1.0 ; if ( !model->HSMHV_rdtemp1_Given ) model->HSMHV_rdtemp1 = 0.0 ; if ( !model->HSMHV_rdtemp2_Given ) model->HSMHV_rdtemp2 = 0.0 ; model->HSMHV_rth0r = 0.0 ; /* not used in this version */ if ( !model->HSMHV_rdvdtemp1_Given) model->HSMHV_rdvdtemp1 = 0.0 ; if ( !model->HSMHV_rdvdtemp2_Given) model->HSMHV_rdvdtemp2 = 0.0 ; if ( !model->HSMHV_rth0w_Given ) model->HSMHV_rth0w = 0.0 ; if ( !model->HSMHV_rth0wp_Given ) model->HSMHV_rth0wp = 1.0 ; if ( !model->HSMHV_cvdsover_Given ) model->HSMHV_cvdsover = 0.0 ; if ( !model->HSMHV_ninvd_Given ) model->HSMHV_ninvd = 0.0 ; if ( !model->HSMHV_ninvdw_Given ) model->HSMHV_ninvdw = 0.0 ; if ( !model->HSMHV_ninvdwp_Given ) model->HSMHV_ninvdwp = 1.0 ; if ( !model->HSMHV_ninvdt1_Given ) model->HSMHV_ninvdt1 = 0.0 ; if ( !model->HSMHV_ninvdt2_Given ) model->HSMHV_ninvdt2 = 0.0 ; if ( !model->HSMHV_vbsmin_Given ) model->HSMHV_vbsmin = -10.5 ; if ( !model->HSMHV_rdvb_Given ) model->HSMHV_rdvb = 0.0 ; if ( !model->HSMHV_rth0nf_Given ) model->HSMHV_rth0nf = 0.0 ; if ( !model->HSMHV_rthtemp1_Given ) model->HSMHV_rthtemp1 = 0.0 ; if ( !model->HSMHV_rthtemp2_Given ) model->HSMHV_rthtemp2 = 0.0 ; if ( !model->HSMHV_prattemp1_Given ) model->HSMHV_prattemp1 = 0.0 ; if ( !model->HSMHV_prattemp2_Given ) model->HSMHV_prattemp2 = 0.0 ; if ( !model->HSMHV_rdvsub_Given ) model->HSMHV_rdvsub = 1.0 ; /* [-] substrate effect */ if ( !model->HSMHV_rdvdsub_Given ) model->HSMHV_rdvdsub = 0.3 ; /* [-] substrate effect */ if ( !model->HSMHV_ddrift_Given ) model->HSMHV_ddrift = 1.0e-6 ; /* [m] substrate effect */ if ( !model->HSMHV_vbisub_Given ) model->HSMHV_vbisub = 0.7 ; /* [V] substrate effect */ if ( !model->HSMHV_nsubsub_Given ) model->HSMHV_nsubsub = 1.0e15 ; /* [cm^-3] substrate effect */ if ( !model->HSMHV_shemax_Given ) model->HSMHV_shemax = 500 ; /* binning parameters */ if ( !model->HSMHV_lmin_Given ) model->HSMHV_lmin = 0.0 ; if ( !model->HSMHV_lmax_Given ) model->HSMHV_lmax = 1.0 ; if ( !model->HSMHV_wmin_Given ) model->HSMHV_wmin = 0.0 ; if ( !model->HSMHV_wmax_Given ) model->HSMHV_wmax = 1.0 ; if ( !model->HSMHV_lbinn_Given ) model->HSMHV_lbinn = 1.0 ; if ( !model->HSMHV_wbinn_Given ) model->HSMHV_wbinn = 1.0 ; /* Length dependence */ if ( !model->HSMHV_lvmax_Given ) model->HSMHV_lvmax = 0.0 ; if ( !model->HSMHV_lbgtmp1_Given ) model->HSMHV_lbgtmp1 = 0.0 ; if ( !model->HSMHV_lbgtmp2_Given ) model->HSMHV_lbgtmp2 = 0.0 ; if ( !model->HSMHV_leg0_Given ) model->HSMHV_leg0 = 0.0 ; if ( !model->HSMHV_lvfbover_Given ) model->HSMHV_lvfbover = 0.0 ; if ( !model->HSMHV_lnover_Given ) model->HSMHV_lnover = 0.0 ; if ( !model->HSMHV_lnovers_Given ) model->HSMHV_lnovers = 0.0 ; if ( !model->HSMHV_lwl2_Given ) model->HSMHV_lwl2 = 0.0 ; if ( !model->HSMHV_lvfbc_Given ) model->HSMHV_lvfbc = 0.0 ; if ( !model->HSMHV_lnsubc_Given ) model->HSMHV_lnsubc = 0.0 ; if ( !model->HSMHV_lnsubp_Given ) model->HSMHV_lnsubp = 0.0 ; if ( !model->HSMHV_lscp1_Given ) model->HSMHV_lscp1 = 0.0 ; if ( !model->HSMHV_lscp2_Given ) model->HSMHV_lscp2 = 0.0 ; if ( !model->HSMHV_lscp3_Given ) model->HSMHV_lscp3 = 0.0 ; if ( !model->HSMHV_lsc1_Given ) model->HSMHV_lsc1 = 0.0 ; if ( !model->HSMHV_lsc2_Given ) model->HSMHV_lsc2 = 0.0 ; if ( !model->HSMHV_lsc3_Given ) model->HSMHV_lsc3 = 0.0 ; if ( !model->HSMHV_lpgd1_Given ) model->HSMHV_lpgd1 = 0.0 ; if ( !model->HSMHV_lpgd3_Given ) model->HSMHV_lpgd3 = 0.0 ; if ( !model->HSMHV_lndep_Given ) model->HSMHV_lndep = 0.0 ; if ( !model->HSMHV_lninv_Given ) model->HSMHV_lninv = 0.0 ; if ( !model->HSMHV_lmuecb0_Given ) model->HSMHV_lmuecb0 = 0.0 ; if ( !model->HSMHV_lmuecb1_Given ) model->HSMHV_lmuecb1 = 0.0 ; if ( !model->HSMHV_lmueph1_Given ) model->HSMHV_lmueph1 = 0.0 ; if ( !model->HSMHV_lvtmp_Given ) model->HSMHV_lvtmp = 0.0 ; if ( !model->HSMHV_lwvth0_Given ) model->HSMHV_lwvth0 = 0.0 ; if ( !model->HSMHV_lmuesr1_Given ) model->HSMHV_lmuesr1 = 0.0 ; if ( !model->HSMHV_lmuetmp_Given ) model->HSMHV_lmuetmp = 0.0 ; if ( !model->HSMHV_lsub1_Given ) model->HSMHV_lsub1 = 0.0 ; if ( !model->HSMHV_lsub2_Given ) model->HSMHV_lsub2 = 0.0 ; if ( !model->HSMHV_lsvds_Given ) model->HSMHV_lsvds = 0.0 ; if ( !model->HSMHV_lsvbs_Given ) model->HSMHV_lsvbs = 0.0 ; if ( !model->HSMHV_lsvgs_Given ) model->HSMHV_lsvgs = 0.0 ; if ( !model->HSMHV_lfn1_Given ) model->HSMHV_lfn1 = 0.0 ; if ( !model->HSMHV_lfn2_Given ) model->HSMHV_lfn2 = 0.0 ; if ( !model->HSMHV_lfn3_Given ) model->HSMHV_lfn3 = 0.0 ; if ( !model->HSMHV_lfvbs_Given ) model->HSMHV_lfvbs = 0.0 ; if ( !model->HSMHV_lnsti_Given ) model->HSMHV_lnsti = 0.0 ; if ( !model->HSMHV_lwsti_Given ) model->HSMHV_lwsti = 0.0 ; if ( !model->HSMHV_lscsti1_Given ) model->HSMHV_lscsti1 = 0.0 ; if ( !model->HSMHV_lscsti2_Given ) model->HSMHV_lscsti2 = 0.0 ; if ( !model->HSMHV_lvthsti_Given ) model->HSMHV_lvthsti = 0.0 ; if ( !model->HSMHV_lmuesti1_Given ) model->HSMHV_lmuesti1 = 0.0 ; if ( !model->HSMHV_lmuesti2_Given ) model->HSMHV_lmuesti2 = 0.0 ; if ( !model->HSMHV_lmuesti3_Given ) model->HSMHV_lmuesti3 = 0.0 ; if ( !model->HSMHV_lnsubpsti1_Given ) model->HSMHV_lnsubpsti1 = 0.0 ; if ( !model->HSMHV_lnsubpsti2_Given ) model->HSMHV_lnsubpsti2 = 0.0 ; if ( !model->HSMHV_lnsubpsti3_Given ) model->HSMHV_lnsubpsti3 = 0.0 ; if ( !model->HSMHV_lcgso_Given ) model->HSMHV_lcgso = 0.0 ; if ( !model->HSMHV_lcgdo_Given ) model->HSMHV_lcgdo = 0.0 ; if ( !model->HSMHV_ljs0_Given ) model->HSMHV_ljs0 = 0.0 ; if ( !model->HSMHV_ljs0sw_Given ) model->HSMHV_ljs0sw = 0.0 ; if ( !model->HSMHV_lnj_Given ) model->HSMHV_lnj = 0.0 ; if ( !model->HSMHV_lcisbk_Given ) model->HSMHV_lcisbk = 0.0 ; if ( !model->HSMHV_lclm1_Given ) model->HSMHV_lclm1 = 0.0 ; if ( !model->HSMHV_lclm2_Given ) model->HSMHV_lclm2 = 0.0 ; if ( !model->HSMHV_lclm3_Given ) model->HSMHV_lclm3 = 0.0 ; if ( !model->HSMHV_lwfc_Given ) model->HSMHV_lwfc = 0.0 ; if ( !model->HSMHV_lgidl1_Given ) model->HSMHV_lgidl1 = 0.0 ; if ( !model->HSMHV_lgidl2_Given ) model->HSMHV_lgidl2 = 0.0 ; if ( !model->HSMHV_lgleak1_Given ) model->HSMHV_lgleak1 = 0.0 ; if ( !model->HSMHV_lgleak2_Given ) model->HSMHV_lgleak2 = 0.0 ; if ( !model->HSMHV_lgleak3_Given ) model->HSMHV_lgleak3 = 0.0 ; if ( !model->HSMHV_lgleak6_Given ) model->HSMHV_lgleak6 = 0.0 ; if ( !model->HSMHV_lglksd1_Given ) model->HSMHV_lglksd1 = 0.0 ; if ( !model->HSMHV_lglksd2_Given ) model->HSMHV_lglksd2 = 0.0 ; if ( !model->HSMHV_lglkb1_Given ) model->HSMHV_lglkb1 = 0.0 ; if ( !model->HSMHV_lglkb2_Given ) model->HSMHV_lglkb2 = 0.0 ; if ( !model->HSMHV_lnftrp_Given ) model->HSMHV_lnftrp = 0.0 ; if ( !model->HSMHV_lnfalp_Given ) model->HSMHV_lnfalp = 0.0 ; if ( !model->HSMHV_lpthrou_Given ) model->HSMHV_lpthrou = 0.0 ; if ( !model->HSMHV_lvdiffj_Given ) model->HSMHV_lvdiffj = 0.0 ; if ( !model->HSMHV_libpc1_Given ) model->HSMHV_libpc1 = 0.0 ; if ( !model->HSMHV_libpc2_Given ) model->HSMHV_libpc2 = 0.0 ; if ( !model->HSMHV_lcgbo_Given ) model->HSMHV_lcgbo = 0.0 ; if ( !model->HSMHV_lcvdsover_Given ) model->HSMHV_lcvdsover = 0.0 ; if ( !model->HSMHV_lfalph_Given ) model->HSMHV_lfalph = 0.0 ; if ( !model->HSMHV_lnpext_Given ) model->HSMHV_lnpext = 0.0 ; if ( !model->HSMHV_lpowrat_Given ) model->HSMHV_lpowrat = 0.0 ; if ( !model->HSMHV_lrd_Given ) model->HSMHV_lrd = 0.0 ; if ( !model->HSMHV_lrd22_Given ) model->HSMHV_lrd22 = 0.0 ; if ( !model->HSMHV_lrd23_Given ) model->HSMHV_lrd23 = 0.0 ; if ( !model->HSMHV_lrd24_Given ) model->HSMHV_lrd24 = 0.0 ; if ( !model->HSMHV_lrdict1_Given ) model->HSMHV_lrdict1 = 0.0 ; if ( !model->HSMHV_lrdov13_Given ) model->HSMHV_lrdov13 = 0.0 ; if ( !model->HSMHV_lrdslp1_Given ) model->HSMHV_lrdslp1 = 0.0 ; if ( !model->HSMHV_lrdvb_Given ) model->HSMHV_lrdvb = 0.0 ; if ( !model->HSMHV_lrdvd_Given ) model->HSMHV_lrdvd = 0.0 ; if ( !model->HSMHV_lrdvg11_Given ) model->HSMHV_lrdvg11 = 0.0 ; if ( !model->HSMHV_lrs_Given ) model->HSMHV_lrs = 0.0 ; if ( !model->HSMHV_lrth0_Given ) model->HSMHV_lrth0 = 0.0 ; if ( !model->HSMHV_lvover_Given ) model->HSMHV_lvover = 0.0 ; /* Width dependence */ if ( !model->HSMHV_wvmax_Given ) model->HSMHV_wvmax = 0.0 ; if ( !model->HSMHV_wbgtmp1_Given ) model->HSMHV_wbgtmp1 = 0.0 ; if ( !model->HSMHV_wbgtmp2_Given ) model->HSMHV_wbgtmp2 = 0.0 ; if ( !model->HSMHV_weg0_Given ) model->HSMHV_weg0 = 0.0 ; if ( !model->HSMHV_wvfbover_Given ) model->HSMHV_wvfbover = 0.0 ; if ( !model->HSMHV_wnover_Given ) model->HSMHV_wnover = 0.0 ; if ( !model->HSMHV_wnovers_Given ) model->HSMHV_wnovers = 0.0 ; if ( !model->HSMHV_wwl2_Given ) model->HSMHV_wwl2 = 0.0 ; if ( !model->HSMHV_wvfbc_Given ) model->HSMHV_wvfbc = 0.0 ; if ( !model->HSMHV_wnsubc_Given ) model->HSMHV_wnsubc = 0.0 ; if ( !model->HSMHV_wnsubp_Given ) model->HSMHV_wnsubp = 0.0 ; if ( !model->HSMHV_wscp1_Given ) model->HSMHV_wscp1 = 0.0 ; if ( !model->HSMHV_wscp2_Given ) model->HSMHV_wscp2 = 0.0 ; if ( !model->HSMHV_wscp3_Given ) model->HSMHV_wscp3 = 0.0 ; if ( !model->HSMHV_wsc1_Given ) model->HSMHV_wsc1 = 0.0 ; if ( !model->HSMHV_wsc2_Given ) model->HSMHV_wsc2 = 0.0 ; if ( !model->HSMHV_wsc3_Given ) model->HSMHV_wsc3 = 0.0 ; if ( !model->HSMHV_wpgd1_Given ) model->HSMHV_wpgd1 = 0.0 ; if ( !model->HSMHV_wpgd3_Given ) model->HSMHV_wpgd3 = 0.0 ; if ( !model->HSMHV_wndep_Given ) model->HSMHV_wndep = 0.0 ; if ( !model->HSMHV_wninv_Given ) model->HSMHV_wninv = 0.0 ; if ( !model->HSMHV_wmuecb0_Given ) model->HSMHV_wmuecb0 = 0.0 ; if ( !model->HSMHV_wmuecb1_Given ) model->HSMHV_wmuecb1 = 0.0 ; if ( !model->HSMHV_wmueph1_Given ) model->HSMHV_wmueph1 = 0.0 ; if ( !model->HSMHV_wvtmp_Given ) model->HSMHV_wvtmp = 0.0 ; if ( !model->HSMHV_wwvth0_Given ) model->HSMHV_wwvth0 = 0.0 ; if ( !model->HSMHV_wmuesr1_Given ) model->HSMHV_wmuesr1 = 0.0 ; if ( !model->HSMHV_wmuetmp_Given ) model->HSMHV_wmuetmp = 0.0 ; if ( !model->HSMHV_wsub1_Given ) model->HSMHV_wsub1 = 0.0 ; if ( !model->HSMHV_wsub2_Given ) model->HSMHV_wsub2 = 0.0 ; if ( !model->HSMHV_wsvds_Given ) model->HSMHV_wsvds = 0.0 ; if ( !model->HSMHV_wsvbs_Given ) model->HSMHV_wsvbs = 0.0 ; if ( !model->HSMHV_wsvgs_Given ) model->HSMHV_wsvgs = 0.0 ; if ( !model->HSMHV_wfn1_Given ) model->HSMHV_wfn1 = 0.0 ; if ( !model->HSMHV_wfn2_Given ) model->HSMHV_wfn2 = 0.0 ; if ( !model->HSMHV_wfn3_Given ) model->HSMHV_wfn3 = 0.0 ; if ( !model->HSMHV_wfvbs_Given ) model->HSMHV_wfvbs = 0.0 ; if ( !model->HSMHV_wnsti_Given ) model->HSMHV_wnsti = 0.0 ; if ( !model->HSMHV_wwsti_Given ) model->HSMHV_wwsti = 0.0 ; if ( !model->HSMHV_wscsti1_Given ) model->HSMHV_wscsti1 = 0.0 ; if ( !model->HSMHV_wscsti2_Given ) model->HSMHV_wscsti2 = 0.0 ; if ( !model->HSMHV_wvthsti_Given ) model->HSMHV_wvthsti = 0.0 ; if ( !model->HSMHV_wmuesti1_Given ) model->HSMHV_wmuesti1 = 0.0 ; if ( !model->HSMHV_wmuesti2_Given ) model->HSMHV_wmuesti2 = 0.0 ; if ( !model->HSMHV_wmuesti3_Given ) model->HSMHV_wmuesti3 = 0.0 ; if ( !model->HSMHV_wnsubpsti1_Given ) model->HSMHV_wnsubpsti1 = 0.0 ; if ( !model->HSMHV_wnsubpsti2_Given ) model->HSMHV_wnsubpsti2 = 0.0 ; if ( !model->HSMHV_wnsubpsti3_Given ) model->HSMHV_wnsubpsti3 = 0.0 ; if ( !model->HSMHV_wcgso_Given ) model->HSMHV_wcgso = 0.0 ; if ( !model->HSMHV_wcgdo_Given ) model->HSMHV_wcgdo = 0.0 ; if ( !model->HSMHV_wjs0_Given ) model->HSMHV_wjs0 = 0.0 ; if ( !model->HSMHV_wjs0sw_Given ) model->HSMHV_wjs0sw = 0.0 ; if ( !model->HSMHV_wnj_Given ) model->HSMHV_wnj = 0.0 ; if ( !model->HSMHV_wcisbk_Given ) model->HSMHV_wcisbk = 0.0 ; if ( !model->HSMHV_wclm1_Given ) model->HSMHV_wclm1 = 0.0 ; if ( !model->HSMHV_wclm2_Given ) model->HSMHV_wclm2 = 0.0 ; if ( !model->HSMHV_wclm3_Given ) model->HSMHV_wclm3 = 0.0 ; if ( !model->HSMHV_wwfc_Given ) model->HSMHV_wwfc = 0.0 ; if ( !model->HSMHV_wgidl1_Given ) model->HSMHV_wgidl1 = 0.0 ; if ( !model->HSMHV_wgidl2_Given ) model->HSMHV_wgidl2 = 0.0 ; if ( !model->HSMHV_wgleak1_Given ) model->HSMHV_wgleak1 = 0.0 ; if ( !model->HSMHV_wgleak2_Given ) model->HSMHV_wgleak2 = 0.0 ; if ( !model->HSMHV_wgleak3_Given ) model->HSMHV_wgleak3 = 0.0 ; if ( !model->HSMHV_wgleak6_Given ) model->HSMHV_wgleak6 = 0.0 ; if ( !model->HSMHV_wglksd1_Given ) model->HSMHV_wglksd1 = 0.0 ; if ( !model->HSMHV_wglksd2_Given ) model->HSMHV_wglksd2 = 0.0 ; if ( !model->HSMHV_wglkb1_Given ) model->HSMHV_wglkb1 = 0.0 ; if ( !model->HSMHV_wglkb2_Given ) model->HSMHV_wglkb2 = 0.0 ; if ( !model->HSMHV_wnftrp_Given ) model->HSMHV_wnftrp = 0.0 ; if ( !model->HSMHV_wnfalp_Given ) model->HSMHV_wnfalp = 0.0 ; if ( !model->HSMHV_wpthrou_Given ) model->HSMHV_wpthrou = 0.0 ; if ( !model->HSMHV_wvdiffj_Given ) model->HSMHV_wvdiffj = 0.0 ; if ( !model->HSMHV_wibpc1_Given ) model->HSMHV_wibpc1 = 0.0 ; if ( !model->HSMHV_wibpc2_Given ) model->HSMHV_wibpc2 = 0.0 ; if ( !model->HSMHV_wcgbo_Given ) model->HSMHV_wcgbo = 0.0 ; if ( !model->HSMHV_wcvdsover_Given ) model->HSMHV_wcvdsover = 0.0 ; if ( !model->HSMHV_wfalph_Given ) model->HSMHV_wfalph = 0.0 ; if ( !model->HSMHV_wnpext_Given ) model->HSMHV_wnpext = 0.0 ; if ( !model->HSMHV_wpowrat_Given ) model->HSMHV_wpowrat = 0.0 ; if ( !model->HSMHV_wrd_Given ) model->HSMHV_wrd = 0.0 ; if ( !model->HSMHV_wrd22_Given ) model->HSMHV_wrd22 = 0.0 ; if ( !model->HSMHV_wrd23_Given ) model->HSMHV_wrd23 = 0.0 ; if ( !model->HSMHV_wrd24_Given ) model->HSMHV_wrd24 = 0.0 ; if ( !model->HSMHV_wrdict1_Given ) model->HSMHV_wrdict1 = 0.0 ; if ( !model->HSMHV_wrdov13_Given ) model->HSMHV_wrdov13 = 0.0 ; if ( !model->HSMHV_wrdslp1_Given ) model->HSMHV_wrdslp1 = 0.0 ; if ( !model->HSMHV_wrdvb_Given ) model->HSMHV_wrdvb = 0.0 ; if ( !model->HSMHV_wrdvd_Given ) model->HSMHV_wrdvd = 0.0 ; if ( !model->HSMHV_wrdvg11_Given ) model->HSMHV_wrdvg11 = 0.0 ; if ( !model->HSMHV_wrs_Given ) model->HSMHV_wrs = 0.0 ; if ( !model->HSMHV_wrth0_Given ) model->HSMHV_wrth0 = 0.0 ; if ( !model->HSMHV_wvover_Given ) model->HSMHV_wvover = 0.0 ; /* Cross-term dependence */ if ( !model->HSMHV_pvmax_Given ) model->HSMHV_pvmax = 0.0 ; if ( !model->HSMHV_pbgtmp1_Given ) model->HSMHV_pbgtmp1 = 0.0 ; if ( !model->HSMHV_pbgtmp2_Given ) model->HSMHV_pbgtmp2 = 0.0 ; if ( !model->HSMHV_peg0_Given ) model->HSMHV_peg0 = 0.0 ; if ( !model->HSMHV_pvfbover_Given ) model->HSMHV_pvfbover = 0.0 ; if ( !model->HSMHV_pnover_Given ) model->HSMHV_pnover = 0.0 ; if ( !model->HSMHV_pnovers_Given ) model->HSMHV_pnovers = 0.0 ; if ( !model->HSMHV_pwl2_Given ) model->HSMHV_pwl2 = 0.0 ; if ( !model->HSMHV_pvfbc_Given ) model->HSMHV_pvfbc = 0.0 ; if ( !model->HSMHV_pnsubc_Given ) model->HSMHV_pnsubc = 0.0 ; if ( !model->HSMHV_pnsubp_Given ) model->HSMHV_pnsubp = 0.0 ; if ( !model->HSMHV_pscp1_Given ) model->HSMHV_pscp1 = 0.0 ; if ( !model->HSMHV_pscp2_Given ) model->HSMHV_pscp2 = 0.0 ; if ( !model->HSMHV_pscp3_Given ) model->HSMHV_pscp3 = 0.0 ; if ( !model->HSMHV_psc1_Given ) model->HSMHV_psc1 = 0.0 ; if ( !model->HSMHV_psc2_Given ) model->HSMHV_psc2 = 0.0 ; if ( !model->HSMHV_psc3_Given ) model->HSMHV_psc3 = 0.0 ; if ( !model->HSMHV_ppgd1_Given ) model->HSMHV_ppgd1 = 0.0 ; if ( !model->HSMHV_ppgd3_Given ) model->HSMHV_ppgd3 = 0.0 ; if ( !model->HSMHV_pndep_Given ) model->HSMHV_pndep = 0.0 ; if ( !model->HSMHV_pninv_Given ) model->HSMHV_pninv = 0.0 ; if ( !model->HSMHV_pmuecb0_Given ) model->HSMHV_pmuecb0 = 0.0 ; if ( !model->HSMHV_pmuecb1_Given ) model->HSMHV_pmuecb1 = 0.0 ; if ( !model->HSMHV_pmueph1_Given ) model->HSMHV_pmueph1 = 0.0 ; if ( !model->HSMHV_pvtmp_Given ) model->HSMHV_pvtmp = 0.0 ; if ( !model->HSMHV_pwvth0_Given ) model->HSMHV_pwvth0 = 0.0 ; if ( !model->HSMHV_pmuesr1_Given ) model->HSMHV_pmuesr1 = 0.0 ; if ( !model->HSMHV_pmuetmp_Given ) model->HSMHV_pmuetmp = 0.0 ; if ( !model->HSMHV_psub1_Given ) model->HSMHV_psub1 = 0.0 ; if ( !model->HSMHV_psub2_Given ) model->HSMHV_psub2 = 0.0 ; if ( !model->HSMHV_psvds_Given ) model->HSMHV_psvds = 0.0 ; if ( !model->HSMHV_psvbs_Given ) model->HSMHV_psvbs = 0.0 ; if ( !model->HSMHV_psvgs_Given ) model->HSMHV_psvgs = 0.0 ; if ( !model->HSMHV_pfn1_Given ) model->HSMHV_pfn1 = 0.0 ; if ( !model->HSMHV_pfn2_Given ) model->HSMHV_pfn2 = 0.0 ; if ( !model->HSMHV_pfn3_Given ) model->HSMHV_pfn3 = 0.0 ; if ( !model->HSMHV_pfvbs_Given ) model->HSMHV_pfvbs = 0.0 ; if ( !model->HSMHV_pnsti_Given ) model->HSMHV_pnsti = 0.0 ; if ( !model->HSMHV_pwsti_Given ) model->HSMHV_pwsti = 0.0 ; if ( !model->HSMHV_pscsti1_Given ) model->HSMHV_pscsti1 = 0.0 ; if ( !model->HSMHV_pscsti2_Given ) model->HSMHV_pscsti2 = 0.0 ; if ( !model->HSMHV_pvthsti_Given ) model->HSMHV_pvthsti = 0.0 ; if ( !model->HSMHV_pmuesti1_Given ) model->HSMHV_pmuesti1 = 0.0 ; if ( !model->HSMHV_pmuesti2_Given ) model->HSMHV_pmuesti2 = 0.0 ; if ( !model->HSMHV_pmuesti3_Given ) model->HSMHV_pmuesti3 = 0.0 ; if ( !model->HSMHV_pnsubpsti1_Given ) model->HSMHV_pnsubpsti1 = 0.0 ; if ( !model->HSMHV_pnsubpsti2_Given ) model->HSMHV_pnsubpsti2 = 0.0 ; if ( !model->HSMHV_pnsubpsti3_Given ) model->HSMHV_pnsubpsti3 = 0.0 ; if ( !model->HSMHV_pcgso_Given ) model->HSMHV_pcgso = 0.0 ; if ( !model->HSMHV_pcgdo_Given ) model->HSMHV_pcgdo = 0.0 ; if ( !model->HSMHV_pjs0_Given ) model->HSMHV_pjs0 = 0.0 ; if ( !model->HSMHV_pjs0sw_Given ) model->HSMHV_pjs0sw = 0.0 ; if ( !model->HSMHV_pnj_Given ) model->HSMHV_pnj = 0.0 ; if ( !model->HSMHV_pcisbk_Given ) model->HSMHV_pcisbk = 0.0 ; if ( !model->HSMHV_pclm1_Given ) model->HSMHV_pclm1 = 0.0 ; if ( !model->HSMHV_pclm2_Given ) model->HSMHV_pclm2 = 0.0 ; if ( !model->HSMHV_pclm3_Given ) model->HSMHV_pclm3 = 0.0 ; if ( !model->HSMHV_pwfc_Given ) model->HSMHV_pwfc = 0.0 ; if ( !model->HSMHV_pgidl1_Given ) model->HSMHV_pgidl1 = 0.0 ; if ( !model->HSMHV_pgidl2_Given ) model->HSMHV_pgidl2 = 0.0 ; if ( !model->HSMHV_pgleak1_Given ) model->HSMHV_pgleak1 = 0.0 ; if ( !model->HSMHV_pgleak2_Given ) model->HSMHV_pgleak2 = 0.0 ; if ( !model->HSMHV_pgleak3_Given ) model->HSMHV_pgleak3 = 0.0 ; if ( !model->HSMHV_pgleak6_Given ) model->HSMHV_pgleak6 = 0.0 ; if ( !model->HSMHV_pglksd1_Given ) model->HSMHV_pglksd1 = 0.0 ; if ( !model->HSMHV_pglksd2_Given ) model->HSMHV_pglksd2 = 0.0 ; if ( !model->HSMHV_pglkb1_Given ) model->HSMHV_pglkb1 = 0.0 ; if ( !model->HSMHV_pglkb2_Given ) model->HSMHV_pglkb2 = 0.0 ; if ( !model->HSMHV_pnftrp_Given ) model->HSMHV_pnftrp = 0.0 ; if ( !model->HSMHV_pnfalp_Given ) model->HSMHV_pnfalp = 0.0 ; if ( !model->HSMHV_ppthrou_Given ) model->HSMHV_ppthrou = 0.0 ; if ( !model->HSMHV_pvdiffj_Given ) model->HSMHV_pvdiffj = 0.0 ; if ( !model->HSMHV_pibpc1_Given ) model->HSMHV_pibpc1 = 0.0 ; if ( !model->HSMHV_pibpc2_Given ) model->HSMHV_pibpc2 = 0.0 ; if ( !model->HSMHV_pcgbo_Given ) model->HSMHV_pcgbo = 0.0 ; if ( !model->HSMHV_pcvdsover_Given ) model->HSMHV_pcvdsover = 0.0 ; if ( !model->HSMHV_pfalph_Given ) model->HSMHV_pfalph = 0.0 ; if ( !model->HSMHV_pnpext_Given ) model->HSMHV_pnpext = 0.0 ; if ( !model->HSMHV_ppowrat_Given ) model->HSMHV_ppowrat = 0.0 ; if ( !model->HSMHV_prd_Given ) model->HSMHV_prd = 0.0 ; if ( !model->HSMHV_prd22_Given ) model->HSMHV_prd22 = 0.0 ; if ( !model->HSMHV_prd23_Given ) model->HSMHV_prd23 = 0.0 ; if ( !model->HSMHV_prd24_Given ) model->HSMHV_prd24 = 0.0 ; if ( !model->HSMHV_prdict1_Given ) model->HSMHV_prdict1 = 0.0 ; if ( !model->HSMHV_prdov13_Given ) model->HSMHV_prdov13 = 0.0 ; if ( !model->HSMHV_prdslp1_Given ) model->HSMHV_prdslp1 = 0.0 ; if ( !model->HSMHV_prdvb_Given ) model->HSMHV_prdvb = 0.0 ; if ( !model->HSMHV_prdvd_Given ) model->HSMHV_prdvd = 0.0 ; if ( !model->HSMHV_prdvg11_Given ) model->HSMHV_prdvg11 = 0.0 ; if ( !model->HSMHV_prs_Given ) model->HSMHV_prs = 0.0 ; if ( !model->HSMHV_prth0_Given ) model->HSMHV_prth0 = 0.0 ; if ( !model->HSMHV_pvover_Given ) model->HSMHV_pvover = 0.0 ; if ( model->HSMHV_rd26_Given ) model->HSMHV_qovsm = model->HSMHV_rd26 ; if ( model->HSMHV_ldrift_Given ) model->HSMHV_ldrift2 = model->HSMHV_ldrift ; if (!model->HSMHVvgsMaxGiven) model->HSMHVvgsMax = 1e99; if (!model->HSMHVvgdMaxGiven) model->HSMHVvgdMax = 1e99; if (!model->HSMHVvgbMaxGiven) model->HSMHVvgbMax = 1e99; if (!model->HSMHVvdsMaxGiven) model->HSMHVvdsMax = 1e99; if (!model->HSMHVvbsMaxGiven) model->HSMHVvbsMax = 1e99; if (!model->HSMHVvbdMaxGiven) model->HSMHVvbdMax = 1e99; if (!model->HSMHVvgsrMaxGiven) model->HSMHVvgsrMax = 1e99; if (!model->HSMHVvgdrMaxGiven) model->HSMHVvgdrMax = 1e99; if (!model->HSMHVvgbrMaxGiven) model->HSMHVvgbrMax = 1e99; if (!model->HSMHVvbsrMaxGiven) model->HSMHVvbsrMax = 1e99; if (!model->HSMHVvbdrMaxGiven) model->HSMHVvbdrMax = 1e99; /* For Symmetrical Device */ if ( model->HSMHV_cosym ) { if(!model->HSMHV_rs_Given ) { model->HSMHV_rs = model->HSMHV_rd ; } if(!model->HSMHV_coovlps_Given ) { model->HSMHV_coovlps = model->HSMHV_coovlp ; } if(!model->HSMHV_novers_Given ) { model->HSMHV_novers = model->HSMHV_nover ; } /* if(!model->HSMHV_xld_Given ) */ /* { model->HSMHV_xld = model->HSMHV_xldld ; } */ if(!model->HSMHV_lover_Given ) { model->HSMHV_lover = model->HSMHV_loverld ; } if(!model->HSMHV_lovers_Given ) { model->HSMHV_lovers = model->HSMHV_loverld ; } if(!model->HSMHV_ldrift1s_Given ) { model->HSMHV_ldrift1s = model->HSMHV_ldrift1 ; } if(!model->HSMHV_ldrift2s_Given ) { model->HSMHV_ldrift2s = model->HSMHV_ldrift2 ; } if(!model->HSMHV_cgso_Given ) { model->HSMHV_cgso = model->HSMHV_cgdo ; model->HSMHV_cgso_Given = model->HSMHV_cgdo_Given ; } } if ( model->HSMHV_xqy > 0.0 && model->HSMHV_xqy < 1.0e-9 ) { fprintf ( stderr , "*** warning(HiSIMHV): XQY (%e[m]) is too small -> reset to 1nm.\n" , model->HSMHV_xqy ) ; model->HSMHV_xqy = 1e-9 ; } modelMKS = &model->modelMKS ; /* loop through all the instances of the model */ for ( here = HSMHVinstances(model);here != NULL ; here = HSMHVnextInstance(here)) { /* allocate a chunk of the state vector */ here->HSMHVstates = *states; if (model->HSMHV_conqs) *states += HSMHVnumStatesNqs; else *states += HSMHVnumStates; hereMKS = &here->hereMKS ; /* perform the device parameter defaulting */ if ( !here->HSMHV_coselfheat_Given ) here->HSMHV_coselfheat = model->HSMHV_coselfheat ; if ( !here->HSMHV_cosubnode_Given ) here->HSMHV_cosubnode = model->HSMHV_cosubnode ; if ( !here->HSMHV_l_Given ) here->HSMHV_l = 2.0e-6 ; if ( !here->HSMHV_w_Given ) here->HSMHV_w = 5.0e-6 ; if ( !here->HSMHV_ad_Given ) here->HSMHV_ad = 0.0 ; if ( !here->HSMHV_as_Given ) here->HSMHV_as = 0.0 ; if ( !here->HSMHV_pd_Given ) here->HSMHV_pd = 0.0 ; if ( !here->HSMHV_ps_Given ) here->HSMHV_ps = 0.0 ; if ( !here->HSMHV_nrd_Given ) here->HSMHV_nrd = 1.0 ; if ( !here->HSMHV_nrs_Given ) here->HSMHV_nrs = 1.0 ; if ( !here->HSMHV_ngcon_Given ) here->HSMHV_ngcon = 1.0 ; if ( !here->HSMHV_xgw_Given ) here->HSMHV_xgw = 0e0 ; if ( !here->HSMHV_xgl_Given ) here->HSMHV_xgl = 0e0 ; if ( !here->HSMHV_nf_Given ) here->HSMHV_nf = 1.0 ; if ( !here->HSMHV_sa_Given ) here->HSMHV_sa = 0 ; if ( !here->HSMHV_sb_Given ) here->HSMHV_sb = 0 ; if ( !here->HSMHV_sd_Given ) here->HSMHV_sd = 0 ; if ( !here->HSMHV_dtemp_Given ) here->HSMHV_dtemp = 0.0 ; if ( !here->HSMHV_icVBS_Given ) here->HSMHV_icVBS = 0.0; if ( !here->HSMHV_icVDS_Given ) here->HSMHV_icVDS = 0.0; if ( !here->HSMHV_icVGS_Given ) here->HSMHV_icVGS = 0.0; if ( !here->HSMHV_corbnet_Given ) here->HSMHV_corbnet = model->HSMHV_corbnet ; else if ( here->HSMHV_corbnet != 0 && here->HSMHV_corbnet != 1 ) { here->HSMHV_corbnet = model->HSMHV_corbnet ; printf("warning(HiSIMHV): CORBNET has been set to its default value: %d.\n", here->HSMHV_corbnet); } if ( !here->HSMHV_rbdb_Given) here->HSMHV_rbdb = model->HSMHV_rbdb; /* not used in this version */ if ( !here->HSMHV_rbsb_Given) here->HSMHV_rbsb = model->HSMHV_rbsb; /* not used in this version */ if ( !here->HSMHV_rbpb_Given) here->HSMHV_rbpb = model->HSMHV_rbpb; if ( !here->HSMHV_rbps_Given) here->HSMHV_rbps = model->HSMHV_rbps; if ( !here->HSMHV_rbpd_Given) here->HSMHV_rbpd = model->HSMHV_rbpd; if ( !here->HSMHV_corg_Given ) here->HSMHV_corg = model->HSMHV_corg ; else if ( here->HSMHV_corg != 0 && here->HSMHV_corg != 1 ) { here->HSMHV_corg = model->HSMHV_corg ; printf("warning(HiSIMHV): CORG has been set to its default value: %d.\n", here->HSMHV_corg); } if ( !here->HSMHV_m_Given ) here->HSMHV_m = 1.0 ; if ( !here->HSMHV_subld1_Given ) here->HSMHV_subld1 = model->HSMHV_subld1 ; if ( !here->HSMHV_subld2_Given ) here->HSMHV_subld2 = model->HSMHV_subld2 ; if ( !here->HSMHV_lovers_Given ) here->HSMHV_lovers = model->HSMHV_lovers ; if ( here->HSMHV_lover_Given ) here->HSMHV_lovers = here->HSMHV_lover ; if ( !here->HSMHV_loverld_Given ) here->HSMHV_loverld = model->HSMHV_loverld ; if ( !here->HSMHV_ldrift1_Given ) here->HSMHV_ldrift1 = model->HSMHV_ldrift1 ; if ( !here->HSMHV_ldrift2_Given ) here->HSMHV_ldrift2 = model->HSMHV_ldrift2 ; if ( !here->HSMHV_ldrift1s_Given ) here->HSMHV_ldrift1s = model->HSMHV_ldrift1s ; if ( !here->HSMHV_ldrift2s_Given ) here->HSMHV_ldrift2s = model->HSMHV_ldrift2s ; if ( model->HSMHV_cosym ) { if ( !here->HSMHV_lovers_Given && !model->HSMHV_lovers_Given ) here->HSMHV_lovers = here->HSMHV_loverld ; here->HSMHV_lover = here->HSMHV_lovers ; if ( !here->HSMHV_ldrift1s_Given && !model->HSMHV_ldrift1s_Given ) here->HSMHV_ldrift1s = here->HSMHV_ldrift1 ; if ( !here->HSMHV_ldrift2s_Given && !model->HSMHV_ldrift2s_Given ) here->HSMHV_ldrift2s = here->HSMHV_ldrift2 ; } /* process drain series resistance */ /* rough check if Rd != 0 * **** don't forget to change if Rd processing is changed *******/ T2 = ( here->HSMHV_ldrift1 * model->HSMHV_rdslp1 * C_m2um + model->HSMHV_rdict1 ) * ( here->HSMHV_ldrift2 * model->HSMHV_rdslp2 * C_m2um + model->HSMHV_rdict2 ) ; Rd = model->HSMHV_rsh * here->HSMHV_nrd * here->HSMHV_nf + (model->HSMHV_rd + model->HSMHV_rdvd) * T2 ; if ( (model->HSMHV_corsrd == 1 || model->HSMHV_corsrd == 3) && Rd > 0.0 ) { if(here->HSMHVdNodePrime <= 0) { model->HSMHV_rd = ( model->HSMHV_rd == 0.0 ) ? 1e-50 : model->HSMHV_rd ; error = CKTmkVolt(ckt, &tmp, here->HSMHVname, "drain"); if (error) return(error); here->HSMHVdNodePrime = tmp->number; } } else { here->HSMHVdNodePrime = here->HSMHVdNode; } here->HSMHVdrainConductance = 0.0 ; /* initialized for hsmhvnoi.c */ /* process source series resistance */ /* rough check if Rs != 0 * ***** don't forget to change if Rs processing is changed *******/ T2 = ( here->HSMHV_ldrift1s * model->HSMHV_rdslp1 * C_m2um + model->HSMHV_rdict1 ) * ( here->HSMHV_ldrift2s * model->HSMHV_rdslp2 * C_m2um + model->HSMHV_rdict2 ) ; Rs = model->HSMHV_rsh * here->HSMHV_nrs * here->HSMHV_nf + model->HSMHV_rs * T2 ; if ( (model->HSMHV_corsrd == 1 || model->HSMHV_corsrd == 3) && Rs > 0.0 ) { if(here->HSMHVsNodePrime == 0) { error = CKTmkVolt(ckt, &tmp, here->HSMHVname, "source"); if (error) return(error); here->HSMHVsNodePrime = tmp->number; } } else { here->HSMHVsNodePrime = here->HSMHVsNode; } here->HSMHVsourceConductance = 0.0 ; /* initialized for hsmhvnoi.c */ /* process gate resistance */ if ( (here->HSMHV_corg == 1 && model->HSMHV_rshg > 0.0) ) { if(here->HSMHVgNodePrime == 0) { error = CKTmkVolt(ckt, &tmp, here->HSMHVname, "gate"); if (error) return(error); here->HSMHVgNodePrime = tmp->number; } } else { here->HSMHVgNodePrime = here->HSMHVgNode; } /* internal body nodes for body resistance model */ if ( here->HSMHV_corbnet == 1 ) { if (here->HSMHVdbNode == 0) { error = CKTmkVolt(ckt, &tmp, here->HSMHVname, "dbody"); if (error) return(error); here->HSMHVdbNode = tmp->number; } if (here->HSMHVbNodePrime == 0) { error = CKTmkVolt(ckt, &tmp,here->HSMHVname, "body"); if (error) return(error); here->HSMHVbNodePrime = tmp->number; } if (here->HSMHVsbNode == 0) { error = CKTmkVolt(ckt, &tmp, here->HSMHVname,"sbody"); if (error) return(error); here->HSMHVsbNode = tmp->number; } } else { here->HSMHVdbNode = here->HSMHVbNodePrime = here->HSMHVsbNode = here->HSMHVbNode; } here->HSMHVtempNode = here->HSMHVtempNodeExt; here->HSMHVsubNode = here->HSMHVsubNodeExt; if ( here->HSMHV_cosubnode == 0 && here->HSMHVsubNode >= 0 ) { if ( here->HSMHVtempNode >= 0 ) { /* FATAL Error when 6th node is defined and COSUBNODE=0 */ SPfrontEnd->IFerrorf ( ERR_FATAL, "HiSIM_HV: MOSFET(%s) MODEL(%s): 6th node is defined and COSUBNODE=0", here->HSMHVname, model->HSMHVmodName ); return (E_BADPARM); } else { /* 5th node is switched to tempNode, if COSUBNODE=0 and 5 external nodes are assigned. */ if ( here->HSMHVsubNode > 0 ) { here->HSMHVtempNode = here->HSMHVsubNode ; here->HSMHVsubNode = -1 ; } } } /* self heating*/ if ( here->HSMHV_coselfheat > 0 && here->HSMHVtempNode <= 0 ){ error = CKTmkVolt(ckt, &tmp, here->HSMHVname,"temp"); if(error) return(error); here->HSMHVtempNode = tmp->number; } if ( here->HSMHV_coselfheat <= 0 ) here->HSMHVtempNode = -1; /* flat handling of NQS */ if ( model->HSMHV_conqs ){ error = CKTmkVolt(ckt, &tmp, here->HSMHVname,"qi_nqs"); if(error) return(error); here->HSMHVqiNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->HSMHVname,"qb_nqs"); if(error) return(error); here->HSMHVqbNode = tmp->number; } /* set Sparse Matrix Pointers */ /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(HSMHVDPbpPtr, HSMHVdNodePrime, HSMHVbNodePrime); TSTALLOC(HSMHVSPbpPtr, HSMHVsNodePrime, HSMHVbNodePrime); TSTALLOC(HSMHVGPbpPtr, HSMHVgNodePrime, HSMHVbNodePrime); TSTALLOC(HSMHVBPdPtr, HSMHVbNodePrime, HSMHVdNode); TSTALLOC(HSMHVBPsPtr, HSMHVbNodePrime, HSMHVsNode); TSTALLOC(HSMHVBPdpPtr, HSMHVbNodePrime, HSMHVdNodePrime); TSTALLOC(HSMHVBPspPtr, HSMHVbNodePrime, HSMHVsNodePrime); TSTALLOC(HSMHVBPgpPtr, HSMHVbNodePrime, HSMHVgNodePrime); TSTALLOC(HSMHVBPbpPtr, HSMHVbNodePrime, HSMHVbNodePrime); TSTALLOC(HSMHVDdPtr, HSMHVdNode, HSMHVdNode); TSTALLOC(HSMHVGPgpPtr, HSMHVgNodePrime, HSMHVgNodePrime); TSTALLOC(HSMHVSsPtr, HSMHVsNode, HSMHVsNode); TSTALLOC(HSMHVDPdpPtr, HSMHVdNodePrime, HSMHVdNodePrime); TSTALLOC(HSMHVSPspPtr, HSMHVsNodePrime, HSMHVsNodePrime); TSTALLOC(HSMHVDdpPtr, HSMHVdNode, HSMHVdNodePrime); TSTALLOC(HSMHVGPdpPtr, HSMHVgNodePrime, HSMHVdNodePrime); TSTALLOC(HSMHVGPspPtr, HSMHVgNodePrime, HSMHVsNodePrime); TSTALLOC(HSMHVSspPtr, HSMHVsNode, HSMHVsNodePrime); TSTALLOC(HSMHVDPspPtr, HSMHVdNodePrime, HSMHVsNodePrime); TSTALLOC(HSMHVDPdPtr, HSMHVdNodePrime, HSMHVdNode); TSTALLOC(HSMHVDPgpPtr, HSMHVdNodePrime, HSMHVgNodePrime); TSTALLOC(HSMHVSPgpPtr, HSMHVsNodePrime, HSMHVgNodePrime); TSTALLOC(HSMHVSPsPtr, HSMHVsNodePrime, HSMHVsNode); TSTALLOC(HSMHVSPdpPtr, HSMHVsNodePrime, HSMHVdNodePrime); TSTALLOC(HSMHVGgPtr, HSMHVgNode, HSMHVgNode); TSTALLOC(HSMHVGgpPtr, HSMHVgNode, HSMHVgNodePrime); TSTALLOC(HSMHVGPgPtr, HSMHVgNodePrime, HSMHVgNode); /* TSTALLOC(HSMHVGdpPtr, HSMHVgNode, HSMHVdNodePrime); not used */ /* TSTALLOC(HSMHVGspPtr, HSMHVgNode, HSMHVsNodePrime); not used */ /* TSTALLOC(HSMHVGbpPtr, HSMHVgNode, HSMHVbNodePrime); not used */ TSTALLOC(HSMHVDdbPtr, HSMHVdNode, HSMHVdbNode); TSTALLOC(HSMHVSsbPtr, HSMHVsNode, HSMHVsbNode); TSTALLOC(HSMHVDBdPtr, HSMHVdbNode, HSMHVdNode); TSTALLOC(HSMHVDBdbPtr, HSMHVdbNode, HSMHVdbNode); TSTALLOC(HSMHVDBbpPtr, HSMHVdbNode, HSMHVbNodePrime); /* TSTALLOC(HSMHVDBbPtr, HSMHVdbNode, HSMHVbNode); not used */ TSTALLOC(HSMHVBPdbPtr, HSMHVbNodePrime, HSMHVdbNode); TSTALLOC(HSMHVBPbPtr, HSMHVbNodePrime, HSMHVbNode); TSTALLOC(HSMHVBPsbPtr, HSMHVbNodePrime, HSMHVsbNode); TSTALLOC(HSMHVSBsPtr, HSMHVsbNode, HSMHVsNode); TSTALLOC(HSMHVSBbpPtr, HSMHVsbNode, HSMHVbNodePrime); /* TSTALLOC(HSMHVSBbPtr, HSMHVsbNode, HSMHVbNode); not used */ TSTALLOC(HSMHVSBsbPtr, HSMHVsbNode, HSMHVsbNode); /* TSTALLOC(HSMHVBdbPtr, HSMHVbNode, HSMHVdbNode); not used */ TSTALLOC(HSMHVBbpPtr, HSMHVbNode, HSMHVbNodePrime); /* TSTALLOC(HSMHVBsbPtr, HSMHVbNode, HSMHVsbNode); not used */ TSTALLOC(HSMHVBbPtr, HSMHVbNode, HSMHVbNode); TSTALLOC(HSMHVDgpPtr, HSMHVdNode, HSMHVgNodePrime); TSTALLOC(HSMHVDsPtr, HSMHVdNode, HSMHVsNode); TSTALLOC(HSMHVDbpPtr, HSMHVdNode, HSMHVbNodePrime); TSTALLOC(HSMHVDspPtr, HSMHVdNode, HSMHVsNodePrime); TSTALLOC(HSMHVDPsPtr, HSMHVdNodePrime, HSMHVsNode); TSTALLOC(HSMHVSgpPtr, HSMHVsNode, HSMHVgNodePrime); TSTALLOC(HSMHVSdPtr, HSMHVsNode, HSMHVdNode); TSTALLOC(HSMHVSbpPtr, HSMHVsNode, HSMHVbNodePrime); TSTALLOC(HSMHVSdpPtr, HSMHVsNode, HSMHVdNodePrime); TSTALLOC(HSMHVSPdPtr, HSMHVsNodePrime, HSMHVdNode); TSTALLOC(HSMHVGPdPtr, HSMHVgNodePrime, HSMHVdNode); TSTALLOC(HSMHVGPsPtr, HSMHVgNodePrime, HSMHVsNode); if ( here->HSMHVsubNode > 0 ) { /* 5th substrate node */ TSTALLOC(HSMHVDsubPtr, HSMHVdNode, HSMHVsubNode); TSTALLOC(HSMHVDPsubPtr, HSMHVdNodePrime, HSMHVsubNode); TSTALLOC(HSMHVSsubPtr, HSMHVsNode, HSMHVsubNode); TSTALLOC(HSMHVSPsubPtr, HSMHVsNodePrime, HSMHVsubNode); } if ( here->HSMHV_coselfheat > 0 ) { /* self heating */ TSTALLOC(HSMHVTemptempPtr, HSMHVtempNode, HSMHVtempNode); TSTALLOC(HSMHVTempdPtr, HSMHVtempNode, HSMHVdNode); TSTALLOC(HSMHVTempdpPtr, HSMHVtempNode, HSMHVdNodePrime); TSTALLOC(HSMHVTempsPtr, HSMHVtempNode, HSMHVsNode); TSTALLOC(HSMHVTempspPtr, HSMHVtempNode, HSMHVsNodePrime); TSTALLOC(HSMHVDPtempPtr, HSMHVdNodePrime, HSMHVtempNode); TSTALLOC(HSMHVSPtempPtr, HSMHVsNodePrime, HSMHVtempNode); TSTALLOC(HSMHVTempgpPtr, HSMHVtempNode, HSMHVgNodePrime); TSTALLOC(HSMHVTempbpPtr, HSMHVtempNode, HSMHVbNodePrime); TSTALLOC(HSMHVGPtempPtr, HSMHVgNodePrime, HSMHVtempNode); TSTALLOC(HSMHVBPtempPtr, HSMHVbNodePrime, HSMHVtempNode); TSTALLOC(HSMHVDBtempPtr, HSMHVdbNode, HSMHVtempNode); TSTALLOC(HSMHVSBtempPtr, HSMHVsbNode, HSMHVtempNode); TSTALLOC(HSMHVDtempPtr, HSMHVdNode, HSMHVtempNode); TSTALLOC(HSMHVStempPtr, HSMHVsNode, HSMHVtempNode); } if ( model->HSMHV_conqs ) { /* flat handling of NQS */ TSTALLOC(HSMHVDPqiPtr, HSMHVdNodePrime, HSMHVqiNode); TSTALLOC(HSMHVGPqiPtr, HSMHVgNodePrime, HSMHVqiNode); TSTALLOC(HSMHVGPqbPtr, HSMHVgNodePrime, HSMHVqbNode); TSTALLOC(HSMHVSPqiPtr, HSMHVsNodePrime, HSMHVqiNode); TSTALLOC(HSMHVBPqbPtr, HSMHVbNodePrime, HSMHVqbNode); TSTALLOC(HSMHVQIdpPtr, HSMHVqiNode, HSMHVdNodePrime); TSTALLOC(HSMHVQIgpPtr, HSMHVqiNode, HSMHVgNodePrime); TSTALLOC(HSMHVQIspPtr, HSMHVqiNode, HSMHVsNodePrime); TSTALLOC(HSMHVQIbpPtr, HSMHVqiNode, HSMHVbNodePrime); TSTALLOC(HSMHVQIqiPtr, HSMHVqiNode, HSMHVqiNode); TSTALLOC(HSMHVQBdpPtr, HSMHVqbNode, HSMHVdNodePrime); TSTALLOC(HSMHVQBgpPtr, HSMHVqbNode, HSMHVgNodePrime); TSTALLOC(HSMHVQBspPtr, HSMHVqbNode, HSMHVsNodePrime); TSTALLOC(HSMHVQBbpPtr, HSMHVqbNode, HSMHVbNodePrime); TSTALLOC(HSMHVQBqbPtr, HSMHVqbNode, HSMHVqbNode); if ( here->HSMHV_coselfheat > 0 ) { /* self heating */ TSTALLOC(HSMHVQItempPtr, HSMHVqiNode, HSMHVtempNode); TSTALLOC(HSMHVQBtempPtr, HSMHVqbNode, HSMHVtempNode); } } /*-----------------------------------------------------------* * Range check of instance parameters *-----------------*/ RANGECHECK(here->HSMHV_l, model->HSMHV_lmin, model->HSMHV_lmax, "L") ; RANGECHECK(here->HSMHV_w/here->HSMHV_nf, model->HSMHV_wmin, model->HSMHV_wmax, "W/NF") ; /* binning calculation */ pParam = &here->pParam ; Lgate = here->HSMHV_l + model->HSMHV_xl ; Wgate = here->HSMHV_w / here->HSMHV_nf + model->HSMHV_xw ; LG = Lgate * C_m2um ; WG = Wgate * C_m2um ; Lbin = pow(LG, model->HSMHV_lbinn) ; Wbin = pow(WG, model->HSMHV_wbinn) ; LWbin = Lbin * Wbin ; BINNING(vmax); BINNING(bgtmp1); BINNING(bgtmp2); BINNING(eg0); BINNING(vfbover); BINNING(nover); BINNING(novers); BINNING(wl2); BINNING(vfbc); BINNING(nsubc); BINNING(nsubp); BINNING(scp1); BINNING(scp2); BINNING(scp3); BINNING(sc1); BINNING(sc2); BINNING(sc3); BINNING(pgd1); BINNING(pgd3); BINNING(ndep); BINNING(ninv); BINNING(muecb0); BINNING(muecb1); BINNING(mueph1); BINNING(vtmp); BINNING(wvth0); BINNING(muesr1); BINNING(muetmp); BINNING(sub1); BINNING(sub2); BINNING(svds); BINNING(svbs); BINNING(svgs); BINNING(fn1); BINNING(fn2); BINNING(fn3); BINNING(fvbs); BINNING(nsti); BINNING(wsti); BINNING(scsti1); BINNING(scsti2); BINNING(vthsti); BINNING(muesti1); BINNING(muesti2); BINNING(muesti3); BINNING(nsubpsti1); BINNING(nsubpsti2); BINNING(nsubpsti3); BINNING(cgso); BINNING(cgdo); BINNING(js0); BINNING(js0sw); BINNING(nj); BINNING(cisbk); BINNING(clm1); BINNING(clm2); BINNING(clm3); BINNING(wfc); BINNING(gidl1); BINNING(gidl2); BINNING(gleak1); BINNING(gleak2); BINNING(gleak3); BINNING(gleak6); BINNING(glksd1); BINNING(glksd2); BINNING(glkb1); BINNING(glkb2); BINNING(nftrp); BINNING(nfalp); BINNING(pthrou); BINNING(vdiffj); BINNING(ibpc1); BINNING(ibpc2); BINNING(cgbo); BINNING(cvdsover); BINNING(falph); BINNING(npext); BINNING(powrat); BINNING(rd); BINNING(rd22); BINNING(rd23); BINNING(rd24); BINNING(rdict1); BINNING(rdov13); BINNING(rdslp1); BINNING(rdvb); BINNING(rdvd); BINNING(rdvg11); BINNING(rs); BINNING(rth0); BINNING(vover); /*-----------------------------------------------------------* * Range check of model parameters *-----------------*/ RANGECHECK(pParam->HSMHV_vmax, 1.0e6, 20.0e6, "VMAX") ; RANGECHECK(pParam->HSMHV_bgtmp1, 50.0e-6, 1.0e-3, "BGTMP1") ; RANGECHECK(pParam->HSMHV_bgtmp2, -1.0e-6, 1.0e-6, "BGTMP2") ; RANGECHECK(pParam->HSMHV_eg0, 1.0, 1.3, "EG0") ; RANGECHECK(pParam->HSMHV_vfbover, -1.0, 1.0, "VFBOVER") ; RANGECHECK(pParam->HSMHV_vfbc, -1.2, -0.8, "VFBC") ; RANGECHECK(pParam->HSMHV_nsubc, 1.0e16, 1.0e19, "NSUBC") ; RANGECHECK(pParam->HSMHV_nsubp, 1.0e16, 1.0e19, "NSUBP") ; RANGECHECK(pParam->HSMHV_scp1, 0.0, 20.0, "SCP1") ; RANGECHECK(pParam->HSMHV_scp2, 0.0, 2.0, "SCP2") ; RANGECHECK(pParam->HSMHV_scp3, 0.0, 200e-9, "SCP3") ; RANGECHECK(pParam->HSMHV_sc1, 0.0, 20.0, "SC1") ; RANGECHECK(pParam->HSMHV_sc2, 0.0, 2.0, "SC2") ; RANGECHECK(pParam->HSMHV_sc3, 0.0, 200e-9, "SC3") ; RANGECHECK(pParam->HSMHV_pgd1, 0.0, 50.0e-3, "PGD1") ; RANGECHECK(pParam->HSMHV_pgd3, 0.0, 1.2, "PGD3") ; RANGECHECK(pParam->HSMHV_ndep, 0.0, 1.0, "NDEP") ; RANGECHECK(pParam->HSMHV_ninv, 0.0, 1.0, "NINV") ; RANGECHECK(pParam->HSMHV_muecb0, 100.0, 100.0e3, "MUECB0") ; RANGECHECK(pParam->HSMHV_muecb1, 5.0, 10.0e3, "MUECB1") ; RANGECHECK(pParam->HSMHV_mueph1, 2.0e3, 30.0e3, "MUEPH1") ; RANGECHECK(pParam->HSMHV_vtmp, -2.0, 1.0, "VTMP") ; RANGECHECK(pParam->HSMHV_muesr1, 1.0e14, 1.0e16, "MUESR1") ; RANGECHECK(pParam->HSMHV_muetmp, 0.5, 2.0, "MUETMP") ; RANGECHECK(pParam->HSMHV_clm1, 0.01, 1.0, "CLM1") ; RANGECHECK(pParam->HSMHV_clm2, 1.0, 4.0, "CLM2") ; RANGECHECK(pParam->HSMHV_clm3, 0.5, 5.0, "CLM3") ; RANGECHECK(pParam->HSMHV_wfc, -5.0e-15, 1.0e-6, "WFC") ; RANGECHECK(pParam->HSMHV_cgso, 0.0, 100e-9 * 100*C_VAC*model->HSMHV_kappa/model->HSMHV_tox*C_m2cm, "CGSO") ; RANGECHECK(pParam->HSMHV_cgdo, 0.0, 100e-9 * 100*C_VAC*model->HSMHV_kappa/model->HSMHV_tox*C_m2cm, "CGDO") ; RANGECHECK(pParam->HSMHV_pthrou, 0.0, 50.0e-3, "PTHROU") ; RANGECHECK(pParam->HSMHV_ibpc1, 0.0, 1.0e12, "IBPC1") ; RANGECHECK(pParam->HSMHV_ibpc2, 0.0, 1.0e12, "IBPC2") ; RANGECHECK(pParam->HSMHV_cvdsover, 0.0, 1.0, "CVDSOVER") ; RANGECHECK(pParam->HSMHV_nsti, 1.0e16, 1.0e19, "NSTI") ; if ( pParam->HSMHV_cgbo < 0.0 ) { printf("warning(HiSIMHV): %s = %e\n", "CGBO", pParam->HSMHV_cgbo ); printf("warning(HiSIMHV): The model parameter %s must not be less than %s.\n", "CGBO", "0.0" ); } RANGECHECK(pParam->HSMHV_npext, 1.0e16, 1.0e18, "NPEXT") ; RANGECHECK(pParam->HSMHV_rd, 0.0, 100.0e-3, "RD") ; RANGECHECK(pParam->HSMHV_rd22, -5.0, 0.0, "RD22") ; RANGECHECK(pParam->HSMHV_rd23, 0.0, 2.0, "RD23") ; RANGECHECK(pParam->HSMHV_rd24, 0.0, 0.1, "RD24") ; RANGECHECK(pParam->HSMHV_rdict1, -10.0, 10.0, "RDICT1") ; RANGECHECK(pParam->HSMHV_rdov13, 0.0, 1.0, "RDOV13") ; RANGECHECK(pParam->HSMHV_rdslp1, -10.0, 10.0, "RDSLP1") ; RANGECHECK(pParam->HSMHV_rdvb, 0.0, 2.0, "RDVB") ; RANGECHECK(pParam->HSMHV_rdvd, 0.0, 2.0, "RDVD") ; MINCHECK( pParam->HSMHV_rdvg11, 0.0, "RDVG11") ; RANGECHECK(pParam->HSMHV_rs, 0.0, 10.0e-3, "RS") ; RANGECHECK(pParam->HSMHV_rth0, 0.0, 10.0, "RTH0") ; RANGECHECK(pParam->HSMHV_vover, 0.0, 4.0, "VOVER") ; /*-----------------------------------------------------------* * Change unit into MKS for instance parameters. *-----------------*/ hereMKS->HSMHV_nsubcdfm = here->HSMHV_nsubcdfm / C_cm2m_p3 ; hereMKS->HSMHV_subld2 = here->HSMHV_subld2 * C_m2cm ; pParam->HSMHV_nsubc = pParam->HSMHV_nsubc / C_cm2m_p3 ; pParam->HSMHV_nsubp = pParam->HSMHV_nsubp / C_cm2m_p3 ; pParam->HSMHV_nsti = pParam->HSMHV_nsti / C_cm2m_p3 ; pParam->HSMHV_nover = pParam->HSMHV_nover / C_cm2m_p3 ; pParam->HSMHV_novers = pParam->HSMHV_novers / C_cm2m_p3 ; pParam->HSMHV_nsubpsti1 = pParam->HSMHV_nsubpsti1 / C_m2cm ; pParam->HSMHV_muesti1 = pParam->HSMHV_muesti1 / C_m2cm ; pParam->HSMHV_ndep = pParam->HSMHV_ndep / C_m2cm ; pParam->HSMHV_ninv = pParam->HSMHV_ninv / C_m2cm ; pParam->HSMHV_vmax = pParam->HSMHV_vmax / C_m2cm ; pParam->HSMHV_wfc = pParam->HSMHV_wfc * C_m2cm_p2 ; pParam->HSMHV_glksd1 = pParam->HSMHV_glksd1 / C_m2cm ; pParam->HSMHV_glksd2 = pParam->HSMHV_glksd2 * C_m2cm ; pParam->HSMHV_gleak2 = pParam->HSMHV_gleak2 * C_m2cm ; pParam->HSMHV_glkb2 = pParam->HSMHV_glkb2 * C_m2cm ; pParam->HSMHV_fn2 = pParam->HSMHV_fn2 * C_m2cm ; pParam->HSMHV_gidl1 = pParam->HSMHV_gidl1 / C_m2cm_p1o2 ; pParam->HSMHV_gidl2 = pParam->HSMHV_gidl2 * C_m2cm ; pParam->HSMHV_nfalp = pParam->HSMHV_nfalp / C_m2cm ; pParam->HSMHV_nftrp = pParam->HSMHV_nftrp * C_m2cm_p2 ; pParam->HSMHV_npext = pParam->HSMHV_npext / C_cm2m_p3 ; pParam->HSMHV_rd22 = pParam->HSMHV_rd22 / C_m2cm ; pParam->HSMHV_rd23 = pParam->HSMHV_rd23 / C_m2cm ; pParam->HSMHV_rd24 = pParam->HSMHV_rd24 / C_m2cm ; pParam->HSMHV_rdvd = pParam->HSMHV_rdvd / C_m2cm ; pParam->HSMHV_rth0 = pParam->HSMHV_rth0 / C_m2cm ; // hereMKS->HSMHV_muecb0 = pParam->HSMHV_muecb0 * C_m2cm_p2 ; // hereMKS->HSMHV_muecb1 = pParam->HSMHV_muecb1 * C_m2cm_p2 ; // hereMKS->HSMHV_muesr1 = pParam->HSMHV_muesr1 * C_m2cm_p2 ; // hereMKS->HSMHV_mueph1 = pParam->HSMHV_mueph1 * C_m2cm_p2 ; pParam->HSMHV_vfbover = - pParam->HSMHV_vfbover ; /* For Backward compatibility */ } /* instance */ /*-----------------------------------------------------------* * Range check of model parameters *-----------------*/ RANGECHECK(model->HSMHV_shemax , 300, 600, "SHEMAX"); if ( model->HSMHV_tox <= 0 ) { printf("warning(HiSIMHV): TOX = %e\n ", model->HSMHV_tox); printf("warning(HiSIMHV): The model parameter TOX must be positive.\n"); } RANGECHECK(model->HSMHV_xld, 0.0, 50.0e-9, "XLD") ; RANGECHECK(model->HSMHV_xwd, -10.0e-9, 100.0e-9, "XWD") ; RANGECHECK(model->HSMHV_xwdc, -10.0e-9, 100.0e-9, "XWDC") ; RANGECHECK(model->HSMHV_rsh, 0.0, 500, "RSH") ; RANGECHECK(model->HSMHV_rshg, 0.0, 100.0, "RSHG") ; if(model->HSMHV_xqy != 0.0) { MINCHECK (model->HSMHV_xqy, 10.0e-9, "XQY") ; } MINCHECK (model->HSMHV_xqy1, 0.0, "XQY1") ; MINCHECK (model->HSMHV_xqy2, 0.0, "XQY2") ; RANGECHECK(model->HSMHV_vbi, 1.0, 1.2, "VBI") ; RANGECHECK(model->HSMHV_parl2, 0.0, 50.0e-9, "PARL2") ; RANGECHECK(model->HSMHV_lp, 0.0, 300.0e-9, "LP") ; RANGECHECK(model->HSMHV_pgd2, 0.0, 1.5, "PGD2") ; RANGECHECK(model->HSMHV_pgd4, 0.0, 3.0, "PGD4") ; RANGECHECK(model->HSMHV_mueph0, 0.25, 0.35, "MUEPH0") ; RANGECHECK(model->HSMHV_muesr0, 1.8, 2.2, "MUESR0") ; RANGECHECK(model->HSMHV_lpext, 1.0e-50, 10.0e-6, "LPEXT") ; RANGECHECK(model->HSMHV_scp21, 0.0, 5.0, "SCP21") ; RANGECHECK(model->HSMHV_scp22, 0.0, 0.0, "SCP22") ; RANGECHECK(model->HSMHV_bs1, 0.0, 50.0e-3, "BS1") ; RANGECHECK(model->HSMHV_bs2, 0.5, 1.0, "BS2") ; RANGECHECK(model->HSMHV_clm5, 0.0, 2.0, "CLM5") ; RANGECHECK(model->HSMHV_clm6, 0.0, 20.0, "CLM6") ; MINCHECK (model->HSMHV_ninvd, 0.0, "NINVD") ; MINCHECK (model->HSMHV_ninvdw, 0.0, "NINVDW") ; MINCHECK (model->HSMHV_ninvdwp, 0.0, "NINVDWP") ; MINCHECK (model->HSMHV_ninvdt1, 0.0, "NINVDT1") ; MINCHECK (model->HSMHV_ninvdt2, 0.0, "NINVDT2") ; RANGECHECK(model->HSMHV_sub2l, 0.0, 1.0, "SUB2L") ; RANGECHECK(model->HSMHV_voverp, 0.0, 2.0, "VOVERP") ; RANGECHECK(model->HSMHV_qme1, 0.0, 300.0e-9, "QME1") ; RANGECHECK(model->HSMHV_qme2, 0.0, 3.0, "QME2") ; RANGECHECK(model->HSMHV_qme3, 0.0,800.0e-12, "QME3") ; RANGECHECK(model->HSMHV_glpart1, 0.0, 1.0, "GLPART1") ; RANGECHECK(model->HSMHV_tnom, 22.0, 32.0, "TNOM") ; RANGECHECK(model->HSMHV_ddltmax, 1.0, 10.0, "DDLTMAX") ; RANGECHECK(model->HSMHV_ddltict, -3.0, 20.0, "DDLTICT") ; RANGECHECK(model->HSMHV_ddltslp, 0.0, 20.0, "DDLTSLP") ; RANGECHECK(model->HSMHV_mphdfm, -3.0, 3.0, "MPHDFM") ; RANGECHECK(model->HSMHV_cvb, -0.1, 0.2, "CVB") ; RANGECHECK(model->HSMHV_cvbk, -0.1, 0.2, "CVBK") ; RANGECHECK(model->HSMHV_rd20, 0.0, 30.0, "RD20") ; RANGECHECK(model->HSMHV_rd21, 0.0, 1.0, "RD21") ; RANGECHECK(model->HSMHV_rd22d, 0.0, 2.0, "RD22D") ; MINCHECK( model->HSMHV_rd25, 0.0, "RD25") ; RANGECHECK(model->HSMHV_rdtemp1, -1e-3, 1e-2, "RDTEMP1") ; RANGECHECK(model->HSMHV_rdtemp2, -1e-5, 1e-5, "RDTEMP2") ; RANGECHECK(model->HSMHV_rdvdtemp1,-1e-3, 1e-2, "RDVDTEMP1") ; RANGECHECK(model->HSMHV_rdvdtemp2,-1e-5, 1e-5, "RDVDTEMP2") ; MINCHECK( model->HSMHV_rdvg12, 0.0, "RDVG12") ; RANGECHECK(model->HSMHV_rthtemp1, -1.0, 1.0, "RTHTEMP1") ; RANGECHECK(model->HSMHV_rthtemp2, -1.0, 1.0, "RTHTEMP2") ; RANGECHECK(model->HSMHV_rth0w, -100, 100, "RTH0W") ; RANGECHECK(model->HSMHV_rth0wp, -10, 10, "RTH0WP") ; RANGECHECK(model->HSMHV_rth0nf, -5.0, 5.0, "RTH0NF") ; RANGECHECK(model->HSMHV_powrat, 0.0, 1.0, "POWRAT") ; RANGECHECK(model->HSMHV_prattemp1, -1.0, 1.0, "PRATTEMP1") ; RANGECHECK(model->HSMHV_prattemp2, -1.0, 1.0, "PRATTEMP2") ; MINCHECK( model->HSMHV_xldld, 0.0, "XLDLD") ; MINCHECK( model->HSMHV_loverld, 0.0, "LOVERLD") ; MINCHECK( model->HSMHV_lovers, 0.0, "LOVERS") ; MINCHECK( model->HSMHV_lover, 0.0, "LOVER") ; MINCHECK( model->HSMHV_ldrift1, 0.0, "LDRIFT1") ; MINCHECK( model->HSMHV_ldrift1s, 0.0, "LDRIFT1S") ; MINCHECK( model->HSMHV_ldrift2, 0.0, "LDRIFT2") ; MINCHECK( model->HSMHV_ldrift2s, 0.0, "LDRIFT2S") ; MINCHECK( model->HSMHV_ldrift, 0.0, "LDRIFT") ; RANGECHECK(model->HSMHV_rds, -100, 100, "RDS") ; RANGECHECK(model->HSMHV_rdsp, -10, 10, "RDSP") ; RANGECHECK(model->HSMHV_rdvdl, -100, 100, "RDVDL") ; RANGECHECK(model->HSMHV_rdvdlp, -10, 10, "RDVDLP") ; RANGECHECK(model->HSMHV_rdvds, -100, 100, "RDVDS") ; RANGECHECK(model->HSMHV_rdvdsp, -10, 10, "RDVDSP") ; RANGECHECK(model->HSMHV_rd23l, -100, 100, "RD23L") ; RANGECHECK(model->HSMHV_rd23lp, -10, 10, "RD23LP") ; RANGECHECK(model->HSMHV_rd23s, -100, 100, "RD23S") ; RANGECHECK(model->HSMHV_rd23sp, -10, 10, "RD23SP") ; RANGECHECK(model->HSMHV_rdov11, 0.0, 10, "RDOV11") ; RANGECHECK(model->HSMHV_rdov12, 0.0, 2.0, "RDOV12") ; RANGECHECK(model->HSMHV_rdslp2, -10.0, 10.0, "RDSLP2") ; RANGECHECK(model->HSMHV_rdict2, -10.0, 10.0, "RDICT2") ; /*-----------------------------------------------------------* * Change units into MKS. *-----------------*/ modelMKS->HSMHV_vmax = model->HSMHV_vmax / C_m2cm ; modelMKS->HSMHV_ll = model->HSMHV_ll / pow( C_m2cm , model->HSMHV_lln ) ; modelMKS->HSMHV_wl = model->HSMHV_wl / pow( C_m2cm , model->HSMHV_wln ) ; modelMKS->HSMHV_svgsl = model->HSMHV_svgsl / pow( C_m2cm , model->HSMHV_svgslp ) ; modelMKS->HSMHV_svgsw = model->HSMHV_svgsw / pow( C_m2cm , model->HSMHV_svgswp ) ; modelMKS->HSMHV_svbsl = model->HSMHV_svbsl / pow( C_m2cm , model->HSMHV_svbslp ) ; modelMKS->HSMHV_slgl = model->HSMHV_slgl / pow( C_m2cm , model->HSMHV_slglp ) ; modelMKS->HSMHV_sub1l = model->HSMHV_sub1l / pow( C_m2cm , model->HSMHV_sub1lp ) ; modelMKS->HSMHV_slg = model->HSMHV_slg / C_m2cm ; modelMKS->HSMHV_sub2l = model->HSMHV_sub2l / C_m2cm ; modelMKS->HSMHV_subld2 = model->HSMHV_subld2 * C_m2cm ; modelMKS->HSMHV_rdtemp1 = model->HSMHV_rdtemp1 / C_m2cm ; modelMKS->HSMHV_rdtemp2 = model->HSMHV_rdtemp2 / C_m2cm ; modelMKS->HSMHV_rdvdtemp1 = model->HSMHV_rdvdtemp1 / C_m2cm ; modelMKS->HSMHV_rdvdtemp2 = model->HSMHV_rdvdtemp2 / C_m2cm ; modelMKS->HSMHV_nsubsub = model->HSMHV_nsubsub / C_cm2m_p3 ; modelMKS->HSMHV_nsubpsti1 = model->HSMHV_nsubpsti1 / C_m2cm ; modelMKS->HSMHV_muesti1 = model->HSMHV_muesti1 / C_m2cm ; modelMKS->HSMHV_wfc = model->HSMHV_wfc * C_m2cm_p2 ; modelMKS->HSMHV_glksd1 = model->HSMHV_glksd1 / C_m2cm ; modelMKS->HSMHV_glksd2 = model->HSMHV_glksd2 * C_m2cm ; modelMKS->HSMHV_glksd3 = model->HSMHV_glksd3 * C_m2cm ; modelMKS->HSMHV_gleak2 = model->HSMHV_gleak2 * C_m2cm ; modelMKS->HSMHV_gleak4 = model->HSMHV_gleak4 * C_m2cm ; modelMKS->HSMHV_gleak5 = model->HSMHV_gleak5 * C_m2cm ; modelMKS->HSMHV_gleak7 = model->HSMHV_gleak7 / C_m2cm_p2 ; modelMKS->HSMHV_glkb2 = model->HSMHV_glkb2 * C_m2cm ; modelMKS->HSMHV_fn2 = model->HSMHV_fn2 * C_m2cm ; modelMKS->HSMHV_gidl1 = model->HSMHV_gidl1 / C_m2cm_p1o2 ; modelMKS->HSMHV_gidl2 = model->HSMHV_gidl2 * C_m2cm ; modelMKS->HSMHV_nfalp = model->HSMHV_nfalp / C_m2cm ; modelMKS->HSMHV_nftrp = model->HSMHV_nftrp * C_m2cm_p2 ; modelMKS->HSMHV_cit = model->HSMHV_cit * C_m2cm_p2 ; modelMKS->HSMHV_ovslp = model->HSMHV_ovslp / C_m2cm ; modelMKS->HSMHV_dly3 = model->HSMHV_dly3 / C_m2cm_p2 ; modelMKS->HSMHV_cth0 = model->HSMHV_cth0 * C_m2cm ; // modelMKS->HSMHV_muecb0 = model->HSMHV_muecb0 * C_cm2m_p2 ; // modelMKS->HSMHV_muecb1 = model->HSMHV_muecb1 * C_cm2m_p2 ; // modelMKS->HSMHV_muesr1 = model->HSMHV_muesr1 * C_cm2m_p2 ; // modelMKS->HSMHV_mueph1 = model->HSMHV_mueph1 * C_cm2m_p2 ; /*-----------------------------------------------------------* * Change unit into Kelvin. *-----------------*/ model->HSMHV_ktnom = model->HSMHV_tnom + 273.15 ; /* [C] -> [K] */ } /* model */ /* Reset ckt->CKTbypass to 0 */ if( ckt->CKTbypass == 1 ) { fprintf( stderr, "\nwarning(HiSIMHV): The BYPASS option is reset to 0 for reliable simulation.\n"); ckt->CKTbypass = 0 ; } /* check ckt->CKTintegrateMethod */ // if( ckt->CKTintegrateMethod == TRAPEZOIDAL ) { /* TRAPEZODAL:1 GEAR:2 */ // fprintf( stderr, "\nwarning(HiSIMHV): Recommend the Gear method for reliable simulation with '.options METHOD=GEAR'.\n"); // } return(OK); } int HSMHVunsetup( GENmodel *inModel, CKTcircuit *ckt) { #ifndef HAS_BATCHSIM HSMHVmodel *model; HSMHVinstance *here; for (model = (HSMHVmodel *)inModel; model != NULL; model = HSMHVnextModel(model)) { for (here = HSMHVinstances(model); here != NULL; here=HSMHVnextInstance(here)) { if (here->HSMHVqbNode > 0) CKTdltNNum(ckt, here->HSMHVqbNode); here->HSMHVqbNode = 0; if (here->HSMHVqiNode > 0) CKTdltNNum(ckt, here->HSMHVqiNode); here->HSMHVqiNode = 0; if (here->HSMHVtempNode > 0 && here->HSMHVtempNode != here->HSMHVtempNodeExt && here->HSMHVtempNode != here->HSMHVsubNodeExt) CKTdltNNum(ckt, here->HSMHVtempNode); here->HSMHVtempNode = 0; here->HSMHVsubNode = 0; if (here->HSMHVsbNode > 0 && here->HSMHVsbNode != here->HSMHVbNode) CKTdltNNum(ckt, here->HSMHVsbNode); here->HSMHVsbNode = 0; if (here->HSMHVbNodePrime > 0 && here->HSMHVbNodePrime != here->HSMHVbNode) CKTdltNNum(ckt, here->HSMHVbNodePrime); here->HSMHVbNodePrime = 0; if (here->HSMHVdbNode > 0 && here->HSMHVdbNode != here->HSMHVbNode) CKTdltNNum(ckt, here->HSMHVdbNode); here->HSMHVdbNode = 0; if (here->HSMHVgNodePrime > 0 && here->HSMHVgNodePrime != here->HSMHVgNode) CKTdltNNum(ckt, here->HSMHVgNodePrime); here->HSMHVgNodePrime = 0; if (here->HSMHVsNodePrime > 0 && here->HSMHVsNodePrime != here->HSMHVsNode) CKTdltNNum(ckt, here->HSMHVsNodePrime); here->HSMHVsNodePrime = 0; if (here->HSMHVdNodePrime > 0 && here->HSMHVdNodePrime != here->HSMHVdNode) CKTdltNNum(ckt, here->HSMHVdNodePrime); here->HSMHVdNodePrime = 0; } } #endif return OK; } tmpk8ny_4pz/src/spicelib/devices/hisimhv1/hsmhvld_info_eval.h0000644000175000017500000001552713546075722024565 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2012 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 1 SUBVERSION : 2 REVISION : 4 ) Model Parameter VERSION : 1.23 FILE : hsmhvld_info_eval.h DATE : 2013.04.30 recent changes: - 2009.01.09 some bugfixes released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /* print all outputs ------------VV */ if ( model->HSMHV_info >= 4 ) { here->HSMHV_csdo = - (here->HSMHV_cddo + here->HSMHV_cgdo + here->HSMHV_cbdo) ; here->HSMHV_csgo = - (here->HSMHV_cdgo + here->HSMHV_cggo + here->HSMHV_cbgo) ; here->HSMHV_csbo = - (here->HSMHV_cdbo + here->HSMHV_cgbo + here->HSMHV_cbbo) ; here->HSMHV_cdso = - (here->HSMHV_cddo + here->HSMHV_cdgo + here->HSMHV_cdbo) ; here->HSMHV_cgso = - (here->HSMHV_cgdo + here->HSMHV_cggo + here->HSMHV_cgbo) ; here->HSMHV_csso = - (here->HSMHV_csdo + here->HSMHV_csgo + here->HSMHV_csbo) ; cgdb = dQg_dVds - ((here->HSMHV_mode > 0) ? here->HSMHV_cgdo : here->HSMHV_cgso) ; cggb = dQg_dVgs - here->HSMHV_cggo ; cgsb = - (dQg_dVds + dQg_dVgs + dQg_dVbs) - ((here->HSMHV_mode > 0) ? here->HSMHV_cgso : here->HSMHV_cgdo) ; cbdb = dQb_dVds - ((here->HSMHV_mode > 0) ? here->HSMHV_cbdo : -(here->HSMHV_cbdo+here->HSMHV_cbgo+here->HSMHV_cbbo)) ; cbgb = dQb_dVgs - here->HSMHV_cbgo ; cbsb = - (dQb_dVds + dQb_dVgs + dQb_dVbs) - ((here->HSMHV_mode > 0) ? -(here->HSMHV_cbdo+here->HSMHV_cbgo+here->HSMHV_cbbo) : here->HSMHV_cbdo) ; cddb = dQd_dVds - ((here->HSMHV_mode > 0) ? here->HSMHV_cddo : here->HSMHV_csso) ; cdgb = dQd_dVgs - ((here->HSMHV_mode > 0) ? here->HSMHV_cdgo : here->HSMHV_csgo) ; cdsb = - (dQd_dVds + dQd_dVgs + dQd_dVbs) - ((here->HSMHV_mode > 0) ? here->HSMHV_cdso : here->HSMHV_csdo) ; if (flg_nqs) { /* by implicit differentiation of the nqs equations: */ dQi_nqs_dVds = (dQi_dVds + Iqi_nqs * dtau_dVds )/(1.0 + ag0 * tau ) ; dQi_nqs_dVgs = (dQi_dVgs + Iqi_nqs * dtau_dVgs )/(1.0 + ag0 * tau ) ; dQi_nqs_dVbs = (dQi_dVbs + Iqi_nqs * dtau_dVbs )/(1.0 + ag0 * tau ) ; dQb_nqs_dVds = (dQbulk_dVds + Iqb_nqs * dtaub_dVds)/(1.0 + ag0 * taub) ; dQb_nqs_dVgs = (dQbulk_dVgs + Iqb_nqs * dtaub_dVgs)/(1.0 + ag0 * taub) ; dQb_nqs_dVbs = (dQbulk_dVbs + Iqb_nqs * dtaub_dVbs)/(1.0 + ag0 * taub) ; cgdb_nqs = dQg_nqs_dQi_nqs * dQi_nqs_dVds + dQg_nqs_dQb_nqs * dQb_nqs_dVds ; cggb_nqs = dQg_nqs_dQi_nqs * dQi_nqs_dVgs + dQg_nqs_dQb_nqs * dQb_nqs_dVgs ; cgsb_nqs = - dQg_nqs_dQi_nqs * (dQi_nqs_dVds + dQi_nqs_dVgs + dQi_nqs_dVbs) - dQg_nqs_dQb_nqs * (dQb_nqs_dVds + dQb_nqs_dVgs + dQb_nqs_dVbs) ; cbdb_nqs = dQb_nqs_dVds ; cbgb_nqs = dQb_nqs_dVgs ; cbsb_nqs = -(dQb_nqs_dVds + dQb_nqs_dVgs + dQb_nqs_dVbs) ; cddb_nqs = dQd_nqs_dVds + dQd_nqs_dQi_nqs * dQi_nqs_dVds ; cdgb_nqs= dQd_nqs_dVgs + dQd_nqs_dQi_nqs * dQi_nqs_dVgs ; cdsb_nqs= -(dQd_nqs_dVds + dQd_nqs_dVgs + dQd_nqs_dVbs) - dQd_nqs_dQi_nqs * (dQi_nqs_dVds + dQi_nqs_dVgs + dQi_nqs_dVbs) ; } else { cgdb_nqs = cggb_nqs = cgsb_nqs = cbdb_nqs = cbgb_nqs = cbsb_nqs = cddb_nqs = cdgb_nqs = cdsb_nqs = 0.0 ; } printf( "--- variables returned from HSMHVevaluate() ----\n" ) ; printf( "von = %12.5e\n" , here->HSMHV_von ) ; printf( "vdsat = %12.5e\n" , here->HSMHV_vdsat ) ; printf( "ids = %12.5e\n" , here->HSMHV_ids ) ; printf( "gds = %12.5e\n" , here->HSMHV_dIds_dVdsi ) ; printf( "gm = %12.5e\n" , here->HSMHV_dIds_dVgsi ) ; printf( "gmbs = %12.5e\n" , here->HSMHV_dIds_dVbsi ) ; printf( "cggo = %12.5e\n" , here->HSMHV_cggo ) ; printf( "cgdo = %12.5e\n" , (here->HSMHV_mode > 0) ? here->HSMHV_cgdo : here->HSMHV_cgso ) ; printf( "cgso = %12.5e\n" , (here->HSMHV_mode > 0) ? here->HSMHV_cgso : here->HSMHV_cgdo ) ; printf( "cdgo = %12.5e\n" , (here->HSMHV_mode > 0) ? here->HSMHV_cdgo : here->HSMHV_csgo ) ; printf( "cddo = %12.5e\n" , (here->HSMHV_mode > 0) ? here->HSMHV_cddo : here->HSMHV_csso ) ; printf( "cdso = %12.5e\n" , (here->HSMHV_mode > 0) ? here->HSMHV_cdso : here->HSMHV_csdo ) ; printf( "csgo = %12.5e\n" , (here->HSMHV_mode > 0) ? here->HSMHV_csgo : here->HSMHV_cdgo ) ; printf( "csdo = %12.5e\n" , (here->HSMHV_mode > 0) ? here->HSMHV_csdo : here->HSMHV_cdso ) ; printf( "csso = %12.5e\n" , (here->HSMHV_mode > 0) ? here->HSMHV_csso : here->HSMHV_cddo ) ; printf( "qg = %12.5e\n" , Qg + Qg_nqs) ; printf( "qd = %12.5e\n" , Qd + Qd_nqs) ; printf( "qs = %12.5e\n" , Qs + Qs_nqs) ; printf( "cggb = %12.5e\n" , cggb + cggb_nqs ) ; printf( "cgsb = %12.5e\n" , cgsb + cgsb_nqs ) ; printf( "cgdb = %12.5e\n" , cgdb + cgdb_nqs ) ; printf( "cbgb = %12.5e\n" , cbgb + cbgb_nqs ) ; printf( "cbsb = %12.5e\n" , cbsb + cbsb_nqs ) ; printf( "cbdb = %12.5e\n" , cbdb + cbdb_nqs ) ; printf( "cdgb = %12.5e\n" , cdgb + cdgb_nqs ) ; printf( "cdsb = %12.5e\n" , cdsb + cdsb_nqs ) ; printf( "cddb = %12.5e\n" , cddb + cddb_nqs ) ; printf( "ibd = %12.5e\n" , Ibd ) ; printf( "ibs = %12.5e\n" , Ibs ) ; printf( "gbd = %12.5e\n" , Gbd ) ; printf( "gbs = %12.5e\n" , Gbs ) ; printf( "capbd = %12.5e\n" , Cbd ) ; printf( "capbs = %12.5e\n" , Cbs ) ; printf( "qbd = %12.5e\n" , Qbd ) ; printf( "qbs = %12.5e\n" , Qbs ) ; printf( "isub = %12.5e\n" , here->HSMHV_isub ) ; printf( "gbgs = %12.5e\n" , dIsub_dVgs + dIsubs_dVgs ) ; printf( "gbds = %12.5e\n" , dIsub_dVds + dIsubs_dVds ) ; printf( "gbbs = %12.5e\n" , dIsub_dVbs + dIsubs_dVbs ) ; printf( "S_flicker_noise * ( freq / gain ) = %.16e\n" , here->HSMHV_noiflick ) ; printf( "S_thermal_noise / ( gain * 4kT ) = %.16e\n" , here->HSMHV_noithrml ) ; printf( "S_induced_gate_noise / ( gain * freq^2 ) = %.16e\n" , here->HSMHV_noiigate ) ; printf( "cross-correlation coefficient (= Sigid/sqrt(Sig*Sid) ) = %.16e\n" , here->HSMHV_noicross ) ; /* print Surface Potentials */ /* printf( "ivds %e ivgs %e ivbs %e Ps0 %.16e Pds %.16e\n" , */ /* ivds, ivgs, ivbs, here->HSMHV_ps0_prv, here->HSMHV_pds_prv ) ; */ } /* print all outputs ------------AA */ /* End of HSMHVld_info_eval.h */ tmpk8ny_4pz/src/spicelib/devices/ChangeLog0000644000175000017500000000743513546075722020746 0ustar carstencarsten5.2.2003 -- Stuart Brorson * bsim3v1/b3v1noi.c, bsim3v2/b3v2noi.c: Both models had a function called StrongInversionNoiseEval(). They were renamed BSIM3V1StrongInversionNoiseEval() and BSIM3V2StrongInversionNoiseEval(). (Holger Vogt) * dev.c: support for ieee754 floating point. (Holger Vogt patch) 2000-08-28 Arno W. Peters * asrc/asrcset.c, bjt/bjtsetup.c, bsim1/b1set.c, bsim2/b2set.c, bsim3/b3set.c, bsim3v2/b3v2set.c, bsim4/b4set.c, ccvs/ccvsset.c, dio/diosetup.c, ind/indsetup.c, jfet/jfetset.c, jfet2/jfet2set.c, ltra/ltraset.c, mes/messetup.c, mos1/mos1set.c, mos2/mos2set.c, mos3/mos3set.c, mos6/mos6set.c, tra/trasetup.c, urc/urcsetup.c, vcvs/vcvsset.c, vsrc/vsrcset.c: Removed HAS_BATCHSIM preprocessor checks. 2000-07-21 Arno W. Peters * README: Updated. 2000-07-10 Arno W. Peters * asrc/asrcinit.c, asrc/asrcitf.h, bjt/bjtinit.c, bjt/bjtitf.h, bsim1/b1init.c, bsim1/b1itf.h, bsim2/b2init.c, bsim2/b2itf.h, bsim3/b3init.c, bsim3/b3itf.h, bsim3v1/b3v1init.c, bsim3v1/b3v1itf.h, bsim3v2/b3v2init.c, bsim3v2/b3v2itf.h, bsim4/b4init.c, bsim4/b4itf.h, cap/capinit.c, cap/capitf.h, cccs/cccsinit.c, cccs/cccsitf.h, ccvs/ccvsinit.c, ccvs/ccvsitf.h, csw/cswinit.c, csw/cswitf.h, dio/dioinit.c, dio/dioitf.h, ind/indinit.c, ind/inditf.h, isrc/isrcinit.c, isrc/isrcitf.h, jfet/jfetinit.c, jfet/jfetitf.h, jfet2/jfet2init.c, jfet2/jfet2itf.h, ltra/ltrainit.c, ltra/ltraitf.h, mes/mesinit.c, mes/mesitf.h, mos1/mos1init.c, mos1/mos1itf.h, mos2/mos2init.c, mos2/mos2itf.h, mos3/mos3init.c, mos3/mos3itf.h, mos6/mos6init.c, mos6/mos6itf.h, res/resinit.c, res/resitf.h, sw/swinit.c, sw/switf.h, tra/trainit.c, tra/traitf.h, urc/urcinit.c, urc/urcitf.h, vccs/vccsinit.c, vccs/vccsitf.h, vcvs/vcvsinit.c, vcvs/vcvsitf.h, vsrc/vsrcinit.c, vsrc/vsrcitf.h: Moved the device info structure from every devices' *itf.h file into a new *init.c file. Moved external declaration of addresses into *init.h file. Removed conditional compilation based on the AN_* defines as they were by default defined. The calling code will only get a pointer to a SPICEdev structure. This takes us another step closer to loadable devices. 2000-07-09 Arno W. Peters * devlist.c, devlist.h, test_devlist.c: Removed. This idea is not yet ready to be implemented. The dependency of the analysis code on CKThead for storing the device parameters at the same index as the device model in the DEVices variable caused trouble. 2000-07-08 Arno W. Peters * devlist.c, test_devlist.c: Additional checks revealed a bug, first_device() and next_device() should now do what they are supposed to do. 2000-07-07 Arno W. Peters * devlist.c, devlist.h: Another step towards dynamically loadable devices. The first_device() and next_device() functions abstract away the actual implementation of the devices list. Currently it is a fixed length array, when we start supporting dynamically loaded devices, this is no longer true. * test_devlist.c: Checks the implementation of first_device() and next_device(). 2000-04-04 Paolo Nenzi * Makefile.am: Added support for BSIM4 2000-01-16 Emmanuel Rouat * *.c : replaced all FABS macros by the 'fabs' function 2000-01-14 Paolo Nenzi * Added bsim3v1 and bsim3v2 directories. They containthe old bsim3 models V3.2 and V3.1. This models are still used in commercial simulators and some components libraries relies upon them. tmpk8ny_4pz/src/spicelib/devices/asrc/0000755000175000017500000000000013546075722020113 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/asrc/asrcconv.c0000644000175000017500000000326113546075722022077 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Kanwar Jit Singh **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "asrcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int ASRCconvTest(GENmodel *inModel, CKTcircuit *ckt) { ASRCmodel *model = (ASRCmodel *) inModel; ASRCinstance *here; int i; double diff; double prev; double tol; double rhs; for (; model; model = ASRCnextModel(model)) { for (here = ASRCinstances(model); here; here = ASRCnextInstance(here)) { i = here->ASRCtree->numVars; if (asrc_nvals < i) { asrc_nvals = i; asrc_vals = TREALLOC(double, asrc_vals, i); asrc_derivs = TREALLOC(double, asrc_derivs, i); } for (i = 0; i < here->ASRCtree->numVars; i++) asrc_vals[i] = ckt->CKTrhsOld[here->ASRCvars[i]]; if (here->ASRCtree->IFeval(here->ASRCtree, ckt->CKTgmin, &rhs, asrc_vals, asrc_derivs) != OK) return(E_BADPARM); prev = here->ASRCprev_value; diff = fabs(prev - rhs); if (here->ASRCtype == ASRC_VOLTAGE) tol = ckt->CKTreltol * MAX(fabs(rhs), fabs(prev)) + ckt->CKTvoltTol; else tol = ckt->CKTreltol * MAX(fabs(rhs), fabs(prev)) + ckt->CKTabstol; if (diff > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/asrc/asrcfbr.c0000644000175000017500000000172013546075722021701 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Kanwar Jit Singh **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "asrcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int ASRCfindBr(CKTcircuit *ckt, GENmodel *inputModel, IFuid name) { ASRCmodel *model = (ASRCmodel*) inputModel; ASRCinstance *here; int error; CKTnode *tmp; for (; model; model = ASRCnextModel(model)) for (here = ASRCinstances(model); here; here = ASRCnextInstance(here)) if (here->ASRCname == name) { if (here->ASRCbranch == 0) { error = CKTmkCur(ckt, &tmp, here->ASRCname, "branch"); if (error) return(error); here->ASRCbranch = tmp->number; } return(here->ASRCbranch); } return(0); } tmpk8ny_4pz/src/spicelib/devices/asrc/Makefile.am0000644000175000017500000000071013546075722022145 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libasrc.la libasrc_la_SOURCES = \ asrc.c \ asrcacld.c \ asrcask.c \ asrcconv.c \ asrcdefs.h \ asrcdel.c \ asrcdest.c \ asrcext.h \ asrcfbr.c \ asrcitf.h \ asrcinit.c \ asrcinit.h \ asrcload.c \ asrcpar.c \ asrcpzld.c \ asrcset.c \ asrctemp.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/asrc/asrcitf.h0000644000175000017500000000027013546075722021716 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_ASRC #define DEV_ASRC extern SPICEdev *get_asrc_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/asrc/asrcask.c0000644000175000017500000000346313546075722021714 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Kanwar Jit Singh **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "asrcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* * This routine gives access to the internal device parameters * of Current Controlled Voltage Source */ int ASRCask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFvalue *select) { ASRCinstance *here = (ASRCinstance*) instPtr; NG_IGNORE(select); switch(which) { case ASRC_TEMP: value->rValue = here->ASRCtemp - CONSTCtoK; return(OK); case ASRC_DTEMP: value->rValue = here->ASRCdtemp; return(OK); case ASRC_TC1: value->rValue = here->ASRCtc1; return(OK); case ASRC_TC2: value->rValue = here->ASRCtc2; return(OK); case ASRC_CURRENT: value->tValue = (here->ASRCtype == ASRC_CURRENT) ? here->ASRCtree : NULL; return(OK); case ASRC_VOLTAGE: value->tValue = (here->ASRCtype == ASRC_VOLTAGE) ? here->ASRCtree : NULL; return(OK); case ASRC_POS_NODE: value->iValue = here->ASRCposNode; return(OK); case ASRC_NEG_NODE: value->iValue = here->ASRCnegNode; return(OK); case ASRC_OUTPUTCURRENT: if (here->ASRCtype == ASRC_VOLTAGE) value->rValue = ckt->CKTrhsOld[here->ASRCbranch]; else value->rValue = here->ASRCprev_value; return(OK); case ASRC_OUTPUTVOLTAGE: value->rValue = ckt->CKTrhsOld[here->ASRCposNode] - ckt->CKTrhsOld[here->ASRCnegNode]; return(OK); default: return(E_BADPARM); } } tmpk8ny_4pz/src/spicelib/devices/asrc/asrcset.c0000644000175000017500000001102413546075722021721 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Kanwar Jit Singh **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "asrcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define TSTALLOC(ptr, first, second) \ do { \ if ((here->ptr = SMPmakeElt(matrix, first, second)) == NULL) \ return(E_NOMEM); \ } while(0) /* load the voltage source structure with those * pointers needed later for fast matrix loading */ int ASRCsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { ASRCinstance *here; ASRCmodel *model = (ASRCmodel*) inModel; int error, i, j; CKTnode *tmp; NG_IGNORE(states); for (; model; model = ASRCnextModel(model)) { for (here = ASRCinstances(model); here; here=ASRCnextInstance(here)) { if (!here->ASRCtree) return E_PARMVAL; if (here->ASRCtype == ASRC_VOLTAGE) if (here->ASRCposNode == here->ASRCnegNode) { SPfrontEnd->IFerrorf(ERR_FATAL, "instance %s is a shorted ASRC", here->ASRCname); return(E_UNSUPP); } if (!here->ASRCtc1Given) here->ASRCtc1 = 0.0; if (!here->ASRCtc2Given) here->ASRCtc2 = 0.0; if (!here->ASRCreciproctcGiven) here->ASRCreciproctc = 0; switch (here->ASRCtype) { case ASRC_VOLTAGE: j = 4 + here->ASRCtree->numVars; break; case ASRC_CURRENT: j = 2 * here->ASRCtree->numVars; break; default: return (E_BADPARM); } here->ASRCposPtr = TMALLOC(double *, j); here->ASRCvars = TMALLOC(int, here->ASRCtree->numVars); here->ASRCacValues = TMALLOC(double, here->ASRCtree->numVars + 1); /* For each controlling variable set the entries in the vector of the positions of the SMP */ j = 0; if (here->ASRCtype == ASRC_VOLTAGE) { if (here->ASRCbranch == 0) { error = CKTmkCur(ckt, &tmp, here->ASRCname, "branch"); if (error) return(error); here->ASRCbranch = tmp->number; } TSTALLOC(ASRCposPtr[j++], here->ASRCposNode, here->ASRCbranch); TSTALLOC(ASRCposPtr[j++], here->ASRCnegNode, here->ASRCbranch); TSTALLOC(ASRCposPtr[j++], here->ASRCbranch, here->ASRCnegNode); TSTALLOC(ASRCposPtr[j++], here->ASRCbranch, here->ASRCposNode); } for (i = 0; i < here->ASRCtree->numVars; i++) { int column; switch (here->ASRCtree->varTypes[i]) { case IF_INSTANCE: column = CKTfndBranch(ckt, here->ASRCtree->vars[i].uValue); if (column == 0) { SPfrontEnd->IFerrorf(ERR_FATAL, "%s: unknown controlling source %s", here->ASRCname, here->ASRCtree->vars[i].uValue); return(E_BADPARM); } break; case IF_NODE: column = here->ASRCtree->vars[i].nValue->number; break; default: return (E_BADPARM); } here->ASRCvars[i] = column; if (here->ASRCtype == ASRC_VOLTAGE) { TSTALLOC(ASRCposPtr[j++], here->ASRCbranch, column); } else { TSTALLOC(ASRCposPtr[j++], here->ASRCposNode, column); TSTALLOC(ASRCposPtr[j++], here->ASRCnegNode, column); } } } } return(OK); } int ASRCunsetup(GENmodel *inModel, CKTcircuit *ckt) { ASRCmodel *model = (ASRCmodel *) inModel; ASRCinstance *here; for (; model; model = ASRCnextModel(model)) for (here = ASRCinstances(model); here; here = ASRCnextInstance(here)) { if (here->ASRCbranch > 0) CKTdltNNum(ckt, here->ASRCbranch); here->ASRCbranch = 0; FREE(here->ASRCposPtr); FREE(here->ASRCvars); FREE(here->ASRCacValues); } return OK; } tmpk8ny_4pz/src/spicelib/devices/asrc/asrcpzld.c0000644000175000017500000000525313546075722022106 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Kanwar Jit Singh **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "asrcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/complex.h" /* actually load the current voltage value into the * sparse matrix previously provided */ int ASRCpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { ASRCmodel *model = (ASRCmodel*) inModel; ASRCinstance *here; double value; int i, j; double difference; double factor; NG_IGNORE(s); for (; model; model = ASRCnextModel(model)) { for (here = ASRCinstances(model); here; here = ASRCnextInstance(here)) { difference = (here->ASRCtemp + here->ASRCdtemp) - 300.15; factor = 1.0 + here->ASRCtc1 * difference + here->ASRCtc2 * difference * difference; if (here->ASRCreciproctc == 1) factor = 1 / factor; j = 0; /* Get the function evaluated and the derivatives too */ i = here->ASRCtree->numVars; if (asrc_nvals < i) { asrc_nvals = i; asrc_vals = TREALLOC(double, asrc_vals, i); asrc_derivs = TREALLOC(double, asrc_derivs, i); } /* Fill the vector of values from the previous solution */ for (i = 0; i < here->ASRCtree->numVars; i++) if (here->ASRCtree->varTypes[i] == IF_INSTANCE) { int branch = CKTfndBranch(ckt, here->ASRCtree->vars[i].uValue); asrc_vals[i] = *(ckt->CKTrhsOld + branch); } else { int node_num = (here->ASRCtree->vars[i].nValue) -> number; asrc_vals[i] = *(ckt->CKTrhsOld + node_num); } if (here->ASRCtree->IFeval(here->ASRCtree, ckt->CKTgmin, &value, asrc_vals, asrc_derivs) != OK) return(E_BADPARM); if (here->ASRCtype == ASRC_VOLTAGE) { *(here->ASRCposPtr[j++]) += 1.0; *(here->ASRCposPtr[j++]) -= 1.0; *(here->ASRCposPtr[j++]) -= 1.0; *(here->ASRCposPtr[j++]) += 1.0; for (i = 0; i < here->ASRCtree->numVars; i++) *(here->ASRCposPtr[j++]) -= asrc_derivs[i] / factor; } else { for (i = 0; i < here->ASRCtree->numVars; i++) { *(here->ASRCposPtr[j++]) += asrc_derivs[i] / factor; *(here->ASRCposPtr[j++]) -= asrc_derivs[i] / factor; } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/asrc/asrcacld.c0000644000175000017500000000401313546075722022031 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Kanwar Jit Singh **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "asrcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* * Actually load the current voltage value into the * sparse matrix previously provided. The values have * been precomputed and stored with the instance model. */ int ASRCacLoad(GENmodel *inModel, CKTcircuit *ckt) { ASRCmodel *model = (ASRCmodel*) inModel; ASRCinstance *here; int i, j; double *derivs; double difference; double factor; NG_IGNORE(ckt); for (; model; model = ASRCnextModel(model)) { for (here = ASRCinstances(model); here; here = ASRCnextInstance(here)) { difference = (here->ASRCtemp + here->ASRCdtemp) - 300.15; factor = 1.0 + here->ASRCtc1 * difference + here->ASRCtc2 * difference * difference; if (here->ASRCreciproctc == 1) factor = 1 / factor; /* * Get the function and its derivatives from the * field in the instance structure. The field is * an array of doubles holding the rhs, and the * entries of the jacobian. */ j = 0; derivs = here->ASRCacValues; if (here->ASRCtype == ASRC_VOLTAGE) { *(here->ASRCposPtr[j++]) += 1.0; *(here->ASRCposPtr[j++]) -= 1.0; *(here->ASRCposPtr[j++]) -= 1.0; *(here->ASRCposPtr[j++]) += 1.0; for (i = 0; i < here->ASRCtree->numVars; i++) *(here->ASRCposPtr[j++]) -= derivs[i] * factor; } else { for (i = 0; i < here->ASRCtree->numVars; i++) { *(here->ASRCposPtr[j++]) += derivs[i] * factor; *(here->ASRCposPtr[j++]) -= derivs[i] * factor; } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/asrc/asrcext.h0000644000175000017500000000140413546075722021734 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ extern int ASRCask(CKTcircuit *, GENinstance *, int, IFvalue *, IFvalue*); extern int ASRCconvTest(GENmodel *, CKTcircuit *); extern int ASRCdelete(GENinstance *); extern void ASRCdestroy(void); extern int ASRCfindBr(CKTcircuit *, GENmodel *, IFuid); extern int ASRCload(GENmodel *, CKTcircuit *); extern int ASRCparam(int, IFvalue *, GENinstance *, IFvalue *); extern int ASRCpzLoad(GENmodel *, CKTcircuit *, SPcomplex *); extern int ASRCacLoad(GENmodel *, CKTcircuit *); extern int ASRCsetup(SMPmatrix *, GENmodel *, CKTcircuit *, int *); extern int ASRCunsetup(GENmodel *, CKTcircuit *); extern int ASRCtemp(GENmodel *, CKTcircuit *); tmpk8ny_4pz/src/spicelib/devices/asrc/asrcdefs.h0000644000175000017500000000575613546075722022073 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #ifndef ASRC #define ASRC #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "ngspice/complex.h" /* * structures to describe Arbitrary sources */ /* information to describe a single instance */ typedef struct sASRCinstance { struct GENinstance gen; #define ASRCmodPtr(inst) ((struct sASRCmodel *)((inst)->gen.GENmodPtr)) #define ASRCnextInstance(inst) ((struct sASRCinstance *)((inst)->gen.GENnextInstance)) #define ASRCname gen.GENname #define ASRCstates gen.GENstate const int ASRCposNode; /* number of positive node of source */ const int ASRCnegNode; /* number of negative node of source */ int ASRCtype; /* Whether source is voltage or current */ int ASRCbranch; /* number of branch equation added for v source */ IFparseTree *ASRCtree; /* The parse tree */ int *ASRCvars; /* indices of the controlling nodes/branches */ double ASRCtemp; /* temperature at which this resistor operates */ double ASRCdtemp; /* delta-temperature of a particular instance */ double ASRCtc1; /* first temperature coefficient of resistors */ double ASRCtc2; /* second temperature coefficient of resistors */ int ASRCreciproctc; /* Flag to calculate reciprocal temperature behaviour */ double **ASRCposPtr; /* pointer to pointers of the elements * in the sparce matrix */ double ASRCprev_value; /* Previous value for the convergence test */ double *ASRCacValues; /* Store rhs and derivatives for ac anal */ unsigned ASRCtempGiven : 1; /* indicates temperature specified */ unsigned ASRCdtempGiven : 1; /* indicates delta-temp specified */ unsigned ASRCtc1Given : 1; /* indicates tc1 parameter specified */ unsigned ASRCtc2Given : 1; /* indicates tc2 parameter specified */ unsigned ASRCreciproctcGiven : 1; /* indicates reciproctc flag parameter specified */ } ASRCinstance; #define ASRCvOld ASRCstates #define ASRCcontVOld ASRCstates + 1 /* per model data */ typedef struct sASRCmodel { /* model structure for a source */ struct GENmodel gen; #define ASRCmodType gen.GENmodType #define ASRCnextModel(inst) ((struct sASRCmodel *)((inst)->gen.GENnextModel)) #define ASRCinstances(inst) ((ASRCinstance *)((inst)->gen.GENinstances)) #define ASRCmodName gen.GENmodName } ASRCmodel; /* device parameters */ enum { ASRC_VOLTAGE = 1, ASRC_CURRENT, ASRC_POS_NODE, ASRC_NEG_NODE, ASRC_PARSE_TREE, ASRC_OUTPUTVOLTAGE, ASRC_OUTPUTCURRENT, ASRC_TEMP, ASRC_DTEMP, ASRC_TC1, ASRC_TC2, ASRC_RTC, }; /* module-wide variables */ extern double *asrc_vals, *asrc_derivs; extern int asrc_nvals; /* model parameters */ /* device questions */ /* model questions */ #include "asrcext.h" #endif /*ASRC*/ tmpk8ny_4pz/src/spicelib/devices/asrc/asrcdest.c0000644000175000017500000000046113546075722022070 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Kanwar Jit Singh **********/ #include "ngspice/ngspice.h" #include "asrcdefs.h" #include "ngspice/suffix.h" void ASRCdestroy(void) { FREE(asrc_vals); FREE(asrc_derivs); asrc_nvals = 0; } tmpk8ny_4pz/src/spicelib/devices/asrc/asrcinit.h0000644000175000017500000000030013546075722022071 0ustar carstencarsten#ifndef _ASRCINIT_H #define _ASRCINIT_H extern IFparm ASRCpTable[]; extern char *ASRCnames[]; extern int ASRCpTSize; extern int ASRCnSize; extern int ASRCiSize; extern int ASRCmSize; #endif tmpk8ny_4pz/src/spicelib/devices/asrc/asrcdel.c0000644000175000017500000000076313546075722021702 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Kanwar Jit Singh **********/ #include "ngspice/ngspice.h" #include "asrcdefs.h" #include "ngspice/sperror.h" #include "ngspice/inpdefs.h" #include "ngspice/suffix.h" int ASRCdelete(GENinstance *gen_inst) { ASRCinstance *inst = (ASRCinstance *) gen_inst; INPfreeTree(inst->ASRCtree); FREE(inst->ASRCacValues); FREE(inst->ASRCposPtr); FREE(inst->ASRCvars); return OK; } tmpk8ny_4pz/src/spicelib/devices/asrc/asrctemp.c0000644000175000017500000000173313546075722022101 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "asrcdefs.h" #include "ngspice/sperror.h" int ASRCtemp(GENmodel *inModel, CKTcircuit *ckt) { ASRCmodel *model = (ASRCmodel *) inModel; ASRCinstance *here; for (; model; model = ASRCnextModel(model)) { for (here = ASRCinstances(model); here; here = ASRCnextInstance(here)) { /* Default Value Processing for Source Instance */ if (!here->ASRCtempGiven) { here->ASRCtemp = ckt->CKTtemp; if (!here->ASRCdtempGiven) here->ASRCdtemp = 0.0; } else { here->ASRCdtemp = 0.0; if (here->ASRCdtempGiven) printf("%s: Instance temperature specified, dtemp ignored\n", here->ASRCname); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/asrc/asrcpar.c0000644000175000017500000000206713546075722021717 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Kanwar Jit Singh **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "asrcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int ASRCparam(int param, IFvalue *value, GENinstance *fast, IFvalue *select) { ASRCinstance *here = (ASRCinstance*) fast; NG_IGNORE(select); switch (param) { case ASRC_VOLTAGE: here->ASRCtype = ASRC_VOLTAGE; here->ASRCtree = value->tValue; break; case ASRC_CURRENT: here->ASRCtype = ASRC_CURRENT; here->ASRCtree = value->tValue; break; case ASRC_TC1: here->ASRCtc1 = value->rValue; here->ASRCtc1Given = TRUE; break; case ASRC_TC2: here->ASRCtc2 = value->rValue; here->ASRCtc2Given = TRUE; break; case ASRC_RTC: here->ASRCreciproctc = value->iValue; here->ASRCreciproctcGiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/asrc/asrcload.c0000644000175000017500000000631713546075722022056 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Kanwar Jit Singh **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "asrcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int asrc_nvals = 0; double *asrc_vals = NULL; double *asrc_derivs = NULL; /* actually load the current voltage value into the * sparse matrix previously provided */ int ASRCload(GENmodel *inModel, CKTcircuit *ckt) { ASRCmodel *model = (ASRCmodel*) inModel; ASRCinstance *here; int i, j; double rhs; double difference; double factor; for (; model; model = ASRCnextModel(model)) { for (here = ASRCinstances(model); here; here=ASRCnextInstance(here)) { difference = (here->ASRCtemp + here->ASRCdtemp) - 300.15; factor = 1.0 + here->ASRCtc1 * difference + here->ASRCtc2 * difference * difference; if (here->ASRCreciproctc == 1) factor = 1 / factor; /* * Get the function and its derivatives evaluated */ i = here->ASRCtree->numVars; if (asrc_nvals < i) { asrc_nvals = i; asrc_vals = TREALLOC(double, asrc_vals, i); asrc_derivs = TREALLOC(double, asrc_derivs, i); } j = 0; /* * Fill the vector of values from the previous solution */ for (i = 0; i < here->ASRCtree->numVars; i++) asrc_vals[i] = ckt->CKTrhsOld[here->ASRCvars[i]]; if (here->ASRCtree->IFeval(here->ASRCtree, ckt->CKTgmin, &rhs, asrc_vals, asrc_derivs) != OK) return(E_BADPARM); /* The convergence test */ here->ASRCprev_value = rhs; /* The ac load precomputation and storage */ if (ckt->CKTmode & MODEINITSMSIG) for (i = 0; i < here->ASRCtree->numVars; i++) here->ASRCacValues[i] = asrc_derivs[i]; if (here->ASRCtype == ASRC_VOLTAGE) { *(here->ASRCposPtr[j++]) += 1.0; *(here->ASRCposPtr[j++]) -= 1.0; *(here->ASRCposPtr[j++]) -= 1.0; *(here->ASRCposPtr[j++]) += 1.0; for (i = 0; i < here->ASRCtree->numVars; i++) { rhs -= (asrc_vals[i] * asrc_derivs[i]); *(here->ASRCposPtr[j++]) -= asrc_derivs[i] * factor; } ckt->CKTrhs[here->ASRCbranch] += factor * rhs; } else { for (i = 0; i < here->ASRCtree->numVars; i++) { rhs -= (asrc_vals[i] * asrc_derivs[i]); *(here->ASRCposPtr[j++]) += asrc_derivs[i] * factor; *(here->ASRCposPtr[j++]) -= asrc_derivs[i] * factor; } ckt->CKTrhs[here->ASRCposNode] -= factor * rhs; ckt->CKTrhs[here->ASRCnegNode] += factor * rhs; } /* Store the rhs for small signal analysis */ if (ckt->CKTmode & MODEINITSMSIG) here->ASRCacValues[here->ASRCtree->numVars] = factor * rhs; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/asrc/asrc.c0000644000175000017500000000251313546075722021210 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Kanwar Jit Singh **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/devdefs.h" #include "asrcdefs.h" #include "ngspice/suffix.h" /* Arbitrary source */ IFparm ASRCpTable[] = { /* parameters */ IP("i", ASRC_CURRENT, IF_PARSETREE, "Current source"), IP("v", ASRC_VOLTAGE, IF_PARSETREE, "Voltage source"), IOPZU("temp", ASRC_TEMP, IF_REAL, "Instance operating temperature"), IOPZ("dtemp", ASRC_DTEMP, IF_REAL, "Instance temperature difference with the rest of the circuit"), IOPU("tc1", ASRC_TC1, IF_REAL, "First order temp. coefficient"), IOPU("tc2", ASRC_TC2, IF_REAL, "Second order temp. coefficient"), IOPU("reciproctc", ASRC_RTC, IF_INTEGER, "Flag to calculate reciprocal temperature behaviour"), OP("i", ASRC_OUTPUTCURRENT, IF_REAL, "Current through source"), OP("v", ASRC_OUTPUTVOLTAGE, IF_REAL, "Voltage across source"), OP("pos_node", ASRC_POS_NODE, IF_INTEGER, "Positive Node"), OP("neg_node", ASRC_NEG_NODE, IF_INTEGER, "Negative Node") }; char *ASRCnames[] = { "src+", "src-" }; int ASRCnSize = NUMELEMS(ASRCnames); int ASRCpTSize = NUMELEMS(ASRCpTable); int ASRCmPTSize = 0; int ASRCiSize = sizeof(ASRCinstance); int ASRCmSize = sizeof(ASRCmodel); tmpk8ny_4pz/src/spicelib/devices/asrc/asrcinit.c0000644000175000017500000000312313546075722022072 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "asrcitf.h" #include "asrcext.h" #include "asrcinit.h" SPICEdev ASRCinfo = { .DEVpublic = { .name = "ASRC", .description = "Arbitrary Source ", .terms = &ASRCnSize, .numNames = &ASRCnSize, .termNames = ASRCnames, .numInstanceParms = &ASRCpTSize, .instanceParms = ASRCpTable, .numModelParms = NULL, .modelParms = NULL, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = ASRCparam, .DEVmodParam = NULL, .DEVload = ASRCload, .DEVsetup = ASRCsetup, .DEVunsetup = ASRCunsetup, .DEVpzSetup = ASRCsetup, .DEVtemperature = ASRCtemp, .DEVtrunc = NULL, .DEVfindBranch = ASRCfindBr, .DEVacLoad = ASRCacLoad, .DEVaccept = NULL, .DEVdestroy = ASRCdestroy, .DEVmodDelete = NULL, .DEVdelete = ASRCdelete, .DEVsetic = NULL, .DEVask = ASRCask, .DEVmodAsk = NULL, .DEVpzLoad = ASRCpzLoad, .DEVconvTest = ASRCconvTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &ASRCiSize, .DEVmodSize = &ASRCmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_asrc_info(void) { return &ASRCinfo; } tmpk8ny_4pz/src/spicelib/devices/dio/0000755000175000017500000000000013546075722017736 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/dio/diodefs.h0000644000175000017500000003324113546075722021527 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified by Paolo Nenzi 2003 and Dietmar Warning 2012 **********/ #ifndef DIO #define DIO #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" /* data structures used to describe diodes */ /* indices to array of diode noise sources */ enum { DIORSNOIZ = 0, DIOIDNOIZ, DIOFLNOIZ, DIOTOTNOIZ, /* finally, the number of noise sources */ DIONSRCS }; /* information needed per instance */ typedef struct sDIOinstance { struct GENinstance gen; #define DIOmodPtr(inst) ((struct sDIOmodel *)((inst)->gen.GENmodPtr)) #define DIOnextInstance(inst) ((struct sDIOinstance *)((inst)->gen.GENnextInstance)) #define DIOname gen.GENname #define DIOstate gen.GENstate const int DIOposNode; /* number of positive node of diode */ const int DIOnegNode; /* number of negative node of diode */ int DIOposPrimeNode; /* number of positive prime node of diode */ double *DIOposPosPrimePtr; /* pointer to sparse matrix at * (positive,positive prime) */ double *DIOnegPosPrimePtr; /* pointer to sparse matrix at * (negative,positive prime) */ double *DIOposPrimePosPtr; /* pointer to sparse matrix at * (positive prime,positive) */ double *DIOposPrimeNegPtr; /* pointer to sparse matrix at * (positive prime,negative) */ double *DIOposPosPtr; /* pointer to sparse matrix at * (positive,positive) */ double *DIOnegNegPtr; /* pointer to sparse matrix at * (negative,negative) */ double *DIOposPrimePosPrimePtr; /* pointer to sparse matrix at * (positive prime,positive prime) */ double DIOcap; /* stores the diode capacitance */ double *DIOsens; /* stores the perturbed values of geq and ceq in ac sensitivity analyis */ int DIOsenParmNo ; /* parameter # for sensitivity use; * set equal to 0 if not a design parameter*/ unsigned DIOoff : 1; /* 'off' flag for diode */ unsigned DIOareaGiven : 1; /* flag to indicate area was specified */ unsigned DIOpjGiven : 1; /* flag to indicate perimeter was specified */ unsigned DIOwGiven : 1; /* flag to indicate width was specified */ unsigned DIOlGiven : 1; /* flag to indicate length was specified */ unsigned DIOmGiven : 1; /* flag to indicate multiplier was specified */ unsigned DIOinitCondGiven : 1; /* flag to indicate ic was specified */ unsigned DIOsenPertFlag :1; /* indictes whether the the parameter of the particular instance is to be perturbed */ unsigned DIOtempGiven : 1; /* flag to indicate temperature was specified */ unsigned DIOdtempGiven : 1; /* flag to indicate dtemp given */ double DIOarea; /* area factor for the diode */ double DIOpj; /* perimeter for the diode */ double DIOw; /* width for the diode */ double DIOl; /* length for the diode */ double DIOm; /* multiplier for the diode */ double DIOinitCond; /* initial condition */ double DIOtemp; /* temperature of the instance */ double DIOdtemp; /* delta temperature of instance */ double DIOtJctPot; /* temperature adjusted junction potential */ double DIOtJctCap; /* temperature adjusted junction capacitance */ double DIOtJctSWPot; /* temperature adjusted sidewall junction potential */ double DIOtJctSWCap; /* temperature adjusted sidewall junction capacitance */ double DIOtTransitTime; /* temperature adjusted transit time */ double DIOtGradingCoeff; /* temperature adjusted grading coefficient (MJ) */ double DIOtConductance; /* temperature adjusted series conductance */ double DIOtDepCap; /* temperature adjusted transition point in */ /* the curve matching (Fc * Vj ) */ double DIOtDepSWCap; /* temperature adjusted transition point in */ /* the curve matching (Fcs * Vjs ) */ double DIOtSatCur; /* temperature adjusted saturation current */ double DIOtSatSWCur; /* temperature adjusted side wall saturation current */ double DIOtTunSatCur; /* tunneling saturation current */ double DIOtTunSatSWCur; /* sidewall tunneling saturation current */ double DIOtVcrit; /* temperature adjusted V crit */ double DIOtF1; /* temperature adjusted f1 */ double DIOtBrkdwnV; /* temperature adjusted breakdown voltage */ double DIOtF2; /* coeff. for capacitance equation precomputation */ double DIOtF3; /* coeff. for capacitance equation precomputation */ double DIOtF2SW; /* coeff. for capacitance equation precomputation */ double DIOtF3SW; /* coeff. for capacitance equation precomputation */ double DIOforwardKneeCurrent; /* Forward Knee current */ double DIOreverseKneeCurrent; /* Reverse Knee current */ double DIOjunctionCap; /* geometry adjusted junction capacitance */ double DIOjunctionSWCap; /* geometry adjusted junction sidewall capacitance */ double DIOtRecSatCur; /* temperature adjusted recombination saturation current */ /* * naming convention: * x = vdiode */ /* the following are relevant to s.s. sinusoidal distortion analysis */ #define DIONDCOEFFS 6 #ifndef NODISTO double DIOdCoeffs[DIONDCOEFFS]; #else /* NODISTO */ double *DIOdCoeffs; #endif /* NODISTO */ #ifndef CONFIG #define id_x2 DIOdCoeffs[0] #define id_x3 DIOdCoeffs[1] #define cdif_x2 DIOdCoeffs[2] #define cdif_x3 DIOdCoeffs[3] #define cjnc_x2 DIOdCoeffs[4] #define cjnc_x3 DIOdCoeffs[5] #endif #ifndef NONOISE double DIOnVar[NSTATVARS][DIONSRCS]; #else /* NONOISE */ double **DIOnVar; #endif /* NONOISE */ } DIOinstance ; #define DIOsenGeq DIOsens /* stores the perturbed values of geq */ #define DIOsenCeq DIOsens + 3 /* stores the perturbed values of ceq */ #define DIOdphidp DIOsens + 6 #define DIOvoltage DIOstate #define DIOcurrent DIOstate+1 #define DIOconduct DIOstate+2 #define DIOcapCharge DIOstate+3 #define DIOcapCurrent DIOstate+4 #define DIOnumStates 5 #define DIOsensxp DIOstate+5 /* charge sensitivities and their derivatives. * +6 for the derivatives - pointer to the * beginning of the array */ #define DIOnumSenStates 2 /* per model data */ typedef struct sDIOmodel { /* model structure for a diode */ struct GENmodel gen; #define DIOmodType gen.GENmodType #define DIOnextModel(inst) ((struct sDIOmodel *)((inst)->gen.GENnextModel)) #define DIOinstances(inst) ((DIOinstance *)((inst)->gen.GENinstances)) #define DIOmodName gen.GENmodName unsigned DIOlevelGiven : 1; unsigned DIOsatCurGiven : 1; unsigned DIOsatSWCurGiven : 1; unsigned DIOresistGiven : 1; unsigned DIOresistTemp1Given : 1; unsigned DIOresistTemp2Given : 1; unsigned DIOemissionCoeffGiven : 1; unsigned DIOswEmissionCoeffGiven : 1; unsigned DIObrkdEmissionCoeffGiven : 1; unsigned DIOtransitTimeGiven : 1; unsigned DIOtranTimeTemp1Given : 1; unsigned DIOtranTimeTemp2Given : 1; unsigned DIOjunctionCapGiven : 1; unsigned DIOjunctionPotGiven : 1; unsigned DIOgradingCoeffGiven : 1; unsigned DIOgradCoeffTemp1Given : 1; unsigned DIOgradCoeffTemp2Given : 1; unsigned DIOjunctionSWCapGiven : 1; unsigned DIOjunctionSWPotGiven : 1; unsigned DIOgradingSWCoeffGiven : 1; unsigned DIOforwardKneeCurrentGiven : 1; unsigned DIOreverseKneeCurrentGiven : 1; unsigned DIOtlevGiven : 1; unsigned DIOtlevcGiven : 1; unsigned DIOactivationEnergyGiven : 1; unsigned DIOsaturationCurrentExpGiven : 1; unsigned DIOctaGiven : 1; unsigned DIOctpGiven : 1; unsigned DIOtpbGiven : 1; unsigned DIOtphpGiven : 1; unsigned DIOdepletionCapCoeffGiven : 1; unsigned DIOdepletionSWcapCoeffGiven :1; unsigned DIObreakdownVoltageGiven : 1; unsigned DIObreakdownCurrentGiven : 1; unsigned DIOtcvGiven : 1; unsigned DIOnomTempGiven : 1; unsigned DIOfNcoefGiven : 1; unsigned DIOfNexpGiven : 1; unsigned DIOareaGiven : 1; unsigned DIOpjGiven : 1; unsigned DIOtunSatCurGiven : 1; unsigned DIOtunSatSWCurGiven : 1; unsigned DIOtunEmissionCoeffGiven : 1; unsigned DIOtunSaturationCurrentExpGiven : 1; unsigned DIOtunEGcorrectionFactorGiven : 1; unsigned DIOfv_maxGiven : 1; unsigned DIObv_maxGiven : 1; unsigned DIOrecSatCurGiven : 1; unsigned DIOrecEmissionCoeffGiven : 1; int DIOlevel; /* level selector */ double DIOsatCur; /* saturation current */ double DIOsatSWCur; /* Sidewall saturation current */ double DIOresist; /* ohmic series resistance */ double DIOresistTemp1; /* series resistance 1st order temp. coeff. */ double DIOresistTemp2; /* series resistance 2nd order temp. coeff. */ double DIOconductance; /* conductance corresponding to ohmic R */ double DIOemissionCoeff; /* emission coefficient (N) */ double DIOswEmissionCoeff; /* Sidewall emission coefficient (NS) */ double DIObrkdEmissionCoeff; /* Breakdown emission coefficient (NBV) */ double DIOtransitTime; /* transit time (TT) */ double DIOtranTimeTemp1; /* transit time 1st order coefficient */ double DIOtranTimeTemp2; /* transit time 2nd order coefficient */ double DIOjunctionCap; /* Junction Capacitance (Cj0) */ double DIOjunctionPot; /* Junction Potential (Vj) or (PB) */ double DIOgradingCoeff; /* grading coefficient (m) or (mj) */ double DIOgradCoeffTemp1; /* grading coefficient 1st order temp. coeff.*/ double DIOgradCoeffTemp2; /* grading coefficient 2nd order temp. coeff.*/ double DIOjunctionSWCap; /* Sidewall Junction Capacitance (Cjsw) */ double DIOjunctionSWPot; /* Sidewall Junction Potential (Vjsw) or (PBSW) */ double DIOgradingSWCoeff; /* Sidewall grading coefficient (mjsw) */ double DIOforwardKneeCurrent; /* Forward Knee current (IKF) */ double DIOreverseKneeCurrent; /* Reverse Knee current (IKR) */ int DIOtlev; /* Diode temperature equation selector */ int DIOtlevc; /* Diode temperature equation selector */ double DIOactivationEnergy; /* activation energy (EG) */ double DIOsaturationCurrentExp; /* Saturation current exponential (XTI) */ double DIOcta; /* Area junction temperature coefficient */ double DIOctp; /* Perimeter junction temperature coefficient */ double DIOtpb; /* Area junction potential temperature coefficient */ double DIOtphp; /* Perimeter junction potential temperature coefficient */ double DIOdepletionCapCoeff; /* Depletion Cap fraction coefficient (FC)*/ double DIOdepletionSWcapCoeff; /* Depletion sw-Cap fraction coefficient (FCS)*/ double DIObreakdownVoltage; /* Voltage at reverse breakdown */ double DIObreakdownCurrent; /* Current at above voltage */ double DIOtcv; /* Reverse breakdown voltage temperature coefficient */ double DIOarea; /* area factor for the diode */ double DIOpj; /* perimeter for the diode */ double DIOnomTemp; /* nominal temperature at which parms measured */ double DIOfNcoef; double DIOfNexp; double DIOtunSatCur; /* tunneling saturation current (JTUN) */ double DIOtunSatSWCur; /* sidewall tunneling saturation current (JTUNSW) */ double DIOtunEmissionCoeff; /* tunneling emission coefficient (NTUN) */ double DIOtunSaturationCurrentExp; /* exponent for the tunneling current temperature (XTITUN) */ double DIOtunEGcorrectionFactor; /* EG correction factor for tunneling (KEG) */ double DIOfv_max; /* maximum voltage in forward direction */ double DIObv_max; /* maximum voltage in reverse direction */ double DIOrecSatCur; /* Recombination saturation current */ double DIOrecEmissionCoeff; /* Recombination emission coefficient */ } DIOmodel; /* device parameters */ enum { DIO_AREA = 1, DIO_IC, DIO_OFF, DIO_CURRENT, DIO_VOLTAGE, DIO_CHARGE, DIO_CAPCUR, DIO_CONDUCT, DIO_AREA_SENS, DIO_POWER, DIO_TEMP, DIO_QUEST_SENS_REAL, DIO_QUEST_SENS_IMAG, DIO_QUEST_SENS_MAG, DIO_QUEST_SENS_PH, DIO_QUEST_SENS_CPLX, DIO_QUEST_SENS_DC, DIO_CAP, DIO_PJ, DIO_W, DIO_L, DIO_M, DIO_DTEMP, }; /* model parameters */ enum { DIO_MOD_LEVEL = 100, DIO_MOD_IS, DIO_MOD_RS, DIO_MOD_N, DIO_MOD_TT, DIO_MOD_CJO, DIO_MOD_VJ, DIO_MOD_M, DIO_MOD_EG, DIO_MOD_XTI, DIO_MOD_FC, DIO_MOD_BV, DIO_MOD_IBV, DIO_MOD_D, DIO_MOD_COND, DIO_MOD_TNOM, DIO_MOD_KF, DIO_MOD_AF, DIO_MOD_JSW, DIO_MOD_CJSW, DIO_MOD_VJSW, DIO_MOD_MJSW, DIO_MOD_IKF, DIO_MOD_IKR, DIO_MOD_FCS, DIO_MOD_TTT1, DIO_MOD_TTT2, DIO_MOD_TM1, DIO_MOD_TM2, DIO_MOD_TRS, DIO_MOD_TRS2, DIO_MOD_TLEV, DIO_MOD_TLEVC, DIO_MOD_CTA, DIO_MOD_CTP, DIO_MOD_TPB, DIO_MOD_TPHP, DIO_MOD_TCV, DIO_MOD_NBV, DIO_MOD_AREA, DIO_MOD_PJ, DIO_MOD_NS, DIO_MOD_JTUN, DIO_MOD_JTUNSW, DIO_MOD_NTUN, DIO_MOD_XTITUN, DIO_MOD_KEG, DIO_MOD_FV_MAX, DIO_MOD_BV_MAX, DIO_MOD_ISR, DIO_MOD_NR, }; #include "dioext.h" #endif /*DIO*/ tmpk8ny_4pz/src/spicelib/devices/dio/diosacl.c0000644000175000017500000002250013546075722021517 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ /* */ /* actually load the current ac sensitivity * information into the array previously provided */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/const.h" #include "ngspice/cktdefs.h" #include "diodefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int DIOsAcLoad(GENmodel *inModel, CKTcircuit *ckt) { DIOmodel *model = (DIOmodel*)inModel; DIOinstance *here; double SaveState[5]; int error; int i; int iparmno; int flag; double A0; double DELA; double Apert; double DELAinv; double vte; double gspr0; double geq0; double xceq0; double vspr; double ivspr; double vd; double ivd; double vdOp; double gspr; double geq; double xceq; double cspr; double icspr; double cd; double icd; double cpos0; double icpos0; double cpos; double icpos; double cposprm0; double icposprm0; double cposprm; double icposprm; double cneg0; double icneg0; double cneg; double icneg; double DvdDp; SENstruct *info; #ifdef SENSDEBUG printf("DIOsenacload\n"); #endif /* SENSDEBUG */ info = ckt->CKTsenInfo; info->SENstatus = PERTURBATION; /* loop through all the models */ for( ; model != NULL; model = DIOnextModel(model)) { /* loop through all the instances of the model */ for (here = DIOinstances(model); here != NULL ; here=DIOnextInstance(here)) { /* save the unperturbed values in the state vector */ for(i=0; i <= 4; i++) { *(SaveState + i) = *(ckt->CKTstate0 + here->DIOstate + i); } vspr = *(ckt->CKTrhsOld + here->DIOposNode) - *(ckt->CKTrhsOld + here->DIOposPrimeNode) ; ivspr = *(ckt->CKTirhsOld + here->DIOposNode) - *(ckt->CKTirhsOld + here->DIOposPrimeNode) ; vd = *(ckt->CKTrhsOld + here->DIOposPrimeNode) - *(ckt->CKTrhsOld + here->DIOnegNode) ; ivd = *(ckt->CKTirhsOld + here->DIOposPrimeNode) - *(ckt->CKTirhsOld + here->DIOnegNode) ; vdOp = *(ckt->CKTrhsOp + here->DIOposPrimeNode) - *(ckt->CKTrhsOp + here->DIOnegNode); /* without perturbation */ #ifdef SENSDEBUG printf("without perturbation \n"); #endif /* SENSDEBUG */ *(ckt->CKTstate0 + here->DIOvoltage) = vdOp; here->DIOsenPertFlag = ON; if(info->SENacpertflag == 1){ if ((error = DIOload((GENmodel*)model,ckt)) != 0) return(error); *(here->DIOsenGeq) = *(ckt->CKTstate0 + here->DIOconduct); *(here->DIOsenCeq) = *(ckt->CKTstate0 + here->DIOcapCurrent); } geq0 = *(here->DIOsenGeq); xceq0 = *(here->DIOsenCeq) * ckt->CKTomega; A0 = here->DIOarea; gspr0=here->DIOtConductance*A0; cpos0 = gspr0 * vspr; icpos0 = gspr0 * ivspr; cposprm0 = geq0 * vd - xceq0 * ivd - cpos0; icposprm0 = geq0 * ivd + xceq0 * vd - icpos0; cneg0 = - geq0 * vd + xceq0 * ivd; icneg0 = - geq0 * ivd - xceq0 * vd; #ifdef SENSDEBUG printf("gspr0 = %.7e , geq0 = %.7e ,xceq0 = %.7e\n", gspr0 ,geq0,xceq0); printf("cpos0 = %.7e + j%.7e , cneg0 = %.7e + j%.7e\n", cpos0,icpos0,cneg0,icneg0); #endif /* SENSDEBUG */ /* Perturbation of Area */ #ifdef SENSDEBUG printf("Perturbation of Area\n"); #endif /* SENSDEBUG */ if(here->DIOsenParmNo == 0) goto pertvd; DELA = info->SENpertfac * A0; Apert = A0 + DELA; DELAinv = 1.0/DELA; if(info->SENacpertflag == 1){ here->DIOarea = Apert; *(ckt->CKTstate0 + here->DIOvoltage) = vdOp; if ((error = DIOload((GENmodel*)model,ckt)) != 0) return(error); *(here->DIOsenGeq + 1) = *(ckt->CKTstate0 + here->DIOconduct); *(here->DIOsenCeq + 1)= *(ckt->CKTstate0 + here->DIOcapCurrent); here->DIOarea = A0; } gspr=here->DIOtConductance*Apert; geq = *(here->DIOsenGeq + 1); xceq = *(here->DIOsenCeq + 1) * ckt->CKTomega; flag = 0; goto load; pertvd: /* Perturbation of Diode Voltage */ #ifdef SENSDEBUG printf("Perturbation of vd\n"); #endif /* SENSDEBUG */ vte=model->DIOemissionCoeff * CONSTKoverQ * here->DIOtemp; A0 = vdOp; DELA = info->SENpertfac * vte; Apert = A0 + DELA; DELAinv = 1.0/DELA; if(info->SENacpertflag == 1){ *(ckt->CKTstate0 + here->DIOvoltage) = Apert; if ((error = DIOload((GENmodel*)model,ckt)) != 0) return(error); *(here->DIOsenGeq + 2) = *(ckt->CKTstate0 + here->DIOconduct); *(here->DIOsenCeq + 2)= *(ckt->CKTstate0 + here->DIOcapCurrent); *(ckt->CKTstate0 + here->DIOvoltage) = A0; } gspr=here->DIOtConductance*here->DIOarea; geq = *(here->DIOsenGeq + 2); xceq = *(here->DIOsenCeq + 2) * ckt->CKTomega; flag = 1; load: cspr = gspr * vspr; icspr = gspr * ivspr; cd = geq * vd - xceq * ivd; icd = geq * ivd + xceq * vd; cpos = cspr; icpos = icspr; cposprm = ( - cspr + cd ); icposprm = ( - icspr + icd ); cneg = ( - cd ); icneg = ( - icd ); #ifdef SENSDEBUG printf("gspr = %.7e , geq = %.7e , xceq = %.7e\n", gspr,geq,xceq); printf("cspr = %.7e + j%.7e , cd = %.7e + j%.7e\n", cspr,icspr,cd,icd); printf("cpos = %.7e + j%.7e , cposprm = %.7e + j%.7e", cpos,icpos,cposprm,icposprm); printf(", cneg = %.7e + %.7e\n",cneg,icneg); printf("senpprm = %.7e " ,info->SEN_Sap[here->DIOposPrimeNode][here->DIOsenParmNo]); printf("senneg = %.7e \n", info->SEN_Sap[here->DIOnegNode][here->DIOsenParmNo]); printf("A0 = %.7e , Apert = %.7e ,factor = %.7e\n,vte = %.7e", A0 ,Apert,DELAinv,vte); #endif /* SENSDEBUG */ for(iparmno = 1;iparmno<=info->SENparms;iparmno++){ /* calculate the DC sensitivities of operating points */ DvdDp = info->SEN_Sap[here->DIOposPrimeNode][iparmno] - info->SEN_Sap[here->DIOnegNode][iparmno]; if(flag == 0){ if (here->DIOsenParmNo != iparmno) continue; /* area : so no DC sensitivity term involved */ DvdDp =1; } /* load the RHS matrix */ if(here->DIOposNode != here->DIOposPrimeNode){ /* DcposDp */ *(info->SEN_RHS[here->DIOposNode] + iparmno) -= (cpos - cpos0) * DELAinv * DvdDp ; /* DicposDp */ *(info->SEN_iRHS[here->DIOposNode] + iparmno) -= (icpos - icpos0) * DELAinv * DvdDp ; } /* DcposprmDp */ *(info->SEN_RHS[here->DIOposPrimeNode] + iparmno) -= (cposprm - cposprm0) * DELAinv * DvdDp ; /* DicposprmDp */ *(info->SEN_iRHS[here->DIOposPrimeNode] + iparmno) -= (icposprm - icposprm0) * DELAinv * DvdDp ; /* DcnegDp */ *(info->SEN_RHS[here->DIOnegNode] + iparmno) -= (cneg - cneg0) * DELAinv * DvdDp ; /* DicnegDp */ *(info->SEN_iRHS[here->DIOnegNode] + iparmno) -= (icneg - icneg0) * DELAinv * DvdDp ; #ifdef SENSDEBUG printf("senpos = %.7e + j%.7e ", *(info->SEN_RHS[here->DIOposNode] + iparmno), *(info->SEN_iRHS[here->DIOposNode] + iparmno)); printf("senposprm = %.7e + j%.7e ", *(info->SEN_RHS[here->DIOposPrimeNode] + iparmno), *(info->SEN_iRHS[here->DIOposPrimeNode] + iparmno)); printf("senneg = %.7e + j%.7e ", *(info->SEN_RHS[here->DIOnegNode] + iparmno), *(info->SEN_iRHS[here->DIOnegNode] + iparmno)); printf("flag = %d ,DvdDp = %.7e ,iparmno = %d,senparmno = %d\n" ,flag,DvdDp,iparmno,here->DIOsenParmNo); #endif /* SENSDEBUG */ } if(!flag) goto pertvd; /* put the unperturbed values back into the state vector */ for(i=0; i <= 4; i++) { *(ckt->CKTstate0 + here->DIOstate + i) = *(SaveState + i); } here->DIOsenPertFlag = OFF; } } info->SENstatus = NORMAL; #ifdef SENSDEBUG printf("DIOsenacload end \n"); #endif /* SENSDEBUG */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/dio/dioparam.c0000644000175000017500000000351513546075722021702 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified by Paolo Nenzi 2003 and Dietmar Warning 2012 **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "diodefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/fteext.h" /* ARGSUSED */ int DIOparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { double scale; DIOinstance *here = (DIOinstance*)inst; NG_IGNORE(select); if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; switch(param) { case DIO_AREA: here->DIOarea = value->rValue; here->DIOareaGiven = TRUE; break; case DIO_PJ: here->DIOpj = value->rValue; here->DIOpjGiven = TRUE; break; case DIO_W: here->DIOw = value->rValue * scale; here->DIOwGiven = TRUE; break; case DIO_L: here->DIOl = value->rValue * scale; here->DIOlGiven = TRUE; break; case DIO_M: here->DIOm = value->rValue; here->DIOmGiven = TRUE; break; case DIO_TEMP: here->DIOtemp = value->rValue+CONSTCtoK; here->DIOtempGiven = TRUE; break; case DIO_DTEMP: here->DIOdtemp = value->rValue; here->DIOdtempGiven = TRUE; break; case DIO_OFF: here->DIOoff = (value->iValue != 0); break; case DIO_IC: here->DIOinitCond = value->rValue; break; case DIO_AREA_SENS: here->DIOsenParmNo = value->iValue; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/dio/Makefile.am0000644000175000017500000000110413546075722021766 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libdio.la libdio_la_SOURCES = \ dio.c \ dioacld.c \ dioask.c \ dioconv.c \ diodefs.h \ diodisto.c \ diodset.c \ dioext.h \ diogetic.c \ dioinit.c \ dioinit.h \ dioitf.h \ dioload.c \ diomask.c \ diompar.c \ dionoise.c \ dioparam.c \ diopzld.c \ diosacl.c \ diosetup.c \ diosload.c \ diosoachk.c \ diosprt.c \ diosset.c \ diosupd.c \ diotemp.c \ diotrunc.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/dio/diogetic.c0000644000175000017500000000160213546075722021670 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "diodefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int DIOgetic(GENmodel *inModel, CKTcircuit *ckt) { DIOmodel *model = (DIOmodel*)inModel; DIOinstance *here; /* * grab initial conditions out of rhs array. User specified, so use * external nodes to get values */ for( ; model ; model = DIOnextModel(model)) { for(here = DIOinstances(model); here ; here = DIOnextInstance(here)) { if(!here->DIOinitCondGiven) { here->DIOinitCond = *(ckt->CKTrhs + here->DIOposNode) - *(ckt->CKTrhs + here->DIOnegNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/dio/diodset.c0000644000175000017500000001246113546075722021541 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury Modified by Dietmar Warning 2003 and Paolo Nenzi 2003 **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "diodefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* actually load the current resistance value into the sparse matrix * previously provided - for distortion analysis */ /* * For some unknown reason the code in this fuction was based on the * spice2 diode implementation (the one with -5 nVt). I have changed * it with spice3 implementation. * * Paolo Nenzi 2003 */ int DIOdSetup(DIOmodel *model, CKTcircuit *ckt) { DIOinstance *here; double arg; double csat; /* area-scaled saturation current */ double czero; double czof2; double evd; double evrev; double gd; double sarg; double vd; /* current diode voltage */ double vt; /* K t / Q */ double vte; double g2,g3; double cdiff2,cdiff3; double cjunc1,cjunc2,cjunc3; double cd; double czeroSW; double cjunc1SW,cjunc2SW,cjunc3SW; /* loop through all the diode models */ for( ; model != NULL; model = DIOnextModel(model)) { /* loop through all the instances of the model */ for (here = DIOinstances(model); here != NULL ; here=DIOnextInstance(here)) { /* * this routine loads diodes for dc and transient analyses. * PN 2003: High level injection is not taken into * account, since resulting equations are * very complex to deal with. * * This is an old analysis anyway.... */ csat=(here->DIOtSatCur*here->DIOarea+here->DIOtSatSWCur*here->DIOpj)*here->DIOm; vt = CONSTKoverQ * here->DIOtemp; vte=model->DIOemissionCoeff * vt; vd = *(ckt->CKTrhsOld + (here->DIOposPrimeNode)) - *(ckt->CKTrhsOld + (here->DIOnegNode)); /* * compute derivatives * Note: pn 2003 changed the code to the new spice 3 code */ if (vd >= -3*vte) { /* forward */ evd = exp(vd/vte); cd = csat*(evd-1); gd = csat*evd/vte; g2 = 0.5 * gd / vte; cdiff2 = g2 * here->DIOtTransitTime; g3 = g2 / 3 / vte; cdiff3 = g3 * here->DIOtTransitTime; gd = gd + ckt->CKTgmin; } else if((!(here->DIOtBrkdwnV))|| (vd >= -here->DIOtBrkdwnV)) { /* reverse */ arg=3*vte/(vd*CONSTe); arg = arg * arg * arg; cd = -csat * (1 + arg); gd = csat * 3 * arg / vd; g2 = -4 * gd / vd; g3 = 5 * g2 / vd; cdiff2 = cdiff3 = 0.0; gd = gd + ckt->CKTgmin; } else { /* breakdown*/ /* why using csat instead of breakdowncurrent? */ evrev=exp(-(here->DIOtBrkdwnV+vd)/vt); cd = -csat*evrev; gd = csat*evrev/vt; /* * cd = -csat*(evrev-1+here->DIOtBrkdwnV/vt); */ /* should there be a minus here above? */ g2 = -gd/2/vt; g3 = -g2/3/vt; cdiff3 = cdiff2 = 0; } /* * junction charge storage elements */ czero=here->DIOtJctCap*here->DIOarea*here->DIOm; if (czero != 0.0) { if (vd < here->DIOtDepCap){ arg=1-vd/model->DIOjunctionPot; sarg=exp(-here->DIOtGradingCoeff*log(arg)); /* the expression for depletion charge model->DIOjunctionPot*czero* (1-arg*sarg)/(1-here->DIOtGradingCoeff); */ cjunc1 = czero*sarg; cjunc2 = cjunc1/2/model->DIOjunctionPot*here->DIOtGradingCoeff/arg; cjunc3 = cjunc2/3/model->DIOjunctionPot/arg*(here->DIOtGradingCoeff + 1); } else { czof2=czero/here->DIOtF2; /* depletion charge equation czero*here->DIOtF1+czof2* (model->DIOtF3*(vd-here->DIOtDepCap)+ (here->DIOtGradingCoeff/(model->DIOjunctionPot+ model->DIOjunctionPot))*(vd*vd-here->DIOtDepCap* here->DIOtDepCap)); */ cjunc2 = czof2/2/model->DIOjunctionPot*here->DIOtGradingCoeff; cjunc3 =0.0; } } else { cjunc1 = cjunc2 = cjunc3 = 0.0; } czeroSW=+here->DIOtJctSWCap*here->DIOpj*here->DIOm; if (czeroSW != 0.0) { if (vd < here->DIOtDepCap){ arg=1-vd/model->DIOjunctionSWPot; sarg=exp(-model->DIOgradingSWCoeff*log(arg)); cjunc1SW = czeroSW*sarg; cjunc2SW = cjunc1SW/2/model->DIOjunctionSWPot*model->DIOgradingSWCoeff/arg; cjunc3SW = cjunc2SW/3/model->DIOjunctionSWPot/arg*(model->DIOgradingSWCoeff + 1); } else { czof2=czeroSW/here->DIOtF2SW; cjunc2SW = czof2/2/model->DIOjunctionSWPot*model->DIOgradingSWCoeff; cjunc3SW = 0.0; } } else { cjunc1SW = cjunc2SW = cjunc3SW = 0.0; } /* * store small-signal parameters */ here->id_x2 = g2; here->id_x3 = g3; here->cdif_x2 = cdiff2; here->cdif_x3 = cdiff3; here->cjnc_x2 = cjunc2+cjunc2SW; here->cjnc_x3 = cjunc3+cjunc3SW; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/dio/dioask.c0000644000175000017500000001201013546075722021346 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified by Paolo Nenzi 2003 and Dietmar Warning 2012 **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "diodefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int DIOask (CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { DIOinstance *here = (DIOinstance*)inst; double vr; double vi; double sr; double si; double vm; static char *msg = "Current and power not available for ac analysis"; switch (which) { case DIO_OFF: value->iValue = here->DIOoff; return(OK); case DIO_IC: value->rValue = here->DIOinitCond; return(OK); case DIO_AREA: value->rValue = here->DIOarea; return(OK); case DIO_PJ: value->rValue = here->DIOpj; return(OK); case DIO_W: value->rValue = here->DIOw; return(OK); case DIO_L: value->rValue = here->DIOl; return(OK); case DIO_M: value->rValue = here->DIOm; return(OK); case DIO_TEMP: value->rValue = here->DIOtemp-CONSTCtoK; return(OK); case DIO_DTEMP: value->rValue = here->DIOdtemp; return(OK); case DIO_VOLTAGE: value->rValue = *(ckt->CKTstate0+here->DIOvoltage); return(OK); case DIO_CURRENT: value->rValue = *(ckt->CKTstate0+here->DIOcurrent); return(OK); case DIO_CAP: value->rValue = here->DIOcap; return(OK); case DIO_CHARGE: value->rValue = *(ckt->CKTstate0+here->DIOcapCharge); return(OK); case DIO_CAPCUR: value->rValue = *(ckt->CKTstate0+here->DIOcapCurrent); return(OK); case DIO_CONDUCT: value->rValue = *(ckt->CKTstate0+here->DIOconduct); return(OK); case DIO_POWER : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "DIOask"; strcpy(errMsg,msg); return(E_ASKPOWER); } else { value->rValue = *(ckt->CKTstate0 + here->DIOcurrent) * *(ckt->CKTstate0 + here->DIOvoltage); } return(OK); case DIO_QUEST_SENS_DC: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_Sap[select->iValue + 1]+ here->DIOsenParmNo); } return(OK); case DIO_QUEST_SENS_REAL: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->DIOsenParmNo); } return(OK); case DIO_QUEST_SENS_IMAG: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->DIOsenParmNo); } return(OK); case DIO_QUEST_SENS_MAG: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = sqrt(vr*vr + vi*vi); if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->DIOsenParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->DIOsenParmNo); value->rValue = (vr * sr + vi * si)/vm; } return(OK); case DIO_QUEST_SENS_PH: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = vr*vr + vi*vi; if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->DIOsenParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->DIOsenParmNo); value->rValue = (vr * si - vi * sr)/vm; } return(OK); case DIO_QUEST_SENS_CPLX: if(ckt->CKTsenInfo){ value->cValue.real= *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->DIOsenParmNo); value->cValue.imag= *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->DIOsenParmNo); } return(OK); default: return(E_BADPARM); } } tmpk8ny_4pz/src/spicelib/devices/dio/dioitf.h0000644000175000017500000000026413546075722021367 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_DIO #define DEV_DIO extern SPICEdev *get_dio_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/dio/diosload.c0000644000175000017500000001242113546075722021700 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ /* */ /* actually load the current sensitivity * information into the array previously provided */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "diodefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int DIOsLoad(GENmodel *inModel, CKTcircuit *ckt) { DIOmodel *model = (DIOmodel*)inModel; DIOinstance *here; int iparmno; int error; int i; double SaveState[6]; double A0; double Apert; double DELA; double DELAinv; double cspr0; double cd0; double cd; double qd0; double qd; double DcsprDp; double DcdDp; double DqdDp = 0.0; double tag0; double tag1; double Osxp; SENstruct *info; info = ckt->CKTsenInfo; info->SENstatus = PERTURBATION; tag0 = ckt->CKTag[0]; tag1 = ckt->CKTag[1]; if(ckt->CKTorder == 1){ tag1 = 0; } #ifdef SENSDEBUG printf("DIOsenload\n"); fprintf(stdout,"DIOsenload\n"); fprintf(stdout,"CKTtime = %.5e\n",ckt->CKTtime); fprintf(stdout,"CKTorder = %.5e\n",ckt->CKTorder); fprintf(stdout,"tag0 = %.5e tag1 = %.5e\n",tag0,tag1); #endif /* SENSDEBUG */ /* loop through all the diode models */ for( ; model != NULL; model = DIOnextModel(model)) { /* loop through all the instances of the model */ for (here = DIOinstances(model); here != NULL ; here=DIOnextInstance(here)) { #ifdef SENSDEBUG fprintf(stdout,"pos = %d , posprm = %d ,neg = %d, senparmno = %d\n", here->DIOposNode ,here->DIOposPrimeNode,here->DIOnegNode, here->DIOsenParmNo); #endif /* SENSDEBUG */ /* save the unperturbed values in the state vector */ for(i=0; i <= 4; i++) { *(SaveState + i) = *(ckt->CKTstate0 + here->DIOstate + i); } *(SaveState + 5) = here->DIOcap; if(here->DIOsenParmNo == 0) goto next; cspr0 = *(ckt->CKTstate0 + here->DIOcurrent); here->DIOsenPertFlag = ON; error = DIOload((GENmodel*)model,ckt); cd0 = *(ckt->CKTstate0 + here->DIOcurrent); qd0 = *(ckt->CKTstate0 + here->DIOcapCharge ); #ifdef SENSDEBUG fprintf(stdout,"cd0 = %.7e \n",cd0); #endif /* SENSDEBUG */ A0 = here->DIOarea; DELA = info->SENpertfac * A0; Apert = A0 + DELA; DELAinv = 1.0/DELA; here->DIOarea = Apert; error = DIOload((GENmodel*)model,ckt); if(error) return(error); here->DIOarea = A0; here->DIOsenPertFlag = OFF; cd = *(ckt->CKTstate0 + here->DIOcurrent) ; qd = *(ckt->CKTstate0 + here->DIOcapCharge); DcdDp = (cd -cd0) * DELAinv; DcsprDp = 0; if(here->DIOposNode != here->DIOposPrimeNode) { DcsprDp = cspr0 * info->SENpertfac * DELAinv; } DqdDp = (qd - qd0)*DELAinv; *(here->DIOdphidp) = DqdDp; #ifdef SENSDEBUG fprintf(stdout,"cd0 = %.7e ,cd = %.7e,DcdDp=%.7e\n", cd0,cd,DcdDp); fprintf(stdout,"cspr0 = %.7e ,DcsprDp=%.7e\n", cspr0,DcsprDp); fprintf(stdout,"qd0 = %.7e ,qd = %.7e,DqdDp=%.7e\n", qd0,qd,DqdDp); #endif /* SENSDEBUG */ if((info->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)){ goto restore; } /* * load RHS matrices */ *(info->SEN_RHS[here->DIOposNode] + here->DIOsenParmNo) -= DcsprDp; *(info->SEN_RHS[here->DIOposPrimeNode] + here->DIOsenParmNo) += DcsprDp - DcdDp ; *(info->SEN_RHS[here->DIOnegNode] + here->DIOsenParmNo) += DcdDp ; next: if((info->SENmode == DCSEN)||(ckt->CKTmode&MODETRANOP))goto restore; if((info->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)){ goto restore; } for(iparmno = 1;iparmno<=info->SENparms;iparmno++){ Osxp = tag0 * *(ckt->CKTstate1 + here->DIOsensxp + 2*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->DIOsensxp + 2*(iparmno - 1) + 1); #ifdef SENSDEBUG fprintf(stdout,"\n iparmno=%d,Osxp=%.7e\n",iparmno,Osxp); #endif /* SENSDEBUG */ if(iparmno == here->DIOsenParmNo) Osxp = Osxp - tag0 * DqdDp; #ifdef SENSDEBUG fprintf(stdout,"Osxp=%.7e\n",Osxp); #endif /* SENSDEBUG */ *(info->SEN_RHS[here->DIOposPrimeNode] + iparmno) += Osxp; *(info->SEN_RHS[here->DIOnegNode] + iparmno) -= Osxp; } /* put the unperturbed values back into the state vector */ restore: for(i=0; i <= 4; i++) { *(ckt->CKTstate0 + here->DIOstate + i) = *(SaveState + i); } here->DIOcap = *(SaveState + 5); } } info->SENstatus = NORMAL; #ifdef SENSDEBUG printf("DIOsenload end\n"); #endif /* SENSDEBUG */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/dio/dionoise.c0000644000175000017500000001251413546075722021716 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Gary W. Ng Modified by Dietmar Warning 2003 **********/ #include "ngspice/ngspice.h" #include "diodefs.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" /* * DIOnoise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with diodes. It starts with the model *firstModel and * traverses all of its instancess. It then proceeds to any other * models on the linked list. The total output noise density * generated by all of the diodes is summed with the variable * "OnDens". */ int DIOnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; DIOmodel *firstModel = (DIOmodel *) genmodel; DIOmodel *model; DIOinstance *inst; double tempOnoise; double tempInoise; double noizDens[DIONSRCS]; double lnNdens[DIONSRCS]; int i; /* define the names of the noise sources */ static char *DIOnNames[DIONSRCS] = { /* Note that we have to keep the order */ "_rs", /* noise due to rs */ /* consistent with thestrchr definitions */ "_id", /* noise due to id */ /* in DIOdefs.h */ "_1overf", /* flicker (1/f) noise */ "" /* total diode noise */ }; for (model=firstModel; model != NULL; model=DIOnextModel(model)) { for (inst=DIOinstances(model); inst != NULL; inst=DIOnextInstance(inst)) { switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i=0; i < DIONSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_%s%s", inst->DIOname, DIOnNames[i]); } break; case INT_NOIZ: for (i=0; i < DIONSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total_%s%s", inst->DIOname, DIOnNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total_%s%s", inst->DIOname, DIOnNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: NevalSrc(&noizDens[DIORSNOIZ],&lnNdens[DIORSNOIZ], ckt,THERMNOISE,inst->DIOposPrimeNode,inst->DIOposNode, inst->DIOtConductance * inst->DIOarea * inst->DIOm); NevalSrc(&noizDens[DIOIDNOIZ],&lnNdens[DIOIDNOIZ], ckt,SHOTNOISE,inst->DIOposPrimeNode, inst->DIOnegNode, *(ckt->CKTstate0 + inst->DIOcurrent)); NevalSrc(&noizDens[DIOFLNOIZ], NULL, ckt, N_GAIN,inst->DIOposPrimeNode, inst->DIOnegNode, (double)0.0); noizDens[DIOFLNOIZ] *= model->DIOfNcoef * exp(model->DIOfNexp * log(MAX(fabs(*(ckt->CKTstate0 + inst->DIOcurrent)/inst->DIOm),N_MINLOG))) / data->freq * inst->DIOm; lnNdens[DIOFLNOIZ] = log(MAX(noizDens[DIOFLNOIZ],N_MINLOG)); noizDens[DIOTOTNOIZ] = noizDens[DIORSNOIZ] + noizDens[DIOIDNOIZ] + noizDens[DIOFLNOIZ]; lnNdens[DIOTOTNOIZ] = log(MAX(noizDens[DIOTOTNOIZ], N_MINLOG)); *OnDens += noizDens[DIOTOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to */ /* initialize our "history" variables */ for (i=0; i < DIONSRCS; i++) { inst->DIOnVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i=0; i < DIONSRCS; i++) { inst->DIOnVar[OUTNOIZ][i] = 0.0; inst->DIOnVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0 (we have to integrate) */ /* To insure accurracy, we have to integrate each component separately */ for (i=0; i < DIONSRCS; i++) { if (i != DIOTOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], inst->DIOnVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv , lnNdens[i] + data->lnGainInv, inst->DIOnVar[LNLSTDENS][i] + data->lnGainInv, data); inst->DIOnVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { inst->DIOnVar[OUTNOIZ][i] += tempOnoise; inst->DIOnVar[OUTNOIZ][DIOTOTNOIZ] += tempOnoise; inst->DIOnVar[INNOIZ][i] += tempInoise; inst->DIOnVar[INNOIZ][DIOTOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i=0; i < DIONSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i=0; i < DIONSRCS; i++) { data->outpVector[data->outNumber++] = inst->DIOnVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = inst->DIOnVar[INNOIZ][i]; } } /* if */ break; } /* switch (mode) */ break; case N_CLOSE: return (OK); /* do nothing, the main calling routine will close */ break; /* the plots */ } /* switch (operation) */ } /* for inst */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/dio/diosset.c0000644000175000017500000000215413546075722021556 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ /* */ /* loop through all the devices and * allocate parameter #s to design parameters */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "diodefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int DIOsSetup(SENstruct *info, GENmodel *inModel) { DIOmodel *model = (DIOmodel*)inModel; DIOinstance *here; /* loop through all the diode models */ for( ; model != NULL; model = DIOnextModel(model)) { /* loop through all the instances of the model */ for (here = DIOinstances(model); here != NULL ; here=DIOnextInstance(here)) { if(here->DIOsenParmNo){ here->DIOsenParmNo = ++(info->SENparms); here->DIOsenPertFlag = OFF; } if((here->DIOsens = TMALLOC(double, 7)) == NULL) return(E_NOMEM); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/dio/diosoachk.c0000644000175000017500000000301613546075722022046 0ustar carstencarsten/********** Copyright 2013 Dietmar Warning. All rights reserved. Author: 2013 Dietmar Warning **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "diodefs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/cpdefs.h" int DIOsoaCheck(CKTcircuit *ckt, GENmodel *inModel) { DIOmodel *model = (DIOmodel *) inModel; DIOinstance *here; double vd; /* current diode voltage */ int maxwarns; static int warns_fv = 0, warns_bv = 0; if (!ckt) { warns_fv = 0; warns_bv = 0; return OK; } maxwarns = ckt->CKTsoaMaxWarns; for (; model; model = DIOnextModel(model)) { for (here = DIOinstances(model); here; here = DIOnextInstance(here)) { vd = ckt->CKTrhsOld [here->DIOposPrimeNode] - ckt->CKTrhsOld [here->DIOnegNode]; if (vd > model->DIOfv_max) if (warns_fv < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vj=%g has exceeded Fv_max=%g\n", vd, model->DIOfv_max); warns_fv++; } if (-vd > model->DIObv_max) if (warns_bv < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vj=%g has exceeded Bv_max=%g\n", vd, model->DIObv_max); warns_bv++; } } } return OK; } tmpk8ny_4pz/src/spicelib/devices/dio/dioinit.h0000644000175000017500000000035613546075722021552 0ustar carstencarsten#ifndef _DIOINIT_H #define _DIOINIT_H extern IFparm DIOpTable[ ]; extern IFparm DIOmPTable[ ]; extern char *DIOnames[ ]; extern int DIOpTSize; extern int DIOmPTSize; extern int DIOnSize; extern int DIOiSize; extern int DIOmSize; #endif tmpk8ny_4pz/src/spicelib/devices/dio/diomask.c0000644000175000017500000001324713546075722021540 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified by Paolo Nenzi 2003 and Dietmar Warning 2012 **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "diodefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int DIOmAsk (CKTcircuit *ckt, GENmodel *inModel, int which, IFvalue *value) { DIOmodel *model = (DIOmodel*)inModel; NG_IGNORE(ckt); switch (which) { case DIO_MOD_LEVEL: value->iValue = model->DIOlevel; return (OK); case DIO_MOD_IS: value->rValue = model->DIOsatCur; if (value->rValue < ckt->CKTepsmin) value->rValue = ckt->CKTepsmin; return(OK); case DIO_MOD_JSW: value->rValue = model->DIOsatSWCur; return(OK); case DIO_MOD_TNOM: value->rValue = model->DIOnomTemp-CONSTCtoK; return(OK); case DIO_MOD_RS: value->rValue = model->DIOresist; return(OK); case DIO_MOD_TRS: value->rValue = model->DIOresistTemp1; return(OK); case DIO_MOD_TRS2: value->rValue = model->DIOresistTemp2; return(OK); case DIO_MOD_N: value->rValue = model->DIOemissionCoeff; return(OK); case DIO_MOD_NS: value->rValue = model->DIOswEmissionCoeff; return(OK); case DIO_MOD_TT: value->rValue = model->DIOtransitTime; return(OK); case DIO_MOD_TTT1: value->rValue = model->DIOtranTimeTemp1; return(OK); case DIO_MOD_TTT2: value->rValue = model->DIOtranTimeTemp2; return(OK); case DIO_MOD_CJO: value->rValue = model->DIOjunctionCap; return(OK); case DIO_MOD_VJ: value->rValue = model->DIOjunctionPot; return(OK); case DIO_MOD_M: value->rValue = model->DIOgradingCoeff; return(OK); case DIO_MOD_TM1: value->rValue = model->DIOgradCoeffTemp1; return(OK); case DIO_MOD_TM2: value->rValue = model->DIOgradCoeffTemp2; return(OK); case DIO_MOD_CJSW: value->rValue = model->DIOjunctionSWCap; return(OK); case DIO_MOD_VJSW: value->rValue = model->DIOjunctionSWPot; return(OK); case DIO_MOD_MJSW: value->rValue = model->DIOgradingSWCoeff; return(OK); case DIO_MOD_IKF: value->rValue = model->DIOforwardKneeCurrent; return(OK); case DIO_MOD_IKR: value->rValue = model->DIOreverseKneeCurrent; return(OK); case DIO_MOD_NBV: value->rValue = model->DIObrkdEmissionCoeff; return(OK); case DIO_MOD_TLEV: value->iValue = model->DIOtlev; return (OK); case DIO_MOD_TLEVC: value->iValue = model->DIOtlevc; return (OK); case DIO_MOD_EG: value->rValue = model->DIOactivationEnergy; return (OK); case DIO_MOD_XTI: value->rValue = model->DIOsaturationCurrentExp; return(OK); case DIO_MOD_CTA: value->rValue = model->DIOcta; return(OK); case DIO_MOD_CTP: value->rValue = model->DIOctp; return(OK); case DIO_MOD_TPB: value->rValue = model->DIOtpb; return(OK); case DIO_MOD_TPHP: value->rValue = model->DIOtphp; return(OK); case DIO_MOD_FC: value->rValue = model->DIOdepletionCapCoeff; return(OK); case DIO_MOD_FCS: value->rValue = model->DIOdepletionSWcapCoeff; return(OK); case DIO_MOD_KF: value->rValue = model->DIOfNcoef; return(OK); case DIO_MOD_AF: value->rValue = model->DIOfNexp; return(OK); case DIO_MOD_BV: value->rValue = model->DIObreakdownVoltage; return(OK); case DIO_MOD_IBV: value->rValue = model->DIObreakdownCurrent; return(OK); case DIO_MOD_TCV: value->rValue = model->DIOtcv; return(OK); case DIO_MOD_AREA: value->rValue = model->DIOarea; return(OK); case DIO_MOD_PJ: value->rValue = model->DIOpj; return(OK); case DIO_MOD_COND: value->rValue = model->DIOconductance; return(OK); case DIO_MOD_JTUN: value->rValue = model->DIOtunSatCur; return(OK); case DIO_MOD_JTUNSW: value->rValue = model->DIOtunSatSWCur; return(OK); case DIO_MOD_NTUN: value->rValue = model->DIOtunEmissionCoeff; return(OK); case DIO_MOD_XTITUN: value->rValue = model->DIOtunSaturationCurrentExp; return(OK); case DIO_MOD_KEG: value->rValue = model->DIOtunEGcorrectionFactor; return(OK); case DIO_MOD_FV_MAX: value->rValue = model->DIOfv_max; return(OK); case DIO_MOD_BV_MAX: value->rValue = model->DIObv_max; return(OK); case DIO_MOD_ISR: value->rValue = model->DIOrecSatCur; return(OK); case DIO_MOD_NR: value->rValue = model->DIOrecEmissionCoeff; return(OK); default: return(E_BADPARM); } } tmpk8ny_4pz/src/spicelib/devices/dio/dioconv.c0000644000175000017500000000322113546075722021541 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/cktdefs.h" #include "diodefs.h" #include "ngspice/const.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int DIOconvTest(GENmodel *inModel, CKTcircuit *ckt) /* Check the devices for convergence */ { DIOmodel *model = (DIOmodel*)inModel; DIOinstance *here; double delvd,vd,cdhat,cd; double tol; /* loop through all the diode models */ for( ; model != NULL; model = DIOnextModel(model)) { /* loop through all the instances of the model */ for (here = DIOinstances(model); here != NULL ; here=DIOnextInstance(here)) { /* * initialization */ vd = *(ckt->CKTrhsOld+here->DIOposPrimeNode)- *(ckt->CKTrhsOld + here->DIOnegNode); delvd=vd- *(ckt->CKTstate0 + here->DIOvoltage); cdhat= *(ckt->CKTstate0 + here->DIOcurrent) + *(ckt->CKTstate0 + here->DIOconduct) * delvd; cd= *(ckt->CKTstate0 + here->DIOcurrent); /* * check convergence */ tol=ckt->CKTreltol* MAX(fabs(cdhat),fabs(cd))+ckt->CKTabstol; if (fabs(cdhat-cd) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* don't need to check any more device */ } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/dio/dioacld.c0000644000175000017500000000274513546075722021511 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified by Dietmar Warning 2003 **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "diodefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int DIOacLoad(GENmodel *inModel, CKTcircuit *ckt) { DIOmodel *model = (DIOmodel*)inModel; double gspr; double geq; double xceq; DIOinstance *here; /* loop through all the diode models */ for( ; model != NULL; model = DIOnextModel(model)) { /* loop through all the instances of the model */ for (here = DIOinstances(model); here != NULL ; here=DIOnextInstance(here)) { gspr=here->DIOtConductance*here->DIOarea; geq= *(ckt->CKTstate0 + here->DIOconduct); xceq= *(ckt->CKTstate0 + here->DIOcapCurrent) * ckt->CKTomega; *(here->DIOposPosPtr ) += gspr; *(here->DIOnegNegPtr ) += geq; *(here->DIOnegNegPtr +1 ) += xceq; *(here->DIOposPrimePosPrimePtr ) += geq+gspr; *(here->DIOposPrimePosPrimePtr +1 ) += xceq; *(here->DIOposPosPrimePtr ) -= gspr; *(here->DIOnegPosPrimePtr ) -= geq; *(here->DIOnegPosPrimePtr +1 ) -= xceq; *(here->DIOposPrimePosPtr ) -= gspr; *(here->DIOposPrimeNegPtr ) -= geq; *(here->DIOposPrimeNegPtr +1 ) -= xceq; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/dio/dioinit.c0000644000175000017500000000322113546075722021537 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "ngspice/cktdefs.h" #include "diodefs.h" #include "dioitf.h" #include "dioinit.h" SPICEdev DIOinfo = { .DEVpublic = { .name = "Diode", .description = "Junction Diode model", .terms = &DIOnSize, .numNames = &DIOnSize, .termNames = DIOnames, .numInstanceParms = &DIOpTSize, .instanceParms = DIOpTable, .numModelParms = &DIOmPTSize, .modelParms = DIOmPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = DIOparam, .DEVmodParam = DIOmParam, .DEVload = DIOload, .DEVsetup = DIOsetup, .DEVunsetup = DIOunsetup, .DEVpzSetup = DIOsetup, .DEVtemperature = DIOtemp, .DEVtrunc = DIOtrunc, .DEVfindBranch = NULL, .DEVacLoad = DIOacLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = DIOgetic, .DEVask = DIOask, .DEVmodAsk = DIOmAsk, .DEVpzLoad = DIOpzLoad, .DEVconvTest = DIOconvTest, .DEVsenSetup = DIOsSetup, .DEVsenLoad = DIOsLoad, .DEVsenUpdate = DIOsUpdate, .DEVsenAcLoad = DIOsAcLoad, .DEVsenPrint = DIOsPrint, .DEVsenTrunc = NULL, .DEVdisto = DIOdisto, .DEVnoise = DIOnoise, .DEVsoaCheck = DIOsoaCheck, .DEVinstSize = &DIOiSize, .DEVmodSize = &DIOmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_dio_info(void) { return &DIOinfo; } tmpk8ny_4pz/src/spicelib/devices/dio/diosupd.c0000644000175000017500000000464413546075722021561 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ /* */ /* update the charge sensitivities and their derivatives */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "diodefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int DIOsUpdate(GENmodel *inModel, CKTcircuit *ckt) { DIOmodel *model = (DIOmodel*)inModel; DIOinstance *here; int iparmno; double sposprm; double sneg; double sxp; double dummy1; double dummy2; SENstruct *info; info = ckt->CKTsenInfo; if(ckt->CKTtime == 0) return(OK); dummy1=0; dummy2=0; #ifdef SENSDEBUG printf("DIOsenUpdate\n"); printf("CKTtime = %.5e\n",ckt->CKTtime); printf("CKTorder = %.5e\n",ckt->CKTorder); #endif /* SENSDEBUG */ /* loop through all the diode models */ for( ; model != NULL; model = DIOnextModel(model)) { /* loop through all the instances of the model */ for (here = DIOinstances(model); here != NULL ; here=DIOnextInstance(here)) { #ifdef SENSDEBUG printf("capd = %.7e \n",here->DIOcap); #endif /* SENSDEBUG */ for(iparmno = 1;iparmno<=info->SENparms;iparmno++){ sposprm = *(info->SEN_Sap[here->DIOposPrimeNode] + iparmno); sneg = *(info->SEN_Sap[here->DIOnegNode] + iparmno); sxp = (sposprm - sneg) * here->DIOcap; if(iparmno == here->DIOsenParmNo) sxp += *(here->DIOdphidp); *(ckt->CKTstate0 + here->DIOsensxp + 2 * (iparmno - 1)) = sxp; NIintegrate(ckt,&dummy1,&dummy2,here->DIOcap, (here->DIOsensxp + 2 * (iparmno -1 ))); if(ckt->CKTmode & MODEINITTRAN){ *(ckt->CKTstate1 + here->DIOsensxp + 2*(iparmno - 1)) = sxp; *(ckt->CKTstate1 + here->DIOsensxp + 2*(iparmno - 1)+1) = 0; } #ifdef SENSDEBUG printf("iparmno = %d\n",iparmno); printf("sposprm = %.7e,sneg = %.7e\n",sposprm,sneg); printf("sxp = %.7e,sdotxp = %.7e\n", sxp,*(ckt->CKTstate0 + here->DIOsensxp + 2*(iparmno - 1) + 1)); #endif /* SENSDEBUG */ } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/dio/diotrunc.c0000644000175000017500000000117613546075722021736 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "diodefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int DIOtrunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { DIOmodel *model = (DIOmodel*)inModel; DIOinstance *here; for( ; model != NULL; model = DIOnextModel(model)) { for(here=DIOinstances(model);here!=NULL;here = DIOnextInstance(here)){ CKTterr(here->DIOcapCharge,ckt,timeStep); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/dio/dioext.h0000644000175000017500000000235413546075722021407 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ extern int DIOacLoad(GENmodel*,CKTcircuit*); extern int DIOask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int DIOconvTest(GENmodel *,CKTcircuit*); extern int DIOgetic(GENmodel*,CKTcircuit*); extern int DIOload(GENmodel*,CKTcircuit*); extern int DIOmAsk(CKTcircuit*,GENmodel*,int,IFvalue*); extern int DIOmParam(int,IFvalue*,GENmodel*); extern int DIOparam(int,IFvalue*,GENinstance*,IFvalue*); extern int DIOpzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int DIOsAcLoad(GENmodel*,CKTcircuit*); extern int DIOsLoad(GENmodel*,CKTcircuit*); extern int DIOsSetup(SENstruct*,GENmodel*); extern void DIOsPrint(GENmodel*,CKTcircuit*); extern int DIOsUpdate(GENmodel*,CKTcircuit*); extern int DIOsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int DIOunsetup(GENmodel*,CKTcircuit*); extern int DIOtemp(GENmodel*,CKTcircuit*); extern int DIOtrunc(GENmodel*,CKTcircuit*,double*); extern int DIOdisto(int,GENmodel*,CKTcircuit*); extern int DIOnoise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int DIOdSetup(DIOmodel*,CKTcircuit*); extern int DIOsoaCheck(CKTcircuit *, GENmodel *); tmpk8ny_4pz/src/spicelib/devices/dio/dioload.c0000644000175000017500000004136513546075722021526 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes Modified by Paolo Nenzi 2003 and Dietmar Warning 2012 **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/cktdefs.h" #include "diodefs.h" #include "ngspice/const.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int DIOload(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current resistance value into the * sparse matrix previously provided */ { DIOmodel *model = (DIOmodel*)inModel; DIOinstance *here; double arg; double argsw; double capd; double cd, cdb, cdsw; double cdeq; double cdhat; double ceq; double csat; /* area-scaled saturation current */ double csatsw; /* perimeter-scaled saturation current */ double czero; double czof2; double argSW; double czeroSW; double czof2SW; double sargSW; double sqrt_ikr; double sqrt_ikf; double ikf_area_m; double ikr_area_m; double delvd; /* change in diode voltage temporary */ double evd; double evrev; double gd, gdb, gdsw, gen_fac, gen_fac_vd; double t1, evd_rec, cdb_rec, gdb_rec; double geq; double gspr; /* area-scaled conductance */ double sarg; #ifndef NOBYPASS double tol; /* temporary for tolerence calculations */ #endif double vd; /* current diode voltage */ double vdtemp; double vt; /* K t / Q */ double vte, vtesw, vtetun; double vtebrk; int Check; int error; int SenCond=0; /* sensitivity condition */ double diffcharge, diffchargeSW, deplcharge, deplchargeSW, diffcap, diffcapSW, deplcap, deplcapSW; /* loop through all the diode models */ for( ; model != NULL; model = DIOnextModel(model)) { /* loop through all the instances of the model */ for (here = DIOinstances(model); here != NULL ; here=DIOnextInstance(here)) { /* * this routine loads diodes for dc and transient analyses. */ if(ckt->CKTsenInfo){ if((ckt->CKTsenInfo->SENstatus == PERTURBATION) && (here->DIOsenPertFlag == OFF))continue; SenCond = here->DIOsenPertFlag; #ifdef SENSDEBUG printf("DIOload \n"); #endif /* SENSDEBUG */ } cd = 0.0; cdb = 0.0; cdsw = 0.0; gd = 0.0; gdb = 0.0; gdsw = 0.0; csat = here->DIOtSatCur; csatsw = here->DIOtSatSWCur; gspr = here->DIOtConductance * here->DIOarea; vt = CONSTKoverQ * here->DIOtemp; vte = model->DIOemissionCoeff * vt; vtebrk = model->DIObrkdEmissionCoeff * vt; /* * initialization */ if(SenCond){ #ifdef SENSDEBUG printf("DIOsenPertFlag = ON \n"); #endif /* SENSDEBUG */ if((ckt->CKTsenInfo->SENmode == TRANSEN)&& (ckt->CKTmode & MODEINITTRAN)) { vd = *(ckt->CKTstate1 + here->DIOvoltage); } else{ vd = *(ckt->CKTstate0 + here->DIOvoltage); } #ifdef SENSDEBUG printf("vd = %.7e \n",vd); #endif /* SENSDEBUG */ goto next1; } Check=1; if(ckt->CKTmode & MODEINITSMSIG) { vd= *(ckt->CKTstate0 + here->DIOvoltage); } else if (ckt->CKTmode & MODEINITTRAN) { vd= *(ckt->CKTstate1 + here->DIOvoltage); } else if ( (ckt->CKTmode & MODEINITJCT) && (ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC) ) { vd=here->DIOinitCond; } else if ( (ckt->CKTmode & MODEINITJCT) && here->DIOoff) { vd=0; } else if ( ckt->CKTmode & MODEINITJCT) { vd=here->DIOtVcrit; } else if ( ckt->CKTmode & MODEINITFIX && here->DIOoff) { vd=0; } else { #ifndef PREDICTOR if (ckt->CKTmode & MODEINITPRED) { *(ckt->CKTstate0 + here->DIOvoltage) = *(ckt->CKTstate1 + here->DIOvoltage); vd = DEVpred(ckt,here->DIOvoltage); *(ckt->CKTstate0 + here->DIOcurrent) = *(ckt->CKTstate1 + here->DIOcurrent); *(ckt->CKTstate0 + here->DIOconduct) = *(ckt->CKTstate1 + here->DIOconduct); } else { #endif /* PREDICTOR */ vd = *(ckt->CKTrhsOld+here->DIOposPrimeNode)- *(ckt->CKTrhsOld + here->DIOnegNode); #ifndef PREDICTOR } #endif /* PREDICTOR */ delvd=vd- *(ckt->CKTstate0 + here->DIOvoltage); cdhat= *(ckt->CKTstate0 + here->DIOcurrent) + *(ckt->CKTstate0 + here->DIOconduct) * delvd; /* * bypass if solution has not changed */ #ifndef NOBYPASS if ((!(ckt->CKTmode & MODEINITPRED)) && (ckt->CKTbypass)) { tol=ckt->CKTvoltTol + ckt->CKTreltol* MAX(fabs(vd),fabs(*(ckt->CKTstate0 +here->DIOvoltage))); if (fabs(delvd) < tol){ tol=ckt->CKTreltol* MAX(fabs(cdhat), fabs(*(ckt->CKTstate0 + here->DIOcurrent)))+ ckt->CKTabstol; if (fabs(cdhat- *(ckt->CKTstate0 + here->DIOcurrent)) < tol) { vd= *(ckt->CKTstate0 + here->DIOvoltage); cd= *(ckt->CKTstate0 + here->DIOcurrent); gd= *(ckt->CKTstate0 + here->DIOconduct); goto load; } } } #endif /* NOBYPASS */ /* * limit new junction voltage */ if ( (model->DIObreakdownVoltageGiven) && (vd < MIN(0,-here->DIOtBrkdwnV+10*vtebrk))) { vdtemp = -(vd+here->DIOtBrkdwnV); vdtemp = DEVpnjlim(vdtemp, -(*(ckt->CKTstate0 + here->DIOvoltage) + here->DIOtBrkdwnV),vtebrk, here->DIOtVcrit,&Check); vd = -(vdtemp+here->DIOtBrkdwnV); } else { vd = DEVpnjlim(vd,*(ckt->CKTstate0 + here->DIOvoltage), vte,here->DIOtVcrit,&Check); } } /* * compute dc current and derivitives */ next1: if (model->DIOsatSWCurGiven) { /* sidewall current */ if (model->DIOswEmissionCoeffGiven) { /* current with own characteristic */ vtesw = model->DIOswEmissionCoeff * vt; if (vd >= -3*vtesw) { /* forward */ evd = exp(vd/vtesw); cdsw = csatsw*(evd-1); gdsw = csatsw*evd/vtesw; } else if((!(model->DIObreakdownVoltageGiven)) || vd >= -here->DIOtBrkdwnV) { /* reverse */ argsw = 3*vtesw/(vd*CONSTe); argsw = argsw * argsw * argsw; cdsw = -csatsw*(1+argsw); gdsw = csatsw*3*argsw/vd; } else { /* breakdown */ evrev = exp(-(here->DIOtBrkdwnV+vd)/vtebrk); cdsw = -csatsw*evrev; gdsw = csatsw*evrev/vtebrk; } } else { /* merge saturation currents and use same characteristic as bottom diode */ csat = csat + csatsw; } } if (vd >= -3*vte) { /* bottom current forward */ evd = exp(vd/vte); cdb = csat*(evd-1); gdb = csat*evd/vte; if (model->DIOrecSatCurGiven) { /* recombination current */ evd_rec = exp(vd/(model->DIOrecEmissionCoeff*vt)); cdb_rec = here->DIOtRecSatCur*(evd_rec-1); gdb_rec = here->DIOtRecSatCur*evd_rec/vt; t1 = pow((1-vd/here->DIOtJctPot), 2) + 0.005; gen_fac = pow(t1, here->DIOtGradingCoeff/2); gen_fac_vd = here->DIOtGradingCoeff * (1-vd/here->DIOtJctPot) * pow(t1, (here->DIOtGradingCoeff/2-1)); cdb_rec = cdb_rec * gen_fac; gdb_rec = gdb_rec * gen_fac + cdb_rec * gen_fac_vd; cdb = cdb + cdb_rec; gdb = gdb + gdb_rec; } } else if((!(model->DIObreakdownVoltageGiven)) || vd >= -here->DIOtBrkdwnV) { /* reverse */ arg = 3*vte/(vd*CONSTe); arg = arg * arg * arg; cdb = -csat*(1+arg); gdb = csat*3*arg/vd; } else { /* breakdown */ evrev = exp(-(here->DIOtBrkdwnV+vd)/vtebrk); cdb = -csat*evrev; gdb = csat*evrev/vtebrk; } if (model->DIOtunSatSWCurGiven) { /* tunnel sidewall current */ vtetun = model->DIOtunEmissionCoeff * vt; evd = exp(-vd/vtetun); cdsw = cdsw - here->DIOtTunSatSWCur * (evd - 1); gdsw = gdsw + here->DIOtTunSatSWCur * evd / vtetun; } if (model->DIOtunSatCurGiven) { /* tunnel bottom current */ vtetun = model->DIOtunEmissionCoeff * vt; evd = exp(-vd/vtetun); cdb = cdb - here->DIOtTunSatCur * (evd - 1); gdb = gdb + here->DIOtTunSatCur * evd / vtetun; } cd = cdb + cdsw; gd = gdb + gdsw; if (vd >= -3*vte) { /* limit forward */ if( (model->DIOforwardKneeCurrent > 0.0) && (cd > 1.0e-18) ) { ikf_area_m = here->DIOforwardKneeCurrent; sqrt_ikf = sqrt(cd/ikf_area_m); gd = ((1+sqrt_ikf)*gd - cd*gd/(2*sqrt_ikf*ikf_area_m))/(1+2*sqrt_ikf + cd/ikf_area_m) + ckt->CKTgmin; cd = cd/(1+sqrt_ikf) + ckt->CKTgmin*vd; } else { gd = gd + ckt->CKTgmin; cd = cd + ckt->CKTgmin*vd; } } else { /* limit reverse */ if( (model->DIOreverseKneeCurrent > 0.0) && (cd < -1.0e-18) ) { ikr_area_m = here->DIOreverseKneeCurrent; sqrt_ikr = sqrt(cd/(-ikr_area_m)); gd = ((1+sqrt_ikr)*gd + cd*gd/(2*sqrt_ikr*ikr_area_m))/(1+2*sqrt_ikr - cd/ikr_area_m) + ckt->CKTgmin; cd = cd/(1+sqrt_ikr) + ckt->CKTgmin*vd; } else { gd = gd + ckt->CKTgmin; cd = cd + ckt->CKTgmin*vd; } } if ((ckt->CKTmode & (MODEDCTRANCURVE | MODETRAN | MODEAC | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) { /* * charge storage elements */ czero=here->DIOtJctCap; if (vd < here->DIOtDepCap){ arg=1-vd/here->DIOtJctPot; sarg=exp(-here->DIOtGradingCoeff*log(arg)); deplcharge = here->DIOtJctPot*czero*(1-arg*sarg)/(1-here->DIOtGradingCoeff); deplcap = czero*sarg; } else { czof2=czero/here->DIOtF2; deplcharge = czero*here->DIOtF1+czof2*(here->DIOtF3*(vd-here->DIOtDepCap)+ (here->DIOtGradingCoeff/(here->DIOtJctPot+here->DIOtJctPot))*(vd*vd-here->DIOtDepCap*here->DIOtDepCap)); deplcap = czof2*(here->DIOtF3+here->DIOtGradingCoeff*vd/here->DIOtJctPot); } czeroSW=here->DIOtJctSWCap; if (vd < here->DIOtDepSWCap){ argSW=1-vd/here->DIOtJctSWPot; sargSW=exp(-model->DIOgradingSWCoeff*log(argSW)); deplchargeSW = here->DIOtJctSWPot*czeroSW*(1-argSW*sargSW)/(1-model->DIOgradingSWCoeff); deplcapSW = czeroSW*sargSW; } else { czof2SW=czeroSW/here->DIOtF2SW; deplchargeSW = czeroSW*here->DIOtF1+czof2SW*(here->DIOtF3SW*(vd-here->DIOtDepSWCap)+ (model->DIOgradingSWCoeff/(here->DIOtJctSWPot+here->DIOtJctSWPot))*(vd*vd-here->DIOtDepSWCap*here->DIOtDepSWCap)); deplcapSW = czof2SW*(here->DIOtF3SW+model->DIOgradingSWCoeff*vd/here->DIOtJctSWPot); } diffcharge = here->DIOtTransitTime*cdb; diffchargeSW = here->DIOtTransitTime*cdsw; *(ckt->CKTstate0 + here->DIOcapCharge) = diffcharge + diffchargeSW + deplcharge + deplchargeSW; diffcap = here->DIOtTransitTime*gdb; diffcapSW = here->DIOtTransitTime*gdsw; capd = diffcap + diffcapSW + deplcap + deplcapSW; here->DIOcap = capd; /* * store small-signal parameters */ if( (!(ckt->CKTmode & MODETRANOP)) || (!(ckt->CKTmode & MODEUIC)) ) { if (ckt->CKTmode & MODEINITSMSIG){ *(ckt->CKTstate0 + here->DIOcapCurrent) = capd; if(SenCond){ *(ckt->CKTstate0 + here->DIOcurrent) = cd; *(ckt->CKTstate0 + here->DIOconduct) = gd; #ifdef SENSDEBUG printf("storing small signal parameters\n"); printf("cd = %.7e,vd = %.7e\n",cd,vd); printf("capd = %.7e ,gd = %.7e \n",capd,gd); #endif /* SENSDEBUG */ } continue; } /* * transient analysis */ if(SenCond && (ckt->CKTsenInfo->SENmode == TRANSEN)){ *(ckt->CKTstate0 + here->DIOcurrent) = cd; #ifdef SENSDEBUG printf("storing parameters for transient sensitivity\n" ); printf("qd = %.7e, capd = %.7e,cd = %.7e\n", *(ckt->CKTstate0 + here->DIOcapCharge),capd,cd); #endif /* SENSDEBUG */ continue; } if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->DIOcapCharge) = *(ckt->CKTstate0 + here->DIOcapCharge); } error = NIintegrate(ckt,&geq,&ceq,capd,here->DIOcapCharge); if(error) return(error); gd=gd+geq; cd=cd+*(ckt->CKTstate0 + here->DIOcapCurrent); if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->DIOcapCurrent) = *(ckt->CKTstate0 + here->DIOcapCurrent); } } } if(SenCond) goto next2; /* * check convergence */ if ( (!(ckt->CKTmode & MODEINITFIX)) || (!(here->DIOoff)) ) { if (Check == 1) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; } } next2: *(ckt->CKTstate0 + here->DIOvoltage) = vd; *(ckt->CKTstate0 + here->DIOcurrent) = cd; *(ckt->CKTstate0 + here->DIOconduct) = gd; if(SenCond) continue; #ifndef NOBYPASS load: #endif /* * load current vector */ cdeq=cd-gd*vd; *(ckt->CKTrhs + here->DIOnegNode) += cdeq; *(ckt->CKTrhs + here->DIOposPrimeNode) -= cdeq; /* * load matrix */ *(here->DIOposPosPtr) += gspr; *(here->DIOnegNegPtr) += gd; *(here->DIOposPrimePosPrimePtr) += (gd + gspr); *(here->DIOposPosPrimePtr) -= gspr; *(here->DIOnegPosPrimePtr) -= gd; *(here->DIOposPrimePosPtr) -= gspr; *(here->DIOposPrimeNegPtr) -= gd; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/dio/diosetup.c0000644000175000017500000002102713546075722021740 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes Modified by Paolo Nenzi 2003 and Dietmar Warning 2012 **********/ /* load the diode structure with those pointers needed later * for fast matrix loading */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "diodefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int DIOsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { DIOmodel *model = (DIOmodel*)inModel; DIOinstance *here; int error; CKTnode *tmp; /* loop through all the diode models */ for( ; model != NULL; model = DIOnextModel(model)) { if(!model->DIOlevelGiven) { model->DIOlevel = 1; } if(!model->DIOemissionCoeffGiven) { model->DIOemissionCoeff = 1; } if(!model->DIOsatCurGiven) { model->DIOsatCur = 1e-14; } if(!model->DIOsatSWCurGiven) { model->DIOsatSWCur = 0.0; } if(!model->DIOswEmissionCoeffGiven) { model->DIOswEmissionCoeff = 1; } if(!model->DIObreakdownCurrentGiven) { model->DIObreakdownCurrent = 1e-3; } if(!model->DIOjunctionPotGiven){ model->DIOjunctionPot = 1; } if(!model->DIOgradingCoeffGiven) { model->DIOgradingCoeff = .5; } if(!model->DIOgradCoeffTemp1Given) { model->DIOgradCoeffTemp1 = 0.0; } if(!model->DIOgradCoeffTemp2Given) { model->DIOgradCoeffTemp2 = 0.0; } if(!model->DIOdepletionCapCoeffGiven) { model->DIOdepletionCapCoeff = .5; } if(!model->DIOdepletionSWcapCoeffGiven) { model->DIOdepletionSWcapCoeff = .5; } if(!model->DIOtransitTimeGiven) { model->DIOtransitTime = 0; } if(!model->DIOtranTimeTemp1Given) { model->DIOtranTimeTemp1 = 0.0; } if(!model->DIOtranTimeTemp2Given) { model->DIOtranTimeTemp2 = 0.0; } if(!model->DIOjunctionCapGiven) { model->DIOjunctionCap = 0; } if(!model->DIOjunctionSWCapGiven) { model->DIOjunctionSWCap = 0; } if(!model->DIOjunctionSWPotGiven){ model->DIOjunctionSWPot = 1; } if(!model->DIOgradingSWCoeffGiven) { model->DIOgradingSWCoeff = .33; } if(!model->DIOforwardKneeCurrentGiven) { model->DIOforwardKneeCurrent = 0.0; } if(!model->DIOreverseKneeCurrentGiven) { model->DIOreverseKneeCurrent = 0.0; } if(!model->DIObrkdEmissionCoeffGiven) { model->DIObrkdEmissionCoeff = model->DIOemissionCoeff; } if(!model->DIOtlevGiven) { model->DIOtlev = 0; } if(!model->DIOtlevcGiven) { model->DIOtlevc = 0; } if(!model->DIOactivationEnergyGiven) { model->DIOactivationEnergy = 1.11; } if(!model->DIOsaturationCurrentExpGiven) { model->DIOsaturationCurrentExp = 3; } if(!model->DIOctaGiven) { model->DIOcta = 0.0; } if(!model->DIOctpGiven) { model->DIOctp = 0.0; } if(!model->DIOtpbGiven) { model->DIOtpb = 0.0; } if(!model->DIOtphpGiven) { model->DIOtphp = 0.0; } if(!model->DIOfNcoefGiven) { model->DIOfNcoef = 0.0; } if(!model->DIOfNexpGiven) { model->DIOfNexp = 1.0; } if(!model->DIOresistTemp1Given) { model->DIOresistTemp1 = 0.0; } if(!model->DIOresistTemp2Given) { model->DIOresistTemp2 = 0.0; } if(!model->DIOtcvGiven) { model->DIOtcv = 0.0; } if(!model->DIOareaGiven) { model->DIOarea = 1.0; } if(!model->DIOpjGiven) { model->DIOpj = 0.0; } if(!model->DIOtunSatCurGiven) { model->DIOtunSatCur = 0.0; } if(!model->DIOtunSatSWCurGiven) { model->DIOtunSatSWCur = 0.0; } if(!model->DIOtunEmissionCoeffGiven) { model->DIOtunEmissionCoeff = 30.0; } if(!model->DIOtunSaturationCurrentExpGiven) { model->DIOtunSaturationCurrentExp = 3.0; } if(!model->DIOtunEGcorrectionFactorGiven) { model->DIOtunEGcorrectionFactor = 1.0; } if(!model->DIOfv_maxGiven) { model->DIOfv_max = 1e99; } if(!model->DIObv_maxGiven) { model->DIObv_max = 1e99; } if(!model->DIOrecEmissionCoeffGiven) { model->DIOrecEmissionCoeff = 1; } if(!model->DIOrecSatCurGiven) { model->DIOrecSatCur = 1e-14; } /* loop through all the instances of the model */ for (here = DIOinstances(model); here != NULL ; here=DIOnextInstance(here)) { if(!here->DIOareaGiven) { if((!here->DIOwGiven) && (!here->DIOlGiven)) { here->DIOarea = model->DIOarea; } else { here->DIOarea = 1; } } if(!here->DIOpjGiven) { if((!here->DIOwGiven) && (!here->DIOlGiven)) { here->DIOpj = model->DIOpj; } else { here->DIOpj = 0; } } if(!here->DIOmGiven) { here->DIOm = 1; } here->DIOarea = here->DIOarea * here->DIOm; here->DIOpj = here->DIOpj * here->DIOm; if (model->DIOlevel == 3) { if((here->DIOwGiven) && (here->DIOlGiven)) { here->DIOarea = here->DIOw * here->DIOl * here->DIOm; here->DIOpj = (2 * here->DIOw + 2 * here->DIOl) * here->DIOm; } } here->DIOforwardKneeCurrent = model->DIOforwardKneeCurrent * here->DIOarea; here->DIOreverseKneeCurrent = model->DIOreverseKneeCurrent * here->DIOarea; here->DIOjunctionCap = model->DIOjunctionCap * here->DIOarea; here->DIOjunctionSWCap = model->DIOjunctionSWCap * here->DIOpj; here->DIOstate = *states; *states += DIOnumStates; if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN) ){ *states += DIOnumSenStates * (ckt->CKTsenInfo->SENparms); } if(model->DIOresist == 0) { here->DIOposPrimeNode = here->DIOposNode; } else if(here->DIOposPrimeNode == 0) { CKTnode *tmpNode; IFuid tmpName; error = CKTmkVolt(ckt,&tmp,here->DIOname,"internal"); if(error) return(error); here->DIOposPrimeNode = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(DIOposPosPrimePtr,DIOposNode,DIOposPrimeNode); TSTALLOC(DIOnegPosPrimePtr,DIOnegNode,DIOposPrimeNode); TSTALLOC(DIOposPrimePosPtr,DIOposPrimeNode,DIOposNode); TSTALLOC(DIOposPrimeNegPtr,DIOposPrimeNode,DIOnegNode); TSTALLOC(DIOposPosPtr,DIOposNode,DIOposNode); TSTALLOC(DIOnegNegPtr,DIOnegNode,DIOnegNode); TSTALLOC(DIOposPrimePosPrimePtr,DIOposPrimeNode,DIOposPrimeNode); } } return(OK); } int DIOunsetup( GENmodel *inModel, CKTcircuit *ckt) { DIOmodel *model; DIOinstance *here; for (model = (DIOmodel *)inModel; model != NULL; model = DIOnextModel(model)) { for (here = DIOinstances(model); here != NULL; here=DIOnextInstance(here)) { if (here->DIOposPrimeNode > 0 && here->DIOposPrimeNode != here->DIOposNode) CKTdltNNum(ckt, here->DIOposPrimeNode); here->DIOposPrimeNode = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/dio/diosprt.c0000644000175000017500000000250313546075722021566 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ /* */ /* Pretty print the sensitivity info for all * the diodes in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "diodefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" void DIOsPrint(GENmodel *inModel, CKTcircuit *ckt) { DIOmodel *model = (DIOmodel*)inModel; DIOinstance *here; printf("DIOS-----------------\n"); /* loop through all the diode models */ for( ; model != NULL; model = DIOnextModel(model)) { printf("Model name:%s\n",model->DIOmodName); /* loop through all the instances of the model */ for (here = DIOinstances(model); here != NULL ; here=DIOnextInstance(here)) { printf(" Instance name:%s\n",here->DIOname); printf(" Positive, negative nodes: %s, %s\n", CKTnodName(ckt,here->DIOposNode),CKTnodName(ckt,here->DIOnegNode)); printf(" Area: %g ",here->DIOarea); printf(here->DIOareaGiven ? "(specified)\n" : "(default)\n"); printf(" DIOsenParmNo:%d\n",here->DIOsenParmNo); } } } tmpk8ny_4pz/src/spicelib/devices/dio/diompar.c0000644000175000017500000001711413546075722021541 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified by Paolo Nenzi 2003 and Dietmar Warning 2012 **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "diodefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int DIOmParam(int param, IFvalue *value, GENmodel *inModel) { DIOmodel *model = (DIOmodel*)inModel; switch(param) { case DIO_MOD_LEVEL: model->DIOlevel = value->iValue; model->DIOlevelGiven = TRUE; break; case DIO_MOD_IS: model->DIOsatCur = value->rValue; model->DIOsatCurGiven = TRUE; break; case DIO_MOD_JSW: model->DIOsatSWCur = value->rValue; model->DIOsatSWCurGiven = TRUE; break; case DIO_MOD_TNOM: model->DIOnomTemp = value->rValue+CONSTCtoK; model->DIOnomTempGiven = TRUE; break; case DIO_MOD_RS: model->DIOresist = value->rValue; model->DIOresistGiven = TRUE; break; case DIO_MOD_TRS: model->DIOresistTemp1 = value->rValue; model->DIOresistTemp1Given = TRUE; break; case DIO_MOD_TRS2: model->DIOresistTemp2 = value->rValue; model->DIOresistTemp2Given = TRUE; break; case DIO_MOD_N: model->DIOemissionCoeff = value->rValue; model->DIOemissionCoeffGiven = TRUE; break; case DIO_MOD_NS: model->DIOswEmissionCoeff = value->rValue; model->DIOswEmissionCoeffGiven = TRUE; break; case DIO_MOD_TT: model->DIOtransitTime = value->rValue; model->DIOtransitTimeGiven = TRUE; break; case DIO_MOD_TTT1: model->DIOtranTimeTemp1 = value->rValue; model->DIOtranTimeTemp1Given = TRUE; break; case DIO_MOD_TTT2: model->DIOtranTimeTemp2 = value->rValue; model->DIOtranTimeTemp2Given = TRUE; break; case DIO_MOD_CJO: model->DIOjunctionCap = value->rValue; model->DIOjunctionCapGiven = TRUE; break; case DIO_MOD_VJ: model->DIOjunctionPot = value->rValue; model->DIOjunctionPotGiven = TRUE; break; case DIO_MOD_M: model->DIOgradingCoeff = value->rValue; model->DIOgradingCoeffGiven = TRUE; break; case DIO_MOD_TM1: model->DIOgradCoeffTemp1 = value->rValue; model->DIOgradCoeffTemp1Given = TRUE; break; case DIO_MOD_TM2: model->DIOgradCoeffTemp2 = value->rValue; model->DIOgradCoeffTemp2Given = TRUE; break; case DIO_MOD_CJSW: model->DIOjunctionSWCap = value->rValue; model->DIOjunctionSWCapGiven = TRUE; break; case DIO_MOD_VJSW: model->DIOjunctionSWPot = value->rValue; model->DIOjunctionSWPotGiven = TRUE; break; case DIO_MOD_MJSW: model->DIOgradingSWCoeff = value->rValue; model->DIOgradingSWCoeffGiven = TRUE; break; case DIO_MOD_IKF: model->DIOforwardKneeCurrent = value->rValue; model->DIOforwardKneeCurrentGiven = TRUE; break; case DIO_MOD_IKR: model->DIOreverseKneeCurrent = value->rValue; model->DIOreverseKneeCurrentGiven = TRUE; break; case DIO_MOD_NBV: model->DIObrkdEmissionCoeff = value->rValue; model->DIObrkdEmissionCoeffGiven = TRUE; break; case DIO_MOD_AREA: model->DIOarea = value->rValue; model->DIOareaGiven = TRUE; break; case DIO_MOD_PJ: model->DIOpj = value->rValue; model->DIOpjGiven = TRUE; break; case DIO_MOD_TLEV: model->DIOtlev = value->iValue; model->DIOtlevGiven = TRUE; break; case DIO_MOD_TLEVC: model->DIOtlevc = value->iValue; model->DIOtlevcGiven = TRUE; break; case DIO_MOD_EG: model->DIOactivationEnergy = value->rValue; model->DIOactivationEnergyGiven = TRUE; break; case DIO_MOD_XTI: model->DIOsaturationCurrentExp = value->rValue; model->DIOsaturationCurrentExpGiven = TRUE; break; case DIO_MOD_CTA: model->DIOcta = value->rValue; model->DIOctaGiven = TRUE; break; case DIO_MOD_CTP: model->DIOctp = value->rValue; model->DIOctpGiven = TRUE; break; case DIO_MOD_TPB: model->DIOtpb = value->rValue; model->DIOtpbGiven = TRUE; break; case DIO_MOD_TPHP: model->DIOtphp = value->rValue; model->DIOtphpGiven = TRUE; break; case DIO_MOD_FC: model->DIOdepletionCapCoeff = value->rValue; model->DIOdepletionCapCoeffGiven = TRUE; break; case DIO_MOD_FCS: model->DIOdepletionSWcapCoeff = value->rValue; model->DIOdepletionSWcapCoeffGiven = TRUE; break; case DIO_MOD_BV: model->DIObreakdownVoltage = value->rValue; model->DIObreakdownVoltageGiven = TRUE; break; case DIO_MOD_IBV: model->DIObreakdownCurrent = value->rValue; model->DIObreakdownCurrentGiven = TRUE; break; case DIO_MOD_TCV: model->DIOtcv = value->rValue; model->DIOtcvGiven = TRUE; break; case DIO_MOD_KF: model->DIOfNcoef = value->rValue; model->DIOfNcoefGiven = TRUE; break; case DIO_MOD_AF: model->DIOfNexp = value->rValue; model->DIOfNexpGiven = TRUE; break; case DIO_MOD_JTUN: model->DIOtunSatCur = value->rValue; model->DIOtunSatCurGiven = TRUE; break; case DIO_MOD_JTUNSW: model->DIOtunSatSWCur = value->rValue; model->DIOtunSatSWCurGiven = TRUE; break; case DIO_MOD_NTUN: model->DIOtunEmissionCoeff = value->rValue; model->DIOtunEmissionCoeffGiven = TRUE; break; case DIO_MOD_XTITUN: model->DIOtunSaturationCurrentExp = value->rValue; model->DIOtunSaturationCurrentExpGiven = TRUE; break; case DIO_MOD_KEG: model->DIOtunEGcorrectionFactor = value->rValue; model->DIOtunEGcorrectionFactorGiven = TRUE; break; case DIO_MOD_FV_MAX: model->DIOfv_max = value->rValue; model->DIOfv_maxGiven = TRUE; break; case DIO_MOD_BV_MAX: model->DIObv_max = value->rValue; model->DIObv_maxGiven = TRUE; break; case DIO_MOD_ISR: model->DIOrecSatCur = value->rValue; model->DIOrecSatCurGiven = TRUE; break; case DIO_MOD_NR: model->DIOrecEmissionCoeff = value->rValue; model->DIOrecEmissionCoeffGiven = TRUE; break; case DIO_MOD_D: /* no action - we already know we are a diode, but this */ /* makes life easier for spice-2 like parsers */ break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/dio/diotemp.c0000644000175000017500000003156713546075722021557 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes Modified by Paolo Nenzi 2003 and Dietmar Warning 2012 **********/ /* perform the temperature update to the diode */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "diodefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/cpdefs.h" int DIOtemp(GENmodel *inModel, CKTcircuit *ckt) { DIOmodel *model = (DIOmodel*)inModel; double xfc, xfcs; double vte; double cbv; double xbv; double xcbv; double tol; double vt; double vtnom; DIOinstance *here; int iter; double dt; double factor; double tBreakdownVoltage; double gclimit; if (!cp_getvar("DIOgradingCoeffMax", CP_REAL, &gclimit, 0)) gclimit = 0.9; /* loop through all the diode models */ for( ; model != NULL; model = DIOnextModel(model)) { if(!model->DIOnomTempGiven) { model->DIOnomTemp = ckt->CKTnomTemp; } vtnom = CONSTKoverQ * model->DIOnomTemp; /* limit grading coeff to max of .9, set new limit with variable DIOgradingCoeffMax */ if(model->DIOgradingCoeff>gclimit) { SPfrontEnd->IFerrorf (ERR_WARNING, "%s: grading coefficient too large, limited to %g", model->DIOmodName, gclimit); model->DIOgradingCoeff=gclimit; } /* limit activation energy to min of .1 */ if(model->DIOactivationEnergy<.1) { SPfrontEnd->IFerrorf (ERR_WARNING, "%s: activation energy too small, limited to 0.1", model->DIOmodName); model->DIOactivationEnergy=.1; } /* limit depletion cap coeff to max of .95 */ if(model->DIOdepletionCapCoeff>.95) { SPfrontEnd->IFerrorf (ERR_WARNING, "%s: coefficient Fc too large, limited to 0.95", model->DIOmodName); model->DIOdepletionCapCoeff=.95; } /* limit sidewall depletion cap coeff to max of .95 */ if(model->DIOdepletionSWcapCoeff>.95) { SPfrontEnd->IFerrorf (ERR_WARNING, "%s: coefficient Fcs too large, limited to 0.95", model->DIOmodName); model->DIOdepletionSWcapCoeff=.95; } /* set lower limit of saturation current */ if (model->DIOsatCur < ckt->CKTepsmin) model->DIOsatCur = ckt->CKTepsmin; if((!model->DIOresistGiven) || (model->DIOresist==0)) { model->DIOconductance = 0.0; } else { model->DIOconductance = 1/model->DIOresist; } xfc=log(1-model->DIOdepletionCapCoeff); xfcs=log(1-model->DIOdepletionSWcapCoeff); for(here=DIOinstances(model);here;here=DIOnextInstance(here)) { double egfet1,arg1,fact1,pbfact1,pbo,gmaold,pboSW,gmaSWold; double fact2,pbfact,arg,egfet,gmanew,gmaSWnew; /* loop through all the instances */ if(!here->DIOdtempGiven) here->DIOdtemp = 0.0; if(!here->DIOtempGiven) here->DIOtemp = ckt->CKTtemp + here->DIOdtemp; dt = here->DIOtemp - model->DIOnomTemp; /* Junction grading temperature adjust */ factor = 1.0 + (model->DIOgradCoeffTemp1 * dt) + (model->DIOgradCoeffTemp2 * dt * dt); here->DIOtGradingCoeff = model->DIOgradingCoeff * factor; /* limit temperature adjusted grading coeff * to max of .9, or set new limit with variable DIOgradingCoeffMax */ if(here->DIOtGradingCoeff>gclimit) { SPfrontEnd->IFerrorf (ERR_WARNING, "%s: temperature adjusted grading coefficient too large, limited to %g", here->DIOname, gclimit); here->DIOtGradingCoeff=gclimit; } vt = CONSTKoverQ * here->DIOtemp; /* this part gets really ugly - I won't even try to * explain these equations */ fact2 = here->DIOtemp/REFTEMP; egfet = 1.16-(7.02e-4*here->DIOtemp*here->DIOtemp)/ (here->DIOtemp+1108); arg = -egfet/(2*CONSTboltz*here->DIOtemp) + 1.1150877/(CONSTboltz*(REFTEMP+REFTEMP)); pbfact = -2*vt*(1.5*log(fact2)+CHARGE*arg); egfet1 = 1.16 - (7.02e-4*model->DIOnomTemp*model->DIOnomTemp)/ (model->DIOnomTemp+1108); arg1 = -egfet1/(CONSTboltz*2*model->DIOnomTemp) + 1.1150877/(2*CONSTboltz*REFTEMP); fact1 = model->DIOnomTemp/REFTEMP; pbfact1 = -2 * vtnom*(1.5*log(fact1)+CHARGE*arg1); if (model->DIOtlevc == 0) { pbo = (model->DIOjunctionPot-pbfact1)/fact1; gmaold = (model->DIOjunctionPot-pbo)/pbo; here->DIOtJctCap = here->DIOjunctionCap / (1+here->DIOtGradingCoeff* (400e-6*(model->DIOnomTemp-REFTEMP)-gmaold) ); here->DIOtJctPot = pbfact+fact2*pbo; gmanew = (here->DIOtJctPot-pbo)/pbo; here->DIOtJctCap *= 1+here->DIOtGradingCoeff* (400e-6*(here->DIOtemp-REFTEMP)-gmanew); } else if (model->DIOtlevc == 1) { here->DIOtJctPot = model->DIOjunctionPot - model->DIOtpb*(here->DIOtemp-REFTEMP); here->DIOtJctCap = here->DIOjunctionCap * (1+model->DIOcta*(here->DIOtemp-REFTEMP)); } if (model->DIOtlevc == 0) { pboSW = (model->DIOjunctionSWPot-pbfact1)/fact1; gmaSWold = (model->DIOjunctionSWPot-pboSW)/pboSW; here->DIOtJctSWCap = here->DIOjunctionSWCap / (1+model->DIOgradingSWCoeff* (400e-6*(model->DIOnomTemp-REFTEMP)-gmaSWold) ); here->DIOtJctSWPot = pbfact+fact2*pboSW; gmaSWnew = (here->DIOtJctSWPot-pboSW)/pboSW; here->DIOtJctSWCap *= 1+model->DIOgradingSWCoeff* (400e-6*(here->DIOtemp-REFTEMP)-gmaSWnew); } else if (model->DIOtlevc == 1) { here->DIOtJctSWPot = model->DIOjunctionSWPot - model->DIOtphp*(here->DIOtemp-REFTEMP); here->DIOtJctSWCap = here->DIOjunctionSWCap * (1+model->DIOctp*(here->DIOtemp-REFTEMP)); } here->DIOtSatCur = model->DIOsatCur * here->DIOarea * exp( ((here->DIOtemp/model->DIOnomTemp)-1) * model->DIOactivationEnergy/(model->DIOemissionCoeff*vt) + model->DIOsaturationCurrentExp/model->DIOemissionCoeff * log(here->DIOtemp/model->DIOnomTemp) ); here->DIOtSatSWCur = model->DIOsatSWCur * here->DIOpj * exp( ((here->DIOtemp/model->DIOnomTemp)-1) * model->DIOactivationEnergy/(model->DIOswEmissionCoeff*vt) + model->DIOsaturationCurrentExp/model->DIOswEmissionCoeff * log(here->DIOtemp/model->DIOnomTemp) ); here->DIOtTunSatCur = model->DIOtunSatCur * here->DIOarea * exp( ((here->DIOtemp/model->DIOnomTemp)-1) * model->DIOtunEGcorrectionFactor*model->DIOactivationEnergy/vt + model->DIOtunSaturationCurrentExp * log(here->DIOtemp/model->DIOnomTemp) ); here->DIOtTunSatSWCur = model->DIOtunSatSWCur * here->DIOpj * exp( ((here->DIOtemp/model->DIOnomTemp)-1) * model->DIOtunEGcorrectionFactor*model->DIOactivationEnergy/vt + model->DIOtunSaturationCurrentExp * log(here->DIOtemp/model->DIOnomTemp) ); here->DIOtRecSatCur = model->DIOrecSatCur * here->DIOarea * exp( ((here->DIOtemp/model->DIOnomTemp)-1) * model->DIOactivationEnergy/(model->DIOrecEmissionCoeff*vt) + model->DIOsaturationCurrentExp/model->DIOrecEmissionCoeff * log(here->DIOtemp/model->DIOnomTemp) ); /* the defintion of f1, just recompute after temperature adjusting * all the variables used in it */ here->DIOtF1=here->DIOtJctPot* (1-exp((1-here->DIOtGradingCoeff)*xfc))/ (1-here->DIOtGradingCoeff); /* same for Depletion Capacitance */ here->DIOtDepCap=model->DIOdepletionCapCoeff* here->DIOtJctPot; here->DIOtDepSWCap=model->DIOdepletionSWcapCoeff* here->DIOtJctSWPot; /* and Vcrit */ vte=model->DIOemissionCoeff*vt; here->DIOtVcrit = vte * log(vte/(CONSTroot2*here->DIOtSatCur)); /* limit junction potential to max of 1/FC */ if(here->DIOtDepCap > 1.0) { here->DIOtJctPot=1.0/model->DIOdepletionCapCoeff; here->DIOtDepCap=model->DIOdepletionCapCoeff*here->DIOtJctPot; SPfrontEnd->IFerrorf (ERR_WARNING, "%s: junction potential VJ too large, limited to %f", model->DIOmodName, here->DIOtJctPot); } /* limit sidewall junction potential to max of 1/FCS */ if(here->DIOtDepSWCap > 1.0) { here->DIOtJctSWPot=1.0/model->DIOdepletionSWcapCoeff; here->DIOtDepSWCap=model->DIOdepletionSWcapCoeff*here->DIOtJctSWPot; SPfrontEnd->IFerrorf (ERR_WARNING, "%s: junction potential VJS too large, limited to %f", model->DIOmodName, here->DIOtJctSWPot); } /* and now to compute the breakdown voltage, again, using * temperature adjusted basic parameters */ if (model->DIObreakdownVoltageGiven){ if (model->DIOtlev == 0) { tBreakdownVoltage = model->DIObreakdownVoltage - model->DIOtcv * dt; } else { tBreakdownVoltage = model->DIObreakdownVoltage * (1 - model->DIOtcv * dt); } if (model->DIOlevel == 1) { cbv = model->DIObreakdownCurrent; } else { /* level=3 */ cbv = model->DIObreakdownCurrent * here->DIOarea; } if (cbv < here->DIOtSatCur * tBreakdownVoltage/vt) { cbv=here->DIOtSatCur * tBreakdownVoltage/vt; #ifdef TRACE SPfrontEnd->IFerrorf (ERR_WARNING, "%s: breakdown current increased to %g to resolve", here->DIOname, cbv); SPfrontEnd->IFerrorf (ERR_WARNING, "incompatibility with specified saturation current"); #endif xbv=tBreakdownVoltage; } else { tol=ckt->CKTreltol*cbv; xbv=tBreakdownVoltage-model->DIObrkdEmissionCoeff*vt*log(1+cbv/ (here->DIOtSatCur)); iter=0; for(iter=0 ; iter < 25 ; iter++) { xbv=tBreakdownVoltage-model->DIObrkdEmissionCoeff*vt*log(cbv/ (here->DIOtSatCur)+1-xbv/vt); xcbv=here->DIOtSatCur * (exp((tBreakdownVoltage-xbv)/(model->DIObrkdEmissionCoeff*vt))-1+xbv/vt); if (fabs(xcbv-cbv) <= tol) goto matched; } #ifdef TRACE SPfrontEnd->IFerrorf (ERR_WARNING, "%s: unable to match forward and reverse diode regions: bv = %g, ibv = %g", here->DIOname, xbv, xcbv); #endif } matched: here->DIOtBrkdwnV = xbv; } /* transit time temperature adjust */ factor = 1.0 + (model->DIOtranTimeTemp1 * dt) + (model->DIOtranTimeTemp2 * dt * dt); here->DIOtTransitTime = model->DIOtransitTime * factor; /* Series resistance temperature adjust */ here->DIOtConductance = model->DIOconductance; if(model->DIOresistGiven && model->DIOresist!=0.0) { factor = 1.0 + (model->DIOresistTemp1) * dt + (model->DIOresistTemp2 * dt * dt); here->DIOtConductance = model->DIOconductance / factor; } here->DIOtF2=exp((1+here->DIOtGradingCoeff)*xfc); here->DIOtF3=1-model->DIOdepletionCapCoeff* (1+here->DIOtGradingCoeff); here->DIOtF2SW=exp((1+model->DIOgradingSWCoeff)*xfcs); here->DIOtF3SW=1-model->DIOdepletionSWcapCoeff* (1+model->DIOgradingSWCoeff); } /* instance */ } /* model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/dio/diopzld.c0000644000175000017500000000315613546075722021554 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified by Dietmar Warning 2003 **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "diodefs.h" #include "ngspice/suffix.h" int DIOpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { DIOmodel *model = (DIOmodel*)inModel; double gspr; double geq; double xceq; DIOinstance *here; /* loop through all the diode models */ for( ; model != NULL; model = DIOnextModel(model)) { /* loop through all the instances of the model */ for (here = DIOinstances(model); here != NULL ; here=DIOnextInstance(here)) { gspr=here->DIOtConductance*here->DIOarea; geq= *(ckt->CKTstate0 + here->DIOconduct); xceq= *(ckt->CKTstate0 + here->DIOcapCurrent); *(here->DIOposPosPtr ) += gspr; *(here->DIOnegNegPtr ) += geq + xceq * s->real; *(here->DIOnegNegPtr +1 ) += xceq * s->imag; *(here->DIOposPrimePosPrimePtr ) += geq + gspr + xceq * s->real; *(here->DIOposPrimePosPrimePtr +1 ) += xceq * s->imag; *(here->DIOposPosPrimePtr ) -= gspr; *(here->DIOnegPosPrimePtr ) -= geq + xceq * s->real; *(here->DIOnegPosPrimePtr +1 ) -= xceq * s->imag; *(here->DIOposPrimePosPtr ) -= gspr; *(here->DIOposPrimeNegPtr ) -= geq + xceq * s->real; *(here->DIOposPrimeNegPtr +1 ) -= xceq * s->imag; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/dio/dio.c0000644000175000017500000001505213546075722020660 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified by Paolo Nenzi 2003 and Dietmar Warning 2012 **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "diodefs.h" #include "ngspice/suffix.h" IFparm DIOpTable[] = { /* parameters */ IOPU("off", DIO_OFF, IF_FLAG, "Initially off"), IOPU("temp", DIO_TEMP, IF_REAL, "Instance temperature"), IOPU("dtemp", DIO_DTEMP, IF_REAL, "Instance delta temperature"), IOPAU("ic", DIO_IC, IF_REAL, "Initial device voltage"), IOPU("area", DIO_AREA, IF_REAL, "Area factor"), IOPU("pj", DIO_PJ, IF_REAL, "Perimeter factor"), IOPU("w", DIO_W, IF_REAL, "Diode width"), IOPU("l", DIO_L, IF_REAL, "Diode length"), IOPU("m", DIO_M, IF_REAL, "Multiplier"), IP("sens_area",DIO_AREA_SENS,IF_FLAG,"flag to request sensitivity WRT area"), OP("vd", DIO_VOLTAGE,IF_REAL, "Diode voltage"), OP("id", DIO_CURRENT,IF_REAL, "Diode current"), OPR("c", DIO_CURRENT,IF_REAL, "Diode current"), OP("gd", DIO_CONDUCT,IF_REAL, "Diode conductance"), OP("cd", DIO_CAP, IF_REAL, "Diode capacitance"), OPU("charge", DIO_CHARGE, IF_REAL, "Diode capacitor charge"), OPUR("qd", DIO_CHARGE, IF_REAL, "Diode capacitor charge"), OPU("capcur", DIO_CAPCUR, IF_REAL, "Diode capacitor current"), OPU("p", DIO_POWER, IF_REAL, "Diode power"), OPU("sens_dc",DIO_QUEST_SENS_DC, IF_REAL, "dc sensitivity "), OPU("sens_real", DIO_QUEST_SENS_REAL,IF_REAL, "dc sens. and real part of ac sensitivity"), OPU("sens_imag", DIO_QUEST_SENS_IMAG,IF_REAL, "imag part of ac sensitivity "), OPU("sens_mag", DIO_QUEST_SENS_MAG, IF_REAL, "sensitivity of ac magnitude"), OPU("sens_ph", DIO_QUEST_SENS_PH, IF_REAL, "sensitivity of ac phase"), OPU("sens_cplx", DIO_QUEST_SENS_CPLX,IF_COMPLEX,"ac sensitivity") }; IFparm DIOmPTable[] = { /* model parameters */ IOP( "level", DIO_MOD_LEVEL, IF_INTEGER, "Diode level selector"), IOP( "is", DIO_MOD_IS, IF_REAL, "Saturation current"), IOPR( "js", DIO_MOD_IS, IF_REAL, "Saturation current"), IOP( "jsw", DIO_MOD_JSW, IF_REAL, "Sidewall Saturation current"), IOPU( "tnom",DIO_MOD_TNOM,IF_REAL, "Parameter measurement temperature"), IOPUR("tref",DIO_MOD_TNOM,IF_REAL, "Parameter measurement temperature"), IOP( "rs", DIO_MOD_RS, IF_REAL, "Ohmic resistance"), IOP( "trs", DIO_MOD_TRS, IF_REAL, "Ohmic resistance 1st order temp. coeff."), IOPR( "trs1", DIO_MOD_TRS, IF_REAL, "Ohmic resistance 1st order temp. coeff."), IOP( "trs2", DIO_MOD_TRS2, IF_REAL, "Ohmic resistance 2nd order temp. coeff."), IOP( "n", DIO_MOD_N, IF_REAL, "Emission Coefficient"), IOP( "ns", DIO_MOD_NS, IF_REAL, "Sidewall emission Coefficient"), IOPA( "tt", DIO_MOD_TT, IF_REAL, "Transit Time"), IOPA( "ttt1", DIO_MOD_TTT1, IF_REAL, "Transit Time 1st order temp. coeff."), IOPA( "ttt2", DIO_MOD_TTT2, IF_REAL, "Transit Time 2nd order temp. coeff."), IOPA( "cjo", DIO_MOD_CJO, IF_REAL, "Junction capacitance"), IOPAR( "cj0",DIO_MOD_CJO, IF_REAL, "Junction capacitance"), IOPAR( "cj", DIO_MOD_CJO, IF_REAL, "Junction capacitance"), IOP( "vj", DIO_MOD_VJ, IF_REAL, "Junction potential"), IOPR( "pb", DIO_MOD_VJ, IF_REAL, "Junction potential"), IOP( "m", DIO_MOD_M, IF_REAL, "Grading coefficient"), IOPR( "mj", DIO_MOD_M, IF_REAL, "Grading coefficient"), IOP( "tm1", DIO_MOD_TM1, IF_REAL, "Grading coefficient 1st temp. coeff."), IOP( "tm2", DIO_MOD_TM2, IF_REAL, "Grading coefficient 2nd temp. coeff."), IOP( "cjp", DIO_MOD_CJSW, IF_REAL, "Sidewall junction capacitance"), IOPR( "cjsw", DIO_MOD_CJSW, IF_REAL, "Sidewall junction capacitance"), IOP( "php", DIO_MOD_VJSW, IF_REAL, "Sidewall junction potential"), IOP( "mjsw", DIO_MOD_MJSW, IF_REAL, "Sidewall Grading coefficient"), IOP( "ikf", DIO_MOD_IKF, IF_REAL, "Forward Knee current"), IOPR( "ik", DIO_MOD_IKF, IF_REAL, "Forward Knee current"), IOP( "ikr", DIO_MOD_IKR, IF_REAL, "Reverse Knee current"), IOP( "nbv", DIO_MOD_NBV, IF_REAL, "Breakdown Emission Coefficient"), IOP("area", DIO_MOD_AREA, IF_REAL, "Area factor"), IOP( "pj", DIO_MOD_PJ, IF_REAL, "Perimeter factor"), IOP( "tlev", DIO_MOD_TLEV, IF_INTEGER, "Diode temperature equation selector"), IOP( "tlevc", DIO_MOD_TLEVC, IF_INTEGER, "Diode temperature equation selector"), IOP( "eg", DIO_MOD_EG, IF_REAL, "Activation energy"), IOP( "xti", DIO_MOD_XTI, IF_REAL, "Saturation current temperature exp."), IOP( "cta", DIO_MOD_CTA, IF_REAL, "Area junction temperature coefficient"), IOPR( "ctc", DIO_MOD_CTA, IF_REAL, "Area junction capacitance temperature coefficient"), IOP( "ctp", DIO_MOD_CTP, IF_REAL, "Perimeter junction capacitance temperature coefficient"), IOP( "tpb", DIO_MOD_TPB, IF_REAL, "Area junction potential temperature coefficient"), IOPR( "tvj", DIO_MOD_TPB, IF_REAL, "Area junction potential temperature coefficient"), IOP( "tphp", DIO_MOD_TPHP, IF_REAL, "Perimeter junction potential temperature coefficient"), IOP( "jtun", DIO_MOD_JTUN, IF_REAL, "Tunneling saturation current"), IOP( "jtunsw", DIO_MOD_JTUNSW, IF_REAL, "Tunneling sidewall saturation current"), IOP( "ntun", DIO_MOD_NTUN, IF_REAL, "Tunneling emission coefficient"), IOP( "xtitun", DIO_MOD_XTITUN, IF_REAL, "Tunneling saturation current exponential"), IOP( "keg", DIO_MOD_KEG, IF_REAL, "EG correction factor for tunneling"), IOP( "kf", DIO_MOD_KF, IF_REAL, "flicker noise coefficient"), IOP( "af", DIO_MOD_AF, IF_REAL, "flicker noise exponent"), IOP( "fc", DIO_MOD_FC, IF_REAL, "Forward bias junction fit parameter"), IOP( "fcs", DIO_MOD_FCS, IF_REAL, "Forward bias sidewall junction fit parameter"), IOP( "bv", DIO_MOD_BV, IF_REAL, "Reverse breakdown voltage"), IOP( "ibv", DIO_MOD_IBV, IF_REAL, "Current at reverse breakdown voltage"), IOPR( "ib", DIO_MOD_IBV, IF_REAL, "Current at reverse breakdown voltage"), IOP( "tcv", DIO_MOD_TCV, IF_REAL, "Reverse breakdown voltage temperature coefficient"), OPU( "cond", DIO_MOD_COND,IF_REAL, "Ohmic conductance"), IOP( "fv_max", DIO_MOD_FV_MAX, IF_REAL, "maximum voltage in forward direction"), IOP( "bv_max", DIO_MOD_BV_MAX, IF_REAL, "maximum voltage in reverse direction"), IOP( "isr", DIO_MOD_ISR, IF_REAL, "Recombination saturation current"), IOP( "nr", DIO_MOD_NR, IF_REAL, "Recombination current emission coefficient"), IP( "d", DIO_MOD_D, IF_FLAG, "Diode model") }; char *DIOnames[] = { "D+", "D-" }; int DIOnSize = NUMELEMS(DIOnames); int DIOpTSize = NUMELEMS(DIOpTable); int DIOmPTSize = NUMELEMS(DIOmPTable); int DIOiSize = sizeof(DIOinstance); int DIOmSize = sizeof(DIOmodel); tmpk8ny_4pz/src/spicelib/devices/dio/diodisto.c0000644000175000017500000002067313546075722021730 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "diodefs.h" #include "ngspice/sperror.h" #include "ngspice/distodef.h" #include "ngspice/suffix.h" int DIOdisto( int mode, GENmodel *genmodel, CKTcircuit *ckt) /* assuming here that ckt->CKTomega has been initialised to * the correct value */ { DIOmodel *model = (DIOmodel *) genmodel; DISTOAN* job = (DISTOAN*) ckt->CKTcurJob; double g2,g3; double cdiff2,cdiff3; double cjunc2,cjunc3; double r1h1x,i1h1x; double r1h2x, i1h2x; double i1hm2x; double r2h11x,i2h11x; double r2h1m2x,i2h1m2x; double temp, itemp; DIOinstance *here; if (mode == D_SETUP) return(DIOdSetup(model,ckt)); if ((mode == D_TWOF1) || (mode == D_THRF1) || (mode == D_F1PF2) || (mode == D_F1MF2) || (mode == D_2F1MF2)) { /* loop through all the DIO models */ for( ; model != NULL; model = DIOnextModel(model)) { /* loop through all the instances of the model */ for (here = DIOinstances(model); here != NULL ; here=DIOnextInstance(here)) { /* loading starts here */ switch (mode) { case D_TWOF1: g2=here->id_x2; cdiff2=here->cdif_x2; cjunc2=here->cjnc_x2; /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->DIOposPrimeNode)) - *(job->r1H1ptr + (here->DIOnegNode)); i1h1x = *(job->i1H1ptr + (here->DIOposPrimeNode)) - *(job->i1H1ptr + (here->DIOnegNode)); /* formulae start here */ temp = D1n2F1(g2,r1h1x,i1h1x); itemp = D1i2F1(g2,r1h1x,i1h1x); /* the above are for the memoryless nonlinearity */ if ((cdiff2 + cjunc2) != 0.0) { temp += - ckt->CKTomega * D1i2F1 (cdiff2+cjunc2,r1h1x,i1h1x); itemp += ckt->CKTomega * D1n2F1 ((cdiff2 + cjunc2),r1h1x,i1h1x); } *(ckt->CKTrhs + (here->DIOposPrimeNode)) -= temp; *(ckt->CKTirhs + (here->DIOposPrimeNode)) -= itemp; *(ckt->CKTrhs + (here->DIOnegNode)) += temp; *(ckt->CKTirhs + (here->DIOnegNode)) += itemp; break; case D_THRF1: g2=here->id_x2; g3=here->id_x3; cdiff2=here->cdif_x2; cdiff3=here->cdif_x3; cjunc2=here->cjnc_x2; cjunc3=here->cjnc_x3; /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->DIOposPrimeNode)) - *(job->r1H1ptr + (here->DIOnegNode)); i1h1x = *(job->i1H1ptr + (here->DIOposPrimeNode)) - *(job->i1H1ptr + (here->DIOnegNode)); /* getting second order kernel at (F1_F1) */ r2h11x = *(job->r2H11ptr + (here->DIOposPrimeNode)) - *(job->r2H11ptr + (here->DIOnegNode)); i2h11x = *(job->i2H11ptr + (here->DIOposPrimeNode)) - *(job->i2H11ptr + (here->DIOnegNode)); /* formulae start here */ temp = D1n3F1(g2,g3,r1h1x,i1h1x,r2h11x, i2h11x); itemp = D1i3F1(g2,g3,r1h1x,i1h1x,r2h11x, i2h11x); /* the above are for the memoryless nonlinearity */ /* the following are for the capacitors */ if ((cdiff2 + cjunc2) != 0.0) { temp += -ckt->CKTomega * D1i3F1 (cdiff2+cjunc2,cdiff3+cjunc3,r1h1x, i1h1x,r2h11x,i2h11x); itemp += ckt->CKTomega * D1n3F1 (cdiff2+cjunc2,cdiff3+cjunc3,r1h1x, i1h1x,r2h11x,i2h11x); } /* end of formulae */ *(ckt->CKTrhs + (here->DIOposPrimeNode)) -= temp; *(ckt->CKTirhs + (here->DIOposPrimeNode)) -= itemp; *(ckt->CKTrhs + (here->DIOnegNode)) += temp; *(ckt->CKTirhs + (here->DIOnegNode)) += itemp; break; case D_F1PF2: g2=here->id_x2; g3=here->id_x3; cdiff2=here->cdif_x2; cdiff3=here->cdif_x3; cjunc2=here->cjnc_x2; cjunc3=here->cjnc_x3; /* getting first order (linear) Volterra kernel for F1*/ r1h1x = *(job->r1H1ptr + (here->DIOposPrimeNode)) - *(job->r1H1ptr + (here->DIOnegNode)); i1h1x = *(job->i1H1ptr + (here->DIOposPrimeNode)) - *(job->i1H1ptr + (here->DIOnegNode)); /* getting first order (linear) Volterra kernel for F2*/ r1h2x = *(job->r1H2ptr + (here->DIOposPrimeNode)) - *(job->r1H2ptr + (here->DIOnegNode)); i1h2x = *(job->i1H2ptr + (here->DIOposPrimeNode)) - *(job->i1H2ptr + (here->DIOnegNode)); /* formulae start here */ temp = D1nF12(g2,r1h1x,i1h1x,r1h2x,i1h2x); itemp = D1iF12(g2,r1h1x,i1h1x,r1h2x,i1h2x); /* the above are for the memoryless nonlinearity */ /* the following are for the capacitors */ if ((cdiff2 + cjunc2) != 0.0) { temp += - ckt->CKTomega * D1iF12 (cdiff2+cjunc2,r1h1x,i1h1x,r1h2x,i1h2x); itemp += ckt->CKTomega * D1nF12 (cdiff2+cjunc2,r1h1x,i1h1x,r1h2x,i1h2x); } /* end of formulae */ *(ckt->CKTrhs + (here->DIOposPrimeNode)) -= temp; *(ckt->CKTirhs + (here->DIOposPrimeNode)) -= itemp; *(ckt->CKTrhs + (here->DIOnegNode)) += temp; *(ckt->CKTirhs + (here->DIOnegNode)) += itemp; break; case D_F1MF2: g2=here->id_x2; g3=here->id_x3; cdiff2=here->cdif_x2; cdiff3=here->cdif_x3; cjunc2=here->cjnc_x2; cjunc3=here->cjnc_x3; /* getting first order (linear) Volterra kernel for F1*/ r1h1x = *(job->r1H1ptr + (here->DIOposPrimeNode)) - *(job->r1H1ptr + (here->DIOnegNode)); i1h1x = *(job->i1H1ptr + (here->DIOposPrimeNode)) - *(job->i1H1ptr + (here->DIOnegNode)); /* getting first order (linear) Volterra kernel for F2*/ r1h2x = *(job->r1H2ptr + (here->DIOposPrimeNode)) - *(job->r1H2ptr + (here->DIOnegNode)); i1hm2x = -(*(job->i1H2ptr + (here->DIOposPrimeNode)) - *(job->i1H2ptr + (here->DIOnegNode))); /* formulae start here */ temp = D1nF12(g2,r1h1x,i1h1x,r1h2x,i1hm2x); itemp = D1iF12(g2,r1h1x,i1h1x,r1h2x,i1hm2x); /* the above are for the memoryless nonlinearity */ /* the following are for the capacitors */ if ((cdiff2 + cjunc2) != 0.0) { temp += - ckt->CKTomega * D1iF12 (cdiff2+cjunc2,r1h1x,i1h1x,r1h2x,i1hm2x); itemp += ckt->CKTomega * D1nF12 (cdiff2+cjunc2,r1h1x,i1h1x,r1h2x,i1hm2x); } /* end of formulae */ *(ckt->CKTrhs + (here->DIOposPrimeNode)) -= temp; *(ckt->CKTirhs + (here->DIOposPrimeNode)) -= itemp; *(ckt->CKTrhs + (here->DIOnegNode)) += temp; *(ckt->CKTirhs + (here->DIOnegNode)) += itemp; break; case D_2F1MF2: g2=here->id_x2; g3=here->id_x3; cdiff2=here->cdif_x2; cdiff3=here->cdif_x3; cjunc2=here->cjnc_x2; cjunc3=here->cjnc_x3; /* getting first order (linear) Volterra kernel at F1*/ r1h1x = *(job->r1H1ptr + (here->DIOposPrimeNode)) - *(job->r1H1ptr + (here->DIOnegNode)); i1h1x = *(job->i1H1ptr + (here->DIOposPrimeNode)) - *(job->i1H1ptr + (here->DIOnegNode)); /* getting first order (linear) Volterra kernel at minusF2*/ r1h2x = *(job->r1H2ptr + (here->DIOposPrimeNode)) - *(job->r1H2ptr + (here->DIOnegNode)); i1hm2x = -(*(job->i1H2ptr + (here->DIOposPrimeNode)) - *(job->i1H2ptr + (here->DIOnegNode))); /* getting second order kernel at (F1_F1) */ r2h11x = *(job->r2H11ptr + (here->DIOposPrimeNode)) - *(job->r2H11ptr + (here->DIOnegNode)); i2h11x = *(job->i2H11ptr + (here->DIOposPrimeNode)) - *(job->i2H11ptr + (here->DIOnegNode)); /* getting second order kernel at (F1_minusF2) */ r2h1m2x = *(job->r2H1m2ptr + (here->DIOposPrimeNode)) - *(job->r2H1m2ptr + (here->DIOnegNode)); i2h1m2x = *(job->i2H1m2ptr + (here->DIOposPrimeNode)) - *(job->i2H1m2ptr + (here->DIOnegNode)); /* formulae start here */ temp = D1n2F12(g2,g3,r1h1x,i1h1x,r1h2x, i1hm2x,r2h11x,i2h11x, r2h1m2x,i2h1m2x); itemp = D1i2F12(g2,g3,r1h1x,i1h1x, r1h2x,i1hm2x,r2h11x,i2h11x, r2h1m2x,i2h1m2x); /* the above are for the memoryless nonlinearity */ /* the following are for the capacitors */ if ((cdiff2 + cjunc2) != 0.0) { temp += -ckt->CKTomega * D1i2F12(cdiff2+cjunc2,cdiff3+cjunc3, r1h1x,i1h1x,r1h2x,i1hm2x,r2h11x, i2h11x,r2h1m2x,i2h1m2x); itemp += ckt->CKTomega * D1n2F12(cdiff2+cjunc2,cdiff3+cjunc3, r1h1x,i1h1x,r1h2x,i1hm2x,r2h11x, i2h11x,r2h1m2x,i2h1m2x); } /* end of formulae */ *(ckt->CKTrhs + (here->DIOposPrimeNode)) -= temp; *(ckt->CKTirhs + (here->DIOposPrimeNode)) -= itemp; *(ckt->CKTrhs + (here->DIOnegNode)) += temp; *(ckt->CKTirhs + (here->DIOnegNode)) += itemp; break; default: ; } } } return(OK); } else return(E_BADPARM); } tmpk8ny_4pz/src/spicelib/devices/bsim1/0000755000175000017500000000000013546075722020176 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/bsim1/b1mpar.c0000644000175000017500000002664713546075722021543 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Hong J. Park, Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "bsim1def.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B1mParam(int param, IFvalue *value, GENmodel *inMod) { B1model *mod = (B1model*)inMod; switch(param) { case BSIM1_MOD_VFB0 : mod->B1vfb0 = value->rValue; mod->B1vfb0Given = TRUE; break; case BSIM1_MOD_VFBL : mod->B1vfbL = value->rValue; mod->B1vfbLGiven = TRUE; break; case BSIM1_MOD_VFBW : mod->B1vfbW = value->rValue; mod->B1vfbWGiven = TRUE; break; case BSIM1_MOD_PHI0 : mod->B1phi0 = value->rValue; mod->B1phi0Given = TRUE; break; case BSIM1_MOD_PHIL : mod->B1phiL = value->rValue; mod->B1phiLGiven = TRUE; break; case BSIM1_MOD_PHIW : mod->B1phiW = value->rValue; mod->B1phiWGiven = TRUE; break; case BSIM1_MOD_K10 : mod->B1K10 = value->rValue; mod->B1K10Given = TRUE; break; case BSIM1_MOD_K1L : mod->B1K1L = value->rValue; mod->B1K1LGiven = TRUE; break; case BSIM1_MOD_K1W : mod->B1K1W = value->rValue; mod->B1K1WGiven = TRUE; break; case BSIM1_MOD_K20 : mod->B1K20 = value->rValue; mod->B1K20Given = TRUE; break; case BSIM1_MOD_K2L : mod->B1K2L = value->rValue; mod->B1K2LGiven = TRUE; break; case BSIM1_MOD_K2W : mod->B1K2W = value->rValue; mod->B1K2WGiven = TRUE; break; case BSIM1_MOD_ETA0 : mod->B1eta0 = value->rValue; mod->B1eta0Given = TRUE; break; case BSIM1_MOD_ETAL : mod->B1etaL = value->rValue; mod->B1etaLGiven = TRUE; break; case BSIM1_MOD_ETAW : mod->B1etaW = value->rValue; mod->B1etaWGiven = TRUE; break; case BSIM1_MOD_ETAB0 : mod->B1etaB0 = value->rValue; mod->B1etaB0Given = TRUE; break; case BSIM1_MOD_ETABL : mod->B1etaBl = value->rValue; mod->B1etaBlGiven = TRUE; break; case BSIM1_MOD_ETABW : mod->B1etaBw = value->rValue; mod->B1etaBwGiven = TRUE; break; case BSIM1_MOD_ETAD0 : mod->B1etaD0 = value->rValue; mod->B1etaD0Given = TRUE; break; case BSIM1_MOD_ETADL : mod->B1etaDl = value->rValue; mod->B1etaDlGiven = TRUE; break; case BSIM1_MOD_ETADW : mod->B1etaDw = value->rValue; mod->B1etaDwGiven = TRUE; break; case BSIM1_MOD_DELTAL : mod->B1deltaL = value->rValue; mod->B1deltaLGiven = TRUE; break; case BSIM1_MOD_DELTAW : mod->B1deltaW = value->rValue; mod->B1deltaWGiven = TRUE; break; case BSIM1_MOD_MOBZERO : mod->B1mobZero = value->rValue; mod->B1mobZeroGiven = TRUE; break; case BSIM1_MOD_MOBZEROB0 : mod->B1mobZeroB0 = value->rValue; mod->B1mobZeroB0Given = TRUE; break; case BSIM1_MOD_MOBZEROBL : mod->B1mobZeroBl = value->rValue; mod->B1mobZeroBlGiven = TRUE; break; case BSIM1_MOD_MOBZEROBW : mod->B1mobZeroBw = value->rValue; mod->B1mobZeroBwGiven = TRUE; break; case BSIM1_MOD_MOBVDD0 : mod->B1mobVdd0 = value->rValue; mod->B1mobVdd0Given = TRUE; break; case BSIM1_MOD_MOBVDDL : mod->B1mobVddl = value->rValue; mod->B1mobVddlGiven = TRUE; break; case BSIM1_MOD_MOBVDDW : mod->B1mobVddw = value->rValue; mod->B1mobVddwGiven = TRUE; break; case BSIM1_MOD_MOBVDDB0 : mod->B1mobVddB0 = value->rValue; mod->B1mobVddB0Given = TRUE; break; case BSIM1_MOD_MOBVDDBL : mod->B1mobVddBl = value->rValue; mod->B1mobVddBlGiven = TRUE; break; case BSIM1_MOD_MOBVDDBW : mod->B1mobVddBw = value->rValue; mod->B1mobVddBwGiven = TRUE; break; case BSIM1_MOD_MOBVDDD0 : mod->B1mobVddD0 = value->rValue; mod->B1mobVddD0Given = TRUE; break; case BSIM1_MOD_MOBVDDDL : mod->B1mobVddDl = value->rValue; mod->B1mobVddDlGiven = TRUE; break; case BSIM1_MOD_MOBVDDDW : mod->B1mobVddDw = value->rValue; mod->B1mobVddDwGiven = TRUE; break; case BSIM1_MOD_UGS0 : mod->B1ugs0 = value->rValue; mod->B1ugs0Given = TRUE; break; case BSIM1_MOD_UGSL : mod->B1ugsL = value->rValue; mod->B1ugsLGiven = TRUE; break; case BSIM1_MOD_UGSW : mod->B1ugsW = value->rValue; mod->B1ugsWGiven = TRUE; break; case BSIM1_MOD_UGSB0 : mod->B1ugsB0 = value->rValue; mod->B1ugsB0Given = TRUE; break; case BSIM1_MOD_UGSBL : mod->B1ugsBL = value->rValue; mod->B1ugsBLGiven = TRUE; break; case BSIM1_MOD_UGSBW : mod->B1ugsBW = value->rValue; mod->B1ugsBWGiven = TRUE; break; case BSIM1_MOD_UDS0 : mod->B1uds0 = value->rValue; mod->B1uds0Given = TRUE; break; case BSIM1_MOD_UDSL : mod->B1udsL = value->rValue; mod->B1udsLGiven = TRUE; break; case BSIM1_MOD_UDSW : mod->B1udsW = value->rValue; mod->B1udsWGiven = TRUE; break; case BSIM1_MOD_UDSB0 : mod->B1udsB0 = value->rValue; mod->B1udsB0Given = TRUE; break; case BSIM1_MOD_UDSBL : mod->B1udsBL = value->rValue; mod->B1udsBLGiven = TRUE; break; case BSIM1_MOD_UDSBW : mod->B1udsBW = value->rValue; mod->B1udsBWGiven = TRUE; break; case BSIM1_MOD_UDSD0 : mod->B1udsD0 = value->rValue; mod->B1udsD0Given = TRUE; break; case BSIM1_MOD_UDSDL : mod->B1udsDL = value->rValue; mod->B1udsDLGiven = TRUE; break; case BSIM1_MOD_UDSDW : mod->B1udsDW = value->rValue; mod->B1udsDWGiven = TRUE; break; case BSIM1_MOD_N00 : mod->B1subthSlope0 = value->rValue; mod->B1subthSlope0Given = TRUE; break; case BSIM1_MOD_N0L : mod->B1subthSlopeL = value->rValue; mod->B1subthSlopeLGiven = TRUE; break; case BSIM1_MOD_N0W : mod->B1subthSlopeW = value->rValue; mod->B1subthSlopeWGiven = TRUE; break; case BSIM1_MOD_NB0 : mod->B1subthSlopeB0 = value->rValue; mod->B1subthSlopeB0Given = TRUE; break; case BSIM1_MOD_NBL : mod->B1subthSlopeBL = value->rValue; mod->B1subthSlopeBLGiven = TRUE; break; case BSIM1_MOD_NBW : mod->B1subthSlopeBW = value->rValue; mod->B1subthSlopeBWGiven = TRUE; break; case BSIM1_MOD_ND0 : mod->B1subthSlopeD0 = value->rValue; mod->B1subthSlopeD0Given = TRUE; break; case BSIM1_MOD_NDL : mod->B1subthSlopeDL = value->rValue; mod->B1subthSlopeDLGiven = TRUE; break; case BSIM1_MOD_NDW : mod->B1subthSlopeDW = value->rValue; mod->B1subthSlopeDWGiven = TRUE; break; case BSIM1_MOD_TOX : mod->B1oxideThickness = value->rValue; mod->B1oxideThicknessGiven = TRUE; break; case BSIM1_MOD_TEMP : mod->B1temp = value->rValue; mod->B1tempGiven = TRUE; break; case BSIM1_MOD_VDD : mod->B1vdd = value->rValue; mod->B1vddGiven = TRUE; break; case BSIM1_MOD_CGSO : mod->B1gateSourceOverlapCap = value->rValue; mod->B1gateSourceOverlapCapGiven = TRUE; break; case BSIM1_MOD_CGDO : mod->B1gateDrainOverlapCap = value->rValue; mod->B1gateDrainOverlapCapGiven = TRUE; break; case BSIM1_MOD_CGBO : mod->B1gateBulkOverlapCap = value->rValue; mod->B1gateBulkOverlapCapGiven = TRUE; break; case BSIM1_MOD_XPART : mod->B1channelChargePartitionFlag = value->iValue ? 1 : 0; mod->B1channelChargePartitionFlagGiven = TRUE; break; case BSIM1_MOD_RSH : mod->B1sheetResistance = value->rValue; mod->B1sheetResistanceGiven = TRUE; break; case BSIM1_MOD_JS : mod->B1jctSatCurDensity = value->rValue; mod->B1jctSatCurDensityGiven = TRUE; break; case BSIM1_MOD_PB : mod->B1bulkJctPotential = value->rValue; mod->B1bulkJctPotentialGiven = TRUE; break; case BSIM1_MOD_MJ : mod->B1bulkJctBotGradingCoeff = value->rValue; mod->B1bulkJctBotGradingCoeffGiven = TRUE; break; case BSIM1_MOD_PBSW : mod->B1sidewallJctPotential = value->rValue; mod->B1sidewallJctPotentialGiven = TRUE; break; case BSIM1_MOD_MJSW : mod->B1bulkJctSideGradingCoeff = value->rValue; mod->B1bulkJctSideGradingCoeffGiven = TRUE; break; case BSIM1_MOD_CJ : mod->B1unitAreaJctCap = value->rValue; mod->B1unitAreaJctCapGiven = TRUE; break; case BSIM1_MOD_CJSW : mod->B1unitLengthSidewallJctCap = value->rValue; mod->B1unitLengthSidewallJctCapGiven = TRUE; break; case BSIM1_MOD_DEFWIDTH : mod->B1defaultWidth = value->rValue; mod->B1defaultWidthGiven = TRUE; break; case BSIM1_MOD_DELLENGTH : mod->B1deltaLength = value->rValue; mod->B1deltaLengthGiven = TRUE; break; case BSIM1_MOD_AF : mod->B1fNexp = value->rValue; mod->B1fNexpGiven = TRUE; break; case BSIM1_MOD_KF : mod->B1fNcoef = value->rValue; mod->B1fNcoefGiven = TRUE; break; case BSIM1_MOD_NMOS : if(value->iValue) { mod->B1type = 1; mod->B1typeGiven = TRUE; } break; case BSIM1_MOD_PMOS : if(value->iValue) { mod->B1type = - 1; mod->B1typeGiven = TRUE; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim1/bsim1def.h0000644000175000017500000005147313546075722022053 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Hong June Park, Thomas L. Quarles **********/ #ifndef BSIM1 #define BSIM1 #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" /* declarations for B1 MOSFETs */ #define B1numStates 35 #define B1NDCOEFFS 82 /* information needed for each instance */ typedef struct sBSIM1instance { struct GENinstance gen; #define B1modPtr(inst) ((struct sBSIM1model *)((inst)->gen.GENmodPtr)) #define B1nextInstance(inst) ((struct sBSIM1instance *)((inst)->gen.GENnextInstance)) #define B1name gen.GENname #define B1states gen.GENstate const int B1dNode; /* number of the gate node of the mosfet */ const int B1gNode; /* number of the gate node of the mosfet */ const int B1sNode; /* number of the source node of the mosfet */ const int B1bNode; /* number of the bulk node of the mosfet */ int B1dNodePrime; /* number of the internal drain node of the mosfet */ int B1sNodePrime; /* number of the internal source node of the mosfet */ double B1l; /* the length of the channel region */ double B1w; /* the width of the channel region */ double B1m; /* the parallel multiplier */ double B1drainArea; /* the area of the drain diffusion */ double B1sourceArea; /* the area of the source diffusion */ double B1drainSquares; /* the length of the drain in squares */ double B1sourceSquares; /* the length of the source in squares */ double B1drainPerimeter; double B1sourcePerimeter; double B1sourceConductance; /*conductance of source(or 0):set in setup*/ double B1drainConductance; /*conductance of drain(or 0):set in setup*/ double B1icVBS; /* initial condition B-S voltage */ double B1icVDS; /* initial condition D-S voltage */ double B1icVGS; /* initial condition G-S voltage */ double B1von; double B1vdsat; int B1off; /* non-zero to indicate device is off for dc analysis*/ int B1mode; /* device mode : 1 = normal, -1 = inverse */ double B1vfb; /* flat band voltage at given L and W */ double B1phi; /* surface potential at strong inversion */ double B1K1; /* bulk effect coefficient 1 */ double B1K2; /* bulk effect coefficient 2 */ double B1eta; /* drain induced barrier lowering */ double B1etaB; /* Vbs dependence of Eta */ double B1etaD; /* Vds dependence of Eta */ double B1betaZero; /* Beta at vds = 0 and vgs = Vth */ double B1betaZeroB; /* Vbs dependence of BetaZero */ double B1betaVdd; /* Beta at vds=Vdd and vgs=Vth */ double B1betaVddB; /* Vbs dependence of BVdd */ double B1betaVddD; /* Vds dependence of BVdd */ double B1ugs; /* Mobility degradation due to gate field*/ double B1ugsB; /* Vbs dependence of Ugs */ double B1uds; /* Drift Velocity Saturation due to Vds */ double B1udsB; /* Vbs dependence of Uds */ double B1udsD; /* Vds dependence of Uds */ double B1subthSlope; /* slope of subthreshold current with Vgs*/ double B1subthSlopeB; /* Vbs dependence of Subthreshold Slope */ double B1subthSlopeD; /* Vds dependence of Subthreshold Slope */ double B1GDoverlapCap;/* Gate Drain Overlap Capacitance */ double B1GSoverlapCap;/* Gate Source Overlap Capacitance */ double B1GBoverlapCap;/* Gate Bulk Overlap Capacitance */ double B1vt0; double B1vdd; /* Supply Voltage */ double B1temp; double B1oxideThickness; unsigned B1channelChargePartitionFlag :1; unsigned B1lGiven :1; unsigned B1wGiven :1; unsigned B1mGiven :1; unsigned B1drainAreaGiven :1; unsigned B1sourceAreaGiven :1; unsigned B1drainSquaresGiven :1; unsigned B1sourceSquaresGiven :1; unsigned B1drainPerimeterGiven :1; unsigned B1sourcePerimeterGiven :1; unsigned B1dNodePrimeSet :1; unsigned B1sNodePrimeSet :1; unsigned B1icVBSGiven :1; unsigned B1icVDSGiven :1; unsigned B1icVGSGiven :1; unsigned B1vonGiven :1; unsigned B1vdsatGiven :1; double *B1DdPtr; /* pointer to sparse matrix element at * (Drain node,drain node) */ double *B1GgPtr; /* pointer to sparse matrix element at * (gate node,gate node) */ double *B1SsPtr; /* pointer to sparse matrix element at * (source node,source node) */ double *B1BbPtr; /* pointer to sparse matrix element at * (bulk node,bulk node) */ double *B1DPdpPtr; /* pointer to sparse matrix element at * (drain prime node,drain prime node) */ double *B1SPspPtr; /* pointer to sparse matrix element at * (source prime node,source prime node) */ double *B1DdpPtr; /* pointer to sparse matrix element at * (drain node,drain prime node) */ double *B1GbPtr; /* pointer to sparse matrix element at * (gate node,bulk node) */ double *B1GdpPtr; /* pointer to sparse matrix element at * (gate node,drain prime node) */ double *B1GspPtr; /* pointer to sparse matrix element at * (gate node,source prime node) */ double *B1SspPtr; /* pointer to sparse matrix element at * (source node,source prime node) */ double *B1BdpPtr; /* pointer to sparse matrix element at * (bulk node,drain prime node) */ double *B1BspPtr; /* pointer to sparse matrix element at * (bulk node,source prime node) */ double *B1DPspPtr; /* pointer to sparse matrix element at * (drain prime node,source prime node) */ double *B1DPdPtr; /* pointer to sparse matrix element at * (drain prime node,drain node) */ double *B1BgPtr; /* pointer to sparse matrix element at * (bulk node,gate node) */ double *B1DPgPtr; /* pointer to sparse matrix element at * (drain prime node,gate node) */ double *B1SPgPtr; /* pointer to sparse matrix element at * (source prime node,gate node) */ double *B1SPsPtr; /* pointer to sparse matrix element at * (source prime node,source node) */ double *B1DPbPtr; /* pointer to sparse matrix element at * (drain prime node,bulk node) */ double *B1SPbPtr; /* pointer to sparse matrix element at * (source prime node,bulk node) */ double *B1SPdpPtr; /* pointer to sparse matrix element at * (source prime node,drain prime node) */ #ifndef NODISTO double B1dCoeffs[B1NDCOEFFS]; #else /* NODISTO */ double *B1dCoeffs; #endif /* NODISTO */ /* indices to the array of BSIM1 noise sources */ #define B1RDNOIZ 0 #define B1RSNOIZ 1 #define B1IDNOIZ 2 #define B1FLNOIZ 3 #define B1TOTNOIZ 4 #define B1NSRCS 5 /* the number of BSIM1 noise sources */ #ifndef NONOISE double B1nVar[NSTATVARS][B1NSRCS]; #else /* NONOISE */ double **B1nVar; #endif /* NONOISE */ } B1instance ; #ifndef CONFIG #define B1vbd B1states+ 0 #define B1vbs B1states+ 1 #define B1vgs B1states+ 2 #define B1vds B1states+ 3 #define B1cd B1states+ 4 #define B1id B1states+ 4 #define B1cbs B1states+ 5 #define B1ibs B1states+ 5 #define B1cbd B1states+ 6 #define B1ibd B1states+ 6 #define B1gm B1states+ 7 #define B1gds B1states+ 8 #define B1gmbs B1states+ 9 #define B1gbd B1states+ 10 #define B1gbs B1states+ 11 #define B1qb B1states+ 12 #define B1cqb B1states+ 13 #define B1iqb B1states+ 13 #define B1qg B1states+ 14 #define B1cqg B1states+ 15 #define B1iqg B1states+ 15 #define B1qd B1states+ 16 #define B1cqd B1states+ 17 #define B1iqd B1states+ 17 #define B1cggb B1states+ 18 #define B1cgdb B1states+ 19 #define B1cgsb B1states+ 20 #define B1cbgb B1states+ 21 #define B1cbdb B1states+ 22 #define B1cbsb B1states+ 23 #define B1capbd B1states+ 24 #define B1iqbd B1states+ 25 #define B1cqbd B1states+ 25 #define B1capbs B1states+ 26 #define B1iqbs B1states+ 27 #define B1cqbs B1states+ 27 #define B1cdgb B1states+ 28 #define B1cddb B1states+ 29 #define B1cdsb B1states+ 30 #define B1vono B1states+ 31 #define B1vdsato B1states+ 32 #define B1qbs B1states+ 33 #define B1qbd B1states+ 34 /* * the following naming convention is used: * x = vgs * y = vbs * z = vds * DrC is the DrCur * therefore qg_xyz stands for the coefficient of the vgs*vbs*vds * term in the multidimensional Taylor expansion for qg; and DrC_x2y * for the coeff. of the vgs*vgs*vbs term in the DrC expansion. */ #define qg_x B1dCoeffs[0] #define qg_y B1dCoeffs[1] #define qg_z B1dCoeffs[2] #define qg_x2 B1dCoeffs[3] #define qg_y2 B1dCoeffs[4] #define qg_z2 B1dCoeffs[5] #define qg_xy B1dCoeffs[6] #define qg_yz B1dCoeffs[7] #define qg_xz B1dCoeffs[8] #define qg_x3 B1dCoeffs[9] #define qg_y3 B1dCoeffs[10] #define qg_z3 B1dCoeffs[11] #define qg_x2z B1dCoeffs[12] #define qg_x2y B1dCoeffs[13] #define qg_y2z B1dCoeffs[14] #define qg_xy2 B1dCoeffs[15] #define qg_xz2 B1dCoeffs[16] #define qg_yz2 B1dCoeffs[17] #define qg_xyz B1dCoeffs[18] #define qb_x B1dCoeffs[19] #define qb_y B1dCoeffs[20] #define qb_z B1dCoeffs[21] #define qb_x2 B1dCoeffs[22] #define qb_y2 B1dCoeffs[23] #define qb_z2 B1dCoeffs[24] #define qb_xy B1dCoeffs[25] #define qb_yz B1dCoeffs[26] #define qb_xz B1dCoeffs[27] #define qb_x3 B1dCoeffs[28] #define qb_y3 B1dCoeffs[29] #define qb_z3 B1dCoeffs[30] #define qb_x2z B1dCoeffs[31] #define qb_x2y B1dCoeffs[32] #define qb_y2z B1dCoeffs[33] #define qb_xy2 B1dCoeffs[34] #define qb_xz2 B1dCoeffs[35] #define qb_yz2 B1dCoeffs[36] #define qb_xyz B1dCoeffs[37] #define qd_x B1dCoeffs[38] #define qd_y B1dCoeffs[39] #define qd_z B1dCoeffs[40] #define qd_x2 B1dCoeffs[41] #define qd_y2 B1dCoeffs[42] #define qd_z2 B1dCoeffs[43] #define qd_xy B1dCoeffs[44] #define qd_yz B1dCoeffs[45] #define qd_xz B1dCoeffs[46] #define qd_x3 B1dCoeffs[47] #define qd_y3 B1dCoeffs[48] #define qd_z3 B1dCoeffs[49] #define qd_x2z B1dCoeffs[50] #define qd_x2y B1dCoeffs[51] #define qd_y2z B1dCoeffs[52] #define qd_xy2 B1dCoeffs[53] #define qd_xz2 B1dCoeffs[54] #define qd_yz2 B1dCoeffs[55] #define qd_xyz B1dCoeffs[56] #define DrC_x B1dCoeffs[57] #define DrC_y B1dCoeffs[58] #define DrC_z B1dCoeffs[59] #define DrC_x2 B1dCoeffs[60] #define DrC_y2 B1dCoeffs[61] #define DrC_z2 B1dCoeffs[62] #define DrC_xy B1dCoeffs[63] #define DrC_yz B1dCoeffs[64] #define DrC_xz B1dCoeffs[65] #define DrC_x3 B1dCoeffs[66] #define DrC_y3 B1dCoeffs[67] #define DrC_z3 B1dCoeffs[68] #define DrC_x2z B1dCoeffs[69] #define DrC_x2y B1dCoeffs[70] #define DrC_y2z B1dCoeffs[71] #define DrC_xy2 B1dCoeffs[72] #define DrC_xz2 B1dCoeffs[73] #define DrC_yz2 B1dCoeffs[74] #define DrC_xyz B1dCoeffs[75] #define gbs1 B1dCoeffs[76] #define gbs2 B1dCoeffs[77] #define gbs3 B1dCoeffs[78] #define gbd1 B1dCoeffs[79] #define gbd2 B1dCoeffs[80] #define gbd3 B1dCoeffs[81] #endif /* per model data */ typedef struct sBSIM1model { /* model structure for a resistor */ struct GENmodel gen; #define B1modType gen.GENmodType #define B1nextModel(inst) ((struct sBSIM1model *)((inst)->gen.GENnextModel)) #define B1instances(inst) ((B1instance *)((inst)->gen.GENinstances)) #define B1modName gen.GENmodName int B1type; /* device type : 1 = nmos, -1 = pmos */ double B1vfb0; double B1vfbL; double B1vfbW; double B1phi0; double B1phiL; double B1phiW; double B1K10; double B1K1L; double B1K1W; double B1K20; double B1K2L; double B1K2W; double B1eta0; double B1etaL; double B1etaW; double B1etaB0; double B1etaBl; double B1etaBw; double B1etaD0; double B1etaDl; double B1etaDw; double B1deltaL; double B1deltaW; double B1mobZero; double B1mobZeroB0; double B1mobZeroBl; double B1mobZeroBw ; double B1mobVdd0; double B1mobVddl; double B1mobVddw; double B1mobVddB0; double B1mobVddBl; double B1mobVddBw; double B1mobVddD0; double B1mobVddDl; double B1mobVddDw; double B1ugs0; double B1ugsL; double B1ugsW; double B1ugsB0; double B1ugsBL; double B1ugsBW; double B1uds0; double B1udsL; double B1udsW; double B1udsB0; double B1udsBL; double B1udsBW; double B1udsD0; double B1udsDL; double B1udsDW; double B1subthSlope0; double B1subthSlopeL; double B1subthSlopeW; double B1subthSlopeB0; double B1subthSlopeBL; double B1subthSlopeBW; double B1subthSlopeD0; double B1subthSlopeDL; double B1subthSlopeDW; double B1oxideThickness; /* unit: micron */ double B1Cox; /* unit: F/cm**2 */ double B1temp; double B1vdd; double B1gateSourceOverlapCap; double B1gateDrainOverlapCap; double B1gateBulkOverlapCap; unsigned B1channelChargePartitionFlag :1; double B1sheetResistance; double B1jctSatCurDensity; double B1bulkJctPotential; double B1bulkJctBotGradingCoeff; double B1bulkJctSideGradingCoeff; double B1sidewallJctPotential; double B1unitAreaJctCap; double B1unitLengthSidewallJctCap; double B1defaultWidth; double B1deltaLength; double B1fNcoef; double B1fNexp; unsigned B1vfb0Given :1; unsigned B1vfbLGiven :1; unsigned B1vfbWGiven :1; unsigned B1phi0Given :1; unsigned B1phiLGiven :1; unsigned B1phiWGiven :1; unsigned B1K10Given :1; unsigned B1K1LGiven :1; unsigned B1K1WGiven :1; unsigned B1K20Given :1; unsigned B1K2LGiven :1; unsigned B1K2WGiven :1; unsigned B1eta0Given :1; unsigned B1etaLGiven :1; unsigned B1etaWGiven :1; unsigned B1etaB0Given :1; unsigned B1etaBlGiven :1; unsigned B1etaBwGiven :1; unsigned B1etaD0Given :1; unsigned B1etaDlGiven :1; unsigned B1etaDwGiven :1; unsigned B1deltaLGiven :1; unsigned B1deltaWGiven :1; unsigned B1mobZeroGiven :1; unsigned B1mobZeroB0Given :1; unsigned B1mobZeroBlGiven :1; unsigned B1mobZeroBwGiven :1; unsigned B1mobVdd0Given :1; unsigned B1mobVddlGiven :1; unsigned B1mobVddwGiven :1; unsigned B1mobVddB0Given :1; unsigned B1mobVddBlGiven :1; unsigned B1mobVddBwGiven :1; unsigned B1mobVddD0Given :1; unsigned B1mobVddDlGiven :1; unsigned B1mobVddDwGiven :1; unsigned B1ugs0Given :1; unsigned B1ugsLGiven :1; unsigned B1ugsWGiven :1; unsigned B1ugsB0Given :1; unsigned B1ugsBLGiven :1; unsigned B1ugsBWGiven :1; unsigned B1uds0Given :1; unsigned B1udsLGiven :1; unsigned B1udsWGiven :1; unsigned B1udsB0Given :1; unsigned B1udsBLGiven :1; unsigned B1udsBWGiven :1; unsigned B1udsD0Given :1; unsigned B1udsDLGiven :1; unsigned B1udsDWGiven :1; unsigned B1subthSlope0Given :1; unsigned B1subthSlopeLGiven :1; unsigned B1subthSlopeWGiven :1; unsigned B1subthSlopeB0Given :1; unsigned B1subthSlopeBLGiven :1; unsigned B1subthSlopeBWGiven :1; unsigned B1subthSlopeD0Given :1; unsigned B1subthSlopeDLGiven :1; unsigned B1subthSlopeDWGiven :1; unsigned B1oxideThicknessGiven :1; unsigned B1tempGiven :1; unsigned B1vddGiven :1; unsigned B1gateSourceOverlapCapGiven :1; unsigned B1gateDrainOverlapCapGiven :1; unsigned B1gateBulkOverlapCapGiven :1; unsigned B1channelChargePartitionFlagGiven :1; unsigned B1sheetResistanceGiven :1; unsigned B1jctSatCurDensityGiven :1; unsigned B1bulkJctPotentialGiven :1; unsigned B1bulkJctBotGradingCoeffGiven :1; unsigned B1sidewallJctPotentialGiven :1; unsigned B1bulkJctSideGradingCoeffGiven :1; unsigned B1unitAreaJctCapGiven :1; unsigned B1unitLengthSidewallJctCapGiven :1; unsigned B1defaultWidthGiven :1; unsigned B1deltaLengthGiven :1; unsigned B1fNcoefGiven :1; unsigned B1fNexpGiven :1; unsigned B1typeGiven :1; } B1model; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ /* device parameters */ #define BSIM1_W 1 #define BSIM1_L 2 #define BSIM1_AS 3 #define BSIM1_AD 4 #define BSIM1_PS 5 #define BSIM1_PD 6 #define BSIM1_NRS 7 #define BSIM1_NRD 8 #define BSIM1_OFF 9 #define BSIM1_IC_VBS 10 #define BSIM1_IC_VDS 11 #define BSIM1_IC_VGS 12 #define BSIM1_IC 13 #define BSIM1_M 14 /* model parameters */ #define BSIM1_MOD_VFB0 101 #define BSIM1_MOD_VFBL 102 #define BSIM1_MOD_VFBW 103 #define BSIM1_MOD_PHI0 104 #define BSIM1_MOD_PHIL 105 #define BSIM1_MOD_PHIW 106 #define BSIM1_MOD_K10 107 #define BSIM1_MOD_K1L 108 #define BSIM1_MOD_K1W 109 #define BSIM1_MOD_K20 110 #define BSIM1_MOD_K2L 111 #define BSIM1_MOD_K2W 112 #define BSIM1_MOD_ETA0 113 #define BSIM1_MOD_ETAL 114 #define BSIM1_MOD_ETAW 115 #define BSIM1_MOD_ETAB0 116 #define BSIM1_MOD_ETABL 117 #define BSIM1_MOD_ETABW 118 #define BSIM1_MOD_ETAD0 119 #define BSIM1_MOD_ETADL 120 #define BSIM1_MOD_ETADW 121 #define BSIM1_MOD_DELTAL 122 #define BSIM1_MOD_DELTAW 123 #define BSIM1_MOD_MOBZERO 124 #define BSIM1_MOD_MOBZEROB0 125 #define BSIM1_MOD_MOBZEROBL 126 #define BSIM1_MOD_MOBZEROBW 127 #define BSIM1_MOD_MOBVDD0 128 #define BSIM1_MOD_MOBVDDL 129 #define BSIM1_MOD_MOBVDDW 130 #define BSIM1_MOD_MOBVDDB0 131 #define BSIM1_MOD_MOBVDDBL 132 #define BSIM1_MOD_MOBVDDBW 133 #define BSIM1_MOD_MOBVDDD0 134 #define BSIM1_MOD_MOBVDDDL 135 #define BSIM1_MOD_MOBVDDDW 136 #define BSIM1_MOD_UGS0 137 #define BSIM1_MOD_UGSL 138 #define BSIM1_MOD_UGSW 139 #define BSIM1_MOD_UGSB0 140 #define BSIM1_MOD_UGSBL 141 #define BSIM1_MOD_UGSBW 142 #define BSIM1_MOD_UDS0 143 #define BSIM1_MOD_UDSL 144 #define BSIM1_MOD_UDSW 145 #define BSIM1_MOD_UDSB0 146 #define BSIM1_MOD_UDSBL 147 #define BSIM1_MOD_UDSBW 148 #define BSIM1_MOD_UDSD0 149 #define BSIM1_MOD_UDSDL 150 #define BSIM1_MOD_UDSDW 151 #define BSIM1_MOD_N00 152 #define BSIM1_MOD_N0L 153 #define BSIM1_MOD_N0W 154 #define BSIM1_MOD_NB0 155 #define BSIM1_MOD_NBL 156 #define BSIM1_MOD_NBW 157 #define BSIM1_MOD_ND0 158 #define BSIM1_MOD_NDL 159 #define BSIM1_MOD_NDW 160 #define BSIM1_MOD_TOX 161 #define BSIM1_MOD_TEMP 162 #define BSIM1_MOD_VDD 163 #define BSIM1_MOD_CGSO 164 #define BSIM1_MOD_CGDO 165 #define BSIM1_MOD_CGBO 166 #define BSIM1_MOD_XPART 167 #define BSIM1_MOD_RSH 168 #define BSIM1_MOD_JS 169 #define BSIM1_MOD_PB 170 #define BSIM1_MOD_MJ 171 #define BSIM1_MOD_PBSW 172 #define BSIM1_MOD_MJSW 173 #define BSIM1_MOD_CJ 174 #define BSIM1_MOD_CJSW 175 #define BSIM1_MOD_DEFWIDTH 176 #define BSIM1_MOD_DELLENGTH 177 #define BSIM1_MOD_NMOS 178 #define BSIM1_MOD_PMOS 179 #define BSIM1_MOD_KF 180 #define BSIM1_MOD_AF 181 /* device questions */ #define BSIM1_DNODE 201 #define BSIM1_GNODE 202 #define BSIM1_SNODE 203 #define BSIM1_BNODE 204 #define BSIM1_DNODEPRIME 205 #define BSIM1_SNODEPRIME 206 #define BSIM1_VBD 207 #define BSIM1_VBS 208 #define BSIM1_VGS 209 #define BSIM1_VDS 210 #define BSIM1_CD 211 #define BSIM1_CBS 212 #define BSIM1_CBD 213 #define BSIM1_GM 214 #define BSIM1_GDS 215 #define BSIM1_GMBS 216 #define BSIM1_GBD 217 #define BSIM1_GBS 218 #define BSIM1_QB 219 #define BSIM1_CQB 220 #define BSIM1_QG 221 #define BSIM1_CQG 222 #define BSIM1_QD 223 #define BSIM1_CQD 224 #define BSIM1_CGG 225 #define BSIM1_CGD 226 #define BSIM1_CGS 227 #define BSIM1_CBG 228 #define BSIM1_CAPBD 231 #define BSIM1_CQBD 232 #define BSIM1_CAPBS 233 #define BSIM1_CQBS 234 #define BSIM1_CDG 235 #define BSIM1_CDD 236 #define BSIM1_CDS 237 #define BSIM1_VON 238 #define BSIM1_QBS 239 #define BSIM1_QBD 240 #define BSIM1_SOURCECONDUCT 241 #define BSIM1_DRAINCONDUCT 242 /* model questions */ #include "bsim1ext.h" extern void B1evaluate(double,double,double,B1instance*,B1model*, double*,double*,double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, CKTcircuit*); #endif /*B1*/ tmpk8ny_4pz/src/spicelib/devices/bsim1/Makefile.am0000644000175000017500000000101213546075722022224 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libbsim1.la libbsim1_la_SOURCES = \ b1.c \ b1acld.c \ b1ask.c \ b1cvtest.c \ b1disto.c \ b1dset.c \ b1eval.c \ b1getic.c \ b1ld.c \ b1mask.c \ b1moscap.c \ b1mpar.c \ b1par.c \ b1noi.c \ b1pzld.c \ b1set.c \ b1temp.c \ b1trunc.c \ bsim1def.h \ bsim1ext.h \ bsim1init.c \ bsim1init.h \ bsim1itf.h AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/bsim1/b1mask.c0000644000175000017500000002067613546075722021533 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Hong J. Park **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "bsim1def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int B1mAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { B1model *model = (B1model *)inst; NG_IGNORE(ckt); switch(which) { case BSIM1_MOD_VFB0: value->rValue = model->B1vfb0; return(OK); case BSIM1_MOD_VFBL: value->rValue = model->B1vfbL; return(OK); case BSIM1_MOD_VFBW: value->rValue = model->B1vfbW; return(OK); case BSIM1_MOD_PHI0: value->rValue = model->B1phi0; return(OK); case BSIM1_MOD_PHIL: value->rValue = model->B1phiL; return(OK); case BSIM1_MOD_PHIW: value->rValue = model->B1phiW; return(OK); case BSIM1_MOD_K10: value->rValue = model->B1K10; return(OK); case BSIM1_MOD_K1L: value->rValue = model->B1K1L; return(OK); case BSIM1_MOD_K1W: value->rValue = model->B1K1W; return(OK); case BSIM1_MOD_K20: value->rValue = model->B1K20; return(OK); case BSIM1_MOD_K2L: value->rValue = model->B1K2L; return(OK); case BSIM1_MOD_K2W: value->rValue = model->B1K2W; return(OK); case BSIM1_MOD_ETA0: value->rValue = model->B1eta0; return(OK); case BSIM1_MOD_ETAL: value->rValue = model->B1etaL; return(OK); case BSIM1_MOD_ETAW: value->rValue = model->B1etaW; return(OK); case BSIM1_MOD_ETAB0: value->rValue = model->B1etaB0; return(OK); case BSIM1_MOD_ETABL: value->rValue = model->B1etaBl; return(OK); case BSIM1_MOD_ETABW: value->rValue = model->B1etaBw; return(OK); case BSIM1_MOD_ETAD0: value->rValue = model->B1etaD0; return(OK); case BSIM1_MOD_ETADL: value->rValue = model->B1etaDl; return(OK); case BSIM1_MOD_ETADW: value->rValue = model->B1etaDw; return(OK); case BSIM1_MOD_DELTAL: value->rValue = model->B1deltaL; return(OK); case BSIM1_MOD_DELTAW: value->rValue = model->B1deltaW; return(OK); case BSIM1_MOD_MOBZERO: value->rValue = model->B1mobZero; return(OK); case BSIM1_MOD_MOBZEROB0: value->rValue = model->B1mobZeroB0; return(OK); case BSIM1_MOD_MOBZEROBL: value->rValue = model->B1mobZeroBl; return(OK); case BSIM1_MOD_MOBZEROBW: value->rValue = model->B1mobZeroBw; return(OK); case BSIM1_MOD_MOBVDD0: value->rValue = model->B1mobVdd0; return(OK); case BSIM1_MOD_MOBVDDL: value->rValue = model->B1mobVddl; return(OK); case BSIM1_MOD_MOBVDDW: value->rValue = model->B1mobVddw; return(OK); case BSIM1_MOD_MOBVDDB0: value->rValue = model->B1mobVddB0; return(OK); case BSIM1_MOD_MOBVDDBL: value->rValue = model->B1mobVddBl; return(OK); case BSIM1_MOD_MOBVDDBW: value->rValue = model->B1mobVddBw; return(OK); case BSIM1_MOD_MOBVDDD0: value->rValue = model->B1mobVddD0; return(OK); case BSIM1_MOD_MOBVDDDL: value->rValue = model->B1mobVddDl; return(OK); case BSIM1_MOD_MOBVDDDW: value->rValue = model->B1mobVddDw; return(OK); case BSIM1_MOD_UGS0: value->rValue = model->B1ugs0; return(OK); case BSIM1_MOD_UGSL: value->rValue = model->B1ugsL; return(OK); case BSIM1_MOD_UGSW: value->rValue = model->B1ugsW; return(OK); case BSIM1_MOD_UGSB0: value->rValue = model->B1ugsB0; return(OK); case BSIM1_MOD_UGSBL: value->rValue = model->B1ugsBL; return(OK); case BSIM1_MOD_UGSBW: value->rValue = model->B1ugsBW; return(OK); case BSIM1_MOD_UDS0: value->rValue = model->B1uds0; return(OK); case BSIM1_MOD_UDSL: value->rValue = model->B1udsL; return(OK); case BSIM1_MOD_UDSW: value->rValue = model->B1udsW; return(OK); case BSIM1_MOD_UDSB0: value->rValue = model->B1udsB0; return(OK); case BSIM1_MOD_UDSBL: value->rValue = model->B1udsBL; return(OK); case BSIM1_MOD_UDSBW: value->rValue = model->B1udsBW; return(OK); case BSIM1_MOD_UDSD0: value->rValue = model->B1udsD0; return(OK); case BSIM1_MOD_UDSDL: value->rValue = model->B1udsDL; return(OK); case BSIM1_MOD_UDSDW: value->rValue = model->B1udsDW; return(OK); case BSIM1_MOD_N00: value->rValue = model->B1subthSlope0; return(OK); case BSIM1_MOD_N0L: value->rValue = model->B1subthSlopeL; return(OK); case BSIM1_MOD_N0W: value->rValue = model->B1subthSlopeW; return(OK); case BSIM1_MOD_NB0: value->rValue = model->B1subthSlopeB0; return(OK); case BSIM1_MOD_NBL: value->rValue = model->B1subthSlopeBL; return(OK); case BSIM1_MOD_NBW: value->rValue = model->B1subthSlopeBW; return(OK); case BSIM1_MOD_ND0: value->rValue = model->B1subthSlopeD0; return(OK); case BSIM1_MOD_NDL: value->rValue = model->B1subthSlopeDL; return(OK); case BSIM1_MOD_NDW: value->rValue = model->B1subthSlopeDW; return(OK); case BSIM1_MOD_TOX: value->rValue = model->B1oxideThickness; return(OK); case BSIM1_MOD_TEMP: value->rValue = model->B1temp; return(OK); case BSIM1_MOD_VDD: value->rValue = model->B1vdd; return(OK); case BSIM1_MOD_CGSO: value->rValue = model->B1gateSourceOverlapCap; return(OK); case BSIM1_MOD_CGDO: value->rValue = model->B1gateDrainOverlapCap; return(OK); case BSIM1_MOD_CGBO: value->rValue = model->B1gateBulkOverlapCap; return(OK); case BSIM1_MOD_XPART: value->iValue = model->B1channelChargePartitionFlag; return(OK); case BSIM1_MOD_RSH: value->rValue = model->B1sheetResistance; return(OK); case BSIM1_MOD_JS: value->rValue = model->B1jctSatCurDensity; return(OK); case BSIM1_MOD_PB: value->rValue = model->B1bulkJctPotential; return(OK); case BSIM1_MOD_MJ: value->rValue = model->B1bulkJctBotGradingCoeff; return(OK); case BSIM1_MOD_PBSW: value->rValue = model->B1sidewallJctPotential; return(OK); case BSIM1_MOD_MJSW: value->rValue = model->B1bulkJctSideGradingCoeff; return(OK); case BSIM1_MOD_CJ: value->rValue = model->B1unitAreaJctCap; return(OK); case BSIM1_MOD_CJSW: value->rValue = model->B1unitLengthSidewallJctCap; return(OK); case BSIM1_MOD_DEFWIDTH: value->rValue = model->B1defaultWidth; return(OK); case BSIM1_MOD_DELLENGTH: value->rValue = model->B1deltaLength; return(OK); case BSIM1_MOD_AF: value->rValue = model->B1fNexp; return(OK); case BSIM1_MOD_KF: value->rValue = model->B1fNcoef; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim1/bsim1init.h0000644000175000017500000000035213546075722022246 0ustar carstencarsten#ifndef _BSIM1INIT_H #define _BSIM1INIT_H extern IFparm B1pTable[ ]; extern IFparm B1mPTable[ ]; extern char *B1names[ ]; extern int B1pTSize; extern int B1mPTSize; extern int B1nSize; extern int B1iSize; extern int B1mSize; #endif tmpk8ny_4pz/src/spicelib/devices/bsim1/b1set.c0000644000175000017500000003176513546075722021374 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Hong J. Park, Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "bsim1def.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B1setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* load the B1 device structure with those pointers needed later * for fast matrix loading */ { B1model *model = (B1model*)inModel; B1instance *here; int error; CKTnode *tmp; /* loop through all the B1 device models */ for( ; model != NULL; model = B1nextModel(model)) { /* Default value Processing for B1 MOSFET Models */ if( ! model->B1typeGiven) { model->B1type = NMOS; /* NMOS */ } if( ! model->B1vfb0Given) { model->B1vfb0 = 0.0; } if( ! model->B1vfbLGiven) { model->B1vfbL = 0.0; } if( ! model->B1vfbWGiven) { model->B1vfbW = 0.0; } if( ! model->B1phi0Given) { model->B1phi0 = 0.0; } if( ! model->B1phiLGiven) { model->B1phiL = 0.0; } if( ! model->B1phiWGiven) { model->B1phiW = 0.0; } if( ! model->B1K10Given) { model->B1K10 = 0.0; } if( ! model->B1K1LGiven) { model->B1K1L = 0.0; } if( ! model->B1K1WGiven) { model->B1K1W = 0.0; } if( ! model->B1K20Given) { model->B1K20 = 0.0; } if( ! model->B1K2LGiven) { model->B1K2L = 0.0; } if( ! model->B1K2WGiven) { model->B1K2W = 0.0; } if( ! model->B1eta0Given) { model->B1eta0 = 0.0; } if( ! model->B1etaLGiven) { model->B1etaL = 0.0; } if( ! model->B1etaWGiven) { model->B1etaW = 0.0; } if( ! model->B1mobZeroGiven) { model->B1mobZero = 0.0; } if( ! model->B1deltaLGiven) { model->B1deltaL = 0.0; } if( ! model->B1deltaWGiven) { model->B1deltaW = 0.0; } if( ! model->B1ugs0Given) { model->B1ugs0 = 0.0; } if( ! model->B1ugsLGiven) { model->B1ugsL = 0.0; } if( ! model->B1ugsWGiven) { model->B1ugsW = 0.0; } if( ! model->B1uds0Given) { model->B1uds0 = 0.0; } if( ! model->B1udsLGiven) { model->B1udsL = 0.0; } if( ! model->B1udsWGiven) { model->B1udsW = 0.0; } if( ! model->B1mobZeroB0Given) { model->B1mobZeroB0 = 0.0; } if( ! model->B1mobZeroBlGiven) { model->B1mobZeroBl = 0.0; } if( ! model->B1mobZeroBwGiven) { model->B1mobZeroBw = 0.0; } if( ! model->B1etaB0Given) { model->B1etaB0 = 0.0; } if( ! model->B1etaBlGiven) { model->B1etaBl = 0.0; } if( ! model->B1etaBwGiven) { model->B1etaBw = 0.0; } if( ! model->B1etaD0Given) { model->B1etaD0 = 0.0; } if( ! model->B1etaDlGiven) { model->B1etaDl = 0.0; } if( ! model->B1etaDwGiven) { model->B1etaDw = 0.0; } if( ! model->B1ugsB0Given) { model->B1ugsB0 = 0.0; } if( ! model->B1ugsBLGiven) { model->B1ugsBL = 0.0; } if( ! model->B1ugsBWGiven) { model->B1ugsBW = 0.0; } if( ! model->B1udsB0Given) { model->B1udsB0 = 0.0; } if( ! model->B1udsBLGiven) { model->B1udsBL = 0.0; } if( ! model->B1udsBWGiven) { model->B1udsBW = 0.0; } if( ! model->B1mobVdd0Given) { model->B1mobVdd0 = 0.0; } if( ! model->B1mobVddlGiven) { model->B1mobVddl = 0.0; } if( ! model->B1mobVddwGiven) { model->B1mobVddw = 0.0; } if( ! model->B1mobVddB0Given) { model->B1mobVddB0 = 0.0; } if( ! model->B1mobVddBlGiven) { model->B1mobVddBl = 0.0; } if( ! model->B1mobVddBwGiven) { model->B1mobVddBw = 0.0; } if( ! model->B1mobVddD0Given) { model->B1mobVddD0 = 0.0; } if( ! model->B1mobVddDlGiven) { model->B1mobVddDl = 0.0; } if( ! model->B1mobVddDwGiven) { model->B1mobVddDw = 0.0; } if( ! model->B1udsD0Given) { model->B1udsD0 = 0.0; } if( ! model->B1udsDLGiven) { model->B1udsDL = 0.0; } if( ! model->B1udsDWGiven) { model->B1udsDW = 0.0; } if( ! model->B1oxideThicknessGiven) { model->B1oxideThickness = 0.0; /* um */ } if( ! model->B1tempGiven) { model->B1temp = 0.0; } if( ! model->B1vddGiven) { model->B1vdd = 0.0; } if( ! model->B1gateDrainOverlapCapGiven) { model->B1gateDrainOverlapCap = 0.0; } if( ! model->B1gateSourceOverlapCapGiven) { model->B1gateSourceOverlapCap = 0.0; } if( ! model->B1gateBulkOverlapCapGiven) { model->B1gateBulkOverlapCap = 0.0; } if( ! model->B1channelChargePartitionFlagGiven) { model->B1channelChargePartitionFlag = 0; } if( ! model->B1subthSlope0Given) { model->B1subthSlope0 = 0.0; } if( ! model->B1subthSlopeLGiven) { model->B1subthSlopeL = 0.0; } if( ! model->B1subthSlopeWGiven) { model->B1subthSlopeW = 0.0; } if( ! model->B1subthSlopeB0Given) { model->B1subthSlopeB0 = 0.0; } if( ! model->B1subthSlopeBLGiven) { model->B1subthSlopeBL = 0.0; } if( ! model->B1subthSlopeBWGiven) { model->B1subthSlopeBW = 0.0; } if( ! model->B1subthSlopeD0Given) { model->B1subthSlopeD0 = 0.0; } if( ! model->B1subthSlopeDLGiven) { model->B1subthSlopeDL = 0.0; } if( ! model->B1subthSlopeDWGiven) { model->B1subthSlopeDW = 0.0; } if( ! model->B1sheetResistanceGiven) { model->B1sheetResistance = 0.0; } if( ! model->B1unitAreaJctCapGiven) { model->B1unitAreaJctCap = 0.0; } if( ! model->B1unitLengthSidewallJctCapGiven) { model->B1unitLengthSidewallJctCap = 0.0; } if( ! model->B1jctSatCurDensityGiven) { model->B1jctSatCurDensity = 0.0; } if( ! model->B1bulkJctPotentialGiven) { model->B1bulkJctPotential = 0.0; } if( ! model->B1sidewallJctPotentialGiven) { model->B1sidewallJctPotential = 0.0; } if( ! model->B1bulkJctBotGradingCoeffGiven) { model->B1bulkJctBotGradingCoeff = 0.0; } if( ! model->B1bulkJctSideGradingCoeffGiven) { model->B1bulkJctSideGradingCoeff = 0.0; } if( ! model->B1defaultWidthGiven) { model->B1defaultWidth = 0.0; } if( ! model->B1deltaLengthGiven) { model->B1deltaLength = 0.0; } if( ! model->B1fNcoefGiven) { model->B1fNcoef = 0.0; } if( ! model->B1fNexpGiven) { model->B1fNexp = 1.0; } /* loop through all the instances of the model */ for (here = B1instances(model); here != NULL ; here=B1nextInstance(here)) { CKTnode *tmpNode; IFuid tmpName; /* allocate a chunk of the state vector */ here->B1states = *states; *states += B1numStates; /* perform the parameter defaulting */ if(!here->B1drainAreaGiven) { here->B1drainArea = 0; } if(!here->B1drainPerimeterGiven) { here->B1drainPerimeter = 0; } if(!here->B1drainSquaresGiven) { here->B1drainSquares = 1; } if(!here->B1icVBSGiven) { here->B1icVBS = 0; } if(!here->B1icVDSGiven) { here->B1icVDS = 0; } if(!here->B1icVGSGiven) { here->B1icVGS = 0; } if(!here->B1lGiven) { here->B1l = 5e-6; } if(!here->B1sourceAreaGiven) { here->B1sourceArea = 0; } if(!here->B1sourcePerimeterGiven) { here->B1sourcePerimeter = 0; } if(!here->B1sourceSquaresGiven) { here->B1sourceSquares = 1; } if(!here->B1vdsatGiven) { here->B1vdsat = 0; } if(!here->B1vonGiven) { here->B1von = 0; } if(!here->B1wGiven) { here->B1w = 5e-6; } if(!here->B1mGiven) { here->B1m = 1.0; } /* process drain series resistance */ if( (model->B1sheetResistance != 0) && (here->B1drainSquares != 0.0 )) { if(here->B1dNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->B1name,"drain"); if(error) return(error); here->B1dNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->B1dNodePrime = here->B1dNode; } /* process source series resistance */ if( (model->B1sheetResistance != 0) && (here->B1sourceSquares != 0.0 )) { if(here->B1sNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->B1name,"source"); if(error) return(error); here->B1sNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->B1sNodePrime = here->B1sNode; } /* set Sparse Matrix Pointers */ /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(B1DdPtr, B1dNode, B1dNode); TSTALLOC(B1GgPtr, B1gNode, B1gNode); TSTALLOC(B1SsPtr, B1sNode, B1sNode); TSTALLOC(B1BbPtr, B1bNode, B1bNode); TSTALLOC(B1DPdpPtr, B1dNodePrime, B1dNodePrime); TSTALLOC(B1SPspPtr, B1sNodePrime, B1sNodePrime); TSTALLOC(B1DdpPtr, B1dNode, B1dNodePrime); TSTALLOC(B1GbPtr, B1gNode, B1bNode); TSTALLOC(B1GdpPtr, B1gNode, B1dNodePrime); TSTALLOC(B1GspPtr, B1gNode, B1sNodePrime); TSTALLOC(B1SspPtr, B1sNode, B1sNodePrime); TSTALLOC(B1BdpPtr, B1bNode, B1dNodePrime); TSTALLOC(B1BspPtr, B1bNode, B1sNodePrime); TSTALLOC(B1DPspPtr, B1dNodePrime, B1sNodePrime); TSTALLOC(B1DPdPtr, B1dNodePrime, B1dNode); TSTALLOC(B1BgPtr, B1bNode, B1gNode); TSTALLOC(B1DPgPtr, B1dNodePrime, B1gNode); TSTALLOC(B1SPgPtr, B1sNodePrime, B1gNode); TSTALLOC(B1SPsPtr, B1sNodePrime, B1sNode); TSTALLOC(B1DPbPtr, B1dNodePrime, B1bNode); TSTALLOC(B1SPbPtr, B1sNodePrime, B1bNode); TSTALLOC(B1SPdpPtr, B1sNodePrime, B1dNodePrime); } } return(OK); } int B1unsetup(GENmodel *inModel, CKTcircuit *ckt) { B1model *model; B1instance *here; for (model = (B1model *)inModel; model != NULL; model = B1nextModel(model)) { for (here = B1instances(model); here != NULL; here=B1nextInstance(here)) { if (here->B1sNodePrime > 0 && here->B1sNodePrime != here->B1sNode) CKTdltNNum(ckt, here->B1sNodePrime); here->B1sNodePrime = 0; if (here->B1dNodePrime > 0 && here->B1dNodePrime != here->B1dNode) CKTdltNNum(ckt, here->B1dNodePrime); here->B1dNodePrime = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim1/b1temp.c0000644000175000017500000001372313546075722021540 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Hong J. Park, Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "bsim1def.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int B1temp(GENmodel *inModel, CKTcircuit *ckt) /* load the B1 device structure with those pointers needed later * for fast matrix loading */ { B1model *model = (B1model*) inModel; B1instance *here; double EffChanLength; double EffChanWidth; double Cox; double CoxWoverL ; double Leff; /* effective channel length im micron */ double Weff; /* effective channel width in micron */ NG_IGNORE(ckt); /* loop through all the B1 device models */ for( ; model != NULL; model = B1nextModel(model)) { /* Default value Processing for B1 MOSFET Models */ /* Some Limiting for Model Parameters */ if( model->B1bulkJctPotential < 0.1) { model->B1bulkJctPotential = 0.1; } if( model->B1sidewallJctPotential < 0.1) { model->B1sidewallJctPotential = 0.1; } Cox = 3.453e-13/(model->B1oxideThickness * 1.0e-4);/*in F/cm**2 */ model->B1Cox = Cox; /* unit: F/cm**2 */ /* loop through all the instances of the model */ for (here = B1instances(model); here != NULL ; here=B1nextInstance(here)) { if( (EffChanLength = here->B1l - model->B1deltaL *1e-6 )<=0) { SPfrontEnd->IFerrorf (ERR_FATAL, "B1: mosfet %s, model %s: Effective channel length <=0", model->B1modName, here->B1name); return(E_BADPARM); } if( (EffChanWidth = here->B1w - model->B1deltaW *1e-6 ) <= 0 ) { SPfrontEnd->IFerrorf (ERR_FATAL, "B1: mosfet %s, model %s: Effective channel width <=0", model->B1modName, here->B1name); return(E_BADPARM); } here->B1GDoverlapCap=EffChanWidth *model->B1gateDrainOverlapCap; here->B1GSoverlapCap=EffChanWidth*model->B1gateSourceOverlapCap; here->B1GBoverlapCap=here->B1l * model->B1gateBulkOverlapCap; /* process drain series resistance */ if( (here->B1drainConductance=model->B1sheetResistance * here->B1drainSquares) != 0.0 ) { here->B1drainConductance = 1. / here->B1drainConductance ; } /* process source series resistance */ if( (here->B1sourceConductance=model->B1sheetResistance * here->B1sourceSquares) != 0.0 ) { here->B1sourceConductance = 1. / here->B1sourceConductance ; } Leff = EffChanLength * 1.e6; /* convert into micron */ Weff = EffChanWidth * 1.e6; /* convert into micron */ CoxWoverL = Cox * Weff / Leff ; /* F/cm**2 */ here->B1vfb = model->B1vfb0 + model->B1vfbL / Leff + model->B1vfbW / Weff; here->B1phi = model->B1phi0 + model->B1phiL / Leff + model->B1phiW / Weff; here->B1K1 = model->B1K10 + model->B1K1L / Leff + model->B1K1W / Weff; here->B1K2 = model->B1K20 + model->B1K2L / Leff + model->B1K2W / Weff; here->B1eta = model->B1eta0 + model->B1etaL / Leff + model->B1etaW / Weff; here->B1etaB = model->B1etaB0 + model->B1etaBl / Leff + model->B1etaBw / Weff; here->B1etaD = model->B1etaD0 + model->B1etaDl / Leff + model->B1etaDw / Weff; here->B1betaZero = model->B1mobZero; here->B1betaZeroB = model->B1mobZeroB0 + model->B1mobZeroBl / Leff + model->B1mobZeroBw / Weff; here->B1ugs = model->B1ugs0 + model->B1ugsL / Leff + model->B1ugsW / Weff; here->B1ugsB = model->B1ugsB0 + model->B1ugsBL / Leff + model->B1ugsBW / Weff; here->B1uds = model->B1uds0 + model->B1udsL / Leff + model->B1udsW / Weff; here->B1udsB = model->B1udsB0 + model->B1udsBL / Leff + model->B1udsBW / Weff; here->B1udsD = model->B1udsD0 + model->B1udsDL / Leff + model->B1udsDW / Weff; here->B1betaVdd = model->B1mobVdd0 + model->B1mobVddl / Leff + model->B1mobVddw / Weff; here->B1betaVddB = model->B1mobVddB0 + model->B1mobVddBl / Leff + model->B1mobVddBw / Weff; here->B1betaVddD = model->B1mobVddD0 + model->B1mobVddDl / Leff + model->B1mobVddDw / Weff; here->B1subthSlope = model->B1subthSlope0 + model->B1subthSlopeL / Leff + model->B1subthSlopeW / Weff; here->B1subthSlopeB = model->B1subthSlopeB0 + model->B1subthSlopeBL / Leff + model->B1subthSlopeBW / Weff; here->B1subthSlopeD = model->B1subthSlopeD0 + model->B1subthSlopeDL / Leff + model->B1subthSlopeDW / Weff; if(here->B1phi < 0.1 ) here->B1phi = 0.1; if(here->B1K1 < 0.0) here->B1K1 = 0.0; if(here->B1K2 < 0.0) here->B1K2 = 0.0; here->B1vt0 = here->B1vfb + here->B1phi + here->B1K1 * sqrt(here->B1phi) - here->B1K2 * here->B1phi; here->B1von = here->B1vt0; /* added for initialization*/ /* process Beta Parameters (unit: A/V**2) */ here->B1betaZero = here->B1betaZero * CoxWoverL; here->B1betaZeroB = here->B1betaZeroB * CoxWoverL; here->B1betaVdd = here->B1betaVdd * CoxWoverL; here->B1betaVddB = here->B1betaVddB * CoxWoverL; here->B1betaVddD = MAX(here->B1betaVddD * CoxWoverL,0.0); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim1/b1ld.c0000644000175000017500000007100113546075722021163 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Hong J. Park, Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim1def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" int B1load(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current value into the * sparse matrix previously provided */ { B1model *model = (B1model*)inModel; B1instance *here; double DrainSatCurrent = 0.0; double EffectiveLength = 0.0; double GateBulkOverlapCap = 0.0; double GateDrainOverlapCap = 0.0; double GateSourceOverlapCap = 0.0; double SourceSatCurrent = 0.0; double DrainArea = 0.0; double SourceArea = 0.0; double DrainPerimeter = 0.0; double SourcePerimeter = 0.0; double arg = 0.0; double capbd = 0.0; double capbs = 0.0; double cbd = 0.0; double cbhat = 0.0; double cbs = 0.0; double cd = 0.0; double cdrain = 0.0; double cdhat = 0.0; double cdreq = 0.0; double ceq = 0.0; double ceqbd = 0.0; double ceqbs = 0.0; double ceqqb = 0.0; double ceqqd = 0.0; double ceqqg = 0.0; double czbd = 0.0; double czbdsw = 0.0; double czbs = 0.0; double czbssw = 0.0; double delvbd = 0.0; double delvbs = 0.0; double delvds = 0.0; double delvgd = 0.0; double delvgs = 0.0; double evbd = 0.0; double evbs = 0.0; double gbd = 0.0; double gbs = 0.0; double gcbdb = 0.0; double gcbgb = 0.0; double gcbsb = 0.0; double gcddb = 0.0; double gcdgb = 0.0; double gcdsb = 0.0; double gcgdb = 0.0; double gcggb = 0.0; double gcgsb = 0.0; double gcsdb = 0.0; double gcsgb = 0.0; double gcssb = 0.0; double gds = 0.0; double geq = 0.0; double gm = 0.0; double gmbs = 0.0; double sarg = 0.0; double sargsw = 0.0; double vbd = 0.0; double vbs = 0.0; double vcrit = 0.0; double vds = 0.0; double vdsat = 0.0; double vgb = 0.0; double vgd = 0.0; double vgdo = 0.0; double vgs = 0.0; double von = 0.0; #ifndef PREDICTOR double xfact = 0.0; #endif double xnrm = 0.0; double xrev = 0.0; int Check = 0; double cgdb = 0.0; double cgsb = 0.0; double cbdb = 0.0; double cdgb = 0.0; double cddb = 0.0; double cdsb = 0.0; double cggb = 0.0; double cbgb = 0.0; double cbsb = 0.0; double csgb = 0.0; double cssb = 0.0; double csdb = 0.0; double PhiB = 0.0; double PhiBSW = 0.0; double MJ = 0.0; double MJSW = 0.0; double argsw = 0.0; double qgate = 0.0; double qbulk = 0.0; double qdrn = 0.0; double qsrc = 0.0; double cqgate = 0.0; double cqbulk = 0.0; double cqdrn = 0.0; double vt0 = 0.0; double args[8]; int ByPass = 0; #ifndef NOBYPASS double tempv = 0.0; #endif /*NOBYPASS*/ int error = 0; double m; /* parallel multiplier */ /* loop through all the B1 device models */ for( ; model != NULL; model = B1nextModel(model)) { /* loop through all the instances of the model */ for (here = B1instances(model); here != NULL ; here=B1nextInstance(here)) { EffectiveLength=here->B1l - model->B1deltaL * 1.e-6;/* m */ DrainArea = here->B1drainArea; SourceArea = here->B1sourceArea; DrainPerimeter = here->B1drainPerimeter; SourcePerimeter = here->B1sourcePerimeter; if( (DrainSatCurrent=DrainArea*model->B1jctSatCurDensity) < 1e-15){ DrainSatCurrent = 1.0e-15; } if( (SourceSatCurrent=SourceArea*model->B1jctSatCurDensity) <1.0e-15){ SourceSatCurrent = 1.0e-15; } GateSourceOverlapCap = model->B1gateSourceOverlapCap *here->B1w; GateDrainOverlapCap = model->B1gateDrainOverlapCap * here->B1w; GateBulkOverlapCap = model->B1gateBulkOverlapCap *EffectiveLength; von = model->B1type * here->B1von; vdsat = model->B1type * here->B1vdsat; vt0 = model->B1type * here->B1vt0; Check=1; ByPass = 0; if((ckt->CKTmode & MODEINITSMSIG)) { vbs= *(ckt->CKTstate0 + here->B1vbs); vgs= *(ckt->CKTstate0 + here->B1vgs); vds= *(ckt->CKTstate0 + here->B1vds); } else if ((ckt->CKTmode & MODEINITTRAN)) { vbs= *(ckt->CKTstate1 + here->B1vbs); vgs= *(ckt->CKTstate1 + here->B1vgs); vds= *(ckt->CKTstate1 + here->B1vds); } else if((ckt->CKTmode & MODEINITJCT) && !here->B1off) { vds= model->B1type * here->B1icVDS; vgs= model->B1type * here->B1icVGS; vbs= model->B1type * here->B1icVBS; if((vds==0) && (vgs==0) && (vbs==0) && ((ckt->CKTmode & (MODETRAN|MODEAC|MODEDCOP|MODEDCTRANCURVE)) || (!(ckt->CKTmode & MODEUIC)))) { vbs = -1; vgs = vt0; vds = 0; } } else if((ckt->CKTmode & (MODEINITJCT | MODEINITFIX) ) && (here->B1off)) { vbs=vgs=vds=0; } else { #ifndef PREDICTOR if((ckt->CKTmode & MODEINITPRED)) { xfact=ckt->CKTdelta/ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->B1vbs) = *(ckt->CKTstate1 + here->B1vbs); vbs = (1+xfact)* (*(ckt->CKTstate1 + here->B1vbs)) -(xfact * (*(ckt->CKTstate2 + here->B1vbs))); *(ckt->CKTstate0 + here->B1vgs) = *(ckt->CKTstate1 + here->B1vgs); vgs = (1+xfact)* (*(ckt->CKTstate1 + here->B1vgs)) -(xfact * (*(ckt->CKTstate2 + here->B1vgs))); *(ckt->CKTstate0 + here->B1vds) = *(ckt->CKTstate1 + here->B1vds); vds = (1+xfact)* (*(ckt->CKTstate1 + here->B1vds)) -(xfact * (*(ckt->CKTstate2 + here->B1vds))); *(ckt->CKTstate0 + here->B1vbd) = *(ckt->CKTstate0 + here->B1vbs)- *(ckt->CKTstate0 + here->B1vds); *(ckt->CKTstate0 + here->B1cd) = *(ckt->CKTstate1 + here->B1cd); *(ckt->CKTstate0 + here->B1cbs) = *(ckt->CKTstate1 + here->B1cbs); *(ckt->CKTstate0 + here->B1cbd) = *(ckt->CKTstate1 + here->B1cbd); *(ckt->CKTstate0 + here->B1gm) = *(ckt->CKTstate1 + here->B1gm); *(ckt->CKTstate0 + here->B1gds) = *(ckt->CKTstate1 + here->B1gds); *(ckt->CKTstate0 + here->B1gmbs) = *(ckt->CKTstate1 + here->B1gmbs); *(ckt->CKTstate0 + here->B1gbd) = *(ckt->CKTstate1 + here->B1gbd); *(ckt->CKTstate0 + here->B1gbs) = *(ckt->CKTstate1 + here->B1gbs); *(ckt->CKTstate0 + here->B1cggb) = *(ckt->CKTstate1 + here->B1cggb); *(ckt->CKTstate0 + here->B1cbgb) = *(ckt->CKTstate1 + here->B1cbgb); *(ckt->CKTstate0 + here->B1cbsb) = *(ckt->CKTstate1 + here->B1cbsb); *(ckt->CKTstate0 + here->B1cgdb) = *(ckt->CKTstate1 + here->B1cgdb); *(ckt->CKTstate0 + here->B1cgsb) = *(ckt->CKTstate1 + here->B1cgsb); *(ckt->CKTstate0 + here->B1cbdb) = *(ckt->CKTstate1 + here->B1cbdb); *(ckt->CKTstate0 + here->B1cdgb) = *(ckt->CKTstate1 + here->B1cdgb); *(ckt->CKTstate0 + here->B1cddb) = *(ckt->CKTstate1 + here->B1cddb); *(ckt->CKTstate0 + here->B1cdsb) = *(ckt->CKTstate1 + here->B1cdsb); } else { #endif /* PREDICTOR */ vbs = model->B1type * ( *(ckt->CKTrhsOld+here->B1bNode) - *(ckt->CKTrhsOld+here->B1sNodePrime)); vgs = model->B1type * ( *(ckt->CKTrhsOld+here->B1gNode) - *(ckt->CKTrhsOld+here->B1sNodePrime)); vds = model->B1type * ( *(ckt->CKTrhsOld+here->B1dNodePrime) - *(ckt->CKTrhsOld+here->B1sNodePrime)); #ifndef PREDICTOR } #endif /* PREDICTOR */ vbd=vbs-vds; vgd=vgs-vds; vgdo = *(ckt->CKTstate0 + here->B1vgs) - *(ckt->CKTstate0 + here->B1vds); delvbs = vbs - *(ckt->CKTstate0 + here->B1vbs); delvbd = vbd - *(ckt->CKTstate0 + here->B1vbd); delvgs = vgs - *(ckt->CKTstate0 + here->B1vgs); delvds = vds - *(ckt->CKTstate0 + here->B1vds); delvgd = vgd-vgdo; if (here->B1mode >= 0) { cdhat= *(ckt->CKTstate0 + here->B1cd) - *(ckt->CKTstate0 + here->B1gbd) * delvbd + *(ckt->CKTstate0 + here->B1gmbs) * delvbs + *(ckt->CKTstate0 + here->B1gm) * delvgs + *(ckt->CKTstate0 + here->B1gds) * delvds ; } else { cdhat= *(ckt->CKTstate0 + here->B1cd) - ( *(ckt->CKTstate0 + here->B1gbd) - *(ckt->CKTstate0 + here->B1gmbs)) * delvbd - *(ckt->CKTstate0 + here->B1gm) * delvgd + *(ckt->CKTstate0 + here->B1gds) * delvds; } cbhat= *(ckt->CKTstate0 + here->B1cbs) + *(ckt->CKTstate0 + here->B1cbd) + *(ckt->CKTstate0 + here->B1gbd) * delvbd + *(ckt->CKTstate0 + here->B1gbs) * delvbs ; #ifndef NOBYPASS /* now lets see if we can bypass (ugh) */ /* following should be one big if connected by && all over * the place, but some C compilers can't handle that, so * we split it up here to let them digest it in stages */ tempv = MAX(fabs(cbhat),fabs(*(ckt->CKTstate0 + here->B1cbs) + *(ckt->CKTstate0 + here->B1cbd)))+ckt->CKTabstol; if((!(ckt->CKTmode & MODEINITPRED)) && (ckt->CKTbypass) ) if( (fabs(delvbs) < (ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->B1vbs)))+ ckt->CKTvoltTol)) ) if ( (fabs(delvbd) < (ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0+here->B1vbd)))+ ckt->CKTvoltTol)) ) if( (fabs(delvgs) < (ckt->CKTreltol * MAX(fabs(vgs), fabs(*(ckt->CKTstate0+here->B1vgs)))+ ckt->CKTvoltTol))) if ( (fabs(delvds) < (ckt->CKTreltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0+here->B1vds)))+ ckt->CKTvoltTol)) ) if( (fabs(cdhat- *(ckt->CKTstate0 + here->B1cd)) < ckt->CKTreltol * MAX(fabs(cdhat),fabs(*(ckt->CKTstate0 + here->B1cd))) + ckt->CKTabstol) ) if ( (fabs(cbhat-(*(ckt->CKTstate0 + here->B1cbs) + *(ckt->CKTstate0 + here->B1cbd))) < ckt->CKTreltol * tempv)) { /* bypass code */ vbs = *(ckt->CKTstate0 + here->B1vbs); vbd = *(ckt->CKTstate0 + here->B1vbd); vgs = *(ckt->CKTstate0 + here->B1vgs); vds = *(ckt->CKTstate0 + here->B1vds); vgd = vgs - vds; vgb = vgs - vbs; cd = *(ckt->CKTstate0 + here->B1cd); cbs = *(ckt->CKTstate0 + here->B1cbs); cbd = *(ckt->CKTstate0 + here->B1cbd); cdrain = here->B1mode * (cd + cbd); gm = *(ckt->CKTstate0 + here->B1gm); gds = *(ckt->CKTstate0 + here->B1gds); gmbs = *(ckt->CKTstate0 + here->B1gmbs); gbd = *(ckt->CKTstate0 + here->B1gbd); gbs = *(ckt->CKTstate0 + here->B1gbs); if((ckt->CKTmode & (MODETRAN | MODEAC)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) { cggb = *(ckt->CKTstate0 + here->B1cggb); cgdb = *(ckt->CKTstate0 + here->B1cgdb); cgsb = *(ckt->CKTstate0 + here->B1cgsb); cbgb = *(ckt->CKTstate0 + here->B1cbgb); cbdb = *(ckt->CKTstate0 + here->B1cbdb); cbsb = *(ckt->CKTstate0 + here->B1cbsb); cdgb = *(ckt->CKTstate0 + here->B1cdgb); cddb = *(ckt->CKTstate0 + here->B1cddb); cdsb = *(ckt->CKTstate0 + here->B1cdsb); capbs = *(ckt->CKTstate0 + here->B1capbs); capbd = *(ckt->CKTstate0 + here->B1capbd); ByPass = 1; goto line755; } else { goto line850; } } #endif /*NOBYPASS*/ von = model->B1type * here->B1von; if(*(ckt->CKTstate0 + here->B1vds) >=0) { vgs = DEVfetlim(vgs,*(ckt->CKTstate0 + here->B1vgs) ,von); vds = vgs - vgd; vds = DEVlimvds(vds,*(ckt->CKTstate0 + here->B1vds)); vgd = vgs - vds; } else { vgd = DEVfetlim(vgd,vgdo,von); vds = vgs - vgd; vds = -DEVlimvds(-vds,-(*(ckt->CKTstate0 + here->B1vds))); vgs = vgd + vds; } if(vds >= 0) { vcrit =CONSTvt0*log(CONSTvt0/(CONSTroot2*SourceSatCurrent)); vbs = DEVpnjlim(vbs,*(ckt->CKTstate0 + here->B1vbs), CONSTvt0,vcrit,&Check); /* B1 test */ vbd = vbs-vds; } else { vcrit = CONSTvt0*log(CONSTvt0/(CONSTroot2*DrainSatCurrent)); vbd = DEVpnjlim(vbd,*(ckt->CKTstate0 + here->B1vbd), CONSTvt0,vcrit,&Check); /* B1 test*/ vbs = vbd + vds; } } /* determine DC current and derivatives */ vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; if(vbs <= 0.0 ) { gbs = SourceSatCurrent / CONSTvt0 + ckt->CKTgmin; cbs = gbs * vbs ; } else { evbs = exp(vbs/CONSTvt0); gbs = SourceSatCurrent*evbs/CONSTvt0 + ckt->CKTgmin; cbs = SourceSatCurrent * (evbs-1) + ckt->CKTgmin * vbs ; } if(vbd <= 0.0) { gbd = DrainSatCurrent / CONSTvt0 + ckt->CKTgmin; cbd = gbd * vbd ; } else { evbd = exp(vbd/CONSTvt0); gbd = DrainSatCurrent*evbd/CONSTvt0 +ckt->CKTgmin; cbd = DrainSatCurrent *(evbd-1)+ckt->CKTgmin*vbd; } /* line 400 */ if(vds >= 0) { /* normal mode */ here->B1mode = 1; } else { /* inverse mode */ here->B1mode = -1; } /* call B1evaluate to calculate drain current and its * derivatives and charge and capacitances related to gate * drain, and bulk */ if( vds >= 0 ) { B1evaluate(vds,vbs,vgs,here,model,&gm,&gds,&gmbs,&qgate, &qbulk,&qdrn,&cggb,&cgdb,&cgsb,&cbgb,&cbdb,&cbsb,&cdgb, &cddb,&cdsb,&cdrain,&von,&vdsat,ckt); } else { B1evaluate(-vds,vbd,vgd,here,model,&gm,&gds,&gmbs,&qgate, &qbulk,&qsrc,&cggb,&cgsb,&cgdb,&cbgb,&cbsb,&cbdb,&csgb, &cssb,&csdb,&cdrain,&von,&vdsat,ckt); } here->B1von = model->B1type * von; here->B1vdsat = model->B1type * vdsat; /* * COMPUTE EQUIVALENT DRAIN CURRENT SOURCE */ cd=here->B1mode * cdrain - cbd; if ((ckt->CKTmode & (MODETRAN | MODEAC | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP ) && (ckt->CKTmode & MODEUIC))) { /* * charge storage elements * * bulk-drain and bulk-source depletion capacitances * czbd : zero bias drain junction capacitance * czbs : zero bias source junction capacitance * czbdsw:zero bias drain junction sidewall capacitance * czbssw:zero bias source junction sidewall capacitance */ czbd = model->B1unitAreaJctCap * DrainArea; czbs = model->B1unitAreaJctCap * SourceArea; czbdsw= model->B1unitLengthSidewallJctCap * DrainPerimeter; czbssw= model->B1unitLengthSidewallJctCap * SourcePerimeter; PhiB = model->B1bulkJctPotential; PhiBSW = model->B1sidewallJctPotential; MJ = model->B1bulkJctBotGradingCoeff; MJSW = model->B1bulkJctSideGradingCoeff; /* Source Bulk Junction */ if( vbs < 0 ) { arg = 1 - vbs / PhiB; argsw = 1 - vbs / PhiBSW; sarg = exp(-MJ*log(arg)); sargsw = exp(-MJSW*log(argsw)); *(ckt->CKTstate0 + here->B1qbs) = PhiB * czbs * (1-arg*sarg)/(1-MJ) + PhiBSW * czbssw * (1-argsw*sargsw)/(1-MJSW); capbs = czbs * sarg + czbssw * sargsw ; } else { *(ckt->CKTstate0+here->B1qbs) = vbs*(czbs+czbssw)+ vbs*vbs*(czbs*MJ*0.5/PhiB + czbssw * MJSW * 0.5/PhiBSW); capbs = czbs + czbssw + vbs *(czbs*MJ/PhiB+ czbssw * MJSW / PhiBSW ); } /* Drain Bulk Junction */ if( vbd < 0 ) { arg = 1 - vbd / PhiB; argsw = 1 - vbd / PhiBSW; sarg = exp(-MJ*log(arg)); sargsw = exp(-MJSW*log(argsw)); *(ckt->CKTstate0 + here->B1qbd) = PhiB * czbd * (1-arg*sarg)/(1-MJ) + PhiBSW * czbdsw * (1-argsw*sargsw)/(1-MJSW); capbd = czbd * sarg + czbdsw * sargsw ; } else { *(ckt->CKTstate0+here->B1qbd) = vbd*(czbd+czbdsw)+ vbd*vbd*(czbd*MJ*0.5/PhiB + czbdsw * MJSW * 0.5/PhiBSW); capbd = czbd + czbdsw + vbd *(czbd*MJ/PhiB+ czbdsw * MJSW / PhiBSW ); } } /* * check convergence */ if ( (here->B1off == 0) || (!(ckt->CKTmode & MODEINITFIX)) ){ if (Check == 1) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; } } *(ckt->CKTstate0 + here->B1vbs) = vbs; *(ckt->CKTstate0 + here->B1vbd) = vbd; *(ckt->CKTstate0 + here->B1vgs) = vgs; *(ckt->CKTstate0 + here->B1vds) = vds; *(ckt->CKTstate0 + here->B1cd) = cd; *(ckt->CKTstate0 + here->B1cbs) = cbs; *(ckt->CKTstate0 + here->B1cbd) = cbd; *(ckt->CKTstate0 + here->B1gm) = gm; *(ckt->CKTstate0 + here->B1gds) = gds; *(ckt->CKTstate0 + here->B1gmbs) = gmbs; *(ckt->CKTstate0 + here->B1gbd) = gbd; *(ckt->CKTstate0 + here->B1gbs) = gbs; *(ckt->CKTstate0 + here->B1cggb) = cggb; *(ckt->CKTstate0 + here->B1cgdb) = cgdb; *(ckt->CKTstate0 + here->B1cgsb) = cgsb; *(ckt->CKTstate0 + here->B1cbgb) = cbgb; *(ckt->CKTstate0 + here->B1cbdb) = cbdb; *(ckt->CKTstate0 + here->B1cbsb) = cbsb; *(ckt->CKTstate0 + here->B1cdgb) = cdgb; *(ckt->CKTstate0 + here->B1cddb) = cddb; *(ckt->CKTstate0 + here->B1cdsb) = cdsb; *(ckt->CKTstate0 + here->B1capbs) = capbs; *(ckt->CKTstate0 + here->B1capbd) = capbd; /* bulk and channel charge plus overlaps */ if((!(ckt->CKTmode & (MODETRAN | MODEAC))) && ((!(ckt->CKTmode & MODETRANOP)) || (!(ckt->CKTmode & MODEUIC))) && (!(ckt->CKTmode & MODEINITSMSIG))) goto line850; #ifndef NOBYPASS line755: #endif if( here->B1mode > 0 ) { args[0] = GateDrainOverlapCap; args[1] = GateSourceOverlapCap; args[2] = GateBulkOverlapCap; args[3] = capbd; args[4] = capbs; args[5] = cggb; args[6] = cgdb; args[7] = cgsb; B1mosCap(ckt,vgd,vgs,vgb, args, /* GateDrainOverlapCap, GateSourceOverlapCap,GateBulkOverlapCap, capbd,capbs, cggb,cgdb,cgsb, */ cbgb,cbdb,cbsb, cdgb,cddb,cdsb, &gcggb,&gcgdb,&gcgsb, &gcbgb,&gcbdb,&gcbsb, &gcdgb,&gcddb,&gcdsb,&gcsgb,&gcsdb,&gcssb, &qgate,&qbulk, &qdrn,&qsrc); } else { args[0] = GateSourceOverlapCap; args[1] = GateDrainOverlapCap; args[2] = GateBulkOverlapCap; args[3] = capbs; args[4] = capbd; args[5] = cggb; args[6] = cgsb; args[7] = cgdb; B1mosCap(ckt,vgs,vgd,vgb, args, /* GateSourceOverlapCap, GateDrainOverlapCap,GateBulkOverlapCap, capbs,capbd, cggb,cgsb,cgdb, */ cbgb,cbsb,cbdb, csgb,cssb,csdb, &gcggb,&gcgsb,&gcgdb, &gcbgb,&gcbsb,&gcbdb, &gcsgb,&gcssb,&gcsdb,&gcdgb,&gcdsb,&gcddb, &qgate,&qbulk, &qsrc,&qdrn); } if(ByPass) goto line860; *(ckt->CKTstate0 + here->B1qg) = qgate; *(ckt->CKTstate0 + here->B1qd) = qdrn - *(ckt->CKTstate0 + here->B1qbd); *(ckt->CKTstate0 + here->B1qb) = qbulk + *(ckt->CKTstate0 + here->B1qbd) + *(ckt->CKTstate0 + here->B1qbs); /* store small signal parameters */ if((!(ckt->CKTmode & (MODEAC | MODETRAN))) && (ckt->CKTmode & MODETRANOP ) && (ckt->CKTmode & MODEUIC )) goto line850; if(ckt->CKTmode & MODEINITSMSIG ) { *(ckt->CKTstate0+here->B1cggb) = cggb; *(ckt->CKTstate0+here->B1cgdb) = cgdb; *(ckt->CKTstate0+here->B1cgsb) = cgsb; *(ckt->CKTstate0+here->B1cbgb) = cbgb; *(ckt->CKTstate0+here->B1cbdb) = cbdb; *(ckt->CKTstate0+here->B1cbsb) = cbsb; *(ckt->CKTstate0+here->B1cdgb) = cdgb; *(ckt->CKTstate0+here->B1cddb) = cddb; *(ckt->CKTstate0+here->B1cdsb) = cdsb; *(ckt->CKTstate0+here->B1capbd) = capbd; *(ckt->CKTstate0+here->B1capbs) = capbs; goto line1000; } if(ckt->CKTmode & MODEINITTRAN ) { *(ckt->CKTstate1+here->B1qb) = *(ckt->CKTstate0+here->B1qb) ; *(ckt->CKTstate1+here->B1qg) = *(ckt->CKTstate0+here->B1qg) ; *(ckt->CKTstate1+here->B1qd) = *(ckt->CKTstate0+here->B1qd) ; } error = NIintegrate(ckt,&geq,&ceq,0.0,here->B1qb); if(error) return(error); error = NIintegrate(ckt,&geq,&ceq,0.0,here->B1qg); if(error) return(error); error = NIintegrate(ckt,&geq,&ceq,0.0,here->B1qd); if(error) return(error); goto line860; line850: /* initialize to zero charge conductance and current */ ceqqg = ceqqb = ceqqd = 0.0; gcdgb = gcddb = gcdsb = 0.0; gcsgb = gcsdb = gcssb = 0.0; gcggb = gcgdb = gcgsb = 0.0; gcbgb = gcbdb = gcbsb = 0.0; goto line900; line860: /* evaluate equivalent charge current */ cqgate = *(ckt->CKTstate0 + here->B1iqg); cqbulk = *(ckt->CKTstate0 + here->B1iqb); cqdrn = *(ckt->CKTstate0 + here->B1iqd); ceqqg = cqgate - gcggb * vgb + gcgdb * vbd + gcgsb * vbs; ceqqb = cqbulk - gcbgb * vgb + gcbdb * vbd + gcbsb * vbs; ceqqd = cqdrn - gcdgb * vgb + gcddb * vbd + gcdsb * vbs; if(ckt->CKTmode & MODEINITTRAN ) { *(ckt->CKTstate1 + here->B1iqb) = *(ckt->CKTstate0 + here->B1iqb); *(ckt->CKTstate1 + here->B1iqg) = *(ckt->CKTstate0 + here->B1iqg); *(ckt->CKTstate1 + here->B1iqd) = *(ckt->CKTstate0 + here->B1iqd); } /* * load current vector */ line900: m = here->B1m; ceqbs = model->B1type * (cbs-(gbs-ckt->CKTgmin)*vbs); ceqbd = model->B1type * (cbd-(gbd-ckt->CKTgmin)*vbd); ceqqg = model->B1type * ceqqg; ceqqb = model->B1type * ceqqb; ceqqd = model->B1type * ceqqd; if (here->B1mode >= 0) { xnrm=1; xrev=0; cdreq=model->B1type*(cdrain-gds*vds-gm*vgs-gmbs*vbs); } else { xnrm=0; xrev=1; cdreq = -(model->B1type)*(cdrain+gds*vds-gm*vgd-gmbs*vbd); } *(ckt->CKTrhs + here->B1gNode) -= m * ceqqg; *(ckt->CKTrhs + here->B1bNode) -= m * (ceqbs+ceqbd+ceqqb); *(ckt->CKTrhs + here->B1dNodePrime) += m * (ceqbd-cdreq-ceqqd); *(ckt->CKTrhs + here->B1sNodePrime) += m * (cdreq+ceqbs+ceqqg+ceqqb+ceqqd); /* * load y matrix */ *(here->B1DdPtr) += m * (here->B1drainConductance); *(here->B1GgPtr) += m * (gcggb); *(here->B1SsPtr) += m * (here->B1sourceConductance); *(here->B1BbPtr) += m * (gbd+gbs-gcbgb-gcbdb-gcbsb); *(here->B1DPdpPtr) += m * (here->B1drainConductance+gds+gbd+xrev*(gm+gmbs)+gcddb); *(here->B1SPspPtr) += m * (here->B1sourceConductance+gds+gbs+xnrm*(gm+gmbs)+gcssb); *(here->B1DdpPtr) += m * (-here->B1drainConductance); *(here->B1GbPtr) += m * (-gcggb-gcgdb-gcgsb); *(here->B1GdpPtr) += m * (gcgdb); *(here->B1GspPtr) += m * (gcgsb); *(here->B1SspPtr) += m * (-here->B1sourceConductance); *(here->B1BgPtr) += m * (gcbgb); *(here->B1BdpPtr) += m * (-gbd+gcbdb); *(here->B1BspPtr) += m * (-gbs+gcbsb); *(here->B1DPdPtr) += m * (-here->B1drainConductance); *(here->B1DPgPtr) += m * ((xnrm-xrev)*gm+gcdgb); *(here->B1DPbPtr) += m * (-gbd+(xnrm-xrev)*gmbs-gcdgb-gcddb-gcdsb); *(here->B1DPspPtr) += m * (-gds-xnrm*(gm+gmbs)+gcdsb); *(here->B1SPgPtr) += m * (-(xnrm-xrev)*gm+gcsgb); *(here->B1SPsPtr) += m * (-here->B1sourceConductance); *(here->B1SPbPtr) += m * (-gbs-(xnrm-xrev)*gmbs-gcsgb-gcsdb-gcssb); *(here->B1SPdpPtr) += m * (-gds-xrev*(gm+gmbs)+gcsdb); line1000: ; } /* End of Mosfet Instance */ } /* End of Model Instance */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim1/b1getic.c0000644000175000017500000000242313546075722021661 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Hong J. Park, Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim1def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B1getic(GENmodel *inModel, CKTcircuit *ckt) { B1model *model = (B1model*)inModel; B1instance *here; /* * grab initial conditions out of rhs array. User specified, so use * external nodes to get values */ for( ; model ; model = B1nextModel(model)) { for(here = B1instances(model); here ; here = B1nextInstance(here)) { if(!here->B1icVBSGiven) { here->B1icVBS = *(ckt->CKTrhs + here->B1bNode) - *(ckt->CKTrhs + here->B1sNode); } if(!here->B1icVDSGiven) { here->B1icVDS = *(ckt->CKTrhs + here->B1dNode) - *(ckt->CKTrhs + here->B1sNode); } if(!here->B1icVGSGiven) { here->B1icVGS = *(ckt->CKTrhs + here->B1gNode) - *(ckt->CKTrhs + here->B1sNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim1/b1disto.c0000644000175000017500000012555213546075722021721 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury Modified: AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim1def.h" #include "ngspice/sperror.h" #include "ngspice/distodef.h" #include "ngspice/suffix.h" int B1disto(int mode, GENmodel *genmodel, CKTcircuit *ckt) /* assuming here that ckt->CKTomega has been initialised to * the correct value */ { B1model *model = (B1model *) genmodel; DISTOAN* job = (DISTOAN*) ckt->CKTcurJob; DpassStr pass; double r1h1x,i1h1x; double r1h1y,i1h1y; double r1h1z, i1h1z; double r1h2x, i1h2x; double r1h2y, i1h2y; double r1h2z, i1h2z; double r1hm2x,i1hm2x; double r1hm2y,i1hm2y; double r1hm2z, i1hm2z; double r2h11x,i2h11x; double r2h11y,i2h11y; double r2h11z, i2h11z; double r2h1m2x,i2h1m2x; double r2h1m2y,i2h1m2y; double r2h1m2z, i2h1m2z; double temp, itemp; B1instance *here; if (mode == D_SETUP) return(B1dSetup((GENmodel *)model,ckt)); if ((mode == D_TWOF1) || (mode == D_THRF1) || (mode == D_F1PF2) || (mode == D_F1MF2) || (mode == D_2F1MF2)) { /* loop through all the B1 models */ for( ; model != NULL; model = B1nextModel(model)) { /* loop through all the instances of the model */ for (here = B1instances(model); here != NULL ; here=B1nextInstance(here)) { /* loading starts here */ switch (mode) { case D_TWOF1: /* from now on, in the 3-var case, x=vgs,y=vbs,z=vds */ { /* draincurrent term */ r1h1x = *(job->r1H1ptr + here->B1gNode) - *(job->r1H1ptr + here->B1sNodePrime); i1h1x = *(job->i1H1ptr + here->B1gNode) - *(job->i1H1ptr + here->B1sNodePrime); r1h1y = *(job->r1H1ptr + here->B1bNode) - *(job->r1H1ptr + here->B1sNodePrime); i1h1y = *(job->i1H1ptr + here->B1bNode) - *(job->i1H1ptr + here->B1sNodePrime); r1h1z = *(job->r1H1ptr + here->B1dNodePrime) - *(job->r1H1ptr + here->B1sNodePrime); i1h1z = *(job->i1H1ptr + here->B1dNodePrime) - *(job->i1H1ptr + here->B1sNodePrime); /* draincurrent is a function of vgs,vbs,and vds; * have got their linear kernels; now to call * load functions */ temp = DFn2F1(here->DrC_x2, here->DrC_y2, here->DrC_z2, here->DrC_xy, here->DrC_yz, here->DrC_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z); itemp = DFi2F1(here->DrC_x2, here->DrC_y2, here->DrC_z2, here->DrC_xy, here->DrC_yz, here->DrC_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z); *(ckt->CKTrhs + here->B1dNodePrime) -= temp; *(ckt->CKTirhs + here->B1dNodePrime) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* draincurrent term loading over */ /* loading qg term */ /* kernels for vgs,vbs and vds already set up */ temp = -ckt->CKTomega * DFi2F1(here->qg_x2, here->qg_y2, here->qg_z2, here->qg_xy, here->qg_yz, here->qg_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z); itemp = ckt->CKTomega * DFn2F1(here->qg_x2, here->qg_y2, here->qg_z2, here->qg_xy, here->qg_yz, here->qg_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z); *(ckt->CKTrhs + here->B1gNode) -= temp; *(ckt->CKTirhs + here->B1gNode) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* qg term over */ /* loading qb term */ /* kernels for vgs,vbs and vds already set up */ temp = -ckt->CKTomega * DFi2F1(here->qb_x2, here->qb_y2, here->qb_z2, here->qb_xy, here->qb_yz, here->qb_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z); itemp = ckt->CKTomega * DFn2F1(here->qb_x2, here->qb_y2, here->qb_z2, here->qb_xy, here->qb_yz, here->qb_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z); *(ckt->CKTrhs + here->B1bNode) -= temp; *(ckt->CKTirhs + here->B1bNode) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* qb term over */ /* loading qd term */ /* kernels for vgs,vbs and vds already set up */ temp = -ckt->CKTomega * DFi2F1(here->qd_x2, here->qd_y2, here->qd_z2, here->qd_xy, here->qd_yz, here->qd_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z); itemp = ckt->CKTomega * DFn2F1(here->qd_x2, here->qd_y2, here->qd_z2, here->qd_xy, here->qd_yz, here->qd_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z); *(ckt->CKTrhs + here->B1dNodePrime) -= temp; *(ckt->CKTirhs + here->B1dNodePrime) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* qd term over */ /* loading here->B1gbs term */ r1h1x = *(job->r1H1ptr + here->B1bNode) - *(job->r1H1ptr + here->B1sNodePrime); i1h1x = *(job->i1H1ptr + here->B1bNode) - *(job->i1H1ptr + here->B1sNodePrime); /* now r1h1x = vbs */ temp = D1n2F1(here->gbs2, r1h1x, i1h1x); itemp = D1i2F1(here->gbs2, r1h1x, i1h1x); *(ckt->CKTrhs + here->B1bNode) -= temp; *(ckt->CKTirhs + here->B1bNode) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* here->B1gbs term over */ /* loading here->B1gbd term */ r1h1x = *(job->r1H1ptr + here->B1bNode) - *(job->r1H1ptr + here->B1dNodePrime); i1h1x = *(job->i1H1ptr + here->B1bNode) - *(job->i1H1ptr + here->B1dNodePrime); /* now r1h1x = vbd */ temp = D1n2F1(here->gbd2, r1h1x, i1h1x); itemp = D1i2F1(here->gbd2, r1h1x, i1h1x); *(ckt->CKTrhs + here->B1gNode) -= temp; *(ckt->CKTirhs + here->B1gNode) -= itemp; *(ckt->CKTrhs + here->B1dNodePrime) += temp; *(ckt->CKTirhs + here->B1dNodePrime) += itemp; /* here->B1gbd term over */ /* all done */ } break; case D_THRF1: /* from now on, in the 3-var case, x=vgs,y=vbs,z=vds */ { /* draincurrent term */ r1h1x = *(job->r1H1ptr + here->B1gNode) - *(job->r1H1ptr + here->B1sNodePrime); i1h1x = *(job->i1H1ptr + here->B1gNode) - *(job->i1H1ptr + here->B1sNodePrime); r1h1y = *(job->r1H1ptr + here->B1bNode) - *(job->r1H1ptr + here->B1sNodePrime); i1h1y = *(job->i1H1ptr + here->B1bNode) - *(job->i1H1ptr + here->B1sNodePrime); r1h1z = *(job->r1H1ptr + here->B1dNodePrime) - *(job->r1H1ptr + here->B1sNodePrime); i1h1z = *(job->i1H1ptr + here->B1dNodePrime) - *(job->i1H1ptr + here->B1sNodePrime); r2h11x = *(job->r2H11ptr + here->B1gNode) - *(job->r2H11ptr + here->B1sNodePrime); i2h11x = *(job->i2H11ptr + here->B1gNode) - *(job->i2H11ptr + here->B1sNodePrime); r2h11y = *(job->r2H11ptr + here->B1bNode) - *(job->r2H11ptr + here->B1sNodePrime); i2h11y = *(job->i2H11ptr + here->B1bNode) - *(job->i2H11ptr + here->B1sNodePrime); r2h11z = *(job->r2H11ptr + here->B1dNodePrime) - *(job->r2H11ptr + here->B1sNodePrime); i2h11z = *(job->i2H11ptr + here->B1dNodePrime) - *(job->i2H11ptr + here->B1sNodePrime); /* draincurrent is a function of vgs,vbs,and vds; * have got their linear kernels; now to call * load functions */ temp = DFn3F1(here->DrC_x2, here->DrC_y2, here->DrC_z2, here->DrC_xy, here->DrC_yz, here->DrC_xz, here->DrC_x3, here->DrC_y3, here->DrC_z3, here->DrC_x2y, here->DrC_x2z, here->DrC_xy2, here->DrC_y2z, here->DrC_xz2, here->DrC_yz2, here->DrC_xyz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r2h11x, i2h11x, r2h11y, i2h11y, r2h11z, i2h11z); itemp = DFi3F1(here->DrC_x2, here->DrC_y2, here->DrC_z2, here->DrC_xy, here->DrC_yz, here->DrC_xz, here->DrC_x3, here->DrC_y3, here->DrC_z3, here->DrC_x2y, here->DrC_x2z, here->DrC_xy2, here->DrC_y2z, here->DrC_xz2, here->DrC_yz2, here->DrC_xyz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r2h11x, i2h11x, r2h11y, i2h11y, r2h11z, i2h11z); *(ckt->CKTrhs + here->B1dNodePrime) -= temp; *(ckt->CKTirhs + here->B1dNodePrime) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* draincurrent term loading over */ /* loading qg term */ /* kernels for vgs,vbs and vds already set up */ temp = -ckt->CKTomega * DFi3F1(here->qg_x2, here->qg_y2, here->qg_z2, here->qg_xy, here->qg_yz, here->qg_xz, here->qg_x3, here->qg_y3, here->qg_z3, here->qg_x2y, here->qg_x2z, here->qg_xy2, here->qg_y2z, here->qg_xz2, here->qg_yz2, here->qg_xyz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r2h11x, i2h11x, r2h11y, i2h11y, r2h11z, i2h11z); itemp = ckt->CKTomega * DFn3F1(here->qg_x2, here->qg_y2, here->qg_z2, here->qg_xy, here->qg_yz, here->qg_xz, here->qg_x3, here->qg_y3, here->qg_z3, here->qg_x2y, here->qg_x2z, here->qg_xy2, here->qg_y2z, here->qg_xz2, here->qg_yz2, here->qg_xyz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r2h11x, i2h11x, r2h11y, i2h11y, r2h11z, i2h11z); *(ckt->CKTrhs + here->B1gNode) -= temp; *(ckt->CKTirhs + here->B1gNode) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* qg term over */ /* loading qb term */ /* kernels for vgs,vbs and vds already set up */ temp = -ckt->CKTomega * DFi3F1(here->qb_x2, here->qb_y2, here->qb_z2, here->qb_xy, here->qb_yz, here->qb_xz, here->qb_x3, here->qb_y3, here->qb_z3, here->qb_x2y, here->qb_x2z, here->qb_xy2, here->qb_y2z, here->qb_xz2, here->qb_yz2, here->qb_xyz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r2h11x, i2h11x, r2h11y, i2h11y, r2h11z, i2h11z); itemp = ckt->CKTomega * DFn3F1(here->qb_x2, here->qb_y2, here->qb_z2, here->qb_xy, here->qb_yz, here->qb_xz, here->qb_x3, here->qb_y3, here->qb_z3, here->qb_x2y, here->qb_x2z, here->qb_xy2, here->qb_y2z, here->qb_xz2, here->qb_yz2, here->qb_xyz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r2h11x, i2h11x, r2h11y, i2h11y, r2h11z, i2h11z); *(ckt->CKTrhs + here->B1bNode) -= temp; *(ckt->CKTirhs + here->B1bNode) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* qb term over */ /* loading qd term */ /* kernels for vgs,vbs and vds already set up */ temp = -ckt->CKTomega * DFi3F1(here->qd_x2, here->qd_y2, here->qd_z2, here->qd_xy, here->qd_yz, here->qd_xz, here->qd_x3, here->qd_y3, here->qd_z3, here->qd_x2y, here->qd_x2z, here->qd_xy2, here->qd_y2z, here->qd_xz2, here->qd_yz2, here->qd_xyz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r2h11x, i2h11x, r2h11y, i2h11y, r2h11z, i2h11z); itemp = ckt->CKTomega * DFn3F1(here->qd_x2, here->qd_y2, here->qd_z2, here->qd_xy, here->qd_yz, here->qd_xz, here->qd_x3, here->qd_y3, here->qd_z3, here->qd_x2y, here->qd_x2z, here->qd_xy2, here->qd_y2z, here->qd_xz2, here->qd_yz2, here->qd_xyz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r2h11x, i2h11x, r2h11y, i2h11y, r2h11z, i2h11z); *(ckt->CKTrhs + here->B1dNodePrime) -= temp; *(ckt->CKTirhs + here->B1dNodePrime) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* qd term over */ /* loading here->B1gbs term */ r1h1x = *(job->r1H1ptr + here->B1bNode) - *(job->r1H1ptr + here->B1sNodePrime); i1h1x = *(job->i1H1ptr + here->B1bNode) - *(job->i1H1ptr + here->B1sNodePrime); r2h11x = *(job->r2H11ptr + here->B1bNode) - *(job->r2H11ptr + here->B1sNodePrime); i2h11x = *(job->i2H11ptr + here->B1bNode) - *(job->i2H11ptr + here->B1sNodePrime); /* now r1h1x = vbs */ temp = D1n3F1(here->gbs2, here->gbs3, r1h1x, i1h1x, r2h11x, i2h11x); itemp = D1i3F1(here->gbs2, here->gbs3, r1h1x, i1h1x, r2h11x, i2h11x); *(ckt->CKTrhs + here->B1bNode) -= temp; *(ckt->CKTirhs + here->B1bNode) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* here->B1gbs term over */ /* loading here->B1gbd term */ r1h1x = *(job->r1H1ptr + here->B1bNode) - *(job->r1H1ptr + here->B1dNodePrime); i1h1x = *(job->i1H1ptr + here->B1bNode) - *(job->i1H1ptr + here->B1dNodePrime); r2h11x = *(job->r2H11ptr + here->B1bNode) - *(job->r2H11ptr + here->B1dNodePrime); i2h11x = *(job->i2H11ptr + here->B1bNode) - *(job->i2H11ptr + here->B1dNodePrime); /* now r1h1x = vbd */ temp = D1n3F1(here->gbd2, here->gbd3, r1h1x, i1h1x, r2h11x, i2h11x); itemp = D1i3F1(here->gbd2, here->gbd3, r1h1x, i1h1x, r2h11x, i2h11x); *(ckt->CKTrhs + here->B1bNode) -= temp; *(ckt->CKTirhs + here->B1bNode) -= itemp; *(ckt->CKTrhs + here->B1dNodePrime) += temp; *(ckt->CKTirhs + here->B1dNodePrime) += itemp; /* here->B1gbd term over */ /* all done */ } break; case D_F1PF2: /* from now on, in the 3-var case, x=vgs,y=vbs,z=vds */ { /* draincurrent term */ r1h1x = *(job->r1H1ptr + here->B1gNode) - *(job->r1H1ptr + here->B1sNodePrime); i1h1x = *(job->i1H1ptr + here->B1gNode) - *(job->i1H1ptr + here->B1sNodePrime); r1h1y = *(job->r1H1ptr + here->B1bNode) - *(job->r1H1ptr + here->B1sNodePrime); i1h1y = *(job->i1H1ptr + here->B1bNode) - *(job->i1H1ptr + here->B1sNodePrime); r1h1z = *(job->r1H1ptr + here->B1dNodePrime) - *(job->r1H1ptr + here->B1sNodePrime); i1h1z = *(job->i1H1ptr + here->B1dNodePrime) - *(job->i1H1ptr + here->B1sNodePrime); r1h2x = *(job->r1H2ptr + here->B1gNode) - *(job->r1H2ptr + here->B1sNodePrime); i1h2x = (*(job->i1H2ptr + here->B1gNode) - *(job->i1H2ptr + here->B1sNodePrime)); r1h2y = *(job->r1H2ptr + here->B1bNode) - *(job->r1H2ptr + here->B1sNodePrime); i1h2y = (*(job->i1H2ptr + here->B1bNode) - *(job->i1H2ptr + here->B1sNodePrime)); r1h2z = *(job->r1H2ptr + here->B1dNodePrime) - *(job->r1H2ptr + here->B1sNodePrime); i1h2z = (*(job->i1H2ptr + here->B1dNodePrime) - *(job->i1H2ptr + here->B1sNodePrime)); /* draincurrent is a function of vgs,vbs,and vds; * have got their linear kernels; now to call * load functions */ temp = DFnF12(here->DrC_x2, here->DrC_y2, here->DrC_z2, here->DrC_xy, here->DrC_yz, here->DrC_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1h2x, i1h2x, r1h2y, i1h2y, r1h2z, i1h2z); itemp = DFiF12(here->DrC_x2, here->DrC_y2, here->DrC_z2, here->DrC_xy, here->DrC_yz, here->DrC_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1h2x, i1h2x, r1h2y, i1h2y, r1h2z, i1h2z); *(ckt->CKTrhs + here->B1dNodePrime) -= temp; *(ckt->CKTirhs + here->B1dNodePrime) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* draincurrent term loading over */ /* loading qg term */ /* kernels for vgs,vbs and vds already set up */ temp = -ckt->CKTomega * DFiF12(here->qg_x2, here->qg_y2, here->qg_z2, here->qg_xy, here->qg_yz, here->qg_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1h2x, i1h2x, r1h2y, i1h2y, r1h2z, i1h2z); itemp = ckt->CKTomega * DFnF12(here->qg_x2, here->qg_y2, here->qg_z2, here->qg_xy, here->qg_yz, here->qg_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1h2x, i1h2x, r1h2y, i1h2y, r1h2z, i1h2z); *(ckt->CKTrhs + here->B1gNode) -= temp; *(ckt->CKTirhs + here->B1gNode) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* qg term over */ /* loading qb term */ /* kernels for vgs,vbs and vds already set up */ temp = -ckt->CKTomega * DFiF12(here->qb_x2, here->qb_y2, /* XXX Bug fixed: fewer arguments passed than declared */ here->qb_z2, here->qb_xy, here->qb_yz, here->qb_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1h2x, i1h2x, r1h2y, i1h2y, r1h2z, i1h2z); itemp = ckt->CKTomega * DFnF12(here->qb_x2, here->qb_y2, here->qb_z2, here->qb_xy, here->qb_yz, here->qb_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1h2x, i1h2x, r1h2y, i1h2y, r1h2z, i1h2z); *(ckt->CKTrhs + here->B1bNode) -= temp; *(ckt->CKTirhs + here->B1bNode) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* qb term over */ /* loading qd term */ /* kernels for vgs,vbs and vds already set up */ temp = -ckt->CKTomega * DFiF12(here->qd_x2, here->qd_y2, here->qd_z2, here->qd_xy, here->qd_yz, here->qd_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1h2x, i1h2x, r1h2y, i1h2y, r1h2z, i1h2z); itemp = ckt->CKTomega * DFnF12(here->qd_x2, here->qd_y2, here->qd_z2, here->qd_xy, here->qd_yz, here->qd_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1h2x, i1h2x, r1h2y, i1h2y, r1h2z, i1h2z); *(ckt->CKTrhs + here->B1dNodePrime) -= temp; *(ckt->CKTirhs + here->B1dNodePrime) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* qd term over */ /* loading here->B1gbs term */ r1h1x = *(job->r1H1ptr + here->B1bNode) - *(job->r1H1ptr + here->B1sNodePrime); i1h1x = *(job->i1H1ptr + here->B1bNode) - *(job->i1H1ptr + here->B1sNodePrime); r1h2x = *(job->r1H2ptr + here->B1bNode) - *(job->r1H2ptr + here->B1sNodePrime); i1h2x = *(job->i1H2ptr + here->B1bNode) - *(job->i1H2ptr + here->B1sNodePrime); /* now r1h1x = vbs */ temp = D1nF12(here->gbs2, r1h1x, i1h1x, r1h2x, i1h2x); itemp = D1iF12(here->gbs2, r1h1x, i1h1x, r1h2x, i1h2x); *(ckt->CKTrhs + here->B1bNode) -= temp; *(ckt->CKTirhs + here->B1bNode) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* here->B1gbs term over */ /* loading here->B1gbd term */ r1h1x = *(job->r1H1ptr + here->B1bNode) - *(job->r1H1ptr + here->B1dNodePrime); i1h1x = *(job->i1H1ptr + here->B1bNode) - *(job->i1H1ptr + here->B1dNodePrime); r1h2x = *(job->r1H2ptr + here->B1bNode) - *(job->r1H2ptr + here->B1dNodePrime); i1h2x = *(job->i1H2ptr + here->B1bNode) - *(job->i1H2ptr + here->B1dNodePrime); /* now r1h1x = vbd */ temp = D1nF12(here->gbd2, r1h1x, i1h1x, r1h2x, i1h2x); itemp = D1iF12(here->gbd2, r1h1x, i1h1x, r1h2x, i1h2x); *(ckt->CKTrhs + here->B1gNode) -= temp; *(ckt->CKTirhs + here->B1gNode) -= itemp; *(ckt->CKTrhs + here->B1dNodePrime) += temp; *(ckt->CKTirhs + here->B1dNodePrime) += itemp; /* here->B1gbd term over */ /* all done */ } break; case D_F1MF2: /* from now on, in the 3-var case, x=vgs,y=vbs,z=vds */ { /* draincurrent term */ r1h1x = *(job->r1H1ptr + here->B1gNode) - *(job->r1H1ptr + here->B1sNodePrime); i1h1x = *(job->i1H1ptr + here->B1gNode) - *(job->i1H1ptr + here->B1sNodePrime); r1h1y = *(job->r1H1ptr + here->B1bNode) - *(job->r1H1ptr + here->B1sNodePrime); i1h1y = *(job->i1H1ptr + here->B1bNode) - *(job->i1H1ptr + here->B1sNodePrime); r1h1z = *(job->r1H1ptr + here->B1dNodePrime) - *(job->r1H1ptr + here->B1sNodePrime); i1h1z = *(job->i1H1ptr + here->B1dNodePrime) - *(job->i1H1ptr + here->B1sNodePrime); r1hm2x = *(job->r1H2ptr + here->B1gNode) - *(job->r1H2ptr + here->B1sNodePrime); i1hm2x = -(*(job->i1H2ptr + here->B1gNode) - *(job->i1H2ptr + here->B1sNodePrime)); r1hm2y = *(job->r1H2ptr + here->B1bNode) - *(job->r1H2ptr + here->B1sNodePrime); i1hm2y = -(*(job->i1H2ptr + here->B1bNode) - *(job->i1H2ptr + here->B1sNodePrime)); r1hm2z = *(job->r1H2ptr + here->B1dNodePrime) - *(job->r1H2ptr + here->B1sNodePrime); i1hm2z = -(*(job->i1H2ptr + here->B1dNodePrime) - *(job->i1H2ptr + here->B1sNodePrime)); /* draincurrent is a function of vgs,vbs,and vds; * have got their linear kernels; now to call * load functions */ temp = DFnF12(here->DrC_x2, here->DrC_y2, here->DrC_z2, here->DrC_xy, here->DrC_yz, here->DrC_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1hm2x, i1hm2x, r1hm2y, i1hm2y, r1hm2z, i1hm2z); itemp = DFiF12(here->DrC_x2, here->DrC_y2, here->DrC_z2, here->DrC_xy, here->DrC_yz, here->DrC_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1hm2x, i1hm2x, r1hm2y, i1hm2y, r1hm2z, i1hm2z); *(ckt->CKTrhs + here->B1dNodePrime) -= temp; *(ckt->CKTirhs + here->B1dNodePrime) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* draincurrent term loading over */ /* loading qg term */ /* kernels for vgs,vbs and vds already set up */ temp = -ckt->CKTomega * DFiF12(here->qg_x2, here->qg_y2, here->qg_z2, here->qg_xy, here->qg_yz, here->qg_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1hm2x, i1hm2x, r1hm2y, i1hm2y, r1hm2z, i1hm2z); itemp = ckt->CKTomega * DFnF12(here->qg_x2, here->qg_y2, here->qg_z2, here->qg_xy, here->qg_yz, here->qg_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1hm2x, i1hm2x, r1hm2y, i1hm2y, r1hm2z, i1hm2z); *(ckt->CKTrhs + here->B1gNode) -= temp; *(ckt->CKTirhs + here->B1gNode) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* qg term over */ /* loading qb term */ /* kernels for vgs,vbs and vds already set up */ temp = -ckt->CKTomega * DFiF12(here->qb_x2, here->qb_y2, /* XXX Bug fixed: fewer arguments passed than declared */ here->qb_z2, here->qb_xy, here->qb_yz, here->qb_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1hm2x, i1hm2x, r1hm2y, i1hm2y, r1hm2z, i1hm2z); itemp = ckt->CKTomega * DFnF12(here->qb_x2, here->qb_y2, here->qb_z2, here->qb_xy, here->qb_yz, here->qb_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1hm2x, i1hm2x, r1hm2y, i1hm2y, r1hm2z, i1hm2z); *(ckt->CKTrhs + here->B1bNode) -= temp; *(ckt->CKTirhs + here->B1bNode) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* qb term over */ /* loading qd term */ /* kernels for vgs,vbs and vds already set up */ temp = -ckt->CKTomega * DFiF12(here->qd_x2, here->qd_y2, here->qd_z2, here->qd_xy, here->qd_yz, here->qd_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1hm2x, i1hm2x, r1hm2y, i1hm2y, r1hm2z, i1hm2z); itemp = ckt->CKTomega * DFnF12(here->qd_x2, here->qd_y2, here->qd_z2, here->qd_xy, here->qd_yz, here->qd_xz, r1h1x, i1h1x, r1h1y, i1h1y, r1h1z, i1h1z, r1hm2x, i1hm2x, r1hm2y, i1hm2y, r1hm2z, i1hm2z); *(ckt->CKTrhs + here->B1dNodePrime) -= temp; *(ckt->CKTirhs + here->B1dNodePrime) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* qd term over */ /* loading here->B1gbs term */ r1h1x = *(job->r1H1ptr + here->B1bNode) - *(job->r1H1ptr + here->B1sNodePrime); i1h1x = *(job->i1H1ptr + here->B1bNode) - *(job->i1H1ptr + here->B1sNodePrime); r1hm2x = *(job->r1H2ptr + here->B1bNode) - *(job->r1H2ptr + here->B1sNodePrime); i1hm2x = -(*(job->i1H2ptr + here->B1bNode) - *(job->i1H2ptr + here->B1sNodePrime)); /* now r1h1x = vbs */ temp = D1nF12(here->gbs2, r1h1x, i1h1x, r1hm2x, i1hm2x); itemp = D1iF12(here->gbs2, r1h1x, i1h1x, r1hm2x, i1hm2x); *(ckt->CKTrhs + here->B1bNode) -= temp; *(ckt->CKTirhs + here->B1bNode) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* here->B1gbs term over */ /* loading here->B1gbd term */ r1h1x = *(job->r1H1ptr + here->B1bNode) - *(job->r1H1ptr + here->B1dNodePrime); i1h1x = *(job->i1H1ptr + here->B1bNode) - *(job->i1H1ptr + here->B1dNodePrime); r1hm2x = *(job->r1H2ptr + here->B1bNode) - *(job->r1H2ptr + here->B1dNodePrime); i1hm2x = -(*(job->i1H2ptr + here->B1bNode) - *(job->i1H2ptr + here->B1dNodePrime)); /* now r1h1x = vbd */ temp = D1nF12(here->gbd2, r1h1x, i1h1x, r1hm2x, i1hm2x); itemp = D1iF12(here->gbd2, r1h1x, i1h1x, r1hm2x, i1hm2x); *(ckt->CKTrhs + here->B1gNode) -= temp; *(ckt->CKTirhs + here->B1gNode) -= itemp; *(ckt->CKTrhs + here->B1dNodePrime) += temp; *(ckt->CKTirhs + here->B1dNodePrime) += itemp; /* here->B1gbd term over */ /* all done */ } break; case D_2F1MF2: /* from now on, in the 3-var case, x=vgs,y=vbs,z=vds */ { /* draincurrent term */ r1h1x = *(job->r1H1ptr + here->B1gNode) - *(job->r1H1ptr + here->B1sNodePrime); i1h1x = *(job->i1H1ptr + here->B1gNode) - *(job->i1H1ptr + here->B1sNodePrime); r1h1y = *(job->r1H1ptr + here->B1bNode) - *(job->r1H1ptr + here->B1sNodePrime); i1h1y = *(job->i1H1ptr + here->B1bNode) - *(job->i1H1ptr + here->B1sNodePrime); r1h1z = *(job->r1H1ptr + here->B1dNodePrime) - *(job->r1H1ptr + here->B1sNodePrime); i1h1z = *(job->i1H1ptr + here->B1dNodePrime) - *(job->i1H1ptr + here->B1sNodePrime); r1hm2x = *(job->r1H2ptr + here->B1gNode) - *(job->r1H2ptr + here->B1sNodePrime); i1hm2x = -(*(job->i1H2ptr + here->B1gNode) - *(job->i1H2ptr + here->B1sNodePrime)); r1hm2y = *(job->r1H2ptr + here->B1bNode) - *(job->r1H2ptr + here->B1sNodePrime); i1hm2y = -(*(job->i1H2ptr + here->B1bNode) - *(job->i1H2ptr + here->B1sNodePrime)); r1hm2z = *(job->r1H2ptr + here->B1dNodePrime) - *(job->r1H2ptr + here->B1sNodePrime); i1hm2z = -(*(job->i1H2ptr + here->B1dNodePrime) - *(job->i1H2ptr + here->B1sNodePrime)); r2h11x = *(job->r2H11ptr + here->B1gNode) - *(job->r2H11ptr + here->B1sNodePrime); i2h11x = *(job->i2H11ptr + here->B1gNode) - *(job->i2H11ptr + here->B1sNodePrime); r2h11y = *(job->r2H11ptr + here->B1bNode) - *(job->r2H11ptr + here->B1sNodePrime); i2h11y = *(job->i2H11ptr + here->B1bNode) - *(job->i2H11ptr + here->B1sNodePrime); r2h11z = *(job->r2H11ptr + here->B1dNodePrime) - *(job->r2H11ptr + here->B1sNodePrime); i2h11z = *(job->i2H11ptr + here->B1dNodePrime) - *(job->i2H11ptr + here->B1sNodePrime); r2h1m2x = *(job->r2H1m2ptr + here->B1gNode) - *(job->r2H1m2ptr + here->B1sNodePrime); i2h1m2x = *(job->i2H1m2ptr + here->B1gNode) - *(job->i2H1m2ptr + here->B1sNodePrime); r2h1m2y = *(job->r2H1m2ptr + here->B1bNode) - *(job->r2H1m2ptr + here->B1sNodePrime); i2h1m2y = *(job->i2H1m2ptr + here->B1bNode) - *(job->i2H1m2ptr + here->B1sNodePrime); r2h1m2z = *(job->r2H1m2ptr + here->B1dNodePrime) - *(job->r2H1m2ptr + here->B1sNodePrime); i2h1m2z = *(job->i2H1m2ptr + here->B1dNodePrime) - *(job->i2H1m2ptr + here->B1sNodePrime); /* draincurrent is a function of vgs,vbs,and vds; * have got their linear kernels; now to call * load functions */ pass.cxx = here->DrC_x2; pass.cyy = here->DrC_y2; pass.czz = here->DrC_z2; pass.cxy = here->DrC_xy; pass.cyz = here->DrC_yz; pass.cxz = here->DrC_xz; pass.cxxx = here->DrC_x3; pass.cyyy = here->DrC_y3; pass.czzz = here->DrC_z3; pass.cxxy = here->DrC_x2y; pass.cxxz = here->DrC_x2z; pass.cxyy = here->DrC_xy2; pass.cyyz = here->DrC_y2z; pass.cxzz = here->DrC_xz2; pass.cyzz = here->DrC_yz2; pass.cxyz = here->DrC_xyz; pass.r1h1x = r1h1x; pass.i1h1x = i1h1x; pass.r1h1y = r1h1y; pass.i1h1y = i1h1y; pass.r1h1z = r1h1z; pass.i1h1z = i1h1z; pass.r1h2x = r1hm2x; pass.i1h2x = i1hm2x; pass.r1h2y = r1hm2y; pass.i1h2y = i1hm2y; pass.r1h2z = r1hm2z; pass.i1h2z = i1hm2z; pass.r2h11x = r2h11x; pass.i2h11x = i2h11x; pass.r2h11y = r2h11y; pass.i2h11y = i2h11y; pass.r2h11z = r2h11z; pass.i2h11z = i2h11z; pass.h2f1f2x = r2h1m2x; pass.ih2f1f2x = i2h1m2x; pass.h2f1f2y = r2h1m2y; pass.ih2f1f2y = i2h1m2y; pass.h2f1f2z = r2h1m2z; pass.ih2f1f2z = i2h1m2z; temp = DFn2F12(&pass); itemp = DFi2F12(&pass); *(ckt->CKTrhs + here->B1dNodePrime) -= temp; *(ckt->CKTirhs + here->B1dNodePrime) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* draincurrent term loading over */ /* loading qg term */ /* kernels for vgs,vbs and vds already set up */ pass.cxx = here->qg_x2; pass.cyy = here->qg_y2; pass.czz = here->qg_z2; pass.cxy = here->qg_xy; pass.cyz = here->qg_yz; pass.cxz = here->qg_xz; pass.cxxx = here->qg_x3; pass.cyyy = here->qg_y3; pass.czzz = here->qg_z3; pass.cxxy = here->qg_x2y; pass.cxxz = here->qg_x2z; pass.cxyy = here->qg_xy2; pass.cyyz = here->qg_y2z; pass.cxzz = here->qg_xz2; pass.cyzz = here->qg_yz2; pass.cxyz = here->qg_xyz; pass.r1h1x = r1h1x; pass.i1h1x = i1h1x; pass.r1h1y = r1h1y; pass.i1h1y = i1h1y; pass.r1h1z = r1h1z; pass.i1h1z = i1h1z; pass.r1h2x = r1hm2x; pass.i1h2x = i1hm2x; pass.r1h2y = r1hm2y; pass.i1h2y = i1hm2y; pass.r1h2z = r1hm2z; pass.i1h2z = i1hm2z; pass.r2h11x = r2h11x; pass.i2h11x = i2h11x; pass.r2h11y = r2h11y; pass.i2h11y = i2h11y; pass.r2h11z = r2h11z; pass.i2h11z = i2h11z; pass.h2f1f2x = r2h1m2x; pass.ih2f1f2x = i2h1m2x; pass.h2f1f2y = r2h1m2y; pass.ih2f1f2y = i2h1m2y; pass.h2f1f2z = r2h1m2z; pass.ih2f1f2z = i2h1m2z; temp = -ckt->CKTomega * DFi2F12(&pass); itemp = ckt->CKTomega * DFn2F12(&pass); *(ckt->CKTrhs + here->B1gNode) -= temp; *(ckt->CKTirhs + here->B1gNode) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* qg term over */ /* loading qb term */ /* kernels for vgs,vbs and vds already set up */ pass.cxx = here->qb_x2; pass.cyy = here->qb_y2; pass.czz = here->qb_z2; pass.cxy = here->qb_xy; pass.cyz = here->qb_yz; pass.cxz = here->qb_xz; pass.cxxx = here->qb_x3; pass.cyyy = here->qb_y3; pass.czzz = here->qb_z3; pass.cxxy = here->qb_x2y; pass.cxxz = here->qb_x2z; pass.cxyy = here->qb_xy2; pass.cyyz = here->qb_y2z; pass.cxzz = here->qb_xz2; pass.cyzz = here->qb_yz2; pass.cxyz = here->qb_xyz; pass.r1h1x = r1h1x; pass.i1h1x = i1h1x; pass.r1h1y = r1h1y; pass.i1h1y = i1h1y; pass.r1h1z = r1h1z; pass.i1h1z = i1h1z; pass.r1h2x = r1hm2x; pass.i1h2x = i1hm2x; pass.r1h2y = r1hm2y; pass.i1h2y = i1hm2y; pass.r1h2z = r1hm2z; pass.i1h2z = i1hm2z; pass.r2h11x = r2h11x; pass.i2h11x = i2h11x; pass.r2h11y = r2h11y; pass.i2h11y = i2h11y; pass.r2h11z = r2h11z; pass.i2h11z = i2h11z; pass.h2f1f2x = r2h1m2x; pass.ih2f1f2x = i2h1m2x; pass.h2f1f2y = r2h1m2y; pass.ih2f1f2y = i2h1m2y; pass.h2f1f2z = r2h1m2z; pass.ih2f1f2z = i2h1m2z; temp = -ckt->CKTomega * DFi2F12(&pass); itemp = ckt->CKTomega * DFn2F12(&pass); *(ckt->CKTrhs + here->B1bNode) -= temp; *(ckt->CKTirhs + here->B1bNode) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* qb term over */ /* loading qd term */ /* kernels for vgs,vbs and vds already set up */ pass.cxx = here->qd_x2; pass.cyy = here->qd_y2; pass.czz = here->qd_z2; pass.cxy = here->qd_xy; pass.cyz = here->qd_yz; pass.cxz = here->qd_xz; pass.cxxx = here->qd_x3; pass.cyyy = here->qd_y3; pass.czzz = here->qd_z3; pass.cxxy = here->qd_x2y; pass.cxxz = here->qd_x2z; pass.cxyy = here->qd_xy2; pass.cyyz = here->qd_y2z; pass.cxzz = here->qd_xz2; pass.cyzz = here->qd_yz2; pass.cxyz = here->qd_xyz; pass.r1h1x = r1h1x; pass.i1h1x = i1h1x; pass.r1h1y = r1h1y; pass.i1h1y = i1h1y; pass.r1h1z = r1h1z; pass.i1h1z = i1h1z; pass.r1h2x = r1hm2x; pass.i1h2x = i1hm2x; pass.r1h2y = r1hm2y; pass.i1h2y = i1hm2y; pass.r1h2z = r1hm2z; pass.i1h2z = i1hm2z; pass.r2h11x = r2h11x; pass.i2h11x = i2h11x; pass.r2h11y = r2h11y; pass.i2h11y = i2h11y; pass.r2h11z = r2h11z; pass.i2h11z = i2h11z; pass.h2f1f2x = r2h1m2x; pass.ih2f1f2x = i2h1m2x; pass.h2f1f2y = r2h1m2y; pass.ih2f1f2y = i2h1m2y; pass.h2f1f2z = r2h1m2z; pass.ih2f1f2z = i2h1m2z; temp = -ckt->CKTomega * DFi2F12(&pass); itemp = ckt->CKTomega * DFn2F12(&pass); *(ckt->CKTrhs + here->B1dNodePrime) -= temp; *(ckt->CKTirhs + here->B1dNodePrime) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* qd term over */ /* loading here->B1gbs term */ r1h1x = *(job->r1H1ptr + here->B1bNode) - *(job->r1H1ptr + here->B1sNodePrime); i1h1x = *(job->i1H1ptr + here->B1bNode) - *(job->i1H1ptr + here->B1sNodePrime); r2h11x = *(job->r2H11ptr + here->B1bNode) - *(job->r2H11ptr + here->B1sNodePrime); i2h11x = *(job->i2H11ptr + here->B1bNode) - *(job->i2H11ptr + here->B1sNodePrime); r1hm2x = *(job->r1H2ptr + here->B1bNode) - *(job->r1H2ptr + here->B1sNodePrime); i1hm2x = -(*(job->i1H2ptr + here->B1bNode) - *(job->i1H2ptr + here->B1sNodePrime)); r2h1m2x = *(job->r2H1m2ptr + here->B1bNode) - *(job->r2H1m2ptr + here->B1sNodePrime); i2h1m2x = *(job->i2H1m2ptr + here->B1bNode) - *(job->i2H1m2ptr + here->B1sNodePrime); /* now r1h1x = vbs */ temp = D1n2F12(here->gbs2, here->gbs3, r1h1x, i1h1x, r1hm2x, i1hm2x, r2h11x, i2h11x, r2h1m2x, i2h1m2x); itemp = D1i2F12(here->gbs2, here->gbs3, r1h1x, i1h1x, r1hm2x, i1hm2x, r2h11x, i2h11x, r2h1m2x, i2h1m2x); *(ckt->CKTrhs + here->B1bNode) -= temp; *(ckt->CKTirhs + here->B1bNode) -= itemp; *(ckt->CKTrhs + here->B1sNodePrime) += temp; *(ckt->CKTirhs + here->B1sNodePrime) += itemp; /* here->B1gbs term over */ /* loading here->B1gbd term */ r1h1x = *(job->r1H1ptr + here->B1bNode) - *(job->r1H1ptr + here->B1dNodePrime); i1h1x = *(job->i1H1ptr + here->B1bNode) - *(job->i1H1ptr + here->B1dNodePrime); r2h11x = *(job->r2H11ptr + here->B1bNode) - *(job->r2H11ptr + here->B1dNodePrime); i2h11x = *(job->i2H11ptr + here->B1bNode) - *(job->i2H11ptr + here->B1dNodePrime); r1hm2x = *(job->r1H2ptr + here->B1bNode) - *(job->r1H2ptr + here->B1dNodePrime); i1hm2x = -(*(job->i1H2ptr + here->B1bNode) - *(job->i1H2ptr + here->B1dNodePrime)); r2h1m2x = *(job->r2H1m2ptr + here->B1bNode) - *(job->r2H1m2ptr + here->B1dNodePrime); i2h1m2x = *(job->i2H1m2ptr + here->B1bNode) - *(job->i2H1m2ptr + here->B1dNodePrime); /* now r1h1x = vbd */ temp = D1n2F12(here->gbd2, here->gbd3, r1h1x, i1h1x, r1hm2x, i1hm2x, r2h11x, i2h11x, r2h1m2x, i2h1m2x); itemp = D1i2F12(here->gbd2, here->gbd3, r1h1x, i1h1x, r1hm2x, i1hm2x, r2h11x, i2h11x, r2h1m2x, i2h1m2x); *(ckt->CKTrhs + here->B1bNode) -= temp; *(ckt->CKTirhs + here->B1bNode) -= itemp; *(ckt->CKTrhs + here->B1dNodePrime) += temp; *(ckt->CKTirhs + here->B1dNodePrime) += itemp; /* here->B1gbd term over */ /* all done */ } break; default: ; ; } } } return(OK); } else return(E_BADPARM); } tmpk8ny_4pz/src/spicelib/devices/bsim1/bsim1init.c0000644000175000017500000000311513546075722022241 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "bsim1itf.h" #include "bsim1ext.h" #include "bsim1init.h" SPICEdev B1info = { .DEVpublic = { .name = "BSIM1", .description = "Berkeley Short Channel IGFET Model", .terms = &B1nSize, .numNames = &B1nSize, .termNames = B1names, .numInstanceParms = &B1pTSize, .instanceParms = B1pTable, .numModelParms = &B1mPTSize, .modelParms = B1mPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = B1param, .DEVmodParam = B1mParam, .DEVload = B1load, .DEVsetup = B1setup, .DEVunsetup = B1unsetup, .DEVpzSetup = B1setup, .DEVtemperature = B1temp, .DEVtrunc = B1trunc, .DEVfindBranch = NULL, .DEVacLoad = B1acLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = B1getic, .DEVask = B1ask, .DEVmodAsk = B1mAsk, .DEVpzLoad = B1pzLoad, .DEVconvTest = B1convTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = B1disto, .DEVnoise = B1noise, .DEVsoaCheck = NULL, .DEVinstSize = &B1iSize, .DEVmodSize = &B1mSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_bsim1_info(void) { return &B1info; } tmpk8ny_4pz/src/spicelib/devices/bsim1/b1cvtest.c0000644000175000017500000000743313546075722022104 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Hong J. Park, Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim1def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B1convTest(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current value into the * sparse matrix previously provided */ { B1model *model = (B1model*)inModel; B1instance *here; double cbd; double cbhat; double cbs; double cd; double cdhat; double delvbd; double delvbs; double delvds; double delvgd; double delvgs; double tol; double vbd; double vbs; double vds; double vgd; double vgdo; double vgs; /* loop through all the B1 device models */ for( ; model != NULL; model = B1nextModel(model)) { /* loop through all the instances of the model */ for (here = B1instances(model); here != NULL ; here=B1nextInstance(here)) { vbs = model->B1type * ( *(ckt->CKTrhsOld+here->B1bNode) - *(ckt->CKTrhsOld+here->B1sNodePrime)); vgs = model->B1type * ( *(ckt->CKTrhsOld+here->B1gNode) - *(ckt->CKTrhsOld+here->B1sNodePrime)); vds = model->B1type * ( *(ckt->CKTrhsOld+here->B1dNodePrime) - *(ckt->CKTrhsOld+here->B1sNodePrime)); vbd=vbs-vds; vgd=vgs-vds; vgdo = *(ckt->CKTstate0 + here->B1vgs) - *(ckt->CKTstate0 + here->B1vds); delvbs = vbs - *(ckt->CKTstate0 + here->B1vbs); delvbd = vbd - *(ckt->CKTstate0 + here->B1vbd); delvgs = vgs - *(ckt->CKTstate0 + here->B1vgs); delvds = vds - *(ckt->CKTstate0 + here->B1vds); delvgd = vgd-vgdo; if (here->B1mode >= 0) { cdhat= *(ckt->CKTstate0 + here->B1cd) - *(ckt->CKTstate0 + here->B1gbd) * delvbd + *(ckt->CKTstate0 + here->B1gmbs) * delvbs + *(ckt->CKTstate0 + here->B1gm) * delvgs + *(ckt->CKTstate0 + here->B1gds) * delvds ; } else { cdhat= *(ckt->CKTstate0 + here->B1cd) - ( *(ckt->CKTstate0 + here->B1gbd) - *(ckt->CKTstate0 + here->B1gmbs)) * delvbd - *(ckt->CKTstate0 + here->B1gm) * delvgd + *(ckt->CKTstate0 + here->B1gds) * delvds; } cbhat= *(ckt->CKTstate0 + here->B1cbs) + *(ckt->CKTstate0 + here->B1cbd) + *(ckt->CKTstate0 + here->B1gbd) * delvbd + *(ckt->CKTstate0 + here->B1gbs) * delvbs ; cd = *(ckt->CKTstate0 + here->B1cd); cbs = *(ckt->CKTstate0 + here->B1cbs); cbd = *(ckt->CKTstate0 + here->B1cbd); /* * check convergence */ if ( (here->B1off == 0) || (!(ckt->CKTmode & MODEINITFIX)) ){ tol=ckt->CKTreltol*MAX(fabs(cdhat),fabs(cd))+ckt->CKTabstol; if (fabs(cdhat-cd) >= tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); } tol=ckt->CKTreltol*MAX(fabs(cbhat),fabs(cbs+cbd))+ ckt->CKTabstol; if (fabs(cbhat-(cbs+cbd)) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim1/ChangeLog0000644000175000017500000000012613546075722021747 0ustar carstencarsten22/11/1990 Modified b1mpar.c substituting iValue to rValue as discovered by Al Davis. tmpk8ny_4pz/src/spicelib/devices/bsim1/b1pzld.c0000644000175000017500000001370313546075722021542 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "bsim1def.h" #include "ngspice/suffix.h" int B1pzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { B1model *model = (B1model*)inModel; B1instance *here; int xnrm; int xrev; double gdpr; double gspr; double gm; double gds; double gmbs; double gbd; double gbs; double capbd; double capbs; double xcggb; double xcgdb; double xcgsb; double xcbgb; double xcbdb; double xcbsb; double xcddb; double xcssb; double xcdgb; double xcsgb; double xcdsb; double xcsdb; double cggb; double cgdb; double cgsb; double cbgb; double cbdb; double cbsb; double cddb; double cdgb; double cdsb; double m; for( ; model != NULL; model = B1nextModel(model)) { for(here = B1instances(model); here!= NULL; here = B1nextInstance(here)) { if (here->B1mode >= 0) { xnrm=1; xrev=0; } else { xnrm=0; xrev=1; } gdpr=here->B1drainConductance; gspr=here->B1sourceConductance; gm= *(ckt->CKTstate0 + here->B1gm); gds= *(ckt->CKTstate0 + here->B1gds); gmbs= *(ckt->CKTstate0 + here->B1gmbs); gbd= *(ckt->CKTstate0 + here->B1gbd); gbs= *(ckt->CKTstate0 + here->B1gbs); capbd= *(ckt->CKTstate0 + here->B1capbd); capbs= *(ckt->CKTstate0 + here->B1capbs); /* * charge oriented model parameters */ cggb = *(ckt->CKTstate0 + here->B1cggb); cgsb = *(ckt->CKTstate0 + here->B1cgsb); cgdb = *(ckt->CKTstate0 + here->B1cgdb); cbgb = *(ckt->CKTstate0 + here->B1cbgb); cbsb = *(ckt->CKTstate0 + here->B1cbsb); cbdb = *(ckt->CKTstate0 + here->B1cbdb); cdgb = *(ckt->CKTstate0 + here->B1cdgb); cdsb = *(ckt->CKTstate0 + here->B1cdsb); cddb = *(ckt->CKTstate0 + here->B1cddb); xcdgb = (cdgb - here->B1GDoverlapCap) ; xcddb = (cddb + capbd + here->B1GDoverlapCap) ; xcdsb = cdsb ; xcsgb = -(cggb + cbgb + cdgb + here->B1GSoverlapCap ) ; xcsdb = -(cgdb + cbdb + cddb) ; xcssb = (capbs + here->B1GSoverlapCap - (cgsb+cbsb+cdsb)) ; xcggb = (cggb + here->B1GDoverlapCap + here->B1GSoverlapCap + here->B1GBoverlapCap) ; xcgdb = (cgdb - here->B1GDoverlapCap ) ; xcgsb = (cgsb - here->B1GSoverlapCap) ; xcbgb = (cbgb - here->B1GBoverlapCap) ; xcbdb = (cbdb - capbd ) ; xcbsb = (cbsb - capbs ) ; m = here->B1m; *(here->B1GgPtr ) += m * (xcggb * s->real); *(here->B1GgPtr +1) += m * (xcggb * s->imag); *(here->B1BbPtr ) += m * ((-xcbgb-xcbdb-xcbsb) * s->real); *(here->B1BbPtr +1) += m * ((-xcbgb-xcbdb-xcbsb) * s->imag); *(here->B1DPdpPtr ) += m * (xcddb * s->real); *(here->B1DPdpPtr +1) += m * (xcddb * s->imag); *(here->B1SPspPtr ) += m * (xcssb * s->real); *(here->B1SPspPtr +1) += m * (xcssb * s->imag); *(here->B1GbPtr ) += m * ((-xcggb-xcgdb-xcgsb) * s->real); *(here->B1GbPtr +1) += m * ((-xcggb-xcgdb-xcgsb) * s->imag); *(here->B1GdpPtr ) += m * (xcgdb * s->real); *(here->B1GdpPtr +1) += m * (xcgdb * s->imag); *(here->B1GspPtr ) += m * (xcgsb * s->real); *(here->B1GspPtr +1) += m * (xcgsb * s->imag); *(here->B1BgPtr ) += m * (xcbgb * s->real); *(here->B1BgPtr +1) += m * (xcbgb * s->imag); *(here->B1BdpPtr ) += m * (xcbdb * s->real); *(here->B1BdpPtr +1) += m * (xcbdb * s->imag); *(here->B1BspPtr ) += m * (xcbsb * s->real); *(here->B1BspPtr +1) += m * (xcbsb * s->imag); *(here->B1DPgPtr ) += m * (xcdgb * s->real); *(here->B1DPgPtr +1) += m * (xcdgb * s->imag); *(here->B1DPbPtr ) += m * ((-xcdgb-xcddb-xcdsb) * s->real); *(here->B1DPbPtr +1) += m * ((-xcdgb-xcddb-xcdsb) * s->imag); *(here->B1DPspPtr ) += m * (xcdsb * s->real); *(here->B1DPspPtr +1) += m * (xcdsb * s->imag); *(here->B1SPgPtr ) += m * (xcsgb * s->real); *(here->B1SPgPtr +1) += m * (xcsgb * s->imag); *(here->B1SPbPtr ) += m * ((-xcsgb-xcsdb-xcssb) * s->real); *(here->B1SPbPtr +1) += m * ((-xcsgb-xcsdb-xcssb) * s->imag); *(here->B1SPdpPtr ) += m * (xcsdb * s->real); *(here->B1SPdpPtr +1) += m * (xcsdb * s->imag); *(here->B1DdPtr) += m * (gdpr); *(here->B1SsPtr) += m * (gspr); *(here->B1BbPtr) += m * (gbd+gbs); *(here->B1DPdpPtr) += m * (gdpr+gds+gbd+xrev*(gm+gmbs)); *(here->B1SPspPtr) += m * (gspr+gds+gbs+xnrm*(gm+gmbs)); *(here->B1DdpPtr) -= m * (gdpr); *(here->B1SspPtr) -= m * (gspr); *(here->B1BdpPtr) -= m * (gbd); *(here->B1BspPtr) -= m * (gbs); *(here->B1DPdPtr) -= m * (gdpr); *(here->B1DPgPtr) += m * ((xnrm-xrev)*gm); *(here->B1DPbPtr) += m * (-gbd+(xnrm-xrev)*gmbs); *(here->B1DPspPtr) += m * (-gds-xnrm*(gm+gmbs)); *(here->B1SPgPtr) += m * (-(xnrm-xrev)*gm); *(here->B1SPsPtr) -= m * (gspr); *(here->B1SPbPtr) += m * (-gbs-(xnrm-xrev)*gmbs); *(here->B1SPdpPtr) += m * (-gds-xrev*(gm+gmbs)); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim1/bsim1itf.h0000644000175000017500000000026313546075722022066 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_BSIM1 #define DEV_BSIM1 SPICEdev *get_bsim1_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/bsim1/b1eval.c0000644000175000017500000004666113546075722021531 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Hong J. Park, Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim1def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/suffix.h" /* This routine evaluates the drain current, its derivatives and the * charges associated with the gate,bulk and drain terminal * using the B1 (Berkeley Short-Channel IGFET Model) Equations. */ void B1evaluate(double vds, double vbs, double vgs, B1instance *here, B1model *model, double *gmPointer, double *gdsPointer, double *gmbsPointer, double *qgPointer, double *qbPointer, double *qdPointer, double *cggbPointer, double *cgdbPointer, double *cgsbPointer, double *cbgbPointer, double *cbdbPointer, double *cbsbPointer, double *cdgbPointer, double *cddbPointer, double *cdsbPointer, double *cdrainPointer, double *vonPointer, double *vdsatPointer, CKTcircuit *ckt) { double gm; double gds; double gmbs; double qg = 0.0; double qb = 0.0; double qd = 0.0; double cggb = 0.0; double cgdb = 0.0; double cgsb = 0.0; double cbgb = 0.0; double cbdb = 0.0; double cbsb = 0.0; double cdgb = 0.0; double cddb = 0.0; double cdsb = 0.0; double Vfb; double Phi; double K1; double K2; double Vdd; double Ugs; double Uds; double dUgsdVbs; double Leff; double dUdsdVbs; double dUdsdVds; double Eta; double dEtadVds; double dEtadVbs; double Vpb; double SqrtVpb; double Von; double Vth; double dVthdVbs; double dVthdVds; double Vgs_Vth; double DrainCurrent; double G; double A; double Arg; double dGdVbs; double dAdVbs; double Beta; double Beta_Vds_0; double BetaVdd; double dBetaVdd_dVds; double Beta0; double dBeta0dVds; double dBeta0dVbs; double VddSquare; double C1; double C2; double dBetaVdd_dVbs; double dBeta_Vds_0_dVbs; double dC1dVbs; double dC2dVbs; double dBetadVgs; double dBetadVds; double dBetadVbs; double VdsSat = 0.0; double Argl1; double Argl2; double Vc; double Term1; double K; double Args1; double dVcdVgs; double dVcdVds; double dVcdVbs; double dKdVc; double dKdVgs; double dKdVds; double dKdVbs; double Args2; double Args3; double Warg1; double Vcut; double N; double N0; double NB; double ND; double Warg2; double Wds; double Wgs; double Ilimit; double Iexp; double Temp1; double Vth0; double Arg1; double Arg2; double Arg3; double Arg5; double Ent; double Vcom; double Vgb; double Vgb_Vfb; double VdsPinchoff; double EntSquare; double Vgs_VthSquare; double Argl3; double Argl4; double Argl5; double Argl6; double Argl7; double Argl8; double Argl9; double dEntdVds; double dEntdVbs; double cgbb; double cdbb; double cbbb; double WLCox; double Vtsquare; double Temp3; int ChargeComputationNeeded; double co4v15; if (ckt->CKTmode & (MODEAC | MODETRAN)) { ChargeComputationNeeded = 1; } else if (ckt->CKTmode & MODEINITSMSIG) { ChargeComputationNeeded = 1; } else if ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) { ChargeComputationNeeded = 1; } else { ChargeComputationNeeded = 0; } Vfb = here->B1vfb; Phi = here->B1phi; K1 = here->B1K1; K2 = here->B1K2; Vdd = model->B1vdd; if((Ugs = here->B1ugs + here->B1ugsB * vbs) <= 0 ) { Ugs = 0; dUgsdVbs = 0.0; } else { dUgsdVbs = here->B1ugsB; } if((Uds = here->B1uds + here->B1udsB * vbs + here->B1udsD*(vds-Vdd)) <= 0 ) { Uds = 0.0; dUdsdVbs = dUdsdVds = 0.0; } else { Leff = here->B1l * 1.e6 - model->B1deltaL; /* Leff in um */ Uds = Uds / Leff; dUdsdVbs = here->B1udsB / Leff; dUdsdVds = here->B1udsD / Leff; } Eta = here->B1eta + here->B1etaB * vbs + here->B1etaD * (vds - Vdd); if( Eta <= 0 ) { Eta = 0; dEtadVds = dEtadVbs = 0.0 ; } else if ( Eta > 1 ) { Eta = 1; dEtadVds = dEtadVbs = 0; } else { dEtadVds = here->B1etaD; dEtadVbs = here->B1etaB; } if( vbs < 0 ) { Vpb = Phi - vbs; } else { Vpb = Phi; } SqrtVpb = sqrt( Vpb ); Von = Vfb + Phi + K1 * SqrtVpb - K2 * Vpb - Eta * vds; Vth = Von; dVthdVds = - Eta - dEtadVds * vds; dVthdVbs = K2 - 0.5 * K1 / SqrtVpb - dEtadVbs * vds; Vgs_Vth = vgs - Vth; G = 1. - 1./(1.744+0.8364 * Vpb); A = 1. + 0.5*G*K1/SqrtVpb; A = MAX( A, 1.0); /* Modified */ Arg = MAX(( 1 + Ugs * Vgs_Vth), 1.0); dGdVbs = -0.8364 * (1-G) * (1-G); dAdVbs = 0.25 * K1 / SqrtVpb *(2*dGdVbs + G/Vpb); if( Vgs_Vth < 0 ) { /* cutoff */ DrainCurrent = 0; gm = 0; gds = 0; gmbs = 0; goto SubthresholdComputation; } /* Quadratic Interpolation for Beta0 (Beta at vgs = 0, vds=Vds) */ Beta_Vds_0 = (here->B1betaZero + here->B1betaZeroB * vbs); BetaVdd = (here->B1betaVdd + here->B1betaVddB * vbs); dBetaVdd_dVds = MAX( here->B1betaVddD, 0.0); /* Modified */ if( vds > Vdd ) { Beta0 = BetaVdd + dBetaVdd_dVds * (vds - Vdd); dBeta0dVds = dBetaVdd_dVds; dBeta0dVbs = here->B1betaVddB; } else { VddSquare = Vdd * Vdd; C1 = ( -BetaVdd + Beta_Vds_0 + dBetaVdd_dVds * Vdd) / VddSquare; C2 = 2 * (BetaVdd - Beta_Vds_0) / Vdd - dBetaVdd_dVds; dBeta_Vds_0_dVbs = here->B1betaZeroB; dBetaVdd_dVbs = here->B1betaVddB; dC1dVbs = (dBeta_Vds_0_dVbs - dBetaVdd_dVbs) / VddSquare; dC2dVbs = dC1dVbs * (-2) * Vdd; Beta0 = (C1 * vds + C2) * vds + Beta_Vds_0; dBeta0dVds = 2*C1*vds + C2; dBeta0dVbs = dC1dVbs * vds * vds + dC2dVbs * vds + dBeta_Vds_0_dVbs; } /*Beta = Beta0 / ( 1 + Ugs * Vgs_Vth );*/ Beta = Beta0 / Arg ; dBetadVgs = - Beta * Ugs / Arg; dBetadVds = dBeta0dVds / Arg - dBetadVgs * dVthdVds ; dBetadVbs = dBeta0dVbs / Arg + Beta * Ugs * dVthdVbs / Arg - Beta * Vgs_Vth * dUgsdVbs / Arg; /*VdsSat = MAX( Vgs_Vth / ( A + Uds * Vgs_Vth ), 0.0);*/ if((Vc = Uds * Vgs_Vth / A) < 0.0 ) Vc=0.0; Term1 = sqrt( 1 + 2 * Vc ); K = 0.5 * ( 1 + Vc + Term1 ); VdsSat = MAX( Vgs_Vth / ( A * sqrt(K) ) , 0.0 ); if( vds < VdsSat ) { /* Triode Region */ /*Argl1 = 1 + Uds * vds;*/ Argl1 = MAX( (1 + Uds * vds), 1.); Argl2 = Vgs_Vth - 0.5 * A * vds; DrainCurrent = Beta * Argl2 * vds / Argl1; gm = (dBetadVgs * Argl2 * vds + Beta * vds) / Argl1; gds = (dBetadVds * Argl2 * vds + Beta * (Vgs_Vth - vds * dVthdVds - A * vds) - DrainCurrent * (vds * dUdsdVds + Uds )) / Argl1; gmbs = (dBetadVbs * Argl2 * vds + Beta * vds * (- dVthdVbs - 0.5 * vds * dAdVbs ) - DrainCurrent * vds * dUdsdVbs ) / Argl1; } else { /* Pinchoff (Saturation) Region */ Args1 = 1. + 1. / Term1; dVcdVgs = Uds / A; dVcdVds = Vgs_Vth * dUdsdVds / A - dVcdVgs * dVthdVds; dVcdVbs = ( Vgs_Vth * dUdsdVbs - Uds * (dVthdVbs + Vgs_Vth * dAdVbs / A ))/ A; dKdVc = 0.5* Args1; dKdVgs = dKdVc * dVcdVgs; dKdVds = dKdVc * dVcdVds; dKdVbs = dKdVc * dVcdVbs; Args2 = Vgs_Vth / A / K; Args3 = Args2 * Vgs_Vth; DrainCurrent = 0.5 * Beta * Args3; gm = 0.5 * Args3 * dBetadVgs + Beta * Args2 - DrainCurrent * dKdVgs / K; gds = 0.5 * Args3 * dBetadVds - Beta * Args2 * dVthdVds - DrainCurrent * dKdVds / K; gmbs = 0.5 * dBetadVbs * Args3 - Beta * Args2 *dVthdVbs - DrainCurrent * (dAdVbs / A + dKdVbs / K ); } SubthresholdComputation: N0 = here->B1subthSlope; Vcut = - 40. * N0 * CONSTvt0 ; /* The following 'if' statement has been modified so that subthreshold * * current computation is always executed unless N0 >= 200. This should * * get rid of the Ids kink seen on Ids-Vgs plots at low Vds. * * Peter M. Lee * * 6/8/90 * * Old 'if' statement: * * if( (N0 >= 200) || (Vgs_Vth < Vcut ) || (Vgs_Vth > (-0.5*Vcut))) */ if (N0 >= 200) { goto ChargeComputation; } NB = here->B1subthSlopeB; ND = here->B1subthSlopeD; N = N0 + NB * vbs + ND * vds; /* subthreshold slope */ if( N < 0.5 ) N = 0.5; Warg1 = exp( - vds / CONSTvt0 ); Wds = 1 - Warg1; Wgs = exp( Vgs_Vth / ( N * CONSTvt0 )); Vtsquare = CONSTvt0 * CONSTvt0 ; Warg2 = 6.04965 * Vtsquare * here->B1betaZero; Ilimit = 4.5 * Vtsquare * here->B1betaZero; Iexp = Warg2 * Wgs * Wds; DrainCurrent = DrainCurrent + Ilimit * Iexp / ( Ilimit + Iexp ); Temp1 = Ilimit / ( Ilimit + Iexp ); Temp1 = Temp1 * Temp1; Temp3 = Ilimit / ( Ilimit + Wgs * Warg2 ); Temp3=Temp3 * Temp3 * Warg2 * Wgs; /* if ( Temp3 > Ilimit ) Temp3=Ilimit;*/ gm = gm + Temp1 * Iexp / ( N * CONSTvt0 ); /* gds term has been modified to prevent blow up at Vds=0 */ gds = gds + Temp3 * ( -Wds / N / CONSTvt0 * (dVthdVds + Vgs_Vth * ND / N ) + Warg1 / CONSTvt0 ); gmbs = gmbs - Temp1 * Iexp * (dVthdVbs + Vgs_Vth * NB / N ) / ( N * CONSTvt0 ); ChargeComputation: /* Some Limiting of DC Parameters */ if(DrainCurrent < 0.0) DrainCurrent = 0.0; if(gm < 0.0) gm = 0.0; if(gds < 0.0) gds = 0.0; if(gmbs < 0.0) gmbs = 0.0; WLCox = model->B1Cox * (here->B1l - model->B1deltaL * 1.e-6) * (here->B1w - model->B1deltaW * 1.e-6) * 1.e4; /* F */ if( ! ChargeComputationNeeded ) { qg = 0; qd = 0; qb = 0; cggb = 0; cgsb = 0; cgdb = 0; cdgb = 0; cdsb = 0; cddb = 0; cbgb = 0; cbsb = 0; cbdb = 0; goto finished; } G = 1. - 1./(1.744+0.8364 * Vpb); A = 1. + 0.5*G*K1/SqrtVpb; A = MAX( A, 1.0); /* Modified */ /*Arg = 1 + Ugs * Vgs_Vth;*/ dGdVbs = -0.8364 * (1-G) * (1-G); dAdVbs = 0.25 * K1 / SqrtVpb *(2*dGdVbs + G/Vpb); Phi = MAX( 0.1, Phi); if( model->B1channelChargePartitionFlag ) { /*0/100 partitioning for drain/source chArges at the saturation region*/ Vth0 = Vfb + Phi + K1 * SqrtVpb; Vgs_Vth = vgs - Vth0; Arg1 = A * vds; Arg2 = Vgs_Vth - 0.5 * Arg1; Arg3 = vds - Arg1; Arg5 = Arg1 * Arg1; dVthdVbs = - 0.5 * K1 / SqrtVpb; dAdVbs = 0.5 * K1 * (0.5 * G / Vpb - 0.8364 * (1 -G) * (1 - G) ) / SqrtVpb ; Ent = MAX(Arg2,1.0e-8); dEntdVds = - 0.5 * A; dEntdVbs = - dVthdVbs - 0.5 * vds * dAdVbs; Vcom = Vgs_Vth * Vgs_Vth / 6.0 - 1.25e-1 * Arg1 * Vgs_Vth + 2.5e-2 * Arg5; VdsPinchoff = MAX( Vgs_Vth / A, 0.0); Vgb = vgs - vbs ; Vgb_Vfb = Vgb - Vfb; if( Vgb_Vfb < 0){ /* Accumulation Region */ qg = WLCox * Vgb_Vfb; qb = - qg; qd = 0. ; cggb = WLCox; cgdb = 0.; cgsb = 0.; cbgb = -WLCox; cbdb = 0.; cbsb = 0.; cdgb = 0.; cddb = 0.; cdsb = 0.; goto finished; } else if ( vgs < Vth0 ){ /* Subthreshold Region */ qg = 0.5 * WLCox * K1 * K1 * (-1 + sqrt(1 + 4 * Vgb_Vfb / (K1 * K1))); qb = -qg; qd = 0.; cggb = WLCox / sqrt(1 + 4 * Vgb_Vfb / (K1 * K1)); cgdb = cgsb = 0.; cbgb = -cggb; cbdb = cbsb = cdgb = cddb = cdsb = 0.0; goto finished; } else if( vds < VdsPinchoff ){ /* triode region */ /*Vgs_Vth2 = Vgs_Vth*Vgs_Vth;*/ EntSquare = Ent * Ent; Argl1 = 1.2e1 * EntSquare; Argl2 = 1.0 - A; Argl3 = Arg1 * vds; /*Argl4 = Vcom/Ent/EntSquare;*/ if (Ent > 1.0e-8) { Argl5 = Arg1 / Ent; /*Argl6 = Vcom/EntSquare;*/ } else { Argl5 = 2.0; Argl6 = 4.0 / 1.5e1; } Argl7 = Argl5 / 1.2e1; Argl8 = 6.0 * Ent; Argl9 = 0.125 * Argl5 * Argl5; qg = WLCox * (vgs - Vfb - Phi - 0.5 * vds + vds * Argl7); qb = WLCox * ( - Vth0 + Vfb + Phi + 0.5 * Arg3 - Arg3 * Argl7); qd = - WLCox * (0.5 * Vgs_Vth - 0.75 * Arg1 + 0.125 * Arg1 * Argl5); cggb = WLCox * (1.0 - Argl3 / Argl1); cgdb = WLCox * ( - 0.5 + Arg1 / Argl8 - Argl3 * dEntdVds / Argl1); cgbb = WLCox * (vds * vds * dAdVbs * Ent - Argl3 * dEntdVbs) / Argl1; cgsb = - (cggb + cgdb + cgbb); cbgb = WLCox * Argl3 * Argl2 / Argl1; cbdb = WLCox * Argl2 * (0.5 - Arg1 / Argl8 + Argl3 * dEntdVds / Argl1); cbbb = - WLCox * (dVthdVbs + 0.5 * vds * dAdVbs + vds * vds * ((1.0 - 2.0 * A) * dAdVbs * Ent - Argl2 * A * dEntdVbs) / Argl1); cbsb = - (cbgb + cbdb + cbbb); cdgb = - WLCox * (0.5 - Argl9); cddb = WLCox * (0.75 * A - 0.25 * A * Arg1 / Ent + Argl9 * dEntdVds); cdbb = WLCox * (0.5 * dVthdVbs + vds * dAdVbs * (0.75 - 0.25 * Argl5 ) + Argl9 * dEntdVbs); cdsb = - (cdgb + cddb + cdbb); goto finished; } else if( vds >= VdsPinchoff ) { /* saturation region */ Args1 = 1.0 / (3.0 * A); qg = WLCox * (vgs - Vfb - Phi - Vgs_Vth * Args1); qb = WLCox * (Vfb + Phi - Vth0 + (1.0 - A) * Vgs_Vth * Args1); qd = 0.0; cggb = WLCox * (1.0 - Args1); cgdb = 0.0; cgbb = WLCox * Args1 * (dVthdVbs + Vgs_Vth * dAdVbs / A); cgsb = - (cggb + cgdb + cgbb); cbgb = WLCox * (Args1 - 1.0 / 3.0); cbdb = 0.0; cbbb = - WLCox * ((2.0 / 3.0 + Args1) * dVthdVbs + Vgs_Vth * Args1 * dAdVbs / A); /* Modified */ cbsb = - (cbgb + cbdb + cbbb); cdgb = 0.0; cddb = 0.0; cdsb = 0.0; goto finished; } goto finished; } else { /* ChannelChargePartionFlag < = 0 */ /*40/60 partitioning for drain/source chArges at the saturation region*/ co4v15 = 4./15.; Vth0 = Vfb+Phi+K1*SqrtVpb; Vgs_Vth = vgs-Vth0; Arg1 = A*vds; Arg2 = Vgs_Vth-0.5*Arg1; Arg3 = vds-Arg1; Arg5 = Arg1*Arg1; dVthdVbs = -0.5*K1/SqrtVpb; dAdVbs = 0.5*K1*(0.5*G/Vpb-0.8364*(1-G)*(1-G))/SqrtVpb; Ent = MAX(Arg2,1.0e-8); dEntdVds = -0.5*A; dEntdVbs = -dVthdVbs-0.5*vds*dAdVbs; Vcom = Vgs_Vth*Vgs_Vth/6.0-1.25e-1*Arg1*Vgs_Vth+2.5e-2*Arg5; VdsPinchoff = MAX( Vgs_Vth/A, 0.0); Vgb = vgs - vbs ; Vgb_Vfb = Vgb - Vfb; if( Vgb_Vfb < 0) { /* Accumulation Region */ qg = WLCox * Vgb_Vfb; qb = - qg; qd = 0. ; cggb = WLCox; cgdb = 0.; cgsb = 0.; cbgb = -WLCox; cbdb = 0.; cbsb = 0.; cdgb = 0.; cddb = 0.; cdsb = 0.; goto finished; } else if ( vgs < Vth0 ) { /* Subthreshold Region */ qg = 0.5 * WLCox * K1 * K1 * (-1+sqrt(1+4*Vgb_Vfb/(K1*K1))); qb = -qg; qd = 0.; cggb = WLCox/sqrt(1+4*Vgb_Vfb/(K1*K1)); cgdb = cgsb = 0.; cbgb = -cggb; cbdb = cbsb = cdgb = cddb = cdsb = 0.0; goto finished; } else if ( vds < VdsPinchoff ) { /* triode region */ Vgs_VthSquare = Vgs_Vth*Vgs_Vth; EntSquare = Ent*Ent; Argl1 = 1.2e1*EntSquare; Argl2 = 1.0-A; Argl3 = Arg1*vds; Argl4 = Vcom/Ent/EntSquare; if (Ent > 1.0e-8) { Argl5 = Arg1/Ent; Argl6 = Vcom/EntSquare; } else { Argl5 = 2.0; Argl6 = 4.0/1.5e1; } Argl7 = Argl5/1.2e1; Argl8 = 6.0*Ent; qg = WLCox*(vgs-Vfb-Phi-0.5*vds+vds*Argl7); qb = WLCox*(-Vth0+Vfb+Phi+0.5*Arg3-Arg3*Argl7); qd = -WLCox*(0.5*(Vgs_Vth-Arg1)+Arg1*Argl6); cggb = WLCox*(1.0-Argl3/Argl1); cgdb = WLCox*(-0.5+Arg1/Argl8-Argl3*dEntdVds/Argl1); cgbb = WLCox*(vds*vds*dAdVbs*Ent-Argl3*dEntdVbs)/Argl1; cgsb = -(cggb+cgdb+cgbb); cbgb = WLCox*Argl3*Argl2/Argl1; cbdb = WLCox*Argl2*(0.5-Arg1/Argl8+Argl3*dEntdVds/Argl1); cbbb = -WLCox*(dVthdVbs+0.5*vds*dAdVbs+vds*vds*((1.0-2.0*A) *dAdVbs*Ent-Argl2*A*dEntdVbs)/Argl1); cbsb = -(cbgb+cbdb+cbbb); cdgb = -WLCox*(0.5+Arg1*(4.0*Vgs_Vth-1.5*Arg1)/Argl1- 2.0*Arg1*Argl4); cddb = WLCox*(0.5*A+2.0*Arg1*dEntdVds*Argl4-A*(2.0*Vgs_VthSquare -3.0*Arg1*Vgs_Vth+0.9*Arg5)/Argl1); cdbb = WLCox*(0.5*dVthdVbs+0.5*vds*dAdVbs+2.0*Arg1*dEntdVbs *Argl4-vds*(2.0*Vgs_VthSquare*dAdVbs-4.0*A*Vgs_Vth*dVthdVbs-3.0 *Arg1*Vgs_Vth*dAdVbs+1.5*A*Arg1*dVthdVbs+0.9*Arg5*dAdVbs) /Argl1); cdsb = -(cdgb+cddb+cdbb); goto finished; } else if( vds >= VdsPinchoff ) { /* saturation region */ Args1 = 1.0/(3.0*A); qg = WLCox*(vgs-Vfb-Phi-Vgs_Vth*Args1); qb = WLCox*(Vfb+Phi-Vth0+(1.0-A)*Vgs_Vth*Args1); qd = -co4v15*WLCox*Vgs_Vth; cggb = WLCox*(1.0-Args1); cgdb = 0.0; cgbb = WLCox*Args1*(dVthdVbs+Vgs_Vth*dAdVbs/A); cgsb = -(cggb+cgdb+cgbb); cbgb = WLCox*(Args1-1.0/3.0); cbdb = 0.0; cbbb = -WLCox*((2.0/3.0+Args1)*dVthdVbs+Vgs_Vth*Args1*dAdVbs/A); cbsb = -(cbgb+cbdb+cbbb); cdgb = -co4v15*WLCox; cddb = 0.0; cdbb = co4v15*WLCox*dVthdVbs; cdsb = -(cdgb+cddb+cdbb); goto finished; } } finished: /* returning Values to Calling Routine */ *gmPointer = MAX(gm,0.0); *gdsPointer = MAX( gds, 0.0); *gmbsPointer = MAX(gmbs,0.0); *qgPointer = qg; *qbPointer = qb; *qdPointer = qd; *cggbPointer = cggb; *cgdbPointer = cgdb; *cgsbPointer = cgsb; *cbgbPointer = cbgb; *cbdbPointer = cbdb; *cbsbPointer = cbsb; *cdgbPointer = cdgb; *cddbPointer = cddb; *cdsbPointer = cdsb; *cdrainPointer = MAX(DrainCurrent,0.0); *vonPointer = Von; *vdsatPointer = VdsSat; } tmpk8ny_4pz/src/spicelib/devices/bsim1/b1trunc.c0000644000175000017500000000207113546075722021720 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Hong J. Park, Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim1def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B1trunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { B1model *model = (B1model*)inModel; B1instance *here; #ifdef STEPDEBUG double debugtemp; #endif /* STEPDEBUG */ for( ; model != NULL; model = B1nextModel(model)) { for(here=B1instances(model);here!=NULL;here = B1nextInstance(here)){ #ifdef STEPDEBUG debugtemp = *timeStep; #endif /* STEPDEBUG */ CKTterr(here->B1qb,ckt,timeStep); CKTterr(here->B1qg,ckt,timeStep); CKTterr(here->B1qd,ckt,timeStep); #ifdef STEPDEBUG if(debugtemp != *timeStep) { printf("device %s reduces step from %g to %g\n", here->B1name,debugtemp,*timeStep); } #endif /* STEPDEBUG */ } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim1/b1ask.c0000644000175000017500000001663413546075722021355 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Hong J. Park **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "bsim1def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int B1ask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { B1instance *here = (B1instance*)inst; NG_IGNORE(select); switch(which) { case BSIM1_L: value->rValue = here->B1l; return(OK); case BSIM1_W: value->rValue = here->B1w; value->rValue *= here->B1m; return(OK); case BSIM1_M: value->rValue = here->B1m; return(OK); case BSIM1_AS: value->rValue = here->B1sourceArea; value->rValue *= here->B1m; return(OK); case BSIM1_AD: value->rValue = here->B1drainArea; value->rValue *= here->B1m; return(OK); case BSIM1_PS: value->rValue = here->B1sourcePerimeter; value->rValue *= here->B1m; return(OK); case BSIM1_PD: value->rValue = here->B1drainPerimeter; value->rValue *= here->B1m; return(OK); case BSIM1_NRS: value->rValue = here->B1sourceSquares; value->rValue *= here->B1m; return(OK); case BSIM1_NRD: value->rValue = here->B1drainSquares; value->rValue *= here->B1m; return(OK); case BSIM1_OFF: value->rValue = here->B1off; return(OK); case BSIM1_IC_VBS: value->rValue = here->B1icVBS; return(OK); case BSIM1_IC_VDS: value->rValue = here->B1icVDS; return(OK); case BSIM1_IC_VGS: value->rValue = here->B1icVGS; return(OK); case BSIM1_DNODE: value->iValue = here->B1dNode; return(OK); case BSIM1_GNODE: value->iValue = here->B1gNode; return(OK); case BSIM1_SNODE: value->iValue = here->B1sNode; return(OK); case BSIM1_BNODE: value->iValue = here->B1bNode; return(OK); case BSIM1_DNODEPRIME: value->iValue = here->B1dNodePrime; return(OK); case BSIM1_SNODEPRIME: value->iValue = here->B1sNodePrime; return(OK); case BSIM1_SOURCECONDUCT: value->rValue = here->B1sourceConductance; value->rValue *= here->B1m; return(OK); case BSIM1_DRAINCONDUCT: value->rValue = here->B1drainConductance; value->rValue *= here->B1m; return(OK); case BSIM1_VBD: value->rValue = *(ckt->CKTstate0 + here->B1vbd); return(OK); case BSIM1_VBS: value->rValue = *(ckt->CKTstate0 + here->B1vbs); return(OK); case BSIM1_VGS: value->rValue = *(ckt->CKTstate0 + here->B1vgs); return(OK); case BSIM1_VDS: value->rValue = *(ckt->CKTstate0 + here->B1vds); return(OK); case BSIM1_CD: value->rValue = *(ckt->CKTstate0 + here->B1cd); value->rValue *= here->B1m; return(OK); case BSIM1_CBS: value->rValue = *(ckt->CKTstate0 + here->B1cbs); value->rValue *= here->B1m; return(OK); case BSIM1_CBD: value->rValue = *(ckt->CKTstate0 + here->B1cbd); value->rValue *= here->B1m; return(OK); case BSIM1_GM: value->rValue = *(ckt->CKTstate0 + here->B1gm); value->rValue *= here->B1m; return(OK); case BSIM1_GDS: value->rValue = *(ckt->CKTstate0 + here->B1gds); value->rValue *= here->B1m; return(OK); case BSIM1_GMBS: value->rValue = *(ckt->CKTstate0 + here->B1gmbs); value->rValue *= here->B1m; return(OK); case BSIM1_GBD: value->rValue = *(ckt->CKTstate0 + here->B1gbd); value->rValue *= here->B1m; return(OK); case BSIM1_GBS: value->rValue = *(ckt->CKTstate0 + here->B1gbs); value->rValue *= here->B1m; return(OK); case BSIM1_QB: value->rValue = *(ckt->CKTstate0 + here->B1qb); value->rValue *= here->B1m; return(OK); case BSIM1_CQB: value->rValue = *(ckt->CKTstate0 + here->B1cqb); value->rValue *= here->B1m; return(OK); case BSIM1_QG: value->rValue = *(ckt->CKTstate0 + here->B1qg); value->rValue *= here->B1m; return(OK); case BSIM1_CQG: value->rValue = *(ckt->CKTstate0 + here->B1cqg); value->rValue *= here->B1m; return(OK); case BSIM1_QD: value->rValue = *(ckt->CKTstate0 + here->B1qd); value->rValue *= here->B1m; return(OK); case BSIM1_CQD: value->rValue = *(ckt->CKTstate0 + here->B1cqd); value->rValue *= here->B1m; return(OK); case BSIM1_CGG: value->rValue = *(ckt->CKTstate0 + here->B1cggb); value->rValue *= here->B1m; return(OK); case BSIM1_CGD: value->rValue = *(ckt->CKTstate0 + here->B1cgdb); value->rValue *= here->B1m; return(OK); case BSIM1_CGS: value->rValue = *(ckt->CKTstate0 + here->B1cgsb); value->rValue *= here->B1m; return(OK); case BSIM1_CBG: value->rValue = *(ckt->CKTstate0 + here->B1cbgb); value->rValue *= here->B1m; return(OK); case BSIM1_CAPBD: value->rValue = *(ckt->CKTstate0 + here->B1capbd); value->rValue *= here->B1m; return(OK); case BSIM1_CQBD: value->rValue = *(ckt->CKTstate0 + here->B1cqbd); value->rValue *= here->B1m; return(OK); case BSIM1_CAPBS: value->rValue = *(ckt->CKTstate0 + here->B1capbs); value->rValue *= here->B1m; return(OK); case BSIM1_CQBS: value->rValue = *(ckt->CKTstate0 + here->B1cqbs); value->rValue *= here->B1m; return(OK); case BSIM1_CDG: value->rValue = *(ckt->CKTstate0 + here->B1cdgb); value->rValue *= here->B1m; return(OK); case BSIM1_CDD: value->rValue = *(ckt->CKTstate0 + here->B1cddb); value->rValue *= here->B1m; return(OK); case BSIM1_CDS: value->rValue = *(ckt->CKTstate0 + here->B1cdsb); value->rValue *= here->B1m; return(OK); case BSIM1_VON: value->rValue = *(ckt->CKTstate0 + here->B1vono); return(OK); case BSIM1_QBS: value->rValue = *(ckt->CKTstate0 + here->B1qbs); value->rValue *= here->B1m; return(OK); case BSIM1_QBD: value->rValue = *(ckt->CKTstate0 + here->B1qbd); value->rValue *= here->B1m; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim1/b1par.c0000644000175000017500000000533413546075722021354 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Hong J. Park, Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "bsim1def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int B1param(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { B1instance *here = (B1instance*)inst; NG_IGNORE(select); switch(param) { case BSIM1_W: here->B1w = value->rValue; here->B1wGiven = TRUE; break; case BSIM1_L: here->B1l = value->rValue; here->B1lGiven = TRUE; break; case BSIM1_M: here->B1m = value->rValue; here->B1mGiven = TRUE; break; case BSIM1_AS: here->B1sourceArea = value->rValue; here->B1sourceAreaGiven = TRUE; break; case BSIM1_AD: here->B1drainArea = value->rValue; here->B1drainAreaGiven = TRUE; break; case BSIM1_PS: here->B1sourcePerimeter = value->rValue; here->B1sourcePerimeterGiven = TRUE; break; case BSIM1_PD: here->B1drainPerimeter = value->rValue; here->B1drainPerimeterGiven = TRUE; break; case BSIM1_NRS: here->B1sourceSquares = value->rValue; here->B1sourceSquaresGiven = TRUE; break; case BSIM1_NRD: here->B1drainSquares = value->rValue; here->B1drainSquaresGiven = TRUE; break; case BSIM1_OFF: here->B1off = value->iValue; break; case BSIM1_IC_VBS: here->B1icVBS = value->rValue; here->B1icVBSGiven = TRUE; break; case BSIM1_IC_VDS: here->B1icVDS = value->rValue; here->B1icVDSGiven = TRUE; break; case BSIM1_IC_VGS: here->B1icVGS = value->rValue; here->B1icVGSGiven = TRUE; break; case BSIM1_IC: switch(value->v.numValue){ case 3: here->B1icVBS = *(value->v.vec.rVec+2); here->B1icVBSGiven = TRUE; case 2: here->B1icVGS = *(value->v.vec.rVec+1); here->B1icVGSGiven = TRUE; case 1: here->B1icVDS = *(value->v.vec.rVec); here->B1icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim1/b1.c0000644000175000017500000001756113546075722020656 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Hong J. Park, Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "bsim1def.h" #include "ngspice/suffix.h" IFparm B1pTable[] = { /* parameters */ IOP( "l", BSIM1_L, IF_REAL , "Length"), IOP( "w", BSIM1_W, IF_REAL , "Width"), IOP( "m", BSIM1_M, IF_REAL , "Parallel Multiplier"), IOP( "ad", BSIM1_AD, IF_REAL , "Drain area"), IOP( "as", BSIM1_AS, IF_REAL , "Source area"), IOP( "pd", BSIM1_PD, IF_REAL , "Drain perimeter"), IOP( "ps", BSIM1_PS, IF_REAL , "Source perimeter"), IOP( "nrd", BSIM1_NRD, IF_REAL , "Number of squares in drain"), IOP( "nrs", BSIM1_NRS, IF_REAL , "Number of squares in source"), IOP( "off", BSIM1_OFF, IF_FLAG , "Device is initially off"), IOP( "vds", BSIM1_IC_VDS, IF_REAL , "Initial D-S voltage"), IOP( "vgs", BSIM1_IC_VGS, IF_REAL , "Initial G-S voltage"), IOP( "vbs", BSIM1_IC_VBS, IF_REAL , "Initial B-S voltage"), IP( "ic", BSIM1_IC, IF_VECTOR , "Vector of DS,GS,BS initial voltages") }; IFparm B1mPTable[] = { /* model parameters */ IOP( "vfb", BSIM1_MOD_VFB0, IF_REAL,"Flat band voltage"), IOP( "lvfb", BSIM1_MOD_VFBL, IF_REAL, "Length dependence of vfb"), IOP( "wvfb", BSIM1_MOD_VFBW, IF_REAL, "Width dependence of vfb"), IOP( "phi", BSIM1_MOD_PHI0, IF_REAL, "Strong inversion surface potential "), IOP( "lphi", BSIM1_MOD_PHIL, IF_REAL, "Length dependence of phi"), IOP( "wphi", BSIM1_MOD_PHIW, IF_REAL, "Width dependence of phi"), IOP( "k1", BSIM1_MOD_K10, IF_REAL, "Bulk effect coefficient 1"), IOP( "lk1", BSIM1_MOD_K1L, IF_REAL, "Length dependence of k1"), IOP( "wk1", BSIM1_MOD_K1W, IF_REAL, "Width dependence of k1"), IOP( "k2", BSIM1_MOD_K20, IF_REAL, "Bulk effect coefficient 2"), IOP( "lk2", BSIM1_MOD_K2L, IF_REAL, "Length dependence of k2"), IOP( "wk2", BSIM1_MOD_K2W, IF_REAL, "Width dependence of k2"), IOP( "eta", BSIM1_MOD_ETA0, IF_REAL, "VDS dependence of threshold voltage"), IOP( "leta", BSIM1_MOD_ETAL, IF_REAL, "Length dependence of eta"), IOP( "weta", BSIM1_MOD_ETAW, IF_REAL, "Width dependence of eta"), IOP( "x2e", BSIM1_MOD_ETAB0, IF_REAL, "VBS dependence of eta"), IOP( "lx2e", BSIM1_MOD_ETABL, IF_REAL, "Length dependence of x2e"), IOP( "wx2e", BSIM1_MOD_ETABW, IF_REAL, "Width dependence of x2e"), IOP( "x3e", BSIM1_MOD_ETAD0, IF_REAL, "VDS dependence of eta"), IOP( "lx3e", BSIM1_MOD_ETADL, IF_REAL, "Length dependence of x3e"), IOP( "wx3e", BSIM1_MOD_ETADW, IF_REAL, "Width dependence of x3e"), IOP( "dl", BSIM1_MOD_DELTAL, IF_REAL, "Channel length reduction in um"), IOP( "dw", BSIM1_MOD_DELTAW, IF_REAL, "Channel width reduction in um"), IOP( "muz", BSIM1_MOD_MOBZERO, IF_REAL, "Zero field mobility at VDS=0 VGS=VTH"), IOP( "x2mz", BSIM1_MOD_MOBZEROB0, IF_REAL, "VBS dependence of muz"), IOP( "lx2mz", BSIM1_MOD_MOBZEROBL, IF_REAL, "Length dependence of x2mz"), IOP( "wx2mz", BSIM1_MOD_MOBZEROBW, IF_REAL, "Width dependence of x2mz"), IOP( "mus", BSIM1_MOD_MOBVDD0, IF_REAL, "Mobility at VDS=VDD VGS=VTH, channel length modulation"), IOP( "lmus", BSIM1_MOD_MOBVDDL, IF_REAL, "Length dependence of mus"), IOP( "wmus", BSIM1_MOD_MOBVDDW, IF_REAL, "Width dependence of mus"), IOP( "x2ms", BSIM1_MOD_MOBVDDB0, IF_REAL, "VBS dependence of mus"), IOP( "lx2ms", BSIM1_MOD_MOBVDDBL, IF_REAL, "Length dependence of x2ms"), IOP( "wx2ms", BSIM1_MOD_MOBVDDBW, IF_REAL, "Width dependence of x2ms"), IOP( "x3ms", BSIM1_MOD_MOBVDDD0, IF_REAL, "VDS dependence of mus"), IOP( "lx3ms", BSIM1_MOD_MOBVDDDL, IF_REAL, "Length dependence of x3ms"), IOP( "wx3ms", BSIM1_MOD_MOBVDDDW, IF_REAL, "Width dependence of x3ms"), IOP( "u0", BSIM1_MOD_UGS0, IF_REAL, "VGS dependence of mobility"), IOP( "lu0", BSIM1_MOD_UGSL, IF_REAL, "Length dependence of u0"), IOP( "wu0", BSIM1_MOD_UGSW, IF_REAL, "Width dependence of u0"), IOP( "x2u0", BSIM1_MOD_UGSB0, IF_REAL, "VBS dependence of u0"), IOP( "lx2u0", BSIM1_MOD_UGSBL, IF_REAL, "Length dependence of x2u0"), IOP( "wx2u0", BSIM1_MOD_UGSBW, IF_REAL, "Width dependence of x2u0"), IOP( "u1", BSIM1_MOD_UDS0, IF_REAL, "VDS depence of mobility, velocity saturation"), IOP( "lu1", BSIM1_MOD_UDSL, IF_REAL, "Length dependence of u1"), IOP( "wu1", BSIM1_MOD_UDSW, IF_REAL, "Width dependence of u1"), IOP( "x2u1", BSIM1_MOD_UDSB0, IF_REAL, "VBS depence of u1"), IOP( "lx2u1", BSIM1_MOD_UDSBL, IF_REAL, "Length depence of x2u1"), IOP( "wx2u1", BSIM1_MOD_UDSBW, IF_REAL, "Width depence of x2u1"), IOP( "x3u1", BSIM1_MOD_UDSD0, IF_REAL, "VDS depence of u1"), IOP( "lx3u1", BSIM1_MOD_UDSDL, IF_REAL, "Length dependence of x3u1"), IOP( "wx3u1", BSIM1_MOD_UDSDW, IF_REAL, "Width depence of x3u1"), IOP( "n0", BSIM1_MOD_N00, IF_REAL, "Subthreshold slope"), IOP( "ln0", BSIM1_MOD_N0L, IF_REAL, "Length dependence of n0"), IOP( "wn0", BSIM1_MOD_N0W, IF_REAL, "Width dependence of n0"), IOP( "nb", BSIM1_MOD_NB0, IF_REAL, "VBS dependence of subthreshold slope"), IOP( "lnb", BSIM1_MOD_NBL, IF_REAL, "Length dependence of nb"), IOP( "wnb", BSIM1_MOD_NBW, IF_REAL, "Width dependence of nb"), IOP( "nd", BSIM1_MOD_ND0, IF_REAL, "VDS dependence of subthreshold slope"), IOP( "lnd", BSIM1_MOD_NDL, IF_REAL, "Length dependence of nd"), IOP( "wnd", BSIM1_MOD_NDW, IF_REAL, "Width dependence of nd"), IOP( "tox", BSIM1_MOD_TOX, IF_REAL, "Gate oxide thickness in um"), IOP( "temp", BSIM1_MOD_TEMP, IF_REAL, "Temperature in degree Celcius"), IOP( "vdd", BSIM1_MOD_VDD, IF_REAL, "Supply voltage to specify mus"), IOPA( "cgso", BSIM1_MOD_CGSO, IF_REAL, "Gate source overlap capacitance per unit channel width(m)"), IOPA( "cgdo", BSIM1_MOD_CGDO, IF_REAL, "Gate drain overlap capacitance per unit channel width(m)"), IOPA( "cgbo", BSIM1_MOD_CGBO, IF_REAL, "Gate bulk overlap capacitance per unit channel length(m)"), IOP( "xpart", BSIM1_MOD_XPART, IF_FLAG, "Flag for channel charge partitioning"), IOP( "rsh", BSIM1_MOD_RSH, IF_REAL, "Source drain diffusion sheet resistance in ohm per square"), IOP( "js", BSIM1_MOD_JS, IF_REAL, "Source drain junction saturation current per unit area"), IOP( "pb", BSIM1_MOD_PB, IF_REAL, "Source drain junction built in potential"), IOPA( "mj", BSIM1_MOD_MJ, IF_REAL, "Source drain bottom junction capacitance grading coefficient"), IOPA( "pbsw", BSIM1_MOD_PBSW, IF_REAL, "Source drain side junction capacitance built in potential"), IOPA( "mjsw", BSIM1_MOD_MJSW, IF_REAL, "Source drain side junction capacitance grading coefficient"), IOPA( "cj", BSIM1_MOD_CJ, IF_REAL, "Source drain bottom junction capacitance per unit area"), IOPA( "cjsw", BSIM1_MOD_CJSW, IF_REAL, "Source drain side junction capacitance per unit area"), IOP( "wdf", BSIM1_MOD_DEFWIDTH, IF_REAL, "Default width of source drain diffusion in um"), IOP( "dell", BSIM1_MOD_DELLENGTH, IF_REAL, "Length reduction of source drain diffusion"), IOP("kf", BSIM1_MOD_KF, IF_REAL ,"Flicker noise coefficient"), IOP("af", BSIM1_MOD_AF, IF_REAL ,"Flicker noise exponent"), IP( "nmos", BSIM1_MOD_NMOS, IF_FLAG, "Flag to indicate NMOS"), IP( "pmos", BSIM1_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"), }; char *B1names[] = { "Drain", "Gate", "Source", "Bulk" }; int B1nSize = NUMELEMS(B1names); int B1pTSize = NUMELEMS(B1pTable); int B1mPTSize = NUMELEMS(B1mPTable); int B1iSize = sizeof(B1instance); int B1mSize = sizeof(B1model); tmpk8ny_4pz/src/spicelib/devices/bsim1/bsim1ext.h0000644000175000017500000000237513546075722022112 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Hong June Park, Thomas L. Quarles Modified: 2000 AlansFixes **********/ extern int B1acLoad(GENmodel *,CKTcircuit*); extern int B1ask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*); extern int B1convTest(GENmodel *,CKTcircuit*); extern int B1getic(GENmodel*,CKTcircuit*); extern int B1load(GENmodel*,CKTcircuit*); extern int B1mAsk(CKTcircuit*,GENmodel *,int, IFvalue*); extern int B1mParam(int,IFvalue*,GENmodel*); extern void B1mosCap(CKTcircuit*, double, double, double, double*, double, double, double, double, double, double, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*); extern int B1noise (int, int, GENmodel *, CKTcircuit *, Ndata *, double *); extern int B1param(int,IFvalue*,GENinstance*,IFvalue*); extern int B1pzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int B1setup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int B1unsetup(GENmodel*,CKTcircuit*); extern int B1temp(GENmodel*,CKTcircuit*); extern int B1trunc(GENmodel*,CKTcircuit*,double*); extern int B1disto(int,GENmodel*,CKTcircuit*); extern int B1dSetup(GENmodel*, register CKTcircuit*); tmpk8ny_4pz/src/spicelib/devices/bsim1/b1noi.c0000644000175000017500000001267113546075722021361 0ustar carstencarsten/********** Copyright 2003 ??. All rights reserved. Author: 2003 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "bsim1def.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" /* * B1noise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with MOSFET's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the MOSFET's is summed with the variable "OnDens". */ int B1noise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; B1model *firstModel = (B1model *) genmodel; B1model *model; B1instance *inst; double tempOnoise; double tempInoise; double noizDens[B1NSRCS]; double lnNdens[B1NSRCS]; int i; /* define the names of the noise sources */ static char *B1nNames[B1NSRCS] = { /* Note that we have to keep the order */ "_rd", /* noise due to rd */ /* consistent with thestrchr definitions */ "_rs", /* noise due to rs */ /* in bsim1defs.h */ "_id", /* noise due to id */ "_1overf", /* flicker (1/f) noise */ "" /* total transistor noise */ }; for (model=firstModel; model != NULL; model=B1nextModel(model)) { for (inst=B1instances(model); inst != NULL; inst=B1nextInstance(inst)) { switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i=0; i < B1NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_%s%s", inst->B1name, B1nNames[i]); } break; case INT_NOIZ: for (i=0; i < B1NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total_%s%s", inst->B1name, B1nNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total_%s%s", inst->B1name, B1nNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: NevalSrc(&noizDens[B1RDNOIZ],&lnNdens[B1RDNOIZ], ckt,THERMNOISE,inst->B1dNodePrime,inst->B1dNode, inst->B1drainConductance * inst->B1m); NevalSrc(&noizDens[B1RSNOIZ],&lnNdens[B1RSNOIZ], ckt,THERMNOISE,inst->B1sNodePrime,inst->B1sNode, inst->B1sourceConductance * inst->B1m); NevalSrc(&noizDens[B1IDNOIZ],&lnNdens[B1IDNOIZ], ckt,THERMNOISE,inst->B1dNodePrime,inst->B1sNodePrime, (2.0/3.0 * fabs(inst->B1gm * inst->B1m))); NevalSrc(&noizDens[B1FLNOIZ], NULL, ckt, N_GAIN,inst->B1dNodePrime, inst->B1sNodePrime, (double)0.0); noizDens[B1FLNOIZ] *= model->B1fNcoef * inst->B1m * exp(model->B1fNexp * log(MAX(fabs(inst->B1cd),N_MINLOG))) / (data->freq * (inst->B1w - model->B1deltaW * 1e-6) * (inst->B1l - model->B1deltaL * 1e-6) * model->B1Cox * model->B1Cox); lnNdens[B1FLNOIZ] = log(MAX(noizDens[B1FLNOIZ],N_MINLOG)); noizDens[B1TOTNOIZ] = noizDens[B1RDNOIZ] + noizDens[B1RSNOIZ] + noizDens[B1IDNOIZ] + noizDens[B1FLNOIZ]; lnNdens[B1TOTNOIZ] = log(MAX(noizDens[B1TOTNOIZ], N_MINLOG)); *OnDens += noizDens[B1TOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to */ /* initialize our "history" variables */ for (i=0; i < B1NSRCS; i++) { inst->B1nVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i=0; i < B1NSRCS; i++) { inst->B1nVar[OUTNOIZ][i] = 0.0; inst->B1nVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0 (we have to integrate) */ for (i=0; i < B1NSRCS; i++) { if (i != B1TOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], inst->B1nVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv , lnNdens[i] + data->lnGainInv, inst->B1nVar[LNLSTDENS][i] + data->lnGainInv, data); inst->B1nVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { inst->B1nVar[OUTNOIZ][i] += tempOnoise; inst->B1nVar[OUTNOIZ][B1TOTNOIZ] += tempOnoise; inst->B1nVar[INNOIZ][i] += tempInoise; inst->B1nVar[INNOIZ][B1TOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i=0; i < B1NSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i=0; i < B1NSRCS; i++) { data->outpVector[data->outNumber++] = inst->B1nVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = inst->B1nVar[INNOIZ][i]; } } /* if */ break; } /* switch (mode) */ break; case N_CLOSE: return (OK); /* do nothing, the main calling routine will close */ break; /* the plots */ } /* switch (operation) */ } /* for inst */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim1/b1moscap.c0000644000175000017500000000432313546075722022051 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Hong J. Park, Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim1def.h" #include "ngspice/suffix.h" /* routine to calculate equivalent conductance and total terminal * charges */ void B1mosCap( CKTcircuit *ckt, double vgd, double vgs, double vgb, double args[8], /* double GateDrainOverlapCap, double GateSourceOverlapCap, double GateBulkOverlapCap, double capbd, double capbs, double cggb, double cgdb, double cgsb, */ double cbgb, double cbdb, double cbsb, double cdgb, double cddb, double cdsb, double *gcggbPointer, double *gcgdbPointer, double *gcgsbPointer, double *gcbgbPointer, double *gcbdbPointer, double *gcbsbPointer, double *gcdgbPointer, double *gcddbPointer, double *gcdsbPointer, double *gcsgbPointer, double *gcsdbPointer, double *gcssbPointer, double *qGatePointer, double *qBulkPointer, double *qDrainPointer, double *qSourcePointer) { double qgd; double qgs; double qgb; double ag0; ag0 = ckt->CKTag[0]; /* compute equivalent conductance */ *gcdgbPointer = (cdgb - args[0]) * ag0; *gcddbPointer = (cddb + args[3] + args[0]) * ag0; *gcdsbPointer = cdsb * ag0; *gcsgbPointer = -(args[5] + cbgb + cdgb + args[1]) * ag0; *gcsdbPointer = -(args[6] + cbdb + cddb ) * ag0; *gcssbPointer = (args[4] + args[1] - (args[7] + cbsb + cdsb )) * ag0; *gcggbPointer = (args[5] + args[0] + args[1] + args[2] ) * ag0; *gcgdbPointer = (args[6] - args[0]) * ag0; *gcgsbPointer = (args[7] - args[1]) * ag0; *gcbgbPointer = (cbgb - args[2]) * ag0; *gcbdbPointer = (cbdb - args[3]) * ag0; *gcbsbPointer = (cbsb - args[4]) * ag0; /* compute total terminal charge */ qgd = args[0] * vgd; qgs = args[1] * vgs; qgb = args[2] * vgb; *qGatePointer = *qGatePointer + qgd + qgs + qgb; *qBulkPointer = *qBulkPointer - qgb; *qDrainPointer = *qDrainPointer - qgd; *qSourcePointer = -(*qGatePointer + *qBulkPointer + *qDrainPointer); } tmpk8ny_4pz/src/spicelib/devices/bsim1/b1dset.c0000644000175000017500000011745613546075722021542 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Hong J. Park, Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim1def.h" #include "ngspice/trandefs.h" #include "ngspice/distodef.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/devdefs.h" int B1dSetup(GENmodel *inModel, CKTcircuit *ckt) { B1model* model = (B1model*)inModel; B1instance *here; double DrainSatCurrent; double EffectiveLength; double GateBulkOverlapCap; double GateDrainOverlapCap; double GateSourceOverlapCap; double SourceSatCurrent; double DrainArea; double SourceArea; double DrainPerimeter; double SourcePerimeter; double vt0; double evbs; double lgbs1, lgbs2, lgbs3; double czbd, czbs, czbdsw, czbssw; double PhiB, MJ, MJSW, PhiBSW; double arg, argsw, sarg, sargsw; double capbs1, capbs2, capbs3; double capbd1, capbd2, capbd3; double qg; double qb; double qd; double Vfb; double Phi; double K1; double K2; double Vdd; double Ugs; double Uds; double Leff; double Eta; double Vpb; double SqrtVpb; double Von; double Vth; double DrCur; double G; double A; double Arg; double Beta; double Beta_Vds_0; double BVdd; double Beta0; double VddSquare; double C1; double C2; double VdsSat; double Argl1; double Argl2; double Vc; double Term1; double K; double Args1; double Args2; double Args3; double Warg1; double Vcut; double N; double N0; double NB; double ND; double Warg2; double Wds; double Wgs; double Ilimit; double Iexp; double Vth0; double Arg1; double Arg2; double Arg3; double Arg5; double Ent; double Vcom; double Vgb; double Vgb_Vfb; double VdsPinchoff; double EntSquare; double Argl5; double Argl6; double Argl7; double WLCox; double Vtsquare; int ChargeComputationNeeded; double co4v15; double VgsVth = 0.0; double lgbd1, lgbd2, lgbd3, evbd; double vbd = 0.0; double vgd = 0.0; double vgb = 0.0; double vds = 0.0; double vgs = 0.0; double vbs = 0.0; double dBVdddVds; Dderivs d_Argl6; Dderivs d_Vgb, d_Vgb_Vfb, d_EntSquare, d_Argl5, d_Argl7; Dderivs d_Arg5, d_Ent, d_Vcom, d_VdsPinchoff; Dderivs d_qb, d_qd, d_Vth0, d_Arg1, d_Arg2, d_Arg3; Dderivs d_dummy, d_Vth, d_BVdd, d_Warg1, d_qg; Dderivs d_N, d_Wds, d_Wgs, d_Iexp; Dderivs d_Argl1, d_Argl2, d_Args1, d_Args2, d_Args3; Dderivs d_Beta, d_Vc, d_Term1, d_K, d_VdsSat; Dderivs d_Beta_Vds_0, d_C1, d_C2, d_Beta0; Dderivs d_VgsVth, d_G, d_A, d_Arg, d_DrCur; Dderivs d_Ugs, d_Uds, d_Eta, d_Vpb, d_SqrtVpb, d_Von; Dderivs d_p, d_q, d_r, d_zero; /* loop through all the B1 device models */ for( ; model != NULL; model = B1nextModel(model)) { /* loop through all the instances of the model */ for (here = B1instances(model); here != NULL ; here=B1nextInstance(here)) { EffectiveLength=here->B1l - model->B1deltaL * 1.e-6;/* m */ DrainArea = here->B1m * here->B1drainArea; SourceArea = here->B1m * here->B1sourceArea; DrainPerimeter = here->B1m * here->B1drainPerimeter; SourcePerimeter = here->B1m * here->B1sourcePerimeter; if( (DrainSatCurrent=DrainArea*model->B1jctSatCurDensity) < 1e-15){ DrainSatCurrent = 1.0e-15; } if( (SourceSatCurrent=SourceArea*model->B1jctSatCurDensity) <1.0e-15){ SourceSatCurrent = 1.0e-15; } GateSourceOverlapCap = model->B1gateSourceOverlapCap * here->B1w * here->B1m; GateDrainOverlapCap = model->B1gateDrainOverlapCap * here->B1w * here-> B1m; GateBulkOverlapCap = model->B1gateBulkOverlapCap *EffectiveLength; vt0 = model->B1type * here->B1vt0; vbs = model->B1type * ( *(ckt->CKTrhsOld+here->B1bNode) - *(ckt->CKTrhsOld+here->B1sNodePrime)); vgs = model->B1type * ( *(ckt->CKTrhsOld+here->B1gNode) - *(ckt->CKTrhsOld+here->B1sNodePrime)); vds = model->B1type * ( *(ckt->CKTrhsOld+here->B1dNodePrime) - *(ckt->CKTrhsOld+here->B1sNodePrime)); if(vds >= 0) { /* normal mode */ here->B1mode = 1; } else { /* inverse mode */ here->B1mode = -1; vds = -vds; vgs = vgs + vds; /* these are the local(fake) values now */ vbs = vbs + vds; } vgb = vgs - vbs; vgd = vgs - vds; vbd = vbs - vds; if(vbs <= 0.0 ) { lgbs1 = SourceSatCurrent / CONSTvt0 + ckt->CKTgmin; lgbs2 = lgbs3 = 0.0; } else { evbs = exp(vbs/CONSTvt0); lgbs1 = SourceSatCurrent*evbs/CONSTvt0 + ckt->CKTgmin; lgbs2 = (lgbs1 - ckt->CKTgmin)/(CONSTvt0*2); lgbs3 = lgbs2/(CONSTvt0*3); } if(vbd <= 0.0) { lgbd1 = DrainSatCurrent / CONSTvt0 + ckt->CKTgmin; lgbd2 = lgbd3 = 0.0; } else { evbd = exp(vbd/CONSTvt0); lgbd1 = DrainSatCurrent*evbd/CONSTvt0 + ckt->CKTgmin; lgbd2 = (lgbd1 - ckt->CKTgmin)/(CONSTvt0*2); lgbd3 = lgbd2/(CONSTvt0*3); } /* line 400 */ /* call B1evaluate to calculate drain current and its * derivatives and charge and capacitances related to gate * drain, and bulk */ /* check quadratic interpolation for beta0 ; line 360 */ /* * Copyright (c) 1985 Hong J. Park, Thomas L. Quarles * modified 1988 Jaijeet Roychowdhury */ /* This routine evaluates the drain current, its derivatives and the * charges associated with the gate,bulk and drain terminal * using the B1 (Berkeley Short-Channel IGFET Model) Equations. */ /* as usual p=vgs, q=vbs, r=vds */ { ChargeComputationNeeded = 1; Vfb = here->B1vfb; Phi = here->B1phi; K1 = here->B1K1; K2 = here->B1K2; Vdd = model->B1vdd; d_p.value = 0.0; d_p.d1_p = 1.0; d_p.d1_q = 0.0; d_p.d1_r = 0.0; d_p.d2_p2 = 0.0; d_p.d2_q2 = 0.0; d_p.d2_r2 = 0.0; d_p.d2_pq = 0.0; d_p.d2_qr = 0.0; d_p.d2_pr = 0.0; d_p.d3_p3 = 0.0; d_p.d3_q3 = 0.0; d_p.d3_r3 = 0.0; d_p.d3_p2r = 0.0; d_p.d3_p2q = 0.0; d_p.d3_q2r = 0.0; d_p.d3_pq2 = 0.0; d_p.d3_pr2 = 0.0; d_p.d3_qr2 = 0.0; d_p.d3_pqr = 0.0; EqualDeriv(&d_q,&d_p); EqualDeriv(&d_r,&d_p); EqualDeriv(&d_zero,&d_p); d_q.d1_p = d_r.d1_p = d_zero.d1_p = 0.0; d_q.d1_q = d_r.d1_r = 1.0; d_p.value = vgs; d_q.value = vbs; d_r.value = vds; if((Ugs = here->B1ugs + here->B1ugsB * vbs) <= 0 ) { Ugs = 0; EqualDeriv(&d_Ugs,&d_zero); } else { EqualDeriv(&d_Ugs,&d_q); d_Ugs.value = Ugs; d_Ugs.d1_q = here->B1ugsB; } if((Uds = here->B1uds + here->B1udsB * vbs + here->B1udsD*(vds-Vdd)) <= 0 ) { Uds = 0.0; EqualDeriv(&d_Uds,&d_zero); } else { Leff = here->B1l * 1.e6 - model->B1deltaL; /* Leff in um */ /*const*/ Uds = Uds / Leff; /* Uds = (here->B1uds + here->B1udsB * vbs here->B1udsD* (vds-Vdd))/Leff */ EqualDeriv(&d_Uds,&d_r); d_Uds.value = Uds; d_Uds.d1_r = here->B1udsD/Leff; d_Uds.d1_q = here->B1udsB/Leff; } Eta = here->B1eta + here->B1etaB * vbs + here->B1etaD * (vds - Vdd); EqualDeriv(&d_Eta,&d_r); d_Eta.value = Eta; d_Eta.d1_r = here->B1etaD; d_Eta.d1_q = here->B1etaB; if( Eta <= 0 ) { Eta = 0; EqualDeriv(&d_Eta,&d_zero); } else if ( Eta > 1 ) { Eta = 1; EqualDeriv(&d_Eta,&d_zero); d_Eta.value = 1.0; } if( vbs < 0 ) { Vpb = Phi - vbs; EqualDeriv(&d_Vpb,&d_q); d_Vpb.value = Vpb; d_Vpb.d1_q = -1; } else { Vpb = Phi; EqualDeriv(&d_Vpb,&d_zero); d_Vpb.value = Phi; } SqrtVpb = sqrt( Vpb ); SqrtDeriv(&d_SqrtVpb,&d_Vpb); Von = Vfb + Phi + K1 * SqrtVpb - K2 * Vpb - Eta * vds; EqualDeriv(&d_dummy,&d_r); d_dummy.value = -Eta*vds; d_dummy.d1_r = -Eta; TimesDeriv(&d_Von,&d_Vpb,-K2); PlusDeriv(&d_Von,&d_Von,&d_dummy); TimesDeriv(&d_dummy,&d_SqrtVpb,K1); PlusDeriv(&d_Von,&d_dummy,&d_Von); d_Von.value = Von; Vth = Von; EqualDeriv(&d_Vth,&d_Von); VgsVth = vgs - Vth; TimesDeriv(&d_VgsVth,&d_Vth,-1.0); d_VgsVth.value = VgsVth; d_VgsVth.d1_p += 1.0; G = 1./(1.744+0.8364 * Vpb); TimesDeriv(&d_G,&d_Vpb,0.8364); d_G.value += 1.744; InvDeriv(&d_G,&d_G); G = 1 - G; TimesDeriv(&d_G,&d_G,-1.0); d_G.value += 1.0; A = G/SqrtVpb; DivDeriv(&d_A,&d_G,&d_SqrtVpb); A = 1.0 + 0.5*K1*A; TimesDeriv(&d_A,&d_A,0.5*K1); d_A.value += 1.0; A = MAX( A, 1.0); /* Modified */ if (A <= 1.0) { EqualDeriv(&d_A,&d_zero); d_A.value = 1.0; } Arg = MAX(( 1 + Ugs * VgsVth), 1.0); MultDeriv(&d_dummy,&d_Ugs,&d_VgsVth); d_dummy.value += 1.0; if (d_dummy.value <= 1.0) { EqualDeriv(&d_Arg,&d_zero); d_Arg.value = 1.0; } else EqualDeriv(&d_Arg,&d_dummy); if( VgsVth < 0 ) { /* cutoff */ DrCur = 0; EqualDeriv(&d_DrCur,&d_zero); goto SubthresholdComputation; } /* Quadratic Interpolation for Beta0 (Beta at vgs = 0, vds=Vds) */ Beta_Vds_0 = (here->B1betaZero + here->B1betaZeroB * vbs); EqualDeriv(&d_Beta_Vds_0,&d_q); d_Beta_Vds_0.value = Beta_Vds_0; d_Beta_Vds_0.d1_q = here->B1betaZeroB; BVdd = (here->B1betaVdd + here->B1betaVddB * vbs); EqualDeriv(&d_BVdd,&d_q); d_BVdd.value = BVdd; d_BVdd.d1_q = here->B1betaVddB; dBVdddVds = MAX( here->B1betaVddD, 0.0); /* is the above wrong ?!? */ if( vds > Vdd ) { Beta0 = BVdd + dBVdddVds * (vds - Vdd); EqualDeriv(&d_Beta0,&d_r); d_Beta0.value = vds - Vdd; TimesDeriv(&d_Beta0,&d_Beta0,dBVdddVds); PlusDeriv(&d_Beta0,&d_Beta0,&d_BVdd); /* dBVdddVds = const */ /* and this stuff here? */ } else { VddSquare = Vdd * Vdd; /* const */ C1 = ( -BVdd + Beta_Vds_0 + dBVdddVds * Vdd) / VddSquare; TimesDeriv(&d_C1,&d_BVdd,-1.0); PlusDeriv(&d_C1,&d_C1,&d_Beta_Vds_0); d_C1.value += dBVdddVds * Vdd; TimesDeriv(&d_C1,&d_C1,1/VddSquare); C2 = 2 * (BVdd - Beta_Vds_0) / Vdd - dBVdddVds; TimesDeriv(&d_C2,&d_Beta_Vds_0,-1.0); PlusDeriv(&d_C2,&d_C2,&d_BVdd); TimesDeriv(&d_C2,&d_C2,2/Vdd); d_C2.value -= dBVdddVds; Beta0 = (C1 * vds + C2) * vds + Beta_Vds_0; MultDeriv(&d_Beta0,&d_r,&d_C1); PlusDeriv(&d_Beta0,&d_Beta0,&d_C2); MultDeriv(&d_Beta0,&d_Beta0,&d_dummy); PlusDeriv(&d_Beta0,&d_Beta0,&d_Beta_Vds_0); /* dBeta0dVds = 2*C1*vds + C2; dBeta0dVbs = dC1dVbs * vds * vds + dC2dVbs * vds + dBeta_Vds_0_dVbs; maybe we'll need these later */ } /*Beta = Beta0 / ( 1 + Ugs * VgsVth );*/ Beta = Beta0 / Arg ; DivDeriv(&d_Beta,&d_Beta0,&d_Arg); /*VdsSat = MAX( VgsVth / ( A + Uds * VgsVth ), 0.0);*/ Vc = Uds * VgsVth / A; DivDeriv(&d_Vc,&d_VgsVth,&d_A); MultDeriv(&d_Vc,&d_Vc,&d_Uds); if(Vc < 0.0 ) { EqualDeriv(&d_Vc,&d_zero); Vc=0.0; } Term1 = sqrt( 1 + 2 * Vc ); TimesDeriv(&d_Term1,&d_Vc,2.0); d_Term1.value += 1.0; SqrtDeriv(&d_Term1,&d_Term1); K = 0.5 * ( 1 + Vc + Term1 ); PlusDeriv(&d_K,&d_Vc,&d_Term1); d_K.value += 1.0; TimesDeriv(&d_K,&d_K,0.5); VdsSat = VgsVth / ( A * sqrt(K)); if (VdsSat < 0.0) { EqualDeriv(&d_VdsSat,&d_zero); VdsSat = 0.0; } else { SqrtDeriv(&d_VdsSat,&d_K); MultDeriv(&d_VdsSat,&d_VdsSat,&d_A); DivDeriv(&d_VdsSat,&d_VgsVth,&d_VdsSat); } if( vds < VdsSat ) { /* Triode Region */ /*Argl1 = 1 + Uds * vds;*/ Argl1 = 1 + Uds * vds; if (Argl1 < 1.0) { Argl1 = 1.0; EqualDeriv(&d_Argl1,&d_zero); d_Argl1.value = 1.0; } else { MultDeriv(&d_Argl1,&d_r,&d_Uds); d_Argl1.value += 1.0; } Argl2 = VgsVth - 0.5 * A * vds; MultDeriv(&d_Argl2,&d_r,&d_A); TimesDeriv(&d_Argl2,&d_Argl2,-0.5); PlusDeriv(&d_Argl2,&d_Argl2,&d_VgsVth); DrCur = Beta * Argl2 * vds / Argl1; DivDeriv(&d_DrCur,&d_r,&d_Argl1); MultDeriv(&d_DrCur,&d_DrCur,&d_Argl2); MultDeriv(&d_DrCur,&d_DrCur,&d_Beta); } else { /* Pinchoff (Saturation) Region */ /* history Args1 = 1.0 + 1. / Term1; InvDeriv(&d_Args1,&d_Term1); d_Args1.value += 1.0; */ /* dVcdVgs = Uds / A; dVcdVds = VgsVth * dUdsdVds / A - dVcdVgs * dVthdVds; dVcdVbs = ( VgsVth * dUdsdVbs - Uds * (dVthdVbs + VgsVth * dAdVbs / A ))/ A; dKdVc = 0.5* Args1; dKdVgs = dKdVc * dVcdVgs; dKdVds = dKdVc * dVcdVds; dKdVbs = dKdVc * dVcdVbs; */ Args2 = VgsVth / A / K; MultDeriv(&d_Args2,&d_A,&d_K); DivDeriv(&d_Args2,&d_VgsVth,&d_Args2); Args3 = Args2 * VgsVth; MultDeriv(&d_Args3,&d_Args2,&d_VgsVth); DrCur = 0.5 * Beta * Args3; MultDeriv(&d_DrCur,&d_Beta,&d_Args3); TimesDeriv(&d_DrCur,&d_DrCur,0.5); } SubthresholdComputation: N0 = here->B1subthSlope;/*const*/ Vcut = - 40. * N0 * CONSTvt0 ;/*const*/ if( (N0 >= 200) || (VgsVth < Vcut ) || (VgsVth > (-0.5*Vcut))) { goto ChargeComputation; } NB = here->B1subthSlopeB;/*const*/ ND = here->B1subthSlopeD;/*const*/ N = N0 + NB * vbs + ND * vds; /* subthreshold slope */ EqualDeriv(&d_N,&d_r); d_N.value = N; d_N.d1_q = NB; d_N.d1_r = ND; if( N < 0.5 ){ N = 0.5; d_N.value = 0.5; d_N.d1_q = d_N.d1_r = 0.0; } Warg1 = exp( - vds / CONSTvt0 ); TimesDeriv(&d_Warg1,&d_r,-1/CONSTvt0); ExpDeriv(&d_Warg1,&d_Warg1); Wds = 1 - Warg1; TimesDeriv(&d_Wds,&d_Warg1,-1.0); d_Wds.value += 1.0; Wgs = exp( VgsVth / ( N * CONSTvt0 )); DivDeriv(&d_Wgs,&d_VgsVth,&d_N); TimesDeriv(&d_Wgs,&d_Wgs,1/CONSTvt0); ExpDeriv(&d_Wgs,&d_Wgs); Vtsquare = CONSTvt0 * CONSTvt0 ;/*const*/ Warg2 = 6.04965 * Vtsquare * here->B1betaZero;/*const*/ Ilimit = 4.5 * Vtsquare * here->B1betaZero;/*const*/ Iexp = Warg2 * Wgs * Wds; MultDeriv(&d_Iexp,&d_Wgs,&d_Wds); TimesDeriv(&d_Iexp,&d_Iexp,Warg2); DrCur = DrCur + Ilimit * Iexp / ( Ilimit + Iexp ); EqualDeriv(&d_dummy,&d_Iexp); d_dummy.value += Ilimit; InvDeriv(&d_dummy,&d_dummy); MultDeriv(&d_dummy,&d_dummy,&d_Iexp); TimesDeriv(&d_dummy,&d_dummy,Ilimit); PlusDeriv(&d_DrCur,&d_DrCur,&d_dummy); /* gds term has been modified to prevent blow up at Vds=0 */ /* gds = gds + Temp3 * ( -Wds / N / CONSTvt0 * (dVthdVds + VgsVth * ND / N ) + Warg1 / CONSTvt0 ); */ ChargeComputation: /* Some Limiting of DC Parameters */ /* if(DrCur < 0.0) DrCur = 0.0; if(gm < 0.0) gm = 0.0; if(gds < 0.0) gds = 0.0; if(gmbs < 0.0) gmbs = 0.0; */ WLCox = model->B1Cox * (here->B1l - model->B1deltaL * 1.e-6) * ((here->B1w - model->B1deltaW * 1.e-6) * here->B1m) * 1.e4; /* F */ if( ! ChargeComputationNeeded ) { qg = 0; qd = 0; qb = 0; EqualDeriv(&d_qg,&d_zero); EqualDeriv(&d_qb,&d_zero); EqualDeriv(&d_qd,&d_zero); goto finished; } G = 1.0 - 1./(1.744+0.8364 * Vpb); TimesDeriv(&d_G,&d_Vpb,-0.8364); d_G.value -= 1.744; InvDeriv(&d_G,&d_G); d_G.value += 1.0; A = 1.0 + 0.5*K1*G/SqrtVpb; if (A < 1.0) { A = 1.0; EqualDeriv(&d_A,&d_zero); d_A.value = 1.0; } else { DivDeriv(&d_A,&d_G,&d_SqrtVpb); TimesDeriv(&d_A,&d_A,0.5*K1); d_A.value += 1.0; } /*Arg = 1 + Ugs * VgsVth;*/ Phi = MAX( 0.1, Phi);/*const*/ if( model->B1channelChargePartitionFlag ) { /*0/100 partitioning for drain/source chArges at the saturation region*/ Vth0 = Vfb + Phi + K1 * SqrtVpb; TimesDeriv(&d_Vth0,&d_SqrtVpb,K1); d_Vth0.value += Vfb + Phi; VgsVth = vgs - Vth0; TimesDeriv(&d_VgsVth,&d_Vth0,-1.0); PlusDeriv(&d_VgsVth,&d_VgsVth,&d_p); Arg1 = A * vds; MultDeriv(&d_Arg1,&d_A,&d_r); Arg2 = VgsVth - 0.5 * Arg1; TimesDeriv(&d_Arg2,&d_Arg1,-0.5); PlusDeriv(&d_Arg2,&d_Arg2,&d_VgsVth); Arg3 = vds - Arg1; TimesDeriv(&d_Arg3,&d_Arg1,-1.0); PlusDeriv(&d_Arg3,&d_Arg3,&d_r); Arg5 = Arg1 * Arg1; MultDeriv(&d_Arg5,&d_Arg1,&d_Arg1); Ent = MAX(Arg2,1.0e-8); if (Arg2 < 1.0e-8) { EqualDeriv(&d_Ent,&d_zero); d_Ent.value = 1.0e-8; } else { EqualDeriv(&d_Ent,&d_Arg2); } Vcom = VgsVth * VgsVth / 6.0 - 1.25e-1 * Arg1 * VgsVth + 2.5e-2 * Arg5; TimesDeriv(&d_dummy,&d_Arg1,-0.125); TimesDeriv(&d_Vcom,&d_VgsVth,1/6.0); PlusDeriv(&d_Vcom,&d_Vcom,&d_dummy); MultDeriv(&d_Vcom,&d_Vcom,&d_VgsVth); TimesDeriv(&d_dummy,&d_Arg5,2.5e-2); PlusDeriv(&d_Vcom,&d_Vcom,&d_dummy); VdsPinchoff = VgsVth / A; if (VdsPinchoff < 0.0) { VdsPinchoff = 0.0; EqualDeriv(&d_VdsPinchoff,&d_zero); } else { DivDeriv(&d_VdsPinchoff,&d_VgsVth,&d_A); } Vgb = vgs - vbs ; EqualDeriv(&d_Vgb,&d_p); d_Vgb.value = Vgb; d_Vgb.d1_q = -1.0; Vgb_Vfb = Vgb - Vfb; EqualDeriv(&d_Vgb_Vfb,&d_Vgb); d_Vgb_Vfb.value -= Vfb; if( Vgb_Vfb < 0){ /* Accumulation Region */ qg = WLCox * Vgb_Vfb; TimesDeriv(&d_qg,&d_Vgb_Vfb,WLCox); qb = - qg; TimesDeriv(&d_qb,&d_qg,-1.0); qd = 0. ; EqualDeriv(&d_qd,&d_zero); goto finished; } else if ( vgs < Vth0 ){ /* Subthreshold Region */ qg = 0.5 * WLCox * K1 * K1 * (-1 + sqrt(1 + 4 * Vgb_Vfb / (K1 * K1))); TimesDeriv(&d_qg,&d_Vgb_Vfb,4/(K1*K1)); d_qg.value += 1.0; SqrtDeriv(&d_qg,&d_qg); d_qg.value -= 1.0; TimesDeriv(&d_qg,&d_qg,0.5 * WLCox * K1 * K1); qb = -qg; TimesDeriv(&d_qb,&d_qg,-1.0); qd = 0.; EqualDeriv(&d_qd,&d_zero); goto finished; } else if( vds < VdsPinchoff ){ /* triode region */ /*VgsVth2 = VgsVth*VgsVth;*/ EntSquare = Ent * Ent; MultDeriv(&d_EntSquare,&d_Ent,&d_Ent); Argl1 = 1.2e1 * EntSquare; TimesDeriv(&d_Argl1,&d_EntSquare,12.0); Argl2 = 1.0 - A; TimesDeriv(&d_Argl2,&d_A,-1.0); d_Argl2.value += 1.0; /* Argl3 = Arg1 * vds; MultDeriv(&d_Argl3,&d_Arg1,&d_r); */ /*Argl4 = Vcom/Ent/EntSquare;*/ if (Ent > 1.0e-8) { Argl5 = Arg1 / Ent; DivDeriv(&d_Argl5,&d_Arg1,&d_Ent); /*Argl6 = Vcom/EntSquare;*/ } else { Argl5 = 2.0; EqualDeriv(&d_Argl5,&d_zero); d_Argl5.value = 2.0; Argl6 = 4.0 / 1.5e1;/*const*/ } Argl7 = Argl5 / 1.2e1; TimesDeriv(&d_Argl7,&d_Argl5,1.0/12.0); /* Argl8 = 6.0 * Ent; TimesDeriv(&d_Argl8,&d_Ent,6.0); Argl9 = 0.125 * Argl5 * Argl5; MultDeriv(&d_Argl9,&d_Argl5,&d_Argl5); TimesDeriv(&d_Argl9,&d_Argl9,0.125); */ qg = WLCox * (vgs - Vfb - Phi - 0.5 * vds + vds * Argl7); EqualDeriv(&d_qg,&d_Argl7); d_qg.value -= 0.5; MultDeriv(&d_qg,&d_qg,&d_r); d_qg.value += vgs - Vfb - Phi; d_qg.d1_p += 1.0; TimesDeriv(&d_qg,&d_qg,WLCox); qb = WLCox * ( - Vth0 + Vfb + Phi + 0.5 * Arg3 - Arg3 * Argl7); TimesDeriv(&d_qb,&d_Argl7,-1.0); d_qb.value += 0.5; MultDeriv(&d_qb,&d_qb,&d_Arg3); d_qb.value += Vfb + Phi; TimesDeriv(&d_dummy,&d_Vth0,-1.0); PlusDeriv(&d_qb,&d_qb,&d_dummy); TimesDeriv(&d_qb,&d_qb,WLCox); qd = - WLCox * (0.5 * VgsVth - 0.75 * Arg1 + 0.125 * Arg1 * Argl5); TimesDeriv(&d_qd,&d_Argl5,0.125); d_qd.value -= 0.75; MultDeriv(&d_qd,&d_qd,&d_Arg1); TimesDeriv(&d_dummy,&d_VgsVth,0.5); PlusDeriv(&d_qd,&d_qd,&d_dummy); TimesDeriv(&d_qd,&d_qd, -WLCox); goto finished; } else if( vds >= VdsPinchoff ) { /* saturation region */ Args1 = 1.0 / (3*A); TimesDeriv(&d_Args1,&d_A,3.0); InvDeriv(&d_Args1,&d_Args1); qg = WLCox * (vgs - Vfb - Phi - VgsVth * Args1); MultDeriv(&d_qg,&d_VgsVth,&d_Args1); d_qg.value += Vfb + Phi - vgs; d_qg.d1_p -= 1.0; TimesDeriv(&d_qg,&d_qg,-WLCox); qb = WLCox * (Vfb + Phi - Vth0 + (1.0 - A) * VgsVth * Args1); TimesDeriv(&d_dummy,&d_A,-1.0); d_dummy.value += 1.0; MultDeriv(&d_qb,&d_VgsVth, &d_dummy); MultDeriv(&d_qb,&d_qb,&d_Args1); d_qb.value += Vfb + Phi; TimesDeriv(&d_dummy,&d_Vth0,-1.0); PlusDeriv(&d_qb,&d_qb,&d_dummy); TimesDeriv(&d_qb,&d_qb,WLCox); qd = 0.0; EqualDeriv(&d_qd,&d_zero); goto finished; } goto finished; } else { /*0/100 partitioning for drain/source chArges at the saturation region*/ co4v15 = 1./15.; Vth0 = Vfb + Phi + K1 * SqrtVpb; TimesDeriv(&d_Vth0,&d_SqrtVpb,K1); d_Vth0.value += Vfb + Phi; VgsVth = vgs - Vth0; TimesDeriv(&d_VgsVth,&d_Vth0,-1.0); d_VgsVth.value += vgs; d_VgsVth.d1_p += 1.0; Arg1 = A * vds; MultDeriv(&d_Arg1,&d_A,&d_r); Arg2 = VgsVth - 0.5 * Arg1; TimesDeriv(&d_Arg2,&d_Arg1,-0.5); PlusDeriv(&d_Arg2,&d_Arg2,&d_VgsVth); Arg3 = vds - Arg1; TimesDeriv(&d_Arg3,&d_Arg1,-1.0); d_Arg3.value = Arg3; d_Arg3.d1_r += 1.0; Arg5 = Arg1 * Arg1; MultDeriv(&d_Arg5,&d_Arg1,&d_Arg1); Ent = MAX(Arg2,1.0e-8); if (Arg2 < 1.0e-8) { EqualDeriv(&d_Ent,&d_zero); d_Ent.value = Ent; } else { EqualDeriv(&d_Ent,&d_Arg2); } Vcom = VgsVth * VgsVth / 6.0 - 1.25e-1 * Arg1 * VgsVth + 2.5e-2 * Arg5; TimesDeriv(&d_dummy,&d_VgsVth,1/6.0); TimesDeriv(&d_Vcom,&d_Arg1,-0.125); PlusDeriv(&d_Vcom,&d_Vcom,&d_dummy); MultDeriv(&d_Vcom,&d_Vcom,&d_VgsVth); TimesDeriv(&d_dummy,&d_Arg5,2.5e-2); PlusDeriv(&d_Vcom,&d_Vcom,&d_dummy); VdsPinchoff = VgsVth / A; if (VdsPinchoff < 0.0) { VdsPinchoff = 0.0; EqualDeriv(&d_VdsPinchoff,&d_zero); } else { DivDeriv(&d_VdsPinchoff,&d_VgsVth,&d_A); } Vgb = vgs - vbs ; EqualDeriv(&d_Vgb,&d_p); d_Vgb.value = Vgb; d_Vgb.d1_q = -1.0; Vgb_Vfb = Vgb - Vfb; EqualDeriv(&d_Vgb_Vfb,&d_Vgb); d_Vgb_Vfb.value = Vgb_Vfb; if( Vgb_Vfb < 0){ /* Accumulation Region */ qg = WLCox * Vgb_Vfb; TimesDeriv(&d_qg,&d_Vgb_Vfb,WLCox); qb = - qg; TimesDeriv(&d_qb,&d_qg,-1.0); qd = 0. ; EqualDeriv(&d_qd,&d_zero); goto finished; } else if ( vgs < Vth0 ){ /* Subthreshold Region */ qg = 0.5 * WLCox * K1 * K1 * (-1 + sqrt(1 + 4 * Vgb_Vfb / (K1 * K1))); TimesDeriv(&d_qg,&d_Vgb_Vfb,4/(K1*K1)); d_qg.value += 1.0; SqrtDeriv(&d_qg,&d_qg); d_qg.value -= 1.0; TimesDeriv(&d_qg,&d_qg,0.5 * WLCox * K1 * K1); qb = -qg; TimesDeriv(&d_qb,&d_qg,-1.0); qd = 0.; EqualDeriv(&d_qd,&d_zero); goto finished; } else if( vds < VdsPinchoff ){ /* triode region */ /* VgsVthSquare = VgsVth*VgsVth; MultDeriv(&d_VgsVthSquare,&d_VgsVth,&d_VgsVth); */ EntSquare = Ent * Ent; MultDeriv(&d_EntSquare,&d_Ent,&d_Ent); Argl1 = 1.2e1 * EntSquare; TimesDeriv(&d_Argl1,&d_EntSquare,12.0); Argl2 = 1.0 - A; TimesDeriv(&d_Argl2,&d_A,-1.0); d_Argl2.value += 1.0; /* Argl3 = Arg1 * vds; MultDeriv(&d_Argl3,&d_Arg1,&d_r); Argl4 = Vcom/Ent/EntSquare; MultDeriv(&d_Argl4,&d_Ent,&d_EntSquare); DivDeriv(&d_Argl4,&d_Vcom,&d_Argl4); */ if (Ent > 1.0e-8) { Argl5 = Arg1 / Ent; DivDeriv(&d_Argl5,&d_Arg1,&d_Ent); Argl6 = Vcom/EntSquare; DivDeriv(&d_Argl6,&d_Vcom,&d_EntSquare); } else { Argl5 = 2.0; EqualDeriv(&d_Argl5,&d_zero); d_Argl5.value = Argl5; Argl6 = 4.0 / 1.5e1; EqualDeriv(&d_Argl6,&d_zero); d_Argl6.value = Argl6; } Argl7 = Argl5 / 1.2e1; TimesDeriv(&d_Argl7,&d_Argl5,1/12.0); /* Argl8 = 6.0 * Ent; TimesDeriv(&d_Argl8,&d_Ent,6.0); Argl9 = 0.125 * Argl5 * Argl5; MultDeriv(&d_Argl9,&d_Argl5,&d_Argl5); TimesDeriv(&d_Argl9,&d_Argl9,0.125); */ qg = WLCox * (vgs - Vfb - Phi - 0.5 * vds + vds * Argl7); EqualDeriv(&d_qg,&d_Argl7); d_qg.value -= 0.5; MultDeriv(&d_qg,&d_qg,&d_r); d_qg.value += vgs - Vfb - Phi; d_qg.d1_p += 1.0; TimesDeriv(&d_qg,&d_qg,WLCox); qb = WLCox * ( - Vth0 + Vfb + Phi + 0.5 * Arg3 - Arg3 * Argl7); TimesDeriv(&d_qb,&d_Argl7,-1.0); d_qb.value += 0.5; MultDeriv(&d_qb,&d_qb,&d_Arg3); d_qb.value += Vfb + Phi; TimesDeriv(&d_dummy,&d_Vth0,-1.0); PlusDeriv(&d_qb,&d_qb,&d_dummy); TimesDeriv(&d_qb,&d_qb,WLCox); qd = - WLCox * (0.5 * (VgsVth - Arg1) + Arg1 * Argl6); MultDeriv(&d_dummy,&d_Arg1,&d_Argl6); TimesDeriv(&d_qd,&d_Arg1,-1.0); PlusDeriv(&d_qd,&d_qd,&d_VgsVth); TimesDeriv(&d_qd,&d_qd,0.5); PlusDeriv(&d_qd,&d_qd,&d_dummy); TimesDeriv(&d_qd,&d_qd,-WLCox); goto finished; } else if( vds >= VdsPinchoff ) { /* saturation region */ Args1 = 1.0 / (3*A); TimesDeriv(&d_Args1,&d_A,3.0); InvDeriv(&d_Args1,&d_Args1); qg = WLCox * (vgs - Vfb - Phi - VgsVth * Args1); MultDeriv(&d_qg,&d_VgsVth,&d_Args1); d_qg.value += Vfb + Phi - vgs; d_qg.d1_p -= 1.0; TimesDeriv(&d_qg,&d_qg,-WLCox); qb = WLCox * (Vfb + Phi - Vth0 + (1.0 - A) * VgsVth * Args1); TimesDeriv(&d_dummy,&d_A,-1.0); d_dummy.value += 1.0; MultDeriv(&d_qb,&d_VgsVth, &d_dummy); MultDeriv(&d_qb,&d_qb,&d_Args1); d_qb.value += Vfb + Phi; TimesDeriv(&d_dummy,&d_Vth0,-1.0); PlusDeriv(&d_qb,&d_qb,&d_dummy); TimesDeriv(&d_qb,&d_qb,WLCox); qd = -co4v15*WLCox*VgsVth; TimesDeriv(&d_qd,&d_VgsVth,-co4v15*WLCox); goto finished; } } } finished: /* returning Values to Calling Routine */ /* * the above has set up (DrCur) and (the node q's) * and (their derivatives upto third order wrt vgs, vbs, and * vds) */ /* * */ /* * charge storage elements * * bulk-drain and bulk-source depletion capacitances * czbd : zero bias drain junction capacitance * czbs : zero bias source junction capacitance * czbdsw:zero bias drain junction sidewall capacitance * czbssw:zero bias source junction sidewall capacitance */ czbd = model->B1unitAreaJctCap * DrainArea; czbs = model->B1unitAreaJctCap * SourceArea; czbdsw= model->B1unitLengthSidewallJctCap * DrainPerimeter; czbssw= model->B1unitLengthSidewallJctCap * SourcePerimeter; PhiB = model->B1bulkJctPotential; PhiBSW = model->B1sidewallJctPotential; MJ = model->B1bulkJctBotGradingCoeff; MJSW = model->B1bulkJctSideGradingCoeff; /* Source Bulk Junction */ if( vbs < 0 ) { arg = 1 - vbs / PhiB; argsw = 1 - vbs / PhiBSW; sarg = exp(-MJ*log(arg)); sargsw = exp(-MJSW*log(argsw)); /* *(ckt->CKTstate0 + here->B1qbs) = PhiB * czbs * (1-arg*sarg)/(1-MJ) + PhiBSW * czbssw * (1-argsw*sargsw)/(1-MJSW); */ capbs1 = czbs * sarg + czbssw * sargsw ; capbs2 = (czbs * MJ * sarg / (PhiB*arg) + czbssw * MJSW * sargsw /(PhiBSW*argsw))/2.0; capbs3 = (czbs * (MJ) * (MJ + 1.) * sarg /((PhiB*arg)*(PhiB*arg)) + czbssw * MJSW * (MJSW + 1.) * sargsw / (PhiBSW*argsw*PhiBSW*argsw))/6.0; } else { /* *(ckt->CKTstate0+here->B1qbs) = vbs*(czbs+czbssw)+ vbs*vbs*(czbs*MJ*0.5/PhiB + czbssw * MJSW * 0.5/PhiBSW); */ capbs1 = czbs + czbssw + vbs *(czbs*MJ/PhiB+ czbssw * MJSW / PhiBSW ); capbs2 = (czbs*MJ/PhiB+czbssw * MJSW / PhiBSW )*0.5; capbs3 = 0.0; } /* Drain Bulk Junction */ if( vbd < 0 ) { arg = 1 - vbd / PhiB; argsw = 1 - vbd / PhiBSW; sarg = exp(-MJ*log(arg)); sargsw = exp(-MJSW*log(argsw)); /* *(ckt->CKTstate0 + here->B1qbd) = PhiB * czbd * (1-arg*sarg)/(1-MJ) + PhiBSW * czbdsw * (1-argsw*sargsw)/(1-MJSW); */ capbd1 = czbd * sarg + czbdsw * sargsw ; capbd2 = (czbd * MJ * sarg / (PhiB*arg) + czbdsw * MJSW * sargsw /(PhiBSW*argsw))*0.5; capbd3 = (czbd * (MJ) * (MJ + 1.) * sarg /((PhiB*arg)*(PhiB*arg)) + czbdsw * MJSW * (MJSW + 1.) * sargsw / (PhiBSW*argsw*PhiBSW*argsw))/6.0; } else { /* *(ckt->CKTstate0+here->B1qbd) = vbd*(czbd+czbdsw)+ vbd*vbd*(czbd*MJ*0.5/PhiB + czbdsw * MJSW * 0.5/PhiBSW); */ capbd1 = czbd + czbdsw + vbd *(czbd*MJ/PhiB+ czbdsw * MJSW / PhiBSW ); capbd2 = 0.5*(czbs*MJ/PhiB+czbssw * MJSW / PhiBSW ); capbd3 = 0.0; } #if 0 qgd = GateDrainOverlapCap * (vgs - vds); qgs = GateSourceOverlapCap * vgs; qgb = GateBulkOverlapCap * (vgs -vbs); *qGatePointer = *qGatePointer + qgd + qgs + qgb; *qBulkPointer = *qBulkPointer - qgb; *qDrainPointer = *qDrainPointer - qgd; *qSourcePointer = -(*qGatePointer + *qBulkPointer + *qDrainPointer); #endif d_qg.d1_p += GateDrainOverlapCap + GateSourceOverlapCap + GateBulkOverlapCap; d_qg.d1_q += -GateBulkOverlapCap; d_qg.d1_r += -GateDrainOverlapCap; d_qb.d1_p += -GateBulkOverlapCap; d_qb.d1_q += GateBulkOverlapCap + capbs1 + capbd1; d_qb.d1_r += -capbd1; d_qd.d1_p += - GateDrainOverlapCap; d_qd.d1_q += -capbd1; d_qd.d1_r += GateDrainOverlapCap + capbd1; /* d[23]_qg_d[vlgbds23] += 0.0; d2_qb_dvgs2 += 0.0; d3_qb_dvgs3 += 0.0 d[23]_qb_dvgs[dvbds23] += 0.0 */ d_qb.d2_q2 += 2* ( capbd2 + capbs2); d_qb.d3_q3 += 6*(capbd3 + capbs3); d_qb.d2_qr += -2*capbd2; d_qb.d3_q2r += -capbd3*6; d_qb.d3_qr2 += capbd3*6; d_qb.d2_r2 += 2*capbd2; d_qb.d3_r3 += -6*capbd3; /* d[23]_qd_dp[dvbds23] += 0.0 */ d_qd.d2_q2 -= 2*capbd2; d_qd.d3_q3 -= 6*capbd3; d_qd.d2_r2 -= 2*capbd2; d_qd.d3_r3 -= -6*capbd3; d_qd.d2_qr -= -2*capbd2; d_qd.d3_q2r -= -6*capbd3; d_qd.d3_qr2 -= 6*capbd3; /* get all the coefficients and adjust for mode and type */ if (here->B1mode == 1) { /* normal mode - no source-drain interchange */ here->qg_x = d_qg.d1_p; here->qg_y = d_qg.d1_q; here->qg_z = d_qg.d1_r; here->qg_x2 = d_qg.d2_p2; here->qg_y2 = d_qg.d2_q2; here->qg_z2 = d_qg.d2_r2; here->qg_xy = d_qg.d2_pq; here->qg_yz = d_qg.d2_qr; here->qg_xz = d_qg.d2_pr; here->qg_x3 = d_qg.d3_p3; here->qg_y3 = d_qg.d3_q3; here->qg_z3 = d_qg.d3_r3; here->qg_x2z = d_qg.d3_p2r; here->qg_x2y = d_qg.d3_p2q; here->qg_y2z = d_qg.d3_q2r; here->qg_xy2 = d_qg.d3_pq2; here->qg_xz2 = d_qg.d3_pr2; here->qg_yz2 = d_qg.d3_qr2; here->qg_xyz = d_qg.d3_pqr; here->qb_x = d_qb.d1_p; here->qb_y = d_qb.d1_q; here->qb_z = d_qb.d1_r; here->qb_x2 = d_qb.d2_p2; here->qb_y2 = d_qb.d2_q2; here->qb_z2 = d_qb.d2_r2; here->qb_xy = d_qb.d2_pq; here->qb_yz = d_qb.d2_qr; here->qb_xz = d_qb.d2_pr; here->qb_x3 = d_qb.d3_p3; here->qb_y3 = d_qb.d3_q3; here->qb_z3 = d_qb.d3_r3; here->qb_x2z = d_qb.d3_p2r; here->qb_x2y = d_qb.d3_p2q; here->qb_y2z = d_qb.d3_q2r; here->qb_xy2 = d_qb.d3_pq2; here->qb_xz2 = d_qb.d3_pr2; here->qb_yz2 = d_qb.d3_qr2; here->qb_xyz = d_qb.d3_pqr; here->qd_x = d_qd.d1_p; here->qd_y = d_qd.d1_q; here->qd_z = d_qd.d1_r; here->qd_x2 = d_qd.d2_p2; here->qd_y2 = d_qd.d2_q2; here->qd_z2 = d_qd.d2_r2; here->qd_xy = d_qd.d2_pq; here->qd_yz = d_qd.d2_qr; here->qd_xz = d_qd.d2_pr; here->qd_x3 = d_qd.d3_p3; here->qd_y3 = d_qd.d3_q3; here->qd_z3 = d_qd.d3_r3; here->qd_x2z = d_qd.d3_p2r; here->qd_x2y = d_qd.d3_p2q; here->qd_y2z = d_qd.d3_q2r; here->qd_xy2 = d_qd.d3_pq2; here->qd_xz2 = d_qd.d3_pr2; here->qd_yz2 = d_qd.d3_qr2; here->qd_xyz = d_qd.d3_pqr; here->DrC_x = d_DrCur.d1_p; here->DrC_y = d_DrCur.d1_q; here->DrC_z = d_DrCur.d1_r; here->DrC_x2 = d_DrCur.d2_p2; here->DrC_y2 = d_DrCur.d2_q2; here->DrC_z2 = d_DrCur.d2_r2; here->DrC_xy = d_DrCur.d2_pq; here->DrC_yz = d_DrCur.d2_qr; here->DrC_xz = d_DrCur.d2_pr; here->DrC_x3 = d_DrCur.d3_p3; here->DrC_y3 = d_DrCur.d3_q3; here->DrC_z3 = d_DrCur.d3_r3; here->DrC_x2z = d_DrCur.d3_p2r; here->DrC_x2y = d_DrCur.d3_p2q; here->DrC_y2z = d_DrCur.d3_q2r; here->DrC_xy2 = d_DrCur.d3_pq2; here->DrC_xz2 = d_DrCur.d3_pr2; here->DrC_yz2 = d_DrCur.d3_qr2; here->DrC_xyz = d_DrCur.d3_pqr; here->gbs1 = lgbs1; here->gbs2 = lgbs2; here->gbs3 = lgbs3; here->gbd1 = lgbd1; here->gbd2 = lgbd2; here->gbd3 = lgbd3; } else { /* * inverse mode - source and drain interchanged * inversion equations for realqg and realqb are the * same; a minus is added for the * realDrCur equation; * realqd = -(realqb + realqg + fakeqd) */ here->qg_x = -(-d_qg.d1_p); here->qg_y = -(-d_qg.d1_q); here->qg_z = -(d_qg.d1_p + d_qg.d1_q + d_qg.d1_r); here->qg_x2 = -(-d_qg.d2_p2); here->qg_y2 = -(-d_qg.d2_q2); here->qg_z2 = -(-(d_qg.d2_p2 + d_qg.d2_q2 + d_qg.d2_r2 + 2*(d_qg.d2_pq + d_qg.d2_pr + d_qg.d2_qr))); here->qg_xy = -(-d_qg.d2_pq); here->qg_yz = -(d_qg.d2_pq + d_qg.d2_q2 + d_qg.d2_qr); here->qg_xz = -(d_qg.d2_p2 + d_qg.d2_pq + d_qg.d2_pr); here->qg_x3 = -(-d_qg.d3_p3); here->qg_y3 = -(-d_qg.d3_q3); here->qg_z3 = -(d_qg.d3_p3 + d_qg.d3_q3 + d_qg.d3_r3 + 3*(d_qg.d3_p2q + d_qg.d3_p2r + d_qg.d3_pq2 + d_qg.d3_q2r + d_qg.d3_pr2 + d_qg.d3_qr2) + 6*d_qg.d3_pqr ); here->qg_x2z = -(d_qg.d3_p3 + d_qg.d3_p2q + d_qg.d3_p2r); here->qg_x2y = -(-d_qg.d3_p2q); here->qg_y2z = -(d_qg.d3_pq2 + d_qg.d3_q3 + d_qg.d3_q2r); here->qg_xy2 = -(-d_qg.d3_pq2); here->qg_xz2 = -(-(d_qg.d3_p3 + 2*(d_qg.d3_p2q + d_qg.d3_p2r + d_qg.d3_pqr) + d_qg.d3_pq2 + d_qg.d3_pr2)); here->qg_yz2 = -(-(d_qg.d3_q3 + 2*(d_qg.d3_pq2 + d_qg.d3_q2r + d_qg.d3_pqr) + d_qg.d3_p2q + d_qg.d3_qr2)); here->qg_xyz = -(d_qg.d3_p2q + d_qg.d3_pq2 + d_qg.d3_pqr); here->qb_x = -(-d_qb.d1_p); here->qb_y = -(-d_qb.d1_q); here->qb_z = -(d_qb.d1_p + d_qb.d1_q + d_qb.d1_r); here->qb_x2 = -(-d_qb.d2_p2); here->qb_y2 = -(-d_qb.d2_q2); here->qb_z2 = -(-(d_qb.d2_p2 + d_qb.d2_q2 + d_qb.d2_r2 + 2*(d_qb.d2_pq + d_qb.d2_pr + d_qb.d2_qr))); here->qb_xy = -(-d_qb.d2_pq); here->qb_yz = -(d_qb.d2_pq + d_qb.d2_q2 + d_qb.d2_qr); here->qb_xz = -(d_qb.d2_p2 + d_qb.d2_pq + d_qb.d2_pr); here->qb_x3 = -(-d_qb.d3_p3); here->qb_y3 = -(-d_qb.d3_q3); here->qb_z3 = -(d_qb.d3_p3 + d_qb.d3_q3 + d_qb.d3_r3 + 3*(d_qb.d3_p2q + d_qb.d3_p2r + d_qb.d3_pq2 + d_qb.d3_q2r + d_qb.d3_pr2 + d_qb.d3_qr2) + 6*d_qb.d3_pqr ); here->qb_x2z = -(d_qb.d3_p3 + d_qb.d3_p2q + d_qb.d3_p2r); here->qb_x2y = -(-d_qb.d3_p2q); here->qb_y2z = -(d_qb.d3_pq2 + d_qb.d3_q3 + d_qb.d3_q2r); here->qb_xy2 = -(-d_qb.d3_pq2); here->qb_xz2 = -(-(d_qb.d3_p3 + 2*(d_qb.d3_p2q + d_qb.d3_p2r + d_qb.d3_pqr) + d_qb.d3_pq2 + d_qb.d3_pr2)); here->qb_yz2 = -(-(d_qb.d3_q3 + 2*(d_qb.d3_pq2 + d_qb.d3_q2r + d_qb.d3_pqr) + d_qb.d3_p2q + d_qb.d3_qr2)); here->qb_xyz = -(d_qb.d3_p2q + d_qb.d3_pq2 + d_qb.d3_pqr); here->qd_x= -here->qg_x - here->qb_x +(-d_qd.d1_p); here->qd_y= -here->qg_y - here->qb_y +(-d_qd.d1_q); here->qd_z= -here->qg_z - here->qb_z +(d_qd.d1_p + d_qd.d1_q + d_qd.d1_r); here->qd_x2 = -here->qg_x2 - here->qb_x2 +(-d_qd.d2_p2); here->qd_y2 = -here->qg_y2 - here->qb_y2 +(-d_qd.d2_q2); here->qd_z2 = -here->qg_z2 - here->qb_z2 +(-(d_qd.d2_p2 + d_qd.d2_q2 + d_qd.d2_r2 + 2*(d_qd.d2_pq + d_qd.d2_pr + d_qd.d2_qr))); here->qd_xy = -here->qg_xy - here->qb_xy +(-d_qd.d2_pq); here->qd_yz = -here->qg_yz - here->qb_yz +(d_qd.d2_pq + d_qd.d2_q2 + d_qd.d2_qr); here->qd_xz = -here->qg_xz - here->qb_xz +(d_qd.d2_p2 + d_qd.d2_pq + d_qd.d2_pr); here->qd_x3 = -here->qg_x3 - here->qb_x3 +(-d_qd.d3_p3); here->qd_y3 = -here->qg_y3 - here->qb_y3 +(-d_qd.d3_q3); here->qd_z3 = -here->qg_z3 - here->qb_z3 +(d_qd.d3_p3 + d_qd.d3_q3 + d_qd.d3_r3 + 3*(d_qd.d3_p2q + d_qd.d3_p2r + d_qd.d3_pq2 + d_qd.d3_q2r + d_qd.d3_pr2 + d_qd.d3_qr2) + 6*d_qd.d3_pqr ); here->qd_x2z = -here->qg_x2z - here->qb_x2z +(d_qd.d3_p3 + d_qd.d3_p2q + d_qd.d3_p2r); here->qd_x2y = -here->qg_x2y - here->qb_x2y +(-d_qd.d3_p2q); here->qd_y2z = -here->qg_y2z - here->qb_y2z +(d_qd.d3_pq2 + d_qd.d3_q3 + d_qd.d3_q2r); here->qd_xy2 = -here->qg_xy2 - here->qb_xy2 +(-d_qd.d3_pq2); here->qd_xz2 = -here->qg_xz2 - here->qb_xz2 +(-(d_qd.d3_p3 + 2*(d_qd.d3_p2q + d_qd.d3_p2r + d_qd.d3_pqr) + d_qd.d3_pq2 + d_qd.d3_pr2)); here->qd_yz2 = -here->qg_yz2 - here->qb_yz2 +(-(d_qd.d3_q3 + 2*(d_qd.d3_pq2 + d_qd.d3_q2r + d_qd.d3_pqr) + d_qd.d3_p2q + d_qd.d3_qr2)); here->qd_xyz = -here->qg_xyz - here->qb_xyz +(d_qd.d3_p2q + d_qd.d3_pq2 + d_qd.d3_pqr); here->DrC_x = -d_DrCur.d1_p; here->DrC_y = -d_DrCur.d1_q; here->DrC_z = d_DrCur.d1_p + d_DrCur.d1_q + d_DrCur.d1_r; here->DrC_x2 = -d_DrCur.d2_p2; here->DrC_y2 = -d_DrCur.d2_q2; here->DrC_z2 = -(d_DrCur.d2_p2 + d_DrCur.d2_q2 + d_DrCur.d2_r2 + 2*(d_DrCur.d2_pq + d_DrCur.d2_pr + d_DrCur.d2_qr)); here->DrC_xy = -d_DrCur.d2_pq; here->DrC_yz = d_DrCur.d2_pq + d_DrCur.d2_q2 + d_DrCur.d2_qr; here->DrC_xz = d_DrCur.d2_p2 + d_DrCur.d2_pq + d_DrCur.d2_pr; here->DrC_x3 = -d_DrCur.d3_p3; here->DrC_y3 = -d_DrCur.d3_q3; here->DrC_z3 = d_DrCur.d3_p3 + d_DrCur.d3_q3 + d_DrCur.d3_r3 + 3*(d_DrCur.d3_p2q + d_DrCur.d3_p2r + d_DrCur.d3_pq2 + d_DrCur.d3_q2r + d_DrCur.d3_pr2 + d_DrCur.d3_qr2) + 6*d_DrCur.d3_pqr ; here->DrC_x2z = d_DrCur.d3_p3 + d_DrCur.d3_p2q + d_DrCur.d3_p2r; here->DrC_x2y = -d_DrCur.d3_p2q; here->DrC_y2z = d_DrCur.d3_pq2 + d_DrCur.d3_q3 + d_DrCur.d3_q2r; here->DrC_xy2 = -d_DrCur.d3_pq2; here->DrC_xz2 = -(d_DrCur.d3_p3 + 2*(d_DrCur.d3_p2q + d_DrCur.d3_p2r + d_DrCur.d3_pqr) + d_DrCur.d3_pq2 + d_DrCur.d3_pr2); here->DrC_yz2 = -(d_DrCur.d3_q3 + 2*(d_DrCur.d3_pq2 + d_DrCur.d3_q2r + d_DrCur.d3_pqr) + d_DrCur.d3_p2q + d_DrCur.d3_qr2); here->DrC_xyz = d_DrCur.d3_p2q + d_DrCur.d3_pq2 + d_DrCur.d3_pqr; here->gbs1 = lgbd1; here->gbs2 = lgbd2; here->gbs3 = lgbd3; here->gbd1 = lgbs1; here->gbd2 = lgbs2; here->gbd3 = lgbs3; } /* now to adjust for type and multiply by factors to convert to Taylor coeffs. */ here->qg_x2 = 0.5*model->B1type*here->qg_x2; here->qg_y2 = 0.5*model->B1type*here->qg_y2; here->qg_z2 = 0.5*model->B1type*here->qg_z2; here->qg_xy = model->B1type*here->qg_xy; here->qg_yz = model->B1type*here->qg_yz; here->qg_xz = model->B1type*here->qg_xz; here->qg_x3 = here->qg_x3/6.; here->qg_y3 = here->qg_y3/6.; here->qg_z3 = here->qg_z3/6.; here->qg_x2z = 0.5*here->qg_x2z; here->qg_x2y = 0.5*here->qg_x2y; here->qg_y2z = 0.5*here->qg_y2z; here->qg_xy2 = 0.5*here->qg_xy2; here->qg_xz2 = 0.5*here->qg_xz2; here->qg_yz2 = 0.5*here->qg_yz2; here->qb_x2 = 0.5*model->B1type*here->qb_x2; here->qb_y2 = 0.5*model->B1type*here->qb_y2; here->qb_z2 = 0.5*model->B1type*here->qb_z2; here->qb_xy = model->B1type*here->qb_xy; here->qb_yz = model->B1type*here->qb_yz; here->qb_xz = model->B1type*here->qb_xz; here->qb_x3 = here->qb_x3/6.; here->qb_y3 = here->qb_y3/6.; here->qb_z3 = here->qb_z3/6.; here->qb_x2z = 0.5*here->qb_x2z; here->qb_x2y = 0.5*here->qb_x2y; here->qb_y2z = 0.5*here->qb_y2z; here->qb_xy2 = 0.5*here->qb_xy2; here->qb_xz2 = 0.5*here->qb_xz2; here->qb_yz2 = 0.5*here->qb_yz2; here->qd_x2 = 0.5*model->B1type*here->qd_x2; here->qd_y2 = 0.5*model->B1type*here->qd_y2; here->qd_z2 = 0.5*model->B1type*here->qd_z2; here->qd_xy = model->B1type*here->qd_xy; here->qd_yz = model->B1type*here->qd_yz; here->qd_xz = model->B1type*here->qd_xz; here->qd_x3 = here->qd_x3/6.; here->qd_y3 = here->qd_y3/6.; here->qd_z3 = here->qd_z3/6.; here->qd_x2z = 0.5*here->qd_x2z; here->qd_x2y = 0.5*here->qd_x2y; here->qd_y2z = 0.5*here->qd_y2z; here->qd_xy2 = 0.5*here->qd_xy2; here->qd_xz2 = 0.5*here->qd_xz2; here->qd_yz2 = 0.5*here->qd_yz2; here->DrC_x2 = 0.5*model->B1type*here->DrC_x2; here->DrC_y2 = 0.5*model->B1type*here->DrC_y2; here->DrC_z2 = 0.5*model->B1type*here->DrC_z2; here->DrC_xy = model->B1type*here->DrC_xy; here->DrC_yz = model->B1type*here->DrC_yz; here->DrC_xz = model->B1type*here->DrC_xz; here->DrC_x3 = here->DrC_x3/6.; here->DrC_y3 = here->DrC_y3/6.; here->DrC_z3 = here->DrC_z3/6.; here->DrC_x2z = 0.5*here->DrC_x2z; here->DrC_x2y = 0.5*here->DrC_x2y; here->DrC_y2z = 0.5*here->DrC_y2z; here->DrC_xy2 = 0.5*here->DrC_xy2; here->DrC_xz2 = 0.5*here->DrC_xz2; here->DrC_yz2 = 0.5*here->DrC_yz2; here->gbs2 = model->B1type*here->gbs2; here->gbd2 = model->B1type*here->gbd2; } /* End of Mosfet Instance */ } /* End of Model Instance */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim1/b1acld.c0000644000175000017500000001163113546075722021472 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Hong J. Park, Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim1def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B1acLoad(GENmodel *inModel, CKTcircuit *ckt) { B1model *model = (B1model*)inModel; B1instance *here; int xnrm; int xrev; double gdpr; double gspr; double gm; double gds; double gmbs; double gbd; double gbs; double capbd; double capbs; double xcggb; double xcgdb; double xcgsb; double xcbgb; double xcbdb; double xcbsb; double xcddb; double xcssb; double xcdgb; double xcsgb; double xcdsb; double xcsdb; double cggb; double cgdb; double cgsb; double cbgb; double cbdb; double cbsb; double cddb; double cdgb; double cdsb; double omega; /* angular fequency of the signal */ double m; /* parallel multiplier */ omega = ckt->CKTomega; for( ; model != NULL; model = B1nextModel(model)) { for(here = B1instances(model); here!= NULL; here = B1nextInstance(here)) { if (here->B1mode >= 0) { xnrm=1; xrev=0; } else { xnrm=0; xrev=1; } gdpr=here->B1drainConductance; gspr=here->B1sourceConductance; gm= *(ckt->CKTstate0 + here->B1gm); gds= *(ckt->CKTstate0 + here->B1gds); gmbs= *(ckt->CKTstate0 + here->B1gmbs); gbd= *(ckt->CKTstate0 + here->B1gbd); gbs= *(ckt->CKTstate0 + here->B1gbs); capbd= *(ckt->CKTstate0 + here->B1capbd); capbs= *(ckt->CKTstate0 + here->B1capbs); /* * charge oriented model parameters */ cggb = *(ckt->CKTstate0 + here->B1cggb); cgsb = *(ckt->CKTstate0 + here->B1cgsb); cgdb = *(ckt->CKTstate0 + here->B1cgdb); cbgb = *(ckt->CKTstate0 + here->B1cbgb); cbsb = *(ckt->CKTstate0 + here->B1cbsb); cbdb = *(ckt->CKTstate0 + here->B1cbdb); cdgb = *(ckt->CKTstate0 + here->B1cdgb); cdsb = *(ckt->CKTstate0 + here->B1cdsb); cddb = *(ckt->CKTstate0 + here->B1cddb); xcdgb = (cdgb - here->B1GDoverlapCap) * omega; xcddb = (cddb + capbd + here->B1GDoverlapCap) * omega; xcdsb = cdsb * omega; xcsgb = -(cggb + cbgb + cdgb + here->B1GSoverlapCap ) * omega; xcsdb = -(cgdb + cbdb + cddb) * omega; xcssb = (capbs + here->B1GSoverlapCap - (cgsb+cbsb+cdsb)) * omega; xcggb = (cggb + here->B1GDoverlapCap + here->B1GSoverlapCap + here->B1GBoverlapCap) * omega; xcgdb = (cgdb - here->B1GDoverlapCap ) * omega; xcgsb = (cgsb - here->B1GSoverlapCap) * omega; xcbgb = (cbgb - here->B1GBoverlapCap) * omega; xcbdb = (cbdb - capbd ) * omega; xcbsb = (cbsb - capbs ) * omega; m = here->B1m; *(here->B1GgPtr +1) += m * xcggb; *(here->B1BbPtr +1) += m * (-xcbgb-xcbdb-xcbsb); *(here->B1DPdpPtr +1) += m * xcddb; *(here->B1SPspPtr +1) += m * xcssb; *(here->B1GbPtr +1) += m * (-xcggb-xcgdb-xcgsb); *(here->B1GdpPtr +1) += m * xcgdb; *(here->B1GspPtr +1) += m * xcgsb; *(here->B1BgPtr +1) += m * xcbgb; *(here->B1BdpPtr +1) += m * xcbdb; *(here->B1BspPtr +1) += m * xcbsb; *(here->B1DPgPtr +1) += m * xcdgb; *(here->B1DPbPtr +1) += m * (-xcdgb-xcddb-xcdsb); *(here->B1DPspPtr +1) += m * xcdsb; *(here->B1SPgPtr +1) += m * xcsgb; *(here->B1SPbPtr +1) += m * (-xcsgb-xcsdb-xcssb); *(here->B1SPdpPtr +1) += m * xcsdb; *(here->B1DdPtr) += m * gdpr; *(here->B1SsPtr) += m * gspr; *(here->B1BbPtr) += m * (gbd+gbs); *(here->B1DPdpPtr) += m * (gdpr+gds+gbd+xrev*(gm+gmbs)); *(here->B1SPspPtr) += m * (gspr+gds+gbs+xnrm*(gm+gmbs)); *(here->B1DdpPtr) -= m * gdpr; *(here->B1SspPtr) -= m * gspr; *(here->B1BdpPtr) -= m * gbd; *(here->B1BspPtr) -= m * gbs; *(here->B1DPdPtr) -= m * gdpr; *(here->B1DPgPtr) += m * (xnrm-xrev)*gm; *(here->B1DPbPtr) += m * (-gbd+(xnrm-xrev)*gmbs); *(here->B1DPspPtr) += m * (-gds-xnrm*(gm+gmbs)); *(here->B1SPgPtr) += m * (-(xnrm-xrev)*gm); *(here->B1SPsPtr) -= m * gspr; *(here->B1SPbPtr) += m * (-gbs-(xnrm-xrev)*gmbs); *(here->B1SPdpPtr) += m * (-gds-xrev*(gm+gmbs)); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vcvs/0000755000175000017500000000000013546075722020144 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/vcvs/vcvsitf.h0000644000175000017500000000026013546075722021777 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_VCVS #define DEV_VCVS SPICEdev *get_vcvs_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/vcvs/vcvsdefs.h0000644000175000017500000000621613546075722022145 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #ifndef VCVS #define VCVS #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" /* * structures to describe Voltage Controlled Voltage Sources */ /* information to describe a single instance */ typedef struct sVCVSinstance { struct GENinstance gen; #define VCVSmodPtr(inst) ((struct sVCVSmodel *)((inst)->gen.GENmodPtr)) #define VCVSnextInstance(inst) ((struct sVCVSinstance *)((inst)->gen.GENnextInstance)) #define VCVSname gen.GENname #define VCVSstates gen.GENstate const int VCVSposNode; /* number of positive node of source */ const int VCVSnegNode; /* number of negative node of source */ const int VCVScontPosNode; /* number of positive node of controlling source */ const int VCVScontNegNode; /* number of negative node of controlling source */ int VCVSbranch; /* equation number of branch equation added for v source */ double VCVSinitCond; /* initial condition (of controlling source) */ double VCVScoeff; /* coefficient */ double *VCVSposIbrPtr; /* pointer to sparse matrix element at * (positive node, branch equation) */ double *VCVSnegIbrPtr; /* pointer to sparse matrix element at * (negative node, branch equation) */ double *VCVSibrPosPtr; /* pointer to sparse matrix element at * (branch equation, positive node) */ double *VCVSibrNegPtr; /* pointer to sparse matrix element at * (branch equation, negative node) */ double *VCVSibrContPosPtr; /* pointer to sparse matrix element at *(branch equation, control positive node)*/ double *VCVSibrContNegPtr; /* pointer to sparse matrix element at *(branch equation, control negative node)*/ unsigned VCVScoeffGiven :1 ;/* flag to indicate function coeffs given */ int VCVSsenParmNo; /* parameter # for sensitivity use; set equal to 0 if not a design parameter*/ } VCVSinstance ; #define VCVSvOld VCVSstates #define VCVScontVOld VCVSstates + 1 /* per model data */ typedef struct sVCVSmodel { /* model structure for a source */ struct GENmodel gen; #define VCVSmodType gen.GENmodType #define VCVSnextModel(inst) ((struct sVCVSmodel *)((inst)->gen.GENnextModel)) #define VCVSinstances(inst) ((VCVSinstance *)((inst)->gen.GENinstances)) #define VCVSmodName gen.GENmodName } VCVSmodel; /* device parameters */ enum { VCVS_GAIN = 1, VCVS_POS_NODE, VCVS_NEG_NODE, VCVS_CONT_P_NODE, VCVS_CONT_N_NODE, VCVS_BR, VCVS_IC, VCVS_CONT_V_OLD, VCVS_GAIN_SENS, VCVS_CURRENT, VCVS_POWER, VCVS_VOLTS, }; /* model parameters */ /* device questions */ enum { VCVS_QUEST_SENS_REAL = 201, VCVS_QUEST_SENS_IMAG, VCVS_QUEST_SENS_MAG, VCVS_QUEST_SENS_PH, VCVS_QUEST_SENS_CPLX, VCVS_QUEST_SENS_DC, }; /* model questions */ #include "vcvsext.h" #endif /*VCVS*/ tmpk8ny_4pz/src/spicelib/devices/vcvs/Makefile.am0000644000175000017500000000067313546075722022206 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libvcvs.la libvcvs_la_SOURCES = \ vcvs.c \ vcvsask.c \ vcvsdefs.h \ vcvsext.h \ vcvsfbr.c \ vcvsinit.c \ vcvsinit.h \ vcvsitf.h \ vcvsload.c \ vcvspar.c \ vcvspzld.c \ vcvssacl.c \ vcvsset.c \ vcvssld.c \ vcvssprt.c \ vcvssset.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/vcvs/vcvspzld.c0000644000175000017500000000232313546075722022163 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "vcvsdefs.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int VCVSpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) /* actually load the current voltage value into the * sparse matrix previously provided */ { VCVSmodel *model = (VCVSmodel *)inModel; VCVSinstance *here; NG_IGNORE(s); NG_IGNORE(ckt); /* loop through all the voltage source models */ for( ; model != NULL; model = VCVSnextModel(model)) { /* loop through all the instances of the model */ for (here = VCVSinstances(model); here != NULL ; here=VCVSnextInstance(here)) { *(here->VCVSposIbrPtr) += 1.0 ; *(here->VCVSnegIbrPtr) -= 1.0 ; *(here->VCVSibrPosPtr) += 1.0 ; *(here->VCVSibrNegPtr) -= 1.0 ; *(here->VCVSibrContPosPtr) -= here->VCVScoeff ; *(here->VCVSibrContNegPtr) += here->VCVScoeff ; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vcvs/vcvsinit.h0000644000175000017500000000030213546075722022155 0ustar carstencarsten#ifndef _VCVSINIT_H #define _VCVSINIT_H extern IFparm VCVSpTable[ ]; extern char *VCVSnames[ ]; extern int VCVSpTSize; extern int VCVSnSize; extern int VCVSiSize; extern int VCVSmSize; #endif tmpk8ny_4pz/src/spicelib/devices/vcvs/vcvsext.h0000644000175000017500000000130213546075722022013 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ extern int VCVSask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int VCVSfindBr(CKTcircuit*,GENmodel*,IFuid); extern int VCVSload(GENmodel*,CKTcircuit*); extern int VCVSparam(int,IFvalue*,GENinstance*,IFvalue*); extern int VCVSpzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int VCVSsAcLoad(GENmodel*,CKTcircuit*); extern int VCVSsLoad(GENmodel*,CKTcircuit*); extern int VCVSsSetup(SENstruct*,GENmodel*); extern void VCVSsPrint(GENmodel*,CKTcircuit*); extern int VCVSsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int VCVSunsetup(GENmodel*,CKTcircuit*); tmpk8ny_4pz/src/spicelib/devices/vcvs/vcvsask.c0000644000175000017500000001205113546075722021767 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ /* * This routine gives access to the internal device parameters * of Voltage Controlled Voltage Source */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "vcvsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int VCVSask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { VCVSinstance *here = (VCVSinstance *)inst; double vr; double vi; double sr; double si; double vm; static char *msg = "Current and power not available for ac analysis"; switch(which) { case VCVS_POS_NODE: value->iValue = here->VCVSposNode; return (OK); case VCVS_NEG_NODE: value->iValue = here->VCVSnegNode; return (OK); case VCVS_CONT_P_NODE: value->iValue = here->VCVScontPosNode; return (OK); case VCVS_CONT_N_NODE: value->iValue = here->VCVScontNegNode; return (OK); case VCVS_IC: value->rValue = here->VCVSinitCond; return (OK); case VCVS_GAIN: value->rValue = here->VCVScoeff; return (OK); case VCVS_CONT_V_OLD: value->rValue = *(ckt->CKTstate0 + here->VCVScontVOld); return (OK); case VCVS_BR: value->iValue = here->VCVSbranch; return (OK); case VCVS_QUEST_SENS_DC: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_Sap[select->iValue + 1]+ here->VCVSsenParmNo); } return(OK); case VCVS_QUEST_SENS_REAL: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->VCVSsenParmNo); } return(OK); case VCVS_QUEST_SENS_IMAG: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->VCVSsenParmNo); } return(OK); case VCVS_QUEST_SENS_MAG: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = sqrt(vr*vr + vi*vi); if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->VCVSsenParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->VCVSsenParmNo); value->rValue = (vr * sr + vi * si)/vm; } return(OK); case VCVS_QUEST_SENS_PH: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = vr*vr + vi*vi; if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->VCVSsenParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->VCVSsenParmNo); value->rValue = (vr * si - vi * sr)/vm; } return(OK); case VCVS_QUEST_SENS_CPLX: if(ckt->CKTsenInfo){ value->cValue.real= *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->VCVSsenParmNo); value->cValue.imag= *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->VCVSsenParmNo); } return(OK); case VCVS_CURRENT : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "VCVSask"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = *(ckt->CKTrhsOld + here->VCVSbranch); } return(OK); case VCVS_VOLTS : value->rValue = (*(ckt->CKTrhsOld + here->VCVSposNode) - *(ckt->CKTrhsOld + here->VCVSnegNode)); return(OK); case VCVS_POWER : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "VCVSask"; strcpy(errMsg,msg); return(E_ASKPOWER); } else { value->rValue = *(ckt->CKTrhsOld + here->VCVSbranch) * (*(ckt->CKTrhsOld + here->VCVSposNode) - *(ckt->CKTrhsOld + here->VCVSnegNode)); } return(OK); default: return (E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/vcvs/vcvsset.c0000644000175000017500000000457313546075722022016 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* load the voltage source structure with those pointers needed later * for fast matrix loading */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "vcvsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int VCVSsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { VCVSmodel *model = (VCVSmodel *)inModel; VCVSinstance *here; int error; CKTnode *tmp; NG_IGNORE(states); /* loop through all the voltage source models */ for( ; model != NULL; model = VCVSnextModel(model)) { /* loop through all the instances of the model */ for (here = VCVSinstances(model); here != NULL ; here=VCVSnextInstance(here)) { if(here->VCVSposNode == here->VCVSnegNode) { SPfrontEnd->IFerrorf (ERR_FATAL, "instance %s is a shorted VCVS", here->VCVSname); return(E_UNSUPP); } if(here->VCVSbranch == 0) { error = CKTmkCur(ckt,&tmp,here->VCVSname,"branch"); if(error) return(error); here->VCVSbranch = tmp->number; } /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(VCVSposIbrPtr, VCVSposNode, VCVSbranch); TSTALLOC(VCVSnegIbrPtr, VCVSnegNode, VCVSbranch); TSTALLOC(VCVSibrPosPtr, VCVSbranch, VCVSposNode); TSTALLOC(VCVSibrNegPtr, VCVSbranch, VCVSnegNode); TSTALLOC(VCVSibrContPosPtr, VCVSbranch, VCVScontPosNode); TSTALLOC(VCVSibrContNegPtr, VCVSbranch, VCVScontNegNode); } } return(OK); } int VCVSunsetup(GENmodel *inModel, CKTcircuit *ckt) { VCVSmodel *model; VCVSinstance *here; for (model = (VCVSmodel *)inModel; model != NULL; model = VCVSnextModel(model)) { for (here = VCVSinstances(model); here != NULL; here=VCVSnextInstance(here)) { if (here->VCVSbranch > 0) CKTdltNNum(ckt, here->VCVSbranch); here->VCVSbranch = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/vcvs/vcvsinit.c0000644000175000017500000000314013546075722022153 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "vcvsitf.h" #include "vcvsext.h" #include "vcvsinit.h" SPICEdev VCVSinfo = { .DEVpublic = { .name = "VCVS", .description = "Voltage controlled voltage source", .terms = &VCVSnSize, .numNames = &VCVSnSize, .termNames = VCVSnames, .numInstanceParms = &VCVSpTSize, .instanceParms = VCVSpTable, .numModelParms = NULL, .modelParms = NULL, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = VCVSparam, .DEVmodParam = NULL, .DEVload = VCVSload, .DEVsetup = VCVSsetup, .DEVunsetup = VCVSunsetup, .DEVpzSetup = VCVSsetup, .DEVtemperature = NULL, .DEVtrunc = NULL, .DEVfindBranch = VCVSfindBr, .DEVacLoad = VCVSload, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = NULL, .DEVask = VCVSask, .DEVmodAsk = NULL, .DEVpzLoad = VCVSpzLoad, .DEVconvTest = NULL, .DEVsenSetup = VCVSsSetup, .DEVsenLoad = VCVSsLoad, .DEVsenUpdate = NULL, .DEVsenAcLoad = VCVSsAcLoad, .DEVsenPrint = VCVSsPrint, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &VCVSiSize, .DEVmodSize = &VCVSmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_vcvs_info(void) { return &VCVSinfo; } tmpk8ny_4pz/src/spicelib/devices/vcvs/vcvsfbr.c0000644000175000017500000000175213546075722021770 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vcvsdefs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VCVSfindBr(CKTcircuit *ckt, GENmodel *inModel, IFuid name) { VCVSmodel *model = (VCVSmodel *)inModel; VCVSinstance *here; int error; CKTnode *tmp; for( ; model != NULL; model = VCVSnextModel(model)) { for (here = VCVSinstances(model); here != NULL; here = VCVSnextInstance(here)) { if(here->VCVSname == name) { if(here->VCVSbranch == 0) { error = CKTmkCur(ckt,&tmp,here->VCVSname,"branch"); if(error) return(error); here->VCVSbranch = tmp->number; } return(here->VCVSbranch); } } } return(0); } tmpk8ny_4pz/src/spicelib/devices/vcvs/vcvs.c0000644000175000017500000000331413546075722021272 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/devdefs.h" #include "vcvsdefs.h" #include "ngspice/suffix.h" IFparm VCVSpTable[] = { /* parameters */ IOPU("gain", VCVS_GAIN, IF_REAL,"Voltage gain"), IP("sens_gain",VCVS_GAIN_SENS,IF_FLAG,"flag to request sensitivity WRT gain"), OPU("pos_node", VCVS_POS_NODE, IF_INTEGER, "Positive node of source"), OPU("neg_node", VCVS_NEG_NODE, IF_INTEGER, "Negative node of source"), OPU("cont_p_node",VCVS_CONT_P_NODE,IF_INTEGER, "Positive node of contr. source"), OPU("cont_n_node",VCVS_CONT_N_NODE,IF_INTEGER, "Negative node of contr. source"), IP("ic", VCVS_IC, IF_REAL, "Initial condition of controlling source"), OP("i", VCVS_CURRENT, IF_REAL, "Output current"), OP("v", VCVS_VOLTS, IF_REAL, "Output voltage"), OP("p", VCVS_POWER, IF_REAL, "Power"), OPU("sens_dc", VCVS_QUEST_SENS_DC, IF_REAL, "dc sensitivity "), OPU("sens_real", VCVS_QUEST_SENS_REAL,IF_REAL, "real part of ac sensitivity"), OPU("sens_imag", VCVS_QUEST_SENS_IMAG,IF_REAL, "imag part of ac sensitivity"), OPU("sens_mag", VCVS_QUEST_SENS_MAG, IF_REAL, "sensitivity of ac magnitude"), OPU("sens_ph", VCVS_QUEST_SENS_PH, IF_REAL, "sensitivity of ac phase"), OPU("sens_cplx", VCVS_QUEST_SENS_CPLX, IF_COMPLEX, "ac sensitivity") }; char *VCVSnames[] = { "V+", "V-", "VC+", "VC-" }; int VCVSnSize = NUMELEMS(VCVSnames); int VCVSpTSize = NUMELEMS(VCVSpTable); int VCVSmPTSize = 0; int VCVSiSize = sizeof(VCVSinstance); int VCVSmSize = sizeof(VCVSmodel); tmpk8ny_4pz/src/spicelib/devices/vcvs/vcvssld.c0000644000175000017500000000215113546075722021773 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* actually load the current sensitivity information into the * array previously provided */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vcvsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VCVSsLoad(GENmodel *inModel, CKTcircuit *ckt) { VCVSmodel *model = (VCVSmodel *)inModel; VCVSinstance *here; double vc; /* loop through all the voltage source models */ for( ; model != NULL; model = VCVSnextModel(model)) { /* loop through all the instances of the model */ for (here = VCVSinstances(model); here != NULL ; here=VCVSnextInstance(here)) { if(here->VCVSsenParmNo){ vc = *(ckt->CKTrhsOld + here->VCVScontPosNode) - *(ckt->CKTrhsOld + here->VCVScontNegNode); *(ckt->CKTsenInfo->SEN_RHS[here->VCVSbranch] + here->VCVSsenParmNo) += vc; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vcvs/vcvspar.c0000644000175000017500000000137213546075722021777 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "vcvsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int VCVSparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { VCVSinstance *here = (VCVSinstance *)inst; NG_IGNORE(select); switch(param) { case VCVS_GAIN: here->VCVScoeff = value->rValue; here->VCVScoeffGiven = TRUE; break; case VCVS_GAIN_SENS: here->VCVSsenParmNo = value->iValue; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vcvs/vcvsload.c0000644000175000017500000000222413546075722022131 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vcvsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int VCVSload(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current voltage value into the * sparse matrix previously provided */ { VCVSmodel *model = (VCVSmodel *)inModel; VCVSinstance *here; NG_IGNORE(ckt); /* loop through all the voltage source models */ for( ; model != NULL; model = VCVSnextModel(model)) { /* loop through all the instances of the model */ for (here = VCVSinstances(model); here != NULL ; here=VCVSnextInstance(here)) { *(here->VCVSposIbrPtr) += 1.0 ; *(here->VCVSnegIbrPtr) -= 1.0 ; *(here->VCVSibrPosPtr) += 1.0 ; *(here->VCVSibrNegPtr) -= 1.0 ; *(here->VCVSibrContPosPtr) -= here->VCVScoeff ; *(here->VCVSibrContNegPtr) += here->VCVScoeff ; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vcvs/vcvssacl.c0000644000175000017500000000256613546075722022145 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* actually load the current ac sensitivity information into the * array previously provided */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vcvsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VCVSsAcLoad(GENmodel *inModel, CKTcircuit *ckt) { VCVSmodel *model = (VCVSmodel *)inModel; VCVSinstance *here; double vc; double ivc; /* loop through all the voltage source models */ for( ; model != NULL; model = VCVSnextModel(model)) { /* loop through all the instances of the model */ for (here = VCVSinstances(model); here != NULL ; here=VCVSnextInstance(here)) { if(here->VCVSsenParmNo){ vc = *(ckt->CKTrhsOld + here->VCVScontPosNode) - *(ckt->CKTrhsOld + here->VCVScontNegNode); ivc = *(ckt->CKTirhsOld + here->VCVScontPosNode) - *(ckt->CKTirhsOld + here->VCVScontNegNode); *(ckt->CKTsenInfo->SEN_RHS[here->VCVSbranch] + here->VCVSsenParmNo) += vc; *(ckt->CKTsenInfo->SEN_iRHS[here->VCVSbranch] + here->VCVSsenParmNo) += ivc; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vcvs/vcvssprt.c0000644000175000017500000000304313546075722022202 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* Pretty print the sensitivity info for * all the VCVS in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vcvsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" void VCVSsPrint(GENmodel *inModel, CKTcircuit *ckt) { VCVSmodel *model = (VCVSmodel *)inModel; VCVSinstance *here; printf("VOLTAGE CONTROLLED VOLTAGE SOURCES-----------------\n"); /* loop through all the voltage source models */ for( ; model != NULL; model = VCVSnextModel(model)) { printf("Model name:%s\n",model->VCVSmodName); /* loop through all the instances of the model */ for (here = VCVSinstances(model); here != NULL ; here=VCVSnextInstance(here)) { printf(" Instance name:%s\n",here->VCVSname); printf(" Positive, negative nodes: %s, %s\n", CKTnodName(ckt,here->VCVSposNode), CKTnodName(ckt,here->VCVSnegNode)); printf(" Controlling Positive, negative nodes: %s, %s\n", CKTnodName(ckt,here->VCVScontPosNode), CKTnodName(ckt,here->VCVScontNegNode)); printf(" Branch equation number: %s\n", CKTnodName(ckt,here->VCVSbranch)); printf(" Coefficient: %f\n",here->VCVScoeff); printf(" VCVSsenParmNo:%d\n",here->VCVSsenParmNo); } } } tmpk8ny_4pz/src/spicelib/devices/vcvs/vcvssset.c0000644000175000017500000000165513546075722022177 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* loop through all the devices and * allocate parameter #s to design parameters */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "vcvsdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VCVSsSetup(SENstruct *info, GENmodel *inModel) { VCVSmodel *model = (VCVSmodel *)inModel; VCVSinstance *here; /* loop through all the voltage source models */ for( ; model != NULL; model = VCVSnextModel(model)) { /* loop through all the instances of the model */ for (here = VCVSinstances(model); here != NULL ; here=VCVSnextInstance(here)) { if(here->VCVSsenParmNo){ here->VCVSsenParmNo = ++(info->SENparms); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisim2/0000755000175000017500000000000013546075722020356 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2noi.c0000644000175000017500000002752613546075722022115 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM ( VERSION : 2 SUBVERSION : 8 REVISION : 0 ) FILE : hsm2noi.c Date : 2014.6.5 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HiSIM2 Distribution Statement and Copyright Notice" attached to HiSIM2 model. -----HiSIM2 Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaim all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." *************************************************************************/ #include "ngspice/ngspice.h" #include "hsm2def.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" #include "ngspice/const.h" /* jwan */ /* * HSM2noise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with MOSFET's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the MOSFET's is summed with the variable "OnDens". */ int HSM2noise ( int mode, int operation, GENmodel *inModel, CKTcircuit *ckt, Ndata *data, double *OnDens) { HSM2model *model = (HSM2model *)inModel; HSM2instance *here; double tempOnoise; double tempInoise; double noizDens[HSM2NSRCS]; double lnNdens[HSM2NSRCS]; int i; double G = 0.0 ; double TTEMP = 0.0 ; /* for induced gate noise calculation: */ double omega = ckt->CKTomega; double sid, ci, sigrat, Qdrat; double realXds, imagXds, realXgs, imagXgs ; /* define the names of the noise sources */ static char * HSM2nNames[HSM2NSRCS] = { /* Note that we have to keep the order consistent with the index definitions in hsm2defs.h */ ".rd", /* noise due to rd */ ".rs", /* noise due to rs */ ".id", /* noise due to id */ ".1ovf", /* flicker (1/f) noise */ ".igs", /* shot noise due to Igs */ ".igd", /* shot noise due to Igd */ ".igb", /* shot noise due to Igb */ ".ign", /* induced gate noise component at the drain node */ "" /* total transistor noise */ }; for ( ;model != NULL; model = HSM2nextModel(model)) { for ( here = HSM2instances(model); here != NULL; here = HSM2nextInstance(here)) { switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (((NOISEAN*)ckt->CKTcurJob)->NStpsSm != 0) { switch (mode) { case N_DENS: for ( i = 0; i < HSM2NSRCS; i++ ) { NOISE_ADD_OUTVAR(ckt, data, "onoise.%s%s", here->HSM2name, HSM2nNames[i]); } break; case INT_NOIZ: for ( i = 0; i < HSM2NSRCS; i++ ) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total.%s%s", here->HSM2name, HSM2nNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total.%s%s", here->HSM2name, HSM2nNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: /* temperature */ TTEMP = ckt->CKTtemp ; if ( here->HSM2_temp_Given ) TTEMP = here->HSM2_ktemp ; if ( here->HSM2_dtemp_Given ) { TTEMP = TTEMP + here->HSM2_dtemp ; } /* rs/rd thermal noise */ if ( model->HSM2_corsrd < 0 ) { NevalSrc(&noizDens[HSM2RDNOIZ], NULL, ckt, N_GAIN, here->HSM2dNodePrime, here->HSM2dNode, 0.0); noizDens[HSM2RDNOIZ] *= 4 * CONSTboltz * TTEMP * here->HSM2drainConductance ; lnNdens[HSM2RDNOIZ] = log( MAX(noizDens[HSM2RDNOIZ],N_MINLOG) ) ; NevalSrc(&noizDens[HSM2RSNOIZ], NULL, ckt, N_GAIN, here->HSM2sNodePrime, here->HSM2sNode, 0.0); noizDens[HSM2RSNOIZ] *= 4 * CONSTboltz * TTEMP * here->HSM2sourceConductance ; lnNdens[HSM2RSNOIZ] = log( MAX(noizDens[HSM2RSNOIZ],N_MINLOG) ) ; /* NevalSrc(&noizDens[HSM2RDNOIZ], &lnNdens[HSM2RDNOIZ], ckt, THERMNOISE, here->HSM2dNodePrime, here->HSM2dNode, here->HSM2_weff / model->HSM2_rsh); NevalSrc(&noizDens[HSM2RSNOIZ], &lnNdens[HSM2RSNOIZ], ckt, THERMNOISE, here->HSM2sNodePrime, here->HSM2sNode, here->HSM2_weff / model->HSM2_rsh); */ } else { noizDens[HSM2RDNOIZ] = 0e0 ; lnNdens[HSM2RDNOIZ] = N_MINLOG ; noizDens[HSM2RSNOIZ] = 0e0 ; lnNdens[HSM2RSNOIZ] = N_MINLOG ; } /* channel thermal noise */ switch( model->HSM2_noise ) { case 1: /* HiSIM2 model */ if ( model->HSM2_corsrd <= 0 || here->HSM2internalGd <= 0.0 ) { G = here->HSM2_noithrml ; } else { if ( here->HSM2_noithrml * here->HSM2internalGd * here->HSM2internalGs > 0.0 ) { G = here->HSM2_noithrml * here->HSM2internalGd * here->HSM2internalGs / ( here->HSM2_noithrml * here->HSM2internalGd + here->HSM2internalGd * here->HSM2internalGs + here->HSM2_noithrml * here->HSM2internalGs ); } else { G = 0.0; } } NevalSrc(&noizDens[HSM2IDNOIZ], NULL, ckt, N_GAIN, here->HSM2dNodePrime, here->HSM2sNodePrime, 0.0); noizDens[HSM2IDNOIZ] *= 4 * CONSTboltz * TTEMP * G ; lnNdens[HSM2IDNOIZ] = log( MAX(noizDens[HSM2IDNOIZ],N_MINLOG) ); break; } /* flicker noise */ NevalSrc(&noizDens[HSM2FLNOIZ], NULL, ckt, N_GAIN, here->HSM2dNodePrime, here->HSM2sNodePrime, 0.0); switch ( model->HSM2_noise ) { case 1: /* HiSIM model */ noizDens[HSM2FLNOIZ] *= here->HSM2_noiflick / pow(data->freq, model->HSM2_falph) ; break; } lnNdens[HSM2FLNOIZ] = log(MAX(noizDens[HSM2FLNOIZ], N_MINLOG)); /* shot noise */ NevalSrc(&noizDens[HSM2IGSNOIZ], &lnNdens[HSM2IGSNOIZ], ckt, SHOTNOISE, here->HSM2gNodePrime, here->HSM2sNodePrime, here->HSM2_igs); NevalSrc(&noizDens[HSM2IGDNOIZ], &lnNdens[HSM2IGDNOIZ], ckt, SHOTNOISE, here->HSM2gNodePrime, here->HSM2dNodePrime, here->HSM2_igd); NevalSrc(&noizDens[HSM2IGBNOIZ], &lnNdens[HSM2IGBNOIZ], ckt, SHOTNOISE, here->HSM2gNodePrime, here->HSM2bNodePrime, here->HSM2_igb); /* induced gate noise */ switch ( model->HSM2_noise ) { case 1: /* HiSIM model */ sid = 4.0 * CONSTboltz * TTEMP * here->HSM2_noithrml ; ci = here->HSM2_noicross ; sigrat = (sid > 0.0 && here->HSM2_noiigate > 0.0) ? sqrt(here->HSM2_noiigate/sid) : 0.0 ; Qdrat = here->HSM2_Qdrat ; realXds = *(ckt->CKTrhs +here->HSM2dNodePrime) - *(ckt->CKTrhs +here->HSM2sNodePrime); imagXds = *(ckt->CKTirhs+here->HSM2dNodePrime) - *(ckt->CKTirhs+here->HSM2sNodePrime); realXgs = *(ckt->CKTrhs +here->HSM2gNodePrime) - *(ckt->CKTrhs +here->HSM2sNodePrime); imagXgs = *(ckt->CKTirhs+here->HSM2gNodePrime) - *(ckt->CKTirhs+here->HSM2sNodePrime); noizDens[HSM2IGNOIZ] = 2.0 * omega * ci * sigrat * sid * ( realXgs*imagXds - realXds*imagXgs ) + omega*omega * sigrat*sigrat * sid * ( (realXgs-Qdrat*realXds) * (realXgs-Qdrat*realXds) +(imagXgs-Qdrat*imagXds) * (imagXgs-Qdrat*imagXds) ) ; lnNdens[HSM2IGNOIZ] = log(MAX(noizDens[HSM2IGNOIZ], N_MINLOG)); break; } /* total */ noizDens[HSM2TOTNOIZ] = noizDens[HSM2RDNOIZ] + noizDens[HSM2RSNOIZ] + noizDens[HSM2IDNOIZ] + noizDens[HSM2FLNOIZ] + noizDens[HSM2IGSNOIZ] + noizDens[HSM2IGDNOIZ] + noizDens[HSM2IGBNOIZ] + noizDens[HSM2IGNOIZ]; lnNdens[HSM2TOTNOIZ] = log(MAX(noizDens[HSM2TOTNOIZ], N_MINLOG)); /* printf("f %e Sid %.16e Srd %.16e Srs %.16e Sflick %.16e Stherm %.16e Sign %.16e\n", */ /* data->freq,noizDens[HSM2TOTNOIZ],noizDens[HSM2RDNOIZ],noizDens[HSM2RSNOIZ],noizDens[HSM2FLNOIZ],noizDens[HSM2IDNOIZ],noizDens[HSM2IGNOIZ]); */ *OnDens += noizDens[HSM2TOTNOIZ]; if ( data->delFreq == 0.0 ) { /* if we haven't done any previous integration, we need to initialize our "history" variables. */ for ( i = 0; i < HSM2NSRCS; i++ ) here->HSM2nVar[LNLSTDENS][i] = lnNdens[i]; /* clear out our integration variables if it's the first pass */ if (data->freq == ((NOISEAN*) ckt->CKTcurJob)->NstartFreq) { for (i = 0; i < HSM2NSRCS; i++) { here->HSM2nVar[OUTNOIZ][i] = 0.0; here->HSM2nVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0, we have to integrate. */ for ( i = 0; i < HSM2NSRCS; i++ ) { if ( i != HSM2TOTNOIZ ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], here->HSM2nVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv, lnNdens[i] + data->lnGainInv, here->HSM2nVar[LNLSTDENS][i] + data->lnGainInv, data); here->HSM2nVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if ( ((NOISEAN*)ckt->CKTcurJob)->NStpsSm != 0 ) { here->HSM2nVar[OUTNOIZ][i] += tempOnoise; here->HSM2nVar[OUTNOIZ][HSM2TOTNOIZ] += tempOnoise; here->HSM2nVar[INNOIZ][i] += tempInoise; here->HSM2nVar[INNOIZ][HSM2TOTNOIZ] += tempInoise; } } } } if ( data->prtSummary ) { for (i = 0; i < HSM2NSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if ( ((NOISEAN*)ckt->CKTcurJob)->NStpsSm != 0 ) { for ( i = 0; i < HSM2NSRCS; i++ ) { data->outpVector[data->outNumber++] = here->HSM2nVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = here->HSM2nVar[INNOIZ][i]; } } break; } break; case N_CLOSE: /* do nothing, the main calling routine will close */ return (OK); break; /* the plots */ } /* switch (operation) */ } /* for here */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisim2/Makefile.am0000644000175000017500000000120113546075722022404 0ustar carstencarsten## Process this file with automake to produce Makefile.in EXTRA_DIST = noinst_LTLIBRARIES = libhisim2.la libhisim2_la_SOURCES = hisim2.h \ hsm2.c \ hsm2acld.c \ hsm2ask.c \ hsm2cvtest.c \ hsm2def.h \ hsm2eval.c \ hsm2evalenv.h \ hsm2eval_dep.h \ hsm2ext.h \ hsm2getic.c \ hsm2init.c \ hsm2init.h \ hsm2itf.h \ hsm2ld.c \ hsm2mask.c \ hsm2mdel.c \ hsm2mpar.c \ hsm2noi.c \ hsm2par.c \ hsm2pzld.c \ hsm2set.c \ hsm2soachk.c \ hsm2temp.c \ hsm2trunc.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2eval.c0000644000175000017500000104726013546075722022255 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM ( VERSION : 2 SUBVERSION : 8 REVISION : 0 ) FILE : hsm2eval.c Date : 2014.6.5 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HiSIM2 Distribution Statement and Copyright Notice" attached to HiSIM2 model. -----HiSIM2 Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaim all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." *************************************************************************/ /********************************************************************* * Memorandum on programming * * (1) Bias (x: b|d|g) * . vxs : Input argument. * . Vxse: External bias taking account device type (pMOS->nMOS). * . Vxsc: Confined bias within a specified region. * . Vxs : Internal bias. * . Y_dVxs denotes the partial derivative of Y w.r.t. Vxs. * * (2) Device Mode * . Normal mode (Vds>0 for nMOS) is assumed. * . In case of reverse mode, parent routines have to properly * transform or interchange inputs and outputs except ones * related to junction diodes, which are regarded as being * fixed to the nodal S/D. * * (3) Modification for symmetry at Vds=0 * . Vxsz: Modified bias. (x: b|d|g) * . Ps0z: Modified Ps0. * . The following variables are calculated as a function of * modified biases or potential. * Tox, Cox, (-- with quantum effect) * Vth*, dVth*, dPpg, Igate, Igidl, Igisl. * . The following variables are calculated using a transform * function. * Lred * * (4) Zones and Cases (terminology) * * Chi:=beta*(Ps0-Vbs)= 0 3 5 * * Zone: A | D1 | D2 | D3 * | * (accumulation)|(depletion) * | * Vgs = Vgs_fb Vth * / / * Case: Nonconductive / Conductive * / * VgVt:=Qn0/Cox= VgVt_small * * . Ids is regarded as zero in zone-A. * . Procedure to calculate Psl and dependent variables is * omitted in the nonconductive case. Ids and Qi are regarded * as zero in this case. * *********************************************************************/ /*===========================================================* * Preamble. *=================*/ /*---------------------------------------------------* * Header files. *-----------------*/ #include "ngspice/ngspice.h" #ifdef __STDC__ /* #include */ #endif #include "ngspice/cktdefs.h" /*-----------------------------------* * HiSIM macros *-----------------*/ #include "hisim2.h" #include "hsm2evalenv.h" /*-----------------------------------* * HiSIM constants *-----------------*/ #define C_sce_dlt (1.0e-2) #define C_gidl_delta 0.5 #define C_PSLK_DELTA 1e-3 /* delta for Pslk smoothing */ #define C_PSLK_SHIFT 1.0 /* constant value for temporary shift */ #define C_IDD_MIN 1.0e-15 /*===========================================================* * pow *=================*/ #ifdef POW_TO_EXP_AND_LOG #define Fn_Pow( x , y ) ( (x==0.0) ? 0.0 : exp( (y) * log( x ) ) ) #else #define Fn_Pow( x , y ) ( (x==0.0) ? 0.0 : pow( x , y ) ) #endif /*===========================================================* * Exp() for PGD. * - ExpLim(-3)=0 *=================*/ #define Fn_ExpLim( y , x , dx ) { \ if ( (x) < -3.0 ) { \ dx = 0.0 ; \ y = 0.0 ; \ } else if ( (x) < 0.0 ) { \ dx = 1.0 + (x) * ( 2 * (1.0/3.0) + (x) * 3 * (1.0/27.0) ) ; \ y = 1.0 + (x) * ( 1.0 + (x) * ( (1.0/3.0) + (x) * (1.0/27.0) ) ) ; \ } else { \ dx = 1.0 + (x) * ( 2 * (1.0/3.0) + (x) * ( 3 * 0.0402052934513951 \ + (x) * 4 * 0.148148111111111 ) ) ; \ y = 1.0 + (x) * ( 1.0 + (x) * ( (1.0/3.0) + (x) * ( 0.0402052934513951 \ + (x) * 0.148148111111111 ) ) ) ; \ } \ } /*===========================================================* * Ceiling, smoothing functions. *=================*/ /*---------------------------------------------------* * smoothUpper: ceiling. * y = xmax - 0.5 ( arg + sqrt( arg^2 + 4 xmax delta ) ) * arg = xmax - x - delta *-----------------*/ #define Fn_SU( y , x , xmax , delta , dx ) { \ double TMF1, TMF2; \ TMF1 = ( xmax ) - ( x ) - ( delta ) ; \ TMF2 = 4.0 * ( xmax ) * ( delta) ; \ TMF2 = TMF2 > 0.0 ? TMF2 : - ( TMF2 ) ; \ TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \ dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \ y = ( xmax ) - 0.5 * ( TMF1 + TMF2 ) ; \ } #define Fn_SU2( y , x , xmax , delta , dy_dx , dy_dxmax ) { \ double TMF1, TMF2; \ TMF1 = ( xmax ) - ( x ) - ( delta ) ; \ TMF2 = 4.0 * ( xmax ) * ( delta) ; \ TMF2 = TMF2 > 0.0 ? TMF2 : - ( TMF2 ) ; \ TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \ dy_dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \ dy_dxmax = 0.5 * ( 1.0 - ( TMF1 + 2.0 * delta ) / TMF2 ) ; \ y = ( xmax ) - 0.5 * ( TMF1 + TMF2 ) ; \ } /*---------------------------------------------------* * smoothLower: flooring. * y = xmin + 0.5 ( arg + sqrt( arg^2 + 4 xmin delta ) ) * arg = x - xmin - delta *-----------------*/ #define Fn_SL( y , x , xmin , delta , dx ) { \ double TMF1, TMF2; \ TMF1 = ( x ) - ( xmin ) - ( delta ) ; \ TMF2 = 4.0 * ( xmin ) * ( delta ) ; \ TMF2 = TMF2 > 0.0 ? TMF2 : - ( TMF2 ) ; \ TMF2 = sqrt ( TMF1 * TMF1 + TMF2 ) ; \ dx = 0.5 * ( 1.0 + TMF1 / TMF2 ) ; \ y = ( xmin ) + 0.5 * ( TMF1 + TMF2 ) ; \ } /*---------------------------------------------------* * smoothZero: flooring to zero. * y = 0.5 ( x + sqrt( x^2 + 4 delta^2 ) ) *-----------------*/ #define Fn_SZ( y , x , delta , dx ) { \ double TMF2; \ TMF2 = sqrt ( ( x ) * ( x ) + 4.0 * ( delta ) * ( delta) ) ; \ dx = 0.5 * ( 1.0 + ( x ) / TMF2 ) ; \ y = 0.5 * ( ( x ) + TMF2 ) ; \ if( y < 0.0 ) { y=0.0; dx=0.0; } \ } #if 0 /*---------------------------------------------------* * smoothZero: flooring to zero. * y = 0.5 ( x + sqrt( x^2 + 4 delta^2 ) ) *-----------------*/ static double smoothZero ( double x, double delta, double *dx ) { double sqr = sqrt ( x * x + 4.0 * delta * delta) ; if (dx) *dx = 0.5 * ( 1.0 + x / sqr ) ; return 0.5 * ( x + sqr ) ; } /*---------------------------------------------------* * CeilingPow: ceiling for positive x, flooring for negative x. * y = x * xmax / ( x^{2m} + xmax^{2m} )^{1/(2m)} * note: * - xmax has to be positive. * - -xmax < y < xmax. * - dy/dx|_{x=0} = 1. *-----------------*/ static double CeilingPow ( double x, double xmax, int pw, double *dx ) { double x2 = x * x ; double xmax2 = xmax * xmax ; double xp = 1.0 , xmp = 1.0 ; int m , mm ; double arg , dnm ; double result ; for ( m = 0 ; m < pw ; m ++ ) { xp *= x2 ; xmp *= xmax2 ; } arg = xp + xmp ; dnm = arg ; if ( pw == 1 || pw == 2 || pw == 4 || pw == 8 ) { if ( pw == 1 ) { mm = 1 ; } else if ( pw == 2 ) { mm = 2 ; } else if ( pw == 4 ) { mm = 3 ; } else if ( pw == 8 ) { mm = 4 ; } for ( m = 0 ; m < mm ; m ++ ) { dnm = sqrt( dnm ) ; } } else { dnm = pow( dnm , 1.0 / ( 2.0 * pw ) ) ; } dnm = 1.0 / dnm ; result = x * xmax * dnm ; (*dx) = xmax * xmp * dnm / arg ; return result ; } #endif /*---------------------------------------------------* * CeilingPow: ceiling for positive x, flooring for negative x. * y = x * xmax / ( x^{2m} + xmax^{2m} )^{1/(2m)} * note: * - xmax has to be positive. * - -xmax < y < xmax. * - dy/dx|_{x=0} = 1. *-----------------*/ #define Fn_CP( y , x , xmax , pw , dx ) { \ double x2 = (x) * (x) ; \ double xmax2 = (xmax) * (xmax) ; \ double xp = 1.0 , xmp = 1.0 ; \ int m , mm ; \ double arg_cp , dnm ; \ for ( m = 0 ; m < pw ; m ++ ) { xp *= x2 ; xmp *= xmax2 ; } \ arg_cp = xp + xmp ; \ dnm = arg_cp ; \ if ( pw == 1 || pw == 2 || pw == 4 || pw == 8 ) { \ if ( pw == 1 ) { mm = 1 ; \ } else if ( pw == 2 ) { mm = 2 ; \ } else if ( pw == 4 ) { mm = 3 ; \ } else if ( pw == 8 ) { mm = 4 ; } \ for ( m = 0 ; m < mm ; m ++ ) { dnm = sqrt( dnm ) ; } \ } else { dnm = Fn_Pow( dnm , 1.0 / ( 2.0 * pw ) ) ; } \ dnm = 1.0 / dnm ; \ y = (x) * (xmax) * dnm ; \ dx = (xmax) * xmp * dnm / arg_cp ; \ } #define Fn_SU_CP2( y , x , xmax , delta , pw , dx , dxmax ) { \ if(x > xmax - delta && delta >= 0.0) { \ double TMF0, TMF1; \ TMF1 = x - xmax + delta ; \ Fn_CP( TMF0 , TMF1 , delta , pw , dx ) \ y = xmax - delta + TMF0 ; \ dx = dx ; \ dxmax = 1.0-dx ; \ } else { \ y = x ; \ dx = 1.0 ; \ dxmax = 0.0 ; \ } \ } #define Fn_CP2( y , x , xmax , pw , dx , dxmax ) { \ double x2 = (x) * (x) ; \ double xmax2 = (xmax) * (xmax) ; \ double xp = 1.0 , xmp = 1.0 ; \ int m =0, mm =0; \ double arg_cp2 =0.0, dnm =0.0; \ for ( m = 0 ; m < pw ; m ++ ) { xp *= x2 ; xmp *= xmax2 ; } \ arg_cp2 = xp + xmp ; \ dnm = arg_cp2 ; \ if ( pw == 1 || pw == 2 || pw == 4 || pw == 8 ) { \ if ( pw == 1 ) { mm = 1 ; \ } else if ( pw == 2 ) { mm = 2 ; \ } else if ( pw == 4 ) { mm = 3 ; \ } else if ( pw == 8 ) { mm = 4 ; } \ for ( m = 0 ; m < mm ; m ++ ) { dnm = sqrt( dnm ) ; } \ } else { dnm = Fn_Pow( dnm , 1.0 / ( 2.0 * pw ) ) ; } \ dnm = 1.0 / dnm ; \ y = (x) * (xmax) * dnm ; \ dx = (xmax) * xmp * dnm / arg_cp2 ; \ dxmax = (x) * xp * dnm / arg_cp2 ; \ } #define Fn_SU_CP3( y , x , xmax , delta , pw , dx , dxmax , ddelta ) { \ if(x > xmax - delta && delta >= 0.0) { \ double TMF0, TMF1; \ TMF1 = x - xmax + delta ; \ Fn_CP2( TMF0 , TMF1 , delta , pw , dx , ddelta ) \ y = xmax - delta + TMF0 ; \ dx = dx ; \ dxmax = 1.0-dx ; \ ddelta = -1.0+dx+ddelta; \ } else { \ y = x ; \ dx = 1.0 ; \ dxmax = 0.0 ; \ ddelta = 0.0 ; \ } \ } #define Fn_SU_CP( y , x , xmax , delta , pw , dx ) { \ if(x > xmax - delta && delta >= 0.0) { \ double TMF0, TMF1; \ TMF1 = x - xmax + delta ; \ Fn_CP( TMF0 , TMF1 , delta , pw , dx ) \ y = xmax - delta + TMF0 ; \ dx = dx ; \ } else { \ y = x ; \ dx = 1.0 ; \ } \ } #define Fn_SL_CP2( y , x , xmin , delta , pw , dx , dxmin) { \ if(x < xmin + delta && delta >= 0.0) { \ double TMF0, TMF1; \ TMF1 = xmin + delta - x ; \ Fn_CP( TMF0 , TMF1 , delta , pw , dx ) \ y = xmin + delta - TMF0 ; \ dx = dx ; \ dxmin = 1.0-dx ; \ } else { \ y = x ; \ dx = 1.0 ; \ dxmin = 0.0 ; \ } \ } #define Fn_SL_CP( y , x , xmin , delta , pw , dx ) { \ if(x < xmin + delta && delta >= 0.0) { \ double TMF0, TMF1; \ TMF1 = xmin + delta - x ; \ Fn_CP( TMF0 , TMF1 , delta , pw , dx ) \ y = xmin + delta - TMF0 ; \ dx = dx ; \ } else { \ y = x ; \ dx = 1.0 ; \ } \ } /*===========================================================* * Functions for symmetry. *=================*/ /*---------------------------------------------------* * Declining function using a polynomial. *-----------------*/ #define Fn_DclPoly4( y , x , dx ) { \ double TMF2, TMF3, TMF4; \ TMF2 = (x) * (x) ; \ TMF3 = TMF2 * (x) ; \ TMF4 = TMF2 * TMF2 ; \ y = 1.0 / ( 1.0 + (x) + TMF2 + TMF3 + TMF4 ) ; \ dx = - ( 1.0 + 2.0 * (x) + 3.0 * TMF2 + 4.0 * TMF3 ) * y * y ; \ } /*---------------------------------------------------* * "smoothUpper" uasing a polynomial *-----------------*/ #define Fn_SUPoly4( y , x , xmax , dx ) { \ double TMF1; \ TMF1 = (x) / xmax ; \ Fn_DclPoly4( y , TMF1 , dx ) ; \ y = xmax * ( 1.0 - y ) ; \ dx = - dx ; \ } #define Fn_SUPoly4m( y , x , xmax , dx , dxmax ) { \ double TMF0, TMF1; \ TMF1 = (x) / xmax ; \ Fn_DclPoly4( TMF0 , TMF1 , dx ) ; \ y = xmax * ( 1.0 - TMF0 ) ; \ dxmax = 1.0 - TMF0 + TMF1 * dx ; \ dx = - dx ; \ } /*---------------------------------------------------* * SymAdd: evaluate additional term for symmetry. *-----------------*/ #define Fn_SymAdd( y , x , add0 , dx ) \ { \ double TMF1, TMF2, TMF3; \ TMF1 = 2.0 * ( x ) / ( add0 ) ; \ TMF2 = 1.0 + TMF1 * ( (1.0/2) + TMF1 * ( (1.0/6) \ + TMF1 * ( (1.0/24) + TMF1 * ( (1.0/120) \ + TMF1 * ( (1.0/720) + TMF1 * (1.0/5040) ) ) ) ) ) ; \ TMF3 = (1.0/2) + TMF1 * ( (1.0/3) \ + TMF1 * ( (1.0/8) + TMF1 * ( (1.0/30) \ + TMF1 * ( (1.0/144) + TMF1 * (1.0/840) ) ) ) ) ; \ y = add0 / TMF2 ; \ dx = - 2.0 * TMF3 / ( TMF2 * TMF2 ) ; \ } /*===========================================================* * Function hsm2evaluate. *=================*/ int HSM2evaluate ( double vds, double vgs, double vbs, double vbs_jct, double vbd_jct, HSM2instance *here, HSM2model *model, CKTcircuit *ckt ) { HSM2binningParam *pParam = &here->pParam ; HSM2modelMKSParam *modelMKS = &model->modelMKS ; /*-----------------------------------* * Constants for Smoothing functions *---------------*/ const double vth_dlt = 1.0e-3 ; /* const double cclmmdf = 1.0e-2 ;*/ const double cclmmdf = 1.0e-1 ; const double qme_dlt = 1.0e-4 ; const double eef_dlt = 1.0e-2 * C_m2cm ; const double sti2_dlt = 2.0e-3 ; const double pol_dlt = 5.0e-2 ; //const double psia_dlt = 1.0e-3 ; //const double psia2_dlt = 5.0e-3 ; const double psisti_dlt = 5.0e-3 ; //const double jct_dlt = 1.0e-2 ; /*---------------------------------------------------* * Local variables. *-----------------*/ /* Constants ----------------------- */ const int lp_s0_max = 20 ; const int lp_sl_max = 20 ; const int lp_se_max = 150 ; int lp_bs_max = 10 ; const double Ids_tol = 1.0e-10 ; const double Ids_maxvar = 1.0e-1 ; const double dP_max = 0.1e0 ; const double ps_conv = 5.0e-13 ; const double ps_conv2 = 1.0e-10 ; /* double ps_conv = 1.0e-13 ;*/ const double gs_conv = 1.0e-8 ; const double mini_current = 1.0e-15 ; /** depletion **/ const double znbd3 = 3.0e0 ; const double znbd5 = 5.0e0 ; const double cn_nc3 = C_SQRT_2 / 108e0 ; /* 5-degree, contact:Chi=5 */ const double cn_nc51 = 0.707106781186548 ; /* sqrt(2)/2 */ const double cn_nc52 = -0.117851130197758 ; /* -sqrt(2)/12 */ const double cn_nc53 = 0.0178800506338833 ; /* (187 - 112*sqrt(2))/1600 */ const double cn_nc54 = -0.00163730162779191 ; /* (-131 + 88*sqrt(2))/4000 */ const double cn_nc55 = 6.36964918866352e-5 ; /* (1509-1040*sqrt(2))/600000 */ /** inversion **/ /* 3-degree polynomial approx for ( exp[Chi]-1 )^{1/2} */ const double cn_im53 = 2.9693154855770998e-1 ; const double cn_im54 = -7.0536542840097616e-2 ; const double cn_im55 = 6.1152888951331797e-3 ; /** initial guess **/ const double c_ps0ini_2 = 8.0e-4 ; const double c_pslini_1 = 0.3e0 ; const double c_pslini_2 = 3.0e-2 ; const double VgVt_small = 1.0e-12 ; const double Vbs_min = -10.5e0 ; const double epsm10 = 10.0e0 * C_EPS_M ; const double small = 1.0e-50 ; const double small2 = 1.0e-12 ; /* for Qover */ double Vbs_max = 0.8e0 ; double Vbs_bnd = 0.4e0 ; /* start point of positive Vbs bending */ double Gdsmin = 0.0 ; double Gjmin = ckt->CKTgmin ; /* Internal flags --------------------*/ int flg_err = 0 ; /* error level */ int flg_rsrd = 0 ; /* Flag for bias loop accounting Rs and Rd */ int flg_iprv = 0 ; /* Flag for initial guess of Ids */ int flg_pprv = 0 ; /* Flag for initial guesses of Ps0 and Pds */ int flg_noqi =0; /* Flag for the cases regarding Qi=Qd=0 */ int flg_vbsc = 0 ; /* Flag for Vbs confining */ int flg_info = 0 ; int flg_conv = 0 ; /* Flag for Poisson loop convergence */ int flg_qme = 0 ; /* Flag for QME */ /* flag for NQS calculation */ int flg_nqs=0 ; /* Important Variables in HiSIM -------*/ /* external bias */ double Vbse =0.0, Vdse =0.0, Vgse =0.0 ; /* confine bias */ double Vbsc =0.0, Vdsc =0.0, Vgsc =0.0 ; double Vbsc_dVbse =1.0, Vbsc_dVbse_dVbs =0.0 ; /* internal bias */ double Vbs =0.0, Vds =0.0, Vgs =0.0, Vdb =0.0, Vsb =0.0 ; double Vbs_dVbse = 1.0 , Vbs_dVdse = 0.0 , Vbs_dVgse = 0.0 ; double Vds_dVbse = 0.0 , Vds_dVdse = 1.0 , Vds_dVgse = 0.0 ; double Vgs_dVbse = 0.0 , Vgs_dVdse = 0.0 , Vgs_dVgse = 1.0 ; double Vgp =0.0 ; double Vgp_dVbs =0.0, Vgp_dVds =0.0, Vgp_dVgs =0.0 ; double Vgs_fb =0.0 ; /* Ps0 : surface potential at the source side */ double Ps0 =0.0 ; double Ps0_dVbs =0.0, Ps0_dVds =0.0, Ps0_dVgs =0.0 ; double Ps0_ini =0.0, Ps0_iniA =0.0, Ps0_iniB =0.0 ; /* Psl : surface potential at the drain side */ double Psl =0.0 ; double Psl_dVbs =0.0, Psl_dVds =0.0, Psl_dVgs =0.0 ; double Psl_lim =0.0, dPlim =0.0 ; /* Pds := Psl - Ps0 */ double Pds = 0.0 , Pdsz = 0.0 ; double Pds_dVbs = 0.0, Pds_dVds = 0.0 , Pds_dVgs = 0.0 ; double Pdsz_dVbs = 0.0, Pdsz_dVds = 0.0 , Pdsz_dVgs = 0.0 ; double Pds_ini =0.0 ; double Pds_max =0.0 ; /* iteration numbers of Ps0 and Psl equations. */ int lp_s0 = 0 , lp_sl = 0 ; /* Xi0 := beta * ( Ps0 - Vbs ) - 1. */ double Xi0 =0.0 ; double Xi0_dVbs =0.0, Xi0_dVds =0.0, Xi0_dVgs =0.0 ; double Xi0p12 =0.0 ; double Xi0p12_dVbs =0.0, Xi0p12_dVds =0.0, Xi0p12_dVgs =0.0 ; double Xi0p32 =0.0 ; /* Xil := beta * ( Psl - Vbs ) - 1. */ double Xilp12 =0.0 ; double Xilp32 =0.0 ; double Xil =0.0 ; /* modified bias and potential for sym.*/ double Vbsz =0.0, Vdsz =0.0, Vgsz =0.0 ; double Vbsz_dVbs =0.0, Vbsz_dVds =0.0 ; double Vdsz_dVds =0.0, Vdsz_dVbs =0.0 ; double Vgsz_dVgs =0.0, Vgsz_dVbs =0.0, Vgsz_dVds =0.0 ; double Vzadd =0.0, Vzadd_dVds =0.0, Vzadd_dVbs =0.0 ; double Ps0z =0.0, Ps0z_dVbs =0.0, Ps0z_dVds =0.0, Ps0z_dVgs =0.0 ; double Pzadd =0.0, Pzadd_dVbs =0.0, Pzadd_dVds =0.0, Pzadd_dVgs =0.0 ; double Vgpz = 0.0 , Vgpz_dVbs = 0.0 , Vgpz_dVds = 0.0 , Vgpz_dVgs = 0.0 ; /* (tmp) */ /* IBPC */ double dVbsIBPC =0.0, dVbsIBPC_dVbs =0.0, dVbsIBPC_dVds =0.0, dVbsIBPC_dVgs =0.0 ; double betaWL =0.0, betaWL_dVbs =0.0, betaWL_dVds =0.0, betaWL_dVgs =0.0 ; double Xi0p32_dVbs =0.0, Xi0p32_dVds =0.0, Xi0p32_dVgs =0.0 ; double Xil_dVbs =0.0, Xil_dVds =0.0, Xil_dVgs =0.0 ; double Xilp12_dVbs =0.0, Xilp12_dVds =0.0, Xilp12_dVgs =0.0 ; double Xilp32_dVbs =0.0, Xilp32_dVds =0.0, Xilp32_dVgs =0.0 ; double dG3 =0.0, dG3_dVbs =0.0, dG3_dVds =0.0, dG3_dVgs =0.0 ; double dG4 =0.0, dG4_dVbs =0.0, dG4_dVds =0.0, dG4_dVgs =0.0 ; double dIdd =0.0, dIdd_dVbs =0.0, dIdd_dVds =0.0, dIdd_dVgs =0.0 ; /* Chi := beta * ( Ps{0/l} - Vbs ) */ double Chi =0.0 ; double Chi_dVbs =0.0, Chi_dVds =0.0, Chi_dVgs =0.0 ; /* Rho := beta * ( Psl - Vds ) */ double Rho =0.0 ; /* threshold voltage */ double Vth =0.0 ; double Vth0 =0.0 ; double Vth0_dVb =0.0, Vth0_dVd =0.0, Vth0_dVg =0.0 ; /* variation of threshold voltage */ double dVth =0.0 ; double dVth_dVb =0.0, dVth_dVd =0.0, dVth_dVg =0.0 ; double dVth0 =0.0 ; double dVth0_dVb =0.0, dVth0_dVd =0.0, dVth0_dVg =0.0 ; double dVthSC =0.0 ; double dVthSC_dVb =0.0, dVthSC_dVd =0.0, dVthSC_dVg =0.0 ; double Pb20b =0.0 ; double Pb20b_dVg =0.0, Pb20b_dVb =0.0, Pb20b_dVd =0.0 ; double dVthW =0.0 ; double dVthW_dVb =0.0, dVthW_dVd =0.0, dVthW_dVg =0.0 ; /* Alpha and related parameters */ double Alpha =0.0 ; double Alpha_dVbs =0.0, Alpha_dVds =0.0, Alpha_dVgs =0.0 ; double Achi =0.0 ; double Achi_dVbs =0.0, Achi_dVds =0.0, Achi_dVgs =0.0 ; double VgVt = 0.0 ; double VgVt_dVbs = 0.0, VgVt_dVds = 0.0, VgVt_dVgs = 0.0 ; double Pslsat = 0.0 ; double Vdsat = 0.0 ; double VdsatS = 0.0 ; double VdsatS_dVbs = 0.0, VdsatS_dVds = 0.0, VdsatS_dVgs = 0.0 ; double Delta =0.0 ; /* Q_B and capacitances */ double Qb =0.0, Qb_dVbs =0.0, Qb_dVds =0.0, Qb_dVgs =0.0 ; double Qb_dVbse =0.0, Qb_dVdse =0.0, Qb_dVgse =0.0 ; double Qbu = 0.0 , Qbu_dVbs = 0.0 , Qbu_dVds = 0.0 , Qbu_dVgs = 0.0 ; /* Q_I and capacitances */ double Qi =0.0, Qi_dVbs =0.0, Qi_dVds =0.0, Qi_dVgs =0.0 ; double Qi_dVbse =0.0, Qi_dVdse =0.0, Qi_dVgse =0.0 ; double Qiu = 0.0 , Qiu_dVbs = 0.0 , Qiu_dVds = 0.0 , Qiu_dVgs = 0.0 ; /* Q_D and capacitances */ double Qd =0.0, Qd_dVbs =0.0, Qd_dVds =0.0, Qd_dVgs =0.0 ; double Qd_dVbse =0.0, Qd_dVdse =0.0, Qd_dVgse =0.0 ; double qd_dVgse=0.0, qd_dVdse=0.0, qd_dVbse=0.0, qd_dVsse =0.0 ; /* channel current */ double Ids =0.0 ; double Ids_dVbs =0.0, Ids_dVds =0.0, Ids_dVgs =0.0 ; double Ids_dVbse =0.0, Ids_dVdse =0.0, Ids_dVgse =0.0 ; double Ids0 =0.0 ; double Ids0_dVbs =0.0, Ids0_dVds =0.0, Ids0_dVgs =0.0 ; /* STI */ double dVthSCSTI =0.0 ; double dVthSCSTI_dVg =0.0, dVthSCSTI_dVd =0.0, dVthSCSTI_dVb =0.0 ; double Vgssti =0.0 ; double Vgssti_dVbs =0.0, Vgssti_dVds =0.0, Vgssti_dVgs =0.0 ; double costi0 =0.0, costi1 =0.0, costi3 =0.0 ; double costi4 =0.0, costi5 =0.0, costi6 =0.0, costi7 =0.0 ; double costi3_dVb =0.0, costi3_dVd=0.0, costi3_dVg =0.0 ; double costi3_dVb_c3 =0.0, costi3_dVd_c3=0.0, costi3_dVg_c3 =0.0 ; double Psasti =0.0 ; double Psasti_dVbs =0.0, Psasti_dVds =0.0, Psasti_dVgs =0.0 ; double Psbsti =0.0 ; double Psbsti_dVbs =0.0, Psbsti_dVds =0.0, Psbsti_dVgs =0.0 ; double Psab =0.0 ; double Psab_dVbs =0.0, Psab_dVds =0.0, Psab_dVgs =0.0 ; double Psti =0.0 ; double Psti_dVbs =0.0, Psti_dVds =0.0, Psti_dVgs =0.0 ; double sq1sti =0.0 ; double sq1sti_dVbs =0.0, sq1sti_dVds =0.0, sq1sti_dVgs =0.0 ; double sq2sti =0.0 ; double sq2sti_dVbs =0.0, sq2sti_dVds =0.0, sq2sti_dVgs =0.0 ; double Qn0sti =0.0 ; double Qn0sti_dVbs =0.0, Qn0sti_dVds =0.0, Qn0sti_dVgs =0.0 ; double Idssti =0.0 ; double Idssti_dVbs =0.0, Idssti_dVds =0.0, Idssti_dVgs =0.0 ; /* constants */ double beta =0.0, beta_inv =0.0 ; double beta2 =0.0 ; double Pb2 =0.0 ; double Pb20 =0.0 ; double Pb2c =0.0 ; double Vfb =0.0 ; double c_eox =0.0 ; double Leff=0.0, Weff =0.0 ; double q_Nsub =0.0 ; /* PART-1 */ /* Accumulation zone */ double Psa =0.0 ; double Psa_dVbs =0.0, Psa_dVds =0.0, Psa_dVgs =0.0 ; /* CLM*/ double Psdl =0.0, Psdl_dVbs =0.0, Psdl_dVds =0.0, Psdl_dVgs =0.0 ; double Lred =0.0, Lred_dVbs =0.0, Lred_dVds =0.0, Lred_dVgs =0.0 ; double Lch =0.0, Lch_dVbs =0.0, Lch_dVds =0.0, Lch_dVgs =0.0 ; double Wd =0.0, Wd_dVbs =0.0, Wd_dVds =0.0, Wd_dVgs =0.0 ; double Aclm =0.0 ; /* Pocket Implant */ double Vthp=0.0, Vthp_dVb=0.0, Vthp_dVd=0.0, Vthp_dVg =0.0 ; double dVthLP=0.0, dVthLP_dVb=0.0, dVthLP_dVd=0.0, dVthLP_dVg =0.0 ; double bs12=0.0, bs12_dVb=0.0, bs12_dVd =0.0, bs12_dVg =0.0 ; double Qbmm=0.0, Qbmm_dVb=0.0, Qbmm_dVd =0.0, Qbmm_dVg =0.0 ; double dqb=0.0, dqb_dVb=0.0, dqb_dVg=0.0, dqb_dVd =0.0 ; double Vdx=0.0, Vdx2 =0.0 ; double Vdx_dVbs =0.0, Vdx2_dVbs =0.0 ; double Pbsum=0.0, sqrt_Pbsum =0.0 ; double Pbsum_dVb=0.0, Pbsum_dVd=0.0, Pbsum_dVg =0.0 ; /* Poly-Depletion Effect */ const double pol_b = 1.0 ; double dPpg =0.0, dPpg_dVb =0.0, dPpg_dVd =0.0, dPpg_dVg =0.0; /* Quantum Effect */ double Tox =0.0, Tox_dVb =0.0, Tox_dVd =0.0, Tox_dVg =0.0 ; double dTox =0.0, dTox_dVb =0.0, dTox_dVd =0.0, dTox_dVg =0.0 ; double Cox =0.0, Cox_dVb =0.0, Cox_dVd =0.0, Cox_dVg =0.0 ; double Cox_inv =0.0, Cox_inv_dVb =0.0, Cox_inv_dVd =0.0, Cox_inv_dVg =0.0 ; double Tox0 =0.0, Cox0 =0.0, Cox0_inv =0.0 ; double Vthq=0.0, Vthq_dVb =0.0, Vthq_dVd =0.0 ; /* Igate , Igidl , Igisl */ const double igate_dlt = 1.0e-2 ; double Psdlz =0.0, Psdlz_dVbs =0.0, Psdlz_dVds =0.0, Psdlz_dVgs =0.0 ; double Egp12 =0.0, Egp32 =0.0 ; double E1 =0.0, E1_dVb =0.0, E1_dVd =0.0, E1_dVg =0.0 ; double Qb0Cox =0.0, Qb0Cox_dVb =0.0, Qb0Cox_dVd =0.0, Qb0Cox_dVg =0.0 ; double Etun =0.0, Etun_dVbs =0.0, Etun_dVds =0.0, Etun_dVgs =0.0 ; double Egidl =0.0, Egidl_dVb =0.0, Egidl_dVd =0.0, Egidl_dVg =0.0 ; double Egisl =0.0, Egisl_dVb =0.0, Egisl_dVd =0.0, Egisl_dVg =0.0 ; double Igate =0.0, Igate_dVbs =0.0, Igate_dVds =0.0, Igate_dVgs =0.0 ; double Igate_dVbse =0.0, Igate_dVdse =0.0, Igate_dVgse =0.0 ; double Igs =0.0, Igd =0.0, Igb =0.0 ; double Igs_dVbs =0.0, Igs_dVds =0.0, Igs_dVgs =0.0 ; double Igs_dVbse =0.0, Igs_dVdse =0.0, Igs_dVgse =0.0 ; double Igd_dVbs =0.0, Igd_dVds =0.0, Igd_dVgs =0.0 ; double Igd_dVbse =0.0, Igd_dVdse =0.0, Igd_dVgse =0.0 ; double Igb_dVbs =0.0, Igb_dVds =0.0, Igb_dVgs =0.0 ; double Igb_dVbse =0.0, Igb_dVdse =0.0, Igb_dVgse =0.0 ; double Igidl =0.0, Igidl_dVbs =0.0, Igidl_dVds =0.0, Igidl_dVgs =0.0 ; double Igidl_dVbse =0.0, Igidl_dVdse =0.0, Igidl_dVgse =0.0 ; double Igisl =0.0, Igisl_dVbs =0.0, Igisl_dVds =0.0, Igisl_dVgs =0.0 ; double Igisl_dVbse =0.0, Igisl_dVdse =0.0, Igisl_dVgse =0.0 ; /* connecting function */ double FD2 =0.0, FD2_dVbs =0.0, FD2_dVds =0.0, FD2_dVgs =0.0 ; double FMDVDS =0.0, FMDVDS_dVbs =0.0, FMDVDS_dVds =0.0, FMDVDS_dVgs =0.0 ; double cnst0 =0.0, cnst1 =0.0 ; double cnstCoxi =0.0 , cnstCoxi_dVg =0.0 , cnstCoxi_dVd =0.0 , cnstCoxi_dVb =0.0 ; double fac1 =0.0 ; double fac1_dVbs =0.0, fac1_dVds =0.0, fac1_dVgs =0.0 ; double fac1p2 =0.0 ; double fs01 =0.0 ; double fs01_dPs0 =0.0 ; double fs01_dVbs =0.0, fs01_dVds =0.0, fs01_dVgs =0.0 ; double fs02 =0.0 ; double fs02_dPs0 =0.0 ; double fs02_dVbs =0.0, fs02_dVds =0.0, fs02_dVgs =0.0 ; double fsl1 =0.0 ; double fsl1_dPsl =0.0 ; double fsl1_dVbs =0.0, fsl1_dVds =0.0, fsl1_dVgs =0.0; /* Vdseff */ double fsl2 =0.0 ; double fsl2_dPsl =0.0 ; double fsl2_dVbs =0.0, fsl2_dVds =0.0, fsl2_dVgs =0.0; /* Vdseff */ double cfs1 =0.0 ; double fb =0.0, fb_dChi =0.0 ; double fi =0.0, fi_dChi =0.0 ; double exp_Chi =0.0, exp_Rho =0.0, exp_bVbs =0.0, exp_bVbsVds =0.0 ; double Fs0=0.0, Fsl =0.0 ; double Fs0_dPs0 =0.0, Fsl_dPsl =0.0 ; double dPs0 =0.0, dPsl =0.0 ; double Qn0 = 0.0e0 ; double Qn0_dVbs =0.0, Qn0_dVds =0.0, Qn0_dVgs =0.0 ; double Qb0 =0.0 ; double Qb0_dVb =0.0, Qb0_dVd =0.0, Qb0_dVg =0.0 ; double Qbnm =0.0 ; double Qbnm_dVbs =0.0, Qbnm_dVds =0.0, Qbnm_dVgs =0.0 ; double DtPds =0.0 ; double DtPds_dVbs =0.0, DtPds_dVds =0.0, DtPds_dVgs =0.0 ; double Qinm =0.0 ; double Qinm_dVbs =0.0, Qinm_dVds =0.0, Qinm_dVgs =0.0 ; double Qidn =0.0 ; double Qidn_dVbs =0.0, Qidn_dVds =0.0, Qidn_dVgs =0.0 ; double Qdnm =0.0 ; double Qdnm_dVbs =0.0, Qdnm_dVds =0.0, Qdnm_dVgs =0.0 ; double Qddn =0.0 ; double Qddn_dVbs =0.0, Qddn_dVds =0.0, Qddn_dVgs =0.0 ; double Quot =0.0 ; double Qdrat = 0.5 ; double Qdrat_dVbs = 0.0 , Qdrat_dVds = 0.0, Qdrat_dVgs = 0.0 ; double Qdrat_dVbse =0.0, Qdrat_dVdse =0.0, Qdrat_dVgse =0.0 ; double Idd =0.0 ; double Idd_dVbs =0.0, Idd_dVds =0.0, Idd_dVgs =0.0 ; double Fdd =0.0 ; double Fdd_dVbs =0.0, Fdd_dVds =0.0, Fdd_dVgs =0.0 ; double Eeff =0.0 ; double Eeff_dVbs =0.0, Eeff_dVds =0.0, Eeff_dVgs =0.0 ; double Rns =0.0 ; double Mu = 0.0 ; double Mu_dVbs =0.0, Mu_dVds =0.0, Mu_dVgs =0.0 ; double Muun =0.0, Muun_dVbs =0.0, Muun_dVds =0.0, Muun_dVgs =0.0 ; double Ey = 0e0 ; double Ey_dVbs =0.0, Ey_dVds =0.0, Ey_dVgs =0.0 ; double Em =0.0 ; double Em_dVbs =0.0, Em_dVds =0.0, Em_dVgs =0.0 ; double Vmax =0.0 ; double Eta =0.0 ; double Eta_dVbs =0.0, Eta_dVds =0.0, Eta_dVgs =0.0 ; double Eta1 =0.0, Eta1p12 =0.0, Eta1p32 =0.0, Eta1p52 =0.0 ; double Zeta12 =0.0, Zeta32 =0.0, Zeta52 =0.0 ; double F00 =0.0 ; double F00_dVbs =0.0, F00_dVds =0.0, F00_dVgs =0.0 ; double F10 =0.0 ; double F10_dVbs =0.0, F10_dVds =0.0, F10_dVgs =0.0 ; double F30 =0.0 ; double F30_dVbs =0.0, F30_dVds =0.0, F30_dVgs =0.0 ; double F11 =0.0 ; double F11_dVbs =0.0, F11_dVds =0.0, F11_dVgs =0.0 ; double Ps0_min =0.0 ; double Ps0_min_dVbs =0.0, Ps0_min_dVds =0.0, Ps0_min_dVgs =0.0 ; double Acn =0.0, Acd =0.0, Ac1 =0.0, Ac2 =0.0, Ac3 =0.0, Ac4 =0.0, Ac31 =0.0, Ac41 =0.0 ; double Acn_dVbs =0.0, Acn_dVds =0.0, Acn_dVgs =0.0 ; double Acd_dVbs =0.0, Acd_dVds =0.0, Acd_dVgs =0.0 ; double Ac1_dVbs =0.0, Ac1_dVds =0.0, Ac1_dVgs =0.0 ; double Ac2_dVbs =0.0, Ac2_dVds =0.0, Ac2_dVgs =0.0 ; double Ac3_dVbs =0.0, Ac3_dVds =0.0, Ac3_dVgs =0.0 ; double Ac4_dVbs =0.0, Ac4_dVds =0.0, Ac4_dVgs =0.0 ; double Ac31_dVbs =0.0, Ac31_dVds =0.0, Ac31_dVgs =0.0 ; /* PART-2 (Isub) */ double Isub =0.0 ; double Isub_dVbs =0.0, Isub_dVds =0.0, Isub_dVgs =0.0 ; double Isub_dVbse =0.0, Isub_dVdse =0.0, Isub_dVgse =0.0 ; double Psislsat=0.0, Psisubsat =0.0 ; double Psislsat_dVd=0.0, Psislsat_dVg=0.0, Psislsat_dVb =0.0 ; double Psisubsat_dVd=0.0, Psisubsat_dVg=0.0, Psisubsat_dVb =0.0 ; /* PART-3 (overlap) */ double cov_slp =0.0, cov_mag =0.0, covvg =0.0, covvg_dVgs =0.0 ; double Lov =0.0 ; double Qgos = 0.0, Qgos_dVbs = 0.0, Qgos_dVds = 0.0, Qgos_dVgs = 0.0 ; double Qgos_dVbse =0.0, Qgos_dVdse =0.0, Qgos_dVgse =0.0 ; double Qgod = 0.0, Qgod_dVbs = 0.0, Qgod_dVds = 0.0, Qgod_dVgs = 0.0 ; double Qgod_dVbse =0.0, Qgod_dVdse =0.0, Qgod_dVgse =0.0 ; int flg_overgiven =0 ; double Qgbo =0.0, Qgbo_dVbs =0.0, Qgbo_dVds =0.0, Qgbo_dVgs =0.0 ; double Qgbo_dVbse =0.0, Qgbo_dVdse =0.0, Qgbo_dVgse =0.0 ; double Cggo = 0.0 , Cgdo = 0.0 , Cgso = 0.0 , Cgbo = 0.0 , Cgbo_loc=0.0 ; /* fringing capacitance */ double Cf =0.0 ; double Qfd =0.0, Qfs =0.0 ; /* Cqy */ double Ec =0.0, Ec_dVbs =0.0, Ec_dVds =0.0, Ec_dVgs =0.0 ; double Pslk =0.0, Pslk_dVbs =0.0, Pslk_dVds =0.0, Pslk_dVgs =0.0 ; double Qy =0.0 ; double Cqyd=0.0, Cqyg=0.0, Cqys=0.0, Cqyb =0.0 ; double Qy_dVbs =0.0, Qy_dVds =0.0, Qy_dVgs=0.0 ; double Qy_dVbse =0.0, Qy_dVdse=0.0, Qy_dVgse=0.0 ; double Qys=0.0, Qys_dVbse =0.0, Qys_dVdse=0.0, Qys_dVgse=0.0 ; /* PART-4 (junction diode) */ double Ibs =0.0, Ibd =0.0, Gbs =0.0, Gbd =0.0, Gbse =0.0, Gbde =0.0 ; /* junction capacitance */ double Qbs =0.0, Qbd =0.0, Capbs =0.0, Capbd =0.0, Capbse =0.0, Capbde =0.0 ; double czbd =0.0, czbdsw =0.0, czbdswg =0.0, czbs =0.0, czbssw =0.0, czbsswg =0.0 ; double arg =0.0, sarg =0.0 ; /* PART-5 (NQS) */ double tau=0.0, Qi_prev =0.0; double tau_dVgs=0.0, tau_dVds=0.0, tau_dVbs =0.0 ; double tau_dVgse=0.0, tau_dVdse=0.0, tau_dVbse =0.0 ; double Qi_nqs =0.0 ; double Qi_dVbs_nqs=0.0, Qi_dVds_nqs=0.0, Qi_dVgs_nqs =0.0 ; double Qi_dVbse_nqs=0.0, Qi_dVdse_nqs=0.0, Qi_dVgse_nqs =0.0 ; double taub=0.0, Qb_prev =0.0; double taub_dVgs=0.0, taub_dVds=0.0, taub_dVbs =0.0 ; double taub_dVgse=0.0, taub_dVdse=0.0, taub_dVbse =0.0 ; double Qb_nqs =0.0 ; double Qb_dVbs_nqs=0.0, Qb_dVds_nqs=0.0, Qb_dVgs_nqs =0.0 ; double Qb_dVbse_nqs=0.0, Qb_dVdse_nqs=0.0, Qb_dVgse_nqs =0.0 ; /* PART-6 (noise) */ /* 1/f */ double NFalp =0.0, NFtrp =0.0, Cit =0.0, Nflic =0.0 ; double Qi_noi =0.0 , Qiu_noi =0.0 ; /* thermal */ double Eyd=0.0, Mu_Ave=0.0, Nthrml=0.0, Mud_hoso =0.0 ; /* induced gate noise ( Part 0/3 ) */ double kusai00 =0.0, kusaidd =0.0, kusaiL =0.0, kusai00L =0.0 ; int flg_ign = 0 ; double sqrtkusaiL =0.0, kusai_ig =0.0, gds0_ign =0.0, gds0_h2 =0.0, GAMMA =0.0, crl_f =0.0 ; const double c_sqrt_15 = 3.872983346207417e0 ; /* sqrt(15) */ const double Cox_small = 1.0e-6 ; const double c_16o135 = 1.185185185185185e-1 ; /* 16/135 */ double Nign0 =0.0, MuModA =0.0, MuModB =0.0, correct_w1 =0.0 ; /* Bias iteration accounting Rs/Rd */ int lp_bs =0 ; double Ids_last =0.0 ; double vtol_iprv = 2.0e-1 ; double vtol_pprv = 1.01e-1 ; double Vbsc_dif =0.0, Vdsc_dif =0.0, Vgsc_dif =0.0, sum_vdif =0.0 ; double Vbsc_dif2 =0.0, Vdsc_dif2 =0.0, Vgsc_dif2 =0.0, sum_vdif2 =0.0 ; double Rs =0.0, Rd =0.0 ; double Fbs =0.0, Fds =0.0, Fgs =0.0 ; double DJ =0.0, DJI =0.0 ; double JI11 =0.0, JI12 =0.0, JI13 =0.0, JI21 =0.0, JI22 =0.0, JI23 =0.0, JI31 =0.0, JI32 =0.0, JI33 =0.0 ; double dVbs =0.0, dVds =0.0, dVgs =0.0 ; double dV_sum =0.0 ; /* temporary vars. */ double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 = 0.0, T10 = 0.0, T11 = 0.0, T12 ; double TX =0.0, TX_dVbs =0.0, TX_dVds =0.0, TX_dVgs =0.0 ; double TY =0.0, TY_dVbs =0.0, TY_dVds =0.0, TY_dVgs =0.0 ; double T1_dVb =0.0, T1_dVd =0.0, T1_dVg =0.0 ; double T2_dVb =0.0, T2_dVd =0.0, T2_dVg =0.0 ; double T3_dVb =0.0, T3_dVd =0.0, T3_dVg =0.0 ; double T4_dVb =0.0, T4_dVd =0.0, T4_dVg =0.0 ; double T5_dVb =0.0, T5_dVd =0.0, T5_dVg =0.0 ; double T6_dVb =0.0, T6_dVd =0.0, T6_dVg =0.0 ; double T7_dVb =0.0, T7_dVd =0.0, T7_dVg =0.0 ; double T8_dVb =0.0, T8_dVd =0.0, T8_dVg =0.0 ; double T9_dVb =0.0, T9_dVd =0.0, T9_dVg =0.0 ; double T10_dVb =0.0, T10_dVd =0.0, T10_dVg =0.0 ; double T15, T16, T17 ; int flg_zone = 0 ; /* Vdseff */ double Vdseff =0.0, Vdsorg =0.0 ; double Vdseff_dVbs =0.0, Vdseff_dVds =0.0, Vdseff_dVgs =0.0 ; /* G/S and G/D Overlap Charges: Qovs/Qovd */ double Qovd = 0.0, Qovd_dVbse = 0.0, Qovd_dVdse = 0.0, Qovd_dVgse = 0.0 ; double Qovd_dVbs = 0.0, Qovd_dVds = 0.0, Qovd_dVgs = 0.0 ; double Qovs = 0.0, Qovs_dVbse = 0.0, Qovs_dVdse = 0.0, Qovs_dVgse = 0.0 ; double Qovs_dVbs = 0.0, Qovs_dVds = 0.0, Qovs_dVgs = 0.0 ; int lcover = 0, flg_ovloops = 0, flg_ovloopd = 0 ; int flg_overs = 0, flg_overd = 0 ; double VgpLD =0.0 ; double QbdLD = 0.0 , QbdLD_dVbs = 0.0 , QbdLD_dVds = 0.0 , QbdLD_dVgs = 0.0 ; double QidLD = 0.0 , QidLD_dVbs = 0.0 , QidLD_dVds = 0.0 , QidLD_dVgs = 0.0 ; double QbsLD = 0.0 , QbsLD_dVbs = 0.0 , QbsLD_dVds = 0.0 , QbsLD_dVgs = 0.0 ; double QisLD = 0.0 , QisLD_dVbs = 0.0 , QisLD_dVds = 0.0 , QisLD_dVgs = 0.0 ; double QbdLD_dVbse = 0.0 , QbdLD_dVdse = 0.0 , QbdLD_dVgse = 0.0 ; double QidLD_dVbse = 0.0 , QidLD_dVdse = 0.0 , QidLD_dVgse = 0.0 ; double QbsLD_dVbse = 0.0 , QbsLD_dVdse = 0.0 , QbsLD_dVgse = 0.0 ; double QisLD_dVbse = 0.0 , QisLD_dVdse = 0.0 , QisLD_dVgse = 0.0 ; double QbuLD = 0.0 , QbuLD_dVbs = 0.0 , QbuLD_dVds = 0.0 , QbuLD_dVgs = 0.0 ; double QsuLD = 0.0 , QsuLD_dVbs = 0.0 , QsuLD_dVds = 0.0 , QsuLD_dVgs = 0.0 ; double QiuLD = 0.0 , QiuLD_dVbs = 0.0 , QiuLD_dVds = 0.0 , QiuLD_dVgs = 0.0 ; double Ps0LD = 0.0 , Ps0LD_dVds = 0.0 ; double QbuLD_dVxb = 0.0 , QbuLD_dVgb = 0.0 ; double QsuLD_dVxb = 0.0 , QsuLD_dVgb = 0.0 ; int flg_ovzone = 0 ; /* Vgsz for SCE and PGD */ double Vbsz2 =0.0, Vbsz2_dVbs =0.0, Vbsz2_dVds =0.0, Vbsz2_dVgs =0.0 ; /* Multiplication factor of a MOSFET instance */ double M = 1.0 ; /* Mode flag ( = 0 | 1 ) */ double ModeNML =0.0, ModeRVS =0.0 ; /* For Gate Leak Current Partitioning */ double GLPART1 ; double GLPART1_dVgs=0.0, GLPART1_dVds=0.0, GLPART1_dVbs =0.0; double GLPART1_dVgse=0.0, GLPART1_dVdse=0.0, GLPART1_dVbse =0.0; /* IBPC */ double IdsIBPC = 0.0 ; double IdsIBPC_dVbs = 0.0 , IdsIBPC_dVds = 0.0 , IdsIBPC_dVgs = 0.0 ; double IdsIBPC_dVbse = 0.0 , IdsIBPC_dVdse = 0.0 , IdsIBPC_dVgse = 0.0 ; /* Overlap Charge: Qover */ double Vbsgmt =0.0, Vdsgmt =0.0, Vgsgmt =0.0, Vdbgmt =0.0, Vgbgmt =0.0, Vsbgmt =0.0, Vxbgmt =0.0 ; double Vxbgmtcl = 0.0, Vxbgmtcl_dVxbgmt = 0.0 ; double Pb2over =0.0 ; /* Qover Iterative and Analytical Model */ const double large_arg = 80 ; int lp_ld =0 ; double T1_dVxb=0.0, T1_dVgb=0.0, T5_dVxb=0.0, T5_dVgb =0.0 ; double Vgb_fb_LD=0.0, VgpLD_dVgb =0.0 ; double VgpLD_shift=0.0, VgpLD_shift_dVxb=0.0, VgpLD_shift_dVgb =0.0 ; double TX_dVxb=0.0, TX_dVgb=0.0, TY_dVxb=0.0, TY_dVgb =0.0 ; double Ac1_dVxb=0.0, Ac1_dVgb=0.0, Ac2_dVxb=0.0, Ac2_dVgb =0.0 ; double Ac3_dVxb=0.0, Ac3_dVgb=0.0, Ac31_dVxb=0.0, Ac31_dVgb =0.0; double Acd_dVxb=0.0, Acd_dVgb=0.0, Acn_dVxb=0.0, Acn_dVgb =0.0; double Ta = 9.3868e-3, Tb = -0.1047839 ; double Tc=0.0, Tp =0.0 ; double Td=0.0, Td_dVxb=0.0, Td_dVgb =0.0 ; double Tq=0.0, Tq_dVxb=0.0, Tq_dVgb =0.0 ; double Tu=0.0, Tu_dVxb=0.0, Tu_dVgb =0.0 ; double Tv=0.0, Tv_dVxb=0.0, Tv_dVgb =0.0 ; double exp_bVbs_dVxb=0.0, exp_bPs0 =0.0 ; double cnst1over =0.0; double gamma=0.0, gamma_dVxb =0.0; double Chi_dVxb=0.0, Chi_dVgb =0.0 ; double Chi_A=0.0, Chi_A_dVxb=0.0, Chi_A_dVgb =0.0 ; double Chi_B=0.0, Chi_B_dVxb=0.0, Chi_B_dVgb =0.0 ; double Chi_1=0.0, Chi_1_dVxb=0.0, Chi_1_dVgb =0.0 ; double psi_B=0.0, arg_B =0.0 ; double psi=0.0, psi_dVgb=0.0, psi_dVxb =0.0 ; double Ps0_iniA_dVxb=0.0, Ps0_iniA_dVgb =0.0 ; double Ps0_iniB_dVxb=0.0, Ps0_iniB_dVgb =0.0 ; double Psa_dVxb=0.0, Psa_dVgb=0.0, Ps0LD_dVxb=0.0, Ps0LD_dVgb =0.0 ; double fs02_dVxb=0.0, fs02_dVgb =0.0 ; /* SCE LOOP */ double A =0.0, A_dVgs=0.0, A_dVds=0.0, A_dVbs =0.0 ; int NNN =0 ; double PS0_SCE=0 , PS0_SCE_dVgs = 0 , PS0_SCE_dVds = 0 , PS0_SCE_dVbs = 0 ; double PS0Z_SCE=0 , PS0Z_SCE_dVgs = 0 , PS0Z_SCE_dVds = 0 , PS0Z_SCE_dVbs = 0 ; /* double arg0 = 0.01 , arg1 = 0.04 ; */ double arg0 = 0.01 ; double arg2 = here->HSM2_2qnsub_esi * 1.0e-4 ; int MAX_LOOP_SCE =0 ; int codqb = 0 ; int corecip = model->HSM2_corecip ; int START_OF_SCE_LOOP = 1 , end_of_part_1 = 0 ; /* modify Qy in accumulation region */ double Aclm_eff=0.0, Aclm_eff_dVds=0.0, Aclm_eff_dVgs=0.0, Aclm_eff_dVbs =0.0 ; double Idd1 =0.0, Idd1_dVbs =0.0, Idd1_dVgs =0.0, Idd1_dVds =0.0 ; double tcjbs=0.0, tcjbssw=0.0, tcjbsswg=0.0, tcjbd=0.0, tcjbdsw=0.0, tcjbdswg=0.0 ; double TTEMP =0.0 ; double PS0_SCE_tol = 4.0e-7 ; double PS0_SCE_deriv_tol = 1.0e-8 ; double Ps0_ini_dVds =0.0, Ps0_ini_dVgs =0.0, Ps0_ini_dVbs =0.0 ; double Ps0_iniA_dVds =0.0, Ps0_iniA_dVgs =0.0, Ps0_iniA_dVbs =0.0 ; double Ps0_iniB_dVds =0.0, Ps0_iniB_dVgs =0.0, Ps0_iniB_dVbs =0.0 ; double A_dPS0Z = 0.0, dqb_dPS0Z = 0.0, dVth_dPS0Z = 0.0, dVth0_dPS0Z = 0.0, dVthLP_dPS0Z = 0.0, dVthSC_dPS0Z = 0.0, Qbmm_dPS0Z = 0.0, Vgp_dPS0Z = 0.0, Vgpz_dPS0Z = 0.0, Vthp_dPS0Z = 0.0, Vth0_dPS0Z = 0.0 ; double T1_dPS0Z=0.0, T3_dPS0Z=0.0, T4_dPS0Z=0.0, T5_dPS0Z=0.0, T6_dPS0Z=0.0, T7_dPS0Z=0.0, T8_dPS0Z=0.0, T9_dPS0Z=0.0, T10_dPS0Z=0.0, TX_dPS0Z =0.0 ; double Ac1_dPS0Z=0.0, Ac2_dPS0Z=0.0, Ac3_dPS0Z=0.0, Ac31_dPS0Z=0.0, Acd_dPS0Z=0.0, Acn_dPS0Z=0.0, Chi_dPS0Z=0.0, Psa_dPS0Z =0.0 ; double Fs0_dPS0Z=0.0, Fsl_dPS0Z=0.0, Ps0_dPS0Z=0.0, Psl_dPS0Z=0.0, Pds_dPS0Z=0.0, Pzadd_dPS0Z=0.0, Ps0z_dPS0Z =0.0 ; double G=0.0, delta_PS0Z_SCE=0.0, delta_PS0Z_SCE_dVds=0.0, delta_PS0Z_SCE_dVgs=0.0, delta_PS0Z_SCE_dVbs =0.0 ; double Vgs_min =0.0 ; /*================ Start of executable code.=================*/ if (here->HSM2_mode == HiSIM_NORMAL_MODE) { ModeNML = 1.0 ; ModeRVS = 0.0 ; } else { ModeNML = 0.0 ; ModeRVS = 1.0 ; } T1 = vbs + vds + vgs + vbd_jct + vbs_jct ; if ( ! finite (T1) ) { fprintf (stderr , "*** warning(HiSIM): Unacceptable Bias(es).\n" ) ; fprintf (stderr , "----- bias information (HiSIM)\n" ) ; fprintf (stderr , "name: %s\n" , here->HSM2name ) ; fprintf (stderr , "states: %d\n" , here->HSM2states ) ; fprintf (stderr , "vds= %12.5e vgs=%12.5e vbs=%12.5e\n" , vds , vgs , vbs ) ; fprintf (stderr , "vbs_jct= %12.5e vbd_jct= %12.5e\n" , vbs_jct , vbd_jct ) ; fprintf (stderr , "vd= %12.5e vg= %12.5e vb= %12.5e vs= %12.5e\n" , *( ckt->CKTrhsOld + here->HSM2dNodePrime ) , *( ckt->CKTrhsOld + here->HSM2gNodePrime ) , *( ckt->CKTrhsOld + here->HSM2bNodePrime ) , *( ckt->CKTrhsOld + here->HSM2sNodePrime ) ) ; if ( here->HSM2_called >= 1 ) { fprintf (stderr , "vdsc_prv= %12.5e vgsc_prv=%12.5e vbsc_prv=%12.5e\n" , here->HSM2_vdsc_prv , here->HSM2_vgsc_prv , here->HSM2_vbsc_prv ) ; } fprintf (stderr , "----- bias information (end)\n" ) ; return ( HiSIM_ERROR ) ; } flg_info = model->HSM2_info ; flg_nqs = model->HSM2_conqs ; /*-----------------------------------------------------------* * Start of the routine. (label) *-----------------*/ /*start_of_routine:*/ TTEMP = ckt->CKTtemp ; if ( here->HSM2_dtemp_Given ) { TTEMP = TTEMP + here->HSM2_dtemp ; } beta = here->HSM2_beta ; /* Inverse of the thermal voltage */ beta_inv = here->HSM2_beta_inv ; beta2 = here->HSM2_beta2 ; /* Bandgap */ Egp12 = here->HSM2_egp12 ; Egp32 = here->HSM2_egp32 ; /* Metallurgical channel geometry */ Leff = here->HSM2_leff ; Weff = here->HSM2_weff ; /* Flat band voltage */ Vfb = pParam->HSM2_vfbc ; /* Surface impurity profile */ q_Nsub = here->HSM2_qnsub ; /* Velocity Temperature Dependence */ Vmax = here->HSM2_vmax ; /* 2 phi_B */ Pb2 = here->HSM2_pb2 ; Pb20 = here->HSM2_pb20 ; Pb2c = here->HSM2_pb2c ; /* Coefficient of the F function for bulk charge */ cnst0 = here->HSM2_cnst0 ; /* cnst1: n_{p0} / p_{p0} */ cnst1 = here->HSM2_cnst1 ; /* c_eox: Permitivity in ox */ c_eox = here->HSM2_cecox ; /* Tox and Cox without QME */ Tox0 = model->HSM2_tox ; Cox0 = c_eox / Tox0 ; Cox0_inv = 1.0 / Cox0 ; /* for calculation of Ps0_min */ Vgs_min = model->HSM2_type * model->HSM2_Vgsmin ; /*-----------------------------------------------------------* * Exchange bias conditions according to MOS type. * - Vxse are external biases for HiSIM. ( type=NMOS , Vds >= 0 * are assumed.) *-----------------*/ Vbse = vbs ; Vdse = vds ; Vgse = vgs ; /*---------------------------------------------------* * Clamp too large biases. * -note: Quantities are extrapolated in PART-5. *-----------------*/ if ( Pb2 - model->HSM2_vzadd0 < Vbs_max ) { Vbs_max = Pb2 - model->HSM2_vzadd0 ; } if ( Pb20 - model->HSM2_vzadd0 < Vbs_max ) { Vbs_max = Pb20 - model->HSM2_vzadd0 ; } if ( Pb2c - model->HSM2_vzadd0 < Vbs_max ) { Vbs_max = Pb2c - model->HSM2_vzadd0 ; } if ( Vbs_bnd > Vbs_max * 0.5 ) { Vbs_bnd = 0.5 * Vbs_max ; } if ( Vbse > Vbs_bnd ) { flg_vbsc = 1 ; T1 = Vbse - Vbs_bnd ; T2 = Vbs_max - Vbs_bnd ; Fn_SUPoly4m( TY , T1 , T2 , Vbsc_dVbse , T0 ) ; Vbsc = Vbs_bnd + TY ; T3 = 1 / T2 ; /* x/xmax */ T4 = T1 * T3 ; T4_dVb = T3 ; T5 = T4 * T4; T5_dVb = 2 * T4_dVb * T4 ; T15 = 2 * T4_dVb * T4_dVb ; /* T15 = T5_dVb_dVb */ T6 = T4 * T5 ; T6_dVb = T4_dVb * T5 + T4 * T5_dVb ; T16 = T4_dVb * T5_dVb + T4_dVb * T5_dVb + T4 * T15 ; /* T16 = T6_dVb_dVb */ /* T7 = Z T7_dVb = dZ_dVb T17 = dZ_dVb_dVb */ T7 = 1 + T4 + T5 + T6 + T5 * T5 ; T7_dVb = T4_dVb + T5_dVb + T6_dVb + 2 * T5_dVb * T5 ; T17 = T15 + T16 + 2 * T15 * T5 + 2 * T5_dVb * T5_dVb ; T8 = T7 * T7 ; T8_dVb = 2 * T7_dVb * T7 ; T9 = 1 / T8 ; T9_dVb = - T8_dVb * T9 * T9 ; Vbsc_dVbse = T2 * T7_dVb * T9 ; Vbsc_dVbse_dVbs = T2 * ( T17 * T9 + T7_dVb * T9_dVb ) ; } else if ( Vbse < Vbs_min ) { flg_vbsc = -1 ; Vbsc = Vbs_min ; Vbsc_dVbse_dVbs = 0.0 ; } else { flg_vbsc = 0 ; Vbsc = Vbse ; Vbsc_dVbse = 1.0 ; Vbsc_dVbse_dVbs = 0.0 ; } Vdsc = Vdse ; Vgsc = Vgse ; if (here->HSM2_rs > 0.0 || here->HSM2_rd > 0.0) { if ( model->HSM2_corsrd == 1 ) flg_rsrd = 1 ; if ( model->HSM2_corsrd == 2 ) flg_rsrd = 2 ; } /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * PART-1: Basic device characteristics. *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++* * Prepare for potential initial guesses using previous values *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ flg_pprv = 0 ; if ( here->HSM2_called >= 1 ) { Vbsc_dif = Vbsc - here->HSM2_vbsc_prv ; Vdsc_dif = Vdsc - here->HSM2_vdsc_prv ; Vgsc_dif = Vgsc - here->HSM2_vgsc_prv ; sum_vdif = fabs( Vbsc_dif ) + fabs( Vdsc_dif ) + fabs( Vgsc_dif ) ; if ( model->HSM2_copprv >= 1 && sum_vdif <= vtol_pprv && here->HSM2_mode * here->HSM2_mode_prv > 0 ) { flg_pprv = 1 ;} if ( here->HSM2_called >= 2 && flg_pprv == 1 ) { Vbsc_dif2 = here->HSM2_vbsc_prv - here->HSM2_vbsc_prv2 ; Vdsc_dif2 = here->HSM2_vdsc_prv - here->HSM2_vdsc_prv2 ; Vgsc_dif2 = here->HSM2_vgsc_prv - here->HSM2_vgsc_prv2 ; sum_vdif2 = fabs( Vbsc_dif2 ) + fabs( Vdsc_dif2 ) + fabs( Vgsc_dif2 ) ; if ( epsm10 < sum_vdif2 && sum_vdif2 <= vtol_pprv && here->HSM2_mode_prv * here->HSM2_mode_prv2 > 0 ) { flg_pprv = 2 ; } } } else { Vbsc_dif = 0.0 ; Vdsc_dif = 0.0 ; Vgsc_dif = 0.0 ; sum_vdif = 0.0 ; Vbsc_dif2 = 0.0 ; Vdsc_dif2 = 0.0 ; Vgsc_dif2 = 0.0 ; sum_vdif2 = 0.0 ; flg_iprv = 0 ; flg_pprv = 0 ; } dVbs = Vbsc_dif ; dVds = Vdsc_dif ; dVgs = Vgsc_dif ; if ( flg_pprv >= 1 ) { Ps0 = here->HSM2_ps0_prv ; Ps0_dVbs = here->HSM2_ps0_dvbs_prv ; Ps0_dVds = here->HSM2_ps0_dvds_prv ; Ps0_dVgs = here->HSM2_ps0_dvgs_prv ; Pds = here->HSM2_pds_prv ; Pds_dVbs = here->HSM2_pds_dvbs_prv ; Pds_dVds = here->HSM2_pds_dvds_prv ; Pds_dVgs = here->HSM2_pds_dvgs_prv ; } /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++* * Bias loop: iteration to solve the system of equations of * the small circuit taking into account Rs and Rd. * - Vxs are internal (or effective) biases. * - Equations: * Vbs = Vbsc - Rs * Ids * Vds = Vdsc - ( Rs + Rd ) * Ids * Vgs = Vgsc - Rs * Ids *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ if ( flg_rsrd == 1 ) { if (here->HSM2_mode == HiSIM_NORMAL_MODE) { Rs = here->HSM2_rs ; Rd = here->HSM2_rd ; } else { Rs = here->HSM2_rd ; Rd = here->HSM2_rs ; } if ( here->HSM2_called >= 1 ) { if ( model->HSM2_coiprv >= 1 && 0.0 < sum_vdif && sum_vdif <= vtol_iprv ) { flg_iprv = 1 ;} } /*-----------------------------------------------------------* * Initial guesses using the previous values. *-----------------*/ if ( flg_iprv == 1 ) { here->HSM2_ids_dvbs_prv = Fn_Max( 0.0 , here->HSM2_ids_dvbs_prv ) ; here->HSM2_ids_dvds_prv = Fn_Max( 0.0 , here->HSM2_ids_dvds_prv ) ; here->HSM2_ids_dvgs_prv = Fn_Max( 0.0 , here->HSM2_ids_dvgs_prv ) ; dVbs = Vbsc_dif * ( 1.0 - 1.0 / ( 1.0 + Rs * here->HSM2_ids_dvbs_prv ) ) ; dVds = Vdsc_dif * ( 1.0 - 1.0 / ( 1.0 + ( Rs + Rd ) * here->HSM2_ids_dvds_prv ) ) ; dVgs = Vgsc_dif * ( 1.0 - 1.0 / ( 1.0 + Rs * here->HSM2_ids_dvgs_prv ) ) ; Ids = here->HSM2_ids_prv + here->HSM2_ids_dvbs_prv * dVbs + here->HSM2_ids_dvds_prv * dVds + here->HSM2_ids_dvgs_prv * dVgs ; T1 = ( Ids - here->HSM2_ids_prv ) ; T2 = fabs( T1 ) ; if ( Ids_maxvar * here->HSM2_ids_prv < T2 ) { Ids = here->HSM2_ids_prv * ( 1.0 + Fn_Sgn( T1 ) * Ids_maxvar ) ; } if ( Ids < 0 ) Ids = 0.0 ; } else { Ids = 0.0 ; if ( flg_pprv >= 1 ) { dVbs = Vbsc_dif ; dVds = Vdsc_dif ; dVgs = Vgsc_dif ; } } /* end of flg_iprv if-blocks */ Vbs = Vbsc - Ids * Rs ; Vds = Vdsc - Ids * ( Rs + Rd ) ; if ( Vds * Vdsc <= 0.0 ) { Vds = 0.0 ; } Vgs = Vgsc - Ids * Rs ; } else { lp_bs_max = 1 ; Ids = 0.0 ; Vbs = Vbsc ; Vds = Vdsc ; Vgs = Vgsc ; } /* end of flg_rsrd if-blocks */ if( model->HSM2_codep == 1 ) { /*---------------------------------------------------* * CODEP=1 : Depletion mode MOSFET *-----------------*/ /*-----------------------------------------------------------* * Vxsz: Modified bias introduced to realize symmetry at Vds=0. *-----------------*/ T1 = Vbsc_dVbse * Vds / 2 ; Fn_SymAdd( Vzadd , T1 , model->HSM2_vzadd0 , T2 ) ; Vzadd_dVbs = T2 * Vbsc_dVbse_dVbs * Vds / 2 ; T2 *= Vbsc_dVbse / 2 ; Vzadd_dVds = T2 ; if ( Vzadd < ps_conv ) { Vzadd = ps_conv ; Vzadd_dVds = 0.0 ; Vzadd_dVbs = 0.0 ; } Vbsz = Vbs + Vzadd ; Vbsz_dVbs = 1.0 ; Vbsz_dVds = Vzadd_dVds ; Vdsz = Vds + 2.0 * Vzadd ; Vdsz_dVbs = 0.0 ; Vdsz_dVds = 1.0 + 2.0 * Vzadd_dVds ; Vgsz = Vgs + Vzadd ; Vgsz_dVgs = 1.0 ; Vgsz_dVbs = 0.0 ; Vgsz_dVds = Vzadd_dVds ; /*---------------------------------------------------* * Factor of modification for symmetry. *-----------------*/ T1 = here->HSM2_qnsub_esi * Cox0_inv * Cox0_inv ; T2 = Vgs - Vfb ; T3 = 1 + 2.0 / T1 * ( T2 - beta_inv - Vbs ) ; Fn_SZ( T4 , T3 , 1e-3 , T5 ) ; TX = sqrt( T4 ) ; Pslsat = T2 + T1 * ( 1.0 - TX ) ; VdsatS = Pslsat - Pb2 ; Fn_SL( VdsatS , VdsatS , 0.1 , 5e-2 , T6 ) ; VdsatS_dVbs = ( TX ? (T6 * T5 / TX ) : 0.0 ) ; VdsatS_dVds = 0.0 ; VdsatS_dVgs = ( TX ? (T6 * ( 1.0 - T5 / TX )) : 0.0 ) ; T1 = Vds / VdsatS ; Fn_SUPoly4( TX , T1 , 1.0 , T0 ) ; FMDVDS = TX * TX ; T2 = 2 * TX * T0 ; T3 = T2 / ( VdsatS * VdsatS ) ; FMDVDS_dVbs = T3 * ( - Vds * VdsatS_dVbs ) ; FMDVDS_dVds = T3 * ( 1.0 * VdsatS - Vds * VdsatS_dVds ) ; FMDVDS_dVgs = T3 * ( - Vds * VdsatS_dVgs ) ; /*-----------------------------------------------------------* * Quantum effect *-----------------*/ if ( model->HSM2_flg_qme == 0 ) { flg_qme = 0 ; } else { flg_qme = 1 ; } T1 = here->HSM2_2qnsub_esi ; T2 = sqrt( T1 * Pb20 ) ; Vthq = Pb20 + Vfb + T2 * Cox0_inv ; Vthq_dVb = 0.0 ; Vthq_dVd = 0.0 ; if ( flg_qme == 0 ) { Tox = Tox0 ; Tox_dVb = 0.0 ; Tox_dVd = 0.0 ; Tox_dVg = 0.0 ; Cox = Cox0 ; Cox_dVb = 0.0 ; Cox_dVd = 0.0 ; Cox_dVg = 0.0 ; Cox_inv = Cox0_inv ; Cox_inv_dVb = 0.0 ; Cox_inv_dVd = 0.0 ; Cox_inv_dVg = 0.0 ; T0 = cnst0 * cnst0 * Cox_inv ; cnstCoxi = T0 * Cox_inv ; cnstCoxi_dVb = 0.0 ; cnstCoxi_dVd = 0.0 ; cnstCoxi_dVg = 0.0 ; } else { T5 = Vgs - Vbs - Vthq + model->HSM2_qme2 ; T5_dVb = -1.0 - Vthq_dVb ; T5_dVd = - Vthq_dVd ; T5_dVg = 1.0 ; Fn_SZ( T2 , T5 , qme_dlt, T3) ; T2 = T2 + small ; T2_dVb = T3 * T5_dVb ; T2_dVd = T3 * T5_dVd ; T2_dVg = T3 * T5_dVg ; T3 = 1.0 / T2 ; T7 = -1.0 / ( T2 * T2 ) ; T3_dVb = T7 * T2_dVb ; T3_dVd = T7 * T2_dVd ; T3_dVg = T7 * T2_dVg ; T4 = 2.0 * fabs(Vthq) ; T6 = Vfb - Vthq + model->HSM2_qme2 ; if(T6 > T4) { T4 = T6; } Fn_SU( T2 , T3 , 1.0 / T4 , qme_dlt, T6 ) ; T2_dVb = T6 * T3_dVb ; T2_dVd = T6 * T3_dVd ; T2_dVg = T6 * T3_dVg ; dTox = model->HSM2_qme1 * T2 + model->HSM2_qme3 ; T7 = model->HSM2_qme1 ; dTox_dVb = T7 * T2_dVb ; dTox_dVd = T7 * T2_dVd ; dTox_dVg = T7 * T2_dVg ; if ( dTox * 1.0e12 < Tox0 ) { dTox = 0.0 ; dTox_dVb = 0.0 ; dTox_dVd = 0.0 ; dTox_dVg = 0.0 ; flg_qme = 0 ; } Tox = Tox0 + dTox ; Tox_dVb = dTox_dVb ; Tox_dVd = dTox_dVd ; Tox_dVg = dTox_dVg ; Cox = c_eox / Tox ; T1 = - c_eox / ( Tox * Tox ) ; Cox_dVb = T1 * Tox_dVb ; Cox_dVd = T1 * Tox_dVd ; Cox_dVg = T1 * Tox_dVg ; Cox_inv = Tox / c_eox ; T1 = 1.0 / c_eox ; Cox_inv_dVb = T1 * Tox_dVb ; Cox_inv_dVd = T1 * Tox_dVd ; Cox_inv_dVg = T1 * Tox_dVg ; T0 = cnst0 * cnst0 * Cox_inv ; cnstCoxi = T0 * Cox_inv ; T1 = 2.0 * T0 ; cnstCoxi_dVb = T1 * Cox_inv_dVb ; cnstCoxi_dVd = T1 * Cox_inv_dVd ; cnstCoxi_dVg = T1 * Cox_inv_dVg ; } fac1 = cnst0 * Cox_inv ; fac1_dVds = cnst0 * Cox_inv_dVd ; fac1_dVgs = cnst0 * Cox_inv_dVg ; fac1_dVbs = cnst0 * Cox_inv_dVb ; fac1p2 = fac1 * fac1 ; /* Ps0_min: approx. solution of Poisson equation at Vgs_min */ /* ( easy to improve, if necessary ) */ Ps0_min = 2.0 * beta_inv * log(-Vgs_min/fac1) ; Ps0_min_dVds = -2.0 * beta_inv * fac1_dVds / fac1 ; Ps0_min_dVgs = -2.0 * beta_inv * fac1_dVgs / fac1 ; Ps0_min_dVbs = -2.0 * beta_inv * fac1_dVbs / fac1 ; /*---------------------------------------------------* * Vbsz2 : Vbs for dVth *-----------------*/ Vbsz2 = Vbsz ; Vbsz2_dVbs = Vbsz_dVbs ; Vbsz2_dVds = Vbsz_dVds ; Vbsz2_dVgs = 0.0 ; /*---------------------------------------------------* * Vthp : Vth with pocket. *-----------------*/ T1 = here->HSM2_2qnsub_esi ; Qb0 = sqrt (T1 * (Pb20 - Vbsz2)) ; T2 = 0.5 * T1 / Qb0 ; Qb0_dVb = T2 * (- Vbsz2_dVbs) ; Qb0_dVd = T2 * (- Vbsz2_dVds) ; Qb0_dVg = T2 * (- Vbsz2_dVgs) ; Vthp = Pb20 + Vfb + Qb0 * Cox_inv + here->HSM2_ptovr; Vthp_dVb = Qb0_dVb * Cox_inv + Qb0 * Cox_inv_dVb ; Vthp_dVd = Qb0_dVd * Cox_inv + Qb0 * Cox_inv_dVd ; Vthp_dVg = Qb0_dVg * Cox_inv + Qb0 * Cox_inv_dVg ; Pb20b = Pb20 ; Pb20b_dVb = 0.0 ; Pb20b_dVd = 0.0 ; Pb20b_dVg = 0.0 ; T0 = 0.95 ; T1 = T0 * Pb20b - Vbsz2 - 1.0e-3 ; T1_dVb = T0 * Pb20b_dVb - Vbsz2_dVbs ; T1_dVd = T0 * Pb20b_dVd - Vbsz2_dVds ; T1_dVg = T0 * Pb20b_dVg - Vbsz2_dVgs ; T2 = sqrt (T1 * T1 + 4.0 * T0 * Pb20b * 1.0e-3) ; T3 = T0 * Pb20b - 0.5 * (T1 + T2) ; T4 = 2.0 * T0 * 1.0e-3 ; T5 = T1 / T2 ; T6 = T4 / T2 ; T3_dVb = T0 * Pb20b_dVb - 0.5 * (T1_dVb + (T1_dVb * T5 + T6 * Pb20b_dVb ) ) ; T3_dVd = T0 * Pb20b_dVd - 0.5 * (T1_dVd + (T1_dVd * T5 + T6 * Pb20b_dVd ) ) ; T3_dVg = T0 * Pb20b_dVg - 0.5 * (T1_dVg + (T1_dVg * T5 + T6 * Pb20b_dVg ) ) ; Pbsum = Pb20b - T3 ; Pbsum_dVb = Pb20b_dVb - T3_dVb ; Pbsum_dVd = Pb20b_dVd - T3_dVd ; Pbsum_dVg = Pb20b_dVg - T3_dVg ; if( model->HSM2_codep ) { Pbsum = Pbsum + model->HSM2_depeta * Vdsz ; Pbsum_dVb = Pbsum_dVb + model->HSM2_depeta * Vdsz_dVbs ; Pbsum_dVd = Pbsum_dVd + model->HSM2_depeta * Vdsz_dVds ; } sqrt_Pbsum = sqrt( Pbsum ) ; /*-------------------------------------------* * dVthLP : Short-channel effect induced by pocket. * - Vth0 : Vth without pocket. *-----------------*/ if ( model->HSM2_lp != 0.0 ) { T1 = here->HSM2_2qnsub_esi ; T2 = model->HSM2_bs2 - Vbsz2 ; T3 = T2 + small ; T4 = sqrt (T3 * T3 + 4.0 * vth_dlt) ; T5 = 0.5 * (T3 + T4) ; T6 = 0.5 * (1.0 + T3 / T4) ; T5_dVb = - Vbsz2_dVbs * T6 ; T5_dVd = - Vbsz2_dVds * T6 ; T5_dVg = - Vbsz2_dVgs * T6 ; T7 = 1.0 / T5 ; bs12 = model->HSM2_bs1 * T7 ; T8 = - bs12 * T7 ; bs12_dVb = T8 * T5_dVb ; bs12_dVd = T8 * T5_dVd ; bs12_dVg = T8 * T5_dVg ; Fn_SU( T10 , Vbsz2 + bs12, 0.93 * Pb20, vth_dlt, T0) ; Qbmm = sqrt (T1 * (Pb20 - T10 )) ; T9 = T0 / Qbmm ; Qbmm_dVb = 0.5 * T1 * - (Vbsz2_dVbs + bs12_dVb) * T9 ; Qbmm_dVd = 0.5 * T1 * - (Vbsz2_dVds + bs12_dVd) * T9 ; Qbmm_dVg = 0.5 * T1 * - (Vbsz2_dVgs + bs12_dVg) * T9 ; dqb = (Qb0 - Qbmm) * Cox_inv ; dqb_dVb = Vthp_dVb - Qbmm_dVb * Cox_inv - Qbmm * Cox_inv_dVb ; dqb_dVd = Vthp_dVd - Qbmm_dVd * Cox_inv - Qbmm * Cox_inv_dVd ; dqb_dVg = Vthp_dVg - Qbmm_dVg * Cox_inv - Qbmm * Cox_inv_dVg ; T1 = 2.0 * C_QE * here->HSM2_nsubc * C_ESI ; T2 = sqrt( T1 * ( Pb2c - Vbsz2 ) ) ; Vth0 = Pb2c + Vfb + T2 * Cox_inv ; T3 = 0.5 * T1 / T2 * Cox_inv ; Vth0_dVb = T3 * ( - Vbsz2_dVbs ) + T2 * Cox_inv_dVb ; Vth0_dVd = T3 * ( - Vbsz2_dVds ) + T2 * Cox_inv_dVd ; Vth0_dVg = T3 * ( - Vbsz2_dVgs ) + T2 * Cox_inv_dVg ; T1 = C_ESI * Cox_inv ; T2 = here->HSM2_wdplp ; T4 = 1.0e0 / ( model->HSM2_lp * model->HSM2_lp ) ; T5 = 2.0e0 * ( model->HSM2_vbi - Pb20b ) * T1 * T2 * T4 ; dVth0 = T5 * sqrt_Pbsum ; T6 = 0.5 * T5 / sqrt_Pbsum ; T7 = 2.0e0 * ( model->HSM2_vbi - Pb20b ) * C_ESI * T2 * T4 * sqrt_Pbsum ; T8 = - 2.0e0 * T1 * T2 * T4 * sqrt_Pbsum ; dVth0_dVb = T6 * Pbsum_dVb + T7 * Cox_inv_dVb + T8 * Pb20b_dVb ; dVth0_dVd = T6 * Pbsum_dVd + T7 * Cox_inv_dVd + T8 * Pb20b_dVd ; dVth0_dVg = T6 * Pbsum_dVg + T7 * Cox_inv_dVg + T8 * Pb20b_dVg ; T1 = Vthp - Vth0 ; T1_dVb = Vthp_dVb - Vth0_dVb ; T2 = pParam->HSM2_scp1 + pParam->HSM2_scp3 * Pbsum / model->HSM2_lp ; T2_dVb = pParam->HSM2_scp3 * Pbsum_dVb / model->HSM2_lp ; T3 = T2 + pParam->HSM2_scp2 * Vdsz ; T3_dVb = T2_dVb + pParam->HSM2_scp2 * Vdsz_dVbs ; Vdx = model->HSM2_scp21 + Vdsz ; Vdx_dVbs = Vdsz_dVbs ; Vdx2 = Vdx * Vdx ; Vdx2_dVbs = 2 * Vdx_dVbs * Vdx ; dVthLP = T1 * dVth0 * T3 + dqb - here->HSM2_msc / Vdx2 ; dVthLP_dVb = T1_dVb * dVth0 * T3 + T1 * dVth0_dVb * T3 + T1 * dVth0 * T3_dVb + dqb_dVb + here->HSM2_msc / Vdx2 /Vdx2 *Vdx2_dVbs; T4 = T1 * dVth0 * pParam->HSM2_scp3 / model->HSM2_lp ; dVthLP_dVd = (Vthp_dVd - Vth0_dVd) * dVth0 * T3 + T1 * dVth0_dVd * T3 + T4 * Pbsum_dVd + T1 * dVth0 * pParam->HSM2_scp2 * Vdsz_dVds + dqb_dVd + 2.0e0 * here->HSM2_msc * Vdx * Vdsz_dVds / ( Vdx2 * Vdx2 ) ; dVthLP_dVg = (Vthp_dVg - Vth0_dVg) * dVth0 * T3 + T1 * dVth0_dVg * T3 + T4 * Pbsum_dVg + dqb_dVg ; } else { dVthLP = 0.0e0 ; dVthLP_dVb = 0.0e0 ; dVthLP_dVd = 0.0e0 ; dVthLP_dVg = 0.0e0 ; } /*---------------------------------------------------* * dVthSC : Short-channel effect induced by Vds. *-----------------*/ T1 = C_ESI * Cox_inv ; T2 = here->HSM2_wdpl ; T3 = here->HSM2_lgate - model->HSM2_parl2 ; T4 = 1.0e0 / ( T3 * T3 ) ; T5 = 2.0e0 * ( model->HSM2_vbi - Pb20b ) * T1 * T2 * T4 ; dVth0 = T5 * sqrt_Pbsum ; T6 = T5 / 2.0 / sqrt_Pbsum ; T7 = 2.0e0 * ( model->HSM2_vbi - Pb20b ) * C_ESI * T2 * T4 * sqrt_Pbsum ; T8 = - 2.0e0 * T1 * T2 * T4 * sqrt_Pbsum ; dVth0_dVb = T6 * Pbsum_dVb + T7 * Cox_inv_dVb + T8 * Pb20b_dVb ; dVth0_dVd = T6 * Pbsum_dVd + T7 * Cox_inv_dVd + T8 * Pb20b_dVd ; dVth0_dVg = T6 * Pbsum_dVg + T7 * Cox_inv_dVg + T8 * Pb20b_dVg ; T1 = pParam->HSM2_sc3 / here->HSM2_lgate ; T4 = pParam->HSM2_sc1 + T1 * Pbsum ; T4_dVb = T1 * Pbsum_dVb ; T4_dVd = T1 * Pbsum_dVd ; T4_dVg = T1 * Pbsum_dVg ; T5 = T4 + pParam->HSM2_sc2 * Vdsz * ( 1.0 + model->HSM2_sc4 * Pbsum ); T5_dVb = T4_dVb + pParam->HSM2_sc2 * Vdsz * model->HSM2_sc4 * Pbsum_dVb + pParam->HSM2_sc2 * Vdsz_dVbs * model->HSM2_sc4 * Pbsum; T5_dVd = T4_dVd + pParam->HSM2_sc2 * Vdsz_dVds * ( 1.0 + model->HSM2_sc4 * Pbsum ) + pParam->HSM2_sc2 * Vdsz * model->HSM2_sc4 * Pbsum_dVd; T5_dVg = T4_dVg + pParam->HSM2_sc2 * Vdsz * model->HSM2_sc4 * Pbsum_dVg; dVthSC = dVth0 * T5 ; dVthSC_dVb = dVth0_dVb * T5 + dVth0 * T5_dVb ; dVthSC_dVd = dVth0_dVd * T5 + dVth0 * T5_dVd ; dVthSC_dVg = dVth0_dVg * T5 + dVth0 * T5_dVg ; /*---------------------------------------------------* * dVthW : narrow-channel effect. *-----------------*/ T1 = 1.0 / Cox ; T2 = T1 * T1 ; T3 = 1.0 / ( Cox + pParam->HSM2_wfc / Weff ) ; T4 = T3 * T3 ; T5 = T1 - T3 ; T6 = Qb0 * ( T2 - T4 ) ; dVthW = Qb0 * T5 + pParam->HSM2_wvth0 / here->HSM2_wg ; dVthW_dVb = Qb0_dVb * T5 - Cox_dVb * T6 ; dVthW_dVd = Qb0_dVd * T5 - Cox_dVd * T6 ; dVthW_dVg = - Cox_dVg * T6 ; /*---------------------------------------------------* * dVth : Total variation. * - Positive dVth means the decrease in Vth. *-----------------*/ dVth = dVthSC + dVthLP + dVthW + here->HSM2_dVthsm ; dVth_dVb = dVthSC_dVb + dVthLP_dVb + dVthW_dVb ; dVth_dVd = dVthSC_dVd + dVthLP_dVd + dVthW_dVd ; dVth_dVg = dVthSC_dVg + dVthLP_dVg + dVthW_dVg ; /*---------------------------------------------------* * Vth : Threshold voltagei for OP. *-----------------*/ T2 = sqrt( here->HSM2_2qnsub_esi * (Pb2-Vbsz) ) ; Vth = Pb2 + Vfb + T2 * Cox0_inv - dVth ; /*-----------------------------------------------------------* * Constants in the equation of Ps0 . *-----------------*/ fac1 = cnst0 * Cox_inv ; fac1_dVbs = cnst0 * Cox_inv_dVb ; fac1_dVds = cnst0 * Cox_inv_dVd ; fac1_dVgs = cnst0 * Cox_inv_dVg ; fac1p2 = fac1 * fac1 ; /*---------------------------------------------------* * Poly-Depletion Effect *-----------------*/ dPpg = 0.0 ; dPpg_dVb = 0.0 ; dPpg_dVd = 0.0 ; dPpg_dVg = 0.0 ; if ( here->HSM2_flg_pgd == 1 ) { T7 = Vgsz ; T7_dVb = Vgsz_dVbs ; T7_dVd = Vgsz_dVds ; T7_dVg = Vgsz_dVgs ; T0 = here->HSM2_cnstpgd ; T3 = T7 - model->HSM2_pgd2 ; T3_dVb = T7_dVb ; T3_dVd = T7_dVd ; T3_dVg = T7_dVg ; Fn_ExpLim( dPpg , T3 , T6 ) ; dPpg_dVb = T6 * T3_dVb ; dPpg_dVd = T6 * T3_dVd ; dPpg_dVg = T6 * T3_dVg ; Fn_SZ( dPpg , dPpg - 1.0 , pol_dlt , T6 ) ; dPpg_dVb *= T6 ; dPpg_dVd *= T6 ; dPpg_dVg *= T6 ; dPpg *= T0 ; dPpg_dVb *= T0 ; dPpg_dVd *= T0 ; dPpg_dVg *= T0 ; Fn_SU( dPpg , dPpg , pol_b , pol_dlt , T9 ) ; dPpg_dVb *= T9 ; dPpg_dVd *= T9 ; dPpg_dVg *= T9 ; } /*---------------------------------------------------* * Vgp : Effective gate bias with SCE & RSCE & flatband. *-----------------*/ Vgp = Vgs - Vfb + dVth - dPpg ; Vgp_dVbs = dVth_dVb - dPpg_dVb ; Vgp_dVds = dVth_dVd - dPpg_dVd ; Vgp_dVgs = 1.0e0 + dVth_dVg - dPpg_dVg ; /*---------------------------------------------------* * Vgs_fb : Actual flatband voltage taking account Vbs. * - note: if Vgs == Vgs_fb then Vgp == Ps0 == Vbs . *------------------*/ Vgs_fb = Vfb - dVth + dPpg + Vbs ; #include "hsm2eval_dep.h" } else { /*---------------------------------------------------* * Normal mode MOSFET *------------------*/ /*-----------------------------------------------------------* * start of the loop. *-----------------*/ for ( lp_bs = 1 ; lp_bs <= lp_bs_max ; lp_bs ++ ) { Ids_last = Ids ; /* Initialization of counters is needed for restart. */ lp_s0 = 0 ; lp_sl = 0 ; /*-----------------------------------------------------------* * Vxsz: Modified bias introduced to realize symmetry at Vds=0. *-----------------*/ T1 = Vbsc_dVbse * Vds / 2 ; Fn_SymAdd( Vzadd , T1 , model->HSM2_vzadd0 , T2 ) ; T2 *= Vbsc_dVbse / 2 ; Vzadd_dVds = T2 ; if ( Vzadd < ps_conv ) { Vzadd = ps_conv ; Vzadd_dVds = 0.0 ; } Vbsz = Vbs + Vzadd ; Vbsz_dVbs = 1.0 ; Vbsz_dVds = Vzadd_dVds ; Vdsz = Vds + 2.0 * Vzadd ; Vdsz_dVds = 1.0 + 2.0 * Vzadd_dVds ; Vgsz = Vgs + Vzadd ; Vgsz_dVgs = 1.0 ; Vgsz_dVds = Vzadd_dVds ; /*---------------------------------------------------* * Factor of modification for symmetry. *-----------------*/ T1 = here->HSM2_qnsub_esi * Cox0_inv * Cox0_inv ; T2 = Vgs - Vfb ; T3 = 1 + 2.0 / T1 * ( T2 - beta_inv - Vbs ) ; Fn_SZ( T4 , T3 , 1e-3 , T5 ) ; TX = sqrt( T4 ) ; Pslsat = T2 + T1 * ( 1.0 - TX ) ; VdsatS = Pslsat - Pb2 ; Fn_SL( VdsatS , VdsatS , 0.1 , 5e-2 , T6 ) ; VdsatS_dVbs = ( TX ? (T6 * T5 / TX ) : 0.0 ) ; VdsatS_dVds = 0.0 ; VdsatS_dVgs = ( TX ? (T6 * ( 1.0 - T5 / TX )) : 0.0 ) ; T1 = Vds / VdsatS ; Fn_SUPoly4( TX , T1 , 1.0 , T0 ) ; FMDVDS = TX * TX ; T2 = 2 * TX * T0 ; T3 = T2 / ( VdsatS * VdsatS ) ; FMDVDS_dVbs = T3 * ( - Vds * VdsatS_dVbs ) ; FMDVDS_dVds = T3 * ( 1.0 * VdsatS - Vds * VdsatS_dVds ) ; FMDVDS_dVgs = T3 * ( - Vds * VdsatS_dVgs ) ; /*-----------------------------------------------------------* * Quantum effect *-----------------*/ if ( model->HSM2_flg_qme == 0 ) { flg_qme = 0 ; } else { flg_qme = 1 ; } T1 = here->HSM2_2qnsub_esi ; T2 = sqrt( T1 * Pb20 ) ; Vthq = Pb20 + Vfb + T2 * Cox0_inv ; Vthq_dVb = 0.0 ; Vthq_dVd = 0.0 ; if ( flg_qme == 0 ) { Tox = Tox0 ; Tox_dVb = 0.0 ; Tox_dVd = 0.0 ; Tox_dVg = 0.0 ; Cox = Cox0 ; Cox_dVb = 0.0 ; Cox_dVd = 0.0 ; Cox_dVg = 0.0 ; Cox_inv = Cox0_inv ; Cox_inv_dVb = 0.0 ; Cox_inv_dVd = 0.0 ; Cox_inv_dVg = 0.0 ; T0 = cnst0 * cnst0 * Cox_inv ; cnstCoxi = T0 * Cox_inv ; cnstCoxi_dVb = 0.0 ; cnstCoxi_dVd = 0.0 ; cnstCoxi_dVg = 0.0 ; } else { T5 = Vgs - Vbs - Vthq + model->HSM2_qme2 ; T5_dVb = -1.0 - Vthq_dVb ; T5_dVd = - Vthq_dVd ; T5_dVg = 1.0 ; Fn_SZ( T2 , T5 , qme_dlt, T3) ; T2 = T2 + small ; T2_dVb = T3 * T5_dVb ; T2_dVd = T3 * T5_dVd ; T2_dVg = T3 * T5_dVg ; T3 = 1.0 / T2 ; T7 = -1.0 / ( T2 * T2 ) ; T3_dVb = T7 * T2_dVb ; T3_dVd = T7 * T2_dVd ; T3_dVg = T7 * T2_dVg ; T4 = 2.0 * fabs(Vthq) ; T6 = Vfb - Vthq + model->HSM2_qme2 ; if(T6 > T4) { T4 = T6; } Fn_SU( T2 , T3 , 1.0 / T4 , qme_dlt, T6 ) ; T2_dVb = T6 * T3_dVb ; T2_dVd = T6 * T3_dVd ; T2_dVg = T6 * T3_dVg ; dTox = model->HSM2_qme1 * T2 + model->HSM2_qme3 ; T7 = model->HSM2_qme1 ; dTox_dVb = T7 * T2_dVb ; dTox_dVd = T7 * T2_dVd ; dTox_dVg = T7 * T2_dVg ; if ( dTox * 1.0e12 < Tox0 ) { dTox = 0.0 ; dTox_dVb = 0.0 ; dTox_dVd = 0.0 ; dTox_dVg = 0.0 ; flg_qme = 0 ; } Tox = Tox0 + dTox ; Tox_dVb = dTox_dVb ; Tox_dVd = dTox_dVd ; Tox_dVg = dTox_dVg ; Cox = c_eox / Tox ; T1 = - c_eox / ( Tox * Tox ) ; Cox_dVb = T1 * Tox_dVb ; Cox_dVd = T1 * Tox_dVd ; Cox_dVg = T1 * Tox_dVg ; Cox_inv = Tox / c_eox ; T1 = 1.0 / c_eox ; Cox_inv_dVb = T1 * Tox_dVb ; Cox_inv_dVd = T1 * Tox_dVd ; Cox_inv_dVg = T1 * Tox_dVg ; T0 = cnst0 * cnst0 * Cox_inv ; cnstCoxi = T0 * Cox_inv ; T1 = 2.0 * T0 ; cnstCoxi_dVb = T1 * Cox_inv_dVb ; cnstCoxi_dVd = T1 * Cox_inv_dVd ; cnstCoxi_dVg = T1 * Cox_inv_dVg ; } fac1 = cnst0 * Cox_inv ; fac1_dVds = cnst0 * Cox_inv_dVd ; fac1_dVgs = cnst0 * Cox_inv_dVg ; fac1_dVbs = cnst0 * Cox_inv_dVb ; fac1p2 = fac1 * fac1 ; /* Ps0_min: approx. solution of Poisson equation at Vgs_min */ /* ( easy to improve, if necessary ) */ Ps0_min = 2.0 * beta_inv * log(-Vgs_min/fac1) ; Ps0_min_dVds = -2.0 * beta_inv * fac1_dVds / fac1 ; Ps0_min_dVgs = -2.0 * beta_inv * fac1_dVgs / fac1 ; Ps0_min_dVbs = -2.0 * beta_inv * fac1_dVbs / fac1 ; /*---------------------------------------------------* * Vbsz2 : Vbs for dVth *-----------------*/ Vbsz2 = Vbsz ; Vbsz2_dVbs = Vbsz_dVbs ; Vbsz2_dVds = Vbsz_dVds ; Vbsz2_dVgs = 0.0 ; if ( corecip ) { /* ************************** */ /* Initial value for PS0Z_SCE */ /* ************************** */ T1 = dP_max + dP_max ; if ( flg_pprv >= 1 ) { /* -------------------------- * * Extrapolate previous value * * -------------------------- */ T1 = here->HSM2_PS0Z_SCE_dvbs_prv * dVbs + here->HSM2_PS0Z_SCE_dvds_prv * dVds + here->HSM2_PS0Z_SCE_dvgs_prv * dVgs ; if ( fabs(T1) <= dP_max ) { Ps0_ini = here->HSM2_PS0Z_SCE_prv + T1 ; /* take extrapolated value */ Ps0_ini_dVds = here->HSM2_PS0Z_SCE_dvds_prv ; Ps0_ini_dVgs = here->HSM2_PS0Z_SCE_dvgs_prv ; Ps0_ini_dVbs = here->HSM2_PS0Z_SCE_dvbs_prv ; } } /* end of (flg_pprv >=1) if-block */ if ( fabs(T1) > dP_max) { /* ------------------------------------- * * Analytical initial value for PS0Z_SCE * * ------------------------------------- */ T1 = here->HSM2_2qnsub_esi ; T2 = sqrt( T1 * ( Pb20 - Vbsz ) ) ; Vthq = Pb20 + Vfb + T2 * Cox0_inv ; Vth = Vthq ; TX = 4.0e0 * ( beta * ( Vgs - Vbs ) - 1.0e0 ) / ( fac1p2 * beta2 ) ; TX_dVds = - 2.0 * TX / fac1 * fac1_dVds ; TX_dVgs = - 2.0 * TX / fac1 * fac1_dVgs + 4.0 * beta / ( fac1p2 * beta2 ) ; TX_dVbs = - 2.0 * TX / fac1 * fac1_dVbs - 4.0 * beta / ( fac1p2 * beta2 ) ; TX += 1.0 ; if ( TX > epsm10 ) { T3 = sqrt( TX ) ; T3_dVd = 0.5 * TX_dVds / T3 ; T3_dVg = 0.5 * TX_dVgs / T3 ; T3_dVb = 0.5 * TX_dVbs / T3 ; } else { T3 = sqrt( epsm10 ) ; T3_dVd = T3_dVg = T3_dVb = 0.0 ; } Ps0_iniA = Vgs + fac1p2 * beta * 0.5 * ( 1.0e0 - T3 ) ; Ps0_iniA_dVds = fac1 * beta * ( 1.0 - T3 ) * fac1_dVds - fac1p2 * beta * 0.5 * T3_dVd ; Ps0_iniA_dVgs = 1.0 + fac1 * beta * ( 1.0 - T3 ) * fac1_dVgs - fac1p2 * beta * 0.5 * T3_dVg ; Ps0_iniA_dVbs = fac1 * beta * ( 1.0 - T3 ) * fac1_dVbs - fac1p2 * beta * 0.5 * T3_dVb ; Chi = beta * ( Ps0_iniA - Vbs ) ; if ( Chi < znbd3 ) { /*-----------------------------------* * zone-D1/D2 * - Ps0_ini is the analytical solution of Qs=Qb0 with * Qb0 being approximated to 3-degree polynomial. *-----------------*/ TY = beta * ( Vgs - Vbs ) ; TY_dVds = 0.0 ; TY_dVgs = beta ; TY_dVbs = - beta ; T1 = 1.0e0 / ( cn_nc3 * beta * fac1 ) ; T1_dVd = - T1 / fac1 * fac1_dVds ; T1_dVg = - T1 / fac1 * fac1_dVgs ; T1_dVb = - T1 / fac1 * fac1_dVbs ; T2 = 81.0 + 3.0 * T1 ; T2_dVd = 3.0 * T1_dVd ; T2_dVg = 3.0 * T1_dVg ; T2_dVb = 3.0 * T1_dVb ; T3 = -2916.0 - 81.0 * T1 + 27.0 * T1 * TY ; T3_dVd = ( - 81.0 + 27.0 * TY ) * T1_dVd + 27.0 * T1 * TY_dVds ; T3_dVg = ( - 81.0 + 27.0 * TY ) * T1_dVg + 27.0 * T1 * TY_dVgs ; T3_dVb = ( - 81.0 + 27.0 * TY ) * T1_dVb + 27.0 * T1 * TY_dVbs ; T4 = T3 ; T4_dVd = T3_dVd ; T4_dVg = T3_dVg ; T4_dVb = T3_dVb ; T6 = sqrt( 4 * T2 * T2 * T2 + T4 * T4 ) ; T6_dVd = ( 6.0 * T2 * T2 * T2_dVd + T4 * T4_dVd ) / T6 ; T6_dVg = ( 6.0 * T2 * T2 * T2_dVg + T4 * T4_dVg ) / T6 ; T6_dVb = ( 6.0 * T2 * T2 * T2_dVb + T4 * T4_dVb ) / T6 ; T5 = Fn_Pow( T3 + T6 , C_1o3 ) ; T5_dVd = ( T3_dVd + T6_dVd ) / ( 3.0 * T5 * T5 ) ; T5_dVg = ( T3_dVg + T6_dVg ) / ( 3.0 * T5 * T5 ) ; T5_dVb = ( T3_dVb + T6_dVb ) / ( 3.0 * T5 * T5 ) ; TX = 3.0 - ( C_2p_1o3 * T2 ) / ( 3.0 * T5 ) + 1 / ( 3.0 * C_2p_1o3 ) * T5 ; TX_dVds = - C_2p_1o3 / (3.0 * T5) * T2_dVd + ( C_2p_1o3 * T2 / (3.0 * T5 * T5) + 1.0 / (3.0 * C_2p_1o3) ) * T5_dVd ; TX_dVgs = - C_2p_1o3 / (3.0 * T5) * T2_dVg + ( C_2p_1o3 * T2 / (3.0 * T5 * T5) + 1.0 / (3.0 * C_2p_1o3) ) * T5_dVg ; TX_dVbs = - C_2p_1o3 / (3.0 * T5) * T2_dVb + ( C_2p_1o3 * T2 / (3.0 * T5 * T5) + 1.0 / (3.0 * C_2p_1o3) ) * T5_dVb ; Ps0_iniA = TX * beta_inv + Vbs ; Ps0_iniA_dVds = TX_dVds * beta_inv ; Ps0_iniA_dVgs = TX_dVgs * beta_inv ; Ps0_iniA_dVbs = TX_dVbs * beta_inv + 1.0 ; Ps0_ini = Ps0_iniA ; Ps0_ini_dVds = Ps0_iniA_dVds ; Ps0_ini_dVgs = Ps0_iniA_dVgs ; Ps0_ini_dVbs = Ps0_iniA_dVbs ; } else if ( Vgs <= Vth ) { /*-----------------------------------* * Weak inversion zone. *-----------------*/ Ps0_ini = Ps0_iniA ; Ps0_ini_dVds = Ps0_iniA_dVds ; Ps0_ini_dVgs = Ps0_iniA_dVgs ; Ps0_ini_dVbs = Ps0_iniA_dVbs ; } else { /*-----------------------------------* * Strong inversion zone. * - Ps0_iniB : upper bound. *-----------------*/ T1 = 1.0 / cnst1 / cnstCoxi ; T1_dVd = - T1 / cnstCoxi * cnstCoxi_dVd ; T1_dVg = - T1 / cnstCoxi * cnstCoxi_dVg ; T1_dVb = - T1 / cnstCoxi * cnstCoxi_dVb ; T0 = Vgs - Vfb ; T2 = T1 * T0 * T0 ; T2_dVd = T1_dVd * T0 * T0 ; T2_dVg = T1_dVg * T0 * T0 + 2.0 * T1 * T0 ; T2_dVb = T1_dVb * T0 * T0 ; T3 = beta + 2.0 / T0 ; T3_dVg = -2.0 / (T0 * T0) ; Ps0_iniB = log( T2 + small ) / T3 ; Ps0_iniB_dVds = T2_dVd / (T2 * T3) ; Ps0_iniB_dVgs = T2_dVg / (T2 * T3) - T3_dVg * Ps0_iniB / T3 ; Ps0_iniB_dVbs = T2_dVb / (T2 * T3) ; Fn_SU2( Ps0_ini , Ps0_iniA, Ps0_iniB, c_ps0ini_2, T1,T2) ; Ps0_ini_dVds = Ps0_iniA_dVds * T1 + Ps0_iniB_dVds * T2 ; Ps0_ini_dVgs = Ps0_iniA_dVgs * T1 + Ps0_iniB_dVgs * T2 ; Ps0_ini_dVbs = Ps0_iniA_dVbs * T1 + Ps0_iniB_dVbs * T2 ; } } /* end of initial value calulation */ /**************************/ /* initial value for SCE LOOP */ PS0_SCE = Ps0_ini ; PS0_SCE_dVds = Ps0_ini_dVds ; PS0_SCE_dVgs = Ps0_ini_dVgs ; PS0_SCE_dVbs = Ps0_ini_dVbs ; PS0Z_SCE = Ps0_ini ; PS0Z_SCE_dVds = Ps0_ini_dVds ; PS0Z_SCE_dVgs = Ps0_ini_dVgs ; PS0Z_SCE_dVbs = Ps0_ini_dVbs ; } /* end of corecip=1 case (initial value calculation) */ MAX_LOOP_SCE = 5 ; NNN = 0 ; /* ************************************************************************* */ // START_OF_SCE_LOOP : /* outer loop of multi level Newton framework */ START_OF_SCE_LOOP = 1 ; end_of_part_1 = 0 ; while( START_OF_SCE_LOOP ) { /* Begin: 1st SCE LOOP */ while( START_OF_SCE_LOOP ) { /* Begin: 2nd SCE LOOP */ while( START_OF_SCE_LOOP ) { /* Begin: 3rd SCE LOOP */ START_OF_SCE_LOOP = 0 ; /* ************************************************************************* */ /* for multi level Newton method we need the derivatives */ /* with respect to PS0Z_SCE */ /* naming convention: ..._dPS0Z means d.../dPS0Z_SCE */ if ( flg_qme == 1 ) { /*---------------------------------------------------* * Vthp : Vth with pocket. *-----------------*/ if( corecip ){ T1 = here->HSM2_2qnsub_esi ; Qb0 = sqrt ( T1 ) ; Qb0_dVb = 0.0 ; Qb0_dVd = 0.0 ; Qb0_dVg = 0.0 ; Vthp = PS0Z_SCE + Vfb + Qb0 * Cox_inv + here->HSM2_ptovr ; Vthp_dVb = PS0Z_SCE_dVbs + Qb0_dVb * Cox_inv + Qb0 * Cox_inv_dVb ; Vthp_dVd = PS0Z_SCE_dVds + Qb0_dVd * Cox_inv + Qb0 * Cox_inv_dVd ; Vthp_dVg = PS0Z_SCE_dVgs + Qb0_dVg * Cox_inv + Qb0 * Cox_inv_dVg ; Vthp_dPS0Z = 1.0 ; }else{ /* original */ T1 = here->HSM2_2qnsub_esi ; Qb0 = sqrt (T1 * (Pb20 - Vbsz2)) ; T2 = 0.5 * T1 / Qb0 ; Qb0_dVb = T2 * (- Vbsz2_dVbs) ; Qb0_dVd = T2 * (- Vbsz2_dVds) ; Qb0_dVg = T2 * (- Vbsz2_dVgs) ; Vthp = Pb20 + Vfb + Qb0 * Cox_inv + here->HSM2_ptovr; Vthp_dVb = Qb0_dVb * Cox_inv + Qb0 * Cox_inv_dVb ; Vthp_dVd = Qb0_dVd * Cox_inv + Qb0 * Cox_inv_dVd ; Vthp_dVg = Qb0_dVg * Cox_inv + Qb0 * Cox_inv_dVg ; } Pb20b = Pb20 ; Pb20b_dVb = 0.0 ; Pb20b_dVd = 0.0 ; Pb20b_dVg = 0.0 ; T0 = 0.95 ; T1 = T0 * Pb20b - Vbsz2 - 1.0e-3 ; T1_dVb = T0 * Pb20b_dVb - Vbsz2_dVbs ; T1_dVd = T0 * Pb20b_dVd - Vbsz2_dVds ; T1_dVg = T0 * Pb20b_dVg - Vbsz2_dVgs ; T2 = sqrt (T1 * T1 + 4.0 * T0 * Pb20b * 1.0e-3) ; T3 = T0 * Pb20b - 0.5 * (T1 + T2) ; T4 = 2.0 * T0 * 1.0e-3 ; T5 = T1 / T2 ; T6 = T4 / T2 ; T3_dVb = T0 * Pb20b_dVb - 0.5 * (T1_dVb + (T1_dVb * T5 + T6 * Pb20b_dVb ) ) ; T3_dVd = T0 * Pb20b_dVd - 0.5 * (T1_dVd + (T1_dVd * T5 + T6 * Pb20b_dVd ) ) ; T3_dVg = T0 * Pb20b_dVg - 0.5 * (T1_dVg + (T1_dVg * T5 + T6 * Pb20b_dVg ) ) ; Pbsum = Pb20b - T3 ; Pbsum_dVb = Pb20b_dVb - T3_dVb ; Pbsum_dVd = Pb20b_dVd - T3_dVd ; Pbsum_dVg = Pb20b_dVg - T3_dVg ; sqrt_Pbsum = sqrt( Pbsum ) ; /*-------------------------------------------* * dVthLP : Short-channel effect induced by pocket. * - Vth0 : Vth without pocket. *-----------------*/ if ( model->HSM2_lp != 0.0 ) { if( corecip ){ T1 = here->HSM2_2qnsub_esi ; T2 = model->HSM2_bs2 - Vbsz2 ; T3 = T2 + small ; T4 = sqrt (T3 * T3 + 4.0 * vth_dlt) ; T5 = 0.5 * (T3 + T4) ; T6 = 0.5 * (1.0 + T3 / T4) ; T5_dVb = - Vbsz2_dVbs * T6 ; T5_dVd = - Vbsz2_dVds * T6 ; T5_dVg = - Vbsz2_dVgs * T6 ; T7 = 1.0 / T5 ; bs12 = model->HSM2_bs1 * T7 ; T8 = - bs12 * T7 ; bs12_dVb = T8 * T5_dVb ; bs12_dVd = T8 * T5_dVd ; bs12_dVg = T8 * T5_dVg ; T1 = 0.93 * ( PS0Z_SCE + Ps0_min - Vbsz2 ); T1_dVb = 0.93 * ( PS0Z_SCE_dVbs + Ps0_min_dVbs - Vbsz2_dVbs ); T1_dVd = 0.93 * ( PS0Z_SCE_dVds + Ps0_min_dVds - Vbsz2_dVds ); T1_dVg = 0.93 * ( PS0Z_SCE_dVgs + Ps0_min_dVgs - Vbsz2_dVgs ); T1_dPS0Z = 0.93 ; T2 = bs12 ; T2_dVb = bs12_dVb ; T2_dVd = bs12_dVd ; T2_dVg = bs12_dVg ; Fn_SU2( T10 , T2 , T1 , vth_dlt, T0, T3 ) ; T10_dVb = T2_dVb * T0 + T1_dVb * T3 ; T10_dVd = T2_dVd * T0 + T1_dVd * T3 ; T10_dVg = T2_dVg * T0 + T1_dVg * T3 ; T10_dPS0Z = T1_dPS0Z * T3 ; T4 = here->HSM2_2qnsub_esi * ( PS0Z_SCE + Ps0_min - Vbsz2 - T10 ) ; T4_dVb = here->HSM2_2qnsub_esi * ( PS0Z_SCE_dVbs + Ps0_min_dVbs - Vbsz2_dVbs - T10_dVb ) ; T4_dVd = here->HSM2_2qnsub_esi * ( PS0Z_SCE_dVds + Ps0_min_dVds - Vbsz2_dVds - T10_dVd ) ; T4_dVg = here->HSM2_2qnsub_esi * ( PS0Z_SCE_dVgs + Ps0_min_dVgs - Vbsz2_dVgs - T10_dVg ) ; T4_dPS0Z = here->HSM2_2qnsub_esi * ( 1.0 - T10_dPS0Z ) ; if (T4 > arg2){ Qbmm = sqrt ( T4 ) ; Qbmm_dVb = 0.5 / Qbmm * T4_dVb ; Qbmm_dVd = 0.5 / Qbmm * T4_dVd ; Qbmm_dVg = 0.5 / Qbmm * T4_dVg ; Qbmm_dPS0Z = 0.5 / Qbmm * T4_dPS0Z ; } else { Qbmm = sqrt(arg2) + 0.5 / sqrt(arg2) * ( T4 - arg2) ; Qbmm_dVb = 0.5 / sqrt(arg2) * T4_dVb ; Qbmm_dVd = 0.5 / sqrt(arg2) * T4_dVd ; Qbmm_dVg = 0.5 / sqrt(arg2) * T4_dVg ; Qbmm_dPS0Z = 0.5 / sqrt(arg2) * T4_dPS0Z ; } dqb = ( Qb0 - Qbmm ) * Cox_inv ; dqb_dVb = ( Qb0_dVb - Qbmm_dVb ) * Cox_inv + ( Qb0 - Qbmm ) * Cox_inv_dVb ; dqb_dVd = ( Qb0_dVd - Qbmm_dVd ) * Cox_inv + ( Qb0 - Qbmm ) * Cox_inv_dVd ; dqb_dVg = ( Qb0_dVg - Qbmm_dVg ) * Cox_inv + ( Qb0 - Qbmm ) * Cox_inv_dVg ; dqb_dPS0Z = - Qbmm_dPS0Z * Cox_inv ; if( codqb == 0 ){ dqb = 0.0 ; dqb_dVb = 0.0 ; dqb_dVd = 0.0 ; dqb_dVg = 0.0 ; dqb_dPS0Z = 0.0 ; } T1 = 2.0 * C_QE * here->HSM2_nsubc * C_ESI ; T2 = sqrt( T1 ) ; T2_dVb = 0.0 ; T2_dVd = 0.0 ; T2_dVg = 0.0 ; Vth0 = PS0Z_SCE + Vfb + T2 * Cox_inv ; Vth0_dVb = PS0Z_SCE_dVbs + T2_dVb * Cox_inv + T2 * Cox_inv_dVb ; Vth0_dVd = PS0Z_SCE_dVds + T2_dVd * Cox_inv + T2 * Cox_inv_dVd ; Vth0_dVg = PS0Z_SCE_dVgs + T2_dVg * Cox_inv + T2 * Cox_inv_dVg ; Vth0_dPS0Z = 1.0 ; T1 = C_ESI * Cox_inv ; T1_dVb = C_ESI * Cox_inv_dVb ; T1_dVd = C_ESI * Cox_inv_dVd ; T1_dVg = C_ESI * Cox_inv_dVg ; T2 = here->HSM2_wdplp ; T4 = 1.0e0 / ( model->HSM2_lp * model->HSM2_lp ) ; T3 = 2.0 * ( model->HSM2_vbi - Pb20 ) * T2 * T4 ; T5 = T1 * T3 ; T5_dVb = T1_dVb * T3 ; T5_dVd = T1_dVd * T3 ; T5_dVg = T1_dVg * T3 ; T6 = PS0Z_SCE - Vbsz ; T6_dVb = PS0Z_SCE_dVbs - Vbsz_dVbs ; T6_dVd = PS0Z_SCE_dVds - Vbsz_dVds ; T6_dVg = PS0Z_SCE_dVgs ; T6_dPS0Z = 1.0 ; Fn_SZ( T6, T6, C_sce_dlt, T0 ); T6_dVb *= T0 ; T6_dVd *= T0 ; T6_dVg *= T0 ; T6_dPS0Z *= T0 ; dVth0 = T5 * sqrt( T6 ) ; dVth0_dVb = T5 * 0.5 / sqrt( T6 ) * T6_dVb + T5_dVb * sqrt( T6 ); dVth0_dVd = T5 * 0.5 / sqrt( T6 ) * T6_dVd + T5_dVd * sqrt( T6 ) ; dVth0_dVg = T5 * 0.5 / sqrt( T6 ) * T6_dVg + T5_dVg * sqrt( T6 ) ; dVth0_dPS0Z = T5 * 0.5 / sqrt( T6 ) * T6_dPS0Z ; T1 = Vthp - Vth0 ; T1_dVb = Vthp_dVb - Vth0_dVb ; T1_dVd = Vthp_dVd - Vth0_dVd ; T1_dVg = Vthp_dVg - Vth0_dVg ; T1_dPS0Z = Vthp_dPS0Z - Vth0_dPS0Z ; T9 = PS0Z_SCE - Vbsz2 ; T9_dVb = PS0Z_SCE_dVbs - Vbsz2_dVbs ; T9_dVd = PS0Z_SCE_dVds - Vbsz2_dVds ; T9_dVg = PS0Z_SCE_dVgs - Vbsz2_dVgs ; T9_dPS0Z = 1.0 ; T3 = pParam->HSM2_scp1 + pParam->HSM2_scp3 * T9 / model->HSM2_lp + pParam->HSM2_scp2 * Vdsz ; T3_dVb = pParam->HSM2_scp3 * T9_dVb / model->HSM2_lp ; T3_dVd = pParam->HSM2_scp3 * T9_dVd / model->HSM2_lp + pParam->HSM2_scp2 * Vdsz_dVds ; T3_dVg = pParam->HSM2_scp3 * T9_dVg / model->HSM2_lp ; T3_dPS0Z = pParam->HSM2_scp3 * T9_dPS0Z / model->HSM2_lp ; Vdx = model->HSM2_scp21 + Vdsz ; Vdx2 = Vdx * Vdx + small ; T4 = Vdx * Vdx + small ; T4_dVb = 0.0 ; T4_dVd = 2.0 * Vdx * Vdsz_dVds ; T4_dVg = 0.0 ; T5 = 1.0 / T4 ; T5_dVb = - T4_dVb / T4 / T4 ; T5_dVd = - T4_dVd / T4 / T4 ; T5_dVg = - T4_dVg / T4 / T4 ; dVthLP = T1 * dVth0 * T3 + dqb - here->HSM2_msc * T5 ; dVthLP_dVb = T1_dVb * dVth0 * T3 + T1 * dVth0_dVb * T3 + T1 * dVth0 * T3_dVb + dqb_dVb - here->HSM2_msc * T5_dVb ; dVthLP_dVd = T1_dVd * dVth0 * T3 + T1 * dVth0_dVd * T3 + T1 * dVth0 * T3_dVd + dqb_dVd - here->HSM2_msc * T5_dVd ; dVthLP_dVg = T1_dVg * dVth0 * T3 + T1 * dVth0_dVg * T3 + T1 * dVth0 * T3_dVg + dqb_dVg - here->HSM2_msc * T5_dVg ; dVthLP_dPS0Z = T1_dPS0Z * dVth0 * T3 + T1 * dVth0_dPS0Z * T3 + T1 * dVth0 * T3_dPS0Z + dqb_dPS0Z ; }else{ /* original */ T1 = here->HSM2_2qnsub_esi ; T2 = model->HSM2_bs2 - Vbsz2 ; T3 = T2 + small ; T4 = sqrt (T3 * T3 + 4.0 * vth_dlt) ; T5 = 0.5 * (T3 + T4) ; T6 = 0.5 * (1.0 + T3 / T4) ; T5_dVb = - Vbsz2_dVbs * T6 ; T5_dVd = - Vbsz2_dVds * T6 ; T5_dVg = - Vbsz2_dVgs * T6 ; T7 = 1.0 / T5 ; bs12 = model->HSM2_bs1 * T7 ; T8 = - bs12 * T7 ; bs12_dVb = T8 * T5_dVb ; bs12_dVd = T8 * T5_dVd ; bs12_dVg = T8 * T5_dVg ; Fn_SU( T10 , Vbsz2 + bs12, 0.93 * Pb20, vth_dlt, T0) ; Qbmm = sqrt (T1 * (Pb20 - T10 )) ; T9 = T0 / Qbmm ; Qbmm_dVb = 0.5 * T1 * - (Vbsz2_dVbs + bs12_dVb) * T9 ; Qbmm_dVd = 0.5 * T1 * - (Vbsz2_dVds + bs12_dVd) * T9 ; Qbmm_dVg = 0.5 * T1 * - (Vbsz2_dVgs + bs12_dVg) * T9 ; dqb = (Qb0 - Qbmm) * Cox_inv ; dqb_dVb = Vthp_dVb - Qbmm_dVb * Cox_inv - Qbmm * Cox_inv_dVb ; dqb_dVd = Vthp_dVd - Qbmm_dVd * Cox_inv - Qbmm * Cox_inv_dVd ; dqb_dVg = Vthp_dVg - Qbmm_dVg * Cox_inv - Qbmm * Cox_inv_dVg ; T1 = 2.0 * C_QE * here->HSM2_nsubc * C_ESI ; T2 = sqrt( T1 * ( Pb2c - Vbsz2 ) ) ; Vth0 = Pb2c + Vfb + T2 * Cox_inv ; T3 = 0.5 * T1 / T2 * Cox_inv ; Vth0_dVb = T3 * ( - Vbsz2_dVbs ) + T2 * Cox_inv_dVb ; Vth0_dVd = T3 * ( - Vbsz2_dVds ) + T2 * Cox_inv_dVd ; Vth0_dVg = T3 * ( - Vbsz2_dVgs ) + T2 * Cox_inv_dVg ; T1 = C_ESI * Cox_inv ; T2 = here->HSM2_wdplp ; T4 = 1.0e0 / ( model->HSM2_lp * model->HSM2_lp ) ; T5 = 2.0e0 * ( model->HSM2_vbi - Pb20b ) * T1 * T2 * T4 ; dVth0 = T5 * sqrt_Pbsum ; T6 = 0.5 * T5 / sqrt_Pbsum ; T7 = 2.0e0 * ( model->HSM2_vbi - Pb20b ) * C_ESI * T2 * T4 * sqrt_Pbsum ; T8 = - 2.0e0 * T1 * T2 * T4 * sqrt_Pbsum ; dVth0_dVb = T6 * Pbsum_dVb + T7 * Cox_inv_dVb + T8 * Pb20b_dVb ; dVth0_dVd = T6 * Pbsum_dVd + T7 * Cox_inv_dVd + T8 * Pb20b_dVd ; dVth0_dVg = T6 * Pbsum_dVg + T7 * Cox_inv_dVg + T8 * Pb20b_dVg ; T1 = Vthp - Vth0 ; T2 = pParam->HSM2_scp1 + pParam->HSM2_scp3 * Pbsum / model->HSM2_lp ; T3 = T2 + pParam->HSM2_scp2 * Vdsz ; Vdx = model->HSM2_scp21 + Vdsz ; Vdx2 = Vdx * Vdx + small ; dVthLP = T1 * dVth0 * T3 + dqb - here->HSM2_msc / Vdx2 ; T4 = T1 * dVth0 * pParam->HSM2_scp3 / model->HSM2_lp ; dVthLP_dVb = (Vthp_dVb - Vth0_dVb) * dVth0 * T3 + T1 * dVth0_dVb * T3 + T4 * Pbsum_dVb + dqb_dVb ; dVthLP_dVd = (Vthp_dVd - Vth0_dVd) * dVth0 * T3 + T1 * dVth0_dVd * T3 + T4 * Pbsum_dVd + T1 * dVth0 * pParam->HSM2_scp2 * Vdsz_dVds + dqb_dVd + 2.0e0 * here->HSM2_msc * Vdx * Vdsz_dVds / ( Vdx2 * Vdx2 ) ; dVthLP_dVg = (Vthp_dVg - Vth0_dVg) * dVth0 * T3 + T1 * dVth0_dVg * T3 + T4 * Pbsum_dVg + dqb_dVg ; } } else { dVthLP = 0.0e0 ; dVthLP_dVb = 0.0e0 ; dVthLP_dVd = 0.0e0 ; dVthLP_dVg = 0.0e0 ; } /*---------------------------------------------------* * dVthSC : Short-channel effect induced by Vds. *-----------------*/ if( corecip ){ T3 = here->HSM2_lgate - model->HSM2_parl2 ; T4 = 1.0e0 / ( T3 * T3 ) ; T5 = pParam->HSM2_sc3 / here->HSM2_lgate ; T6 = pParam->HSM2_sc1 + T5 * ( PS0Z_SCE - Vbsz ) ; T6_dVb = T5 * ( PS0Z_SCE_dVbs - Vbsz_dVbs ); T6_dVd = T5 * ( PS0Z_SCE_dVds - Vbsz_dVds ); T6_dVg = T5 * PS0Z_SCE_dVgs ; T6_dPS0Z = T5 ; /* QME:1 CORECIP:1 */ if( pParam->HSM2_sc4 != 0 ){ T8 = pParam->HSM2_sc4 * Vdsz * ( PS0Z_SCE - Vbsz ) ; T8_dVd = pParam->HSM2_sc4 * ( Vdsz_dVds * ( PS0Z_SCE - Vbsz ) + Vdsz * ( PS0Z_SCE_dVds - Vbsz_dVds ) ) ; T8_dVb = pParam->HSM2_sc4 * Vdsz * ( PS0Z_SCE_dVbs - Vbsz_dVbs ) ; T8_dVg = pParam->HSM2_sc4 * Vdsz * PS0Z_SCE_dVgs ; T8_dPS0Z = pParam->HSM2_sc4 * Vdsz ; T1 = T6 + pParam->HSM2_sc2 * Vdsz + T8 ; T1_dVd = T6_dVd + pParam->HSM2_sc2 * Vdsz_dVds + T8_dVd ; T1_dVb = T6_dVb + T8_dVb ; T1_dVg = T6_dVg + T8_dVg ; T1_dPS0Z = T6_dPS0Z + T8_dPS0Z ; }else{ T1 = T6 + pParam->HSM2_sc2 * Vdsz ; T1_dVb = T6_dVb ; T1_dVd = T6_dVd + pParam->HSM2_sc2 * Vdsz_dVds ; T1_dVg = T6_dVg ; T1_dPS0Z = T6_dPS0Z ; } T0 = C_ESI * here->HSM2_wdpl * 2.0e0 * ( model->HSM2_vbi - Pb20 ) * T4 ; T2 = T0 * Cox_inv ; T2_dVb = T0 * Cox_inv_dVb ; T2_dVd = T0 * Cox_inv_dVd ; T2_dVg = T0 * Cox_inv_dVg ; A = T2 * T1 ; A_dVbs = T2 * T1_dVb + T1 * T2_dVb ; A_dVds = T2 * T1_dVd + T1 * T2_dVd ; A_dVgs = T2 * T1_dVg + T1 * T2_dVg ; A_dPS0Z = T2 * T1_dPS0Z ; T9 = PS0Z_SCE - Vbsz + Ps0_min ; T9_dVb = PS0Z_SCE_dVbs - Vbsz_dVbs + Ps0_min_dVbs ; T9_dVd = PS0Z_SCE_dVds - Vbsz_dVds + Ps0_min_dVds ; T9_dVg = PS0Z_SCE_dVgs + Ps0_min_dVgs ; T9_dPS0Z = 1.0 ; if ( T9 > arg0 ) { T8 = sqrt( T9 ) ; T8_dVb = 0.5 * T9_dVb / T8 ; T8_dVd = 0.5 * T9_dVd / T8 ; T8_dVg = 0.5 * T9_dVg / T8 ; T8_dPS0Z = 0.5 * T9_dPS0Z / T8 ; } else { T8 = sqrt(arg0) + 0.5 / sqrt(arg0) * ( T9 - arg0) ; T8_dVb = 0.5 / sqrt(arg0) * T9_dVb ; T8_dVd = 0.5 / sqrt(arg0) * T9_dVd ; T8_dVg = 0.5 / sqrt(arg0) * T9_dVg ; T8_dPS0Z = 0.5 / sqrt(arg0) * T9_dPS0Z ; } dVthSC = A * T8 ; dVthSC_dVb = A * T8_dVb + A_dVbs * T8; dVthSC_dVd = A * T8_dVd + A_dVds * T8; dVthSC_dVg = A * T8_dVg + A_dVgs * T8; dVthSC_dPS0Z = A * T8_dPS0Z + A_dPS0Z * T8; }else{ /* original */ T1 = C_ESI * Cox_inv ; T2 = here->HSM2_wdpl ; T3 = here->HSM2_lgate - model->HSM2_parl2 ; T4 = 1.0e0 / ( T3 * T3 ) ; T5 = 2.0e0 * ( model->HSM2_vbi - Pb20b ) * T1 * T2 * T4 ; dVth0 = T5 * sqrt_Pbsum ; T6 = T5 / 2.0 / sqrt_Pbsum ; T7 = 2.0e0 * ( model->HSM2_vbi - Pb20b ) * C_ESI * T2 * T4 * sqrt_Pbsum ; T8 = - 2.0e0 * T1 * T2 * T4 * sqrt_Pbsum ; dVth0_dVb = T6 * Pbsum_dVb + T7 * Cox_inv_dVb + T8 * Pb20b_dVb ; dVth0_dVd = T6 * Pbsum_dVd + T7 * Cox_inv_dVd + T8 * Pb20b_dVd ; dVth0_dVg = T6 * Pbsum_dVg + T7 * Cox_inv_dVg + T8 * Pb20b_dVg ; T1 = pParam->HSM2_sc3 / here->HSM2_lgate ; T4 = pParam->HSM2_sc1 + T1 * Pbsum ; T4_dVb = T1 * Pbsum_dVb ; T4_dVd = T1 * Pbsum_dVd ; T4_dVg = T1 * Pbsum_dVg ; /* QME:1 CORECIP:0 */ if( pParam->HSM2_sc4 != 0 ){ T8 = pParam->HSM2_sc4 * Vdsz * Pbsum ; T8_dVd = pParam->HSM2_sc4 * ( Vdsz_dVds * Pbsum + Vdsz * Pbsum_dVd ) ; T8_dVb = pParam->HSM2_sc4 * Vdsz * Pbsum_dVb ; T8_dVg = pParam->HSM2_sc4 * Vdsz * Pbsum_dVg ; T5 = T4 + pParam->HSM2_sc2 * Vdsz + T8 ; T5_dVd = T4_dVd + pParam->HSM2_sc2 * Vdsz_dVds + T8_dVd ; T5_dVb = T4_dVb + T8_dVb ; T5_dVg = T4_dVg + T8_dVg ; }else{ T5 = T4 + pParam->HSM2_sc2 * Vdsz ; T5_dVb = T4_dVb ; T5_dVd = T4_dVd + pParam->HSM2_sc2 * Vdsz_dVds ; T5_dVg = T4_dVg ; } dVthSC = dVth0 * T5 ; dVthSC_dVb = dVth0_dVb * T5 + dVth0 * T5_dVb ; dVthSC_dVd = dVth0_dVd * T5 + dVth0 * T5_dVd ; dVthSC_dVg = dVth0_dVg * T5 + dVth0 * T5_dVg ; } /*---------------------------------------------------* * dVthW : narrow-channel effect. *-----------------*/ T1 = 1.0 / Cox ; T2 = T1 * T1 ; T3 = 1.0 / ( Cox + pParam->HSM2_wfc / Weff ) ; T4 = T3 * T3 ; T5 = T1 - T3 ; T6 = Qb0 * ( T2 - T4 ) ; if( corecip ){ dVthW = Qb0 * T5 + pParam->HSM2_wvth0 / here->HSM2_wg ; dVthW_dVb = Qb0_dVb * T5 - Cox_dVb * T6 ; dVthW_dVd = Qb0_dVd * T5 - Cox_dVd * T6 ; dVthW_dVg = Qb0_dVg * T5 - Cox_dVg * T6 ; }else{ /* original */ dVthW = Qb0 * T5 + pParam->HSM2_wvth0 / here->HSM2_wg ; dVthW_dVb = Qb0_dVb * T5 - Cox_dVb * T6 ; dVthW_dVd = Qb0_dVd * T5 - Cox_dVd * T6 ; dVthW_dVg = - Cox_dVg * T6 ; } /* end of case flg_qme = 1 */ } else { /* now case flg_qme = 0 */ /*---------------------------------------------------* * Vthp : Vth with pocket. *-----------------*/ if( corecip ){ T1 = here->HSM2_2qnsub_esi ; Qb0 = sqrt ( T1 ) ; Qb0_dVb = 0.0 ; Qb0_dVd = 0.0 ; Qb0_dVg = 0.0 ; Vthp = PS0Z_SCE + Vfb + Qb0 * Cox_inv + here->HSM2_ptovr; Vthp_dVb = PS0Z_SCE_dVbs + Qb0_dVb * Cox_inv ; Vthp_dVd = PS0Z_SCE_dVds + Qb0_dVd * Cox_inv ; Vthp_dVg = PS0Z_SCE_dVgs + Qb0_dVg * Cox_inv ; Vthp_dPS0Z = 1.0 ; }else{ /* original */ T1 = here->HSM2_2qnsub_esi ; Qb0 = sqrt (T1 * (Pb20 - Vbsz2)) ; T2 = 0.5 * T1 / Qb0 ; Qb0_dVb = T2 * (- Vbsz2_dVbs) ; Qb0_dVd = T2 * (- Vbsz2_dVds) ; Qb0_dVg = T2 * (- Vbsz2_dVgs) ; Vthp = Pb20 + Vfb + Qb0 * Cox_inv + here->HSM2_ptovr; Vthp_dVb = Qb0_dVb * Cox_inv ; Vthp_dVd = Qb0_dVd * Cox_inv ; Vthp_dVg = Qb0_dVg * Cox_inv ; } Pb20b = Pb20 ; Pb20b_dVb = 0.0 ; Pb20b_dVd = 0.0 ; Pb20b_dVg = 0.0 ; T0 = 0.95 ; T1 = T0 * Pb20b - Vbsz2 - 1.0e-3 ; T1_dVb = T0 * Pb20b_dVb - Vbsz2_dVbs ; T1_dVd = T0 * Pb20b_dVd - Vbsz2_dVds ; T1_dVg = T0 * Pb20b_dVg - Vbsz2_dVgs ; T2 = sqrt (T1 * T1 + 4.0 * T0 * Pb20b * 1.0e-3) ; T3 = T0 * Pb20b - 0.5 * (T1 + T2) ; T4 = 2.0 * T0 * 1.0e-3 ; T5 = T1 / T2 ; T6 = T4 / T2 ; T3_dVb = T0 * Pb20b_dVb - 0.5 * (T1_dVb + (T1_dVb * T5 + T6 * Pb20b_dVb ) ) ; T3_dVd = T0 * Pb20b_dVd - 0.5 * (T1_dVd + (T1_dVd * T5 + T6 * Pb20b_dVd ) ) ; T3_dVg = T0 * Pb20b_dVg - 0.5 * (T1_dVg + (T1_dVg * T5 + T6 * Pb20b_dVg ) ) ; Pbsum = Pb20b - T3 ; Pbsum_dVb = Pb20b_dVb - T3_dVb ; Pbsum_dVd = Pb20b_dVd - T3_dVd ; Pbsum_dVg = Pb20b_dVg - T3_dVg ; sqrt_Pbsum = sqrt( Pbsum ) ; /*-------------------------------------------* * dVthLP : Short-channel effect induced by pocket. * - Vth0 : Vth without pocket. *-----------------*/ if ( model->HSM2_lp != 0.0 ) { if( corecip ){ T1 = here->HSM2_2qnsub_esi ; T2 = model->HSM2_bs2 - Vbsz2 ; T3 = T2 + small ; T4 = sqrt (T3 * T3 + 4.0 * vth_dlt) ; T5 = 0.5 * (T3 + T4) ; T6 = 0.5 * (1.0 + T3 / T4) ; T5_dVb = - Vbsz2_dVbs * T6 ; T5_dVd = - Vbsz2_dVds * T6 ; T5_dVg = - Vbsz2_dVgs * T6 ; T7 = 1.0 / T5 ; bs12 = model->HSM2_bs1 * T7 ; T8 = - bs12 * T7 ; bs12_dVb = T8 * T5_dVb ; bs12_dVd = T8 * T5_dVd ; bs12_dVg = T8 * T5_dVg ; T1 = 0.93 * ( PS0Z_SCE + Ps0_min - Vbsz2 ); T1_dVb = 0.93 * ( PS0Z_SCE_dVbs + Ps0_min_dVbs - Vbsz2_dVbs ); T1_dVd = 0.93 * ( PS0Z_SCE_dVds + Ps0_min_dVds - Vbsz2_dVds ); T1_dVg = 0.93 * ( PS0Z_SCE_dVgs + Ps0_min_dVgs - Vbsz2_dVgs ); T1_dPS0Z = 0.93 ; T2 = bs12 ; T2_dVb = bs12_dVb ; T2_dVd = bs12_dVd ; T2_dVg = bs12_dVg ; Fn_SU2( T10 , T2 , T1 , vth_dlt, T0, T3 ) ; T10_dVb = T2_dVb * T0 + T1_dVb * T3 ; T10_dVd = T2_dVd * T0 + T1_dVd * T3 ; T10_dVg = T2_dVg * T0 + T1_dVg * T3 ; T10_dPS0Z = T1_dPS0Z * T3 ; T4 = here->HSM2_2qnsub_esi * ( PS0Z_SCE + Ps0_min - Vbsz2 - T10 ) ; T4_dVb = here->HSM2_2qnsub_esi * ( PS0Z_SCE_dVbs + Ps0_min_dVbs - Vbsz2_dVbs - T10_dVb ) ; T4_dVd = here->HSM2_2qnsub_esi * ( PS0Z_SCE_dVds + Ps0_min_dVds - Vbsz2_dVds - T10_dVd ) ; T4_dVg = here->HSM2_2qnsub_esi * ( PS0Z_SCE_dVgs + Ps0_min_dVgs - Vbsz2_dVgs - T10_dVg ) ; T4_dPS0Z = here->HSM2_2qnsub_esi * ( 1.0 - T10_dPS0Z ) ; if (T4 > arg2){ Qbmm = sqrt ( T4 ) ; Qbmm_dVb = 0.5 / Qbmm * T4_dVb ; Qbmm_dVd = 0.5 / Qbmm * T4_dVd ; Qbmm_dVg = 0.5 / Qbmm * T4_dVg ; Qbmm_dPS0Z = 0.5 / Qbmm * T4_dPS0Z ; } else { Qbmm = sqrt(arg2) + 0.5 / sqrt(arg2) * ( T4 - arg2) ; Qbmm_dVb = 0.5 / sqrt(arg2) * T4_dVb ; Qbmm_dVd = 0.5 / sqrt(arg2) * T4_dVd ; Qbmm_dVg = 0.5 / sqrt(arg2) * T4_dVg ; Qbmm_dPS0Z = 0.5 / sqrt(arg2) * T4_dPS0Z ; } dqb = ( Qb0 - Qbmm ) * Cox_inv ; dqb_dVb = ( Qb0_dVb - Qbmm_dVb ) * Cox_inv ; dqb_dVd = ( Qb0_dVd - Qbmm_dVd ) * Cox_inv ; dqb_dVg = ( Qb0_dVg - Qbmm_dVg ) * Cox_inv ; dqb_dPS0Z = ( - Qbmm_dPS0Z ) * Cox_inv ; /* W/O QME PART */ if( codqb == 0 ){ dqb = 0 ; dqb_dVb = 0 ; dqb_dVd = 0 ; dqb_dVg = 0 ; dqb_dPS0Z = 0.0 ; } T1 = 2.0 * C_QE * here->HSM2_nsubc * C_ESI ; T2 = sqrt( T1 ) ; T2_dVb = 0.0 ; T2_dVd = 0.0 ; T2_dVg = 0.0 ; Vth0 = PS0Z_SCE + Vfb + T2 * Cox_inv ; Vth0_dVb = PS0Z_SCE_dVbs + T2_dVb * Cox_inv ; Vth0_dVd = PS0Z_SCE_dVds + T2_dVd * Cox_inv ; Vth0_dVg = PS0Z_SCE_dVgs + T2_dVg * Cox_inv ; Vth0_dPS0Z = 1.0 ; T1 = C_ESI * Cox_inv ; T2 = here->HSM2_wdplp ; T4 = 1.0e0 / ( model->HSM2_lp * model->HSM2_lp ) ; T5 = 2.0e0 * ( model->HSM2_vbi - Pb20 ) * T1 * T2 * T4 ; T5_dVb = 0.0 ; T5_dVd = 0.0 ; T5_dVg = 0.0 ; T6 = PS0Z_SCE - Vbsz ; T6_dVb = PS0Z_SCE_dVbs - Vbsz_dVbs ; T6_dVd = PS0Z_SCE_dVds - Vbsz_dVds ; T6_dVg = PS0Z_SCE_dVgs ; T6_dPS0Z = 1.0 ; Fn_SZ(T6, T6, C_sce_dlt, T0 ); T6 += small ; T6_dVb *= T0 ; T6_dVd *= T0 ; T6_dVg *= T0 ; T6_dPS0Z *= T0 ; dVth0 = T5 * sqrt( T6 ) ; dVth0_dVb = T5 * 0.5 / sqrt( T6 ) * T6_dVb + T5_dVb * sqrt( T6 ); dVth0_dVd = T5 * 0.5 / sqrt( T6 ) * T6_dVd + T5_dVd * sqrt( T6 ) ; dVth0_dVg = T5 * 0.5 / sqrt( T6 ) * T6_dVg + T5_dVg * sqrt( T6 ) ; dVth0_dPS0Z = T5 * 0.5 / sqrt( T6 ) * T6_dPS0Z ; T1 = Vthp - Vth0 ; T1_dVb = Vthp_dVb - Vth0_dVb ; T1_dVd = Vthp_dVd - Vth0_dVd ; T1_dVg = Vthp_dVg - Vth0_dVg ; T1_dPS0Z = Vthp_dPS0Z - Vth0_dPS0Z ; T9 = PS0Z_SCE - Vbsz2 ; T9_dVb = PS0Z_SCE_dVbs - Vbsz2_dVbs ; T9_dVd = PS0Z_SCE_dVds - Vbsz2_dVds ; T9_dVg = PS0Z_SCE_dVgs - Vbsz2_dVgs ; T9_dPS0Z = 1.0 ; T3 = pParam->HSM2_scp1 + pParam->HSM2_scp3 * T9 / model->HSM2_lp + pParam->HSM2_scp2 * Vdsz ; T3_dVb = pParam->HSM2_scp3 * T9_dVb / model->HSM2_lp ; T3_dVd = pParam->HSM2_scp3 * T9_dVd / model->HSM2_lp + pParam->HSM2_scp2 * Vdsz_dVds ; T3_dVg = pParam->HSM2_scp3 * T9_dVg / model->HSM2_lp ; T3_dPS0Z = pParam->HSM2_scp3 * T9_dPS0Z / model->HSM2_lp ; Vdx = model->HSM2_scp21 + Vdsz ; Vdx2 = Vdx * Vdx + small ; T4 = Vdx * Vdx + small ; T4_dVb = 0.0 ; T4_dVd = 2.0 * Vdx * Vdsz_dVds ; T4_dVg = 0.0 ; T5 = 1.0 / T4 ; T5_dVb = - T4_dVb / T4 / T4 ; T5_dVd = - T4_dVd / T4 / T4 ; T5_dVg = - T4_dVg / T4 / T4 ; dVthLP = T1 * dVth0 * T3 + dqb - here->HSM2_msc * T5 ; dVthLP_dVb = T1_dVb * dVth0 * T3 + T1 * dVth0_dVb * T3 + T1 * dVth0 * T3_dVb + dqb_dVb - here->HSM2_msc * T5_dVb ; dVthLP_dVd = T1_dVd * dVth0 * T3 + T1 * dVth0_dVd * T3 + T1 * dVth0 * T3_dVd + dqb_dVd - here->HSM2_msc * T5_dVd ; dVthLP_dVg = T1_dVg * dVth0 * T3 + T1 * dVth0_dVg * T3 + T1 * dVth0 * T3_dVg + dqb_dVg - here->HSM2_msc * T5_dVg ; dVthLP_dPS0Z = T1_dPS0Z * dVth0 * T3 + T1 * dVth0_dPS0Z * T3 + T1 * dVth0 * T3_dPS0Z + dqb_dPS0Z ; }else{ /* Original */ T1 = here->HSM2_2qnsub_esi ; T2 = model->HSM2_bs2 - Vbsz2 ; T3 = T2 + small ; T4 = sqrt (T3 * T3 + 4.0 * vth_dlt) ; T5 = 0.5 * (T3 + T4) ; T6 = 0.5 * (1.0 + T3 / T4) ; T5_dVb = - Vbsz2_dVbs * T6 ; T5_dVd = - Vbsz2_dVds * T6 ; T5_dVg = - Vbsz2_dVgs * T6 ; T7 = 1.0 / T5 ; bs12 = model->HSM2_bs1 * T7 ; T8 = - bs12 * T7 ; bs12_dVb = T8 * T5_dVb ; bs12_dVd = T8 * T5_dVd ; bs12_dVg = T8 * T5_dVg ; Fn_SU( T10 , Vbsz2 + bs12, 0.93 * Pb20, vth_dlt, T0) ; Qbmm = sqrt (T1 * (Pb20 - T10 )) ; T9 = T0 / Qbmm ; Qbmm_dVb = 0.5 * T1 * - (Vbsz2_dVbs + bs12_dVb) * T9 ; Qbmm_dVd = 0.5 * T1 * - (Vbsz2_dVds + bs12_dVd) * T9 ; Qbmm_dVg = 0.5 * T1 * - (Vbsz2_dVgs + bs12_dVg) * T9 ; dqb = (Qb0 - Qbmm) * Cox_inv ; dqb_dVb = Vthp_dVb - Qbmm_dVb * Cox_inv ; dqb_dVd = Vthp_dVd - Qbmm_dVd * Cox_inv ; dqb_dVg = Vthp_dVg - Qbmm_dVg * Cox_inv ; T1 = 2.0 * C_QE * here->HSM2_nsubc * C_ESI ; T2 = sqrt( T1 * ( Pb2c - Vbsz2 ) ) ; Vth0 = Pb2c + Vfb + T2 * Cox_inv ; T3 = 0.5 * T1 / T2 * Cox_inv ; Vth0_dVb = T3 * ( - Vbsz2_dVbs ) ; Vth0_dVd = T3 * ( - Vbsz2_dVds ) ; Vth0_dVg = T3 * ( - Vbsz2_dVgs ) ; T1 = C_ESI * Cox_inv ; T2 = here->HSM2_wdplp ; T4 = 1.0e0 / ( model->HSM2_lp * model->HSM2_lp ) ; T5 = 2.0e0 * ( model->HSM2_vbi - Pb20b ) * T1 * T2 * T4 ; dVth0 = T5 * sqrt_Pbsum ; T6 = 0.5 * T5 / sqrt_Pbsum ; T7 = 2.0e0 * ( model->HSM2_vbi - Pb20b ) * C_ESI * T2 * T4 * sqrt_Pbsum ; T8 = - 2.0e0 * T1 * T2 * T4 * sqrt_Pbsum ; dVth0_dVb = T6 * Pbsum_dVb + T8 * Pb20b_dVb ; dVth0_dVd = T6 * Pbsum_dVd + T8 * Pb20b_dVd ; dVth0_dVg = T6 * Pbsum_dVg + T8 * Pb20b_dVg ; T1 = Vthp - Vth0 ; T2 = pParam->HSM2_scp1 + pParam->HSM2_scp3 * Pbsum / model->HSM2_lp ; T3 = T2 + pParam->HSM2_scp2 * Vdsz ; Vdx = model->HSM2_scp21 + Vdsz ; Vdx2 = Vdx * Vdx + small ; dVthLP = T1 * dVth0 * T3 + dqb - here->HSM2_msc / Vdx2 ; T4 = T1 * dVth0 * pParam->HSM2_scp3 / model->HSM2_lp ; dVthLP_dVb = (Vthp_dVb - Vth0_dVb) * dVth0 * T3 + T1 * dVth0_dVb * T3 + T4 * Pbsum_dVb + dqb_dVb ; dVthLP_dVd = (Vthp_dVd - Vth0_dVd) * dVth0 * T3 + T1 * dVth0_dVd * T3 + T4 * Pbsum_dVd + T1 * dVth0 * pParam->HSM2_scp2 * Vdsz_dVds + dqb_dVd + 2.0e0 * here->HSM2_msc * Vdx * Vdsz_dVds / ( Vdx2 * Vdx2 ) ; dVthLP_dVg = (Vthp_dVg - Vth0_dVg) * dVth0 * T3 + T1 * dVth0_dVg * T3 + T4 * Pbsum_dVg + dqb_dVg ; } } else { dVthLP = 0.0e0 ; dVthLP_dVb = 0.0e0 ; dVthLP_dVd = 0.0e0 ; dVthLP_dVg = 0.0e0 ; } /*---------------------------------------------------* * dVthSC : Short-channel effect induced by Vds. *-----------------*/ if( corecip ){ T3 = here->HSM2_lgate - model->HSM2_parl2 ; T4 = 1.0e0 / ( T3 * T3 ) ; T5 = pParam->HSM2_sc3 / here->HSM2_lgate ; T6 = pParam->HSM2_sc1 + T5 * ( PS0Z_SCE - Vbsz ) ; T6_dVb = T5 * ( PS0Z_SCE_dVbs - Vbsz_dVbs ); T6_dVd = T5 * ( PS0Z_SCE_dVds - Vbsz_dVds ); T6_dVg = T5 * PS0Z_SCE_dVgs ; T6_dPS0Z = T5 ; /* QME:0 CORECIP:1 */ if( pParam->HSM2_sc4 != 0 ){ T8 = pParam->HSM2_sc4 * Vdsz * ( PS0Z_SCE - Vbsz ) ; T8_dVd = pParam->HSM2_sc4 * ( Vdsz_dVds * ( PS0Z_SCE - Vbsz ) + Vdsz * ( PS0Z_SCE_dVds - Vbsz_dVds ) ) ; T8_dVb = pParam->HSM2_sc4 * Vdsz * ( PS0Z_SCE_dVbs - Vbsz_dVbs ) ; T8_dVg = pParam->HSM2_sc4 * Vdsz * PS0Z_SCE_dVgs ; T8_dPS0Z = pParam->HSM2_sc4 * Vdsz ; T1 = T6 + pParam->HSM2_sc2 * Vdsz + T8 ; T1_dVd = T6_dVd + pParam->HSM2_sc2 * Vdsz_dVds + T8_dVd ; T1_dVb = T6_dVb + T8_dVb ; T1_dVg = T6_dVg + T8_dVg ; T1_dPS0Z = T6_dPS0Z + T8_dPS0Z ; }else{ T1 = T6 + pParam->HSM2_sc2 * Vdsz ; T1_dVb = T6_dVb ; T1_dVd = T6_dVd + pParam->HSM2_sc2 * Vdsz_dVds ; T1_dVg = T6_dVg ; T1_dPS0Z = T6_dPS0Z ; } T2 = C_ESI * Cox_inv * here->HSM2_wdpl * 2.0e0 * ( model->HSM2_vbi - Pb20 ) * T4 ; A = T2 * T1 ; A_dVbs = T2 * T1_dVb ; A_dVds = T2 * T1_dVd ; A_dVgs = T2 * T1_dVg ; A_dPS0Z = T2 * T1_dPS0Z ; T7 = PS0Z_SCE - Vbsz + Ps0_min ; T7_dVb = PS0Z_SCE_dVbs - Vbsz_dVbs + Ps0_min_dVbs; T7_dVd = PS0Z_SCE_dVds - Vbsz_dVds + Ps0_min_dVds ; T7_dVg = PS0Z_SCE_dVgs + Ps0_min_dVgs ; T7_dPS0Z = 1.0 ; if ( T7 > arg0 ) { T8 = sqrt( T7 ) ; T8_dVb = 0.5 * T7_dVb / T8 ; T8_dVd = 0.5 * T7_dVd / T8 ; T8_dVg = 0.5 * T7_dVg / T8 ; T8_dPS0Z = 0.5 * T7_dPS0Z / T8 ; } else { T8 = sqrt(arg0) + 0.5 / sqrt(arg0) * ( T7 - arg0) ; T8_dVb = 0.5 / sqrt(arg0) * T7_dVb ; T8_dVd = 0.5 / sqrt(arg0) * T7_dVd ; T8_dVg = 0.5 / sqrt(arg0) * T7_dVg ; T8_dPS0Z = 0.5 / sqrt(arg0) * T7_dPS0Z ; } dVthSC = A * T8 ; dVthSC_dVb = A * T8_dVb + A_dVbs * T8; dVthSC_dVd = A * T8_dVd + A_dVds * T8; dVthSC_dVg = A * T8_dVg + A_dVgs * T8; dVthSC_dPS0Z = A * T8_dPS0Z + A_dPS0Z * T8; }else{ /* original */ T1 = C_ESI * Cox_inv ; T2 = here->HSM2_wdpl ; T3 = here->HSM2_lgate - model->HSM2_parl2 ; T4 = 1.0e0 / ( T3 * T3 ) ; T5 = 2.0e0 * ( model->HSM2_vbi - Pb20b ) * T1 * T2 * T4 ; dVth0 = T5 * sqrt_Pbsum ; T6 = T5 / 2.0 / sqrt_Pbsum ; T7 = 2.0e0 * ( model->HSM2_vbi - Pb20b ) * C_ESI * T2 * T4 * sqrt_Pbsum ; T8 = - 2.0e0 * T1 * T2 * T4 * sqrt_Pbsum ; dVth0_dVb = T6 * Pbsum_dVb + T8 * Pb20b_dVb ; dVth0_dVd = T6 * Pbsum_dVd + T8 * Pb20b_dVd ; dVth0_dVg = T6 * Pbsum_dVg + T8 * Pb20b_dVg ; T1 = pParam->HSM2_sc3 / here->HSM2_lgate ; T4 = pParam->HSM2_sc1 + T1 * Pbsum ; T4_dVb = T1 * Pbsum_dVb ; T4_dVd = T1 * Pbsum_dVd ; T4_dVg = T1 * Pbsum_dVg ; /* QME:0 CORECIP:0 */ if( pParam->HSM2_sc4 != 0 ){ T8 = pParam->HSM2_sc4 * Vdsz * Pbsum ; T8_dVd = pParam->HSM2_sc4 * ( Vdsz_dVds * Pbsum + Vdsz * Pbsum_dVd ) ; T8_dVb = pParam->HSM2_sc4 * Vdsz * Pbsum_dVb ; T8_dVg = pParam->HSM2_sc4 * Vdsz * Pbsum_dVg ; T5 = T4 + pParam->HSM2_sc2 * Vdsz + T8 ; T5_dVd = T4_dVd + pParam->HSM2_sc2 * Vdsz_dVds + T8_dVd ; T5_dVb = T4_dVb + T8_dVb ; T5_dVg = T4_dVg + T8_dVg ; }else{ T5 = T4 + pParam->HSM2_sc2 * Vdsz ; T5_dVb = T4_dVb ; T5_dVd = T4_dVd + pParam->HSM2_sc2 * Vdsz_dVds ; T5_dVg = T4_dVg ; } dVthSC = dVth0 * T5 ; dVthSC_dVb = dVth0_dVb * T5 + dVth0 * T5_dVb ; dVthSC_dVd = dVth0_dVd * T5 + dVth0 * T5_dVd ; dVthSC_dVg = dVth0_dVg * T5 + dVth0 * T5_dVg ; } /*---------------------------------------------------* * dVthW : narrow-channel effect. *-----------------*/ T1 = 1.0 / Cox ; T3 = 1.0 / ( Cox + pParam->HSM2_wfc / Weff ) ; T5 = T1 - T3 ; if( corecip ){ dVthW = Qb0 * T5 + pParam->HSM2_wvth0 / here->HSM2_wg ; dVthW_dVb = Qb0_dVb * T5 ; dVthW_dVd = Qb0_dVd * T5 ; dVthW_dVg = Qb0_dVg * T5 ; }else{ /* original */ dVthW = Qb0 * T5 + pParam->HSM2_wvth0 / here->HSM2_wg ; dVthW_dVb = Qb0_dVb * T5 ; dVthW_dVd = Qb0_dVd * T5 ; dVthW_dVg = 0.0 ; } } /* end of flg_qme if-blocks */ /*---------------------------------------------------* * dVth : Total variation. * - Positive dVth means the decrease in Vth. *-----------------*/ dVth = dVthSC + dVthLP + dVthW + here->HSM2_dVthsm ; dVth_dVb = dVthSC_dVb + dVthLP_dVb + dVthW_dVb ; dVth_dVd = dVthSC_dVd + dVthLP_dVd + dVthW_dVd ; dVth_dVg = dVthSC_dVg + dVthLP_dVg + dVthW_dVg ; dVth_dPS0Z = dVthSC_dPS0Z + dVthLP_dPS0Z ; /*---------------------------------------------------* * Vth : Threshold voltagei for OP. *-----------------*/ T2 = sqrt( here->HSM2_2qnsub_esi * Pb2 ) ; Vth = Pb2 + Vfb + T2 * Cox0_inv - dVth ; /*-----------------------------------------------------------* * Constants in the equation of Ps0 . *-----------------*/ fac1 = cnst0 * Cox_inv ; fac1_dVbs = cnst0 * Cox_inv_dVb ; fac1_dVds = cnst0 * Cox_inv_dVd ; fac1_dVgs = cnst0 * Cox_inv_dVg ; fac1p2 = fac1 * fac1 ; /*---------------------------------------------------* * Poly-Depletion Effect *-----------------*/ if ( here->HSM2_flg_pgd == 0 ) { dPpg = 0.0 ; dPpg_dVb = 0.0 ; dPpg_dVd = 0.0 ; dPpg_dVg = 0.0 ; } else { T7 = Vgsz ; T7_dVb = 0.0 ; T7_dVd = Vgsz_dVds ; T7_dVg = Vgsz_dVgs ; T0 = here->HSM2_cnstpgd ; T3 = T7 - model->HSM2_pgd2 ; T3_dVb = T7_dVb ; T3_dVd = T7_dVd ; T3_dVg = T7_dVg ; Fn_ExpLim( dPpg , T3 , T6 ) ; dPpg_dVb = T6 * T3_dVb ; dPpg_dVd = T6 * T3_dVd ; dPpg_dVg = T6 * T3_dVg ; Fn_SZ( dPpg , dPpg - 1.0 , 0.1 , T6 ) ; dPpg_dVb *= T6 ; dPpg_dVd *= T6 ; dPpg_dVg *= T6 ; dPpg *= T0 ; dPpg_dVb *= T0 ; dPpg_dVd *= T0 ; dPpg_dVg *= T0 ; Fn_SU( dPpg , dPpg , pol_b , pol_dlt , T9 ) ; dPpg_dVb *= T9 ; dPpg_dVd *= T9 ; dPpg_dVg *= T9 ; } /*---------------------------------------------------* * Vgp : Effective gate bias with SCE & RSCE & flatband. *-----------------*/ Vgp = Vgs - Vfb + dVth - dPpg ; Vgp_dVbs = dVth_dVb - dPpg_dVb ; Vgp_dVds = dVth_dVd - dPpg_dVd ; Vgp_dVgs = 1.0e0 + dVth_dVg - dPpg_dVg ; Vgp_dPS0Z = dVth_dPS0Z ; Vgpz = Vgsz - Vfb + dVth - dPpg ; /* (tmp) */ Vgpz_dVbs = dVth_dVb ; Vgpz_dVds = Vgsz_dVds + dVth_dVd - dPpg_dVd ; Vgpz_dVgs = Vgsz_dVgs + dVth_dVg - dPpg_dVg ; Vgpz_dPS0Z = dVth_dPS0Z ; /*---------------------------------------------------* * Vgs_fb : Actual flatband voltage taking account Vbs. * - note: if Vgs == Vgs_fb then Vgp == Ps0 == Vbs . *------------------*/ Vgs_fb = Vfb - dVth + dPpg + Vbs ; /*-----------------------------------------------------------* * Accumulation zone. (zone-A) * - evaluate basic characteristics and exit from this part. *-----------------*/ if ( Vgs < Vgs_fb ) { flg_zone = -1 ; /*---------------------------------------------------* * Evaluation of Ps0. * - Psa : Analytical solution of * Cox( Vgp - Psa ) = cnst0 * Qacc * where Qacc is the 3-degree series of (fdep)^{1/2}. * The unkown is transformed to Chi=beta(Ps0-Vbs). * - Ps0_min : |Ps0_min| when Vbs=0. *-----------------*/ /* Ps0_min = here->HSM2_eg - Pb2 ; */ /* -> replaced by approx. solving Poisson equation at Vgs=Vgs_min */ /* Ps0_min = 2.0 * beta_inv * log(-Vgs_min/fac1) ; already done above */ TX = beta * ( Vgp - Vbs ) ; TX_dVbs = beta * ( Vgp_dVbs - 1.0 ) ; TX_dVds = beta * Vgp_dVds ; TX_dVgs = beta * Vgp_dVgs ; TX_dPS0Z = beta * Vgp_dPS0Z ; T1 = 1.0 / ( beta * cnst0 ) ; TY = T1 * Cox ; TY_dVbs = T1 * Cox_dVb ; TY_dVds = T1 * Cox_dVd ; TY_dVgs = T1 * Cox_dVg ; Ac41 = 2.0 + 3.0 * C_SQRT_2 * TY ; Ac4 = 8.0 * Ac41 * Ac41 * Ac41 ; T1 = 72.0 * Ac41 * Ac41 * C_SQRT_2 ; Ac4_dVbs = T1 * TY_dVbs ; Ac4_dVds = T1 * TY_dVds ; Ac4_dVgs = T1 * TY_dVgs ; T4 = ( TX - 2.0 ) ; T5 = 9.0 * TY * T4 ; T5_dVb = 9.0 * ( TY_dVbs * T4 + TY * TX_dVbs ) ; T5_dVd = 9.0 * ( TY_dVds * T4 + TY * TX_dVds ) ; T5_dVg = 9.0 * ( TY_dVgs * T4 + TY * TX_dVgs ) ; T5_dPS0Z = 9.0 * ( TY * TX_dPS0Z ) ; Ac31 = 7.0 * C_SQRT_2 - T5 ; Ac31_dVbs = -T5_dVb ; Ac31_dVds = -T5_dVd ; Ac31_dVgs = -T5_dVg ; Ac31_dPS0Z = -T5_dPS0Z ; Ac3 = Ac31 * Ac31 ; T1 = 2.0 * Ac31 ; Ac3_dVbs = T1 * Ac31_dVbs ; Ac3_dVds = T1 * Ac31_dVds ; Ac3_dVgs = T1 * Ac31_dVgs ; Ac3_dPS0Z = T1 * Ac31_dPS0Z ; Ac2 = sqrt( Ac4 + Ac3 ) ; T1 = 0.5 / Ac2 ; Ac2_dVbs = T1 * ( Ac4_dVbs + Ac3_dVbs ) ; Ac2_dVds = T1 * ( Ac4_dVds + Ac3_dVds ) ; Ac2_dVgs = T1 * ( Ac4_dVgs + Ac3_dVgs ) ; Ac2_dPS0Z = T1 * ( Ac3_dPS0Z ) ; Ac1 = -7.0 * C_SQRT_2 + Ac2 + T5 ; Ac1_dVbs = Ac2_dVbs + T5_dVb ; Ac1_dVds = Ac2_dVds + T5_dVd ; Ac1_dVgs = Ac2_dVgs + T5_dVg ; Ac1_dPS0Z = Ac2_dPS0Z + T5_dPS0Z ; Acd = Fn_Pow( Ac1 , C_1o3 ) ; T1 = C_1o3 / ( Acd * Acd ) ; Acd_dVbs = Ac1_dVbs * T1 ; Acd_dVds = Ac1_dVds * T1 ; Acd_dVgs = Ac1_dVgs * T1 ; Acd_dPS0Z = Ac1_dPS0Z * T1 ; Acn = -4.0 * C_SQRT_2 - 12.0 * TY + 2.0 * Acd + C_SQRT_2 * Acd * Acd ; T1 = 2.0 + 2.0 * C_SQRT_2 * Acd ; Acn_dVbs = - 12.0 * TY_dVbs + T1 * Acd_dVbs ; Acn_dVds = - 12.0 * TY_dVds + T1 * Acd_dVds ; Acn_dVgs = - 12.0 * TY_dVgs + T1 * Acd_dVgs ; Acn_dPS0Z = T1 * Acd_dPS0Z ; T1 = 1.0 / Acd ; Chi = Acn * T1 ; Chi_dVbs = ( Acn_dVbs - Chi * Acd_dVbs ) * T1 ; Chi_dVds = ( Acn_dVds - Chi * Acd_dVds ) * T1 ; Chi_dVgs = ( Acn_dVgs - Chi * Acd_dVgs ) * T1 ; Chi_dPS0Z = ( Acn_dPS0Z - Chi * Acd_dPS0Z ) * T1 ; Psa = Chi * beta_inv + Vbs ; Psa_dVbs = Chi_dVbs * beta_inv + 1.0 ; Psa_dVds = Chi_dVds * beta_inv ; Psa_dVgs = Chi_dVgs * beta_inv ; Psa_dPS0Z = Chi_dPS0Z * beta_inv ; T1 = Psa - Vbs ; T2 = T1 / Ps0_min ; T3 = sqrt( 1.0 + ( T2 * T2 ) ) ; T9 = T2 / T3 / Ps0_min ; T3_dVb = T9 * ( Psa_dVbs - 1.0 ) ; T3_dVd = T9 * ( Psa_dVds ) ; T3_dVg = T9 * ( Psa_dVgs ) ; T3_dPS0Z = T9 * ( Psa_dPS0Z ) ; Ps0 = T1 / T3 + Vbs ; T9 = 1.0 / ( T3 * T3 ) ; Ps0_dVbs = T9 * ( ( Psa_dVbs - 1.0 ) * T3 - T1 * T3_dVb ) + 1.0 ; Ps0_dVds = T9 * ( Psa_dVds * T3 - T1 * T3_dVd ) ; Ps0_dVgs = T9 * ( Psa_dVgs * T3 - T1 * T3_dVg ) ; Ps0_dPS0Z = T9 * ( Psa_dPS0Z * T3 - T1 * T3_dPS0Z ) ; /*---------------------------------------------------* * Characteristics. *-----------------*/ Psl = Ps0 ; Psl_dVbs = Ps0_dVbs ; Psl_dVds = Ps0_dVds ; Psl_dVgs = Ps0_dVgs ; T2 = ( Vgp - Ps0 ) ; Qbu = Cox * T2 ; Qbu_dVbs = Cox * ( Vgp_dVbs - Ps0_dVbs ) + Cox_dVb * T2 ; Qbu_dVds = Cox * ( Vgp_dVds - Ps0_dVds ) + Cox_dVd * T2 ; Qbu_dVgs = Cox * ( Vgp_dVgs - Ps0_dVgs ) + Cox_dVg * T2 ; Qiu = 0.0e0 ; Qiu_dVbs = 0.0e0 ; Qiu_dVds = 0.0e0 ; Qiu_dVgs = 0.0e0 ; Qdrat = 0.5e0 ; Qdrat_dVbs = 0.0e0 ; Qdrat_dVds = 0.0e0 ; Qdrat_dVgs = 0.0e0 ; Lred = 0.0e0 ; Lred_dVbs = 0.0e0 ; Lred_dVds = 0.0e0 ; Lred_dVgs = 0.0e0 ; Ids = 0.0e0 ; Ids_dVbs = 0.0e0 ; Ids_dVds = 0.0e0 ; Ids_dVgs = 0.0e0 ; VgVt = 0.0 ; flg_noqi = 1 ; DJI = 1.0 ; if( corecip ){ /*!! This is for Accumulation Region !!*/ T1 = Vds * 0.5 ; Fn_SymAdd( Pzadd , T1 , model->HSM2_pzadd0 , T2 ) ; T2 /= 2 ; Pzadd_dVbs = 0.0 ; Pzadd_dVds = T2 * ( 1.0 ) ; Pzadd_dVgs = 0.0 ; Pzadd_dPS0Z = 0.0 ; if ( Pzadd < epsm10 ) { Pzadd = epsm10 ; Pzadd_dVbs = 0.0 ; Pzadd_dVds = 0.0 ; Pzadd_dVgs = 0.0 ; Pzadd_dPS0Z = 0.0 ; } Ps0z = Ps0 + Pzadd ; Ps0z_dVbs = Ps0_dVbs + Pzadd_dVbs ; Ps0z_dVds = Ps0_dVds + Pzadd_dVds ; Ps0z_dVgs = Ps0_dVgs + Pzadd_dVgs ; Ps0z_dPS0Z = Ps0_dPS0Z + Pzadd_dPS0Z ; /* calculate Newton correction: */ G = PS0Z_SCE - Ps0z ; delta_PS0Z_SCE = - G / (1.0 - Ps0z_dPS0Z) ; delta_PS0Z_SCE_dVbs = Ps0z_dVbs - PS0Z_SCE_dVbs; delta_PS0Z_SCE_dVds = Ps0z_dVds - PS0Z_SCE_dVds; delta_PS0Z_SCE_dVgs = Ps0z_dVgs - PS0Z_SCE_dVgs; PS0Z_SCE += delta_PS0Z_SCE ; PS0Z_SCE_dVbs = Ps0z_dVbs ; PS0Z_SCE_dVds = Ps0z_dVds ; PS0Z_SCE_dVgs = Ps0z_dVgs ; PS0_SCE = PS0Z_SCE - Pzadd ; PS0_SCE_dVbs = Ps0_dVbs ; PS0_SCE_dVds = Ps0_dVds ; PS0_SCE_dVgs = Ps0_dVgs ; NNN += 1 ; if( ( fabs(delta_PS0Z_SCE) > PS0_SCE_tol || fabs(delta_PS0Z_SCE_dVbs) > PS0_SCE_deriv_tol || fabs(delta_PS0Z_SCE_dVds) > PS0_SCE_deriv_tol || fabs(delta_PS0Z_SCE_dVgs) > PS0_SCE_deriv_tol ) && (NNN < MAX_LOOP_SCE) ){ // goto START_OF_SCE_LOOP; START_OF_SCE_LOOP = 1 ; } } //goto end_of_part_1 ; if( START_OF_SCE_LOOP==0 ) end_of_part_1 = 1 ; } } /* End of 3rd SCE_LOOP */ if ( end_of_part_1 == 0 ) { /* skip to end_of_part_1 */ /*-----------------------------------------------------------* * Initial guess for Ps0. *-----------------*/ /*---------------------------------------------------* * Ps0_iniA: solution of subthreshold equation assuming zone-D1/D2. *-----------------*/ TX = 1.0e0 + 4.0e0 * ( beta * ( Vgp - Vbs ) - 1.0e0 ) / ( fac1p2 * beta2 ) ; TX = Fn_Max( TX , epsm10 ) ; Ps0_iniA = Vgp + fac1p2 * beta * 0.5 * ( 1.0e0 - sqrt( TX ) ) ; /* use analitical value in subthreshold region. */ if ( Vgs < ( Vfb + Vth ) * 0.5 ) { flg_pprv = 0 ; } if ( flg_pprv >= 1 ) { /*---------------------------------------------------* * Use previous value. *-----------------*/ T1 = Ps0_dVbs * dVbs + Ps0_dVds * dVds + Ps0_dVgs * dVgs ; Ps0_ini = Ps0 + T1 ; if ( flg_pprv == 2 ) { /* TX_dVxs = d^2 Ps0 / d Vxs^2 here */ if ( Vbsc_dif2 > epsm10 ) { TX_dVbs = ( here->HSM2_ps0_dvbs_prv - here->HSM2_ps0_dvbs_prv2 ) / Vbsc_dif2 ; } else { TX_dVbs = 0.0 ; } if ( Vdsc_dif2 > epsm10 ) { TX_dVds = ( here->HSM2_ps0_dvds_prv - here->HSM2_ps0_dvds_prv2 ) / Vdsc_dif2 ; } else { TX_dVds = 0.0 ; } if ( Vgsc_dif2 > epsm10 ) { TX_dVgs = ( here->HSM2_ps0_dvgs_prv - here->HSM2_ps0_dvgs_prv2 ) / Vgsc_dif2 ; } else { TX_dVgs = 0.0 ; } T2 = ( dVbs * dVbs ) / 2 * TX_dVbs + ( dVds * dVds ) / 2 * TX_dVds + ( dVgs * dVgs ) / 2 * TX_dVgs ; if ( fabs( T2 ) < fabs( 0.5 * T1 ) ) { Ps0_ini += T2 ; } else { flg_pprv = 1 ; } } T1 = Ps0_ini - Ps0 ; if ( T1 < - dP_max || T1 > dP_max ) { flg_pprv = 0 ; /* flag changes to analitical */ } else { Ps0_iniA = Fn_Max( Ps0_ini , Ps0_iniA ) ; } } /* end of (flg_pprv >=1) if-block */ if ( flg_pprv == 0 ) { /*---------------------------------------------------* * Analytical initial guess. *-----------------*/ /*-------------------------------------------* * Common part. *-----------------*/ Chi = beta * ( Ps0_iniA - Vbs ) ; if ( Chi < znbd3 ) { /*-----------------------------------* * zone-D1/D2 * - Ps0_ini is the analytical solution of Qs=Qb0 with * Qb0 being approximated to 3-degree polynomial. *-----------------*/ TY = beta * ( Vgp - Vbs ) ; T1 = 1.0e0 / ( cn_nc3 * beta * fac1 ) ; T2 = 81.0 + 3.0 * T1 ; T3 = -2916.0 - 81.0 * T1 + 27.0 * T1 * TY ; T4 = 1458.0 - 81.0 * ( 54.0 + T1 ) + 27.0 * T1 * TY ; T4 = T4 * T4 ; T5 = Fn_Pow( T3 + sqrt( 4 * T2 * T2 * T2 + T4 ) , C_1o3 ) ; TX = 3.0 - ( C_2p_1o3 * T2 ) / ( 3.0 * T5 ) + 1 / ( 3.0 * C_2p_1o3 ) * T5 ; Ps0_iniA = TX * beta_inv + Vbs ; Ps0_ini = Ps0_iniA ; } else if ( Vgs <= Vth ) { /*-----------------------------------* * Weak inversion zone. *-----------------*/ Ps0_ini = Ps0_iniA ; } else { /*-----------------------------------* * Strong inversion zone. * - Ps0_iniB : upper bound. *-----------------*/ T1 = 1.0 / cnst1 / cnstCoxi ; T2 = T1 * Vgp * Vgp ; T3 = beta + 2.0 / Vgp ; Ps0_iniB = log( T2 + small ) / T3 ; Fn_SU( Ps0_ini , Ps0_iniA, Ps0_iniB, c_ps0ini_2, T1) ; } } TX = Vbs + ps_conv / 2 ; if ( Ps0_ini < TX ) Ps0_ini = TX ; /*---------------------------------------------------* * Assign initial guess. *-----------------*/ if ( NNN == 0 ) { Ps0 = Ps0_ini ; } Psl_lim = Ps0_iniA ; /*---------------------------------------------------* * Calculation of Ps0. (beginning of Newton loop) * - Fs0 : Fs0 = 0 is the equation to be solved. * - dPs0 : correction value. *-----------------*/ exp_bVbs = exp( beta * Vbs ) ; cfs1 = cnst1 * exp_bVbs ; flg_conv = 0 ; for ( lp_s0 = 1 ; lp_s0 <= lp_s0_max + 1 ; lp_s0 ++ ) { Chi = beta * ( Ps0 - Vbs ) ; if ( Chi < znbd5 ) { /*-------------------------------------------* * zone-D1/D2. (Ps0) * - Qb0 is approximated to 5-degree polynomial. *-----------------*/ fi = Chi * Chi * Chi * ( cn_im53 + Chi * ( cn_im54 + Chi * cn_im55 ) ) ; fi_dChi = Chi * Chi * ( 3 * cn_im53 + Chi * ( 4 * cn_im54 + Chi * 5 * cn_im55 ) ) ; fs01 = cfs1 * fi * fi ; fs01_dPs0 = cfs1 * beta * 2 * fi * fi_dChi ; fb = Chi * ( cn_nc51 + Chi * ( cn_nc52 + Chi * ( cn_nc53 + Chi * ( cn_nc54 + Chi * cn_nc55 ) ) ) ) ; fb_dChi = cn_nc51 + Chi * ( 2 * cn_nc52 + Chi * ( 3 * cn_nc53 + Chi * ( 4 * cn_nc54 + Chi * 5 * cn_nc55 ) ) ) ; fs02 = sqrt( fb * fb + fs01 ) ; fs02_dPs0 = ( beta * fb_dChi * 2 * fb + fs01_dPs0 ) / ( fs02 + fs02 ) ; } else { /*-------------------------------------------* * zone-D3. (Ps0) *-----------------*/ if ( Chi < large_arg ) { /* avoid exp_Chi to become extremely large */ exp_Chi = exp( Chi ) ; fs01 = cfs1 * ( exp_Chi - 1.0e0 ) ; fs01_dPs0 = cfs1 * beta * ( exp_Chi ) ; } else { exp_bPs0 = exp( beta*Ps0 ) ; fs01 = cnst1 * ( exp_bPs0 - exp_bVbs ) ; fs01_dPs0 = cnst1 * beta * exp_bPs0 ; } fs02 = sqrt( Chi - 1.0 + fs01 ) ; fs02_dPs0 = ( beta + fs01_dPs0 ) / ( fs02 + fs02 ) ; } /* end of if ( Chi ... ) else block */ Fs0 = Vgp - Ps0 - fac1 * fs02 ; Fs0_dPs0 = - 1.0e0 - fac1 * fs02_dPs0 ; if ( flg_conv == 1 ) break ; dPs0 = - Fs0 / Fs0_dPs0 ; /*-------------------------------------------* * Update Ps0 . * - clamped to Vbs if Ps0 < Vbs . *-----------------*/ dPlim = 0.5*dP_max*(1.0 + Fn_Max(1.e0,fabs(Ps0))) ; if ( fabs( dPs0 ) > dPlim ) dPs0 = dPlim * Fn_Sgn( dPs0 ) ; Ps0 = Ps0 + dPs0 ; TX = Vbs + ps_conv / 2 ; if ( Ps0 < TX ) Ps0 = TX ; /*-------------------------------------------* * Check convergence. * NOTE: This condition may be too rigid. *-----------------*/ if ( fabs( dPs0 ) <= ps_conv && fabs( Fs0 ) <= gs_conv ) { flg_conv = 1 ; } } /* end of Ps0 Newton loop */ /* Eliminate loop count to take account of the derivative loop */ lp_s0 -- ; /*-------------------------------------------* * Procedure for diverged case. *-----------------*/ if ( flg_conv == 0 ) { fprintf( stderr , "*** warning(HiSIM): Went Over Iteration Maximum (Ps0)\n" ) ; fprintf( stderr , " Vbse = %7.3f Vdse = %7.3f Vgse = %7.3f\n" , Vbse , Vdse , Vgse ) ; if ( flg_info >= 2 ) { printf( "*** warning(HiSIM): Went Over Iteration Maximum (Ps0)\n" ) ; } } /*---------------------------------------------------* * Evaluate derivatives of Ps0. * - note: Here, fs01_dVbs and fs02_dVbs are derivatives * w.r.t. explicit Vbs. So, Ps0 in the fs01 and fs02 * expressions is regarded as a constant. *-----------------*/ /* derivatives of fs0* w.r.t. explicit Vbs */ if ( Chi < znbd5 ) { fs01_dVbs = cfs1 * beta * fi * ( fi - 2 * fi_dChi ) ; T2 = 1.0e0 / ( fs02 + fs02 ) ; fs02_dVbs = ( - beta * fb_dChi * 2 * fb + fs01_dVbs ) * T2 ; } else { fs01_dVbs = - cfs1 * beta ; T2 = 0.5e0 / fs02 ; fs02_dVbs = ( - beta + fs01_dVbs ) * T2 ; } T1 = 1.0 / Fs0_dPs0 ; Ps0_dVbs = - ( Vgp_dVbs - ( fac1 * fs02_dVbs + fac1_dVbs * fs02 ) ) * T1 ; Ps0_dVds = - ( Vgp_dVds - fac1_dVds * fs02 ) * T1 ; Ps0_dVgs = - ( Vgp_dVgs - fac1_dVgs * fs02 ) * T1 ; if ( Chi < znbd5 ) { /*-------------------------------------------* * zone-D1/D2. (Ps0) * Xi0 := fdep0^2 = fb * fb [D1,D2] *-----------------*/ Xi0 = fb * fb + epsm10 ; T1 = 2 * fb * fb_dChi * beta ; Xi0_dVbs = T1 * ( Ps0_dVbs - 1.0 ) ; Xi0_dVds = T1 * Ps0_dVds ; Xi0_dVgs = T1 * Ps0_dVgs ; Xi0p12 = fb + epsm10 ; T1 = fb_dChi * beta ; Xi0p12_dVbs = T1 * ( Ps0_dVbs - 1.0 ) ; Xi0p12_dVds = T1 * Ps0_dVds ; Xi0p12_dVgs = T1 * Ps0_dVgs ; Xi0p32 = fb * fb * fb + epsm10 ; T1 = 3 * fb * fb * fb_dChi * beta ; Xi0p32_dVbs = T1 * ( Ps0_dVbs - 1.0 ) ; Xi0p32_dVds = T1 * Ps0_dVds ; Xi0p32_dVgs = T1 * Ps0_dVgs ; } else { /*-------------------------------------------* * zone-D3. (Ps0) *-----------------*/ flg_zone = 3 ; flg_noqi = 0 ; /*-----------------------------------* * Xi0 := fdep0^2 = Chi - 1 = beta * ( Ps0 - Vbs ) - 1 [D3] *-----------------*/ Xi0 = Chi - 1.0e0 ; Xi0_dVbs = beta * ( Ps0_dVbs - 1.0e0 ) ; Xi0_dVds = beta * Ps0_dVds ; Xi0_dVgs = beta * Ps0_dVgs ; Xi0p12 = sqrt( Xi0 ) ; T1 = 0.5e0 / Xi0p12 ; Xi0p12_dVbs = T1 * Xi0_dVbs ; Xi0p12_dVds = T1 * Xi0_dVds ; Xi0p12_dVgs = T1 * Xi0_dVgs ; Xi0p32 = Xi0 * Xi0p12 ; T1 = 1.5e0 * Xi0p12 ; Xi0p32_dVbs = T1 * Xi0_dVbs ; Xi0p32_dVds = T1 * Xi0_dVds ; Xi0p32_dVgs = T1 * Xi0_dVgs ; } /* end of if ( Chi ... ) block */ /*-----------------------------------------------------------* * - Recalculate the derivatives of fs01 and fs02. * note: fs01 = cnst1 * exp( Vbs ) * ( exp( Chi ) - Chi - 1.0e0 ) ; * fs02 = sqrt( Xi0 + fs01 ) ; *-----------------*/ fs01_dVbs = Ps0_dVbs * fs01_dPs0 + fs01_dVbs ; fs01_dVds = Ps0_dVds * fs01_dPs0 ; fs01_dVgs = Ps0_dVgs * fs01_dPs0 ; fs02_dVbs = Ps0_dVbs * fs02_dPs0 + fs02_dVbs ; fs02_dVds = Ps0_dVds * fs02_dPs0 ; fs02_dVgs = Ps0_dVgs * fs02_dPs0 ; /*-----------------------------------------------------------* * Qb0 : Qb at source side. * Qn0 : Qi at source side. *-----------------*/ Qb0 = cnst0 * Xi0p12 ; Qb0_dVb = cnst0 * Xi0p12_dVbs ; Qb0_dVd = cnst0 * Xi0p12_dVds ; Qb0_dVg = cnst0 * Xi0p12_dVgs ; T1 = 1.0 / ( fs02 + Xi0p12 ) ; Qn0 = cnst0 * fs01 * T1 ; T2 = 1.0 / ( fs01 + epsm10 ) ; Qn0_dVbs = Qn0 * ( fs01_dVbs * T2 - ( fs02_dVbs + Xi0p12_dVbs ) * T1 ) ; Qn0_dVds = Qn0 * ( fs01_dVds * T2 - ( fs02_dVds + Xi0p12_dVds ) * T1 ) ; Qn0_dVgs = Qn0 * ( fs01_dVgs * T2 - ( fs02_dVgs + Xi0p12_dVgs ) * T1 ) ; /*-----------------------------------------------------------* * zone-D1 and D2 *-----------------*/ if ( Chi < znbd5 ) { if ( Chi < znbd3 ) { /*-------------------------------------------* * zone-D1. (Ps0) *-----------------*/ flg_zone = 1 ; flg_noqi = 1 ; /** !! to be revisited !! **/ Qiu = Qn0 ; Qiu_dVbs = Qn0_dVbs ; Qiu_dVds = Qn0_dVds ; Qiu_dVgs = Qn0_dVgs ; Qbu = Qb0 ; Qbu_dVbs = Qb0_dVb ; Qbu_dVds = Qb0_dVd ; Qbu_dVgs = Qb0_dVg ; Qdrat = 0.5 ; Qdrat_dVbs = 0.0 ; Qdrat_dVds = 0.0 ; Qdrat_dVgs = 0.0 ; Lred = 0.0e0 ; Lred_dVbs = 0.0e0 ; Lred_dVds = 0.0e0 ; Lred_dVgs = 0.0e0 ; } else { /*-------------------------------------------* * zone-D2 (Ps0) *-----------------*/ flg_zone = 2 ; flg_noqi = 0 ; /*-----------------------------------------------------------* * FD2 : connecting function for zone-D2. * - Qiu, Qbu, Qdrat and Lred should be interpolated later. *-----------------*/ T1 = 1.0 / ( znbd5 - znbd3 ) ; TX = T1 * ( Chi - znbd3 ) ; TX_dVbs = beta * T1 * ( Ps0_dVbs - 1.0 ) ; TX_dVds = beta * T1 * Ps0_dVds ; TX_dVgs = beta * T1 * Ps0_dVgs ; FD2 = TX * TX * TX * ( 10.0 + TX * ( -15.0 + TX * 6.0 ) ) ; T4 = TX * TX * ( 30.0 + TX * ( -60.0 + TX * 30.0 ) ) ; FD2_dVbs = T4 * TX_dVbs ; FD2_dVds = T4 * TX_dVds ; FD2_dVgs = T4 * TX_dVgs ; } /* end of zone-D2 */ } /*---------------------------------------------------* * VgVt : Vgp - Vth_qi. ( Vth_qi is Vth for Qi evaluation. ) *-----------------*/ VgVt = Qn0 * Cox_inv ; VgVt_dVbs = Qn0_dVbs * Cox_inv + Qn0 * Cox_inv_dVb ; VgVt_dVds = Qn0_dVds * Cox_inv + Qn0 * Cox_inv_dVd ; VgVt_dVgs = Qn0_dVgs * Cox_inv + Qn0 * Cox_inv_dVg ; /*-----------------------------------------------------------* * make Qi=Qd=Ids=0 if VgVt <= VgVt_small *-----------------*/ if ( VgVt <= VgVt_small && model->HSM2_bypass_enable ) { flg_zone = 4 ; flg_noqi = 1 ; Psl = Ps0 ; Psl_dVbs = Ps0_dVbs ; Psl_dVds = Ps0_dVds ; Psl_dVgs = Ps0_dVgs ; Pds = 0.0 ; Pds_dVbs = 0.0 ; Pds_dVds = 0.0 ; Pds_dVgs = 0.0 ; Qbu = Qb0 ; Qbu_dVbs = Qb0_dVb ; Qbu_dVds = Qb0_dVd ; Qbu_dVgs = Qb0_dVg ; Qiu = 0.0 ; Qiu_dVbs = 0.0 ; Qiu_dVds = 0.0 ; Qiu_dVgs = 0.0 ; Qdrat = 0.5 ; Qdrat_dVbs = 0.0 ; Qdrat_dVds = 0.0 ; Qdrat_dVgs = 0.0 ; Lred = 0.0 ; Lred_dVbs = 0.0 ; Lred_dVds = 0.0 ; Lred_dVgs = 0.0 ; Ids = 0.0e0 ; Ids_dVbs = 0.0e0 ; Ids_dVds = 0.0e0 ; Ids_dVgs = 0.0e0 ; DJI = 1.0 ; if( corecip ){ Fs0_dPS0Z = Vgp_dPS0Z ; Ps0_dPS0Z = - Fs0_dPS0Z / Fs0_dPs0 ; T1 = Vds * 0.5 ; Fn_SymAdd( Pzadd , T1 , model->HSM2_pzadd0 , T2 ) ; T2 /= 2 ; Pzadd_dVbs = 0.0 ; Pzadd_dVds = T2 * ( 1.0 ) ; Pzadd_dVgs = 0.0 ; Pzadd_dPS0Z = 0.0 ; if ( Pzadd < epsm10 ) { Pzadd = epsm10 ; Pzadd_dVbs = 0.0 ; Pzadd_dVds = 0.0 ; Pzadd_dVgs = 0.0 ; Pzadd_dPS0Z = 0.0 ; } Ps0z = Ps0 + Pzadd ; Ps0z_dVbs = Ps0_dVbs + Pzadd_dVbs ; Ps0z_dVds = Ps0_dVds + Pzadd_dVds ; Ps0z_dVgs = Ps0_dVgs + Pzadd_dVgs ; Ps0z_dPS0Z = Ps0_dPS0Z + Pzadd_dPS0Z ; /* calculate Newton correction: */ G = PS0Z_SCE - Ps0z ; delta_PS0Z_SCE = - G / (1.0 - Ps0z_dPS0Z) ; delta_PS0Z_SCE_dVbs = Ps0z_dVbs - PS0Z_SCE_dVbs; delta_PS0Z_SCE_dVds = Ps0z_dVds - PS0Z_SCE_dVds; delta_PS0Z_SCE_dVgs = Ps0z_dVgs - PS0Z_SCE_dVgs; PS0Z_SCE += delta_PS0Z_SCE ; PS0Z_SCE_dVbs = Ps0z_dVbs ; PS0Z_SCE_dVds = Ps0z_dVds ; PS0Z_SCE_dVgs = Ps0z_dVgs ; PS0_SCE = PS0Z_SCE - Pzadd ; PS0_SCE_dVbs = Ps0_dVbs ; PS0_SCE_dVds = Ps0_dVds ; PS0_SCE_dVgs = Ps0_dVgs ; NNN += 1 ; if( ( fabs(delta_PS0Z_SCE) > PS0_SCE_tol || fabs(delta_PS0Z_SCE_dVbs) > PS0_SCE_deriv_tol || fabs(delta_PS0Z_SCE_dVds) > PS0_SCE_deriv_tol || fabs(delta_PS0Z_SCE_dVgs) > PS0_SCE_deriv_tol ) && (NNN < MAX_LOOP_SCE) ){ //go to START_OF_SCE_LOOP; START_OF_SCE_LOOP = 1 ; } } //goto end_of_part_1 ; if( START_OF_SCE_LOOP==0 ) end_of_part_1 = 1 ; } } /* skip end_of_part_1 */ } /* End of 2nd SCE_LOOP */ if( end_of_part_1 == 0 ) { /* skip to end_of_part_1 */ /*-----------------------------------------------------------* * Start point of Psl (= Ps0 + Pds) calculation. (label) *-----------------*/ /* start_of_Psl:*/ /* Vdseff (begin) */ Vdsorg = Vds ; T2 = here->HSM2_qnsub_esi / ( Cox * Cox ) ; T4 = - 2.0e0 * T2 / Cox ; T2_dVb = T4 * Cox_dVb ; T2_dVd = T4 * Cox_dVd ; T2_dVg = T4 * Cox_dVg ; T5 = Vgpz - beta_inv - Vbsz ; T5_dVb = Vgpz_dVbs - Vbsz_dVbs ; T5_dVd = Vgpz_dVds - Vbsz_dVds ; T5_dVg = Vgpz_dVgs ; T0 = 2.0 / T2 ; T1 = 1.0e0 + T0 * T5 ; T1_dVb = ( T5_dVb * T2 - T5 * T2_dVb ) * T0 / T2 ; T1_dVd = ( T5_dVd * T2 - T5 * T2_dVd ) * T0 / T2 ; T1_dVg = ( T5_dVg * T2 - T5 * T2_dVg ) * T0 / T2 ; Fn_SZ( T1 , T1 , 0.05 , T9 ) ; T1 += small ; T1_dVb *= T9 ; T1_dVd *= T9 ; T1_dVg *= T9 ; T3 = sqrt( T1 ) ; T3_dVb = 0.5 / T3 * T1_dVb ; T3_dVd = 0.5 / T3 * T1_dVd ; T3_dVg = 0.5 / T3 * T1_dVg ; T10 = Vgpz + T2 * ( 1.0e0 - T3 ) ; T10_dVb = Vgpz_dVbs + T2_dVb * ( 1.0e0 - T3 ) - T2 * T3_dVb ; T10_dVd = Vgpz_dVds + T2_dVd * ( 1.0e0 - T3 ) - T2 * T3_dVd ; T10_dVg = Vgpz_dVgs + T2_dVg * ( 1.0e0 - T3 ) - T2 * T3_dVg ; Fn_SZ( T10 , T10 , 0.01 , T0 ) ; T10 += epsm10 ; T10_dVb *= T0 ; T10_dVd *= T0 ; T10_dVg *= T0 ; T1 = Vds / T10 ; T2 = Fn_Pow( T1 , here->HSM2_ddlt - 1.0e0 ) ; T7 = T2 * T1 ; T0 = here->HSM2_ddlt * T2 / ( T10 * T10 ) ; T7_dVb = T0 * ( - Vds * T10_dVb ) ; T7_dVd = T0 * ( T10 - Vds * T10_dVd ) ; T7_dVg = T0 * ( - Vds * T10_dVg ) ; T3 = 1.0 + T7 ; T4 = Fn_Pow( T3 , 1.0 / here->HSM2_ddlt - 1.0 ) ; T6 = T4 * T3 ; T0 = T4 / here->HSM2_ddlt ; T6_dVb = T0 * T7_dVb ; T6_dVd = T0 * T7_dVd ; T6_dVg = T0 * T7_dVg ; Vdseff = Vds / T6 ; T0 = 1.0 / ( T6 * T6 ) ; Vdseff_dVbs = - Vds * T6_dVb * T0 ; Vdseff_dVds = ( T6 - Vds * T6_dVd ) * T0 ; Vdseff_dVgs = - Vds * T6_dVg * T0 ; Vds = Vdseff ; /* Vdseff (end) */ exp_bVbsVds = exp( beta * ( Vbs - Vds ) ) ; /*---------------------------------------------------* * Skip Psl calculation when Vds is very small. *-----------------*/ if ( Vds <= 0.0 ) { Pds = 0.0 ; Psl = Ps0 ; flg_conv = 1 ; goto start_of_loopl ; } /*-----------------------------------------------------------* * Initial guess for Pds ( = Psl - Ps0 ). *-----------------*/ if ( flg_pprv >= 1 ) { /*---------------------------------------------------* * Use previous value. *-----------------*/ T1 = Pds_dVbs * dVbs + Pds_dVds * dVds + Pds_dVgs * dVgs ; Pds_ini = Pds + T1 ; if ( flg_pprv == 2 ) { /* TX_dVxs = d^2 Pds / d Vxs^2 here */ if ( Vbsc_dif2 > epsm10 ) { TX_dVbs = ( here->HSM2_pds_dvbs_prv - here->HSM2_pds_dvbs_prv2 ) / Vbsc_dif2 ; } else { TX_dVbs = 0.0 ; } if ( Vdsc_dif2 > epsm10 ) { TX_dVds = ( here->HSM2_pds_dvds_prv - here->HSM2_pds_dvds_prv2 ) / Vdsc_dif2 ; } else { TX_dVds = 0.0 ; } if ( Vgsc_dif2 > epsm10 ) { TX_dVgs = ( here->HSM2_pds_dvgs_prv - here->HSM2_pds_dvgs_prv2 ) / Vgsc_dif2 ; } else { TX_dVgs = 0.0 ; } T2 = ( dVbs * dVbs ) / 2 * TX_dVbs + ( dVds * dVds ) / 2 * TX_dVds + ( dVgs * dVgs ) / 2 * TX_dVgs ; if ( fabs( T2 ) < fabs( 0.5 * T1 ) ) { Pds_ini += T2 ; } else { flg_pprv = 1 ; } } T1 = Pds_ini - Pds ; if ( T1 < - dP_max || T1 > dP_max ) flg_pprv = 0 ; /* flag changes */ } /* end of (flg_pprv>=1) if-block */ if ( flg_pprv == 0 ) { /*---------------------------------------------------* * Analytical initial guess. *-----------------*/ Pds_max = Fn_Max( Psl_lim - Ps0 , 0.0e0 ) ; Fn_SU( Pds_ini , Vds, (1.0e0 + c_pslini_1) * Pds_max, c_pslini_2, T1 ) ; Pds_ini = Fn_Min( Pds_ini , Pds_max ) ; } if ( Pds_ini < 0.0 ) Pds_ini = 0.0 ; else if ( Pds_ini > Vds ) Pds_ini = Vds ; /*---------------------------------------------------* * Assign initial guess. *-----------------*/ if ( NNN == 0 ) { Pds = Pds_ini ; Psl = Ps0 + Pds ; } else { /* take solution from previous PS0_SCE_loop as initial value */ Pds = Psl - Ps0 ; } TX = Vbs + ps_conv / 2 ; if ( Psl < TX ) Psl = TX ; /*---------------------------------------------------* * Calculation of Psl by solving Poisson eqn. * (beginning of Newton loop) * - Fsl : Fsl = 0 is the equation to be solved. * - dPsl : correction value. *-----------------*/ flg_conv = 0 ; /*---------------------------------------------------* * start of Psl calculation. (label) *-----------------*/ start_of_loopl: for ( lp_sl = 1 ; lp_sl <= lp_sl_max + 1 ; lp_sl ++ ) { Chi = beta * ( Psl - Vbs ) ; if ( Chi < znbd5 ) { /*-------------------------------------------* * zone-D2. (Psl) * - Qb0 is approximated to 5-degree polynomial. *-----------------*/ fi = Chi * Chi * Chi * ( cn_im53 + Chi * ( cn_im54 + Chi * cn_im55 ) ) ; fi_dChi = Chi * Chi * ( 3 * cn_im53 + Chi * ( 4 * cn_im54 + Chi * 5 * cn_im55 ) ) ; cfs1 = cnst1 * exp_bVbsVds ; fsl1 = cfs1 * fi * fi ; fsl1_dPsl = cfs1 * beta * 2 * fi * fi_dChi ; fb = Chi * ( cn_nc51 + Chi * ( cn_nc52 + Chi * ( cn_nc53 + Chi * ( cn_nc54 + Chi * cn_nc55 ) ) ) ) ; fb_dChi = cn_nc51 + Chi * ( 2 * cn_nc52 + Chi * ( 3 * cn_nc53 + Chi * ( 4 * cn_nc54 + Chi * 5 * cn_nc55 ) ) ) ; fsl2 = sqrt( fb * fb + fsl1 ) ; fsl2_dPsl = ( beta * fb_dChi * 2 * fb + fsl1_dPsl ) / ( fsl2 + fsl2 ) ; } else { /*-------------------------------------------* * zone-D3. (Psl) *-----------------*/ Rho = beta * ( Psl - Vds ) ; exp_Rho = exp( Rho ) ; fsl1 = cnst1 * ( exp_Rho - exp_bVbsVds ) ; fsl1_dPsl = cnst1 * beta * ( exp_Rho ) ; Xil = Chi - 1.0e0 ; fsl2 = sqrt( Xil + fsl1 ) ; fsl2_dPsl = ( beta + fsl1_dPsl ) / ( fsl2 + fsl2 ) ; } Fsl = Vgp - Psl - fac1 * fsl2 ; Fsl_dPsl = - 1.0e0 - fac1 * fsl2_dPsl ; if ( flg_conv == 1 ) break ; dPsl = - Fsl / Fsl_dPsl ; /*-------------------------------------------* * Update Psl . * - clamped to Vbs if Psl < Vbs . *-----------------*/ dPlim = 0.5*dP_max*(1.0 + Fn_Max(1.e0,fabs(Psl))) ; if ( fabs( dPsl ) > dPlim ) dPsl = dPlim * Fn_Sgn( dPsl ) ; Psl = Psl + dPsl ; TX = Vbs + ps_conv / 2 ; if ( Psl < TX ) Psl = TX ; /*-------------------------------------------* * Check convergence. * NOTE: This condition may be too rigid. *-----------------*/ if ( fabs( dPsl ) <= ps_conv && fabs( Fsl ) <= gs_conv ) { flg_conv = 1 ; } } /* end of Psl Newton loop */ /* Eliminate loop count to take account of the derivative loop */ lp_sl -- ; /*-------------------------------------------* * Procedure for diverged case. *-----------------*/ if ( flg_conv == 0 ) { fprintf( stderr , "*** warning(HiSIM): Went Over Iteration Maximum (Psl)\n" ) ; fprintf( stderr , " Vbse = %7.3f Vdse = %7.3f Vgse = %7.3f\n" , Vbse , Vdse , Vgse ) ; if ( flg_info >= 2 ) { printf("*** warning(HiSIM): Went Over Iteration Maximum (Psl)\n" ) ; } } /*---------------------------------------------------* * Evaluate derivatives of Psl. * - note: Here, fsl1_dVbs and fsl2_dVbs are derivatives * w.r.t. explicit Vbs. So, Psl in the fsl1 and fsl2 * expressions is regarded as a constant. *-----------------*/ if ( Chi < znbd5 ) { T1 = cfs1 * beta * fi ; fsl1_dVbs = T1 * ( ( 1.0 - Vdseff_dVbs ) * fi - 2.0 * fi_dChi ) ; fsl1_dVds = - T1 * fi * Vdseff_dVds ; fsl1_dVgs = - T1 * fi * Vdseff_dVgs ; T2 = 0.5 / fsl2 ; fsl2_dVbs = ( - beta * fb_dChi * 2 * fb + fsl1_dVbs ) * T2 ; fsl2_dVds = fsl1_dVds * T2 ; fsl2_dVgs = fsl1_dVgs * T2 ; } else { T1 = cnst1 * beta ; fsl1_dVbs = - T1 * ( exp_Rho * Vdseff_dVbs + ( 1.0 - Vdseff_dVbs ) * exp_bVbsVds ); fsl1_dVds = - T1 * Vdseff_dVds * ( exp_Rho - exp_bVbsVds ); fsl1_dVgs = T1 * Vdseff_dVgs * ( - exp_Rho + exp_bVbsVds ); T2 = 0.5e0 / fsl2 ; fsl2_dVbs = ( - beta + fsl1_dVbs ) * T2 ; fsl2_dVds = ( fsl1_dVds ) * T2 ; fsl2_dVgs = ( fsl1_dVgs ) * T2 ; } T1 = 1.0 / Fsl_dPsl ; Psl_dVbs = - ( Vgp_dVbs - ( fac1 * fsl2_dVbs + fac1_dVbs * fsl2 ) ) * T1 ; Psl_dVds = - ( Vgp_dVds - ( fac1 * fsl2_dVds + fac1_dVds * fsl2 ) ) * T1 ; Psl_dVgs = - ( Vgp_dVgs - ( fac1 * fsl2_dVgs + fac1_dVgs * fsl2 ) ) * T1 ; if ( Chi < znbd5 ) { /*-------------------------------------------* * zone-D1/D2. (Psl) *-----------------*/ Xil = fb * fb + epsm10 ; T1 = 2 * fb * fb_dChi * beta ; Xil_dVbs = T1 * ( Psl_dVbs - 1.0 ) ; Xil_dVds = T1 * Psl_dVds ; Xil_dVgs = T1 * Psl_dVgs ; Xilp12 = fb + epsm10 ; T1 = fb_dChi * beta ; Xilp12_dVbs = T1 * ( Psl_dVbs - 1.0 ) ; Xilp12_dVds = T1 * Psl_dVds ; Xilp12_dVgs = T1 * Psl_dVgs ; Xilp32 = fb * fb * fb + epsm10 ; T1 = 3 * fb * fb * fb_dChi * beta ; Xilp32_dVbs = T1 * ( Psl_dVbs - 1.0 ) ; Xilp32_dVds = T1 * Psl_dVds ; Xilp32_dVgs = T1 * Psl_dVgs ; } else { /*-------------------------------------------* * zone-D3. (Psl) *-----------------*/ Xil = Chi - 1.0e0 ; Xil_dVbs = beta * ( Psl_dVbs - 1.0e0 ) ; Xil_dVds = beta * Psl_dVds ; Xil_dVgs = beta * Psl_dVgs ; Xilp12 = sqrt( Xil ) ; T1 = 0.5e0 / Xilp12 ; Xilp12_dVbs = T1 * Xil_dVbs ; Xilp12_dVds = T1 * Xil_dVds ; Xilp12_dVgs = T1 * Xil_dVgs ; Xilp32 = Xil * Xilp12 ; T1 = 1.5e0 * Xilp12 ; Xilp32_dVbs = T1 * Xil_dVbs ; Xilp32_dVds = T1 * Xil_dVds ; Xilp32_dVgs = T1 * Xil_dVgs ; } /*---------------------------------------------------* * Assign Pds. *-----------------*/ Pds = Psl - Ps0 ; if ( Pds < 0.0 ) { Pds = 0.0 ; Psl = Ps0 ; } Pds_dVbs = Psl_dVbs - Ps0_dVbs ; Pds_dVds = Psl_dVds - Ps0_dVds ; Pds_dVgs = Psl_dVgs - Ps0_dVgs ; if ( Pds < ps_conv ) { Pds_dVbs = 0.0 ; Pds_dVgs = 0.0 ; Psl_dVbs = Ps0_dVbs ; Psl_dVgs = Ps0_dVgs ; } /* Vdseff */ Vds = Vdsorg; if( corecip ){ /* For multi level Newton method to calculate PS0Z_SCE */ /* remember that for the inner Newton: */ /* Fs0(PS0Z_SCE,Ps0) = Vgp(PSOZ_SCE) - Ps0 - fac1 * fs02(Ps0) */ /* -> dPs0/dPS0Z_SCE = - (dFs0/dPS0Z_SCE) / (dFs0/dPs0) */ /* and */ /* Fsl(PS0Z_SCE,Psl) = Vgp(PS0Z_SCE) - Psl - fac1 * fsl1(Psl) */ /* -> dPsl/dPS0Z_SCE = - (dFsl/dPS0Z_SCE) / (dFsl/dPsl) */ /* Outer Newton: */ /* PS0Z_SCE = Ps0 + Pzadd(Ps0,Psl) */ /* -> G(PS0Z_SCE) := PS0Z_SCE - Ps0(PS0Z_SCE) - Pzadd(Ps0(PS0Z_SCE),Psl(Ps0Z_SCE)) = 0 */ /* -> Newton correction delta_PS0Z_SCE from: */ /* (1.0 - dPs0/dPS0Z_SCE - dPzadd/dPS0Z_SCE) * delta_PS0Z_SCE = - G */ Fs0_dPS0Z = Vgp_dPS0Z ; Ps0_dPS0Z = - Fs0_dPS0Z / Fs0_dPs0 ; Fsl_dPS0Z = Vgp_dPS0Z ; Psl_dPS0Z = - Fsl_dPS0Z / Fsl_dPsl ; if ( Pds < ps_conv ) { Pds_dPS0Z = 0.0 ; } else { Pds_dPS0Z = Psl_dPS0Z - Ps0_dPS0Z ; } T1 = ( Vds - Pds ) / 2 ; Fn_SymAdd( Pzadd , T1 , model->HSM2_pzadd0 , T2 ) ; T2 /= 2 ; Pzadd_dVbs = T2 * ( - Pds_dVbs ) ; Pzadd_dVds = T2 * ( 1.0 - Pds_dVds ) ; Pzadd_dVgs = T2 * ( - Pds_dVgs ) ; Pzadd_dPS0Z = T2 * ( - Pds_dPS0Z) ; if ( Pzadd < epsm10 ) { Pzadd = epsm10 ; Pzadd_dVbs = 0.0 ; Pzadd_dVds = 0.0 ; Pzadd_dVgs = 0.0 ; Pzadd_dPS0Z = 0.0 ; } Ps0z = Ps0 + Pzadd ; Ps0z_dVbs = Ps0_dVbs + Pzadd_dVbs ; Ps0z_dVds = Ps0_dVds + Pzadd_dVds ; Ps0z_dVgs = Ps0_dVgs + Pzadd_dVgs ; Ps0z_dPS0Z = Ps0_dPS0Z + Pzadd_dPS0Z ; /* calculate Newton correction: */ G = PS0Z_SCE - Ps0z ; delta_PS0Z_SCE = - G / (1.0 - Ps0z_dPS0Z) ; delta_PS0Z_SCE_dVbs = Ps0z_dVbs - PS0Z_SCE_dVbs; delta_PS0Z_SCE_dVds = Ps0z_dVds - PS0Z_SCE_dVds; delta_PS0Z_SCE_dVgs = Ps0z_dVgs - PS0Z_SCE_dVgs; PS0Z_SCE += delta_PS0Z_SCE ; PS0Z_SCE_dVbs = Ps0z_dVbs ; PS0Z_SCE_dVds = Ps0z_dVds ; PS0Z_SCE_dVgs = Ps0z_dVgs ; PS0_SCE = PS0Z_SCE - Pzadd ; PS0_SCE_dVbs = Ps0_dVbs ; PS0_SCE_dVds = Ps0_dVds ; PS0_SCE_dVgs = Ps0_dVgs ; NNN += 1 ; if( ( fabs(delta_PS0Z_SCE) > PS0_SCE_tol || fabs(delta_PS0Z_SCE_dVbs) > PS0_SCE_deriv_tol || fabs(delta_PS0Z_SCE_dVds) > PS0_SCE_deriv_tol || fabs(delta_PS0Z_SCE_dVgs) > PS0_SCE_deriv_tol ) && (NNN < MAX_LOOP_SCE) ){ // goto START_OF_SCE_LOOP; START_OF_SCE_LOOP = 1 ; } } } /* skip end_of_part_1 */ } /* End of 1st SCE_LOOP */ if ( end_of_part_1 == 0 ) { /* skip to end_of_part_1 */ /*-----------------------------------------------------------* * Evaluate Idd. * - Eta : substantial variable of QB'/Pds and Idd/Pds. * - note: Eta = 4 * GAMMA_{hisim_0} *-----------------*/ T1 = beta / Xi0 ; Eta = T1 * Pds ; T2 = Eta * beta_inv ; Eta_dVbs = T1 * ( Pds_dVbs - Xi0_dVbs * T2 ) ; Eta_dVds = T1 * ( Pds_dVds - Xi0_dVds * T2 ) ; Eta_dVgs = T1 * ( Pds_dVgs - Xi0_dVgs * T2 ) ; /* ( Eta + 1 )^n */ Eta1 = Eta + 1.0e0 ; Eta1p12 = sqrt( Eta1 ) ; Eta1p32 = Eta1p12 * Eta1 ; Eta1p52 = Eta1p32 * Eta1 ; /* 1 / ( ( Eta + 1 )^n + 1 ) */ Zeta12 = 1.0e0 / ( Eta1p12 + 1.0e0 ) ; Zeta32 = 1.0e0 / ( Eta1p32 + 1.0e0 ) ; Zeta52 = 1.0e0 / ( Eta1p52 + 1.0e0 ) ; /*---------------------------------------------------* * F00 := PS00/Pds (n=1/2) *-----------------*/ F00 = Zeta12 / Xi0p12 ; T3 = - 1 / Xi0 ; T4 = - 0.5e0 / Eta1p12 * F00 ; T5 = Zeta12 * T3 ; T6 = Zeta12 * T4 ; F00_dVbs = ( Xi0p12_dVbs * T5 + Eta_dVbs * T6 ) ; F00_dVds = ( Xi0p12_dVds * T5 + Eta_dVds * T6 ) ; F00_dVgs = ( Xi0p12_dVgs * T5 + Eta_dVgs * T6 ) ; /*---------------------------------------------------* * F10 := PS10/Pds (n=3/2) *-----------------*/ T1 = 3.0e0 + Eta * ( 3.0e0 + Eta ) ; F10 = C_2o3 * Xi0p12 * Zeta32 * T1 ; T2 = 3.0e0 + Eta * 2.0e0 ; T3 = C_2o3 * T1 ; T4 = - 1.5e0 * Eta1p12 * F10 + C_2o3 * Xi0p12 * T2 ; T5 = Zeta32 * T3 ; T6 = Zeta32 * T4 ; F10_dVbs = ( Xi0p12_dVbs * T5 + Eta_dVbs * T6 ) ; F10_dVds = ( Xi0p12_dVds * T5 + Eta_dVds * T6 ) ; F10_dVgs = ( Xi0p12_dVgs * T5 + Eta_dVgs * T6 ) ; /*---------------------------------------------------* * F30 := PS30/Pds (n=5/2) *-----------------*/ T1 = 5e0 + Eta * ( 10e0 + Eta * ( 10e0 + Eta * ( 5e0 + Eta ) ) ) ; F30 = 4e0 / ( 15e0 * beta ) * Xi0p32 * Zeta52 * T1 ; T2 = 10e0 + Eta * ( 20e0 + Eta * ( 15e0 + Eta * 4e0 ) ) ; T3 = 4e0 / ( 15e0 * beta ) * T1 ; T4 = - ( 5e0 / 2e0 ) * Eta1p32 * F30 + 4e0 / ( 15e0 * beta ) * Xi0p32 * T2 ; T5 = Zeta52 * T3 ; T6 = Zeta52 * T4 ; F30_dVbs = ( Xi0p32_dVbs * T5 + Eta_dVbs * T6 ) ; F30_dVds = ( Xi0p32_dVds * T5 + Eta_dVds * T6 ) ; F30_dVgs = ( Xi0p32_dVgs * T5 + Eta_dVgs * T6 ) ; /*---------------------------------------------------* * F11 := PS11/Pds. *-----------------*/ F11 = Ps0 * F10 + C_2o3 * beta_inv * Xilp32 - F30 ; T1 = C_2o3 * beta_inv ; F11_dVbs = Ps0_dVbs * F10 + Ps0 * F10_dVbs + T1 * Xilp32_dVbs - F30_dVbs ; F11_dVds = Ps0_dVds * F10 + Ps0 * F10_dVds + T1 * Xilp32_dVds - F30_dVds ; F11_dVgs = Ps0_dVgs * F10 + Ps0 * F10_dVgs + T1 * Xilp32_dVgs - F30_dVgs ; /*---------------------------------------------------* * Fdd := Idd/Pds. *-----------------*/ T1 = Vgp + beta_inv - 0.5e0 * ( 2.0e0 * Ps0 + Pds ) ; T2 = - F10 + F00 ; T3 = beta * Cox ; T4 = beta * cnst0 ; Fdd = T3 * T1 + T4 * T2 ; Fdd_dVbs = T3 * ( Vgp_dVbs - Ps0_dVbs - 0.5e0 * Pds_dVbs ) + beta * Cox_dVb * T1 + T4 * ( - F10_dVbs + F00_dVbs ) ; Fdd_dVds = T3 * ( Vgp_dVds - Ps0_dVds - 0.5e0 * Pds_dVds ) + beta * Cox_dVd * T1 + T4 * ( - F10_dVds + F00_dVds ) ; Fdd_dVgs = T3 * ( Vgp_dVgs - Ps0_dVgs - 0.5e0 * Pds_dVgs ) + beta * Cox_dVg * T1 + T4 * ( - F10_dVgs + F00_dVgs ) ; /*---------------------------------------------------* * Idd: *-----------------*/ Idd = Pds * Fdd ; Idd_dVbs = Pds_dVbs * Fdd + Pds * Fdd_dVbs ; Idd_dVds = Pds_dVds * Fdd + Pds * Fdd_dVds ; Idd_dVgs = Pds_dVgs * Fdd + Pds * Fdd_dVgs ; /*-----------------------------------------------------------* * Skip CLM and integrated charges if zone==D1 *-----------------*/ if( flg_zone == 1 ) { goto start_of_mobility ; } /*-----------------------------------------------------------* * Channel Length Modulation. Lred: \Delta L *-----------------*/ if( pParam->HSM2_clm2 < epsm10 && pParam->HSM2_clm3 < epsm10 ) { Lred = 0.0e0 ; Lred_dVbs = 0.0e0 ; Lred_dVds = 0.0e0 ; Lred_dVgs = 0.0e0 ; Psdl = Psl ; Psdl_dVbs = Psl_dVbs ; Psdl_dVds = Psl_dVds ; Psdl_dVgs = Psl_dVgs ; if ( Psdl > Ps0 + Vds - epsm10 ) { Psdl = Ps0 + Vds - epsm10 ; Psdl_dVbs = Ps0_dVbs ; Psdl_dVds = Ps0_dVds + 1.0 ; Psdl_dVgs = Ps0_dVgs ; } } else { T1 = here->HSM2_wdpl ; T8 = sqrt (Psl - Vbs) ; Wd = T1 * T8 ; T9 = 0.5 * T1 / T8 ; Wd_dVbs = T9 * (Psl_dVbs - 1.0) ; Wd_dVds = T9 * Psl_dVds ; Wd_dVgs = T9 * Psl_dVgs ; T0 = 1.0 / Wd ; T1 = Qn0 * T0 ; T2 = pParam->HSM2_clm3 * T1 ; T3 = pParam->HSM2_clm3 * T0 ; T2_dVb = T3 * (Qn0_dVbs - T1 * Wd_dVbs) ; T2_dVd = T3 * (Qn0_dVds - T1 * Wd_dVds) ; T2_dVg = T3 * (Qn0_dVgs - T1 * Wd_dVgs) ; T5 = pParam->HSM2_clm2 * q_Nsub + T2 ; T1 = 1.0 / T5 ; T4 = C_ESI * T1 ; T4_dVb = - T4 * T2_dVb * T1 ; T4_dVd = - T4 * T2_dVd * T1 ; T4_dVg = - T4 * T2_dVg * T1 ; T1 = (1.0e0 - pParam->HSM2_clm1) ; Psdl = pParam->HSM2_clm1 * (Vds + Ps0) + T1 * Psl ; Psdl_dVbs = pParam->HSM2_clm1 * Ps0_dVbs + T1 * Psl_dVbs ; Psdl_dVds = pParam->HSM2_clm1 * (1.0 + Ps0_dVds) + T1 * Psl_dVds ; Psdl_dVgs = pParam->HSM2_clm1 * Ps0_dVgs + T1 * Psl_dVgs ; if ( Psdl > Ps0 + Vds - epsm10 ) { Psdl = Ps0 + Vds - epsm10 ; Psdl_dVbs = Ps0_dVbs ; Psdl_dVds = Ps0_dVds + 1.0 ; Psdl_dVgs = Ps0_dVgs ; } T6 = Psdl - Psl ; T6_dVb = Psdl_dVbs - Psl_dVbs ; T6_dVd = Psdl_dVds - Psl_dVds ; T6_dVg = Psdl_dVgs - Psl_dVgs ; T3 = beta * Qn0 ; T1 = 1.0 / T3 ; T5 = Idd * T1 ; T2 = T5 * beta ; T5_dVb = (Idd_dVbs - T2 * Qn0_dVbs) * T1 ; T5_dVd = (Idd_dVds - T2 * Qn0_dVds) * T1 ; T5_dVg = (Idd_dVgs - T2 * Qn0_dVgs) * T1 ; T10 = q_Nsub / C_ESI ; T1 = C_E0_p2 ; // E0^2 T2 = 1.0 / Leff ; T11 = (2.0 * T5 + 2.0 * T10 * T6 * T4 + T1 * T4) * T2 ; T3 = T2 * T4 ; T7 = T11 * T4 ; T7_dVb = (2.0 * T5_dVb + 2.0 * T10 * (T6_dVb * T4 + T6 * T4_dVb) + T1 * T4_dVb) * T3 + T11 * T4_dVb ; T7_dVd = (2.0 * T5_dVd + 2.0 * T10 * (T6_dVd * T4 + T6 * T4_dVd) + T1 * T4_dVd) * T3 + T11 * T4_dVd ; T7_dVg = (2.0 * T5_dVg + 2.0 * T10 * (T6_dVg * T4 + T6 * T4_dVg) + T1 * T4_dVg) * T3 + T11 * T4_dVg ; T11 = 4.0 * (2.0 * T10 * T6 + T1) ; T1 = 8.0 * T10 * T4 * T4 ; T2 = 2.0 * T11 * T4 ; T8 = T11 * T4 * T4 ; T8_dVb = ( T1 * T6_dVb + T2 * T4_dVb) ; T8_dVd = ( T1 * T6_dVd + T2 * T4_dVd) ; T8_dVg = ( T1 * T6_dVg + T2 * T4_dVg) ; T9 = sqrt (T7 * T7 + T8); T1 = 1.0 / T9 ; T2 = T7 * T1 ; T3 = 0.5 * T1 ; T9_dVb = (T2 * T7_dVb + T3 * T8_dVb) ; T9_dVd = (T2 * T7_dVd + T3 * T8_dVd) ; T9_dVg = (T2 * T7_dVg + T3 * T8_dVg) ; Lred = 0.5 * (- T7 + T9) ; Lred_dVbs = 0.5 * (- T7_dVb + T9_dVb) ; Lred_dVds = 0.5 * (- T7_dVd + T9_dVd) ; Lred_dVgs = 0.5 * (- T7_dVg + T9_dVg) ; /*---------------------------------------------------* * Modify Lred for symmetry. *-----------------*/ T1 = Lred ; Lred = FMDVDS * T1 ; Lred_dVbs = FMDVDS_dVbs * T1 + FMDVDS * Lred_dVbs ; Lred_dVds = FMDVDS_dVds * T1 + FMDVDS * Lred_dVds ; Lred_dVgs = FMDVDS_dVgs * T1 + FMDVDS * Lred_dVgs ; } /* CLM5 & CLM6 */ Lred *= here->HSM2_clmmod ; Lred_dVbs *= here->HSM2_clmmod ; Lred_dVds *= here->HSM2_clmmod ; Lred_dVgs *= here->HSM2_clmmod ; /*---------------------------------------------------* * Qbu : -Qb in unit area. *-----------------*/ T1 = Vgp + beta_inv ; T2 = T1 * F10 - F11 ; Qbnm = cnst0 * ( cnst0 * ( 1.5e0 - ( Xi0 + 1.0e0 ) - 0.5e0 * beta * Pds ) + Cox * T2 ) ; Qbnm_dVbs = cnst0 * ( cnst0 * ( - Xi0_dVbs - 0.5e0 * beta * Pds_dVbs ) + Cox * ( Vgp_dVbs * F10 + T1 * F10_dVbs - F11_dVbs ) + Cox_dVb * T2 ) ; Qbnm_dVds = cnst0 * ( cnst0 * ( - Xi0_dVds - 0.5e0 * beta * Pds_dVds ) + Cox * ( Vgp_dVds * F10 + T1 * F10_dVds - F11_dVds ) + Cox_dVd * T2 ) ; Qbnm_dVgs = cnst0 * ( cnst0 * ( - Xi0_dVgs - 0.5e0 * beta * Pds_dVgs ) + Cox * ( Vgp_dVgs * F10 + T1 * F10_dVgs - F11_dVgs ) + Cox_dVg * T2 ) ; T1 = beta ; Qbu = T1 * Qbnm / Fdd ; T2 = T1 / ( Fdd * Fdd ) ; Qbu_dVbs = T2 * ( Fdd * Qbnm_dVbs - Qbnm * Fdd_dVbs ) ; Qbu_dVds = T2 * ( Fdd * Qbnm_dVds - Qbnm * Fdd_dVds ) ; Qbu_dVgs = T2 * ( Fdd * Qbnm_dVgs - Qbnm * Fdd_dVgs ) ; /*---------------------------------------------------* * preparation for Qi and Qd. * - DtPds: Delta * Pds ; * - Achi: (1+Delta) * Pds ; *-----------------*/ T1 = 2.0e0 * fac1 ; DtPds = T1 * ( F10 - Xi0p12 ) ; T2 = 2.0 * ( F10 - Xi0p12 ) ; DtPds_dVbs = T1 * ( F10_dVbs - Xi0p12_dVbs ) + T2 * fac1_dVbs ; DtPds_dVds = T1 * ( F10_dVds - Xi0p12_dVds ) + T2 * fac1_dVds ; DtPds_dVgs = T1 * ( F10_dVgs - Xi0p12_dVgs ) + T2 * fac1_dVgs ; Achi = Pds + DtPds ; Achi_dVbs = Pds_dVbs + DtPds_dVbs ; Achi_dVds = Pds_dVds + DtPds_dVds ; Achi_dVgs = Pds_dVgs + DtPds_dVgs ; /*-----------------------------------------------------------* * Alpha : parameter to evaluate charges. * - Achi: (1+Delta) * Pds ; * - clamped to 0 if Alpha < 0. *-----------------*/ T1 = 1.0 / VgVt ; T2 = Achi * T1 ; T3 = 1.0e0 - T2 ; TX = 1.0 - T3 ; Fn_CP( TY , TX , 1.0 , 4 , T4 ) ; Alpha = 1.0 - TY ; T5 = T1 * T4 ; Alpha_dVbs = - ( Achi_dVbs - T2 * VgVt_dVbs ) * T5 ; Alpha_dVds = - ( Achi_dVds - T2 * VgVt_dVds ) * T5 ; Alpha_dVgs = - ( Achi_dVgs - T2 * VgVt_dVgs ) * T5 ; /*-----------------------------------------------------------* * Qiu : -Qi in unit area. *-----------------*/ Qinm = 1.0e0 + Alpha * ( 1.0e0 + Alpha ) ; T1 = 1.0e0 + Alpha + Alpha ; Qinm_dVbs = Alpha_dVbs * T1 ; Qinm_dVds = Alpha_dVds * T1 ; Qinm_dVgs = Alpha_dVgs * T1 ; Qidn = Fn_Max( 1.0e0 + Alpha , epsm10 ) ; Qidn_dVbs = Alpha_dVbs ; Qidn_dVds = Alpha_dVds ; Qidn_dVgs = Alpha_dVgs ; T1 = C_2o3 * VgVt * Qinm / Qidn ; Qiu = T1 * Cox ; T2 = 1.0 / VgVt ; T3 = 1.0 / Qinm ; T4 = 1.0 / Qidn ; Qiu_dVbs = Qiu * ( VgVt_dVbs * T2 + Qinm_dVbs * T3 - Qidn_dVbs * T4 ) + T1 * Cox_dVb ; Qiu_dVds = Qiu * ( VgVt_dVds * T2 + Qinm_dVds * T3 - Qidn_dVds * T4) + T1 * Cox_dVd ; Qiu_dVgs = Qiu * ( VgVt_dVgs * T2 + Qinm_dVgs * T3 - Qidn_dVgs * T4) + T1 * Cox_dVg ; /*-----------------------------------------------------------* * Qdrat : Qd/Qi *-----------------*/ Qdnm = 0.5e0 + Alpha ; Qdnm_dVbs = Alpha_dVbs ; Qdnm_dVds = Alpha_dVds ; Qdnm_dVgs = Alpha_dVgs ; Qddn = Qidn * Qinm ; Qddn_dVbs = Qidn_dVbs * Qinm + Qidn * Qinm_dVbs ; Qddn_dVds = Qidn_dVds * Qinm + Qidn * Qinm_dVds ; Qddn_dVgs = Qidn_dVgs * Qinm + Qidn * Qinm_dVgs ; Quot = 0.4e0 * Qdnm / Qddn ; Qdrat = 0.6e0 - Quot ; if ( Qdrat <= 0.5e0 ) { T1 = 1.0 / Qddn ; T2 = 1.0 / Qdnm ; Qdrat_dVbs = Quot * ( Qddn_dVbs * T1 - Qdnm_dVbs * T2 ) ; Qdrat_dVds = Quot * ( Qddn_dVds * T1 - Qdnm_dVds * T2 ) ; Qdrat_dVgs = Quot * ( Qddn_dVgs * T1 - Qdnm_dVgs * T2 ) ; } else { Qdrat = 0.5e0 ; Qdrat_dVbs = 0.0e0 ; Qdrat_dVds = 0.0e0 ; Qdrat_dVgs = 0.0e0 ; } /*-----------------------------------------------------------* * Interpolate charges and CLM for zone-D2. *-----------------*/ if ( flg_zone == 2 ) { T1 = Qbu ; Qbu = FD2 * Qbu + ( 1.0 - FD2 ) * Qb0 ; Qbu_dVbs = FD2 * Qbu_dVbs + FD2_dVbs * T1 + ( 1.0 - FD2 ) * Qb0_dVb - FD2_dVbs * Qb0 ; Qbu_dVds = FD2 * Qbu_dVds + FD2_dVds * T1 + ( 1.0 - FD2 ) * Qb0_dVd - FD2_dVds * Qb0 ; Qbu_dVgs = FD2 * Qbu_dVgs + FD2_dVgs * T1 + ( 1.0 - FD2 ) * Qb0_dVg - FD2_dVgs * Qb0 ; if ( Qbu < 0.0 ) { Qbu = 0.0 ; Qbu_dVbs = 0.0 ; Qbu_dVds = 0.0 ; Qbu_dVgs = 0.0 ; } T1 = Qiu ; Qiu = FD2 * Qiu + ( 1.0 - FD2 ) * Qn0 ; Qiu_dVbs = FD2 * Qiu_dVbs + FD2_dVbs * T1 + ( 1.0 - FD2 ) * Qn0_dVbs - FD2_dVbs * Qn0 ; Qiu_dVds = FD2 * Qiu_dVds + FD2_dVds * T1 + ( 1.0 - FD2 ) * Qn0_dVds - FD2_dVds * Qn0 ; Qiu_dVgs = FD2 * Qiu_dVgs + FD2_dVgs * T1 + ( 1.0 - FD2 ) * Qn0_dVgs - FD2_dVgs * Qn0 ; if ( Qiu < 0.0 ) { Qiu = 0.0 ; Qiu_dVbs = 0.0 ; Qiu_dVds = 0.0 ; Qiu_dVgs = 0.0 ; } T1 = Qdrat ; Qdrat = FD2 * Qdrat + ( 1.0 - FD2 ) * 0.5e0 ; Qdrat_dVbs = FD2 * Qdrat_dVbs + FD2_dVbs * T1 - FD2_dVbs * 0.5e0 ; Qdrat_dVds = FD2 * Qdrat_dVds + FD2_dVds * T1 - FD2_dVds * 0.5e0 ; Qdrat_dVgs = FD2 * Qdrat_dVgs + FD2_dVgs * T1 - FD2_dVgs * 0.5e0 ; /* note: Lred=0 in zone-D1 */ T1 = Lred ; Lred = FD2 * Lred ; Lred_dVbs = FD2 * Lred_dVbs + FD2_dVbs * T1 ; Lred_dVds = FD2 * Lred_dVds + FD2_dVds * T1 ; Lred_dVgs = FD2 * Lred_dVgs + FD2_dVgs * T1 ; } /* end of flg_zone==2 if-block */ start_of_mobility: Lch = Leff - Lred ; if ( Lch < 1.0e-9 ) { Lch = 1.0e-9 ; Lch_dVbs = Lch_dVds = Lch_dVgs = 0.0 ; } else { Lch_dVbs = - Lred_dVbs ; Lch_dVds = - Lred_dVds ; Lch_dVgs = - Lred_dVgs ; } /*-----------------------------------------------------------* * Muun : universal mobility. (CGS unit) *-----------------*/ T1 = here->HSM2_ndep_o_esi / C_m2cm ; /* fix in version 2.8 */ T2 = here->HSM2_ninv_o_esi / C_m2cm ; /* fix in version 2.8 */ T0 = here->HSM2_ninvd ; T3 = sqrt(Pds*Pds + model->HSM2_vzadd0) ; Pdsz = T3 - sqrt(model->HSM2_vzadd0) ; Pdsz_dVbs = Pds_dVbs * Pds / T3 ; Pdsz_dVds = Pds_dVds * Pds / T3 ; Pdsz_dVgs = Pds_dVgs * Pds / T3 ; T4 = 1.0 + Pdsz * T0 ; T4_dVb = Pdsz_dVbs * T0 ; T4_dVd = Pdsz_dVds * T0 ; T4_dVg = Pdsz_dVgs * T0 ; T5 = T1 * Qbu + T2 * Qiu ; T5_dVb = T1 * Qbu_dVbs + T2 * Qiu_dVbs ; T5_dVd = T1 * Qbu_dVds + T2 * Qiu_dVds ; T5_dVg = T1 * Qbu_dVgs + T2 * Qiu_dVgs ; T3 = T5 / T4 ; T3_dVb = ( - T4_dVb * T5 + T4 * T5_dVb ) / T4 / T4 ; T3_dVd = ( - T4_dVd * T5 + T4 * T5_dVd ) / T4 / T4 ; T3_dVg = ( - T4_dVg * T5 + T4 * T5_dVg ) / T4 / T4 ; Eeff = T3 ; Eeff_dVbs = T3_dVb ; Eeff_dVds = T3_dVd ; Eeff_dVgs = T3_dVg ; T5 = Fn_Pow( Eeff , model->HSM2_mueph0 - 1.0e0 ) ; T8 = T5 * Eeff ; T7 = Fn_Pow( Eeff , here->HSM2_muesr - 1.0e0 ) ; T6 = T7 * Eeff ; T9 = C_QE * C_m2cm_p2 ; Rns = Qiu / T9 ; T1 = 1.0e0 / ( here->HSM2_muecb0 + here->HSM2_muecb1 * Rns / 1.0e11 ) + here->HSM2_mphn0 * T8 + T6 / pParam->HSM2_muesr1 ; Muun = 1.0e0 / T1 ; T1 = 1.0e0 / ( T1 * T1 ) ; T2 = here->HSM2_muecb0 + here->HSM2_muecb1 * Rns / 1.0e11 ; T2 = 1.0e0 / ( T2 * T2 ) ; T3 = here->HSM2_mphn1 * T5 ; T4 = here->HSM2_muesr * T7 / pParam->HSM2_muesr1 ; T5 = - 1.0e-11 * here->HSM2_muecb1 / C_QE * T2 / C_m2cm_p2 ; Muun_dVbs = - ( T5 * Qiu_dVbs + Eeff_dVbs * T3 + Eeff_dVbs * T4 ) * T1 ; Muun_dVds = - ( T5 * Qiu_dVds + Eeff_dVds * T3 + Eeff_dVds * T4 ) * T1 ; Muun_dVgs = - ( T5 * Qiu_dVgs + Eeff_dVgs * T3 + Eeff_dVgs * T4 ) * T1 ; /* Change to MKS unit */ Muun /= C_m2cm_p2 ; Muun_dVbs /= C_m2cm_p2 ; Muun_dVds /= C_m2cm_p2 ; Muun_dVgs /= C_m2cm_p2 ; /*-----------------------------------------------------------* * Mu : mobility *-----------------*/ T2 = beta * (Qn0 + small) * Lch ; T1 = 1.0e0 / T2 ; T3 = T1 * T1 ; T4 = - beta * T3 ; T5 = T4 * Lch ; T6 = T4 * (Qn0 + small) ; T1_dVb = ( T5 * Qn0_dVbs + T6 * Lch_dVbs) ; T1_dVd = ( T5 * Qn0_dVds + T6 * Lch_dVds) ; T1_dVg = ( T5 * Qn0_dVgs + T6 * Lch_dVgs) ; TY = Idd * T1 ; TY_dVbs = Idd_dVbs * T1 + Idd * T1_dVb ; TY_dVds = Idd_dVds * T1 + Idd * T1_dVd ; TY_dVgs = Idd_dVgs * T1 + Idd * T1_dVg ; T2 = 0.2 * Vmax / Muun ; T3 = - T2 / Muun ; T2_dVb = T3 * Muun_dVbs ; T2_dVd = T3 * Muun_dVds ; T2_dVg = T3 * Muun_dVgs ; Ey = sqrt( TY * TY + T2 * T2 ) ; T4 = 1.0 / Ey ; Ey_dVbs = T4 * ( TY * TY_dVbs + T2 * T2_dVb ) ; Ey_dVds = T4 * ( TY * TY_dVds + T2 * T2_dVd ) ; Ey_dVgs = T4 * ( TY * TY_dVgs + T2 * T2_dVg ) ; Em = Muun * Ey ; Em_dVbs = Muun_dVbs * Ey + Muun * Ey_dVbs ; Em_dVds = Muun_dVds * Ey + Muun * Ey_dVds ; Em_dVgs = Muun_dVgs * Ey + Muun * Ey_dVgs ; T1 = Em / Vmax ; /* note: model->HSM2_bb = 2 (electron) ;1 (hole) */ if ( 1.0e0 - epsm10 <= model->HSM2_bb && model->HSM2_bb <= 1.0e0 + epsm10 ) { T3 = 1.0e0 ; } else if ( 2.0e0 - epsm10 <= model->HSM2_bb && model->HSM2_bb <= 2.0e0 + epsm10 ) { T3 = T1 ; } else { T3 = Fn_Pow( T1 , model->HSM2_bb - 1.0e0 ) ; } T2 = T1 * T3 ; T4 = 1.0e0 + T2 ; if ( 1.0e0 - epsm10 <= model->HSM2_bb && model->HSM2_bb <= 1.0e0 + epsm10 ) { T5 = 1.0 / T4 ; T6 = T5 / T4 ; } else if ( 2.0e0 - epsm10 <= model->HSM2_bb && model->HSM2_bb <= 2.0e0 + epsm10 ) { T5 = 1.0 / sqrt( T4 ) ; T6 = T5 / T4 ; } else { T6 = Fn_Pow( T4 , ( - 1.0e0 / model->HSM2_bb - 1.0e0 ) ) ; T5 = T4 * T6 ; } T7 = Muun / Vmax * T6 * T3 ; Mu = Muun * T5 ; Mu_dVbs = Muun_dVbs * T5 - T7 * Em_dVbs ; Mu_dVds = Muun_dVds * T5 - T7 * Em_dVds ; Mu_dVgs = Muun_dVgs * T5 - T7 * Em_dVgs ; /* end_of_mobility : */ /*-----------------------------------------------------------* * Ids: channel current. *-----------------*/ betaWL = here->HSM2_weff_nf * beta_inv / Lch ; T1 = - betaWL / Lch ; betaWL_dVbs = T1 * Lch_dVbs ; betaWL_dVds = T1 * Lch_dVds ; betaWL_dVgs = T1 * Lch_dVgs ; Ids0 = betaWL * Idd * Mu ; T1 = betaWL * Idd ; T2 = Idd * Mu ; T3 = Mu * betaWL ; Ids0_dVbs = T3 * Idd_dVbs + T1 * Mu_dVbs + T2 * betaWL_dVbs ; Ids0_dVds = T3 * Idd_dVds + T1 * Mu_dVds + T2 * betaWL_dVds ; Ids0_dVgs = T3 * Idd_dVgs + T1 * Mu_dVgs + T2 * betaWL_dVgs ; /*-----------------------------------------------------------* * Adding parasitic components to the channel current. *-----------------*/ if( model->HSM2_ptl != 0 ){ T1 = 0.5 * ( Vds - Pds ) ; Fn_SymAdd( T6 , T1 , 0.01 , T2 ) ; T2 *= 0.5 ; T6_dVb = T2 * ( - Pds_dVbs ) ; T6_dVd = T2 * ( 1.0 - Pds_dVds ) ; T6_dVg = T2 * ( - Pds_dVgs ) ; T1 = 1.1 - ( Ps0 + T6 ); T1_dVb = - ( Ps0_dVbs + T6_dVb ); T1_dVd = - ( Ps0_dVds + T6_dVd ); T1_dVg = - ( Ps0_dVgs + T6_dVg ); Fn_SZ( T2 , T1 , 0.05 , T0 ) ; T2 += small ; T2_dVb = T1_dVb * T0 ; T2_dVd = T1_dVd * T0 ; T2_dVg = T1_dVg * T0 ; T0 = beta * here->HSM2_ptl0 ; T3 = Cox * T0 ; T3_dVb = Cox_dVb * T0 ; T3_dVd = Cox_dVd * T0 ; T3_dVg = Cox_dVg * T0 ; T0 = pow( T2 , model->HSM2_ptp ) ; T9 = T3 * T0 ; T9_dVb = T3 * model->HSM2_ptp * T0 / T2 * T2_dVb + T3_dVb * T0 ; T9_dVd = T3 * model->HSM2_ptp * T0 / T2 * T2_dVd + T3_dVd * T0 ; T9_dVg = T3 * model->HSM2_ptp * T0 / T2 * T2_dVg + T3_dVg * T0 ; T4 = 1.0 + Vdsz * model->HSM2_pt2 ; T4_dVb = 0.0 ; T4_dVd = Vdsz_dVds * model->HSM2_pt2 ; T4_dVg = 0.0 ; T0 = here->HSM2_pt40 ; T5 = Ps0 + T6 - Vbsz ; T5_dVb = Ps0_dVbs + T6_dVb - Vbsz_dVbs ; T5_dVd = Ps0_dVds + T6_dVd - Vbsz_dVds ; T5_dVg = Ps0_dVgs + T6_dVg ; T4 += Vdsz * T0 * T5 ; T4_dVb += Vdsz * T0 * T5_dVb ; T4_dVd += Vdsz * T0 * T5_dVd + Vdsz_dVds * T0 * T5 ; T4_dVg += Vdsz * T0 * T5_dVg ; T6 = T9 * T4 ; T9_dVb = T9_dVb * T4 + T9 * T4_dVb ; T9_dVd = T9_dVd * T4 + T9 * T4_dVd ; T9_dVg = T9_dVg * T4 + T9 * T4_dVg ; T9 = T6 ; }else{ T9 = 0.0 ; T9_dVb = 0.0 ; T9_dVd = 0.0 ; T9_dVg = 0.0 ; } if( model->HSM2_gdl != 0 ){ T1 = beta * here->HSM2_gdl0 ; T2 = Cox * T1 ; T2_dVb = Cox_dVb * T1 ; T2_dVd = Cox_dVd * T1 ; T2_dVg = Cox_dVg * T1 ; T8 = T2 * Vdsz ; T8_dVb = T2_dVb * Vdsz ; T8_dVd = T2_dVd * Vdsz + T2 * Vdsz_dVds ; T8_dVg = T2_dVg * Vdsz ; }else{ T8 = 0.0 ; T8_dVb = 0.0 ; T8_dVd = 0.0 ; T8_dVg = 0.0 ; } if ( ( T9 + T8 ) > 0.0 ) { Idd1 = Pds * ( T9 + T8 ) ; Idd1_dVbs = Pds_dVbs * ( T9 + T8 ) + Pds * ( T9_dVb + T8_dVb ) ; Idd1_dVds = Pds_dVds * ( T9 + T8 ) + Pds * ( T9_dVd + T8_dVd ) ; Idd1_dVgs = Pds_dVgs * ( T9 + T8 ) + Pds * ( T9_dVg + T8_dVg ) ; Ids0 += betaWL * Idd1 * Mu ; T1 = betaWL * Idd1 ; T2 = Idd1 * Mu ; T3 = Mu * betaWL ; Ids0_dVbs += T3 * Idd1_dVbs + T1 * Mu_dVbs + T2 * betaWL_dVbs ; Ids0_dVds += T3 * Idd1_dVds + T1 * Mu_dVds + T2 * betaWL_dVds ; Ids0_dVgs += T3 * Idd1_dVgs + T1 * Mu_dVgs + T2 * betaWL_dVgs ; } /* (note: rpock procedure was removed. (2006.04.20) */ if ( flg_rsrd == 2 ) { Rd = here->HSM2_rd ; T0 = Rd * Ids0 ; T1 = Vds + small ; T2 = 1.0 / T1 ; T3 = 1.0 + T0 * T2 ; T3_dVb = Rd * Ids0_dVbs * T2 ; T3_dVd = ( Rd * Ids0_dVds * T1 - T0 ) * T2 * T2 ; T3_dVg = Rd * Ids0_dVgs * T2 ; T4 = 1.0 / T3 ; Ids = Ids0 * T4 ; T5 = T4 * T4 ; Ids_dVbs = ( Ids0_dVbs * T3 - Ids0 * T3_dVb ) * T5 ; Ids_dVds = ( Ids0_dVds * T3 - Ids0 * T3_dVd ) * T5 ; Ids_dVgs = ( Ids0_dVgs * T3 - Ids0 * T3_dVg ) * T5 ; } else { Ids = Ids0 ; Ids_dVbs = Ids0_dVbs ; Ids_dVds = Ids0_dVds ; Ids_dVgs = Ids0_dVgs ; } if ( Pds < ps_conv ) { Ids_dVbs = 0.0 ; Ids_dVgs = 0.0 ; } Ids += Gdsmin * Vds ; Ids_dVds += Gdsmin ; /*-----------------------------------------------------------* * STI *-----------------*/ if ( model->HSM2_coisti != 0 ) { /*---------------------------------------------------* * dVthSCSTI : Short-channel effect induced by Vds (STI). *-----------------*/ T1 = C_ESI * Cox_inv ; T2 = here->HSM2_wdpl ; T3 = here->HSM2_lgatesm - model->HSM2_parl2 ; T4 = 1.0 / (T3 * T3) ; T5 = 2.0 * (model->HSM2_vbi - Pb20b) * T1 * T2 * T4 ; dVth0 = T5 * sqrt_Pbsum ; T6 = T5 * 0.5 / sqrt_Pbsum ; T7 = 2.0 * (model->HSM2_vbi - Pb20b) * C_ESI * T2 * T4 * sqrt_Pbsum ; T8 = - 2.0 * T1 * T2 * T4 * sqrt_Pbsum ; dVth0_dVb = T6 * Pbsum_dVb + T7 * Cox_inv_dVb + T8 * Pb20b_dVb ; dVth0_dVd = T6 * Pbsum_dVd + T7 * Cox_inv_dVd + T8 * Pb20b_dVd ; dVth0_dVg = T6 * Pbsum_dVg + T7 * Cox_inv_dVg + T8 * Pb20b_dVg ; T4 = pParam->HSM2_scsti1 ; T6 = pParam->HSM2_scsti2 ; T1 = T4 + T6 * Vdsz ; dVthSCSTI = dVth0 * T1 ; dVthSCSTI_dVb = dVth0_dVb * T1 ; dVthSCSTI_dVd = dVth0_dVd * T1 + dVth0 * T6 * Vdsz_dVds ; dVthSCSTI_dVg = dVth0_dVg * T1 ; T1 = pParam->HSM2_vthsti - model->HSM2_vdsti * Vds ; T1_dVd = - model->HSM2_vdsti ; Vgssti = Vgsz - Vfb + T1 + dVthSCSTI ; Vgssti_dVbs = dVthSCSTI_dVb ; Vgssti_dVds = Vgsz_dVds + T1_dVd + dVthSCSTI_dVd ; Vgssti_dVgs = Vgsz_dVgs + dVthSCSTI_dVg ; costi0 = here->HSM2_costi0 ; costi1 = here->HSM2_costi1 ; costi3 = here->HSM2_costi0_p2 * Cox_inv * Cox_inv ; T1 = 2.0 * here->HSM2_costi0_p2 * Cox_inv ; costi3_dVb = T1 * Cox_inv_dVb ; costi3_dVd = T1 * Cox_inv_dVd ; costi3_dVg = T1 * Cox_inv_dVg ; T2 = 1.0 / costi3 ; costi3_dVb_c3 = costi3_dVb * T2 ; costi3_dVd_c3 = costi3_dVd * T2 ; costi3_dVg_c3 = costi3_dVg * T2 ; costi4 = costi3 * beta * 0.5 ; costi5 = costi4 * beta * 2.0 ; T11 = beta * 0.25 ; T10 = beta_inv - costi3 * T11 + Vfb - pParam->HSM2_vthsti - dVthSCSTI + small ; T10_dVb = - T11 * costi3_dVb - dVthSCSTI_dVb ; T10_dVd = - T11 * costi3_dVd - dVthSCSTI_dVd ; T10_dVg = - T11 * costi3_dVg - dVthSCSTI_dVg ; T1 = Vgsz - T10 - psisti_dlt ; T1_dVb = - T10_dVb ; T1_dVd = Vgsz_dVds - T10_dVd ; T1_dVg = Vgsz_dVgs - T10_dVg ; T0 = Fn_Sgn(T10) ; T2 = sqrt (T1 * T1 + T0 * 4.0 * T10 * psisti_dlt) ; T3 = T10 + 0.5 * (T1 + T2) - Vfb + pParam->HSM2_vthsti + dVthSCSTI - Vbsz ; T3_dVb = T10_dVb + 0.5 * (T1_dVb + (T1 * T1_dVb + T0 * 2.0 * T10_dVb * psisti_dlt) / T2) + dVthSCSTI_dVb - Vbsz_dVbs ; T3_dVd = T10_dVd + 0.5 * (T1_dVd + (T1 * T1_dVd + T0 * 2.0 * T10_dVd * psisti_dlt) / T2) + dVthSCSTI_dVd - Vbsz_dVds ; T3_dVg = T10_dVg + 0.5 * (T1_dVg + (T1 * T1_dVg + T0 * 2.0 * T10_dVg * psisti_dlt) / T2) + dVthSCSTI_dVg ; T4 = beta * T3 - 1.0 ; T5 = 4.0 / costi5 ; T1 = 1.0 + T4 * T5 ; T6 = beta * T5 ; T7 = T4 * T5 ; T1_dVb = (T6 * T3_dVb - T7 * costi3_dVb_c3) ; T1_dVd = (T6 * T3_dVd - T7 * costi3_dVd_c3) ; T1_dVg = (T6 * T3_dVg - T7 * costi3_dVg_c3) ; Fn_SZ( T1 , T1, 1.0e-2, T2) ; T1 += small ; T1_dVb *= T2 ; T1_dVd *= T2 ; T1_dVg *= T2 ; costi6 = sqrt (T1) ; T0 = costi4 * (1.0 - costi6) ; Psasti = Vgssti + T0 ; T2 = 0.5 * costi4 / costi6 ; Psasti_dVbs = Vgssti_dVbs + costi3_dVb_c3 * T0 - T2 * T1_dVb ; Psasti_dVds = Vgssti_dVds + costi3_dVd_c3 * T0 - T2 * T1_dVd ; Psasti_dVgs = Vgssti_dVgs + costi3_dVg_c3 * T0 - T2 * T1_dVg ; T0 = 1.0 / (beta + 2.0 / (Vgssti + small)) ; Psbsti = log (1.0 / costi1 / costi3 * (Vgssti * Vgssti)) * T0 ; T2 = 2.0 * T0 / (Vgssti + small) ; T3 = Psbsti / (Vgssti + small) ; Psbsti_dVbs = T2 * (Vgssti_dVbs - 0.5 * costi3_dVb_c3 * Vgssti + T3 * Vgssti_dVbs ) ; Psbsti_dVds = T2 * (Vgssti_dVds - 0.5 * costi3_dVd_c3 * Vgssti + T3 * Vgssti_dVds ) ; Psbsti_dVgs = T2 * (Vgssti_dVgs - 0.5 * costi3_dVg_c3 * Vgssti + T3 * Vgssti_dVgs ) ; Psab = Psbsti - Psasti - sti2_dlt ; Psab_dVbs = Psbsti_dVbs - Psasti_dVbs ; Psab_dVds = Psbsti_dVds - Psasti_dVds ; Psab_dVgs = Psbsti_dVgs - Psasti_dVgs ; T0 = sqrt (Psab * Psab + 4.0 * sti2_dlt * Psbsti) ; Psti = Psbsti - 0.5 * (Psab + T0) ; T1 = 1.0 / T0 ; Psti_dVbs = Psbsti_dVbs - 0.5 * ( Psab_dVbs + ( Psab * Psab_dVbs + 2.0 * sti2_dlt * Psbsti_dVbs ) * T1 ) ; Psti_dVds = Psbsti_dVds - 0.5 * ( Psab_dVds + ( Psab * Psab_dVds + 2.0 * sti2_dlt * Psbsti_dVds ) * T1 ) ; Psti_dVgs = Psbsti_dVgs - 0.5 * ( Psab_dVgs + ( Psab * Psab_dVgs + 2.0 * sti2_dlt * Psbsti_dVgs ) * T1 ) ; T0 = costi1 * exp (beta * Psti) ; T1 = beta * (Psti - Vbsz) - 1.0 + T0 ; T1_dVb = beta * ((Psti_dVbs - Vbsz_dVbs) + T0 * Psti_dVbs) ; T1_dVd = beta * ((Psti_dVds - Vbsz_dVds) + T0 * Psti_dVds) ; T1_dVg = beta * (Psti_dVgs + T0 * Psti_dVgs) ; Fn_SZ ( T1 , T1, 1.0e-2, T0) ; T1 += epsm10 ; T1_dVb *= T0 ; T1_dVd *= T0 ; T1_dVg *= T0 ; sq1sti = sqrt (T1); T2 = 0.5 / sq1sti ; sq1sti_dVbs = T2 * T1_dVb ; sq1sti_dVds = T2 * T1_dVd ; sq1sti_dVgs = T2 * T1_dVg ; T1 = beta * (Psti - Vbsz) - 1.0; T1_dVb = beta * (Psti_dVbs - Vbsz_dVbs) ; T1_dVd = beta * (Psti_dVds - Vbsz_dVds) ; T1_dVg = beta * Psti_dVgs ; Fn_SZ( T1 , T1, 1.0e-2, T0) ; T1 += epsm10 ; T1_dVb *= T0 ; T1_dVd *= T0 ; T1_dVg *= T0 ; sq2sti = sqrt (T1); T2 = 0.5 / sq2sti ; sq2sti_dVbs = T2 * T1_dVb ; sq2sti_dVds = T2 * T1_dVd ; sq2sti_dVgs = T2 * T1_dVg ; Qn0sti = costi0 * (sq1sti - sq2sti) ; Qn0sti_dVbs = costi0 * (sq1sti_dVbs - sq2sti_dVbs) ; Qn0sti_dVds = costi0 * (sq1sti_dVds - sq2sti_dVds) ; Qn0sti_dVgs = costi0 * (sq1sti_dVgs - sq2sti_dVgs) ; /* T1: Vdsatsti */ T1 = Psasti - Psti ; T1_dVb = Psasti_dVbs - Psti_dVbs ; T1_dVd = Psasti_dVds - Psti_dVds ; T1_dVg = Psasti_dVgs - Psti_dVgs ; Fn_SZ( T1 , T1 , 1.0e-1 , T2 ) ; T1 += epsm10 ; T1_dVb *= T2 ; T1_dVd *= T2 ; T1_dVg *= T2 ; TX = Vds / T1 ; T2 = 1.0 / ( T1 * T1 ) ; TX_dVbs = T2 * ( - Vds * T1_dVb ) ; TX_dVds = T2 * ( T1 - Vds * T1_dVd ) ; TX_dVgs = T2 * ( - Vds * T1_dVg ) ; Fn_CP( TY , TX , 1.0 , 4 , T2 ) ; TY_dVbs = T2 * TX_dVbs ; TY_dVds = T2 * TX_dVds ; TY_dVgs = T2 * TX_dVgs ; costi7 = 2.0 * here->HSM2_wsti * here->HSM2_nf * beta_inv ; T1 = Lch ; Idssti = costi7 * Mu * Qn0sti * TY / T1; T3 = 1.0 / T1 ; T4 = Mu * Qn0sti * TY / T1 / T1 ; T5 = Mu * Qn0sti ; Idssti_dVbs = costi7 * (((Mu_dVbs * Qn0sti + Mu * Qn0sti_dVbs) * TY + T5 * TY_dVbs ) * T3 - Lch_dVbs * T4 ) ; Idssti_dVds = costi7 * (((Mu_dVds * Qn0sti + Mu * Qn0sti_dVds) * TY + T5 * TY_dVds ) * T3 - Lch_dVds * T4 ) ; Idssti_dVgs = costi7 * (((Mu_dVgs * Qn0sti + Mu * Qn0sti_dVgs) * TY + T5 * TY_dVgs ) * T3 - Lch_dVgs * T4 ) ; Ids = Ids + Idssti ; Ids_dVbs = Ids_dVbs + Idssti_dVbs ; Ids_dVds = Ids_dVds + Idssti_dVds ; Ids_dVgs = Ids_dVgs + Idssti_dVgs ; } /*-----------------------------------------------------------* * Break point for the case of Rs=Rd=0. *-----------------*/ if ( flg_rsrd == 0 ) { DJI = 1.0 ; break ; } /*-----------------------------------------------------------* * calculate corrections of biases. * - Fbs = 0, etc. are the small ciucuit equations. * - DJ, Jacobian of the small circuit matrix, is g.t. 1 * provided Rs, Rd and conductances are positive. *-----------------*/ Fbs = Vbs - Vbsc + Ids * Rs ; Fds = Vds - Vdsc + Ids * ( Rs + Rd ) ; Fgs = Vgs - Vgsc + Ids * Rs ; DJ = 1.0 + Rs * Ids_dVbs + ( Rs + Rd ) * Ids_dVds + Rs * Ids_dVgs ; DJI = 1.0 / DJ ; JI11 = 1 + ( Rs + Rd ) * Ids_dVds + Rs * Ids_dVgs ; JI12 = - Rs * Ids_dVds ; JI13 = - Rs * Ids_dVgs ; JI21 = - ( Rs + Rd ) * Ids_dVbs ; JI22 = 1 + Rs * Ids_dVbs + Rs * Ids_dVgs ; JI23 = - ( Rs + Rd ) * Ids_dVgs ; JI31 = - Rs * Ids_dVbs ; JI32 = - Rs * Ids_dVds ; JI33 = 1 + Rs * Ids_dVbs + ( Rs + Rd ) * Ids_dVds ; dVbs = - DJI * ( JI11 * Fbs + JI12 * Fds + JI13 * Fgs ) ; dVds = - DJI * ( JI21 * Fbs + JI22 * Fds + JI23 * Fgs ) ; dVgs = - DJI * ( JI31 * Fbs + JI32 * Fds + JI33 * Fgs ) ; dV_sum = fabs( dVbs ) + fabs( dVds ) + fabs( dVgs ) ; /*-----------------------------------------------------------* * Break point for converged case. * - Exit from the bias loop. * - NOTE: Update of internal biases is avoided. *-----------------*/ if ( Ids_last * Ids_tol >= fabs( Ids_last - Ids ) || mini_current >= fabs( Ids_last - Ids ) || dV_sum < ps_conv ) break ; /*-----------------------------------------------------------* * Update the internal biases. *-----------------*/ Vbs = Vbs + dVbs ; Vds = Vds + dVds ; Vgs = Vgs + dVgs ; if ( Vds < 0.0 ) { Vds = 0.0 ; dVds = 0.0 ; } /*-----------------------------------------------------------* * Bottom of bias loop. (label) *-----------------*/ /* bottom_of_bias_loop :*/ /*-----------------------------------------------------------* * Make initial guess flag of potential ON. * - This effects for the 2nd and later iterations of bias loop. *-----------------*/ flg_pprv = 1 ; } /* skip to end_of_part_1 */ } /*++ End of the bias loop +++++++++++++++++++++++++++++*/ if ( end_of_part_1 == 0 ) { if ( lp_bs > lp_bs_max ) { lp_bs -- ; } /*----------------------------------------------------------* * induced gate noise. ( Part 1/3 ) *----------------------*/ if ( model->HSM2_coign != 0 && model->HSM2_cothrml != 0 ) { kusai00 = VgVt * VgVt ; kusaidd = 2.0e0 * beta_inv * Cox_inv * Idd ; kusaiL = kusai00 - kusaidd ; Fn_SZ( kusai00 , kusai00 , 1.0e-3 , T0 ) ; Fn_SZ( kusaiL , kusaiL , 1.0e-3 , T0 ) ; kusai00L = kusai00 - kusaiL ; if ( Qn0 < epsm10 || kusai00L < epsm10 ) flg_ign = 0 ; else flg_ign = 1 ; } /*-----------------------------------------------------------* * End of PART-1. (label) *-----------------*/ } /* skip end_of_part_1 */ /* end_of_part_1: */ end_of_part_1 = 0; // Qiu for noise calcs Qiu_noi = Qiu ; } // end of Normal mode MOSFET /*----------------------------------------------------------* * Evaluate integrated chages in unit [C]. *----------------------*/ T1 = - here->HSM2_weff_nf * Leff ; Qb = T1 * Qbu ; Qb_dVbs = T1 * Qbu_dVbs ; Qb_dVds = T1 * Qbu_dVds ; Qb_dVgs = T1 * Qbu_dVgs ; Qi = T1 * Qiu ; Qi_dVbs = T1 * Qiu_dVbs ; Qi_dVds = T1 * Qiu_dVds ; Qi_dVgs = T1 * Qiu_dVgs ; Qi_noi = T1 * Qiu_noi ; // for noise calc. Qd = Qi * Qdrat ; Qd_dVbs = Qi_dVbs * Qdrat + Qi * Qdrat_dVbs ; Qd_dVds = Qi_dVds * Qdrat + Qi * Qdrat_dVds ; Qd_dVgs = Qi_dVgs * Qdrat + Qi * Qdrat_dVgs ; /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * PART-2: Substrate / gate / leak currents *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /*-----------------------------------------------------------* * Modified potential for symmetry. *-----------------*/ T1 = ( Vds - Pds ) / 2 ; Fn_SymAdd( Pzadd , T1 , model->HSM2_pzadd0 , T2 ) ; T2 /= 2 ; Pzadd_dVbs = T2 * ( - Pds_dVbs ) ; Pzadd_dVds = T2 * ( 1.0 - Pds_dVds ) ; Pzadd_dVgs = T2 * ( - Pds_dVgs ) ; if ( Pzadd < epsm10 ) { Pzadd = epsm10 ; Pzadd_dVbs = 0.0 ; Pzadd_dVds = 0.0 ; Pzadd_dVgs = 0.0 ; } Ps0z = Ps0 + Pzadd ; Ps0z_dVbs = Ps0_dVbs + Pzadd_dVbs ; Ps0z_dVds = Ps0_dVds + Pzadd_dVds ; Ps0z_dVgs = Ps0_dVgs + Pzadd_dVgs ; /*-----------------------------------------------------------* * Isub : substrate current induced by impact ionization. *-----------------*/ if ( flg_noqi == 1 || model->HSM2_coisub == 0 ) { /* Accumulation zone or nonconductive case, in which Ids==0. */ Isub = 0.0e0 ; Isub_dVbs = Isub_dVds = Isub_dVgs = 0.0e0 ; } else { /*-------------------------------------------* * Conductive case. *-----------------*/ if ( pParam->HSM2_sub1 > 0.0e0 && pParam->HSM2_vmax > 0.0e0 ) { T0 = here->HSM2_vg2const ; T1 = T0 * Vgp ; T1_dVd = T0 * Vgp_dVds ; T1_dVg = T0 * Vgp_dVgs ; T1_dVb = T0 * Vgp_dVbs ; T7 = Cox0 * Cox0 ; T8 = here->HSM2_qnsub_esi ; T3 = T8 / T7 ; T9 = 2.0 / T8 ; T4 = T9 * T7 ; /* bugfix in version 2.80 */ T2 = here->HSM2_xvbs ; T5 = T1 - beta_inv - T2 * Vbsz ; T5_dVd = T1_dVd - T2 * Vbsz_dVds; T5_dVg = T1_dVg ; T5_dVb = T1_dVb - T2 * Vbsz_dVbs; T6 = 1.0 + T4 * T5 ; /* bugfix in version 2.80 */ T6_dVd = T4 * T5_dVd ; T6_dVg = T4 * T5_dVg ; T6_dVb = T4 * T5_dVb ; Fn_SZ( T6 , T6, 1.0e-3, T9) ; T6 += small ; T6_dVd *= T9 ; T6_dVg *= T9 ; T6_dVb *= T9 ; T6 = sqrt( T6 ) ; T9 = 0.5 / T6 ; T6_dVd = T9 * T6_dVd ; T6_dVg = T9 * T6_dVg ; T6_dVb = T9 * T6_dVb ; Psislsat = T1 + T3 * ( 1.0 - T6 ) ; Psislsat_dVd = T1_dVd - T3 * T6_dVd ; Psislsat_dVg = T1_dVg - T3 * T6_dVg ; Psislsat_dVb = T1_dVb - T3 * T6_dVb ; T2 = here->HSM2_lgate / (here->HSM2_xgate + here->HSM2_lgate) ; Psisubsat = pParam->HSM2_svds * Vdsz + Ps0z - T2 * Psislsat ; Psisubsat_dVd = pParam->HSM2_svds * Vdsz_dVds + Ps0z_dVds - T2 * Psislsat_dVd ; Psisubsat_dVg = Ps0z_dVgs - T2 * Psislsat_dVg ; Psisubsat_dVb = Ps0z_dVbs - T2 * Psislsat_dVb ; Fn_SZ( Psisubsat , Psisubsat, 1.0e-3, T9 ) ; Psisubsat += small ; Psisubsat_dVd *= T9 ; Psisubsat_dVg *= T9 ; Psisubsat_dVb *= T9 ; T5 = here->HSM2_xsub1 ; T6 = here->HSM2_xsub2 ; T2 = exp( - T6 / Psisubsat ) ; T3 = T2 * T6 / ( Psisubsat * Psisubsat ) ; T2_dVd = T3 * Psisubsat_dVd ; T2_dVg = T3 * Psisubsat_dVg ; T2_dVb = T3 * Psisubsat_dVb ; Isub = T5 * Psisubsat * Ids * T2 ; Isub_dVds = T5 * ( Psisubsat_dVd * Ids * T2 + Psisubsat * Ids_dVds * T2 + Psisubsat * Ids * T2_dVd ) ; Isub_dVgs = T5 * ( Psisubsat_dVg * Ids * T2 + Psisubsat * Ids_dVgs * T2 + Psisubsat * Ids * T2_dVg ) ; Isub_dVbs = T5 * ( Psisubsat_dVb * Ids * T2 + Psisubsat * Ids_dVbs * T2 + Psisubsat * Ids * T2_dVb ) ; } else { Isub = 0.0e0 ; Isub_dVbs = Isub_dVds = Isub_dVgs = 0.0e0 ; } /* end of if ( pParam->HSM2_sub1 ... ) else block. */ } /*---------------------------------------------------* * Impact-Ionization Induced Bulk Potential Change (IBPC) *-----------------*/ if ( flg_noqi == 0 && Isub > 0e0 && pParam->HSM2_ibpc1 != 0e0 ) { /* delta Vbs */ T0 = 1e0 + pParam->HSM2_ibpc2 * dVth ; dVbsIBPC = pParam->HSM2_ibpc1 * T0 * Isub ; dVbsIBPC_dVbs = pParam->HSM2_ibpc1 * ( pParam->HSM2_ibpc2 * dVth_dVb * Isub + T0 * Isub_dVbs ) ; dVbsIBPC_dVds = pParam->HSM2_ibpc1 * ( pParam->HSM2_ibpc2 * dVth_dVd * Isub + T0 * Isub_dVds ) ; dVbsIBPC_dVgs = pParam->HSM2_ibpc1 * ( pParam->HSM2_ibpc2 * dVth_dVg * Isub + T0 * Isub_dVgs ) ; /* dG3 & dG4 */ T10 = 1e0 / Xi0 ; T1 = beta * dVbsIBPC * T10 ; T10 *= T10 ; T1_dVb = beta * ( dVbsIBPC_dVbs * Xi0 - dVbsIBPC * Xi0_dVbs ) * T10 ; T1_dVd = beta * ( dVbsIBPC_dVds * Xi0 - dVbsIBPC * Xi0_dVds ) * T10 ; T1_dVg = beta * ( dVbsIBPC_dVgs * Xi0 - dVbsIBPC * Xi0_dVgs ) * T10 ; T10 = 1e0 / Xil ; T2 = beta * dVbsIBPC * T10 ; T10 *= T10 ; T2_dVb = beta * ( dVbsIBPC_dVbs * Xil - dVbsIBPC * Xil_dVbs ) * T10 ; T2_dVd = beta * ( dVbsIBPC_dVds * Xil - dVbsIBPC * Xil_dVds ) * T10 ; T2_dVg = beta * ( dVbsIBPC_dVgs * Xil - dVbsIBPC * Xil_dVgs ) * T10 ; dG3 = cnst0 * ( Xilp32 * T2 - Xi0p32 * T1 ) ; dG3_dVbs = cnst0 * ( Xilp32_dVbs * T2 + Xilp32 * T2_dVb - Xi0p32_dVbs * T1 - Xi0p32 * T1_dVb ) ; dG3_dVds = cnst0 * ( Xilp32_dVds * T2 + Xilp32 * T2_dVd - Xi0p32_dVds * T1 - Xi0p32 * T1_dVd ) ; dG3_dVgs = cnst0 * ( Xilp32_dVgs * T2 + Xilp32 * T2_dVg - Xi0p32_dVgs * T1 - Xi0p32 * T1_dVg ) ; dG4 = cnst0 * 0.5 * ( - Xilp12 * T2 + Xi0p12 * T1 ) ; dG4_dVbs = cnst0 * 0.5 * ( - Xilp12_dVbs * T2 - Xilp12 * T2_dVb + Xi0p12_dVbs * T1 + Xi0p12 * T1_dVb ) ; dG4_dVds = cnst0 * 0.5 * ( - Xilp12_dVds * T2 - Xilp12 * T2_dVd + Xi0p12_dVds * T1 + Xi0p12 * T1_dVd ) ; dG4_dVgs = cnst0 * 0.5 * ( - Xilp12_dVgs * T2 - Xilp12 * T2_dVg + Xi0p12_dVgs * T1 + Xi0p12 * T1_dVg ) ; /* Add IBPC current into Ids */ dIdd = dG3 + dG4 ; dIdd_dVbs = dG3_dVbs + dG4_dVbs ; dIdd_dVds = dG3_dVds + dG4_dVds ; dIdd_dVgs = dG3_dVgs + dG4_dVgs ; IdsIBPC = betaWL * dIdd * Mu ; IdsIBPC_dVbs = betaWL * ( Mu * dIdd_dVbs + dIdd * Mu_dVbs ) + betaWL_dVbs * Mu * dIdd ; IdsIBPC_dVds = betaWL * ( Mu * dIdd_dVds + dIdd * Mu_dVds ) + betaWL_dVds * Mu * dIdd ; IdsIBPC_dVgs = betaWL * ( Mu * dIdd_dVgs + dIdd * Mu_dVgs ) + betaWL_dVgs * Mu * dIdd ; } /* End if (IBPC) */ /*-----------------------------------------------------------* * Igate : Gate current induced by tunneling. *-----------------*/ if ( model->HSM2_coiigs == 0 ) { Igate = 0.0 ; Igate_dVbs = Igate_dVds = Igate_dVgs = 0.0 ; Igs = 0.0 ; Igs_dVbs = Igs_dVds = Igs_dVgs = 0.0 ; Igd = 0.0 ; Igd_dVbs = Igd_dVds = Igd_dVgs = 0.0 ; Igb = 0.0 ; Igb_dVbs = Igb_dVds = Igb_dVgs = 0.0 ; GLPART1 = 0.0 ; GLPART1_dVgs = GLPART1_dVds = GLPART1_dVbs = 0.0 ; } else { /* Igate */ if ( flg_noqi == 0 ) { Psdlz = Ps0z + Vdsz - epsm10 ; Psdlz_dVbs = Ps0z_dVbs ; Psdlz_dVds = Ps0z_dVds + Vdsz_dVds ; Psdlz_dVgs = Ps0z_dVgs ; T1 = Vgsz - Vfb + modelMKS->HSM2_gleak4 * (dVth - dPpg) * Leff - Psdlz * pParam->HSM2_gleak3 ; T1_dVg = Vgsz_dVgs + modelMKS->HSM2_gleak4 * (dVth_dVg - dPpg_dVg) * Leff - Psdlz_dVgs * pParam->HSM2_gleak3 ; T1_dVd = Vgsz_dVds + modelMKS->HSM2_gleak4 * (dVth_dVd - dPpg_dVd) * Leff - Psdlz_dVds * pParam->HSM2_gleak3 ; T1_dVb = modelMKS->HSM2_gleak4 * ( dVth_dVb - dPpg_dVb ) * Leff - Psdlz_dVbs * pParam->HSM2_gleak3 ; T3 = 1.0 / Tox0 ; T2 = T1 * T3 ; T2_dVg = (T1_dVg ) * T3 ; T2_dVd = (T1_dVd ) * T3 ; T2_dVb = (T1_dVb ) * T3 ; T3 = 1.0 / modelMKS->HSM2_gleak5 ; if ( VgVt <= VgVt_small ) { Ey = 0.0 ; Ey_dVgs = 0.0 ; Ey_dVds = 0.0 ; Ey_dVbs = 0.0 ; } T7 = 1.0 + Ey * T3 ; T7_dVg = Ey_dVgs * T3 ; T7_dVd = Ey_dVds * T3 ; T7_dVb = Ey_dVbs * T3 ; Etun = T2 * T7 ; Etun_dVgs = T2_dVg * T7 + T7_dVg * T2 ; Etun_dVds = T2_dVd * T7 + T7_dVd * T2 ; Etun_dVbs = T2_dVb * T7 + T7_dVb * T2 ; Fn_SZ( Etun , Etun , igate_dlt , T5 ) ; Etun_dVgs *= T5 ; Etun_dVds *= T5 ; Etun_dVbs *= T5 ; Fn_SZ( T3 , Vgsz , 1.0e-3 , T4 ) ; T3 -= model->HSM2_vzadd0 ; TX = T3 / cclmmdf ; T2 = 1.0 + TX * TX ; T1 = 1.0 - 1.0 / T2 ; T1_dVg = 2.0 * TX * T4 / ( T2 * T2 * cclmmdf ) ; T1_dVd = T1_dVg * Vgsz_dVds ; Etun_dVgs = T1 * Etun_dVgs + Etun * T1_dVg ; Etun_dVds = T1 * Etun_dVds + Etun * T1_dVd ; Etun_dVbs *= T1 ; Etun *= T1 ; T0 = Leff * here->HSM2_weff_nf ; T7 = modelMKS->HSM2_gleak7 / (modelMKS->HSM2_gleak7 + T0) ; T6 = pParam->HSM2_gleak6 ; T9 = T6 / (T6 + Vdsz) ; T9_dVd = - T9 / (T6 + Vdsz) * Vdsz_dVds ; T1 = - pParam->HSM2_gleak2 * Egp32 / (Etun + small) ; if ( T1 < - EXP_THR ) { Igate = 0.0 ; Igate_dVbs = Igate_dVds = Igate_dVgs = 0.0 ; } else { T2 = exp ( T1 ) ; T3 = pParam->HSM2_gleak1 / Egp12 * C_QE * T0 ; T4 = T2 * T3 * sqrt ((Qiu + Cox0 * VgVt_small ) / cnst0) ; T5 = T4 * Etun ; T6 = 0.5 * Etun / (Qiu + Cox0 * VgVt_small ) ; T10 = T5 * Etun ; T10_dVb = T5 * (2.0 * Etun_dVbs - T1 * Etun_dVbs + T6 * Qiu_dVbs) ; T10_dVd = T5 * (2.0 * Etun_dVds - T1 * Etun_dVds + T6 * Qiu_dVds) ; T10_dVg = T5 * (2.0 * Etun_dVgs - T1 * Etun_dVgs + T6 * Qiu_dVgs) ; Igate = T7 * T9 * T10 ; Igate_dVbs = T7 * T9 * T10_dVb ; Igate_dVds = T7 * (T9_dVd * T10 + T9 * T10_dVd) ; Igate_dVgs = T7 * T9 * T10_dVg ; } } else { Igate = 0.0 ; Igate_dVbs = Igate_dVds = Igate_dVgs = 0.0 ; } /* Igs */ T0 = - pParam->HSM2_glksd2 * Vgs + modelMKS->HSM2_glksd3 ; T2 = exp (Tox0 * T0); T2_dVg = (- Tox0 * pParam->HSM2_glksd2) * T2; T0 = Vgs / Tox0 / Tox0 ; T3 = Vgs * T0 ; T3_dVg = 2.0 * T0 * (1.0 ) ; T4 = pParam->HSM2_glksd1 / 1.0e6 * here->HSM2_weff_nf ; Igs = T4 * T2 * T3 ; Igs_dVgs = T4 * (T2_dVg * T3 + T2 * T3_dVg) ; Igs_dVds = 0.0 ; Igs_dVbs = 0.0 ; if ( Vgs >= 0.0e0 ){ Igs *= -1.0 ; Igs_dVgs *= -1.0 ; Igs_dVds *= -1.0 ; Igs_dVbs *= -1.0 ; } /* Igd */ T1 = Vgs - Vds ; T0 = - pParam->HSM2_glksd2 * T1 + modelMKS->HSM2_glksd3 ; T2 = exp (Tox0 * T0); T2_dVg = (- Tox0 * pParam->HSM2_glksd2) * T2; T2_dVd = (+ Tox0 * pParam->HSM2_glksd2) * T2; T2_dVb = 0.0 ; T0 = T1 / Tox0 / Tox0 ; T3 = T1 * T0 ; T3_dVg = 2.0 * T0 ; T3_dVd = - 2.0 * T0 ; T3_dVb = 0.0 ; T4 = pParam->HSM2_glksd1 / 1.0e6 * here->HSM2_weff_nf ; Igd = T4 * T2 * T3 ; Igd_dVgs = T4 * (T2_dVg * T3 + T2 * T3_dVg) ; Igd_dVds = T4 * (T2_dVd * T3 + T2 * T3_dVd) ; Igd_dVbs = 0.0 ; if( T1 >= 0.0e0 ){ Igd *= -1.0 ; Igd_dVgs *= -1.0 ; Igd_dVds *= -1.0 ; Igd_dVbs *= -1.0 ; } /* Igb */ Etun = (- Vgs + Vbs + Vfb + model->HSM2_glkb3 ) / Tox0 ; Etun_dVgs = - 1.0 / Tox0 ; Etun_dVds = 0.0 ; Etun_dVbs = 1.0 / Tox0 ; Fn_SZ( Etun , Etun, igate_dlt, T5) ; Etun += small ; Etun_dVgs *= T5 ; Etun_dVbs *= T5 ; T1 = - pParam->HSM2_glkb2 / Etun ; if ( T1 < - EXP_THR ) { Igb = 0.0 ; Igb_dVgs = Igb_dVds = Igb_dVbs = 0.0 ; } else { T2 = exp ( T1 ); T3 = pParam->HSM2_glkb2 / ( Etun * Etun ) * T2 ; T2_dVg = T3 * Etun_dVgs ; T2_dVb = T3 * Etun_dVbs ; T3 = pParam->HSM2_glkb1 * here->HSM2_weff_nf * Leff ; Igb = T3 * Etun * Etun * T2 ; Igb_dVgs = T3 * (2.0 * Etun * Etun_dVgs * T2 + Etun * Etun * T2_dVg); Igb_dVds = 0.0 ; Igb_dVbs = T3 * (2.0 * Etun * Etun_dVbs * T2 + Etun * Etun * T2_dVb); } GLPART1 = 0.5 ; GLPART1_dVgs = 0.0 ; GLPART1_dVds = 0.0 ; GLPART1_dVbs = 0.0 ; } /* if ( model->HSM2_coiigs == 0 ) */ /*-----------------------------------------------------------* * Igidl : GIDL *-----------------*/ if( model->HSM2_cogidl == 0 ){ Igidl = 0.0e0 ; Igidl_dVbs = 0.0e0 ; Igidl_dVds = 0.0e0 ; Igidl_dVgs = 0.0e0 ; } else { T3 = here->HSM2_2qnsub_esi ; Qb0 = sqrt (T3 * (Pb20 - Vbsz2)) ; T4 = 0.5 * T3 / Qb0 ; Qb0_dVb = T4 * (- Vbsz2_dVbs) ; Qb0_dVd = T4 * (- Vbsz2_dVds) ; Qb0_dVg = T4 * (- Vbsz2_dVgs) ; Qb0Cox = model->HSM2_gidl6 * Qb0 * Cox_inv ; Qb0Cox_dVb = model->HSM2_gidl6 * ( Qb0_dVb * Cox_inv + Qb0 * Cox_inv_dVb ) ; Qb0Cox_dVd = model->HSM2_gidl6 * ( Qb0_dVd * Cox_inv + Qb0 * Cox_inv_dVd ) ; Qb0Cox_dVg = model->HSM2_gidl6 * ( Qb0_dVg * Cox_inv + Qb0 * Cox_inv_dVg ) ; T1 = model->HSM2_gidl3 * (Vds + model->HSM2_gidl4) - Vgs + (dVthSC + dVthLP) * model->HSM2_gidl5 - Qb0Cox ; T2 = 1.0 / Tox0 ; E1 = T1 * T2 ; E1_dVb = ( model->HSM2_gidl5 * (dVthSC_dVb + dVthLP_dVb) - Qb0Cox_dVb ) * T2 ; E1_dVd = ( model->HSM2_gidl3 + model->HSM2_gidl5 * (dVthSC_dVd + dVthLP_dVd) - Qb0Cox_dVd ) * T2 ; E1_dVg = ( -1.0 + model->HSM2_gidl5 * (dVthSC_dVg + dVthLP_dVg) - Qb0Cox_dVg ) * T2 ; Fn_SZ( Egidl , E1, eef_dlt, T5) ; Egidl_dVb = T5 * E1_dVb ; Egidl_dVd = T5 * E1_dVd ; Egidl_dVg = T5 * E1_dVg ; Egidl += small ; T6 = pow(Egidl,model->HSM2_gidl7) ; T1 = model->HSM2_gidl7 * pow(Egidl,model->HSM2_gidl7 -1.0) ; T6_dVb = Egidl_dVb * T1 ; T6_dVd = Egidl_dVd * T1 ; T6_dVg = Egidl_dVg * T1 ; T0 = - pParam->HSM2_gidl2 * Egp32 / T6 ; if ( T0 < - EXP_THR ) { Igidl = 0.0 ; Igidl_dVbs = Igidl_dVds = Igidl_dVgs = 0.0 ; } else { T1 = exp ( T0 ) ; T2 = pParam->HSM2_gidl1 / Egp12 * C_QE * here->HSM2_weff_nf ; Igidl = T2 * Egidl * Egidl * T1 ; T3 = T2 * T1 * Egidl * (2.0 + pParam->HSM2_gidl2 * Egp32 * Egidl / T6 / T6 ) ; Igidl_dVbs = T3 * Egidl_dVb ; Igidl_dVds = T3 * Egidl_dVd ; Igidl_dVgs = T3 * Egidl_dVg ; } Vdb = Vds - Vbs ; if ( Vdb > 0.0 ) { T2 = Vdb * Vdb ; T4 = T2 * Vdb ; T0 = T4 + C_gidl_delta ; T5 = T4 / T0 ; T7 = ( 3.0 * T2 * T0 - T4 * 3.0 * T2 ) / ( T0 * T0 ) ; /* == T5_dVdb */ Igidl_dVbs = Igidl_dVbs * T5 + Igidl * T7 * ( - 1.0 ) ; /* Vdb_dVbs = -1 */ Igidl_dVds = Igidl_dVds * T5 + Igidl * T7 * ( + 1.0 ) ; /* Vdb_dVds = +1 */ Igidl_dVgs = Igidl_dVgs * T5 ; /* Vdb_dVgs = 0 */ Igidl *= T5 ; } else { Igidl = 0.0 ; Igidl_dVbs = Igidl_dVds = Igidl_dVgs = 0.0 ; } } /*-----------------------------------------------------------* * Igisl : GISL *-----------------*/ if( model->HSM2_cogidl == 0){ Igisl = 0.0e0 ; Igisl_dVbs = 0.0e0 ; Igisl_dVds = 0.0e0 ; Igisl_dVgs = 0.0e0 ; } else { T1 = model->HSM2_gidl3 * ( - Vds + model->HSM2_gidl4 ) - ( Vgs - Vds ) + ( dVthSC + dVthLP ) * model->HSM2_gidl5 - Qb0Cox ; T2 = 1.0 / Tox0 ; E1 = T1 * T2 ; E1_dVb = ( model->HSM2_gidl5 * (dVthSC_dVb + dVthLP_dVb) - Qb0Cox_dVb ) * T2 ; E1_dVd = ( -1.0 * model->HSM2_gidl3 + 1.0 + model->HSM2_gidl5 * (dVthSC_dVd + dVthLP_dVd) - Qb0Cox_dVd ) * T2 ; E1_dVg = ( -1.0 + model->HSM2_gidl5 * (dVthSC_dVg + dVthLP_dVg) - Qb0Cox_dVg ) * T2 ; Fn_SZ( Egisl , E1, eef_dlt, T5) ; Egisl_dVb = T5 * E1_dVb ; Egisl_dVd = T5 * E1_dVd ; Egisl_dVg = T5 * E1_dVg ; Egisl += small ; T6 = pow(Egisl,model->HSM2_gidl7) ; T1 = model->HSM2_gidl7 * pow(Egisl,model->HSM2_gidl7 -1.0) ; T6_dVb = Egisl_dVb * T1 ; T6_dVd = Egisl_dVd * T1 ; T6_dVg = Egisl_dVg * T1 ; T0 = - pParam->HSM2_gidl2 * Egp32 / T6 ; if ( T0 < - EXP_THR ) { Igisl = 0.0 ; Igisl_dVbs = Igisl_dVds = Igisl_dVgs = 0.0 ; } else { T1 = exp ( T0 ) ; T2 = pParam->HSM2_gidl1 / Egp12 * C_QE * here->HSM2_weff_nf ; Igisl = T2 * Egisl * Egisl * T1 ; T3 = T2 * T1 * Egisl * (2.0 + pParam->HSM2_gidl2 * Egp32 * Egisl / T6 / T6) ; Igisl_dVbs = T3 * Egisl_dVb ; Igisl_dVds = T3 * Egisl_dVd ; Igisl_dVgs = T3 * Egisl_dVg ; } Vsb = - Vbs ; if ( Vsb > 0.0 ) { T2 = Vsb * Vsb ; T4 = T2 * Vsb ; T0 = T4 + C_gidl_delta ; T5 = T4 / T0 ; T7 = ( 3.0 * T2 * T0 - T4 * 3.0 * T2 ) / ( T0 * T0 ) ; /* == T5_dVsb */ Igisl_dVbs = Igisl_dVbs * T5 + Igisl * T7 * ( - 1.0 ) ; /* Vsb_dVbs = -1 */ Igisl_dVds = Igisl_dVds * T5 ; /* Vsb_dVds = 0 */ Igisl_dVgs = Igisl_dVgs * T5 ; /* Vsb_dVgs = 0 */ Igisl *= T5 ; } else { Igisl = 0.0 ; Igisl_dVbs = Igisl_dVds = Igisl_dVgs = 0.0 ; } } /*-----------------------------------------------------------* * End of PART-2. (label) *-----------------*/ /* end_of_part_2: */ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * PART-3: Overlap charge *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ Aclm = pParam->HSM2_clm1 ; if ( flg_noqi != 0 ) { /*-------------------------------------------* * Calculation of Psdl for cases of flg_noqi==1. *-----------------*/ Psdl = Aclm * (Vds + Ps0) + (1.0e0 - Aclm) * Psl ; Psdl_dVbs = Aclm * Ps0_dVbs + (1.0e0 - Aclm) * Psl_dVbs ; Psdl_dVds = Aclm * (1.0e0 + Ps0_dVds) + (1.0e0 - Aclm) * Psl_dVds ; Psdl_dVgs = Aclm * Ps0_dVgs + (1.0e0 - Aclm) * Psl_dVgs ; if ( Psdl > Ps0 + Vds - epsm10 ) { Psdl = Ps0 + Vds - epsm10 ; Psdl_dVbs = Ps0_dVbs ; Psdl_dVds = Ps0_dVds + 1.0 ; Psdl_dVgs = Ps0_dVgs ; } if (model->HSM2_xqy !=0) { Ec = 0.0e0 ; Ec_dVbs =0.0e0 ; Ec_dVds =0.0e0 ; Ec_dVgs =0.0e0 ; } } else { /* Ec is removed from Lred calc. part */ if (model->HSM2_xqy !=0) { if ( Idd < C_IDD_MIN ) { Ec = 0.0e0 ; Ec_dVbs =0.0e0 ; Ec_dVds =0.0e0 ; Ec_dVgs =0.0e0 ; } else { T1 = beta_inv / Leff ; T2 = 1.0 / (Qn0 + 1e-20) ; T3 = T2 * T2 ; Ec = Idd * T1 * T2 ; Ec_dVbs = T1 * (Idd_dVbs * T2 - Idd * Qn0_dVbs * T3 ) ; Ec_dVds = T1 * (Idd_dVds * T2 - Idd * Qn0_dVds * T3 ) ; Ec_dVgs = T1 * (Idd_dVgs * T2 - Idd * Qn0_dVgs * T3 ) ; } } } /*-------------------------------------------* * Overlap charges: Qgod, Qgos, and Qover *-----------------*/ if ( model->HSM2_coovlp >= 1 && pParam->HSM2_lover > 0.0 ){ cov_slp = modelMKS->HSM2_ovslp ; cov_mag = model->HSM2_ovmag ; covvg = Vgs ; covvg_dVgs = 1.0 ; T1 = Cox0 * here->HSM2_weff_nf ; Lov = pParam->HSM2_lover ; if ( pParam->HSM2_nover == 0.0 ){ T4 = cov_slp * T1 * ( cov_mag + covvg ) ; T4_dVg = cov_slp * T1 * covvg_dVgs ; T4_dVd = 0.0 ; T5 = Lov * T1 ; TX = Ps0 ; TX_dVbs = Ps0_dVbs ; TX_dVds = Ps0_dVds ; TX_dVgs = Ps0_dVgs ; T9 = 1.2e0 - TX ; Qgos = Vgs * T5 - T9 * T4 ; Qgos_dVbs = T4 * TX_dVbs ; Qgos_dVds = T4 * TX_dVds - T9 * T4_dVd ; Qgos_dVgs = T5 + T4 * TX_dVgs - T9 * T4_dVg ; T4 = cov_slp * T1 * ( cov_mag + covvg - Vds ) ; T4_dVg = cov_slp * T1 * covvg_dVgs ; T4_dVd = - cov_slp * T1 ; TX = Psl - Vds ; TX_dVbs = Psl_dVbs ; TX_dVds = Psl_dVds - 1.0 ; TX_dVgs = Psl_dVgs ; T9 = 1.2e0 - TX ; Qgod = (Vgs - Vds) * T5 - T4 * T9 ; Qgod_dVbs = T4 * TX_dVbs ; Qgod_dVds = - T5 + T4 * TX_dVds - T9 * T4_dVd ; Qgod_dVgs = T5 + T4 * TX_dVgs - T9 * T4_dVg ; } else { for ( lcover = -1 ; lcover <= +1 ; lcover += 2 ) { flg_ovloops = ( 1 - lcover ) / 2 ; /* 1 in Source overlap calc. */ flg_ovloopd = ( 1 + lcover ) / 2 ; /* 1 in Drain overlap calc. */ /*-------------------------------------------* * Qover (G/D overlap charge) | note: _dVxs means _dVxse *------------------------*/ Vbsgmt = ModeNML * Vbse + ModeRVS * ( Vbse - Vdse ) ; Vdsgmt = ModeNML * Vdse + ModeRVS * ( - Vdse ) ; Vgsgmt = ModeNML * Vgse + ModeRVS * ( Vgse - Vdse ) ; Vdbgmt = Vdsgmt - Vbsgmt ; Vgbgmt = Vgsgmt - Vbsgmt ; Vsbgmt = - Vbsgmt ; flg_overs = flg_ovloops * (int)ModeNML + flg_ovloopd * (int)ModeRVS ; /* geometrical source */ flg_overd = flg_ovloops * (int)ModeRVS + flg_ovloopd * (int)ModeNML ; /* geometrical drain */ Vxbgmt = flg_overs * Vsbgmt + flg_overd * Vdbgmt + epsm10 ; /*---------------------------------------------------* * Clamp -Vxbgmt. *-----------------*/ T0 = - Vxbgmt; if ( T0 > Vbs_bnd ) { T1 = T0 - Vbs_bnd; T2 = Vbs_max - Vbs_bnd; Fn_SUPoly4( TY, T1, T2, T11 ); T10 = Vbs_bnd + TY ; } else { T10 = T0 ; T11 = 1.0 ; } Vxbgmtcl = - T10 - small2 ; Vxbgmtcl_dVxbgmt = T11; fac1 = here->HSM2_cnst0over * Cox0_inv ; fac1_dVbs = 0.0; fac1_dVds = 0.0; fac1_dVgs = 0.0; fac1p2 = fac1 * fac1 ; VgpLD = - Vgbgmt + pParam->HSM2_vfbover; VgpLD_dVgb = - 1.0e0 ; T0 = pParam->HSM2_nover / here->HSM2_nin ; Pb2over = 2.0 / beta * log( T0 ) ; Vgb_fb_LD = - Vxbgmtcl ; /*-----------------------------------* * QsuLD: total charge = Accumulation | Depletion+inversion *-----------------*/ if ( VgpLD < Vgb_fb_LD ){ /*---------------------------* * Accumulation *-----------------*/ flg_ovzone = -1 ; T1 = 1.0 / ( beta * here->HSM2_cnst0over ) ; TY = T1 * Cox0 ; Ac41 = 2.0 + 3.0 * C_SQRT_2 * TY ; Ac4 = 8.0 * Ac41 * Ac41 * Ac41 ; Ps0_min = here->HSM2_eg - Pb2over ; TX = beta * ( VgpLD + Vxbgmtcl ) ; TX_dVxb = beta * Vxbgmtcl_dVxbgmt ; TX_dVgb = beta * VgpLD_dVgb ; Ac31 = 7.0 * C_SQRT_2 - 9.0 * TY * ( TX - 2.0 ) ; Ac31_dVxb = - 9.0 * TY * TX_dVxb ; Ac31_dVgb = - 9.0 * TY * TX_dVgb ; Ac3 = Ac31 * Ac31 ; T1 = 2.0 * Ac31 ; Ac3_dVxb = T1 * Ac31_dVxb ; Ac3_dVgb = T1 * Ac31_dVgb ; Ac2 = sqrt( Ac4 + Ac3 ) ; T1 = 0.5 / Ac2 ; Ac2_dVxb = T1 * Ac3_dVxb ; Ac2_dVgb = T1 * Ac3_dVgb ; Ac1 = -7.0 * C_SQRT_2 + Ac2 + 9.0 * TY * ( TX - 2.0 ) ; Ac1_dVxb = Ac2_dVxb + 9.0 * TY * TX_dVxb ; Ac1_dVgb = Ac2_dVgb + 9.0 * TY * TX_dVgb ; Acd = pow( Ac1 , C_1o3 ) ; T1 = C_1o3 / ( Acd * Acd ) ; Acd_dVxb = Ac1_dVxb * T1 ; Acd_dVgb = Ac1_dVgb * T1 ; Acn = -4.0 * C_SQRT_2 - 12.0 * TY + 2.0 * Acd + C_SQRT_2 * Acd * Acd ; T1 = 2.0 + 2.0 * C_SQRT_2 * Acd ; Acn_dVxb = T1 * Acd_dVxb ; Acn_dVgb = T1 * Acd_dVgb ; Chi = Acn / Acd ; T1 = 1.0 / ( Acd * Acd ) ; Chi_dVxb = ( Acn_dVxb * Acd - Acn * Acd_dVxb ) * T1 ; Chi_dVgb = ( Acn_dVgb * Acd - Acn * Acd_dVgb ) * T1 ; Psa = Chi * beta_inv - Vxbgmtcl ; Psa_dVxb = Chi_dVxb * beta_inv - Vxbgmtcl_dVxbgmt ; Psa_dVgb = Chi_dVgb * beta_inv ; T1 = Psa + Vxbgmtcl ; T2 = T1 / Ps0_min ; T3 = sqrt( 1.0 + ( T2 * T2 ) ) ; T9 = T2 / T3 / Ps0_min ; T3_dVd = T9 * ( Psa_dVxb + Vxbgmtcl_dVxbgmt ) ; T3_dVg = T9 * Psa_dVgb ; Ps0LD = T1 / T3 - Vxbgmtcl ; T9 = 1.0 / ( T3 * T3 ) ; Ps0LD_dVxb = T9 * ( ( Psa_dVxb + Vxbgmtcl_dVxbgmt ) * T3 - T1 * T3_dVd ) - Vxbgmtcl_dVxbgmt ; Ps0LD_dVgb = T9 * ( Psa_dVgb * T3 - T1 * T3_dVg ); T2 = ( VgpLD - Ps0LD ) ; QsuLD = Cox0 * T2 ; QsuLD_dVxb = - Cox0 * Ps0LD_dVxb ; QsuLD_dVgb = Cox0 * ( VgpLD_dVgb - Ps0LD_dVgb ) ; QbuLD = QsuLD ; QbuLD_dVxb = QsuLD_dVxb ; QbuLD_dVgb = QsuLD_dVgb ; } else { /*---------------------------* * Depletion and inversion *-----------------*/ /* initial value for a few fixpoint iterations to get Ps0_iniA from simplified Poisson equation: */ flg_ovzone = 2 ; Chi = znbd3 ; Chi_dVxb = 0.0 ; Chi_dVgb = 0.0 ; Ps0_iniA= Chi/beta - Vxbgmtcl ; Ps0_iniA_dVxb = Chi_dVxb/beta - Vxbgmtcl_dVxbgmt ; Ps0_iniA_dVgb = Chi_dVgb/beta ; /* 1 .. 2 relaxation steps should be sufficient */ for ( lp_ld = 1; lp_ld <= 2; lp_ld ++ ) { TY = exp(-Chi); TY_dVxb = -Chi_dVxb * TY; TY_dVgb = -Chi_dVgb * TY; TX = 1.0e0 + 4.0e0 * ( beta * ( VgpLD + Vxbgmtcl ) - 1.0e0 + TY ) / ( fac1p2 * beta2 ) ; TX_dVxb = 4.0e0 * ( beta * ( Vxbgmtcl_dVxbgmt ) + TY_dVxb ) / ( fac1p2 * beta2 ); TX_dVgb = 4.0e0 * ( beta * ( VgpLD_dVgb ) + TY_dVgb ) / ( fac1p2 * beta2 ); T1 = ( beta * ( VgpLD + Vxbgmtcl ) - 1.0e0 + TY ); T3 = fac1p2 * beta2 ; if ( TX < epsm10) { TX = epsm10; TX_dVxb = 0.0; TX_dVgb = 0.0; } Ps0_iniA = VgpLD + fac1p2 * beta / 2.0e0 * ( 1.0e0 - sqrt( TX ) ) ; Ps0_iniA_dVxb = - fac1p2 * beta / 2.0e0 * TX_dVxb * 0.5 / sqrt( TX ); Ps0_iniA_dVgb = VgpLD_dVgb - fac1p2 * beta / 2.0e0 * TX_dVgb * 0.5 / sqrt( TX ); T1 = fac1p2 * beta ; T2 = 1.0 - sqrt( TX ); Chi = beta * ( Ps0_iniA + Vxbgmtcl ) ; Chi_dVxb = beta * ( Ps0_iniA_dVxb + Vxbgmtcl_dVxbgmt ) ; Chi_dVgb = beta * ( Ps0_iniA_dVgb ) ; } /* End of iteration */ if ( Chi < znbd3 ) { flg_ovzone = 1 ; /*-----------------------------------* * zone-D1 * - Ps0_iniA is the analytical solution of QovLD=Qb0 with * Qb0 being approximated by 3-degree polynomial. * * new: Inclusion of exp(-Chi) term at right border *-----------------*/ Ta = 1.0/(9.0*sqrt(2.0)) - (5.0+7.0*exp(-3.0)) / (54.0*sqrt(2.0+exp(-3.0))); Tb = (1.0+exp(-3.0)) / (2.0*sqrt(2.0+exp(-3.0))) - sqrt(2.0) / 3.0; Tc = 1.0/sqrt(2.0) + 1.0/(beta*fac1); Td = - (VgpLD + Vxbgmtcl) / fac1; Td_dVxb = - Vxbgmtcl_dVxbgmt / fac1; Td_dVgb = - VgpLD_dVgb / fac1; Tq = Tb*Tb*Tb / (27.0*Ta*Ta*Ta) - Tb*Tc/(6.0*Ta*Ta) + Td/(2.0*Ta); Tq_dVxb = Td_dVxb/(2.0*Ta); Tq_dVgb = Td_dVgb / (2.0*Ta); Tp = (3.0*Ta*Tc-Tb*Tb)/(9.0*Ta*Ta); T5 = sqrt(Tq*Tq + Tp*Tp*Tp); T5_dVxb = 2.0*Tq*Tq_dVxb / (2.0*T5); T5_dVgb = 2.0*Tq*Tq_dVgb / (2.0*T5); Tu = pow(-Tq + T5,C_1o3); Tu_dVxb = Tu / (3.0 * (-Tq + T5)) * (-Tq_dVxb + T5_dVxb); Tu_dVgb = Tu / (3.0 * (-Tq + T5)) * (-Tq_dVgb + T5_dVgb); Tv = -pow(Tq + T5,C_1o3); Tv_dVxb = Tv / (3.0 * (-Tq - T5)) * (-Tq_dVxb - T5_dVxb); Tv_dVgb = Tv / (3.0 * (-Tq - T5)) * (-Tq_dVgb - T5_dVgb); TX = Tu + Tv - Tb/(3.0*Ta); TX_dVxb = Tu_dVxb + Tv_dVxb; TX_dVgb = Tu_dVgb + Tv_dVgb; Ps0_iniA = TX * beta_inv - Vxbgmtcl ; Ps0_iniA_dVxb = TX_dVxb * beta_inv - Vxbgmtcl_dVxbgmt; Ps0_iniA_dVgb = TX_dVgb * beta_inv; Chi = beta * ( Ps0_iniA + Vxbgmtcl ) ; Chi_dVxb = beta * ( Ps0_iniA_dVxb + Vxbgmtcl_dVxbgmt ) ; Chi_dVgb = beta * ( Ps0_iniA_dVgb ) ; } if ( model->HSM2_coqovsm > 0 ) { /*-----------------------------------* * - Ps0_iniB : upper bound. *-----------------*/ flg_ovzone += 2; VgpLD_shift = VgpLD + Vxbgmtcl + 0.1; VgpLD_shift_dVgb = VgpLD_dVgb; VgpLD_shift_dVxb = Vxbgmtcl_dVxbgmt; exp_bVbs = exp( beta * - Vxbgmtcl ) + small ; exp_bVbs_dVxb = - exp_bVbs * beta * Vxbgmtcl_dVxbgmt; T0 = here->HSM2_nin / pParam->HSM2_nover; cnst1over = T0 * T0; gamma = cnst1over * exp_bVbs ; gamma_dVxb = cnst1over * exp_bVbs_dVxb; T0 = beta2 * fac1p2; psi = beta*VgpLD_shift; psi_dVgb = beta*VgpLD_shift_dVgb; psi_dVxb = beta*VgpLD_shift_dVxb; Chi_1 = log(gamma*T0 + psi*psi) - log(cnst1over*T0) + beta*Vxbgmtcl; Chi_1_dVgb = 2.0*psi*psi_dVgb/ (gamma*T0 + psi*psi); Chi_1_dVxb = (gamma_dVxb*T0+2.0*psi*psi_dVxb)/(gamma*T0+psi*psi) + beta*Vxbgmtcl_dVxbgmt; Fn_SU2( Chi_1, Chi_1, psi, 1.0, T1, T2 ); Chi_1_dVgb = Chi_1_dVgb*T1 + psi_dVgb*T2; Chi_1_dVxb = Chi_1_dVxb*T1 + psi_dVxb*T2; /* 1 fixpoint step for getting more accurate Chi_B */ psi -= Chi_1 ; psi_dVgb -= Chi_1_dVgb ; psi_dVxb -= Chi_1_dVxb ; psi += beta*0.1 ; psi_B = psi; arg_B = psi*psi/(gamma*T0); Chi_B = log(gamma*T0 + psi*psi) - log(cnst1over*T0) + beta*Vxbgmtcl; Chi_B_dVgb = 2.0*psi*psi_dVgb/ (gamma*T0 + psi*psi); Chi_B_dVxb = (gamma_dVxb*T0+2.0*psi*psi_dVxb)/(gamma*T0+psi*psi) + beta*Vxbgmtcl_dVxbgmt; Ps0_iniB = Chi_B/beta - Vxbgmtcl ; Ps0_iniB_dVgb = Chi_B_dVgb/beta; Ps0_iniB_dVxb = Chi_B_dVxb/beta- Vxbgmtcl_dVxbgmt; /* construction of Ps0LD by taking Ps0_iniB as an upper limit of Ps0_iniA * * Limiting is done for Chi rather than for Ps0LD, to avoid shifting * for Fn_SU2 */ Chi_A = Chi; Chi_A_dVxb = Chi_dVxb; Chi_A_dVgb = Chi_dVgb; Fn_SU2( Chi, Chi_A, Chi_B, c_ps0ini_2*75.00, T1, T2 ); /* org: 50 */ Chi_dVgb = Chi_A_dVgb * T1 + Chi_B_dVgb * T2; Chi_dVxb = Chi_A_dVxb * T1 + Chi_B_dVxb * T2; } /* updating Ps0LD */ Ps0LD= Chi/beta - Vxbgmtcl ; Ps0LD_dVgb = Chi_dVgb/beta; Ps0LD_dVxb = Chi_dVxb/beta- Vxbgmtcl_dVxbgmt; T1 = Chi - 1.0 + exp(-Chi); T1_dVxb = (1.0 - exp(-Chi)) * Chi_dVxb ; T1_dVgb = (1.0 - exp(-Chi)) * Chi_dVgb ; if (T1 < epsm10) { T1 = epsm10 ; T1_dVxb = 0.0 ; T1_dVgb = 0.0 ; } T2 = sqrt(T1); QbuLD = here->HSM2_cnst0over * T2 ; T3 = here->HSM2_cnst0over * 0.5 / T2 ; QbuLD_dVxb = T3 * T1_dVxb ; QbuLD_dVgb = T3 * T1_dVgb ; /*-----------------------------------------------------------* * QsuLD : Qovs or Qovd in unit area. * note: QsuLD = Qdep+Qinv. *-----------------*/ QsuLD = Cox0 * ( VgpLD - Ps0LD ) ; QsuLD_dVxb = Cox0 * ( - Ps0LD_dVxb ) ; QsuLD_dVgb = Cox0 * ( VgpLD_dVgb - Ps0LD_dVgb ) ; if ( model->HSM2_coqovsm == 1 ) { /* take initial values from analytical model */ /*---------------------------------------------------* * Calculation of Ps0LD. (beginning of Newton loop) * - Fs0 : Fs0 = 0 is the equation to be solved. * - dPs0 : correction value. *-----------------*/ /* initial value too close to flat band should not be used */ exp_bVbs = exp( beta * - Vxbgmtcl ) ; T0 = here->HSM2_nin / pParam->HSM2_nover; cnst1over = T0 * T0; cfs1 = cnst1over * exp_bVbs ; flg_conv = 0 ; for ( lp_s0 = 1 ; lp_s0 <= 2*lp_s0_max + 1 ; lp_s0 ++ ) { Chi = beta * ( Ps0LD + Vxbgmtcl ) ; if ( Chi < znbd5 ) { /*-------------------------------------------* * zone-D1/D2. (Ps0LD) *-----------------*/ fi = Chi * Chi * Chi * ( cn_im53 + Chi * ( cn_im54 + Chi * cn_im55 ) ) ; fi_dChi = Chi * Chi * ( 3 * cn_im53 + Chi * ( 4 * cn_im54 + Chi * 5 * cn_im55 ) ) ; fs01 = cfs1 * fi * fi ; fs01_dPs0 = cfs1 * beta * 2 * fi * fi_dChi ; fb = Chi * ( cn_nc51 + Chi * ( cn_nc52 + Chi * ( cn_nc53 + Chi * ( cn_nc54 + Chi * cn_nc55 ) ) ) ) ; fb_dChi = cn_nc51 + Chi * ( 2 * cn_nc52 + Chi * ( 3 * cn_nc53 + Chi * ( 4 * cn_nc54 + Chi * 5 * cn_nc55 ) ) ) ; fs02 = sqrt( fb * fb + fs01 + small ) ; fs02_dPs0 = ( beta * fb_dChi * 2 * fb + fs01_dPs0 ) / ( fs02 + fs02 ) ; } else { /*-------------------------------------------* * zone-D3. (Ps0LD) *-----------------*/ if ( Chi < large_arg ) { /* avoid exp_Chi to become extremely large */ exp_Chi = exp( Chi ) ; fs01 = cfs1 * ( exp_Chi - 1.0e0 ) ; fs01_dPs0 = cfs1 * beta * ( exp_Chi ) ; } else { exp_bPs0 = exp( beta*Ps0LD ) ; fs01 = cnst1over * ( exp_bPs0 - exp_bVbs ) ; fs01_dPs0 = cnst1over * beta * exp_bPs0 ; } fs02 = sqrt( Chi - 1.0 + fs01 ) ; fs02_dPs0 = ( beta + fs01_dPs0 ) / fs02 * 0.5 ; } /* end of if ( Chi ... ) block */ /*-----------------------------------------------------------* * Fs0 *-----------------*/ Fs0 = VgpLD - Ps0LD - fac1 * fs02 ; Fs0_dPs0 = - 1.0e0 - fac1 * fs02_dPs0 ; if ( flg_conv == 1 ) break ; dPs0 = - Fs0 / Fs0_dPs0 ; /*-------------------------------------------* * Update Ps0LD . *-----------------*/ dPlim = 0.5*dP_max*(1.0 + Fn_Max(1.e0,fabs(Ps0LD))) ; if ( fabs( dPs0 ) > dPlim ) dPs0 = dPlim * Fn_Sgn( dPs0 ) ; Ps0LD = Ps0LD + dPs0 ; TX = -Vxbgmtcl + ps_conv / 2 ; if ( Ps0LD < TX ) Ps0LD = TX ; /*-------------------------------------------* * Check convergence. *-----------------*/ if ( fabs( dPs0 ) <= ps_conv && fabs( Fs0 ) <= gs_conv ) { flg_conv = 1 ; } } /* end of Ps0LD Newton loop */ /*-------------------------------------------* * Procedure for diverged case. *-----------------*/ if ( flg_conv == 0 ) { fprintf( stderr , "*** warning(HiSIM_HV): Went Over Iteration Maximum (Ps0LD)\n" ) ; fprintf( stderr , " -Vxbgmtcl = %e Vgbgmt = %e\n" , -Vxbgmtcl , Vgbgmt ) ; } /*---------------------------------------------------* * Evaluate derivatives of Ps0LD. *-----------------*/ if ( Chi < znbd5 ) { fs01_dVbs = cfs1 * beta * fi * ( - fi + 2 * fi_dChi ) ; /* fs01_dVxbgmtcl */ T2 = 1.0e0 / ( fs02 + fs02 ) ; fs02_dVbs = ( + beta * fb_dChi * 2 * fb + fs01_dVbs ) * T2 ; /* fs02_dVxbgmtcl */ } else { if ( Chi < large_arg ) { fs01_dVbs = + cfs1 * beta ; /* fs01_dVxbgmtcl */ } else { fs01_dVbs = + cfs1 * beta ; } T2 = 0.5e0 / fs02 ; fs02_dVbs = ( + beta + fs01_dVbs ) * T2 ; /* fs02_dVxbgmtcl */ } T1 = 1.0 / Fs0_dPs0 ; Ps0LD_dVxb = - ( - fac1 * fs02_dVbs ) * T1 ; Ps0LD_dVds = 0.0 ; Ps0LD_dVgb = - ( VgpLD_dVgb - fac1_dVgs * fs02 ) * T1 ; if ( Chi < znbd5 ) { /*-------------------------------------------* * zone-D1/D2. (Ps0LD) *-----------------*/ if ( Chi < znbd3 ) { flg_ovzone = 1; } else { flg_ovzone = 2; } Xi0 = fb * fb + epsm10 ; T1 = 2 * fb * fb_dChi * beta ; Xi0_dVbs = T1 * ( Ps0LD_dVxb + 1.0 ) ; /* Xi0_dVxbgmtcl */ Xi0_dVds = T1 * Ps0LD_dVds ; Xi0_dVgs = T1 * Ps0LD_dVgb ; Xi0p12 = fb + epsm10 ; T1 = fb_dChi * beta ; Xi0p12_dVbs = T1 * ( Ps0LD_dVxb + 1.0 ) ; /* Xi0p12_dVxbgmtcl */ Xi0p12_dVds = T1 * Ps0LD_dVds ; Xi0p12_dVgs = T1 * Ps0LD_dVgb ; Xi0p32 = fb * fb * fb + epsm10 ; T1 = 3 * fb * fb * fb_dChi * beta ; Xi0p32_dVbs = T1 * ( Ps0LD_dVxb + 1.0 ) ; /* Xi0p32_dVxbgmtcl */ Xi0p32_dVds = T1 * Ps0LD_dVds ; Xi0p32_dVgs = T1 * Ps0LD_dVgb ; } else { /*-------------------------------------------* * zone-D3. (Ps0LD) *-----------------*/ flg_ovzone = 3 ; Xi0 = Chi - 1.0e0 ; Xi0_dVbs = beta * ( Ps0LD_dVxb + 1.0e0 ) ; /* Xi0_dVxbgmtcl */ Xi0_dVds = beta * Ps0LD_dVds ; Xi0_dVgs = beta * Ps0LD_dVgb ; Xi0p12 = sqrt( Xi0 ) ; T1 = 0.5e0 / Xi0p12 ; Xi0p12_dVbs = T1 * Xi0_dVbs ; Xi0p12_dVds = T1 * Xi0_dVds ; Xi0p12_dVgs = T1 * Xi0_dVgs ; Xi0p32 = Xi0 * Xi0p12 ; T1 = 1.5e0 * Xi0p12 ; Xi0p32_dVbs = T1 * Xi0_dVbs ; Xi0p32_dVds = T1 * Xi0_dVds ; Xi0p32_dVgs = T1 * Xi0_dVgs ; if ( Chi < large_arg ) { } else { } } /* end of if ( Chi ... ) block */ /*-----------------------------------------------------------* * - Recalculate the derivatives of fs01 and fs02. *-----------------*/ fs01_dVbs = Ps0LD_dVxb * fs01_dPs0 + fs01_dVbs ; fs01_dVds = Ps0LD_dVds * fs01_dPs0 ; fs01_dVgs = Ps0LD_dVgb * fs01_dPs0 ; fs02_dVbs = Ps0LD_dVxb * fs02_dPs0 + fs02_dVbs ; fs02_dVxb = Ps0LD_dVds * fs02_dPs0 ; fs02_dVgb = Ps0LD_dVgb * fs02_dPs0 ; /*-----------------------------------------------------------* * QbuLD and QiuLD *-----------------*/ QbuLD = here->HSM2_cnst0over * Xi0p12 ; QbuLD_dVxb = here->HSM2_cnst0over * Xi0p12_dVbs ; QbuLD_dVgb = here->HSM2_cnst0over * Xi0p12_dVgs ; T1 = 1.0 / ( fs02 + Xi0p12 ) ; QiuLD = here->HSM2_cnst0over * fs01 * T1 ; T2 = 1.0 / ( fs01 + epsm10 ) ; QiuLD_dVbs = QiuLD * ( fs01_dVbs * T2 - ( fs02_dVbs + Xi0p12_dVbs ) * T1 ) ; QiuLD_dVgs = QiuLD * ( fs01_dVgs * T2 - ( fs02_dVgb + Xi0p12_dVgs ) * T1 ) ; /*-----------------------------------------------------------* * Extrapolation: X_dVxbgmt = X_dVxbgmtcl * Vxbgmtcl_dVxbgmt *-----------------*/ QbuLD_dVxb *= Vxbgmtcl_dVxbgmt ; QiuLD_dVbs *= Vxbgmtcl_dVxbgmt ; /*-----------------------------------------------------------* * Total overlap charge *-----------------*/ QsuLD = QbuLD + QiuLD; QsuLD_dVxb = QbuLD_dVxb + QiuLD_dVbs; QsuLD_dVgb = QbuLD_dVgb + QiuLD_dVgs; } /* end of COQOVSM branches */ } /* end of Vgbgmt region blocks */ /* convert to source ref. */ QsuLD_dVbs = - (QsuLD_dVxb + QsuLD_dVgb) ; QsuLD_dVds = QsuLD_dVxb * flg_overd ; QsuLD_dVgs = QsuLD_dVgb ; QbuLD_dVbs = - (QbuLD_dVxb + QbuLD_dVgb) ; QbuLD_dVds = QbuLD_dVxb * flg_overd ; QbuLD_dVgs = QbuLD_dVgb ; /* inversion charge = total - depletion */ QiuLD = QsuLD - QbuLD ; QiuLD_dVbs = QsuLD_dVbs - QbuLD_dVbs ; QiuLD_dVds = QsuLD_dVds - QbuLD_dVds ; QiuLD_dVgs = QsuLD_dVgs - QbuLD_dVgs ; /* assign final outputs of Qover model */ /* note: Qovs and Qovd are exchanged in reverse mode */ T4 = here->HSM2_weff_nf * Lov ; if(flg_ovloops) { Qovs = T4 * QsuLD ; Qovs_dVbs = T4 * QsuLD_dVbs ; Qovs_dVds = T4 * QsuLD_dVds ; Qovs_dVgs = T4 * QsuLD_dVgs ; QisLD = T4 * QiuLD ; QisLD_dVbs = T4 * QiuLD_dVbs ; QisLD_dVds = T4 * QiuLD_dVds ; QisLD_dVgs = T4 * QiuLD_dVgs ; QbsLD = T4 * QbuLD ; QbsLD_dVbs = T4 * QbuLD_dVbs ; QbsLD_dVds = T4 * QbuLD_dVds ; QbsLD_dVgs = T4 * QbuLD_dVgs ; } if(flg_ovloopd) { Qovd = T4 * QsuLD ; Qovd_dVbs = T4 * QsuLD_dVbs ; Qovd_dVds = T4 * QsuLD_dVds ; Qovd_dVgs = T4 * QsuLD_dVgs ; QidLD = T4 * QiuLD ; QidLD_dVbs = T4 * QiuLD_dVbs ; QidLD_dVds = T4 * QiuLD_dVds ; QidLD_dVgs = T4 * QiuLD_dVgs ; QbdLD = T4 * QbuLD ; QbdLD_dVbs = T4 * QbuLD_dVbs ; QbdLD_dVds = T4 * QbuLD_dVds ; QbdLD_dVgs = T4 * QbuLD_dVgs ; } } /* end of lcover loop */ /* convert to the derivatives w.r.t. mode-dependent biases */ Qovs_dVds = ModeNML * Qovs_dVds - ModeRVS * ( Qovs_dVds + Qovs_dVgs + Qovs_dVbs ) ; QisLD_dVds = ModeNML * QisLD_dVds - ModeRVS * ( QisLD_dVds + QisLD_dVgs + QisLD_dVbs ) ; QbsLD_dVds = ModeNML * QbsLD_dVds - ModeRVS * ( QbsLD_dVds + QbsLD_dVgs + QbsLD_dVbs ) ; Qovd_dVds = ModeNML * Qovd_dVds - ModeRVS * ( Qovd_dVds + Qovd_dVgs + Qovd_dVbs ); QidLD_dVds = ModeNML * QidLD_dVds - ModeRVS * ( QidLD_dVds + QidLD_dVgs + QidLD_dVbs ) ; QbdLD_dVds = ModeNML * QbdLD_dVds - ModeRVS * ( QbdLD_dVds + QbdLD_dVgs + QbdLD_dVbs ) ; } /* end of if ( pParam->HSM2_nover == 0.0 ) */ /*-----------------------------------* * Additional constant capacitance model *-----------------*/ flg_overgiven = ( (int)ModeRVS * model->HSM2_cgso_Given + (int)ModeNML * model->HSM2_cgdo_Given ) ; if ( flg_overgiven ) { Cgdo = ModeRVS * pParam->HSM2_cgso + ModeNML * pParam->HSM2_cgdo ; Cgdo *= - here->HSM2_weff_nf ; Qgod += - Cgdo * (Vgs - Vds) ; Qgod_dVds += Cgdo ; Qgod_dVgs += -Cgdo ; } flg_overgiven = ( (int)ModeNML * model->HSM2_cgso_Given + (int)ModeRVS * model->HSM2_cgdo_Given ) ; if(flg_overgiven) { Cgso = ModeNML * pParam->HSM2_cgso + ModeRVS * pParam->HSM2_cgdo ; Cgso *= - here->HSM2_weff_nf ; Qgos += - Cgso * Vgs ; Qgos_dVgs += -Cgso ; } } else { /* else case of if ( model->HSM2_coovlp >= 1 ) */ if ( (here->HSM2_mode == HiSIM_NORMAL_MODE && !model->HSM2_cgdo_Given) || (here->HSM2_mode != HiSIM_NORMAL_MODE && !model->HSM2_cgso_Given) ) { Cgdo = - Cox0 * pParam->HSM2_lover * here->HSM2_weff_nf ; } else { Cgdo = ModeRVS * pParam->HSM2_cgso + ModeNML * pParam->HSM2_cgdo ; Cgdo *= - here->HSM2_weff_nf ; } Qgod = - Cgdo * (Vgs - Vds) ; Qgod_dVbs = 0.0 ; Qgod_dVds = Cgdo ; Qgod_dVgs = - Cgdo ; if ( (here->HSM2_mode == HiSIM_NORMAL_MODE && !model->HSM2_cgso_Given) || (here->HSM2_mode != HiSIM_NORMAL_MODE && !model->HSM2_cgdo_Given) ) { Cgso = - Cox0 * pParam->HSM2_lover * here->HSM2_weff_nf ; } else { Cgso = ModeNML * pParam->HSM2_cgso + ModeRVS * pParam->HSM2_cgdo ; Cgso *= - here->HSM2_weff_nf ; } Qgos = - Cgso * Vgs ; Qgos_dVbs = 0.0 ; Qgos_dVds = 0.0 ; Qgos_dVgs = - Cgso ; } /* end of if ( model->HSM2_coovlp >= 1 ) */ /*-------------------------------------------* * Gate/Bulk overlap charge: Qgbo *-----------------*/ Cgbo_loc = - model->HSM2_cgbo * here->HSM2_lgate ; Qgbo = - Cgbo_loc * (Vgs -Vbs) ; Qgbo_dVgs = - Cgbo_loc ; Qgbo_dVbs = Cgbo_loc ; Qgbo_dVds = 0.0 ; /*---------------------------------------------------* * Lateral-field-induced capacitance. *-----------------*/ if ( model->HSM2_coqy == 0 || model->HSM2_xqy == 0 ){ Qy = 0.0e0 ; Qy_dVds = 0.0e0 ; Qy_dVgs = 0.0e0 ; Qy_dVbs = 0.0e0 ; } else { Pslk = Ec * Leff + Ps0 ; Pslk_dVbs = Ec_dVbs * Leff + Ps0_dVbs; Pslk_dVds = Ec_dVds * Leff + Ps0_dVds; Pslk_dVgs = Ec_dVgs * Leff + Ps0_dVgs; Fn_SU2( T10, (Pslk + C_PSLK_SHIFT), (Psdl + C_PSLK_SHIFT), C_PSLK_DELTA, T1, T2 ); Pslk_dVbs = Pslk_dVbs * T1 + Psdl_dVbs * T2; Pslk_dVds = Pslk_dVds * T1 + Psdl_dVds * T2; Pslk_dVgs = Pslk_dVgs * T1 + Psdl_dVgs * T2; Pslk = T10 - C_PSLK_SHIFT; /* suppress Qy in accumulation region */ /* Aclm_eff = 1.0 - Pds / (eps_qy + Pds) * (1.0 - Aclm) ; Aclm_eff_dVds = eps_qy * Pds_dVds / ((eps_qy + Pds)*(eps_qy + Pds)) ; Aclm_eff_dVgs = eps_qy * Pds_dVgs / ((eps_qy + Pds)*(eps_qy + Pds)) ; Aclm_eff_dVbs = eps_qy * Pds_dVbs / ((eps_qy + Pds)*(eps_qy + Pds)) ; */ Aclm_eff = Aclm ; Aclm_eff_dVds = Aclm_eff_dVgs = Aclm_eff_dVbs = 0.0 ; T1 = Aclm_eff * ( Vds + Ps0 ) + ( 1.0e0 - Aclm_eff ) * Pslk ; T1_dVb = Aclm_eff * ( Ps0_dVbs ) + ( 1.0e0 - Aclm_eff ) * Pslk_dVbs + Aclm_eff_dVbs * ( Vds + Ps0 - Pslk ) ; T1_dVd = Aclm_eff * ( 1.0 + Ps0_dVds ) + ( 1.0e0 - Aclm_eff ) * Pslk_dVds + Aclm_eff_dVds * ( Vds + Ps0 - Pslk ) ; T1_dVg = Aclm_eff * ( Ps0_dVgs ) + ( 1.0e0 - Aclm_eff ) * Pslk_dVgs + Aclm_eff_dVgs * ( Vds + Ps0 - Pslk ) ; T10 = here->HSM2_wdpl ; T3 = T10 * 1.3 ; T2 = C_ESI * here->HSM2_weff_nf * T3 ; T7 = 1.0e-9 ; /* 1nm */ T0 = Fn_Max( model->HSM2_xqy , T7 ) ; T4 = T2 / T0 ; Qy = - ( Ps0 + Vds - T1 ) * T4 ; Qy_dVds = - ( Ps0_dVds + 1.0e0 - T1_dVd ) * T4 ; Qy_dVgs = - ( Ps0_dVgs - T1_dVg ) * T4 ; Qy_dVbs = - ( Ps0_dVbs - T1_dVb ) * T4 ; } if ( model->HSM2_xqy1 != 0.0 ){ Qy += here->HSM2_cqyb0 * Vbs ; Qy_dVbs += here->HSM2_cqyb0 ; } Qy = Qy * FMDVDS ; Qy_dVbs = Qy_dVbs * FMDVDS + Qy * FMDVDS_dVbs ; Qy_dVds = Qy_dVds * FMDVDS + Qy * FMDVDS_dVds ; Qy_dVgs = Qy_dVgs * FMDVDS + Qy * FMDVDS_dVgs ; /*---------------------------------------------------* * Fringing capacitance. *-----------------*/ Cf = here->HSM2_cfrng ; Qfd = Cf * ( Vgs - Vds ) ; Qfs = Cf * Vgs ; /*-----------------------------------------------------------* * End of PART-3. (label) *-----------------*/ /* end_of_part_3:*/ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * PART-4: Substrate-source/drain junction diode. *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /*-----------------------------------------------------------* * Cbsj, Cbdj: node-base S/D biases. *-----------------*/ T10 = model->HSM2_cvb * here->HSM2_jd_nvtm_inv ; T11 = model->HSM2_cvbk * here->HSM2_jd_nvtm_inv ; T9 = model->HSM2_cisb * here->HSM2_exptemp ; T0 = here->HSM2_isbd2 * T9 ; T2 = exp (- vbd_jct * T10 ); T2_dVb = - T2 * T10 ; T3 = exp (- vbd_jct * T11 ); T3_dVb = - T3 * T11 ; /* ibd */ if ( vbd_jct < here->HSM2_vbdt ) { TX = vbd_jct * here->HSM2_jd_nvtm_inv ; if ( TX < - EXP_THR ) { T1 = 0.0 ; T1_dVb = 0.0 ; } else { T1 = exp ( TX ) ; T1_dVb = T1 * here->HSM2_jd_nvtm_inv ; } Ibd = here->HSM2_isbd * (T1 - 1.0) + T0 * (T2 - 1.0) + pParam->HSM2_cisbk * (T3 - 1.0); Gbd = here->HSM2_isbd * T1_dVb + T0 * T2_dVb + pParam->HSM2_cisbk * T3_dVb ; } else { T1 = here->HSM2_jd_expcd ; T4 = here->HSM2_isbd * here->HSM2_jd_nvtm_inv * T1 ; Ibd = here->HSM2_isbd * (T1 - 1.0) + T4 * (vbd_jct - here->HSM2_vbdt) + T0 * (T2 - 1.0) + pParam->HSM2_cisbk * (T3 - 1.0) ; Gbd = T4 + T0 * T2_dVb + pParam->HSM2_cisbk * T3_dVb ; } T12 = model->HSM2_divx * here->HSM2_isbd2 ; Ibd += T12 * vbd_jct ; Gbd += T12 ; /* ibs */ T0 = here->HSM2_isbs2 * T9 ; TX = - vbs_jct * T10 ; if ( TX < - EXP_THR ) { T2 = 0.0 ; T2_dVb = 0.0 ; } else { T2 = exp ( TX ); T2_dVb = - T2 * T10 ; } TX = - vbs_jct * T11 ; if ( TX < - EXP_THR ) { T3 = 0.0 ; T3_dVb = 0.0 ; } else { T3 = exp ( TX ); T3_dVb = - T3 * T11 ; } if ( vbs_jct < here->HSM2_vbst ) { TX = vbs_jct * here->HSM2_jd_nvtm_inv ; if ( TX < - EXP_THR ) { T1 = 0.0 ; T1_dVb = 0.0 ; } else { T1 = exp ( TX ) ; T1_dVb = T1 * here->HSM2_jd_nvtm_inv ; } Ibs = here->HSM2_isbs * (T1 - 1.0) + T0 * (T2 - 1.0) + pParam->HSM2_cisbk * (T3 - 1.0); Gbs = here->HSM2_isbs * T1_dVb + T0 * T2_dVb + pParam->HSM2_cisbk * T3_dVb ; } else { T1 = here->HSM2_jd_expcs ; T4 = here->HSM2_isbs * here->HSM2_jd_nvtm_inv * T1 ; Ibs = here->HSM2_isbs * (T1 - 1.0) + T4 * (vbs_jct - here->HSM2_vbst) + T0 * (T2 - 1.0) + pParam->HSM2_cisbk * (T3 - 1.0) ; Gbs = T4 + T0 * T2_dVb + pParam->HSM2_cisbk * T3_dVb ; } T12 = model->HSM2_divx * here->HSM2_isbs2 ; Ibs += T12 * vbs_jct ; Gbs += T12 ; /*---------------------------------------------------* * Add Gjmin. *-----------------*/ Ibd += Gjmin * vbd_jct ; Ibs += Gjmin * vbs_jct ; Gbd += Gjmin ; Gbs += Gjmin ; /*-----------------------------------------------------------* * Charges and Capacitances. *-----------------*/ /* charge storage elements * bulk-drain and bulk-source depletion capacitances * czbd : zero bias drain junction capacitance * czbs : zero bias source junction capacitance * czbdsw:zero bias drain junction sidewall capacitance * czbssw:zero bias source junction sidewall capacitance */ /* add new parameters tcjbs : temperature dependence of czbs tcjbd : temperature dependence of czbd tcjbssw : temperature dependence of czbssw tcjbdsw : temperature dependence of czbdsw tcjbsswg : temperature dependence of czbsswg tcjbdswg : temperature dependence of czbdswg */ tcjbd=model->HSM2_tcjbd; tcjbs=model->HSM2_tcjbs; tcjbdsw=model->HSM2_tcjbdsw; tcjbssw=model->HSM2_tcjbssw; tcjbdswg=model->HSM2_tcjbdswg; tcjbsswg=model->HSM2_tcjbsswg; czbs = model->HSM2_cj * here->HSM2_as ; czbs = czbs * ( 1.0 + tcjbs * ( TTEMP - model->HSM2_ktnom )) ; czbd = model->HSM2_cj * here->HSM2_ad ; czbd = czbd * ( 1.0 + tcjbd * ( TTEMP - model->HSM2_ktnom )) ; /* Source Bulk Junction */ if (here->HSM2_ps > here->HSM2_weff_nf) { czbssw = model->HSM2_cjsw * ( here->HSM2_ps - here->HSM2_weff_nf ) ; czbssw = czbssw * ( 1.0 + tcjbssw * ( TTEMP - model->HSM2_ktnom )) ; czbsswg = model->HSM2_cjswg * here->HSM2_weff_nf ; czbsswg = czbsswg * ( 1.0 + tcjbsswg * ( TTEMP - model->HSM2_ktnom )) ; if (vbs_jct == 0.0) { Qbs = 0.0 ; Capbs = czbs + czbssw + czbsswg ; } else if (vbs_jct < 0.0) { if (czbs > 0.0) { arg = 1.0 - vbs_jct / model->HSM2_pb ; if (model->HSM2_mj == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSM2_mj ) ; Qbs = model->HSM2_pb * czbs * (1.0 - arg * sarg) / (1.0 - model->HSM2_mj) ; Capbs = czbs * sarg ; } else { Qbs = 0.0 ; Capbs = 0.0 ; } if (czbssw > 0.0) { arg = 1.0 - vbs_jct / model->HSM2_pbsw ; if (model->HSM2_mjsw == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSM2_mjsw ) ; Qbs += model->HSM2_pbsw * czbssw * (1.0 - arg * sarg) / (1.0 - model->HSM2_mjsw) ; Capbs += czbssw * sarg ; } if (czbsswg > 0.0) { arg = 1.0 - vbs_jct / model->HSM2_pbswg ; if (model->HSM2_mjswg == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSM2_mjswg ) ; Qbs += model->HSM2_pbswg * czbsswg * (1.0 - arg * sarg) / (1.0 - model->HSM2_mjswg) ; Capbs += czbsswg * sarg ; } } else { T1 = czbs + czbssw + czbsswg ; T2 = czbs * model->HSM2_mj / model->HSM2_pb + czbssw * model->HSM2_mjsw / model->HSM2_pbsw + czbsswg * model->HSM2_mjswg / model->HSM2_pbswg ; Qbs = vbs_jct * (T1 + vbs_jct * 0.5 * T2) ; Capbs = T1 + vbs_jct * T2 ; } } else { czbsswg = model->HSM2_cjswg * here->HSM2_ps ; czbsswg = czbsswg * ( 1.0 + tcjbsswg * ( TTEMP - model->HSM2_ktnom )) ; if (vbs_jct == 0.0) { Qbs = 0.0 ; Capbs = czbs + czbsswg ; } else if (vbs_jct < 0.0) { if (czbs > 0.0) { arg = 1.0 - vbs_jct / model->HSM2_pb ; if (model->HSM2_mj == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSM2_mj ) ; Qbs = model->HSM2_pb * czbs * (1.0 - arg * sarg) / (1.0 - model->HSM2_mj) ; Capbs = czbs * sarg ; } else { Qbs = 0.0 ; Capbs = 0.0 ; } if (czbsswg > 0.0) { arg = 1.0 - vbs_jct / model->HSM2_pbswg ; if (model->HSM2_mjswg == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSM2_mjswg ) ; Qbs += model->HSM2_pbswg * czbsswg * (1.0 - arg * sarg) / (1.0 - model->HSM2_mjswg) ; Capbs += czbsswg * sarg ; } } else { T1 = czbs + czbsswg ; T2 = czbs * model->HSM2_mj / model->HSM2_pb + czbsswg * model->HSM2_mjswg / model->HSM2_pbswg ; Qbs = vbs_jct * (T1 + vbs_jct * 0.5 * T2) ; Capbs = T1 + vbs_jct * T2 ; } } /* Drain Bulk Junction */ if (here->HSM2_pd > here->HSM2_weff_nf) { czbdsw = model->HSM2_cjsw * ( here->HSM2_pd - here->HSM2_weff_nf ) ; czbdsw = czbdsw * ( 1.0 + tcjbdsw * ( TTEMP - model->HSM2_ktnom )) ; czbdswg = model->HSM2_cjswg * here->HSM2_weff_nf ; czbdswg = czbdswg * ( 1.0 + tcjbdswg * ( TTEMP - model->HSM2_ktnom )) ; if (vbd_jct == 0.0) { Qbd = 0.0 ; Capbd = czbd + czbdsw + czbdswg ; } else if (vbd_jct < 0.0) { if (czbd > 0.0) { arg = 1.0 - vbd_jct / model->HSM2_pb ; if (model->HSM2_mj == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSM2_mj ) ; Qbd = model->HSM2_pb * czbd * (1.0 - arg * sarg) / (1.0 - model->HSM2_mj) ; Capbd = czbd * sarg ; } else { Qbd = 0.0 ; Capbd = 0.0 ; } if (czbdsw > 0.0) { arg = 1.0 - vbd_jct / model->HSM2_pbsw ; if (model->HSM2_mjsw == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSM2_mjsw ) ; Qbd += model->HSM2_pbsw * czbdsw * (1.0 - arg * sarg) / (1.0 - model->HSM2_mjsw) ; Capbd += czbdsw * sarg ; } if (czbdswg > 0.0) { arg = 1.0 - vbd_jct / model->HSM2_pbswg ; if (model->HSM2_mjswg == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSM2_mjswg ) ; Qbd += model->HSM2_pbswg * czbdswg * (1.0 - arg * sarg) / (1.0 - model->HSM2_mjswg) ; Capbd += czbdswg * sarg ; } } else { T1 = czbd + czbdsw + czbdswg ; T2 = czbd * model->HSM2_mj / model->HSM2_pb + czbdsw * model->HSM2_mjsw / model->HSM2_pbsw + czbdswg * model->HSM2_mjswg / model->HSM2_pbswg ; Qbd = vbd_jct * (T1 + vbd_jct * 0.5 * T2) ; Capbd = T1 + vbd_jct * T2 ; } } else { czbdswg = model->HSM2_cjswg * here->HSM2_pd ; czbdswg = czbdswg * ( 1.0 + tcjbdswg * ( TTEMP - model->HSM2_ktnom )) ; if (vbd_jct == 0.0) { Qbd = 0.0 ; Capbd = czbd + czbdswg ; } else if (vbd_jct < 0.0) { if (czbd > 0.0) { arg = 1.0 - vbd_jct / model->HSM2_pb ; if (model->HSM2_mj == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSM2_mj ) ; Qbd = model->HSM2_pb * czbd * (1.0 - arg * sarg) / (1.0 - model->HSM2_mj) ; Capbd = czbd * sarg ; } else { Qbd = 0.0 ; Capbd = 0.0 ; } if (czbdswg > 0.0) { arg = 1.0 - vbd_jct / model->HSM2_pbswg ; if (model->HSM2_mjswg == 0.5) sarg = 1.0 / sqrt(arg) ; else sarg = Fn_Pow( arg , -model->HSM2_mjswg ) ; Qbd += model->HSM2_pbswg * czbdswg * (1.0 - arg * sarg) / (1.0 - model->HSM2_mjswg) ; Capbd += czbdswg * sarg ; } } else { T1 = czbd + czbdswg ; T2 = czbd * model->HSM2_mj / model->HSM2_pb + czbdswg * model->HSM2_mjswg / model->HSM2_pbswg ; Qbd = vbd_jct * (T1 + vbd_jct * 0.5 * T2) ; Capbd = T1 + vbd_jct * T2 ; } } /*-----------------------------------------------------------* * End of PART-4. (label) *-----------------*/ /* end_of_part_4:*/ /*-----------------------------------------------------------* * PART-5: NQS. (label) *-----------------*/ if (flg_nqs) { if(ckt->CKTmode & MODETRAN){ if( ckt->CKTmode & MODEINITTRAN ){ Qi_nqs = Qi ; Qi_dVgs_nqs = Qi_dVgs ; Qi_dVds_nqs = Qi_dVds ; Qi_dVbs_nqs = Qi_dVbs ; Qb_nqs = Qb ; Qb_dVgs_nqs = Qb_dVgs ; Qb_dVds_nqs = Qb_dVds ; Qb_dVbs_nqs = Qb_dVbs ; } else { /* tau for inversion charge */ if (flg_noqi == 0) { T12 = model->HSM2_dly1; T10 = model->HSM2_dly2; T3 = Lch ; T1 = T10 * T12 * T3 * T3 ; T2 = Mu * VgVt * T12 + T10 * T3 * T3 + small ; tau = T1 / T2 ; T1_dVg = T10 * T12 * 2.0 * T3 * Lch_dVgs ; T1_dVd = T10 * T12 * 2.0 * T3 * Lch_dVds ; T1_dVb = T10 * T12 * 2.0 * T3 * Lch_dVbs ; T2_dVg = T12 * Mu_dVgs * VgVt + T12 * Mu * VgVt_dVgs + T10 * 2.0 * T3 * Lch_dVgs ; T2_dVd = T12 * Mu_dVds * VgVt + T12 * Mu * VgVt_dVds + T10 * 2.0 * T3 * Lch_dVds ; T2_dVb = T12 * Mu_dVbs * VgVt + T12 * Mu * VgVt_dVbs + T10 * 2.0 * T3 * Lch_dVbs ; T4 = 1.0 / ( T2 * T2 ) ; tau_dVgs = ( T2 * T1_dVg - T1 * T2_dVg ) * T4 ; tau_dVds = ( T2 * T1_dVd - T1 * T2_dVd ) * T4 ; tau_dVbs = ( T2 * T1_dVb - T1 * T2_dVb ) * T4 ; } else { tau = model->HSM2_dly1 + small ; tau_dVgs = tau_dVds = tau_dVbs = 0.0 ; } T1 = ckt->CKTdelta ; /* Calculation of Qi */ Qi_prev = *(ckt->CKTstate1 + here->HSM2qi_nqs) ; T2 = T1 + tau ; T0 = Qi - Qi_prev ; Qi_nqs = Qi_prev + T1 / T2 * T0; T3 = T1 / T2 ; T4 = T0 / T2 ; Qi_dVgs_nqs = T3 * (Qi_dVgs - T4 * tau_dVgs); Qi_dVds_nqs = T3 * (Qi_dVds - T4 * tau_dVds); Qi_dVbs_nqs = T3 * (Qi_dVbs - T4 * tau_dVbs); /* tau for bulk charge */ T2 = modelMKS->HSM2_dly3 ; taub = T2 * Cox ; taub_dVgs = T2 * Cox_dVg ; taub_dVds = T2 * Cox_dVd ; taub_dVbs = T2 * Cox_dVb ; /* Calculation of Qb */ Qb_prev = *(ckt->CKTstate1 + here->HSM2qb_nqs) ; T2 = T1 + taub ; T0 = Qb - Qb_prev ; Qb_nqs = Qb_prev + T1 / T2 * T0 ; T3 = T1 / T2 ; T4 = T0 / T2 ; Qb_dVgs_nqs = T3 * (Qb_dVgs - T4 * taub_dVgs) ; Qb_dVds_nqs = T3 * (Qb_dVds - T4 * taub_dVds) ; Qb_dVbs_nqs = T3 * (Qb_dVbs - T4 * taub_dVbs) ; } } else { /* !(CKT_mode & MODETRAN) */ Qi_nqs = Qi ; Qi_dVgs_nqs = Qi_dVgs ; Qi_dVds_nqs = Qi_dVds ; Qi_dVbs_nqs = Qi_dVbs ; Qb_nqs = Qb ; Qb_dVgs_nqs = Qb_dVgs ; Qb_dVds_nqs = Qb_dVds ; Qb_dVbs_nqs = Qb_dVbs ; } } if ( flg_nqs && (ckt->CKTmode & (MODEDCOP | MODEINITSMSIG)) ) { /* ACNQS */ if (flg_noqi == 0) { T10 = model->HSM2_dly1 ; T11 = model->HSM2_dly2 ; T12 = Lch ; T1 = T10 * T11 * T12 * T12 ; T2 = Mu * VgVt * T10 + T11 * T12 * T12 + small ; tau = T1 / T2 ; T1_dVg = T10 * T11 * 2.0 * T12 * Lch_dVgs ; T1_dVd = T10 * T11 * 2.0 * T12 * Lch_dVds ; T1_dVb = T10 * T11 * 2.0 * T12 * Lch_dVbs ; T2_dVg = T10 * Mu_dVgs * VgVt + T10 * Mu * VgVt_dVgs + T11 * 2.0 * T12 * Lch_dVgs ; T2_dVd = T10 * Mu_dVds * VgVt + T10 * Mu * VgVt_dVds + T11 * 2.0 * T12 * Lch_dVds ; T2_dVb = T10 * Mu_dVbs * VgVt + T10 * Mu * VgVt_dVbs + T11 * 2.0 * T12 * Lch_dVbs ; T3 = 1.0 / T2 ; tau_dVgs = (T1_dVg - tau * T2_dVg) * T3 ; tau_dVds = (T1_dVd - tau * T2_dVd) * T3 ; tau_dVbs = (T1_dVb - tau * T2_dVb) * T3 ; } else { tau = model->HSM2_dly1 + small ; tau_dVgs = tau_dVds = tau_dVbs = 0.0 ; } T1 = modelMKS->HSM2_dly3 ; taub = T1 * Cox ; taub_dVgs = T1 * Cox_dVg ; taub_dVds = T1 * Cox_dVd ; taub_dVbs = T1 * Cox_dVb ; } /*-----------------------------------------------------------* * End of PART-5. (label) *-----------------*/ /* end_of_part_5: */ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * PART-6: Noise Calculation. *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /*-----------------------------------------------------------* * 1/f noise. *-----------------*/ if ( model->HSM2_coflick != 0 && !flg_noqi ) { NFalp = pParam->HSM2_nfalp ; NFtrp = pParam->HSM2_nftrp ; Cit = modelMKS->HSM2_cit ; T1 = Qn0 / C_QE ; T2 = ( Cox + Qn0 / ( Ps0 - Vbs ) + Cit ) * beta_inv / C_QE ; T3 = -2.0E0 * Qi_noi / C_QE / Lch / here->HSM2_weff_nf - T1 ; if ( T3 != T1 ) { T4 = 1.0E0 / ( T1 + T2 ) / ( T3 + T2 ) + 2.0E0 * NFalp * Ey * Mu / ( T3 - T1 ) * log( ( T3 + T2 ) / ( T1 + T2 ) ) + NFalp * Ey * Mu * NFalp * Ey * Mu ; } else { T4 = 1.0 / ( T1 + T2 ) / ( T3 + T2 ) + 2.0 * NFalp * Ey * Mu / ( T1 + T2 ) + NFalp * Ey * Mu * NFalp * Ey * Mu; } Nflic = Ids * Ids * NFtrp / ( Lch * beta * here->HSM2_weff_nf ) * T4 ; } else { Nflic = 0.0 ; } /*-----------------------------------------------------------* * thermal noise. *-----------------*/ if ( model->HSM2_cothrml != 0 && !flg_noqi ) { Eyd = ( Psdl - Ps0 ) / Lch ; T12 = Muun * Eyd / C_vmax ; /* note: model->HSM2_bb = 2 (electron) ;1 (hole) */ if ( 1.0e0 - epsm10 <= model->HSM2_bb && model->HSM2_bb <= 1.0e0 + epsm10 ) { T7 = 1.0e0 ; } else if ( 2.0e0 - epsm10 <= model->HSM2_bb && model->HSM2_bb <= 2.0e0 + epsm10 ) { T7 = T12 ; } else { T7 = Fn_Pow( Eyd, model->HSM2_bb - 1.0e0 ) ; } T8 = T12 * T7 ; T9 = 1.0e0 + T8 ; T10 = Fn_Pow( T9, ( - 1.0e0 / model->HSM2_bb - 1.0e0 ) ) ; T11 = T9 * T10 ; Mud_hoso = Muun * T11 ; Mu_Ave = ( Mu + Mud_hoso ) / 2.0 ; /* Sid_h = GAMMA * 4.0 * C_KB * model->HSM2_temp * gds0_h2; */ T0 = Alpha * Alpha ; Nthrml = here->HSM2_weff_nf * Cox * VgVt * Mu * ( ( 1e0 + 3e0 * Alpha + 6e0 * T0 ) * Mud_hoso * Mud_hoso + ( 3e0 + 4e0 * Alpha + 3e0 * T0 ) * Mud_hoso * Mu + ( 6e0 + 3e0 * Alpha + T0 ) * Mu * Mu ) / ( 15e0 * Lch * ( 1e0 + Alpha ) * Mu_Ave * Mu_Ave ) ; } else { Nthrml = 0e0 ; } /*----------------------------------------------------------* * induced gate noise. ( Part 2/3 ) *----------------------*/ if ( model->HSM2_coign != 0 && model->HSM2_cothrml != 0 && flg_ign == 1 && !flg_noqi ) { sqrtkusaiL = sqrt( kusaiL ) ; T2 = VgVt + sqrtkusaiL ; T3 = kusai00 * kusai00 ; T4 = kusaiL * kusaiL ; T5 = 42.0e0 * kusai00 * kusaiL ; T5 += 4.0e0 * ( T3 + T4 ) ; T5 += 20.0e0 * sqrtkusaiL * VgVt * ( kusai00 + kusaiL ) ; T10 = T2 * T2 ; T10 *= T10 ; kusai_ig = T5 / ( T10 * T2 ) ; /* Induced Gate Noise parameter */ gds0_ign = here->HSM2_weff_nf / Lch * Mu * Cox ; gds0_h2 = gds0_ign * VgVt ; GAMMA = Nthrml / gds0_h2 ; T7 = kusai00 + 4.0e0 * VgVt * sqrtkusaiL + kusaiL ; /* cross-correlation coefficient (= Sigid/sqrt(Sig*Sid) ) */ crl_f = c_sqrt_15 * kusai00L * T7 / ( 6.0e0 * T2 * sqrt( GAMMA * T2 * VgVt * T5 ) ) ; } /*-----------------------------------------------------------* * End of PART-6. (label) *-----------------*/ /* end_of_part_6: */ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * PART-7: Evaluation of outputs. *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /*-----------------------------------------------------------* * Implicit quantities related to Alpha. *-----------------*/ /* note: T1 = 1 + Delta */ if ( flg_noqi == 0 && VgVt > VgVt_small ) { Delta = fac1 * beta / ( 2 * Xi0p12 ) ; Pslsat = VgVt / ( 1.0 + Delta ) + Ps0 ; } else { Pslsat = 0.0 ; } Vdsat = Pslsat - Pb2 ; if ( Vdsat < 0.0 ) { Vdsat = 0.0 ; } /*-----------------------------------------------------------* * Evaluate the derivatives w.r.t. external biases. * - All derivatives that influence outputs must be modified here. *-----------------*/ /*---------------------------------------------------* * Case ignoring Rs/Rd. *-----------------*/ if ( flg_rsrd != 1 || Ids < 0.0 ) { Ids_dVbse = Ids_dVbs ; Ids_dVdse = Ids_dVds ; Ids_dVgse = Ids_dVgs ; Qb_dVbse = Qb_dVbs ; Qb_dVdse = Qb_dVds ; Qb_dVgse = Qb_dVgs ; Qi_dVbse = Qi_dVbs ; Qi_dVdse = Qi_dVds ; Qi_dVgse = Qi_dVgs ; Qd_dVbse = Qd_dVbs ; Qd_dVdse = Qd_dVds ; Qd_dVgse = Qd_dVgs ; Isub_dVbse = Isub_dVbs ; Isub_dVdse = Isub_dVds ; Isub_dVgse = Isub_dVgs ; IdsIBPC_dVbse = IdsIBPC_dVbs ; IdsIBPC_dVdse = IdsIBPC_dVds ; IdsIBPC_dVgse = IdsIBPC_dVgs ; Igate_dVbse = Igate_dVbs ; Igate_dVdse = Igate_dVds ; Igate_dVgse = Igate_dVgs ; Igd_dVbse = Igd_dVbs ; Igd_dVdse = Igd_dVds ; Igd_dVgse = Igd_dVgs ; Igs_dVbse = Igs_dVbs ; Igs_dVdse = Igs_dVds ; Igs_dVgse = Igs_dVgs ; Igb_dVbse = Igb_dVbs ; Igb_dVdse = Igb_dVds ; Igb_dVgse = Igb_dVgs ; Igidl_dVbse = Igidl_dVbs ; Igidl_dVdse = Igidl_dVds ; Igidl_dVgse = Igidl_dVgs ; Igisl_dVbse = Igisl_dVbs ; Igisl_dVdse = Igisl_dVds ; Igisl_dVgse = Igisl_dVgs ; Qgos_dVbse = Qgos_dVbs ; Qgos_dVdse = Qgos_dVds ; Qgos_dVgse = Qgos_dVgs ; Qgod_dVbse = Qgod_dVbs ; Qgod_dVdse = Qgod_dVds ; Qgod_dVgse = Qgod_dVgs ; Qgbo_dVbse = Qgbo_dVbs ; Qgbo_dVdse = Qgbo_dVds ; Qgbo_dVgse = Qgbo_dVgs ; Qovd_dVbse = Qovd_dVbs ; Qovd_dVdse = Qovd_dVds ; Qovd_dVgse = Qovd_dVgs ; QidLD_dVbse = QidLD_dVbs ; QidLD_dVdse = QidLD_dVds ; QidLD_dVgse = QidLD_dVgs ; QbdLD_dVbse = QbdLD_dVbs ; QbdLD_dVdse = QbdLD_dVds ; QbdLD_dVgse = QbdLD_dVgs ; Qovs_dVbse = Qovs_dVbs ; Qovs_dVdse = Qovs_dVds ; Qovs_dVgse = Qovs_dVgs ; QisLD_dVbse = QisLD_dVbs ; QisLD_dVdse = QisLD_dVds ; QisLD_dVgse = QisLD_dVgs ; QbsLD_dVbse = QbsLD_dVbs ; QbsLD_dVdse = QbsLD_dVds ; QbsLD_dVgse = QbsLD_dVgs ; Qy_dVbse = Qy_dVbs ; Qy_dVdse = Qy_dVds ; Qy_dVgse = Qy_dVgs ; Qdrat_dVbse = Qdrat_dVbs; Qdrat_dVdse = Qdrat_dVds; Qdrat_dVgse = Qdrat_dVgs; GLPART1_dVbse = GLPART1_dVbs ;GLPART1_dVdse = GLPART1_dVds ;GLPART1_dVgse = GLPART1_dVgs ; if (flg_nqs) { /* NQS */ Qi_dVgse_nqs = Qi_dVgs_nqs; Qi_dVdse_nqs = Qi_dVds_nqs; Qi_dVbse_nqs = Qi_dVbs_nqs; Qb_dVgse_nqs = Qb_dVgs_nqs; Qb_dVdse_nqs = Qb_dVds_nqs; Qb_dVbse_nqs = Qb_dVbs_nqs; } if (flg_nqs && (ckt->CKTmode & (MODEDCOP | MODEINITSMSIG))) { /* ACNQS */ tau_dVgse = tau_dVgs ; tau_dVdse = tau_dVds ; tau_dVbse = tau_dVbs ; taub_dVgse = taub_dVgs ; taub_dVdse = taub_dVds ; taub_dVbse = taub_dVbs ; } } else { /*---------------------------------------------------* * Case Rs>0 or Rd>0 *-----------------*/ /*-------------------------------------------* * Conductances w.r.t. confined biases. *-----------------*/ Ids_dVbse = Ids_dVbs * DJI ; Ids_dVdse = Ids_dVds * DJI ; Ids_dVgse = Ids_dVgs * DJI ; /*-------------------------------------------* * Derivatives of internal biases w.r.t. external biases. *-----------------*/ Vbs_dVbse = ( 1.0 - Rs * Ids_dVbse ) ; Vbs_dVdse = - Rs * Ids_dVdse ; Vbs_dVgse = - Rs * Ids_dVgse ; Vds_dVbse = - ( Rs + Rd ) * Ids_dVbse ; Vds_dVdse = ( 1.0 - ( Rs + Rd ) * Ids_dVdse ) ; Vds_dVgse = - ( Rs + Rd ) * Ids_dVgse ; Vgs_dVbse = - Rs * Ids_dVbse ; Vgs_dVdse = - Rs * Ids_dVdse ; Vgs_dVgse = ( 1.0 - Rs * Ids_dVgse ) ; /*-------------------------------------------* * Derivatives of charges. *-----------------*/ Qb_dVbse = Qb_dVbs * Vbs_dVbse + Qb_dVds * Vds_dVbse + Qb_dVgs * Vgs_dVbse ; Qb_dVdse = Qb_dVbs * Vbs_dVdse + Qb_dVds * Vds_dVdse + Qb_dVgs * Vgs_dVdse ; Qb_dVgse = Qb_dVbs * Vbs_dVgse + Qb_dVds * Vds_dVgse + Qb_dVgs * Vgs_dVgse ; Qi_dVbse = Qi_dVbs * Vbs_dVbse + Qi_dVds * Vds_dVbse + Qi_dVgs * Vgs_dVbse ; Qi_dVdse = Qi_dVbs * Vbs_dVdse + Qi_dVds * Vds_dVdse + Qi_dVgs * Vgs_dVdse ; Qi_dVgse = Qi_dVbs * Vbs_dVgse + Qi_dVds * Vds_dVgse + Qi_dVgs * Vgs_dVgse ; Qd_dVbse = Qd_dVbs * Vbs_dVbse + Qd_dVds * Vds_dVbse + Qd_dVgs * Vgs_dVbse ; Qd_dVdse = Qd_dVbs * Vbs_dVdse + Qd_dVds * Vds_dVdse + Qd_dVgs * Vgs_dVdse ; Qd_dVgse = Qd_dVbs * Vbs_dVgse + Qd_dVds * Vds_dVgse + Qd_dVgs * Vgs_dVgse ; /*-------------------------------------------* * Substrate/gate/leak conductances. *-----------------*/ Isub_dVbse = Isub_dVbs * Vbs_dVbse + Isub_dVds * Vds_dVbse + Isub_dVgs * Vgs_dVbse ; Isub_dVdse = Isub_dVbs * Vbs_dVdse + Isub_dVds * Vds_dVdse + Isub_dVgs * Vgs_dVdse ; Isub_dVgse = Isub_dVbs * Vbs_dVgse + Isub_dVds * Vds_dVgse + Isub_dVgs * Vgs_dVgse ; IdsIBPC_dVbse = IdsIBPC_dVbs * Vbs_dVbse + IdsIBPC_dVds * Vds_dVbse + IdsIBPC_dVgs * Vgs_dVbse ; IdsIBPC_dVdse = IdsIBPC_dVbs * Vbs_dVdse + IdsIBPC_dVds * Vds_dVdse + IdsIBPC_dVgs * Vgs_dVdse ; IdsIBPC_dVgse = IdsIBPC_dVbs * Vbs_dVgse + IdsIBPC_dVds * Vds_dVgse + IdsIBPC_dVgs * Vgs_dVgse ; Igate_dVbse = Igate_dVbs * Vbs_dVbse + Igate_dVds * Vds_dVbse + Igate_dVgs * Vgs_dVbse ; Igate_dVdse = Igate_dVbs * Vbs_dVdse + Igate_dVds * Vds_dVdse + Igate_dVgs * Vgs_dVdse ; Igate_dVgse = Igate_dVbs * Vbs_dVgse + Igate_dVds * Vds_dVgse + Igate_dVgs * Vgs_dVgse ; Igb_dVbse = Igb_dVbs * Vbs_dVbse + Igb_dVds * Vds_dVbse + Igb_dVgs * Vgs_dVbse ; Igb_dVdse = Igb_dVbs * Vbs_dVdse + Igb_dVds * Vds_dVdse + Igb_dVgs * Vgs_dVdse ; Igb_dVgse = Igb_dVbs * Vbs_dVgse + Igb_dVds * Vds_dVgse + Igb_dVgs * Vgs_dVgse ; Igd_dVbse = Igd_dVbs * Vbs_dVbse + Igd_dVds * Vds_dVbse + Igd_dVgs * Vgs_dVbse ; Igd_dVdse = Igd_dVbs * Vbs_dVdse + Igd_dVds * Vds_dVdse + Igd_dVgs * Vgs_dVdse ; Igd_dVgse = Igd_dVbs * Vbs_dVgse + Igd_dVds * Vds_dVgse + Igd_dVgs * Vgs_dVgse ; Igs_dVbse = Igs_dVbs * Vbs_dVbse + Igs_dVds * Vds_dVbse + Igs_dVgs * Vgs_dVbse ; Igs_dVdse = Igs_dVbs * Vbs_dVdse + Igs_dVds * Vds_dVdse + Igs_dVgs * Vgs_dVdse ; Igs_dVgse = Igs_dVbs * Vbs_dVgse + Igs_dVds * Vds_dVgse + Igs_dVgs * Vgs_dVgse ; Igidl_dVbse = Igidl_dVbs * Vbs_dVbse + Igidl_dVds * Vds_dVbse + Igidl_dVgs * Vgs_dVbse ; Igidl_dVdse = Igidl_dVbs * Vbs_dVdse + Igidl_dVds * Vds_dVdse + Igidl_dVgs * Vgs_dVdse ; Igidl_dVgse = Igidl_dVbs * Vbs_dVgse + Igidl_dVds * Vds_dVgse + Igidl_dVgs * Vgs_dVgse ; Igisl_dVbse = Igisl_dVbs * Vbs_dVbse + Igisl_dVds * Vds_dVbse + Igisl_dVgs * Vgs_dVbse ; Igisl_dVdse = Igisl_dVbs * Vbs_dVdse + Igisl_dVds * Vds_dVdse + Igisl_dVgs * Vgs_dVdse ; Igisl_dVgse = Igisl_dVbs * Vbs_dVgse + Igisl_dVds * Vds_dVgse + Igisl_dVgs * Vgs_dVgse ; GLPART1_dVbse = GLPART1_dVbs * Vbs_dVbse + GLPART1_dVds * Vds_dVbse + GLPART1_dVgs * Vgs_dVbse ; GLPART1_dVdse = GLPART1_dVbs * Vbs_dVdse + GLPART1_dVds * Vds_dVdse + GLPART1_dVgs * Vgs_dVdse ; GLPART1_dVgse = GLPART1_dVbs * Vbs_dVgse + GLPART1_dVds * Vds_dVgse + GLPART1_dVgs * Vgs_dVgse ; /*---------------------------------------------------* * Derivatives of overlap charges. *-----------------*/ Qgos_dVbse = Qgos_dVbs * Vbs_dVbse + Qgos_dVds * Vds_dVbse + Qgos_dVgs * Vgs_dVbse ; Qgos_dVdse = Qgos_dVbs * Vbs_dVdse + Qgos_dVds * Vds_dVdse + Qgos_dVgs * Vgs_dVdse ; Qgos_dVgse = Qgos_dVbs * Vbs_dVgse + Qgos_dVds * Vds_dVgse + Qgos_dVgs * Vgs_dVgse ; Qgod_dVbse = Qgod_dVbs * Vbs_dVbse + Qgod_dVds * Vds_dVbse + Qgod_dVgs * Vgs_dVbse ; Qgod_dVdse = Qgod_dVbs * Vbs_dVdse + Qgod_dVds * Vds_dVdse + Qgod_dVgs * Vgs_dVdse ; Qgod_dVgse = Qgod_dVbs * Vbs_dVgse + Qgod_dVds * Vds_dVgse + Qgod_dVgs * Vgs_dVgse ; Qgbo_dVbse = Qgbo_dVbs * Vbs_dVbse + Qgbo_dVds * Vds_dVbse + Qgbo_dVgs * Vgs_dVbse ; Qgbo_dVdse = Qgbo_dVbs * Vbs_dVdse + Qgbo_dVds * Vds_dVdse + Qgbo_dVgs * Vgs_dVdse ; Qgbo_dVgse = Qgbo_dVbs * Vbs_dVgse + Qgbo_dVds * Vds_dVgse + Qgbo_dVgs * Vgs_dVgse ; Qovd_dVbse = Qovd_dVbs * Vbs_dVbse + Qovd_dVds * Vds_dVbse + Qovd_dVgs * Vgs_dVbse ; Qovd_dVdse = Qovd_dVbs * Vbs_dVdse + Qovd_dVds * Vds_dVdse + Qovd_dVgs * Vgs_dVdse ; Qovd_dVgse = Qovd_dVbs * Vbs_dVgse + Qovd_dVds * Vds_dVgse + Qovd_dVgs * Vgs_dVgse ; QidLD_dVbse = QidLD_dVbs * Vbs_dVbse + QidLD_dVds * Vds_dVbse + QidLD_dVgs * Vgs_dVbse ; QidLD_dVdse = QidLD_dVbs * Vbs_dVdse + QidLD_dVds * Vds_dVdse + QidLD_dVgs * Vgs_dVdse ; QidLD_dVgse = QidLD_dVbs * Vbs_dVgse + QidLD_dVds * Vds_dVgse + QidLD_dVgs * Vgs_dVgse ; QbdLD_dVbse = QbdLD_dVbs * Vbs_dVbse + QbdLD_dVds * Vds_dVbse + QbdLD_dVgs * Vgs_dVbse ; QbdLD_dVdse = QbdLD_dVbs * Vbs_dVdse + QbdLD_dVds * Vds_dVdse + QbdLD_dVgs * Vgs_dVdse ; QbdLD_dVgse = QbdLD_dVbs * Vbs_dVgse + QbdLD_dVds * Vds_dVgse + QbdLD_dVgs * Vgs_dVgse ; Qovs_dVbse = Qovs_dVbs * Vbs_dVbse + Qovs_dVds * Vds_dVbse + Qovs_dVgs * Vgs_dVbse ; Qovs_dVdse = Qovs_dVbs * Vbs_dVdse + Qovs_dVds * Vds_dVdse + Qovs_dVgs * Vgs_dVdse ; Qovs_dVgse = Qovs_dVbs * Vbs_dVgse + Qovs_dVds * Vds_dVgse + Qovs_dVgs * Vgs_dVgse ; QisLD_dVbse = QisLD_dVbs * Vbs_dVbse + QisLD_dVds * Vds_dVbse + QisLD_dVgs * Vgs_dVbse ; QisLD_dVdse = QisLD_dVbs * Vbs_dVdse + QisLD_dVds * Vds_dVdse + QisLD_dVgs * Vgs_dVdse ; QisLD_dVgse = QisLD_dVbs * Vbs_dVgse + QisLD_dVds * Vds_dVgse + QisLD_dVgs * Vgs_dVgse ; QbsLD_dVbse = QbsLD_dVbs * Vbs_dVbse + QbsLD_dVds * Vds_dVbse + QbsLD_dVgs * Vgs_dVbse ; QbsLD_dVdse = QbsLD_dVbs * Vbs_dVdse + QbsLD_dVds * Vds_dVdse + QbsLD_dVgs * Vgs_dVdse ; QbsLD_dVgse = QbsLD_dVbs * Vbs_dVgse + QbsLD_dVds * Vds_dVgse + QbsLD_dVgs * Vgs_dVgse ; Qy_dVbse = Qy_dVbs * Vbs_dVbse + Qy_dVds * Vds_dVbse + Qy_dVgs * Vgs_dVbse ; Qy_dVdse = Qy_dVbs * Vbs_dVdse + Qy_dVds * Vds_dVdse + Qy_dVgs * Vgs_dVdse ; Qy_dVgse = Qy_dVbs * Vbs_dVgse + Qy_dVds * Vds_dVgse + Qy_dVgs * Vgs_dVgse ; Qdrat_dVbse = Qdrat_dVbs * Vbs_dVbse + Qdrat_dVds * Vds_dVbse + Qdrat_dVgs * Vgs_dVbse ; Qdrat_dVdse = Qdrat_dVbs * Vbs_dVdse + Qdrat_dVds * Vds_dVdse + Qdrat_dVgs * Vgs_dVdse ; Qdrat_dVgse = Qdrat_dVbs * Vbs_dVgse + Qdrat_dVds * Vds_dVgse + Qdrat_dVgs * Vgs_dVgse ; if (flg_nqs) { /* NQS */ Qi_dVgse_nqs = Qi_dVgs_nqs * Vgs_dVgse + Qi_dVds_nqs * Vds_dVgse + Qi_dVbs_nqs * Vbs_dVgse; Qi_dVdse_nqs = Qi_dVgs_nqs * Vgs_dVdse + Qi_dVds_nqs * Vds_dVdse + Qi_dVbs_nqs * Vbs_dVdse; Qi_dVbse_nqs = Qi_dVgs_nqs * Vgs_dVbse + Qi_dVds_nqs * Vds_dVbse + Qi_dVbs_nqs * Vbs_dVbse; Qb_dVgse_nqs = Qb_dVgs_nqs * Vgs_dVgse + Qb_dVds_nqs * Vds_dVgse + Qb_dVbs_nqs * Vbs_dVgse; Qb_dVdse_nqs = Qb_dVgs_nqs * Vgs_dVdse + Qb_dVds_nqs * Vds_dVdse + Qb_dVbs_nqs * Vbs_dVdse; Qb_dVbse_nqs = Qb_dVgs_nqs * Vgs_dVbse + Qb_dVds_nqs * Vds_dVbse + Qb_dVbs_nqs * Vbs_dVbse; } if (flg_nqs && (ckt->CKTmode & (MODEDCOP | MODEINITSMSIG))) { /* ACNQS */ tau_dVgse = tau_dVgs * Vgs_dVgse + tau_dVds * Vds_dVgse + tau_dVbs * Vbs_dVgse; tau_dVdse = tau_dVgs * Vgs_dVdse + tau_dVds * Vds_dVdse + tau_dVbs * Vbs_dVdse; tau_dVbse = tau_dVgs * Vgs_dVbse + tau_dVds * Vds_dVbse + tau_dVbs * Vbs_dVbse; taub_dVgse = taub_dVgs * Vgs_dVgse + taub_dVds * Vds_dVgse + taub_dVbs * Vbs_dVgse; taub_dVdse = taub_dVgs * Vgs_dVdse + taub_dVds * Vds_dVdse + taub_dVbs * Vbs_dVdse; taub_dVbse = taub_dVgs * Vgs_dVbse + taub_dVds * Vds_dVbse + taub_dVbs * Vbs_dVbse; } } /* end of if ( flg_rsrd == 0 ) blocks */ /*-------------------------------------------* * Add IdsIBPC to Ids. *-----------------*/ Ids += IdsIBPC ; Ids_dVbse += IdsIBPC_dVbse ; Ids_dVdse += IdsIBPC_dVdse ; Ids_dVgse += IdsIBPC_dVgse ; /*---------------------------------------------------* * Derivatives of junction diode currents and charges. * - NOTE: These quantities are regarded as functions of * external biases. * - NOTE: node-base S/D *-----------------*/ Gbse = Gbs ; Gbde = Gbd ; Capbse = Capbs ; Capbde = Capbd ; /*---------------------------------------------------* * Extrapolate quantities if external biases are out of bounds. *-----------------*/ if ( flg_vbsc == 1 ) { Ids_dVbse *= Vbsc_dVbse ; Qb_dVbse *= Vbsc_dVbse ; Qi_dVbse *= Vbsc_dVbse ; Qd_dVbse *= Vbsc_dVbse ; Isub_dVbse *= Vbsc_dVbse ; Igate_dVbse *= Vbsc_dVbse ; Igs_dVbse *= Vbsc_dVbse ; Igd_dVbse *= Vbsc_dVbse ; Igb_dVbse *= Vbsc_dVbse ; Igidl_dVbse *= Vbsc_dVbse ; Igisl_dVbse *= Vbsc_dVbse ; Qgos_dVbse *= Vbsc_dVbse ; Qgod_dVbse *= Vbsc_dVbse ; Qgbo_dVbse *= Vbsc_dVbse ; Qy_dVbse *= Vbsc_dVbse ; if (flg_nqs) { Qi_dVbse_nqs *= Vbsc_dVbse ; Qb_dVbse_nqs *= Vbsc_dVbse ; } if (flg_nqs && (ckt->CKTmode & (MODEDCOP | MODEINITSMSIG))) { /* ACNQS */ tau_dVbse *= Vbsc_dVbse ; taub_dVbse *= Vbsc_dVbse ; } } else if ( flg_vbsc == -1 ) { T1 = Vbse - Vbsc ; TX = Ids + T1 * Ids_dVbse ; if ( TX * Ids >= 0.0 ) { Ids = TX ; } else { Ids_dVbse = 0.0 ; Ids_dVdse = 0.0 ; Ids_dVgse = 0.0 ; Ids = 0.0 ; } TX = Qb + T1 * Qb_dVbse ; /*note: The sign of Qb can be changed.*/ Qb = TX ; TX = Qd + T1 * Qd_dVbse ; if ( TX * Qd >= 0.0 ) { Qd = TX ; } else { Qd_dVbse = 0.0 ; Qd_dVdse = 0.0 ; Qd_dVgse = 0.0 ; Qd = 0.0 ; } TX = Qi + T1 * Qi_dVbse ; if ( TX * Qi >= 0.0 ) { Qi = TX ; } else { Qi_dVbse = 0.0 ; Qi_dVdse = 0.0 ; Qi_dVgse = 0.0 ; Qi = 0.0 ; } TX = Isub + T1 * Isub_dVbse ; if ( TX * Isub >= 0.0 ) { Isub = TX ; } else { Isub_dVbse = 0.0 ; Isub_dVdse = 0.0 ; Isub_dVgse = 0.0 ; Isub = 0.0 ; } TX = Igate + T1 * Igate_dVbse ; if ( TX * Igate >= 0.0 ) { Igate = TX ; } else { Igate_dVbse = 0.0 ; Igate_dVdse = 0.0 ; Igate_dVgse = 0.0 ; Igate = 0.0 ; } TX = Igs + T1 * Igs_dVbse ; if ( TX * Igs >= 0.0 ) { Igs = TX ; } else { Igs_dVbse = 0.0 ; Igs_dVdse = 0.0 ; Igs_dVgse = 0.0 ; Igs = 0.0 ; } TX = Igd + T1 * Igd_dVbse ; if ( TX * Igd >= 0.0 ) { Igd = TX ; } else { Igd_dVbse = 0.0 ; Igd_dVdse = 0.0 ; Igd_dVgse = 0.0 ; Igd = 0.0 ; } TX = Igb + T1 * Igb_dVbse ; if ( TX * Igb >= 0.0 ) { Igb = TX ; } else { Igb_dVbse = 0.0 ; Igb_dVdse = 0.0 ; Igb_dVgse = 0.0 ; Igb = 0.0 ; } TX = Igidl + T1 * Igidl_dVbse ; if ( TX * Igidl >= 0.0 ) { Igidl = TX ; } else { Igidl_dVbse = 0.0 ; Igidl_dVdse = 0.0 ; Igidl_dVgse = 0.0 ; Igidl = 0.0 ; } TX = Igisl + T1 * Igisl_dVbse ; if ( TX * Igisl >= 0.0 ) { Igisl = TX ; } else { Igisl_dVbse = 0.0 ; Igisl_dVdse = 0.0 ; Igisl_dVgse = 0.0 ; Igisl = 0.0 ; } TX = GLPART1 + T1 * GLPART1_dVbse ; if ( TX * GLPART1 >= 0.0 ) { GLPART1 = TX ; } else{ GLPART1_dVbse = 0.0 ; GLPART1_dVdse = 0.0 ; GLPART1_dVgse = 0.0 ; GLPART1 = 0.0 ; } TX = Qgod + T1 * Qgod_dVbse ; if ( TX * Qgod >= 0.0 ) { Qgod = TX ; } else { Qgod_dVbse = 0.0 ; Qgod_dVdse = 0.0 ; Qgod_dVgse = 0.0 ; Qgod = 0.0 ; } TX = Qgos + T1 * Qgos_dVbse ; if ( TX * Qgos >= 0.0 ) { Qgos = TX ; } else { Qgos_dVbse = 0.0 ; Qgos_dVdse = 0.0 ; Qgos_dVgse = 0.0 ; Qgos = 0.0 ; } TX = Qgbo + T1 * Qgbo_dVbse ; if ( TX * Qgbo >= 0.0 ) { Qgbo = TX ; } else { Qgbo_dVbse = 0.0 ; Qgbo_dVdse = 0.0 ; Qgbo_dVgse = 0.0 ; Qgbo = 0.0 ; } TX = Qy + T1 * Qy_dVbse ; if ( TX * Qy >= 0.0 ) { Qy = TX ; } else { Qy_dVbse = 0.0 ; Qy_dVdse = 0.0 ; Qy_dVgse = 0.0 ; Qy = 0.0 ; } TX = Qdrat + T1 * Qdrat_dVbse ; if ( TX * Qdrat >= 0.0 ) { Qdrat = TX ; } else{ Qdrat_dVbse = 0.0 ; Qdrat_dVdse = 0.0 ; Qdrat_dVgse = 0.0 ; Qdrat = 0.0 ; } TX = Qovd + T1 * Qovd_dVbse ; if ( TX * Qovd >= 0.0 ) { Qovd = TX ; } else{ Qovd_dVbse = 0.0 ; Qovd_dVdse = 0.0 ; Qovd_dVgse = 0.0 ; Qovd = 0.0 ; } TX = QidLD + T1 * QidLD_dVbse ; if ( TX * QidLD >= 0.0 ) { QidLD = TX ; } else{ QidLD_dVbse = 0.0 ; QidLD_dVdse = 0.0 ; QidLD_dVgse = 0.0 ; QidLD = 0.0 ; } TX = QbdLD + T1 * QbdLD_dVbse ; if ( TX * QbdLD >= 0.0 ) { QbdLD = TX ; } else{ QbdLD_dVbse = 0.0 ; QbdLD_dVdse = 0.0 ; QbdLD_dVgse = 0.0 ; QbdLD = 0.0 ; } TX = Qovs + T1 * Qovs_dVbse ; if ( TX * Qovs >= 0.0 ) { Qovs = TX ; } else{ T7 = Qovs / ( Qovs - TX ) ; Qovs_dVbse *= T7 ; Qovs_dVdse *= T7 ; Qovs_dVgse *= T7 ; Qovs = 0.0 ; } TX = QisLD + T1 * QisLD_dVbse ; if ( TX * QisLD >= 0.0 ) { QisLD = TX ; } else{ QisLD_dVbse = 0.0 ; QisLD_dVdse = 0.0 ; QisLD_dVgse = 0.0 ; QisLD = 0.0 ; } TX = QbsLD + T1 * QbsLD_dVbse ; if ( TX * QbsLD >= 0.0 ) { QbsLD = TX ; } else{ QbsLD_dVbse = 0.0 ; QbsLD_dVdse = 0.0 ; QbsLD_dVgse = 0.0 ; QbsLD = 0.0 ; } if (flg_nqs) { /* for NQS charge */ TX = Qi_nqs + T1 * Qi_dVbse_nqs ; if ( TX * Qi_nqs >= 0.0 ) { Qi_nqs = TX ; } else { Qi_dVbse_nqs = 0.0 ; Qi_dVdse_nqs = 0.0 ; Qi_dVgse_nqs = 0.0 ; Qi_nqs = 0.0 ; } TX = Qb_nqs + T1 * Qb_dVbse_nqs ; Qb_nqs = TX ; } if (flg_nqs && (ckt->CKTmode & (MODEDCOP | MODEINITSMSIG))) { /* ACNQS */ TX = tau + T1 * tau_dVbse ; if ( TX * tau >= 0.0 ) { tau = TX ; } else { tau_dVbse = 0.0 ; tau_dVdse = 0.0 ; tau_dVgse = 0.0 ; tau = 0.0 ; } TX = taub + T1 * taub_dVbse ; if ( TX * taub >= 0.0 ) { taub = TX ; } else { taub_dVbse = 0.0 ; taub_dVdse = 0.0 ; taub_dVgse = 0.0 ; taub = 0.0 ; } } } /*-----------------------------------------------------------* * Warn negative conductance. * - T1 ( = d Ids / d Vds ) is the derivative w.r.t. circuit bias. *-----------------*/ if ( here->HSM2_mode == HiSIM_NORMAL_MODE ) { T1 = Ids_dVdse ; } else { T1 = Ids_dVbse + Ids_dVdse + Ids_dVgse ; /* Ids_dVss * -1 */ } if ( flg_info >= 1 && (Ids_dVbse < 0.0 || T1 < 0.0 || Ids_dVgse < 0.0) ) { printf( "*** warning(HiSIM): Negative Conductance\n" ) ; printf( " type = %d mode = %d\n" , model->HSM2_type , here->HSM2_mode ) ; printf( " Vbse = %12.5e Vdse = %12.5e Vgse = %12.5e\n" , Vbse , Vdse , Vgse ) ; printf( " Ids_dVbse = %12.5e\n" , Ids_dVbse ) ; printf( " Ids_dVdse = %12.5e\n" , T1 ) ; printf( " Ids_dVgse = %12.5e\n" , Ids_dVgse ) ; } /*-----------------------------------------------------------* * Redefine overlap charges/capacitances. *-----------------*/ /*---------------------------------------------------* * Overlap capacitance. *-----------------*/ Cggo = Qgos_dVgse + Qgod_dVgse + Qgbo_dVgse ; Cgdo = Qgos_dVdse + Qgod_dVdse ; Cgso = - (Qgos_dVbse + Qgod_dVbse + Qgos_dVdse + Qgod_dVdse + Qgos_dVgse + Qgod_dVgse) ; Cgbo = Qgos_dVbse + Qgod_dVbse + Qgbo_dVbse ; /*---------------------------------------------------* * Add fringing charge/capacitance to overlap. *-----------------*/ Qgod += Qfd ; Qgos += Qfs ; Cggo += 2.0 * Cf ; Cgdo += - Cf ; Cgso += - Cf ; /*-----------------------------------------------------------* * Assign outputs. *-----------------*/ /*---------------------------------------------------* * Multiplication factor of a MOSFET instance. *-----------------*/ M = here->HSM2_m ; /*---------------------------------------------------* * Channel current and conductances. *-----------------*/ here->HSM2_ids = M * Ids ; here->HSM2_gmbs = M * Ids_dVbse ; here->HSM2_gds = M * Ids_dVdse ; here->HSM2_gm = M * Ids_dVgse ; /*---------------------------------------------------* * Overlap capacitances. *-----------------*/ /* Q_dVsx */ T2 = - ( Qovd_dVbse + Qovd_dVdse + Qovd_dVgse ) ; T6 = - ( Qovs_dVbse + Qovs_dVdse + Qovs_dVgse ) ; T5 = - ( QbdLD_dVbse + QbdLD_dVdse + QbdLD_dVgse ) ; T7 = - ( QbsLD_dVbse + QbsLD_dVdse + QbsLD_dVgse ) ; here->HSM2_cgdo = M * ( Cgdo - Qovd_dVdse - Qovs_dVdse ) ; here->HSM2_cgso = M * ( Cgso - T2 - T6 ) ; here->HSM2_cgbo = M * ( Cgbo - Qovd_dVbse - Qovs_dVbse ) ; here->HSM2_cdgo = M * ( - Qgod_dVgse - Cf + QbdLD_dVgse ) ; here->HSM2_cddo = M * ( - Qgod_dVdse + Cf + QbdLD_dVdse ) ; here->HSM2_cdso = M * ( Qgod_dVbse + Qgod_dVdse + Qgod_dVgse + T5 ) ; here->HSM2_csgo = M * ( - Qgos_dVgse - Cf + QbsLD_dVgse ) ; here->HSM2_csdo = M * ( - Qgos_dVdse + QbsLD_dVdse ) ; here->HSM2_csso = M * ( Qgos_dVbse + Qgos_dVdse + Qgos_dVgse + Cf + T7 ) ; /*---------------------------------------------------* * Lateral-field-induced capacitance. *-----------------*/ T0 = model->HSM2_qyrat ; T1 = 1.0 - T0 ; Qys = Qy * T1 ; Qys_dVdse = Qy_dVdse * T1 ; Qys_dVgse = Qy_dVgse * T1 ; Qys_dVbse = Qy_dVbse * T1 ; Qy = Qy * T0 ; Qy_dVdse = Qy_dVdse * T0 ; Qy_dVgse = Qy_dVgse * T0 ; Qy_dVbse = Qy_dVbse * T0 ; Cqyd = Qy_dVdse ; Cqyg = Qy_dVgse ; Cqyb = Qy_dVbse ; Cqys = - ( Cqyb + Cqyd + Cqyg ) ; here->HSM2_cqyd = M * Cqyd ; here->HSM2_cqyg = M * Cqyg ; here->HSM2_cqyb = M * Cqyb ; /* -------------------------------------* * Intrinsic charges / capacitances. *-----------------*/ if ( flg_nqs && ((ckt->CKTmode & MODETRAN) || (ckt->CKTmode & MODEINITFIX)) ) { /* NQS (tran. analysis) */ *(ckt->CKTstate0 + here->HSM2qi_nqs) = Qi_nqs ; *(ckt->CKTstate0 + here->HSM2qb_nqs) = Qb_nqs ; here->HSM2_qg = M * - (Qb_nqs + Qi_nqs) ; here->HSM2_qd = M * Qi_nqs * Qdrat ; here->HSM2_qs = M * Qi_nqs * (1.0 - Qdrat) ; here->HSM2_cbgb = M * Qb_dVgse_nqs ; here->HSM2_cbdb = M * Qb_dVdse_nqs ; here->HSM2_cbsb = M * - (Qb_dVbse_nqs + Qb_dVdse_nqs + Qb_dVgse_nqs) ; here->HSM2_cggb = M * ( - Qb_dVgse_nqs - Qi_dVgse_nqs ) ; here->HSM2_cgdb = M * ( - Qb_dVdse_nqs - Qi_dVdse_nqs ) ; here->HSM2_cgsb = M * ( Qb_dVbse_nqs + Qb_dVdse_nqs + Qb_dVgse_nqs + Qi_dVbse_nqs + Qi_dVdse_nqs + Qi_dVgse_nqs ) ; qd_dVgse = Qi_dVgse_nqs * Qdrat + Qdrat_dVgse * Qi_nqs ; qd_dVdse = Qi_dVdse_nqs * Qdrat + Qdrat_dVdse * Qi_nqs ; qd_dVbse = Qi_dVbse_nqs * Qdrat + Qdrat_dVbse * Qi_nqs ; qd_dVsse = - ( qd_dVgse + qd_dVdse + qd_dVbse ) ; here->HSM2_cdgb = M * qd_dVgse ; here->HSM2_cddb = M * qd_dVdse ; here->HSM2_cdsb = M * qd_dVsse ; } else { /* QS or NQS (ac dc analysis) */ here->HSM2_qg = M * - (Qb + Qi) ; here->HSM2_qd = M * Qd ; here->HSM2_qs = M * ( Qi - Qd ) ; here->HSM2_cbgb = M * Qb_dVgse ; here->HSM2_cbdb = M * Qb_dVdse ; here->HSM2_cbsb = M * - (Qb_dVbse + Qb_dVdse + Qb_dVgse) ; here->HSM2_cggb = M * ( - Qb_dVgse - Qi_dVgse ) ; here->HSM2_cgdb = M * ( - Qb_dVdse - Qi_dVdse ) ; here->HSM2_cgsb = M * ( Qb_dVbse + Qb_dVdse + Qb_dVgse + Qi_dVbse + Qi_dVdse + Qi_dVgse ) ; here->HSM2_cdgb = M * Qd_dVgse ; here->HSM2_cddb = M * Qd_dVdse ; here->HSM2_cdsb = M * - (Qd_dVgse + Qd_dVdse + Qd_dVbse) ; } /*---------------------------------------------------* * Add lateral-field-induced charges/capacitances to intrinsic ones. * - NOTE: This function depends on coqy, a control option. *-----------------*/ if ( model->HSM2_coqy == 1 ) { here->HSM2_qg += M * ( Qy + Qys ) ; here->HSM2_qd += M * ( - Qy ) ; here->HSM2_qs += M * ( - Qys ) ; T8 = - ( Qys_dVbse + Qys_dVdse + Qys_dVgse ) ; here->HSM2_cggb += M * ( Cqyg + Qys_dVgse ) ; here->HSM2_cgdb += M * ( Cqyd + Qys_dVdse ) ; here->HSM2_cgsb += M * ( Cqys + T8 ) ; here->HSM2_cdgb += M * ( - Cqyg ) ; here->HSM2_cddb += M * ( - Cqyd ) ; here->HSM2_cdsb += M * ( - Cqys ) ; } /*---------------------------------------------------* * Add S/D overlap charges/capacitances to intrinsic ones. * - NOTE: This function depends on coadov, a control option. *-----------------*/ if ( model->HSM2_coadov == 1 ) { /* Q_dVsb */ T0 = - ( Qgbo_dVbse + Qgbo_dVdse + Qgbo_dVgse ) ; T1 = - ( Qovd_dVbse + Qovd_dVdse + Qovd_dVgse ) ; T3 = - ( Qovs_dVbse + Qovs_dVdse + Qovs_dVgse ) ; T4 = - ( QidLD_dVbse + QidLD_dVdse + QidLD_dVgse + QisLD_dVbse + QisLD_dVdse + QisLD_dVgse ) ; T5 = - ( QbdLD_dVbse + QbdLD_dVdse + QbdLD_dVgse ) ; T7 = - ( Qgod_dVbse + Qgod_dVdse + Qgod_dVgse ) ; here->HSM2_qg += M * ( Qgod + Qgos + Qgbo - Qovd - Qovs ) ; here->HSM2_qd += M * ( - Qgod + QbdLD ) ; here->HSM2_qs += M * ( - Qgos + QbsLD ) ; here->HSM2_cbgb += M * ( - Qgbo_dVgse + QidLD_dVgse + QisLD_dVgse ) ; here->HSM2_cbdb += M * ( - Qgbo_dVdse + QidLD_dVdse + QisLD_dVdse ) ; here->HSM2_cbsb += M * ( - T0 + T4 ) ; here->HSM2_cggb += M * ( Cggo - Qovd_dVgse - Qovs_dVgse ) ; here->HSM2_cgdb += M * ( Cgdo - Qovd_dVdse - Qovs_dVdse ) ; here->HSM2_cgsb += M * ( Cgso - T1 - T3 ) ; here->HSM2_cdgb += M * ( - Qgod_dVgse - Cf + QbdLD_dVgse ) ; here->HSM2_cddb += M * ( - Qgod_dVdse + Cf + QbdLD_dVdse ) ; here->HSM2_cdsb += M * ( - T7 + T5 ) ; } /*---------------------------------------------------* * tau (channel/bulk charge) for ACNQS. *-----------------*/ if (flg_nqs && (ckt->CKTmode & (MODEDCOP | MODEINITSMSIG))) { here->HSM2_tau = tau ; here->HSM2_tau_dVgs = tau_dVgse ; here->HSM2_tau_dVds = tau_dVdse ; here->HSM2_tau_dVbs = tau_dVbse ; here->HSM2_taub = taub ; here->HSM2_taub_dVgs = taub_dVgse ; here->HSM2_taub_dVds = taub_dVdse ; here->HSM2_taub_dVbs = taub_dVbse ; here->HSM2_Xd = Qdrat; here->HSM2_Xd_dVgs = Qdrat_dVgse ; here->HSM2_Xd_dVds = Qdrat_dVdse ; here->HSM2_Xd_dVbs = Qdrat_dVbse ; here->HSM2_Qb = M * Qb ; here->HSM2_Qb_dVgs = M * Qb_dVgse ; here->HSM2_Qb_dVds = M * Qb_dVdse ; here->HSM2_Qb_dVbs = M * Qb_dVbse ; here->HSM2_Qi = M * Qi ; here->HSM2_Qi_dVgs = M * Qi_dVgse ; here->HSM2_Qi_dVds = M * Qi_dVdse ; here->HSM2_Qi_dVbs = M * Qi_dVbse ; } /*---------------------------------------------------* * Substrate/gate/leak currents. *-----------------*/ here->HSM2_isub = M * Isub ; here->HSM2_gbbs = M * Isub_dVbse ; here->HSM2_gbds = M * Isub_dVdse ; here->HSM2_gbgs = M * Isub_dVgse ; here->HSM2_igb = M * -Igb ; here->HSM2_gigbb = M * -Igb_dVbse ; here->HSM2_gigbg = M * -Igb_dVgse ; if (here->HSM2_mode == HiSIM_NORMAL_MODE) { here->HSM2_gigbd = M * -Igb_dVdse ; here->HSM2_gigbs = M * ( Igb_dVbse + Igb_dVdse + Igb_dVgse ) ; } else { here->HSM2_gigbd = M * ( Igb_dVbse + Igb_dVdse + Igb_dVgse ) ; here->HSM2_gigbs = M * -Igb_dVdse ; } if (here->HSM2_mode == HiSIM_NORMAL_MODE) { here->HSM2_igd = M * ( GLPART1 * Igate - Igd ) ; here->HSM2_gigdb = M * ( GLPART1 * Igate_dVbse + GLPART1_dVbse * Igate - Igd_dVbse ) ; here->HSM2_gigdd = M * ( GLPART1 * Igate_dVdse + GLPART1_dVdse * Igate - Igd_dVdse ) ; here->HSM2_gigdg = M * ( GLPART1 * Igate_dVgse + GLPART1_dVgse * Igate - Igd_dVgse ) ; } else { T1 = 1.0 - GLPART1 ; T1_dVb = - GLPART1_dVbse ; T1_dVd = - GLPART1_dVdse ; T1_dVg = - GLPART1_dVgse ; here->HSM2_igd = M * ( T1 * Igate - Igs ) ; here->HSM2_gigdb = M * ( T1 * Igate_dVbse + T1_dVb * Igate - Igs_dVbse ) ; here->HSM2_gigdd = M * ( T1 * - ( Igate_dVgse + Igate_dVbse + Igate_dVdse ) + ( - T1_dVb - T1_dVg - T1_dVd ) * Igate + ( Igs_dVgse + Igs_dVbse + Igs_dVdse ) ) ; here->HSM2_gigdg = M * ( T1 * Igate_dVgse + T1_dVg * Igate - Igs_dVgse ) ; } here->HSM2_gigds = -(here->HSM2_gigdb + here->HSM2_gigdd + here->HSM2_gigdg) ; if (here->HSM2_mode == HiSIM_NORMAL_MODE) { T1 = 1.0 - GLPART1 ; T1_dVb = - GLPART1_dVbse ; T1_dVd = - GLPART1_dVdse ; T1_dVg = - GLPART1_dVgse ; here->HSM2_igs = M * ( T1 * Igate - Igs ) ; here->HSM2_gigsb = M * ( T1 * Igate_dVbse + T1_dVb * Igate - Igs_dVbse ) ; here->HSM2_gigsd = M * ( T1 * Igate_dVdse + T1_dVd * Igate - Igs_dVdse ) ; here->HSM2_gigsg = M * ( T1 * Igate_dVgse + T1_dVg * Igate - Igs_dVgse ) ; } else { here->HSM2_igs = M * ( GLPART1 * Igate - Igd ) ; here->HSM2_gigsb = M * ( GLPART1 * Igate_dVbse + GLPART1_dVbse * Igate - Igd_dVbse ) ; here->HSM2_gigsd = M * ( GLPART1 * -(Igate_dVgse + Igate_dVbse + Igate_dVdse) - Igate * ( GLPART1_dVbse + GLPART1_dVdse + GLPART1_dVgse ) + (Igs_dVgse + Igs_dVbse + Igs_dVdse) ) ; here->HSM2_gigsg = M * ( GLPART1 * Igate_dVgse + GLPART1_dVgse * Igate - Igd_dVgse ) ; } here->HSM2_gigss = -(here->HSM2_gigsb + here->HSM2_gigsd + here->HSM2_gigsg) ; here->HSM2_igidl = (here->HSM2_mode == HiSIM_NORMAL_MODE) ? M * Igidl : M * Igisl ; here->HSM2_gigidlbs = (here->HSM2_mode == HiSIM_NORMAL_MODE) ? M * Igidl_dVbse : M * Igisl_dVbse ; here->HSM2_gigidlds = (here->HSM2_mode == HiSIM_NORMAL_MODE) ? M * Igidl_dVdse : M * ( - Igisl_dVbse - Igisl_dVdse - Igisl_dVgse ) ; here->HSM2_gigidlgs = (here->HSM2_mode == HiSIM_NORMAL_MODE) ? M * Igidl_dVgse : M * Igisl_dVgse ; here->HSM2_igisl = (here->HSM2_mode == HiSIM_NORMAL_MODE) ? M * Igisl : M * Igidl ; here->HSM2_gigislbd = (here->HSM2_mode == HiSIM_NORMAL_MODE) ? M * Igisl_dVbse : M * Igidl_dVbse ; here->HSM2_gigislsd = (here->HSM2_mode == HiSIM_NORMAL_MODE) ? M * Igisl_dVdse : M * ( - Igidl_dVbse - Igidl_dVdse - Igidl_dVgse ) ; here->HSM2_gigislgd = (here->HSM2_mode == HiSIM_NORMAL_MODE) ? M * Igisl_dVgse : M * Igidl_dVgse ; /*---------------------------------------------------* * Von, Vdsat. *-----------------*/ here->HSM2_von = Vth ; here->HSM2_vdsat = Vdsat ; /*---------------------------------------------------* * Junction diode. *-----------------*/ here->HSM2_ibs = M * Ibs ; here->HSM2_ibd = M * Ibd ; here->HSM2_gbs = M * Gbse ; here->HSM2_gbd = M * Gbde ; *(ckt->CKTstate0 + here->HSM2qbs) = M * Qbs ; *(ckt->CKTstate0 + here->HSM2qbd) = M * Qbd ; here->HSM2_capbs = M * Capbse ; here->HSM2_capbd = M * Capbde ; /*-----------------------------------------------------------* * Warn floating-point exceptions. * - Function finite() in libm is called. * - Go to start with info==5. *-----------------*/ T1 = here->HSM2_ids + here->HSM2_gmbs + here->HSM2_gds + here->HSM2_gm ; T1 = T1 + here->HSM2_qd + here->HSM2_cdsb ; if ( ! finite (T1) ) { flg_err = 1 ; fprintf (stderr , "*** warning(HiSIM): FP-exception (PART-1)\n" ) ; if ( flg_info >= 1 ) { printf ( "*** warning(HiSIM): FP-exception\n") ; printf ( "here->HSM2_ids = %12.5e\n" , here->HSM2_ids ) ; printf ( "here->HSM2_gmbs = %12.5e\n" , here->HSM2_gmbs) ; printf ( "here->HSM2_gds = %12.5e\n" , here->HSM2_gds ) ; printf ( "here->HSM2_gm = %12.5e\n" , here->HSM2_gm ) ; printf ( "here->HSM2_qd = %12.5e\n" , here->HSM2_qd ) ; printf ( "here->HSM2_cdsb = %12.5e\n" , here->HSM2_cdsb) ; } } T1 = here->HSM2_isub + here->HSM2_gbbs + here->HSM2_gbds + here->HSM2_gbgs ; if ( ! finite (T1) ) { flg_err = 1 ; fprintf (stderr , "*** warning(HiSIM): FP-exception (PART-2)\n") ; if ( flg_info >= 1 ) { printf ("*** warning(HiSIM): FP-exception\n") ; } } T1 = here->HSM2_cgbo + Cgdo + Cgso + Cggo ; if ( ! finite (T1) ) { flg_err = 1 ; fprintf(stderr , "*** warning(HiSIM): FP-exception (PART-3)\n") ; if ( flg_info >= 1 ) { printf ("*** warning(HiSIM): FP-exception\n") ; } } T1 = here->HSM2_ibs + here->HSM2_ibd + here->HSM2_gbs + here->HSM2_gbd ; T1 = T1 + *(ckt->CKTstate0 + here->HSM2qbs) + *(ckt->CKTstate0 + here->HSM2qbd) + here->HSM2_capbs + here->HSM2_capbd ; if ( ! finite (T1) ) { flg_err = 1 ; fprintf(stderr , "*** warning(HiSIM): FP-exception (PART-4)\n") ; if ( flg_info >= 1 ) { printf ("*** warning(HiSIM): FP-exception\n") ; } } /*-----------------------------------------------------------* * Exit for error case. *-----------------*/ if ( flg_err != 0 ) { fprintf (stderr , "----- bias information (HiSIM)\n" ) ; fprintf (stderr , "name: %s\n" , here->HSM2name ) ; fprintf (stderr , "stetes: %d\n" , here->HSM2states ) ; fprintf (stderr , "vds= %12.5e vgs=%12.5e vbs=%12.5e\n" , vds , vgs , vbs ) ; fprintf (stderr , "vbs_jct= %12.5e vbd_jct= %12.5e\n" , vbs_jct , vbd_jct ) ; fprintf (stderr , "vd= %12.5e vg= %12.5e vb= %12.5e vs= %12.5e\n" , *( ckt->CKTrhsOld + here->HSM2dNodePrime ) , *( ckt->CKTrhsOld + here->HSM2gNodePrime ) , *( ckt->CKTrhsOld + here->HSM2bNodePrime ) , *( ckt->CKTrhsOld + here->HSM2sNodePrime ) ) ; if ( here->HSM2_called >= 1 ) { fprintf (stderr , "vdsc_prv= %12.5e vgsc_prv=%12.5e vbsc_prv=%12.5e\n" , here->HSM2_vdsc_prv , here->HSM2_vgsc_prv , here->HSM2_vbsc_prv ) ; } fprintf (stderr , "----- bias information (end)\n" ) ; } if ( flg_err != 0 ) return ( HiSIM_ERROR ) ; /*-----------------------------------------------------------* * Noise. *-----------------*/ here->HSM2_noiflick = M * Nflic ; here->HSM2_noithrml = M * Nthrml ; /*----------------------------------------------------------* * induced gate noise. ( Part 3/3 ) *----------------------*/ if ( model->HSM2_coign != 0 && model->HSM2_cothrml != 0 && flg_ign == 1 && !flg_noqi ) { T0 = Cox_small * Cox * here->HSM2_weff_nf * Leff ; T1 = here->HSM2_cgsb / M ; if( - T1 > T0 ){ Nign0 = c_16o135 * C_QE * beta_inv * T1 * T1 / gds0_ign ; if ( kusai00L > epsm10 && Vds > epsm10 ) { MuModA = Muun / Mu ; MuModB = ( Muun / Mud_hoso - MuModA ) / Vds ; correct_w1 = MuModA + C_2o3 * MuModB * ( kusai00 + VgVt * sqrtkusaiL + kusaiL ) / ( VgVt + sqrtkusaiL ) ; } else { correct_w1 = Muun / Mud_hoso ; } here->HSM2_noiigate = M * Nign0 * kusai_ig * correct_w1 ; here->HSM2_noicross = crl_f ; if ( here->HSM2_noiigate < 0.0 ) here->HSM2_noiigate = 0.0e0 ; }else{ here->HSM2_noiigate = 0.0e0 ; here->HSM2_noicross = 0.0e0 ; } here->HSM2_Qdrat = Qdrat ; /* needed for calculating induced gate noise */ }else{ here->HSM2_noiigate = 0.0e0 ; here->HSM2_noicross = 0.0e0 ; } /*-----------------------------------------------------------* * Restore values for next calculation. *-----------------*/ /* Confined biases */ if ( here->HSM2_called >= 1 ) { here->HSM2_vbsc_prv2 = here->HSM2_vbsc_prv ; here->HSM2_vdsc_prv2 = here->HSM2_vdsc_prv ; here->HSM2_vgsc_prv2 = here->HSM2_vgsc_prv ; here->HSM2_mode_prv2 = here->HSM2_mode_prv ; } here->HSM2_vbsc_prv = Vbsc ; here->HSM2_vdsc_prv = Vdsc ; here->HSM2_vgsc_prv = Vgsc ; here->HSM2_mode_prv = here->HSM2_mode ; /* Surface potentials and derivatives w.r.t. internal biases */ if ( here->HSM2_called >= 1 ) { here->HSM2_ps0_prv2 = here->HSM2_ps0_prv ; here->HSM2_ps0_dvbs_prv2 = here->HSM2_ps0_dvbs_prv ; here->HSM2_ps0_dvds_prv2 = here->HSM2_ps0_dvds_prv ; here->HSM2_ps0_dvgs_prv2 = here->HSM2_ps0_dvgs_prv ; here->HSM2_pds_prv2 = here->HSM2_pds_prv ; here->HSM2_pds_dvbs_prv2 = here->HSM2_pds_dvbs_prv ; here->HSM2_pds_dvds_prv2 = here->HSM2_pds_dvds_prv ; here->HSM2_pds_dvgs_prv2 = here->HSM2_pds_dvgs_prv ; } here->HSM2_ps0_prv = Ps0 ; here->HSM2_ps0_dvbs_prv = Ps0_dVbs ; here->HSM2_ps0_dvds_prv = Ps0_dVds ; here->HSM2_ps0_dvgs_prv = Ps0_dVgs ; here->HSM2_pds_prv = Pds ; here->HSM2_pds_dvbs_prv = Pds_dVbs ; here->HSM2_pds_dvds_prv = Pds_dVds ; here->HSM2_pds_dvgs_prv = Pds_dVgs ; /* Derivatives of channel current w.r.t. internal biases */ here->HSM2_ids_prv = Ids ; here->HSM2_ids_dvbs_prv = Ids_dVbs ; here->HSM2_ids_dvds_prv = Ids_dVds ; here->HSM2_ids_dvgs_prv = Ids_dVgs ; /* For CORECIP = 1 */ if ( corecip ) { here->HSM2_PS0Z_SCE_prv = PS0Z_SCE ; here->HSM2_PS0Z_SCE_dvds_prv = PS0Z_SCE_dVds ; here->HSM2_PS0Z_SCE_dvgs_prv = PS0Z_SCE_dVgs ; here->HSM2_PS0Z_SCE_dvbs_prv = PS0Z_SCE_dVbs ; /* here->HSM2_nnn = NNN ; */ } /*-----------------------------------------------------------* * End of PART-7. (label) *-----------------*/ /* end_of_part_7: */ /*-----------------------------------------------------------* * Bottom of hsm2eval. *-----------------*/ return ( HiSIM_OK ) ; } /* end of hsm2eval */ tmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2evalenv.h0000644000175000017500000000471613546075722022771 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM ( VERSION : 2 SUBVERSION : 8 REVISION : 0 ) FILE : hsm2evalenv.h Date : 2014.6.5 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ #ifndef HSM2_EVAL_ENV_H #define HSM2_EVAL_ENV_H /* macros and constants used in hsm2eval2yz.c */ /*---------------------------------------------------* * Numerical constants. (macro) *-----------------*/ /* machine epsilon */ #if defined(_FLOAT_H) && defined(DBL_EPSILON) #define C_EPS_M (DBL_EPSILON) #else #define C_EPS_M (2.2204460492503131e-16) #endif #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THR 34.0 /* sqrt(2) */ #define C_SQRT_2 (1.414213562373095e+00) /* 1/3 */ #define C_1o3 (3.333333333333333e-01) /* 2/3 */ #define C_2o3 (6.666666666666667e-01) /* 2^(1/3) */ #define C_2p_1o3 (1.259921049894873e+00) /* Pi */ #define C_Pi (3.141592653589793) #define C_Pio2 (1.570796326794897) /* Unit change */ #define C_m2cm (1.0e2) #define C_m2cm_p2 (1.0e4) #define C_m2cm_p1o2 (1.0e1) #define C_m2um (1.0e6) #define C_cm2m_p3 (1.0e-6) #define C_vmax (1.0e5) #define C_E0_p2 (1.0e9) /*---------------------------------------------------* * Physical constants/properties. (macro) *-----------------*/ /* Elemental charge */ #define C_QE (1.6021918e-19) /* Boltzmann constant */ #define C_KB (1.3806226e-23) /* Permitivity of Si, SiO2 and vacuum */ #define C_ESI (1.034943e-10) #define C_EOX (3.453133e-11) #define C_VAC (8.8541878e-12) /* Room temperature constants */ #define C_T300 (300e+00) #define C_b300 (3.868283e+01) /* #define C_Eg0 (1.1785e0) */ /*changed to parameter sIN.eg0*/ /* Build-in potential */ /*#define C_Vbi (1.0e0)*/ /* changed to parameter sIN.vbi */ /* Intrinsic carrier density at 300K */ #define C_Nin0 (1.04e+16) /*---------------------------------------------------* * Functions. (macro) Take care of the arguments. *-----------------*/ #define Fn_Sqr(x) ( (x)*(x) ) /* x^2 */ #define Fn_Max(x,y) ( (x) >= (y) ? (x) : (y) ) /* max[x,y] */ #define Fn_Min(x,y) ( (x) <= (y) ? (x) : (y) ) /* min[x,y] */ #define Fn_Sgn(x) ( (x) >= 0 ? (1) : (-1) ) /* sign[x] */ #endif /* HSM2_EVAL_ENV_H */ tmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2temp.c0000644000175000017500000010037713546075722022271 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM ( VERSION : 2 SUBVERSION : 8 REVISION : 0 ) FILE : hsm2temp.c Date : 2014.6.5 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HiSIM2 Distribution Statement and Copyright Notice" attached to HiSIM2 model. -----HiSIM2 Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaim all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." *************************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "hsm2def.h" #include "hsm2evalenv.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define Nsubmin (1e15 / C_cm2m_p3) #define Nsubmin_dlt (0.01 / C_cm2m_p3) #define lpext_dlt (1e-8 / C_m2cm) #define RANGECHECK(param, min, max, pname) \ if ( model->HSM2_coerrrep && ((param) < (min) || (param) > (max)) ) { \ printf("warning: (%s = %g) range [%g , %g].\n", \ (pname), (param), (min), (max) ); \ } /*---------------------------------------------------* * smoothZero: flooring to zero. * y = 0.5 ( x + sqrt( x^2 + 4 delta^2 ) ) *-----------------*/ #define Fn_SZtemp( y , x , delta ) { \ T1 = sqrt ( ( x ) * ( x ) + 4.0 * ( delta ) * ( delta) ) ; \ y = 0.5 * ( ( x ) + T1 ) ; \ } #define Fn_SUtemp( y , x , xmax , delta ) { \ T1 = ( xmax ) - ( x ) - ( delta ) ; \ T2 = 4.0 * ( xmax ) * ( delta) ; \ T2 = T2 > 0.0 ? T2 : - ( T2 ) ; \ T2 = sqrt ( T1 * T1 + T2 ) ; \ y = ( xmax ) - 0.5 * ( T1 + T2 ) ; \ } #define Fn_SLtemp( y , x , xmin , delta ) { \ T1 = ( x ) - ( xmin ) - ( delta ) ; \ T2 = 4.0 * ( xmin ) * ( delta ) ; \ T2 = T2 > 0.0 ? T2 : - ( T2 ) ; \ T2 = sqrt ( T1 * T1 + T2 ) ; \ y = ( xmin ) + 0.5 * ( T1 + T2 ) ; \ } /*===========================================================* * pow *=================*/ #ifdef POW_TO_EXP_AND_LOG #define Fn_Pow( x , y ) ( (x==0.0) ? 0.0 : exp( (y) * log( x ) ) ) #else #define Fn_Pow( x , y ) ( (x==0.0) ? 0.0 : pow( x , y ) ) #endif int HSM2temp( GENmodel *inModel, CKTcircuit *ckt) { HSM2model *model = (HSM2model *)inModel ; HSM2instance *here ; HSM2binningParam *pParam ; HSM2modelMKSParam *modelMKS ; HSM2hereMKSParam *hereMKS ; double mueph ; double Leff, dL , LG, Weff, dW , WG , WL , Lgate , Wgate; double Nsubpp, Nsubps, Nsub, q_Nsub, Nsubb, Npext ; double Lod_half, Lod_half_ref ; double MUEPWD = 0.0 ; double MUEPLD = 0.0 ; double GDLD = 0.0 ; double T1, T2, T3 ; const double small = 1.0e-50 ; /* temperature-dependent variables */ double Eg ,TTEMP, beta, Nin; double js, jssw, js2, jssw2 ; double Tratio ; int i; /* declarations for the sc3 clamping part */ double A, beta_inv, c_eox, cnst0, cnst1, Cox, Cox_inv; double Denom, dPpg, dVth, dVthLP, dVthLP_dVb, dVthSC, dVthW; double dVth0, dVth0_dVb, fac1, limVgp_dVbs, Pb20, Ps0, Ps0_dVbs; double Ps0_min, Qb0, sc3lim, sc3Vbs, sc3Vgs, term1, term2, term3, term4; double Tox, T0, T3_dVb, T4, T5, T6, T6_dVb, T8, T8_dVb; double T9, T9_dVb, Vgp, Vgs_min, Vfb, Vthp, Vth0; for ( ;model ;model = HSM2nextModel(model)) { modelMKS = &model->modelMKS ; for ( here = HSM2instances(model); here; here = HSM2nextInstance(here)) { pParam = &here->pParam ; hereMKS = &here->hereMKS ; Lgate = here->HSM2_lgate ; Wgate = here->HSM2_wgate ; LG = here->HSM2_lg ; WG = here->HSM2_wg ; WL = WG * LG ; MUEPWD = model->HSM2_muepwd * C_m2um ; MUEPLD = model->HSM2_muepld * C_m2um ; /* Band gap */ here->HSM2_egtnom = pParam->HSM2_eg0 - model->HSM2_ktnom * ( 90.25e-6 + model->HSM2_ktnom * 1.0e-7 ) ; /* C_EOX */ here->HSM2_cecox = C_VAC * model->HSM2_kappa ; /* Vth reduction for small Vds */ here->HSM2_msc = model->HSM2_scp22 ; /* Poly-Si Gate Depletion */ if ( pParam->HSM2_pgd1 == 0.0 ) { here->HSM2_flg_pgd = 0 ; } else { here->HSM2_flg_pgd = 1 ; } /* CLM5 & CLM6 */ here->HSM2_clmmod = 1e0 + pow( LG , model->HSM2_clm5 ) * model->HSM2_clm6 ; /* Half length of diffusion */ T1 = 1.0 / (model->HSM2_saref + 0.5 * here->HSM2_l) + 1.0 / (model->HSM2_sbref + 0.5 * here->HSM2_l); Lod_half_ref = 2.0 / T1 ; if (here->HSM2_sa > 0.0 && here->HSM2_sb > 0.0 && (here->HSM2_nf == 1.0 || (here->HSM2_nf > 1.0 && here->HSM2_sd > 0.0))) { T1 = 0.0; for (i = 0; i < here->HSM2_nf; i++) { T1 = T1 + 1.0 / (here->HSM2_sa + 0.5 * here->HSM2_l + i * (here->HSM2_sd + here->HSM2_l)) + 1.0 / (here->HSM2_sb + 0.5 * here->HSM2_l + i * (here->HSM2_sd + here->HSM2_l)); } Lod_half = 2.0 * here->HSM2_nf / T1; } else { Lod_half = 0.0; } Npext = modelMKS->HSM2_npext * ( 1.0 + model->HSM2_npextw / pow( WG, model->HSM2_npextwp ) ); /* new */ here->HSM2_mueph1 = pParam->HSM2_mueph1 ; here->HSM2_nsubp = pParam->HSM2_nsubp ; here->HSM2_nsubc = pParam->HSM2_nsubc ; /* DFM */ if ( model->HSM2_codfm == 1 && here->HSM2_nsubcdfm_Given ) { RANGECHECK(here->HSM2_nsubcdfm, 1.0e16, 1.0e19, "NSUBCDFM") ; here->HSM2_mueph1 = here->HSM2_mueph1 * ( here->HSM2_mphdfm * ( log(hereMKS->HSM2_nsubcdfm) - log(here->HSM2_nsubc) ) + 1.0 ) ; here->HSM2_nsubp = here->HSM2_nsubp + hereMKS->HSM2_nsubcdfm - here->HSM2_nsubc ; Npext = Npext + hereMKS->HSM2_nsubcdfm - here->HSM2_nsubc ; here->HSM2_nsubc = hereMKS->HSM2_nsubcdfm ; } /* WPE */ T0 = modelMKS->HSM2_nsubcwpe * ( here->HSM2_sca + model->HSM2_web * here->HSM2_scb + model->HSM2_wec * here->HSM2_scc ) ; here->HSM2_nsubc = here->HSM2_nsubc + T0 ; Fn_SLtemp( here->HSM2_nsubc , here->HSM2_nsubc , Nsubmin , Nsubmin_dlt ) ; T0 = modelMKS->HSM2_nsubpwpe * ( here->HSM2_sca + model->HSM2_web * here->HSM2_scb + model->HSM2_wec * here->HSM2_scc ) ; here->HSM2_nsubp = here->HSM2_nsubp + T0 ; Fn_SLtemp( here->HSM2_nsubp , here->HSM2_nsubp , Nsubmin , Nsubmin_dlt ) ; T0 = modelMKS->HSM2_npextwpe * ( here->HSM2_sca + model->HSM2_web * here->HSM2_scb + model->HSM2_wec * here->HSM2_scc ) ; Npext = Npext + T0 ; Fn_SLtemp( Npext , Npext , Nsubmin , Nsubmin_dlt ) ; /* WPE end */ /* Coulomb Scattering */ here->HSM2_muecb0 = pParam->HSM2_muecb0 * pow( LG, model->HSM2_muecb0lp ); here->HSM2_muecb1 = pParam->HSM2_muecb1 * pow( LG, model->HSM2_muecb1lp ); /* Phonon Scattering (temperature-independent part) */ mueph = here->HSM2_mueph1 * (1.0e0 + (model->HSM2_muephw / pow( WG + MUEPWD , model->HSM2_muepwp))) * (1.0e0 + (model->HSM2_muephl / pow( LG + MUEPLD , model->HSM2_mueplp))) * (1.0e0 + (model->HSM2_muephw2 / pow( WG, model->HSM2_muepwp2))) * (1.0e0 + (model->HSM2_muephl2 / pow( LG, model->HSM2_mueplp2))) * (1.0e0 + (model->HSM2_muephs / pow( WL, model->HSM2_muepsp))); if (Lod_half > 0.0) { T1 = 1.0e0 / (1.0e0 + pParam->HSM2_muesti2) ; T2 = pow (pParam->HSM2_muesti1 / Lod_half, pParam->HSM2_muesti3) ; T3 = pow (pParam->HSM2_muesti1 / Lod_half_ref, pParam->HSM2_muesti3) ; here->HSM2_mueph = mueph * (1.0e0 + T1 * T2) / (1.0e0 + T1 * T3); } else { here->HSM2_mueph = mueph; } /* Surface Roughness Scattering */ here->HSM2_muesr = model->HSM2_muesr0 * (1.0e0 + (model->HSM2_muesrl / pow (LG, model->HSM2_mueslp))) * (1.0e0 + (model->HSM2_muesrw / pow (WG, model->HSM2_mueswp))) ; /* Coefficients of Qbm for Eeff */ T1 = pow( LG, model->HSM2_ndeplp ) ; T2 = pow( WG, model->HSM2_ndepwp ) ; /* new */ T3 = T1 + model->HSM2_ndepl ; T4 = T2 + model->HSM2_ndepw ; if( T3 < 1e-8 ) { T3 = 1e-8; } if( T4 < 1e-8 ) { T4 = 1e-8; } here->HSM2_ndep_o_esi = ( pParam->HSM2_ndep * T1 ) / T3 * T2 / T4 / C_ESI ; here->HSM2_ninv_o_esi = pParam->HSM2_ninv / C_ESI ; /* LG dependence of NINVD */ here->HSM2_ninvd = model->HSM2_ninvd * ( 1.0 + (model->HSM2_ninvdl / pow( LG, model->HSM2_ninvdlp))); /* Metallurgical channel geometry */ dL = model->HSM2_xld + (modelMKS->HSM2_ll / pow (Lgate + model->HSM2_lld, model->HSM2_lln)) ; dW = model->HSM2_xwd + (modelMKS->HSM2_wl / pow (Wgate + model->HSM2_wld, model->HSM2_wln)) ; Leff = Lgate - 2.0e0 * dL ; if ( Leff <= 1.0e-9 ) { SPfrontEnd->IFerrorf ( ERR_FATAL, "HiSIM2: MOSFET(%s) MODEL(%s): effective channel length is smaller than 1nm", model->HSM2modName, here->HSM2name); return (E_BADPARM); } here->HSM2_leff = Leff ; /* Wg dependence for short channel devices */ here->HSM2_lgatesm = Lgate + model->HSM2_wl1 / pow( WL , model->HSM2_wl1p ) ; here->HSM2_dVthsm = pParam->HSM2_wl2 / pow( WL , model->HSM2_wl2p ) ; /* Lg dependence of wsti */ T1 = 1.0e0 + model->HSM2_wstil / pow( here->HSM2_lgatesm * C_m2um , model->HSM2_wstilp ) ; T2 = 1.0e0 + model->HSM2_wstiw / pow( WG , model->HSM2_wstiwp ) ; here->HSM2_wsti = pParam->HSM2_wsti * T1 * T2 ; here->HSM2_weff = Weff = Wgate - 2.0e0 * dW ; if ( Weff <= 0.0 ) { SPfrontEnd->IFerrorf ( ERR_FATAL, "HiSIM2: MOSFET(%s) MODEL(%s): effective channel width is negative or 0", model->HSM2modName, here->HSM2name); return (E_BADPARM); } here->HSM2_weff_nf = Weff * here->HSM2_nf ; /* Surface impurity profile */ /* Nsubp */ if(model->HSM2_nsubpfac < 1.0) { T1 = 2.0 * ( 1.0 - model->HSM2_nsubpfac ) / model->HSM2_nsubpl * LG + 2.0 * model->HSM2_nsubpfac - 1.0 ; Fn_SUtemp( T1 , T1 , 1 , model->HSM2_nsubpdlt ) ; Fn_SLtemp( T1 , T1 , model->HSM2_nsubpfac , model->HSM2_nsubpdlt ) ; here->HSM2_nsubp = here->HSM2_nsubp * T1 ; } /* Note: Sign Changed --> */ Nsubpp = here->HSM2_nsubp * (1.0e0 + (model->HSM2_nsubpw / pow (WG, model->HSM2_nsubpwp))) ; /* <-- Note: Sign Changed */ if (Lod_half > 0.0) { T1 = 1.0e0 / (1.0e0 + pParam->HSM2_nsubpsti2) ; T2 = pow (pParam->HSM2_nsubpsti1 / Lod_half, pParam->HSM2_nsubpsti3) ; T3 = pow (pParam->HSM2_nsubpsti1 / Lod_half_ref, pParam->HSM2_nsubpsti3) ; Nsubps = Nsubpp * (1.0e0 + T1 * T2) / (1.0e0 + T1 * T3) ; } else { Nsubps = Nsubpp ; } T2 = 1.0e0 + ( model->HSM2_nsubcw / pow ( WG, model->HSM2_nsubcwp )) ; T2 = T2 * ( 1.0e0 + ( model->HSM2_nsubcw2 / pow ( WG, model->HSM2_nsubcwp2 )) ) ; T3 = modelMKS->HSM2_nsubcmax / here->HSM2_nsubc ; Fn_SUtemp( T1 , T2 , T3 , 0.01 ) ; here->HSM2_nsubc = here->HSM2_nsubc * T1 ; if (Lod_half > 0.0) { T1 = 1.0e0 / (1.0e0 + pParam->HSM2_nsubcsti2) ; T2 = pow (pParam->HSM2_nsubcsti1 / Lod_half, pParam->HSM2_nsubcsti3) ; T3 = pow (pParam->HSM2_nsubcsti1 / Lod_half_ref, pParam->HSM2_nsubcsti3) ; here->HSM2_nsubc = here->HSM2_nsubc * (1.0e0 + T1 * T2) / (1.0e0 + T1 * T3) ; } if(model->HSM2_coerrrep && (here->HSM2_nsubc <= 0.0)) { fprintf ( stderr , "*** warning(HiSIM): actual NSUBC value is negative -> reset to 1E+15.\n" ) ; fprintf ( stderr , " The model parameter NSUBCW/NSUBCWP and/or NSUBCW2/NSUBCW2P might be wrong.\n" ) ; here->HSM2_nsubc = 1e15 / C_cm2m_p3 ; } if( (model->HSM2_codep==0) && model->HSM2_coerrrep && (Npext < here->HSM2_nsubc || Npext > here->HSM2_nsubp)) { fprintf ( stderr , "*** warning(HiSIM): actual NPEXT value is smaller than NSUBC and/or greater than NSUBP.\n" ) ; fprintf ( stderr , " ( Npext = %e , NSUBC = %e , NSUBP = %e ) \n",Npext,here->HSM2_nsubc,here->HSM2_nsubp); fprintf ( stderr , " The model parameter NPEXTW and/or NPEXTWP might be wrong.\n" ) ; } if( Lgate > model->HSM2_lp ){ Nsub = (here->HSM2_nsubc * (Lgate - model->HSM2_lp) + Nsubps * model->HSM2_lp) / Lgate ; } else { Nsub = Nsubps + (Nsubps - here->HSM2_nsubc) * (model->HSM2_lp - Lgate) / model->HSM2_lp ; } T3 = 0.5e0 * Lgate - model->HSM2_lp ; Fn_SZtemp( T3 , T3 , lpext_dlt ) ; T1 = Fn_Max(0.0e0, model->HSM2_lpext ) ; T2 = T3 * T1 / ( T3 + T1 ) ; here->HSM2_nsub = Nsub = Nsub + T2 * (Npext - here->HSM2_nsubc) / Lgate ; here->HSM2_qnsub = q_Nsub = C_QE * Nsub ; here->HSM2_qnsub_esi = q_Nsub * C_ESI ; here->HSM2_2qnsub_esi = 2.0 * here->HSM2_qnsub_esi ; /* Pocket Overlap (temperature-independent part) */ if ( Lgate <= 2.0e0 * model->HSM2_lp ) { Nsubb = 2.0e0 * Nsubps - (Nsubps - here->HSM2_nsubc) * Lgate / model->HSM2_lp - here->HSM2_nsubc ; here->HSM2_ptovr0 = log (Nsubb / here->HSM2_nsubc) ; } else { here->HSM2_ptovr0 = 0.0e0 ; } /* costi0 and costi1 for STI transistor model (temperature-independent part) */ here->HSM2_costi00 = sqrt (2.0 * C_QE * pParam->HSM2_nsti * C_ESI ) ; here->HSM2_nsti_p2 = 1.0 / ( pParam->HSM2_nsti * pParam->HSM2_nsti ) ; /* Velocity Temperature Dependence (Temperature-dependent part will be multiplied later.) */ here->HSM2_vmax0 = (1.0e0 + (model->HSM2_vover / pow (LG, model->HSM2_voverp))) * (1.0e0 + (model->HSM2_vovers / pow (WL, model->HSM2_voversp))) ; /* 2 phi_B (temperature-independent) */ /* @300K, with pocket */ here->HSM2_pb20 = 2.0e0 / C_b300 * log (Nsub / C_Nin0) ; /* @300K, w/o pocket */ here->HSM2_pb2c = 2.0e0 / C_b300 * log (here->HSM2_nsubc / C_Nin0) ; /* constant for Poly depletion */ here->HSM2_cnstpgd = pow ( 1e0 + 1e0 / LG , model->HSM2_pgd4 ) * pParam->HSM2_pgd1 ; /* Gate resistance */ if ( here->HSM2_corg == 1 ) { T1 = here->HSM2_xgw + Weff / (3.0e0 * here->HSM2_ngcon); T2 = Lgate - here->HSM2_xgl; here->HSM2_grg = model->HSM2_rshg * T1 / (here->HSM2_ngcon * T2 * here->HSM2_nf); if (here->HSM2_grg > 1.0e-3) here->HSM2_grg = here->HSM2_m / here->HSM2_grg; else { here->HSM2_grg = here->HSM2_m * 1.0e3; if(model->HSM2_coerrrep) printf("warning(HiSIM2): The gate conductance reset to 1.0e3 mho.\n"); } } /* Process source/drain series resistamce */ here->HSM2_rd = 0.0; if ( model->HSM2_rsh > 0.0 ) { here->HSM2_rd = here->HSM2_rd + model->HSM2_rsh * here->HSM2_nrd ; } if ( model->HSM2_rd > 0.0 ) { here->HSM2_rd = here->HSM2_rd + model->HSM2_rd / here->HSM2_weff_nf ; } here->HSM2_rs = 0.0; if ( model->HSM2_rsh > 0.0 ) { here->HSM2_rs = here->HSM2_rs + model->HSM2_rsh * here->HSM2_nrs ; } if ( model->HSM2_rs > 0.0 ) { here->HSM2_rs = here->HSM2_rs + model->HSM2_rs / here->HSM2_weff_nf ; } if (model->HSM2_corsrd < 0) { if ( here->HSM2_rd > 0.0 ) { here->HSM2drainConductance = here->HSM2_m / here->HSM2_rd ; } else { here->HSM2drainConductance = 0.0; } if ( here->HSM2_rs > 0.0 ) { here->HSM2sourceConductance = here->HSM2_m / here->HSM2_rs ; } else { here->HSM2sourceConductance = 0.0; } } else if (model->HSM2_corsrd > 0) { here->HSM2drainConductance = 0.0 ; here->HSM2sourceConductance = 0.0 ; if ( here->HSM2_rd > 0.0 && model->HSM2_cothrml != 0 ) { here->HSM2internalGd = here->HSM2_m / here->HSM2_rd ; } else { here->HSM2internalGd = 0.0; } if ( here->HSM2_rs > 0.0 && model->HSM2_cothrml != 0 ) { here->HSM2internalGs = here->HSM2_m / here->HSM2_rs ; } else { here->HSM2internalGs = 0.0; } } else { here->HSM2drainConductance = 0.0 ; here->HSM2sourceConductance = 0.0 ; } /* Body resistance */ if ( here->HSM2_corbnet == 1 ) { if (here->HSM2_rbdb < 1.0e-3) here->HSM2_grbdb = here->HSM2_m * 1.0e3 ; /* in mho */ else here->HSM2_grbdb = here->HSM2_m * ( model->HSM2_gbmin + 1.0 / here->HSM2_rbdb ) ; if (here->HSM2_rbpb < 1.0e-3) here->HSM2_grbpb = here->HSM2_m * 1.0e3 ; else here->HSM2_grbpb = here->HSM2_m * ( model->HSM2_gbmin + 1.0 / here->HSM2_rbpb ) ; if (here->HSM2_rbps < 1.0e-3) here->HSM2_grbps = here->HSM2_m * 1.0e3 ; else here->HSM2_grbps = here->HSM2_m * ( model->HSM2_gbmin + 1.0 / here->HSM2_rbps ) ; if (here->HSM2_rbsb < 1.0e-3) here->HSM2_grbsb = here->HSM2_m * 1.0e3 ; else here->HSM2_grbsb = here->HSM2_m * ( model->HSM2_gbmin + 1.0 / here->HSM2_rbsb ) ; if (here->HSM2_rbpd < 1.0e-3) here->HSM2_grbpd = here->HSM2_m * 1.0e3 ; else here->HSM2_grbpd = here->HSM2_m * ( model->HSM2_gbmin + 1.0 / here->HSM2_rbpd ) ; } /* Vdseff */ if ( model->HSM2_coddlt == 0 ) { T1 = model->HSM2_ddltslp * LG + model->HSM2_ddltict ; here->HSM2_ddlt = T1 * model->HSM2_ddltmax / ( T1 + model->HSM2_ddltmax ) + 1.0 ; } else { /* fix in version 2.80 */ T1 = model->HSM2_ddltslp * LG ; here->HSM2_ddlt = T1 * model->HSM2_ddltmax / ( T1 + model->HSM2_ddltmax ) + model->HSM2_ddltict + small ; } /* Isub */ T2 = pow( Weff , model->HSM2_svgswp ) ; here->HSM2_vg2const = pParam->HSM2_svgs * ( 1.0e0 + modelMKS->HSM2_svgsl / pow( here->HSM2_lgate , model->HSM2_svgslp ) ) * ( T2 / ( T2 + modelMKS->HSM2_svgsw ) ) ; here->HSM2_xvbs = pParam->HSM2_svbs * ( 1.0e0 + modelMKS->HSM2_svbsl / pow( here->HSM2_lgate , model->HSM2_svbslp ) ) ; here->HSM2_xgate = modelMKS->HSM2_slg * ( 1.0 + modelMKS->HSM2_slgl / pow( here->HSM2_lgate , model->HSM2_slglp ) ) ; here->HSM2_xsub1 = pParam->HSM2_sub1 * ( 1.0 + modelMKS->HSM2_sub1l / pow( here->HSM2_lgate , model->HSM2_sub1lp ) ) ; here->HSM2_xsub2 = pParam->HSM2_sub2 * ( 1.0 + modelMKS->HSM2_sub2l / here->HSM2_lgate ) ; /* Fringing capacitance */ here->HSM2_cfrng = C_EOX / ( C_Pi / 2.0e0 ) * here->HSM2_weff_nf * log( 1.0e0 + model->HSM2_tpoly / model->HSM2_tox ) ; /* Additional term of lateral-field-induced capacitance */ here->HSM2_cqyb0 = C_m2um * here->HSM2_weff_nf * model->HSM2_xqy1 / pow( LG , model->HSM2_xqy2 ) ; /* Parasitic component of the channel current */ GDLD = model->HSM2_gdld * C_m2um ; here->HSM2_ptl0 = model->HSM2_ptl * pow( LG , - model->HSM2_ptlp ) ; here->HSM2_pt40 = model->HSM2_pt4 * pow( LG , - model->HSM2_pt4p ) ; here->HSM2_gdl0 = model->HSM2_gdl * pow( LG + GDLD , - model->HSM2_gdlp ) ; /*-----------------------------------------------------------* * Temperature dependent constants. *-----------------*/ TTEMP = ckt->CKTtemp ; if ( here->HSM2_temp_Given ) TTEMP = here->HSM2_ktemp ; if ( here->HSM2_dtemp_Given ) { TTEMP = TTEMP + here->HSM2_dtemp ; here->HSM2_ktemp = TTEMP ; } /* Band gap */ T1 = TTEMP - model->HSM2_ktnom ; T2 = TTEMP * TTEMP - model->HSM2_ktnom * model->HSM2_ktnom ; here->HSM2_eg = Eg = here->HSM2_egtnom - pParam->HSM2_bgtmp1 * T1 - pParam->HSM2_bgtmp2 * T2 ; here->HSM2_sqrt_eg = sqrt( Eg ) ; T1 = 1.0 / TTEMP ; T2 = 1.0 / model->HSM2_ktnom ; T3 = here->HSM2_egtnom + model->HSM2_egig + model->HSM2_igtemp2 * ( T1 - T2 ) + model->HSM2_igtemp3 * ( T1 * T1 - T2 * T2 ) ; here->HSM2_egp12 = sqrt ( T3 ) ; here->HSM2_egp32 = T3 * here->HSM2_egp12 ; /* Inverse of the thermal voltage */ here->HSM2_beta = beta = C_QE / (C_KB * TTEMP) ; here->HSM2_beta_inv = 1.0 / beta ; here->HSM2_beta2 = beta * beta ; here->HSM2_betatnom = C_QE / (C_KB * model->HSM2_ktnom) ; Tratio = TTEMP / model->HSM2_ktnom ; /* Intrinsic carrier concentration */ here->HSM2_nin = Nin = C_Nin0 * pow (Tratio, 1.5e0) * exp (- Eg / 2.0e0 * beta + here->HSM2_egtnom / 2.0e0 * here->HSM2_betatnom) ; /* Phonon Scattering (temperature-dependent part) */ T1 = pow (Tratio, pParam->HSM2_muetmp) ; here->HSM2_mphn0 = T1 / here->HSM2_mueph ; here->HSM2_mphn1 = here->HSM2_mphn0 * model->HSM2_mueph0 ; /* Pocket Overlap (temperature-dependent part) */ here->HSM2_ptovr = here->HSM2_ptovr0 / beta ; /* Velocity Temperature Dependence */ here->HSM2_vmax = here->HSM2_vmax0 * pParam->HSM2_vmax / (1.8 + 0.4 * Tratio + 0.1 * Tratio * Tratio - pParam->HSM2_vtmp * (1.0e0 - Tratio)) ; /* Coefficient of the F function for bulk charge */ /* Depletion mode MOSFET */ if( model->HSM2_codep ) { T3 = pow(here->HSM2_lg,model->HSM2_ndepmlp) ; here->HSM2_ndepm = modelMKS->HSM2_ndepm * ( 1.0 + model->HSM2_ndepml / T3 ); if ( here->HSM2_ndepm < 1e+21 ) { here->HSM2_ndepm = 1e+21 ; } here->HSM2_Pb2n = 2.0/beta*log(here->HSM2_ndepm/Nin) ; here->HSM2_Vbipn = 1.0/beta*log(here->HSM2_ndepm*here->HSM2_nsub/Nin/Nin) ; here->HSM2_cnst0 = sqrt ( 2.0 * C_ESI * C_QE * here->HSM2_ndepm / beta ) ; here->HSM2_cnst1 = Nin*Nin/here->HSM2_ndepm/here->HSM2_ndepm ; T1 = Fn_Pow(Tratio, model->HSM2_depmuetmp) ; here->HSM2_depmphn0 = T1 / model->HSM2_depmueph1 ; here->HSM2_depmphn1 = here->HSM2_depmphn0 * model->HSM2_depmueph0 ; // T0 = 1.8 + 0.4 * Tratio + 0.1 * Tratio * Tratio - model->HSM2_depvtmp * ( 1.0 - Tratio ) ; T0 = 1.0 ; // ignore DEPVTMP in HiSIM2 here->HSM2_depvmax = model->HSM2_depvmax / T0 / C_m2cm ; // LG dependence DEPVMAX T3 = pow( here->HSM2_lg, model->HSM2_depvmaxlp ) ; here->HSM2_depvmax = here->HSM2_depvmax * ( 1.0 + model->HSM2_depvmaxl / T3 ) ; if( here->HSM2_depvmax < 0.0 ) { here->HSM2_depvmax = 0.0; } // LG dependence DEPLEAK T3 = pow( here->HSM2_lg, model->HSM2_depleaklp ) ; here->HSM2_depleak = model->HSM2_depleak * ( 1.0 + model->HSM2_depleakl / T3 ) ; if( here->HSM2_depleak < 0.0 ) { here->HSM2_depleak = 0.0; } // LG dependence DEPMUE0 & DEPMUE1 T3 = pow( here->HSM2_lg, model->HSM2_depmue0lp ) ; here->HSM2_depmue0 = model->HSM2_depmue0 * ( 1.0 + model->HSM2_depmue0l / T3 ) ; if( here->HSM2_depmue0 < 1.0 ) { here->HSM2_depmue0 = 1.0; } T3 = pow( here->HSM2_lg, model->HSM2_depmue1lp ) ; here->HSM2_depmue1 = model->HSM2_depmue1 * ( 1.0 + model->HSM2_depmue1l / T3 ) ; if( here->HSM2_depmue1 < 0.0 ) { here->HSM2_depmue1 = 0.0; } // LG dependence DEPMUEBACK0 & DEPMUEBACK1 T3 = pow( here->HSM2_lg, model->HSM2_depmueback0lp ) ; here->HSM2_depmueback0 = model->HSM2_depmueback0 * ( 1.0 + model->HSM2_depmueback0l / T3 ) ; if( here->HSM2_depmueback0 < 0.0 ) { here->HSM2_depmueback0 = 0.0; } T3 = pow( here->HSM2_lg, model->HSM2_depmueback1lp ) ; here->HSM2_depmueback1 = model->HSM2_depmueback1 * ( 1.0 + model->HSM2_depmueback1l / T3 ) ; if( here->HSM2_depmueback1 < 0.0 ) { here->HSM2_depmueback1 = 0.0; } // LG dependence DEPVDSEF1 & DEPVDSEF2 T3 = pow( here->HSM2_lg, model->HSM2_depvdsef1lp ) ; here->HSM2_depvdsef1 = model->HSM2_depvdsef1 * ( 1.0 + model->HSM2_depvdsef1l / T3 ) ; if( here->HSM2_depvdsef1 < 0.0 ) { here->HSM2_depvdsef1 = 0.0; } T3 = pow( here->HSM2_lg, model->HSM2_depvdsef2lp ) ; here->HSM2_depvdsef2 = model->HSM2_depvdsef2 * ( 1.0 + model->HSM2_depvdsef2l / T3 ) ; if( here->HSM2_depvdsef2 < 0.1 ) { here->HSM2_depvdsef2 = 0.1; } } else { /* Normal mode MOSFET */ here->HSM2_cnst0 = sqrt ( 2.0 * C_ESI * C_QE * here->HSM2_nsub / beta ) ; /* cnst1: n_{p0} / p_{p0} */ T1 = Nin / here->HSM2_nsub ; here->HSM2_cnst1 = T1 * T1 ; } /* 2 phi_B (temperature-dependent) */ /* @temp, with pocket */ here->HSM2_pb2 = 2.0e0 / beta * log (here->HSM2_nsub / Nin) ; if ( pParam->HSM2_nover != 0.0) { here->HSM2_pb2over = 2.0 / beta * log( pParam->HSM2_nover / Nin ) ; here->HSM2_cnst0over = sqrt ( 2.0 * C_ESI * C_QE * pParam->HSM2_nover / beta ) ; }else { here->HSM2_pb2over = 0.0 ; here->HSM2_cnst0over = 0.0 ; } /* Depletion Width */ T1 = 2.0e0 * C_ESI / C_QE ; here->HSM2_wdpl = sqrt ( T1 / here->HSM2_nsub ) ; here->HSM2_wdplp = sqrt( T1 / ( here->HSM2_nsubp ) ) ; /* for substrate-source/drain junction diode. */ js = pParam->HSM2_js0 * exp ((here->HSM2_egtnom * here->HSM2_betatnom - Eg * beta + model->HSM2_xti * log (Tratio)) / pParam->HSM2_nj) ; jssw = pParam->HSM2_js0sw * exp ((here->HSM2_egtnom * here->HSM2_betatnom - Eg * beta + model->HSM2_xti * log (Tratio)) / model->HSM2_njsw) ; js2 = pParam->HSM2_js0 * exp ((here->HSM2_egtnom * here->HSM2_betatnom - Eg * beta + model->HSM2_xti2 * log (Tratio)) / pParam->HSM2_nj) ; jssw2 = pParam->HSM2_js0sw * exp ((here->HSM2_egtnom * here->HSM2_betatnom - Eg * beta + model->HSM2_xti2 * log (Tratio)) / model->HSM2_njsw) ; here->HSM2_isbd = here->HSM2_ad * js + here->HSM2_pd * jssw ; here->HSM2_isbd2 = here->HSM2_ad * js2 + here->HSM2_pd * jssw2 ; here->HSM2_isbs = here->HSM2_as * js + here->HSM2_ps * jssw ; here->HSM2_isbs2 = here->HSM2_as * js2 + here->HSM2_ps * jssw2 ; here->HSM2_vbdt = pParam->HSM2_nj / beta * log (pParam->HSM2_vdiffj * (Tratio) * (Tratio) / (here->HSM2_isbd + 1.0e-50) + 1) ; here->HSM2_vbst = pParam->HSM2_nj / beta * log (pParam->HSM2_vdiffj * (Tratio) * (Tratio) / (here->HSM2_isbs + 1.0e-50) + 1) ; here->HSM2_exptemp = exp (((Tratio) - 1) * model->HSM2_ctemp) ; here->HSM2_jd_nvtm_inv = 1.0 / ( pParam->HSM2_nj / beta ) ; here->HSM2_jd_expcd = exp (here->HSM2_vbdt * here->HSM2_jd_nvtm_inv ) ; here->HSM2_jd_expcs = exp (here->HSM2_vbst * here->HSM2_jd_nvtm_inv ) ; /* costi0 and costi1 for STI transistor model (temperature-dependent part) */ here->HSM2_costi0 = here->HSM2_costi00 * sqrt(here->HSM2_beta_inv) ; here->HSM2_costi0_p2 = here->HSM2_costi0 * here->HSM2_costi0 ; here->HSM2_costi1 = here->HSM2_nin * here->HSM2_nin * here->HSM2_nsti_p2 ; /* check if SC3 is too large */ if (pParam->HSM2_sc3 && model->HSM2_sc3Vbs < 0.0) { beta = here->HSM2_beta ; beta_inv = here->HSM2_beta_inv ; Weff = here->HSM2_weff ; Vfb = pParam->HSM2_vfbc ; Pb20 = here->HSM2_pb20 ; cnst0 = here->HSM2_cnst0 ; cnst1 = here->HSM2_cnst1 ; c_eox = here->HSM2_cecox ; Tox = model->HSM2_tox ; Cox = c_eox / Tox ; Cox_inv = 1.0 / Cox ; fac1 = cnst0 * Cox_inv ; Vgs_min = model->HSM2_type * model->HSM2_Vgsmin ; sc3Vbs = model->HSM2_sc3Vbs ; sc3Vgs = 2.0 ; Ps0_min = 2.0 * beta_inv * log(-Vgs_min/fac1) ; /* approximate solution of Poisson equation for large Vgs and negative Vbs (3 iterations!)*/ Vgp = sc3Vgs - Vfb; Denom = fac1*sqrt(cnst1); Ps0 = 2.0 * beta_inv * log(Vgp/Denom); Ps0 = 2.0 * beta_inv * log((Vgp-Ps0)/Denom); Ps0 = 2.0 * beta_inv * log((Vgp-Ps0)/Denom); Ps0 = 2.0 * beta_inv * log((Vgp-Ps0)/Denom); Ps0_dVbs = 0.0; T1 = here->HSM2_2qnsub_esi ; Qb0 = sqrt ( T1 ) ; Vthp = Ps0 + Vfb + Qb0 * Cox_inv + here->HSM2_ptovr ; T1 = 2.0 * C_QE * here->HSM2_nsubc * C_ESI ; T2 = sqrt( T1 ) ; Vth0 = Ps0 + Vfb + T2 * Cox_inv ; T1 = C_ESI * Cox_inv ; T2 = here->HSM2_wdplp ; T4 = 1.0e0 / ( model->HSM2_lp * model->HSM2_lp ) ; T3 = 2.0 * ( model->HSM2_vbi - Pb20 ) * T2 * T4 ; T5 = T1 * T3 ; T6 = Ps0 - sc3Vbs ; T6_dVb = Ps0_dVbs - 1.0 ; dVth0 = T5 * sqrt( T6 ) ; dVth0_dVb = T5 * 0.5 / sqrt( T6 ) * T6_dVb; T1 = Vthp - Vth0 ; T9 = Ps0 - sc3Vbs ; T9_dVb = Ps0_dVbs - 1.0 ; T3 = pParam->HSM2_scp1 + pParam->HSM2_scp3 * T9 / model->HSM2_lp; T3_dVb = pParam->HSM2_scp3 * T9_dVb / model->HSM2_lp ; dVthLP = T1 * dVth0 * T3 ; dVthLP_dVb = T1 * dVth0_dVb * T3 + T1 * dVth0 * T3_dVb; T3 = here->HSM2_lgate - model->HSM2_parl2 ; T4 = 1.0e0 / ( T3 * T3 ) ; T0 = C_ESI * here->HSM2_wdpl * 2.0e0 * ( model->HSM2_vbi - Pb20 ) * T4 ; T2 = T0 * Cox_inv ; T5 = pParam->HSM2_sc3 / here->HSM2_lgate ; T6 = pParam->HSM2_sc1 + T5 * ( Ps0 - sc3Vbs ) ; T1 = T6 ; A = T2 * T1 ; T9 = Ps0 - sc3Vbs + Ps0_min ; T9_dVb = Ps0_dVbs - 1.0 ; T8 = sqrt( T9 ) ; T8_dVb = 0.5 * T9_dVb / T8 ; dVthSC = A * T8 ; T1 = 1.0 / Cox ; T3 = 1.0 / ( Cox + pParam->HSM2_wfc / Weff ) ; T5 = T1 - T3 ; dVthW = Qb0 * T5 + pParam->HSM2_wvth0 / here->HSM2_wg ; dVth = dVthSC + dVthLP + dVthW + here->HSM2_dVthsm ; dPpg = 0.0 ; Vgp = sc3Vgs - Vfb + dVth - dPpg ; /* Recalculation of Ps0, using more accurate Vgp */ Ps0 = 2.0 * beta_inv * log(Vgp/Denom); Ps0 = 2.0 * beta_inv * log((Vgp-Ps0)/Denom); Ps0 = 2.0 * beta_inv * log((Vgp-Ps0)/Denom); Ps0 = 2.0 * beta_inv * log((Vgp-Ps0)/Denom); term1 = Vgp - Ps0; term2 = sqrt(beta*(Ps0-sc3Vbs)-1.0); term3 = term1 + fac1 * term2; term4 = cnst1 * exp(beta*Ps0); limVgp_dVbs = - beta * (term3 + 0.5*fac1 * term4/term2) / (2.0*term1/fac1/fac1*term3 - term4); T2 = T0 * Cox_inv ; sc3lim = here->HSM2_lgate / T2 * (limVgp_dVbs - dVthLP_dVb - T2*pParam->HSM2_sc1*T8_dVb) / ((Ps0-sc3Vbs)*T8_dVb +(Ps0_dVbs-1.0)*T8); if (sc3lim < 1.0e-20) sc3lim = 1e-20 ; if (sc3lim < pParam->HSM2_sc3 * 0.999) { pParam->HSM2_sc3 = sc3lim; } } } /* End of instance loop */ } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2soachk.c0000644000175000017500000003576513546075722022604 0ustar carstencarsten/********** Copyright 2013 Dietmar Warning. All rights reserved. Author: 2013 Dietmar Warning **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "hsm2def.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/cpdefs.h" int HSM2soaCheck(CKTcircuit *ckt, GENmodel *inModel) { HSM2model *model = (HSM2model *) inModel; HSM2instance *here; double vgs, vgd, vgb, vds, vbs, vbd; /* actual mos voltages */ int maxwarns; static int warns_vgs = 0, warns_vgd = 0, warns_vgb = 0, warns_vds = 0, warns_vbs = 0, warns_vbd = 0; if (!ckt) { warns_vgs = 0; warns_vgd = 0; warns_vgb = 0; warns_vds = 0; warns_vbs = 0; warns_vbd = 0; return OK; } maxwarns = ckt->CKTsoaMaxWarns; for (; model; model = HSM2nextModel(model)) { for (here = HSM2instances(model); here; here = HSM2nextInstance(here)) { vgs = ckt->CKTrhsOld [here->HSM2gNode] - ckt->CKTrhsOld [here->HSM2sNodePrime]; vgd = ckt->CKTrhsOld [here->HSM2gNode] - ckt->CKTrhsOld [here->HSM2dNodePrime]; vgb = ckt->CKTrhsOld [here->HSM2gNode] - ckt->CKTrhsOld [here->HSM2bNodePrime]; vds = ckt->CKTrhsOld [here->HSM2dNode] - ckt->CKTrhsOld [here->HSM2sNodePrime]; vbs = ckt->CKTrhsOld [here->HSM2bNode] - ckt->CKTrhsOld [here->HSM2sNodePrime]; vbd = ckt->CKTrhsOld [here->HSM2bNode] - ckt->CKTrhsOld [here->HSM2dNodePrime]; if (!model->HSM2vgsrMaxGiven) { if (fabs(vgs) > model->HSM2vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->HSM2vgsMax); warns_vgs++; } if (!model->HSM2vgbMaxGiven) { if (fabs(vgb) > model->HSM2vgsMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgs_max=%g\n", vgb, model->HSM2vgsMax); warns_vgb++; } } else { if (fabs(vgb) > model->HSM2vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->HSM2vgbMax); warns_vgb++; } } } else { if (model->HSM2_type > 0) { if (vgs > model->HSM2vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->HSM2vgsMax); warns_vgs++; } if (-1*vgs > model->HSM2vgsrMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgsr_max=%g\n", vgs, model->HSM2vgsrMax); warns_vgs++; } } else { if (vgs > model->HSM2vgsrMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgsr_max=%g\n", vgs, model->HSM2vgsrMax); warns_vgs++; } if (-1*vgs > model->HSM2vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->HSM2vgsMax); warns_vgs++; } } } if (!model->HSM2vgdrMaxGiven) { if (fabs(vgd) > model->HSM2vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->HSM2vgdMax); warns_vgd++; } } else { if (model->HSM2_type > 0) { if (vgd > model->HSM2vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->HSM2vgdMax); warns_vgd++; } if (-1*vgd > model->HSM2vgdrMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgdr_max=%g\n", vgd, model->HSM2vgdrMax); warns_vgd++; } } else { if (vgd > model->HSM2vgdrMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgdr_max=%g\n", vgd, model->HSM2vgdrMax); warns_vgd++; } if (-1*vgd > model->HSM2vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->HSM2vgdMax); warns_vgd++; } } } if (fabs(vds) > model->HSM2vdsMax) if (warns_vds < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vds=%g has exceeded Vds_max=%g\n", vds, model->HSM2vdsMax); warns_vds++; } if (!model->HSM2vgbrMaxGiven) { if (fabs(vgb) > model->HSM2vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->HSM2vgbMax); warns_vgb++; } } else { if (model->HSM2_type > 0) { if (vgb > model->HSM2vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->HSM2vgbMax); warns_vgb++; } if (-1*vgb > model->HSM2vgbrMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgbr_max=%g\n", vgb, model->HSM2vgbrMax); warns_vgb++; } } else { if (vgb > model->HSM2vgbrMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgbr_max=%g\n", vgb, model->HSM2vgbrMax); warns_vgb++; } if (-1*vgb > model->HSM2vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->HSM2vgbMax); warns_vgb++; } } } if (!model->HSM2vbsrMaxGiven) { if (!model->HSM2vbsMaxGiven) { if (fabs(vbs) > model->HSM2vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->HSM2vbdMax); warns_vbs++; } } else { if (fabs(vbs) > model->HSM2vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->HSM2vbsMax); warns_vbs++; } } } else { if (!model->HSM2vbsMaxGiven) { if (model->HSM2_type > 0) { if (vbs > model->HSM2vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->HSM2vbdMax); warns_vbs++; } if (-1*vbs > model->HSM2vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->HSM2vbsrMax); warns_vbs++; } } else { if (vbs > model->HSM2vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->HSM2vbsrMax); warns_vbs++; } if (-1*vbs > model->HSM2vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->HSM2vbdMax); warns_vbs++; } } } else { if (model->HSM2_type > 0) { if (vbs > model->HSM2vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->HSM2vbsMax); warns_vbs++; } if (-1*vbs > model->HSM2vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->HSM2vbsrMax); warns_vbs++; } } else { if (vbs > model->HSM2vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->HSM2vbsrMax); warns_vbs++; } if (-1*vbs > model->HSM2vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->HSM2vbsMax); warns_vbs++; } } } } if (!model->HSM2vbdrMaxGiven) { if (fabs(vbd) > model->HSM2vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->HSM2vbdMax); warns_vbd++; } } else { if (model->HSM2_type > 0) { if (vbd > model->HSM2vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->HSM2vbdMax); warns_vbd++; } if (-1*vbd > model->HSM2vbdrMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbdr_max=%g\n", vbd, model->HSM2vbdrMax); warns_vbd++; } } else { if (vbd > model->HSM2vbdrMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbdr_max=%g\n", vbd, model->HSM2vbdrMax); warns_vbd++; } if (-1*vbd > model->HSM2vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->HSM2vbdMax); warns_vbd++; } } } } } return OK; } tmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2init.h0000644000175000017500000000037413546075722022270 0ustar carstencarsten#ifndef _HISIM2INIT_H #define _HISIM2INIT_H extern IFparm HSM2pTable[ ]; extern IFparm HSM2mPTable[ ]; extern char *HSM2names[ ]; extern int HSM2pTSize; extern int HSM2mPTSize; extern int HSM2nSize; extern int HSM2iSize; extern int HSM2mSize; #endif tmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2cvtest.c0000644000175000017500000001510213546075722022623 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM ( VERSION : 2 SUBVERSION : 8 REVISION : 0 ) FILE : hsm2cvtest.c Date : 2014.6.5 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HiSIM2 Distribution Statement and Copyright Notice" attached to HiSIM2 model. -----HiSIM2 Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaim all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." *************************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "hsm2def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HSM2convTest( GENmodel *inModel, CKTcircuit *ckt) { HSM2model *model = (HSM2model*)inModel; HSM2instance *here; double delvbd, delvbs, delvds, delvgd, delvgs, vbd, vbs, vds; double cd, cdhat, tol0, tol1, tol2, tol3, tol4, vgd, vgdo, vgs; double Ibtot, cbhat, Igstot, cgshat, Igdtot, cgdhat, Igbtot, cgbhat; /* loop through all the HSM2 device models */ for ( ; model != NULL; model = HSM2nextModel(model)) { /* loop through all the instances of the model */ for ( here = HSM2instances(model); here != NULL ; here = HSM2nextInstance(here)) { vbs = model->HSM2_type * (*(ckt->CKTrhsOld+here->HSM2bNode) - *(ckt->CKTrhsOld+here->HSM2sNodePrime)); vgs = model->HSM2_type * (*(ckt->CKTrhsOld+here->HSM2gNode) - *(ckt->CKTrhsOld+here->HSM2sNodePrime)); vds = model->HSM2_type * (*(ckt->CKTrhsOld+here->HSM2dNodePrime) - *(ckt->CKTrhsOld+here->HSM2sNodePrime)); vbd = vbs - vds; vgd = vgs - vds; vgdo = *(ckt->CKTstate0 + here->HSM2vgs) - *(ckt->CKTstate0 + here->HSM2vds); delvbs = vbs - *(ckt->CKTstate0 + here->HSM2vbs); delvbd = vbd - *(ckt->CKTstate0 + here->HSM2vbd); delvgs = vgs - *(ckt->CKTstate0 + here->HSM2vgs); delvds = vds - *(ckt->CKTstate0 + here->HSM2vds); delvgd = vgd - vgdo; cd = here->HSM2_ids - here->HSM2_ibd; if ( here->HSM2_mode >= 0 ) { cd += here->HSM2_isub + here->HSM2_igidl; cdhat = cd - here->HSM2_gbd * delvbd + (here->HSM2_gmbs + here->HSM2_gbbs + here->HSM2_gigidlbs) * delvbs + (here->HSM2_gm + here->HSM2_gbgs + here->HSM2_gigidlgs) * delvgs + (here->HSM2_gds + here->HSM2_gbds + here->HSM2_gigidlds) * delvds; Ibtot = here->HSM2_ibs + here->HSM2_ibd - here->HSM2_isub - here->HSM2_igidl - here->HSM2_igisl; cbhat = Ibtot + here->HSM2_gbd * delvbd + (here->HSM2_gbs - here->HSM2_gbbs - here->HSM2_gigidlbs) * delvbs - (here->HSM2_gbgs + here->HSM2_gigidlgs) * delvgs - (here->HSM2_gbds + here->HSM2_gigidlds) * delvds - here->HSM2_gigislgd * delvgd - here->HSM2_gigislbd * delvbd + here->HSM2_gigislsd * delvds; Igstot = here->HSM2_igs; cgshat = Igstot + here->HSM2_gigsg * delvgs + here->HSM2_gigsd * delvds + here->HSM2_gigsb * delvbs; Igdtot = here->HSM2_igd; cgdhat = Igdtot + here->HSM2_gigdg * delvgs + here->HSM2_gigdd * delvds + here->HSM2_gigdb * delvbs; Igbtot = here->HSM2_igb; cgbhat = Igbtot + here->HSM2_gigbg * delvgs + here->HSM2_gigbd * delvds + here->HSM2_gigbb * delvbs; } else { cd -= here->HSM2_igidl; cdhat = cd + (here->HSM2_gmbs + here->HSM2_gbd - here->HSM2_gigidlbs) * delvbd + (here->HSM2_gm - here->HSM2_gigidlgs) * delvgd + (- here->HSM2_gds + here->HSM2_gigidlds) * delvds; Ibtot = here->HSM2_ibs + here->HSM2_ibd - here->HSM2_isub - here->HSM2_igidl - here->HSM2_igisl; cbhat = Ibtot + here->HSM2_gbs * delvbs + (here->HSM2_gbd - here->HSM2_gbbs - here->HSM2_gigidlbs) * delvbd - (here->HSM2_gbgs + here->HSM2_gigidlgs) * delvgd + (here->HSM2_gbds + here->HSM2_gigidlds) * delvds - here->HSM2_gigislgd * delvgd - here->HSM2_gigislbd * delvbd + here->HSM2_gigislsd * delvds; Igbtot = here->HSM2_igb; cgbhat = Igbtot + here->HSM2_gigbg * delvgd - here->HSM2_gigbs * delvds + here->HSM2_gigbb * delvbd; Igstot = here->HSM2_igs; cgshat = Igstot + here->HSM2_gigsg * delvgd - here->HSM2_gigss * delvds + here->HSM2_gigsb * delvbd; Igdtot = here->HSM2_igd; cgdhat = Igdtot + here->HSM2_gigdg * delvgd - here->HSM2_gigds * delvds + here->HSM2_gigdb * delvbd; } /* * check convergence */ if ( here->HSM2_off == 0 || !(ckt->CKTmode & MODEINITFIX) ) { tol0 = ckt->CKTreltol * MAX(fabs(cdhat), fabs(cd)) + ckt->CKTabstol; tol1 = ckt->CKTreltol * MAX(fabs(cgshat), fabs(Igstot)) + ckt->CKTabstol; tol2 = ckt->CKTreltol * MAX(fabs(cgdhat), fabs(Igdtot)) + ckt->CKTabstol; tol3 = ckt->CKTreltol * MAX(fabs(cgbhat), fabs(Igbtot)) + ckt->CKTabstol; tol4 = ckt->CKTreltol * MAX(fabs(cbhat), fabs(Ibtot)) + ckt->CKTabstol; if ( (fabs(cdhat - cd) >= tol0) || (fabs(cgshat - Igstot) >= tol1) || (fabs(cgdhat - Igdtot) >= tol2) || (fabs(cgbhat - Igbtot) >= tol3) || (fabs(cbhat - Ibtot) >= tol4) ) { ckt->CKTnoncon++; return(OK); } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2getic.c0000644000175000017500000000607113546075722022413 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM ( VERSION : 2 SUBVERSION : 8 REVISION : 0 ) FILE : hsm2getic.c Date : 2014.6.5 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HiSIM2 Distribution Statement and Copyright Notice" attached to HiSIM2 model. -----HiSIM2 Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaim all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." *************************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "hsm2def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HSM2getic( GENmodel *inModel, CKTcircuit *ckt) { HSM2model *model = (HSM2model*)inModel; HSM2instance *here; /* * grab initial conditions out of rhs array. User specified, so use * external nodes to get values */ for ( ;model ;model = HSM2nextModel(model)) { for ( here = HSM2instances(model); here ;here = HSM2nextInstance(here)) { if (!here->HSM2_icVBS_Given) { here->HSM2_icVBS = *(ckt->CKTrhs + here->HSM2bNode) - *(ckt->CKTrhs + here->HSM2sNode); } if (!here->HSM2_icVDS_Given) { here->HSM2_icVDS = *(ckt->CKTrhs + here->HSM2dNode) - *(ckt->CKTrhs + here->HSM2sNode); } if (!here->HSM2_icVGS_Given) { here->HSM2_icVGS = *(ckt->CKTrhs + here->HSM2gNode) - *(ckt->CKTrhs + here->HSM2sNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2mpar.c0000644000175000017500000017235013546075722022263 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM ( VERSION : 2 SUBVERSION : 8 REVISION : 0 ) FILE : hsm2mpar.c Date : 2014.6.5 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HiSIM2 Distribution Statement and Copyright Notice" attached to HiSIM2 model. -----HiSIM2 Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaim all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." *************************************************************************/ #include "ngspice/ngspice.h" #include "hsm2def.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HSM2mParam( int param, IFvalue *value, GENmodel *inMod) { HSM2model *mod = (HSM2model*)inMod; switch (param) { case HSM2_MOD_NMOS : if (value->iValue) { mod->HSM2_type = 1; mod->HSM2_type_Given = TRUE; } break; case HSM2_MOD_PMOS : if (value->iValue) { mod->HSM2_type = - 1; mod->HSM2_type_Given = TRUE; } break; case HSM2_MOD_LEVEL: mod->HSM2_level = value->iValue; mod->HSM2_level_Given = TRUE; break; case HSM2_MOD_INFO: mod->HSM2_info = value->iValue; mod->HSM2_info_Given = TRUE; break; case HSM2_MOD_NOISE: mod->HSM2_noise = value->iValue; mod->HSM2_noise_Given = TRUE; break; case HSM2_MOD_VERSION: mod->HSM2_version = value->iValue; mod->HSM2_version_Given = TRUE; break; case HSM2_MOD_SHOW: mod->HSM2_show = value->iValue; mod->HSM2_show_Given = TRUE; break; case HSM2_MOD_CORSRD: mod->HSM2_corsrd = value->iValue; mod->HSM2_corsrd_Given = TRUE; break; case HSM2_MOD_CORG: mod->HSM2_corg = value->iValue; mod->HSM2_corg_Given = TRUE; break; case HSM2_MOD_COIPRV: mod->HSM2_coiprv = value->iValue; mod->HSM2_coiprv_Given = TRUE; break; case HSM2_MOD_COPPRV: mod->HSM2_copprv = value->iValue; mod->HSM2_copprv_Given = TRUE; break; case HSM2_MOD_COADOV: mod->HSM2_coadov = value->iValue; mod->HSM2_coadov_Given = TRUE; break; case HSM2_MOD_COISUB: mod->HSM2_coisub = value->iValue; mod->HSM2_coisub_Given = TRUE; break; case HSM2_MOD_COIIGS: mod->HSM2_coiigs = value->iValue; mod->HSM2_coiigs_Given = TRUE; break; case HSM2_MOD_COGIDL: mod->HSM2_cogidl = value->iValue; mod->HSM2_cogidl_Given = TRUE; break; case HSM2_MOD_COOVLP: mod->HSM2_coovlp = value->iValue; mod->HSM2_coovlp_Given = TRUE; break; case HSM2_MOD_COFLICK: mod->HSM2_coflick = value->iValue; mod->HSM2_coflick_Given = TRUE; break; case HSM2_MOD_COISTI: mod->HSM2_coisti = value->iValue; mod->HSM2_coisti_Given = TRUE; break; case HSM2_MOD_CONQS: /* HiSIM2 */ mod->HSM2_conqs = value->iValue; mod->HSM2_conqs_Given = TRUE; break; case HSM2_MOD_CORBNET: mod->HSM2_corbnet = value->iValue; mod->HSM2_corbnet_Given = TRUE; break; case HSM2_MOD_COTHRML: mod->HSM2_cothrml = value->iValue; mod->HSM2_cothrml_Given = TRUE; break; case HSM2_MOD_COIGN: mod->HSM2_coign = value->iValue; mod->HSM2_coign_Given = TRUE; break; case HSM2_MOD_CODFM: mod->HSM2_codfm = value->iValue; mod->HSM2_codfm_Given = TRUE; break; case HSM2_MOD_CORECIP: mod->HSM2_corecip = value->iValue; mod->HSM2_corecip_Given = TRUE; break; case HSM2_MOD_COQY: mod->HSM2_coqy = value->iValue; mod->HSM2_coqy_Given = TRUE; break; case HSM2_MOD_COQOVSM: mod->HSM2_coqovsm = value->iValue; mod->HSM2_coqovsm_Given = TRUE; break; case HSM2_MOD_COERRREP: mod->HSM2_coerrrep = value->iValue; mod->HSM2_coerrrep_Given = TRUE; break; case HSM2_MOD_CODEP: mod->HSM2_codep = value->iValue; mod->HSM2_codep_Given = TRUE; break; case HSM2_MOD_CODDLT: mod->HSM2_coddlt = value->iValue; mod->HSM2_coddlt_Given = TRUE; break; case HSM2_MOD_VMAX: mod->HSM2_vmax = value->rValue; mod->HSM2_vmax_Given = TRUE; break; case HSM2_MOD_BGTMP1: mod->HSM2_bgtmp1 = value->rValue; mod->HSM2_bgtmp1_Given = TRUE; break; case HSM2_MOD_BGTMP2: mod->HSM2_bgtmp2 = value->rValue; mod->HSM2_bgtmp2_Given = TRUE; break; case HSM2_MOD_EG0: mod->HSM2_eg0 = value->rValue; mod->HSM2_eg0_Given = TRUE; break; case HSM2_MOD_TOX: mod->HSM2_tox = value->rValue; mod->HSM2_tox_Given = TRUE; break; case HSM2_MOD_XLD: mod->HSM2_xld = value->rValue; mod->HSM2_xld_Given = TRUE; break; case HSM2_MOD_LOVER: mod->HSM2_lover = value->rValue; mod->HSM2_lover_Given = TRUE; break; case HSM2_MOD_DDLTMAX: /* Vdseff */ mod->HSM2_ddltmax = value->rValue; mod->HSM2_ddltmax_Given = TRUE; break; case HSM2_MOD_DDLTSLP: /* Vdseff */ mod->HSM2_ddltslp = value->rValue; mod->HSM2_ddltslp_Given = TRUE; break; case HSM2_MOD_DDLTICT: /* Vdseff */ mod->HSM2_ddltict = value->rValue; mod->HSM2_ddltict_Given = TRUE; break; case HSM2_MOD_VFBOVER: mod->HSM2_vfbover = value->rValue; mod->HSM2_vfbover_Given = TRUE; break; case HSM2_MOD_NOVER: mod->HSM2_nover = value->rValue; mod->HSM2_nover_Given = TRUE; break; case HSM2_MOD_XWD: mod->HSM2_xwd = value->rValue; mod->HSM2_xwd_Given = TRUE; break; case HSM2_MOD_XL: mod->HSM2_xl = value->rValue; mod->HSM2_xl_Given = TRUE; break; case HSM2_MOD_XW: mod->HSM2_xw = value->rValue; mod->HSM2_xw_Given = TRUE; break; case HSM2_MOD_SAREF: mod->HSM2_saref = value->rValue; mod->HSM2_saref_Given = TRUE; break; case HSM2_MOD_SBREF: mod->HSM2_sbref = value->rValue; mod->HSM2_sbref_Given = TRUE; break; case HSM2_MOD_LL: mod->HSM2_ll = value->rValue; mod->HSM2_ll_Given = TRUE; break; case HSM2_MOD_LLD: mod->HSM2_lld = value->rValue; mod->HSM2_lld_Given = TRUE; break; case HSM2_MOD_LLN: mod->HSM2_lln = value->rValue; mod->HSM2_lln_Given = TRUE; break; case HSM2_MOD_WL: mod->HSM2_wl = value->rValue; mod->HSM2_wl_Given = TRUE; break; case HSM2_MOD_WL1: mod->HSM2_wl1 = value->rValue; mod->HSM2_wl1_Given = TRUE; break; case HSM2_MOD_WL1P: mod->HSM2_wl1p = value->rValue; mod->HSM2_wl1p_Given = TRUE; break; case HSM2_MOD_WL2: mod->HSM2_wl2 = value->rValue; mod->HSM2_wl2_Given = TRUE; break; case HSM2_MOD_WL2P: mod->HSM2_wl2p = value->rValue; mod->HSM2_wl2p_Given = TRUE; break; case HSM2_MOD_WLD: mod->HSM2_wld = value->rValue; mod->HSM2_wld_Given = TRUE; break; case HSM2_MOD_WLN: mod->HSM2_wln = value->rValue; mod->HSM2_wln_Given = TRUE; break; case HSM2_MOD_XQY: mod->HSM2_xqy = value->rValue; mod->HSM2_xqy_Given = TRUE; break; case HSM2_MOD_XQY1: mod->HSM2_xqy1 = value->rValue; mod->HSM2_xqy1_Given = TRUE; break; case HSM2_MOD_XQY2: mod->HSM2_xqy2 = value->rValue; mod->HSM2_xqy2_Given = TRUE; break; case HSM2_MOD_QYRAT: mod->HSM2_qyrat = value->rValue; mod->HSM2_qyrat_Given = TRUE; break; case HSM2_MOD_RS: mod->HSM2_rs = value->rValue; mod->HSM2_rs_Given = TRUE; break; case HSM2_MOD_RD: mod->HSM2_rd = value->rValue; mod->HSM2_rd_Given = TRUE; break; case HSM2_MOD_RSH: mod->HSM2_rsh = value->rValue; mod->HSM2_rsh_Given = TRUE; break; case HSM2_MOD_RSHG: mod->HSM2_rshg = value->rValue; mod->HSM2_rshg_Given = TRUE; break; /* case HSM2_MOD_NGCON: */ /* mod->HSM2_ngcon = value->rValue; */ /* mod->HSM2_ngcon_Given = TRUE; */ /* break; */ /* case HSM2_MOD_XGW: */ /* mod->HSM2_xgw = value->rValue; */ /* mod->HSM2_xgw_Given = TRUE; */ /* break; */ /* case HSM2_MOD_XGL: */ /* mod->HSM2_xgl = value->rValue; */ /* mod->HSM2_xgl_Given = TRUE; */ /* break; */ /* case HSM2_MOD_NF: */ /* mod->HSM2_nf = value->rValue; */ /* mod->HSM2_nf_Given = TRUE; */ /* break; */ case HSM2_MOD_VFBC: mod->HSM2_vfbc = value->rValue; mod->HSM2_vfbc_Given = TRUE; break; case HSM2_MOD_VBI: mod->HSM2_vbi = value->rValue; mod->HSM2_vbi_Given = TRUE; break; case HSM2_MOD_NSUBC: mod->HSM2_nsubc = value->rValue; mod->HSM2_nsubc_Given = TRUE; break; case HSM2_MOD_VFBCL: mod->HSM2_vfbcl = value->rValue; mod->HSM2_vfbcl_Given = TRUE; break; case HSM2_MOD_VFBCLP: mod->HSM2_vfbclp = value->rValue; mod->HSM2_vfbclp_Given = TRUE; break; case HSM2_MOD_PARL2: mod->HSM2_parl2 = value->rValue; mod->HSM2_parl2_Given = TRUE; break; case HSM2_MOD_LP: mod->HSM2_lp = value->rValue; mod->HSM2_lp_Given = TRUE; break; case HSM2_MOD_NSUBP: mod->HSM2_nsubp = value->rValue; mod->HSM2_nsubp_Given = TRUE; break; case HSM2_MOD_NSUBPL: mod->HSM2_nsubpl = value->rValue; mod->HSM2_nsubpl_Given = TRUE; break; case HSM2_MOD_NSUBPFAC: mod->HSM2_nsubpfac = value->rValue; mod->HSM2_nsubpfac_Given = TRUE; break; case HSM2_MOD_NSUBPDLT: mod->HSM2_nsubpdlt = value->rValue; mod->HSM2_nsubpdlt_Given = TRUE; break; case HSM2_MOD_NSUBPW: mod->HSM2_nsubpw = value->rValue; mod->HSM2_nsubpw_Given = TRUE; break; case HSM2_MOD_NSUBPWP: mod->HSM2_nsubpwp = value->rValue; mod->HSM2_nsubpwp_Given = TRUE; break; case HSM2_MOD_SCP1: mod->HSM2_scp1 = value->rValue; mod->HSM2_scp1_Given = TRUE; break; case HSM2_MOD_SCP2: mod->HSM2_scp2 = value->rValue; mod->HSM2_scp2_Given = TRUE; break; case HSM2_MOD_SCP3: mod->HSM2_scp3 = value->rValue; mod->HSM2_scp3_Given = TRUE; break; case HSM2_MOD_SC1: mod->HSM2_sc1 = value->rValue; mod->HSM2_sc1_Given = TRUE; break; case HSM2_MOD_SC2: mod->HSM2_sc2 = value->rValue; mod->HSM2_sc2_Given = TRUE; break; case HSM2_MOD_SC3: mod->HSM2_sc3 = value->rValue; mod->HSM2_sc3_Given = TRUE; break; case HSM2_MOD_SC4: mod->HSM2_sc4 = value->rValue; mod->HSM2_sc4_Given = TRUE; break; case HSM2_MOD_PGD1: mod->HSM2_pgd1 = value->rValue; mod->HSM2_pgd1_Given = TRUE; break; case HSM2_MOD_PGD2: mod->HSM2_pgd2 = value->rValue; mod->HSM2_pgd2_Given = TRUE; break; //case HSM2_MOD_PGD3: // mod->HSM2_pgd3 = value->rValue; // mod->HSM2_pgd3_Given = TRUE; // break; case HSM2_MOD_PGD4: mod->HSM2_pgd4 = value->rValue; mod->HSM2_pgd4_Given = TRUE; break; case HSM2_MOD_NDEP: mod->HSM2_ndep = value->rValue; mod->HSM2_ndep_Given = TRUE; break; case HSM2_MOD_NDEPL: mod->HSM2_ndepl = value->rValue; mod->HSM2_ndepl_Given = TRUE; break; case HSM2_MOD_NDEPLP: mod->HSM2_ndeplp = value->rValue; mod->HSM2_ndeplp_Given = TRUE; break; case HSM2_MOD_NDEPW: mod->HSM2_ndepw = value->rValue; mod->HSM2_ndepw_Given = TRUE; break; case HSM2_MOD_NDEPWP: mod->HSM2_ndepwp = value->rValue; mod->HSM2_ndepwp_Given = TRUE; break; case HSM2_MOD_NINV: mod->HSM2_ninv = value->rValue; mod->HSM2_ninv_Given = TRUE; break; case HSM2_MOD_NINVD: mod->HSM2_ninvd = value->rValue; mod->HSM2_ninvd_Given = TRUE; break; case HSM2_MOD_NINVDL: mod->HSM2_ninvdl = value->rValue; mod->HSM2_ninvdl_Given = TRUE; break; case HSM2_MOD_NINVDLP: mod->HSM2_ninvdlp = value->rValue; mod->HSM2_ninvdlp_Given = TRUE; break; case HSM2_MOD_MUECB0: mod->HSM2_muecb0 = value->rValue; mod->HSM2_muecb0_Given = TRUE; break; case HSM2_MOD_MUECB1: mod->HSM2_muecb1 = value->rValue; mod->HSM2_muecb1_Given = TRUE; break; case HSM2_MOD_MUEPH1: mod->HSM2_mueph1 = value->rValue; mod->HSM2_mueph1_Given = TRUE; break; case HSM2_MOD_MUEPH0: mod->HSM2_mueph0 = value->rValue; mod->HSM2_mueph0_Given = TRUE; break; case HSM2_MOD_MUEPHW: mod->HSM2_muephw = value->rValue; mod->HSM2_muephw_Given = TRUE; break; case HSM2_MOD_MUEPWP: mod->HSM2_muepwp = value->rValue; mod->HSM2_muepwp_Given = TRUE; break; case HSM2_MOD_MUEPWD: mod->HSM2_muepwd = value->rValue; mod->HSM2_muepwd_Given = TRUE; break; case HSM2_MOD_MUEPHL: mod->HSM2_muephl = value->rValue; mod->HSM2_muephl_Given = TRUE; break; case HSM2_MOD_MUEPLP: mod->HSM2_mueplp = value->rValue; mod->HSM2_mueplp_Given = TRUE; break; case HSM2_MOD_MUEPLD: mod->HSM2_muepld = value->rValue; mod->HSM2_muepld_Given = TRUE; break; case HSM2_MOD_MUEPHS: mod->HSM2_muephs = value->rValue; mod->HSM2_muephs_Given = TRUE; break; case HSM2_MOD_MUEPSP: mod->HSM2_muepsp = value->rValue; mod->HSM2_muepsp_Given = TRUE; break; case HSM2_MOD_VTMP: mod->HSM2_vtmp = value->rValue; mod->HSM2_vtmp_Given = TRUE; break; case HSM2_MOD_WVTH0: mod->HSM2_wvth0 = value->rValue; mod->HSM2_wvth0_Given = TRUE; break; case HSM2_MOD_MUESR1: mod->HSM2_muesr1 = value->rValue; mod->HSM2_muesr1_Given = TRUE; break; case HSM2_MOD_MUESR0: mod->HSM2_muesr0 = value->rValue; mod->HSM2_muesr0_Given = TRUE; break; case HSM2_MOD_MUESRL: mod->HSM2_muesrl = value->rValue; mod->HSM2_muesrl_Given = TRUE; break; case HSM2_MOD_MUESLP: mod->HSM2_mueslp = value->rValue; mod->HSM2_mueslp_Given = TRUE; break; case HSM2_MOD_MUESRW: mod->HSM2_muesrw = value->rValue; mod->HSM2_muesrw_Given = TRUE; break; case HSM2_MOD_MUESWP: mod->HSM2_mueswp = value->rValue; mod->HSM2_mueswp_Given = TRUE; break; case HSM2_MOD_BB: mod->HSM2_bb = value->rValue; mod->HSM2_bb_Given = TRUE; break; case HSM2_MOD_SUB1: mod->HSM2_sub1 = value->rValue; mod->HSM2_sub1_Given = TRUE; break; case HSM2_MOD_SUB2: mod->HSM2_sub2 = value->rValue; mod->HSM2_sub2_Given = TRUE; break; case HSM2_MOD_SVGS: mod->HSM2_svgs = value->rValue; mod->HSM2_svgs_Given = TRUE; break; case HSM2_MOD_SVBS: mod->HSM2_svbs = value->rValue; mod->HSM2_svbs_Given = TRUE; break; case HSM2_MOD_SVBSL: mod->HSM2_svbsl = value->rValue; mod->HSM2_svbsl_Given = TRUE; break; case HSM2_MOD_SVDS: mod->HSM2_svds = value->rValue; mod->HSM2_svds_Given = TRUE; break; case HSM2_MOD_SLG: mod->HSM2_slg = value->rValue; mod->HSM2_slg_Given = TRUE; break; case HSM2_MOD_SUB1L: mod->HSM2_sub1l = value->rValue; mod->HSM2_sub1l_Given = TRUE; break; case HSM2_MOD_SUB2L: mod->HSM2_sub2l = value->rValue; mod->HSM2_sub2l_Given = TRUE; break; case HSM2_MOD_SVGSL: mod->HSM2_svgsl = value->rValue; mod->HSM2_svgsl_Given = TRUE; break; case HSM2_MOD_SVGSLP: mod->HSM2_svgslp = value->rValue; mod->HSM2_svgslp_Given = TRUE; break; case HSM2_MOD_SVGSWP: mod->HSM2_svgswp = value->rValue; mod->HSM2_svgswp_Given = TRUE; break; case HSM2_MOD_SVGSW: mod->HSM2_svgsw = value->rValue; mod->HSM2_svgsw_Given = TRUE; break; case HSM2_MOD_SVBSLP: mod->HSM2_svbslp = value->rValue; mod->HSM2_svbslp_Given = TRUE; break; case HSM2_MOD_SLGL: mod->HSM2_slgl = value->rValue; mod->HSM2_slgl_Given = TRUE; break; case HSM2_MOD_SLGLP: mod->HSM2_slglp = value->rValue; mod->HSM2_slglp_Given = TRUE; break; case HSM2_MOD_SUB1LP: mod->HSM2_sub1lp = value->rValue; mod->HSM2_sub1lp_Given = TRUE; break; case HSM2_MOD_NSTI: mod->HSM2_nsti = value->rValue; mod->HSM2_nsti_Given = TRUE; break; case HSM2_MOD_WSTI: mod->HSM2_wsti = value->rValue; mod->HSM2_wsti_Given = TRUE; break; case HSM2_MOD_WSTIL: mod->HSM2_wstil = value->rValue; mod->HSM2_wstil_Given = TRUE; break; case HSM2_MOD_WSTILP: mod->HSM2_wstilp = value->rValue; mod->HSM2_wstilp_Given = TRUE; break; case HSM2_MOD_WSTIW: mod->HSM2_wstiw = value->rValue; mod->HSM2_wstiw_Given = TRUE; break; case HSM2_MOD_WSTIWP: mod->HSM2_wstiwp = value->rValue; mod->HSM2_wstiwp_Given = TRUE; break; case HSM2_MOD_SCSTI1: mod->HSM2_scsti1 = value->rValue; mod->HSM2_scsti1_Given = TRUE; break; case HSM2_MOD_SCSTI2: mod->HSM2_scsti2 = value->rValue; mod->HSM2_scsti2_Given = TRUE; break; case HSM2_MOD_VTHSTI: mod->HSM2_vthsti = value->rValue; mod->HSM2_vthsti_Given = TRUE; break; case HSM2_MOD_VDSTI: mod->HSM2_vdsti = value->rValue; mod->HSM2_vdsti_Given = TRUE; break; case HSM2_MOD_MUESTI1: mod->HSM2_muesti1 = value->rValue; mod->HSM2_muesti1_Given = TRUE; break; case HSM2_MOD_MUESTI2: mod->HSM2_muesti2 = value->rValue; mod->HSM2_muesti2_Given = TRUE; break; case HSM2_MOD_MUESTI3: mod->HSM2_muesti3 = value->rValue; mod->HSM2_muesti3_Given = TRUE; break; case HSM2_MOD_NSUBPSTI1: mod->HSM2_nsubpsti1 = value->rValue; mod->HSM2_nsubpsti1_Given = TRUE; break; case HSM2_MOD_NSUBPSTI2: mod->HSM2_nsubpsti2 = value->rValue; mod->HSM2_nsubpsti2_Given = TRUE; break; case HSM2_MOD_NSUBPSTI3: mod->HSM2_nsubpsti3 = value->rValue; mod->HSM2_nsubpsti3_Given = TRUE; break; case HSM2_MOD_NSUBCSTI1: mod->HSM2_nsubcsti1 = value->rValue; mod->HSM2_nsubcsti1_Given = TRUE; break; case HSM2_MOD_NSUBCSTI2: mod->HSM2_nsubcsti2 = value->rValue; mod->HSM2_nsubcsti2_Given = TRUE; break; case HSM2_MOD_NSUBCSTI3: mod->HSM2_nsubcsti3 = value->rValue; mod->HSM2_nsubcsti3_Given = TRUE; break; case HSM2_MOD_LPEXT: mod->HSM2_lpext = value->rValue; mod->HSM2_lpext_Given = TRUE; break; case HSM2_MOD_NPEXT: mod->HSM2_npext = value->rValue; mod->HSM2_npext_Given = TRUE; break; case HSM2_MOD_NPEXTW: mod->HSM2_npextw = value->rValue; mod->HSM2_npextw_Given = TRUE; break; case HSM2_MOD_NPEXTWP: mod->HSM2_npextwp = value->rValue; mod->HSM2_npextwp_Given = TRUE; break; case HSM2_MOD_SCP22: mod->HSM2_scp22 = value->rValue; mod->HSM2_scp22_Given = TRUE; break; case HSM2_MOD_SCP21: mod->HSM2_scp21 = value->rValue; mod->HSM2_scp21_Given = TRUE; break; case HSM2_MOD_BS1: mod->HSM2_bs1 = value->rValue; mod->HSM2_bs1_Given = TRUE; break; case HSM2_MOD_BS2: mod->HSM2_bs2 = value->rValue; mod->HSM2_bs2_Given = TRUE; break; case HSM2_MOD_CGSO: mod->HSM2_cgso = value->rValue; mod->HSM2_cgso_Given = TRUE; break; case HSM2_MOD_CGDO: mod->HSM2_cgdo = value->rValue; mod->HSM2_cgdo_Given = TRUE; break; case HSM2_MOD_CGBO: mod->HSM2_cgbo = value->rValue; mod->HSM2_cgbo_Given = TRUE; break; case HSM2_MOD_TPOLY: mod->HSM2_tpoly = value->rValue; mod->HSM2_tpoly_Given = TRUE; break; case HSM2_MOD_JS0: mod->HSM2_js0 = value->rValue; mod->HSM2_js0_Given = TRUE; break; case HSM2_MOD_JS0SW: mod->HSM2_js0sw = value->rValue; mod->HSM2_js0sw_Given = TRUE; break; case HSM2_MOD_NJ: mod->HSM2_nj = value->rValue; mod->HSM2_nj_Given = TRUE; break; case HSM2_MOD_NJSW: mod->HSM2_njsw = value->rValue; mod->HSM2_njsw_Given = TRUE; break; case HSM2_MOD_XTI: mod->HSM2_xti = value->rValue; mod->HSM2_xti_Given = TRUE; break; case HSM2_MOD_CJ: mod->HSM2_cj = value->rValue; mod->HSM2_cj_Given = TRUE; break; case HSM2_MOD_CJSW: mod->HSM2_cjsw = value->rValue; mod->HSM2_cjsw_Given = TRUE; break; case HSM2_MOD_CJSWG: mod->HSM2_cjswg = value->rValue; mod->HSM2_cjswg_Given = TRUE; break; case HSM2_MOD_MJ: mod->HSM2_mj = value->rValue; mod->HSM2_mj_Given = TRUE; break; case HSM2_MOD_MJSW: mod->HSM2_mjsw = value->rValue; mod->HSM2_mjsw_Given = TRUE; break; case HSM2_MOD_MJSWG: mod->HSM2_mjswg = value->rValue; mod->HSM2_mjswg_Given = TRUE; break; case HSM2_MOD_PB: mod->HSM2_pb = value->rValue; mod->HSM2_pb_Given = TRUE; break; case HSM2_MOD_PBSW: mod->HSM2_pbsw = value->rValue; mod->HSM2_pbsw_Given = TRUE; break; case HSM2_MOD_PBSWG: mod->HSM2_pbswg = value->rValue; mod->HSM2_pbswg_Given = TRUE; break; case HSM2_MOD_TCJBD: mod->HSM2_tcjbd = value->rValue; mod->HSM2_tcjbd_Given = TRUE; break; case HSM2_MOD_TCJBS: mod->HSM2_tcjbs = value->rValue; mod->HSM2_tcjbs_Given = TRUE; break; case HSM2_MOD_TCJBDSW: mod->HSM2_tcjbdsw = value->rValue; mod->HSM2_tcjbdsw_Given = TRUE; break; case HSM2_MOD_TCJBSSW: mod->HSM2_tcjbssw = value->rValue; mod->HSM2_tcjbssw_Given = TRUE; break; case HSM2_MOD_TCJBDSWG: mod->HSM2_tcjbdswg = value->rValue; mod->HSM2_tcjbdswg_Given = TRUE; break; case HSM2_MOD_TCJBSSWG: mod->HSM2_tcjbsswg = value->rValue; mod->HSM2_tcjbsswg_Given = TRUE; break; case HSM2_MOD_XTI2: mod->HSM2_xti2 = value->rValue; mod->HSM2_xti2_Given = TRUE; break; case HSM2_MOD_CISB: mod->HSM2_cisb = value->rValue; mod->HSM2_cisb_Given = TRUE; break; case HSM2_MOD_CVB: mod->HSM2_cvb = value->rValue; mod->HSM2_cvb_Given = TRUE; break; case HSM2_MOD_CTEMP: mod->HSM2_ctemp = value->rValue; mod->HSM2_ctemp_Given = TRUE; break; case HSM2_MOD_CISBK: mod->HSM2_cisbk = value->rValue; mod->HSM2_cisbk_Given = TRUE; break; case HSM2_MOD_CVBK: mod->HSM2_cvbk = value->rValue; mod->HSM2_cvbk_Given = TRUE; break; case HSM2_MOD_DIVX: mod->HSM2_divx = value->rValue; mod->HSM2_divx_Given = TRUE; break; case HSM2_MOD_CLM1: mod->HSM2_clm1 = value->rValue; mod->HSM2_clm1_Given = TRUE; break; case HSM2_MOD_CLM2: mod->HSM2_clm2 = value->rValue; mod->HSM2_clm2_Given = TRUE; break; case HSM2_MOD_CLM3: mod->HSM2_clm3 = value->rValue; mod->HSM2_clm3_Given = TRUE; break; case HSM2_MOD_CLM5: mod->HSM2_clm5 = value->rValue; mod->HSM2_clm5_Given = TRUE; break; case HSM2_MOD_CLM6: mod->HSM2_clm6 = value->rValue; mod->HSM2_clm6_Given = TRUE; break; case HSM2_MOD_MUETMP: mod->HSM2_muetmp = value->rValue; mod->HSM2_muetmp_Given = TRUE; break; case HSM2_MOD_VOVER: mod->HSM2_vover = value->rValue; mod->HSM2_vover_Given = TRUE; break; case HSM2_MOD_VOVERP: mod->HSM2_voverp = value->rValue; mod->HSM2_voverp_Given = TRUE; break; case HSM2_MOD_VOVERS: mod->HSM2_vovers = value->rValue; mod->HSM2_vovers_Given = TRUE; break; case HSM2_MOD_VOVERSP: mod->HSM2_voversp = value->rValue; mod->HSM2_voversp_Given = TRUE; break; case HSM2_MOD_WFC: mod->HSM2_wfc = value->rValue; mod->HSM2_wfc_Given = TRUE; break; case HSM2_MOD_NSUBCW: mod->HSM2_nsubcw = value->rValue; mod->HSM2_nsubcw_Given = TRUE; break; case HSM2_MOD_NSUBCWP: mod->HSM2_nsubcwp = value->rValue; mod->HSM2_nsubcwp_Given = TRUE; break; case HSM2_MOD_NSUBCMAX: mod->HSM2_nsubcmax = value->rValue; mod->HSM2_nsubcmax_Given = TRUE; break; case HSM2_MOD_QME1: mod->HSM2_qme1 = value->rValue; mod->HSM2_qme1_Given = TRUE; break; case HSM2_MOD_QME2: mod->HSM2_qme2 = value->rValue; mod->HSM2_qme2_Given = TRUE; break; case HSM2_MOD_QME3: mod->HSM2_qme3 = value->rValue; mod->HSM2_qme3_Given = TRUE; break; case HSM2_MOD_GIDL1: mod->HSM2_gidl1 = value->rValue; mod->HSM2_gidl1_Given = TRUE; break; case HSM2_MOD_GIDL2: mod->HSM2_gidl2 = value->rValue; mod->HSM2_gidl2_Given = TRUE; break; case HSM2_MOD_GIDL3: mod->HSM2_gidl3 = value->rValue; mod->HSM2_gidl3_Given = TRUE; break; case HSM2_MOD_GIDL4: mod->HSM2_gidl4 = value->rValue; mod->HSM2_gidl4_Given = TRUE; break; case HSM2_MOD_GIDL5: mod->HSM2_gidl5 = value->rValue; mod->HSM2_gidl5_Given = TRUE; break; case HSM2_MOD_GIDL6: mod->HSM2_gidl6 = value->rValue; mod->HSM2_gidl6_Given = TRUE; break; case HSM2_MOD_GIDL7: mod->HSM2_gidl7 = value->rValue; mod->HSM2_gidl7_Given = TRUE; break; case HSM2_MOD_GLEAK1: mod->HSM2_gleak1 = value->rValue; mod->HSM2_gleak1_Given = TRUE; break; case HSM2_MOD_GLEAK2: mod->HSM2_gleak2 = value->rValue; mod->HSM2_gleak2_Given = TRUE; break; case HSM2_MOD_GLEAK3: mod->HSM2_gleak3 = value->rValue; mod->HSM2_gleak3_Given = TRUE; break; case HSM2_MOD_GLEAK4: mod->HSM2_gleak4 = value->rValue; mod->HSM2_gleak4_Given = TRUE; break; case HSM2_MOD_GLEAK5: mod->HSM2_gleak5 = value->rValue; mod->HSM2_gleak5_Given = TRUE; break; case HSM2_MOD_GLEAK6: mod->HSM2_gleak6 = value->rValue; mod->HSM2_gleak6_Given = TRUE; break; case HSM2_MOD_GLEAK7: mod->HSM2_gleak7 = value->rValue; mod->HSM2_gleak7_Given = TRUE; break; case HSM2_MOD_GLKSD1: mod->HSM2_glksd1 = value->rValue; mod->HSM2_glksd1_Given = TRUE; break; case HSM2_MOD_GLKSD2: mod->HSM2_glksd2 = value->rValue; mod->HSM2_glksd2_Given = TRUE; break; case HSM2_MOD_GLKSD3: mod->HSM2_glksd3 = value->rValue; mod->HSM2_glksd3_Given = TRUE; break; case HSM2_MOD_GLKB1: mod->HSM2_glkb1 = value->rValue; mod->HSM2_glkb1_Given = TRUE; break; case HSM2_MOD_GLKB2: mod->HSM2_glkb2 = value->rValue; mod->HSM2_glkb2_Given = TRUE; break; case HSM2_MOD_GLKB3: mod->HSM2_glkb3 = value->rValue; mod->HSM2_glkb3_Given = TRUE; break; case HSM2_MOD_EGIG: mod->HSM2_egig = value->rValue; mod->HSM2_egig_Given = TRUE; break; case HSM2_MOD_IGTEMP2: mod->HSM2_igtemp2 = value->rValue; mod->HSM2_igtemp2_Given = TRUE; break; case HSM2_MOD_IGTEMP3: mod->HSM2_igtemp3 = value->rValue; mod->HSM2_igtemp3_Given = TRUE; break; case HSM2_MOD_VZADD0: mod->HSM2_vzadd0 = value->rValue; mod->HSM2_vzadd0_Given = TRUE; break; case HSM2_MOD_PZADD0: mod->HSM2_pzadd0 = value->rValue; mod->HSM2_pzadd0_Given = TRUE; break; case HSM2_MOD_NFTRP: mod->HSM2_nftrp = value->rValue; mod->HSM2_nftrp_Given = TRUE; break; case HSM2_MOD_NFALP: mod->HSM2_nfalp = value->rValue; mod->HSM2_nfalp_Given = TRUE; break; case HSM2_MOD_CIT: mod->HSM2_cit = value->rValue; mod->HSM2_cit_Given = TRUE; break; case HSM2_MOD_FALPH: mod->HSM2_falph = value->rValue; mod->HSM2_falph_Given = TRUE; break; case HSM2_MOD_KAPPA: mod->HSM2_kappa = value->rValue; mod->HSM2_kappa_Given = TRUE; break; case HSM2_MOD_VDIFFJ: mod->HSM2_vdiffj = value->rValue; mod->HSM2_vdiffj_Given = TRUE; break; case HSM2_MOD_DLY1: mod->HSM2_dly1 = value->rValue; mod->HSM2_dly1_Given = TRUE; break; case HSM2_MOD_DLY2: mod->HSM2_dly2 = value->rValue; mod->HSM2_dly2_Given = TRUE; break; case HSM2_MOD_DLY3: mod->HSM2_dly3 = value->rValue; mod->HSM2_dly3_Given = TRUE; break; case HSM2_MOD_TNOM: mod->HSM2_tnom = value->rValue; mod->HSM2_tnom_Given = TRUE; break; case HSM2_MOD_OVSLP: mod->HSM2_ovslp = value->rValue; mod->HSM2_ovslp_Given = TRUE; break; case HSM2_MOD_OVMAG: mod->HSM2_ovmag = value->rValue; mod->HSM2_ovmag_Given = TRUE; break; case HSM2_MOD_GBMIN: mod->HSM2_gbmin = value->rValue; mod->HSM2_gbmin_Given = TRUE; break; case HSM2_MOD_RBPB: mod->HSM2_rbpb = value->rValue; mod->HSM2_rbpb_Given = TRUE; break; case HSM2_MOD_RBPD: mod->HSM2_rbpd = value->rValue; mod->HSM2_rbpd_Given = TRUE; break; case HSM2_MOD_RBPS: mod->HSM2_rbps = value->rValue; mod->HSM2_rbps_Given = TRUE; break; case HSM2_MOD_RBDB: mod->HSM2_rbdb = value->rValue; mod->HSM2_rbdb_Given = TRUE; break; case HSM2_MOD_RBSB: mod->HSM2_rbsb = value->rValue; mod->HSM2_rbsb_Given = TRUE; break; case HSM2_MOD_IBPC1: mod->HSM2_ibpc1 = value->rValue; mod->HSM2_ibpc1_Given = TRUE; break; case HSM2_MOD_IBPC2: mod->HSM2_ibpc2 = value->rValue; mod->HSM2_ibpc2_Given = TRUE; break; case HSM2_MOD_MPHDFM: mod->HSM2_mphdfm = value->rValue; mod->HSM2_mphdfm_Given = TRUE; break; case HSM2_MOD_PTL: mod->HSM2_ptl = value->rValue; mod->HSM2_ptl_Given = TRUE; break; case HSM2_MOD_PTP: mod->HSM2_ptp = value->rValue; mod->HSM2_ptp_Given = TRUE; break; case HSM2_MOD_PT2: mod->HSM2_pt2 = value->rValue; mod->HSM2_pt2_Given = TRUE; break; case HSM2_MOD_PTLP: mod->HSM2_ptlp = value->rValue; mod->HSM2_ptlp_Given = TRUE; break; case HSM2_MOD_GDL: mod->HSM2_gdl = value->rValue; mod->HSM2_gdl_Given = TRUE; break; case HSM2_MOD_GDLP: mod->HSM2_gdlp = value->rValue; mod->HSM2_gdlp_Given = TRUE; break; case HSM2_MOD_GDLD: mod->HSM2_gdld = value->rValue; mod->HSM2_gdld_Given = TRUE; break; case HSM2_MOD_PT4: mod->HSM2_pt4 = value->rValue; mod->HSM2_pt4_Given = TRUE; break; case HSM2_MOD_PT4P: mod->HSM2_pt4p = value->rValue; mod->HSM2_pt4p_Given = TRUE; break; case HSM2_MOD_MUEPHL2: mod->HSM2_muephl2 = value->rValue; mod->HSM2_muephl2_Given = TRUE; break; case HSM2_MOD_MUEPLP2: mod->HSM2_mueplp2 = value->rValue; mod->HSM2_mueplp2_Given = TRUE; break; case HSM2_MOD_NSUBCW2: mod->HSM2_nsubcw2 = value->rValue; mod->HSM2_nsubcw2_Given = TRUE; break; case HSM2_MOD_NSUBCWP2: mod->HSM2_nsubcwp2 = value->rValue; mod->HSM2_nsubcwp2_Given = TRUE; break; case HSM2_MOD_MUEPHW2: mod->HSM2_muephw2 = value->rValue; mod->HSM2_muephw2_Given = TRUE; break; case HSM2_MOD_MUEPWP2: mod->HSM2_muepwp2 = value->rValue; mod->HSM2_muepwp2_Given = TRUE; break; /* WPE */ case HSM2_MOD_WEB: mod->HSM2_web = value->rValue; mod->HSM2_web_Given = TRUE; break; case HSM2_MOD_WEC: mod->HSM2_wec = value->rValue; mod->HSM2_wec_Given = TRUE; break; case HSM2_MOD_NSUBCWPE: mod->HSM2_nsubcwpe = value->rValue; mod->HSM2_nsubcwpe_Given = TRUE; break; case HSM2_MOD_NPEXTWPE: mod->HSM2_npextwpe = value->rValue; mod->HSM2_npextwpe_Given = TRUE; break; case HSM2_MOD_NSUBPWPE: mod->HSM2_nsubpwpe = value->rValue; mod->HSM2_nsubpwpe_Given = TRUE; break; case HSM2_MOD_VGSMIN: mod->HSM2_Vgsmin = value->rValue; mod->HSM2_Vgsmin_Given = TRUE; break; case HSM2_MOD_SC3VBS: mod->HSM2_sc3Vbs = value->rValue; mod->HSM2_sc3Vbs_Given = TRUE; break; case HSM2_MOD_BYPTOL: mod->HSM2_byptol = value->rValue; mod->HSM2_byptol_Given = TRUE; break; case HSM2_MOD_MUECB0LP: mod->HSM2_muecb0lp = value->rValue; mod->HSM2_muecb0lp_Given = TRUE; break; case HSM2_MOD_MUECB1LP: mod->HSM2_muecb1lp = value->rValue; mod->HSM2_muecb1lp_Given = TRUE; break; /* Depletion Mode MODFET */ case HSM2_MOD_NDEPM: mod->HSM2_ndepm = value->rValue; mod->HSM2_ndepm_Given = TRUE; break; case HSM2_MOD_NDEPML: mod->HSM2_ndepml = value->rValue; mod->HSM2_ndepml_Given = TRUE; break; case HSM2_MOD_NDEPMLP: mod->HSM2_ndepmlp = value->rValue; mod->HSM2_ndepmlp_Given = TRUE; break; case HSM2_MOD_TNDEP: mod->HSM2_tndep = value->rValue; mod->HSM2_tndep_Given = TRUE; break; case HSM2_MOD_DEPLEAK: mod->HSM2_depleak = value->rValue; mod->HSM2_depleak_Given = TRUE; break; case HSM2_MOD_DEPLEAKL: mod->HSM2_depleakl = value->rValue; mod->HSM2_depleakl_Given = TRUE; break; case HSM2_MOD_DEPLEAKLP: mod->HSM2_depleaklp = value->rValue; mod->HSM2_depleaklp_Given = TRUE; break; case HSM2_MOD_DEPETA: mod->HSM2_depeta = value->rValue; mod->HSM2_depeta_Given = TRUE; break; case HSM2_MOD_DEPMUE0: mod->HSM2_depmue0 = value->rValue; mod->HSM2_depmue0_Given = TRUE; break; case HSM2_MOD_DEPMUE0L: mod->HSM2_depmue0l = value->rValue; mod->HSM2_depmue0l_Given = TRUE; break; case HSM2_MOD_DEPMUE0LP: mod->HSM2_depmue0lp = value->rValue; mod->HSM2_depmue0lp_Given = TRUE; break; case HSM2_MOD_DEPMUE1: mod->HSM2_depmue1 = value->rValue; mod->HSM2_depmue1_Given = TRUE; break; case HSM2_MOD_DEPMUE1L: mod->HSM2_depmue1l = value->rValue; mod->HSM2_depmue1l_Given = TRUE; break; case HSM2_MOD_DEPMUE1LP: mod->HSM2_depmue1lp = value->rValue; mod->HSM2_depmue1lp_Given = TRUE; break; case HSM2_MOD_DEPMUEBACK0: mod->HSM2_depmueback0 = value->rValue; mod->HSM2_depmueback0_Given = TRUE; break; case HSM2_MOD_DEPMUEBACK0L: mod->HSM2_depmueback0l = value->rValue; mod->HSM2_depmueback0l_Given = TRUE; break; case HSM2_MOD_DEPMUEBACK0LP: mod->HSM2_depmueback0lp = value->rValue; mod->HSM2_depmueback0lp_Given = TRUE; break; case HSM2_MOD_DEPMUEBACK1: mod->HSM2_depmueback1 = value->rValue; mod->HSM2_depmueback1_Given = TRUE; break; case HSM2_MOD_DEPMUEBACK1L: mod->HSM2_depmueback1l = value->rValue; mod->HSM2_depmueback1l_Given = TRUE; break; case HSM2_MOD_DEPMUEBACK1LP: mod->HSM2_depmueback1lp = value->rValue; mod->HSM2_depmueback1lp_Given = TRUE; break; case HSM2_MOD_DEPMUEPH0: mod->HSM2_depmueph0 = value->rValue; mod->HSM2_depmueph0_Given = TRUE; break; case HSM2_MOD_DEPMUEPH1: mod->HSM2_depmueph1 = value->rValue; mod->HSM2_depmueph1_Given = TRUE; break; case HSM2_MOD_DEPVMAX: mod->HSM2_depvmax = value->rValue; mod->HSM2_depvmax_Given = TRUE; break; case HSM2_MOD_DEPVMAXL: mod->HSM2_depvmaxl = value->rValue; mod->HSM2_depvmaxl_Given = TRUE; break; case HSM2_MOD_DEPVMAXLP: mod->HSM2_depvmaxlp = value->rValue; mod->HSM2_depvmaxlp_Given = TRUE; break; case HSM2_MOD_DEPVDSEF1: mod->HSM2_depvdsef1 = value->rValue; mod->HSM2_depvdsef1_Given = TRUE; break; case HSM2_MOD_DEPVDSEF1L: mod->HSM2_depvdsef1l = value->rValue; mod->HSM2_depvdsef1l_Given = TRUE; break; case HSM2_MOD_DEPVDSEF1LP: mod->HSM2_depvdsef1lp = value->rValue; mod->HSM2_depvdsef1lp_Given = TRUE; break; case HSM2_MOD_DEPVDSEF2: mod->HSM2_depvdsef2 = value->rValue; mod->HSM2_depvdsef2_Given = TRUE; break; case HSM2_MOD_DEPVDSEF2L: mod->HSM2_depvdsef2l = value->rValue; mod->HSM2_depvdsef2l_Given = TRUE; break; case HSM2_MOD_DEPVDSEF2LP: mod->HSM2_depvdsef2lp = value->rValue; mod->HSM2_depvdsef2lp_Given = TRUE; break; case HSM2_MOD_DEPBB: mod->HSM2_depbb = value->rValue; mod->HSM2_depbb_Given = TRUE; break; case HSM2_MOD_DEPMUETMP: mod->HSM2_depmuetmp = value->rValue; mod->HSM2_depmuetmp_Given = TRUE; break; /* binning parameters */ case HSM2_MOD_LMIN: mod->HSM2_lmin = value->rValue; mod->HSM2_lmin_Given = TRUE; break; case HSM2_MOD_LMAX: mod->HSM2_lmax = value->rValue; mod->HSM2_lmax_Given = TRUE; break; case HSM2_MOD_WMIN: mod->HSM2_wmin = value->rValue; mod->HSM2_wmin_Given = TRUE; break; case HSM2_MOD_WMAX: mod->HSM2_wmax = value->rValue; mod->HSM2_wmax_Given = TRUE; break; case HSM2_MOD_LBINN: mod->HSM2_lbinn = value->rValue; mod->HSM2_lbinn_Given = TRUE; break; case HSM2_MOD_WBINN: mod->HSM2_wbinn = value->rValue; mod->HSM2_wbinn_Given = TRUE; break; /* Length dependence */ case HSM2_MOD_LVMAX: mod->HSM2_lvmax = value->rValue; mod->HSM2_lvmax_Given = TRUE; break; case HSM2_MOD_LBGTMP1: mod->HSM2_lbgtmp1 = value->rValue; mod->HSM2_lbgtmp1_Given = TRUE; break; case HSM2_MOD_LBGTMP2: mod->HSM2_lbgtmp2 = value->rValue; mod->HSM2_lbgtmp2_Given = TRUE; break; case HSM2_MOD_LEG0: mod->HSM2_leg0 = value->rValue; mod->HSM2_leg0_Given = TRUE; break; case HSM2_MOD_LLOVER: mod->HSM2_llover = value->rValue; mod->HSM2_llover_Given = TRUE; break; case HSM2_MOD_LVFBOVER: mod->HSM2_lvfbover = value->rValue; mod->HSM2_lvfbover_Given = TRUE; break; case HSM2_MOD_LNOVER: mod->HSM2_lnover = value->rValue; mod->HSM2_lnover_Given = TRUE; break; case HSM2_MOD_LWL2: mod->HSM2_lwl2 = value->rValue; mod->HSM2_lwl2_Given = TRUE; break; case HSM2_MOD_LVFBC: mod->HSM2_lvfbc = value->rValue; mod->HSM2_lvfbc_Given = TRUE; break; case HSM2_MOD_LNSUBC: mod->HSM2_lnsubc = value->rValue; mod->HSM2_lnsubc_Given = TRUE; break; case HSM2_MOD_LNSUBP: mod->HSM2_lnsubp = value->rValue; mod->HSM2_lnsubp_Given = TRUE; break; case HSM2_MOD_LSCP1: mod->HSM2_lscp1 = value->rValue; mod->HSM2_lscp1_Given = TRUE; break; case HSM2_MOD_LSCP2: mod->HSM2_lscp2 = value->rValue; mod->HSM2_lscp2_Given = TRUE; break; case HSM2_MOD_LSCP3: mod->HSM2_lscp3 = value->rValue; mod->HSM2_lscp3_Given = TRUE; break; case HSM2_MOD_LSC1: mod->HSM2_lsc1 = value->rValue; mod->HSM2_lsc1_Given = TRUE; break; case HSM2_MOD_LSC2: mod->HSM2_lsc2 = value->rValue; mod->HSM2_lsc2_Given = TRUE; break; case HSM2_MOD_LSC3: mod->HSM2_lsc3 = value->rValue; mod->HSM2_lsc3_Given = TRUE; break; case HSM2_MOD_LSC4: mod->HSM2_lsc4 = value->rValue; mod->HSM2_lsc4_Given = TRUE; break; case HSM2_MOD_LPGD1: mod->HSM2_lpgd1 = value->rValue; mod->HSM2_lpgd1_Given = TRUE; break; //case HSM2_MOD_LPGD3: // mod->HSM2_lpgd3 = value->rValue; // mod->HSM2_lpgd3_Given = TRUE; // break; case HSM2_MOD_LNDEP: mod->HSM2_lndep = value->rValue; mod->HSM2_lndep_Given = TRUE; break; case HSM2_MOD_LNINV: mod->HSM2_lninv = value->rValue; mod->HSM2_lninv_Given = TRUE; break; case HSM2_MOD_LMUECB0: mod->HSM2_lmuecb0 = value->rValue; mod->HSM2_lmuecb0_Given = TRUE; break; case HSM2_MOD_LMUECB1: mod->HSM2_lmuecb1 = value->rValue; mod->HSM2_lmuecb1_Given = TRUE; break; case HSM2_MOD_LMUEPH1: mod->HSM2_lmueph1 = value->rValue; mod->HSM2_lmueph1_Given = TRUE; break; case HSM2_MOD_LVTMP: mod->HSM2_lvtmp = value->rValue; mod->HSM2_lvtmp_Given = TRUE; break; case HSM2_MOD_LWVTH0: mod->HSM2_lwvth0 = value->rValue; mod->HSM2_lwvth0_Given = TRUE; break; case HSM2_MOD_LMUESR1: mod->HSM2_lmuesr1 = value->rValue; mod->HSM2_lmuesr1_Given = TRUE; break; case HSM2_MOD_LMUETMP: mod->HSM2_lmuetmp = value->rValue; mod->HSM2_lmuetmp_Given = TRUE; break; case HSM2_MOD_LSUB1: mod->HSM2_lsub1 = value->rValue; mod->HSM2_lsub1_Given = TRUE; break; case HSM2_MOD_LSUB2: mod->HSM2_lsub2 = value->rValue; mod->HSM2_lsub2_Given = TRUE; break; case HSM2_MOD_LSVDS: mod->HSM2_lsvds = value->rValue; mod->HSM2_lsvds_Given = TRUE; break; case HSM2_MOD_LSVBS: mod->HSM2_lsvbs = value->rValue; mod->HSM2_lsvbs_Given = TRUE; break; case HSM2_MOD_LSVGS: mod->HSM2_lsvgs = value->rValue; mod->HSM2_lsvgs_Given = TRUE; break; case HSM2_MOD_LNSTI: mod->HSM2_lnsti = value->rValue; mod->HSM2_lnsti_Given = TRUE; break; case HSM2_MOD_LWSTI: mod->HSM2_lwsti = value->rValue; mod->HSM2_lwsti_Given = TRUE; break; case HSM2_MOD_LSCSTI1: mod->HSM2_lscsti1 = value->rValue; mod->HSM2_lscsti1_Given = TRUE; break; case HSM2_MOD_LSCSTI2: mod->HSM2_lscsti2 = value->rValue; mod->HSM2_lscsti2_Given = TRUE; break; case HSM2_MOD_LVTHSTI: mod->HSM2_lvthsti = value->rValue; mod->HSM2_lvthsti_Given = TRUE; break; case HSM2_MOD_LMUESTI1: mod->HSM2_lmuesti1 = value->rValue; mod->HSM2_lmuesti1_Given = TRUE; break; case HSM2_MOD_LMUESTI2: mod->HSM2_lmuesti2 = value->rValue; mod->HSM2_lmuesti2_Given = TRUE; break; case HSM2_MOD_LMUESTI3: mod->HSM2_lmuesti3 = value->rValue; mod->HSM2_lmuesti3_Given = TRUE; break; case HSM2_MOD_LNSUBPSTI1: mod->HSM2_lnsubpsti1 = value->rValue; mod->HSM2_lnsubpsti1_Given = TRUE; break; case HSM2_MOD_LNSUBPSTI2: mod->HSM2_lnsubpsti2 = value->rValue; mod->HSM2_lnsubpsti2_Given = TRUE; break; case HSM2_MOD_LNSUBPSTI3: mod->HSM2_lnsubpsti3 = value->rValue; mod->HSM2_lnsubpsti3_Given = TRUE; break; case HSM2_MOD_LNSUBCSTI1: mod->HSM2_lnsubcsti1 = value->rValue; mod->HSM2_lnsubcsti1_Given = TRUE; break; case HSM2_MOD_LNSUBCSTI2: mod->HSM2_lnsubcsti2 = value->rValue; mod->HSM2_lnsubcsti2_Given = TRUE; break; case HSM2_MOD_LNSUBCSTI3: mod->HSM2_lnsubcsti3 = value->rValue; mod->HSM2_lnsubcsti3_Given = TRUE; break; case HSM2_MOD_LCGSO: mod->HSM2_lcgso = value->rValue; mod->HSM2_lcgso_Given = TRUE; break; case HSM2_MOD_LCGDO: mod->HSM2_lcgdo = value->rValue; mod->HSM2_lcgdo_Given = TRUE; break; case HSM2_MOD_LJS0: mod->HSM2_ljs0 = value->rValue; mod->HSM2_ljs0_Given = TRUE; break; case HSM2_MOD_LJS0SW: mod->HSM2_ljs0sw = value->rValue; mod->HSM2_ljs0sw_Given = TRUE; break; case HSM2_MOD_LNJ: mod->HSM2_lnj = value->rValue; mod->HSM2_lnj_Given = TRUE; break; case HSM2_MOD_LCISBK: mod->HSM2_lcisbk = value->rValue; mod->HSM2_lcisbk_Given = TRUE; break; case HSM2_MOD_LCLM1: mod->HSM2_lclm1 = value->rValue; mod->HSM2_lclm1_Given = TRUE; break; case HSM2_MOD_LCLM2: mod->HSM2_lclm2 = value->rValue; mod->HSM2_lclm2_Given = TRUE; break; case HSM2_MOD_LCLM3: mod->HSM2_lclm3 = value->rValue; mod->HSM2_lclm3_Given = TRUE; break; case HSM2_MOD_LWFC: mod->HSM2_lwfc = value->rValue; mod->HSM2_lwfc_Given = TRUE; break; case HSM2_MOD_LGIDL1: mod->HSM2_lgidl1 = value->rValue; mod->HSM2_lgidl1_Given = TRUE; break; case HSM2_MOD_LGIDL2: mod->HSM2_lgidl2 = value->rValue; mod->HSM2_lgidl2_Given = TRUE; break; case HSM2_MOD_LGLEAK1: mod->HSM2_lgleak1 = value->rValue; mod->HSM2_lgleak1_Given = TRUE; break; case HSM2_MOD_LGLEAK2: mod->HSM2_lgleak2 = value->rValue; mod->HSM2_lgleak2_Given = TRUE; break; case HSM2_MOD_LGLEAK3: mod->HSM2_lgleak3 = value->rValue; mod->HSM2_lgleak3_Given = TRUE; break; case HSM2_MOD_LGLEAK6: mod->HSM2_lgleak6 = value->rValue; mod->HSM2_lgleak6_Given = TRUE; break; case HSM2_MOD_LGLKSD1: mod->HSM2_lglksd1 = value->rValue; mod->HSM2_lglksd1_Given = TRUE; break; case HSM2_MOD_LGLKSD2: mod->HSM2_lglksd2 = value->rValue; mod->HSM2_lglksd2_Given = TRUE; break; case HSM2_MOD_LGLKB1: mod->HSM2_lglkb1 = value->rValue; mod->HSM2_lglkb1_Given = TRUE; break; case HSM2_MOD_LGLKB2: mod->HSM2_lglkb2 = value->rValue; mod->HSM2_lglkb2_Given = TRUE; break; case HSM2_MOD_LNFTRP: mod->HSM2_lnftrp = value->rValue; mod->HSM2_lnftrp_Given = TRUE; break; case HSM2_MOD_LNFALP: mod->HSM2_lnfalp = value->rValue; mod->HSM2_lnfalp_Given = TRUE; break; case HSM2_MOD_LVDIFFJ: mod->HSM2_lvdiffj = value->rValue; mod->HSM2_lvdiffj_Given = TRUE; break; case HSM2_MOD_LIBPC1: mod->HSM2_libpc1 = value->rValue; mod->HSM2_libpc1_Given = TRUE; break; case HSM2_MOD_LIBPC2: mod->HSM2_libpc2 = value->rValue; mod->HSM2_libpc2_Given = TRUE; break; /* Width dependence */ case HSM2_MOD_WVMAX: mod->HSM2_wvmax = value->rValue; mod->HSM2_wvmax_Given = TRUE; break; case HSM2_MOD_WBGTMP1: mod->HSM2_wbgtmp1 = value->rValue; mod->HSM2_wbgtmp1_Given = TRUE; break; case HSM2_MOD_WBGTMP2: mod->HSM2_wbgtmp2 = value->rValue; mod->HSM2_wbgtmp2_Given = TRUE; break; case HSM2_MOD_WEG0: mod->HSM2_weg0 = value->rValue; mod->HSM2_weg0_Given = TRUE; break; case HSM2_MOD_WLOVER: mod->HSM2_wlover = value->rValue; mod->HSM2_wlover_Given = TRUE; break; case HSM2_MOD_WVFBOVER: mod->HSM2_wvfbover = value->rValue; mod->HSM2_wvfbover_Given = TRUE; break; case HSM2_MOD_WNOVER: mod->HSM2_wnover = value->rValue; mod->HSM2_wnover_Given = TRUE; break; case HSM2_MOD_WWL2: mod->HSM2_wwl2 = value->rValue; mod->HSM2_wwl2_Given = TRUE; break; case HSM2_MOD_WVFBC: mod->HSM2_wvfbc = value->rValue; mod->HSM2_wvfbc_Given = TRUE; break; case HSM2_MOD_WNSUBC: mod->HSM2_wnsubc = value->rValue; mod->HSM2_wnsubc_Given = TRUE; break; case HSM2_MOD_WNSUBP: mod->HSM2_wnsubp = value->rValue; mod->HSM2_wnsubp_Given = TRUE; break; case HSM2_MOD_WSCP1: mod->HSM2_wscp1 = value->rValue; mod->HSM2_wscp1_Given = TRUE; break; case HSM2_MOD_WSCP2: mod->HSM2_wscp2 = value->rValue; mod->HSM2_wscp2_Given = TRUE; break; case HSM2_MOD_WSCP3: mod->HSM2_wscp3 = value->rValue; mod->HSM2_wscp3_Given = TRUE; break; case HSM2_MOD_WSC1: mod->HSM2_wsc1 = value->rValue; mod->HSM2_wsc1_Given = TRUE; break; case HSM2_MOD_WSC2: mod->HSM2_wsc2 = value->rValue; mod->HSM2_wsc2_Given = TRUE; break; case HSM2_MOD_WSC3: mod->HSM2_wsc3 = value->rValue; mod->HSM2_wsc3_Given = TRUE; break; case HSM2_MOD_WSC4: mod->HSM2_wsc4 = value->rValue; mod->HSM2_wsc4_Given = TRUE; break; case HSM2_MOD_WPGD1: mod->HSM2_wpgd1 = value->rValue; mod->HSM2_wpgd1_Given = TRUE; break; //case HSM2_MOD_WPGD3: // mod->HSM2_wpgd3 = value->rValue; // mod->HSM2_wpgd3_Given = TRUE; // break; case HSM2_MOD_WNDEP: mod->HSM2_wndep = value->rValue; mod->HSM2_wndep_Given = TRUE; break; case HSM2_MOD_WNINV: mod->HSM2_wninv = value->rValue; mod->HSM2_wninv_Given = TRUE; break; case HSM2_MOD_WMUECB0: mod->HSM2_wmuecb0 = value->rValue; mod->HSM2_wmuecb0_Given = TRUE; break; case HSM2_MOD_WMUECB1: mod->HSM2_wmuecb1 = value->rValue; mod->HSM2_wmuecb1_Given = TRUE; break; case HSM2_MOD_WMUEPH1: mod->HSM2_wmueph1 = value->rValue; mod->HSM2_wmueph1_Given = TRUE; break; case HSM2_MOD_WVTMP: mod->HSM2_wvtmp = value->rValue; mod->HSM2_wvtmp_Given = TRUE; break; case HSM2_MOD_WWVTH0: mod->HSM2_wwvth0 = value->rValue; mod->HSM2_wwvth0_Given = TRUE; break; case HSM2_MOD_WMUESR1: mod->HSM2_wmuesr1 = value->rValue; mod->HSM2_wmuesr1_Given = TRUE; break; case HSM2_MOD_WMUETMP: mod->HSM2_wmuetmp = value->rValue; mod->HSM2_wmuetmp_Given = TRUE; break; case HSM2_MOD_WSUB1: mod->HSM2_wsub1 = value->rValue; mod->HSM2_wsub1_Given = TRUE; break; case HSM2_MOD_WSUB2: mod->HSM2_wsub2 = value->rValue; mod->HSM2_wsub2_Given = TRUE; break; case HSM2_MOD_WSVDS: mod->HSM2_wsvds = value->rValue; mod->HSM2_wsvds_Given = TRUE; break; case HSM2_MOD_WSVBS: mod->HSM2_wsvbs = value->rValue; mod->HSM2_wsvbs_Given = TRUE; break; case HSM2_MOD_WSVGS: mod->HSM2_wsvgs = value->rValue; mod->HSM2_wsvgs_Given = TRUE; break; case HSM2_MOD_WNSTI: mod->HSM2_wnsti = value->rValue; mod->HSM2_wnsti_Given = TRUE; break; case HSM2_MOD_WWSTI: mod->HSM2_wwsti = value->rValue; mod->HSM2_wwsti_Given = TRUE; break; case HSM2_MOD_WSCSTI1: mod->HSM2_wscsti1 = value->rValue; mod->HSM2_wscsti1_Given = TRUE; break; case HSM2_MOD_WSCSTI2: mod->HSM2_wscsti2 = value->rValue; mod->HSM2_wscsti2_Given = TRUE; break; case HSM2_MOD_WVTHSTI: mod->HSM2_wvthsti = value->rValue; mod->HSM2_wvthsti_Given = TRUE; break; case HSM2_MOD_WMUESTI1: mod->HSM2_wmuesti1 = value->rValue; mod->HSM2_wmuesti1_Given = TRUE; break; case HSM2_MOD_WMUESTI2: mod->HSM2_wmuesti2 = value->rValue; mod->HSM2_wmuesti2_Given = TRUE; break; case HSM2_MOD_WMUESTI3: mod->HSM2_wmuesti3 = value->rValue; mod->HSM2_wmuesti3_Given = TRUE; break; case HSM2_MOD_WNSUBPSTI1: mod->HSM2_wnsubpsti1 = value->rValue; mod->HSM2_wnsubpsti1_Given = TRUE; break; case HSM2_MOD_WNSUBPSTI2: mod->HSM2_wnsubpsti2 = value->rValue; mod->HSM2_wnsubpsti2_Given = TRUE; break; case HSM2_MOD_WNSUBPSTI3: mod->HSM2_wnsubpsti3 = value->rValue; mod->HSM2_wnsubpsti3_Given = TRUE; break; case HSM2_MOD_WNSUBCSTI1: mod->HSM2_wnsubcsti1 = value->rValue; mod->HSM2_wnsubcsti1_Given = TRUE; break; case HSM2_MOD_WNSUBCSTI2: mod->HSM2_wnsubcsti2 = value->rValue; mod->HSM2_wnsubcsti2_Given = TRUE; break; case HSM2_MOD_WNSUBCSTI3: mod->HSM2_wnsubcsti3 = value->rValue; mod->HSM2_wnsubcsti3_Given = TRUE; break; case HSM2_MOD_WCGSO: mod->HSM2_wcgso = value->rValue; mod->HSM2_wcgso_Given = TRUE; break; case HSM2_MOD_WCGDO: mod->HSM2_wcgdo = value->rValue; mod->HSM2_wcgdo_Given = TRUE; break; case HSM2_MOD_WJS0: mod->HSM2_wjs0 = value->rValue; mod->HSM2_wjs0_Given = TRUE; break; case HSM2_MOD_WJS0SW: mod->HSM2_wjs0sw = value->rValue; mod->HSM2_wjs0sw_Given = TRUE; break; case HSM2_MOD_WNJ: mod->HSM2_wnj = value->rValue; mod->HSM2_wnj_Given = TRUE; break; case HSM2_MOD_WCISBK: mod->HSM2_wcisbk = value->rValue; mod->HSM2_wcisbk_Given = TRUE; break; case HSM2_MOD_WCLM1: mod->HSM2_wclm1 = value->rValue; mod->HSM2_wclm1_Given = TRUE; break; case HSM2_MOD_WCLM2: mod->HSM2_wclm2 = value->rValue; mod->HSM2_wclm2_Given = TRUE; break; case HSM2_MOD_WCLM3: mod->HSM2_wclm3 = value->rValue; mod->HSM2_wclm3_Given = TRUE; break; case HSM2_MOD_WWFC: mod->HSM2_wwfc = value->rValue; mod->HSM2_wwfc_Given = TRUE; break; case HSM2_MOD_WGIDL1: mod->HSM2_wgidl1 = value->rValue; mod->HSM2_wgidl1_Given = TRUE; break; case HSM2_MOD_WGIDL2: mod->HSM2_wgidl2 = value->rValue; mod->HSM2_wgidl2_Given = TRUE; break; case HSM2_MOD_WGLEAK1: mod->HSM2_wgleak1 = value->rValue; mod->HSM2_wgleak1_Given = TRUE; break; case HSM2_MOD_WGLEAK2: mod->HSM2_wgleak2 = value->rValue; mod->HSM2_wgleak2_Given = TRUE; break; case HSM2_MOD_WGLEAK3: mod->HSM2_wgleak3 = value->rValue; mod->HSM2_wgleak3_Given = TRUE; break; case HSM2_MOD_WGLEAK6: mod->HSM2_wgleak6 = value->rValue; mod->HSM2_wgleak6_Given = TRUE; break; case HSM2_MOD_WGLKSD1: mod->HSM2_wglksd1 = value->rValue; mod->HSM2_wglksd1_Given = TRUE; break; case HSM2_MOD_WGLKSD2: mod->HSM2_wglksd2 = value->rValue; mod->HSM2_wglksd2_Given = TRUE; break; case HSM2_MOD_WGLKB1: mod->HSM2_wglkb1 = value->rValue; mod->HSM2_wglkb1_Given = TRUE; break; case HSM2_MOD_WGLKB2: mod->HSM2_wglkb2 = value->rValue; mod->HSM2_wglkb2_Given = TRUE; break; case HSM2_MOD_WNFTRP: mod->HSM2_wnftrp = value->rValue; mod->HSM2_wnftrp_Given = TRUE; break; case HSM2_MOD_WNFALP: mod->HSM2_wnfalp = value->rValue; mod->HSM2_wnfalp_Given = TRUE; break; case HSM2_MOD_WVDIFFJ: mod->HSM2_wvdiffj = value->rValue; mod->HSM2_wvdiffj_Given = TRUE; break; case HSM2_MOD_WIBPC1: mod->HSM2_wibpc1 = value->rValue; mod->HSM2_wibpc1_Given = TRUE; break; case HSM2_MOD_WIBPC2: mod->HSM2_wibpc2 = value->rValue; mod->HSM2_wibpc2_Given = TRUE; break; /* Cross-term dependence */ case HSM2_MOD_PVMAX: mod->HSM2_pvmax = value->rValue; mod->HSM2_pvmax_Given = TRUE; break; case HSM2_MOD_PBGTMP1: mod->HSM2_pbgtmp1 = value->rValue; mod->HSM2_pbgtmp1_Given = TRUE; break; case HSM2_MOD_PBGTMP2: mod->HSM2_pbgtmp2 = value->rValue; mod->HSM2_pbgtmp2_Given = TRUE; break; case HSM2_MOD_PEG0: mod->HSM2_peg0 = value->rValue; mod->HSM2_peg0_Given = TRUE; break; case HSM2_MOD_PLOVER: mod->HSM2_plover = value->rValue; mod->HSM2_plover_Given = TRUE; break; case HSM2_MOD_PVFBOVER: mod->HSM2_pvfbover = value->rValue; mod->HSM2_pvfbover_Given = TRUE; break; case HSM2_MOD_PNOVER: mod->HSM2_pnover = value->rValue; mod->HSM2_pnover_Given = TRUE; break; case HSM2_MOD_PWL2: mod->HSM2_pwl2 = value->rValue; mod->HSM2_pwl2_Given = TRUE; break; case HSM2_MOD_PVFBC: mod->HSM2_pvfbc = value->rValue; mod->HSM2_pvfbc_Given = TRUE; break; case HSM2_MOD_PNSUBC: mod->HSM2_pnsubc = value->rValue; mod->HSM2_pnsubc_Given = TRUE; break; case HSM2_MOD_PNSUBP: mod->HSM2_pnsubp = value->rValue; mod->HSM2_pnsubp_Given = TRUE; break; case HSM2_MOD_PSCP1: mod->HSM2_pscp1 = value->rValue; mod->HSM2_pscp1_Given = TRUE; break; case HSM2_MOD_PSCP2: mod->HSM2_pscp2 = value->rValue; mod->HSM2_pscp2_Given = TRUE; break; case HSM2_MOD_PSCP3: mod->HSM2_pscp3 = value->rValue; mod->HSM2_pscp3_Given = TRUE; break; case HSM2_MOD_PSC1: mod->HSM2_psc1 = value->rValue; mod->HSM2_psc1_Given = TRUE; break; case HSM2_MOD_PSC2: mod->HSM2_psc2 = value->rValue; mod->HSM2_psc2_Given = TRUE; break; case HSM2_MOD_PSC3: mod->HSM2_psc3 = value->rValue; mod->HSM2_psc3_Given = TRUE; break; case HSM2_MOD_PSC4: mod->HSM2_psc4 = value->rValue; mod->HSM2_psc4_Given = TRUE; break; case HSM2_MOD_PPGD1: mod->HSM2_ppgd1 = value->rValue; mod->HSM2_ppgd1_Given = TRUE; break; //case HSM2_MOD_PPGD3: // mod->HSM2_ppgd3 = value->rValue; // mod->HSM2_ppgd3_Given = TRUE; // break; case HSM2_MOD_PNDEP: mod->HSM2_pndep = value->rValue; mod->HSM2_pndep_Given = TRUE; break; case HSM2_MOD_PNINV: mod->HSM2_pninv = value->rValue; mod->HSM2_pninv_Given = TRUE; break; case HSM2_MOD_PMUECB0: mod->HSM2_pmuecb0 = value->rValue; mod->HSM2_pmuecb0_Given = TRUE; break; case HSM2_MOD_PMUECB1: mod->HSM2_pmuecb1 = value->rValue; mod->HSM2_pmuecb1_Given = TRUE; break; case HSM2_MOD_PMUEPH1: mod->HSM2_pmueph1 = value->rValue; mod->HSM2_pmueph1_Given = TRUE; break; case HSM2_MOD_PVTMP: mod->HSM2_pvtmp = value->rValue; mod->HSM2_pvtmp_Given = TRUE; break; case HSM2_MOD_PWVTH0: mod->HSM2_pwvth0 = value->rValue; mod->HSM2_pwvth0_Given = TRUE; break; case HSM2_MOD_PMUESR1: mod->HSM2_pmuesr1 = value->rValue; mod->HSM2_pmuesr1_Given = TRUE; break; case HSM2_MOD_PMUETMP: mod->HSM2_pmuetmp = value->rValue; mod->HSM2_pmuetmp_Given = TRUE; break; case HSM2_MOD_PSUB1: mod->HSM2_psub1 = value->rValue; mod->HSM2_psub1_Given = TRUE; break; case HSM2_MOD_PSUB2: mod->HSM2_psub2 = value->rValue; mod->HSM2_psub2_Given = TRUE; break; case HSM2_MOD_PSVDS: mod->HSM2_psvds = value->rValue; mod->HSM2_psvds_Given = TRUE; break; case HSM2_MOD_PSVBS: mod->HSM2_psvbs = value->rValue; mod->HSM2_psvbs_Given = TRUE; break; case HSM2_MOD_PSVGS: mod->HSM2_psvgs = value->rValue; mod->HSM2_psvgs_Given = TRUE; break; case HSM2_MOD_PNSTI: mod->HSM2_pnsti = value->rValue; mod->HSM2_pnsti_Given = TRUE; break; case HSM2_MOD_PWSTI: mod->HSM2_pwsti = value->rValue; mod->HSM2_pwsti_Given = TRUE; break; case HSM2_MOD_PSCSTI1: mod->HSM2_pscsti1 = value->rValue; mod->HSM2_pscsti1_Given = TRUE; break; case HSM2_MOD_PSCSTI2: mod->HSM2_pscsti2 = value->rValue; mod->HSM2_pscsti2_Given = TRUE; break; case HSM2_MOD_PVTHSTI: mod->HSM2_pvthsti = value->rValue; mod->HSM2_pvthsti_Given = TRUE; break; case HSM2_MOD_PMUESTI1: mod->HSM2_pmuesti1 = value->rValue; mod->HSM2_pmuesti1_Given = TRUE; break; case HSM2_MOD_PMUESTI2: mod->HSM2_pmuesti2 = value->rValue; mod->HSM2_pmuesti2_Given = TRUE; break; case HSM2_MOD_PMUESTI3: mod->HSM2_pmuesti3 = value->rValue; mod->HSM2_pmuesti3_Given = TRUE; break; case HSM2_MOD_PNSUBPSTI1: mod->HSM2_pnsubpsti1 = value->rValue; mod->HSM2_pnsubpsti1_Given = TRUE; break; case HSM2_MOD_PNSUBPSTI2: mod->HSM2_pnsubpsti2 = value->rValue; mod->HSM2_pnsubpsti2_Given = TRUE; break; case HSM2_MOD_PNSUBPSTI3: mod->HSM2_pnsubpsti3 = value->rValue; mod->HSM2_pnsubpsti3_Given = TRUE; break; case HSM2_MOD_PNSUBCSTI1: mod->HSM2_pnsubcsti1 = value->rValue; mod->HSM2_pnsubcsti1_Given = TRUE; break; case HSM2_MOD_PNSUBCSTI2: mod->HSM2_pnsubcsti2 = value->rValue; mod->HSM2_pnsubcsti2_Given = TRUE; break; case HSM2_MOD_PNSUBCSTI3: mod->HSM2_pnsubcsti3 = value->rValue; mod->HSM2_pnsubcsti3_Given = TRUE; break; case HSM2_MOD_PCGSO: mod->HSM2_pcgso = value->rValue; mod->HSM2_pcgso_Given = TRUE; break; case HSM2_MOD_PCGDO: mod->HSM2_pcgdo = value->rValue; mod->HSM2_pcgdo_Given = TRUE; break; case HSM2_MOD_PJS0: mod->HSM2_pjs0 = value->rValue; mod->HSM2_pjs0_Given = TRUE; break; case HSM2_MOD_PJS0SW: mod->HSM2_pjs0sw = value->rValue; mod->HSM2_pjs0sw_Given = TRUE; break; case HSM2_MOD_PNJ: mod->HSM2_pnj = value->rValue; mod->HSM2_pnj_Given = TRUE; break; case HSM2_MOD_PCISBK: mod->HSM2_pcisbk = value->rValue; mod->HSM2_pcisbk_Given = TRUE; break; case HSM2_MOD_PCLM1: mod->HSM2_pclm1 = value->rValue; mod->HSM2_pclm1_Given = TRUE; break; case HSM2_MOD_PCLM2: mod->HSM2_pclm2 = value->rValue; mod->HSM2_pclm2_Given = TRUE; break; case HSM2_MOD_PCLM3: mod->HSM2_pclm3 = value->rValue; mod->HSM2_pclm3_Given = TRUE; break; case HSM2_MOD_PWFC: mod->HSM2_pwfc = value->rValue; mod->HSM2_pwfc_Given = TRUE; break; case HSM2_MOD_PGIDL1: mod->HSM2_pgidl1 = value->rValue; mod->HSM2_pgidl1_Given = TRUE; break; case HSM2_MOD_PGIDL2: mod->HSM2_pgidl2 = value->rValue; mod->HSM2_pgidl2_Given = TRUE; break; case HSM2_MOD_PGLEAK1: mod->HSM2_pgleak1 = value->rValue; mod->HSM2_pgleak1_Given = TRUE; break; case HSM2_MOD_PGLEAK2: mod->HSM2_pgleak2 = value->rValue; mod->HSM2_pgleak2_Given = TRUE; break; case HSM2_MOD_PGLEAK3: mod->HSM2_pgleak3 = value->rValue; mod->HSM2_pgleak3_Given = TRUE; break; case HSM2_MOD_PGLEAK6: mod->HSM2_pgleak6 = value->rValue; mod->HSM2_pgleak6_Given = TRUE; break; case HSM2_MOD_PGLKSD1: mod->HSM2_pglksd1 = value->rValue; mod->HSM2_pglksd1_Given = TRUE; break; case HSM2_MOD_PGLKSD2: mod->HSM2_pglksd2 = value->rValue; mod->HSM2_pglksd2_Given = TRUE; break; case HSM2_MOD_PGLKB1: mod->HSM2_pglkb1 = value->rValue; mod->HSM2_pglkb1_Given = TRUE; break; case HSM2_MOD_PGLKB2: mod->HSM2_pglkb2 = value->rValue; mod->HSM2_pglkb2_Given = TRUE; break; case HSM2_MOD_PNFTRP: mod->HSM2_pnftrp = value->rValue; mod->HSM2_pnftrp_Given = TRUE; break; case HSM2_MOD_PNFALP: mod->HSM2_pnfalp = value->rValue; mod->HSM2_pnfalp_Given = TRUE; break; case HSM2_MOD_PVDIFFJ: mod->HSM2_pvdiffj = value->rValue; mod->HSM2_pvdiffj_Given = TRUE; break; case HSM2_MOD_PIBPC1: mod->HSM2_pibpc1 = value->rValue; mod->HSM2_pibpc1_Given = TRUE; break; case HSM2_MOD_PIBPC2: mod->HSM2_pibpc2 = value->rValue; mod->HSM2_pibpc2_Given = TRUE; break; case HSM2_MOD_VGS_MAX: mod->HSM2vgsMax = value->rValue; mod->HSM2vgsMaxGiven = TRUE; break; case HSM2_MOD_VGD_MAX: mod->HSM2vgdMax = value->rValue; mod->HSM2vgdMaxGiven = TRUE; break; case HSM2_MOD_VGB_MAX: mod->HSM2vgbMax = value->rValue; mod->HSM2vgbMaxGiven = TRUE; break; case HSM2_MOD_VDS_MAX: mod->HSM2vdsMax = value->rValue; mod->HSM2vdsMaxGiven = TRUE; break; case HSM2_MOD_VBS_MAX: mod->HSM2vbsMax = value->rValue; mod->HSM2vbsMaxGiven = TRUE; break; case HSM2_MOD_VBD_MAX: mod->HSM2vbdMax = value->rValue; mod->HSM2vbdMaxGiven = TRUE; break; case HSM2_MOD_VGSR_MAX: mod->HSM2vgsrMax = value->rValue; mod->HSM2vgsrMaxGiven = TRUE; break; case HSM2_MOD_VGDR_MAX: mod->HSM2vgdrMax = value->rValue; mod->HSM2vgdrMaxGiven = TRUE; break; case HSM2_MOD_VGBR_MAX: mod->HSM2vgbrMax = value->rValue; mod->HSM2vgbrMaxGiven = TRUE; break; case HSM2_MOD_VBSR_MAX: mod->HSM2vbsrMax = value->rValue; mod->HSM2vbsrMaxGiven = TRUE; break; case HSM2_MOD_VBDR_MAX: mod->HSM2vbdrMax = value->rValue; mod->HSM2vbdrMaxGiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2ext.h0000644000175000017500000000310113546075722022114 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM ( VERSION : 2 SUBVERSION : 8 REVISION : 0 ) FILE : hsm2ext.h Date : 2014.6.5 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ extern int HSM2acLoad(GENmodel *,CKTcircuit*); extern int HSM2ask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*); extern int HSM2convTest(GENmodel *,CKTcircuit*); extern int HSM2getic(GENmodel*,CKTcircuit*); extern int HSM2load(GENmodel*,CKTcircuit*); extern int HSM2mAsk(CKTcircuit*,GENmodel *,int, IFvalue*); extern int HSM2mDelete(GENmodel*); extern int HSM2mParam(int,IFvalue*,GENmodel*); extern void HSM2mosCap(CKTcircuit*, double, double, double, double*, double, double, double, double, double, double, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*); extern int HSM2param(int,IFvalue*,GENinstance*,IFvalue*); extern int HSM2pzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int HSM2setup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int HSM2unsetup(GENmodel*,CKTcircuit*); extern int HSM2temp(GENmodel*,CKTcircuit*); extern int HSM2trunc(GENmodel*,CKTcircuit*,double*); extern int HSM2noise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int HSM2soaCheck(CKTcircuit *, GENmodel *); tmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2ask.c0000644000175000017500000002132613546075722022076 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM ( VERSION : 2 SUBVERSION : 8 REVISION : 0 ) FILE : hsm2ask.c Date : 2014.6.5 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HiSIM2 Distribution Statement and Copyright Notice" attached to HiSIM2 model. -----HiSIM2 Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaim all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." *************************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "hsm2def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HSM2ask( CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { HSM2instance *here = (HSM2instance*)inst; NG_IGNORE(select); switch (which) { case HSM2_L: value->rValue = here->HSM2_l; return(OK); case HSM2_W: value->rValue = here->HSM2_w; return(OK); case HSM2_AS: value->rValue = here->HSM2_as; return(OK); case HSM2_AD: value->rValue = here->HSM2_ad; return(OK); case HSM2_PS: value->rValue = here->HSM2_ps; return(OK); case HSM2_PD: value->rValue = here->HSM2_pd; return(OK); case HSM2_NRS: value->rValue = here->HSM2_nrs; return(OK); case HSM2_NRD: value->rValue = here->HSM2_nrd; return(OK); case HSM2_TEMP: value->rValue = here->HSM2_temp; return(OK); case HSM2_DTEMP: value->rValue = here->HSM2_dtemp; return(OK); case HSM2_OFF: value->iValue = here->HSM2_off; return(OK); case HSM2_IC_VBS: value->rValue = here->HSM2_icVBS; return(OK); case HSM2_IC_VDS: value->rValue = here->HSM2_icVDS; return(OK); case HSM2_IC_VGS: value->rValue = here->HSM2_icVGS; return(OK); case HSM2_DNODE: value->iValue = here->HSM2dNode; return(OK); case HSM2_GNODE: value->iValue = here->HSM2gNode; return(OK); case HSM2_SNODE: value->iValue = here->HSM2sNode; return(OK); case HSM2_BNODE: value->iValue = here->HSM2bNode; return(OK); case HSM2_DNODEPRIME: value->iValue = here->HSM2dNodePrime; return(OK); case HSM2_SNODEPRIME: value->iValue = here->HSM2sNodePrime; return(OK); case HSM2_SOURCECONDUCT: value->rValue = here->HSM2sourceConductance; return(OK); case HSM2_DRAINCONDUCT: value->rValue = here->HSM2drainConductance; return(OK); case HSM2_VBD: value->rValue = *(ckt->CKTstate0 + here->HSM2vbd); return(OK); case HSM2_VBS: value->rValue = *(ckt->CKTstate0 + here->HSM2vbs); return(OK); case HSM2_VGS: value->rValue = *(ckt->CKTstate0 + here->HSM2vgs); return(OK); case HSM2_VDS: value->rValue = *(ckt->CKTstate0 + here->HSM2vds); return(OK); case HSM2_CD: value->rValue = here->HSM2_ids; return(OK); case HSM2_ISUB: value->rValue = here->HSM2_isub; return(OK); case HSM2_IGIDL: value->rValue = here->HSM2_igidl; return(OK); case HSM2_IGISL: value->rValue = here->HSM2_igisl; return(OK); case HSM2_IGD: value->rValue = here->HSM2_igd; return(OK); case HSM2_IGS: value->rValue = here->HSM2_igs; return(OK); case HSM2_IGB: value->rValue = here->HSM2_igb; return(OK); case HSM2_CBS: value->rValue = here->HSM2_ibs; return(OK); case HSM2_CBD: value->rValue = here->HSM2_ibd; return(OK); case HSM2_GM: value->rValue = here->HSM2_gm; return(OK); case HSM2_GDS: value->rValue = here->HSM2_gds; return(OK); case HSM2_GMBS: value->rValue = here->HSM2_gmbs; return(OK); case HSM2_GBD: value->rValue = here->HSM2_gbd; return(OK); case HSM2_GBS: value->rValue = here->HSM2_gbs; return(OK); case HSM2_QB: value->rValue = *(ckt->CKTstate0 + here->HSM2qb); return(OK); case HSM2_CQB: value->rValue = *(ckt->CKTstate0 + here->HSM2cqb); return(OK); case HSM2_QG: value->rValue = *(ckt->CKTstate0 + here->HSM2qg); return(OK); case HSM2_CQG: value->rValue = *(ckt->CKTstate0 + here->HSM2cqg); return(OK); case HSM2_QD: value->rValue = *(ckt->CKTstate0 + here->HSM2qd); return(OK); case HSM2_CQD: value->rValue = *(ckt->CKTstate0 + here->HSM2cqd); return(OK); case HSM2_CGG: value->rValue = here->HSM2_cggb; return(OK); case HSM2_CGD: value->rValue = here->HSM2_cgdb; return(OK); case HSM2_CGS: value->rValue = here->HSM2_cgsb; return(OK); case HSM2_CDG: value->rValue = here->HSM2_cdgb; return(OK); case HSM2_CDD: value->rValue = here->HSM2_cddb; return(OK); case HSM2_CDS: value->rValue = here->HSM2_cdsb; return(OK); case HSM2_CBG: value->rValue = here->HSM2_cbgb; return(OK); case HSM2_CBDB: value->rValue = here->HSM2_cbdb; return(OK); case HSM2_CBSB: value->rValue = here->HSM2_cbsb; return(OK); case HSM2_CGDO: value->rValue = here->HSM2_cgdo; return(OK); case HSM2_CGSO: value->rValue = here->HSM2_cgso; return(OK); case HSM2_CGBO: value->rValue = here->HSM2_cgbo; return(OK); case HSM2_CAPBD: value->rValue = here->HSM2_capbd; return(OK); case HSM2_CAPBS: value->rValue = here->HSM2_capbs; return(OK); case HSM2_VON: value->rValue = here->HSM2_von; return(OK); case HSM2_VDSAT: value->rValue = here->HSM2_vdsat; return(OK); case HSM2_QBS: value->rValue = *(ckt->CKTstate0 + here->HSM2qbs); return(OK); case HSM2_QBD: value->rValue = *(ckt->CKTstate0 + here->HSM2qbd); return(OK); case HSM2_CORBNET: value->iValue = here->HSM2_corbnet; return(OK); case HSM2_RBPB: value->rValue = here->HSM2_rbpb; return (OK); case HSM2_RBPD: value->rValue = here->HSM2_rbpd; return(OK); case HSM2_RBPS: value->rValue = here->HSM2_rbps; return(OK); case HSM2_RBDB: value->rValue = here->HSM2_rbdb; return(OK); case HSM2_RBSB: value->rValue = here->HSM2_rbsb; return(OK); case HSM2_CORG: value->iValue = here->HSM2_corg; return(OK); /* case HSM2_RSHG: */ /* value->rValue = here->HSM2_rshg; */ /* return(OK); */ case HSM2_NGCON: value->rValue = here->HSM2_ngcon; return(OK); case HSM2_XGW: value->rValue = here->HSM2_xgw; return(OK); case HSM2_XGL: value->rValue = here->HSM2_xgl; return(OK); case HSM2_NF: value->rValue = here->HSM2_nf; return(OK); case HSM2_SA: value->rValue = here->HSM2_sa; return(OK); case HSM2_SB: value->rValue = here->HSM2_sb; return(OK); case HSM2_SD: value->rValue = here->HSM2_sd; return(OK); case HSM2_NSUBCDFM: value->rValue = here->HSM2_nsubcdfm; return(OK); case HSM2_MPHDFM: value->rValue = here->HSM2_mphdfm; return(OK); case HSM2_M: value->rValue = here->HSM2_m; return(OK); /* WPE */ case HSM2_SCA: value->rValue = here->HSM2_sca; return(OK); case HSM2_SCB: value->rValue = here->HSM2_scb; return(OK); case HSM2_SCC: value->rValue = here->HSM2_scc; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2acld.c0000644000175000017500000006072713546075722022233 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM ( VERSION : 2 SUBVERSION : 8 REVISION : 0 ) FILE : hsm2acld.c Date : 2014.6.5 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HiSIM2 Distribution Statement and Copyright Notice" attached to HiSIM2 model. -----HiSIM2 Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaim all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." *************************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "hsm2def.h" int HSM2acLoad( GENmodel *inModel, CKTcircuit *ckt) { HSM2model *model = (HSM2model*)inModel; HSM2instance *here; double xcggb_r, xcgdb_r, xcgsb_r, xcgbb_r, xcggb_i, xcgdb_i, xcgsb_i, xcgbb_i; double xcbgb_r, xcbdb_r, xcbsb_r, xcbbb_r, xcbgb_i, xcbdb_i, xcbsb_i, xcbbb_i; double xcdgb_r, xcddb_r, xcdsb_r, xcdbb_r, xcdgb_i, xcddb_i, xcdsb_i, xcdbb_i; double xcsgb_r, xcsdb_r, xcssb_r, xcsbb_r, xcsgb_i, xcsdb_i, xcssb_i, xcsbb_i; double gdpr, gspr, gds, gbd, gbs, capbd, capbs, omega; double FwdSum, RevSum, gm, gmbs; double gbspsp, gbbdp, gbbsp, gbspg, gbspb; double gbspdp, gbdpdp, gbdpg, gbdpb, gbdpsp; double gIbtotg, gIbtotd, gIbtots, gIbtotb; double gIgtotg, gIgtotd, gIgtots, gIgtotb; double gIdtotg, gIdtotd, gIdtots, gIdtotb; double gIstotg, gIstotd, gIstots, gIstotb; double cggb_real = 0.0, cgsb_real = 0.0, cgdb_real = 0.0, cggb_imag = 0.0, cgsb_imag = 0.0, cgdb_imag = 0.0; double cdgb_real = 0.0, cdsb_real = 0.0, cddb_real = 0.0, cdgb_imag = 0.0, cdsb_imag = 0.0, cddb_imag = 0.0; double csgb_real = 0.0, cssb_real = 0.0, csdb_real = 0.0, csgb_imag = 0.0, cssb_imag = 0.0, csdb_imag = 0.0; double cbgb_real = 0.0, cbsb_real = 0.0, cbdb_real = 0.0, cbgb_imag = 0.0, cbsb_imag = 0.0, cbdb_imag = 0.0; double pyggb_r = 0.0, pygdb_r = 0.0, pygsb_r = 0.0, pygbb_r = 0.0; double pybgb_r = 0.0, pybdb_r = 0.0, pybsb_r = 0.0, pybbb_r = 0.0; double pydgb_r = 0.0, pyddb_r = 0.0, pydsb_r = 0.0, pydbb_r = 0.0; double pysgb_r = 0.0, pysdb_r = 0.0, pyssb_r = 0.0, pysbb_r = 0.0; double pyggb_i = 0.0, pygdb_i = 0.0, pygsb_i = 0.0, pygbb_i = 0.0; double pybgb_i = 0.0, pybdb_i = 0.0, pybsb_i = 0.0, pybbb_i = 0.0; double pydgb_i = 0.0, pyddb_i = 0.0, pydsb_i = 0.0, pydbb_i = 0.0; double pysgb_i = 0.0, pysdb_i = 0.0, pyssb_i = 0.0, pysbb_i = 0.0; double yggb_r, ygdb_r, ygsb_r, ygbb_r, yggb_i, ygdb_i, ygsb_i, ygbb_i; double ybgb_r, ybdb_r, ybsb_r, ybbb_r, ybgb_i, ybdb_i, ybsb_i, ybbb_i; double ydgb_r, yddb_r, ydsb_r, ydbb_r, ydgb_i, yddb_i, ydsb_i, ydbb_i; double ysgb_r, ysdb_r, yssb_r, ysbb_r, ysgb_i, ysdb_i, yssb_i, ysbb_i; double grg = 0.0, pxcbdb_i = 0.0, pxcbsb_i = 0.0; double Qi, Qi_dVgs, Qi_dVbs, Qi_dVds ; #ifdef DEBUG_HISIM2CGG double Qb ; #endif double Qb_dVgs, Qb_dVbs, Qb_dVds ; double tau ; double taub ; double Xd, Xd_dVgs, Xd_dVbs, Xd_dVds ; double T1, T2, T3, T4 ; double cdbs_real, cgbs_real, csbs_real, cbbs_real; double cdbs_imag, cgbs_imag, csbs_imag, cbbs_imag; omega = ckt->CKTomega; for ( ; model != NULL; model = HSM2nextModel(model)) { for ( here = HSM2instances(model); here!= NULL; here = HSM2nextInstance(here)) { gdpr = here->HSM2drainConductance; gspr = here->HSM2sourceConductance; gds = here->HSM2_gds; gbd = here->HSM2_gbd; gbs = here->HSM2_gbs; capbd = here->HSM2_capbd; capbs = here->HSM2_capbs; if (model->HSM2_conqs) { /* for nqs mode */ tau = here->HSM2_tau ; taub = here->HSM2_taub ; Xd = here->HSM2_Xd; Xd_dVgs = here->HSM2_Xd_dVgs ; Xd_dVds = here->HSM2_Xd_dVds ; Xd_dVbs = here->HSM2_Xd_dVbs ; Qi = here->HSM2_Qi ; Qi_dVgs = here->HSM2_Qi_dVgs ; Qi_dVds = here->HSM2_Qi_dVds ; Qi_dVbs = here->HSM2_Qi_dVbs ; #ifdef DEBUG_HISIM2CGG Qb = here->HSM2_Qb ; #endif Qb_dVgs = here->HSM2_Qb_dVgs ; Qb_dVds = here->HSM2_Qb_dVds ; Qb_dVbs = here->HSM2_Qb_dVbs ; T1 = 1.0 + (tau * omega) * (tau * omega); T2 = tau * omega / T1; T3 = 1.0 + (taub * omega) * (taub * omega); T4 = taub * omega / T3; cddb_real = Xd_dVds*Qi + Xd/T1*Qi_dVds; cdgb_real = Xd_dVgs*Qi + Xd/T1*Qi_dVgs; cdbs_real = Xd_dVbs*Qi + Xd/T1*Qi_dVbs; cdsb_real = - (cddb_real + cdgb_real + cdbs_real); cddb_imag = - T2*Xd*Qi_dVds; cdgb_imag = - T2*Xd*Qi_dVgs; cdbs_imag = - T2*Xd*Qi_dVbs; cdsb_imag = - (cddb_imag + cdgb_imag + cdbs_imag); csdb_real = - Xd_dVds*Qi + (1.0-Xd)/T1*Qi_dVds; csgb_real = - Xd_dVgs*Qi + (1.0-Xd)/T1*Qi_dVgs; csbs_real = - Xd_dVbs*Qi + (1.0-Xd)/T1*Qi_dVbs; cssb_real = - (csdb_real + csgb_real + csbs_real); csdb_imag = - T2*(1.0-Xd)*Qi_dVds; csgb_imag = - T2*(1.0-Xd)*Qi_dVgs; csbs_imag = - T2*(1.0-Xd)*Qi_dVbs; cssb_imag = - (csdb_imag + csgb_imag + csbs_imag); cbdb_real = Qb_dVds/T3; cbgb_real = Qb_dVgs/T3; cbbs_real = Qb_dVbs/T3; cbsb_real = - (cbdb_real + cbgb_real + cbbs_real); cbdb_imag = - T4*Qb_dVds; cbgb_imag = - T4*Qb_dVgs; cbbs_imag = - T4*Qb_dVbs; cbsb_imag = - (cbdb_imag + cbgb_imag + cbbs_imag); cgdb_real = - Qi_dVds/T1 - Qb_dVds/T3; cggb_real = - Qi_dVgs/T1 - Qb_dVgs/T3; cgbs_real = - Qi_dVbs/T1 - Qb_dVbs/T3; cgsb_real = - (cgdb_real + cggb_real + cgbs_real); cgdb_imag = T2*Qi_dVds + T4*Qb_dVds; cggb_imag = T2*Qi_dVgs + T4*Qb_dVgs; cgbs_imag = T2*Qi_dVbs + T4*Qb_dVbs; cgsb_imag = - (cgdb_imag + cggb_imag + cgbs_imag); #ifdef DEBUG_HISIM2CGG printf("Freq. %e ", omega/(2*3.14159265358979) ) ; printf("mag[Cgg] %e ", sqrt( cggb_real * cggb_real + cggb_imag * cggb_imag ) ) ; printf("qi %e ", ( sqrt(T1) / T1 ) * Qi ) ; printf("qb %e ", ( sqrt(T3) / T3 ) * Qb ) ; printf("\n") ; #endif #ifdef DEBUG_HISIM2AC printf ("#1 cssb, cggb, cgdb, cgsb, cdgb, cddb, cdsb, csgb, csdb %e %e %e %e %e %e %e %e %e %e %e %e\n", cggb_real, cgdb_real, cgsb_real, cdgb_real, cddb_real, cdsb_real, csgb_real, csdb_real, cssb_real); #endif } if ( here->HSM2_mode >= 0 ) { gm = here->HSM2_gm; gmbs = here->HSM2_gmbs; FwdSum = gm + gmbs; RevSum = 0.0; gbbdp = -here->HSM2_gbds; gbbsp = here->HSM2_gbds + here->HSM2_gbgs + here->HSM2_gbbs; gbdpg = here->HSM2_gbgs; gbdpb = here->HSM2_gbbs; gbdpdp = here->HSM2_gbds; gbdpsp = -(gbdpg + gbdpb + gbdpdp); gbspdp = 0.0; gbspg = 0.0; gbspb = 0.0; gbspsp = 0.0; if (model->HSM2_coiigs) { gIbtotg = here->HSM2_gigbg; gIbtotd = here->HSM2_gigbd; gIbtots = here->HSM2_gigbs; gIbtotb = here->HSM2_gigbb; gIstotg = here->HSM2_gigsg; gIstotd = here->HSM2_gigsd; gIstots = here->HSM2_gigss; gIstotb = here->HSM2_gigsb; gIdtotg = here->HSM2_gigdg; gIdtotd = here->HSM2_gigdd; gIdtots = here->HSM2_gigds; gIdtotb = here->HSM2_gigdb; } else { gIbtotg = gIbtotd = gIbtots = gIbtotb = 0.0; gIstotg = gIstotd = gIstots = gIstotb = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = 0.0; } if (model->HSM2_coiigs) { gIgtotg = gIbtotg + gIstotg + gIdtotg; gIgtotd = gIbtotd + gIstotd + gIdtotd; gIgtots = gIbtots + gIstots + gIdtots; gIgtotb = gIbtotb + gIstotb + gIdtotb; } else { gIgtotg = gIgtotd = gIgtots = gIgtotb = 0.0; } if (model->HSM2_conqs) { /* for nqs mode */ /* cggb_real, cgsb_real, cgdb_real cggb_imag, cgsb_imag, cgdb_imag cdgb_real, cdsb_real, cddb_real cdgb_imag, cdsb_imag, cddb_imag csgb_real, cssb_real, csdb_real csgb_imag, cssb_imag, csdb_imag cbgb_real, cbsb_real, cbdb_real cbgb_imag, cbsb_imag, cbdb_imag have already obtained. */ if (model->HSM2_coadov == 1) { /* add overlap caps to intrinsic caps */ pydgb_i = (here->HSM2_cdgo - here->HSM2_cqyg) * omega ; pyddb_i = (here->HSM2_cddo - here->HSM2_cqyd) * omega ; pydsb_i = (here->HSM2_cdso + here->HSM2_cqyg + here->HSM2_cqyd + here->HSM2_cqyb) * omega ; pydbb_i = -(pydgb_i + pyddb_i + pydsb_i) ; pysgb_i = here->HSM2_csgo * omega ; pysdb_i = here->HSM2_csdo * omega ; pyssb_i = here->HSM2_csso * omega ; pysbb_i = -(pysgb_i + pysdb_i + pyssb_i) ; pyggb_i = (-(here->HSM2_cgdo + here->HSM2_cgbo + here->HSM2_cgso) + here->HSM2_cqyg) * omega ; pygdb_i = (here->HSM2_cgdo + here->HSM2_cqyd) * omega ; pygsb_i = (here->HSM2_cgso - here->HSM2_cqyg - here->HSM2_cqyd - here->HSM2_cqyb) * omega ; pygbb_i = -(pyggb_i + pygdb_i + pygsb_i) ; } } else { /* for qs mode */ /* if coadov = 1, coverlap caps have been arleady added to intrinsic caps (QS mode)*/ cggb_real = here->HSM2_cggb; cgsb_real = here->HSM2_cgsb; cgdb_real = here->HSM2_cgdb; cggb_imag = cgsb_imag = cgdb_imag = 0.0; cbgb_real = here->HSM2_cbgb; cbsb_real = here->HSM2_cbsb; cbdb_real = here->HSM2_cbdb; cbgb_imag = cbsb_imag = cbdb_imag = 0.0; cdgb_real = here->HSM2_cdgb; cdsb_real = here->HSM2_cdsb; cddb_real = here->HSM2_cddb; cdgb_imag = cdsb_imag = cddb_imag = 0.0; csgb_real = -(cdgb_real + cggb_real + cbgb_real); cssb_real = -(cdsb_real + cgsb_real + cbsb_real); csdb_real = -(cddb_real + cgdb_real + cbdb_real); csgb_imag = cssb_imag = csdb_imag = 0.0; pyggb_i = 0.0; pygdb_i = 0.0; pygsb_i = 0.0; pygbb_i = 0.0; pybgb_i = 0.0; pybdb_i = 0.0; pybsb_i = 0.0; pybbb_i = 0.0; pydgb_i = 0.0; pyddb_i = 0.0; pydsb_i = 0.0; pydbb_i = 0.0; pysgb_i = 0.0; pysdb_i = 0.0; pyssb_i = 0.0; pysbb_i = 0.0; } } else { /* reverse mode */ gm = -here->HSM2_gm; gmbs = -here->HSM2_gmbs; FwdSum = 0.0; RevSum = -(gm + gmbs); gbbsp = -here->HSM2_gbds; gbbdp = here->HSM2_gbds + here->HSM2_gbgs + here->HSM2_gbbs; gbdpg = 0.0; gbdpsp = 0.0; gbdpb = 0.0; gbdpdp = 0.0; gbspg = here->HSM2_gbgs; gbspsp = here->HSM2_gbds; gbspb = here->HSM2_gbbs; gbspdp = -(gbspg + gbspsp + gbspb); if (model->HSM2_coiigs) { gIbtotg = here->HSM2_gigbg; gIbtotd = here->HSM2_gigbd; gIbtots = here->HSM2_gigbs; gIbtotb = here->HSM2_gigbb; gIstotg = here->HSM2_gigsg; gIstotd = here->HSM2_gigsd; gIstots = here->HSM2_gigss; gIstotb = here->HSM2_gigsb; gIdtotg = here->HSM2_gigdg; gIdtotd = here->HSM2_gigdd; gIdtots = here->HSM2_gigds; gIdtotb = here->HSM2_gigdb; } else { gIbtotg = gIbtotd = gIbtots = gIbtotb = 0.0; gIstotg = gIstotd = gIstots = gIstotb = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = 0.0; } if (model->HSM2_coiigs) { gIgtotg = gIbtotg + gIstotg + gIdtotg; gIgtotd = gIbtotd + gIstotd + gIdtotd; gIgtots = gIbtots + gIstots + gIdtots; gIgtotb = gIbtotb + gIstotb + gIdtotb; } else { gIgtotg = gIgtotd = gIgtots = gIgtotb = 0.0; } if (model->HSM2_conqs) { /* for nqs mode */ /* swap d with s, s with d */ /* cggb_real has already obtained. */ T1 = cgsb_real; cgsb_real = cgdb_real; cgdb_real = T1; /* cggb_imag has already obtained. */ T1 = cgsb_imag; cgsb_imag = cgdb_imag; cgdb_imag = T1; T1 = cdgb_real; cdgb_real = csgb_real; csgb_real = T1; T1 = cdsb_real; cdsb_real = csdb_real; csdb_real = T1; T1 = cddb_real; cddb_real = cssb_real; cssb_real = T1; T1 = cdgb_imag; cdgb_imag = csgb_imag; csgb_imag = T1; T1 = cdsb_imag; cdsb_imag = csdb_imag; csdb_imag = T1; T1 = cddb_imag; cddb_imag = cssb_imag; cssb_imag = T1; /* cbgb_real has already obtained. */ T1 = cbsb_real; cbsb_real = cbdb_real; cbdb_real = T1; /* cbgb_imag has already obtained. */ T1 = cbsb_imag; cbsb_imag = cbdb_imag; cbdb_imag = T1; if (model->HSM2_coadov == 1) { /* add overlap caps to intrinsic caps */ pydgb_i = here->HSM2_csgo * omega ; pyddb_i = here->HSM2_csso * omega ; pydsb_i = here->HSM2_csdo * omega ; pydbb_i = -(pydgb_i + pyddb_i + pydsb_i) ; pysgb_i = (here->HSM2_cdgo - here->HSM2_cqyg) * omega ; pysdb_i = (here->HSM2_cdso + here->HSM2_cqyg + here->HSM2_cqyd + here->HSM2_cqyb) * omega ; pyssb_i = (here->HSM2_cddo - here->HSM2_cqyd) * omega ; pysbb_i = -(pysgb_i + pysdb_i + pyssb_i) ; pyggb_i = (-(here->HSM2_cgdo + here->HSM2_cgbo + here->HSM2_cgso) + here->HSM2_cqyg) * omega ; pygdb_i = (here->HSM2_cgso - here->HSM2_cqyg - here->HSM2_cqyd - here->HSM2_cqyb) * omega ; pygsb_i = (here->HSM2_cgdo + here->HSM2_cqyd) * omega ; pygbb_i = -(pyggb_i + pygdb_i + pygsb_i) ; } } else { /* for qs mode */ /* if coadov = 1, coverlap caps have already been added to intrinsic caps (QS mode)*/ cggb_real = here->HSM2_cggb; cgsb_real = here->HSM2_cgdb; cgdb_real = here->HSM2_cgsb; cggb_imag = cgsb_imag = cgdb_imag = 0.0; cbgb_real = here->HSM2_cbgb; cbsb_real = here->HSM2_cbdb; cbdb_real = here->HSM2_cbsb; cbgb_imag = cbsb_imag = cbdb_imag = 0.0; csgb_real = here->HSM2_cdgb ; cssb_real = here->HSM2_cddb ; csdb_real = here->HSM2_cdsb ; csgb_imag = cssb_imag = csdb_imag = 0.0; cdgb_real = -(csgb_real + cggb_real + cbgb_real); cdsb_real = -(cssb_real + cgsb_real + cbsb_real); cddb_real = -(csdb_real + cgdb_real + cbdb_real); cdgb_imag = cdsb_imag = cddb_imag = 0.0; pyggb_i = 0.0; pygdb_i = 0.0; pygsb_i = 0.0; pygbb_i = 0.0; pybgb_i = 0.0; pybdb_i = 0.0; pybsb_i = 0.0; pybbb_i = 0.0; pydgb_i = 0.0; pyddb_i = 0.0; pydsb_i = 0.0; pydbb_i = 0.0; pysgb_i = 0.0; pysdb_i = 0.0; pyssb_i = 0.0; pysbb_i = 0.0; } } #ifdef DEBUG_HISIM2AC printf ("#2 cssb, cggb, cgdb, cgsb, cdgb, cddb, cdsb, csgb, csdb %e %e %e %e %e %e %e %e %e %e %e %e\n", cggb_real, cgdb_real, cgsb_real, cdgb_real, cddb_real, cdsb_real, csgb_real, csdb_real, cssb_real); #endif /* matrix elements for ac analysis (including real and imaginary parts) */ xcdgb_r = cdgb_real * omega; xcddb_r = cddb_real * omega; xcdsb_r = cdsb_real * omega; xcdbb_r = -(xcdgb_r + xcddb_r + xcdsb_r); xcsgb_r = csgb_real * omega; xcsdb_r = csdb_real * omega; xcssb_r = cssb_real * omega; xcsbb_r = -(xcsgb_r + xcsdb_r + xcssb_r); xcggb_r = cggb_real * omega; xcgdb_r = cgdb_real * omega; xcgsb_r = cgsb_real * omega; xcgbb_r = -(xcggb_r + xcgdb_r + xcgsb_r); xcbgb_r = cbgb_real * omega; xcbdb_r = cbdb_real * omega; xcbsb_r = cbsb_real * omega; xcbbb_r = -(xcbgb_r + xcbdb_r + xcbsb_r); xcdgb_i = cdgb_imag * omega; xcddb_i = cddb_imag * omega; xcdsb_i = cdsb_imag * omega; xcdbb_i = -(xcddb_i + xcdgb_i + xcdsb_i); xcsgb_i = csgb_imag * omega; xcsdb_i = csdb_imag * omega; xcssb_i = cssb_imag * omega; xcsbb_i = -(xcsdb_i + xcsgb_i + xcssb_i); xcggb_i = cggb_imag * omega; xcgdb_i = cgdb_imag * omega; xcgsb_i = cgsb_imag * omega; xcgbb_i = -(xcggb_i + xcgdb_i + xcgsb_i); xcbgb_i = cbgb_imag * omega; xcbdb_i = cbdb_imag * omega; xcbsb_i = cbsb_imag * omega; xcbbb_i = -(xcbgb_i + xcbdb_i + xcbsb_i); /* stamp intrinsic y-parameters */ yggb_r = - xcggb_i; yggb_i = xcggb_r; ygdb_r = - xcgdb_i; ygdb_i = xcgdb_r; ygsb_r = - xcgsb_i; ygsb_i = xcgsb_r; ygbb_r = - xcgbb_i; ygbb_i = xcgbb_r; ydgb_r = - xcdgb_i; ydgb_i = xcdgb_r; yddb_r = - xcddb_i; yddb_i = xcddb_r; ydsb_r = - xcdsb_i; ydsb_i = xcdsb_r; ydbb_r = - xcdbb_i; ydbb_i = xcdbb_r; ydgb_r += gm; yddb_r += gds + RevSum; ydsb_r += - gds - FwdSum; ydbb_r += gmbs; ysgb_r = - xcsgb_i; ysgb_i = xcsgb_r; ysdb_r = - xcsdb_i; ysdb_i = xcsdb_r; yssb_r = - xcssb_i; yssb_i = xcssb_r; ysbb_r = - xcsbb_i; ysbb_i = xcsbb_r; ysgb_r += - gm; ysdb_r += - gds - RevSum; yssb_r += gds + FwdSum; ysbb_r += - gmbs; ybgb_r = - xcbgb_i; ybgb_i = xcbgb_r; ybdb_r = - xcbdb_i; ybdb_i = xcbdb_r; ybsb_r = - xcbsb_i; ybsb_i = xcbsb_r; ybbb_r = - xcbbb_i; ybbb_i = xcbbb_r; /* Ibd, Ibs, Igate, Igd, Igs, Igb, Igidl, Igisl, Isub */ pydgb_r = gbdpg - gIdtotg + here->HSM2_gigidlgs ; pyddb_r = gbd + gbdpdp - gIdtotd + here->HSM2_gigidlds ; pydsb_r = gbdpsp - gIdtots - (here->HSM2_gigidlgs + here->HSM2_gigidlds + here->HSM2_gigidlbs); pydbb_r = gbdpb - gIdtotb + here->HSM2_gigidlbs ; if (!here->HSM2_corbnet) pydbb_r += - gbd; pysgb_r = gbspg - gIstotg + here->HSM2_gigislgd ; pysdb_r = gbspdp - gIstotd - (here->HSM2_gigislsd + here->HSM2_gigislgd + here->HSM2_gigislbd); pyssb_r = gbs + gbspsp - gIstots + here->HSM2_gigislsd ; pysbb_r =gbspb - gIstotb + here->HSM2_gigislbd ; if (!here->HSM2_corbnet) pysbb_r += - gbs; pyggb_r = gIgtotg ; if (here->HSM2_corg == 1) { grg = here->HSM2_grg; pyggb_r += grg; } pygdb_r = gIgtotd ; pygsb_r = gIgtots ; pygbb_r = gIgtotb ; pybgb_r = - here->HSM2_gbgs - gIbtotg - here->HSM2_gigidlgs - here->HSM2_gigislgd ; pybdb_r = gbbdp - gIbtotd - here->HSM2_gigidlds + (here->HSM2_gigislgd + here->HSM2_gigislsd + here->HSM2_gigislbd) ; if (!here->HSM2_corbnet) pybdb_r += - gbd ; pybsb_r = gbbsp - gIbtots + (here->HSM2_gigidlgs + here->HSM2_gigidlds + here->HSM2_gigidlbs) - here->HSM2_gigislsd ; if (!here->HSM2_corbnet) pybsb_r += - gbs ; pybbb_r = - here->HSM2_gbbs - gIbtotb - here->HSM2_gigidlbs - here->HSM2_gigislbd ; if (!here->HSM2_corbnet) pybbb_r += gbd + gbs ; pybdb_i = -(pyddb_i + pygdb_i + pysdb_i); pybgb_i = -(pydgb_i + pyggb_i + pysgb_i); pybsb_i = -(pydsb_i + pygsb_i + pyssb_i); pybbb_i = -(pydbb_i + pygbb_i + pysbb_i); /* Cbd, Cbs */ pyddb_i += capbd * omega ; pyssb_i += capbs * omega ; if (!here->HSM2_corbnet) { pydbb_i -= capbd * omega ; pysbb_i -= capbs * omega ; pybdb_i -= capbd * omega ; pybsb_i -= capbs * omega ; pybbb_i += (capbd + capbs) * omega ; } else { pxcbdb_i = - capbd * omega ; pxcbsb_i = - capbs * omega ; } #ifdef DEBUG_HISIM2AC /* for representing y-parameters */ printf("f ygg_r ygg_i %e %e %e\n",omega/(2.0*3.141592653589793),yggb_r+pyggb_r,yggb_i+pyggb_i); printf("f ygd_r ygd_i %e %e %e\n",omega/(2.0*3.141592653589793),ygdb_r+pygdb_r,ygdb_i+pygdb_i); printf("f ygs_r ygs_i %e %e %e\n",omega/(2.0*3.141592653589793),ygsb_r+pygsb_r,ygsb_i+pygsb_i); printf("f ygb_r ygb_i %e %e %e\n",omega/(2.0*3.141592653589793),ygbb_r+pygbb_r,ygbb_i+pygbb_i); printf("f ydg_r ydg_i %e %e %e\n",omega/(2.0*3.141592653589793),ydgb_r+pydgb_r,ydgb_i+pydgb_i); printf("f ydd_r ydd_i %e %e %e\n",omega/(2.0*3.141592653589793),yddb_r+pyddb_r,yddb_i+pyddb_i); printf("f yds_r yds_i %e %e %e\n",omega/(2.0*3.141592653589793),ydsb_r+pydsb_r,ydsb_i+pydsb_i); printf("f ydb_r ydb_i %e %e %e\n",omega/(2.0*3.141592653589793),ydbb_r+pydbb_r,ydbb_i+pydbb_i); printf("f ybg_r ybg_i %e %e %e\n",omega/(2.0*3.141592653589793),ybgb_r+pybgb_r,ybgb_i+pybgb_i); printf("f ybd_r ybd_i %e %e %e\n",omega/(2.0*3.141592653589793),ybdb_r+pybdb_r,ybdb_i+pybdb_i); printf("f ybs_r ybs_i %e %e %e\n",omega/(2.0*3.141592653589793),ybsb_r+pybsb_r,ybsb_i+pybsb_i); printf("f ybb_r ybb_i %e %e %e\n",omega/(2.0*3.141592653589793),ybbb_r+pybbb_r,ybbb_i+pybbb_i); printf("f ysg_r ysg_i %e %e %e\n",omega/(2.0*3.141592653589793),ysgb_r+pysgb_r,ysgb_i+pysgb_i); printf("f ysd_r ysd_i %e %e %e\n",omega/(2.0*3.141592653589793),ysdb_r+pysdb_r,ysdb_i+pysdb_i); printf("f yss_r yss_i %e %e %e\n",omega/(2.0*3.141592653589793),yssb_r+pyssb_r,yssb_i+pyssb_i); printf("f ysb_r ysb_i %e %e %e\n",omega/(2.0*3.141592653589793),ysbb_r+pysbb_r,ysbb_i+pysbb_i); printf("f y11r y11i y12r y12i y21r y21i y22r y22i %e %e %e %e %e %e %e %e %e\n",omega/(2.0*3.141592653589793),yggb_r+pyggb_r,yggb_i+pyggb_i, ygdb_r+pygdb_r,ygdb_i+pygdb_i, ydgb_r+pydgb_r,ydgb_i+pydgb_i, yddb_r+pyddb_r,yddb_i+pyddb_i); #endif if (here->HSM2_corg == 1) { *(here->HSM2GgPtr) += grg; *(here->HSM2GPgPtr) -= grg; *(here->HSM2GgpPtr) -= grg; } *(here->HSM2GPgpPtr +1) += yggb_i + pyggb_i; *(here->HSM2GPgpPtr) += yggb_r + pyggb_r; *(here->HSM2GPdpPtr +1) += ygdb_i + pygdb_i; *(here->HSM2GPdpPtr) += ygdb_r + pygdb_r; *(here->HSM2GPspPtr +1) += ygsb_i + pygsb_i; *(here->HSM2GPspPtr) += ygsb_r + pygsb_r; *(here->HSM2GPbpPtr +1) += ygbb_i + pygbb_i; *(here->HSM2GPbpPtr) += ygbb_r + pygbb_r; *(here->HSM2DPdpPtr +1) += yddb_i + pyddb_i; *(here->HSM2DPdpPtr) += yddb_r + pyddb_r + gdpr; *(here->HSM2DPdPtr) -= gdpr; *(here->HSM2DPgpPtr +1) += ydgb_i + pydgb_i; *(here->HSM2DPgpPtr) += ydgb_r + pydgb_r; *(here->HSM2DPspPtr +1) += ydsb_i + pydsb_i; *(here->HSM2DPspPtr) += ydsb_r + pydsb_r; *(here->HSM2DPbpPtr +1) += ydbb_i + pydbb_i; *(here->HSM2DPbpPtr) += ydbb_r + pydbb_r; *(here->HSM2DdpPtr) -= gdpr; *(here->HSM2DdPtr) += gdpr; *(here->HSM2SPdpPtr +1) += ysdb_i + pysdb_i; *(here->HSM2SPdpPtr) += ysdb_r + pysdb_r; *(here->HSM2SPgpPtr +1) += ysgb_i + pysgb_i; *(here->HSM2SPgpPtr) += ysgb_r + pysgb_r; *(here->HSM2SPspPtr +1) += yssb_i + pyssb_i; *(here->HSM2SPspPtr) += yssb_r + pyssb_r + gspr; *(here->HSM2SPsPtr) -= gspr ; *(here->HSM2SPbpPtr +1) += ysbb_i + pysbb_i; *(here->HSM2SPbpPtr) += ysbb_r + pysbb_r; *(here->HSM2SspPtr) -= gspr; *(here->HSM2SsPtr) += gspr; *(here->HSM2BPdpPtr +1) += ybdb_i + pybdb_i; *(here->HSM2BPdpPtr) += ybdb_r + pybdb_r; *(here->HSM2BPgpPtr +1) += ybgb_i + pybgb_i; *(here->HSM2BPgpPtr) += ybgb_r + pybgb_r; *(here->HSM2BPspPtr +1) += ybsb_i + pybsb_i; *(here->HSM2BPspPtr) += ybsb_r + pybsb_r; *(here->HSM2BPbpPtr +1) += ybbb_i + pybbb_i; *(here->HSM2BPbpPtr) += ybbb_r + pybbb_r; if (here->HSM2_corbnet == 1) { *(here->HSM2DPdbPtr +1) += pxcbdb_i; *(here->HSM2DPdbPtr) -= gbd; *(here->HSM2SPsbPtr +1) += pxcbsb_i; *(here->HSM2SPsbPtr) -= gbs; *(here->HSM2DBdpPtr +1) += pxcbdb_i; *(here->HSM2DBdpPtr) -= gbd; *(here->HSM2DBdbPtr +1) -= pxcbdb_i; *(here->HSM2DBdbPtr) += gbd + here->HSM2_grbpd + here->HSM2_grbdb; *(here->HSM2DBbpPtr) -= here->HSM2_grbpd; *(here->HSM2DBbPtr) -= here->HSM2_grbdb; *(here->HSM2BPdbPtr) -= here->HSM2_grbpd; *(here->HSM2BPbPtr) -= here->HSM2_grbpb; *(here->HSM2BPsbPtr) -= here->HSM2_grbps; *(here->HSM2BPbpPtr) += here->HSM2_grbpd + here->HSM2_grbps + here->HSM2_grbpb; *(here->HSM2SBspPtr +1) += pxcbsb_i; *(here->HSM2SBspPtr) -= gbs; *(here->HSM2SBbpPtr) -= here->HSM2_grbps; *(here->HSM2SBbPtr) -= here->HSM2_grbsb; *(here->HSM2SBsbPtr +1) -= pxcbsb_i; *(here->HSM2SBsbPtr) += gbs + here->HSM2_grbps + here->HSM2_grbsb; *(here->HSM2BdbPtr) -= here->HSM2_grbdb; *(here->HSM2BbpPtr) -= here->HSM2_grbpb; *(here->HSM2BsbPtr) -= here->HSM2_grbsb; *(here->HSM2BbPtr) += here->HSM2_grbsb + here->HSM2_grbdb + here->HSM2_grbpb; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisim2/hisim2.h0000644000175000017500000000261113546075722021722 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM ( VERSION : 2 SUBVERSION : 8 REVISION : 0 ) FILE : hisim2.h Date : 2014.6.5 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ #include "hsm2def.h" #include "ngspice/cktdefs.h" #ifndef _HiSIM2_H #define _HiSIM2_H /* return value */ #ifndef OK #define HiSIM_OK 0 #define HiSIM_ERROR 1 #else #define HiSIM_OK OK #define HiSIM_ERROR E_PANIC #endif /* MOS type */ #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /* device working mode */ #ifndef CMI_NORMAL_MODE #define HiSIM_NORMAL_MODE 1 #define HiSIM_REVERSE_MODE -1 #else #define HiSIM_NORMAL_MODE CMI_NORMAL_MODE #define HiSIM_REVERSE_MODE CMI_REVERSE_MODE #endif /* others */ #ifndef NULL #define NULL 0 #endif #define HiSIM_FALSE 0 #define HiSIM_TRUE 1 #ifndef return_if_error #define return_if_error(s) { int error = s; if(error) return(error); } #endif extern int HSM2evaluate ( double ivds, double ivgs, double ivbs, double vbs_jct, double vbd_jct, HSM2instance *here, HSM2model *model, CKTcircuit *ckt ) ; #endif /* _HiSIM2_H */ tmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2def.h0000644000175000017500000022137213546075722022066 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM ( VERSION : 2 SUBVERSION : 8 REVISION : 0 ) FILE : hsm2def.h Date : 2014.6.5 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ #ifndef HSM2 #define HSM2 #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" /* declarations for HiSIM2 MOSFETs */ /* unit-converted model parameters */ typedef struct sHSM2modelMKSParam { double HSM2_npext ; double HSM2_nsubcwpe ; double HSM2_nsubpwpe ; double HSM2_npextwpe ; double HSM2_ll ; double HSM2_wl ; double HSM2_svgsl ; double HSM2_svgsw ; double HSM2_svbsl ; double HSM2_slgl ; double HSM2_sub1l ; double HSM2_slg ; double HSM2_sub2l ; double HSM2_nsubcmax ; double HSM2_glksd3 ; double HSM2_gleak2 ; double HSM2_gleak4 ; double HSM2_gleak5 ; double HSM2_gleak7 ; double HSM2_cit ; double HSM2_ovslp ; double HSM2_dly3 ; double HSM2_ndepm ; } HSM2modelMKSParam ; /* binning parameters */ typedef struct sHSM2binningParam { double HSM2_vmax ; double HSM2_bgtmp1 ; double HSM2_bgtmp2 ; double HSM2_eg0 ; double HSM2_lover ; double HSM2_vfbover ; double HSM2_nover ; double HSM2_wl2 ; double HSM2_vfbc ; double HSM2_nsubc ; double HSM2_nsubp ; double HSM2_scp1 ; double HSM2_scp2 ; double HSM2_scp3 ; double HSM2_sc1 ; double HSM2_sc2 ; double HSM2_sc3 ; double HSM2_sc4 ; double HSM2_pgd1 ; //double HSM2_pgd3 ; double HSM2_ndep ; double HSM2_ninv ; double HSM2_muecb0 ; double HSM2_muecb1 ; double HSM2_mueph1 ; double HSM2_vtmp ; double HSM2_wvth0 ; double HSM2_muesr1 ; double HSM2_muetmp ; double HSM2_sub1 ; double HSM2_sub2 ; double HSM2_svds ; double HSM2_svbs ; double HSM2_svgs ; double HSM2_nsti ; double HSM2_wsti ; double HSM2_scsti1 ; double HSM2_scsti2 ; double HSM2_vthsti ; double HSM2_muesti1 ; double HSM2_muesti2 ; double HSM2_muesti3 ; double HSM2_nsubpsti1 ; double HSM2_nsubpsti2 ; double HSM2_nsubpsti3 ; double HSM2_nsubcsti1; double HSM2_nsubcsti2; double HSM2_nsubcsti3; double HSM2_cgso ; double HSM2_cgdo ; double HSM2_js0 ; double HSM2_js0sw ; double HSM2_nj ; double HSM2_cisbk ; double HSM2_clm1 ; double HSM2_clm2 ; double HSM2_clm3 ; double HSM2_wfc ; double HSM2_gidl1 ; double HSM2_gidl2 ; double HSM2_gleak1 ; double HSM2_gleak2 ; double HSM2_gleak3 ; double HSM2_gleak6 ; double HSM2_glksd1 ; double HSM2_glksd2 ; double HSM2_glkb1 ; double HSM2_glkb2 ; double HSM2_nftrp ; double HSM2_nfalp ; double HSM2_vdiffj ; double HSM2_ibpc1 ; double HSM2_ibpc2 ; } HSM2binningParam ; /* unit-converted parameters for each instance */ typedef struct sHSM2hereMKSParam { double HSM2_nsubcdfm ; } HSM2hereMKSParam ; /* information needed for each instance */ typedef struct sHSM2instance { struct GENinstance gen; #define HSM2modPtr(inst) ((struct sHSM2model *)((inst)->gen.GENmodPtr)) #define HSM2nextInstance(inst) ((struct sHSM2instance *)((inst)->gen.GENnextInstance)) #define HSM2name gen.GENname #define HSM2states gen.GENstate const int HSM2dNode; /* number of the drain node of the mosfet */ const int HSM2gNode; /* number of the gate node of the mosfet */ const int HSM2sNode; /* number of the source node of the mosfet */ const int HSM2bNode; /* number of the bulk node of the mosfet */ int HSM2dNodePrime; /* number od the inner drain node */ int HSM2gNodePrime; /* number of the inner gate node */ int HSM2sNodePrime; /* number od the inner source node */ int HSM2bNodePrime; int HSM2dbNode; int HSM2sbNode; double HSM2_noiflick; /* for 1/f noise calc. */ double HSM2_noithrml; /* for thermal noise calc. */ double HSM2_noiigate; /* for induced gate noise */ double HSM2_noicross; /* for induced gate noise */ double HSM2_Qdrat; /* for induced gate noise */ /* instance */ double HSM2_l; /* the length of the channel region */ double HSM2_w; /* the width of the channel region */ double HSM2_ad; /* the area of the drain diffusion */ double HSM2_as; /* the area of the source diffusion */ double HSM2_pd; /* perimeter of drain junction [m] */ double HSM2_ps; /* perimeter of source junction [m] */ double HSM2_nrd; /* equivalent num of squares of drain [-] (unused) */ double HSM2_nrs; /* equivalent num of squares of source [-] (unused) */ double HSM2_temp; /* lattice temperature [C] */ double HSM2_dtemp; double HSM2_weff; /* the effective width of the channel region */ double HSM2_weff_nf; /* Weff * NF */ double HSM2_leff; /* the effective length of the channel region */ int HSM2_corbnet ; double HSM2_rbpb ; double HSM2_rbpd ; double HSM2_rbps ; double HSM2_rbdb ; double HSM2_rbsb ; int HSM2_corg ; /* double HSM2_rshg; */ double HSM2_ngcon; double HSM2_xgw; double HSM2_xgl; double HSM2_nf; double HSM2_sa; double HSM2_sb; double HSM2_sd; double HSM2_nsubcdfm; /* DFM */ double HSM2_mphdfm; /* DFM */ double HSM2_m; /* WPE */ double HSM2_sca; /* scc */ double HSM2_scb; /* scb */ double HSM2_scc; /* scc */ int HSM2_called; /* flag to check the first call */ /* previous values to evaluate initial guess */ double HSM2_mode_prv; double HSM2_vbsc_prv; double HSM2_vdsc_prv; double HSM2_vgsc_prv; double HSM2_ps0_prv; double HSM2_ps0_dvbs_prv; double HSM2_ps0_dvds_prv; double HSM2_ps0_dvgs_prv; double HSM2_pds_prv; double HSM2_pds_dvbs_prv; double HSM2_pds_dvds_prv; double HSM2_pds_dvgs_prv; double HSM2_ids_prv; double HSM2_ids_dvbs_prv; double HSM2_ids_dvds_prv; double HSM2_ids_dvgs_prv; double HSM2_mode_prv2; double HSM2_vbsc_prv2; double HSM2_vdsc_prv2; double HSM2_vgsc_prv2; double HSM2_ps0_prv2; double HSM2_ps0_dvbs_prv2; double HSM2_ps0_dvds_prv2; double HSM2_ps0_dvgs_prv2; double HSM2_pds_prv2; double HSM2_pds_dvbs_prv2; double HSM2_pds_dvds_prv2; double HSM2_pds_dvgs_prv2; double HSM2_PS0Z_SCE_prv ; double HSM2_PS0Z_SCE_dvds_prv ; double HSM2_PS0Z_SCE_dvgs_prv ; double HSM2_PS0Z_SCE_dvbs_prv ; /* output */ int HSM2_capop; double HSM2_gd; double HSM2_gs; double HSM2_cgso; double HSM2_cgdo; double HSM2_cgbo; double HSM2_cdso; double HSM2_cddo; double HSM2_cdgo; double HSM2_csso; double HSM2_csdo; double HSM2_csgo; double HSM2_cqyd; double HSM2_cqyg; double HSM2_cqyb; double HSM2_von; /* vth */ double HSM2_vdsat; double HSM2_ids; /* cdrain, HSM2_cd */ double HSM2_gds; double HSM2_gm; double HSM2_gmbs; double HSM2_ibs; /* HSM2_cbs */ double HSM2_ibd; /* HSM2_cbd */ double HSM2_gbs; double HSM2_gbd; double HSM2_capbs; double HSM2_capbd; double HSM2_capgs; double HSM2_capgd; double HSM2_capgb; double HSM2_isub; /* HSM2_csub */ double HSM2_gbgs; double HSM2_gbds; double HSM2_gbbs; double HSM2_qg; double HSM2_qd; double HSM2_qs; double HSM2_qb; /* bulk charge qb = -(qg + qd + qs) */ double HSM2_cggb; double HSM2_cgdb; double HSM2_cgsb; double HSM2_cbgb; double HSM2_cbdb; double HSM2_cbsb; double HSM2_cdgb; double HSM2_cddb; double HSM2_cdsb; double HSM2_mu; /* mobility */ double HSM2_igidl; /* gate induced drain leakage */ double HSM2_gigidlgs; double HSM2_gigidlds; double HSM2_gigidlbs; double HSM2_igisl; /* gate induced source leakage */ double HSM2_gigislgd; double HSM2_gigislsd; double HSM2_gigislbd; double HSM2_igb; /* gate tunneling current (gate to bulk) */ double HSM2_gigbg; double HSM2_gigbd; double HSM2_gigbb; double HSM2_gigbs; double HSM2_igs; /* gate tunneling current (gate to source) */ double HSM2_gigsg; double HSM2_gigsd; double HSM2_gigsb; double HSM2_gigss; double HSM2_igd; /* gate tunneling current (gate to drain) */ double HSM2_gigdg; double HSM2_gigdd; double HSM2_gigdb; double HSM2_gigds; /* NQS */ double HSM2_tau ; double HSM2_tau_dVgs ; double HSM2_tau_dVds ; double HSM2_tau_dVbs ; double HSM2_Xd ; double HSM2_Xd_dVgs ; double HSM2_Xd_dVds ; double HSM2_Xd_dVbs ; double HSM2_Qi ; double HSM2_Qi_dVgs ; double HSM2_Qi_dVds ; double HSM2_Qi_dVbs ; double HSM2_taub ; double HSM2_taub_dVgs ; double HSM2_taub_dVds ; double HSM2_taub_dVbs ; double HSM2_Qb ; double HSM2_Qb_dVgs ; double HSM2_Qb_dVds ; double HSM2_Qb_dVbs ; /* internal variables */ double HSM2_depleak ; double HSM2_depvmax ; double HSM2_depmphn0 ; double HSM2_depmphn1 ; double HSM2_depmue0 ; double HSM2_depmue1 ; double HSM2_depmueback0 ; double HSM2_depmueback1 ; double HSM2_depvdsef1 ; double HSM2_depvdsef2 ; double HSM2_eg ; double HSM2_beta ; double HSM2_beta_inv ; double HSM2_beta2 ; double HSM2_betatnom ; double HSM2_nin ; double HSM2_egp12 ; double HSM2_egp32 ; double HSM2_lgate ; double HSM2_wgate ; double HSM2_lg ; double HSM2_wg ; double HSM2_mueph ; double HSM2_mphn0 ; double HSM2_mphn1 ; double HSM2_muesr ; double HSM2_nsub ; double HSM2_qnsub ; double HSM2_qnsub_esi ; double HSM2_2qnsub_esi ; double HSM2_ptovr0 ; double HSM2_ptovr ; double HSM2_vmax0 ; double HSM2_vmax ; double HSM2_pb2 ; double HSM2_pb20 ; double HSM2_pb2c ; double HSM2_cnst0 ; double HSM2_cnst1 ; double HSM2_isbd ; double HSM2_isbd2 ; double HSM2_isbs ; double HSM2_isbs2 ; double HSM2_vbdt ; double HSM2_vbst ; double HSM2_exptemp ; double HSM2_wsti ; double HSM2_cnstpgd ; double HSM2_ninvp0 ; double HSM2_ninv0 ; double HSM2_grbpb ; double HSM2_grbpd ; double HSM2_grbps ; double HSM2_grbdb ; double HSM2_grbsb ; double HSM2_grg ; double HSM2_rs ; double HSM2_rd ; double HSM2_clmmod ; double HSM2_lgatesm ; double HSM2_dVthsm ; double HSM2_ddlt ; /* 2007.02.20--03.15 */ double HSM2_xsub1 ; double HSM2_xsub2 ; double HSM2_xgate ; double HSM2_xvbs ; double HSM2_vg2const ; double HSM2_wdpl ; double HSM2_wdplp ; double HSM2_cfrng ; double HSM2_jd_nvtm_inv ; double HSM2_jd_expcd ; double HSM2_jd_expcs ; double HSM2_sqrt_eg ; double HSM2_egtnom ; double HSM2_cecox ; double HSM2_msc ; int HSM2_flg_pgd ; double HSM2_ndep_o_esi ; double HSM2_ninv_o_esi ; double HSM2_ninvd ; double HSM2_cqyb0 ; double HSM2_cnst0over ; double HSM2_costi00 ; double HSM2_nsti_p2 ; double HSM2_costi0 ; double HSM2_costi0_p2 ; double HSM2_costi1 ; double HSM2_pb2over ; /* for Qover model */ //double HSM2_ps0ldinib ; double HSM2_ptl0; double HSM2_pt40; double HSM2_gdl0; double HSM2_muecb0; double HSM2_muecb1; double HSM2_ktemp; /* lattice temperature [K] */ double HSM2_mueph1 ; double HSM2_nsubp ; double HSM2_nsubc ; /* Depletion Mode MOSFET */ double HSM2_ndepm ; double HSM2_Pb2n ; double HSM2_Vbipn ; HSM2hereMKSParam hereMKS ; /* unit-converted parameters */ HSM2binningParam pParam ; /* binning parameters */ /* no use in SPICE3f5 double HSM2drainSquares; the length of the drain in squares double HSM2sourceSquares; the length of the source in squares */ double HSM2sourceConductance; /* cond. of source (or 0): set in setup */ double HSM2drainConductance; /* cond. of drain (or 0): set in setup */ double HSM2internalGs; /* internal cond. of source for thermal noise calc. */ double HSM2internalGd; /* internal cond. of drain for thermal noise calc. */ double HSM2_icVBS; /* initial condition B-S voltage */ double HSM2_icVDS; /* initial condition D-S voltage */ double HSM2_icVGS; /* initial condition G-S voltage */ int HSM2_off; /* non-zero to indicate device is off for dc analysis */ int HSM2_mode; /* device mode : 1 = normal, -1 = inverse */ unsigned HSM2_l_Given :1; unsigned HSM2_w_Given :1; unsigned HSM2_ad_Given :1; unsigned HSM2_as_Given :1; /* unsigned HSM2drainSquaresGiven :1; unsigned HSM2sourceSquaresGiven :1;*/ unsigned HSM2_pd_Given :1; unsigned HSM2_ps_Given :1; unsigned HSM2_nrd_Given :1; unsigned HSM2_nrs_Given :1; unsigned HSM2_temp_Given :1; unsigned HSM2_dtemp_Given :1; unsigned HSM2_icVBS_Given :1; unsigned HSM2_icVDS_Given :1; unsigned HSM2_icVGS_Given :1; unsigned HSM2_corbnet_Given :1; unsigned HSM2_rbpb_Given :1; unsigned HSM2_rbpd_Given :1; unsigned HSM2_rbps_Given :1; unsigned HSM2_rbdb_Given :1; unsigned HSM2_rbsb_Given :1; unsigned HSM2_corg_Given :1; /* unsigned HSM2_rshg_Given :1; */ unsigned HSM2_ngcon_Given :1; unsigned HSM2_xgw_Given :1; unsigned HSM2_xgl_Given :1; unsigned HSM2_nf_Given :1; unsigned HSM2_sa_Given :1; unsigned HSM2_sb_Given :1; unsigned HSM2_sd_Given :1; unsigned HSM2_nsubcdfm_Given :1; /* DFM */ unsigned HSM2_mphdfm_Given :1; /* DFM */ unsigned HSM2_m_Given :1; /* WPE */ unsigned HSM2_sca_Given :1; /* sca */ unsigned HSM2_scb_Given :1; /* scb */ unsigned HSM2_scc_Given :1; /* scc */ /* pointer to sparse matrix */ double *HSM2GgPtr; /* pointer to sparse matrix element at (gate node,gate node) */ double *HSM2GgpPtr; /* pointer to sparse matrix element at (gate node,gate prime node) */ double *HSM2GdpPtr; /* pointer to sparse matrix element at (gate node,drain prime node) */ double *HSM2GspPtr; /* pointer to sparse matrix element at (gate node,source prime node) */ double *HSM2GbpPtr; /* pointer to sparse matrix element at (gate node,bulk prime node) */ double *HSM2GPgPtr; /* pointer to sparse matrix element at (gate prime node,gate node) */ double *HSM2GPgpPtr; /* pointer to sparse matrix element at (gate prime node,gate prime node) */ double *HSM2GPdpPtr; /* pointer to sparse matrix element at (gate prime node,drain prime node) */ double *HSM2GPspPtr; /* pointer to sparse matrix element at (gate prime node,source prime node) */ double *HSM2GPbpPtr; /* pointer to sparse matrix element at (gate prime node,bulk prime node) */ double *HSM2DPdPtr; /* pointer to sparse matrix element at (drain prime node,drain node) */ double *HSM2DPdpPtr; /* pointer to sparse matrix element at (drain prime node,drain prime node) */ double *HSM2DPgpPtr; /* pointer to sparse matrix element at (drain prime node,gate prime node) */ double *HSM2DPspPtr; /* pointer to sparse matrix element at (drain prime node,source prime node) */ double *HSM2DPbpPtr; /* pointer to sparse matrix element at (drain prime node,bulk prime node) */ double *HSM2DPdbPtr; /* pointer to sparse matrix element at (drain prime node,drain body node) */ double *HSM2DdPtr; /* pointer to sparse matrix element at (Drain node,drain node) */ double *HSM2DdpPtr; /* pointer to sparse matrix element at (drain node,drain prime node) */ double *HSM2SPsPtr; /* pointer to sparse matrix element at (source prime node,source node) */ double *HSM2SPspPtr; /* pointer to sparse matrix element at (source prime node,source prime node) */ double *HSM2SPgpPtr; /* pointer to sparse matrix element at (source prime node,gate prime node) */ double *HSM2SPdpPtr; /* pointer to sparse matrix element at (source prime node,drain prime node) */ double *HSM2SPbpPtr; /* pointer to sparse matrix element at (source prime node,bulk prime node) */ double *HSM2SPsbPtr; /* pointer to sparse matrix element at (source prime node,source body node) */ double *HSM2SsPtr; /* pointer to sparse matrix element at (source node,source node) */ double *HSM2SspPtr; /* pointer to sparse matrix element at (source node,source prime node) */ double *HSM2BPgpPtr; /* pointer to sparse matrix element at (bulk prime node,gate prime node) */ double *HSM2BPbpPtr; /* pointer to sparse matrix element at (bulk prime node,bulk prime node) */ double *HSM2BPdpPtr; /* pointer to sparse matrix element at (bulk prime node,drain prime node) */ double *HSM2BPspPtr; /* pointer to sparse matrix element at (bulk prime node,source prime node) */ double *HSM2BPbPtr; /* pointer to sparse matrix element at (bulk prime node,bulk node) */ double *HSM2BPdbPtr; /* pointer to sparse matrix element at (bulk prime node,source body node) */ double *HSM2BPsbPtr; /* pointer to sparse matrix element at (bulk prime node,source body node) */ double *HSM2DBdpPtr; /* pointer to sparse matrix element at (drain body node,drain prime node) */ double *HSM2DBdbPtr; /* pointer to sparse matrix element at (drain body node,drain body node) */ double *HSM2DBbpPtr; /* pointer to sparse matrix element at (drain body node,bulk prime node) */ double *HSM2DBbPtr; /* pointer to sparse matrix element at (drain body node,bulk node) */ double *HSM2SBspPtr; /* pointer to sparse matrix element at (source body node,drain prime node) */ double *HSM2SBbpPtr; /* pointer to sparse matrix element at (source body node,drain body node) */ double *HSM2SBbPtr; /* pointer to sparse matrix element at (source body node,bulk prime node) */ double *HSM2SBsbPtr; /* pointer to sparse matrix element at (source body node,bulk node) */ double *HSM2BsbPtr; /* pointer to sparse matrix element at (bulk node,source body node) */ double *HSM2BbpPtr; /* pointer to sparse matrix element at (bulk node,bulk prime node) */ double *HSM2BdbPtr; /* pointer to sparse matrix element at (bulk node,drain body node) */ double *HSM2BbPtr; /* pointer to sparse matrix element at (bulk node,bulk node) */ #ifdef USE_OMP /* per instance storage of results, to update matrix and rhs at a later stage */ double HSM2rhsdPrime; double HSM2rhsgPrime; double HSM2rhsbPrime; double HSM2rhssPrime; double HSM2rhsdb; double HSM2rhssb; double HSM2_1; double HSM2_2; double HSM2_3; double HSM2_4; double HSM2_5; double HSM2_6; double HSM2_7; double HSM2_8; double HSM2_9; double HSM2_10; double HSM2_11; double HSM2_12; double HSM2_13; double HSM2_14; double HSM2_15; double HSM2_16; double HSM2_17; double HSM2_18; double HSM2_19; double HSM2_20; double HSM2_21; double HSM2_22; double HSM2_23; double HSM2_24; double HSM2_25; double HSM2_26; double HSM2_27; double HSM2_28; double HSM2_29; double HSM2_30; double HSM2_31; double HSM2_32; double HSM2_33; double HSM2_34; double HSM2_35; double HSM2_36; double HSM2_37; double HSM2_38; double HSM2_39; double HSM2_40; double HSM2_41; double HSM2_42; double HSM2_43; double HSM2_44; double HSM2_45; double HSM2_46; double HSM2_47; double HSM2_48; double HSM2_49; double HSM2_50; double HSM2_51; double HSM2_52; double HSM2_53; double HSM2_54; double HSM2_55; double HSM2_56; double HSM2_57; double HSM2_58; double HSM2_59; double HSM2_60; double HSM2_61; double HSM2_62; double HSM2_63; #endif /* common state values in hisim module */ #define HSM2vbd HSM2states+ 0 #define HSM2vbs HSM2states+ 1 #define HSM2vgs HSM2states+ 2 #define HSM2vds HSM2states+ 3 #define HSM2vdbs HSM2states+ 4 #define HSM2vdbd HSM2states+ 5 #define HSM2vsbs HSM2states+ 6 #define HSM2vges HSM2states+ 7 #define HSM2qb HSM2states+ 8 #define HSM2cqb HSM2states+ 9 #define HSM2qg HSM2states+ 10 #define HSM2cqg HSM2states+ 11 #define HSM2qd HSM2states+ 12 #define HSM2cqd HSM2states+ 13 #define HSM2qbs HSM2states+ 14 #define HSM2cqbs HSM2states+ 15 #define HSM2qbd HSM2states+ 16 #define HSM2cqbd HSM2states+ 17 #define HSM2numStates 18 /* nqs charges */ #define HSM2qi_nqs HSM2states+ 19 #define HSM2qb_nqs HSM2states+ 20 #define HSM2numStatesNqs 21 /* indices to the array of HiSIM2 NOISE SOURCES (the same as BSIM3) */ #define HSM2RDNOIZ 0 #define HSM2RSNOIZ 1 #define HSM2IDNOIZ 2 #define HSM2FLNOIZ 3 #define HSM2IGSNOIZ 4 /* shot noise */ #define HSM2IGDNOIZ 5 /* shot noise */ #define HSM2IGBNOIZ 6 /* shot noise */ #define HSM2IGNOIZ 7 /* induced gate noise */ #define HSM2TOTNOIZ 8 #define HSM2NSRCS 9 /* the number of HiSIM2 MOSFET noise sources */ #ifndef NONOISE double HSM2nVar[NSTATVARS][HSM2NSRCS]; #else /* NONOISE */ double **HSM2nVar; #endif /* NONOISE */ } HSM2instance ; /* per model data */ typedef struct sHSM2model { /* model structure for a resistor */ struct GENmodel gen; #define HSM2modType gen.GENmodType #define HSM2nextModel(inst) ((struct sHSM2model *)((inst)->gen.GENnextModel)) #define HSM2instances(inst) ((HSM2instance *)((inst)->gen.GENinstances)) #define HSM2modName gen.GENmodName int HSM2_type; /* device type: 1 = nmos, -1 = pmos */ int HSM2_level; /* level */ int HSM2_info; /* information */ int HSM2_noise; /* noise model selecter see hsm2noi.c */ int HSM2_version; /* model version 2.80 */ int HSM2_show; /* show physical value 1, 2, ... , 11 */ /* flags for initial guess */ int HSM2_corsrd ; int HSM2_corg ; int HSM2_coiprv ; int HSM2_copprv ; int HSM2_coadov ; int HSM2_coisub ; int HSM2_coiigs ; int HSM2_cogidl ; int HSM2_coovlp ; int HSM2_coflick ; int HSM2_coisti ; int HSM2_conqs ; /* HiSIM2 */ int HSM2_corbnet ; int HSM2_cothrml; int HSM2_coign; /* induced gate noise */ int HSM2_codfm; /* DFM */ int HSM2_corecip; int HSM2_coqy; int HSM2_coqovsm ; int HSM2_coerrrep; int HSM2_codep; int HSM2_coddlt; /* add in version 2.80 */ /* HiSIM original */ double HSM2_vmax ; double HSM2_bgtmp1 ; double HSM2_bgtmp2 ; double HSM2_eg0 ; double HSM2_tox ; double HSM2_xld ; double HSM2_lover ; double HSM2_ddltmax ; /* Vdseff */ double HSM2_ddltslp ; /* Vdseff */ double HSM2_ddltict ; /* Vdseff */ double HSM2_vfbover ; double HSM2_nover ; double HSM2_xwd ; double HSM2_xl ; double HSM2_xw ; double HSM2_saref ; double HSM2_sbref ; double HSM2_ll ; double HSM2_lld ; double HSM2_lln ; double HSM2_wl ; double HSM2_wl1 ; double HSM2_wl1p ; double HSM2_wl2 ; double HSM2_wl2p ; double HSM2_wld ; double HSM2_wln ; double HSM2_xqy ; double HSM2_xqy1 ; double HSM2_xqy2 ; double HSM2_qyrat ; double HSM2_rs; /* source contact resistance */ double HSM2_rd; /* drain contact resistance */ double HSM2_rsh; /* source/drain diffusion sheet resistance */ double HSM2_rshg; /* double HSM2_ngcon; */ /* double HSM2_xgw; */ /* double HSM2_xgl; */ /* double HSM2_nf; */ double HSM2_vfbc ; double HSM2_vbi ; double HSM2_vfbcl; double HSM2_vfbclp; double HSM2_nsubc ; double HSM2_parl2 ; double HSM2_lp ; double HSM2_nsubp ; double HSM2_nsubpl ; double HSM2_nsubpdlt; double HSM2_nsubpfac ; double HSM2_nsubpw ; double HSM2_nsubpwp ; double HSM2_scp1 ; double HSM2_scp2 ; double HSM2_scp3 ; double HSM2_sc1 ; double HSM2_sc2 ; double HSM2_sc3 ; double HSM2_sc4 ; double HSM2_pgd1 ; double HSM2_pgd2 ; //double HSM2_pgd3 ; double HSM2_pgd4 ; double HSM2_ndep ; double HSM2_ndepl ; double HSM2_ndeplp ; double HSM2_ndepw ; double HSM2_ndepwp ; double HSM2_ninv ; double HSM2_ninvd ; double HSM2_ninvdl ; double HSM2_ninvdlp ; double HSM2_muecb0 ; double HSM2_muecb1 ; double HSM2_mueph1 ; double HSM2_mueph0 ; double HSM2_muephw ; double HSM2_muepwp ; double HSM2_muepwd ; double HSM2_muephl ; double HSM2_mueplp ; double HSM2_muepld ; double HSM2_muephs ; double HSM2_muepsp ; double HSM2_vtmp ; double HSM2_wvth0 ; double HSM2_muesr1 ; double HSM2_muesr0 ; double HSM2_muesrw ; double HSM2_mueswp ; double HSM2_muesrl ; double HSM2_mueslp ; double HSM2_bb ; double HSM2_sub1 ; double HSM2_sub2 ; double HSM2_svgs ; double HSM2_svbs ; double HSM2_svbsl ; double HSM2_svds ; double HSM2_slg ; double HSM2_sub1l ; double HSM2_sub2l ; double HSM2_svgsl ; double HSM2_svgslp ; double HSM2_svgswp ; double HSM2_svgsw ; double HSM2_svbslp ; double HSM2_slgl ; double HSM2_slglp ; double HSM2_sub1lp ; double HSM2_nsti ; double HSM2_wsti ; double HSM2_wstil ; double HSM2_wstilp ; double HSM2_wstiw ; double HSM2_wstiwp ; double HSM2_scsti1 ; double HSM2_scsti2 ; double HSM2_vthsti ; double HSM2_vdsti ; double HSM2_muesti1 ; double HSM2_muesti2 ; double HSM2_muesti3 ; double HSM2_nsubpsti1 ; double HSM2_nsubpsti2 ; double HSM2_nsubcsti1; double HSM2_nsubcsti2; double HSM2_nsubcsti3; double HSM2_nsubpsti3 ; double HSM2_lpext ; double HSM2_npext ; double HSM2_npextw ; double HSM2_npextwp ; double HSM2_scp22 ; double HSM2_scp21 ; double HSM2_bs1 ; double HSM2_bs2 ; double HSM2_cgso ; double HSM2_cgdo ; double HSM2_cgbo ; double HSM2_tpoly ; double HSM2_js0 ; double HSM2_js0sw ; double HSM2_nj ; double HSM2_njsw ; double HSM2_xti ; double HSM2_cj ; double HSM2_cjsw ; double HSM2_cjswg ; double HSM2_mj ; double HSM2_mjsw ; double HSM2_mjswg ; double HSM2_xti2 ; double HSM2_cisb ; double HSM2_cvb ; double HSM2_ctemp ; double HSM2_cisbk ; double HSM2_cvbk ; double HSM2_divx ; double HSM2_pb ; double HSM2_pbsw ; double HSM2_pbswg ; double HSM2_tcjbd ; double HSM2_tcjbs ; double HSM2_tcjbdsw ; double HSM2_tcjbssw ; double HSM2_tcjbdswg ; double HSM2_tcjbsswg ; double HSM2_clm1 ; double HSM2_clm2 ; double HSM2_clm3 ; double HSM2_clm5 ; double HSM2_clm6 ; double HSM2_muetmp ; double HSM2_vover ; double HSM2_voverp ; double HSM2_vovers ; double HSM2_voversp ; double HSM2_wfc ; double HSM2_nsubcw ; double HSM2_nsubcwp ; double HSM2_nsubcmax ; double HSM2_qme1 ; double HSM2_qme2 ; double HSM2_qme3 ; double HSM2_gidl1 ; double HSM2_gidl2 ; double HSM2_gidl3 ; double HSM2_gidl4 ; double HSM2_gidl6; double HSM2_gidl7; double HSM2_gidl5 ; double HSM2_gleak1 ; double HSM2_gleak2 ; double HSM2_gleak3 ; double HSM2_gleak4 ; double HSM2_gleak5 ; double HSM2_gleak6 ; double HSM2_gleak7 ; double HSM2_glksd1 ; double HSM2_glksd2 ; double HSM2_glksd3 ; double HSM2_glkb1 ; double HSM2_glkb2 ; double HSM2_glkb3 ; double HSM2_egig; double HSM2_igtemp2; double HSM2_igtemp3; double HSM2_vzadd0 ; double HSM2_pzadd0 ; double HSM2_nftrp ; double HSM2_nfalp ; double HSM2_falph ; double HSM2_cit ; double HSM2_kappa ; double HSM2_vdiffj ; double HSM2_dly1 ; double HSM2_dly2 ; double HSM2_dly3; double HSM2_tnom ; double HSM2_ovslp ; double HSM2_ovmag ; /* substrate resistances */ double HSM2_gbmin; double HSM2_rbpb ; double HSM2_rbpd ; double HSM2_rbps ; double HSM2_rbdb ; double HSM2_rbsb ; /* IBPC */ double HSM2_ibpc1 ; double HSM2_ibpc2 ; /* DFM */ double HSM2_mphdfm ; double HSM2_ptl, HSM2_ptp, HSM2_pt2, HSM2_ptlp, HSM2_gdl, HSM2_gdlp ; double HSM2_gdld ; double HSM2_pt4 ; double HSM2_pt4p ; double HSM2_muephl2 ; double HSM2_mueplp2 ; double HSM2_nsubcw2 ; double HSM2_nsubcwp2 ; double HSM2_muephw2 ; double HSM2_muepwp2 ; /* variables for WPE */ double HSM2_web ; double HSM2_wec ; double HSM2_nsubcwpe ; double HSM2_npextwpe ; double HSM2_nsubpwpe ; /* for Ps0_min */ double HSM2_Vgsmin ; double HSM2_sc3Vbs ; /* SC3 clamping */ double HSM2_byptol ; /* bypass control */ double HSM2_muecb0lp; double HSM2_muecb1lp; /* Depletion Mode MOSFET */ double HSM2_ndepm ; double HSM2_ndepml ; double HSM2_ndepmlp ; double HSM2_tndep ; double HSM2_depleak ; double HSM2_depleakl ; double HSM2_depleaklp ; double HSM2_depmue0; double HSM2_depmue0l; double HSM2_depmue0lp; double HSM2_depmue1; double HSM2_depmue1l; double HSM2_depmue1lp; double HSM2_depmueback0; double HSM2_depmueback0l; double HSM2_depmueback0lp; double HSM2_depmueback1; double HSM2_depmueback1l; double HSM2_depmueback1lp; double HSM2_depmueph0; double HSM2_depmueph1; double HSM2_depvmax; double HSM2_depvmaxl; double HSM2_depvmaxlp; double HSM2_depvdsef1; double HSM2_depvdsef1l; double HSM2_depvdsef1lp; double HSM2_depvdsef2; double HSM2_depvdsef2l; double HSM2_depvdsef2lp; double HSM2_depbb; double HSM2_depmuetmp; double HSM2_depeta ; /* binning parameters */ double HSM2_lmin ; double HSM2_lmax ; double HSM2_wmin ; double HSM2_wmax ; double HSM2_lbinn ; double HSM2_wbinn ; /* Length dependence */ double HSM2_lvmax ; double HSM2_lbgtmp1 ; double HSM2_lbgtmp2 ; double HSM2_leg0 ; double HSM2_llover ; double HSM2_lvfbover ; double HSM2_lnover ; double HSM2_lwl2 ; double HSM2_lvfbc ; double HSM2_lnsubc ; double HSM2_lnsubp ; double HSM2_lscp1 ; double HSM2_lscp2 ; double HSM2_lscp3 ; double HSM2_lsc1 ; double HSM2_lsc2 ; double HSM2_lsc3 ; double HSM2_lsc4 ; double HSM2_lpgd1 ; //double HSM2_lpgd3 ; double HSM2_lndep ; double HSM2_lninv ; double HSM2_lmuecb0 ; double HSM2_lmuecb1 ; double HSM2_lmueph1 ; double HSM2_lvtmp ; double HSM2_lwvth0 ; double HSM2_lmuesr1 ; double HSM2_lmuetmp ; double HSM2_lsub1 ; double HSM2_lsub2 ; double HSM2_lsvds ; double HSM2_lsvbs ; double HSM2_lsvgs ; double HSM2_lnsti ; double HSM2_lwsti ; double HSM2_lscsti1 ; double HSM2_lscsti2 ; double HSM2_lvthsti ; double HSM2_lmuesti1 ; double HSM2_lmuesti2 ; double HSM2_lmuesti3 ; double HSM2_lnsubpsti1 ; double HSM2_lnsubpsti2 ; double HSM2_lnsubcsti1; double HSM2_lnsubcsti2; double HSM2_lnsubcsti3; double HSM2_lnsubpsti3 ; double HSM2_lcgso ; double HSM2_lcgdo ; double HSM2_ljs0 ; double HSM2_ljs0sw ; double HSM2_lnj ; double HSM2_lcisbk ; double HSM2_lclm1 ; double HSM2_lclm2 ; double HSM2_lclm3 ; double HSM2_lwfc ; double HSM2_lgidl1 ; double HSM2_lgidl2 ; double HSM2_lgleak1 ; double HSM2_lgleak2 ; double HSM2_lgleak3 ; double HSM2_lgleak6 ; double HSM2_lglksd1 ; double HSM2_lglksd2 ; double HSM2_lglkb1 ; double HSM2_lglkb2 ; double HSM2_lnftrp ; double HSM2_lnfalp ; double HSM2_lvdiffj ; double HSM2_libpc1 ; double HSM2_libpc2 ; /* Width dependence */ double HSM2_wvmax ; double HSM2_wbgtmp1 ; double HSM2_wbgtmp2 ; double HSM2_weg0 ; double HSM2_wlover ; double HSM2_wvfbover ; double HSM2_wnover ; double HSM2_wwl2 ; double HSM2_wvfbc ; double HSM2_wnsubc ; double HSM2_wnsubp ; double HSM2_wscp1 ; double HSM2_wscp2 ; double HSM2_wscp3 ; double HSM2_wsc1 ; double HSM2_wsc2 ; double HSM2_wsc3 ; double HSM2_wsc4 ; double HSM2_wpgd1 ; //double HSM2_wpgd3 ; double HSM2_wndep ; double HSM2_wninv ; double HSM2_wmuecb0 ; double HSM2_wmuecb1 ; double HSM2_wmueph1 ; double HSM2_wvtmp ; double HSM2_wwvth0 ; double HSM2_wmuesr1 ; double HSM2_wmuetmp ; double HSM2_wsub1 ; double HSM2_wsub2 ; double HSM2_wsvds ; double HSM2_wsvbs ; double HSM2_wsvgs ; double HSM2_wnsti ; double HSM2_wwsti ; double HSM2_wscsti1 ; double HSM2_wscsti2 ; double HSM2_wvthsti ; double HSM2_wmuesti1 ; double HSM2_wmuesti2 ; double HSM2_wmuesti3 ; double HSM2_wnsubpsti1 ; double HSM2_wnsubpsti2 ; double HSM2_wnsubcsti1; double HSM2_wnsubcsti2; double HSM2_wnsubcsti3; double HSM2_wnsubpsti3 ; double HSM2_wcgso ; double HSM2_wcgdo ; double HSM2_wjs0 ; double HSM2_wjs0sw ; double HSM2_wnj ; double HSM2_wcisbk ; double HSM2_wclm1 ; double HSM2_wclm2 ; double HSM2_wclm3 ; double HSM2_wwfc ; double HSM2_wgidl1 ; double HSM2_wgidl2 ; double HSM2_wgleak1 ; double HSM2_wgleak2 ; double HSM2_wgleak3 ; double HSM2_wgleak6 ; double HSM2_wglksd1 ; double HSM2_wglksd2 ; double HSM2_wglkb1 ; double HSM2_wglkb2 ; double HSM2_wnftrp ; double HSM2_wnfalp ; double HSM2_wvdiffj ; double HSM2_wibpc1 ; double HSM2_wibpc2 ; /* Cross-term dependence */ double HSM2_pvmax ; double HSM2_pbgtmp1 ; double HSM2_pbgtmp2 ; double HSM2_peg0 ; double HSM2_plover ; double HSM2_pvfbover ; double HSM2_pnover ; double HSM2_pwl2 ; double HSM2_pvfbc ; double HSM2_pnsubc ; double HSM2_pnsubp ; double HSM2_pscp1 ; double HSM2_pscp2 ; double HSM2_pscp3 ; double HSM2_psc1 ; double HSM2_psc2 ; double HSM2_psc3 ; double HSM2_psc4 ; double HSM2_ppgd1 ; //double HSM2_ppgd3 ; double HSM2_pndep ; double HSM2_pninv ; double HSM2_pmuecb0 ; double HSM2_pmuecb1 ; double HSM2_pmueph1 ; double HSM2_pvtmp ; double HSM2_pwvth0 ; double HSM2_pmuesr1 ; double HSM2_pmuetmp ; double HSM2_psub1 ; double HSM2_psub2 ; double HSM2_psvds ; double HSM2_psvbs ; double HSM2_psvgs ; double HSM2_pnsti ; double HSM2_pwsti ; double HSM2_pscsti1 ; double HSM2_pscsti2 ; double HSM2_pvthsti ; double HSM2_pmuesti1 ; double HSM2_pmuesti2 ; double HSM2_pmuesti3 ; double HSM2_pnsubpsti1 ; double HSM2_pnsubpsti2 ; double HSM2_pnsubcsti1; double HSM2_pnsubcsti2; double HSM2_pnsubcsti3; double HSM2_pnsubpsti3 ; double HSM2_pcgso ; double HSM2_pcgdo ; double HSM2_pjs0 ; double HSM2_pjs0sw ; double HSM2_pnj ; double HSM2_pcisbk ; double HSM2_pclm1 ; double HSM2_pclm2 ; double HSM2_pclm3 ; double HSM2_pwfc ; double HSM2_pgidl1 ; double HSM2_pgidl2 ; double HSM2_pgleak1 ; double HSM2_pgleak2 ; double HSM2_pgleak3 ; double HSM2_pgleak6 ; double HSM2_pglksd1 ; double HSM2_pglksd2 ; double HSM2_pglkb1 ; double HSM2_pglkb2 ; double HSM2_pnftrp ; double HSM2_pnfalp ; double HSM2_pvdiffj ; double HSM2_pibpc1 ; double HSM2_pibpc2 ; /* internal variables */ double HSM2_vcrit ; int HSM2_flg_qme ; double HSM2_qme12 ; double HSM2_ktnom ; int HSM2_bypass_enable ; //int HSM2_subversion ; //int HSM2_revision ; double HSM2vgsMax; double HSM2vgdMax; double HSM2vgbMax; double HSM2vdsMax; double HSM2vbsMax; double HSM2vbdMax; double HSM2vgsrMax; double HSM2vgdrMax; double HSM2vgbrMax; double HSM2vbsrMax; double HSM2vbdrMax; HSM2modelMKSParam modelMKS ; /* unit-converted parameters */ #ifdef USE_OMP int HSM2InstCount; struct sHSM2instance **HSM2InstanceArray; #endif /* flag for model */ unsigned HSM2_type_Given :1; unsigned HSM2_level_Given :1; unsigned HSM2_info_Given :1; unsigned HSM2_noise_Given :1; unsigned HSM2_version_Given :1; unsigned HSM2_show_Given :1; unsigned HSM2_corsrd_Given :1; unsigned HSM2_corg_Given :1; unsigned HSM2_coiprv_Given :1; unsigned HSM2_copprv_Given :1; unsigned HSM2_coadov_Given :1; unsigned HSM2_coisub_Given :1; unsigned HSM2_coiigs_Given :1; unsigned HSM2_cogidl_Given :1; unsigned HSM2_coovlp_Given :1; unsigned HSM2_coflick_Given :1; unsigned HSM2_coisti_Given :1; unsigned HSM2_conqs_Given :1; unsigned HSM2_corbnet_Given :1; unsigned HSM2_cothrml_Given :1; unsigned HSM2_coign_Given :1; /* induced gate noise */ unsigned HSM2_codfm_Given :1; /* DFM */ unsigned HSM2_corecip_Given :1; unsigned HSM2_coqy_Given :1; unsigned HSM2_coqovsm_Given :1; unsigned HSM2_coerrrep_Given :1; unsigned HSM2_codep_Given :1; unsigned HSM2_coddlt_Given :1; unsigned HSM2_kappa_Given :1; unsigned HSM2_vdiffj_Given :1; unsigned HSM2_vmax_Given :1; unsigned HSM2_bgtmp1_Given :1; unsigned HSM2_bgtmp2_Given :1; unsigned HSM2_eg0_Given :1; unsigned HSM2_tox_Given :1; unsigned HSM2_xld_Given :1; unsigned HSM2_lover_Given :1; unsigned HSM2_ddltmax_Given :1; /* Vdseff */ unsigned HSM2_ddltslp_Given :1; /* Vdseff */ unsigned HSM2_ddltict_Given :1; /* Vdseff */ unsigned HSM2_vfbover_Given :1; unsigned HSM2_nover_Given :1; unsigned HSM2_xwd_Given :1; unsigned HSM2_xl_Given :1; unsigned HSM2_xw_Given :1; unsigned HSM2_saref_Given :1; unsigned HSM2_sbref_Given :1; unsigned HSM2_ll_Given :1; unsigned HSM2_lld_Given :1; unsigned HSM2_lln_Given :1; unsigned HSM2_wl_Given :1; unsigned HSM2_wl1_Given :1; unsigned HSM2_wl1p_Given :1; unsigned HSM2_wl2_Given :1; unsigned HSM2_wl2p_Given :1; unsigned HSM2_wld_Given :1; unsigned HSM2_wln_Given :1; unsigned HSM2_xqy_Given :1; unsigned HSM2_xqy1_Given :1; unsigned HSM2_xqy2_Given :1; unsigned HSM2_qyrat_Given :1; unsigned HSM2_rs_Given :1; unsigned HSM2_rd_Given :1; unsigned HSM2_rsh_Given :1; unsigned HSM2_rshg_Given :1; /* unsigned HSM2_ngcon_Given :1; */ /* unsigned HSM2_xgw_Given :1; */ /* unsigned HSM2_xgl_Given :1; */ /* unsigned HSM2_nf_Given :1; */ unsigned HSM2_vfbc_Given :1; unsigned HSM2_vbi_Given :1; unsigned HSM2_vfbcl_Given :1; unsigned HSM2_vfbclp_Given :1; unsigned HSM2_nsubc_Given :1; unsigned HSM2_parl2_Given :1; unsigned HSM2_lp_Given :1; unsigned HSM2_nsubp_Given :1; unsigned HSM2_nsubpl_Given :1; unsigned HSM2_nsubpdlt_Given :1; unsigned HSM2_nsubpfac_Given :1; unsigned HSM2_nsubpw_Given :1; unsigned HSM2_nsubpwp_Given :1; unsigned HSM2_scp1_Given :1; unsigned HSM2_scp2_Given :1; unsigned HSM2_scp3_Given :1; unsigned HSM2_sc1_Given :1; unsigned HSM2_sc2_Given :1; unsigned HSM2_sc3_Given :1; unsigned HSM2_sc4_Given :1; unsigned HSM2_pgd1_Given :1; unsigned HSM2_pgd2_Given :1; //unsigned HSM2_pgd3_Given :1; unsigned HSM2_pgd4_Given :1; unsigned HSM2_ndep_Given :1; unsigned HSM2_ndepl_Given :1; unsigned HSM2_ndeplp_Given :1; unsigned HSM2_ndepw_Given :1; unsigned HSM2_ndepwp_Given :1; unsigned HSM2_ninv_Given :1; unsigned HSM2_ninvd_Given :1; unsigned HSM2_ninvdl_Given :1; unsigned HSM2_ninvdlp_Given :1; unsigned HSM2_muecb0_Given :1; unsigned HSM2_muecb1_Given :1; unsigned HSM2_mueph1_Given :1; unsigned HSM2_mueph0_Given :1; unsigned HSM2_muephw_Given :1; unsigned HSM2_muepwp_Given :1; unsigned HSM2_muepwd_Given :1; unsigned HSM2_muephl_Given :1; unsigned HSM2_mueplp_Given :1; unsigned HSM2_muepld_Given :1; unsigned HSM2_muephs_Given :1; unsigned HSM2_muepsp_Given :1; unsigned HSM2_vtmp_Given :1; unsigned HSM2_wvth0_Given :1; unsigned HSM2_muesr1_Given :1; unsigned HSM2_muesr0_Given :1; unsigned HSM2_muesrl_Given :1; unsigned HSM2_mueslp_Given :1; unsigned HSM2_muesrw_Given :1; unsigned HSM2_mueswp_Given :1; unsigned HSM2_bb_Given :1; unsigned HSM2_sub1_Given :1; unsigned HSM2_sub2_Given :1; unsigned HSM2_svgs_Given :1; unsigned HSM2_svbs_Given :1; unsigned HSM2_svbsl_Given :1; unsigned HSM2_svds_Given :1; unsigned HSM2_slg_Given :1; unsigned HSM2_sub1l_Given :1; unsigned HSM2_sub2l_Given :1; unsigned HSM2_svgsl_Given :1; unsigned HSM2_svgslp_Given :1; unsigned HSM2_svgswp_Given :1; unsigned HSM2_svgsw_Given :1; unsigned HSM2_svbslp_Given :1; unsigned HSM2_slgl_Given :1; unsigned HSM2_slglp_Given :1; unsigned HSM2_sub1lp_Given :1; unsigned HSM2_nsti_Given :1; unsigned HSM2_wsti_Given :1; unsigned HSM2_wstil_Given :1; unsigned HSM2_wstilp_Given :1; unsigned HSM2_wstiw_Given :1; unsigned HSM2_wstiwp_Given :1; unsigned HSM2_scsti1_Given :1; unsigned HSM2_scsti2_Given :1; unsigned HSM2_vthsti_Given :1; unsigned HSM2_vdsti_Given :1; unsigned HSM2_muesti1_Given :1; unsigned HSM2_muesti2_Given :1; unsigned HSM2_muesti3_Given :1; unsigned HSM2_nsubpsti1_Given :1; unsigned HSM2_nsubpsti2_Given :1; unsigned HSM2_nsubcsti1_Given :1; unsigned HSM2_nsubcsti2_Given :1; unsigned HSM2_nsubcsti3_Given :1; unsigned HSM2_nsubpsti3_Given :1; unsigned HSM2_lpext_Given :1; unsigned HSM2_npext_Given :1; unsigned HSM2_npextw_Given :1; unsigned HSM2_npextwp_Given :1; unsigned HSM2_scp22_Given :1; unsigned HSM2_scp21_Given :1; unsigned HSM2_bs1_Given :1; unsigned HSM2_bs2_Given :1; unsigned HSM2_cgso_Given :1; unsigned HSM2_cgdo_Given :1; unsigned HSM2_cgbo_Given :1; unsigned HSM2_tpoly_Given :1; unsigned HSM2_js0_Given :1; unsigned HSM2_js0sw_Given :1; unsigned HSM2_nj_Given :1; unsigned HSM2_njsw_Given :1; unsigned HSM2_xti_Given :1; unsigned HSM2_cj_Given :1; unsigned HSM2_cjsw_Given :1; unsigned HSM2_cjswg_Given :1; unsigned HSM2_mj_Given :1; unsigned HSM2_mjsw_Given :1; unsigned HSM2_mjswg_Given :1; unsigned HSM2_xti2_Given :1; unsigned HSM2_cisb_Given :1; unsigned HSM2_cvb_Given :1; unsigned HSM2_ctemp_Given :1; unsigned HSM2_cisbk_Given :1; unsigned HSM2_cvbk_Given :1; unsigned HSM2_divx_Given :1; unsigned HSM2_pb_Given :1; unsigned HSM2_pbsw_Given :1; unsigned HSM2_pbswg_Given :1; unsigned HSM2_tcjbd_Given :1; unsigned HSM2_tcjbs_Given :1; unsigned HSM2_tcjbdsw_Given :1; unsigned HSM2_tcjbssw_Given :1; unsigned HSM2_tcjbdswg_Given :1; unsigned HSM2_tcjbsswg_Given :1; unsigned HSM2_clm1_Given :1; unsigned HSM2_clm2_Given :1; unsigned HSM2_clm3_Given :1; unsigned HSM2_clm5_Given :1; unsigned HSM2_clm6_Given :1; unsigned HSM2_muetmp_Given :1; unsigned HSM2_vover_Given :1; unsigned HSM2_voverp_Given :1; unsigned HSM2_vovers_Given :1; unsigned HSM2_voversp_Given :1; unsigned HSM2_wfc_Given :1; unsigned HSM2_nsubcw_Given :1; unsigned HSM2_nsubcwp_Given :1; unsigned HSM2_nsubcmax_Given :1; unsigned HSM2_qme1_Given :1; unsigned HSM2_qme2_Given :1; unsigned HSM2_qme3_Given :1; unsigned HSM2_gidl1_Given :1; unsigned HSM2_gidl2_Given :1; unsigned HSM2_gidl3_Given :1; unsigned HSM2_gidl4_Given :1; unsigned HSM2_gidl6_Given :1; unsigned HSM2_gidl7_Given :1; unsigned HSM2_gidl5_Given :1; unsigned HSM2_gleak1_Given :1; unsigned HSM2_gleak2_Given :1; unsigned HSM2_gleak3_Given :1; unsigned HSM2_gleak4_Given :1; unsigned HSM2_gleak5_Given :1; unsigned HSM2_gleak6_Given :1; unsigned HSM2_gleak7_Given :1; unsigned HSM2_glksd1_Given :1; unsigned HSM2_glksd2_Given :1; unsigned HSM2_glksd3_Given :1; unsigned HSM2_glkb1_Given :1; unsigned HSM2_glkb2_Given :1; unsigned HSM2_glkb3_Given :1; unsigned HSM2_egig_Given :1; unsigned HSM2_igtemp2_Given :1; unsigned HSM2_igtemp3_Given :1; unsigned HSM2_vzadd0_Given :1; unsigned HSM2_pzadd0_Given :1; unsigned HSM2_nftrp_Given :1; unsigned HSM2_nfalp_Given :1; unsigned HSM2_cit_Given :1; unsigned HSM2_falph_Given :1; unsigned HSM2_dly1_Given :1; unsigned HSM2_dly2_Given :1; unsigned HSM2_dly3_Given :1; unsigned HSM2_tnom_Given :1; unsigned HSM2_ovslp_Given :1; unsigned HSM2_ovmag_Given :1; unsigned HSM2_gbmin_Given :1; unsigned HSM2_rbpb_Given :1; unsigned HSM2_rbpd_Given :1; unsigned HSM2_rbps_Given :1; unsigned HSM2_rbdb_Given :1; unsigned HSM2_rbsb_Given :1; unsigned HSM2_ibpc1_Given :1; unsigned HSM2_ibpc2_Given :1; unsigned HSM2_mphdfm_Given :1; unsigned HSM2_ptl_Given :1; unsigned HSM2_ptp_Given :1; unsigned HSM2_pt2_Given :1; unsigned HSM2_ptlp_Given :1; unsigned HSM2_gdl_Given :1; unsigned HSM2_gdlp_Given :1; unsigned HSM2_gdld_Given :1; unsigned HSM2_pt4_Given :1; unsigned HSM2_pt4p_Given :1; unsigned HSM2_muephl2_Given :1; unsigned HSM2_mueplp2_Given :1; unsigned HSM2_nsubcw2_Given :1; unsigned HSM2_nsubcwp2_Given :1; unsigned HSM2_muephw2_Given :1; unsigned HSM2_muepwp2_Given :1; /* val set flag for WPE */ unsigned HSM2_web_Given :1; unsigned HSM2_wec_Given :1; unsigned HSM2_nsubcwpe_Given :1; unsigned HSM2_npextwpe_Given :1; unsigned HSM2_nsubpwpe_Given :1; unsigned HSM2_Vgsmin_Given :1; unsigned HSM2_sc3Vbs_Given :1; unsigned HSM2_byptol_Given :1; unsigned HSM2_muecb0lp_Given :1; unsigned HSM2_muecb1lp_Given :1; /* Depletion Mode MOSFET */ unsigned HSM2_ndepm_Given :1; unsigned HSM2_ndepml_Given :1; unsigned HSM2_ndepmlp_Given :1; unsigned HSM2_tndep_Given :1; unsigned HSM2_depleak_Given :1; unsigned HSM2_depleakl_Given :1; unsigned HSM2_depleaklp_Given :1; unsigned HSM2_depmue0_Given :1; unsigned HSM2_depmue0l_Given :1; unsigned HSM2_depmue0lp_Given :1; unsigned HSM2_depmue1_Given :1; unsigned HSM2_depmue1l_Given :1; unsigned HSM2_depmue1lp_Given :1; unsigned HSM2_depmueback0_Given :1; unsigned HSM2_depmueback0l_Given :1; unsigned HSM2_depmueback0lp_Given :1; unsigned HSM2_depmueback1_Given :1; unsigned HSM2_depmueback1l_Given :1; unsigned HSM2_depmueback1lp_Given :1; unsigned HSM2_depmueph0_Given :1; unsigned HSM2_depmueph1_Given :1; unsigned HSM2_depvmax_Given :1; unsigned HSM2_depvmaxl_Given :1; unsigned HSM2_depvmaxlp_Given :1; unsigned HSM2_depvdsef1_Given :1; unsigned HSM2_depvdsef1l_Given :1; unsigned HSM2_depvdsef1lp_Given :1; unsigned HSM2_depvdsef2_Given :1; unsigned HSM2_depvdsef2l_Given :1; unsigned HSM2_depvdsef2lp_Given :1; unsigned HSM2_depbb_Given :1; unsigned HSM2_depmuetmp_Given :1; unsigned HSM2_depeta_Given :1; /* binning parameters */ unsigned HSM2_lmin_Given :1; unsigned HSM2_lmax_Given :1; unsigned HSM2_wmin_Given :1; unsigned HSM2_wmax_Given :1; unsigned HSM2_lbinn_Given :1; unsigned HSM2_wbinn_Given :1; /* Length dependence */ unsigned HSM2_lvmax_Given :1; unsigned HSM2_lbgtmp1_Given :1; unsigned HSM2_lbgtmp2_Given :1; unsigned HSM2_leg0_Given :1; unsigned HSM2_llover_Given :1; unsigned HSM2_lvfbover_Given :1; unsigned HSM2_lnover_Given :1; unsigned HSM2_lwl2_Given :1; unsigned HSM2_lvfbc_Given :1; unsigned HSM2_lnsubc_Given :1; unsigned HSM2_lnsubp_Given :1; unsigned HSM2_lscp1_Given :1; unsigned HSM2_lscp2_Given :1; unsigned HSM2_lscp3_Given :1; unsigned HSM2_lsc1_Given :1; unsigned HSM2_lsc2_Given :1; unsigned HSM2_lsc3_Given :1; unsigned HSM2_lsc4_Given :1; unsigned HSM2_lpgd1_Given :1; //unsigned HSM2_lpgd3_Given :1; unsigned HSM2_lndep_Given :1; unsigned HSM2_lninv_Given :1; unsigned HSM2_lmuecb0_Given :1; unsigned HSM2_lmuecb1_Given :1; unsigned HSM2_lmueph1_Given :1; unsigned HSM2_lvtmp_Given :1; unsigned HSM2_lwvth0_Given :1; unsigned HSM2_lmuesr1_Given :1; unsigned HSM2_lmuetmp_Given :1; unsigned HSM2_lsub1_Given :1; unsigned HSM2_lsub2_Given :1; unsigned HSM2_lsvds_Given :1; unsigned HSM2_lsvbs_Given :1; unsigned HSM2_lsvgs_Given :1; unsigned HSM2_lnsti_Given :1; unsigned HSM2_lwsti_Given :1; unsigned HSM2_lscsti1_Given :1; unsigned HSM2_lscsti2_Given :1; unsigned HSM2_lvthsti_Given :1; unsigned HSM2_lmuesti1_Given :1; unsigned HSM2_lmuesti2_Given :1; unsigned HSM2_lmuesti3_Given :1; unsigned HSM2_lnsubpsti1_Given :1; unsigned HSM2_lnsubpsti2_Given :1; unsigned HSM2_lnsubcsti1_Given :1; unsigned HSM2_lnsubcsti2_Given :1; unsigned HSM2_lnsubcsti3_Given :1; unsigned HSM2_lnsubpsti3_Given :1; unsigned HSM2_lcgso_Given :1; unsigned HSM2_lcgdo_Given :1; unsigned HSM2_ljs0_Given :1; unsigned HSM2_ljs0sw_Given :1; unsigned HSM2_lnj_Given :1; unsigned HSM2_lcisbk_Given :1; unsigned HSM2_lclm1_Given :1; unsigned HSM2_lclm2_Given :1; unsigned HSM2_lclm3_Given :1; unsigned HSM2_lwfc_Given :1; unsigned HSM2_lgidl1_Given :1; unsigned HSM2_lgidl2_Given :1; unsigned HSM2_lgleak1_Given :1; unsigned HSM2_lgleak2_Given :1; unsigned HSM2_lgleak3_Given :1; unsigned HSM2_lgleak6_Given :1; unsigned HSM2_lglksd1_Given :1; unsigned HSM2_lglksd2_Given :1; unsigned HSM2_lglkb1_Given :1; unsigned HSM2_lglkb2_Given :1; unsigned HSM2_lnftrp_Given :1; unsigned HSM2_lnfalp_Given :1; unsigned HSM2_lvdiffj_Given :1; unsigned HSM2_libpc1_Given :1; unsigned HSM2_libpc2_Given :1; /* Width dependence */ unsigned HSM2_wvmax_Given :1; unsigned HSM2_wbgtmp1_Given :1; unsigned HSM2_wbgtmp2_Given :1; unsigned HSM2_weg0_Given :1; unsigned HSM2_wlover_Given :1; unsigned HSM2_wvfbover_Given :1; unsigned HSM2_wnover_Given :1; unsigned HSM2_wwl2_Given :1; unsigned HSM2_wvfbc_Given :1; unsigned HSM2_wnsubc_Given :1; unsigned HSM2_wnsubp_Given :1; unsigned HSM2_wscp1_Given :1; unsigned HSM2_wscp2_Given :1; unsigned HSM2_wscp3_Given :1; unsigned HSM2_wsc1_Given :1; unsigned HSM2_wsc2_Given :1; unsigned HSM2_wsc3_Given :1; unsigned HSM2_wsc4_Given :1; unsigned HSM2_wpgd1_Given :1; //unsigned HSM2_wpgd3_Given :1; unsigned HSM2_wndep_Given :1; unsigned HSM2_wninv_Given :1; unsigned HSM2_wmuecb0_Given :1; unsigned HSM2_wmuecb1_Given :1; unsigned HSM2_wmueph1_Given :1; unsigned HSM2_wvtmp_Given :1; unsigned HSM2_wwvth0_Given :1; unsigned HSM2_wmuesr1_Given :1; unsigned HSM2_wmuetmp_Given :1; unsigned HSM2_wsub1_Given :1; unsigned HSM2_wsub2_Given :1; unsigned HSM2_wsvds_Given :1; unsigned HSM2_wsvbs_Given :1; unsigned HSM2_wsvgs_Given :1; unsigned HSM2_wnsti_Given :1; unsigned HSM2_wwsti_Given :1; unsigned HSM2_wscsti1_Given :1; unsigned HSM2_wscsti2_Given :1; unsigned HSM2_wvthsti_Given :1; unsigned HSM2_wmuesti1_Given :1; unsigned HSM2_wmuesti2_Given :1; unsigned HSM2_wmuesti3_Given :1; unsigned HSM2_wnsubpsti1_Given :1; unsigned HSM2_wnsubpsti2_Given :1; unsigned HSM2_wnsubcsti1_Given :1; unsigned HSM2_wnsubcsti2_Given :1; unsigned HSM2_wnsubcsti3_Given :1; unsigned HSM2_wnsubpsti3_Given :1; unsigned HSM2_wcgso_Given :1; unsigned HSM2_wcgdo_Given :1; unsigned HSM2_wjs0_Given :1; unsigned HSM2_wjs0sw_Given :1; unsigned HSM2_wnj_Given :1; unsigned HSM2_wcisbk_Given :1; unsigned HSM2_wclm1_Given :1; unsigned HSM2_wclm2_Given :1; unsigned HSM2_wclm3_Given :1; unsigned HSM2_wwfc_Given :1; unsigned HSM2_wgidl1_Given :1; unsigned HSM2_wgidl2_Given :1; unsigned HSM2_wgleak1_Given :1; unsigned HSM2_wgleak2_Given :1; unsigned HSM2_wgleak3_Given :1; unsigned HSM2_wgleak6_Given :1; unsigned HSM2_wglksd1_Given :1; unsigned HSM2_wglksd2_Given :1; unsigned HSM2_wglkb1_Given :1; unsigned HSM2_wglkb2_Given :1; unsigned HSM2_wnftrp_Given :1; unsigned HSM2_wnfalp_Given :1; unsigned HSM2_wvdiffj_Given :1; unsigned HSM2_wibpc1_Given :1; unsigned HSM2_wibpc2_Given :1; /* Cross-term dependence */ unsigned HSM2_pvmax_Given :1; unsigned HSM2_pbgtmp1_Given :1; unsigned HSM2_pbgtmp2_Given :1; unsigned HSM2_peg0_Given :1; unsigned HSM2_plover_Given :1; unsigned HSM2_pvfbover_Given :1; unsigned HSM2_pnover_Given :1; unsigned HSM2_pwl2_Given :1; unsigned HSM2_pvfbc_Given :1; unsigned HSM2_pnsubc_Given :1; unsigned HSM2_pnsubp_Given :1; unsigned HSM2_pscp1_Given :1; unsigned HSM2_pscp2_Given :1; unsigned HSM2_pscp3_Given :1; unsigned HSM2_psc1_Given :1; unsigned HSM2_psc2_Given :1; unsigned HSM2_psc3_Given :1; unsigned HSM2_psc4_Given :1; unsigned HSM2_ppgd1_Given :1; //unsigned HSM2_ppgd3_Given :1; unsigned HSM2_pndep_Given :1; unsigned HSM2_pninv_Given :1; unsigned HSM2_pmuecb0_Given :1; unsigned HSM2_pmuecb1_Given :1; unsigned HSM2_pmueph1_Given :1; unsigned HSM2_pvtmp_Given :1; unsigned HSM2_pwvth0_Given :1; unsigned HSM2_pmuesr1_Given :1; unsigned HSM2_pmuetmp_Given :1; unsigned HSM2_psub1_Given :1; unsigned HSM2_psub2_Given :1; unsigned HSM2_psvds_Given :1; unsigned HSM2_psvbs_Given :1; unsigned HSM2_psvgs_Given :1; unsigned HSM2_pnsti_Given :1; unsigned HSM2_pwsti_Given :1; unsigned HSM2_pscsti1_Given :1; unsigned HSM2_pscsti2_Given :1; unsigned HSM2_pvthsti_Given :1; unsigned HSM2_pmuesti1_Given :1; unsigned HSM2_pmuesti2_Given :1; unsigned HSM2_pmuesti3_Given :1; unsigned HSM2_pnsubpsti1_Given :1; unsigned HSM2_pnsubpsti2_Given :1; unsigned HSM2_pnsubcsti1_Given :1; unsigned HSM2_pnsubcsti2_Given :1; unsigned HSM2_pnsubcsti3_Given :1; unsigned HSM2_pnsubpsti3_Given :1; unsigned HSM2_pcgso_Given :1; unsigned HSM2_pcgdo_Given :1; unsigned HSM2_pjs0_Given :1; unsigned HSM2_pjs0sw_Given :1; unsigned HSM2_pnj_Given :1; unsigned HSM2_pcisbk_Given :1; unsigned HSM2_pclm1_Given :1; unsigned HSM2_pclm2_Given :1; unsigned HSM2_pclm3_Given :1; unsigned HSM2_pwfc_Given :1; unsigned HSM2_pgidl1_Given :1; unsigned HSM2_pgidl2_Given :1; unsigned HSM2_pgleak1_Given :1; unsigned HSM2_pgleak2_Given :1; unsigned HSM2_pgleak3_Given :1; unsigned HSM2_pgleak6_Given :1; unsigned HSM2_pglksd1_Given :1; unsigned HSM2_pglksd2_Given :1; unsigned HSM2_pglkb1_Given :1; unsigned HSM2_pglkb2_Given :1; unsigned HSM2_pnftrp_Given :1; unsigned HSM2_pnfalp_Given :1; unsigned HSM2_pvdiffj_Given :1; unsigned HSM2_pibpc1_Given :1; unsigned HSM2_pibpc2_Given :1; unsigned HSM2vgsMaxGiven :1; unsigned HSM2vgdMaxGiven :1; unsigned HSM2vgbMaxGiven :1; unsigned HSM2vdsMaxGiven :1; unsigned HSM2vbsMaxGiven :1; unsigned HSM2vbdMaxGiven :1; unsigned HSM2vgsrMaxGiven :1; unsigned HSM2vgdrMaxGiven :1; unsigned HSM2vgbrMaxGiven :1; unsigned HSM2vbsrMaxGiven :1; unsigned HSM2vbdrMaxGiven :1; } HSM2model; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ #define HSM2_BAD_PARAM -1 /* flags */ #define HSM2_MOD_NMOS 1 #define HSM2_MOD_PMOS 2 #define HSM2_MOD_LEVEL 3 #define HSM2_MOD_INFO 4 #define HSM2_MOD_NOISE 5 #define HSM2_MOD_VERSION 6 #define HSM2_MOD_SHOW 7 #define HSM2_MOD_CORSRD 11 #define HSM2_MOD_COIPRV 12 #define HSM2_MOD_COPPRV 13 #define HSM2_MOD_COADOV 17 #define HSM2_MOD_COISUB 21 #define HSM2_MOD_COIIGS 22 #define HSM2_MOD_COGIDL 23 #define HSM2_MOD_COOVLP 24 #define HSM2_MOD_COFLICK 25 #define HSM2_MOD_COISTI 26 #define HSM2_MOD_CONQS 29 /* HiSIM2 */ #define HSM2_MOD_COTHRML 30 #define HSM2_MOD_COIGN 31 /* induced gate noise */ #define HSM2_MOD_CORG 32 #define HSM2_MOD_CORBNET 33 #define HSM2_MOD_CODFM 36 /* DFM */ #define HSM2_MOD_CORECIP 37 #define HSM2_MOD_COQY 38 #define HSM2_MOD_COQOVSM 39 #define HSM2_MOD_COERRREP 153 #define HSM2_MOD_CODEP 45 #define HSM2_MOD_CODDLT 40 /* device parameters */ #define HSM2_L 51 #define HSM2_W 52 #define HSM2_AD 53 #define HSM2_AS 54 #define HSM2_PD 55 #define HSM2_PS 56 #define HSM2_NRD 57 #define HSM2_NRS 58 #define HSM2_TEMP 59 #define HSM2_DTEMP 60 #define HSM2_OFF 61 #define HSM2_IC_VBS 62 #define HSM2_IC_VDS 63 #define HSM2_IC_VGS 64 #define HSM2_IC 65 #define HSM2_CORBNET 66 #define HSM2_RBPB 67 #define HSM2_RBPD 68 #define HSM2_RBPS 69 #define HSM2_RBDB 70 #define HSM2_RBSB 71 #define HSM2_CORG 72 /* #define HSM2_RSHG 73 */ #define HSM2_NGCON 74 #define HSM2_XGW 75 #define HSM2_XGL 76 #define HSM2_NF 77 #define HSM2_SA 78 #define HSM2_SB 79 #define HSM2_SD 80 #define HSM2_NSUBCDFM 82 #define HSM2_MPHDFM 84 #define HSM2_M 83 /* val symbol for WPE */ #define HSM2_SCA 85 /* sca */ #define HSM2_SCB 86 /* scb */ #define HSM2_SCC 87 /* scc */ /* model parameters */ #define HSM2_MOD_VMAX 100 #define HSM2_MOD_BGTMP1 101 #define HSM2_MOD_BGTMP2 102 #define HSM2_MOD_EG0 103 #define HSM2_MOD_TOX 104 #define HSM2_MOD_XLD 105 #define HSM2_MOD_LOVER 106 #define HSM2_MOD_DDLTMAX 421 /* Vdseff */ #define HSM2_MOD_DDLTSLP 422 /* Vdseff */ #define HSM2_MOD_DDLTICT 423 /* Vdseff */ #define HSM2_MOD_VFBOVER 428 #define HSM2_MOD_NOVER 430 #define HSM2_MOD_XWD 107 #define HSM2_MOD_XL 112 #define HSM2_MOD_XW 117 #define HSM2_MOD_SAREF 433 #define HSM2_MOD_SBREF 434 #define HSM2_MOD_LL 108 #define HSM2_MOD_LLD 109 #define HSM2_MOD_LLN 110 #define HSM2_MOD_WL 111 #define HSM2_MOD_WL1 113 #define HSM2_MOD_WL1P 114 #define HSM2_MOD_WL2 407 #define HSM2_MOD_WL2P 408 #define HSM2_MOD_WLD 115 #define HSM2_MOD_WLN 116 #define HSM2_MOD_XQY 178 #define HSM2_MOD_XQY1 118 #define HSM2_MOD_XQY2 120 #define HSM2_MOD_QYRAT 991 #define HSM2_MOD_RSH 119 #define HSM2_MOD_RSHG 384 /* #define HSM2_MOD_NGCON 385 */ /* #define HSM2_MOD_XGW 386 */ /* #define HSM2_MOD_XGL 387 */ /* #define HSM2_MOD_NF 388 */ #define HSM2_MOD_RS 398 #define HSM2_MOD_RD 399 #define HSM2_MOD_VFBC 121 #define HSM2_MOD_VBI 122 #define HSM2_MOD_NSUBC 123 #define HSM2_MOD_VFBCL 272 #define HSM2_MOD_VFBCLP 273 #define HSM2_MOD_TNOM 124 #define HSM2_MOD_PARL2 125 #define HSM2_MOD_SC1 126 #define HSM2_MOD_SC2 127 #define HSM2_MOD_SC3 128 #define HSM2_MOD_SC4 460 #define HSM2_MOD_NDEP 129 #define HSM2_MOD_NDEPL 419 #define HSM2_MOD_NDEPLP 420 #define HSM2_MOD_NDEPW 469 #define HSM2_MOD_NDEPWP 470 #define HSM2_MOD_NINV 130 #define HSM2_MOD_NINVD 300 #define HSM2_MOD_NINVDL 301 #define HSM2_MOD_NINVDLP 302 #define HSM2_MOD_MUECB0 131 #define HSM2_MOD_MUECB1 132 #define HSM2_MOD_MUEPH1 133 #define HSM2_MOD_MUEPH0 134 #define HSM2_MOD_MUEPHW 135 #define HSM2_MOD_MUEPWP 136 #define HSM2_MOD_MUEPWD 333 #define HSM2_MOD_MUEPHL 137 #define HSM2_MOD_MUEPLP 138 #define HSM2_MOD_MUEPLD 150 #define HSM2_MOD_MUEPHS 139 #define HSM2_MOD_MUEPSP 140 #define HSM2_MOD_VTMP 141 #define HSM2_MOD_WVTH0 142 #define HSM2_MOD_MUESR1 143 #define HSM2_MOD_MUESR0 144 #define HSM2_MOD_MUESRL 145 #define HSM2_MOD_MUESLP 146 #define HSM2_MOD_MUESRW 147 #define HSM2_MOD_MUESWP 148 #define HSM2_MOD_BB 149 #define HSM2_MOD_SUB1 151 #define HSM2_MOD_SUB2 152 #define HSM2_MOD_CGSO 154 #define HSM2_MOD_CGDO 155 #define HSM2_MOD_CGBO 156 #define HSM2_MOD_JS0 157 #define HSM2_MOD_JS0SW 158 #define HSM2_MOD_NJ 159 #define HSM2_MOD_NJSW 160 #define HSM2_MOD_XTI 161 #define HSM2_MOD_CJ 162 #define HSM2_MOD_CJSW 163 #define HSM2_MOD_CJSWG 164 #define HSM2_MOD_MJ 165 #define HSM2_MOD_MJSW 166 #define HSM2_MOD_MJSWG 167 #define HSM2_MOD_XTI2 168 #define HSM2_MOD_CISB 169 #define HSM2_MOD_CVB 170 #define HSM2_MOD_CTEMP 171 #define HSM2_MOD_CISBK 172 #define HSM2_MOD_CVBK 173 #define HSM2_MOD_DIVX 174 #define HSM2_MOD_PB 175 #define HSM2_MOD_PBSW 176 #define HSM2_MOD_PBSWG 177 #define HSM2_MOD_TPOLY 179 #define HSM2_MOD_LP 180 #define HSM2_MOD_NSUBP 181 #define HSM2_MOD_NSUBPL 196 #define HSM2_MOD_NSUBPFAC 197 #define HSM2_MOD_NSUBPDLT 274 #define HSM2_MOD_NSUBPW 182 #define HSM2_MOD_NSUBPWP 183 #define HSM2_MOD_SCP1 184 #define HSM2_MOD_SCP2 185 #define HSM2_MOD_SCP3 186 #define HSM2_MOD_PGD1 187 #define HSM2_MOD_PGD2 188 //#define HSM2_MOD_PGD3 189 #define HSM2_MOD_PGD4 190 #define HSM2_MOD_CLM1 191 #define HSM2_MOD_CLM2 192 #define HSM2_MOD_CLM3 193 #define HSM2_MOD_CLM5 402 #define HSM2_MOD_CLM6 403 #define HSM2_MOD_MUETMP 195 #define HSM2_MOD_VOVER 199 #define HSM2_MOD_VOVERP 200 #define HSM2_MOD_WFC 201 #define HSM2_MOD_NSUBCW 249 #define HSM2_MOD_NSUBCWP 250 #define HSM2_MOD_NSUBCMAX 248 #define HSM2_MOD_QME1 202 #define HSM2_MOD_QME2 203 #define HSM2_MOD_QME3 204 #define HSM2_MOD_GIDL1 205 #define HSM2_MOD_GIDL2 206 #define HSM2_MOD_GIDL3 207 #define HSM2_MOD_GLEAK1 208 #define HSM2_MOD_GLEAK2 209 #define HSM2_MOD_GLEAK3 210 #define HSM2_MOD_GLEAK4 211 #define HSM2_MOD_GLEAK5 212 #define HSM2_MOD_GLEAK6 213 #define HSM2_MOD_GLEAK7 214 #define HSM2_MOD_GLKSD1 215 #define HSM2_MOD_GLKSD2 216 #define HSM2_MOD_GLKSD3 217 #define HSM2_MOD_GLKB1 218 #define HSM2_MOD_GLKB2 219 #define HSM2_MOD_GLKB3 429 #define HSM2_MOD_EGIG 220 #define HSM2_MOD_IGTEMP2 221 #define HSM2_MOD_IGTEMP3 222 #define HSM2_MOD_VZADD0 223 #define HSM2_MOD_PZADD0 224 #define HSM2_MOD_NSTI 225 #define HSM2_MOD_WSTI 226 #define HSM2_MOD_WSTIL 227 #define HSM2_MOD_WSTILP 231 #define HSM2_MOD_WSTIW 234 #define HSM2_MOD_WSTIWP 228 #define HSM2_MOD_SCSTI1 229 #define HSM2_MOD_SCSTI2 230 #define HSM2_MOD_VTHSTI 232 #define HSM2_MOD_VDSTI 233 #define HSM2_MOD_MUESTI1 235 #define HSM2_MOD_MUESTI2 236 #define HSM2_MOD_MUESTI3 237 #define HSM2_MOD_NSUBPSTI1 238 #define HSM2_MOD_NSUBPSTI2 239 #define HSM2_MOD_NSUBPSTI3 240 #define HSM2_MOD_NSUBCSTI1 198 #define HSM2_MOD_NSUBCSTI2 247 #define HSM2_MOD_NSUBCSTI3 252 #define HSM2_MOD_LPEXT 241 #define HSM2_MOD_NPEXT 242 #define HSM2_MOD_NPEXTW 471 #define HSM2_MOD_NPEXTWP 472 #define HSM2_MOD_SCP22 243 #define HSM2_MOD_SCP21 244 #define HSM2_MOD_BS1 245 #define HSM2_MOD_BS2 246 #define HSM2_MOD_KAPPA 251 #define HSM2_MOD_VDIFFJ 254 #define HSM2_MOD_DLY1 255 #define HSM2_MOD_DLY2 256 #define HSM2_MOD_DLY3 257 #define HSM2_MOD_NFTRP 258 #define HSM2_MOD_NFALP 259 #define HSM2_MOD_FALPH 263 #define HSM2_MOD_CIT 260 #define HSM2_MOD_OVSLP 261 #define HSM2_MOD_OVMAG 262 #define HSM2_MOD_GIDL4 281 #define HSM2_MOD_GIDL5 282 #define HSM2_MOD_GIDL6 189 #define HSM2_MOD_GIDL7 194 #define HSM2_MOD_SVGS 283 #define HSM2_MOD_SVBS 284 #define HSM2_MOD_SVBSL 285 #define HSM2_MOD_SVDS 286 #define HSM2_MOD_SLG 287 #define HSM2_MOD_SUB1L 290 #define HSM2_MOD_SUB2L 292 #define HSM2_MOD_VOVERS 303 #define HSM2_MOD_VOVERSP 304 #define HSM2_MOD_SVGSL 305 #define HSM2_MOD_SVGSLP 306 #define HSM2_MOD_SVGSWP 307 #define HSM2_MOD_SVGSW 308 #define HSM2_MOD_SVBSLP 309 #define HSM2_MOD_SLGL 310 #define HSM2_MOD_SLGLP 311 #define HSM2_MOD_SUB1LP 312 #define HSM2_MOD_IBPC1 404 #define HSM2_MOD_IBPC2 405 #define HSM2_MOD_MPHDFM 409 #define HSM2_MOD_PTL 450 #define HSM2_MOD_PTP 451 #define HSM2_MOD_PT2 452 #define HSM2_MOD_PTLP 455 #define HSM2_MOD_GDL 453 #define HSM2_MOD_GDLP 454 #define HSM2_MOD_GDLD 456 #define HSM2_MOD_PT4 457 #define HSM2_MOD_PT4P 465 #define HSM2_MOD_MUEPHL2 458 #define HSM2_MOD_MUEPLP2 459 #define HSM2_MOD_NSUBCW2 461 #define HSM2_MOD_NSUBCWP2 462 #define HSM2_MOD_MUEPHW2 463 #define HSM2_MOD_MUEPWP2 464 /* val symbol for WPE */ #define HSM2_MOD_WEB 88 #define HSM2_MOD_WEC 89 #define HSM2_MOD_NSUBCWPE 91 #define HSM2_MOD_NPEXTWPE 41 #define HSM2_MOD_NSUBPWPE 43 #define HSM2_MOD_VGSMIN 466 #define HSM2_MOD_SC3VBS 467 #define HSM2_MOD_BYPTOL 468 #define HSM2_MOD_MUECB0LP 473 #define HSM2_MOD_MUECB1LP 474 #define HSM2_MOD_NDEPM 600 #define HSM2_MOD_NDEPML 610 #define HSM2_MOD_NDEPMLP 611 #define HSM2_MOD_TNDEP 601 #define HSM2_MOD_DEPLEAK 608 #define HSM2_MOD_DEPLEAKL 614 #define HSM2_MOD_DEPLEAKLP 615 #define HSM2_MOD_DEPETA 609 #define HSM2_MOD_DEPMUE0 275 #define HSM2_MOD_DEPMUE0L 276 #define HSM2_MOD_DEPMUE0LP 277 #define HSM2_MOD_DEPMUE1 278 #define HSM2_MOD_DEPMUE1L 279 #define HSM2_MOD_DEPMUE1LP 280 #define HSM2_MOD_DEPMUEBACK0 288 #define HSM2_MOD_DEPMUEBACK0L 289 #define HSM2_MOD_DEPMUEBACK0LP 291 #define HSM2_MOD_DEPMUEBACK1 293 #define HSM2_MOD_DEPMUEBACK1L 294 #define HSM2_MOD_DEPMUEBACK1LP 295 #define HSM2_MOD_DEPMUEPH0 296 #define HSM2_MOD_DEPMUEPH1 297 #define HSM2_MOD_DEPVMAX 298 #define HSM2_MOD_DEPVMAXL 299 #define HSM2_MOD_DEPVMAXLP 313 #define HSM2_MOD_DEPVDSEF1 314 #define HSM2_MOD_DEPVDSEF1L 315 #define HSM2_MOD_DEPVDSEF1LP 316 #define HSM2_MOD_DEPVDSEF2 317 #define HSM2_MOD_DEPVDSEF2L 318 #define HSM2_MOD_DEPVDSEF2LP 319 #define HSM2_MOD_DEPBB 320 #define HSM2_MOD_DEPMUETMP 321 /* binning parameters */ #define HSM2_MOD_LMIN 1000 #define HSM2_MOD_LMAX 1001 #define HSM2_MOD_WMIN 1002 #define HSM2_MOD_WMAX 1003 #define HSM2_MOD_LBINN 1004 #define HSM2_MOD_WBINN 1005 /* Length dependence */ #define HSM2_MOD_LVMAX 1100 #define HSM2_MOD_LBGTMP1 1101 #define HSM2_MOD_LBGTMP2 1102 #define HSM2_MOD_LEG0 1103 #define HSM2_MOD_LLOVER 1106 #define HSM2_MOD_LVFBOVER 1428 #define HSM2_MOD_LNOVER 1430 #define HSM2_MOD_LWL2 1407 #define HSM2_MOD_LVFBC 1121 #define HSM2_MOD_LNSUBC 1123 #define HSM2_MOD_LNSUBP 1181 #define HSM2_MOD_LSCP1 1184 #define HSM2_MOD_LSCP2 1185 #define HSM2_MOD_LSCP3 1186 #define HSM2_MOD_LSC1 1126 #define HSM2_MOD_LSC2 1127 #define HSM2_MOD_LSC3 1128 #define HSM2_MOD_LSC4 1270 #define HSM2_MOD_LPGD1 1187 //#define HSM2_MOD_LPGD3 1189 #define HSM2_MOD_LNDEP 1129 #define HSM2_MOD_LNINV 1130 #define HSM2_MOD_LMUECB0 1131 #define HSM2_MOD_LMUECB1 1132 #define HSM2_MOD_LMUEPH1 1133 #define HSM2_MOD_LVTMP 1141 #define HSM2_MOD_LWVTH0 1142 #define HSM2_MOD_LMUESR1 1143 #define HSM2_MOD_LMUETMP 1195 #define HSM2_MOD_LSUB1 1151 #define HSM2_MOD_LSUB2 1152 #define HSM2_MOD_LSVDS 1286 #define HSM2_MOD_LSVBS 1284 #define HSM2_MOD_LSVGS 1283 #define HSM2_MOD_LNSTI 1225 #define HSM2_MOD_LWSTI 1226 #define HSM2_MOD_LSCSTI1 1229 #define HSM2_MOD_LSCSTI2 1230 #define HSM2_MOD_LVTHSTI 1232 #define HSM2_MOD_LMUESTI1 1235 #define HSM2_MOD_LMUESTI2 1236 #define HSM2_MOD_LMUESTI3 1237 #define HSM2_MOD_LNSUBPSTI1 1238 #define HSM2_MOD_LNSUBPSTI2 1239 #define HSM2_MOD_LNSUBPSTI3 1240 #define HSM2_MOD_LNSUBCSTI1 253 #define HSM2_MOD_LNSUBCSTI2 264 #define HSM2_MOD_LNSUBCSTI3 265 #define HSM2_MOD_LCGSO 1154 #define HSM2_MOD_LCGDO 1155 #define HSM2_MOD_LJS0 1157 #define HSM2_MOD_LJS0SW 1158 #define HSM2_MOD_LNJ 1159 #define HSM2_MOD_LCISBK 1172 #define HSM2_MOD_LCLM1 1191 #define HSM2_MOD_LCLM2 1192 #define HSM2_MOD_LCLM3 1193 #define HSM2_MOD_LWFC 1201 #define HSM2_MOD_LGIDL1 1205 #define HSM2_MOD_LGIDL2 1206 #define HSM2_MOD_LGLEAK1 1208 #define HSM2_MOD_LGLEAK2 1209 #define HSM2_MOD_LGLEAK3 1210 #define HSM2_MOD_LGLEAK6 1213 #define HSM2_MOD_LGLKSD1 1215 #define HSM2_MOD_LGLKSD2 1216 #define HSM2_MOD_LGLKB1 1218 #define HSM2_MOD_LGLKB2 1219 #define HSM2_MOD_LNFTRP 1258 #define HSM2_MOD_LNFALP 1259 #define HSM2_MOD_LVDIFFJ 1254 #define HSM2_MOD_LIBPC1 1404 #define HSM2_MOD_LIBPC2 1405 /* Width dependence */ #define HSM2_MOD_WVMAX 2100 #define HSM2_MOD_WBGTMP1 2101 #define HSM2_MOD_WBGTMP2 2102 #define HSM2_MOD_WEG0 2103 #define HSM2_MOD_WLOVER 2106 #define HSM2_MOD_WVFBOVER 2428 #define HSM2_MOD_WNOVER 2430 #define HSM2_MOD_WWL2 2407 #define HSM2_MOD_WVFBC 2121 #define HSM2_MOD_WNSUBC 2123 #define HSM2_MOD_WNSUBP 2181 #define HSM2_MOD_WSCP1 2184 #define HSM2_MOD_WSCP2 2185 #define HSM2_MOD_WSCP3 2186 #define HSM2_MOD_WSC1 2126 #define HSM2_MOD_WSC2 2127 #define HSM2_MOD_WSC3 2128 #define HSM2_MOD_WSC4 2270 #define HSM2_MOD_WPGD1 2187 //#define HSM2_MOD_WPGD3 2189 #define HSM2_MOD_WNDEP 2129 #define HSM2_MOD_WNINV 2130 #define HSM2_MOD_WMUECB0 2131 #define HSM2_MOD_WMUECB1 2132 #define HSM2_MOD_WMUEPH1 2133 #define HSM2_MOD_WVTMP 2141 #define HSM2_MOD_WWVTH0 2142 #define HSM2_MOD_WMUESR1 2143 #define HSM2_MOD_WMUETMP 2195 #define HSM2_MOD_WSUB1 2151 #define HSM2_MOD_WSUB2 2152 #define HSM2_MOD_WSVDS 2286 #define HSM2_MOD_WSVBS 2284 #define HSM2_MOD_WSVGS 2283 #define HSM2_MOD_WNSTI 2225 #define HSM2_MOD_WWSTI 2226 #define HSM2_MOD_WSCSTI1 2229 #define HSM2_MOD_WSCSTI2 2230 #define HSM2_MOD_WVTHSTI 2232 #define HSM2_MOD_WMUESTI1 2235 #define HSM2_MOD_WMUESTI2 2236 #define HSM2_MOD_WMUESTI3 2237 #define HSM2_MOD_WNSUBPSTI1 2238 #define HSM2_MOD_WNSUBPSTI2 2239 #define HSM2_MOD_WNSUBPSTI3 2240 #define HSM2_MOD_WNSUBCSTI1 266 #define HSM2_MOD_WNSUBCSTI2 267 #define HSM2_MOD_WNSUBCSTI3 268 #define HSM2_MOD_WCGSO 2154 #define HSM2_MOD_WCGDO 2155 #define HSM2_MOD_WJS0 2157 #define HSM2_MOD_WJS0SW 2158 #define HSM2_MOD_WNJ 2159 #define HSM2_MOD_WCISBK 2172 #define HSM2_MOD_WCLM1 2191 #define HSM2_MOD_WCLM2 2192 #define HSM2_MOD_WCLM3 2193 #define HSM2_MOD_WWFC 2201 #define HSM2_MOD_WGIDL1 2205 #define HSM2_MOD_WGIDL2 2206 #define HSM2_MOD_WGLEAK1 2208 #define HSM2_MOD_WGLEAK2 2209 #define HSM2_MOD_WGLEAK3 2210 #define HSM2_MOD_WGLEAK6 2213 #define HSM2_MOD_WGLKSD1 2215 #define HSM2_MOD_WGLKSD2 2216 #define HSM2_MOD_WGLKB1 2218 #define HSM2_MOD_WGLKB2 2219 #define HSM2_MOD_WNFTRP 2258 #define HSM2_MOD_WNFALP 2259 #define HSM2_MOD_WVDIFFJ 2254 #define HSM2_MOD_WIBPC1 2404 #define HSM2_MOD_WIBPC2 2405 /* Cross-term dependence */ #define HSM2_MOD_PVMAX 3100 #define HSM2_MOD_PBGTMP1 3101 #define HSM2_MOD_PBGTMP2 3102 #define HSM2_MOD_PEG0 3103 #define HSM2_MOD_PLOVER 3106 #define HSM2_MOD_PVFBOVER 3428 #define HSM2_MOD_PNOVER 3430 #define HSM2_MOD_PWL2 3407 #define HSM2_MOD_PVFBC 3121 #define HSM2_MOD_PNSUBC 3123 #define HSM2_MOD_PNSUBP 3181 #define HSM2_MOD_PSCP1 3184 #define HSM2_MOD_PSCP2 3185 #define HSM2_MOD_PSCP3 3186 #define HSM2_MOD_PSC1 3126 #define HSM2_MOD_PSC2 3127 #define HSM2_MOD_PSC3 3128 #define HSM2_MOD_PSC4 3270 #define HSM2_MOD_PPGD1 3187 //#define HSM2_MOD_PPGD3 3189 #define HSM2_MOD_PNDEP 3129 #define HSM2_MOD_PNINV 3130 #define HSM2_MOD_PMUECB0 3131 #define HSM2_MOD_PMUECB1 3132 #define HSM2_MOD_PMUEPH1 3133 #define HSM2_MOD_PVTMP 3141 #define HSM2_MOD_PWVTH0 3142 #define HSM2_MOD_PMUESR1 3143 #define HSM2_MOD_PMUETMP 3195 #define HSM2_MOD_PSUB1 3151 #define HSM2_MOD_PSUB2 3152 #define HSM2_MOD_PSVDS 3286 #define HSM2_MOD_PSVBS 3284 #define HSM2_MOD_PSVGS 3283 #define HSM2_MOD_PNSTI 3225 #define HSM2_MOD_PWSTI 3226 #define HSM2_MOD_PSCSTI1 3229 #define HSM2_MOD_PSCSTI2 3230 #define HSM2_MOD_PVTHSTI 3232 #define HSM2_MOD_PMUESTI1 3235 #define HSM2_MOD_PMUESTI2 3236 #define HSM2_MOD_PMUESTI3 3237 #define HSM2_MOD_PNSUBPSTI1 3238 #define HSM2_MOD_PNSUBPSTI2 3239 #define HSM2_MOD_PNSUBPSTI3 3240 #define HSM2_MOD_PNSUBCSTI1 269 #define HSM2_MOD_PNSUBCSTI2 270 #define HSM2_MOD_PNSUBCSTI3 271 #define HSM2_MOD_PCGSO 3154 #define HSM2_MOD_PCGDO 3155 #define HSM2_MOD_PJS0 3157 #define HSM2_MOD_PJS0SW 3158 #define HSM2_MOD_PNJ 3159 #define HSM2_MOD_PCISBK 3172 #define HSM2_MOD_PCLM1 3191 #define HSM2_MOD_PCLM2 3192 #define HSM2_MOD_PCLM3 3193 #define HSM2_MOD_PWFC 3201 #define HSM2_MOD_PGIDL1 3205 #define HSM2_MOD_PGIDL2 3206 #define HSM2_MOD_PGLEAK1 3208 #define HSM2_MOD_PGLEAK2 3209 #define HSM2_MOD_PGLEAK3 3210 #define HSM2_MOD_PGLEAK6 3213 #define HSM2_MOD_PGLKSD1 3215 #define HSM2_MOD_PGLKSD2 3216 #define HSM2_MOD_PGLKB1 3218 #define HSM2_MOD_PGLKB2 3219 #define HSM2_MOD_PNFTRP 3258 #define HSM2_MOD_PNFALP 3259 #define HSM2_MOD_PVDIFFJ 3254 #define HSM2_MOD_PIBPC1 3404 #define HSM2_MOD_PIBPC2 3405 /* device questions */ #define HSM2_DNODE 341 #define HSM2_GNODE 342 #define HSM2_SNODE 343 #define HSM2_BNODE 344 #define HSM2_DNODEPRIME 345 #define HSM2_SNODEPRIME 346 #define HSM2_BNODEPRIME 395 #define HSM2_DBNODE 396 #define HSM2_SBNODE 397 #define HSM2_VBD 347 #define HSM2_VBS 348 #define HSM2_VGS 349 #define HSM2_VDS 350 #define HSM2_CD 351 #define HSM2_CBS 352 #define HSM2_CBD 353 #define HSM2_GM 354 #define HSM2_GDS 355 #define HSM2_GMBS 356 #define HSM2_GBD 357 #define HSM2_GBS 358 #define HSM2_QB 359 #define HSM2_CQB 360 #define HSM2_QG 361 #define HSM2_CQG 362 #define HSM2_QD 363 #define HSM2_CQD 364 #define HSM2_CGG 365 #define HSM2_CGD 366 #define HSM2_CGS 367 #define HSM2_CBG 368 #define HSM2_CAPBD 369 #define HSM2_CQBD 370 #define HSM2_CAPBS 371 #define HSM2_CQBS 372 #define HSM2_CDG 373 #define HSM2_CDD 374 #define HSM2_CDS 375 #define HSM2_VON 376 #define HSM2_VDSAT 377 #define HSM2_QBS 378 #define HSM2_QBD 379 #define HSM2_SOURCECONDUCT 380 #define HSM2_DRAINCONDUCT 381 #define HSM2_CBDB 382 #define HSM2_CBSB 383 #define HSM2_MOD_RBPB 389 #define HSM2_MOD_RBPD 390 #define HSM2_MOD_RBPS 391 #define HSM2_MOD_RBDB 392 #define HSM2_MOD_RBSB 393 #define HSM2_MOD_GBMIN 394 #define HSM2_ISUB 410 #define HSM2_IGIDL 411 #define HSM2_IGISL 412 #define HSM2_IGD 413 #define HSM2_IGS 414 #define HSM2_IGB 415 #define HSM2_CGSO 416 #define HSM2_CGBO 417 #define HSM2_CGDO 418 #define HSM2_MOD_TCJBD 92 #define HSM2_MOD_TCJBS 93 #define HSM2_MOD_TCJBDSW 94 #define HSM2_MOD_TCJBSSW 95 #define HSM2_MOD_TCJBDSWG 96 #define HSM2_MOD_TCJBSSWG 97 #define HSM2_MOD_VGS_MAX 4001 #define HSM2_MOD_VGD_MAX 4002 #define HSM2_MOD_VGB_MAX 4003 #define HSM2_MOD_VDS_MAX 4004 #define HSM2_MOD_VBS_MAX 4005 #define HSM2_MOD_VBD_MAX 4006 #define HSM2_MOD_VGSR_MAX 4007 #define HSM2_MOD_VGDR_MAX 4008 #define HSM2_MOD_VGBR_MAX 4009 #define HSM2_MOD_VBSR_MAX 4010 #define HSM2_MOD_VBDR_MAX 4011 #include "hsm2ext.h" /* #ifdef __STDC__ extern void HSM2evaluate(double,double,double,HSM2instance*,HSM2model*, double*,double*,double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, CKTcircuit*); #else extern void HSM2evaluate(); #endif */ #endif /*HSM2*/ tmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2eval_dep.h0000644000175000017500000023522313546075722023107 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM_HV ( VERSION : 2 SUBVERSION : 8 REVISION : 0 ) Model Parameter 'VERSION' : 2.80 FILE : hsm2eval_dep.h DATE : 2014.5.12 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HISIM_HV Distribution Statement and Copyright Notice" attached to HiSIM model. -----HISIM Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaims all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." Toshimasa Asahara, President, Hiroshima University Mitiko Miura-Mattausch, Professor, Hiroshima University Katsuhiro Shimohigashi, President&CEO, STARC June 2008 (revised October 2011) *************************************************************************/ { // Begin : hsm2eval_dep /* define local variavles */ int depmode ; double afact, afact2, afact3, bfact, cfact ; double W_bsub0, W_bsubL, W_s0, W_sL, W_sub0, W_subL, W_b0, W_bL, vthn ; double phi_s0_DEP = 0.0, phi_sL_DEP = 0.0 , Vbi_DEP ; double phi_s0_DEP_dVgs, phi_s0_DEP_dVbs, phi_s0_DEP_dVds ; double phi_sL_DEP_dVgs, phi_sL_DEP_dVbs, phi_sL_DEP_dVds ; double phi_j0_DEP, phi_jL_DEP, Psbmax, phi_b0_DEP_lim, phi_bL_DEP_lim ; double phi_jL_DEP_dVgs, phi_jL_DEP_dVds, phi_jL_DEP_dVbs ; double Vgp0, Vgp1, Vgp0old, phi_j0_DEP_old, phi_jL_DEP_old, phi_b0_DEP_old, phi_bL_DEP_old, phi_s0_DEP_old, phi_sL_DEP_old ; double phi_j0_DEP_acc, phi_jL_DEP_acc ; double Q_s0, Q_sL = 0.0 ; double Q_s0_dVgs, Q_sL_dVgs = 0.0, Q_s0_dVds, Q_sL_dVds = 0.0, Q_s0_dVbs, Q_sL_dVbs = 0.0 ; double Q_sub0, Q_subL, Q_sub0_dVgs, Q_subL_dVgs, Q_sub0_dVds, Q_subL_dVds, Q_sub0_dVbs, Q_subL_dVbs ; double Qn_res0, Qn_res0_dVgs, Qn_res0_dVds, Qn_res0_dVbs ; double y1, y2, dety ; double y11, y12 ; double y21, y22 ; double y1_dVgs, y1_dVds, y1_dVbs ; double y2_dVgs, y2_dVds, y2_dVbs ; double rev11 = 0.0, rev12 = 0.0 ; double rev21 = 0.0, rev22 = 0.0 ; double phi_b0_DEP_ini ; double y0, dydPsm ; double W_b0_dVgs, W_b0_dVds, W_b0_dVbs ; double W_res0 ; double W_s0_dVgs, W_s0_dVds, W_s0_dVbs ; double phi_b0_DEP, Q_b0_dep, Q_sub0_dep ; double phi_b0_DEP_dVgs, phi_b0_DEP_dVds, phi_b0_DEP_dVbs ; double phi_j0_DEP_dVgs, phi_j0_DEP_dVds, phi_j0_DEP_dVbs ; double Q_b0_dep_dVgs, Q_b0_dep_dVds, Q_b0_dep_dVbs ; double Q_sub0_dep_dVgs, Q_sub0_dep_dVds, Q_sub0_dep_dVbs ; double phi_bL_DEP, Q_bL_dep, Q_subL_dep ; double phi_bL_DEP_dVgs, phi_bL_DEP_dVds, phi_bL_DEP_dVbs ; double Q_bL_dep_dVgs, Q_bL_dep_dVds, Q_bL_dep_dVbs ; double Q_subL_dep_dVgs, Q_subL_dep_dVds, Q_subL_dep_dVbs ; double q_Ndepm_esi, Idd_drift,Idd_diffu ; double Qn_bac0 ; double Qn_bac0_dVgs, Qn_bac0_dVds, Qn_bac0_dVbs ; double Mu_res, Mu_bac ; double Mu_res_dVgs, Mu_res_dVds, Mu_res_dVbs ; double Mu_bac_dVgs, Mu_bac_dVds, Mu_bac_dVbs ; double Q_n0_cur, Q_nL_cur ; double Q_n0_cur_dVgs, Q_n0_cur_dVds, Q_n0_cur_dVbs ; double Q_nL_cur_dVgs, Q_nL_cur_dVds, Q_nL_cur_dVbs ; double Q_s0_dep, Q_sL_dep ; double Q_s0_dep_dVgs, Q_s0_dep_dVds, Q_s0_dep_dVbs ; double Q_sL_dep_dVgs, Q_sL_dep_dVds, Q_sL_dep_dVbs ; double sm_delta ; double phib_ref, phib_ref_dPs, phib_ref_dPd ; double Q_s0_dPs, Q_sL_dPs, Q_s0_dPb, Q_sL_dPb ; double Q_b0_dep_dPb, Q_bL_dep_dPb, Q_b0_dep_dPd, Q_bL_dep_dPd, Q_sub0_dep_dPd, Q_subL_dep_dPd ; double phi_j0_DEP_dPb, phi_jL_DEP_dPb ; double NdepmpNsub_inv1, NdepmpNsub ; double Q_n0, Q_n0_dVgs, Q_n0_dVds, Q_n0_dVbs ; double Q_nL, Q_nL_dVgs, Q_nL_dVds, Q_nL_dVbs ; double phi_s0_DEP_ini, phi_sL_DEP_ini ; double C_QE2, C_ESI2, Tn2 ; double Ndepm2, q_Ndepm ; double C_2ESIpq_Ndepm, C_2ESIpq_Ndepm_inv , C_2ESI_q_Ndepm ; double C_2ESIpq_Nsub , C_2ESIpq_Nsub_inv ; double ps_conv3 , ps_conv23 ; double Ids_res, Ids_bac, Edri ; double Ids_res_dVgs, Ids_res_dVds, Ids_res_dVbs ; double Ids_bac_dVgs, Ids_bac_dVds, Ids_bac_dVbs ; double Edri_dVgs, Edri_dVds, Edri_dVbs ; double T0_dVg, T0_dVb,T0_dVd ; double T1_dVgs, T1_dVds, T1_dVbs ; double T2_dVgs, T2_dVds, T2_dVbs ; double T3_dVgs, T3_dVds, T3_dVbs ; double T4_dVgs, T4_dVds, T4_dVbs ; double T5_dVgs, T5_dVds, T5_dVbs ; double Vgpp ; double Vgpp_dVgs, Vgpp_dVds, Vgpp_dVbs ; double Vdseff0, Vdseff0_dVgs, Vdseff0_dVds, Vdseff0_dVbs ; double phib_ref_dVgs, phib_ref_dVds, phib_ref_dVbs ; double Qn_delta ; double Qn_drift, Qn_drift_dVgs, Qn_drift_dVds, Qn_drift_dVbs ; double Ey_suf, Ey_suf_dVgs, Ey_suf_dVds, Ey_suf_dVbs ; double DEPQFN1 = 2.0 ; double DEPQFN3 = 0.3 ; double DEPQFN_dlt = 2.0 ; double Ps_delta = 0.06 ; double Ps_delta0 = 0.08 ; /*--------------------------------------* * CeilingPow with derivatives for delta *-----------------*/ #define Fn_SL_CP3( y , x , xmin , delta , pw , dx , dxmin, ddelta) { \ if(x < xmin + delta && delta >= 0.0) { \ double TMF0, TMF1; \ TMF1 = xmin + delta - x ; \ Fn_CP2( TMF0 , TMF1 , delta , pw , dx , ddelta ) \ y = xmin + delta - TMF0 ; \ dx = dx ; \ dxmin = 1.0-dx ; \ ddelta = 1.0-dx-ddelta; \ } else { \ y = x ; \ dx = 1.0 ; \ dxmin = 0.0 ; \ ddelta = 0.0 ; \ } \ } // Constants Vbi_DEP = here->HSM2_Vbipn ; q_Ndepm = C_QE * here->HSM2_ndepm ; Ndepm2 = here->HSM2_ndepm * here->HSM2_ndepm ; q_Ndepm_esi = C_QE * here->HSM2_ndepm * C_ESI ; q_Nsub = C_QE * here->HSM2_nsub ; C_QE2 = C_QE * C_QE ; C_ESI2 = C_ESI * C_ESI ; Tn2 = model->HSM2_tndep * model->HSM2_tndep ; C_2ESIpq_Ndepm = 2.0 * C_ESI/q_Ndepm ; C_2ESIpq_Ndepm_inv = q_Ndepm / (2.0 * C_ESI) ; C_2ESI_q_Ndepm = 2.0 * C_ESI * q_Ndepm ; C_2ESIpq_Nsub = 2.0 * C_ESI / q_Nsub ; C_2ESIpq_Nsub_inv = q_Nsub / (2.0 * C_ESI) ; NdepmpNsub = here->HSM2_ndepm / here->HSM2_nsub ; NdepmpNsub_inv1 = 1.0 / (1.0 + NdepmpNsub ) ; ps_conv3 = ps_conv * 1000.0 ; ps_conv23 = ps_conv2 * 1000.0 ; here->HSM2_qnsub_esi = q_Ndepm_esi ; //---------------------------------------------------* // depletion MOS mode //------------------// Vbsc = Vbs ; Vbsc_dVbse = 1.0 ; /*---------------------------------------------------* * initial potential phi_s0_DEP,phi_b0_DEP,phi_j0_DEP calculated. *------------------*/ Vgp = Vgp + epsm10 * 1.0e7 ; afact = Cox * Cox / here->HSM2_cnst0 / here->HSM2_cnst0 ; afact2 = afact / here->HSM2_nin / here->HSM2_nin * Ndepm2 ; W_bsub0 = sqrt(2.0e0 * C_ESI / C_QE * here->HSM2_nsub / (here->HSM2_nsub + here->HSM2_ndepm) / here->HSM2_ndepm * ( - Vbsc + Vbi_DEP)) ; if( W_bsub0 > model->HSM2_tndep ) { Vgp0 = 0.0; W_b0 = model->HSM2_tndep ; phi_b0_DEP = 0.0 ; phi_j0_DEP = phi_b0_DEP - C_2ESIpq_Ndepm_inv * W_b0 * W_b0 ; phi_b0_DEP_lim = 0.0 ; Vgp0old = Vgp0 ; phi_j0_DEP_old = phi_j0_DEP ; for ( lp_s0 = 1 ; lp_s0 <= lp_se_max + 1 ; lp_s0 ++ ) { W_b0 = sqrt(C_2ESIpq_Ndepm * (phi_b0_DEP - phi_j0_DEP) ) ; Fn_SU_CP( W_b0 , W_b0 , model->HSM2_tndep , 1e-8, 2 , T0 ) W_sub0 = sqrt(C_2ESIpq_Nsub * (phi_j0_DEP - Vbsc + Vbi_DEP) ) ; Q_b0_dep = W_b0 * q_Ndepm ; Q_b0_dep_dPd = - C_ESI / W_b0 * T0 ; Q_sub0_dep = - W_sub0 * q_Nsub ; Q_sub0_dep_dPd = - C_ESI / W_sub0 ; y1 = Cox * (Vgp0 - phi_b0_DEP) + Q_b0_dep + Q_sub0_dep ; y11 = Cox ; y12 = Q_b0_dep_dPd + Q_sub0_dep_dPd ; y2 = phi_j0_DEP - NdepmpNsub_inv1 * (NdepmpNsub * phi_b0_DEP + Vbsc - Vbi_DEP) ; y21 = 0.0 ; y22 = 1.0 ; dety = y11 * y22 - y21 * y12; rev11 = (y22) / dety ; rev12 = ( - y12) / dety ; rev21 = ( - y21) / dety ; rev22 = (y11) / dety ; if( fabs( rev11 * y1 + rev12 * y2 ) > 0.5 ) { Vgp0 = Vgp0 - 0.5 * Fn_Sgn( rev11 * y1 + rev12 * y2 ) ; phi_j0_DEP = phi_j0_DEP - 0.5 * Fn_Sgn( rev21 * y1 + rev22 * y2 ) ; } else { Vgp0 = Vgp0 - ( rev11 * y1 + rev12 * y2 ) ; phi_j0_DEP = phi_j0_DEP - ( rev21 * y1 + rev22 * y2 ) ; } if( fabs(Vgp0 - Vgp0old) <= ps_conv && fabs(phi_j0_DEP - phi_j0_DEP_old) <= ps_conv ) lp_s0=lp_se_max + 1 ; Vgp0old = Vgp0 ; phi_j0_DEP_old = phi_j0_DEP ; } phi_j0_DEP_acc = phi_j0_DEP ; W_sub0 = model->HSM2_tndep * NdepmpNsub ; phi_j0_DEP = C_2ESIpq_Nsub_inv * W_sub0 * W_sub0 + Vbsc - Vbi_DEP ; phi_b0_DEP = phi_j0_DEP + C_2ESIpq_Ndepm_inv * Tn2 ; phi_s0_DEP = phi_b0_DEP ; Psbmax = phi_b0_DEP ; Vgp1 = phi_b0_DEP ; if( Vgp > Vgp0 ) { depmode = 1 ; } else if(Vgp > Vgp1 ) { depmode = 3 ; } else { depmode = 2 ; } } else { Vgp0 = 0.0 ; Vgp1 = Vgp0 ; Psbmax = 0.0 ; phi_b0_DEP_lim = Vgp0 ; W_b0 = W_bsub0 ; W_sub0 = W_b0 * NdepmpNsub ; phi_j0_DEP = C_2ESIpq_Nsub_inv * W_sub0 * W_sub0 + Vbsc - Vbi_DEP ; phi_b0_DEP = C_2ESIpq_Ndepm_inv * W_b0 * W_b0 + phi_j0_DEP ; phi_j0_DEP_acc = phi_j0_DEP ; if( Vgp > Vgp0 ) { depmode = 1 ; } else { depmode = 2 ; } } T1 = C_2ESI_q_Ndepm * ( Psbmax - ( - here->HSM2_Pb2n + Vbsc)) ; if ( T1 > 0.0 ) { vthn = - here->HSM2_Pb2n + Vbsc - sqrt(T1) / Cox ; } else { vthn = - here->HSM2_Pb2n + Vbsc ; } /* primary value */ if( Vgp > Vgp0 ) { /* accumulation region */ phi_j0_DEP = phi_j0_DEP_acc ; phi_b0_DEP = 0.0 ; phi_s0_DEP_ini = log(afact * Vgp * Vgp) / (beta + 2.0 / Vgp) + phi_b0_DEP ; if( phi_s0_DEP_ini < phi_b0_DEP_lim + ps_conv23 ) phi_s0_DEP_ini = phi_b0_DEP_lim + ps_conv23 ; } else if( Vgp > Vgp1 ) { /* depletion region */ phi_s0_DEP_ini = phi_s0_DEP ; } else { /* depletion and inversion region */ if( Vgp > vthn ) { /* depletion */ bfact = - 2.0 * afact * Vgp + beta ; cfact = afact * Vgp * Vgp - beta * phi_b0_DEP ; phi_b0_DEP_old = phi_b0_DEP ; phi_s0_DEP_ini = ( - bfact + sqrt(bfact * bfact - 4.0 * afact * cfact)) / 2.0 / afact ; if( phi_s0_DEP_ini > Psbmax - ps_conv3 ) phi_s0_DEP_ini = Psbmax - ps_conv3 ; W_s0 = sqrt(C_2ESIpq_Ndepm * (phi_b0_DEP - phi_s0_DEP_ini) ) ; W_b0 = sqrt(C_2ESIpq_Ndepm * (phi_b0_DEP - phi_j0_DEP) ) ; if( W_s0 + W_b0 > model->HSM2_tndep ) { for ( lp_s0 = 1 ; lp_s0 <= lp_se_max + 1 ; lp_s0 ++ ) { y0 = W_s0 + W_b0 - model->HSM2_tndep ; dydPsm = C_ESI / q_Ndepm / W_s0 + C_ESI / q_Ndepm * ( 1.0 - (here->HSM2_ndepm / here->HSM2_nsub) / ( 1.0 + (NdepmpNsub))) / W_b0 ; if( fabs(y0 / dydPsm) > 0.5 ) { phi_b0_DEP = phi_b0_DEP - 0.5 * Fn_Sgn(y0 / dydPsm) ; } else { phi_b0_DEP = phi_b0_DEP - y0 / dydPsm ; } if( (phi_b0_DEP - Vbsc + Vbi_DEP) < epsm10 ) phi_b0_DEP=Vbsc - Vbi_DEP + epsm10 ; cfact = afact * Vgp * Vgp - beta * phi_b0_DEP ; T1 = bfact * bfact - 4.0 * afact * cfact ; if( T1 > 0.0 ) { phi_s0_DEP_ini = ( - bfact + sqrt(T1)) / 2.0 / afact ; } else { phi_s0_DEP_ini = ( - bfact) / 2.0 / afact ; } if( phi_s0_DEP_ini > Psbmax ) phi_s0_DEP_ini = Psbmax ; if( phi_s0_DEP_ini > phi_b0_DEP ) { phi_s0_DEP_ini = phi_b0_DEP - ps_conv23 ; lp_s0=lp_se_max + 1 ; } W_s0 = sqrt(C_2ESIpq_Ndepm * (phi_b0_DEP - phi_s0_DEP_ini) ) ; phi_j0_DEP = ( NdepmpNsub * phi_b0_DEP + Vbsc - Vbi_DEP) / (1.0 + NdepmpNsub) ; W_b0 = sqrt(C_2ESIpq_Ndepm * (phi_b0_DEP - phi_j0_DEP) ) ; if( fabs(phi_b0_DEP - phi_b0_DEP_old) <= 1.0e-8 ) lp_s0=lp_se_max + 1 ; phi_b0_DEP_old = phi_b0_DEP ; } } } else { afact3 = afact2 / exp(beta * Vbsc) ; phi_b0_DEP_old = phi_b0_DEP ; phi_s0_DEP_ini = log(afact3 * Vgp * Vgp) / ( - beta + 2.0 / Vgp) ; W_s0 = sqrt(C_2ESIpq_Ndepm * (phi_b0_DEP - phi_s0_DEP_ini) ) ; W_b0 = sqrt(C_2ESIpq_Ndepm * (phi_b0_DEP - phi_j0_DEP) ) ; if( W_s0 + W_b0 > model->HSM2_tndep ) { for ( lp_s0 = 1 ; lp_s0 <= lp_s0_max + 1 ; lp_s0 ++ ) { y0 = W_s0 + W_b0 - model->HSM2_tndep ; dydPsm = C_ESI / q_Ndepm / W_s0 + C_ESI / q_Ndepm * ( 1.0 - (here->HSM2_ndepm / here->HSM2_nsub) / ( 1.0 + (NdepmpNsub))) / W_b0 ; if( fabs(y0 / dydPsm) > 0.5 ) { phi_b0_DEP = phi_b0_DEP - 0.5 * Fn_Sgn(y0 / dydPsm) ; } else { phi_b0_DEP = phi_b0_DEP - y0 / dydPsm ; } if( (phi_b0_DEP - Vbsc + Vbi_DEP) < epsm10 ) phi_b0_DEP=Vbsc - Vbi_DEP + epsm10 ; W_s0 = sqrt(C_2ESIpq_Ndepm * (phi_b0_DEP - phi_s0_DEP_ini) ) ; phi_j0_DEP = ( NdepmpNsub * phi_b0_DEP + Vbsc - Vbi_DEP) / (1.0 + NdepmpNsub) ; W_b0 = sqrt(C_2ESIpq_Ndepm * (phi_b0_DEP - phi_j0_DEP) ) ; if( fabs(phi_b0_DEP - phi_b0_DEP_old) <= 1.0e-5 ) lp_s0=lp_s0_max + 1 ; phi_b0_DEP_old = phi_b0_DEP ; } } } // end of phi_b0_DEP loop // } phi_b0_DEP_ini = phi_b0_DEP ; /* */ /* solve poisson at source side */ /* */ sm_delta = 0.12 ; flg_conv = 0 ; phi_s0_DEP = phi_s0_DEP_ini ; phi_b0_DEP = phi_b0_DEP_ini ; phi_s0_DEP_old = phi_s0_DEP ; phi_b0_DEP_old = phi_b0_DEP ; for ( lp_s0 = 1 ; lp_s0 <= lp_se_max + 1 ; lp_s0 ++ ) { phi_j0_DEP = NdepmpNsub_inv1 * (NdepmpNsub * phi_b0_DEP + Vbsc - Vbi_DEP) ; phi_j0_DEP_dPb = NdepmpNsub_inv1 * NdepmpNsub ; T1 = phi_b0_DEP - phi_j0_DEP ; Fn_SL_CP( T2 , T1 , 0.0 , 0.1, 2 , T7 ) W_b0 = sqrt(C_2ESIpq_Ndepm * (T2) ) ; Fn_SU_CP( W_b0 , W_b0 , model->HSM2_tndep, 1e-8, 2 , T8 ) W_sub0 = sqrt(C_2ESIpq_Nsub * (phi_j0_DEP - Vbsc + Vbi_DEP) ) ; Q_b0_dep = W_b0 * q_Ndepm ; Q_b0_dep_dPb = C_ESI / W_b0 * T7 * T8 ; Q_b0_dep_dPd = - C_ESI / W_b0 * T7 * T8 ; Q_sub0_dep = - W_sub0 * q_Nsub ; Q_sub0_dep_dPd = - C_ESI / W_sub0 ; T10 = 8.0 * q_Ndepm_esi * Tn2 ; phib_ref = (4.0 * phi_j0_DEP * phi_j0_DEP * C_ESI2 - 8.0 * phi_j0_DEP * C_ESI2 * phi_s0_DEP + 4.0 * C_ESI2 * phi_s0_DEP * phi_s0_DEP + 4.0 * phi_j0_DEP * q_Ndepm_esi * Tn2 + 4.0 * phi_s0_DEP * q_Ndepm_esi * Tn2 + Ndepm2 * C_QE2 * Tn2 * Tn2 ) / T10 ; phib_ref_dPs = ( - 8.0 * phi_j0_DEP * C_ESI2 + 8.0 * C_ESI2 * phi_s0_DEP + 4.0 * q_Ndepm_esi * Tn2 ) / T10 ; phib_ref_dPd = ( 8.0 * phi_j0_DEP * C_ESI2 - 8.0 * C_ESI2 * phi_s0_DEP + 4.0 * q_Ndepm_esi * Tn2 ) / T10 ; T1 = beta * (phi_s0_DEP - phi_b0_DEP) ; T2 = exp(T1) ; if( phi_s0_DEP >= phi_b0_DEP ) { Q_s0 = - here->HSM2_cnst0 * sqrt(T2 - 1.0 - T1 + 1e-15) ; Q_s0_dPs = 0.5 * here->HSM2_cnst0 * here->HSM2_cnst0 / Q_s0 * (beta * T2 - beta ) ; Q_s0_dPb = - Q_s0_dPs ; } else { T3 = exp( - beta * (phi_s0_DEP - Vbsc)) ; T4 = exp( - beta * (phi_b0_DEP - Vbsc)) ; Q_s0 = here->HSM2_cnst0 * sqrt(T2 - 1.0 - T1 + 1e-15 + here->HSM2_cnst1 * (T3 - T4) ) ; T5 = 0.5 * here->HSM2_cnst0 * here->HSM2_cnst0 / Q_s0 ; Q_s0_dPs = T5 * (beta * T2 - beta + here->HSM2_cnst1 * ( - beta * T3) ) ; Q_s0_dPb = T5 * ( - beta * T2 + beta + here->HSM2_cnst1 * beta * T4 ) ; } Fn_SU_CP( T1 , phib_ref , phi_b0_DEP_lim , sm_delta, 4 , T9 ) y1 = phi_b0_DEP - T1 ; y11 = - phib_ref_dPs * T9 ; y12 = 1.0 - phib_ref_dPd * phi_j0_DEP_dPb * T9 ; y2 = Cox * (Vgp - phi_s0_DEP) + Q_s0 + Q_b0_dep + Q_sub0_dep ; y21 = - Cox + Q_s0_dPs ; y22 = Q_s0_dPb + Q_b0_dep_dPb + Q_b0_dep_dPd * phi_j0_DEP_dPb + Q_sub0_dep_dPd * phi_j0_DEP_dPb ; dety = y11 * y22 - y21 * y12; rev11 = (y22) / dety ; rev12 = ( - y12) / dety ; rev21 = ( - y21) / dety ; rev22 = (y11) / dety ; if( fabs( rev21 * y1 + rev22 * y2 ) > 0.5 ) { phi_s0_DEP = phi_s0_DEP - 0.5 * Fn_Sgn( rev11 * y1 + rev12 * y2 ) ; phi_b0_DEP = phi_b0_DEP - 0.5 * Fn_Sgn( rev21 * y1 + rev22 * y2 ) ; } else { phi_s0_DEP = phi_s0_DEP - ( rev11 * y1 + rev12 * y2 ) ; phi_b0_DEP = phi_b0_DEP - ( rev21 * y1 + rev22 * y2 ) ; } if( fabs(phi_s0_DEP - phi_s0_DEP_old) <= ps_conv && fabs(phi_b0_DEP - phi_b0_DEP_old) <= ps_conv ) { lp_s0=lp_se_max + 1 ; flg_conv = 1 ; } phi_s0_DEP_old = phi_s0_DEP ; phi_b0_DEP_old = phi_b0_DEP ; } if( flg_conv == 0 ) { printf( "*** warning(HiSIM(%s)): Went Over Iteration Maximum(Ps0)\n",model->HSM2modName ) ; printf( " Vbse = %7.3f Vdse = %7.3f Vgse = %7.3f\n" ,Vbse , Vdse , Vgse ) ; } /* caluculate derivative */ y1_dVgs = 0.0 ; y1_dVds = 0.0 ; y1_dVbs = - (8.0 * phi_j0_DEP * C_ESI2 - 8.0 * C_ESI2 * phi_s0_DEP + 4.0 * q_Ndepm_esi * Tn2) / T10 * T9 * NdepmpNsub_inv1 * Vbsc_dVbse ; Q_b0_dep_dVbs = - C_ESI / W_b0 * T7 * T8 * NdepmpNsub_inv1 * Vbsc_dVbse ; Q_sub0_dep_dVbs = - C_ESI / W_sub0 * (NdepmpNsub_inv1 * Vbsc_dVbse - Vbsc_dVbse) ; T1 = beta * (phi_s0_DEP - phi_b0_DEP) ; T2 = exp(T1) ; if( phi_s0_DEP >= phi_b0_DEP ) { Q_s0_dVbs = 0.0 ; } else { T3 = exp( - beta * (phi_s0_DEP - Vbsc)) ; T4 = exp( - beta * (phi_b0_DEP - Vbsc)) ; T5 = sqrt(T2 - 1.0 - T1 + 1e-15 + here->HSM2_cnst1 * (T3 - T4)) ; Q_s0_dVbs = here->HSM2_cnst0 / 2.0 / T5 * (here->HSM2_cnst1 * (beta * T3 * Vbsc_dVbse - beta * T4 * Vbsc_dVbse) ) ; } y2_dVgs = Cox_dVg * (Vgp - phi_s0_DEP) + Cox * Vgp_dVgs ; y2_dVds = Cox_dVd * (Vgp - phi_s0_DEP) + Cox * Vgp_dVds ; y2_dVbs = Cox_dVb * (Vgp - phi_s0_DEP) + Cox * Vgp_dVbs + Q_s0_dVbs + Q_b0_dep_dVbs + Q_sub0_dep_dVbs ; phi_s0_DEP_dVgs = - ( rev11 * y1_dVgs + rev12 * y2_dVgs ) ; phi_s0_DEP_dVds = - ( rev11 * y1_dVds + rev12 * y2_dVds ) ; phi_s0_DEP_dVbs = - ( rev11 * y1_dVbs + rev12 * y2_dVbs ) ; phi_b0_DEP_dVgs = - ( rev21 * y1_dVgs + rev22 * y2_dVgs ) ; phi_b0_DEP_dVds = - ( rev21 * y1_dVds + rev22 * y2_dVds ) ; phi_b0_DEP_dVbs = - ( rev21 * y1_dVbs + rev22 * y2_dVbs ) ; if( W_bsub0 > model->HSM2_tndep && depmode !=2 ) { Fn_SU_CP2(phi_b0_DEP , phi_b0_DEP , phi_s0_DEP , 0.04, 2 , T1, T2 ) // HV_dlt=0.02 phi_b0_DEP_dVgs = phi_b0_DEP_dVgs * T1 + phi_s0_DEP_dVgs * T2 ; phi_b0_DEP_dVds = phi_b0_DEP_dVds * T1 + phi_s0_DEP_dVds * T2 ; phi_b0_DEP_dVbs = phi_b0_DEP_dVbs * T1 + phi_s0_DEP_dVbs * T2 ; } phi_j0_DEP = NdepmpNsub_inv1 * (NdepmpNsub * phi_b0_DEP + Vbsc - Vbi_DEP) ; phi_j0_DEP_dVgs = NdepmpNsub_inv1 * NdepmpNsub * phi_b0_DEP_dVgs ; phi_j0_DEP_dVds = NdepmpNsub_inv1 * NdepmpNsub * phi_b0_DEP_dVds ; phi_j0_DEP_dVbs = NdepmpNsub_inv1 * NdepmpNsub * phi_b0_DEP_dVbs + NdepmpNsub_inv1 * Vbsc_dVbse ; phib_ref = (4.0 * phi_j0_DEP * phi_j0_DEP * C_ESI2 - 8.0 * phi_j0_DEP * C_ESI2 * phi_s0_DEP + 4.0 * C_ESI2 * phi_s0_DEP * phi_s0_DEP + 4.0 * phi_j0_DEP * q_Ndepm_esi * Tn2 + 4.0 * phi_s0_DEP * q_Ndepm_esi * Tn2 + Ndepm2 * C_QE2 * Tn2 * Tn2 ) / T10 ; phib_ref_dVgs = ( 8.0 * phi_j0_DEP * phi_j0_DEP_dVgs * C_ESI2 - 8.0 * phi_j0_DEP_dVgs * C_ESI2 * phi_s0_DEP - 8.0 * phi_j0_DEP * C_ESI2 * phi_s0_DEP_dVgs + 8.0 * C_ESI2 * phi_s0_DEP * phi_s0_DEP_dVgs + 4.0 * phi_j0_DEP_dVgs * q_Ndepm_esi * Tn2 + 4.0 * phi_s0_DEP_dVgs * q_Ndepm_esi * Tn2 ) / T10 ; phib_ref_dVds = ( 8.0 * phi_j0_DEP * phi_j0_DEP_dVds * C_ESI2 - 8.0 * phi_j0_DEP_dVds * C_ESI2 * phi_s0_DEP - 8.0 * phi_j0_DEP * C_ESI2 * phi_s0_DEP_dVds + 8.0 * C_ESI2 * phi_s0_DEP * phi_s0_DEP_dVds + 4.0 * phi_j0_DEP_dVds * q_Ndepm_esi * Tn2 + 4.0 * phi_s0_DEP_dVds * q_Ndepm_esi * Tn2 ) / T10 ; phib_ref_dVbs = ( 8.0 * phi_j0_DEP * phi_j0_DEP_dVbs * C_ESI2 - 8.0 * phi_j0_DEP_dVbs * C_ESI2 * phi_s0_DEP - 8.0 * phi_j0_DEP * C_ESI2 * phi_s0_DEP_dVbs + 8.0 * C_ESI2 * phi_s0_DEP * phi_s0_DEP_dVbs + 4.0 * phi_j0_DEP_dVbs * q_Ndepm_esi * Tn2 + 4.0 * phi_s0_DEP_dVbs * q_Ndepm_esi * Tn2 ) / T10 ; T1 = beta * (phi_s0_DEP - phi_b0_DEP) ; T1_dVgs = beta * (phi_s0_DEP_dVgs - phi_b0_DEP_dVgs) ; T1_dVds = beta * (phi_s0_DEP_dVds - phi_b0_DEP_dVds) ; T1_dVbs = beta * (phi_s0_DEP_dVbs - phi_b0_DEP_dVbs) ; T2 = exp(T1) ; T2_dVgs = T1_dVgs * T2 ; T2_dVds = T1_dVds * T2 ; T2_dVbs = T1_dVbs * T2 ; if( phi_s0_DEP >= phi_b0_DEP ) { T3 = sqrt(T2 - 1.0e0 - T1 + 1e-15 ) ; T3_dVgs = (T2_dVgs - T1_dVgs) / 2.0 / T3 ; T3_dVds = (T2_dVds - T1_dVds) / 2.0 / T3 ; T3_dVbs = (T2_dVbs - T1_dVbs) / 2.0 / T3 ; Q_s0 = - here->HSM2_cnst0 * T3 ; Q_s0_dep = 0.0 ; Q_sub0 = 0.0 ; W_b0 = sqrt(C_2ESIpq_Ndepm * (phi_b0_DEP - phi_j0_DEP) ) ; Fn_SU_CP( T9 , W_b0 , model->HSM2_tndep, 5e-8, 2 , T4 ) // HV_dlt=1e-8 W_sub0 = sqrt(C_2ESIpq_Nsub * (phi_j0_DEP - Vbsc + Vbi_DEP) ) ; Q_b0_dep = T9 * q_Ndepm ; Q_sub0_dep = - W_sub0 * q_Nsub ; /* derivative */ Q_s0_dVgs = - here->HSM2_cnst0 * T3_dVgs ; Q_s0_dVds = - here->HSM2_cnst0 * T3_dVds ; Q_s0_dVbs = - here->HSM2_cnst0 * T3_dVbs ; Q_n0 = Q_s0 ; Q_n0_dVgs = Q_s0_dVgs ; Q_n0_dVds = Q_s0_dVds ; Q_n0_dVbs = Q_s0_dVbs ; Q_b0_dep_dVgs = C_ESI / W_b0 * (phi_b0_DEP_dVgs - phi_j0_DEP_dVgs) * T4 ; Q_b0_dep_dVds = C_ESI / W_b0 * (phi_b0_DEP_dVds - phi_j0_DEP_dVds) * T4 ; Q_b0_dep_dVbs = C_ESI / W_b0 * (phi_b0_DEP_dVbs - phi_j0_DEP_dVbs) * T4 ; Q_sub0_dep_dVgs = - C_ESI / W_sub0 * phi_j0_DEP_dVgs ; Q_sub0_dep_dVds = - C_ESI / W_sub0 * phi_j0_DEP_dVds ; Q_sub0_dep_dVbs = - C_ESI / W_sub0 * (phi_j0_DEP_dVbs - Vbsc_dVbse) ; Q_sub0_dVgs = 0.0 ; Q_sub0_dVds = 0.0 ; Q_sub0_dVbs = 0.0 ; Q_s0_dep_dVgs = 0.0 ; Q_s0_dep_dVds = 0.0 ; Q_s0_dep_dVbs = 0.0 ; } else { T3 = exp( - beta * (phi_s0_DEP - Vbsc)) ; T4 = exp( - beta * (phi_b0_DEP - Vbsc)) ; T5 = sqrt(T2 - 1.0 - T1 + here->HSM2_cnst1 * (T3 - T4) + 1e-15) ; Q_s0 = here->HSM2_cnst0 * T5 ; T3_dVgs = - beta * T3 * phi_s0_DEP_dVgs ; T3_dVds = - beta * T3 * phi_s0_DEP_dVds ; T3_dVbs = - beta * T3 * (phi_s0_DEP_dVbs - Vbsc_dVbse) ; T4_dVgs = - beta * T4 * phi_b0_DEP_dVgs ; T4_dVds = - beta * T4 * phi_b0_DEP_dVds ; T4_dVbs = - beta * T4 * (phi_b0_DEP_dVbs - Vbsc_dVbse) ; T5_dVgs = (T2_dVgs - T1_dVgs + here->HSM2_cnst1 * (T3_dVgs - T4_dVgs)) / 2.0 / T5 ; T5_dVds = (T2_dVds - T1_dVds + here->HSM2_cnst1 * (T3_dVds - T4_dVds)) / 2.0 / T5 ; T5_dVbs = (T2_dVbs - T1_dVbs + here->HSM2_cnst1 * (T3_dVbs - T4_dVbs)) / 2.0 / T5 ; Q_s0_dVgs = here->HSM2_cnst0 * T5_dVgs ; Q_s0_dVds = here->HSM2_cnst0 * T5_dVds ; Q_s0_dVbs = here->HSM2_cnst0 * T5_dVbs ; if( W_bsub0 > model->HSM2_tndep && depmode !=2 ) { Q_sub0 = 0.0 ; Q_s0_dep = 0.0 ; Q_sub0_dVgs = 0.0 ; Q_sub0_dVds = 0.0 ; Q_sub0_dVbs = 0.0 ; Q_s0_dep_dVgs = 0.0 ; Q_s0_dep_dVds = 0.0 ; Q_s0_dep_dVbs = 0.0 ; } else { T3 = exp( - beta * (phi_s0_DEP - Vbsc)) ; T4 = exp( - beta * (phi_b0_DEP - Vbsc)) ; T5 = sqrt( - T1 + here->HSM2_cnst1 * (T3 - T4)) ; Q_sub0 = here->HSM2_cnst0 * T5 - here->HSM2_cnst0 * sqrt( - T1) ; T6 = sqrt(T2 - 1.0e0 - T1 + 1e-15) ; Q_s0_dep = here->HSM2_cnst0 * T6 ; Q_sub0_dVgs = here->HSM2_cnst0 / 2.0 / T5 * ( - beta * (phi_s0_DEP_dVgs - phi_b0_DEP_dVgs) + here->HSM2_cnst1 * ( - beta * T3 * phi_s0_DEP_dVgs + beta * T4 * phi_b0_DEP_dVgs)) - here->HSM2_cnst0 / 2.0 / sqrt( - T1) * ( - beta * (phi_s0_DEP_dVgs - phi_b0_DEP_dVgs)) ; Q_sub0_dVds = here->HSM2_cnst0 / 2.0 / T5 * ( - beta * (phi_s0_DEP_dVds - phi_b0_DEP_dVds) + here->HSM2_cnst1 * ( - beta * T3 * phi_s0_DEP_dVds + beta * T4 * phi_b0_DEP_dVds)) - here->HSM2_cnst0 / 2.0 / sqrt( - T1) * ( - beta * (phi_s0_DEP_dVds - phi_b0_DEP_dVds)) ; Q_sub0_dVbs = here->HSM2_cnst0 / 2.0 / T5 * ( - beta * (phi_s0_DEP_dVbs - phi_b0_DEP_dVbs) + here->HSM2_cnst1 * ( - beta * T3 * (phi_s0_DEP_dVbs - Vbsc_dVbse) + beta * T4 * (phi_b0_DEP_dVbs - Vbsc_dVbse))) - here->HSM2_cnst0 / 2.0 / sqrt( - T1) * ( - beta * (phi_s0_DEP_dVbs - phi_b0_DEP_dVbs)) ; Q_s0_dep_dVgs = here->HSM2_cnst0 / 2.0 / T6 * beta * (phi_s0_DEP_dVgs - phi_b0_DEP_dVgs) * (T2 - 1) ; Q_s0_dep_dVds = here->HSM2_cnst0 / 2.0 / T6 * beta * (phi_s0_DEP_dVds - phi_b0_DEP_dVds) * (T2 - 1) ; Q_s0_dep_dVbs = here->HSM2_cnst0 / 2.0 / T6 * beta * (phi_s0_DEP_dVbs - phi_b0_DEP_dVbs) * (T2 - 1) ; } Q_n0 = 0.0 ; Q_n0_dVgs = 0.0 ; Q_n0_dVds = 0.0 ; Q_n0_dVbs = 0.0 ; T1 = phi_b0_DEP - phi_j0_DEP ; Fn_SL_CP( T2 , T1 , 0.0 , 0.1, 2 , T0 ) W_b0 = sqrt(C_2ESIpq_Ndepm * (T2) ) ; Fn_SU_CP( T9 , W_b0 , model->HSM2_tndep, 5e-8, 2 , T3 ) // HV_dlt=1e-8 W_sub0 = sqrt(C_2ESIpq_Nsub * (phi_j0_DEP - Vbsc + Vbi_DEP) ) ; Q_b0_dep = T9 * q_Ndepm ; Q_sub0_dep = - W_sub0 * q_Nsub ; Q_b0_dep_dVgs = C_ESI / W_b0 * (phi_b0_DEP_dVgs - phi_j0_DEP_dVgs) * T0 * T3 ; Q_b0_dep_dVds = C_ESI / W_b0 * (phi_b0_DEP_dVds - phi_j0_DEP_dVds) * T0 * T3 ; Q_b0_dep_dVbs = C_ESI / W_b0 * (phi_b0_DEP_dVbs - phi_j0_DEP_dVbs) * T0 * T3 ; Q_sub0_dep_dVgs = - C_ESI / W_sub0 * phi_j0_DEP_dVgs ; Q_sub0_dep_dVds = - C_ESI / W_sub0 * phi_j0_DEP_dVds ; Q_sub0_dep_dVbs = - C_ESI / W_sub0 * (phi_j0_DEP_dVbs - Vbsc_dVbse) ; } T1 = phi_b0_DEP - phi_j0_DEP ; Fn_SL_CP( T2 , T1 , 0.0 , 0.1, 2 , T0 ) W_b0 = sqrt(C_2ESIpq_Ndepm * (T2) ) ; Fn_SU_CP( T9, W_b0, model->HSM2_tndep, 1e-8, 2 , T3 ) W_b0_dVgs = C_ESI / q_Ndepm / W_b0 * (phi_b0_DEP_dVgs - phi_j0_DEP_dVgs) * T0 * T3 ; W_b0_dVds = C_ESI / q_Ndepm / W_b0 * (phi_b0_DEP_dVds - phi_j0_DEP_dVds) * T0 * T3 ; W_b0_dVbs = C_ESI / q_Ndepm / W_b0 * (phi_b0_DEP_dVbs - phi_j0_DEP_dVbs) * T0 * T3 ; T1 = phi_b0_DEP - phi_s0_DEP ; Fn_SL_CP( T2 , T1 , 0.0 , 0.1, 2 , T0 ) // HV_dlt=0.05 W_s0 = sqrt(C_2ESIpq_Ndepm * (T2) ) ; W_s0_dVgs = C_ESI / q_Ndepm / W_s0 * (phi_b0_DEP_dVgs - phi_s0_DEP_dVgs) * T0 ; W_s0_dVds = C_ESI / q_Ndepm / W_s0 * (phi_b0_DEP_dVds - phi_s0_DEP_dVds) * T0 ; W_s0_dVbs = C_ESI / q_Ndepm / W_s0 * (phi_b0_DEP_dVbs - phi_s0_DEP_dVbs) * T0 ; T1 = model->HSM2_tndep - T9 - W_s0 ; Fn_SL_CP( W_res0 , T1 , 1.0e-20 , 1.0e-14, 2 , T0 ) // HV_dlt=1.0e-25,1.0e-18 Qn_res0 = - W_res0 * q_Ndepm ; Qn_res0_dVgs = (W_s0_dVgs + W_b0_dVgs) * q_Ndepm * T0 ; Qn_res0_dVds = (W_s0_dVds + W_b0_dVds) * q_Ndepm * T0 ; Qn_res0_dVbs = (W_s0_dVbs + W_b0_dVbs) * q_Ndepm * T0 ; if( W_bsub0 > model->HSM2_tndep && depmode !=2 ) { Fn_SU_CP(T3 , phi_s0_DEP , phi_b0_DEP_lim , 0.8, 2 , T1 ) T3_dVgs = phi_s0_DEP_dVgs * T1 ; T3_dVds = phi_s0_DEP_dVds * T1 ; T3_dVbs = phi_s0_DEP_dVbs * T1 ; } else { Fn_SU_CP(T3 , phib_ref , phi_b0_DEP_lim , 0.8, 2 , T0 ) T3_dVgs = phib_ref_dVgs * T0 ; T3_dVds = phib_ref_dVds * T0 ; T3_dVbs = phib_ref_dVbs * T0 ; } T4 = exp(beta * (T3 - phi_b0_DEP_lim)) ; T5 = - C_QE * here->HSM2_ndepm ; Qn_bac0 = T5 * T4 * T9 ; Qn_bac0_dVgs = T5 * (beta * T4 * T3_dVgs * T9 + T4 * W_b0_dVgs) ; Qn_bac0_dVds = T5 * (beta * T4 * T3_dVds * T9 + T4 * W_b0_dVds) ; Qn_bac0_dVbs = T5 * (beta * T4 * T3_dVbs * T9 + T4 * W_b0_dVbs) ; T1 = phi_s0_DEP - phi_b0_DEP_lim ; Fn_SL_CP( T2 , T1 , 0.0, Ps_delta, 2 , T0 ) T2_dVgs = phi_s0_DEP_dVgs * T0 ; T2_dVds = phi_s0_DEP_dVds * T0 ; T2_dVbs = phi_s0_DEP_dVbs * T0 ; T3 = exp(beta * (T2)) ; T3_dVgs = beta * T3 * T2_dVgs ; T3_dVds = beta * T3 * T2_dVds ; T3_dVbs = beta * T3 * T2_dVbs ; T4 = T3 - 1.0 - beta * T2 ; T4_dVgs = T3_dVgs - beta * T2_dVgs ; T4_dVds = T3_dVds - beta * T2_dVds ; T4_dVbs = T3_dVbs - beta * T2_dVbs ; T5 = sqrt(T4) ; Q_n0_cur = - here->HSM2_cnst0 * T5 ; Q_n0_cur_dVgs = - here->HSM2_cnst0 / 2.0 / T5 * T4_dVgs ; Q_n0_cur_dVds = - here->HSM2_cnst0 / 2.0 / T5 * T4_dVds ; Q_n0_cur_dVbs = - here->HSM2_cnst0 / 2.0 / T5 * T4_dVbs ; T4 = exp(beta * Ps_delta0) - 1.0 - beta * Ps_delta0 ; T5 = sqrt(T4) ; Qn_delta = here->HSM2_cnst0 * T5 ; /*-----------------------------------------------------------* * Start point of phi_sL_DEP(= phi_s0_DEP + Pds) calculation.(label) *-----------------*/ /* Vdseff (begin) */ Vdsorg = Vds ; if( Vds > 1e-3 ) { T2 = q_Ndepm_esi / ( Cox * Cox ) ; T4 = - 2.0e0 * T2 / Cox ; T2_dVb = T4 * Cox_dVb ; T2_dVd = T4 * Cox_dVd ; T2_dVg = T4 * Cox_dVg ; T0 = Vgp + DEPQFN1 - beta_inv - Vbsz ; T0_dVg = Vgp_dVgs ; T0_dVd = Vgp_dVds - Vbsz_dVds ; T0_dVb = Vgp_dVbs - Vbsz_dVbs ; T4 = 1.0e0 + 2.0e0 / T2 * T0 ; T4_dVg = 2.0 / T2 * T0_dVg - 2.0 / T2 / T2 * T0 * T2_dVg ; T4_dVd = 2.0 / T2 * T0_dVd - 2.0 / T2 / T2 * T0 * T2_dVd ; T4_dVb = 2.0 / T2 * T0_dVb - 2.0 / T2 / T2 * T0 * T2_dVb ; Fn_SL_CP( T9 , T4 , 0 , DEPQFN_dlt, 2 , T0 ) T9_dVg = T4_dVg * T0 ; T9_dVd = T4_dVd * T0 ; T9_dVb = T4_dVb * T0 ; T9 +=small ; T3 = sqrt( T9 ) ; T3_dVg = 0.5 / T3 * T9_dVg ; T3_dVd = 0.5 / T3 * T9_dVd ; T3_dVb = 0.5 / T3 * T9_dVb ; T10 = Vgp + DEPQFN1 + T2 * ( 1.0e0 - T3 ) ; T10_dVb = Vgp_dVbs + T2_dVb * ( 1.0e0 - T3 ) - T2 * T3_dVb ; T10_dVd = Vgp_dVds + T2_dVd * ( 1.0e0 - T3 ) - T2 * T3_dVd ; T10_dVg = Vgp_dVgs + T2_dVg * ( 1.0e0 - T3 ) - T2 * T3_dVg ; Fn_SL_CP( T10 , T10 , DEPQFN3, 0.2, 4 , T0 ) // T10 = T10 + epsm10 ; T10_dVb *=T0 ; T10_dVd *=T0 ; T10_dVg *=T0 ; T1 = Vds / T10 ; T2 = Fn_Pow( T1 , here->HSM2_ddlt - 1.0e0 ) ; T7 = T2 * T1 ; T0 = here->HSM2_ddlt * T2 / ( T10 * T10 ) ; T7_dVb = T0 * ( - Vds * T10_dVb ) ; T7_dVd = T0 * ( T10 - Vds * T10_dVd ) ; T7_dVg = T0 * ( - Vds * T10_dVg ) ; T3 = 1.0 + T7 ; T4 = Fn_Pow( T3 , 1.0 / here->HSM2_ddlt - 1.0 ) ; T6 = T4 * T3 ; T0 = T4 / here->HSM2_ddlt ; T6_dVb = T0 * T7_dVb ; T6_dVd = T0 * T7_dVd ; T6_dVg = T0 * T7_dVg ; Vdseff = Vds / T6 ; T0 = 1.0 / ( T6 * T6 ) ; Vdseff0_dVbs = - Vds * T6_dVb * T0 ; Vdseff0_dVds = ( T6 - Vds * T6_dVd ) * T0 ; Vdseff0_dVgs = - Vds * T6_dVg * T0 ; Fn_SL_CP( Vgpp , Vgp , 0.0 , 0.5, 2 , T0 ) Vgpp_dVgs = T0 * Vgp_dVgs ; Vgpp_dVds = T0 * Vgp_dVds ; Vgpp_dVbs = T0 * Vgp_dVbs ; T1 = Vgpp * 0.8 ; T1_dVg = Vgpp_dVgs * 0.8 ; T1_dVd = Vgpp_dVds * 0.8 ; T1_dVb = Vgpp_dVbs * 0.8 ; Fn_SU_CP3( Vds , Vdseff , Vgpp , T1, 2 , T3, T4, T5 ) Vdseff_dVgs = Vdseff0_dVgs * T3 + Vgpp_dVgs * T4 + T1_dVg * T5 ; Vdseff_dVds = Vdseff0_dVds * T3 + Vgpp_dVds * T4 + T1_dVd * T5 ; Vdseff_dVbs = Vdseff0_dVbs * T3 + Vgpp_dVbs * T4 + T1_dVb * T5 ; } else { Vdseff = Vds ; Vdseff0_dVgs = 0.0 ; Vdseff0_dVds = 1.0 ; Vdseff0_dVbs = 0.0 ; Vdseff_dVgs = 0.0 ; Vdseff_dVds = 1.0 ; Vdseff_dVbs = 0.0 ; } /* Vdseff (end) */ /*---------------------------------------------------* * start of phi_sL_DEP calculation. (label) *--------------------------------*/ if( Vds < 0.0e0 ) { phi_sL_DEP = phi_s0_DEP ; phi_sL_DEP_dVgs = phi_s0_DEP_dVgs ; phi_sL_DEP_dVds = phi_s0_DEP_dVds ; phi_sL_DEP_dVbs = phi_s0_DEP_dVbs ; phi_bL_DEP = phi_b0_DEP ; phi_bL_DEP_dVgs = phi_b0_DEP_dVgs ; phi_bL_DEP_dVds = phi_b0_DEP_dVds ; phi_bL_DEP_dVbs = phi_b0_DEP_dVbs ; phi_jL_DEP = phi_j0_DEP ; phi_jL_DEP_dVgs = phi_j0_DEP_dVgs ; phi_jL_DEP_dVds = phi_j0_DEP_dVds ; phi_jL_DEP_dVbs = phi_j0_DEP_dVbs ; Q_subL = Q_sub0 ; Q_subL_dVgs = Q_sub0_dVgs ; Q_subL_dVds = Q_sub0_dVds ; Q_subL_dVbs = Q_sub0_dVbs ; Q_nL = Q_n0 ; Q_nL_dVgs = Q_n0_dVgs ; Q_nL_dVds = Q_n0_dVds ; Q_nL_dVbs = Q_n0_dVbs ; Q_bL_dep = Q_b0_dep ; Q_bL_dep_dVgs = Q_b0_dep_dVgs ; Q_bL_dep_dVds = Q_b0_dep_dVds ; Q_bL_dep_dVbs = Q_b0_dep_dVbs ; Q_subL_dep = Q_sub0_dep ; Q_subL_dep_dVgs = Q_sub0_dep_dVgs ; Q_subL_dep_dVds = Q_sub0_dep_dVds ; Q_subL_dep_dVbs = Q_sub0_dep_dVbs ; Q_sL_dep = Q_s0_dep ; Q_sL_dep_dVgs = Q_s0_dep_dVgs ; Q_sL_dep_dVds = Q_s0_dep_dVds ; Q_sL_dep_dVbs = Q_s0_dep_dVbs ; Q_nL_cur = Q_n0_cur ; Q_nL_cur_dVgs = Q_n0_cur_dVgs ; Q_nL_cur_dVds = Q_n0_cur_dVds ; Q_nL_cur_dVbs = Q_n0_cur_dVbs ; } else { W_bsubL = sqrt(C_2ESIpq_Ndepm * here->HSM2_nsub / (here->HSM2_nsub + here->HSM2_ndepm) * (Vds - Vbsc + Vbi_DEP)) ; /*---------------------------------------------------* * region judgement *------------------*/ /* fully depleted case */ if( W_bsubL > model->HSM2_tndep ) { Vgp0 = Vds ; W_bL = model->HSM2_tndep ; phi_bL_DEP = Vds ; phi_bL_DEP_lim = Vds ; phi_jL_DEP = phi_bL_DEP - C_2ESIpq_Ndepm_inv * W_bL * W_bL ; Vgp0old = Vgp0 ; phi_jL_DEP_old = phi_jL_DEP ; Q_bL_dep = W_bL * q_Ndepm ; for ( lp_s0 = 1 ; lp_s0 <= lp_se_max + 1 ; lp_s0 ++ ) { W_bL = sqrt(C_2ESIpq_Ndepm * (phi_bL_DEP - phi_jL_DEP) ) ; Fn_SU_CP( W_bL , W_bL , model->HSM2_tndep , 1e-8, 2 , T0 ) W_subL = sqrt(C_2ESIpq_Nsub * (phi_jL_DEP - Vbsc + Vbi_DEP) ) ; Q_bL_dep = W_bL * q_Ndepm ; Q_bL_dep_dPd = - C_ESI / W_bL * T0 ; Q_subL_dep = - W_subL * q_Nsub ; Q_subL_dep_dPd = - C_ESI / W_subL ; y1 = Cox * (Vgp0 - phi_bL_DEP) + Q_bL_dep + Q_subL_dep ; y11 = Cox ; y12 = Q_bL_dep_dPd + Q_subL_dep_dPd ; y2 = phi_jL_DEP - NdepmpNsub_inv1 * (NdepmpNsub * phi_bL_DEP + Vbsc - Vbi_DEP) ; y21 = 0.0 ; y22 = 1.0 ; dety = y11 * y22 - y21 * y12; rev11 = (y22) / dety ; rev12 = ( - y12) / dety ; rev21 = ( - y21) / dety ; rev22 = (y11) / dety ; if( fabs( rev11 * y1 + rev12 * y2 ) > 0.5 ) { Vgp0 = Vgp0 - 0.5 * Fn_Sgn( rev11 * y1 + rev12 * y2 ) ; phi_jL_DEP = phi_jL_DEP - 0.5 * Fn_Sgn( rev21 * y1 + rev22 * y2 ) ; } else { Vgp0 = Vgp0 - ( rev11 * y1 + rev12 * y2 ) ; phi_jL_DEP = phi_jL_DEP - ( rev21 * y1 + rev22 * y2 ) ; } if( fabs(Vgp0 - Vgp0old) <= ps_conv && fabs(phi_jL_DEP - phi_jL_DEP_old) <= ps_conv ) lp_s0=lp_se_max + 1 ; Vgp0old = Vgp0 ; phi_jL_DEP_old = phi_jL_DEP ; } phi_jL_DEP_acc = phi_jL_DEP ; W_subL = model->HSM2_tndep * NdepmpNsub ; phi_jL_DEP = C_2ESIpq_Nsub_inv * W_subL * W_subL + Vbsc - Vbi_DEP ; phi_bL_DEP = phi_jL_DEP + C_2ESIpq_Ndepm_inv * Tn2 ; phi_sL_DEP = phi_bL_DEP ; Psbmax = phi_bL_DEP ; Vgp1 = phi_bL_DEP ; if( Vgp > Vgp0 ) { depmode = 1 ; } else if(Vgp > Vgp1 ) { depmode = 3 ; } else { depmode = 2 ; } /* else */ } else { Vgp0 = Vds ; Vgp1 = Vgp0 ; Psbmax = Vgp0 ; phi_bL_DEP_lim = Vgp0 ; W_bL = W_bsubL ; W_subL = W_bL * NdepmpNsub ; phi_jL_DEP = C_2ESIpq_Nsub_inv * W_subL * W_subL + Vbsc - Vbi_DEP ; phi_bL_DEP = C_2ESIpq_Ndepm_inv * W_bL * W_bL + phi_jL_DEP ; phi_jL_DEP_acc = phi_jL_DEP ; if( Vgp > Vgp0 ) { depmode = 1 ; } else { depmode = 2 ; } } T1 = C_2ESI_q_Ndepm * ( Psbmax - ( - here->HSM2_Pb2n + Vbsc)) ; if ( T1 > 0.0 ) { vthn = - here->HSM2_Pb2n + Vbsc - sqrt(T1) / Cox ; } else { vthn = - here->HSM2_Pb2n + Vbsc ; } /*---------------------------------------------------* * initial potential phi_s0_DEP,phi_bL_DEP,phi_jL_DEP calculated. *------------------*/ /* accumulation region */ if( Vgp > Vgp0 ) { phi_jL_DEP = phi_jL_DEP_acc ; phi_bL_DEP = Vds ; phi_sL_DEP_ini = log(afact * Vgp * Vgp) / (beta + 2.0 / Vgp) + Vds ; if( phi_sL_DEP_ini < phi_bL_DEP_lim + ps_conv23 ) phi_sL_DEP_ini = phi_bL_DEP_lim + ps_conv23 ; /* fully depleted region */ } else if( Vgp > Vgp1 ) { phi_sL_DEP_ini = phi_sL_DEP ; /* depletion & inversion */ } else { /* depletion */ if( Vgp > vthn ) { bfact = - 2.0 * afact * Vgp + beta ; cfact = afact * Vgp * Vgp - beta * phi_bL_DEP ; phi_bL_DEP_old = phi_bL_DEP ; phi_sL_DEP_ini = ( - bfact + sqrt(bfact * bfact - 4.0 * afact * cfact)) / 2.0 / afact ; if( phi_sL_DEP_ini > Psbmax - ps_conv23 ) phi_sL_DEP_ini = Psbmax - ps_conv23 ; W_sL = sqrt(C_2ESIpq_Ndepm * (phi_bL_DEP - phi_sL_DEP_ini) ) ; W_bL = sqrt(C_2ESIpq_Ndepm * (phi_bL_DEP - phi_jL_DEP) ) ; if( W_sL + W_bL > model->HSM2_tndep ) { for ( lp_s0 = 1 ; lp_s0 <= lp_se_max + 1 ; lp_s0 ++ ) { y0 = W_sL + W_bL - model->HSM2_tndep ; dydPsm = C_ESI / q_Ndepm / W_sL + C_ESI / q_Ndepm * ( 1.0 - (here->HSM2_ndepm / here->HSM2_nsub) / ( 1.0 + (NdepmpNsub))) / W_bL ; if( fabs(y0 / dydPsm) > 0.5 ) { phi_bL_DEP = phi_bL_DEP - 0.5 * Fn_Sgn(y0 / dydPsm) ; } else { phi_bL_DEP = phi_bL_DEP - y0 / dydPsm ; } if( (phi_bL_DEP - Vbsc + Vbi_DEP) < epsm10 ) phi_bL_DEP=Vbsc - Vbi_DEP + epsm10 ; cfact = afact * Vgp * Vgp - beta * phi_bL_DEP ; T1 = bfact * bfact - 4.0 * afact * cfact ; if( T1 > 0.0 ) { phi_sL_DEP_ini = ( - bfact + sqrt(T1)) / 2.0 / afact ; } else { phi_sL_DEP_ini = ( - bfact) / 2.0 / afact ; } if( phi_sL_DEP_ini > Psbmax ) phi_sL_DEP_ini = Psbmax ; if( phi_sL_DEP_ini > phi_bL_DEP ) { phi_sL_DEP_ini = phi_bL_DEP - ps_conv23 ; lp_s0=lp_se_max + 1 ; } W_sL = sqrt(C_2ESIpq_Ndepm * (phi_bL_DEP - phi_sL_DEP_ini) ) ; phi_jL_DEP = ( NdepmpNsub * phi_bL_DEP + Vbsc - Vbi_DEP) / (1.0 + NdepmpNsub) ; W_bL = sqrt(C_2ESIpq_Ndepm * (phi_bL_DEP - phi_jL_DEP) ) ; if( fabs(phi_bL_DEP - phi_bL_DEP_old) <= 1.0e-8 ) lp_s0=lp_se_max + 1 ; phi_bL_DEP_old = phi_bL_DEP ; } } /* inversion */ } else { phi_bL_DEP = phi_b0_DEP ; phi_jL_DEP = phi_j0_DEP ; phi_sL_DEP_ini = phi_s0_DEP ; } } phi_b0_DEP_ini = phi_bL_DEP ; /* */ /* solve poisson at drain side */ /* */ flg_conv = 0 ; /* accumulation */ phi_sL_DEP = phi_sL_DEP_ini ; phi_bL_DEP = phi_b0_DEP_ini ; phi_sL_DEP_old = phi_sL_DEP ; phi_bL_DEP_old = phi_bL_DEP ; for ( lp_s0 = 1 ; lp_s0 <= lp_se_max + 1 ; lp_s0 ++ ) { phi_jL_DEP = NdepmpNsub_inv1 * (NdepmpNsub * phi_bL_DEP + Vbsc - Vbi_DEP) ; phi_jL_DEP_dPb = NdepmpNsub_inv1 * NdepmpNsub ; T1 = phi_bL_DEP - phi_jL_DEP ; Fn_SL_CP( T2 , T1 , 0.0 , 0.1, 2 , T7 ) W_bL = sqrt(C_2ESIpq_Ndepm * (T2) ) ; Fn_SU_CP( W_bL , W_bL , model->HSM2_tndep , 1e-8, 2 , T8 ) W_subL = sqrt(C_2ESIpq_Nsub * (phi_jL_DEP - Vbsc + Vbi_DEP) ) ; Q_bL_dep = W_bL * q_Ndepm ; Q_bL_dep_dPb = C_ESI / W_bL * T7 * T8 ; Q_bL_dep_dPd = - C_ESI / W_bL * T7 * T8 ; Q_subL_dep = - W_subL * q_Nsub ; Q_subL_dep_dPd = - C_ESI / W_subL ; T10 = 8.0 * q_Ndepm_esi * Tn2 ; phib_ref = (4.0 * phi_jL_DEP * phi_jL_DEP * C_ESI2 - 8.0 * phi_jL_DEP * C_ESI2 * phi_sL_DEP + 4.0 * C_ESI2 * phi_sL_DEP * phi_sL_DEP + 4.0 * phi_jL_DEP * q_Ndepm_esi * Tn2 + 4.0 * phi_sL_DEP * q_Ndepm_esi * Tn2 + Ndepm2 * C_QE2 * Tn2 * Tn2 ) / T10 ; phib_ref_dPs = ( - 8.0 * phi_jL_DEP * C_ESI2 + 8.0 * C_ESI2 * phi_sL_DEP + 4.0 * q_Ndepm_esi * Tn2 ) / T10 ; phib_ref_dPd = ( 8.0 * phi_jL_DEP * C_ESI2 - 8.0 * C_ESI2 * phi_sL_DEP + 4.0 * q_Ndepm_esi * Tn2 ) / T10 ; T1 = beta * (phi_sL_DEP - phi_bL_DEP) ; T2 = exp(T1) ; if( phi_sL_DEP >= phi_bL_DEP ) { Q_sL = - here->HSM2_cnst0 * sqrt(T2 - 1.0 - T1 + 1e-15) ; Q_sL_dPs = 0.5 * here->HSM2_cnst0 * here->HSM2_cnst0 / Q_sL * (beta * T2 - beta) ; Q_sL_dPb = - Q_sL_dPs ; } else { T3 = exp( - beta * (phi_sL_DEP - Vbsc)) ; T4 = exp( - beta * (phi_bL_DEP - Vbsc)) ; Q_sL = here->HSM2_cnst0 * sqrt(T2 - 1.0 - T1 + here->HSM2_cnst1 * (T3 - T4) + 1e-15) ; T5 = 0.5 * here->HSM2_cnst0 * here->HSM2_cnst0 / Q_sL ; Q_sL_dPs = T5 * (beta * T2 - beta + here->HSM2_cnst1 * ( - beta * T3) ) ; Q_sL_dPb = T5 * ( - beta * T2 + beta + here->HSM2_cnst1 * beta * T4 ) ; } Fn_SU_CP2( T1 , phib_ref , phi_bL_DEP_lim , sm_delta, 4 , T9, T11 ) y1 = phi_bL_DEP - T1 ; y11 = - phib_ref_dPs * T9 ; y12 = 1.0 - phib_ref_dPd * phi_jL_DEP_dPb * T9 ; y2 = Cox * (Vgp - phi_sL_DEP) + Q_sL + Q_bL_dep + Q_subL_dep ; y21 = - Cox + Q_sL_dPs ; y22 = Q_sL_dPb + Q_bL_dep_dPb + Q_bL_dep_dPd * phi_jL_DEP_dPb + Q_subL_dep_dPd * phi_jL_DEP_dPb ; dety = y11 * y22 - y21 * y12; rev11 = (y22) / dety ; rev12 = ( - y12) / dety ; rev21 = ( - y21) / dety ; rev22 = (y11) / dety ; if( fabs( rev21 * y1 + rev22 * y2 ) > 0.2 ) { // HV_dlt=0.5 phi_sL_DEP = phi_sL_DEP - 0.2 * Fn_Sgn( rev11 * y1 + rev12 * y2 ) ; phi_bL_DEP = phi_bL_DEP - 0.2 * Fn_Sgn( rev21 * y1 + rev22 * y2 ) ; } else { phi_sL_DEP = phi_sL_DEP - ( rev11 * y1 + rev12 * y2 ) ; phi_bL_DEP = phi_bL_DEP - ( rev21 * y1 + rev22 * y2 ) ; } if( fabs(phi_sL_DEP - phi_sL_DEP_old) <= ps_conv && fabs(phi_bL_DEP - phi_bL_DEP_old) <= ps_conv ) { lp_s0=lp_se_max + 1 ; flg_conv = 1 ; } phi_sL_DEP_old = phi_sL_DEP ; phi_bL_DEP_old = phi_bL_DEP ; } if( flg_conv == 0 ) { printf( "*** warning(HiSIM(%s)): Went Over Iteration Maximum(Psl)\n",model->HSM2modName ) ; printf( " Vbse = %7.3f Vdse = %7.3f Vgse = %7.3f\n" ,Vbse , Vdse , Vgse ) ; } /* caluculate derivative */ y1_dVgs = - Vdseff_dVgs * T11 ; y1_dVds = - Vdseff_dVds * T11 ; y1_dVbs = - (8.0 * phi_jL_DEP * C_ESI2 - 8.0 * C_ESI2 * phi_sL_DEP + 4.0 * q_Ndepm_esi * Tn2) / T10 * T9 * NdepmpNsub_inv1 * Vbsc_dVbse - Vdseff_dVbs * T11 ; Q_bL_dep_dVbs = - C_ESI / W_bL * T7 * T8 * NdepmpNsub_inv1 * Vbsc_dVbse ; Q_subL_dep_dVbs = - C_ESI / W_subL * (NdepmpNsub_inv1 * Vbsc_dVbse - Vbsc_dVbse) ; T1 = beta * (phi_sL_DEP - phi_bL_DEP) ; T2 = exp(T1) ; if( phi_sL_DEP >= phi_bL_DEP ) { Q_sL_dVbs = 0.0 ; } else { T3 = exp( - beta * (phi_sL_DEP - Vbsc)) ; T4 = exp( - beta * (phi_bL_DEP - Vbsc)) ; T5 = sqrt(T2 - 1.0 - T1 + 1e-15 + here->HSM2_cnst1 * (T3 - T4)) ; Q_sL_dVbs = here->HSM2_cnst0 / 2.0 / T5 * (here->HSM2_cnst1 * (beta * T3 * Vbsc_dVbse - beta * T4 * Vbsc_dVbse) ) ; } y2_dVgs = Cox_dVg * (Vgp - phi_sL_DEP) + Cox * Vgp_dVgs ; y2_dVds = Cox_dVd * (Vgp - phi_sL_DEP) + Cox * Vgp_dVds ; y2_dVbs = Cox_dVb * (Vgp - phi_sL_DEP) + Cox * Vgp_dVbs + Q_sL_dVbs + Q_bL_dep_dVbs + Q_subL_dep_dVbs ; phi_sL_DEP_dVgs = - ( rev11 * y1_dVgs + rev12 * y2_dVgs ) ; phi_sL_DEP_dVds = - ( rev11 * y1_dVds + rev12 * y2_dVds ) ; phi_sL_DEP_dVbs = - ( rev11 * y1_dVbs + rev12 * y2_dVbs ) ; phi_bL_DEP_dVgs = - ( rev21 * y1_dVgs + rev22 * y2_dVgs ) ; phi_bL_DEP_dVds = - ( rev21 * y1_dVds + rev22 * y2_dVds ) ; phi_bL_DEP_dVbs = - ( rev21 * y1_dVbs + rev22 * y2_dVbs ) ; if( W_bsubL > model->HSM2_tndep && depmode !=2 ) { Fn_SU_CP2(phi_bL_DEP , phi_bL_DEP , phi_sL_DEP , 0.04, 2 , T1, T2 ) // HV_dlt=0.02 phi_bL_DEP_dVgs = phi_bL_DEP_dVgs * T1 + phi_sL_DEP_dVgs * T2 ; phi_bL_DEP_dVds = phi_bL_DEP_dVds * T1 + phi_sL_DEP_dVds * T2 ; phi_bL_DEP_dVbs = phi_bL_DEP_dVbs * T1 + phi_sL_DEP_dVbs * T2 ; } phi_jL_DEP = NdepmpNsub_inv1 * (NdepmpNsub * phi_bL_DEP + Vbsc - Vbi_DEP) ; phi_jL_DEP_dVgs = NdepmpNsub_inv1 * NdepmpNsub * phi_bL_DEP_dVgs ; phi_jL_DEP_dVds = NdepmpNsub_inv1 * NdepmpNsub * phi_bL_DEP_dVds ; phi_jL_DEP_dVbs = NdepmpNsub_inv1 * NdepmpNsub * phi_bL_DEP_dVbs + NdepmpNsub_inv1 * Vbsc_dVbse ; phib_ref = (4.0 * phi_jL_DEP * phi_jL_DEP * C_ESI2 - 8.0 * phi_jL_DEP * C_ESI2 * phi_sL_DEP + 4.0 * C_ESI2 * phi_sL_DEP * phi_sL_DEP + 4.0 * phi_jL_DEP * q_Ndepm_esi * Tn2 + 4.0 * phi_sL_DEP * q_Ndepm_esi * Tn2 + Ndepm2 * C_QE2 * Tn2 * Tn2 ) / T10 ; phib_ref_dVgs = ( 8.0 * phi_jL_DEP * phi_jL_DEP_dVgs * C_ESI2 - 8.0 * phi_jL_DEP_dVgs * C_ESI2 * phi_sL_DEP - 8.0 * phi_jL_DEP * C_ESI2 * phi_sL_DEP_dVgs + 8.0 * C_ESI2 * phi_sL_DEP * phi_sL_DEP_dVgs + 4.0 * phi_jL_DEP_dVgs * q_Ndepm_esi * Tn2 + 4.0 * phi_sL_DEP_dVgs * q_Ndepm_esi * Tn2 ) / T10 ; phib_ref_dVds = ( 8.0 * phi_jL_DEP * phi_jL_DEP_dVds * C_ESI2 - 8.0 * phi_jL_DEP_dVds * C_ESI2 * phi_sL_DEP - 8.0 * phi_jL_DEP * C_ESI2 * phi_sL_DEP_dVds + 8.0 * C_ESI2 * phi_sL_DEP * phi_sL_DEP_dVds + 4.0 * phi_jL_DEP_dVds * q_Ndepm_esi * Tn2 + 4.0 * phi_sL_DEP_dVds * q_Ndepm_esi * Tn2 ) / T10 ; phib_ref_dVbs = ( 8.0 * phi_jL_DEP * phi_jL_DEP_dVbs * C_ESI2 - 8.0 * phi_jL_DEP_dVbs * C_ESI2 * phi_sL_DEP - 8.0 * phi_jL_DEP * C_ESI2 * phi_sL_DEP_dVbs + 8.0 * C_ESI2 * phi_sL_DEP * phi_sL_DEP_dVbs + 4.0 * phi_jL_DEP_dVbs * q_Ndepm_esi * Tn2 + 4.0 * phi_sL_DEP_dVbs * q_Ndepm_esi * Tn2 ) / T10 ; T1 = beta * (phi_sL_DEP - phi_bL_DEP) ; T1_dVgs = beta * (phi_sL_DEP_dVgs - phi_bL_DEP_dVgs) ; T1_dVds = beta * (phi_sL_DEP_dVds - phi_bL_DEP_dVds) ; T1_dVbs = beta * (phi_sL_DEP_dVbs - phi_bL_DEP_dVbs) ; T2 = exp(T1) ; T2_dVgs = T1_dVgs * T2 ; T2_dVds = T1_dVds * T2 ; T2_dVbs = T1_dVbs * T2 ; if( phi_sL_DEP >= phi_bL_DEP ) { T3 = sqrt(T2 - 1.0e0 - T1 + 1e-15 ) ; T3_dVgs = (T2_dVgs - T1_dVgs) / 2.0 / T3 ; T3_dVds = (T2_dVds - T1_dVds) / 2.0 / T3 ; T3_dVbs = (T2_dVbs - T1_dVbs) / 2.0 / T3 ; Q_sL = - here->HSM2_cnst0 * T3 ; Q_sL_dep = 0.0 ; Q_subL = 0.0 ; W_bL = sqrt(C_2ESIpq_Ndepm * (phi_bL_DEP - phi_jL_DEP) ) ; Fn_SU_CP( T9 , W_bL , model->HSM2_tndep, 1e-8, 2 , T4 ) W_subL = sqrt(C_2ESIpq_Nsub * (phi_jL_DEP - Vbsc + Vbi_DEP) ) ; Q_bL_dep = T9 * q_Ndepm ; Q_subL_dep = - W_subL * q_Nsub ; /* derivative */ Q_sL_dVgs = - here->HSM2_cnst0 * T3_dVgs ; Q_sL_dVds = - here->HSM2_cnst0 * T3_dVds ; Q_sL_dVbs = - here->HSM2_cnst0 * T3_dVbs ; Q_nL = Q_sL ; Q_nL_dVgs = Q_sL_dVgs ; Q_nL_dVds = Q_sL_dVds ; Q_nL_dVbs = Q_sL_dVbs ; Q_bL_dep_dVgs = C_ESI / W_bL * (phi_bL_DEP_dVgs - phi_jL_DEP_dVgs) * T4 ; Q_bL_dep_dVds = C_ESI / W_bL * (phi_bL_DEP_dVds - phi_jL_DEP_dVds) * T4 ; Q_bL_dep_dVbs = C_ESI / W_bL * (phi_bL_DEP_dVbs - phi_jL_DEP_dVbs) * T4 ; Q_subL_dep_dVgs = - C_ESI / W_subL * phi_jL_DEP_dVgs ; Q_subL_dep_dVds = - C_ESI / W_subL * phi_jL_DEP_dVds ; Q_subL_dep_dVbs = - C_ESI / W_subL * (phi_jL_DEP_dVbs - Vbsc_dVbse) ; Q_subL_dVgs = 0.0 ; Q_subL_dVds = 0.0 ; Q_subL_dVbs = 0.0 ; Q_sL_dep_dVgs = 0.0 ; Q_sL_dep_dVds = 0.0 ; Q_sL_dep_dVbs = 0.0 ; } else { T3 = exp( - beta * (phi_sL_DEP - Vbsc)) ; T4 = exp( - beta * (phi_bL_DEP - Vbsc)) ; T5 = sqrt(T2 - 1.0 - T1 + here->HSM2_cnst1 * (T3 - T4) + 1e-15) ; Q_sL = here->HSM2_cnst0 * T5 ; T3_dVgs = - beta * T3 * phi_sL_DEP_dVgs ; T3_dVds = - beta * T3 * phi_sL_DEP_dVds ; T3_dVbs = - beta * T3 * (phi_sL_DEP_dVbs - Vbsc_dVbse) ; T4_dVgs = - beta * T4 * phi_bL_DEP_dVgs ; T4_dVds = - beta * T4 * phi_bL_DEP_dVds ; T4_dVbs = - beta * T4 * (phi_bL_DEP_dVbs - Vbsc_dVbse) ; T5_dVgs = (T2_dVgs - T1_dVgs + here->HSM2_cnst1 * (T3_dVgs - T4_dVgs)) / 2.0 / T5 ; T5_dVds = (T2_dVds - T1_dVds + here->HSM2_cnst1 * (T3_dVds - T4_dVds)) / 2.0 / T5 ; T5_dVbs = (T2_dVbs - T1_dVbs + here->HSM2_cnst1 * (T3_dVbs - T4_dVbs)) / 2.0 / T5 ; Q_sL_dVgs = here->HSM2_cnst0 * T5_dVgs ; Q_sL_dVds = here->HSM2_cnst0 * T5_dVds ; Q_sL_dVbs = here->HSM2_cnst0 * T5_dVbs ; if( W_bsubL > model->HSM2_tndep && depmode !=2 ) { Q_subL = 0.0 ; Q_sL_dep = 0.0 ; Q_subL_dVgs = 0.0 ; Q_subL_dVds = 0.0 ; Q_subL_dVbs = 0.0 ; Q_sL_dep_dVgs = 0.0 ; Q_sL_dep_dVds = 0.0 ; Q_sL_dep_dVbs = 0.0 ; } else { T3 = exp( - beta * (phi_sL_DEP - Vbsc)) ; T4 = exp( - beta * (phi_bL_DEP - Vbsc)) ; T5 = sqrt( - T1 + here->HSM2_cnst1 * (T3 - T4)) ; Q_subL = here->HSM2_cnst0 * T5 - here->HSM2_cnst0 * sqrt( - T1) ; T6 = sqrt(T2 - 1.0e0 - T1 + 1e-15) ; Q_sL_dep = here->HSM2_cnst0 * T6 ; Q_subL_dVgs = here->HSM2_cnst0 / 2.0 / T5 * ( - beta * (phi_sL_DEP_dVgs - phi_bL_DEP_dVgs) + here->HSM2_cnst1 * ( - beta * T3 * phi_sL_DEP_dVgs + beta * T4 * phi_bL_DEP_dVgs)) - here->HSM2_cnst0 / 2.0 / sqrt( - T1) * ( - beta * (phi_sL_DEP_dVgs - phi_bL_DEP_dVgs)) ; Q_subL_dVds = here->HSM2_cnst0 / 2.0 / T5 * ( - beta * (phi_sL_DEP_dVds - phi_bL_DEP_dVds) + here->HSM2_cnst1 * ( - beta * T3 * phi_sL_DEP_dVds + beta * T4 * phi_bL_DEP_dVds)) - here->HSM2_cnst0 / 2.0 / sqrt( - T1) * ( - beta * (phi_sL_DEP_dVds - phi_bL_DEP_dVds)) ; Q_subL_dVbs = here->HSM2_cnst0 / 2.0 / T5 * ( - beta * (phi_sL_DEP_dVbs - phi_bL_DEP_dVbs) + here->HSM2_cnst1 * ( - beta * T3 * (phi_sL_DEP_dVbs - Vbsc_dVbse) + beta * T4 * (phi_bL_DEP_dVbs - Vbsc_dVbse))) - here->HSM2_cnst0 / 2.0 / sqrt( - T1) * ( - beta * (phi_sL_DEP_dVbs - phi_bL_DEP_dVbs)) ; Q_sL_dep_dVgs = here->HSM2_cnst0 / 2.0 / T6 * beta * (phi_sL_DEP_dVgs - phi_bL_DEP_dVgs) * (T2 - 1) ; Q_sL_dep_dVds = here->HSM2_cnst0 / 2.0 / T6 * beta * (phi_sL_DEP_dVds - phi_bL_DEP_dVds) * (T2 - 1) ; Q_sL_dep_dVbs = here->HSM2_cnst0 / 2.0 / T6 * beta * (phi_sL_DEP_dVbs - phi_bL_DEP_dVbs) * (T2 - 1) ; } Q_nL = 0.0 ; Q_nL_dVgs = 0.0 ; Q_nL_dVds = 0.0 ; Q_nL_dVbs = 0.0 ; /// Qg = Cox * (Vgp - phi_sL_DEP) ; T1 = phi_bL_DEP - phi_jL_DEP ; Fn_SL_CP( T2 , T1 , 0.0 , 0.1, 2 , T0 ) W_bL = sqrt(C_2ESIpq_Ndepm * (T2) ) ; Fn_SU_CP( T9 , W_bL , model->HSM2_tndep, 1e-8, 2 , T3 ) W_subL = sqrt(C_2ESIpq_Nsub * (phi_jL_DEP - Vbsc + Vbi_DEP) ) ; Q_bL_dep = T9 * q_Ndepm ; Q_subL_dep = - W_subL * q_Nsub ; Q_bL_dep_dVgs = C_ESI / W_bL * (phi_bL_DEP_dVgs - phi_jL_DEP_dVgs) * T0 * T3 ; Q_bL_dep_dVds = C_ESI / W_bL * (phi_bL_DEP_dVds - phi_jL_DEP_dVds) * T0 * T3 ; Q_bL_dep_dVbs = C_ESI / W_bL * (phi_bL_DEP_dVbs - phi_jL_DEP_dVbs) * T0 * T3 ; Q_subL_dep_dVgs = - C_ESI / W_subL * phi_jL_DEP_dVgs ; Q_subL_dep_dVds = - C_ESI / W_subL * phi_jL_DEP_dVds ; Q_subL_dep_dVbs = - C_ESI / W_subL * (phi_jL_DEP_dVbs - Vbsc_dVbse) ; } T1 = phi_sL_DEP - phi_bL_DEP_lim ; Fn_SL_CP( T2 , T1 , 0.0, Ps_delta, 2 , T0 ) T2_dVgs = (phi_sL_DEP_dVgs - Vdseff_dVgs) * T0 ; T2_dVds = (phi_sL_DEP_dVds - Vdseff_dVds) * T0 ; T2_dVbs = (phi_sL_DEP_dVbs - Vdseff_dVbs) * T0 ; T3 = exp(beta * (T2)) ; T3_dVgs = beta * T3 * T2_dVgs ; T3_dVds = beta * T3 * T2_dVds ; T3_dVbs = beta * T3 * T2_dVbs ; T4 = T3 - 1.0 - beta * T2 ; T4_dVgs = T3_dVgs - beta * T2_dVgs ; T4_dVds = T3_dVds - beta * T2_dVds ; T4_dVbs = T3_dVbs - beta * T2_dVbs ; T5 = sqrt(T4) ; Q_nL_cur = - here->HSM2_cnst0 * T5 ; Q_nL_cur_dVgs = - here->HSM2_cnst0 / 2.0 / T5 * T4_dVgs ; Q_nL_cur_dVds = - here->HSM2_cnst0 / 2.0 / T5 * T4_dVds ; Q_nL_cur_dVbs = - here->HSM2_cnst0 / 2.0 / T5 * T4_dVbs ; } /*---------------------------------------------------* * Assign Pds. *-----------------*/ Ps0 = phi_s0_DEP ; Psl = phi_sL_DEP ; Pds = phi_sL_DEP - phi_s0_DEP + epsm10 ; Pds_dVgs = phi_sL_DEP_dVgs - phi_s0_DEP_dVgs ; Pds_dVds = phi_sL_DEP_dVds - phi_s0_DEP_dVds ; Pds_dVbs = phi_sL_DEP_dVbs - phi_s0_DEP_dVbs ; if( Pds < 0.0 ) { // take care of numerical noise // Pds = 0.0 ; Pds_dVgs = 0.0 ; Pds_dVds = 0.0 ; Pds_dVbs = 0.0 ; phi_sL_DEP = phi_s0_DEP ; phi_sL_DEP_dVgs = phi_s0_DEP_dVgs ; phi_sL_DEP_dVds = phi_s0_DEP_dVds ; phi_sL_DEP_dVbs = phi_s0_DEP_dVbs ; Idd = 0.0 ; Idd_dVgs = 0.0 ; Idd_dVds = 0.0 ; Idd_dVbs = 0.0 ; } else { T1 = - (Q_s0 + Q_sL) ; T1_dVgs = - (Q_s0_dVgs + Q_sL_dVgs) ; T1_dVds = - (Q_s0_dVds + Q_sL_dVds) ; T1_dVbs = - (Q_s0_dVbs + Q_sL_dVbs) ; Fn_SL_CP3( Qn_drift , T1 , 0.0, Qn_delta , 2 , T3, T4, T5 ) Qn_drift_dVgs = T1_dVgs * T3 ; Qn_drift_dVds = T1_dVds * T3 ; Qn_drift_dVbs = T1_dVbs * T3 ; Idd_drift = beta * Qn_drift / 2.0 * Pds ; Idd_diffu = - ( - Q_nL_cur + Q_n0_cur); Idd = Idd_drift + Idd_diffu ; Idd_dVgs = beta * Qn_drift_dVgs / 2.0 * Pds + beta * Qn_drift / 2.0 * Pds_dVgs - ( - Q_nL_cur_dVgs + Q_n0_cur_dVgs ) ; Idd_dVds = beta * Qn_drift_dVds / 2.0 * Pds + beta * Qn_drift / 2.0 * Pds_dVds - ( - Q_nL_cur_dVds + Q_n0_cur_dVds ) ; Idd_dVbs = beta * Qn_drift_dVbs / 2.0 * Pds + beta * Qn_drift / 2.0 * Pds_dVbs - ( - Q_nL_cur_dVbs + Q_n0_cur_dVbs ) ; } Qiu = - Q_n0_cur ; Qiu_dVgs = - Q_n0_cur_dVgs ; Qiu_dVds = - Q_n0_cur_dVds ; Qiu_dVbs = - Q_n0_cur_dVbs ; Lch = Leff ; /*-----------------------------------------------------------* * Muun : universal mobility. (CGS unit) *-----------------*/ T2 = here->HSM2_ninv_o_esi / C_m2cm ; T0 = here->HSM2_ninvd ; T3 = sqrt(Pds*Pds + model->HSM2_vzadd0) ; Pdsz = T3 - sqrt(model->HSM2_vzadd0) ; Pdsz_dVbs = Pds_dVbs * Pds / T3 ; Pdsz_dVds = Pds_dVds * Pds / T3 ; Pdsz_dVgs = Pds_dVgs * Pds / T3 ; T4 = 1.0 + ( Pdsz ) * T0 ; T4_dVb = ( Pdsz_dVbs ) * T0 ; T4_dVd = ( Pdsz_dVds ) * T0 ; T4_dVg = ( Pdsz_dVgs ) * T0 ; T5 = T2 * Qiu ; T5_dVb = T2 * Qiu_dVbs ; T5_dVd = T2 * Qiu_dVds ; T5_dVg = T2 * Qiu_dVgs ; T3 = T5 / T4 ; T3_dVb = ( - T4_dVb * T5 + T4 * T5_dVb ) / T4 / T4 ; T3_dVd = ( - T4_dVd * T5 + T4 * T5_dVd ) / T4 / T4 ; T3_dVg = ( - T4_dVg * T5 + T4 * T5_dVg ) / T4 / T4 ; Eeff = T3 ; Eeff_dVbs = T3_dVb ; Eeff_dVds = T3_dVd ; Eeff_dVgs = T3_dVg ; T5 = Fn_Pow( Eeff , model->HSM2_mueph0 - 1.0e0 ) ; T8 = T5 * Eeff ; T7 = Fn_Pow( Eeff , here->HSM2_muesr - 1.0e0 ) ; T6 = T7 * Eeff ; T9 = C_QE * C_m2cm_p2 ; Rns = Qiu / T9 ; T1 = 1.0e0 / ( here->HSM2_muecb0 + here->HSM2_muecb1 * Rns / 1.0e11 ) + here->HSM2_mphn0 * T8 + T6 / pParam->HSM2_muesr1 ; Muun = 1.0e0 / T1 ; T1 = 1.0e0 / ( T1 * T1 ) ; T2 = here->HSM2_muecb0 + here->HSM2_muecb1 * Rns / 1.0e11 ; T2 = 1.0e0 / ( T2 * T2 ) ; /* here->HSM2_mphn1 = here->HSM2_mphn0 * model->HSM2_mueph0 */ T3 = here->HSM2_mphn1 * T5 ; T4 = here->HSM2_muesr * T7 / pParam->HSM2_muesr1 ; T5 = - 1.0e-11 * here->HSM2_muecb1 / C_QE * T2 / C_m2cm_p2 ; Muun_dVbs = - ( T5 * Qiu_dVbs + Eeff_dVbs * T3 + Eeff_dVbs * T4 ) * T1 ; Muun_dVds = - ( T5 * Qiu_dVds + Eeff_dVds * T3 + Eeff_dVds * T4 ) * T1 ; Muun_dVgs = - ( T5 * Qiu_dVgs + Eeff_dVgs * T3 + Eeff_dVgs * T4 ) * T1 ; /* Change to MKS unit */ Muun /=C_m2cm_p2 ; Muun_dVbs /=C_m2cm_p2 ; Muun_dVds /=C_m2cm_p2 ; Muun_dVgs /=C_m2cm_p2 ; /*-----------------------------------------------------------* * Mu : mobility *-----------------*/ T2 = beta * (Qiu + small) * Lch ; T1 = 1.0e0 / T2 ; T3 = T1 * T1 ; T4 = - beta * T3 ; T5 = T4 * Lch ; T6 = T4 * (Qiu + small) ; T1_dVb = ( T5 * Qiu_dVbs ) ; T1_dVd = ( T5 * Qiu_dVds ) ; T1_dVg = ( T5 * Qiu_dVgs ) ; TY = Idd * T1 ; TY_dVbs = Idd_dVbs * T1 + Idd * T1_dVb ; TY_dVds = Idd_dVds * T1 + Idd * T1_dVd ; TY_dVgs = Idd_dVgs * T1 + Idd * T1_dVg ; T2 = 0.2 * Vmax / Muun ; T3 = - T2 / Muun ; T2_dVb = T3 * Muun_dVbs ; T2_dVd = T3 * Muun_dVds ; T2_dVg = T3 * Muun_dVgs ; Ey = sqrt( TY * TY + T2 * T2 ) ; T4 = 1.0 / Ey ; Ey_dVbs = T4 * ( TY * TY_dVbs + T2 * T2_dVb ) ; Ey_dVds = T4 * ( TY * TY_dVds + T2 * T2_dVd ) ; Ey_dVgs = T4 * ( TY * TY_dVgs + T2 * T2_dVg ) ; Em = Muun * Ey ; Em_dVbs = Muun_dVbs * Ey + Muun * Ey_dVbs ; Em_dVds = Muun_dVds * Ey + Muun * Ey_dVds ; Em_dVgs = Muun_dVgs * Ey + Muun * Ey_dVgs ; T1 = Em / Vmax ; Ey_suf = Ey ; Ey_suf_dVgs = Ey_dVgs ; Ey_suf_dVds = Ey_dVds ; Ey_suf_dVbs = Ey_dVbs ; /* note: model->HSM2_bb = 2 (electron) ;1 (hole) */ if ( 1.0e0 - epsm10 <= model->HSM2_bb && model->HSM2_bb <= 1.0e0 + epsm10 ) { T3 = 1.0e0 ; } else if ( 2.0e0 - epsm10 <= model->HSM2_bb && model->HSM2_bb <= 2.0e0 + epsm10 ) { T3 = T1 ; } else { T3 = Fn_Pow( T1 , model->HSM2_bb - 1.0e0 ) ; } T2 = T1 * T3 ; T4 = 1.0e0 + T2 ; if ( 1.0e0 - epsm10 <= model->HSM2_bb && model->HSM2_bb <= 1.0e0 + epsm10 ) { T5 = 1.0 / T4 ; T6 = T5 / T4 ; } else if ( 2.0e0 - epsm10 <= model->HSM2_bb && model->HSM2_bb <= 2.0e0 + epsm10 ) { T5 = 1.0 / sqrt( T4 ) ; T6 = T5 / T4 ; } else { T6 = Fn_Pow( T4 , ( - 1.0e0 / model->HSM2_bb - 1.0e0 ) ) ; T5 = T4 * T6 ; } T7 = Muun / Vmax * T6 * T3 ; Mu = Muun * T5 ; Mu_dVbs = Muun_dVbs * T5 - T7 * Em_dVbs ; Mu_dVds = Muun_dVds * T5 - T7 * Em_dVds ; Mu_dVgs = Muun_dVgs * T5 - T7 * Em_dVgs ; //-----------------------------------------------------------* //* resistor region current. (CGS unit) //*-----------------// if( Vdsorg > 1e-3 ) { T2 = q_Ndepm_esi / ( Cox * Cox ) ; T4 = - 2.0e0 * T2 / Cox ; T2_dVb = T4 * Cox_dVb ; T2_dVd = T4 * Cox_dVd ; T2_dVg = T4 * Cox_dVg ; T0 = Vgp + here->HSM2_depvdsef1 - beta_inv - Vbsz ; T0_dVg = Vgp_dVgs ; T0_dVd = Vgp_dVds - Vbsz_dVds ; T0_dVb = Vgp_dVbs - Vbsz_dVbs ; T4 = 1.0e0 + 2.0e0 / T2 * T0 ; T4_dVg = 2.0 / T2 * T0_dVg - 2.0 / T2 / T2 * T0 * T2_dVg ; T4_dVd = 2.0 / T2 * T0_dVd - 2.0 / T2 / T2 * T0 * T2_dVd ; T4_dVb = 2.0 / T2 * T0_dVb - 2.0 / T2 / T2 * T0 * T2_dVb ; Fn_SL_CP( T9 , T4 , 0 , DEPQFN_dlt, 2 , T0 ) T9_dVg = T4_dVg * T0 ; T9_dVd = T4_dVd * T0 ; T9_dVb = T4_dVb * T0 ; T9 = T9 + small ; T3 = sqrt( T9 ) ; T3_dVg = 0.5 / T3 * T9_dVg ; T3_dVd = 0.5 / T3 * T9_dVd ; T3_dVb = 0.5 / T3 * T9_dVb ; T10 = Vgp + here->HSM2_depvdsef1 + T2 * ( 1.0e0 - T3 ) ; T10 = T10 * here->HSM2_depvdsef2 ; T10_dVb = (Vgp_dVbs + T2_dVb * ( 1.0e0 - T3 ) - T2 * T3_dVb) * here->HSM2_depvdsef2 ; T10_dVd = (Vgp_dVds + T2_dVd * ( 1.0e0 - T3 ) - T2 * T3_dVd) * here->HSM2_depvdsef2 ; T10_dVg = (Vgp_dVgs + T2_dVg * ( 1.0e0 - T3 ) - T2 * T3_dVg) * here->HSM2_depvdsef2 ; Fn_SL_CP( T10 , T10 , here->HSM2_depleak, 1.0, 4 , T0 ) T10 = T10 + epsm10 ; T10_dVb *=T0 ; T10_dVd *=T0 ; T10_dVg *=T0 ; T1 = Vdsorg / T10 ; T2 = Fn_Pow( T1 , here->HSM2_ddlt - 1.0e0 ) ; T7 = T2 * T1 ; T0 = here->HSM2_ddlt * T2 / ( T10 * T10 ) ; T7_dVb = T0 * ( - Vdsorg * T10_dVb ) ; T7_dVd = T0 * ( T10 - Vdsorg * T10_dVd ) ; T7_dVg = T0 * ( - Vdsorg * T10_dVg ) ; T3 = 1.0 + T7 ; T4 = Fn_Pow( T3 , 1.0 / here->HSM2_ddlt - 1.0 ) ; T6 = T4 * T3 ; T0 = T4 / here->HSM2_ddlt ; T6_dVb = T0 * T7_dVb ; T6_dVd = T0 * T7_dVd ; T6_dVg = T0 * T7_dVg ; Vdseff0 = Vdsorg / T6 ; T0 = 1.0 / ( T6 * T6 ) ; Vdseff0_dVbs = - Vdsorg * T6_dVb * T0 ; Vdseff0_dVds = ( T6 - Vdsorg * T6_dVd ) * T0 ; Vdseff0_dVgs = - Vdsorg * T6_dVg * T0 ; } else { Vdseff0 = Vdsorg ; Vdseff0_dVgs = 0.0 ; Vdseff0_dVds = 1.0 ; Vdseff0_dVbs = 0.0 ; } T0 = here->HSM2_ninvd ; T4 = 1.0 + ( Pdsz ) * T0 ; T4_dVb = ( Pdsz_dVbs ) * T0 ; T4_dVd = ( Pdsz_dVds ) * T0 ; T4_dVg = ( Pdsz_dVgs ) * T0 ; Qiu = - Qn_res0 ; Qiu_dVgs = - Qn_res0_dVgs ; Qiu_dVds = - Qn_res0_dVds ; Qiu_dVbs = - Qn_res0_dVbs ; T5 = Qiu ; T5_dVb = Qiu_dVbs ; T5_dVd = Qiu_dVds ; T5_dVg = Qiu_dVgs ; T3 = T5 / T4 ; T3_dVb = ( - T4_dVb * T5 + T4 * T5_dVb ) / T4 / T4 ; T3_dVd = ( - T4_dVd * T5 + T4 * T5_dVd ) / T4 / T4 ; T3_dVg = ( - T4_dVg * T5 + T4 * T5_dVg ) / T4 / T4 ; Eeff = T3 ; Eeff_dVbs = T3_dVb ; Eeff_dVds = T3_dVd ; Eeff_dVgs = T3_dVg ; T5 = Fn_Pow( Eeff , model->HSM2_depmueph0 - 1.0e0 ) ; T8 = T5 * Eeff ; T9 = C_QE * C_m2cm_p2 ; Rns = Qiu / T9 ; T1 = 1.0e0 / ( here->HSM2_depmue0 + here->HSM2_depmue1 * Rns / 1.0e11 ) + here->HSM2_depmphn0 * T8 ; Muun = 1.0e0 / T1 ; T1 = 1.0e0 / ( T1 * T1 ) ; T2 = here->HSM2_depmue0 + here->HSM2_depmue1 * Rns / 1.0e11 ; T2 = 1.0e0 / ( T2 * T2 ) ; T3 = here->HSM2_depmphn1 * T5 ; T5 = - 1.0e-11 * here->HSM2_depmue1 / C_QE * T2 / C_m2cm_p2 ; Muun_dVbs = - ( T5 * Qiu_dVbs + Eeff_dVbs * T3 ) * T1 ; Muun_dVds = - ( T5 * Qiu_dVds + Eeff_dVds * T3 ) * T1 ; Muun_dVgs = - ( T5 * Qiu_dVgs + Eeff_dVgs * T3 ) * T1 ; /* Change to MKS unit */ Muun /=C_m2cm_p2 ; Muun_dVbs /=C_m2cm_p2 ; Muun_dVds /=C_m2cm_p2 ; Muun_dVgs /=C_m2cm_p2 ; Edri = Vdseff0 / Lch ; Edri_dVgs = Vdseff0_dVgs / Lch ; Edri_dVds = Vdseff0_dVds / Lch ; Edri_dVbs = Vdseff0_dVbs / Lch ; T1 = Muun * Edri / here->HSM2_depvmax ; T1_dVgs = (Muun_dVgs * Edri + Muun * Edri_dVgs) / here->HSM2_depvmax ; T1_dVds = (Muun_dVds * Edri + Muun * Edri_dVds) / here->HSM2_depvmax ; T1_dVbs = (Muun_dVbs * Edri + Muun * Edri_dVbs) / here->HSM2_depvmax ; T1 = T1 + small ; T2 = Fn_Pow(T1,model->HSM2_depbb) ; T2_dVgs = model->HSM2_depbb * T1_dVgs / T1 * T2 ; T2_dVds = model->HSM2_depbb * T1_dVds / T1 * T2 ; T2_dVbs = model->HSM2_depbb * T1_dVbs / T1 * T2 ; T3 = 1.0 + T2 ; T4 = Fn_Pow(T3,1.0 / model->HSM2_depbb) ; T4_dVgs = 1.0 / model->HSM2_depbb * T2_dVgs / T3 * T4 ; T4_dVds = 1.0 / model->HSM2_depbb * T2_dVds / T3 * T4 ; T4_dVbs = 1.0 / model->HSM2_depbb * T2_dVbs / T3 * T4 ; Mu_res = Muun / T4 ; Mu_res_dVgs = Muun_dVgs / T4 - Muun / T4 / T4 * T4_dVgs ; Mu_res_dVds = Muun_dVds / T4 - Muun / T4 / T4 * T4_dVds ; Mu_res_dVbs = Muun_dVbs / T4 - Muun / T4 / T4 * T4_dVbs ; Ids_res = here->HSM2_weff_nf * ( - Qn_res0) * Mu_res * Edri ; Ids_res_dVgs = here->HSM2_weff_nf * ( - Qn_res0_dVgs * Mu_res * Edri - Qn_res0 * Mu_res_dVgs * Edri - Qn_res0 * Mu_res * Edri_dVgs) ; Ids_res_dVds = here->HSM2_weff_nf * ( - Qn_res0_dVds * Mu_res * Edri - Qn_res0 * Mu_res_dVds * Edri - Qn_res0 * Mu_res * Edri_dVds) ; Ids_res_dVbs = here->HSM2_weff_nf * ( - Qn_res0_dVbs * Mu_res * Edri - Qn_res0 * Mu_res_dVbs * Edri - Qn_res0 * Mu_res * Edri_dVbs) ; //-----------------------------------------------------------* //* back region universal mobility. (CGS unit) //*-----------------// T0 = here->HSM2_ninvd ; T4 = 1.0 + ( Pdsz ) * T0 ; T4_dVb = ( Pdsz_dVbs ) * T0 ; T4_dVd = ( Pdsz_dVds ) * T0 ; T4_dVg = ( Pdsz_dVgs ) * T0 ; Qiu = - Qn_bac0 ; Qiu_dVgs = - Qn_bac0_dVgs ; Qiu_dVds = - Qn_bac0_dVds ; Qiu_dVbs = - Qn_bac0_dVbs ; T5 = Qiu ; T5_dVb = Qiu_dVbs ; T5_dVd = Qiu_dVds ; T5_dVg = Qiu_dVgs ; T3 = T5 / T4 ; T3_dVb = ( - T4_dVb * T5 + T4 * T5_dVb ) / T4 / T4 ; T3_dVd = ( - T4_dVd * T5 + T4 * T5_dVd ) / T4 / T4 ; T3_dVg = ( - T4_dVg * T5 + T4 * T5_dVg ) / T4 / T4 ; Eeff = T3 ; Eeff_dVbs = T3_dVb ; Eeff_dVds = T3_dVd ; Eeff_dVgs = T3_dVg ; T5 = Fn_Pow( Eeff , model->HSM2_depmueph0 - 1.0e0 ) ; T8 = T5 * Eeff ; T9 = C_QE * C_m2cm_p2 ; Rns = Qiu / T9 ; T1 = 1.0e0 / ( here->HSM2_depmueback0 + here->HSM2_depmueback1 * Rns / 1.0e11 ) + here->HSM2_depmphn0 * T8 ; Muun = 1.0e0 / T1 ; T1 = 1.0e0 / ( T1 * T1 ) ; T2 = here->HSM2_depmueback0 + here->HSM2_depmueback1 * Rns / 1.0e11 ; T2 = 1.0e0 / ( T2 * T2 ) ; T3 = here->HSM2_depmphn1 * T5 ; T5 = - 1.0e-11 * here->HSM2_depmueback1 / C_QE * T2 / C_m2cm_p2 ; Muun_dVbs = - ( T5 * Qiu_dVbs + Eeff_dVbs * T3 ) * T1 ; Muun_dVds = - ( T5 * Qiu_dVds + Eeff_dVds * T3 ) * T1 ; Muun_dVgs = - ( T5 * Qiu_dVgs + Eeff_dVgs * T3 ) * T1 ; /* Change to MKS unit */ Muun /=C_m2cm_p2 ; Muun_dVbs /=C_m2cm_p2 ; Muun_dVds /=C_m2cm_p2 ; Muun_dVgs /=C_m2cm_p2 ; Edri = Vdseff0 / Lch ; Edri_dVgs = Vdseff0_dVgs / Lch ; Edri_dVds = Vdseff0_dVds / Lch ; Edri_dVbs = Vdseff0_dVbs / Lch ; T1 = Muun * Edri / here->HSM2_depvmax ; T1_dVgs = (Muun_dVgs * Edri + Muun * Edri_dVgs) / here->HSM2_depvmax ; T1_dVds = (Muun_dVds * Edri + Muun * Edri_dVds) / here->HSM2_depvmax ; T1_dVbs = (Muun_dVbs * Edri + Muun * Edri_dVbs) / here->HSM2_depvmax ; T1 = T1 + small ; T2 = Fn_Pow(T1,model->HSM2_depbb) ; T2_dVgs = model->HSM2_depbb * T1_dVgs / T1 * T2 ; T2_dVds = model->HSM2_depbb * T1_dVds / T1 * T2 ; T2_dVbs = model->HSM2_depbb * T1_dVbs / T1 * T2 ; T3 = 1.0 + T2 ; T4 = Fn_Pow(T3,1.0 / model->HSM2_depbb) ; T4_dVgs = 1.0 / model->HSM2_depbb * T2_dVgs / T3 * T4 ; T4_dVds = 1.0 / model->HSM2_depbb * T2_dVds / T3 * T4 ; T4_dVbs = 1.0 / model->HSM2_depbb * T2_dVbs / T3 * T4 ; Mu_bac = Muun / T4 ; Mu_bac_dVgs = Muun_dVgs / T4 - Muun / T4 / T4 * T4_dVgs ; Mu_bac_dVds = Muun_dVds / T4 - Muun / T4 / T4 * T4_dVds ; Mu_bac_dVbs = Muun_dVbs / T4 - Muun / T4 / T4 * T4_dVbs ; Ids_bac = here->HSM2_weff_nf * ( - Qn_bac0) * Mu_bac * Edri ; Ids_bac_dVgs = here->HSM2_weff_nf * ( - Qn_bac0_dVgs * Mu_bac * Edri - Qn_bac0 * Mu_bac_dVgs * Edri - Qn_bac0 * Mu_bac * Edri_dVgs) ; Ids_bac_dVds = here->HSM2_weff_nf * ( - Qn_bac0_dVds * Mu_bac * Edri - Qn_bac0 * Mu_bac_dVds * Edri - Qn_bac0 * Mu_bac * Edri_dVds) ; Ids_bac_dVbs = here->HSM2_weff_nf * ( - Qn_bac0_dVbs * Mu_bac * Edri - Qn_bac0 * Mu_bac_dVbs * Edri - Qn_bac0 * Mu_bac * Edri_dVbs) ; /*-----------------------------------------------------------* * Ids: channel current. *-----------------*/ betaWL = here->HSM2_weff_nf * beta_inv / Lch ; T1 = - betaWL / Lch ; Ids0 = betaWL * Idd * Mu + Ids_res + Ids_bac ; Ids0_dVgs = betaWL * ( Idd_dVgs * Mu + Idd * Mu_dVgs ) + Ids_res_dVgs + Ids_bac_dVgs ; Ids0_dVds = betaWL * ( Idd_dVds * Mu + Idd * Mu_dVds ) + Ids_res_dVds + Ids_bac_dVds ; Ids0_dVbs = betaWL * ( Idd_dVbs * Mu + Idd * Mu_dVbs ) + Ids_res_dVbs + Ids_bac_dVbs ; // Vdseff // Vds = Vdsorg; /*-----------------------------------------------------------* * Adding parasitic components to the channel current. *-----------------*/ if( model->HSM2_ptl != 0 ){ T1 = 0.5 * ( Vds - Pds ) ; Fn_SymAdd( T6 , T1 , 0.01 , T2 ) ; T2 = T2 * 0.5 ; T6_dVb = T2 * ( - Pds_dVbs ) ; T6_dVd = T2 * ( 1.0 - Pds_dVds ) ; T6_dVg = T2 * ( - Pds_dVgs ) ; T1 = 1.1 - ( phi_s0_DEP + T6 ); T1_dVb = - ( phi_s0_DEP_dVbs + T6_dVb ); T1_dVd = - ( phi_s0_DEP_dVds + T6_dVd ); T1_dVg = - ( phi_s0_DEP_dVgs + T6_dVg ); Fn_SZ( T2 , T1 , 0.05 , T0 ) ; T2 = T2 + small ; T2_dVb = T1_dVb * T0 ; T2_dVd = T1_dVd * T0 ; T2_dVg = T1_dVg * T0 ; T0 = beta * here->HSM2_ptl0 ; T3 = Cox * T0 ; T3_dVb = Cox_dVb * T0 ; T3_dVd = Cox_dVd * T0 ; T3_dVg = Cox_dVg * T0 ; T0 = pow( T2 , model->HSM2_ptp ) ; T9 = T3 * T0 ; T9_dVb = T3 * model->HSM2_ptp * T0 / T2 * T2_dVb + T3_dVb * T0 ; T9_dVd = T3 * model->HSM2_ptp * T0 / T2 * T2_dVd + T3_dVd * T0 ; T9_dVg = T3 * model->HSM2_ptp * T0 / T2 * T2_dVg + T3_dVg * T0 ; T4 = 1.0 + Vdsz * model->HSM2_pt2 ; T4_dVb = Vdsz_dVbs * model->HSM2_pt2 ; T4_dVd = Vdsz_dVds * model->HSM2_pt2 ; T4_dVg = 0.0 ; T0 = here->HSM2_pt40 ; T5 = phi_s0_DEP + T6 - Vbsz ; T5_dVb = phi_s0_DEP_dVbs + T6_dVb - Vbsz_dVbs ; T5_dVd = phi_s0_DEP_dVds + T6_dVd - Vbsz_dVds ; T5_dVg = phi_s0_DEP_dVgs + T6_dVg ; T4 = T4 + Vdsz * T0 * T5 ; T4_dVb = T4_dVb + Vdsz * T0 * T5_dVb + Vdsz_dVbs * T0 * T5 ; T4_dVd = T4_dVd + Vdsz * T0 * T5_dVd + Vdsz_dVds * T0 * T5 ; T4_dVg = T4_dVg + Vdsz * T0 * T5_dVg ; T6 = T9 * T4 ; T9_dVb = T9_dVb * T4 + T9 * T4_dVb ; T9_dVd = T9_dVd * T4 + T9 * T4_dVd ; T9_dVg = T9_dVg * T4 + T9 * T4_dVg ; T9 = T6 ; } else { T9 = 0.0 ; T9_dVb = 0.0 ; T9_dVd = 0.0 ; T9_dVg = 0.0 ; } if( model->HSM2_gdl != 0 ){ T1 = beta * here->HSM2_gdl0 ; T2 = Cox * T1 ; T2_dVb = Cox_dVb * T1 ; T2_dVd = Cox_dVd * T1 ; T2_dVg = Cox_dVg * T1 ; T8 = T2 * Vdsz ; T8_dVb = T2_dVb * Vdsz + T2 * Vdsz_dVbs ; T8_dVd = T2_dVd * Vdsz + T2 * Vdsz_dVds ; T8_dVg = T2_dVg * Vdsz ; } else { T8 = 0.0 ; T8_dVb = 0.0 ; T8_dVd = 0.0 ; T8_dVg = 0.0 ; } if ( ( T9 + T8 ) > 0.0 ) { Idd1 = Pds * ( T9 + T8 ) ; Idd1_dVbs = Pds_dVbs * ( T9 + T8 ) + Pds * ( T9_dVb + T8_dVb ) ; Idd1_dVds = Pds_dVds * ( T9 + T8 ) + Pds * ( T9_dVd + T8_dVd ) ; Idd1_dVgs = Pds_dVgs * ( T9 + T8 ) + Pds * ( T9_dVg + T8_dVg ) ; Ids0 = Ids0 +betaWL * Idd1 * Mu ; T1 = betaWL * Idd1 ; T2 = Idd1 * Mu ; T3 = Mu * betaWL ; Ids0_dVbs +=T3 * Idd1_dVbs + T1 * Mu_dVbs + T2 * betaWL_dVbs ; Ids0_dVds +=T3 * Idd1_dVds + T1 * Mu_dVds + T2 * betaWL_dVds ; Ids0_dVgs +=T3 * Idd1_dVgs + T1 * Mu_dVgs + T2 * betaWL_dVgs ; } /* Ids calculation */ if ( flg_rsrd == 2 ) { Rd = here->HSM2_rd ; T0 = Rd * Ids0 ; T1 = Vds + small ; T2 = 1.0 / T1 ; T3 = 1.0 + T0 * T2 ; T3_dVb = Rd * Ids0_dVbs * T2 ; T3_dVd = ( Rd * Ids0_dVds * T1 - T0 ) * T2 * T2 ; T3_dVg = Rd * Ids0_dVgs * T2 ; T4 = 1.0 / T3 ; Ids = Ids0 * T4 ; T5 = T4 * T4 ; Ids_dVbs = ( Ids0_dVbs * T3 - Ids0 * T3_dVb ) * T5 ; Ids_dVds = ( Ids0_dVds * T3 - Ids0 * T3_dVd ) * T5 ; Ids_dVgs = ( Ids0_dVgs * T3 - Ids0 * T3_dVg ) * T5 ; } else { Ids = Ids0 ; Ids_dVbs = Ids0_dVbs ; Ids_dVds = Ids0_dVds ; Ids_dVgs = Ids0_dVgs ; } /* charge calculation */ /*---------------------------------------------------* * Qbu : - Qb in unit area. *-----------------*/ Qbu = - 0.5 * (Q_sub0 + Q_subL + Q_sub0_dep + Q_subL_dep ) ; Qbu_dVgs = - 0.5 * ( Q_sub0_dVgs + Q_subL_dVgs + Q_sub0_dep_dVgs + Q_subL_dep_dVgs ) ; Qbu_dVds = - 0.5 * ( Q_sub0_dVds + Q_subL_dVds + Q_sub0_dep_dVds + Q_subL_dep_dVds ) ; Qbu_dVbs = - 0.5 * ( Q_sub0_dVbs + Q_subL_dVbs + Q_sub0_dep_dVbs + Q_subL_dep_dVbs ) ; Qiu = - 0.5 * (Q_n0 + Q_nL + Q_s0_dep + Q_sL_dep + Q_b0_dep + Q_bL_dep) ; Qiu_dVgs = - 0.5 * ( Q_n0_dVgs + Q_nL_dVgs + Q_s0_dep_dVgs + Q_sL_dep_dVgs + Q_b0_dep_dVgs + Q_bL_dep_dVgs ) ; Qiu_dVds = - 0.5 * ( Q_n0_dVds + Q_nL_dVds + Q_s0_dep_dVds + Q_sL_dep_dVds + Q_b0_dep_dVds + Q_bL_dep_dVds ) ; Qiu_dVbs = - 0.5 * ( Q_n0_dVbs + Q_nL_dVbs + Q_s0_dep_dVbs + Q_sL_dep_dVbs + Q_b0_dep_dVbs + Q_bL_dep_dVbs ) ; Qdrat = 0.5; Qdrat_dVgs = 0.0 ; Qdrat_dVds = 0.0 ; Qdrat_dVbs = 0.0 ; /*-------------------------------------------------* * set flg_noqi , Qn0 , Ey for noise calc. *-----------------*/ Qiu_noi = - 0.5 * (Q_n0 + Q_nL ) ; Qn0 = - Q_n0 ; Qn0_dVgs = - Q_n0_dVgs ; Qn0_dVds = - Q_n0_dVds ; Qn0_dVbs = - Q_n0_dVbs ; Ey = Ey_suf ; Ey_dVbs = Ey_suf_dVbs ; Ey_dVds = Ey_suf_dVds ; Ey_dVgs = Ey_suf_dVgs ; if( Qn0 < small ) { flg_noqi = 1; } } /* End of hsmhveval_dep */ tmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2mdel.c0000644000175000017500000000463413546075722022244 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM ( VERSION : 2 SUBVERSION : 8 REVISION : 0 ) FILE : hsm2mdel.c Date : 2014.6.5 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HiSIM2 Distribution Statement and Copyright Notice" attached to HiSIM2 model. -----HiSIM2 Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaim all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." *************************************************************************/ #include "ngspice/ngspice.h" #include "hsm2def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HSM2mDelete(GENmodel *gen_model) { NG_IGNORE(gen_model); #ifdef USE_OMP HSM2model *model = (HSM2model *) gen_model; FREE(model->HSM2InstanceArray); #endif return OK; } tmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2trunc.c0000644000175000017500000000576013546075722022457 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM ( VERSION : 2 SUBVERSION : 8 REVISION : 0 ) FILE : hsm2trunc.c Date : 2014.6.5 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HiSIM2 Distribution Statement and Copyright Notice" attached to HiSIM2 model. -----HiSIM2 Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaim all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." *************************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "hsm2def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HSM2trunc( GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { HSM2model *model = (HSM2model*)inModel; HSM2instance *here; #ifdef STEPDEBUG double debugtemp; #endif /* STEPDEBUG */ for ( ;model != NULL ;model = HSM2nextModel(model)) { for ( here=HSM2instances(model);here!=NULL ; here = HSM2nextInstance(here)) { #ifdef STEPDEBUG debugtemp = *timeStep; #endif /* STEPDEBUG */ CKTterr(here->HSM2qb,ckt,timeStep); CKTterr(here->HSM2qg,ckt,timeStep); CKTterr(here->HSM2qd,ckt,timeStep); #ifdef STEPDEBUG if ( debugtemp != *timeStep ) printf("device %s reduces step from %g to %g\n", here->HSM2name, debugtemp, *timeStep); #endif /* STEPDEBUG */ } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2.c0000644000175000017500000013374613546075722021411 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM ( VERSION : 2 SUBVERSION : 8 REVISION : 0 ) FILE : hsm2.c Date : 2014.6.5 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HiSIM2 Distribution Statement and Copyright Notice" attached to HiSIM2 model. -----HiSIM2 Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaim all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." *************************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "hsm2def.h" #include "ngspice/suffix.h" IFparm HSM2pTable[] = { /* parameters */ IOP( "l", HSM2_L, IF_REAL , "Length"), IOP( "w", HSM2_W, IF_REAL , "Width"), IOP( "ad", HSM2_AD, IF_REAL , "Drain area"), IOP( "as", HSM2_AS, IF_REAL , "Source area"), IOP( "pd", HSM2_PD, IF_REAL , "Drain perimeter"), IOP( "ps", HSM2_PS, IF_REAL , "Source perimeter"), IOP( "nrd", HSM2_NRD, IF_REAL , "Number of squares in drain"), IOP( "nrs", HSM2_NRS, IF_REAL , "Number of squares in source"), IOP( "temp", HSM2_TEMP, IF_REAL , "Lattice temperature [K]"), IOP( "dtemp", HSM2_DTEMP,IF_REAL , ""), IOP( "off", HSM2_OFF, IF_FLAG , "Device is initially off"), IP ( "ic", HSM2_IC, IF_REALVEC , "Vector of DS,GS,BS initial voltages"), IOP("corbnet", HSM2_CORBNET, IF_INTEGER, "activate body resistance (1) or not (0)"), IOP("rbpb", HSM2_RBPB, IF_REAL, ""), IOP("rbpd", HSM2_RBPD, IF_REAL, ""), IOP("rbps", HSM2_RBPS, IF_REAL, ""), IOP("rbdb", HSM2_RBDB, IF_REAL, ""), IOP("rbsb", HSM2_RBSB, IF_REAL, ""), IOP("corg", HSM2_CORG, IF_INTEGER, "activate gate resistance (1) or not (0)"), /* IOP("rshg", HSM2_RSHG, IF_REAL, "gate-elecrode sheet resistance"), */ IOP("ngcon", HSM2_NGCON, IF_REAL, "number of gate contacts"), IOP("xgw", HSM2_XGW, IF_REAL, "distance from gate contact to channel edge"), IOP("xgl", HSM2_XGL, IF_REAL, "offset of gate length due to variation in patterning"), IOP("nf", HSM2_NF, IF_REAL, "number of fingers"), IOP("sa", HSM2_SA, IF_REAL, "distance from STI edge to Gate edge [m]"), IOP("sb", HSM2_SB, IF_REAL, "distance from STI edge to Gate edge [m]"), IOP("sd", HSM2_SD, IF_REAL, "distance from Gate edge to Gate edge [m]"), IOP("nsubcdfm", HSM2_NSUBCDFM, IF_REAL, "constant part of Nsub for DFM [1/cm^3]"), IOP("mphdfm", HSM2_MPHDFM, IF_REAL, "NSUBCDFM dependence of phonon scattering for DFM"), IOP("m", HSM2_M, IF_REAL, "Multiplication factor [-]"), /* WPE */ IOP("sca", HSM2_SCA, IF_REAL, "WPE sca"), IOP("scb", HSM2_SCB, IF_REAL, "WPE scb"), IOP("scc", HSM2_SCC, IF_REAL, "WPE scc"), /* Output Physical Values: */ OP ( "ids", HSM2_CD, IF_REAL , "Ids"), /* Drain-Source current */ OP ( "isub", HSM2_ISUB, IF_REAL , "Isub"), /* Substrate current */ OP ( "igidl", HSM2_IGIDL, IF_REAL , "Igidl"), /* Gate-Induced Drain Leakage current */ OP ( "igisl", HSM2_IGISL, IF_REAL , "Igisl"), /* Gate-Induced Source Leakage current */ OP ( "igd", HSM2_IGD, IF_REAL , "Igd"), /* Gate-Drain current */ OP ( "igs", HSM2_IGS, IF_REAL , "Igs"), /* Gate-Source current */ OP ( "igb", HSM2_IGB, IF_REAL , "Igb"), /* Gate-Substrate current */ OP ( "gm", HSM2_GM, IF_REAL , "Gm"), /* Transconductance */ OP ( "gds", HSM2_GDS, IF_REAL , "Gds"), /* Channel conductance */ OP ( "gmbs", HSM2_GMBS, IF_REAL , "Gmbs"), /* Body effect (Back gate) transconductance */ OP ( "von", HSM2_VON, IF_REAL , "Von"), /* Threshold voltage */ OP ( "vdsat", HSM2_VDSAT, IF_REAL , "Vdsat"), /* Saturation voltage */ OP ( "qb", HSM2_QB, IF_REAL , "Qb"), /* Bulk charge */ OP ( "qg", HSM2_QG, IF_REAL , "Qg"), /* Gate charge */ OP ( "qd", HSM2_QD, IF_REAL , "Qd"), /* Drain charge */ OP ( "cgg", HSM2_CGG, IF_REAL , "Cgg"), /* MOSFET capacitance */ OP ( "cgd", HSM2_CGD, IF_REAL , "Cgd"), /* MOSFET capacitance */ OP ( "cgs", HSM2_CGS, IF_REAL , "Cgs"), /* MOSFET capacitance */ OP ( "cbg", HSM2_CBG, IF_REAL , "Cbg"), /* MOSFET capacitance */ OP ( "cbs", HSM2_CBSB, IF_REAL , "Cbs"), /* MOSFET capacitance */ OP ( "cbd", HSM2_CBDB, IF_REAL , "Cbd"), /* MOSFET capacitance */ OP ( "cdg", HSM2_CDG, IF_REAL , "Cdg"), /* MOSFET capacitance */ OP ( "cdd", HSM2_CDD, IF_REAL , "Cdd"), /* MOSFET capacitance */ OP ( "cds", HSM2_CDS, IF_REAL , "Cds"), /* MOSFET capacitance */ OP ( "cgdo", HSM2_CGDO, IF_REAL , "Cgdo"), /* MOSFET overlap capacitance */ OP ( "cgso", HSM2_CGSO, IF_REAL , "Cgso"), /* MOSFET overlap capacitance */ OP ( "cgbo", HSM2_CGBO, IF_REAL , "Cgbo"), /* MOSFET overlap capacitance */ OP ( "ibd", HSM2_CBD, IF_REAL , "Ibd"), /* Diode current */ OP ( "ibs", HSM2_CBS, IF_REAL , "Ibs"), /* Diode current */ OP ( "gbd", HSM2_GBD, IF_REAL , "Gbd"), /* Diode conductance */ OP ( "gbs", HSM2_GBS, IF_REAL , "Gbs"), /* Diode conductance */ OP ( "capbd", HSM2_CAPBD, IF_REAL , "Capbd"), /* Diode capacitance */ OP ( "capbs", HSM2_CAPBS, IF_REAL , "Capbs") /* Diode capacitance */ }; IFparm HSM2mPTable[] = { /* model parameters */ IP("nmos", HSM2_MOD_NMOS, IF_FLAG, ""), IP("pmos", HSM2_MOD_PMOS, IF_FLAG, ""), IOP("level", HSM2_MOD_LEVEL, IF_INTEGER, ""), IOP("info", HSM2_MOD_INFO, IF_INTEGER, "information level (for debug, etc.)"), IOP("noise", HSM2_MOD_NOISE, IF_INTEGER, "noise model selector"), IOP("version", HSM2_MOD_VERSION, IF_INTEGER, "model version 280"), IOP("show", HSM2_MOD_SHOW, IF_INTEGER, "show physical value"), IOP("corsrd", HSM2_MOD_CORSRD, IF_INTEGER, "solve equations accounting Rs and Rd."), IOP("corg", HSM2_MOD_CORG, IF_INTEGER, "solve equations accounting Rg."), IOP("coiprv", HSM2_MOD_COIPRV, IF_INTEGER, "use ids_prv as initial guess of Ids (internal flag)"), IOP("copprv", HSM2_MOD_COPPRV, IF_INTEGER, "use ps{0/l}_prv as initial guess of Ps{0/l} (internal flag)"), IOP("coadov", HSM2_MOD_COADOV, IF_INTEGER, "add overlap to intrisic"), IOP("coisub", HSM2_MOD_COISUB, IF_INTEGER, "calculate isub"), IOP("coiigs", HSM2_MOD_COIIGS, IF_INTEGER, "calculate igate"), IOP("cogidl", HSM2_MOD_COGIDL, IF_INTEGER, "calculate igidl"), IOP("coovlp", HSM2_MOD_COOVLP, IF_INTEGER, "calculate overlap charge"), IOP("coflick", HSM2_MOD_COFLICK, IF_INTEGER, "calculate 1/f noise"), IOP("coisti", HSM2_MOD_COISTI, IF_INTEGER, "calculate STI"), IOP("conqs", HSM2_MOD_CONQS, IF_INTEGER, "calculate in nqs mode or qs mode"), IOP("corbnet", HSM2_MOD_CORBNET, IF_INTEGER, ""), IOP("cothrml", HSM2_MOD_COTHRML, IF_INTEGER, "calculate thermal noise"), IOP("coign", HSM2_MOD_COIGN, IF_INTEGER, "calculate induced gate noise"), IOP("codfm", HSM2_MOD_CODFM, IF_INTEGER, "calculation of model for DFM"), IOP("corecip", HSM2_MOD_CORECIP, IF_INTEGER, "capacitance reciprocity takes first priority"), IOP("coqy", HSM2_MOD_COQY, IF_INTEGER, "calculate lateral-field-induced charge/capacitance"), IOP("coqovsm", HSM2_MOD_COQOVSM, IF_INTEGER, "select smoothing method of Qover"), IOP("coerrrep", HSM2_MOD_COERRREP, IF_INTEGER, "selector for error report"), IOP("codep", HSM2_MOD_CODEP, IF_INTEGER, "selector for depletion device"), IOP("coddlt", HSM2_MOD_CODDLT, IF_INTEGER, "selector for ddlt model "), IOP("vmax", HSM2_MOD_VMAX, IF_REAL, "saturation velocity [cm/s]"), IOP("bgtmp1", HSM2_MOD_BGTMP1, IF_REAL, "first order temp. coeff. for band gap [V/K]"), IOP("bgtmp2", HSM2_MOD_BGTMP2, IF_REAL, "second order temp. coeff. for band gap [V/K^2]"), IOP("eg0", HSM2_MOD_EG0, IF_REAL, ""), IOP("tox", HSM2_MOD_TOX, IF_REAL, "oxide thickness [m]"), IOP("xld", HSM2_MOD_XLD, IF_REAL, "lateral diffusion of S/D under the gate [m]"), IOP("lover", HSM2_MOD_LOVER, IF_REAL, "overlap length"), IOP("ddltmax", HSM2_MOD_DDLTMAX, IF_REAL, ""), /* Vdseff */ IOP("ddltslp", HSM2_MOD_DDLTSLP, IF_REAL, ""), /* Vdseff */ IOP("ddltict", HSM2_MOD_DDLTICT, IF_REAL, ""), /* Vdseff */ IOP("vfbover", HSM2_MOD_VFBOVER, IF_REAL, ""), IOP("nover", HSM2_MOD_NOVER, IF_REAL, ""), IOP("xwd", HSM2_MOD_XWD, IF_REAL, "lateral diffusion along the width dir. [m]"), IOP("xl", HSM2_MOD_XL, IF_REAL, "gate length offset due to mask/etch effect [m]"), IOP("xw", HSM2_MOD_XW, IF_REAL, "gate width offset due to mask/etch effect [m]"), IOP("saref", HSM2_MOD_SAREF, IF_REAL, "reference distance from STI edge to Gate edge [m]"), IOP("sbref", HSM2_MOD_SBREF, IF_REAL, "reference distance from STI edge to Gate edge [m]"), IOP("ll", HSM2_MOD_LL, IF_REAL, "gate length parameter"), IOP("lld", HSM2_MOD_LLD, IF_REAL, "gate length parameter"), IOP("lln", HSM2_MOD_LLN, IF_REAL, "gate length parameter"), IOP("wl", HSM2_MOD_WL, IF_REAL, "gate width parameter"), IOP("wl1", HSM2_MOD_WL1, IF_REAL, "gate width parameter"), IOP("wl1p", HSM2_MOD_WL1P, IF_REAL, "gate width parameter"), IOP("wl2", HSM2_MOD_WL2, IF_REAL, "gate width parameter"), IOP("wl2p", HSM2_MOD_WL2P, IF_REAL, "gate width parameter"), IOP("wld", HSM2_MOD_WLD, IF_REAL, "gate width parameter"), IOP("wln", HSM2_MOD_WLN, IF_REAL, "gate width parameter"), IOP("xqy", HSM2_MOD_XQY, IF_REAL, "[m]"), IOP("xqy1", HSM2_MOD_XQY1, IF_REAL, "[F m^{XQY2}]"), IOP("xqy2", HSM2_MOD_XQY2, IF_REAL, "[-]"), IOP("qyrat", HSM2_MOD_QYRAT, IF_REAL, ""), IOP("rs", HSM2_MOD_RS, IF_REAL, "source contact resistance [ohm m]"), IOP("rd", HSM2_MOD_RD, IF_REAL, "drain contact resistance [ohm m]"), IOP("rsh", HSM2_MOD_RSH, IF_REAL, "source/drain diffusion sheet resistance [ohm]"), IOP("rshg", HSM2_MOD_RSHG, IF_REAL, "gate-elecrode sheet resistance"), /* IOP("ngcon", HSM2_MOD_NGCON, IF_REAL, "number of gate contacts"), */ /* IOP("xgw", HSM2_MOD_XGW, IF_REAL, "distance from gate contact to channel edge"), */ /* IOP("xgl", HSM2_MOD_XGL, IF_REAL, "offset of gate length due to variation in patterning"), */ /* IOP("nf", HSM2_MOD_NF, IF_REAL, "number of fingers"), */ IOP("vfbc", HSM2_MOD_VFBC, IF_REAL, "constant part of Vfb [V]"), IOP("vbi", HSM2_MOD_VBI, IF_REAL, "built-in potential [V]"), IOP("nsubc", HSM2_MOD_NSUBC, IF_REAL, "constant part of Nsub [1/cm^3]"), IOP("vfbcl", HSM2_MOD_VFBCL, IF_REAL, "gate-length dependence of VFBC [um]"), IOP("vfbclp", HSM2_MOD_VFBCLP, IF_REAL, "gate-length dependence of VFBC [-]"), IOP("parl2", HSM2_MOD_PARL2, IF_REAL, "under diffusion [m]"), IOP("lp", HSM2_MOD_LP, IF_REAL, "length of pocket potential [m]"), IOP("nsubp", HSM2_MOD_NSUBP, IF_REAL, "[1/cm^3]"), IOP("nsubpl", HSM2_MOD_NSUBPL, IF_REAL, "gate-length dependence of NSUBP"), IOP("nsubpfac", HSM2_MOD_NSUBPFAC, IF_REAL, "gate-length dependence of NSUBP"), IOP("nsubpdlt", HSM2_MOD_NSUBPDLT, IF_REAL, "Delta for nsubp smoothing [-]"), IOP("nsubpw", HSM2_MOD_NSUBPW, IF_REAL, "pocket implant parameter"), IOP("nsubpwp", HSM2_MOD_NSUBPWP, IF_REAL, "pocket implant parameter"), IOP("scp1", HSM2_MOD_SCP1, IF_REAL, "parameter for pocket [-]"), IOP("scp2", HSM2_MOD_SCP2, IF_REAL, "parameter for pocket [1/V]"), IOP("scp3", HSM2_MOD_SCP3, IF_REAL, "parameter for pocket [m/V]"), IOP("sc1", HSM2_MOD_SC1, IF_REAL, "parameter for SCE [-]"), IOP("sc2", HSM2_MOD_SC2, IF_REAL, "parameter for SCE [1/V]"), IOP("sc3", HSM2_MOD_SC3, IF_REAL, "parameter for SCE [m/V]"), IOP("sc4", HSM2_MOD_SC4, IF_REAL, "parameter for SCE []"), IOP("pgd1", HSM2_MOD_PGD1, IF_REAL, "parameter for gate-poly depletion [V]"), IOP("pgd2", HSM2_MOD_PGD2, IF_REAL, "parameter for gate-poly depletion [V]"), //IOP("pgd3", HSM2_MOD_PGD3, IF_REAL, "parameter for gate-poly depletion [-]"), IOP("pgd4", HSM2_MOD_PGD4, IF_REAL, "parameter for gate-poly depletion [-]"), IOP("ndep", HSM2_MOD_NDEP, IF_REAL, "coeff. of Qbm for Eeff [-]"), IOP("ndepl", HSM2_MOD_NDEPL, IF_REAL, "coeff. of Qbm for Eeff [-]"), IOP("ndeplp", HSM2_MOD_NDEPLP, IF_REAL, "coeff. of Qbm for Eeff [-]"), IOP("ndepw", HSM2_MOD_NDEPW, IF_REAL, "coeff. of Qbm for Eeff [-]"), IOP("ndepwp", HSM2_MOD_NDEPWP, IF_REAL, "coeff. of Qbm for Eeff [-]"), IOP("ninv", HSM2_MOD_NINV, IF_REAL, "coeff. of Qnm for Eeff [-]"), IOP("ninvd", HSM2_MOD_NINVD, IF_REAL, "modification of Vdse dependence on Eeff [1/V]"), IOP("ninvdl", HSM2_MOD_NINVDL, IF_REAL, " LG dependence of NINVD "), IOP("ninvdlp", HSM2_MOD_NINVDLP, IF_REAL, " LG dependence of NINVD "), IOP("muecb0", HSM2_MOD_MUECB0, IF_REAL, "const. part of coulomb scattering [cm^2/Vs]"), IOP("muecb1", HSM2_MOD_MUECB1, IF_REAL, "coeff. for coulomb scattering [cm^2/Vs]"), IOP("mueph0", HSM2_MOD_MUEPH0, IF_REAL, "power of Eeff for phonon scattering [-]"), IOP("mueph1", HSM2_MOD_MUEPH1, IF_REAL, ""), IOP("muephw", HSM2_MOD_MUEPHW, IF_REAL, ""), IOP("muepwp", HSM2_MOD_MUEPWP, IF_REAL, "phonon scattering parameter"), IOP("muepwd", HSM2_MOD_MUEPWD, IF_REAL, "phonon scattering parameter"), IOP("muephl", HSM2_MOD_MUEPHL, IF_REAL, "phonon scattering parameter"), IOP("mueplp", HSM2_MOD_MUEPLP, IF_REAL, "phonon scattering parameter"), IOP("muepld", HSM2_MOD_MUEPLD, IF_REAL, "phonon scattering parameter"), IOP("muephs", HSM2_MOD_MUEPHS, IF_REAL, ""), IOP("muepsp", HSM2_MOD_MUEPSP, IF_REAL, ""), IOP("vtmp", HSM2_MOD_VTMP, IF_REAL, ""), IOP("wvth0", HSM2_MOD_WVTH0, IF_REAL, ""), IOP("muesr0", HSM2_MOD_MUESR0, IF_REAL, "power of Eeff for S.R. scattering [-]"), IOP("muesr1", HSM2_MOD_MUESR1, IF_REAL, "coeff. for S.R. scattering [-]"), IOP("muesrl", HSM2_MOD_MUESRL, IF_REAL, "surface roughness parameter"), IOP("muesrw", HSM2_MOD_MUESRW, IF_REAL, "change of surface roughness related mobility"), IOP("mueswp", HSM2_MOD_MUESWP, IF_REAL, "change of surface roughness related mobility"), IOP("mueslp", HSM2_MOD_MUESLP, IF_REAL, "surface roughness parameter"), IOP("muetmp", HSM2_MOD_MUETMP, IF_REAL, "parameter for mobility [-]"), IOP("bb", HSM2_MOD_BB, IF_REAL, "empirical mobility model coefficient [-]"), IOP("sub1", HSM2_MOD_SUB1, IF_REAL, "parameter for Isub [1/V]"), IOP("sub2", HSM2_MOD_SUB2, IF_REAL, "parameter for Isub [V]"), IOP("svgs", HSM2_MOD_SVGS, IF_REAL, "coefficient for Vg of Psislsat"), IOP("svbs", HSM2_MOD_SVBS, IF_REAL, "coefficient for Vbs of Psislsat"), IOP("svbsl", HSM2_MOD_SVBSL, IF_REAL, " "), IOP("svds", HSM2_MOD_SVDS, IF_REAL, " "), IOP("slg", HSM2_MOD_SLG, IF_REAL, " "), IOP("sub1l", HSM2_MOD_SUB1L, IF_REAL, " "), IOP("sub2l", HSM2_MOD_SUB2L, IF_REAL, " "), IOP("svgsl", HSM2_MOD_SVGSL, IF_REAL, " "), IOP("svgslp", HSM2_MOD_SVGSLP, IF_REAL, " "), IOP("svgswp", HSM2_MOD_SVGSWP, IF_REAL, " "), IOP("svgsw", HSM2_MOD_SVGSW, IF_REAL, " "), IOP("svbslp", HSM2_MOD_SVBSLP, IF_REAL, " "), IOP("slgl", HSM2_MOD_SLGL, IF_REAL, " "), IOP("slglp", HSM2_MOD_SLGLP, IF_REAL, " "), IOP("sub1lp", HSM2_MOD_SUB1LP, IF_REAL, " "), IOP("nsti", HSM2_MOD_NSTI, IF_REAL, "parameter for STI [1/cm^3]"), IOP("wsti", HSM2_MOD_WSTI, IF_REAL, "parameter for STI [m]"), IOP("wstil", HSM2_MOD_WSTIL, IF_REAL, "parameter for STI [?]"), IOP("wstilp", HSM2_MOD_WSTILP, IF_REAL, "parameter for STI [?]"), IOP("wstiw", HSM2_MOD_WSTIW, IF_REAL, "parameter for STI [?]"), IOP("wstiwp", HSM2_MOD_WSTIWP, IF_REAL, "parameter for STI [?]"), IOP("scsti1", HSM2_MOD_SCSTI1, IF_REAL, "parameter for STI [-]"), IOP("scsti2", HSM2_MOD_SCSTI2, IF_REAL, "parameter for STI [1/V]"), IOP("vthsti", HSM2_MOD_VTHSTI, IF_REAL, "parameter for STI"), IOP("vdsti", HSM2_MOD_VDSTI, IF_REAL, "parameter for STI [-]"), IOP("muesti1", HSM2_MOD_MUESTI1, IF_REAL, "STI Stress mobility parameter"), IOP("muesti2", HSM2_MOD_MUESTI2, IF_REAL, "STI Stress mobility parameter"), IOP("muesti3", HSM2_MOD_MUESTI3, IF_REAL, "STI Stress mobility parameter"), IOP("nsubpsti1", HSM2_MOD_NSUBPSTI1, IF_REAL, "STI Stress pocket impla parameter"), IOP("nsubpsti2", HSM2_MOD_NSUBPSTI2, IF_REAL, "STI Stress pocket impla parameter"), IOP("nsubpsti3", HSM2_MOD_NSUBPSTI3, IF_REAL, "STI Stress pocket impla parameter"), IOP("nsubcsti1", HSM2_MOD_NSUBCSTI1, IF_REAL, "STI Stress Parameter for Nsubc [-]"), IOP("nsubcsti2", HSM2_MOD_NSUBCSTI2, IF_REAL, "STI Stress Parameter for Nsubc [-]"), IOP("nsubcsti3", HSM2_MOD_NSUBCSTI3, IF_REAL, "STI Stress Parameter for Nsubc [-]"), IOP("lpext", HSM2_MOD_LPEXT, IF_REAL, "Pocket extension"), IOP("npext", HSM2_MOD_NPEXT, IF_REAL, "Pocket extension"), IOP("npextw", HSM2_MOD_NPEXTW, IF_REAL, "new model parameter NPEXTW"), IOP("npextwp", HSM2_MOD_NPEXTWP, IF_REAL, "new model parameter NPEXTWP"), IOP("scp22", HSM2_MOD_SCP22, IF_REAL, ""), IOP("scp21", HSM2_MOD_SCP21, IF_REAL, ""), IOP("bs1", HSM2_MOD_BS1, IF_REAL, ""), IOP("bs2", HSM2_MOD_BS2, IF_REAL, ""), IOP("cgso", HSM2_MOD_CGSO, IF_REAL, "G-S overlap capacitance per unit W [F/m]"), IOP("cgdo", HSM2_MOD_CGDO, IF_REAL, "G-D overlap capacitance per unit W [F/m]"), IOP("cgbo", HSM2_MOD_CGBO, IF_REAL, "G-B overlap capacitance per unit L [F/m]"), IOP("tpoly", HSM2_MOD_TPOLY, IF_REAL, "hight of poly gate [m]"), IOP("js0", HSM2_MOD_JS0, IF_REAL, "Saturation current density [A/m^2]"), IOP("js0sw", HSM2_MOD_JS0SW, IF_REAL, "Side wall saturation current density [A/m]"), IOP("nj", HSM2_MOD_NJ, IF_REAL, "Emission coefficient [-]"), IOP("njsw", HSM2_MOD_NJSW, IF_REAL, "Sidewall emission coefficient"), IOP("xti", HSM2_MOD_XTI, IF_REAL, "Junction current temparature exponent coefficient [-]"), IOP("cj", HSM2_MOD_CJ, IF_REAL, "Bottom junction capacitance per unit area at zero bias [F/m^2]"), IOP("cjsw", HSM2_MOD_CJSW, IF_REAL, "Source/drain sidewall junction capacitance grading coefficient per unit length at zero bias [F/m]"), IOP("cjswg", HSM2_MOD_CJSWG, IF_REAL, "Source/drain gate sidewall junction capacitance per unit length at zero bias [F/m]"), IOP("mj", HSM2_MOD_MJ, IF_REAL, "Bottom junction capacitance grading coefficient"), IOP("mjsw", HSM2_MOD_MJSW, IF_REAL, "Source/drain sidewall junction capacitance grading coefficient"), IOP("mjswg", HSM2_MOD_MJSWG, IF_REAL, "Source/drain gate sidewall junction capacitance grading coefficient"), IOP("pb", HSM2_MOD_PB, IF_REAL, "Bottom junction build-in potential [V]"), IOP("pbsw", HSM2_MOD_PBSW, IF_REAL, "Source/drain sidewall junction build-in potential [V]"), IOP("pbswg", HSM2_MOD_PBSWG, IF_REAL, "Source/drain gate sidewall junction build-in potential [V]"), IOP("tcjbd", HSM2_MOD_TCJBD, IF_REAL, "Temperature dependence of czbd"), IOP("tcjbs", HSM2_MOD_TCJBS, IF_REAL, "Temperature dependence of czbs"), IOP("tcjbdsw", HSM2_MOD_TCJBDSW, IF_REAL, "Temperature dependence of czbdsw"), IOP("tcjbssw", HSM2_MOD_TCJBSSW, IF_REAL, "Temperature dependence of czbssw"), IOP("tcjbdswg", HSM2_MOD_TCJBDSWG, IF_REAL, "Temperature dependence of czbdswg"), IOP("tcjbsswg", HSM2_MOD_TCJBSSWG, IF_REAL, "Temperature dependence of czbsswg"), IOP("xti2", HSM2_MOD_XTI2, IF_REAL, " temperature coefficient [-]"), IOP("cisb", HSM2_MOD_CISB, IF_REAL, " reverse bias saturation current [-]"), IOP("cvb", HSM2_MOD_CVB, IF_REAL, " bias dependence coefficient of cisb [-]"), IOP("ctemp", HSM2_MOD_CTEMP, IF_REAL, " temperature coefficient [-]"), IOP("cisbk", HSM2_MOD_CISBK, IF_REAL, " reverse bias saturation current [A]"), IOP("cvbk", HSM2_MOD_CVBK, IF_REAL, " bias dependence coefficient of cisb [-]"), IOP("divx", HSM2_MOD_DIVX, IF_REAL, " [1/V]"), IOP("clm1", HSM2_MOD_CLM1, IF_REAL, "parameter for CLM [-]"), IOP("clm2", HSM2_MOD_CLM2, IF_REAL, "parameter for CLM [1/m]"), IOP("clm3", HSM2_MOD_CLM3, IF_REAL, "parameter for CLM [-]"), IOP("clm5", HSM2_MOD_CLM5, IF_REAL, "parameter for CLM [-]"), IOP("clm6", HSM2_MOD_CLM6, IF_REAL, "parameter for CLM [um^{-clm5}]"), IOP("vover", HSM2_MOD_VOVER, IF_REAL, "parameter for overshoot [m^{voverp}]"), IOP("voverp", HSM2_MOD_VOVERP, IF_REAL, "parameter for overshoot [-]"), IOP("vovers", HSM2_MOD_VOVERS, IF_REAL, "parameter for overshoot [-]"), IOP("voversp", HSM2_MOD_VOVERSP, IF_REAL, "parameter for overshoot [-]"), IOP("wfc", HSM2_MOD_WFC, IF_REAL, "parameter for narrow channel effect [m*F/(cm^2)]"), IOP("nsubcw", HSM2_MOD_NSUBCW, IF_REAL, "Parameter for narrow channel effect "), IOP("nsubcwp", HSM2_MOD_NSUBCWP, IF_REAL, "Parameter for narrow channel effect "), IOP("nsubcmax", HSM2_MOD_NSUBCMAX, IF_REAL, "Parameter for narrow channel effect "), IOP("qme1", HSM2_MOD_QME1, IF_REAL, "parameter for quantum effect [mV]"), IOP("qme2", HSM2_MOD_QME2, IF_REAL, "parameter for quantum effect [V]"), IOP("qme3", HSM2_MOD_QME3, IF_REAL, "parameter for quantum effect [m]"), IOP("gidl1", HSM2_MOD_GIDL1, IF_REAL, "parameter for GIDL [?]"), IOP("gidl2", HSM2_MOD_GIDL2, IF_REAL, "parameter for GIDL [?]"), IOP("gidl3", HSM2_MOD_GIDL3, IF_REAL, "parameter for GIDL [?]"), IOP("gidl4", HSM2_MOD_GIDL4, IF_REAL, "parameter for GIDL [?]"), IOP("gidl5", HSM2_MOD_GIDL5, IF_REAL, "parameter for GIDL [?]"), IOP("gidl6", HSM2_MOD_GIDL6, IF_REAL, "parameter for GIDL [-]"), IOP("gidl7", HSM2_MOD_GIDL7, IF_REAL, "parameter for GIDL [-]"), IOP("gleak1", HSM2_MOD_GLEAK1, IF_REAL, "parameter for gate current [A*V^(-3/2)/C]"), IOP("gleak2", HSM2_MOD_GLEAK2, IF_REAL, "parameter for gate current [V^(-1/2)/m ]"), IOP("gleak3", HSM2_MOD_GLEAK3, IF_REAL, "parameter for gate current [-]"), IOP("gleak4", HSM2_MOD_GLEAK4, IF_REAL, "parameter for gate current [1/m]"), IOP("gleak5", HSM2_MOD_GLEAK5, IF_REAL, "parameter for gate current [V/m]"), IOP("gleak6", HSM2_MOD_GLEAK6, IF_REAL, "parameter for gate current [V]"), IOP("gleak7", HSM2_MOD_GLEAK7, IF_REAL, "parameter for gate current [m^2]"), IOP("glksd1", HSM2_MOD_GLKSD1, IF_REAL, "parameter for gate current [A*m/V^2]"), IOP("glksd2", HSM2_MOD_GLKSD2, IF_REAL, "parameter for gate current [1/(V*m)]"), IOP("glksd3", HSM2_MOD_GLKSD3, IF_REAL, "parameter for gate current [1/m]"), IOP("glkb1", HSM2_MOD_GLKB1, IF_REAL, "parameter for gate current [A/V^2]"), IOP("glkb2", HSM2_MOD_GLKB2, IF_REAL, "parameter for gate current [m/V]"), IOP("glkb3", HSM2_MOD_GLKB3, IF_REAL, "parameter for gate current [V]"), IOP("egig", HSM2_MOD_EGIG, IF_REAL, "parameter for gate current [V]"), IOP("igtemp2", HSM2_MOD_IGTEMP2, IF_REAL, "parameter for gate current [V*k]"), IOP("igtemp3", HSM2_MOD_IGTEMP3, IF_REAL, "parameter for gate current [V*k^2]"), IOP("vzadd0", HSM2_MOD_VZADD0, IF_REAL, "Vzadd at Vds=0 [V]"), IOP("pzadd0", HSM2_MOD_PZADD0, IF_REAL, "Pzadd at Vds=0 [V]"), IOP("nftrp", HSM2_MOD_NFTRP, IF_REAL, ""), IOP("nfalp", HSM2_MOD_NFALP, IF_REAL, ""), IOP("falph", HSM2_MOD_FALPH, IF_REAL, "parameter for 1/f noise"), IOP("cit", HSM2_MOD_CIT, IF_REAL, ""), IOP("kappa", HSM2_MOD_KAPPA, IF_REAL, "dielectric constant for high-k stacked gate"), IOP("vdiffj", HSM2_MOD_VDIFFJ, IF_REAL, "threshold voltage for S/D junction diode [V]"), IOP("dly1", HSM2_MOD_DLY1, IF_REAL, "parameter for transit time [-]"), IOP("dly2", HSM2_MOD_DLY2, IF_REAL, "parameter for transit time [-]"), IOP("dly3", HSM2_MOD_DLY3, IF_REAL, "parameter for trandforming bulk charge [s/F]"), IOP("tnom", HSM2_MOD_TNOM, IF_REAL, "nominal temperature [K]"), IOP("ovslp", HSM2_MOD_OVSLP, IF_REAL, ""), IOP("ovmag", HSM2_MOD_OVMAG, IF_REAL, ""), IOP("gbmin", HSM2_MOD_GBMIN, IF_REAL, ""), IOP("rbpb", HSM2_MOD_RBPB, IF_REAL, ""), IOP("rbpd", HSM2_MOD_RBPD, IF_REAL, ""), IOP("rbps", HSM2_MOD_RBPS, IF_REAL, ""), IOP("rbdb", HSM2_MOD_RBDB, IF_REAL, ""), IOP("rbsb", HSM2_MOD_RBSB, IF_REAL, ""), IOP("ibpc1", HSM2_MOD_IBPC1, IF_REAL, "parameter for Impact-Ionization Induced Bulk Potential Change"), IOP("ibpc2", HSM2_MOD_IBPC2, IF_REAL, "parameter for Impact-Ionization Induced Bulk Potential Change"), IOP("mphdfm", HSM2_MOD_MPHDFM, IF_REAL, "NSUBCDFM dependence of phonon scattering for DFM"), IOP("ptl", HSM2_MOD_PTL, IF_REAL, ""), IOP("ptp", HSM2_MOD_PTP, IF_REAL, ""), IOP("pt2", HSM2_MOD_PT2, IF_REAL, ""), IOP("ptlp", HSM2_MOD_PTLP, IF_REAL, ""), IOP("gdl", HSM2_MOD_GDL, IF_REAL, ""), IOP("gdlp", HSM2_MOD_GDLP, IF_REAL, ""), IOP("gdld", HSM2_MOD_GDLD, IF_REAL, ""), IOP("pt4", HSM2_MOD_PT4, IF_REAL, ""), IOP("pt4p", HSM2_MOD_PT4P, IF_REAL, ""), IOP("muephl2", HSM2_MOD_MUEPHL2, IF_REAL, ""), IOP("mueplp2", HSM2_MOD_MUEPLP2, IF_REAL, ""), IOP("nsubcw2", HSM2_MOD_NSUBCW2, IF_REAL, ""), IOP("nsubcwp2", HSM2_MOD_NSUBCWP2, IF_REAL, ""), IOP("muephw2", HSM2_MOD_MUEPHW2, IF_REAL, ""), IOP("muepwp2", HSM2_MOD_MUEPWP2, IF_REAL, ""), /* WPE */ IOP("web", HSM2_MOD_WEB, IF_REAL, "Description for the model parameter WPE web"), IOP("wec", HSM2_MOD_WEC, IF_REAL, "Description for the model parameter WPE wec"), IOP("nsubcwpe" , HSM2_MOD_NSUBCWPE, IF_REAL, "Description for the model parameter WPE nsubcwpe"), IOP("npextwpe" , HSM2_MOD_NPEXTWPE, IF_REAL, "Description for the model parameter WPE npextwpe"), IOP("nsubpwpe" , HSM2_MOD_NSUBPWPE, IF_REAL, "Description for the model parameter WPE nsubpwpe"), IOP("vgsmin", HSM2_MOD_VGSMIN, IF_REAL, "minimal/maximal expected Vgs (NMOS/PMOS) [V]"), IOP("sc3vbs", HSM2_MOD_SC3VBS, IF_REAL, "Vbs value for clamping sc3 [V]"), IOP("byptol", HSM2_MOD_BYPTOL, IF_REAL, "BYP_TOL_FACTOR for bypass control"), IOP("muecb0lp", HSM2_MOD_MUECB0LP, IF_REAL, "L dependence of MUECB0"), IOP("muecb1lp", HSM2_MOD_MUECB1LP, IF_REAL, "L dependence of MUECB1"), /* Depletion Mode MOSFET */ IOP("ndepm", HSM2_MOD_NDEPM, IF_REAL, "N- layer concentlation of the depletion MOS model"), IOP("ndepml", HSM2_MOD_NDEPML, IF_REAL, "L dependence of NDEPM "), IOP("ndepmlp", HSM2_MOD_NDEPMLP, IF_REAL, "L dependence of NDEPM "), IOP("tndep", HSM2_MOD_TNDEP, IF_REAL, "N- layer depth of the depletion MOS model"), IOP("depleak", HSM2_MOD_DEPLEAK, IF_REAL, "leakage current modification parameter for the depletion MOS model"), IOP("depleakl", HSM2_MOD_DEPLEAKL, IF_REAL, "L dependence of DEPLEAK"), IOP("depleaklp", HSM2_MOD_DEPLEAKLP, IF_REAL, "L dependence of DEPLEAK"), IOP("depeta", HSM2_MOD_DEPETA, IF_REAL, "Vds dependence of threshold voltage for the depletion MOS model"), IOP("depmue0", HSM2_MOD_DEPMUE0, IF_REAL, " [-]"), IOP("depmue0l", HSM2_MOD_DEPMUE0L, IF_REAL, " [-]"), IOP("depmue0lp", HSM2_MOD_DEPMUE0LP, IF_REAL, " [-]"), IOP("depmue1", HSM2_MOD_DEPMUE1, IF_REAL, " [-]"), IOP("depmue1l", HSM2_MOD_DEPMUE1L, IF_REAL, " [-]"), IOP("depmue1lp", HSM2_MOD_DEPMUE1LP, IF_REAL, " [-]"), IOP("depmueback0", HSM2_MOD_DEPMUEBACK0, IF_REAL, " [-]"), IOP("depmueback0l", HSM2_MOD_DEPMUEBACK0L, IF_REAL, " [-]"), IOP("depmueback0lp", HSM2_MOD_DEPMUEBACK0LP, IF_REAL, " [-]"), IOP("depmueback1", HSM2_MOD_DEPMUEBACK1, IF_REAL, " [-]"), IOP("depmueback1l", HSM2_MOD_DEPMUEBACK1L, IF_REAL, " [-]"), IOP("depmueback1lp", HSM2_MOD_DEPMUEBACK1LP, IF_REAL, " [-]"), IOP("depmueph0", HSM2_MOD_DEPMUEPH0, IF_REAL, " [-]"), IOP("depmueph1", HSM2_MOD_DEPMUEPH1, IF_REAL, " [-]"), IOP("depvmax", HSM2_MOD_DEPVMAX, IF_REAL, " [-]"), IOP("depvmaxl", HSM2_MOD_DEPVMAXL, IF_REAL, " [-]"), IOP("depvmaxlp", HSM2_MOD_DEPVMAXLP, IF_REAL, " [-]"), IOP("depvdsef1", HSM2_MOD_DEPVDSEF1, IF_REAL, " [-]"), IOP("depvdsef1l", HSM2_MOD_DEPVDSEF1L, IF_REAL, " [-]"), IOP("depvdsef1lp", HSM2_MOD_DEPVDSEF1LP, IF_REAL, " [-]"), IOP("depvdsef2", HSM2_MOD_DEPVDSEF2, IF_REAL, " [-]"), IOP("depvdsef2l", HSM2_MOD_DEPVDSEF2L, IF_REAL, " [-]"), IOP("depvdsef2lp", HSM2_MOD_DEPVDSEF2LP, IF_REAL, " [-]"), IOP("depbb", HSM2_MOD_DEPBB, IF_REAL, " [-]"), IOP("depmuetmp", HSM2_MOD_DEPMUETMP, IF_REAL, " [-]"), /* binning parameters */ IOP("lmin", HSM2_MOD_LMIN, IF_REAL, "Minimum length for the model"), IOP("lmax", HSM2_MOD_LMAX, IF_REAL, "Maximum length for the model"), IOP("wmin", HSM2_MOD_WMIN, IF_REAL, "Minimum width for the model"), IOP("wmax", HSM2_MOD_WMAX, IF_REAL, "Maximum width for the model"), IOP("lbinn", HSM2_MOD_LBINN, IF_REAL, "L modulation coefficient for binning"), IOP("wbinn", HSM2_MOD_WBINN, IF_REAL, "W modulation coefficient for binning"), /* Length dependence */ IOP("lvmax", HSM2_MOD_LVMAX, IF_REAL, "Length dependence of vmax"), IOP("lbgtmp1", HSM2_MOD_LBGTMP1, IF_REAL, "Length dependence of bgtmp1"), IOP("lbgtmp2", HSM2_MOD_LBGTMP2, IF_REAL, "Length dependence of bgtmp2"), IOP("leg0", HSM2_MOD_LEG0, IF_REAL, "Length dependence of eg0"), IOP("llover", HSM2_MOD_LLOVER, IF_REAL, "Length dependence of lover"), IOP("lvfbover", HSM2_MOD_LVFBOVER, IF_REAL, "Length dependence of vfbover"), IOP("lnover", HSM2_MOD_LNOVER, IF_REAL, "Length dependence of nover"), IOP("lwl2", HSM2_MOD_LWL2, IF_REAL, "Length dependence of wl2"), IOP("lvfbc", HSM2_MOD_LVFBC, IF_REAL, "Length dependence of vfbc"), IOP("lnsubc", HSM2_MOD_LNSUBC, IF_REAL, "Length dependence of nsubc"), IOP("lnsubp", HSM2_MOD_LNSUBP, IF_REAL, "Length dependence of nsubp"), IOP("lscp1", HSM2_MOD_LSCP1, IF_REAL, "Length dependence of scp1"), IOP("lscp2", HSM2_MOD_LSCP2, IF_REAL, "Length dependence of scp2"), IOP("lscp3", HSM2_MOD_LSCP3, IF_REAL, "Length dependence of scp3"), IOP("lsc1", HSM2_MOD_LSC1, IF_REAL, "Length dependence of sc1"), IOP("lsc2", HSM2_MOD_LSC2, IF_REAL, "Length dependence of sc2"), IOP("lsc3", HSM2_MOD_LSC3, IF_REAL, "Length dependence of sc3"), IOP("lsc4", HSM2_MOD_LSC4, IF_REAL, "Length dependence of sc4"), IOP("lpgd1", HSM2_MOD_LPGD1, IF_REAL, "Length dependence of pgd1"), //IOP("lpgd3", HSM2_MOD_LPGD3, IF_REAL, "Length dependence of pgd3"), IOP("lndep", HSM2_MOD_LNDEP, IF_REAL, "Length dependence of ndep"), IOP("lninv", HSM2_MOD_LNINV, IF_REAL, "Length dependence of ninv"), IOP("lmuecb0", HSM2_MOD_LMUECB0, IF_REAL, "Length dependence of muecb0"), IOP("lmuecb1", HSM2_MOD_LMUECB1, IF_REAL, "Length dependence of muecb1"), IOP("lmueph1", HSM2_MOD_LMUEPH1, IF_REAL, "Length dependence of mueph1"), IOP("lvtmp", HSM2_MOD_LVTMP, IF_REAL, "Length dependence of vtmp"), IOP("lwvth0", HSM2_MOD_LWVTH0, IF_REAL, "Length dependence of wvth0"), IOP("lmuesr1", HSM2_MOD_LMUESR1, IF_REAL, "Length dependence of muesr1"), IOP("lmuetmp", HSM2_MOD_LMUETMP, IF_REAL, "Length dependence of muetmp"), IOP("lsub1", HSM2_MOD_LSUB1, IF_REAL, "Length dependence of sub1"), IOP("lsub2", HSM2_MOD_LSUB2, IF_REAL, "Length dependence of sub2"), IOP("lsvds", HSM2_MOD_LSVDS, IF_REAL, "Length dependence of svds"), IOP("lsvbs", HSM2_MOD_LSVBS, IF_REAL, "Length dependence of svbs"), IOP("lsvgs", HSM2_MOD_LSVGS, IF_REAL, "Length dependence of svgs"), IOP("lnsti", HSM2_MOD_LNSTI, IF_REAL, "Length dependence of nsti"), IOP("lwsti", HSM2_MOD_LWSTI, IF_REAL, "Length dependence of wsti"), IOP("lscsti1", HSM2_MOD_LSCSTI1, IF_REAL, "Length dependence of scsti1"), IOP("lscsti2", HSM2_MOD_LSCSTI2, IF_REAL, "Length dependence of scsti2"), IOP("lvthsti", HSM2_MOD_LVTHSTI, IF_REAL, "Length dependence of vthsti"), IOP("lmuesti1", HSM2_MOD_LMUESTI1, IF_REAL, "Length dependence of muesti1"), IOP("lmuesti2", HSM2_MOD_LMUESTI2, IF_REAL, "Length dependence of muesti2"), IOP("lmuesti3", HSM2_MOD_LMUESTI3, IF_REAL, "Length dependence of muesti3"), IOP("lnsubpsti1", HSM2_MOD_LNSUBPSTI1, IF_REAL, "Length dependence of nsubpsti1"), IOP("lnsubpsti2", HSM2_MOD_LNSUBPSTI2, IF_REAL, "Length dependence of nsubpsti2"), IOP("lnsubpsti3", HSM2_MOD_LNSUBPSTI3, IF_REAL, "Length dependence of nsubpsti3"), IOP("lnsubcsti1", HSM2_MOD_LNSUBCSTI1, IF_REAL, "Length dependence of nsubcsti1"), IOP("lnsubcsti2", HSM2_MOD_LNSUBCSTI2, IF_REAL, "Length dependence of nsubcsti2"), IOP("lnsubcsti3", HSM2_MOD_LNSUBCSTI3, IF_REAL, "Length dependence of nsubcsti3"), IOP("lcgso", HSM2_MOD_LCGSO, IF_REAL, "Length dependence of cgso"), IOP("lcgdo", HSM2_MOD_LCGDO, IF_REAL, "Length dependence of cgdo"), IOP("ljs0", HSM2_MOD_LJS0, IF_REAL, "Length dependence of js0"), IOP("ljs0sw", HSM2_MOD_LJS0SW, IF_REAL, "Length dependence of js0sw"), IOP("lnj", HSM2_MOD_LNJ, IF_REAL, "Length dependence of nj"), IOP("lcisbk", HSM2_MOD_LCISBK, IF_REAL, "Length dependence of cisbk"), IOP("lclm1", HSM2_MOD_LCLM1, IF_REAL, "Length dependence of clm1"), IOP("lclm2", HSM2_MOD_LCLM2, IF_REAL, "Length dependence of clm2"), IOP("lclm3", HSM2_MOD_LCLM3, IF_REAL, "Length dependence of clm3"), IOP("lwfc", HSM2_MOD_LWFC, IF_REAL, "Length dependence of wfc"), IOP("lgidl1", HSM2_MOD_LGIDL1, IF_REAL, "Length dependence of gidl1"), IOP("lgidl2", HSM2_MOD_LGIDL2, IF_REAL, "Length dependence of gidl2"), IOP("lgleak1", HSM2_MOD_LGLEAK1, IF_REAL, "Length dependence of gleak1"), IOP("lgleak2", HSM2_MOD_LGLEAK2, IF_REAL, "Length dependence of gleak2"), IOP("lgleak3", HSM2_MOD_LGLEAK3, IF_REAL, "Length dependence of gleak3"), IOP("lgleak6", HSM2_MOD_LGLEAK6, IF_REAL, "Length dependence of gleak6"), IOP("lglksd1", HSM2_MOD_LGLKSD1, IF_REAL, "Length dependence of glksd1"), IOP("lglksd2", HSM2_MOD_LGLKSD2, IF_REAL, "Length dependence of glksd2"), IOP("lglkb1", HSM2_MOD_LGLKB1, IF_REAL, "Length dependence of glkb1"), IOP("lglkb2", HSM2_MOD_LGLKB2, IF_REAL, "Length dependence of glkb2"), IOP("lnftrp", HSM2_MOD_LNFTRP, IF_REAL, "Length dependence of nftrp"), IOP("lnfalp", HSM2_MOD_LNFALP, IF_REAL, "Length dependence of nfalp"), IOP("lvdiffj", HSM2_MOD_LVDIFFJ, IF_REAL, "Length dependence of vdiffj"), IOP("libpc1", HSM2_MOD_LIBPC1, IF_REAL, "Length dependence of ibpc1"), IOP("libpc2", HSM2_MOD_LIBPC2, IF_REAL, "Length dependence of ibpc2"), /* Width dependence */ IOP("wvmax", HSM2_MOD_WVMAX, IF_REAL, "Width dependence of vmax"), IOP("wbgtmp1", HSM2_MOD_WBGTMP1, IF_REAL, "Width dependence of bgtmp1"), IOP("wbgtmp2", HSM2_MOD_WBGTMP2, IF_REAL, "Width dependence of bgtmp2"), IOP("weg0", HSM2_MOD_WEG0, IF_REAL, "Width dependence of eg0"), IOP("wlover", HSM2_MOD_WLOVER, IF_REAL, "Width dependence of lover"), IOP("wvfbover", HSM2_MOD_WVFBOVER, IF_REAL, "Width dependence of vfbover"), IOP("wnover", HSM2_MOD_WNOVER, IF_REAL, "Width dependence of nover"), IOP("wwl2", HSM2_MOD_WWL2, IF_REAL, "Width dependence of wl2"), IOP("wvfbc", HSM2_MOD_WVFBC, IF_REAL, "Width dependence of vfbc"), IOP("wnsubc", HSM2_MOD_WNSUBC, IF_REAL, "Width dependence of nsubc"), IOP("wnsubp", HSM2_MOD_WNSUBP, IF_REAL, "Width dependence of nsubp"), IOP("wscp1", HSM2_MOD_WSCP1, IF_REAL, "Width dependence of scp1"), IOP("wscp2", HSM2_MOD_WSCP2, IF_REAL, "Width dependence of scp2"), IOP("wscp3", HSM2_MOD_WSCP3, IF_REAL, "Width dependence of scp3"), IOP("wsc1", HSM2_MOD_WSC1, IF_REAL, "Width dependence of sc1"), IOP("wsc2", HSM2_MOD_WSC2, IF_REAL, "Width dependence of sc2"), IOP("wsc3", HSM2_MOD_WSC3, IF_REAL, "Width dependence of sc3"), IOP("wsc4", HSM2_MOD_WSC4, IF_REAL, "Width dependence of sc4"), IOP("wpgd1", HSM2_MOD_WPGD1, IF_REAL, "Width dependence of pgd1"), //IOP("wpgd3", HSM2_MOD_WPGD3, IF_REAL, "Width dependence of pgd3"), IOP("wndep", HSM2_MOD_WNDEP, IF_REAL, "Width dependence of ndep"), IOP("wninv", HSM2_MOD_WNINV, IF_REAL, "Width dependence of ninv"), IOP("wmuecb0", HSM2_MOD_WMUECB0, IF_REAL, "Width dependence of muecb0"), IOP("wmuecb1", HSM2_MOD_WMUECB1, IF_REAL, "Width dependence of muecb1"), IOP("wmueph1", HSM2_MOD_WMUEPH1, IF_REAL, "Width dependence of mueph1"), IOP("wvtmp", HSM2_MOD_WVTMP, IF_REAL, "Width dependence of vtmp"), IOP("wwvth0", HSM2_MOD_WWVTH0, IF_REAL, "Width dependence of wvth0"), IOP("wmuesr1", HSM2_MOD_WMUESR1, IF_REAL, "Width dependence of muesr1"), IOP("wmuetmp", HSM2_MOD_WMUETMP, IF_REAL, "Width dependence of muetmp"), IOP("wsub1", HSM2_MOD_WSUB1, IF_REAL, "Width dependence of sub1"), IOP("wsub2", HSM2_MOD_WSUB2, IF_REAL, "Width dependence of sub2"), IOP("wsvds", HSM2_MOD_WSVDS, IF_REAL, "Width dependence of svds"), IOP("wsvbs", HSM2_MOD_WSVBS, IF_REAL, "Width dependence of svbs"), IOP("wsvgs", HSM2_MOD_WSVGS, IF_REAL, "Width dependence of svgs"), IOP("wnsti", HSM2_MOD_WNSTI, IF_REAL, "Width dependence of nsti"), IOP("wwsti", HSM2_MOD_WWSTI, IF_REAL, "Width dependence of wsti"), IOP("wscsti1", HSM2_MOD_WSCSTI1, IF_REAL, "Width dependence of scsti1"), IOP("wscsti2", HSM2_MOD_WSCSTI2, IF_REAL, "Width dependence of scsti2"), IOP("wvthsti", HSM2_MOD_WVTHSTI, IF_REAL, "Width dependence of vthsti"), IOP("wmuesti1", HSM2_MOD_WMUESTI1, IF_REAL, "Width dependence of muesti1"), IOP("wmuesti2", HSM2_MOD_WMUESTI2, IF_REAL, "Width dependence of muesti2"), IOP("wmuesti3", HSM2_MOD_WMUESTI3, IF_REAL, "Width dependence of muesti3"), IOP("wnsubpsti1", HSM2_MOD_WNSUBPSTI1, IF_REAL, "Width dependence of nsubpsti1"), IOP("wnsubpsti2", HSM2_MOD_WNSUBPSTI2, IF_REAL, "Width dependence of nsubpsti2"), IOP("wnsubpsti3", HSM2_MOD_WNSUBPSTI3, IF_REAL, "Width dependence of nsubpsti3"), IOP("wnsubcsti1", HSM2_MOD_WNSUBCSTI1, IF_REAL, "Wength dependence of nsubcsti1"), IOP("wnsubcsti2", HSM2_MOD_WNSUBCSTI2, IF_REAL, "Wength dependence of nsubcsti2"), IOP("wnsubcsti3", HSM2_MOD_WNSUBCSTI3, IF_REAL, "Wength dependence of nsubcsti3"), IOP("wcgso", HSM2_MOD_WCGSO, IF_REAL, "Width dependence of cgso"), IOP("wcgdo", HSM2_MOD_WCGDO, IF_REAL, "Width dependence of cgdo"), IOP("wjs0", HSM2_MOD_WJS0, IF_REAL, "Width dependence of js0"), IOP("wjs0sw", HSM2_MOD_WJS0SW, IF_REAL, "Width dependence of js0sw"), IOP("wnj", HSM2_MOD_WNJ, IF_REAL, "Width dependence of nj"), IOP("wcisbk", HSM2_MOD_WCISBK, IF_REAL, "Width dependence of cisbk"), IOP("wclm1", HSM2_MOD_WCLM1, IF_REAL, "Width dependence of clm1"), IOP("wclm2", HSM2_MOD_WCLM2, IF_REAL, "Width dependence of clm2"), IOP("wclm3", HSM2_MOD_WCLM3, IF_REAL, "Width dependence of clm3"), IOP("wwfc", HSM2_MOD_WWFC, IF_REAL, "Width dependence of wfc"), IOP("wgidl1", HSM2_MOD_WGIDL1, IF_REAL, "Width dependence of gidl1"), IOP("wgidl2", HSM2_MOD_WGIDL2, IF_REAL, "Width dependence of gidl2"), IOP("wgleak1", HSM2_MOD_WGLEAK1, IF_REAL, "Width dependence of gleak1"), IOP("wgleak2", HSM2_MOD_WGLEAK2, IF_REAL, "Width dependence of gleak2"), IOP("wgleak3", HSM2_MOD_WGLEAK3, IF_REAL, "Width dependence of gleak3"), IOP("wgleak6", HSM2_MOD_WGLEAK6, IF_REAL, "Width dependence of gleak6"), IOP("wglksd1", HSM2_MOD_WGLKSD1, IF_REAL, "Width dependence of glksd1"), IOP("wglksd2", HSM2_MOD_WGLKSD2, IF_REAL, "Width dependence of glksd2"), IOP("wglkb1", HSM2_MOD_WGLKB1, IF_REAL, "Width dependence of glkb1"), IOP("wglkb2", HSM2_MOD_WGLKB2, IF_REAL, "Width dependence of glkb2"), IOP("wnftrp", HSM2_MOD_WNFTRP, IF_REAL, "Width dependence of nftrp"), IOP("wnfalp", HSM2_MOD_WNFALP, IF_REAL, "Width dependence of nfalp"), IOP("wvdiffj", HSM2_MOD_WVDIFFJ, IF_REAL, "Width dependence of vdiffj"), IOP("wibpc1", HSM2_MOD_WIBPC1, IF_REAL, "Width dependence of ibpc1"), IOP("wibpc2", HSM2_MOD_WIBPC2, IF_REAL, "Width dependence of ibpc2"), /* Cross-term dependence */ IOP("pvmax", HSM2_MOD_PVMAX, IF_REAL, "Cross-term dependence of vmax"), IOP("pbgtmp1", HSM2_MOD_PBGTMP1, IF_REAL, "Cross-term dependence of bgtmp1"), IOP("pbgtmp2", HSM2_MOD_PBGTMP2, IF_REAL, "Cross-term dependence of bgtmp2"), IOP("peg0", HSM2_MOD_PEG0, IF_REAL, "Cross-term dependence of eg0"), IOP("plover", HSM2_MOD_PLOVER, IF_REAL, "Cross-term dependence of lover"), IOP("pvfbover", HSM2_MOD_PVFBOVER, IF_REAL, "Cross-term dependence of vfbover"), IOP("pnover", HSM2_MOD_PNOVER, IF_REAL, "Cross-term dependence of nover"), IOP("pwl2", HSM2_MOD_PWL2, IF_REAL, "Cross-term dependence of wl2"), IOP("pvfbc", HSM2_MOD_PVFBC, IF_REAL, "Cross-term dependence of vfbc"), IOP("pnsubc", HSM2_MOD_PNSUBC, IF_REAL, "Cross-term dependence of nsubc"), IOP("pnsubp", HSM2_MOD_PNSUBP, IF_REAL, "Cross-term dependence of nsubp"), IOP("pscp1", HSM2_MOD_PSCP1, IF_REAL, "Cross-term dependence of scp1"), IOP("pscp2", HSM2_MOD_PSCP2, IF_REAL, "Cross-term dependence of scp2"), IOP("pscp3", HSM2_MOD_PSCP3, IF_REAL, "Cross-term dependence of scp3"), IOP("psc1", HSM2_MOD_PSC1, IF_REAL, "Cross-term dependence of sc1"), IOP("psc2", HSM2_MOD_PSC2, IF_REAL, "Cross-term dependence of sc2"), IOP("psc3", HSM2_MOD_PSC3, IF_REAL, "Cross-term dependence of sc3"), IOP("psc4", HSM2_MOD_PSC4, IF_REAL, "Cross-term dependence of sc4"), IOP("ppgd1", HSM2_MOD_PPGD1, IF_REAL, "Cross-term dependence of pgd1"), //IOP("ppgd3", HSM2_MOD_PPGD3, IF_REAL, "Cross-term dependence of pgd3"), IOP("pndep", HSM2_MOD_PNDEP, IF_REAL, "Cross-term dependence of ndep"), IOP("pninv", HSM2_MOD_PNINV, IF_REAL, "Cross-term dependence of ninv"), IOP("pmuecb0", HSM2_MOD_PMUECB0, IF_REAL, "Cross-term dependence of muecb0"), IOP("pmuecb1", HSM2_MOD_PMUECB1, IF_REAL, "Cross-term dependence of muecb1"), IOP("pmueph1", HSM2_MOD_PMUEPH1, IF_REAL, "Cross-term dependence of mueph1"), IOP("pvtmp", HSM2_MOD_PVTMP, IF_REAL, "Cross-term dependence of vtmp"), IOP("pwvth0", HSM2_MOD_PWVTH0, IF_REAL, "Cross-term dependence of wvth0"), IOP("pmuesr1", HSM2_MOD_PMUESR1, IF_REAL, "Cross-term dependence of muesr1"), IOP("pmuetmp", HSM2_MOD_PMUETMP, IF_REAL, "Cross-term dependence of muetmp"), IOP("psub1", HSM2_MOD_PSUB1, IF_REAL, "Cross-term dependence of sub1"), IOP("psub2", HSM2_MOD_PSUB2, IF_REAL, "Cross-term dependence of sub2"), IOP("psvds", HSM2_MOD_PSVDS, IF_REAL, "Cross-term dependence of svds"), IOP("psvbs", HSM2_MOD_PSVBS, IF_REAL, "Cross-term dependence of svbs"), IOP("psvgs", HSM2_MOD_PSVGS, IF_REAL, "Cross-term dependence of svgs"), IOP("pnsti", HSM2_MOD_PNSTI, IF_REAL, "Cross-term dependence of nsti"), IOP("pwsti", HSM2_MOD_PWSTI, IF_REAL, "Cross-term dependence of wsti"), IOP("pscsti1", HSM2_MOD_PSCSTI1, IF_REAL, "Cross-term dependence of scsti1"), IOP("pscsti2", HSM2_MOD_PSCSTI2, IF_REAL, "Cross-term dependence of scsti2"), IOP("pvthsti", HSM2_MOD_PVTHSTI, IF_REAL, "Cross-term dependence of vthsti"), IOP("pmuesti1", HSM2_MOD_PMUESTI1, IF_REAL, "Cross-term dependence of muesti1"), IOP("pmuesti2", HSM2_MOD_PMUESTI2, IF_REAL, "Cross-term dependence of muesti2"), IOP("pmuesti3", HSM2_MOD_PMUESTI3, IF_REAL, "Cross-term dependence of muesti3"), IOP("pnsubpsti1", HSM2_MOD_PNSUBPSTI1, IF_REAL, "Cross-term dependence of nsubpsti1"), IOP("pnsubpsti2", HSM2_MOD_PNSUBPSTI2, IF_REAL, "Cross-term dependence of nsubpsti2"), IOP("pnsubpsti3", HSM2_MOD_PNSUBPSTI3, IF_REAL, "Cross-term dependence of nsubpsti3"), IOP("pnsubcsti1", HSM2_MOD_PNSUBCSTI1, IF_REAL, "Cross-term dependence of nsubcsti1"), IOP("pnsubcsti2", HSM2_MOD_PNSUBCSTI2, IF_REAL, "Cross-term dependence of nsubcsti2"), IOP("pnsubcsti3", HSM2_MOD_PNSUBCSTI3, IF_REAL, "Cross-term dependence of nsubcsti3"), IOP("pcgso", HSM2_MOD_PCGSO, IF_REAL, "Cross-term dependence of cgso"), IOP("pcgdo", HSM2_MOD_PCGDO, IF_REAL, "Cross-term dependence of cgdo"), IOP("pjs0", HSM2_MOD_PJS0, IF_REAL, "Cross-term dependence of js0"), IOP("pjs0sw", HSM2_MOD_PJS0SW, IF_REAL, "Cross-term dependence of js0sw"), IOP("pnj", HSM2_MOD_PNJ, IF_REAL, "Cross-term dependence of nj"), IOP("pcisbk", HSM2_MOD_PCISBK, IF_REAL, "Cross-term dependence of cisbk"), IOP("pclm1", HSM2_MOD_PCLM1, IF_REAL, "Cross-term dependence of clm1"), IOP("pclm2", HSM2_MOD_PCLM2, IF_REAL, "Cross-term dependence of clm2"), IOP("pclm3", HSM2_MOD_PCLM3, IF_REAL, "Cross-term dependence of clm3"), IOP("pwfc", HSM2_MOD_PWFC, IF_REAL, "Cross-term dependence of wfc"), IOP("pgidl1", HSM2_MOD_PGIDL1, IF_REAL, "Cross-term dependence of gidl1"), IOP("pgidl2", HSM2_MOD_PGIDL2, IF_REAL, "Cross-term dependence of gidl2"), IOP("pgleak1", HSM2_MOD_PGLEAK1, IF_REAL, "Cross-term dependence of gleak1"), IOP("pgleak2", HSM2_MOD_PGLEAK2, IF_REAL, "Cross-term dependence of gleak2"), IOP("pgleak3", HSM2_MOD_PGLEAK3, IF_REAL, "Cross-term dependence of gleak3"), IOP("pgleak6", HSM2_MOD_PGLEAK6, IF_REAL, "Cross-term dependence of gleak6"), IOP("pglksd1", HSM2_MOD_PGLKSD1, IF_REAL, "Cross-term dependence of glksd1"), IOP("pglksd2", HSM2_MOD_PGLKSD2, IF_REAL, "Cross-term dependence of glksd2"), IOP("pglkb1", HSM2_MOD_PGLKB1, IF_REAL, "Cross-term dependence of glkb1"), IOP("pglkb2", HSM2_MOD_PGLKB2, IF_REAL, "Cross-term dependence of glkb2"), IOP("pnftrp", HSM2_MOD_PNFTRP, IF_REAL, "Cross-term dependence of nftrp"), IOP("pnfalp", HSM2_MOD_PNFALP, IF_REAL, "Cross-term dependence of nfalp"), IOP("pvdiffj", HSM2_MOD_PVDIFFJ, IF_REAL, "Cross-term dependence of vdiffj"), IOP("pibpc1", HSM2_MOD_PIBPC1, IF_REAL, "Cross-term dependence of ibpc1"), IOP("pibpc2", HSM2_MOD_PIBPC2, IF_REAL, "Cross-term dependence of ibpc2"), IOP("vgs_max", HSM2_MOD_VGS_MAX, IF_REAL, "maximum voltage G-S branch"), IOP("vgd_max", HSM2_MOD_VGD_MAX, IF_REAL, "maximum voltage G-D branch"), IOP("vgb_max", HSM2_MOD_VGB_MAX, IF_REAL, "maximum voltage G-B branch"), IOP("vds_max", HSM2_MOD_VDS_MAX, IF_REAL, "maximum voltage D-S branch"), IOP("vbs_max", HSM2_MOD_VBS_MAX, IF_REAL, "maximum voltage B-S branch"), IOP("vbd_max", HSM2_MOD_VBD_MAX, IF_REAL, "maximum voltage B-D branch"), IOP("vgsr_max", HSM2_MOD_VGSR_MAX, IF_REAL, "maximum voltage G-S branch"), IOP("vgdr_max", HSM2_MOD_VGDR_MAX, IF_REAL, "maximum voltage G-D branch"), IOP("vgbr_max", HSM2_MOD_VGBR_MAX, IF_REAL, "maximum voltage G-B branch"), IOP("vbsr_max", HSM2_MOD_VBSR_MAX, IF_REAL, "maximum voltage B-S branch"), IOP("vbdr_max", HSM2_MOD_VBDR_MAX, IF_REAL, "maximum voltage B-D branch") }; char *HSM2names[] = { "Drain", "Gate", "Source", "Bulk" }; int HSM2nSize = NUMELEMS(HSM2names); int HSM2pTSize = NUMELEMS(HSM2pTable); int HSM2mPTSize = NUMELEMS(HSM2mPTable); int HSM2iSize = sizeof(HSM2instance); int HSM2mSize = sizeof(HSM2model); tmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2init.c0000644000175000017500000000322413546075722022260 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "hsm2def.h" #include "hsm2itf.h" #include "hsm2init.h" SPICEdev HSM2info = { .DEVpublic = { .name = "HiSIM2", .description = "Hiroshima University STARC IGFET Model 2.8.0", .terms = &HSM2nSize, .numNames = &HSM2nSize, .termNames = HSM2names, .numInstanceParms = &HSM2pTSize, .instanceParms = HSM2pTable, .numModelParms = &HSM2mPTSize, .modelParms = HSM2mPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = HSM2param, .DEVmodParam = HSM2mParam, .DEVload = HSM2load, .DEVsetup = HSM2setup, .DEVunsetup = HSM2unsetup, .DEVpzSetup = HSM2setup, .DEVtemperature = HSM2temp, .DEVtrunc = HSM2trunc, .DEVfindBranch = NULL, .DEVacLoad = HSM2acLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = HSM2mDelete, .DEVdelete = NULL, .DEVsetic = HSM2getic, .DEVask = HSM2ask, .DEVmodAsk = HSM2mAsk, .DEVpzLoad = HSM2pzLoad, .DEVconvTest = HSM2convTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = HSM2noise, .DEVsoaCheck = HSM2soaCheck, .DEVinstSize = &HSM2iSize, .DEVmodSize = &HSM2mSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_hsm2_info(void) { return &HSM2info; } tmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2pzld.c0000644000175000017500000002601113546075722022265 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM ( VERSION : 2 SUBVERSION : 8 REVISION : 0 ) FILE : hsm2pzld.c Date : 2014.6.5 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "hsm2def.h" #include "ngspice/suffix.h" int HSM2pzLoad( GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { HSM2model *model = (HSM2model*)inModel; HSM2instance *here; double xcggb, xcgdb, xcgsb, xcgbb, xcbgb, xcbdb, xcbsb, xcbbb; double xcdgb, xcddb, xcdsb, xcdbb, xcsgb, xcsdb, xcssb, xcsbb; double xcdbdb = 0.0, xcsbsb = 0.0; double gdpr, gspr, gds, gbd, gbs, capbd, capbs, FwdSum, RevSum, gm, gmbs; double gjbd, gjbs, grg; double cggb, cgdb, cgsb, cbgb, cbdb, cbsb, cddb, cdgb, cdsb; double gbspsp, gbbdp, gbbsp, gbspg, gbspb; double gbspdp, gbdpdp, gbdpg, gbdpb, gbdpsp; double gIbtotg, gIbtotd, gIbtots, gIbtotb; double gIgtotg, gIgtotd, gIgtots, gIgtotb; double gIdtotg, gIdtotd, gIdtots, gIdtotb; double gIstotg, gIstotd, gIstots, gIstotb; NG_IGNORE(ckt); for ( ;model != NULL ;model = HSM2nextModel(model)) { for ( here = HSM2instances(model);here!= NULL ; here = HSM2nextInstance(here)) { if ( here->HSM2_mode >= 0 ) { gm = here->HSM2_gm; gmbs = here->HSM2_gmbs; FwdSum = gm + gmbs; RevSum = 0.0; gbbdp = -here->HSM2_gbds; gbbsp = here->HSM2_gbds + here->HSM2_gbgs + here->HSM2_gbbs; gbdpg = here->HSM2_gbgs; gbdpdp = here->HSM2_gbds; gbdpb = here->HSM2_gbbs; gbdpsp = -(gbdpg + gbdpdp + gbdpb); gbspg = 0.0; gbspdp = 0.0; gbspb = 0.0; gbspsp = 0.0; if (model->HSM2_coiigs) { gIbtotg = here->HSM2_gigbg; gIbtotd = here->HSM2_gigbd; gIbtots = here->HSM2_gigbs; gIbtotb = here->HSM2_gigbb; gIstotg = here->HSM2_gigsg; gIstotd = here->HSM2_gigsd; gIstots = here->HSM2_gigss; gIstotb = here->HSM2_gigsb; gIdtotg = here->HSM2_gigdg; gIdtotd = here->HSM2_gigdd; gIdtots = here->HSM2_gigds; gIdtotb = here->HSM2_gigdb; } else { gIbtotg = gIbtotd = gIbtots = gIbtotb = 0.0; gIstotg = gIstotd = gIstots = gIstotb = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = 0.0; } if (model->HSM2_coiigs) { gIgtotg = gIbtotg + gIstotg + gIdtotg; gIgtotd = gIbtotd + gIstotd + gIdtotd; gIgtots = gIbtots + gIstots + gIdtots; gIgtotb = gIbtotb + gIstotb + gIdtotb; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = 0.0; cggb = here->HSM2_cggb; cgsb = here->HSM2_cgsb; cgdb = here->HSM2_cgdb; cbgb = here->HSM2_cbgb; cbsb = here->HSM2_cbsb; cbdb = here->HSM2_cbdb; cdgb = here->HSM2_cdgb; cdsb = here->HSM2_cdsb; cddb = here->HSM2_cddb; } else { gm = -here->HSM2_gm; gmbs = -here->HSM2_gmbs; FwdSum = 0.0; RevSum = -(gm + gmbs); gbbsp = -here->HSM2_gbds; gbbdp = here->HSM2_gbds + here->HSM2_gbgs + here->HSM2_gbbs; gbdpg = 0.0; gbdpsp = 0.0; gbdpb = 0.0; gbdpdp = 0.0; if (model->HSM2_coiigs) { gIbtotg = here->HSM2_gigbg; gIbtotd = here->HSM2_gigbd; gIbtots = here->HSM2_gigbs; gIbtotb = here->HSM2_gigbb; gIstotg = here->HSM2_gigsg; gIstotd = here->HSM2_gigsd; gIstots = here->HSM2_gigss; gIstotb = here->HSM2_gigsb; gIdtotg = here->HSM2_gigdg; gIdtotd = here->HSM2_gigdd; gIdtots = here->HSM2_gigds; gIdtotb = here->HSM2_gigdb; } else { gIbtotg = gIbtotd = gIbtots = gIbtotb = 0.0; gIstotg = gIstotd = gIstots = gIstotb = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = 0.0; } if (model->HSM2_coiigs) { gIgtotg = gIbtotg + gIstotg + gIdtotg; gIgtotd = gIbtotd + gIstotd + gIdtotd; gIgtots = gIbtots + gIstots + gIdtots; gIgtotb = gIbtotb + gIstotb + gIdtotb; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = 0.0; gbspg = here->HSM2_gbgs; gbspsp = here->HSM2_gbds; gbspb = here->HSM2_gbbs; gbspdp = -(gbspg + gbspsp + gbspb); cggb = here->HSM2_cggb; cgsb = here->HSM2_cgdb; cgdb = here->HSM2_cgsb; cbgb = here->HSM2_cbgb; cbsb = here->HSM2_cbdb; cbdb = here->HSM2_cbsb; cdgb = -(here->HSM2_cdgb + cggb + cbgb); cdsb = -(here->HSM2_cddb + cgsb + cbsb); cddb = -(here->HSM2_cdsb + cgdb + cbdb); } gdpr = here->HSM2drainConductance; gspr = here->HSM2sourceConductance; gds = here->HSM2_gds; gbd = here->HSM2_gbd; gbs = here->HSM2_gbs; capbd = here->HSM2_capbd; capbs = here->HSM2_capbs; xcdgb = cdgb; xcddb = cddb + capbd; xcdsb = cdsb; xcdbb = -(xcdgb + xcddb + xcdsb); if (here->HSM2_corbnet == 1) xcdbb += capbd; xcsgb = -(cggb + cbgb + cdgb); xcsdb = -(cgdb + cbdb + cddb); xcssb = capbs - (cgsb + cbsb + cdsb); xcsbb = -(xcsgb + xcsdb + xcssb); if (here->HSM2_corbnet == 1) xcsbb += capbs; xcggb = cggb; xcgdb = cgdb; xcgsb = cgsb; xcgbb = -(xcggb + xcgdb + xcgsb); xcbgb = cbgb; if (!here->HSM2_corbnet) { xcbdb = cbdb - capbd; xcbsb = cbsb - capbs; } else { xcbdb = cbdb; xcbsb = cbsb; xcdbdb = - capbd; xcsbsb = - capbs; } xcbbb = -(xcbgb + xcbdb + xcbsb); if (!here->HSM2_corbnet) { gjbd = gbd; gjbs = gbs; } else gjbd = gjbs = 0.0; if (here->HSM2_corg == 1) { grg = here->HSM2_grg; *(here->HSM2GgPtr) += grg; *(here->HSM2GPgPtr) -= grg; *(here->HSM2GgpPtr) -= grg; *(here->HSM2GPdpPtr ) += xcgdb * s->real; *(here->HSM2GPdpPtr +1) += xcgdb * s->imag; *(here->HSM2GPdpPtr) += grg + gIgtotd; *(here->HSM2GPgpPtr ) += xcggb * s->real; *(here->HSM2GPgpPtr +1) += xcggb * s->imag; *(here->HSM2GPgpPtr) += gIgtotg; *(here->HSM2GPspPtr ) += xcgsb * s->real; *(here->HSM2GPspPtr +1) += xcgsb * s->imag; *(here->HSM2GPspPtr) += gIgtots; *(here->HSM2GPbpPtr ) += xcgbb * s->real; *(here->HSM2GPbpPtr +1) += xcgbb * s->imag; *(here->HSM2GPbpPtr) += gIgtotb; } else { *(here->HSM2GPdpPtr ) += xcgdb * s->real; *(here->HSM2GPdpPtr +1) += xcgdb * s->imag; *(here->HSM2GPdpPtr) += gIgtotd; *(here->HSM2GPgpPtr ) += xcggb * s->real; *(here->HSM2GPgpPtr +1) += xcggb * s->imag; *(here->HSM2GPgpPtr) += gIgtotg; *(here->HSM2GPspPtr ) += xcgsb * s->real; *(here->HSM2GPspPtr +1) += xcgsb * s->imag; *(here->HSM2GPspPtr) += gIgtots; *(here->HSM2GPbpPtr ) += xcgbb * s->real; *(here->HSM2GPbpPtr +1) += xcgbb * s->imag; *(here->HSM2GPbpPtr) += gIgtotb; } *(here->HSM2DPdpPtr ) += xcddb * s->real; *(here->HSM2DPdpPtr +1) += xcddb * s->imag; *(here->HSM2DPdpPtr) += gdpr + gds + gbd + RevSum + gbdpdp - gIdtotd; *(here->HSM2DPdPtr) -= gdpr; *(here->HSM2DPgpPtr ) += xcdgb * s->real; *(here->HSM2DPgpPtr +1) += xcdgb * s->imag; *(here->HSM2DPgpPtr) += gm + gbdpg - gIdtotg; *(here->HSM2DPspPtr ) += xcdsb * s->real; *(here->HSM2DPspPtr +1) += xcdsb * s->imag; *(here->HSM2DPspPtr) -= gds + FwdSum - gbdpsp + gIdtots; *(here->HSM2DPbpPtr ) += xcdbb * s->real; *(here->HSM2DPbpPtr +1) += xcdbb * s->imag; *(here->HSM2DPbpPtr) -= gjbd - gmbs - gbdpb + gIdtotb; *(here->HSM2DdpPtr) -= gdpr; *(here->HSM2DdPtr) += gdpr; *(here->HSM2SPdpPtr ) += xcsdb * s->real; *(here->HSM2SPdpPtr +1) += xcsdb * s->imag; *(here->HSM2SPdpPtr) -= gds + RevSum - gbspdp + gIstotd; *(here->HSM2SPgpPtr ) += xcsgb * s->real; *(here->HSM2SPgpPtr +1) += xcsgb * s->imag; *(here->HSM2SPgpPtr) -= gm - gbspg + gIstotg; *(here->HSM2SPspPtr ) += xcssb * s->real; *(here->HSM2SPspPtr +1) += xcssb * s->imag; *(here->HSM2SPspPtr) += gspr + gds + gbs + FwdSum + gbspsp - gIstots; *(here->HSM2SPsPtr) -= gspr; *(here->HSM2SPbpPtr ) += xcsbb * s->real; *(here->HSM2SPbpPtr +1) += xcsbb * s->imag; *(here->HSM2SPbpPtr) -= gjbs + gmbs - gbspb + gIstotb; *(here->HSM2SspPtr) -= gspr; *(here->HSM2SsPtr) += gspr; *(here->HSM2BPdpPtr ) += xcbdb * s->real; *(here->HSM2BPdpPtr +1) += xcbdb * s->imag; *(here->HSM2BPdpPtr) -= gjbd - gbbdp + gIbtotd; *(here->HSM2BPgpPtr ) += xcbgb * s->real; *(here->HSM2BPgpPtr +1) += xcbgb * s->imag; *(here->HSM2BPgpPtr) -= here->HSM2_gbgs + gIbtotg; *(here->HSM2BPspPtr ) += xcbsb * s->real; *(here->HSM2BPspPtr +1) += xcbsb * s->imag; *(here->HSM2BPspPtr) -= gjbs - gbbsp + gIbtots; *(here->HSM2BPbpPtr ) += xcbbb * s->real; *(here->HSM2BPbpPtr +1) += xcbbb * s->imag; *(here->HSM2BPbpPtr) += gjbd + gjbs - here->HSM2_gbbs - gIbtotb; if (model->HSM2_cogidl) { /* stamp gidl */ *(here->HSM2DPdpPtr) += here->HSM2_gigidlds; *(here->HSM2DPgpPtr) += here->HSM2_gigidlgs; *(here->HSM2DPspPtr) -= (here->HSM2_gigidlgs + here->HSM2_gigidlds + here->HSM2_gigidlbs); *(here->HSM2DPbpPtr) += here->HSM2_gigidlbs; *(here->HSM2BPdpPtr) -= here->HSM2_gigidlds; *(here->HSM2BPgpPtr) -= here->HSM2_gigidlgs; *(here->HSM2BPspPtr) += (here->HSM2_gigidlgs + here->HSM2_gigidlds + here->HSM2_gigidlbs); *(here->HSM2BPbpPtr) -= here->HSM2_gigidlbs; /* stamp gisl */ *(here->HSM2SPdpPtr) -= (here->HSM2_gigislsd + here->HSM2_gigislgd + here->HSM2_gigislbd); *(here->HSM2SPgpPtr) += here->HSM2_gigislgd; *(here->HSM2SPspPtr) += here->HSM2_gigislsd; *(here->HSM2SPbpPtr) += here->HSM2_gigislbd; *(here->HSM2BPdpPtr) += (here->HSM2_gigislgd + here->HSM2_gigislsd + here->HSM2_gigislbd); *(here->HSM2BPgpPtr) -= here->HSM2_gigislgd; *(here->HSM2BPspPtr) -= here->HSM2_gigislsd; *(here->HSM2BPbpPtr) -= here->HSM2_gigislbd; } if (here->HSM2_corbnet) { *(here->HSM2DPdbPtr ) += xcdbdb * s->real; *(here->HSM2DPdbPtr +1) += xcdbdb * s->imag; *(here->HSM2DPdbPtr) -= gbd; *(here->HSM2SPsbPtr ) += xcsbsb * s->real; *(here->HSM2SPsbPtr +1) += xcsbsb * s->imag; *(here->HSM2SPsbPtr) -= gbs; *(here->HSM2DBdpPtr ) += xcdbdb * s->real; *(here->HSM2DBdpPtr +1) += xcdbdb * s->imag; *(here->HSM2DBdpPtr) -= gbd; *(here->HSM2DBdbPtr ) -= xcdbdb * s->real; *(here->HSM2DBdbPtr +1) -= xcdbdb * s->imag; *(here->HSM2DBdbPtr) += gbd + here->HSM2_grbpd + here->HSM2_grbdb; *(here->HSM2DBbpPtr) -= here->HSM2_grbpd; *(here->HSM2DBbPtr) -= here->HSM2_grbdb; *(here->HSM2BPdbPtr) -= here->HSM2_grbpd; *(here->HSM2BPbPtr) -= here->HSM2_grbpb; *(here->HSM2BPsbPtr) -= here->HSM2_grbps; *(here->HSM2BPbpPtr) += here->HSM2_grbpd + here->HSM2_grbps + here->HSM2_grbpb; *(here->HSM2SBspPtr ) += xcsbsb * s->real; *(here->HSM2SBspPtr +1) += xcsbsb * s->imag; *(here->HSM2SBspPtr) -= gbs; *(here->HSM2SBbpPtr) -= here->HSM2_grbps; *(here->HSM2SBbPtr) -= here->HSM2_grbsb; *(here->HSM2SBsbPtr ) -= xcsbsb * s->real; *(here->HSM2SBsbPtr +1) -= xcsbsb * s->imag; *(here->HSM2SBsbPtr) += gbs + here->HSM2_grbps + here->HSM2_grbsb; *(here->HSM2BdbPtr) -= here->HSM2_grbdb; *(here->HSM2BbpPtr) -= here->HSM2_grbpb; *(here->HSM2BsbPtr) -= here->HSM2_grbsb; *(here->HSM2BbPtr) += here->HSM2_grbsb + here->HSM2_grbdb + here->HSM2_grbpb; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2itf.h0000644000175000017500000000011713546075722022102 0ustar carstencarsten #ifndef DEV_HISIM2 #define DEV_HISIM2 SPICEdev *get_hsm2_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2par.c0000644000175000017500000001466113546075722022106 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM ( VERSION : 2 SUBVERSION : 8 REVISION : 0 ) FILE : hsm2par.c Date : 2014.6.5 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HiSIM2 Distribution Statement and Copyright Notice" attached to HiSIM2 model. -----HiSIM2 Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaim all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." *************************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "hsm2def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/fteext.h" int HSM2param( int param, IFvalue *value, GENinstance *inst, IFvalue *select) { double scale; HSM2instance *here = (HSM2instance*)inst; NG_IGNORE(select); if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; switch (param) { case HSM2_W: here->HSM2_w = value->rValue * scale; here->HSM2_w_Given = TRUE; break; case HSM2_L: here->HSM2_l = value->rValue * scale; here->HSM2_l_Given = TRUE; break; case HSM2_AS: here->HSM2_as = value->rValue * scale * scale; here->HSM2_as_Given = TRUE; break; case HSM2_AD: here->HSM2_ad = value->rValue * scale * scale; here->HSM2_ad_Given = TRUE; break; case HSM2_PS: here->HSM2_ps = value->rValue * scale; here->HSM2_ps_Given = TRUE; break; case HSM2_PD: here->HSM2_pd = value->rValue * scale; here->HSM2_pd_Given = TRUE; break; case HSM2_NRS: here->HSM2_nrs = value->rValue; here->HSM2_nrs_Given = TRUE; break; case HSM2_NRD: here->HSM2_nrd = value->rValue; here->HSM2_nrd_Given = TRUE; break; case HSM2_TEMP: here->HSM2_temp = value->rValue; here->HSM2_temp_Given = TRUE; break; case HSM2_DTEMP: here->HSM2_dtemp = value->rValue; here->HSM2_dtemp_Given = TRUE; break; case HSM2_OFF: here->HSM2_off = value->iValue; break; case HSM2_IC_VBS: here->HSM2_icVBS = value->rValue; here->HSM2_icVBS_Given = TRUE; break; case HSM2_IC_VDS: here->HSM2_icVDS = value->rValue; here->HSM2_icVDS_Given = TRUE; break; case HSM2_IC_VGS: here->HSM2_icVGS = value->rValue; here->HSM2_icVGS_Given = TRUE; break; case HSM2_IC: switch (value->v.numValue) { case 3: here->HSM2_icVBS = *(value->v.vec.rVec + 2); here->HSM2_icVBS_Given = TRUE; case 2: here->HSM2_icVGS = *(value->v.vec.rVec + 1); here->HSM2_icVGS_Given = TRUE; case 1: here->HSM2_icVDS = *(value->v.vec.rVec); here->HSM2_icVDS_Given = TRUE; break; default: return(E_BADPARM); } break; case HSM2_CORBNET: here->HSM2_corbnet = value->iValue; here->HSM2_corbnet_Given = TRUE; break; case HSM2_RBPB: here->HSM2_rbpb = value->rValue; here->HSM2_rbpb_Given = TRUE; break; case HSM2_RBPD: here->HSM2_rbpd = value->rValue; here->HSM2_rbpd_Given = TRUE; break; case HSM2_RBPS: here->HSM2_rbps = value->rValue; here->HSM2_rbps_Given = TRUE; break; case HSM2_RBDB: here->HSM2_rbdb = value->rValue; here->HSM2_rbdb_Given = TRUE; break; case HSM2_RBSB: here->HSM2_rbsb = value->rValue; here->HSM2_rbsb_Given = TRUE; break; case HSM2_CORG: here->HSM2_corg = value->iValue; here->HSM2_corg_Given = TRUE; break; /* case HSM2_RSHG: */ /* here->HSM2_rshg = value->rValue; */ /* here->HSM2_rshg_Given = TRUE; */ /* break; */ case HSM2_NGCON: here->HSM2_ngcon = value->rValue; here->HSM2_ngcon_Given = TRUE; break; case HSM2_XGW: here->HSM2_xgw = value->rValue; here->HSM2_xgw_Given = TRUE; break; case HSM2_XGL: here->HSM2_xgl = value->rValue; here->HSM2_xgl_Given = TRUE; break; case HSM2_NF: here->HSM2_nf = value->rValue; here->HSM2_nf_Given = TRUE; break; case HSM2_SA: here->HSM2_sa = value->rValue; here->HSM2_sa_Given = TRUE; break; case HSM2_SB: here->HSM2_sb = value->rValue; here->HSM2_sb_Given = TRUE; break; case HSM2_SD: here->HSM2_sd = value->rValue; here->HSM2_sd_Given = TRUE; break; case HSM2_NSUBCDFM: here->HSM2_nsubcdfm = value->rValue; here->HSM2_nsubcdfm_Given = TRUE; break; case HSM2_MPHDFM: here->HSM2_mphdfm = value->rValue; here->HSM2_mphdfm_Given = TRUE; break; case HSM2_M: here->HSM2_m = value->rValue; here->HSM2_m_Given = TRUE; break; /* WPE */ case HSM2_SCA: here->HSM2_sca = value->rValue; here->HSM2_sca_Given = TRUE; break; case HSM2_SCB: here->HSM2_scb = value->rValue; here->HSM2_scb_Given = TRUE; break; case HSM2_SCC: here->HSM2_scc= value->rValue; here->HSM2_scc_Given = TRUE; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2mask.c0000644000175000017500000013432313546075722022255 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM ( VERSION : 2 SUBVERSION : 8 REVISION : 0 ) FILE : hsm2mask.c Date : 2014.6.5 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HiSIM2 Distribution Statement and Copyright Notice" attached to HiSIM2 model. -----HiSIM2 Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaim all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." *************************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "hsm2def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HSM2mAsk( CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { HSM2model *model = (HSM2model *)inst; NG_IGNORE(ckt); switch (which) { case HSM2_MOD_NMOS: value->iValue = model->HSM2_type; return(OK); case HSM2_MOD_PMOS: value->iValue = model->HSM2_type; return(OK); case HSM2_MOD_LEVEL: value->iValue = model->HSM2_level; return(OK); case HSM2_MOD_INFO: value->iValue = model->HSM2_info; return(OK); case HSM2_MOD_NOISE: value->iValue = model->HSM2_noise; return(OK); case HSM2_MOD_VERSION: value->iValue = model->HSM2_version; return(OK); case HSM2_MOD_SHOW: value->iValue = model->HSM2_show; return(OK); case HSM2_MOD_CORSRD: value->iValue = model->HSM2_corsrd; return(OK); case HSM2_MOD_CORG: value->iValue = model->HSM2_corg; return(OK); case HSM2_MOD_COIPRV: value->iValue = model->HSM2_coiprv; return(OK); case HSM2_MOD_COPPRV: value->iValue = model->HSM2_copprv; return(OK); case HSM2_MOD_COADOV: value->iValue = model->HSM2_coadov; return(OK); case HSM2_MOD_COISUB: value->iValue = model->HSM2_coisub; return(OK); case HSM2_MOD_COIIGS: value->iValue = model->HSM2_coiigs; return(OK); case HSM2_MOD_COGIDL: value->iValue = model->HSM2_cogidl; return(OK); case HSM2_MOD_COOVLP: value->iValue = model->HSM2_coovlp; return(OK); case HSM2_MOD_COFLICK: value->iValue = model->HSM2_coflick; return(OK); case HSM2_MOD_COISTI: value->iValue = model->HSM2_coisti; return(OK); case HSM2_MOD_CONQS: value->iValue = model->HSM2_conqs; return(OK); case HSM2_MOD_CORBNET: value->iValue = model->HSM2_corbnet; return(OK); case HSM2_MOD_COTHRML: value->iValue = model->HSM2_cothrml; return(OK); case HSM2_MOD_COIGN: value->iValue = model->HSM2_coign; return(OK); case HSM2_MOD_CODFM: value->iValue = model->HSM2_codfm; return(OK); case HSM2_MOD_CORECIP: value->iValue = model->HSM2_corecip; return(OK); case HSM2_MOD_COQY: value->iValue = model->HSM2_coqy; return(OK); case HSM2_MOD_COQOVSM: value->iValue = model->HSM2_coqovsm; return(OK); case HSM2_MOD_COERRREP: value->iValue = model->HSM2_coerrrep; return(OK); case HSM2_MOD_CODEP: value->iValue = model->HSM2_codep; return(OK); case HSM2_MOD_CODDLT: value->iValue = model->HSM2_coddlt; return(OK); case HSM2_MOD_VMAX: value->rValue = model->HSM2_vmax; return(OK); case HSM2_MOD_BGTMP1: value->rValue = model->HSM2_bgtmp1; return(OK); case HSM2_MOD_BGTMP2: value->rValue = model->HSM2_bgtmp2; return(OK); case HSM2_MOD_EG0: value->rValue = model->HSM2_eg0; return(OK); case HSM2_MOD_TOX: value->rValue = model->HSM2_tox; return(OK); case HSM2_MOD_XLD: value->rValue = model->HSM2_xld; return(OK); case HSM2_MOD_LOVER: value->rValue = model->HSM2_lover; return(OK); case HSM2_MOD_DDLTMAX: /* Vdseff */ value->rValue = model->HSM2_ddltmax; return(OK); case HSM2_MOD_DDLTSLP: /* Vdseff */ value->rValue = model->HSM2_ddltslp; return(OK); case HSM2_MOD_DDLTICT: /* Vdseff */ value->rValue = model->HSM2_ddltict; return(OK); case HSM2_MOD_VFBOVER: value->rValue = model->HSM2_vfbover; return(OK); case HSM2_MOD_NOVER: value->rValue = model->HSM2_nover; return(OK); case HSM2_MOD_XWD: value->rValue = model->HSM2_xwd; return(OK); case HSM2_MOD_XL: value->rValue = model->HSM2_xl; return(OK); case HSM2_MOD_XW: value->rValue = model->HSM2_xw; return(OK); case HSM2_MOD_SAREF: value->rValue = model->HSM2_saref; return(OK); case HSM2_MOD_SBREF: value->rValue = model->HSM2_sbref; return(OK); case HSM2_MOD_LL: value->rValue = model->HSM2_ll; return(OK); case HSM2_MOD_LLD: value->rValue = model->HSM2_lld; return(OK); case HSM2_MOD_LLN: value->rValue = model->HSM2_lln; return(OK); case HSM2_MOD_WL: value->rValue = model->HSM2_wl; return(OK); case HSM2_MOD_WL1: value->rValue = model->HSM2_wl1; return(OK); case HSM2_MOD_WL1P: value->rValue = model->HSM2_wl1p; return(OK); case HSM2_MOD_WL2: value->rValue = model->HSM2_wl2; return(OK); case HSM2_MOD_WL2P: value->rValue = model->HSM2_wl2p; return(OK); case HSM2_MOD_WLD: value->rValue = model->HSM2_wld; return(OK); case HSM2_MOD_WLN: value->rValue = model->HSM2_wln; return(OK); case HSM2_MOD_XQY: value->rValue = model->HSM2_xqy; return(OK); case HSM2_MOD_XQY1: value->rValue = model->HSM2_xqy1; return(OK); case HSM2_MOD_XQY2: value->rValue = model->HSM2_xqy2; return(OK); case HSM2_MOD_QYRAT: value->rValue = model->HSM2_qyrat; return(OK); case HSM2_MOD_RS: value->rValue = model->HSM2_rs; return(OK); case HSM2_MOD_RD: value->rValue = model->HSM2_rd; return(OK); case HSM2_MOD_RSH: value->rValue = model->HSM2_rsh; return(OK); case HSM2_MOD_RSHG: value->rValue = model->HSM2_rshg; return(OK); /* case HSM2_MOD_NGCON: */ /* value->rValue = model->HSM2_ngcon; */ /* return(OK); */ /* case HSM2_MOD_XGW: */ /* value->rValue = model->HSM2_xgw; */ /* return(OK); */ /* case HSM2_MOD_XGL: */ /* value->rValue = model->HSM2_xgl; */ /* return(OK); */ /* case HSM2_MOD_NF: */ /* value->rValue = model->HSM2_nf; */ /* return(OK); */ case HSM2_MOD_VFBC: value->rValue = model->HSM2_vfbc; return(OK); case HSM2_MOD_VBI: value->rValue = model->HSM2_vbi; return(OK); case HSM2_MOD_NSUBC: value->rValue = model->HSM2_nsubc; return(OK); case HSM2_MOD_VFBCL: value->rValue = model->HSM2_vfbcl; return(OK); case HSM2_MOD_VFBCLP: value->rValue = model->HSM2_vfbclp; return(OK); case HSM2_MOD_PARL2: value->rValue = model->HSM2_parl2; return(OK); case HSM2_MOD_LP: value->rValue = model->HSM2_lp; return(OK); case HSM2_MOD_NSUBP: value->rValue = model->HSM2_nsubp; return(OK); case HSM2_MOD_NSUBPL: value->rValue = model->HSM2_nsubpl; return(OK); case HSM2_MOD_NSUBPFAC: value->rValue = model->HSM2_nsubpfac; return(OK); case HSM2_MOD_NSUBPDLT: value->rValue = model->HSM2_nsubpdlt; return(OK); case HSM2_MOD_NSUBPW: value->rValue = model->HSM2_nsubpw; return(OK); case HSM2_MOD_NSUBPWP: value->rValue = model->HSM2_nsubpwp; return(OK); case HSM2_MOD_SCP1: value->rValue = model->HSM2_scp1; return(OK); case HSM2_MOD_SCP2: value->rValue = model->HSM2_scp2; return(OK); case HSM2_MOD_SCP3: value->rValue = model->HSM2_scp3; return(OK); case HSM2_MOD_SC1: value->rValue = model->HSM2_sc1; return(OK); case HSM2_MOD_SC2: value->rValue = model->HSM2_sc2; return(OK); case HSM2_MOD_SC3: value->rValue = model->HSM2_sc3; return(OK); case HSM2_MOD_SC4: value->rValue = model->HSM2_sc4; return(OK); case HSM2_MOD_PGD1: value->rValue = model->HSM2_pgd1; return(OK); case HSM2_MOD_PGD2: value->rValue = model->HSM2_pgd2; return(OK); case HSM2_MOD_PGD4: value->rValue = model->HSM2_pgd4; return(OK); case HSM2_MOD_NDEP: value->rValue = model->HSM2_ndep; return(OK); case HSM2_MOD_NDEPL: value->rValue = model->HSM2_ndepl; return(OK); case HSM2_MOD_NDEPLP: value->rValue = model->HSM2_ndeplp; return(OK); case HSM2_MOD_NDEPW: value->rValue = model->HSM2_ndepw; return(OK); case HSM2_MOD_NDEPWP: value->rValue = model->HSM2_ndepwp; return(OK); case HSM2_MOD_NINV: value->rValue = model->HSM2_ninv; return(OK); case HSM2_MOD_NINVD: value->rValue = model->HSM2_ninvd; return(OK); case HSM2_MOD_NINVDL: value->rValue = model->HSM2_ninvdl; return(OK); case HSM2_MOD_NINVDLP: value->rValue = model->HSM2_ninvdlp; return(OK); case HSM2_MOD_MUECB0: value->rValue = model->HSM2_muecb0; return(OK); case HSM2_MOD_MUECB1: value->rValue = model->HSM2_muecb1; return(OK); case HSM2_MOD_MUEPH1: value->rValue = model->HSM2_mueph1; return(OK); case HSM2_MOD_MUEPH0: value->rValue = model->HSM2_mueph0; return(OK); case HSM2_MOD_MUEPHW: value->rValue = model->HSM2_muephw; return(OK); case HSM2_MOD_MUEPWP: value->rValue = model->HSM2_muepwp; return(OK); case HSM2_MOD_MUEPWD: value->rValue = model->HSM2_muepwd; return(OK); case HSM2_MOD_MUEPHL: value->rValue = model->HSM2_muephl; return(OK); case HSM2_MOD_MUEPLP: value->rValue = model->HSM2_mueplp; return(OK); case HSM2_MOD_MUEPLD: value->rValue = model->HSM2_muepld; return(OK); case HSM2_MOD_MUEPHS: value->rValue = model->HSM2_muephs; return(OK); case HSM2_MOD_MUEPSP: value->rValue = model->HSM2_muepsp; return(OK); case HSM2_MOD_VTMP: value->rValue = model->HSM2_vtmp; return(OK); case HSM2_MOD_WVTH0: value->rValue = model->HSM2_wvth0; return(OK); case HSM2_MOD_MUESR1: value->rValue = model->HSM2_muesr1; return(OK); case HSM2_MOD_MUESR0: value->rValue = model->HSM2_muesr0; return(OK); case HSM2_MOD_MUESRL: value->rValue = model->HSM2_muesrl; return(OK); case HSM2_MOD_MUESLP: value->rValue = model->HSM2_mueslp; return(OK); case HSM2_MOD_MUESRW: value->rValue = model->HSM2_muesrw; return(OK); case HSM2_MOD_MUESWP: value->rValue = model->HSM2_mueswp; return(OK); case HSM2_MOD_BB: value->rValue = model->HSM2_bb; return(OK); case HSM2_MOD_SUB1: value->rValue = model->HSM2_sub1; return(OK); case HSM2_MOD_SUB2: value->rValue = model->HSM2_sub2; return(OK); case HSM2_MOD_SVGS: value->rValue = model->HSM2_svgs; return(OK); case HSM2_MOD_SVGSL: value->rValue = model->HSM2_svgsl; return(OK); case HSM2_MOD_SVGSLP: value->rValue = model->HSM2_svgslp; return(OK); case HSM2_MOD_SVGSW: value->rValue = model->HSM2_svgsw; return(OK); case HSM2_MOD_SVGSWP: value->rValue = model->HSM2_svgswp; return(OK); case HSM2_MOD_SVBS: value->rValue = model->HSM2_svbs; return(OK); case HSM2_MOD_SVBSL: value->rValue = model->HSM2_svbsl; return(OK); case HSM2_MOD_SVBSLP: value->rValue = model->HSM2_svbslp; return(OK); case HSM2_MOD_SVDS: value->rValue = model->HSM2_svds; return(OK); case HSM2_MOD_SLG: value->rValue = model->HSM2_slg; return(OK); case HSM2_MOD_SLGL: value->rValue = model->HSM2_slgl; return(OK); case HSM2_MOD_SLGLP: value->rValue = model->HSM2_slglp; return(OK); case HSM2_MOD_SUB1L: value->rValue = model->HSM2_sub1l; return(OK); case HSM2_MOD_SUB1LP: value->rValue = model->HSM2_sub1lp; return(OK); case HSM2_MOD_SUB2L: value->rValue = model->HSM2_sub2l; return(OK); case HSM2_MOD_NSTI: value->rValue = model->HSM2_nsti; return(OK); case HSM2_MOD_WSTI: value->rValue = model->HSM2_wsti; return(OK); case HSM2_MOD_WSTIL: value->rValue = model->HSM2_wstil; return(OK); case HSM2_MOD_WSTILP: value->rValue = model->HSM2_wstilp; return(OK); case HSM2_MOD_WSTIW: value->rValue = model->HSM2_wstiw; return(OK); case HSM2_MOD_WSTIWP: value->rValue = model->HSM2_wstiwp; return(OK); case HSM2_MOD_SCSTI1: value->rValue = model->HSM2_scsti1; return(OK); case HSM2_MOD_SCSTI2: value->rValue = model->HSM2_scsti2; return(OK); case HSM2_MOD_VTHSTI: value->rValue = model->HSM2_vthsti; return(OK); case HSM2_MOD_VDSTI: value->rValue = model->HSM2_vdsti; return(OK); case HSM2_MOD_MUESTI1: value->rValue = model->HSM2_muesti1; return(OK); case HSM2_MOD_MUESTI2: value->rValue = model->HSM2_muesti2; return(OK); case HSM2_MOD_MUESTI3: value->rValue = model->HSM2_muesti3; return(OK); case HSM2_MOD_NSUBPSTI1: value->rValue = model->HSM2_nsubpsti1; return(OK); case HSM2_MOD_NSUBPSTI2: value->rValue = model->HSM2_nsubpsti2; return(OK); case HSM2_MOD_NSUBPSTI3: value->rValue = model->HSM2_nsubpsti3; return(OK); case HSM2_MOD_NSUBCSTI1: value->rValue = model->HSM2_nsubcsti1; return(OK); case HSM2_MOD_NSUBCSTI2: value->rValue = model->HSM2_nsubcsti2; return(OK); case HSM2_MOD_NSUBCSTI3: value->rValue = model->HSM2_nsubcsti3; return(OK); case HSM2_MOD_LPEXT: value->rValue = model->HSM2_lpext; return(OK); case HSM2_MOD_NPEXT: value->rValue = model->HSM2_npext; return(OK); case HSM2_MOD_NPEXTW: value->rValue = model->HSM2_npextw; return(OK); case HSM2_MOD_NPEXTWP: value->rValue = model->HSM2_npextwp; return(OK); case HSM2_MOD_SCP22: value->rValue = model->HSM2_scp22; return(OK); case HSM2_MOD_SCP21: value->rValue = model->HSM2_scp21; return(OK); case HSM2_MOD_BS1: value->rValue = model->HSM2_bs1; return(OK); case HSM2_MOD_BS2: value->rValue = model->HSM2_bs2; return(OK); case HSM2_MOD_CGSO: value->rValue = model->HSM2_cgso; return(OK); case HSM2_MOD_CGDO: value->rValue = model->HSM2_cgdo; return(OK); case HSM2_MOD_CGBO: value->rValue = model->HSM2_cgbo; return(OK); case HSM2_MOD_TPOLY: value->rValue = model->HSM2_tpoly; return(OK); case HSM2_MOD_JS0: value->rValue = model->HSM2_js0; return(OK); case HSM2_MOD_JS0SW: value->rValue = model->HSM2_js0sw; return(OK); case HSM2_MOD_NJ: value->rValue = model->HSM2_nj; return(OK); case HSM2_MOD_NJSW: value->rValue = model->HSM2_njsw; return(OK); case HSM2_MOD_XTI: value->rValue = model->HSM2_xti; return(OK); case HSM2_MOD_CJ: value->rValue = model->HSM2_cj; return(OK); case HSM2_MOD_CJSW: value->rValue = model->HSM2_cjsw; return(OK); case HSM2_MOD_CJSWG: value->rValue = model->HSM2_cjswg; return(OK); case HSM2_MOD_MJ: value->rValue = model->HSM2_mj; return(OK); case HSM2_MOD_MJSW: value->rValue = model->HSM2_mjsw; return(OK); case HSM2_MOD_MJSWG: value->rValue = model->HSM2_mjswg; return(OK); case HSM2_MOD_PB: value->rValue = model->HSM2_pb; return(OK); case HSM2_MOD_PBSW: value->rValue = model->HSM2_pbsw; return(OK); case HSM2_MOD_PBSWG: value->rValue = model->HSM2_pbswg; return(OK); case HSM2_MOD_TCJBD: value->rValue = model->HSM2_tcjbd; return(OK); case HSM2_MOD_TCJBS: value->rValue = model->HSM2_tcjbs; return(OK); case HSM2_MOD_TCJBDSW: value->rValue = model->HSM2_tcjbdsw; return(OK); case HSM2_MOD_TCJBSSW: value->rValue = model->HSM2_tcjbssw; return(OK); case HSM2_MOD_TCJBDSWG: value->rValue = model->HSM2_tcjbdswg; return(OK); case HSM2_MOD_TCJBSSWG: value->rValue = model->HSM2_tcjbsswg; return(OK); case HSM2_MOD_XTI2: value->rValue = model->HSM2_xti2; return(OK); case HSM2_MOD_CISB: value->rValue = model->HSM2_cisb; return(OK); case HSM2_MOD_CVB: value->rValue = model->HSM2_cvb; return(OK); case HSM2_MOD_CTEMP: value->rValue = model->HSM2_ctemp; return(OK); case HSM2_MOD_CISBK: value->rValue = model->HSM2_cisbk; return(OK); case HSM2_MOD_CVBK: value->rValue = model->HSM2_cvbk; return(OK); case HSM2_MOD_DIVX: value->rValue = model->HSM2_divx; return(OK); case HSM2_MOD_CLM1: value->rValue = model->HSM2_clm1; return(OK); case HSM2_MOD_CLM2: value->rValue = model->HSM2_clm2; return(OK); case HSM2_MOD_CLM3: value->rValue = model->HSM2_clm3; return(OK); case HSM2_MOD_CLM5: value->rValue = model->HSM2_clm5; return(OK); case HSM2_MOD_CLM6: value->rValue = model->HSM2_clm6; return(OK); case HSM2_MOD_MUETMP: value->rValue = model->HSM2_muetmp; return(OK); case HSM2_MOD_VOVER: value->rValue = model->HSM2_vover; return(OK); case HSM2_MOD_VOVERP: value->rValue = model->HSM2_voverp; return(OK); case HSM2_MOD_VOVERS: value->rValue = model->HSM2_vovers; return(OK); case HSM2_MOD_VOVERSP: value->rValue = model->HSM2_voversp; return(OK); case HSM2_MOD_WFC: value->rValue = model->HSM2_wfc; return(OK); case HSM2_MOD_NSUBCW: value->rValue = model->HSM2_nsubcw; return(OK); case HSM2_MOD_NSUBCWP: value->rValue = model->HSM2_nsubcwp; return(OK); case HSM2_MOD_NSUBCMAX: value->rValue = model->HSM2_nsubcmax; return(OK); case HSM2_MOD_QME1: value->rValue = model->HSM2_qme1; return(OK); case HSM2_MOD_QME2: value->rValue = model->HSM2_qme2; return(OK); case HSM2_MOD_QME3: value->rValue = model->HSM2_qme3; return(OK); case HSM2_MOD_GIDL1: value->rValue = model->HSM2_gidl1; return(OK); case HSM2_MOD_GIDL2: value->rValue = model->HSM2_gidl2; return(OK); case HSM2_MOD_GIDL3: value->rValue = model->HSM2_gidl3; return(OK); case HSM2_MOD_GIDL4: value->rValue = model->HSM2_gidl4; return(OK); case HSM2_MOD_GIDL5: value->rValue = model->HSM2_gidl5; return(OK); case HSM2_MOD_GIDL6: value->rValue = model->HSM2_gidl6; return(OK); case HSM2_MOD_GIDL7: value->rValue = model->HSM2_gidl7; return(OK); case HSM2_MOD_GLEAK1: value->rValue = model->HSM2_gleak1; return(OK); case HSM2_MOD_GLEAK2: value->rValue = model->HSM2_gleak2; return(OK); case HSM2_MOD_GLEAK3: value->rValue = model->HSM2_gleak3; return(OK); case HSM2_MOD_GLEAK4: value->rValue = model->HSM2_gleak4; return(OK); case HSM2_MOD_GLEAK5: value->rValue = model->HSM2_gleak5; return(OK); case HSM2_MOD_GLEAK6: value->rValue = model->HSM2_gleak6; return(OK); case HSM2_MOD_GLEAK7: value->rValue = model->HSM2_gleak7; return(OK); case HSM2_MOD_GLKSD1: value->rValue = model->HSM2_glksd1; return(OK); case HSM2_MOD_GLKSD2: value->rValue = model->HSM2_glksd2; return(OK); case HSM2_MOD_GLKSD3: value->rValue = model->HSM2_glksd3; return(OK); case HSM2_MOD_GLKB1: value->rValue = model->HSM2_glkb1; return(OK); case HSM2_MOD_GLKB2: value->rValue = model->HSM2_glkb2; return(OK); case HSM2_MOD_GLKB3: value->rValue = model->HSM2_glkb3; return(OK); case HSM2_MOD_EGIG: value->rValue = model->HSM2_egig; return(OK); case HSM2_MOD_IGTEMP2: value->rValue = model->HSM2_igtemp2; return(OK); case HSM2_MOD_IGTEMP3: value->rValue = model->HSM2_igtemp3; return(OK); case HSM2_MOD_VZADD0: value->rValue = model->HSM2_vzadd0; return(OK); case HSM2_MOD_PZADD0: value->rValue = model->HSM2_pzadd0; return(OK); case HSM2_MOD_NFTRP: value->rValue = model->HSM2_nftrp; return(OK); case HSM2_MOD_NFALP: value->rValue = model->HSM2_nfalp; return(OK); case HSM2_MOD_CIT: value->rValue = model->HSM2_cit; return(OK); case HSM2_MOD_FALPH: value->rValue = model->HSM2_falph; return(OK); case HSM2_MOD_KAPPA: value->rValue = model->HSM2_kappa; return(OK); case HSM2_MOD_VDIFFJ: value->rValue = model->HSM2_vdiffj; return(OK); case HSM2_MOD_DLY1: value->rValue = model->HSM2_dly1; return(OK); case HSM2_MOD_DLY2: value->rValue = model->HSM2_dly2; return(OK); case HSM2_MOD_DLY3: value->rValue = model->HSM2_dly3; return(OK); case HSM2_MOD_TNOM: value->rValue = model->HSM2_tnom; return(OK); case HSM2_MOD_OVSLP: value->rValue = model->HSM2_ovslp; return(OK); case HSM2_MOD_OVMAG: value->rValue = model->HSM2_ovmag; return(OK); case HSM2_MOD_GBMIN: value->rValue = model->HSM2_gbmin; return(OK); case HSM2_MOD_RBPB: value->rValue = model->HSM2_rbpb; return(OK); case HSM2_MOD_RBPD: value->rValue = model->HSM2_rbpd; return(OK); case HSM2_MOD_RBPS: value->rValue = model->HSM2_rbps; return(OK); case HSM2_MOD_RBDB: value->rValue = model->HSM2_rbdb; return(OK); case HSM2_MOD_RBSB: value->rValue = model->HSM2_rbsb; return(OK); case HSM2_MOD_IBPC1: value->rValue = model->HSM2_ibpc1; return(OK); case HSM2_MOD_IBPC2: value->rValue = model->HSM2_ibpc2; return(OK); case HSM2_MOD_MPHDFM: value->rValue = model->HSM2_mphdfm; return(OK); case HSM2_MOD_PTL: value->rValue = model->HSM2_ptl; return(OK); case HSM2_MOD_PTP: value->rValue = model->HSM2_ptp; return(OK); case HSM2_MOD_PT2: value->rValue = model->HSM2_pt2; return(OK); case HSM2_MOD_PTLP: value->rValue = model->HSM2_ptlp; return(OK); case HSM2_MOD_GDL: value->rValue = model->HSM2_gdl; return(OK); case HSM2_MOD_GDLP: value->rValue = model->HSM2_gdlp; return(OK); case HSM2_MOD_GDLD: value->rValue = model->HSM2_gdld; return(OK); case HSM2_MOD_PT4: value->rValue = model->HSM2_pt4; return(OK); case HSM2_MOD_PT4P: value->rValue = model->HSM2_pt4p; return(OK); case HSM2_MOD_MUEPHL2: value->rValue = model->HSM2_muephl2; return(OK); case HSM2_MOD_MUEPLP2: value->rValue = model->HSM2_mueplp2; return(OK); case HSM2_MOD_NSUBCW2: value->rValue = model->HSM2_nsubcw2; return(OK); case HSM2_MOD_NSUBCWP2: value->rValue = model->HSM2_nsubcwp2; return(OK); case HSM2_MOD_MUEPHW2: value->rValue = model->HSM2_muephw2; return(OK); case HSM2_MOD_MUEPWP2: value->rValue = model->HSM2_muepwp2; return(OK); /* WPE */ case HSM2_MOD_WEB: value->rValue = model->HSM2_web; return(OK); case HSM2_MOD_WEC: value->rValue = model->HSM2_wec; return(OK); case HSM2_MOD_NSUBCWPE: value->rValue = model->HSM2_nsubcwpe; return(OK); case HSM2_MOD_NPEXTWPE: value->rValue = model->HSM2_npextwpe; return(OK); case HSM2_MOD_NSUBPWPE: value->rValue = model->HSM2_nsubpwpe; return(OK); case HSM2_MOD_VGSMIN: value->rValue = model->HSM2_Vgsmin; return(OK); case HSM2_MOD_SC3VBS: value->rValue = model->HSM2_sc3Vbs; return(OK); case HSM2_MOD_BYPTOL: value->rValue = model->HSM2_byptol; return(OK); case HSM2_MOD_MUECB0LP: value->rValue = model->HSM2_muecb0lp; return(OK); case HSM2_MOD_MUECB1LP: value->rValue = model->HSM2_muecb1lp; return(OK); /* Depletion Mode MOSFET */ case HSM2_MOD_NDEPM: value->rValue = model->HSM2_ndepm; return(OK); case HSM2_MOD_NDEPML: value->rValue = model->HSM2_ndepml; return(OK); case HSM2_MOD_NDEPMLP: value->rValue = model->HSM2_ndepmlp; return(OK); case HSM2_MOD_TNDEP: value->rValue = model->HSM2_tndep; return(OK); case HSM2_MOD_DEPLEAK: value->rValue = model->HSM2_depleak; return(OK); case HSM2_MOD_DEPLEAKL: value->rValue = model->HSM2_depleakl; return(OK); case HSM2_MOD_DEPLEAKLP: value->rValue = model->HSM2_depleaklp; return(OK); case HSM2_MOD_DEPETA: value->rValue = model->HSM2_depeta; return(OK); case HSM2_MOD_DEPMUE0: value->rValue = model->HSM2_depmue0; return(OK); case HSM2_MOD_DEPMUE0L: value->rValue = model->HSM2_depmue0l; return(OK); case HSM2_MOD_DEPMUE0LP: value->rValue = model->HSM2_depmue0lp; return(OK); case HSM2_MOD_DEPMUE1: value->rValue = model->HSM2_depmue1; return(OK); case HSM2_MOD_DEPMUE1L: value->rValue = model->HSM2_depmue1l; return(OK); case HSM2_MOD_DEPMUE1LP: value->rValue = model->HSM2_depmue1lp; return(OK); case HSM2_MOD_DEPMUEBACK0: value->rValue = model->HSM2_depmueback0; return(OK); case HSM2_MOD_DEPMUEBACK0L: value->rValue = model->HSM2_depmueback0l; return(OK); case HSM2_MOD_DEPMUEBACK0LP: value->rValue = model->HSM2_depmueback0lp; return(OK); case HSM2_MOD_DEPMUEBACK1: value->rValue = model->HSM2_depmueback1; return(OK); case HSM2_MOD_DEPMUEBACK1L: value->rValue = model->HSM2_depmueback1l; return(OK); case HSM2_MOD_DEPMUEBACK1LP: value->rValue = model->HSM2_depmueback1lp; return(OK); case HSM2_MOD_DEPMUEPH0: value->rValue = model->HSM2_depmueph0; return(OK); case HSM2_MOD_DEPMUEPH1: value->rValue = model->HSM2_depmueph1; return(OK); case HSM2_MOD_DEPVMAX: value->rValue = model->HSM2_depvmax; return(OK); case HSM2_MOD_DEPVMAXL: value->rValue = model->HSM2_depvmaxl; return(OK); case HSM2_MOD_DEPVMAXLP: value->rValue = model->HSM2_depvmaxlp; return(OK); case HSM2_MOD_DEPVDSEF1: value->rValue = model->HSM2_depvdsef1; return(OK); case HSM2_MOD_DEPVDSEF1L: value->rValue = model->HSM2_depvdsef1l; return(OK); case HSM2_MOD_DEPVDSEF1LP: value->rValue = model->HSM2_depvdsef1lp; return(OK); case HSM2_MOD_DEPVDSEF2: value->rValue = model->HSM2_depvdsef2; return(OK); case HSM2_MOD_DEPVDSEF2L: value->rValue = model->HSM2_depvdsef2l; return(OK); case HSM2_MOD_DEPVDSEF2LP: value->rValue = model->HSM2_depvdsef2lp; return(OK); case HSM2_MOD_DEPBB: value->rValue = model->HSM2_depbb; return(OK); case HSM2_MOD_DEPMUETMP: value->rValue = model->HSM2_depmuetmp; return(OK); /* binning parameters */ case HSM2_MOD_LMIN: value->rValue = model->HSM2_lmin; return(OK); case HSM2_MOD_LMAX: value->rValue = model->HSM2_lmax; return(OK); case HSM2_MOD_WMIN: value->rValue = model->HSM2_wmin; return(OK); case HSM2_MOD_WMAX: value->rValue = model->HSM2_wmax; return(OK); case HSM2_MOD_LBINN: value->rValue = model->HSM2_lbinn; return(OK); case HSM2_MOD_WBINN: value->rValue = model->HSM2_wbinn; return(OK); /* Length dependence */ case HSM2_MOD_LVMAX: value->rValue = model->HSM2_lvmax; return(OK); case HSM2_MOD_LBGTMP1: value->rValue = model->HSM2_lbgtmp1; return(OK); case HSM2_MOD_LBGTMP2: value->rValue = model->HSM2_lbgtmp2; return(OK); case HSM2_MOD_LEG0: value->rValue = model->HSM2_leg0; return(OK); case HSM2_MOD_LLOVER: value->rValue = model->HSM2_llover; return(OK); case HSM2_MOD_LVFBOVER: value->rValue = model->HSM2_lvfbover; return(OK); case HSM2_MOD_LNOVER: value->rValue = model->HSM2_lnover; return(OK); case HSM2_MOD_LWL2: value->rValue = model->HSM2_lwl2; return(OK); case HSM2_MOD_LVFBC: value->rValue = model->HSM2_lvfbc; return(OK); case HSM2_MOD_LNSUBC: value->rValue = model->HSM2_lnsubc; return(OK); case HSM2_MOD_LNSUBP: value->rValue = model->HSM2_lnsubp; return(OK); case HSM2_MOD_LSCP1: value->rValue = model->HSM2_lscp1; return(OK); case HSM2_MOD_LSCP2: value->rValue = model->HSM2_lscp2; return(OK); case HSM2_MOD_LSCP3: value->rValue = model->HSM2_lscp3; return(OK); case HSM2_MOD_LSC1: value->rValue = model->HSM2_lsc1; return(OK); case HSM2_MOD_LSC2: value->rValue = model->HSM2_lsc2; return(OK); case HSM2_MOD_LSC3: value->rValue = model->HSM2_lsc3; return(OK); case HSM2_MOD_LSC4: value->rValue = model->HSM2_lsc4; return(OK); case HSM2_MOD_LPGD1: value->rValue = model->HSM2_lpgd1; return(OK); //case HSM2_MOD_LPGD3: // value->rValue = model->HSM2_lpgd3; // return(OK); case HSM2_MOD_LNDEP: value->rValue = model->HSM2_lndep; return(OK); case HSM2_MOD_LNINV: value->rValue = model->HSM2_lninv; return(OK); case HSM2_MOD_LMUECB0: value->rValue = model->HSM2_lmuecb0; return(OK); case HSM2_MOD_LMUECB1: value->rValue = model->HSM2_lmuecb1; return(OK); case HSM2_MOD_LMUEPH1: value->rValue = model->HSM2_lmueph1; return(OK); case HSM2_MOD_LVTMP: value->rValue = model->HSM2_lvtmp; return(OK); case HSM2_MOD_LWVTH0: value->rValue = model->HSM2_lwvth0; return(OK); case HSM2_MOD_LMUESR1: value->rValue = model->HSM2_lmuesr1; return(OK); case HSM2_MOD_LMUETMP: value->rValue = model->HSM2_lmuetmp; return(OK); case HSM2_MOD_LSUB1: value->rValue = model->HSM2_lsub1; return(OK); case HSM2_MOD_LSUB2: value->rValue = model->HSM2_lsub2; return(OK); case HSM2_MOD_LSVDS: value->rValue = model->HSM2_lsvds; return(OK); case HSM2_MOD_LSVBS: value->rValue = model->HSM2_lsvbs; return(OK); case HSM2_MOD_LSVGS: value->rValue = model->HSM2_lsvgs; return(OK); case HSM2_MOD_LNSTI: value->rValue = model->HSM2_lnsti; return(OK); case HSM2_MOD_LWSTI: value->rValue = model->HSM2_lwsti; return(OK); case HSM2_MOD_LSCSTI1: value->rValue = model->HSM2_lscsti1; return(OK); case HSM2_MOD_LSCSTI2: value->rValue = model->HSM2_lscsti2; return(OK); case HSM2_MOD_LVTHSTI: value->rValue = model->HSM2_lvthsti; return(OK); case HSM2_MOD_LMUESTI1: value->rValue = model->HSM2_lmuesti1; return(OK); case HSM2_MOD_LMUESTI2: value->rValue = model->HSM2_lmuesti2; return(OK); case HSM2_MOD_LMUESTI3: value->rValue = model->HSM2_lmuesti3; return(OK); case HSM2_MOD_LNSUBPSTI1: value->rValue = model->HSM2_lnsubpsti1; return(OK); case HSM2_MOD_LNSUBPSTI2: value->rValue = model->HSM2_lnsubpsti2; return(OK); case HSM2_MOD_LNSUBPSTI3: value->rValue = model->HSM2_lnsubpsti3; return(OK); case HSM2_MOD_LNSUBCSTI1: value->rValue = model->HSM2_lnsubcsti1; return(OK); case HSM2_MOD_LNSUBCSTI2: value->rValue = model->HSM2_lnsubcsti2; return(OK); case HSM2_MOD_LNSUBCSTI3: value->rValue = model->HSM2_lnsubcsti3; return(OK); case HSM2_MOD_LCGSO: value->rValue = model->HSM2_lcgso; return(OK); case HSM2_MOD_LCGDO: value->rValue = model->HSM2_lcgdo; return(OK); case HSM2_MOD_LJS0: value->rValue = model->HSM2_ljs0; return(OK); case HSM2_MOD_LJS0SW: value->rValue = model->HSM2_ljs0sw; return(OK); case HSM2_MOD_LNJ: value->rValue = model->HSM2_lnj; return(OK); case HSM2_MOD_LCISBK: value->rValue = model->HSM2_lcisbk; return(OK); case HSM2_MOD_LCLM1: value->rValue = model->HSM2_lclm1; return(OK); case HSM2_MOD_LCLM2: value->rValue = model->HSM2_lclm2; return(OK); case HSM2_MOD_LCLM3: value->rValue = model->HSM2_lclm3; return(OK); case HSM2_MOD_LWFC: value->rValue = model->HSM2_lwfc; return(OK); case HSM2_MOD_LGIDL1: value->rValue = model->HSM2_lgidl1; return(OK); case HSM2_MOD_LGIDL2: value->rValue = model->HSM2_lgidl2; return(OK); case HSM2_MOD_LGLEAK1: value->rValue = model->HSM2_lgleak1; return(OK); case HSM2_MOD_LGLEAK2: value->rValue = model->HSM2_lgleak2; return(OK); case HSM2_MOD_LGLEAK3: value->rValue = model->HSM2_lgleak3; return(OK); case HSM2_MOD_LGLEAK6: value->rValue = model->HSM2_lgleak6; return(OK); case HSM2_MOD_LGLKSD1: value->rValue = model->HSM2_lglksd1; return(OK); case HSM2_MOD_LGLKSD2: value->rValue = model->HSM2_lglksd2; return(OK); case HSM2_MOD_LGLKB1: value->rValue = model->HSM2_lglkb1; return(OK); case HSM2_MOD_LGLKB2: value->rValue = model->HSM2_lglkb2; return(OK); case HSM2_MOD_LNFTRP: value->rValue = model->HSM2_lnftrp; return(OK); case HSM2_MOD_LNFALP: value->rValue = model->HSM2_lnfalp; return(OK); case HSM2_MOD_LVDIFFJ: value->rValue = model->HSM2_lvdiffj; return(OK); case HSM2_MOD_LIBPC1: value->rValue = model->HSM2_libpc1; return(OK); case HSM2_MOD_LIBPC2: value->rValue = model->HSM2_libpc2; return(OK); /* Width dependence */ case HSM2_MOD_WVMAX: value->rValue = model->HSM2_wvmax; return(OK); case HSM2_MOD_WBGTMP1: value->rValue = model->HSM2_wbgtmp1; return(OK); case HSM2_MOD_WBGTMP2: value->rValue = model->HSM2_wbgtmp2; return(OK); case HSM2_MOD_WEG0: value->rValue = model->HSM2_weg0; return(OK); case HSM2_MOD_WLOVER: value->rValue = model->HSM2_wlover; return(OK); case HSM2_MOD_WVFBOVER: value->rValue = model->HSM2_wvfbover; return(OK); case HSM2_MOD_WNOVER: value->rValue = model->HSM2_wnover; return(OK); case HSM2_MOD_WWL2: value->rValue = model->HSM2_wwl2; return(OK); case HSM2_MOD_WVFBC: value->rValue = model->HSM2_wvfbc; return(OK); case HSM2_MOD_WNSUBC: value->rValue = model->HSM2_wnsubc; return(OK); case HSM2_MOD_WNSUBP: value->rValue = model->HSM2_wnsubp; return(OK); case HSM2_MOD_WSCP1: value->rValue = model->HSM2_wscp1; return(OK); case HSM2_MOD_WSCP2: value->rValue = model->HSM2_wscp2; return(OK); case HSM2_MOD_WSCP3: value->rValue = model->HSM2_wscp3; return(OK); case HSM2_MOD_WSC1: value->rValue = model->HSM2_wsc1; return(OK); case HSM2_MOD_WSC2: value->rValue = model->HSM2_wsc2; return(OK); case HSM2_MOD_WSC3: value->rValue = model->HSM2_wsc3; return(OK); case HSM2_MOD_WSC4: value->rValue = model->HSM2_wsc4; return(OK); case HSM2_MOD_WPGD1: value->rValue = model->HSM2_wpgd1; return(OK); //case HSM2_MOD_WPGD3: // value->rValue = model->HSM2_wpgd3; // return(OK); case HSM2_MOD_WNDEP: value->rValue = model->HSM2_wndep; return(OK); case HSM2_MOD_WNINV: value->rValue = model->HSM2_wninv; return(OK); case HSM2_MOD_WMUECB0: value->rValue = model->HSM2_wmuecb0; return(OK); case HSM2_MOD_WMUECB1: value->rValue = model->HSM2_wmuecb1; return(OK); case HSM2_MOD_WMUEPH1: value->rValue = model->HSM2_wmueph1; return(OK); case HSM2_MOD_WVTMP: value->rValue = model->HSM2_wvtmp; return(OK); case HSM2_MOD_WWVTH0: value->rValue = model->HSM2_wwvth0; return(OK); case HSM2_MOD_WMUESR1: value->rValue = model->HSM2_wmuesr1; return(OK); case HSM2_MOD_WMUETMP: value->rValue = model->HSM2_wmuetmp; return(OK); case HSM2_MOD_WSUB1: value->rValue = model->HSM2_wsub1; return(OK); case HSM2_MOD_WSUB2: value->rValue = model->HSM2_wsub2; return(OK); case HSM2_MOD_WSVDS: value->rValue = model->HSM2_wsvds; return(OK); case HSM2_MOD_WSVBS: value->rValue = model->HSM2_wsvbs; return(OK); case HSM2_MOD_WSVGS: value->rValue = model->HSM2_wsvgs; return(OK); case HSM2_MOD_WNSTI: value->rValue = model->HSM2_wnsti; return(OK); case HSM2_MOD_WWSTI: value->rValue = model->HSM2_wwsti; return(OK); case HSM2_MOD_WSCSTI1: value->rValue = model->HSM2_wscsti1; return(OK); case HSM2_MOD_WSCSTI2: value->rValue = model->HSM2_wscsti2; return(OK); case HSM2_MOD_WVTHSTI: value->rValue = model->HSM2_wvthsti; return(OK); case HSM2_MOD_WMUESTI1: value->rValue = model->HSM2_wmuesti1; return(OK); case HSM2_MOD_WMUESTI2: value->rValue = model->HSM2_wmuesti2; return(OK); case HSM2_MOD_WMUESTI3: value->rValue = model->HSM2_wmuesti3; return(OK); case HSM2_MOD_WNSUBPSTI1: value->rValue = model->HSM2_wnsubpsti1; return(OK); case HSM2_MOD_WNSUBPSTI2: value->rValue = model->HSM2_wnsubpsti2; return(OK); case HSM2_MOD_WNSUBPSTI3: value->rValue = model->HSM2_wnsubpsti3; return(OK); case HSM2_MOD_WNSUBCSTI1: value->rValue = model->HSM2_wnsubcsti1; return(OK); case HSM2_MOD_WNSUBCSTI2: value->rValue = model->HSM2_wnsubcsti2; return(OK); case HSM2_MOD_WNSUBCSTI3: value->rValue = model->HSM2_wnsubcsti3; return(OK); case HSM2_MOD_WCGSO: value->rValue = model->HSM2_wcgso; return(OK); case HSM2_MOD_WCGDO: value->rValue = model->HSM2_wcgdo; return(OK); case HSM2_MOD_WJS0: value->rValue = model->HSM2_wjs0; return(OK); case HSM2_MOD_WJS0SW: value->rValue = model->HSM2_wjs0sw; return(OK); case HSM2_MOD_WNJ: value->rValue = model->HSM2_wnj; return(OK); case HSM2_MOD_WCISBK: value->rValue = model->HSM2_wcisbk; return(OK); case HSM2_MOD_WCLM1: value->rValue = model->HSM2_wclm1; return(OK); case HSM2_MOD_WCLM2: value->rValue = model->HSM2_wclm2; return(OK); case HSM2_MOD_WCLM3: value->rValue = model->HSM2_wclm3; return(OK); case HSM2_MOD_WWFC: value->rValue = model->HSM2_wwfc; return(OK); case HSM2_MOD_WGIDL1: value->rValue = model->HSM2_wgidl1; return(OK); case HSM2_MOD_WGIDL2: value->rValue = model->HSM2_wgidl2; return(OK); case HSM2_MOD_WGLEAK1: value->rValue = model->HSM2_wgleak1; return(OK); case HSM2_MOD_WGLEAK2: value->rValue = model->HSM2_wgleak2; return(OK); case HSM2_MOD_WGLEAK3: value->rValue = model->HSM2_wgleak3; return(OK); case HSM2_MOD_WGLEAK6: value->rValue = model->HSM2_wgleak6; return(OK); case HSM2_MOD_WGLKSD1: value->rValue = model->HSM2_wglksd1; return(OK); case HSM2_MOD_WGLKSD2: value->rValue = model->HSM2_wglksd2; return(OK); case HSM2_MOD_WGLKB1: value->rValue = model->HSM2_wglkb1; return(OK); case HSM2_MOD_WGLKB2: value->rValue = model->HSM2_wglkb2; return(OK); case HSM2_MOD_WNFTRP: value->rValue = model->HSM2_wnftrp; return(OK); case HSM2_MOD_WNFALP: value->rValue = model->HSM2_wnfalp; return(OK); case HSM2_MOD_WVDIFFJ: value->rValue = model->HSM2_wvdiffj; return(OK); case HSM2_MOD_WIBPC1: value->rValue = model->HSM2_wibpc1; return(OK); case HSM2_MOD_WIBPC2: value->rValue = model->HSM2_wibpc2; return(OK); /* Cross-term dependence */ case HSM2_MOD_PVMAX: value->rValue = model->HSM2_pvmax; return(OK); case HSM2_MOD_PBGTMP1: value->rValue = model->HSM2_pbgtmp1; return(OK); case HSM2_MOD_PBGTMP2: value->rValue = model->HSM2_pbgtmp2; return(OK); case HSM2_MOD_PEG0: value->rValue = model->HSM2_peg0; return(OK); case HSM2_MOD_PLOVER: value->rValue = model->HSM2_plover; return(OK); case HSM2_MOD_PVFBOVER: value->rValue = model->HSM2_pvfbover; return(OK); case HSM2_MOD_PNOVER: value->rValue = model->HSM2_pnover; return(OK); case HSM2_MOD_PWL2: value->rValue = model->HSM2_pwl2; return(OK); case HSM2_MOD_PVFBC: value->rValue = model->HSM2_pvfbc; return(OK); case HSM2_MOD_PNSUBC: value->rValue = model->HSM2_pnsubc; return(OK); case HSM2_MOD_PNSUBP: value->rValue = model->HSM2_pnsubp; return(OK); case HSM2_MOD_PSCP1: value->rValue = model->HSM2_pscp1; return(OK); case HSM2_MOD_PSCP2: value->rValue = model->HSM2_pscp2; return(OK); case HSM2_MOD_PSCP3: value->rValue = model->HSM2_pscp3; return(OK); case HSM2_MOD_PSC1: value->rValue = model->HSM2_psc1; return(OK); case HSM2_MOD_PSC2: value->rValue = model->HSM2_psc2; return(OK); case HSM2_MOD_PSC3: value->rValue = model->HSM2_psc3; return(OK); case HSM2_MOD_PSC4: value->rValue = model->HSM2_psc4; return(OK); case HSM2_MOD_PPGD1: value->rValue = model->HSM2_ppgd1; return(OK); //case HSM2_MOD_PPGD3: // value->rValue = model->HSM2_ppgd3; // return(OK); case HSM2_MOD_PNDEP: value->rValue = model->HSM2_pndep; return(OK); case HSM2_MOD_PNINV: value->rValue = model->HSM2_pninv; return(OK); case HSM2_MOD_PMUECB0: value->rValue = model->HSM2_pmuecb0; return(OK); case HSM2_MOD_PMUECB1: value->rValue = model->HSM2_pmuecb1; return(OK); case HSM2_MOD_PMUEPH1: value->rValue = model->HSM2_pmueph1; return(OK); case HSM2_MOD_PVTMP: value->rValue = model->HSM2_pvtmp; return(OK); case HSM2_MOD_PWVTH0: value->rValue = model->HSM2_pwvth0; return(OK); case HSM2_MOD_PMUESR1: value->rValue = model->HSM2_pmuesr1; return(OK); case HSM2_MOD_PMUETMP: value->rValue = model->HSM2_pmuetmp; return(OK); case HSM2_MOD_PSUB1: value->rValue = model->HSM2_psub1; return(OK); case HSM2_MOD_PSUB2: value->rValue = model->HSM2_psub2; return(OK); case HSM2_MOD_PSVDS: value->rValue = model->HSM2_psvds; return(OK); case HSM2_MOD_PSVBS: value->rValue = model->HSM2_psvbs; return(OK); case HSM2_MOD_PSVGS: value->rValue = model->HSM2_psvgs; return(OK); case HSM2_MOD_PNSTI: value->rValue = model->HSM2_pnsti; return(OK); case HSM2_MOD_PWSTI: value->rValue = model->HSM2_pwsti; return(OK); case HSM2_MOD_PSCSTI1: value->rValue = model->HSM2_pscsti1; return(OK); case HSM2_MOD_PSCSTI2: value->rValue = model->HSM2_pscsti2; return(OK); case HSM2_MOD_PVTHSTI: value->rValue = model->HSM2_pvthsti; return(OK); case HSM2_MOD_PMUESTI1: value->rValue = model->HSM2_pmuesti1; return(OK); case HSM2_MOD_PMUESTI2: value->rValue = model->HSM2_pmuesti2; return(OK); case HSM2_MOD_PMUESTI3: value->rValue = model->HSM2_pmuesti3; return(OK); case HSM2_MOD_PNSUBPSTI1: value->rValue = model->HSM2_pnsubpsti1; return(OK); case HSM2_MOD_PNSUBPSTI2: value->rValue = model->HSM2_pnsubpsti2; return(OK); case HSM2_MOD_PNSUBPSTI3: value->rValue = model->HSM2_pnsubpsti3; return(OK); case HSM2_MOD_PNSUBCSTI1: value->rValue = model->HSM2_pnsubcsti1; return(OK); case HSM2_MOD_PNSUBCSTI2: value->rValue = model->HSM2_pnsubcsti2; return(OK); case HSM2_MOD_PNSUBCSTI3: value->rValue = model->HSM2_pnsubcsti3; return(OK); case HSM2_MOD_PCGSO: value->rValue = model->HSM2_pcgso; return(OK); case HSM2_MOD_PCGDO: value->rValue = model->HSM2_pcgdo; return(OK); case HSM2_MOD_PJS0: value->rValue = model->HSM2_pjs0; return(OK); case HSM2_MOD_PJS0SW: value->rValue = model->HSM2_pjs0sw; return(OK); case HSM2_MOD_PNJ: value->rValue = model->HSM2_pnj; return(OK); case HSM2_MOD_PCISBK: value->rValue = model->HSM2_pcisbk; return(OK); case HSM2_MOD_PCLM1: value->rValue = model->HSM2_pclm1; return(OK); case HSM2_MOD_PCLM2: value->rValue = model->HSM2_pclm2; return(OK); case HSM2_MOD_PCLM3: value->rValue = model->HSM2_pclm3; return(OK); case HSM2_MOD_PWFC: value->rValue = model->HSM2_pwfc; return(OK); case HSM2_MOD_PGIDL1: value->rValue = model->HSM2_pgidl1; return(OK); case HSM2_MOD_PGIDL2: value->rValue = model->HSM2_pgidl2; return(OK); case HSM2_MOD_PGLEAK1: value->rValue = model->HSM2_pgleak1; return(OK); case HSM2_MOD_PGLEAK2: value->rValue = model->HSM2_pgleak2; return(OK); case HSM2_MOD_PGLEAK3: value->rValue = model->HSM2_pgleak3; return(OK); case HSM2_MOD_PGLEAK6: value->rValue = model->HSM2_pgleak6; return(OK); case HSM2_MOD_PGLKSD1: value->rValue = model->HSM2_pglksd1; return(OK); case HSM2_MOD_PGLKSD2: value->rValue = model->HSM2_pglksd2; return(OK); case HSM2_MOD_PGLKB1: value->rValue = model->HSM2_pglkb1; return(OK); case HSM2_MOD_PGLKB2: value->rValue = model->HSM2_pglkb2; return(OK); case HSM2_MOD_PNFTRP: value->rValue = model->HSM2_pnftrp; return(OK); case HSM2_MOD_PNFALP: value->rValue = model->HSM2_pnfalp; return(OK); case HSM2_MOD_PVDIFFJ: value->rValue = model->HSM2_pvdiffj; return(OK); case HSM2_MOD_PIBPC1: value->rValue = model->HSM2_pibpc1; return(OK); case HSM2_MOD_PIBPC2: value->rValue = model->HSM2_pibpc2; return(OK); case HSM2_MOD_VGS_MAX: value->rValue = model->HSM2vgsMax; return(OK); case HSM2_MOD_VGD_MAX: value->rValue = model->HSM2vgdMax; return(OK); case HSM2_MOD_VGB_MAX: value->rValue = model->HSM2vgbMax; return(OK); case HSM2_MOD_VDS_MAX: value->rValue = model->HSM2vdsMax; return(OK); case HSM2_MOD_VBS_MAX: value->rValue = model->HSM2vbsMax; return(OK); case HSM2_MOD_VBD_MAX: value->rValue = model->HSM2vbdMax; return(OK); case HSM2_MOD_VGSR_MAX: value->rValue = model->HSM2vgsrMax; return(OK); case HSM2_MOD_VGDR_MAX: value->rValue = model->HSM2vgdrMax; return(OK); case HSM2_MOD_VGBR_MAX: value->rValue = model->HSM2vgbrMax; return(OK); case HSM2_MOD_VBSR_MAX: value->rValue = model->HSM2vbsrMax; return(OK); case HSM2_MOD_VBDR_MAX: value->rValue = model->HSM2vbdrMax; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2ld.c0000644000175000017500000016131113546075722021716 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM ( VERSION : 2 SUBVERSION : 8 REVISION : 0 ) FILE : hsm2ld.c Date : 2014.6.5 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HiSIM2 Distribution Statement and Copyright Notice" attached to HiSIM2 model. -----HiSIM2 Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaim all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." *************************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "hsm2def.h" #include "hisim2.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" #define SHOW_EPS_QUANT 1.0e-15 #define BYP_TOL_FACTOR model->HSM2_byptol #ifdef MOS_MODEL_TIME #ifdef USE_OMP #error "MOS_MODEL_TIME is not supported when USE_OMP is active" #endif /** MOS Model Time **/ #include extern char *mos_model_name ; extern double mos_model_time ; double gtodsecld(void) { struct timeval tv; const double sec2000 = 9.46e8 ; gettimeofday(&tv, NULL); return ( tv.tv_sec - sec2000 ) + (double)tv.tv_usec*1e-6; } double tm0 , tm1 ; #ifdef PARAMOS_TIME #include double vsum ; static double vsum0 = 1.0e5 ; #endif #endif #ifdef USE_OMP int HSM2LoadOMP(HSM2instance *here, CKTcircuit *ckt); void HSM2LoadRhsMat(GENmodel *inModel, CKTcircuit *ckt); #endif static void ShowPhysVals ( HSM2instance *here, HSM2model *model, int isFirst, double vds, double vgs, double vbs, double vgd, double vbd, double vgb ) { NG_IGNORE(vgd); NG_IGNORE(vbd); /* regard the epsilon-quantity as 0.0 */ vds = (fabs(vds) < SHOW_EPS_QUANT) ? 0.0 : vds; vgs = (fabs(vgs) < SHOW_EPS_QUANT) ? 0.0 : vgs; vbs = (fabs(vbs) < SHOW_EPS_QUANT) ? 0.0 : vbs; vgb = (fabs(vgb) < SHOW_EPS_QUANT) ? 0.0 : vgb; switch (model->HSM2_show) { case 1: if (isFirst) printf("Vds Ids\n"); printf("%e %e\n", model->HSM2_type*vds, here->HSM2_mode*here->HSM2_ids); break; case 2: if (isFirst) printf("Vgs Ids\n"); printf("%e %e\n", model->HSM2_type*vgs, here->HSM2_mode*here->HSM2_ids); break; case 3: if (isFirst) printf("Vgs log10(|Ids|)\n"); printf("%e %e\n", model->HSM2_type*vgs, log10(here->HSM2_ids)); break; case 4: if (isFirst) printf("log10(|Ids|) gm/|Ids|\n"); if (here->HSM2_ids == 0.0) printf("I can't show gm/Ids - log10(Ids), because Ids = 0.\n"); else printf("%e %e\n", log10(here->HSM2_ids), here->HSM2_gm/here->HSM2_ids); break; case 5: if (isFirst) printf("Vds gds\n"); printf("%e %e\n", model->HSM2_type*vds, here->HSM2_gds); break; case 6: if (isFirst) printf("Vgs gm\n"); printf("%e %e\n", model->HSM2_type*vgs, here->HSM2_gm); break; case 7: if (isFirst) printf("Vbs gbs\n"); printf("%e %e\n", model->HSM2_type*vbs, here->HSM2_gmbs); break; case 8: if (isFirst) printf("Vgs Cgg\n"); printf("%e %e\n", model->HSM2_type*vgs, here->HSM2_cggb); break; case 9: if (isFirst) printf("Vgs Cgs\n"); printf("%e %e\n", model->HSM2_type*vgs, here->HSM2_cgsb); break; case 10: if (isFirst) printf("Vgs Cgd\n"); printf("%e %e\n", model->HSM2_type*vgs, here->HSM2_cgdb); break; case 11: if (isFirst) printf("Vgs Cgb\n"); printf("%e %e\n", model->HSM2_type*vgs, -(here->HSM2_cggb+here->HSM2_cgsb+here->HSM2_cgdb)); break; case 12: if (isFirst) printf("Vds Csg\n"); printf("%e %e\n", model->HSM2_type*vds, -(here->HSM2_cggb+here->HSM2_cbgb+here->HSM2_cdgb)); break; case 13: if (isFirst) printf("Vds Cdg\n"); printf("%e %e\n", model->HSM2_type*vds, here->HSM2_cdgb); break; case 14: if (isFirst) printf("Vds Cbg\n"); printf("%e %e\n", model->HSM2_type*vds, here->HSM2_cbgb); break; case 15: if (isFirst) printf("Vds Cgg\n"); printf("%e %e\n", model->HSM2_type*vds, here->HSM2_cggb); break; case 16: if (isFirst) printf("Vds Cgs\n"); printf("%e %e\n", model->HSM2_type*vds, here->HSM2_cgsb); break; case 17: if (isFirst) printf("Vds Cgd\n"); printf("%e %e\n", model->HSM2_type*vds, here->HSM2_cgdb); break; case 18: if (isFirst) printf("Vds Cgb\n"); printf("%e %e\n", model->HSM2_type*vds, -(here->HSM2_cggb+here->HSM2_cgsb+here->HSM2_cgdb)); break; case 19: if (isFirst) printf("Vgs Csg\n"); printf("%e %e\n", model->HSM2_type*vgs, -(here->HSM2_cggb+here->HSM2_cbgb+here->HSM2_cdgb)); break; case 20: if (isFirst) printf("Vgs Cdg\n"); printf("%e %e\n", model->HSM2_type*vgs, here->HSM2_cdgb); break; case 21: if (isFirst) printf("Vgs Cbg\n"); printf("%e %e\n", model->HSM2_type*vgs, here->HSM2_cbgb); break; case 22: if (isFirst) printf("Vgb Cgb\n"); printf("%e %e\n", model->HSM2_type*vgb, -(here->HSM2_cggb+here->HSM2_cgsb+here->HSM2_cgdb)); break; case 50: if (isFirst) printf("Vgs Vds Vbs Vgb Ids log10(|Ids|) gm/|Ids| gm gds gbs Cgg Cgs Cgb Cgd Csg Cbg Cdg\n"); printf("%e %e %e %e %e %e %e %e %e %e %e %e %e %e %e %e %e\n", model->HSM2_type*vgs, model->HSM2_type*vds, model->HSM2_type*vbs, model->HSM2_type*vgb, here->HSM2_mode*here->HSM2_ids, log10(here->HSM2_ids), here->HSM2_gm/here->HSM2_ids, here->HSM2_gm, here->HSM2_gds, here->HSM2_gmbs, here->HSM2_cggb, here->HSM2_cgsb, -(here->HSM2_cggb+here->HSM2_cgsb+here->HSM2_cgdb), here->HSM2_cgdb, -(here->HSM2_cggb+here->HSM2_cbgb+here->HSM2_cdgb), here->HSM2_cbgb, here->HSM2_cdgb); break; default: /* printf("There is no physical value corrsponding to %d\n", flag); */ break; } } int HSM2load( GENmodel *inModel, CKTcircuit *ckt) /* actually load the current value into the * sparse matrix previously provided */ { #ifdef USE_OMP int idx; HSM2model *model = (HSM2model*)inModel; int error = 0; HSM2instance **InstArray; InstArray = model->HSM2InstanceArray; #pragma omp parallel for for (idx = 0; idx < model->HSM2InstCount; idx++) { HSM2instance *here = InstArray[idx]; int local_error = HSM2LoadOMP(here, ckt); if (local_error) error = local_error; } HSM2LoadRhsMat(inModel, ckt); return error; } int HSM2LoadOMP(HSM2instance *here, CKTcircuit *ckt) { HSM2model *model = HSM2modPtr(here); #else HSM2model *model = (HSM2model*)inModel; HSM2instance *here; #endif /* HSM2binningParam *pParam;*/ double cbhat=0.0, cdrain=0.0, cdhat=0.0, cdreq=0.0, cgbhat=0.0, cgshat=0.0, cgdhat=0.0 ; double Ibtot=0.0, Idtot=0.0, Igbtot=0.0, Igstot=0.0, Igdtot=0.0 ; double ceq=0.0, ceqbd=0.0, ceqbs=0.0, ceqqb=0.0, ceqqd=0.0, ceqqg=0.0 ; double ceqjs=0.0, ceqjd=0.0, ceqqjs=0.0, ceqqjd=0.0 ; double delvbd=0.0, delvbs=0.0, delvds=0.0, delvgd=0.0, delvgs=0.0 ; double gcbdb=0.0, gcbgb=0.0, gcbsb=0.0, gcddb=0.0, gcdgb=0.0, gcdsb=0.0 ; double gcgdb=0.0, gcggb=0.0, gcgsb=0.0, gcgbb=0.0, gcsdb=0.0, gcsgb=0.0, gcssb=0.0 ; double geq=0.0, xfact=0.0 ; double vbd=0.0, vbs=0.0, vds=0.0, vgb=0.0, vgd=0.0, vgdo=0.0, vgs=0.0, von=0.0 ; double gbbdp=0.0, gbbsp=0.0, gbspg=0.0, gbspdp=0.0, gbspb=0.0, gbspsp=0.0 ; double qgate=0.0, qbulk=0.0, qdrn=0.0 ; double cqgate=0.0, cqbulk=0.0, cqdrn=0.0 ; double gbdpdp=0.0, gbdpg=0.0, gbdpb=0.0, gbdpsp=0.0; double gm=0.0, gmbs=0.0, FwdSum=0.0, RevSum=0.0 ; double ag0=0.0 ; double Ibtoteq=0.0, gIbtotg=0.0, gIbtotd=0.0, gIbtots=0.0, gIbtotb=0.0 ; double Igtoteq=0.0, gIgtotg=0.0, gIgtotd=0.0, gIgtots=0.0, gIgtotb=0.0 ; double Idtoteq=0.0, gIdtotg=0.0, gIdtotd=0.0, gIdtots=0.0, gIdtotb=0.0 ; double Istoteq=0.0, gIstotg=0.0, gIstotd=0.0, gIstots=0.0, gIstotb=0.0 ; double ivds=0.0, ivgs=0.0, ivbs=0.0 ; double gjbs=0.0, gjbd=0.0, gcdbdb=0.0, gcsbsb=0.0, gcbbb=0.0, gcdbb=0.0, gcsbb=0.0, grg=0.0 ; double vdbs=0.0, vsbs=0.0, vdbd=0.0, delvdbs=0.0, delvsbs=0.0, delvdbd=0.0 ; double vges=0.0, vged=0.0, delvges=0.0, delvged=0.0, vgedo=0.0 ; double vsbdo=0.0, vsbd=0.0; double vbs_jct=0.0, vbd_jct=0.0, delvbs_jct=0.0, delvbd_jct=0.0 ; int ByPass=0, Check=0, Check1=0, Check2=0 ; int BYPASS_enable =0 ; #ifndef NOBYPASS double tempv=0.0 ; #endif /*NOBYPASS*/ #ifndef NEWCONV double tol=0.0, tol2=0.0, tol3=0.0, tol4=0.0 ; #endif int ChargeComputationNeeded = ((ckt->CKTmode & (MODEAC | MODETRAN | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) ? 1 : 0; int showPhysVal; int isConv; double vds_pre = 0.0; double reltol, abstol , voltTol ; #ifdef MOS_MODEL_TIME tm0 = gtodsecld() ; #endif #ifdef USE_OMP reltol = ckt->CKTreltol * BYP_TOL_FACTOR ; abstol = ckt->CKTabstol * BYP_TOL_FACTOR ; voltTol= ckt->CKTvoltTol* BYP_TOL_FACTOR ; BYPASS_enable = (BYP_TOL_FACTOR > 0.0 && ckt->CKTbypass) ; model->HSM2_bypass_enable = BYPASS_enable ; #else /* loop through all the HSM2 device models */ for ( ; model != NULL; model = HSM2nextModel(model)) { /* loop through all the instances of the model */ reltol = ckt->CKTreltol * BYP_TOL_FACTOR ; abstol = ckt->CKTabstol * BYP_TOL_FACTOR ; voltTol= ckt->CKTvoltTol* BYP_TOL_FACTOR ; BYPASS_enable = (BYP_TOL_FACTOR > 0.0 && ckt->CKTbypass) ; model->HSM2_bypass_enable = BYPASS_enable ; for (here = HSM2instances(model); here != NULL ; here = HSM2nextInstance(here)) { #endif /* pParam = &here->pParam ;*/ showPhysVal = 0; Check=1; ByPass = 0; #ifdef DEBUG_HISIM2LD_VX printf("mode = %x\n", ckt->CKTmode); printf("Vd Vg Vs Vb %e %e %e %e\n", *(ckt->CKTrhsOld+here->HSM2dNodePrime), *(ckt->CKTrhsOld+here->HSM2gNodePrime), *(ckt->CKTrhsOld+here->HSM2sNodePrime), *(ckt->CKTrhsOld+here->HSM2bNodePrime)); #endif if ( ckt->CKTmode & MODEINITSMSIG ) { vbs = *(ckt->CKTstate0 + here->HSM2vbs); vgs = *(ckt->CKTstate0 + here->HSM2vgs); vds = *(ckt->CKTstate0 + here->HSM2vds); vges = *(ckt->CKTstate0 + here->HSM2vges); vdbs = *(ckt->CKTstate0 + here->HSM2vdbs); vsbs = *(ckt->CKTstate0 + here->HSM2vsbs); } else if ( ckt->CKTmode & MODEINITTRAN ) { vbs = *(ckt->CKTstate1 + here->HSM2vbs); vgs = *(ckt->CKTstate1 + here->HSM2vgs); vds = *(ckt->CKTstate1 + here->HSM2vds); vges = *(ckt->CKTstate1 + here->HSM2vges); vdbs = *(ckt->CKTstate1 + here->HSM2vdbs); vsbs = *(ckt->CKTstate1 + here->HSM2vsbs); } else if ( (ckt->CKTmode & MODEINITJCT) && !here->HSM2_off ) { vds = model->HSM2_type * here->HSM2_icVDS; vgs = vges = model->HSM2_type * here->HSM2_icVGS; vbs = vdbs = vsbs = model->HSM2_type * here->HSM2_icVBS; if ( (vds == 0.0) && (vgs == 0.0) && (vbs == 0.0) && ( (ckt->CKTmode & (MODETRAN|MODEAC|MODEDCOP|MODEDCTRANCURVE)) || !(ckt->CKTmode & MODEUIC) ) ) { /* set biases for starting analysis */ vbs = vdbs = vsbs = 0.0; /* vgs = vges = model->HSM2_type * pParam->HSM2_vfbc + 0.1; */ vgs = vges = 0.1; vds = 0.1; } } else if ( ( ckt->CKTmode & (MODEINITJCT | MODEINITFIX) ) && here->HSM2_off ) { vbs = vgs = vds = 0.0; vges = 0.0; vdbs = vsbs = 0.0; } else { #ifndef PREDICTOR /* BSIM3 style */ if (ckt->CKTmode & MODEINITPRED) { xfact = ckt->CKTdelta / ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->HSM2vbs) = *(ckt->CKTstate1 + here->HSM2vbs); vbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSM2vbs)) -(xfact * (*(ckt->CKTstate2 + here->HSM2vbs))); *(ckt->CKTstate0 + here->HSM2vgs) = *(ckt->CKTstate1 + here->HSM2vgs); vgs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSM2vgs)) -(xfact * (*(ckt->CKTstate2 + here->HSM2vgs))); *(ckt->CKTstate0 + here->HSM2vds) = *(ckt->CKTstate1 + here->HSM2vds); vds = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSM2vds)) -(xfact * (*(ckt->CKTstate2 + here->HSM2vds))); *(ckt->CKTstate0 + here->HSM2vbd) = *(ckt->CKTstate0 + here->HSM2vbs)- *(ckt->CKTstate0 + here->HSM2vds); *(ckt->CKTstate0 + here->HSM2vges) = *(ckt->CKTstate1 + here->HSM2vges); vges = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSM2vges)) -(xfact * (*(ckt->CKTstate2 + here->HSM2vges))); *(ckt->CKTstate0 + here->HSM2vdbs) = *(ckt->CKTstate1 + here->HSM2vdbs); vdbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSM2vdbs)) - (xfact * (*(ckt->CKTstate2 + here->HSM2vdbs))); *(ckt->CKTstate0 + here->HSM2vdbd) = *(ckt->CKTstate0 + here->HSM2vdbs) - *(ckt->CKTstate0 + here->HSM2vds); *(ckt->CKTstate0 + here->HSM2vsbs) = *(ckt->CKTstate1 + here->HSM2vsbs); vsbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HSM2vsbs)) - (xfact * (*(ckt->CKTstate2 + here->HSM2vsbs))); } else { #endif /* PREDICTOR */ /* get biases from CKT */ vbs = model->HSM2_type * (*(ckt->CKTrhsOld+here->HSM2bNodePrime) - *(ckt->CKTrhsOld+here->HSM2sNodePrime)); vgs = model->HSM2_type * (*(ckt->CKTrhsOld+here->HSM2gNodePrime) - *(ckt->CKTrhsOld+here->HSM2sNodePrime)); vds = model->HSM2_type * (*(ckt->CKTrhsOld+here->HSM2dNodePrime) - *(ckt->CKTrhsOld+here->HSM2sNodePrime)); vges = model->HSM2_type * (*(ckt->CKTrhsOld+here->HSM2gNode) - *(ckt->CKTrhsOld+here->HSM2sNodePrime)); vdbs = model->HSM2_type * (*(ckt->CKTrhsOld + here->HSM2dbNode) - *(ckt->CKTrhsOld + here->HSM2sNodePrime)); vsbs = model->HSM2_type * (*(ckt->CKTrhsOld + here->HSM2sbNode) - *(ckt->CKTrhsOld + here->HSM2sNodePrime)); #ifndef PREDICTOR } #endif /* PREDICTOR */ vbd = vbs - vds; vgd = vgs - vds; vged = vges - vds; vdbd = vdbs - vds; vgdo = *(ckt->CKTstate0 + here->HSM2vgs) - *(ckt->CKTstate0 + here->HSM2vds); vgedo = *(ckt->CKTstate0 + here->HSM2vges) - *(ckt->CKTstate0 + here->HSM2vds); delvbs = vbs - *(ckt->CKTstate0 + here->HSM2vbs); delvbd = vbd - *(ckt->CKTstate0 + here->HSM2vbd); delvgs = vgs - *(ckt->CKTstate0 + here->HSM2vgs); delvges = vges - *(ckt->CKTstate0 + here->HSM2vges); delvds = vds - *(ckt->CKTstate0 + here->HSM2vds); delvdbs = vdbs - *(ckt->CKTstate0 + here->HSM2vdbs); delvsbs = vsbs - *(ckt->CKTstate0 + here->HSM2vsbs); delvdbd = vdbd - *(ckt->CKTstate0 + here->HSM2vdbd); delvgd = vgd - vgdo; delvged = vged - vgedo; delvbd_jct = (!here->HSM2_corbnet) ? delvbd : delvdbd; delvbs_jct = (!here->HSM2_corbnet) ? delvbs : delvsbs; if (here->HSM2_mode >= 0) { Idtot = here->HSM2_ids + here->HSM2_isub - here->HSM2_ibd + here->HSM2_igidl; cdhat = Idtot - here->HSM2_gbd * delvbd_jct + (here->HSM2_gmbs + here->HSM2_gbbs + here->HSM2_gigidlbs) * delvbs + (here->HSM2_gm + here->HSM2_gbgs + here->HSM2_gigidlgs) * delvgs + (here->HSM2_gds + here->HSM2_gbds + here->HSM2_gigidlds) * delvds; Ibtot = here->HSM2_ibs + here->HSM2_ibd - here->HSM2_isub - here->HSM2_igidl - here->HSM2_igisl; cbhat = Ibtot + here->HSM2_gbd * delvbd_jct + here->HSM2_gbs * delvbs_jct - (here->HSM2_gbbs + here->HSM2_gigidlbs) * delvbs - (here->HSM2_gbgs + here->HSM2_gigidlgs) * delvgs - (here->HSM2_gbds + here->HSM2_gigidlds) * delvds - here->HSM2_gigislgd * delvgd - here->HSM2_gigislbd * delvbd + here->HSM2_gigislsd * delvds; Igstot = here->HSM2_igs; cgshat = Igstot + here->HSM2_gigsg * delvgs + here->HSM2_gigsd * delvds + here->HSM2_gigsb * delvbs; Igdtot = here->HSM2_igd; cgdhat = Igdtot + here->HSM2_gigdg * delvgs + here->HSM2_gigdd * delvds + here->HSM2_gigdb * delvbs; Igbtot = here->HSM2_igb; cgbhat = Igbtot + here->HSM2_gigbg * delvgs + here->HSM2_gigbd * delvds + here->HSM2_gigbb * delvbs; } else { Idtot = here->HSM2_ids + here->HSM2_ibd - here->HSM2_igidl; cdhat = Idtot + here->HSM2_gbd * delvbd_jct + here->HSM2_gmbs * delvbd + here->HSM2_gm * delvgd - here->HSM2_gds * delvds - here->HSM2_gigidlgs * delvgd - here->HSM2_gigidlbs * delvbd + here->HSM2_gigidlds * delvds ; Ibtot = here->HSM2_ibs + here->HSM2_ibd - here->HSM2_isub - here->HSM2_igidl - here->HSM2_igisl; cbhat = Ibtot + here->HSM2_gbs * delvbs_jct + here->HSM2_gbd * delvbd_jct - (here->HSM2_gbbs + here->HSM2_gigidlbs) * delvbd - (here->HSM2_gbgs + here->HSM2_gigidlgs) * delvgd + (here->HSM2_gbds + here->HSM2_gigidlds) * delvds - here->HSM2_gigislgd * delvgd - here->HSM2_gigislbd * delvbd + here->HSM2_gigislsd * delvds; Igbtot = here->HSM2_igb; cgbhat = Igbtot + here->HSM2_gigbg * delvgd - here->HSM2_gigbs * delvds + here->HSM2_gigbb * delvbd; Igstot = here->HSM2_igs; cgshat = Igstot + here->HSM2_gigsg * delvgd - here->HSM2_gigss * delvds + here->HSM2_gigsb * delvbd; Igdtot = here->HSM2_igd; cgdhat = Igdtot + here->HSM2_gigdg * delvgd - here->HSM2_gigds * delvds + here->HSM2_gigdb * delvbd; } vds_pre = vds; #ifndef NOBYPASS /* BSIM3 style */ /* now lets see if we can bypass (ugh) */ /* following should be one big if connected by && all over * the place, but some C compilers can't handle that, so * we split it up here to let them digest it in stages */ if ( !(ckt->CKTmode & MODEINITPRED) && BYPASS_enable ) if ((!here->HSM2_corbnet) || (fabs(delvdbs) < (reltol * MAX(fabs(vdbs), fabs(*(ckt->CKTstate0 + here->HSM2vdbs))) + voltTol))) if ((!here->HSM2_corbnet) || (fabs(delvdbd) < (reltol * MAX(fabs(vdbd), fabs(*(ckt->CKTstate0 + here->HSM2vdbd))) + voltTol))) if ((!here->HSM2_corbnet) || (fabs(delvsbs) < (reltol * MAX(fabs(vsbs), fabs(*(ckt->CKTstate0 + here->HSM2vsbs))) + voltTol))) if ((here->HSM2_corg == 0) || (here->HSM2_corg == 1) || (fabs(delvges) < (reltol * MAX(fabs(vges), fabs(*(ckt->CKTstate0 + here->HSM2vges))) + voltTol))) if ( fabs(delvbs) < ( reltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->HSM2vbs))) + voltTol ) ) if ( fabs(delvbd) < ( reltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0+here->HSM2vbd))) + voltTol ) ) if ( fabs(delvgs) < ( reltol * MAX(fabs(vgs), fabs(*(ckt->CKTstate0+here->HSM2vgs))) + voltTol ) ) if ( fabs(delvds) < ( reltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0+here->HSM2vds))) + voltTol ) ) if ( fabs(cdhat - Idtot) < ( reltol * MAX(fabs(cdhat),fabs(Idtot)) + abstol ) ) if (!model->HSM2_coiigs || (fabs(cgbhat - Igbtot) < reltol * MAX(fabs(cgbhat), fabs(Igbtot)) + abstol)) if (!model->HSM2_coiigs || (fabs(cgshat - Igstot) < reltol * MAX(fabs(cgshat), fabs(Igstot)) + abstol)) if (!model->HSM2_coiigs || (fabs(cgdhat - Igdtot) < reltol * MAX(fabs(cgdhat), fabs(Igdtot)) + abstol)){ tempv = MAX(fabs(cbhat),fabs(Ibtot)) + abstol; if ((fabs(cbhat - Ibtot)) < reltol * tempv) { /* bypass code */ vbs = *(ckt->CKTstate0 + here->HSM2vbs); vbd = *(ckt->CKTstate0 + here->HSM2vbd); vgs = *(ckt->CKTstate0 + here->HSM2vgs); vds = *(ckt->CKTstate0 + here->HSM2vds); vges = *(ckt->CKTstate0 + here->HSM2vges); vdbs = *(ckt->CKTstate0 + here->HSM2vdbs); vdbd = *(ckt->CKTstate0 + here->HSM2vdbd); vsbs = *(ckt->CKTstate0 + here->HSM2vsbs); vgd = vgs - vds; vgb = vgs - vbs; vged = vges - vds; vbs_jct = (!here->HSM2_corbnet) ? vbs : vsbs; vbd_jct = (!here->HSM2_corbnet) ? vbd : vdbd; cdrain = here->HSM2_ids; if ((ckt->CKTmode & (MODETRAN | MODEAC)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) { ByPass = 1; qgate = here->HSM2_qg; qbulk = here->HSM2_qb; qdrn = here->HSM2_qd; goto line755; } else goto line850; } } #endif /*NOBYPASS*/ #ifdef DEBUG_HISIM2LD_VX printf( "vbd_p = %12.5e\n" , vbd ); printf( "vbs_p = %12.5e\n" , vbs ); printf( "vgs_p = %12.5e\n" , vgs ); printf( "vds_p = %12.5e\n" , vds ); #endif von = here->HSM2_von; if(*(ckt->CKTstate0 + here->HSM2vds) >= 0.0) { vgs = DEVfetlim(vgs, *(ckt->CKTstate0 + here->HSM2vgs), von); vds = vgs - vgd; vds = DEVlimvds(vds, *(ckt->CKTstate0 + here->HSM2vds)); vgd = vgs - vds; if (here->HSM2_corg == 1) { vges = DEVfetlim(vges, *(ckt->CKTstate0 + here->HSM2vges), von); vged = vges - vds; } } else { vgd = DEVfetlim(vgd, vgdo, von); vds = vgs - vgd; vds = -DEVlimvds(-vds, -(*(ckt->CKTstate0 + here->HSM2vds))); vgs = vgd + vds; if (here->HSM2_corg == 1) { vged = DEVfetlim(vged, vgedo, von); vges = vged + vds; } } if (vds >= 0.0) { vbs = DEVpnjlim(vbs, *(ckt->CKTstate0 + here->HSM2vbs), CONSTvt0, model->HSM2_vcrit, &Check); vbd = vbs - vds; if (here->HSM2_corbnet) { vdbs = DEVpnjlim(vdbs, *(ckt->CKTstate0 + here->HSM2vdbs), CONSTvt0, model->HSM2_vcrit, &Check1); vdbd = vdbs - vds; vsbs = DEVpnjlim(vsbs, *(ckt->CKTstate0 + here->HSM2vsbs), CONSTvt0, model->HSM2_vcrit, &Check2); if ((Check1 == 0) && (Check2 == 0)) Check = 0; else Check = 1; } } else { vbd = DEVpnjlim(vbd, *(ckt->CKTstate0 + here->HSM2vbd), CONSTvt0, model->HSM2_vcrit, &Check); vbs = vbd + vds; if (here->HSM2_corbnet) { vdbd = DEVpnjlim(vdbd, *(ckt->CKTstate0 + here->HSM2vdbd), CONSTvt0, model->HSM2_vcrit, &Check1); vdbs = vdbd + vds; vsbdo = *(ckt->CKTstate0 + here->HSM2vsbs) - *(ckt->CKTstate0 + here->HSM2vds); vsbd = vsbs - vds; vsbd = DEVpnjlim(vsbd, vsbdo, CONSTvt0, model->HSM2_vcrit, &Check2); vsbs = vsbd + vds; if ((Check1 == 0) && (Check2 == 0)) Check = 0; else Check = 1; } } } vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; vged = vges - vds; vdbd = vdbs - vds; vbs_jct = (!here->HSM2_corbnet) ? vbs : vsbs; vbd_jct = (!here->HSM2_corbnet) ? vbd : vdbd; #ifdef DEBUG_HISIM2LD_VX printf( "vbd = %12.5e\n" , vbd ); printf( "vbs = %12.5e\n" , vbs ); printf( "vgs = %12.5e\n" , vgs ); printf( "vds = %12.5e\n" , vds ); #endif if (vds >= 0) { /* normal mode */ here->HSM2_mode = 1; ivds = vds; ivgs = vgs; ivbs = vbs; } else { /* reverse mode */ here->HSM2_mode = -1; ivds = -vds; ivgs = vgd; ivbs = vbd; } if ( model->HSM2_info >= 5 ) { /* mode, bias conditions ... */ printf( "--- variables given to HSM2evaluate() ----\n" ); printf( "type = %s\n" , (model->HSM2_type>0) ? "NMOS" : "PMOS" ); printf( "mode = %s\n" , (here->HSM2_mode>0) ? "NORMAL" : "REVERSE" ); printf( "vbs = %12.5e\n" , ivbs ); printf( "vds = %12.5e\n" , ivds ); printf( "vgs = %12.5e\n" , ivgs ); } if ( model->HSM2_info >= 6 ) { /* input flags */ printf( "corsrd = %s\n" , (model->HSM2_corsrd) ? "true" : "false" ) ; printf( "coadov = %s\n" , (model->HSM2_coadov) ? "true" : "false" ) ; printf( "coisub = %s\n" , (model->HSM2_coisub) ? "true" : "false" ) ; printf( "coiigs = %s\n" , (model->HSM2_coiigs) ? "true" : "false" ) ; printf( "cogidl = %s\n" , (model->HSM2_cogidl) ? "true" : "false" ) ; printf( "coovlp = %s\n" , (model->HSM2_coovlp) ? "true" : "false" ) ; printf( "coflick = %s\n" , (model->HSM2_coflick) ? "true" : "false" ) ; printf( "coisti = %s\n" , (model->HSM2_coisti) ? "true" : "false" ) ; printf( "conqs = %s\n" , (model->HSM2_conqs) ? "true" : "false" ) ; printf( "cothrml = %s\n" , (model->HSM2_cothrml) ? "true" : "false" ) ; printf( "coign = %s\n" , (model->HSM2_coign) ? "true" : "false" ) ; } /* print inputs ------------AA */ #ifdef DEBUG_HISIM2CGG /* Print convergence flag */ printf("isConv %d ", isConv ); printf("CKTtime %e ", ckt->CKTtime ); printf("Vb %1.3e ", (model->HSM2_type>0) ? vbs:-vbs ); printf("Vd %1.3e ", (model->HSM2_type>0) ? vds:-vds ); printf("Vg %1.3e ", (model->HSM2_type>0) ? vgs:-vgs ); #endif /* call model evaluation */ if ( HSM2evaluate(ivds, ivgs, ivbs, vbs_jct, vbd_jct, here, model, ckt) == HiSIM_ERROR ) return (HiSIM_ERROR); #ifdef DEBUG_HISIM2CGG printf("HSM2_ids %e ", here->HSM2_ids ) ; printf("HSM2_cggb %e ", here->HSM2_cggb ) ; printf("\n") ; #endif /* modified by T.Y. 2006.05.31 * if ( !here->HSM2_called ) here->HSM2_called = 1; */ here->HSM2_called += 1; cdrain = here->HSM2_ids ; /* cdrain */ qgate = here->HSM2_qg ; /* gate */ qdrn = here->HSM2_qd ; /* drain */ qbulk = here->HSM2_qb = -1.0 * (here->HSM2_qg + here->HSM2_qd + here->HSM2_qs); /* bulk */ /* print all outputs ------------VV */ if ( model->HSM2_info >= 4 ) { printf( "--- variables returned from HSM2evaluate() ----\n" ) ; printf( "von = %12.5e\n" , here->HSM2_von ) ; printf( "vdsat = %12.5e\n" , here->HSM2_vdsat ) ; printf( "ids = %12.5e\n" , here->HSM2_ids ) ; printf( "gds = %12.5e\n" , here->HSM2_gds ) ; printf( "gm = %12.5e\n" , here->HSM2_gm ) ; printf( "gmbs = %12.5e\n" , here->HSM2_gmbs ) ; printf( "cggo = %12.5e\n" , -(here->HSM2_cgdo + here->HSM2_cgso +here->HSM2_cgbo) ) ; printf( "cgdo = %12.5e\n" , here->HSM2_cgdo ) ; printf( "cgso = %12.5e\n" , here->HSM2_cgso ) ; printf( "cdgo = %12.5e\n" , here->HSM2_cdgo ) ; printf( "cddo = %12.5e\n" , here->HSM2_cddo ) ; printf( "cdso = %12.5e\n" , here->HSM2_cdso ) ; printf( "csgo = %12.5e\n" , here->HSM2_csgo ) ; printf( "csdo = %12.5e\n" , here->HSM2_csdo ) ; printf( "csso = %12.5e\n" , here->HSM2_csso ) ; printf( "qg = %12.5e\n" , here->HSM2_qg ) ; printf( "qd = %12.5e\n" , here->HSM2_qd ) ; printf( "qs = %12.5e\n" , here->HSM2_qs ) ; printf( "cggb = %12.5e\n" , here->HSM2_cggb ) ; printf( "cgsb = %12.5e\n" , here->HSM2_cgsb ) ; printf( "cgdb = %12.5e\n" , here->HSM2_cgdb ) ; printf( "cbgb = %12.5e\n" , here->HSM2_cbgb ) ; printf( "cbsb = %12.5e\n" , here->HSM2_cbsb ) ; printf( "cbdb = %12.5e\n" , here->HSM2_cbdb ) ; printf( "cdgb = %12.5e\n" , here->HSM2_cdgb ) ; printf( "cdsb = %12.5e\n" , here->HSM2_cdsb ) ; printf( "cddb = %12.5e\n" , here->HSM2_cddb ) ; printf( "ibd = %12.5e\n" , here->HSM2_ibd ) ; printf( "ibs = %12.5e\n" , here->HSM2_ibs ) ; printf( "gbd = %12.5e\n" , here->HSM2_gbd ) ; printf( "gbs = %12.5e\n" , here->HSM2_gbs ) ; printf( "capbd = %12.5e\n" , here->HSM2_capbd ) ; printf( "capbs = %12.5e\n" , here->HSM2_capbs ) ; printf( "qbd = %12.5e\n" , *(ckt->CKTstate0 + here->HSM2qbd) ) ; printf( "qbs = %12.5e\n" , *(ckt->CKTstate0 + here->HSM2qbs) ) ; printf( "isub = %12.5e\n" , here->HSM2_isub ) ; printf( "gbgs = %12.5e\n" , here->HSM2_gbgs ) ; printf( "gbds = %12.5e\n" , here->HSM2_gbds ) ; printf( "gbbs = %12.5e\n" , here->HSM2_gbbs ) ; printf( "S_flicker_noise * ( freq / gain ) = %.16e\n" , here->HSM2_noiflick ) ; printf( "S_thermal_noise / ( gain * 4kT ) = %.16e\n" , here->HSM2_noithrml ) ; printf( "S_induced_gate_noise / ( gain * freq^2 ) = %.16e\n" , here->HSM2_noiigate ) ; printf( "cross-correlation coefficient (= Sigid/sqrt(Sig*Sid) ) = %.16e\n" , here->HSM2_noicross ) ; /* print Surface Potentials */ printf( "ivds %e ivgs %e ivbs %e Ps0 %.16e Pds %.16e\n" , ivds, ivgs, ivbs, here->HSM2_ps0_prv, here->HSM2_pds_prv ) ; } /* print all outputs ------------AA */ if ( model->HSM2_info >= 3 ) { /* physical valiables vs bias */ static int isFirst = 1; if (isFirst) { printf("# vbs vds vgs cggb cgdb cgsb cbgb cbdb cbsb cdgb cddb cdsb\n"); #ifndef USE_OMP isFirst = 0; #endif } printf("%12.5e %12.5e %12.5e %12.5e %12.5e %12.5e %12.5e %12.5e %12.5e %12.5e %12.5e %12.5e\n", vbs, vds, vgs , here->HSM2_cggb, here->HSM2_cgdb, here->HSM2_cgsb, here->HSM2_cbgb, here->HSM2_cbdb, here->HSM2_cbsb, here->HSM2_cdgb, here->HSM2_cddb, here->HSM2_cdsb); } /* * check convergence */ isConv = 1; if ( (here->HSM2_off == 0) || !(ckt->CKTmode & MODEINITFIX) ) { if (Check == 1) { ckt->CKTnoncon++; isConv = 0; #ifndef NEWCONV } else { if (here->HSM2_mode >= 0) Idtot = here->HSM2_ids + here->HSM2_isub - here->HSM2_ibd + here->HSM2_igidl; else Idtot = here->HSM2_ids + here->HSM2_ibd - here->HSM2_igidl; tol = ckt->CKTreltol * MAX(fabs(cdhat), fabs(Idtot)) + ckt->CKTabstol; tol2 = ckt->CKTreltol * MAX(fabs(cgbhat), fabs(Igbtot)) + ckt->CKTabstol; tol3 = ckt->CKTreltol * MAX(fabs(cgshat), fabs(Igstot)) + ckt->CKTabstol; tol4 = ckt->CKTreltol * MAX(fabs(cgdhat), fabs(Igdtot)) + ckt->CKTabstol; if (fabs(cdhat - Idtot) >= tol) { ckt->CKTnoncon++; isConv = 0; } else if (fabs(cgbhat - Igbtot) >= tol2 || fabs(cgshat - Igstot) >= tol3 || fabs(cgdhat - Igdtot) >= tol4) { ckt->CKTnoncon++; isConv = 0; } else { Ibtot = here->HSM2_ibs + here->HSM2_ibd - here->HSM2_isub - here->HSM2_igidl - here->HSM2_igisl; tol = ckt->CKTreltol * MAX(fabs(cbhat), fabs(Ibtot)) + ckt->CKTabstol; if (fabs(cbhat - Ibtot) > tol) { ckt->CKTnoncon++; isConv = 0; } } } #endif /* NEWCONV */ } } *(ckt->CKTstate0 + here->HSM2vbs) = vbs; *(ckt->CKTstate0 + here->HSM2vbd) = vbd; *(ckt->CKTstate0 + here->HSM2vgs) = vgs; *(ckt->CKTstate0 + here->HSM2vds) = vds; *(ckt->CKTstate0 + here->HSM2vsbs) = vsbs; *(ckt->CKTstate0 + here->HSM2vdbs) = vdbs; *(ckt->CKTstate0 + here->HSM2vdbd) = vdbd; *(ckt->CKTstate0 + here->HSM2vges) = vges; if ((ckt->CKTmode & MODEDC) && !(ckt->CKTmode & MODEINITFIX) && !(ckt->CKTmode & MODEINITJCT)) showPhysVal = 1; if (model->HSM2_show_Given && showPhysVal && isConv) { static int isFirst = 1; if (vds != vds_pre) ShowPhysVals(here, model, isFirst, vds_pre, vgs, vbs, vgd, vbd, vgb); else ShowPhysVals(here, model, isFirst, vds, vgs, vbs, vgd, vbd, vgb); #ifndef USE_OMP if (isFirst) isFirst = 0; #endif } /* bulk and channel charge plus overlaps */ if (!ChargeComputationNeeded) goto line850; line755: ag0 = ckt->CKTag[0]; if (here->HSM2_mode > 0) { /* NORMAL mode */ gcggb = here->HSM2_cggb * ag0; gcgdb = here->HSM2_cgdb * ag0; gcgsb = here->HSM2_cgsb * ag0; gcgbb = -(gcggb + gcgdb + gcgsb); gcdgb = here->HSM2_cdgb * ag0; gcddb = (here->HSM2_cddb + here->HSM2_capbd) * ag0; gcdsb = here->HSM2_cdsb * ag0; gcsgb = -(here->HSM2_cggb + here->HSM2_cbgb + here->HSM2_cdgb) * ag0; gcsdb = -(here->HSM2_cgdb + here->HSM2_cbdb + here->HSM2_cddb) * ag0; gcssb = (here->HSM2_capbs - (here->HSM2_cgsb + here->HSM2_cbsb + here->HSM2_cdsb)) * ag0; gcbgb = here->HSM2_cbgb * ag0; if ( !here->HSM2_corbnet ) { gcdbb = -(gcdgb + gcddb + gcdsb); gcsbb = -(gcsgb + gcsdb + gcssb); gcbdb = (here->HSM2_cbdb - here->HSM2_capbd) * ag0; gcbsb = (here->HSM2_cbsb - here->HSM2_capbs) * ag0; gcdbdb = 0.0; gcsbsb = 0.0; } else { gcdbb = -(gcdgb + gcddb + gcdsb) + here->HSM2_capbd * ag0; gcsbb = -(gcsgb + gcsdb + gcssb) + here->HSM2_capbs * ag0; gcbdb = here->HSM2_cbdb * ag0; gcbsb = here->HSM2_cbsb * ag0; gcdbdb = - here->HSM2_capbd * ag0; gcsbsb = - here->HSM2_capbs * ag0; } gcbbb = -(gcbdb + gcbgb + gcbsb); } else { /* REVERSE mode */ gcggb = here->HSM2_cggb * ag0; gcgdb = here->HSM2_cgsb * ag0; gcgsb = here->HSM2_cgdb * ag0; gcgbb = -(gcggb + gcgdb + gcgsb); gcdgb = -(here->HSM2_cggb + here->HSM2_cbgb + here->HSM2_cdgb) * ag0; gcddb = (here->HSM2_capbd - (here->HSM2_cgsb + here->HSM2_cbsb + here->HSM2_cdsb)) * ag0; gcdsb = -(here->HSM2_cgdb + here->HSM2_cbdb + here->HSM2_cddb) * ag0; gcsgb = here->HSM2_cdgb * ag0; gcsdb = here->HSM2_cdsb * ag0; gcssb = (here->HSM2_cddb + here->HSM2_capbs) * ag0; gcbgb = here->HSM2_cbgb * ag0; if ( !here->HSM2_corbnet ){ gcdbb = -(gcdgb + gcddb + gcdsb); gcsbb = -(gcsgb + gcsdb + gcssb); gcbdb = (here->HSM2_cbsb - here->HSM2_capbd) * ag0; gcbsb = (here->HSM2_cbdb - here->HSM2_capbs) * ag0; gcdbdb = 0.0; gcsbsb = 0.0; } else { gcdbb = -(gcdgb + gcddb + gcdsb) + here->HSM2_capbd * ag0; gcsbb = -(gcsgb + gcsdb + gcssb) + here->HSM2_capbs * ag0; gcbdb = here->HSM2_cbsb * ag0; gcbsb = here->HSM2_cbdb * ag0; gcdbdb = - here->HSM2_capbd * ag0; gcsbsb = - here->HSM2_capbs * ag0; } gcbbb = -(gcbgb + gcbdb + gcbsb); qdrn = -(qgate + qbulk + qdrn); } if (ByPass) goto line860; *(ckt->CKTstate0 + here->HSM2qg) = qgate; *(ckt->CKTstate0 + here->HSM2qd) = qdrn - *(ckt->CKTstate0 + here->HSM2qbd); if ( !here->HSM2_corbnet ) { *(ckt->CKTstate0 + here->HSM2qb) = qbulk + *(ckt->CKTstate0 + here->HSM2qbd) + *(ckt->CKTstate0 + here->HSM2qbs); } else { *(ckt->CKTstate0 + here->HSM2qb) = qbulk; } #ifdef DEBUG_HISIM2LD printf( "qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\n" ) ; printf( "HSM2qg = %12.5e\n" , *(ckt->CKTstate0 + here->HSM2qg) ) ; printf( "HSM2qd = %12.5e\n" , *(ckt->CKTstate0 + here->HSM2qd) ) ; printf( "HSM2qb = %12.5e\n" , *(ckt->CKTstate0 + here->HSM2qb) ) ; printf( "qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\n" ) ; #endif /* store small signal parameters */ if (ckt->CKTmode & MODEINITSMSIG) goto line1000; if (!ChargeComputationNeeded) goto line850; if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->HSM2qb) = *(ckt->CKTstate0 + here->HSM2qb); *(ckt->CKTstate1 + here->HSM2qg) = *(ckt->CKTstate0 + here->HSM2qg); *(ckt->CKTstate1 + here->HSM2qd) = *(ckt->CKTstate0 + here->HSM2qd); if ( here->HSM2_corbnet ) { *(ckt->CKTstate1 + here->HSM2qbs) = *(ckt->CKTstate0 + here->HSM2qbs); *(ckt->CKTstate1 + here->HSM2qbd) = *(ckt->CKTstate0 + here->HSM2qbd); } } return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSM2qb)); return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSM2qg)); return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSM2qd)); if ( here->HSM2_corbnet ) { return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSM2qbs)); return_if_error (NIintegrate(ckt, &geq, &ceq, 0.0, here->HSM2qbd)); } goto line860; line850: /* initialize to zero charge conductance and current */ ceqqg = ceqqb = ceqqd = 0.0; ceqqjd = ceqqjs = 0.0; gcdgb = gcddb = gcdsb = gcdbb = 0.0; gcsgb = gcsdb = gcssb = gcsbb = 0.0; gcggb = gcgdb = gcgsb = gcgbb = 0.0; gcbgb = gcbdb = gcbsb = gcbbb = 0.0; gcdbdb = gcsbsb = 0.0; goto line900; line860: /* evaluate equivalent charge current */ cqgate = *(ckt->CKTstate0 + here->HSM2cqg); cqbulk = *(ckt->CKTstate0 + here->HSM2cqb); cqdrn = *(ckt->CKTstate0 + here->HSM2cqd); #ifdef DEBUG_HISIM2LD printf( "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\n" ) ; printf( "cqgate = %12.5e\n" , cqgate ) ; printf( "cqbulk = %12.5e\n" , cqbulk ) ; printf( "cqdrn = %12.5e\n" , cqdrn ) ; printf( "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\n" ) ; #endif ceqqg = cqgate - gcggb * vgb + gcgdb * vbd + gcgsb * vbs; ceqqd = cqdrn - gcdgb * vgb + (gcddb + gcdbdb) * vbd - gcdbdb * vbd_jct + gcdsb * vbs; ceqqb = cqbulk - gcbgb * vgb + gcbdb * vbd + gcbsb * vbs; if (here->HSM2_corbnet) { ceqqjs = *(ckt->CKTstate0 + here->HSM2cqbs) + gcsbsb * vbs_jct; ceqqjd = *(ckt->CKTstate0 + here->HSM2cqbd) + gcdbdb * vbd_jct; } if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->HSM2cqb) = *(ckt->CKTstate0 + here->HSM2cqb); *(ckt->CKTstate1 + here->HSM2cqg) = *(ckt->CKTstate0 + here->HSM2cqg); *(ckt->CKTstate1 + here->HSM2cqd) = *(ckt->CKTstate0 + here->HSM2cqd); if (here->HSM2_corbnet) { *(ckt->CKTstate1 + here->HSM2cqbs) = *(ckt->CKTstate0 + here->HSM2cqbs); *(ckt->CKTstate1 + here->HSM2cqbd) = *(ckt->CKTstate0 + here->HSM2cqbd); } } /* * load current vector */ line900: if (here->HSM2_mode >= 0) { /* NORMAL mode */ gm = here->HSM2_gm; gmbs = here->HSM2_gmbs; FwdSum = gm + gmbs; RevSum = 0.0; cdreq = model->HSM2_type * (cdrain - here->HSM2_gds * vds - gm * vgs - gmbs * vbs); ceqbd = model->HSM2_type * (here->HSM2_isub + here->HSM2_igidl - (here->HSM2_gbds + here->HSM2_gigidlds) * vds - (here->HSM2_gbgs + here->HSM2_gigidlgs) * vgs - (here->HSM2_gbbs + here->HSM2_gigidlbs) * vbs); ceqbs = model->HSM2_type * (here->HSM2_igisl + here->HSM2_gigislsd * vds - here->HSM2_gigislgd * vgd - here->HSM2_gigislbd * vbd); gbbdp = -here->HSM2_gbds; gbbsp = here->HSM2_gbds + here->HSM2_gbgs + here->HSM2_gbbs; gbdpg = here->HSM2_gbgs; gbdpdp = here->HSM2_gbds; gbdpb = here->HSM2_gbbs; gbdpsp = -(gbdpg + gbdpdp + gbdpb); gbspg = 0.0; gbspdp = 0.0; gbspb = 0.0; gbspsp = 0.0; if (model->HSM2_coiigs) { gIbtotg = here->HSM2_gigbg; gIbtotd = here->HSM2_gigbd; gIbtots = here->HSM2_gigbs; gIbtotb = here->HSM2_gigbb; Ibtoteq = model->HSM2_type * (here->HSM2_igb - here->HSM2_gigbg * vgs - here->HSM2_gigbd * vds - here->HSM2_gigbb * vbs); gIstotg = here->HSM2_gigsg; gIstotd = here->HSM2_gigsd; gIstots = here->HSM2_gigss; gIstotb = here->HSM2_gigsb; Istoteq = model->HSM2_type * (here->HSM2_igs - here->HSM2_gigsg * vgs - here->HSM2_gigsd * vds - here->HSM2_gigsb * vbs); gIdtotg = here->HSM2_gigdg; gIdtotd = here->HSM2_gigdd; gIdtots = here->HSM2_gigds; gIdtotb = here->HSM2_gigdb; Idtoteq = model->HSM2_type * (here->HSM2_igd - here->HSM2_gigdg * vgs - here->HSM2_gigdd * vds - here->HSM2_gigdb * vbs); } else { gIbtotg = gIbtotd = gIbtots = gIbtotb = Ibtoteq = 0.0; gIstotg = gIstotd = gIstots = gIstotb = Istoteq = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = Idtoteq = 0.0; } if (model->HSM2_coiigs) { gIgtotg = gIbtotg + gIstotg + gIdtotg; gIgtotd = gIbtotd + gIstotd + gIdtotd; gIgtots = gIbtots + gIstots + gIdtots; gIgtotb = gIbtotb + gIstotb + gIdtotb; Igtoteq = Ibtoteq + Istoteq + Idtoteq; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = Igtoteq = 0.0; } else { /* REVERSE mode */ gm = - here->HSM2_gm; gmbs = - here->HSM2_gmbs; FwdSum = 0.0; RevSum = -(gm + gmbs); cdreq = -model->HSM2_type * (cdrain + here->HSM2_gds * vds + gm * vgd + gmbs * vbd); ceqbs = model->HSM2_type * (here->HSM2_isub + here->HSM2_igisl + (here->HSM2_gbds + here->HSM2_gigislsd) * vds - (here->HSM2_gbgs + here->HSM2_gigislgd) * vgd - (here->HSM2_gbbs + here->HSM2_gigislbd) * vbd); ceqbd = model->HSM2_type * (here->HSM2_igidl - here->HSM2_gigidlds * vds - here->HSM2_gigidlgs * vgs - here->HSM2_gigidlbs * vbs); gbbsp = - here->HSM2_gbds; gbbdp = here->HSM2_gbds + here->HSM2_gbgs + here->HSM2_gbbs; gbdpg = 0.0; gbdpsp = 0.0; gbdpb = 0.0; gbdpdp = 0.0; gbspg = here->HSM2_gbgs; gbspsp = here->HSM2_gbds; gbspb = here->HSM2_gbbs; gbspdp = -(gbspg + gbspsp + gbspb); if (model->HSM2_coiigs) { gIbtotg = here->HSM2_gigbg; gIbtotd = here->HSM2_gigbd; gIbtots = here->HSM2_gigbs; gIbtotb = here->HSM2_gigbb; Ibtoteq = model->HSM2_type * (here->HSM2_igb - here->HSM2_gigbg * vgd + here->HSM2_gigbs * vds - here->HSM2_gigbb * vbd); gIstotg = here->HSM2_gigsg; gIstotd = here->HSM2_gigsd; gIstots = here->HSM2_gigss; gIstotb = here->HSM2_gigsb; Istoteq = model->HSM2_type * (here->HSM2_igs - here->HSM2_gigsg * vgd + here->HSM2_gigss * vds - here->HSM2_gigsb * vbd); gIdtotg = here->HSM2_gigdg; gIdtotd = here->HSM2_gigdd; gIdtots = here->HSM2_gigds; gIdtotb = here->HSM2_gigdb; Idtoteq = model->HSM2_type * (here->HSM2_igd - here->HSM2_gigdg * vgd + here->HSM2_gigds * vds - here->HSM2_gigdb * vbd); } else { gIbtotg = gIbtotd = gIbtots = gIbtotb = Ibtoteq = 0.0; gIstotg = gIstotd = gIstots = gIstotb = Istoteq = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = Idtoteq = 0.0; } if (model->HSM2_coiigs) { gIgtotg = gIbtotg + gIstotg + gIdtotg; gIgtotd = gIbtotd + gIstotd + gIdtotd; gIgtots = gIbtots + gIstots + gIdtots; gIgtotb = gIbtotb + gIstotb + gIdtotb; Igtoteq = Ibtoteq + Istoteq + Idtoteq; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = Igtoteq = 0.0; } if (model->HSM2_type > 0) { ceqjs = here->HSM2_ibs - here->HSM2_gbs * vbs_jct; ceqjd = here->HSM2_ibd - here->HSM2_gbd * vbd_jct; } else { ceqjs = -(here->HSM2_ibs - here->HSM2_gbs * vbs_jct); ceqjd = -(here->HSM2_ibd - here->HSM2_gbd * vbd_jct); ceqqg = -ceqqg; ceqqb = -ceqqb; ceqqd = -ceqqd; if (here->HSM2_corbnet) { ceqqjs = -ceqqjs; ceqqjd = -ceqqjd; } } #ifdef DEBUG_HISIM2LD printf( "----------------------------------------------------\n" ) ; printf( "ceqqg = %12.5e\n" , ceqqg ) ; printf( "....................................................\n" ) ; printf( "ceqbs = %12.5e\n" , ceqbs ) ; printf( "ceqbd = %12.5e\n" , ceqbd ) ; printf( "ceqqb = %12.5e\n" , ceqqb ) ; printf( "....................................................\n" ) ; printf( "ceqbd = %12.5e\n" , ceqbd ) ; printf( "cdreq = %12.5e\n" , cdreq ) ; printf( "ceqqd = %12.5e\n" , ceqqd ) ; printf( "----------------------------------------------------\n" ) ; #endif #ifdef USE_OMP here->HSM2rhsdPrime = ceqjd - ceqbd - cdreq - ceqqd + Idtoteq; here->HSM2rhsgPrime = ceqqg + Igtoteq; if ( !here->HSM2_corbnet ) { here->HSM2rhsbPrime = ceqbd + ceqbs - ceqjd - ceqjs - ceqqb + Ibtoteq; here->HSM2rhssPrime = cdreq - ceqbs + ceqjs + ceqqg + ceqqb + ceqqd + Istoteq; } else { here->HSM2rhsdb = ceqjd + ceqqjd; here->HSM2rhsbPrime = ceqbd + ceqbs - ceqqb + Ibtoteq; here->HSM2rhssb = ceqjs + ceqqjs; here->HSM2rhssPrime = cdreq - ceqbs + ceqjs + ceqqd + ceqqg + ceqqb + ceqqjd + ceqqjs + Istoteq; } #else *(ckt->CKTrhs + here->HSM2dNodePrime) += ceqjd - ceqbd - cdreq - ceqqd + Idtoteq; *(ckt->CKTrhs + here->HSM2gNodePrime) -= ceqqg + Igtoteq; if ( !here->HSM2_corbnet ) { *(ckt->CKTrhs + here->HSM2bNodePrime) += ceqbd + ceqbs - ceqjd - ceqjs - ceqqb + Ibtoteq; *(ckt->CKTrhs + here->HSM2sNodePrime) += cdreq - ceqbs + ceqjs + ceqqg + ceqqb + ceqqd + Istoteq; } else { *(ckt->CKTrhs + here->HSM2dbNode) -= ceqjd + ceqqjd; *(ckt->CKTrhs + here->HSM2bNodePrime) += ceqbd + ceqbs - ceqqb + Ibtoteq; *(ckt->CKTrhs + here->HSM2sbNode) -= ceqjs + ceqqjs; *(ckt->CKTrhs + here->HSM2sNodePrime) += cdreq - ceqbs + ceqjs + ceqqd + ceqqg + ceqqb + ceqqjd + ceqqjs + Istoteq; } #endif #ifdef DEBUG_HISIM2LD printf ("id ig ib is %12.5e %12.5e %12.5e %12.5e\n", ceqjd - ceqbd - cdreq - ceqqd + Idtoteq, -(ceqqg + Igtoteq), ceqbd + ceqbs - ceqjd - ceqjs - ceqqb + Ibtoteq, cdreq - ceqbs + ceqjs + ceqqg + ceqqb + ceqqd + Istoteq); #endif /* * load y matrix */ if ( !here->HSM2_corbnet ){ gjbd = here->HSM2_gbd; gjbs = here->HSM2_gbs; } else gjbd = gjbs = 0.0; #ifdef USE_OMP if (here->HSM2_corg == 1) { grg = here->HSM2_grg; here->HSM2_1 = grg; here->HSM2_2 = grg; here->HSM2_3 = grg; here->HSM2_4 = gcggb + grg + gIgtotg; here->HSM2_5 = gcgdb + gIgtotd; here->HSM2_6 = gcgsb + gIgtots; here->HSM2_7 = gcgbb + gIgtotb; } else { here->HSM2_8 = gcggb + gIgtotg; here->HSM2_9 = gcgdb + gIgtotd; here->HSM2_10 = gcgsb + gIgtots; here->HSM2_11 = gcgbb + gIgtotb; } here->HSM2_12 = here->HSM2drainConductance + here->HSM2_gds + here->HSM2_gbd + RevSum + gcddb + gbdpdp - gIdtotd; here->HSM2_13 = here->HSM2drainConductance; here->HSM2_14 = gm + gcdgb + gbdpg - gIdtotg; here->HSM2_15 = here->HSM2_gds + FwdSum - gcdsb - gbdpsp + gIdtots; here->HSM2_16 = gjbd - gmbs - gcdbb - gbdpb + gIdtotb; here->HSM2_17 = here->HSM2drainConductance; here->HSM2_18 = here->HSM2drainConductance; here->HSM2_19 = here->HSM2_gds + RevSum - gcsdb - gbspdp + gIstotd; here->HSM2_20 = gcsgb - gm + gbspg - gIstotg; here->HSM2_21 = here->HSM2sourceConductance + here->HSM2_gds + here->HSM2_gbs + FwdSum + gcssb + gbspsp - gIstots; here->HSM2_22 = here->HSM2sourceConductance; here->HSM2_23 = gjbs + gmbs - gcsbb - gbspb + gIstotb; here->HSM2_24 = here->HSM2sourceConductance; here->HSM2_25 = here->HSM2sourceConductance; here->HSM2_26 = gcbdb - gjbd + gbbdp - gIbtotd; here->HSM2_27 = gcbgb - here->HSM2_gbgs - gIbtotg; here->HSM2_28 = gcbsb - gjbs + gbbsp - gIbtots; here->HSM2_29 = gjbd + gjbs + gcbbb - here->HSM2_gbbs - gIbtotb; if (model->HSM2_cogidl) { /* stamp GIDL */ here->HSM2_30 = here->HSM2_gigidlds; here->HSM2_31 = here->HSM2_gigidlgs; here->HSM2_32 = (here->HSM2_gigidlgs + here->HSM2_gigidlds + here->HSM2_gigidlbs); here->HSM2_33 = here->HSM2_gigidlbs; here->HSM2_34 = here->HSM2_gigidlds; here->HSM2_35 = here->HSM2_gigidlgs; here->HSM2_36 = (here->HSM2_gigidlgs + here->HSM2_gigidlds + here->HSM2_gigidlbs); here->HSM2_37 = here->HSM2_gigidlbs; /* stamp GISL */ here->HSM2_38 = (here->HSM2_gigislsd + here->HSM2_gigislgd + here->HSM2_gigislbd); here->HSM2_39 = here->HSM2_gigislgd; here->HSM2_40 = here->HSM2_gigislsd; here->HSM2_41 = here->HSM2_gigislbd; here->HSM2_42 = (here->HSM2_gigislgd + here->HSM2_gigislsd + here->HSM2_gigislbd); here->HSM2_43 = here->HSM2_gigislgd; here->HSM2_44 = here->HSM2_gigislsd; here->HSM2_45 = here->HSM2_gigislbd; } if (here->HSM2_corbnet) { /* body resistance network */ here->HSM2_46 = gcdbdb - here->HSM2_gbd; here->HSM2_47 = here->HSM2_gbs - gcsbsb; here->HSM2_48 = gcdbdb - here->HSM2_gbd; here->HSM2_49 = here->HSM2_gbd - gcdbdb + here->HSM2_grbpd + here->HSM2_grbdb; here->HSM2_50 = here->HSM2_grbpd; here->HSM2_51 = here->HSM2_grbdb; here->HSM2_52 = here->HSM2_grbpd; here->HSM2_53 = here->HSM2_grbpb; here->HSM2_54 = here->HSM2_grbps; here->HSM2_55 = here->HSM2_grbpd + here->HSM2_grbps + here->HSM2_grbpb; here->HSM2_56 = gcsbsb - here->HSM2_gbs; here->HSM2_57 = here->HSM2_grbps; here->HSM2_58 = here->HSM2_grbsb; here->HSM2_59 = here->HSM2_gbs - gcsbsb + here->HSM2_grbps + here->HSM2_grbsb; here->HSM2_60 = here->HSM2_grbdb; here->HSM2_61 = here->HSM2_grbpb; here->HSM2_62 = here->HSM2_grbsb; here->HSM2_63 = here->HSM2_grbsb + here->HSM2_grbdb + here->HSM2_grbpb; } #else if (here->HSM2_corg == 1) { grg = here->HSM2_grg; *(here->HSM2GgPtr) += grg; *(here->HSM2GPgPtr) -= grg; *(here->HSM2GgpPtr) -= grg; *(here->HSM2GPgpPtr) += gcggb + grg + gIgtotg; *(here->HSM2GPdpPtr) += gcgdb + gIgtotd; *(here->HSM2GPspPtr) += gcgsb + gIgtots; *(here->HSM2GPbpPtr) += gcgbb + gIgtotb; } else { *(here->HSM2GPgpPtr) += gcggb + gIgtotg; *(here->HSM2GPdpPtr) += gcgdb + gIgtotd; *(here->HSM2GPspPtr) += gcgsb + gIgtots; *(here->HSM2GPbpPtr) += gcgbb + gIgtotb; } *(here->HSM2DPdpPtr) += here->HSM2drainConductance + here->HSM2_gds + here->HSM2_gbd + RevSum + gcddb + gbdpdp - gIdtotd; *(here->HSM2DPdPtr) -= here->HSM2drainConductance; *(here->HSM2DPgpPtr) += gm + gcdgb + gbdpg - gIdtotg; *(here->HSM2DPspPtr) -= here->HSM2_gds + FwdSum - gcdsb - gbdpsp + gIdtots; *(here->HSM2DPbpPtr) -= gjbd - gmbs - gcdbb - gbdpb + gIdtotb; *(here->HSM2DdpPtr) -= here->HSM2drainConductance; *(here->HSM2DdPtr) += here->HSM2drainConductance; *(here->HSM2SPdpPtr) -= here->HSM2_gds + RevSum - gcsdb - gbspdp + gIstotd; *(here->HSM2SPgpPtr) += gcsgb - gm + gbspg - gIstotg; *(here->HSM2SPspPtr) += here->HSM2sourceConductance + here->HSM2_gds + here->HSM2_gbs + FwdSum + gcssb + gbspsp - gIstots; *(here->HSM2SPsPtr) -= here->HSM2sourceConductance; *(here->HSM2SPbpPtr) -= gjbs + gmbs - gcsbb - gbspb + gIstotb; *(here->HSM2SspPtr) -= here->HSM2sourceConductance; *(here->HSM2SsPtr) += here->HSM2sourceConductance; *(here->HSM2BPdpPtr) += gcbdb - gjbd + gbbdp - gIbtotd; *(here->HSM2BPgpPtr) += gcbgb - here->HSM2_gbgs - gIbtotg; *(here->HSM2BPspPtr) += gcbsb - gjbs + gbbsp - gIbtots; *(here->HSM2BPbpPtr) += gjbd + gjbs + gcbbb - here->HSM2_gbbs - gIbtotb; if (model->HSM2_cogidl) { /* stamp GIDL */ *(here->HSM2DPdpPtr) += here->HSM2_gigidlds; *(here->HSM2DPgpPtr) += here->HSM2_gigidlgs; *(here->HSM2DPspPtr) -= (here->HSM2_gigidlgs + here->HSM2_gigidlds + here->HSM2_gigidlbs); *(here->HSM2DPbpPtr) += here->HSM2_gigidlbs; *(here->HSM2BPdpPtr) -= here->HSM2_gigidlds; *(here->HSM2BPgpPtr) -= here->HSM2_gigidlgs; *(here->HSM2BPspPtr) += (here->HSM2_gigidlgs + here->HSM2_gigidlds + here->HSM2_gigidlbs); *(here->HSM2BPbpPtr) -= here->HSM2_gigidlbs; /* stamp GISL */ *(here->HSM2SPdpPtr) -= (here->HSM2_gigislsd + here->HSM2_gigislgd + here->HSM2_gigislbd); *(here->HSM2SPgpPtr) += here->HSM2_gigislgd; *(here->HSM2SPspPtr) += here->HSM2_gigislsd; *(here->HSM2SPbpPtr) += here->HSM2_gigislbd; *(here->HSM2BPdpPtr) += (here->HSM2_gigislgd + here->HSM2_gigislsd + here->HSM2_gigislbd); *(here->HSM2BPgpPtr) -= here->HSM2_gigislgd; *(here->HSM2BPspPtr) -= here->HSM2_gigislsd; *(here->HSM2BPbpPtr) -= here->HSM2_gigislbd; } if (here->HSM2_corbnet) { /* body resistance network */ *(here->HSM2DPdbPtr) += gcdbdb - here->HSM2_gbd; *(here->HSM2SPsbPtr) -= here->HSM2_gbs - gcsbsb; *(here->HSM2DBdpPtr) += gcdbdb - here->HSM2_gbd; *(here->HSM2DBdbPtr) += here->HSM2_gbd - gcdbdb + here->HSM2_grbpd + here->HSM2_grbdb; *(here->HSM2DBbpPtr) -= here->HSM2_grbpd; *(here->HSM2DBbPtr) -= here->HSM2_grbdb; *(here->HSM2BPdbPtr) -= here->HSM2_grbpd; *(here->HSM2BPbPtr) -= here->HSM2_grbpb; *(here->HSM2BPsbPtr) -= here->HSM2_grbps; *(here->HSM2BPbpPtr) += here->HSM2_grbpd + here->HSM2_grbps + here->HSM2_grbpb; *(here->HSM2SBspPtr) += gcsbsb - here->HSM2_gbs; *(here->HSM2SBbpPtr) -= here->HSM2_grbps; *(here->HSM2SBbPtr) -= here->HSM2_grbsb; *(here->HSM2SBsbPtr) += here->HSM2_gbs - gcsbsb + here->HSM2_grbps + here->HSM2_grbsb; *(here->HSM2BdbPtr) -= here->HSM2_grbdb; *(here->HSM2BbpPtr) -= here->HSM2_grbpb; *(here->HSM2BsbPtr) -= here->HSM2_grbsb; *(here->HSM2BbPtr) += here->HSM2_grbsb + here->HSM2_grbdb + here->HSM2_grbpb; } #endif line1000: ; #ifndef USE_OMP } /* End of MOSFET Instance */ } /* End of Model Instance */ #endif #ifdef MOS_MODEL_TIME tm1 = gtodsecld() ; mos_model_time += ( tm1 - tm0 ) ; sprintf( mos_model_name , "HiSIM 240BSC1" ) ; #ifdef PARAMOS_TIME vsum = vbs + vds + vgs ; if ( vsum < vsum0 - 1e-6 || vsum > vsum0 + 1e-6 ) { printf( "PMVbs= %12.5e\n" , vbs ) ; printf( "PMVds= %12.5e\n" , vds ) ; printf( "PMVgs= %12.5e\n" , vgs ) ; printf( "PMTime= %12.5e\n" , tm1 - tm0 ) ; } vsum0 = vsum ; #endif #endif return(OK); } #ifdef USE_OMP void HSM2LoadRhsMat(GENmodel *inModel, CKTcircuit *ckt) { int InstCount, idx; HSM2instance **InstArray; HSM2instance *here; HSM2model *model = (HSM2model*)inModel; InstArray = model->HSM2InstanceArray; InstCount = model->HSM2InstCount; for (idx = 0; idx < InstCount; idx++) { here = InstArray[idx]; model = HSM2modPtr(here); /* Update b for Ax = b */ *(ckt->CKTrhs + here->HSM2dNodePrime) += here->HSM2rhsdPrime; *(ckt->CKTrhs + here->HSM2gNodePrime) -= here->HSM2rhsgPrime; if ( !here->HSM2_corbnet ) { *(ckt->CKTrhs + here->HSM2bNodePrime) += here->HSM2rhsbPrime; *(ckt->CKTrhs + here->HSM2sNodePrime) += here->HSM2rhssPrime; } else { *(ckt->CKTrhs + here->HSM2dbNode) -= here->HSM2rhsdb; *(ckt->CKTrhs + here->HSM2bNodePrime) += here->HSM2rhsbPrime; *(ckt->CKTrhs + here->HSM2sbNode) -= here->HSM2rhssb; *(ckt->CKTrhs + here->HSM2sNodePrime) += here->HSM2rhssPrime; } /* Update A for Ax = b */ if (here->HSM2_corg == 1) { *(here->HSM2GgPtr) += here->HSM2_1; *(here->HSM2GPgPtr) -= here->HSM2_2; *(here->HSM2GgpPtr) -= here->HSM2_3; *(here->HSM2GPgpPtr) += here->HSM2_4; *(here->HSM2GPdpPtr) += here->HSM2_5; *(here->HSM2GPspPtr) += here->HSM2_6; *(here->HSM2GPbpPtr) += here->HSM2_7; } else { *(here->HSM2GPgpPtr) += here->HSM2_8; *(here->HSM2GPdpPtr) += here->HSM2_9; *(here->HSM2GPspPtr) += here->HSM2_10; *(here->HSM2GPbpPtr) += here->HSM2_11; } *(here->HSM2DPdpPtr) += here->HSM2_12; *(here->HSM2DPdPtr) -= here->HSM2_13; *(here->HSM2DPgpPtr) += here->HSM2_14; *(here->HSM2DPspPtr) -= here->HSM2_15; *(here->HSM2DPbpPtr) -= here->HSM2_16; *(here->HSM2DdpPtr) -= here->HSM2_17; *(here->HSM2DdPtr) += here->HSM2_18; *(here->HSM2SPdpPtr) -= here->HSM2_19; *(here->HSM2SPgpPtr) += here->HSM2_20; *(here->HSM2SPspPtr) += here->HSM2_21; *(here->HSM2SPsPtr) -= here->HSM2_22; *(here->HSM2SPbpPtr) -= here->HSM2_23; *(here->HSM2SspPtr) -= here->HSM2_24; *(here->HSM2SsPtr) += here->HSM2_25; *(here->HSM2BPdpPtr) += here->HSM2_26; *(here->HSM2BPgpPtr) += here->HSM2_27; *(here->HSM2BPspPtr) += here->HSM2_28; *(here->HSM2BPbpPtr) += here->HSM2_29; if (model->HSM2_cogidl) { /* stamp GIDL */ *(here->HSM2DPdpPtr) += here->HSM2_30; *(here->HSM2DPgpPtr) += here->HSM2_31; *(here->HSM2DPspPtr) -= here->HSM2_32; *(here->HSM2DPbpPtr) += here->HSM2_33; *(here->HSM2BPdpPtr) -= here->HSM2_34; *(here->HSM2BPgpPtr) -= here->HSM2_35; *(here->HSM2BPspPtr) += here->HSM2_36; *(here->HSM2BPbpPtr) -= here->HSM2_37; /* stamp GISL */ *(here->HSM2SPdpPtr) -= here->HSM2_38; *(here->HSM2SPgpPtr) += here->HSM2_39; *(here->HSM2SPspPtr) += here->HSM2_40; *(here->HSM2SPbpPtr) += here->HSM2_41; *(here->HSM2BPdpPtr) += here->HSM2_42; *(here->HSM2BPgpPtr) -= here->HSM2_43; *(here->HSM2BPspPtr) -= here->HSM2_44; *(here->HSM2BPbpPtr) -= here->HSM2_45; } if (here->HSM2_corbnet) { /* body resistance network */ *(here->HSM2DPdbPtr) += here->HSM2_46; *(here->HSM2SPsbPtr) -= here->HSM2_47; *(here->HSM2DBdpPtr) += here->HSM2_48; *(here->HSM2DBdbPtr) += here->HSM2_49; *(here->HSM2DBbpPtr) -= here->HSM2_50; *(here->HSM2DBbPtr) -= here->HSM2_51; *(here->HSM2BPdbPtr) -= here->HSM2_52; *(here->HSM2BPbPtr) -= here->HSM2_53; *(here->HSM2BPsbPtr) -= here->HSM2_54; *(here->HSM2BPbpPtr) += here->HSM2_55; *(here->HSM2SBspPtr) += here->HSM2_56; *(here->HSM2SBbpPtr) -= here->HSM2_57; *(here->HSM2SBbPtr) -= here->HSM2_58; *(here->HSM2SBsbPtr) += here->HSM2_59; *(here->HSM2BdbPtr) -= here->HSM2_60; *(here->HSM2BbpPtr) -= here->HSM2_61; *(here->HSM2BsbPtr) -= here->HSM2_62; *(here->HSM2BbPtr) += here->HSM2_63; } } } #endif tmpk8ny_4pz/src/spicelib/devices/hisim2/hsm2set.c0000644000175000017500000020173413546075722022116 0ustar carstencarsten/*********************************************************************** HiSIM (Hiroshima University STARC IGFET Model) Copyright (C) 2014 Hiroshima University & STARC MODEL NAME : HiSIM ( VERSION : 2 SUBVERSION : 8 REVISION : 0 ) FILE : hsm2set.c Date : 2014.6.5 released by Hiroshima University & Semiconductor Technology Academic Research Center (STARC) ***********************************************************************/ /********************************************************************** The following source code, and all copyrights, trade secrets or other intellectual property rights in and to the source code in its entirety, is owned by the Hiroshima University and the STARC organization. All users need to follow the "HiSIM2 Distribution Statement and Copyright Notice" attached to HiSIM2 model. -----HiSIM2 Distribution Statement and Copyright Notice-------------- Software is distributed as is, completely without warranty or service support. Hiroshima University or STARC and its employees are not liable for the condition or performance of the software. Hiroshima University and STARC own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. Hiroshima University and STARC hereby disclaim all implied warranties. Hiroshima University and STARC grant the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for Hiroshima University and STARC code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge Hiroshima University and STARC that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others." *************************************************************************/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "hsm2def.h" #include "hsm2evalenv.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #ifdef USE_OMP #include "ngspice/cpextern.h" #endif #define BINNING(param) pParam->HSM2_##param = model->HSM2_##param \ + model->HSM2_l##param / Lbin + model->HSM2_w##param / Wbin \ + model->HSM2_p##param / LWbin ; #define RANGECHECK(param, min, max, pname) \ if ( model->HSM2_coerrrep && ((param) < (min) || (param) > (max)) ) { \ printf("warning: (%s = %g) range [%g , %g].\n", \ (pname), (param), (min), (max) ); \ } #define RANGERESET(param, min, max, pname) \ if ( model->HSM2_coerrrep && ((param) > (max)) ) { \ printf("reset : (%s = %g to %g) range [%g , %g].\n", \ (pname), (param), (max), (min), (max) ); \ } \ if ( model->HSM2_coerrrep && ((param) < (min)) ) { \ printf("reset : (%s = %g to %g) range [%g , %g].\n", \ (pname), (param), (min), (min), (max) ); \ } \ if ( (param) < (min) ) { param = (min); } \ if ( (param) > (max) ) { param = (max); } #define MINCHECK(param, min, pname) \ if ( model->HSM2_coerrrep && ((param) < (min)) ) { \ printf("warning: (%s = %g) range [%g , %g].\n", \ (pname), (param), (min), (min) ); \ } int HSM2setup( SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* load the HSM2 device structure with those pointers needed later * for fast matrix loading */ { HSM2model *model = (HSM2model*)inModel; HSM2instance *here; int error; CKTnode *tmp; HSM2binningParam *pParam ; HSM2modelMKSParam *modelMKS ; HSM2hereMKSParam *hereMKS ; double Lgate =0.0, LG =0.0, Wgate =0.0, WG=0.0 ; double Lbin=0.0, Wbin=0.0, LWbin =0.0; /* binning */ #ifdef USE_OMP int idx, InstCount; HSM2instance **InstArray; #endif /* loop through all the HSM2 device models */ for ( ;model != NULL ;model = HSM2nextModel(model)) { /* Default value Processing for HSM2 MOSFET Models */ if ( !model->HSM2_type_Given ) model->HSM2_type = NMOS ; /***/ if ( !model->HSM2_info_Given ) model->HSM2_info = 0 ; /* if ( !model->HSM2_noise_Given) model->HSM2_noise = 1;*/ model->HSM2_noise = 1; /* allways noise is set to be 1 */ if ( !model->HSM2_version_Given) { model->HSM2_version = 280; /* default 2.80 */ printf(" 2.80 is selected for VERSION. (default) \n"); } else { if (model->HSM2_version < 280 || model->HSM2_version > 280 ) { printf(" %d is not available for VERSION. \n", model->HSM2_version ); model->HSM2_version = 280; /* 2.80 */ } printf(" 2.80 is selected for VERSION. \n"); } /* set subversion & revision */ // model->HSM2_subversion = fmod(model->HSM2_version * 10 , 10 ); // model->HSM2_revision = fmod(model->HSM2_version * 100 , 10 ); if ( !model->HSM2_corsrd_Given ) model->HSM2_corsrd = 0 ; if ( !model->HSM2_corg_Given ) model->HSM2_corg = 0 ; if ( !model->HSM2_coiprv_Given ) model->HSM2_coiprv = 1 ; if ( !model->HSM2_copprv_Given ) model->HSM2_copprv = 1 ; if ( !model->HSM2_coadov_Given ) model->HSM2_coadov = 1 ; if ( !model->HSM2_coisub_Given ) model->HSM2_coisub = 0 ; if ( !model->HSM2_coiigs_Given ) model->HSM2_coiigs = 0 ; if ( !model->HSM2_cogidl_Given ) model->HSM2_cogidl = 0 ; if ( !model->HSM2_coovlp_Given ) model->HSM2_coovlp = 1 ; if ( !model->HSM2_coflick_Given ) model->HSM2_coflick = 0 ; if ( !model->HSM2_coisti_Given ) model->HSM2_coisti = 0 ; if ( !model->HSM2_conqs_Given ) model->HSM2_conqs = 0 ; /* QS (default) */ if ( !model->HSM2_cothrml_Given ) model->HSM2_cothrml = 0 ; if ( !model->HSM2_coign_Given ) model->HSM2_coign = 0 ; /* induced gate noise */ if ( !model->HSM2_codfm_Given ) model->HSM2_codfm = 0 ; /* DFM */ if ( !model->HSM2_corbnet_Given ) model->HSM2_corbnet = 0 ; else if ( model->HSM2_corbnet != 0 && model->HSM2_corbnet != 1 ) { model->HSM2_corbnet = 0; printf("warning(HiSIM): CORBNET has been set to its default value: %d.\n", model->HSM2_corbnet); } if ( !model->HSM2_corecip_Given ) model->HSM2_corecip = 1 ; if ( !model->HSM2_coqy_Given ) model->HSM2_coqy = 0 ; if ( !model->HSM2_coqovsm_Given ) model->HSM2_coqovsm = 1 ; if ( !model->HSM2_coerrrep_Given ) model->HSM2_coerrrep = 1 ; if ( !model->HSM2_codep_Given ) model->HSM2_codep = 0 ; if ( !model->HSM2_coddlt_Given ) model->HSM2_coddlt = 1 ; if ( model->HSM2_codep_Given ) { if( model->HSM2_codep != 0 && model->HSM2_codep != 1 ) { printf("warning(HiSIM): Invalid CODEP (%d) was specified, reset to 0.\n",model->HSM2_codep); model->HSM2_codep = 0 ; } } if ( model->HSM2_coddlt_Given ) { if( model->HSM2_coddlt != 0 && model->HSM2_coddlt != 1 ) { printf("warning(HiSIM): Invalid CODDLT (%d) was specified, reset to 0.\n",model->HSM2_coddlt); model->HSM2_coddlt = 0 ; } } if ( !model->HSM2_vmax_Given ) model->HSM2_vmax = 1.0e7 ; if ( !model->HSM2_bgtmp1_Given ) model->HSM2_bgtmp1 = 90.25e-6 ; if ( !model->HSM2_bgtmp2_Given ) model->HSM2_bgtmp2 = 1.0e-7 ; if ( !model->HSM2_eg0_Given ) model->HSM2_eg0 = 1.1785e0 ; if ( !model->HSM2_tox_Given ) model->HSM2_tox = 3.0e-9 ; if ( !model->HSM2_xld_Given ) model->HSM2_xld = 0.0 ; if ( !model->HSM2_lover_Given ) model->HSM2_lover = 30e-9 ; if ( !model->HSM2_ddltmax_Given ) model->HSM2_ddltmax = 10.0 ; /* Vdseff */ if ( model->HSM2_coddlt == 0 ) { if ( !model->HSM2_ddltslp_Given ) model->HSM2_ddltslp = 0.0 ; /* Vdseff */ if ( !model->HSM2_ddltict_Given ) model->HSM2_ddltict = 10.0 ; /* Vdseff */ } else { if ( !model->HSM2_ddltslp_Given ) model->HSM2_ddltslp = 10.0 ; /* Vdseff */ if ( !model->HSM2_ddltict_Given ) model->HSM2_ddltict = 0.0 ; /* Vdseff */ } if ( !model->HSM2_vfbover_Given ) model->HSM2_vfbover = 0.0 ; if ( !model->HSM2_nover_Given ) model->HSM2_nover = 1E19 ; if ( !model->HSM2_xwd_Given ) model->HSM2_xwd = 0.0 ; if ( !model->HSM2_xl_Given ) model->HSM2_xl = 0.0 ; if ( !model->HSM2_xw_Given ) model->HSM2_xw = 0.0 ; if ( !model->HSM2_saref_Given ) model->HSM2_saref = 1e-6 ; if ( !model->HSM2_sbref_Given ) model->HSM2_sbref = 1e-6 ; if ( !model->HSM2_ll_Given ) model->HSM2_ll = 0.0 ; if ( !model->HSM2_lld_Given ) model->HSM2_lld = 0.0 ; if ( !model->HSM2_lln_Given ) model->HSM2_lln = 0.0 ; if ( !model->HSM2_wl_Given ) model->HSM2_wl = 0.0 ; if ( !model->HSM2_wl1_Given ) model->HSM2_wl1 = 0.0 ; if ( !model->HSM2_wl1p_Given ) model->HSM2_wl1p = 1.0 ; if ( !model->HSM2_wl2_Given ) model->HSM2_wl2 = 0.0 ; if ( !model->HSM2_wl2p_Given ) model->HSM2_wl2p = 1.0 ; if ( !model->HSM2_wld_Given ) model->HSM2_wld = 0.0 ; if ( !model->HSM2_wln_Given ) model->HSM2_wln = 0.0 ; if ( !model->HSM2_rsh_Given ) model->HSM2_rsh = 0.0 ; if ( !model->HSM2_rshg_Given ) model->HSM2_rshg = 0.0 ; if ( !model->HSM2_xqy_Given ) model->HSM2_xqy = 10e-9 ; if ( !model->HSM2_xqy1_Given ) model->HSM2_xqy1 = 0.0 ; if ( !model->HSM2_xqy2_Given ) model->HSM2_xqy2 = 2.0 ; if ( !model->HSM2_qyrat_Given ) model->HSM2_qyrat = 0.5 ; if ( !model->HSM2_rs_Given ) model->HSM2_rs = 0.0 ; if ( !model->HSM2_rd_Given ) model->HSM2_rd = 0.0 ; if ( !model->HSM2_vfbc_Given ) model->HSM2_vfbc = -1.0 ; if ( !model->HSM2_vbi_Given ) model->HSM2_vbi = 1.1 ; if ( !model->HSM2_nsubc_Given ) model->HSM2_nsubc = 5.0e17 ; if ( !model->HSM2_vfbcl_Given ) model->HSM2_vfbcl = 0 ; if ( !model->HSM2_vfbclp_Given ) model->HSM2_vfbclp = 1 ; if ( !model->HSM2_parl2_Given ) model->HSM2_parl2 = 10.0e-9 ; if ( !model->HSM2_lp_Given ) model->HSM2_lp = 15.0e-9 ; if ( !model->HSM2_nsubp_Given ) model->HSM2_nsubp = 1.0e18 ; if ( !model->HSM2_nsubpl_Given ) model->HSM2_nsubpl = 0.001 ; /* um */ if ( !model->HSM2_nsubpfac_Given ) model->HSM2_nsubpfac = 1.0 ; if ( !model->HSM2_nsubpdlt_Given ) model->HSM2_nsubpdlt = 0.01 ; if ( !model->HSM2_nsubpw_Given ) model->HSM2_nsubpw = 0.0 ; if ( !model->HSM2_nsubpwp_Given ) model->HSM2_nsubpwp = 1.0 ; if ( !model->HSM2_scp1_Given ) model->HSM2_scp1 = 1.0 ; if ( !model->HSM2_scp2_Given ) model->HSM2_scp2 = 0.0 ; if ( !model->HSM2_scp3_Given ) model->HSM2_scp3 = 0.0 ; if ( !model->HSM2_sc1_Given ) model->HSM2_sc1 = 1.0 ; if ( !model->HSM2_sc2_Given ) model->HSM2_sc2 = 0.0 ; if ( !model->HSM2_sc3_Given ) model->HSM2_sc3 = 0.0 ; if ( !model->HSM2_sc4_Given ) model->HSM2_sc4 = 0.0 ; if ( !model->HSM2_pgd1_Given ) model->HSM2_pgd1 = 0.0 ; if ( !model->HSM2_pgd2_Given ) model->HSM2_pgd2 = 0.3 ; if ( !model->HSM2_pgd4_Given ) model->HSM2_pgd4 = 0.0 ; if ( !model->HSM2_ndep_Given ) model->HSM2_ndep = 1.0 ; if ( !model->HSM2_ndepl_Given ) model->HSM2_ndepl = 0.0 ; if ( !model->HSM2_ndeplp_Given ) model->HSM2_ndeplp = 1.0 ; if ( !model->HSM2_ndepw_Given ) model->HSM2_ndepw = 0.0 ; if ( !model->HSM2_ndepwp_Given ) model->HSM2_ndepwp = 1.0 ; if ( !model->HSM2_ninv_Given ) model->HSM2_ninv = 0.5 ; if ( !model->HSM2_ninvd_Given ) model->HSM2_ninvd = 0.0 ; if ( !model->HSM2_ninvdl_Given ) model->HSM2_ninvdl = 0.0 ; if ( !model->HSM2_ninvdlp_Given ) model->HSM2_ninvdlp = 1.0 ; if ( !model->HSM2_muecb0_Given ) model->HSM2_muecb0 = 1.0e3 ; if ( !model->HSM2_muecb1_Given ) model->HSM2_muecb1 = 100.0 ; if ( !model->HSM2_mueph0_Given ) model->HSM2_mueph0 = 300.0e-3 ; if ( !model->HSM2_mueph1_Given ) { if (model->HSM2_type == NMOS) model->HSM2_mueph1 = 25.0e3 ; else model->HSM2_mueph1 = 9.0e3 ; } if ( !model->HSM2_muephw_Given ) model->HSM2_muephw = 0.0 ; if ( !model->HSM2_muepwp_Given ) model->HSM2_muepwp = 1.0 ; if ( !model->HSM2_muepwd_Given ) model->HSM2_muepwd = 0.0 ; if ( !model->HSM2_muephl_Given ) model->HSM2_muephl = 0.0 ; if ( !model->HSM2_mueplp_Given ) model->HSM2_mueplp = 1.0 ; if ( !model->HSM2_muepld_Given ) model->HSM2_muepld = 0.0 ; if ( !model->HSM2_muephs_Given ) model->HSM2_muephs = 0.0 ; if ( !model->HSM2_muepsp_Given ) model->HSM2_muepsp = 1.0 ; if ( !model->HSM2_vtmp_Given ) model->HSM2_vtmp = 0.0 ; if ( !model->HSM2_wvth0_Given ) model->HSM2_wvth0 = 0.0 ; if ( !model->HSM2_muesr0_Given ) model->HSM2_muesr0 = 2.0 ; if ( !model->HSM2_muesr1_Given ) model->HSM2_muesr1 = 1.0e15 ; if ( !model->HSM2_muesrl_Given ) model->HSM2_muesrl = 0.0 ; if ( !model->HSM2_muesrw_Given ) model->HSM2_muesrw = 0.0 ; if ( !model->HSM2_mueswp_Given ) model->HSM2_mueswp = 1.0 ; if ( !model->HSM2_mueslp_Given ) model->HSM2_mueslp = 1.0 ; if ( !model->HSM2_muetmp_Given ) model->HSM2_muetmp = 1.5 ; if ( !model->HSM2_bb_Given ) { if (model->HSM2_type == NMOS) model->HSM2_bb = 2.0 ; else model->HSM2_bb = 1.0 ; } if ( !model->HSM2_sub1_Given ) model->HSM2_sub1 = 10e0 ; if ( !model->HSM2_sub2_Given ) model->HSM2_sub2 = 25e0 ; if ( !model->HSM2_svgs_Given ) model->HSM2_svgs = 0.8e0 ; if ( !model->HSM2_svbs_Given ) model->HSM2_svbs = 0.5e0 ; if ( !model->HSM2_svbsl_Given ) model->HSM2_svbsl = 0e0 ; if ( !model->HSM2_svds_Given ) model->HSM2_svds = 0.8e0 ; if ( !model->HSM2_slg_Given ) model->HSM2_slg = 30e-9 ; if ( !model->HSM2_sub1l_Given ) model->HSM2_sub1l = 2.5e-3 ; if ( !model->HSM2_sub2l_Given ) model->HSM2_sub2l = 2e-6 ; if ( !model->HSM2_svgsl_Given ) model->HSM2_svgsl = 0.0 ; if ( !model->HSM2_svgslp_Given ) model->HSM2_svgslp = 1.0 ; if ( !model->HSM2_svgswp_Given ) model->HSM2_svgswp = 1.0 ; if ( !model->HSM2_svgsw_Given ) model->HSM2_svgsw = 0.0 ; if ( !model->HSM2_svbslp_Given ) model->HSM2_svbslp = 1.0 ; if ( !model->HSM2_slgl_Given ) model->HSM2_slgl = 0.0 ; if ( !model->HSM2_slglp_Given ) model->HSM2_slglp = 1.0 ; if ( !model->HSM2_sub1lp_Given ) model->HSM2_sub1lp = 1.0 ; if ( !model->HSM2_nsti_Given ) model->HSM2_nsti = 5.0e17 ; if ( !model->HSM2_wsti_Given ) model->HSM2_wsti = 0.0 ; if ( !model->HSM2_wstil_Given ) model->HSM2_wstil = 0.0 ; if ( !model->HSM2_wstilp_Given ) model->HSM2_wstilp = 1.0 ; if ( !model->HSM2_wstiw_Given ) model->HSM2_wstiw = 0.0 ; if ( !model->HSM2_wstiwp_Given ) model->HSM2_wstiwp = 1.0 ; if ( !model->HSM2_scsti1_Given ) model->HSM2_scsti1 = 0.0 ; if ( !model->HSM2_scsti2_Given ) model->HSM2_scsti2 = 0.0 ; if ( !model->HSM2_vthsti_Given ) model->HSM2_vthsti = 0.0 ; if ( !model->HSM2_vdsti_Given ) model->HSM2_vdsti = 0.0 ; if ( !model->HSM2_muesti1_Given ) model->HSM2_muesti1 = 0.0 ; if ( !model->HSM2_muesti2_Given ) model->HSM2_muesti2 = 0.0 ; if ( !model->HSM2_muesti3_Given ) model->HSM2_muesti3 = 1.0 ; if ( !model->HSM2_nsubpsti1_Given ) model->HSM2_nsubpsti1 = 0.0 ; if ( !model->HSM2_nsubpsti2_Given ) model->HSM2_nsubpsti2 = 0.0 ; if ( !model->HSM2_nsubpsti3_Given ) model->HSM2_nsubpsti3 = 1.0 ; if ( !model->HSM2_nsubcsti1_Given ) model->HSM2_nsubcsti1 = 0.0 ; if ( !model->HSM2_nsubcsti2_Given ) model->HSM2_nsubcsti2 = 0.0 ; if ( !model->HSM2_nsubcsti3_Given ) model->HSM2_nsubcsti3 = 1.0 ; if ( !model->HSM2_lpext_Given ) model->HSM2_lpext = 1.0e-50 ; if ( !model->HSM2_npext_Given ) model->HSM2_npext = 5.0e17 ; if ( !model->HSM2_npextw_Given ) model->HSM2_npextw = 0.0 ; if ( !model->HSM2_npextwp_Given ) model->HSM2_npextwp = 1.0 ; if ( !model->HSM2_scp21_Given ) model->HSM2_scp21 = 0.0 ; if ( !model->HSM2_scp22_Given ) model->HSM2_scp22 = 0.0 ; if ( !model->HSM2_bs1_Given ) model->HSM2_bs1 = 0.0 ; if ( !model->HSM2_bs2_Given ) model->HSM2_bs2 = 0.9 ; if ( !model->HSM2_tpoly_Given ) model->HSM2_tpoly = 200e-9 ; if ( !model->HSM2_cgbo_Given ) model->HSM2_cgbo = 0.0 ; if ( !model->HSM2_js0_Given ) model->HSM2_js0 = 0.5e-6 ; if ( !model->HSM2_js0sw_Given ) model->HSM2_js0sw = 0.0 ; if ( !model->HSM2_nj_Given ) model->HSM2_nj = 1.0 ; if ( !model->HSM2_njsw_Given ) model->HSM2_njsw = 1.0 ; if ( !model->HSM2_xti_Given ) model->HSM2_xti = 2.0 ; if ( !model->HSM2_cj_Given ) model->HSM2_cj = 5.0e-04 ; if ( !model->HSM2_cjsw_Given ) model->HSM2_cjsw = 5.0e-10 ; if ( !model->HSM2_cjswg_Given ) model->HSM2_cjswg = 5.0e-10 ; if ( !model->HSM2_mj_Given ) model->HSM2_mj = 0.5e0 ; if ( !model->HSM2_mjsw_Given ) model->HSM2_mjsw = 0.33e0 ; if ( !model->HSM2_mjswg_Given ) model->HSM2_mjswg = 0.33e0 ; if ( !model->HSM2_pb_Given ) model->HSM2_pb = 1.0e0 ; if ( !model->HSM2_pbsw_Given ) model->HSM2_pbsw = 1.0e0 ; if ( !model->HSM2_pbswg_Given ) model->HSM2_pbswg = 1.0e0 ; if ( !model->HSM2_tcjbd_Given ) model->HSM2_tcjbd = 0.0 ; if ( !model->HSM2_tcjbs_Given ) model->HSM2_tcjbs = 0.0 ; if ( !model->HSM2_tcjbdsw_Given ) model->HSM2_tcjbdsw = 0.0 ; if ( !model->HSM2_tcjbssw_Given ) model->HSM2_tcjbssw = 0.0 ; if ( !model->HSM2_tcjbdswg_Given ) model->HSM2_tcjbdswg = 0.0 ; if ( !model->HSM2_tcjbsswg_Given ) model->HSM2_tcjbsswg = 0.0 ; if ( !model->HSM2_xti2_Given ) model->HSM2_xti2 = 0.0e0 ; if ( !model->HSM2_cisb_Given ) model->HSM2_cisb = 0.0e0 ; if ( !model->HSM2_cvb_Given ) model->HSM2_cvb = 0.0e0 ; if ( !model->HSM2_ctemp_Given ) model->HSM2_ctemp = 0.0e0 ; if ( !model->HSM2_cisbk_Given ) model->HSM2_cisbk = 0.0e0 ; if ( !model->HSM2_cvbk_Given ) model->HSM2_cvbk = 0.0e0 ; if ( !model->HSM2_divx_Given ) model->HSM2_divx = 0.0e0 ; if ( !model->HSM2_clm1_Given ) model->HSM2_clm1 = 700.0e-3 ; if ( !model->HSM2_clm2_Given ) model->HSM2_clm2 = 2.0 ; if ( !model->HSM2_clm3_Given ) model->HSM2_clm3 = 1.0 ; if ( !model->HSM2_clm5_Given ) model->HSM2_clm5 = 1.0 ; if ( !model->HSM2_clm6_Given ) model->HSM2_clm6 = 0.0 ; if ( !model->HSM2_vover_Given ) model->HSM2_vover = 0.3 ; if ( !model->HSM2_voverp_Given ) model->HSM2_voverp = 0.3 ; if ( !model->HSM2_wfc_Given ) model->HSM2_wfc = 0.0 ; if ( !model->HSM2_nsubcw_Given ) model->HSM2_nsubcw = 0.0 ; if ( !model->HSM2_nsubcwp_Given ) model->HSM2_nsubcwp = 1.0 ; if ( !model->HSM2_nsubcmax_Given ) model->HSM2_nsubcmax = 5e18 ; if ( !model->HSM2_qme1_Given ) model->HSM2_qme1 = 0.0 ; if ( !model->HSM2_qme2_Given ) model->HSM2_qme2 = 2.0 ; /* fix in version 2.80 */ if ( !model->HSM2_qme3_Given ) model->HSM2_qme3 = 0.0 ; if ( !model->HSM2_vovers_Given ) model->HSM2_vovers = 0.0 ; if ( !model->HSM2_voversp_Given ) model->HSM2_voversp = 0.0 ; if ( !model->HSM2_gidl1_Given ) model->HSM2_gidl1 = 2e0 ; if ( !model->HSM2_gidl2_Given ) model->HSM2_gidl2 = 3e7 ; if ( !model->HSM2_gidl3_Given ) model->HSM2_gidl3 = 0.9e0 ; if ( !model->HSM2_gidl4_Given ) model->HSM2_gidl4 = 0.0 ; if ( !model->HSM2_gidl5_Given ) model->HSM2_gidl5 = 0.2e0 ; if ( !model->HSM2_gidl6_Given ) model->HSM2_gidl6 = 0 ; if ( !model->HSM2_gidl7_Given ) model->HSM2_gidl7 = 1 ; if ( !model->HSM2_gleak1_Given ) model->HSM2_gleak1 = 50e0 ; if ( !model->HSM2_gleak2_Given ) model->HSM2_gleak2 = 10e6 ; if ( !model->HSM2_gleak3_Given ) model->HSM2_gleak3 = 60e-3 ; if ( !model->HSM2_gleak4_Given ) model->HSM2_gleak4 = 4e0 ; if ( !model->HSM2_gleak5_Given ) model->HSM2_gleak5 = 7.5e3 ; if ( !model->HSM2_gleak6_Given ) model->HSM2_gleak6 = 250e-3 ; if ( !model->HSM2_gleak7_Given ) model->HSM2_gleak7 = 1e-6 ; if ( !model->HSM2_glksd1_Given ) model->HSM2_glksd1 = 1.0e-15 ; if ( !model->HSM2_glksd2_Given ) model->HSM2_glksd2 = 5e6 ; if ( !model->HSM2_glksd3_Given ) model->HSM2_glksd3 = -5e6 ; if ( !model->HSM2_glkb1_Given ) model->HSM2_glkb1 = 5e-16 ; if ( !model->HSM2_glkb2_Given ) model->HSM2_glkb2 = 1e0 ; if ( !model->HSM2_glkb3_Given ) model->HSM2_glkb3 = 0e0 ; if ( !model->HSM2_egig_Given ) model->HSM2_egig = 0e0 ; if ( !model->HSM2_igtemp2_Given ) model->HSM2_igtemp2 = 0e0 ; if ( !model->HSM2_igtemp3_Given ) model->HSM2_igtemp3 = 0e0 ; if ( !model->HSM2_vzadd0_Given ) model->HSM2_vzadd0 = 20.0e-3 ; if ( !model->HSM2_pzadd0_Given ) model->HSM2_pzadd0 = 20.0e-3 ; if ( !model->HSM2_nftrp_Given ) model->HSM2_nftrp = 10e9 ; if ( !model->HSM2_nfalp_Given ) model->HSM2_nfalp = 1.0e-19 ; if ( !model->HSM2_falph_Given ) model->HSM2_falph = 1.0 ; if ( !model->HSM2_cit_Given ) model->HSM2_cit = 0e0 ; if ( !model->HSM2_kappa_Given ) model->HSM2_kappa = 3.90e0 ; if ( !model->HSM2_cgso_Given ) model->HSM2_cgso = 0.0 ; if ( !model->HSM2_cgdo_Given ) model->HSM2_cgdo = 0.0 ; if ( !model->HSM2_vdiffj_Given ) model->HSM2_vdiffj = 0.6e-3 ; if ( !model->HSM2_dly1_Given ) model->HSM2_dly1 = 100.0e-12 ; if ( !model->HSM2_dly2_Given ) model->HSM2_dly2 = 0.7e0 ; if ( !model->HSM2_dly3_Given ) model->HSM2_dly3 = 0.8e-6 ; if ( !model->HSM2_tnom_Given ) model->HSM2_tnom = 27.0 ; /* [C] */ if ( !model->HSM2_ovslp_Given ) model->HSM2_ovslp = 2.1e-7 ; if ( !model->HSM2_ovmag_Given ) model->HSM2_ovmag = 0.6e0 ; if ( !model->HSM2_gbmin_Given ) model->HSM2_gbmin = 1.0e-12; /* in mho */ if ( !model->HSM2_rbpb_Given ) model->HSM2_rbpb = 50.0e0 ; if ( !model->HSM2_rbpd_Given ) model->HSM2_rbpd = 50.0e0 ; if ( !model->HSM2_rbps_Given ) model->HSM2_rbps = 50.0e0 ; if ( !model->HSM2_rbdb_Given ) model->HSM2_rbdb = 50.0e0 ; if ( !model->HSM2_rbsb_Given ) model->HSM2_rbsb = 50.0e0 ; if ( !model->HSM2_ibpc1_Given ) model->HSM2_ibpc1 = 0.0 ; if ( !model->HSM2_ibpc2_Given ) model->HSM2_ibpc2 = 0.0 ; if ( !model->HSM2_mphdfm_Given ) model->HSM2_mphdfm = -0.3 ; if ( !model->HSM2_ptl_Given ) model->HSM2_ptl = 0.0 ; if ( !model->HSM2_ptp_Given ) model->HSM2_ptp = 3.5 ; if ( !model->HSM2_pt2_Given ) model->HSM2_pt2 = 0.0 ; if ( !model->HSM2_ptlp_Given ) model->HSM2_ptlp = 1.0 ; if ( !model->HSM2_gdl_Given ) model->HSM2_gdl = 0.0 ; if ( !model->HSM2_gdlp_Given ) model->HSM2_gdlp = 0.0 ; if ( !model->HSM2_gdld_Given ) model->HSM2_gdld = 0.0 ; if ( !model->HSM2_pt4_Given ) model->HSM2_pt4 = 0.0 ; if ( !model->HSM2_pt4p_Given ) model->HSM2_pt4p = 1.0 ; if ( !model->HSM2_muephl2_Given ) model->HSM2_muephl2 = 0.0 ; if ( !model->HSM2_mueplp2_Given ) model->HSM2_mueplp2 = 1.0 ; if ( !model->HSM2_nsubcw2_Given ) model->HSM2_nsubcw2 = 0.0 ; if ( !model->HSM2_nsubcwp2_Given ) model->HSM2_nsubcwp2 = 1.0 ; if ( !model->HSM2_muephw2_Given ) model->HSM2_muephw2 = 0.0 ; if ( !model->HSM2_muepwp2_Given ) model->HSM2_muepwp2 = 1.0 ; /* WPE set default Model parameter value */ if ( !model->HSM2_web_Given ) model->HSM2_web = 0.0 ; if ( !model->HSM2_wec_Given ) model->HSM2_wec = 0.0 ; if ( !model->HSM2_nsubcwpe_Given ) model->HSM2_nsubcwpe = 0.0 ; if ( !model->HSM2_npextwpe_Given ) model->HSM2_npextwpe = 0.0 ; if ( !model->HSM2_nsubpwpe_Given ) model->HSM2_nsubpwpe = 0.0 ; if ( !model->HSM2_Vgsmin_Given ) model->HSM2_Vgsmin = -5.0 * model->HSM2_type ; if ( !model->HSM2_sc3Vbs_Given ) model->HSM2_sc3Vbs = 0.0 ; if ( !model->HSM2_byptol_Given ) model->HSM2_byptol = 0.0 ; if ( !model->HSM2_muecb0lp_Given ) model->HSM2_muecb0lp = 0.0; if ( !model->HSM2_muecb1lp_Given ) model->HSM2_muecb1lp = 0.0; /* Depletion Mode MOSFET */ if ( !model->HSM2_ndepm_Given ) model->HSM2_ndepm = 1e17 ; if ( !model->HSM2_ndepml_Given ) model->HSM2_ndepml = 0.0 ; if ( !model->HSM2_ndepmlp_Given ) model->HSM2_ndepmlp = 1.0 ; if ( !model->HSM2_tndep_Given ) model->HSM2_tndep = 0.2e-6 ; if ( !model->HSM2_depleak_Given ) model->HSM2_depleak = 0.5 ; if ( !model->HSM2_depleakl_Given ) model->HSM2_depleakl = 0.0 ; if ( !model->HSM2_depleaklp_Given ) model->HSM2_depleaklp = 1.0 ; if ( !model->HSM2_depeta_Given ) model->HSM2_depeta = 0.0 ; if ( !model->HSM2_depmue0_Given ) model->HSM2_depmue0 = 1e3 ; if ( !model->HSM2_depmue0l_Given ) model->HSM2_depmue0l = 0.0 ; if ( !model->HSM2_depmue0lp_Given ) model->HSM2_depmue0lp = 1.0 ; if ( !model->HSM2_depmue1_Given ) model->HSM2_depmue1 = 0.0 ; if ( !model->HSM2_depmue1l_Given ) model->HSM2_depmue1l = 0.0 ; if ( !model->HSM2_depmue1lp_Given ) model->HSM2_depmue1lp = 1.0 ; if ( !model->HSM2_depmueback0_Given ) model->HSM2_depmueback0 = 1e2 ; if ( !model->HSM2_depmueback0l_Given ) model->HSM2_depmueback0l = 0.0 ; if ( !model->HSM2_depmueback0lp_Given ) model->HSM2_depmueback0lp = 1.0 ; if ( !model->HSM2_depmueback1_Given ) model->HSM2_depmueback1 = 0.0 ; if ( !model->HSM2_depmueback1l_Given ) model->HSM2_depmueback1l = 0.0 ; if ( !model->HSM2_depmueback1lp_Given ) model->HSM2_depmueback1lp = 1.0 ; if ( !model->HSM2_depmueph0_Given ) model->HSM2_depmueph0 = 0.3 ; if ( !model->HSM2_depmueph1_Given ) model->HSM2_depmueph1 = 5e3 ; if ( !model->HSM2_depvmax_Given ) model->HSM2_depvmax = 3e7 ; if ( !model->HSM2_depvmaxl_Given ) model->HSM2_depvmaxl = 0.0 ; if ( !model->HSM2_depvmaxlp_Given ) model->HSM2_depvmaxlp = 1.0 ; if ( !model->HSM2_depvdsef1_Given ) model->HSM2_depvdsef1 = 2.0 ; if ( !model->HSM2_depvdsef1l_Given ) model->HSM2_depvdsef1l = 0.0 ; if ( !model->HSM2_depvdsef1lp_Given ) model->HSM2_depvdsef1lp = 1.0 ; if ( !model->HSM2_depvdsef2_Given ) model->HSM2_depvdsef2 = 0.5 ; if ( !model->HSM2_depvdsef2l_Given ) model->HSM2_depvdsef2l = 0.0 ; if ( !model->HSM2_depvdsef2lp_Given ) model->HSM2_depvdsef2lp = 1.0 ; if ( !model->HSM2_depbb_Given ) model->HSM2_depbb = 1.0 ; if ( !model->HSM2_depmuetmp_Given ) model->HSM2_depmuetmp = 1.5 ; if ( model->HSM2_codep ) { /* change default value for depletion mod MOSFET */ if ( !model->HSM2_corecip_Given ) model->HSM2_corecip = 0 ; if ( !model->HSM2_copprv_Given ) model->HSM2_copprv = 0 ; if ( !model->HSM2_vfbc_Given ) model->HSM2_vfbc = 0.2 ; if ( !model->HSM2_nsubc_Given ) model->HSM2_nsubc = 5.0e16 ; if ( !model->HSM2_lp_Given ) model->HSM2_lp = 0.0 ; if ( !model->HSM2_nsubp_Given ) model->HSM2_nsubp = 1.0e17 ; if ( !model->HSM2_muesr1_Given ) model->HSM2_muesr1 = 5.0e15 ; } /* binning parameters */ if ( !model->HSM2_lmin_Given ) model->HSM2_lmin = 0.0 ; if ( !model->HSM2_lmax_Given ) model->HSM2_lmax = 1.0 ; if ( !model->HSM2_wmin_Given ) model->HSM2_wmin = 0.0 ; if ( !model->HSM2_wmax_Given ) model->HSM2_wmax = 1.0 ; if ( !model->HSM2_lbinn_Given ) model->HSM2_lbinn = 1.0 ; if ( !model->HSM2_wbinn_Given ) model->HSM2_wbinn = 1.0 ; /* Length dependence */ if ( !model->HSM2_lvmax_Given ) model->HSM2_lvmax = 0.0 ; if ( !model->HSM2_lbgtmp1_Given ) model->HSM2_lbgtmp1 = 0.0 ; if ( !model->HSM2_lbgtmp2_Given ) model->HSM2_lbgtmp2 = 0.0 ; if ( !model->HSM2_leg0_Given ) model->HSM2_leg0 = 0.0 ; if ( !model->HSM2_llover_Given ) model->HSM2_llover = 0.0 ; if ( !model->HSM2_lvfbover_Given ) model->HSM2_lvfbover = 0.0 ; if ( !model->HSM2_lnover_Given ) model->HSM2_lnover = 0.0 ; if ( !model->HSM2_lwl2_Given ) model->HSM2_lwl2 = 0.0 ; if ( !model->HSM2_lvfbc_Given ) model->HSM2_lvfbc = 0.0 ; if ( !model->HSM2_lnsubc_Given ) model->HSM2_lnsubc = 0.0 ; if ( !model->HSM2_lnsubp_Given ) model->HSM2_lnsubp = 0.0 ; if ( !model->HSM2_lscp1_Given ) model->HSM2_lscp1 = 0.0 ; if ( !model->HSM2_lscp2_Given ) model->HSM2_lscp2 = 0.0 ; if ( !model->HSM2_lscp3_Given ) model->HSM2_lscp3 = 0.0 ; if ( !model->HSM2_lsc1_Given ) model->HSM2_lsc1 = 0.0 ; if ( !model->HSM2_lsc2_Given ) model->HSM2_lsc2 = 0.0 ; if ( !model->HSM2_lsc3_Given ) model->HSM2_lsc3 = 0.0 ; if ( !model->HSM2_lsc4_Given ) model->HSM2_lsc4 = 0.0 ; if ( !model->HSM2_lpgd1_Given ) model->HSM2_lpgd1 = 0.0 ; if ( !model->HSM2_lndep_Given ) model->HSM2_lndep = 0.0 ; if ( !model->HSM2_lninv_Given ) model->HSM2_lninv = 0.0 ; if ( !model->HSM2_lmuecb0_Given ) model->HSM2_lmuecb0 = 0.0 ; if ( !model->HSM2_lmuecb1_Given ) model->HSM2_lmuecb1 = 0.0 ; if ( !model->HSM2_lmueph1_Given ) model->HSM2_lmueph1 = 0.0 ; if ( !model->HSM2_lvtmp_Given ) model->HSM2_lvtmp = 0.0 ; if ( !model->HSM2_lwvth0_Given ) model->HSM2_lwvth0 = 0.0 ; if ( !model->HSM2_lmuesr1_Given ) model->HSM2_lmuesr1 = 0.0 ; if ( !model->HSM2_lmuetmp_Given ) model->HSM2_lmuetmp = 0.0 ; if ( !model->HSM2_lsub1_Given ) model->HSM2_lsub1 = 0.0 ; if ( !model->HSM2_lsub2_Given ) model->HSM2_lsub2 = 0.0 ; if ( !model->HSM2_lsvds_Given ) model->HSM2_lsvds = 0.0 ; if ( !model->HSM2_lsvbs_Given ) model->HSM2_lsvbs = 0.0 ; if ( !model->HSM2_lsvgs_Given ) model->HSM2_lsvgs = 0.0 ; if ( !model->HSM2_lnsti_Given ) model->HSM2_lnsti = 0.0 ; if ( !model->HSM2_lwsti_Given ) model->HSM2_lwsti = 0.0 ; if ( !model->HSM2_lscsti1_Given ) model->HSM2_lscsti1 = 0.0 ; if ( !model->HSM2_lscsti2_Given ) model->HSM2_lscsti2 = 0.0 ; if ( !model->HSM2_lvthsti_Given ) model->HSM2_lvthsti = 0.0 ; if ( !model->HSM2_lmuesti1_Given ) model->HSM2_lmuesti1 = 0.0 ; if ( !model->HSM2_lmuesti2_Given ) model->HSM2_lmuesti2 = 0.0 ; if ( !model->HSM2_lmuesti3_Given ) model->HSM2_lmuesti3 = 0.0 ; if ( !model->HSM2_lnsubpsti1_Given ) model->HSM2_lnsubpsti1 = 0.0 ; if ( !model->HSM2_lnsubpsti2_Given ) model->HSM2_lnsubpsti2 = 0.0 ; if ( !model->HSM2_lnsubpsti3_Given ) model->HSM2_lnsubpsti3 = 0.0 ; if ( !model->HSM2_lnsubcsti1_Given ) model->HSM2_lnsubcsti1 = 0.0 ; if ( !model->HSM2_lnsubcsti2_Given ) model->HSM2_lnsubcsti2 = 0.0 ; if ( !model->HSM2_lnsubcsti3_Given ) model->HSM2_lnsubcsti3 = 0.0 ; if ( !model->HSM2_lcgso_Given ) model->HSM2_lcgso = 0.0 ; if ( !model->HSM2_lcgdo_Given ) model->HSM2_lcgdo = 0.0 ; if ( !model->HSM2_ljs0_Given ) model->HSM2_ljs0 = 0.0 ; if ( !model->HSM2_ljs0sw_Given ) model->HSM2_ljs0sw = 0.0 ; if ( !model->HSM2_lnj_Given ) model->HSM2_lnj = 0.0 ; if ( !model->HSM2_lcisbk_Given ) model->HSM2_lcisbk = 0.0 ; if ( !model->HSM2_lclm1_Given ) model->HSM2_lclm1 = 0.0 ; if ( !model->HSM2_lclm2_Given ) model->HSM2_lclm2 = 0.0 ; if ( !model->HSM2_lclm3_Given ) model->HSM2_lclm3 = 0.0 ; if ( !model->HSM2_lwfc_Given ) model->HSM2_lwfc = 0.0 ; if ( !model->HSM2_lgidl1_Given ) model->HSM2_lgidl1 = 0.0 ; if ( !model->HSM2_lgidl2_Given ) model->HSM2_lgidl2 = 0.0 ; if ( !model->HSM2_lgleak1_Given ) model->HSM2_lgleak1 = 0.0 ; if ( !model->HSM2_lgleak2_Given ) model->HSM2_lgleak2 = 0.0 ; if ( !model->HSM2_lgleak3_Given ) model->HSM2_lgleak3 = 0.0 ; if ( !model->HSM2_lgleak6_Given ) model->HSM2_lgleak6 = 0.0 ; if ( !model->HSM2_lglksd1_Given ) model->HSM2_lglksd1 = 0.0 ; if ( !model->HSM2_lglksd2_Given ) model->HSM2_lglksd2 = 0.0 ; if ( !model->HSM2_lglkb1_Given ) model->HSM2_lglkb1 = 0.0 ; if ( !model->HSM2_lglkb2_Given ) model->HSM2_lglkb2 = 0.0 ; if ( !model->HSM2_lnftrp_Given ) model->HSM2_lnftrp = 0.0 ; if ( !model->HSM2_lnfalp_Given ) model->HSM2_lnfalp = 0.0 ; if ( !model->HSM2_lvdiffj_Given ) model->HSM2_lvdiffj = 0.0 ; if ( !model->HSM2_libpc1_Given ) model->HSM2_libpc1 = 0.0 ; if ( !model->HSM2_libpc2_Given ) model->HSM2_libpc2 = 0.0 ; /* Width dependence */ if ( !model->HSM2_wvmax_Given ) model->HSM2_wvmax = 0.0 ; if ( !model->HSM2_wbgtmp1_Given ) model->HSM2_wbgtmp1 = 0.0 ; if ( !model->HSM2_wbgtmp2_Given ) model->HSM2_wbgtmp2 = 0.0 ; if ( !model->HSM2_weg0_Given ) model->HSM2_weg0 = 0.0 ; if ( !model->HSM2_wlover_Given ) model->HSM2_wlover = 0.0 ; if ( !model->HSM2_wvfbover_Given ) model->HSM2_wvfbover = 0.0 ; if ( !model->HSM2_wnover_Given ) model->HSM2_wnover = 0.0 ; if ( !model->HSM2_wwl2_Given ) model->HSM2_wwl2 = 0.0 ; if ( !model->HSM2_wvfbc_Given ) model->HSM2_wvfbc = 0.0 ; if ( !model->HSM2_wnsubc_Given ) model->HSM2_wnsubc = 0.0 ; if ( !model->HSM2_wnsubp_Given ) model->HSM2_wnsubp = 0.0 ; if ( !model->HSM2_wscp1_Given ) model->HSM2_wscp1 = 0.0 ; if ( !model->HSM2_wscp2_Given ) model->HSM2_wscp2 = 0.0 ; if ( !model->HSM2_wscp3_Given ) model->HSM2_wscp3 = 0.0 ; if ( !model->HSM2_wsc1_Given ) model->HSM2_wsc1 = 0.0 ; if ( !model->HSM2_wsc2_Given ) model->HSM2_wsc2 = 0.0 ; if ( !model->HSM2_wsc3_Given ) model->HSM2_wsc3 = 0.0 ; if ( !model->HSM2_wsc4_Given ) model->HSM2_wsc4 = 0.0 ; if ( !model->HSM2_wpgd1_Given ) model->HSM2_wpgd1 = 0.0 ; if ( !model->HSM2_wndep_Given ) model->HSM2_wndep = 0.0 ; if ( !model->HSM2_wninv_Given ) model->HSM2_wninv = 0.0 ; if ( !model->HSM2_wmuecb0_Given ) model->HSM2_wmuecb0 = 0.0 ; if ( !model->HSM2_wmuecb1_Given ) model->HSM2_wmuecb1 = 0.0 ; if ( !model->HSM2_wmueph1_Given ) model->HSM2_wmueph1 = 0.0 ; if ( !model->HSM2_wvtmp_Given ) model->HSM2_wvtmp = 0.0 ; if ( !model->HSM2_wwvth0_Given ) model->HSM2_wwvth0 = 0.0 ; if ( !model->HSM2_wmuesr1_Given ) model->HSM2_wmuesr1 = 0.0 ; if ( !model->HSM2_wmuetmp_Given ) model->HSM2_wmuetmp = 0.0 ; if ( !model->HSM2_wsub1_Given ) model->HSM2_wsub1 = 0.0 ; if ( !model->HSM2_wsub2_Given ) model->HSM2_wsub2 = 0.0 ; if ( !model->HSM2_wsvds_Given ) model->HSM2_wsvds = 0.0 ; if ( !model->HSM2_wsvbs_Given ) model->HSM2_wsvbs = 0.0 ; if ( !model->HSM2_wsvgs_Given ) model->HSM2_wsvgs = 0.0 ; if ( !model->HSM2_wnsti_Given ) model->HSM2_wnsti = 0.0 ; if ( !model->HSM2_wwsti_Given ) model->HSM2_wwsti = 0.0 ; if ( !model->HSM2_wscsti1_Given ) model->HSM2_wscsti1 = 0.0 ; if ( !model->HSM2_wscsti2_Given ) model->HSM2_wscsti2 = 0.0 ; if ( !model->HSM2_wvthsti_Given ) model->HSM2_wvthsti = 0.0 ; if ( !model->HSM2_wmuesti1_Given ) model->HSM2_wmuesti1 = 0.0 ; if ( !model->HSM2_wmuesti2_Given ) model->HSM2_wmuesti2 = 0.0 ; if ( !model->HSM2_wmuesti3_Given ) model->HSM2_wmuesti3 = 0.0 ; if ( !model->HSM2_wnsubpsti1_Given ) model->HSM2_wnsubpsti1 = 0.0 ; if ( !model->HSM2_wnsubpsti2_Given ) model->HSM2_wnsubpsti2 = 0.0 ; if ( !model->HSM2_wnsubpsti3_Given ) model->HSM2_wnsubpsti3 = 0.0 ; if ( !model->HSM2_wnsubcsti1_Given ) model->HSM2_wnsubcsti1 = 0.0 ; if ( !model->HSM2_wnsubcsti2_Given ) model->HSM2_wnsubcsti2 = 0.0 ; if ( !model->HSM2_wnsubcsti3_Given ) model->HSM2_wnsubcsti3 = 0.0 ; if ( !model->HSM2_wcgso_Given ) model->HSM2_wcgso = 0.0 ; if ( !model->HSM2_wcgdo_Given ) model->HSM2_wcgdo = 0.0 ; if ( !model->HSM2_wjs0_Given ) model->HSM2_wjs0 = 0.0 ; if ( !model->HSM2_wjs0sw_Given ) model->HSM2_wjs0sw = 0.0 ; if ( !model->HSM2_wnj_Given ) model->HSM2_wnj = 0.0 ; if ( !model->HSM2_wcisbk_Given ) model->HSM2_wcisbk = 0.0 ; if ( !model->HSM2_wclm1_Given ) model->HSM2_wclm1 = 0.0 ; if ( !model->HSM2_wclm2_Given ) model->HSM2_wclm2 = 0.0 ; if ( !model->HSM2_wclm3_Given ) model->HSM2_wclm3 = 0.0 ; if ( !model->HSM2_wwfc_Given ) model->HSM2_wwfc = 0.0 ; if ( !model->HSM2_wgidl1_Given ) model->HSM2_wgidl1 = 0.0 ; if ( !model->HSM2_wgidl2_Given ) model->HSM2_wgidl2 = 0.0 ; if ( !model->HSM2_wgleak1_Given ) model->HSM2_wgleak1 = 0.0 ; if ( !model->HSM2_wgleak2_Given ) model->HSM2_wgleak2 = 0.0 ; if ( !model->HSM2_wgleak3_Given ) model->HSM2_wgleak3 = 0.0 ; if ( !model->HSM2_wgleak6_Given ) model->HSM2_wgleak6 = 0.0 ; if ( !model->HSM2_wglksd1_Given ) model->HSM2_wglksd1 = 0.0 ; if ( !model->HSM2_wglksd2_Given ) model->HSM2_wglksd2 = 0.0 ; if ( !model->HSM2_wglkb1_Given ) model->HSM2_wglkb1 = 0.0 ; if ( !model->HSM2_wglkb2_Given ) model->HSM2_wglkb2 = 0.0 ; if ( !model->HSM2_wnftrp_Given ) model->HSM2_wnftrp = 0.0 ; if ( !model->HSM2_wnfalp_Given ) model->HSM2_wnfalp = 0.0 ; if ( !model->HSM2_wvdiffj_Given ) model->HSM2_wvdiffj = 0.0 ; if ( !model->HSM2_wibpc1_Given ) model->HSM2_wibpc1 = 0.0 ; if ( !model->HSM2_wibpc2_Given ) model->HSM2_wibpc2 = 0.0 ; /* Cross-term dependence */ if ( !model->HSM2_pvmax_Given ) model->HSM2_pvmax = 0.0 ; if ( !model->HSM2_pbgtmp1_Given ) model->HSM2_pbgtmp1 = 0.0 ; if ( !model->HSM2_pbgtmp2_Given ) model->HSM2_pbgtmp2 = 0.0 ; if ( !model->HSM2_peg0_Given ) model->HSM2_peg0 = 0.0 ; if ( !model->HSM2_plover_Given ) model->HSM2_plover = 0.0 ; if ( !model->HSM2_pvfbover_Given ) model->HSM2_pvfbover = 0.0 ; if ( !model->HSM2_pnover_Given ) model->HSM2_pnover = 0.0 ; if ( !model->HSM2_pwl2_Given ) model->HSM2_pwl2 = 0.0 ; if ( !model->HSM2_pvfbc_Given ) model->HSM2_pvfbc = 0.0 ; if ( !model->HSM2_pnsubc_Given ) model->HSM2_pnsubc = 0.0 ; if ( !model->HSM2_pnsubp_Given ) model->HSM2_pnsubp = 0.0 ; if ( !model->HSM2_pscp1_Given ) model->HSM2_pscp1 = 0.0 ; if ( !model->HSM2_pscp2_Given ) model->HSM2_pscp2 = 0.0 ; if ( !model->HSM2_pscp3_Given ) model->HSM2_pscp3 = 0.0 ; if ( !model->HSM2_psc1_Given ) model->HSM2_psc1 = 0.0 ; if ( !model->HSM2_psc2_Given ) model->HSM2_psc2 = 0.0 ; if ( !model->HSM2_psc3_Given ) model->HSM2_psc3 = 0.0 ; if ( !model->HSM2_psc4_Given ) model->HSM2_psc4 = 0.0 ; if ( !model->HSM2_ppgd1_Given ) model->HSM2_ppgd1 = 0.0 ; if ( !model->HSM2_pndep_Given ) model->HSM2_pndep = 0.0 ; if ( !model->HSM2_pninv_Given ) model->HSM2_pninv = 0.0 ; if ( !model->HSM2_pmuecb0_Given ) model->HSM2_pmuecb0 = 0.0 ; if ( !model->HSM2_pmuecb1_Given ) model->HSM2_pmuecb1 = 0.0 ; if ( !model->HSM2_pmueph1_Given ) model->HSM2_pmueph1 = 0.0 ; if ( !model->HSM2_pvtmp_Given ) model->HSM2_pvtmp = 0.0 ; if ( !model->HSM2_pwvth0_Given ) model->HSM2_pwvth0 = 0.0 ; if ( !model->HSM2_pmuesr1_Given ) model->HSM2_pmuesr1 = 0.0 ; if ( !model->HSM2_pmuetmp_Given ) model->HSM2_pmuetmp = 0.0 ; if ( !model->HSM2_psub1_Given ) model->HSM2_psub1 = 0.0 ; if ( !model->HSM2_psub2_Given ) model->HSM2_psub2 = 0.0 ; if ( !model->HSM2_psvds_Given ) model->HSM2_psvds = 0.0 ; if ( !model->HSM2_psvbs_Given ) model->HSM2_psvbs = 0.0 ; if ( !model->HSM2_psvgs_Given ) model->HSM2_psvgs = 0.0 ; if ( !model->HSM2_pnsti_Given ) model->HSM2_pnsti = 0.0 ; if ( !model->HSM2_pwsti_Given ) model->HSM2_pwsti = 0.0 ; if ( !model->HSM2_pscsti1_Given ) model->HSM2_pscsti1 = 0.0 ; if ( !model->HSM2_pscsti2_Given ) model->HSM2_pscsti2 = 0.0 ; if ( !model->HSM2_pvthsti_Given ) model->HSM2_pvthsti = 0.0 ; if ( !model->HSM2_pmuesti1_Given ) model->HSM2_pmuesti1 = 0.0 ; if ( !model->HSM2_pmuesti2_Given ) model->HSM2_pmuesti2 = 0.0 ; if ( !model->HSM2_pmuesti3_Given ) model->HSM2_pmuesti3 = 0.0 ; if ( !model->HSM2_pnsubpsti1_Given ) model->HSM2_pnsubpsti1 = 0.0 ; if ( !model->HSM2_pnsubpsti2_Given ) model->HSM2_pnsubpsti2 = 0.0 ; if ( !model->HSM2_pnsubpsti3_Given ) model->HSM2_pnsubpsti3 = 0.0 ; if ( !model->HSM2_pnsubcsti1_Given ) model->HSM2_pnsubcsti1 = 0.0 ; if ( !model->HSM2_pnsubcsti2_Given ) model->HSM2_pnsubcsti2 = 0.0 ; if ( !model->HSM2_pnsubcsti3_Given ) model->HSM2_pnsubcsti3 = 0.0 ; if ( !model->HSM2_pcgso_Given ) model->HSM2_pcgso = 0.0 ; if ( !model->HSM2_pcgdo_Given ) model->HSM2_pcgdo = 0.0 ; if ( !model->HSM2_pjs0_Given ) model->HSM2_pjs0 = 0.0 ; if ( !model->HSM2_pjs0sw_Given ) model->HSM2_pjs0sw = 0.0 ; if ( !model->HSM2_pnj_Given ) model->HSM2_pnj = 0.0 ; if ( !model->HSM2_pcisbk_Given ) model->HSM2_pcisbk = 0.0 ; if ( !model->HSM2_pclm1_Given ) model->HSM2_pclm1 = 0.0 ; if ( !model->HSM2_pclm2_Given ) model->HSM2_pclm2 = 0.0 ; if ( !model->HSM2_pclm3_Given ) model->HSM2_pclm3 = 0.0 ; if ( !model->HSM2_pwfc_Given ) model->HSM2_pwfc = 0.0 ; if ( !model->HSM2_pgidl1_Given ) model->HSM2_pgidl1 = 0.0 ; if ( !model->HSM2_pgidl2_Given ) model->HSM2_pgidl2 = 0.0 ; if ( !model->HSM2_pgleak1_Given ) model->HSM2_pgleak1 = 0.0 ; if ( !model->HSM2_pgleak2_Given ) model->HSM2_pgleak2 = 0.0 ; if ( !model->HSM2_pgleak3_Given ) model->HSM2_pgleak3 = 0.0 ; if ( !model->HSM2_pgleak6_Given ) model->HSM2_pgleak6 = 0.0 ; if ( !model->HSM2_pglksd1_Given ) model->HSM2_pglksd1 = 0.0 ; if ( !model->HSM2_pglksd2_Given ) model->HSM2_pglksd2 = 0.0 ; if ( !model->HSM2_pglkb1_Given ) model->HSM2_pglkb1 = 0.0 ; if ( !model->HSM2_pglkb2_Given ) model->HSM2_pglkb2 = 0.0 ; if ( !model->HSM2_pnftrp_Given ) model->HSM2_pnftrp = 0.0 ; if ( !model->HSM2_pnfalp_Given ) model->HSM2_pnfalp = 0.0 ; if ( !model->HSM2_pvdiffj_Given ) model->HSM2_pvdiffj = 0.0 ; if ( !model->HSM2_pibpc1_Given ) model->HSM2_pibpc1 = 0.0 ; if ( !model->HSM2_pibpc2_Given ) model->HSM2_pibpc2 = 0.0 ; if (!model->HSM2vgsMaxGiven) model->HSM2vgsMax = 1e99; if (!model->HSM2vgdMaxGiven) model->HSM2vgdMax = 1e99; if (!model->HSM2vgbMaxGiven) model->HSM2vgbMax = 1e99; if (!model->HSM2vdsMaxGiven) model->HSM2vdsMax = 1e99; if (!model->HSM2vbsMaxGiven) model->HSM2vbsMax = 1e99; if (!model->HSM2vbdMaxGiven) model->HSM2vbdMax = 1e99; if (!model->HSM2vgsrMaxGiven) model->HSM2vgsrMax = 1e99; if (!model->HSM2vgdrMaxGiven) model->HSM2vgdrMax = 1e99; if (!model->HSM2vgbrMaxGiven) model->HSM2vgbrMax = 1e99; if (!model->HSM2vbsrMaxGiven) model->HSM2vbsrMax = 1e99; if (!model->HSM2vbdrMaxGiven) model->HSM2vbdrMax = 1e99; if ( model->HSM2_codep ) { RANGERESET(model->HSM2_ndepm, 5e15, 2e17, "NDEPM" ) ; RANGERESET(model->HSM2_tndep, 1e-7, 1e-6, "TNDEP" ) ; RANGECHECK(model->HSM2_depleak, 0.0, 10.0, "DEPLEAK" ) ; if( model->HSM2_corecip ) { printf("warning(HiSIM): CORECIP is not supported yet in depletion mode MOSFET, reset to 0.\n"); model->HSM2_corecip = 0; } if( model->HSM2_copprv ) { printf("warning(HiSIM): COPPRV is not supported yet in depletion mode MOSFET, reset to 0.\n"); model->HSM2_copprv = 0; } if( model->HSM2_corsrd == 1 ) { printf("warning(HiSIM): CORSRD=1 is not supported yet in depletion mode MOSFET, reset to -1.\n"); model->HSM2_corsrd = -1; } if( model->HSM2_coisti ) { printf("warning(HiSIM): STI leak model is not supported yet in depletion mode MOSFET, skipped\n"); model->HSM2_coisti = 0 ; } if( model->HSM2_cothrml ) { printf("warning(HiSIM): Thermal noise model is not supported yet in depletion mode MOSFET, skipped\n"); model->HSM2_cothrml = 0 ; } if( model->HSM2_coign ) { printf("warning(HiSIM): Induced gate noise model is not supported yet in depletion mode MOSFET, skipped\n"); model->HSM2_coign = 0 ; } } if ( model->HSM2_corecip ){ model->HSM2_sc2 = 0.0 ; model->HSM2_lsc2 = 0.0 ; model->HSM2_wsc2 = 0.0 ; model->HSM2_psc2 = 0.0 ; model->HSM2_scp2 = 0.0 ; model->HSM2_lscp2 = 0.0 ; model->HSM2_wscp2 = 0.0 ; model->HSM2_pscp2 = 0.0 ; model->HSM2_sc4 = 0.0 ; model->HSM2_lsc4 = 0.0 ; model->HSM2_wsc4 = 0.0 ; model->HSM2_psc4 = 0.0 ; model->HSM2_coqy = 0 ; } modelMKS = &model->modelMKS ; /* loop through all the instances of the model */ for ( here = HSM2instances(model);here != NULL ; here = HSM2nextInstance(here)) { /* allocate a chunk of the state vector */ here->HSM2states = *states; if (model->HSM2_conqs) *states += HSM2numStatesNqs; else *states += HSM2numStates; hereMKS = &here->hereMKS ; /* perform the parameter defaulting */ if ( !here->HSM2_l_Given ) here->HSM2_l = 5.0e-6 ; if ( !here->HSM2_w_Given ) here->HSM2_w = 5.0e-6 ; if ( !here->HSM2_ad_Given ) here->HSM2_ad = 0.0 ; if ( !here->HSM2_as_Given ) here->HSM2_as = 0.0 ; if ( !here->HSM2_pd_Given ) here->HSM2_pd = 0.0 ; if ( !here->HSM2_ps_Given ) here->HSM2_ps = 0.0 ; if ( !here->HSM2_nrd_Given ) here->HSM2_nrd = 0.0 ; if ( !here->HSM2_nrs_Given ) here->HSM2_nrs = 0.0 ; if ( !here->HSM2_ngcon_Given ) here->HSM2_ngcon = 1.0 ; if ( !here->HSM2_xgw_Given ) here->HSM2_xgw = 0e0 ; if ( !here->HSM2_xgl_Given ) here->HSM2_xgl = 0e0 ; if ( !here->HSM2_nf_Given ) here->HSM2_nf = 1.0 ; if ( !here->HSM2_sa_Given ) here->HSM2_sa = 0 ; if ( !here->HSM2_sb_Given ) here->HSM2_sb = 0 ; if ( !here->HSM2_sd_Given ) here->HSM2_sd = 0 ; if ( !here->HSM2_temp_Given ) here->HSM2_temp = 27.0 ; /* [C] */ if ( !here->HSM2_dtemp_Given ) here->HSM2_dtemp = 0.0 ; if ( !here->HSM2_icVBS_Given ) here->HSM2_icVBS = 0.0; if ( !here->HSM2_icVDS_Given ) here->HSM2_icVDS = 0.0; if ( !here->HSM2_icVGS_Given ) here->HSM2_icVGS = 0.0; if ( !here->HSM2_corbnet_Given ) here->HSM2_corbnet = model->HSM2_corbnet ; else if ( here->HSM2_corbnet != 0 && here->HSM2_corbnet != 1 ) { here->HSM2_corbnet = model->HSM2_corbnet ; if(model->HSM2_coerrrep) printf("warning(HiSIM): CORBNET has been set to its default value: %d.\n", here->HSM2_corbnet); } if ( !here->HSM2_rbdb_Given) here->HSM2_rbdb = model->HSM2_rbdb; /* in ohm */ if ( !here->HSM2_rbsb_Given) here->HSM2_rbsb = model->HSM2_rbsb; if ( !here->HSM2_rbpb_Given) here->HSM2_rbpb = model->HSM2_rbpb; if ( !here->HSM2_rbps_Given) here->HSM2_rbps = model->HSM2_rbps; if ( !here->HSM2_rbpd_Given) here->HSM2_rbpd = model->HSM2_rbpd; if ( !here->HSM2_corg_Given ) here->HSM2_corg = model->HSM2_corg ; else if ( here->HSM2_corg != 0 && here->HSM2_corg != 1 ) { here->HSM2_corg = model->HSM2_corg ; if(model->HSM2_coerrrep) printf("warning(HiSIM): CORG has been set to its default value: %d.\n", here->HSM2_corg); } if ( !here->HSM2_mphdfm_Given ) here->HSM2_mphdfm = model->HSM2_mphdfm ; if ( !here->HSM2_m_Given ) here->HSM2_m = 1.0 ; /* WPE */ if ( !here->HSM2_sca_Given ) here->HSM2_sca = 0.0 ; /* default value */ if ( !here->HSM2_scb_Given ) here->HSM2_scb = 0.0 ; /* default value */ if ( !here->HSM2_scc_Given ) here->HSM2_scc = 0.0 ; /* default value */ /* process drain series resistance */ if ((model->HSM2_corsrd < 0 && (model->HSM2_rsh > 0.0 || model->HSM2_rd > 0.0))) { if(here->HSM2dNodePrime <= 0) { error = CKTmkVolt(ckt, &tmp, here->HSM2name, "drain"); if (error) return(error); here->HSM2dNodePrime = tmp->number; } } else { here->HSM2dNodePrime = here->HSM2dNode; } /* process source series resistance */ if ((model->HSM2_corsrd < 0 && (model->HSM2_rsh > 0.0 || model->HSM2_rs > 0.0))) { if(here->HSM2sNodePrime == 0) { error = CKTmkVolt(ckt, &tmp, here->HSM2name, "source"); if (error) return(error); here->HSM2sNodePrime = tmp->number; } } else { here->HSM2sNodePrime = here->HSM2sNode; } /* process gate resistance */ if ((here->HSM2_corg == 1 && model->HSM2_rshg > 0.0)) { if(here->HSM2gNodePrime <= 0) { error = CKTmkVolt(ckt, &tmp, here->HSM2name, "gate"); if (error) return(error); here->HSM2gNodePrime = tmp->number; } } else { here->HSM2gNodePrime = here->HSM2gNode; } /* internal body nodes for body resistance model */ if ( here->HSM2_corbnet == 1 ) { if (here->HSM2dbNode == 0) { error = CKTmkVolt(ckt, &tmp, here->HSM2name, "dbody"); if (error) return(error); here->HSM2dbNode = tmp->number; } if (here->HSM2bNodePrime == 0) { error = CKTmkVolt(ckt, &tmp,here->HSM2name, "body"); if (error) return(error); here->HSM2bNodePrime = tmp->number; } if (here->HSM2sbNode == 0) { error = CKTmkVolt(ckt, &tmp, here->HSM2name,"sbody"); if (error) return(error); here->HSM2sbNode = tmp->number; } } else { here->HSM2dbNode = here->HSM2bNodePrime = here->HSM2sbNode = here->HSM2bNode; } /* set Sparse Matrix Pointers */ /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(HSM2DPbpPtr, HSM2dNodePrime, HSM2bNodePrime); TSTALLOC(HSM2SPbpPtr, HSM2sNodePrime, HSM2bNodePrime); TSTALLOC(HSM2GPbpPtr, HSM2gNodePrime, HSM2bNodePrime); TSTALLOC(HSM2BPdpPtr, HSM2bNodePrime, HSM2dNodePrime); TSTALLOC(HSM2BPspPtr, HSM2bNodePrime, HSM2sNodePrime); TSTALLOC(HSM2BPgpPtr, HSM2bNodePrime, HSM2gNodePrime); TSTALLOC(HSM2BPbpPtr, HSM2bNodePrime, HSM2bNodePrime); TSTALLOC(HSM2DdPtr, HSM2dNode, HSM2dNode); TSTALLOC(HSM2GPgpPtr, HSM2gNodePrime, HSM2gNodePrime); TSTALLOC(HSM2SsPtr, HSM2sNode, HSM2sNode); TSTALLOC(HSM2DPdpPtr, HSM2dNodePrime, HSM2dNodePrime); TSTALLOC(HSM2SPspPtr, HSM2sNodePrime, HSM2sNodePrime); TSTALLOC(HSM2DdpPtr, HSM2dNode, HSM2dNodePrime); TSTALLOC(HSM2GPdpPtr, HSM2gNodePrime, HSM2dNodePrime); TSTALLOC(HSM2GPspPtr, HSM2gNodePrime, HSM2sNodePrime); TSTALLOC(HSM2SspPtr, HSM2sNode, HSM2sNodePrime); TSTALLOC(HSM2DPspPtr, HSM2dNodePrime, HSM2sNodePrime); TSTALLOC(HSM2DPdPtr, HSM2dNodePrime, HSM2dNode); TSTALLOC(HSM2DPgpPtr, HSM2dNodePrime, HSM2gNodePrime); TSTALLOC(HSM2SPgpPtr, HSM2sNodePrime, HSM2gNodePrime); TSTALLOC(HSM2SPsPtr, HSM2sNodePrime, HSM2sNode); TSTALLOC(HSM2SPdpPtr, HSM2sNodePrime, HSM2dNodePrime); if ( here->HSM2_corg == 1 ) { TSTALLOC(HSM2GgPtr, HSM2gNode, HSM2gNode); TSTALLOC(HSM2GgpPtr, HSM2gNode, HSM2gNodePrime); TSTALLOC(HSM2GPgPtr, HSM2gNodePrime, HSM2gNode); TSTALLOC(HSM2GdpPtr, HSM2gNode, HSM2dNodePrime); TSTALLOC(HSM2GspPtr, HSM2gNode, HSM2sNodePrime); TSTALLOC(HSM2GbpPtr, HSM2gNode, HSM2bNodePrime); } if ( here->HSM2_corbnet == 1 ) { /* consider body resistance net */ TSTALLOC(HSM2DPdbPtr, HSM2dNodePrime, HSM2dbNode); TSTALLOC(HSM2SPsbPtr, HSM2sNodePrime, HSM2sbNode); TSTALLOC(HSM2DBdpPtr, HSM2dbNode, HSM2dNodePrime); TSTALLOC(HSM2DBdbPtr, HSM2dbNode, HSM2dbNode); TSTALLOC(HSM2DBbpPtr, HSM2dbNode, HSM2bNodePrime); TSTALLOC(HSM2DBbPtr, HSM2dbNode, HSM2bNode); TSTALLOC(HSM2BPdbPtr, HSM2bNodePrime, HSM2dbNode); TSTALLOC(HSM2BPbPtr, HSM2bNodePrime, HSM2bNode); TSTALLOC(HSM2BPsbPtr, HSM2bNodePrime, HSM2sbNode); TSTALLOC(HSM2SBspPtr, HSM2sbNode, HSM2sNodePrime); TSTALLOC(HSM2SBbpPtr, HSM2sbNode, HSM2bNodePrime); TSTALLOC(HSM2SBbPtr, HSM2sbNode, HSM2bNode); TSTALLOC(HSM2SBsbPtr, HSM2sbNode, HSM2sbNode); TSTALLOC(HSM2BdbPtr, HSM2bNode, HSM2dbNode); TSTALLOC(HSM2BbpPtr, HSM2bNode, HSM2bNodePrime); TSTALLOC(HSM2BsbPtr, HSM2bNode, HSM2sbNode); TSTALLOC(HSM2BbPtr, HSM2bNode, HSM2bNode); } /*-----------------------------------------------------------* * Range check of instance parameters *-----------------*/ RANGECHECK(here->HSM2_l, model->HSM2_lmin, model->HSM2_lmax, "L") ; RANGECHECK(here->HSM2_w/here->HSM2_nf, model->HSM2_wmin, model->HSM2_wmax, "W/NF") ; RANGECHECK(here->HSM2_mphdfm, -3.0, 3.0, "MPHDFM") ; /*-----------------------------------------------------------* * Change unit into Kelvin. *-----------------*/ here->HSM2_ktemp = here->HSM2_temp + 273.15 ; /* [C] -> [K] */ here->HSM2_lgate = Lgate = here->HSM2_l + model->HSM2_xl ; here->HSM2_wgate = Wgate = here->HSM2_w / here->HSM2_nf + model->HSM2_xw ; here->HSM2_lg = LG = Lgate * C_m2um ; here->HSM2_wg = WG = Wgate * C_m2um ; /* binning calculation */ pParam = &here->pParam ; Lbin = pow(LG, model->HSM2_lbinn) ; Wbin = pow(WG, model->HSM2_wbinn) ; LWbin = Lbin * Wbin ; BINNING(vmax); BINNING(bgtmp1); BINNING(bgtmp2); BINNING(eg0); BINNING(lover); BINNING(vfbover); BINNING(nover); BINNING(wl2); BINNING(vfbc); BINNING(nsubc); BINNING(nsubp); BINNING(scp1); BINNING(scp2); BINNING(scp3); BINNING(sc1); BINNING(sc2); BINNING(sc3); BINNING(sc4); BINNING(pgd1); BINNING(ndep); BINNING(ninv); BINNING(muecb0); BINNING(muecb1); BINNING(mueph1); BINNING(vtmp); BINNING(wvth0); BINNING(muesr1); BINNING(muetmp); BINNING(sub1); BINNING(sub2); BINNING(svds); BINNING(svbs); BINNING(svgs); BINNING(nsti); BINNING(wsti); BINNING(scsti1); BINNING(scsti2); BINNING(vthsti); BINNING(muesti1); BINNING(muesti2); BINNING(muesti3); BINNING(nsubpsti1); BINNING(nsubpsti2); BINNING(nsubpsti3); BINNING(nsubcsti1); BINNING(nsubcsti2); BINNING(nsubcsti3); BINNING(cgso); BINNING(cgdo); BINNING(js0); BINNING(js0sw); BINNING(nj); BINNING(cisbk); BINNING(clm1); BINNING(clm2); BINNING(clm3); BINNING(wfc); BINNING(gidl1); BINNING(gidl2); BINNING(gleak1); BINNING(gleak2); BINNING(gleak3); BINNING(gleak6); BINNING(glksd1); BINNING(glksd2); BINNING(glkb1); BINNING(glkb2); BINNING(nftrp); BINNING(nfalp); BINNING(vdiffj); BINNING(ibpc1); BINNING(ibpc2); /*-----------------------------------------------------------* * Range check of binning parameters *-----------------*/ RANGECHECK(pParam->HSM2_vmax, 1.0e5, 20.0e6, "VMAX") ; RANGECHECK(pParam->HSM2_bgtmp1, 50.0e-6, 1.0e-3, "BGTMP1") ; RANGECHECK(pParam->HSM2_bgtmp2, -1.0e-6, 1.0e-6, "BGTMP2") ; RANGECHECK(pParam->HSM2_eg0, 1.0, 1.3, "EG0") ; if( model->HSM2_codep == 0 ) { RANGECHECK(pParam->HSM2_vfbc, -1.2, 0.0, "VFBC") ; } else { RANGECHECK(pParam->HSM2_vfbc, -1.2, 0.8, "VFBC") ; } RANGECHECK(pParam->HSM2_vfbover, -0.2, 0.2, "VFBOVER") ; RANGECHECK(pParam->HSM2_nsubc, 1.0e16, 1.0e19, "NSUBC") ; RANGECHECK(pParam->HSM2_nsubp, 1.0e16, 1.0e19, "NSUBP") ; RANGECHECK(pParam->HSM2_scp1, 0.0, 20.0, "SCP1") ; RANGECHECK(pParam->HSM2_scp2, 0.0, 2.0, "SCP2") ; RANGECHECK(pParam->HSM2_scp3, 0.0, 100.0e-9, "SCP3") ; RANGECHECK(pParam->HSM2_sc1, 0.0, 20.0, "SC1") ; RANGECHECK(pParam->HSM2_sc2, 0.0, 2.0, "SC2") ; RANGECHECK(pParam->HSM2_sc3, 0.0, 200.0e-9, "SC3") ; RANGECHECK(pParam->HSM2_pgd1, 0.0, 50.0e-3, "PGD1") ; RANGECHECK(pParam->HSM2_ndep, 0.0, 1.0, "NDEP") ; RANGECHECK(pParam->HSM2_ninv, 0.0, 1.0, "NINV") ; RANGECHECK(pParam->HSM2_muecb0, 10.0, 100.0e3, "MUECB0") ; RANGECHECK(pParam->HSM2_muecb1, 5.0, 1.0e4, "MUECB1") ; RANGECHECK(pParam->HSM2_mueph1, 2.0e3, 35.0e3, "MUEPH1") ; RANGECHECK(pParam->HSM2_vtmp, -5.0, 1.0, "VTMP") ; RANGECHECK(pParam->HSM2_muesr1, 1.0e13, 1.0e16, "MUESR1") ; RANGECHECK(pParam->HSM2_muetmp, 0.5, 2.0, "MUETMP") ; RANGECHECK(pParam->HSM2_clm1, 0.5, 1.0, "CLM1") ; RANGECHECK(pParam->HSM2_clm2, 1.0, 4.0, "CLM2") ; RANGECHECK(pParam->HSM2_clm3, 0.5, 5.0, "CLM3") ; RANGECHECK(pParam->HSM2_wfc, -5.0e-15, 1.0e-6, "WFC") ; RANGECHECK(pParam->HSM2_cgso, 0.0, 100e-9 * 100*C_VAC*model->HSM2_kappa/model->HSM2_tox*C_m2cm, "CGSO") ; RANGECHECK(pParam->HSM2_cgdo, 0.0, 100e-9 * 100*C_VAC*model->HSM2_kappa/model->HSM2_tox*C_m2cm, "CGDO") ; RANGECHECK(pParam->HSM2_ibpc1, 0.0, 1.0e12, "IBPC1") ; RANGECHECK(pParam->HSM2_ibpc2, 0.0, 1.0e12, "IBPC2") ; RANGECHECK(pParam->HSM2_nsti, 1.0e16, 1.0e19, "NSTI") ; /*-----------------------------------------------------------* * Lg dependence of binning parameters *-----------------*/ /* Vfbc */ pParam->HSM2_vfbc = pParam->HSM2_vfbc * (1.0e0 + (model->HSM2_vfbcl / pow (LG, model->HSM2_vfbclp))) ; /*-----------------------------------------------------------* * Conversion to MKS unit for instance parameters. *-----------------*/ hereMKS->HSM2_nsubcdfm = here->HSM2_nsubcdfm / C_cm2m_p3 ; pParam->HSM2_nsubc = pParam->HSM2_nsubc / C_cm2m_p3 ; pParam->HSM2_nsubp = pParam->HSM2_nsubp / C_cm2m_p3 ; pParam->HSM2_nsti = pParam->HSM2_nsti / C_cm2m_p3 ; pParam->HSM2_nover = pParam->HSM2_nover / C_cm2m_p3 ; pParam->HSM2_nsubpsti1 = pParam->HSM2_nsubpsti1 / C_m2cm ; pParam->HSM2_nsubcsti1 = pParam->HSM2_nsubcsti1 / C_m2cm ; pParam->HSM2_muesti1 = pParam->HSM2_muesti1 / C_m2cm ; pParam->HSM2_vmax = pParam->HSM2_vmax / C_m2cm ; pParam->HSM2_wfc = pParam->HSM2_wfc * C_m2cm_p2 ; pParam->HSM2_glksd1 = pParam->HSM2_glksd1 / C_m2cm ; pParam->HSM2_glksd2 = pParam->HSM2_glksd2 * C_m2cm ; pParam->HSM2_gleak2 = pParam->HSM2_gleak2 * C_m2cm ; pParam->HSM2_glkb2 = pParam->HSM2_glkb2 * C_m2cm ; pParam->HSM2_gidl1 = pParam->HSM2_gidl1 / C_m2cm_p1o2 ; pParam->HSM2_gidl2 = pParam->HSM2_gidl2 * C_m2cm ; pParam->HSM2_nfalp = pParam->HSM2_nfalp / C_m2cm ; pParam->HSM2_nftrp = pParam->HSM2_nftrp * C_m2cm_p2 ; } /* End of instance */ /*-----------------------------------------------------------* * Range check of model parameters *-----------------*/ MINCHECK (model->HSM2_tox, 0.0, "TOX") ; RANGECHECK(model->HSM2_xld, 0.0, 50.0e-9, "XLD") ; RANGECHECK(model->HSM2_xwd, -10.0e-9, 100.0e-9, "XWD") ; RANGECHECK(model->HSM2_rsh, 0.0, 200.0, "RSH") ; /* fix in version 2.80 */ RANGECHECK(model->HSM2_rshg, 0.0, 100.0, "RSHG") ; RANGECHECK(model->HSM2_xqy, 10.0e-9, 50.0e-9, "XQY") ; RANGECHECK(model->HSM2_rs, 0.0, 10.0e-3, "RS") ; RANGECHECK(model->HSM2_rd, 0.0, 10.0e-3, "RD") ; RANGECHECK(model->HSM2_vbi, 1.0, 1.2, "VBI") ; RANGECHECK(model->HSM2_parl2, 0.0, 50.0e-9, "PARL2") ; RANGECHECK(model->HSM2_lp, 0.0, 300.0e-9, "LP") ; RANGECHECK(model->HSM2_pgd2, 0.0, 1.5, "PGD2") ; RANGECHECK(model->HSM2_pgd4, 0.0, 3.0, "PGD4") ; RANGECHECK(model->HSM2_muecb0lp, 0.0, 2.0, "MUECB0LP") ; RANGECHECK(model->HSM2_muecb1lp, 0.0, 2.0, "MUECB1LP") ; RANGECHECK(model->HSM2_mueph0, 0.25, 0.35, "MUEPH0") ; RANGECHECK(model->HSM2_muesr0, 1.8, 2.2, "MUESR0") ; RANGECHECK(model->HSM2_lpext, 1.0e-50, 10.0e-6, "LPEXT") ; RANGECHECK(model->HSM2_npext, 1.0e16, 1.0e18, "NPEXT") ; RANGECHECK(model->HSM2_scp21, 0.0, 5.0, "SCP21") ; RANGECHECK(model->HSM2_scp22, 0.0, 0.0, "SCP22") ; RANGECHECK(model->HSM2_bs1, -1.0, 50.0e-3, "BS1") ; RANGECHECK(model->HSM2_bs2, 0.5, 1.0, "BS2") ; MINCHECK (model->HSM2_cgbo, 0.0, "CGBO") ; RANGECHECK(model->HSM2_clm5, 0.0, 2.0, "CLM5") ; RANGECHECK(model->HSM2_clm6, 0.0, 20.0, "CLM6") ; RANGECHECK(model->HSM2_vover, 0.0, 50.0, "VOVER") ; RANGECHECK(model->HSM2_voverp, 0.0, 2.0, "VOVERP") ; RANGECHECK(model->HSM2_qme1, 0.0, 300.0e-9, "QME1") ; RANGECHECK(model->HSM2_qme2, 1.0, 3.0, "QME2") ; RANGECHECK(model->HSM2_qme3, 0.0, 1.0e-9, "QME3") ; RANGECHECK(model->HSM2_tnom, 22.0, 32.0, "TNOM") ; RANGECHECK(model->HSM2_ddltmax, 1.0, 20.0, "DDLTMAX") ; RANGECHECK(model->HSM2_ddltict, -3.0, 20.0, "DDLTICT") ; RANGECHECK(model->HSM2_ddltslp, 0.0, 20.0, "DDLTSLP") ; RANGECHECK(model->HSM2_cvb, -0.1, 0.2, "CVB") ; RANGECHECK(model->HSM2_cvbk, -0.1, 0.2, "CVBK") ; RANGECHECK(model->HSM2_byptol, 0.0, 1.0, "BYPTOL") ; RANGECHECK(model->HSM2_sc3Vbs, -3.0, 0.0, "SC3VBS") ; RANGERESET(model->HSM2_nsubpfac, 0.2, 1.0, "NSUBPFAC") ; RANGERESET(model->HSM2_nsubpdlt, 1E-50, 0.1, "NSUBPDLT") ; /*-----------------------------------------------------------* * Conversion to MKS unit for model parameters. *-----------------*/ modelMKS->HSM2_npext = model->HSM2_npext / C_cm2m_p3 ; modelMKS->HSM2_nsubcwpe = model->HSM2_nsubcwpe / C_cm2m_p3 ; modelMKS->HSM2_nsubpwpe = model->HSM2_nsubpwpe / C_cm2m_p3 ; modelMKS->HSM2_npextwpe = model->HSM2_npextwpe / C_cm2m_p3 ; modelMKS->HSM2_ll = model->HSM2_ll / pow( C_m2cm , model->HSM2_lln ) ; modelMKS->HSM2_wl = model->HSM2_wl / pow( C_m2cm , model->HSM2_wln ) ; modelMKS->HSM2_svgsl = model->HSM2_svgsl / pow( C_m2cm , model->HSM2_svgslp ) ; modelMKS->HSM2_svgsw = model->HSM2_svgsw / pow( C_m2cm , model->HSM2_svgswp ) ; modelMKS->HSM2_svbsl = model->HSM2_svbsl / pow( C_m2cm , model->HSM2_svbslp ) ; modelMKS->HSM2_slgl = model->HSM2_slgl / pow( C_m2cm , model->HSM2_slglp ) ; modelMKS->HSM2_sub1l = model->HSM2_sub1l / pow( C_m2cm , model->HSM2_sub1lp ) ; modelMKS->HSM2_slg = model->HSM2_slg / C_m2cm ; modelMKS->HSM2_sub2l = model->HSM2_sub2l / C_m2cm ; modelMKS->HSM2_nsubcmax = model->HSM2_nsubcmax / C_cm2m_p3 ; modelMKS->HSM2_glksd3 = model->HSM2_glksd3 * C_m2cm ; modelMKS->HSM2_gleak2 = model->HSM2_gleak2 * C_m2cm ; modelMKS->HSM2_gleak4 = model->HSM2_gleak4 * C_m2cm ; modelMKS->HSM2_gleak5 = model->HSM2_gleak5 * C_m2cm ; modelMKS->HSM2_gleak7 = model->HSM2_gleak7 / C_m2cm_p2 ; modelMKS->HSM2_cit = model->HSM2_cit * C_m2cm_p2 ; modelMKS->HSM2_ovslp = model->HSM2_ovslp / C_m2cm ; modelMKS->HSM2_dly3 = model->HSM2_dly3 / C_m2cm_p2 ; modelMKS->HSM2_ndepm = model->HSM2_ndepm / C_cm2m_p3 ; /*-----------------------------------------------------------* * Change unit into Kelvin. *-----------------*/ model->HSM2_ktnom = model->HSM2_tnom + 273.15 ; /* [C] -> [K] */ /* SourceSatCurrent = 1.0e-14 */ /* DrainSatCurrent = 1.0e-14 */ model->HSM2_vcrit = CONSTvt0 * log( CONSTvt0 / (CONSTroot2 * 1.0e-14) ) ; /* Quantum Mechanical Effect */ if ( ( model->HSM2_qme1 == 0.0 && model->HSM2_qme3 == 0.0 ) || model->HSM2_qme2 == 0.0 ) { model->HSM2_flg_qme = 0 ; } else { model->HSM2_flg_qme = 1 ; model->HSM2_qme12 = model->HSM2_qme1 / ( model->HSM2_qme2 * model->HSM2_qme2 ) ; } } /* End of model */ #ifdef USE_OMP InstCount = 0; model = (HSM2model*)inModel; /* loop through all the HSM2 device models to count the number of instances */ for ( ; model != NULL; model = HSM2nextModel(model)) { /* loop through all the instances of the model */ for (here = HSM2instances(model); here != NULL ; here = HSM2nextInstance(here)) { InstCount++; } model->HSM2InstCount = 0; model->HSM2InstanceArray = NULL; } InstArray = TMALLOC(HSM2instance*, InstCount); model = (HSM2model*)inModel; /* store this in the first model only */ model->HSM2InstCount = InstCount; model->HSM2InstanceArray = InstArray; idx = 0; for ( ; model != NULL; model = HSM2nextModel(model)) { /* loop through all the instances of the model */ for (here = HSM2instances(model); here != NULL ; here = HSM2nextInstance(here)) { InstArray[idx] = here; idx++; } } #endif return(OK); } int HSM2unsetup( GENmodel *inModel, CKTcircuit *ckt) { #ifndef HAS_BATCHSIM HSM2model *model; HSM2instance *here; for (model = (HSM2model *)inModel; model != NULL; model = HSM2nextModel(model)) { for (here = HSM2instances(model); here != NULL; here=HSM2nextInstance(here)) { if (here->HSM2sbNode > 0 && here->HSM2sbNode != here->HSM2bNode) CKTdltNNum(ckt, here->HSM2sbNode); here->HSM2sbNode = 0; if (here->HSM2bNodePrime > 0 && here->HSM2bNodePrime != here->HSM2bNode) CKTdltNNum(ckt, here->HSM2bNodePrime); here->HSM2bNodePrime = 0; if (here->HSM2dbNode > 0 && here->HSM2dbNode != here->HSM2bNode) CKTdltNNum(ckt, here->HSM2dbNode); here->HSM2dbNode = 0; if (here->HSM2gNodePrime > 0 && here->HSM2gNodePrime != here->HSM2gNode) CKTdltNNum(ckt, here->HSM2gNodePrime); here->HSM2gNodePrime = 0; if (here->HSM2sNodePrime > 0 && here->HSM2sNodePrime != here->HSM2sNode) CKTdltNNum(ckt, here->HSM2sNodePrime); here->HSM2sNodePrime = 0; if (here->HSM2dNodePrime > 0 && here->HSM2dNodePrime != here->HSM2dNode) CKTdltNNum(ckt, here->HSM2dNodePrime); here->HSM2dNodePrime = 0; } } #endif return OK; } tmpk8ny_4pz/src/spicelib/devices/isrc/0000755000175000017500000000000013546075722020123 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/isrc/isrcext.h0000644000175000017500000000102613546075722021754 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ extern int ISRCaccept(CKTcircuit*,GENmodel*); extern int ISRCacLoad(GENmodel*,CKTcircuit*); extern int ISRCask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int ISRCdelete(GENinstance*); extern int ISRCload(GENmodel*,CKTcircuit*); extern int ISRCparam(int,IFvalue*,GENinstance*,IFvalue*); extern int ISRCpzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int ISRCtemp(GENmodel*,CKTcircuit*); tmpk8ny_4pz/src/spicelib/devices/isrc/Makefile.am0000644000175000017500000000062313546075722022160 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libisrc.la libisrc_la_SOURCES = \ isrc.c \ isrcacct.c \ isrcacld.c \ isrcask.c \ isrcdefs.h \ isrcdel.c \ isrcext.h \ isrcinit.c \ isrcinit.h \ isrcitf.h \ isrcload.c \ isrcpar.c \ isrctemp.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/isrc/isrcinit.h0000644000175000017500000000030213546075722022113 0ustar carstencarsten#ifndef _ISRCINIT_H #define _ISRCINIT_H extern IFparm ISRCpTable[ ]; extern char *ISRCnames[ ]; extern int ISRCpTSize; extern int ISRCnSize; extern int ISRCiSize; extern int ISRCmSize; #endif tmpk8ny_4pz/src/spicelib/devices/isrc/isrctemp.c0000644000175000017500000000352313546075722022120 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "isrcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int ISRCtemp(GENmodel *inModel, CKTcircuit *ckt) /* Pre-process voltage source parameters */ { ISRCmodel *model = (ISRCmodel *) inModel; ISRCinstance *here; double radians; NG_IGNORE(ckt); /* loop through all the voltage source models */ for( ; model != NULL; model = ISRCnextModel(model)) { /* loop through all the instances of the model */ for (here = ISRCinstances(model); here != NULL ; here=ISRCnextInstance(here)) { if(here->ISRCacGiven && !here->ISRCacMGiven) { here->ISRCacMag = 1; } if(here->ISRCacGiven && !here->ISRCacPGiven) { here->ISRCacPhase = 0; } if(!here->ISRCdcGiven) { /* no DC value - either have a transient value, or none */ if(here->ISRCfuncTGiven) { SPfrontEnd->IFerrorf (ERR_WARNING, "%s: no DC value, transient time 0 value used", here->ISRCname); } else { SPfrontEnd->IFerrorf (ERR_WARNING, "%s: has no value, DC 0 assumed", here->ISRCname); } } if(!here->ISRCmGiven) here->ISRCmValue = 1; radians = here->ISRCacPhase * M_PI / 180.0; here->ISRCacReal = here->ISRCacMag * cos(radians); here->ISRCacImag = here->ISRCacMag * sin(radians); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/isrc/isrcdel.c0000644000175000017500000000076213546075722021721 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "isrcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/1-f-code.h" int ISRCdelete(GENinstance *gen_inst) { ISRCinstance *inst = (ISRCinstance *) gen_inst; FREE(inst->ISRCcoeffs); trnoise_state_free(inst->ISRCtrnoise_state); FREE(inst->ISRCtrrandom_state); return OK; } tmpk8ny_4pz/src/spicelib/devices/isrc/isrcdefs.h0000644000175000017500000000737113546075722022106 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #ifndef ISRC #define ISRC #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" /* * structures to describe independent current sources */ /* information needed for each instance */ typedef struct sISRCinstance { struct GENinstance gen; #define ISRCmodPtr(inst) ((struct sISRCmodel *)((inst)->gen.GENmodPtr)) #define ISRCnextInstance(inst) ((struct sISRCinstance *)((inst)->gen.GENnextInstance)) #define ISRCname gen.GENname #define ISRCstate gen.GENstate const int ISRCnegNode; /* number of negative node of source */ const int ISRCposNode; /* number of positive node of source */ int ISRCfunctionType; /* code number of function type for source */ int ISRCfunctionOrder; /* order of the function for the source */ double *ISRCcoeffs; /* pointer to array of coefficients */ double ISRCdcValue; /* DC and TRANSIENT value of source */ double ISRCmValue; /* Parallel multiplier */ double ISRCacPhase; /* AC phase angle */ double ISRCacMag; /* AC magnitude */ double ISRCacReal; /* AC real component */ double ISRCacImag; /* AC imaginary component */ double ISRCdF1mag; /* distortion f1 magnitude */ double ISRCdF2mag; /* distortion f2 magnitude */ double ISRCdF1phase; /* distortion f1 phase */ double ISRCdF2phase; /* distortion f2 phase */ struct trnoise_state *ISRCtrnoise_state; /* transient noise */ struct trrandom_state *ISRCtrrandom_state; /* transient random source */ /* gtri - begin - add member to hold current source value */ #ifdef XSPICE /* needed for outputting results */ double ISRCcurrent; /* current value */ #endif /* gtri - end - add member to hold current source value */ unsigned ISRCdcGiven :1 ; /* flag to indicate dc value given */ unsigned ISRCmGiven :1 ; /* flag to indicate multiplier given */ unsigned ISRCacGiven :1 ; /* flag to indicate ac keyword given */ unsigned ISRCacMGiven :1 ; /* flag to indicate ac magnitude given */ unsigned ISRCacPGiven :1 ; /* flag to indicate ac phase given */ unsigned ISRCfuncTGiven :1 ; /* flag to indicate function type given */ unsigned ISRCcoeffsGiven :1 ; /* flag to indicate function coeffs given */ unsigned ISRCdGiven :1 ; /* flag to indicate source is a distortion input */ unsigned ISRCdF1given :1 ; /* flag to indicate source is an f1 distortion input */ unsigned ISRCdF2given :1 ; /* flag to indicate source is an f2 distortion input */ } ISRCinstance ; /* per model data */ typedef struct sISRCmodel { struct GENmodel gen; #define ISRCmodType gen.GENmodType #define ISRCnextModel(inst) ((struct sISRCmodel *)((inst)->gen.GENnextModel)) #define ISRCinstances(inst) ((ISRCinstance *)((inst)->gen.GENinstances)) #define ISRCmodName gen.GENmodName } ISRCmodel; /* source types */ #ifndef PULSE_FUN_TYPES #define PULSE_FUN_TYPES enum { PULSE = 1, SINE, EXP, SFFM, PWL, AM, TRNOISE, TRRANDOM, EXTERNAL, }; #endif /* device parameters */ enum { ISRC_DC = 1, ISRC_M, ISRC_AC_MAG, ISRC_AC_PHASE, ISRC_AC, ISRC_PULSE, ISRC_SINE, ISRC_EXP, ISRC_PWL, ISRC_SFFM, ISRC_NEG_NODE, ISRC_POS_NODE, ISRC_AC_REAL, ISRC_AC_IMAG, ISRC_FCN_TYPE, ISRC_FCN_ORDER, ISRC_FCN_COEFFS, ISRC_POWER, ISRC_D_F1, ISRC_D_F2, ISRC_VOLTS, ISRC_AM, #ifdef XSPICE ISRC_CURRENT, #endif }; enum { ISRC_TRNOISE = 25, ISRC_TRRANDOM, ISRC_EXTERNAL, }; /* model parameters */ /* device questions */ /* model questions */ #include "isrcext.h" #endif /*ISRC*/ tmpk8ny_4pz/src/spicelib/devices/isrc/isrc.c0000644000175000017500000000537113546075722021235 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "isrcdefs.h" #include "ngspice/suffix.h" IFparm ISRCpTable[] = { /* parameters */ IOPP("dc", ISRC_DC, IF_REAL ,"DC value of source"), IOPPR("c", ISRC_DC, IF_REAL, "Current through current source"), IOP ( "m", ISRC_M, IF_REAL ,"Parallel multiplier"), IOPPA("acmag", ISRC_AC_MAG, IF_REAL ,"AC Magnitude"), IOPAAU("acphase", ISRC_AC_PHASE, IF_REAL ,"AC Phase"), /* Modified to allow print @Iin[sin] A.Roldan */ IOP ("pulse", ISRC_PULSE, IF_REALVEC,"Pulse description"), IOP ("sin", ISRC_SINE, IF_REALVEC,"Sinusoidal source description"), IOPR("sine", ISRC_SINE, IF_REALVEC,"Sinusoidal source description"), IOP ("exp", ISRC_EXP, IF_REALVEC,"Exponential source description"), IOP ("pwl", ISRC_PWL, IF_REALVEC,"Piecewise linear description"), IOP ("sffm", ISRC_SFFM, IF_REALVEC,"Single freq. FM description"), IOP ("am", ISRC_AM, IF_REALVEC,"Amplitude modulation description"), IOP ("trnoise", ISRC_TRNOISE, IF_REALVEC,"Transient noise description"), IOP ("trrandom", ISRC_TRRANDOM, IF_REALVEC,"random source description"), #ifdef SHARED_MODULE IOP ("external", ISRC_EXTERNAL, IF_REALVEC,"external source description"), #endif OPU ("pos_node",ISRC_POS_NODE, IF_INTEGER,"Positive node of source"), OPU ("neg_node",ISRC_NEG_NODE, IF_INTEGER,"Negative node of source"), OPU ("function",ISRC_FCN_TYPE, IF_INTEGER,"Function of the source"), OPU ("order", ISRC_FCN_ORDER, IF_INTEGER,"Order of the source function"), OPU ("coeffs", ISRC_FCN_COEFFS,IF_REALVEC,"Coefficients for the function"), OPU ("acreal", ISRC_AC_REAL, IF_REAL, "AC real part"), OPU ("acimag", ISRC_AC_IMAG, IF_REAL, "AC imaginary part"), IP ("ac", ISRC_AC, IF_REALVEC,"AC magnitude, phase vector"), OP ("v", ISRC_VOLTS, IF_REAL, "Voltage across the supply"), OP ("p", ISRC_POWER, IF_REAL, "Power supplied by the source"), /* gtri - begin - add parameter for current source value */ #ifdef XSPICE OP ("current", ISRC_CURRENT, IF_REAL, "Current in DC or Transient mode"), #endif /* gtri - end - add parameter for current source value */ IP ("distof1", ISRC_D_F1, IF_REALVEC,"f1 input for distortion"), IP ("distof2", ISRC_D_F2, IF_REALVEC,"f2 input for distortion") }; char *ISRCnames[] = { "I+", "I-" }; int ISRCnSize = NUMELEMS(ISRCnames); int ISRCpTSize = NUMELEMS(ISRCpTable); int ISRCmPTSize = 0; int ISRCiSize = sizeof(ISRCinstance); int ISRCmSize = sizeof(ISRCmodel); tmpk8ny_4pz/src/spicelib/devices/isrc/isrcacct.c0000644000175000017500000003134613546075722022071 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "isrcdefs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/missing_math.h" #include "ngspice/1-f-code.h" #ifndef HAVE_LIBFFTW3 extern void fftFree(void); #endif extern bool ft_ngdebug; /* some additional debug info printed */ #define SAMETIME(a,b) (fabs((a)-(b))<= TIMETOL * PW) #define TIMETOL 1e-7 int ISRCaccept(CKTcircuit *ckt, GENmodel *inModel) /* set up the breakpoint table. */ { ISRCmodel *model = (ISRCmodel *) inModel; ISRCinstance *here; int error; /* loop through all the voltage source models */ for( ; model != NULL; model = ISRCnextModel(model)) { /* loop through all the instances of the model */ for (here = ISRCinstances(model); here != NULL ; here=ISRCnextInstance(here)) { if(!(ckt->CKTmode & (MODETRAN | MODETRANOP))) { /* not transient, so shouldn't be here */ return(OK); } else { /* use the transient functions */ switch(here->ISRCfunctionType) { default: { /* no function specified:DC no breakpoints */ break; } case PULSE: { double TD, TR, TF, PW, PER; double tshift; double time = 0.; double basetime = 0; /* gtri - begin - wbk - add PHASE parameter */ #ifdef XSPICE double PHASE; double phase; double deltat; #endif TD = here->ISRCfunctionOrder > 2 ? here->ISRCcoeffs[2] : 0.0; TR = here->ISRCfunctionOrder > 3 && here->ISRCcoeffs[3] != 0.0 ? here->ISRCcoeffs[3] : ckt->CKTstep; TF = here->ISRCfunctionOrder > 4 && here->ISRCcoeffs[4] != 0.0 ? here->ISRCcoeffs[4] : ckt->CKTstep; PW = here->ISRCfunctionOrder > 5 && here->ISRCcoeffs[5] != 0.0 ? here->ISRCcoeffs[5] : ckt->CKTfinalTime; PER = here->ISRCfunctionOrder > 6 && here->ISRCcoeffs[6] != 0.0 ? here->ISRCcoeffs[6] : ckt->CKTfinalTime; #ifdef XSPICE PHASE = here->ISRCfunctionOrder > 7 ? here->ISRCcoeffs[7] : 0.0; #endif /* offset time by delay */ time = ckt->CKTtime - TD; tshift = TD; #ifdef XSPICE /* normalize phase to 0 - 360° */ /* normalize phase to cycles */ phase = PHASE / 360.0; phase = fmod(phase, 1.0); deltat = phase * PER; while (deltat > 0) deltat -= PER; time += deltat; tshift = TD - deltat; #endif /* gtri - end - wbk - add PHASE parameter */ if(time >= PER) { /* repeating signal - figure out where we are */ /* in period */ basetime = PER * floor(time/PER); time -= basetime; } if( time <= 0.0 || time >= TR + PW + TF) { if(ckt->CKTbreak && SAMETIME(time,0.0)) { error = CKTsetBreak(ckt,basetime + TR + tshift); if(error) return(error); } else if(ckt->CKTbreak && SAMETIME(TR+PW+TF,time) ) { error = CKTsetBreak(ckt,basetime + PER + tshift); if(error) return(error); } else if (ckt->CKTbreak && (time == -tshift) ) { error = CKTsetBreak(ckt,basetime + tshift); if(error) return(error); } else if (ckt->CKTbreak && SAMETIME(PER,time) ) { error = CKTsetBreak(ckt,basetime + tshift + TR + PER); if(error) return(error); } } else if ( time >= TR && time <= TR + PW) { if(ckt->CKTbreak && SAMETIME(time,TR) ) { error = CKTsetBreak(ckt,basetime + tshift + TR + PW); if(error) return(error); } else if(ckt->CKTbreak && SAMETIME(TR+PW,time) ) { error = CKTsetBreak(ckt,basetime + tshift + TR + PW + TF); if(error) return(error); } } else if (time > 0 && time < TR) { if(ckt->CKTbreak && SAMETIME(time,0) ) { error = CKTsetBreak(ckt,basetime + tshift + TR); if(error) return(error); } else if(ckt->CKTbreak && SAMETIME(time,TR)) { error = CKTsetBreak(ckt,basetime + tshift + TR + PW); if(error) return(error); } } else { /* time > TR + PW && < TR + PW + TF */ if(ckt->CKTbreak && SAMETIME(time,TR+PW) ) { error = CKTsetBreak(ckt,basetime + tshift+TR + PW +TF); if(error) return(error); } else if(ckt->CKTbreak && SAMETIME(time,TR+PW+TF) ) { error = CKTsetBreak(ckt,basetime + tshift + PER); if(error) return(error); } } } break; case SINE: { /* no breakpoints (yet) */ } break; case EXP: { /* no breakpoints (yet) */ } break; case SFFM:{ /* no breakpoints (yet) */ } break; case AM:{ /* no breakpoints (yet) */ } break; case PWL: { int i; if(ckt->CKTtime < *(here->ISRCcoeffs)) { if(ckt->CKTbreak) { error = CKTsetBreak(ckt,*(here->ISRCcoeffs)); break; } } for(i=0;i<(here->ISRCfunctionOrder/2)-1;i++) { if ( ckt->CKTbreak && AlmostEqualUlps(*(here->ISRCcoeffs+2*i), ckt->CKTtime, 3 ) ) { error = CKTsetBreak(ckt, *(here->ISRCcoeffs+2*i+2)); if(error) return(error); goto bkptset; } } break; } /**** tansient noise routines: INoi2 2 0 DC 0 TRNOISE(10n 0.5n 0 0n) : generate gaussian distributed noise rms value, time step, 0 0 INoi1 1 0 DC 0 TRNOISE(0n 0.5n 1 10n) : generate 1/f noise 0, time step, exponent < 2, rms value */ case TRNOISE: { struct trnoise_state *state = here -> ISRCtrnoise_state; double TS = state -> TS; double RTSAM = state ->RTSAM; if ((TS == 0.0) && (RTSAM == 0.0)) // no further breakpoint if value not given break; #ifndef HAVE_LIBFFTW3 /* FIXME, dont' want this here, over to aof_get or somesuch */ if (ckt->CKTtime == 0.0) { if (ft_ngdebug) printf("ISRC: free fft tables\n"); fftFree(); } #endif if(ckt->CKTbreak) { int n = (int) floor(ckt->CKTtime / TS + 0.5); volatile double nearest = n * TS; if(AlmostEqualUlps(nearest, ckt->CKTtime, 3)) { /* carefull calculate `next' * make sure it is really identical * with the next calculated `nearest' value */ volatile double next = (n+1) * TS; error = CKTsetBreak(ckt, next); if(error) return(error); } } if (RTSAM > 0) { double RTScapTime = state->RTScapTime; double RTSemTime = state->RTSemTime; double RTSCAPT = state->RTSCAPT; double RTSEMT = state->RTSEMT; if (ckt->CKTtime == 0) { /* initialzing here again needed for repeated calls to tran command */ state->RTScapTime = RTScapTime = exprand(RTSCAPT); state->RTSemTime = RTSemTime = RTScapTime + exprand(RTSEMT); if (ckt->CKTbreak) { error = CKTsetBreak(ckt, RTScapTime); if(error) return(error); } } if(AlmostEqualUlps(RTScapTime, ckt->CKTtime, 3)) { if (ckt->CKTbreak) { error = CKTsetBreak(ckt, RTSemTime); if(error) return(error); } } if(AlmostEqualUlps(RTSemTime, ckt->CKTtime, 3)) { /* new values */ RTScapTime = here -> ISRCtrnoise_state ->RTScapTime = ckt->CKTtime + exprand(RTSCAPT); here -> ISRCtrnoise_state ->RTSemTime = RTScapTime + exprand(RTSEMT); if (ckt->CKTbreak) { error = CKTsetBreak(ckt, RTScapTime); if(error) return(error); } } } } break; case TRRANDOM: { struct trrandom_state *state = here -> ISRCtrrandom_state; double TS = state -> TS; double TD = state -> TD; double time = ckt->CKTtime - TD; if (time < 0) break; if(ckt->CKTbreak) { int n = (int) floor(time / TS + 0.5); volatile double nearest = n * TS; if(AlmostEqualUlps(nearest, time, 3)) { /* carefully calculate `next' * make sure it is really identical * with the next calculated `nearest' value */ volatile double next = (n+1) * TS + TD; error = CKTsetBreak(ckt, next); if(error) return(error); state->value = trrandom_state_get(state); } } } break; #ifdef SHARED_MODULE case EXTERNAL: { /* no breakpoints (yet) */ } break; #endif } // switch } // if ... else bkptset: ; } // for } // for return(OK); } tmpk8ny_4pz/src/spicelib/devices/isrc/isrcacld.c0000644000175000017500000000270013546075722022052 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "isrcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int ISRCacLoad(GENmodel *inModel, CKTcircuit *ckt) { ISRCmodel *model = (ISRCmodel *) inModel; ISRCinstance *here; double m; for( ; model != NULL; model = ISRCnextModel(model)) { /* loop through all the instances of the model */ for (here = ISRCinstances(model); here != NULL ; here=ISRCnextInstance(here)) { double acReal, acImag; if (ckt->CKTmode & MODEACNOISE) { if ((GENinstance *) here == ckt->noise_input) { acReal = 1.0; acImag = 0.0; } else { acReal = 0.0; acImag = 0.0; } } else { acReal = here->ISRCacReal; acImag = here->ISRCacImag; } m = here->ISRCmValue; *(ckt->CKTrhs + (here->ISRCposNode)) += m * acReal; *(ckt->CKTrhs + (here->ISRCnegNode)) -= m * acReal; *(ckt->CKTirhs + (here->ISRCposNode)) += m * acImag; *(ckt->CKTirhs + (here->ISRCnegNode)) -= m * acImag; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/isrc/isrcload.c0000644000175000017500000004001313546075722022065 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 Alansfixes **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "isrcdefs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/1-f-code.h" #ifdef XSPICE_EXP /* gtri - begin - wbk - modify for supply ramping option */ #include "ngspice/cmproto.h" /* gtri - end - wbk - modify for supply ramping option */ #endif #ifdef SHARED_MODULE extern double getisrcval(double, char*); #endif int ISRCload(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current value into the * sparse matrix previously provided */ { ISRCmodel *model = (ISRCmodel *) inModel; ISRCinstance *here; double value; double time; double m; /* loop through all the source models */ for( ; model != NULL; model = ISRCnextModel(model)) { /* loop through all the instances of the model */ for (here = ISRCinstances(model); here != NULL ; here=ISRCnextInstance(here)) { m = here->ISRCmValue; if( (ckt->CKTmode & (MODEDCOP | MODEDCTRANCURVE)) && here->ISRCdcGiven ) { /* load using DC value */ #ifdef XSPICE_EXP /* gtri - begin - wbk - modify to process srcFact, etc. for all sources */ value = here->ISRCdcValue; #else value = here->ISRCdcValue * ckt->CKTsrcFact; #endif } else { if(ckt->CKTmode & (MODEDC)) { time = 0; } else { time = ckt->CKTtime; } /* use the transient functions */ switch(here->ISRCfunctionType) { default: #ifdef XSPICE_EXP value = here->ISRCdcValue; #else value = here->ISRCdcValue * ckt->CKTsrcFact; #endif break; case PULSE: { double V1, V2, TD, TR, TF, PW, PER; double basetime = 0; #ifdef XSPICE double PHASE; double phase; double deltat; #endif V1 = here->ISRCcoeffs[0]; V2 = here->ISRCcoeffs[1]; TD = here->ISRCfunctionOrder > 2 ? here->ISRCcoeffs[2] : 0.0; TR = here->ISRCfunctionOrder > 3 && here->ISRCcoeffs[3] != 0.0 ? here->ISRCcoeffs[3] : ckt->CKTstep; TF = here->ISRCfunctionOrder > 4 && here->ISRCcoeffs[4] != 0.0 ? here->ISRCcoeffs[4] : ckt->CKTstep; PW = here->ISRCfunctionOrder > 5 && here->ISRCcoeffs[5] != 0.0 ? here->ISRCcoeffs[5] : ckt->CKTfinalTime; PER = here->ISRCfunctionOrder > 6 && here->ISRCcoeffs[6] != 0.0 ? here->ISRCcoeffs[6] : ckt->CKTfinalTime; /* shift time by delay time TD */ time -= TD; #ifdef XSPICE /* gtri - begin - wbk - add PHASE parameter */ PHASE = here->ISRCfunctionOrder > 7 ? here->ISRCcoeffs[7] : 0.0; /* normalize phase to cycles */ phase = PHASE / 360.0; phase = fmod(phase, 1.0); deltat = phase * PER; while (deltat > 0) deltat -= PER; /* shift time by pase (neg. for pos. phase value) */ time += deltat; /* gtri - end - wbk - add PHASE parameter */ #endif if(time > PER) { /* repeating signal - figure out where we are */ /* in period */ basetime = PER * floor(time/PER); time -= basetime; } if (time <= 0 || time >= TR + PW + TF) { value = V1; } else if (time >= TR && time <= TR + PW) { value = V2; } else if (time > 0 && time < TR) { value = V1 + (V2 - V1) * (time) / TR; } else { /* time > TR + PW && < TR + PW + TF */ value = V2 + (V1 - V2) * (time - (TR + PW)) / TF; } } break; case SINE: { double VO, VA, FREQ, TD, THETA; /* gtri - begin - wbk - add PHASE parameter */ #ifdef XSPICE double PHASE; double phase; PHASE = here->ISRCfunctionOrder > 5 ? here->ISRCcoeffs[5] : 0.0; /* compute phase in radians */ phase = PHASE * M_PI / 180.0; #endif VO = here->ISRCcoeffs[0]; VA = here->ISRCcoeffs[1]; FREQ = here->ISRCfunctionOrder > 2 && here->ISRCcoeffs[2] != 0.0 ? here->ISRCcoeffs[2] : (1/ckt->CKTfinalTime); TD = here->ISRCfunctionOrder > 3 ? here->ISRCcoeffs[3] : 0.0; THETA = here->ISRCfunctionOrder > 4 ? here->ISRCcoeffs[4] : 0.0; time -= TD; if (time <= 0) { #ifdef XSPICE value = VO + VA * sin(phase); } else { value = VO + VA * sin(FREQ*time * 2.0 * M_PI + phase) * exp(-time*THETA); #else value = VO; } else { value = VO + VA * sin(FREQ * time * 2.0 * M_PI) * exp(-time*THETA); #endif /* gtri - end - wbk - add PHASE parameter */ } } break; case EXP: { double V1, V2, TD1, TD2, TAU1, TAU2; V1 = here->ISRCcoeffs[0]; V2 = here->ISRCcoeffs[1]; TD1 = here->ISRCfunctionOrder > 2 && here->ISRCcoeffs[2] != 0.0 ? here->ISRCcoeffs[2] : ckt->CKTstep; TAU1 = here->ISRCfunctionOrder > 3 && here->ISRCcoeffs[3] != 0.0 ? here->ISRCcoeffs[3] : ckt->CKTstep; TD2 = here->ISRCfunctionOrder > 4 && here->ISRCcoeffs[4] != 0.0 ? here->ISRCcoeffs[4] : TD1 + ckt->CKTstep; TAU2 = here->ISRCfunctionOrder > 5 && here->ISRCcoeffs[5] ? here->ISRCcoeffs[5] : ckt->CKTstep; if(time <= TD1) { value = V1; } else if (time <= TD2) { value = V1 + (V2-V1)*(1-exp(-(time-TD1)/TAU1)); } else { value = V1 + (V2-V1)*(1-exp(-(time-TD1)/TAU1)) + (V1-V2)*(1-exp(-(time-TD2)/TAU2)) ; } } break; case SFFM: { double VO, VA, FC, MDI, FS; /* gtri - begin - wbk - add PHASE parameters */ #ifdef XSPICE double PHASEC, PHASES; double phasec; double phases; PHASEC = here->ISRCfunctionOrder > 5 ? here->ISRCcoeffs[5] : 0.0; PHASES = here->ISRCfunctionOrder > 6 ? here->ISRCcoeffs[6] : 0.0; /* compute phases in radians */ phasec = PHASEC * M_PI / 180.0; phases = PHASES * M_PI / 180.0; #endif VO = here->ISRCcoeffs[0]; VA = here->ISRCcoeffs[1]; FC = here->ISRCfunctionOrder > 2 && here->ISRCcoeffs[2] ? here->ISRCcoeffs[2] : (1/ckt->CKTfinalTime); MDI = here->ISRCfunctionOrder > 3 ? here->ISRCcoeffs[3] : 0.0; FS = here->ISRCfunctionOrder > 4 && here->ISRCcoeffs[4] ? here->ISRCcoeffs[4] : (1/ckt->CKTfinalTime); #ifdef XSPICE /* compute waveform value */ value = VO + VA * sin((2.0 * M_PI * FC * time + phasec) + MDI * sin(2.0 * M_PI * FS * time + phases)); #else value = VO + VA * sin((2.0 * M_PI * FC * time) + MDI * sin(2.0 * M_PI * FS * time)); #endif /* gtri - end - wbk - add PHASE parameters */ } break; case AM: { double VA, FC, MF, VO, TD; /* gtri - begin - wbk - add PHASE parameters */ #ifdef XSPICE double PHASEC, PHASES; double phasec; double phases; PHASEC = here->ISRCfunctionOrder > 5 ? here->ISRCcoeffs[5] : 0.0; PHASES = here->ISRCfunctionOrder > 6 ? here->ISRCcoeffs[6] : 0.0; /* compute phases in radians */ phasec = PHASEC * M_PI / 180.0; phases = PHASES * M_PI / 180.0; #endif VA = here->ISRCcoeffs[0]; VO = here->ISRCcoeffs[1]; MF = here->ISRCfunctionOrder > 2 && here->ISRCcoeffs[2] ? here->ISRCcoeffs[2] : (1/ckt->CKTfinalTime); FC = here->ISRCfunctionOrder > 3 ? here->ISRCcoeffs[3] : 0.0; TD = here->ISRCfunctionOrder > 4 && here->ISRCcoeffs[4] ? here->ISRCcoeffs[4] : 0.0; time -= TD; if (time <= 0) { value = 0; } else { #ifdef XSPICE /* compute waveform value */ value = VA * (VO + sin(2.0 * M_PI * MF * time + phases )) * sin(2.0 * M_PI * FC * time + phases); #else value = VA * (VO + sin(2.0 * M_PI * MF * time)) * sin(2.0 * M_PI * FC * time); #endif } /* gtri - end - wbk - add PHASE parameters */ } break; case PWL: { int i; if(time < *(here->ISRCcoeffs)) { value = *(here->ISRCcoeffs + 1) ; break; } for(i=0; i < (here->ISRCfunctionOrder / 2) - 1; i++) { if((*(here->ISRCcoeffs+2*i)==time)) { value = *(here->ISRCcoeffs+2*i+1); goto loadDone; } if((*(here->ISRCcoeffs+2*i)ISRCcoeffs+2*(i+1)) >time)) { value = *(here->ISRCcoeffs+2*i+1) + (((time-*(here->ISRCcoeffs+2*i))/ (*(here->ISRCcoeffs+2*(i+1)) - *(here->ISRCcoeffs+2*i))) * (*(here->ISRCcoeffs+2*i+3) - *(here->ISRCcoeffs+2*i+1))); goto loadDone; } } value = *(here->ISRCcoeffs+ here->ISRCfunctionOrder-1) ; break; } /**** tansient noise routines: INoi2 2 0 DC 0 TRNOISE(10n 0.5n 0 0n) : generate gaussian distributed noise rms value, time step, 0 0 INoi1 1 0 DC 0 TRNOISE(0n 0.5n 1 10n) : generate 1/f noise 0, time step, exponent < 2, rms value */ case TRNOISE: { struct trnoise_state *state = here -> ISRCtrnoise_state; double TS = state -> TS; double RTSAM = state->RTSAM; /* reset top (hack for repeated tran commands) when there is the jump from time=0 to time>0 */ if (time == 0.0) state->timezero = TRUE; else if (state->timezero) { state->top = 0; state->timezero = FALSE; } /* no noise or time == 0 */ if (TS == 0.0 || time == 0.0) { value = 0.0; } else { /* 1/f and white noise */ size_t n1 = (size_t)floor(time / TS); double V1 = trnoise_state_get(state, ckt, n1); double V2 = trnoise_state_get(state, ckt, n1 + 1); value = V1 + (V2 - V1) * (time / TS - (double)n1); } /* RTS noise */ if (RTSAM > 0) { double RTScapTime = state->RTScapTime; if (time >= RTScapTime) value += RTSAM; } /* DC value */ if(here -> ISRCdcGiven) value += here->ISRCdcValue; } break; case TRRANDOM: { struct trrandom_state *state = here -> ISRCtrrandom_state; value = state -> value; /* DC value */ if(here -> ISRCdcGiven) value += here->ISRCdcValue; } break; #ifdef SHARED_MODULE case EXTERNAL: { value = getisrcval(time, here->ISRCname); if(here -> ISRCdcGiven) value += here->ISRCdcValue; } break; #endif } // switch } // else (line 48) loadDone: /* gtri - begin - wbk - modify for supply ramping option */ #ifdef XSPICE_EXP value *= ckt->CKTsrcFact; value *= cm_analog_ramp_factor(); #else if (ckt->CKTmode & MODETRANOP) value *= ckt->CKTsrcFact; #endif /* gtri - end - wbk - modify for supply ramping option */ *(ckt->CKTrhs + (here->ISRCposNode)) += m * value; *(ckt->CKTrhs + (here->ISRCnegNode)) -= m * value; /* gtri - end - wbk - modify to process srcFact, etc. for all sources */ #ifdef XSPICE /* gtri - begin - wbk - record value so it can be output if requested */ here->ISRCcurrent = m * value; /* gtri - end - wbk - record value so it can be output if requested */ #endif } // for loop instances } // for loop models return(OK); } tmpk8ny_4pz/src/spicelib/devices/isrc/isrcitf.h0000644000175000017500000000026713546075722021744 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_ISRC #define DEV_ISRC extern SPICEdev *get_isrc_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/isrc/isrcask.c0000644000175000017500000000615013546075722021730 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles **********/ /* */ /* * This routine gives access to the internal device parameters * of independent current SouRCe */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "isrcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int ISRCask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { ISRCinstance *here = (ISRCinstance*)inst; static char *msg = "Current and power not available in ac analysis"; int temp; double *v, *w; NG_IGNORE(select); switch(which) { case ISRC_DC: value->rValue = here->ISRCdcValue; return (OK); case ISRC_M: value->rValue = here->ISRCmValue; return (OK); case ISRC_AC_MAG: value->rValue = here->ISRCacMag; return (OK); case ISRC_AC_PHASE: value->rValue = here->ISRCacPhase; return (OK); case ISRC_PULSE: case ISRC_SINE: case ISRC_EXP: case ISRC_PWL: case ISRC_SFFM: case ISRC_AM: case ISRC_TRNOISE: case ISRC_TRRANDOM: case ISRC_FCN_COEFFS: temp = value->v.numValue = here->ISRCfunctionOrder; v = value->v.vec.rVec = TMALLOC(double, here->ISRCfunctionOrder); w = here->ISRCcoeffs; while (temp--) *v++ = *w++; return (OK); case ISRC_NEG_NODE: value->iValue = here->ISRCnegNode; return (OK); case ISRC_POS_NODE: value->iValue = here->ISRCposNode; return (OK); case ISRC_FCN_TYPE: value->iValue = here->ISRCfunctionType; return (OK); case ISRC_AC_REAL: value->rValue = here->ISRCacReal; return (OK); case ISRC_AC_IMAG: value->rValue = here->ISRCacImag; return (OK); case ISRC_FCN_ORDER: value->rValue = here->ISRCfunctionOrder; return (OK); case ISRC_VOLTS: value->rValue = (*(ckt->CKTrhsOld + here->ISRCposNode) - *(ckt->CKTrhsOld + here->ISRCnegNode)); return(OK); case ISRC_POWER: if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "ISRCask"; strcpy(errMsg,msg); return(E_ASKPOWER); } else { value->rValue = -here->ISRCdcValue * (*(ckt->CKTrhsOld + here->ISRCposNode) - *(ckt->CKTrhsOld + here->ISRCnegNode)); } return(OK); /* gtri - begin - add current value information */ #ifdef XSPICE case ISRC_CURRENT: value->rValue = here->ISRCcurrent; return (OK); #endif /* gtri - end - add current value information */ default: return (E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/isrc/isrcinit.c0000644000175000017500000000307113546075722022114 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "isrcitf.h" #include "isrcext.h" #include "isrcinit.h" SPICEdev ISRCinfo = { .DEVpublic = { .name = "Isource", .description = "Independent current source", .terms = &ISRCnSize, .numNames = &ISRCnSize, .termNames = ISRCnames, .numInstanceParms = &ISRCpTSize, .instanceParms = ISRCpTable, .numModelParms = NULL, .modelParms = NULL, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = ISRCparam, .DEVmodParam = NULL, .DEVload = ISRCload, .DEVsetup = NULL, .DEVunsetup = NULL, .DEVpzSetup = NULL, .DEVtemperature = ISRCtemp, .DEVtrunc = NULL, .DEVfindBranch = NULL, .DEVacLoad = ISRCacLoad, .DEVaccept = ISRCaccept, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = ISRCdelete, .DEVsetic = NULL, .DEVask = ISRCask, .DEVmodAsk = NULL, .DEVpzLoad = NULL, .DEVconvTest = NULL, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &ISRCiSize, .DEVmodSize = &ISRCmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_isrc_info(void) { return &ISRCinfo; } tmpk8ny_4pz/src/spicelib/devices/isrc/isrcpar.c0000644000175000017500000001747313546075722021746 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "isrcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/1-f-code.h" static void copy_coeffs(ISRCinstance *here, IFvalue *value) { int n = value->v.numValue; if(here->ISRCcoeffs) tfree(here->ISRCcoeffs); here->ISRCcoeffs = TMALLOC(double, n); here->ISRCfunctionOrder = n; here->ISRCcoeffsGiven = TRUE; memcpy(here->ISRCcoeffs, value->v.vec.rVec, (size_t) n * sizeof(double)); } /* ARGSUSED */ int ISRCparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { int i; ISRCinstance *here = (ISRCinstance *) inst; NG_IGNORE(select); switch(param) { case ISRC_DC: here->ISRCdcValue = value->rValue; here->ISRCdcGiven = TRUE; break; case ISRC_M: here->ISRCmValue = value->rValue; here->ISRCmGiven = TRUE; break; case ISRC_AC_MAG: here->ISRCacMag = value->rValue; here->ISRCacMGiven = TRUE; here->ISRCacGiven = TRUE; break; case ISRC_AC_PHASE: here->ISRCacPhase = value->rValue; here->ISRCacPGiven = TRUE; here->ISRCacGiven = TRUE; break; case ISRC_AC: switch(value->v.numValue) { case 2: here->ISRCacPhase = *(value->v.vec.rVec+1); here->ISRCacPGiven = TRUE; case 1: here->ISRCacMag = *(value->v.vec.rVec); here->ISRCacMGiven = TRUE; case 0: here->ISRCacGiven = TRUE; break; default: return(E_BADPARM); } break; case ISRC_PULSE: if(value->v.numValue < 2) return(E_BADPARM); here->ISRCfunctionType = PULSE; here->ISRCfuncTGiven = TRUE; copy_coeffs(here, value); break; case ISRC_SINE: if(value->v.numValue < 2) return(E_BADPARM); here->ISRCfunctionType = SINE; here->ISRCfuncTGiven = TRUE; copy_coeffs(here, value); break; case ISRC_EXP: if(value->v.numValue < 2) return(E_BADPARM); here->ISRCfunctionType = EXP; here->ISRCfuncTGiven = TRUE; copy_coeffs(here, value); break; case ISRC_PWL: if(value->v.numValue < 2) return(E_BADPARM); here->ISRCfunctionType = PWL; here->ISRCfuncTGiven = TRUE; copy_coeffs(here, value); for (i=0; i<(here->ISRCfunctionOrder/2)-1; i++) { if (*(here->ISRCcoeffs+2*(i+1))<=*(here->ISRCcoeffs+2*i)) { fprintf(stderr, "Warning : current source %s", here->ISRCname); fprintf(stderr, " has non-increasing PWL time points.\n"); } } break; case ISRC_SFFM: if(value->v.numValue < 2) return(E_BADPARM); here->ISRCfunctionType = SFFM; here->ISRCfuncTGiven = TRUE; copy_coeffs(here, value); break; case ISRC_AM: if(value->v.numValue < 2) return(E_BADPARM); here->ISRCfunctionType = AM; here->ISRCfuncTGiven = TRUE; copy_coeffs(here, value); break; case ISRC_D_F1: here->ISRCdF1given = TRUE; here->ISRCdGiven = TRUE; switch(value->v.numValue) { case 2: here->ISRCdF1phase = *(value->v.vec.rVec+1); here->ISRCdF1mag = *(value->v.vec.rVec); break; case 1: here->ISRCdF1mag = *(value->v.vec.rVec); here->ISRCdF1phase = 0.0; break; case 0: here->ISRCdF1mag = 1.0; here->ISRCdF1phase = 0.0; break; default: return(E_BADPARM); } break; case ISRC_D_F2: here->ISRCdF2given = TRUE; here->ISRCdGiven = TRUE; switch(value->v.numValue) { case 2: here->ISRCdF2phase = *(value->v.vec.rVec+1); here->ISRCdF2mag = *(value->v.vec.rVec); break; case 1: here->ISRCdF2mag = *(value->v.vec.rVec); here->ISRCdF2phase = 0.0; break; case 0: here->ISRCdF2mag = 1.0; here->ISRCdF2phase = 0.0; break; default: return(E_BADPARM); } break; case ISRC_TRNOISE: { double NA, TS; double NALPHA = 0.0; double NAMP = 0.0; double RTSAM = 0.0; double RTSCAPT = 0.0; double RTSEMT = 0.0; here->ISRCfunctionType = TRNOISE; here->ISRCfuncTGiven = TRUE; copy_coeffs(here, value); NA = here->ISRCcoeffs[0]; // input is rms value TS = here->ISRCcoeffs[1]; // time step if (here->ISRCfunctionOrder > 2) NALPHA = here->ISRCcoeffs[2]; // 1/f exponent if (here->ISRCfunctionOrder > 3 && NALPHA != 0.0) NAMP = here->ISRCcoeffs[3]; // 1/f amplitude if (here->ISRCfunctionOrder > 4) RTSAM = here->ISRCcoeffs[4]; // RTS amplitude if (here->ISRCfunctionOrder > 5 && RTSAM != 0.0) RTSCAPT = here->ISRCcoeffs[5]; // RTS trap capture time if (here->ISRCfunctionOrder > 6 && RTSAM != 0.0) RTSEMT = here->ISRCcoeffs[6]; // RTS trap emission time /* after an 'alter' command to the TRNOISE voltage source the state gets re-written with the new parameters. So free the old state first. */ trnoise_state_free(here->ISRCtrnoise_state); here->ISRCtrnoise_state = trnoise_state_init(NA, TS, NALPHA, NAMP, RTSAM, RTSCAPT, RTSEMT); } break; case ISRC_TRRANDOM: { double TD = 0.0, TS; int rndtype = 1; double PARAM1 = 1.0; double PARAM2 = 0.0; here->ISRCfunctionType = TRRANDOM; here->ISRCfuncTGiven = TRUE; copy_coeffs(here, value); rndtype = (int)here->ISRCcoeffs[0]; // type of random function TS = here->ISRCcoeffs[1]; // time step if (here->ISRCfunctionOrder > 2) TD = here->ISRCcoeffs[2]; // delay if (here->ISRCfunctionOrder > 3) PARAM1 = here->ISRCcoeffs[3]; // first parameter if (here->ISRCfunctionOrder > 4) PARAM2 = here->ISRCcoeffs[4]; // second parameter /* after an 'alter' command to the TRRANDOM voltage source the state gets re-written with the new parameters. So free the old state first. */ tfree(here->ISRCtrrandom_state); here->ISRCtrrandom_state = trrandom_state_init(rndtype, TS, TD, PARAM1, PARAM2); } break; #ifdef SHARED_MODULE case ISRC_EXTERNAL: { here->ISRCfunctionType = EXTERNAL; here->ISRCfuncTGiven = TRUE; /* no coefficients copy_coeffs(here, value); */ } break; #endif default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos6/0000755000175000017500000000000013546075722020047 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/mos6/mos6trun.c0000644000175000017500000000135413546075722022013 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Takayasu Sakurai **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos6defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS6trunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { MOS6model *model = (MOS6model *)inModel; MOS6instance *here; for( ; model != NULL; model = MOS6nextModel(model)) { for(here=MOS6instances(model);here!=NULL;here = MOS6nextInstance(here)){ CKTterr(here->MOS6qgs,ckt,timeStep); CKTterr(here->MOS6qgd,ckt,timeStep); CKTterr(here->MOS6qgb,ckt,timeStep); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos6/mos6ic.c0000644000175000017500000000245213546075722021416 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Takayasu Sakurai **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos6defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS6getic(GENmodel *inModel, CKTcircuit *ckt) { MOS6model *model = (MOS6model *)inModel; MOS6instance *here; /* * grab initial conditions out of rhs array. User specified, so use * external nodes to get values */ for( ; model ; model = MOS6nextModel(model)) { for(here = MOS6instances(model); here ; here = MOS6nextInstance(here)) { if(!here->MOS6icVBSGiven) { here->MOS6icVBS = *(ckt->CKTrhs + here->MOS6bNode) - *(ckt->CKTrhs + here->MOS6sNode); } if(!here->MOS6icVDSGiven) { here->MOS6icVDS = *(ckt->CKTrhs + here->MOS6dNode) - *(ckt->CKTrhs + here->MOS6sNode); } if(!here->MOS6icVGSGiven) { here->MOS6icVGS = *(ckt->CKTrhs + here->MOS6gNode) - *(ckt->CKTrhs + here->MOS6sNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos6/Makefile.am0000644000175000017500000000071013546075722022101 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libmos6.la libmos6_la_SOURCES = \ mos6.c \ mos6ask.c \ mos6conv.c \ mos6defs.h \ mos6del.c \ mos6ext.h \ mos6ic.c \ mos6init.c \ mos6init.h \ mos6itf.h \ mos6load.c \ mos6mask.c \ mos6mpar.c \ mos6par.c \ mos6set.c \ mos6temp.c \ mos6trun.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/mos6/mos6set.c0000644000175000017500000002022113546075722021610 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Takayasu Sakurai Modified: 2000 AlansFixes **********/ /* load the MOS6 device structure with those pointers needed later * for fast matrix loading */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mos6defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS6setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { MOS6model *model = (MOS6model *)inModel; MOS6instance *here; int error; CKTnode *tmp; /* loop through all the MOS6 device models */ for( ; model != NULL; model = MOS6nextModel(model)) { if(!model->MOS6typeGiven) { model->MOS6type = NMOS; } if(!model->MOS6latDiffGiven) { model->MOS6latDiff = 0; } if(!model->MOS6jctSatCurDensityGiven) { model->MOS6jctSatCurDensity = 0; } if(!model->MOS6jctSatCurGiven) { model->MOS6jctSatCur = 1e-14; } if(!model->MOS6kvGiven) { model->MOS6kv = 2; } if(!model->MOS6nvGiven) { model->MOS6nv = 0.5; } if(!model->MOS6kcGiven) { model->MOS6kc = 5e-5; } if(!model->MOS6ncGiven) { model->MOS6nc = 1; } if(!model->MOS6nvthGiven) { model->MOS6nvth = 0.5; } if(!model->MOS6psGiven) { model->MOS6ps = 0; } if(!model->MOS6gateSourceOverlapCapFactorGiven) { model->MOS6gateSourceOverlapCapFactor = 0; } if(!model->MOS6gateDrainOverlapCapFactorGiven) { model->MOS6gateDrainOverlapCapFactor = 0; } if(!model->MOS6gateBulkOverlapCapFactorGiven) { model->MOS6gateBulkOverlapCapFactor = 0; } if(!model->MOS6vt0Given) { model->MOS6vt0 = 0; } if(!model->MOS6bulkCapFactorGiven) { model->MOS6bulkCapFactor = 0; } if(!model->MOS6sideWallCapFactorGiven) { model->MOS6sideWallCapFactor = 0; } if(!model->MOS6bulkJctPotentialGiven) { model->MOS6bulkJctPotential = .8; } if(!model->MOS6bulkJctBotGradingCoeffGiven) { model->MOS6bulkJctBotGradingCoeff = .5; } if(!model->MOS6bulkJctSideGradingCoeffGiven) { model->MOS6bulkJctSideGradingCoeff = .5; } if(!model->MOS6fwdCapDepCoeffGiven) { model->MOS6fwdCapDepCoeff = .5; } if(!model->MOS6phiGiven) { model->MOS6phi = .6; } if(!model->MOS6lamda0Given) { model->MOS6lamda0 = 0; if(model->MOS6lambdaGiven) { model->MOS6lamda0 = model->MOS6lambda; } } if(!model->MOS6lamda1Given) { model->MOS6lamda1 = 0; } if(!model->MOS6sigmaGiven) { model->MOS6sigma = 0; } if(!model->MOS6gammaGiven) { model->MOS6gamma = 0; } if(!model->MOS6gamma1Given) { model->MOS6gamma1 = 0; } /* loop through all the instances of the model */ for (here = MOS6instances(model); here != NULL ; here=MOS6nextInstance(here)) { CKTnode *tmpNode; IFuid tmpName; if(!here->MOS6drainPerimiterGiven) { here->MOS6drainPerimiter = 0; } if(!here->MOS6icVBSGiven) { here->MOS6icVBS = 0; } if(!here->MOS6icVDSGiven) { here->MOS6icVDS = 0; } if(!here->MOS6icVGSGiven) { here->MOS6icVGS = 0; } if(!here->MOS6sourcePerimiterGiven) { here->MOS6sourcePerimiter = 0; } if(!here->MOS6vdsatGiven) { here->MOS6vdsat = 0; } if(!here->MOS6vonGiven) { here->MOS6von = 0; } if(!here->MOS6mGiven) { here->MOS6m = 1; } /* allocate a chunk of the state vector */ here->MOS6states = *states; *states += MOS6numStates; if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN) ){ *states += MOS6numSenStates * (ckt->CKTsenInfo->SENparms); } if((model->MOS6drainResistance != 0 || (model->MOS6sheetResistance != 0 && here->MOS6drainSquares != 0) )) { if (here->MOS6dNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->MOS6name,"drain"); if(error) return(error); here->MOS6dNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->MOS6dNodePrime = here->MOS6dNode; } if((model->MOS6sourceResistance != 0 || (model->MOS6sheetResistance != 0 && here->MOS6sourceSquares != 0) )) { if (here->MOS6sNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->MOS6name,"source"); if(error) return(error); here->MOS6sNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->MOS6sNodePrime = here->MOS6sNode; } /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(MOS6DdPtr,MOS6dNode,MOS6dNode); TSTALLOC(MOS6GgPtr,MOS6gNode,MOS6gNode); TSTALLOC(MOS6SsPtr,MOS6sNode,MOS6sNode); TSTALLOC(MOS6BbPtr,MOS6bNode,MOS6bNode); TSTALLOC(MOS6DPdpPtr,MOS6dNodePrime,MOS6dNodePrime); TSTALLOC(MOS6SPspPtr,MOS6sNodePrime,MOS6sNodePrime); TSTALLOC(MOS6DdpPtr,MOS6dNode,MOS6dNodePrime); TSTALLOC(MOS6GbPtr,MOS6gNode,MOS6bNode); TSTALLOC(MOS6GdpPtr,MOS6gNode,MOS6dNodePrime); TSTALLOC(MOS6GspPtr,MOS6gNode,MOS6sNodePrime); TSTALLOC(MOS6SspPtr,MOS6sNode,MOS6sNodePrime); TSTALLOC(MOS6BdpPtr,MOS6bNode,MOS6dNodePrime); TSTALLOC(MOS6BspPtr,MOS6bNode,MOS6sNodePrime); TSTALLOC(MOS6DPspPtr,MOS6dNodePrime,MOS6sNodePrime); TSTALLOC(MOS6DPdPtr,MOS6dNodePrime,MOS6dNode); TSTALLOC(MOS6BgPtr,MOS6bNode,MOS6gNode); TSTALLOC(MOS6DPgPtr,MOS6dNodePrime,MOS6gNode); TSTALLOC(MOS6SPgPtr,MOS6sNodePrime,MOS6gNode); TSTALLOC(MOS6SPsPtr,MOS6sNodePrime,MOS6sNode); TSTALLOC(MOS6DPbPtr,MOS6dNodePrime,MOS6bNode); TSTALLOC(MOS6SPbPtr,MOS6sNodePrime,MOS6bNode); TSTALLOC(MOS6SPdpPtr,MOS6sNodePrime,MOS6dNodePrime); } } return(OK); } int MOS6unsetup(GENmodel *inModel, CKTcircuit *ckt) { MOS6model *model; MOS6instance *here; for (model = (MOS6model *)inModel; model != NULL; model = MOS6nextModel(model)) { for (here = MOS6instances(model); here != NULL; here=MOS6nextInstance(here)) { if (here->MOS6sNodePrime > 0 && here->MOS6sNodePrime != here->MOS6sNode) CKTdltNNum(ckt, here->MOS6sNodePrime); here->MOS6sNodePrime= 0; if (here->MOS6dNodePrime > 0 && here->MOS6dNodePrime != here->MOS6dNode) CKTdltNNum(ckt, here->MOS6dNodePrime); here->MOS6dNodePrime= 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/mos6/ChangeLog0000644000175000017500000000026713546075722021626 0ustar carstencarsten1999-08-20 Paolo Nenzi * mos6itf.h: added patch to the interface code. The patch was downloaded from ftp://ftp.mpce.mq.edu.au/pub/elec/spice/patches tmpk8ny_4pz/src/spicelib/devices/mos6/mos6.c0000644000175000017500000002326313546075722021105 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Takayasu Sakurai **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "mos6defs.h" #include "ngspice/suffix.h" IFparm MOS6pTable[] = { /* parameters */ IOPU("l", MOS6_L, IF_REAL , "Length"), IOPU("w", MOS6_W, IF_REAL , "Width"), IOPU("m", MOS6_M, IF_REAL , "Parallel Multiplier"), IOPU("ad", MOS6_AD, IF_REAL , "Drain area"), IOPU("as", MOS6_AS, IF_REAL , "Source area"), IOPU("pd", MOS6_PD, IF_REAL , "Drain perimeter"), IOPU("ps", MOS6_PS, IF_REAL , "Source perimeter"), OP( "id", MOS6_CD, IF_REAL, "Drain current"), OPR( "cd", MOS6_CD, IF_REAL, "Drain current"), OP( "is", MOS6_CS, IF_REAL, "Source current"), OP( "ig", MOS6_CG, IF_REAL, "Gate current "), OP( "ib", MOS6_CB, IF_REAL, "Bulk current "), OP( "ibs", MOS6_CBS, IF_REAL, "B-S junction capacitance"), OP( "ibd", MOS6_CBD, IF_REAL, "B-D junction capacitance"), OP( "vgs", MOS6_VGS, IF_REAL, "Gate-Source voltage"), OP( "vds", MOS6_VDS, IF_REAL, "Drain-Source voltage"), OP( "vbs", MOS6_VBS, IF_REAL, "Bulk-Source voltage"), OPU( "vbd", MOS6_VBD, IF_REAL, "Bulk-Drain voltage"), IOPU("nrd", MOS6_NRD, IF_REAL , "Drain squares"), IOPU("nrs", MOS6_NRS, IF_REAL , "Source squares"), IP("off", MOS6_OFF, IF_FLAG , "Device initially off"), IOPAU("icvds", MOS6_IC_VDS, IF_REAL , "Initial D-S voltage"), IOPAU("icvgs", MOS6_IC_VGS, IF_REAL , "Initial G-S voltage"), IOPAU("icvbs", MOS6_IC_VBS, IF_REAL , "Initial B-S voltage"), IOPU("temp", MOS6_TEMP, IF_REAL, "Instance temperature"), IOPU("dtemp", MOS6_DTEMP, IF_REAL, "Instance temperature difference"), IP( "ic", MOS6_IC, IF_REALVEC, "Vector of D-S, G-S, B-S voltages"), IP( "sens_l", MOS6_L_SENS, IF_FLAG, "flag to request sensitivity WRT length"), IP( "sens_w", MOS6_W_SENS, IF_FLAG, "flag to request sensitivity WRT width"), /* OP( "cgs", MOS6_CGS, IF_REAL , "Gate-Source capacitance"), OP( "cgd", MOS6_CGD, IF_REAL , "Gate-Drain capacitance"), */ OPU( "dnode", MOS6_DNODE, IF_INTEGER, "Number of the drain node "), OPU( "gnode", MOS6_GNODE, IF_INTEGER, "Number of the gate node "), OPU( "snode", MOS6_SNODE, IF_INTEGER, "Number of the source node "), OPU( "bnode", MOS6_BNODE, IF_INTEGER, "Number of the node "), OPU( "dnodeprime", MOS6_DNODEPRIME, IF_INTEGER, "Number of int. drain node"), OPU( "snodeprime", MOS6_SNODEPRIME, IF_INTEGER, "Number of int. source node "), OP( "rs", MOS6_SOURCERESIST, IF_REAL, "Source resistance"), OPU("sourceconductance", MOS6_SOURCECONDUCT, IF_REAL, "Source conductance"), OP( "rd", MOS6_DRAINRESIST, IF_REAL, "Drain resistance"), OPU( "drainconductance", MOS6_DRAINCONDUCT, IF_REAL, "Drain conductance"), OP( "von", MOS6_VON, IF_REAL, "Turn-on voltage"), OP( "vdsat", MOS6_VDSAT, IF_REAL, "Saturation drain voltage"), OPU( "sourcevcrit", MOS6_SOURCEVCRIT,IF_REAL, "Critical source voltage"), OPU( "drainvcrit", MOS6_DRAINVCRIT, IF_REAL, "Critical drain voltage"), OP( "gmbs", MOS6_GMBS, IF_REAL, "Bulk-Source transconductance"), OP( "gm", MOS6_GM, IF_REAL, "Transconductance"), OP( "gds", MOS6_GDS, IF_REAL, "Drain-Source conductance"), OP( "gbd", MOS6_GBD, IF_REAL, "Bulk-Drain conductance"), OP( "gbs", MOS6_GBS, IF_REAL, "Bulk-Source conductance"), OP( "cgs", MOS6_CAPGS, IF_REAL, "Gate-Source capacitance"), OP( "cgd", MOS6_CAPGD, IF_REAL, "Gate-Drain capacitance"), OP( "cgb", MOS6_CAPGB, IF_REAL, "Gate-Bulk capacitance"), OP( "cbd", MOS6_CAPBD, IF_REAL, "Bulk-Drain capacitance"), OP( "cbs", MOS6_CAPBS, IF_REAL, "Bulk-Source capacitance"), OP( "cbd0", MOS6_CAPZEROBIASBD, IF_REAL, "Zero-Bias B-D junction capacitance"), OP( "cbdsw0", MOS6_CAPZEROBIASBDSW, IF_REAL, " "), OP( "cbs0", MOS6_CAPZEROBIASBS, IF_REAL, "Zero-Bias B-S junction capacitance"), OP( "cbssw0", MOS6_CAPZEROBIASBSSW, IF_REAL, " "), OPU( "cqgs",MOS6_CQGS,IF_REAL,"Capacitance due to gate-source charge storage"), OPU( "cqgd",MOS6_CQGD,IF_REAL,"Capacitance due to gate-drain charge storage"), OPU( "cqgb",MOS6_CQGB,IF_REAL,"Capacitance due to gate-bulk charge storage"), OPU( "cqbd",MOS6_CQBD,IF_REAL,"Capacitance due to bulk-drain charge storage"), OPU( "cqbs",MOS6_CQBS,IF_REAL,"Capacitance due to bulk-source charge storage"), OPU( "qgs", MOS6_QGS, IF_REAL, "Gate-Source charge storage"), OPU( "qgd", MOS6_QGD, IF_REAL, "Gate-Drain charge storage"), OPU( "qgb", MOS6_QGB, IF_REAL, "Gate-Bulk charge storage"), OPU( "qbd", MOS6_QBD, IF_REAL, "Bulk-Drain charge storage"), OPU( "qbs", MOS6_QBS, IF_REAL, "Bulk-Source charge storage"), OPU( "p", MOS6_POWER, IF_REAL, "Instaneous power"), OPU( "sens_l_dc", MOS6_L_SENS_DC, IF_REAL, "dc sensitivity wrt length"), OPU( "sens_l_real", MOS6_L_SENS_REAL,IF_REAL, "real part of ac sensitivity wrt length"), OPU( "sens_l_imag", MOS6_L_SENS_IMAG,IF_REAL, "imag part of ac sensitivity wrt length"), OPU( "sens_l_mag", MOS6_L_SENS_MAG, IF_REAL, "sensitivity wrt l of ac magnitude"), OPU( "sens_l_ph", MOS6_L_SENS_PH, IF_REAL, "sensitivity wrt l of ac phase"), OPU( "sens_l_cplx", MOS6_L_SENS_CPLX,IF_COMPLEX, "ac sensitivity wrt length"), OPU( "sens_w_dc", MOS6_W_SENS_DC, IF_REAL, "dc sensitivity wrt width"), OPU( "sens_w_real", MOS6_W_SENS_REAL,IF_REAL, "real part of ac sensitivity wrt width"), OPU( "sens_w_imag", MOS6_W_SENS_IMAG,IF_REAL, "imag part of ac sensitivity wrt width"), OPU( "sens_w_mag", MOS6_W_SENS_MAG, IF_REAL, "sensitivity wrt w of ac magnitude"), OPU( "sens_w_ph", MOS6_W_SENS_PH, IF_REAL, "sensitivity wrt w of ac phase"), OPU( "sens_w_cplx", MOS6_W_SENS_CPLX,IF_COMPLEX, "ac sensitivity wrt width") }; IFparm MOS6mPTable[] = { /* model parameters */ OP("type", MOS6_MOD_TYPE, IF_STRING ,"N-channel or P-channel MOS"), IOP("vto", MOS6_MOD_VTO, IF_REAL ,"Threshold voltage"), IOPR("vt0", MOS6_MOD_VTO, IF_REAL ,"Threshold voltage"), IOP("kv", MOS6_MOD_KV, IF_REAL ,"Saturation voltage factor"), IOP("nv", MOS6_MOD_NV, IF_REAL ,"Saturation voltage coeff."), IOP("kc", MOS6_MOD_KC, IF_REAL ,"Saturation current factor"), IOP("nc", MOS6_MOD_NC, IF_REAL ,"Saturation current coeff."), IOP("nvth", MOS6_MOD_NVTH, IF_REAL ,"Threshold voltage coeff."), IOP("ps", MOS6_MOD_PS, IF_REAL ,"Sat. current modification par."), IOP("gamma", MOS6_MOD_GAMMA, IF_REAL ,"Bulk threshold parameter"), IOP("gamma1",MOS6_MOD_GAMMA1,IF_REAL ,"Bulk threshold parameter 1"), IOP("sigma", MOS6_MOD_SIGMA, IF_REAL ,"Static feedback effect par."), IOP("phi", MOS6_MOD_PHI, IF_REAL ,"Surface potential"), IOP("lambda",MOS6_MOD_LAMBDA,IF_REAL ,"Channel length modulation param."), IOP("lambda0",MOS6_MOD_LAMDA0,IF_REAL ,"Channel length modulation param. 0"), IOP("lambda1",MOS6_MOD_LAMDA1,IF_REAL ,"Channel length modulation param. 1"), IOP("rd", MOS6_MOD_RD, IF_REAL ,"Drain ohmic resistance"), IOP("rs", MOS6_MOD_RS, IF_REAL ,"Source ohmic resistance"), IOPA("cbd", MOS6_MOD_CBD, IF_REAL ,"B-D junction capacitance"), IOPA("cbs", MOS6_MOD_CBS, IF_REAL ,"B-S junction capacitance"), IOP("is", MOS6_MOD_IS, IF_REAL ,"Bulk junction sat. current"), IOP("pb", MOS6_MOD_PB, IF_REAL ,"Bulk junction potential"), IOPA("cgso", MOS6_MOD_CGSO, IF_REAL ,"Gate-source overlap cap."), IOPA("cgdo", MOS6_MOD_CGDO, IF_REAL ,"Gate-drain overlap cap."), IOPA("cgbo", MOS6_MOD_CGBO, IF_REAL ,"Gate-bulk overlap cap."), IOP("rsh", MOS6_MOD_RSH, IF_REAL ,"Sheet resistance"), IOPA("cj", MOS6_MOD_CJ, IF_REAL ,"Bottom junction cap per area"), IOP("mj", MOS6_MOD_MJ, IF_REAL ,"Bottom grading coefficient"), IOPA("cjsw", MOS6_MOD_CJSW, IF_REAL ,"Side junction cap per area"), IOP("mjsw", MOS6_MOD_MJSW, IF_REAL ,"Side grading coefficient"), IOP("js", MOS6_MOD_JS, IF_REAL ,"Bulk jct. sat. current density"), IOP("ld", MOS6_MOD_LD, IF_REAL ,"Lateral diffusion"), IOP("tox", MOS6_MOD_TOX, IF_REAL ,"Oxide thickness"), IOP("u0", MOS6_MOD_U0, IF_REAL ,"Surface mobility"), IOPR("uo", MOS6_MOD_U0, IF_REAL ,"Surface mobility"), IOP("fc", MOS6_MOD_FC, IF_REAL ,"Forward bias jct. fit parm."), IP("nmos", MOS6_MOD_NMOS, IF_FLAG ,"N type MOSfet model"), IP("pmos", MOS6_MOD_PMOS, IF_FLAG ,"P type MOSfet model"), IOP("tpg", MOS6_MOD_TPG, IF_INTEGER,"Gate type"), IOP("nsub", MOS6_MOD_NSUB, IF_REAL ,"Substrate doping"), IOP("nss", MOS6_MOD_NSS, IF_REAL ,"Surface state density"), IOP("tnom", MOS6_MOD_TNOM, IF_REAL ,"Parameter measurement temperature") }; char *MOS6names[] = { "Drain", "Gate", "Source", "Bulk" }; int MOS6nSize = NUMELEMS(MOS6names); int MOS6pTSize = NUMELEMS(MOS6pTable); int MOS6mPTSize = NUMELEMS(MOS6mPTable); int MOS6iSize = sizeof(MOS6instance); int MOS6mSize = sizeof(MOS6model); tmpk8ny_4pz/src/spicelib/devices/mos6/mos6ask.c0000644000175000017500000004402713546075722021605 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Takayasu Sakurai Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "mos6defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int MOS6ask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { MOS6instance *here = (MOS6instance*)inst; double vr; double vi; double sr; double si; double vm; static char *msg = "Current and power not available for ac analysis"; switch(which) { case MOS6_TEMP: value->rValue = here->MOS6temp - CONSTCtoK; return(OK); case MOS6_DTEMP: value->rValue = here->MOS6dtemp; return(OK); case MOS6_CGS: value->rValue = 2* *(ckt->CKTstate0 + here->MOS6capgs); value->rValue *= here->MOS6m; return(OK); case MOS6_CGD: value->rValue = 2* *(ckt->CKTstate0 + here->MOS6capgd); value->rValue *= here->MOS6m; return(OK); case MOS6_L: value->rValue = here->MOS6l; return(OK); case MOS6_W: value->rValue = here->MOS6w; value->rValue *= here->MOS6m; return(OK); case MOS6_M: value->rValue = here->MOS6m; return(OK); case MOS6_AS: value->rValue = here->MOS6sourceArea; value->rValue *= here->MOS6m; return(OK); case MOS6_AD: value->rValue = here->MOS6drainArea; value->rValue *= here->MOS6m; return(OK); case MOS6_PS: value->rValue = here->MOS6sourcePerimiter; value->rValue *= here->MOS6m; return(OK); case MOS6_PD: value->rValue = here->MOS6drainPerimiter; value->rValue *= here->MOS6m; return(OK); case MOS6_NRS: value->rValue = here->MOS6sourceSquares; value->rValue *= here->MOS6m; return(OK); case MOS6_NRD: value->rValue = here->MOS6drainSquares; value->rValue *= here->MOS6m; return(OK); case MOS6_OFF: value->rValue = here->MOS6off; return(OK); case MOS6_IC_VBS: value->rValue = here->MOS6icVBS; return(OK); case MOS6_IC_VDS: value->rValue = here->MOS6icVDS; return(OK); case MOS6_IC_VGS: value->rValue = here->MOS6icVGS; return(OK); case MOS6_DNODE: value->iValue = here->MOS6dNode; return(OK); case MOS6_GNODE: value->iValue = here->MOS6gNode; return(OK); case MOS6_SNODE: value->iValue = here->MOS6sNode; return(OK); case MOS6_BNODE: value->iValue = here->MOS6bNode; return(OK); case MOS6_DNODEPRIME: value->iValue = here->MOS6dNodePrime; return(OK); case MOS6_SNODEPRIME: value->iValue = here->MOS6sNodePrime; return(OK); case MOS6_SOURCECONDUCT: value->rValue = here->MOS6sourceConductance; value->rValue *= here->MOS6m; return(OK); case MOS6_DRAINCONDUCT: value->rValue = here->MOS6drainConductance; value->rValue *= here->MOS6m; return(OK); case MOS6_SOURCERESIST: if (here->MOS6sNodePrime != here->MOS6sNode) value->rValue = 1.0 / here->MOS6sourceConductance; else value->rValue = 0.0; value->rValue /= here->MOS6m; return(OK); case MOS6_DRAINRESIST: if (here->MOS6dNodePrime != here->MOS6dNode) value->rValue = 1.0 / here->MOS6drainConductance; else value->rValue = 0.0; value->rValue /= here->MOS6m; return(OK); case MOS6_VON: value->rValue = here->MOS6von; return(OK); case MOS6_VDSAT: value->rValue = here->MOS6vdsat; return(OK); case MOS6_SOURCEVCRIT: value->rValue = here->MOS6sourceVcrit; return(OK); case MOS6_DRAINVCRIT: value->rValue = here->MOS6drainVcrit; return(OK); case MOS6_CD: value->rValue = here->MOS6cd; value->rValue *= here->MOS6m; return(OK); case MOS6_CBS: value->rValue = here->MOS6cbs; value->rValue *= here->MOS6m; return(OK); case MOS6_CBD: value->rValue = here->MOS6cbd; value->rValue *= here->MOS6m; return(OK); case MOS6_GMBS: value->rValue = here->MOS6gmbs; value->rValue *= here->MOS6m; return(OK); case MOS6_GM: value->rValue = here->MOS6gm; value->rValue *= here->MOS6m; return(OK); case MOS6_GDS: value->rValue = here->MOS6gds; value->rValue *= here->MOS6m; return(OK); case MOS6_GBD: value->rValue = here->MOS6gbd; value->rValue *= here->MOS6m; return(OK); case MOS6_GBS: value->rValue = here->MOS6gbs; value->rValue *= here->MOS6m; return(OK); case MOS6_CAPBD: value->rValue = here->MOS6capbd; value->rValue *= here->MOS6m; return(OK); case MOS6_CAPBS: value->rValue = here->MOS6capbs; value->rValue *= here->MOS6m; return(OK); case MOS6_CAPZEROBIASBD: value->rValue = here->MOS6Cbd; value->rValue *= here->MOS6m; return(OK); case MOS6_CAPZEROBIASBDSW: value->rValue = here->MOS6Cbdsw; value->rValue *= here->MOS6m; return(OK); case MOS6_CAPZEROBIASBS: value->rValue = here->MOS6Cbs; value->rValue *= here->MOS6m; return(OK); case MOS6_CAPZEROBIASBSSW: value->rValue = here->MOS6Cbssw; value->rValue *= here->MOS6m; return(OK); case MOS6_VBD: value->rValue = *(ckt->CKTstate0 + here->MOS6vbd); return(OK); case MOS6_VBS: value->rValue = *(ckt->CKTstate0 + here->MOS6vbs); return(OK); case MOS6_VGS: value->rValue = *(ckt->CKTstate0 + here->MOS6vgs); return(OK); case MOS6_VDS: value->rValue = *(ckt->CKTstate0 + here->MOS6vds); return(OK); case MOS6_CAPGS: value->rValue = 2* *(ckt->CKTstate0 + here->MOS6capgs); /* add overlap capacitance */ value->rValue += (MOS6modPtr(here)->MOS6gateSourceOverlapCapFactor) * (here->MOS6w); value->rValue *= here->MOS6m; return(OK); case MOS6_QGS: value->rValue = *(ckt->CKTstate0 + here->MOS6qgs); value->rValue *= here->MOS6m; return(OK); case MOS6_CQGS: value->rValue = *(ckt->CKTstate0 + here->MOS6cqgs); value->rValue *= here->MOS6m; return(OK); case MOS6_CAPGD: value->rValue = 2* *(ckt->CKTstate0 + here->MOS6capgd); /* add overlap capacitance */ value->rValue += (MOS6modPtr(here)->MOS6gateSourceOverlapCapFactor) * (here->MOS6w); value->rValue *= here->MOS6m; return(OK); case MOS6_QGD: value->rValue = *(ckt->CKTstate0 + here->MOS6qgd); value->rValue *= here->MOS6m; return(OK); case MOS6_CQGD: value->rValue = *(ckt->CKTstate0 + here->MOS6cqgd); value->rValue *= here->MOS6m; return(OK); case MOS6_CAPGB: value->rValue = 2* *(ckt->CKTstate0 + here->MOS6capgb); /* add overlap capacitance */ value->rValue += (MOS6modPtr(here)->MOS6gateBulkOverlapCapFactor) * (here->MOS6l -2*(MOS6modPtr(here)->MOS6latDiff)); value->rValue *= here->MOS6m; return(OK); case MOS6_QGB: value->rValue = *(ckt->CKTstate0 + here->MOS6qgb); value->rValue *= here->MOS6m; return(OK); case MOS6_CQGB: value->rValue = *(ckt->CKTstate0 + here->MOS6cqgb); value->rValue *= here->MOS6m; return(OK); case MOS6_QBD: value->rValue = *(ckt->CKTstate0 + here->MOS6qbd); value->rValue *= here->MOS6m; return(OK); case MOS6_CQBD: value->rValue = *(ckt->CKTstate0 + here->MOS6cqbd); value->rValue *= here->MOS6m; return(OK); case MOS6_QBS: value->rValue = *(ckt->CKTstate0 + here->MOS6qbs); value->rValue *= here->MOS6m; return(OK); case MOS6_CQBS: value->rValue = *(ckt->CKTstate0 + here->MOS6cqbs); value->rValue *= here->MOS6m; return(OK); case MOS6_L_SENS_DC: if(ckt->CKTsenInfo && here->MOS6sens_l){ value->rValue = *(ckt->CKTsenInfo->SEN_Sap[select->iValue + 1]+ here->MOS6senParmNo); } return(OK); case MOS6_L_SENS_REAL: if(ckt->CKTsenInfo && here->MOS6sens_l){ value->rValue = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS6senParmNo); } return(OK); case MOS6_L_SENS_IMAG: if(ckt->CKTsenInfo && here->MOS6sens_l){ value->rValue = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS6senParmNo); } return(OK); case MOS6_L_SENS_MAG: if(ckt->CKTsenInfo && here->MOS6sens_l){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = sqrt(vr*vr + vi*vi); if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS6senParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS6senParmNo); value->rValue = (vr * sr + vi * si)/vm; } return(OK); case MOS6_L_SENS_PH: if(ckt->CKTsenInfo && here->MOS6sens_l){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = vr*vr + vi*vi; if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS6senParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS6senParmNo); value->rValue = (vr * si - vi * sr)/vm; } return(OK); case MOS6_L_SENS_CPLX: if(ckt->CKTsenInfo && here->MOS6sens_l){ value->cValue.real= *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS6senParmNo); value->cValue.imag= *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS6senParmNo); } return(OK); case MOS6_W_SENS_DC: if(ckt->CKTsenInfo && here->MOS6sens_w){ value->rValue = *(ckt->CKTsenInfo->SEN_Sap[select->iValue + 1]+ here->MOS6senParmNo + here->MOS6sens_l); } return(OK); case MOS6_W_SENS_REAL: if(ckt->CKTsenInfo && here->MOS6sens_w){ value->rValue = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS6senParmNo + here->MOS6sens_l); } return(OK); case MOS6_W_SENS_IMAG: if(ckt->CKTsenInfo && here->MOS6sens_w){ value->rValue = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS6senParmNo + here->MOS6sens_l); } return(OK); case MOS6_W_SENS_MAG: if(ckt->CKTsenInfo && here->MOS6sens_w){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = sqrt(vr*vr + vi*vi); if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS6senParmNo + here->MOS6sens_l); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS6senParmNo + here->MOS6sens_l); value->rValue = (vr * sr + vi * si)/vm; } return(OK); case MOS6_W_SENS_PH: if(ckt->CKTsenInfo && here->MOS6sens_w){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = vr*vr + vi*vi; if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS6senParmNo + here->MOS6sens_l); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS6senParmNo + here->MOS6sens_l); value->rValue = (vr * si - vi * sr)/vm; } return(OK); case MOS6_W_SENS_CPLX: if(ckt->CKTsenInfo && here->MOS6sens_w){ value->cValue.real= *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MOS6senParmNo + here->MOS6sens_l); value->cValue.imag= *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MOS6senParmNo + here->MOS6sens_l); } return(OK); case MOS6_CB : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MOS6ask.c"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = here->MOS6cbd + here->MOS6cbs - *(ckt->CKTstate0 + here->MOS6cqgb); } value->rValue *= here->MOS6m; return(OK); case MOS6_CG : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MOS6ask.c"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else if (ckt->CKTcurrentAnalysis & (DOING_DCOP | DOING_TRCV)) { value->rValue = 0; } else if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && (ckt->CKTmode & MODETRANOP)) { value->rValue = 0; } else { value->rValue = *(ckt->CKTstate0 + here->MOS6cqgb) + *(ckt->CKTstate0 + here->MOS6cqgd) + *(ckt->CKTstate0 + here->MOS6cqgs); } value->rValue *= here->MOS6m; return(OK); case MOS6_CS : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MOS6ask.c"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = -here->MOS6cd; value->rValue -= here->MOS6cbd + here->MOS6cbs - *(ckt->CKTstate0 + here->MOS6cqgb); if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { value->rValue -= *(ckt->CKTstate0 + here->MOS6cqgb) + *(ckt->CKTstate0 + here->MOS6cqgd) + *(ckt->CKTstate0 + here->MOS6cqgs); } } value->rValue *= here->MOS6m; return(OK); case MOS6_POWER : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MOS6ask.c"; strcpy(errMsg,msg); return(E_ASKPOWER); } else { double temp; value->rValue = here->MOS6cd * *(ckt->CKTrhsOld + here->MOS6dNode); value->rValue += (here->MOS6cbd + here->MOS6cbs - *(ckt->CKTstate0 + here->MOS6cqgb)) * *(ckt->CKTrhsOld + here->MOS6bNode); if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { value->rValue += (*(ckt->CKTstate0 + here->MOS6cqgb) + *(ckt->CKTstate0 + here->MOS6cqgd) + *(ckt->CKTstate0 + here->MOS6cqgs)) * *(ckt->CKTrhsOld + here->MOS6gNode); } temp = -here->MOS6cd; temp -= here->MOS6cbd + here->MOS6cbs ; if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { temp -= *(ckt->CKTstate0 + here->MOS6cqgb) + *(ckt->CKTstate0 + here->MOS6cqgd) + *(ckt->CKTstate0 + here->MOS6cqgs); } value->rValue += temp * *(ckt->CKTrhsOld + here->MOS6sNode); } value->rValue *= here->MOS6m; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/mos6/mos6ext.h0000644000175000017500000000152113546075722021624 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ extern int MOS6acLoad(GENmodel *,CKTcircuit*); extern int MOS6ask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int MOS6delete(GENinstance*); extern int MOS6getic(GENmodel*,CKTcircuit*); extern int MOS6load(GENmodel*,CKTcircuit*); extern int MOS6mAsk(CKTcircuit *,GENmodel *,int,IFvalue*); extern int MOS6mParam(int,IFvalue*,GENmodel*); extern int MOS6param(int,IFvalue*,GENinstance*,IFvalue*); extern int MOS6pzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int MOS6setup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int MOS6unsetup(GENmodel*,CKTcircuit*); extern int MOS6temp(GENmodel*,CKTcircuit*); extern int MOS6trunc(GENmodel*,CKTcircuit*,double*); extern int MOS6convTest(GENmodel*,CKTcircuit*); tmpk8ny_4pz/src/spicelib/devices/mos6/mos6mpar.c0000644000175000017500000001416013546075722021761 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Takayasu Sakurai **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "mos6defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS6mParam(int param, IFvalue *value, GENmodel *inModel) { MOS6model *model = (MOS6model *)inModel; switch(param) { case MOS6_MOD_TNOM: model->MOS6tnom = value->rValue+CONSTCtoK; model->MOS6tnomGiven = TRUE; break; case MOS6_MOD_VTO: model->MOS6vt0 = value->rValue; model->MOS6vt0Given = TRUE; break; case MOS6_MOD_KV: model->MOS6kv = value->rValue; model->MOS6kvGiven = TRUE; break; case MOS6_MOD_NV: model->MOS6nv = value->rValue; model->MOS6nvGiven = TRUE; break; case MOS6_MOD_KC: model->MOS6kc = value->rValue; model->MOS6kcGiven = TRUE; break; case MOS6_MOD_NC: model->MOS6nc = value->rValue; model->MOS6ncGiven = TRUE; break; case MOS6_MOD_NVTH: model->MOS6nvth = value->rValue; model->MOS6nvthGiven = TRUE; break; case MOS6_MOD_PS: model->MOS6ps = value->rValue; model->MOS6psGiven = TRUE; break; case MOS6_MOD_GAMMA: model->MOS6gamma = value->rValue; model->MOS6gammaGiven = TRUE; break; case MOS6_MOD_GAMMA1: model->MOS6gamma1 = value->rValue; model->MOS6gamma1Given = TRUE; break; case MOS6_MOD_SIGMA: model->MOS6sigma = value->rValue; model->MOS6sigmaGiven = TRUE; break; case MOS6_MOD_PHI: model->MOS6phi = value->rValue; model->MOS6phiGiven = TRUE; break; case MOS6_MOD_LAMBDA: model->MOS6lambda = value->rValue; model->MOS6lambdaGiven = TRUE; break; case MOS6_MOD_LAMDA0: model->MOS6lamda0 = value->rValue; model->MOS6lamda0Given = TRUE; break; case MOS6_MOD_LAMDA1: model->MOS6lamda1 = value->rValue; model->MOS6lamda1Given = TRUE; break; case MOS6_MOD_RD: model->MOS6drainResistance = value->rValue; model->MOS6drainResistanceGiven = TRUE; break; case MOS6_MOD_RS: model->MOS6sourceResistance = value->rValue; model->MOS6sourceResistanceGiven = TRUE; break; case MOS6_MOD_CBD: model->MOS6capBD = value->rValue; model->MOS6capBDGiven = TRUE; break; case MOS6_MOD_CBS: model->MOS6capBS = value->rValue; model->MOS6capBSGiven = TRUE; break; case MOS6_MOD_IS: model->MOS6jctSatCur = value->rValue; model->MOS6jctSatCurGiven = TRUE; break; case MOS6_MOD_PB: model->MOS6bulkJctPotential = value->rValue; model->MOS6bulkJctPotentialGiven = TRUE; break; case MOS6_MOD_CGSO: model->MOS6gateSourceOverlapCapFactor = value->rValue; model->MOS6gateSourceOverlapCapFactorGiven = TRUE; break; case MOS6_MOD_CGDO: model->MOS6gateDrainOverlapCapFactor = value->rValue; model->MOS6gateDrainOverlapCapFactorGiven = TRUE; break; case MOS6_MOD_CGBO: model->MOS6gateBulkOverlapCapFactor = value->rValue; model->MOS6gateBulkOverlapCapFactorGiven = TRUE; break; case MOS6_MOD_CJ: model->MOS6bulkCapFactor = value->rValue; model->MOS6bulkCapFactorGiven = TRUE; break; case MOS6_MOD_MJ: model->MOS6bulkJctBotGradingCoeff = value->rValue; model->MOS6bulkJctBotGradingCoeffGiven = TRUE; break; case MOS6_MOD_CJSW: model->MOS6sideWallCapFactor = value->rValue; model->MOS6sideWallCapFactorGiven = TRUE; break; case MOS6_MOD_MJSW: model->MOS6bulkJctSideGradingCoeff = value->rValue; model->MOS6bulkJctSideGradingCoeffGiven = TRUE; break; case MOS6_MOD_JS: model->MOS6jctSatCurDensity = value->rValue; model->MOS6jctSatCurDensityGiven = TRUE; break; case MOS6_MOD_TOX: model->MOS6oxideThickness = value->rValue; model->MOS6oxideThicknessGiven = TRUE; break; case MOS6_MOD_LD: model->MOS6latDiff = value->rValue; model->MOS6latDiffGiven = TRUE; break; case MOS6_MOD_RSH: model->MOS6sheetResistance = value->rValue; model->MOS6sheetResistanceGiven = TRUE; break; case MOS6_MOD_U0: model->MOS6surfaceMobility = value->rValue; model->MOS6surfaceMobilityGiven = TRUE; break; case MOS6_MOD_FC: model->MOS6fwdCapDepCoeff = value->rValue; model->MOS6fwdCapDepCoeffGiven = TRUE; break; case MOS6_MOD_NSS: model->MOS6surfaceStateDensity = value->rValue; model->MOS6surfaceStateDensityGiven = TRUE; break; case MOS6_MOD_NSUB: model->MOS6substrateDoping = value->rValue; model->MOS6substrateDopingGiven = TRUE; break; case MOS6_MOD_TPG: model->MOS6gateType = value->iValue; model->MOS6gateTypeGiven = TRUE; break; case MOS6_MOD_NMOS: if(value->iValue) { model->MOS6type = 1; model->MOS6typeGiven = TRUE; } break; case MOS6_MOD_PMOS: if(value->iValue) { model->MOS6type = -1; model->MOS6typeGiven = TRUE; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos6/mos6temp.c0000644000175000017500000003404313546075722021771 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Takayasu Sakurai **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos6defs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS6temp(GENmodel *inModel, CKTcircuit *ckt) { MOS6model *model = (MOS6model *)inModel; MOS6instance *here; double egfet,egfet1; double fact1,fact2; double kt,kt1; double arg1; double ratio,ratio4; double phio; double pbo; double gmanew,gmaold; double capfact; double pbfact1,pbfact; double vt,vtnom; double wkfngs; double wkfng; double fermig; double fermis; double vfb; /* loop through all the resistor models */ for( ; model != NULL; model = MOS6nextModel(model)) { /* perform model defaulting */ if(!model->MOS6tnomGiven) { model->MOS6tnom = ckt->CKTnomTemp; } fact1 = model->MOS6tnom/REFTEMP; vtnom = model->MOS6tnom*CONSTKoverQ; kt1 = CONSTboltz * model->MOS6tnom; egfet1 = 1.16-(7.02e-4*model->MOS6tnom*model->MOS6tnom)/ (model->MOS6tnom+1108); arg1 = -egfet1/(kt1+kt1)+1.1150877/(CONSTboltz*(REFTEMP+REFTEMP)); pbfact1 = -2*vtnom *(1.5*log(fact1)+CHARGE*arg1); /* now model parameter preprocessing */ if (model->MOS6phi <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "%s: Phi is not positive.", model->MOS6modName); return(E_BADPARM); } if(!model->MOS6oxideThicknessGiven || model->MOS6oxideThickness == 0) { model->MOS6oxideCapFactor = 0; } else { model->MOS6oxideCapFactor = 3.9 * 8.854214871e-12/ model->MOS6oxideThickness; if(!model->MOS6kcGiven) { if(!model->MOS6surfaceMobilityGiven) { model->MOS6surfaceMobility=600; } model->MOS6kc = 0.5 * model->MOS6surfaceMobility * model->MOS6oxideCapFactor * 1e-4 /*(m**2/cm**2)*/; } if(model->MOS6substrateDopingGiven) { if(model->MOS6substrateDoping*1e6 /*(cm**3/m**3)*/ >1.45e16) { if(!model->MOS6phiGiven) { model->MOS6phi = 2*vtnom* log(model->MOS6substrateDoping* 1e6/*(cm**3/m**3)*//1.45e16); model->MOS6phi = MAX(.1,model->MOS6phi); } fermis = model->MOS6type * .5 * model->MOS6phi; wkfng = 3.2; if(!model->MOS6gateTypeGiven) model->MOS6gateType=1; if(model->MOS6gateType != 0) { fermig = model->MOS6type *model->MOS6gateType*.5*egfet1; wkfng = 3.25 + .5 * egfet1 - fermig; } wkfngs = wkfng - (3.25 + .5 * egfet1 +fermis); if(!model->MOS6gammaGiven) { model->MOS6gamma = sqrt(2 * 11.70 * 8.854214871e-12 * CHARGE * model->MOS6substrateDoping* 1e6/*(cm**3/m**3)*/)/ model->MOS6oxideCapFactor; } if(!model->MOS6gamma1Given) { model->MOS6gamma1 = 0.0; } if(!model->MOS6vt0Given) { if(!model->MOS6surfaceStateDensityGiven) model->MOS6surfaceStateDensity=0; vfb = wkfngs - model->MOS6surfaceStateDensity * 1e4 /*(cm**2/m**2)*/ * CHARGE/model->MOS6oxideCapFactor; model->MOS6vt0 = vfb + model->MOS6type * (model->MOS6gamma * sqrt(model->MOS6phi)+ model->MOS6phi); } } else { model->MOS6substrateDoping = 0; SPfrontEnd->IFerrorf (ERR_FATAL, "%s: Nsub < Ni", model->MOS6modName); return(E_BADPARM); } } } /* loop through all instances of the model */ for(here = MOS6instances(model); here!= NULL; here = MOS6nextInstance(here)) { double czbd; /* zero voltage bulk-drain capacitance */ double czbdsw; /* zero voltage bulk-drain sidewall capacitance */ double czbs; /* zero voltage bulk-source capacitance */ double czbssw; /* zero voltage bulk-source sidewall capacitance */ double arg; /* 1 - fc */ double sarg; /* (1-fc) ^^ (-mj) */ double sargsw; /* (1-fc) ^^ (-mjsw) */ /* perform the parameter defaulting */ if(!here->MOS6dtempGiven) { here->MOS6dtemp = 0.0; } if(!here->MOS6tempGiven) { here->MOS6temp = ckt->CKTtemp + here->MOS6dtemp; } vt = here->MOS6temp * CONSTKoverQ; ratio = here->MOS6temp/model->MOS6tnom; fact2 = here->MOS6temp/REFTEMP; kt = here->MOS6temp * CONSTboltz; egfet = 1.16-(7.02e-4*here->MOS6temp*here->MOS6temp)/ (here->MOS6temp+1108); arg = -egfet/(kt+kt)+1.1150877/(CONSTboltz*(REFTEMP+REFTEMP)); pbfact = -2*vt *(1.5*log(fact2)+CHARGE*arg); if(!here->MOS6drainAreaGiven) { here->MOS6drainArea = ckt->CKTdefaultMosAD; } if(!here->MOS6lGiven) { here->MOS6l = ckt->CKTdefaultMosL; } if(!here->MOS6sourceAreaGiven) { here->MOS6sourceArea = ckt->CKTdefaultMosAS; } if(!here->MOS6wGiven) { here->MOS6w = ckt->CKTdefaultMosW; } if(here->MOS6l - 2 * model->MOS6latDiff <=0) { SPfrontEnd->IFerrorf (ERR_WARNING, "%s: effective channel length less than zero", model->MOS6modName); } ratio4 = ratio * sqrt(ratio); here->MOS6tKv = model->MOS6kv; here->MOS6tKc = model->MOS6kc / ratio4; here->MOS6tSurfMob = model->MOS6surfaceMobility/ratio4; phio= (model->MOS6phi-pbfact1)/fact1; here->MOS6tPhi = fact2 * phio + pbfact; here->MOS6tVbi = model->MOS6vt0 - model->MOS6type * (model->MOS6gamma* sqrt(model->MOS6phi)) +.5*(egfet1-egfet) + model->MOS6type*.5* (here->MOS6tPhi-model->MOS6phi); here->MOS6tVto = here->MOS6tVbi + model->MOS6type * model->MOS6gamma * sqrt(here->MOS6tPhi); here->MOS6tSatCur = model->MOS6jctSatCur* exp(-egfet/vt+egfet1/vtnom); here->MOS6tSatCurDens = model->MOS6jctSatCurDensity * exp(-egfet/vt+egfet1/vtnom); pbo = (model->MOS6bulkJctPotential - pbfact1)/fact1; gmaold = (model->MOS6bulkJctPotential-pbo)/pbo; capfact = 1/(1+model->MOS6bulkJctBotGradingCoeff* (4e-4*(model->MOS6tnom-REFTEMP)-gmaold)); here->MOS6tCbd = model->MOS6capBD * capfact; here->MOS6tCbs = model->MOS6capBS * capfact; here->MOS6tCj = model->MOS6bulkCapFactor * capfact; capfact = 1/(1+model->MOS6bulkJctSideGradingCoeff* (4e-4*(model->MOS6tnom-REFTEMP)-gmaold)); here->MOS6tCjsw = model->MOS6sideWallCapFactor * capfact; here->MOS6tBulkPot = fact2 * pbo+pbfact; gmanew = (here->MOS6tBulkPot-pbo)/pbo; capfact = (1+model->MOS6bulkJctBotGradingCoeff* (4e-4*(here->MOS6temp-REFTEMP)-gmanew)); here->MOS6tCbd *= capfact; here->MOS6tCbs *= capfact; here->MOS6tCj *= capfact; capfact = (1+model->MOS6bulkJctSideGradingCoeff* (4e-4*(here->MOS6temp-REFTEMP)-gmanew)); here->MOS6tCjsw *= capfact; here->MOS6tDepCap = model->MOS6fwdCapDepCoeff * here->MOS6tBulkPot; if( (here->MOS6tSatCurDens == 0) || (here->MOS6drainArea == 0) || (here->MOS6sourceArea == 0) ) { here->MOS6sourceVcrit = here->MOS6drainVcrit = vt*log(vt/(CONSTroot2*here->MOS6tSatCur)); } else { here->MOS6drainVcrit = vt * log( vt / (CONSTroot2 * here->MOS6tSatCurDens * here->MOS6drainArea)); here->MOS6sourceVcrit = vt * log( vt / (CONSTroot2 * here->MOS6tSatCurDens * here->MOS6sourceArea)); } if(model->MOS6capBDGiven) { czbd = here->MOS6tCbd; } else { if(model->MOS6bulkCapFactorGiven) { czbd=here->MOS6tCj*here->MOS6drainArea; } else { czbd=0; } } if(model->MOS6sideWallCapFactorGiven) { czbdsw= here->MOS6tCjsw * here->MOS6drainPerimiter; } else { czbdsw=0; } arg = 1-model->MOS6fwdCapDepCoeff; sarg = exp( (-model->MOS6bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS6bulkJctSideGradingCoeff) * log(arg) ); here->MOS6Cbd = czbd; here->MOS6Cbdsw = czbdsw; here->MOS6f2d = czbd*(1-model->MOS6fwdCapDepCoeff* (1+model->MOS6bulkJctBotGradingCoeff))* sarg/arg + czbdsw*(1-model->MOS6fwdCapDepCoeff* (1+model->MOS6bulkJctSideGradingCoeff))* sargsw/arg; here->MOS6f3d = czbd * model->MOS6bulkJctBotGradingCoeff * sarg/arg/ here->MOS6tBulkPot + czbdsw * model->MOS6bulkJctSideGradingCoeff * sargsw/arg / here->MOS6tBulkPot; here->MOS6f4d = czbd*here->MOS6tBulkPot*(1-arg*sarg)/ (1-model->MOS6bulkJctBotGradingCoeff) + czbdsw*here->MOS6tBulkPot*(1-arg*sargsw)/ (1-model->MOS6bulkJctSideGradingCoeff) -here->MOS6f3d/2* (here->MOS6tDepCap*here->MOS6tDepCap) -here->MOS6tDepCap * here->MOS6f2d; if(model->MOS6capBSGiven) { czbs=here->MOS6tCbs; } else { if(model->MOS6bulkCapFactorGiven) { czbs=here->MOS6tCj*here->MOS6sourceArea; } else { czbs=0; } } if(model->MOS6sideWallCapFactorGiven) { czbssw = here->MOS6tCjsw * here->MOS6sourcePerimiter; } else { czbssw=0; } arg = 1-model->MOS6fwdCapDepCoeff; sarg = exp( (-model->MOS6bulkJctBotGradingCoeff) * log(arg) ); sargsw = exp( (-model->MOS6bulkJctSideGradingCoeff) * log(arg) ); here->MOS6Cbs = czbs; here->MOS6Cbssw = czbssw; here->MOS6f2s = czbs*(1-model->MOS6fwdCapDepCoeff* (1+model->MOS6bulkJctBotGradingCoeff))* sarg/arg + czbssw*(1-model->MOS6fwdCapDepCoeff* (1+model->MOS6bulkJctSideGradingCoeff))* sargsw/arg; here->MOS6f3s = czbs * model->MOS6bulkJctBotGradingCoeff * sarg/arg/ here->MOS6tBulkPot + czbssw * model->MOS6bulkJctSideGradingCoeff * sargsw/arg / here->MOS6tBulkPot; here->MOS6f4s = czbs*here->MOS6tBulkPot*(1-arg*sarg)/ (1-model->MOS6bulkJctBotGradingCoeff) + czbssw*here->MOS6tBulkPot*(1-arg*sargsw)/ (1-model->MOS6bulkJctSideGradingCoeff) -here->MOS6f3s/2* (here->MOS6tDepCap*here->MOS6tDepCap) -here->MOS6tDepCap * here->MOS6f2s; if(model->MOS6drainResistanceGiven) { if(model->MOS6drainResistance != 0) { here->MOS6drainConductance = 1/model->MOS6drainResistance; } else { here->MOS6drainConductance = 0; } } else if (model->MOS6sheetResistanceGiven) { if( (!here->MOS6drainSquaresGiven) || ( here->MOS6drainSquares==0) ){ here->MOS6drainSquares=1; } if(model->MOS6sheetResistance != 0) { here->MOS6drainConductance = 1/(model->MOS6sheetResistance*here->MOS6drainSquares); } else { here->MOS6drainConductance = 0; } } else { here->MOS6drainConductance = 0; } if(model->MOS6sourceResistanceGiven) { if(model->MOS6sourceResistance != 0) { here->MOS6sourceConductance = 1/model->MOS6sourceResistance; } else { here->MOS6sourceConductance = 0; } } else if (model->MOS6sheetResistanceGiven) { if( (!here->MOS6sourceSquaresGiven) || ( here->MOS6sourceSquares==0) ) { here->MOS6sourceSquares=1; } if(model->MOS6sheetResistance != 0) { here->MOS6sourceConductance = 1/(model->MOS6sheetResistance*here->MOS6sourceSquares); } else { here->MOS6sourceConductance = 0; } } else { here->MOS6sourceConductance = 0; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos6/mos6defs.h0000644000175000017500000004116413546075722021754 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #ifndef MOS6 #define MOS6 #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" /* declarations for level 5 MOSFETs */ /* information needed for each instance */ typedef struct sMOS6instance { struct GENinstance gen; #define MOS6modPtr(inst) ((struct sMOS6model *)((inst)->gen.GENmodPtr)) #define MOS6nextInstance(inst) ((struct sMOS6instance *)((inst)->gen.GENnextInstance)) #define MOS6name gen.GENname #define MOS6states gen.GENstate const int MOS6dNode; /* number of the gate node of the mosfet */ const int MOS6gNode; /* number of the gate node of the mosfet */ const int MOS6sNode; /* number of the source node of the mosfet */ const int MOS6bNode; /* number of the bulk node of the mosfet */ int MOS6dNodePrime; /* number of the internal drain node of the mosfet */ int MOS6sNodePrime; /* number of the internal source node of the mosfet */ double MOS6l; /* the length of the channel region */ double MOS6w; /* the width of the channel region */ double MOS6m; /* the parallel multiplier */ double MOS6drainArea; /* the area of the drain diffusion */ double MOS6sourceArea; /* the area of the source diffusion */ double MOS6drainSquares; /* the length of the drain in squares */ double MOS6sourceSquares; /* the length of the source in squares */ double MOS6drainPerimiter; double MOS6sourcePerimiter; double MOS6sourceConductance; /*conductance of source(or 0):set in setup*/ double MOS6drainConductance; /*conductance of drain(or 0):set in setup*/ double MOS6temp; /* operating temperature of this instance */ double MOS6dtemp; /* instance temperature difference from circuit */ double MOS6tKv; /* temperature corrected drain linear cond. factor*/ double MOS6tKc; /* temperature corrected saturation cur. factor*/ double MOS6tSurfMob; /* temperature corrected surface mobility */ double MOS6tPhi; /* temperature corrected Phi */ double MOS6tVto; /* temperature corrected Vto */ double MOS6tSatCur; /* temperature corrected saturation Cur. */ double MOS6tSatCurDens; /* temperature corrected saturation Cur. density*/ double MOS6tCbd; /* temperature corrected B-D Capacitance */ double MOS6tCbs; /* temperature corrected B-S Capacitance */ double MOS6tCj; /* temperature corrected Bulk bottom Capacitance */ double MOS6tCjsw; /* temperature corrected Bulk side Capacitance */ double MOS6tBulkPot; /* temperature corrected Bulk potential */ double MOS6tDepCap; /* temperature adjusted transition point in */ /* the cureve matching Fc * Vj */ double MOS6tVbi; /* temperature adjusted Vbi */ double MOS6icVBS; /* initial condition B-S voltage */ double MOS6icVDS; /* initial condition D-S voltage */ double MOS6icVGS; /* initial condition G-S voltage */ double MOS6von; double MOS6vdsat; double MOS6sourceVcrit; /* Vcrit for pos. vds */ double MOS6drainVcrit; /* Vcrit for pos. vds */ double MOS6cd; double MOS6cbs; double MOS6cbd; double MOS6gmbs; double MOS6gm; double MOS6gds; double MOS6gbd; double MOS6gbs; double MOS6capbd; double MOS6capbs; double MOS6Cbd; double MOS6Cbdsw; double MOS6Cbs; double MOS6Cbssw; double MOS6f2d; double MOS6f3d; double MOS6f4d; double MOS6f2s; double MOS6f3s; double MOS6f4s; int MOS6mode; /* device mode : 1 = normal, -1 = inverse */ unsigned MOS6off:1; /* non-zero to indicate device is off for dc analysis*/ unsigned MOS6tempGiven :1; /* instance temperature specified */ unsigned MOS6dtempGiven :1; unsigned MOS6lGiven :1; unsigned MOS6wGiven :1; unsigned MOS6mGiven :1; unsigned MOS6drainAreaGiven :1; unsigned MOS6sourceAreaGiven :1; unsigned MOS6drainSquaresGiven :1; unsigned MOS6sourceSquaresGiven :1; unsigned MOS6drainPerimiterGiven :1; unsigned MOS6sourcePerimiterGiven :1; unsigned MOS6dNodePrimeSet :1; unsigned MOS6sNodePrimeSet :1; unsigned MOS6icVBSGiven :1; unsigned MOS6icVDSGiven :1; unsigned MOS6icVGSGiven :1; unsigned MOS6vonGiven :1; unsigned MOS6vdsatGiven :1; unsigned MOS6modeGiven :1; double *MOS6DdPtr; /* pointer to sparse matrix element at * (Drain node,drain node) */ double *MOS6GgPtr; /* pointer to sparse matrix element at * (gate node,gate node) */ double *MOS6SsPtr; /* pointer to sparse matrix element at * (source node,source node) */ double *MOS6BbPtr; /* pointer to sparse matrix element at * (bulk node,bulk node) */ double *MOS6DPdpPtr; /* pointer to sparse matrix element at * (drain prime node,drain prime node) */ double *MOS6SPspPtr; /* pointer to sparse matrix element at * (source prime node,source prime node) */ double *MOS6DdpPtr; /* pointer to sparse matrix element at * (drain node,drain prime node) */ double *MOS6GbPtr; /* pointer to sparse matrix element at * (gate node,bulk node) */ double *MOS6GdpPtr; /* pointer to sparse matrix element at * (gate node,drain prime node) */ double *MOS6GspPtr; /* pointer to sparse matrix element at * (gate node,source prime node) */ double *MOS6SspPtr; /* pointer to sparse matrix element at * (source node,source prime node) */ double *MOS6BdpPtr; /* pointer to sparse matrix element at * (bulk node,drain prime node) */ double *MOS6BspPtr; /* pointer to sparse matrix element at * (bulk node,source prime node) */ double *MOS6DPspPtr; /* pointer to sparse matrix element at * (drain prime node,source prime node) */ double *MOS6DPdPtr; /* pointer to sparse matrix element at * (drain prime node,drain node) */ double *MOS6BgPtr; /* pointer to sparse matrix element at * (bulk node,gate node) */ double *MOS6DPgPtr; /* pointer to sparse matrix element at * (drain prime node,gate node) */ double *MOS6SPgPtr; /* pointer to sparse matrix element at * (source prime node,gate node) */ double *MOS6SPsPtr; /* pointer to sparse matrix element at * (source prime node,source node) */ double *MOS6DPbPtr; /* pointer to sparse matrix element at * (drain prime node,bulk node) */ double *MOS6SPbPtr; /* pointer to sparse matrix element at * (source prime node,bulk node) */ double *MOS6SPdpPtr; /* pointer to sparse matrix element at * (source prime node,drain prime node) */ int MOS6senParmNo; /* parameter # for sensitivity use; set equal to 0 if neither length nor width of the mosfet is a design parameter */ unsigned MOS6sens_l :1; /* field which indicates whether length of the mosfet is a design parameter or not */ unsigned MOS6sens_w :1; /* field which indicates whether width of the mosfet is a design parameter or not */ unsigned MOS6senPertFlag :1; /* indictes whether the the parameter of the particular instance is to be perturbed */ double MOS6cgs; double MOS6cgd; double MOS6cgb; double *MOS6sens; #define MOS6senCgs MOS6sens /* contains pertured values of cgs */ #define MOS6senCgd MOS6sens + 6 /* contains perturbed values of cgd*/ #define MOS6senCgb MOS6sens + 12 /* contains perturbed values of cgb*/ #define MOS6senCbd MOS6sens + 18 /* contains perturbed values of cbd*/ #define MOS6senCbs MOS6sens + 24 /* contains perturbed values of cbs*/ #define MOS6senGds MOS6sens + 30 /* contains perturbed values of gds*/ #define MOS6senGbs MOS6sens + 36 /* contains perturbed values of gbs*/ #define MOS6senGbd MOS6sens + 42 /* contains perturbed values of gbd*/ #define MOS6senGm MOS6sens + 48 /* contains perturbed values of gm*/ #define MOS6senGmbs MOS6sens + 54 /* contains perturbed values of gmbs*/ #define MOS6dphigs_dl MOS6sens + 60 #define MOS6dphigd_dl MOS6sens + 61 #define MOS6dphigb_dl MOS6sens + 62 #define MOS6dphibs_dl MOS6sens + 63 #define MOS6dphibd_dl MOS6sens + 64 #define MOS6dphigs_dw MOS6sens + 65 #define MOS6dphigd_dw MOS6sens + 66 #define MOS6dphigb_dw MOS6sens + 67 #define MOS6dphibs_dw MOS6sens + 68 #define MOS6dphibd_dw MOS6sens + 69 } MOS6instance ; #define MOS6vbd MOS6states+ 0 /* bulk-drain voltage */ #define MOS6vbs MOS6states+ 1 /* bulk-source voltage */ #define MOS6vgs MOS6states+ 2 /* gate-source voltage */ #define MOS6vds MOS6states+ 3 /* drain-source voltage */ #define MOS6capgs MOS6states+4 /* gate-source capacitor value */ #define MOS6qgs MOS6states+ 5 /* gate-source capacitor charge */ #define MOS6cqgs MOS6states+ 6 /* gate-source capacitor current */ #define MOS6capgd MOS6states+ 7 /* gate-drain capacitor value */ #define MOS6qgd MOS6states+ 8 /* gate-drain capacitor charge */ #define MOS6cqgd MOS6states+ 9 /* gate-drain capacitor current */ #define MOS6capgb MOS6states+10 /* gate-bulk capacitor value */ #define MOS6qgb MOS6states+ 11 /* gate-bulk capacitor charge */ #define MOS6cqgb MOS6states+ 12 /* gate-bulk capacitor current */ #define MOS6qbd MOS6states+ 13 /* bulk-drain capacitor charge */ #define MOS6cqbd MOS6states+ 14 /* bulk-drain capacitor current */ #define MOS6qbs MOS6states+ 15 /* bulk-source capacitor charge */ #define MOS6cqbs MOS6states+ 16 /* bulk-source capacitor current */ #define MOS6numStates 17 #define MOS6sensxpgs MOS6states+17 /* charge sensitivities and their derivatives. * +18 for the derivatives * pointer to the beginning of the array */ #define MOS6sensxpgd MOS6states+19 #define MOS6sensxpgb MOS6states+21 #define MOS6sensxpbs MOS6states+23 #define MOS6sensxpbd MOS6states+25 #define MOS6numSenStates 10 /* per model data */ /* NOTE: parameters marked 'input - use xxxx' are paramters for * which a temperature correction is applied in MOS6temp, thus * the MOS6xxxx value in the per-instance structure should be used * instead in all calculations */ typedef struct sMOS6model { /* model structure for a resistor */ struct GENmodel gen; #define MOS6modType gen.GENmodType #define MOS6nextModel(inst) ((struct sMOS6model *)((inst)->gen.GENnextModel)) #define MOS6instances(inst) ((MOS6instance *)((inst)->gen.GENinstances)) #define MOS6modName gen.GENmodName int MOS6type; /* device type : 1 = nmos, -1 = pmos */ double MOS6tnom; /* temperature at which parameters measured */ double MOS6latDiff; double MOS6jctSatCurDensity; /* input - use tSatCurDens */ double MOS6jctSatCur; /* input - use tSatCur */ double MOS6drainResistance; double MOS6sourceResistance; double MOS6sheetResistance; double MOS6kv; /* input - use tKv */ double MOS6nv; /* drain linear conductance factor*/ double MOS6kc; /* input - use tKc */ double MOS6nc; /* saturation current coeff.*/ double MOS6nvth; /* threshold voltage coeff.*/ double MOS6ps; /* saturation current modification parameter*/ double MOS6gateSourceOverlapCapFactor; double MOS6gateDrainOverlapCapFactor; double MOS6gateBulkOverlapCapFactor; double MOS6oxideCapFactor; double MOS6vt0; /* input - use tVto */ double MOS6capBD; /* input - use tCbd */ double MOS6capBS; /* input - use tCbs */ double MOS6bulkCapFactor; /* input - use tCj */ double MOS6sideWallCapFactor; /* input - use tCjsw */ double MOS6bulkJctPotential; /* input - use tBulkPot */ double MOS6bulkJctBotGradingCoeff; double MOS6bulkJctSideGradingCoeff; double MOS6fwdCapDepCoeff; double MOS6phi; /* input - use tPhi */ double MOS6gamma; double MOS6gamma1; /* secondary back-gate effect parametr */ double MOS6sigma; double MOS6lambda; double MOS6lamda0; double MOS6lamda1; double MOS6substrateDoping; int MOS6gateType; double MOS6surfaceStateDensity; double MOS6oxideThickness; double MOS6surfaceMobility; /* input - use tSurfMob */ unsigned MOS6typeGiven :1; unsigned MOS6latDiffGiven :1; unsigned MOS6jctSatCurDensityGiven :1; unsigned MOS6jctSatCurGiven :1; unsigned MOS6drainResistanceGiven :1; unsigned MOS6sourceResistanceGiven :1; unsigned MOS6sheetResistanceGiven :1; unsigned MOS6kvGiven :1; unsigned MOS6nvGiven :1; unsigned MOS6kcGiven :1; unsigned MOS6ncGiven :1; unsigned MOS6nvthGiven :1; unsigned MOS6psGiven :1; unsigned MOS6gateSourceOverlapCapFactorGiven :1; unsigned MOS6gateDrainOverlapCapFactorGiven :1; unsigned MOS6gateBulkOverlapCapFactorGiven :1; unsigned MOS6vt0Given :1; unsigned MOS6capBDGiven :1; unsigned MOS6capBSGiven :1; unsigned MOS6bulkCapFactorGiven :1; unsigned MOS6sideWallCapFactorGiven :1; unsigned MOS6bulkJctPotentialGiven :1; unsigned MOS6bulkJctBotGradingCoeffGiven :1; unsigned MOS6bulkJctSideGradingCoeffGiven :1; unsigned MOS6fwdCapDepCoeffGiven :1; unsigned MOS6phiGiven :1; unsigned MOS6gammaGiven :1; unsigned MOS6gamma1Given :1; unsigned MOS6sigmaGiven :1; unsigned MOS6lambdaGiven :1; unsigned MOS6lamda0Given :1; unsigned MOS6lamda1Given :1; unsigned MOS6substrateDopingGiven :1; unsigned MOS6gateTypeGiven :1; unsigned MOS6surfaceStateDensityGiven :1; unsigned MOS6oxideThicknessGiven :1; unsigned MOS6surfaceMobilityGiven :1; unsigned MOS6tnomGiven :1; } MOS6model; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ /* device parameters */ enum { MOS6_W = 1, MOS6_L, MOS6_AS, MOS6_AD, MOS6_PS, MOS6_PD, MOS6_NRS, MOS6_NRD, MOS6_OFF, MOS6_IC, MOS6_IC_VBS, MOS6_IC_VDS, MOS6_IC_VGS, MOS6_W_SENS, MOS6_L_SENS, MOS6_CB, MOS6_CG, MOS6_CS, MOS6_POWER, MOS6_TEMP, MOS6_DTEMP, MOS6_M, }; /* model paramerers */ enum { MOS6_MOD_VTO = 101, MOS6_MOD_KV, MOS6_MOD_NV, MOS6_MOD_KC, MOS6_MOD_NC, MOS6_MOD_NVTH, MOS6_MOD_PS, MOS6_MOD_GAMMA, MOS6_MOD_GAMMA1, MOS6_MOD_SIGMA, MOS6_MOD_PHI, MOS6_MOD_LAMBDA, MOS6_MOD_LAMDA0, MOS6_MOD_LAMDA1, MOS6_MOD_RD, MOS6_MOD_RS, MOS6_MOD_CBD, MOS6_MOD_CBS, MOS6_MOD_IS, MOS6_MOD_PB, MOS6_MOD_CGSO, MOS6_MOD_CGDO, MOS6_MOD_CGBO, MOS6_MOD_CJ, MOS6_MOD_MJ, MOS6_MOD_CJSW, MOS6_MOD_MJSW, MOS6_MOD_JS, MOS6_MOD_TOX, MOS6_MOD_LD, MOS6_MOD_RSH, MOS6_MOD_U0, MOS6_MOD_FC, MOS6_MOD_NSUB, MOS6_MOD_TPG, MOS6_MOD_NSS, MOS6_MOD_NMOS, MOS6_MOD_PMOS, MOS6_MOD_TNOM, MOS6_MOD_TYPE, }; /* device questions */ enum { MOS6_CGS = 201, MOS6_CGD, MOS6_DNODE, MOS6_GNODE, MOS6_SNODE, MOS6_BNODE, MOS6_DNODEPRIME, MOS6_SNODEPRIME, MOS6_SOURCECONDUCT, MOS6_DRAINCONDUCT, MOS6_VON, MOS6_VDSAT, MOS6_SOURCEVCRIT, MOS6_DRAINVCRIT, MOS6_CD, MOS6_CBS, MOS6_CBD, MOS6_GMBS, MOS6_GM, MOS6_GDS, MOS6_GBD, MOS6_GBS, MOS6_CAPBD, MOS6_CAPBS, MOS6_CAPZEROBIASBD, MOS6_CAPZEROBIASBDSW, MOS6_CAPZEROBIASBS, MOS6_CAPZEROBIASBSSW, MOS6_VBD, MOS6_VBS, MOS6_VGS, MOS6_VDS, MOS6_CAPGS, MOS6_QGS, MOS6_CQGS, MOS6_CAPGD, MOS6_QGD, MOS6_CQGD, MOS6_CAPGB, MOS6_QGB, MOS6_CQGB, MOS6_QBD, MOS6_CQBD, MOS6_QBS, MOS6_CQBS, MOS6_L_SENS_REAL, MOS6_L_SENS_IMAG, MOS6_L_SENS_MAG, MOS6_L_SENS_PH, MOS6_L_SENS_CPLX, MOS6_W_SENS_REAL, MOS6_W_SENS_IMAG, MOS6_W_SENS_MAG, MOS6_W_SENS_PH, MOS6_W_SENS_CPLX, MOS6_L_SENS_DC, MOS6_W_SENS_DC, MOS6_SOURCERESIST, MOS6_DRAINRESIST, }; /* model questions */ #include "mos6ext.h" #endif /*MOS6*/ tmpk8ny_4pz/src/spicelib/devices/mos6/mos6itf.h0000644000175000017500000000034313546075722021607 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 T. Sakurai Modified: 1999 Paolo Nenzi **********/ #ifndef DEV_MOS6 #define DEV_MOS6 SPICEdev *get_mos6_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/mos6/mos6load.c0000644000175000017500000011263613546075722021750 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Takayasu Sakurai Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "mos6defs.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS6load(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current value into the * sparse matrix previously provided */ { MOS6model *model = (MOS6model *) inModel; MOS6instance *here; double betac; double DrainSatCur; double EffectiveLength; double GateBulkOverlapCap; double GateDrainOverlapCap; double GateSourceOverlapCap; double OxideCap; double SourceSatCur; double arg; double cbhat; double cdhat; double cdrain; double cdreq; double ceq; double ceqbd; double ceqbs; double ceqgb; double ceqgd; double ceqgs; double delvbd; double delvbs; double delvds; double delvgd; double delvgs; double evbd; double evbs; double gcgb; double gcgd; double gcgs; double geq; double sarg; double sargsw; double vbd; double vbs; double vds; double vdsat; double vgb1; double vgb; double vgd1; double vgd; double vgdo; double vgs1; double vgs; double von; double vt; #ifndef PREDICTOR double xfact = 0.0; #endif int xnrm; int xrev; double capgs = 0.0; /* total gate-source capacitance */ double capgd = 0.0; /* total gate-drain capacitance */ double capgb = 0.0; /* total gate-bulk capacitance */ int Check; #ifndef NOBYPASS double tempv; #endif /*NOBYPASS*/ int error; #ifdef CAPBYPASS int senflag; #endif /* CAPBYPASS */ int SenCond; double m; #ifdef CAPBYPASS senflag = 0; if(ckt->CKTsenInfo && ckt->CKTsenInfo->SENstatus == PERTURBATION && (ckt->CKTsenInfo->SENmode & (ACSEN | TRANSEN))) { senflag = 1; } #endif /* CAPBYPASS */ /* loop through all the MOS6 device models */ for( ; model != NULL; model = MOS6nextModel(model)) { /* loop through all the instances of the model */ for (here = MOS6instances(model); here != NULL ; here=MOS6nextInstance(here)) { vt = CONSTKoverQ * here->MOS6temp; Check=1; if(ckt->CKTsenInfo){ #ifdef SENSDEBUG printf("MOS6load \n"); #endif /* SENSDEBUG */ if((ckt->CKTsenInfo->SENstatus == PERTURBATION)&& (here->MOS6senPertFlag == OFF))continue; } SenCond = ckt->CKTsenInfo && here->MOS6senPertFlag; /* */ /* first, we compute a few useful values - these could be * pre-computed, but for historical reasons are still done * here. They may be moved at the expense of instance size */ EffectiveLength=here->MOS6l - 2*model->MOS6latDiff; if( (here->MOS6tSatCurDens == 0) || (here->MOS6drainArea == 0) || (here->MOS6sourceArea == 0)) { DrainSatCur = here->MOS6tSatCur; SourceSatCur = here->MOS6tSatCur; } else { DrainSatCur = here->MOS6tSatCurDens * here->MOS6drainArea; SourceSatCur = here->MOS6tSatCurDens * here->MOS6sourceArea; } GateSourceOverlapCap = model->MOS6gateSourceOverlapCapFactor * here->MOS6w; GateDrainOverlapCap = model->MOS6gateDrainOverlapCapFactor * here->MOS6w; GateBulkOverlapCap = model->MOS6gateBulkOverlapCapFactor * EffectiveLength; betac = here->MOS6tKc * here->MOS6w/EffectiveLength; OxideCap = model->MOS6oxideCapFactor * EffectiveLength * here->MOS6w; /* * ok - now to do the start-up operations * * we must get values for vbs, vds, and vgs from somewhere * so we either predict them or recover them from last iteration * These are the two most common cases - either a prediction * step or the general iteration step and they * share some code, so we put them first - others later on */ if(SenCond){ #ifdef SENSDEBUG printf("MOS6senPertFlag = ON \n"); #endif /* SENSDEBUG */ if((ckt->CKTsenInfo->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)) { vgs = *(ckt->CKTstate1 + here->MOS6vgs); vds = *(ckt->CKTstate1 + here->MOS6vds); vbs = *(ckt->CKTstate1 + here->MOS6vbs); vbd = *(ckt->CKTstate1 + here->MOS6vbd); vgb = vgs - vbs; vgd = vgs - vds; } else if (ckt->CKTsenInfo->SENmode == ACSEN){ vgb = model->MOS6type * ( *(ckt->CKTrhsOp+here->MOS6gNode) - *(ckt->CKTrhsOp+here->MOS6bNode)); vbs = *(ckt->CKTstate0 + here->MOS6vbs); vbd = *(ckt->CKTstate0 + here->MOS6vbd); vgd = vgb + vbd ; vgs = vgb + vbs ; vds = vbs - vbd ; } else{ vgs = *(ckt->CKTstate0 + here->MOS6vgs); vds = *(ckt->CKTstate0 + here->MOS6vds); vbs = *(ckt->CKTstate0 + here->MOS6vbs); vbd = *(ckt->CKTstate0 + here->MOS6vbd); vgb = vgs - vbs; vgd = vgs - vds; } #ifdef SENSDEBUG printf(" vbs = %.7e ,vbd = %.7e,vgb = %.7e\n",vbs,vbd,vgb); printf(" vgs = %.7e ,vds = %.7e,vgd = %.7e\n",vgs,vds,vgd); #endif /* SENSDEBUG */ goto next1; } if((ckt->CKTmode & (MODEINITFLOAT | MODEINITPRED | MODEINITSMSIG | MODEINITTRAN)) || ( (ckt->CKTmode & MODEINITFIX) && (!here->MOS6off) ) ) { #ifndef PREDICTOR if(ckt->CKTmode & (MODEINITPRED | MODEINITTRAN) ) { /* predictor step */ xfact=ckt->CKTdelta/ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->MOS6vbs) = *(ckt->CKTstate1 + here->MOS6vbs); vbs = (1+xfact)* (*(ckt->CKTstate1 + here->MOS6vbs)) -(xfact * (*(ckt->CKTstate2 + here->MOS6vbs))); *(ckt->CKTstate0 + here->MOS6vgs) = *(ckt->CKTstate1 + here->MOS6vgs); vgs = (1+xfact)* (*(ckt->CKTstate1 + here->MOS6vgs)) -(xfact * (*(ckt->CKTstate2 + here->MOS6vgs))); *(ckt->CKTstate0 + here->MOS6vds) = *(ckt->CKTstate1 + here->MOS6vds); vds = (1+xfact)* (*(ckt->CKTstate1 + here->MOS6vds)) -(xfact * (*(ckt->CKTstate2 + here->MOS6vds))); *(ckt->CKTstate0 + here->MOS6vbd) = *(ckt->CKTstate0 + here->MOS6vbs)- *(ckt->CKTstate0 + here->MOS6vds); } else { #endif /* PREDICTOR */ /* general iteration */ vbs = model->MOS6type * ( *(ckt->CKTrhsOld+here->MOS6bNode) - *(ckt->CKTrhsOld+here->MOS6sNodePrime)); vgs = model->MOS6type * ( *(ckt->CKTrhsOld+here->MOS6gNode) - *(ckt->CKTrhsOld+here->MOS6sNodePrime)); vds = model->MOS6type * ( *(ckt->CKTrhsOld+here->MOS6dNodePrime) - *(ckt->CKTrhsOld+here->MOS6sNodePrime)); #ifndef PREDICTOR } #endif /* PREDICTOR */ /* now some common crunching for some more useful quantities */ vbd=vbs-vds; vgd=vgs-vds; vgdo = *(ckt->CKTstate0 + here->MOS6vgs) - *(ckt->CKTstate0 + here->MOS6vds); delvbs = vbs - *(ckt->CKTstate0 + here->MOS6vbs); delvbd = vbd - *(ckt->CKTstate0 + here->MOS6vbd); delvgs = vgs - *(ckt->CKTstate0 + here->MOS6vgs); delvds = vds - *(ckt->CKTstate0 + here->MOS6vds); delvgd = vgd-vgdo; /* these are needed for convergence testing */ if (here->MOS6mode >= 0) { cdhat= here->MOS6cd- here->MOS6gbd * delvbd + here->MOS6gmbs * delvbs + here->MOS6gm * delvgs + here->MOS6gds * delvds ; } else { cdhat= here->MOS6cd - ( here->MOS6gbd - here->MOS6gmbs) * delvbd - here->MOS6gm * delvgd + here->MOS6gds * delvds ; } cbhat= here->MOS6cbs + here->MOS6cbd + here->MOS6gbd * delvbd + here->MOS6gbs * delvbs ; /* */ #ifndef NOBYPASS /* now lets see if we can bypass (ugh) */ /* the following mess should be one if statement, but * many compilers can't handle it all at once, so it * is split into several successive if statements */ tempv = MAX(fabs(cbhat),fabs(here->MOS6cbs + here->MOS6cbd))+ckt->CKTabstol; if((!(ckt->CKTmode & (MODEINITPRED|MODEINITTRAN|MODEINITSMSIG) )) && (ckt->CKTbypass) ) if ( (fabs(cbhat-(here->MOS6cbs + here->MOS6cbd)) < ckt->CKTreltol * tempv)) if( (fabs(delvbs) < (ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->MOS6vbs)))+ ckt->CKTvoltTol))) if ( (fabs(delvbd) < (ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0+here->MOS6vbd)))+ ckt->CKTvoltTol)) ) if( (fabs(delvgs) < (ckt->CKTreltol * MAX(fabs(vgs), fabs(*(ckt->CKTstate0+here->MOS6vgs)))+ ckt->CKTvoltTol))) if ( (fabs(delvds) < (ckt->CKTreltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0+here->MOS6vds)))+ ckt->CKTvoltTol)) ) if( (fabs(cdhat- here->MOS6cd) < ckt->CKTreltol * MAX(fabs(cdhat),fabs( here->MOS6cd)) + ckt->CKTabstol) ) { /* bypass code * * nothing interesting has changed since last * iteration on this device, so we just * copy all the values computed last iteration out * and keep going */ vbs = *(ckt->CKTstate0 + here->MOS6vbs); vbd = *(ckt->CKTstate0 + here->MOS6vbd); vgs = *(ckt->CKTstate0 + here->MOS6vgs); vds = *(ckt->CKTstate0 + here->MOS6vds); vgd = vgs - vds; vgb = vgs - vbs; cdrain = here->MOS6mode * (here->MOS6cd + here->MOS6cbd); if(ckt->CKTmode & (MODETRAN | MODETRANOP)) { capgs = ( *(ckt->CKTstate0+here->MOS6capgs)+ *(ckt->CKTstate1+here->MOS6capgs) + GateSourceOverlapCap ); capgd = ( *(ckt->CKTstate0+here->MOS6capgd)+ *(ckt->CKTstate1+here->MOS6capgd) + GateDrainOverlapCap ); capgb = ( *(ckt->CKTstate0+here->MOS6capgb)+ *(ckt->CKTstate1+here->MOS6capgb) + GateBulkOverlapCap ); if(ckt->CKTsenInfo){ here->MOS6cgs = capgs; here->MOS6cgd = capgd; here->MOS6cgb = capgb; } } goto bypass; } #endif /*NOBYPASS*/ /* */ /* ok - bypass is out, do it the hard way */ von = model->MOS6type * here->MOS6von; #ifndef NODELIMITING /* * limiting * we want to keep device voltages from changing * so fast that the exponentials churn out overflows * and similar rudeness */ if(*(ckt->CKTstate0 + here->MOS6vds) >=0) { vgs = DEVfetlim(vgs,*(ckt->CKTstate0 + here->MOS6vgs) ,von); vds = vgs - vgd; vds = DEVlimvds(vds,*(ckt->CKTstate0 + here->MOS6vds)); vgd = vgs - vds; } else { vgd = DEVfetlim(vgd,vgdo,von); vds = vgs - vgd; if(!(ckt->CKTfixLimit)) { vds = -DEVlimvds(-vds,-(*(ckt->CKTstate0 + here->MOS6vds))); } vgs = vgd + vds; } if(vds >= 0) { vbs = DEVpnjlim(vbs,*(ckt->CKTstate0 + here->MOS6vbs), vt,here->MOS6sourceVcrit,&Check); vbd = vbs-vds; } else { vbd = DEVpnjlim(vbd,*(ckt->CKTstate0 + here->MOS6vbd), vt,here->MOS6drainVcrit,&Check); vbs = vbd + vds; } #endif /*NODELIMITING*/ /* */ } else { /* ok - not one of the simple cases, so we have to * look at all of the possibilities for why we were * called. We still just initialize the three voltages */ if((ckt->CKTmode & MODEINITJCT) && !here->MOS6off) { vds= model->MOS6type * here->MOS6icVDS; vgs= model->MOS6type * here->MOS6icVGS; vbs= model->MOS6type * here->MOS6icVBS; if((vds==0) && (vgs==0) && (vbs==0) && ((ckt->CKTmode & (MODETRAN|MODEDCOP|MODEDCTRANCURVE)) || (!(ckt->CKTmode & MODEUIC)))) { vbs = -1; vgs = model->MOS6type * here->MOS6tVto; vds = 0; } } else { vbs=vgs=vds=0; } } /* */ /* * now all the preliminaries are over - we can start doing the * real work */ vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; /* * bulk-source and bulk-drain diodes * here we just evaluate the ideal diode current and the * corresponding derivative (conductance). */ next1: if(vbs <= -3*vt) { here->MOS6gbs = ckt->CKTgmin; here->MOS6cbs = here->MOS6gbs*vbs-SourceSatCur; } else { evbs = exp(MIN(MAX_EXP_ARG,vbs/vt)); here->MOS6gbs = SourceSatCur*evbs/vt + ckt->CKTgmin; here->MOS6cbs = SourceSatCur*(evbs-1) + ckt->CKTgmin*vbs; } if(vbd <= -3*vt) { here->MOS6gbd = ckt->CKTgmin; here->MOS6cbd = here->MOS6gbd*vbd-DrainSatCur; } else { evbd = exp(MIN(MAX_EXP_ARG,vbd/vt)); here->MOS6gbd = DrainSatCur*evbd/vt + ckt->CKTgmin; here->MOS6cbd = DrainSatCur*(evbd-1) + ckt->CKTgmin*vbd; } /* now to determine whether the user was able to correctly * identify the source and drain of his device */ if(vds >= 0) { /* normal mode */ here->MOS6mode = 1; } else { /* inverse mode */ here->MOS6mode = -1; } /* */ { /* * this block of code evaluates the drain current and its * derivatives using the n-th power MOS model and the * charges associated with the gate, channel and bulk for * mosfets * */ /* the following 14 variables are local to this code block until * it is obvious that they can be made global */ double arg; double sarg; double vgon; double vdshere, vbsvbd; double idsat, lambda, vonbm = 0.0; double vdst, vdst2, ivdst1, vdstg; vbsvbd = (here->MOS6mode==1?vbs:vbd); if (vbsvbd <= 0 ) { sarg = sqrt(here->MOS6tPhi - vbsvbd); } else { sarg = sqrt(here->MOS6tPhi); sarg = sarg - vbsvbd / (sarg+sarg); sarg = MAX(0,sarg); } vdshere = vds * here->MOS6mode; von=(here->MOS6tVbi*model->MOS6type)+model->MOS6gamma*sarg - model->MOS6gamma1 * vbsvbd - model->MOS6sigma * vdshere; vgon = (here->MOS6mode==1?vgs:vgd) - von; if (vgon <= 0) { /* * cutoff region */ vdsat = 0; cdrain=0; here->MOS6gm=0; here->MOS6gds=0; here->MOS6gmbs=0; } else { if (sarg <= 0) { arg=0; } else { if ((here->MOS6mode==1?vbs:vbd) <= 0 ) { vonbm = model->MOS6gamma1 + model->MOS6gamma / (sarg + sarg); } else { vonbm = model->MOS6gamma1 + model->MOS6gamma / 2 / sqrt(here->MOS6tPhi); } } sarg = log(vgon); vdsat = model->MOS6kv * exp(sarg * model->MOS6nv); idsat = betac * exp(sarg * model->MOS6nc); lambda = model->MOS6lamda0 - model->MOS6lamda1 * vbsvbd; /* * saturation region */ cdrain = idsat * (1 + lambda * vdshere); here->MOS6gm = cdrain * model->MOS6nc / vgon; here->MOS6gds = here->MOS6gm * model->MOS6sigma + idsat * lambda; here->MOS6gmbs = here->MOS6gm * vonbm - idsat * model->MOS6lamda1 * vdshere; if (vdsat > vdshere){ /* * linear region */ vdst = vdshere / vdsat; vdst2 = (2 - vdst) * vdst; vdstg = - vdst * model->MOS6nv / vgon; ivdst1 = cdrain * (2 - vdst - vdst); cdrain = cdrain * vdst2; here->MOS6gm = here->MOS6gm * vdst2 + ivdst1 * vdstg; here->MOS6gds = here->MOS6gds * vdst2 + ivdst1 * (1 / vdsat + vdstg * model->MOS6sigma); here->MOS6gmbs = here->MOS6gmbs * vdst2 + ivdst1 * vdstg * vonbm; } } /* * finished */ } /* */ /* now deal with n vs p polarity */ here->MOS6von = model->MOS6type * von; here->MOS6vdsat = model->MOS6type * vdsat; /* line 490 */ /* * COMPUTE EQUIVALENT DRAIN CURRENT SOURCE */ here->MOS6cd=here->MOS6mode * cdrain - here->MOS6cbd; if (ckt->CKTmode & (MODETRAN | MODETRANOP | MODEINITSMSIG)) { /* * now we do the hard part of the bulk-drain and bulk-source * diode - we evaluate the non-linear capacitance and * charge * * the basic equations are not hard, but the implementation * is somewhat long in an attempt to avoid log/exponential * evaluations */ /* * charge storage elements * *.. bulk-drain and bulk-source depletion capacitances */ #ifdef CAPBYPASS if(((ckt->CKTmode & (MODEINITPRED | MODEINITTRAN) ) || fabs(delvbs) >= ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->MOS6vbs)))+ ckt->CKTvoltTol)|| senflag) #endif /*CAPBYPASS*/ { /* can't bypass the diode capacitance calculations */ if(here->MOS6Cbs != 0 || here->MOS6Cbssw != 0 ) { if (vbs < here->MOS6tDepCap){ arg=1-vbs/here->MOS6tBulkPot; /* * the following block looks somewhat long and messy, * but since most users use the default grading * coefficients of .5, and sqrt is MUCH faster than an * exp(log()) we use this special case code to buy time. * (as much as 10% of total job time!) */ if(model->MOS6bulkJctBotGradingCoeff == model->MOS6bulkJctSideGradingCoeff) { if(model->MOS6bulkJctBotGradingCoeff == .5) { sarg = sargsw = 1/sqrt(arg); } else { sarg = sargsw = exp(-model->MOS6bulkJctBotGradingCoeff* log(arg)); } } else { if(model->MOS6bulkJctBotGradingCoeff == .5) { sarg = 1/sqrt(arg); } else { sarg = exp(-model->MOS6bulkJctBotGradingCoeff* log(arg)); } if(model->MOS6bulkJctSideGradingCoeff == .5) { sargsw = 1/sqrt(arg); } else { sargsw =exp(-model->MOS6bulkJctSideGradingCoeff* log(arg)); } } *(ckt->CKTstate0 + here->MOS6qbs) = here->MOS6tBulkPot*(here->MOS6Cbs* (1-arg*sarg)/(1-model->MOS6bulkJctBotGradingCoeff) +here->MOS6Cbssw* (1-arg*sargsw)/ (1-model->MOS6bulkJctSideGradingCoeff)); here->MOS6capbs=here->MOS6Cbs*sarg+ here->MOS6Cbssw*sargsw; } else { *(ckt->CKTstate0 + here->MOS6qbs) = here->MOS6f4s + vbs*(here->MOS6f2s+vbs*(here->MOS6f3s/2)); here->MOS6capbs=here->MOS6f2s+here->MOS6f3s*vbs; } } else { *(ckt->CKTstate0 + here->MOS6qbs) = 0; here->MOS6capbs=0; } } #ifdef CAPBYPASS if(((ckt->CKTmode & (MODEINITPRED | MODEINITTRAN) ) || fabs(delvbd) >= ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0+here->MOS6vbd)))+ ckt->CKTvoltTol)|| senflag) #endif /*CAPBYPASS*/ /* can't bypass the diode capacitance calculations */ { if(here->MOS6Cbd != 0 || here->MOS6Cbdsw != 0 ) { if (vbd < here->MOS6tDepCap) { arg=1-vbd/here->MOS6tBulkPot; /* * the following block looks somewhat long and messy, * but since most users use the default grading * coefficients of .5, and sqrt is MUCH faster than an * exp(log()) we use this special case code to buy time. * (as much as 10% of total job time!) */ if(model->MOS6bulkJctBotGradingCoeff == .5 && model->MOS6bulkJctSideGradingCoeff == .5) { sarg = sargsw = 1/sqrt(arg); } else { if(model->MOS6bulkJctBotGradingCoeff == .5) { sarg = 1/sqrt(arg); } else { sarg = exp(-model->MOS6bulkJctBotGradingCoeff* log(arg)); } if(model->MOS6bulkJctSideGradingCoeff == .5) { sargsw = 1/sqrt(arg); } else { sargsw =exp(-model->MOS6bulkJctSideGradingCoeff* log(arg)); } } *(ckt->CKTstate0 + here->MOS6qbd) = here->MOS6tBulkPot*(here->MOS6Cbd* (1-arg*sarg) /(1-model->MOS6bulkJctBotGradingCoeff) +here->MOS6Cbdsw* (1-arg*sargsw) /(1-model->MOS6bulkJctSideGradingCoeff)); here->MOS6capbd=here->MOS6Cbd*sarg+ here->MOS6Cbdsw*sargsw; } else { *(ckt->CKTstate0 + here->MOS6qbd) = here->MOS6f4d + vbd * (here->MOS6f2d + vbd * here->MOS6f3d/2); here->MOS6capbd=here->MOS6f2d + vbd * here->MOS6f3d; } } else { *(ckt->CKTstate0 + here->MOS6qbd) = 0; here->MOS6capbd = 0; } } /* */ if(SenCond && (ckt->CKTsenInfo->SENmode==TRANSEN)) goto next2; if ( ckt->CKTmode & MODETRAN ) { /* (above only excludes tranop, since we're only at this * point if tran or tranop ) */ /* * calculate equivalent conductances and currents for * depletion capacitors */ /* integrate the capacitors and save results */ error = NIintegrate(ckt,&geq,&ceq,here->MOS6capbd, here->MOS6qbd); if(error) return(error); here->MOS6gbd += geq; here->MOS6cbd += *(ckt->CKTstate0 + here->MOS6cqbd); here->MOS6cd -= *(ckt->CKTstate0 + here->MOS6cqbd); error = NIintegrate(ckt,&geq,&ceq,here->MOS6capbs, here->MOS6qbs); if(error) return(error); here->MOS6gbs += geq; here->MOS6cbs += *(ckt->CKTstate0 + here->MOS6cqbs); } } /* */ if(SenCond) goto next2; /* * check convergence */ if ( (here->MOS6off == 0) || (!(ckt->CKTmode & (MODEINITFIX|MODEINITSMSIG))) ){ if (Check == 1) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; } } /* */ /* save things away for next time */ next2: *(ckt->CKTstate0 + here->MOS6vbs) = vbs; *(ckt->CKTstate0 + here->MOS6vbd) = vbd; *(ckt->CKTstate0 + here->MOS6vgs) = vgs; *(ckt->CKTstate0 + here->MOS6vds) = vds; /* */ /* * meyer's capacitor model */ if ( ckt->CKTmode & (MODETRAN | MODETRANOP | MODEINITSMSIG) ) { /* * calculate meyer's capacitors */ /* * new cmeyer - this just evaluates at the current time, * expects you to remember values from previous time * returns 1/2 of non-constant portion of capacitance * you must add in the other half from previous time * and the constant part */ if (here->MOS6mode > 0){ DEVqmeyer (vgs,vgd,vgb,von,vdsat, (ckt->CKTstate0 + here->MOS6capgs), (ckt->CKTstate0 + here->MOS6capgd), (ckt->CKTstate0 + here->MOS6capgb), here->MOS6tPhi,OxideCap); } else { DEVqmeyer (vgd,vgs,vgb,von,vdsat, (ckt->CKTstate0 + here->MOS6capgd), (ckt->CKTstate0 + here->MOS6capgs), (ckt->CKTstate0 + here->MOS6capgb), here->MOS6tPhi,OxideCap); } vgs1 = *(ckt->CKTstate1 + here->MOS6vgs); vgd1 = vgs1 - *(ckt->CKTstate1 + here->MOS6vds); vgb1 = vgs1 - *(ckt->CKTstate1 + here->MOS6vbs); if(ckt->CKTmode & (MODETRANOP|MODEINITSMSIG)) { capgs = 2 * *(ckt->CKTstate0+here->MOS6capgs)+ GateSourceOverlapCap ; capgd = 2 * *(ckt->CKTstate0+here->MOS6capgd)+ GateDrainOverlapCap ; capgb = 2 * *(ckt->CKTstate0+here->MOS6capgb)+ GateBulkOverlapCap ; } else { capgs = ( *(ckt->CKTstate0+here->MOS6capgs)+ *(ckt->CKTstate1+here->MOS6capgs) + GateSourceOverlapCap ); capgd = ( *(ckt->CKTstate0+here->MOS6capgd)+ *(ckt->CKTstate1+here->MOS6capgd) + GateDrainOverlapCap ); capgb = ( *(ckt->CKTstate0+here->MOS6capgb)+ *(ckt->CKTstate1+here->MOS6capgb) + GateBulkOverlapCap ); } if(ckt->CKTsenInfo){ here->MOS6cgs = capgs; here->MOS6cgd = capgd; here->MOS6cgb = capgb; } /* */ /* * store small-signal parameters (for meyer's model) * all parameters already stored, so done... */ if(SenCond){ if((ckt->CKTsenInfo->SENmode == DCSEN)|| (ckt->CKTsenInfo->SENmode == ACSEN)){ continue; } } #ifndef PREDICTOR if (ckt->CKTmode & (MODEINITPRED | MODEINITTRAN) ) { *(ckt->CKTstate0 + here->MOS6qgs) = (1+xfact) * *(ckt->CKTstate1 + here->MOS6qgs) - xfact * *(ckt->CKTstate2 + here->MOS6qgs); *(ckt->CKTstate0 + here->MOS6qgd) = (1+xfact) * *(ckt->CKTstate1 + here->MOS6qgd) - xfact * *(ckt->CKTstate2 + here->MOS6qgd); *(ckt->CKTstate0 + here->MOS6qgb) = (1+xfact) * *(ckt->CKTstate1 + here->MOS6qgb) - xfact * *(ckt->CKTstate2 + here->MOS6qgb); } else { #endif /*PREDICTOR*/ if(ckt->CKTmode & MODETRAN) { *(ckt->CKTstate0 + here->MOS6qgs) = (vgs-vgs1)*capgs + *(ckt->CKTstate1 + here->MOS6qgs) ; *(ckt->CKTstate0 + here->MOS6qgd) = (vgd-vgd1)*capgd + *(ckt->CKTstate1 + here->MOS6qgd) ; *(ckt->CKTstate0 + here->MOS6qgb) = (vgb-vgb1)*capgb + *(ckt->CKTstate1 + here->MOS6qgb) ; } else { /* TRANOP only */ *(ckt->CKTstate0 + here->MOS6qgs) = vgs*capgs; *(ckt->CKTstate0 + here->MOS6qgd) = vgd*capgd; *(ckt->CKTstate0 + here->MOS6qgb) = vgb*capgb; } #ifndef PREDICTOR } #endif /*PREDICTOR*/ } #ifndef NOBYPASS bypass: #endif if(SenCond) continue; if ( (ckt->CKTmode & (MODEINITTRAN)) || (! (ckt->CKTmode & (MODETRAN)) ) ) { /* * initialize to zero charge conductances * and current */ gcgs=0; ceqgs=0; gcgd=0; ceqgd=0; gcgb=0; ceqgb=0; } else { if(capgs == 0) *(ckt->CKTstate0 + here->MOS6cqgs) =0; if(capgd == 0) *(ckt->CKTstate0 + here->MOS6cqgd) =0; if(capgb == 0) *(ckt->CKTstate0 + here->MOS6cqgb) =0; /* * calculate equivalent conductances and currents for * meyer"s capacitors */ error = NIintegrate(ckt,&gcgs,&ceqgs,capgs,here->MOS6qgs); if(error) return(error); error = NIintegrate(ckt,&gcgd,&ceqgd,capgd,here->MOS6qgd); if(error) return(error); error = NIintegrate(ckt,&gcgb,&ceqgb,capgb,here->MOS6qgb); if(error) return(error); ceqgs=ceqgs-gcgs*vgs+ckt->CKTag[0]* *(ckt->CKTstate0 + here->MOS6qgs); ceqgd=ceqgd-gcgd*vgd+ckt->CKTag[0]* *(ckt->CKTstate0 + here->MOS6qgd); ceqgb=ceqgb-gcgb*vgb+ckt->CKTag[0]* *(ckt->CKTstate0 + here->MOS6qgb); } /* * store charge storage info for meyer's cap in lx table */ /* * load current vector */ m = here->MOS6m; ceqbs = model->MOS6type * (here->MOS6cbs-(here->MOS6gbs)*vbs); ceqbd = model->MOS6type * (here->MOS6cbd-(here->MOS6gbd)*vbd); if (here->MOS6mode >= 0) { xnrm=1; xrev=0; cdreq=model->MOS6type*(cdrain-here->MOS6gds*vds- here->MOS6gm*vgs-here->MOS6gmbs*vbs); } else { xnrm=0; xrev=1; cdreq = -(model->MOS6type)*(cdrain-here->MOS6gds*(-vds)- here->MOS6gm*vgd-here->MOS6gmbs*vbd); } *(ckt->CKTrhs + here->MOS6gNode) -= m * (model->MOS6type * (ceqgs + ceqgb + ceqgd)); *(ckt->CKTrhs + here->MOS6bNode) -= m * (ceqbs + ceqbd - model->MOS6type * ceqgb); *(ckt->CKTrhs + here->MOS6dNodePrime) += m * (ceqbd - cdreq + model->MOS6type * ceqgd); *(ckt->CKTrhs + here->MOS6sNodePrime) += m * (cdreq + ceqbs + model->MOS6type * ceqgs); /* * load y matrix */ *(here->MOS6DdPtr) += m * (here->MOS6drainConductance); *(here->MOS6GgPtr) += m * ((gcgd+gcgs+gcgb)); *(here->MOS6SsPtr) += m * (here->MOS6sourceConductance); *(here->MOS6BbPtr) += m * (here->MOS6gbd+here->MOS6gbs+gcgb); *(here->MOS6DPdpPtr) += m * (here->MOS6drainConductance+here->MOS6gds+ here->MOS6gbd+xrev*(here->MOS6gm+here->MOS6gmbs)+gcgd); *(here->MOS6SPspPtr) += m * (here->MOS6sourceConductance+here->MOS6gds+ here->MOS6gbs+xnrm*(here->MOS6gm+here->MOS6gmbs)+gcgs); *(here->MOS6DdpPtr) += m * (-here->MOS6drainConductance); *(here->MOS6GbPtr) -= m * gcgb; *(here->MOS6GdpPtr) -= m * gcgd; *(here->MOS6GspPtr) -= m * gcgs; *(here->MOS6SspPtr) += m * (-here->MOS6sourceConductance); *(here->MOS6BgPtr) -= m * gcgb; *(here->MOS6BdpPtr) -= m * (here->MOS6gbd); *(here->MOS6BspPtr) -= m * (here->MOS6gbs); *(here->MOS6DPdPtr) += m * (-here->MOS6drainConductance); *(here->MOS6DPgPtr) += m * ((xnrm-xrev)*here->MOS6gm-gcgd); *(here->MOS6DPbPtr) += m * (-here->MOS6gbd+(xnrm-xrev)*here->MOS6gmbs); *(here->MOS6DPspPtr) += m * (-here->MOS6gds-xnrm* (here->MOS6gm+here->MOS6gmbs)); *(here->MOS6SPgPtr) += m * (-(xnrm-xrev)*here->MOS6gm-gcgs); *(here->MOS6SPsPtr) += m * (-here->MOS6sourceConductance); *(here->MOS6SPbPtr) += m * (-here->MOS6gbs-(xnrm-xrev)*here->MOS6gmbs); *(here->MOS6SPdpPtr) += m * (-here->MOS6gds-xrev* (here->MOS6gm+here->MOS6gmbs)); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos6/mos6par.c0000644000175000017500000000656613546075722021617 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Takayasu Sakurai **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "mos6defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int MOS6param(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { MOS6instance *here = (MOS6instance *)inst; NG_IGNORE(select); switch(param) { case MOS6_TEMP: here->MOS6temp = value->rValue+CONSTCtoK; here->MOS6tempGiven = TRUE; break; case MOS6_DTEMP: here->MOS6dtemp = value->rValue; here->MOS6dtempGiven = TRUE; break; case MOS6_W: here->MOS6w = value->rValue; here->MOS6wGiven = TRUE; break; case MOS6_L: here->MOS6l = value->rValue; here->MOS6lGiven = TRUE; break; case MOS6_M: here->MOS6m = value->rValue; here->MOS6mGiven = TRUE; break; case MOS6_AS: here->MOS6sourceArea = value->rValue; here->MOS6sourceAreaGiven = TRUE; break; case MOS6_AD: here->MOS6drainArea = value->rValue; here->MOS6drainAreaGiven = TRUE; break; case MOS6_PS: here->MOS6sourcePerimiter = value->rValue; here->MOS6sourcePerimiterGiven = TRUE; break; case MOS6_PD: here->MOS6drainPerimiter = value->rValue; here->MOS6drainPerimiterGiven = TRUE; break; case MOS6_NRS: here->MOS6sourceSquares = value->rValue; here->MOS6sourceSquaresGiven = TRUE; break; case MOS6_NRD: here->MOS6drainSquares = value->rValue; here->MOS6drainSquaresGiven = TRUE; break; case MOS6_OFF: here->MOS6off = (value->iValue != 0); break; case MOS6_IC_VBS: here->MOS6icVBS = value->rValue; here->MOS6icVBSGiven = TRUE; break; case MOS6_IC_VDS: here->MOS6icVDS = value->rValue; here->MOS6icVDSGiven = TRUE; break; case MOS6_IC_VGS: here->MOS6icVGS = value->rValue; here->MOS6icVGSGiven = TRUE; break; case MOS6_IC: switch(value->v.numValue){ case 3: here->MOS6icVBS = *(value->v.vec.rVec+2); here->MOS6icVBSGiven = TRUE; case 2: here->MOS6icVGS = *(value->v.vec.rVec+1); here->MOS6icVGSGiven = TRUE; case 1: here->MOS6icVDS = *(value->v.vec.rVec); here->MOS6icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; case MOS6_L_SENS: if(value->iValue) { here->MOS6senParmNo = 1; here->MOS6sens_l = 1; } break; case MOS6_W_SENS: if(value->iValue) { here->MOS6senParmNo = 1; here->MOS6sens_w = 1; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos6/mos6conv.c0000644000175000017500000000634613546075722021776 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Takayasu Sakurai **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mos6defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS6convTest(GENmodel *inModel, CKTcircuit *ckt) { MOS6model *model = (MOS6model*)inModel; MOS6instance *here; double delvbs; double delvbd; double delvgs; double delvds; double delvgd; double cbhat; double cdhat; double vbs; double vbd; double vgs; double vds; double vgd; double vgdo; double tol; for( ; model != NULL; model = MOS6nextModel(model)) { for(here = MOS6instances(model); here!= NULL; here = MOS6nextInstance(here)) { vbs = model->MOS6type * ( *(ckt->CKTrhs+here->MOS6bNode) - *(ckt->CKTrhs+here->MOS6sNodePrime)); vgs = model->MOS6type * ( *(ckt->CKTrhs+here->MOS6gNode) - *(ckt->CKTrhs+here->MOS6sNodePrime)); vds = model->MOS6type * ( *(ckt->CKTrhs+here->MOS6dNodePrime) - *(ckt->CKTrhs+here->MOS6sNodePrime)); vbd=vbs-vds; vgd=vgs-vds; vgdo = *(ckt->CKTstate0 + here->MOS6vgs) - *(ckt->CKTstate0 + here->MOS6vds); delvbs = vbs - *(ckt->CKTstate0 + here->MOS6vbs); delvbd = vbd - *(ckt->CKTstate0 + here->MOS6vbd); delvgs = vgs - *(ckt->CKTstate0 + here->MOS6vgs); delvds = vds - *(ckt->CKTstate0 + here->MOS6vds); delvgd = vgd-vgdo; /* these are needed for convergence testing */ if (here->MOS6mode >= 0) { cdhat= here->MOS6cd- here->MOS6gbd * delvbd + here->MOS6gmbs * delvbs + here->MOS6gm * delvgs + here->MOS6gds * delvds ; } else { cdhat= here->MOS6cd - ( here->MOS6gbd - here->MOS6gmbs) * delvbd - here->MOS6gm * delvgd + here->MOS6gds * delvds ; } cbhat= here->MOS6cbs + here->MOS6cbd + here->MOS6gbd * delvbd + here->MOS6gbs * delvbs ; /* * check convergence */ tol=ckt->CKTreltol*MAX(fabs(cdhat),fabs(here->MOS6cd))+ ckt->CKTabstol; if (fabs(cdhat-here->MOS6cd) >= tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue, we haven't converged */ } else { tol=ckt->CKTreltol* MAX(fabs(cbhat),fabs(here->MOS6cbs+here->MOS6cbd))+ ckt->CKTabstol; if (fabs(cbhat-(here->MOS6cbs+here->MOS6cbd)) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue, we haven't converged*/ } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos6/mos6init.c0000644000175000017500000000317013546075722021764 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "mos6itf.h" #include "mos6ext.h" #include "mos6init.h" SPICEdev MOS6info = { .DEVpublic = { .name = "Mos6", .description = "Level 6 MOSfet model with Meyer capacitance model", .terms = &MOS6nSize, .numNames = &MOS6nSize, .termNames = MOS6names, .numInstanceParms = &MOS6pTSize, .instanceParms = MOS6pTable, .numModelParms = &MOS6mPTSize, .modelParms = MOS6mPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = MOS6param, .DEVmodParam = MOS6mParam, .DEVload = MOS6load, .DEVsetup = MOS6setup, .DEVunsetup = MOS6unsetup, .DEVpzSetup = NULL, .DEVtemperature = MOS6temp, .DEVtrunc = MOS6trunc, .DEVfindBranch = NULL, .DEVacLoad = NULL, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = MOS6delete, .DEVsetic = MOS6getic, .DEVask = MOS6ask, .DEVmodAsk = MOS6mAsk, .DEVpzLoad = NULL, .DEVconvTest = MOS6convTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &MOS6iSize, .DEVmodSize = &MOS6mSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_mos6_info(void) { return &MOS6info; } tmpk8ny_4pz/src/spicelib/devices/mos6/mos6mask.c0000644000175000017500000001032213546075722021751 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1989 Takayasu Sakurai **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "mos6defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS6mAsk(CKTcircuit *ckt, GENmodel *inModel, int param, IFvalue *value) { MOS6model *model = (MOS6model *)inModel; NG_IGNORE(ckt); switch(param) { case MOS6_MOD_TNOM: value->rValue = model->MOS6tnom; break; case MOS6_MOD_VTO: value->rValue = model->MOS6vt0; break; case MOS6_MOD_KV: value->rValue = model->MOS6kv; break; case MOS6_MOD_NV: value->rValue = model->MOS6nv; break; case MOS6_MOD_KC: value->rValue = model->MOS6kc; break; case MOS6_MOD_NC: value->rValue = model->MOS6nc; break; case MOS6_MOD_NVTH: value->rValue = model->MOS6nvth; break; case MOS6_MOD_PS: value->rValue = model->MOS6ps; break; case MOS6_MOD_GAMMA: value->rValue = model->MOS6gamma; break; case MOS6_MOD_GAMMA1: value->rValue = model->MOS6gamma1; break; case MOS6_MOD_SIGMA: value->rValue = model->MOS6sigma; break; case MOS6_MOD_PHI: value->rValue = model->MOS6phi; break; case MOS6_MOD_LAMBDA: value->rValue = model->MOS6lambda; break; case MOS6_MOD_LAMDA0: value->rValue = model->MOS6lamda0; break; case MOS6_MOD_LAMDA1: value->rValue = model->MOS6lamda1; break; case MOS6_MOD_RD: value->rValue = model->MOS6drainResistance; break; case MOS6_MOD_RS: value->rValue = model->MOS6sourceResistance; break; case MOS6_MOD_CBD: value->rValue = model->MOS6capBD; break; case MOS6_MOD_CBS: value->rValue = model->MOS6capBS; break; case MOS6_MOD_IS: value->rValue = model->MOS6jctSatCur; break; case MOS6_MOD_PB: value->rValue = model->MOS6bulkJctPotential; break; case MOS6_MOD_CGSO: value->rValue = model->MOS6gateSourceOverlapCapFactor; break; case MOS6_MOD_CGDO: value->rValue = model->MOS6gateDrainOverlapCapFactor; break; case MOS6_MOD_CGBO: value->rValue = model->MOS6gateBulkOverlapCapFactor; break; case MOS6_MOD_CJ: value->rValue = model->MOS6bulkCapFactor; break; case MOS6_MOD_MJ: value->rValue = model->MOS6bulkJctBotGradingCoeff; break; case MOS6_MOD_CJSW: value->rValue = model->MOS6sideWallCapFactor; break; case MOS6_MOD_MJSW: value->rValue = model->MOS6bulkJctSideGradingCoeff; break; case MOS6_MOD_JS: value->rValue = model->MOS6jctSatCurDensity; break; case MOS6_MOD_TOX: value->rValue = model->MOS6oxideThickness; break; case MOS6_MOD_LD: value->rValue = model->MOS6latDiff; break; case MOS6_MOD_RSH: value->rValue = model->MOS6sheetResistance; break; case MOS6_MOD_U0: value->rValue = model->MOS6surfaceMobility; break; case MOS6_MOD_FC: value->rValue = model->MOS6fwdCapDepCoeff; break; case MOS6_MOD_NSS: value->rValue = model->MOS6surfaceStateDensity; break; case MOS6_MOD_NSUB: value->rValue = model->MOS6substrateDoping; break; case MOS6_MOD_TPG: value->iValue = model->MOS6gateType; break; case MOS6_MOD_TYPE: if (model->MOS6type > 0) value->sValue = "nmos"; else value->sValue = "pmos"; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mos6/mos6init.h0000644000175000017500000000037013546075722021770 0ustar carstencarsten#ifndef _MOS6INIT_H #define _MOS6INIT_H extern IFparm MOS6pTable[ ]; extern IFparm MOS6mPTable[ ]; extern char *MOS6names[ ]; extern int MOS6nSize; extern int MOS6pTSize; extern int MOS6mPTSize; extern int MOS6iSize; extern int MOS6mSize; #endif tmpk8ny_4pz/src/spicelib/devices/mos6/mos6del.c0000644000175000017500000000057313546075722021571 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "mos6defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MOS6delete(GENinstance *gen_inst) { MOS6instance *inst = (MOS6instance *) gen_inst; FREE(inst->MOS6sens); return OK; } tmpk8ny_4pz/src/spicelib/devices/jfet2/0000755000175000017500000000000013546075722020175 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/jfet2/jfet2par.c0000644000175000017500000000400613546075722022056 0ustar carstencarsten/********** based on jfetpar.c Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified to jfet2 for PS model definition ( Anthony E. Parker ) Copyright 1994 Macquarie University, Sydney Australia. **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "jfet2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int JFET2param(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { JFET2instance *here = (JFET2instance *)inst; NG_IGNORE(select); switch(param) { case JFET2_TEMP: here->JFET2temp = value->rValue+CONSTCtoK; here->JFET2tempGiven = TRUE; break; case JFET2_DTEMP: here->JFET2temp = value->rValue; here->JFET2tempGiven = TRUE; break; case JFET2_AREA: here->JFET2area = value->rValue; here->JFET2areaGiven = TRUE; break; case JFET2_M: here->JFET2m = value->rValue; here->JFET2mGiven = TRUE; break; case JFET2_IC_VDS: here->JFET2icVDS = value->rValue; here->JFET2icVDSGiven = TRUE; break; case JFET2_IC_VGS: here->JFET2icVGS = value->rValue; here->JFET2icVGSGiven = TRUE; break; case JFET2_OFF: here->JFET2off = (value->iValue != 0); break; case JFET2_IC: switch(value->v.numValue) { case 2: here->JFET2icVGS = *(value->v.vec.rVec+1); here->JFET2icVGSGiven = TRUE; case 1: here->JFET2icVDS = *(value->v.vec.rVec); here->JFET2icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/jfet2/psmodel.c0000644000175000017500000003050413546075722022006 0ustar carstencarsten/* Parker-Skellern MESFET model Copyright (C) 1994, 1995, 1996 Macquarie University All Rights Reserved Author: Anthony Parker Date: 2 Feb 1994 created 9 Feb 1994 correct NaN problem in strong cut-off region 20 MAR 1994 corrected capacitance initialization 24 MAR 1994 added parameter MVST 28 MAR 1994 reorganized declaration scopes 19 APR 1994 added new parameters: PS_HFETA, PS_HFE1, PS_HFE2, PS_HFG1, and PS_HFG2 18 May 1994 corrected 1/0 error when PS_VSUB=0 15 Jul 1994 corrected errors in acload routine 10 Aug 1995 added PS_VSUB to gds += gm*PS_VSUB*mvst*(vgt-vgst*(a.. 12 Sep 1995 changed _XXX to PS_XXX to aid portability 13 Sep 1995 change to give arg=1-1/subfac; if(vst!=0) gds+=gm*PS_VSUB..; gm *= arg; 10 Feb 1996 change to names to match MicroSim code. 5 Jul 1996 corrected diode eq (change Gmin*vgs to Gmin*vgd). *****************************************************************************/ /*----------- | functions defined in this file are: PSids() returns dc drain source current and assigns other current and branch conductances qgg() static function that returns gate charge PScharge() returns gate-source and gate-drain charge and capacitance PSacload() returns small-signal conductance elements PSinstanceinit() initializes model parameters */ #define PSMODEL_C /* activate local definitions in psmesfet.h */ #include "psmodel.h" /*----------- | dc current and conductance calculation */ double PSids( cref *ckt, modl *model, inst *here, double vgs, double vgd, double *igs, double *igd, double *ggs, double *ggd, double *Gm, double *Gds) { #define FX -10.0 /* not too small else fatal rounding error in (rpt-a_rpt) */ #define MX 40.0 /* maximum exponential argument */ #define EMX 2.353852668370199842e17 /* exp(MX) */ double idrain, arg; double area = AREA; { /* gate junction diodes */ double zz; { /* gate-junction forward conduction */ double Gmin = GMIN; double Vt = NVT; double isat = IS * area; if ((arg=vgs/Vt) > FX) { if(arg < MX) { *ggs=(zz=isat*exp(arg))/Vt+Gmin; *igs= zz -isat +Gmin*vgs; } else { *ggs=(zz=isat*EMX)/Vt+Gmin; *igs=zz*(arg-MX+1)-isat+Gmin*vgs; } } else { *ggs = Gmin; *igs = -isat + Gmin * vgs; } if ((arg=vgd/Vt) > FX) { if(arg < MX) { *ggd=(zz=isat*exp(arg))/Vt+Gmin; *igd= zz -isat +Gmin*vgd; } else { *ggd=(zz=isat*EMX)/Vt+Gmin; *igd=zz*(arg-MX+1)-isat+Gmin*vgd; } } else { *ggd = Gmin; *igd = -isat + Gmin * vgd; } } { /* gate-junction reverse 'breakdown' conduction */ double Vbd = VBD; double ibd = IBD * area; if ((arg=-vgs/Vbd) > FX) { if(arg < MX) { *ggs += (zz=ibd*exp(arg))/Vbd; *igs -= zz-ibd; } else { *ggs += (zz=ibd*EMX)/Vbd; *igs -= zz*((arg-MX)+1) - ibd; } } else *igs += ibd; if ((arg=-vgd/Vbd) > FX) { if(arg < MX) { *ggd += (zz=ibd*exp(arg))/Vbd; *igd -= zz-ibd; } else { *ggd += (zz=ibd*EMX)/Vbd; *igd -= zz*((arg-MX)+1) - ibd; } } else *igd += ibd; } } { /* compute drain current and derivitives */ double gm, gds; double vdst = vgs - vgd; double stepofour = STEP * FOURTH; { /* Include rate dependent threshold modulation */ double vgst, dvgd, dvgs, h, vgdtrap, vgstrap, eta, gam; double vto = VTO; double LFg = LFGAM, LFg1 = LFG1, LFg2 = LFG2; double HFg = HFGAM, HFg1 = HFG1, HFg2 = HFG2; double HFe = HFETA, HFe1 = HFE1, HFe2 = HFE2; if(TRAN_ANAL) { double taug = TAUG; h = taug/(taug + stepofour); h*=h; h*=h; /*4th power*/ VGDTRAP_NOW = vgdtrap = h*VGDTRAP_BEFORE + (1-h) * vgd; VGSTRAP_NOW = vgstrap = h*VGSTRAP_BEFORE + (1-h) * vgs; } else { h = 0; VGDTRAP_NOW = vgdtrap = vgd; VGSTRAP_NOW = vgstrap = vgs; } vgst = vgs - vto; vgst -= ( LFg - LFg1*vgstrap + LFg2*vgdtrap)*vgdtrap; vgst += (eta = HFe - HFe1*vgdtrap + HFe2*vgstrap)*(dvgs = vgstrap-vgs); vgst += (gam = HFg - HFg1*vgstrap + HFg2*vgdtrap)*(dvgd = vgdtrap-vgd); { /* Exponential Subthreshold effect ids(vgst,vdst) */ double vgt, subfac; double mvst = MVST; double vst = VSUB * (1 + mvst*vdst); if (vgst > FX*vst) { if (vgst > (arg=MX*vst)) { /* numerically large */ vgt = (EMX/(subfac = EMX+1))*(vgst-arg) + arg; } else /* limit gate bias exponentially */ vgt = vst * log( subfac=(1 + exp(vgst/vst)) ); { /* Dual Power-law ids(vgt,vdst) */ double mQ = Q; double PmQ = P - mQ; double dvpd_dvdst=(double)D3*pow(vgt,PmQ); double vdp = vdst*dvpd_dvdst; /*D3=P/Q/((VBI-vto)^PmQ)*/ { /* Early saturation effect ids(vgt,vdp) */ double za = (double)ZA; /* sqrt(1 + Z)/2 */ double mxi = MXI; double vsatFac = vgt/(mxi*vgt + (double)XI_WOO); double vsat=vgt/(1 + vsatFac); double aa = za*vdp+vsat/2.0; double a_aa = aa-vsat; double rpt = sqrt( aa * aa + (arg=vsat*vsat*Z/4.0)); double a_rpt = sqrt(a_aa * a_aa + arg); double vdt = (rpt - a_rpt); double dvdt_dvdp = za * (aa/rpt - a_aa/a_rpt); double dvdt_dvgt = (vdt - vdp*dvdt_dvdp) *(1 + mxi*vsatFac*vsatFac)/(1 + vsatFac)/vgt; { /* Intrinsic Q-law FET equation ids(vgt,vdt) */ gds=pow(vgt-vdt,mQ-1); idrain = vdt*gds + vgt*(gm=pow(vgt,mQ-1)-gds); gds *= mQ; gm *= mQ; } gm += gds*dvdt_dvgt; gds *= dvdt_dvdp; } gm += gds*PmQ*vdp/vgt; gds *= dvpd_dvdst; } arg = 1 - 1/subfac; if(vst != 0) gds += gm*VSUB*mvst*(vgt-vgst*arg)/vst; gm *= arg; } else { /* in extreme cut-off (numerically) */ idrain = gm = gds = 0.0e0; } } gds += gm*(arg = h*gam + (1-h)*(HFe1*dvgs-HFg2*dvgd+2*LFg2*vgdtrap-LFg1*vgstrap+LFg)); gm *= 1 - h*eta + (1-h)*(HFe2*dvgs -HFg1*dvgd + LFg1*vgdtrap) - arg; } { /* apply channel length modulation and beta scaling */ double lambda = LAM; double beta = BETA * area; gm *= (arg = beta*(1 + lambda*vdst)); gds = beta*lambda*idrain + gds*arg; idrain *= arg; } { /* apply thermal reduction of drain current */ double h, pfac, pAverage; double delta = DELT / area; if(TRAN_ANAL) { double taud = TAUD; h = taud/(taud + stepofour); h*=h; h*=h; POWR_NOW = pAverage = h*POWR_BEFORE + (1-h)*vdst*idrain; } else { POWR_NOW = POWR_BEFORE = pAverage = vdst*idrain; h = 0; } idrain /= (pfac = 1+pAverage*delta); *Gm = gm * (arg = (h*delta*POWR_BEFORE + 1)/pfac/pfac); *Gds = gds * arg - (1-h) * delta*idrain*idrain; } } return(idrain); } /*----------- | code based on Statz et. al. capacitance model, IEEE Tran ED Feb 87 */ static double qgg( double vgs, double vgd, double gamma, double pb, double alpha, double vto, double vmax, double xc, double cgso, double cgdo, double *cgs, double *cgd ) /*vgs, vgd, gamma, pb, alpha, vto, vmax, xc, cgso, cgdo, *cgs, *cgd;*/ { double qrt, ext, Cgso, cpm, cplus, cminus; double vds = vgs-vgd; double d1_xc = 1-xc; double vert = sqrt( vds * vds + alpha ); double veff = 0.5*(vgs + vgd + vert) + gamma*vds; double vnr = d1_xc*(veff-vto); double vnrt = sqrt( vnr*vnr + 0.04 ); double vnew = veff + 0.5*(vnrt - vnr); if ( vnew < vmax ) { ext = 0; qrt = sqrt(1 - vnew/pb); Cgso = 0.5*cgso/qrt*(1+xc + d1_xc*vnr/vnrt); } else { double vx = 0.5*(vnew-vmax); double par = 1+vx/(pb-vmax); qrt = sqrt(1 - vmax/pb); ext = vx*(1 + par)/qrt; Cgso = 0.5*cgso/qrt*(1+xc + d1_xc*vnr/vnrt) * par; } cplus = 0.5*(1 + (cpm = vds/vert)); cminus = cplus - cpm; *cgs = Cgso*(cplus +gamma) + cgdo*(cminus+gamma); *cgd = Cgso*(cminus-gamma) + cgdo*(cplus -gamma); return(cgso*((pb+pb)*(1-qrt) + ext) + cgdo*(veff - vert)); } /*----------- | call during ac analysis initialisation or during transient analysis */ void PScharge( cref *ckt, modl *model, inst *here, double vgs, double vgd, double *capgs, double *capgd ) { #define QGG(a,b,c,d) qgg(a,b,gac,phib,alpha,vto,vmax,xc,czgs,czgd,c,d) /* double qgg(); */ double czgs = CGS * AREA; double czgd = CGD * AREA; double vto = VTO; double alpha = (double)ALPHA; /* (XI*woo/(XI+1)/2)^2 */ double xc = XC; double vmax = VMAX; double phib = VBI; double gac = ACGAM; if(/*TRAN_INIT ||*/ !TRAN_ANAL) QGS_NOW = QGD_NOW = QGS_BEFORE = QGD_BEFORE = QGG(vgs,vgd,capgs,capgd); else { double cgsna,cgsnc; double cgdna,cgdnb, a_cap; double vgs1 = VGS1; double vgd1 = VGD1; double qgga=QGG(vgs ,vgd ,&cgsna,&cgdna); double qggb=QGG(vgs1,vgd ,&a_cap,&cgdnb); double qggc=QGG(vgs ,vgd1,&cgsnc,&a_cap); double qggd=QGG(vgs1,vgd1,&a_cap,&a_cap); QGS_NOW = QGS_BEFORE + 0.5 * (qgga-qggb + qggc-qggd); QGD_NOW = QGD_BEFORE + 0.5 * (qgga-qggc + qggb-qggd); *capgs = 0.5 * (cgsna + cgsnc); *capgd = 0.5 * (cgdna + cgdnb); } } /*----------- | call for each frequency in ac analysis */ void PSacload( cref *ckt, modl *model, inst *here, double vgs, double vgd, double ids, double omega, double *Gm, double *xGm, double *Gds, double *xGds ) { double arg; double vds = vgs - vgd; double LFgam = LFGAM; double LFg1 = LFG1; double LFg2 = LFG2*vgd; double HFg1 = HFG1; double HFg2 = HFG2*vgd; double HFeta = HFETA; double HFe1 = HFE1; double HFe2 = HFE2*vgs; double hfgam= HFGAM - HFg1*vgs + HFg2; double eta = HFeta - HFe1*vgd + HFe2; double lfga = LFgam - LFg1*vgs + LFg2 + LFg2; double gmo = *Gm/(1 - lfga + LFg1*vgd); double wtg = TAUG * omega; double wtgdet = 1 + wtg*wtg; double gwtgdet = gmo/wtgdet; double gdsi = (arg=hfgam - lfga)*gwtgdet; double gdsr = arg*gmo - gdsi; double gmi = (eta + LFg1*vgd)*gwtgdet + gdsi; double xgds = wtg*gdsi; double gds = *Gds + gdsr; double xgm = -wtg*gmi; double gm = gmi + gmo*(1 -eta - hfgam); double delta = DELT / AREA; double wtd = TAUD * omega ; double wtddet = 1 + wtd * wtd; double fac = delta * ids; double del = 1/(1 - fac * vds); double dd = (del-1) / wtddet; double dr = del - dd; double di = wtd * dd; double cdsqr = fac * ids * del * wtd/wtddet; NG_IGNORE(ckt); *Gm = dr*gm - di*xgm; *xGm = di*gm + dr*xgm; *Gds = dr*gds - di*xgds + cdsqr*wtd; *xGds = di*gds + dr*xgds + cdsqr; } void /* call when temperature changes */ PSinstanceinit( modl *model, inst *here ) { #ifndef PARAM_CAST /* allow casting to parameter type */ #define PARAM_CAST /* if not specified then don't cast */ #endif double woo = (VBI - VTO); XI_WOO = PARAM_CAST (XI * woo); ZA = PARAM_CAST (sqrt(1 + Z)/2); ALPHA = PARAM_CAST (XI_WOO*XI_WOO/(XI+1)/(XI+1)/ 4); D3 = PARAM_CAST (P/Q/pow(woo,(P - Q))); } tmpk8ny_4pz/src/spicelib/devices/jfet2/Makefile.am0000644000175000017500000000100513546075722022225 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libjfet2.la libjfet2_la_SOURCES = \ jfet2.c \ jfet2acld.c \ jfet2ask.c \ jfet2defs.h \ jfet2ext.h \ jfet2ic.c \ jfet2init.c \ jfet2init.h \ jfet2itf.h \ jfet2load.c \ jfet2mask.c \ jfet2mpar.c \ jfet2noi.c \ jfet2par.c \ jfet2parm.h \ jfet2set.c \ jfet2temp.c \ jfet2trun.c \ psmodel.c \ psmodel.h AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/jfet2/jfet2ic.c0000644000175000017500000000240113546075722021664 0ustar carstencarsten/********** Based on jfetic.c Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified to jfet2 for PS model definition ( Anthony E. Parker ) Copyright 1994 Macquarie University, Sydney Australia. **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "jfet2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int JFET2getic(GENmodel *inModel, CKTcircuit *ckt) { JFET2model *model = (JFET2model*)inModel; JFET2instance *here; /* * grab initial conditions out of rhs array. User specified, so use * external nodes to get values */ for( ; model ; model = JFET2nextModel(model)) { for(here = JFET2instances(model); here ; here = JFET2nextInstance(here)) { if(!here->JFET2icVDSGiven) { here->JFET2icVDS = *(ckt->CKTrhs + here->JFET2drainNode) - *(ckt->CKTrhs + here->JFET2sourceNode); } if(!here->JFET2icVGSGiven) { here->JFET2icVGS = *(ckt->CKTrhs + here->JFET2gateNode) - *(ckt->CKTrhs + here->JFET2sourceNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/jfet2/jfet2mask.c0000644000175000017500000000275013546075722022233 0ustar carstencarsten/********** Based on jfetmask.c Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Mathew Lew and Thomas L. Quarles Modified to add PS model and new parameter definitions ( Anthony E. Parker ) Copyright 1994 Macquarie University, Sydney Australia. 10 Feb 1994: Added call to jfetparm.h **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "jfet2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int JFET2mAsk(CKTcircuit *ckt, GENmodel *inModel, int which, IFvalue *value) { JFET2model *model = (JFET2model*)inModel; NG_IGNORE(ckt); switch(which) { case JFET2_MOD_TNOM: value->rValue = model->JFET2tnom-CONSTCtoK; return(OK); #define PARAM(code,id,flag,ref,default,descrip) case id: \ value->rValue = model->ref; return(OK); #include "jfet2parm.h" case JFET2_MOD_DRAINCONDUCT: value->rValue = model->JFET2drainConduct; return(OK); case JFET2_MOD_SOURCECONDUCT: value->rValue = model->JFET2sourceConduct; return(OK); case JFET2_MOD_TYPE: if (model->JFET2type == NJF) value->sValue = "njf"; else value->sValue = "pjf"; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/jfet2/psmodel.h0000644000175000017500000001342513546075722022016 0ustar carstencarsten/* Parker-Skellern MESFET model, UCB Spice Glue Header Copyright (C) 1994, 1995, 1996 Macquarie University All Rights Reserved Author: Anthony Parker Creation Date: 2 Feb 1994 Modified: 24 Mar 1994: Parameters MVST and ETA added. 18 Apr 1994: Added new parameters and comments 12 Sep 1995: Changed _XXX to PS_XXX to aid portability */ #ifdef PSMODEL_C /* PSMODEL_C defined when included from "psmodel.c" */ #include "ngspice/ngspice.h" #include "jfet2defs.h" #include "ngspice/const.h" #endif /* Glue definitions for cref modl and inst */ typedef CKTcircuit cref; /* circuit specific variables */ typedef JFET2model modl; /* model parameters for this type of device */ typedef JFET2instance inst; /* parameters specific to this device instance */ extern void PSinstanceinit(modl *,inst *); extern double PSids(cref *,modl *,inst *,double,double, double *,double *,double *,double *,double *,double *); extern void PScharge(cref *,modl *,inst *,double,double,double *,double *); extern void PSacload(cref *,modl *,inst *,double,double,double,double, double *,double *,double *,double *); #ifdef PSMODEL_C /* PSMODEL_C defined when included from "psmodel.c" */ /* The following glue definitions need to be changed to suit the specific simulator. */ /* simulator mode flags TRAN_ANAL should be true during transient analysis iteration. (ie. false for other analysis functions and tran operating point.) TRAN_INIT should be true only during the first calculation of the initial transient analysis time point. It should be false for remaining iterations at that time point and the rest of the transient analysis. */ #define TRAN_ANAL (ckt->CKTmode & MODETRAN) #define TRAN_INIT (ckt->CKTmode & MODEINITTRAN) /* state variables */ /* initialized when TRAN_ANAL is false */ #define VGSTRAP_BEFORE (*(ckt->CKTstate1 + here->JFET2vgstrap)) #define VGSTRAP_NOW (*(ckt->CKTstate0 + here->JFET2vgstrap)) #define VGDTRAP_BEFORE (*(ckt->CKTstate1 + here->JFET2vtrap)) #define VGDTRAP_NOW (*(ckt->CKTstate0 + here->JFET2vtrap)) #define POWR_BEFORE (*(ckt->CKTstate1 + here->JFET2pave)) #define POWR_NOW (*(ckt->CKTstate0 + here->JFET2pave)) /* initialized when TRAN_INIT is true or TRAN_ANAL is false */ #define QGS_BEFORE (*(ckt->CKTstate1 + here->JFET2qgs)) #define QGS_NOW (*(ckt->CKTstate0 + here->JFET2qgs)) #define QGD_BEFORE (*(ckt->CKTstate1 + here->JFET2qgd)) #define QGD_NOW (*(ckt->CKTstate0 + here->JFET2qgd)) /* past terminal potentials used if TRAN_INIT is false and TRAN_ANAL is true */ #define VGS1 (*(ckt->CKTstate1 + here->JFET2vgs)) #define VGD1 (*(ckt->CKTstate1 + here->JFET2vgd)) /* simulator specific parameters */ #define GMIN ckt->CKTgmin /* SPICE gmin (1E12 ohms) */ #define NVT here->JFET2temp*CONSTKoverQ*model->JFET2n /* nkT/q */ #define STEP ckt->CKTdelta /* time step of this transient solution */ #define FOURTH 0.25 /* eldo requires 2.5e-10 for units conversion */ /* model parameters */ /* dc model */ #define BETA model->JFET2beta /* transconductance scaling */ #define DELT model->JFET2delta /* thermal current reduction */ #define IBD model->JFET2ibd /* breakdown current */ #define IS here->JFET2tSatCur /* gate reverse saturation current */ #define LAM model->JFET2lambda /* channel length modulation */ #define LFGAM model->JFET2lfgam /* dc drain feedback */ #define LFG1 model->JFET2lfg1 /* dc drain feedback vgs modulation */ #define LFG2 model->JFET2lfg2 /* dc drain feedback vgd modulation */ #define MVST model->JFET2mvst /* subthreshold vds modulation */ #define MXI model->JFET2mxi /* saturation index vgs modulation */ #define P model->JFET2p /* power law in controlled resistance */ #define Q model->JFET2q /* power law in controlled current */ #define VBD model->JFET2vbd /* breakdown exponential coef */ #define VBI here->JFET2tGatePot /* junction built-in potential */ #define VSUB model->JFET2vst /* subthreshold exponential coef */ #define VTO model->JFET2vto /* pinch-off potential */ #define XI model->JFET2xi /* saturation index */ #define Z model->JFET2z /* saturation knee curvature */ /* ac model */ #define ACGAM model->JFET2acgam /* capacitance vds modulation */ #define CGS here->JFET2tCGS /* zero bias cgs */ #define CGD here->JFET2tCGD /* zero bias cgd */ #define HFETA model->JFET2hfeta /* ac source feedback */ #define HFE1 model->JFET2hfe1 /* ac source feedback vgd modulation */ #define HFE2 model->JFET2hfe2 /* ac source feedback vgs modulation */ #define HFGAM model->JFET2hfgam /* ac drain feedback */ #define HFG1 model->JFET2hfg1 /* ac drain feedback vgs modulation */ #define HFG2 model->JFET2hfg2 /* ac drain feedback vgd modulation */ #define TAUD model->JFET2taud /* thermal time constant */ #define TAUG model->JFET2taug /* dc ac feedback time constant */ #define XC model->JFET2xc /* cgs reduction at pinch-off */ /* device instance */ #define AREA here->JFET2area /* area factor of fet */ /* internally derived model parameters */ #define ALPHA here->JFET2alpha /* cgs cgd reversal interval */ #define D3 here->JFET2d3 /* dual power-law parameter */ #define VMAX here->JFET2corDepCap /* forward capacitance potential */ #define XI_WOO here->JFET2xiwoo /* saturation potential */ #define ZA model->JFET2za /* saturation knee parameter */ #endif tmpk8ny_4pz/src/spicelib/devices/jfet2/jfet2mpar.c0000644000175000017500000000237013546075722022235 0ustar carstencarsten/********** Based on jfetmpar.c Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified to add PS model and new parameter definitions ( Anthony E. Parker ) Copyright 1994 Macquarie University, Sydney Australia. 10 Feb 1994: Added call to jfetparm.h **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "jfet2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int JFET2mParam(int param, IFvalue *value, GENmodel *inModels) { JFET2model *model = (JFET2model*)inModels; switch(param) { case JFET2_MOD_TNOM: model->JFET2tnomGiven = TRUE; model->JFET2tnom = value->rValue+CONSTCtoK; break; #define PARAM(code,id,flag,ref,default,descrip) case id: \ model->flag = TRUE; model->ref = value->rValue; break; #include "jfet2parm.h" case JFET2_MOD_NJF: if(value->iValue) { model->JFET2type = NJF; } break; case JFET2_MOD_PJF: if(value->iValue) { model->JFET2type = PJF; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/jfet2/jfet2itf.h0000644000175000017500000000055513546075722022070 0ustar carstencarsten/********** Based on jfetitf.h Copyright 1990 Regents of the University of California. All rights reserved. Modified to add PS model and new parameter definitions ( Anthony E. Parker ) Copyright 1994 Macquarie University, Sydney Australia. pz and disto not supported **********/ #ifndef DEV_JFET2 #define DEV_JFET2 SPICEdev *get_jfet2_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/jfet2/jfet2trun.c0000644000175000017500000000151613546075722022267 0ustar carstencarsten/********** Based on jfettrunc.c Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified to jfet2 for PS model definition ( Anthony E. Parker ) Copyright 1994 Macquarie University, Sydney Australia. **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "jfet2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int JFET2trunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { JFET2model *model = (JFET2model*)inModel; JFET2instance *here; for( ; model != NULL; model = JFET2nextModel(model)) { for(here=JFET2instances(model);here!=NULL;here = JFET2nextInstance(here)){ CKTterr(here->JFET2qgs,ckt,timeStep); CKTterr(here->JFET2qgd,ckt,timeStep); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/jfet2/jfet2ask.c0000644000175000017500000001302313546075722022051 0ustar carstencarsten/********** Based on jfetask.c Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Mathew Lew and Thomas L. Quarles Modified to add PS model and new parameter definitions ( Anthony E. Parker ) Copyright 1994 Macquarie University, Sydney Australia. 10 Feb 1994: JFET2vtrap and JFET2pave added **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "jfet2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int JFET2ask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { JFET2instance *here = (JFET2instance*)inst; static char *msg = "Current and power not available for ac analysis"; NG_IGNORE(select); switch(which) { case JFET2_TEMP: value->rValue = here->JFET2temp-CONSTCtoK; return(OK); case JFET2_DTEMP: value->rValue = here->JFET2dtemp; return(OK); case JFET2_AREA: value->rValue = here->JFET2area; value->rValue *=here->JFET2m; return(OK); case JFET2_M: value->rValue = here->JFET2m; return(OK); case JFET2_IC_VDS: value->rValue = here->JFET2icVDS; return(OK); case JFET2_IC_VGS: value->rValue = here->JFET2icVGS; return(OK); case JFET2_OFF: value->iValue = here->JFET2off; return(OK); case JFET2_DRAINNODE: value->iValue = here->JFET2drainNode; return(OK); case JFET2_GATENODE: value->iValue = here->JFET2gateNode; return(OK); case JFET2_SOURCENODE: value->iValue = here->JFET2sourceNode; return(OK); case JFET2_DRAINPRIMENODE: value->iValue = here->JFET2drainPrimeNode; return(OK); case JFET2_SOURCEPRIMENODE: value->iValue = here->JFET2sourcePrimeNode; return(OK); case JFET2_VGS: value->rValue = *(ckt->CKTstate0 + here->JFET2vgs); return(OK); case JFET2_VGD: value->rValue = *(ckt->CKTstate0 + here->JFET2vgd); return(OK); case JFET2_CG: value->rValue = *(ckt->CKTstate0 + here->JFET2cg); value->rValue *=here->JFET2m; return(OK); case JFET2_CD: value->rValue = *(ckt->CKTstate0 + here->JFET2cd); value->rValue *=here->JFET2m; return(OK); case JFET2_CGD: value->rValue = *(ckt->CKTstate0 + here->JFET2cgd); value->rValue *=here->JFET2m; return(OK); case JFET2_GM: value->rValue = *(ckt->CKTstate0 + here->JFET2gm); value->rValue *=here->JFET2m; return(OK); case JFET2_GDS: value->rValue = *(ckt->CKTstate0 + here->JFET2gds); value->rValue *=here->JFET2m; return(OK); case JFET2_GGS: value->rValue = *(ckt->CKTstate0 + here->JFET2ggs); value->rValue *=here->JFET2m; return(OK); case JFET2_GGD: value->rValue = *(ckt->CKTstate0 + here->JFET2ggd); value->rValue *=here->JFET2m; return(OK); case JFET2_QGS: value->rValue = *(ckt->CKTstate0 + here->JFET2qgs); value->rValue *=here->JFET2m; return(OK); case JFET2_CQGS: value->rValue = *(ckt->CKTstate0 + here->JFET2cqgs); value->rValue *=here->JFET2m; return(OK); case JFET2_QGD: value->rValue = *(ckt->CKTstate0 + here->JFET2qgd); value->rValue *=here->JFET2m; return(OK); case JFET2_CQGD: value->rValue = *(ckt->CKTstate0 + here->JFET2cqgd); value->rValue *=here->JFET2m; return(OK); case JFET2_VTRAP: value->rValue = *(ckt->CKTstate0 + here->JFET2vtrap); return(OK); case JFET2_PAVE: value->rValue = *(ckt->CKTstate0 + here->JFET2pave); return(OK); case JFET2_CS : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "JFET2ask"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = -*(ckt->CKTstate0 + here->JFET2cd); value->rValue -= *(ckt->CKTstate0 + here->JFET2cg); value->rValue *=here->JFET2m; } return(OK); case JFET2_POWER : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "JFET2ask"; strcpy(errMsg,msg); return(E_ASKPOWER); } else { value->rValue = *(ckt->CKTstate0 + here->JFET2cd) * *(ckt->CKTrhsOld + here->JFET2drainNode); value->rValue += *(ckt->CKTstate0 + here->JFET2cg) * *(ckt->CKTrhsOld + here->JFET2gateNode); value->rValue -= (*(ckt->CKTstate0 + here->JFET2cd) + *(ckt->CKTstate0 + here->JFET2cg)) * *(ckt->CKTrhsOld + here->JFET2sourceNode); value->rValue *=here->JFET2m; } return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/jfet2/jfet2init.c0000644000175000017500000000321313546075722022236 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "jfet2itf.h" #include "jfet2ext.h" #include "jfet2init.h" SPICEdev JFET2info = { .DEVpublic = { .name = "JFET2", .description = "Short channel field effect transistor", .terms = &JFET2nSize, .numNames = &JFET2nSize, .termNames = JFET2names, .numInstanceParms = &JFET2pTSize, .instanceParms = JFET2pTable, .numModelParms = &JFET2mPTSize, .modelParms = JFET2mPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = JFET2param, .DEVmodParam = JFET2mParam, .DEVload = JFET2load, .DEVsetup = JFET2setup, .DEVunsetup = JFET2unsetup, .DEVpzSetup = JFET2setup, .DEVtemperature = JFET2temp, .DEVtrunc = JFET2trunc, .DEVfindBranch = NULL, .DEVacLoad = JFET2acLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = JFET2getic, .DEVask = JFET2ask, .DEVmodAsk = JFET2mAsk, .DEVpzLoad = NULL, .DEVconvTest = NULL, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = JFET2noise, .DEVsoaCheck = NULL, .DEVinstSize = &JFET2iSize, .DEVmodSize = &JFET2mSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_jfet2_info(void) { return &JFET2info; } tmpk8ny_4pz/src/spicelib/devices/jfet2/jfet2temp.c0000644000175000017500000001014413546075722022241 0ustar carstencarsten/********** Base on jfettemp.c Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified to add PS model and new parameter definitions ( Anthony E. Parker ) Copyright 1994 Macquarie University, Sydney Australia. 10 Feb 1994: Call to PSinstanceinit() added Change gatePotential to phi and used rs and rd for sourceResist and drainResist, and fc for depletionCapCoef **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "jfet2defs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "psmodel.h" #include "ngspice/suffix.h" int JFET2temp(GENmodel *inModel, CKTcircuit *ckt) /* Pre-process the model parameters after a possible change */ { JFET2model *model = (JFET2model*)inModel; JFET2instance *here; double xfc; double vt; double vtnom; double kt,kt1; double arg,arg1; double fact1,fact2; double egfet,egfet1; double pbfact,pbfact1; double gmanew,gmaold; double ratio1; double pbo; double cjfact,cjfact1; /* loop through all the diode models */ for( ; model != NULL; model = JFET2nextModel(model)) { if(!(model->JFET2tnomGiven)) { model->JFET2tnom = ckt->CKTnomTemp; } vtnom = CONSTKoverQ * model->JFET2tnom; fact1 = model->JFET2tnom/REFTEMP; kt1 = CONSTboltz * model->JFET2tnom; egfet1 = 1.16-(7.02e-4*model->JFET2tnom*model->JFET2tnom)/ (model->JFET2tnom+1108); arg1 = -egfet1/(kt1+kt1)+1.1150877/(CONSTboltz*(REFTEMP+REFTEMP)); pbfact1 = -2*vtnom * (1.5*log(fact1)+CHARGE*arg1); pbo = (model->JFET2phi-pbfact1)/fact1; gmaold = (model->JFET2phi-pbo)/pbo; cjfact = 1/(1+.5*(4e-4*(model->JFET2tnom-REFTEMP)-gmaold)); if(model->JFET2rd != 0) { model->JFET2drainConduct = 1/model->JFET2rd; } else { model->JFET2drainConduct = 0; } if(model->JFET2rs != 0) { model->JFET2sourceConduct = 1/model->JFET2rs; } else { model->JFET2sourceConduct = 0; } if(model->JFET2fc >.95) { SPfrontEnd->IFerrorf (ERR_WARNING, "%s: Depletion cap. coefficient too large, limited to .95", model->JFET2modName); model->JFET2fc = .95; } xfc = log(1 - model->JFET2fc); model->JFET2f2 = exp((1+.5)*xfc); model->JFET2f3 = 1 - model->JFET2fc * (1 + .5); /* loop through all the instances of the model */ for (here = JFET2instances(model); here != NULL ; here=JFET2nextInstance(here)) { if(!(here->JFET2dtempGiven)) { here->JFET2dtemp = 0.0; } if(!(here->JFET2tempGiven)) { here->JFET2temp = ckt->CKTtemp + here->JFET2dtemp; } vt = here->JFET2temp * CONSTKoverQ; fact2 = here->JFET2temp/REFTEMP; ratio1 = here->JFET2temp/model->JFET2tnom -1; here->JFET2tSatCur = model->JFET2is * exp(ratio1*1.11/vt); here->JFET2tCGS = model->JFET2capgs * cjfact; here->JFET2tCGD = model->JFET2capgd * cjfact; kt = CONSTboltz*here->JFET2temp; egfet = 1.16-(7.02e-4*here->JFET2temp*here->JFET2temp)/ (here->JFET2temp+1108); arg = -egfet/(kt+kt) + 1.1150877/(CONSTboltz*(REFTEMP+REFTEMP)); pbfact = -2 * vt * (1.5*log(fact2)+CHARGE*arg); here->JFET2tGatePot = fact2 * pbo + pbfact; gmanew = (here->JFET2tGatePot-pbo)/pbo; cjfact1 = 1+.5*(4e-4*(here->JFET2temp-REFTEMP)-gmanew); here->JFET2tCGS *= cjfact1; here->JFET2tCGD *= cjfact1; here->JFET2corDepCap = model->JFET2fc * here->JFET2tGatePot; here->JFET2f1 = here->JFET2tGatePot * (1 - exp((1-.5)*xfc))/(1-.5); here->JFET2vcrit = vt * log(vt/(CONSTroot2 * here->JFET2tSatCur)); PSinstanceinit(model, here); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/jfet2/jfet2parm.h0000644000175000017500000001005013546075722022234 0ustar carstencarsten #ifndef PARAMR #define PARAMR(code,id,flag,ref,default,descrip) #endif #ifndef PARAMA #define PARAMA(code,id,flag,ref,default,descrip) PARAM(code,id,flag,ref,default,descrip) #endif #ifndef JFET2_MOD_VTO #define JFET2_MOD_VTO 141 #define JFET2_MOD_NJF 102 #define JFET2_MOD_PJF 103 #define JFET2_MOD_TNOM 104 #define JFET2_MOD_PB 131 #endif PARAM("acgam", 107, JFET2acgamGiven, JFET2acgam, 0, "") PARAM("af", 108, JFET2fNexpGiven, JFET2fNexp, 1, "Flicker Noise Exponent") PARAM("beta", 109, JFET2betaGiven, JFET2beta, 1e-4, "Transconductance parameter") PARAMA("cds", 146, JFET2capDSGiven, JFET2capds, 0, "D-S junction capacitance") PARAMA("cgd", 110, JFET2capGDGiven, JFET2capgd, 0, "G-D junction capacitance") PARAMA("cgs", 111, JFET2capGSGiven, JFET2capgs, 0, "G-S junction capacitance") PARAM("delta", 113, JFET2deltaGiven, JFET2delta, 0, "coef of thermal current reduction") PARAM("hfeta", 114, JFET2hfetaGiven, JFET2hfeta, 0, "drain feedback modulation") PARAM("hfe1", 115, JFET2hfe1Given, JFET2hfe1, 0, "") PARAM("hfe2", 116, JFET2hfe2Given, JFET2hfe2, 0, "") PARAM("hfg1", 117, JFET2hfg1Given, JFET2hfg1, 0, "") PARAM("hfg2", 118, JFET2hfg2Given, JFET2hfg2, 0, "") PARAM("mvst", 119, JFET2mvstGiven, JFET2mvst, 0, "modulation index for subtreshold current") PARAM("mxi", 120, JFET2mxiGiven, JFET2mxi, 0, "saturation potential modulation parameter") PARAM("fc", 121, JFET2fcGiven, JFET2fc, 0.5, "Forward bias junction fit parm.") PARAM("ibd", 122, JFET2ibdGiven, JFET2ibd, 0, "Breakdown current of diode jnc") PARAM("is", 123, JFET2isGiven, JFET2is, 1e-14, "Gate junction saturation current") PARAM("kf", 124, JFET2kfGiven, JFET2fNcoef, 0, "Flicker Noise Coefficient") PARAM("lambda",125, JFET2lamGiven, JFET2lambda, 0, "Channel length modulation param.") PARAM("lfgam", 126, JFET2lfgamGiven, JFET2lfgam, 0, "drain feedback parameter") PARAM("lfg1", 127, JFET2lfg1Given, JFET2lfg1, 0, "") PARAM("lfg2", 128, JFET2lfg2Given, JFET2lfg2, 0, "") PARAM("n", 129, JFET2nGiven, JFET2n, 1, "gate junction ideality factor") PARAM("p", 130, JFET2pGiven, JFET2p, 2, "Power law (triode region)") PARAM("vbi", JFET2_MOD_PB, JFET2phiGiven, JFET2phi, 1, "Gate junction potential") PARAMR("pb", JFET2_MOD_PB, JFET2phiGiven, JFET2phi, 1, "Gate junction potential") PARAM("q", 132, JFET2qGiven, JFET2q, 2, "Power Law (Saturated region)") PARAM("rd", 133, JFET2rdGiven, JFET2rd, 0, "Drain ohmic resistance") PARAM("rs", 134, JFET2rsGiven, JFET2rs, 0, "Source ohmic resistance") PARAM("taud", 135, JFET2taudGiven, JFET2taud, 0, "Thermal relaxation time") PARAM("taug", 136, JFET2taugGiven, JFET2taug, 0, "Drain feedback relaxation time") PARAM("vbd", 137, JFET2vbdGiven, JFET2vbd, 1, "Breakdown potential of diode jnc") PARAM("ver", 139, JFET2verGiven, JFET2ver, 0, "version number of PS model") PARAM("vst", 140, JFET2vstGiven, JFET2vst, 0, "Crit Poten subthreshold conductn") PARAM("vt0", JFET2_MOD_VTO, JFET2vtoGiven, JFET2vto, -2, "Threshold voltage") PARAMR("vto", JFET2_MOD_VTO, JFET2vtoGiven, JFET2vto, -2, "Threshold voltage") PARAM("xc", 142, JFET2xcGiven, JFET2xc, 0, "amount of cap. red at pinch-off") PARAM("xi", 143, JFET2xiGiven, JFET2xi, 1000, "velocity saturation index") PARAM("z", 144, JFET2zGiven, JFET2z, 1, "rate of velocity saturation") PARAM("hfgam", 145, JFET2hfgGiven, JFET2hfgam, model->JFET2lfgam, "high freq drain feedback parm") #undef PARAM #undef PARAMR #undef PARAMA tmpk8ny_4pz/src/spicelib/devices/jfet2/jfet2.c0000644000175000017500000000714713546075722021364 0ustar carstencarsten/********** Based on jfet.c Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified to add PS model and new parameter definitions ( Anthony E. Parker ) Copyright 1994 Macquarie University, Sydney Australia. 10 Feb 1994: Parameter definitions called from jfetparm.h Extra state vectors added to JFET2pTable **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/devdefs.h" #include "jfet2defs.h" #include "ngspice/suffix.h" IFparm JFET2pTable[] = { /* device parameters */ IOPU("off", JFET2_OFF, IF_FLAG, "Device initially off"), IOPAU("ic", JFET2_IC, IF_REALVEC,"Initial VDS,VGS vector"), IOPU("area", JFET2_AREA, IF_REAL, "Area factor"), IOPU("m", JFET2_M, IF_REAL, "Parallel Multiplier"), IOPAU("ic-vds", JFET2_IC_VDS, IF_REAL, "Initial D-S voltage"), IOPAU("ic-vgs", JFET2_IC_VGS, IF_REAL, "Initial G-S volrage"), IOPU("temp", JFET2_TEMP, IF_REAL, "Instance temperature"), IOPU("dtemp", JFET2_DTEMP, IF_REAL, "Instance temperature difference"), OPU("drain-node", JFET2_DRAINNODE, IF_INTEGER,"Number of drain node"), OPU("gate-node", JFET2_GATENODE, IF_INTEGER,"Number of gate node"), OPU("source-node", JFET2_SOURCENODE, IF_INTEGER,"Number of source node"), OPU("drain-prime-node", JFET2_DRAINPRIMENODE, IF_INTEGER,"Internal drain node"), OPU("source-prime-node",JFET2_SOURCEPRIMENODE,IF_INTEGER,"Internal source node"), OP("vgs", JFET2_VGS, IF_REAL, "Voltage G-S"), OP("vgd", JFET2_VGD, IF_REAL, "Voltage G-D"), OP("ig", JFET2_CG, IF_REAL, "Current at gate node"), OP("id", JFET2_CD, IF_REAL, "Current at drain node"), OP("is", JFET2_CS, IF_REAL, "Source current"), OP("igd", JFET2_CGD, IF_REAL, "Current G-D"), OP("gm", JFET2_GM, IF_REAL, "Transconductance"), OP("gds", JFET2_GDS, IF_REAL, "Conductance D-S"), OP("ggs", JFET2_GGS, IF_REAL, "Conductance G-S"), OP("ggd", JFET2_GGD, IF_REAL, "Conductance G-D"), OPU("qgs", JFET2_QGS, IF_REAL, "Charge storage G-S junction"), OPU("qgd", JFET2_QGD, IF_REAL, "Charge storage G-D junction"), OPU("cqgs", JFET2_CQGS, IF_REAL, "Capacitance due to charge storage G-S junction"), OPU("cqgd", JFET2_CQGD, IF_REAL, "Capacitance due to charge storage G-D junction"), OPU("p", JFET2_POWER,IF_REAL, "Power dissipated by the JFET2"), OPU("vtrap",JFET2_VTRAP,IF_REAL, "Quiescent drain feedback potential"), OPU("vpave",JFET2_PAVE, IF_REAL, "Quiescent power dissipation"), }; IFparm JFET2mPTable[] = { /* model parameters */ OP("type", JFET2_MOD_TYPE, IF_STRING, "N-type or P-type JFET2 model"), IOP("njf", JFET2_MOD_NJF, IF_FLAG,"N type JFET2 model"), IOP("pjf", JFET2_MOD_PJF, IF_FLAG,"P type JFET2 model"), #define PARAM(code,id,flag,ref,default,descrip) IOP(code,id,IF_REAL,descrip), #define PARAMR(code,id,flag,ref,default,descrip) IOPR(code,id,IF_REAL,descrip), #define PARAMA(code,id,flag,ref,default,descrip) IOPA(code,id,IF_REAL,descrip), #include "jfet2parm.h" OPU("gd", JFET2_MOD_DRAINCONDUCT, IF_REAL,"Drain conductance"), OPU("gs", JFET2_MOD_SOURCECONDUCT,IF_REAL,"Source conductance"), IOPU("tnom", JFET2_MOD_TNOM, IF_REAL,"parameter measurement temperature"), }; char *JFET2names[] = { "Drain", "Gate", "Source" }; int JFET2nSize = NUMELEMS(JFET2names); int JFET2pTSize = NUMELEMS(JFET2pTable); int JFET2mPTSize = NUMELEMS(JFET2mPTable); int JFET2iSize = sizeof(JFET2instance); int JFET2mSize = sizeof(JFET2model); tmpk8ny_4pz/src/spicelib/devices/jfet2/ChangeLog0000644000175000017500000000126413546075722021752 0ustar carstencarsten2000-03-11 Paolo Nenzi * jfet2acld.c: prepared the code for multiprocessing and CIDER integration. * jfet2ic.c: prepared the code for multiprocessing and CIDER integration. * jfet2set.c: prepared the code for multiprocessing and CIDER integration. * jfet2load.c: prepared the code for multiprocessing and CIDER integration. * jfet2noi.c: prepared the code for multiprocessing and CIDER integration. * jfet2trun.c: prepared the code for multiprocessing and CIDER integration. 1999-09-07 Arno * jfet2load.c: removed unused variables. * jfet2noi.c: removed unused variable. Reformatted some comments. tmpk8ny_4pz/src/spicelib/devices/jfet2/jfet2acld.c0000644000175000017500000000750113546075722022202 0ustar carstencarsten/********** Based on jfetacld.c Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified to add PS model and new parameter definitions ( Anthony E. Parker ) Copyright 1994 Macquarie University, Sydney Australia. 10 Feb 1994: New call to PSacload() with matrix loading **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "jfet2defs.h" #include "ngspice/sperror.h" #include "psmodel.h" #include "ngspice/suffix.h" int JFET2acLoad(GENmodel *inModel, CKTcircuit *ckt) { JFET2model *model = (JFET2model*)inModel; JFET2instance *here; double gdpr; double gspr; double gm; double gds; double ggs; double xgs; double ggd; double xgd; double xgm, xgds, vgd, vgs, cd; double m; for( ; model != NULL; model = JFET2nextModel(model)) { for( here = JFET2instances(model); here != NULL; here = JFET2nextInstance(here)) { gdpr=model->JFET2drainConduct * here->JFET2area; gspr=model->JFET2sourceConduct * here->JFET2area; gm= *(ckt->CKTstate0 + here->JFET2gm) ; gds= *(ckt->CKTstate0 + here->JFET2gds) ; ggs= *(ckt->CKTstate0 + here->JFET2ggs) ; xgs= *(ckt->CKTstate0 + here->JFET2qgs) * ckt->CKTomega ; ggd= *(ckt->CKTstate0 + here->JFET2ggd) ; xgd= *(ckt->CKTstate0 + here->JFET2qgd) * ckt->CKTomega ; vgs = *(ckt->CKTstate0 + here->JFET2vgs); vgd = *(ckt->CKTstate0 + here->JFET2vgd); cd = *(ckt->CKTstate0 + here->JFET2cd); PSacload(ckt,model, here, vgs, vgd, cd, ckt->CKTomega, &gm, &xgm, &gds, &xgds); xgds += *(ckt->CKTstate0 + here->JFET2qds) * ckt->CKTomega ; m = here->JFET2m; *(here->JFET2drainPrimeDrainPrimePtr +1) += m * (xgds); *(here->JFET2sourcePrimeSourcePrimePtr +1) += m * (xgds+xgm); *(here->JFET2drainPrimeGatePtr +1) += m * (xgm); *(here->JFET2drainPrimeSourcePrimePtr +1) -= m * (xgds+xgm); *(here->JFET2sourcePrimeGatePtr +1) -= m * (xgm); *(here->JFET2sourcePrimeDrainPrimePtr +1) -= m * (xgds); *(here->JFET2drainDrainPtr ) += m * (gdpr); *(here->JFET2gateGatePtr ) += m * (ggd+ggs); *(here->JFET2gateGatePtr +1) += m * (xgd+xgs); *(here->JFET2sourceSourcePtr ) += m * (gspr); *(here->JFET2drainPrimeDrainPrimePtr ) += m * (gdpr+gds+ggd); *(here->JFET2drainPrimeDrainPrimePtr +1) += m * (xgd); *(here->JFET2sourcePrimeSourcePrimePtr ) += m * (gspr+gds+gm+ggs); *(here->JFET2sourcePrimeSourcePrimePtr +1) += m * (xgs); *(here->JFET2drainDrainPrimePtr ) -= m * (gdpr); *(here->JFET2gateDrainPrimePtr ) -= m * (ggd); *(here->JFET2gateDrainPrimePtr +1) -= m * (xgd); *(here->JFET2gateSourcePrimePtr ) -= m * (ggs); *(here->JFET2gateSourcePrimePtr +1) -= m * (xgs); *(here->JFET2sourceSourcePrimePtr ) -= m * (gspr); *(here->JFET2drainPrimeDrainPtr ) -= m * (gdpr); *(here->JFET2drainPrimeGatePtr ) += m * (-ggd+gm); *(here->JFET2drainPrimeGatePtr +1) -= m * (xgd); *(here->JFET2drainPrimeSourcePrimePtr ) += m * (-gds-gm); *(here->JFET2sourcePrimeGatePtr ) += m * (-ggs-gm); *(here->JFET2sourcePrimeGatePtr +1) -= m * (xgs); *(here->JFET2sourcePrimeSourcePtr ) -= m * (gspr); *(here->JFET2sourcePrimeDrainPrimePtr ) -= m * (gds); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/jfet2/jfet2noi.c0000644000175000017500000001345213546075722022066 0ustar carstencarsten/********** based on jfetnoi.c Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Gary W. Ng Modified to jfet2 for PS model definition ( Anthony E. Parker ) Copyright 1994 Macquarie University, Sydney Australia. **********/ #include "ngspice/ngspice.h" #include "jfet2defs.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" /* * JFET2noise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with JFET2's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the JFET2's is summed with the variable "OnDens". */ int JFET2noise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; JFET2model *firstModel = (JFET2model *) genmodel; JFET2model *model; JFET2instance *inst; double tempOnoise; double tempInoise; double noizDens[JFET2NSRCS]; double lnNdens[JFET2NSRCS]; int i; /* define the names of the noise sources */ static char *JFET2nNames[JFET2NSRCS] = { /* Note that we have to keep the order consistent with the strchr definitions in JFET2defs.h */ "_rd", /* noise due to rd */ "_rs", /* noise due to rs */ "_id", /* noise due to id */ "_1overf", /* flicker (1/f) noise */ "" /* total transistor noise */ }; for (model=firstModel; model != NULL; model=JFET2nextModel(model)) { for (inst=JFET2instances(model); inst != NULL; inst=JFET2nextInstance(inst)) { switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i=0; i < JFET2NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_%s%s", inst->JFET2name, JFET2nNames[i]); } break; case INT_NOIZ: for (i=0; i < JFET2NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total_%s%s", inst->JFET2name, JFET2nNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total_%s%s", inst->JFET2name, JFET2nNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: NevalSrc(&noizDens[JFET2RDNOIZ],&lnNdens[JFET2RDNOIZ], ckt,THERMNOISE,inst->JFET2drainPrimeNode,inst->JFET2drainNode, model->JFET2drainConduct * inst->JFET2area * inst->JFET2m); NevalSrc(&noizDens[JFET2RSNOIZ],&lnNdens[JFET2RSNOIZ], ckt,THERMNOISE,inst->JFET2sourcePrimeNode, inst->JFET2sourceNode,model->JFET2sourceConduct * inst->JFET2area * inst->JFET2m); NevalSrc(&noizDens[JFET2IDNOIZ],&lnNdens[JFET2IDNOIZ], ckt,THERMNOISE,inst->JFET2drainPrimeNode, inst->JFET2sourcePrimeNode, (2.0/3.0 * inst->JFET2m * fabs(*(ckt->CKTstate0 + inst->JFET2gm)))); NevalSrc(&noizDens[JFET2FLNOIZ], NULL, ckt, N_GAIN,inst->JFET2drainPrimeNode, inst->JFET2sourcePrimeNode, (double)0.0); noizDens[JFET2FLNOIZ] *= inst->JFET2m * model->JFET2fNcoef * exp(model->JFET2fNexp * log(MAX(fabs(*(ckt->CKTstate0 + inst->JFET2cd)),N_MINLOG))) / data->freq; lnNdens[JFET2FLNOIZ] = log(MAX(noizDens[JFET2FLNOIZ],N_MINLOG)); noizDens[JFET2TOTNOIZ] = noizDens[JFET2RDNOIZ] + noizDens[JFET2RSNOIZ] + noizDens[JFET2IDNOIZ] + noizDens[JFET2FLNOIZ]; lnNdens[JFET2TOTNOIZ] = log(MAX(noizDens[JFET2TOTNOIZ], N_MINLOG)); *OnDens += noizDens[JFET2TOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to */ /* initialize our "history" variables */ for (i=0; i < JFET2NSRCS; i++) { inst->JFET2nVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i=0; i < JFET2NSRCS; i++) { inst->JFET2nVar[OUTNOIZ][i] = 0.0; inst->JFET2nVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0 (we have to integrate) */ for (i=0; i < JFET2NSRCS; i++) { if (i != JFET2TOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], inst->JFET2nVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv , lnNdens[i] + data->lnGainInv, inst->JFET2nVar[LNLSTDENS][i] + data->lnGainInv, data); inst->JFET2nVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { inst->JFET2nVar[OUTNOIZ][i] += tempOnoise; inst->JFET2nVar[OUTNOIZ][JFET2TOTNOIZ] += tempOnoise; inst->JFET2nVar[INNOIZ][i] += tempInoise; inst->JFET2nVar[INNOIZ][JFET2TOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i=0; i < JFET2NSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i=0; i < JFET2NSRCS; i++) { data->outpVector[data->outNumber++] = inst->JFET2nVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = inst->JFET2nVar[INNOIZ][i]; } } /* if */ break; } /* switch (mode) */ break; case N_CLOSE: return (OK); /* do nothing, the main calling routine will close */ break; /* the plots */ } /* switch (operation) */ } /* for inst */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/jfet2/jfet2init.h0000644000175000017500000000040213546075722022240 0ustar carstencarsten#ifndef _JFET2INIT_H #define _JFET2INIT_H extern IFparm JFET2pTable[ ]; extern IFparm JFET2mPTable[ ]; extern char *JFET2names[ ]; extern int JFET2pTSize; extern int JFET2mPTSize; extern int JFET2nSize; extern int JFET2iSize; extern int JFET2mSize; #endif tmpk8ny_4pz/src/spicelib/devices/jfet2/jfet2ext.h0000644000175000017500000000165413546075722022107 0ustar carstencarsten/********** Based on jfetext.h Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified to add PS model and new parameter definitions ( Anthony E. Parker ) Copyright 1994 Macquarie University, Sydney Australia. **********/ extern int JFET2acLoad(GENmodel*,CKTcircuit*); extern int JFET2ask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int JFET2getic(GENmodel*,CKTcircuit*); extern int JFET2load(GENmodel*,CKTcircuit*); extern int JFET2mAsk(CKTcircuit*,GENmodel*,int,IFvalue*); extern int JFET2mParam(int,IFvalue*,GENmodel*); extern int JFET2param(int,IFvalue*,GENinstance*,IFvalue*); extern int JFET2setup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int JFET2unsetup(GENmodel*,CKTcircuit*); extern int JFET2temp(GENmodel*,CKTcircuit*); extern int JFET2trunc(GENmodel*,CKTcircuit*,double*); extern int JFET2noise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); tmpk8ny_4pz/src/spicelib/devices/jfet2/jfet2load.c0000644000175000017500000003333513546075722022222 0ustar carstencarsten/********** Based on jfetload.c Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified to add PS model and new parameter definitions ( Anthony E. Parker ) Copyright 1994 Macquarie University, Sydney Australia. 10 Feb 1994: New code added to call psmodel.c routines **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "jfet2defs.h" #include "ngspice/const.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "psmodel.h" #include "ngspice/suffix.h" int JFET2load(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current resistance value into the * sparse matrix previously provided */ { JFET2model *model = (JFET2model*)inModel; JFET2instance *here; double capgd; double capgs; double cd; double cdhat = 0.0; double cdreq; double ceq; double ceqgd; double ceqgs; double cg; double cgd; double cghat = 0.0; double delvds; double delvgd; double delvgs; double gdpr; double gds; double geq; double ggd; double ggs; double gm; double gspr; double vds; double vgd; double vgs; #ifndef PREDICTOR double xfact; #endif int icheck; int ichk1; int error; double m; /* loop through all the models */ for( ; model != NULL; model = JFET2nextModel(model)) { /* loop through all the instances of the model */ for (here = JFET2instances(model); here != NULL ; here=JFET2nextInstance(here)) { /* * dc model parameters */ gdpr=model->JFET2drainConduct*here->JFET2area; gspr=model->JFET2sourceConduct*here->JFET2area; /* * initialization */ icheck=1; if( ckt->CKTmode & MODEINITSMSIG) { vgs= *(ckt->CKTstate0 + here->JFET2vgs); vgd= *(ckt->CKTstate0 + here->JFET2vgd); } else if (ckt->CKTmode & MODEINITTRAN) { vgs= *(ckt->CKTstate1 + here->JFET2vgs); vgd= *(ckt->CKTstate1 + here->JFET2vgd); } else if ( (ckt->CKTmode & MODEINITJCT) && (ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC) ) { vds=model->JFET2type*here->JFET2icVDS; vgs=model->JFET2type*here->JFET2icVGS; vgd=vgs-vds; } else if ( (ckt->CKTmode & MODEINITJCT) && (here->JFET2off == 0) ) { vgs = -1; vgd = -1; } else if( (ckt->CKTmode & MODEINITJCT) || ((ckt->CKTmode & MODEINITFIX) && (here->JFET2off))) { vgs = 0; vgd = 0; } else { #ifndef PREDICTOR if(ckt->CKTmode & MODEINITPRED) { xfact=ckt->CKTdelta/ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->JFET2vgs)= *(ckt->CKTstate1 + here->JFET2vgs); vgs=(1+xfact)* *(ckt->CKTstate1 + here->JFET2vgs)-xfact* *(ckt->CKTstate2 + here->JFET2vgs); *(ckt->CKTstate0 + here->JFET2vgd)= *(ckt->CKTstate1 + here->JFET2vgd); vgd=(1+xfact)* *(ckt->CKTstate1 + here->JFET2vgd)-xfact* *(ckt->CKTstate2 + here->JFET2vgd); *(ckt->CKTstate0 + here->JFET2cg)= *(ckt->CKTstate1 + here->JFET2cg); *(ckt->CKTstate0 + here->JFET2cd)= *(ckt->CKTstate1 + here->JFET2cd); *(ckt->CKTstate0 + here->JFET2cgd)= *(ckt->CKTstate1 + here->JFET2cgd); *(ckt->CKTstate0 + here->JFET2gm)= *(ckt->CKTstate1 + here->JFET2gm); *(ckt->CKTstate0 + here->JFET2gds)= *(ckt->CKTstate1 + here->JFET2gds); *(ckt->CKTstate0 + here->JFET2ggs)= *(ckt->CKTstate1 + here->JFET2ggs); *(ckt->CKTstate0 + here->JFET2ggd)= *(ckt->CKTstate1 + here->JFET2ggd); } else { #endif /*PREDICTOR*/ /* * compute new nonlinear branch voltages */ vgs=model->JFET2type* (*(ckt->CKTrhsOld+ here->JFET2gateNode)- *(ckt->CKTrhsOld+ here->JFET2sourcePrimeNode)); vgd=model->JFET2type* (*(ckt->CKTrhsOld+here->JFET2gateNode)- *(ckt->CKTrhsOld+ here->JFET2drainPrimeNode)); #ifndef PREDICTOR } #endif /*PREDICTOR*/ delvgs=vgs- *(ckt->CKTstate0 + here->JFET2vgs); delvgd=vgd- *(ckt->CKTstate0 + here->JFET2vgd); delvds=delvgs-delvgd; cghat= *(ckt->CKTstate0 + here->JFET2cg)+ *(ckt->CKTstate0 + here->JFET2ggd)*delvgd+ *(ckt->CKTstate0 + here->JFET2ggs)*delvgs; cdhat= *(ckt->CKTstate0 + here->JFET2cd)+ *(ckt->CKTstate0 + here->JFET2gm)*delvgs+ *(ckt->CKTstate0 + here->JFET2gds)*delvds- *(ckt->CKTstate0 + here->JFET2ggd)*delvgd; /* * bypass if solution has not changed */ if((ckt->CKTbypass) && (!(ckt->CKTmode & MODEINITPRED)) && (fabs(delvgs) < ckt->CKTreltol*MAX(fabs(vgs), fabs(*(ckt->CKTstate0 + here->JFET2vgs)))+ ckt->CKTvoltTol) ) if ( (fabs(delvgd) < ckt->CKTreltol*MAX(fabs(vgd), fabs(*(ckt->CKTstate0 + here->JFET2vgd)))+ ckt->CKTvoltTol)) if ( (fabs(cghat-*(ckt->CKTstate0 + here->JFET2cg)) < ckt->CKTreltol*MAX(fabs(cghat), fabs(*(ckt->CKTstate0 + here->JFET2cg)))+ ckt->CKTabstol) ) if ( /* hack - expression too big */ (fabs(cdhat-*(ckt->CKTstate0 + here->JFET2cd)) < ckt->CKTreltol*MAX(fabs(cdhat), fabs(*(ckt->CKTstate0 + here->JFET2cd)))+ ckt->CKTabstol) ) { /* we can do a bypass */ vgs= *(ckt->CKTstate0 + here->JFET2vgs); vgd= *(ckt->CKTstate0 + here->JFET2vgd); vds= vgs-vgd; cg= *(ckt->CKTstate0 + here->JFET2cg); cd= *(ckt->CKTstate0 + here->JFET2cd); cgd= *(ckt->CKTstate0 + here->JFET2cgd); gm= *(ckt->CKTstate0 + here->JFET2gm); gds= *(ckt->CKTstate0 + here->JFET2gds); ggs= *(ckt->CKTstate0 + here->JFET2ggs); ggd= *(ckt->CKTstate0 + here->JFET2ggd); goto load; } /* * limit nonlinear branch voltages */ ichk1=1; vgs = DEVpnjlim(vgs,*(ckt->CKTstate0 + here->JFET2vgs), (here->JFET2temp*CONSTKoverQ), here->JFET2vcrit, &icheck); vgd = DEVpnjlim(vgd,*(ckt->CKTstate0 + here->JFET2vgd), (here->JFET2temp*CONSTKoverQ), here->JFET2vcrit,&ichk1); if (ichk1 == 1) { icheck=1; } vgs = DEVfetlim(vgs,*(ckt->CKTstate0 + here->JFET2vgs), model->JFET2vto); vgd = DEVfetlim(vgd,*(ckt->CKTstate0 + here->JFET2vgd), model->JFET2vto); } /* * determine dc current and derivatives */ vds=vgs-vgd; if (vds < 0.0) { cd = -PSids(ckt, model, here, vgd, vgs, &cgd, &cg, &ggd, &ggs, &gm, &gds); gds += gm; gm = -gm; } else { cd = PSids(ckt, model, here, vgs, vgd, &cg, &cgd, &ggs, &ggd, &gm, &gds); } cg = cg + cgd; cd = cd - cgd; if ( (ckt->CKTmode & (MODETRAN | MODEAC | MODEINITSMSIG) ) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) ){ /* * charge storage elements */ double capds = model->JFET2capds*here->JFET2area; PScharge(ckt, model, here, vgs, vgd, &capgs, &capgd); *(ckt->CKTstate0 + here->JFET2qds) = capds * vds; /* * store small-signal parameters */ if( (!(ckt->CKTmode & MODETRANOP)) || (!(ckt->CKTmode & MODEUIC)) ) { if(ckt->CKTmode & MODEINITSMSIG) { *(ckt->CKTstate0 + here->JFET2qgs) = capgs; *(ckt->CKTstate0 + here->JFET2qgd) = capgd; *(ckt->CKTstate0 + here->JFET2qds) = capds; continue; /*go to 1000*/ } /* * transient analysis */ if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->JFET2qgs) = *(ckt->CKTstate0 + here->JFET2qgs); *(ckt->CKTstate1 + here->JFET2qgd) = *(ckt->CKTstate0 + here->JFET2qgd); *(ckt->CKTstate1 + here->JFET2qds) = *(ckt->CKTstate0 + here->JFET2qds); } error = NIintegrate(ckt,&geq,&ceq,capgs,here->JFET2qgs); if(error) return(error); ggs = ggs + geq; cg = cg + *(ckt->CKTstate0 + here->JFET2cqgs); error = NIintegrate(ckt,&geq,&ceq,capgd,here->JFET2qgd); if(error) return(error); ggd = ggd + geq; cg = cg + *(ckt->CKTstate0 + here->JFET2cqgd); cd = cd - *(ckt->CKTstate0 + here->JFET2cqgd); cgd = cgd + *(ckt->CKTstate0 + here->JFET2cqgd); error = NIintegrate(ckt,&geq,&ceq,capds,here->JFET2qds); cd = cd + *(ckt->CKTstate0 + here->JFET2cqds); if(error) return(error); if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->JFET2cqgs) = *(ckt->CKTstate0 + here->JFET2cqgs); *(ckt->CKTstate1 + here->JFET2cqgd) = *(ckt->CKTstate0 + here->JFET2cqgd); *(ckt->CKTstate1 + here->JFET2cqds) = *(ckt->CKTstate0 + here->JFET2cqds); } } } /* * check convergence */ if( (!(ckt->CKTmode & MODEINITFIX)) | (!(ckt->CKTmode & MODEUIC))) { if((icheck == 1) || (fabs(cghat-cg) >= ckt->CKTreltol* MAX(fabs(cghat),fabs(cg))+ckt->CKTabstol) || (fabs(cdhat-cd) > ckt->CKTreltol* MAX(fabs(cdhat),fabs(cd))+ckt->CKTabstol)) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; } } *(ckt->CKTstate0 + here->JFET2vgs) = vgs; *(ckt->CKTstate0 + here->JFET2vgd) = vgd; *(ckt->CKTstate0 + here->JFET2cg) = cg; *(ckt->CKTstate0 + here->JFET2cd) = cd; *(ckt->CKTstate0 + here->JFET2cgd) = cgd; *(ckt->CKTstate0 + here->JFET2gm) = gm; *(ckt->CKTstate0 + here->JFET2gds) = gds; *(ckt->CKTstate0 + here->JFET2ggs) = ggs; *(ckt->CKTstate0 + here->JFET2ggd) = ggd; /* * load current vector */ load: m = here->JFET2m; ceqgd=model->JFET2type*(cgd-ggd*vgd); ceqgs=model->JFET2type*((cg-cgd)-ggs*vgs); cdreq=model->JFET2type*((cd+cgd)-gds*vds-gm*vgs); *(ckt->CKTrhs + here->JFET2gateNode) += m * (-ceqgs-ceqgd); *(ckt->CKTrhs + here->JFET2drainPrimeNode) += m * (-cdreq+ceqgd); *(ckt->CKTrhs + here->JFET2sourcePrimeNode) += m * (cdreq+ceqgs); /* * load y matrix */ *(here->JFET2drainDrainPrimePtr) += m * (-gdpr); *(here->JFET2gateDrainPrimePtr) += m * (-ggd); *(here->JFET2gateSourcePrimePtr) += m * (-ggs); *(here->JFET2sourceSourcePrimePtr) += m * (-gspr); *(here->JFET2drainPrimeDrainPtr) += m * (-gdpr); *(here->JFET2drainPrimeGatePtr) += m * (gm-ggd); *(here->JFET2drainPrimeSourcePrimePtr) += m * (-gds-gm); *(here->JFET2sourcePrimeGatePtr) += m * (-ggs-gm); *(here->JFET2sourcePrimeSourcePtr) += m * (-gspr); *(here->JFET2sourcePrimeDrainPrimePtr) += m * (-gds); *(here->JFET2drainDrainPtr) += m * (gdpr); *(here->JFET2gateGatePtr) += m * (ggd+ggs); *(here->JFET2sourceSourcePtr) += m * (gspr); *(here->JFET2drainPrimeDrainPrimePtr) += m * (gdpr+gds+ggd); *(here->JFET2sourcePrimeSourcePrimePtr) += m * (gspr+gds+gm+ggs); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/jfet2/jfet2set.c0000644000175000017500000001244613546075722022076 0ustar carstencarsten/********** Based on jfetset.c Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified to add PS model and new parameter definitions ( Anthony E. Parker ) Copyright 1994 Macquarie University, Sydney Australia. 10 Feb 1994: Added call to jfetparm.h, used JFET_STATE_COUNT **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "jfet2defs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int JFET2setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* load the diode structure with those pointers needed later * for fast matrix loading */ { JFET2model *model = (JFET2model*)inModel; JFET2instance *here; int error; CKTnode *tmp; /* loop through all the diode models */ for( ; model != NULL; model = JFET2nextModel(model)) { if( (model->JFET2type != NJF) && (model->JFET2type != PJF) ) { model->JFET2type = NJF; } #define PARAM(code,id,flag,ref,default,descrip) \ if(!model->flag) {model->ref = default;} #include "jfet2parm.h" /* loop through all the instances of the model */ for (here = JFET2instances(model); here != NULL ; here=JFET2nextInstance(here)) { if(!here->JFET2areaGiven) { here->JFET2area = 1; } if(!here->JFET2mGiven) { here->JFET2m = 1; } here->JFET2state = *states; *states += JFET2numStates; if(model->JFET2rs != 0) { if(here->JFET2sourcePrimeNode == 0) { error = CKTmkVolt(ckt,&tmp,here->JFET2name,"source"); if(error) return(error); here->JFET2sourcePrimeNode = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->JFET2sourcePrimeNode = here->JFET2sourceNode; } if(model->JFET2rd != 0) { if(here->JFET2drainPrimeNode == 0) { error = CKTmkVolt(ckt,&tmp,here->JFET2name,"drain"); if(error) return(error); here->JFET2drainPrimeNode = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->JFET2drainPrimeNode = here->JFET2drainNode; } /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(JFET2drainDrainPrimePtr,JFET2drainNode,JFET2drainPrimeNode); TSTALLOC(JFET2gateDrainPrimePtr,JFET2gateNode,JFET2drainPrimeNode); TSTALLOC(JFET2gateSourcePrimePtr,JFET2gateNode,JFET2sourcePrimeNode); TSTALLOC(JFET2sourceSourcePrimePtr,JFET2sourceNode,JFET2sourcePrimeNode); TSTALLOC(JFET2drainPrimeDrainPtr,JFET2drainPrimeNode,JFET2drainNode); TSTALLOC(JFET2drainPrimeGatePtr,JFET2drainPrimeNode,JFET2gateNode); TSTALLOC(JFET2drainPrimeSourcePrimePtr,JFET2drainPrimeNode,JFET2sourcePrimeNode); TSTALLOC(JFET2sourcePrimeGatePtr,JFET2sourcePrimeNode,JFET2gateNode); TSTALLOC(JFET2sourcePrimeSourcePtr,JFET2sourcePrimeNode,JFET2sourceNode); TSTALLOC(JFET2sourcePrimeDrainPrimePtr,JFET2sourcePrimeNode,JFET2drainPrimeNode); TSTALLOC(JFET2drainDrainPtr,JFET2drainNode,JFET2drainNode); TSTALLOC(JFET2gateGatePtr,JFET2gateNode,JFET2gateNode); TSTALLOC(JFET2sourceSourcePtr,JFET2sourceNode,JFET2sourceNode); TSTALLOC(JFET2drainPrimeDrainPrimePtr,JFET2drainPrimeNode,JFET2drainPrimeNode); TSTALLOC(JFET2sourcePrimeSourcePrimePtr,JFET2sourcePrimeNode,JFET2sourcePrimeNode); } } return(OK); } int JFET2unsetup(GENmodel *inModel, CKTcircuit *ckt) { JFET2model *model; JFET2instance *here; for (model = (JFET2model *)inModel; model != NULL; model = JFET2nextModel(model)) { for (here = JFET2instances(model); here != NULL; here=JFET2nextInstance(here)) { if (here->JFET2drainPrimeNode > 0 && here->JFET2drainPrimeNode != here->JFET2drainNode) CKTdltNNum(ckt, here->JFET2drainPrimeNode); here->JFET2drainPrimeNode = 0; if (here->JFET2sourcePrimeNode > 0 && here->JFET2sourcePrimeNode != here->JFET2sourceNode) CKTdltNNum(ckt, here->JFET2sourcePrimeNode); here->JFET2sourcePrimeNode = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/jfet2/jfet2defs.h0000644000175000017500000002126313546075722022226 0ustar carstencarsten/********** Based on jfetdefs.h Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified to add PS model and new parameter definitions ( Anthony E. Parker ) Copyright 1994 Macquarie University, Sydney Australia. 10 Feb 1994: Added xiwoo, d3 and alpha to JFET2instance JFET2pave, JFET2vtrap ad JFET2_STATE_COUNT Changed model to call jfetparm.h, added JFET2za to model struct Defined JFET2_VTRAP and JFET2_PAVE **********/ #ifndef JFET2 #define JFET2 #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" /* structures used to describe Junction Field Effect Transistors */ /* indices to an array of JFET2 noise sources */ enum { JFET2RDNOIZ = 0, JFET2RSNOIZ, JFET2IDNOIZ, JFET2FLNOIZ, JFET2TOTNOIZ, /* finally, the number of noise sources */ JFET2NSRCS }; /* information used to describe a single instance */ typedef struct sJFET2instance { struct GENinstance gen; #define JFET2modPtr(inst) ((struct sJFET2model *)((inst)->gen.GENmodPtr)) #define JFET2nextInstance(inst) ((struct sJFET2instance *)((inst)->gen.GENnextInstance)) #define JFET2name gen.GENname #define JFET2state gen.GENstate const int JFET2drainNode; /* number of drain node of jfet */ const int JFET2gateNode; /* number of gate node of jfet */ const int JFET2sourceNode; /* number of source node of jfet */ int JFET2drainPrimeNode; /* number of internal drain node of jfet */ int JFET2sourcePrimeNode; /* number of internal source node of jfet */ double *JFET2drainDrainPrimePtr; /* pointer to sparse matrix at * (drain,drain prime) */ double *JFET2gateDrainPrimePtr; /* pointer to sparse matrix at * (gate,drain prime) */ double *JFET2gateSourcePrimePtr; /* pointer to sparse matrix at * (gate,source prime) */ double *JFET2sourceSourcePrimePtr; /* pointer to sparse matrix at * (source,source prime) */ double *JFET2drainPrimeDrainPtr; /* pointer to sparse matrix at * (drain prime,drain) */ double *JFET2drainPrimeGatePtr; /* pointer to sparse matrix at * (drain prime,gate) */ double *JFET2drainPrimeSourcePrimePtr; /* pointer to sparse matrix * (drain prime,source prime) */ double *JFET2sourcePrimeGatePtr; /* pointer to sparse matrix at * (source prime,gate) */ double *JFET2sourcePrimeSourcePtr; /* pointer to sparse matrix at * (source prime,source) */ double *JFET2sourcePrimeDrainPrimePtr; /* pointer to sparse matrix * (source prime,drain prime) */ double *JFET2drainDrainPtr; /* pointer to sparse matrix at * (drain,drain) */ double *JFET2gateGatePtr; /* pointer to sparse matrix at * (gate,gate) */ double *JFET2sourceSourcePtr; /* pointer to sparse matrix at * (source,source) */ double *JFET2drainPrimeDrainPrimePtr; /* pointer to sparse matrix * (drain prime,drain prime) */ double *JFET2sourcePrimeSourcePrimePtr; /* pointer to sparse matrix * (source prime,source prime) */ int JFET2mode; /* distortion analysis Taylor coeffs. */ /* * naming convention: * x = vgs * y = vds * cdr = cdrain */ #define JFET2NDCOEFFS 21 #ifndef NODISTO double JFET2dCoeffs[JFET2NDCOEFFS]; #else /* NODISTO */ double *JFET2dCoeffs; #endif /* NODISTO */ #ifndef CONFIG #define cdr_x JFET2dCoeffs[0] #define cdr_y JFET2dCoeffs[1] #define cdr_x2 JFET2dCoeffs[2] #define cdr_y2 JFET2dCoeffs[3] #define cdr_xy JFET2dCoeffs[4] #define cdr_x3 JFET2dCoeffs[5] #define cdr_y3 JFET2dCoeffs[6] #define cdr_x2y JFET2dCoeffs[7] #define cdr_xy2 JFET2dCoeffs[8] #define ggs1 JFET2dCoeffs[9] #define ggd1 JFET2dCoeffs[10] #define ggs2 JFET2dCoeffs[11] #define ggd2 JFET2dCoeffs[12] #define ggs3 JFET2dCoeffs[13] #define ggd3 JFET2dCoeffs[14] #define capgs1 JFET2dCoeffs[15] #define capgd1 JFET2dCoeffs[16] #define capgs2 JFET2dCoeffs[17] #define capgd2 JFET2dCoeffs[18] #define capgs3 JFET2dCoeffs[19] #define capgd3 JFET2dCoeffs[20] #endif #ifndef NONOISE double JFET2nVar[NSTATVARS][JFET2NSRCS]; #else /* NONOISE */ double **JFET2nVar; #endif /* NONOISE */ unsigned JFET2off :1; /* 'off' flag for jfet */ unsigned JFET2areaGiven : 1; /* flag to indicate area was specified */ unsigned JFET2mGiven : 1; /* flag to indicate multiplier given */ unsigned JFET2icVDSGiven : 1; /* initial condition given flag for V D-S*/ unsigned JFET2icVGSGiven : 1; /* initial condition given flag for V G-S*/ unsigned JFET2tempGiven : 1; /* flag to indicate instance temp given */ unsigned JFET2dtempGiven : 1; /* flag to indicate temperature difference given */ double JFET2area; /* area factor for the jfet */ double JFET2m; /* parallel multiplier for the diode */ double JFET2icVDS; /* initial condition voltage D-S*/ double JFET2icVGS; /* initial condition voltage G-S*/ double JFET2temp; /* operating temperature */ double JFET2dtemp; /* Instance temperature difference */ double JFET2tSatCur; /* temperature adjusted saturation current */ double JFET2tGatePot; /* temperature adjusted gate potential */ double JFET2tCGS; /* temperature corrected G-S capacitance */ double JFET2tCGD; /* temperature corrected G-D capacitance */ double JFET2corDepCap; /* joining point of the fwd bias dep. cap eq.s */ double JFET2vcrit; /* critical voltage for the instance */ double JFET2f1; /* coefficient of capacitance polynomial exp */ double JFET2xiwoo; /* velocity saturation potential */ double JFET2d3; /* Dual Power-law parameter */ double JFET2alpha; /* capacitance model transition parameter */ } JFET2instance ; #define JFET2vgs JFET2state #define JFET2vgd JFET2state+1 #define JFET2cg JFET2state+2 #define JFET2cd JFET2state+3 #define JFET2cgd JFET2state+4 #define JFET2gm JFET2state+5 #define JFET2gds JFET2state+6 #define JFET2ggs JFET2state+7 #define JFET2ggd JFET2state+8 #define JFET2qgs JFET2state+9 #define JFET2cqgs JFET2state+10 #define JFET2qgd JFET2state+11 #define JFET2cqgd JFET2state+12 #define JFET2qds JFET2state+13 #define JFET2cqds JFET2state+14 #define JFET2pave JFET2state+15 #define JFET2vtrap JFET2state+16 #define JFET2vgstrap JFET2state+17 #define JFET2unknown JFET2state+18 #define JFET2numStates 19 /* per model data */ typedef struct sJFET2model { /* model structure for a jfet */ struct GENmodel gen; #define JFET2modType gen.GENmodType #define JFET2nextModel(inst) ((struct sJFET2model *)((inst)->gen.GENnextModel)) #define JFET2instances(inst) ((JFET2instance *)((inst)->gen.GENinstances)) #define JFET2modName gen.GENmodName int JFET2type; #define PARAM(code,id,flag,ref,default,descrip) double ref; #include "jfet2parm.h" double JFET2drainConduct; double JFET2sourceConduct; double JFET2f2; double JFET2f3; double JFET2za; /* saturation index parameter */ double JFET2tnom; /* temperature at which parameters were measured */ #define PARAM(code,id,flag,ref,default,descrip) unsigned flag : 1; #include "jfet2parm.h" unsigned JFET2tnomGiven : 1; /* user specified Tnom for model */ } JFET2model; #ifndef NJF #define NJF 1 #define PJF -1 #endif /*NJF*/ /* device parameters */ enum { JFET2_AREA = 1, JFET2_IC_VDS, JFET2_IC_VGS, JFET2_IC, JFET2_OFF, JFET2_TEMP, JFET2_DTEMP, JFET2_M, }; /* device questions */ enum { JFET2_DRAINNODE = 301, JFET2_GATENODE, JFET2_SOURCENODE, JFET2_DRAINPRIMENODE, JFET2_SOURCEPRIMENODE, JFET2_VGS, JFET2_VGD, JFET2_CG, JFET2_CD, JFET2_CGD, JFET2_GM, JFET2_GDS, JFET2_GGS, JFET2_GGD, JFET2_QGS, JFET2_CQGS, JFET2_QGD, JFET2_CQGD, JFET2_CS, JFET2_POWER, JFET2_VTRAP, JFET2_PAVE, }; /* model questions */ enum { JFET2_MOD_DRAINCONDUCT = 301, JFET2_MOD_SOURCECONDUCT, JFET2_MOD_DEPLETIONCAP, JFET2_MOD_VCRIT, JFET2_MOD_TYPE, }; /* function definitions */ #include "jfet2ext.h" #endif /*JFET2*/ tmpk8ny_4pz/src/spicelib/devices/mesa/0000755000175000017500000000000013546075722020110 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/mesa/mesaext.h0000644000175000017500000000137113546075722021731 0ustar carstencarsten/********** Copyright 1993: T. Ytterdal, K. Lee, M. Shur and T. A. Fjeldly. All rights reserved. Author: Trond Ytterdal **********/ extern int MESAacLoad(GENmodel*,CKTcircuit*); extern int MESAask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int MESAgetic(GENmodel*,CKTcircuit*); extern int MESAload(GENmodel*,CKTcircuit*); extern int MESAmAsk(CKTcircuit*,GENmodel*,int,IFvalue*); extern int MESAmParam(int,IFvalue*,GENmodel*); extern int MESAparam(int,IFvalue*,GENinstance*,IFvalue*); extern int MESApzLoad(GENmodel*,CKTcircuit*, SPcomplex*); extern int MESAsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int MESAtemp(GENmodel*,CKTcircuit*); extern int MESAtrunc(GENmodel*,CKTcircuit*,double*); extern int MESAunsetup(GENmodel*,CKTcircuit*); tmpk8ny_4pz/src/spicelib/devices/mesa/mesaitf.h0000644000175000017500000000026013546075722021707 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_MESA #define DEV_MESA SPICEdev *get_mesa_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/mesa/mesamparam.c0000644000175000017500000002145013546075722022401 0ustar carstencarsten/********** Copyright 1993: T. Ytterdal, K. Lee, M. Shur and T. A. Fjeldly. All rights reserved. Author: Trond Ytterdal **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "mesadefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MESAmParam(int param, IFvalue *value, GENmodel *inModel) { MESAmodel *model = (MESAmodel*)inModel; switch(param) { case MESA_MOD_VTO: model->MESAthresholdGiven = TRUE; model->MESAthreshold = value->rValue; break; case MESA_MOD_BETA: model->MESAbetaGiven = TRUE; model->MESAbeta = value->rValue; break; case MESA_MOD_VS: model->MESAvsGiven = TRUE; model->MESAvs = value->rValue; break; case MESA_MOD_LAMBDA: model->MESAlambdaGiven = TRUE; model->MESAlambda = value->rValue; break; case MESA_MOD_RD: model->MESAdrainResistGiven = TRUE; model->MESAdrainResist = value->rValue; break; case MESA_MOD_RS: model->MESAsourceResistGiven = TRUE; model->MESAsourceResist = value->rValue; break; case MESA_MOD_RG: model->MESAgateResistGiven = TRUE; model->MESAgateResist = value->rValue; break; case MESA_MOD_RI: model->MESAriGiven = TRUE; model->MESAri = value->rValue; break; case MESA_MOD_RF: model->MESArfGiven = TRUE; model->MESArf = value->rValue; break; case MESA_MOD_RDI: model->MESArdiGiven = TRUE; model->MESArdi = value->rValue; break; case MESA_MOD_RSI: model->MESArsiGiven = TRUE; model->MESArsi = value->rValue; break; case MESA_MOD_PHIB: model->MESAphibGiven = TRUE; model->MESAphib = value->rValue*CHARGE; break; case MESA_MOD_PHIB1: model->MESAphib1Given = TRUE; model->MESAphib1 = value->rValue*CHARGE; break; case MESA_MOD_ASTAR: model->MESAastarGiven = TRUE; model->MESAastar = value->rValue; break; case MESA_MOD_GGR: model->MESAggrGiven = TRUE; model->MESAggr = value->rValue; break; case MESA_MOD_DEL: model->MESAdelGiven = TRUE; model->MESAdel = value->rValue; break; case MESA_MOD_XCHI: model->MESAxchiGiven = TRUE; model->MESAxchi = value->rValue; break; case MESA_MOD_N: model->MESAnGiven = TRUE; model->MESAn = value->rValue; break; case MESA_MOD_ETA: model->MESAetaGiven = TRUE; model->MESAeta = value->rValue; break; case MESA_MOD_M: model->MESAmGiven = TRUE; model->MESAm = value->rValue; break; case MESA_MOD_MC: model->MESAmcGiven = TRUE; model->MESAmc = value->rValue; break; case MESA_MOD_ALPHA: model->MESAalphaGiven = TRUE; model->MESAalpha = value->rValue; break; case MESA_MOD_SIGMA0: model->MESAsigma0Given = TRUE; model->MESAsigma0 = value->rValue; break; case MESA_MOD_VSIGMAT: model->MESAvsigmatGiven = TRUE; model->MESAvsigmat = value->rValue; break; case MESA_MOD_VSIGMA: model->MESAvsigmaGiven = TRUE; model->MESAvsigma = value->rValue; break; case MESA_MOD_MU: model->MESAmuGiven = TRUE; model->MESAmu = value->rValue; break; case MESA_MOD_THETA: model->MESAthetaGiven = TRUE; model->MESAtheta = value->rValue; break; case MESA_MOD_MU1: model->MESAmu1Given = TRUE; model->MESAmu1 = value->rValue; break; case MESA_MOD_MU2: model->MESAmu2Given = TRUE; model->MESAmu2 = value->rValue; break; case MESA_MOD_D: model->MESAdGiven = TRUE; model->MESAd = value->rValue; break; case MESA_MOD_ND: model->MESAndGiven = TRUE; model->MESAnd = value->rValue; break; case MESA_MOD_DU: model->MESAduGiven = TRUE; model->MESAdu = value->rValue; break; case MESA_MOD_NDU: model->MESAnduGiven = TRUE; model->MESAndu = value->rValue; break; case MESA_MOD_TH: model->MESAthGiven = TRUE; model->MESAth = value->rValue; break; case MESA_MOD_NDELTA: model->MESAndeltaGiven = TRUE; model->MESAndelta = value->rValue; break; case MESA_MOD_DELTA: model->MESAdeltaGiven = TRUE; model->MESAdelta = value->rValue; break; case MESA_MOD_TC: model->MESAtcGiven = TRUE; model->MESAtc = value->rValue; break; case MESA_MOD_NMF: if(value->iValue) { model->MESAtype = NMF; } break; case MESA_MOD_PMF: if(value->iValue) { fprintf(stderr, "Only nmf model type supported, set to nmf\n"); model->MESAtype = NMF; } break; case MESA_MOD_TVTO: model->MESAtvtoGiven = TRUE; model->MESAtvto = value->rValue; break; case MESA_MOD_TLAMBDA: model->MESAtlambdaGiven = TRUE; model->MESAtlambda = value->rValue+CONSTCtoK; break; case MESA_MOD_TETA0: model->MESAteta0Given = TRUE; model->MESAteta0 = value->rValue+CONSTCtoK; break; case MESA_MOD_TETA1: model->MESAteta1Given = TRUE; model->MESAteta1 = value->rValue+CONSTCtoK; break; case MESA_MOD_TMU: model->MESAtmuGiven = TRUE; model->MESAtmu = value->rValue+CONSTCtoK; break; case MESA_MOD_XTM0: model->MESAxtm0Given = TRUE; model->MESAxtm0 = value->rValue; break; case MESA_MOD_XTM1: model->MESAxtm1Given = TRUE; model->MESAxtm1 = value->rValue; break; case MESA_MOD_XTM2: model->MESAxtm2Given = TRUE; model->MESAxtm2 = value->rValue; break; case MESA_MOD_KS: model->MESAksGiven = TRUE; model->MESAks = value->rValue; break; case MESA_MOD_VSG: model->MESAvsgGiven = TRUE; model->MESAvsg = value->rValue; break; case MESA_MOD_LAMBDAHF: model->MESAlambdahfGiven = TRUE; model->MESAlambdahf = value->rValue; break; case MESA_MOD_TF: model->MESAtfGiven = TRUE; model->MESAtf = value->rValue+CONSTCtoK; break; case MESA_MOD_FLO: model->MESAfloGiven = TRUE; model->MESAflo = value->rValue; break; case MESA_MOD_DELFO: model->MESAdelfoGiven = TRUE; model->MESAdelfo = value->rValue; break; case MESA_MOD_AG: model->MESAagGiven = TRUE; model->MESAag = value->rValue; break; case MESA_MOD_TC1: model->MESAtc1Given = TRUE; model->MESAtc1 = value->rValue; break; case MESA_MOD_TC2: model->MESAtc2Given = TRUE; model->MESAtc2 = value->rValue; break; case MESA_MOD_ZETA: model->MESAzetaGiven = TRUE; model->MESAzeta = value->rValue; break; case MESA_MOD_LEVEL: model->MESAlevelGiven = TRUE; model->MESAlevel = value->rValue; break; case MESA_MOD_NMAX: model->MESAnmaxGiven = TRUE; model->MESAnmax = value->rValue; break; case MESA_MOD_GAMMA: model->MESAgammaGiven = TRUE; model->MESAgamma = value->rValue; break; case MESA_MOD_EPSI: model->MESAepsiGiven = TRUE; model->MESAepsi = value->rValue; break; case MESA_MOD_CBS: model->MESAcbsGiven = TRUE; model->MESAcbs = value->rValue; break; case MESA_MOD_CAS: model->MESAcasGiven = TRUE; model->MESAcas = value->rValue; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mesa/Makefile.am0000644000175000017500000000072113546075722022144 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libmesa.la libmesa_la_SOURCES = \ mesa.c \ mesaacl.c \ mesaask.c \ mesadefs.h \ mesaext.h \ mesagetic.c \ mesainit.c \ mesainit.h \ mesaitf.h \ mesaload.c \ mesamask.c \ mesamparam.c \ mesaparam.c \ mesapzl.c \ mesasetup.c \ mesatemp.c \ mesatrunc.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/mesa/mesapzl.c0000644000175000017500000001224213546075722021730 0ustar carstencarsten/********** Copyright 1993: T. Ytterdal, K. Lee, M. Shur and T. A. Fjeldly. All rights reserved. Author: Trond Ytterdal **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mesadefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MESApzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { MESAmodel *model = (MESAmodel*)inModel; MESAinstance *here; double gm; double gds; double ggspp; double ggdpp; double ggs; double xgs; double ggd; double xgd; double f; double lambda; double vds; double delidgch; double delidvds; double m; for( ; model != NULL; model = MESAnextModel(model)) { for( here = MESAinstances(model); here != NULL; here = MESAnextInstance(here)) { f = ckt->CKTomega/2/M_PI; if(here->MESAdelf == 0) lambda = here->MESAtLambda; else lambda = here->MESAtLambda+0.5*(here->MESAtLambdahf-here->MESAtLambda)* (1+tanh((f-here->MESAfl)/here->MESAdelf)); vds= *(ckt->CKTstate0 + here->MESAvgs) - *(ckt->CKTstate0 + here->MESAvgd); delidgch = here->MESAdelidgch0*(1+lambda*vds); delidvds = here->MESAdelidvds0*(1+2*lambda*vds) - here->MESAdelidvds1; gm = (delidgch*here->MESAgm0+here->MESAgm1)*here->MESAgm2; gds = delidvds+here->MESAgds0; ggspp=*(ckt->CKTstate0 + here->MESAggspp); ggdpp=*(ckt->CKTstate0 + here->MESAggdpp); ggs= *(ckt->CKTstate0 + here->MESAggs) ; xgs= *(ckt->CKTstate0 + here->MESAqgs) ; ggd= *(ckt->CKTstate0 + here->MESAggd) ; xgd= *(ckt->CKTstate0 + here->MESAqgd) ; m = here->MESAm; *(here->MESAdrainDrainPtr) += m * (here->MESAdrainConduct); *(here->MESAsourceSourcePtr) += m * (here->MESAsourceConduct); *(here->MESAgateGatePtr) += m * (here->MESAgateConduct); *(here->MESAsourcePrmPrmSourcePrmPrmPtr) += m * (here->MESAtGi+ggspp); *(here->MESAdrainPrmPrmDrainPrmPrmPtr) += m * (here->MESAtGf+ggdpp); *(here->MESAdrainDrainPrimePtr) -= m * (here->MESAdrainConduct); *(here->MESAdrainPrimeDrainPtr) -= m * (here->MESAdrainConduct); *(here->MESAsourceSourcePrimePtr) -= m * (here->MESAsourceConduct); *(here->MESAsourcePrimeSourcePtr) -= m * (here->MESAsourceConduct); *(here->MESAgateGatePrimePtr) -= m * (here->MESAgateConduct); *(here->MESAgatePrimeGatePtr) -= m * (here->MESAgateConduct); *(here->MESAgatePrimeDrainPrimePtr) += m * (-ggd); *(here->MESAgatePrimeSourcePrimePtr) += m * (-ggs); *(here->MESAdrainPrimeGatePrimePtr) += m * (gm-ggd); *(here->MESAdrainPrimeSourcePrimePtr) += m * (-gds-gm); *(here->MESAsourcePrimeGatePrimePtr) += m * (-ggs-gm); *(here->MESAsourcePrimeDrainPrimePtr) += m * (-gds); *(here->MESAgatePrimeGatePrimePtr) += m * (ggd+ggs+here->MESAgateConduct+ggspp+ggdpp); *(here->MESAdrainPrimeDrainPrimePtr) += m * (gds+ggd+here->MESAdrainConduct+here->MESAtGf); *(here->MESAsourcePrimeSourcePrimePtr) += m * (gds+gm+ggs+here->MESAsourceConduct+here->MESAtGi); *(here->MESAsourcePrimeSourcePrmPrmPtr) -= m * (here->MESAtGi); *(here->MESAsourcePrmPrmSourcePrimePtr) -= m * (here->MESAtGi); *(here->MESAgatePrimeSourcePrmPrmPtr) -= m * (ggspp); *(here->MESAsourcePrmPrmGatePrimePtr) -= m * (ggspp); *(here->MESAdrainPrimeDrainPrmPrmPtr) -= m * (here->MESAtGf); *(here->MESAdrainPrmPrmDrainPrimePtr) -= m * (here->MESAtGf); *(here->MESAgatePrimeDrainPrmPrmPtr) -= m * (ggdpp); *(here->MESAdrainPrmPrmGatePrimePtr) -= m * (ggdpp); *(here->MESAsourcePrmPrmSourcePrmPrmPtr) += m * (xgs * s->real); *(here->MESAsourcePrmPrmSourcePrmPrmPtr+1) += m * (xgs * s->imag); *(here->MESAdrainPrmPrmDrainPrmPrmPtr) += m * (xgd * s->real); *(here->MESAdrainPrmPrmDrainPrmPrmPtr+1) += m * (xgd * s->imag); *(here->MESAgatePrimeGatePrimePtr) += m * ((xgd+xgs) * s->real); *(here->MESAgatePrimeGatePrimePtr+1) += m * ((xgd+xgs) * s->imag); *(here->MESAgatePrimeDrainPrmPrmPtr) -= m * (xgd * s->real); *(here->MESAgatePrimeDrainPrmPrmPtr+1) -= m * (xgd * s->imag); *(here->MESAdrainPrmPrmGatePrimePtr) -= m * (xgd * s->real); *(here->MESAdrainPrmPrmGatePrimePtr+1) -= m * (xgd * s->imag); *(here->MESAgatePrimeSourcePrmPrmPtr) -= m * (xgs * s->real); *(here->MESAgatePrimeSourcePrmPrmPtr+1) -= m * (xgs * s->imag); *(here->MESAsourcePrmPrmGatePrimePtr) -= m * (xgs * s->real); *(here->MESAsourcePrmPrmGatePrimePtr+1) -= m * (xgs * s->imag); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mesa/mesagetic.c0000644000175000017500000000213413546075722022215 0ustar carstencarsten/********** Copyright 1993: T. Ytterdal, K. Lee, M. Shur and T. A. Fjeldly. All rights reserved. Author: Trond Ytterdal **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mesadefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MESAgetic(GENmodel *inModel, CKTcircuit *ckt) { MESAmodel *model = (MESAmodel*)inModel; MESAinstance *here; /* * grab initial conditions out of rhs array. User specified, so use * external nodes to get values */ for( ; model ; model = MESAnextModel(model)) { for(here = MESAinstances(model); here ; here = MESAnextInstance(here)) { if(!here->MESAicVDSGiven) { here->MESAicVDS = *(ckt->CKTrhs + here->MESAdrainNode) - *(ckt->CKTrhs + here->MESAsourceNode); } if(!here->MESAicVGSGiven) { here->MESAicVGS = *(ckt->CKTrhs + here->MESAgateNode) - *(ckt->CKTrhs + here->MESAsourceNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mesa/mesatrunc.c0000644000175000017500000000127013546075722022255 0ustar carstencarsten/********** Copyright 1993: T. Ytterdal, K. Lee, M. Shur and T. A. Fjeldly. All rights reserved. Author: Trond Ytterdal **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mesadefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MESAtrunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { MESAmodel *model = (MESAmodel*)inModel; MESAinstance *here; for( ; model != NULL; model = MESAnextModel(model)) { for(here=MESAinstances(model);here!=NULL; here = MESAnextInstance(here)){ CKTterr(here->MESAqgs,ckt,timeStep); CKTterr(here->MESAqgd,ckt,timeStep); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mesa/mesatemp.c0000644000175000017500000001557213546075722022101 0ustar carstencarsten/********** Copyright 1993: T. Ytterdal, K. Lee, M. Shur and T. A. Fjeldly. All rights reserved. Author: Trond Ytterdal **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mesadefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define EPSILONGAAS (12.244*8.85418e-12) int MESAtemp(GENmodel *inModel, CKTcircuit *ckt) { MESAmodel *model = (MESAmodel*)inModel; MESAinstance *here; double temp; double vt; double d; for( ; model != NULL; model = MESAnextModel(model)) { if(!model->MESAlambdahfGiven) model->MESAlambdahf = model->MESAlambda; if(model->MESAlevel == 2) model->MESAvpo = CHARGE*model->MESAnd*model->MESAd*model->MESAd/ 2/EPSILONGAAS; else { model->MESAvpou = CHARGE*model->MESAndu*model->MESAdu*model->MESAdu/ 2/EPSILONGAAS; model->MESAvpod = CHARGE*model->MESAndelta*model->MESAth* (2*model->MESAdu + model->MESAth)/2/EPSILONGAAS; model->MESAvpo = model->MESAvpou+model->MESAvpod; } model->MESAdeltaSqr = model->MESAdelta*model->MESAdelta; for (here = MESAinstances(model); here != NULL ; here=MESAnextInstance(here)) { vt = CONSTKoverQ * here->MESAts; if(model->MESAmu1 == 0 && model->MESAmu2 == 0) here->MESAtMu = model->MESAmu*pow(here->MESAts/ model->MESAtmu,model->MESAxtm0); else { double muimp = model->MESAmu*pow(here->MESAts/ model->MESAtmu,model->MESAxtm0); double mupo = model->MESAmu1*pow(model->MESAtmu/ here->MESAts,model->MESAxtm1) + model->MESAmu2*pow(model->MESAtmu/ here->MESAts,model->MESAxtm2); here->MESAtMu = 1/(1/muimp+1/mupo); } here->MESAtTheta = model->MESAtheta; here->MESAtPhib = model->MESAphib-model->MESAphib1*(here->MESAts-ckt->CKTnomTemp); here->MESAtVto = model->MESAthreshold-model->MESAtvto*(here->MESAts-ckt->CKTnomTemp); here->MESAimax = CHARGE*model->MESAnmax*model->MESAvs*here->MESAwidth; if(model->MESAlevel == 2) here->MESAgchi0 = CHARGE*here->MESAwidth/here->MESAlength; else here->MESAgchi0 = CHARGE*here->MESAwidth/here->MESAlength*here->MESAtMu; here->MESAbeta = 2*EPSILONGAAS*model->MESAvs*model->MESAzeta*here->MESAwidth/ model->MESAd; here->MESAtEta = model->MESAeta*(1+here->MESAts/model->MESAteta0)+ model->MESAteta1/here->MESAts; here->MESAtLambda= model->MESAlambda*(1-here->MESAts/model->MESAtlambda); here->MESAtLambdahf = model->MESAlambdahf*(1-here->MESAts/model->MESAtlambda); if(model->MESAlevel == 3) d = model->MESAdu; else d = model->MESAd; if(model->MESAlevel == 4) here->MESAn0 = model->MESAepsi*here->MESAtEta*vt/2/CHARGE/d; else here->MESAn0 = EPSILONGAAS*here->MESAtEta*vt/CHARGE/d; here->MESAnsb0 = EPSILONGAAS*here->MESAtEta*vt/CHARGE/ (model->MESAdu + model->MESAth); here->MESAisatb0 = CHARGE*here->MESAn0*vt* here->MESAwidth/here->MESAlength; if(model->MESAlevel == 4) here->MESAcf = 0.5*model->MESAepsi*here->MESAwidth; else here->MESAcf = 0.5*EPSILONGAAS*here->MESAwidth; here->MESAcsatfs = 0.5*model->MESAastar*here->MESAts* here->MESAts*exp(-here->MESAtPhib/(CONSTboltz*here->MESAts))* here->MESAlength*here->MESAwidth; here->MESAcsatfd = 0.5*model->MESAastar*here->MESAtd* here->MESAtd*exp(-here->MESAtPhib/(CONSTboltz*here->MESAtd))* here->MESAlength*here->MESAwidth; here->MESAggrwl = model->MESAggr*here->MESAlength*here->MESAwidth* exp(model->MESAxchi*(here->MESAts-ckt->CKTnomTemp)); if(here->MESAcsatfs != 0) here->MESAvcrits = vt*log(vt/(CONSTroot2 * here->MESAcsatfs)); else here->MESAvcrits = DBL_MAX; if(here->MESAcsatfd != 0) { double vtd = CONSTKoverQ * here->MESAtd; here->MESAvcritd = vtd*log(vtd/(CONSTroot2 * here->MESAcsatfd)); } else here->MESAvcritd = DBL_MAX; temp = exp(here->MESAts/model->MESAtf); here->MESAfl = model->MESAflo*temp; here->MESAdelf = model->MESAdelfo*temp; if(model->MESArdi != 0.0) here->MESAtRdi = model->MESArdi*(1+ model->MESAtc1*(here->MESAtd-ckt->CKTnomTemp)+ model->MESAtc2*(here->MESAtd-ckt->CKTnomTemp)*(here->MESAtd-ckt->CKTnomTemp)); else here->MESAtRdi = 0; if(model->MESArsi != 0.0) here->MESAtRsi = model->MESArsi*(1+ model->MESAtc1*(here->MESAts-ckt->CKTnomTemp)+ model->MESAtc2*(here->MESAts-ckt->CKTnomTemp)*(here->MESAts-ckt->CKTnomTemp)); else here->MESAtRsi = 0; if(model->MESAgateResist != 0.0) here->MESAtRg = model->MESAgateResist*(1+ model->MESAtc1*(here->MESAts-ckt->CKTnomTemp)+ model->MESAtc2*(here->MESAts-ckt->CKTnomTemp)*(here->MESAts-ckt->CKTnomTemp)); else here->MESAtRg = 0; if(model->MESAsourceResist != 0.0) here->MESAtRs = model->MESAsourceResist*(1+ model->MESAtc1*(here->MESAts-ckt->CKTnomTemp)+ model->MESAtc2*(here->MESAts-ckt->CKTnomTemp)*(here->MESAts-ckt->CKTnomTemp)); else here->MESAtRs = 0; if(model->MESAdrainResist != 0.0) here->MESAtRd = model->MESAdrainResist*(1+ model->MESAtc1*(here->MESAtd-ckt->CKTnomTemp)+ model->MESAtc2*(here->MESAtd-ckt->CKTnomTemp)*(here->MESAtd-ckt->CKTnomTemp)); else here->MESAtRd = 0; if(model->MESAri != 0.0) here->MESAtRi = model->MESAri*(1+ model->MESAtc1*(here->MESAts-ckt->CKTnomTemp)+ model->MESAtc2*(here->MESAts-ckt->CKTnomTemp)*(here->MESAts-ckt->CKTnomTemp)); else here->MESAtRi = 0; if(model->MESArf != 0.0) here->MESAtRf = model->MESArf*(1+ model->MESAtc1*(here->MESAtd-ckt->CKTnomTemp)+ model->MESAtc2*(here->MESAtd-ckt->CKTnomTemp)*(here->MESAtd-ckt->CKTnomTemp)); else here->MESAtRf = 0; if(here->MESAtRd != 0) here->MESAdrainConduct = 1/here->MESAtRd; else here->MESAdrainConduct = 0; if(here->MESAtRs != 0) here->MESAsourceConduct = 1/here->MESAtRs; else here->MESAsourceConduct = 0; if(here->MESAtRg != 0) here->MESAgateConduct = 1/here->MESAtRg; else here->MESAgateConduct = 0; if(here->MESAtRi != 0) here->MESAtGi = 1/here->MESAtRi; else here->MESAtGi = 0; if(here->MESAtRf != 0) here->MESAtGf = 1/here->MESAtRf; else here->MESAtGf = 0; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mesa/mesa.c0000644000175000017500000001647013546075722021211 0ustar carstencarsten/********** Copyright 1993: T. Ytterdal, K. Lee, M. Shur and T. A. Fjeldly. All rights reserved. Author: Trond Ytterdal **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/devdefs.h" #include "mesadefs.h" #include "ngspice/suffix.h" IFparm MESApTable[] = { /* parameters */ OP("off", MESA_OFF, IF_FLAG ,"Device initially off"), IOP("l", MESA_LENGTH, IF_REAL ,"Length of device"), IOP("w", MESA_WIDTH, IF_REAL ,"Width of device"), IOP("m", MESA_M, IF_REAL ,"Parallel Multiplier"), IOP("icvds", MESA_IC_VDS, IF_REAL ,"Initial D-S voltage"), IOP("icvgs", MESA_IC_VGS, IF_REAL ,"Initial G-S voltage"), IOP("td", MESA_TD, IF_REAL ,"Instance drain temperature"), IOP("ts", MESA_TS, IF_REAL ,"Instance source temperature"), IOP("dtemp", MESA_DTEMP, IF_REAL ,"Instance temperature difference"), OP("dnode", MESA_DRAINNODE, IF_INTEGER,"Number of drain node"), OP("gnode", MESA_GATENODE, IF_INTEGER,"Number of gate node"), OP("snode", MESA_SOURCENODE, IF_INTEGER,"Number of source node"), OP("dprimenode",MESA_DRAINPRIMENODE, IF_INTEGER,"Number of internal drain node"), OP("sprimenode",MESA_SOURCEPRIMENODE,IF_INTEGER,"Number of internal source node"), OP("gprimenode",MESA_GATEPRIMENODE, IF_INTEGER,"Number of internal gate node"), OP("vgs", MESA_VGS, IF_REAL,"Gate-Source voltage"), OP("vgd", MESA_VGD, IF_REAL,"Gate-Drain voltage"), OP("cg", MESA_CG, IF_REAL,"Gate capacitance"), OP("cd", MESA_CD, IF_REAL,"Drain capacitance"), OP("cgd", MESA_CGD, IF_REAL,"Gate_Drain capacitance"), OP("gm", MESA_GM, IF_REAL,"Transconductance"), OP("gds", MESA_GDS, IF_REAL,"Drain-Source conductance"), OP("ggs", MESA_GGS, IF_REAL,"Gate-Source conductance"), OP("ggd", MESA_GGD, IF_REAL,"Gate-Drain conductance"), OP("qgs", MESA_QGS, IF_REAL,"Gate-Source charge storage"), OP("cqgs", MESA_CQGS, IF_REAL,"Capacitance due to gate-source charge storage"), OP("qgd", MESA_QGD, IF_REAL,"Gate-Drain charge storage"), OP("cqgd", MESA_CQGD, IF_REAL,"Capacitance due to gate-drain charge storage"), OP("cs", MESA_CS, IF_REAL,"Source current"), OP("p", MESA_POWER, IF_REAL,"Power dissipated by the mesfet") }; IFparm MESAmPTable[] = { /* model parameters */ OP( "type", MESA_MOD_TYPE, IF_STRING,"N-type or P-type MESfet model"), IOP( "vto", MESA_MOD_VTO, IF_REAL,"Pinch-off voltage"), IOPR("vt0", MESA_MOD_VTO, IF_REAL,"Pinch-off voltage"), IOP( "lambda", MESA_MOD_LAMBDA, IF_REAL,"Output conductance parameter"), IOP( "lambdahf",MESA_MOD_LAMBDAHF, IF_REAL,"Output conductance parameter at high frequencies"), IOP( "beta", MESA_MOD_BETA, IF_REAL,"Transconductance parameter"), IOP( "vs", MESA_MOD_VS, IF_REAL,"Saturation velocity"), IOP( "rd", MESA_MOD_RD, IF_REAL,"Drain ohmic resistance"), IOP( "rs", MESA_MOD_RS, IF_REAL,"Source ohmic resistance"), IOP( "rg", MESA_MOD_RG, IF_REAL,"Gate ohmic resistance"), IOP( "ri", MESA_MOD_RI, IF_REAL,"Gate-source ohmic resistance"), IOP( "rf", MESA_MOD_RF, IF_REAL,"Gate-drain ohmic resistance"), IOP( "rdi", MESA_MOD_RDI, IF_REAL,"Intrinsic source ohmic resistance"), IOP( "rsi", MESA_MOD_RSI, IF_REAL,"Intrinsic drain ohmic resistance"), IOP( "phib", MESA_MOD_PHIB, IF_REAL,"Effective Schottky barrier height at room temperature"), IOP( "phib1", MESA_MOD_PHIB1, IF_REAL,""), IOPR("tphib", MESA_MOD_PHIB1, IF_REAL,""), IOP( "astar", MESA_MOD_ASTAR, IF_REAL,"Effective Richardson constant"), IOP( "ggr", MESA_MOD_GGR, IF_REAL,"Reverse diode conductance"), IOP( "del", MESA_MOD_DEL, IF_REAL,""), IOP( "xchi", MESA_MOD_XCHI, IF_REAL,""), IOPR("tggr", MESA_MOD_XCHI, IF_REAL,""), IOP( "n", MESA_MOD_N, IF_REAL,"Emission coefficient"), IOP( "eta", MESA_MOD_ETA, IF_REAL,"Subthreshold ideality factor"), IOP( "m", MESA_MOD_M, IF_REAL,"Knee shape parameter"), IOP( "mc", MESA_MOD_MC, IF_REAL,"Knee shape parameter"), IOP( "alpha", MESA_MOD_ALPHA, IF_REAL,""), IOP( "sigma0", MESA_MOD_SIGMA0, IF_REAL,"Threshold voltage coefficient"), IOP( "vsigmat",MESA_MOD_VSIGMAT,IF_REAL,""), IOP( "vsigma", MESA_MOD_VSIGMA, IF_REAL,""), IOP( "mu", MESA_MOD_MU, IF_REAL,"Mobility"), IOP( "theta", MESA_MOD_THETA, IF_REAL,""), IOP( "mu1", MESA_MOD_MU1, IF_REAL,"Second moblity parameter"), IOP( "mu2", MESA_MOD_MU2, IF_REAL,"Third moblity parameter"), IOP( "d", MESA_MOD_D, IF_REAL,"Depth of device"), IOP( "nd", MESA_MOD_ND, IF_REAL,"Doping density"), IOP( "du", MESA_MOD_DU, IF_REAL,"Depth of device"), IOP( "ndu", MESA_MOD_NDU, IF_REAL,"Doping density"), IOP( "th", MESA_MOD_TH, IF_REAL,"Thickness of delta doped layer"), IOP( "ndelta", MESA_MOD_NDELTA, IF_REAL,"Delta doped layer doping density"), IOP( "delta", MESA_MOD_DELTA, IF_REAL,""), IOP( "tc", MESA_MOD_TC, IF_REAL,"Transconductance compression factor"), IOP( "tvto", MESA_MOD_TVTO, IF_REAL,"Temperature coefficient for vto"), IOPR("alphat", MESA_MOD_TVTO, IF_REAL,""), IOP( "tlambda",MESA_MOD_TLAMBDA,IF_REAL,"Temperature coefficient for lambda"), IOP( "teta0", MESA_MOD_TETA0, IF_REAL,"First temperature coefficient for eta"), IOP( "teta1", MESA_MOD_TETA1, IF_REAL,"Second temperature coefficient for eta"), IOP( "tmu", MESA_MOD_TMU, IF_REAL,"Temperature coefficient for mobility"), IOP( "xtm0", MESA_MOD_XTM0, IF_REAL,"First exponent for temp dependence of mobility"), IOP( "xtm1", MESA_MOD_XTM1, IF_REAL,"Second exponent for temp dependence of mobility"), IOP( "xtm2", MESA_MOD_XTM2, IF_REAL,"Third exponent for temp dependence of mobility"), IOP( "ks", MESA_MOD_KS, IF_REAL,"Sidegating coefficient"), IOP( "vsg", MESA_MOD_VSG, IF_REAL,"Sidegating voltage"), IOP( "tf", MESA_MOD_TF, IF_REAL,"Characteristic temperature determined by traps"), IOP( "flo", MESA_MOD_FLO, IF_REAL,""), IOP( "delfo", MESA_MOD_DELFO, IF_REAL,""), IOP( "ag", MESA_MOD_AG, IF_REAL,""), IOP( "rtc1", MESA_MOD_TC1, IF_REAL,""), IOP( "rtc2", MESA_MOD_TC2, IF_REAL,""), IOP( "zeta", MESA_MOD_ZETA, IF_REAL,""), IOP( "level", MESA_MOD_LEVEL, IF_REAL,""), IOP( "nmax", MESA_MOD_NMAX, IF_REAL,""), IOP( "gamma", MESA_MOD_GAMMA, IF_REAL,""), IOP( "epsi", MESA_MOD_EPSI, IF_REAL,""), IOP( "cas", MESA_MOD_CAS, IF_REAL,""), IOP( "cbs", MESA_MOD_CBS, IF_REAL,""), IP( "pmf", MESA_MOD_PMF, IF_FLAG,"P type MESfet model"), IP( "nmf", MESA_MOD_NMF, IF_FLAG,"N type MESfet model"), OP( "gd", MESA_MOD_DRAINCONDUCT, IF_REAL,"Drain conductance"), OP( "gs", MESA_MOD_SOURCECONDUCT, IF_REAL,"Source conductance"), OP( "vcrit", MESA_MOD_VCRIT, IF_REAL,"Critical voltage"), }; char *MESAnames[] = { "Drain", "Gate", "Source" }; int MESAnSize = NUMELEMS(MESAnames); int MESApTSize = NUMELEMS(MESApTable); int MESAmPTSize = NUMELEMS(MESAmPTable); int MESAiSize = sizeof(MESAinstance); int MESAmSize = sizeof(MESAmodel); tmpk8ny_4pz/src/spicelib/devices/mesa/mesainit.h0000644000175000017500000000037013546075722022072 0ustar carstencarsten#ifndef _MESAINIT_H #define _MESAINIT_H extern IFparm MESApTable[ ]; extern IFparm MESAmPTable[ ]; extern char *MESAnames[ ]; extern int MESApTSize; extern int MESAmPTSize; extern int MESAnSize; extern int MESAiSize; extern int MESAmSize; #endif tmpk8ny_4pz/src/spicelib/devices/mesa/mesaacl.c0000644000175000017500000001115613546075722021665 0ustar carstencarsten/********** Copyright 1993: T. Ytterdal, K. Lee, M. Shur and T. A. Fjeldly. All rights reserved. Author: Trond Ytterdal **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "mesadefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MESAacLoad(GENmodel *inModel, CKTcircuit *ckt) { MESAmodel *model = (MESAmodel*)inModel; MESAinstance *here; double gm; double gds; double ggspp; double ggdpp; double ggs; double xgs; double ggd; double xgd; double f; double lambda; double vds; double delidgch; double delidvds; double m; for( ; model != NULL; model = MESAnextModel(model)) { for( here = MESAinstances(model); here != NULL; here = MESAnextInstance(here)) { f = ckt->CKTomega/2/M_PI; if(here->MESAdelf == 0) lambda = here->MESAtLambda; else lambda = here->MESAtLambda+0.5*(here->MESAtLambdahf-here->MESAtLambda)* (1+tanh((f-here->MESAfl)/here->MESAdelf)); vds= *(ckt->CKTstate0 + here->MESAvgs) - *(ckt->CKTstate0 + here->MESAvgd); delidgch = here->MESAdelidgch0*(1+lambda*vds); delidvds = here->MESAdelidvds0*(1+2*lambda*vds) - here->MESAdelidvds1; gm = (delidgch*here->MESAgm0+here->MESAgm1)*here->MESAgm2; gds = delidvds+here->MESAgds0; ggspp=*(ckt->CKTstate0 + here->MESAggspp); ggdpp=*(ckt->CKTstate0 + here->MESAggdpp); ggs= *(ckt->CKTstate0 + here->MESAggs) ; xgs= *(ckt->CKTstate0 + here->MESAqgs) * ckt->CKTomega ; ggd= *(ckt->CKTstate0 + here->MESAggd) ; xgd= *(ckt->CKTstate0 + here->MESAqgd) * ckt->CKTomega ; m = here->MESAm; *(here->MESAdrainDrainPtr) += m * (here->MESAdrainConduct); *(here->MESAsourceSourcePtr) += m * (here->MESAsourceConduct); *(here->MESAgateGatePtr) += m * (here->MESAgateConduct); *(here->MESAsourcePrmPrmSourcePrmPrmPtr) += m * (here->MESAtGi+ggspp); *(here->MESAdrainPrmPrmDrainPrmPrmPtr) += m * (here->MESAtGf+ggdpp); *(here->MESAdrainDrainPrimePtr) -= m * (here->MESAdrainConduct); *(here->MESAdrainPrimeDrainPtr) -= m * (here->MESAdrainConduct); *(here->MESAsourceSourcePrimePtr) -= m * (here->MESAsourceConduct); *(here->MESAsourcePrimeSourcePtr) -= m * (here->MESAsourceConduct); *(here->MESAgateGatePrimePtr) -= m * (here->MESAgateConduct); *(here->MESAgatePrimeGatePtr) -= m * (here->MESAgateConduct); *(here->MESAgatePrimeDrainPrimePtr) += m * (-ggd); *(here->MESAgatePrimeSourcePrimePtr) += m * (-ggs); *(here->MESAdrainPrimeGatePrimePtr) += m * (gm-ggd); *(here->MESAdrainPrimeSourcePrimePtr) += m * (-gds-gm); *(here->MESAsourcePrimeGatePrimePtr) += m * (-ggs-gm); *(here->MESAsourcePrimeDrainPrimePtr) += m * (-gds); *(here->MESAgatePrimeGatePrimePtr) += m * (ggd+ggs+here->MESAgateConduct+ggspp+ggdpp); *(here->MESAdrainPrimeDrainPrimePtr) += m * (gds+ggd+here->MESAdrainConduct+here->MESAtGf); *(here->MESAsourcePrimeSourcePrimePtr) += m * (gds+gm+ggs+here->MESAsourceConduct+here->MESAtGi); *(here->MESAsourcePrimeSourcePrmPrmPtr) -= m * (here->MESAtGi); *(here->MESAsourcePrmPrmSourcePrimePtr) -= m * (here->MESAtGi); *(here->MESAgatePrimeSourcePrmPrmPtr) -= m * (ggspp); *(here->MESAsourcePrmPrmGatePrimePtr) -= m * (ggspp); *(here->MESAdrainPrimeDrainPrmPrmPtr) -= m * (here->MESAtGf); *(here->MESAdrainPrmPrmDrainPrimePtr) -= m * (here->MESAtGf); *(here->MESAgatePrimeDrainPrmPrmPtr) -= m * (ggdpp); *(here->MESAdrainPrmPrmGatePrimePtr) -= m * (ggdpp); *(here->MESAsourcePrmPrmSourcePrmPrmPtr+1) += m * (xgs); *(here->MESAdrainPrmPrmDrainPrmPrmPtr+1) += m * (xgd); *(here->MESAgatePrimeGatePrimePtr+1) += m * (xgd+xgs); *(here->MESAgatePrimeDrainPrmPrmPtr+1) -= m * (xgd); *(here->MESAdrainPrmPrmGatePrimePtr+1) -= m * (xgd); *(here->MESAgatePrimeSourcePrmPrmPtr+1) -= m * (xgs); *(here->MESAsourcePrmPrmGatePrimePtr+1) -= m * (xgs); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mesa/mesaload.c0000644000175000017500000010347513546075722022053 0ustar carstencarsten/********** Copyright 1993: T. Ytterdal, K. Lee, M. Shur and T. A. Fjeldly. All rights reserved. Author: Trond Ytterdal **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/cktdefs.h" #include "mesadefs.h" #include "ngspice/const.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* #define true 1 #define false 0 */ #define EPSILONGAAS (12.244*8.85418e-12) #define W (here->MESAwidth) #define L (here->MESAlength) static void mesa1(MESAmodel*, MESAinstance*, double, double, double, double*, double*, double*, double*,double*); static void mesa2(MESAmodel*, MESAinstance*, double, double, double, double*, double*, double*, double*,double*); static void mesa3(MESAmodel*, MESAinstance*, double, double, double, double*, double*, double*, double*,double*); void Pause(void); int MESAload(GENmodel *inModel, CKTcircuit *ckt) { MESAmodel *model = (MESAmodel*)inModel; MESAinstance *here; double capgd = 0.0; double capgs = 0.0; double cd; double cdhat = 0.0; double cdrain = 0.0; double cdreq; double ceq; double ceqgd; double ceqgs; double cg; double cgd; double cgs; double cghat = 0.0; double arg; double earg; double delvds; double delvgd; double delvgs; double delvgspp = 0.0; double delvgdpp = 0.0; double evgd; double evgs; double gds = 0.0; double geq; double ggd; double ggs; double gm = 0.0; double ggspp = 0.0; double cgspp = 0.0; double ggdpp = 0.0; double cgdpp = 0.0; double vcrits; double vcritd; double vds = 0.0; double vgd = 0.0; double vgs = 0.0; double vgspp = 0.0; double vgdpp = 0.0; double vgs1 = 0.0; double vgd1 = 0.0; #ifndef PREDICTOR double xfact; #endif double vted; double vtes; double vtd; double vts; double von; double ccorr; int inverse = FALSE; int icheck; int ichk1; int error; double m; /* loop through all the models */ for( ; model != NULL; model = MESAnextModel(model)) { /* loop through all the instances of the model */ for (here = MESAinstances(model); here != NULL ; here=MESAnextInstance(here)) { /* * dc model parameters */ vcrits = here->MESAvcrits; vcritd = here->MESAvcritd; vtd = CONSTKoverQ * here->MESAtd; vts = CONSTKoverQ * here->MESAts; vted = model->MESAn*vtd; vtes = model->MESAn*vts; /* * initialization */ icheck = 1; if( ckt->CKTmode & MODEINITSMSIG) { vgs = *(ckt->CKTstate0 + here->MESAvgs); vgd = *(ckt->CKTstate0 + here->MESAvgd); vgspp = *(ckt->CKTstate0 + here->MESAvgspp); vgdpp = *(ckt->CKTstate0 + here->MESAvgdpp); } else if (ckt->CKTmode & MODEINITTRAN) { vgs = *(ckt->CKTstate1 + here->MESAvgs); vgd = *(ckt->CKTstate1 + here->MESAvgd); vgspp = *(ckt->CKTstate1 + here->MESAvgspp); vgdpp = *(ckt->CKTstate1 + here->MESAvgdpp); } else if ( (ckt->CKTmode & MODEINITJCT) && (ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC) ) { vds = here->MESAicVDS; vgs = here->MESAicVGS; vgd = vgs-vds; vgspp = vgs; vgdpp = vgd; } else if ( (ckt->CKTmode & MODEINITJCT) && (here->MESAoff == 0) ) { vgs = -1; vgd = -1; vgspp = 0; vgdpp = 0; } else if( (ckt->CKTmode & MODEINITJCT) || ((ckt->CKTmode & MODEINITFIX) && (here->MESAoff))) { vgs = 0; vgd = 0; vgspp = 0; vgdpp = 0; } else { #ifndef PREDICTOR if(ckt->CKTmode & MODEINITPRED) { xfact = ckt->CKTdelta/ckt->CKTdeltaOld[2]; *(ckt->CKTstate0 + here->MESAvgs) = *(ckt->CKTstate1 + here->MESAvgs); vgs = (1+xfact) * *(ckt->CKTstate1 + here->MESAvgs) - xfact * *(ckt->CKTstate2 + here->MESAvgs); *(ckt->CKTstate0 + here->MESAvgspp) = *(ckt->CKTstate1 + here->MESAvgspp); vgspp = (1+xfact) * *(ckt->CKTstate1 + here->MESAvgspp) - xfact * *(ckt->CKTstate2 + here->MESAvgspp); *(ckt->CKTstate0 + here->MESAvgd) = *(ckt->CKTstate1 + here->MESAvgd); vgd = (1+xfact)* *(ckt->CKTstate1 + here->MESAvgd) - xfact * *(ckt->CKTstate2 + here->MESAvgd); *(ckt->CKTstate0 + here->MESAvgdpp) = *(ckt->CKTstate1 + here->MESAvgdpp); vgdpp = (1+xfact) * *(ckt->CKTstate1 + here->MESAvgdpp) - xfact * *(ckt->CKTstate2 + here->MESAvgdpp); *(ckt->CKTstate0 + here->MESAcg) = *(ckt->CKTstate1 + here->MESAcg); *(ckt->CKTstate0 + here->MESAcd) = *(ckt->CKTstate1 + here->MESAcd); *(ckt->CKTstate0 + here->MESAcgd) = *(ckt->CKTstate1 + here->MESAcgd); *(ckt->CKTstate0 + here->MESAcgs) = *(ckt->CKTstate1 + here->MESAcgs); *(ckt->CKTstate0 + here->MESAgm) = *(ckt->CKTstate1 + here->MESAgm); *(ckt->CKTstate0 + here->MESAgds) = *(ckt->CKTstate1 + here->MESAgds); *(ckt->CKTstate0 + here->MESAggs) = *(ckt->CKTstate1 + here->MESAggs); *(ckt->CKTstate0 + here->MESAggd) = *(ckt->CKTstate1 + here->MESAggd); *(ckt->CKTstate0 + here->MESAggspp) = *(ckt->CKTstate1 + here->MESAggspp); *(ckt->CKTstate0 + here->MESAcgspp) = *(ckt->CKTstate1 + here->MESAcgspp); *(ckt->CKTstate0 + here->MESAggdpp) = *(ckt->CKTstate1 + here->MESAggdpp); *(ckt->CKTstate0 + here->MESAcgdpp) = *(ckt->CKTstate1 + here->MESAcgdpp); } else { #endif /* PREDICTOR */ /* * compute new nonlinear branch voltages */ vgs = (*(ckt->CKTrhsOld+ here->MESAgatePrimeNode)- *(ckt->CKTrhsOld+here->MESAsourcePrimeNode)); vgd = (*(ckt->CKTrhsOld+here->MESAgatePrimeNode)- *(ckt->CKTrhsOld+here->MESAdrainPrimeNode)); vgspp = (*(ckt->CKTrhsOld+here->MESAgatePrimeNode)- *(ckt->CKTrhsOld+here->MESAsourcePrmPrmNode)); vgdpp = (*(ckt->CKTrhsOld+here->MESAgatePrimeNode)- *(ckt->CKTrhsOld+here->MESAdrainPrmPrmNode)); #ifndef PREDICTOR } #endif /* PREDICTOR */ delvgs=vgs - *(ckt->CKTstate0 + here->MESAvgs); delvgd=vgd - *(ckt->CKTstate0 + here->MESAvgd); delvds=delvgs - delvgd; delvgspp = vgspp - *(ckt->CKTstate0 + here->MESAvgspp); delvgdpp = vgdpp - *(ckt->CKTstate0 + here->MESAvgdpp); cghat= *(ckt->CKTstate0 + here->MESAcg) + *(ckt->CKTstate0 + here->MESAggd)*delvgd + *(ckt->CKTstate0 + here->MESAggs)*delvgs + *(ckt->CKTstate0 + here->MESAggspp)*delvgspp+ *(ckt->CKTstate0 + here->MESAggdpp)*delvgdpp; cdhat= *(ckt->CKTstate0 + here->MESAcd) + *(ckt->CKTstate0 + here->MESAgm)*delvgs + *(ckt->CKTstate0 + here->MESAgds)*delvds - *(ckt->CKTstate0 + here->MESAggd)*delvgd; /* * bypass if solution has not changed */ if((ckt->CKTbypass) && (!(ckt->CKTmode & MODEINITPRED)) && (fabs(delvgs) < ckt->CKTreltol*MAX(fabs(vgs), fabs(*(ckt->CKTstate0 + here->MESAvgs)))+ ckt->CKTvoltTol) ) if((fabs(delvgd) < ckt->CKTreltol*MAX(fabs(vgd), fabs(*(ckt->CKTstate0 + here->MESAvgd)))+ ckt->CKTvoltTol)) if((fabs(delvgspp) < ckt->CKTreltol*MAX(fabs(vgspp), fabs(*(ckt->CKTstate0 + here->MESAvgspp)))+ ckt->CKTvoltTol)) if((fabs(delvgdpp) < ckt->CKTreltol*MAX(fabs(vgdpp), fabs(*(ckt->CKTstate0 + here->MESAvgdpp)))+ ckt->CKTvoltTol)) if((fabs(cghat-*(ckt->CKTstate0 + here->MESAcg)) < ckt->CKTreltol*MAX(fabs(cghat), fabs(*(ckt->CKTstate0 + here->MESAcg)))+ ckt->CKTabstol)) if((fabs(cdhat-*(ckt->CKTstate0 + here->MESAcd)) < ckt->CKTreltol*MAX(fabs(cdhat), fabs(*(ckt->CKTstate0 + here->MESAcd)))+ ckt->CKTabstol)) { /* we can do a bypass */ vgs= *(ckt->CKTstate0 + here->MESAvgs); vgd= *(ckt->CKTstate0 + here->MESAvgd); vds= vgs-vgd; vgspp = *(ckt->CKTstate0 + here->MESAvgspp); vgdpp = *(ckt->CKTstate0 + here->MESAvgdpp); cg= *(ckt->CKTstate0 + here->MESAcg); cd= *(ckt->CKTstate0 + here->MESAcd); cgs= *(ckt->CKTstate0 + here->MESAcgs); cgd= *(ckt->CKTstate0 + here->MESAcgd); gm= *(ckt->CKTstate0 + here->MESAgm); gds= *(ckt->CKTstate0 + here->MESAgds); ggs= *(ckt->CKTstate0 + here->MESAggs); ggd= *(ckt->CKTstate0 + here->MESAggd); ggspp = *(ckt->CKTstate0 + here->MESAggspp); cgspp = *(ckt->CKTstate0 + here->MESAcgspp); ggdpp = *(ckt->CKTstate0 + here->MESAggdpp); cgdpp = *(ckt->CKTstate0 + here->MESAcgdpp); goto load; } /* * limit nonlinear branch voltages */ ichk1=1; vgs = DEVpnjlim(vgs,*(ckt->CKTstate0 + here->MESAvgs),vtes, vcrits, &icheck); vgd = DEVpnjlim(vgd,*(ckt->CKTstate0 + here->MESAvgd),vted, vcritd,&ichk1); if (ichk1 == 1) { icheck=1; } vgs = DEVfetlim(vgs,*(ckt->CKTstate0 + here->MESAvgs), here->MESAtVto); vgd = DEVfetlim(vgd,*(ckt->CKTstate0 + here->MESAvgd), here->MESAtVto); if(here->MESAsourcePrmPrmNode == here->MESAsourcePrimeNode) vgspp = vgs; if(here->MESAdrainPrmPrmNode == here->MESAdrainPrimeNode) vgdpp = vgd; } /* * determine dc current and derivatives */ vds = vgs-vgd; arg = -vgs*model->MESAdel/vts; earg = exp(arg); evgs = exp(vgs/vtes); ggs = here->MESAcsatfs*evgs/vtes+here->MESAggrwl*earg*(1-arg)+ckt->CKTgmin; cgs = here->MESAcsatfs*(evgs-1)+here->MESAggrwl*vgs*earg+ ckt->CKTgmin*vgs; cg = cgs; arg = -vgd*model->MESAdel/vtd; earg = exp(arg); evgd = exp(vgd/vted); ggd = here->MESAcsatfd*evgd/vted+here->MESAggrwl*earg*(1-arg)+ckt->CKTgmin; cgd = here->MESAcsatfd*(evgd-1)+here->MESAggrwl*vgd*earg+ ckt->CKTgmin*vgd; cg = cg+cgd; if(vds < 0) { vds = -vds; inverse = TRUE; } von = here->MESAtVto+model->MESAks*(*(ckt->CKTrhsOld+here->MESAsourcePrimeNode)-model->MESAvsg); if(model->MESAlevel == 2) mesa1(model,here,inverse?vgd:vgs,vds,von,&cdrain,&gm,&gds,&capgs,&capgd); else if(model->MESAlevel == 3) mesa2(model,here,inverse?vgd:vgs,vds,von,&cdrain,&gm,&gds,&capgs,&capgd); else if(model->MESAlevel == 4) mesa3(model,here,inverse?vgd:vgs,vds,von,&cdrain,&gm,&gds,&capgs,&capgd); if(inverse) { cdrain = -cdrain; vds = -vds; SWAP(double, capgs, capgd); } /* * compute equivalent drain current source */ cd = cdrain - cgd; if ( (ckt->CKTmode & (MODETRAN|MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) ){ /* * charge storage elements */ vgs1 = *(ckt->CKTstate1 + here->MESAvgspp); vgd1 = *(ckt->CKTstate1 + here->MESAvgdpp); if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->MESAqgs) = capgs*vgspp; *(ckt->CKTstate1 + here->MESAqgd) = capgd*vgdpp; } *(ckt->CKTstate0+here->MESAqgs) = *(ckt->CKTstate1 + here->MESAqgs) + capgs*(vgspp-vgs1); *(ckt->CKTstate0+here->MESAqgd) = *(ckt->CKTstate1 + here->MESAqgd) + capgd*(vgdpp-vgd1); /* * store small-signal parameters */ if( (!(ckt->CKTmode & MODETRANOP)) || (!(ckt->CKTmode & MODEUIC)) ) { if(ckt->CKTmode & MODEINITSMSIG) { *(ckt->CKTstate0 + here->MESAqgs) = capgs; *(ckt->CKTstate0 + here->MESAqgd) = capgd; continue; /*go to 1000*/ } /* * transient analysis */ if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->MESAqgs) = *(ckt->CKTstate0 + here->MESAqgs); *(ckt->CKTstate1 + here->MESAqgd) = *(ckt->CKTstate0 + here->MESAqgd); } error = NIintegrate(ckt,&geq,&ceq,capgs,here->MESAqgs); if(error) return(error); ggspp = geq; cgspp = *(ckt->CKTstate0 + here->MESAcqgs); cg = cg + cgspp; error = NIintegrate(ckt,&geq,&ceq,capgd,here->MESAqgd); if(error) return(error); ggdpp = geq; cgdpp = *(ckt->CKTstate0 + here->MESAcqgd); cg = cg + cgdpp; cd = cd - cgdpp; if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->MESAcqgs) = *(ckt->CKTstate0 + here->MESAcqgs); *(ckt->CKTstate1 + here->MESAcqgd) = *(ckt->CKTstate0 + here->MESAcqgd); } } } /* * check convergence */ if( (!(ckt->CKTmode & MODEINITFIX)) | (!(ckt->CKTmode & MODEUIC))) { if( (icheck == 1) || (fabs(cghat-cg) >= ckt->CKTreltol* MAX(fabs(cghat),fabs(cg))+ckt->CKTabstol) || (fabs(cdhat-cd) > ckt->CKTreltol* MAX(fabs(cdhat),fabs(cd))+ckt->CKTabstol) ) { ckt->CKTnoncon++; } } *(ckt->CKTstate0 + here->MESAvgs) = vgs; *(ckt->CKTstate0 + here->MESAvgspp) = vgspp; *(ckt->CKTstate0 + here->MESAvgd) = vgd; *(ckt->CKTstate0 + here->MESAvgdpp) = vgdpp; *(ckt->CKTstate0 + here->MESAcg) = cg; *(ckt->CKTstate0 + here->MESAcd) = cd; *(ckt->CKTstate0 + here->MESAcgd) = cgd; *(ckt->CKTstate0 + here->MESAcgs) = cgs; *(ckt->CKTstate0 + here->MESAgm) = gm; *(ckt->CKTstate0 + here->MESAgds) = gds; *(ckt->CKTstate0 + here->MESAggs) = ggs; *(ckt->CKTstate0 + here->MESAggd) = ggd; *(ckt->CKTstate0 + here->MESAggspp) = ggspp; *(ckt->CKTstate0 + here->MESAcgspp) = cgspp; *(ckt->CKTstate0 + here->MESAggdpp) = ggdpp; *(ckt->CKTstate0 + here->MESAcgdpp) = cgdpp; /* * load current vector */ load: m = here->MESAm; ccorr = model->MESAag*(cgs-cgd); ceqgd = cgd + cgdpp - ggd*vgd - ggdpp*vgdpp; ceqgs = cgs + cgspp - ggs*vgs - ggspp*vgspp; cdreq=((cd+cgd+cgdpp)-gds*vds-gm*vgs); *(ckt->CKTrhs + here->MESAgatePrimeNode) += m * (-ceqgs-ceqgd); ceqgd = (cgd-ggd*vgd); *(ckt->CKTrhs + here->MESAdrainPrimeNode) += m * (-cdreq+ceqgd+ccorr); ceqgd = (cgdpp-ggdpp*vgdpp); *(ckt->CKTrhs + here->MESAdrainPrmPrmNode) += ceqgd; ceqgs = (cgs-ggs*vgs); *(ckt->CKTrhs + here->MESAsourcePrimeNode) += m * (cdreq+ceqgs-ccorr); ceqgs = (cgspp-ggspp*vgspp); *(ckt->CKTrhs + here->MESAsourcePrmPrmNode) += ceqgs; /* * load y matrix */ *(here->MESAdrainDrainPtr) += m * (here->MESAdrainConduct); *(here->MESAsourceSourcePtr) += m * (here->MESAsourceConduct); *(here->MESAgateGatePtr) += m * (here->MESAgateConduct); *(here->MESAsourcePrmPrmSourcePrmPrmPtr) += m * (here->MESAtGi+ggspp); *(here->MESAdrainPrmPrmDrainPrmPrmPtr) += m * (here->MESAtGf+ggdpp); *(here->MESAgatePrimeGatePrimePtr) += m * (ggd+ggs+here->MESAgateConduct+ggspp+ggdpp); *(here->MESAdrainPrimeDrainPrimePtr) += m * (gds+ggd+here->MESAdrainConduct+here->MESAtGf); *(here->MESAsourcePrimeSourcePrimePtr) += m * (gds+gm+ggs+here->MESAsourceConduct+here->MESAtGi); *(here->MESAdrainDrainPrimePtr) -= m * (here->MESAdrainConduct); *(here->MESAdrainPrimeDrainPtr) -= m * (here->MESAdrainConduct); *(here->MESAsourceSourcePrimePtr) -= m * (here->MESAsourceConduct); *(here->MESAsourcePrimeSourcePtr) -= m * (here->MESAsourceConduct); *(here->MESAgateGatePrimePtr) -= m * (here->MESAgateConduct); *(here->MESAgatePrimeGatePtr) -= m * (here->MESAgateConduct); *(here->MESAgatePrimeDrainPrimePtr) -= m * (ggd); *(here->MESAgatePrimeSourcePrimePtr) -= m * (ggs); *(here->MESAdrainPrimeGatePrimePtr) += m * (gm-ggd); *(here->MESAdrainPrimeSourcePrimePtr) += m * (-gds-gm); *(here->MESAsourcePrimeGatePrimePtr) += m * (-ggs-gm); *(here->MESAsourcePrimeDrainPrimePtr) -= m * (gds); *(here->MESAsourcePrimeSourcePrmPrmPtr) -= m * (here->MESAtGi); *(here->MESAsourcePrmPrmSourcePrimePtr) -= m * (here->MESAtGi); *(here->MESAgatePrimeSourcePrmPrmPtr) -= m * (ggspp); *(here->MESAsourcePrmPrmGatePrimePtr) -= m * (ggspp); *(here->MESAdrainPrimeDrainPrmPrmPtr) -= m * (here->MESAtGf); *(here->MESAdrainPrmPrmDrainPrimePtr) -= m * (here->MESAtGf); *(here->MESAgatePrimeDrainPrmPrmPtr) -= m * (ggdpp); *(here->MESAdrainPrmPrmGatePrimePtr) -= m * (ggdpp); } } return(OK); } #define ETA (here->MESAtEta) #define MU0 (here->MESAtMu) #define RS (here->MESAtRsi) #define RD (here->MESAtRdi) #define SIGMA0 (model->MESAsigma0) #define VSIGMAT (model->MESAvsigmat) #define VSIGMA (model->MESAvsigma) #define THETA (model->MESAtheta) #define VS (model->MESAvs) #define ND (model->MESAnd) #define D (model->MESAd) #define TC (model->MESAtc) #define MC (model->MESAmc) #define M0 (model->MESAm) #define ALPHA (model->MESAalpha) #define LAMBDA (here->MESAtLambda) #define NDELTA (model->MESAndelta) #define TH (model->MESAth) #define NDU (model->MESAndu) #define DU (model->MESAdu) #define NMAX (model->MESAnmax) #define GAMMA (model->MESAgamma) static void mesa1(MESAmodel *model, MESAinstance *here, double vgs, double vds, double von, double *cdrain, double *gm, double *gds, double *capgs, double *capgd) { double vt; double etavth; double vl; double rt; double mu; double beta; double vgt; double vgt0; double sigma; double vgte; double isat; double isata; double isatb; double ns; double a; double b; double c; double d; double e; double f; double g; double h; double m; double p; double q; double r; double s; double t; double u; double v; double w; double temp; double gch; double gchi; double vsate; double vdse; double cgc; double sqrt1; double delidgch; double delgchgchi; double delgchins; double delnsvgt; double delnsvgte; double delvgtevgt; double delidvsate; double delvsateisat; double delisatisata; double delisatavgte; double delisatabeta; double delisatisatb; double delvsategch; double delidvds; double ddevgte; double dvgtvgs; double dgchivgt; double dvgtevds; double dgchivds; double disatavgt; double disatavds; double disatbvgt; double dvsatevgt; double dvsatevds; double gmmadd; double gdsmadd; vt = CONSTKoverQ * here->MESAts; etavth = ETA*vt; rt = RS+RD; vgt0 = vgs - von; s = exp((vgt0-VSIGMAT)/VSIGMA); sigma = SIGMA0/(1+s); vgt = vgt0+sigma*vds; mu = MU0+THETA*vgt; vl = VS/mu*here->MESAlength; beta = here->MESAbeta/(model->MESAvpo+3*vl); u = vgt/vt-1; t = sqrt(model->MESAdeltaSqr+u*u); vgte = 0.5*vt*(2+u+t); a = 2*beta*vgte; b = exp(-vgt/etavth); if(vgte > model->MESAvpo) sqrt1 = 0; else sqrt1 = sqrt(1-vgte/model->MESAvpo); ns = 1.0/(1.0/ND/D/(1-sqrt1) + 1.0/here->MESAn0*b); if(ns < 1.0e-38) { *cdrain = 0; *gm = 0.0; *gds = 0.0; *capgs = here->MESAcf; *capgd = here->MESAcf; return; } gchi = here->MESAgchi0*mu*ns; gch = gchi/(1+gchi*rt); f = sqrt(1+2*a*RS); d = 1+a*RS + f; e = 1+TC*vgte; isata = a*vgte/(d*e); isatb = here->MESAisatb0*mu*exp(vgt/etavth); isat = isata*isatb/(isata+isatb); vsate = isat/gch; vdse = vds*pow(1+pow(vds/vsate,MC),-1.0/MC); m = M0+ALPHA*vgte; g = pow(vds/vsate,m); h = pow(1+g,1.0/m); here->MESAdelidgch0 = vds/h; delidgch = here->MESAdelidgch0*(1+LAMBDA*vds); *cdrain = gch*delidgch; if(vgt > model->MESAvpo) temp = 0; else temp = sqrt(1-vgt/model->MESAvpo); cgc = W*L*EPSILONGAAS/(temp+b)/D; c = (vsate-vdse)/(2*vsate-vdse); c = c*c; *capgs = here->MESAcf+2.0/3.0*cgc*(1-c); c = vsate/(2*vsate-vdse); c = c*c; *capgd = here->MESAcf+2.0/3.0*cgc*(1-c); temp = 1+gchi*rt; delgchgchi = 1.0/(temp*temp); delgchins = here->MESAgchi0*mu; delnsvgt = ns*ns*1.0/here->MESAn0/etavth*b; q = 1 - sqrt1; if(sqrt1 == 0) delnsvgte = 0; else delnsvgte = 0.5*ns*ns/(model->MESAvpo*ND*D*sqrt1*q*q); delvgtevgt = 0.5*(1+u/t); here->MESAdelidvds0 = gch/h; if(vds != 0.0) here->MESAdelidvds1 = (*cdrain)*pow(vds/vsate,m-1)/(vsate*(1+g)); else here->MESAdelidvds1 = 0.0; delidvds = here->MESAdelidvds0*(1+2*LAMBDA*vds) - here->MESAdelidvds1; delidvsate = (*cdrain)*g/(vsate*(1+g)); delvsateisat = 1.0/gch; r = isata+isatb; r = r*r; delisatisata = isatb*isatb/r; v = 1.0+1.0/f; ddevgte = 2*beta*RS*v*e+d*TC; temp = d*d*e*e; delisatavgte = (2*a*d*e - a*vgte*ddevgte)/temp; delisatabeta = 2*vgte*vgte*(d*e-a*e*RS*v)/temp; delisatisatb = isata*isata/r; delvsategch = -vsate/gch; dvgtvgs = 1 - SIGMA0*vds*s/VSIGMA/((1+s)*(1+s)); temp = here->MESAgchi0*ns*THETA; dgchivgt = delgchins*(delnsvgte*delvgtevgt+delnsvgt)+temp; dvgtevds = delvgtevgt*sigma; dgchivds = delgchins*(delnsvgte*dvgtevds+delnsvgt*sigma)+temp*sigma; temp = delisatabeta*3*beta*vl*THETA/(mu*(model->MESAvpo+3*vl)); disatavgt = delisatavgte*delvgtevgt+temp; disatavds = delisatavgte*dvgtevds+temp*sigma; disatbvgt = isatb/etavth+isatb/mu*THETA; p = delgchgchi*dgchivgt; w = delgchgchi*dgchivds; dvsatevgt = delvsateisat*(delisatisata*disatavgt+delisatisatb*disatbvgt)+delvsategch*p; dvsatevds = delvsateisat*(delisatisata*disatavds+delisatisatb*disatbvgt*sigma)+delvsategch*w; if(ALPHA != 0) { if(vds == 0) gmmadd = 0; else gmmadd = (*cdrain)*(log(1+g)/(m*m)-g*log(vds/vsate)/(m*(1+g)))* ALPHA*delvgtevgt; gdsmadd = gmmadd*sigma; } else { gmmadd = 0; gdsmadd = 0; } here->MESAgm0 = p; here->MESAgm1 = delidvsate*dvsatevgt; here->MESAgm2 = dvgtvgs; g = delidgch*p+here->MESAgm1; *gm = (g+gmmadd)*dvgtvgs; here->MESAgds0 = delidvsate*dvsatevds+delidgch*w+gdsmadd; *gds = delidvds+here->MESAgds0; } static void mesa2(MESAmodel *model, MESAinstance *here, double vgs, double vds, double von, double *cdrain, double *gm, double *gds, double *capgs, double *capgd) { double vt; double rt; double vgt; double etavth; double vgt0; double sigma; double vgte; double isat; double isata; double isatb; double nsa; double nsb; double ns; double a; double b; double c; double d; double e; double f; double g; double h; double p; double q; double r; double s; double t; double gch; double gchi; double vsate; double vdse; double ca; double cb; double cgc; double delidgch; double delgchgchi; double delgchins; double delnsvgt; double delnsbvgt; double delnsavgte; double delvgtevgt; double delidvsate; double delvsateisat; double delisatisata; double delisatavgte; double delisatisatb; double delvsategch; double delisatbvgt; double delvsatevgt; double delidvds; double ddevgte; double delvgtvgs; vt = CONSTKoverQ * here->MESAts; etavth = ETA*vt; rt = RS+RD; vgt0 = vgs - von; s = exp((vgt0-VSIGMAT)/VSIGMA); sigma = SIGMA0/(1+s); vgt = vgt0+sigma*vds; t = vgt/vt-1; q = sqrt(model->MESAdeltaSqr+t*t); vgte = 0.5*vt*(2+t+q); a = 2*model->MESAbeta*vgte; if(vgt > model->MESAvpod) { if(vgte > model->MESAvpo) { nsa = NDELTA*TH + NDU*DU; ca = EPSILONGAAS/DU; delnsavgte = 0; } else { r = sqrt((model->MESAvpo-vgte)/model->MESAvpou); nsa = NDELTA*TH + NDU*DU*(1-r); ca = EPSILONGAAS/DU/r; delnsavgte = NDU*DU/model->MESAvpou/2.0/r; } } else { if(model->MESAvpod - vgte < 0) { nsa = NDELTA*TH*(1-DU/TH); ca = EPSILONGAAS/DU; delnsavgte = 0; } else { r = sqrt(1+NDU/NDELTA*(model->MESAvpod - vgte)/model->MESAvpou); nsa = NDELTA*TH*(1-DU/TH*(r-1)); ca = EPSILONGAAS/DU/r; delnsavgte = DU*NDU/2.0/model->MESAvpou/r; } } b = exp(vgt/etavth); cb = EPSILONGAAS/(DU+TH)*b; nsb = here->MESAnsb0*b; delnsbvgt = nsb/etavth; ns = nsa*nsb/(nsa+nsb); if(ns < 1.0e-38) { *cdrain = 0; *gm = 0.0; *gds = 0.0; *capgs = here->MESAcf; *capgd = here->MESAcf; return; } gchi = here->MESAgchi0*ns; gch = gchi/(1+gchi*rt); f = sqrt(1+2*a*RS); d = 1+a*RS + f; e = 1+TC*vgte; isata = a*vgte/d/e; isatb = here->MESAisatb0*b; isat = isata*isatb/(isata+isatb); vsate = isat/gch; vdse = vds*pow(1+pow(vds/vsate,MC),-1.0/MC); g = pow(vds/vsate,M0); h = pow(1+g,1.0/M0); here->MESAdelidgch0 = vds/h; delidgch = here->MESAdelidgch0*(1+LAMBDA*vds); *cdrain = gch*delidgch; cgc = W*L*ca*cb/(ca+cb); c = (vsate-vdse)/(2*vsate-vdse); c = c*c; *capgs = here->MESAcf+2.0/3.0*cgc*(1-c); c = vsate/(2*vsate-vdse); c = c*c; *capgd = here->MESAcf+2.0/3.0*cgc*(1-c); c = vgt/vt-1; delvgtevgt = 0.5*(1+t/q); here->MESAdelidvds0 = gch/h; if(vds != 0.0) here->MESAdelidvds1 = (*cdrain)*pow(vds/vsate,M0-1)/vsate/(1+g); else here->MESAdelidvds1 = 0.0; delidvds = here->MESAdelidvds0*(1+2*LAMBDA*vds) - here->MESAdelidvds1; delgchgchi = 1.0/(1+gchi*rt)/(1+gchi*rt); delgchins = here->MESAgchi0; r = nsa+nsb; r = r*r; delnsvgt = (nsb*nsb*delvgtevgt*delnsavgte + nsa*nsa*delnsbvgt)/r; delidvsate = (*cdrain)*g/vsate/(1+g); delvsateisat = 1.0/gch; r = isata+isatb; r = r*r; delisatisata = isatb*isatb/r; ddevgte = 2*model->MESAbeta*RS*(1+1.0/f)*e+d*TC; delisatavgte = (2*a*d*e - a*vgte*ddevgte)/d/d/e/e; delisatisatb = isata*isata/r; delisatbvgt = isatb/etavth; delvsategch = -vsate/gch; delvgtvgs = 1-SIGMA0*vds*s/VSIGMA/(1+s)/(1+s); p = delgchgchi*delgchins*delnsvgt; delvsatevgt = delvsateisat*(delisatisata*delisatavgte*delvgtevgt + delisatisatb*delisatbvgt) + delvsategch*p; here->MESAgm0 = p; here->MESAgm1 = delidvsate*delvsatevgt; here->MESAgm2 = delvgtvgs; g = delidgch*p + here->MESAgm1; *gm = g*delvgtvgs; here->MESAgds0 = g*sigma; *gds = delidvds+here->MESAgds0; } static void mesa3(MESAmodel *model, MESAinstance *here, double vgs, double vds, double von, double *cdrain, double *gm, double *gds, double *capgs, double *capgd) { double vt; double vgt; double vgt0; double sigma; double vgte; double isat; double isatm; double ns; double nsm; double a; double b; double c; double d; double e; double g; double h; double p; double q; double s; double t; double u; double temp; double etavth; double gch; double gchi; double gchim; double vsate; double vdse; double cgc; double cgcm; double rt; double vl; double delidgch; double delgchgchi; double delgchins; double delnsnsm; double delnsmvgt; double delvgtevgt; double delidvsate; double delvsateisat; double delisatisatm; double delisatmvgte; double delisatmgchim; double delvsategch; double delidvds; double delvgtvgs; double delvsatevgt; vt = CONSTKoverQ * here->MESAts; etavth = ETA*vt; vl = VS/MU0*L; rt = RS+RD; vgt0 = vgs - von; s = exp((vgt0-VSIGMAT)/VSIGMA); sigma = SIGMA0/(1+s); vgt = vgt0+sigma*vds; u = 0.5*vgt/vt-1; t = sqrt(model->MESAdeltaSqr+u*u); vgte = vt*(2+u+t); b = exp(vgt/etavth); nsm = 2*here->MESAn0*log(1+0.5*b); if(nsm < 1.0e-38) { *cdrain = 0; *gm = 0.0; *gds = 0.0; *capgs = here->MESAcf; *capgd = here->MESAcf; return; } c = pow(nsm/NMAX,GAMMA); q = pow(1+c,1.0/GAMMA); ns = nsm/q; gchi = here->MESAgchi0*ns; gch = gchi/(1+gchi*rt); gchim = here->MESAgchi0*nsm; h = sqrt(1+2*gchim*model->MESArsi + vgte*vgte/(vl*vl)); p = 1+gchim*RS+h; isatm = gchim*vgte/p; g = pow(isatm/here->MESAimax,GAMMA); isat = isatm/pow(1+g,1/GAMMA); vsate = isat/gch; vdse = vds*pow(1+pow(vds/vsate,MC),-1.0/MC); d = pow(vds/vsate,M0); e = pow(1+d,1.0/M0); delidgch = vds*(1+LAMBDA*vds)/e; *cdrain = gch*delidgch; cgcm = 1.0/(1/model->MESAcas*D/model->MESAepsi + 1/model->MESAcbs*etavth/CHARGE/here->MESAn0*exp(-vgt/etavth)); cgc = W*L*cgcm/pow(1+c,1+1.0/GAMMA); /* { char buf[256]; void far pascal OutputDebugString(char*); sprintf(buf,"\n%f\t%e",vgs,cgc); OutputDebugString(buf); } */ a = (vsate-vdse)/(2*vsate-vdse); a = a*a; temp = 2.0/3.0; *capgs = here->MESAcf+temp*cgc*(1-a); a = vsate/(2*vsate-vdse); a = a*a; *capgd = here->MESAcf+temp*cgc*(1-a); delidvsate = (*cdrain)*d/vsate/(1+d); delidvds = gch*(1+2*LAMBDA*vds)/e-(*cdrain)* pow(vds/vsate,M0-1)/(vsate*(1+d)); a = 1+gchi*rt; delgchgchi = 1.0/(a*a); delgchins = here->MESAgchi0; delnsnsm = ns/nsm*(1-c/(1+c)); delnsmvgt = here->MESAn0/etavth/(1.0/b + 0.5); delvgtevgt = 0.5*(1+u/t); delvsateisat = 1.0/gch; delisatisatm = isat/isatm*(1-g/(1+g)); delisatmvgte = gchim*(p - vgte*vgte/(vl*vl*h))/(p*p); delvsategch = -vsate/gch; delisatmgchim = vgte*(p - gchim*RS*(1+1.0/h))/(p*p); delvgtvgs = 1-vds*SIGMA0/VSIGMA*s/((1+s)*(1+s)); p = delgchgchi*delgchins*delnsnsm*delnsmvgt; delvsatevgt = (delvsateisat*delisatisatm*(delisatmvgte*delvgtevgt + delisatmgchim*here->MESAgchi0*delnsmvgt)+delvsategch*p); g = delidgch*p + delidvsate*delvsatevgt; *gm = g*delvgtvgs; *gds = delidvds + g*sigma; } tmpk8ny_4pz/src/spicelib/devices/mesa/mesamask.c0000644000175000017500000001556213546075722022066 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "mesadefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int MESAmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { MESAmodel *here = (MESAmodel*)inst; NG_IGNORE(ckt); switch(which) { case MESA_MOD_VTO: value->rValue = here->MESAthreshold; return (OK); case MESA_MOD_VS: value->rValue = here->MESAvs; return (OK); case MESA_MOD_ALPHA: value->rValue = here->MESAalpha; return (OK); case MESA_MOD_BETA: value->rValue = here->MESAbeta; return (OK); case MESA_MOD_LAMBDA: value->rValue = here->MESAlambda; return (OK); case MESA_MOD_RG: value->rValue = here->MESAgateResist; return (OK); case MESA_MOD_RD: value->rValue = here->MESAdrainResist; return (OK); case MESA_MOD_RS: value->rValue = here->MESAsourceResist; return (OK); case MESA_MOD_RI: value->rValue = here->MESAri; return (OK); case MESA_MOD_RF: value->rValue = here->MESArf; return (OK); case MESA_MOD_RDI: value->rValue = here->MESArdi; return (OK); case MESA_MOD_RSI: value->rValue = here->MESArsi; return (OK); case MESA_MOD_PHIB: value->rValue = here->MESAphib; return (OK); case MESA_MOD_PHIB1: value->rValue = here->MESAphib1; return (OK); case MESA_MOD_ASTAR: value->rValue = here->MESAastar; return (OK); case MESA_MOD_GGR: value->rValue = here->MESAggr; return (OK); case MESA_MOD_DEL: value->rValue = here->MESAdel; return (OK); case MESA_MOD_XCHI: value->rValue = here->MESAxchi; return (OK); case MESA_MOD_N: value->rValue = here->MESAn; return (OK); case MESA_MOD_ETA: value->rValue = here->MESAeta; return (OK); case MESA_MOD_M: value->rValue = here->MESAm; return (OK); case MESA_MOD_MC: value->rValue = here->MESAmc; return (OK); case MESA_MOD_SIGMA0: value->rValue = here->MESAsigma0; return (OK); case MESA_MOD_VSIGMAT: value->rValue = here->MESAvsigmat; return (OK); case MESA_MOD_VSIGMA: value->rValue = here->MESAvsigma; return (OK); case MESA_MOD_MU: value->rValue = here->MESAmu; return (OK); case MESA_MOD_MU1: value->rValue = here->MESAmu1; return (OK); case MESA_MOD_MU2: value->rValue = here->MESAmu2; return (OK); case MESA_MOD_D: value->rValue = here->MESAd; return (OK); case MESA_MOD_ND: value->rValue = here->MESAnd; return (OK); case MESA_MOD_DELTA: value->rValue = here->MESAdelta; return (OK); case MESA_MOD_TC: value->rValue = here->MESAtc; return (OK); case MESA_MOD_TVTO: value->rValue = here->MESAtvto; return (OK); case MESA_MOD_TLAMBDA: value->rValue = here->MESAtlambda; return (OK); case MESA_MOD_TETA0: value->rValue = here->MESAteta0; return (OK); case MESA_MOD_TETA1: value->rValue = here->MESAteta1; return (OK); case MESA_MOD_TMU: value->rValue = here->MESAtmu; return (OK); case MESA_MOD_XTM0: value->rValue = here->MESAxtm0; return (OK); case MESA_MOD_XTM1: value->rValue = here->MESAxtm1; return (OK); case MESA_MOD_XTM2: value->rValue = here->MESAxtm2; return (OK); case MESA_MOD_KS: value->rValue = here->MESAks; return (OK); case MESA_MOD_VSG: value->rValue = here->MESAvsg; return (OK); case MESA_MOD_LAMBDAHF: value->rValue = here->MESAlambdahf; return (OK); case MESA_MOD_TF: value->rValue = here->MESAtf; return (OK); case MESA_MOD_FLO: value->rValue = here->MESAflo; return (OK); case MESA_MOD_DELFO: value->rValue = here->MESAdelfo; return (OK); case MESA_MOD_AG: value->rValue = here->MESAag; return (OK); case MESA_MOD_THETA: value->rValue = here->MESAtheta; return (OK); case MESA_MOD_TC1: value->rValue = here->MESAtc1; return (OK); case MESA_MOD_TC2: value->rValue = here->MESAtc2; return (OK); case MESA_MOD_ZETA: value->rValue = here->MESAzeta; return (OK); case MESA_MOD_DU: value->rValue = here->MESAdu; return (OK); case MESA_MOD_NDU: value->rValue = here->MESAndu; return (OK); case MESA_MOD_TH: value->rValue = here->MESAth; return (OK); case MESA_MOD_NDELTA: value->rValue = here->MESAndelta; return (OK); case MESA_MOD_LEVEL: value->rValue = here->MESAlevel; return (OK); case MESA_MOD_NMAX: value->rValue = here->MESAnmax; return (OK); case MESA_MOD_GAMMA: value->rValue = here->MESAgamma; return (OK); case MESA_MOD_EPSI: value->rValue = here->MESAepsi; return (OK); case MESA_MOD_CBS: value->rValue = here->MESAcbs; return (OK); case MESA_MOD_CAS: value->rValue = here->MESAcas; return (OK); case MESA_MOD_TYPE: if (here->MESAtype == NMF) value->sValue = "nmf"; else value->sValue = "pmf"; return (OK); case MESA_MOD_DRAINCONDUCT: value->rValue = here->MESAdrainConduct; return (OK); case MESA_MOD_SOURCECONDUCT: value->rValue = here->MESAsourceConduct; return (OK); case MESA_MOD_VCRIT: value->rValue = here->MESAvcrit; return (OK); default: return (E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/mesa/mesaask.c0000644000175000017500000001261013546075722021700 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ /* Imported into MESA model: 2001 Paolo Nenzi */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "mesadefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int MESAask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { MESAinstance *here = (MESAinstance*)inst; static char *msg = "Current and power not available in ac analysis"; NG_IGNORE(select); switch(which) { case MESA_LENGTH: value->rValue = here->MESAlength; return (OK); case MESA_WIDTH: value->rValue = here->MESAwidth; value->rValue *= here->MESAm; return (OK); case MESA_M: value->rValue = here->MESAm; return (OK); case MESA_IC_VDS: value->rValue = here->MESAicVDS; return (OK); case MESA_IC_VGS: value->rValue = here->MESAicVGS; return (OK); case MESA_OFF: value->iValue = here->MESAoff; return (OK); case MESA_TD: value->rValue = here->MESAtd - CONSTCtoK; return (OK); case MESA_TS: value->rValue = here->MESAts - CONSTCtoK; return (OK); case MESA_DTEMP: value->rValue = here->MESAdtemp; return (OK); case MESA_DRAINNODE: value->iValue = here->MESAdrainNode; return (OK); case MESA_GATENODE: value->iValue = here->MESAgateNode; return (OK); case MESA_SOURCENODE: value->iValue = here->MESAsourceNode; return (OK); case MESA_DRAINPRIMENODE: value->iValue = here->MESAdrainPrimeNode; return (OK); case MESA_SOURCEPRIMENODE: value->iValue = here->MESAsourcePrimeNode; return (OK); case MESA_GATEPRIMENODE: value->iValue = here->MESAgatePrimeNode; return (OK); case MESA_VGS: value->rValue = *(ckt->CKTstate0 + here->MESAvgs); return (OK); case MESA_VGD: value->rValue = *(ckt->CKTstate0 + here->MESAvgd); return (OK); case MESA_CG: value->rValue = *(ckt->CKTstate0 + here->MESAcg); value->rValue *= here->MESAm; return (OK); case MESA_CD: value->rValue = *(ckt->CKTstate0 + here->MESAcd); value->rValue *= here->MESAm; return (OK); case MESA_CGD: value->rValue = *(ckt->CKTstate0 + here->MESAcgd); value->rValue *= here->MESAm; return (OK); case MESA_GM: value->rValue = *(ckt->CKTstate0 + here->MESAgm); value->rValue *= here->MESAm; return (OK); case MESA_GDS: value->rValue = *(ckt->CKTstate0 + here->MESAgds); value->rValue *= here->MESAm; return (OK); case MESA_GGS: value->rValue = *(ckt->CKTstate0 + here->MESAggs); value->rValue *= here->MESAm; return (OK); case MESA_GGD: value->rValue = *(ckt->CKTstate0 + here->MESAggd); value->rValue *= here->MESAm; return (OK); case MESA_QGS: value->rValue = *(ckt->CKTstate0 + here->MESAqgs); value->rValue *= here->MESAm; return (OK); case MESA_CQGS: value->rValue = *(ckt->CKTstate0 + here->MESAcqgs); value->rValue *= here->MESAm; return (OK); case MESA_QGD: value->rValue = *(ckt->CKTstate0 + here->MESAqgd); value->rValue *= here->MESAm; return (OK); case MESA_CQGD: value->rValue = *(ckt->CKTstate0 + here->MESAcqgd); value->rValue *= here->MESAm; return (OK); case MESA_CS : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MESAask"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = -*(ckt->CKTstate0 + here->MESAcd); value->rValue -= *(ckt->CKTstate0 + here->MESAcg); value->rValue *= here->MESAm; } return(OK); case MESA_POWER : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "MESAask"; strcpy(errMsg,msg); return(E_ASKPOWER); } else { value->rValue = *(ckt->CKTstate0 + here->MESAcd) * *(ckt->CKTrhsOld + here->MESAdrainNode); value->rValue += *(ckt->CKTstate0 + here->MESAcg) * *(ckt->CKTrhsOld + here->MESAgateNode); value->rValue -= (*(ckt->CKTstate0+here->MESAcd) + *(ckt->CKTstate0 + here->MESAcg)) * *(ckt->CKTrhsOld + here->MESAsourceNode); value->rValue *= here->MESAm; } return(OK); default: return (E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/mesa/mesaparam.c0000644000175000017500000000412113546075722022220 0ustar carstencarsten/********** Copyright 1993: T. Ytterdal, K. Lee, M. Shur and T. A. Fjeldly. All rights reserved. Author: Trond Ytterdal **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "mesadefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int MESAparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { MESAinstance *here = (MESAinstance*)inst; NG_IGNORE(select); switch(param) { case MESA_LENGTH: here->MESAlength = value->rValue; here->MESAlengthGiven = TRUE; break; case MESA_WIDTH: here->MESAwidth = value->rValue; here->MESAwidthGiven = TRUE; break; case MESA_M: here->MESAm = value->rValue; here->MESAmGiven = TRUE; break; case MESA_IC_VDS: here->MESAicVDS = value->rValue; here->MESAicVDSGiven = TRUE; break; case MESA_IC_VGS: here->MESAicVGS = value->rValue; here->MESAicVGSGiven = TRUE; break; case MESA_OFF: here->MESAoff = value->iValue; break; case MESA_IC: switch(value->v.numValue) { case 2: here->MESAicVGS = *(value->v.vec.rVec+1); here->MESAicVGSGiven = TRUE; case 1: here->MESAicVDS = *(value->v.vec.rVec); here->MESAicVDSGiven = TRUE; break; default: return(E_BADPARM); } break; case MESA_TD: here->MESAtd = value->rValue+CONSTCtoK; here->MESAtdGiven = TRUE; break; case MESA_TS: here->MESAts = value->rValue+CONSTCtoK; here->MESAtsGiven = TRUE; break; case MESA_DTEMP: here->MESAdtemp = value->rValue; here->MESAdtempGiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/mesa/mesasetup.c0000644000175000017500000003507313546075722022272 0ustar carstencarsten/********** Copyright 1993: T. Ytterdal, K. Lee, M. Shur and T. A. Fjeldly. All rights reserved. Author: Trond Ytterdal Modified: 2001 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "mesadefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MESAsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* load the diode structure with those pointers needed later * for fast matrix loading */ { MESAmodel *model = (MESAmodel*)inModel; MESAinstance *here; int error; CKTnode *tmp; /* loop through all the diode models */ for( ; model != NULL; model = MESAnextModel(model)) { if( (model->MESAtype != NMF) ) { fprintf(stderr, "Only nmf model type supported, set to nmf\n"); model->MESAtype = NMF; } if(!model->MESAthresholdGiven) { model->MESAthreshold = -1.26; } if(!model->MESAdGiven) { model->MESAd = 0.12e-6; } if(!model->MESAduGiven) { model->MESAdu = 0.035e-6; } if(!model->MESAlambdaGiven) { model->MESAlambda = 0.045; } if(!model->MESAvsGiven) { model->MESAvs = 1.5e5; } if(!model->MESAbetaGiven) { model->MESAbeta = 0.0085; } if(!model->MESAetaGiven) { model->MESAeta = 1.73; } if(!model->MESAmGiven) { model->MESAm = 2.5; } if(!model->MESAmcGiven) { model->MESAmc = 3.0; } if(!model->MESAalphaGiven) { model->MESAalpha = 0.0; } if(!model->MESAsigma0Given) { model->MESAsigma0 = 0.081; } if(!model->MESAvsigmatGiven) { model->MESAvsigmat = 1.01; } if(!model->MESAvsigmaGiven) { model->MESAvsigma = 0.1; } if(!model->MESAmuGiven) { model->MESAmu = 0.23; } if(!model->MESAthetaGiven) { model->MESAtheta = 0; } if(!model->MESAmu1Given) { model->MESAmu1 = 0; } if(!model->MESAmu2Given) { model->MESAmu2 = 0; } if(!model->MESAndGiven) { model->MESAnd = 2.0e23; } if(!model->MESAnduGiven) { model->MESAndu = 1e22; } if(!model->MESAndeltaGiven) { model->MESAndelta = 6e24; } if(!model->MESAthGiven) { model->MESAth = 0.01e-6; } if(!model->MESAdeltaGiven) { model->MESAdelta = 5.0; } if(!model->MESAtcGiven) { model->MESAtc = 0.0; } if(!model->MESAdrainResistGiven) { model->MESAdrainResist = 0; } if(!model->MESAsourceResistGiven) { model->MESAsourceResist = 0; } if(!model->MESAgateResistGiven) { model->MESAgateResist = 0; } if(!model->MESAriGiven) { model->MESAri = 0; } if(!model->MESArfGiven) { model->MESArf = 0; } if(!model->MESArdiGiven) { model->MESArdi = 0; } if(!model->MESArsiGiven) { model->MESArsi = 0; } if(!model->MESAphibGiven) { model->MESAphib = 0.5*CHARGE; } if(!model->MESAphib1Given) { model->MESAphib1 = 0; } if(!model->MESAastarGiven) { model->MESAastar = 4.0e4; } if(!model->MESAggrGiven) { model->MESAggr = 40; } if(!model->MESAdelGiven) { model->MESAdel = 0.04; } if(!model->MESAxchiGiven) { model->MESAxchi = 0.033; } if(!model->MESAnGiven) { model->MESAn = 1; } if(!model->MESAtvtoGiven) { model->MESAtvto = 0; } if(!model->MESAtlambdaGiven) { model->MESAtlambda = DBL_MAX; } if(!model->MESAteta0Given) { model->MESAteta0 = DBL_MAX; } if(!model->MESAteta1Given) { model->MESAteta1 = 0; } if(!model->MESAtmuGiven) { model->MESAtmu = 300.15; } if(!model->MESAxtm0Given) { model->MESAxtm0 = 0; } if(!model->MESAxtm1Given) { model->MESAxtm1 = 0; } if(!model->MESAxtm2Given) { model->MESAxtm2 = 0; } if(!model->MESAksGiven) { model->MESAks = 0; } if(!model->MESAvsgGiven) { model->MESAvsg = 0; } if(!model->MESAtfGiven) { model->MESAtf = ckt->CKTtemp; } if(!model->MESAfloGiven) { model->MESAflo = 0; } if(!model->MESAdelfoGiven) { model->MESAdelfo = 0; } if(!model->MESAagGiven) { model->MESAag = 0; } if(!model->MESAtc1Given) { model->MESAtc1 = 0; } if(!model->MESAtc2Given) { model->MESAtc2 = 0; } if(!model->MESAzetaGiven) { model->MESAzeta = 1; } if(!model->MESAlevelGiven) { model->MESAlevel = 2; } if(!model->MESAnmaxGiven) { model->MESAnmax = 2e16; } if(!model->MESAgammaGiven) { model->MESAgamma = 3.0; } if(!model->MESAepsiGiven) { model->MESAepsi = 12.244*8.85418e-12; } if(!model->MESAcasGiven) { model->MESAcas = 1; } if(!model->MESAcbsGiven) { model->MESAcbs = 1; } if(model->MESAdrainResist != 0) { model->MESAdrainConduct = 1./model->MESAdrainResist; } else { model->MESAdrainConduct = DBL_MAX; } if(model->MESAsourceResist != 0) { model->MESAsourceConduct = 1./model->MESAsourceResist; } else { model->MESAsourceConduct = DBL_MAX; } model->MESAvcrit = 0.; /* until model has changed */ /* loop through all the instances of the model */ for (here = MESAinstances(model); here != NULL ; here=MESAnextInstance(here)) { if(!here->MESAlengthGiven) { here->MESAlength = 1e-6; } if(!here->MESAwidthGiven) { here->MESAwidth = 20e-6; } if(!here->MESAmGiven) { here->MESAm = 1.0; } if(!here->MESAdtempGiven) { here->MESAdtemp = 0.0; } if(!here->MESAtdGiven) { here->MESAtd = ckt->CKTtemp + here->MESAdtemp; } if(!here->MESAtsGiven) { here->MESAts = ckt->CKTtemp + here->MESAdtemp; } here->MESAstate = *states; *states += MESAnumStates; if(model->MESAsourceResist != 0) { if(here->MESAsourcePrimeNode == 0) { error = CKTmkVolt(ckt,&tmp,here->MESAname,"source"); if(error) return(error); here->MESAsourcePrimeNode = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->MESAsourcePrimeNode = here->MESAsourceNode; } if(model->MESAdrainResist != 0) { if(here->MESAdrainPrimeNode == 0) { error = CKTmkVolt(ckt,&tmp,here->MESAname,"drain"); if(error) return(error); here->MESAdrainPrimeNode = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->MESAdrainPrimeNode = here->MESAdrainNode; } if(model->MESAgateResist != 0) { if(here->MESAgatePrimeNode == 0) { error = CKTmkVolt(ckt,&tmp,here->MESAname,"gate"); if(error) return(error); here->MESAgatePrimeNode = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,2,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->MESAgatePrimeNode = here->MESAgateNode; } if(model->MESAri != 0) { if(here->MESAsourcePrmPrmNode == 0) { error = CKTmkVolt(ckt,&tmp,here->MESAname,"gs"); if(error) return(error); here->MESAsourcePrmPrmNode = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->MESAsourcePrmPrmNode = here->MESAsourcePrimeNode; } if(model->MESArf != 0) { if(here->MESAdrainPrmPrmNode == 0) { error = CKTmkVolt(ckt,&tmp,here->MESAname,"gd"); if(error) return(error); here->MESAdrainPrmPrmNode = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->MESAdrainPrmPrmNode = here->MESAdrainPrimeNode; } #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(MESAdrainDrainPtr,MESAdrainNode,MESAdrainNode); TSTALLOC(MESAdrainPrimeDrainPrimePtr,MESAdrainPrimeNode,MESAdrainPrimeNode); TSTALLOC(MESAdrainPrmPrmDrainPrmPrmPtr,MESAdrainPrmPrmNode,MESAdrainPrmPrmNode); TSTALLOC(MESAgateGatePtr,MESAgateNode,MESAgateNode); TSTALLOC(MESAgatePrimeGatePrimePtr,MESAgatePrimeNode,MESAgatePrimeNode); TSTALLOC(MESAsourceSourcePtr,MESAsourceNode,MESAsourceNode); TSTALLOC(MESAsourcePrimeSourcePrimePtr,MESAsourcePrimeNode,MESAsourcePrimeNode); TSTALLOC(MESAsourcePrmPrmSourcePrmPrmPtr,MESAsourcePrmPrmNode,MESAsourcePrmPrmNode); TSTALLOC(MESAdrainDrainPrimePtr,MESAdrainNode,MESAdrainPrimeNode); TSTALLOC(MESAdrainPrimeDrainPtr,MESAdrainPrimeNode,MESAdrainNode); TSTALLOC(MESAgatePrimeDrainPrimePtr,MESAgatePrimeNode,MESAdrainPrimeNode); TSTALLOC(MESAdrainPrimeGatePrimePtr,MESAdrainPrimeNode,MESAgatePrimeNode); TSTALLOC(MESAgatePrimeSourcePrimePtr,MESAgatePrimeNode,MESAsourcePrimeNode); TSTALLOC(MESAsourcePrimeGatePrimePtr,MESAsourcePrimeNode,MESAgatePrimeNode) ; TSTALLOC(MESAsourceSourcePrimePtr,MESAsourceNode,MESAsourcePrimeNode); TSTALLOC(MESAsourcePrimeSourcePtr,MESAsourcePrimeNode,MESAsourceNode); TSTALLOC(MESAdrainPrimeSourcePrimePtr,MESAdrainPrimeNode,MESAsourcePrimeNode); TSTALLOC(MESAsourcePrimeDrainPrimePtr,MESAsourcePrimeNode,MESAdrainPrimeNode); TSTALLOC(MESAgatePrimeGatePtr,MESAgatePrimeNode,MESAgateNode); TSTALLOC(MESAgateGatePrimePtr,MESAgateNode,MESAgatePrimeNode); TSTALLOC(MESAsourcePrmPrmSourcePrimePtr,MESAsourcePrmPrmNode,MESAsourcePrimeNode); TSTALLOC(MESAsourcePrimeSourcePrmPrmPtr,MESAsourcePrimeNode,MESAsourcePrmPrmNode); TSTALLOC(MESAsourcePrmPrmGatePrimePtr,MESAsourcePrmPrmNode,MESAgatePrimeNode); TSTALLOC(MESAgatePrimeSourcePrmPrmPtr,MESAgatePrimeNode,MESAsourcePrmPrmNode); TSTALLOC(MESAdrainPrmPrmDrainPrimePtr,MESAdrainPrmPrmNode,MESAdrainPrimeNode); TSTALLOC(MESAdrainPrimeDrainPrmPrmPtr,MESAdrainPrimeNode,MESAdrainPrmPrmNode); TSTALLOC(MESAdrainPrmPrmGatePrimePtr,MESAdrainPrmPrmNode,MESAgatePrimeNode); TSTALLOC(MESAgatePrimeDrainPrmPrmPtr,MESAgatePrimeNode,MESAdrainPrmPrmNode); } } return(OK); } int MESAunsetup(GENmodel *inModel, CKTcircuit *ckt) { MESAmodel *model; MESAinstance *here; for (model = (MESAmodel *)inModel; model != NULL; model = MESAnextModel(model)) { for (here = MESAinstances(model); here != NULL; here=MESAnextInstance(here)) { if (here->MESAdrainPrmPrmNode > 0 && here->MESAdrainPrmPrmNode != here->MESAdrainPrimeNode) CKTdltNNum(ckt, here->MESAdrainPrmPrmNode); here->MESAdrainPrmPrmNode = 0; if (here->MESAsourcePrmPrmNode > 0 && here->MESAsourcePrmPrmNode != here->MESAsourcePrimeNode) CKTdltNNum(ckt, here->MESAsourcePrmPrmNode); here->MESAsourcePrmPrmNode = 0; if (here->MESAgatePrimeNode > 0 && here->MESAgatePrimeNode != here->MESAgateNode) CKTdltNNum(ckt, here->MESAgatePrimeNode); here->MESAgatePrimeNode = 0; if (here->MESAdrainPrimeNode > 0 && here->MESAdrainPrimeNode != here->MESAdrainNode) CKTdltNNum(ckt, here->MESAdrainPrimeNode); here->MESAdrainPrimeNode = 0; if (here->MESAsourcePrimeNode > 0 && here->MESAsourcePrimeNode != here->MESAsourceNode) CKTdltNNum(ckt, here->MESAsourcePrimeNode); here->MESAsourcePrimeNode = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/mesa/mesainit.c0000644000175000017500000000313313546075722022065 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "mesaitf.h" #include "mesaext.h" #include "mesainit.h" SPICEdev MESAinfo = { .DEVpublic = { .name = "MESA", .description = "GaAs MESFET model", .terms = &MESAnSize, .numNames = &MESAnSize, .termNames = MESAnames, .numInstanceParms = &MESApTSize, .instanceParms = MESApTable, .numModelParms = &MESAmPTSize, .modelParms = MESAmPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = MESAparam, .DEVmodParam = MESAmParam, .DEVload = MESAload, .DEVsetup = MESAsetup, .DEVunsetup = MESAunsetup, .DEVpzSetup = MESAsetup, .DEVtemperature = MESAtemp, .DEVtrunc = MESAtrunc, .DEVfindBranch = NULL, .DEVacLoad = MESAacLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = MESAgetic, .DEVask = MESAask, .DEVmodAsk = MESAmAsk, .DEVpzLoad = MESApzLoad, .DEVconvTest = NULL, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &MESAiSize, .DEVmodSize = &MESAmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_mesa_info(void) { return &MESAinfo; } tmpk8ny_4pz/src/spicelib/devices/mesa/mesadefs.h0000644000175000017500000002723313546075722022057 0ustar carstencarsten/********** Copyright 1993: T. Ytterdal, K. Lee, M. Shur and T. A. Fjeldly. All rights reserved. Author: Trond Ytterdal **********/ #ifndef MESA #define MESA #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" /* structures used to describe MESFET Transistors */ /* indices to the array of MESAFET noise sources */ enum { MESARDNOIZ = 0, MESARSNOIZ, MESAIDNOIZ, MESAFLNOIZ, MESATOTNOIZ, /* finally, the number of noise sources */ MESANSRCS }; /* information used to describe a single instance */ typedef struct sMESAinstance { struct GENinstance gen; #define MESAmodPtr(inst) ((struct sMESAmodel *)((inst)->gen.GENmodPtr)) #define MESAnextInstance(inst) ((struct sMESAinstance *)((inst)->gen.GENnextInstance)) #define MESAname gen.GENname #define MESAstate gen.GENstate const int MESAdrainNode; /* number of drain node of MESAfet */ const int MESAgateNode; /* number of gate node of MESAfet */ const int MESAsourceNode; /* number of source node of MESAfet */ int MESAdrainPrimeNode; /* number of internal drain node of MESAfet */ int MESAgatePrimeNode; /* number of internal gate node of MESAfet */ int MESAsourcePrimeNode; /* number of internal source node of MESAfet */ int MESAsourcePrmPrmNode; int MESAdrainPrmPrmNode; double MESAlength; /* length of MESAfet */ double MESAwidth; /* width of MESAfet */ double MESAm; /* Parallel Multiplier */ double MESAicVDS; /* initial condition voltage D-S*/ double MESAicVGS; /* initial condition voltage G-S*/ double MESAtd; /* drain temperature */ double MESAts; /* source temperature */ double MESAdtemp; /* Instance temperature difference */ double MESAtVto; double MESAtLambda; double MESAtLambdahf; double MESAtEta; double MESAtMu; double MESAtPhib; double MESAtTheta; double MESAtRsi; double MESAtRdi; double MESAtRs; double MESAtRd; double MESAtRg; double MESAtRi; double MESAtRf; double MESAtGi; double MESAtGf; double MESAdrainConduct; double MESAsourceConduct; double MESAgateConduct; double *MESAdrainDrainPrimePtr; double *MESAgatePrimeDrainPrimePtr; double *MESAgatePrimeSourcePrimePtr; double *MESAsourceSourcePrimePtr; double *MESAdrainPrimeDrainPtr; double *MESAdrainPrimeGatePrimePtr; double *MESAdrainPrimeSourcePrimePtr; double *MESAsourcePrimeGatePrimePtr; double *MESAsourcePrimeSourcePtr; double *MESAsourcePrimeDrainPrimePtr; double *MESAdrainDrainPtr; double *MESAgatePrimeGatePrimePtr; double *MESAsourceSourcePtr; double *MESAdrainPrimeDrainPrimePtr; double *MESAsourcePrimeSourcePrimePtr; double *MESAgateGatePrimePtr; double *MESAgatePrimeGatePtr; double *MESAgateGatePtr; double *MESAsourcePrmPrmSourcePrmPrmPtr; double *MESAsourcePrmPrmSourcePrimePtr; double *MESAsourcePrimeSourcePrmPrmPtr; double *MESAsourcePrmPrmGatePrimePtr; double *MESAgatePrimeSourcePrmPrmPtr; double *MESAdrainPrmPrmDrainPrmPrmPtr; double *MESAdrainPrmPrmDrainPrimePtr; double *MESAdrainPrimeDrainPrmPrmPtr; double *MESAdrainPrmPrmGatePrimePtr; double *MESAgatePrimeDrainPrmPrmPtr; #define MESAvgs MESAstate #define MESAvgd MESAstate+1 #define MESAcg MESAstate+2 #define MESAcd MESAstate+3 #define MESAcgd MESAstate+4 #define MESAcgs MESAstate+5 #define MESAgm MESAstate+6 #define MESAgds MESAstate+7 #define MESAggs MESAstate+8 #define MESAggd MESAstate+9 #define MESAqgs MESAstate+10 #define MESAcqgs MESAstate+11 #define MESAqgd MESAstate+12 #define MESAcqgd MESAstate+13 #define MESAvgspp MESAstate+14 #define MESAggspp MESAstate+15 #define MESAcgspp MESAstate+16 #define MESAvgdpp MESAstate+17 #define MESAggdpp MESAstate+18 #define MESAcgdpp MESAstate+19 #define MESAnumStates 20 int MESAoff; unsigned MESAlengthGiven : 1; unsigned MESAwidthGiven : 1; unsigned MESAmGiven : 1; unsigned MESAicVDSGiven : 1; unsigned MESAicVGSGiven : 1; unsigned MESAtdGiven : 1; unsigned MESAtsGiven : 1; unsigned MESAdtempGiven : 1; int MESAmode; /* * naming convention: * x = vgs * y = vgd * z = vds * cdr = cdrain */ #define MESANDCOEFFS 27 #ifndef NODISTO double MESAdCoeffs[MESANDCOEFFS]; #else /* NODISTO */ double *MESAdCoeffs; #endif /* NODISTO */ #ifndef CONFIG #define cdr_x MESAdCoeffs[0] #define cdr_z MESAdCoeffs[1] #define cdr_x2 MESAdCoeffs[2] #define cdr_z2 MESAdCoeffs[3] #define cdr_xz MESAdCoeffs[4] #define cdr_x3 MESAdCoeffs[5] #define cdr_z3 MESAdCoeffs[6] #define cdr_x2z MESAdCoeffs[7] #define cdr_xz2 MESAdCoeffs[8] #define ggs3 MESAdCoeffs[9] #define ggd3 MESAdCoeffs[10] #define ggs2 MESAdCoeffs[11] #define ggd2 MESAdCoeffs[12] #define qgs_x2 MESAdCoeffs[13] #define qgs_y2 MESAdCoeffs[14] #define qgs_xy MESAdCoeffs[15] #define qgs_x3 MESAdCoeffs[16] #define qgs_y3 MESAdCoeffs[17] #define qgs_x2y MESAdCoeffs[18] #define qgs_xy2 MESAdCoeffs[19] #define qgd_x2 MESAdCoeffs[20] #define qgd_y2 MESAdCoeffs[21] #define qgd_xy MESAdCoeffs[22] #define qgd_x3 MESAdCoeffs[23] #define qgd_y3 MESAdCoeffs[24] #define qgd_x2y MESAdCoeffs[25] #define qgd_xy2 MESAdCoeffs[26] #endif #ifndef NONOISE double MESAnVar[NSTATVARS][MESANSRCS]; #else /* NONOISE */ double **MESAnVar; #endif /* NONOISE */ double MESAcsatfs; double MESAcsatfd; double MESAggrwl; double MESAgchi0; double MESAbeta; double MESAisatb0; double MESAimax; double MESAcf; double MESAfl; double MESAdelf; double MESAgds0; double MESAgm0; double MESAgm1; double MESAgm2; double MESAdelidvds0; double MESAdelidvds1; double MESAdelidgch0; double MESAn0; double MESAnsb0; double MESAvcrits; double MESAvcritd; } MESAinstance ; /* per model data */ typedef struct sMESAmodel { /* model structure for a MESAfet */ struct GENmodel gen; #define MESAmodType gen.GENmodType #define MESAnextModel(inst) ((struct sMESAmodel *)((inst)->gen.GENnextModel)) #define MESAinstances(inst) ((MESAinstance *)((inst)->gen.GENinstances)) #define MESAmodName gen.GENmodName int MESAtype; double MESAthreshold; double MESAlambda; double MESAbeta; double MESAvs; double MESAeta; double MESAm; double MESAmc; double MESAalpha; double MESAsigma0; double MESAvsigmat; double MESAvsigma; double MESAmu; double MESAtheta; double MESAmu1; double MESAmu2; double MESAd; double MESAnd; double MESAdu; double MESAndu; double MESAth; double MESAndelta; double MESAdelta; double MESAtc; double MESArdi; double MESArsi; double MESAdrainResist; double MESAsourceResist; double MESAdrainConduct; double MESAsourceConduct; double MESAgateResist; double MESAri; double MESArf; double MESAphib; double MESAphib1; double MESAastar; double MESAggr; double MESAdel; double MESAxchi; double MESAn; double MESAtvto; double MESAtlambda; double MESAteta0; double MESAteta1; double MESAtmu; double MESAxtm0; double MESAxtm1; double MESAxtm2; double MESAks; double MESAvsg; double MESAlambdahf; double MESAtf; double MESAflo; double MESAdelfo; double MESAag; double MESAtc1; double MESAtc2; double MESAzeta; double MESAlevel; double MESAnmax; double MESAgamma; double MESAepsi; double MESAcbs; double MESAcas; double MESAvcrit; double MESAsigma; double MESAvpo; double MESAvpou; double MESAvpod; double MESAdeltaSqr; unsigned MESAthresholdGiven:1; unsigned MESAlambdaGiven:1; unsigned MESAbetaGiven:1; unsigned MESAvsGiven:1; unsigned MESAetaGiven:1; unsigned MESAmGiven:1; unsigned MESAmcGiven:1; unsigned MESAalphaGiven:1; unsigned MESAsigma0Given:1; unsigned MESAvsigmatGiven:1; unsigned MESAvsigmaGiven:1; unsigned MESAmuGiven:1; unsigned MESAthetaGiven:1; unsigned MESAmu1Given:1; unsigned MESAmu2Given:1; unsigned MESAdGiven:1; unsigned MESAndGiven:1; unsigned MESAduGiven:1; unsigned MESAnduGiven:1; unsigned MESAthGiven:1; unsigned MESAndeltaGiven:1; unsigned MESAdeltaGiven:1; unsigned MESAtcGiven:1; unsigned MESArdiGiven:1; unsigned MESArsiGiven:1; unsigned MESAdrainResistGiven:1; unsigned MESAsourceResistGiven:1; unsigned MESAgateResistGiven:1; unsigned MESAriGiven:1; unsigned MESArfGiven:1; unsigned MESAphibGiven:1; unsigned MESAphib1Given:1; unsigned MESAastarGiven:1; unsigned MESAggrGiven:1; unsigned MESAdelGiven:1; unsigned MESAxchiGiven:1; unsigned MESAnGiven:1; unsigned MESAtvtoGiven:1; unsigned MESAtlambdaGiven:1; unsigned MESAteta0Given:1; unsigned MESAteta1Given:1; unsigned MESAtmuGiven:1; unsigned MESAxtm0Given:1; unsigned MESAxtm1Given:1; unsigned MESAxtm2Given:1; unsigned MESAksGiven:1; unsigned MESAvsgGiven:1; unsigned MESAlambdahfGiven:1; unsigned MESAtfGiven:1; unsigned MESAfloGiven:1; unsigned MESAdelfoGiven:1; unsigned MESAagGiven:1; unsigned MESAtc1Given:1; unsigned MESAtc2Given:1; unsigned MESAzetaGiven:1; unsigned MESAlevelGiven:1; unsigned MESAnmaxGiven:1; unsigned MESAgammaGiven:1; unsigned MESAepsiGiven:1; unsigned MESAcbsGiven:1; unsigned MESAcasGiven:1; } MESAmodel; #ifndef NMF #define NMF 1 #define PMF -1 #endif /* device parameters */ enum { MESA_LENGTH = 1, MESA_WIDTH, MESA_IC_VDS, MESA_IC_VGS, MESA_TD, MESA_TS, MESA_IC, MESA_OFF, MESA_CS, MESA_POWER, MESA_DTEMP, MESA_M, }; /* model parameters */ enum { MESA_MOD_VTO = 101, MESA_MOD_VS, MESA_MOD_LAMBDA, MESA_MOD_RD, MESA_MOD_RS, MESA_MOD_RG, MESA_MOD_RI, MESA_MOD_RF, MESA_MOD_RDI, MESA_MOD_RSI, MESA_MOD_PHIB, MESA_MOD_PHIB1, MESA_MOD_ASTAR, MESA_MOD_GGR, MESA_MOD_DEL, MESA_MOD_XCHI, MESA_MOD_N, MESA_MOD_ETA, MESA_MOD_M, MESA_MOD_MC, MESA_MOD_SIGMA0, MESA_MOD_VSIGMAT, MESA_MOD_VSIGMA, MESA_MOD_MU, MESA_MOD_MU1, MESA_MOD_MU2, MESA_MOD_D, MESA_MOD_ND, MESA_MOD_DELTA, MESA_MOD_TC, MESA_MOD_NMF, MESA_MOD_TVTO, }; enum { MESA_MOD_TLAMBDA = 134, MESA_MOD_TETA0, MESA_MOD_TETA1, MESA_MOD_TMU, MESA_MOD_XTM0, MESA_MOD_XTM1, MESA_MOD_XTM2, MESA_MOD_KS, MESA_MOD_VSG, MESA_MOD_LAMBDAHF, MESA_MOD_TF, MESA_MOD_FLO, MESA_MOD_DELFO, MESA_MOD_AG, MESA_MOD_THETA, MESA_MOD_ALPHA, MESA_MOD_TC1, MESA_MOD_TC2, MESA_MOD_ZETA, MESA_MOD_BETA, MESA_MOD_DU, MESA_MOD_NDU, MESA_MOD_TH, MESA_MOD_NDELTA, MESA_MOD_LEVEL, MESA_MOD_NMAX, MESA_MOD_GAMMA, MESA_MOD_EPSI, MESA_MOD_CBS, MESA_MOD_CAS, MESA_MOD_PMF, MESA_MOD_TYPE, }; /* device questions */ enum { MESA_DRAINNODE = 201, MESA_GATENODE, MESA_SOURCENODE, MESA_DRAINPRIMENODE, MESA_SOURCEPRIMENODE, MESA_GATEPRIMENODE, MESA_VGS, MESA_VGD, MESA_CG, MESA_CD, MESA_CGD, MESA_GM, MESA_GDS, MESA_GGS, MESA_GGD, MESA_QGS, MESA_CQGS, MESA_QGD, MESA_CQGD, }; /* model questions */ enum { MESA_MOD_DRAINCONDUCT = 301, MESA_MOD_SOURCECONDUCT, MESA_MOD_GATECONDUCT, MESA_MOD_DEPLETIONCAP, MESA_MOD_VCRIT, }; #include "mesaext.h" #endif /*MESA*/ tmpk8ny_4pz/src/spicelib/devices/bsim4/0000755000175000017500000000000013546075722020201 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/bsim4/b4check.c0000644000175000017500000013664013546075722021662 0ustar carstencarsten/* ****************************************************************************** * BSIM4 4.8.1 released by Chetan Kumar Dabhi 2/15/2017 * * BSIM4 Model Equations * ****************************************************************************** ****************************************************************************** * Copyright 2017 Regents of the University of California. * * All rights reserved. * * * * Project Director: Prof. Chenming Hu. * * Authors: Gary W. Ng, Weidong Liu, Xuemei Xi, Mohan Dunga, Wenwei Yang * * Ali Niknejad, Shivendra Singh Parihar, Chetan Kumar Dabhi * * Yogesh Singh Chauhan, Sayeef Salahuddin, Chenming Hu * ****************************************************************************** ****************************************************************************** * CMC In-Code Statement * * * * The Developer agrees that the following statement will appear in the * * model code that has been adopted as a CMC Standard. * * * * Software is distributed as is, completely without warranty or service * * support. The University of California and its employees are not liable * * for the condition or performance of the software. * * * * The University of California owns the copyright and grants users a * * perpetual, irrevocable, worldwide, non-exclusive, royalty-free license * * with respect to the software as set forth below. * * * * The University of California hereby disclaims all implied warranties. * * * * The University of California grants the users the right to modify, * * copy, and redistribute the software and documentation, both within * * the user's organization and externally, subject to the following * * restrictions: * * * * 1. The users agree not to charge for the University of California code * * itself but may charge for additions, extensions, or support. * * * * 2. In any product based on the software, the users agree to * * acknowledge the University of California that developed the * * software. This acknowledgment shall appear in the product * * documentation. * * * * 3. Redistributions to others of source code and documentation must * * retain the copyright notice, disclaimer, and list of conditions. * * * * 4. Redistributions to others in binary form must reproduce the * * copyright notice, disclaimer, and list of conditions in the * * documentation and/or other materials provided with the * * distribution. * * * * Agreed to on ______Feb. 15, 2017______________ * * * * By: ____University of California, Berkeley___ * * ____Chenming Hu__________________________ * * ____Professor in Graduate School ________ * * * ****************************************************************************** */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" int BSIM4checkModel( BSIM4model *model, BSIM4instance *here, CKTcircuit *ckt) { struct bsim4SizeDependParam *pParam; int Fatal_Flag = 0; FILE *fplog; if ((fplog = fopen("bsim4.out", "w")) != NULL) { pParam = here->pParam; fprintf(fplog, "BSIM4: Berkeley Short Channel IGFET Model-4\n"); fprintf(fplog, "Developed by Xuemei (Jane) Xi, Mohan Dunga, Prof. Ali Niknejad and Prof. Chenming Hu in 2003.\n"); fprintf(fplog, "\n"); fprintf(fplog, "++++++++++ BSIM4 PARAMETER CHECKING BELOW ++++++++++\n"); if ((strcmp(model->BSIM4version, "4.8.1")) && (strncmp(model->BSIM4version, "4.81", 4)) && (strncmp(model->BSIM4version, "4.8", 3))) { fprintf(fplog, "Warning: This model is BSIM4.8.1; you specified a deviating version number.\n"); printf("Warning: This model is BSIM4.8.1; you specified a deviating version number.\n"); } fprintf(fplog, "Model = %s\n", model->BSIM4modName); if ((here->BSIM4rgateMod == 2) || (here->BSIM4rgateMod == 3)) { if ((here->BSIM4trnqsMod == 1) || (here->BSIM4acnqsMod == 1)) { fprintf(fplog, "Warning: You've selected both Rg and charge deficit NQS; select one only.\n"); printf("Warning: You've selected both Rg and charge deficit NQS; select one only.\n"); } } if (model->BSIM4toxe <= 0.0) { fprintf(fplog, "Fatal: Toxe = %g is not positive.\n", model->BSIM4toxe); printf("Fatal: Toxe = %g is not positive.\n", model->BSIM4toxe); Fatal_Flag = 1; } if (here->BSIM4toxp <= 0.0) { fprintf(fplog, "Fatal: Toxp = %g is not positive.\n", here->BSIM4toxp); printf("Fatal: Toxp = %g is not positive.\n", here->BSIM4toxp); Fatal_Flag = 1; } if (model->BSIM4eot <= 0.0) { fprintf(fplog, "Fatal: EOT = %g is not positive.\n", model->BSIM4eot); printf("Fatal: EOT = %g is not positive.\n", model->BSIM4eot); Fatal_Flag = 1; } if (model->BSIM4epsrgate < 0.0) { fprintf(fplog, "Fatal: Epsrgate = %g is not positive.\n", model->BSIM4epsrgate); printf("Fatal: Epsrgate = %g is not positive.\n", model->BSIM4epsrgate); Fatal_Flag = 1; } if (model->BSIM4epsrsub < 0.0) { fprintf(fplog, "Fatal: Epsrsub = %g is not positive.\n", model->BSIM4epsrsub); printf("Fatal: Epsrsub = %g is not positive.\n", model->BSIM4epsrsub); Fatal_Flag = 1; } if (model->BSIM4easub < 0.0) { fprintf(fplog, "Fatal: Easub = %g is not positive.\n", model->BSIM4easub); printf("Fatal: Easub = %g is not positive.\n", model->BSIM4easub); Fatal_Flag = 1; } if (model->BSIM4ni0sub <= 0.0) { fprintf(fplog, "Fatal: Ni0sub = %g is not positive.\n", model->BSIM4ni0sub); printf("Fatal: Easub = %g is not positive.\n", model->BSIM4ni0sub); Fatal_Flag = 1; } if (model->BSIM4toxm <= 0.0) { fprintf(fplog, "Fatal: Toxm = %g is not positive.\n", model->BSIM4toxm); printf("Fatal: Toxm = %g is not positive.\n", model->BSIM4toxm); Fatal_Flag = 1; } if (model->BSIM4toxref <= 0.0) { fprintf(fplog, "Fatal: Toxref = %g is not positive.\n", model->BSIM4toxref); printf("Fatal: Toxref = %g is not positive.\n", model->BSIM4toxref); Fatal_Flag = 1; } if (pParam->BSIM4lpe0 < -pParam->BSIM4leff) { fprintf(fplog, "Fatal: Lpe0 = %g is less than -Leff.\n", pParam->BSIM4lpe0); printf("Fatal: Lpe0 = %g is less than -Leff.\n", pParam->BSIM4lpe0); Fatal_Flag = 1; } if (model->BSIM4lintnoi > pParam->BSIM4leff/2) { fprintf(fplog, "Fatal: Lintnoi = %g is too large - Leff for noise is negative.\n", model->BSIM4lintnoi); printf("Fatal: Lintnoi = %g is too large - Leff for noise is negative.\n", model->BSIM4lintnoi); Fatal_Flag = 1; } if (pParam->BSIM4lpeb < -pParam->BSIM4leff) { fprintf(fplog, "Fatal: Lpeb = %g is less than -Leff.\n", pParam->BSIM4lpeb); printf("Fatal: Lpeb = %g is less than -Leff.\n", pParam->BSIM4lpeb); Fatal_Flag = 1; } if (pParam->BSIM4ndep <= 0.0) { fprintf(fplog, "Fatal: Ndep = %g is not positive.\n", pParam->BSIM4ndep); printf("Fatal: Ndep = %g is not positive.\n", pParam->BSIM4ndep); Fatal_Flag = 1; } if (pParam->BSIM4phi <= 0.0) { fprintf(fplog, "Fatal: Phi = %g is not positive. Please check Phin and Ndep\n", pParam->BSIM4phi); fprintf(fplog, " Phin = %g Ndep = %g \n", pParam->BSIM4phin, pParam->BSIM4ndep); printf("Fatal: Phi = %g is not positive. Please check Phin and Ndep\n", pParam->BSIM4phi); printf(" Phin = %g Ndep = %g \n", pParam->BSIM4phin, pParam->BSIM4ndep); Fatal_Flag = 1; } if (pParam->BSIM4nsub <= 0.0) { fprintf(fplog, "Fatal: Nsub = %g is not positive.\n", pParam->BSIM4nsub); printf("Fatal: Nsub = %g is not positive.\n", pParam->BSIM4nsub); Fatal_Flag = 1; } if (pParam->BSIM4ngate < 0.0) { fprintf(fplog, "Fatal: Ngate = %g is not positive.\n", pParam->BSIM4ngate); printf("Fatal: Ngate = %g Ngate is not positive.\n", pParam->BSIM4ngate); Fatal_Flag = 1; } if (pParam->BSIM4ngate > 1.e25) { fprintf(fplog, "Fatal: Ngate = %g is too high.\n", pParam->BSIM4ngate); printf("Fatal: Ngate = %g Ngate is too high\n", pParam->BSIM4ngate); Fatal_Flag = 1; } if (pParam->BSIM4xj <= 0.0) { fprintf(fplog, "Fatal: Xj = %g is not positive.\n", pParam->BSIM4xj); printf("Fatal: Xj = %g is not positive.\n", pParam->BSIM4xj); Fatal_Flag = 1; } if (pParam->BSIM4dvt1 < 0.0) { fprintf(fplog, "Fatal: Dvt1 = %g is negative.\n", pParam->BSIM4dvt1); printf("Fatal: Dvt1 = %g is negative.\n", pParam->BSIM4dvt1); Fatal_Flag = 1; } if (pParam->BSIM4dvt1w < 0.0) { fprintf(fplog, "Fatal: Dvt1w = %g is negative.\n", pParam->BSIM4dvt1w); printf("Fatal: Dvt1w = %g is negative.\n", pParam->BSIM4dvt1w); Fatal_Flag = 1; } if (pParam->BSIM4w0 == -pParam->BSIM4weff) { fprintf(fplog, "Fatal: (W0 + Weff) = 0 causing divided-by-zero.\n"); printf("Fatal: (W0 + Weff) = 0 causing divided-by-zero.\n"); Fatal_Flag = 1; } if (pParam->BSIM4dsub < 0.0) { fprintf(fplog, "Fatal: Dsub = %g is negative.\n", pParam->BSIM4dsub); printf("Fatal: Dsub = %g is negative.\n", pParam->BSIM4dsub); Fatal_Flag = 1; } if (pParam->BSIM4b1 == -pParam->BSIM4weff) { fprintf(fplog, "Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); printf("Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); Fatal_Flag = 1; } if (here->BSIM4u0temp <= 0.0) { fprintf(fplog, "Fatal: u0 at current temperature = %g is not positive.\n", here->BSIM4u0temp); printf("Fatal: u0 at current temperature = %g is not positive.\n", here->BSIM4u0temp); Fatal_Flag = 1; } if (pParam->BSIM4delta < 0.0) { fprintf(fplog, "Fatal: Delta = %g is less than zero.\n", pParam->BSIM4delta); printf("Fatal: Delta = %g is less than zero.\n", pParam->BSIM4delta); Fatal_Flag = 1; } if (here->BSIM4vsattemp <= 0.0) { fprintf(fplog, "Fatal: Vsat at current temperature = %g is not positive.\n", here->BSIM4vsattemp); printf("Fatal: Vsat at current temperature = %g is not positive.\n", here->BSIM4vsattemp); Fatal_Flag = 1; } if (pParam->BSIM4pclm <= 0.0) { fprintf(fplog, "Fatal: Pclm = %g is not positive.\n", pParam->BSIM4pclm); printf("Fatal: Pclm = %g is not positive.\n", pParam->BSIM4pclm); Fatal_Flag = 1; } if (pParam->BSIM4drout < 0.0) { fprintf(fplog, "Fatal: Drout = %g is negative.\n", pParam->BSIM4drout); printf("Fatal: Drout = %g is negative.\n", pParam->BSIM4drout); Fatal_Flag = 1; } if (here->BSIM4m < 1.0) { fprintf(fplog, "Fatal: Number of multiplier = %g is smaller than one.\n", here->BSIM4m); printf("Fatal: Number of multiplier = %g is smaller than one.\n", here->BSIM4m); Fatal_Flag = 1; } if (here->BSIM4nf < 1.0) { fprintf(fplog, "Fatal: Number of finger = %g is smaller than one.\n", here->BSIM4nf); printf("Fatal: Number of finger = %g is smaller than one.\n", here->BSIM4nf); Fatal_Flag = 1; } if((here->BSIM4sa > 0.0) && (here->BSIM4sb > 0.0) && ((here->BSIM4nf == 1.0) || ((here->BSIM4nf > 1.0) && (here->BSIM4sd > 0.0))) ) { if (model->BSIM4saref <= 0.0) { fprintf(fplog, "Fatal: SAref = %g is not positive.\n",model->BSIM4saref); printf("Fatal: SAref = %g is not positive.\n",model->BSIM4saref); Fatal_Flag = 1; } if (model->BSIM4sbref <= 0.0) { fprintf(fplog, "Fatal: SBref = %g is not positive.\n",model->BSIM4sbref); printf("Fatal: SBref = %g is not positive.\n",model->BSIM4sbref); Fatal_Flag = 1; } } if ((here->BSIM4l + model->BSIM4xl) <= model->BSIM4xgl) { fprintf(fplog, "Fatal: The parameter xgl must be smaller than Ldrawn+XL.\n"); printf("Fatal: The parameter xgl must be smaller than Ldrawn+XL.\n"); Fatal_Flag = 1; } if (here->BSIM4ngcon < 1.0) { fprintf(fplog, "Fatal: The parameter ngcon cannot be smaller than one.\n"); printf("Fatal: The parameter ngcon cannot be smaller than one.\n"); Fatal_Flag = 1; } if ((here->BSIM4ngcon != 1.0) && (here->BSIM4ngcon != 2.0)) { here->BSIM4ngcon = 1.0; fprintf(fplog, "Warning: Ngcon must be equal to one or two; reset to 1.0.\n"); printf("Warning: Ngcon must be equal to one or two; reset to 1.0.\n"); } if (model->BSIM4gbmin < 1.0e-20) { fprintf(fplog, "Warning: Gbmin = %g is too small.\n", model->BSIM4gbmin); printf("Warning: Gbmin = %g is too small.\n", model->BSIM4gbmin); } /* Check saturation parameters */ if (pParam->BSIM4fprout < 0.0) { fprintf(fplog, "Fatal: fprout = %g is negative.\n", pParam->BSIM4fprout); printf("Fatal: fprout = %g is negative.\n", pParam->BSIM4fprout); Fatal_Flag = 1; } if (pParam->BSIM4pdits < 0.0) { fprintf(fplog, "Fatal: pdits = %g is negative.\n", pParam->BSIM4pdits); printf("Fatal: pdits = %g is negative.\n", pParam->BSIM4pdits); Fatal_Flag = 1; } if (model->BSIM4pditsl < 0.0) { fprintf(fplog, "Fatal: pditsl = %g is negative.\n", model->BSIM4pditsl); printf("Fatal: pditsl = %g is negative.\n", model->BSIM4pditsl); Fatal_Flag = 1; } /* Check gate current parameters */ if (model->BSIM4igbMod) { if (pParam->BSIM4nigbinv <= 0.0) { fprintf(fplog, "Fatal: nigbinv = %g is non-positive.\n", pParam->BSIM4nigbinv); printf("Fatal: nigbinv = %g is non-positive.\n", pParam->BSIM4nigbinv); Fatal_Flag = 1; } if (pParam->BSIM4nigbacc <= 0.0) { fprintf(fplog, "Fatal: nigbacc = %g is non-positive.\n", pParam->BSIM4nigbacc); printf("Fatal: nigbacc = %g is non-positive.\n", pParam->BSIM4nigbacc); Fatal_Flag = 1; } } if (model->BSIM4igcMod) { if (pParam->BSIM4nigc <= 0.0) { fprintf(fplog, "Fatal: nigc = %g is non-positive.\n", pParam->BSIM4nigc); printf("Fatal: nigc = %g is non-positive.\n", pParam->BSIM4nigc); Fatal_Flag = 1; } if (pParam->BSIM4poxedge <= 0.0) { fprintf(fplog, "Fatal: poxedge = %g is non-positive.\n", pParam->BSIM4poxedge); printf("Fatal: poxedge = %g is non-positive.\n", pParam->BSIM4poxedge); Fatal_Flag = 1; } if (pParam->BSIM4pigcd <= 0.0) { fprintf(fplog, "Fatal: pigcd = %g is non-positive.\n", pParam->BSIM4pigcd); printf("Fatal: pigcd = %g is non-positive.\n", pParam->BSIM4pigcd); Fatal_Flag = 1; } } /* Check capacitance parameters */ if (pParam->BSIM4clc < 0.0) { fprintf(fplog, "Fatal: Clc = %g is negative.\n", pParam->BSIM4clc); printf("Fatal: Clc = %g is negative.\n", pParam->BSIM4clc); Fatal_Flag = 1; } /* Check overlap capacitance parameters */ if (pParam->BSIM4ckappas < 0.02) { fprintf(fplog, "Warning: ckappas = %g is too small. Set to 0.02\n", pParam->BSIM4ckappas); printf("Warning: ckappas = %g is too small.\n", pParam->BSIM4ckappas); pParam->BSIM4ckappas = 0.02; } if (pParam->BSIM4ckappad < 0.02) { fprintf(fplog, "Warning: ckappad = %g is too small. Set to 0.02\n", pParam->BSIM4ckappad); printf("Warning: ckappad = %g is too small.\n", pParam->BSIM4ckappad); pParam->BSIM4ckappad = 0.02; } if (model->BSIM4vtss < 0.0) { fprintf(fplog, "Fatal: Vtss = %g is negative.\n", model->BSIM4vtss); printf("Fatal: Vtss = %g is negative.\n", model->BSIM4vtss); Fatal_Flag = 1; } if (model->BSIM4vtsd < 0.0) { fprintf(fplog, "Fatal: Vtsd = %g is negative.\n", model->BSIM4vtsd); printf("Fatal: Vtsd = %g is negative.\n", model->BSIM4vtsd); Fatal_Flag = 1; } if (model->BSIM4vtssws < 0.0) { fprintf(fplog, "Fatal: Vtssws = %g is negative.\n", model->BSIM4vtssws); printf("Fatal: Vtssws = %g is negative.\n", model->BSIM4vtssws); Fatal_Flag = 1; } if (model->BSIM4vtsswd < 0.0) { fprintf(fplog, "Fatal: Vtsswd = %g is negative.\n", model->BSIM4vtsswd); printf("Fatal: Vtsswd = %g is negative.\n", model->BSIM4vtsswd); Fatal_Flag = 1; } if (model->BSIM4vtsswgs < 0.0) { fprintf(fplog, "Fatal: Vtsswgs = %g is negative.\n", model->BSIM4vtsswgs); printf("Fatal: Vtsswgs = %g is negative.\n", model->BSIM4vtsswgs); Fatal_Flag = 1; } if (model->BSIM4vtsswgd < 0.0) { fprintf(fplog, "Fatal: Vtsswgd = %g is negative.\n", model->BSIM4vtsswgd); printf("Fatal: Vtsswgd = %g is negative.\n", model->BSIM4vtsswgd); Fatal_Flag = 1; } if (model->BSIM4paramChk ==1) { /* Check L and W parameters */ if (pParam->BSIM4leff <= 1.0e-9) { fprintf(fplog, "Warning: Leff = %g <= 1.0e-9. Recommended Leff >= 1e-8 \n", pParam->BSIM4leff); printf("Warning: Leff = %g <= 1.0e-9. Recommended Leff >= 1e-8 \n", pParam->BSIM4leff); } if (pParam->BSIM4leffCV <= 1.0e-9) { fprintf(fplog, "Warning: Leff for CV = %g <= 1.0e-9. Recommended LeffCV >=1e-8 \n", pParam->BSIM4leffCV); printf("Warning: Leff for CV = %g <= 1.0e-9. Recommended LeffCV >=1e-8 \n", pParam->BSIM4leffCV); } if (pParam->BSIM4weff <= 1.0e-9) { fprintf(fplog, "Warning: Weff = %g <= 1.0e-9. Recommended Weff >=1e-7 \n", pParam->BSIM4weff); printf("Warning: Weff = %g <= 1.0e-9. Recommended Weff >=1e-7 \n", pParam->BSIM4weff); } if (pParam->BSIM4weffCV <= 1.0e-9) { fprintf(fplog, "Warning: Weff for CV = %g <= 1.0e-9. Recommended WeffCV >= 1e-7 \n", pParam->BSIM4weffCV); printf("Warning: Weff for CV = %g <= 1.0e-9. Recommended WeffCV >= 1e-7 \n", pParam->BSIM4weffCV); } /* Check threshold voltage parameters */ if (model->BSIM4toxe < 1.0e-10) { fprintf(fplog, "Warning: Toxe = %g is less than 1A. Recommended Toxe >= 5A\n", model->BSIM4toxe); printf("Warning: Toxe = %g is less than 1A. Recommended Toxe >= 5A\n", model->BSIM4toxe); } if (here->BSIM4toxp < 1.0e-10) { fprintf(fplog, "Warning: Toxp = %g is less than 1A. Recommended Toxp >= 5A\n", here->BSIM4toxp); printf("Warning: Toxp = %g is less than 1A. Recommended Toxp >= 5A\n", here->BSIM4toxp); } if (model->BSIM4toxm < 1.0e-10) { fprintf(fplog, "Warning: Toxm = %g is less than 1A. Recommended Toxm >= 5A\n", model->BSIM4toxm); printf("Warning: Toxm = %g is less than 1A. Recommended Toxm >= 5A\n", model->BSIM4toxm); } if (pParam->BSIM4ndep <= 1.0e12) { fprintf(fplog, "Warning: Ndep = %g may be too small.\n", pParam->BSIM4ndep); printf("Warning: Ndep = %g may be too small.\n", pParam->BSIM4ndep); } else if (pParam->BSIM4ndep >= 1.0e21) { fprintf(fplog, "Warning: Ndep = %g may be too large.\n", pParam->BSIM4ndep); printf("Warning: Ndep = %g may be too large.\n", pParam->BSIM4ndep); } if (pParam->BSIM4nsub <= 1.0e14) { fprintf(fplog, "Warning: Nsub = %g may be too small.\n", pParam->BSIM4nsub); printf("Warning: Nsub = %g may be too small.\n", pParam->BSIM4nsub); } else if (pParam->BSIM4nsub >= 1.0e21) { fprintf(fplog, "Warning: Nsub = %g may be too large.\n", pParam->BSIM4nsub); printf("Warning: Nsub = %g may be too large.\n", pParam->BSIM4nsub); } if ((pParam->BSIM4ngate > 0.0) && (pParam->BSIM4ngate <= 1.e18)) { fprintf(fplog, "Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->BSIM4ngate); printf("Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->BSIM4ngate); } if (pParam->BSIM4dvt0 < 0.0) { fprintf(fplog, "Warning: Dvt0 = %g is negative.\n", pParam->BSIM4dvt0); printf("Warning: Dvt0 = %g is negative.\n", pParam->BSIM4dvt0); } if (fabs(1.0e-8 / (pParam->BSIM4w0 + pParam->BSIM4weff)) > 10.0) { fprintf(fplog, "Warning: (W0 + Weff) may be too small.\n"); printf("Warning: (W0 + Weff) may be too small.\n"); } /* Check subthreshold parameters */ if (pParam->BSIM4nfactor < 0.0) { fprintf(fplog, "Warning: Nfactor = %g is negative.\n", pParam->BSIM4nfactor); printf("Warning: Nfactor = %g is negative.\n", pParam->BSIM4nfactor); } if (pParam->BSIM4cdsc < 0.0) { fprintf(fplog, "Warning: Cdsc = %g is negative.\n", pParam->BSIM4cdsc); printf("Warning: Cdsc = %g is negative.\n", pParam->BSIM4cdsc); } if (pParam->BSIM4cdscd < 0.0) { fprintf(fplog, "Warning: Cdscd = %g is negative.\n", pParam->BSIM4cdscd); printf("Warning: Cdscd = %g is negative.\n", pParam->BSIM4cdscd); } /* Check DIBL parameters */ if (here->BSIM4eta0 < 0.0) { fprintf(fplog, "Warning: Eta0 = %g is negative.\n", here->BSIM4eta0); printf("Warning: Eta0 = %g is negative.\n", here->BSIM4eta0); } /* Check Abulk parameters */ if (fabs(1.0e-8 / (pParam->BSIM4b1 + pParam->BSIM4weff)) > 10.0) { fprintf(fplog, "Warning: (B1 + Weff) may be too small.\n"); printf("Warning: (B1 + Weff) may be too small.\n"); } /* Check Saturation parameters */ if (pParam->BSIM4a2 < 0.01) { fprintf(fplog, "Warning: A2 = %g is too small. Set to 0.01.\n", pParam->BSIM4a2); printf("Warning: A2 = %g is too small. Set to 0.01.\n", pParam->BSIM4a2); pParam->BSIM4a2 = 0.01; } else if (pParam->BSIM4a2 > 1.0) { fprintf(fplog, "Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->BSIM4a2); printf("Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->BSIM4a2); pParam->BSIM4a2 = 1.0; pParam->BSIM4a1 = 0.0; } if (pParam->BSIM4prwg < 0.0) { fprintf(fplog, "Warning: Prwg = %g is negative. Set to zero.\n", pParam->BSIM4prwg); printf("Warning: Prwg = %g is negative. Set to zero.\n", pParam->BSIM4prwg); pParam->BSIM4prwg = 0.0; } if (pParam->BSIM4rdsw < 0.0) { fprintf(fplog, "Warning: Rdsw = %g is negative. Set to zero.\n", pParam->BSIM4rdsw); printf("Warning: Rdsw = %g is negative. Set to zero.\n", pParam->BSIM4rdsw); pParam->BSIM4rdsw = 0.0; pParam->BSIM4rds0 = 0.0; } if (pParam->BSIM4rds0 < 0.0) { fprintf(fplog, "Warning: Rds at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4rds0); printf("Warning: Rds at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4rds0); pParam->BSIM4rds0 = 0.0; } if (pParam->BSIM4rdswmin < 0.0) { fprintf(fplog, "Warning: Rdswmin at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4rdswmin); printf("Warning: Rdswmin at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4rdswmin); pParam->BSIM4rdswmin = 0.0; } if (pParam->BSIM4pscbe2 <= 0.0) { fprintf(fplog, "Warning: Pscbe2 = %g is not positive.\n", pParam->BSIM4pscbe2); printf("Warning: Pscbe2 = %g is not positive.\n", pParam->BSIM4pscbe2); } if (pParam->BSIM4vsattemp < 1.0e3) { fprintf(fplog, "Warning: Vsat at current temperature = %g may be too small.\n", pParam->BSIM4vsattemp); printf("Warning: Vsat at current temperature = %g may be too small.\n", pParam->BSIM4vsattemp); } if((model->BSIM4lambdaGiven) && (pParam->BSIM4lambda > 0.0) ) { if (pParam->BSIM4lambda > 1.0e-9) { fprintf(fplog, "Warning: Lambda = %g may be too large.\n", pParam->BSIM4lambda); printf("Warning: Lambda = %g may be too large.\n", pParam->BSIM4lambda); } } if((model->BSIM4vtlGiven) && (pParam->BSIM4vtl > 0.0) ) { if (pParam->BSIM4vtl < 6.0e4) { fprintf(fplog, "Warning: Thermal velocity vtl = %g may be too small.\n", pParam->BSIM4vtl); printf("Warning: Thermal velocity vtl = %g may be too small.\n", pParam->BSIM4vtl); } if (pParam->BSIM4xn < 3.0) { fprintf(fplog, "Warning: back scattering coeff xn = %g is too small.\n", pParam->BSIM4xn); printf("Warning: back scattering coeff xn = %g is too small. Reset to 3.0 \n", pParam->BSIM4xn); pParam->BSIM4xn = 3.0; } if (model->BSIM4lc < 0.0) { fprintf(fplog, "Warning: back scattering coeff lc = %g is too small.\n", model->BSIM4lc); printf("Warning: back scattering coeff lc = %g is too small. Reset to 0.0\n", model->BSIM4lc); pParam->BSIM4lc = 0.0; } } if (pParam->BSIM4pdibl1 < 0.0) { fprintf(fplog, "Warning: Pdibl1 = %g is negative.\n", pParam->BSIM4pdibl1); printf("Warning: Pdibl1 = %g is negative.\n", pParam->BSIM4pdibl1); } if (pParam->BSIM4pdibl2 < 0.0) { fprintf(fplog, "Warning: Pdibl2 = %g is negative.\n", pParam->BSIM4pdibl2); printf("Warning: Pdibl2 = %g is negative.\n", pParam->BSIM4pdibl2); } /* Check stress effect parameters */ if((here->BSIM4sa > 0.0) && (here->BSIM4sb > 0.0) && ((here->BSIM4nf == 1.0) || ((here->BSIM4nf > 1.0) && (here->BSIM4sd > 0.0))) ) { if (model->BSIM4lodk2 <= 0.0) { fprintf(fplog, "Warning: LODK2 = %g is not positive.\n",model->BSIM4lodk2); printf("Warning: LODK2 = %g is not positive.\n",model->BSIM4lodk2); } if (model->BSIM4lodeta0 <= 0.0) { fprintf(fplog, "Warning: LODETA0 = %g is not positive.\n",model->BSIM4lodeta0); printf("Warning: LODETA0 = %g is not positive.\n",model->BSIM4lodeta0); } } /* Check gate resistance parameters */ if (here->BSIM4rgateMod == 1) { if (model->BSIM4rshg <= 0.0) printf("Warning: rshg should be positive for rgateMod = 1.\n"); } else if (here->BSIM4rgateMod == 2) { if (model->BSIM4rshg <= 0.0) printf("Warning: rshg <= 0.0 for rgateMod = 2.\n"); else if (pParam->BSIM4xrcrg1 <= 0.0) printf("Warning: xrcrg1 <= 0.0 for rgateMod = 2.\n"); } if (here->BSIM4rgateMod == 3) { if (model->BSIM4rshg <= 0.0) printf("Warning: rshg should be positive for rgateMod = 3.\n"); else if (pParam->BSIM4xrcrg1 <= 0.0) printf("Warning: xrcrg1 should be positive for rgateMod = 3.\n"); } /* Check body resistance parameters */ if (model->BSIM4rbps0 <= 0.0) { fprintf(fplog, "Fatal: RBPS0 = %g is not positive.\n", model->BSIM4rbps0 ); printf("Fatal: RBPS0 = %g is not positive.\n", model->BSIM4rbps0); Fatal_Flag = 1; } if (model->BSIM4rbpd0 <= 0.0) { fprintf(fplog, "Fatal: RBPD0 = %g is not positive.\n", model->BSIM4rbpd0 ); printf("Fatal: RBPD0 = %g is not positive.\n", model->BSIM4rbpd0); Fatal_Flag = 1; } if (model->BSIM4rbpbx0 <= 0.0) { fprintf(fplog, "Fatal: RBPBX0 = %g is not positive.\n", model->BSIM4rbpbx0); printf("Fatal: RBPBX0 = %g is not positive.\n", model->BSIM4rbpbx0); Fatal_Flag = 1; } if (model->BSIM4rbpby0 <= 0.0) { fprintf(fplog, "Fatal: RBPBY0 = %g is not positive.\n", model->BSIM4rbpby0); printf("Fatal: RBPBY0 = %g is not positive.\n", model->BSIM4rbpby0); Fatal_Flag = 1; } if (model->BSIM4rbdbx0 <= 0.0) { fprintf(fplog, "Fatal: RBDBX0 = %g is not positive.\n", model->BSIM4rbdbx0); printf("Fatal: RBDBX0 = %g is not positive.\n", model->BSIM4rbdbx0); Fatal_Flag = 1; } if (model->BSIM4rbdby0 <= 0.0) { fprintf(fplog, "Fatal: RBDBY0 = %g is not positive.\n", model->BSIM4rbdby0); printf("Fatal: RBDBY0 = %g is not positive.\n", model->BSIM4rbdby0); Fatal_Flag = 1; } if (model->BSIM4rbsbx0 <= 0.0) { fprintf(fplog, "Fatal: RBSBX0 = %g is not positive.\n", model->BSIM4rbsbx0); printf("Fatal: RBSBX0 = %g is not positive.\n", model->BSIM4rbsbx0); Fatal_Flag = 1; } if (model->BSIM4rbsby0 <= 0.0) { fprintf(fplog, "Fatal: RBSBY0 = %g is not positive.\n", model->BSIM4rbsby0); printf("Fatal: RBSBY0 = %g is not positive.\n", model->BSIM4rbsby0); Fatal_Flag = 1; } /* Check capacitance parameters */ if (pParam->BSIM4noff < 0.1) { fprintf(fplog, "Warning: Noff = %g is too small.\n", pParam->BSIM4noff); printf("Warning: Noff = %g is too small.\n", pParam->BSIM4noff); } if (pParam->BSIM4voffcv < -0.5) { fprintf(fplog, "Warning: Voffcv = %g is too small.\n", pParam->BSIM4voffcv); printf("Warning: Voffcv = %g is too small.\n", pParam->BSIM4voffcv); } if (pParam->BSIM4moin < 5.0) { fprintf(fplog, "Warning: Moin = %g is too small.\n", pParam->BSIM4moin); printf("Warning: Moin = %g is too small.\n", pParam->BSIM4moin); } if (pParam->BSIM4moin > 25.0) { fprintf(fplog, "Warning: Moin = %g is too large.\n", pParam->BSIM4moin); printf("Warning: Moin = %g is too large.\n", pParam->BSIM4moin); } if(model->BSIM4capMod ==2) { if (pParam->BSIM4acde < 0.1) { fprintf(fplog, "Warning: Acde = %g is too small.\n", pParam->BSIM4acde); printf("Warning: Acde = %g is too small.\n", pParam->BSIM4acde); } if (pParam->BSIM4acde > 1.6) { fprintf(fplog, "Warning: Acde = %g is too large.\n", pParam->BSIM4acde); printf("Warning: Acde = %g is too large.\n", pParam->BSIM4acde); } } /* Check overlap capacitance parameters */ if (model->BSIM4cgdo < 0.0) { fprintf(fplog, "Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM4cgdo); printf("Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM4cgdo); model->BSIM4cgdo = 0.0; } if (model->BSIM4cgso < 0.0) { fprintf(fplog, "Warning: cgso = %g is negative. Set to zero.\n", model->BSIM4cgso); printf("Warning: cgso = %g is negative. Set to zero.\n", model->BSIM4cgso); model->BSIM4cgso = 0.0; } if (model->BSIM4cgbo < 0.0) { fprintf(fplog, "Warning: cgbo = %g is negative. Set to zero.\n", model->BSIM4cgbo); printf("Warning: cgbo = %g is negative. Set to zero.\n", model->BSIM4cgbo); model->BSIM4cgbo = 0.0; } if (model->BSIM4tnoiMod == 1){ printf("Warning: TNOIMOD=1 is not supported and may be removed from future version.\n"); } if ((strcmp(model->BSIM4version, "4.8.1")) && (strncmp(model->BSIM4version, "4.81", 4))) { /* v4.7 */ if (model->BSIM4tnoiMod == 1 || model->BSIM4tnoiMod == 2) { if (model->BSIM4tnoia < 0.0) { fprintf(fplog, "Warning: tnoia = %g is negative. Set to zero.\n", model->BSIM4tnoia); printf("Warning: tnoia = %g is negative. Set to zero.\n", model->BSIM4tnoia); model->BSIM4tnoia = 0.0; } if (model->BSIM4tnoib < 0.0) { fprintf(fplog, "Warning: tnoib = %g is negative. Set to zero.\n", model->BSIM4tnoib); printf("Warning: tnoib = %g is negative. Set to zero.\n", model->BSIM4tnoib); model->BSIM4tnoib = 0.0; } if (model->BSIM4rnoia < 0.0) { fprintf(fplog, "Warning: rnoia = %g is negative. Set to zero.\n", model->BSIM4rnoia); printf("Warning: rnoia = %g is negative. Set to zero.\n", model->BSIM4rnoia); model->BSIM4rnoia = 0.0; } if (model->BSIM4rnoib < 0.0) { fprintf(fplog, "Warning: rnoib = %g is negative. Set to zero.\n", model->BSIM4rnoib); printf("Warning: rnoib = %g is negative. Set to zero.\n", model->BSIM4rnoib); model->BSIM4rnoib = 0.0; } } /* v4.7 */ if (model->BSIM4tnoiMod == 2) { if (model->BSIM4tnoic < 0.0) { fprintf(fplog, "Warning: tnoic = %g is negative. Set to zero.\n", model->BSIM4tnoic); printf("Warning: tnoic = %g is negative. Set to zero.\n", model->BSIM4tnoic); model->BSIM4tnoic = 0.0; } if (model->BSIM4rnoic < 0.0) { fprintf(fplog, "Warning: rnoic = %g is negative. Set to zero.\n", model->BSIM4rnoic); printf("Warning: rnoic = %g is negative. Set to zero.\n", model->BSIM4rnoic); model->BSIM4rnoic = 0.0; } } } else { if (model->BSIM4tnoiMod == 1){ if (model->BSIM4tnoia < 0.0) { fprintf(fplog, "Warning: tnoia = %g is negative. Set to zero.\n", model->BSIM4tnoia); printf("Warning: tnoia = %g is negative. Set to zero.\n", model->BSIM4tnoia); model->BSIM4tnoia = 0.0; } if (model->BSIM4tnoib < 0.0) { fprintf(fplog, "Warning: tnoib = %g is negative. Set to zero.\n", model->BSIM4tnoib); printf("Warning: tnoib = %g is negative. Set to zero.\n", model->BSIM4tnoib); model->BSIM4tnoib = 0.0; } if (model->BSIM4rnoia < 0.0) { fprintf(fplog, "Warning: rnoia = %g is negative. Set to zero.\n", model->BSIM4rnoia); printf("Warning: rnoia = %g is negative. Set to zero.\n", model->BSIM4rnoia); model->BSIM4rnoia = 0.0; } if (model->BSIM4rnoib < 0.0) { fprintf(fplog, "Warning: rnoib = %g is negative. Set to zero.\n", model->BSIM4rnoib); printf("Warning: rnoib = %g is negative. Set to zero.\n", model->BSIM4rnoib); model->BSIM4rnoib = 0.0; } } } /* Limits of Njs and Njd modified in BSIM4.7 */ if (model->BSIM4SjctEmissionCoeff < 0.1) { fprintf(fplog, "Warning: Njs = %g is less than 0.1. Setting Njs to 0.1.\n", model->BSIM4SjctEmissionCoeff); printf("Warning: Njs = %g is less than 0.1. Setting Njs to 0.1.\n", model->BSIM4SjctEmissionCoeff); model->BSIM4SjctEmissionCoeff = 0.1; } else if (model->BSIM4SjctEmissionCoeff < 0.7) { fprintf(fplog, "Warning: Njs = %g is less than 0.7.\n", model->BSIM4SjctEmissionCoeff); printf("Warning: Njs = %g is less than 0.7.\n", model->BSIM4SjctEmissionCoeff); } if (model->BSIM4DjctEmissionCoeff < 0.1) { fprintf(fplog, "Warning: Njd = %g is less than 0.1. Setting Njd to 0.1.\n", model->BSIM4DjctEmissionCoeff); printf("Warning: Njd = %g is less than 0.1. Setting Njd to 0.1.\n", model->BSIM4DjctEmissionCoeff); model->BSIM4DjctEmissionCoeff = 0.1; } else if (model->BSIM4DjctEmissionCoeff < 0.7) { fprintf(fplog, "Warning: Njd = %g is less than 0.7.\n", model->BSIM4DjctEmissionCoeff); printf("Warning: Njd = %g is less than 0.7.\n", model->BSIM4DjctEmissionCoeff); } if (model->BSIM4njtsstemp < 0.0) { fprintf(fplog, "Warning: Njts = %g is negative at temperature = %g.\n", model->BSIM4njtsstemp, ckt->CKTtemp); printf("Warning: Njts = %g is negative at temperature = %g.\n", model->BSIM4njtsstemp, ckt->CKTtemp); } if (model->BSIM4njtsswstemp < 0.0) { fprintf(fplog, "Warning: Njtssw = %g is negative at temperature = %g.\n", model->BSIM4njtsswstemp, ckt->CKTtemp); printf("Warning: Njtssw = %g is negative at temperature = %g.\n", model->BSIM4njtsswstemp, ckt->CKTtemp); } if (model->BSIM4njtsswgstemp < 0.0) { fprintf(fplog, "Warning: Njtsswg = %g is negative at temperature = %g.\n", model->BSIM4njtsswgstemp, ckt->CKTtemp); printf("Warning: Njtsswg = %g is negative at temperature = %g.\n", model->BSIM4njtsswgstemp, ckt->CKTtemp); } if (model->BSIM4njtsdGiven && model->BSIM4njtsdtemp < 0.0) { fprintf(fplog, "Warning: Njtsd = %g is negative at temperature = %g.\n", model->BSIM4njtsdtemp, ckt->CKTtemp); printf("Warning: Njtsd = %g is negative at temperature = %g.\n", model->BSIM4njtsdtemp, ckt->CKTtemp); } if (model->BSIM4njtsswdGiven && model->BSIM4njtsswdtemp < 0.0) { fprintf(fplog, "Warning: Njtsswd = %g is negative at temperature = %g.\n", model->BSIM4njtsswdtemp, ckt->CKTtemp); printf("Warning: Njtsswd = %g is negative at temperature = %g.\n", model->BSIM4njtsswdtemp, ckt->CKTtemp); } if (model->BSIM4njtsswgdGiven && model->BSIM4njtsswgdtemp < 0.0) { fprintf(fplog, "Warning: Njtsswgd = %g is negative at temperature = %g.\n", model->BSIM4njtsswgdtemp, ckt->CKTtemp); printf("Warning: Njtsswgd = %g is negative at temperature = %g.\n", model->BSIM4njtsswgdtemp, ckt->CKTtemp); } if (model->BSIM4ntnoi < 0.0) { fprintf(fplog, "Warning: ntnoi = %g is negative. Set to zero.\n", model->BSIM4ntnoi); printf("Warning: ntnoi = %g is negative. Set to zero.\n", model->BSIM4ntnoi); model->BSIM4ntnoi = 0.0; } /* diode model */ if (model->BSIM4SbulkJctBotGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJS = %g is too big. Set to 0.99.\n", model->BSIM4SbulkJctBotGradingCoeff); printf("Warning: MJS = %g is too big. Set to 0.99.\n", model->BSIM4SbulkJctBotGradingCoeff); model->BSIM4SbulkJctBotGradingCoeff = 0.99; } if (model->BSIM4SbulkJctSideGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJSWS = %g is too big. Set to 0.99.\n", model->BSIM4SbulkJctSideGradingCoeff); printf("Warning: MJSWS = %g is too big. Set to 0.99.\n", model->BSIM4SbulkJctSideGradingCoeff); model->BSIM4SbulkJctSideGradingCoeff = 0.99; } if (model->BSIM4SbulkJctGateSideGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJSWGS = %g is too big. Set to 0.99.\n", model->BSIM4SbulkJctGateSideGradingCoeff); printf("Warning: MJSWGS = %g is too big. Set to 0.99.\n", model->BSIM4SbulkJctGateSideGradingCoeff); model->BSIM4SbulkJctGateSideGradingCoeff = 0.99; } if (model->BSIM4DbulkJctBotGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJD = %g is too big. Set to 0.99.\n", model->BSIM4DbulkJctBotGradingCoeff); printf("Warning: MJD = %g is too big. Set to 0.99.\n", model->BSIM4DbulkJctBotGradingCoeff); model->BSIM4DbulkJctBotGradingCoeff = 0.99; } if (model->BSIM4DbulkJctSideGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJSWD = %g is too big. Set to 0.99.\n", model->BSIM4DbulkJctSideGradingCoeff); printf("Warning: MJSWD = %g is too big. Set to 0.99.\n", model->BSIM4DbulkJctSideGradingCoeff); model->BSIM4DbulkJctSideGradingCoeff = 0.99; } if (model->BSIM4DbulkJctGateSideGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJSWGD = %g is too big. Set to 0.99.\n", model->BSIM4DbulkJctGateSideGradingCoeff); printf("Warning: MJSWGD = %g is too big. Set to 0.99.\n", model->BSIM4DbulkJctGateSideGradingCoeff); model->BSIM4DbulkJctGateSideGradingCoeff = 0.99; } if (model->BSIM4wpemod == 1) { if (model->BSIM4scref <= 0.0) { fprintf(fplog, "Warning: SCREF = %g is not positive. Set to 1e-6.\n", model->BSIM4scref); printf("Warning: SCREF = %g is not positive. Set to 1e-6.\n", model->BSIM4scref); model->BSIM4scref = 1e-6; } /*Move these checks to temp.c for sceff calculation*/ /* if (here->BSIM4sca < 0.0) { fprintf(fplog, "Warning: SCA = %g is negative. Set to 0.0.\n", here->BSIM4sca); printf("Warning: SCA = %g is negative. Set to 0.0.\n", here->BSIM4sca); here->BSIM4sca = 0.0; } if (here->BSIM4scb < 0.0) { fprintf(fplog, "Warning: SCB = %g is negative. Set to 0.0.\n", here->BSIM4scb); printf("Warning: SCB = %g is negative. Set to 0.0.\n", here->BSIM4scb); here->BSIM4scb = 0.0; } if (here->BSIM4scc < 0.0) { fprintf(fplog, "Warning: SCC = %g is negative. Set to 0.0.\n", here->BSIM4scc); printf("Warning: SCC = %g is negative. Set to 0.0.\n", here->BSIM4scc); here->BSIM4scc = 0.0; } if (here->BSIM4sc < 0.0) { fprintf(fplog, "Warning: SC = %g is negative. Set to 0.0.\n", here->BSIM4sc); printf("Warning: SC = %g is negative. Set to 0.0.\n", here->BSIM4sc); here->BSIM4sc = 0.0; } */ } }/* loop for the parameter check for warning messages */ fclose(fplog); } else { fprintf(stderr, "Warning: Can't open log file. Parameter checking skipped.\n"); } return(Fatal_Flag); } tmpk8ny_4pz/src/spicelib/devices/bsim4/Makefile.am0000644000175000017500000000105013546075722022231 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libbsim4.la libbsim4_la_SOURCES = \ b4.c \ b4acld.c \ b4ask.c \ b4check.c \ b4cvtest.c \ b4geo.c \ b4getic.c \ b4ld.c \ b4mask.c \ b4mdel.c \ b4mpar.c \ b4noi.c \ b4par.c \ b4pzld.c \ b4set.c \ b4soachk.c \ b4temp.c \ b4trunc.c \ bsim4def.h \ bsim4ext.h \ bsim4init.c \ bsim4init.h \ bsim4itf.h AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in EXTRA_DIST = B4TERMS_OF_USE tmpk8ny_4pz/src/spicelib/devices/bsim4/b4mask.c0000644000175000017500000027716613546075722021551 0ustar carstencarsten/* ****************************************************************************** * BSIM4 4.8.1 released by Chetan Kumar Dabhi 2/15/2017 * * BSIM4 Model Equations * ****************************************************************************** ****************************************************************************** * Copyright 2017 Regents of the University of California. * * All rights reserved. * * * * Project Director: Prof. Chenming Hu. * * Authors: Gary W. Ng, Weidong Liu, Xuemei Xi, Mohan Dunga, Wenwei Yang * * Ali Niknejad, Shivendra Singh Parihar, Chetan Kumar Dabhi * * Yogesh Singh Chauhan, Sayeef Salahuddin, Chenming Hu * ****************************************************************************** ****************************************************************************** * CMC In-Code Statement * * * * The Developer agrees that the following statement will appear in the * * model code that has been adopted as a CMC Standard. * * * * Software is distributed as is, completely without warranty or service * * support. The University of California and its employees are not liable * * for the condition or performance of the software. * * * * The University of California owns the copyright and grants users a * * perpetual, irrevocable, worldwide, non-exclusive, royalty-free license * * with respect to the software as set forth below. * * * * The University of California hereby disclaims all implied warranties. * * * * The University of California grants the users the right to modify, * * copy, and redistribute the software and documentation, both within * * the user's organization and externally, subject to the following * * restrictions: * * * * 1. The users agree not to charge for the University of California code * * itself but may charge for additions, extensions, or support. * * * * 2. In any product based on the software, the users agree to * * acknowledge the University of California that developed the * * software. This acknowledgment shall appear in the product * * documentation. * * * * 3. Redistributions to others of source code and documentation must * * retain the copyright notice, disclaimer, and list of conditions. * * * * 4. Redistributions to others in binary form must reproduce the * * copyright notice, disclaimer, and list of conditions in the * * documentation and/or other materials provided with the * * distribution. * * * * Agreed to on ______Feb. 15, 2017______________ * * * * By: ____University of California, Berkeley___ * * ____Chenming Hu__________________________ * * ____Professor in Graduate School ________ * * * ****************************************************************************** */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "bsim4def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4mAsk( CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { BSIM4model *model = (BSIM4model *)inst; NG_IGNORE(ckt); switch(which) { case BSIM4_MOD_MOBMOD : value->iValue = model->BSIM4mobMod; return(OK); case BSIM4_MOD_PARAMCHK : value->iValue = model->BSIM4paramChk; return(OK); case BSIM4_MOD_BINUNIT : value->iValue = model->BSIM4binUnit; return(OK); case BSIM4_MOD_CVCHARGEMOD : value->iValue = model->BSIM4cvchargeMod; return(OK); case BSIM4_MOD_CAPMOD : value->iValue = model->BSIM4capMod; return(OK); case BSIM4_MOD_DIOMOD : value->iValue = model->BSIM4dioMod; return(OK); case BSIM4_MOD_TRNQSMOD : value->iValue = model->BSIM4trnqsMod; return(OK); case BSIM4_MOD_ACNQSMOD : value->iValue = model->BSIM4acnqsMod; return(OK); case BSIM4_MOD_FNOIMOD : value->iValue = model->BSIM4fnoiMod; return(OK); case BSIM4_MOD_TNOIMOD : value->iValue = model->BSIM4tnoiMod; return(OK); case BSIM4_MOD_RDSMOD : value->iValue = model->BSIM4rdsMod; return(OK); case BSIM4_MOD_RBODYMOD : value->iValue = model->BSIM4rbodyMod; return(OK); case BSIM4_MOD_RGATEMOD : value->iValue = model->BSIM4rgateMod; return(OK); case BSIM4_MOD_PERMOD : value->iValue = model->BSIM4perMod; return(OK); case BSIM4_MOD_GEOMOD : value->iValue = model->BSIM4geoMod; return(OK); case BSIM4_MOD_RGEOMOD : value->iValue = model->BSIM4rgeoMod; return(OK); case BSIM4_MOD_MTRLMOD : value->iValue = model->BSIM4mtrlMod; return(OK); case BSIM4_MOD_GIDLMOD : /* v4.7 New GIDL/GISL*/ value->iValue = model->BSIM4gidlMod; return(OK); case BSIM4_MOD_MTRLCOMPATMOD : value->iValue = model->BSIM4mtrlCompatMod; return(OK); case BSIM4_MOD_IGCMOD : value->iValue = model->BSIM4igcMod; return(OK); case BSIM4_MOD_IGBMOD : value->iValue = model->BSIM4igbMod; return(OK); case BSIM4_MOD_TEMPMOD : value->iValue = model->BSIM4tempMod; return(OK); case BSIM4_MOD_VERSION : value->sValue = model->BSIM4version; return(OK); case BSIM4_MOD_TOXREF : value->rValue = model->BSIM4toxref; return(OK); case BSIM4_MOD_EOT : value->rValue = model->BSIM4eot; return(OK); case BSIM4_MOD_VDDEOT : value->rValue = model->BSIM4vddeot; return(OK); case BSIM4_MOD_TEMPEOT : value->rValue = model->BSIM4tempeot; return(OK); case BSIM4_MOD_LEFFEOT : value->rValue = model->BSIM4leffeot; return(OK); case BSIM4_MOD_WEFFEOT : value->rValue = model->BSIM4weffeot; return(OK); case BSIM4_MOD_ADOS : value->rValue = model->BSIM4ados; return(OK); case BSIM4_MOD_BDOS : value->rValue = model->BSIM4bdos; return(OK); case BSIM4_MOD_TOXE : value->rValue = model->BSIM4toxe; return(OK); case BSIM4_MOD_TOXP : value->rValue = model->BSIM4toxp; return(OK); case BSIM4_MOD_TOXM : value->rValue = model->BSIM4toxm; return(OK); case BSIM4_MOD_DTOX : value->rValue = model->BSIM4dtox; return(OK); case BSIM4_MOD_EPSROX : value->rValue = model->BSIM4epsrox; return(OK); case BSIM4_MOD_CDSC : value->rValue = model->BSIM4cdsc; return(OK); case BSIM4_MOD_CDSCB : value->rValue = model->BSIM4cdscb; return(OK); case BSIM4_MOD_CDSCD : value->rValue = model->BSIM4cdscd; return(OK); case BSIM4_MOD_CIT : value->rValue = model->BSIM4cit; return(OK); case BSIM4_MOD_NFACTOR : value->rValue = model->BSIM4nfactor; return(OK); case BSIM4_MOD_XJ: value->rValue = model->BSIM4xj; return(OK); case BSIM4_MOD_VSAT: value->rValue = model->BSIM4vsat; return(OK); case BSIM4_MOD_VTL: value->rValue = model->BSIM4vtl; return(OK); case BSIM4_MOD_XN: value->rValue = model->BSIM4xn; return(OK); case BSIM4_MOD_LC: value->rValue = model->BSIM4lc; return(OK); case BSIM4_MOD_LAMBDA: value->rValue = model->BSIM4lambda; return(OK); case BSIM4_MOD_AT: value->rValue = model->BSIM4at; return(OK); case BSIM4_MOD_A0: value->rValue = model->BSIM4a0; return(OK); case BSIM4_MOD_AGS: value->rValue = model->BSIM4ags; return(OK); case BSIM4_MOD_A1: value->rValue = model->BSIM4a1; return(OK); case BSIM4_MOD_A2: value->rValue = model->BSIM4a2; return(OK); case BSIM4_MOD_KETA: value->rValue = model->BSIM4keta; return(OK); case BSIM4_MOD_NSUB: value->rValue = model->BSIM4nsub; return(OK); case BSIM4_MOD_PHIG: value->rValue = model->BSIM4phig; return(OK); case BSIM4_MOD_EPSRGATE: value->rValue = model->BSIM4epsrgate; return(OK); case BSIM4_MOD_EASUB: value->rValue = model->BSIM4easub; return(OK); case BSIM4_MOD_EPSRSUB: value->rValue = model->BSIM4epsrsub; return(OK); case BSIM4_MOD_NI0SUB: value->rValue = model->BSIM4ni0sub; return(OK); case BSIM4_MOD_BG0SUB: value->rValue = model->BSIM4bg0sub; return(OK); case BSIM4_MOD_TBGASUB: value->rValue = model->BSIM4tbgasub; return(OK); case BSIM4_MOD_TBGBSUB: value->rValue = model->BSIM4tbgbsub; return(OK); case BSIM4_MOD_NDEP: value->rValue = model->BSIM4ndep; return(OK); case BSIM4_MOD_NSD: value->rValue = model->BSIM4nsd; return(OK); case BSIM4_MOD_NGATE: value->rValue = model->BSIM4ngate; return(OK); case BSIM4_MOD_GAMMA1: value->rValue = model->BSIM4gamma1; return(OK); case BSIM4_MOD_GAMMA2: value->rValue = model->BSIM4gamma2; return(OK); case BSIM4_MOD_VBX: value->rValue = model->BSIM4vbx; return(OK); case BSIM4_MOD_VBM: value->rValue = model->BSIM4vbm; return(OK); case BSIM4_MOD_XT: value->rValue = model->BSIM4xt; return(OK); case BSIM4_MOD_K1: value->rValue = model->BSIM4k1; return(OK); case BSIM4_MOD_KT1: value->rValue = model->BSIM4kt1; return(OK); case BSIM4_MOD_KT1L: value->rValue = model->BSIM4kt1l; return(OK); case BSIM4_MOD_KT2 : value->rValue = model->BSIM4kt2; return(OK); case BSIM4_MOD_K2 : value->rValue = model->BSIM4k2; return(OK); case BSIM4_MOD_K3: value->rValue = model->BSIM4k3; return(OK); case BSIM4_MOD_K3B: value->rValue = model->BSIM4k3b; return(OK); case BSIM4_MOD_W0: value->rValue = model->BSIM4w0; return(OK); case BSIM4_MOD_LPE0: value->rValue = model->BSIM4lpe0; return(OK); case BSIM4_MOD_LPEB: value->rValue = model->BSIM4lpeb; return(OK); case BSIM4_MOD_DVTP0: value->rValue = model->BSIM4dvtp0; return(OK); case BSIM4_MOD_DVTP1: value->rValue = model->BSIM4dvtp1; return(OK); case BSIM4_MOD_DVTP2: value->rValue = model->BSIM4dvtp2; /* New DIBL/Rout */ return(OK); case BSIM4_MOD_DVTP3: value->rValue = model->BSIM4dvtp3; return(OK); case BSIM4_MOD_DVTP4: value->rValue = model->BSIM4dvtp4; return(OK); case BSIM4_MOD_DVTP5: value->rValue = model->BSIM4dvtp5; return(OK); case BSIM4_MOD_DVT0 : value->rValue = model->BSIM4dvt0; return(OK); case BSIM4_MOD_DVT1 : value->rValue = model->BSIM4dvt1; return(OK); case BSIM4_MOD_DVT2 : value->rValue = model->BSIM4dvt2; return(OK); case BSIM4_MOD_DVT0W : value->rValue = model->BSIM4dvt0w; return(OK); case BSIM4_MOD_DVT1W : value->rValue = model->BSIM4dvt1w; return(OK); case BSIM4_MOD_DVT2W : value->rValue = model->BSIM4dvt2w; return(OK); case BSIM4_MOD_DROUT : value->rValue = model->BSIM4drout; return(OK); case BSIM4_MOD_DSUB : value->rValue = model->BSIM4dsub; return(OK); case BSIM4_MOD_VTH0: value->rValue = model->BSIM4vth0; return(OK); case BSIM4_MOD_EU: value->rValue = model->BSIM4eu; return(OK); case BSIM4_MOD_UCS: value->rValue = model->BSIM4ucs; return(OK); case BSIM4_MOD_UA: value->rValue = model->BSIM4ua; return(OK); case BSIM4_MOD_UA1: value->rValue = model->BSIM4ua1; return(OK); case BSIM4_MOD_UB: value->rValue = model->BSIM4ub; return(OK); case BSIM4_MOD_UB1: value->rValue = model->BSIM4ub1; return(OK); case BSIM4_MOD_UC: value->rValue = model->BSIM4uc; return(OK); case BSIM4_MOD_UC1: value->rValue = model->BSIM4uc1; return(OK); case BSIM4_MOD_UD: value->rValue = model->BSIM4ud; return(OK); case BSIM4_MOD_UD1: value->rValue = model->BSIM4ud1; return(OK); case BSIM4_MOD_UP: value->rValue = model->BSIM4up; return(OK); case BSIM4_MOD_LP: value->rValue = model->BSIM4lp; return(OK); case BSIM4_MOD_U0: value->rValue = model->BSIM4u0; return(OK); case BSIM4_MOD_UTE: value->rValue = model->BSIM4ute; return(OK); case BSIM4_MOD_UCSTE: value->rValue = model->BSIM4ucste; return(OK); case BSIM4_MOD_VOFF: value->rValue = model->BSIM4voff; return(OK); case BSIM4_MOD_TVOFF: value->rValue = model->BSIM4tvoff; return(OK); case BSIM4_MOD_TNFACTOR: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4tnfactor; return(OK); case BSIM4_MOD_TETA0: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4teta0; return(OK); case BSIM4_MOD_TVOFFCV: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4tvoffcv; return(OK); case BSIM4_MOD_VFBSDOFF: value->rValue = model->BSIM4vfbsdoff; return(OK); case BSIM4_MOD_TVFBSDOFF: value->rValue = model->BSIM4tvfbsdoff; return(OK); case BSIM4_MOD_VOFFL: value->rValue = model->BSIM4voffl; return(OK); case BSIM4_MOD_VOFFCVL: value->rValue = model->BSIM4voffcvl; return(OK); case BSIM4_MOD_MINV: value->rValue = model->BSIM4minv; return(OK); case BSIM4_MOD_MINVCV: value->rValue = model->BSIM4minvcv; return(OK); case BSIM4_MOD_FPROUT: value->rValue = model->BSIM4fprout; return(OK); case BSIM4_MOD_PDITS: value->rValue = model->BSIM4pdits; return(OK); case BSIM4_MOD_PDITSD: value->rValue = model->BSIM4pditsd; return(OK); case BSIM4_MOD_PDITSL: value->rValue = model->BSIM4pditsl; return(OK); case BSIM4_MOD_DELTA: value->rValue = model->BSIM4delta; return(OK); case BSIM4_MOD_RDSW: value->rValue = model->BSIM4rdsw; return(OK); case BSIM4_MOD_RDSWMIN: value->rValue = model->BSIM4rdswmin; return(OK); case BSIM4_MOD_RDWMIN: value->rValue = model->BSIM4rdwmin; return(OK); case BSIM4_MOD_RSWMIN: value->rValue = model->BSIM4rswmin; return(OK); case BSIM4_MOD_RDW: value->rValue = model->BSIM4rdw; return(OK); case BSIM4_MOD_RSW: value->rValue = model->BSIM4rsw; return(OK); case BSIM4_MOD_PRWG: value->rValue = model->BSIM4prwg; return(OK); case BSIM4_MOD_PRWB: value->rValue = model->BSIM4prwb; return(OK); case BSIM4_MOD_PRT: value->rValue = model->BSIM4prt; return(OK); case BSIM4_MOD_ETA0: value->rValue = model->BSIM4eta0; return(OK); case BSIM4_MOD_ETAB: value->rValue = model->BSIM4etab; return(OK); case BSIM4_MOD_PCLM: value->rValue = model->BSIM4pclm; return(OK); case BSIM4_MOD_PDIBL1: value->rValue = model->BSIM4pdibl1; return(OK); case BSIM4_MOD_PDIBL2: value->rValue = model->BSIM4pdibl2; return(OK); case BSIM4_MOD_PDIBLB: value->rValue = model->BSIM4pdiblb; return(OK); case BSIM4_MOD_PSCBE1: value->rValue = model->BSIM4pscbe1; return(OK); case BSIM4_MOD_PSCBE2: value->rValue = model->BSIM4pscbe2; return(OK); case BSIM4_MOD_PVAG: value->rValue = model->BSIM4pvag; return(OK); case BSIM4_MOD_WR: value->rValue = model->BSIM4wr; return(OK); case BSIM4_MOD_DWG: value->rValue = model->BSIM4dwg; return(OK); case BSIM4_MOD_DWB: value->rValue = model->BSIM4dwb; return(OK); case BSIM4_MOD_B0: value->rValue = model->BSIM4b0; return(OK); case BSIM4_MOD_B1: value->rValue = model->BSIM4b1; return(OK); case BSIM4_MOD_ALPHA0: value->rValue = model->BSIM4alpha0; return(OK); case BSIM4_MOD_ALPHA1: value->rValue = model->BSIM4alpha1; return(OK); case BSIM4_MOD_BETA0: value->rValue = model->BSIM4beta0; return(OK); case BSIM4_MOD_AGIDL: value->rValue = model->BSIM4agidl; return(OK); case BSIM4_MOD_BGIDL: value->rValue = model->BSIM4bgidl; return(OK); case BSIM4_MOD_CGIDL: value->rValue = model->BSIM4cgidl; return(OK); case BSIM4_MOD_EGIDL: value->rValue = model->BSIM4egidl; return(OK); case BSIM4_MOD_FGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4fgidl; return(OK); case BSIM4_MOD_KGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4kgidl; return(OK); case BSIM4_MOD_RGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4rgidl; return(OK); case BSIM4_MOD_AGISL: value->rValue = model->BSIM4agisl; return(OK); case BSIM4_MOD_BGISL: value->rValue = model->BSIM4bgisl; return(OK); case BSIM4_MOD_CGISL: value->rValue = model->BSIM4cgisl; return(OK); case BSIM4_MOD_EGISL: value->rValue = model->BSIM4egisl; return(OK); case BSIM4_MOD_FGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4fgisl; return(OK); case BSIM4_MOD_KGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4kgisl; return(OK); case BSIM4_MOD_RGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4rgisl; return(OK); case BSIM4_MOD_AIGC: value->rValue = model->BSIM4aigc; return(OK); case BSIM4_MOD_BIGC: value->rValue = model->BSIM4bigc; return(OK); case BSIM4_MOD_CIGC: value->rValue = model->BSIM4cigc; return(OK); case BSIM4_MOD_AIGSD: value->rValue = model->BSIM4aigsd; return(OK); case BSIM4_MOD_BIGSD: value->rValue = model->BSIM4bigsd; return(OK); case BSIM4_MOD_CIGSD: value->rValue = model->BSIM4cigsd; return(OK); case BSIM4_MOD_AIGS: value->rValue = model->BSIM4aigs; return(OK); case BSIM4_MOD_BIGS: value->rValue = model->BSIM4bigs; return(OK); case BSIM4_MOD_CIGS: value->rValue = model->BSIM4cigs; return(OK); case BSIM4_MOD_AIGD: value->rValue = model->BSIM4aigd; return(OK); case BSIM4_MOD_BIGD: value->rValue = model->BSIM4bigd; return(OK); case BSIM4_MOD_CIGD: value->rValue = model->BSIM4cigd; return(OK); case BSIM4_MOD_AIGBACC: value->rValue = model->BSIM4aigbacc; return(OK); case BSIM4_MOD_BIGBACC: value->rValue = model->BSIM4bigbacc; return(OK); case BSIM4_MOD_CIGBACC: value->rValue = model->BSIM4cigbacc; return(OK); case BSIM4_MOD_AIGBINV: value->rValue = model->BSIM4aigbinv; return(OK); case BSIM4_MOD_BIGBINV: value->rValue = model->BSIM4bigbinv; return(OK); case BSIM4_MOD_CIGBINV: value->rValue = model->BSIM4cigbinv; return(OK); case BSIM4_MOD_NIGC: value->rValue = model->BSIM4nigc; return(OK); case BSIM4_MOD_NIGBACC: value->rValue = model->BSIM4nigbacc; return(OK); case BSIM4_MOD_NIGBINV: value->rValue = model->BSIM4nigbinv; return(OK); case BSIM4_MOD_NTOX: value->rValue = model->BSIM4ntox; return(OK); case BSIM4_MOD_EIGBINV: value->rValue = model->BSIM4eigbinv; return(OK); case BSIM4_MOD_PIGCD: value->rValue = model->BSIM4pigcd; return(OK); case BSIM4_MOD_POXEDGE: value->rValue = model->BSIM4poxedge; return(OK); case BSIM4_MOD_PHIN: value->rValue = model->BSIM4phin; return(OK); case BSIM4_MOD_XRCRG1: value->rValue = model->BSIM4xrcrg1; return(OK); case BSIM4_MOD_XRCRG2: value->rValue = model->BSIM4xrcrg2; return(OK); case BSIM4_MOD_TNOIA: value->rValue = model->BSIM4tnoia; return(OK); case BSIM4_MOD_TNOIB: value->rValue = model->BSIM4tnoib; return(OK); case BSIM4_MOD_TNOIC: value->rValue = model->BSIM4tnoic; return(OK); case BSIM4_MOD_RNOIA: value->rValue = model->BSIM4rnoia; return(OK); case BSIM4_MOD_RNOIB: value->rValue = model->BSIM4rnoib; return(OK); case BSIM4_MOD_RNOIC: value->rValue = model->BSIM4rnoic; return(OK); case BSIM4_MOD_NTNOI: value->rValue = model->BSIM4ntnoi; return(OK); case BSIM4_MOD_IJTHDFWD: value->rValue = model->BSIM4ijthdfwd; return(OK); case BSIM4_MOD_IJTHSFWD: value->rValue = model->BSIM4ijthsfwd; return(OK); case BSIM4_MOD_IJTHDREV: value->rValue = model->BSIM4ijthdrev; return(OK); case BSIM4_MOD_IJTHSREV: value->rValue = model->BSIM4ijthsrev; return(OK); case BSIM4_MOD_XJBVD: value->rValue = model->BSIM4xjbvd; return(OK); case BSIM4_MOD_XJBVS: value->rValue = model->BSIM4xjbvs; return(OK); case BSIM4_MOD_BVD: value->rValue = model->BSIM4bvd; return(OK); case BSIM4_MOD_BVS: value->rValue = model->BSIM4bvs; return(OK); case BSIM4_MOD_VFB: value->rValue = model->BSIM4vfb; return(OK); case BSIM4_MOD_JTSS: value->rValue = model->BSIM4jtss; return(OK); case BSIM4_MOD_JTSD: value->rValue = model->BSIM4jtsd; return(OK); case BSIM4_MOD_JTSSWS: value->rValue = model->BSIM4jtssws; return(OK); case BSIM4_MOD_JTSSWD: value->rValue = model->BSIM4jtsswd; return(OK); case BSIM4_MOD_JTSSWGS: value->rValue = model->BSIM4jtsswgs; return(OK); case BSIM4_MOD_JTSSWGD: value->rValue = model->BSIM4jtsswgd; return(OK); case BSIM4_MOD_JTWEFF: value->rValue = model->BSIM4jtweff; return(OK); case BSIM4_MOD_NJTS: value->rValue = model->BSIM4njts; return(OK); case BSIM4_MOD_NJTSSW: value->rValue = model->BSIM4njtssw; return(OK); case BSIM4_MOD_NJTSSWG: value->rValue = model->BSIM4njtsswg; return(OK); case BSIM4_MOD_NJTSD: value->rValue = model->BSIM4njtsd; return(OK); case BSIM4_MOD_NJTSSWD: value->rValue = model->BSIM4njtsswd; return(OK); case BSIM4_MOD_NJTSSWGD: value->rValue = model->BSIM4njtsswgd; return(OK); case BSIM4_MOD_XTSS: value->rValue = model->BSIM4xtss; return(OK); case BSIM4_MOD_XTSD: value->rValue = model->BSIM4xtsd; return(OK); case BSIM4_MOD_XTSSWS: value->rValue = model->BSIM4xtssws; return(OK); case BSIM4_MOD_XTSSWD: value->rValue = model->BSIM4xtsswd; return(OK); case BSIM4_MOD_XTSSWGS: value->rValue = model->BSIM4xtsswgs; return(OK); case BSIM4_MOD_XTSSWGD: value->rValue = model->BSIM4xtsswgd; return(OK); case BSIM4_MOD_TNJTS: value->rValue = model->BSIM4tnjts; return(OK); case BSIM4_MOD_TNJTSSW: value->rValue = model->BSIM4tnjtssw; return(OK); case BSIM4_MOD_TNJTSSWG: value->rValue = model->BSIM4tnjtsswg; return(OK); case BSIM4_MOD_TNJTSD: value->rValue = model->BSIM4tnjtsd; return(OK); case BSIM4_MOD_TNJTSSWD: value->rValue = model->BSIM4tnjtsswd; return(OK); case BSIM4_MOD_TNJTSSWGD: value->rValue = model->BSIM4tnjtsswgd; return(OK); case BSIM4_MOD_VTSS: value->rValue = model->BSIM4vtss; return(OK); case BSIM4_MOD_VTSD: value->rValue = model->BSIM4vtsd; return(OK); case BSIM4_MOD_VTSSWS: value->rValue = model->BSIM4vtssws; return(OK); case BSIM4_MOD_VTSSWD: value->rValue = model->BSIM4vtsswd; return(OK); case BSIM4_MOD_VTSSWGS: value->rValue = model->BSIM4vtsswgs; return(OK); case BSIM4_MOD_VTSSWGD: value->rValue = model->BSIM4vtsswgd; return(OK); case BSIM4_MOD_GBMIN: value->rValue = model->BSIM4gbmin; return(OK); case BSIM4_MOD_RBDB: value->rValue = model->BSIM4rbdb; return(OK); case BSIM4_MOD_RBPB: value->rValue = model->BSIM4rbpb; return(OK); case BSIM4_MOD_RBSB: value->rValue = model->BSIM4rbsb; return(OK); case BSIM4_MOD_RBPS: value->rValue = model->BSIM4rbps; return(OK); case BSIM4_MOD_RBPD: value->rValue = model->BSIM4rbpd; return(OK); case BSIM4_MOD_RBPS0: value->rValue = model->BSIM4rbps0; return(OK); case BSIM4_MOD_RBPSL: value->rValue = model->BSIM4rbpsl; return(OK); case BSIM4_MOD_RBPSW: value->rValue = model->BSIM4rbpsw; return(OK); case BSIM4_MOD_RBPSNF: value->rValue = model->BSIM4rbpsnf; return(OK); case BSIM4_MOD_RBPD0: value->rValue = model->BSIM4rbpd0; return(OK); case BSIM4_MOD_RBPDL: value->rValue = model->BSIM4rbpdl; return(OK); case BSIM4_MOD_RBPDW: value->rValue = model->BSIM4rbpdw; return(OK); case BSIM4_MOD_RBPDNF: value->rValue = model->BSIM4rbpdnf; return(OK); case BSIM4_MOD_RBPBX0: value->rValue = model->BSIM4rbpbx0; return(OK); case BSIM4_MOD_RBPBXL: value->rValue = model->BSIM4rbpbxl; return(OK); case BSIM4_MOD_RBPBXW: value->rValue = model->BSIM4rbpbxw; return(OK); case BSIM4_MOD_RBPBXNF: value->rValue = model->BSIM4rbpbxnf; return(OK); case BSIM4_MOD_RBPBY0: value->rValue = model->BSIM4rbpby0; return(OK); case BSIM4_MOD_RBPBYL: value->rValue = model->BSIM4rbpbyl; return(OK); case BSIM4_MOD_RBPBYW: value->rValue = model->BSIM4rbpbyw; return(OK); case BSIM4_MOD_RBPBYNF: value->rValue = model->BSIM4rbpbynf; return(OK); case BSIM4_MOD_RBSBX0: value->rValue = model->BSIM4rbsbx0; return(OK); case BSIM4_MOD_RBSBY0: value->rValue = model->BSIM4rbsby0; return(OK); case BSIM4_MOD_RBDBX0: value->rValue = model->BSIM4rbdbx0; return(OK); case BSIM4_MOD_RBDBY0: value->rValue = model->BSIM4rbdby0; return(OK); case BSIM4_MOD_RBSDBXL: value->rValue = model->BSIM4rbsdbxl; return(OK); case BSIM4_MOD_RBSDBXW: value->rValue = model->BSIM4rbsdbxw; return(OK); case BSIM4_MOD_RBSDBXNF: value->rValue = model->BSIM4rbsdbxnf; return(OK); case BSIM4_MOD_RBSDBYL: value->rValue = model->BSIM4rbsdbyl; return(OK); case BSIM4_MOD_RBSDBYW: value->rValue = model->BSIM4rbsdbyw; return(OK); case BSIM4_MOD_RBSDBYNF: value->rValue = model->BSIM4rbsdbynf; return(OK); case BSIM4_MOD_CGSL: value->rValue = model->BSIM4cgsl; return(OK); case BSIM4_MOD_CGDL: value->rValue = model->BSIM4cgdl; return(OK); case BSIM4_MOD_CKAPPAS: value->rValue = model->BSIM4ckappas; return(OK); case BSIM4_MOD_CKAPPAD: value->rValue = model->BSIM4ckappad; return(OK); case BSIM4_MOD_CF: value->rValue = model->BSIM4cf; return(OK); case BSIM4_MOD_CLC: value->rValue = model->BSIM4clc; return(OK); case BSIM4_MOD_CLE: value->rValue = model->BSIM4cle; return(OK); case BSIM4_MOD_DWC: value->rValue = model->BSIM4dwc; return(OK); case BSIM4_MOD_DLC: value->rValue = model->BSIM4dlc; return(OK); case BSIM4_MOD_XW: value->rValue = model->BSIM4xw; return(OK); case BSIM4_MOD_XL: value->rValue = model->BSIM4xl; return(OK); case BSIM4_MOD_DLCIG: value->rValue = model->BSIM4dlcig; return(OK); case BSIM4_MOD_DLCIGD: value->rValue = model->BSIM4dlcigd; return(OK); case BSIM4_MOD_DWJ: value->rValue = model->BSIM4dwj; return(OK); case BSIM4_MOD_VFBCV: value->rValue = model->BSIM4vfbcv; return(OK); case BSIM4_MOD_ACDE: value->rValue = model->BSIM4acde; return(OK); case BSIM4_MOD_MOIN: value->rValue = model->BSIM4moin; return(OK); case BSIM4_MOD_NOFF: value->rValue = model->BSIM4noff; return(OK); case BSIM4_MOD_VOFFCV: value->rValue = model->BSIM4voffcv; return(OK); case BSIM4_MOD_DMCG: value->rValue = model->BSIM4dmcg; return(OK); case BSIM4_MOD_DMCI: value->rValue = model->BSIM4dmci; return(OK); case BSIM4_MOD_DMDG: value->rValue = model->BSIM4dmdg; return(OK); case BSIM4_MOD_DMCGT: value->rValue = model->BSIM4dmcgt; return(OK); case BSIM4_MOD_XGW: value->rValue = model->BSIM4xgw; return(OK); case BSIM4_MOD_XGL: value->rValue = model->BSIM4xgl; return(OK); case BSIM4_MOD_RSHG: value->rValue = model->BSIM4rshg; return(OK); case BSIM4_MOD_NGCON: value->rValue = model->BSIM4ngcon; return(OK); case BSIM4_MOD_TCJ: value->rValue = model->BSIM4tcj; return(OK); case BSIM4_MOD_TPB: value->rValue = model->BSIM4tpb; return(OK); case BSIM4_MOD_TCJSW: value->rValue = model->BSIM4tcjsw; return(OK); case BSIM4_MOD_TPBSW: value->rValue = model->BSIM4tpbsw; return(OK); case BSIM4_MOD_TCJSWG: value->rValue = model->BSIM4tcjswg; return(OK); case BSIM4_MOD_TPBSWG: value->rValue = model->BSIM4tpbswg; return(OK); /* Length dependence */ case BSIM4_MOD_LCDSC : value->rValue = model->BSIM4lcdsc; return(OK); case BSIM4_MOD_LCDSCB : value->rValue = model->BSIM4lcdscb; return(OK); case BSIM4_MOD_LCDSCD : value->rValue = model->BSIM4lcdscd; return(OK); case BSIM4_MOD_LCIT : value->rValue = model->BSIM4lcit; return(OK); case BSIM4_MOD_LNFACTOR : value->rValue = model->BSIM4lnfactor; return(OK); case BSIM4_MOD_LXJ: value->rValue = model->BSIM4lxj; return(OK); case BSIM4_MOD_LVSAT: value->rValue = model->BSIM4lvsat; return(OK); case BSIM4_MOD_LAT: value->rValue = model->BSIM4lat; return(OK); case BSIM4_MOD_LA0: value->rValue = model->BSIM4la0; return(OK); case BSIM4_MOD_LAGS: value->rValue = model->BSIM4lags; return(OK); case BSIM4_MOD_LA1: value->rValue = model->BSIM4la1; return(OK); case BSIM4_MOD_LA2: value->rValue = model->BSIM4la2; return(OK); case BSIM4_MOD_LKETA: value->rValue = model->BSIM4lketa; return(OK); case BSIM4_MOD_LNSUB: value->rValue = model->BSIM4lnsub; return(OK); case BSIM4_MOD_LNDEP: value->rValue = model->BSIM4lndep; return(OK); case BSIM4_MOD_LNSD: value->rValue = model->BSIM4lnsd; return(OK); case BSIM4_MOD_LNGATE: value->rValue = model->BSIM4lngate; return(OK); case BSIM4_MOD_LGAMMA1: value->rValue = model->BSIM4lgamma1; return(OK); case BSIM4_MOD_LGAMMA2: value->rValue = model->BSIM4lgamma2; return(OK); case BSIM4_MOD_LVBX: value->rValue = model->BSIM4lvbx; return(OK); case BSIM4_MOD_LVBM: value->rValue = model->BSIM4lvbm; return(OK); case BSIM4_MOD_LXT: value->rValue = model->BSIM4lxt; return(OK); case BSIM4_MOD_LK1: value->rValue = model->BSIM4lk1; return(OK); case BSIM4_MOD_LKT1: value->rValue = model->BSIM4lkt1; return(OK); case BSIM4_MOD_LKT1L: value->rValue = model->BSIM4lkt1l; return(OK); case BSIM4_MOD_LKT2 : value->rValue = model->BSIM4lkt2; return(OK); case BSIM4_MOD_LK2 : value->rValue = model->BSIM4lk2; return(OK); case BSIM4_MOD_LK3: value->rValue = model->BSIM4lk3; return(OK); case BSIM4_MOD_LK3B: value->rValue = model->BSIM4lk3b; return(OK); case BSIM4_MOD_LW0: value->rValue = model->BSIM4lw0; return(OK); case BSIM4_MOD_LLPE0: value->rValue = model->BSIM4llpe0; return(OK); case BSIM4_MOD_LLPEB: value->rValue = model->BSIM4llpeb; return(OK); case BSIM4_MOD_LDVTP0: value->rValue = model->BSIM4ldvtp0; return(OK); case BSIM4_MOD_LDVTP1: value->rValue = model->BSIM4ldvtp1; return(OK); case BSIM4_MOD_LDVTP2: value->rValue = model->BSIM4ldvtp2; /* New DIBL/Rout */ return(OK); case BSIM4_MOD_LDVTP3: value->rValue = model->BSIM4ldvtp3; return(OK); case BSIM4_MOD_LDVTP4: value->rValue = model->BSIM4ldvtp4; return(OK); case BSIM4_MOD_LDVTP5: value->rValue = model->BSIM4ldvtp5; return(OK); case BSIM4_MOD_LDVT0: value->rValue = model->BSIM4ldvt0; return(OK); case BSIM4_MOD_LDVT1 : value->rValue = model->BSIM4ldvt1; return(OK); case BSIM4_MOD_LDVT2 : value->rValue = model->BSIM4ldvt2; return(OK); case BSIM4_MOD_LDVT0W : value->rValue = model->BSIM4ldvt0w; return(OK); case BSIM4_MOD_LDVT1W : value->rValue = model->BSIM4ldvt1w; return(OK); case BSIM4_MOD_LDVT2W : value->rValue = model->BSIM4ldvt2w; return(OK); case BSIM4_MOD_LDROUT : value->rValue = model->BSIM4ldrout; return(OK); case BSIM4_MOD_LDSUB : value->rValue = model->BSIM4ldsub; return(OK); case BSIM4_MOD_LVTH0: value->rValue = model->BSIM4lvth0; return(OK); case BSIM4_MOD_LUA: value->rValue = model->BSIM4lua; return(OK); case BSIM4_MOD_LUA1: value->rValue = model->BSIM4lua1; return(OK); case BSIM4_MOD_LUB: value->rValue = model->BSIM4lub; return(OK); case BSIM4_MOD_LUB1: value->rValue = model->BSIM4lub1; return(OK); case BSIM4_MOD_LUC: value->rValue = model->BSIM4luc; return(OK); case BSIM4_MOD_LUC1: value->rValue = model->BSIM4luc1; return(OK); case BSIM4_MOD_LUD: value->rValue = model->BSIM4lud; return(OK); case BSIM4_MOD_LUD1: value->rValue = model->BSIM4lud1; return(OK); case BSIM4_MOD_LUP: value->rValue = model->BSIM4lup; return(OK); case BSIM4_MOD_LLP: value->rValue = model->BSIM4llp; return(OK); case BSIM4_MOD_LU0: value->rValue = model->BSIM4lu0; return(OK); case BSIM4_MOD_LUTE: value->rValue = model->BSIM4lute; return(OK); case BSIM4_MOD_LUCSTE: value->rValue = model->BSIM4lucste; return(OK); case BSIM4_MOD_LVOFF: value->rValue = model->BSIM4lvoff; return(OK); case BSIM4_MOD_LTVOFF: value->rValue = model->BSIM4ltvoff; return(OK); case BSIM4_MOD_LTNFACTOR: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4ltnfactor; return(OK); case BSIM4_MOD_LTETA0: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4lteta0; return(OK); case BSIM4_MOD_LTVOFFCV: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4ltvoffcv; return(OK); case BSIM4_MOD_LMINV: value->rValue = model->BSIM4lminv; return(OK); case BSIM4_MOD_LMINVCV: value->rValue = model->BSIM4lminvcv; return(OK); case BSIM4_MOD_LFPROUT: value->rValue = model->BSIM4lfprout; return(OK); case BSIM4_MOD_LPDITS: value->rValue = model->BSIM4lpdits; return(OK); case BSIM4_MOD_LPDITSD: value->rValue = model->BSIM4lpditsd; return(OK); case BSIM4_MOD_LDELTA: value->rValue = model->BSIM4ldelta; return(OK); case BSIM4_MOD_LRDSW: value->rValue = model->BSIM4lrdsw; return(OK); case BSIM4_MOD_LRDW: value->rValue = model->BSIM4lrdw; return(OK); case BSIM4_MOD_LRSW: value->rValue = model->BSIM4lrsw; return(OK); case BSIM4_MOD_LPRWB: value->rValue = model->BSIM4lprwb; return(OK); case BSIM4_MOD_LPRWG: value->rValue = model->BSIM4lprwg; return(OK); case BSIM4_MOD_LPRT: value->rValue = model->BSIM4lprt; return(OK); case BSIM4_MOD_LETA0: value->rValue = model->BSIM4leta0; return(OK); case BSIM4_MOD_LETAB: value->rValue = model->BSIM4letab; return(OK); case BSIM4_MOD_LPCLM: value->rValue = model->BSIM4lpclm; return(OK); case BSIM4_MOD_LPDIBL1: value->rValue = model->BSIM4lpdibl1; return(OK); case BSIM4_MOD_LPDIBL2: value->rValue = model->BSIM4lpdibl2; return(OK); case BSIM4_MOD_LPDIBLB: value->rValue = model->BSIM4lpdiblb; return(OK); case BSIM4_MOD_LPSCBE1: value->rValue = model->BSIM4lpscbe1; return(OK); case BSIM4_MOD_LPSCBE2: value->rValue = model->BSIM4lpscbe2; return(OK); case BSIM4_MOD_LPVAG: value->rValue = model->BSIM4lpvag; return(OK); case BSIM4_MOD_LWR: value->rValue = model->BSIM4lwr; return(OK); case BSIM4_MOD_LDWG: value->rValue = model->BSIM4ldwg; return(OK); case BSIM4_MOD_LDWB: value->rValue = model->BSIM4ldwb; return(OK); case BSIM4_MOD_LB0: value->rValue = model->BSIM4lb0; return(OK); case BSIM4_MOD_LB1: value->rValue = model->BSIM4lb1; return(OK); case BSIM4_MOD_LALPHA0: value->rValue = model->BSIM4lalpha0; return(OK); case BSIM4_MOD_LALPHA1: value->rValue = model->BSIM4lalpha1; return(OK); case BSIM4_MOD_LBETA0: value->rValue = model->BSIM4lbeta0; return(OK); case BSIM4_MOD_LAGIDL: value->rValue = model->BSIM4lagidl; return(OK); case BSIM4_MOD_LBGIDL: value->rValue = model->BSIM4lbgidl; return(OK); case BSIM4_MOD_LCGIDL: value->rValue = model->BSIM4lcgidl; return(OK); case BSIM4_MOD_LEGIDL: value->rValue = model->BSIM4legidl; return(OK); case BSIM4_MOD_LFGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4lfgidl; return(OK); case BSIM4_MOD_LKGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4lkgidl; return(OK); case BSIM4_MOD_LRGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4lrgidl; return(OK); case BSIM4_MOD_LAGISL: value->rValue = model->BSIM4lagisl; return(OK); case BSIM4_MOD_LBGISL: value->rValue = model->BSIM4lbgisl; return(OK); case BSIM4_MOD_LCGISL: value->rValue = model->BSIM4lcgisl; return(OK); case BSIM4_MOD_LEGISL: value->rValue = model->BSIM4legisl; return(OK); case BSIM4_MOD_LFGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4lfgisl; return(OK); case BSIM4_MOD_LKGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4lkgisl; return(OK); case BSIM4_MOD_LRGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4lrgisl; return(OK); case BSIM4_MOD_LAIGC: value->rValue = model->BSIM4laigc; return(OK); case BSIM4_MOD_LBIGC: value->rValue = model->BSIM4lbigc; return(OK); case BSIM4_MOD_LCIGC: value->rValue = model->BSIM4lcigc; return(OK); case BSIM4_MOD_LAIGSD: value->rValue = model->BSIM4laigsd; return(OK); case BSIM4_MOD_LBIGSD: value->rValue = model->BSIM4lbigsd; return(OK); case BSIM4_MOD_LCIGSD: value->rValue = model->BSIM4lcigsd; return(OK); case BSIM4_MOD_LAIGS: value->rValue = model->BSIM4laigs; return(OK); case BSIM4_MOD_LBIGS: value->rValue = model->BSIM4lbigs; return(OK); case BSIM4_MOD_LCIGS: value->rValue = model->BSIM4lcigs; return(OK); case BSIM4_MOD_LAIGD: value->rValue = model->BSIM4laigd; return(OK); case BSIM4_MOD_LBIGD: value->rValue = model->BSIM4lbigd; return(OK); case BSIM4_MOD_LCIGD: value->rValue = model->BSIM4lcigd; return(OK); case BSIM4_MOD_LAIGBACC: value->rValue = model->BSIM4laigbacc; return(OK); case BSIM4_MOD_LBIGBACC: value->rValue = model->BSIM4lbigbacc; return(OK); case BSIM4_MOD_LCIGBACC: value->rValue = model->BSIM4lcigbacc; return(OK); case BSIM4_MOD_LAIGBINV: value->rValue = model->BSIM4laigbinv; return(OK); case BSIM4_MOD_LBIGBINV: value->rValue = model->BSIM4lbigbinv; return(OK); case BSIM4_MOD_LCIGBINV: value->rValue = model->BSIM4lcigbinv; return(OK); case BSIM4_MOD_LNIGC: value->rValue = model->BSIM4lnigc; return(OK); case BSIM4_MOD_LNIGBACC: value->rValue = model->BSIM4lnigbacc; return(OK); case BSIM4_MOD_LNIGBINV: value->rValue = model->BSIM4lnigbinv; return(OK); case BSIM4_MOD_LNTOX: value->rValue = model->BSIM4lntox; return(OK); case BSIM4_MOD_LEIGBINV: value->rValue = model->BSIM4leigbinv; return(OK); case BSIM4_MOD_LPIGCD: value->rValue = model->BSIM4lpigcd; return(OK); case BSIM4_MOD_LPOXEDGE: value->rValue = model->BSIM4lpoxedge; return(OK); case BSIM4_MOD_LPHIN: value->rValue = model->BSIM4lphin; return(OK); case BSIM4_MOD_LXRCRG1: value->rValue = model->BSIM4lxrcrg1; return(OK); case BSIM4_MOD_LXRCRG2: value->rValue = model->BSIM4lxrcrg2; return(OK); case BSIM4_MOD_LEU: value->rValue = model->BSIM4leu; return(OK); case BSIM4_MOD_LUCS: value->rValue = model->BSIM4lucs; return(OK); case BSIM4_MOD_LVFB: value->rValue = model->BSIM4lvfb; return(OK); case BSIM4_MOD_LCGSL: value->rValue = model->BSIM4lcgsl; return(OK); case BSIM4_MOD_LCGDL: value->rValue = model->BSIM4lcgdl; return(OK); case BSIM4_MOD_LCKAPPAS: value->rValue = model->BSIM4lckappas; return(OK); case BSIM4_MOD_LCKAPPAD: value->rValue = model->BSIM4lckappad; return(OK); case BSIM4_MOD_LCF: value->rValue = model->BSIM4lcf; return(OK); case BSIM4_MOD_LCLC: value->rValue = model->BSIM4lclc; return(OK); case BSIM4_MOD_LCLE: value->rValue = model->BSIM4lcle; return(OK); case BSIM4_MOD_LVFBCV: value->rValue = model->BSIM4lvfbcv; return(OK); case BSIM4_MOD_LACDE: value->rValue = model->BSIM4lacde; return(OK); case BSIM4_MOD_LMOIN: value->rValue = model->BSIM4lmoin; return(OK); case BSIM4_MOD_LNOFF: value->rValue = model->BSIM4lnoff; return(OK); case BSIM4_MOD_LVOFFCV: value->rValue = model->BSIM4lvoffcv; return(OK); case BSIM4_MOD_LVFBSDOFF: value->rValue = model->BSIM4lvfbsdoff; return(OK); case BSIM4_MOD_LTVFBSDOFF: value->rValue = model->BSIM4ltvfbsdoff; return(OK); case BSIM4_MOD_LLAMBDA: value->rValue = model->BSIM4llambda; return(OK); case BSIM4_MOD_LVTL: value->rValue = model->BSIM4lvtl; return(OK); case BSIM4_MOD_LXN: value->rValue = model->BSIM4lxn; return(OK); /* Width dependence */ case BSIM4_MOD_WCDSC : value->rValue = model->BSIM4wcdsc; return(OK); case BSIM4_MOD_WCDSCB : value->rValue = model->BSIM4wcdscb; return(OK); case BSIM4_MOD_WCDSCD : value->rValue = model->BSIM4wcdscd; return(OK); case BSIM4_MOD_WCIT : value->rValue = model->BSIM4wcit; return(OK); case BSIM4_MOD_WNFACTOR : value->rValue = model->BSIM4wnfactor; return(OK); case BSIM4_MOD_WXJ: value->rValue = model->BSIM4wxj; return(OK); case BSIM4_MOD_WVSAT: value->rValue = model->BSIM4wvsat; return(OK); case BSIM4_MOD_WAT: value->rValue = model->BSIM4wat; return(OK); case BSIM4_MOD_WA0: value->rValue = model->BSIM4wa0; return(OK); case BSIM4_MOD_WAGS: value->rValue = model->BSIM4wags; return(OK); case BSIM4_MOD_WA1: value->rValue = model->BSIM4wa1; return(OK); case BSIM4_MOD_WA2: value->rValue = model->BSIM4wa2; return(OK); case BSIM4_MOD_WKETA: value->rValue = model->BSIM4wketa; return(OK); case BSIM4_MOD_WNSUB: value->rValue = model->BSIM4wnsub; return(OK); case BSIM4_MOD_WNDEP: value->rValue = model->BSIM4wndep; return(OK); case BSIM4_MOD_WNSD: value->rValue = model->BSIM4wnsd; return(OK); case BSIM4_MOD_WNGATE: value->rValue = model->BSIM4wngate; return(OK); case BSIM4_MOD_WGAMMA1: value->rValue = model->BSIM4wgamma1; return(OK); case BSIM4_MOD_WGAMMA2: value->rValue = model->BSIM4wgamma2; return(OK); case BSIM4_MOD_WVBX: value->rValue = model->BSIM4wvbx; return(OK); case BSIM4_MOD_WVBM: value->rValue = model->BSIM4wvbm; return(OK); case BSIM4_MOD_WXT: value->rValue = model->BSIM4wxt; return(OK); case BSIM4_MOD_WK1: value->rValue = model->BSIM4wk1; return(OK); case BSIM4_MOD_WKT1: value->rValue = model->BSIM4wkt1; return(OK); case BSIM4_MOD_WKT1L: value->rValue = model->BSIM4wkt1l; return(OK); case BSIM4_MOD_WKT2 : value->rValue = model->BSIM4wkt2; return(OK); case BSIM4_MOD_WK2 : value->rValue = model->BSIM4wk2; return(OK); case BSIM4_MOD_WK3: value->rValue = model->BSIM4wk3; return(OK); case BSIM4_MOD_WK3B: value->rValue = model->BSIM4wk3b; return(OK); case BSIM4_MOD_WW0: value->rValue = model->BSIM4ww0; return(OK); case BSIM4_MOD_WLPE0: value->rValue = model->BSIM4wlpe0; return(OK); case BSIM4_MOD_WDVTP0: value->rValue = model->BSIM4wdvtp0; return(OK); case BSIM4_MOD_WDVTP1: value->rValue = model->BSIM4wdvtp1; return(OK); case BSIM4_MOD_WDVTP2: value->rValue = model->BSIM4wdvtp2; /* New DIBL/Rout */ return(OK); case BSIM4_MOD_WDVTP3: value->rValue = model->BSIM4wdvtp3; return(OK); case BSIM4_MOD_WDVTP4: value->rValue = model->BSIM4wdvtp4; return(OK); case BSIM4_MOD_WDVTP5: value->rValue = model->BSIM4wdvtp5; return(OK); case BSIM4_MOD_WLPEB: value->rValue = model->BSIM4wlpeb; return(OK); case BSIM4_MOD_WDVT0: value->rValue = model->BSIM4wdvt0; return(OK); case BSIM4_MOD_WDVT1 : value->rValue = model->BSIM4wdvt1; return(OK); case BSIM4_MOD_WDVT2 : value->rValue = model->BSIM4wdvt2; return(OK); case BSIM4_MOD_WDVT0W : value->rValue = model->BSIM4wdvt0w; return(OK); case BSIM4_MOD_WDVT1W : value->rValue = model->BSIM4wdvt1w; return(OK); case BSIM4_MOD_WDVT2W : value->rValue = model->BSIM4wdvt2w; return(OK); case BSIM4_MOD_WDROUT : value->rValue = model->BSIM4wdrout; return(OK); case BSIM4_MOD_WDSUB : value->rValue = model->BSIM4wdsub; return(OK); case BSIM4_MOD_WVTH0: value->rValue = model->BSIM4wvth0; return(OK); case BSIM4_MOD_WUA: value->rValue = model->BSIM4wua; return(OK); case BSIM4_MOD_WUA1: value->rValue = model->BSIM4wua1; return(OK); case BSIM4_MOD_WUB: value->rValue = model->BSIM4wub; return(OK); case BSIM4_MOD_WUB1: value->rValue = model->BSIM4wub1; return(OK); case BSIM4_MOD_WUC: value->rValue = model->BSIM4wuc; return(OK); case BSIM4_MOD_WUC1: value->rValue = model->BSIM4wuc1; return(OK); case BSIM4_MOD_WUD: value->rValue = model->BSIM4wud; return(OK); case BSIM4_MOD_WUD1: value->rValue = model->BSIM4wud1; return(OK); case BSIM4_MOD_WUP: value->rValue = model->BSIM4wup; return(OK); case BSIM4_MOD_WLP: value->rValue = model->BSIM4wlp; return(OK); case BSIM4_MOD_WU0: value->rValue = model->BSIM4wu0; return(OK); case BSIM4_MOD_WUTE: value->rValue = model->BSIM4wute; return(OK); case BSIM4_MOD_WUCSTE: value->rValue = model->BSIM4wucste; return(OK); case BSIM4_MOD_WVOFF: value->rValue = model->BSIM4wvoff; return(OK); case BSIM4_MOD_WTVOFF: value->rValue = model->BSIM4wtvoff; return(OK); case BSIM4_MOD_WTNFACTOR: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4wtnfactor; return(OK); case BSIM4_MOD_WTETA0: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4wteta0; return(OK); case BSIM4_MOD_WTVOFFCV: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4wtvoffcv; return(OK); case BSIM4_MOD_WMINV: value->rValue = model->BSIM4wminv; return(OK); case BSIM4_MOD_WMINVCV: value->rValue = model->BSIM4wminvcv; return(OK); case BSIM4_MOD_WFPROUT: value->rValue = model->BSIM4wfprout; return(OK); case BSIM4_MOD_WPDITS: value->rValue = model->BSIM4wpdits; return(OK); case BSIM4_MOD_WPDITSD: value->rValue = model->BSIM4wpditsd; return(OK); case BSIM4_MOD_WDELTA: value->rValue = model->BSIM4wdelta; return(OK); case BSIM4_MOD_WRDSW: value->rValue = model->BSIM4wrdsw; return(OK); case BSIM4_MOD_WRDW: value->rValue = model->BSIM4wrdw; return(OK); case BSIM4_MOD_WRSW: value->rValue = model->BSIM4wrsw; return(OK); case BSIM4_MOD_WPRWB: value->rValue = model->BSIM4wprwb; return(OK); case BSIM4_MOD_WPRWG: value->rValue = model->BSIM4wprwg; return(OK); case BSIM4_MOD_WPRT: value->rValue = model->BSIM4wprt; return(OK); case BSIM4_MOD_WETA0: value->rValue = model->BSIM4weta0; return(OK); case BSIM4_MOD_WETAB: value->rValue = model->BSIM4wetab; return(OK); case BSIM4_MOD_WPCLM: value->rValue = model->BSIM4wpclm; return(OK); case BSIM4_MOD_WPDIBL1: value->rValue = model->BSIM4wpdibl1; return(OK); case BSIM4_MOD_WPDIBL2: value->rValue = model->BSIM4wpdibl2; return(OK); case BSIM4_MOD_WPDIBLB: value->rValue = model->BSIM4wpdiblb; return(OK); case BSIM4_MOD_WPSCBE1: value->rValue = model->BSIM4wpscbe1; return(OK); case BSIM4_MOD_WPSCBE2: value->rValue = model->BSIM4wpscbe2; return(OK); case BSIM4_MOD_WPVAG: value->rValue = model->BSIM4wpvag; return(OK); case BSIM4_MOD_WWR: value->rValue = model->BSIM4wwr; return(OK); case BSIM4_MOD_WDWG: value->rValue = model->BSIM4wdwg; return(OK); case BSIM4_MOD_WDWB: value->rValue = model->BSIM4wdwb; return(OK); case BSIM4_MOD_WB0: value->rValue = model->BSIM4wb0; return(OK); case BSIM4_MOD_WB1: value->rValue = model->BSIM4wb1; return(OK); case BSIM4_MOD_WALPHA0: value->rValue = model->BSIM4walpha0; return(OK); case BSIM4_MOD_WALPHA1: value->rValue = model->BSIM4walpha1; return(OK); case BSIM4_MOD_WBETA0: value->rValue = model->BSIM4wbeta0; return(OK); case BSIM4_MOD_WAGIDL: value->rValue = model->BSIM4wagidl; return(OK); case BSIM4_MOD_WBGIDL: value->rValue = model->BSIM4wbgidl; return(OK); case BSIM4_MOD_WCGIDL: value->rValue = model->BSIM4wcgidl; return(OK); case BSIM4_MOD_WEGIDL: value->rValue = model->BSIM4wegidl; return(OK); case BSIM4_MOD_WFGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4wfgidl; return(OK); case BSIM4_MOD_WKGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4wkgidl; return(OK); case BSIM4_MOD_WRGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4wrgidl; return(OK); case BSIM4_MOD_WAGISL: value->rValue = model->BSIM4wagisl; return(OK); case BSIM4_MOD_WBGISL: value->rValue = model->BSIM4wbgisl; return(OK); case BSIM4_MOD_WCGISL: value->rValue = model->BSIM4wcgisl; return(OK); case BSIM4_MOD_WEGISL: value->rValue = model->BSIM4wegisl; return(OK); case BSIM4_MOD_WFGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4wfgisl; return(OK); case BSIM4_MOD_WKGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4wkgisl; return(OK); case BSIM4_MOD_WRGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4wrgisl; return(OK); case BSIM4_MOD_WAIGC: value->rValue = model->BSIM4waigc; return(OK); case BSIM4_MOD_WBIGC: value->rValue = model->BSIM4wbigc; return(OK); case BSIM4_MOD_WCIGC: value->rValue = model->BSIM4wcigc; return(OK); case BSIM4_MOD_WAIGSD: value->rValue = model->BSIM4waigsd; return(OK); case BSIM4_MOD_WBIGSD: value->rValue = model->BSIM4wbigsd; return(OK); case BSIM4_MOD_WCIGSD: value->rValue = model->BSIM4wcigsd; return(OK); case BSIM4_MOD_WAIGS: value->rValue = model->BSIM4waigs; return(OK); case BSIM4_MOD_WBIGS: value->rValue = model->BSIM4wbigs; return(OK); case BSIM4_MOD_WCIGS: value->rValue = model->BSIM4wcigs; return(OK); case BSIM4_MOD_WAIGD: value->rValue = model->BSIM4waigd; return(OK); case BSIM4_MOD_WBIGD: value->rValue = model->BSIM4wbigd; return(OK); case BSIM4_MOD_WCIGD: value->rValue = model->BSIM4wcigd; return(OK); case BSIM4_MOD_WAIGBACC: value->rValue = model->BSIM4waigbacc; return(OK); case BSIM4_MOD_WBIGBACC: value->rValue = model->BSIM4wbigbacc; return(OK); case BSIM4_MOD_WCIGBACC: value->rValue = model->BSIM4wcigbacc; return(OK); case BSIM4_MOD_WAIGBINV: value->rValue = model->BSIM4waigbinv; return(OK); case BSIM4_MOD_WBIGBINV: value->rValue = model->BSIM4wbigbinv; return(OK); case BSIM4_MOD_WCIGBINV: value->rValue = model->BSIM4wcigbinv; return(OK); case BSIM4_MOD_WNIGC: value->rValue = model->BSIM4wnigc; return(OK); case BSIM4_MOD_WNIGBACC: value->rValue = model->BSIM4wnigbacc; return(OK); case BSIM4_MOD_WNIGBINV: value->rValue = model->BSIM4wnigbinv; return(OK); case BSIM4_MOD_WNTOX: value->rValue = model->BSIM4wntox; return(OK); case BSIM4_MOD_WEIGBINV: value->rValue = model->BSIM4weigbinv; return(OK); case BSIM4_MOD_WPIGCD: value->rValue = model->BSIM4wpigcd; return(OK); case BSIM4_MOD_WPOXEDGE: value->rValue = model->BSIM4wpoxedge; return(OK); case BSIM4_MOD_WPHIN: value->rValue = model->BSIM4wphin; return(OK); case BSIM4_MOD_WXRCRG1: value->rValue = model->BSIM4wxrcrg1; return(OK); case BSIM4_MOD_WXRCRG2: value->rValue = model->BSIM4wxrcrg2; return(OK); case BSIM4_MOD_WEU: value->rValue = model->BSIM4weu; return(OK); case BSIM4_MOD_WUCS: value->rValue = model->BSIM4wucs; return(OK); case BSIM4_MOD_WVFB: value->rValue = model->BSIM4wvfb; return(OK); case BSIM4_MOD_WCGSL: value->rValue = model->BSIM4wcgsl; return(OK); case BSIM4_MOD_WCGDL: value->rValue = model->BSIM4wcgdl; return(OK); case BSIM4_MOD_WCKAPPAS: value->rValue = model->BSIM4wckappas; return(OK); case BSIM4_MOD_WCKAPPAD: value->rValue = model->BSIM4wckappad; return(OK); case BSIM4_MOD_WCF: value->rValue = model->BSIM4wcf; return(OK); case BSIM4_MOD_WCLC: value->rValue = model->BSIM4wclc; return(OK); case BSIM4_MOD_WCLE: value->rValue = model->BSIM4wcle; return(OK); case BSIM4_MOD_WVFBCV: value->rValue = model->BSIM4wvfbcv; return(OK); case BSIM4_MOD_WACDE: value->rValue = model->BSIM4wacde; return(OK); case BSIM4_MOD_WMOIN: value->rValue = model->BSIM4wmoin; return(OK); case BSIM4_MOD_WNOFF: value->rValue = model->BSIM4wnoff; return(OK); case BSIM4_MOD_WVOFFCV: value->rValue = model->BSIM4wvoffcv; return(OK); case BSIM4_MOD_WVFBSDOFF: value->rValue = model->BSIM4wvfbsdoff; return(OK); case BSIM4_MOD_WTVFBSDOFF: value->rValue = model->BSIM4wtvfbsdoff; return(OK); case BSIM4_MOD_WLAMBDA: value->rValue = model->BSIM4wlambda; return(OK); case BSIM4_MOD_WVTL: value->rValue = model->BSIM4wvtl; return(OK); case BSIM4_MOD_WXN: value->rValue = model->BSIM4wxn; return(OK); /* Cross-term dependence */ case BSIM4_MOD_PCDSC : value->rValue = model->BSIM4pcdsc; return(OK); case BSIM4_MOD_PCDSCB : value->rValue = model->BSIM4pcdscb; return(OK); case BSIM4_MOD_PCDSCD : value->rValue = model->BSIM4pcdscd; return(OK); case BSIM4_MOD_PCIT : value->rValue = model->BSIM4pcit; return(OK); case BSIM4_MOD_PNFACTOR : value->rValue = model->BSIM4pnfactor; return(OK); case BSIM4_MOD_PXJ: value->rValue = model->BSIM4pxj; return(OK); case BSIM4_MOD_PVSAT: value->rValue = model->BSIM4pvsat; return(OK); case BSIM4_MOD_PAT: value->rValue = model->BSIM4pat; return(OK); case BSIM4_MOD_PA0: value->rValue = model->BSIM4pa0; return(OK); case BSIM4_MOD_PAGS: value->rValue = model->BSIM4pags; return(OK); case BSIM4_MOD_PA1: value->rValue = model->BSIM4pa1; return(OK); case BSIM4_MOD_PA2: value->rValue = model->BSIM4pa2; return(OK); case BSIM4_MOD_PKETA: value->rValue = model->BSIM4pketa; return(OK); case BSIM4_MOD_PNSUB: value->rValue = model->BSIM4pnsub; return(OK); case BSIM4_MOD_PNDEP: value->rValue = model->BSIM4pndep; return(OK); case BSIM4_MOD_PNSD: value->rValue = model->BSIM4pnsd; return(OK); case BSIM4_MOD_PNGATE: value->rValue = model->BSIM4pngate; return(OK); case BSIM4_MOD_PGAMMA1: value->rValue = model->BSIM4pgamma1; return(OK); case BSIM4_MOD_PGAMMA2: value->rValue = model->BSIM4pgamma2; return(OK); case BSIM4_MOD_PVBX: value->rValue = model->BSIM4pvbx; return(OK); case BSIM4_MOD_PVBM: value->rValue = model->BSIM4pvbm; return(OK); case BSIM4_MOD_PXT: value->rValue = model->BSIM4pxt; return(OK); case BSIM4_MOD_PK1: value->rValue = model->BSIM4pk1; return(OK); case BSIM4_MOD_PKT1: value->rValue = model->BSIM4pkt1; return(OK); case BSIM4_MOD_PKT1L: value->rValue = model->BSIM4pkt1l; return(OK); case BSIM4_MOD_PKT2 : value->rValue = model->BSIM4pkt2; return(OK); case BSIM4_MOD_PK2 : value->rValue = model->BSIM4pk2; return(OK); case BSIM4_MOD_PK3: value->rValue = model->BSIM4pk3; return(OK); case BSIM4_MOD_PK3B: value->rValue = model->BSIM4pk3b; return(OK); case BSIM4_MOD_PW0: value->rValue = model->BSIM4pw0; return(OK); case BSIM4_MOD_PLPE0: value->rValue = model->BSIM4plpe0; return(OK); case BSIM4_MOD_PLPEB: value->rValue = model->BSIM4plpeb; return(OK); case BSIM4_MOD_PDVTP0: value->rValue = model->BSIM4pdvtp0; return(OK); case BSIM4_MOD_PDVTP1: value->rValue = model->BSIM4pdvtp1; return(OK); case BSIM4_MOD_PDVTP2: value->rValue = model->BSIM4pdvtp2; /* New DIBL/Rout */ return(OK); case BSIM4_MOD_PDVTP3: value->rValue = model->BSIM4pdvtp3; return(OK); case BSIM4_MOD_PDVTP4: value->rValue = model->BSIM4pdvtp4; return(OK); case BSIM4_MOD_PDVTP5: value->rValue = model->BSIM4pdvtp5; return(OK); case BSIM4_MOD_PDVT0 : value->rValue = model->BSIM4pdvt0; return(OK); case BSIM4_MOD_PDVT1 : value->rValue = model->BSIM4pdvt1; return(OK); case BSIM4_MOD_PDVT2 : value->rValue = model->BSIM4pdvt2; return(OK); case BSIM4_MOD_PDVT0W : value->rValue = model->BSIM4pdvt0w; return(OK); case BSIM4_MOD_PDVT1W : value->rValue = model->BSIM4pdvt1w; return(OK); case BSIM4_MOD_PDVT2W : value->rValue = model->BSIM4pdvt2w; return(OK); case BSIM4_MOD_PDROUT : value->rValue = model->BSIM4pdrout; return(OK); case BSIM4_MOD_PDSUB : value->rValue = model->BSIM4pdsub; return(OK); case BSIM4_MOD_PVTH0: value->rValue = model->BSIM4pvth0; return(OK); case BSIM4_MOD_PUA: value->rValue = model->BSIM4pua; return(OK); case BSIM4_MOD_PUA1: value->rValue = model->BSIM4pua1; return(OK); case BSIM4_MOD_PUB: value->rValue = model->BSIM4pub; return(OK); case BSIM4_MOD_PUB1: value->rValue = model->BSIM4pub1; return(OK); case BSIM4_MOD_PUC: value->rValue = model->BSIM4puc; return(OK); case BSIM4_MOD_PUC1: value->rValue = model->BSIM4puc1; return(OK); case BSIM4_MOD_PUD: value->rValue = model->BSIM4pud; return(OK); case BSIM4_MOD_PUD1: value->rValue = model->BSIM4pud1; return(OK); case BSIM4_MOD_PUP: value->rValue = model->BSIM4pup; return(OK); case BSIM4_MOD_PLP: value->rValue = model->BSIM4plp; return(OK); case BSIM4_MOD_PU0: value->rValue = model->BSIM4pu0; return(OK); case BSIM4_MOD_PUTE: value->rValue = model->BSIM4pute; return(OK); case BSIM4_MOD_PUCSTE: value->rValue = model->BSIM4pucste; return(OK); case BSIM4_MOD_PVOFF: value->rValue = model->BSIM4pvoff; return(OK); case BSIM4_MOD_PTVOFF: value->rValue = model->BSIM4ptvoff; return(OK); case BSIM4_MOD_PTNFACTOR: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4ptnfactor; return(OK); case BSIM4_MOD_PTETA0: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4pteta0; return(OK); case BSIM4_MOD_PTVOFFCV: /* v4.7 temp dep of leakage current */ value->rValue = model->BSIM4ptvoffcv; return(OK); case BSIM4_MOD_PMINV: value->rValue = model->BSIM4pminv; return(OK); case BSIM4_MOD_PMINVCV: value->rValue = model->BSIM4pminvcv; return(OK); case BSIM4_MOD_PFPROUT: value->rValue = model->BSIM4pfprout; return(OK); case BSIM4_MOD_PPDITS: value->rValue = model->BSIM4ppdits; return(OK); case BSIM4_MOD_PPDITSD: value->rValue = model->BSIM4ppditsd; return(OK); case BSIM4_MOD_PDELTA: value->rValue = model->BSIM4pdelta; return(OK); case BSIM4_MOD_PRDSW: value->rValue = model->BSIM4prdsw; return(OK); case BSIM4_MOD_PRDW: value->rValue = model->BSIM4prdw; return(OK); case BSIM4_MOD_PRSW: value->rValue = model->BSIM4prsw; return(OK); case BSIM4_MOD_PPRWB: value->rValue = model->BSIM4pprwb; return(OK); case BSIM4_MOD_PPRWG: value->rValue = model->BSIM4pprwg; return(OK); case BSIM4_MOD_PPRT: value->rValue = model->BSIM4pprt; return(OK); case BSIM4_MOD_PETA0: value->rValue = model->BSIM4peta0; return(OK); case BSIM4_MOD_PETAB: value->rValue = model->BSIM4petab; return(OK); case BSIM4_MOD_PPCLM: value->rValue = model->BSIM4ppclm; return(OK); case BSIM4_MOD_PPDIBL1: value->rValue = model->BSIM4ppdibl1; return(OK); case BSIM4_MOD_PPDIBL2: value->rValue = model->BSIM4ppdibl2; return(OK); case BSIM4_MOD_PPDIBLB: value->rValue = model->BSIM4ppdiblb; return(OK); case BSIM4_MOD_PPSCBE1: value->rValue = model->BSIM4ppscbe1; return(OK); case BSIM4_MOD_PPSCBE2: value->rValue = model->BSIM4ppscbe2; return(OK); case BSIM4_MOD_PPVAG: value->rValue = model->BSIM4ppvag; return(OK); case BSIM4_MOD_PWR: value->rValue = model->BSIM4pwr; return(OK); case BSIM4_MOD_PDWG: value->rValue = model->BSIM4pdwg; return(OK); case BSIM4_MOD_PDWB: value->rValue = model->BSIM4pdwb; return(OK); case BSIM4_MOD_PB0: value->rValue = model->BSIM4pb0; return(OK); case BSIM4_MOD_PB1: value->rValue = model->BSIM4pb1; return(OK); case BSIM4_MOD_PALPHA0: value->rValue = model->BSIM4palpha0; return(OK); case BSIM4_MOD_PALPHA1: value->rValue = model->BSIM4palpha1; return(OK); case BSIM4_MOD_PBETA0: value->rValue = model->BSIM4pbeta0; return(OK); case BSIM4_MOD_PAGIDL: value->rValue = model->BSIM4pagidl; return(OK); case BSIM4_MOD_PBGIDL: value->rValue = model->BSIM4pbgidl; return(OK); case BSIM4_MOD_PCGIDL: value->rValue = model->BSIM4pcgidl; return(OK); case BSIM4_MOD_PEGIDL: value->rValue = model->BSIM4pegidl; return(OK); case BSIM4_MOD_PFGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4pfgidl; return(OK); case BSIM4_MOD_PKGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4pkgidl; return(OK); case BSIM4_MOD_PRGIDL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4prgidl; return(OK); case BSIM4_MOD_PAGISL: value->rValue = model->BSIM4pagisl; return(OK); case BSIM4_MOD_PBGISL: value->rValue = model->BSIM4pbgisl; return(OK); case BSIM4_MOD_PCGISL: value->rValue = model->BSIM4pcgisl; return(OK); case BSIM4_MOD_PEGISL: value->rValue = model->BSIM4pegisl; return(OK); case BSIM4_MOD_PFGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4pfgisl; return(OK); case BSIM4_MOD_PKGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4pkgisl; return(OK); case BSIM4_MOD_PRGISL: /* v4.7 New GIDL/GISL*/ value->rValue = model->BSIM4prgisl; return(OK); case BSIM4_MOD_PAIGC: value->rValue = model->BSIM4paigc; return(OK); case BSIM4_MOD_PBIGC: value->rValue = model->BSIM4pbigc; return(OK); case BSIM4_MOD_PCIGC: value->rValue = model->BSIM4pcigc; return(OK); case BSIM4_MOD_PAIGSD: value->rValue = model->BSIM4paigsd; return(OK); case BSIM4_MOD_PBIGSD: value->rValue = model->BSIM4pbigsd; return(OK); case BSIM4_MOD_PCIGSD: value->rValue = model->BSIM4pcigsd; return(OK); case BSIM4_MOD_PAIGS: value->rValue = model->BSIM4paigs; return(OK); case BSIM4_MOD_PBIGS: value->rValue = model->BSIM4pbigs; return(OK); case BSIM4_MOD_PCIGS: value->rValue = model->BSIM4pcigs; return(OK); case BSIM4_MOD_PAIGD: value->rValue = model->BSIM4paigd; return(OK); case BSIM4_MOD_PBIGD: value->rValue = model->BSIM4pbigd; return(OK); case BSIM4_MOD_PCIGD: value->rValue = model->BSIM4pcigd; return(OK); case BSIM4_MOD_PAIGBACC: value->rValue = model->BSIM4paigbacc; return(OK); case BSIM4_MOD_PBIGBACC: value->rValue = model->BSIM4pbigbacc; return(OK); case BSIM4_MOD_PCIGBACC: value->rValue = model->BSIM4pcigbacc; return(OK); case BSIM4_MOD_PAIGBINV: value->rValue = model->BSIM4paigbinv; return(OK); case BSIM4_MOD_PBIGBINV: value->rValue = model->BSIM4pbigbinv; return(OK); case BSIM4_MOD_PCIGBINV: value->rValue = model->BSIM4pcigbinv; return(OK); case BSIM4_MOD_PNIGC: value->rValue = model->BSIM4pnigc; return(OK); case BSIM4_MOD_PNIGBACC: value->rValue = model->BSIM4pnigbacc; return(OK); case BSIM4_MOD_PNIGBINV: value->rValue = model->BSIM4pnigbinv; return(OK); case BSIM4_MOD_PNTOX: value->rValue = model->BSIM4pntox; return(OK); case BSIM4_MOD_PEIGBINV: value->rValue = model->BSIM4peigbinv; return(OK); case BSIM4_MOD_PPIGCD: value->rValue = model->BSIM4ppigcd; return(OK); case BSIM4_MOD_PPOXEDGE: value->rValue = model->BSIM4ppoxedge; return(OK); case BSIM4_MOD_PPHIN: value->rValue = model->BSIM4pphin; return(OK); case BSIM4_MOD_PXRCRG1: value->rValue = model->BSIM4pxrcrg1; return(OK); case BSIM4_MOD_PXRCRG2: value->rValue = model->BSIM4pxrcrg2; return(OK); case BSIM4_MOD_PEU: value->rValue = model->BSIM4peu; return(OK); case BSIM4_MOD_PUCS: value->rValue = model->BSIM4pucs; return(OK); case BSIM4_MOD_PVFB: value->rValue = model->BSIM4pvfb; return(OK); case BSIM4_MOD_PCGSL: value->rValue = model->BSIM4pcgsl; return(OK); case BSIM4_MOD_PCGDL: value->rValue = model->BSIM4pcgdl; return(OK); case BSIM4_MOD_PCKAPPAS: value->rValue = model->BSIM4pckappas; return(OK); case BSIM4_MOD_PCKAPPAD: value->rValue = model->BSIM4pckappad; return(OK); case BSIM4_MOD_PCF: value->rValue = model->BSIM4pcf; return(OK); case BSIM4_MOD_PCLC: value->rValue = model->BSIM4pclc; return(OK); case BSIM4_MOD_PCLE: value->rValue = model->BSIM4pcle; return(OK); case BSIM4_MOD_PVFBCV: value->rValue = model->BSIM4pvfbcv; return(OK); case BSIM4_MOD_PACDE: value->rValue = model->BSIM4pacde; return(OK); case BSIM4_MOD_PMOIN: value->rValue = model->BSIM4pmoin; return(OK); case BSIM4_MOD_PNOFF: value->rValue = model->BSIM4pnoff; return(OK); case BSIM4_MOD_PVOFFCV: value->rValue = model->BSIM4pvoffcv; return(OK); case BSIM4_MOD_PVFBSDOFF: value->rValue = model->BSIM4pvfbsdoff; return(OK); case BSIM4_MOD_PTVFBSDOFF: value->rValue = model->BSIM4ptvfbsdoff; return(OK); case BSIM4_MOD_PLAMBDA: value->rValue = model->BSIM4plambda; return(OK); case BSIM4_MOD_PVTL: value->rValue = model->BSIM4pvtl; return(OK); case BSIM4_MOD_PXN: value->rValue = model->BSIM4pxn; return(OK); case BSIM4_MOD_TNOM : value->rValue = model->BSIM4tnom; return(OK); case BSIM4_MOD_CGSO: value->rValue = model->BSIM4cgso; return(OK); case BSIM4_MOD_CGDO: value->rValue = model->BSIM4cgdo; return(OK); case BSIM4_MOD_CGBO: value->rValue = model->BSIM4cgbo; return(OK); case BSIM4_MOD_XPART: value->rValue = model->BSIM4xpart; return(OK); case BSIM4_MOD_RSH: value->rValue = model->BSIM4sheetResistance; return(OK); case BSIM4_MOD_JSS: value->rValue = model->BSIM4SjctSatCurDensity; return(OK); case BSIM4_MOD_JSWS: value->rValue = model->BSIM4SjctSidewallSatCurDensity; return(OK); case BSIM4_MOD_JSWGS: value->rValue = model->BSIM4SjctGateSidewallSatCurDensity; return(OK); case BSIM4_MOD_PBS: value->rValue = model->BSIM4SbulkJctPotential; return(OK); case BSIM4_MOD_MJS: value->rValue = model->BSIM4SbulkJctBotGradingCoeff; return(OK); case BSIM4_MOD_PBSWS: value->rValue = model->BSIM4SsidewallJctPotential; return(OK); case BSIM4_MOD_MJSWS: value->rValue = model->BSIM4SbulkJctSideGradingCoeff; return(OK); case BSIM4_MOD_CJS: value->rValue = model->BSIM4SunitAreaJctCap; return(OK); case BSIM4_MOD_CJSWS: value->rValue = model->BSIM4SunitLengthSidewallJctCap; return(OK); case BSIM4_MOD_PBSWGS: value->rValue = model->BSIM4SGatesidewallJctPotential; return(OK); case BSIM4_MOD_MJSWGS: value->rValue = model->BSIM4SbulkJctGateSideGradingCoeff; return(OK); case BSIM4_MOD_CJSWGS: value->rValue = model->BSIM4SunitLengthGateSidewallJctCap; return(OK); case BSIM4_MOD_NJS: value->rValue = model->BSIM4SjctEmissionCoeff; return(OK); case BSIM4_MOD_XTIS: value->rValue = model->BSIM4SjctTempExponent; return(OK); case BSIM4_MOD_JSD: value->rValue = model->BSIM4DjctSatCurDensity; return(OK); case BSIM4_MOD_JSWD: value->rValue = model->BSIM4DjctSidewallSatCurDensity; return(OK); case BSIM4_MOD_JSWGD: value->rValue = model->BSIM4DjctGateSidewallSatCurDensity; return(OK); case BSIM4_MOD_PBD: value->rValue = model->BSIM4DbulkJctPotential; return(OK); case BSIM4_MOD_MJD: value->rValue = model->BSIM4DbulkJctBotGradingCoeff; return(OK); case BSIM4_MOD_PBSWD: value->rValue = model->BSIM4DsidewallJctPotential; return(OK); case BSIM4_MOD_MJSWD: value->rValue = model->BSIM4DbulkJctSideGradingCoeff; return(OK); case BSIM4_MOD_CJD: value->rValue = model->BSIM4DunitAreaJctCap; return(OK); case BSIM4_MOD_CJSWD: value->rValue = model->BSIM4DunitLengthSidewallJctCap; return(OK); case BSIM4_MOD_PBSWGD: value->rValue = model->BSIM4DGatesidewallJctPotential; return(OK); case BSIM4_MOD_MJSWGD: value->rValue = model->BSIM4DbulkJctGateSideGradingCoeff; return(OK); case BSIM4_MOD_CJSWGD: value->rValue = model->BSIM4DunitLengthGateSidewallJctCap; return(OK); case BSIM4_MOD_NJD: value->rValue = model->BSIM4DjctEmissionCoeff; return(OK); case BSIM4_MOD_XTID: value->rValue = model->BSIM4DjctTempExponent; return(OK); case BSIM4_MOD_LINTNOI: value->rValue = model->BSIM4lintnoi; return(OK); case BSIM4_MOD_LINT: value->rValue = model->BSIM4Lint; return(OK); case BSIM4_MOD_LL: value->rValue = model->BSIM4Ll; return(OK); case BSIM4_MOD_LLC: value->rValue = model->BSIM4Llc; return(OK); case BSIM4_MOD_LLN: value->rValue = model->BSIM4Lln; return(OK); case BSIM4_MOD_LW: value->rValue = model->BSIM4Lw; return(OK); case BSIM4_MOD_LWC: value->rValue = model->BSIM4Lwc; return(OK); case BSIM4_MOD_LWN: value->rValue = model->BSIM4Lwn; return(OK); case BSIM4_MOD_LWL: value->rValue = model->BSIM4Lwl; return(OK); case BSIM4_MOD_LWLC: value->rValue = model->BSIM4Lwlc; return(OK); case BSIM4_MOD_LMIN: value->rValue = model->BSIM4Lmin; return(OK); case BSIM4_MOD_LMAX: value->rValue = model->BSIM4Lmax; return(OK); case BSIM4_MOD_WINT: value->rValue = model->BSIM4Wint; return(OK); case BSIM4_MOD_WL: value->rValue = model->BSIM4Wl; return(OK); case BSIM4_MOD_WLC: value->rValue = model->BSIM4Wlc; return(OK); case BSIM4_MOD_WLN: value->rValue = model->BSIM4Wln; return(OK); case BSIM4_MOD_WW: value->rValue = model->BSIM4Ww; return(OK); case BSIM4_MOD_WWC: value->rValue = model->BSIM4Wwc; return(OK); case BSIM4_MOD_WWN: value->rValue = model->BSIM4Wwn; return(OK); case BSIM4_MOD_WWL: value->rValue = model->BSIM4Wwl; return(OK); case BSIM4_MOD_WWLC: value->rValue = model->BSIM4Wwlc; return(OK); case BSIM4_MOD_WMIN: value->rValue = model->BSIM4Wmin; return(OK); case BSIM4_MOD_WMAX: value->rValue = model->BSIM4Wmax; return(OK); /* stress effect */ case BSIM4_MOD_SAREF: value->rValue = model->BSIM4saref; return(OK); case BSIM4_MOD_SBREF: value->rValue = model->BSIM4sbref; return(OK); case BSIM4_MOD_WLOD: value->rValue = model->BSIM4wlod; return(OK); case BSIM4_MOD_KU0: value->rValue = model->BSIM4ku0; return(OK); case BSIM4_MOD_KVSAT: value->rValue = model->BSIM4kvsat; return(OK); case BSIM4_MOD_KVTH0: value->rValue = model->BSIM4kvth0; return(OK); case BSIM4_MOD_TKU0: value->rValue = model->BSIM4tku0; return(OK); case BSIM4_MOD_LLODKU0: value->rValue = model->BSIM4llodku0; return(OK); case BSIM4_MOD_WLODKU0: value->rValue = model->BSIM4wlodku0; return(OK); case BSIM4_MOD_LLODVTH: value->rValue = model->BSIM4llodvth; return(OK); case BSIM4_MOD_WLODVTH: value->rValue = model->BSIM4wlodvth; return(OK); case BSIM4_MOD_LKU0: value->rValue = model->BSIM4lku0; return(OK); case BSIM4_MOD_WKU0: value->rValue = model->BSIM4wku0; return(OK); case BSIM4_MOD_PKU0: value->rValue = model->BSIM4pku0; return(OK); case BSIM4_MOD_LKVTH0: value->rValue = model->BSIM4lkvth0; return(OK); case BSIM4_MOD_WKVTH0: value->rValue = model->BSIM4wkvth0; return(OK); case BSIM4_MOD_PKVTH0: value->rValue = model->BSIM4pkvth0; return(OK); case BSIM4_MOD_STK2: value->rValue = model->BSIM4stk2; return(OK); case BSIM4_MOD_LODK2: value->rValue = model->BSIM4lodk2; return(OK); case BSIM4_MOD_STETA0: value->rValue = model->BSIM4steta0; return(OK); case BSIM4_MOD_LODETA0: value->rValue = model->BSIM4lodeta0; return(OK); /* Well Proximity Effect */ case BSIM4_MOD_WEB: value->rValue = model->BSIM4web; return(OK); case BSIM4_MOD_WEC: value->rValue = model->BSIM4wec; return(OK); case BSIM4_MOD_KVTH0WE: value->rValue = model->BSIM4kvth0we; return(OK); case BSIM4_MOD_K2WE: value->rValue = model->BSIM4k2we; return(OK); case BSIM4_MOD_KU0WE: value->rValue = model->BSIM4ku0we; return(OK); case BSIM4_MOD_SCREF: value->rValue = model->BSIM4scref; return(OK); case BSIM4_MOD_WPEMOD: value->rValue = model->BSIM4wpemod; return(OK); case BSIM4_MOD_LKVTH0WE: value->rValue = model->BSIM4lkvth0we; return(OK); case BSIM4_MOD_LK2WE: value->rValue = model->BSIM4lk2we; return(OK); case BSIM4_MOD_LKU0WE: value->rValue = model->BSIM4lku0we; return(OK); case BSIM4_MOD_WKVTH0WE: value->rValue = model->BSIM4wkvth0we; return(OK); case BSIM4_MOD_WK2WE: value->rValue = model->BSIM4wk2we; return(OK); case BSIM4_MOD_WKU0WE: value->rValue = model->BSIM4wku0we; return(OK); case BSIM4_MOD_PKVTH0WE: value->rValue = model->BSIM4pkvth0we; return(OK); case BSIM4_MOD_PK2WE: value->rValue = model->BSIM4pk2we; return(OK); case BSIM4_MOD_PKU0WE: value->rValue = model->BSIM4pku0we; return(OK); case BSIM4_MOD_NOIA: value->rValue = model->BSIM4oxideTrapDensityA; return(OK); case BSIM4_MOD_NOIB: value->rValue = model->BSIM4oxideTrapDensityB; return(OK); case BSIM4_MOD_NOIC: value->rValue = model->BSIM4oxideTrapDensityC; return(OK); case BSIM4_MOD_EM: value->rValue = model->BSIM4em; return(OK); case BSIM4_MOD_EF: value->rValue = model->BSIM4ef; return(OK); case BSIM4_MOD_AF: value->rValue = model->BSIM4af; return(OK); case BSIM4_MOD_KF: value->rValue = model->BSIM4kf; return(OK); case BSIM4_MOD_VGS_MAX: value->rValue = model->BSIM4vgsMax; return(OK); case BSIM4_MOD_VGD_MAX: value->rValue = model->BSIM4vgdMax; return(OK); case BSIM4_MOD_VGB_MAX: value->rValue = model->BSIM4vgbMax; return(OK); case BSIM4_MOD_VDS_MAX: value->rValue = model->BSIM4vdsMax; return(OK); case BSIM4_MOD_VBS_MAX: value->rValue = model->BSIM4vbsMax; return(OK); case BSIM4_MOD_VBD_MAX: value->rValue = model->BSIM4vbdMax; return(OK); case BSIM4_MOD_VGSR_MAX: value->rValue = model->BSIM4vgsrMax; return(OK); case BSIM4_MOD_VGDR_MAX: value->rValue = model->BSIM4vgdrMax; return(OK); case BSIM4_MOD_VGBR_MAX: value->rValue = model->BSIM4vgbrMax; return(OK); case BSIM4_MOD_VBSR_MAX: value->rValue = model->BSIM4vbsrMax; return(OK); case BSIM4_MOD_VBDR_MAX: value->rValue = model->BSIM4vbdrMax; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim4/bsim4init.h0000644000175000017500000000040213546075722022250 0ustar carstencarsten#ifndef _BSIM4INIT_H #define _BSIM4INIT_H extern IFparm BSIM4pTable[ ]; extern IFparm BSIM4mPTable[ ]; extern char *BSIM4names[ ]; extern int BSIM4pTSize; extern int BSIM4mPTSize; extern int BSIM4nSize; extern int BSIM4iSize; extern int BSIM4mSize; #endif tmpk8ny_4pz/src/spicelib/devices/bsim4/b4ld.c0000644000175000017500000073541213546075722021206 0ustar carstencarsten/* ****************************************************************************** * BSIM4 4.8.1 released by Chetan Kumar Dabhi 2/15/2017 * * BSIM4 Model Equations * ****************************************************************************** ****************************************************************************** * Copyright 2017 Regents of the University of California. * * All rights reserved. * * * * Project Director: Prof. Chenming Hu. * * Authors: Gary W. Ng, Weidong Liu, Xuemei Xi, Mohan Dunga, Wenwei Yang * * Ali Niknejad, Shivendra Singh Parihar, Chetan Kumar Dabhi * * Yogesh Singh Chauhan, Sayeef Salahuddin, Chenming Hu * ****************************************************************************** ****************************************************************************** * CMC In-Code Statement * * * * The Developer agrees that the following statement will appear in the * * model code that has been adopted as a CMC Standard. * * * * Software is distributed as is, completely without warranty or service * * support. The University of California and its employees are not liable * * for the condition or performance of the software. * * * * The University of California owns the copyright and grants users a * * perpetual, irrevocable, worldwide, non-exclusive, royalty-free license * * with respect to the software as set forth below. * * * * The University of California hereby disclaims all implied warranties. * * * * The University of California grants the users the right to modify, * * copy, and redistribute the software and documentation, both within * * the user's organization and externally, subject to the following * * restrictions: * * * * 1. The users agree not to charge for the University of California code * * itself but may charge for additions, extensions, or support. * * * * 2. In any product based on the software, the users agree to * * acknowledge the University of California that developed the * * software. This acknowledgment shall appear in the product * * documentation. * * * * 3. Redistributions to others of source code and documentation must * * retain the copyright notice, disclaimer, and list of conditions. * * * * 4. Redistributions to others in binary form must reproduce the * * copyright notice, disclaimer, and list of conditions in the * * documentation and/or other materials provided with the * * distribution. * * * * Agreed to on ______Feb. 15, 2017______________ * * * * By: ____University of California, Berkeley___ * * ____Chenming Hu__________________________ * * ____Professor in Graduate School ________ * * * ****************************************************************************** */ /**** OpenMP support ngspice 06/28/2010 ****/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" #define MAX_EXPL 2.688117142e+43 #define MIN_EXPL 3.720075976e-44 #define EXPL_THRESHOLD 100.0 #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define EPS0 8.85418e-12 #define EPSSI 1.03594e-10 #define Charge_q 1.60219e-19 #define DELTA_1 0.02 #define DELTA_2 0.02 #define DELTA_3 0.02 #define DELTA_4 0.02 #define MM 3 /* smooth coeff */ #define DEXP(A,B,C) { \ if (A > EXP_THRESHOLD) { \ B = MAX_EXP*(1.0+(A)-EXP_THRESHOLD); \ C = MAX_EXP; \ } else if (A < -EXP_THRESHOLD) { \ B = MIN_EXP; \ C = 0; \ } else { \ B = exp(A); \ C = B; \ } \ } #ifdef USE_OMP int BSIM4LoadOMP(BSIM4instance *here, CKTcircuit *ckt); void BSIM4LoadRhsMat(GENmodel *inModel, CKTcircuit *ckt); #endif int BSIM4polyDepletion(double phi, double ngate,double epsgate, double coxe, double Vgs, double *Vgs_eff, double *dVgs_eff_dVg); int BSIM4load( GENmodel *inModel, CKTcircuit *ckt) { #ifdef USE_OMP int idx; BSIM4model *model = (BSIM4model*)inModel; int error = 0; BSIM4instance **InstArray; InstArray = model->BSIM4InstanceArray; #pragma omp parallel for for (idx = 0; idx < model->BSIM4InstCount; idx++) { BSIM4instance *here = InstArray[idx]; int local_error = BSIM4LoadOMP(here, ckt); if (local_error) error = local_error; } BSIM4LoadRhsMat(inModel, ckt); return error; } int BSIM4LoadOMP(BSIM4instance *here, CKTcircuit *ckt) { BSIM4model *model = BSIM4modPtr(here); #else BSIM4model *model = (BSIM4model*)inModel; BSIM4instance *here; #endif double ceqgstot, dgstot_dvd, dgstot_dvg, dgstot_dvs, dgstot_dvb; double ceqgdtot, dgdtot_dvd, dgdtot_dvg, dgdtot_dvs, dgdtot_dvb; double gstot, gstotd, gstotg, gstots, gstotb, gspr, Rs, Rd; double gdtot, gdtotd, gdtotg, gdtots, gdtotb, gdpr; double vgs_eff, vgd_eff, dvgs_eff_dvg, dvgd_eff_dvg; double dRs_dvg, dRd_dvg, dRs_dvb, dRd_dvb; double dT0_dvg, dT1_dvb, dT3_dvg, dT3_dvb; double vses, vdes, vdedo, delvses, delvded, delvdes; double Isestot, cseshat, Idedtot, cdedhat; #ifndef NEWCONV double tol0, tol1, tol2, tol3, tol4, tol5, tol6; #endif double geltd, gcrg, gcrgg, gcrgd, gcrgs, gcrgb, ceqgcrg; double vges, vgms, vgedo, vgmdo, vged, vgmd, delvged, delvgmd; double delvges, delvgms, vgmb; double gcgmgmb=0.0, gcgmdb=0.0, gcgmsb=0.0, gcdgmb, gcsgmb; double gcgmbb=0.0, gcbgmb, qgmb, qgmid=0.0, ceqqgmid; double vbd, vbs, vds, vgb, vgd, vgs, vgdo; #ifndef PREDICTOR double xfact; #endif double vdbs, vdbd, vsbs, vsbdo, vsbd; double delvdbs, delvdbd, delvsbs; double delvbd_jct, delvbs_jct, vbs_jct, vbd_jct; double SourceSatCurrent, DrainSatCurrent; double ag0, qgb, von, cbhat, VgstNVt, ExpVgst; double ceqqb, ceqqd, ceqqg, ceqqjd=0.0, ceqqjs=0.0, ceq, geq; double cdrain, cdhat, ceqdrn, ceqbd, ceqbs, ceqjd, ceqjs, gjbd, gjbs; double czbd, czbdsw, czbdswg, czbs, czbssw, czbsswg, evbd, evbs, arg, sarg; double delvbd, delvbs, delvds, delvgd, delvgs; double Vfbeff, dVfbeff_dVg, dVfbeff_dVb, V3, V4; double gcbdb, gcbgb, gcbsb, gcddb, gcdgb, gcdsb, gcgdb, gcggb, gcgsb, gcsdb; double gcgbb, gcdbb, gcsbb, gcbbb; double gcdbdb, gcsbsb; double gcsgb, gcssb, MJD, MJSWD, MJSWGD, MJS, MJSWS, MJSWGS; double qgate=0.0, qbulk=0.0, qdrn=0.0, qsrc, cqgate, cqbody, cqdrn; double Vdb, Vds, Vgs, Vbs, Gmbs, FwdSum, RevSum; double Igidl, Ggidld, Ggidlg, Ggidlb; double Voxacc=0.0, dVoxacc_dVg=0.0, dVoxacc_dVb=0.0; double Voxdepinv=0.0, dVoxdepinv_dVg=0.0, dVoxdepinv_dVd=0.0, dVoxdepinv_dVb=0.0; double VxNVt=0.0, ExpVxNVt, Vaux=0.0, dVaux_dVg=0.0, dVaux_dVd=0.0, dVaux_dVb=0.0; double Igc, dIgc_dVg, dIgc_dVd, dIgc_dVb; double Igcs, dIgcs_dVg, dIgcs_dVd, dIgcs_dVb; double Igcd, dIgcd_dVg, dIgcd_dVd, dIgcd_dVb; double Igs, dIgs_dVg, dIgs_dVs, Igd, dIgd_dVg, dIgd_dVd; double Igbacc, dIgbacc_dVg, dIgbacc_dVb; double Igbinv, dIgbinv_dVg, dIgbinv_dVd, dIgbinv_dVb; double Pigcd, dPigcd_dVg, dPigcd_dVd, dPigcd_dVb; double Istoteq, gIstotg, gIstotd, gIstots, gIstotb; double Idtoteq, gIdtotg, gIdtotd, gIdtots, gIdtotb; double Ibtoteq, gIbtotg, gIbtotd, gIbtots, gIbtotb; double Igtoteq, gIgtotg, gIgtotd, gIgtots, gIgtotb; double Igstot, cgshat, Igdtot, cgdhat, Igbtot, cgbhat; double Vgs_eff, Vfb=0.0, Vth_NarrowW; /* double Vgd_eff, dVgd_eff_dVg; v4.7.0 */ double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth, dVth_dVb, dVth_dVd; double Vgst, dVgst_dVg, dVgst_dVb, dVgs_eff_dVg, Nvtms, Nvtmd; double Vtm, Vtm0; double n, dn_dVb, dn_dVd, voffcv, noff, dnoff_dVd, dnoff_dVb; double V0, CoxWLcen, QovCox, LINK; double DeltaPhi, dDeltaPhi_dVg, VgDP, dVgDP_dVg; double Cox, Tox, Tcen, dTcen_dVg, dTcen_dVd, dTcen_dVb; double Ccen, Coxeff, dCoxeff_dVd, dCoxeff_dVg, dCoxeff_dVb; double Denomi, dDenomi_dVg, dDenomi_dVd, dDenomi_dVb; double ueff, dueff_dVg, dueff_dVd, dueff_dVb; double Esat, Vdsat; double EsatL, dEsatL_dVg, dEsatL_dVd, dEsatL_dVb; double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, Vasat, dAlphaz_dVg, dAlphaz_dVb; double dVasat_dVg, dVasat_dVb, dVasat_dVd, Va, dVa_dVd, dVa_dVg, dVa_dVb; double Vbseff, dVbseff_dVb, VbseffCV, dVbseffCV_dVb; double VgsteffVth, dT11_dVg; double Arg1, One_Third_CoxWL, Two_Third_CoxWL, Alphaz, CoxWL; double T0=0.0, dT0_dVg, dT0_dVd, dT0_dVb; double T1, dT1_dVg, dT1_dVd, dT1_dVb; double T2, dT2_dVg, dT2_dVd, dT2_dVb; double T3, dT3_dVg, dT3_dVd, dT3_dVb; double T4, dT4_dVd, dT4_dVb; double T5, dT5_dVg, dT5_dVd, dT5_dVb; double T6, dT6_dVg, dT6_dVd, dT6_dVb; double T7, dT7_dVg, dT7_dVd, dT7_dVb; double T8, dT8_dVg, dT8_dVd, dT8_dVb; double T9, dT9_dVg, dT9_dVd, dT9_dVb; double T10, dT10_dVg, dT10_dVb, dT10_dVd; double T11, T12, T13, T14; double tmp, Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVb; double Cclm, dCclm_dVg, dCclm_dVd, dCclm_dVb; double FP, dFP_dVg, PvagTerm, dPvagTerm_dVg, dPvagTerm_dVd, dPvagTerm_dVb; double VADITS, dVADITS_dVg, dVADITS_dVd; double Lpe_Vb, dDITS_Sft_dVb, dDITS_Sft_dVd; double DITS_Sft2, dDITS_Sft2_dVd; /* v4.7 New DITS */ double VACLM, dVACLM_dVg, dVACLM_dVd, dVACLM_dVb; double VADIBL, dVADIBL_dVg, dVADIBL_dVd, dVADIBL_dVb; double Xdep, dXdep_dVb, lt1, dlt1_dVb, ltw, dltw_dVb, Delt_vth, dDelt_vth_dVb; double Theta0, dTheta0_dVb; double TempRatio, tmp1, tmp2, tmp3, tmp4; double DIBL_Sft, dDIBL_Sft_dVd, Lambda, dLambda_dVg; double Idtot, Ibtot, a1, ScalingFactor; double Vgsteff, dVgsteff_dVg, dVgsteff_dVd, dVgsteff_dVb; double Vdseff, dVdseff_dVg, dVdseff_dVd, dVdseff_dVb; double VdseffCV, dVdseffCV_dVg, dVdseffCV_dVd, dVdseffCV_dVb; double diffVds, dAbulk_dVg; double beta, dbeta_dVg, dbeta_dVd, dbeta_dVb; double gche, dgche_dVg, dgche_dVd, dgche_dVb; double fgche1, dfgche1_dVg, dfgche1_dVd, dfgche1_dVb; double fgche2, dfgche2_dVg, dfgche2_dVd, dfgche2_dVb; double Idl, dIdl_dVg, dIdl_dVd, dIdl_dVb; double Idsa, dIdsa_dVg, dIdsa_dVd, dIdsa_dVb; double Ids, Gm, Gds, Gmb, devbs_dvb, devbd_dvb; double Isub, Gbd, Gbg, Gbb; double VASCBE, dVASCBE_dVg, dVASCBE_dVd, dVASCBE_dVb; double CoxeffWovL; double Rds, dRds_dVg, dRds_dVb, WVCox, WVCoxRds; double Vgst2Vtm, VdsatCV; double Leff, Weff, dWeff_dVg, dWeff_dVb; double AbulkCV, dAbulkCV_dVb; double qcheq, qdef, gqdef=0.0, cqdef=0.0, cqcheq=0.0; double gcqdb=0.0, gcqsb=0.0, gcqgb=0.0, gcqbb=0.0; double dxpart, sxpart, ggtg, ggtd, ggts, ggtb; double ddxpart_dVd, ddxpart_dVg, ddxpart_dVb, ddxpart_dVs; double dsxpart_dVd, dsxpart_dVg, dsxpart_dVb, dsxpart_dVs; double gbspsp, gbbdp, gbbsp, gbspg, gbspb, gbspdp; double gbdpdp, gbdpg, gbdpb, gbdpsp; double qgdo, qgso, cgdo, cgso; double Cgg, Cgd, Cgb, Cdg, Cdd, Cds; double Csg, Csd, Css, Csb, Cbg, Cbd, Cbb; double Cgg1, Cgd1, Cgb1, Cbg1, Cbb1, Cbd1, Qac0, Qsub0; double dQac0_dVg, dQac0_dVb, dQsub0_dVg, dQsub0_dVd, dQsub0_dVb; double ggidld, ggidlg, ggidlb, ggislg, ggislb, ggisls; double Igisl, Ggislg, Ggislb, Ggisls; double Nvtmrss, Nvtmrssws, Nvtmrsswgs; double Nvtmrsd, Nvtmrsswd, Nvtmrsswgd; double vs, Fsevl, dvs_dVg, dvs_dVd, dvs_dVb, dFsevl_dVg, dFsevl_dVd, dFsevl_dVb; double vgdx, vgsx, epssub, toxe, epsrox; struct bsim4SizeDependParam *pParam; int ByPass, ChargeComputationNeeded, error, Check, Check1, Check2; double m; ScalingFactor = 1.0e-9; ChargeComputationNeeded = ((ckt->CKTmode & (MODEDCTRANCURVE | MODEAC | MODETRAN | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) ? 1 : 0; #ifndef USE_OMP for (; model != NULL; model = BSIM4nextModel(model)) { for (here = BSIM4instances(model); here != NULL; here = BSIM4nextInstance(here)) { #endif Check = Check1 = Check2 = 1; ByPass = 0; pParam = here->pParam; if ((ckt->CKTmode & MODEINITSMSIG)) { vds = *(ckt->CKTstate0 + here->BSIM4vds); vgs = *(ckt->CKTstate0 + here->BSIM4vgs); vbs = *(ckt->CKTstate0 + here->BSIM4vbs); vges = *(ckt->CKTstate0 + here->BSIM4vges); vgms = *(ckt->CKTstate0 + here->BSIM4vgms); vdbs = *(ckt->CKTstate0 + here->BSIM4vdbs); vsbs = *(ckt->CKTstate0 + here->BSIM4vsbs); vses = *(ckt->CKTstate0 + here->BSIM4vses); vdes = *(ckt->CKTstate0 + here->BSIM4vdes); qdef = *(ckt->CKTstate0 + here->BSIM4qdef); } else if ((ckt->CKTmode & MODEINITTRAN)) { vds = *(ckt->CKTstate1 + here->BSIM4vds); vgs = *(ckt->CKTstate1 + here->BSIM4vgs); vbs = *(ckt->CKTstate1 + here->BSIM4vbs); vges = *(ckt->CKTstate1 + here->BSIM4vges); vgms = *(ckt->CKTstate1 + here->BSIM4vgms); vdbs = *(ckt->CKTstate1 + here->BSIM4vdbs); vsbs = *(ckt->CKTstate1 + here->BSIM4vsbs); vses = *(ckt->CKTstate1 + here->BSIM4vses); vdes = *(ckt->CKTstate1 + here->BSIM4vdes); qdef = *(ckt->CKTstate1 + here->BSIM4qdef); } else if ((ckt->CKTmode & MODEINITJCT) && !here->BSIM4off) { vds = model->BSIM4type * here->BSIM4icVDS; vgs = vges = vgms = model->BSIM4type * here->BSIM4icVGS; vbs = vdbs = vsbs = model->BSIM4type * here->BSIM4icVBS; if (vds > 0.0) { vdes = vds + 0.01; vses = -0.01; } else if (vds < 0.0) { vdes = vds - 0.01; vses = 0.01; } else vdes = vses = 0.0; qdef = 0.0; if ((vds == 0.0) && (vgs == 0.0) && (vbs == 0.0) && ((ckt->CKTmode & (MODETRAN | MODEAC|MODEDCOP | MODEDCTRANCURVE)) || (!(ckt->CKTmode & MODEUIC)))) { vds = 0.1; vdes = 0.11; vses = -0.01; vgs = vges = vgms = model->BSIM4type * here->BSIM4vth0 + 0.1; vbs = vdbs = vsbs = 0.0; } } else if ((ckt->CKTmode & (MODEINITJCT | MODEINITFIX)) && (here->BSIM4off)) { vds = vgs = vbs = vges = vgms = 0.0; vdbs = vsbs = vdes = vses = qdef = 0.0; } else { #ifndef PREDICTOR if ((ckt->CKTmode & MODEINITPRED)) { xfact = ckt->CKTdelta / ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->BSIM4vds) = *(ckt->CKTstate1 + here->BSIM4vds); vds = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4vds)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4vds))); *(ckt->CKTstate0 + here->BSIM4vgs) = *(ckt->CKTstate1 + here->BSIM4vgs); vgs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4vgs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4vgs))); *(ckt->CKTstate0 + here->BSIM4vges) = *(ckt->CKTstate1 + here->BSIM4vges); vges = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4vges)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4vges))); *(ckt->CKTstate0 + here->BSIM4vgms) = *(ckt->CKTstate1 + here->BSIM4vgms); vgms = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4vgms)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4vgms))); *(ckt->CKTstate0 + here->BSIM4vbs) = *(ckt->CKTstate1 + here->BSIM4vbs); vbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4vbs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4vbs))); *(ckt->CKTstate0 + here->BSIM4vbd) = *(ckt->CKTstate0 + here->BSIM4vbs) - *(ckt->CKTstate0 + here->BSIM4vds); *(ckt->CKTstate0 + here->BSIM4vdbs) = *(ckt->CKTstate1 + here->BSIM4vdbs); vdbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4vdbs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4vdbs))); *(ckt->CKTstate0 + here->BSIM4vdbd) = *(ckt->CKTstate0 + here->BSIM4vdbs) - *(ckt->CKTstate0 + here->BSIM4vds); *(ckt->CKTstate0 + here->BSIM4vsbs) = *(ckt->CKTstate1 + here->BSIM4vsbs); vsbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4vsbs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4vsbs))); *(ckt->CKTstate0 + here->BSIM4vses) = *(ckt->CKTstate1 + here->BSIM4vses); vses = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4vses)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4vses))); *(ckt->CKTstate0 + here->BSIM4vdes) = *(ckt->CKTstate1 + here->BSIM4vdes); vdes = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4vdes)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4vdes))); *(ckt->CKTstate0 + here->BSIM4qdef) = *(ckt->CKTstate1 + here->BSIM4qdef); qdef = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4qdef)) -(xfact * (*(ckt->CKTstate2 + here->BSIM4qdef))); } else { #endif /* PREDICTOR */ vds = model->BSIM4type * (*(ckt->CKTrhsOld + here->BSIM4dNodePrime) - *(ckt->CKTrhsOld + here->BSIM4sNodePrime)); vgs = model->BSIM4type * (*(ckt->CKTrhsOld + here->BSIM4gNodePrime) - *(ckt->CKTrhsOld + here->BSIM4sNodePrime)); vbs = model->BSIM4type * (*(ckt->CKTrhsOld + here->BSIM4bNodePrime) - *(ckt->CKTrhsOld + here->BSIM4sNodePrime)); vges = model->BSIM4type * (*(ckt->CKTrhsOld + here->BSIM4gNodeExt) - *(ckt->CKTrhsOld + here->BSIM4sNodePrime)); vgms = model->BSIM4type * (*(ckt->CKTrhsOld + here->BSIM4gNodeMid) - *(ckt->CKTrhsOld + here->BSIM4sNodePrime)); vdbs = model->BSIM4type * (*(ckt->CKTrhsOld + here->BSIM4dbNode) - *(ckt->CKTrhsOld + here->BSIM4sNodePrime)); vsbs = model->BSIM4type * (*(ckt->CKTrhsOld + here->BSIM4sbNode) - *(ckt->CKTrhsOld + here->BSIM4sNodePrime)); vses = model->BSIM4type * (*(ckt->CKTrhsOld + here->BSIM4sNode) - *(ckt->CKTrhsOld + here->BSIM4sNodePrime)); vdes = model->BSIM4type * (*(ckt->CKTrhsOld + here->BSIM4dNode) - *(ckt->CKTrhsOld + here->BSIM4sNodePrime)); qdef = model->BSIM4type * (*(ckt->CKTrhsOld + here->BSIM4qNode)); #ifndef PREDICTOR } #endif /* PREDICTOR */ vgdo = *(ckt->CKTstate0 + here->BSIM4vgs) - *(ckt->CKTstate0 + here->BSIM4vds); vgedo = *(ckt->CKTstate0 + here->BSIM4vges) - *(ckt->CKTstate0 + here->BSIM4vds); vgmdo = *(ckt->CKTstate0 + here->BSIM4vgms) - *(ckt->CKTstate0 + here->BSIM4vds); vbd = vbs - vds; vdbd = vdbs - vds; vgd = vgs - vds; vged = vges - vds; vgmd = vgms - vds; delvbd = vbd - *(ckt->CKTstate0 + here->BSIM4vbd); delvdbd = vdbd - *(ckt->CKTstate0 + here->BSIM4vdbd); delvgd = vgd - vgdo; delvged = vged - vgedo; delvgmd = vgmd - vgmdo; delvds = vds - *(ckt->CKTstate0 + here->BSIM4vds); delvgs = vgs - *(ckt->CKTstate0 + here->BSIM4vgs); delvges = vges - *(ckt->CKTstate0 + here->BSIM4vges); delvgms = vgms - *(ckt->CKTstate0 + here->BSIM4vgms); delvbs = vbs - *(ckt->CKTstate0 + here->BSIM4vbs); delvdbs = vdbs - *(ckt->CKTstate0 + here->BSIM4vdbs); delvsbs = vsbs - *(ckt->CKTstate0 + here->BSIM4vsbs); delvses = vses - (*(ckt->CKTstate0 + here->BSIM4vses)); vdedo = *(ckt->CKTstate0 + here->BSIM4vdes) - *(ckt->CKTstate0 + here->BSIM4vds); delvdes = vdes - *(ckt->CKTstate0 + here->BSIM4vdes); delvded = vdes - vds - vdedo; delvbd_jct = (!here->BSIM4rbodyMod) ? delvbd : delvdbd; delvbs_jct = (!here->BSIM4rbodyMod) ? delvbs : delvsbs; if (here->BSIM4mode >= 0) { Idtot = here->BSIM4cd + here->BSIM4csub - here->BSIM4cbd + here->BSIM4Igidl; cdhat = Idtot - here->BSIM4gbd * delvbd_jct + (here->BSIM4gmbs + here->BSIM4gbbs + here->BSIM4ggidlb) * delvbs + (here->BSIM4gm + here->BSIM4gbgs + here->BSIM4ggidlg) * delvgs + (here->BSIM4gds + here->BSIM4gbds + here->BSIM4ggidld) * delvds; Ibtot = here->BSIM4cbs + here->BSIM4cbd - here->BSIM4Igidl - here->BSIM4Igisl - here->BSIM4csub; cbhat = Ibtot + here->BSIM4gbd * delvbd_jct + here->BSIM4gbs * delvbs_jct - (here->BSIM4gbbs + here->BSIM4ggidlb) * delvbs - (here->BSIM4gbgs + here->BSIM4ggidlg) * delvgs - (here->BSIM4gbds + here->BSIM4ggidld - here->BSIM4ggisls) * delvds - here->BSIM4ggislg * delvgd - here->BSIM4ggislb* delvbd; Igstot = here->BSIM4Igs + here->BSIM4Igcs; cgshat = Igstot + (here->BSIM4gIgsg + here->BSIM4gIgcsg) * delvgs + here->BSIM4gIgcsd * delvds + here->BSIM4gIgcsb * delvbs; Igdtot = here->BSIM4Igd + here->BSIM4Igcd; cgdhat = Igdtot + here->BSIM4gIgdg * delvgd + here->BSIM4gIgcdg * delvgs + here->BSIM4gIgcdd * delvds + here->BSIM4gIgcdb * delvbs; Igbtot = here->BSIM4Igb; cgbhat = here->BSIM4Igb + here->BSIM4gIgbg * delvgs + here->BSIM4gIgbd * delvds + here->BSIM4gIgbb * delvbs; } else { Idtot = here->BSIM4cd + here->BSIM4cbd - here->BSIM4Igidl; /* bugfix */ cdhat = Idtot + here->BSIM4gbd * delvbd_jct + here->BSIM4gmbs * delvbd + here->BSIM4gm * delvgd - (here->BSIM4gds + here->BSIM4ggidls) * delvds - here->BSIM4ggidlg * delvgs - here->BSIM4ggidlb * delvbs; Ibtot = here->BSIM4cbs + here->BSIM4cbd - here->BSIM4Igidl - here->BSIM4Igisl - here->BSIM4csub; cbhat = Ibtot + here->BSIM4gbs * delvbs_jct + here->BSIM4gbd * delvbd_jct - (here->BSIM4gbbs + here->BSIM4ggislb) * delvbd - (here->BSIM4gbgs + here->BSIM4ggislg) * delvgd + (here->BSIM4gbds + here->BSIM4ggisld - here->BSIM4ggidls) * delvds - here->BSIM4ggidlg * delvgs - here->BSIM4ggidlb * delvbs; Igstot = here->BSIM4Igs + here->BSIM4Igcd; cgshat = Igstot + here->BSIM4gIgsg * delvgs + here->BSIM4gIgcdg * delvgd - here->BSIM4gIgcdd * delvds + here->BSIM4gIgcdb * delvbd; Igdtot = here->BSIM4Igd + here->BSIM4Igcs; cgdhat = Igdtot + (here->BSIM4gIgdg + here->BSIM4gIgcsg) * delvgd - here->BSIM4gIgcsd * delvds + here->BSIM4gIgcsb * delvbd; Igbtot = here->BSIM4Igb; cgbhat = here->BSIM4Igb + here->BSIM4gIgbg * delvgd - here->BSIM4gIgbd * delvds + here->BSIM4gIgbb * delvbd; } Isestot = here->BSIM4gstot * (*(ckt->CKTstate0 + here->BSIM4vses)); cseshat = Isestot + here->BSIM4gstot * delvses + here->BSIM4gstotd * delvds + here->BSIM4gstotg * delvgs + here->BSIM4gstotb * delvbs; Idedtot = here->BSIM4gdtot * vdedo; cdedhat = Idedtot + here->BSIM4gdtot * delvded + here->BSIM4gdtotd * delvds + here->BSIM4gdtotg * delvgs + here->BSIM4gdtotb * delvbs; #ifndef NOBYPASS /* Following should be one IF statement, but some C compilers * can't handle that all at once, so we split it into several * successive IF's */ if ((!(ckt->CKTmode & MODEINITPRED)) && (ckt->CKTbypass)) if ((fabs(delvds) < (ckt->CKTreltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0 + here->BSIM4vds))) + ckt->CKTvoltTol))) if ((fabs(delvgs) < (ckt->CKTreltol * MAX(fabs(vgs), fabs(*(ckt->CKTstate0 + here->BSIM4vgs))) + ckt->CKTvoltTol))) if ((fabs(delvbs) < (ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0 + here->BSIM4vbs))) + ckt->CKTvoltTol))) if ((fabs(delvbd) < (ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0 + here->BSIM4vbd))) + ckt->CKTvoltTol))) if ((here->BSIM4rgateMod == 0) || (here->BSIM4rgateMod == 1) || (fabs(delvges) < (ckt->CKTreltol * MAX(fabs(vges), fabs(*(ckt->CKTstate0 + here->BSIM4vges))) + ckt->CKTvoltTol))) if ((here->BSIM4rgateMod != 3) || (fabs(delvgms) < (ckt->CKTreltol * MAX(fabs(vgms), fabs(*(ckt->CKTstate0 + here->BSIM4vgms))) + ckt->CKTvoltTol))) if ((!here->BSIM4rbodyMod) || (fabs(delvdbs) < (ckt->CKTreltol * MAX(fabs(vdbs), fabs(*(ckt->CKTstate0 + here->BSIM4vdbs))) + ckt->CKTvoltTol))) if ((!here->BSIM4rbodyMod) || (fabs(delvdbd) < (ckt->CKTreltol * MAX(fabs(vdbd), fabs(*(ckt->CKTstate0 + here->BSIM4vdbd))) + ckt->CKTvoltTol))) if ((!here->BSIM4rbodyMod) || (fabs(delvsbs) < (ckt->CKTreltol * MAX(fabs(vsbs), fabs(*(ckt->CKTstate0 + here->BSIM4vsbs))) + ckt->CKTvoltTol))) if ((!model->BSIM4rdsMod) || (fabs(delvses) < (ckt->CKTreltol * MAX(fabs(vses), fabs(*(ckt->CKTstate0 + here->BSIM4vses))) + ckt->CKTvoltTol))) if ((!model->BSIM4rdsMod) || (fabs(delvdes) < (ckt->CKTreltol * MAX(fabs(vdes), fabs(*(ckt->CKTstate0 + here->BSIM4vdes))) + ckt->CKTvoltTol))) if ((fabs(cdhat - Idtot) < ckt->CKTreltol * MAX(fabs(cdhat), fabs(Idtot)) + ckt->CKTabstol)) if ((fabs(cbhat - Ibtot) < ckt->CKTreltol * MAX(fabs(cbhat), fabs(Ibtot)) + ckt->CKTabstol)) if ((!model->BSIM4igcMod) || ((fabs(cgshat - Igstot) < ckt->CKTreltol * MAX(fabs(cgshat), fabs(Igstot)) + ckt->CKTabstol))) if ((!model->BSIM4igcMod) || ((fabs(cgdhat - Igdtot) < ckt->CKTreltol * MAX(fabs(cgdhat), fabs(Igdtot)) + ckt->CKTabstol))) if ((!model->BSIM4igbMod) || ((fabs(cgbhat - Igbtot) < ckt->CKTreltol * MAX(fabs(cgbhat), fabs(Igbtot)) + ckt->CKTabstol))) if ((!model->BSIM4rdsMod) || ((fabs(cseshat - Isestot) < ckt->CKTreltol * MAX(fabs(cseshat), fabs(Isestot)) + ckt->CKTabstol))) if ((!model->BSIM4rdsMod) || ((fabs(cdedhat - Idedtot) < ckt->CKTreltol * MAX(fabs(cdedhat), fabs(Idedtot)) + ckt->CKTabstol))) { vds = *(ckt->CKTstate0 + here->BSIM4vds); vgs = *(ckt->CKTstate0 + here->BSIM4vgs); vbs = *(ckt->CKTstate0 + here->BSIM4vbs); vges = *(ckt->CKTstate0 + here->BSIM4vges); vgms = *(ckt->CKTstate0 + here->BSIM4vgms); vbd = *(ckt->CKTstate0 + here->BSIM4vbd); vdbs = *(ckt->CKTstate0 + here->BSIM4vdbs); vdbd = *(ckt->CKTstate0 + here->BSIM4vdbd); vsbs = *(ckt->CKTstate0 + here->BSIM4vsbs); vses = *(ckt->CKTstate0 + here->BSIM4vses); vdes = *(ckt->CKTstate0 + here->BSIM4vdes); vgd = vgs - vds; vgb = vgs - vbs; vged = vges - vds; vgmd = vgms - vds; vgmb = vgms - vbs; vbs_jct = (!here->BSIM4rbodyMod) ? vbs : vsbs; vbd_jct = (!here->BSIM4rbodyMod) ? vbd : vdbd; /*** qdef should not be kept fixed even if vgs, vds & vbs has converged **** qdef = *(ckt->CKTstate0 + here->BSIM4qdef); ***/ cdrain = here->BSIM4cd; if ((ckt->CKTmode & (MODETRAN | MODEAC)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) { ByPass = 1; qgate = here->BSIM4qgate; qbulk = here->BSIM4qbulk; qdrn = here->BSIM4qdrn; cgdo = here->BSIM4cgdo; qgdo = here->BSIM4qgdo; cgso = here->BSIM4cgso; qgso = here->BSIM4qgso; goto line755; } else goto line850; } #endif /*NOBYPASS*/ von = here->BSIM4von; if (*(ckt->CKTstate0 + here->BSIM4vds) >= 0.0) { vgs = DEVfetlim(vgs, *(ckt->CKTstate0 + here->BSIM4vgs), von); vds = vgs - vgd; vds = DEVlimvds(vds, *(ckt->CKTstate0 + here->BSIM4vds)); vgd = vgs - vds; if (here->BSIM4rgateMod == 3) { vges = DEVfetlim(vges, *(ckt->CKTstate0 + here->BSIM4vges), von); vgms = DEVfetlim(vgms, *(ckt->CKTstate0 + here->BSIM4vgms), von); vged = vges - vds; vgmd = vgms - vds; } else if ((here->BSIM4rgateMod == 1) || (here->BSIM4rgateMod == 2)) { vges = DEVfetlim(vges, *(ckt->CKTstate0 + here->BSIM4vges), von); vged = vges - vds; } if (model->BSIM4rdsMod) { vdes = DEVlimvds(vdes, *(ckt->CKTstate0 + here->BSIM4vdes)); vses = -DEVlimvds(-vses, -(*(ckt->CKTstate0 + here->BSIM4vses))); } } else { vgd = DEVfetlim(vgd, vgdo, von); vds = vgs - vgd; vds = -DEVlimvds(-vds, -(*(ckt->CKTstate0 + here->BSIM4vds))); vgs = vgd + vds; if (here->BSIM4rgateMod == 3) { vged = DEVfetlim(vged, vgedo, von); vges = vged + vds; vgmd = DEVfetlim(vgmd, vgmdo, von); vgms = vgmd + vds; } if ((here->BSIM4rgateMod == 1) || (here->BSIM4rgateMod == 2)) { vged = DEVfetlim(vged, vgedo, von); vges = vged + vds; } if (model->BSIM4rdsMod) { vdes = -DEVlimvds(-vdes, -(*(ckt->CKTstate0 + here->BSIM4vdes))); vses = DEVlimvds(vses, *(ckt->CKTstate0 + here->BSIM4vses)); } } if (vds >= 0.0) { vbs = DEVpnjlim(vbs, *(ckt->CKTstate0 + here->BSIM4vbs), CONSTvt0, model->BSIM4vcrit, &Check); vbd = vbs - vds; if (here->BSIM4rbodyMod) { vdbs = DEVpnjlim(vdbs, *(ckt->CKTstate0 + here->BSIM4vdbs), CONSTvt0, model->BSIM4vcrit, &Check1); vdbd = vdbs - vds; vsbs = DEVpnjlim(vsbs, *(ckt->CKTstate0 + here->BSIM4vsbs), CONSTvt0, model->BSIM4vcrit, &Check2); if ((Check1 == 0) && (Check2 == 0)) Check = 0; else Check = 1; } } else { vbd = DEVpnjlim(vbd, *(ckt->CKTstate0 + here->BSIM4vbd), CONSTvt0, model->BSIM4vcrit, &Check); vbs = vbd + vds; if (here->BSIM4rbodyMod) { vdbd = DEVpnjlim(vdbd, *(ckt->CKTstate0 + here->BSIM4vdbd), CONSTvt0, model->BSIM4vcrit, &Check1); vdbs = vdbd + vds; vsbdo = *(ckt->CKTstate0 + here->BSIM4vsbs) - *(ckt->CKTstate0 + here->BSIM4vds); vsbd = vsbs - vds; vsbd = DEVpnjlim(vsbd, vsbdo, CONSTvt0, model->BSIM4vcrit, &Check2); vsbs = vsbd + vds; if ((Check1 == 0) && (Check2 == 0)) Check = 0; else Check = 1; } } } /* Calculate DC currents and their derivatives */ vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; vged = vges - vds; vgmd = vgms - vds; vgmb = vgms - vbs; vdbd = vdbs - vds; vbs_jct = (!here->BSIM4rbodyMod) ? vbs : vsbs; vbd_jct = (!here->BSIM4rbodyMod) ? vbd : vdbd; /* Source/drain junction diode DC model begins */ Nvtms = model->BSIM4vtm * model->BSIM4SjctEmissionCoeff; /* if ((here->BSIM4Aseff <= 0.0) && (here->BSIM4Pseff <= 0.0)) { SourceSatCurrent = 1.0e-14; } v4.7 */ if ((here->BSIM4Aseff <= 0.0) && (here->BSIM4Pseff <= 0.0)) { SourceSatCurrent = 0.0; } else { SourceSatCurrent = here->BSIM4Aseff * model->BSIM4SjctTempSatCurDensity + here->BSIM4Pseff * model->BSIM4SjctSidewallTempSatCurDensity + pParam->BSIM4weffCJ * here->BSIM4nf * model->BSIM4SjctGateSidewallTempSatCurDensity; } if (SourceSatCurrent <= 0.0) { here->BSIM4gbs = ckt->CKTgmin; here->BSIM4cbs = here->BSIM4gbs * vbs_jct; } else { switch(model->BSIM4dioMod) { case 0: evbs = exp(vbs_jct / Nvtms); T1 = model->BSIM4xjbvs * exp(-(model->BSIM4bvs + vbs_jct) / Nvtms); /* WDLiu: Magic T1 in this form; different from BSIM4 beta. */ here->BSIM4gbs = SourceSatCurrent * (evbs + T1) / Nvtms + ckt->CKTgmin; here->BSIM4cbs = SourceSatCurrent * (evbs + here->BSIM4XExpBVS - T1 - 1.0) + ckt->CKTgmin * vbs_jct; break; case 1: T2 = vbs_jct / Nvtms; if (T2 < -EXP_THRESHOLD) { here->BSIM4gbs = ckt->CKTgmin; here->BSIM4cbs = SourceSatCurrent * (MIN_EXP - 1.0) + ckt->CKTgmin * vbs_jct; } else if (vbs_jct <= here->BSIM4vjsmFwd) { evbs = exp(T2); here->BSIM4gbs = SourceSatCurrent * evbs / Nvtms + ckt->CKTgmin; here->BSIM4cbs = SourceSatCurrent * (evbs - 1.0) + ckt->CKTgmin * vbs_jct; } else { T0 = here->BSIM4IVjsmFwd / Nvtms; here->BSIM4gbs = T0 + ckt->CKTgmin; here->BSIM4cbs = here->BSIM4IVjsmFwd - SourceSatCurrent + T0 * (vbs_jct - here->BSIM4vjsmFwd) + ckt->CKTgmin * vbs_jct; } break; case 2: if (vbs_jct < here->BSIM4vjsmRev) { T0 = vbs_jct / Nvtms; if (T0 < -EXP_THRESHOLD) { evbs = MIN_EXP; devbs_dvb = 0.0; } else { evbs = exp(T0); devbs_dvb = evbs / Nvtms; } T1 = evbs - 1.0; T2 = here->BSIM4IVjsmRev + here->BSIM4SslpRev * (vbs_jct - here->BSIM4vjsmRev); here->BSIM4gbs = devbs_dvb * T2 + T1 * here->BSIM4SslpRev + ckt->CKTgmin; here->BSIM4cbs = T1 * T2 + ckt->CKTgmin * vbs_jct; } else if (vbs_jct <= here->BSIM4vjsmFwd) { T0 = vbs_jct / Nvtms; if (T0 < -EXP_THRESHOLD) { evbs = MIN_EXP; devbs_dvb = 0.0; } else { evbs = exp(T0); devbs_dvb = evbs / Nvtms; } T1 = (model->BSIM4bvs + vbs_jct) / Nvtms; if (T1 > EXP_THRESHOLD) { T2 = MIN_EXP; T3 = 0.0; } else { T2 = exp(-T1); T3 = -T2 /Nvtms; } here->BSIM4gbs = SourceSatCurrent * (devbs_dvb - model->BSIM4xjbvs * T3) + ckt->CKTgmin; here->BSIM4cbs = SourceSatCurrent * (evbs + here->BSIM4XExpBVS - 1.0 - model->BSIM4xjbvs * T2) + ckt->CKTgmin * vbs_jct; } else { here->BSIM4gbs = here->BSIM4SslpFwd + ckt->CKTgmin; here->BSIM4cbs = here->BSIM4IVjsmFwd + here->BSIM4SslpFwd * (vbs_jct - here->BSIM4vjsmFwd) + ckt->CKTgmin * vbs_jct; } break; default: break; } } Nvtmd = model->BSIM4vtm * model->BSIM4DjctEmissionCoeff; /* if ((here->BSIM4Adeff <= 0.0) && (here->BSIM4Pdeff <= 0.0)) { DrainSatCurrent = 1.0e-14; } v4.7 */ if ((here->BSIM4Adeff <= 0.0) && (here->BSIM4Pdeff <= 0.0)) { DrainSatCurrent = 0.0; } else { DrainSatCurrent = here->BSIM4Adeff * model->BSIM4DjctTempSatCurDensity + here->BSIM4Pdeff * model->BSIM4DjctSidewallTempSatCurDensity + pParam->BSIM4weffCJ * here->BSIM4nf * model->BSIM4DjctGateSidewallTempSatCurDensity; } if (DrainSatCurrent <= 0.0) { here->BSIM4gbd = ckt->CKTgmin; here->BSIM4cbd = here->BSIM4gbd * vbd_jct; } else { switch(model->BSIM4dioMod) { case 0: evbd = exp(vbd_jct / Nvtmd); T1 = model->BSIM4xjbvd * exp(-(model->BSIM4bvd + vbd_jct) / Nvtmd); /* WDLiu: Magic T1 in this form; different from BSIM4 beta. */ here->BSIM4gbd = DrainSatCurrent * (evbd + T1) / Nvtmd + ckt->CKTgmin; here->BSIM4cbd = DrainSatCurrent * (evbd + here->BSIM4XExpBVD - T1 - 1.0) + ckt->CKTgmin * vbd_jct; break; case 1: T2 = vbd_jct / Nvtmd; if (T2 < -EXP_THRESHOLD) { here->BSIM4gbd = ckt->CKTgmin; here->BSIM4cbd = DrainSatCurrent * (MIN_EXP - 1.0) + ckt->CKTgmin * vbd_jct; } else if (vbd_jct <= here->BSIM4vjdmFwd) { evbd = exp(T2); here->BSIM4gbd = DrainSatCurrent * evbd / Nvtmd + ckt->CKTgmin; here->BSIM4cbd = DrainSatCurrent * (evbd - 1.0) + ckt->CKTgmin * vbd_jct; } else { T0 = here->BSIM4IVjdmFwd / Nvtmd; here->BSIM4gbd = T0 + ckt->CKTgmin; here->BSIM4cbd = here->BSIM4IVjdmFwd - DrainSatCurrent + T0 * (vbd_jct - here->BSIM4vjdmFwd) + ckt->CKTgmin * vbd_jct; } break; case 2: if (vbd_jct < here->BSIM4vjdmRev) { T0 = vbd_jct / Nvtmd; if (T0 < -EXP_THRESHOLD) { evbd = MIN_EXP; devbd_dvb = 0.0; } else { evbd = exp(T0); devbd_dvb = evbd / Nvtmd; } T1 = evbd - 1.0; T2 = here->BSIM4IVjdmRev + here->BSIM4DslpRev * (vbd_jct - here->BSIM4vjdmRev); here->BSIM4gbd = devbd_dvb * T2 + T1 * here->BSIM4DslpRev + ckt->CKTgmin; here->BSIM4cbd = T1 * T2 + ckt->CKTgmin * vbd_jct; } else if (vbd_jct <= here->BSIM4vjdmFwd) { T0 = vbd_jct / Nvtmd; if (T0 < -EXP_THRESHOLD) { evbd = MIN_EXP; devbd_dvb = 0.0; } else { evbd = exp(T0); devbd_dvb = evbd / Nvtmd; } T1 = (model->BSIM4bvd + vbd_jct) / Nvtmd; if (T1 > EXP_THRESHOLD) { T2 = MIN_EXP; T3 = 0.0; } else { T2 = exp(-T1); T3 = -T2 /Nvtmd; } here->BSIM4gbd = DrainSatCurrent * (devbd_dvb - model->BSIM4xjbvd * T3) + ckt->CKTgmin; here->BSIM4cbd = DrainSatCurrent * (evbd + here->BSIM4XExpBVD - 1.0 - model->BSIM4xjbvd * T2) + ckt->CKTgmin * vbd_jct; } else { here->BSIM4gbd = here->BSIM4DslpFwd + ckt->CKTgmin; here->BSIM4cbd = here->BSIM4IVjdmFwd + here->BSIM4DslpFwd * (vbd_jct - here->BSIM4vjdmFwd) + ckt->CKTgmin * vbd_jct; } break; default: break; } } /* trap-assisted tunneling and recombination current for reverse bias */ Nvtmrssws = model->BSIM4vtm0 * model->BSIM4njtsswstemp; Nvtmrsswgs = model->BSIM4vtm0 * model->BSIM4njtsswgstemp; Nvtmrss = model->BSIM4vtm0 * model->BSIM4njtsstemp; Nvtmrsswd = model->BSIM4vtm0 * model->BSIM4njtsswdtemp; Nvtmrsswgd = model->BSIM4vtm0 * model->BSIM4njtsswgdtemp; Nvtmrsd = model->BSIM4vtm0 * model->BSIM4njtsdtemp; if ((model->BSIM4vtss - vbs_jct) < (model->BSIM4vtss * 1e-3)) { T9 = 1.0e3; T0 = - vbs_jct / Nvtmrss * T9; DEXP(T0, T1, T10); dT1_dVb = T10 / Nvtmrss * T9; } else { T9 = 1.0 / (model->BSIM4vtss - vbs_jct); T0 = -vbs_jct / Nvtmrss * model->BSIM4vtss * T9; dT0_dVb = model->BSIM4vtss / Nvtmrss * (T9 + vbs_jct * T9 * T9) ; DEXP(T0, T1, T10); dT1_dVb = T10 * dT0_dVb; } if ((model->BSIM4vtsd - vbd_jct) < (model->BSIM4vtsd * 1e-3) ) { T9 = 1.0e3; T0 = -vbd_jct / Nvtmrsd * T9; DEXP(T0, T2, T10); dT2_dVb = T10 / Nvtmrsd * T9; } else { T9 = 1.0 / (model->BSIM4vtsd - vbd_jct); T0 = -vbd_jct / Nvtmrsd * model->BSIM4vtsd * T9; dT0_dVb = model->BSIM4vtsd / Nvtmrsd * (T9 + vbd_jct * T9 * T9) ; DEXP(T0, T2, T10); dT2_dVb = T10 * dT0_dVb; } if ((model->BSIM4vtssws - vbs_jct) < (model->BSIM4vtssws * 1e-3) ) { T9 = 1.0e3; T0 = -vbs_jct / Nvtmrssws * T9; DEXP(T0, T3, T10); dT3_dVb = T10 / Nvtmrssws * T9; } else { T9 = 1.0 / (model->BSIM4vtssws - vbs_jct); T0 = -vbs_jct / Nvtmrssws * model->BSIM4vtssws * T9; dT0_dVb = model->BSIM4vtssws / Nvtmrssws * (T9 + vbs_jct * T9 * T9) ; DEXP(T0, T3, T10); dT3_dVb = T10 * dT0_dVb; } if ((model->BSIM4vtsswd - vbd_jct) < (model->BSIM4vtsswd * 1e-3) ) { T9 = 1.0e3; T0 = -vbd_jct / Nvtmrsswd * T9; DEXP(T0, T4, T10); dT4_dVb = T10 / Nvtmrsswd * T9; } else { T9 = 1.0 / (model->BSIM4vtsswd - vbd_jct); T0 = -vbd_jct / Nvtmrsswd * model->BSIM4vtsswd * T9; dT0_dVb = model->BSIM4vtsswd / Nvtmrsswd * (T9 + vbd_jct * T9 * T9) ; DEXP(T0, T4, T10); dT4_dVb = T10 * dT0_dVb; } if ((model->BSIM4vtsswgs - vbs_jct) < (model->BSIM4vtsswgs * 1e-3) ) { T9 = 1.0e3; T0 = -vbs_jct / Nvtmrsswgs * T9; DEXP(T0, T5, T10); dT5_dVb = T10 / Nvtmrsswgs * T9; } else { T9 = 1.0 / (model->BSIM4vtsswgs - vbs_jct); T0 = -vbs_jct / Nvtmrsswgs * model->BSIM4vtsswgs * T9; dT0_dVb = model->BSIM4vtsswgs / Nvtmrsswgs * (T9 + vbs_jct * T9 * T9) ; DEXP(T0, T5, T10); dT5_dVb = T10 * dT0_dVb; } if ((model->BSIM4vtsswgd - vbd_jct) < (model->BSIM4vtsswgd * 1e-3) ) { T9 = 1.0e3; T0 = -vbd_jct / Nvtmrsswgd * T9; DEXP(T0, T6, T10); dT6_dVb = T10 / Nvtmrsswgd * T9; } else { T9 = 1.0 / (model->BSIM4vtsswgd - vbd_jct); T0 = -vbd_jct / Nvtmrsswgd * model->BSIM4vtsswgd * T9; dT0_dVb = model->BSIM4vtsswgd / Nvtmrsswgd * (T9 + vbd_jct * T9 * T9) ; DEXP(T0, T6, T10); dT6_dVb = T10 * dT0_dVb; } here->BSIM4gbs += here->BSIM4SjctTempRevSatCur * dT1_dVb + here->BSIM4SswTempRevSatCur * dT3_dVb + here->BSIM4SswgTempRevSatCur * dT5_dVb; here->BSIM4cbs -= here->BSIM4SjctTempRevSatCur * (T1 - 1.0) + here->BSIM4SswTempRevSatCur * (T3 - 1.0) + here->BSIM4SswgTempRevSatCur * (T5 - 1.0); here->BSIM4gbd += here->BSIM4DjctTempRevSatCur * dT2_dVb + here->BSIM4DswTempRevSatCur * dT4_dVb + here->BSIM4DswgTempRevSatCur * dT6_dVb; here->BSIM4cbd -= here->BSIM4DjctTempRevSatCur * (T2 - 1.0) + here->BSIM4DswTempRevSatCur * (T4 - 1.0) + here->BSIM4DswgTempRevSatCur * (T6 - 1.0); /* End of diode DC model */ if (vds >= 0.0) { here->BSIM4mode = 1; Vds = vds; Vgs = vgs; Vbs = vbs; Vdb = vds - vbs; /* WDLiu: for GIDL */ } else { here->BSIM4mode = -1; Vds = -vds; Vgs = vgd; Vbs = vbd; Vdb = -vbs; } /* dunga */ if(model->BSIM4mtrlMod) { epsrox = 3.9; toxe = model->BSIM4eot; epssub = EPS0 * model->BSIM4epsrsub; } else { epsrox = model->BSIM4epsrox; toxe = model->BSIM4toxe; epssub = EPSSI; } T0 = Vbs - here->BSIM4vbsc - 0.001; T1 = sqrt(T0 * T0 - 0.004 * here->BSIM4vbsc); if (T0 >= 0.0) { Vbseff = here->BSIM4vbsc + 0.5 * (T0 + T1); dVbseff_dVb = 0.5 * (1.0 + T0 / T1); } else { T2 = -0.002 / (T1 - T0); Vbseff = here->BSIM4vbsc * (1.0 + T2); dVbseff_dVb = T2 * here->BSIM4vbsc / T1; } /* JX: Correction to forward body bias */ T9 = 0.95 * pParam->BSIM4phi; T0 = T9 - Vbseff - 0.001; T1 = sqrt(T0 * T0 + 0.004 * T9); Vbseff = T9 - 0.5 * (T0 + T1); dVbseff_dVb *= 0.5 * (1.0 + T0 / T1); Phis = pParam->BSIM4phi - Vbseff; dPhis_dVb = -1.0; sqrtPhis = sqrt(Phis); dsqrtPhis_dVb = -0.5 / sqrtPhis; Xdep = pParam->BSIM4Xdep0 * sqrtPhis / pParam->BSIM4sqrtPhi; dXdep_dVb = (pParam->BSIM4Xdep0 / pParam->BSIM4sqrtPhi) * dsqrtPhis_dVb; Leff = pParam->BSIM4leff; Vtm = model->BSIM4vtm; Vtm0 = model->BSIM4vtm0; /* Vth Calculation */ T3 = sqrt(Xdep); V0 = pParam->BSIM4vbi - pParam->BSIM4phi; T0 = pParam->BSIM4dvt2 * Vbseff; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->BSIM4dvt2; } else { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->BSIM4dvt2 * T4 * T4; } lt1 = model->BSIM4factor1 * T3 * T1; dlt1_dVb = model->BSIM4factor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * T2); T0 = pParam->BSIM4dvt2w * Vbseff; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->BSIM4dvt2w; } else { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->BSIM4dvt2w * T4 * T4; } ltw = model->BSIM4factor1 * T3 * T1; dltw_dVb = model->BSIM4factor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * T2); T0 = pParam->BSIM4dvt1 * Leff / lt1; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; Theta0 = T1 / T4; dT1_dVb = -T0 * T1 * dlt1_dVb / lt1; dTheta0_dVb = dT1_dVb * (T4 - 2.0 * T1 * (T2 + MIN_EXP)) / T4 / T4; } else { Theta0 = 1.0 / (MAX_EXP - 2.0); /* 3.0 * MIN_EXP omitted */ dTheta0_dVb = 0.0; } here->BSIM4thetavth = pParam->BSIM4dvt0 * Theta0; Delt_vth = here->BSIM4thetavth * V0; dDelt_vth_dVb = pParam->BSIM4dvt0 * dTheta0_dVb * V0; T0 = pParam->BSIM4dvt1w * pParam->BSIM4weff * Leff / ltw; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; T5 = T1 / T4; dT1_dVb = -T0 * T1 * dltw_dVb / ltw; dT5_dVb = dT1_dVb * (T4 - 2.0 * T1 * (T2 + MIN_EXP)) / T4 / T4; } else { T5 = 1.0 / (MAX_EXP - 2.0); /* 3.0 * MIN_EXP omitted */ dT5_dVb = 0.0; } T0 = pParam->BSIM4dvt0w * T5; T2 = T0 * V0; dT2_dVb = pParam->BSIM4dvt0w * dT5_dVb * V0; TempRatio = ckt->CKTtemp / model->BSIM4tnom - 1.0; T0 = sqrt(1.0 + pParam->BSIM4lpe0 / Leff); T1 = pParam->BSIM4k1ox * (T0 - 1.0) * pParam->BSIM4sqrtPhi + (pParam->BSIM4kt1 + pParam->BSIM4kt1l / Leff + pParam->BSIM4kt2 * Vbseff) * TempRatio; Vth_NarrowW = toxe * pParam->BSIM4phi / (pParam->BSIM4weff + pParam->BSIM4w0); T3 = here->BSIM4eta0 + pParam->BSIM4etab * Vbseff; if (T3 < 1.0e-4) { T9 = 1.0 / (3.0 - 2.0e4 * T3); T3 = (2.0e-4 - T3) * T9; T4 = T9 * T9; } else { T4 = 1.0; } dDIBL_Sft_dVd = T3 * pParam->BSIM4theta0vb0; DIBL_Sft = dDIBL_Sft_dVd * Vds; Lpe_Vb = sqrt(1.0 + pParam->BSIM4lpeb / Leff); Vth = model->BSIM4type * here->BSIM4vth0 + (pParam->BSIM4k1ox * sqrtPhis - pParam->BSIM4k1 * pParam->BSIM4sqrtPhi) * Lpe_Vb - here->BSIM4k2ox * Vbseff - Delt_vth - T2 + (pParam->BSIM4k3 + pParam->BSIM4k3b * Vbseff) * Vth_NarrowW + T1 - DIBL_Sft; dVth_dVb = Lpe_Vb * pParam->BSIM4k1ox * dsqrtPhis_dVb - here->BSIM4k2ox - dDelt_vth_dVb - dT2_dVb + pParam->BSIM4k3b * Vth_NarrowW - pParam->BSIM4etab * Vds * pParam->BSIM4theta0vb0 * T4 + pParam->BSIM4kt2 * TempRatio; dVth_dVd = -dDIBL_Sft_dVd; /* Calculate n */ tmp1 = epssub / Xdep; here->BSIM4nstar = model->BSIM4vtm / Charge_q * (model->BSIM4coxe + tmp1 + pParam->BSIM4cit); tmp2 = pParam->BSIM4nfactor * tmp1; tmp3 = pParam->BSIM4cdsc + pParam->BSIM4cdscb * Vbseff + pParam->BSIM4cdscd * Vds; tmp4 = (tmp2 + tmp3 * Theta0 + pParam->BSIM4cit) / model->BSIM4coxe; if (tmp4 >= -0.5) { n = 1.0 + tmp4; dn_dVb = (-tmp2 / Xdep * dXdep_dVb + tmp3 * dTheta0_dVb + pParam->BSIM4cdscb * Theta0) / model->BSIM4coxe; dn_dVd = pParam->BSIM4cdscd * Theta0 / model->BSIM4coxe; } else { T0 = 1.0 / (3.0 + 8.0 * tmp4); n = (1.0 + 3.0 * tmp4) * T0; T0 *= T0; dn_dVb = (-tmp2 / Xdep * dXdep_dVb + tmp3 * dTheta0_dVb + pParam->BSIM4cdscb * Theta0) / model->BSIM4coxe * T0; dn_dVd = pParam->BSIM4cdscd * Theta0 / model->BSIM4coxe * T0; } /* Vth correction for Pocket implant */ if (pParam->BSIM4dvtp0 > 0.0) { T0 = -pParam->BSIM4dvtp1 * Vds; if (T0 < -EXP_THRESHOLD) { T2 = MIN_EXP; dT2_dVd = 0.0; } else { T2 = exp(T0); dT2_dVd = -pParam->BSIM4dvtp1 * T2; } T3 = Leff + pParam->BSIM4dvtp0 * (1.0 + T2); dT3_dVd = pParam->BSIM4dvtp0 * dT2_dVd; if (model->BSIM4tempMod < 2) { T4 = Vtm * log(Leff / T3); dT4_dVd = -Vtm * dT3_dVd / T3; } else { T4 = model->BSIM4vtm0 * log(Leff / T3); dT4_dVd = -model->BSIM4vtm0 * dT3_dVd / T3; } dDITS_Sft_dVd = dn_dVd * T4 + n * dT4_dVd; dDITS_Sft_dVb = T4 * dn_dVb; Vth -= n * T4; dVth_dVd -= dDITS_Sft_dVd; dVth_dVb -= dDITS_Sft_dVb; } /* v4.7 DITS_SFT2 */ if ((pParam->BSIM4dvtp4 == 0.0) || (pParam->BSIM4dvtp2factor == 0.0)) { T0 = 0.0; DITS_Sft2 = 0.0; } else { //T0 = exp(2.0 * pParam->BSIM4dvtp4 * Vds); /* beta code */ T1 = 2.0 * pParam->BSIM4dvtp4 * Vds; DEXP(T1, T0, T10); DITS_Sft2 = pParam->BSIM4dvtp2factor * (T0-1) / (T0+1); //dDITS_Sft2_dVd = pParam->BSIM4dvtp2factor * pParam->BSIM4dvtp4 * 4.0 * T0 / ((T0+1) * (T0+1)); /* beta code */ dDITS_Sft2_dVd = pParam->BSIM4dvtp2factor * pParam->BSIM4dvtp4 * 4.0 * T10 / ((T0+1) * (T0+1)); Vth -= DITS_Sft2; dVth_dVd -= dDITS_Sft2_dVd; } here->BSIM4von = Vth; /* Poly Gate Si Depletion Effect */ T0 = here->BSIM4vfb + pParam->BSIM4phi; if(model->BSIM4mtrlMod == 0) T1 = EPSSI; else T1 = model->BSIM4epsrgate * EPS0; BSIM4polyDepletion(T0, pParam->BSIM4ngate, T1, model->BSIM4coxe, vgs, &vgs_eff, &dvgs_eff_dvg); BSIM4polyDepletion(T0, pParam->BSIM4ngate, T1, model->BSIM4coxe, vgd, &vgd_eff, &dvgd_eff_dvg); if(here->BSIM4mode>0) { Vgs_eff = vgs_eff; dVgs_eff_dVg = dvgs_eff_dvg; } else { Vgs_eff = vgd_eff; dVgs_eff_dVg = dvgd_eff_dvg; } here->BSIM4vgs_eff = vgs_eff; here->BSIM4vgd_eff = vgd_eff; here->BSIM4dvgs_eff_dvg = dvgs_eff_dvg; here->BSIM4dvgd_eff_dvg = dvgd_eff_dvg; Vgst = Vgs_eff - Vth; /* Calculate Vgsteff */ T0 = n * Vtm; T1 = pParam->BSIM4mstar * Vgst; T2 = T1 / T0; if (T2 > EXP_THRESHOLD) { T10 = T1; dT10_dVg = pParam->BSIM4mstar * dVgs_eff_dVg; dT10_dVd = -dVth_dVd * pParam->BSIM4mstar; dT10_dVb = -dVth_dVb * pParam->BSIM4mstar; } else if (T2 < -EXP_THRESHOLD) { T10 = Vtm * log(1.0 + MIN_EXP); dT10_dVg = 0.0; dT10_dVd = T10 * dn_dVd; dT10_dVb = T10 * dn_dVb; T10 *= n; } else { ExpVgst = exp(T2); T3 = Vtm * log(1.0 + ExpVgst); T10 = n * T3; dT10_dVg = pParam->BSIM4mstar * ExpVgst / (1.0 + ExpVgst); dT10_dVb = T3 * dn_dVb - dT10_dVg * (dVth_dVb + Vgst * dn_dVb / n); dT10_dVd = T3 * dn_dVd - dT10_dVg * (dVth_dVd + Vgst * dn_dVd / n); dT10_dVg *= dVgs_eff_dVg; } T1 = pParam->BSIM4voffcbn - (1.0 - pParam->BSIM4mstar) * Vgst; T2 = T1 / T0; if (T2 < -EXP_THRESHOLD) { T3 = model->BSIM4coxe * MIN_EXP / pParam->BSIM4cdep0; T9 = pParam->BSIM4mstar + T3 * n; dT9_dVg = 0.0; dT9_dVd = dn_dVd * T3; dT9_dVb = dn_dVb * T3; } else if (T2 > EXP_THRESHOLD) { T3 = model->BSIM4coxe * MAX_EXP / pParam->BSIM4cdep0; T9 = pParam->BSIM4mstar + T3 * n; dT9_dVg = 0.0; dT9_dVd = dn_dVd * T3; dT9_dVb = dn_dVb * T3; } else { ExpVgst = exp(T2); T3 = model->BSIM4coxe / pParam->BSIM4cdep0; T4 = T3 * ExpVgst; T5 = T1 * T4 / T0; T9 = pParam->BSIM4mstar + n * T4; dT9_dVg = T3 * (pParam->BSIM4mstar - 1.0) * ExpVgst / Vtm; dT9_dVb = T4 * dn_dVb - dT9_dVg * dVth_dVb - T5 * dn_dVb; dT9_dVd = T4 * dn_dVd - dT9_dVg * dVth_dVd - T5 * dn_dVd; dT9_dVg *= dVgs_eff_dVg; } here->BSIM4Vgsteff = Vgsteff = T10 / T9; T11 = T9 * T9; dVgsteff_dVg = (T9 * dT10_dVg - T10 * dT9_dVg) / T11; dVgsteff_dVd = (T9 * dT10_dVd - T10 * dT9_dVd) / T11; dVgsteff_dVb = (T9 * dT10_dVb - T10 * dT9_dVb) / T11; /* Calculate Effective Channel Geometry */ T9 = sqrtPhis - pParam->BSIM4sqrtPhi; Weff = pParam->BSIM4weff - 2.0 * (pParam->BSIM4dwg * Vgsteff + pParam->BSIM4dwb * T9); dWeff_dVg = -2.0 * pParam->BSIM4dwg; dWeff_dVb = -2.0 * pParam->BSIM4dwb * dsqrtPhis_dVb; if (Weff < 2.0e-8) /* to avoid the discontinuity problem due to Weff*/ { T0 = 1.0 / (6.0e-8 - 2.0 * Weff); Weff = 2.0e-8 * (4.0e-8 - Weff) * T0; T0 *= T0 * 4.0e-16; dWeff_dVg *= T0; dWeff_dVb *= T0; } if (model->BSIM4rdsMod == 1) Rds = dRds_dVg = dRds_dVb = 0.0; else { T0 = 1.0 + pParam->BSIM4prwg * Vgsteff; dT0_dVg = -pParam->BSIM4prwg / T0 / T0; T1 = pParam->BSIM4prwb * T9; dT1_dVb = pParam->BSIM4prwb * dsqrtPhis_dVb; T2 = 1.0 / T0 + T1; T3 = T2 + sqrt(T2 * T2 + 0.01); /* 0.01 = 4.0 * 0.05 * 0.05 */ dT3_dVg = 1.0 + T2 / (T3 - T2); dT3_dVb = dT3_dVg * dT1_dVb; dT3_dVg *= dT0_dVg; T4 = pParam->BSIM4rds0 * 0.5; Rds = pParam->BSIM4rdswmin + T3 * T4; dRds_dVg = T4 * dT3_dVg; dRds_dVb = T4 * dT3_dVb; if (Rds > 0.0) here->BSIM4grdsw = 1.0 / Rds* here->BSIM4nf; /*4.6.2*/ else here->BSIM4grdsw = 0.0; } /* Calculate Abulk */ T9 = 0.5 * pParam->BSIM4k1ox * Lpe_Vb / sqrtPhis; T1 = T9 + here->BSIM4k2ox - pParam->BSIM4k3b * Vth_NarrowW; dT1_dVb = -T9 / sqrtPhis * dsqrtPhis_dVb; T9 = sqrt(pParam->BSIM4xj * Xdep); tmp1 = Leff + 2.0 * T9; T5 = Leff / tmp1; tmp2 = pParam->BSIM4a0 * T5; tmp3 = pParam->BSIM4weff + pParam->BSIM4b1; tmp4 = pParam->BSIM4b0 / tmp3; T2 = tmp2 + tmp4; dT2_dVb = -T9 / tmp1 / Xdep * dXdep_dVb; T6 = T5 * T5; T7 = T5 * T6; Abulk0 = 1.0 + T1 * T2; dAbulk0_dVb = T1 * tmp2 * dT2_dVb + T2 * dT1_dVb; T8 = pParam->BSIM4ags * pParam->BSIM4a0 * T7; dAbulk_dVg = -T1 * T8; Abulk = Abulk0 + dAbulk_dVg * Vgsteff; dAbulk_dVb = dAbulk0_dVb - T8 * Vgsteff * (dT1_dVb + 3.0 * T1 * dT2_dVb); if (Abulk0 < 0.1) /* added to avoid the problems caused by Abulk0 */ { T9 = 1.0 / (3.0 - 20.0 * Abulk0); Abulk0 = (0.2 - Abulk0) * T9; dAbulk0_dVb *= T9 * T9; } if (Abulk < 0.1) { T9 = 1.0 / (3.0 - 20.0 * Abulk); Abulk = (0.2 - Abulk) * T9; T10 = T9 * T9; dAbulk_dVb *= T10; dAbulk_dVg *= T10; } here->BSIM4Abulk = Abulk; T2 = pParam->BSIM4keta * Vbseff; if (T2 >= -0.9) { T0 = 1.0 / (1.0 + T2); dT0_dVb = -pParam->BSIM4keta * T0 * T0; } else { T1 = 1.0 / (0.8 + T2); T0 = (17.0 + 20.0 * T2) * T1; dT0_dVb = -pParam->BSIM4keta * T1 * T1; } dAbulk_dVg *= T0; dAbulk_dVb = dAbulk_dVb * T0 + Abulk * dT0_dVb; dAbulk0_dVb = dAbulk0_dVb * T0 + Abulk0 * dT0_dVb; Abulk *= T0; Abulk0 *= T0; /* Mobility calculation */ if (model->BSIM4mtrlMod && model->BSIM4mtrlCompatMod == 0) T14 = 2.0 * model->BSIM4type *(model->BSIM4phig - model->BSIM4easub - 0.5*model->BSIM4Eg0 + 0.45); else T14 = 0.0; if (model->BSIM4mobMod == 0) { T0 = Vgsteff + Vth + Vth - T14; T2 = pParam->BSIM4ua + pParam->BSIM4uc * Vbseff; T3 = T0 / toxe; T12 = sqrt(Vth * Vth + 0.0001); T9 = 1.0/(Vgsteff + 2*T12); T10 = T9*toxe; T8 = pParam->BSIM4ud * T10 * T10 * Vth; T6 = T8 * Vth; T5 = T3 * (T2 + pParam->BSIM4ub * T3) + T6; T7 = - 2.0 * T6 * T9; T11 = T7 * Vth/T12; dDenomi_dVg = (T2 + 2.0 * pParam->BSIM4ub * T3) / toxe; T13 = 2.0 * (dDenomi_dVg + T11 + T8); dDenomi_dVd = T13 * dVth_dVd; dDenomi_dVb = T13 * dVth_dVb + pParam->BSIM4uc * T3; dDenomi_dVg+= T7; } else if (model->BSIM4mobMod == 1) { T0 = Vgsteff + Vth + Vth - T14; T2 = 1.0 + pParam->BSIM4uc * Vbseff; T3 = T0 / toxe; T4 = T3 * (pParam->BSIM4ua + pParam->BSIM4ub * T3); T12 = sqrt(Vth * Vth + 0.0001); T9 = 1.0/(Vgsteff + 2*T12); T10 = T9*toxe; T8 = pParam->BSIM4ud * T10 * T10 * Vth; T6 = T8 * Vth; T5 = T4 * T2 + T6; T7 = - 2.0 * T6 * T9; T11 = T7 * Vth/T12; dDenomi_dVg = (pParam->BSIM4ua + 2.0 * pParam->BSIM4ub * T3) * T2 / toxe; T13 = 2.0 * (dDenomi_dVg + T11 + T8); dDenomi_dVd = T13 * dVth_dVd; dDenomi_dVb = T13 * dVth_dVb + pParam->BSIM4uc * T4; dDenomi_dVg+= T7; } else if (model->BSIM4mobMod == 2) { T0 = (Vgsteff + here->BSIM4vtfbphi1) / toxe; T1 = exp(pParam->BSIM4eu * log(T0)); dT1_dVg = T1 * pParam->BSIM4eu / T0 / toxe; T2 = pParam->BSIM4ua + pParam->BSIM4uc * Vbseff; T12 = sqrt(Vth * Vth + 0.0001); T9 = 1.0/(Vgsteff + 2*T12); T10 = T9*toxe; T8 = pParam->BSIM4ud * T10 * T10 * Vth; T6 = T8 * Vth; T5 = T1 * T2 + T6; T7 = - 2.0 * T6 * T9; T11 = T7 * Vth/T12; dDenomi_dVg = T2 * dT1_dVg + T7; T13 = 2.0 * (T11 + T8); dDenomi_dVd = T13 * dVth_dVd; dDenomi_dVb = T13 * dVth_dVb + T1 * pParam->BSIM4uc; } else if (model->BSIM4mobMod == 4) /* Synopsys 08/30/2013 add */ { T0 = Vgsteff + here->BSIM4vtfbphi1 - T14; T2 = pParam->BSIM4ua + pParam->BSIM4uc * Vbseff; T3 = T0 / toxe; T12 = sqrt(here->BSIM4vtfbphi1*here->BSIM4vtfbphi1 + 0.0001); T9 = 1.0/(Vgsteff + 2*T12); T10 = T9*toxe; T8 = pParam->BSIM4ud * T10 * T10 * here->BSIM4vtfbphi1; T6 = T8 * here->BSIM4vtfbphi1; T5 = T3 * (T2 + pParam->BSIM4ub * T3) + T6; T7 = - 2.0 * T6 * T9; dDenomi_dVg = (T2 + 2.0 * pParam->BSIM4ub * T3) / toxe; dDenomi_dVd = 0.0; dDenomi_dVb = pParam->BSIM4uc * T3; dDenomi_dVg+= T7; } else if (model->BSIM4mobMod == 5) /* Synopsys 08/30/2013 add */ { T0 = Vgsteff + here->BSIM4vtfbphi1 - T14; T2 = 1.0 + pParam->BSIM4uc * Vbseff; T3 = T0 / toxe; T4 = T3 * (pParam->BSIM4ua + pParam->BSIM4ub * T3); T12 = sqrt(here->BSIM4vtfbphi1 * here->BSIM4vtfbphi1 + 0.0001); T9 = 1.0/(Vgsteff + 2*T12); T10 = T9*toxe; T8 = pParam->BSIM4ud * T10 * T10 * here->BSIM4vtfbphi1; T6 = T8 * here->BSIM4vtfbphi1; T5 = T4 * T2 + T6; T7 = - 2.0 * T6 * T9; dDenomi_dVg = (pParam->BSIM4ua + 2.0 * pParam->BSIM4ub * T3) * T2 / toxe; dDenomi_dVd = 0.0; dDenomi_dVb = pParam->BSIM4uc * T4; dDenomi_dVg+= T7; } else if (model->BSIM4mobMod == 6) /* Synopsys 08/30/2013 modify */ { T0 = (Vgsteff + here->BSIM4vtfbphi1) / toxe; T1 = exp(pParam->BSIM4eu * log(T0)); dT1_dVg = T1 * pParam->BSIM4eu / T0 / toxe; T2 = pParam->BSIM4ua + pParam->BSIM4uc * Vbseff; T12 = sqrt(here->BSIM4vtfbphi1 * here->BSIM4vtfbphi1 + 0.0001); T9 = 1.0/(Vgsteff + 2*T12); T10 = T9*toxe; T8 = pParam->BSIM4ud * T10 * T10 * here->BSIM4vtfbphi1; T6 = T8 * here->BSIM4vtfbphi1; T5 = T1 * T2 + T6; T7 = - 2.0 * T6 * T9; dDenomi_dVg = T2 * dT1_dVg + T7; dDenomi_dVd = 0; dDenomi_dVb = T1 * pParam->BSIM4uc; } /*high K mobility*/ else { /*univsersal mobility*/ T0 = (Vgsteff + here->BSIM4vtfbphi1)* 1.0e-8 / toxe/6.0; T1 = exp(pParam->BSIM4eu * log(T0)); dT1_dVg = T1 * pParam->BSIM4eu * 1.0e-8/ T0 / toxe/6.0; T2 = pParam->BSIM4ua + pParam->BSIM4uc * Vbseff; /*Coulombic*/ VgsteffVth = pParam->BSIM4VgsteffVth; T10 = exp(pParam->BSIM4ucs * log(0.5 + 0.5 * Vgsteff/VgsteffVth)); T11 = pParam->BSIM4ud/T10; dT11_dVg = - 0.5 * pParam->BSIM4ucs * T11 /(0.5 + 0.5*Vgsteff/VgsteffVth)/VgsteffVth; dDenomi_dVg = T2 * dT1_dVg + dT11_dVg; dDenomi_dVd = 0.0; dDenomi_dVb = T1 * pParam->BSIM4uc; T5 = T1 * T2 + T11; } if (T5 >= -0.8) { Denomi = 1.0 + T5; } else { T9 = 1.0 / (7.0 + 10.0 * T5); Denomi = (0.6 + T5) * T9; T9 *= T9; dDenomi_dVg *= T9; dDenomi_dVd *= T9; dDenomi_dVb *= T9; } here->BSIM4ueff = ueff = here->BSIM4u0temp / Denomi; T9 = -ueff / Denomi; dueff_dVg = T9 * dDenomi_dVg; dueff_dVd = T9 * dDenomi_dVd; dueff_dVb = T9 * dDenomi_dVb; /* Saturation Drain Voltage Vdsat */ WVCox = Weff * here->BSIM4vsattemp * model->BSIM4coxe; WVCoxRds = WVCox * Rds; Esat = 2.0 * here->BSIM4vsattemp / ueff; here->BSIM4EsatL = EsatL = Esat * Leff; T0 = -EsatL /ueff; dEsatL_dVg = T0 * dueff_dVg; dEsatL_dVd = T0 * dueff_dVd; dEsatL_dVb = T0 * dueff_dVb; /* Sqrt() */ a1 = pParam->BSIM4a1; if (a1 == 0.0) { Lambda = pParam->BSIM4a2; dLambda_dVg = 0.0; } else if (a1 > 0.0) { T0 = 1.0 - pParam->BSIM4a2; T1 = T0 - pParam->BSIM4a1 * Vgsteff - 0.0001; T2 = sqrt(T1 * T1 + 0.0004 * T0); Lambda = pParam->BSIM4a2 + T0 - 0.5 * (T1 + T2); dLambda_dVg = 0.5 * pParam->BSIM4a1 * (1.0 + T1 / T2); } else { T1 = pParam->BSIM4a2 + pParam->BSIM4a1 * Vgsteff - 0.0001; T2 = sqrt(T1 * T1 + 0.0004 * pParam->BSIM4a2); Lambda = 0.5 * (T1 + T2); dLambda_dVg = 0.5 * pParam->BSIM4a1 * (1.0 + T1 / T2); } Vgst2Vtm = Vgsteff + 2.0 * Vtm; if (Rds > 0) { tmp2 = dRds_dVg / Rds + dWeff_dVg / Weff; tmp3 = dRds_dVb / Rds + dWeff_dVb / Weff; } else { tmp2 = dWeff_dVg / Weff; tmp3 = dWeff_dVb / Weff; } if ((Rds == 0.0) && (Lambda == 1.0)) { T0 = 1.0 / (Abulk * EsatL + Vgst2Vtm); tmp1 = 0.0; T1 = T0 * T0; T2 = Vgst2Vtm * T0; T3 = EsatL * Vgst2Vtm; Vdsat = T3 * T0; dT0_dVg = -(Abulk * dEsatL_dVg + EsatL * dAbulk_dVg + 1.0) * T1; dT0_dVd = -(Abulk * dEsatL_dVd) * T1; dT0_dVb = -(Abulk * dEsatL_dVb + dAbulk_dVb * EsatL) * T1; dVdsat_dVg = T3 * dT0_dVg + T2 * dEsatL_dVg + EsatL * T0; dVdsat_dVd = T3 * dT0_dVd + T2 * dEsatL_dVd; dVdsat_dVb = T3 * dT0_dVb + T2 * dEsatL_dVb; } else { tmp1 = dLambda_dVg / (Lambda * Lambda); T9 = Abulk * WVCoxRds; T8 = Abulk * T9; T7 = Vgst2Vtm * T9; T6 = Vgst2Vtm * WVCoxRds; T0 = 2.0 * Abulk * (T9 - 1.0 + 1.0 / Lambda); dT0_dVg = 2.0 * (T8 * tmp2 - Abulk * tmp1 + (2.0 * T9 + 1.0 / Lambda - 1.0) * dAbulk_dVg); dT0_dVb = 2.0 * (T8 * (2.0 / Abulk * dAbulk_dVb + tmp3) + (1.0 / Lambda - 1.0) * dAbulk_dVb); dT0_dVd = 0.0; T1 = Vgst2Vtm * (2.0 / Lambda - 1.0) + Abulk * EsatL + 3.0 * T7; dT1_dVg = (2.0 / Lambda - 1.0) - 2.0 * Vgst2Vtm * tmp1 + Abulk * dEsatL_dVg + EsatL * dAbulk_dVg + 3.0 * (T9 + T7 * tmp2 + T6 * dAbulk_dVg); dT1_dVb = Abulk * dEsatL_dVb + EsatL * dAbulk_dVb + 3.0 * (T6 * dAbulk_dVb + T7 * tmp3); dT1_dVd = Abulk * dEsatL_dVd; T2 = Vgst2Vtm * (EsatL + 2.0 * T6); dT2_dVg = EsatL + Vgst2Vtm * dEsatL_dVg + T6 * (4.0 + 2.0 * Vgst2Vtm * tmp2); dT2_dVb = Vgst2Vtm * (dEsatL_dVb + 2.0 * T6 * tmp3); dT2_dVd = Vgst2Vtm * dEsatL_dVd; T3 = sqrt(T1 * T1 - 2.0 * T0 * T2); Vdsat = (T1 - T3) / T0; dT3_dVg = (T1 * dT1_dVg - 2.0 * (T0 * dT2_dVg + T2 * dT0_dVg)) / T3; dT3_dVd = (T1 * dT1_dVd - 2.0 * (T0 * dT2_dVd + T2 * dT0_dVd)) / T3; dT3_dVb = (T1 * dT1_dVb - 2.0 * (T0 * dT2_dVb + T2 * dT0_dVb)) / T3; dVdsat_dVg = (dT1_dVg - (T1 * dT1_dVg - dT0_dVg * T2 - T0 * dT2_dVg) / T3 - Vdsat * dT0_dVg) / T0; dVdsat_dVb = (dT1_dVb - (T1 * dT1_dVb - dT0_dVb * T2 - T0 * dT2_dVb) / T3 - Vdsat * dT0_dVb) / T0; dVdsat_dVd = (dT1_dVd - (T1 * dT1_dVd - T0 * dT2_dVd) / T3) / T0; } here->BSIM4vdsat = Vdsat; /* Calculate Vdseff */ T1 = Vdsat - Vds - pParam->BSIM4delta; dT1_dVg = dVdsat_dVg; dT1_dVd = dVdsat_dVd - 1.0; dT1_dVb = dVdsat_dVb; T2 = sqrt(T1 * T1 + 4.0 * pParam->BSIM4delta * Vdsat); T0 = T1 / T2; T9 = 2.0 * pParam->BSIM4delta; T3 = T9 / T2; dT2_dVg = T0 * dT1_dVg + T3 * dVdsat_dVg; dT2_dVd = T0 * dT1_dVd + T3 * dVdsat_dVd; dT2_dVb = T0 * dT1_dVb + T3 * dVdsat_dVb; if (T1 >= 0.0) { Vdseff = Vdsat - 0.5 * (T1 + T2); dVdseff_dVg = dVdsat_dVg - 0.5 * (dT1_dVg + dT2_dVg); dVdseff_dVd = dVdsat_dVd - 0.5 * (dT1_dVd + dT2_dVd); dVdseff_dVb = dVdsat_dVb - 0.5 * (dT1_dVb + dT2_dVb); } else { T4 = T9 / (T2 - T1); T5 = 1.0 - T4; T6 = Vdsat * T4 / (T2 - T1); Vdseff = Vdsat * T5; dVdseff_dVg = dVdsat_dVg * T5 + T6 * (dT2_dVg - dT1_dVg); dVdseff_dVd = dVdsat_dVd * T5 + T6 * (dT2_dVd - dT1_dVd); dVdseff_dVb = dVdsat_dVb * T5 + T6 * (dT2_dVb - dT1_dVb); } if (Vds == 0.0) { Vdseff = 0.0; dVdseff_dVg = 0.0; dVdseff_dVb = 0.0; } if (Vdseff > Vds) Vdseff = Vds; diffVds = Vds - Vdseff; here->BSIM4Vdseff = Vdseff; /* Velocity Overshoot */ if((model->BSIM4lambdaGiven) && (model->BSIM4lambda > 0.0) ) { T1 = Leff * ueff; T2 = pParam->BSIM4lambda / T1; T3 = -T2 / T1 * Leff; dT2_dVd = T3 * dueff_dVd; dT2_dVg = T3 * dueff_dVg; dT2_dVb = T3 * dueff_dVb; T5 = 1.0 / (Esat * pParam->BSIM4litl); T4 = -T5 / EsatL; dT5_dVg = dEsatL_dVg * T4; dT5_dVd = dEsatL_dVd * T4; dT5_dVb = dEsatL_dVb * T4; T6 = 1.0 + diffVds * T5; dT6_dVg = dT5_dVg * diffVds - dVdseff_dVg * T5; dT6_dVd = dT5_dVd * diffVds + (1.0 - dVdseff_dVd) * T5; dT6_dVb = dT5_dVb * diffVds - dVdseff_dVb * T5; T7 = 2.0 / (T6 * T6 + 1.0); T8 = 1.0 - T7; T9 = T6 * T7 * T7; dT8_dVg = T9 * dT6_dVg; dT8_dVd = T9 * dT6_dVd; dT8_dVb = T9 * dT6_dVb; T10 = 1.0 + T2 * T8; dT10_dVg = dT2_dVg * T8 + T2 * dT8_dVg; dT10_dVd = dT2_dVd * T8 + T2 * dT8_dVd; dT10_dVb = dT2_dVb * T8 + T2 * dT8_dVb; if(T10 == 1.0) dT10_dVg = dT10_dVd = dT10_dVb = 0.0; dEsatL_dVg *= T10; dEsatL_dVg += EsatL * dT10_dVg; dEsatL_dVd *= T10; dEsatL_dVd += EsatL * dT10_dVd; dEsatL_dVb *= T10; dEsatL_dVb += EsatL * dT10_dVb; EsatL *= T10; Esat = EsatL / Leff; /* bugfix by Wenwei Yang (4.6.4) */ here->BSIM4EsatL = EsatL; } /* Calculate Vasat */ tmp4 = 1.0 - 0.5 * Abulk * Vdsat / Vgst2Vtm; T9 = WVCoxRds * Vgsteff; T8 = T9 / Vgst2Vtm; T0 = EsatL + Vdsat + 2.0 * T9 * tmp4; T7 = 2.0 * WVCoxRds * tmp4; dT0_dVg = dEsatL_dVg + dVdsat_dVg + T7 * (1.0 + tmp2 * Vgsteff) - T8 * (Abulk * dVdsat_dVg - Abulk * Vdsat / Vgst2Vtm + Vdsat * dAbulk_dVg); dT0_dVb = dEsatL_dVb + dVdsat_dVb + T7 * tmp3 * Vgsteff - T8 * (dAbulk_dVb * Vdsat + Abulk * dVdsat_dVb); dT0_dVd = dEsatL_dVd + dVdsat_dVd - T8 * Abulk * dVdsat_dVd; T9 = WVCoxRds * Abulk; T1 = 2.0 / Lambda - 1.0 + T9; dT1_dVg = -2.0 * tmp1 + WVCoxRds * (Abulk * tmp2 + dAbulk_dVg); dT1_dVb = dAbulk_dVb * WVCoxRds + T9 * tmp3; Vasat = T0 / T1; dVasat_dVg = (dT0_dVg - Vasat * dT1_dVg) / T1; dVasat_dVb = (dT0_dVb - Vasat * dT1_dVb) / T1; dVasat_dVd = dT0_dVd / T1; /* Calculate Idl first */ tmp1 = here->BSIM4vtfbphi2; tmp2 = 2.0e8 * here->BSIM4toxp; dT0_dVg = 1.0 / tmp2; T0 = (Vgsteff + tmp1) * dT0_dVg; tmp3 = exp(model->BSIM4bdos * 0.7 * log(T0)); T1 = 1.0 + tmp3; T2 = model->BSIM4bdos * 0.7 * tmp3 / T0; Tcen = model->BSIM4ados * 1.9e-9 / T1; dTcen_dVg = -Tcen * T2 * dT0_dVg / T1; Coxeff = epssub * here->BSIM4coxp / (epssub + here->BSIM4coxp * Tcen); here->BSIM4Coxeff = Coxeff; dCoxeff_dVg = -Coxeff * Coxeff * dTcen_dVg / epssub; CoxeffWovL = Coxeff * Weff / Leff; beta = ueff * CoxeffWovL; T3 = ueff / Leff; dbeta_dVg = CoxeffWovL * dueff_dVg + T3 * (Weff * dCoxeff_dVg + Coxeff * dWeff_dVg); dbeta_dVd = CoxeffWovL * dueff_dVd; dbeta_dVb = CoxeffWovL * dueff_dVb + T3 * Coxeff * dWeff_dVb; here->BSIM4AbovVgst2Vtm = Abulk / Vgst2Vtm; T0 = 1.0 - 0.5 * Vdseff * here->BSIM4AbovVgst2Vtm; dT0_dVg = -0.5 * (Abulk * dVdseff_dVg - Abulk * Vdseff / Vgst2Vtm + Vdseff * dAbulk_dVg) / Vgst2Vtm; dT0_dVd = -0.5 * Abulk * dVdseff_dVd / Vgst2Vtm; dT0_dVb = -0.5 * (Abulk * dVdseff_dVb + dAbulk_dVb * Vdseff) / Vgst2Vtm; fgche1 = Vgsteff * T0; dfgche1_dVg = Vgsteff * dT0_dVg + T0; dfgche1_dVd = Vgsteff * dT0_dVd; dfgche1_dVb = Vgsteff * dT0_dVb; T9 = Vdseff / EsatL; fgche2 = 1.0 + T9; dfgche2_dVg = (dVdseff_dVg - T9 * dEsatL_dVg) / EsatL; dfgche2_dVd = (dVdseff_dVd - T9 * dEsatL_dVd) / EsatL; dfgche2_dVb = (dVdseff_dVb - T9 * dEsatL_dVb) / EsatL; gche = beta * fgche1 / fgche2; dgche_dVg = (beta * dfgche1_dVg + fgche1 * dbeta_dVg - gche * dfgche2_dVg) / fgche2; dgche_dVd = (beta * dfgche1_dVd + fgche1 * dbeta_dVd - gche * dfgche2_dVd) / fgche2; dgche_dVb = (beta * dfgche1_dVb + fgche1 * dbeta_dVb - gche * dfgche2_dVb) / fgche2; T0 = 1.0 + gche * Rds; Idl = gche / T0; T1 = (1.0 - Idl * Rds) / T0; T2 = Idl * Idl; dIdl_dVg = T1 * dgche_dVg - T2 * dRds_dVg; dIdl_dVd = T1 * dgche_dVd; dIdl_dVb = T1 * dgche_dVb - T2 * dRds_dVb; /* Calculate degradation factor due to pocket implant */ if (pParam->BSIM4fprout <= 0.0) { FP = 1.0; dFP_dVg = 0.0; } else { T9 = pParam->BSIM4fprout * sqrt(Leff) / Vgst2Vtm; FP = 1.0 / (1.0 + T9); dFP_dVg = FP * FP * T9 / Vgst2Vtm; } /* Calculate VACLM */ T8 = pParam->BSIM4pvag / EsatL; T9 = T8 * Vgsteff; if (T9 > -0.9) { PvagTerm = 1.0 + T9; dPvagTerm_dVg = T8 * (1.0 - Vgsteff * dEsatL_dVg / EsatL); dPvagTerm_dVb = -T9 * dEsatL_dVb / EsatL; dPvagTerm_dVd = -T9 * dEsatL_dVd / EsatL; } else { T4 = 1.0 / (17.0 + 20.0 * T9); PvagTerm = (0.8 + T9) * T4; T4 *= T4; dPvagTerm_dVg = T8 * (1.0 - Vgsteff * dEsatL_dVg / EsatL) * T4; T9 *= T4 / EsatL; dPvagTerm_dVb = -T9 * dEsatL_dVb; dPvagTerm_dVd = -T9 * dEsatL_dVd; } if ((pParam->BSIM4pclm > MIN_EXP) && (diffVds > 1.0e-10)) { T0 = 1.0 + Rds * Idl; dT0_dVg = dRds_dVg * Idl + Rds * dIdl_dVg; dT0_dVd = Rds * dIdl_dVd; dT0_dVb = dRds_dVb * Idl + Rds * dIdl_dVb; T2 = Vdsat / Esat; T1 = Leff + T2; dT1_dVg = (dVdsat_dVg - T2 * dEsatL_dVg / Leff) / Esat; dT1_dVd = (dVdsat_dVd - T2 * dEsatL_dVd / Leff) / Esat; dT1_dVb = (dVdsat_dVb - T2 * dEsatL_dVb / Leff) / Esat; Cclm = FP * PvagTerm * T0 * T1 / (pParam->BSIM4pclm * pParam->BSIM4litl); dCclm_dVg = Cclm * (dFP_dVg / FP + dPvagTerm_dVg / PvagTerm + dT0_dVg / T0 + dT1_dVg / T1); dCclm_dVb = Cclm * (dPvagTerm_dVb / PvagTerm + dT0_dVb / T0 + dT1_dVb / T1); dCclm_dVd = Cclm * (dPvagTerm_dVd / PvagTerm + dT0_dVd / T0 + dT1_dVd / T1); VACLM = Cclm * diffVds; dVACLM_dVg = dCclm_dVg * diffVds - dVdseff_dVg * Cclm; dVACLM_dVb = dCclm_dVb * diffVds - dVdseff_dVb * Cclm; dVACLM_dVd = dCclm_dVd * diffVds + (1.0 - dVdseff_dVd) * Cclm; } else { VACLM = Cclm = MAX_EXP; dVACLM_dVd = dVACLM_dVg = dVACLM_dVb = 0.0; dCclm_dVd = dCclm_dVg = dCclm_dVb = 0.0; } /* Calculate VADIBL */ if (pParam->BSIM4thetaRout > MIN_EXP) { T8 = Abulk * Vdsat; T0 = Vgst2Vtm * T8; dT0_dVg = Vgst2Vtm * Abulk * dVdsat_dVg + T8 + Vgst2Vtm * Vdsat * dAbulk_dVg; dT0_dVb = Vgst2Vtm * (dAbulk_dVb * Vdsat + Abulk * dVdsat_dVb); dT0_dVd = Vgst2Vtm * Abulk * dVdsat_dVd; T1 = Vgst2Vtm + T8; dT1_dVg = 1.0 + Abulk * dVdsat_dVg + Vdsat * dAbulk_dVg; dT1_dVb = Abulk * dVdsat_dVb + dAbulk_dVb * Vdsat; dT1_dVd = Abulk * dVdsat_dVd; T9 = T1 * T1; T2 = pParam->BSIM4thetaRout; VADIBL = (Vgst2Vtm - T0 / T1) / T2; dVADIBL_dVg = (1.0 - dT0_dVg / T1 + T0 * dT1_dVg / T9) / T2; dVADIBL_dVb = (-dT0_dVb / T1 + T0 * dT1_dVb / T9) / T2; dVADIBL_dVd = (-dT0_dVd / T1 + T0 * dT1_dVd / T9) / T2; T7 = pParam->BSIM4pdiblb * Vbseff; if (T7 >= -0.9) { T3 = 1.0 / (1.0 + T7); VADIBL *= T3; dVADIBL_dVg *= T3; dVADIBL_dVb = (dVADIBL_dVb - VADIBL * pParam->BSIM4pdiblb) * T3; dVADIBL_dVd *= T3; } else { T4 = 1.0 / (0.8 + T7); T3 = (17.0 + 20.0 * T7) * T4; dVADIBL_dVg *= T3; dVADIBL_dVb = dVADIBL_dVb * T3 - VADIBL * pParam->BSIM4pdiblb * T4 * T4; dVADIBL_dVd *= T3; VADIBL *= T3; } dVADIBL_dVg = dVADIBL_dVg * PvagTerm + VADIBL * dPvagTerm_dVg; dVADIBL_dVb = dVADIBL_dVb * PvagTerm + VADIBL * dPvagTerm_dVb; dVADIBL_dVd = dVADIBL_dVd * PvagTerm + VADIBL * dPvagTerm_dVd; VADIBL *= PvagTerm; } else { VADIBL = MAX_EXP; dVADIBL_dVd = dVADIBL_dVg = dVADIBL_dVb = 0.0; } /* Calculate Va */ Va = Vasat + VACLM; dVa_dVg = dVasat_dVg + dVACLM_dVg; dVa_dVb = dVasat_dVb + dVACLM_dVb; dVa_dVd = dVasat_dVd + dVACLM_dVd; /* Calculate VADITS */ T0 = pParam->BSIM4pditsd * Vds; if (T0 > EXP_THRESHOLD) { T1 = MAX_EXP; dT1_dVd = 0; } else { T1 = exp(T0); dT1_dVd = T1 * pParam->BSIM4pditsd; } if (pParam->BSIM4pdits > MIN_EXP) { T2 = 1.0 + model->BSIM4pditsl * Leff; VADITS = (1.0 + T2 * T1) / pParam->BSIM4pdits; dVADITS_dVg = VADITS * dFP_dVg; dVADITS_dVd = FP * T2 * dT1_dVd / pParam->BSIM4pdits; VADITS *= FP; } else { VADITS = MAX_EXP; dVADITS_dVg = dVADITS_dVd = 0; } /* Calculate VASCBE */ if ((pParam->BSIM4pscbe2 > 0.0)&&(pParam->BSIM4pscbe1>=0.0)) /*4.6.2*/ { if (diffVds > pParam->BSIM4pscbe1 * pParam->BSIM4litl / EXP_THRESHOLD) { T0 = pParam->BSIM4pscbe1 * pParam->BSIM4litl / diffVds; VASCBE = Leff * exp(T0) / pParam->BSIM4pscbe2; T1 = T0 * VASCBE / diffVds; dVASCBE_dVg = T1 * dVdseff_dVg; dVASCBE_dVd = -T1 * (1.0 - dVdseff_dVd); dVASCBE_dVb = T1 * dVdseff_dVb; } else { VASCBE = MAX_EXP * Leff/pParam->BSIM4pscbe2; dVASCBE_dVg = dVASCBE_dVd = dVASCBE_dVb = 0.0; } } else { VASCBE = MAX_EXP; dVASCBE_dVg = dVASCBE_dVd = dVASCBE_dVb = 0.0; } /* Add DIBL to Ids */ T9 = diffVds / VADIBL; T0 = 1.0 + T9; Idsa = Idl * T0; dIdsa_dVg = T0 * dIdl_dVg - Idl * (dVdseff_dVg + T9 * dVADIBL_dVg) / VADIBL; dIdsa_dVd = T0 * dIdl_dVd + Idl * (1.0 - dVdseff_dVd - T9 * dVADIBL_dVd) / VADIBL; dIdsa_dVb = T0 * dIdl_dVb - Idl * (dVdseff_dVb + T9 * dVADIBL_dVb) / VADIBL; /* Add DITS to Ids */ T9 = diffVds / VADITS; T0 = 1.0 + T9; dIdsa_dVg = T0 * dIdsa_dVg - Idsa * (dVdseff_dVg + T9 * dVADITS_dVg) / VADITS; dIdsa_dVd = T0 * dIdsa_dVd + Idsa * (1.0 - dVdseff_dVd - T9 * dVADITS_dVd) / VADITS; dIdsa_dVb = T0 * dIdsa_dVb - Idsa * dVdseff_dVb / VADITS; Idsa *= T0; /* Add CLM to Ids */ T0 = log(Va / Vasat); dT0_dVg = dVa_dVg / Va - dVasat_dVg / Vasat; dT0_dVb = dVa_dVb / Va - dVasat_dVb / Vasat; dT0_dVd = dVa_dVd / Va - dVasat_dVd / Vasat; T1 = T0 / Cclm; T9 = 1.0 + T1; dT9_dVg = (dT0_dVg - T1 * dCclm_dVg) / Cclm; dT9_dVb = (dT0_dVb - T1 * dCclm_dVb) / Cclm; dT9_dVd = (dT0_dVd - T1 * dCclm_dVd) / Cclm; dIdsa_dVg = dIdsa_dVg * T9 + Idsa * dT9_dVg; dIdsa_dVb = dIdsa_dVb * T9 + Idsa * dT9_dVb; dIdsa_dVd = dIdsa_dVd * T9 + Idsa * dT9_dVd; Idsa *= T9; /* Substrate current begins */ tmp = pParam->BSIM4alpha0 + pParam->BSIM4alpha1 * Leff; if ((tmp <= 0.0) || (pParam->BSIM4beta0 <= 0.0)) { Isub = Gbd = Gbb = Gbg = 0.0; } else { T2 = tmp / Leff; if (diffVds > pParam->BSIM4beta0 / EXP_THRESHOLD) { T0 = -pParam->BSIM4beta0 / diffVds; T1 = T2 * diffVds * exp(T0); T3 = T1 / diffVds * (T0 - 1.0); dT1_dVg = T3 * dVdseff_dVg; dT1_dVd = T3 * (dVdseff_dVd - 1.0); dT1_dVb = T3 * dVdseff_dVb; } else { T3 = T2 * MIN_EXP; T1 = T3 * diffVds; dT1_dVg = -T3 * dVdseff_dVg; dT1_dVd = T3 * (1.0 - dVdseff_dVd); dT1_dVb = -T3 * dVdseff_dVb; } T4 = Idsa * Vdseff; Isub = T1 * T4; Gbg = T1 * (dIdsa_dVg * Vdseff + Idsa * dVdseff_dVg) + T4 * dT1_dVg; Gbd = T1 * (dIdsa_dVd * Vdseff + Idsa * dVdseff_dVd) + T4 * dT1_dVd; Gbb = T1 * (dIdsa_dVb * Vdseff + Idsa * dVdseff_dVb) + T4 * dT1_dVb; Gbd += Gbg * dVgsteff_dVd; Gbb += Gbg * dVgsteff_dVb; Gbg *= dVgsteff_dVg; Gbb *= dVbseff_dVb; } here->BSIM4csub = Isub; here->BSIM4gbbs = Gbb; here->BSIM4gbgs = Gbg; here->BSIM4gbds = Gbd; /* Add SCBE to Ids */ T9 = diffVds / VASCBE; T0 = 1.0 + T9; Ids = Idsa * T0; Gm = T0 * dIdsa_dVg - Idsa * (dVdseff_dVg + T9 * dVASCBE_dVg) / VASCBE; Gds = T0 * dIdsa_dVd + Idsa * (1.0 - dVdseff_dVd - T9 * dVASCBE_dVd) / VASCBE; Gmb = T0 * dIdsa_dVb - Idsa * (dVdseff_dVb + T9 * dVASCBE_dVb) / VASCBE; tmp1 = Gds + Gm * dVgsteff_dVd; tmp2 = Gmb + Gm * dVgsteff_dVb; tmp3 = Gm; Gm = (Ids * dVdseff_dVg + Vdseff * tmp3) * dVgsteff_dVg; Gds = Ids * (dVdseff_dVd + dVdseff_dVg * dVgsteff_dVd) + Vdseff * tmp1; Gmb = (Ids * (dVdseff_dVb + dVdseff_dVg * dVgsteff_dVb) + Vdseff * tmp2) * dVbseff_dVb; cdrain = Ids * Vdseff; /* Source End Velocity Limit */ if((model->BSIM4vtlGiven) && (model->BSIM4vtl > 0.0) ) { T12 = 1.0 / Leff / CoxeffWovL; T11 = T12 / Vgsteff; T10 = -T11 / Vgsteff; vs = cdrain * T11; /* vs */ dvs_dVg = Gm * T11 + cdrain * T10 * dVgsteff_dVg; dvs_dVd = Gds * T11 + cdrain * T10 * dVgsteff_dVd; dvs_dVb = Gmb * T11 + cdrain * T10 * dVgsteff_dVb; T0 = 2 * MM; T1 = vs / (pParam->BSIM4vtl * pParam->BSIM4tfactor); if(T1 > 0.0) { T2 = 1.0 + exp(T0 * log(T1)); T3 = (T2 - 1.0) * T0 / vs; Fsevl = 1.0 / exp(log(T2)/ T0); dT2_dVg = T3 * dvs_dVg; dT2_dVd = T3 * dvs_dVd; dT2_dVb = T3 * dvs_dVb; T4 = -1.0 / T0 * Fsevl / T2; dFsevl_dVg = T4 * dT2_dVg; dFsevl_dVd = T4 * dT2_dVd; dFsevl_dVb = T4 * dT2_dVb; } else { Fsevl = 1.0; dFsevl_dVg = 0.0; dFsevl_dVd = 0.0; dFsevl_dVb = 0.0; } Gm *=Fsevl; Gm += cdrain * dFsevl_dVg; Gmb *=Fsevl; Gmb += cdrain * dFsevl_dVb; Gds *=Fsevl; Gds += cdrain * dFsevl_dVd; cdrain *= Fsevl; } here->BSIM4gds = Gds; here->BSIM4gm = Gm; here->BSIM4gmbs = Gmb; here->BSIM4IdovVds = Ids; if( here->BSIM4IdovVds <= 1.0e-9) here->BSIM4IdovVds = 1.0e-9; /* Calculate Rg */ if ((here->BSIM4rgateMod > 1) || (here->BSIM4trnqsMod != 0) || (here->BSIM4acnqsMod != 0)) { T9 = pParam->BSIM4xrcrg2 * model->BSIM4vtm; T0 = T9 * beta; dT0_dVd = (dbeta_dVd + dbeta_dVg * dVgsteff_dVd) * T9; dT0_dVb = (dbeta_dVb + dbeta_dVg * dVgsteff_dVb) * T9; dT0_dVg = dbeta_dVg * T9; here->BSIM4gcrg = pParam->BSIM4xrcrg1 * ( T0 + Ids); here->BSIM4gcrgd = pParam->BSIM4xrcrg1 * (dT0_dVd + tmp1); here->BSIM4gcrgb = pParam->BSIM4xrcrg1 * (dT0_dVb + tmp2) * dVbseff_dVb; here->BSIM4gcrgg = pParam->BSIM4xrcrg1 * (dT0_dVg + tmp3) * dVgsteff_dVg; if (here->BSIM4nf != 1.0) { here->BSIM4gcrg *= here->BSIM4nf; here->BSIM4gcrgg *= here->BSIM4nf; here->BSIM4gcrgd *= here->BSIM4nf; here->BSIM4gcrgb *= here->BSIM4nf; } if (here->BSIM4rgateMod == 2) { T10 = here->BSIM4grgeltd * here->BSIM4grgeltd; T11 = here->BSIM4grgeltd + here->BSIM4gcrg; here->BSIM4gcrg = here->BSIM4grgeltd * here->BSIM4gcrg / T11; T12 = T10 / T11 / T11; here->BSIM4gcrgg *= T12; here->BSIM4gcrgd *= T12; here->BSIM4gcrgb *= T12; } here->BSIM4gcrgs = -(here->BSIM4gcrgg + here->BSIM4gcrgd + here->BSIM4gcrgb); } /* Calculate bias-dependent external S/D resistance */ if (model->BSIM4rdsMod) { /* Rs(V) */ T0 = vgs - pParam->BSIM4vfbsd; T1 = sqrt(T0 * T0 + 1.0e-4); vgs_eff = 0.5 * (T0 + T1); dvgs_eff_dvg = vgs_eff / T1; T0 = 1.0 + pParam->BSIM4prwg * vgs_eff; dT0_dvg = -pParam->BSIM4prwg / T0 / T0 * dvgs_eff_dvg; T1 = -pParam->BSIM4prwb * vbs; dT1_dvb = -pParam->BSIM4prwb; T2 = 1.0 / T0 + T1; T3 = T2 + sqrt(T2 * T2 + 0.01); dT3_dvg = T3 / (T3 - T2); dT3_dvb = dT3_dvg * dT1_dvb; dT3_dvg *= dT0_dvg; T4 = pParam->BSIM4rs0 * 0.5; Rs = pParam->BSIM4rswmin + T3 * T4; dRs_dvg = T4 * dT3_dvg; dRs_dvb = T4 * dT3_dvb; T0 = 1.0 + here->BSIM4sourceConductance * Rs; here->BSIM4gstot = here->BSIM4sourceConductance / T0; T0 = -here->BSIM4gstot * here->BSIM4gstot; dgstot_dvd = 0.0; /* place holder */ dgstot_dvg = T0 * dRs_dvg; dgstot_dvb = T0 * dRs_dvb; dgstot_dvs = -(dgstot_dvg + dgstot_dvb + dgstot_dvd); /* Rd(V) */ T0 = vgd - pParam->BSIM4vfbsd; T1 = sqrt(T0 * T0 + 1.0e-4); vgd_eff = 0.5 * (T0 + T1); dvgd_eff_dvg = vgd_eff / T1; T0 = 1.0 + pParam->BSIM4prwg * vgd_eff; dT0_dvg = -pParam->BSIM4prwg / T0 / T0 * dvgd_eff_dvg; T1 = -pParam->BSIM4prwb * vbd; dT1_dvb = -pParam->BSIM4prwb; T2 = 1.0 / T0 + T1; T3 = T2 + sqrt(T2 * T2 + 0.01); dT3_dvg = T3 / (T3 - T2); dT3_dvb = dT3_dvg * dT1_dvb; dT3_dvg *= dT0_dvg; T4 = pParam->BSIM4rd0 * 0.5; Rd = pParam->BSIM4rdwmin + T3 * T4; dRd_dvg = T4 * dT3_dvg; dRd_dvb = T4 * dT3_dvb; T0 = 1.0 + here->BSIM4drainConductance * Rd; here->BSIM4gdtot = here->BSIM4drainConductance / T0; T0 = -here->BSIM4gdtot * here->BSIM4gdtot; dgdtot_dvs = 0.0; dgdtot_dvg = T0 * dRd_dvg; dgdtot_dvb = T0 * dRd_dvb; dgdtot_dvd = -(dgdtot_dvg + dgdtot_dvb + dgdtot_dvs); here->BSIM4gstotd = vses * dgstot_dvd; here->BSIM4gstotg = vses * dgstot_dvg; here->BSIM4gstots = vses * dgstot_dvs; here->BSIM4gstotb = vses * dgstot_dvb; T2 = vdes - vds; here->BSIM4gdtotd = T2 * dgdtot_dvd; here->BSIM4gdtotg = T2 * dgdtot_dvg; here->BSIM4gdtots = T2 * dgdtot_dvs; here->BSIM4gdtotb = T2 * dgdtot_dvb; } else /* WDLiu: for bypass */ { here->BSIM4gstot = here->BSIM4gstotd = here->BSIM4gstotg = 0.0; here->BSIM4gstots = here->BSIM4gstotb = 0.0; here->BSIM4gdtot = here->BSIM4gdtotd = here->BSIM4gdtotg = 0.0; here->BSIM4gdtots = here->BSIM4gdtotb = 0.0; } /* GIDL/GISL Models */ if(model->BSIM4mtrlMod == 0) T0 = 3.0 * toxe; else T0 = model->BSIM4epsrsub * toxe / epsrox; /* Calculate GIDL current */ vgs_eff = here->BSIM4vgs_eff; dvgs_eff_dvg = here->BSIM4dvgs_eff_dvg; vgd_eff = here->BSIM4vgd_eff; dvgd_eff_dvg = here->BSIM4dvgd_eff_dvg; if (model->BSIM4gidlMod==0){ if(model->BSIM4mtrlMod ==0) T1 = (vds - vgs_eff - pParam->BSIM4egidl ) / T0; else T1 = (vds - vgs_eff - pParam->BSIM4egidl + pParam->BSIM4vfbsd) / T0; if ((pParam->BSIM4agidl <= 0.0) || (pParam->BSIM4bgidl <= 0.0) || (T1 <= 0.0) || (pParam->BSIM4cgidl <= 0.0) || (vbd > 0.0)) Igidl = Ggidld = Ggidlg = Ggidlb = 0.0; else { dT1_dVd = 1.0 / T0; dT1_dVg = -dvgs_eff_dvg * dT1_dVd; T2 = pParam->BSIM4bgidl / T1; if (T2 < 100.0) { Igidl = pParam->BSIM4agidl * pParam->BSIM4weffCJ * T1 * exp(-T2); T3 = Igidl * (1.0 + T2) / T1; Ggidld = T3 * dT1_dVd; Ggidlg = T3 * dT1_dVg; } else { Igidl = pParam->BSIM4agidl * pParam->BSIM4weffCJ * 3.720075976e-44; Ggidld = Igidl * dT1_dVd; Ggidlg = Igidl * dT1_dVg; Igidl *= T1; } T4 = vbd * vbd; T5 = -vbd * T4; T6 = pParam->BSIM4cgidl + T5; T7 = T5 / T6; T8 = 3.0 * pParam->BSIM4cgidl * T4 / T6 / T6; Ggidld = Ggidld * T7 + Igidl * T8; Ggidlg = Ggidlg * T7; Ggidlb = -Igidl * T8; Igidl *= T7; } here->BSIM4Igidl = Igidl; here->BSIM4ggidld = Ggidld; here->BSIM4ggidlg = Ggidlg; here->BSIM4ggidlb = Ggidlb; /* Calculate GISL current */ if(model->BSIM4mtrlMod ==0) T1 = (-vds - vgd_eff - pParam->BSIM4egisl ) / T0; else T1 = (-vds - vgd_eff - pParam->BSIM4egisl + pParam->BSIM4vfbsd ) / T0; if ((pParam->BSIM4agisl <= 0.0) || (pParam->BSIM4bgisl <= 0.0) || (T1 <= 0.0) || (pParam->BSIM4cgisl <= 0.0) || (vbs > 0.0)) Igisl = Ggisls = Ggislg = Ggislb = 0.0; else { dT1_dVd = 1.0 / T0; dT1_dVg = -dvgd_eff_dvg * dT1_dVd; T2 = pParam->BSIM4bgisl / T1; if (T2 < 100.0) { Igisl = pParam->BSIM4agisl * pParam->BSIM4weffCJ * T1 * exp(-T2); T3 = Igisl * (1.0 + T2) / T1; Ggisls = T3 * dT1_dVd; Ggislg = T3 * dT1_dVg; } else { Igisl = pParam->BSIM4agisl * pParam->BSIM4weffCJ * 3.720075976e-44; Ggisls = Igisl * dT1_dVd; Ggislg = Igisl * dT1_dVg; Igisl *= T1; } T4 = vbs * vbs; T5 = -vbs * T4; T6 = pParam->BSIM4cgisl + T5; T7 = T5 / T6; T8 = 3.0 * pParam->BSIM4cgisl * T4 / T6 / T6; Ggisls = Ggisls * T7 + Igisl * T8; Ggislg = Ggislg * T7; Ggislb = -Igisl * T8; Igisl *= T7; } here->BSIM4Igisl = Igisl; here->BSIM4ggisls = Ggisls; here->BSIM4ggislg = Ggislg; here->BSIM4ggislb = Ggislb; } else{ /* v4.7 New Gidl/GISL model */ /* GISL */ if (model->BSIM4mtrlMod==0) T1 = (-vds - pParam->BSIM4rgisl * vgd_eff - pParam->BSIM4egisl) / T0; else T1 = (-vds - pParam->BSIM4rgisl * vgd_eff - pParam->BSIM4egisl + pParam->BSIM4vfbsd) / T0; if ((pParam->BSIM4agisl <= 0.0) || (pParam->BSIM4bgisl <= 0.0) || (T1 <= 0.0) || (pParam->BSIM4cgisl < 0.0) ) Igisl = Ggisls = Ggislg = Ggislb = 0.0; else { dT1_dVd = 1 / T0; dT1_dVg = - pParam->BSIM4rgisl * dT1_dVd * dvgd_eff_dvg; T2 = pParam->BSIM4bgisl / T1; if (T2 < EXPL_THRESHOLD) { Igisl = pParam->BSIM4weffCJ * pParam->BSIM4agisl * T1 * exp(-T2); T3 = Igisl / T1 * (T2 + 1); Ggisls = T3 * dT1_dVd; Ggislg = T3 * dT1_dVg; } else { T3 = pParam->BSIM4weffCJ * pParam->BSIM4agisl * MIN_EXPL; Igisl = T3 * T1 ; Ggisls = T3 * dT1_dVd; Ggislg = T3 * dT1_dVg; } T4 = vbs - pParam->BSIM4fgisl; if (T4==0) T5 = EXPL_THRESHOLD; else T5 = pParam->BSIM4kgisl / T4; if (T5BSIM4Igisl = Igisl; here->BSIM4ggisls = Ggisls; here->BSIM4ggislg = Ggislg; here->BSIM4ggislb = Ggislb; /* End of GISL */ /* GIDL */ if (model->BSIM4mtrlMod==0) T1 = (vds - pParam->BSIM4rgidl * vgs_eff - pParam->BSIM4egidl) / T0; else T1 = (vds - pParam->BSIM4rgidl * vgs_eff - pParam->BSIM4egidl + pParam->BSIM4vfbsd) / T0; if ((pParam->BSIM4agidl <= 0.0) || (pParam->BSIM4bgidl <= 0.0) || (T1 <= 0.0) || (pParam->BSIM4cgidl < 0.0) ) Igidl = Ggidld = Ggidlg = Ggidlb = 0.0; else { dT1_dVd = 1 / T0; dT1_dVg = - pParam->BSIM4rgidl * dT1_dVd * dvgs_eff_dvg; T2 = pParam->BSIM4bgidl / T1; if (T2 < EXPL_THRESHOLD) { Igidl = pParam->BSIM4weffCJ * pParam->BSIM4agidl * T1 * exp(-T2); T3 = Igidl / T1 * (T2 + 1); Ggidld = T3 * dT1_dVd; Ggidlg = T3 * dT1_dVg; } else { T3 = pParam->BSIM4weffCJ * pParam->BSIM4agidl * MIN_EXPL; Igidl = T3 * T1 ; Ggidld = T3 * dT1_dVd; Ggidlg = T3 * dT1_dVg; } T4 = vbd - pParam->BSIM4fgidl; if (T4==0) T5 = EXPL_THRESHOLD; else T5 = pParam->BSIM4kgidl / T4; if (T5BSIM4Igidl = Igidl; here->BSIM4ggidld = Ggidld; here->BSIM4ggidlg = Ggidlg; here->BSIM4ggidlb = Ggidlb; /* End of New GIDL */ } /*End of Gidl*/ /* Calculate gate tunneling current */ if ((model->BSIM4igcMod != 0) || (model->BSIM4igbMod != 0)) { Vfb = here->BSIM4vfbzb; V3 = Vfb - Vgs_eff + Vbseff - DELTA_3; if (Vfb <= 0.0) T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * Vfb); else T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * Vfb); T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = Vfb - 0.5 * (V3 + T0); dVfbeff_dVg = T1 * dVgs_eff_dVg; dVfbeff_dVb = -T1; /* WDLiu: -No surprise? No. -Good! */ Voxacc = Vfb - Vfbeff; dVoxacc_dVg = -dVfbeff_dVg; dVoxacc_dVb = -dVfbeff_dVb; if (Voxacc < 0.0) /* WDLiu: Avoiding numerical instability. */ Voxacc = dVoxacc_dVg = dVoxacc_dVb = 0.0; T0 = 0.5 * pParam->BSIM4k1ox; T3 = Vgs_eff - Vfbeff - Vbseff - Vgsteff; if (pParam->BSIM4k1ox == 0.0) Voxdepinv = dVoxdepinv_dVg = dVoxdepinv_dVd = dVoxdepinv_dVb = 0.0; else if (T3 < 0.0) { Voxdepinv = -T3; dVoxdepinv_dVg = -dVgs_eff_dVg + dVfbeff_dVg + dVgsteff_dVg; dVoxdepinv_dVd = dVgsteff_dVd; dVoxdepinv_dVb = dVfbeff_dVb + 1.0 + dVgsteff_dVb; } else { T1 = sqrt(T0 * T0 + T3); T2 = T0 / T1; Voxdepinv = pParam->BSIM4k1ox * (T1 - T0); dVoxdepinv_dVg = T2 * (dVgs_eff_dVg - dVfbeff_dVg - dVgsteff_dVg); dVoxdepinv_dVd = -T2 * dVgsteff_dVd; dVoxdepinv_dVb = -T2 * (dVfbeff_dVb + 1.0 + dVgsteff_dVb); } Voxdepinv += Vgsteff; dVoxdepinv_dVg += dVgsteff_dVg; dVoxdepinv_dVd += dVgsteff_dVd; dVoxdepinv_dVb += dVgsteff_dVb; } if(model->BSIM4tempMod < 2) tmp = Vtm; else /* model->BSIM4tempMod = 2 , 3*/ tmp = Vtm0; if (model->BSIM4igcMod) { T0 = tmp * pParam->BSIM4nigc; if(model->BSIM4igcMod == 1) { VxNVt = (Vgs_eff - model->BSIM4type * here->BSIM4vth0) / T0; if (VxNVt > EXP_THRESHOLD) { Vaux = Vgs_eff - model->BSIM4type * here->BSIM4vth0; dVaux_dVg = dVgs_eff_dVg; dVaux_dVd = 0.0; dVaux_dVb = 0.0; } } else if (model->BSIM4igcMod == 2) { VxNVt = (Vgs_eff - here->BSIM4von) / T0; if (VxNVt > EXP_THRESHOLD) { Vaux = Vgs_eff - here->BSIM4von; dVaux_dVg = dVgs_eff_dVg; dVaux_dVd = -dVth_dVd; dVaux_dVb = -dVth_dVb; } } if (VxNVt < -EXP_THRESHOLD) { Vaux = T0 * log(1.0 + MIN_EXP); dVaux_dVg = dVaux_dVd = dVaux_dVb = 0.0; } else if ((VxNVt >= -EXP_THRESHOLD) && (VxNVt <= EXP_THRESHOLD)) { ExpVxNVt = exp(VxNVt); Vaux = T0 * log(1.0 + ExpVxNVt); dVaux_dVg = ExpVxNVt / (1.0 + ExpVxNVt); if(model->BSIM4igcMod == 1) { dVaux_dVd = 0.0; dVaux_dVb = 0.0; } else if (model->BSIM4igcMod == 2) { dVaux_dVd = -dVaux_dVg* dVth_dVd; /* Synopsys 08/30/2013 modify */ dVaux_dVb = -dVaux_dVg* dVth_dVb; /* Synopsys 08/30/2013 modify */ } dVaux_dVg *= dVgs_eff_dVg; } T2 = Vgs_eff * Vaux; dT2_dVg = dVgs_eff_dVg * Vaux + Vgs_eff * dVaux_dVg; dT2_dVd = Vgs_eff * dVaux_dVd; dT2_dVb = Vgs_eff * dVaux_dVb; T11 = pParam->BSIM4Aechvb; T12 = pParam->BSIM4Bechvb; T3 = pParam->BSIM4aigc * pParam->BSIM4cigc - pParam->BSIM4bigc; T4 = pParam->BSIM4bigc * pParam->BSIM4cigc; T5 = T12 * (pParam->BSIM4aigc + T3 * Voxdepinv - T4 * Voxdepinv * Voxdepinv); if (T5 > EXP_THRESHOLD) { T6 = MAX_EXP; dT6_dVg = dT6_dVd = dT6_dVb = 0.0; } else if (T5 < -EXP_THRESHOLD) { T6 = MIN_EXP; dT6_dVg = dT6_dVd = dT6_dVb = 0.0; } else { T6 = exp(T5); dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * Voxdepinv); dT6_dVd = dT6_dVg * dVoxdepinv_dVd; dT6_dVb = dT6_dVg * dVoxdepinv_dVb; dT6_dVg *= dVoxdepinv_dVg; } Igc = T11 * T2 * T6; dIgc_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg); dIgc_dVd = T11 * (T2 * dT6_dVd + T6 * dT2_dVd); dIgc_dVb = T11 * (T2 * dT6_dVb + T6 * dT2_dVb); if (model->BSIM4pigcdGiven) { Pigcd = pParam->BSIM4pigcd; dPigcd_dVg = dPigcd_dVd = dPigcd_dVb = 0.0; } else { /* T11 = pParam->BSIM4Bechvb * toxe; v4.7 */ T11 = -pParam->BSIM4Bechvb; T12 = Vgsteff + 1.0e-20; T13 = T11 / T12 / T12; T14 = -T13 / T12; Pigcd = T13 * (1.0 - 0.5 * Vdseff / T12); dPigcd_dVg = T14 * (2.0 + 0.5 * (dVdseff_dVg - 3.0 * Vdseff / T12)); dPigcd_dVd = 0.5 * T14 * dVdseff_dVd; dPigcd_dVb = 0.5 * T14 * dVdseff_dVb; } T7 = -Pigcd * Vdseff; /* bugfix */ dT7_dVg = -Vdseff * dPigcd_dVg - Pigcd * dVdseff_dVg; dT7_dVd = -Vdseff * dPigcd_dVd - Pigcd * dVdseff_dVd + dT7_dVg * dVgsteff_dVd; dT7_dVb = -Vdseff * dPigcd_dVb - Pigcd * dVdseff_dVb + dT7_dVg * dVgsteff_dVb; dT7_dVg *= dVgsteff_dVg; /*dT7_dVb *= dVbseff_dVb;*/ /* Synopsys, 2013/08/30 */ T8 = T7 * T7 + 2.0e-4; dT8_dVg = 2.0 * T7; dT8_dVd = dT8_dVg * dT7_dVd; dT8_dVb = dT8_dVg * dT7_dVb; dT8_dVg *= dT7_dVg; if (T7 > EXP_THRESHOLD) { T9 = MAX_EXP; dT9_dVg = dT9_dVd = dT9_dVb = 0.0; } else if (T7 < -EXP_THRESHOLD) { T9 = MIN_EXP; dT9_dVg = dT9_dVd = dT9_dVb = 0.0; } else { T9 = exp(T7); dT9_dVg = T9 * dT7_dVg; dT9_dVd = T9 * dT7_dVd; dT9_dVb = T9 * dT7_dVb; } T0 = T8 * T8; T1 = T9 - 1.0 + 1.0e-4; T10 = (T1 - T7) / T8; dT10_dVg = (dT9_dVg - dT7_dVg - T10 * dT8_dVg) / T8; dT10_dVd = (dT9_dVd - dT7_dVd - T10 * dT8_dVd) / T8; dT10_dVb = (dT9_dVb - dT7_dVb - T10 * dT8_dVb) / T8; Igcs = Igc * T10; dIgcs_dVg = dIgc_dVg * T10 + Igc * dT10_dVg; dIgcs_dVd = dIgc_dVd * T10 + Igc * dT10_dVd; dIgcs_dVb = dIgc_dVb * T10 + Igc * dT10_dVb; T1 = T9 - 1.0 - 1.0e-4; T10 = (T7 * T9 - T1) / T8; dT10_dVg = (dT7_dVg * T9 + (T7 - 1.0) * dT9_dVg - T10 * dT8_dVg) / T8; dT10_dVd = (dT7_dVd * T9 + (T7 - 1.0) * dT9_dVd - T10 * dT8_dVd) / T8; dT10_dVb = (dT7_dVb * T9 + (T7 - 1.0) * dT9_dVb - T10 * dT8_dVb) / T8; Igcd = Igc * T10; dIgcd_dVg = dIgc_dVg * T10 + Igc * dT10_dVg; dIgcd_dVd = dIgc_dVd * T10 + Igc * dT10_dVd; dIgcd_dVb = dIgc_dVb * T10 + Igc * dT10_dVb; here->BSIM4Igcs = Igcs; here->BSIM4gIgcsg = dIgcs_dVg; here->BSIM4gIgcsd = dIgcs_dVd; here->BSIM4gIgcsb = dIgcs_dVb * dVbseff_dVb; here->BSIM4Igcd = Igcd; here->BSIM4gIgcdg = dIgcd_dVg; here->BSIM4gIgcdd = dIgcd_dVd; here->BSIM4gIgcdb = dIgcd_dVb * dVbseff_dVb; T0 = vgs - (pParam->BSIM4vfbsd + pParam->BSIM4vfbsdoff); vgs_eff = sqrt(T0 * T0 + 1.0e-4); dvgs_eff_dvg = T0 / vgs_eff; T2 = vgs * vgs_eff; dT2_dVg = vgs * dvgs_eff_dvg + vgs_eff; T11 = pParam->BSIM4AechvbEdgeS; T12 = pParam->BSIM4BechvbEdge; T3 = pParam->BSIM4aigs * pParam->BSIM4cigs - pParam->BSIM4bigs; T4 = pParam->BSIM4bigs * pParam->BSIM4cigs; T5 = T12 * (pParam->BSIM4aigs + T3 * vgs_eff - T4 * vgs_eff * vgs_eff); if (T5 > EXP_THRESHOLD) { T6 = MAX_EXP; dT6_dVg = 0.0; } else if (T5 < -EXP_THRESHOLD) { T6 = MIN_EXP; dT6_dVg = 0.0; } else { T6 = exp(T5); dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * vgs_eff) * dvgs_eff_dvg; } Igs = T11 * T2 * T6; dIgs_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg); dIgs_dVs = -dIgs_dVg; T0 = vgd - (pParam->BSIM4vfbsd + pParam->BSIM4vfbsdoff); vgd_eff = sqrt(T0 * T0 + 1.0e-4); dvgd_eff_dvg = T0 / vgd_eff; T2 = vgd * vgd_eff; dT2_dVg = vgd * dvgd_eff_dvg + vgd_eff; T11 = pParam->BSIM4AechvbEdgeD; T3 = pParam->BSIM4aigd * pParam->BSIM4cigd - pParam->BSIM4bigd; T4 = pParam->BSIM4bigd * pParam->BSIM4cigd; T5 = T12 * (pParam->BSIM4aigd + T3 * vgd_eff - T4 * vgd_eff * vgd_eff); if (T5 > EXP_THRESHOLD) { T6 = MAX_EXP; dT6_dVg = 0.0; } else if (T5 < -EXP_THRESHOLD) { T6 = MIN_EXP; dT6_dVg = 0.0; } else { T6 = exp(T5); dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * vgd_eff) * dvgd_eff_dvg; } Igd = T11 * T2 * T6; dIgd_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg); dIgd_dVd = -dIgd_dVg; here->BSIM4Igs = Igs; here->BSIM4gIgsg = dIgs_dVg; here->BSIM4gIgss = dIgs_dVs; here->BSIM4Igd = Igd; here->BSIM4gIgdg = dIgd_dVg; here->BSIM4gIgdd = dIgd_dVd; } else { here->BSIM4Igcs = here->BSIM4gIgcsg = here->BSIM4gIgcsd = here->BSIM4gIgcsb = 0.0; here->BSIM4Igcd = here->BSIM4gIgcdg = here->BSIM4gIgcdd = here->BSIM4gIgcdb = 0.0; here->BSIM4Igs = here->BSIM4gIgsg = here->BSIM4gIgss = 0.0; here->BSIM4Igd = here->BSIM4gIgdg = here->BSIM4gIgdd = 0.0; } if (model->BSIM4igbMod) { T0 = tmp * pParam->BSIM4nigbacc; T1 = -Vgs_eff + Vbseff + Vfb; VxNVt = T1 / T0; if (VxNVt > EXP_THRESHOLD) { Vaux = T1; dVaux_dVg = -dVgs_eff_dVg; dVaux_dVb = 1.0; } else if (VxNVt < -EXP_THRESHOLD) { Vaux = T0 * log(1.0 + MIN_EXP); dVaux_dVg = dVaux_dVb = 0.0; } else { ExpVxNVt = exp(VxNVt); Vaux = T0 * log(1.0 + ExpVxNVt); dVaux_dVb = ExpVxNVt / (1.0 + ExpVxNVt); dVaux_dVg = -dVaux_dVb * dVgs_eff_dVg; } T2 = (Vgs_eff - Vbseff) * Vaux; dT2_dVg = dVgs_eff_dVg * Vaux + (Vgs_eff - Vbseff) * dVaux_dVg; dT2_dVb = -Vaux + (Vgs_eff - Vbseff) * dVaux_dVb; T11 = 4.97232e-7 * pParam->BSIM4weff * pParam->BSIM4leff * pParam->BSIM4ToxRatio; T12 = -7.45669e11 * toxe; T3 = pParam->BSIM4aigbacc * pParam->BSIM4cigbacc - pParam->BSIM4bigbacc; T4 = pParam->BSIM4bigbacc * pParam->BSIM4cigbacc; T5 = T12 * (pParam->BSIM4aigbacc + T3 * Voxacc - T4 * Voxacc * Voxacc); if (T5 > EXP_THRESHOLD) { T6 = MAX_EXP; dT6_dVg = dT6_dVb = 0.0; } else if (T5 < -EXP_THRESHOLD) { T6 = MIN_EXP; dT6_dVg = dT6_dVb = 0.0; } else { T6 = exp(T5); dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * Voxacc); dT6_dVb = dT6_dVg * dVoxacc_dVb; dT6_dVg *= dVoxacc_dVg; } Igbacc = T11 * T2 * T6; dIgbacc_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg); dIgbacc_dVb = T11 * (T2 * dT6_dVb + T6 * dT2_dVb); T0 = tmp * pParam->BSIM4nigbinv; T1 = Voxdepinv - pParam->BSIM4eigbinv; VxNVt = T1 / T0; if (VxNVt > EXP_THRESHOLD) { Vaux = T1; dVaux_dVg = dVoxdepinv_dVg; dVaux_dVd = dVoxdepinv_dVd; dVaux_dVb = dVoxdepinv_dVb; } else if (VxNVt < -EXP_THRESHOLD) { Vaux = T0 * log(1.0 + MIN_EXP); dVaux_dVg = dVaux_dVd = dVaux_dVb = 0.0; } else { ExpVxNVt = exp(VxNVt); Vaux = T0 * log(1.0 + ExpVxNVt); dVaux_dVg = ExpVxNVt / (1.0 + ExpVxNVt); dVaux_dVd = dVaux_dVg * dVoxdepinv_dVd; dVaux_dVb = dVaux_dVg * dVoxdepinv_dVb; dVaux_dVg *= dVoxdepinv_dVg; } T2 = (Vgs_eff - Vbseff) * Vaux; dT2_dVg = dVgs_eff_dVg * Vaux + (Vgs_eff - Vbseff) * dVaux_dVg; dT2_dVd = (Vgs_eff - Vbseff) * dVaux_dVd; dT2_dVb = -Vaux + (Vgs_eff - Vbseff) * dVaux_dVb; T11 *= 0.75610; T12 *= 1.31724; T3 = pParam->BSIM4aigbinv * pParam->BSIM4cigbinv - pParam->BSIM4bigbinv; T4 = pParam->BSIM4bigbinv * pParam->BSIM4cigbinv; T5 = T12 * (pParam->BSIM4aigbinv + T3 * Voxdepinv - T4 * Voxdepinv * Voxdepinv); if (T5 > EXP_THRESHOLD) { T6 = MAX_EXP; dT6_dVg = dT6_dVd = dT6_dVb = 0.0; } else if (T5 < -EXP_THRESHOLD) { T6 = MIN_EXP; dT6_dVg = dT6_dVd = dT6_dVb = 0.0; } else { T6 = exp(T5); dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * Voxdepinv); dT6_dVd = dT6_dVg * dVoxdepinv_dVd; dT6_dVb = dT6_dVg * dVoxdepinv_dVb; dT6_dVg *= dVoxdepinv_dVg; } Igbinv = T11 * T2 * T6; dIgbinv_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg); dIgbinv_dVd = T11 * (T2 * dT6_dVd + T6 * dT2_dVd); dIgbinv_dVb = T11 * (T2 * dT6_dVb + T6 * dT2_dVb); here->BSIM4Igb = Igbinv + Igbacc; here->BSIM4gIgbg = dIgbinv_dVg + dIgbacc_dVg; here->BSIM4gIgbd = dIgbinv_dVd; here->BSIM4gIgbb = (dIgbinv_dVb + dIgbacc_dVb) * dVbseff_dVb; } else { here->BSIM4Igb = here->BSIM4gIgbg = here->BSIM4gIgbd = here->BSIM4gIgbs = here->BSIM4gIgbb = 0.0; } /* End of Gate current */ if (here->BSIM4nf != 1.0) { cdrain *= here->BSIM4nf; here->BSIM4gds *= here->BSIM4nf; here->BSIM4gm *= here->BSIM4nf; here->BSIM4gmbs *= here->BSIM4nf; here->BSIM4IdovVds *= here->BSIM4nf; here->BSIM4gbbs *= here->BSIM4nf; here->BSIM4gbgs *= here->BSIM4nf; here->BSIM4gbds *= here->BSIM4nf; here->BSIM4csub *= here->BSIM4nf; here->BSIM4Igidl *= here->BSIM4nf; here->BSIM4ggidld *= here->BSIM4nf; here->BSIM4ggidlg *= here->BSIM4nf; here->BSIM4ggidlb *= here->BSIM4nf; here->BSIM4Igisl *= here->BSIM4nf; here->BSIM4ggisls *= here->BSIM4nf; here->BSIM4ggislg *= here->BSIM4nf; here->BSIM4ggislb *= here->BSIM4nf; here->BSIM4Igcs *= here->BSIM4nf; here->BSIM4gIgcsg *= here->BSIM4nf; here->BSIM4gIgcsd *= here->BSIM4nf; here->BSIM4gIgcsb *= here->BSIM4nf; here->BSIM4Igcd *= here->BSIM4nf; here->BSIM4gIgcdg *= here->BSIM4nf; here->BSIM4gIgcdd *= here->BSIM4nf; here->BSIM4gIgcdb *= here->BSIM4nf; here->BSIM4Igs *= here->BSIM4nf; here->BSIM4gIgsg *= here->BSIM4nf; here->BSIM4gIgss *= here->BSIM4nf; here->BSIM4Igd *= here->BSIM4nf; here->BSIM4gIgdg *= here->BSIM4nf; here->BSIM4gIgdd *= here->BSIM4nf; here->BSIM4Igb *= here->BSIM4nf; here->BSIM4gIgbg *= here->BSIM4nf; here->BSIM4gIgbd *= here->BSIM4nf; here->BSIM4gIgbb *= here->BSIM4nf; } here->BSIM4ggidls = -(here->BSIM4ggidld + here->BSIM4ggidlg + here->BSIM4ggidlb); here->BSIM4ggisld = -(here->BSIM4ggisls + here->BSIM4ggislg + here->BSIM4ggislb); here->BSIM4gIgbs = -(here->BSIM4gIgbg + here->BSIM4gIgbd + here->BSIM4gIgbb); here->BSIM4gIgcss = -(here->BSIM4gIgcsg + here->BSIM4gIgcsd + here->BSIM4gIgcsb); here->BSIM4gIgcds = -(here->BSIM4gIgcdg + here->BSIM4gIgcdd + here->BSIM4gIgcdb); here->BSIM4cd = cdrain; /* Calculations for noise analysis */ if (model->BSIM4tnoiMod == 0) { Abulk = Abulk0 * pParam->BSIM4abulkCVfactor; Vdsat = Vgsteff / Abulk; T0 = Vdsat - Vds - DELTA_4; T1 = sqrt(T0 * T0 + 4.0 * DELTA_4 * Vdsat); if (T0 >= 0.0) Vdseff = Vdsat - 0.5 * (T0 + T1); else { T3 = (DELTA_4 + DELTA_4) / (T1 - T0); T4 = 1.0 - T3; T5 = Vdsat * T3 / (T1 - T0); Vdseff = Vdsat * T4; } if (Vds == 0.0) Vdseff = 0.0; T0 = Abulk * Vdseff; T1 = 12.0 * (Vgsteff - 0.5 * T0 + 1.0e-20); T2 = Vdseff / T1; T3 = T0 * T2; here->BSIM4qinv = Coxeff * pParam->BSIM4weffCV * here->BSIM4nf * pParam->BSIM4leffCV * (Vgsteff - 0.5 * T0 + Abulk * T3); } else if(model->BSIM4tnoiMod == 2) { here->BSIM4noiGd0 = here->BSIM4nf * beta * Vgsteff / (1.0 + gche * Rds); } /* * BSIM4 C-V begins */ if ((model->BSIM4xpart < 0) || (!ChargeComputationNeeded)) { qgate = qdrn = qsrc = qbulk = 0.0; here->BSIM4cggb = here->BSIM4cgsb = here->BSIM4cgdb = 0.0; here->BSIM4cdgb = here->BSIM4cdsb = here->BSIM4cddb = 0.0; here->BSIM4cbgb = here->BSIM4cbsb = here->BSIM4cbdb = 0.0; here->BSIM4csgb = here->BSIM4cssb = here->BSIM4csdb = 0.0; here->BSIM4cgbb = here->BSIM4csbb = here->BSIM4cdbb = here->BSIM4cbbb = 0.0; here->BSIM4cqdb = here->BSIM4cqsb = here->BSIM4cqgb = here->BSIM4cqbb = 0.0; here->BSIM4gtau = 0.0; goto finished; } else if (model->BSIM4capMod == 0) { if (Vbseff < 0.0) { VbseffCV = Vbs; /*4.6.2*/ dVbseffCV_dVb = 1.0; } else { VbseffCV = pParam->BSIM4phi - Phis; dVbseffCV_dVb = -dPhis_dVb * dVbseff_dVb; /*4.6.2*/ } Vfb = pParam->BSIM4vfbcv; Vth = Vfb + pParam->BSIM4phi + pParam->BSIM4k1ox * sqrtPhis; Vgst = Vgs_eff - Vth; dVth_dVb = pParam->BSIM4k1ox * dsqrtPhis_dVb *dVbseff_dVb; /*4.6.2*/ dVgst_dVb = -dVth_dVb; dVgst_dVg = dVgs_eff_dVg; CoxWL = model->BSIM4coxe * pParam->BSIM4weffCV * pParam->BSIM4leffCV * here->BSIM4nf; Arg1 = Vgs_eff - VbseffCV - Vfb; if (Arg1 <= 0.0) { qgate = CoxWL * Arg1; qbulk = -qgate; qdrn = 0.0; here->BSIM4cggb = CoxWL * dVgs_eff_dVg; here->BSIM4cgdb = 0.0; here->BSIM4cgsb = CoxWL * (dVbseffCV_dVb - dVgs_eff_dVg); here->BSIM4cdgb = 0.0; here->BSIM4cddb = 0.0; here->BSIM4cdsb = 0.0; here->BSIM4cbgb = -CoxWL * dVgs_eff_dVg; here->BSIM4cbdb = 0.0; here->BSIM4cbsb = -here->BSIM4cgsb; } /* Arg1 <= 0.0, end of accumulation */ else if (Vgst <= 0.0) { T1 = 0.5 * pParam->BSIM4k1ox; T2 = sqrt(T1 * T1 + Arg1); qgate = CoxWL * pParam->BSIM4k1ox * (T2 - T1); qbulk = -qgate; qdrn = 0.0; T0 = CoxWL * T1 / T2; here->BSIM4cggb = T0 * dVgs_eff_dVg; here->BSIM4cgdb = 0.0; here->BSIM4cgsb = T0 * (dVbseffCV_dVb - dVgs_eff_dVg); here->BSIM4cdgb = 0.0; here->BSIM4cddb = 0.0; here->BSIM4cdsb = 0.0; here->BSIM4cbgb = -here->BSIM4cggb; here->BSIM4cbdb = 0.0; here->BSIM4cbsb = -here->BSIM4cgsb; } /* Vgst <= 0.0, end of depletion */ else { One_Third_CoxWL = CoxWL / 3.0; Two_Third_CoxWL = 2.0 * One_Third_CoxWL; AbulkCV = Abulk0 * pParam->BSIM4abulkCVfactor; dAbulkCV_dVb = pParam->BSIM4abulkCVfactor * dAbulk0_dVb*dVbseff_dVb; dVdsat_dVg = 1.0 / AbulkCV; /*4.6.2*/ Vdsat = Vgst * dVdsat_dVg; dVdsat_dVb = - (Vdsat * dAbulkCV_dVb + dVth_dVb)* dVdsat_dVg; if (model->BSIM4xpart > 0.5) { /* 0/100 Charge partition model */ if (Vdsat <= Vds) { /* saturation region */ T1 = Vdsat / 3.0; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4phi - T1); T2 = -Two_Third_CoxWL * Vgst; qbulk = -(qgate + T2); qdrn = 0.0; here->BSIM4cggb = One_Third_CoxWL * (3.0 - dVdsat_dVg) * dVgs_eff_dVg; T2 = -One_Third_CoxWL * dVdsat_dVb; here->BSIM4cgsb = -(here->BSIM4cggb + T2); here->BSIM4cgdb = 0.0; here->BSIM4cdgb = 0.0; here->BSIM4cddb = 0.0; here->BSIM4cdsb = 0.0; here->BSIM4cbgb = -(here->BSIM4cggb - Two_Third_CoxWL * dVgs_eff_dVg); T3 = -(T2 + Two_Third_CoxWL * dVth_dVb); here->BSIM4cbsb = -(here->BSIM4cbgb + T3); here->BSIM4cbdb = 0.0; } else { /* linear region */ Alphaz = Vgst / Vdsat; T1 = 2.0 * Vdsat - Vds; T2 = Vds / (3.0 * T1); T3 = T2 * Vds; T9 = 0.25 * CoxWL; T4 = T9 * Alphaz; T7 = 2.0 * Vds - T1 - 3.0 * T3; T8 = T3 - T1 - 2.0 * Vds; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4phi - 0.5 * (Vds - T3)); T10 = T4 * T8; qdrn = T4 * T7; qbulk = -(qgate + qdrn + T10); T5 = T3 / T1; here->BSIM4cggb = CoxWL * (1.0 - T5 * dVdsat_dVg) * dVgs_eff_dVg; T11 = -CoxWL * T5 * dVdsat_dVb; here->BSIM4cgdb = CoxWL * (T2 - 0.5 + 0.5 * T5); here->BSIM4cgsb = -(here->BSIM4cggb + T11 + here->BSIM4cgdb); T6 = 1.0 / Vdsat; dAlphaz_dVg = T6 * (1.0 - Alphaz * dVdsat_dVg); dAlphaz_dVb = -T6 * (dVth_dVb + Alphaz * dVdsat_dVb); T7 = T9 * T7; T8 = T9 * T8; T9 = 2.0 * T4 * (1.0 - 3.0 * T5); here->BSIM4cdgb = (T7 * dAlphaz_dVg - T9 * dVdsat_dVg) * dVgs_eff_dVg; T12 = T7 * dAlphaz_dVb - T9 * dVdsat_dVb; here->BSIM4cddb = T4 * (3.0 - 6.0 * T2 - 3.0 * T5); here->BSIM4cdsb = -(here->BSIM4cdgb + T12 + here->BSIM4cddb); T9 = 2.0 * T4 * (1.0 + T5); T10 = (T8 * dAlphaz_dVg - T9 * dVdsat_dVg) * dVgs_eff_dVg; T11 = T8 * dAlphaz_dVb - T9 * dVdsat_dVb; T12 = T4 * (2.0 * T2 + T5 - 1.0); T0 = -(T10 + T11 + T12); here->BSIM4cbgb = -(here->BSIM4cggb + here->BSIM4cdgb + T10); here->BSIM4cbdb = -(here->BSIM4cgdb + here->BSIM4cddb + T12); here->BSIM4cbsb = -(here->BSIM4cgsb + here->BSIM4cdsb + T0); } } else if (model->BSIM4xpart < 0.5) { /* 40/60 Charge partition model */ if (Vds >= Vdsat) { /* saturation region */ T1 = Vdsat / 3.0; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4phi - T1); T2 = -Two_Third_CoxWL * Vgst; qbulk = -(qgate + T2); qdrn = 0.4 * T2; here->BSIM4cggb = One_Third_CoxWL * (3.0 - dVdsat_dVg) * dVgs_eff_dVg; T2 = -One_Third_CoxWL * dVdsat_dVb; here->BSIM4cgsb = -(here->BSIM4cggb + T2); here->BSIM4cgdb = 0.0; T3 = 0.4 * Two_Third_CoxWL; here->BSIM4cdgb = -T3 * dVgs_eff_dVg; here->BSIM4cddb = 0.0; T4 = T3 * dVth_dVb; here->BSIM4cdsb = -(T4 + here->BSIM4cdgb); here->BSIM4cbgb = -(here->BSIM4cggb - Two_Third_CoxWL * dVgs_eff_dVg); T3 = -(T2 + Two_Third_CoxWL * dVth_dVb); here->BSIM4cbsb = -(here->BSIM4cbgb + T3); here->BSIM4cbdb = 0.0; } else { /* linear region */ Alphaz = Vgst / Vdsat; T1 = 2.0 * Vdsat - Vds; T2 = Vds / (3.0 * T1); T3 = T2 * Vds; T9 = 0.25 * CoxWL; T4 = T9 * Alphaz; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4phi - 0.5 * (Vds - T3)); T5 = T3 / T1; here->BSIM4cggb = CoxWL * (1.0 - T5 * dVdsat_dVg) * dVgs_eff_dVg; tmp = -CoxWL * T5 * dVdsat_dVb; here->BSIM4cgdb = CoxWL * (T2 - 0.5 + 0.5 * T5); here->BSIM4cgsb = -(here->BSIM4cggb + here->BSIM4cgdb + tmp); T6 = 1.0 / Vdsat; dAlphaz_dVg = T6 * (1.0 - Alphaz * dVdsat_dVg); dAlphaz_dVb = -T6 * (dVth_dVb + Alphaz * dVdsat_dVb); T6 = 8.0 * Vdsat * Vdsat - 6.0 * Vdsat * Vds + 1.2 * Vds * Vds; T8 = T2 / T1; T7 = Vds - T1 - T8 * T6; qdrn = T4 * T7; T7 *= T9; tmp = T8 / T1; tmp1 = T4 * (2.0 - 4.0 * tmp * T6 + T8 * (16.0 * Vdsat - 6.0 * Vds)); here->BSIM4cdgb = (T7 * dAlphaz_dVg - tmp1 * dVdsat_dVg) * dVgs_eff_dVg; T10 = T7 * dAlphaz_dVb - tmp1 * dVdsat_dVb; here->BSIM4cddb = T4 * (2.0 - (1.0 / (3.0 * T1 * T1) + 2.0 * tmp) * T6 + T8 * (6.0 * Vdsat - 2.4 * Vds)); here->BSIM4cdsb = -(here->BSIM4cdgb + T10 + here->BSIM4cddb); T7 = 2.0 * (T1 + T3); qbulk = -(qgate - T4 * T7); T7 *= T9; T0 = 4.0 * T4 * (1.0 - T5); T12 = (-T7 * dAlphaz_dVg - T0 * dVdsat_dVg) * dVgs_eff_dVg - here->BSIM4cdgb; /*4.6.2*/ T11 = -T7 * dAlphaz_dVb - T10 - T0 * dVdsat_dVb; T10 = -4.0 * T4 * (T2 - 0.5 + 0.5 * T5) - here->BSIM4cddb; tmp = -(T10 + T11 + T12); here->BSIM4cbgb = -(here->BSIM4cggb + here->BSIM4cdgb + T12); here->BSIM4cbdb = -(here->BSIM4cgdb + here->BSIM4cddb + T10); here->BSIM4cbsb = -(here->BSIM4cgsb + here->BSIM4cdsb + tmp); } } else { /* 50/50 partitioning */ if (Vds >= Vdsat) { /* saturation region */ T1 = Vdsat / 3.0; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4phi - T1); T2 = -Two_Third_CoxWL * Vgst; qbulk = -(qgate + T2); qdrn = 0.5 * T2; here->BSIM4cggb = One_Third_CoxWL * (3.0 - dVdsat_dVg) * dVgs_eff_dVg; T2 = -One_Third_CoxWL * dVdsat_dVb; here->BSIM4cgsb = -(here->BSIM4cggb + T2); here->BSIM4cgdb = 0.0; here->BSIM4cdgb = -One_Third_CoxWL * dVgs_eff_dVg; here->BSIM4cddb = 0.0; T4 = One_Third_CoxWL * dVth_dVb; here->BSIM4cdsb = -(T4 + here->BSIM4cdgb); here->BSIM4cbgb = -(here->BSIM4cggb - Two_Third_CoxWL * dVgs_eff_dVg); T3 = -(T2 + Two_Third_CoxWL * dVth_dVb); here->BSIM4cbsb = -(here->BSIM4cbgb + T3); here->BSIM4cbdb = 0.0; } else { /* linear region */ Alphaz = Vgst / Vdsat; T1 = 2.0 * Vdsat - Vds; T2 = Vds / (3.0 * T1); T3 = T2 * Vds; T9 = 0.25 * CoxWL; T4 = T9 * Alphaz; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4phi - 0.5 * (Vds - T3)); T5 = T3 / T1; here->BSIM4cggb = CoxWL * (1.0 - T5 * dVdsat_dVg) * dVgs_eff_dVg; tmp = -CoxWL * T5 * dVdsat_dVb; here->BSIM4cgdb = CoxWL * (T2 - 0.5 + 0.5 * T5); here->BSIM4cgsb = -(here->BSIM4cggb + here->BSIM4cgdb + tmp); T6 = 1.0 / Vdsat; dAlphaz_dVg = T6 * (1.0 - Alphaz * dVdsat_dVg); dAlphaz_dVb = -T6 * (dVth_dVb + Alphaz * dVdsat_dVb); T7 = T1 + T3; qdrn = -T4 * T7; qbulk = - (qgate + qdrn + qdrn); T7 *= T9; T0 = T4 * (2.0 * T5 - 2.0); here->BSIM4cdgb = (T0 * dVdsat_dVg - T7 * dAlphaz_dVg) * dVgs_eff_dVg; T12 = T0 * dVdsat_dVb - T7 * dAlphaz_dVb; here->BSIM4cddb = T4 * (1.0 - 2.0 * T2 - T5); here->BSIM4cdsb = -(here->BSIM4cdgb + T12 + here->BSIM4cddb); here->BSIM4cbgb = -(here->BSIM4cggb + 2.0 * here->BSIM4cdgb); here->BSIM4cbdb = -(here->BSIM4cgdb + 2.0 * here->BSIM4cddb); here->BSIM4cbsb = -(here->BSIM4cgsb + 2.0 * here->BSIM4cdsb); } /* end of linear region */ } /* end of 50/50 partition */ } /* end of inversion */ } /* end of capMod=0 */ else { if (Vbseff < 0.0) { VbseffCV = Vbseff; dVbseffCV_dVb = 1.0; } else { VbseffCV = pParam->BSIM4phi - Phis; dVbseffCV_dVb = -dPhis_dVb; } CoxWL = model->BSIM4coxe * pParam->BSIM4weffCV * pParam->BSIM4leffCV * here->BSIM4nf; if(model->BSIM4cvchargeMod == 0) { /* Seperate VgsteffCV with noff and voffcv */ noff = n * pParam->BSIM4noff; dnoff_dVd = pParam->BSIM4noff * dn_dVd; dnoff_dVb = pParam->BSIM4noff * dn_dVb; T0 = Vtm * noff; voffcv = pParam->BSIM4voffcv; VgstNVt = (Vgst - voffcv) / T0; if (VgstNVt > EXP_THRESHOLD) { Vgsteff = Vgst - voffcv; dVgsteff_dVg = dVgs_eff_dVg; dVgsteff_dVd = -dVth_dVd; dVgsteff_dVb = -dVth_dVb; } else if (VgstNVt < -EXP_THRESHOLD) { Vgsteff = T0 * log(1.0 + MIN_EXP); dVgsteff_dVg = 0.0; dVgsteff_dVd = Vgsteff / noff; dVgsteff_dVb = dVgsteff_dVd * dnoff_dVb; dVgsteff_dVd *= dnoff_dVd; } else { ExpVgst = exp(VgstNVt); Vgsteff = T0 * log(1.0 + ExpVgst); dVgsteff_dVg = ExpVgst / (1.0 + ExpVgst); dVgsteff_dVd = -dVgsteff_dVg * (dVth_dVd + (Vgst - voffcv) / noff * dnoff_dVd) + Vgsteff / noff * dnoff_dVd; dVgsteff_dVb = -dVgsteff_dVg * (dVth_dVb + (Vgst - voffcv) / noff * dnoff_dVb) + Vgsteff / noff * dnoff_dVb; dVgsteff_dVg *= dVgs_eff_dVg; } /* End of VgsteffCV for cvchargeMod = 0 */ } else { T0 = n * Vtm; T1 = pParam->BSIM4mstarcv * Vgst; T2 = T1 / T0; if (T2 > EXP_THRESHOLD) { T10 = T1; dT10_dVg = pParam->BSIM4mstarcv * dVgs_eff_dVg; dT10_dVd = -dVth_dVd * pParam->BSIM4mstarcv; dT10_dVb = -dVth_dVb * pParam->BSIM4mstarcv; } else if (T2 < -EXP_THRESHOLD) { T10 = Vtm * log(1.0 + MIN_EXP); dT10_dVg = 0.0; dT10_dVd = T10 * dn_dVd; dT10_dVb = T10 * dn_dVb; T10 *= n; } else { ExpVgst = exp(T2); T3 = Vtm * log(1.0 + ExpVgst); T10 = n * T3; dT10_dVg = pParam->BSIM4mstarcv * ExpVgst / (1.0 + ExpVgst); dT10_dVb = T3 * dn_dVb - dT10_dVg * (dVth_dVb + Vgst * dn_dVb / n); dT10_dVd = T3 * dn_dVd - dT10_dVg * (dVth_dVd + Vgst * dn_dVd / n); dT10_dVg *= dVgs_eff_dVg; } T1 = pParam->BSIM4voffcbncv - (1.0 - pParam->BSIM4mstarcv) * Vgst; T2 = T1 / T0; if (T2 < -EXP_THRESHOLD) { T3 = model->BSIM4coxe * MIN_EXP / pParam->BSIM4cdep0; T9 = pParam->BSIM4mstarcv + T3 * n; dT9_dVg = 0.0; dT9_dVd = dn_dVd * T3; dT9_dVb = dn_dVb * T3; } else if (T2 > EXP_THRESHOLD) { T3 = model->BSIM4coxe * MAX_EXP / pParam->BSIM4cdep0; T9 = pParam->BSIM4mstarcv + T3 * n; dT9_dVg = 0.0; dT9_dVd = dn_dVd * T3; dT9_dVb = dn_dVb * T3; } else { ExpVgst = exp(T2); T3 = model->BSIM4coxe / pParam->BSIM4cdep0; T4 = T3 * ExpVgst; T5 = T1 * T4 / T0; T9 = pParam->BSIM4mstarcv + n * T4; dT9_dVg = T3 * (pParam->BSIM4mstarcv - 1.0) * ExpVgst / Vtm; dT9_dVb = T4 * dn_dVb - dT9_dVg * dVth_dVb - T5 * dn_dVb; dT9_dVd = T4 * dn_dVd - dT9_dVg * dVth_dVd - T5 * dn_dVd; dT9_dVg *= dVgs_eff_dVg; } Vgsteff = T10 / T9; T11 = T9 * T9; dVgsteff_dVg = (T9 * dT10_dVg - T10 * dT9_dVg) / T11; dVgsteff_dVd = (T9 * dT10_dVd - T10 * dT9_dVd) / T11; dVgsteff_dVb = (T9 * dT10_dVb - T10 * dT9_dVb) / T11; /* End of VgsteffCV for cvchargeMod = 1 */ } if (model->BSIM4capMod == 1) { Vfb = here->BSIM4vfbzb; V3 = Vfb - Vgs_eff + VbseffCV - DELTA_3; if (Vfb <= 0.0) T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * Vfb); else T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * Vfb); T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = Vfb - 0.5 * (V3 + T0); dVfbeff_dVg = T1 * dVgs_eff_dVg; dVfbeff_dVb = -T1 * dVbseffCV_dVb; Qac0 = CoxWL * (Vfbeff - Vfb); dQac0_dVg = CoxWL * dVfbeff_dVg; dQac0_dVb = CoxWL * dVfbeff_dVb; T0 = 0.5 * pParam->BSIM4k1ox; T3 = Vgs_eff - Vfbeff - VbseffCV - Vgsteff; if (pParam->BSIM4k1ox == 0.0) { T1 = 0.0; T2 = 0.0; } else if (T3 < 0.0) { T1 = T0 + T3 / pParam->BSIM4k1ox; T2 = CoxWL; } else { T1 = sqrt(T0 * T0 + T3); T2 = CoxWL * T0 / T1; } Qsub0 = CoxWL * pParam->BSIM4k1ox * (T1 - T0); dQsub0_dVg = T2 * (dVgs_eff_dVg - dVfbeff_dVg - dVgsteff_dVg); dQsub0_dVd = -T2 * dVgsteff_dVd; dQsub0_dVb = -T2 * (dVfbeff_dVb + dVbseffCV_dVb + dVgsteff_dVb); AbulkCV = Abulk0 * pParam->BSIM4abulkCVfactor; dAbulkCV_dVb = pParam->BSIM4abulkCVfactor * dAbulk0_dVb; VdsatCV = Vgsteff / AbulkCV; T0 = VdsatCV - Vds - DELTA_4; dT0_dVg = 1.0 / AbulkCV; dT0_dVb = -VdsatCV * dAbulkCV_dVb / AbulkCV; T1 = sqrt(T0 * T0 + 4.0 * DELTA_4 * VdsatCV); dT1_dVg = (T0 + DELTA_4 + DELTA_4) / T1; dT1_dVd = -T0 / T1; dT1_dVb = dT1_dVg * dT0_dVb; dT1_dVg *= dT0_dVg; if (T0 >= 0.0) { VdseffCV = VdsatCV - 0.5 * (T0 + T1); dVdseffCV_dVg = 0.5 * (dT0_dVg - dT1_dVg); dVdseffCV_dVd = 0.5 * (1.0 - dT1_dVd); dVdseffCV_dVb = 0.5 * (dT0_dVb - dT1_dVb); } else { T3 = (DELTA_4 + DELTA_4) / (T1 - T0); T4 = 1.0 - T3; T5 = VdsatCV * T3 / (T1 - T0); VdseffCV = VdsatCV * T4; dVdseffCV_dVg = dT0_dVg * T4 + T5 * (dT1_dVg - dT0_dVg); dVdseffCV_dVd = T5 * (dT1_dVd + 1.0); dVdseffCV_dVb = dT0_dVb * (T4 - T5) + T5 * dT1_dVb; } if (Vds == 0.0) { VdseffCV = 0.0; dVdseffCV_dVg = 0.0; dVdseffCV_dVb = 0.0; } T0 = AbulkCV * VdseffCV; T1 = 12.0 * (Vgsteff - 0.5 * T0 + 1.0e-20); T2 = VdseffCV / T1; T3 = T0 * T2; T4 = (1.0 - 12.0 * T2 * T2 * AbulkCV); T5 = (6.0 * T0 * (4.0 * Vgsteff - T0) / (T1 * T1) - 0.5); T6 = 12.0 * T2 * T2 * Vgsteff; qgate = CoxWL * (Vgsteff - 0.5 * VdseffCV + T3); Cgg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); Cgd1 = CoxWL * T5 * dVdseffCV_dVd + Cgg1 * dVgsteff_dVd; Cgb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Cgg1 * dVgsteff_dVb; Cgg1 *= dVgsteff_dVg; T7 = 1.0 - AbulkCV; qbulk = CoxWL * T7 * (0.5 * VdseffCV - T3); T4 = -T7 * (T4 - 1.0); T5 = -T7 * T5; T6 = -(T7 * T6 + (0.5 * VdseffCV - T3)); Cbg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); Cbd1 = CoxWL * T5 * dVdseffCV_dVd + Cbg1 * dVgsteff_dVd; Cbb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Cbg1 * dVgsteff_dVb; Cbg1 *= dVgsteff_dVg; if (model->BSIM4xpart > 0.5) { /* 0/100 Charge petition model */ T1 = T1 + T1; qsrc = -CoxWL * (0.5 * Vgsteff + 0.25 * T0 - T0 * T0 / T1); T7 = (4.0 * Vgsteff - T0) / (T1 * T1); T4 = -(0.5 + 24.0 * T0 * T0 / (T1 * T1)); T5 = -(0.25 * AbulkCV - 12.0 * AbulkCV * T0 * T7); T6 = -(0.25 * VdseffCV - 12.0 * T0 * VdseffCV * T7); Csg = CoxWL * (T4 + T5 * dVdseffCV_dVg); Csd = CoxWL * T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd; Csb = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Csg * dVgsteff_dVb; Csg *= dVgsteff_dVg; } else if (model->BSIM4xpart < 0.5) { /* 40/60 Charge petition model */ T1 = T1 / 12.0; T2 = 0.5 * CoxWL / (T1 * T1); T3 = Vgsteff * (2.0 * T0 * T0 / 3.0 + Vgsteff * (Vgsteff - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T2 * T3; T7 = 4.0 / 3.0 * Vgsteff * (Vgsteff - T0) + 0.4 * T0 * T0; T4 = -2.0 * qsrc / T1 - T2 * (Vgsteff * (3.0 * Vgsteff - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0); T5 = (qsrc / T1 + T2 * T7) * AbulkCV; T6 = (qsrc / T1 * VdseffCV + T2 * T7 * VdseffCV); Csg = (T4 + T5 * dVdseffCV_dVg); Csd = T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd; Csb = (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Csg * dVgsteff_dVb; Csg *= dVgsteff_dVg; } else { /* 50/50 Charge petition model */ qsrc = -0.5 * (qgate + qbulk); Csg = -0.5 * (Cgg1 + Cbg1); Csb = -0.5 * (Cgb1 + Cbb1); Csd = -0.5 * (Cgd1 + Cbd1); } qgate += Qac0 + Qsub0; qbulk -= (Qac0 + Qsub0); qdrn = -(qgate + qbulk + qsrc); Cgg = dQac0_dVg + dQsub0_dVg + Cgg1; Cgd = dQsub0_dVd + Cgd1; Cgb = dQac0_dVb + dQsub0_dVb + Cgb1; Cbg = Cbg1 - dQac0_dVg - dQsub0_dVg; Cbd = Cbd1 - dQsub0_dVd; Cbb = Cbb1 - dQac0_dVb - dQsub0_dVb; Cgb *= dVbseff_dVb; Cbb *= dVbseff_dVb; Csb *= dVbseff_dVb; here->BSIM4cggb = Cgg; here->BSIM4cgsb = -(Cgg + Cgd + Cgb); here->BSIM4cgdb = Cgd; here->BSIM4cdgb = -(Cgg + Cbg + Csg); here->BSIM4cdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb + Csg + Csd + Csb); here->BSIM4cddb = -(Cgd + Cbd + Csd); here->BSIM4cbgb = Cbg; here->BSIM4cbsb = -(Cbg + Cbd + Cbb); here->BSIM4cbdb = Cbd; } /* Charge-Thickness capMod (CTM) begins */ else if (model->BSIM4capMod == 2) { V3 = here->BSIM4vfbzb - Vgs_eff + VbseffCV - DELTA_3; if (here->BSIM4vfbzb <= 0.0) T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * here->BSIM4vfbzb); else T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * here->BSIM4vfbzb); T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = here->BSIM4vfbzb - 0.5 * (V3 + T0); dVfbeff_dVg = T1 * dVgs_eff_dVg; dVfbeff_dVb = -T1 * dVbseffCV_dVb; Cox = here->BSIM4coxp; Tox = 1.0e8 * here->BSIM4toxp; T0 = (Vgs_eff - VbseffCV - here->BSIM4vfbzb) / Tox; dT0_dVg = dVgs_eff_dVg / Tox; dT0_dVb = -dVbseffCV_dVb / Tox; tmp = T0 * pParam->BSIM4acde; if ((-EXP_THRESHOLD < tmp) && (tmp < EXP_THRESHOLD)) { Tcen = pParam->BSIM4ldeb * exp(tmp); dTcen_dVg = pParam->BSIM4acde * Tcen; dTcen_dVb = dTcen_dVg * dT0_dVb; dTcen_dVg *= dT0_dVg; } else if (tmp <= -EXP_THRESHOLD) { Tcen = pParam->BSIM4ldeb * MIN_EXP; dTcen_dVg = dTcen_dVb = 0.0; } else { Tcen = pParam->BSIM4ldeb * MAX_EXP; dTcen_dVg = dTcen_dVb = 0.0; } LINK = 1.0e-3 * here->BSIM4toxp; V3 = pParam->BSIM4ldeb - Tcen - LINK; V4 = sqrt(V3 * V3 + 4.0 * LINK * pParam->BSIM4ldeb); Tcen = pParam->BSIM4ldeb - 0.5 * (V3 + V4); T1 = 0.5 * (1.0 + V3 / V4); dTcen_dVg *= T1; dTcen_dVb *= T1; Ccen = epssub / Tcen; T2 = Cox / (Cox + Ccen); Coxeff = T2 * Ccen; T3 = -Ccen / Tcen; dCoxeff_dVg = T2 * T2 * T3; dCoxeff_dVb = dCoxeff_dVg * dTcen_dVb; dCoxeff_dVg *= dTcen_dVg; CoxWLcen = CoxWL * Coxeff / model->BSIM4coxe; Qac0 = CoxWLcen * (Vfbeff - here->BSIM4vfbzb); QovCox = Qac0 / Coxeff; dQac0_dVg = CoxWLcen * dVfbeff_dVg + QovCox * dCoxeff_dVg; dQac0_dVb = CoxWLcen * dVfbeff_dVb + QovCox * dCoxeff_dVb; T0 = 0.5 * pParam->BSIM4k1ox; T3 = Vgs_eff - Vfbeff - VbseffCV - Vgsteff; if (pParam->BSIM4k1ox == 0.0) { T1 = 0.0; T2 = 0.0; } else if (T3 < 0.0) { T1 = T0 + T3 / pParam->BSIM4k1ox; T2 = CoxWLcen; } else { T1 = sqrt(T0 * T0 + T3); T2 = CoxWLcen * T0 / T1; } Qsub0 = CoxWLcen * pParam->BSIM4k1ox * (T1 - T0); QovCox = Qsub0 / Coxeff; dQsub0_dVg = T2 * (dVgs_eff_dVg - dVfbeff_dVg - dVgsteff_dVg) + QovCox * dCoxeff_dVg; dQsub0_dVd = -T2 * dVgsteff_dVd; dQsub0_dVb = -T2 * (dVfbeff_dVb + dVbseffCV_dVb + dVgsteff_dVb) + QovCox * dCoxeff_dVb; /* Gate-bias dependent delta Phis begins */ if (pParam->BSIM4k1ox <= 0.0) { Denomi = 0.25 * pParam->BSIM4moin * Vtm; T0 = 0.5 * pParam->BSIM4sqrtPhi; } else { Denomi = pParam->BSIM4moin * Vtm * pParam->BSIM4k1ox * pParam->BSIM4k1ox; T0 = pParam->BSIM4k1ox * pParam->BSIM4sqrtPhi; } T1 = 2.0 * T0 + Vgsteff; DeltaPhi = Vtm * log(1.0 + T1 * Vgsteff / Denomi); dDeltaPhi_dVg = 2.0 * Vtm * (T1 -T0) / (Denomi + T1 * Vgsteff); /* End of delta Phis */ /* VgDP = Vgsteff - DeltaPhi */ T0 = Vgsteff - DeltaPhi - 0.001; dT0_dVg = 1.0 - dDeltaPhi_dVg; T1 = sqrt(T0 * T0 + Vgsteff * 0.004); VgDP = 0.5 * (T0 + T1); dVgDP_dVg = 0.5 * (dT0_dVg + (T0 * dT0_dVg + 0.002) / T1); Tox += Tox; /* WDLiu: Tcen reevaluated below due to different Vgsteff */ T0 = (Vgsteff + here->BSIM4vtfbphi2) / Tox; tmp = exp(model->BSIM4bdos * 0.7 * log(T0)); T1 = 1.0 + tmp; T2 = model->BSIM4bdos * 0.7 * tmp / (T0 * Tox); Tcen = model->BSIM4ados * 1.9e-9 / T1; dTcen_dVg = -Tcen * T2 / T1; dTcen_dVd = dTcen_dVg * dVgsteff_dVd; dTcen_dVb = dTcen_dVg * dVgsteff_dVb; dTcen_dVg *= dVgsteff_dVg; Ccen = epssub / Tcen; T0 = Cox / (Cox + Ccen); Coxeff = T0 * Ccen; T1 = -Ccen / Tcen; dCoxeff_dVg = T0 * T0 * T1; dCoxeff_dVd = dCoxeff_dVg * dTcen_dVd; dCoxeff_dVb = dCoxeff_dVg * dTcen_dVb; dCoxeff_dVg *= dTcen_dVg; CoxWLcen = CoxWL * Coxeff / model->BSIM4coxe; AbulkCV = Abulk0 * pParam->BSIM4abulkCVfactor; dAbulkCV_dVb = pParam->BSIM4abulkCVfactor * dAbulk0_dVb; VdsatCV = VgDP / AbulkCV; T0 = VdsatCV - Vds - DELTA_4; dT0_dVg = dVgDP_dVg / AbulkCV; dT0_dVb = -VdsatCV * dAbulkCV_dVb / AbulkCV; T1 = sqrt(T0 * T0 + 4.0 * DELTA_4 * VdsatCV); dT1_dVg = (T0 + DELTA_4 + DELTA_4) / T1; dT1_dVd = -T0 / T1; dT1_dVb = dT1_dVg * dT0_dVb; dT1_dVg *= dT0_dVg; if (T0 >= 0.0) { VdseffCV = VdsatCV - 0.5 * (T0 + T1); dVdseffCV_dVg = 0.5 * (dT0_dVg - dT1_dVg); dVdseffCV_dVd = 0.5 * (1.0 - dT1_dVd); dVdseffCV_dVb = 0.5 * (dT0_dVb - dT1_dVb); } else { T3 = (DELTA_4 + DELTA_4) / (T1 - T0); T4 = 1.0 - T3; T5 = VdsatCV * T3 / (T1 - T0); VdseffCV = VdsatCV * T4; dVdseffCV_dVg = dT0_dVg * T4 + T5 * (dT1_dVg - dT0_dVg); dVdseffCV_dVd = T5 * (dT1_dVd + 1.0); dVdseffCV_dVb = dT0_dVb * (T4 - T5) + T5 * dT1_dVb; } if (Vds == 0.0) { VdseffCV = 0.0; dVdseffCV_dVg = 0.0; dVdseffCV_dVb = 0.0; } T0 = AbulkCV * VdseffCV; T1 = VgDP; T2 = 12.0 * (T1 - 0.5 * T0 + 1.0e-20); T3 = T0 / T2; T4 = 1.0 - 12.0 * T3 * T3; T5 = AbulkCV * (6.0 * T0 * (4.0 * T1 - T0) / (T2 * T2) - 0.5); T6 = T5 * VdseffCV / AbulkCV; qgate = CoxWLcen * (T1 - T0 * (0.5 - T3)); QovCox = qgate / Coxeff; Cgg1 = CoxWLcen * (T4 * dVgDP_dVg + T5 * dVdseffCV_dVg); Cgd1 = CoxWLcen * T5 * dVdseffCV_dVd + Cgg1 * dVgsteff_dVd + QovCox * dCoxeff_dVd; Cgb1 = CoxWLcen * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Cgg1 * dVgsteff_dVb + QovCox * dCoxeff_dVb; Cgg1 = Cgg1 * dVgsteff_dVg + QovCox * dCoxeff_dVg; T7 = 1.0 - AbulkCV; T8 = T2 * T2; T9 = 12.0 * T7 * T0 * T0 / (T8 * AbulkCV); T10 = T9 * dVgDP_dVg; T11 = -T7 * T5 / AbulkCV; T12 = -(T9 * T1 / AbulkCV + VdseffCV * (0.5 - T0 / T2)); qbulk = CoxWLcen * T7 * (0.5 * VdseffCV - T0 * VdseffCV / T2); QovCox = qbulk / Coxeff; Cbg1 = CoxWLcen * (T10 + T11 * dVdseffCV_dVg); Cbd1 = CoxWLcen * T11 * dVdseffCV_dVd + Cbg1 * dVgsteff_dVd + QovCox * dCoxeff_dVd; Cbb1 = CoxWLcen * (T11 * dVdseffCV_dVb + T12 * dAbulkCV_dVb) + Cbg1 * dVgsteff_dVb + QovCox * dCoxeff_dVb; Cbg1 = Cbg1 * dVgsteff_dVg + QovCox * dCoxeff_dVg; if (model->BSIM4xpart > 0.5) { /* 0/100 partition */ qsrc = -CoxWLcen * (T1 / 2.0 + T0 / 4.0 - 0.5 * T0 * T0 / T2); QovCox = qsrc / Coxeff; T2 += T2; T3 = T2 * T2; T7 = -(0.25 - 12.0 * T0 * (4.0 * T1 - T0) / T3); T4 = -(0.5 + 24.0 * T0 * T0 / T3) * dVgDP_dVg; T5 = T7 * AbulkCV; T6 = T7 * VdseffCV; Csg = CoxWLcen * (T4 + T5 * dVdseffCV_dVg); Csd = CoxWLcen * T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd + QovCox * dCoxeff_dVd; Csb = CoxWLcen * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Csg * dVgsteff_dVb + QovCox * dCoxeff_dVb; Csg = Csg * dVgsteff_dVg + QovCox * dCoxeff_dVg; } else if (model->BSIM4xpart < 0.5) { /* 40/60 partition */ T2 = T2 / 12.0; T3 = 0.5 * CoxWLcen / (T2 * T2); T4 = T1 * (2.0 * T0 * T0 / 3.0 + T1 * (T1 - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T3 * T4; QovCox = qsrc / Coxeff; T8 = 4.0 / 3.0 * T1 * (T1 - T0) + 0.4 * T0 * T0; T5 = -2.0 * qsrc / T2 - T3 * (T1 * (3.0 * T1 - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0); T6 = AbulkCV * (qsrc / T2 + T3 * T8); T7 = T6 * VdseffCV / AbulkCV; Csg = T5 * dVgDP_dVg + T6 * dVdseffCV_dVg; Csd = Csg * dVgsteff_dVd + T6 * dVdseffCV_dVd + QovCox * dCoxeff_dVd; Csb = Csg * dVgsteff_dVb + T6 * dVdseffCV_dVb + T7 * dAbulkCV_dVb + QovCox * dCoxeff_dVb; Csg = Csg * dVgsteff_dVg + QovCox * dCoxeff_dVg; } else { /* 50/50 partition */ qsrc = -0.5 * qgate; Csg = -0.5 * Cgg1; Csd = -0.5 * Cgd1; Csb = -0.5 * Cgb1; } qgate += Qac0 + Qsub0 - qbulk; qbulk -= (Qac0 + Qsub0); qdrn = -(qgate + qbulk + qsrc); Cbg = Cbg1 - dQac0_dVg - dQsub0_dVg; Cbd = Cbd1 - dQsub0_dVd; Cbb = Cbb1 - dQac0_dVb - dQsub0_dVb; Cgg = Cgg1 - Cbg; Cgd = Cgd1 - Cbd; Cgb = Cgb1 - Cbb; Cgb *= dVbseff_dVb; Cbb *= dVbseff_dVb; Csb *= dVbseff_dVb; here->BSIM4cggb = Cgg; here->BSIM4cgsb = -(Cgg + Cgd + Cgb); here->BSIM4cgdb = Cgd; here->BSIM4cdgb = -(Cgg + Cbg + Csg); here->BSIM4cdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb + Csg + Csd + Csb); here->BSIM4cddb = -(Cgd + Cbd + Csd); here->BSIM4cbgb = Cbg; here->BSIM4cbsb = -(Cbg + Cbd + Cbb); here->BSIM4cbdb = Cbd; } /* End of CTM */ } here->BSIM4csgb = - here->BSIM4cggb - here->BSIM4cdgb - here->BSIM4cbgb; here->BSIM4csdb = - here->BSIM4cgdb - here->BSIM4cddb - here->BSIM4cbdb; here->BSIM4cssb = - here->BSIM4cgsb - here->BSIM4cdsb - here->BSIM4cbsb; here->BSIM4cgbb = - here->BSIM4cgdb - here->BSIM4cggb - here->BSIM4cgsb; here->BSIM4cdbb = - here->BSIM4cddb - here->BSIM4cdgb - here->BSIM4cdsb; here->BSIM4cbbb = - here->BSIM4cbgb - here->BSIM4cbdb - here->BSIM4cbsb; here->BSIM4csbb = - here->BSIM4cgbb - here->BSIM4cdbb - here->BSIM4cbbb; here->BSIM4qgate = qgate; here->BSIM4qbulk = qbulk; here->BSIM4qdrn = qdrn; here->BSIM4qsrc = -(qgate + qbulk + qdrn); /* NQS begins */ if ((here->BSIM4trnqsMod) || (here->BSIM4acnqsMod)) { here->BSIM4qchqs = qcheq = -(qbulk + qgate); here->BSIM4cqgb = -(here->BSIM4cggb + here->BSIM4cbgb); here->BSIM4cqdb = -(here->BSIM4cgdb + here->BSIM4cbdb); here->BSIM4cqsb = -(here->BSIM4cgsb + here->BSIM4cbsb); here->BSIM4cqbb = -(here->BSIM4cqgb + here->BSIM4cqdb + here->BSIM4cqsb); CoxWL = model->BSIM4coxe * pParam->BSIM4weffCV * here->BSIM4nf * pParam->BSIM4leffCV; T1 = here->BSIM4gcrg / CoxWL; /* 1 / tau */ here->BSIM4gtau = T1 * ScalingFactor; if (here->BSIM4acnqsMod) here->BSIM4taunet = 1.0 / T1; *(ckt->CKTstate0 + here->BSIM4qcheq) = qcheq; if (ckt->CKTmode & MODEINITTRAN) *(ckt->CKTstate1 + here->BSIM4qcheq) = *(ckt->CKTstate0 + here->BSIM4qcheq); if (here->BSIM4trnqsMod) { error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4qcheq); if (error) return(error); } } finished: /* Calculate junction C-V */ if (ChargeComputationNeeded) { czbd = model->BSIM4DunitAreaTempJctCap * here->BSIM4Adeff; /* bug fix */ czbs = model->BSIM4SunitAreaTempJctCap * here->BSIM4Aseff; czbdsw = model->BSIM4DunitLengthSidewallTempJctCap * here->BSIM4Pdeff; czbdswg = model->BSIM4DunitLengthGateSidewallTempJctCap * pParam->BSIM4weffCJ * here->BSIM4nf; czbssw = model->BSIM4SunitLengthSidewallTempJctCap * here->BSIM4Pseff; czbsswg = model->BSIM4SunitLengthGateSidewallTempJctCap * pParam->BSIM4weffCJ * here->BSIM4nf; MJS = model->BSIM4SbulkJctBotGradingCoeff; MJSWS = model->BSIM4SbulkJctSideGradingCoeff; MJSWGS = model->BSIM4SbulkJctGateSideGradingCoeff; MJD = model->BSIM4DbulkJctBotGradingCoeff; MJSWD = model->BSIM4DbulkJctSideGradingCoeff; MJSWGD = model->BSIM4DbulkJctGateSideGradingCoeff; /* Source Bulk Junction */ if (vbs_jct == 0.0) { *(ckt->CKTstate0 + here->BSIM4qbs) = 0.0; here->BSIM4capbs = czbs + czbssw + czbsswg; } else if (vbs_jct < 0.0) { if (czbs > 0.0) { arg = 1.0 - vbs_jct / model->BSIM4PhiBS; if (MJS == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJS * log(arg)); *(ckt->CKTstate0 + here->BSIM4qbs) = model->BSIM4PhiBS * czbs * (1.0 - arg * sarg) / (1.0 - MJS); here->BSIM4capbs = czbs * sarg; } else { *(ckt->CKTstate0 + here->BSIM4qbs) = 0.0; here->BSIM4capbs = 0.0; } if (czbssw > 0.0) { arg = 1.0 - vbs_jct / model->BSIM4PhiBSWS; if (MJSWS == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSWS * log(arg)); *(ckt->CKTstate0 + here->BSIM4qbs) += model->BSIM4PhiBSWS * czbssw * (1.0 - arg * sarg) / (1.0 - MJSWS); here->BSIM4capbs += czbssw * sarg; } if (czbsswg > 0.0) { arg = 1.0 - vbs_jct / model->BSIM4PhiBSWGS; if (MJSWGS == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSWGS * log(arg)); *(ckt->CKTstate0 + here->BSIM4qbs) += model->BSIM4PhiBSWGS * czbsswg * (1.0 - arg * sarg) / (1.0 - MJSWGS); here->BSIM4capbs += czbsswg * sarg; } } else { T0 = czbs + czbssw + czbsswg; T1 = vbs_jct * (czbs * MJS / model->BSIM4PhiBS + czbssw * MJSWS / model->BSIM4PhiBSWS + czbsswg * MJSWGS / model->BSIM4PhiBSWGS); *(ckt->CKTstate0 + here->BSIM4qbs) = vbs_jct * (T0 + 0.5 * T1); here->BSIM4capbs = T0 + T1; } /* Drain Bulk Junction */ if (vbd_jct == 0.0) { *(ckt->CKTstate0 + here->BSIM4qbd) = 0.0; here->BSIM4capbd = czbd + czbdsw + czbdswg; } else if (vbd_jct < 0.0) { if (czbd > 0.0) { arg = 1.0 - vbd_jct / model->BSIM4PhiBD; if (MJD == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJD * log(arg)); *(ckt->CKTstate0 + here->BSIM4qbd) = model->BSIM4PhiBD* czbd * (1.0 - arg * sarg) / (1.0 - MJD); here->BSIM4capbd = czbd * sarg; } else { *(ckt->CKTstate0 + here->BSIM4qbd) = 0.0; here->BSIM4capbd = 0.0; } if (czbdsw > 0.0) { arg = 1.0 - vbd_jct / model->BSIM4PhiBSWD; if (MJSWD == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSWD * log(arg)); *(ckt->CKTstate0 + here->BSIM4qbd) += model->BSIM4PhiBSWD * czbdsw * (1.0 - arg * sarg) / (1.0 - MJSWD); here->BSIM4capbd += czbdsw * sarg; } if (czbdswg > 0.0) { arg = 1.0 - vbd_jct / model->BSIM4PhiBSWGD; if (MJSWGD == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSWGD * log(arg)); *(ckt->CKTstate0 + here->BSIM4qbd) += model->BSIM4PhiBSWGD * czbdswg * (1.0 - arg * sarg) / (1.0 - MJSWGD); here->BSIM4capbd += czbdswg * sarg; } } else { T0 = czbd + czbdsw + czbdswg; T1 = vbd_jct * (czbd * MJD / model->BSIM4PhiBD + czbdsw * MJSWD / model->BSIM4PhiBSWD + czbdswg * MJSWGD / model->BSIM4PhiBSWGD); *(ckt->CKTstate0 + here->BSIM4qbd) = vbd_jct * (T0 + 0.5 * T1); here->BSIM4capbd = T0 + T1; } } /* * check convergence */ if ((here->BSIM4off == 0) || (!(ckt->CKTmode & MODEINITFIX))) { if (Check == 1) { ckt->CKTnoncon++; #ifndef NEWCONV } else { if (here->BSIM4mode >= 0) { Idtot = here->BSIM4cd + here->BSIM4csub + here->BSIM4Igidl - here->BSIM4cbd; } else { Idtot = here->BSIM4cd + here->BSIM4cbd - here->BSIM4Igidl; /* bugfix */ } tol0 = ckt->CKTreltol * MAX(fabs(cdhat), fabs(Idtot)) + ckt->CKTabstol; tol1 = ckt->CKTreltol * MAX(fabs(cseshat), fabs(Isestot)) + ckt->CKTabstol; tol2 = ckt->CKTreltol * MAX(fabs(cdedhat), fabs(Idedtot)) + ckt->CKTabstol; tol3 = ckt->CKTreltol * MAX(fabs(cgshat), fabs(Igstot)) + ckt->CKTabstol; tol4 = ckt->CKTreltol * MAX(fabs(cgdhat), fabs(Igdtot)) + ckt->CKTabstol; tol5 = ckt->CKTreltol * MAX(fabs(cgbhat), fabs(Igbtot)) + ckt->CKTabstol; if ((fabs(cdhat - Idtot) >= tol0) || (fabs(cseshat - Isestot) >= tol1) || (fabs(cdedhat - Idedtot) >= tol2)) { ckt->CKTnoncon++; } else if ((fabs(cgshat - Igstot) >= tol3) || (fabs(cgdhat - Igdtot) >= tol4) || (fabs(cgbhat - Igbtot) >= tol5)) { ckt->CKTnoncon++; } else { Ibtot = here->BSIM4cbs + here->BSIM4cbd - here->BSIM4Igidl - here->BSIM4Igisl - here->BSIM4csub; tol6 = ckt->CKTreltol * MAX(fabs(cbhat), fabs(Ibtot)) + ckt->CKTabstol; if (fabs(cbhat - Ibtot) > tol6) { ckt->CKTnoncon++; } } #endif /* NEWCONV */ } } *(ckt->CKTstate0 + here->BSIM4vds) = vds; *(ckt->CKTstate0 + here->BSIM4vgs) = vgs; *(ckt->CKTstate0 + here->BSIM4vbs) = vbs; *(ckt->CKTstate0 + here->BSIM4vbd) = vbd; *(ckt->CKTstate0 + here->BSIM4vges) = vges; *(ckt->CKTstate0 + here->BSIM4vgms) = vgms; *(ckt->CKTstate0 + here->BSIM4vdbs) = vdbs; *(ckt->CKTstate0 + here->BSIM4vdbd) = vdbd; *(ckt->CKTstate0 + here->BSIM4vsbs) = vsbs; *(ckt->CKTstate0 + here->BSIM4vses) = vses; *(ckt->CKTstate0 + here->BSIM4vdes) = vdes; *(ckt->CKTstate0 + here->BSIM4qdef) = qdef; if (!ChargeComputationNeeded) goto line850; if (here->BSIM4rgateMod == 3) { vgdx = vgmd; vgsx = vgms; } else /* For rgateMod == 0, 1 and 2 */ { vgdx = vgd; vgsx = vgs; } if (model->BSIM4capMod == 0) { cgdo = pParam->BSIM4cgdo; qgdo = pParam->BSIM4cgdo * vgdx; cgso = pParam->BSIM4cgso; qgso = pParam->BSIM4cgso * vgsx; } else /* For both capMod == 1 and 2 */ { T0 = vgdx + DELTA_1; T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); T3 = pParam->BSIM4weffCV * pParam->BSIM4cgdl; T4 = sqrt(1.0 - 4.0 * T2 / pParam->BSIM4ckappad); cgdo = pParam->BSIM4cgdo + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgdo = (pParam->BSIM4cgdo + T3) * vgdx - T3 * (T2 + 0.5 * pParam->BSIM4ckappad * (T4 - 1.0)); T0 = vgsx + DELTA_1; T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); T3 = pParam->BSIM4weffCV * pParam->BSIM4cgsl; T4 = sqrt(1.0 - 4.0 * T2 / pParam->BSIM4ckappas); cgso = pParam->BSIM4cgso + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgso = (pParam->BSIM4cgso + T3) * vgsx - T3 * (T2 + 0.5 * pParam->BSIM4ckappas * (T4 - 1.0)); } if (here->BSIM4nf != 1.0) { cgdo *= here->BSIM4nf; cgso *= here->BSIM4nf; qgdo *= here->BSIM4nf; qgso *= here->BSIM4nf; } here->BSIM4cgdo = cgdo; here->BSIM4qgdo = qgdo; here->BSIM4cgso = cgso; here->BSIM4qgso = qgso; #ifndef NOBYPASS line755: #endif ag0 = ckt->CKTag[0]; if (here->BSIM4mode > 0) { if (here->BSIM4trnqsMod == 0) { qdrn -= qgdo; if (here->BSIM4rgateMod == 3) { gcgmgmb = (cgdo + cgso + pParam->BSIM4cgbo) * ag0; gcgmdb = -cgdo * ag0; gcgmsb = -cgso * ag0; gcgmbb = -pParam->BSIM4cgbo * ag0; gcdgmb = gcgmdb; gcsgmb = gcgmsb; gcbgmb = gcgmbb; gcggb = here->BSIM4cggb * ag0; gcgdb = here->BSIM4cgdb * ag0; gcgsb = here->BSIM4cgsb * ag0; gcgbb = -(gcggb + gcgdb + gcgsb); gcdgb = here->BSIM4cdgb * ag0; gcsgb = -(here->BSIM4cggb + here->BSIM4cbgb + here->BSIM4cdgb) * ag0; gcbgb = here->BSIM4cbgb * ag0; qgmb = pParam->BSIM4cgbo * vgmb; qgmid = qgdo + qgso + qgmb; qbulk -= qgmb; qsrc = -(qgate + qgmid + qbulk + qdrn); } else { gcggb = (here->BSIM4cggb + cgdo + cgso + pParam->BSIM4cgbo ) * ag0; gcgdb = (here->BSIM4cgdb - cgdo) * ag0; gcgsb = (here->BSIM4cgsb - cgso) * ag0; gcgbb = -(gcggb + gcgdb + gcgsb); gcdgb = (here->BSIM4cdgb - cgdo) * ag0; gcsgb = -(here->BSIM4cggb + here->BSIM4cbgb + here->BSIM4cdgb + cgso) * ag0; gcbgb = (here->BSIM4cbgb - pParam->BSIM4cgbo) * ag0; gcdgmb = gcsgmb = gcbgmb = 0.0; qgb = pParam->BSIM4cgbo * vgb; qgate += qgdo + qgso + qgb; qbulk -= qgb; qsrc = -(qgate + qbulk + qdrn); } gcddb = (here->BSIM4cddb + here->BSIM4capbd + cgdo) * ag0; gcdsb = here->BSIM4cdsb * ag0; gcsdb = -(here->BSIM4cgdb + here->BSIM4cbdb + here->BSIM4cddb) * ag0; gcssb = (here->BSIM4capbs + cgso - (here->BSIM4cgsb + here->BSIM4cbsb + here->BSIM4cdsb)) * ag0; if (!here->BSIM4rbodyMod) { gcdbb = -(gcdgb + gcddb + gcdsb + gcdgmb); gcsbb = -(gcsgb + gcsdb + gcssb + gcsgmb); gcbdb = (here->BSIM4cbdb - here->BSIM4capbd) * ag0; gcbsb = (here->BSIM4cbsb - here->BSIM4capbs) * ag0; gcdbdb = 0.0; gcsbsb = 0.0; } else { gcdbb = -(here->BSIM4cddb + here->BSIM4cdgb + here->BSIM4cdsb) * ag0; gcsbb = -(gcsgb + gcsdb + gcssb + gcsgmb) + here->BSIM4capbs * ag0; gcbdb = here->BSIM4cbdb * ag0; gcbsb = here->BSIM4cbsb * ag0; gcdbdb = -here->BSIM4capbd * ag0; gcsbsb = -here->BSIM4capbs * ag0; } gcbbb = -(gcbdb + gcbgb + gcbsb + gcbgmb); ggtg = ggtd = ggtb = ggts = 0.0; sxpart = 0.6; dxpart = 0.4; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { qcheq = here->BSIM4qchqs; CoxWL = model->BSIM4coxe * pParam->BSIM4weffCV * here->BSIM4nf * pParam->BSIM4leffCV; T0 = qdef * ScalingFactor / CoxWL; ggtg = here->BSIM4gtg = T0 * here->BSIM4gcrgg; ggtd = here->BSIM4gtd = T0 * here->BSIM4gcrgd; ggts = here->BSIM4gts = T0 * here->BSIM4gcrgs; ggtb = here->BSIM4gtb = T0 * here->BSIM4gcrgb; gqdef = ScalingFactor * ag0; gcqgb = here->BSIM4cqgb * ag0; gcqdb = here->BSIM4cqdb * ag0; gcqsb = here->BSIM4cqsb * ag0; gcqbb = here->BSIM4cqbb * ag0; if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM4xpart < 0.5) { dxpart = 0.4; } else if (model->BSIM4xpart > 0.5) { dxpart = 0.0; } else { dxpart = 0.5; } ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; } else { dxpart = qdrn / qcheq; Cdd = here->BSIM4cddb; Csd = -(here->BSIM4cgdb + here->BSIM4cddb + here->BSIM4cbdb); ddxpart_dVd = (Cdd - dxpart * (Cdd + Csd)) / qcheq; Cdg = here->BSIM4cdgb; Csg = -(here->BSIM4cggb + here->BSIM4cdgb + here->BSIM4cbgb); ddxpart_dVg = (Cdg - dxpart * (Cdg + Csg)) / qcheq; Cds = here->BSIM4cdsb; Css = -(here->BSIM4cgsb + here->BSIM4cdsb + here->BSIM4cbsb); ddxpart_dVs = (Cds - dxpart * (Cds + Css)) / qcheq; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); } sxpart = 1.0 - dxpart; dsxpart_dVd = -ddxpart_dVd; dsxpart_dVg = -ddxpart_dVg; dsxpart_dVs = -ddxpart_dVs; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); if (here->BSIM4rgateMod == 3) { gcgmgmb = (cgdo + cgso + pParam->BSIM4cgbo) * ag0; gcgmdb = -cgdo * ag0; gcgmsb = -cgso * ag0; gcgmbb = -pParam->BSIM4cgbo * ag0; gcdgmb = gcgmdb; gcsgmb = gcgmsb; gcbgmb = gcgmbb; gcdgb = gcsgb = gcbgb = 0.0; gcggb = gcgdb = gcgsb = gcgbb = 0.0; qgmb = pParam->BSIM4cgbo * vgmb; qgmid = qgdo + qgso + qgmb; qgate = 0.0; qbulk = -qgmb; qdrn = -qgdo; qsrc = -(qgmid + qbulk + qdrn); } else { gcggb = (cgdo + cgso + pParam->BSIM4cgbo ) * ag0; gcgdb = -cgdo * ag0; gcgsb = -cgso * ag0; gcgbb = -pParam->BSIM4cgbo * ag0; gcdgb = gcgdb; gcsgb = gcgsb; gcbgb = gcgbb; gcdgmb = gcsgmb = gcbgmb = 0.0; qgb = pParam->BSIM4cgbo * vgb; qgate = qgdo + qgso + qgb; qbulk = -qgb; qdrn = -qgdo; qsrc = -(qgate + qbulk + qdrn); } gcddb = (here->BSIM4capbd + cgdo) * ag0; gcdsb = gcsdb = 0.0; gcssb = (here->BSIM4capbs + cgso) * ag0; if (!here->BSIM4rbodyMod) { gcdbb = -(gcdgb + gcddb + gcdgmb); gcsbb = -(gcsgb + gcssb + gcsgmb); gcbdb = -here->BSIM4capbd * ag0; gcbsb = -here->BSIM4capbs * ag0; gcdbdb = 0.0; gcsbsb = 0.0; } else { gcdbb = gcsbb = gcbdb = gcbsb = 0.0; gcdbdb = -here->BSIM4capbd * ag0; gcsbsb = -here->BSIM4capbs * ag0; } gcbbb = -(gcbdb + gcbgb + gcbsb + gcbgmb); } } else { if (here->BSIM4trnqsMod == 0) { qsrc = qdrn - qgso; if (here->BSIM4rgateMod == 3) { gcgmgmb = (cgdo + cgso + pParam->BSIM4cgbo) * ag0; gcgmdb = -cgdo * ag0; gcgmsb = -cgso * ag0; gcgmbb = -pParam->BSIM4cgbo * ag0; gcdgmb = gcgmdb; gcsgmb = gcgmsb; gcbgmb = gcgmbb; gcggb = here->BSIM4cggb * ag0; gcgdb = here->BSIM4cgsb * ag0; gcgsb = here->BSIM4cgdb * ag0; gcgbb = -(gcggb + gcgdb + gcgsb); gcdgb = -(here->BSIM4cggb + here->BSIM4cbgb + here->BSIM4cdgb) * ag0; gcsgb = here->BSIM4cdgb * ag0; gcbgb = here->BSIM4cbgb * ag0; qgmb = pParam->BSIM4cgbo * vgmb; qgmid = qgdo + qgso + qgmb; qbulk -= qgmb; qdrn = -(qgate + qgmid + qbulk + qsrc); } else { gcggb = (here->BSIM4cggb + cgdo + cgso + pParam->BSIM4cgbo ) * ag0; gcgdb = (here->BSIM4cgsb - cgdo) * ag0; gcgsb = (here->BSIM4cgdb - cgso) * ag0; gcgbb = -(gcggb + gcgdb + gcgsb); gcdgb = -(here->BSIM4cggb + here->BSIM4cbgb + here->BSIM4cdgb + cgdo) * ag0; gcsgb = (here->BSIM4cdgb - cgso) * ag0; gcbgb = (here->BSIM4cbgb - pParam->BSIM4cgbo) * ag0; gcdgmb = gcsgmb = gcbgmb = 0.0; qgb = pParam->BSIM4cgbo * vgb; qgate += qgdo + qgso + qgb; qbulk -= qgb; qdrn = -(qgate + qbulk + qsrc); } gcddb = (here->BSIM4capbd + cgdo - (here->BSIM4cgsb + here->BSIM4cbsb + here->BSIM4cdsb)) * ag0; gcdsb = -(here->BSIM4cgdb + here->BSIM4cbdb + here->BSIM4cddb) * ag0; gcsdb = here->BSIM4cdsb * ag0; gcssb = (here->BSIM4cddb + here->BSIM4capbs + cgso) * ag0; if (!here->BSIM4rbodyMod) { gcdbb = -(gcdgb + gcddb + gcdsb + gcdgmb); gcsbb = -(gcsgb + gcsdb + gcssb + gcsgmb); gcbdb = (here->BSIM4cbsb - here->BSIM4capbd) * ag0; gcbsb = (here->BSIM4cbdb - here->BSIM4capbs) * ag0; gcdbdb = 0.0; gcsbsb = 0.0; } else { gcdbb = -(gcdgb + gcddb + gcdsb + gcdgmb) + here->BSIM4capbd * ag0; gcsbb = -(here->BSIM4cddb + here->BSIM4cdgb + here->BSIM4cdsb) * ag0; gcbdb = here->BSIM4cbsb * ag0; gcbsb = here->BSIM4cbdb * ag0; gcdbdb = -here->BSIM4capbd * ag0; gcsbsb = -here->BSIM4capbs * ag0; } gcbbb = -(gcbgb + gcbdb + gcbsb + gcbgmb); ggtg = ggtd = ggtb = ggts = 0.0; sxpart = 0.4; dxpart = 0.6; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { qcheq = here->BSIM4qchqs; CoxWL = model->BSIM4coxe * pParam->BSIM4weffCV * here->BSIM4nf * pParam->BSIM4leffCV; T0 = qdef * ScalingFactor / CoxWL; ggtg = here->BSIM4gtg = T0 * here->BSIM4gcrgg; ggts = here->BSIM4gts = T0 * here->BSIM4gcrgd; ggtd = here->BSIM4gtd = T0 * here->BSIM4gcrgs; ggtb = here->BSIM4gtb = T0 * here->BSIM4gcrgb; gqdef = ScalingFactor * ag0; gcqgb = here->BSIM4cqgb * ag0; gcqdb = here->BSIM4cqsb * ag0; gcqsb = here->BSIM4cqdb * ag0; gcqbb = here->BSIM4cqbb * ag0; if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM4xpart < 0.5) { sxpart = 0.4; } else if (model->BSIM4xpart > 0.5) { sxpart = 0.0; } else { sxpart = 0.5; } dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { sxpart = qdrn / qcheq; Css = here->BSIM4cddb; Cds = -(here->BSIM4cgdb + here->BSIM4cddb + here->BSIM4cbdb); dsxpart_dVs = (Css - sxpart * (Css + Cds)) / qcheq; Csg = here->BSIM4cdgb; Cdg = -(here->BSIM4cggb + here->BSIM4cdgb + here->BSIM4cbgb); dsxpart_dVg = (Csg - sxpart * (Csg + Cdg)) / qcheq; Csd = here->BSIM4cdsb; Cdd = -(here->BSIM4cgsb + here->BSIM4cdsb + here->BSIM4cbsb); dsxpart_dVd = (Csd - sxpart * (Csd + Cdd)) / qcheq; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); } dxpart = 1.0 - sxpart; ddxpart_dVd = -dsxpart_dVd; ddxpart_dVg = -dsxpart_dVg; ddxpart_dVs = -dsxpart_dVs; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); if (here->BSIM4rgateMod == 3) { gcgmgmb = (cgdo + cgso + pParam->BSIM4cgbo) * ag0; gcgmdb = -cgdo * ag0; gcgmsb = -cgso * ag0; gcgmbb = -pParam->BSIM4cgbo * ag0; gcdgmb = gcgmdb; gcsgmb = gcgmsb; gcbgmb = gcgmbb; gcdgb = gcsgb = gcbgb = 0.0; gcggb = gcgdb = gcgsb = gcgbb = 0.0; qgmb = pParam->BSIM4cgbo * vgmb; qgmid = qgdo + qgso + qgmb; qgate = 0.0; qbulk = -qgmb; qdrn = -qgdo; qsrc = -qgso; } else { gcggb = (cgdo + cgso + pParam->BSIM4cgbo ) * ag0; gcgdb = -cgdo * ag0; gcgsb = -cgso * ag0; gcgbb = -pParam->BSIM4cgbo * ag0; gcdgb = gcgdb; gcsgb = gcgsb; gcbgb = gcgbb; gcdgmb = gcsgmb = gcbgmb = 0.0; qgb = pParam->BSIM4cgbo * vgb; qgate = qgdo + qgso + qgb; qbulk = -qgb; qdrn = -qgdo; qsrc = -qgso; } gcddb = (here->BSIM4capbd + cgdo) * ag0; gcdsb = gcsdb = 0.0; gcssb = (here->BSIM4capbs + cgso) * ag0; if (!here->BSIM4rbodyMod) { gcdbb = -(gcdgb + gcddb + gcdgmb); gcsbb = -(gcsgb + gcssb + gcsgmb); gcbdb = -here->BSIM4capbd * ag0; gcbsb = -here->BSIM4capbs * ag0; gcdbdb = 0.0; gcsbsb = 0.0; } else { gcdbb = gcsbb = gcbdb = gcbsb = 0.0; gcdbdb = -here->BSIM4capbd * ag0; gcsbsb = -here->BSIM4capbs * ag0; } gcbbb = -(gcbdb + gcbgb + gcbsb + gcbgmb); } } if (here->BSIM4trnqsMod) { *(ckt->CKTstate0 + here->BSIM4qcdump) = qdef * ScalingFactor; if (ckt->CKTmode & MODEINITTRAN) *(ckt->CKTstate1 + here->BSIM4qcdump) = *(ckt->CKTstate0 + here->BSIM4qcdump); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4qcdump); if (error) return(error); } if (ByPass) goto line860; *(ckt->CKTstate0 + here->BSIM4qg) = qgate; *(ckt->CKTstate0 + here->BSIM4qd) = qdrn - *(ckt->CKTstate0 + here->BSIM4qbd); *(ckt->CKTstate0 + here->BSIM4qs) = qsrc - *(ckt->CKTstate0 + here->BSIM4qbs); if (here->BSIM4rgateMod == 3) *(ckt->CKTstate0 + here->BSIM4qgmid) = qgmid; if (!here->BSIM4rbodyMod) { *(ckt->CKTstate0 + here->BSIM4qb) = qbulk + *(ckt->CKTstate0 + here->BSIM4qbd) + *(ckt->CKTstate0 + here->BSIM4qbs); } else *(ckt->CKTstate0 + here->BSIM4qb) = qbulk; /* Store small signal parameters */ if (ckt->CKTmode & MODEINITSMSIG) { goto line1000; } if (!ChargeComputationNeeded) goto line850; if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->BSIM4qb) = *(ckt->CKTstate0 + here->BSIM4qb); *(ckt->CKTstate1 + here->BSIM4qg) = *(ckt->CKTstate0 + here->BSIM4qg); *(ckt->CKTstate1 + here->BSIM4qd) = *(ckt->CKTstate0 + here->BSIM4qd); if (here->BSIM4rgateMod == 3) *(ckt->CKTstate1 + here->BSIM4qgmid) = *(ckt->CKTstate0 + here->BSIM4qgmid); if (here->BSIM4rbodyMod) { *(ckt->CKTstate1 + here->BSIM4qbs) = *(ckt->CKTstate0 + here->BSIM4qbs); *(ckt->CKTstate1 + here->BSIM4qbd) = *(ckt->CKTstate0 + here->BSIM4qbd); } } error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4qb); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4qg); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4qd); if (error) return(error); if (here->BSIM4rgateMod == 3) { error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4qgmid); if (error) return(error); } if (here->BSIM4rbodyMod) { error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4qbs); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4qbd); if (error) return(error); } goto line860; line850: /* Zero gcap and ceqcap if (!ChargeComputationNeeded) */ ceqqg = ceqqb = ceqqd = 0.0; ceqqjd = ceqqjs = 0.0; cqcheq = cqdef = 0.0; gcdgb = gcddb = gcdsb = gcdbb = 0.0; gcsgb = gcsdb = gcssb = gcsbb = 0.0; gcggb = gcgdb = gcgsb = gcgbb = 0.0; gcbdb = gcbgb = gcbsb = gcbbb = 0.0; gcgmgmb = gcgmdb = gcgmsb = gcgmbb = 0.0; gcdgmb = gcsgmb = gcbgmb = ceqqgmid = 0.0; gcdbdb = gcsbsb = 0.0; gqdef = gcqgb = gcqdb = gcqsb = gcqbb = 0.0; ggtg = ggtd = ggtb = ggts = 0.0; sxpart = (1.0 - (dxpart = (here->BSIM4mode > 0) ? 0.4 : 0.6)); ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; if (here->BSIM4trnqsMod) { CoxWL = model->BSIM4coxe * pParam->BSIM4weffCV * here->BSIM4nf * pParam->BSIM4leffCV; T1 = here->BSIM4gcrg / CoxWL; here->BSIM4gtau = T1 * ScalingFactor; } else here->BSIM4gtau = 0.0; goto line900; line860: /* Calculate equivalent charge current */ cqgate = *(ckt->CKTstate0 + here->BSIM4cqg); cqbody = *(ckt->CKTstate0 + here->BSIM4cqb); cqdrn = *(ckt->CKTstate0 + here->BSIM4cqd); ceqqg = cqgate - gcggb * vgb + gcgdb * vbd + gcgsb * vbs; ceqqd = cqdrn - gcdgb * vgb - gcdgmb * vgmb + (gcddb + gcdbdb) * vbd - gcdbdb * vbd_jct + gcdsb * vbs; ceqqb = cqbody - gcbgb * vgb - gcbgmb * vgmb + gcbdb * vbd + gcbsb * vbs; if (here->BSIM4rgateMod == 3) ceqqgmid = *(ckt->CKTstate0 + here->BSIM4cqgmid) + gcgmdb * vbd + gcgmsb * vbs - gcgmgmb * vgmb; else ceqqgmid = 0.0; if (here->BSIM4rbodyMod) { ceqqjs = *(ckt->CKTstate0 + here->BSIM4cqbs) + gcsbsb * vbs_jct; ceqqjd = *(ckt->CKTstate0 + here->BSIM4cqbd) + gcdbdb * vbd_jct; } if (here->BSIM4trnqsMod) { T0 = ggtg * vgb - ggtd * vbd - ggts * vbs; ceqqg += T0; T1 = qdef * here->BSIM4gtau; ceqqd -= dxpart * T0 + T1 * (ddxpart_dVg * vgb - ddxpart_dVd * vbd - ddxpart_dVs * vbs); cqdef = *(ckt->CKTstate0 + here->BSIM4cqcdump) - gqdef * qdef; cqcheq = *(ckt->CKTstate0 + here->BSIM4cqcheq) - (gcqgb * vgb - gcqdb * vbd - gcqsb * vbs) + T0; } if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->BSIM4cqb) = *(ckt->CKTstate0 + here->BSIM4cqb); *(ckt->CKTstate1 + here->BSIM4cqg) = *(ckt->CKTstate0 + here->BSIM4cqg); *(ckt->CKTstate1 + here->BSIM4cqd) = *(ckt->CKTstate0 + here->BSIM4cqd); if (here->BSIM4rgateMod == 3) *(ckt->CKTstate1 + here->BSIM4cqgmid) = *(ckt->CKTstate0 + here->BSIM4cqgmid); if (here->BSIM4rbodyMod) { *(ckt->CKTstate1 + here->BSIM4cqbs) = *(ckt->CKTstate0 + here->BSIM4cqbs); *(ckt->CKTstate1 + here->BSIM4cqbd) = *(ckt->CKTstate0 + here->BSIM4cqbd); } } /* * Load current vector */ line900: if (here->BSIM4mode >= 0) { Gm = here->BSIM4gm; Gmbs = here->BSIM4gmbs; FwdSum = Gm + Gmbs; RevSum = 0.0; ceqdrn = model->BSIM4type * (cdrain - here->BSIM4gds * vds - Gm * vgs - Gmbs * vbs); ceqbd = model->BSIM4type * (here->BSIM4csub + here->BSIM4Igidl - (here->BSIM4gbds + here->BSIM4ggidld) * vds - (here->BSIM4gbgs + here->BSIM4ggidlg) * vgs - (here->BSIM4gbbs + here->BSIM4ggidlb) * vbs); ceqbs = model->BSIM4type * (here->BSIM4Igisl + here->BSIM4ggisls * vds - here->BSIM4ggislg * vgd - here->BSIM4ggislb * vbd); gbbdp = -(here->BSIM4gbds); gbbsp = here->BSIM4gbds + here->BSIM4gbgs + here->BSIM4gbbs; gbdpg = here->BSIM4gbgs; gbdpdp = here->BSIM4gbds; gbdpb = here->BSIM4gbbs; gbdpsp = -(gbdpg + gbdpdp + gbdpb); gbspg = 0.0; gbspdp = 0.0; gbspb = 0.0; gbspsp = 0.0; if (model->BSIM4igcMod) { gIstotg = here->BSIM4gIgsg + here->BSIM4gIgcsg; gIstotd = here->BSIM4gIgcsd; gIstots = here->BSIM4gIgss + here->BSIM4gIgcss; gIstotb = here->BSIM4gIgcsb; Istoteq = model->BSIM4type * (here->BSIM4Igs + here->BSIM4Igcs - gIstotg * vgs - here->BSIM4gIgcsd * vds - here->BSIM4gIgcsb * vbs); gIdtotg = here->BSIM4gIgdg + here->BSIM4gIgcdg; gIdtotd = here->BSIM4gIgdd + here->BSIM4gIgcdd; gIdtots = here->BSIM4gIgcds; gIdtotb = here->BSIM4gIgcdb; Idtoteq = model->BSIM4type * (here->BSIM4Igd + here->BSIM4Igcd - here->BSIM4gIgdg * vgd - here->BSIM4gIgcdg * vgs - here->BSIM4gIgcdd * vds - here->BSIM4gIgcdb * vbs); } else { gIstotg = gIstotd = gIstots = gIstotb = Istoteq = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = Idtoteq = 0.0; } if (model->BSIM4igbMod) { gIbtotg = here->BSIM4gIgbg; gIbtotd = here->BSIM4gIgbd; gIbtots = here->BSIM4gIgbs; gIbtotb = here->BSIM4gIgbb; Ibtoteq = model->BSIM4type * (here->BSIM4Igb - here->BSIM4gIgbg * vgs - here->BSIM4gIgbd * vds - here->BSIM4gIgbb * vbs); } else gIbtotg = gIbtotd = gIbtots = gIbtotb = Ibtoteq = 0.0; if ((model->BSIM4igcMod != 0) || (model->BSIM4igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; Igtoteq = Istoteq + Idtoteq + Ibtoteq; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = Igtoteq = 0.0; if (here->BSIM4rgateMod == 2) T0 = vges - vgs; else if (here->BSIM4rgateMod == 3) T0 = vgms - vgs; if (here->BSIM4rgateMod > 1) { gcrgd = here->BSIM4gcrgd * T0; gcrgg = here->BSIM4gcrgg * T0; gcrgs = here->BSIM4gcrgs * T0; gcrgb = here->BSIM4gcrgb * T0; ceqgcrg = -(gcrgd * vds + gcrgg * vgs + gcrgb * vbs); gcrgg -= here->BSIM4gcrg; gcrg = here->BSIM4gcrg; } else ceqgcrg = gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; } else { Gm = -here->BSIM4gm; Gmbs = -here->BSIM4gmbs; FwdSum = 0.0; RevSum = -(Gm + Gmbs); ceqdrn = -model->BSIM4type * (cdrain + here->BSIM4gds * vds + Gm * vgd + Gmbs * vbd); ceqbs = model->BSIM4type * (here->BSIM4csub + here->BSIM4Igisl + (here->BSIM4gbds + here->BSIM4ggisls) * vds - (here->BSIM4gbgs + here->BSIM4ggislg) * vgd - (here->BSIM4gbbs + here->BSIM4ggislb) * vbd); ceqbd = model->BSIM4type * (here->BSIM4Igidl - here->BSIM4ggidld * vds - here->BSIM4ggidlg * vgs - here->BSIM4ggidlb * vbs); gbbsp = -(here->BSIM4gbds); gbbdp = here->BSIM4gbds + here->BSIM4gbgs + here->BSIM4gbbs; gbdpg = 0.0; gbdpsp = 0.0; gbdpb = 0.0; gbdpdp = 0.0; gbspg = here->BSIM4gbgs; gbspsp = here->BSIM4gbds; gbspb = here->BSIM4gbbs; gbspdp = -(gbspg + gbspsp + gbspb); if (model->BSIM4igcMod) { gIstotg = here->BSIM4gIgsg + here->BSIM4gIgcdg; gIstotd = here->BSIM4gIgcds; gIstots = here->BSIM4gIgss + here->BSIM4gIgcdd; gIstotb = here->BSIM4gIgcdb; Istoteq = model->BSIM4type * (here->BSIM4Igs + here->BSIM4Igcd - here->BSIM4gIgsg * vgs - here->BSIM4gIgcdg * vgd + here->BSIM4gIgcdd * vds - here->BSIM4gIgcdb * vbd); gIdtotg = here->BSIM4gIgdg + here->BSIM4gIgcsg; gIdtotd = here->BSIM4gIgdd + here->BSIM4gIgcss; gIdtots = here->BSIM4gIgcsd; gIdtotb = here->BSIM4gIgcsb; Idtoteq = model->BSIM4type * (here->BSIM4Igd + here->BSIM4Igcs - (here->BSIM4gIgdg + here->BSIM4gIgcsg) * vgd + here->BSIM4gIgcsd * vds - here->BSIM4gIgcsb * vbd); } else { gIstotg = gIstotd = gIstots = gIstotb = Istoteq = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = Idtoteq = 0.0; } if (model->BSIM4igbMod) { gIbtotg = here->BSIM4gIgbg; gIbtotd = here->BSIM4gIgbs; gIbtots = here->BSIM4gIgbd; gIbtotb = here->BSIM4gIgbb; Ibtoteq = model->BSIM4type * (here->BSIM4Igb - here->BSIM4gIgbg * vgd + here->BSIM4gIgbd * vds - here->BSIM4gIgbb * vbd); } else gIbtotg = gIbtotd = gIbtots = gIbtotb = Ibtoteq = 0.0; if ((model->BSIM4igcMod != 0) || (model->BSIM4igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; Igtoteq = Istoteq + Idtoteq + Ibtoteq; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = Igtoteq = 0.0; if (here->BSIM4rgateMod == 2) T0 = vges - vgs; else if (here->BSIM4rgateMod == 3) T0 = vgms - vgs; if (here->BSIM4rgateMod > 1) { gcrgd = here->BSIM4gcrgs * T0; gcrgg = here->BSIM4gcrgg * T0; gcrgs = here->BSIM4gcrgd * T0; gcrgb = here->BSIM4gcrgb * T0; ceqgcrg = -(gcrgg * vgd - gcrgs * vds + gcrgb * vbd); gcrgg -= here->BSIM4gcrg; gcrg = here->BSIM4gcrg; } else ceqgcrg = gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; } if (model->BSIM4rdsMod == 1) { ceqgstot = model->BSIM4type * (here->BSIM4gstotd * vds + here->BSIM4gstotg * vgs + here->BSIM4gstotb * vbs); /* WDLiu: ceqgstot flowing away from sNodePrime */ gstot = here->BSIM4gstot; gstotd = here->BSIM4gstotd; gstotg = here->BSIM4gstotg; gstots = here->BSIM4gstots - gstot; gstotb = here->BSIM4gstotb; ceqgdtot = -model->BSIM4type * (here->BSIM4gdtotd * vds + here->BSIM4gdtotg * vgs + here->BSIM4gdtotb * vbs); /* WDLiu: ceqgdtot defined as flowing into dNodePrime */ gdtot = here->BSIM4gdtot; gdtotd = here->BSIM4gdtotd - gdtot; gdtotg = here->BSIM4gdtotg; gdtots = here->BSIM4gdtots; gdtotb = here->BSIM4gdtotb; } else { gstot = gstotd = gstotg = gstots = gstotb = ceqgstot = 0.0; gdtot = gdtotd = gdtotg = gdtots = gdtotb = ceqgdtot = 0.0; } if (model->BSIM4type > 0) { ceqjs = (here->BSIM4cbs - here->BSIM4gbs * vbs_jct); ceqjd = (here->BSIM4cbd - here->BSIM4gbd * vbd_jct); } else { ceqjs = -(here->BSIM4cbs - here->BSIM4gbs * vbs_jct); ceqjd = -(here->BSIM4cbd - here->BSIM4gbd * vbd_jct); ceqqg = -ceqqg; ceqqd = -ceqqd; ceqqb = -ceqqb; ceqgcrg = -ceqgcrg; if (here->BSIM4trnqsMod) { cqdef = -cqdef; cqcheq = -cqcheq; } if (here->BSIM4rbodyMod) { ceqqjs = -ceqqjs; ceqqjd = -ceqqjd; } if (here->BSIM4rgateMod == 3) ceqqgmid = -ceqqgmid; } /* * Loading RHS */ m = here->BSIM4m; #ifdef USE_OMP here->BSIM4rhsdPrime = m * (ceqjd - ceqbd + ceqgdtot - ceqdrn - ceqqd + Idtoteq); here->BSIM4rhsgPrime = m * (ceqqg - ceqgcrg + Igtoteq); if (here->BSIM4rgateMod == 2) here->BSIM4rhsgExt = m * ceqgcrg; else if (here->BSIM4rgateMod == 3) here->BSIM4grhsMid = m * (ceqqgmid + ceqgcrg); if (!here->BSIM4rbodyMod) { here->BSIM4rhsbPrime = m * (ceqbd + ceqbs - ceqjd - ceqjs - ceqqb + Ibtoteq); here->BSIM4rhssPrime = m * (ceqdrn - ceqbs + ceqjs + ceqqg + ceqqb + ceqqd + ceqqgmid - ceqgstot + Istoteq); } else { here->BSIM4rhsdb = m * (ceqjd + ceqqjd); here->BSIM4rhsbPrime = m * (ceqbd + ceqbs - ceqqb + Ibtoteq); here->BSIM4rhssb = m * (ceqjs + ceqqjs); here->BSIM4rhssPrime = m * (ceqdrn - ceqbs + ceqjs + ceqqd + ceqqg + ceqqb + ceqqjd + ceqqjs + ceqqgmid - ceqgstot + Istoteq); } if (model->BSIM4rdsMod) { here->BSIM4rhsd = m * ceqgdtot; here->BSIM4rhss = m * ceqgstot; } if (here->BSIM4trnqsMod) here->BSIM4rhsq = m * (cqcheq - cqdef); #else (*(ckt->CKTrhs + here->BSIM4dNodePrime) += m * (ceqjd - ceqbd + ceqgdtot - ceqdrn - ceqqd + Idtoteq)); (*(ckt->CKTrhs + here->BSIM4gNodePrime) -= m * (ceqqg - ceqgcrg + Igtoteq)); if (here->BSIM4rgateMod == 2) (*(ckt->CKTrhs + here->BSIM4gNodeExt) -= m * ceqgcrg); else if (here->BSIM4rgateMod == 3) (*(ckt->CKTrhs + here->BSIM4gNodeMid) -= m * (ceqqgmid + ceqgcrg)); if (!here->BSIM4rbodyMod) { (*(ckt->CKTrhs + here->BSIM4bNodePrime) += m * (ceqbd + ceqbs - ceqjd - ceqjs - ceqqb + Ibtoteq)); (*(ckt->CKTrhs + here->BSIM4sNodePrime) += m * (ceqdrn - ceqbs + ceqjs + ceqqg + ceqqb + ceqqd + ceqqgmid - ceqgstot + Istoteq)); } else { (*(ckt->CKTrhs + here->BSIM4dbNode) -= m * (ceqjd + ceqqjd)); (*(ckt->CKTrhs + here->BSIM4bNodePrime) += m * (ceqbd + ceqbs - ceqqb + Ibtoteq)); (*(ckt->CKTrhs + here->BSIM4sbNode) -= m * (ceqjs + ceqqjs)); (*(ckt->CKTrhs + here->BSIM4sNodePrime) += m * (ceqdrn - ceqbs + ceqjs + ceqqd + ceqqg + ceqqb + ceqqjd + ceqqjs + ceqqgmid - ceqgstot + Istoteq)); } if (model->BSIM4rdsMod) { (*(ckt->CKTrhs + here->BSIM4dNode) -= m * ceqgdtot); (*(ckt->CKTrhs + here->BSIM4sNode) += m * ceqgstot); } if (here->BSIM4trnqsMod) *(ckt->CKTrhs + here->BSIM4qNode) += m * (cqcheq - cqdef); #endif /* * Loading matrix */ if (!here->BSIM4rbodyMod) { gjbd = here->BSIM4gbd; gjbs = here->BSIM4gbs; } else gjbd = gjbs = 0.0; if (!model->BSIM4rdsMod) { gdpr = here->BSIM4drainConductance; gspr = here->BSIM4sourceConductance; } else gdpr = gspr = 0.0; geltd = here->BSIM4grgeltd; T1 = qdef * here->BSIM4gtau; #ifdef USE_OMP if (here->BSIM4rgateMod == 1) { here->BSIM4_1 = m * geltd; here->BSIM4_2 = m * geltd; here->BSIM4_3 = m * geltd; here->BSIM4_4 = m * (gcggb + geltd - ggtg + gIgtotg); here->BSIM4_5 = m * (gcgdb - ggtd + gIgtotd); here->BSIM4_6 = m * (gcgsb - ggts + gIgtots); here->BSIM4_7 = m * (gcgbb - ggtb + gIgtotb); } /* WDLiu: gcrg already subtracted from all gcrgg below */ else if (here->BSIM4rgateMod == 2) { here->BSIM4_8 = m * gcrg; here->BSIM4_9 = m * gcrgg; here->BSIM4_10 = m * gcrgd; here->BSIM4_11 = m * gcrgs; here->BSIM4_12 = m * gcrgb; here->BSIM4_13 = m * gcrg; here->BSIM4_14 = m * (gcggb - gcrgg - ggtg + gIgtotg); here->BSIM4_15 = m * (gcgdb - gcrgd - ggtd + gIgtotd); here->BSIM4_16 = m * (gcgsb - gcrgs - ggts + gIgtots); here->BSIM4_17 = m * (gcgbb - gcrgb - ggtb + gIgtotb); } else if (here->BSIM4rgateMod == 3) { here->BSIM4_18 = m * geltd; here->BSIM4_19 = m * geltd; here->BSIM4_20 = m * geltd; here->BSIM4_21 = m * (geltd + gcrg + gcgmgmb); here->BSIM4_22 = m * (gcrgd + gcgmdb); here->BSIM4_23 = m * gcrgg; here->BSIM4_24 = m * (gcrgs + gcgmsb); here->BSIM4_25 = m * (gcrgb + gcgmbb); here->BSIM4_26 = m * gcdgmb; here->BSIM4_27 = m * gcrg; here->BSIM4_28 = m * gcsgmb; here->BSIM4_29 = m * gcbgmb; here->BSIM4_30 = m * (gcggb - gcrgg - ggtg + gIgtotg); here->BSIM4_31 = m * (gcgdb - gcrgd - ggtd + gIgtotd); here->BSIM4_32 = m * (gcgsb - gcrgs - ggts + gIgtots); here->BSIM4_33 = m * (gcgbb - gcrgb - ggtb + gIgtotb); } else { here->BSIM4_34 = m * (gcggb - ggtg + gIgtotg); here->BSIM4_35 = m * (gcgdb - ggtd + gIgtotd); here->BSIM4_36 = m * (gcgsb - ggts + gIgtots); here->BSIM4_37 = m * (gcgbb - ggtb + gIgtotb); } if (model->BSIM4rdsMod) { here->BSIM4_38 = m * gdtotg; here->BSIM4_39 = m * gdtots; here->BSIM4_40 = m * gdtotb; here->BSIM4_41 = m * gstotd; here->BSIM4_42 = m * gstotg; here->BSIM4_43 = m * gstotb; } here->BSIM4_44 = m * (gdpr + here->BSIM4gds + here->BSIM4gbd + T1 * ddxpart_dVd - gdtotd + RevSum + gcddb + gbdpdp + dxpart * ggtd - gIdtotd); here->BSIM4_45 = m * (gdpr + gdtot); here->BSIM4_46 = m * (Gm + gcdgb - gdtotg + gbdpg - gIdtotg + dxpart * ggtg + T1 * ddxpart_dVg); here->BSIM4_47 = m * (here->BSIM4gds + gdtots - dxpart * ggts + gIdtots - T1 * ddxpart_dVs + FwdSum - gcdsb - gbdpsp); here->BSIM4_48 = m * (gjbd + gdtotb - Gmbs - gcdbb - gbdpb + gIdtotb - T1 * ddxpart_dVb - dxpart * ggtb); here->BSIM4_49 = m * (gdpr - gdtotd); here->BSIM4_50 = m * (gdpr + gdtot); here->BSIM4_51 = m * (here->BSIM4gds + gstotd + RevSum - gcsdb - gbspdp - T1 * dsxpart_dVd - sxpart * ggtd + gIstotd); here->BSIM4_52 = m * (gcsgb - Gm - gstotg + gbspg + sxpart * ggtg + T1 * dsxpart_dVg - gIstotg); here->BSIM4_53 = m * (gspr + here->BSIM4gds + here->BSIM4gbs + T1 * dsxpart_dVs - gstots + FwdSum + gcssb + gbspsp + sxpart * ggts - gIstots); here->BSIM4_54 = m * (gspr + gstot); here->BSIM4_55 = m * (gjbs + gstotb + Gmbs - gcsbb - gbspb - sxpart * ggtb - T1 * dsxpart_dVb + gIstotb); here->BSIM4_56 = m * (gspr - gstots); here->BSIM4_57 = m * (gspr + gstot); here->BSIM4_58 = m * (gcbdb - gjbd + gbbdp - gIbtotd); here->BSIM4_59 = m * (gcbgb - here->BSIM4gbgs - gIbtotg); here->BSIM4_60 = m * (gcbsb - gjbs + gbbsp - gIbtots); here->BSIM4_61 = m * (gjbd + gjbs + gcbbb - here->BSIM4gbbs - gIbtotb); ggidld = here->BSIM4ggidld; ggidlg = here->BSIM4ggidlg; ggidlb = here->BSIM4ggidlb; ggislg = here->BSIM4ggislg; ggisls = here->BSIM4ggisls; ggislb = here->BSIM4ggislb; /* stamp gidl */ here->BSIM4_62 = m * ggidld; here->BSIM4_63 = m * ggidlg; here->BSIM4_64 = m * (ggidlg + ggidld + ggidlb); here->BSIM4_65 = m * ggidlb; here->BSIM4_66 = m * ggidld; here->BSIM4_67 = m * ggidlg; here->BSIM4_68 = m * (ggidlg + ggidld + ggidlb); here->BSIM4_69 = m * ggidlb; /* stamp gisl */ here->BSIM4_70 = m * (ggisls + ggislg + ggislb); here->BSIM4_71 = m * ggislg; here->BSIM4_72 = m * ggisls; here->BSIM4_73 = m * ggislb; here->BSIM4_74 = m * (ggislg + ggisls + ggislb); here->BSIM4_75 = m * ggislg; here->BSIM4_76 = m * ggisls; here->BSIM4_77 = m * ggislb; if (here->BSIM4rbodyMod) { here->BSIM4_78 = m * (gcdbdb - here->BSIM4gbd); here->BSIM4_79 = m * (here->BSIM4gbs - gcsbsb); here->BSIM4_80 = m * (gcdbdb - here->BSIM4gbd); here->BSIM4_81 = m * (here->BSIM4gbd - gcdbdb + here->BSIM4grbpd + here->BSIM4grbdb); here->BSIM4_82 = m * here->BSIM4grbpd; here->BSIM4_83 = m * here->BSIM4grbdb; here->BSIM4_84 = m * here->BSIM4grbpd; here->BSIM4_85 = m * here->BSIM4grbpb; here->BSIM4_86 = m * here->BSIM4grbps; here->BSIM4_87 = m * (here->BSIM4grbpd + here->BSIM4grbps + here->BSIM4grbpb); /* WDLiu: (gcbbb - here->BSIM4gbbs) already added to BPbpPtr */ here->BSIM4_88 = m * (gcsbsb - here->BSIM4gbs); here->BSIM4_89 = m * here->BSIM4grbps; here->BSIM4_90 = m * here->BSIM4grbsb; here->BSIM4_91 = m * (here->BSIM4gbs - gcsbsb + here->BSIM4grbps + here->BSIM4grbsb); here->BSIM4_92 = m * here->BSIM4grbdb; here->BSIM4_93 = m * here->BSIM4grbpb; here->BSIM4_94 = m * here->BSIM4grbsb; here->BSIM4_95 = m * (here->BSIM4grbsb + here->BSIM4grbdb + here->BSIM4grbpb); } if (here->BSIM4trnqsMod) { here->BSIM4_96 = m * (gqdef + here->BSIM4gtau); here->BSIM4_97 = m * (ggtg - gcqgb); here->BSIM4_98 = m * (ggtd - gcqdb); here->BSIM4_99 = m * (ggts - gcqsb); here->BSIM4_100 = m * (ggtb - gcqbb); here->BSIM4_101 = m * dxpart * here->BSIM4gtau; here->BSIM4_102 = m * sxpart * here->BSIM4gtau; here->BSIM4_103 = m * here->BSIM4gtau; } #else if (here->BSIM4rgateMod == 1) { (*(here->BSIM4GEgePtr) += m * geltd); (*(here->BSIM4GPgePtr) -= m * geltd); (*(here->BSIM4GEgpPtr) -= m * geltd); (*(here->BSIM4GPgpPtr) += m * (gcggb + geltd - ggtg + gIgtotg)); (*(here->BSIM4GPdpPtr) += m * (gcgdb - ggtd + gIgtotd)); (*(here->BSIM4GPspPtr) += m * (gcgsb - ggts + gIgtots)); (*(here->BSIM4GPbpPtr) += m * (gcgbb - ggtb + gIgtotb)); } /* WDLiu: gcrg already subtracted from all gcrgg below */ else if (here->BSIM4rgateMod == 2) { (*(here->BSIM4GEgePtr) += m * gcrg); (*(here->BSIM4GEgpPtr) += m * gcrgg); (*(here->BSIM4GEdpPtr) += m * gcrgd); (*(here->BSIM4GEspPtr) += m * gcrgs); (*(here->BSIM4GEbpPtr) += m * gcrgb); (*(here->BSIM4GPgePtr) -= m * gcrg); (*(here->BSIM4GPgpPtr) += m * (gcggb - gcrgg - ggtg + gIgtotg)); (*(here->BSIM4GPdpPtr) += m * (gcgdb - gcrgd - ggtd + gIgtotd)); (*(here->BSIM4GPspPtr) += m * (gcgsb - gcrgs - ggts + gIgtots)); (*(here->BSIM4GPbpPtr) += m * (gcgbb - gcrgb - ggtb + gIgtotb)); } else if (here->BSIM4rgateMod == 3) { (*(here->BSIM4GEgePtr) += m * geltd); (*(here->BSIM4GEgmPtr) -= m * geltd); (*(here->BSIM4GMgePtr) -= m * geltd); (*(here->BSIM4GMgmPtr) += m * (geltd + gcrg + gcgmgmb)); (*(here->BSIM4GMdpPtr) += m * (gcrgd + gcgmdb)); (*(here->BSIM4GMgpPtr) += m * gcrgg); (*(here->BSIM4GMspPtr) += m * (gcrgs + gcgmsb)); (*(here->BSIM4GMbpPtr) += m * (gcrgb + gcgmbb)); (*(here->BSIM4DPgmPtr) += m * gcdgmb); (*(here->BSIM4GPgmPtr) -= m * gcrg); (*(here->BSIM4SPgmPtr) += m * gcsgmb); (*(here->BSIM4BPgmPtr) += m * gcbgmb); (*(here->BSIM4GPgpPtr) += m * (gcggb - gcrgg - ggtg + gIgtotg)); (*(here->BSIM4GPdpPtr) += m * (gcgdb - gcrgd - ggtd + gIgtotd)); (*(here->BSIM4GPspPtr) += m * (gcgsb - gcrgs - ggts + gIgtots)); (*(here->BSIM4GPbpPtr) += m * (gcgbb - gcrgb - ggtb + gIgtotb)); } else { (*(here->BSIM4GPgpPtr) += m * (gcggb - ggtg + gIgtotg)); (*(here->BSIM4GPdpPtr) += m * (gcgdb - ggtd + gIgtotd)); (*(here->BSIM4GPspPtr) += m * (gcgsb - ggts + gIgtots)); (*(here->BSIM4GPbpPtr) += m * (gcgbb - ggtb + gIgtotb)); } if (model->BSIM4rdsMod) { (*(here->BSIM4DgpPtr) += m * gdtotg); (*(here->BSIM4DspPtr) += m * gdtots); (*(here->BSIM4DbpPtr) += m * gdtotb); (*(here->BSIM4SdpPtr) += m * gstotd); (*(here->BSIM4SgpPtr) += m * gstotg); (*(here->BSIM4SbpPtr) += m * gstotb); } (*(here->BSIM4DPdpPtr) += m * (gdpr + here->BSIM4gds + here->BSIM4gbd + T1 * ddxpart_dVd - gdtotd + RevSum + gcddb + gbdpdp + dxpart * ggtd - gIdtotd)); (*(here->BSIM4DPdPtr) -= m * (gdpr + gdtot)); (*(here->BSIM4DPgpPtr) += m * (Gm + gcdgb - gdtotg + gbdpg - gIdtotg + dxpart * ggtg + T1 * ddxpart_dVg)); (*(here->BSIM4DPspPtr) -= m * (here->BSIM4gds + gdtots - dxpart * ggts + gIdtots - T1 * ddxpart_dVs + FwdSum - gcdsb - gbdpsp)); (*(here->BSIM4DPbpPtr) -= m * (gjbd + gdtotb - Gmbs - gcdbb - gbdpb + gIdtotb - T1 * ddxpart_dVb - dxpart * ggtb)); (*(here->BSIM4DdpPtr) -= m * (gdpr - gdtotd)); (*(here->BSIM4DdPtr) += m * (gdpr + gdtot)); (*(here->BSIM4SPdpPtr) -= m * (here->BSIM4gds + gstotd + RevSum - gcsdb - gbspdp - T1 * dsxpart_dVd - sxpart * ggtd + gIstotd)); (*(here->BSIM4SPgpPtr) += m * (gcsgb - Gm - gstotg + gbspg + sxpart * ggtg + T1 * dsxpart_dVg - gIstotg)); (*(here->BSIM4SPspPtr) += m * (gspr + here->BSIM4gds + here->BSIM4gbs + T1 * dsxpart_dVs - gstots + FwdSum + gcssb + gbspsp + sxpart * ggts - gIstots)); (*(here->BSIM4SPsPtr) -= m * (gspr + gstot)); (*(here->BSIM4SPbpPtr) -= m * (gjbs + gstotb + Gmbs - gcsbb - gbspb - sxpart * ggtb - T1 * dsxpart_dVb + gIstotb)); (*(here->BSIM4SspPtr) -= m * (gspr - gstots)); (*(here->BSIM4SsPtr) += m * (gspr + gstot)); (*(here->BSIM4BPdpPtr) += m * (gcbdb - gjbd + gbbdp - gIbtotd)); (*(here->BSIM4BPgpPtr) += m * (gcbgb - here->BSIM4gbgs - gIbtotg)); (*(here->BSIM4BPspPtr) += m * (gcbsb - gjbs + gbbsp - gIbtots)); (*(here->BSIM4BPbpPtr) += m * (gjbd + gjbs + gcbbb - here->BSIM4gbbs - gIbtotb)); ggidld = here->BSIM4ggidld; ggidlg = here->BSIM4ggidlg; ggidlb = here->BSIM4ggidlb; ggislg = here->BSIM4ggislg; ggisls = here->BSIM4ggisls; ggislb = here->BSIM4ggislb; /* stamp gidl */ (*(here->BSIM4DPdpPtr) += m * ggidld); (*(here->BSIM4DPgpPtr) += m * ggidlg); (*(here->BSIM4DPspPtr) -= m * (ggidlg + ggidld + ggidlb)); (*(here->BSIM4DPbpPtr) += m * ggidlb); (*(here->BSIM4BPdpPtr) -= m * ggidld); (*(here->BSIM4BPgpPtr) -= m * ggidlg); (*(here->BSIM4BPspPtr) += m * (ggidlg + ggidld + ggidlb)); (*(here->BSIM4BPbpPtr) -= m * ggidlb); /* stamp gisl */ (*(here->BSIM4SPdpPtr) -= m * (ggisls + ggislg + ggislb)); (*(here->BSIM4SPgpPtr) += m * ggislg); (*(here->BSIM4SPspPtr) += m * ggisls); (*(here->BSIM4SPbpPtr) += m * ggislb); (*(here->BSIM4BPdpPtr) += m * (ggislg + ggisls + ggislb)); (*(here->BSIM4BPgpPtr) -= m * ggislg); (*(here->BSIM4BPspPtr) -= m * ggisls); (*(here->BSIM4BPbpPtr) -= m * ggislb); if (here->BSIM4rbodyMod) { (*(here->BSIM4DPdbPtr) += m * (gcdbdb - here->BSIM4gbd)); (*(here->BSIM4SPsbPtr) -= m * (here->BSIM4gbs - gcsbsb)); (*(here->BSIM4DBdpPtr) += m * (gcdbdb - here->BSIM4gbd)); (*(here->BSIM4DBdbPtr) += m * (here->BSIM4gbd - gcdbdb + here->BSIM4grbpd + here->BSIM4grbdb)); (*(here->BSIM4DBbpPtr) -= m * here->BSIM4grbpd); (*(here->BSIM4DBbPtr) -= m * here->BSIM4grbdb); (*(here->BSIM4BPdbPtr) -= m * here->BSIM4grbpd); (*(here->BSIM4BPbPtr) -= m * here->BSIM4grbpb); (*(here->BSIM4BPsbPtr) -= m * here->BSIM4grbps); (*(here->BSIM4BPbpPtr) += m * (here->BSIM4grbpd + here->BSIM4grbps + here->BSIM4grbpb)); /* WDLiu: (gcbbb - here->BSIM4gbbs) already added to BPbpPtr */ (*(here->BSIM4SBspPtr) += m * (gcsbsb - here->BSIM4gbs)); (*(here->BSIM4SBbpPtr) -= m * here->BSIM4grbps); (*(here->BSIM4SBbPtr) -= m * here->BSIM4grbsb); (*(here->BSIM4SBsbPtr) += m * (here->BSIM4gbs - gcsbsb + here->BSIM4grbps + here->BSIM4grbsb)); (*(here->BSIM4BdbPtr) -= m * here->BSIM4grbdb); (*(here->BSIM4BbpPtr) -= m * here->BSIM4grbpb); (*(here->BSIM4BsbPtr) -= m * here->BSIM4grbsb); (*(here->BSIM4BbPtr) += m * (here->BSIM4grbsb + here->BSIM4grbdb + here->BSIM4grbpb)); } if (here->BSIM4trnqsMod) { (*(here->BSIM4QqPtr) += m * (gqdef + here->BSIM4gtau)); (*(here->BSIM4QgpPtr) += m * (ggtg - gcqgb)); (*(here->BSIM4QdpPtr) += m * (ggtd - gcqdb)); (*(here->BSIM4QspPtr) += m * (ggts - gcqsb)); (*(here->BSIM4QbpPtr) += m * (ggtb - gcqbb)); (*(here->BSIM4DPqPtr) += m * dxpart * here->BSIM4gtau); (*(here->BSIM4SPqPtr) += m * sxpart * here->BSIM4gtau); (*(here->BSIM4GPqPtr) -= m * here->BSIM4gtau); } #endif line1000: ; #ifndef USE_OMP } /* End of MOSFET Instance */ } /* End of Model Instance */ #endif return(OK); } /* function to compute poly depletion effect */ int BSIM4polyDepletion( double phi, double ngate, double epsgate, double coxe, double Vgs, double *Vgs_eff, double *dVgs_eff_dVg) { double T1, T2, T3, T4, T5, T6, T7, T8; /* Poly Gate Si Depletion Effect */ if ((ngate > 1.0e18) && (ngate < 1.0e25) && (Vgs > phi) && (epsgate!=0) ){ T1 = 1.0e6 * CHARGE * epsgate * ngate / (coxe * coxe); T8 = Vgs - phi; T4 = sqrt(1.0 + 2.0 * T8 / T1); T2 = 2.0 * T8 / (T4 + 1.0); T3 = 0.5 * T2 * T2 / T1; /* T3 = Vpoly */ T7 = 1.12 - T3 - 0.05; T6 = sqrt(T7 * T7 + 0.224); T5 = 1.12 - 0.5 * (T7 + T6); *Vgs_eff = Vgs - T5; *dVgs_eff_dVg = 1.0 - (0.5 - 0.5 / T4) * (1.0 + T7 / T6); } else { *Vgs_eff = Vgs; *dVgs_eff_dVg = 1.0; } return(0); } #ifdef USE_OMP void BSIM4LoadRhsMat(GENmodel *inModel, CKTcircuit *ckt) { int InstCount, idx; BSIM4instance **InstArray; BSIM4instance *here; BSIM4model *model = (BSIM4model*)inModel; InstArray = model->BSIM4InstanceArray; InstCount = model->BSIM4InstCount; for(idx = 0; idx < InstCount; idx++) { here = InstArray[idx]; model = BSIM4modPtr(here); /* Update b for Ax = b */ (*(ckt->CKTrhs + here->BSIM4dNodePrime) += here->BSIM4rhsdPrime); (*(ckt->CKTrhs + here->BSIM4gNodePrime) -= here->BSIM4rhsgPrime); if (here->BSIM4rgateMod == 2) (*(ckt->CKTrhs + here->BSIM4gNodeExt) -= here->BSIM4rhsgExt); else if (here->BSIM4rgateMod == 3) (*(ckt->CKTrhs + here->BSIM4gNodeMid) -= here->BSIM4grhsMid); if (!here->BSIM4rbodyMod) { (*(ckt->CKTrhs + here->BSIM4bNodePrime) += here->BSIM4rhsbPrime); (*(ckt->CKTrhs + here->BSIM4sNodePrime) += here->BSIM4rhssPrime); } else { (*(ckt->CKTrhs + here->BSIM4dbNode) -= here->BSIM4rhsdb); (*(ckt->CKTrhs + here->BSIM4bNodePrime) += here->BSIM4rhsbPrime); (*(ckt->CKTrhs + here->BSIM4sbNode) -= here->BSIM4rhssb); (*(ckt->CKTrhs + here->BSIM4sNodePrime) += here->BSIM4rhssPrime); } if (model->BSIM4rdsMod) { (*(ckt->CKTrhs + here->BSIM4dNode) -= here->BSIM4rhsd); (*(ckt->CKTrhs + here->BSIM4sNode) += here->BSIM4rhss); } if (here->BSIM4trnqsMod) *(ckt->CKTrhs + here->BSIM4qNode) += here->BSIM4rhsq; /* Update A for Ax = b */ if (here->BSIM4rgateMod == 1) { (*(here->BSIM4GEgePtr) += here->BSIM4_1); (*(here->BSIM4GPgePtr) -= here->BSIM4_2); (*(here->BSIM4GEgpPtr) -= here->BSIM4_3); (*(here->BSIM4GPgpPtr) += here->BSIM4_4); (*(here->BSIM4GPdpPtr) += here->BSIM4_5); (*(here->BSIM4GPspPtr) += here->BSIM4_6); (*(here->BSIM4GPbpPtr) += here->BSIM4_7); } else if (here->BSIM4rgateMod == 2) { (*(here->BSIM4GEgePtr) += here->BSIM4_8); (*(here->BSIM4GEgpPtr) += here->BSIM4_9); (*(here->BSIM4GEdpPtr) += here->BSIM4_10); (*(here->BSIM4GEspPtr) += here->BSIM4_11); (*(here->BSIM4GEbpPtr) += here->BSIM4_12); (*(here->BSIM4GPgePtr) -= here->BSIM4_13); (*(here->BSIM4GPgpPtr) += here->BSIM4_14); (*(here->BSIM4GPdpPtr) += here->BSIM4_15); (*(here->BSIM4GPspPtr) += here->BSIM4_16); (*(here->BSIM4GPbpPtr) += here->BSIM4_17); } else if (here->BSIM4rgateMod == 3) { (*(here->BSIM4GEgePtr) += here->BSIM4_18); (*(here->BSIM4GEgmPtr) -= here->BSIM4_19); (*(here->BSIM4GMgePtr) -= here->BSIM4_20); (*(here->BSIM4GMgmPtr) += here->BSIM4_21); (*(here->BSIM4GMdpPtr) += here->BSIM4_22); (*(here->BSIM4GMgpPtr) += here->BSIM4_23); (*(here->BSIM4GMspPtr) += here->BSIM4_24); (*(here->BSIM4GMbpPtr) += here->BSIM4_25); (*(here->BSIM4DPgmPtr) += here->BSIM4_26); (*(here->BSIM4GPgmPtr) -= here->BSIM4_27); (*(here->BSIM4SPgmPtr) += here->BSIM4_28); (*(here->BSIM4BPgmPtr) += here->BSIM4_29); (*(here->BSIM4GPgpPtr) += here->BSIM4_30); (*(here->BSIM4GPdpPtr) += here->BSIM4_31); (*(here->BSIM4GPspPtr) += here->BSIM4_32); (*(here->BSIM4GPbpPtr) += here->BSIM4_33); } else { (*(here->BSIM4GPgpPtr) += here->BSIM4_34); (*(here->BSIM4GPdpPtr) += here->BSIM4_35); (*(here->BSIM4GPspPtr) += here->BSIM4_36); (*(here->BSIM4GPbpPtr) += here->BSIM4_37); } if (model->BSIM4rdsMod) { (*(here->BSIM4DgpPtr) += here->BSIM4_38); (*(here->BSIM4DspPtr) += here->BSIM4_39); (*(here->BSIM4DbpPtr) += here->BSIM4_40); (*(here->BSIM4SdpPtr) += here->BSIM4_41); (*(here->BSIM4SgpPtr) += here->BSIM4_42); (*(here->BSIM4SbpPtr) += here->BSIM4_43); } (*(here->BSIM4DPdpPtr) += here->BSIM4_44); (*(here->BSIM4DPdPtr) -= here->BSIM4_45); (*(here->BSIM4DPgpPtr) += here->BSIM4_46); (*(here->BSIM4DPspPtr) -= here->BSIM4_47); (*(here->BSIM4DPbpPtr) -= here->BSIM4_48); (*(here->BSIM4DdpPtr) -= here->BSIM4_49); (*(here->BSIM4DdPtr) += here->BSIM4_50); (*(here->BSIM4SPdpPtr) -= here->BSIM4_51); (*(here->BSIM4SPgpPtr) += here->BSIM4_52); (*(here->BSIM4SPspPtr) += here->BSIM4_53); (*(here->BSIM4SPsPtr) -= here->BSIM4_54); (*(here->BSIM4SPbpPtr) -= here->BSIM4_55); (*(here->BSIM4SspPtr) -= here->BSIM4_56); (*(here->BSIM4SsPtr) += here->BSIM4_57); (*(here->BSIM4BPdpPtr) += here->BSIM4_58); (*(here->BSIM4BPgpPtr) += here->BSIM4_59); (*(here->BSIM4BPspPtr) += here->BSIM4_60); (*(here->BSIM4BPbpPtr) += here->BSIM4_61); /* stamp gidl */ (*(here->BSIM4DPdpPtr) += here->BSIM4_62); (*(here->BSIM4DPgpPtr) += here->BSIM4_63); (*(here->BSIM4DPspPtr) -= here->BSIM4_64); (*(here->BSIM4DPbpPtr) += here->BSIM4_65); (*(here->BSIM4BPdpPtr) -= here->BSIM4_66); (*(here->BSIM4BPgpPtr) -= here->BSIM4_67); (*(here->BSIM4BPspPtr) += here->BSIM4_68); (*(here->BSIM4BPbpPtr) -= here->BSIM4_69); /* stamp gisl */ (*(here->BSIM4SPdpPtr) -= here->BSIM4_70); (*(here->BSIM4SPgpPtr) += here->BSIM4_71); (*(here->BSIM4SPspPtr) += here->BSIM4_72); (*(here->BSIM4SPbpPtr) += here->BSIM4_73); (*(here->BSIM4BPdpPtr) += here->BSIM4_74); (*(here->BSIM4BPgpPtr) -= here->BSIM4_75); (*(here->BSIM4BPspPtr) -= here->BSIM4_76); (*(here->BSIM4BPbpPtr) -= here->BSIM4_77); if (here->BSIM4rbodyMod) { (*(here->BSIM4DPdbPtr) += here->BSIM4_78); (*(here->BSIM4SPsbPtr) -= here->BSIM4_79); (*(here->BSIM4DBdpPtr) += here->BSIM4_80); (*(here->BSIM4DBdbPtr) += here->BSIM4_81); (*(here->BSIM4DBbpPtr) -= here->BSIM4_82); (*(here->BSIM4DBbPtr) -= here->BSIM4_83); (*(here->BSIM4BPdbPtr) -= here->BSIM4_84); (*(here->BSIM4BPbPtr) -= here->BSIM4_85); (*(here->BSIM4BPsbPtr) -= here->BSIM4_86); (*(here->BSIM4BPbpPtr) += here->BSIM4_87); (*(here->BSIM4SBspPtr) += here->BSIM4_88); (*(here->BSIM4SBbpPtr) -= here->BSIM4_89); (*(here->BSIM4SBbPtr) -= here->BSIM4_90); (*(here->BSIM4SBsbPtr) += here->BSIM4_91); (*(here->BSIM4BdbPtr) -= here->BSIM4_92); (*(here->BSIM4BbpPtr) -= here->BSIM4_93); (*(here->BSIM4BsbPtr) -= here->BSIM4_94); (*(here->BSIM4BbPtr) += here->BSIM4_95); } if (here->BSIM4trnqsMod) { (*(here->BSIM4QqPtr) += here->BSIM4_96); (*(here->BSIM4QgpPtr) += here->BSIM4_97); (*(here->BSIM4QdpPtr) += here->BSIM4_98); (*(here->BSIM4QspPtr) += here->BSIM4_99); (*(here->BSIM4QbpPtr) += here->BSIM4_100); (*(here->BSIM4DPqPtr) += here->BSIM4_101); (*(here->BSIM4SPqPtr) += here->BSIM4_102); (*(here->BSIM4GPqPtr) -= here->BSIM4_103); } } } #endif tmpk8ny_4pz/src/spicelib/devices/bsim4/b4temp.c0000644000175000017500000037510213546075722021550 0ustar carstencarsten/* ****************************************************************************** * BSIM4 4.8.1 released by Chetan Kumar Dabhi 2/15/2017 * * BSIM4 Model Equations * ****************************************************************************** ****************************************************************************** * Copyright 2017 Regents of the University of California. * * All rights reserved. * * * * Project Director: Prof. Chenming Hu. * * Authors: Gary W. Ng, Weidong Liu, Xuemei Xi, Mohan Dunga, Wenwei Yang * * Ali Niknejad, Shivendra Singh Parihar, Chetan Kumar Dabhi * * Yogesh Singh Chauhan, Sayeef Salahuddin, Chenming Hu * ****************************************************************************** ****************************************************************************** * CMC In-Code Statement * * * * The Developer agrees that the following statement will appear in the * * model code that has been adopted as a CMC Standard. * * * * Software is distributed as is, completely without warranty or service * * support. The University of California and its employees are not liable * * for the condition or performance of the software. * * * * The University of California owns the copyright and grants users a * * perpetual, irrevocable, worldwide, non-exclusive, royalty-free license * * with respect to the software as set forth below. * * * * The University of California hereby disclaims all implied warranties. * * * * The University of California grants the users the right to modify, * * copy, and redistribute the software and documentation, both within * * the user's organization and externally, subject to the following * * restrictions: * * * * 1. The users agree not to charge for the University of California code * * itself but may charge for additions, extensions, or support. * * * * 2. In any product based on the software, the users agree to * * acknowledge the University of California that developed the * * software. This acknowledgment shall appear in the product * * documentation. * * * * 3. Redistributions to others of source code and documentation must * * retain the copyright notice, disclaimer, and list of conditions. * * * * 4. Redistributions to others in binary form must reproduce the * * copyright notice, disclaimer, and list of conditions in the * * documentation and/or other materials provided with the * * distribution. * * * * Agreed to on ______Feb. 15, 2017______________ * * * * By: ____University of California, Berkeley___ * * ____Chenming Hu__________________________ * * ____Professor in Graduate School ________ * * * ****************************************************************************** */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "bsim4def.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define Kb 1.3806226e-23 #define KboQ 8.617087e-5 #define EPS0 8.85418e-12 #define EPSSI 1.03594e-10 #define PI 3.141592654 #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define Charge_q 1.60219e-19 #define DELTA 1.0E-9 #define DEXP(A,B) { \ if (A > EXP_THRESHOLD) { \ B = MAX_EXP*(1.0+(A)-EXP_THRESHOLD); \ } else if (A < -EXP_THRESHOLD) { \ B = MIN_EXP; \ } else { \ B = exp(A); \ } \ } static int BSIM4DioIjthVjmEval( double Nvtm, double Ijth, double Isb, double XExpBV, double *Vjm) { double Tb, Tc, EVjmovNv; Tc = XExpBV; Tb = 1.0 + Ijth / Isb - Tc; EVjmovNv = 0.5 * (Tb + sqrt(Tb * Tb + 4.0 * Tc)); *Vjm = Nvtm * log(EVjmovNv); return 0; } int BSIM4temp( GENmodel *inModel, CKTcircuit *ckt) { BSIM4model *model = (BSIM4model*) inModel; BSIM4instance *here; struct bsim4SizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam=NULL; double tmp, tmp1, tmp2, tmp3, Eg, Eg0, ni, epssub; double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Lnew=0.0, Wnew; double delTemp, Temp, TRatio, Inv_L, Inv_W, Inv_LW, Vtm0, Tnom; double dumPs, dumPd, dumAs, dumAd, PowWeffWr; double DMCGeff, DMCIeff, DMDGeff; double Nvtms, Nvtmd, SourceSatCurrent, DrainSatCurrent; double T10, T11; double Inv_saref, Inv_sbref, Inv_sa, Inv_sb, rho, Ldrn, dvth0_lod; double W_tmp, Inv_ODeff, OD_offset, dk2_lod, deta0_lod; double lnl, lnw, lnnf, rbpbx, rbpby, rbsbx, rbsby, rbdbx, rbdby,bodymode; double kvsat, wlod, sceff, Wdrn; double V0, lt1, ltw, Theta0, Delt_vth, Vth_NarrowW, Lpe_Vb, Vth; double n,n0, Vgsteff, Vgs_eff, niter, toxpf, toxpi, Tcen, toxe, epsrox, vddeot; double vtfbphi2eot, phieot, TempRatioeot, Vtm0eot, Vtmeot,vbieot; int Size_Not_Found, i; /* loop through all the BSIM4 device models */ for (; model != NULL; model = BSIM4nextModel(model)) { Temp = ckt->CKTtemp; if (model->BSIM4SbulkJctPotential < 0.1) { model->BSIM4SbulkJctPotential = 0.1; fprintf(stderr, "Given pbs is less than 0.1. Pbs is set to 0.1.\n"); } if (model->BSIM4SsidewallJctPotential < 0.1) { model->BSIM4SsidewallJctPotential = 0.1; fprintf(stderr, "Given pbsws is less than 0.1. Pbsws is set to 0.1.\n"); } if (model->BSIM4SGatesidewallJctPotential < 0.1) { model->BSIM4SGatesidewallJctPotential = 0.1; fprintf(stderr, "Given pbswgs is less than 0.1. Pbswgs is set to 0.1.\n"); } if (model->BSIM4DbulkJctPotential < 0.1) { model->BSIM4DbulkJctPotential = 0.1; fprintf(stderr, "Given pbd is less than 0.1. Pbd is set to 0.1.\n"); } if (model->BSIM4DsidewallJctPotential < 0.1) { model->BSIM4DsidewallJctPotential = 0.1; fprintf(stderr, "Given pbswd is less than 0.1. Pbswd is set to 0.1.\n"); } if (model->BSIM4DGatesidewallJctPotential < 0.1) { model->BSIM4DGatesidewallJctPotential = 0.1; fprintf(stderr, "Given pbswgd is less than 0.1. Pbswgd is set to 0.1.\n"); } if(model->BSIM4mtrlMod == 0) { if ((model->BSIM4toxeGiven) && (model->BSIM4toxpGiven) && (model->BSIM4dtoxGiven) && (model->BSIM4toxe != (model->BSIM4toxp + model->BSIM4dtox))) printf("Warning: toxe, toxp and dtox all given and toxe != toxp + dtox; dtox ignored.\n"); else if ((model->BSIM4toxeGiven) && (!model->BSIM4toxpGiven)) model->BSIM4toxp = model->BSIM4toxe - model->BSIM4dtox; else if ((!model->BSIM4toxeGiven) && (model->BSIM4toxpGiven)){ model->BSIM4toxe = model->BSIM4toxp + model->BSIM4dtox; if (!model->BSIM4toxmGiven) /* v4.7 */ model->BSIM4toxm = model->BSIM4toxe; } } else if(model->BSIM4mtrlCompatMod != 0) /* v4.7 */ { T0 = model->BSIM4epsrox / 3.9; if ((model->BSIM4eotGiven) && (model->BSIM4toxpGiven) && (model->BSIM4dtoxGiven) && (ABS(model->BSIM4eot * T0 - (model->BSIM4toxp + model->BSIM4dtox)) > 1.0e-20)) { printf("Warning: eot, toxp and dtox all given and eot * EPSROX / 3.9 != toxp + dtox; dtox ignored.\n"); } else if ((model->BSIM4eotGiven) && (!model->BSIM4toxpGiven)) model->BSIM4toxp = T0 * model->BSIM4eot - model->BSIM4dtox; else if ((!model->BSIM4eotGiven) && (model->BSIM4toxpGiven)){ model->BSIM4eot = (model->BSIM4toxp + model->BSIM4dtox) / T0; if (!model->BSIM4toxmGiven) model->BSIM4toxm = model->BSIM4eot; } } if(model->BSIM4mtrlMod) { epsrox = 3.9; toxe = model->BSIM4eot; epssub = EPS0 * model->BSIM4epsrsub; } else { epsrox = model->BSIM4epsrox; toxe = model->BSIM4toxe; epssub = EPSSI; } model->BSIM4coxe = epsrox * EPS0 / toxe; if(model->BSIM4mtrlMod == 0 || model->BSIM4mtrlCompatMod != 0) model->BSIM4coxp = model->BSIM4epsrox * EPS0 / model->BSIM4toxp; if (!model->BSIM4cgdoGiven) { if (model->BSIM4dlcGiven && (model->BSIM4dlc > 0.0)) model->BSIM4cgdo = model->BSIM4dlc * model->BSIM4coxe - model->BSIM4cgdl ; else model->BSIM4cgdo = 0.6 * model->BSIM4xj * model->BSIM4coxe; } if (!model->BSIM4cgsoGiven) { if (model->BSIM4dlcGiven && (model->BSIM4dlc > 0.0)) model->BSIM4cgso = model->BSIM4dlc * model->BSIM4coxe - model->BSIM4cgsl ; else model->BSIM4cgso = 0.6 * model->BSIM4xj * model->BSIM4coxe; } if (!model->BSIM4cgboGiven) model->BSIM4cgbo = 2.0 * model->BSIM4dwc * model->BSIM4coxe; struct bsim4SizeDependParam *p = model->pSizeDependParamKnot; while (p) { struct bsim4SizeDependParam *next_p = p->pNext; FREE(p); p = next_p; } model->pSizeDependParamKnot = NULL; pLastKnot = NULL; Tnom = model->BSIM4tnom; TRatio = Temp / Tnom; model->BSIM4vcrit = CONSTvt0 * log(CONSTvt0 / (CONSTroot2 * 1.0e-14)); model->BSIM4factor1 = sqrt(epssub / (epsrox * EPS0)* toxe); Vtm0 = model->BSIM4vtm0 = KboQ * Tnom; if(model->BSIM4mtrlMod==0) { Eg0 = 1.16 - 7.02e-4 * Tnom * Tnom / (Tnom + 1108.0); ni = 1.45e10 * (Tnom / 300.15) * sqrt(Tnom / 300.15) * exp(21.5565981 - Eg0 / (2.0 * Vtm0)); } else { Eg0 = model->BSIM4bg0sub - model->BSIM4tbgasub * Tnom * Tnom / (Tnom + model->BSIM4tbgbsub); T0 = model->BSIM4bg0sub - model->BSIM4tbgasub * 90090.0225 / (300.15 + model->BSIM4tbgbsub); ni = model->BSIM4ni0sub * (Tnom / 300.15) * sqrt(Tnom / 300.15) * exp((T0 - Eg0) / (2.0 * Vtm0)); } model->BSIM4Eg0 = Eg0; model->BSIM4vtm = KboQ * Temp; if(model->BSIM4mtrlMod == 0) Eg = 1.16 - 7.02e-4 * Temp * Temp / (Temp + 1108.0); else Eg = model->BSIM4bg0sub - model->BSIM4tbgasub * Temp * Temp / (Temp + model->BSIM4tbgbsub); if (Temp != Tnom) { T0 = Eg0 / Vtm0 - Eg / model->BSIM4vtm; T1 = log(Temp / Tnom); T2 = T0 + model->BSIM4SjctTempExponent * T1; T3 = exp(T2 / model->BSIM4SjctEmissionCoeff); model->BSIM4SjctTempSatCurDensity = model->BSIM4SjctSatCurDensity * T3; model->BSIM4SjctSidewallTempSatCurDensity = model->BSIM4SjctSidewallSatCurDensity * T3; model->BSIM4SjctGateSidewallTempSatCurDensity = model->BSIM4SjctGateSidewallSatCurDensity * T3; T2 = T0 + model->BSIM4DjctTempExponent * T1; T3 = exp(T2 / model->BSIM4DjctEmissionCoeff); model->BSIM4DjctTempSatCurDensity = model->BSIM4DjctSatCurDensity * T3; model->BSIM4DjctSidewallTempSatCurDensity = model->BSIM4DjctSidewallSatCurDensity * T3; model->BSIM4DjctGateSidewallTempSatCurDensity = model->BSIM4DjctGateSidewallSatCurDensity * T3; } else { model->BSIM4SjctTempSatCurDensity = model->BSIM4SjctSatCurDensity; model->BSIM4SjctSidewallTempSatCurDensity = model->BSIM4SjctSidewallSatCurDensity; model->BSIM4SjctGateSidewallTempSatCurDensity = model->BSIM4SjctGateSidewallSatCurDensity; model->BSIM4DjctTempSatCurDensity = model->BSIM4DjctSatCurDensity; model->BSIM4DjctSidewallTempSatCurDensity = model->BSIM4DjctSidewallSatCurDensity; model->BSIM4DjctGateSidewallTempSatCurDensity = model->BSIM4DjctGateSidewallSatCurDensity; } if (model->BSIM4SjctTempSatCurDensity < 0.0) model->BSIM4SjctTempSatCurDensity = 0.0; if (model->BSIM4SjctSidewallTempSatCurDensity < 0.0) model->BSIM4SjctSidewallTempSatCurDensity = 0.0; if (model->BSIM4SjctGateSidewallTempSatCurDensity < 0.0) model->BSIM4SjctGateSidewallTempSatCurDensity = 0.0; if (model->BSIM4DjctTempSatCurDensity < 0.0) model->BSIM4DjctTempSatCurDensity = 0.0; if (model->BSIM4DjctSidewallTempSatCurDensity < 0.0) model->BSIM4DjctSidewallTempSatCurDensity = 0.0; if (model->BSIM4DjctGateSidewallTempSatCurDensity < 0.0) model->BSIM4DjctGateSidewallTempSatCurDensity = 0.0; /* Temperature dependence of D/B and S/B diode capacitance begins */ delTemp = ckt->CKTtemp - model->BSIM4tnom; T0 = model->BSIM4tcj * delTemp; if (T0 >= -1.0) { model->BSIM4SunitAreaTempJctCap = model->BSIM4SunitAreaJctCap *(1.0 + T0); /*bug_fix -JX */ model->BSIM4DunitAreaTempJctCap = model->BSIM4DunitAreaJctCap *(1.0 + T0); } else { if (model->BSIM4SunitAreaJctCap > 0.0) { model->BSIM4SunitAreaTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjs to be negative. Cjs is clamped to zero.\n"); } if (model->BSIM4DunitAreaJctCap > 0.0) { model->BSIM4DunitAreaTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjd to be negative. Cjd is clamped to zero.\n"); } } T0 = model->BSIM4tcjsw * delTemp; if (model->BSIM4SunitLengthSidewallJctCap < 0.0)/*4.6.2*/ {model->BSIM4SunitLengthSidewallJctCap = 0.0; fprintf(stderr, "CJSWS is negative. Cjsws is clamped to zero.\n");} if (model->BSIM4DunitLengthSidewallJctCap < 0.0) {model->BSIM4DunitLengthSidewallJctCap = 0.0; fprintf(stderr, "CJSWD is negative. Cjswd is clamped to zero.\n");} if (T0 >= -1.0) { model->BSIM4SunitLengthSidewallTempJctCap = model->BSIM4SunitLengthSidewallJctCap *(1.0 + T0); model->BSIM4DunitLengthSidewallTempJctCap = model->BSIM4DunitLengthSidewallJctCap *(1.0 + T0); } else { if (model->BSIM4SunitLengthSidewallJctCap > 0.0) { model->BSIM4SunitLengthSidewallTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjsws to be negative. Cjsws is clamped to zero.\n"); } if (model->BSIM4DunitLengthSidewallJctCap > 0.0) { model->BSIM4DunitLengthSidewallTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjswd to be negative. Cjswd is clamped to zero.\n"); } } T0 = model->BSIM4tcjswg * delTemp; if (T0 >= -1.0) { model->BSIM4SunitLengthGateSidewallTempJctCap = model->BSIM4SunitLengthGateSidewallJctCap *(1.0 + T0); model->BSIM4DunitLengthGateSidewallTempJctCap = model->BSIM4DunitLengthGateSidewallJctCap *(1.0 + T0); } else { if (model->BSIM4SunitLengthGateSidewallJctCap > 0.0) { model->BSIM4SunitLengthGateSidewallTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjswgs to be negative. Cjswgs is clamped to zero.\n"); } if (model->BSIM4DunitLengthGateSidewallJctCap > 0.0) { model->BSIM4DunitLengthGateSidewallTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjswgd to be negative. Cjswgd is clamped to zero.\n"); } } model->BSIM4PhiBS = model->BSIM4SbulkJctPotential - model->BSIM4tpb * delTemp; if (model->BSIM4PhiBS < 0.01) { model->BSIM4PhiBS = 0.01; fprintf(stderr, "Temperature effect has caused pbs to be less than 0.01. Pbs is clamped to 0.01.\n"); } model->BSIM4PhiBD = model->BSIM4DbulkJctPotential - model->BSIM4tpb * delTemp; if (model->BSIM4PhiBD < 0.01) { model->BSIM4PhiBD = 0.01; fprintf(stderr, "Temperature effect has caused pbd to be less than 0.01. Pbd is clamped to 0.01.\n"); } model->BSIM4PhiBSWS = model->BSIM4SsidewallJctPotential - model->BSIM4tpbsw * delTemp; if (model->BSIM4PhiBSWS <= 0.01) { model->BSIM4PhiBSWS = 0.01; fprintf(stderr, "Temperature effect has caused pbsws to be less than 0.01. Pbsws is clamped to 0.01.\n"); } model->BSIM4PhiBSWD = model->BSIM4DsidewallJctPotential - model->BSIM4tpbsw * delTemp; if (model->BSIM4PhiBSWD <= 0.01) { model->BSIM4PhiBSWD = 0.01; fprintf(stderr, "Temperature effect has caused pbswd to be less than 0.01. Pbswd is clamped to 0.01.\n"); } model->BSIM4PhiBSWGS = model->BSIM4SGatesidewallJctPotential - model->BSIM4tpbswg * delTemp; if (model->BSIM4PhiBSWGS <= 0.01) { model->BSIM4PhiBSWGS = 0.01; fprintf(stderr, "Temperature effect has caused pbswgs to be less than 0.01. Pbswgs is clamped to 0.01.\n"); } model->BSIM4PhiBSWGD = model->BSIM4DGatesidewallJctPotential - model->BSIM4tpbswg * delTemp; if (model->BSIM4PhiBSWGD <= 0.01) { model->BSIM4PhiBSWGD = 0.01; fprintf(stderr, "Temperature effect has caused pbswgd to be less than 0.01. Pbswgd is clamped to 0.01.\n"); } /* End of junction capacitance */ if (model->BSIM4ijthdfwd <= 0.0) { model->BSIM4ijthdfwd = 0.0; fprintf(stderr, "Ijthdfwd reset to %g.\n", model->BSIM4ijthdfwd); } if (model->BSIM4ijthsfwd <= 0.0) { model->BSIM4ijthsfwd = 0.0; fprintf(stderr, "Ijthsfwd reset to %g.\n", model->BSIM4ijthsfwd); } if (model->BSIM4ijthdrev <= 0.0) { model->BSIM4ijthdrev = 0.0; fprintf(stderr, "Ijthdrev reset to %g.\n", model->BSIM4ijthdrev); } if (model->BSIM4ijthsrev <= 0.0) { model->BSIM4ijthsrev = 0.0; fprintf(stderr, "Ijthsrev reset to %g.\n", model->BSIM4ijthsrev); } if ((model->BSIM4xjbvd <= 0.0) && (model->BSIM4dioMod == 2)) { model->BSIM4xjbvd = 0.0; fprintf(stderr, "Xjbvd reset to %g.\n", model->BSIM4xjbvd); } else if ((model->BSIM4xjbvd < 0.0) && (model->BSIM4dioMod == 0)) { model->BSIM4xjbvd = 0.0; fprintf(stderr, "Xjbvd reset to %g.\n", model->BSIM4xjbvd); } if (model->BSIM4bvd <= 0.0) /*4.6.2*/ { model->BSIM4bvd = 0.0; fprintf(stderr, "BVD reset to %g.\n", model->BSIM4bvd); } if ((model->BSIM4xjbvs <= 0.0) && (model->BSIM4dioMod == 2)) { model->BSIM4xjbvs = 0.0; fprintf(stderr, "Xjbvs reset to %g.\n", model->BSIM4xjbvs); } else if ((model->BSIM4xjbvs < 0.0) && (model->BSIM4dioMod == 0)) { model->BSIM4xjbvs = 0.0; fprintf(stderr, "Xjbvs reset to %g.\n", model->BSIM4xjbvs); } if (model->BSIM4bvs <= 0.0) { model->BSIM4bvs = 0.0; fprintf(stderr, "BVS reset to %g.\n", model->BSIM4bvs); } /* loop through all the instances of the model */ for (here = BSIM4instances(model); here != NULL; here = BSIM4nextInstance(here)) { pSizeDependParamKnot = model->pSizeDependParamKnot; Size_Not_Found = 1; while ((pSizeDependParamKnot != NULL) && Size_Not_Found) { if ((here->BSIM4l == pSizeDependParamKnot->Length) && (here->BSIM4w == pSizeDependParamKnot->Width) && (here->BSIM4nf == pSizeDependParamKnot->NFinger)) { Size_Not_Found = 0; here->pParam = pSizeDependParamKnot; pParam = here->pParam; /*bug-fix */ } else { pLastKnot = pSizeDependParamKnot; pSizeDependParamKnot = pSizeDependParamKnot->pNext; } } /* stress effect */ Ldrn = here->BSIM4l; Wdrn = here->BSIM4w / here->BSIM4nf; if (Size_Not_Found) { pParam = TMALLOC(struct bsim4SizeDependParam, 1); if (pLastKnot == NULL) model->pSizeDependParamKnot = pParam; else pLastKnot->pNext = pParam; pParam->pNext = NULL; here->pParam = pParam; pParam->Length = here->BSIM4l; pParam->Width = here->BSIM4w; pParam->NFinger = here->BSIM4nf; Lnew = here->BSIM4l + model->BSIM4xl ; Wnew = here->BSIM4w / here->BSIM4nf + model->BSIM4xw; T0 = pow(Lnew, model->BSIM4Lln); T1 = pow(Wnew, model->BSIM4Lwn); tmp1 = model->BSIM4Ll / T0 + model->BSIM4Lw / T1 + model->BSIM4Lwl / (T0 * T1); pParam->BSIM4dl = model->BSIM4Lint + tmp1; tmp2 = model->BSIM4Llc / T0 + model->BSIM4Lwc / T1 + model->BSIM4Lwlc / (T0 * T1); pParam->BSIM4dlc = model->BSIM4dlc + tmp2; T2 = pow(Lnew, model->BSIM4Wln); T3 = pow(Wnew, model->BSIM4Wwn); tmp1 = model->BSIM4Wl / T2 + model->BSIM4Ww / T3 + model->BSIM4Wwl / (T2 * T3); pParam->BSIM4dw = model->BSIM4Wint + tmp1; tmp2 = model->BSIM4Wlc / T2 + model->BSIM4Wwc / T3 + model->BSIM4Wwlc / (T2 * T3); pParam->BSIM4dwc = model->BSIM4dwc + tmp2; pParam->BSIM4dwj = model->BSIM4dwj + tmp2; pParam->BSIM4leff = Lnew - 2.0 * pParam->BSIM4dl; if (pParam->BSIM4leff <= 0.0) { SPfrontEnd->IFerrorf(ERR_FATAL, "BSIM4: mosfet %s, model %s: Effective channel length <= 0", model->BSIM4modName, here->BSIM4name); return(E_BADPARM); } pParam->BSIM4weff = Wnew - 2.0 * pParam->BSIM4dw; if (pParam->BSIM4weff <= 0.0) { SPfrontEnd->IFerrorf(ERR_FATAL, "BSIM4: mosfet %s, model %s: Effective channel width <= 0", model->BSIM4modName, here->BSIM4name); return(E_BADPARM); } pParam->BSIM4leffCV = Lnew - 2.0 * pParam->BSIM4dlc; if (pParam->BSIM4leffCV <= 0.0) { SPfrontEnd->IFerrorf(ERR_FATAL, "BSIM4: mosfet %s, model %s: Effective channel length for C-V <= 0", model->BSIM4modName, here->BSIM4name); return(E_BADPARM); } pParam->BSIM4weffCV = Wnew - 2.0 * pParam->BSIM4dwc; if (pParam->BSIM4weffCV <= 0.0) { SPfrontEnd->IFerrorf(ERR_FATAL, "BSIM4: mosfet %s, model %s: Effective channel width for C-V <= 0", model->BSIM4modName, here->BSIM4name); return(E_BADPARM); } pParam->BSIM4weffCJ = Wnew - 2.0 * pParam->BSIM4dwj; if (pParam->BSIM4weffCJ <= 0.0) { SPfrontEnd->IFerrorf(ERR_FATAL, "BSIM4: mosfet %s, model %s: Effective channel width for S/D junctions <= 0", model->BSIM4modName, here->BSIM4name); return(E_BADPARM); } if (model->BSIM4binUnit == 1) { Inv_L = 1.0e-6 / pParam->BSIM4leff; Inv_W = 1.0e-6 / pParam->BSIM4weff; Inv_LW = 1.0e-12 / (pParam->BSIM4leff * pParam->BSIM4weff); } else { Inv_L = 1.0 / pParam->BSIM4leff; Inv_W = 1.0 / pParam->BSIM4weff; Inv_LW = 1.0 / (pParam->BSIM4leff * pParam->BSIM4weff); } pParam->BSIM4cdsc = model->BSIM4cdsc + model->BSIM4lcdsc * Inv_L + model->BSIM4wcdsc * Inv_W + model->BSIM4pcdsc * Inv_LW; pParam->BSIM4cdscb = model->BSIM4cdscb + model->BSIM4lcdscb * Inv_L + model->BSIM4wcdscb * Inv_W + model->BSIM4pcdscb * Inv_LW; pParam->BSIM4cdscd = model->BSIM4cdscd + model->BSIM4lcdscd * Inv_L + model->BSIM4wcdscd * Inv_W + model->BSIM4pcdscd * Inv_LW; pParam->BSIM4cit = model->BSIM4cit + model->BSIM4lcit * Inv_L + model->BSIM4wcit * Inv_W + model->BSIM4pcit * Inv_LW; pParam->BSIM4nfactor = model->BSIM4nfactor + model->BSIM4lnfactor * Inv_L + model->BSIM4wnfactor * Inv_W + model->BSIM4pnfactor * Inv_LW; pParam->BSIM4tnfactor = model->BSIM4tnfactor /* v4.7 */ + model->BSIM4ltnfactor * Inv_L + model->BSIM4wtnfactor * Inv_W + model->BSIM4ptnfactor * Inv_LW; pParam->BSIM4xj = model->BSIM4xj + model->BSIM4lxj * Inv_L + model->BSIM4wxj * Inv_W + model->BSIM4pxj * Inv_LW; pParam->BSIM4vsat = model->BSIM4vsat + model->BSIM4lvsat * Inv_L + model->BSIM4wvsat * Inv_W + model->BSIM4pvsat * Inv_LW; pParam->BSIM4at = model->BSIM4at + model->BSIM4lat * Inv_L + model->BSIM4wat * Inv_W + model->BSIM4pat * Inv_LW; pParam->BSIM4a0 = model->BSIM4a0 + model->BSIM4la0 * Inv_L + model->BSIM4wa0 * Inv_W + model->BSIM4pa0 * Inv_LW; pParam->BSIM4ags = model->BSIM4ags + model->BSIM4lags * Inv_L + model->BSIM4wags * Inv_W + model->BSIM4pags * Inv_LW; pParam->BSIM4a1 = model->BSIM4a1 + model->BSIM4la1 * Inv_L + model->BSIM4wa1 * Inv_W + model->BSIM4pa1 * Inv_LW; pParam->BSIM4a2 = model->BSIM4a2 + model->BSIM4la2 * Inv_L + model->BSIM4wa2 * Inv_W + model->BSIM4pa2 * Inv_LW; pParam->BSIM4keta = model->BSIM4keta + model->BSIM4lketa * Inv_L + model->BSIM4wketa * Inv_W + model->BSIM4pketa * Inv_LW; pParam->BSIM4nsub = model->BSIM4nsub + model->BSIM4lnsub * Inv_L + model->BSIM4wnsub * Inv_W + model->BSIM4pnsub * Inv_LW; pParam->BSIM4ndep = model->BSIM4ndep + model->BSIM4lndep * Inv_L + model->BSIM4wndep * Inv_W + model->BSIM4pndep * Inv_LW; pParam->BSIM4nsd = model->BSIM4nsd + model->BSIM4lnsd * Inv_L + model->BSIM4wnsd * Inv_W + model->BSIM4pnsd * Inv_LW; pParam->BSIM4phin = model->BSIM4phin + model->BSIM4lphin * Inv_L + model->BSIM4wphin * Inv_W + model->BSIM4pphin * Inv_LW; pParam->BSIM4ngate = model->BSIM4ngate + model->BSIM4lngate * Inv_L + model->BSIM4wngate * Inv_W + model->BSIM4pngate * Inv_LW; pParam->BSIM4gamma1 = model->BSIM4gamma1 + model->BSIM4lgamma1 * Inv_L + model->BSIM4wgamma1 * Inv_W + model->BSIM4pgamma1 * Inv_LW; pParam->BSIM4gamma2 = model->BSIM4gamma2 + model->BSIM4lgamma2 * Inv_L + model->BSIM4wgamma2 * Inv_W + model->BSIM4pgamma2 * Inv_LW; pParam->BSIM4vbx = model->BSIM4vbx + model->BSIM4lvbx * Inv_L + model->BSIM4wvbx * Inv_W + model->BSIM4pvbx * Inv_LW; pParam->BSIM4vbm = model->BSIM4vbm + model->BSIM4lvbm * Inv_L + model->BSIM4wvbm * Inv_W + model->BSIM4pvbm * Inv_LW; pParam->BSIM4xt = model->BSIM4xt + model->BSIM4lxt * Inv_L + model->BSIM4wxt * Inv_W + model->BSIM4pxt * Inv_LW; pParam->BSIM4vfb = model->BSIM4vfb + model->BSIM4lvfb * Inv_L + model->BSIM4wvfb * Inv_W + model->BSIM4pvfb * Inv_LW; pParam->BSIM4k1 = model->BSIM4k1 + model->BSIM4lk1 * Inv_L + model->BSIM4wk1 * Inv_W + model->BSIM4pk1 * Inv_LW; pParam->BSIM4kt1 = model->BSIM4kt1 + model->BSIM4lkt1 * Inv_L + model->BSIM4wkt1 * Inv_W + model->BSIM4pkt1 * Inv_LW; pParam->BSIM4kt1l = model->BSIM4kt1l + model->BSIM4lkt1l * Inv_L + model->BSIM4wkt1l * Inv_W + model->BSIM4pkt1l * Inv_LW; pParam->BSIM4k2 = model->BSIM4k2 + model->BSIM4lk2 * Inv_L + model->BSIM4wk2 * Inv_W + model->BSIM4pk2 * Inv_LW; pParam->BSIM4kt2 = model->BSIM4kt2 + model->BSIM4lkt2 * Inv_L + model->BSIM4wkt2 * Inv_W + model->BSIM4pkt2 * Inv_LW; pParam->BSIM4k3 = model->BSIM4k3 + model->BSIM4lk3 * Inv_L + model->BSIM4wk3 * Inv_W + model->BSIM4pk3 * Inv_LW; pParam->BSIM4k3b = model->BSIM4k3b + model->BSIM4lk3b * Inv_L + model->BSIM4wk3b * Inv_W + model->BSIM4pk3b * Inv_LW; pParam->BSIM4w0 = model->BSIM4w0 + model->BSIM4lw0 * Inv_L + model->BSIM4ww0 * Inv_W + model->BSIM4pw0 * Inv_LW; pParam->BSIM4lpe0 = model->BSIM4lpe0 + model->BSIM4llpe0 * Inv_L + model->BSIM4wlpe0 * Inv_W + model->BSIM4plpe0 * Inv_LW; pParam->BSIM4lpeb = model->BSIM4lpeb + model->BSIM4llpeb * Inv_L + model->BSIM4wlpeb * Inv_W + model->BSIM4plpeb * Inv_LW; pParam->BSIM4dvtp0 = model->BSIM4dvtp0 + model->BSIM4ldvtp0 * Inv_L + model->BSIM4wdvtp0 * Inv_W + model->BSIM4pdvtp0 * Inv_LW; pParam->BSIM4dvtp1 = model->BSIM4dvtp1 + model->BSIM4ldvtp1 * Inv_L + model->BSIM4wdvtp1 * Inv_W + model->BSIM4pdvtp1 * Inv_LW; pParam->BSIM4dvtp2 = model->BSIM4dvtp2 /* v4.7 */ + model->BSIM4ldvtp2 * Inv_L + model->BSIM4wdvtp2 * Inv_W + model->BSIM4pdvtp2 * Inv_LW; pParam->BSIM4dvtp3 = model->BSIM4dvtp3 /* v4.7 */ + model->BSIM4ldvtp3 * Inv_L + model->BSIM4wdvtp3 * Inv_W + model->BSIM4pdvtp3 * Inv_LW; pParam->BSIM4dvtp4 = model->BSIM4dvtp4 /* v4.7 */ + model->BSIM4ldvtp4 * Inv_L + model->BSIM4wdvtp4 * Inv_W + model->BSIM4pdvtp4 * Inv_LW; pParam->BSIM4dvtp5 = model->BSIM4dvtp5 /* v4.7 */ + model->BSIM4ldvtp5 * Inv_L + model->BSIM4wdvtp5 * Inv_W + model->BSIM4pdvtp5 * Inv_LW; pParam->BSIM4dvt0 = model->BSIM4dvt0 + model->BSIM4ldvt0 * Inv_L + model->BSIM4wdvt0 * Inv_W + model->BSIM4pdvt0 * Inv_LW; pParam->BSIM4dvt1 = model->BSIM4dvt1 + model->BSIM4ldvt1 * Inv_L + model->BSIM4wdvt1 * Inv_W + model->BSIM4pdvt1 * Inv_LW; pParam->BSIM4dvt2 = model->BSIM4dvt2 + model->BSIM4ldvt2 * Inv_L + model->BSIM4wdvt2 * Inv_W + model->BSIM4pdvt2 * Inv_LW; pParam->BSIM4dvt0w = model->BSIM4dvt0w + model->BSIM4ldvt0w * Inv_L + model->BSIM4wdvt0w * Inv_W + model->BSIM4pdvt0w * Inv_LW; pParam->BSIM4dvt1w = model->BSIM4dvt1w + model->BSIM4ldvt1w * Inv_L + model->BSIM4wdvt1w * Inv_W + model->BSIM4pdvt1w * Inv_LW; pParam->BSIM4dvt2w = model->BSIM4dvt2w + model->BSIM4ldvt2w * Inv_L + model->BSIM4wdvt2w * Inv_W + model->BSIM4pdvt2w * Inv_LW; pParam->BSIM4drout = model->BSIM4drout + model->BSIM4ldrout * Inv_L + model->BSIM4wdrout * Inv_W + model->BSIM4pdrout * Inv_LW; pParam->BSIM4dsub = model->BSIM4dsub + model->BSIM4ldsub * Inv_L + model->BSIM4wdsub * Inv_W + model->BSIM4pdsub * Inv_LW; pParam->BSIM4vth0 = model->BSIM4vth0 + model->BSIM4lvth0 * Inv_L + model->BSIM4wvth0 * Inv_W + model->BSIM4pvth0 * Inv_LW; pParam->BSIM4ua = model->BSIM4ua + model->BSIM4lua * Inv_L + model->BSIM4wua * Inv_W + model->BSIM4pua * Inv_LW; pParam->BSIM4ua1 = model->BSIM4ua1 + model->BSIM4lua1 * Inv_L + model->BSIM4wua1 * Inv_W + model->BSIM4pua1 * Inv_LW; pParam->BSIM4ub = model->BSIM4ub + model->BSIM4lub * Inv_L + model->BSIM4wub * Inv_W + model->BSIM4pub * Inv_LW; pParam->BSIM4ub1 = model->BSIM4ub1 + model->BSIM4lub1 * Inv_L + model->BSIM4wub1 * Inv_W + model->BSIM4pub1 * Inv_LW; pParam->BSIM4uc = model->BSIM4uc + model->BSIM4luc * Inv_L + model->BSIM4wuc * Inv_W + model->BSIM4puc * Inv_LW; pParam->BSIM4uc1 = model->BSIM4uc1 + model->BSIM4luc1 * Inv_L + model->BSIM4wuc1 * Inv_W + model->BSIM4puc1 * Inv_LW; pParam->BSIM4ud = model->BSIM4ud + model->BSIM4lud * Inv_L + model->BSIM4wud * Inv_W + model->BSIM4pud * Inv_LW; pParam->BSIM4ud1 = model->BSIM4ud1 + model->BSIM4lud1 * Inv_L + model->BSIM4wud1 * Inv_W + model->BSIM4pud1 * Inv_LW; pParam->BSIM4up = model->BSIM4up + model->BSIM4lup * Inv_L + model->BSIM4wup * Inv_W + model->BSIM4pup * Inv_LW; pParam->BSIM4lp = model->BSIM4lp + model->BSIM4llp * Inv_L + model->BSIM4wlp * Inv_W + model->BSIM4plp * Inv_LW; pParam->BSIM4eu = model->BSIM4eu + model->BSIM4leu * Inv_L + model->BSIM4weu * Inv_W + model->BSIM4peu * Inv_LW; pParam->BSIM4u0 = model->BSIM4u0 + model->BSIM4lu0 * Inv_L + model->BSIM4wu0 * Inv_W + model->BSIM4pu0 * Inv_LW; pParam->BSIM4ute = model->BSIM4ute + model->BSIM4lute * Inv_L + model->BSIM4wute * Inv_W + model->BSIM4pute * Inv_LW; /*high k mobility*/ pParam->BSIM4ucs = model->BSIM4ucs + model->BSIM4lucs * Inv_L + model->BSIM4wucs * Inv_W + model->BSIM4pucs * Inv_LW; pParam->BSIM4ucste = model->BSIM4ucste + model->BSIM4lucste * Inv_L + model->BSIM4wucste * Inv_W + model->BSIM4pucste * Inv_LW; pParam->BSIM4voff = model->BSIM4voff + model->BSIM4lvoff * Inv_L + model->BSIM4wvoff * Inv_W + model->BSIM4pvoff * Inv_LW; pParam->BSIM4tvoff = model->BSIM4tvoff + model->BSIM4ltvoff * Inv_L + model->BSIM4wtvoff * Inv_W + model->BSIM4ptvoff * Inv_LW; pParam->BSIM4minv = model->BSIM4minv + model->BSIM4lminv * Inv_L + model->BSIM4wminv * Inv_W + model->BSIM4pminv * Inv_LW; pParam->BSIM4minvcv = model->BSIM4minvcv + model->BSIM4lminvcv * Inv_L + model->BSIM4wminvcv * Inv_W + model->BSIM4pminvcv * Inv_LW; pParam->BSIM4fprout = model->BSIM4fprout + model->BSIM4lfprout * Inv_L + model->BSIM4wfprout * Inv_W + model->BSIM4pfprout * Inv_LW; pParam->BSIM4pdits = model->BSIM4pdits + model->BSIM4lpdits * Inv_L + model->BSIM4wpdits * Inv_W + model->BSIM4ppdits * Inv_LW; pParam->BSIM4pditsd = model->BSIM4pditsd + model->BSIM4lpditsd * Inv_L + model->BSIM4wpditsd * Inv_W + model->BSIM4ppditsd * Inv_LW; pParam->BSIM4delta = model->BSIM4delta + model->BSIM4ldelta * Inv_L + model->BSIM4wdelta * Inv_W + model->BSIM4pdelta * Inv_LW; pParam->BSIM4rdsw = model->BSIM4rdsw + model->BSIM4lrdsw * Inv_L + model->BSIM4wrdsw * Inv_W + model->BSIM4prdsw * Inv_LW; pParam->BSIM4rdw = model->BSIM4rdw + model->BSIM4lrdw * Inv_L + model->BSIM4wrdw * Inv_W + model->BSIM4prdw * Inv_LW; pParam->BSIM4rsw = model->BSIM4rsw + model->BSIM4lrsw * Inv_L + model->BSIM4wrsw * Inv_W + model->BSIM4prsw * Inv_LW; pParam->BSIM4prwg = model->BSIM4prwg + model->BSIM4lprwg * Inv_L + model->BSIM4wprwg * Inv_W + model->BSIM4pprwg * Inv_LW; pParam->BSIM4prwb = model->BSIM4prwb + model->BSIM4lprwb * Inv_L + model->BSIM4wprwb * Inv_W + model->BSIM4pprwb * Inv_LW; pParam->BSIM4prt = model->BSIM4prt + model->BSIM4lprt * Inv_L + model->BSIM4wprt * Inv_W + model->BSIM4pprt * Inv_LW; pParam->BSIM4eta0 = model->BSIM4eta0 + model->BSIM4leta0 * Inv_L + model->BSIM4weta0 * Inv_W + model->BSIM4peta0 * Inv_LW; pParam->BSIM4teta0 = model->BSIM4teta0 /* v4.7 */ + model->BSIM4lteta0 * Inv_L + model->BSIM4wteta0 * Inv_W + model->BSIM4pteta0 * Inv_LW; pParam->BSIM4tvoffcv = model->BSIM4tvoffcv /* v4.8.0 */ + model->BSIM4ltvoffcv * Inv_L + model->BSIM4wtvoffcv * Inv_W + model->BSIM4ptvoffcv * Inv_LW; pParam->BSIM4etab = model->BSIM4etab + model->BSIM4letab * Inv_L + model->BSIM4wetab * Inv_W + model->BSIM4petab * Inv_LW; pParam->BSIM4pclm = model->BSIM4pclm + model->BSIM4lpclm * Inv_L + model->BSIM4wpclm * Inv_W + model->BSIM4ppclm * Inv_LW; pParam->BSIM4pdibl1 = model->BSIM4pdibl1 + model->BSIM4lpdibl1 * Inv_L + model->BSIM4wpdibl1 * Inv_W + model->BSIM4ppdibl1 * Inv_LW; pParam->BSIM4pdibl2 = model->BSIM4pdibl2 + model->BSIM4lpdibl2 * Inv_L + model->BSIM4wpdibl2 * Inv_W + model->BSIM4ppdibl2 * Inv_LW; pParam->BSIM4pdiblb = model->BSIM4pdiblb + model->BSIM4lpdiblb * Inv_L + model->BSIM4wpdiblb * Inv_W + model->BSIM4ppdiblb * Inv_LW; pParam->BSIM4pscbe1 = model->BSIM4pscbe1 + model->BSIM4lpscbe1 * Inv_L + model->BSIM4wpscbe1 * Inv_W + model->BSIM4ppscbe1 * Inv_LW; pParam->BSIM4pscbe2 = model->BSIM4pscbe2 + model->BSIM4lpscbe2 * Inv_L + model->BSIM4wpscbe2 * Inv_W + model->BSIM4ppscbe2 * Inv_LW; pParam->BSIM4pvag = model->BSIM4pvag + model->BSIM4lpvag * Inv_L + model->BSIM4wpvag * Inv_W + model->BSIM4ppvag * Inv_LW; pParam->BSIM4wr = model->BSIM4wr + model->BSIM4lwr * Inv_L + model->BSIM4wwr * Inv_W + model->BSIM4pwr * Inv_LW; pParam->BSIM4dwg = model->BSIM4dwg + model->BSIM4ldwg * Inv_L + model->BSIM4wdwg * Inv_W + model->BSIM4pdwg * Inv_LW; pParam->BSIM4dwb = model->BSIM4dwb + model->BSIM4ldwb * Inv_L + model->BSIM4wdwb * Inv_W + model->BSIM4pdwb * Inv_LW; pParam->BSIM4b0 = model->BSIM4b0 + model->BSIM4lb0 * Inv_L + model->BSIM4wb0 * Inv_W + model->BSIM4pb0 * Inv_LW; pParam->BSIM4b1 = model->BSIM4b1 + model->BSIM4lb1 * Inv_L + model->BSIM4wb1 * Inv_W + model->BSIM4pb1 * Inv_LW; pParam->BSIM4alpha0 = model->BSIM4alpha0 + model->BSIM4lalpha0 * Inv_L + model->BSIM4walpha0 * Inv_W + model->BSIM4palpha0 * Inv_LW; pParam->BSIM4alpha1 = model->BSIM4alpha1 + model->BSIM4lalpha1 * Inv_L + model->BSIM4walpha1 * Inv_W + model->BSIM4palpha1 * Inv_LW; pParam->BSIM4beta0 = model->BSIM4beta0 + model->BSIM4lbeta0 * Inv_L + model->BSIM4wbeta0 * Inv_W + model->BSIM4pbeta0 * Inv_LW; pParam->BSIM4agidl = model->BSIM4agidl + model->BSIM4lagidl * Inv_L + model->BSIM4wagidl * Inv_W + model->BSIM4pagidl * Inv_LW; pParam->BSIM4bgidl = model->BSIM4bgidl + model->BSIM4lbgidl * Inv_L + model->BSIM4wbgidl * Inv_W + model->BSIM4pbgidl * Inv_LW; pParam->BSIM4cgidl = model->BSIM4cgidl + model->BSIM4lcgidl * Inv_L + model->BSIM4wcgidl * Inv_W + model->BSIM4pcgidl * Inv_LW; pParam->BSIM4egidl = model->BSIM4egidl + model->BSIM4legidl * Inv_L + model->BSIM4wegidl * Inv_W + model->BSIM4pegidl * Inv_LW; pParam->BSIM4rgidl = model->BSIM4rgidl /* v4.7 New GIDL/GISL */ + model->BSIM4lrgidl * Inv_L + model->BSIM4wrgidl * Inv_W + model->BSIM4prgidl * Inv_LW; pParam->BSIM4kgidl = model->BSIM4kgidl /* v4.7 New GIDL/GISL */ + model->BSIM4lkgidl * Inv_L + model->BSIM4wkgidl * Inv_W + model->BSIM4pkgidl * Inv_LW; pParam->BSIM4fgidl = model->BSIM4fgidl /* v4.7 New GIDL/GISL */ + model->BSIM4lfgidl * Inv_L + model->BSIM4wfgidl * Inv_W + model->BSIM4pfgidl * Inv_LW; pParam->BSIM4agisl = model->BSIM4agisl + model->BSIM4lagisl * Inv_L + model->BSIM4wagisl * Inv_W + model->BSIM4pagisl * Inv_LW; pParam->BSIM4bgisl = model->BSIM4bgisl + model->BSIM4lbgisl * Inv_L + model->BSIM4wbgisl * Inv_W + model->BSIM4pbgisl * Inv_LW; pParam->BSIM4cgisl = model->BSIM4cgisl + model->BSIM4lcgisl * Inv_L + model->BSIM4wcgisl * Inv_W + model->BSIM4pcgisl * Inv_LW; pParam->BSIM4egisl = model->BSIM4egisl + model->BSIM4legisl * Inv_L + model->BSIM4wegisl * Inv_W + model->BSIM4pegisl * Inv_LW; pParam->BSIM4rgisl = model->BSIM4rgisl /* v4.7 New GIDL/GISL */ + model->BSIM4lrgisl * Inv_L + model->BSIM4wrgisl * Inv_W + model->BSIM4prgisl * Inv_LW; pParam->BSIM4kgisl = model->BSIM4kgisl /* v4.7 New GIDL/GISL */ + model->BSIM4lkgisl * Inv_L + model->BSIM4wkgisl * Inv_W + model->BSIM4pkgisl * Inv_LW; pParam->BSIM4fgisl = model->BSIM4fgisl /* v4.7 New GIDL/GISL */ + model->BSIM4lfgisl * Inv_L + model->BSIM4wfgisl * Inv_W + model->BSIM4pfgisl * Inv_LW; pParam->BSIM4aigc = model->BSIM4aigc + model->BSIM4laigc * Inv_L + model->BSIM4waigc * Inv_W + model->BSIM4paigc * Inv_LW; pParam->BSIM4bigc = model->BSIM4bigc + model->BSIM4lbigc * Inv_L + model->BSIM4wbigc * Inv_W + model->BSIM4pbigc * Inv_LW; pParam->BSIM4cigc = model->BSIM4cigc + model->BSIM4lcigc * Inv_L + model->BSIM4wcigc * Inv_W + model->BSIM4pcigc * Inv_LW; pParam->BSIM4aigsd = model->BSIM4aigsd + model->BSIM4laigsd * Inv_L + model->BSIM4waigsd * Inv_W + model->BSIM4paigsd * Inv_LW; pParam->BSIM4bigsd = model->BSIM4bigsd + model->BSIM4lbigsd * Inv_L + model->BSIM4wbigsd * Inv_W + model->BSIM4pbigsd * Inv_LW; pParam->BSIM4cigsd = model->BSIM4cigsd + model->BSIM4lcigsd * Inv_L + model->BSIM4wcigsd * Inv_W + model->BSIM4pcigsd * Inv_LW; pParam->BSIM4aigs = model->BSIM4aigs + model->BSIM4laigs * Inv_L + model->BSIM4waigs * Inv_W + model->BSIM4paigs * Inv_LW; pParam->BSIM4bigs = model->BSIM4bigs + model->BSIM4lbigs * Inv_L + model->BSIM4wbigs * Inv_W + model->BSIM4pbigs * Inv_LW; pParam->BSIM4cigs = model->BSIM4cigs + model->BSIM4lcigs * Inv_L + model->BSIM4wcigs * Inv_W + model->BSIM4pcigs * Inv_LW; pParam->BSIM4aigd = model->BSIM4aigd + model->BSIM4laigd * Inv_L + model->BSIM4waigd * Inv_W + model->BSIM4paigd * Inv_LW; pParam->BSIM4bigd = model->BSIM4bigd + model->BSIM4lbigd * Inv_L + model->BSIM4wbigd * Inv_W + model->BSIM4pbigd * Inv_LW; pParam->BSIM4cigd = model->BSIM4cigd + model->BSIM4lcigd * Inv_L + model->BSIM4wcigd * Inv_W + model->BSIM4pcigd * Inv_LW; pParam->BSIM4aigbacc = model->BSIM4aigbacc + model->BSIM4laigbacc * Inv_L + model->BSIM4waigbacc * Inv_W + model->BSIM4paigbacc * Inv_LW; pParam->BSIM4bigbacc = model->BSIM4bigbacc + model->BSIM4lbigbacc * Inv_L + model->BSIM4wbigbacc * Inv_W + model->BSIM4pbigbacc * Inv_LW; pParam->BSIM4cigbacc = model->BSIM4cigbacc + model->BSIM4lcigbacc * Inv_L + model->BSIM4wcigbacc * Inv_W + model->BSIM4pcigbacc * Inv_LW; pParam->BSIM4aigbinv = model->BSIM4aigbinv + model->BSIM4laigbinv * Inv_L + model->BSIM4waigbinv * Inv_W + model->BSIM4paigbinv * Inv_LW; pParam->BSIM4bigbinv = model->BSIM4bigbinv + model->BSIM4lbigbinv * Inv_L + model->BSIM4wbigbinv * Inv_W + model->BSIM4pbigbinv * Inv_LW; pParam->BSIM4cigbinv = model->BSIM4cigbinv + model->BSIM4lcigbinv * Inv_L + model->BSIM4wcigbinv * Inv_W + model->BSIM4pcigbinv * Inv_LW; pParam->BSIM4nigc = model->BSIM4nigc + model->BSIM4lnigc * Inv_L + model->BSIM4wnigc * Inv_W + model->BSIM4pnigc * Inv_LW; pParam->BSIM4nigbacc = model->BSIM4nigbacc + model->BSIM4lnigbacc * Inv_L + model->BSIM4wnigbacc * Inv_W + model->BSIM4pnigbacc * Inv_LW; pParam->BSIM4nigbinv = model->BSIM4nigbinv + model->BSIM4lnigbinv * Inv_L + model->BSIM4wnigbinv * Inv_W + model->BSIM4pnigbinv * Inv_LW; pParam->BSIM4ntox = model->BSIM4ntox + model->BSIM4lntox * Inv_L + model->BSIM4wntox * Inv_W + model->BSIM4pntox * Inv_LW; pParam->BSIM4eigbinv = model->BSIM4eigbinv + model->BSIM4leigbinv * Inv_L + model->BSIM4weigbinv * Inv_W + model->BSIM4peigbinv * Inv_LW; pParam->BSIM4pigcd = model->BSIM4pigcd + model->BSIM4lpigcd * Inv_L + model->BSIM4wpigcd * Inv_W + model->BSIM4ppigcd * Inv_LW; pParam->BSIM4poxedge = model->BSIM4poxedge + model->BSIM4lpoxedge * Inv_L + model->BSIM4wpoxedge * Inv_W + model->BSIM4ppoxedge * Inv_LW; pParam->BSIM4xrcrg1 = model->BSIM4xrcrg1 + model->BSIM4lxrcrg1 * Inv_L + model->BSIM4wxrcrg1 * Inv_W + model->BSIM4pxrcrg1 * Inv_LW; pParam->BSIM4xrcrg2 = model->BSIM4xrcrg2 + model->BSIM4lxrcrg2 * Inv_L + model->BSIM4wxrcrg2 * Inv_W + model->BSIM4pxrcrg2 * Inv_LW; pParam->BSIM4lambda = model->BSIM4lambda + model->BSIM4llambda * Inv_L + model->BSIM4wlambda * Inv_W + model->BSIM4plambda * Inv_LW; pParam->BSIM4vtl = model->BSIM4vtl + model->BSIM4lvtl * Inv_L + model->BSIM4wvtl * Inv_W + model->BSIM4pvtl * Inv_LW; pParam->BSIM4xn = model->BSIM4xn + model->BSIM4lxn * Inv_L + model->BSIM4wxn * Inv_W + model->BSIM4pxn * Inv_LW; pParam->BSIM4vfbsdoff = model->BSIM4vfbsdoff + model->BSIM4lvfbsdoff * Inv_L + model->BSIM4wvfbsdoff * Inv_W + model->BSIM4pvfbsdoff * Inv_LW; pParam->BSIM4tvfbsdoff = model->BSIM4tvfbsdoff + model->BSIM4ltvfbsdoff * Inv_L + model->BSIM4wtvfbsdoff * Inv_W + model->BSIM4ptvfbsdoff * Inv_LW; pParam->BSIM4cgsl = model->BSIM4cgsl + model->BSIM4lcgsl * Inv_L + model->BSIM4wcgsl * Inv_W + model->BSIM4pcgsl * Inv_LW; pParam->BSIM4cgdl = model->BSIM4cgdl + model->BSIM4lcgdl * Inv_L + model->BSIM4wcgdl * Inv_W + model->BSIM4pcgdl * Inv_LW; pParam->BSIM4ckappas = model->BSIM4ckappas + model->BSIM4lckappas * Inv_L + model->BSIM4wckappas * Inv_W + model->BSIM4pckappas * Inv_LW; pParam->BSIM4ckappad = model->BSIM4ckappad + model->BSIM4lckappad * Inv_L + model->BSIM4wckappad * Inv_W + model->BSIM4pckappad * Inv_LW; pParam->BSIM4cf = model->BSIM4cf + model->BSIM4lcf * Inv_L + model->BSIM4wcf * Inv_W + model->BSIM4pcf * Inv_LW; pParam->BSIM4clc = model->BSIM4clc + model->BSIM4lclc * Inv_L + model->BSIM4wclc * Inv_W + model->BSIM4pclc * Inv_LW; pParam->BSIM4cle = model->BSIM4cle + model->BSIM4lcle * Inv_L + model->BSIM4wcle * Inv_W + model->BSIM4pcle * Inv_LW; pParam->BSIM4vfbcv = model->BSIM4vfbcv + model->BSIM4lvfbcv * Inv_L + model->BSIM4wvfbcv * Inv_W + model->BSIM4pvfbcv * Inv_LW; pParam->BSIM4acde = model->BSIM4acde + model->BSIM4lacde * Inv_L + model->BSIM4wacde * Inv_W + model->BSIM4pacde * Inv_LW; pParam->BSIM4moin = model->BSIM4moin + model->BSIM4lmoin * Inv_L + model->BSIM4wmoin * Inv_W + model->BSIM4pmoin * Inv_LW; pParam->BSIM4noff = model->BSIM4noff + model->BSIM4lnoff * Inv_L + model->BSIM4wnoff * Inv_W + model->BSIM4pnoff * Inv_LW; pParam->BSIM4voffcv = model->BSIM4voffcv + model->BSIM4lvoffcv * Inv_L + model->BSIM4wvoffcv * Inv_W + model->BSIM4pvoffcv * Inv_LW; pParam->BSIM4kvth0we = model->BSIM4kvth0we + model->BSIM4lkvth0we * Inv_L + model->BSIM4wkvth0we * Inv_W + model->BSIM4pkvth0we * Inv_LW; pParam->BSIM4k2we = model->BSIM4k2we + model->BSIM4lk2we * Inv_L + model->BSIM4wk2we * Inv_W + model->BSIM4pk2we * Inv_LW; pParam->BSIM4ku0we = model->BSIM4ku0we + model->BSIM4lku0we * Inv_L + model->BSIM4wku0we * Inv_W + model->BSIM4pku0we * Inv_LW; pParam->BSIM4abulkCVfactor = 1.0 + pow((pParam->BSIM4clc / pParam->BSIM4leffCV), pParam->BSIM4cle); T0 = (TRatio - 1.0); PowWeffWr = pow(pParam->BSIM4weffCJ * 1.0e6, pParam->BSIM4wr) * here->BSIM4nf; T1 = T2 = T3 = T4 = 0.0; pParam->BSIM4ucs = pParam->BSIM4ucs * pow(TRatio, pParam->BSIM4ucste); if(model->BSIM4tempMod == 0) { pParam->BSIM4ua = pParam->BSIM4ua + pParam->BSIM4ua1 * T0; pParam->BSIM4ub = pParam->BSIM4ub + pParam->BSIM4ub1 * T0; pParam->BSIM4uc = pParam->BSIM4uc + pParam->BSIM4uc1 * T0; pParam->BSIM4ud = pParam->BSIM4ud + pParam->BSIM4ud1 * T0; pParam->BSIM4vsattemp = pParam->BSIM4vsat - pParam->BSIM4at * T0; T10 = pParam->BSIM4prt * T0; if(model->BSIM4rdsMod) { /* External Rd(V) */ T1 = pParam->BSIM4rdw + T10; T2 = model->BSIM4rdwmin + T10; /* External Rs(V) */ T3 = pParam->BSIM4rsw + T10; T4 = model->BSIM4rswmin + T10; } /* Internal Rds(V) in IV */ pParam->BSIM4rds0 = (pParam->BSIM4rdsw + T10) * here->BSIM4nf / PowWeffWr; pParam->BSIM4rdswmin = (model->BSIM4rdswmin + T10) * here->BSIM4nf / PowWeffWr; } else { if (model->BSIM4tempMod == 3) { pParam->BSIM4ua = pParam->BSIM4ua * pow(TRatio, pParam->BSIM4ua1) ; pParam->BSIM4ub = pParam->BSIM4ub * pow(TRatio, pParam->BSIM4ub1); pParam->BSIM4uc = pParam->BSIM4uc * pow(TRatio, pParam->BSIM4uc1); pParam->BSIM4ud = pParam->BSIM4ud * pow(TRatio, pParam->BSIM4ud1); } else { /* tempMod = 1, 2 */ pParam->BSIM4ua = pParam->BSIM4ua * (1.0 + pParam->BSIM4ua1 * delTemp) ; pParam->BSIM4ub = pParam->BSIM4ub * (1.0 + pParam->BSIM4ub1 * delTemp); pParam->BSIM4uc = pParam->BSIM4uc * (1.0 + pParam->BSIM4uc1 * delTemp); pParam->BSIM4ud = pParam->BSIM4ud * (1.0 + pParam->BSIM4ud1 * delTemp); } pParam->BSIM4vsattemp = pParam->BSIM4vsat * (1.0 - pParam->BSIM4at * delTemp); T10 = 1.0 + pParam->BSIM4prt * delTemp; if(model->BSIM4rdsMod) { /* External Rd(V) */ T1 = pParam->BSIM4rdw * T10; T2 = model->BSIM4rdwmin * T10; /* External Rs(V) */ T3 = pParam->BSIM4rsw * T10; T4 = model->BSIM4rswmin * T10; } /* Internal Rds(V) in IV */ pParam->BSIM4rds0 = pParam->BSIM4rdsw * T10 * here->BSIM4nf / PowWeffWr; pParam->BSIM4rdswmin = model->BSIM4rdswmin * T10 * here->BSIM4nf / PowWeffWr; } if (T1 < 0.0) { T1 = 0.0; printf("Warning: Rdw at current temperature is negative; set to 0.\n"); } if (T2 < 0.0) { T2 = 0.0; printf("Warning: Rdwmin at current temperature is negative; set to 0.\n"); } pParam->BSIM4rd0 = T1 / PowWeffWr; pParam->BSIM4rdwmin = T2 / PowWeffWr; if (T3 < 0.0) { T3 = 0.0; printf("Warning: Rsw at current temperature is negative; set to 0.\n"); } if (T4 < 0.0) { T4 = 0.0; printf("Warning: Rswmin at current temperature is negative; set to 0.\n"); } pParam->BSIM4rs0 = T3 / PowWeffWr; pParam->BSIM4rswmin = T4 / PowWeffWr; if (pParam->BSIM4u0 > 1.0) pParam->BSIM4u0 = pParam->BSIM4u0 / 1.0e4; /* mobility channel length dependence */ T5 = 1.0 - pParam->BSIM4up * exp( - pParam->BSIM4leff / pParam->BSIM4lp); pParam->BSIM4u0temp = pParam->BSIM4u0 * T5 * pow(TRatio, pParam->BSIM4ute); if (pParam->BSIM4eu < 0.0) { pParam->BSIM4eu = 0.0; printf("Warning: eu has been negative; reset to 0.0.\n"); } if (pParam->BSIM4ucs < 0.0) { pParam->BSIM4ucs = 0.0; printf("Warning: ucs has been negative; reset to 0.0.\n"); } pParam->BSIM4vfbsdoff = pParam->BSIM4vfbsdoff * (1.0 + pParam->BSIM4tvfbsdoff * delTemp); pParam->BSIM4voff = pParam->BSIM4voff * (1.0 + pParam->BSIM4tvoff * delTemp); pParam->BSIM4nfactor = pParam->BSIM4nfactor + pParam->BSIM4tnfactor * delTemp / Tnom; /* v4.7 temp dep of leakage currents */ pParam->BSIM4voffcv = pParam->BSIM4voffcv * (1.0 + pParam->BSIM4tvoffcv * delTemp); /* v4.7 temp dep of leakage currents */ pParam->BSIM4eta0 = pParam->BSIM4eta0 + pParam->BSIM4teta0 * delTemp / Tnom; /* v4.7 temp dep of leakage currents */ /* Source End Velocity Limit */ if((model->BSIM4vtlGiven) && (model->BSIM4vtl > 0.0) ) { if(model->BSIM4lc < 0.0) pParam->BSIM4lc = 0.0; else pParam->BSIM4lc = model->BSIM4lc ; T0 = pParam->BSIM4leff / (pParam->BSIM4xn * pParam->BSIM4leff + pParam->BSIM4lc); pParam->BSIM4tfactor = (1.0 - T0) / (1.0 + T0 ); } pParam->BSIM4cgdo = (model->BSIM4cgdo + pParam->BSIM4cf) * pParam->BSIM4weffCV; pParam->BSIM4cgso = (model->BSIM4cgso + pParam->BSIM4cf) * pParam->BSIM4weffCV; pParam->BSIM4cgbo = model->BSIM4cgbo * pParam->BSIM4leffCV * here->BSIM4nf; if (!model->BSIM4ndepGiven && model->BSIM4gamma1Given) { T0 = pParam->BSIM4gamma1 * model->BSIM4coxe; pParam->BSIM4ndep = 3.01248e22 * T0 * T0; } pParam->BSIM4phi = Vtm0 * log(pParam->BSIM4ndep / ni) + pParam->BSIM4phin + 0.4; pParam->BSIM4sqrtPhi = sqrt(pParam->BSIM4phi); pParam->BSIM4phis3 = pParam->BSIM4sqrtPhi * pParam->BSIM4phi; pParam->BSIM4Xdep0 = sqrt(2.0 * epssub / (Charge_q * pParam->BSIM4ndep * 1.0e6)) * pParam->BSIM4sqrtPhi; pParam->BSIM4sqrtXdep0 = sqrt(pParam->BSIM4Xdep0); if(model->BSIM4mtrlMod == 0) pParam->BSIM4litl = sqrt(3.0 * 3.9 / epsrox * pParam->BSIM4xj * toxe); else pParam->BSIM4litl = sqrt(model->BSIM4epsrsub/epsrox * pParam->BSIM4xj * toxe); pParam->BSIM4vbi = Vtm0 * log(pParam->BSIM4nsd * pParam->BSIM4ndep / (ni * ni)); if (model->BSIM4mtrlMod == 0) { if (pParam->BSIM4ngate > 0.0) { pParam->BSIM4vfbsd = Vtm0 * log(pParam->BSIM4ngate / pParam->BSIM4nsd); } else pParam->BSIM4vfbsd = 0.0; } else { T0 = Vtm0 * log(pParam->BSIM4nsd/ni); T1 = 0.5 * Eg0; if(T0 > T1) T0 = T1; T2 = model->BSIM4easub + T1 - model->BSIM4type * T0; pParam->BSIM4vfbsd = model->BSIM4phig - T2; } pParam->BSIM4cdep0 = sqrt(Charge_q * epssub * pParam->BSIM4ndep * 1.0e6 / 2.0 / pParam->BSIM4phi); pParam->BSIM4ToxRatio = exp(pParam->BSIM4ntox * log(model->BSIM4toxref / toxe)) / toxe / toxe; pParam->BSIM4ToxRatioEdge = exp(pParam->BSIM4ntox * log(model->BSIM4toxref / (toxe * pParam->BSIM4poxedge))) / toxe / toxe / pParam->BSIM4poxedge / pParam->BSIM4poxedge; pParam->BSIM4Aechvb = (model->BSIM4type == NMOS) ? 4.97232e-7 : 3.42537e-7; pParam->BSIM4Bechvb = (model->BSIM4type == NMOS) ? 7.45669e11 : 1.16645e12; if ((strcmp(model->BSIM4version, "4.8.1")) && (strncmp(model->BSIM4version, "4.81", 4))) { pParam->BSIM4AechvbEdgeS = pParam->BSIM4Aechvb * pParam->BSIM4weff * model->BSIM4dlcig * pParam->BSIM4ToxRatioEdge; pParam->BSIM4AechvbEdgeD = pParam->BSIM4Aechvb * pParam->BSIM4weff * model->BSIM4dlcigd * pParam->BSIM4ToxRatioEdge; } else { if (model->BSIM4dlcig < 0.0) { printf("Warning: dlcig = %g is negative. Set to zero.\n", model->BSIM4dlcig); model->BSIM4dlcig = 0.0; } pParam->BSIM4AechvbEdgeS = pParam->BSIM4Aechvb * pParam->BSIM4weff * model->BSIM4dlcig * pParam->BSIM4ToxRatioEdge; if (model->BSIM4dlcigd < 0.0) { printf("Warning: dlcigd = %g is negative. Set to zero.\n", model->BSIM4dlcigd); model->BSIM4dlcigd = 0.0; } pParam->BSIM4AechvbEdgeD = pParam->BSIM4Aechvb * pParam->BSIM4weff * model->BSIM4dlcigd * pParam->BSIM4ToxRatioEdge; } pParam->BSIM4BechvbEdge = -pParam->BSIM4Bechvb * toxe * pParam->BSIM4poxedge; pParam->BSIM4Aechvb *= pParam->BSIM4weff * pParam->BSIM4leff * pParam->BSIM4ToxRatio; pParam->BSIM4Bechvb *= -toxe; pParam->BSIM4mstar = 0.5 + atan(pParam->BSIM4minv) / PI; pParam->BSIM4mstarcv = 0.5 + atan(pParam->BSIM4minvcv) / PI; pParam->BSIM4voffcbn = pParam->BSIM4voff + model->BSIM4voffl / pParam->BSIM4leff; pParam->BSIM4voffcbncv = pParam->BSIM4voffcv + model->BSIM4voffcvl / pParam->BSIM4leff; pParam->BSIM4ldeb = sqrt(epssub * Vtm0 / (Charge_q * pParam->BSIM4ndep * 1.0e6)) / 3.0; pParam->BSIM4acde *= pow((pParam->BSIM4ndep / 2.0e16), -0.25); if (model->BSIM4k1Given || model->BSIM4k2Given) { if (!model->BSIM4k1Given) { if ((!ckt->CKTcurJob) || (ckt->CKTcurJob->JOBtype < 9)) /* don't print in sensitivity */ fprintf(stdout, "Warning: k1 should be specified with k2.\n"); pParam->BSIM4k1 = 0.53; } if (!model->BSIM4k2Given) { if ((!ckt->CKTcurJob) || (ckt->CKTcurJob->JOBtype < 9)) /* don't print in sensitivity */ fprintf(stdout, "Warning: k2 should be specified with k1.\n"); pParam->BSIM4k2 = -0.0186; } if ((!ckt->CKTcurJob) || (ckt->CKTcurJob->JOBtype < 9)) { /* don't print in sensitivity */ if (model->BSIM4nsubGiven) fprintf(stdout, "Warning: nsub is ignored because k1 or k2 is given.\n"); if (model->BSIM4xtGiven) fprintf(stdout, "Warning: xt is ignored because k1 or k2 is given.\n"); if (model->BSIM4vbxGiven) fprintf(stdout, "Warning: vbx is ignored because k1 or k2 is given.\n"); if (model->BSIM4gamma1Given) fprintf(stdout, "Warning: gamma1 is ignored because k1 or k2 is given.\n"); if (model->BSIM4gamma2Given) fprintf(stdout, "Warning: gamma2 is ignored because k1 or k2 is given.\n"); } } else { if (!model->BSIM4vbxGiven) pParam->BSIM4vbx = pParam->BSIM4phi - 7.7348e-4 * pParam->BSIM4ndep * pParam->BSIM4xt * pParam->BSIM4xt; if (pParam->BSIM4vbx > 0.0) pParam->BSIM4vbx = -pParam->BSIM4vbx; if (pParam->BSIM4vbm > 0.0) pParam->BSIM4vbm = -pParam->BSIM4vbm; if (!model->BSIM4gamma1Given) pParam->BSIM4gamma1 = 5.753e-12 * sqrt(pParam->BSIM4ndep) / model->BSIM4coxe; if (!model->BSIM4gamma2Given) pParam->BSIM4gamma2 = 5.753e-12 * sqrt(pParam->BSIM4nsub) / model->BSIM4coxe; T0 = pParam->BSIM4gamma1 - pParam->BSIM4gamma2; T1 = sqrt(pParam->BSIM4phi - pParam->BSIM4vbx) - pParam->BSIM4sqrtPhi; T2 = sqrt(pParam->BSIM4phi * (pParam->BSIM4phi - pParam->BSIM4vbm)) - pParam->BSIM4phi; pParam->BSIM4k2 = T0 * T1 / (2.0 * T2 + pParam->BSIM4vbm); pParam->BSIM4k1 = pParam->BSIM4gamma2 - 2.0 * pParam->BSIM4k2 * sqrt(pParam->BSIM4phi - pParam->BSIM4vbm); } if (!model->BSIM4vfbGiven) { if (model->BSIM4vth0Given) { pParam->BSIM4vfb = model->BSIM4type * pParam->BSIM4vth0 - pParam->BSIM4phi - pParam->BSIM4k1 * pParam->BSIM4sqrtPhi; } else { if ((model->BSIM4mtrlMod) && (model->BSIM4phigGiven) && (model->BSIM4nsubGiven)) { T0 = Vtm0 * log(pParam->BSIM4nsub/ni); T1 = 0.5 * Eg0; if(T0 > T1) T0 = T1; T2 = model->BSIM4easub + T1 + model->BSIM4type * T0; pParam->BSIM4vfb = model->BSIM4phig - T2; } else { pParam->BSIM4vfb = -1.0; } } } if (!model->BSIM4vth0Given) { pParam->BSIM4vth0 = model->BSIM4type * (pParam->BSIM4vfb + pParam->BSIM4phi + pParam->BSIM4k1 * pParam->BSIM4sqrtPhi); } pParam->BSIM4k1ox = pParam->BSIM4k1 * toxe / model->BSIM4toxm; tmp = sqrt(epssub / (epsrox * EPS0) * toxe * pParam->BSIM4Xdep0); T0 = pParam->BSIM4dsub * pParam->BSIM4leff / tmp; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; pParam->BSIM4theta0vb0 = T1 / T4; } else pParam->BSIM4theta0vb0 = 1.0 / (MAX_EXP - 2.0); T0 = pParam->BSIM4drout * pParam->BSIM4leff / tmp; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; T5 = T1 / T4; } else T5 = 1.0 / (MAX_EXP - 2.0); /* 3.0 * MIN_EXP omitted */ pParam->BSIM4thetaRout = pParam->BSIM4pdibl1 * T5 + pParam->BSIM4pdibl2; tmp = sqrt(pParam->BSIM4Xdep0); tmp1 = pParam->BSIM4vbi - pParam->BSIM4phi; tmp2 = model->BSIM4factor1 * tmp; T0 = pParam->BSIM4dvt1w * pParam->BSIM4weff * pParam->BSIM4leff / tmp2; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; T8 = T1 / T4; } else T8 = 1.0 / (MAX_EXP - 2.0); T0 = pParam->BSIM4dvt0w * T8; T8 = T0 * tmp1; T0 = pParam->BSIM4dvt1 * pParam->BSIM4leff / tmp2; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; T9 = T1 / T4; } else T9 = 1.0 / (MAX_EXP - 2.0); T9 = pParam->BSIM4dvt0 * T9 * tmp1; T4 = toxe * pParam->BSIM4phi / (pParam->BSIM4weff + pParam->BSIM4w0); T0 = sqrt(1.0 + pParam->BSIM4lpe0 / pParam->BSIM4leff); if((model->BSIM4tempMod == 1) || (model->BSIM4tempMod == 0)) T3 = (pParam->BSIM4kt1 + pParam->BSIM4kt1l / pParam->BSIM4leff) * (TRatio - 1.0); if((model->BSIM4tempMod == 2)||(model->BSIM4tempMod == 3)) T3 = - pParam->BSIM4kt1 * (TRatio - 1.0); T5 = pParam->BSIM4k1ox * (T0 - 1.0) * pParam->BSIM4sqrtPhi + T3; pParam->BSIM4vfbzbfactor = - T8 - T9 + pParam->BSIM4k3 * T4 + T5 - pParam->BSIM4phi - pParam->BSIM4k1 * pParam->BSIM4sqrtPhi; /* stress effect */ wlod = model->BSIM4wlod; if (model->BSIM4wlod < 0.0) { fprintf(stderr, "Warning: WLOD = %g is less than 0. 0.0 is used\n",model->BSIM4wlod); wlod = 0.0; } T0 = pow(Lnew, model->BSIM4llodku0); W_tmp = Wnew + wlod; T1 = pow(W_tmp, model->BSIM4wlodku0); tmp1 = model->BSIM4lku0 / T0 + model->BSIM4wku0 / T1 + model->BSIM4pku0 / (T0 * T1); pParam->BSIM4ku0 = 1.0 + tmp1; T0 = pow(Lnew, model->BSIM4llodvth); T1 = pow(W_tmp, model->BSIM4wlodvth); tmp1 = model->BSIM4lkvth0 / T0 + model->BSIM4wkvth0 / T1 + model->BSIM4pkvth0 / (T0 * T1); pParam->BSIM4kvth0 = 1.0 + tmp1; pParam->BSIM4kvth0 = sqrt(pParam->BSIM4kvth0*pParam->BSIM4kvth0 + DELTA); T0 = (TRatio - 1.0); pParam->BSIM4ku0temp = pParam->BSIM4ku0 * (1.0 + model->BSIM4tku0 *T0) + DELTA; Inv_saref = 1.0/(model->BSIM4saref + 0.5*Ldrn); Inv_sbref = 1.0/(model->BSIM4sbref + 0.5*Ldrn); pParam->BSIM4inv_od_ref = Inv_saref + Inv_sbref; pParam->BSIM4rho_ref = model->BSIM4ku0 / pParam->BSIM4ku0temp * pParam->BSIM4inv_od_ref; /*high k*/ /*Calculate VgsteffVth for mobMod=3*/ if(model->BSIM4mobMod==3) { /*Calculate n @ Vbs=Vds=0*/ lt1 = model->BSIM4factor1* pParam->BSIM4sqrtXdep0; T0 = pParam->BSIM4dvt1 * pParam->BSIM4leff / lt1; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; Theta0 = T1 / T4; } else Theta0 = 1.0 / (MAX_EXP - 2.0); tmp1 = epssub / pParam->BSIM4Xdep0; tmp2 = pParam->BSIM4nfactor * tmp1; tmp3 = (tmp2 + pParam->BSIM4cdsc * Theta0 + pParam->BSIM4cit) / model->BSIM4coxe; if (tmp3 >= -0.5) n0 = 1.0 + tmp3; else { T0 = 1.0 / (3.0 + 8.0 * tmp3); n0 = (1.0 + 3.0 * tmp3) * T0; } T0 = n0 * model->BSIM4vtm; T1 = pParam->BSIM4voffcbn; T2 = T1/T0; if (T2 < -EXP_THRESHOLD) { T3 = model->BSIM4coxe * MIN_EXP / pParam->BSIM4cdep0; T4 = pParam->BSIM4mstar + T3 * n0; } else if (T2 > EXP_THRESHOLD) { T3 = model->BSIM4coxe * MAX_EXP / pParam->BSIM4cdep0; T4 = pParam->BSIM4mstar + T3 * n0; } else { T3 = exp(T2)* model->BSIM4coxe / pParam->BSIM4cdep0; T4 = pParam->BSIM4mstar + T3 * n0; } pParam->BSIM4VgsteffVth = T0 * log(2.0)/T4; } /* New DITS term added in 4.7 */ T0 = -pParam->BSIM4dvtp3 * log(pParam->BSIM4leff); DEXP(T0, T1); pParam->BSIM4dvtp2factor = pParam->BSIM4dvtp5 + pParam->BSIM4dvtp2 * T1; } /* End of SizeNotFound */ /* stress effect */ if( (here->BSIM4sa > 0.0) && (here->BSIM4sb > 0.0) && ((here->BSIM4nf == 1.0) || ((here->BSIM4nf > 1.0) && (here->BSIM4sd > 0.0))) ) { Inv_sa = 0; Inv_sb = 0; kvsat = model->BSIM4kvsat; if (model->BSIM4kvsat < -1.0 ) { fprintf(stderr, "Warning: KVSAT = %g is too small; -1.0 is used.\n",model->BSIM4kvsat); kvsat = -1.0; } if (model->BSIM4kvsat > 1.0) { fprintf(stderr, "Warning: KVSAT = %g is too big; 1.0 is used.\n",model->BSIM4kvsat); kvsat = 1.0; } for(i = 0; i < here->BSIM4nf; i++){ T0 = 1.0 / here->BSIM4nf / (here->BSIM4sa + 0.5*Ldrn + i * (here->BSIM4sd +Ldrn)); T1 = 1.0 / here->BSIM4nf / (here->BSIM4sb + 0.5*Ldrn + i * (here->BSIM4sd +Ldrn)); Inv_sa += T0; Inv_sb += T1; } Inv_ODeff = Inv_sa + Inv_sb; rho = model->BSIM4ku0 / pParam->BSIM4ku0temp * Inv_ODeff; T0 = (1.0 + rho)/(1.0 + pParam->BSIM4rho_ref); here->BSIM4u0temp = pParam->BSIM4u0temp * T0; T1 = (1.0 + kvsat * rho)/(1.0 + kvsat * pParam->BSIM4rho_ref); here->BSIM4vsattemp = pParam->BSIM4vsattemp * T1; OD_offset = Inv_ODeff - pParam->BSIM4inv_od_ref; dvth0_lod = model->BSIM4kvth0 / pParam->BSIM4kvth0 * OD_offset; dk2_lod = model->BSIM4stk2 / pow(pParam->BSIM4kvth0, model->BSIM4lodk2) * OD_offset; deta0_lod = model->BSIM4steta0 / pow(pParam->BSIM4kvth0, model->BSIM4lodeta0) * OD_offset; here->BSIM4vth0 = pParam->BSIM4vth0 + dvth0_lod; here->BSIM4eta0 = pParam->BSIM4eta0 + deta0_lod; here->BSIM4k2 = pParam->BSIM4k2 + dk2_lod; } else { here->BSIM4u0temp = pParam->BSIM4u0temp; here->BSIM4vth0 = pParam->BSIM4vth0; here->BSIM4vsattemp = pParam->BSIM4vsattemp; here->BSIM4eta0 = pParam->BSIM4eta0; here->BSIM4k2 = pParam->BSIM4k2; } /* Well Proximity Effect */ if (model->BSIM4wpemod) { if( (!here->BSIM4scaGiven) && (!here->BSIM4scbGiven) && (!here->BSIM4sccGiven) ) { if((here->BSIM4scGiven) && (here->BSIM4sc > 0.0) ) { T1 = here->BSIM4sc + Wdrn; T2 = 1.0 / model->BSIM4scref; here->BSIM4sca = model->BSIM4scref * model->BSIM4scref / (here->BSIM4sc * T1); here->BSIM4scb = ( (0.1 * here->BSIM4sc + 0.01 * model->BSIM4scref) * exp(-10.0 * here->BSIM4sc * T2) - (0.1 * T1 + 0.01 * model->BSIM4scref) * exp(-10.0 * T1 * T2) ) / Wdrn; here->BSIM4scc = ( (0.05 * here->BSIM4sc + 0.0025 * model->BSIM4scref) * exp(-20.0 * here->BSIM4sc * T2) - (0.05 * T1 + 0.0025 * model->BSIM4scref) * exp(-20.0 * T1 * T2) ) / Wdrn; } else { fprintf(stderr, "Warning: No WPE as none of SCA, SCB, SCC, SC is given and/or SC not positive.\n"); } } if (here->BSIM4sca < 0.0) { printf("Warning: SCA = %g is negative. Set to 0.0.\n", here->BSIM4sca); here->BSIM4sca = 0.0; } if (here->BSIM4scb < 0.0) { printf("Warning: SCB = %g is negative. Set to 0.0.\n", here->BSIM4scb); here->BSIM4scb = 0.0; } if (here->BSIM4scc < 0.0) { printf("Warning: SCC = %g is negative. Set to 0.0.\n", here->BSIM4scc); here->BSIM4scc = 0.0; } if (here->BSIM4sc < 0.0) { printf("Warning: SC = %g is negative. Set to 0.0.\n", here->BSIM4sc); here->BSIM4sc = 0.0; } /*4.6.2*/ sceff = here->BSIM4sca + model->BSIM4web * here->BSIM4scb + model->BSIM4wec * here->BSIM4scc; here->BSIM4vth0 += pParam->BSIM4kvth0we * sceff; here->BSIM4k2 += pParam->BSIM4k2we * sceff; T3 = 1.0 + pParam->BSIM4ku0we * sceff; if (T3 <= 0.0) { T3 = 0.0; fprintf(stderr, "Warning: ku0we = %g is negatively too high. Negative mobility! \n", pParam->BSIM4ku0we); } here->BSIM4u0temp *= T3; } /* adding delvto */ here->BSIM4vth0 += here->BSIM4delvto; here->BSIM4vfb = pParam->BSIM4vfb + model->BSIM4type * here->BSIM4delvto; /* low field mobility multiplier */ here->BSIM4u0temp = pParam->BSIM4u0temp * here->BSIM4mulu0; /* Instance variables calculation */ T3 = model->BSIM4type * here->BSIM4vth0 - here->BSIM4vfb - pParam->BSIM4phi; T4 = T3 + T3; T5 = 2.5 * T3; here->BSIM4vtfbphi1 = (model->BSIM4type == NMOS) ? T4 : T5; if (here->BSIM4vtfbphi1 < 0.0) here->BSIM4vtfbphi1 = 0.0; here->BSIM4vtfbphi2 = 4.0 * T3; if (here->BSIM4vtfbphi2 < 0.0) here->BSIM4vtfbphi2 = 0.0; if (here->BSIM4k2 < 0.0) { T0 = 0.5 * pParam->BSIM4k1 / here->BSIM4k2; here->BSIM4vbsc = 0.9 * (pParam->BSIM4phi - T0 * T0); if (here->BSIM4vbsc > -3.0) here->BSIM4vbsc = -3.0; else if (here->BSIM4vbsc < -30.0) here->BSIM4vbsc = -30.0; } else here->BSIM4vbsc = -30.0; if (here->BSIM4vbsc > pParam->BSIM4vbm) here->BSIM4vbsc = pParam->BSIM4vbm; here->BSIM4k2ox = here->BSIM4k2 * toxe / model->BSIM4toxm; here->BSIM4vfbzb = pParam->BSIM4vfbzbfactor + model->BSIM4type * here->BSIM4vth0 ; here->BSIM4cgso = pParam->BSIM4cgso; here->BSIM4cgdo = pParam->BSIM4cgdo; lnl = log(pParam->BSIM4leff * 1.0e6); lnw = log(pParam->BSIM4weff * 1.0e6); lnnf = log(here->BSIM4nf); bodymode = 5; if( ( !model->BSIM4rbps0Given) || ( !model->BSIM4rbpd0Given) ) bodymode = 1; else if( (!model->BSIM4rbsbx0Given && !model->BSIM4rbsby0Given) || (!model->BSIM4rbdbx0Given && !model->BSIM4rbdby0Given) ) bodymode = 3; if(here->BSIM4rbodyMod == 2) { if (bodymode == 5) { /*rbsbx = exp( log(model->BSIM4rbsbx0) + model->BSIM4rbsdbxl * lnl + model->BSIM4rbsdbxw * lnw + model->BSIM4rbsdbxnf * lnnf ); rbsby = exp( log(model->BSIM4rbsby0) + model->BSIM4rbsdbyl * lnl + model->BSIM4rbsdbyw * lnw + model->BSIM4rbsdbynf * lnnf ); */ rbsbx = model->BSIM4rbsbx0 * exp( model->BSIM4rbsdbxl * lnl + model->BSIM4rbsdbxw * lnw + model->BSIM4rbsdbxnf * lnnf ); rbsby = model->BSIM4rbsby0 * exp( model->BSIM4rbsdbyl * lnl + model->BSIM4rbsdbyw * lnw + model->BSIM4rbsdbynf * lnnf ); here->BSIM4rbsb = rbsbx * rbsby / (rbsbx + rbsby); /*rbdbx = exp( log(model->BSIM4rbdbx0) + model->BSIM4rbsdbxl * lnl + model->BSIM4rbsdbxw * lnw + model->BSIM4rbsdbxnf * lnnf ); rbdby = exp( log(model->BSIM4rbdby0) + model->BSIM4rbsdbyl * lnl + model->BSIM4rbsdbyw * lnw + model->BSIM4rbsdbynf * lnnf ); */ rbdbx = model->BSIM4rbdbx0 * exp( model->BSIM4rbsdbxl * lnl + model->BSIM4rbsdbxw * lnw + model->BSIM4rbsdbxnf * lnnf ); rbdby = model->BSIM4rbdby0 * exp( model->BSIM4rbsdbyl * lnl + model->BSIM4rbsdbyw * lnw + model->BSIM4rbsdbynf * lnnf ); here->BSIM4rbdb = rbdbx * rbdby / (rbdbx + rbdby); } if ((bodymode == 3)|| (bodymode == 5)) { /*here->BSIM4rbps = exp( log(model->BSIM4rbps0) + model->BSIM4rbpsl * lnl + model->BSIM4rbpsw * lnw + model->BSIM4rbpsnf * lnnf ); here->BSIM4rbpd = exp( log(model->BSIM4rbpd0) + model->BSIM4rbpdl * lnl + model->BSIM4rbpdw * lnw + model->BSIM4rbpdnf * lnnf ); */ here->BSIM4rbps = model->BSIM4rbps0 * exp( model->BSIM4rbpsl * lnl + model->BSIM4rbpsw * lnw + model->BSIM4rbpsnf * lnnf ); here->BSIM4rbpd = model->BSIM4rbpd0 * exp( model->BSIM4rbpdl * lnl + model->BSIM4rbpdw * lnw + model->BSIM4rbpdnf * lnnf ); } /*rbpbx = exp( log(model->BSIM4rbpbx0) + model->BSIM4rbpbxl * lnl + model->BSIM4rbpbxw * lnw + model->BSIM4rbpbxnf * lnnf ); rbpby = exp( log(model->BSIM4rbpby0) + model->BSIM4rbpbyl * lnl + model->BSIM4rbpbyw * lnw + model->BSIM4rbpbynf * lnnf ); */ rbpbx = model->BSIM4rbpbx0 * exp( model->BSIM4rbpbxl * lnl + model->BSIM4rbpbxw * lnw + model->BSIM4rbpbxnf * lnnf ); rbpby = model->BSIM4rbpby0 * exp( model->BSIM4rbpbyl * lnl + model->BSIM4rbpbyw * lnw + model->BSIM4rbpbynf * lnnf ); here->BSIM4rbpb = rbpbx*rbpby/(rbpbx + rbpby); } if ((here->BSIM4rbodyMod == 1 ) || ((here->BSIM4rbodyMod == 2 ) && (bodymode == 5)) ) { if (here->BSIM4rbdb < 1.0e-3) here->BSIM4grbdb = 1.0e3; /* in mho */ else here->BSIM4grbdb = model->BSIM4gbmin + 1.0 / here->BSIM4rbdb; if (here->BSIM4rbpb < 1.0e-3) here->BSIM4grbpb = 1.0e3; else here->BSIM4grbpb = model->BSIM4gbmin + 1.0 / here->BSIM4rbpb; if (here->BSIM4rbps < 1.0e-3) here->BSIM4grbps = 1.0e3; else here->BSIM4grbps = model->BSIM4gbmin + 1.0 / here->BSIM4rbps; if (here->BSIM4rbsb < 1.0e-3) here->BSIM4grbsb = 1.0e3; else here->BSIM4grbsb = model->BSIM4gbmin + 1.0 / here->BSIM4rbsb; if (here->BSIM4rbpd < 1.0e-3) here->BSIM4grbpd = 1.0e3; else here->BSIM4grbpd = model->BSIM4gbmin + 1.0 / here->BSIM4rbpd; } if((here->BSIM4rbodyMod == 2) && (bodymode == 3)) { here->BSIM4grbdb = here->BSIM4grbsb = model->BSIM4gbmin; if (here->BSIM4rbpb < 1.0e-3) here->BSIM4grbpb = 1.0e3; else here->BSIM4grbpb = model->BSIM4gbmin + 1.0 / here->BSIM4rbpb; if (here->BSIM4rbps < 1.0e-3) here->BSIM4grbps = 1.0e3; else here->BSIM4grbps = model->BSIM4gbmin + 1.0 / here->BSIM4rbps; if (here->BSIM4rbpd < 1.0e-3) here->BSIM4grbpd = 1.0e3; else here->BSIM4grbpd = model->BSIM4gbmin + 1.0 / here->BSIM4rbpd; } if((here->BSIM4rbodyMod == 2) && (bodymode == 1)) { here->BSIM4grbdb = here->BSIM4grbsb = model->BSIM4gbmin; here->BSIM4grbps = here->BSIM4grbpd = 1.0e3; if (here->BSIM4rbpb < 1.0e-3) here->BSIM4grbpb = 1.0e3; else here->BSIM4grbpb = model->BSIM4gbmin + 1.0 / here->BSIM4rbpb; } /* * Process geomertry dependent parasitics */ here->BSIM4grgeltd = model->BSIM4rshg * (here->BSIM4xgw + pParam->BSIM4weffCJ / 3.0 / here->BSIM4ngcon) / (here->BSIM4ngcon * here->BSIM4nf * (Lnew - model->BSIM4xgl)); if (here->BSIM4grgeltd > 0.0) here->BSIM4grgeltd = 1.0 / here->BSIM4grgeltd; else { here->BSIM4grgeltd = 1.0e3; /* mho */ if (here->BSIM4rgateMod != 0) printf("Warning: The gate conductance reset to 1.0e3 mho.\n"); } DMCGeff = model->BSIM4dmcg - model->BSIM4dmcgt; DMCIeff = model->BSIM4dmci; DMDGeff = model->BSIM4dmdg - model->BSIM4dmcgt; /* if (here->BSIM4sourcePerimeterGiven) { if (model->BSIM4perMod == 0) here->BSIM4Pseff = here->BSIM4sourcePerimeter; else here->BSIM4Pseff = here->BSIM4sourcePerimeter - pParam->BSIM4weffCJ * here->BSIM4nf; } else BSIM4PAeffGeo(here->BSIM4nf, here->BSIM4geoMod, here->BSIM4min, pParam->BSIM4weffCJ, DMCGeff, DMCIeff, DMDGeff, &(here->BSIM4Pseff), &dumPd, &dumAs, &dumAd); if (here->BSIM4Pseff < 0.0) /4.6.2/ here->BSIM4Pseff = 0.0; */ /* New Diode Model v4.7*/ if (here->BSIM4sourcePerimeterGiven) { /* given */ if (here->BSIM4sourcePerimeter == 0.0) here->BSIM4Pseff = 0.0; else if (here->BSIM4sourcePerimeter < 0.0) { printf("Warning: Source Perimeter is specified as negative, it is set to zero.\n"); here->BSIM4Pseff = 0.0; } else { if (model->BSIM4perMod == 0) here->BSIM4Pseff = here->BSIM4sourcePerimeter; else here->BSIM4Pseff = here->BSIM4sourcePerimeter - pParam->BSIM4weffCJ * here->BSIM4nf; } } else /* not given */ BSIM4PAeffGeo(here->BSIM4nf, here->BSIM4geoMod, here->BSIM4min, pParam->BSIM4weffCJ, DMCGeff, DMCIeff, DMDGeff, &(here->BSIM4Pseff), &dumPd, &dumAs, &dumAd); if (here->BSIM4Pseff < 0.0){ /* v4.7 final check */ here->BSIM4Pseff = 0.0; printf("Warning: Pseff is negative, it is set to zero.\n"); } /* if (here->BSIM4drainPerimeterGiven) { if (model->BSIM4perMod == 0) here->BSIM4Pdeff = here->BSIM4drainPerimeter; else here->BSIM4Pdeff = here->BSIM4drainPerimeter - pParam->BSIM4weffCJ * here->BSIM4nf; } else BSIM4PAeffGeo(here->BSIM4nf, here->BSIM4geoMod, here->BSIM4min, pParam->BSIM4weffCJ, DMCGeff, DMCIeff, DMDGeff, &dumPs, &(here->BSIM4Pdeff), &dumAs, &dumAd); if (here->BSIM4Pdeff < 0.0) /4.6.2/ here->BSIM4Pdeff = 0.0; */ if (here->BSIM4drainPerimeterGiven) { /* given */ if (here->BSIM4drainPerimeter == 0.0) here->BSIM4Pdeff = 0.0; else if (here->BSIM4drainPerimeter < 0.0) { printf("Warning: Drain Perimeter is specified as negative, it is set to zero.\n"); here->BSIM4Pdeff = 0.0; } else { if (model->BSIM4perMod == 0) here->BSIM4Pdeff = here->BSIM4drainPerimeter; else here->BSIM4Pdeff = here->BSIM4drainPerimeter - pParam->BSIM4weffCJ * here->BSIM4nf; } } else /* not given */ BSIM4PAeffGeo(here->BSIM4nf, here->BSIM4geoMod, here->BSIM4min, pParam->BSIM4weffCJ, DMCGeff, DMCIeff, DMDGeff, &dumPs, &(here->BSIM4Pdeff), &dumAs, &dumAd); if (here->BSIM4Pdeff < 0.0){ here->BSIM4Pdeff = 0.0; /*New Diode v4.7*/ printf("Warning: Pdeff is negative, it is set to zero.\n"); } if (here->BSIM4sourceAreaGiven) here->BSIM4Aseff = here->BSIM4sourceArea; else BSIM4PAeffGeo(here->BSIM4nf, here->BSIM4geoMod, here->BSIM4min, pParam->BSIM4weffCJ, DMCGeff, DMCIeff, DMDGeff, &dumPs, &dumPd, &(here->BSIM4Aseff), &dumAd); if (here->BSIM4Aseff < 0.0){ here->BSIM4Aseff = 0.0; /* v4.7 */ printf("Warning: Aseff is negative, it is set to zero.\n"); } if (here->BSIM4drainAreaGiven) here->BSIM4Adeff = here->BSIM4drainArea; else BSIM4PAeffGeo(here->BSIM4nf, here->BSIM4geoMod, here->BSIM4min, pParam->BSIM4weffCJ, DMCGeff, DMCIeff, DMDGeff, &dumPs, &dumPd, &dumAs, &(here->BSIM4Adeff)); if (here->BSIM4Adeff < 0.0){ here->BSIM4Adeff = 0.0; /* v4.7 */ printf("Warning: Adeff is negative, it is set to zero.\n"); } /* Processing S/D resistance and conductance below */ if(here->BSIM4sNodePrime != here->BSIM4sNode) { here->BSIM4sourceConductance = 0.0; if(here->BSIM4sourceSquaresGiven) { here->BSIM4sourceConductance = model->BSIM4sheetResistance * here->BSIM4sourceSquares; } else if (here->BSIM4rgeoMod > 0) { BSIM4RdseffGeo(here->BSIM4nf, here->BSIM4geoMod, here->BSIM4rgeoMod, here->BSIM4min, pParam->BSIM4weffCJ, model->BSIM4sheetResistance, DMCGeff, DMCIeff, DMDGeff, 1, &(here->BSIM4sourceConductance)); } else { here->BSIM4sourceConductance = 0.0; } if (here->BSIM4sourceConductance > 0.0) here->BSIM4sourceConductance = 1.0 / here->BSIM4sourceConductance; else { here->BSIM4sourceConductance = 1.0e3; /* mho */ printf ("Warning: Source conductance reset to 1.0e3 mho.\n"); } } else { here->BSIM4sourceConductance = 0.0; } if(here->BSIM4dNodePrime != here->BSIM4dNode) { here->BSIM4drainConductance = 0.0; if(here->BSIM4drainSquaresGiven) { here->BSIM4drainConductance = model->BSIM4sheetResistance * here->BSIM4drainSquares; } else if (here->BSIM4rgeoMod > 0) { BSIM4RdseffGeo(here->BSIM4nf, here->BSIM4geoMod, here->BSIM4rgeoMod, here->BSIM4min, pParam->BSIM4weffCJ, model->BSIM4sheetResistance, DMCGeff, DMCIeff, DMDGeff, 0, &(here->BSIM4drainConductance)); } else { here->BSIM4drainConductance = 0.0; } if (here->BSIM4drainConductance > 0.0) here->BSIM4drainConductance = 1.0 / here->BSIM4drainConductance; else { here->BSIM4drainConductance = 1.0e3; /* mho */ printf ("Warning: Drain conductance reset to 1.0e3 mho.\n"); } } else { here->BSIM4drainConductance = 0.0; } /* End of Rsd processing */ Nvtms = model->BSIM4vtm * model->BSIM4SjctEmissionCoeff; if ((here->BSIM4Aseff <= 0.0) && (here->BSIM4Pseff <= 0.0)) { SourceSatCurrent = 0.0; /* v4.7 */ /* SourceSatCurrent = 1.0e-14; */ } else { SourceSatCurrent = here->BSIM4Aseff * model->BSIM4SjctTempSatCurDensity + here->BSIM4Pseff * model->BSIM4SjctSidewallTempSatCurDensity + pParam->BSIM4weffCJ * here->BSIM4nf * model->BSIM4SjctGateSidewallTempSatCurDensity; } if (SourceSatCurrent > 0.0) { switch(model->BSIM4dioMod) { case 0: if ((model->BSIM4bvs / Nvtms) > EXP_THRESHOLD) here->BSIM4XExpBVS = model->BSIM4xjbvs * MIN_EXP; else here->BSIM4XExpBVS = model->BSIM4xjbvs * exp(-model->BSIM4bvs / Nvtms); break; case 1: BSIM4DioIjthVjmEval(Nvtms, model->BSIM4ijthsfwd, SourceSatCurrent, 0.0, &(here->BSIM4vjsmFwd)); here->BSIM4IVjsmFwd = SourceSatCurrent * exp(here->BSIM4vjsmFwd / Nvtms); break; case 2: if ((model->BSIM4bvs / Nvtms) > EXP_THRESHOLD) { here->BSIM4XExpBVS = model->BSIM4xjbvs * MIN_EXP; tmp = MIN_EXP; } else { here->BSIM4XExpBVS = exp(-model->BSIM4bvs / Nvtms); tmp = here->BSIM4XExpBVS; here->BSIM4XExpBVS *= model->BSIM4xjbvs; } BSIM4DioIjthVjmEval(Nvtms, model->BSIM4ijthsfwd, SourceSatCurrent, here->BSIM4XExpBVS, &(here->BSIM4vjsmFwd)); T0 = exp(here->BSIM4vjsmFwd / Nvtms); here->BSIM4IVjsmFwd = SourceSatCurrent * (T0 - here->BSIM4XExpBVS / T0 + here->BSIM4XExpBVS - 1.0); here->BSIM4SslpFwd = SourceSatCurrent * (T0 + here->BSIM4XExpBVS / T0) / Nvtms; T2 = model->BSIM4ijthsrev / SourceSatCurrent; if (T2 < 1.0) { T2 = 10.0; fprintf(stderr, "Warning: ijthsrev too small and set to 10 times IsbSat.\n"); } here->BSIM4vjsmRev = -model->BSIM4bvs - Nvtms * log((T2 - 1.0) / model->BSIM4xjbvs); T1 = model->BSIM4xjbvs * exp(-(model->BSIM4bvs + here->BSIM4vjsmRev) / Nvtms); here->BSIM4IVjsmRev = SourceSatCurrent * (1.0 + T1); here->BSIM4SslpRev = -SourceSatCurrent * T1 / Nvtms; break; default: printf("Specified dioMod = %d not matched\n", model->BSIM4dioMod); } } Nvtmd = model->BSIM4vtm * model->BSIM4DjctEmissionCoeff; if ((here->BSIM4Adeff <= 0.0) && (here->BSIM4Pdeff <= 0.0)) { /* DrainSatCurrent = 1.0e-14; v4.7 */ DrainSatCurrent = 0.0; } else { DrainSatCurrent = here->BSIM4Adeff * model->BSIM4DjctTempSatCurDensity + here->BSIM4Pdeff * model->BSIM4DjctSidewallTempSatCurDensity + pParam->BSIM4weffCJ * here->BSIM4nf * model->BSIM4DjctGateSidewallTempSatCurDensity; } if (DrainSatCurrent > 0.0) { switch(model->BSIM4dioMod) { case 0: if ((model->BSIM4bvd / Nvtmd) > EXP_THRESHOLD) here->BSIM4XExpBVD = model->BSIM4xjbvd * MIN_EXP; else here->BSIM4XExpBVD = model->BSIM4xjbvd * exp(-model->BSIM4bvd / Nvtmd); break; case 1: BSIM4DioIjthVjmEval(Nvtmd, model->BSIM4ijthdfwd, DrainSatCurrent, 0.0, &(here->BSIM4vjdmFwd)); here->BSIM4IVjdmFwd = DrainSatCurrent * exp(here->BSIM4vjdmFwd / Nvtmd); break; case 2: if ((model->BSIM4bvd / Nvtmd) > EXP_THRESHOLD) { here->BSIM4XExpBVD = model->BSIM4xjbvd * MIN_EXP; tmp = MIN_EXP; } else { here->BSIM4XExpBVD = exp(-model->BSIM4bvd / Nvtmd); tmp = here->BSIM4XExpBVD; here->BSIM4XExpBVD *= model->BSIM4xjbvd; } BSIM4DioIjthVjmEval(Nvtmd, model->BSIM4ijthdfwd, DrainSatCurrent, here->BSIM4XExpBVD, &(here->BSIM4vjdmFwd)); T0 = exp(here->BSIM4vjdmFwd / Nvtmd); here->BSIM4IVjdmFwd = DrainSatCurrent * (T0 - here->BSIM4XExpBVD / T0 + here->BSIM4XExpBVD - 1.0); here->BSIM4DslpFwd = DrainSatCurrent * (T0 + here->BSIM4XExpBVD / T0) / Nvtmd; T2 = model->BSIM4ijthdrev / DrainSatCurrent; if (T2 < 1.0) { T2 = 10.0; fprintf(stderr, "Warning: ijthdrev too small and set to 10 times IdbSat.\n"); } here->BSIM4vjdmRev = -model->BSIM4bvd - Nvtmd * log((T2 - 1.0) / model->BSIM4xjbvd); /* bugfix */ T1 = model->BSIM4xjbvd * exp(-(model->BSIM4bvd + here->BSIM4vjdmRev) / Nvtmd); here->BSIM4IVjdmRev = DrainSatCurrent * (1.0 + T1); here->BSIM4DslpRev = -DrainSatCurrent * T1 / Nvtmd; break; default: printf("Specified dioMod = %d not matched\n", model->BSIM4dioMod); } } /* GEDL current reverse bias */ T0 = (TRatio - 1.0); model->BSIM4njtsstemp = model->BSIM4njts * (1.0 + model->BSIM4tnjts * T0); model->BSIM4njtsswstemp = model->BSIM4njtssw * (1.0 + model->BSIM4tnjtssw * T0); model->BSIM4njtsswgstemp = model->BSIM4njtsswg * (1.0 + model->BSIM4tnjtsswg * T0); model->BSIM4njtsdtemp = model->BSIM4njtsd * (1.0 + model->BSIM4tnjtsd * T0); model->BSIM4njtsswdtemp = model->BSIM4njtsswd * (1.0 + model->BSIM4tnjtsswd * T0); model->BSIM4njtsswgdtemp = model->BSIM4njtsswgd * (1.0 + model->BSIM4tnjtsswgd * T0); T7 = Eg0 / model->BSIM4vtm * T0; T9 = model->BSIM4xtss * T7; DEXP(T9, T1); T9 = model->BSIM4xtsd * T7; DEXP(T9, T2); T9 = model->BSIM4xtssws * T7; DEXP(T9, T3); T9 = model->BSIM4xtsswd * T7; DEXP(T9, T4); T9 = model->BSIM4xtsswgs * T7; DEXP(T9, T5); T9 = model->BSIM4xtsswgd * T7; DEXP(T9, T6); /*IBM TAT*/ if(model->BSIM4jtweff < 0.0) { model->BSIM4jtweff = 0.0; fprintf(stderr, "TAT width dependence effect is negative. Jtweff is clamped to zero.\n"); } T11 = sqrt(model->BSIM4jtweff / pParam->BSIM4weffCJ) + 1.0; T10 = pParam->BSIM4weffCJ * here->BSIM4nf; here->BSIM4SjctTempRevSatCur = T1 * here->BSIM4Aseff * model->BSIM4jtss; here->BSIM4DjctTempRevSatCur = T2 * here->BSIM4Adeff * model->BSIM4jtsd; here->BSIM4SswTempRevSatCur = T3 * here->BSIM4Pseff * model->BSIM4jtssws; here->BSIM4DswTempRevSatCur = T4 * here->BSIM4Pdeff * model->BSIM4jtsswd; here->BSIM4SswgTempRevSatCur = T5 * T10 * T11 * model->BSIM4jtsswgs; here->BSIM4DswgTempRevSatCur = T6 * T10 * T11 * model->BSIM4jtsswgd; if(model->BSIM4mtrlMod != 0 && model->BSIM4mtrlCompatMod == 0) { /* Calculate TOXP from EOT */ /* Calculate Vgs_eff @ Vgs = VDD with Poly Depletion Effect */ Vtm0eot = KboQ * model->BSIM4tempeot; Vtmeot = Vtm0eot; vbieot = Vtm0eot * log(pParam->BSIM4nsd * pParam->BSIM4ndep / (ni * ni)); phieot = Vtm0eot * log(pParam->BSIM4ndep / ni) + pParam->BSIM4phin + 0.4; tmp2 = here->BSIM4vfb + phieot; vddeot = model->BSIM4type * model->BSIM4vddeot; T0 = model->BSIM4epsrgate * EPS0; if ((pParam->BSIM4ngate > 1.0e18) && (pParam->BSIM4ngate < 1.0e25) && (vddeot > tmp2) && (T0!=0)) { T1 = 1.0e6 * CHARGE * T0 * pParam->BSIM4ngate / (model->BSIM4coxe * model->BSIM4coxe); T8 = vddeot - tmp2; T4 = sqrt(1.0 + 2.0 * T8 / T1); T2 = 2.0 * T8 / (T4 + 1.0); T3 = 0.5 * T2 * T2 / T1; T7 = 1.12 - T3 - 0.05; T6 = sqrt(T7 * T7 + 0.224); T5 = 1.12 - 0.5 * (T7 + T6); Vgs_eff = vddeot - T5; } else Vgs_eff = vddeot; /* Calculate Vth @ Vds=Vbs=0 */ V0 = vbieot - phieot; lt1 = model->BSIM4factor1* pParam->BSIM4sqrtXdep0; ltw = lt1; T0 = pParam->BSIM4dvt1 * model->BSIM4leffeot / lt1; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; Theta0 = T1 / T4; } else Theta0 = 1.0 / (MAX_EXP - 2.0); Delt_vth = pParam->BSIM4dvt0 * Theta0 * V0; T0 = pParam->BSIM4dvt1w * model->BSIM4weffeot * model->BSIM4leffeot / ltw; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; T5 = T1 / T4; } else T5 = 1.0 / (MAX_EXP - 2.0); /* 3.0 * MIN_EXP omitted */ T2 = pParam->BSIM4dvt0w * T5 * V0; TempRatioeot = model->BSIM4tempeot / model->BSIM4tnom - 1.0; T0 = sqrt(1.0 + pParam->BSIM4lpe0 / model->BSIM4leffeot); T1 = pParam->BSIM4k1ox * (T0 - 1.0) * sqrt(phieot) + (pParam->BSIM4kt1 + pParam->BSIM4kt1l / model->BSIM4leffeot) * TempRatioeot; Vth_NarrowW = toxe * phieot / (model->BSIM4weffeot + pParam->BSIM4w0); Lpe_Vb = sqrt(1.0 + pParam->BSIM4lpeb / model->BSIM4leffeot); Vth = model->BSIM4type * here->BSIM4vth0 + (pParam->BSIM4k1ox - pParam->BSIM4k1)*sqrt(phieot)*Lpe_Vb - Delt_vth - T2 + pParam->BSIM4k3 * Vth_NarrowW + T1; /* Calculate n */ tmp1 = epssub / pParam->BSIM4Xdep0; tmp2 = pParam->BSIM4nfactor * tmp1; tmp3 = (tmp2 + pParam->BSIM4cdsc * Theta0 + pParam->BSIM4cit) / model->BSIM4coxe; if (tmp3 >= -0.5) n = 1.0 + tmp3; else { T0 = 1.0 / (3.0 + 8.0 * tmp3); n = (1.0 + 3.0 * tmp3) * T0; } /* Vth correction for Pocket implant */ if (pParam->BSIM4dvtp0 > 0.0) { T3 = model->BSIM4leffeot + pParam->BSIM4dvtp0 * 2.0; if (model->BSIM4tempMod < 2) T4 = Vtmeot * log(model->BSIM4leffeot / T3); else T4 = Vtm0eot * log(model->BSIM4leffeot / T3); Vth -= n * T4; } Vgsteff = Vgs_eff-Vth; /* calculating Toxp */ T3 = model->BSIM4type * here->BSIM4vth0 - here->BSIM4vfb - phieot; T4 = T3 + T3; T5 = 2.5 * T3; vtfbphi2eot = 4.0 * T3; if (vtfbphi2eot < 0.0) vtfbphi2eot = 0.0; niter = 0; toxpf = toxe; do { toxpi = toxpf; tmp2 = 2.0e8 * toxpf; T0 = (Vgsteff + vtfbphi2eot) / tmp2; T1 = 1.0 + exp(model->BSIM4bdos * 0.7 * log(T0)); Tcen = model->BSIM4ados * 1.9e-9 / T1; toxpf = toxe - epsrox/model->BSIM4epsrsub * Tcen; niter++; } while ((niter<=4)&&(ABS(toxpf-toxpi)>1e-12)); here->BSIM4toxp = toxpf; here->BSIM4coxp = epsrox * EPS0 / here->BSIM4toxp; } else { here->BSIM4toxp = model->BSIM4toxp; here->BSIM4coxp = model->BSIM4coxp; } if (BSIM4checkModel(model, here, ckt)) { SPfrontEnd->IFerrorf (ERR_FATAL, "Fatal error(s) detected during BSIM4.8.1 parameter checking for %s in model %s", model->BSIM4modName, here->BSIM4name); return(E_BADPARM); } } /* End instance */ } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4/b4par.c0000644000175000017500000002472113546075722021363 0ustar carstencarsten/* ****************************************************************************** * BSIM4 4.8.1 released by Chetan Kumar Dabhi 2/15/2017 * * BSIM4 Model Equations * ****************************************************************************** ****************************************************************************** * Copyright 2017 Regents of the University of California. * * All rights reserved. * * * * Project Director: Prof. Chenming Hu. * * Authors: Gary W. Ng, Weidong Liu, Xuemei Xi, Mohan Dunga, Wenwei Yang * * Ali Niknejad, Shivendra Singh Parihar, Chetan Kumar Dabhi * * Yogesh Singh Chauhan, Sayeef Salahuddin, Chenming Hu * ****************************************************************************** ****************************************************************************** * CMC In-Code Statement * * * * The Developer agrees that the following statement will appear in the * * model code that has been adopted as a CMC Standard. * * * * Software is distributed as is, completely without warranty or service * * support. The University of California and its employees are not liable * * for the condition or performance of the software. * * * * The University of California owns the copyright and grants users a * * perpetual, irrevocable, worldwide, non-exclusive, royalty-free license * * with respect to the software as set forth below. * * * * The University of California hereby disclaims all implied warranties. * * * * The University of California grants the users the right to modify, * * copy, and redistribute the software and documentation, both within * * the user's organization and externally, subject to the following * * restrictions: * * * * 1. The users agree not to charge for the University of California code * * itself but may charge for additions, extensions, or support. * * * * 2. In any product based on the software, the users agree to * * acknowledge the University of California that developed the * * software. This acknowledgment shall appear in the product * * documentation. * * * * 3. Redistributions to others of source code and documentation must * * retain the copyright notice, disclaimer, and list of conditions. * * * * 4. Redistributions to others in binary form must reproduce the * * copyright notice, disclaimer, and list of conditions in the * * documentation and/or other materials provided with the * * distribution. * * * * Agreed to on ______Feb. 15, 2017______________ * * * * By: ____University of California, Berkeley___ * * ____Chenming Hu__________________________ * * ____Professor in Graduate School ________ * * * ****************************************************************************** */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "bsim4def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/fteext.h" int BSIM4param( int param, IFvalue *value, GENinstance *inst, IFvalue *select) { double scale; BSIM4instance *here = (BSIM4instance*)inst; NG_IGNORE(select); if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; switch(param) { case BSIM4_W: here->BSIM4w = value->rValue * scale; here->BSIM4wGiven = TRUE; break; case BSIM4_L: here->BSIM4l = value->rValue * scale; here->BSIM4lGiven = TRUE; break; case BSIM4_M: here->BSIM4m = value->rValue; here->BSIM4mGiven = TRUE; break; case BSIM4_NF: here->BSIM4nf = value->rValue; here->BSIM4nfGiven = TRUE; break; case BSIM4_MIN: here->BSIM4min = value->iValue; here->BSIM4minGiven = TRUE; break; case BSIM4_AS: here->BSIM4sourceArea = value->rValue * scale * scale; here->BSIM4sourceAreaGiven = TRUE; break; case BSIM4_AD: here->BSIM4drainArea = value->rValue * scale * scale; here->BSIM4drainAreaGiven = TRUE; break; case BSIM4_PS: here->BSIM4sourcePerimeter = value->rValue * scale; here->BSIM4sourcePerimeterGiven = TRUE; break; case BSIM4_PD: here->BSIM4drainPerimeter = value->rValue * scale; here->BSIM4drainPerimeterGiven = TRUE; break; case BSIM4_NRS: here->BSIM4sourceSquares = value->rValue; here->BSIM4sourceSquaresGiven = TRUE; break; case BSIM4_NRD: here->BSIM4drainSquares = value->rValue; here->BSIM4drainSquaresGiven = TRUE; break; case BSIM4_OFF: here->BSIM4off = value->iValue; break; case BSIM4_SA: here->BSIM4sa = value->rValue; here->BSIM4saGiven = TRUE; break; case BSIM4_SB: here->BSIM4sb = value->rValue; here->BSIM4sbGiven = TRUE; break; case BSIM4_SD: here->BSIM4sd = value->rValue; here->BSIM4sdGiven = TRUE; break; case BSIM4_SCA: here->BSIM4sca = value->rValue; here->BSIM4scaGiven = TRUE; break; case BSIM4_SCB: here->BSIM4scb = value->rValue; here->BSIM4scbGiven = TRUE; break; case BSIM4_SCC: here->BSIM4scc = value->rValue; here->BSIM4sccGiven = TRUE; break; case BSIM4_SC: here->BSIM4sc = value->rValue; here->BSIM4scGiven = TRUE; break; case BSIM4_RBSB: here->BSIM4rbsb = value->rValue; here->BSIM4rbsbGiven = TRUE; break; case BSIM4_RBDB: here->BSIM4rbdb = value->rValue; here->BSIM4rbdbGiven = TRUE; break; case BSIM4_RBPB: here->BSIM4rbpb = value->rValue; here->BSIM4rbpbGiven = TRUE; break; case BSIM4_RBPS: here->BSIM4rbps = value->rValue; here->BSIM4rbpsGiven = TRUE; break; case BSIM4_RBPD: here->BSIM4rbpd = value->rValue; here->BSIM4rbpdGiven = TRUE; break; case BSIM4_DELVTO: here->BSIM4delvto = value->rValue; here->BSIM4delvtoGiven = TRUE; break; case BSIM4_MULU0: here->BSIM4mulu0 = value->rValue; here->BSIM4mulu0Given = TRUE; break; case BSIM4_XGW: here->BSIM4xgw = value->rValue; here->BSIM4xgwGiven = TRUE; break; case BSIM4_NGCON: here->BSIM4ngcon = value->rValue; here->BSIM4ngconGiven = TRUE; break; case BSIM4_TRNQSMOD: here->BSIM4trnqsMod = value->iValue; here->BSIM4trnqsModGiven = TRUE; break; case BSIM4_ACNQSMOD: here->BSIM4acnqsMod = value->iValue; here->BSIM4acnqsModGiven = TRUE; break; case BSIM4_RBODYMOD: here->BSIM4rbodyMod = value->iValue; here->BSIM4rbodyModGiven = TRUE; break; case BSIM4_RGATEMOD: here->BSIM4rgateMod = value->iValue; here->BSIM4rgateModGiven = TRUE; break; case BSIM4_GEOMOD: here->BSIM4geoMod = value->iValue; here->BSIM4geoModGiven = TRUE; break; case BSIM4_RGEOMOD: here->BSIM4rgeoMod = value->iValue; here->BSIM4rgeoModGiven = TRUE; break; case BSIM4_IC_VDS: here->BSIM4icVDS = value->rValue; here->BSIM4icVDSGiven = TRUE; break; case BSIM4_IC_VGS: here->BSIM4icVGS = value->rValue; here->BSIM4icVGSGiven = TRUE; break; case BSIM4_IC_VBS: here->BSIM4icVBS = value->rValue; here->BSIM4icVBSGiven = TRUE; break; case BSIM4_IC: switch(value->v.numValue) { case 3: here->BSIM4icVBS = *(value->v.vec.rVec+2); here->BSIM4icVBSGiven = TRUE; case 2: here->BSIM4icVGS = *(value->v.vec.rVec+1); here->BSIM4icVGSGiven = TRUE; case 1: here->BSIM4icVDS = *(value->v.vec.rVec); here->BSIM4icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4/b4cvtest.c0000644000175000017500000003211413546075722022104 0ustar carstencarsten/* ****************************************************************************** * BSIM4 4.8.1 released by Chetan Kumar Dabhi 2/15/2017 * * BSIM4 Model Equations * ****************************************************************************** ****************************************************************************** * Copyright 2017 Regents of the University of California. * * All rights reserved. * * * * Project Director: Prof. Chenming Hu. * * Authors: Gary W. Ng, Weidong Liu, Xuemei Xi, Mohan Dunga, Wenwei Yang * * Ali Niknejad, Shivendra Singh Parihar, Chetan Kumar Dabhi * * Yogesh Singh Chauhan, Sayeef Salahuddin, Chenming Hu * ****************************************************************************** ****************************************************************************** * CMC In-Code Statement * * * * The Developer agrees that the following statement will appear in the * * model code that has been adopted as a CMC Standard. * * * * Software is distributed as is, completely without warranty or service * * support. The University of California and its employees are not liable * * for the condition or performance of the software. * * * * The University of California owns the copyright and grants users a * * perpetual, irrevocable, worldwide, non-exclusive, royalty-free license * * with respect to the software as set forth below. * * * * The University of California hereby disclaims all implied warranties. * * * * The University of California grants the users the right to modify, * * copy, and redistribute the software and documentation, both within * * the user's organization and externally, subject to the following * * restrictions: * * * * 1. The users agree not to charge for the University of California code * * itself but may charge for additions, extensions, or support. * * * * 2. In any product based on the software, the users agree to * * acknowledge the University of California that developed the * * software. This acknowledgment shall appear in the product * * documentation. * * * * 3. Redistributions to others of source code and documentation must * * retain the copyright notice, disclaimer, and list of conditions. * * * * 4. Redistributions to others in binary form must reproduce the * * copyright notice, disclaimer, and list of conditions in the * * documentation and/or other materials provided with the * * distribution. * * * * Agreed to on ______Feb. 15, 2017______________ * * * * By: ____University of California, Berkeley___ * * ____Chenming Hu__________________________ * * ____Professor in Graduate School ________ * * * ****************************************************************************** */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4convTest( GENmodel *inModel, CKTcircuit *ckt) { BSIM4model *model = (BSIM4model*)inModel; BSIM4instance *here; double delvbd, delvbs, delvds, delvgd, delvgs; double delvdbd, delvsbs; double delvbd_jct, delvbs_jct; double vds, vgs, vgd, vgdo, vbs, vbd; double vdbd, vdbs, vsbs; double cbhat, cdhat, Idtot, Ibtot; double vses, vdes, vdedo, delvses, delvded, delvdes; double Isestot, cseshat, Idedtot, cdedhat; double Igstot, cgshat, Igdtot, cgdhat, Igbtot, cgbhat; double tol0, tol1, tol2, tol3, tol4, tol5, tol6; for (; model != NULL; model = BSIM4nextModel(model)) { for (here = BSIM4instances(model); here != NULL ; here=BSIM4nextInstance(here)) { vds = model->BSIM4type * (*(ckt->CKTrhsOld + here->BSIM4dNodePrime) - *(ckt->CKTrhsOld + here->BSIM4sNodePrime)); vgs = model->BSIM4type * (*(ckt->CKTrhsOld + here->BSIM4gNodePrime) - *(ckt->CKTrhsOld + here->BSIM4sNodePrime)); vbs = model->BSIM4type * (*(ckt->CKTrhsOld + here->BSIM4bNodePrime) - *(ckt->CKTrhsOld + here->BSIM4sNodePrime)); vdbs = model->BSIM4type * (*(ckt->CKTrhsOld + here->BSIM4dbNode) - *(ckt->CKTrhsOld + here->BSIM4sNodePrime)); vsbs = model->BSIM4type * (*(ckt->CKTrhsOld + here->BSIM4sbNode) - *(ckt->CKTrhsOld + here->BSIM4sNodePrime)); vses = model->BSIM4type * (*(ckt->CKTrhsOld + here->BSIM4sNode) - *(ckt->CKTrhsOld + here->BSIM4sNodePrime)); vdes = model->BSIM4type * (*(ckt->CKTrhsOld + here->BSIM4dNode) - *(ckt->CKTrhsOld + here->BSIM4sNodePrime)); vgdo = *(ckt->CKTstate0 + here->BSIM4vgs) - *(ckt->CKTstate0 + here->BSIM4vds); vbd = vbs - vds; vdbd = vdbs - vds; vgd = vgs - vds; delvbd = vbd - *(ckt->CKTstate0 + here->BSIM4vbd); delvdbd = vdbd - *(ckt->CKTstate0 + here->BSIM4vdbd); delvgd = vgd - vgdo; delvds = vds - *(ckt->CKTstate0 + here->BSIM4vds); delvgs = vgs - *(ckt->CKTstate0 + here->BSIM4vgs); delvbs = vbs - *(ckt->CKTstate0 + here->BSIM4vbs); delvsbs = vsbs - *(ckt->CKTstate0 + here->BSIM4vsbs); delvses = vses - (*(ckt->CKTstate0 + here->BSIM4vses)); vdedo = *(ckt->CKTstate0 + here->BSIM4vdes) - *(ckt->CKTstate0 + here->BSIM4vds); delvdes = vdes - *(ckt->CKTstate0 + here->BSIM4vdes); delvded = vdes - vds - vdedo; delvbd_jct = (!here->BSIM4rbodyMod) ? delvbd : delvdbd; delvbs_jct = (!here->BSIM4rbodyMod) ? delvbs : delvsbs; if (here->BSIM4mode >= 0) { Idtot = here->BSIM4cd + here->BSIM4csub - here->BSIM4cbd + here->BSIM4Igidl; cdhat = Idtot - here->BSIM4gbd * delvbd_jct + (here->BSIM4gmbs + here->BSIM4gbbs + here->BSIM4ggidlb) * delvbs + (here->BSIM4gm + here->BSIM4gbgs + here->BSIM4ggidlg) * delvgs + (here->BSIM4gds + here->BSIM4gbds + here->BSIM4ggidld) * delvds; Igstot = here->BSIM4Igs + here->BSIM4Igcs; cgshat = Igstot + (here->BSIM4gIgsg + here->BSIM4gIgcsg) * delvgs + here->BSIM4gIgcsd * delvds + here->BSIM4gIgcsb * delvbs; Igdtot = here->BSIM4Igd + here->BSIM4Igcd; cgdhat = Igdtot + here->BSIM4gIgdg * delvgd + here->BSIM4gIgcdg * delvgs + here->BSIM4gIgcdd * delvds + here->BSIM4gIgcdb * delvbs; Igbtot = here->BSIM4Igb; cgbhat = here->BSIM4Igb + here->BSIM4gIgbg * delvgs + here->BSIM4gIgbd * delvds + here->BSIM4gIgbb * delvbs; } else { Idtot = here->BSIM4cd + here->BSIM4cbd - here->BSIM4Igidl; /* bugfix */ cdhat = Idtot + here->BSIM4gbd * delvbd_jct + here->BSIM4gmbs * delvbd + here->BSIM4gm * delvgd - (here->BSIM4gds + here->BSIM4ggidls) * delvds - here->BSIM4ggidlg * delvgs - here->BSIM4ggidlb * delvbs; Igstot = here->BSIM4Igs + here->BSIM4Igcd; cgshat = Igstot + here->BSIM4gIgsg * delvgs + here->BSIM4gIgcdg * delvgd - here->BSIM4gIgcdd * delvds + here->BSIM4gIgcdb * delvbd; Igdtot = here->BSIM4Igd + here->BSIM4Igcs; cgdhat = Igdtot + (here->BSIM4gIgdg + here->BSIM4gIgcsg) * delvgd - here->BSIM4gIgcsd * delvds + here->BSIM4gIgcsb * delvbd; Igbtot = here->BSIM4Igb; cgbhat = here->BSIM4Igb + here->BSIM4gIgbg * delvgd - here->BSIM4gIgbd * delvds + here->BSIM4gIgbb * delvbd; } Isestot = here->BSIM4gstot * (*(ckt->CKTstate0 + here->BSIM4vses)); cseshat = Isestot + here->BSIM4gstot * delvses + here->BSIM4gstotd * delvds + here->BSIM4gstotg * delvgs + here->BSIM4gstotb * delvbs; Idedtot = here->BSIM4gdtot * vdedo; cdedhat = Idedtot + here->BSIM4gdtot * delvded + here->BSIM4gdtotd * delvds + here->BSIM4gdtotg * delvgs + here->BSIM4gdtotb * delvbs; /* * Check convergence */ if ((here->BSIM4off == 0) || (!(ckt->CKTmode & MODEINITFIX))) { tol0 = ckt->CKTreltol * MAX(fabs(cdhat), fabs(Idtot)) + ckt->CKTabstol; tol1 = ckt->CKTreltol * MAX(fabs(cseshat), fabs(Isestot)) + ckt->CKTabstol; tol2 = ckt->CKTreltol * MAX(fabs(cdedhat), fabs(Idedtot)) + ckt->CKTabstol; tol3 = ckt->CKTreltol * MAX(fabs(cgshat), fabs(Igstot)) + ckt->CKTabstol; tol4 = ckt->CKTreltol * MAX(fabs(cgdhat), fabs(Igdtot)) + ckt->CKTabstol; tol5 = ckt->CKTreltol * MAX(fabs(cgbhat), fabs(Igbtot)) + ckt->CKTabstol; if ((fabs(cdhat - Idtot) >= tol0) || (fabs(cseshat - Isestot) >= tol1) || (fabs(cdedhat - Idedtot) >= tol2)) { ckt->CKTnoncon++; return(OK); } if ((fabs(cgshat - Igstot) >= tol3) || (fabs(cgdhat - Igdtot) >= tol4) || (fabs(cgbhat - Igbtot) >= tol5)) { ckt->CKTnoncon++; return(OK); } Ibtot = here->BSIM4cbs + here->BSIM4cbd - here->BSIM4Igidl - here->BSIM4Igisl - here->BSIM4csub; if (here->BSIM4mode >= 0) { cbhat = Ibtot + here->BSIM4gbd * delvbd_jct + here->BSIM4gbs * delvbs_jct - (here->BSIM4gbbs + here->BSIM4ggidlb) * delvbs - (here->BSIM4gbgs + here->BSIM4ggidlg) * delvgs - (here->BSIM4gbds + here->BSIM4ggidld) * delvds - here->BSIM4ggislg * delvgd - here->BSIM4ggislb* delvbd + here->BSIM4ggisls * delvds ; } else { cbhat = Ibtot + here->BSIM4gbs * delvbs_jct + here->BSIM4gbd * delvbd_jct - (here->BSIM4gbbs + here->BSIM4ggislb) * delvbd - (here->BSIM4gbgs + here->BSIM4ggislg) * delvgd + (here->BSIM4gbds + here->BSIM4ggisld - here->BSIM4ggidls) * delvds - here->BSIM4ggidlg * delvgs - here->BSIM4ggidlb * delvbs; } tol6 = ckt->CKTreltol * MAX(fabs(cbhat), fabs(Ibtot)) + ckt->CKTabstol; if (fabs(cbhat - Ibtot) > tol6) { ckt->CKTnoncon++; return(OK); } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4/bsim4ext.h0000644000175000017500000001340113546075722022110 0ustar carstencarsten/* ****************************************************************************** * BSIM4 4.8.1 released by Chetan Kumar Dabhi 2/15/2017 * * BSIM4 Model Equations * ****************************************************************************** ****************************************************************************** * Copyright 2017 Regents of the University of California. * * All rights reserved. * * * * Project Director: Prof. Chenming Hu. * * Authors: Gary W. Ng, Weidong Liu, Xuemei Xi, Mohan Dunga, Wenwei Yang * * Ali Niknejad, Shivendra Singh Parihar, Chetan Kumar Dabhi * * Yogesh Singh Chauhan, Sayeef Salahuddin, Chenming Hu * ****************************************************************************** ****************************************************************************** * CMC In-Code Statement * * * * The Developer agrees that the following statement will appear in the * * model code that has been adopted as a CMC Standard. * * * * Software is distributed as is, completely without warranty or service * * support. The University of California and its employees are not liable * * for the condition or performance of the software. * * * * The University of California owns the copyright and grants users a * * perpetual, irrevocable, worldwide, non-exclusive, royalty-free license * * with respect to the software as set forth below. * * * * The University of California hereby disclaims all implied warranties. * * * * The University of California grants the users the right to modify, * * copy, and redistribute the software and documentation, both within * * the user's organization and externally, subject to the following * * restrictions: * * * * 1. The users agree not to charge for the University of California code * * itself but may charge for additions, extensions, or support. * * * * 2. In any product based on the software, the users agree to * * acknowledge the University of California that developed the * * software. This acknowledgment shall appear in the product * * documentation. * * * * 3. Redistributions to others of source code and documentation must * * retain the copyright notice, disclaimer, and list of conditions. * * * * 4. Redistributions to others in binary form must reproduce the * * copyright notice, disclaimer, and list of conditions in the * * documentation and/or other materials provided with the * * distribution. * * * * Agreed to on ______Feb. 15, 2017______________ * * * * By: ____University of California, Berkeley___ * * ____Chenming Hu__________________________ * * ____Professor in Graduate School ________ * * * ****************************************************************************** */ extern int BSIM4acLoad(GENmodel *,CKTcircuit*); extern int BSIM4ask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*); extern int BSIM4convTest(GENmodel *,CKTcircuit*); extern int BSIM4getic(GENmodel*,CKTcircuit*); extern int BSIM4load(GENmodel*,CKTcircuit*); extern int BSIM4mAsk(CKTcircuit*,GENmodel *,int, IFvalue*); extern int BSIM4mDelete(GENmodel*); extern int BSIM4mParam(int,IFvalue*,GENmodel*); extern void BSIM4mosCap(CKTcircuit*, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*); extern int BSIM4param(int,IFvalue*,GENinstance*,IFvalue*); extern int BSIM4pzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int BSIM4setup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int BSIM4temp(GENmodel*,CKTcircuit*); extern int BSIM4trunc(GENmodel*,CKTcircuit*,double*); extern int BSIM4noise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int BSIM4unsetup(GENmodel*,CKTcircuit*); extern int BSIM4soaCheck(CKTcircuit *, GENmodel *); tmpk8ny_4pz/src/spicelib/devices/bsim4/b4noi.c0000644000175000017500000012173313546075722021367 0ustar carstencarsten/* ****************************************************************************** * BSIM4 4.8.1 released by Chetan Kumar Dabhi 2/15/2017 * * BSIM4 Model Equations * ****************************************************************************** ****************************************************************************** * Copyright 2017 Regents of the University of California. * * All rights reserved. * * * * Project Director: Prof. Chenming Hu. * * Authors: Gary W. Ng, Weidong Liu, Xuemei Xi, Mohan Dunga, Wenwei Yang * * Ali Niknejad, Shivendra Singh Parihar, Chetan Kumar Dabhi * * Yogesh Singh Chauhan, Sayeef Salahuddin, Chenming Hu * ****************************************************************************** ****************************************************************************** * CMC In-Code Statement * * * * The Developer agrees that the following statement will appear in the * * model code that has been adopted as a CMC Standard. * * * * Software is distributed as is, completely without warranty or service * * support. The University of California and its employees are not liable * * for the condition or performance of the software. * * * * The University of California owns the copyright and grants users a * * perpetual, irrevocable, worldwide, non-exclusive, royalty-free license * * with respect to the software as set forth below. * * * * The University of California hereby disclaims all implied warranties. * * * * The University of California grants the users the right to modify, * * copy, and redistribute the software and documentation, both within * * the user's organization and externally, subject to the following * * restrictions: * * * * 1. The users agree not to charge for the University of California code * * itself but may charge for additions, extensions, or support. * * * * 2. In any product based on the software, the users agree to * * acknowledge the University of California that developed the * * software. This acknowledgment shall appear in the product * * documentation. * * * * 3. Redistributions to others of source code and documentation must * * retain the copyright notice, disclaimer, and list of conditions. * * * * 4. Redistributions to others in binary form must reproduce the * * copyright notice, disclaimer, and list of conditions in the * * documentation and/or other materials provided with the * * distribution. * * * * Agreed to on ______Feb. 15, 2017______________ * * * * By: ____University of California, Berkeley___ * * ____Chenming Hu__________________________ * * ____Professor in Graduate School ________ * * * ****************************************************************************** */ #include "ngspice/ngspice.h" #include "bsim4def.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" #include "ngspice/const.h" /* * WDL: 1/f noise model has been smoothed out and enhanced with * bulk charge effect as well as physical N* equ. and necessary * conversion into the SI unit system. */ static double Eval1ovFNoise( double Vds, BSIM4model *model, BSIM4instance *here, double freq, double temp) { struct bsim4SizeDependParam *pParam; double cd, esat, DelClm, EffFreq, N0, Nl, Leff, Leffsq; double T0=0.0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi; pParam = here->pParam; cd = fabs(here->BSIM4cd); Leff = pParam->BSIM4leff - 2.0 * model->BSIM4lintnoi; Leffsq = Leff * Leff; esat = 2.0 * here->BSIM4vsattemp / here->BSIM4ueff; if(model->BSIM4em<=0.0) DelClm = 0.0; /* flicker noise modified -JX */ else { T0 = ((((Vds - here->BSIM4Vdseff) / pParam->BSIM4litl) + model->BSIM4em) / esat); DelClm = pParam->BSIM4litl * log (MAX(T0, N_MINLOG)); if (DelClm < 0.0) DelClm = 0.0; /* bugfix */ } EffFreq = pow(freq, model->BSIM4ef); T1 = CHARGE * CHARGE * CONSTboltz * cd * temp * here->BSIM4ueff; T2 = 1.0e10 * EffFreq * here->BSIM4Abulk * model->BSIM4coxe * Leffsq; N0 = model->BSIM4coxe * here->BSIM4Vgsteff / CHARGE; Nl = model->BSIM4coxe * here->BSIM4Vgsteff * (1.0 - here->BSIM4AbovVgst2Vtm * here->BSIM4Vdseff) / CHARGE; T3 = model->BSIM4oxideTrapDensityA * log(MAX(((N0 + here->BSIM4nstar) / (Nl + here->BSIM4nstar)), N_MINLOG)); T4 = model->BSIM4oxideTrapDensityB * (N0 - Nl); T5 = model->BSIM4oxideTrapDensityC * 0.5 * (N0 * N0 - Nl * Nl); T6 = CONSTboltz * temp * cd * cd; T7 = 1.0e10 * EffFreq * Leffsq * pParam->BSIM4weff * here->BSIM4nf; T8 = model->BSIM4oxideTrapDensityA + model->BSIM4oxideTrapDensityB * Nl + model->BSIM4oxideTrapDensityC * Nl * Nl; T9 = (Nl + here->BSIM4nstar) * (Nl + here->BSIM4nstar); Ssi = T1 / T2 * (T3 + T4 + T5) + T6 / T7 * DelClm * T8 / T9; return Ssi; } int BSIM4noise ( int mode, int operation, GENmodel *inModel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; BSIM4model *model = (BSIM4model *)inModel; BSIM4instance *here; struct bsim4SizeDependParam *pParam; double tempOnoise; double tempInoise; double noizDens[BSIM4NSRCS]; double lnNdens[BSIM4NSRCS]; double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11; double Vds, Ssi, Swi; double tmp=0.0, gdpr, gspr, npart_theta=0.0, npart_beta=0.0, igsquare, bodymode; /* tnoiMod=2 (v4.7) */ double eta, Leff, Lvsat, gamma, delta, epsilon, GammaGd0=0.0; double npart_c, sigrat=0.0, C0, omega, ctnoi=0.0; int i; double m; /* define the names of the noise sources */ static char *BSIM4nNames[BSIM4NSRCS] = { /* Note that we have to keep the order */ ".rd", /* noise due to rd */ ".rs", /* noise due to rs */ ".rg", /* noise due to rgeltd */ ".rbps", /* noise due to rbps */ ".rbpd", /* noise due to rbpd */ ".rbpb", /* noise due to rbpb */ ".rbsb", /* noise due to rbsb */ ".rbdb", /* noise due to rbdb */ ".id", /* noise due to id (for tnoiMod2: uncorrelated portion only) */ ".1overf", /* flicker (1/f) noise */ ".igs", /* shot noise due to IGS */ ".igd", /* shot noise due to IGD */ ".igb", /* shot noise due to IGB */ ".corl", /* contribution of correlated drain and induced gate noise */ "" /* total transistor noise */ }; for (; model != NULL; model = BSIM4nextModel(model)) { if(model->BSIM4tnoiMod != 2) { noizDens[BSIM4CORLNOIZ] = 0.0; lnNdens[BSIM4CORLNOIZ] = N_MINLOG; } for (here = BSIM4instances(model); here != NULL; here = BSIM4nextInstance(here)) { pParam = here->pParam; switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i = 0; i < BSIM4NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise.%s%s", here->BSIM4name, BSIM4nNames[i]); } break; case INT_NOIZ: for (i = 0; i < BSIM4NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total.%s%s", here->BSIM4name, BSIM4nNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total.%s%s", here->BSIM4name, BSIM4nNames[i]); } break; } } break; case N_CALC: m = here->BSIM4m; switch (mode) { case N_DENS: if (model->BSIM4tnoiMod == 0) { if (model->BSIM4rdsMod == 0) { gspr = here->BSIM4sourceConductance; gdpr = here->BSIM4drainConductance; if (here->BSIM4grdsw > 0.0) tmp = 1.0 / here->BSIM4grdsw; /* tmp used below */ else tmp = 0.0; } else { gspr = here->BSIM4gstot; gdpr = here->BSIM4gdtot; tmp = 0.0; } } else if(model->BSIM4tnoiMod == 1) { T5 = here->BSIM4Vgsteff / here->BSIM4EsatL; T5 *= T5; npart_beta = model->BSIM4rnoia * (1.0 + T5 * model->BSIM4tnoia * pParam->BSIM4leff); npart_theta = model->BSIM4rnoib * (1.0 + T5 * model->BSIM4tnoib * pParam->BSIM4leff); if(npart_theta > 0.9) npart_theta = 0.9; if(npart_theta > 0.9 * npart_beta) npart_theta = 0.9 * npart_beta; //4.6.2 if (model->BSIM4rdsMod == 0) { gspr = here->BSIM4sourceConductance; gdpr = here->BSIM4drainConductance; } else { gspr = here->BSIM4gstot; gdpr = here->BSIM4gdtot; } if ((*(ckt->CKTstates[0] + here->BSIM4vds)) >= 0.0) gspr = gspr * (1.0 + npart_theta * npart_theta * gspr / here->BSIM4IdovVds); else gdpr = gdpr * (1.0 + npart_theta * npart_theta * gdpr / here->BSIM4IdovVds); } else { /* tnoiMod=2 (v4.7) */ if (model->BSIM4rdsMod == 0) { gspr = here->BSIM4sourceConductance; gdpr = here->BSIM4drainConductance; } else { gspr = here->BSIM4gstot; gdpr = here->BSIM4gdtot; } } NevalSrc(&noizDens[BSIM4RDNOIZ], &lnNdens[BSIM4RDNOIZ], ckt, THERMNOISE, here->BSIM4dNodePrime, here->BSIM4dNode, gdpr * m); NevalSrc(&noizDens[BSIM4RSNOIZ], &lnNdens[BSIM4RSNOIZ], ckt, THERMNOISE, here->BSIM4sNodePrime, here->BSIM4sNode, gspr * m); if (here->BSIM4rgateMod == 1) { NevalSrc(&noizDens[BSIM4RGNOIZ], &lnNdens[BSIM4RGNOIZ], ckt, THERMNOISE, here->BSIM4gNodePrime, here->BSIM4gNodeExt, here->BSIM4grgeltd * m); } else if (here->BSIM4rgateMod == 2) { T0 = 1.0 + here->BSIM4grgeltd/here->BSIM4gcrg; T1 = T0 * T0; NevalSrc(&noizDens[BSIM4RGNOIZ], &lnNdens[BSIM4RGNOIZ], ckt, THERMNOISE, here->BSIM4gNodePrime, here->BSIM4gNodeExt, here->BSIM4grgeltd * m / T1); } else if (here->BSIM4rgateMod == 3) { NevalSrc(&noizDens[BSIM4RGNOIZ], &lnNdens[BSIM4RGNOIZ], ckt, THERMNOISE, here->BSIM4gNodeMid, here->BSIM4gNodeExt, here->BSIM4grgeltd * m); } else { noizDens[BSIM4RGNOIZ] = 0.0; lnNdens[BSIM4RGNOIZ] = log(MAX(noizDens[BSIM4RGNOIZ], N_MINLOG)); } bodymode = 5; if (here->BSIM4rbodyMod == 2) { if( ( !model->BSIM4rbps0Given) || ( !model->BSIM4rbpd0Given) ) bodymode = 1; else if( (!model->BSIM4rbsbx0Given && !model->BSIM4rbsby0Given) || (!model->BSIM4rbdbx0Given && !model->BSIM4rbdby0Given) ) bodymode = 3; } if (here->BSIM4rbodyMod) { if(bodymode == 5) { NevalSrc(&noizDens[BSIM4RBPSNOIZ], &lnNdens[BSIM4RBPSNOIZ], ckt, THERMNOISE, here->BSIM4bNodePrime, here->BSIM4sbNode, here->BSIM4grbps * m); NevalSrc(&noizDens[BSIM4RBPDNOIZ], &lnNdens[BSIM4RBPDNOIZ], ckt, THERMNOISE, here->BSIM4bNodePrime, here->BSIM4dbNode, here->BSIM4grbpd * m); NevalSrc(&noizDens[BSIM4RBPBNOIZ], &lnNdens[BSIM4RBPBNOIZ], ckt, THERMNOISE, here->BSIM4bNodePrime, here->BSIM4bNode, here->BSIM4grbpb * m); NevalSrc(&noizDens[BSIM4RBSBNOIZ], &lnNdens[BSIM4RBSBNOIZ], ckt, THERMNOISE, here->BSIM4bNode, here->BSIM4sbNode, here->BSIM4grbsb * m); NevalSrc(&noizDens[BSIM4RBDBNOIZ], &lnNdens[BSIM4RBDBNOIZ], ckt, THERMNOISE, here->BSIM4bNode, here->BSIM4dbNode, here->BSIM4grbdb * m); } if(bodymode == 3) { NevalSrc(&noizDens[BSIM4RBPSNOIZ], &lnNdens[BSIM4RBPSNOIZ], ckt, THERMNOISE, here->BSIM4bNodePrime, here->BSIM4sbNode, here->BSIM4grbps * m); NevalSrc(&noizDens[BSIM4RBPDNOIZ], &lnNdens[BSIM4RBPDNOIZ], ckt, THERMNOISE, here->BSIM4bNodePrime, here->BSIM4dbNode, here->BSIM4grbpd * m); NevalSrc(&noizDens[BSIM4RBPBNOIZ], &lnNdens[BSIM4RBPBNOIZ], ckt, THERMNOISE, here->BSIM4bNodePrime, here->BSIM4bNode, here->BSIM4grbpb * m); noizDens[BSIM4RBSBNOIZ] = noizDens[BSIM4RBDBNOIZ] = 0.0; lnNdens[BSIM4RBSBNOIZ] = log(MAX(noizDens[BSIM4RBSBNOIZ], N_MINLOG)); lnNdens[BSIM4RBDBNOIZ] = log(MAX(noizDens[BSIM4RBDBNOIZ], N_MINLOG)); } if(bodymode == 1) { NevalSrc(&noizDens[BSIM4RBPBNOIZ], &lnNdens[BSIM4RBPBNOIZ], ckt, THERMNOISE, here->BSIM4bNodePrime, here->BSIM4bNode, here->BSIM4grbpb * m); noizDens[BSIM4RBPSNOIZ] = noizDens[BSIM4RBPDNOIZ] = 0.0; noizDens[BSIM4RBSBNOIZ] = noizDens[BSIM4RBDBNOIZ] = 0.0; lnNdens[BSIM4RBPSNOIZ] = log(MAX(noizDens[BSIM4RBPSNOIZ], N_MINLOG)); lnNdens[BSIM4RBPDNOIZ] = log(MAX(noizDens[BSIM4RBPDNOIZ], N_MINLOG)); lnNdens[BSIM4RBSBNOIZ] = log(MAX(noizDens[BSIM4RBSBNOIZ], N_MINLOG)); lnNdens[BSIM4RBDBNOIZ] = log(MAX(noizDens[BSIM4RBDBNOIZ], N_MINLOG)); } } else { noizDens[BSIM4RBPSNOIZ] = noizDens[BSIM4RBPDNOIZ] = 0.0; noizDens[BSIM4RBPBNOIZ] = 0.0; noizDens[BSIM4RBSBNOIZ] = noizDens[BSIM4RBDBNOIZ] = 0.0; lnNdens[BSIM4RBPSNOIZ] = log(MAX(noizDens[BSIM4RBPSNOIZ], N_MINLOG)); lnNdens[BSIM4RBPDNOIZ] = log(MAX(noizDens[BSIM4RBPDNOIZ], N_MINLOG)); lnNdens[BSIM4RBPBNOIZ] = log(MAX(noizDens[BSIM4RBPBNOIZ], N_MINLOG)); lnNdens[BSIM4RBSBNOIZ] = log(MAX(noizDens[BSIM4RBSBNOIZ], N_MINLOG)); lnNdens[BSIM4RBDBNOIZ] = log(MAX(noizDens[BSIM4RBDBNOIZ], N_MINLOG)); } if(model->BSIM4tnoiMod == 2) { eta = 1.0 - here->BSIM4Vdseff * here->BSIM4AbovVgst2Vtm; T0 = 1.0 - eta; T1 = 1.0 + eta; T2 = T1 + 2.0 * here->BSIM4Abulk * model->BSIM4vtm / here->BSIM4Vgsteff; Leff = pParam->BSIM4leff; Lvsat = Leff * (1.0 + here->BSIM4Vdseff / here->BSIM4EsatL); T6 = Leff / Lvsat; /*Unwanted code for T5 commented*/ /*T5 = here->BSIM4Vgsteff / here->BSIM4EsatL; T5 = T5 * T5; */ gamma = T6 * (0.5 * T1 + T0 * T0 / (6.0 * T2)); T3 = T2 * T2; T4 = T0 * T0; T5 = T3 * T3; delta = (T1 / T3 - (5.0 * T1 + T2) * T4 / (15.0 * T5) + T4 * T4 / (9.0 * T5 * T2)) / (6.0 * T6 * T6 * T6); T7 = T0 / T2; epsilon = (T7 - T7 * T7 * T7 / 3.0) / (6.0 * T6); T8 = here->BSIM4Vgsteff / here->BSIM4EsatL; T8 *= T8; if ((strcmp(model->BSIM4version, "4.8.1")) && (strncmp(model->BSIM4version, "4.81", 4))) { npart_c = model->BSIM4rnoic * (1.0 + T8 * model->BSIM4tnoic * Leff); ctnoi = epsilon / sqrt(gamma * delta) * (2.5316 * npart_c); npart_beta = model->BSIM4rnoia * (1.0 + T8 * model->BSIM4tnoia * Leff); npart_theta = model->BSIM4rnoib * (1.0 + T8 * model->BSIM4tnoib * Leff); gamma = gamma * (3.0 * npart_beta * npart_beta); delta = delta * (3.75 * npart_theta * npart_theta); GammaGd0 = gamma * here->BSIM4noiGd0; C0 = here->BSIM4Coxeff * pParam->BSIM4weffCV * here->BSIM4nf * pParam->BSIM4leffCV; T0 = C0 / here->BSIM4noiGd0; sigrat = T0 * sqrt(delta / gamma); } else { npart_c = model->BSIM4rnoic * (1.0 + T8 * model->BSIM4tnoic * Leff); /* Limits added for rnoia, rnoib, rnoic, tnoia, tnoib and tnoic in BSIM4.8.1 */ T9 = gamma * delta ; if (T9 > 0) ctnoi = epsilon / sqrt( gamma * delta) * (2.5316 * npart_c); else ctnoi = 1.0 ; if (ctnoi > 1) ctnoi=1; if (ctnoi < 0) ctnoi=0; npart_beta = model->BSIM4rnoia * (1.0 + T8 * model->BSIM4tnoia * Leff); npart_theta = model->BSIM4rnoib * (1.0 + T8 * model->BSIM4tnoib * Leff); gamma = gamma * (3.0 * npart_beta * npart_beta); delta = delta * (3.75 * npart_theta * npart_theta); GammaGd0 = gamma * here->BSIM4noiGd0; C0 = here->BSIM4Coxeff * pParam->BSIM4weffCV * here->BSIM4nf * pParam->BSIM4leffCV; T0 = C0 / here->BSIM4noiGd0; if (gamma > 0 && delta > 0) sigrat = T0 * sqrt(delta / gamma); else sigrat = 0.0; } } switch(model->BSIM4tnoiMod) { case 0: if ((strcmp(model->BSIM4version, "4.8.1")) && (strncmp(model->BSIM4version, "4.81", 4))) { T0 = here->BSIM4ueff * fabs(here->BSIM4qinv); T1 = T0 * tmp + pParam->BSIM4leff * pParam->BSIM4leff; NevalSrc(&noizDens[BSIM4IDNOIZ], &lnNdens[BSIM4IDNOIZ], ckt, THERMNOISE, here->BSIM4dNodePrime, here->BSIM4sNodePrime, (T0 / T1) * model->BSIM4ntnoi * m); } else { T0 = here->BSIM4ueff * fabs(here->BSIM4qinv); T1 = T0 * tmp + pParam->BSIM4leff * pParam->BSIM4leff; NevalSrc(&noizDens[BSIM4IDNOIZ], &lnNdens[BSIM4IDNOIZ], ckt, THERMNOISE, here->BSIM4dNodePrime, here->BSIM4sNodePrime, (T0 / T1) * model->BSIM4ntnoi * m); noizDens[BSIM4CORLNOIZ] = 0.0; lnNdens[BSIM4CORLNOIZ] = log(MAX(noizDens[BSIM4CORLNOIZ], N_MINLOG)); } break; case 1: if ((strcmp(model->BSIM4version, "4.8.1")) && (strncmp(model->BSIM4version, "4.81", 4))) { T0 = here->BSIM4gm + here->BSIM4gmbs + here->BSIM4gds; T0 *= T0; igsquare = npart_theta * npart_theta * T0 / here->BSIM4IdovVds; T1 = npart_beta * (here->BSIM4gm + here->BSIM4gmbs) + here->BSIM4gds; T2 = T1 * T1 / here->BSIM4IdovVds; NevalSrc(&noizDens[BSIM4IDNOIZ], &lnNdens[BSIM4IDNOIZ], ckt, THERMNOISE, here->BSIM4dNodePrime, here->BSIM4sNodePrime, (T2 - igsquare) * m); } else { T0 = here->BSIM4gm + here->BSIM4gmbs + here->BSIM4gds; T0 *= T0; igsquare = npart_theta * npart_theta * T0 / here->BSIM4IdovVds; T1 = npart_beta * (here->BSIM4gm + here->BSIM4gmbs) + here->BSIM4gds; T2 = T1 * T1 / here->BSIM4IdovVds; NevalSrc(&noizDens[BSIM4IDNOIZ], &lnNdens[BSIM4IDNOIZ], ckt, THERMNOISE, here->BSIM4dNodePrime, here->BSIM4sNodePrime, (T2 - igsquare) * m); noizDens[BSIM4CORLNOIZ] = 0.0; lnNdens[BSIM4CORLNOIZ] = log(MAX(noizDens[BSIM4CORLNOIZ], N_MINLOG)); } break; case 2: T2 = GammaGd0; T3 = ctnoi * ctnoi; T4 = 1.0 - T3; NevalSrc(&noizDens[BSIM4IDNOIZ], &lnNdens[BSIM4IDNOIZ], ckt, THERMNOISE, here->BSIM4dNodePrime, here->BSIM4sNodePrime, T2 * T4 * m); /* Evaluate output noise due to two correlated noise sources */ omega = 2.0 * M_PI * data->freq; T5 = omega * sigrat; T6 = T5 * T5; T7 = T6 / (1.0 + T6); if (here->BSIM4mode >= 0) { NevalSrc2(&noizDens[BSIM4CORLNOIZ], &lnNdens[BSIM4CORLNOIZ], ckt, THERMNOISE, here->BSIM4dNodePrime, here->BSIM4sNodePrime, T2 * T3 * m, here->BSIM4gNodePrime, here->BSIM4sNodePrime, T2 * T7 * m, 0.5 * M_PI); } else { NevalSrc2(&noizDens[BSIM4CORLNOIZ], &lnNdens[BSIM4CORLNOIZ], ckt, THERMNOISE, here->BSIM4sNodePrime, here->BSIM4dNodePrime, T2 * T3 * m, here->BSIM4gNodePrime, here->BSIM4dNodePrime, T2 * T7 * m, 0.5 * M_PI); } break; } NevalSrc(&noizDens[BSIM4FLNOIZ], (double*) NULL, ckt, N_GAIN, here->BSIM4dNodePrime, here->BSIM4sNodePrime, (double) 0.0); switch(model->BSIM4fnoiMod) { case 0: noizDens[BSIM4FLNOIZ] *= m * model->BSIM4kf * exp(model->BSIM4af * log(MAX(fabs(here->BSIM4cd), N_MINLOG))) / (pow(data->freq, model->BSIM4ef) * pParam->BSIM4leff * pParam->BSIM4leff * model->BSIM4coxe); break; case 1: Vds = *(ckt->CKTstates[0] + here->BSIM4vds); if (Vds < 0.0) Vds = -Vds; Ssi = Eval1ovFNoise(Vds, model, here, data->freq, ckt->CKTtemp); T10 = model->BSIM4oxideTrapDensityA * CONSTboltz * ckt->CKTtemp; T11 = pParam->BSIM4weff * here->BSIM4nf * pParam->BSIM4leff * pow(data->freq, model->BSIM4ef) * 1.0e10 * here->BSIM4nstar * here->BSIM4nstar; Swi = T10 / T11 * here->BSIM4cd * here->BSIM4cd; T1 = Swi + Ssi; if (T1 > 0.0) noizDens[BSIM4FLNOIZ] *= m * (Ssi * Swi) / T1; else noizDens[BSIM4FLNOIZ] *= 0.0; break; } lnNdens[BSIM4FLNOIZ] = log(MAX(noizDens[BSIM4FLNOIZ], N_MINLOG)); if(here->BSIM4mode >= 0) { /* bugfix */ NevalSrc(&noizDens[BSIM4IGSNOIZ], &lnNdens[BSIM4IGSNOIZ], ckt, SHOTNOISE, here->BSIM4gNodePrime, here->BSIM4sNodePrime, m * (here->BSIM4Igs + here->BSIM4Igcs)); NevalSrc(&noizDens[BSIM4IGDNOIZ], &lnNdens[BSIM4IGDNOIZ], ckt, SHOTNOISE, here->BSIM4gNodePrime, here->BSIM4dNodePrime, m * (here->BSIM4Igd + here->BSIM4Igcd)); } else { NevalSrc(&noizDens[BSIM4IGSNOIZ], &lnNdens[BSIM4IGSNOIZ], ckt, SHOTNOISE, here->BSIM4gNodePrime, here->BSIM4sNodePrime, m * (here->BSIM4Igs + here->BSIM4Igcd)); NevalSrc(&noizDens[BSIM4IGDNOIZ], &lnNdens[BSIM4IGDNOIZ], ckt, SHOTNOISE, here->BSIM4gNodePrime, here->BSIM4dNodePrime, m * (here->BSIM4Igd + here->BSIM4Igcs)); } NevalSrc(&noizDens[BSIM4IGBNOIZ], &lnNdens[BSIM4IGBNOIZ], ckt, SHOTNOISE, here->BSIM4gNodePrime, here->BSIM4bNodePrime, m * here->BSIM4Igb); noizDens[BSIM4TOTNOIZ] = noizDens[BSIM4RDNOIZ] + noizDens[BSIM4RSNOIZ] + noizDens[BSIM4RGNOIZ] + noizDens[BSIM4RBPSNOIZ] + noizDens[BSIM4RBPDNOIZ] + noizDens[BSIM4RBPBNOIZ] + noizDens[BSIM4RBSBNOIZ] + noizDens[BSIM4RBDBNOIZ] + noizDens[BSIM4IDNOIZ] + noizDens[BSIM4FLNOIZ] + noizDens[BSIM4IGSNOIZ] + noizDens[BSIM4IGDNOIZ] + noizDens[BSIM4IGBNOIZ] + noizDens[BSIM4CORLNOIZ]; lnNdens[BSIM4TOTNOIZ] = log(MAX(noizDens[BSIM4TOTNOIZ], N_MINLOG)); *OnDens += noizDens[BSIM4TOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to initialize our "history" variables. */ for (i = 0; i < BSIM4NSRCS; i++) { here->BSIM4nVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i = 0; i < BSIM4NSRCS; i++) { here->BSIM4nVar[OUTNOIZ][i] = 0.0; here->BSIM4nVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0, we have to integrate. */ for (i = 0; i < BSIM4NSRCS; i++) { if (i != BSIM4TOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], here->BSIM4nVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv, lnNdens[i] + data->lnGainInv, here->BSIM4nVar[LNLSTDENS][i] + data->lnGainInv, data); here->BSIM4nVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { here->BSIM4nVar[OUTNOIZ][i] += tempOnoise; here->BSIM4nVar[OUTNOIZ][BSIM4TOTNOIZ] += tempOnoise; here->BSIM4nVar[INNOIZ][i] += tempInoise; here->BSIM4nVar[INNOIZ][BSIM4TOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i = 0; i < BSIM4NSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i = 0; i < BSIM4NSRCS; i++) { data->outpVector[data->outNumber++] = here->BSIM4nVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = here->BSIM4nVar[INNOIZ][i]; } } break; } break; case N_CLOSE: /* do nothing, the main calling routine will close */ return (OK); break; /* the plots */ } /* switch (operation) */ } /* for here */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4/ChangeLog0000644000175000017500000000104513546075722021753 0ustar carstencarsten2001-11-26 Paolo Nenzi * *.c *.h: Code cleanups and made Manu import conformant to ngspice interface. Readded code for multiprocessors. 2001-11-25 Emmanuel Rouat * *.c *.h: Updated to version BSIM4.2.1 2000-04-04 Paolo Nenzi * *.c, *.h: Initial bsim4 support. Modified all files to conform to ngspice headers and added paraller architecture support (please do not use this, it is not supported, it is included for developers only). tmpk8ny_4pz/src/spicelib/devices/bsim4/b4mpar.c0000644000175000017500000040236013546075722021537 0ustar carstencarsten/* ****************************************************************************** * BSIM4 4.8.1 released by Chetan Kumar Dabhi 2/15/2017 * * BSIM4 Model Equations * ****************************************************************************** ****************************************************************************** * Copyright 2017 Regents of the University of California. * * All rights reserved. * * * * Project Director: Prof. Chenming Hu. * * Authors: Gary W. Ng, Weidong Liu, Xuemei Xi, Mohan Dunga, Wenwei Yang * * Ali Niknejad, Shivendra Singh Parihar, Chetan Kumar Dabhi * * Yogesh Singh Chauhan, Sayeef Salahuddin, Chenming Hu * ****************************************************************************** ****************************************************************************** * CMC In-Code Statement * * * * The Developer agrees that the following statement will appear in the * * model code that has been adopted as a CMC Standard. * * * * Software is distributed as is, completely without warranty or service * * support. The University of California and its employees are not liable * * for the condition or performance of the software. * * * * The University of California owns the copyright and grants users a * * perpetual, irrevocable, worldwide, non-exclusive, royalty-free license * * with respect to the software as set forth below. * * * * The University of California hereby disclaims all implied warranties. * * * * The University of California grants the users the right to modify, * * copy, and redistribute the software and documentation, both within * * the user's organization and externally, subject to the following * * restrictions: * * * * 1. The users agree not to charge for the University of California code * * itself but may charge for additions, extensions, or support. * * * * 2. In any product based on the software, the users agree to * * acknowledge the University of California that developed the * * software. This acknowledgment shall appear in the product * * documentation. * * * * 3. Redistributions to others of source code and documentation must * * retain the copyright notice, disclaimer, and list of conditions. * * * * 4. Redistributions to others in binary form must reproduce the * * copyright notice, disclaimer, and list of conditions in the * * documentation and/or other materials provided with the * * distribution. * * * * Agreed to on ______Feb. 15, 2017______________ * * * * By: ____University of California, Berkeley___ * * ____Chenming Hu__________________________ * * ____Professor in Graduate School ________ * * * ****************************************************************************** */ #include "ngspice/ngspice.h" #include "bsim4def.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/const.h" int BSIM4mParam( int param, IFvalue *value, GENmodel *inMod) { BSIM4model *mod = (BSIM4model*)inMod; switch(param) { case BSIM4_MOD_MOBMOD : mod->BSIM4mobMod = value->iValue; mod->BSIM4mobModGiven = TRUE; break; case BSIM4_MOD_BINUNIT : mod->BSIM4binUnit = value->iValue; mod->BSIM4binUnitGiven = TRUE; break; case BSIM4_MOD_PARAMCHK : mod->BSIM4paramChk = value->iValue; mod->BSIM4paramChkGiven = TRUE; break; case BSIM4_MOD_CVCHARGEMOD : mod->BSIM4cvchargeMod = value->iValue; mod->BSIM4cvchargeModGiven = TRUE; break; case BSIM4_MOD_CAPMOD : mod->BSIM4capMod = value->iValue; mod->BSIM4capModGiven = TRUE; break; case BSIM4_MOD_DIOMOD : mod->BSIM4dioMod = value->iValue; mod->BSIM4dioModGiven = TRUE; break; case BSIM4_MOD_RDSMOD : mod->BSIM4rdsMod = value->iValue; mod->BSIM4rdsModGiven = TRUE; break; case BSIM4_MOD_TRNQSMOD : mod->BSIM4trnqsMod = value->iValue; mod->BSIM4trnqsModGiven = TRUE; break; case BSIM4_MOD_ACNQSMOD : mod->BSIM4acnqsMod = value->iValue; mod->BSIM4acnqsModGiven = TRUE; break; case BSIM4_MOD_RBODYMOD : mod->BSIM4rbodyMod = value->iValue; mod->BSIM4rbodyModGiven = TRUE; break; case BSIM4_MOD_RGATEMOD : mod->BSIM4rgateMod = value->iValue; mod->BSIM4rgateModGiven = TRUE; break; case BSIM4_MOD_PERMOD : mod->BSIM4perMod = value->iValue; mod->BSIM4perModGiven = TRUE; break; case BSIM4_MOD_GEOMOD : mod->BSIM4geoMod = value->iValue; mod->BSIM4geoModGiven = TRUE; break; case BSIM4_MOD_RGEOMOD : mod->BSIM4rgeoMod = value->iValue; mod->BSIM4rgeoModGiven = TRUE; break; case BSIM4_MOD_FNOIMOD : mod->BSIM4fnoiMod = value->iValue; mod->BSIM4fnoiModGiven = TRUE; break; case BSIM4_MOD_TNOIMOD : mod->BSIM4tnoiMod = value->iValue; mod->BSIM4tnoiModGiven = TRUE; break; case BSIM4_MOD_MTRLMOD : mod->BSIM4mtrlMod = value->iValue; mod->BSIM4mtrlModGiven = TRUE; break; case BSIM4_MOD_MTRLCOMPATMOD : mod->BSIM4mtrlCompatMod = value->iValue; mod->BSIM4mtrlCompatModGiven = TRUE; break; case BSIM4_MOD_GIDLMOD : /* v4.7 New GIDL/GISL */ mod->BSIM4gidlMod = value->iValue; mod->BSIM4gidlModGiven = TRUE; break; case BSIM4_MOD_IGCMOD : mod->BSIM4igcMod = value->iValue; mod->BSIM4igcModGiven = TRUE; break; case BSIM4_MOD_IGBMOD : mod->BSIM4igbMod = value->iValue; mod->BSIM4igbModGiven = TRUE; break; case BSIM4_MOD_TEMPMOD : mod->BSIM4tempMod = value->iValue; mod->BSIM4tempModGiven = TRUE; break; case BSIM4_MOD_VERSION : mod->BSIM4version = value->sValue; mod->BSIM4versionGiven = TRUE; break; case BSIM4_MOD_TOXREF : mod->BSIM4toxref = value->rValue; mod->BSIM4toxrefGiven = TRUE; break; case BSIM4_MOD_EOT : mod->BSIM4eot = value->rValue; mod->BSIM4eotGiven = TRUE; break; case BSIM4_MOD_VDDEOT : mod->BSIM4vddeot = value->rValue; mod->BSIM4vddeotGiven = TRUE; break; case BSIM4_MOD_TEMPEOT : mod->BSIM4tempeot = value->rValue; mod->BSIM4tempeotGiven = TRUE; break; case BSIM4_MOD_LEFFEOT : mod->BSIM4leffeot = value->rValue; mod->BSIM4leffeotGiven = TRUE; break; case BSIM4_MOD_WEFFEOT : mod->BSIM4weffeot = value->rValue; mod->BSIM4weffeotGiven = TRUE; break; case BSIM4_MOD_ADOS : mod->BSIM4ados = value->rValue; mod->BSIM4adosGiven = TRUE; break; case BSIM4_MOD_BDOS : mod->BSIM4bdos = value->rValue; mod->BSIM4bdosGiven = TRUE; break; case BSIM4_MOD_TOXE : mod->BSIM4toxe = value->rValue; mod->BSIM4toxeGiven = TRUE; break; case BSIM4_MOD_TOXP : mod->BSIM4toxp = value->rValue; mod->BSIM4toxpGiven = TRUE; break; case BSIM4_MOD_TOXM : mod->BSIM4toxm = value->rValue; mod->BSIM4toxmGiven = TRUE; break; case BSIM4_MOD_DTOX : mod->BSIM4dtox = value->rValue; mod->BSIM4dtoxGiven = TRUE; break; case BSIM4_MOD_EPSROX : mod->BSIM4epsrox = value->rValue; mod->BSIM4epsroxGiven = TRUE; break; case BSIM4_MOD_CDSC : mod->BSIM4cdsc = value->rValue; mod->BSIM4cdscGiven = TRUE; break; case BSIM4_MOD_CDSCB : mod->BSIM4cdscb = value->rValue; mod->BSIM4cdscbGiven = TRUE; break; case BSIM4_MOD_CDSCD : mod->BSIM4cdscd = value->rValue; mod->BSIM4cdscdGiven = TRUE; break; case BSIM4_MOD_CIT : mod->BSIM4cit = value->rValue; mod->BSIM4citGiven = TRUE; break; case BSIM4_MOD_NFACTOR : mod->BSIM4nfactor = value->rValue; mod->BSIM4nfactorGiven = TRUE; break; case BSIM4_MOD_XJ: mod->BSIM4xj = value->rValue; mod->BSIM4xjGiven = TRUE; break; case BSIM4_MOD_VSAT: mod->BSIM4vsat = value->rValue; mod->BSIM4vsatGiven = TRUE; break; case BSIM4_MOD_A0: mod->BSIM4a0 = value->rValue; mod->BSIM4a0Given = TRUE; break; case BSIM4_MOD_AGS: mod->BSIM4ags= value->rValue; mod->BSIM4agsGiven = TRUE; break; case BSIM4_MOD_A1: mod->BSIM4a1 = value->rValue; mod->BSIM4a1Given = TRUE; break; case BSIM4_MOD_A2: mod->BSIM4a2 = value->rValue; mod->BSIM4a2Given = TRUE; break; case BSIM4_MOD_AT: mod->BSIM4at = value->rValue; mod->BSIM4atGiven = TRUE; break; case BSIM4_MOD_KETA: mod->BSIM4keta = value->rValue; mod->BSIM4ketaGiven = TRUE; break; case BSIM4_MOD_NSUB: mod->BSIM4nsub = value->rValue; mod->BSIM4nsubGiven = TRUE; break; case BSIM4_MOD_PHIG: mod->BSIM4phig = value->rValue; mod->BSIM4phigGiven = TRUE; break; case BSIM4_MOD_EPSRGATE: mod->BSIM4epsrgate = value->rValue; mod->BSIM4epsrgateGiven = TRUE; break; case BSIM4_MOD_EASUB: mod->BSIM4easub = value->rValue; mod->BSIM4easubGiven = TRUE; break; case BSIM4_MOD_EPSRSUB: mod->BSIM4epsrsub = value->rValue; mod->BSIM4epsrsubGiven = TRUE; break; case BSIM4_MOD_NI0SUB: mod->BSIM4ni0sub = value->rValue; mod->BSIM4ni0subGiven = TRUE; break; case BSIM4_MOD_BG0SUB: mod->BSIM4bg0sub = value->rValue; mod->BSIM4bg0subGiven = TRUE; break; case BSIM4_MOD_TBGASUB: mod->BSIM4tbgasub = value->rValue; mod->BSIM4tbgasubGiven = TRUE; break; case BSIM4_MOD_TBGBSUB: mod->BSIM4tbgbsub = value->rValue; mod->BSIM4tbgbsubGiven = TRUE; break; case BSIM4_MOD_NDEP: mod->BSIM4ndep = value->rValue; mod->BSIM4ndepGiven = TRUE; if (mod->BSIM4ndep > 1.0e20) mod->BSIM4ndep *= 1.0e-6; break; case BSIM4_MOD_NSD: mod->BSIM4nsd = value->rValue; mod->BSIM4nsdGiven = TRUE; if (mod->BSIM4nsd > 1.0e23) mod->BSIM4nsd *= 1.0e-6; break; case BSIM4_MOD_NGATE: mod->BSIM4ngate = value->rValue; mod->BSIM4ngateGiven = TRUE; if (mod->BSIM4ngate > 1.0e23) mod->BSIM4ngate *= 1.0e-6; break; case BSIM4_MOD_GAMMA1: mod->BSIM4gamma1 = value->rValue; mod->BSIM4gamma1Given = TRUE; break; case BSIM4_MOD_GAMMA2: mod->BSIM4gamma2 = value->rValue; mod->BSIM4gamma2Given = TRUE; break; case BSIM4_MOD_VBX: mod->BSIM4vbx = value->rValue; mod->BSIM4vbxGiven = TRUE; break; case BSIM4_MOD_VBM: mod->BSIM4vbm = value->rValue; mod->BSIM4vbmGiven = TRUE; break; case BSIM4_MOD_XT: mod->BSIM4xt = value->rValue; mod->BSIM4xtGiven = TRUE; break; case BSIM4_MOD_K1: mod->BSIM4k1 = value->rValue; mod->BSIM4k1Given = TRUE; break; case BSIM4_MOD_KT1: mod->BSIM4kt1 = value->rValue; mod->BSIM4kt1Given = TRUE; break; case BSIM4_MOD_KT1L: mod->BSIM4kt1l = value->rValue; mod->BSIM4kt1lGiven = TRUE; break; case BSIM4_MOD_KT2: mod->BSIM4kt2 = value->rValue; mod->BSIM4kt2Given = TRUE; break; case BSIM4_MOD_K2: mod->BSIM4k2 = value->rValue; mod->BSIM4k2Given = TRUE; break; case BSIM4_MOD_K3: mod->BSIM4k3 = value->rValue; mod->BSIM4k3Given = TRUE; break; case BSIM4_MOD_K3B: mod->BSIM4k3b = value->rValue; mod->BSIM4k3bGiven = TRUE; break; case BSIM4_MOD_LPE0: mod->BSIM4lpe0 = value->rValue; mod->BSIM4lpe0Given = TRUE; break; case BSIM4_MOD_LPEB: mod->BSIM4lpeb = value->rValue; mod->BSIM4lpebGiven = TRUE; break; case BSIM4_MOD_DVTP0: mod->BSIM4dvtp0 = value->rValue; mod->BSIM4dvtp0Given = TRUE; break; case BSIM4_MOD_DVTP1: mod->BSIM4dvtp1 = value->rValue; mod->BSIM4dvtp1Given = TRUE; break; case BSIM4_MOD_DVTP2: /* New DIBL/Rout */ mod->BSIM4dvtp2 = value->rValue; mod->BSIM4dvtp2Given = TRUE; break; case BSIM4_MOD_DVTP3: mod->BSIM4dvtp3 = value->rValue; mod->BSIM4dvtp3Given = TRUE; break; case BSIM4_MOD_DVTP4: mod->BSIM4dvtp4 = value->rValue; mod->BSIM4dvtp4Given = TRUE; break; case BSIM4_MOD_DVTP5: mod->BSIM4dvtp5 = value->rValue; mod->BSIM4dvtp5Given = TRUE; break; case BSIM4_MOD_W0: mod->BSIM4w0 = value->rValue; mod->BSIM4w0Given = TRUE; break; case BSIM4_MOD_DVT0: mod->BSIM4dvt0 = value->rValue; mod->BSIM4dvt0Given = TRUE; break; case BSIM4_MOD_DVT1: mod->BSIM4dvt1 = value->rValue; mod->BSIM4dvt1Given = TRUE; break; case BSIM4_MOD_DVT2: mod->BSIM4dvt2 = value->rValue; mod->BSIM4dvt2Given = TRUE; break; case BSIM4_MOD_DVT0W: mod->BSIM4dvt0w = value->rValue; mod->BSIM4dvt0wGiven = TRUE; break; case BSIM4_MOD_DVT1W: mod->BSIM4dvt1w = value->rValue; mod->BSIM4dvt1wGiven = TRUE; break; case BSIM4_MOD_DVT2W: mod->BSIM4dvt2w = value->rValue; mod->BSIM4dvt2wGiven = TRUE; break; case BSIM4_MOD_DROUT: mod->BSIM4drout = value->rValue; mod->BSIM4droutGiven = TRUE; break; case BSIM4_MOD_DSUB: mod->BSIM4dsub = value->rValue; mod->BSIM4dsubGiven = TRUE; break; case BSIM4_MOD_VTH0: mod->BSIM4vth0 = value->rValue; mod->BSIM4vth0Given = TRUE; break; case BSIM4_MOD_EU: mod->BSIM4eu = value->rValue; mod->BSIM4euGiven = TRUE; break; case BSIM4_MOD_UCS: mod->BSIM4ucs = value->rValue; mod->BSIM4ucsGiven = TRUE; break; case BSIM4_MOD_UA: mod->BSIM4ua = value->rValue; mod->BSIM4uaGiven = TRUE; break; case BSIM4_MOD_UA1: mod->BSIM4ua1 = value->rValue; mod->BSIM4ua1Given = TRUE; break; case BSIM4_MOD_UB: mod->BSIM4ub = value->rValue; mod->BSIM4ubGiven = TRUE; break; case BSIM4_MOD_UB1: mod->BSIM4ub1 = value->rValue; mod->BSIM4ub1Given = TRUE; break; case BSIM4_MOD_UC: mod->BSIM4uc = value->rValue; mod->BSIM4ucGiven = TRUE; break; case BSIM4_MOD_UC1: mod->BSIM4uc1 = value->rValue; mod->BSIM4uc1Given = TRUE; break; case BSIM4_MOD_U0 : mod->BSIM4u0 = value->rValue; mod->BSIM4u0Given = TRUE; break; case BSIM4_MOD_UTE : mod->BSIM4ute = value->rValue; mod->BSIM4uteGiven = TRUE; break; case BSIM4_MOD_UCSTE : mod->BSIM4ucste = value->rValue; mod->BSIM4ucsteGiven = TRUE; break; case BSIM4_MOD_UD: mod->BSIM4ud = value->rValue; mod->BSIM4udGiven = TRUE; break; case BSIM4_MOD_UD1: mod->BSIM4ud1 = value->rValue; mod->BSIM4ud1Given = TRUE; break; case BSIM4_MOD_UP: mod->BSIM4up = value->rValue; mod->BSIM4upGiven = TRUE; break; case BSIM4_MOD_LP: mod->BSIM4lp = value->rValue; mod->BSIM4lpGiven = TRUE; break; case BSIM4_MOD_LUD: mod->BSIM4lud = value->rValue; mod->BSIM4ludGiven = TRUE; break; case BSIM4_MOD_LUD1: mod->BSIM4lud1 = value->rValue; mod->BSIM4lud1Given = TRUE; break; case BSIM4_MOD_LUP: mod->BSIM4lup = value->rValue; mod->BSIM4lupGiven = TRUE; break; case BSIM4_MOD_LLP: mod->BSIM4llp = value->rValue; mod->BSIM4llpGiven = TRUE; break; case BSIM4_MOD_WUD: mod->BSIM4wud = value->rValue; mod->BSIM4wudGiven = TRUE; break; case BSIM4_MOD_WUD1: mod->BSIM4wud1 = value->rValue; mod->BSIM4wud1Given = TRUE; break; case BSIM4_MOD_WUP: mod->BSIM4wup = value->rValue; mod->BSIM4wupGiven = TRUE; break; case BSIM4_MOD_WLP: mod->BSIM4wlp = value->rValue; mod->BSIM4wlpGiven = TRUE; break; case BSIM4_MOD_PUD: mod->BSIM4pud = value->rValue; mod->BSIM4pudGiven = TRUE; break; case BSIM4_MOD_PUD1: mod->BSIM4pud1 = value->rValue; mod->BSIM4pud1Given = TRUE; break; case BSIM4_MOD_PUP: mod->BSIM4pup = value->rValue; mod->BSIM4pupGiven = TRUE; break; case BSIM4_MOD_PLP: mod->BSIM4plp = value->rValue; mod->BSIM4plpGiven = TRUE; break; case BSIM4_MOD_VOFF: mod->BSIM4voff = value->rValue; mod->BSIM4voffGiven = TRUE; break; case BSIM4_MOD_TVOFF: mod->BSIM4tvoff = value->rValue; mod->BSIM4tvoffGiven = TRUE; break; case BSIM4_MOD_TNFACTOR: /* v4.7 temp dep of leakage current */ mod->BSIM4tnfactor = value->rValue; mod->BSIM4tnfactorGiven = TRUE; break; case BSIM4_MOD_TETA0: /* v4.7 temp dep of leakage current */ mod->BSIM4teta0 = value->rValue; mod->BSIM4teta0Given = TRUE; break; case BSIM4_MOD_TVOFFCV: /* v4.7 temp dep of leakage current */ mod->BSIM4tvoffcv = value->rValue; mod->BSIM4tvoffcvGiven = TRUE; break; case BSIM4_MOD_VOFFL: mod->BSIM4voffl = value->rValue; mod->BSIM4vofflGiven = TRUE; break; case BSIM4_MOD_VOFFCVL: mod->BSIM4voffcvl = value->rValue; mod->BSIM4voffcvlGiven = TRUE; break; case BSIM4_MOD_MINV: mod->BSIM4minv = value->rValue; mod->BSIM4minvGiven = TRUE; break; case BSIM4_MOD_MINVCV: mod->BSIM4minvcv = value->rValue; mod->BSIM4minvcvGiven = TRUE; break; case BSIM4_MOD_FPROUT: mod->BSIM4fprout = value->rValue; mod->BSIM4fproutGiven = TRUE; break; case BSIM4_MOD_PDITS: mod->BSIM4pdits = value->rValue; mod->BSIM4pditsGiven = TRUE; break; case BSIM4_MOD_PDITSD: mod->BSIM4pditsd = value->rValue; mod->BSIM4pditsdGiven = TRUE; break; case BSIM4_MOD_PDITSL: mod->BSIM4pditsl = value->rValue; mod->BSIM4pditslGiven = TRUE; break; case BSIM4_MOD_DELTA : mod->BSIM4delta = value->rValue; mod->BSIM4deltaGiven = TRUE; break; case BSIM4_MOD_RDSW: mod->BSIM4rdsw = value->rValue; mod->BSIM4rdswGiven = TRUE; break; case BSIM4_MOD_RDSWMIN: mod->BSIM4rdswmin = value->rValue; mod->BSIM4rdswminGiven = TRUE; break; case BSIM4_MOD_RDWMIN: mod->BSIM4rdwmin = value->rValue; mod->BSIM4rdwminGiven = TRUE; break; case BSIM4_MOD_RSWMIN: mod->BSIM4rswmin = value->rValue; mod->BSIM4rswminGiven = TRUE; break; case BSIM4_MOD_RDW: mod->BSIM4rdw = value->rValue; mod->BSIM4rdwGiven = TRUE; break; case BSIM4_MOD_RSW: mod->BSIM4rsw = value->rValue; mod->BSIM4rswGiven = TRUE; break; case BSIM4_MOD_PRWG: mod->BSIM4prwg = value->rValue; mod->BSIM4prwgGiven = TRUE; break; case BSIM4_MOD_PRWB: mod->BSIM4prwb = value->rValue; mod->BSIM4prwbGiven = TRUE; break; case BSIM4_MOD_PRT: mod->BSIM4prt = value->rValue; mod->BSIM4prtGiven = TRUE; break; case BSIM4_MOD_ETA0: mod->BSIM4eta0 = value->rValue; mod->BSIM4eta0Given = TRUE; break; case BSIM4_MOD_ETAB: mod->BSIM4etab = value->rValue; mod->BSIM4etabGiven = TRUE; break; case BSIM4_MOD_PCLM: mod->BSIM4pclm = value->rValue; mod->BSIM4pclmGiven = TRUE; break; case BSIM4_MOD_PDIBL1: mod->BSIM4pdibl1 = value->rValue; mod->BSIM4pdibl1Given = TRUE; break; case BSIM4_MOD_PDIBL2: mod->BSIM4pdibl2 = value->rValue; mod->BSIM4pdibl2Given = TRUE; break; case BSIM4_MOD_PDIBLB: mod->BSIM4pdiblb = value->rValue; mod->BSIM4pdiblbGiven = TRUE; break; case BSIM4_MOD_PSCBE1: mod->BSIM4pscbe1 = value->rValue; mod->BSIM4pscbe1Given = TRUE; break; case BSIM4_MOD_PSCBE2: mod->BSIM4pscbe2 = value->rValue; mod->BSIM4pscbe2Given = TRUE; break; case BSIM4_MOD_PVAG: mod->BSIM4pvag = value->rValue; mod->BSIM4pvagGiven = TRUE; break; case BSIM4_MOD_WR : mod->BSIM4wr = value->rValue; mod->BSIM4wrGiven = TRUE; break; case BSIM4_MOD_DWG : mod->BSIM4dwg = value->rValue; mod->BSIM4dwgGiven = TRUE; break; case BSIM4_MOD_DWB : mod->BSIM4dwb = value->rValue; mod->BSIM4dwbGiven = TRUE; break; case BSIM4_MOD_B0 : mod->BSIM4b0 = value->rValue; mod->BSIM4b0Given = TRUE; break; case BSIM4_MOD_B1 : mod->BSIM4b1 = value->rValue; mod->BSIM4b1Given = TRUE; break; case BSIM4_MOD_ALPHA0 : mod->BSIM4alpha0 = value->rValue; mod->BSIM4alpha0Given = TRUE; break; case BSIM4_MOD_ALPHA1 : mod->BSIM4alpha1 = value->rValue; mod->BSIM4alpha1Given = TRUE; break; case BSIM4_MOD_PHIN : mod->BSIM4phin = value->rValue; mod->BSIM4phinGiven = TRUE; break; case BSIM4_MOD_AGIDL : mod->BSIM4agidl = value->rValue; mod->BSIM4agidlGiven = TRUE; break; case BSIM4_MOD_BGIDL : mod->BSIM4bgidl = value->rValue; mod->BSIM4bgidlGiven = TRUE; break; case BSIM4_MOD_CGIDL : mod->BSIM4cgidl = value->rValue; mod->BSIM4cgidlGiven = TRUE; break; case BSIM4_MOD_EGIDL : mod->BSIM4egidl = value->rValue; mod->BSIM4egidlGiven = TRUE; break; case BSIM4_MOD_FGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4fgidl = value->rValue; mod->BSIM4fgidlGiven = TRUE; break; case BSIM4_MOD_KGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4kgidl = value->rValue; mod->BSIM4kgidlGiven = TRUE; break; case BSIM4_MOD_RGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4rgidl = value->rValue; mod->BSIM4rgidlGiven = TRUE; break; case BSIM4_MOD_AGISL : mod->BSIM4agisl = value->rValue; mod->BSIM4agislGiven = TRUE; break; case BSIM4_MOD_BGISL : mod->BSIM4bgisl = value->rValue; mod->BSIM4bgislGiven = TRUE; break; case BSIM4_MOD_CGISL : mod->BSIM4cgisl = value->rValue; mod->BSIM4cgislGiven = TRUE; break; case BSIM4_MOD_EGISL : mod->BSIM4egisl = value->rValue; mod->BSIM4egislGiven = TRUE; break; case BSIM4_MOD_FGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4fgisl = value->rValue; mod->BSIM4fgislGiven = TRUE; break; case BSIM4_MOD_KGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4kgisl = value->rValue; mod->BSIM4kgislGiven = TRUE; break; case BSIM4_MOD_RGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4rgisl = value->rValue; mod->BSIM4rgislGiven = TRUE; break; case BSIM4_MOD_AIGC : mod->BSIM4aigc = value->rValue; mod->BSIM4aigcGiven = TRUE; break; case BSIM4_MOD_BIGC : mod->BSIM4bigc = value->rValue; mod->BSIM4bigcGiven = TRUE; break; case BSIM4_MOD_CIGC : mod->BSIM4cigc = value->rValue; mod->BSIM4cigcGiven = TRUE; break; case BSIM4_MOD_AIGSD : mod->BSIM4aigsd = value->rValue; mod->BSIM4aigsdGiven = TRUE; break; case BSIM4_MOD_BIGSD : mod->BSIM4bigsd = value->rValue; mod->BSIM4bigsdGiven = TRUE; break; case BSIM4_MOD_CIGSD : mod->BSIM4cigsd = value->rValue; mod->BSIM4cigsdGiven = TRUE; break; case BSIM4_MOD_AIGS : mod->BSIM4aigs = value->rValue; mod->BSIM4aigsGiven = TRUE; break; case BSIM4_MOD_BIGS : mod->BSIM4bigs = value->rValue; mod->BSIM4bigsGiven = TRUE; break; case BSIM4_MOD_CIGS : mod->BSIM4cigs = value->rValue; mod->BSIM4cigsGiven = TRUE; break; case BSIM4_MOD_AIGD : mod->BSIM4aigd = value->rValue; mod->BSIM4aigdGiven = TRUE; break; case BSIM4_MOD_BIGD : mod->BSIM4bigd = value->rValue; mod->BSIM4bigdGiven = TRUE; break; case BSIM4_MOD_CIGD : mod->BSIM4cigd = value->rValue; mod->BSIM4cigdGiven = TRUE; break; case BSIM4_MOD_AIGBACC : mod->BSIM4aigbacc = value->rValue; mod->BSIM4aigbaccGiven = TRUE; break; case BSIM4_MOD_BIGBACC : mod->BSIM4bigbacc = value->rValue; mod->BSIM4bigbaccGiven = TRUE; break; case BSIM4_MOD_CIGBACC : mod->BSIM4cigbacc = value->rValue; mod->BSIM4cigbaccGiven = TRUE; break; case BSIM4_MOD_AIGBINV : mod->BSIM4aigbinv = value->rValue; mod->BSIM4aigbinvGiven = TRUE; break; case BSIM4_MOD_BIGBINV : mod->BSIM4bigbinv = value->rValue; mod->BSIM4bigbinvGiven = TRUE; break; case BSIM4_MOD_CIGBINV : mod->BSIM4cigbinv = value->rValue; mod->BSIM4cigbinvGiven = TRUE; break; case BSIM4_MOD_NIGC : mod->BSIM4nigc = value->rValue; mod->BSIM4nigcGiven = TRUE; break; case BSIM4_MOD_NIGBINV : mod->BSIM4nigbinv = value->rValue; mod->BSIM4nigbinvGiven = TRUE; break; case BSIM4_MOD_NIGBACC : mod->BSIM4nigbacc = value->rValue; mod->BSIM4nigbaccGiven = TRUE; break; case BSIM4_MOD_NTOX : mod->BSIM4ntox = value->rValue; mod->BSIM4ntoxGiven = TRUE; break; case BSIM4_MOD_EIGBINV : mod->BSIM4eigbinv = value->rValue; mod->BSIM4eigbinvGiven = TRUE; break; case BSIM4_MOD_PIGCD : mod->BSIM4pigcd = value->rValue; mod->BSIM4pigcdGiven = TRUE; break; case BSIM4_MOD_POXEDGE : mod->BSIM4poxedge = value->rValue; mod->BSIM4poxedgeGiven = TRUE; break; case BSIM4_MOD_XRCRG1 : mod->BSIM4xrcrg1 = value->rValue; mod->BSIM4xrcrg1Given = TRUE; break; case BSIM4_MOD_XRCRG2 : mod->BSIM4xrcrg2 = value->rValue; mod->BSIM4xrcrg2Given = TRUE; break; case BSIM4_MOD_LAMBDA : mod->BSIM4lambda = value->rValue; mod->BSIM4lambdaGiven = TRUE; break; case BSIM4_MOD_VTL : mod->BSIM4vtl = value->rValue; mod->BSIM4vtlGiven = TRUE; break; case BSIM4_MOD_XN: mod->BSIM4xn = value->rValue; mod->BSIM4xnGiven = TRUE; break; case BSIM4_MOD_LC: mod->BSIM4lc = value->rValue; mod->BSIM4lcGiven = TRUE; break; case BSIM4_MOD_TNOIA : mod->BSIM4tnoia = value->rValue; mod->BSIM4tnoiaGiven = TRUE; break; case BSIM4_MOD_TNOIB : mod->BSIM4tnoib = value->rValue; mod->BSIM4tnoibGiven = TRUE; break; case BSIM4_MOD_TNOIC : mod->BSIM4tnoic = value->rValue; mod->BSIM4tnoicGiven = TRUE; break; case BSIM4_MOD_RNOIA : mod->BSIM4rnoia = value->rValue; mod->BSIM4rnoiaGiven = TRUE; break; case BSIM4_MOD_RNOIB : mod->BSIM4rnoib = value->rValue; mod->BSIM4rnoibGiven = TRUE; break; case BSIM4_MOD_RNOIC : mod->BSIM4rnoic = value->rValue; mod->BSIM4rnoicGiven = TRUE; break; case BSIM4_MOD_NTNOI : mod->BSIM4ntnoi = value->rValue; mod->BSIM4ntnoiGiven = TRUE; break; case BSIM4_MOD_VFBSDOFF: mod->BSIM4vfbsdoff = value->rValue; mod->BSIM4vfbsdoffGiven = TRUE; break; case BSIM4_MOD_TVFBSDOFF: mod->BSIM4tvfbsdoff = value->rValue; mod->BSIM4tvfbsdoffGiven = TRUE; break; case BSIM4_MOD_LINTNOI: mod->BSIM4lintnoi = value->rValue; mod->BSIM4lintnoiGiven = TRUE; break; /* stress effect */ case BSIM4_MOD_SAREF : mod->BSIM4saref = value->rValue; mod->BSIM4sarefGiven = TRUE; break; case BSIM4_MOD_SBREF : mod->BSIM4sbref = value->rValue; mod->BSIM4sbrefGiven = TRUE; break; case BSIM4_MOD_WLOD : mod->BSIM4wlod = value->rValue; mod->BSIM4wlodGiven = TRUE; break; case BSIM4_MOD_KU0 : mod->BSIM4ku0 = value->rValue; mod->BSIM4ku0Given = TRUE; break; case BSIM4_MOD_KVSAT : mod->BSIM4kvsat = value->rValue; mod->BSIM4kvsatGiven = TRUE; break; case BSIM4_MOD_KVTH0 : mod->BSIM4kvth0 = value->rValue; mod->BSIM4kvth0Given = TRUE; break; case BSIM4_MOD_TKU0 : mod->BSIM4tku0 = value->rValue; mod->BSIM4tku0Given = TRUE; break; case BSIM4_MOD_LLODKU0 : mod->BSIM4llodku0 = value->rValue; mod->BSIM4llodku0Given = TRUE; break; case BSIM4_MOD_WLODKU0 : mod->BSIM4wlodku0 = value->rValue; mod->BSIM4wlodku0Given = TRUE; break; case BSIM4_MOD_LLODVTH : mod->BSIM4llodvth = value->rValue; mod->BSIM4llodvthGiven = TRUE; break; case BSIM4_MOD_WLODVTH : mod->BSIM4wlodvth = value->rValue; mod->BSIM4wlodvthGiven = TRUE; break; case BSIM4_MOD_LKU0 : mod->BSIM4lku0 = value->rValue; mod->BSIM4lku0Given = TRUE; break; case BSIM4_MOD_WKU0 : mod->BSIM4wku0 = value->rValue; mod->BSIM4wku0Given = TRUE; break; case BSIM4_MOD_PKU0 : mod->BSIM4pku0 = value->rValue; mod->BSIM4pku0Given = TRUE; break; case BSIM4_MOD_LKVTH0 : mod->BSIM4lkvth0 = value->rValue; mod->BSIM4lkvth0Given = TRUE; break; case BSIM4_MOD_WKVTH0 : mod->BSIM4wkvth0 = value->rValue; mod->BSIM4wkvth0Given = TRUE; break; case BSIM4_MOD_PKVTH0 : mod->BSIM4pkvth0 = value->rValue; mod->BSIM4pkvth0Given = TRUE; break; case BSIM4_MOD_STK2 : mod->BSIM4stk2 = value->rValue; mod->BSIM4stk2Given = TRUE; break; case BSIM4_MOD_LODK2 : mod->BSIM4lodk2 = value->rValue; mod->BSIM4lodk2Given = TRUE; break; case BSIM4_MOD_STETA0 : mod->BSIM4steta0 = value->rValue; mod->BSIM4steta0Given = TRUE; break; case BSIM4_MOD_LODETA0 : mod->BSIM4lodeta0 = value->rValue; mod->BSIM4lodeta0Given = TRUE; break; case BSIM4_MOD_WEB : mod->BSIM4web = value->rValue; mod->BSIM4webGiven = TRUE; break; case BSIM4_MOD_WEC : mod->BSIM4wec = value->rValue; mod->BSIM4wecGiven = TRUE; break; case BSIM4_MOD_KVTH0WE : mod->BSIM4kvth0we = value->rValue; mod->BSIM4kvth0weGiven = TRUE; break; case BSIM4_MOD_K2WE : mod->BSIM4k2we = value->rValue; mod->BSIM4k2weGiven = TRUE; break; case BSIM4_MOD_KU0WE : mod->BSIM4ku0we = value->rValue; mod->BSIM4ku0weGiven = TRUE; break; case BSIM4_MOD_SCREF : mod->BSIM4scref = value->rValue; mod->BSIM4screfGiven = TRUE; break; case BSIM4_MOD_WPEMOD : mod->BSIM4wpemod = value->rValue; mod->BSIM4wpemodGiven = TRUE; break; case BSIM4_MOD_LKVTH0WE : mod->BSIM4lkvth0we = value->rValue; mod->BSIM4lkvth0weGiven = TRUE; break; case BSIM4_MOD_LK2WE : mod->BSIM4lk2we = value->rValue; mod->BSIM4lk2weGiven = TRUE; break; case BSIM4_MOD_LKU0WE : mod->BSIM4lku0we = value->rValue; mod->BSIM4lku0weGiven = TRUE; break; case BSIM4_MOD_WKVTH0WE : mod->BSIM4wkvth0we = value->rValue; mod->BSIM4wkvth0weGiven = TRUE; break; case BSIM4_MOD_WK2WE : mod->BSIM4wk2we = value->rValue; mod->BSIM4wk2weGiven = TRUE; break; case BSIM4_MOD_WKU0WE : mod->BSIM4wku0we = value->rValue; mod->BSIM4wku0weGiven = TRUE; break; case BSIM4_MOD_PKVTH0WE : mod->BSIM4pkvth0we = value->rValue; mod->BSIM4pkvth0weGiven = TRUE; break; case BSIM4_MOD_PK2WE : mod->BSIM4pk2we = value->rValue; mod->BSIM4pk2weGiven = TRUE; break; case BSIM4_MOD_PKU0WE : mod->BSIM4pku0we = value->rValue; mod->BSIM4pku0weGiven = TRUE; break; case BSIM4_MOD_BETA0 : mod->BSIM4beta0 = value->rValue; mod->BSIM4beta0Given = TRUE; break; case BSIM4_MOD_IJTHDFWD : mod->BSIM4ijthdfwd = value->rValue; mod->BSIM4ijthdfwdGiven = TRUE; break; case BSIM4_MOD_IJTHSFWD : mod->BSIM4ijthsfwd = value->rValue; mod->BSIM4ijthsfwdGiven = TRUE; break; case BSIM4_MOD_IJTHDREV : mod->BSIM4ijthdrev = value->rValue; mod->BSIM4ijthdrevGiven = TRUE; break; case BSIM4_MOD_IJTHSREV : mod->BSIM4ijthsrev = value->rValue; mod->BSIM4ijthsrevGiven = TRUE; break; case BSIM4_MOD_XJBVD : mod->BSIM4xjbvd = value->rValue; mod->BSIM4xjbvdGiven = TRUE; break; case BSIM4_MOD_XJBVS : mod->BSIM4xjbvs = value->rValue; mod->BSIM4xjbvsGiven = TRUE; break; case BSIM4_MOD_BVD : mod->BSIM4bvd = value->rValue; mod->BSIM4bvdGiven = TRUE; break; case BSIM4_MOD_BVS : mod->BSIM4bvs = value->rValue; mod->BSIM4bvsGiven = TRUE; break; /* reverse diode */ case BSIM4_MOD_JTSS : mod->BSIM4jtss = value->rValue; mod->BSIM4jtssGiven = TRUE; break; case BSIM4_MOD_JTSD : mod->BSIM4jtsd = value->rValue; mod->BSIM4jtsdGiven = TRUE; break; case BSIM4_MOD_JTSSWS : mod->BSIM4jtssws = value->rValue; mod->BSIM4jtsswsGiven = TRUE; break; case BSIM4_MOD_JTSSWD : mod->BSIM4jtsswd = value->rValue; mod->BSIM4jtsswdGiven = TRUE; break; case BSIM4_MOD_JTSSWGS : mod->BSIM4jtsswgs = value->rValue; mod->BSIM4jtsswgsGiven = TRUE; break; case BSIM4_MOD_JTSSWGD : mod->BSIM4jtsswgd = value->rValue; mod->BSIM4jtsswgdGiven = TRUE; break; case BSIM4_MOD_JTWEFF : mod->BSIM4jtweff = value->rValue; mod->BSIM4jtweffGiven = TRUE; break; case BSIM4_MOD_NJTS : mod->BSIM4njts = value->rValue; mod->BSIM4njtsGiven = TRUE; break; case BSIM4_MOD_NJTSSW : mod->BSIM4njtssw = value->rValue; mod->BSIM4njtsswGiven = TRUE; break; case BSIM4_MOD_NJTSSWG : mod->BSIM4njtsswg = value->rValue; mod->BSIM4njtsswgGiven = TRUE; break; case BSIM4_MOD_NJTSD : mod->BSIM4njtsd = value->rValue; mod->BSIM4njtsdGiven = TRUE; break; case BSIM4_MOD_NJTSSWD : mod->BSIM4njtsswd = value->rValue; mod->BSIM4njtsswdGiven = TRUE; break; case BSIM4_MOD_NJTSSWGD : mod->BSIM4njtsswgd = value->rValue; mod->BSIM4njtsswgdGiven = TRUE; break; case BSIM4_MOD_XTSS : mod->BSIM4xtss = value->rValue; mod->BSIM4xtssGiven = TRUE; break; case BSIM4_MOD_XTSD : mod->BSIM4xtsd = value->rValue; mod->BSIM4xtsdGiven = TRUE; break; case BSIM4_MOD_XTSSWS : mod->BSIM4xtssws = value->rValue; mod->BSIM4xtsswsGiven = TRUE; break; case BSIM4_MOD_XTSSWD : mod->BSIM4xtsswd = value->rValue; mod->BSIM4xtsswdGiven = TRUE; break; case BSIM4_MOD_XTSSWGS : mod->BSIM4xtsswgs = value->rValue; mod->BSIM4xtsswgsGiven = TRUE; break; case BSIM4_MOD_XTSSWGD : mod->BSIM4xtsswgd = value->rValue; mod->BSIM4xtsswgdGiven = TRUE; break; case BSIM4_MOD_TNJTS : mod->BSIM4tnjts = value->rValue; mod->BSIM4tnjtsGiven = TRUE; break; case BSIM4_MOD_TNJTSSW : mod->BSIM4tnjtssw = value->rValue; mod->BSIM4tnjtsswGiven = TRUE; break; case BSIM4_MOD_TNJTSSWG : mod->BSIM4tnjtsswg = value->rValue; mod->BSIM4tnjtsswgGiven = TRUE; break; case BSIM4_MOD_TNJTSD : mod->BSIM4tnjtsd = value->rValue; mod->BSIM4tnjtsdGiven = TRUE; break; case BSIM4_MOD_TNJTSSWD : mod->BSIM4tnjtsswd = value->rValue; mod->BSIM4tnjtsswdGiven = TRUE; break; case BSIM4_MOD_TNJTSSWGD : mod->BSIM4tnjtsswgd = value->rValue; mod->BSIM4tnjtsswgdGiven = TRUE; break; case BSIM4_MOD_VTSS : mod->BSIM4vtss = value->rValue; mod->BSIM4vtssGiven = TRUE; break; case BSIM4_MOD_VTSD : mod->BSIM4vtsd = value->rValue; mod->BSIM4vtsdGiven = TRUE; break; case BSIM4_MOD_VTSSWS : mod->BSIM4vtssws = value->rValue; mod->BSIM4vtsswsGiven = TRUE; break; case BSIM4_MOD_VTSSWD : mod->BSIM4vtsswd = value->rValue; mod->BSIM4vtsswdGiven = TRUE; break; case BSIM4_MOD_VTSSWGS : mod->BSIM4vtsswgs = value->rValue; mod->BSIM4vtsswgsGiven = TRUE; break; case BSIM4_MOD_VTSSWGD : mod->BSIM4vtsswgd = value->rValue; mod->BSIM4vtsswgdGiven = TRUE; break; case BSIM4_MOD_VFB : mod->BSIM4vfb = value->rValue; mod->BSIM4vfbGiven = TRUE; break; case BSIM4_MOD_GBMIN : mod->BSIM4gbmin = value->rValue; mod->BSIM4gbminGiven = TRUE; break; case BSIM4_MOD_RBDB : mod->BSIM4rbdb = value->rValue; mod->BSIM4rbdbGiven = TRUE; break; case BSIM4_MOD_RBPB : mod->BSIM4rbpb = value->rValue; mod->BSIM4rbpbGiven = TRUE; break; case BSIM4_MOD_RBSB : mod->BSIM4rbsb = value->rValue; mod->BSIM4rbsbGiven = TRUE; break; case BSIM4_MOD_RBPS : mod->BSIM4rbps = value->rValue; mod->BSIM4rbpsGiven = TRUE; break; case BSIM4_MOD_RBPD : mod->BSIM4rbpd = value->rValue; mod->BSIM4rbpdGiven = TRUE; break; case BSIM4_MOD_RBPS0 : mod->BSIM4rbps0 = value->rValue; mod->BSIM4rbps0Given = TRUE; break; case BSIM4_MOD_RBPSL : mod->BSIM4rbpsl = value->rValue; mod->BSIM4rbpslGiven = TRUE; break; case BSIM4_MOD_RBPSW : mod->BSIM4rbpsw = value->rValue; mod->BSIM4rbpswGiven = TRUE; break; case BSIM4_MOD_RBPSNF : mod->BSIM4rbpsnf = value->rValue; mod->BSIM4rbpsnfGiven = TRUE; break; case BSIM4_MOD_RBPD0 : mod->BSIM4rbpd0 = value->rValue; mod->BSIM4rbpd0Given = TRUE; break; case BSIM4_MOD_RBPDL : mod->BSIM4rbpdl = value->rValue; mod->BSIM4rbpdlGiven = TRUE; break; case BSIM4_MOD_RBPDW : mod->BSIM4rbpdw = value->rValue; mod->BSIM4rbpdwGiven = TRUE; break; case BSIM4_MOD_RBPDNF : mod->BSIM4rbpdnf = value->rValue; mod->BSIM4rbpdnfGiven = TRUE; break; case BSIM4_MOD_RBPBX0 : mod->BSIM4rbpbx0 = value->rValue; mod->BSIM4rbpbx0Given = TRUE; break; case BSIM4_MOD_RBPBXL : mod->BSIM4rbpbxl = value->rValue; mod->BSIM4rbpbxlGiven = TRUE; break; case BSIM4_MOD_RBPBXW : mod->BSIM4rbpbxw = value->rValue; mod->BSIM4rbpbxwGiven = TRUE; break; case BSIM4_MOD_RBPBXNF : mod->BSIM4rbpbxnf = value->rValue; mod->BSIM4rbpbxnfGiven = TRUE; break; case BSIM4_MOD_RBPBY0 : mod->BSIM4rbpby0 = value->rValue; mod->BSIM4rbpby0Given = TRUE; break; case BSIM4_MOD_RBPBYL : mod->BSIM4rbpbyl = value->rValue; mod->BSIM4rbpbylGiven = TRUE; break; case BSIM4_MOD_RBPBYW : mod->BSIM4rbpbyw = value->rValue; mod->BSIM4rbpbywGiven = TRUE; break; case BSIM4_MOD_RBPBYNF : mod->BSIM4rbpbynf = value->rValue; mod->BSIM4rbpbynfGiven = TRUE; break; case BSIM4_MOD_RBSBX0 : mod->BSIM4rbsbx0 = value->rValue; mod->BSIM4rbsbx0Given = TRUE; break; case BSIM4_MOD_RBSBY0 : mod->BSIM4rbsby0 = value->rValue; mod->BSIM4rbsby0Given = TRUE; break; case BSIM4_MOD_RBDBX0 : mod->BSIM4rbdbx0 = value->rValue; mod->BSIM4rbdbx0Given = TRUE; break; case BSIM4_MOD_RBDBY0 : mod->BSIM4rbdby0 = value->rValue; mod->BSIM4rbdby0Given = TRUE; break; case BSIM4_MOD_RBSDBXL : mod->BSIM4rbsdbxl = value->rValue; mod->BSIM4rbsdbxlGiven = TRUE; break; case BSIM4_MOD_RBSDBXW : mod->BSIM4rbsdbxw = value->rValue; mod->BSIM4rbsdbxwGiven = TRUE; break; case BSIM4_MOD_RBSDBXNF : mod->BSIM4rbsdbxnf = value->rValue; mod->BSIM4rbsdbxnfGiven = TRUE; break; case BSIM4_MOD_RBSDBYL : mod->BSIM4rbsdbyl = value->rValue; mod->BSIM4rbsdbylGiven = TRUE; break; case BSIM4_MOD_RBSDBYW : mod->BSIM4rbsdbyw = value->rValue; mod->BSIM4rbsdbywGiven = TRUE; break; case BSIM4_MOD_RBSDBYNF : mod->BSIM4rbsdbynf = value->rValue; mod->BSIM4rbsdbynfGiven = TRUE; break; case BSIM4_MOD_CGSL : mod->BSIM4cgsl = value->rValue; mod->BSIM4cgslGiven = TRUE; break; case BSIM4_MOD_CGDL : mod->BSIM4cgdl = value->rValue; mod->BSIM4cgdlGiven = TRUE; break; case BSIM4_MOD_CKAPPAS : mod->BSIM4ckappas = value->rValue; mod->BSIM4ckappasGiven = TRUE; break; case BSIM4_MOD_CKAPPAD : mod->BSIM4ckappad = value->rValue; mod->BSIM4ckappadGiven = TRUE; break; case BSIM4_MOD_CF : mod->BSIM4cf = value->rValue; mod->BSIM4cfGiven = TRUE; break; case BSIM4_MOD_CLC : mod->BSIM4clc = value->rValue; mod->BSIM4clcGiven = TRUE; break; case BSIM4_MOD_CLE : mod->BSIM4cle = value->rValue; mod->BSIM4cleGiven = TRUE; break; case BSIM4_MOD_DWC : mod->BSIM4dwc = value->rValue; mod->BSIM4dwcGiven = TRUE; break; case BSIM4_MOD_DLC : mod->BSIM4dlc = value->rValue; mod->BSIM4dlcGiven = TRUE; break; case BSIM4_MOD_XW : mod->BSIM4xw = value->rValue; mod->BSIM4xwGiven = TRUE; break; case BSIM4_MOD_XL : mod->BSIM4xl = value->rValue; mod->BSIM4xlGiven = TRUE; break; case BSIM4_MOD_DLCIG : mod->BSIM4dlcig = value->rValue; mod->BSIM4dlcigGiven = TRUE; break; case BSIM4_MOD_DLCIGD : mod->BSIM4dlcigd = value->rValue; mod->BSIM4dlcigdGiven = TRUE; break; case BSIM4_MOD_DWJ : mod->BSIM4dwj = value->rValue; mod->BSIM4dwjGiven = TRUE; break; case BSIM4_MOD_VFBCV : mod->BSIM4vfbcv = value->rValue; mod->BSIM4vfbcvGiven = TRUE; break; case BSIM4_MOD_ACDE : mod->BSIM4acde = value->rValue; mod->BSIM4acdeGiven = TRUE; break; case BSIM4_MOD_MOIN : mod->BSIM4moin = value->rValue; mod->BSIM4moinGiven = TRUE; break; case BSIM4_MOD_NOFF : mod->BSIM4noff = value->rValue; mod->BSIM4noffGiven = TRUE; break; case BSIM4_MOD_VOFFCV : mod->BSIM4voffcv = value->rValue; mod->BSIM4voffcvGiven = TRUE; break; case BSIM4_MOD_DMCG : mod->BSIM4dmcg = value->rValue; mod->BSIM4dmcgGiven = TRUE; break; case BSIM4_MOD_DMCI : mod->BSIM4dmci = value->rValue; mod->BSIM4dmciGiven = TRUE; break; case BSIM4_MOD_DMDG : mod->BSIM4dmdg = value->rValue; mod->BSIM4dmdgGiven = TRUE; break; case BSIM4_MOD_DMCGT : mod->BSIM4dmcgt = value->rValue; mod->BSIM4dmcgtGiven = TRUE; break; case BSIM4_MOD_XGW : mod->BSIM4xgw = value->rValue; mod->BSIM4xgwGiven = TRUE; break; case BSIM4_MOD_XGL : mod->BSIM4xgl = value->rValue; mod->BSIM4xglGiven = TRUE; break; case BSIM4_MOD_RSHG : mod->BSIM4rshg = value->rValue; mod->BSIM4rshgGiven = TRUE; break; case BSIM4_MOD_NGCON : mod->BSIM4ngcon = value->rValue; mod->BSIM4ngconGiven = TRUE; break; case BSIM4_MOD_TCJ : mod->BSIM4tcj = value->rValue; mod->BSIM4tcjGiven = TRUE; break; case BSIM4_MOD_TPB : mod->BSIM4tpb = value->rValue; mod->BSIM4tpbGiven = TRUE; break; case BSIM4_MOD_TCJSW : mod->BSIM4tcjsw = value->rValue; mod->BSIM4tcjswGiven = TRUE; break; case BSIM4_MOD_TPBSW : mod->BSIM4tpbsw = value->rValue; mod->BSIM4tpbswGiven = TRUE; break; case BSIM4_MOD_TCJSWG : mod->BSIM4tcjswg = value->rValue; mod->BSIM4tcjswgGiven = TRUE; break; case BSIM4_MOD_TPBSWG : mod->BSIM4tpbswg = value->rValue; mod->BSIM4tpbswgGiven = TRUE; break; /* Length dependence */ case BSIM4_MOD_LCDSC : mod->BSIM4lcdsc = value->rValue; mod->BSIM4lcdscGiven = TRUE; break; case BSIM4_MOD_LCDSCB : mod->BSIM4lcdscb = value->rValue; mod->BSIM4lcdscbGiven = TRUE; break; case BSIM4_MOD_LCDSCD : mod->BSIM4lcdscd = value->rValue; mod->BSIM4lcdscdGiven = TRUE; break; case BSIM4_MOD_LCIT : mod->BSIM4lcit = value->rValue; mod->BSIM4lcitGiven = TRUE; break; case BSIM4_MOD_LNFACTOR : mod->BSIM4lnfactor = value->rValue; mod->BSIM4lnfactorGiven = TRUE; break; case BSIM4_MOD_LXJ: mod->BSIM4lxj = value->rValue; mod->BSIM4lxjGiven = TRUE; break; case BSIM4_MOD_LVSAT: mod->BSIM4lvsat = value->rValue; mod->BSIM4lvsatGiven = TRUE; break; case BSIM4_MOD_LA0: mod->BSIM4la0 = value->rValue; mod->BSIM4la0Given = TRUE; break; case BSIM4_MOD_LAGS: mod->BSIM4lags = value->rValue; mod->BSIM4lagsGiven = TRUE; break; case BSIM4_MOD_LA1: mod->BSIM4la1 = value->rValue; mod->BSIM4la1Given = TRUE; break; case BSIM4_MOD_LA2: mod->BSIM4la2 = value->rValue; mod->BSIM4la2Given = TRUE; break; case BSIM4_MOD_LAT: mod->BSIM4lat = value->rValue; mod->BSIM4latGiven = TRUE; break; case BSIM4_MOD_LKETA: mod->BSIM4lketa = value->rValue; mod->BSIM4lketaGiven = TRUE; break; case BSIM4_MOD_LNSUB: mod->BSIM4lnsub = value->rValue; mod->BSIM4lnsubGiven = TRUE; break; case BSIM4_MOD_LNDEP: mod->BSIM4lndep = value->rValue; mod->BSIM4lndepGiven = TRUE; if (mod->BSIM4lndep > 1.0e20) mod->BSIM4lndep *= 1.0e-6; break; case BSIM4_MOD_LNSD: mod->BSIM4lnsd = value->rValue; mod->BSIM4lnsdGiven = TRUE; if (mod->BSIM4lnsd > 1.0e23) mod->BSIM4lnsd *= 1.0e-6; break; case BSIM4_MOD_LNGATE: mod->BSIM4lngate = value->rValue; mod->BSIM4lngateGiven = TRUE; if (mod->BSIM4lngate > 1.0e23) mod->BSIM4lngate *= 1.0e-6; break; case BSIM4_MOD_LGAMMA1: mod->BSIM4lgamma1 = value->rValue; mod->BSIM4lgamma1Given = TRUE; break; case BSIM4_MOD_LGAMMA2: mod->BSIM4lgamma2 = value->rValue; mod->BSIM4lgamma2Given = TRUE; break; case BSIM4_MOD_LVBX: mod->BSIM4lvbx = value->rValue; mod->BSIM4lvbxGiven = TRUE; break; case BSIM4_MOD_LVBM: mod->BSIM4lvbm = value->rValue; mod->BSIM4lvbmGiven = TRUE; break; case BSIM4_MOD_LXT: mod->BSIM4lxt = value->rValue; mod->BSIM4lxtGiven = TRUE; break; case BSIM4_MOD_LK1: mod->BSIM4lk1 = value->rValue; mod->BSIM4lk1Given = TRUE; break; case BSIM4_MOD_LKT1: mod->BSIM4lkt1 = value->rValue; mod->BSIM4lkt1Given = TRUE; break; case BSIM4_MOD_LKT1L: mod->BSIM4lkt1l = value->rValue; mod->BSIM4lkt1lGiven = TRUE; break; case BSIM4_MOD_LKT2: mod->BSIM4lkt2 = value->rValue; mod->BSIM4lkt2Given = TRUE; break; case BSIM4_MOD_LK2: mod->BSIM4lk2 = value->rValue; mod->BSIM4lk2Given = TRUE; break; case BSIM4_MOD_LK3: mod->BSIM4lk3 = value->rValue; mod->BSIM4lk3Given = TRUE; break; case BSIM4_MOD_LK3B: mod->BSIM4lk3b = value->rValue; mod->BSIM4lk3bGiven = TRUE; break; case BSIM4_MOD_LLPE0: mod->BSIM4llpe0 = value->rValue; mod->BSIM4llpe0Given = TRUE; break; case BSIM4_MOD_LLPEB: mod->BSIM4llpeb = value->rValue; mod->BSIM4llpebGiven = TRUE; break; case BSIM4_MOD_LDVTP0: mod->BSIM4ldvtp0 = value->rValue; mod->BSIM4ldvtp0Given = TRUE; break; case BSIM4_MOD_LDVTP1: mod->BSIM4ldvtp1 = value->rValue; mod->BSIM4ldvtp1Given = TRUE; break; case BSIM4_MOD_LDVTP2: /* New DIBL/Rout */ mod->BSIM4ldvtp2 = value->rValue; mod->BSIM4ldvtp2Given = TRUE; break; case BSIM4_MOD_LDVTP3: mod->BSIM4ldvtp3 = value->rValue; mod->BSIM4ldvtp3Given = TRUE; break; case BSIM4_MOD_LDVTP4: mod->BSIM4ldvtp4 = value->rValue; mod->BSIM4ldvtp4Given = TRUE; break; case BSIM4_MOD_LDVTP5: mod->BSIM4ldvtp5 = value->rValue; mod->BSIM4ldvtp5Given = TRUE; break; case BSIM4_MOD_LW0: mod->BSIM4lw0 = value->rValue; mod->BSIM4lw0Given = TRUE; break; case BSIM4_MOD_LDVT0: mod->BSIM4ldvt0 = value->rValue; mod->BSIM4ldvt0Given = TRUE; break; case BSIM4_MOD_LDVT1: mod->BSIM4ldvt1 = value->rValue; mod->BSIM4ldvt1Given = TRUE; break; case BSIM4_MOD_LDVT2: mod->BSIM4ldvt2 = value->rValue; mod->BSIM4ldvt2Given = TRUE; break; case BSIM4_MOD_LDVT0W: mod->BSIM4ldvt0w = value->rValue; mod->BSIM4ldvt0wGiven = TRUE; break; case BSIM4_MOD_LDVT1W: mod->BSIM4ldvt1w = value->rValue; mod->BSIM4ldvt1wGiven = TRUE; break; case BSIM4_MOD_LDVT2W: mod->BSIM4ldvt2w = value->rValue; mod->BSIM4ldvt2wGiven = TRUE; break; case BSIM4_MOD_LDROUT: mod->BSIM4ldrout = value->rValue; mod->BSIM4ldroutGiven = TRUE; break; case BSIM4_MOD_LDSUB: mod->BSIM4ldsub = value->rValue; mod->BSIM4ldsubGiven = TRUE; break; case BSIM4_MOD_LVTH0: mod->BSIM4lvth0 = value->rValue; mod->BSIM4lvth0Given = TRUE; break; case BSIM4_MOD_LUA: mod->BSIM4lua = value->rValue; mod->BSIM4luaGiven = TRUE; break; case BSIM4_MOD_LUA1: mod->BSIM4lua1 = value->rValue; mod->BSIM4lua1Given = TRUE; break; case BSIM4_MOD_LUB: mod->BSIM4lub = value->rValue; mod->BSIM4lubGiven = TRUE; break; case BSIM4_MOD_LUB1: mod->BSIM4lub1 = value->rValue; mod->BSIM4lub1Given = TRUE; break; case BSIM4_MOD_LUC: mod->BSIM4luc = value->rValue; mod->BSIM4lucGiven = TRUE; break; case BSIM4_MOD_LUC1: mod->BSIM4luc1 = value->rValue; mod->BSIM4luc1Given = TRUE; break; case BSIM4_MOD_LU0 : mod->BSIM4lu0 = value->rValue; mod->BSIM4lu0Given = TRUE; break; case BSIM4_MOD_LUTE : mod->BSIM4lute = value->rValue; mod->BSIM4luteGiven = TRUE; break; case BSIM4_MOD_LUCSTE : mod->BSIM4lucste = value->rValue; mod->BSIM4lucsteGiven = TRUE; break; case BSIM4_MOD_LVOFF: mod->BSIM4lvoff = value->rValue; mod->BSIM4lvoffGiven = TRUE; break; case BSIM4_MOD_LTVOFF: mod->BSIM4ltvoff = value->rValue; mod->BSIM4ltvoffGiven = TRUE; break; case BSIM4_MOD_LTNFACTOR: /* v4.7 temp dep of leakage current */ mod->BSIM4ltnfactor = value->rValue; mod->BSIM4ltnfactorGiven = TRUE; break; case BSIM4_MOD_LTETA0: /* v4.7 temp dep of leakage current */ mod->BSIM4lteta0 = value->rValue; mod->BSIM4lteta0Given = TRUE; break; case BSIM4_MOD_LTVOFFCV: /* v4.7 temp dep of leakage current */ mod->BSIM4ltvoffcv = value->rValue; mod->BSIM4ltvoffcvGiven = TRUE; break; case BSIM4_MOD_LMINV: mod->BSIM4lminv = value->rValue; mod->BSIM4lminvGiven = TRUE; break; case BSIM4_MOD_LMINVCV: mod->BSIM4lminvcv = value->rValue; mod->BSIM4lminvcvGiven = TRUE; break; case BSIM4_MOD_LFPROUT: mod->BSIM4lfprout = value->rValue; mod->BSIM4lfproutGiven = TRUE; break; case BSIM4_MOD_LPDITS: mod->BSIM4lpdits = value->rValue; mod->BSIM4lpditsGiven = TRUE; break; case BSIM4_MOD_LPDITSD: mod->BSIM4lpditsd = value->rValue; mod->BSIM4lpditsdGiven = TRUE; break; case BSIM4_MOD_LDELTA : mod->BSIM4ldelta = value->rValue; mod->BSIM4ldeltaGiven = TRUE; break; case BSIM4_MOD_LRDSW: mod->BSIM4lrdsw = value->rValue; mod->BSIM4lrdswGiven = TRUE; break; case BSIM4_MOD_LRDW: mod->BSIM4lrdw = value->rValue; mod->BSIM4lrdwGiven = TRUE; break; case BSIM4_MOD_LRSW: mod->BSIM4lrsw = value->rValue; mod->BSIM4lrswGiven = TRUE; break; case BSIM4_MOD_LPRWB: mod->BSIM4lprwb = value->rValue; mod->BSIM4lprwbGiven = TRUE; break; case BSIM4_MOD_LPRWG: mod->BSIM4lprwg = value->rValue; mod->BSIM4lprwgGiven = TRUE; break; case BSIM4_MOD_LPRT: mod->BSIM4lprt = value->rValue; mod->BSIM4lprtGiven = TRUE; break; case BSIM4_MOD_LETA0: mod->BSIM4leta0 = value->rValue; mod->BSIM4leta0Given = TRUE; break; case BSIM4_MOD_LETAB: mod->BSIM4letab = value->rValue; mod->BSIM4letabGiven = TRUE; break; case BSIM4_MOD_LPCLM: mod->BSIM4lpclm = value->rValue; mod->BSIM4lpclmGiven = TRUE; break; case BSIM4_MOD_LPDIBL1: mod->BSIM4lpdibl1 = value->rValue; mod->BSIM4lpdibl1Given = TRUE; break; case BSIM4_MOD_LPDIBL2: mod->BSIM4lpdibl2 = value->rValue; mod->BSIM4lpdibl2Given = TRUE; break; case BSIM4_MOD_LPDIBLB: mod->BSIM4lpdiblb = value->rValue; mod->BSIM4lpdiblbGiven = TRUE; break; case BSIM4_MOD_LPSCBE1: mod->BSIM4lpscbe1 = value->rValue; mod->BSIM4lpscbe1Given = TRUE; break; case BSIM4_MOD_LPSCBE2: mod->BSIM4lpscbe2 = value->rValue; mod->BSIM4lpscbe2Given = TRUE; break; case BSIM4_MOD_LPVAG: mod->BSIM4lpvag = value->rValue; mod->BSIM4lpvagGiven = TRUE; break; case BSIM4_MOD_LWR : mod->BSIM4lwr = value->rValue; mod->BSIM4lwrGiven = TRUE; break; case BSIM4_MOD_LDWG : mod->BSIM4ldwg = value->rValue; mod->BSIM4ldwgGiven = TRUE; break; case BSIM4_MOD_LDWB : mod->BSIM4ldwb = value->rValue; mod->BSIM4ldwbGiven = TRUE; break; case BSIM4_MOD_LB0 : mod->BSIM4lb0 = value->rValue; mod->BSIM4lb0Given = TRUE; break; case BSIM4_MOD_LB1 : mod->BSIM4lb1 = value->rValue; mod->BSIM4lb1Given = TRUE; break; case BSIM4_MOD_LALPHA0 : mod->BSIM4lalpha0 = value->rValue; mod->BSIM4lalpha0Given = TRUE; break; case BSIM4_MOD_LALPHA1 : mod->BSIM4lalpha1 = value->rValue; mod->BSIM4lalpha1Given = TRUE; break; case BSIM4_MOD_LBETA0 : mod->BSIM4lbeta0 = value->rValue; mod->BSIM4lbeta0Given = TRUE; break; case BSIM4_MOD_LPHIN : mod->BSIM4lphin = value->rValue; mod->BSIM4lphinGiven = TRUE; break; case BSIM4_MOD_LAGIDL : mod->BSIM4lagidl = value->rValue; mod->BSIM4lagidlGiven = TRUE; break; case BSIM4_MOD_LBGIDL : mod->BSIM4lbgidl = value->rValue; mod->BSIM4lbgidlGiven = TRUE; break; case BSIM4_MOD_LCGIDL : mod->BSIM4lcgidl = value->rValue; mod->BSIM4lcgidlGiven = TRUE; break; case BSIM4_MOD_LEGIDL : mod->BSIM4legidl = value->rValue; mod->BSIM4legidlGiven = TRUE; break; case BSIM4_MOD_LFGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4lfgidl = value->rValue; mod->BSIM4lfgidlGiven = TRUE; break; case BSIM4_MOD_LKGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4lkgidl = value->rValue; mod->BSIM4lkgidlGiven = TRUE; break; case BSIM4_MOD_LRGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4lrgidl = value->rValue; mod->BSIM4lrgidlGiven = TRUE; break; case BSIM4_MOD_LAGISL : mod->BSIM4lagisl = value->rValue; mod->BSIM4lagislGiven = TRUE; break; case BSIM4_MOD_LBGISL : mod->BSIM4lbgisl = value->rValue; mod->BSIM4lbgislGiven = TRUE; break; case BSIM4_MOD_LCGISL : mod->BSIM4lcgisl = value->rValue; mod->BSIM4lcgislGiven = TRUE; break; case BSIM4_MOD_LEGISL : mod->BSIM4legisl = value->rValue; mod->BSIM4legislGiven = TRUE; break; case BSIM4_MOD_LFGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4lfgisl = value->rValue; mod->BSIM4lfgislGiven = TRUE; break; case BSIM4_MOD_LKGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4lkgisl = value->rValue; mod->BSIM4lkgislGiven = TRUE; break; case BSIM4_MOD_LRGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4lrgisl = value->rValue; mod->BSIM4lrgislGiven = TRUE; break; case BSIM4_MOD_LAIGC : mod->BSIM4laigc = value->rValue; mod->BSIM4laigcGiven = TRUE; break; case BSIM4_MOD_LBIGC : mod->BSIM4lbigc = value->rValue; mod->BSIM4lbigcGiven = TRUE; break; case BSIM4_MOD_LCIGC : mod->BSIM4lcigc = value->rValue; mod->BSIM4lcigcGiven = TRUE; break; case BSIM4_MOD_LAIGSD : mod->BSIM4laigsd = value->rValue; mod->BSIM4laigsdGiven = TRUE; break; case BSIM4_MOD_LBIGSD : mod->BSIM4lbigsd = value->rValue; mod->BSIM4lbigsdGiven = TRUE; break; case BSIM4_MOD_LCIGSD : mod->BSIM4lcigsd = value->rValue; mod->BSIM4lcigsdGiven = TRUE; break; case BSIM4_MOD_LAIGS : mod->BSIM4laigs = value->rValue; mod->BSIM4laigsGiven = TRUE; break; case BSIM4_MOD_LBIGS : mod->BSIM4lbigs = value->rValue; mod->BSIM4lbigsGiven = TRUE; break; case BSIM4_MOD_LCIGS : mod->BSIM4lcigs = value->rValue; mod->BSIM4lcigsGiven = TRUE; break; case BSIM4_MOD_LAIGD : mod->BSIM4laigd = value->rValue; mod->BSIM4laigdGiven = TRUE; break; case BSIM4_MOD_LBIGD : mod->BSIM4lbigd = value->rValue; mod->BSIM4lbigdGiven = TRUE; break; case BSIM4_MOD_LCIGD : mod->BSIM4lcigd = value->rValue; mod->BSIM4lcigdGiven = TRUE; break; case BSIM4_MOD_LAIGBACC : mod->BSIM4laigbacc = value->rValue; mod->BSIM4laigbaccGiven = TRUE; break; case BSIM4_MOD_LBIGBACC : mod->BSIM4lbigbacc = value->rValue; mod->BSIM4lbigbaccGiven = TRUE; break; case BSIM4_MOD_LCIGBACC : mod->BSIM4lcigbacc = value->rValue; mod->BSIM4lcigbaccGiven = TRUE; break; case BSIM4_MOD_LAIGBINV : mod->BSIM4laigbinv = value->rValue; mod->BSIM4laigbinvGiven = TRUE; break; case BSIM4_MOD_LBIGBINV : mod->BSIM4lbigbinv = value->rValue; mod->BSIM4lbigbinvGiven = TRUE; break; case BSIM4_MOD_LCIGBINV : mod->BSIM4lcigbinv = value->rValue; mod->BSIM4lcigbinvGiven = TRUE; break; case BSIM4_MOD_LNIGC : mod->BSIM4lnigc = value->rValue; mod->BSIM4lnigcGiven = TRUE; break; case BSIM4_MOD_LNIGBINV : mod->BSIM4lnigbinv = value->rValue; mod->BSIM4lnigbinvGiven = TRUE; break; case BSIM4_MOD_LNIGBACC : mod->BSIM4lnigbacc = value->rValue; mod->BSIM4lnigbaccGiven = TRUE; break; case BSIM4_MOD_LNTOX : mod->BSIM4lntox = value->rValue; mod->BSIM4lntoxGiven = TRUE; break; case BSIM4_MOD_LEIGBINV : mod->BSIM4leigbinv = value->rValue; mod->BSIM4leigbinvGiven = TRUE; break; case BSIM4_MOD_LPIGCD : mod->BSIM4lpigcd = value->rValue; mod->BSIM4lpigcdGiven = TRUE; break; case BSIM4_MOD_LPOXEDGE : mod->BSIM4lpoxedge = value->rValue; mod->BSIM4lpoxedgeGiven = TRUE; break; case BSIM4_MOD_LXRCRG1 : mod->BSIM4lxrcrg1 = value->rValue; mod->BSIM4lxrcrg1Given = TRUE; break; case BSIM4_MOD_LXRCRG2 : mod->BSIM4lxrcrg2 = value->rValue; mod->BSIM4lxrcrg2Given = TRUE; break; case BSIM4_MOD_LLAMBDA : mod->BSIM4llambda = value->rValue; mod->BSIM4llambdaGiven = TRUE; break; case BSIM4_MOD_LVTL : mod->BSIM4lvtl = value->rValue; mod->BSIM4lvtlGiven = TRUE; break; case BSIM4_MOD_LXN: mod->BSIM4lxn = value->rValue; mod->BSIM4lxnGiven = TRUE; break; case BSIM4_MOD_LVFBSDOFF: mod->BSIM4lvfbsdoff = value->rValue; mod->BSIM4lvfbsdoffGiven = TRUE; break; case BSIM4_MOD_LTVFBSDOFF: mod->BSIM4ltvfbsdoff = value->rValue; mod->BSIM4ltvfbsdoffGiven = TRUE; break; case BSIM4_MOD_LEU : mod->BSIM4leu = value->rValue; mod->BSIM4leuGiven = TRUE; break; case BSIM4_MOD_LUCS : mod->BSIM4lucs = value->rValue; mod->BSIM4lucsGiven = TRUE; break; case BSIM4_MOD_LVFB : mod->BSIM4lvfb = value->rValue; mod->BSIM4lvfbGiven = TRUE; break; case BSIM4_MOD_LCGSL : mod->BSIM4lcgsl = value->rValue; mod->BSIM4lcgslGiven = TRUE; break; case BSIM4_MOD_LCGDL : mod->BSIM4lcgdl = value->rValue; mod->BSIM4lcgdlGiven = TRUE; break; case BSIM4_MOD_LCKAPPAS : mod->BSIM4lckappas = value->rValue; mod->BSIM4lckappasGiven = TRUE; break; case BSIM4_MOD_LCKAPPAD : mod->BSIM4lckappad = value->rValue; mod->BSIM4lckappadGiven = TRUE; break; case BSIM4_MOD_LCF : mod->BSIM4lcf = value->rValue; mod->BSIM4lcfGiven = TRUE; break; case BSIM4_MOD_LCLC : mod->BSIM4lclc = value->rValue; mod->BSIM4lclcGiven = TRUE; break; case BSIM4_MOD_LCLE : mod->BSIM4lcle = value->rValue; mod->BSIM4lcleGiven = TRUE; break; case BSIM4_MOD_LVFBCV : mod->BSIM4lvfbcv = value->rValue; mod->BSIM4lvfbcvGiven = TRUE; break; case BSIM4_MOD_LACDE : mod->BSIM4lacde = value->rValue; mod->BSIM4lacdeGiven = TRUE; break; case BSIM4_MOD_LMOIN : mod->BSIM4lmoin = value->rValue; mod->BSIM4lmoinGiven = TRUE; break; case BSIM4_MOD_LNOFF : mod->BSIM4lnoff = value->rValue; mod->BSIM4lnoffGiven = TRUE; break; case BSIM4_MOD_LVOFFCV : mod->BSIM4lvoffcv = value->rValue; mod->BSIM4lvoffcvGiven = TRUE; break; /* Width dependence */ case BSIM4_MOD_WCDSC : mod->BSIM4wcdsc = value->rValue; mod->BSIM4wcdscGiven = TRUE; break; case BSIM4_MOD_WCDSCB : mod->BSIM4wcdscb = value->rValue; mod->BSIM4wcdscbGiven = TRUE; break; case BSIM4_MOD_WCDSCD : mod->BSIM4wcdscd = value->rValue; mod->BSIM4wcdscdGiven = TRUE; break; case BSIM4_MOD_WCIT : mod->BSIM4wcit = value->rValue; mod->BSIM4wcitGiven = TRUE; break; case BSIM4_MOD_WNFACTOR : mod->BSIM4wnfactor = value->rValue; mod->BSIM4wnfactorGiven = TRUE; break; case BSIM4_MOD_WXJ: mod->BSIM4wxj = value->rValue; mod->BSIM4wxjGiven = TRUE; break; case BSIM4_MOD_WVSAT: mod->BSIM4wvsat = value->rValue; mod->BSIM4wvsatGiven = TRUE; break; case BSIM4_MOD_WA0: mod->BSIM4wa0 = value->rValue; mod->BSIM4wa0Given = TRUE; break; case BSIM4_MOD_WAGS: mod->BSIM4wags = value->rValue; mod->BSIM4wagsGiven = TRUE; break; case BSIM4_MOD_WA1: mod->BSIM4wa1 = value->rValue; mod->BSIM4wa1Given = TRUE; break; case BSIM4_MOD_WA2: mod->BSIM4wa2 = value->rValue; mod->BSIM4wa2Given = TRUE; break; case BSIM4_MOD_WAT: mod->BSIM4wat = value->rValue; mod->BSIM4watGiven = TRUE; break; case BSIM4_MOD_WKETA: mod->BSIM4wketa = value->rValue; mod->BSIM4wketaGiven = TRUE; break; case BSIM4_MOD_WNSUB: mod->BSIM4wnsub = value->rValue; mod->BSIM4wnsubGiven = TRUE; break; case BSIM4_MOD_WNDEP: mod->BSIM4wndep = value->rValue; mod->BSIM4wndepGiven = TRUE; if (mod->BSIM4wndep > 1.0e20) mod->BSIM4wndep *= 1.0e-6; break; case BSIM4_MOD_WNSD: mod->BSIM4wnsd = value->rValue; mod->BSIM4wnsdGiven = TRUE; if (mod->BSIM4wnsd > 1.0e23) mod->BSIM4wnsd *= 1.0e-6; break; case BSIM4_MOD_WNGATE: mod->BSIM4wngate = value->rValue; mod->BSIM4wngateGiven = TRUE; if (mod->BSIM4wngate > 1.0e23) mod->BSIM4wngate *= 1.0e-6; break; case BSIM4_MOD_WGAMMA1: mod->BSIM4wgamma1 = value->rValue; mod->BSIM4wgamma1Given = TRUE; break; case BSIM4_MOD_WGAMMA2: mod->BSIM4wgamma2 = value->rValue; mod->BSIM4wgamma2Given = TRUE; break; case BSIM4_MOD_WVBX: mod->BSIM4wvbx = value->rValue; mod->BSIM4wvbxGiven = TRUE; break; case BSIM4_MOD_WVBM: mod->BSIM4wvbm = value->rValue; mod->BSIM4wvbmGiven = TRUE; break; case BSIM4_MOD_WXT: mod->BSIM4wxt = value->rValue; mod->BSIM4wxtGiven = TRUE; break; case BSIM4_MOD_WK1: mod->BSIM4wk1 = value->rValue; mod->BSIM4wk1Given = TRUE; break; case BSIM4_MOD_WKT1: mod->BSIM4wkt1 = value->rValue; mod->BSIM4wkt1Given = TRUE; break; case BSIM4_MOD_WKT1L: mod->BSIM4wkt1l = value->rValue; mod->BSIM4wkt1lGiven = TRUE; break; case BSIM4_MOD_WKT2: mod->BSIM4wkt2 = value->rValue; mod->BSIM4wkt2Given = TRUE; break; case BSIM4_MOD_WK2: mod->BSIM4wk2 = value->rValue; mod->BSIM4wk2Given = TRUE; break; case BSIM4_MOD_WK3: mod->BSIM4wk3 = value->rValue; mod->BSIM4wk3Given = TRUE; break; case BSIM4_MOD_WK3B: mod->BSIM4wk3b = value->rValue; mod->BSIM4wk3bGiven = TRUE; break; case BSIM4_MOD_WLPE0: mod->BSIM4wlpe0 = value->rValue; mod->BSIM4wlpe0Given = TRUE; break; case BSIM4_MOD_WLPEB: mod->BSIM4wlpeb = value->rValue; mod->BSIM4wlpebGiven = TRUE; break; case BSIM4_MOD_WDVTP0: mod->BSIM4wdvtp0 = value->rValue; mod->BSIM4wdvtp0Given = TRUE; break; case BSIM4_MOD_WDVTP1: mod->BSIM4wdvtp1 = value->rValue; mod->BSIM4wdvtp1Given = TRUE; break; case BSIM4_MOD_WDVTP2: /* New DIBL/Rout */ mod->BSIM4wdvtp2 = value->rValue; mod->BSIM4wdvtp2Given = TRUE; break; case BSIM4_MOD_WDVTP3: mod->BSIM4wdvtp3 = value->rValue; mod->BSIM4wdvtp3Given = TRUE; break; case BSIM4_MOD_WDVTP4: mod->BSIM4wdvtp4 = value->rValue; mod->BSIM4wdvtp4Given = TRUE; break; case BSIM4_MOD_WDVTP5: mod->BSIM4wdvtp5 = value->rValue; mod->BSIM4wdvtp5Given = TRUE; break; case BSIM4_MOD_WW0: mod->BSIM4ww0 = value->rValue; mod->BSIM4ww0Given = TRUE; break; case BSIM4_MOD_WDVT0: mod->BSIM4wdvt0 = value->rValue; mod->BSIM4wdvt0Given = TRUE; break; case BSIM4_MOD_WDVT1: mod->BSIM4wdvt1 = value->rValue; mod->BSIM4wdvt1Given = TRUE; break; case BSIM4_MOD_WDVT2: mod->BSIM4wdvt2 = value->rValue; mod->BSIM4wdvt2Given = TRUE; break; case BSIM4_MOD_WDVT0W: mod->BSIM4wdvt0w = value->rValue; mod->BSIM4wdvt0wGiven = TRUE; break; case BSIM4_MOD_WDVT1W: mod->BSIM4wdvt1w = value->rValue; mod->BSIM4wdvt1wGiven = TRUE; break; case BSIM4_MOD_WDVT2W: mod->BSIM4wdvt2w = value->rValue; mod->BSIM4wdvt2wGiven = TRUE; break; case BSIM4_MOD_WDROUT: mod->BSIM4wdrout = value->rValue; mod->BSIM4wdroutGiven = TRUE; break; case BSIM4_MOD_WDSUB: mod->BSIM4wdsub = value->rValue; mod->BSIM4wdsubGiven = TRUE; break; case BSIM4_MOD_WVTH0: mod->BSIM4wvth0 = value->rValue; mod->BSIM4wvth0Given = TRUE; break; case BSIM4_MOD_WUA: mod->BSIM4wua = value->rValue; mod->BSIM4wuaGiven = TRUE; break; case BSIM4_MOD_WUA1: mod->BSIM4wua1 = value->rValue; mod->BSIM4wua1Given = TRUE; break; case BSIM4_MOD_WUB: mod->BSIM4wub = value->rValue; mod->BSIM4wubGiven = TRUE; break; case BSIM4_MOD_WUB1: mod->BSIM4wub1 = value->rValue; mod->BSIM4wub1Given = TRUE; break; case BSIM4_MOD_WUC: mod->BSIM4wuc = value->rValue; mod->BSIM4wucGiven = TRUE; break; case BSIM4_MOD_WUC1: mod->BSIM4wuc1 = value->rValue; mod->BSIM4wuc1Given = TRUE; break; case BSIM4_MOD_WU0 : mod->BSIM4wu0 = value->rValue; mod->BSIM4wu0Given = TRUE; break; case BSIM4_MOD_WUTE : mod->BSIM4wute = value->rValue; mod->BSIM4wuteGiven = TRUE; break; case BSIM4_MOD_WUCSTE : mod->BSIM4wucste = value->rValue; mod->BSIM4wucsteGiven = TRUE; break; case BSIM4_MOD_WVOFF: mod->BSIM4wvoff = value->rValue; mod->BSIM4wvoffGiven = TRUE; break; case BSIM4_MOD_WTVOFF: mod->BSIM4wtvoff = value->rValue; mod->BSIM4wtvoffGiven = TRUE; break; case BSIM4_MOD_WTNFACTOR: /* v4.7 temp dep of leakage current */ mod->BSIM4wtnfactor = value->rValue; mod->BSIM4wtnfactorGiven = TRUE; break; case BSIM4_MOD_WTETA0: /* v4.7 temp dep of leakage current */ mod->BSIM4wteta0 = value->rValue; mod->BSIM4wteta0Given = TRUE; break; case BSIM4_MOD_WTVOFFCV: /* v4.7 temp dep of leakage current */ mod->BSIM4wtvoffcv = value->rValue; mod->BSIM4wtvoffcvGiven = TRUE; break; case BSIM4_MOD_WMINV: mod->BSIM4wminv = value->rValue; mod->BSIM4wminvGiven = TRUE; break; case BSIM4_MOD_WMINVCV: mod->BSIM4wminvcv = value->rValue; mod->BSIM4wminvcvGiven = TRUE; break; case BSIM4_MOD_WFPROUT: mod->BSIM4wfprout = value->rValue; mod->BSIM4wfproutGiven = TRUE; break; case BSIM4_MOD_WPDITS: mod->BSIM4wpdits = value->rValue; mod->BSIM4wpditsGiven = TRUE; break; case BSIM4_MOD_WPDITSD: mod->BSIM4wpditsd = value->rValue; mod->BSIM4wpditsdGiven = TRUE; break; case BSIM4_MOD_WDELTA : mod->BSIM4wdelta = value->rValue; mod->BSIM4wdeltaGiven = TRUE; break; case BSIM4_MOD_WRDSW: mod->BSIM4wrdsw = value->rValue; mod->BSIM4wrdswGiven = TRUE; break; case BSIM4_MOD_WRDW: mod->BSIM4wrdw = value->rValue; mod->BSIM4wrdwGiven = TRUE; break; case BSIM4_MOD_WRSW: mod->BSIM4wrsw = value->rValue; mod->BSIM4wrswGiven = TRUE; break; case BSIM4_MOD_WPRWB: mod->BSIM4wprwb = value->rValue; mod->BSIM4wprwbGiven = TRUE; break; case BSIM4_MOD_WPRWG: mod->BSIM4wprwg = value->rValue; mod->BSIM4wprwgGiven = TRUE; break; case BSIM4_MOD_WPRT: mod->BSIM4wprt = value->rValue; mod->BSIM4wprtGiven = TRUE; break; case BSIM4_MOD_WETA0: mod->BSIM4weta0 = value->rValue; mod->BSIM4weta0Given = TRUE; break; case BSIM4_MOD_WETAB: mod->BSIM4wetab = value->rValue; mod->BSIM4wetabGiven = TRUE; break; case BSIM4_MOD_WPCLM: mod->BSIM4wpclm = value->rValue; mod->BSIM4wpclmGiven = TRUE; break; case BSIM4_MOD_WPDIBL1: mod->BSIM4wpdibl1 = value->rValue; mod->BSIM4wpdibl1Given = TRUE; break; case BSIM4_MOD_WPDIBL2: mod->BSIM4wpdibl2 = value->rValue; mod->BSIM4wpdibl2Given = TRUE; break; case BSIM4_MOD_WPDIBLB: mod->BSIM4wpdiblb = value->rValue; mod->BSIM4wpdiblbGiven = TRUE; break; case BSIM4_MOD_WPSCBE1: mod->BSIM4wpscbe1 = value->rValue; mod->BSIM4wpscbe1Given = TRUE; break; case BSIM4_MOD_WPSCBE2: mod->BSIM4wpscbe2 = value->rValue; mod->BSIM4wpscbe2Given = TRUE; break; case BSIM4_MOD_WPVAG: mod->BSIM4wpvag = value->rValue; mod->BSIM4wpvagGiven = TRUE; break; case BSIM4_MOD_WWR : mod->BSIM4wwr = value->rValue; mod->BSIM4wwrGiven = TRUE; break; case BSIM4_MOD_WDWG : mod->BSIM4wdwg = value->rValue; mod->BSIM4wdwgGiven = TRUE; break; case BSIM4_MOD_WDWB : mod->BSIM4wdwb = value->rValue; mod->BSIM4wdwbGiven = TRUE; break; case BSIM4_MOD_WB0 : mod->BSIM4wb0 = value->rValue; mod->BSIM4wb0Given = TRUE; break; case BSIM4_MOD_WB1 : mod->BSIM4wb1 = value->rValue; mod->BSIM4wb1Given = TRUE; break; case BSIM4_MOD_WALPHA0 : mod->BSIM4walpha0 = value->rValue; mod->BSIM4walpha0Given = TRUE; break; case BSIM4_MOD_WALPHA1 : mod->BSIM4walpha1 = value->rValue; mod->BSIM4walpha1Given = TRUE; break; case BSIM4_MOD_WBETA0 : mod->BSIM4wbeta0 = value->rValue; mod->BSIM4wbeta0Given = TRUE; break; case BSIM4_MOD_WPHIN : mod->BSIM4wphin = value->rValue; mod->BSIM4wphinGiven = TRUE; break; case BSIM4_MOD_WAGIDL : mod->BSIM4wagidl = value->rValue; mod->BSIM4wagidlGiven = TRUE; break; case BSIM4_MOD_WBGIDL : mod->BSIM4wbgidl = value->rValue; mod->BSIM4wbgidlGiven = TRUE; break; case BSIM4_MOD_WCGIDL : mod->BSIM4wcgidl = value->rValue; mod->BSIM4wcgidlGiven = TRUE; break; case BSIM4_MOD_WEGIDL : mod->BSIM4wegidl = value->rValue; mod->BSIM4wegidlGiven = TRUE; break; case BSIM4_MOD_WFGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4wfgidl = value->rValue; mod->BSIM4wfgidlGiven = TRUE; break; case BSIM4_MOD_WKGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4wkgidl = value->rValue; mod->BSIM4wkgidlGiven = TRUE; break; case BSIM4_MOD_WRGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4wrgidl = value->rValue; mod->BSIM4wrgidlGiven = TRUE; break; case BSIM4_MOD_WAGISL : mod->BSIM4wagisl = value->rValue; mod->BSIM4wagislGiven = TRUE; break; case BSIM4_MOD_WBGISL : mod->BSIM4wbgisl = value->rValue; mod->BSIM4wbgislGiven = TRUE; break; case BSIM4_MOD_WCGISL : mod->BSIM4wcgisl = value->rValue; mod->BSIM4wcgislGiven = TRUE; break; case BSIM4_MOD_WEGISL : mod->BSIM4wegisl = value->rValue; mod->BSIM4wegislGiven = TRUE; break; case BSIM4_MOD_WFGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4wfgisl = value->rValue; mod->BSIM4wfgislGiven = TRUE; break; case BSIM4_MOD_WKGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4wkgisl = value->rValue; mod->BSIM4wkgislGiven = TRUE; break; case BSIM4_MOD_WRGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4wrgisl = value->rValue; mod->BSIM4wrgislGiven = TRUE; break; case BSIM4_MOD_WAIGC : mod->BSIM4waigc = value->rValue; mod->BSIM4waigcGiven = TRUE; break; case BSIM4_MOD_WBIGC : mod->BSIM4wbigc = value->rValue; mod->BSIM4wbigcGiven = TRUE; break; case BSIM4_MOD_WCIGC : mod->BSIM4wcigc = value->rValue; mod->BSIM4wcigcGiven = TRUE; break; case BSIM4_MOD_WAIGSD : mod->BSIM4waigsd = value->rValue; mod->BSIM4waigsdGiven = TRUE; break; case BSIM4_MOD_WBIGSD : mod->BSIM4wbigsd = value->rValue; mod->BSIM4wbigsdGiven = TRUE; break; case BSIM4_MOD_WCIGSD : mod->BSIM4wcigsd = value->rValue; mod->BSIM4wcigsdGiven = TRUE; break; case BSIM4_MOD_WAIGS : mod->BSIM4waigs = value->rValue; mod->BSIM4waigsGiven = TRUE; break; case BSIM4_MOD_WBIGS : mod->BSIM4wbigs = value->rValue; mod->BSIM4wbigsGiven = TRUE; break; case BSIM4_MOD_WCIGS : mod->BSIM4wcigs = value->rValue; mod->BSIM4wcigsGiven = TRUE; break; case BSIM4_MOD_WAIGD : mod->BSIM4waigd = value->rValue; mod->BSIM4waigdGiven = TRUE; break; case BSIM4_MOD_WBIGD : mod->BSIM4wbigd = value->rValue; mod->BSIM4wbigdGiven = TRUE; break; case BSIM4_MOD_WCIGD : mod->BSIM4wcigd = value->rValue; mod->BSIM4wcigdGiven = TRUE; break; case BSIM4_MOD_WAIGBACC : mod->BSIM4waigbacc = value->rValue; mod->BSIM4waigbaccGiven = TRUE; break; case BSIM4_MOD_WBIGBACC : mod->BSIM4wbigbacc = value->rValue; mod->BSIM4wbigbaccGiven = TRUE; break; case BSIM4_MOD_WCIGBACC : mod->BSIM4wcigbacc = value->rValue; mod->BSIM4wcigbaccGiven = TRUE; break; case BSIM4_MOD_WAIGBINV : mod->BSIM4waigbinv = value->rValue; mod->BSIM4waigbinvGiven = TRUE; break; case BSIM4_MOD_WBIGBINV : mod->BSIM4wbigbinv = value->rValue; mod->BSIM4wbigbinvGiven = TRUE; break; case BSIM4_MOD_WCIGBINV : mod->BSIM4wcigbinv = value->rValue; mod->BSIM4wcigbinvGiven = TRUE; break; case BSIM4_MOD_WNIGC : mod->BSIM4wnigc = value->rValue; mod->BSIM4wnigcGiven = TRUE; break; case BSIM4_MOD_WNIGBINV : mod->BSIM4wnigbinv = value->rValue; mod->BSIM4wnigbinvGiven = TRUE; break; case BSIM4_MOD_WNIGBACC : mod->BSIM4wnigbacc = value->rValue; mod->BSIM4wnigbaccGiven = TRUE; break; case BSIM4_MOD_WNTOX : mod->BSIM4wntox = value->rValue; mod->BSIM4wntoxGiven = TRUE; break; case BSIM4_MOD_WEIGBINV : mod->BSIM4weigbinv = value->rValue; mod->BSIM4weigbinvGiven = TRUE; break; case BSIM4_MOD_WPIGCD : mod->BSIM4wpigcd = value->rValue; mod->BSIM4wpigcdGiven = TRUE; break; case BSIM4_MOD_WPOXEDGE : mod->BSIM4wpoxedge = value->rValue; mod->BSIM4wpoxedgeGiven = TRUE; break; case BSIM4_MOD_WXRCRG1 : mod->BSIM4wxrcrg1 = value->rValue; mod->BSIM4wxrcrg1Given = TRUE; break; case BSIM4_MOD_WXRCRG2 : mod->BSIM4wxrcrg2 = value->rValue; mod->BSIM4wxrcrg2Given = TRUE; break; case BSIM4_MOD_WLAMBDA : mod->BSIM4wlambda = value->rValue; mod->BSIM4wlambdaGiven = TRUE; break; case BSIM4_MOD_WVTL : mod->BSIM4wvtl = value->rValue; mod->BSIM4wvtlGiven = TRUE; break; case BSIM4_MOD_WXN: mod->BSIM4wxn = value->rValue; mod->BSIM4wxnGiven = TRUE; break; case BSIM4_MOD_WVFBSDOFF: mod->BSIM4wvfbsdoff = value->rValue; mod->BSIM4wvfbsdoffGiven = TRUE; break; case BSIM4_MOD_WTVFBSDOFF: mod->BSIM4wtvfbsdoff = value->rValue; mod->BSIM4wtvfbsdoffGiven = TRUE; break; case BSIM4_MOD_WEU : mod->BSIM4weu = value->rValue; mod->BSIM4weuGiven = TRUE; break; case BSIM4_MOD_WUCS : mod->BSIM4wucs = value->rValue; mod->BSIM4wucsGiven = TRUE; break; case BSIM4_MOD_WVFB : mod->BSIM4wvfb = value->rValue; mod->BSIM4wvfbGiven = TRUE; break; case BSIM4_MOD_WCGSL : mod->BSIM4wcgsl = value->rValue; mod->BSIM4wcgslGiven = TRUE; break; case BSIM4_MOD_WCGDL : mod->BSIM4wcgdl = value->rValue; mod->BSIM4wcgdlGiven = TRUE; break; case BSIM4_MOD_WCKAPPAS : mod->BSIM4wckappas = value->rValue; mod->BSIM4wckappasGiven = TRUE; break; case BSIM4_MOD_WCKAPPAD : mod->BSIM4wckappad = value->rValue; mod->BSIM4wckappadGiven = TRUE; break; case BSIM4_MOD_WCF : mod->BSIM4wcf = value->rValue; mod->BSIM4wcfGiven = TRUE; break; case BSIM4_MOD_WCLC : mod->BSIM4wclc = value->rValue; mod->BSIM4wclcGiven = TRUE; break; case BSIM4_MOD_WCLE : mod->BSIM4wcle = value->rValue; mod->BSIM4wcleGiven = TRUE; break; case BSIM4_MOD_WVFBCV : mod->BSIM4wvfbcv = value->rValue; mod->BSIM4wvfbcvGiven = TRUE; break; case BSIM4_MOD_WACDE : mod->BSIM4wacde = value->rValue; mod->BSIM4wacdeGiven = TRUE; break; case BSIM4_MOD_WMOIN : mod->BSIM4wmoin = value->rValue; mod->BSIM4wmoinGiven = TRUE; break; case BSIM4_MOD_WNOFF : mod->BSIM4wnoff = value->rValue; mod->BSIM4wnoffGiven = TRUE; break; case BSIM4_MOD_WVOFFCV : mod->BSIM4wvoffcv = value->rValue; mod->BSIM4wvoffcvGiven = TRUE; break; /* Cross-term dependence */ case BSIM4_MOD_PCDSC : mod->BSIM4pcdsc = value->rValue; mod->BSIM4pcdscGiven = TRUE; break; case BSIM4_MOD_PCDSCB : mod->BSIM4pcdscb = value->rValue; mod->BSIM4pcdscbGiven = TRUE; break; case BSIM4_MOD_PCDSCD : mod->BSIM4pcdscd = value->rValue; mod->BSIM4pcdscdGiven = TRUE; break; case BSIM4_MOD_PCIT : mod->BSIM4pcit = value->rValue; mod->BSIM4pcitGiven = TRUE; break; case BSIM4_MOD_PNFACTOR : mod->BSIM4pnfactor = value->rValue; mod->BSIM4pnfactorGiven = TRUE; break; case BSIM4_MOD_PXJ: mod->BSIM4pxj = value->rValue; mod->BSIM4pxjGiven = TRUE; break; case BSIM4_MOD_PVSAT: mod->BSIM4pvsat = value->rValue; mod->BSIM4pvsatGiven = TRUE; break; case BSIM4_MOD_PA0: mod->BSIM4pa0 = value->rValue; mod->BSIM4pa0Given = TRUE; break; case BSIM4_MOD_PAGS: mod->BSIM4pags = value->rValue; mod->BSIM4pagsGiven = TRUE; break; case BSIM4_MOD_PA1: mod->BSIM4pa1 = value->rValue; mod->BSIM4pa1Given = TRUE; break; case BSIM4_MOD_PA2: mod->BSIM4pa2 = value->rValue; mod->BSIM4pa2Given = TRUE; break; case BSIM4_MOD_PAT: mod->BSIM4pat = value->rValue; mod->BSIM4patGiven = TRUE; break; case BSIM4_MOD_PKETA: mod->BSIM4pketa = value->rValue; mod->BSIM4pketaGiven = TRUE; break; case BSIM4_MOD_PNSUB: mod->BSIM4pnsub = value->rValue; mod->BSIM4pnsubGiven = TRUE; break; case BSIM4_MOD_PNDEP: mod->BSIM4pndep = value->rValue; mod->BSIM4pndepGiven = TRUE; if (mod->BSIM4pndep > 1.0e20) mod->BSIM4pndep *= 1.0e-6; break; case BSIM4_MOD_PNSD: mod->BSIM4pnsd = value->rValue; mod->BSIM4pnsdGiven = TRUE; if (mod->BSIM4pnsd > 1.0e23) mod->BSIM4pnsd *= 1.0e-6; break; case BSIM4_MOD_PNGATE: mod->BSIM4pngate = value->rValue; mod->BSIM4pngateGiven = TRUE; if (mod->BSIM4pngate > 1.0e23) mod->BSIM4pngate *= 1.0e-6; break; case BSIM4_MOD_PGAMMA1: mod->BSIM4pgamma1 = value->rValue; mod->BSIM4pgamma1Given = TRUE; break; case BSIM4_MOD_PGAMMA2: mod->BSIM4pgamma2 = value->rValue; mod->BSIM4pgamma2Given = TRUE; break; case BSIM4_MOD_PVBX: mod->BSIM4pvbx = value->rValue; mod->BSIM4pvbxGiven = TRUE; break; case BSIM4_MOD_PVBM: mod->BSIM4pvbm = value->rValue; mod->BSIM4pvbmGiven = TRUE; break; case BSIM4_MOD_PXT: mod->BSIM4pxt = value->rValue; mod->BSIM4pxtGiven = TRUE; break; case BSIM4_MOD_PK1: mod->BSIM4pk1 = value->rValue; mod->BSIM4pk1Given = TRUE; break; case BSIM4_MOD_PKT1: mod->BSIM4pkt1 = value->rValue; mod->BSIM4pkt1Given = TRUE; break; case BSIM4_MOD_PKT1L: mod->BSIM4pkt1l = value->rValue; mod->BSIM4pkt1lGiven = TRUE; break; case BSIM4_MOD_PKT2: mod->BSIM4pkt2 = value->rValue; mod->BSIM4pkt2Given = TRUE; break; case BSIM4_MOD_PK2: mod->BSIM4pk2 = value->rValue; mod->BSIM4pk2Given = TRUE; break; case BSIM4_MOD_PK3: mod->BSIM4pk3 = value->rValue; mod->BSIM4pk3Given = TRUE; break; case BSIM4_MOD_PK3B: mod->BSIM4pk3b = value->rValue; mod->BSIM4pk3bGiven = TRUE; break; case BSIM4_MOD_PLPE0: mod->BSIM4plpe0 = value->rValue; mod->BSIM4plpe0Given = TRUE; break; case BSIM4_MOD_PLPEB: mod->BSIM4plpeb = value->rValue; mod->BSIM4plpebGiven = TRUE; break; case BSIM4_MOD_PDVTP0: mod->BSIM4pdvtp0 = value->rValue; mod->BSIM4pdvtp0Given = TRUE; break; case BSIM4_MOD_PDVTP1: mod->BSIM4pdvtp1 = value->rValue; mod->BSIM4pdvtp1Given = TRUE; break; case BSIM4_MOD_PDVTP2: /* New DIBL/Rout */ mod->BSIM4pdvtp2 = value->rValue; mod->BSIM4pdvtp2Given = TRUE; break; case BSIM4_MOD_PDVTP3: mod->BSIM4pdvtp3 = value->rValue; mod->BSIM4pdvtp3Given = TRUE; break; case BSIM4_MOD_PDVTP4: mod->BSIM4pdvtp4 = value->rValue; mod->BSIM4pdvtp4Given = TRUE; break; case BSIM4_MOD_PDVTP5: mod->BSIM4pdvtp5 = value->rValue; mod->BSIM4pdvtp5Given = TRUE; break; case BSIM4_MOD_PW0: mod->BSIM4pw0 = value->rValue; mod->BSIM4pw0Given = TRUE; break; case BSIM4_MOD_PDVT0: mod->BSIM4pdvt0 = value->rValue; mod->BSIM4pdvt0Given = TRUE; break; case BSIM4_MOD_PDVT1: mod->BSIM4pdvt1 = value->rValue; mod->BSIM4pdvt1Given = TRUE; break; case BSIM4_MOD_PDVT2: mod->BSIM4pdvt2 = value->rValue; mod->BSIM4pdvt2Given = TRUE; break; case BSIM4_MOD_PDVT0W: mod->BSIM4pdvt0w = value->rValue; mod->BSIM4pdvt0wGiven = TRUE; break; case BSIM4_MOD_PDVT1W: mod->BSIM4pdvt1w = value->rValue; mod->BSIM4pdvt1wGiven = TRUE; break; case BSIM4_MOD_PDVT2W: mod->BSIM4pdvt2w = value->rValue; mod->BSIM4pdvt2wGiven = TRUE; break; case BSIM4_MOD_PDROUT: mod->BSIM4pdrout = value->rValue; mod->BSIM4pdroutGiven = TRUE; break; case BSIM4_MOD_PDSUB: mod->BSIM4pdsub = value->rValue; mod->BSIM4pdsubGiven = TRUE; break; case BSIM4_MOD_PVTH0: mod->BSIM4pvth0 = value->rValue; mod->BSIM4pvth0Given = TRUE; break; case BSIM4_MOD_PUA: mod->BSIM4pua = value->rValue; mod->BSIM4puaGiven = TRUE; break; case BSIM4_MOD_PUA1: mod->BSIM4pua1 = value->rValue; mod->BSIM4pua1Given = TRUE; break; case BSIM4_MOD_PUB: mod->BSIM4pub = value->rValue; mod->BSIM4pubGiven = TRUE; break; case BSIM4_MOD_PUB1: mod->BSIM4pub1 = value->rValue; mod->BSIM4pub1Given = TRUE; break; case BSIM4_MOD_PUC: mod->BSIM4puc = value->rValue; mod->BSIM4pucGiven = TRUE; break; case BSIM4_MOD_PUC1: mod->BSIM4puc1 = value->rValue; mod->BSIM4puc1Given = TRUE; break; case BSIM4_MOD_PU0 : mod->BSIM4pu0 = value->rValue; mod->BSIM4pu0Given = TRUE; break; case BSIM4_MOD_PUTE : mod->BSIM4pute = value->rValue; mod->BSIM4puteGiven = TRUE; break; case BSIM4_MOD_PUCSTE : mod->BSIM4pucste = value->rValue; mod->BSIM4pucsteGiven = TRUE; break; case BSIM4_MOD_PVOFF: mod->BSIM4pvoff = value->rValue; mod->BSIM4pvoffGiven = TRUE; break; case BSIM4_MOD_PTVOFF: mod->BSIM4ptvoff = value->rValue; mod->BSIM4ptvoffGiven = TRUE; break; case BSIM4_MOD_PTNFACTOR: /* v4.7 temp dep of leakage current */ mod->BSIM4ptnfactor = value->rValue; mod->BSIM4ptnfactorGiven = TRUE; break; case BSIM4_MOD_PTETA0: /* v4.7 temp dep of leakage current */ mod->BSIM4pteta0 = value->rValue; mod->BSIM4pteta0Given = TRUE; break; case BSIM4_MOD_PTVOFFCV: /* v4.7 temp dep of leakage current */ mod->BSIM4ptvoffcv = value->rValue; mod->BSIM4ptvoffcvGiven = TRUE; break; case BSIM4_MOD_PMINV: mod->BSIM4pminv = value->rValue; mod->BSIM4pminvGiven = TRUE; break; case BSIM4_MOD_PMINVCV: mod->BSIM4pminvcv = value->rValue; mod->BSIM4pminvcvGiven = TRUE; break; case BSIM4_MOD_PFPROUT: mod->BSIM4pfprout = value->rValue; mod->BSIM4pfproutGiven = TRUE; break; case BSIM4_MOD_PPDITS: mod->BSIM4ppdits = value->rValue; mod->BSIM4ppditsGiven = TRUE; break; case BSIM4_MOD_PPDITSD: mod->BSIM4ppditsd = value->rValue; mod->BSIM4ppditsdGiven = TRUE; break; case BSIM4_MOD_PDELTA : mod->BSIM4pdelta = value->rValue; mod->BSIM4pdeltaGiven = TRUE; break; case BSIM4_MOD_PRDSW: mod->BSIM4prdsw = value->rValue; mod->BSIM4prdswGiven = TRUE; break; case BSIM4_MOD_PRDW: mod->BSIM4prdw = value->rValue; mod->BSIM4prdwGiven = TRUE; break; case BSIM4_MOD_PRSW: mod->BSIM4prsw = value->rValue; mod->BSIM4prswGiven = TRUE; break; case BSIM4_MOD_PPRWB: mod->BSIM4pprwb = value->rValue; mod->BSIM4pprwbGiven = TRUE; break; case BSIM4_MOD_PPRWG: mod->BSIM4pprwg = value->rValue; mod->BSIM4pprwgGiven = TRUE; break; case BSIM4_MOD_PPRT: mod->BSIM4pprt = value->rValue; mod->BSIM4pprtGiven = TRUE; break; case BSIM4_MOD_PETA0: mod->BSIM4peta0 = value->rValue; mod->BSIM4peta0Given = TRUE; break; case BSIM4_MOD_PETAB: mod->BSIM4petab = value->rValue; mod->BSIM4petabGiven = TRUE; break; case BSIM4_MOD_PPCLM: mod->BSIM4ppclm = value->rValue; mod->BSIM4ppclmGiven = TRUE; break; case BSIM4_MOD_PPDIBL1: mod->BSIM4ppdibl1 = value->rValue; mod->BSIM4ppdibl1Given = TRUE; break; case BSIM4_MOD_PPDIBL2: mod->BSIM4ppdibl2 = value->rValue; mod->BSIM4ppdibl2Given = TRUE; break; case BSIM4_MOD_PPDIBLB: mod->BSIM4ppdiblb = value->rValue; mod->BSIM4ppdiblbGiven = TRUE; break; case BSIM4_MOD_PPSCBE1: mod->BSIM4ppscbe1 = value->rValue; mod->BSIM4ppscbe1Given = TRUE; break; case BSIM4_MOD_PPSCBE2: mod->BSIM4ppscbe2 = value->rValue; mod->BSIM4ppscbe2Given = TRUE; break; case BSIM4_MOD_PPVAG: mod->BSIM4ppvag = value->rValue; mod->BSIM4ppvagGiven = TRUE; break; case BSIM4_MOD_PWR : mod->BSIM4pwr = value->rValue; mod->BSIM4pwrGiven = TRUE; break; case BSIM4_MOD_PDWG : mod->BSIM4pdwg = value->rValue; mod->BSIM4pdwgGiven = TRUE; break; case BSIM4_MOD_PDWB : mod->BSIM4pdwb = value->rValue; mod->BSIM4pdwbGiven = TRUE; break; case BSIM4_MOD_PB0 : mod->BSIM4pb0 = value->rValue; mod->BSIM4pb0Given = TRUE; break; case BSIM4_MOD_PB1 : mod->BSIM4pb1 = value->rValue; mod->BSIM4pb1Given = TRUE; break; case BSIM4_MOD_PALPHA0 : mod->BSIM4palpha0 = value->rValue; mod->BSIM4palpha0Given = TRUE; break; case BSIM4_MOD_PALPHA1 : mod->BSIM4palpha1 = value->rValue; mod->BSIM4palpha1Given = TRUE; break; case BSIM4_MOD_PBETA0 : mod->BSIM4pbeta0 = value->rValue; mod->BSIM4pbeta0Given = TRUE; break; case BSIM4_MOD_PPHIN : mod->BSIM4pphin = value->rValue; mod->BSIM4pphinGiven = TRUE; break; case BSIM4_MOD_PAGIDL : mod->BSIM4pagidl = value->rValue; mod->BSIM4pagidlGiven = TRUE; break; case BSIM4_MOD_PBGIDL : mod->BSIM4pbgidl = value->rValue; mod->BSIM4pbgidlGiven = TRUE; break; case BSIM4_MOD_PCGIDL : mod->BSIM4pcgidl = value->rValue; mod->BSIM4pcgidlGiven = TRUE; break; case BSIM4_MOD_PEGIDL : mod->BSIM4pegidl = value->rValue; mod->BSIM4pegidlGiven = TRUE; break; case BSIM4_MOD_PFGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4pfgidl = value->rValue; mod->BSIM4pfgidlGiven = TRUE; break; case BSIM4_MOD_PKGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4pkgidl = value->rValue; mod->BSIM4pkgidlGiven = TRUE; break; case BSIM4_MOD_PRGIDL : /* v4.7 New GIDL/GISL */ mod->BSIM4prgidl = value->rValue; mod->BSIM4prgidlGiven = TRUE; break; case BSIM4_MOD_PAGISL : mod->BSIM4pagisl = value->rValue; mod->BSIM4pagislGiven = TRUE; break; case BSIM4_MOD_PBGISL : mod->BSIM4pbgisl = value->rValue; mod->BSIM4pbgislGiven = TRUE; break; case BSIM4_MOD_PCGISL : mod->BSIM4pcgisl = value->rValue; mod->BSIM4pcgislGiven = TRUE; break; case BSIM4_MOD_PEGISL : mod->BSIM4pegisl = value->rValue; mod->BSIM4pegislGiven = TRUE; break; case BSIM4_MOD_PFGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4pfgisl = value->rValue; mod->BSIM4pfgislGiven = TRUE; break; case BSIM4_MOD_PKGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4pkgisl = value->rValue; mod->BSIM4pkgislGiven = TRUE; break; case BSIM4_MOD_PRGISL : /* v4.7 New GIDL/GISL */ mod->BSIM4prgisl = value->rValue; mod->BSIM4prgislGiven = TRUE; break; case BSIM4_MOD_PAIGC : mod->BSIM4paigc = value->rValue; mod->BSIM4paigcGiven = TRUE; break; case BSIM4_MOD_PBIGC : mod->BSIM4pbigc = value->rValue; mod->BSIM4pbigcGiven = TRUE; break; case BSIM4_MOD_PCIGC : mod->BSIM4pcigc = value->rValue; mod->BSIM4pcigcGiven = TRUE; break; case BSIM4_MOD_PAIGSD : mod->BSIM4paigsd = value->rValue; mod->BSIM4paigsdGiven = TRUE; break; case BSIM4_MOD_PBIGSD : mod->BSIM4pbigsd = value->rValue; mod->BSIM4pbigsdGiven = TRUE; break; case BSIM4_MOD_PCIGSD : mod->BSIM4pcigsd = value->rValue; mod->BSIM4pcigsdGiven = TRUE; break; case BSIM4_MOD_PAIGS : mod->BSIM4paigs = value->rValue; mod->BSIM4paigsGiven = TRUE; break; case BSIM4_MOD_PBIGS : mod->BSIM4pbigs = value->rValue; mod->BSIM4pbigsGiven = TRUE; break; case BSIM4_MOD_PCIGS : mod->BSIM4pcigs = value->rValue; mod->BSIM4pcigsGiven = TRUE; break; case BSIM4_MOD_PAIGD : mod->BSIM4paigd = value->rValue; mod->BSIM4paigdGiven = TRUE; break; case BSIM4_MOD_PBIGD : mod->BSIM4pbigd = value->rValue; mod->BSIM4pbigdGiven = TRUE; break; case BSIM4_MOD_PCIGD : mod->BSIM4pcigd = value->rValue; mod->BSIM4pcigdGiven = TRUE; break; case BSIM4_MOD_PAIGBACC : mod->BSIM4paigbacc = value->rValue; mod->BSIM4paigbaccGiven = TRUE; break; case BSIM4_MOD_PBIGBACC : mod->BSIM4pbigbacc = value->rValue; mod->BSIM4pbigbaccGiven = TRUE; break; case BSIM4_MOD_PCIGBACC : mod->BSIM4pcigbacc = value->rValue; mod->BSIM4pcigbaccGiven = TRUE; break; case BSIM4_MOD_PAIGBINV : mod->BSIM4paigbinv = value->rValue; mod->BSIM4paigbinvGiven = TRUE; break; case BSIM4_MOD_PBIGBINV : mod->BSIM4pbigbinv = value->rValue; mod->BSIM4pbigbinvGiven = TRUE; break; case BSIM4_MOD_PCIGBINV : mod->BSIM4pcigbinv = value->rValue; mod->BSIM4pcigbinvGiven = TRUE; break; case BSIM4_MOD_PNIGC : mod->BSIM4pnigc = value->rValue; mod->BSIM4pnigcGiven = TRUE; break; case BSIM4_MOD_PNIGBINV : mod->BSIM4pnigbinv = value->rValue; mod->BSIM4pnigbinvGiven = TRUE; break; case BSIM4_MOD_PNIGBACC : mod->BSIM4pnigbacc = value->rValue; mod->BSIM4pnigbaccGiven = TRUE; break; case BSIM4_MOD_PNTOX : mod->BSIM4pntox = value->rValue; mod->BSIM4pntoxGiven = TRUE; break; case BSIM4_MOD_PEIGBINV : mod->BSIM4peigbinv = value->rValue; mod->BSIM4peigbinvGiven = TRUE; break; case BSIM4_MOD_PPIGCD : mod->BSIM4ppigcd = value->rValue; mod->BSIM4ppigcdGiven = TRUE; break; case BSIM4_MOD_PPOXEDGE : mod->BSIM4ppoxedge = value->rValue; mod->BSIM4ppoxedgeGiven = TRUE; break; case BSIM4_MOD_PXRCRG1 : mod->BSIM4pxrcrg1 = value->rValue; mod->BSIM4pxrcrg1Given = TRUE; break; case BSIM4_MOD_PXRCRG2 : mod->BSIM4pxrcrg2 = value->rValue; mod->BSIM4pxrcrg2Given = TRUE; break; case BSIM4_MOD_PLAMBDA : mod->BSIM4plambda = value->rValue; mod->BSIM4plambdaGiven = TRUE; break; case BSIM4_MOD_PVTL : mod->BSIM4pvtl = value->rValue; mod->BSIM4pvtlGiven = TRUE; break; case BSIM4_MOD_PXN: mod->BSIM4pxn = value->rValue; mod->BSIM4pxnGiven = TRUE; break; case BSIM4_MOD_PVFBSDOFF: mod->BSIM4pvfbsdoff = value->rValue; mod->BSIM4pvfbsdoffGiven = TRUE; break; case BSIM4_MOD_PTVFBSDOFF: mod->BSIM4ptvfbsdoff = value->rValue; mod->BSIM4ptvfbsdoffGiven = TRUE; break; case BSIM4_MOD_PEU : mod->BSIM4peu = value->rValue; mod->BSIM4peuGiven = TRUE; break; case BSIM4_MOD_PUCS : mod->BSIM4pucs = value->rValue; mod->BSIM4pucsGiven = TRUE; break; case BSIM4_MOD_PVFB : mod->BSIM4pvfb = value->rValue; mod->BSIM4pvfbGiven = TRUE; break; case BSIM4_MOD_PCGSL : mod->BSIM4pcgsl = value->rValue; mod->BSIM4pcgslGiven = TRUE; break; case BSIM4_MOD_PCGDL : mod->BSIM4pcgdl = value->rValue; mod->BSIM4pcgdlGiven = TRUE; break; case BSIM4_MOD_PCKAPPAS : mod->BSIM4pckappas = value->rValue; mod->BSIM4pckappasGiven = TRUE; break; case BSIM4_MOD_PCKAPPAD : mod->BSIM4pckappad = value->rValue; mod->BSIM4pckappadGiven = TRUE; break; case BSIM4_MOD_PCF : mod->BSIM4pcf = value->rValue; mod->BSIM4pcfGiven = TRUE; break; case BSIM4_MOD_PCLC : mod->BSIM4pclc = value->rValue; mod->BSIM4pclcGiven = TRUE; break; case BSIM4_MOD_PCLE : mod->BSIM4pcle = value->rValue; mod->BSIM4pcleGiven = TRUE; break; case BSIM4_MOD_PVFBCV : mod->BSIM4pvfbcv = value->rValue; mod->BSIM4pvfbcvGiven = TRUE; break; case BSIM4_MOD_PACDE : mod->BSIM4pacde = value->rValue; mod->BSIM4pacdeGiven = TRUE; break; case BSIM4_MOD_PMOIN : mod->BSIM4pmoin = value->rValue; mod->BSIM4pmoinGiven = TRUE; break; case BSIM4_MOD_PNOFF : mod->BSIM4pnoff = value->rValue; mod->BSIM4pnoffGiven = TRUE; break; case BSIM4_MOD_PVOFFCV : mod->BSIM4pvoffcv = value->rValue; mod->BSIM4pvoffcvGiven = TRUE; break; case BSIM4_MOD_TNOM : mod->BSIM4tnom = value->rValue + CONSTCtoK; mod->BSIM4tnomGiven = TRUE; break; case BSIM4_MOD_CGSO : mod->BSIM4cgso = value->rValue; mod->BSIM4cgsoGiven = TRUE; break; case BSIM4_MOD_CGDO : mod->BSIM4cgdo = value->rValue; mod->BSIM4cgdoGiven = TRUE; break; case BSIM4_MOD_CGBO : mod->BSIM4cgbo = value->rValue; mod->BSIM4cgboGiven = TRUE; break; case BSIM4_MOD_XPART : mod->BSIM4xpart = value->rValue; mod->BSIM4xpartGiven = TRUE; break; case BSIM4_MOD_RSH : mod->BSIM4sheetResistance = value->rValue; mod->BSIM4sheetResistanceGiven = TRUE; break; case BSIM4_MOD_JSS : mod->BSIM4SjctSatCurDensity = value->rValue; mod->BSIM4SjctSatCurDensityGiven = TRUE; break; case BSIM4_MOD_JSWS : mod->BSIM4SjctSidewallSatCurDensity = value->rValue; mod->BSIM4SjctSidewallSatCurDensityGiven = TRUE; break; case BSIM4_MOD_JSWGS : mod->BSIM4SjctGateSidewallSatCurDensity = value->rValue; mod->BSIM4SjctGateSidewallSatCurDensityGiven = TRUE; break; case BSIM4_MOD_PBS : mod->BSIM4SbulkJctPotential = value->rValue; mod->BSIM4SbulkJctPotentialGiven = TRUE; break; case BSIM4_MOD_MJS : mod->BSIM4SbulkJctBotGradingCoeff = value->rValue; mod->BSIM4SbulkJctBotGradingCoeffGiven = TRUE; break; case BSIM4_MOD_PBSWS : mod->BSIM4SsidewallJctPotential = value->rValue; mod->BSIM4SsidewallJctPotentialGiven = TRUE; break; case BSIM4_MOD_MJSWS : mod->BSIM4SbulkJctSideGradingCoeff = value->rValue; mod->BSIM4SbulkJctSideGradingCoeffGiven = TRUE; break; case BSIM4_MOD_CJS : mod->BSIM4SunitAreaJctCap = value->rValue; mod->BSIM4SunitAreaJctCapGiven = TRUE; break; case BSIM4_MOD_CJSWS : mod->BSIM4SunitLengthSidewallJctCap = value->rValue; mod->BSIM4SunitLengthSidewallJctCapGiven = TRUE; break; case BSIM4_MOD_NJS : mod->BSIM4SjctEmissionCoeff = value->rValue; mod->BSIM4SjctEmissionCoeffGiven = TRUE; break; case BSIM4_MOD_PBSWGS : mod->BSIM4SGatesidewallJctPotential = value->rValue; mod->BSIM4SGatesidewallJctPotentialGiven = TRUE; break; case BSIM4_MOD_MJSWGS : mod->BSIM4SbulkJctGateSideGradingCoeff = value->rValue; mod->BSIM4SbulkJctGateSideGradingCoeffGiven = TRUE; break; case BSIM4_MOD_CJSWGS : mod->BSIM4SunitLengthGateSidewallJctCap = value->rValue; mod->BSIM4SunitLengthGateSidewallJctCapGiven = TRUE; break; case BSIM4_MOD_XTIS : mod->BSIM4SjctTempExponent = value->rValue; mod->BSIM4SjctTempExponentGiven = TRUE; break; case BSIM4_MOD_JSD : mod->BSIM4DjctSatCurDensity = value->rValue; mod->BSIM4DjctSatCurDensityGiven = TRUE; break; case BSIM4_MOD_JSWD : mod->BSIM4DjctSidewallSatCurDensity = value->rValue; mod->BSIM4DjctSidewallSatCurDensityGiven = TRUE; break; case BSIM4_MOD_JSWGD : mod->BSIM4DjctGateSidewallSatCurDensity = value->rValue; mod->BSIM4DjctGateSidewallSatCurDensityGiven = TRUE; break; case BSIM4_MOD_PBD : mod->BSIM4DbulkJctPotential = value->rValue; mod->BSIM4DbulkJctPotentialGiven = TRUE; break; case BSIM4_MOD_MJD : mod->BSIM4DbulkJctBotGradingCoeff = value->rValue; mod->BSIM4DbulkJctBotGradingCoeffGiven = TRUE; break; case BSIM4_MOD_PBSWD : mod->BSIM4DsidewallJctPotential = value->rValue; mod->BSIM4DsidewallJctPotentialGiven = TRUE; break; case BSIM4_MOD_MJSWD : mod->BSIM4DbulkJctSideGradingCoeff = value->rValue; mod->BSIM4DbulkJctSideGradingCoeffGiven = TRUE; break; case BSIM4_MOD_CJD : mod->BSIM4DunitAreaJctCap = value->rValue; mod->BSIM4DunitAreaJctCapGiven = TRUE; break; case BSIM4_MOD_CJSWD : mod->BSIM4DunitLengthSidewallJctCap = value->rValue; mod->BSIM4DunitLengthSidewallJctCapGiven = TRUE; break; case BSIM4_MOD_NJD : mod->BSIM4DjctEmissionCoeff = value->rValue; mod->BSIM4DjctEmissionCoeffGiven = TRUE; break; case BSIM4_MOD_PBSWGD : mod->BSIM4DGatesidewallJctPotential = value->rValue; mod->BSIM4DGatesidewallJctPotentialGiven = TRUE; break; case BSIM4_MOD_MJSWGD : mod->BSIM4DbulkJctGateSideGradingCoeff = value->rValue; mod->BSIM4DbulkJctGateSideGradingCoeffGiven = TRUE; break; case BSIM4_MOD_CJSWGD : mod->BSIM4DunitLengthGateSidewallJctCap = value->rValue; mod->BSIM4DunitLengthGateSidewallJctCapGiven = TRUE; break; case BSIM4_MOD_XTID : mod->BSIM4DjctTempExponent = value->rValue; mod->BSIM4DjctTempExponentGiven = TRUE; break; case BSIM4_MOD_LINT : mod->BSIM4Lint = value->rValue; mod->BSIM4LintGiven = TRUE; break; case BSIM4_MOD_LL : mod->BSIM4Ll = value->rValue; mod->BSIM4LlGiven = TRUE; break; case BSIM4_MOD_LLC : mod->BSIM4Llc = value->rValue; mod->BSIM4LlcGiven = TRUE; break; case BSIM4_MOD_LLN : mod->BSIM4Lln = value->rValue; mod->BSIM4LlnGiven = TRUE; break; case BSIM4_MOD_LW : mod->BSIM4Lw = value->rValue; mod->BSIM4LwGiven = TRUE; break; case BSIM4_MOD_LWC : mod->BSIM4Lwc = value->rValue; mod->BSIM4LwcGiven = TRUE; break; case BSIM4_MOD_LWN : mod->BSIM4Lwn = value->rValue; mod->BSIM4LwnGiven = TRUE; break; case BSIM4_MOD_LWL : mod->BSIM4Lwl = value->rValue; mod->BSIM4LwlGiven = TRUE; break; case BSIM4_MOD_LWLC : mod->BSIM4Lwlc = value->rValue; mod->BSIM4LwlcGiven = TRUE; break; case BSIM4_MOD_LMIN : mod->BSIM4Lmin = value->rValue; mod->BSIM4LminGiven = TRUE; break; case BSIM4_MOD_LMAX : mod->BSIM4Lmax = value->rValue; mod->BSIM4LmaxGiven = TRUE; break; case BSIM4_MOD_WINT : mod->BSIM4Wint = value->rValue; mod->BSIM4WintGiven = TRUE; break; case BSIM4_MOD_WL : mod->BSIM4Wl = value->rValue; mod->BSIM4WlGiven = TRUE; break; case BSIM4_MOD_WLC : mod->BSIM4Wlc = value->rValue; mod->BSIM4WlcGiven = TRUE; break; case BSIM4_MOD_WLN : mod->BSIM4Wln = value->rValue; mod->BSIM4WlnGiven = TRUE; break; case BSIM4_MOD_WW : mod->BSIM4Ww = value->rValue; mod->BSIM4WwGiven = TRUE; break; case BSIM4_MOD_WWC : mod->BSIM4Wwc = value->rValue; mod->BSIM4WwcGiven = TRUE; break; case BSIM4_MOD_WWN : mod->BSIM4Wwn = value->rValue; mod->BSIM4WwnGiven = TRUE; break; case BSIM4_MOD_WWL : mod->BSIM4Wwl = value->rValue; mod->BSIM4WwlGiven = TRUE; break; case BSIM4_MOD_WWLC : mod->BSIM4Wwlc = value->rValue; mod->BSIM4WwlcGiven = TRUE; break; case BSIM4_MOD_WMIN : mod->BSIM4Wmin = value->rValue; mod->BSIM4WminGiven = TRUE; break; case BSIM4_MOD_WMAX : mod->BSIM4Wmax = value->rValue; mod->BSIM4WmaxGiven = TRUE; break; case BSIM4_MOD_NOIA : mod->BSIM4oxideTrapDensityA = value->rValue; mod->BSIM4oxideTrapDensityAGiven = TRUE; break; case BSIM4_MOD_NOIB : mod->BSIM4oxideTrapDensityB = value->rValue; mod->BSIM4oxideTrapDensityBGiven = TRUE; break; case BSIM4_MOD_NOIC : mod->BSIM4oxideTrapDensityC = value->rValue; mod->BSIM4oxideTrapDensityCGiven = TRUE; break; case BSIM4_MOD_EM : mod->BSIM4em = value->rValue; mod->BSIM4emGiven = TRUE; break; case BSIM4_MOD_EF : mod->BSIM4ef = value->rValue; mod->BSIM4efGiven = TRUE; break; case BSIM4_MOD_AF : mod->BSIM4af = value->rValue; mod->BSIM4afGiven = TRUE; break; case BSIM4_MOD_KF : mod->BSIM4kf = value->rValue; mod->BSIM4kfGiven = TRUE; break; case BSIM4_MOD_VGS_MAX: mod->BSIM4vgsMax = value->rValue; mod->BSIM4vgsMaxGiven = TRUE; break; case BSIM4_MOD_VGD_MAX: mod->BSIM4vgdMax = value->rValue; mod->BSIM4vgdMaxGiven = TRUE; break; case BSIM4_MOD_VGB_MAX: mod->BSIM4vgbMax = value->rValue; mod->BSIM4vgbMaxGiven = TRUE; break; case BSIM4_MOD_VDS_MAX: mod->BSIM4vdsMax = value->rValue; mod->BSIM4vdsMaxGiven = TRUE; break; case BSIM4_MOD_VBS_MAX: mod->BSIM4vbsMax = value->rValue; mod->BSIM4vbsMaxGiven = TRUE; break; case BSIM4_MOD_VBD_MAX: mod->BSIM4vbdMax = value->rValue; mod->BSIM4vbdMaxGiven = TRUE; break; case BSIM4_MOD_VGSR_MAX: mod->BSIM4vgsrMax = value->rValue; mod->BSIM4vgsrMaxGiven = TRUE; break; case BSIM4_MOD_VGDR_MAX: mod->BSIM4vgdrMax = value->rValue; mod->BSIM4vgdrMaxGiven = TRUE; break; case BSIM4_MOD_VGBR_MAX: mod->BSIM4vgbrMax = value->rValue; mod->BSIM4vgbrMaxGiven = TRUE; break; case BSIM4_MOD_VBSR_MAX: mod->BSIM4vbsrMax = value->rValue; mod->BSIM4vbsrMaxGiven = TRUE; break; case BSIM4_MOD_VBDR_MAX: mod->BSIM4vbdrMax = value->rValue; mod->BSIM4vbdrMaxGiven = TRUE; break; case BSIM4_MOD_NMOS : if(value->iValue) { mod->BSIM4type = 1; mod->BSIM4typeGiven = TRUE; } break; case BSIM4_MOD_PMOS : if(value->iValue) { mod->BSIM4type = - 1; mod->BSIM4typeGiven = TRUE; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4/bsim4def.h0000644000175000017500000036252613546075722022065 0ustar carstencarsten/* ****************************************************************************** * BSIM4 4.8.1 released by Chetan Kumar Dabhi 2/15/2017 * * BSIM4 Model Equations * ****************************************************************************** ****************************************************************************** * Copyright 2017 Regents of the University of California. * * All rights reserved. * * * * Project Director: Prof. Chenming Hu. * * Authors: Gary W. Ng, Weidong Liu, Xuemei Xi, Mohan Dunga, Wenwei Yang * * Ali Niknejad, Shivendra Singh Parihar, Chetan Kumar Dabhi * * Yogesh Singh Chauhan, Sayeef Salahuddin, Chenming Hu * ****************************************************************************** ****************************************************************************** * CMC In-Code Statement * * * * The Developer agrees that the following statement will appear in the * * model code that has been adopted as a CMC Standard. * * * * Software is distributed as is, completely without warranty or service * * support. The University of California and its employees are not liable * * for the condition or performance of the software. * * * * The University of California owns the copyright and grants users a * * perpetual, irrevocable, worldwide, non-exclusive, royalty-free license * * with respect to the software as set forth below. * * * * The University of California hereby disclaims all implied warranties. * * * * The University of California grants the users the right to modify, * * copy, and redistribute the software and documentation, both within * * the user's organization and externally, subject to the following * * restrictions: * * * * 1. The users agree not to charge for the University of California code * * itself but may charge for additions, extensions, or support. * * * * 2. In any product based on the software, the users agree to * * acknowledge the University of California that developed the * * software. This acknowledgment shall appear in the product * * documentation. * * * * 3. Redistributions to others of source code and documentation must * * retain the copyright notice, disclaimer, and list of conditions. * * * * 4. Redistributions to others in binary form must reproduce the * * copyright notice, disclaimer, and list of conditions in the * * documentation and/or other materials provided with the * * distribution. * * * * Agreed to on ______Feb. 15, 2017______________ * * * * By: ____University of California, Berkeley___ * * ____Chenming Hu__________________________ * * ____Professor in Graduate School ________ * * * ****************************************************************************** */ #ifndef BSIM4 #define BSIM4 #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" typedef struct sBSIM4instance { struct GENinstance gen; #define BSIM4modPtr(inst) ((struct sBSIM4model *)((inst)->gen.GENmodPtr)) #define BSIM4nextInstance(inst) ((struct sBSIM4instance *)((inst)->gen.GENnextInstance)) #define BSIM4name gen.GENname #define BSIM4states gen.GENstate const int BSIM4dNode; const int BSIM4gNodeExt; const int BSIM4sNode; const int BSIM4bNode; int BSIM4dNodePrime; int BSIM4gNodePrime; int BSIM4gNodeMid; int BSIM4sNodePrime; int BSIM4bNodePrime; int BSIM4dbNode; int BSIM4sbNode; int BSIM4qNode; double BSIM4ueff; double BSIM4thetavth; double BSIM4von; double BSIM4vdsat; double BSIM4cgdo; double BSIM4qgdo; double BSIM4cgso; double BSIM4qgso; double BSIM4grbsb; double BSIM4grbdb; double BSIM4grbpb; double BSIM4grbps; double BSIM4grbpd; double BSIM4vjsmFwd; double BSIM4vjsmRev; double BSIM4vjdmFwd; double BSIM4vjdmRev; double BSIM4XExpBVS; double BSIM4XExpBVD; double BSIM4SslpFwd; double BSIM4SslpRev; double BSIM4DslpFwd; double BSIM4DslpRev; double BSIM4IVjsmFwd; double BSIM4IVjsmRev; double BSIM4IVjdmFwd; double BSIM4IVjdmRev; double BSIM4grgeltd; double BSIM4Pseff; double BSIM4Pdeff; double BSIM4Aseff; double BSIM4Adeff; double BSIM4l; double BSIM4w; double BSIM4drainArea; double BSIM4sourceArea; double BSIM4drainSquares; double BSIM4sourceSquares; double BSIM4drainPerimeter; double BSIM4sourcePerimeter; double BSIM4sourceConductance; double BSIM4drainConductance; /* stress effect instance param */ double BSIM4sa; double BSIM4sb; double BSIM4sd; double BSIM4sca; double BSIM4scb; double BSIM4scc; double BSIM4sc; double BSIM4rbdb; double BSIM4rbsb; double BSIM4rbpb; double BSIM4rbps; double BSIM4rbpd; double BSIM4delvto; double BSIM4mulu0; double BSIM4xgw; double BSIM4ngcon; /* added here to account stress effect instance dependence */ double BSIM4u0temp; double BSIM4vsattemp; double BSIM4vth0; double BSIM4vfb; double BSIM4vfbzb; double BSIM4vtfbphi1; double BSIM4vtfbphi2; double BSIM4k2; double BSIM4vbsc; double BSIM4k2ox; double BSIM4eta0; double BSIM4toxp; double BSIM4coxp; double BSIM4icVDS; double BSIM4icVGS; double BSIM4icVBS; double BSIM4m; double BSIM4nf; int BSIM4off; int BSIM4mode; int BSIM4trnqsMod; int BSIM4acnqsMod; int BSIM4rbodyMod; int BSIM4rgateMod; int BSIM4geoMod; int BSIM4rgeoMod; int BSIM4min; /* OP point */ double BSIM4Vgsteff; double BSIM4vgs_eff; double BSIM4vgd_eff; double BSIM4dvgs_eff_dvg; double BSIM4dvgd_eff_dvg; double BSIM4Vdseff; double BSIM4nstar; double BSIM4Abulk; double BSIM4EsatL; double BSIM4AbovVgst2Vtm; double BSIM4qinv; double BSIM4cd; double BSIM4cbs; double BSIM4cbd; double BSIM4csub; double BSIM4Igidl; double BSIM4Igisl; double BSIM4gm; double BSIM4gds; double BSIM4gmbs; double BSIM4gbd; double BSIM4gbs; double BSIM4noiGd0; /* tnoiMod=2 (v4.7) */ double BSIM4Coxeff; double BSIM4gbbs; double BSIM4gbgs; double BSIM4gbds; double BSIM4ggidld; double BSIM4ggidlg; double BSIM4ggidls; double BSIM4ggidlb; double BSIM4ggisld; double BSIM4ggislg; double BSIM4ggisls; double BSIM4ggislb; double BSIM4Igcs; double BSIM4gIgcsg; double BSIM4gIgcsd; double BSIM4gIgcss; double BSIM4gIgcsb; double BSIM4Igcd; double BSIM4gIgcdg; double BSIM4gIgcdd; double BSIM4gIgcds; double BSIM4gIgcdb; double BSIM4Igs; double BSIM4gIgsg; double BSIM4gIgss; double BSIM4Igd; double BSIM4gIgdg; double BSIM4gIgdd; double BSIM4Igb; double BSIM4gIgbg; double BSIM4gIgbd; double BSIM4gIgbs; double BSIM4gIgbb; double BSIM4grdsw; double BSIM4IdovVds; double BSIM4gcrg; double BSIM4gcrgd; double BSIM4gcrgg; double BSIM4gcrgs; double BSIM4gcrgb; double BSIM4gstot; double BSIM4gstotd; double BSIM4gstotg; double BSIM4gstots; double BSIM4gstotb; double BSIM4gdtot; double BSIM4gdtotd; double BSIM4gdtotg; double BSIM4gdtots; double BSIM4gdtotb; double BSIM4cggb; double BSIM4cgdb; double BSIM4cgsb; double BSIM4cbgb; double BSIM4cbdb; double BSIM4cbsb; double BSIM4cdgb; double BSIM4cddb; double BSIM4cdsb; double BSIM4csgb; double BSIM4csdb; double BSIM4cssb; double BSIM4cgbb; double BSIM4cdbb; double BSIM4csbb; double BSIM4cbbb; double BSIM4capbd; double BSIM4capbs; double BSIM4cqgb; double BSIM4cqdb; double BSIM4cqsb; double BSIM4cqbb; double BSIM4qgate; double BSIM4qbulk; double BSIM4qdrn; double BSIM4qsrc; double BSIM4qdef; double BSIM4qchqs; double BSIM4taunet; double BSIM4gtau; double BSIM4gtg; double BSIM4gtd; double BSIM4gts; double BSIM4gtb; double BSIM4SjctTempRevSatCur; double BSIM4DjctTempRevSatCur; double BSIM4SswTempRevSatCur; double BSIM4DswTempRevSatCur; double BSIM4SswgTempRevSatCur; double BSIM4DswgTempRevSatCur; struct bsim4SizeDependParam *pParam; unsigned BSIM4lGiven :1; unsigned BSIM4wGiven :1; unsigned BSIM4mGiven :1; unsigned BSIM4nfGiven :1; unsigned BSIM4minGiven :1; unsigned BSIM4drainAreaGiven :1; unsigned BSIM4sourceAreaGiven :1; unsigned BSIM4drainSquaresGiven :1; unsigned BSIM4sourceSquaresGiven :1; unsigned BSIM4drainPerimeterGiven :1; unsigned BSIM4sourcePerimeterGiven :1; unsigned BSIM4saGiven :1; unsigned BSIM4sbGiven :1; unsigned BSIM4sdGiven :1; unsigned BSIM4scaGiven :1; unsigned BSIM4scbGiven :1; unsigned BSIM4sccGiven :1; unsigned BSIM4scGiven :1; unsigned BSIM4rbdbGiven :1; unsigned BSIM4rbsbGiven :1; unsigned BSIM4rbpbGiven :1; unsigned BSIM4rbpdGiven :1; unsigned BSIM4rbpsGiven :1; unsigned BSIM4delvtoGiven :1; unsigned BSIM4mulu0Given :1; unsigned BSIM4xgwGiven :1; unsigned BSIM4ngconGiven :1; unsigned BSIM4icVDSGiven :1; unsigned BSIM4icVGSGiven :1; unsigned BSIM4icVBSGiven :1; unsigned BSIM4trnqsModGiven :1; unsigned BSIM4acnqsModGiven :1; unsigned BSIM4rbodyModGiven :1; unsigned BSIM4rgateModGiven :1; unsigned BSIM4geoModGiven :1; unsigned BSIM4rgeoModGiven :1; double *BSIM4DPdPtr; double *BSIM4DPdpPtr; double *BSIM4DPgpPtr; double *BSIM4DPgmPtr; double *BSIM4DPspPtr; double *BSIM4DPbpPtr; double *BSIM4DPdbPtr; double *BSIM4DdPtr; double *BSIM4DdpPtr; double *BSIM4GPdpPtr; double *BSIM4GPgpPtr; double *BSIM4GPgmPtr; double *BSIM4GPgePtr; double *BSIM4GPspPtr; double *BSIM4GPbpPtr; double *BSIM4GMdpPtr; double *BSIM4GMgpPtr; double *BSIM4GMgmPtr; double *BSIM4GMgePtr; double *BSIM4GMspPtr; double *BSIM4GMbpPtr; double *BSIM4GEdpPtr; double *BSIM4GEgpPtr; double *BSIM4GEgmPtr; double *BSIM4GEgePtr; double *BSIM4GEspPtr; double *BSIM4GEbpPtr; double *BSIM4SPdpPtr; double *BSIM4SPgpPtr; double *BSIM4SPgmPtr; double *BSIM4SPsPtr; double *BSIM4SPspPtr; double *BSIM4SPbpPtr; double *BSIM4SPsbPtr; double *BSIM4SspPtr; double *BSIM4SsPtr; double *BSIM4BPdpPtr; double *BSIM4BPgpPtr; double *BSIM4BPgmPtr; double *BSIM4BPspPtr; double *BSIM4BPdbPtr; double *BSIM4BPbPtr; double *BSIM4BPsbPtr; double *BSIM4BPbpPtr; double *BSIM4DBdpPtr; double *BSIM4DBdbPtr; double *BSIM4DBbpPtr; double *BSIM4DBbPtr; double *BSIM4SBspPtr; double *BSIM4SBbpPtr; double *BSIM4SBbPtr; double *BSIM4SBsbPtr; double *BSIM4BdbPtr; double *BSIM4BbpPtr; double *BSIM4BsbPtr; double *BSIM4BbPtr; double *BSIM4DgpPtr; double *BSIM4DspPtr; double *BSIM4DbpPtr; double *BSIM4SdpPtr; double *BSIM4SgpPtr; double *BSIM4SbpPtr; double *BSIM4QdpPtr; double *BSIM4QgpPtr; double *BSIM4QspPtr; double *BSIM4QbpPtr; double *BSIM4QqPtr; double *BSIM4DPqPtr; double *BSIM4GPqPtr; double *BSIM4SPqPtr; #ifdef USE_OMP /* per instance storage of results, to update matrix at a later stge */ double BSIM4rhsdPrime; double BSIM4rhsgPrime; double BSIM4rhsgExt; double BSIM4grhsMid; double BSIM4rhsbPrime; double BSIM4rhssPrime; double BSIM4rhsdb; double BSIM4rhssb; double BSIM4rhsd; double BSIM4rhss; double BSIM4rhsq; double BSIM4_1; double BSIM4_2; double BSIM4_3; double BSIM4_4; double BSIM4_5; double BSIM4_6; double BSIM4_7; double BSIM4_8; double BSIM4_9; double BSIM4_10; double BSIM4_11; double BSIM4_12; double BSIM4_13; double BSIM4_14; double BSIM4_15; double BSIM4_16; double BSIM4_17; double BSIM4_18; double BSIM4_19; double BSIM4_20; double BSIM4_21; double BSIM4_22; double BSIM4_23; double BSIM4_24; double BSIM4_25; double BSIM4_26; double BSIM4_27; double BSIM4_28; double BSIM4_29; double BSIM4_30; double BSIM4_31; double BSIM4_32; double BSIM4_33; double BSIM4_34; double BSIM4_35; double BSIM4_36; double BSIM4_37; double BSIM4_38; double BSIM4_39; double BSIM4_40; double BSIM4_41; double BSIM4_42; double BSIM4_43; double BSIM4_44; double BSIM4_45; double BSIM4_46; double BSIM4_47; double BSIM4_48; double BSIM4_49; double BSIM4_50; double BSIM4_51; double BSIM4_52; double BSIM4_53; double BSIM4_54; double BSIM4_55; double BSIM4_56; double BSIM4_57; double BSIM4_58; double BSIM4_59; double BSIM4_60; double BSIM4_61; double BSIM4_62; double BSIM4_63; double BSIM4_64; double BSIM4_65; double BSIM4_66; double BSIM4_67; double BSIM4_68; double BSIM4_69; double BSIM4_70; double BSIM4_71; double BSIM4_72; double BSIM4_73; double BSIM4_74; double BSIM4_75; double BSIM4_76; double BSIM4_77; double BSIM4_78; double BSIM4_79; double BSIM4_80; double BSIM4_81; double BSIM4_82; double BSIM4_83; double BSIM4_84; double BSIM4_85; double BSIM4_86; double BSIM4_87; double BSIM4_88; double BSIM4_89; double BSIM4_90; double BSIM4_91; double BSIM4_92; double BSIM4_93; double BSIM4_94; double BSIM4_95; double BSIM4_96; double BSIM4_97; double BSIM4_98; double BSIM4_99; double BSIM4_100; double BSIM4_101; double BSIM4_102; double BSIM4_103; #endif #define BSIM4vbd BSIM4states+ 0 #define BSIM4vbs BSIM4states+ 1 #define BSIM4vgs BSIM4states+ 2 #define BSIM4vds BSIM4states+ 3 #define BSIM4vdbs BSIM4states+ 4 #define BSIM4vdbd BSIM4states+ 5 #define BSIM4vsbs BSIM4states+ 6 #define BSIM4vges BSIM4states+ 7 #define BSIM4vgms BSIM4states+ 8 #define BSIM4vses BSIM4states+ 9 #define BSIM4vdes BSIM4states+ 10 #define BSIM4qb BSIM4states+ 11 #define BSIM4cqb BSIM4states+ 12 #define BSIM4qg BSIM4states+ 13 #define BSIM4cqg BSIM4states+ 14 #define BSIM4qd BSIM4states+ 15 #define BSIM4cqd BSIM4states+ 16 #define BSIM4qgmid BSIM4states+ 17 #define BSIM4cqgmid BSIM4states+ 18 #define BSIM4qbs BSIM4states+ 19 #define BSIM4cqbs BSIM4states+ 20 #define BSIM4qbd BSIM4states+ 21 #define BSIM4cqbd BSIM4states+ 22 #define BSIM4qcheq BSIM4states+ 23 #define BSIM4cqcheq BSIM4states+ 24 #define BSIM4qcdump BSIM4states+ 25 #define BSIM4cqcdump BSIM4states+ 26 #define BSIM4qdef BSIM4states+ 27 #define BSIM4qs BSIM4states+ 28 #define BSIM4numStates 29 /* indices to the array of BSIM4 NOISE SOURCES */ #define BSIM4RDNOIZ 0 #define BSIM4RSNOIZ 1 #define BSIM4RGNOIZ 2 #define BSIM4RBPSNOIZ 3 #define BSIM4RBPDNOIZ 4 #define BSIM4RBPBNOIZ 5 #define BSIM4RBSBNOIZ 6 #define BSIM4RBDBNOIZ 7 #define BSIM4IDNOIZ 8 #define BSIM4FLNOIZ 9 #define BSIM4IGSNOIZ 10 #define BSIM4IGDNOIZ 11 #define BSIM4IGBNOIZ 12 #define BSIM4CORLNOIZ 13 #define BSIM4TOTNOIZ 14 #define BSIM4NSRCS 15 /* Number of BSIM4 noise sources */ #ifndef NONOISE double BSIM4nVar[NSTATVARS][BSIM4NSRCS]; #else /* NONOISE */ double **BSIM4nVar; #endif /* NONOISE */ } BSIM4instance ; struct bsim4SizeDependParam { double Width; double Length; double NFinger; double BSIM4cdsc; double BSIM4cdscb; double BSIM4cdscd; double BSIM4cit; double BSIM4nfactor; double BSIM4xj; double BSIM4vsat; double BSIM4at; double BSIM4a0; double BSIM4ags; double BSIM4a1; double BSIM4a2; double BSIM4keta; double BSIM4nsub; double BSIM4ndep; double BSIM4nsd; double BSIM4phin; double BSIM4ngate; double BSIM4gamma1; double BSIM4gamma2; double BSIM4vbx; double BSIM4vbi; double BSIM4vbm; double BSIM4xt; double BSIM4phi; double BSIM4litl; double BSIM4k1; double BSIM4kt1; double BSIM4kt1l; double BSIM4kt2; double BSIM4k2; double BSIM4k3; double BSIM4k3b; double BSIM4w0; double BSIM4dvtp0; double BSIM4dvtp1; double BSIM4dvtp2; /* New DIBL/Rout */ double BSIM4dvtp3; double BSIM4dvtp4; double BSIM4dvtp5; double BSIM4lpe0; double BSIM4lpeb; double BSIM4dvt0; double BSIM4dvt1; double BSIM4dvt2; double BSIM4dvt0w; double BSIM4dvt1w; double BSIM4dvt2w; double BSIM4drout; double BSIM4dsub; double BSIM4vth0; double BSIM4ua; double BSIM4ua1; double BSIM4ub; double BSIM4ub1; double BSIM4uc; double BSIM4uc1; double BSIM4ud; double BSIM4ud1; double BSIM4up; double BSIM4lp; double BSIM4u0; double BSIM4eu; double BSIM4ucs; double BSIM4ute; double BSIM4ucste; double BSIM4voff; double BSIM4tvoff; double BSIM4tnfactor; /* v4.7 Temp dep of leakage current */ double BSIM4teta0; /* v4.7 temp dep of leakage current */ double BSIM4tvoffcv; /* v4.7 temp dep of leakage current */ double BSIM4minv; double BSIM4minvcv; double BSIM4vfb; double BSIM4delta; double BSIM4rdsw; double BSIM4rds0; double BSIM4rs0; double BSIM4rd0; double BSIM4rsw; double BSIM4rdw; double BSIM4prwg; double BSIM4prwb; double BSIM4prt; double BSIM4eta0; double BSIM4etab; double BSIM4pclm; double BSIM4pdibl1; double BSIM4pdibl2; double BSIM4pdiblb; double BSIM4fprout; double BSIM4pdits; double BSIM4pditsd; double BSIM4pscbe1; double BSIM4pscbe2; double BSIM4pvag; double BSIM4wr; double BSIM4dwg; double BSIM4dwb; double BSIM4b0; double BSIM4b1; double BSIM4alpha0; double BSIM4alpha1; double BSIM4beta0; double BSIM4agidl; double BSIM4bgidl; double BSIM4cgidl; double BSIM4egidl; double BSIM4fgidl; /* v4.7 New GIDL/GISL */ double BSIM4kgidl; /* v4.7 New GIDL/GISL */ double BSIM4rgidl; /* v4.7 New GIDL/GISL */ double BSIM4agisl; double BSIM4bgisl; double BSIM4cgisl; double BSIM4egisl; double BSIM4fgisl; /* v4.7 New GIDL/GISL */ double BSIM4kgisl; /* v4.7 New GIDL/GISL */ double BSIM4rgisl; /* v4.7 New GIDL/GISL */ double BSIM4aigc; double BSIM4bigc; double BSIM4cigc; double BSIM4aigsd; double BSIM4bigsd; double BSIM4cigsd; double BSIM4aigs; double BSIM4bigs; double BSIM4cigs; double BSIM4aigd; double BSIM4bigd; double BSIM4cigd; double BSIM4aigbacc; double BSIM4bigbacc; double BSIM4cigbacc; double BSIM4aigbinv; double BSIM4bigbinv; double BSIM4cigbinv; double BSIM4nigc; double BSIM4nigbacc; double BSIM4nigbinv; double BSIM4ntox; double BSIM4eigbinv; double BSIM4pigcd; double BSIM4poxedge; double BSIM4xrcrg1; double BSIM4xrcrg2; double BSIM4lambda; /* overshoot */ double BSIM4vtl; /* thermal velocity limit */ double BSIM4xn; /* back scattering parameter */ double BSIM4lc; /* back scattering parameter */ double BSIM4tfactor; /* ballistic transportation factor */ double BSIM4vfbsdoff; /* S/D flatband offset voltage */ double BSIM4tvfbsdoff; /* added for stress effect */ double BSIM4ku0; double BSIM4kvth0; double BSIM4ku0temp; double BSIM4rho_ref; double BSIM4inv_od_ref; /* added for well proximity effect */ double BSIM4kvth0we; double BSIM4k2we; double BSIM4ku0we; /* CV model */ double BSIM4cgsl; double BSIM4cgdl; double BSIM4ckappas; double BSIM4ckappad; double BSIM4cf; double BSIM4clc; double BSIM4cle; double BSIM4vfbcv; double BSIM4noff; double BSIM4voffcv; double BSIM4acde; double BSIM4moin; /* Pre-calculated constants */ double BSIM4dw; double BSIM4dl; double BSIM4leff; double BSIM4weff; double BSIM4dwc; double BSIM4dlc; double BSIM4dwj; double BSIM4leffCV; double BSIM4weffCV; double BSIM4weffCJ; double BSIM4abulkCVfactor; double BSIM4cgso; double BSIM4cgdo; double BSIM4cgbo; double BSIM4u0temp; double BSIM4vsattemp; double BSIM4sqrtPhi; double BSIM4phis3; double BSIM4Xdep0; double BSIM4sqrtXdep0; double BSIM4theta0vb0; double BSIM4thetaRout; double BSIM4mstar; double BSIM4VgsteffVth; double BSIM4mstarcv; double BSIM4voffcbn; double BSIM4voffcbncv; double BSIM4rdswmin; double BSIM4rdwmin; double BSIM4rswmin; double BSIM4vfbsd; double BSIM4cof1; double BSIM4cof2; double BSIM4cof3; double BSIM4cof4; double BSIM4cdep0; double BSIM4ToxRatio; double BSIM4Aechvb; double BSIM4Bechvb; double BSIM4ToxRatioEdge; double BSIM4AechvbEdgeS; double BSIM4AechvbEdgeD; double BSIM4BechvbEdge; double BSIM4ldeb; double BSIM4k1ox; double BSIM4k2ox; double BSIM4vfbzbfactor; double BSIM4dvtp2factor; /* v4.7 */ struct bsim4SizeDependParam *pNext; }; typedef struct sBSIM4model { struct GENmodel gen; #define BSIM4modType gen.GENmodType #define BSIM4nextModel(inst) ((struct sBSIM4model *)((inst)->gen.GENnextModel)) #define BSIM4instances(inst) ((BSIM4instance *)((inst)->gen.GENinstances)) #define BSIM4modName gen.GENmodName int BSIM4type; int BSIM4mobMod; int BSIM4cvchargeMod; int BSIM4capMod; int BSIM4dioMod; int BSIM4trnqsMod; int BSIM4acnqsMod; int BSIM4fnoiMod; int BSIM4tnoiMod; int BSIM4rdsMod; int BSIM4rbodyMod; int BSIM4rgateMod; int BSIM4perMod; int BSIM4geoMod; int BSIM4rgeoMod; int BSIM4mtrlMod; int BSIM4mtrlCompatMod; /* v4.7 */ int BSIM4gidlMod; /* v4.7 New GIDL/GISL */ int BSIM4igcMod; int BSIM4igbMod; int BSIM4tempMod; int BSIM4binUnit; int BSIM4paramChk; char *BSIM4version; double BSIM4eot; double BSIM4vddeot; double BSIM4tempeot; double BSIM4leffeot; double BSIM4weffeot; double BSIM4ados; double BSIM4bdos; double BSIM4toxe; double BSIM4toxp; double BSIM4toxm; double BSIM4dtox; double BSIM4epsrox; double BSIM4cdsc; double BSIM4cdscb; double BSIM4cdscd; double BSIM4cit; double BSIM4nfactor; double BSIM4xj; double BSIM4vsat; double BSIM4at; double BSIM4a0; double BSIM4ags; double BSIM4a1; double BSIM4a2; double BSIM4keta; double BSIM4nsub; double BSIM4phig; double BSIM4epsrgate; double BSIM4easub; double BSIM4epsrsub; double BSIM4ni0sub; double BSIM4bg0sub; double BSIM4tbgasub; double BSIM4tbgbsub; double BSIM4ndep; double BSIM4nsd; double BSIM4phin; double BSIM4ngate; double BSIM4gamma1; double BSIM4gamma2; double BSIM4vbx; double BSIM4vbm; double BSIM4xt; double BSIM4k1; double BSIM4kt1; double BSIM4kt1l; double BSIM4kt2; double BSIM4k2; double BSIM4k3; double BSIM4k3b; double BSIM4w0; double BSIM4dvtp0; double BSIM4dvtp1; double BSIM4dvtp2; /* New DIBL/Rout */ double BSIM4dvtp3; double BSIM4dvtp4; double BSIM4dvtp5; double BSIM4lpe0; double BSIM4lpeb; double BSIM4dvt0; double BSIM4dvt1; double BSIM4dvt2; double BSIM4dvt0w; double BSIM4dvt1w; double BSIM4dvt2w; double BSIM4drout; double BSIM4dsub; double BSIM4vth0; double BSIM4eu; double BSIM4ucs; double BSIM4ua; double BSIM4ua1; double BSIM4ub; double BSIM4ub1; double BSIM4uc; double BSIM4uc1; double BSIM4ud; double BSIM4ud1; double BSIM4up; double BSIM4lp; double BSIM4u0; double BSIM4ute; double BSIM4ucste; double BSIM4voff; double BSIM4tvoff; double BSIM4tnfactor; /* v4.7 Temp dep of leakage current */ double BSIM4teta0; /* v4.7 temp dep of leakage current */ double BSIM4tvoffcv; /* v4.7 temp dep of leakage current */ double BSIM4minv; double BSIM4minvcv; double BSIM4voffl; double BSIM4voffcvl; double BSIM4delta; double BSIM4rdsw; double BSIM4rdswmin; double BSIM4rdwmin; double BSIM4rswmin; double BSIM4rsw; double BSIM4rdw; double BSIM4prwg; double BSIM4prwb; double BSIM4prt; double BSIM4eta0; double BSIM4etab; double BSIM4pclm; double BSIM4pdibl1; double BSIM4pdibl2; double BSIM4pdiblb; double BSIM4fprout; double BSIM4pdits; double BSIM4pditsd; double BSIM4pditsl; double BSIM4pscbe1; double BSIM4pscbe2; double BSIM4pvag; double BSIM4wr; double BSIM4dwg; double BSIM4dwb; double BSIM4b0; double BSIM4b1; double BSIM4alpha0; double BSIM4alpha1; double BSIM4beta0; double BSIM4agidl; double BSIM4bgidl; double BSIM4cgidl; double BSIM4egidl; double BSIM4fgidl; /* v4.7 New GIDL/GISL */ double BSIM4kgidl; /* v4.7 New GIDL/GISL */ double BSIM4rgidl; /* v4.7 New GIDL/GISL */ double BSIM4agisl; double BSIM4bgisl; double BSIM4cgisl; double BSIM4egisl; double BSIM4fgisl; /* v4.7 New GIDL/GISL */ double BSIM4kgisl; /* v4.7 New GIDL/GISL */ double BSIM4rgisl; /* v4.7 New GIDL/GISL */ double BSIM4aigc; double BSIM4bigc; double BSIM4cigc; double BSIM4aigsd; double BSIM4bigsd; double BSIM4cigsd; double BSIM4aigs; double BSIM4bigs; double BSIM4cigs; double BSIM4aigd; double BSIM4bigd; double BSIM4cigd; double BSIM4aigbacc; double BSIM4bigbacc; double BSIM4cigbacc; double BSIM4aigbinv; double BSIM4bigbinv; double BSIM4cigbinv; double BSIM4nigc; double BSIM4nigbacc; double BSIM4nigbinv; double BSIM4ntox; double BSIM4eigbinv; double BSIM4pigcd; double BSIM4poxedge; double BSIM4toxref; double BSIM4ijthdfwd; double BSIM4ijthsfwd; double BSIM4ijthdrev; double BSIM4ijthsrev; double BSIM4xjbvd; double BSIM4xjbvs; double BSIM4bvd; double BSIM4bvs; double BSIM4jtss; double BSIM4jtsd; double BSIM4jtssws; double BSIM4jtsswd; double BSIM4jtsswgs; double BSIM4jtsswgd; double BSIM4jtweff; double BSIM4njts; double BSIM4njtssw; double BSIM4njtsswg; double BSIM4njtsd; double BSIM4njtsswd; double BSIM4njtsswgd; double BSIM4xtss; double BSIM4xtsd; double BSIM4xtssws; double BSIM4xtsswd; double BSIM4xtsswgs; double BSIM4xtsswgd; double BSIM4tnjts; double BSIM4tnjtssw; double BSIM4tnjtsswg; double BSIM4tnjtsd; double BSIM4tnjtsswd; double BSIM4tnjtsswgd; double BSIM4vtss; double BSIM4vtsd; double BSIM4vtssws; double BSIM4vtsswd; double BSIM4vtsswgs; double BSIM4vtsswgd; double BSIM4xrcrg1; double BSIM4xrcrg2; double BSIM4lambda; double BSIM4vtl; double BSIM4lc; double BSIM4xn; double BSIM4vfbsdoff; /* S/D flatband offset voltage */ double BSIM4lintnoi; /* lint offset for noise calculation */ double BSIM4tvfbsdoff; double BSIM4vfb; double BSIM4gbmin; double BSIM4rbdb; double BSIM4rbsb; double BSIM4rbpb; double BSIM4rbps; double BSIM4rbpd; double BSIM4rbps0; double BSIM4rbpsl; double BSIM4rbpsw; double BSIM4rbpsnf; double BSIM4rbpd0; double BSIM4rbpdl; double BSIM4rbpdw; double BSIM4rbpdnf; double BSIM4rbpbx0; double BSIM4rbpbxl; double BSIM4rbpbxw; double BSIM4rbpbxnf; double BSIM4rbpby0; double BSIM4rbpbyl; double BSIM4rbpbyw; double BSIM4rbpbynf; double BSIM4rbsbx0; double BSIM4rbsby0; double BSIM4rbdbx0; double BSIM4rbdby0; double BSIM4rbsdbxl; double BSIM4rbsdbxw; double BSIM4rbsdbxnf; double BSIM4rbsdbyl; double BSIM4rbsdbyw; double BSIM4rbsdbynf; double BSIM4tnoia; double BSIM4tnoib; double BSIM4tnoic; double BSIM4rnoia; double BSIM4rnoib; double BSIM4rnoic; double BSIM4ntnoi; /* CV model and Parasitics */ double BSIM4cgsl; double BSIM4cgdl; double BSIM4ckappas; double BSIM4ckappad; double BSIM4cf; double BSIM4vfbcv; double BSIM4clc; double BSIM4cle; double BSIM4dwc; double BSIM4dlc; double BSIM4xw; double BSIM4xl; double BSIM4dlcig; double BSIM4dlcigd; double BSIM4dwj; double BSIM4noff; double BSIM4voffcv; double BSIM4acde; double BSIM4moin; double BSIM4tcj; double BSIM4tcjsw; double BSIM4tcjswg; double BSIM4tpb; double BSIM4tpbsw; double BSIM4tpbswg; double BSIM4dmcg; double BSIM4dmci; double BSIM4dmdg; double BSIM4dmcgt; double BSIM4xgw; double BSIM4xgl; double BSIM4rshg; double BSIM4ngcon; /* Length Dependence */ double BSIM4lcdsc; double BSIM4lcdscb; double BSIM4lcdscd; double BSIM4lcit; double BSIM4lnfactor; double BSIM4lxj; double BSIM4lvsat; double BSIM4lat; double BSIM4la0; double BSIM4lags; double BSIM4la1; double BSIM4la2; double BSIM4lketa; double BSIM4lnsub; double BSIM4lndep; double BSIM4lnsd; double BSIM4lphin; double BSIM4lngate; double BSIM4lgamma1; double BSIM4lgamma2; double BSIM4lvbx; double BSIM4lvbm; double BSIM4lxt; double BSIM4lk1; double BSIM4lkt1; double BSIM4lkt1l; double BSIM4lkt2; double BSIM4lk2; double BSIM4lk3; double BSIM4lk3b; double BSIM4lw0; double BSIM4ldvtp0; double BSIM4ldvtp1; double BSIM4ldvtp2; /* New DIBL/Rout */ double BSIM4ldvtp3; double BSIM4ldvtp4; double BSIM4ldvtp5; double BSIM4llpe0; double BSIM4llpeb; double BSIM4ldvt0; double BSIM4ldvt1; double BSIM4ldvt2; double BSIM4ldvt0w; double BSIM4ldvt1w; double BSIM4ldvt2w; double BSIM4ldrout; double BSIM4ldsub; double BSIM4lvth0; double BSIM4lua; double BSIM4lua1; double BSIM4lub; double BSIM4lub1; double BSIM4luc; double BSIM4luc1; double BSIM4lud; double BSIM4lud1; double BSIM4lup; double BSIM4llp; double BSIM4lu0; double BSIM4leu; double BSIM4lucs; double BSIM4lute; double BSIM4lucste; double BSIM4lvoff; double BSIM4ltvoff; double BSIM4ltnfactor; /* v4.7 Temp dep of leakage current */ double BSIM4lteta0; /* v4.7 temp dep of leakage current */ double BSIM4ltvoffcv; /* v4.7 temp dep of leakage current */ double BSIM4lminv; double BSIM4lminvcv; double BSIM4ldelta; double BSIM4lrdsw; double BSIM4lrsw; double BSIM4lrdw; double BSIM4lprwg; double BSIM4lprwb; double BSIM4lprt; double BSIM4leta0; double BSIM4letab; double BSIM4lpclm; double BSIM4lpdibl1; double BSIM4lpdibl2; double BSIM4lpdiblb; double BSIM4lfprout; double BSIM4lpdits; double BSIM4lpditsd; double BSIM4lpscbe1; double BSIM4lpscbe2; double BSIM4lpvag; double BSIM4lwr; double BSIM4ldwg; double BSIM4ldwb; double BSIM4lb0; double BSIM4lb1; double BSIM4lalpha0; double BSIM4lalpha1; double BSIM4lbeta0; double BSIM4lvfb; double BSIM4lagidl; double BSIM4lbgidl; double BSIM4lcgidl; double BSIM4legidl; double BSIM4lfgidl; /* v4.7 New GIDL/GISL */ double BSIM4lkgidl; /* v4.7 New GIDL/GISL */ double BSIM4lrgidl; /* v4.7 New GIDL/GISL */ double BSIM4lagisl; double BSIM4lbgisl; double BSIM4lcgisl; double BSIM4legisl; double BSIM4lfgisl; /* v4.7 New GIDL/GISL */ double BSIM4lkgisl; /* v4.7 New GIDL/GISL */ double BSIM4lrgisl; /* v4.7 New GIDL/GISL */ double BSIM4laigc; double BSIM4lbigc; double BSIM4lcigc; double BSIM4laigsd; double BSIM4lbigsd; double BSIM4lcigsd; double BSIM4laigs; double BSIM4lbigs; double BSIM4lcigs; double BSIM4laigd; double BSIM4lbigd; double BSIM4lcigd; double BSIM4laigbacc; double BSIM4lbigbacc; double BSIM4lcigbacc; double BSIM4laigbinv; double BSIM4lbigbinv; double BSIM4lcigbinv; double BSIM4lnigc; double BSIM4lnigbacc; double BSIM4lnigbinv; double BSIM4lntox; double BSIM4leigbinv; double BSIM4lpigcd; double BSIM4lpoxedge; double BSIM4lxrcrg1; double BSIM4lxrcrg2; double BSIM4llambda; double BSIM4lvtl; double BSIM4lxn; double BSIM4lvfbsdoff; double BSIM4ltvfbsdoff; /* CV model */ double BSIM4lcgsl; double BSIM4lcgdl; double BSIM4lckappas; double BSIM4lckappad; double BSIM4lcf; double BSIM4lclc; double BSIM4lcle; double BSIM4lvfbcv; double BSIM4lnoff; double BSIM4lvoffcv; double BSIM4lacde; double BSIM4lmoin; /* Width Dependence */ double BSIM4wcdsc; double BSIM4wcdscb; double BSIM4wcdscd; double BSIM4wcit; double BSIM4wnfactor; double BSIM4wxj; double BSIM4wvsat; double BSIM4wat; double BSIM4wa0; double BSIM4wags; double BSIM4wa1; double BSIM4wa2; double BSIM4wketa; double BSIM4wnsub; double BSIM4wndep; double BSIM4wnsd; double BSIM4wphin; double BSIM4wngate; double BSIM4wgamma1; double BSIM4wgamma2; double BSIM4wvbx; double BSIM4wvbm; double BSIM4wxt; double BSIM4wk1; double BSIM4wkt1; double BSIM4wkt1l; double BSIM4wkt2; double BSIM4wk2; double BSIM4wk3; double BSIM4wk3b; double BSIM4ww0; double BSIM4wdvtp0; double BSIM4wdvtp1; double BSIM4wdvtp2; /* New DIBL/Rout */ double BSIM4wdvtp3; double BSIM4wdvtp4; double BSIM4wdvtp5; double BSIM4wlpe0; double BSIM4wlpeb; double BSIM4wdvt0; double BSIM4wdvt1; double BSIM4wdvt2; double BSIM4wdvt0w; double BSIM4wdvt1w; double BSIM4wdvt2w; double BSIM4wdrout; double BSIM4wdsub; double BSIM4wvth0; double BSIM4wua; double BSIM4wua1; double BSIM4wub; double BSIM4wub1; double BSIM4wuc; double BSIM4wuc1; double BSIM4wud; double BSIM4wud1; double BSIM4wup; double BSIM4wlp; double BSIM4wu0; double BSIM4weu; double BSIM4wucs; double BSIM4wute; double BSIM4wucste; double BSIM4wvoff; double BSIM4wtvoff; double BSIM4wtnfactor; /* v4.7 Temp dep of leakage current */ double BSIM4wteta0; /* v4.7 temp dep of leakage current */ double BSIM4wtvoffcv; /* v4.7 temp dep of leakage current */ double BSIM4wminv; double BSIM4wminvcv; double BSIM4wdelta; double BSIM4wrdsw; double BSIM4wrsw; double BSIM4wrdw; double BSIM4wprwg; double BSIM4wprwb; double BSIM4wprt; double BSIM4weta0; double BSIM4wetab; double BSIM4wpclm; double BSIM4wpdibl1; double BSIM4wpdibl2; double BSIM4wpdiblb; double BSIM4wfprout; double BSIM4wpdits; double BSIM4wpditsd; double BSIM4wpscbe1; double BSIM4wpscbe2; double BSIM4wpvag; double BSIM4wwr; double BSIM4wdwg; double BSIM4wdwb; double BSIM4wb0; double BSIM4wb1; double BSIM4walpha0; double BSIM4walpha1; double BSIM4wbeta0; double BSIM4wvfb; double BSIM4wagidl; double BSIM4wbgidl; double BSIM4wcgidl; double BSIM4wegidl; double BSIM4wfgidl; /* v4.7 New GIDL/GISL */ double BSIM4wkgidl; /* v4.7 New GIDL/GISL */ double BSIM4wrgidl; /* v4.7 New GIDL/GISL */ double BSIM4wagisl; double BSIM4wbgisl; double BSIM4wcgisl; double BSIM4wegisl; double BSIM4wfgisl; /* v4.7 New GIDL/GISL */ double BSIM4wkgisl; /* v4.7 New GIDL/GISL */ double BSIM4wrgisl; /* v4.7 New GIDL/GISL */ double BSIM4waigc; double BSIM4wbigc; double BSIM4wcigc; double BSIM4waigsd; double BSIM4wbigsd; double BSIM4wcigsd; double BSIM4waigs; double BSIM4wbigs; double BSIM4wcigs; double BSIM4waigd; double BSIM4wbigd; double BSIM4wcigd; double BSIM4waigbacc; double BSIM4wbigbacc; double BSIM4wcigbacc; double BSIM4waigbinv; double BSIM4wbigbinv; double BSIM4wcigbinv; double BSIM4wnigc; double BSIM4wnigbacc; double BSIM4wnigbinv; double BSIM4wntox; double BSIM4weigbinv; double BSIM4wpigcd; double BSIM4wpoxedge; double BSIM4wxrcrg1; double BSIM4wxrcrg2; double BSIM4wlambda; double BSIM4wvtl; double BSIM4wxn; double BSIM4wvfbsdoff; double BSIM4wtvfbsdoff; /* CV model */ double BSIM4wcgsl; double BSIM4wcgdl; double BSIM4wckappas; double BSIM4wckappad; double BSIM4wcf; double BSIM4wclc; double BSIM4wcle; double BSIM4wvfbcv; double BSIM4wnoff; double BSIM4wvoffcv; double BSIM4wacde; double BSIM4wmoin; /* Cross-term Dependence */ double BSIM4pcdsc; double BSIM4pcdscb; double BSIM4pcdscd; double BSIM4pcit; double BSIM4pnfactor; double BSIM4pxj; double BSIM4pvsat; double BSIM4pat; double BSIM4pa0; double BSIM4pags; double BSIM4pa1; double BSIM4pa2; double BSIM4pketa; double BSIM4pnsub; double BSIM4pndep; double BSIM4pnsd; double BSIM4pphin; double BSIM4pngate; double BSIM4pgamma1; double BSIM4pgamma2; double BSIM4pvbx; double BSIM4pvbm; double BSIM4pxt; double BSIM4pk1; double BSIM4pkt1; double BSIM4pkt1l; double BSIM4pkt2; double BSIM4pk2; double BSIM4pk3; double BSIM4pk3b; double BSIM4pw0; double BSIM4pdvtp0; double BSIM4pdvtp1; double BSIM4pdvtp2; /* New DIBL/Rout */ double BSIM4pdvtp3; double BSIM4pdvtp4; double BSIM4pdvtp5; double BSIM4plpe0; double BSIM4plpeb; double BSIM4pdvt0; double BSIM4pdvt1; double BSIM4pdvt2; double BSIM4pdvt0w; double BSIM4pdvt1w; double BSIM4pdvt2w; double BSIM4pdrout; double BSIM4pdsub; double BSIM4pvth0; double BSIM4pua; double BSIM4pua1; double BSIM4pub; double BSIM4pub1; double BSIM4puc; double BSIM4puc1; double BSIM4pud; double BSIM4pud1; double BSIM4pup; double BSIM4plp; double BSIM4pu0; double BSIM4peu; double BSIM4pucs; double BSIM4pute; double BSIM4pucste; double BSIM4pvoff; double BSIM4ptvoff; double BSIM4ptnfactor; /* v4.7 Temp dep of leakage current */ double BSIM4pteta0; /* v4.7 temp dep of leakage current */ double BSIM4ptvoffcv; /* v4.7 temp dep of leakage current */ double BSIM4pminv; double BSIM4pminvcv; double BSIM4pdelta; double BSIM4prdsw; double BSIM4prsw; double BSIM4prdw; double BSIM4pprwg; double BSIM4pprwb; double BSIM4pprt; double BSIM4peta0; double BSIM4petab; double BSIM4ppclm; double BSIM4ppdibl1; double BSIM4ppdibl2; double BSIM4ppdiblb; double BSIM4pfprout; double BSIM4ppdits; double BSIM4ppditsd; double BSIM4ppscbe1; double BSIM4ppscbe2; double BSIM4ppvag; double BSIM4pwr; double BSIM4pdwg; double BSIM4pdwb; double BSIM4pb0; double BSIM4pb1; double BSIM4palpha0; double BSIM4palpha1; double BSIM4pbeta0; double BSIM4pvfb; double BSIM4pagidl; double BSIM4pbgidl; double BSIM4pcgidl; double BSIM4pegidl; double BSIM4pfgidl; /* v4.7 New GIDL/GISL */ double BSIM4pkgidl; /* v4.7 New GIDL/GISL */ double BSIM4prgidl; /* v4.7 New GIDL/GISL */ double BSIM4pagisl; double BSIM4pbgisl; double BSIM4pcgisl; double BSIM4pegisl; double BSIM4pfgisl; /* v4.7 New GIDL/GISL */ double BSIM4pkgisl; /* v4.7 New GIDL/GISL */ double BSIM4prgisl; /* v4.7 New GIDL/GISL */ double BSIM4paigc; double BSIM4pbigc; double BSIM4pcigc; double BSIM4paigsd; double BSIM4pbigsd; double BSIM4pcigsd; double BSIM4paigs; double BSIM4pbigs; double BSIM4pcigs; double BSIM4paigd; double BSIM4pbigd; double BSIM4pcigd; double BSIM4paigbacc; double BSIM4pbigbacc; double BSIM4pcigbacc; double BSIM4paigbinv; double BSIM4pbigbinv; double BSIM4pcigbinv; double BSIM4pnigc; double BSIM4pnigbacc; double BSIM4pnigbinv; double BSIM4pntox; double BSIM4peigbinv; double BSIM4ppigcd; double BSIM4ppoxedge; double BSIM4pxrcrg1; double BSIM4pxrcrg2; double BSIM4plambda; double BSIM4pvtl; double BSIM4pxn; double BSIM4pvfbsdoff; double BSIM4ptvfbsdoff; /* CV model */ double BSIM4pcgsl; double BSIM4pcgdl; double BSIM4pckappas; double BSIM4pckappad; double BSIM4pcf; double BSIM4pclc; double BSIM4pcle; double BSIM4pvfbcv; double BSIM4pnoff; double BSIM4pvoffcv; double BSIM4pacde; double BSIM4pmoin; double BSIM4tnom; double BSIM4cgso; double BSIM4cgdo; double BSIM4cgbo; double BSIM4xpart; double BSIM4cFringOut; double BSIM4cFringMax; double BSIM4sheetResistance; double BSIM4SjctSatCurDensity; double BSIM4DjctSatCurDensity; double BSIM4SjctSidewallSatCurDensity; double BSIM4DjctSidewallSatCurDensity; double BSIM4SjctGateSidewallSatCurDensity; double BSIM4DjctGateSidewallSatCurDensity; double BSIM4SbulkJctPotential; double BSIM4DbulkJctPotential; double BSIM4SbulkJctBotGradingCoeff; double BSIM4DbulkJctBotGradingCoeff; double BSIM4SbulkJctSideGradingCoeff; double BSIM4DbulkJctSideGradingCoeff; double BSIM4SbulkJctGateSideGradingCoeff; double BSIM4DbulkJctGateSideGradingCoeff; double BSIM4SsidewallJctPotential; double BSIM4DsidewallJctPotential; double BSIM4SGatesidewallJctPotential; double BSIM4DGatesidewallJctPotential; double BSIM4SunitAreaJctCap; double BSIM4DunitAreaJctCap; double BSIM4SunitLengthSidewallJctCap; double BSIM4DunitLengthSidewallJctCap; double BSIM4SunitLengthGateSidewallJctCap; double BSIM4DunitLengthGateSidewallJctCap; double BSIM4SjctEmissionCoeff; double BSIM4DjctEmissionCoeff; double BSIM4SjctTempExponent; double BSIM4DjctTempExponent; double BSIM4njtsstemp; double BSIM4njtsswstemp; double BSIM4njtsswgstemp; double BSIM4njtsdtemp; double BSIM4njtsswdtemp; double BSIM4njtsswgdtemp; double BSIM4Lint; double BSIM4Ll; double BSIM4Llc; double BSIM4Lln; double BSIM4Lw; double BSIM4Lwc; double BSIM4Lwn; double BSIM4Lwl; double BSIM4Lwlc; double BSIM4Lmin; double BSIM4Lmax; double BSIM4Wint; double BSIM4Wl; double BSIM4Wlc; double BSIM4Wln; double BSIM4Ww; double BSIM4Wwc; double BSIM4Wwn; double BSIM4Wwl; double BSIM4Wwlc; double BSIM4Wmin; double BSIM4Wmax; /* added for stress effect */ double BSIM4saref; double BSIM4sbref; double BSIM4wlod; double BSIM4ku0; double BSIM4kvsat; double BSIM4kvth0; double BSIM4tku0; double BSIM4llodku0; double BSIM4wlodku0; double BSIM4llodvth; double BSIM4wlodvth; double BSIM4lku0; double BSIM4wku0; double BSIM4pku0; double BSIM4lkvth0; double BSIM4wkvth0; double BSIM4pkvth0; double BSIM4stk2; double BSIM4lodk2; double BSIM4steta0; double BSIM4lodeta0; double BSIM4web; double BSIM4wec; double BSIM4kvth0we; double BSIM4k2we; double BSIM4ku0we; double BSIM4scref; double BSIM4wpemod; double BSIM4lkvth0we; double BSIM4lk2we; double BSIM4lku0we; double BSIM4wkvth0we; double BSIM4wk2we; double BSIM4wku0we; double BSIM4pkvth0we; double BSIM4pk2we; double BSIM4pku0we; /* Pre-calculated constants * move to size-dependent param */ double BSIM4Eg0; double BSIM4vtm; double BSIM4vtm0; double BSIM4coxe; double BSIM4coxp; double BSIM4cof1; double BSIM4cof2; double BSIM4cof3; double BSIM4cof4; double BSIM4vcrit; double BSIM4factor1; double BSIM4PhiBS; double BSIM4PhiBSWS; double BSIM4PhiBSWGS; double BSIM4SjctTempSatCurDensity; double BSIM4SjctSidewallTempSatCurDensity; double BSIM4SjctGateSidewallTempSatCurDensity; double BSIM4PhiBD; double BSIM4PhiBSWD; double BSIM4PhiBSWGD; double BSIM4DjctTempSatCurDensity; double BSIM4DjctSidewallTempSatCurDensity; double BSIM4DjctGateSidewallTempSatCurDensity; double BSIM4SunitAreaTempJctCap; double BSIM4DunitAreaTempJctCap; double BSIM4SunitLengthSidewallTempJctCap; double BSIM4DunitLengthSidewallTempJctCap; double BSIM4SunitLengthGateSidewallTempJctCap; double BSIM4DunitLengthGateSidewallTempJctCap; double BSIM4oxideTrapDensityA; double BSIM4oxideTrapDensityB; double BSIM4oxideTrapDensityC; double BSIM4em; double BSIM4ef; double BSIM4af; double BSIM4kf; double BSIM4vgsMax; double BSIM4vgdMax; double BSIM4vgbMax; double BSIM4vdsMax; double BSIM4vbsMax; double BSIM4vbdMax; double BSIM4vgsrMax; double BSIM4vgdrMax; double BSIM4vgbrMax; double BSIM4vbsrMax; double BSIM4vbdrMax; struct bsim4SizeDependParam *pSizeDependParamKnot; #ifdef USE_OMP int BSIM4InstCount; struct sBSIM4instance **BSIM4InstanceArray; #endif /* Flags */ unsigned BSIM4mobModGiven :1; unsigned BSIM4binUnitGiven :1; unsigned BSIM4cvchargeModGiven :1; unsigned BSIM4capModGiven :1; unsigned BSIM4dioModGiven :1; unsigned BSIM4rdsModGiven :1; unsigned BSIM4rbodyModGiven :1; unsigned BSIM4rgateModGiven :1; unsigned BSIM4perModGiven :1; unsigned BSIM4geoModGiven :1; unsigned BSIM4rgeoModGiven :1; unsigned BSIM4paramChkGiven :1; unsigned BSIM4trnqsModGiven :1; unsigned BSIM4acnqsModGiven :1; unsigned BSIM4fnoiModGiven :1; unsigned BSIM4tnoiModGiven :1; unsigned BSIM4mtrlModGiven :1; unsigned BSIM4mtrlCompatModGiven :1; unsigned BSIM4gidlModGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4igcModGiven :1; unsigned BSIM4igbModGiven :1; unsigned BSIM4tempModGiven :1; unsigned BSIM4typeGiven :1; unsigned BSIM4toxrefGiven :1; unsigned BSIM4eotGiven :1; unsigned BSIM4vddeotGiven :1; unsigned BSIM4tempeotGiven :1; unsigned BSIM4leffeotGiven :1; unsigned BSIM4weffeotGiven :1; unsigned BSIM4adosGiven :1; unsigned BSIM4bdosGiven :1; unsigned BSIM4toxeGiven :1; unsigned BSIM4toxpGiven :1; unsigned BSIM4toxmGiven :1; unsigned BSIM4dtoxGiven :1; unsigned BSIM4epsroxGiven :1; unsigned BSIM4versionGiven :1; unsigned BSIM4cdscGiven :1; unsigned BSIM4cdscbGiven :1; unsigned BSIM4cdscdGiven :1; unsigned BSIM4citGiven :1; unsigned BSIM4nfactorGiven :1; unsigned BSIM4xjGiven :1; unsigned BSIM4vsatGiven :1; unsigned BSIM4atGiven :1; unsigned BSIM4a0Given :1; unsigned BSIM4agsGiven :1; unsigned BSIM4a1Given :1; unsigned BSIM4a2Given :1; unsigned BSIM4ketaGiven :1; unsigned BSIM4nsubGiven :1; unsigned BSIM4phigGiven :1; unsigned BSIM4epsrgateGiven :1; unsigned BSIM4easubGiven :1; unsigned BSIM4epsrsubGiven :1; unsigned BSIM4ni0subGiven :1; unsigned BSIM4bg0subGiven :1; unsigned BSIM4tbgasubGiven :1; unsigned BSIM4tbgbsubGiven :1; unsigned BSIM4ndepGiven :1; unsigned BSIM4nsdGiven :1; unsigned BSIM4phinGiven :1; unsigned BSIM4ngateGiven :1; unsigned BSIM4gamma1Given :1; unsigned BSIM4gamma2Given :1; unsigned BSIM4vbxGiven :1; unsigned BSIM4vbmGiven :1; unsigned BSIM4xtGiven :1; unsigned BSIM4k1Given :1; unsigned BSIM4kt1Given :1; unsigned BSIM4kt1lGiven :1; unsigned BSIM4kt2Given :1; unsigned BSIM4k2Given :1; unsigned BSIM4k3Given :1; unsigned BSIM4k3bGiven :1; unsigned BSIM4w0Given :1; unsigned BSIM4dvtp0Given :1; unsigned BSIM4dvtp1Given :1; unsigned BSIM4dvtp2Given :1; /* New DIBL/Rout */ unsigned BSIM4dvtp3Given :1; unsigned BSIM4dvtp4Given :1; unsigned BSIM4dvtp5Given :1; unsigned BSIM4lpe0Given :1; unsigned BSIM4lpebGiven :1; unsigned BSIM4dvt0Given :1; unsigned BSIM4dvt1Given :1; unsigned BSIM4dvt2Given :1; unsigned BSIM4dvt0wGiven :1; unsigned BSIM4dvt1wGiven :1; unsigned BSIM4dvt2wGiven :1; unsigned BSIM4droutGiven :1; unsigned BSIM4dsubGiven :1; unsigned BSIM4vth0Given :1; unsigned BSIM4euGiven :1; unsigned BSIM4ucsGiven :1; unsigned BSIM4uaGiven :1; unsigned BSIM4ua1Given :1; unsigned BSIM4ubGiven :1; unsigned BSIM4ub1Given :1; unsigned BSIM4ucGiven :1; unsigned BSIM4uc1Given :1; unsigned BSIM4udGiven :1; unsigned BSIM4ud1Given :1; unsigned BSIM4upGiven :1; unsigned BSIM4lpGiven :1; unsigned BSIM4u0Given :1; unsigned BSIM4uteGiven :1; unsigned BSIM4ucsteGiven :1; unsigned BSIM4voffGiven :1; unsigned BSIM4tvoffGiven :1; unsigned BSIM4tnfactorGiven :1; /* v4.7 Temp dep of leakage current */ unsigned BSIM4teta0Given :1; /* v4.7 temp dep of leakage current */ unsigned BSIM4tvoffcvGiven :1; /* v4.7 temp dep of leakage current */ unsigned BSIM4vofflGiven :1; unsigned BSIM4voffcvlGiven :1; unsigned BSIM4minvGiven :1; unsigned BSIM4minvcvGiven :1; unsigned BSIM4rdswGiven :1; unsigned BSIM4rdswminGiven :1; unsigned BSIM4rdwminGiven :1; unsigned BSIM4rswminGiven :1; unsigned BSIM4rswGiven :1; unsigned BSIM4rdwGiven :1; unsigned BSIM4prwgGiven :1; unsigned BSIM4prwbGiven :1; unsigned BSIM4prtGiven :1; unsigned BSIM4eta0Given :1; unsigned BSIM4etabGiven :1; unsigned BSIM4pclmGiven :1; unsigned BSIM4pdibl1Given :1; unsigned BSIM4pdibl2Given :1; unsigned BSIM4pdiblbGiven :1; unsigned BSIM4fproutGiven :1; unsigned BSIM4pditsGiven :1; unsigned BSIM4pditsdGiven :1; unsigned BSIM4pditslGiven :1; unsigned BSIM4pscbe1Given :1; unsigned BSIM4pscbe2Given :1; unsigned BSIM4pvagGiven :1; unsigned BSIM4deltaGiven :1; unsigned BSIM4wrGiven :1; unsigned BSIM4dwgGiven :1; unsigned BSIM4dwbGiven :1; unsigned BSIM4b0Given :1; unsigned BSIM4b1Given :1; unsigned BSIM4alpha0Given :1; unsigned BSIM4alpha1Given :1; unsigned BSIM4beta0Given :1; unsigned BSIM4agidlGiven :1; unsigned BSIM4bgidlGiven :1; unsigned BSIM4cgidlGiven :1; unsigned BSIM4egidlGiven :1; unsigned BSIM4fgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4kgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4rgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4agislGiven :1; unsigned BSIM4bgislGiven :1; unsigned BSIM4cgislGiven :1; unsigned BSIM4egislGiven :1; unsigned BSIM4fgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4kgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4rgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4aigcGiven :1; unsigned BSIM4bigcGiven :1; unsigned BSIM4cigcGiven :1; unsigned BSIM4aigsdGiven :1; unsigned BSIM4bigsdGiven :1; unsigned BSIM4cigsdGiven :1; unsigned BSIM4aigsGiven :1; unsigned BSIM4bigsGiven :1; unsigned BSIM4cigsGiven :1; unsigned BSIM4aigdGiven :1; unsigned BSIM4bigdGiven :1; unsigned BSIM4cigdGiven :1; unsigned BSIM4aigbaccGiven :1; unsigned BSIM4bigbaccGiven :1; unsigned BSIM4cigbaccGiven :1; unsigned BSIM4aigbinvGiven :1; unsigned BSIM4bigbinvGiven :1; unsigned BSIM4cigbinvGiven :1; unsigned BSIM4nigcGiven :1; unsigned BSIM4nigbinvGiven :1; unsigned BSIM4nigbaccGiven :1; unsigned BSIM4ntoxGiven :1; unsigned BSIM4eigbinvGiven :1; unsigned BSIM4pigcdGiven :1; unsigned BSIM4poxedgeGiven :1; unsigned BSIM4ijthdfwdGiven :1; unsigned BSIM4ijthsfwdGiven :1; unsigned BSIM4ijthdrevGiven :1; unsigned BSIM4ijthsrevGiven :1; unsigned BSIM4xjbvdGiven :1; unsigned BSIM4xjbvsGiven :1; unsigned BSIM4bvdGiven :1; unsigned BSIM4bvsGiven :1; unsigned BSIM4jtssGiven :1; unsigned BSIM4jtsdGiven :1; unsigned BSIM4jtsswsGiven :1; unsigned BSIM4jtsswdGiven :1; unsigned BSIM4jtsswgsGiven :1; unsigned BSIM4jtsswgdGiven :1; unsigned BSIM4jtweffGiven :1; unsigned BSIM4njtsGiven :1; unsigned BSIM4njtsswGiven :1; unsigned BSIM4njtsswgGiven :1; unsigned BSIM4njtsdGiven :1; unsigned BSIM4njtsswdGiven :1; unsigned BSIM4njtsswgdGiven :1; unsigned BSIM4xtssGiven :1; unsigned BSIM4xtsdGiven :1; unsigned BSIM4xtsswsGiven :1; unsigned BSIM4xtsswdGiven :1; unsigned BSIM4xtsswgsGiven :1; unsigned BSIM4xtsswgdGiven :1; unsigned BSIM4tnjtsGiven :1; unsigned BSIM4tnjtsswGiven :1; unsigned BSIM4tnjtsswgGiven :1; unsigned BSIM4tnjtsdGiven :1; unsigned BSIM4tnjtsswdGiven :1; unsigned BSIM4tnjtsswgdGiven :1; unsigned BSIM4vtssGiven :1; unsigned BSIM4vtsdGiven :1; unsigned BSIM4vtsswsGiven :1; unsigned BSIM4vtsswdGiven :1; unsigned BSIM4vtsswgsGiven :1; unsigned BSIM4vtsswgdGiven :1; unsigned BSIM4vfbGiven :1; unsigned BSIM4gbminGiven :1; unsigned BSIM4rbdbGiven :1; unsigned BSIM4rbsbGiven :1; unsigned BSIM4rbpsGiven :1; unsigned BSIM4rbpdGiven :1; unsigned BSIM4rbpbGiven :1; unsigned BSIM4rbps0Given :1; unsigned BSIM4rbpslGiven :1; unsigned BSIM4rbpswGiven :1; unsigned BSIM4rbpsnfGiven :1; unsigned BSIM4rbpd0Given :1; unsigned BSIM4rbpdlGiven :1; unsigned BSIM4rbpdwGiven :1; unsigned BSIM4rbpdnfGiven :1; unsigned BSIM4rbpbx0Given :1; unsigned BSIM4rbpbxlGiven :1; unsigned BSIM4rbpbxwGiven :1; unsigned BSIM4rbpbxnfGiven :1; unsigned BSIM4rbpby0Given :1; unsigned BSIM4rbpbylGiven :1; unsigned BSIM4rbpbywGiven :1; unsigned BSIM4rbpbynfGiven :1; unsigned BSIM4rbsbx0Given :1; unsigned BSIM4rbsby0Given :1; unsigned BSIM4rbdbx0Given :1; unsigned BSIM4rbdby0Given :1; unsigned BSIM4rbsdbxlGiven :1; unsigned BSIM4rbsdbxwGiven :1; unsigned BSIM4rbsdbxnfGiven :1; unsigned BSIM4rbsdbylGiven :1; unsigned BSIM4rbsdbywGiven :1; unsigned BSIM4rbsdbynfGiven :1; unsigned BSIM4xrcrg1Given :1; unsigned BSIM4xrcrg2Given :1; unsigned BSIM4tnoiaGiven :1; unsigned BSIM4tnoibGiven :1; unsigned BSIM4tnoicGiven :1; unsigned BSIM4rnoiaGiven :1; unsigned BSIM4rnoibGiven :1; unsigned BSIM4rnoicGiven :1; unsigned BSIM4ntnoiGiven :1; unsigned BSIM4lambdaGiven :1; unsigned BSIM4vtlGiven :1; unsigned BSIM4lcGiven :1; unsigned BSIM4xnGiven :1; unsigned BSIM4vfbsdoffGiven :1; unsigned BSIM4lintnoiGiven :1; unsigned BSIM4tvfbsdoffGiven :1; /* CV model and parasitics */ unsigned BSIM4cgslGiven :1; unsigned BSIM4cgdlGiven :1; unsigned BSIM4ckappasGiven :1; unsigned BSIM4ckappadGiven :1; unsigned BSIM4cfGiven :1; unsigned BSIM4vfbcvGiven :1; unsigned BSIM4clcGiven :1; unsigned BSIM4cleGiven :1; unsigned BSIM4dwcGiven :1; unsigned BSIM4dlcGiven :1; unsigned BSIM4xwGiven :1; unsigned BSIM4xlGiven :1; unsigned BSIM4dlcigGiven :1; unsigned BSIM4dlcigdGiven :1; unsigned BSIM4dwjGiven :1; unsigned BSIM4noffGiven :1; unsigned BSIM4voffcvGiven :1; unsigned BSIM4acdeGiven :1; unsigned BSIM4moinGiven :1; unsigned BSIM4tcjGiven :1; unsigned BSIM4tcjswGiven :1; unsigned BSIM4tcjswgGiven :1; unsigned BSIM4tpbGiven :1; unsigned BSIM4tpbswGiven :1; unsigned BSIM4tpbswgGiven :1; unsigned BSIM4dmcgGiven :1; unsigned BSIM4dmciGiven :1; unsigned BSIM4dmdgGiven :1; unsigned BSIM4dmcgtGiven :1; unsigned BSIM4xgwGiven :1; unsigned BSIM4xglGiven :1; unsigned BSIM4rshgGiven :1; unsigned BSIM4ngconGiven :1; /* Length dependence */ unsigned BSIM4lcdscGiven :1; unsigned BSIM4lcdscbGiven :1; unsigned BSIM4lcdscdGiven :1; unsigned BSIM4lcitGiven :1; unsigned BSIM4lnfactorGiven :1; unsigned BSIM4lxjGiven :1; unsigned BSIM4lvsatGiven :1; unsigned BSIM4latGiven :1; unsigned BSIM4la0Given :1; unsigned BSIM4lagsGiven :1; unsigned BSIM4la1Given :1; unsigned BSIM4la2Given :1; unsigned BSIM4lketaGiven :1; unsigned BSIM4lnsubGiven :1; unsigned BSIM4lndepGiven :1; unsigned BSIM4lnsdGiven :1; unsigned BSIM4lphinGiven :1; unsigned BSIM4lngateGiven :1; unsigned BSIM4lgamma1Given :1; unsigned BSIM4lgamma2Given :1; unsigned BSIM4lvbxGiven :1; unsigned BSIM4lvbmGiven :1; unsigned BSIM4lxtGiven :1; unsigned BSIM4lk1Given :1; unsigned BSIM4lkt1Given :1; unsigned BSIM4lkt1lGiven :1; unsigned BSIM4lkt2Given :1; unsigned BSIM4lk2Given :1; unsigned BSIM4lk3Given :1; unsigned BSIM4lk3bGiven :1; unsigned BSIM4lw0Given :1; unsigned BSIM4ldvtp0Given :1; unsigned BSIM4ldvtp1Given :1; unsigned BSIM4ldvtp2Given :1; /* New DIBL/Rout */ unsigned BSIM4ldvtp3Given :1; unsigned BSIM4ldvtp4Given :1; unsigned BSIM4ldvtp5Given :1; unsigned BSIM4llpe0Given :1; unsigned BSIM4llpebGiven :1; unsigned BSIM4ldvt0Given :1; unsigned BSIM4ldvt1Given :1; unsigned BSIM4ldvt2Given :1; unsigned BSIM4ldvt0wGiven :1; unsigned BSIM4ldvt1wGiven :1; unsigned BSIM4ldvt2wGiven :1; unsigned BSIM4ldroutGiven :1; unsigned BSIM4ldsubGiven :1; unsigned BSIM4lvth0Given :1; unsigned BSIM4luaGiven :1; unsigned BSIM4lua1Given :1; unsigned BSIM4lubGiven :1; unsigned BSIM4lub1Given :1; unsigned BSIM4lucGiven :1; unsigned BSIM4luc1Given :1; unsigned BSIM4ludGiven :1; unsigned BSIM4lud1Given :1; unsigned BSIM4lupGiven :1; unsigned BSIM4llpGiven :1; unsigned BSIM4lu0Given :1; unsigned BSIM4leuGiven :1; unsigned BSIM4lucsGiven :1; unsigned BSIM4luteGiven :1; unsigned BSIM4lucsteGiven :1; unsigned BSIM4lvoffGiven :1; unsigned BSIM4ltvoffGiven :1; unsigned BSIM4ltnfactorGiven :1; /* v4.7 Temp dep of leakage current */ unsigned BSIM4lteta0Given :1; /* v4.7 temp dep of leakage current */ unsigned BSIM4ltvoffcvGiven :1; /* v4.7 temp dep of leakage current */ unsigned BSIM4lminvGiven :1; unsigned BSIM4lminvcvGiven :1; unsigned BSIM4lrdswGiven :1; unsigned BSIM4lrswGiven :1; unsigned BSIM4lrdwGiven :1; unsigned BSIM4lprwgGiven :1; unsigned BSIM4lprwbGiven :1; unsigned BSIM4lprtGiven :1; unsigned BSIM4leta0Given :1; unsigned BSIM4letabGiven :1; unsigned BSIM4lpclmGiven :1; unsigned BSIM4lpdibl1Given :1; unsigned BSIM4lpdibl2Given :1; unsigned BSIM4lpdiblbGiven :1; unsigned BSIM4lfproutGiven :1; unsigned BSIM4lpditsGiven :1; unsigned BSIM4lpditsdGiven :1; unsigned BSIM4lpscbe1Given :1; unsigned BSIM4lpscbe2Given :1; unsigned BSIM4lpvagGiven :1; unsigned BSIM4ldeltaGiven :1; unsigned BSIM4lwrGiven :1; unsigned BSIM4ldwgGiven :1; unsigned BSIM4ldwbGiven :1; unsigned BSIM4lb0Given :1; unsigned BSIM4lb1Given :1; unsigned BSIM4lalpha0Given :1; unsigned BSIM4lalpha1Given :1; unsigned BSIM4lbeta0Given :1; unsigned BSIM4lvfbGiven :1; unsigned BSIM4lagidlGiven :1; unsigned BSIM4lbgidlGiven :1; unsigned BSIM4lcgidlGiven :1; unsigned BSIM4legidlGiven :1; unsigned BSIM4lfgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4lkgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4lrgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4lagislGiven :1; unsigned BSIM4lbgislGiven :1; unsigned BSIM4lcgislGiven :1; unsigned BSIM4legislGiven :1; unsigned BSIM4lfgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4lkgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4lrgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4laigcGiven :1; unsigned BSIM4lbigcGiven :1; unsigned BSIM4lcigcGiven :1; unsigned BSIM4laigsdGiven :1; unsigned BSIM4lbigsdGiven :1; unsigned BSIM4lcigsdGiven :1; unsigned BSIM4laigsGiven :1; unsigned BSIM4lbigsGiven :1; unsigned BSIM4lcigsGiven :1; unsigned BSIM4laigdGiven :1; unsigned BSIM4lbigdGiven :1; unsigned BSIM4lcigdGiven :1; unsigned BSIM4laigbaccGiven :1; unsigned BSIM4lbigbaccGiven :1; unsigned BSIM4lcigbaccGiven :1; unsigned BSIM4laigbinvGiven :1; unsigned BSIM4lbigbinvGiven :1; unsigned BSIM4lcigbinvGiven :1; unsigned BSIM4lnigcGiven :1; unsigned BSIM4lnigbinvGiven :1; unsigned BSIM4lnigbaccGiven :1; unsigned BSIM4lntoxGiven :1; unsigned BSIM4leigbinvGiven :1; unsigned BSIM4lpigcdGiven :1; unsigned BSIM4lpoxedgeGiven :1; unsigned BSIM4lxrcrg1Given :1; unsigned BSIM4lxrcrg2Given :1; unsigned BSIM4llambdaGiven :1; unsigned BSIM4lvtlGiven :1; unsigned BSIM4lxnGiven :1; unsigned BSIM4lvfbsdoffGiven :1; unsigned BSIM4ltvfbsdoffGiven :1; /* CV model */ unsigned BSIM4lcgslGiven :1; unsigned BSIM4lcgdlGiven :1; unsigned BSIM4lckappasGiven :1; unsigned BSIM4lckappadGiven :1; unsigned BSIM4lcfGiven :1; unsigned BSIM4lclcGiven :1; unsigned BSIM4lcleGiven :1; unsigned BSIM4lvfbcvGiven :1; unsigned BSIM4lnoffGiven :1; unsigned BSIM4lvoffcvGiven :1; unsigned BSIM4lacdeGiven :1; unsigned BSIM4lmoinGiven :1; /* Width dependence */ unsigned BSIM4wcdscGiven :1; unsigned BSIM4wcdscbGiven :1; unsigned BSIM4wcdscdGiven :1; unsigned BSIM4wcitGiven :1; unsigned BSIM4wnfactorGiven :1; unsigned BSIM4wxjGiven :1; unsigned BSIM4wvsatGiven :1; unsigned BSIM4watGiven :1; unsigned BSIM4wa0Given :1; unsigned BSIM4wagsGiven :1; unsigned BSIM4wa1Given :1; unsigned BSIM4wa2Given :1; unsigned BSIM4wketaGiven :1; unsigned BSIM4wnsubGiven :1; unsigned BSIM4wndepGiven :1; unsigned BSIM4wnsdGiven :1; unsigned BSIM4wphinGiven :1; unsigned BSIM4wngateGiven :1; unsigned BSIM4wgamma1Given :1; unsigned BSIM4wgamma2Given :1; unsigned BSIM4wvbxGiven :1; unsigned BSIM4wvbmGiven :1; unsigned BSIM4wxtGiven :1; unsigned BSIM4wk1Given :1; unsigned BSIM4wkt1Given :1; unsigned BSIM4wkt1lGiven :1; unsigned BSIM4wkt2Given :1; unsigned BSIM4wk2Given :1; unsigned BSIM4wk3Given :1; unsigned BSIM4wk3bGiven :1; unsigned BSIM4ww0Given :1; unsigned BSIM4wdvtp0Given :1; unsigned BSIM4wdvtp1Given :1; unsigned BSIM4wdvtp2Given :1; /* New DIBL/Rout */ unsigned BSIM4wdvtp3Given :1; unsigned BSIM4wdvtp4Given :1; unsigned BSIM4wdvtp5Given :1; unsigned BSIM4wlpe0Given :1; unsigned BSIM4wlpebGiven :1; unsigned BSIM4wdvt0Given :1; unsigned BSIM4wdvt1Given :1; unsigned BSIM4wdvt2Given :1; unsigned BSIM4wdvt0wGiven :1; unsigned BSIM4wdvt1wGiven :1; unsigned BSIM4wdvt2wGiven :1; unsigned BSIM4wdroutGiven :1; unsigned BSIM4wdsubGiven :1; unsigned BSIM4wvth0Given :1; unsigned BSIM4wuaGiven :1; unsigned BSIM4wua1Given :1; unsigned BSIM4wubGiven :1; unsigned BSIM4wub1Given :1; unsigned BSIM4wucGiven :1; unsigned BSIM4wuc1Given :1; unsigned BSIM4wudGiven :1; unsigned BSIM4wud1Given :1; unsigned BSIM4wupGiven :1; unsigned BSIM4wlpGiven :1; unsigned BSIM4wu0Given :1; unsigned BSIM4weuGiven :1; unsigned BSIM4wucsGiven :1; unsigned BSIM4wuteGiven :1; unsigned BSIM4wucsteGiven :1; unsigned BSIM4wvoffGiven :1; unsigned BSIM4wtvoffGiven :1; unsigned BSIM4wtnfactorGiven :1; /* v4.7 Temp dep of leakage current */ unsigned BSIM4wteta0Given :1; /* v4.7 temp dep of leakage current */ unsigned BSIM4wtvoffcvGiven :1; /* v4.7 temp dep of leakage current */ unsigned BSIM4wminvGiven :1; unsigned BSIM4wminvcvGiven :1; unsigned BSIM4wrdswGiven :1; unsigned BSIM4wrswGiven :1; unsigned BSIM4wrdwGiven :1; unsigned BSIM4wprwgGiven :1; unsigned BSIM4wprwbGiven :1; unsigned BSIM4wprtGiven :1; unsigned BSIM4weta0Given :1; unsigned BSIM4wetabGiven :1; unsigned BSIM4wpclmGiven :1; unsigned BSIM4wpdibl1Given :1; unsigned BSIM4wpdibl2Given :1; unsigned BSIM4wpdiblbGiven :1; unsigned BSIM4wfproutGiven :1; unsigned BSIM4wpditsGiven :1; unsigned BSIM4wpditsdGiven :1; unsigned BSIM4wpscbe1Given :1; unsigned BSIM4wpscbe2Given :1; unsigned BSIM4wpvagGiven :1; unsigned BSIM4wdeltaGiven :1; unsigned BSIM4wwrGiven :1; unsigned BSIM4wdwgGiven :1; unsigned BSIM4wdwbGiven :1; unsigned BSIM4wb0Given :1; unsigned BSIM4wb1Given :1; unsigned BSIM4walpha0Given :1; unsigned BSIM4walpha1Given :1; unsigned BSIM4wbeta0Given :1; unsigned BSIM4wvfbGiven :1; unsigned BSIM4wagidlGiven :1; unsigned BSIM4wbgidlGiven :1; unsigned BSIM4wcgidlGiven :1; unsigned BSIM4wegidlGiven :1; unsigned BSIM4wfgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4wkgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4wrgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4wagislGiven :1; unsigned BSIM4wbgislGiven :1; unsigned BSIM4wcgislGiven :1; unsigned BSIM4wegislGiven :1; unsigned BSIM4wfgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4wkgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4wrgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4waigcGiven :1; unsigned BSIM4wbigcGiven :1; unsigned BSIM4wcigcGiven :1; unsigned BSIM4waigsdGiven :1; unsigned BSIM4wbigsdGiven :1; unsigned BSIM4wcigsdGiven :1; unsigned BSIM4waigsGiven :1; unsigned BSIM4wbigsGiven :1; unsigned BSIM4wcigsGiven :1; unsigned BSIM4waigdGiven :1; unsigned BSIM4wbigdGiven :1; unsigned BSIM4wcigdGiven :1; unsigned BSIM4waigbaccGiven :1; unsigned BSIM4wbigbaccGiven :1; unsigned BSIM4wcigbaccGiven :1; unsigned BSIM4waigbinvGiven :1; unsigned BSIM4wbigbinvGiven :1; unsigned BSIM4wcigbinvGiven :1; unsigned BSIM4wnigcGiven :1; unsigned BSIM4wnigbinvGiven :1; unsigned BSIM4wnigbaccGiven :1; unsigned BSIM4wntoxGiven :1; unsigned BSIM4weigbinvGiven :1; unsigned BSIM4wpigcdGiven :1; unsigned BSIM4wpoxedgeGiven :1; unsigned BSIM4wxrcrg1Given :1; unsigned BSIM4wxrcrg2Given :1; unsigned BSIM4wlambdaGiven :1; unsigned BSIM4wvtlGiven :1; unsigned BSIM4wxnGiven :1; unsigned BSIM4wvfbsdoffGiven :1; unsigned BSIM4wtvfbsdoffGiven :1; /* CV model */ unsigned BSIM4wcgslGiven :1; unsigned BSIM4wcgdlGiven :1; unsigned BSIM4wckappasGiven :1; unsigned BSIM4wckappadGiven :1; unsigned BSIM4wcfGiven :1; unsigned BSIM4wclcGiven :1; unsigned BSIM4wcleGiven :1; unsigned BSIM4wvfbcvGiven :1; unsigned BSIM4wnoffGiven :1; unsigned BSIM4wvoffcvGiven :1; unsigned BSIM4wacdeGiven :1; unsigned BSIM4wmoinGiven :1; /* Cross-term dependence */ unsigned BSIM4pcdscGiven :1; unsigned BSIM4pcdscbGiven :1; unsigned BSIM4pcdscdGiven :1; unsigned BSIM4pcitGiven :1; unsigned BSIM4pnfactorGiven :1; unsigned BSIM4pxjGiven :1; unsigned BSIM4pvsatGiven :1; unsigned BSIM4patGiven :1; unsigned BSIM4pa0Given :1; unsigned BSIM4pagsGiven :1; unsigned BSIM4pa1Given :1; unsigned BSIM4pa2Given :1; unsigned BSIM4pketaGiven :1; unsigned BSIM4pnsubGiven :1; unsigned BSIM4pndepGiven :1; unsigned BSIM4pnsdGiven :1; unsigned BSIM4pphinGiven :1; unsigned BSIM4pngateGiven :1; unsigned BSIM4pgamma1Given :1; unsigned BSIM4pgamma2Given :1; unsigned BSIM4pvbxGiven :1; unsigned BSIM4pvbmGiven :1; unsigned BSIM4pxtGiven :1; unsigned BSIM4pk1Given :1; unsigned BSIM4pkt1Given :1; unsigned BSIM4pkt1lGiven :1; unsigned BSIM4pkt2Given :1; unsigned BSIM4pk2Given :1; unsigned BSIM4pk3Given :1; unsigned BSIM4pk3bGiven :1; unsigned BSIM4pw0Given :1; unsigned BSIM4pdvtp0Given :1; unsigned BSIM4pdvtp1Given :1; unsigned BSIM4pdvtp2Given :1; /* New DIBL/Rout */ unsigned BSIM4pdvtp3Given :1; unsigned BSIM4pdvtp4Given :1; unsigned BSIM4pdvtp5Given :1; unsigned BSIM4plpe0Given :1; unsigned BSIM4plpebGiven :1; unsigned BSIM4pdvt0Given :1; unsigned BSIM4pdvt1Given :1; unsigned BSIM4pdvt2Given :1; unsigned BSIM4pdvt0wGiven :1; unsigned BSIM4pdvt1wGiven :1; unsigned BSIM4pdvt2wGiven :1; unsigned BSIM4pdroutGiven :1; unsigned BSIM4pdsubGiven :1; unsigned BSIM4pvth0Given :1; unsigned BSIM4puaGiven :1; unsigned BSIM4pua1Given :1; unsigned BSIM4pubGiven :1; unsigned BSIM4pub1Given :1; unsigned BSIM4pucGiven :1; unsigned BSIM4puc1Given :1; unsigned BSIM4pudGiven :1; unsigned BSIM4pud1Given :1; unsigned BSIM4pupGiven :1; unsigned BSIM4plpGiven :1; unsigned BSIM4pu0Given :1; unsigned BSIM4peuGiven :1; unsigned BSIM4pucsGiven :1; unsigned BSIM4puteGiven :1; unsigned BSIM4pucsteGiven :1; unsigned BSIM4pvoffGiven :1; unsigned BSIM4ptvoffGiven :1; unsigned BSIM4ptnfactorGiven :1; /* v4.7 Temp dep of leakage current */ unsigned BSIM4pteta0Given :1; /* v4.7 temp dep of leakage current */ unsigned BSIM4ptvoffcvGiven :1; /* v4.7 temp dep of leakage current */ unsigned BSIM4pminvGiven :1; unsigned BSIM4pminvcvGiven :1; unsigned BSIM4prdswGiven :1; unsigned BSIM4prswGiven :1; unsigned BSIM4prdwGiven :1; unsigned BSIM4pprwgGiven :1; unsigned BSIM4pprwbGiven :1; unsigned BSIM4pprtGiven :1; unsigned BSIM4peta0Given :1; unsigned BSIM4petabGiven :1; unsigned BSIM4ppclmGiven :1; unsigned BSIM4ppdibl1Given :1; unsigned BSIM4ppdibl2Given :1; unsigned BSIM4ppdiblbGiven :1; unsigned BSIM4pfproutGiven :1; unsigned BSIM4ppditsGiven :1; unsigned BSIM4ppditsdGiven :1; unsigned BSIM4ppscbe1Given :1; unsigned BSIM4ppscbe2Given :1; unsigned BSIM4ppvagGiven :1; unsigned BSIM4pdeltaGiven :1; unsigned BSIM4pwrGiven :1; unsigned BSIM4pdwgGiven :1; unsigned BSIM4pdwbGiven :1; unsigned BSIM4pb0Given :1; unsigned BSIM4pb1Given :1; unsigned BSIM4palpha0Given :1; unsigned BSIM4palpha1Given :1; unsigned BSIM4pbeta0Given :1; unsigned BSIM4pvfbGiven :1; unsigned BSIM4pagidlGiven :1; unsigned BSIM4pbgidlGiven :1; unsigned BSIM4pcgidlGiven :1; unsigned BSIM4pegidlGiven :1; unsigned BSIM4pfgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4pkgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4prgidlGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4pagislGiven :1; unsigned BSIM4pbgislGiven :1; unsigned BSIM4pcgislGiven :1; unsigned BSIM4pegislGiven :1; unsigned BSIM4pfgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4pkgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4prgislGiven :1; /* v4.7 New GIDL/GISL */ unsigned BSIM4paigcGiven :1; unsigned BSIM4pbigcGiven :1; unsigned BSIM4pcigcGiven :1; unsigned BSIM4paigsdGiven :1; unsigned BSIM4pbigsdGiven :1; unsigned BSIM4pcigsdGiven :1; unsigned BSIM4paigsGiven :1; unsigned BSIM4pbigsGiven :1; unsigned BSIM4pcigsGiven :1; unsigned BSIM4paigdGiven :1; unsigned BSIM4pbigdGiven :1; unsigned BSIM4pcigdGiven :1; unsigned BSIM4paigbaccGiven :1; unsigned BSIM4pbigbaccGiven :1; unsigned BSIM4pcigbaccGiven :1; unsigned BSIM4paigbinvGiven :1; unsigned BSIM4pbigbinvGiven :1; unsigned BSIM4pcigbinvGiven :1; unsigned BSIM4pnigcGiven :1; unsigned BSIM4pnigbinvGiven :1; unsigned BSIM4pnigbaccGiven :1; unsigned BSIM4pntoxGiven :1; unsigned BSIM4peigbinvGiven :1; unsigned BSIM4ppigcdGiven :1; unsigned BSIM4ppoxedgeGiven :1; unsigned BSIM4pxrcrg1Given :1; unsigned BSIM4pxrcrg2Given :1; unsigned BSIM4plambdaGiven :1; unsigned BSIM4pvtlGiven :1; unsigned BSIM4pxnGiven :1; unsigned BSIM4pvfbsdoffGiven :1; unsigned BSIM4ptvfbsdoffGiven :1; /* CV model */ unsigned BSIM4pcgslGiven :1; unsigned BSIM4pcgdlGiven :1; unsigned BSIM4pckappasGiven :1; unsigned BSIM4pckappadGiven :1; unsigned BSIM4pcfGiven :1; unsigned BSIM4pclcGiven :1; unsigned BSIM4pcleGiven :1; unsigned BSIM4pvfbcvGiven :1; unsigned BSIM4pnoffGiven :1; unsigned BSIM4pvoffcvGiven :1; unsigned BSIM4pacdeGiven :1; unsigned BSIM4pmoinGiven :1; unsigned BSIM4useFringeGiven :1; unsigned BSIM4tnomGiven :1; unsigned BSIM4cgsoGiven :1; unsigned BSIM4cgdoGiven :1; unsigned BSIM4cgboGiven :1; unsigned BSIM4xpartGiven :1; unsigned BSIM4sheetResistanceGiven :1; unsigned BSIM4SjctSatCurDensityGiven :1; unsigned BSIM4SjctSidewallSatCurDensityGiven :1; unsigned BSIM4SjctGateSidewallSatCurDensityGiven :1; unsigned BSIM4SbulkJctPotentialGiven :1; unsigned BSIM4SbulkJctBotGradingCoeffGiven :1; unsigned BSIM4SsidewallJctPotentialGiven :1; unsigned BSIM4SGatesidewallJctPotentialGiven :1; unsigned BSIM4SbulkJctSideGradingCoeffGiven :1; unsigned BSIM4SunitAreaJctCapGiven :1; unsigned BSIM4SunitLengthSidewallJctCapGiven :1; unsigned BSIM4SbulkJctGateSideGradingCoeffGiven :1; unsigned BSIM4SunitLengthGateSidewallJctCapGiven :1; unsigned BSIM4SjctEmissionCoeffGiven :1; unsigned BSIM4SjctTempExponentGiven :1; unsigned BSIM4DjctSatCurDensityGiven :1; unsigned BSIM4DjctSidewallSatCurDensityGiven :1; unsigned BSIM4DjctGateSidewallSatCurDensityGiven :1; unsigned BSIM4DbulkJctPotentialGiven :1; unsigned BSIM4DbulkJctBotGradingCoeffGiven :1; unsigned BSIM4DsidewallJctPotentialGiven :1; unsigned BSIM4DGatesidewallJctPotentialGiven :1; unsigned BSIM4DbulkJctSideGradingCoeffGiven :1; unsigned BSIM4DunitAreaJctCapGiven :1; unsigned BSIM4DunitLengthSidewallJctCapGiven :1; unsigned BSIM4DbulkJctGateSideGradingCoeffGiven :1; unsigned BSIM4DunitLengthGateSidewallJctCapGiven :1; unsigned BSIM4DjctEmissionCoeffGiven :1; unsigned BSIM4DjctTempExponentGiven :1; unsigned BSIM4oxideTrapDensityAGiven :1; unsigned BSIM4oxideTrapDensityBGiven :1; unsigned BSIM4oxideTrapDensityCGiven :1; unsigned BSIM4emGiven :1; unsigned BSIM4efGiven :1; unsigned BSIM4afGiven :1; unsigned BSIM4kfGiven :1; unsigned BSIM4vgsMaxGiven :1; unsigned BSIM4vgdMaxGiven :1; unsigned BSIM4vgbMaxGiven :1; unsigned BSIM4vdsMaxGiven :1; unsigned BSIM4vbsMaxGiven :1; unsigned BSIM4vbdMaxGiven :1; unsigned BSIM4vgsrMaxGiven :1; unsigned BSIM4vgdrMaxGiven :1; unsigned BSIM4vgbrMaxGiven :1; unsigned BSIM4vbsrMaxGiven :1; unsigned BSIM4vbdrMaxGiven :1; unsigned BSIM4LintGiven :1; unsigned BSIM4LlGiven :1; unsigned BSIM4LlcGiven :1; unsigned BSIM4LlnGiven :1; unsigned BSIM4LwGiven :1; unsigned BSIM4LwcGiven :1; unsigned BSIM4LwnGiven :1; unsigned BSIM4LwlGiven :1; unsigned BSIM4LwlcGiven :1; unsigned BSIM4LminGiven :1; unsigned BSIM4LmaxGiven :1; unsigned BSIM4WintGiven :1; unsigned BSIM4WlGiven :1; unsigned BSIM4WlcGiven :1; unsigned BSIM4WlnGiven :1; unsigned BSIM4WwGiven :1; unsigned BSIM4WwcGiven :1; unsigned BSIM4WwnGiven :1; unsigned BSIM4WwlGiven :1; unsigned BSIM4WwlcGiven :1; unsigned BSIM4WminGiven :1; unsigned BSIM4WmaxGiven :1; /* added for stress effect */ unsigned BSIM4sarefGiven :1; unsigned BSIM4sbrefGiven :1; unsigned BSIM4wlodGiven :1; unsigned BSIM4ku0Given :1; unsigned BSIM4kvsatGiven :1; unsigned BSIM4kvth0Given :1; unsigned BSIM4tku0Given :1; unsigned BSIM4llodku0Given :1; unsigned BSIM4wlodku0Given :1; unsigned BSIM4llodvthGiven :1; unsigned BSIM4wlodvthGiven :1; unsigned BSIM4lku0Given :1; unsigned BSIM4wku0Given :1; unsigned BSIM4pku0Given :1; unsigned BSIM4lkvth0Given :1; unsigned BSIM4wkvth0Given :1; unsigned BSIM4pkvth0Given :1; unsigned BSIM4stk2Given :1; unsigned BSIM4lodk2Given :1; unsigned BSIM4steta0Given :1; unsigned BSIM4lodeta0Given :1; unsigned BSIM4webGiven :1; unsigned BSIM4wecGiven :1; unsigned BSIM4kvth0weGiven :1; unsigned BSIM4k2weGiven :1; unsigned BSIM4ku0weGiven :1; unsigned BSIM4screfGiven :1; unsigned BSIM4wpemodGiven :1; unsigned BSIM4lkvth0weGiven :1; unsigned BSIM4lk2weGiven :1; unsigned BSIM4lku0weGiven :1; unsigned BSIM4wkvth0weGiven :1; unsigned BSIM4wk2weGiven :1; unsigned BSIM4wku0weGiven :1; unsigned BSIM4pkvth0weGiven :1; unsigned BSIM4pk2weGiven :1; unsigned BSIM4pku0weGiven :1; } BSIM4model; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ /* Instance parameters */ #define BSIM4_W 1 #define BSIM4_L 2 #define BSIM4_AS 3 #define BSIM4_AD 4 #define BSIM4_PS 5 #define BSIM4_PD 6 #define BSIM4_NRS 7 #define BSIM4_NRD 8 #define BSIM4_OFF 9 #define BSIM4_IC 10 #define BSIM4_IC_VDS 11 #define BSIM4_IC_VGS 12 #define BSIM4_IC_VBS 13 #define BSIM4_TRNQSMOD 14 #define BSIM4_RBODYMOD 15 #define BSIM4_RGATEMOD 16 #define BSIM4_GEOMOD 17 #define BSIM4_RGEOMOD 18 #define BSIM4_NF 19 #define BSIM4_MIN 20 #define BSIM4_ACNQSMOD 22 #define BSIM4_RBDB 23 #define BSIM4_RBSB 24 #define BSIM4_RBPB 25 #define BSIM4_RBPS 26 #define BSIM4_RBPD 27 #define BSIM4_SA 28 #define BSIM4_SB 29 #define BSIM4_SD 30 #define BSIM4_DELVTO 31 #define BSIM4_XGW 32 #define BSIM4_NGCON 33 #define BSIM4_SCA 34 #define BSIM4_SCB 35 #define BSIM4_SCC 36 #define BSIM4_SC 37 #define BSIM4_M 38 #define BSIM4_MULU0 39 /* Global parameters */ #define BSIM4_MOD_TEMPEOT 65 #define BSIM4_MOD_LEFFEOT 66 #define BSIM4_MOD_WEFFEOT 67 #define BSIM4_MOD_UCSTE 68 #define BSIM4_MOD_LUCSTE 69 #define BSIM4_MOD_WUCSTE 70 #define BSIM4_MOD_PUCSTE 71 #define BSIM4_MOD_UCS 72 #define BSIM4_MOD_LUCS 73 #define BSIM4_MOD_WUCS 74 #define BSIM4_MOD_PUCS 75 #define BSIM4_MOD_CVCHARGEMOD 76 #define BSIM4_MOD_ADOS 77 #define BSIM4_MOD_BDOS 78 #define BSIM4_MOD_TEMPMOD 79 #define BSIM4_MOD_MTRLMOD 80 #define BSIM4_MOD_IGCMOD 81 #define BSIM4_MOD_IGBMOD 82 #define BSIM4_MOD_ACNQSMOD 83 #define BSIM4_MOD_FNOIMOD 84 #define BSIM4_MOD_RDSMOD 85 #define BSIM4_MOD_DIOMOD 86 #define BSIM4_MOD_PERMOD 87 #define BSIM4_MOD_GEOMOD 88 #define BSIM4_MOD_RGEOMOD 89 #define BSIM4_MOD_RGATEMOD 90 #define BSIM4_MOD_RBODYMOD 91 #define BSIM4_MOD_CAPMOD 92 #define BSIM4_MOD_TRNQSMOD 93 #define BSIM4_MOD_MOBMOD 94 #define BSIM4_MOD_TNOIMOD 95 #define BSIM4_MOD_EOT 96 #define BSIM4_MOD_VDDEOT 97 #define BSIM4_MOD_TOXE 98 #define BSIM4_MOD_CDSC 99 #define BSIM4_MOD_CDSCB 100 #define BSIM4_MOD_CIT 101 #define BSIM4_MOD_NFACTOR 102 #define BSIM4_MOD_XJ 103 #define BSIM4_MOD_VSAT 104 #define BSIM4_MOD_AT 105 #define BSIM4_MOD_A0 106 #define BSIM4_MOD_A1 107 #define BSIM4_MOD_A2 108 #define BSIM4_MOD_KETA 109 #define BSIM4_MOD_NSUB 110 #define BSIM4_MOD_PHIG 111 #define BSIM4_MOD_EPSRGATE 112 #define BSIM4_MOD_EASUB 113 #define BSIM4_MOD_EPSRSUB 114 #define BSIM4_MOD_NI0SUB 115 #define BSIM4_MOD_BG0SUB 116 #define BSIM4_MOD_TBGASUB 117 #define BSIM4_MOD_TBGBSUB 118 #define BSIM4_MOD_NDEP 119 #define BSIM4_MOD_NGATE 120 #define BSIM4_MOD_GAMMA1 121 #define BSIM4_MOD_GAMMA2 122 #define BSIM4_MOD_VBX 123 #define BSIM4_MOD_BINUNIT 124 #define BSIM4_MOD_VBM 125 #define BSIM4_MOD_XT 126 #define BSIM4_MOD_K1 129 #define BSIM4_MOD_KT1 130 #define BSIM4_MOD_KT1L 131 #define BSIM4_MOD_K2 132 #define BSIM4_MOD_KT2 133 #define BSIM4_MOD_K3 134 #define BSIM4_MOD_K3B 135 #define BSIM4_MOD_W0 136 #define BSIM4_MOD_LPE0 137 #define BSIM4_MOD_DVT0 138 #define BSIM4_MOD_DVT1 139 #define BSIM4_MOD_DVT2 140 #define BSIM4_MOD_DVT0W 141 #define BSIM4_MOD_DVT1W 142 #define BSIM4_MOD_DVT2W 143 #define BSIM4_MOD_DROUT 144 #define BSIM4_MOD_DSUB 145 #define BSIM4_MOD_VTH0 146 #define BSIM4_MOD_UA 147 #define BSIM4_MOD_UA1 148 #define BSIM4_MOD_UB 149 #define BSIM4_MOD_UB1 150 #define BSIM4_MOD_UC 151 #define BSIM4_MOD_UC1 152 #define BSIM4_MOD_U0 153 #define BSIM4_MOD_UTE 154 #define BSIM4_MOD_VOFF 155 #define BSIM4_MOD_DELTA 156 #define BSIM4_MOD_RDSW 157 #define BSIM4_MOD_PRT 158 #define BSIM4_MOD_LDD 159 #define BSIM4_MOD_ETA 160 #define BSIM4_MOD_ETA0 161 #define BSIM4_MOD_ETAB 162 #define BSIM4_MOD_PCLM 163 #define BSIM4_MOD_PDIBL1 164 #define BSIM4_MOD_PDIBL2 165 #define BSIM4_MOD_PSCBE1 166 #define BSIM4_MOD_PSCBE2 167 #define BSIM4_MOD_PVAG 168 #define BSIM4_MOD_WR 169 #define BSIM4_MOD_DWG 170 #define BSIM4_MOD_DWB 171 #define BSIM4_MOD_B0 172 #define BSIM4_MOD_B1 173 #define BSIM4_MOD_ALPHA0 174 #define BSIM4_MOD_BETA0 175 #define BSIM4_MOD_PDIBLB 178 #define BSIM4_MOD_PRWG 179 #define BSIM4_MOD_PRWB 180 #define BSIM4_MOD_CDSCD 181 #define BSIM4_MOD_AGS 182 #define BSIM4_MOD_FRINGE 184 #define BSIM4_MOD_CGSL 186 #define BSIM4_MOD_CGDL 187 #define BSIM4_MOD_CKAPPAS 188 #define BSIM4_MOD_CF 189 #define BSIM4_MOD_CLC 190 #define BSIM4_MOD_CLE 191 #define BSIM4_MOD_PARAMCHK 192 #define BSIM4_MOD_VERSION 193 #define BSIM4_MOD_VFBCV 194 #define BSIM4_MOD_ACDE 195 #define BSIM4_MOD_MOIN 196 #define BSIM4_MOD_NOFF 197 #define BSIM4_MOD_IJTHDFWD 198 #define BSIM4_MOD_ALPHA1 199 #define BSIM4_MOD_VFB 200 #define BSIM4_MOD_TOXM 201 #define BSIM4_MOD_TCJ 202 #define BSIM4_MOD_TCJSW 203 #define BSIM4_MOD_TCJSWG 204 #define BSIM4_MOD_TPB 205 #define BSIM4_MOD_TPBSW 206 #define BSIM4_MOD_TPBSWG 207 #define BSIM4_MOD_VOFFCV 208 #define BSIM4_MOD_GBMIN 209 #define BSIM4_MOD_RBDB 210 #define BSIM4_MOD_RBSB 211 #define BSIM4_MOD_RBPB 212 #define BSIM4_MOD_RBPS 213 #define BSIM4_MOD_RBPD 214 #define BSIM4_MOD_DMCG 215 #define BSIM4_MOD_DMCI 216 #define BSIM4_MOD_DMDG 217 #define BSIM4_MOD_XGW 218 #define BSIM4_MOD_XGL 219 #define BSIM4_MOD_RSHG 220 #define BSIM4_MOD_NGCON 221 #define BSIM4_MOD_AGIDL 222 #define BSIM4_MOD_BGIDL 223 #define BSIM4_MOD_EGIDL 224 #define BSIM4_MOD_IJTHSFWD 225 #define BSIM4_MOD_XJBVD 226 #define BSIM4_MOD_XJBVS 227 #define BSIM4_MOD_BVD 228 #define BSIM4_MOD_BVS 229 #define BSIM4_MOD_TOXP 230 #define BSIM4_MOD_DTOX 231 #define BSIM4_MOD_XRCRG1 232 #define BSIM4_MOD_XRCRG2 233 #define BSIM4_MOD_EU 234 #define BSIM4_MOD_IJTHSREV 235 #define BSIM4_MOD_IJTHDREV 236 #define BSIM4_MOD_MINV 237 #define BSIM4_MOD_VOFFL 238 #define BSIM4_MOD_PDITS 239 #define BSIM4_MOD_PDITSD 240 #define BSIM4_MOD_PDITSL 241 #define BSIM4_MOD_TNOIA 242 #define BSIM4_MOD_TNOIB 243 #define BSIM4_MOD_NTNOI 244 #define BSIM4_MOD_FPROUT 245 #define BSIM4_MOD_LPEB 246 #define BSIM4_MOD_DVTP0 247 #define BSIM4_MOD_DVTP1 248 #define BSIM4_MOD_CGIDL 249 #define BSIM4_MOD_PHIN 250 #define BSIM4_MOD_RDSWMIN 251 #define BSIM4_MOD_RSW 252 #define BSIM4_MOD_RDW 253 #define BSIM4_MOD_RDWMIN 254 #define BSIM4_MOD_RSWMIN 255 #define BSIM4_MOD_NSD 256 #define BSIM4_MOD_CKAPPAD 257 #define BSIM4_MOD_DMCGT 258 #define BSIM4_MOD_AIGC 259 #define BSIM4_MOD_BIGC 260 #define BSIM4_MOD_CIGC 261 #define BSIM4_MOD_AIGBACC 262 #define BSIM4_MOD_BIGBACC 263 #define BSIM4_MOD_CIGBACC 264 #define BSIM4_MOD_AIGBINV 265 #define BSIM4_MOD_BIGBINV 266 #define BSIM4_MOD_CIGBINV 267 #define BSIM4_MOD_NIGC 268 #define BSIM4_MOD_NIGBACC 269 #define BSIM4_MOD_NIGBINV 270 #define BSIM4_MOD_NTOX 271 #define BSIM4_MOD_TOXREF 272 #define BSIM4_MOD_EIGBINV 273 #define BSIM4_MOD_PIGCD 274 #define BSIM4_MOD_POXEDGE 275 #define BSIM4_MOD_EPSROX 276 #define BSIM4_MOD_AIGSD 277 #define BSIM4_MOD_BIGSD 278 #define BSIM4_MOD_CIGSD 279 #define BSIM4_MOD_JSWGS 280 #define BSIM4_MOD_JSWGD 281 #define BSIM4_MOD_LAMBDA 282 #define BSIM4_MOD_VTL 283 #define BSIM4_MOD_LC 284 #define BSIM4_MOD_XN 285 #define BSIM4_MOD_RNOIA 286 #define BSIM4_MOD_RNOIB 287 #define BSIM4_MOD_VFBSDOFF 288 #define BSIM4_MOD_LINTNOI 289 #define BSIM4_MOD_UD 290 #define BSIM4_MOD_UD1 291 #define BSIM4_MOD_UP 292 #define BSIM4_MOD_LP 293 #define BSIM4_MOD_TVOFF 294 #define BSIM4_MOD_TVFBSDOFF 295 #define BSIM4_MOD_MINVCV 296 #define BSIM4_MOD_VOFFCVL 297 #define BSIM4_MOD_MTRLCOMPATMOD 380 /* Length dependence */ #define BSIM4_MOD_LCDSC 301 #define BSIM4_MOD_LCDSCB 302 #define BSIM4_MOD_LCIT 303 #define BSIM4_MOD_LNFACTOR 304 #define BSIM4_MOD_LXJ 305 #define BSIM4_MOD_LVSAT 306 #define BSIM4_MOD_LAT 307 #define BSIM4_MOD_LA0 308 #define BSIM4_MOD_LA1 309 #define BSIM4_MOD_LA2 310 #define BSIM4_MOD_LKETA 311 #define BSIM4_MOD_LNSUB 312 #define BSIM4_MOD_LNDEP 313 #define BSIM4_MOD_LNGATE 315 #define BSIM4_MOD_LGAMMA1 316 #define BSIM4_MOD_LGAMMA2 317 #define BSIM4_MOD_LVBX 318 #define BSIM4_MOD_LVBM 320 #define BSIM4_MOD_LXT 322 #define BSIM4_MOD_LK1 325 #define BSIM4_MOD_LKT1 326 #define BSIM4_MOD_LKT1L 327 #define BSIM4_MOD_LK2 328 #define BSIM4_MOD_LKT2 329 #define BSIM4_MOD_LK3 330 #define BSIM4_MOD_LK3B 331 #define BSIM4_MOD_LW0 332 #define BSIM4_MOD_LLPE0 333 #define BSIM4_MOD_LDVT0 334 #define BSIM4_MOD_LDVT1 335 #define BSIM4_MOD_LDVT2 336 #define BSIM4_MOD_LDVT0W 337 #define BSIM4_MOD_LDVT1W 338 #define BSIM4_MOD_LDVT2W 339 #define BSIM4_MOD_LDROUT 340 #define BSIM4_MOD_LDSUB 341 #define BSIM4_MOD_LVTH0 342 #define BSIM4_MOD_LUA 343 #define BSIM4_MOD_LUA1 344 #define BSIM4_MOD_LUB 345 #define BSIM4_MOD_LUB1 346 #define BSIM4_MOD_LUC 347 #define BSIM4_MOD_LUC1 348 #define BSIM4_MOD_LU0 349 #define BSIM4_MOD_LUTE 350 #define BSIM4_MOD_LVOFF 351 #define BSIM4_MOD_LDELTA 352 #define BSIM4_MOD_LRDSW 353 #define BSIM4_MOD_LPRT 354 #define BSIM4_MOD_LLDD 355 #define BSIM4_MOD_LETA 356 #define BSIM4_MOD_LETA0 357 #define BSIM4_MOD_LETAB 358 #define BSIM4_MOD_LPCLM 359 #define BSIM4_MOD_LPDIBL1 360 #define BSIM4_MOD_LPDIBL2 361 #define BSIM4_MOD_LPSCBE1 362 #define BSIM4_MOD_LPSCBE2 363 #define BSIM4_MOD_LPVAG 364 #define BSIM4_MOD_LWR 365 #define BSIM4_MOD_LDWG 366 #define BSIM4_MOD_LDWB 367 #define BSIM4_MOD_LB0 368 #define BSIM4_MOD_LB1 369 #define BSIM4_MOD_LALPHA0 370 #define BSIM4_MOD_LBETA0 371 #define BSIM4_MOD_LPDIBLB 374 #define BSIM4_MOD_LPRWG 375 #define BSIM4_MOD_LPRWB 376 #define BSIM4_MOD_LCDSCD 377 #define BSIM4_MOD_LAGS 378 #define BSIM4_MOD_LFRINGE 381 #define BSIM4_MOD_LCGSL 383 #define BSIM4_MOD_LCGDL 384 #define BSIM4_MOD_LCKAPPAS 385 #define BSIM4_MOD_LCF 386 #define BSIM4_MOD_LCLC 387 #define BSIM4_MOD_LCLE 388 #define BSIM4_MOD_LVFBCV 389 #define BSIM4_MOD_LACDE 390 #define BSIM4_MOD_LMOIN 391 #define BSIM4_MOD_LNOFF 392 #define BSIM4_MOD_LALPHA1 394 #define BSIM4_MOD_LVFB 395 #define BSIM4_MOD_LVOFFCV 396 #define BSIM4_MOD_LAGIDL 397 #define BSIM4_MOD_LBGIDL 398 #define BSIM4_MOD_LEGIDL 399 #define BSIM4_MOD_LXRCRG1 400 #define BSIM4_MOD_LXRCRG2 401 #define BSIM4_MOD_LEU 402 #define BSIM4_MOD_LMINV 403 #define BSIM4_MOD_LPDITS 404 #define BSIM4_MOD_LPDITSD 405 #define BSIM4_MOD_LFPROUT 406 #define BSIM4_MOD_LLPEB 407 #define BSIM4_MOD_LDVTP0 408 #define BSIM4_MOD_LDVTP1 409 #define BSIM4_MOD_LCGIDL 410 #define BSIM4_MOD_LPHIN 411 #define BSIM4_MOD_LRSW 412 #define BSIM4_MOD_LRDW 413 #define BSIM4_MOD_LNSD 414 #define BSIM4_MOD_LCKAPPAD 415 #define BSIM4_MOD_LAIGC 416 #define BSIM4_MOD_LBIGC 417 #define BSIM4_MOD_LCIGC 418 #define BSIM4_MOD_LAIGBACC 419 #define BSIM4_MOD_LBIGBACC 420 #define BSIM4_MOD_LCIGBACC 421 #define BSIM4_MOD_LAIGBINV 422 #define BSIM4_MOD_LBIGBINV 423 #define BSIM4_MOD_LCIGBINV 424 #define BSIM4_MOD_LNIGC 425 #define BSIM4_MOD_LNIGBACC 426 #define BSIM4_MOD_LNIGBINV 427 #define BSIM4_MOD_LNTOX 428 #define BSIM4_MOD_LEIGBINV 429 #define BSIM4_MOD_LPIGCD 430 #define BSIM4_MOD_LPOXEDGE 431 #define BSIM4_MOD_LAIGSD 432 #define BSIM4_MOD_LBIGSD 433 #define BSIM4_MOD_LCIGSD 434 #define BSIM4_MOD_LLAMBDA 435 #define BSIM4_MOD_LVTL 436 #define BSIM4_MOD_LXN 437 #define BSIM4_MOD_LVFBSDOFF 438 #define BSIM4_MOD_LUD 439 #define BSIM4_MOD_LUD1 440 #define BSIM4_MOD_LUP 441 #define BSIM4_MOD_LLP 442 #define BSIM4_MOD_LMINVCV 443 #define BSIM4_MOD_FGIDL 444 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_KGIDL 445 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_RGIDL 446 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_FGISL 447 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_KGISL 448 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_RGISL 449 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_LFGIDL 450 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_LKGIDL 451 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_LRGIDL 452 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_LFGISL 453 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_LKGISL 454 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_LRGISL 455 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_WFGIDL 456 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_WKGIDL 457 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_WRGIDL 458 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_WFGISL 459 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_WKGISL 460 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_WRGISL 461 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_PFGIDL 462 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_PKGIDL 463 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_PRGIDL 464 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_PFGISL 465 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_PKGISL 466 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_PRGISL 467 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_GIDLMOD 379 /* v4.7 New GIDL/GISL*/ #define BSIM4_MOD_DVTP2 468 /* v4.7 NEW DIBL/Rout*/ #define BSIM4_MOD_DVTP3 469 /* v4.7 NEW DIBL/Rout*/ #define BSIM4_MOD_DVTP4 470 /* v4.7 NEW DIBL/Rout*/ #define BSIM4_MOD_DVTP5 471 /* v4.7 NEW DIBL/Rout*/ #define BSIM4_MOD_LDVTP2 472 /* v4.7 NEW DIBL/Rout*/ #define BSIM4_MOD_LDVTP3 473 /* v4.7 NEW DIBL/Rout*/ #define BSIM4_MOD_LDVTP4 474 /* v4.7 NEW DIBL/Rout*/ #define BSIM4_MOD_LDVTP5 475 /* v4.7 NEW DIBL/Rout*/ #define BSIM4_MOD_WDVTP2 476 /* v4.7 NEW DIBL/Rout*/ #define BSIM4_MOD_WDVTP3 477 /* v4.7 NEW DIBL/Rout*/ #define BSIM4_MOD_WDVTP4 478 /* v4.7 NEW DIBL/Rout*/ #define BSIM4_MOD_WDVTP5 479 /* v4.7 NEW DIBL/Rout*/ #define BSIM4_MOD_PDVTP2 480 /* v4.7 NEW DIBL/Rout*/ #define BSIM4_MOD_PDVTP3 298 /* v4.7 NEW DIBL/Rout*/ #define BSIM4_MOD_PDVTP4 299 /* v4.7 NEW DIBL/Rout*/ #define BSIM4_MOD_PDVTP5 300 /* v4.7 NEW DIBL/Rout*/ /* Width dependence */ #define BSIM4_MOD_WCDSC 481 #define BSIM4_MOD_WCDSCB 482 #define BSIM4_MOD_WCIT 483 #define BSIM4_MOD_WNFACTOR 484 #define BSIM4_MOD_WXJ 485 #define BSIM4_MOD_WVSAT 486 #define BSIM4_MOD_WAT 487 #define BSIM4_MOD_WA0 488 #define BSIM4_MOD_WA1 489 #define BSIM4_MOD_WA2 490 #define BSIM4_MOD_WKETA 491 #define BSIM4_MOD_WNSUB 492 #define BSIM4_MOD_WNDEP 493 #define BSIM4_MOD_WNGATE 495 #define BSIM4_MOD_WGAMMA1 496 #define BSIM4_MOD_WGAMMA2 497 #define BSIM4_MOD_WVBX 498 #define BSIM4_MOD_WVBM 500 #define BSIM4_MOD_WXT 502 #define BSIM4_MOD_WK1 505 #define BSIM4_MOD_WKT1 506 #define BSIM4_MOD_WKT1L 507 #define BSIM4_MOD_WK2 508 #define BSIM4_MOD_WKT2 509 #define BSIM4_MOD_WK3 510 #define BSIM4_MOD_WK3B 511 #define BSIM4_MOD_WW0 512 #define BSIM4_MOD_WLPE0 513 #define BSIM4_MOD_WDVT0 514 #define BSIM4_MOD_WDVT1 515 #define BSIM4_MOD_WDVT2 516 #define BSIM4_MOD_WDVT0W 517 #define BSIM4_MOD_WDVT1W 518 #define BSIM4_MOD_WDVT2W 519 #define BSIM4_MOD_WDROUT 520 #define BSIM4_MOD_WDSUB 521 #define BSIM4_MOD_WVTH0 522 #define BSIM4_MOD_WUA 523 #define BSIM4_MOD_WUA1 524 #define BSIM4_MOD_WUB 525 #define BSIM4_MOD_WUB1 526 #define BSIM4_MOD_WUC 527 #define BSIM4_MOD_WUC1 528 #define BSIM4_MOD_WU0 529 #define BSIM4_MOD_WUTE 530 #define BSIM4_MOD_WVOFF 531 #define BSIM4_MOD_WDELTA 532 #define BSIM4_MOD_WRDSW 533 #define BSIM4_MOD_WPRT 534 #define BSIM4_MOD_WLDD 535 #define BSIM4_MOD_WETA 536 #define BSIM4_MOD_WETA0 537 #define BSIM4_MOD_WETAB 538 #define BSIM4_MOD_WPCLM 539 #define BSIM4_MOD_WPDIBL1 540 #define BSIM4_MOD_WPDIBL2 541 #define BSIM4_MOD_WPSCBE1 542 #define BSIM4_MOD_WPSCBE2 543 #define BSIM4_MOD_WPVAG 544 #define BSIM4_MOD_WWR 545 #define BSIM4_MOD_WDWG 546 #define BSIM4_MOD_WDWB 547 #define BSIM4_MOD_WB0 548 #define BSIM4_MOD_WB1 549 #define BSIM4_MOD_WALPHA0 550 #define BSIM4_MOD_WBETA0 551 #define BSIM4_MOD_WPDIBLB 554 #define BSIM4_MOD_WPRWG 555 #define BSIM4_MOD_WPRWB 556 #define BSIM4_MOD_WCDSCD 557 #define BSIM4_MOD_WAGS 558 #define BSIM4_MOD_WFRINGE 561 #define BSIM4_MOD_WCGSL 563 #define BSIM4_MOD_WCGDL 564 #define BSIM4_MOD_WCKAPPAS 565 #define BSIM4_MOD_WCF 566 #define BSIM4_MOD_WCLC 567 #define BSIM4_MOD_WCLE 568 #define BSIM4_MOD_WVFBCV 569 #define BSIM4_MOD_WACDE 570 #define BSIM4_MOD_WMOIN 571 #define BSIM4_MOD_WNOFF 572 #define BSIM4_MOD_WALPHA1 574 #define BSIM4_MOD_WVFB 575 #define BSIM4_MOD_WVOFFCV 576 #define BSIM4_MOD_WAGIDL 577 #define BSIM4_MOD_WBGIDL 578 #define BSIM4_MOD_WEGIDL 579 #define BSIM4_MOD_WXRCRG1 580 #define BSIM4_MOD_WXRCRG2 581 #define BSIM4_MOD_WEU 582 #define BSIM4_MOD_WMINV 583 #define BSIM4_MOD_WPDITS 584 #define BSIM4_MOD_WPDITSD 585 #define BSIM4_MOD_WFPROUT 586 #define BSIM4_MOD_WLPEB 587 #define BSIM4_MOD_WDVTP0 588 #define BSIM4_MOD_WDVTP1 589 #define BSIM4_MOD_WCGIDL 590 #define BSIM4_MOD_WPHIN 591 #define BSIM4_MOD_WRSW 592 #define BSIM4_MOD_WRDW 593 #define BSIM4_MOD_WNSD 594 #define BSIM4_MOD_WCKAPPAD 595 #define BSIM4_MOD_WAIGC 596 #define BSIM4_MOD_WBIGC 597 #define BSIM4_MOD_WCIGC 598 #define BSIM4_MOD_WAIGBACC 599 #define BSIM4_MOD_WBIGBACC 600 #define BSIM4_MOD_WCIGBACC 601 #define BSIM4_MOD_WAIGBINV 602 #define BSIM4_MOD_WBIGBINV 603 #define BSIM4_MOD_WCIGBINV 604 #define BSIM4_MOD_WNIGC 605 #define BSIM4_MOD_WNIGBACC 606 #define BSIM4_MOD_WNIGBINV 607 #define BSIM4_MOD_WNTOX 608 #define BSIM4_MOD_WEIGBINV 609 #define BSIM4_MOD_WPIGCD 610 #define BSIM4_MOD_WPOXEDGE 611 #define BSIM4_MOD_WAIGSD 612 #define BSIM4_MOD_WBIGSD 613 #define BSIM4_MOD_WCIGSD 614 #define BSIM4_MOD_WLAMBDA 615 #define BSIM4_MOD_WVTL 616 #define BSIM4_MOD_WXN 617 #define BSIM4_MOD_WVFBSDOFF 618 #define BSIM4_MOD_WUD 619 #define BSIM4_MOD_WUD1 620 #define BSIM4_MOD_WUP 621 #define BSIM4_MOD_WLP 622 #define BSIM4_MOD_WMINVCV 623 /* Cross-term dependence */ #define BSIM4_MOD_PCDSC 661 #define BSIM4_MOD_PCDSCB 662 #define BSIM4_MOD_PCIT 663 #define BSIM4_MOD_PNFACTOR 664 #define BSIM4_MOD_PXJ 665 #define BSIM4_MOD_PVSAT 666 #define BSIM4_MOD_PAT 667 #define BSIM4_MOD_PA0 668 #define BSIM4_MOD_PA1 669 #define BSIM4_MOD_PA2 670 #define BSIM4_MOD_PKETA 671 #define BSIM4_MOD_PNSUB 672 #define BSIM4_MOD_PNDEP 673 #define BSIM4_MOD_PNGATE 675 #define BSIM4_MOD_PGAMMA1 676 #define BSIM4_MOD_PGAMMA2 677 #define BSIM4_MOD_PVBX 678 #define BSIM4_MOD_PVBM 680 #define BSIM4_MOD_PXT 682 #define BSIM4_MOD_PK1 685 #define BSIM4_MOD_PKT1 686 #define BSIM4_MOD_PKT1L 687 #define BSIM4_MOD_PK2 688 #define BSIM4_MOD_PKT2 689 #define BSIM4_MOD_PK3 690 #define BSIM4_MOD_PK3B 691 #define BSIM4_MOD_PW0 692 #define BSIM4_MOD_PLPE0 693 #define BSIM4_MOD_PDVT0 694 #define BSIM4_MOD_PDVT1 695 #define BSIM4_MOD_PDVT2 696 #define BSIM4_MOD_PDVT0W 697 #define BSIM4_MOD_PDVT1W 698 #define BSIM4_MOD_PDVT2W 699 #define BSIM4_MOD_PDROUT 700 #define BSIM4_MOD_PDSUB 701 #define BSIM4_MOD_PVTH0 702 #define BSIM4_MOD_PUA 703 #define BSIM4_MOD_PUA1 704 #define BSIM4_MOD_PUB 705 #define BSIM4_MOD_PUB1 706 #define BSIM4_MOD_PUC 707 #define BSIM4_MOD_PUC1 708 #define BSIM4_MOD_PU0 709 #define BSIM4_MOD_PUTE 710 #define BSIM4_MOD_PVOFF 711 #define BSIM4_MOD_PDELTA 712 #define BSIM4_MOD_PRDSW 713 #define BSIM4_MOD_PPRT 714 #define BSIM4_MOD_PLDD 715 #define BSIM4_MOD_PETA 716 #define BSIM4_MOD_PETA0 717 #define BSIM4_MOD_PETAB 718 #define BSIM4_MOD_PPCLM 719 #define BSIM4_MOD_PPDIBL1 720 #define BSIM4_MOD_PPDIBL2 721 #define BSIM4_MOD_PPSCBE1 722 #define BSIM4_MOD_PPSCBE2 723 #define BSIM4_MOD_PPVAG 724 #define BSIM4_MOD_PWR 725 #define BSIM4_MOD_PDWG 726 #define BSIM4_MOD_PDWB 727 #define BSIM4_MOD_PB0 728 #define BSIM4_MOD_PB1 729 #define BSIM4_MOD_PALPHA0 730 #define BSIM4_MOD_PBETA0 731 #define BSIM4_MOD_PPDIBLB 734 #define BSIM4_MOD_PPRWG 735 #define BSIM4_MOD_PPRWB 736 #define BSIM4_MOD_PCDSCD 737 #define BSIM4_MOD_PAGS 738 #define BSIM4_MOD_PFRINGE 741 #define BSIM4_MOD_PCGSL 743 #define BSIM4_MOD_PCGDL 744 #define BSIM4_MOD_PCKAPPAS 745 #define BSIM4_MOD_PCF 746 #define BSIM4_MOD_PCLC 747 #define BSIM4_MOD_PCLE 748 #define BSIM4_MOD_PVFBCV 749 #define BSIM4_MOD_PACDE 750 #define BSIM4_MOD_PMOIN 751 #define BSIM4_MOD_PNOFF 752 #define BSIM4_MOD_PALPHA1 754 #define BSIM4_MOD_PVFB 755 #define BSIM4_MOD_PVOFFCV 756 #define BSIM4_MOD_PAGIDL 757 #define BSIM4_MOD_PBGIDL 758 #define BSIM4_MOD_PEGIDL 759 #define BSIM4_MOD_PXRCRG1 760 #define BSIM4_MOD_PXRCRG2 761 #define BSIM4_MOD_PEU 762 #define BSIM4_MOD_PMINV 763 #define BSIM4_MOD_PPDITS 764 #define BSIM4_MOD_PPDITSD 765 #define BSIM4_MOD_PFPROUT 766 #define BSIM4_MOD_PLPEB 767 #define BSIM4_MOD_PDVTP0 768 #define BSIM4_MOD_PDVTP1 769 #define BSIM4_MOD_PCGIDL 770 #define BSIM4_MOD_PPHIN 771 #define BSIM4_MOD_PRSW 772 #define BSIM4_MOD_PRDW 773 #define BSIM4_MOD_PNSD 774 #define BSIM4_MOD_PCKAPPAD 775 #define BSIM4_MOD_PAIGC 776 #define BSIM4_MOD_PBIGC 777 #define BSIM4_MOD_PCIGC 778 #define BSIM4_MOD_PAIGBACC 779 #define BSIM4_MOD_PBIGBACC 780 #define BSIM4_MOD_PCIGBACC 781 #define BSIM4_MOD_PAIGBINV 782 #define BSIM4_MOD_PBIGBINV 783 #define BSIM4_MOD_PCIGBINV 784 #define BSIM4_MOD_PNIGC 785 #define BSIM4_MOD_PNIGBACC 786 #define BSIM4_MOD_PNIGBINV 787 #define BSIM4_MOD_PNTOX 788 #define BSIM4_MOD_PEIGBINV 789 #define BSIM4_MOD_PPIGCD 790 #define BSIM4_MOD_PPOXEDGE 791 #define BSIM4_MOD_PAIGSD 792 #define BSIM4_MOD_PBIGSD 793 #define BSIM4_MOD_PCIGSD 794 #define BSIM4_MOD_SAREF 795 #define BSIM4_MOD_SBREF 796 #define BSIM4_MOD_KU0 797 #define BSIM4_MOD_KVSAT 798 #define BSIM4_MOD_TKU0 799 #define BSIM4_MOD_LLODKU0 800 #define BSIM4_MOD_WLODKU0 801 #define BSIM4_MOD_LLODVTH 802 #define BSIM4_MOD_WLODVTH 803 #define BSIM4_MOD_LKU0 804 #define BSIM4_MOD_WKU0 805 #define BSIM4_MOD_PKU0 806 #define BSIM4_MOD_KVTH0 807 #define BSIM4_MOD_LKVTH0 808 #define BSIM4_MOD_WKVTH0 809 #define BSIM4_MOD_PKVTH0 810 #define BSIM4_MOD_WLOD 811 #define BSIM4_MOD_STK2 812 #define BSIM4_MOD_LODK2 813 #define BSIM4_MOD_STETA0 814 #define BSIM4_MOD_LODETA0 815 #define BSIM4_MOD_WEB 816 #define BSIM4_MOD_WEC 817 #define BSIM4_MOD_KVTH0WE 818 #define BSIM4_MOD_K2WE 819 #define BSIM4_MOD_KU0WE 820 #define BSIM4_MOD_SCREF 821 #define BSIM4_MOD_WPEMOD 822 #define BSIM4_MOD_PMINVCV 823 #define BSIM4_MOD_PLAMBDA 825 #define BSIM4_MOD_PVTL 826 #define BSIM4_MOD_PXN 827 #define BSIM4_MOD_PVFBSDOFF 828 #define BSIM4_MOD_TNOM 831 #define BSIM4_MOD_CGSO 832 #define BSIM4_MOD_CGDO 833 #define BSIM4_MOD_CGBO 834 #define BSIM4_MOD_XPART 835 #define BSIM4_MOD_RSH 836 #define BSIM4_MOD_JSS 837 #define BSIM4_MOD_PBS 838 #define BSIM4_MOD_MJS 839 #define BSIM4_MOD_PBSWS 840 #define BSIM4_MOD_MJSWS 841 #define BSIM4_MOD_CJS 842 #define BSIM4_MOD_CJSWS 843 #define BSIM4_MOD_NMOS 844 #define BSIM4_MOD_PMOS 845 #define BSIM4_MOD_NOIA 846 #define BSIM4_MOD_NOIB 847 #define BSIM4_MOD_NOIC 848 #define BSIM4_MOD_LINT 849 #define BSIM4_MOD_LL 850 #define BSIM4_MOD_LLN 851 #define BSIM4_MOD_LW 852 #define BSIM4_MOD_LWN 853 #define BSIM4_MOD_LWL 854 #define BSIM4_MOD_LMIN 855 #define BSIM4_MOD_LMAX 856 #define BSIM4_MOD_WINT 857 #define BSIM4_MOD_WL 858 #define BSIM4_MOD_WLN 859 #define BSIM4_MOD_WW 860 #define BSIM4_MOD_WWN 861 #define BSIM4_MOD_WWL 862 #define BSIM4_MOD_WMIN 863 #define BSIM4_MOD_WMAX 864 #define BSIM4_MOD_DWC 865 #define BSIM4_MOD_DLC 866 #define BSIM4_MOD_XL 867 #define BSIM4_MOD_XW 868 #define BSIM4_MOD_EM 869 #define BSIM4_MOD_EF 870 #define BSIM4_MOD_AF 871 #define BSIM4_MOD_KF 872 #define BSIM4_MOD_NJS 873 #define BSIM4_MOD_XTIS 874 #define BSIM4_MOD_PBSWGS 875 #define BSIM4_MOD_MJSWGS 876 #define BSIM4_MOD_CJSWGS 877 #define BSIM4_MOD_JSWS 878 #define BSIM4_MOD_LLC 879 #define BSIM4_MOD_LWC 880 #define BSIM4_MOD_LWLC 881 #define BSIM4_MOD_WLC 882 #define BSIM4_MOD_WWC 883 #define BSIM4_MOD_WWLC 884 #define BSIM4_MOD_DWJ 885 #define BSIM4_MOD_JSD 886 #define BSIM4_MOD_PBD 887 #define BSIM4_MOD_MJD 888 #define BSIM4_MOD_PBSWD 889 #define BSIM4_MOD_MJSWD 890 #define BSIM4_MOD_CJD 891 #define BSIM4_MOD_CJSWD 892 #define BSIM4_MOD_NJD 893 #define BSIM4_MOD_XTID 894 #define BSIM4_MOD_PBSWGD 895 #define BSIM4_MOD_MJSWGD 896 #define BSIM4_MOD_CJSWGD 897 #define BSIM4_MOD_JSWD 898 #define BSIM4_MOD_DLCIG 899 /* trap-assisted tunneling */ #define BSIM4_MOD_JTSS 900 #define BSIM4_MOD_JTSD 901 #define BSIM4_MOD_JTSSWS 902 #define BSIM4_MOD_JTSSWD 903 #define BSIM4_MOD_JTSSWGS 904 #define BSIM4_MOD_JTSSWGD 905 #define BSIM4_MOD_NJTS 906 #define BSIM4_MOD_NJTSSW 907 #define BSIM4_MOD_NJTSSWG 908 #define BSIM4_MOD_XTSS 909 #define BSIM4_MOD_XTSD 910 #define BSIM4_MOD_XTSSWS 911 #define BSIM4_MOD_XTSSWD 912 #define BSIM4_MOD_XTSSWGS 913 #define BSIM4_MOD_XTSSWGD 914 #define BSIM4_MOD_TNJTS 915 #define BSIM4_MOD_TNJTSSW 916 #define BSIM4_MOD_TNJTSSWG 917 #define BSIM4_MOD_VTSS 918 #define BSIM4_MOD_VTSD 919 #define BSIM4_MOD_VTSSWS 920 #define BSIM4_MOD_VTSSWD 921 #define BSIM4_MOD_VTSSWGS 922 #define BSIM4_MOD_VTSSWGD 923 #define BSIM4_MOD_PUD 924 #define BSIM4_MOD_PUD1 925 #define BSIM4_MOD_PUP 926 #define BSIM4_MOD_PLP 927 #define BSIM4_MOD_JTWEFF 928 /* device questions */ #define BSIM4_DNODE 945 #define BSIM4_GNODEEXT 946 #define BSIM4_SNODE 947 #define BSIM4_BNODE 948 #define BSIM4_DNODEPRIME 949 #define BSIM4_GNODEPRIME 950 #define BSIM4_GNODEMIDE 951 #define BSIM4_GNODEMID 952 #define BSIM4_SNODEPRIME 953 #define BSIM4_BNODEPRIME 954 #define BSIM4_DBNODE 955 #define BSIM4_SBNODE 956 #define BSIM4_VBD 957 #define BSIM4_VBS 958 #define BSIM4_VGS 959 #define BSIM4_VDS 960 #define BSIM4_CD 961 #define BSIM4_CBS 962 #define BSIM4_CBD 963 #define BSIM4_GM 964 #define BSIM4_GDS 965 #define BSIM4_GMBS 966 #define BSIM4_GBD 967 #define BSIM4_GBS 968 #define BSIM4_QB 969 #define BSIM4_CQB 970 #define BSIM4_QG 971 #define BSIM4_CQG 972 #define BSIM4_QD 973 #define BSIM4_CQD 974 #define BSIM4_CGGB 975 #define BSIM4_CGDB 976 #define BSIM4_CGSB 977 #define BSIM4_CBGB 978 #define BSIM4_CAPBD 979 #define BSIM4_CQBD 980 #define BSIM4_CAPBS 981 #define BSIM4_CQBS 982 #define BSIM4_CDGB 983 #define BSIM4_CDDB 984 #define BSIM4_CDSB 985 #define BSIM4_VON 986 #define BSIM4_VDSAT 987 #define BSIM4_QBS 988 #define BSIM4_QBD 989 #define BSIM4_SOURCECONDUCT 990 #define BSIM4_DRAINCONDUCT 991 #define BSIM4_CBDB 992 #define BSIM4_CBSB 993 #define BSIM4_CSUB 994 #define BSIM4_QINV 995 #define BSIM4_IGIDL 996 #define BSIM4_CSGB 997 #define BSIM4_CSDB 998 #define BSIM4_CSSB 999 #define BSIM4_CGBB 1000 #define BSIM4_CDBB 1001 #define BSIM4_CSBB 1002 #define BSIM4_CBBB 1003 #define BSIM4_QS 1004 #define BSIM4_IGISL 1005 #define BSIM4_IGS 1006 #define BSIM4_IGD 1007 #define BSIM4_IGB 1008 #define BSIM4_IGCS 1009 #define BSIM4_IGCD 1010 #define BSIM4_QDEF 1011 #define BSIM4_DELVT0 1012 #define BSIM4_GCRG 1013 #define BSIM4_GTAU 1014 #define BSIM4_MOD_LTVOFF 1051 #define BSIM4_MOD_LTVFBSDOFF 1052 #define BSIM4_MOD_WTVOFF 1053 #define BSIM4_MOD_WTVFBSDOFF 1054 #define BSIM4_MOD_PTVOFF 1055 #define BSIM4_MOD_PTVFBSDOFF 1056 #define BSIM4_MOD_LKVTH0WE 1061 #define BSIM4_MOD_LK2WE 1062 #define BSIM4_MOD_LKU0WE 1063 #define BSIM4_MOD_WKVTH0WE 1064 #define BSIM4_MOD_WK2WE 1065 #define BSIM4_MOD_WKU0WE 1066 #define BSIM4_MOD_PKVTH0WE 1067 #define BSIM4_MOD_PK2WE 1068 #define BSIM4_MOD_PKU0WE 1069 #define BSIM4_MOD_RBPS0 1101 #define BSIM4_MOD_RBPSL 1102 #define BSIM4_MOD_RBPSW 1103 #define BSIM4_MOD_RBPSNF 1104 #define BSIM4_MOD_RBPD0 1105 #define BSIM4_MOD_RBPDL 1106 #define BSIM4_MOD_RBPDW 1107 #define BSIM4_MOD_RBPDNF 1108 #define BSIM4_MOD_RBPBX0 1109 #define BSIM4_MOD_RBPBXL 1110 #define BSIM4_MOD_RBPBXW 1111 #define BSIM4_MOD_RBPBXNF 1112 #define BSIM4_MOD_RBPBY0 1113 #define BSIM4_MOD_RBPBYL 1114 #define BSIM4_MOD_RBPBYW 1115 #define BSIM4_MOD_RBPBYNF 1116 #define BSIM4_MOD_RBSBX0 1117 #define BSIM4_MOD_RBSBY0 1118 #define BSIM4_MOD_RBDBX0 1119 #define BSIM4_MOD_RBDBY0 1120 #define BSIM4_MOD_RBSDBXL 1121 #define BSIM4_MOD_RBSDBXW 1122 #define BSIM4_MOD_RBSDBXNF 1123 #define BSIM4_MOD_RBSDBYL 1124 #define BSIM4_MOD_RBSDBYW 1125 #define BSIM4_MOD_RBSDBYNF 1126 #define BSIM4_MOD_AGISL 1200 #define BSIM4_MOD_BGISL 1201 #define BSIM4_MOD_EGISL 1202 #define BSIM4_MOD_CGISL 1203 #define BSIM4_MOD_LAGISL 1204 #define BSIM4_MOD_LBGISL 1205 #define BSIM4_MOD_LEGISL 1206 #define BSIM4_MOD_LCGISL 1207 #define BSIM4_MOD_WAGISL 1208 #define BSIM4_MOD_WBGISL 1209 #define BSIM4_MOD_WEGISL 1210 #define BSIM4_MOD_WCGISL 1211 #define BSIM4_MOD_PAGISL 1212 #define BSIM4_MOD_PBGISL 1213 #define BSIM4_MOD_PEGISL 1214 #define BSIM4_MOD_PCGISL 1215 #define BSIM4_MOD_AIGS 1220 #define BSIM4_MOD_BIGS 1221 #define BSIM4_MOD_CIGS 1222 #define BSIM4_MOD_LAIGS 1223 #define BSIM4_MOD_LBIGS 1224 #define BSIM4_MOD_LCIGS 1225 #define BSIM4_MOD_WAIGS 1226 #define BSIM4_MOD_WBIGS 1227 #define BSIM4_MOD_WCIGS 1228 #define BSIM4_MOD_PAIGS 1229 #define BSIM4_MOD_PBIGS 1230 #define BSIM4_MOD_PCIGS 1231 #define BSIM4_MOD_AIGD 1232 #define BSIM4_MOD_BIGD 1233 #define BSIM4_MOD_CIGD 1234 #define BSIM4_MOD_LAIGD 1235 #define BSIM4_MOD_LBIGD 1236 #define BSIM4_MOD_LCIGD 1237 #define BSIM4_MOD_WAIGD 1238 #define BSIM4_MOD_WBIGD 1239 #define BSIM4_MOD_WCIGD 1240 #define BSIM4_MOD_PAIGD 1241 #define BSIM4_MOD_PBIGD 1242 #define BSIM4_MOD_PCIGD 1243 #define BSIM4_MOD_DLCIGD 1244 #define BSIM4_MOD_NJTSD 1250 #define BSIM4_MOD_NJTSSWD 1251 #define BSIM4_MOD_NJTSSWGD 1252 #define BSIM4_MOD_TNJTSD 1253 #define BSIM4_MOD_TNJTSSWD 1254 #define BSIM4_MOD_TNJTSSWGD 1255 /* v4.7 temp dep of leakage current */ #define BSIM4_MOD_TNFACTOR 1256 #define BSIM4_MOD_TETA0 1257 #define BSIM4_MOD_TVOFFCV 1258 #define BSIM4_MOD_LTNFACTOR 1260 #define BSIM4_MOD_LTETA0 1261 #define BSIM4_MOD_LTVOFFCV 1262 #define BSIM4_MOD_WTNFACTOR 1264 #define BSIM4_MOD_WTETA0 1265 #define BSIM4_MOD_WTVOFFCV 1266 #define BSIM4_MOD_PTNFACTOR 1268 #define BSIM4_MOD_PTETA0 1269 #define BSIM4_MOD_PTVOFFCV 1270 /* tnoiMod=2 (v4.7) */ #define BSIM4_MOD_TNOIC 1272 #define BSIM4_MOD_RNOIC 1273 #define BSIM4_MOD_VGS_MAX 1301 #define BSIM4_MOD_VGD_MAX 1302 #define BSIM4_MOD_VGB_MAX 1303 #define BSIM4_MOD_VDS_MAX 1304 #define BSIM4_MOD_VBS_MAX 1305 #define BSIM4_MOD_VBD_MAX 1306 #define BSIM4_MOD_VGSR_MAX 1307 #define BSIM4_MOD_VGDR_MAX 1308 #define BSIM4_MOD_VGBR_MAX 1309 #define BSIM4_MOD_VBSR_MAX 1310 #define BSIM4_MOD_VBDR_MAX 1311 #include "bsim4ext.h" extern void BSIM4evaluate(double,double,double,BSIM4instance*,BSIM4model*, double*,double*,double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, CKTcircuit*); extern int BSIM4debug(BSIM4model*, BSIM4instance*, CKTcircuit*, int); extern int BSIM4checkModel(BSIM4model*, BSIM4instance*, CKTcircuit*); extern int BSIM4PAeffGeo(double, int, int, double, double, double, double, double *, double *, double *, double *); extern int BSIM4RdseffGeo(double, int, int, int, double, double, double, double, double, int, double *); extern int BSIM4RdsEndIso(double, double, double, double, double, double, int, int, double *); extern int BSIM4RdsEndSha(double, double, double, double, double, double, int, int, double *); #endif /*BSIM4*/ tmpk8ny_4pz/src/spicelib/devices/bsim4/b4.c0000644000175000017500000023363313546075722020664 0ustar carstencarsten/* ****************************************************************************** * BSIM4 4.8.1 released by Chetan Kumar Dabhi 2/15/2017 * * BSIM4 Model Equations * ****************************************************************************** ****************************************************************************** * Copyright 2017 Regents of the University of California. * * All rights reserved. * * * * Project Director: Prof. Chenming Hu. * * Authors: Gary W. Ng, Weidong Liu, Xuemei Xi, Mohan Dunga, Wenwei Yang * * Ali Niknejad, Shivendra Singh Parihar, Chetan Kumar Dabhi * * Yogesh Singh Chauhan, Sayeef Salahuddin, Chenming Hu * ****************************************************************************** ****************************************************************************** * CMC In-Code Statement * * * * The Developer agrees that the following statement will appear in the * * model code that has been adopted as a CMC Standard. * * * * Software is distributed as is, completely without warranty or service * * support. The University of California and its employees are not liable * * for the condition or performance of the software. * * * * The University of California owns the copyright and grants users a * * perpetual, irrevocable, worldwide, non-exclusive, royalty-free license * * with respect to the software as set forth below. * * * * The University of California hereby disclaims all implied warranties. * * * * The University of California grants the users the right to modify, * * copy, and redistribute the software and documentation, both within * * the user's organization and externally, subject to the following * * restrictions: * * * * 1. The users agree not to charge for the University of California code * * itself but may charge for additions, extensions, or support. * * * * 2. In any product based on the software, the users agree to * * acknowledge the University of California that developed the * * software. This acknowledgment shall appear in the product * * documentation. * * * * 3. Redistributions to others of source code and documentation must * * retain the copyright notice, disclaimer, and list of conditions. * * * * 4. Redistributions to others in binary form must reproduce the * * copyright notice, disclaimer, and list of conditions in the * * documentation and/or other materials provided with the * * distribution. * * * * Agreed to on ______Feb. 15, 2017______________ * * * * By: ____University of California, Berkeley___ * * ____Chenming Hu__________________________ * * ____Professor in Graduate School ________ * * * ****************************************************************************** */ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "bsim4def.h" #include "ngspice/suffix.h" IFparm BSIM4pTable[] = { /* parameters */ IOP( "l", BSIM4_L, IF_REAL , "Length"), IOP( "w", BSIM4_W, IF_REAL , "Width"), IOP( "m", BSIM4_M, IF_REAL , "Separate Parallel multiplier"), IOP( "nf", BSIM4_NF, IF_REAL , "Number of fingers"), IOP( "sa", BSIM4_SA, IF_REAL , "distance between OD edge to poly of one side "), IOP( "sb", BSIM4_SB, IF_REAL , "distance between OD edge to poly of the other side"), IOP( "sd", BSIM4_SD, IF_REAL , "distance between neighbour fingers"), IOP( "sca", BSIM4_SCA, IF_REAL , "Integral of the first distribution function for scattered well dopant"), IOP( "scb", BSIM4_SCB, IF_REAL , "Integral of the second distribution function for scattered well dopant"), IOP( "scc", BSIM4_SCC, IF_REAL , "Integral of the third distribution function for scattered well dopant"), IOP( "sc", BSIM4_SC, IF_REAL , "Distance to a single well edge "), IOP( "min", BSIM4_MIN, IF_INTEGER , "Minimize either D or S"), IOP( "ad", BSIM4_AD, IF_REAL , "Drain area"), IOP( "as", BSIM4_AS, IF_REAL , "Source area"), IOP( "pd", BSIM4_PD, IF_REAL , "Drain perimeter"), IOP( "ps", BSIM4_PS, IF_REAL , "Source perimeter"), IOP( "nrd", BSIM4_NRD, IF_REAL , "Number of squares in drain"), IOP( "nrs", BSIM4_NRS, IF_REAL , "Number of squares in source"), IOP( "off", BSIM4_OFF, IF_FLAG , "Device is initially off"), IOP( "rbdb", BSIM4_RBDB, IF_REAL , "Body resistance"), IOP( "rbsb", BSIM4_RBSB, IF_REAL , "Body resistance"), IOP( "rbpb", BSIM4_RBPB, IF_REAL , "Body resistance"), IOP( "rbps", BSIM4_RBPS, IF_REAL , "Body resistance"), IOP( "rbpd", BSIM4_RBPD, IF_REAL , "Body resistance"), IOP( "delvto", BSIM4_DELVTO, IF_REAL , "Zero bias threshold voltage variation"), IOPR( "delvt0", BSIM4_DELVTO, IF_REAL , "Zero bias threshold voltage variation"), IOP( "mulu0", BSIM4_MULU0, IF_REAL, "Low field mobility multiplier"), IOP( "xgw", BSIM4_XGW, IF_REAL, "Distance from gate contact center to device edge"), IOP( "ngcon", BSIM4_NGCON, IF_REAL, "Number of gate contacts"), IOP( "trnqsmod", BSIM4_TRNQSMOD, IF_INTEGER, "Transient NQS model selector"), IOP( "acnqsmod", BSIM4_ACNQSMOD, IF_INTEGER, "AC NQS model selector"), IOP( "rbodymod", BSIM4_RBODYMOD, IF_INTEGER, "Distributed body R model selector"), IOP( "rgatemod", BSIM4_RGATEMOD, IF_INTEGER, "Gate resistance model selector"), IOP( "geomod", BSIM4_GEOMOD, IF_INTEGER, "Geometry dependent parasitics model selector"), IOP( "rgeomod", BSIM4_RGEOMOD, IF_INTEGER, "S/D resistance and contact model selector"), IP( "ic", BSIM4_IC, IF_REALVEC , "Vector of DS,GS,BS initial voltages"), OP( "gmbs", BSIM4_GMBS, IF_REAL, "Gmb"), OP( "gm", BSIM4_GM, IF_REAL, "Gm"), OP( "gds", BSIM4_GDS, IF_REAL, "Gds"), OP( "vdsat", BSIM4_VDSAT, IF_REAL, "Vdsat"), OP( "vth", BSIM4_VON, IF_REAL, "Vth"), OP( "id", BSIM4_CD, IF_REAL, "Ids"), OP( "ibd", BSIM4_CBD, IF_REAL, "Ibd"), OP( "ibs", BSIM4_CBS, IF_REAL, "Ibs"), OP( "gbd", BSIM4_GBD, IF_REAL, "gbd"), OP( "gbs", BSIM4_GBS, IF_REAL, "gbs"), OP( "isub", BSIM4_CSUB, IF_REAL, "Isub"), OP( "igidl", BSIM4_IGIDL, IF_REAL, "Igidl"), OP( "igisl", BSIM4_IGISL, IF_REAL, "Igisl"), OP( "igs", BSIM4_IGS, IF_REAL, "Igs"), OP( "igd", BSIM4_IGD, IF_REAL, "Igd"), OP( "igb", BSIM4_IGB, IF_REAL, "Igb"), OP( "igcs", BSIM4_IGCS, IF_REAL, "Igcs"), OP( "igcd", BSIM4_IGCD, IF_REAL, "Igcd"), OP( "vbs", BSIM4_VBS, IF_REAL, "Vbs"), OP( "vgs", BSIM4_VGS, IF_REAL, "Vgs"), OP( "vds", BSIM4_VDS, IF_REAL, "Vds"), OP( "cgg", BSIM4_CGGB, IF_REAL, "Cggb"), OP( "cgs", BSIM4_CGSB, IF_REAL, "Cgsb"), OP( "cgd", BSIM4_CGDB, IF_REAL, "Cgdb"), OP( "cbg", BSIM4_CBGB, IF_REAL, "Cbgb"), OP( "cbd", BSIM4_CBDB, IF_REAL, "Cbdb"), OP( "cbs", BSIM4_CBSB, IF_REAL, "Cbsb"), OP( "cdg", BSIM4_CDGB, IF_REAL, "Cdgb"), OP( "cdd", BSIM4_CDDB, IF_REAL, "Cddb"), OP( "cds", BSIM4_CDSB, IF_REAL, "Cdsb"), OP( "csg", BSIM4_CSGB, IF_REAL, "Csgb"), OP( "csd", BSIM4_CSDB, IF_REAL, "Csdb"), OP( "css", BSIM4_CSSB, IF_REAL, "Cssb"), OP( "cgb", BSIM4_CGBB, IF_REAL, "Cgbb"), OP( "cdb", BSIM4_CDBB, IF_REAL, "Cdbb"), OP( "csb", BSIM4_CSBB, IF_REAL, "Csbb"), OP( "cbb", BSIM4_CBBB, IF_REAL, "Cbbb"), OP( "capbd", BSIM4_CAPBD, IF_REAL, "Capbd"), OP( "capbs", BSIM4_CAPBS, IF_REAL, "Capbs"), OP( "qg", BSIM4_QG, IF_REAL, "Qgate"), OP( "qb", BSIM4_QB, IF_REAL, "Qbulk"), OP( "qd", BSIM4_QD, IF_REAL, "Qdrain"), OP( "qs", BSIM4_QS, IF_REAL, "Qsource"), OP( "qinv", BSIM4_QINV, IF_REAL, "Qinversion"), OP( "qdef", BSIM4_QDEF, IF_REAL, "Qdef"), OP( "gcrg", BSIM4_GCRG, IF_REAL, "Gcrg"), OP( "gtau", BSIM4_GTAU, IF_REAL, "Gtau"), }; IFparm BSIM4mPTable[] = { /* model parameters */ IOP( "cvchargemod", BSIM4_MOD_CVCHARGEMOD, IF_INTEGER, "Capacitance Charge model selector"), IOP( "capmod", BSIM4_MOD_CAPMOD, IF_INTEGER, "Capacitance model selector"), IOP( "diomod", BSIM4_MOD_DIOMOD, IF_INTEGER, "Diode IV model selector"), IOP( "rdsmod", BSIM4_MOD_RDSMOD, IF_INTEGER, "Bias-dependent S/D resistance model selector"), IOP( "trnqsmod", BSIM4_MOD_TRNQSMOD, IF_INTEGER, "Transient NQS model selector"), IOP( "acnqsmod", BSIM4_MOD_ACNQSMOD, IF_INTEGER, "AC NQS model selector"), IOP( "mobmod", BSIM4_MOD_MOBMOD, IF_INTEGER, "Mobility model selector"), IOP( "rbodymod", BSIM4_MOD_RBODYMOD, IF_INTEGER, "Distributed body R model selector"), IOP( "rgatemod", BSIM4_MOD_RGATEMOD, IF_INTEGER, "Gate R model selector"), IOP( "permod", BSIM4_MOD_PERMOD, IF_INTEGER, "Pd and Ps model selector"), IOP( "geomod", BSIM4_MOD_GEOMOD, IF_INTEGER, "Geometry dependent parasitics model selector"), IOP( "rgeomod", BSIM4_MOD_RGEOMOD, IF_INTEGER, "S/D resistance and contact model selector"), IOP( "fnoimod", BSIM4_MOD_FNOIMOD, IF_INTEGER, "Flicker noise model selector"), IOP( "tnoimod", BSIM4_MOD_TNOIMOD, IF_INTEGER, "Thermal noise model selector"), IOP( "mtrlmod", BSIM4_MOD_MTRLMOD, IF_INTEGER, "parameter for non-silicon substrate or metal gate selector"), IOP( "mtrlcompatmod", BSIM4_MOD_MTRLCOMPATMOD, IF_INTEGER, "New Material Mod backward compatibility selector"), IOP( "igcmod", BSIM4_MOD_IGCMOD, IF_INTEGER, "Gate-to-channel Ig model selector"), IOP( "igbmod", BSIM4_MOD_IGBMOD, IF_INTEGER, "Gate-to-body Ig model selector"), IOP( "tempmod", BSIM4_MOD_TEMPMOD, IF_INTEGER, "Temperature model selector"), IOP( "gidlmod", BSIM4_MOD_GIDLMOD, IF_INTEGER, "parameter for GIDL selector"), /* v4.7 New GIDL/GISL */ IOP( "paramchk", BSIM4_MOD_PARAMCHK, IF_INTEGER, "Model parameter checking selector"), IOP( "binunit", BSIM4_MOD_BINUNIT, IF_INTEGER, "Bin unit selector"), IOP( "version", BSIM4_MOD_VERSION, IF_STRING, "parameter for model version"), IOP( "eot", BSIM4_MOD_EOT, IF_REAL, "Equivalent gate oxide thickness in meters"), IOP( "vddeot", BSIM4_MOD_VDDEOT, IF_REAL, "Voltage for extraction of Equivalent gate oxide thickness"), IOP( "tempeot", BSIM4_MOD_TEMPEOT, IF_REAL, " Temperature for extraction of EOT"), IOP( "leffeot", BSIM4_MOD_LEFFEOT, IF_REAL, " Effective length for extraction of EOT"), IOP( "weffeot", BSIM4_MOD_WEFFEOT, IF_REAL, "Effective width for extraction of EOT"), IOP( "ados", BSIM4_MOD_ADOS, IF_REAL, "Charge centroid parameter"), IOP( "bdos", BSIM4_MOD_BDOS, IF_REAL, "Charge centroid parameter"), IOP( "toxe", BSIM4_MOD_TOXE, IF_REAL, "Electrical gate oxide thickness in meters"), IOP( "toxp", BSIM4_MOD_TOXP, IF_REAL, "Physical gate oxide thickness in meters"), IOP( "toxm", BSIM4_MOD_TOXM, IF_REAL, "Gate oxide thickness at which parameters are extracted"), IOP( "toxref", BSIM4_MOD_TOXREF, IF_REAL, "Target tox value"), IOP( "dtox", BSIM4_MOD_DTOX, IF_REAL, "Defined as (toxe - toxp) "), IOP( "epsrox", BSIM4_MOD_EPSROX, IF_REAL, "Dielectric constant of the gate oxide relative to vacuum"), IOP( "cdsc", BSIM4_MOD_CDSC, IF_REAL, "Drain/Source and channel coupling capacitance"), IOP( "cdscb", BSIM4_MOD_CDSCB, IF_REAL, "Body-bias dependence of cdsc"), IOP( "cdscd", BSIM4_MOD_CDSCD, IF_REAL, "Drain-bias dependence of cdsc"), IOP( "cit", BSIM4_MOD_CIT, IF_REAL, "Interface state capacitance"), IOP( "nfactor", BSIM4_MOD_NFACTOR, IF_REAL, "Subthreshold swing Coefficient"), IOP( "xj", BSIM4_MOD_XJ, IF_REAL, "Junction depth in meters"), IOP( "vsat", BSIM4_MOD_VSAT, IF_REAL, "Saturation velocity at tnom"), IOP( "at", BSIM4_MOD_AT, IF_REAL, "Temperature coefficient of vsat"), IOP( "a0", BSIM4_MOD_A0, IF_REAL, "Non-uniform depletion width effect coefficient."), IOP( "ags", BSIM4_MOD_AGS, IF_REAL, "Gate bias coefficient of Abulk."), IOP( "a1", BSIM4_MOD_A1, IF_REAL, "Non-saturation effect coefficient"), IOP( "a2", BSIM4_MOD_A2, IF_REAL, "Non-saturation effect coefficient"), IOP( "keta", BSIM4_MOD_KETA, IF_REAL, "Body-bias coefficient of non-uniform depletion width effect."), IOP( "phig", BSIM4_MOD_PHIG, IF_REAL, "Work function of gate"), IOP( "epsrgate", BSIM4_MOD_EPSRGATE, IF_REAL, "Dielectric constant of gate relative to vacuum"), IOP( "easub",BSIM4_MOD_EASUB, IF_REAL, "Electron affinity of substrate"), IOP( "epsrsub", BSIM4_MOD_EPSRSUB, IF_REAL, "Dielectric constant of substrate relative to vacuum"), IOP( "ni0sub", BSIM4_MOD_NI0SUB, IF_REAL, "Intrinsic carrier concentration of substrate at 300.15K"), IOP( "bg0sub", BSIM4_MOD_BG0SUB, IF_REAL, "Band-gap of substrate at T=0K"), IOP( "tbgasub", BSIM4_MOD_TBGASUB, IF_REAL, "First parameter of band-gap change due to temperature"), IOP( "tbgbsub", BSIM4_MOD_TBGBSUB, IF_REAL, "Second parameter of band-gap change due to temperature"), IOP( "nsub", BSIM4_MOD_NSUB, IF_REAL, "Substrate doping concentration"), IOP( "ndep", BSIM4_MOD_NDEP, IF_REAL, "Channel doping concentration at the depletion edge"), IOP( "nsd", BSIM4_MOD_NSD, IF_REAL, "S/D doping concentration"), IOP( "phin", BSIM4_MOD_PHIN, IF_REAL, "Adjusting parameter for surface potential due to non-uniform vertical doping"), IOP( "ngate", BSIM4_MOD_NGATE, IF_REAL, "Poly-gate doping concentration"), IOP( "gamma1", BSIM4_MOD_GAMMA1, IF_REAL, "Vth body coefficient"), IOP( "gamma2", BSIM4_MOD_GAMMA2, IF_REAL, "Vth body coefficient"), IOP( "vbx", BSIM4_MOD_VBX, IF_REAL, "Vth transition body Voltage"), IOP( "vbm", BSIM4_MOD_VBM, IF_REAL, "Maximum body voltage"), IOP( "xt", BSIM4_MOD_XT, IF_REAL, "Doping depth"), IOP( "k1", BSIM4_MOD_K1, IF_REAL, "Bulk effect coefficient 1"), IOP( "kt1", BSIM4_MOD_KT1, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt1l", BSIM4_MOD_KT1L, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt2", BSIM4_MOD_KT2, IF_REAL, "Body-coefficient of kt1"), IOP( "k2", BSIM4_MOD_K2, IF_REAL, "Bulk effect coefficient 2"), IOP( "k3", BSIM4_MOD_K3, IF_REAL, "Narrow width effect coefficient"), IOP( "k3b", BSIM4_MOD_K3B, IF_REAL, "Body effect coefficient of k3"), IOP( "w0", BSIM4_MOD_W0, IF_REAL, "Narrow width effect parameter"), IOP( "dvtp0", BSIM4_MOD_DVTP0, IF_REAL, "First parameter for Vth shift due to pocket"), IOP( "dvtp1", BSIM4_MOD_DVTP1, IF_REAL, "Second parameter for Vth shift due to pocket"), IOP( "dvtp2", BSIM4_MOD_DVTP2, IF_REAL, "3rd parameter for Vth shift due to pocket"), IOP( "dvtp3", BSIM4_MOD_DVTP3, IF_REAL, "4th parameter for Vth shift due to pocket"), IOP( "dvtp4", BSIM4_MOD_DVTP4, IF_REAL, "5th parameter for Vth shift due to pocket"), IOP( "dvtp5", BSIM4_MOD_DVTP5, IF_REAL, "6th parameter for Vth shift due to pocket"), IOP( "lpe0", BSIM4_MOD_LPE0, IF_REAL, "Equivalent length of pocket region at zero bias"), IOP( "lpeb", BSIM4_MOD_LPEB, IF_REAL, "Equivalent length of pocket region accounting for body bias"), IOP( "dvt0", BSIM4_MOD_DVT0, IF_REAL, "Short channel effect coeff. 0"), IOP( "dvt1", BSIM4_MOD_DVT1, IF_REAL, "Short channel effect coeff. 1"), IOP( "dvt2", BSIM4_MOD_DVT2, IF_REAL, "Short channel effect coeff. 2"), IOP( "dvt0w", BSIM4_MOD_DVT0W, IF_REAL, "Narrow Width coeff. 0"), IOP( "dvt1w", BSIM4_MOD_DVT1W, IF_REAL, "Narrow Width effect coeff. 1"), IOP( "dvt2w", BSIM4_MOD_DVT2W, IF_REAL, "Narrow Width effect coeff. 2"), IOP( "drout", BSIM4_MOD_DROUT, IF_REAL, "DIBL coefficient of output resistance"), IOP( "dsub", BSIM4_MOD_DSUB, IF_REAL, "DIBL coefficient in the subthreshold region"), IOP( "vth0", BSIM4_MOD_VTH0, IF_REAL,"Threshold voltage"), IOPR("vtho", BSIM4_MOD_VTH0, IF_REAL,"Threshold voltage"), IOP( "ua", BSIM4_MOD_UA, IF_REAL, "Linear gate dependence of mobility"), IOP( "ua1", BSIM4_MOD_UA1, IF_REAL, "Temperature coefficient of ua"), IOP( "ub", BSIM4_MOD_UB, IF_REAL, "Quadratic gate dependence of mobility"), IOP( "ub1", BSIM4_MOD_UB1, IF_REAL, "Temperature coefficient of ub"), IOP( "uc", BSIM4_MOD_UC, IF_REAL, "Body-bias dependence of mobility"), IOP( "uc1", BSIM4_MOD_UC1, IF_REAL, "Temperature coefficient of uc"), IOP( "ud", BSIM4_MOD_UD, IF_REAL, "Coulomb scattering factor of mobility"), IOP( "ud1", BSIM4_MOD_UD1, IF_REAL, "Temperature coefficient of ud"), IOP( "up", BSIM4_MOD_UP, IF_REAL, "Channel length linear factor of mobility"), IOP( "lp", BSIM4_MOD_LP, IF_REAL, "Channel length exponential factor of mobility"), IOP( "u0", BSIM4_MOD_U0, IF_REAL, "Low-field mobility at Tnom"), IOP( "eu", BSIM4_MOD_EU, IF_REAL, "Mobility exponent"), IOP( "ucs", BSIM4_MOD_UCS, IF_REAL, "Colombic scattering exponent"), IOP( "ute", BSIM4_MOD_UTE, IF_REAL, "Temperature coefficient of mobility"), IOP( "ucste", BSIM4_MOD_UCSTE, IF_REAL,"Temperature coefficient of colombic mobility"), IOP( "voff", BSIM4_MOD_VOFF, IF_REAL, "Threshold voltage offset"), IOP( "minv", BSIM4_MOD_MINV, IF_REAL, "Fitting parameter for moderate inversion in Vgsteff"), IOP( "minvcv", BSIM4_MOD_MINVCV, IF_REAL, "Fitting parameter for moderate inversion in Vgsteffcv"), IOP( "voffl", BSIM4_MOD_VOFFL, IF_REAL, "Length dependence parameter for Vth offset"), IOP( "voffcvl", BSIM4_MOD_VOFFCVL, IF_REAL, "Length dependence parameter for Vth offset in CV"), IOP( "tnom", BSIM4_MOD_TNOM, IF_REAL, "Parameter measurement temperature"), IOP( "cgso", BSIM4_MOD_CGSO, IF_REAL, "Gate-source overlap capacitance per width"), IOP( "cgdo", BSIM4_MOD_CGDO, IF_REAL, "Gate-drain overlap capacitance per width"), IOP( "cgbo", BSIM4_MOD_CGBO, IF_REAL, "Gate-bulk overlap capacitance per length"), IOP( "xpart", BSIM4_MOD_XPART, IF_REAL, "Channel charge partitioning"), IOP( "delta", BSIM4_MOD_DELTA, IF_REAL, "Effective Vds parameter"), IOP( "rsh", BSIM4_MOD_RSH, IF_REAL, "Source-drain sheet resistance"), IOP( "rdsw", BSIM4_MOD_RDSW, IF_REAL, "Source-drain resistance per width"), IOP( "rdswmin", BSIM4_MOD_RDSWMIN, IF_REAL, "Source-drain resistance per width at high Vg"), IOP( "rsw", BSIM4_MOD_RSW, IF_REAL, "Source resistance per width"), IOP( "rdw", BSIM4_MOD_RDW, IF_REAL, "Drain resistance per width"), IOP( "rdwmin", BSIM4_MOD_RDWMIN, IF_REAL, "Drain resistance per width at high Vg"), IOP( "rswmin", BSIM4_MOD_RSWMIN, IF_REAL, "Source resistance per width at high Vg"), IOP( "prwg", BSIM4_MOD_PRWG, IF_REAL, "Gate-bias effect on parasitic resistance "), IOP( "prwb", BSIM4_MOD_PRWB, IF_REAL, "Body-effect on parasitic resistance "), IOP( "prt", BSIM4_MOD_PRT, IF_REAL, "Temperature coefficient of parasitic resistance "), IOP( "eta0", BSIM4_MOD_ETA0, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "etab", BSIM4_MOD_ETAB, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "pclm", BSIM4_MOD_PCLM, IF_REAL, "Channel length modulation Coefficient"), IOP( "pdiblc1", BSIM4_MOD_PDIBL1, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblc2", BSIM4_MOD_PDIBL2, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblcb", BSIM4_MOD_PDIBLB, IF_REAL, "Body-effect on drain-induced barrier lowering"), IOP( "fprout", BSIM4_MOD_FPROUT, IF_REAL, "Rout degradation coefficient for pocket devices"), IOP( "pdits", BSIM4_MOD_PDITS, IF_REAL, "Coefficient for drain-induced Vth shifts"), IOP( "pditsl", BSIM4_MOD_PDITSL, IF_REAL, "Length dependence of drain-induced Vth shifts"), IOP( "pditsd", BSIM4_MOD_PDITSD, IF_REAL, "Vds dependence of drain-induced Vth shifts"), IOP( "pscbe1", BSIM4_MOD_PSCBE1, IF_REAL, "Substrate current body-effect coefficient"), IOP( "pscbe2", BSIM4_MOD_PSCBE2, IF_REAL, "Substrate current body-effect coefficient"), IOP( "pvag", BSIM4_MOD_PVAG, IF_REAL, "Gate dependence of output resistance parameter"), IOP( "jss", BSIM4_MOD_JSS, IF_REAL, "Bottom source junction reverse saturation current density"), IOP( "jsws", BSIM4_MOD_JSWS, IF_REAL, "Isolation edge sidewall source junction reverse saturation current density"), IOP( "jswgs", BSIM4_MOD_JSWGS, IF_REAL, "Gate edge source junction reverse saturation current density"), IOP( "pbs", BSIM4_MOD_PBS, IF_REAL, "Source junction built-in potential"), IOP( "njs", BSIM4_MOD_NJS, IF_REAL, "Source junction emission coefficient"), IOP( "xtis", BSIM4_MOD_XTIS, IF_REAL, "Source junction current temperature exponent"), IOP( "mjs", BSIM4_MOD_MJS, IF_REAL, "Source bottom junction capacitance grading coefficient"), IOP( "pbsws", BSIM4_MOD_PBSWS, IF_REAL, "Source sidewall junction capacitance built in potential"), IOP( "mjsws", BSIM4_MOD_MJSWS, IF_REAL, "Source sidewall junction capacitance grading coefficient"), IOP( "pbswgs", BSIM4_MOD_PBSWGS, IF_REAL, "Source (gate side) sidewall junction capacitance built in potential"), IOP( "mjswgs", BSIM4_MOD_MJSWGS, IF_REAL, "Source (gate side) sidewall junction capacitance grading coefficient"), IOP( "cjs", BSIM4_MOD_CJS, IF_REAL, "Source bottom junction capacitance per unit area"), IOP( "cjsws", BSIM4_MOD_CJSWS, IF_REAL, "Source sidewall junction capacitance per unit periphery"), IOP( "cjswgs", BSIM4_MOD_CJSWGS, IF_REAL, "Source (gate side) sidewall junction capacitance per unit width"), IOP( "jsd", BSIM4_MOD_JSD, IF_REAL, "Bottom drain junction reverse saturation current density"), IOP( "jswd", BSIM4_MOD_JSWD, IF_REAL, "Isolation edge sidewall drain junction reverse saturation current density"), IOP( "jswgd", BSIM4_MOD_JSWGD, IF_REAL, "Gate edge drain junction reverse saturation current density"), IOP( "pbd", BSIM4_MOD_PBD, IF_REAL, "Drain junction built-in potential"), IOP( "njd", BSIM4_MOD_NJD, IF_REAL, "Drain junction emission coefficient"), IOP( "xtid", BSIM4_MOD_XTID, IF_REAL, "Drainjunction current temperature exponent"), IOP( "mjd", BSIM4_MOD_MJD, IF_REAL, "Drain bottom junction capacitance grading coefficient"), IOP( "pbswd", BSIM4_MOD_PBSWD, IF_REAL, "Drain sidewall junction capacitance built in potential"), IOP( "mjswd", BSIM4_MOD_MJSWD, IF_REAL, "Drain sidewall junction capacitance grading coefficient"), IOP( "pbswgd", BSIM4_MOD_PBSWGD, IF_REAL, "Drain (gate side) sidewall junction capacitance built in potential"), IOP( "mjswgd", BSIM4_MOD_MJSWGD, IF_REAL, "Drain (gate side) sidewall junction capacitance grading coefficient"), IOP( "cjd", BSIM4_MOD_CJD, IF_REAL, "Drain bottom junction capacitance per unit area"), IOP( "cjswd", BSIM4_MOD_CJSWD, IF_REAL, "Drain sidewall junction capacitance per unit periphery"), IOP( "cjswgd", BSIM4_MOD_CJSWGD, IF_REAL, "Drain (gate side) sidewall junction capacitance per unit width"), IOP( "vfbcv", BSIM4_MOD_VFBCV, IF_REAL, "Flat Band Voltage parameter for capmod=0 only"), IOP( "vfb", BSIM4_MOD_VFB, IF_REAL, "Flat Band Voltage"), IOP( "tpb", BSIM4_MOD_TPB, IF_REAL, "Temperature coefficient of pb"), IOP( "tcj", BSIM4_MOD_TCJ, IF_REAL, "Temperature coefficient of cj"), IOP( "tpbsw", BSIM4_MOD_TPBSW, IF_REAL, "Temperature coefficient of pbsw"), IOP( "tcjsw", BSIM4_MOD_TCJSW, IF_REAL, "Temperature coefficient of cjsw"), IOP( "tpbswg", BSIM4_MOD_TPBSWG, IF_REAL, "Temperature coefficient of pbswg"), IOP( "tcjswg", BSIM4_MOD_TCJSWG, IF_REAL, "Temperature coefficient of cjswg"), IOP( "acde", BSIM4_MOD_ACDE, IF_REAL, "Exponential coefficient for finite charge thickness"), IOP( "moin", BSIM4_MOD_MOIN, IF_REAL, "Coefficient for gate-bias dependent surface potential"), IOP( "noff", BSIM4_MOD_NOFF, IF_REAL, "C-V turn-on/off parameter"), IOP( "voffcv", BSIM4_MOD_VOFFCV, IF_REAL, "C-V lateral-shift parameter"), IOP( "dmcg", BSIM4_MOD_DMCG, IF_REAL, "Distance of Mid-Contact to Gate edge"), IOP( "dmci", BSIM4_MOD_DMCI, IF_REAL, "Distance of Mid-Contact to Isolation"), IOP( "dmdg", BSIM4_MOD_DMDG, IF_REAL, "Distance of Mid-Diffusion to Gate edge"), IOP( "dmcgt", BSIM4_MOD_DMCGT, IF_REAL, "Distance of Mid-Contact to Gate edge in Test structures"), IOP( "xgw", BSIM4_MOD_XGW, IF_REAL, "Distance from gate contact center to device edge"), IOP( "xgl", BSIM4_MOD_XGL, IF_REAL, "Variation in Ldrawn"), IOP( "rshg", BSIM4_MOD_RSHG, IF_REAL, "Gate sheet resistance"), IOP( "ngcon", BSIM4_MOD_NGCON, IF_REAL, "Number of gate contacts"), IOP( "xrcrg1", BSIM4_MOD_XRCRG1, IF_REAL, "First fitting parameter the bias-dependent Rg"), IOP( "xrcrg2", BSIM4_MOD_XRCRG2, IF_REAL, "Second fitting parameter the bias-dependent Rg"), IOP( "lambda", BSIM4_MOD_LAMBDA, IF_REAL, " Velocity overshoot parameter"), IOP( "vtl", BSIM4_MOD_VTL, IF_REAL, " thermal velocity"), IOP( "lc", BSIM4_MOD_LC, IF_REAL, " back scattering parameter"), IOP( "xn", BSIM4_MOD_XN, IF_REAL, " back scattering parameter"), IOP( "vfbsdoff", BSIM4_MOD_VFBSDOFF, IF_REAL, "S/D flatband voltage offset"), IOP( "tvfbsdoff", BSIM4_MOD_TVFBSDOFF, IF_REAL, "Temperature parameter for vfbsdoff"), IOP( "tvoff", BSIM4_MOD_TVOFF, IF_REAL, "Temperature parameter for voff"), IOP( "tnfactor", BSIM4_MOD_TNFACTOR, IF_REAL, "Temperature parameter for nfactor"), /* v4.7 Tanvir*/ IOP( "teta0", BSIM4_MOD_TETA0, IF_REAL, "Temperature parameter for eta0"), /* v4.7 Tanvir*/ IOP( "tvoffcv", BSIM4_MOD_TVOFFCV, IF_REAL, "Temperature parameter for tvoffcv"), /* v4.7 Tanvir*/ IOP( "lintnoi", BSIM4_MOD_LINTNOI, IF_REAL, "lint offset for noise calculation"), IOP( "lint", BSIM4_MOD_LINT, IF_REAL, "Length reduction parameter"), IOP( "ll", BSIM4_MOD_LL, IF_REAL, "Length reduction parameter"), IOP( "llc", BSIM4_MOD_LLC, IF_REAL, "Length reduction parameter for CV"), IOP( "lln", BSIM4_MOD_LLN, IF_REAL, "Length reduction parameter"), IOP( "lw", BSIM4_MOD_LW, IF_REAL, "Length reduction parameter"), IOP( "lwc", BSIM4_MOD_LWC, IF_REAL, "Length reduction parameter for CV"), IOP( "lwn", BSIM4_MOD_LWN, IF_REAL, "Length reduction parameter"), IOP( "lwl", BSIM4_MOD_LWL, IF_REAL, "Length reduction parameter"), IOP( "lwlc", BSIM4_MOD_LWLC, IF_REAL, "Length reduction parameter for CV"), IOP( "lmin", BSIM4_MOD_LMIN, IF_REAL, "Minimum length for the model"), IOP( "lmax", BSIM4_MOD_LMAX, IF_REAL, "Maximum length for the model"), IOP( "wr", BSIM4_MOD_WR, IF_REAL, "Width dependence of rds"), IOP( "wint", BSIM4_MOD_WINT, IF_REAL, "Width reduction parameter"), IOP( "dwg", BSIM4_MOD_DWG, IF_REAL, "Width reduction parameter"), IOP( "dwb", BSIM4_MOD_DWB, IF_REAL, "Width reduction parameter"), IOP( "wl", BSIM4_MOD_WL, IF_REAL, "Width reduction parameter"), IOP( "wlc", BSIM4_MOD_WLC, IF_REAL, "Width reduction parameter for CV"), IOP( "wln", BSIM4_MOD_WLN, IF_REAL, "Width reduction parameter"), IOP( "ww", BSIM4_MOD_WW, IF_REAL, "Width reduction parameter"), IOP( "wwc", BSIM4_MOD_WWC, IF_REAL, "Width reduction parameter for CV"), IOP( "wwn", BSIM4_MOD_WWN, IF_REAL, "Width reduction parameter"), IOP( "wwl", BSIM4_MOD_WWL, IF_REAL, "Width reduction parameter"), IOP( "wwlc", BSIM4_MOD_WWLC, IF_REAL, "Width reduction parameter for CV"), IOP( "wmin", BSIM4_MOD_WMIN, IF_REAL, "Minimum width for the model"), IOP( "wmax", BSIM4_MOD_WMAX, IF_REAL, "Maximum width for the model"), IOP( "b0", BSIM4_MOD_B0, IF_REAL, "Abulk narrow width parameter"), IOP( "b1", BSIM4_MOD_B1, IF_REAL, "Abulk narrow width parameter"), IOP( "cgsl", BSIM4_MOD_CGSL, IF_REAL, "New C-V model parameter"), IOP( "cgdl", BSIM4_MOD_CGDL, IF_REAL, "New C-V model parameter"), IOP( "ckappas", BSIM4_MOD_CKAPPAS, IF_REAL, "S/G overlap C-V parameter "), IOP( "ckappad", BSIM4_MOD_CKAPPAD, IF_REAL, "D/G overlap C-V parameter"), IOP( "cf", BSIM4_MOD_CF, IF_REAL, "Fringe capacitance parameter"), IOP( "clc", BSIM4_MOD_CLC, IF_REAL, "Vdsat parameter for C-V model"), IOP( "cle", BSIM4_MOD_CLE, IF_REAL, "Vdsat parameter for C-V model"), IOP( "dwc", BSIM4_MOD_DWC, IF_REAL, "Delta W for C-V model"), IOP( "dlc", BSIM4_MOD_DLC, IF_REAL, "Delta L for C-V model"), IOP( "xw", BSIM4_MOD_XW, IF_REAL, "W offset for channel width due to mask/etch effect"), IOP( "xl", BSIM4_MOD_XL, IF_REAL, "L offset for channel length due to mask/etch effect"), IOP( "dlcig", BSIM4_MOD_DLCIG, IF_REAL, "Delta L for Ig model"), IOP( "dlcigd", BSIM4_MOD_DLCIGD, IF_REAL, "Delta L for Ig model drain side"), IOP( "dwj", BSIM4_MOD_DWJ, IF_REAL, "Delta W for S/D junctions"), IOP( "alpha0", BSIM4_MOD_ALPHA0, IF_REAL, "substrate current model parameter"), IOP( "alpha1", BSIM4_MOD_ALPHA1, IF_REAL, "substrate current model parameter"), IOP( "beta0", BSIM4_MOD_BETA0, IF_REAL, "substrate current model parameter"), IOP( "agidl", BSIM4_MOD_AGIDL, IF_REAL, "Pre-exponential constant for GIDL"), IOP( "bgidl", BSIM4_MOD_BGIDL, IF_REAL, "Exponential constant for GIDL"), IOP( "cgidl", BSIM4_MOD_CGIDL, IF_REAL, "Parameter for body-bias dependence of GIDL"), IOP( "rgidl", BSIM4_MOD_RGIDL, IF_REAL, "GIDL vg parameter"), /* v4.7 New GIDL/GISL */ IOP( "kgidl", BSIM4_MOD_KGIDL, IF_REAL, "GIDL vb parameter"), /* v4.7 New GIDL/GISL */ IOP( "fgidl", BSIM4_MOD_FGIDL, IF_REAL, "GIDL vb parameter"), /* v4.7 New GIDL/GISL */ IOP( "egidl", BSIM4_MOD_EGIDL, IF_REAL, "Fitting parameter for Bandbending"), IOP( "agisl", BSIM4_MOD_AGISL, IF_REAL, "Pre-exponential constant for GISL"), IOP( "bgisl", BSIM4_MOD_BGISL, IF_REAL, "Exponential constant for GISL"), IOP( "cgisl", BSIM4_MOD_CGISL, IF_REAL, "Parameter for body-bias dependence of GISL"), IOP( "rgisl", BSIM4_MOD_RGISL, IF_REAL, "GISL vg parameter"), /* v4.7 New GIDL/GISL */ IOP( "kgisl", BSIM4_MOD_KGISL, IF_REAL, "GISL vb parameter"), /* v4.7 New GIDL/GISL */ IOP( "fgisl", BSIM4_MOD_FGISL, IF_REAL, "GISL vb parameter"), /* v4.7 New GIDL/GISL */ IOP( "egisl", BSIM4_MOD_EGISL, IF_REAL, "Fitting parameter for Bandbending"), IOP( "aigc", BSIM4_MOD_AIGC, IF_REAL, "Parameter for Igc"), IOP( "bigc", BSIM4_MOD_BIGC, IF_REAL, "Parameter for Igc"), IOP( "cigc", BSIM4_MOD_CIGC, IF_REAL, "Parameter for Igc"), IOP( "aigsd", BSIM4_MOD_AIGSD, IF_REAL, "Parameter for Igs,d"), IOP( "bigsd", BSIM4_MOD_BIGSD, IF_REAL, "Parameter for Igs,d"), IOP( "cigsd", BSIM4_MOD_CIGSD, IF_REAL, "Parameter for Igs,d"), IOP( "aigs", BSIM4_MOD_AIGS, IF_REAL, "Parameter for Igs"), IOP( "bigs", BSIM4_MOD_BIGS, IF_REAL, "Parameter for Igs"), IOP( "cigs", BSIM4_MOD_CIGS, IF_REAL, "Parameter for Igs"), IOP( "aigd", BSIM4_MOD_AIGD, IF_REAL, "Parameter for Igd"), IOP( "bigd", BSIM4_MOD_BIGD, IF_REAL, "Parameter for Igd"), IOP( "cigd", BSIM4_MOD_CIGD, IF_REAL, "Parameter for Igd"), IOP( "aigbacc", BSIM4_MOD_AIGBACC, IF_REAL, "Parameter for Igb"), IOP( "bigbacc", BSIM4_MOD_BIGBACC, IF_REAL, "Parameter for Igb"), IOP( "cigbacc", BSIM4_MOD_CIGBACC, IF_REAL, "Parameter for Igb"), IOP( "aigbinv", BSIM4_MOD_AIGBINV, IF_REAL, "Parameter for Igb"), IOP( "bigbinv", BSIM4_MOD_BIGBINV, IF_REAL, "Parameter for Igb"), IOP( "cigbinv", BSIM4_MOD_CIGBINV, IF_REAL, "Parameter for Igb"), IOP( "nigc", BSIM4_MOD_NIGC, IF_REAL, "Parameter for Igc slope"), IOP( "nigbinv", BSIM4_MOD_NIGBINV, IF_REAL, "Parameter for Igbinv slope"), IOP( "nigbacc", BSIM4_MOD_NIGBACC, IF_REAL, "Parameter for Igbacc slope"), IOP( "ntox", BSIM4_MOD_NTOX, IF_REAL, "Exponent for Tox ratio"), IOP( "eigbinv", BSIM4_MOD_EIGBINV, IF_REAL, "Parameter for the Si bandgap for Igbinv"), IOP( "pigcd", BSIM4_MOD_PIGCD, IF_REAL, "Parameter for Igc partition"), IOP( "poxedge", BSIM4_MOD_POXEDGE, IF_REAL, "Factor for the gate edge Tox"), IOP( "ijthdfwd", BSIM4_MOD_IJTHDFWD, IF_REAL, "Forward drain diode forward limiting current"), IOP( "ijthsfwd", BSIM4_MOD_IJTHSFWD, IF_REAL, "Forward source diode forward limiting current"), IOP( "ijthdrev", BSIM4_MOD_IJTHDREV, IF_REAL, "Reverse drain diode forward limiting current"), IOP( "ijthsrev", BSIM4_MOD_IJTHSREV, IF_REAL, "Reverse source diode forward limiting current"), IOP( "xjbvd", BSIM4_MOD_XJBVD, IF_REAL, "Fitting parameter for drain diode breakdown current"), IOP( "xjbvs", BSIM4_MOD_XJBVS, IF_REAL, "Fitting parameter for source diode breakdown current"), IOP( "bvd", BSIM4_MOD_BVD, IF_REAL, "Drain diode breakdown voltage"), IOP( "bvs", BSIM4_MOD_BVS, IF_REAL, "Source diode breakdown voltage"), IOP( "jtss", BSIM4_MOD_JTSS, IF_REAL, "Source bottom trap-assisted saturation current density"), IOP( "jtsd", BSIM4_MOD_JTSD, IF_REAL, "Drain bottom trap-assisted saturation current density"), IOP( "jtssws", BSIM4_MOD_JTSSWS, IF_REAL, "Source STI sidewall trap-assisted saturation current density"), IOP( "jtsswd", BSIM4_MOD_JTSSWD, IF_REAL, "Drain STI sidewall trap-assisted saturation current density"), IOP( "jtsswgs", BSIM4_MOD_JTSSWGS, IF_REAL, "Source gate-edge sidewall trap-assisted saturation current density"), IOP( "jtsswgd", BSIM4_MOD_JTSSWGD, IF_REAL, "Drain gate-edge sidewall trap-assisted saturation current density"), IOP( "jtweff", BSIM4_MOD_JTWEFF, IF_REAL, "TAT current width dependence"), IOP( "njts", BSIM4_MOD_NJTS, IF_REAL, "Non-ideality factor for bottom junction"), IOP( "njtssw", BSIM4_MOD_NJTSSW, IF_REAL, "Non-ideality factor for STI sidewall junction"), IOP( "njtsswg", BSIM4_MOD_NJTSSWG, IF_REAL, "Non-ideality factor for gate-edge sidewall junction"), IOP( "njtsd", BSIM4_MOD_NJTSD, IF_REAL, "Non-ideality factor for bottom junction drain side"), IOP( "njtsswd", BSIM4_MOD_NJTSSWD, IF_REAL, "Non-ideality factor for STI sidewall junction drain side"), IOP( "njtsswgd", BSIM4_MOD_NJTSSWGD, IF_REAL, "Non-ideality factor for gate-edge sidewall junction drain side"), IOP( "xtss", BSIM4_MOD_XTSS, IF_REAL, "Power dependence of JTSS on temperature"), IOP( "xtsd", BSIM4_MOD_XTSD, IF_REAL, "Power dependence of JTSD on temperature"), IOP( "xtssws", BSIM4_MOD_XTSSWS, IF_REAL, "Power dependence of JTSSWS on temperature"), IOP( "xtsswd", BSIM4_MOD_XTSSWD, IF_REAL, "Power dependence of JTSSWD on temperature"), IOP( "xtsswgs", BSIM4_MOD_XTSSWGS, IF_REAL, "Power dependence of JTSSWGS on temperature"), IOP( "xtsswgd", BSIM4_MOD_XTSSWGD, IF_REAL, "Power dependence of JTSSWGD on temperature"), IOP( "tnjts", BSIM4_MOD_TNJTS, IF_REAL, "Temperature coefficient for NJTS"), IOP( "tnjtssw", BSIM4_MOD_TNJTSSW, IF_REAL, "Temperature coefficient for NJTSSW"), IOP( "tnjtsswg", BSIM4_MOD_TNJTSSWG, IF_REAL, "Temperature coefficient for NJTSSWG"), IOP( "tnjtsd", BSIM4_MOD_TNJTSD, IF_REAL, "Temperature coefficient for NJTSD"), IOP( "tnjtsswd", BSIM4_MOD_TNJTSSWD, IF_REAL, "Temperature coefficient for NJTSSWD"), IOP( "tnjtsswgd", BSIM4_MOD_TNJTSSWGD, IF_REAL, "Temperature coefficient for NJTSSWGD"), IOP( "vtss", BSIM4_MOD_VTSS, IF_REAL, "Source bottom trap-assisted voltage dependent parameter"), IOP( "vtsd", BSIM4_MOD_VTSD, IF_REAL, "Drain bottom trap-assisted voltage dependent parameter"), IOP( "vtssws", BSIM4_MOD_VTSSWS, IF_REAL, "Source STI sidewall trap-assisted voltage dependent parameter"), IOP( "vtsswd", BSIM4_MOD_VTSSWD, IF_REAL, "Drain STI sidewall trap-assisted voltage dependent parameter"), IOP( "vtsswgs", BSIM4_MOD_VTSSWGS, IF_REAL, "Source gate-edge sidewall trap-assisted voltage dependent parameter"), IOP( "vtsswgd", BSIM4_MOD_VTSSWGD, IF_REAL, "Drain gate-edge sidewall trap-assisted voltage dependent parameter"), IOP( "gbmin", BSIM4_MOD_GBMIN, IF_REAL, "Minimum body conductance"), IOP( "rbdb", BSIM4_MOD_RBDB, IF_REAL, "Resistance between bNode and dbNode"), IOP( "rbpb", BSIM4_MOD_RBPB, IF_REAL, "Resistance between bNodePrime and bNode"), IOP( "rbsb", BSIM4_MOD_RBSB, IF_REAL, "Resistance between bNode and sbNode"), IOP( "rbps", BSIM4_MOD_RBPS, IF_REAL, "Resistance between bNodePrime and sbNode"), IOP( "rbpd", BSIM4_MOD_RBPD, IF_REAL, "Resistance between bNodePrime and bNode"), IOP( "rbps0", BSIM4_MOD_RBPS0, IF_REAL , "Body resistance RBPS scaling"), IOP( "rbpsl", BSIM4_MOD_RBPSL, IF_REAL , "Body resistance RBPS L scaling"), IOP( "rbpsw", BSIM4_MOD_RBPSW, IF_REAL , "Body resistance RBPS W scaling"), IOP( "rbpsnf", BSIM4_MOD_RBPSNF, IF_REAL , "Body resistance RBPS NF scaling"), IOP( "rbpd0", BSIM4_MOD_RBPD0, IF_REAL , "Body resistance RBPD scaling"), IOP( "rbpdl", BSIM4_MOD_RBPDL, IF_REAL , "Body resistance RBPD L scaling"), IOP( "rbpdw", BSIM4_MOD_RBPDW, IF_REAL , "Body resistance RBPD W scaling"), IOP( "rbpdnf", BSIM4_MOD_RBPDNF, IF_REAL , "Body resistance RBPD NF scaling"), IOP( "rbpbx0", BSIM4_MOD_RBPBX0, IF_REAL , "Body resistance RBPBX scaling"), IOP( "rbpbxl", BSIM4_MOD_RBPBXL, IF_REAL , "Body resistance RBPBX L scaling"), IOP( "rbpbxw", BSIM4_MOD_RBPBXW, IF_REAL , "Body resistance RBPBX W scaling"), IOP( "rbpbxnf", BSIM4_MOD_RBPBXNF, IF_REAL , "Body resistance RBPBX NF scaling"), IOP( "rbpby0", BSIM4_MOD_RBPBY0, IF_REAL , "Body resistance RBPBY scaling"), IOP( "rbpbyl", BSIM4_MOD_RBPBYL, IF_REAL , "Body resistance RBPBY L scaling"), IOP( "rbpbyw", BSIM4_MOD_RBPBYW, IF_REAL , "Body resistance RBPBY W scaling"), IOP( "rbpbynf", BSIM4_MOD_RBPBYNF, IF_REAL , "Body resistance RBPBY NF scaling"), IOP( "rbsbx0", BSIM4_MOD_RBSBX0, IF_REAL , "Body resistance RBSBX scaling"), IOP( "rbsby0", BSIM4_MOD_RBSBY0, IF_REAL , "Body resistance RBSBY scaling"), IOP( "rbdbx0", BSIM4_MOD_RBDBX0, IF_REAL , "Body resistance RBDBX scaling"), IOP( "rbdby0", BSIM4_MOD_RBDBY0, IF_REAL , "Body resistance RBDBY scaling"), IOP( "rbsdbxl", BSIM4_MOD_RBSDBXL, IF_REAL , "Body resistance RBSDBX L scaling"), IOP( "rbsdbxw", BSIM4_MOD_RBSDBXW, IF_REAL , "Body resistance RBSDBX W scaling"), IOP( "rbsdbxnf", BSIM4_MOD_RBSDBXNF, IF_REAL , "Body resistance RBSDBX NF scaling"), IOP( "rbsdbyl", BSIM4_MOD_RBSDBYL, IF_REAL , "Body resistance RBSDBY L scaling"), IOP( "rbsdbyw", BSIM4_MOD_RBSDBYW, IF_REAL , "Body resistance RBSDBY W scaling"), IOP( "rbsdbynf", BSIM4_MOD_RBSDBYNF, IF_REAL , "Body resistance RBSDBY NF scaling"), IOP( "lcdsc", BSIM4_MOD_LCDSC, IF_REAL, "Length dependence of cdsc"), IOP( "lcdscb", BSIM4_MOD_LCDSCB, IF_REAL, "Length dependence of cdscb"), IOP( "lcdscd", BSIM4_MOD_LCDSCD, IF_REAL, "Length dependence of cdscd"), IOP( "lcit", BSIM4_MOD_LCIT, IF_REAL, "Length dependence of cit"), IOP( "lnfactor", BSIM4_MOD_LNFACTOR, IF_REAL, "Length dependence of nfactor"), IOP( "lxj", BSIM4_MOD_LXJ, IF_REAL, "Length dependence of xj"), IOP( "lvsat", BSIM4_MOD_LVSAT, IF_REAL, "Length dependence of vsat"), IOP( "lat", BSIM4_MOD_LAT, IF_REAL, "Length dependence of at"), IOP( "la0", BSIM4_MOD_LA0, IF_REAL, "Length dependence of a0"), IOP( "lags", BSIM4_MOD_LAGS, IF_REAL, "Length dependence of ags"), IOP( "la1", BSIM4_MOD_LA1, IF_REAL, "Length dependence of a1"), IOP( "la2", BSIM4_MOD_LA2, IF_REAL, "Length dependence of a2"), IOP( "lketa", BSIM4_MOD_LKETA, IF_REAL, "Length dependence of keta"), IOP( "lnsub", BSIM4_MOD_LNSUB, IF_REAL, "Length dependence of nsub"), IOP( "lndep", BSIM4_MOD_LNDEP, IF_REAL, "Length dependence of ndep"), IOP( "lnsd", BSIM4_MOD_LNSD, IF_REAL, "Length dependence of nsd"), IOP( "lphin", BSIM4_MOD_LPHIN, IF_REAL, "Length dependence of phin"), IOP( "lngate", BSIM4_MOD_LNGATE, IF_REAL, "Length dependence of ngate"), IOP( "lgamma1", BSIM4_MOD_LGAMMA1, IF_REAL, "Length dependence of gamma1"), IOP( "lgamma2", BSIM4_MOD_LGAMMA2, IF_REAL, "Length dependence of gamma2"), IOP( "lvbx", BSIM4_MOD_LVBX, IF_REAL, "Length dependence of vbx"), IOP( "lvbm", BSIM4_MOD_LVBM, IF_REAL, "Length dependence of vbm"), IOP( "lxt", BSIM4_MOD_LXT, IF_REAL, "Length dependence of xt"), IOP( "lk1", BSIM4_MOD_LK1, IF_REAL, "Length dependence of k1"), IOP( "lkt1", BSIM4_MOD_LKT1, IF_REAL, "Length dependence of kt1"), IOP( "lkt1l", BSIM4_MOD_LKT1L, IF_REAL, "Length dependence of kt1l"), IOP( "lkt2", BSIM4_MOD_LKT2, IF_REAL, "Length dependence of kt2"), IOP( "lk2", BSIM4_MOD_LK2, IF_REAL, "Length dependence of k2"), IOP( "lk3", BSIM4_MOD_LK3, IF_REAL, "Length dependence of k3"), IOP( "lk3b", BSIM4_MOD_LK3B, IF_REAL, "Length dependence of k3b"), IOP( "lw0", BSIM4_MOD_LW0, IF_REAL, "Length dependence of w0"), IOP( "ldvtp0", BSIM4_MOD_LDVTP0, IF_REAL, "Length dependence of dvtp0"), IOP( "ldvtp1", BSIM4_MOD_LDVTP1, IF_REAL, "Length dependence of dvtp1"), IOP( "ldvtp2", BSIM4_MOD_LDVTP2, IF_REAL, "Length dependence of dvtp2"), IOP( "ldvtp3", BSIM4_MOD_LDVTP3, IF_REAL, "Length dependence of dvtp3"), IOP( "ldvtp4", BSIM4_MOD_LDVTP4, IF_REAL, "Length dependence of dvtp4"), IOP( "ldvtp5", BSIM4_MOD_LDVTP5, IF_REAL, "Length dependence of dvtp5"), IOP( "llpe0", BSIM4_MOD_LLPE0, IF_REAL, "Length dependence of lpe0"), IOP( "llpeb", BSIM4_MOD_LLPEB, IF_REAL, "Length dependence of lpeb"), IOP( "ldvt0", BSIM4_MOD_LDVT0, IF_REAL, "Length dependence of dvt0"), IOP( "ldvt1", BSIM4_MOD_LDVT1, IF_REAL, "Length dependence of dvt1"), IOP( "ldvt2", BSIM4_MOD_LDVT2, IF_REAL, "Length dependence of dvt2"), IOP( "ldvt0w", BSIM4_MOD_LDVT0W, IF_REAL, "Length dependence of dvt0w"), IOP( "ldvt1w", BSIM4_MOD_LDVT1W, IF_REAL, "Length dependence of dvt1w"), IOP( "ldvt2w", BSIM4_MOD_LDVT2W, IF_REAL, "Length dependence of dvt2w"), IOP( "ldrout", BSIM4_MOD_LDROUT, IF_REAL, "Length dependence of drout"), IOP( "ldsub", BSIM4_MOD_LDSUB, IF_REAL, "Length dependence of dsub"), IOP( "lvth0", BSIM4_MOD_LVTH0, IF_REAL,"Length dependence of vth0"), IOPR("lvtho", BSIM4_MOD_LVTH0, IF_REAL,"Length dependence of vtho"), IOP( "lua", BSIM4_MOD_LUA, IF_REAL, "Length dependence of ua"), IOP( "lua1", BSIM4_MOD_LUA1, IF_REAL, "Length dependence of ua1"), IOP( "lub", BSIM4_MOD_LUB, IF_REAL, "Length dependence of ub"), IOP( "lub1", BSIM4_MOD_LUB1, IF_REAL, "Length dependence of ub1"), IOP( "luc", BSIM4_MOD_LUC, IF_REAL, "Length dependence of uc"), IOP( "luc1", BSIM4_MOD_LUC1, IF_REAL, "Length dependence of uc1"), IOP( "lud", BSIM4_MOD_LUD, IF_REAL, "Length dependence of ud"), IOP( "lud1", BSIM4_MOD_LUD1, IF_REAL, "Length dependence of ud1"), IOP( "lup", BSIM4_MOD_LUP, IF_REAL, "Length dependence of up"), IOP( "llp", BSIM4_MOD_LLP, IF_REAL, "Length dependence of lp"), IOP( "lu0", BSIM4_MOD_LU0, IF_REAL, "Length dependence of u0"), IOP( "lute", BSIM4_MOD_LUTE, IF_REAL, "Length dependence of ute"), IOP( "lucste", BSIM4_MOD_LUCSTE, IF_REAL, "Length dependence of ucste"), IOP( "lvoff", BSIM4_MOD_LVOFF, IF_REAL, "Length dependence of voff"), IOP( "lminv", BSIM4_MOD_LMINV, IF_REAL, "Length dependence of minv"), IOP( "lminvcv", BSIM4_MOD_LMINVCV, IF_REAL, "Length dependence of minvcv"), IOP( "ldelta", BSIM4_MOD_LDELTA, IF_REAL, "Length dependence of delta"), IOP( "lrdsw", BSIM4_MOD_LRDSW, IF_REAL, "Length dependence of rdsw "), IOP( "lrsw", BSIM4_MOD_LRSW, IF_REAL, "Length dependence of rsw"), IOP( "lrdw", BSIM4_MOD_LRDW, IF_REAL, "Length dependence of rdw"), IOP( "lprwg", BSIM4_MOD_LPRWG, IF_REAL, "Length dependence of prwg "), IOP( "lprwb", BSIM4_MOD_LPRWB, IF_REAL, "Length dependence of prwb "), IOP( "lprt", BSIM4_MOD_LPRT, IF_REAL, "Length dependence of prt "), IOP( "leta0", BSIM4_MOD_LETA0, IF_REAL, "Length dependence of eta0"), IOP( "letab", BSIM4_MOD_LETAB, IF_REAL, "Length dependence of etab"), IOP( "lpclm", BSIM4_MOD_LPCLM, IF_REAL, "Length dependence of pclm"), IOP( "lpdiblc1", BSIM4_MOD_LPDIBL1, IF_REAL, "Length dependence of pdiblc1"), IOP( "lpdiblc2", BSIM4_MOD_LPDIBL2, IF_REAL, "Length dependence of pdiblc2"), IOP( "lpdiblcb", BSIM4_MOD_LPDIBLB, IF_REAL, "Length dependence of pdiblcb"), IOP( "lfprout", BSIM4_MOD_LFPROUT, IF_REAL, "Length dependence of pdiblcb"), IOP( "lpdits", BSIM4_MOD_LPDITS, IF_REAL, "Length dependence of pdits"), IOP( "lpditsd", BSIM4_MOD_LPDITSD, IF_REAL, "Length dependence of pditsd"), IOP( "lpscbe1", BSIM4_MOD_LPSCBE1, IF_REAL, "Length dependence of pscbe1"), IOP( "lpscbe2", BSIM4_MOD_LPSCBE2, IF_REAL, "Length dependence of pscbe2"), IOP( "lpvag", BSIM4_MOD_LPVAG, IF_REAL, "Length dependence of pvag"), IOP( "lwr", BSIM4_MOD_LWR, IF_REAL, "Length dependence of wr"), IOP( "ldwg", BSIM4_MOD_LDWG, IF_REAL, "Length dependence of dwg"), IOP( "ldwb", BSIM4_MOD_LDWB, IF_REAL, "Length dependence of dwb"), IOP( "lb0", BSIM4_MOD_LB0, IF_REAL, "Length dependence of b0"), IOP( "lb1", BSIM4_MOD_LB1, IF_REAL, "Length dependence of b1"), IOP( "lcgsl", BSIM4_MOD_LCGSL, IF_REAL, "Length dependence of cgsl"), IOP( "lcgdl", BSIM4_MOD_LCGDL, IF_REAL, "Length dependence of cgdl"), IOP( "lckappas", BSIM4_MOD_LCKAPPAS, IF_REAL, "Length dependence of ckappas"), IOP( "lckappad", BSIM4_MOD_LCKAPPAD, IF_REAL, "Length dependence of ckappad"), IOP( "lcf", BSIM4_MOD_LCF, IF_REAL, "Length dependence of cf"), IOP( "lclc", BSIM4_MOD_LCLC, IF_REAL, "Length dependence of clc"), IOP( "lcle", BSIM4_MOD_LCLE, IF_REAL, "Length dependence of cle"), IOP( "lalpha0", BSIM4_MOD_LALPHA0, IF_REAL, "Length dependence of alpha0"), IOP( "lalpha1", BSIM4_MOD_LALPHA1, IF_REAL, "Length dependence of alpha1"), IOP( "lbeta0", BSIM4_MOD_LBETA0, IF_REAL, "Length dependence of beta0"), IOP( "lagidl", BSIM4_MOD_LAGIDL, IF_REAL, "Length dependence of agidl"), IOP( "lbgidl", BSIM4_MOD_LBGIDL, IF_REAL, "Length dependence of bgidl"), IOP( "lcgidl", BSIM4_MOD_LCGIDL, IF_REAL, "Length dependence of cgidl"), IOP( "lrgidl", BSIM4_MOD_LRGIDL, IF_REAL, "Length dependence of rgidl"), /* v4.7 New GIDL/GISL */ IOP( "lkgidl", BSIM4_MOD_LKGIDL, IF_REAL, "Length dependence of kgidl"), /* v4.7 New GIDL/GISL */ IOP( "lfgidl", BSIM4_MOD_LFGIDL, IF_REAL, "Length dependence of fgidl"), /* v4.7 New GIDL/GISL */ IOP( "legidl", BSIM4_MOD_LEGIDL, IF_REAL, "Length dependence of egidl"), IOP( "lagisl", BSIM4_MOD_LAGISL, IF_REAL, "Length dependence of agisl"), IOP( "lbgisl", BSIM4_MOD_LBGISL, IF_REAL, "Length dependence of bgisl"), IOP( "lcgisl", BSIM4_MOD_LCGISL, IF_REAL, "Length dependence of cgisl"), IOP( "lrgisl", BSIM4_MOD_LRGISL, IF_REAL, "Length dependence of rgisl"), /* v4.7 New GIDL/GISL */ IOP( "lkgisl", BSIM4_MOD_LKGISL, IF_REAL, "Length dependence of kgisl"), /* v4.7 New GIDL/GISL */ IOP( "lfgisl", BSIM4_MOD_LFGISL, IF_REAL, "Length dependence of fgisl"), /* v4.7 New GIDL/GISL */ IOP( "legisl", BSIM4_MOD_LEGISL, IF_REAL, "Length dependence of egisl"), IOP( "laigc", BSIM4_MOD_LAIGC, IF_REAL, "Length dependence of aigc"), IOP( "lbigc", BSIM4_MOD_LBIGC, IF_REAL, "Length dependence of bigc"), IOP( "lcigc", BSIM4_MOD_LCIGC, IF_REAL, "Length dependence of cigc"), IOP( "laigsd", BSIM4_MOD_LAIGSD, IF_REAL, "Length dependence of aigsd"), IOP( "lbigsd", BSIM4_MOD_LBIGSD, IF_REAL, "Length dependence of bigsd"), IOP( "lcigsd", BSIM4_MOD_LCIGSD, IF_REAL, "Length dependence of cigsd"), IOP( "laigs", BSIM4_MOD_LAIGS, IF_REAL, "Length dependence of aigs"), IOP( "lbigs", BSIM4_MOD_LBIGS, IF_REAL, "Length dependence of bigs"), IOP( "lcigs", BSIM4_MOD_LCIGS, IF_REAL, "Length dependence of cigs"), IOP( "laigd", BSIM4_MOD_LAIGD, IF_REAL, "Length dependence of aigd"), IOP( "lbigd", BSIM4_MOD_LBIGD, IF_REAL, "Length dependence of bigd"), IOP( "lcigd", BSIM4_MOD_LCIGD, IF_REAL, "Length dependence of cigd"), IOP( "laigbacc", BSIM4_MOD_LAIGBACC, IF_REAL, "Length dependence of aigbacc"), IOP( "lbigbacc", BSIM4_MOD_LBIGBACC, IF_REAL, "Length dependence of bigbacc"), IOP( "lcigbacc", BSIM4_MOD_LCIGBACC, IF_REAL, "Length dependence of cigbacc"), IOP( "laigbinv", BSIM4_MOD_LAIGBINV, IF_REAL, "Length dependence of aigbinv"), IOP( "lbigbinv", BSIM4_MOD_LBIGBINV, IF_REAL, "Length dependence of bigbinv"), IOP( "lcigbinv", BSIM4_MOD_LCIGBINV, IF_REAL, "Length dependence of cigbinv"), IOP( "lnigc", BSIM4_MOD_LNIGC, IF_REAL, "Length dependence of nigc"), IOP( "lnigbinv", BSIM4_MOD_LNIGBINV, IF_REAL, "Length dependence of nigbinv"), IOP( "lnigbacc", BSIM4_MOD_LNIGBACC, IF_REAL, "Length dependence of nigbacc"), IOP( "lntox", BSIM4_MOD_LNTOX, IF_REAL, "Length dependence of ntox"), IOP( "leigbinv", BSIM4_MOD_LEIGBINV, IF_REAL, "Length dependence for eigbinv"), IOP( "lpigcd", BSIM4_MOD_LPIGCD, IF_REAL, "Length dependence for pigcd"), IOP( "lpoxedge", BSIM4_MOD_LPOXEDGE, IF_REAL, "Length dependence for poxedge"), IOP( "lvfbcv", BSIM4_MOD_LVFBCV, IF_REAL, "Length dependence of vfbcv"), IOP( "lvfb", BSIM4_MOD_LVFB, IF_REAL, "Length dependence of vfb"), IOP( "lacde", BSIM4_MOD_LACDE, IF_REAL, "Length dependence of acde"), IOP( "lmoin", BSIM4_MOD_LMOIN, IF_REAL, "Length dependence of moin"), IOP( "lnoff", BSIM4_MOD_LNOFF, IF_REAL, "Length dependence of noff"), IOP( "lvoffcv", BSIM4_MOD_LVOFFCV, IF_REAL, "Length dependence of voffcv"), IOP( "lxrcrg1", BSIM4_MOD_LXRCRG1, IF_REAL, "Length dependence of xrcrg1"), IOP( "lxrcrg2", BSIM4_MOD_LXRCRG2, IF_REAL, "Length dependence of xrcrg2"), IOP( "llambda", BSIM4_MOD_LLAMBDA, IF_REAL, "Length dependence of lambda"), IOP( "lvtl", BSIM4_MOD_LVTL, IF_REAL, " Length dependence of vtl"), IOP( "lxn", BSIM4_MOD_LXN, IF_REAL, " Length dependence of xn"), IOP( "leu", BSIM4_MOD_LEU, IF_REAL, " Length dependence of eu"), IOP( "lucs", BSIM4_MOD_LUCS, IF_REAL, "Length dependence of lucs"), IOP( "lvfbsdoff", BSIM4_MOD_LVFBSDOFF, IF_REAL, "Length dependence of vfbsdoff"), IOP( "ltvfbsdoff", BSIM4_MOD_LTVFBSDOFF, IF_REAL, "Length dependence of tvfbsdoff"), IOP( "ltvoff", BSIM4_MOD_LTVOFF, IF_REAL, "Length dependence of tvoff"), IOP( "ltnfactor", BSIM4_MOD_LTNFACTOR, IF_REAL, "Length dependence of tnfactor"), /* v4.7 Tanvir*/ IOP( "lteta0", BSIM4_MOD_LTETA0, IF_REAL, "Length dependence of teta0"), /* v4.7 Tanvir*/ IOP( "ltvoffcv", BSIM4_MOD_LTVOFFCV, IF_REAL, "Length dependence of tvoffcv"), /* v4.7 Tanvir*/ IOP( "wcdsc", BSIM4_MOD_WCDSC, IF_REAL, "Width dependence of cdsc"), IOP( "wcdscb", BSIM4_MOD_WCDSCB, IF_REAL, "Width dependence of cdscb"), IOP( "wcdscd", BSIM4_MOD_WCDSCD, IF_REAL, "Width dependence of cdscd"), IOP( "wcit", BSIM4_MOD_WCIT, IF_REAL, "Width dependence of cit"), IOP( "wnfactor", BSIM4_MOD_WNFACTOR, IF_REAL, "Width dependence of nfactor"), IOP( "wxj", BSIM4_MOD_WXJ, IF_REAL, "Width dependence of xj"), IOP( "wvsat", BSIM4_MOD_WVSAT, IF_REAL, "Width dependence of vsat"), IOP( "wat", BSIM4_MOD_WAT, IF_REAL, "Width dependence of at"), IOP( "wa0", BSIM4_MOD_WA0, IF_REAL, "Width dependence of a0"), IOP( "wags", BSIM4_MOD_WAGS, IF_REAL, "Width dependence of ags"), IOP( "wa1", BSIM4_MOD_WA1, IF_REAL, "Width dependence of a1"), IOP( "wa2", BSIM4_MOD_WA2, IF_REAL, "Width dependence of a2"), IOP( "wketa", BSIM4_MOD_WKETA, IF_REAL, "Width dependence of keta"), IOP( "wnsub", BSIM4_MOD_WNSUB, IF_REAL, "Width dependence of nsub"), IOP( "wndep", BSIM4_MOD_WNDEP, IF_REAL, "Width dependence of ndep"), IOP( "wnsd", BSIM4_MOD_WNSD, IF_REAL, "Width dependence of nsd"), IOP( "wphin", BSIM4_MOD_WPHIN, IF_REAL, "Width dependence of phin"), IOP( "wngate", BSIM4_MOD_WNGATE, IF_REAL, "Width dependence of ngate"), IOP( "wgamma1", BSIM4_MOD_WGAMMA1, IF_REAL, "Width dependence of gamma1"), IOP( "wgamma2", BSIM4_MOD_WGAMMA2, IF_REAL, "Width dependence of gamma2"), IOP( "wvbx", BSIM4_MOD_WVBX, IF_REAL, "Width dependence of vbx"), IOP( "wvbm", BSIM4_MOD_WVBM, IF_REAL, "Width dependence of vbm"), IOP( "wxt", BSIM4_MOD_WXT, IF_REAL, "Width dependence of xt"), IOP( "wk1", BSIM4_MOD_WK1, IF_REAL, "Width dependence of k1"), IOP( "wkt1", BSIM4_MOD_WKT1, IF_REAL, "Width dependence of kt1"), IOP( "wkt1l", BSIM4_MOD_WKT1L, IF_REAL, "Width dependence of kt1l"), IOP( "wkt2", BSIM4_MOD_WKT2, IF_REAL, "Width dependence of kt2"), IOP( "wk2", BSIM4_MOD_WK2, IF_REAL, "Width dependence of k2"), IOP( "wk3", BSIM4_MOD_WK3, IF_REAL, "Width dependence of k3"), IOP( "wk3b", BSIM4_MOD_WK3B, IF_REAL, "Width dependence of k3b"), IOP( "ww0", BSIM4_MOD_WW0, IF_REAL, "Width dependence of w0"), IOP( "wdvtp0", BSIM4_MOD_WDVTP0, IF_REAL, "Width dependence of dvtp0"), IOP( "wdvtp1", BSIM4_MOD_WDVTP1, IF_REAL, "Width dependence of dvtp1"), IOP( "wdvtp2", BSIM4_MOD_WDVTP2, IF_REAL, "Width dependence of dvtp2"), IOP( "wdvtp3", BSIM4_MOD_WDVTP3, IF_REAL, "Width dependence of dvtp3"), IOP( "wdvtp4", BSIM4_MOD_WDVTP4, IF_REAL, "Width dependence of dvtp4"), IOP( "wdvtp5", BSIM4_MOD_WDVTP5, IF_REAL, "Width dependence of dvtp5"), IOP( "wlpe0", BSIM4_MOD_WLPE0, IF_REAL, "Width dependence of lpe0"), IOP( "wlpeb", BSIM4_MOD_WLPEB, IF_REAL, "Width dependence of lpeb"), IOP( "wdvt0", BSIM4_MOD_WDVT0, IF_REAL, "Width dependence of dvt0"), IOP( "wdvt1", BSIM4_MOD_WDVT1, IF_REAL, "Width dependence of dvt1"), IOP( "wdvt2", BSIM4_MOD_WDVT2, IF_REAL, "Width dependence of dvt2"), IOP( "wdvt0w", BSIM4_MOD_WDVT0W, IF_REAL, "Width dependence of dvt0w"), IOP( "wdvt1w", BSIM4_MOD_WDVT1W, IF_REAL, "Width dependence of dvt1w"), IOP( "wdvt2w", BSIM4_MOD_WDVT2W, IF_REAL, "Width dependence of dvt2w"), IOP( "wdrout", BSIM4_MOD_WDROUT, IF_REAL, "Width dependence of drout"), IOP( "wdsub", BSIM4_MOD_WDSUB, IF_REAL, "Width dependence of dsub"), IOP( "wvth0", BSIM4_MOD_WVTH0, IF_REAL,"Width dependence of vth0"), IOPR("wvtho", BSIM4_MOD_WVTH0, IF_REAL,"Width dependence of vtho"), IOP( "wua", BSIM4_MOD_WUA, IF_REAL, "Width dependence of ua"), IOP( "wua1", BSIM4_MOD_WUA1, IF_REAL, "Width dependence of ua1"), IOP( "wub", BSIM4_MOD_WUB, IF_REAL, "Width dependence of ub"), IOP( "wub1", BSIM4_MOD_WUB1, IF_REAL, "Width dependence of ub1"), IOP( "wuc", BSIM4_MOD_WUC, IF_REAL, "Width dependence of uc"), IOP( "wuc1", BSIM4_MOD_WUC1, IF_REAL, "Width dependence of uc1"), IOP( "wud", BSIM4_MOD_WUD, IF_REAL, "Width dependence of ud"), IOP( "wud1", BSIM4_MOD_WUD1, IF_REAL, "Width dependence of ud1"), IOP( "wup", BSIM4_MOD_WUP, IF_REAL, "Width dependence of up"), IOP( "wlp", BSIM4_MOD_WLP, IF_REAL, "Width dependence of lp"), IOP( "wu0", BSIM4_MOD_WU0, IF_REAL, "Width dependence of u0"), IOP( "wute", BSIM4_MOD_WUTE, IF_REAL, "Width dependence of ute"), IOP( "wucste", BSIM4_MOD_WUCSTE, IF_REAL, "Width dependence of ucste"), IOP( "wvoff", BSIM4_MOD_WVOFF, IF_REAL, "Width dependence of voff"), IOP( "wminv", BSIM4_MOD_WMINV, IF_REAL, "Width dependence of minv"), IOP( "wminvcv", BSIM4_MOD_WMINVCV, IF_REAL, "Width dependence of minvcv"), IOP( "wdelta", BSIM4_MOD_WDELTA, IF_REAL, "Width dependence of delta"), IOP( "wrdsw", BSIM4_MOD_WRDSW, IF_REAL, "Width dependence of rdsw "), IOP( "wrsw", BSIM4_MOD_WRSW, IF_REAL, "Width dependence of rsw"), IOP( "wrdw", BSIM4_MOD_WRDW, IF_REAL, "Width dependence of rdw"), IOP( "wprwg", BSIM4_MOD_WPRWG, IF_REAL, "Width dependence of prwg "), IOP( "wprwb", BSIM4_MOD_WPRWB, IF_REAL, "Width dependence of prwb "), IOP( "wprt", BSIM4_MOD_WPRT, IF_REAL, "Width dependence of prt"), IOP( "weta0", BSIM4_MOD_WETA0, IF_REAL, "Width dependence of eta0"), IOP( "wetab", BSIM4_MOD_WETAB, IF_REAL, "Width dependence of etab"), IOP( "wpclm", BSIM4_MOD_WPCLM, IF_REAL, "Width dependence of pclm"), IOP( "wpdiblc1", BSIM4_MOD_WPDIBL1, IF_REAL, "Width dependence of pdiblc1"), IOP( "wpdiblc2", BSIM4_MOD_WPDIBL2, IF_REAL, "Width dependence of pdiblc2"), IOP( "wpdiblcb", BSIM4_MOD_WPDIBLB, IF_REAL, "Width dependence of pdiblcb"), IOP( "wfprout", BSIM4_MOD_WFPROUT, IF_REAL, "Width dependence of pdiblcb"), IOP( "wpdits", BSIM4_MOD_WPDITS, IF_REAL, "Width dependence of pdits"), IOP( "wpditsd", BSIM4_MOD_WPDITSD, IF_REAL, "Width dependence of pditsd"), IOP( "wpscbe1", BSIM4_MOD_WPSCBE1, IF_REAL, "Width dependence of pscbe1"), IOP( "wpscbe2", BSIM4_MOD_WPSCBE2, IF_REAL, "Width dependence of pscbe2"), IOP( "wpvag", BSIM4_MOD_WPVAG, IF_REAL, "Width dependence of pvag"), IOP( "wwr", BSIM4_MOD_WWR, IF_REAL, "Width dependence of wr"), IOP( "wdwg", BSIM4_MOD_WDWG, IF_REAL, "Width dependence of dwg"), IOP( "wdwb", BSIM4_MOD_WDWB, IF_REAL, "Width dependence of dwb"), IOP( "wb0", BSIM4_MOD_WB0, IF_REAL, "Width dependence of b0"), IOP( "wb1", BSIM4_MOD_WB1, IF_REAL, "Width dependence of b1"), IOP( "wcgsl", BSIM4_MOD_WCGSL, IF_REAL, "Width dependence of cgsl"), IOP( "wcgdl", BSIM4_MOD_WCGDL, IF_REAL, "Width dependence of cgdl"), IOP( "wckappas", BSIM4_MOD_WCKAPPAS, IF_REAL, "Width dependence of ckappas"), IOP( "wckappad", BSIM4_MOD_WCKAPPAD, IF_REAL, "Width dependence of ckappad"), IOP( "wcf", BSIM4_MOD_WCF, IF_REAL, "Width dependence of cf"), IOP( "wclc", BSIM4_MOD_WCLC, IF_REAL, "Width dependence of clc"), IOP( "wcle", BSIM4_MOD_WCLE, IF_REAL, "Width dependence of cle"), IOP( "walpha0", BSIM4_MOD_WALPHA0, IF_REAL, "Width dependence of alpha0"), IOP( "walpha1", BSIM4_MOD_WALPHA1, IF_REAL, "Width dependence of alpha1"), IOP( "wbeta0", BSIM4_MOD_WBETA0, IF_REAL, "Width dependence of beta0"), IOP( "wagidl", BSIM4_MOD_WAGIDL, IF_REAL, "Width dependence of agidl"), IOP( "wbgidl", BSIM4_MOD_WBGIDL, IF_REAL, "Width dependence of bgidl"), IOP( "wcgidl", BSIM4_MOD_WCGIDL, IF_REAL, "Width dependence of cgidl"), IOP( "wrgidl", BSIM4_MOD_WRGIDL, IF_REAL, "Width dependence of rgidl"), /* v4.7 New GIDL/GISL */ IOP( "wkgidl", BSIM4_MOD_WKGIDL, IF_REAL, "Width dependence of kgidl"), /* v4.7 New GIDL/GISL */ IOP( "wfgidl", BSIM4_MOD_WFGIDL, IF_REAL, "Width dependence of fgidl"), /* v4.7 New GIDL/GISL */ IOP( "wegidl", BSIM4_MOD_WEGIDL, IF_REAL, "Width dependence of egidl"), IOP( "wagisl", BSIM4_MOD_WAGISL, IF_REAL, "Width dependence of agisl"), IOP( "wbgisl", BSIM4_MOD_WBGISL, IF_REAL, "Width dependence of bgisl"), IOP( "wcgisl", BSIM4_MOD_WCGISL, IF_REAL, "Width dependence of cgisl"), IOP( "wrgisl", BSIM4_MOD_WRGISL, IF_REAL, "Width dependence of rgisl"), /* v4.7 New GIDL/GISL */ IOP( "wkgisl", BSIM4_MOD_WKGISL, IF_REAL, "Width dependence of kgisl"), /* v4.7 New GIDL/GISL */ IOP( "wfgisl", BSIM4_MOD_WFGISL, IF_REAL, "Width dependence of fgisl"), /* v4.7 New GIDL/GISL */ IOP( "wegisl", BSIM4_MOD_WEGISL, IF_REAL, "Width dependence of egisl"), IOP( "waigc", BSIM4_MOD_WAIGC, IF_REAL, "Width dependence of aigc"), IOP( "wbigc", BSIM4_MOD_WBIGC, IF_REAL, "Width dependence of bigc"), IOP( "wcigc", BSIM4_MOD_WCIGC, IF_REAL, "Width dependence of cigc"), IOP( "waigsd", BSIM4_MOD_WAIGSD, IF_REAL, "Width dependence of aigsd"), IOP( "wbigsd", BSIM4_MOD_WBIGSD, IF_REAL, "Width dependence of bigsd"), IOP( "wcigsd", BSIM4_MOD_WCIGSD, IF_REAL, "Width dependence of cigsd"), IOP( "waigs", BSIM4_MOD_WAIGS, IF_REAL, "Width dependence of aigs"), IOP( "wbigs", BSIM4_MOD_WBIGS, IF_REAL, "Width dependence of bigs"), IOP( "wcigs", BSIM4_MOD_WCIGS, IF_REAL, "Width dependence of cigs"), IOP( "waigd", BSIM4_MOD_WAIGD, IF_REAL, "Width dependence of aigd"), IOP( "wbigd", BSIM4_MOD_WBIGD, IF_REAL, "Width dependence of bigd"), IOP( "wcigd", BSIM4_MOD_WCIGD, IF_REAL, "Width dependence of cigd"), IOP( "waigbacc", BSIM4_MOD_WAIGBACC, IF_REAL, "Width dependence of aigbacc"), IOP( "wbigbacc", BSIM4_MOD_WBIGBACC, IF_REAL, "Width dependence of bigbacc"), IOP( "wcigbacc", BSIM4_MOD_WCIGBACC, IF_REAL, "Width dependence of cigbacc"), IOP( "waigbinv", BSIM4_MOD_WAIGBINV, IF_REAL, "Width dependence of aigbinv"), IOP( "wbigbinv", BSIM4_MOD_WBIGBINV, IF_REAL, "Width dependence of bigbinv"), IOP( "wcigbinv", BSIM4_MOD_WCIGBINV, IF_REAL, "Width dependence of cigbinv"), IOP( "wnigc", BSIM4_MOD_WNIGC, IF_REAL, "Width dependence of nigc"), IOP( "wnigbinv", BSIM4_MOD_WNIGBINV, IF_REAL, "Width dependence of nigbinv"), IOP( "wnigbacc", BSIM4_MOD_WNIGBACC, IF_REAL, "Width dependence of nigbacc"), IOP( "wntox", BSIM4_MOD_WNTOX, IF_REAL, "Width dependence of ntox"), IOP( "weigbinv", BSIM4_MOD_WEIGBINV, IF_REAL, "Width dependence for eigbinv"), IOP( "wpigcd", BSIM4_MOD_WPIGCD, IF_REAL, "Width dependence for pigcd"), IOP( "wpoxedge", BSIM4_MOD_WPOXEDGE, IF_REAL, "Width dependence for poxedge"), IOP( "wvfbcv", BSIM4_MOD_WVFBCV, IF_REAL, "Width dependence of vfbcv"), IOP( "wvfb", BSIM4_MOD_WVFB, IF_REAL, "Width dependence of vfb"), IOP( "wacde", BSIM4_MOD_WACDE, IF_REAL, "Width dependence of acde"), IOP( "wmoin", BSIM4_MOD_WMOIN, IF_REAL, "Width dependence of moin"), IOP( "wnoff", BSIM4_MOD_WNOFF, IF_REAL, "Width dependence of noff"), IOP( "wvoffcv", BSIM4_MOD_WVOFFCV, IF_REAL, "Width dependence of voffcv"), IOP( "wxrcrg1", BSIM4_MOD_WXRCRG1, IF_REAL, "Width dependence of xrcrg1"), IOP( "wxrcrg2", BSIM4_MOD_WXRCRG2, IF_REAL, "Width dependence of xrcrg2"), IOP( "wlambda", BSIM4_MOD_WLAMBDA, IF_REAL, "Width dependence of lambda"), IOP( "wvtl", BSIM4_MOD_WVTL, IF_REAL, "Width dependence of vtl"), IOP( "wxn", BSIM4_MOD_WXN, IF_REAL, "Width dependence of xn"), IOP( "weu", BSIM4_MOD_WEU, IF_REAL, "Width dependence of eu"), IOP( "wucs", BSIM4_MOD_WUCS, IF_REAL, "Width dependence of ucs"), IOP( "wvfbsdoff", BSIM4_MOD_WVFBSDOFF, IF_REAL, "Width dependence of vfbsdoff"), IOP( "wtvfbsdoff", BSIM4_MOD_WTVFBSDOFF, IF_REAL, "Width dependence of tvfbsdoff"), IOP( "wtvoff", BSIM4_MOD_WTVOFF, IF_REAL, "Width dependence of tvoff"), IOP( "wtnfactor", BSIM4_MOD_WTNFACTOR, IF_REAL, "Width dependence of tnfactor"), /* v4.7 Tanvir*/ IOP( "wteta0", BSIM4_MOD_WTETA0, IF_REAL, "Width dependence of teta0"), /* v4.7 Tanvir*/ IOP( "wtvoffcv", BSIM4_MOD_WTVOFFCV, IF_REAL, "Width dependence of tvoffcv"), /* v4.7 Tanvir*/ IOP( "pcdsc", BSIM4_MOD_PCDSC, IF_REAL, "Cross-term dependence of cdsc"), IOP( "pcdscb", BSIM4_MOD_PCDSCB, IF_REAL, "Cross-term dependence of cdscb"), IOP( "pcdscd", BSIM4_MOD_PCDSCD, IF_REAL, "Cross-term dependence of cdscd"), IOP( "pcit", BSIM4_MOD_PCIT, IF_REAL, "Cross-term dependence of cit"), IOP( "pnfactor", BSIM4_MOD_PNFACTOR, IF_REAL, "Cross-term dependence of nfactor"), IOP( "pxj", BSIM4_MOD_PXJ, IF_REAL, "Cross-term dependence of xj"), IOP( "pvsat", BSIM4_MOD_PVSAT, IF_REAL, "Cross-term dependence of vsat"), IOP( "pat", BSIM4_MOD_PAT, IF_REAL, "Cross-term dependence of at"), IOP( "pa0", BSIM4_MOD_PA0, IF_REAL, "Cross-term dependence of a0"), IOP( "pags", BSIM4_MOD_PAGS, IF_REAL, "Cross-term dependence of ags"), IOP( "pa1", BSIM4_MOD_PA1, IF_REAL, "Cross-term dependence of a1"), IOP( "pa2", BSIM4_MOD_PA2, IF_REAL, "Cross-term dependence of a2"), IOP( "pketa", BSIM4_MOD_PKETA, IF_REAL, "Cross-term dependence of keta"), IOP( "pnsub", BSIM4_MOD_PNSUB, IF_REAL, "Cross-term dependence of nsub"), IOP( "pndep", BSIM4_MOD_PNDEP, IF_REAL, "Cross-term dependence of ndep"), IOP( "pnsd", BSIM4_MOD_PNSD, IF_REAL, "Cross-term dependence of nsd"), IOP( "pphin", BSIM4_MOD_PPHIN, IF_REAL, "Cross-term dependence of phin"), IOP( "pngate", BSIM4_MOD_PNGATE, IF_REAL, "Cross-term dependence of ngate"), IOP( "pgamma1", BSIM4_MOD_PGAMMA1, IF_REAL, "Cross-term dependence of gamma1"), IOP( "pgamma2", BSIM4_MOD_PGAMMA2, IF_REAL, "Cross-term dependence of gamma2"), IOP( "pvbx", BSIM4_MOD_PVBX, IF_REAL, "Cross-term dependence of vbx"), IOP( "pvbm", BSIM4_MOD_PVBM, IF_REAL, "Cross-term dependence of vbm"), IOP( "pxt", BSIM4_MOD_PXT, IF_REAL, "Cross-term dependence of xt"), IOP( "pk1", BSIM4_MOD_PK1, IF_REAL, "Cross-term dependence of k1"), IOP( "pkt1", BSIM4_MOD_PKT1, IF_REAL, "Cross-term dependence of kt1"), IOP( "pkt1l", BSIM4_MOD_PKT1L, IF_REAL, "Cross-term dependence of kt1l"), IOP( "pkt2", BSIM4_MOD_PKT2, IF_REAL, "Cross-term dependence of kt2"), IOP( "pk2", BSIM4_MOD_PK2, IF_REAL, "Cross-term dependence of k2"), IOP( "pk3", BSIM4_MOD_PK3, IF_REAL, "Cross-term dependence of k3"), IOP( "pk3b", BSIM4_MOD_PK3B, IF_REAL, "Cross-term dependence of k3b"), IOP( "pw0", BSIM4_MOD_PW0, IF_REAL, "Cross-term dependence of w0"), IOP( "pdvtp0", BSIM4_MOD_PDVTP0, IF_REAL, "Cross-term dependence of dvtp0"), IOP( "pdvtp1", BSIM4_MOD_PDVTP1, IF_REAL, "Cross-term dependence of dvtp1"), IOP( "pdvtp2", BSIM4_MOD_PDVTP2, IF_REAL, "Cross-term dependence of dvtp2"), IOP( "pdvtp3", BSIM4_MOD_PDVTP3, IF_REAL, "Cross-term dependence of dvtp3"), IOP( "pdvtp4", BSIM4_MOD_PDVTP4, IF_REAL, "Cross-term dependence of dvtp4"), IOP( "pdvtp5", BSIM4_MOD_PDVTP5, IF_REAL, "Cross-term dependence of dvtp5"), IOP( "plpe0", BSIM4_MOD_PLPE0, IF_REAL, "Cross-term dependence of lpe0"), IOP( "plpeb", BSIM4_MOD_PLPEB, IF_REAL, "Cross-term dependence of lpeb"), IOP( "pdvt0", BSIM4_MOD_PDVT0, IF_REAL, "Cross-term dependence of dvt0"), IOP( "pdvt1", BSIM4_MOD_PDVT1, IF_REAL, "Cross-term dependence of dvt1"), IOP( "pdvt2", BSIM4_MOD_PDVT2, IF_REAL, "Cross-term dependence of dvt2"), IOP( "pdvt0w", BSIM4_MOD_PDVT0W, IF_REAL, "Cross-term dependence of dvt0w"), IOP( "pdvt1w", BSIM4_MOD_PDVT1W, IF_REAL, "Cross-term dependence of dvt1w"), IOP( "pdvt2w", BSIM4_MOD_PDVT2W, IF_REAL, "Cross-term dependence of dvt2w"), IOP( "pdrout", BSIM4_MOD_PDROUT, IF_REAL, "Cross-term dependence of drout"), IOP( "pdsub", BSIM4_MOD_PDSUB, IF_REAL, "Cross-term dependence of dsub"), IOP( "pvth0", BSIM4_MOD_PVTH0, IF_REAL,"Cross-term dependence of vth0"), IOPR("pvtho", BSIM4_MOD_PVTH0, IF_REAL,"Cross-term dependence of vtho"), IOP( "pua", BSIM4_MOD_PUA, IF_REAL, "Cross-term dependence of ua"), IOP( "pua1", BSIM4_MOD_PUA1, IF_REAL, "Cross-term dependence of ua1"), IOP( "pub", BSIM4_MOD_PUB, IF_REAL, "Cross-term dependence of ub"), IOP( "pub1", BSIM4_MOD_PUB1, IF_REAL, "Cross-term dependence of ub1"), IOP( "puc", BSIM4_MOD_PUC, IF_REAL, "Cross-term dependence of uc"), IOP( "puc1", BSIM4_MOD_PUC1, IF_REAL, "Cross-term dependence of uc1"), IOP( "pud", BSIM4_MOD_PUD, IF_REAL, "Cross-term dependence of ud"), IOP( "pud1", BSIM4_MOD_PUD1, IF_REAL, "Cross-term dependence of ud1"), IOP( "pup", BSIM4_MOD_PUP, IF_REAL, "Cross-term dependence of up"), IOP( "plp", BSIM4_MOD_PLP, IF_REAL, "Cross-term dependence of lp"), IOP( "pu0", BSIM4_MOD_PU0, IF_REAL, "Cross-term dependence of u0"), IOP( "pute", BSIM4_MOD_PUTE, IF_REAL, "Cross-term dependence of ute"), IOP( "pucste", BSIM4_MOD_PUCSTE, IF_REAL, "Cross-term dependence of ucste"), IOP( "pvoff", BSIM4_MOD_PVOFF, IF_REAL, "Cross-term dependence of voff"), IOP( "pminv", BSIM4_MOD_PMINV, IF_REAL, "Cross-term dependence of minv"), IOP( "pminvcv", BSIM4_MOD_PMINVCV, IF_REAL, "Cross-term dependence of minvcv"), IOP( "pdelta", BSIM4_MOD_PDELTA, IF_REAL, "Cross-term dependence of delta"), IOP( "prdsw", BSIM4_MOD_PRDSW, IF_REAL, "Cross-term dependence of rdsw "), IOP( "prsw", BSIM4_MOD_PRSW, IF_REAL, "Cross-term dependence of rsw"), IOP( "prdw", BSIM4_MOD_PRDW, IF_REAL, "Cross-term dependence of rdw"), IOP( "pprwg", BSIM4_MOD_PPRWG, IF_REAL, "Cross-term dependence of prwg "), IOP( "pprwb", BSIM4_MOD_PPRWB, IF_REAL, "Cross-term dependence of prwb "), IOP( "pprt", BSIM4_MOD_PPRT, IF_REAL, "Cross-term dependence of prt "), IOP( "peta0", BSIM4_MOD_PETA0, IF_REAL, "Cross-term dependence of eta0"), IOP( "petab", BSIM4_MOD_PETAB, IF_REAL, "Cross-term dependence of etab"), IOP( "ppclm", BSIM4_MOD_PPCLM, IF_REAL, "Cross-term dependence of pclm"), IOP( "ppdiblc1", BSIM4_MOD_PPDIBL1, IF_REAL, "Cross-term dependence of pdiblc1"), IOP( "ppdiblc2", BSIM4_MOD_PPDIBL2, IF_REAL, "Cross-term dependence of pdiblc2"), IOP( "ppdiblcb", BSIM4_MOD_PPDIBLB, IF_REAL, "Cross-term dependence of pdiblcb"), IOP( "pfprout", BSIM4_MOD_PFPROUT, IF_REAL, "Cross-term dependence of pdiblcb"), IOP( "ppdits", BSIM4_MOD_PPDITS, IF_REAL, "Cross-term dependence of pdits"), IOP( "ppditsd", BSIM4_MOD_PPDITSD, IF_REAL, "Cross-term dependence of pditsd"), IOP( "ppscbe1", BSIM4_MOD_PPSCBE1, IF_REAL, "Cross-term dependence of pscbe1"), IOP( "ppscbe2", BSIM4_MOD_PPSCBE2, IF_REAL, "Cross-term dependence of pscbe2"), IOP( "ppvag", BSIM4_MOD_PPVAG, IF_REAL, "Cross-term dependence of pvag"), IOP( "pwr", BSIM4_MOD_PWR, IF_REAL, "Cross-term dependence of wr"), IOP( "pdwg", BSIM4_MOD_PDWG, IF_REAL, "Cross-term dependence of dwg"), IOP( "pdwb", BSIM4_MOD_PDWB, IF_REAL, "Cross-term dependence of dwb"), IOP( "pb0", BSIM4_MOD_PB0, IF_REAL, "Cross-term dependence of b0"), IOP( "pb1", BSIM4_MOD_PB1, IF_REAL, "Cross-term dependence of b1"), IOP( "pcgsl", BSIM4_MOD_PCGSL, IF_REAL, "Cross-term dependence of cgsl"), IOP( "pcgdl", BSIM4_MOD_PCGDL, IF_REAL, "Cross-term dependence of cgdl"), IOP( "pckappas", BSIM4_MOD_PCKAPPAS, IF_REAL, "Cross-term dependence of ckappas"), IOP( "pckappad", BSIM4_MOD_PCKAPPAD, IF_REAL, "Cross-term dependence of ckappad"), IOP( "pcf", BSIM4_MOD_PCF, IF_REAL, "Cross-term dependence of cf"), IOP( "pclc", BSIM4_MOD_PCLC, IF_REAL, "Cross-term dependence of clc"), IOP( "pcle", BSIM4_MOD_PCLE, IF_REAL, "Cross-term dependence of cle"), IOP( "palpha0", BSIM4_MOD_PALPHA0, IF_REAL, "Cross-term dependence of alpha0"), IOP( "palpha1", BSIM4_MOD_PALPHA1, IF_REAL, "Cross-term dependence of alpha1"), IOP( "pbeta0", BSIM4_MOD_PBETA0, IF_REAL, "Cross-term dependence of beta0"), IOP( "pagidl", BSIM4_MOD_PAGIDL, IF_REAL, "Cross-term dependence of agidl"), IOP( "pbgidl", BSIM4_MOD_PBGIDL, IF_REAL, "Cross-term dependence of bgidl"), IOP( "pcgidl", BSIM4_MOD_PCGIDL, IF_REAL, "Cross-term dependence of cgidl"), IOP( "prgidl", BSIM4_MOD_PRGIDL, IF_REAL, "Cross-term dependence of rgidl"), /* v4.7 New GIDL/GISL */ IOP( "pkgidl", BSIM4_MOD_PKGIDL, IF_REAL, "Cross-term dependence of kgidl"), /* v4.7 New GIDL/GISL */ IOP( "pfgidl", BSIM4_MOD_PFGIDL, IF_REAL, "Cross-term dependence of fgidl"), /* v4.7 New GIDL/GISL */ IOP( "pegidl", BSIM4_MOD_PEGIDL, IF_REAL, "Cross-term dependence of egidl"), IOP( "pagisl", BSIM4_MOD_PAGISL, IF_REAL, "Cross-term dependence of agisl"), IOP( "pbgisl", BSIM4_MOD_PBGISL, IF_REAL, "Cross-term dependence of bgisl"), IOP( "pcgisl", BSIM4_MOD_PCGISL, IF_REAL, "Cross-term dependence of cgisl"), IOP( "pegisl", BSIM4_MOD_PEGISL, IF_REAL, "Cross-term dependence of egisl"), IOP( "prgisl", BSIM4_MOD_PRGISL, IF_REAL, "Cross-term dependence of rgisl"), /* v4.7 New GIDL/GISL */ IOP( "pkgisl", BSIM4_MOD_PKGISL, IF_REAL, "Cross-term dependence of kgisl"), /* v4.7 New GIDL/GISL */ IOP( "pfgisl", BSIM4_MOD_PFGISL, IF_REAL, "Cross-term dependence of fgisl"), /* v4.7 New GIDL/GISL */ IOP( "paigc", BSIM4_MOD_PAIGC, IF_REAL, "Cross-term dependence of aigc"), IOP( "pbigc", BSIM4_MOD_PBIGC, IF_REAL, "Cross-term dependence of bigc"), IOP( "pcigc", BSIM4_MOD_PCIGC, IF_REAL, "Cross-term dependence of cigc"), IOP( "paigsd", BSIM4_MOD_PAIGSD, IF_REAL, "Cross-term dependence of aigsd"), IOP( "pbigsd", BSIM4_MOD_PBIGSD, IF_REAL, "Cross-term dependence of bigsd"), IOP( "pcigsd", BSIM4_MOD_PCIGSD, IF_REAL, "Cross-term dependence of cigsd"), IOP( "paigs", BSIM4_MOD_PAIGS, IF_REAL, "Cross-term dependence of aigs"), IOP( "pbigs", BSIM4_MOD_PBIGS, IF_REAL, "Cross-term dependence of bigs"), IOP( "pcigs", BSIM4_MOD_PCIGS, IF_REAL, "Cross-term dependence of cigs"), IOP( "paigd", BSIM4_MOD_PAIGD, IF_REAL, "Cross-term dependence of aigd"), IOP( "pbigd", BSIM4_MOD_PBIGD, IF_REAL, "Cross-term dependence of bigd"), IOP( "pcigd", BSIM4_MOD_PCIGD, IF_REAL, "Cross-term dependence of cigd"), IOP( "paigbacc", BSIM4_MOD_PAIGBACC, IF_REAL, "Cross-term dependence of aigbacc"), IOP( "pbigbacc", BSIM4_MOD_PBIGBACC, IF_REAL, "Cross-term dependence of bigbacc"), IOP( "pcigbacc", BSIM4_MOD_PCIGBACC, IF_REAL, "Cross-term dependence of cigbacc"), IOP( "paigbinv", BSIM4_MOD_PAIGBINV, IF_REAL, "Cross-term dependence of aigbinv"), IOP( "pbigbinv", BSIM4_MOD_PBIGBINV, IF_REAL, "Cross-term dependence of bigbinv"), IOP( "pcigbinv", BSIM4_MOD_PCIGBINV, IF_REAL, "Cross-term dependence of cigbinv"), IOP( "pnigc", BSIM4_MOD_PNIGC, IF_REAL, "Cross-term dependence of nigc"), IOP( "pnigbinv", BSIM4_MOD_PNIGBINV, IF_REAL, "Cross-term dependence of nigbinv"), IOP( "pnigbacc", BSIM4_MOD_PNIGBACC, IF_REAL, "Cross-term dependence of nigbacc"), IOP( "pntox", BSIM4_MOD_PNTOX, IF_REAL, "Cross-term dependence of ntox"), IOP( "peigbinv", BSIM4_MOD_PEIGBINV, IF_REAL, "Cross-term dependence for eigbinv"), IOP( "ppigcd", BSIM4_MOD_PPIGCD, IF_REAL, "Cross-term dependence for pigcd"), IOP( "ppoxedge", BSIM4_MOD_PPOXEDGE, IF_REAL, "Cross-term dependence for poxedge"), IOP( "pvfbcv", BSIM4_MOD_PVFBCV, IF_REAL, "Cross-term dependence of vfbcv"), IOP( "pvfb", BSIM4_MOD_PVFB, IF_REAL, "Cross-term dependence of vfb"), IOP( "pacde", BSIM4_MOD_PACDE, IF_REAL, "Cross-term dependence of acde"), IOP( "pmoin", BSIM4_MOD_PMOIN, IF_REAL, "Cross-term dependence of moin"), IOP( "pnoff", BSIM4_MOD_PNOFF, IF_REAL, "Cross-term dependence of noff"), IOP( "pvoffcv", BSIM4_MOD_PVOFFCV, IF_REAL, "Cross-term dependence of voffcv"), IOP( "pxrcrg1", BSIM4_MOD_PXRCRG1, IF_REAL, "Cross-term dependence of xrcrg1"), IOP( "pxrcrg2", BSIM4_MOD_PXRCRG2, IF_REAL, "Cross-term dependence of xrcrg2"), IOP( "plambda", BSIM4_MOD_PLAMBDA, IF_REAL, "Cross-term dependence of lambda"), IOP( "pvtl", BSIM4_MOD_PVTL, IF_REAL, "Cross-term dependence of vtl"), IOP( "pxn", BSIM4_MOD_PXN, IF_REAL, "Cross-term dependence of xn"), IOP( "peu", BSIM4_MOD_PEU, IF_REAL, "Cross-term dependence of eu"), IOP( "pucs", BSIM4_MOD_PUCS, IF_REAL, "Cross-term dependence of ucs"), IOP( "pvfbsdoff", BSIM4_MOD_PVFBSDOFF, IF_REAL, "Cross-term dependence of vfbsdoff"), IOP( "ptvfbsdoff", BSIM4_MOD_PTVFBSDOFF, IF_REAL, "Cross-term dependence of tvfbsdoff"), IOP( "ptvoff", BSIM4_MOD_PTVOFF, IF_REAL, "Cross-term dependence of tvoff"), IOP( "ptnfactor", BSIM4_MOD_PTNFACTOR, IF_REAL, "Cross-term dependence of tnfactor"), /* v4.7 Tanvir*/ IOP( "pteta0", BSIM4_MOD_PTETA0, IF_REAL, "Cross-term dependence of teta0"), /* v4.7 Tanvir*/ IOP( "ptvoffcv", BSIM4_MOD_PTVOFFCV, IF_REAL, "Cross-term dependence of tvoffcv"), /* v4.7 Tanvir*/ /* stress effect*/ IOP( "saref", BSIM4_MOD_SAREF, IF_REAL, "Reference distance between OD edge to poly of one side"), IOP( "sbref", BSIM4_MOD_SBREF, IF_REAL, "Reference distance between OD edge to poly of the other side"), IOP( "wlod", BSIM4_MOD_WLOD, IF_REAL, "Width parameter for stress effect"), IOP( "ku0", BSIM4_MOD_KU0, IF_REAL, "Mobility degradation/enhancement coefficient for LOD"), IOP( "kvsat", BSIM4_MOD_KVSAT, IF_REAL, "Saturation velocity degradation/enhancement parameter for LOD"), IOP( "kvth0", BSIM4_MOD_KVTH0, IF_REAL, "Threshold degradation/enhancement parameter for LOD"), IOP( "tku0", BSIM4_MOD_TKU0, IF_REAL, "Temperature coefficient of KU0"), IOP( "llodku0", BSIM4_MOD_LLODKU0, IF_REAL, "Length parameter for u0 LOD effect"), IOP( "wlodku0", BSIM4_MOD_WLODKU0, IF_REAL, "Width parameter for u0 LOD effect"), IOP( "llodvth", BSIM4_MOD_LLODVTH, IF_REAL, "Length parameter for vth LOD effect"), IOP( "wlodvth", BSIM4_MOD_WLODVTH, IF_REAL, "Width parameter for vth LOD effect"), IOP( "lku0", BSIM4_MOD_LKU0, IF_REAL, "Length dependence of ku0"), IOP( "wku0", BSIM4_MOD_WKU0, IF_REAL, "Width dependence of ku0"), IOP( "pku0", BSIM4_MOD_PKU0, IF_REAL, "Cross-term dependence of ku0"), IOP( "lkvth0", BSIM4_MOD_LKVTH0, IF_REAL, "Length dependence of kvth0"), IOP( "wkvth0", BSIM4_MOD_WKVTH0, IF_REAL, "Width dependence of kvth0"), IOP( "pkvth0", BSIM4_MOD_PKVTH0, IF_REAL, "Cross-term dependence of kvth0"), IOP( "stk2", BSIM4_MOD_STK2, IF_REAL, "K2 shift factor related to stress effect on vth"), IOP( "lodk2", BSIM4_MOD_LODK2, IF_REAL, "K2 shift modification factor for stress effect"), IOP( "steta0", BSIM4_MOD_STETA0, IF_REAL, "eta0 shift factor related to stress effect on vth"), IOP( "lodeta0", BSIM4_MOD_LODETA0, IF_REAL, "eta0 shift modification factor for stress effect"), /* Well Proximity Effect */ IOP( "web", BSIM4_MOD_WEB, IF_REAL, "Coefficient for SCB"), IOP( "wec", BSIM4_MOD_WEC, IF_REAL, "Coefficient for SCC"), IOP( "kvth0we", BSIM4_MOD_KVTH0WE, IF_REAL, "Threshold shift factor for well proximity effect"), IOP( "k2we", BSIM4_MOD_K2WE, IF_REAL, " K2 shift factor for well proximity effect "), IOP( "ku0we", BSIM4_MOD_KU0WE, IF_REAL, " Mobility degradation factor for well proximity effect "), IOP( "scref", BSIM4_MOD_SCREF, IF_REAL, " Reference distance to calculate SCA, SCB and SCC"), IOP( "wpemod", BSIM4_MOD_WPEMOD, IF_REAL, " Flag for WPE model (WPEMOD=1 to activate this model) "), IOP( "lkvth0we", BSIM4_MOD_LKVTH0WE, IF_REAL, "Length dependence of kvth0we"), IOP( "lk2we", BSIM4_MOD_LK2WE, IF_REAL, " Length dependence of k2we "), IOP( "lku0we", BSIM4_MOD_LKU0WE, IF_REAL, " Length dependence of ku0we "), IOP( "wkvth0we", BSIM4_MOD_WKVTH0WE, IF_REAL, "Width dependence of kvth0we"), IOP( "wk2we", BSIM4_MOD_WK2WE, IF_REAL, " Width dependence of k2we "), IOP( "wku0we", BSIM4_MOD_WKU0WE, IF_REAL, " Width dependence of ku0we "), IOP( "pkvth0we", BSIM4_MOD_PKVTH0WE, IF_REAL, "Cross-term dependence of kvth0we"), IOP( "pk2we", BSIM4_MOD_PK2WE, IF_REAL, " Cross-term dependence of k2we "), IOP( "pku0we", BSIM4_MOD_PKU0WE, IF_REAL, " Cross-term dependence of ku0we "), IOP( "noia", BSIM4_MOD_NOIA, IF_REAL, "Flicker noise parameter"), IOP( "noib", BSIM4_MOD_NOIB, IF_REAL, "Flicker noise parameter"), IOP( "noic", BSIM4_MOD_NOIC, IF_REAL, "Flicker noise parameter"), IOP( "tnoia", BSIM4_MOD_TNOIA, IF_REAL, "Thermal noise parameter"), IOP( "tnoib", BSIM4_MOD_TNOIB, IF_REAL, "Thermal noise parameter"), IOP( "tnoic", BSIM4_MOD_TNOIC, IF_REAL, "Thermal noise parameter"), IOP( "rnoia", BSIM4_MOD_RNOIA, IF_REAL, "Thermal noise coefficient"), IOP( "rnoib", BSIM4_MOD_RNOIB, IF_REAL, "Thermal noise coefficient"), IOP( "rnoic", BSIM4_MOD_RNOIC, IF_REAL, "Thermal noise coefficient"), IOP( "ntnoi", BSIM4_MOD_NTNOI, IF_REAL, "Thermal noise parameter"), IOP( "em", BSIM4_MOD_EM, IF_REAL, "Flicker noise parameter"), IOP( "ef", BSIM4_MOD_EF, IF_REAL, "Flicker noise frequency exponent"), IOP( "af", BSIM4_MOD_AF, IF_REAL, "Flicker noise exponent"), IOP( "kf", BSIM4_MOD_KF, IF_REAL, "Flicker noise coefficient"), IOP("vgs_max", BSIM4_MOD_VGS_MAX, IF_REAL, "maximum voltage G-S branch"), IOP("vgd_max", BSIM4_MOD_VGD_MAX, IF_REAL, "maximum voltage G-D branch"), IOP("vgb_max", BSIM4_MOD_VGB_MAX, IF_REAL, "maximum voltage G-B branch"), IOP("vds_max", BSIM4_MOD_VDS_MAX, IF_REAL, "maximum voltage D-S branch"), IOP("vbs_max", BSIM4_MOD_VBS_MAX, IF_REAL, "maximum voltage B-S branch"), IOP("vbd_max", BSIM4_MOD_VBD_MAX, IF_REAL, "maximum voltage B-D branch"), IOP("vgsr_max", BSIM4_MOD_VGSR_MAX, IF_REAL, "maximum voltage G-S branch"), IOP("vgdr_max", BSIM4_MOD_VGDR_MAX, IF_REAL, "maximum voltage G-D branch"), IOP("vgbr_max", BSIM4_MOD_VGBR_MAX, IF_REAL, "maximum voltage G-B branch"), IOP("vbsr_max", BSIM4_MOD_VBSR_MAX, IF_REAL, "maximum voltage B-S branch"), IOP("vbdr_max", BSIM4_MOD_VBDR_MAX, IF_REAL, "maximum voltage B-D branch"), IP( "nmos", BSIM4_MOD_NMOS, IF_FLAG, "Flag to indicate NMOS"), IP( "pmos", BSIM4_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"), }; char *BSIM4names[] = { "Drain", "Gate", "Source", "Bulk", "Charge" }; int BSIM4nSize = NUMELEMS(BSIM4names); int BSIM4pTSize = NUMELEMS(BSIM4pTable); int BSIM4mPTSize = NUMELEMS(BSIM4mPTable); int BSIM4iSize = sizeof(BSIM4instance); int BSIM4mSize = sizeof(BSIM4model); tmpk8ny_4pz/src/spicelib/devices/bsim4/b4mdel.c0000644000175000017500000001206413546075722021517 0ustar carstencarsten/* ****************************************************************************** * BSIM4 4.8.1 released by Chetan Kumar Dabhi 2/15/2017 * * BSIM4 Model Equations * ****************************************************************************** ****************************************************************************** * Copyright 2017 Regents of the University of California. * * All rights reserved. * * * * Project Director: Prof. Chenming Hu. * * Authors: Gary W. Ng, Weidong Liu, Xuemei Xi, Mohan Dunga, Wenwei Yang * * Ali Niknejad, Shivendra Singh Parihar, Chetan Kumar Dabhi * * Yogesh Singh Chauhan, Sayeef Salahuddin, Chenming Hu * ****************************************************************************** ****************************************************************************** * CMC In-Code Statement * * * * The Developer agrees that the following statement will appear in the * * model code that has been adopted as a CMC Standard. * * * * Software is distributed as is, completely without warranty or service * * support. The University of California and its employees are not liable * * for the condition or performance of the software. * * * * The University of California owns the copyright and grants users a * * perpetual, irrevocable, worldwide, non-exclusive, royalty-free license * * with respect to the software as set forth below. * * * * The University of California hereby disclaims all implied warranties. * * * * The University of California grants the users the right to modify, * * copy, and redistribute the software and documentation, both within * * the user's organization and externally, subject to the following * * restrictions: * * * * 1. The users agree not to charge for the University of California code * * itself but may charge for additions, extensions, or support. * * * * 2. In any product based on the software, the users agree to * * acknowledge the University of California that developed the * * software. This acknowledgment shall appear in the product * * documentation. * * * * 3. Redistributions to others of source code and documentation must * * retain the copyright notice, disclaimer, and list of conditions. * * * * 4. Redistributions to others in binary form must reproduce the * * copyright notice, disclaimer, and list of conditions in the * * documentation and/or other materials provided with the * * distribution. * * * * Agreed to on ______Feb. 15, 2017______________ * * * * By: ____University of California, Berkeley___ * * ____Chenming Hu__________________________ * * ____Professor in Graduate School ________ * * * ****************************************************************************** */ #include "ngspice/ngspice.h" #include "bsim4def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4mDelete(GENmodel *gen_model) { BSIM4model *model = (BSIM4model *) gen_model; #ifdef USE_OMP FREE(model->BSIM4InstanceArray); #endif struct bsim4SizeDependParam *p = model->pSizeDependParamKnot; while (p) { struct bsim4SizeDependParam *next_p = p->pNext; FREE(p); p = next_p; } FREE(model->BSIM4version); return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim4/bsim4init.c0000644000175000017500000000325313546075722022252 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "bsim4itf.h" #include "bsim4ext.h" #include "bsim4init.h" SPICEdev BSIM4info = { .DEVpublic = { .name = "BSIM4", .description = "Berkeley Short Channel IGFET Model-4", .terms = &BSIM4nSize, .numNames = &BSIM4nSize, .termNames = BSIM4names, .numInstanceParms = &BSIM4pTSize, .instanceParms = BSIM4pTable, .numModelParms = &BSIM4mPTSize, .modelParms = BSIM4mPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = BSIM4param, .DEVmodParam = BSIM4mParam, .DEVload = BSIM4load, .DEVsetup = BSIM4setup, .DEVunsetup = BSIM4unsetup, .DEVpzSetup = BSIM4setup, .DEVtemperature = BSIM4temp, .DEVtrunc = BSIM4trunc, .DEVfindBranch = NULL, .DEVacLoad = BSIM4acLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = BSIM4mDelete, .DEVdelete = NULL, .DEVsetic = BSIM4getic, .DEVask = BSIM4ask, .DEVmodAsk = BSIM4mAsk, .DEVpzLoad = BSIM4pzLoad, .DEVconvTest = BSIM4convTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = BSIM4noise, .DEVsoaCheck = BSIM4soaCheck, .DEVinstSize = &BSIM4iSize, .DEVmodSize = &BSIM4mSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_bsim4_info(void) { return &BSIM4info; } tmpk8ny_4pz/src/spicelib/devices/bsim4/b4getic.c0000644000175000017500000001313413546075722021670 0ustar carstencarsten/* ****************************************************************************** * BSIM4 4.8.1 released by Chetan Kumar Dabhi 2/15/2017 * * BSIM4 Model Equations * ****************************************************************************** ****************************************************************************** * Copyright 2017 Regents of the University of California. * * All rights reserved. * * * * Project Director: Prof. Chenming Hu. * * Authors: Gary W. Ng, Weidong Liu, Xuemei Xi, Mohan Dunga, Wenwei Yang * * Ali Niknejad, Shivendra Singh Parihar, Chetan Kumar Dabhi * * Yogesh Singh Chauhan, Sayeef Salahuddin, Chenming Hu * ****************************************************************************** ****************************************************************************** * CMC In-Code Statement * * * * The Developer agrees that the following statement will appear in the * * model code that has been adopted as a CMC Standard. * * * * Software is distributed as is, completely without warranty or service * * support. The University of California and its employees are not liable * * for the condition or performance of the software. * * * * The University of California owns the copyright and grants users a * * perpetual, irrevocable, worldwide, non-exclusive, royalty-free license * * with respect to the software as set forth below. * * * * The University of California hereby disclaims all implied warranties. * * * * The University of California grants the users the right to modify, * * copy, and redistribute the software and documentation, both within * * the user's organization and externally, subject to the following * * restrictions: * * * * 1. The users agree not to charge for the University of California code * * itself but may charge for additions, extensions, or support. * * * * 2. In any product based on the software, the users agree to * * acknowledge the University of California that developed the * * software. This acknowledgment shall appear in the product * * documentation. * * * * 3. Redistributions to others of source code and documentation must * * retain the copyright notice, disclaimer, and list of conditions. * * * * 4. Redistributions to others in binary form must reproduce the * * copyright notice, disclaimer, and list of conditions in the * * documentation and/or other materials provided with the * * distribution. * * * * Agreed to on ______Feb. 15, 2017______________ * * * * By: ____University of California, Berkeley___ * * ____Chenming Hu__________________________ * * ____Professor in Graduate School ________ * * * ****************************************************************************** */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4getic( GENmodel *inModel, CKTcircuit *ckt) { BSIM4model *model = (BSIM4model*)inModel; BSIM4instance *here; for (; model ; model = BSIM4nextModel(model)) { for (here = BSIM4instances(model); here; here = BSIM4nextInstance(here)) { if (!here->BSIM4icVDSGiven) { here->BSIM4icVDS = *(ckt->CKTrhs + here->BSIM4dNode) - *(ckt->CKTrhs + here->BSIM4sNode); } if (!here->BSIM4icVGSGiven) { here->BSIM4icVGS = *(ckt->CKTrhs + here->BSIM4gNodeExt) - *(ckt->CKTrhs + here->BSIM4sNode); } if(!here->BSIM4icVBSGiven) { here->BSIM4icVBS = *(ckt->CKTrhs + here->BSIM4bNode) - *(ckt->CKTrhs + here->BSIM4sNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4/b4pzld.c0000644000175000017500000011620013546075722021544 0ustar carstencarsten/* ****************************************************************************** * BSIM4 4.8.1 released by Chetan Kumar Dabhi 2/15/2017 * * BSIM4 Model Equations * ****************************************************************************** ****************************************************************************** * Copyright 2017 Regents of the University of California. * * All rights reserved. * * * * Project Director: Prof. Chenming Hu. * * Authors: Gary W. Ng, Weidong Liu, Xuemei Xi, Mohan Dunga, Wenwei Yang * * Ali Niknejad, Shivendra Singh Parihar, Chetan Kumar Dabhi * * Yogesh Singh Chauhan, Sayeef Salahuddin, Chenming Hu * ****************************************************************************** ****************************************************************************** * CMC In-Code Statement * * * * The Developer agrees that the following statement will appear in the * * model code that has been adopted as a CMC Standard. * * * * Software is distributed as is, completely without warranty or service * * support. The University of California and its employees are not liable * * for the condition or performance of the software. * * * * The University of California owns the copyright and grants users a * * perpetual, irrevocable, worldwide, non-exclusive, royalty-free license * * with respect to the software as set forth below. * * * * The University of California hereby disclaims all implied warranties. * * * * The University of California grants the users the right to modify, * * copy, and redistribute the software and documentation, both within * * the user's organization and externally, subject to the following * * restrictions: * * * * 1. The users agree not to charge for the University of California code * * itself but may charge for additions, extensions, or support. * * * * 2. In any product based on the software, the users agree to * * acknowledge the University of California that developed the * * software. This acknowledgment shall appear in the product * * documentation. * * * * 3. Redistributions to others of source code and documentation must * * retain the copyright notice, disclaimer, and list of conditions. * * * * 4. Redistributions to others in binary form must reproduce the * * copyright notice, disclaimer, and list of conditions in the * * documentation and/or other materials provided with the * * distribution. * * * * Agreed to on ______Feb. 15, 2017______________ * * * * By: ____University of California, Berkeley___ * * ____Chenming Hu__________________________ * * ____Professor in Graduate School ________ * * * ****************************************************************************** */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "bsim4def.h" #include "ngspice/suffix.h" int BSIM4pzLoad( GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { BSIM4model *model = (BSIM4model*)inModel; BSIM4instance *here; double gjbd, gjbs, geltd, gcrg, gcrgg, gcrgd, gcrgs, gcrgb; double xcggb, xcgdb, xcgsb, xcgbb, xcbgb, xcbdb, xcbsb, xcbbb; double xcdgb, xcddb, xcdsb, xcdbb, xcsgb, xcsdb, xcssb, xcsbb; double gds, capbd, capbs, FwdSum, RevSum, Gm, Gmbs; double gstot, gstotd, gstotg, gstots, gstotb, gspr; double gdtot, gdtotd, gdtotg, gdtots, gdtotb, gdpr; double gIstotg, gIstotd, gIstots, gIstotb; double gIdtotg, gIdtotd, gIdtots, gIdtotb; double gIbtotg, gIbtotd, gIbtots, gIbtotb; double gIgtotg, gIgtotd, gIgtots, gIgtotb; double cgso, cgdo, cgbo; double xcdbdb=0.0, xcsbsb=0.0, xcgmgmb=0.0, xcgmdb=0.0, xcgmsb=0.0, xcdgmb=0.0, xcsgmb=0.0; double xcgmbb=0.0, xcbgmb=0.0; double dxpart, sxpart, xgtg, xgtd, xgts, xgtb, xcqgb=0.0, xcqdb=0.0, xcqsb=0.0, xcqbb=0.0; double gbspsp, gbbdp, gbbsp, gbspg, gbspb; double gbspdp, gbdpdp, gbdpg, gbdpb, gbdpsp; double ddxpart_dVd, ddxpart_dVg, ddxpart_dVb, ddxpart_dVs; double dsxpart_dVd, dsxpart_dVg, dsxpart_dVb, dsxpart_dVs; double T0=0.0, T1, CoxWL, qcheq, Cdg, Cdd, Cds, Csg, Csd, Css; double ScalingFactor = 1.0e-9; struct bsim4SizeDependParam *pParam; double ggidld, ggidlg, ggidlb, ggislg, ggislb, ggisls; double m; for (; model != NULL; model = BSIM4nextModel(model)) { for (here = BSIM4instances(model); here!= NULL; here = BSIM4nextInstance(here)) { pParam = here->pParam; capbd = here->BSIM4capbd; capbs = here->BSIM4capbs; cgso = here->BSIM4cgso; cgdo = here->BSIM4cgdo; cgbo = pParam->BSIM4cgbo; if (here->BSIM4mode >= 0) { Gm = here->BSIM4gm; Gmbs = here->BSIM4gmbs; FwdSum = Gm + Gmbs; RevSum = 0.0; gbbdp = -(here->BSIM4gbds); gbbsp = here->BSIM4gbds + here->BSIM4gbgs + here->BSIM4gbbs; gbdpg = here->BSIM4gbgs; gbdpdp = here->BSIM4gbds; gbdpb = here->BSIM4gbbs; gbdpsp = -(gbdpg + gbdpdp + gbdpb); gbspdp = 0.0; gbspg = 0.0; gbspb = 0.0; gbspsp = 0.0; if (model->BSIM4igcMod) { gIstotg = here->BSIM4gIgsg + here->BSIM4gIgcsg; gIstotd = here->BSIM4gIgcsd; gIstots = here->BSIM4gIgss + here->BSIM4gIgcss; gIstotb = here->BSIM4gIgcsb; gIdtotg = here->BSIM4gIgdg + here->BSIM4gIgcdg; gIdtotd = here->BSIM4gIgdd + here->BSIM4gIgcdd; gIdtots = here->BSIM4gIgcds; gIdtotb = here->BSIM4gIgcdb; } else { gIstotg = gIstotd = gIstots = gIstotb = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = 0.0; } if (model->BSIM4igbMod) { gIbtotg = here->BSIM4gIgbg; gIbtotd = here->BSIM4gIgbd; gIbtots = here->BSIM4gIgbs; gIbtotb = here->BSIM4gIgbb; } else gIbtotg = gIbtotd = gIbtots = gIbtotb = 0.0; if ((model->BSIM4igcMod != 0) || (model->BSIM4igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = 0.0; if (here->BSIM4rgateMod == 2) T0 = *(ckt->CKTstates[0] + here->BSIM4vges) - *(ckt->CKTstates[0] + here->BSIM4vgs); else if (here->BSIM4rgateMod == 3) T0 = *(ckt->CKTstates[0] + here->BSIM4vgms) - *(ckt->CKTstates[0] + here->BSIM4vgs); if (here->BSIM4rgateMod > 1) { gcrgd = here->BSIM4gcrgd * T0; gcrgg = here->BSIM4gcrgg * T0; gcrgs = here->BSIM4gcrgs * T0; gcrgb = here->BSIM4gcrgb * T0; gcrgg -= here->BSIM4gcrg; gcrg = here->BSIM4gcrg; } else gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; if (here->BSIM4acnqsMod == 0) { if (here->BSIM4rgateMod == 3) { xcgmgmb = cgdo + cgso + pParam->BSIM4cgbo; xcgmdb = -cgdo; xcgmsb = -cgso; xcgmbb = -pParam->BSIM4cgbo; xcdgmb = xcgmdb; xcsgmb = xcgmsb; xcbgmb = xcgmbb; xcggb = here->BSIM4cggb; xcgdb = here->BSIM4cgdb; xcgsb = here->BSIM4cgsb; xcgbb = -(xcggb + xcgdb + xcgsb); xcdgb = here->BSIM4cdgb; xcsgb = -(here->BSIM4cggb + here->BSIM4cbgb + here->BSIM4cdgb); xcbgb = here->BSIM4cbgb; } else { xcggb = here->BSIM4cggb + cgdo + cgso + pParam->BSIM4cgbo; xcgdb = here->BSIM4cgdb - cgdo; xcgsb = here->BSIM4cgsb - cgso; xcgbb = -(xcggb + xcgdb + xcgsb); xcdgb = here->BSIM4cdgb - cgdo; xcsgb = -(here->BSIM4cggb + here->BSIM4cbgb + here->BSIM4cdgb + cgso); xcbgb = here->BSIM4cbgb - pParam->BSIM4cgbo; xcdgmb = xcsgmb = xcbgmb = 0.0; } xcddb = here->BSIM4cddb + here->BSIM4capbd + cgdo; xcdsb = here->BSIM4cdsb; xcsdb = -(here->BSIM4cgdb + here->BSIM4cbdb + here->BSIM4cddb); xcssb = here->BSIM4capbs + cgso - (here->BSIM4cgsb + here->BSIM4cbsb + here->BSIM4cdsb); if (!here->BSIM4rbodyMod) { xcdbb = -(xcdgb + xcddb + xcdsb + xcdgmb); xcsbb = -(xcsgb + xcsdb + xcssb + xcsgmb); xcbdb = here->BSIM4cbdb - here->BSIM4capbd; xcbsb = here->BSIM4cbsb - here->BSIM4capbs; xcdbdb = 0.0; } else { xcdbb = -(here->BSIM4cddb + here->BSIM4cdgb + here->BSIM4cdsb); xcsbb = -(xcsgb + xcsdb + xcssb + xcsgmb) + here->BSIM4capbs; xcbdb = here->BSIM4cbdb; xcbsb = here->BSIM4cbsb; xcdbdb = -here->BSIM4capbd; xcsbsb = -here->BSIM4capbs; } xcbbb = -(xcbdb + xcbgb + xcbsb + xcbgmb); xgtg = xgtd = xgts = xgtb = 0.0; sxpart = 0.6; dxpart = 0.4; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { xcggb = xcgdb = xcgsb = xcgbb = 0.0; xcbgb = xcbdb = xcbsb = xcbbb = 0.0; xcdgb = xcddb = xcdsb = xcdbb = 0.0; xcsgb = xcsdb = xcssb = xcsbb = 0.0; xgtg = here->BSIM4gtg; xgtd = here->BSIM4gtd; xgts = here->BSIM4gts; xgtb = here->BSIM4gtb; xcqgb = here->BSIM4cqgb; xcqdb = here->BSIM4cqdb; xcqsb = here->BSIM4cqsb; xcqbb = here->BSIM4cqbb; CoxWL = model->BSIM4coxe * here->pParam->BSIM4weffCV * here->BSIM4nf * here->pParam->BSIM4leffCV; qcheq = -(here->BSIM4qgate + here->BSIM4qbulk); if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM4xpart < 0.5) { dxpart = 0.4; } else if (model->BSIM4xpart > 0.5) { dxpart = 0.0; } else { dxpart = 0.5; } ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; } else { dxpart = here->BSIM4qdrn / qcheq; Cdd = here->BSIM4cddb; Csd = -(here->BSIM4cgdb + here->BSIM4cddb + here->BSIM4cbdb); ddxpart_dVd = (Cdd - dxpart * (Cdd + Csd)) / qcheq; Cdg = here->BSIM4cdgb; Csg = -(here->BSIM4cggb + here->BSIM4cdgb + here->BSIM4cbgb); ddxpart_dVg = (Cdg - dxpart * (Cdg + Csg)) / qcheq; Cds = here->BSIM4cdsb; Css = -(here->BSIM4cgsb + here->BSIM4cdsb + here->BSIM4cbsb); ddxpart_dVs = (Cds - dxpart * (Cds + Css)) / qcheq; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); } sxpart = 1.0 - dxpart; dsxpart_dVd = -ddxpart_dVd; dsxpart_dVg = -ddxpart_dVg; dsxpart_dVs = -ddxpart_dVs; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); } } else { Gm = -here->BSIM4gm; Gmbs = -here->BSIM4gmbs; FwdSum = 0.0; RevSum = -(Gm + Gmbs); gbbsp = -(here->BSIM4gbds); gbbdp = here->BSIM4gbds + here->BSIM4gbgs + here->BSIM4gbbs; gbdpg = 0.0; gbdpsp = 0.0; gbdpb = 0.0; gbdpdp = 0.0; gbspg = here->BSIM4gbgs; gbspsp = here->BSIM4gbds; gbspb = here->BSIM4gbbs; gbspdp = -(gbspg + gbspsp + gbspb); if (model->BSIM4igcMod) { gIstotg = here->BSIM4gIgsg + here->BSIM4gIgcdg; gIstotd = here->BSIM4gIgcds; gIstots = here->BSIM4gIgss + here->BSIM4gIgcdd; gIstotb = here->BSIM4gIgcdb; gIdtotg = here->BSIM4gIgdg + here->BSIM4gIgcsg; gIdtotd = here->BSIM4gIgdd + here->BSIM4gIgcss; gIdtots = here->BSIM4gIgcsd; gIdtotb = here->BSIM4gIgcsb; } else { gIstotg = gIstotd = gIstots = gIstotb = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = 0.0; } if (model->BSIM4igbMod) { gIbtotg = here->BSIM4gIgbg; gIbtotd = here->BSIM4gIgbs; gIbtots = here->BSIM4gIgbd; gIbtotb = here->BSIM4gIgbb; } else gIbtotg = gIbtotd = gIbtots = gIbtotb = 0.0; if ((model->BSIM4igcMod != 0) || (model->BSIM4igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = 0.0; if (here->BSIM4rgateMod == 2) T0 = *(ckt->CKTstates[0] + here->BSIM4vges) - *(ckt->CKTstates[0] + here->BSIM4vgs); else if (here->BSIM4rgateMod == 3) T0 = *(ckt->CKTstates[0] + here->BSIM4vgms) - *(ckt->CKTstates[0] + here->BSIM4vgs); if (here->BSIM4rgateMod > 1) { gcrgd = here->BSIM4gcrgs * T0; gcrgg = here->BSIM4gcrgg * T0; gcrgs = here->BSIM4gcrgd * T0; gcrgb = here->BSIM4gcrgb * T0; gcrgg -= here->BSIM4gcrg; gcrg = here->BSIM4gcrg; } else gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; if (here->BSIM4acnqsMod == 0) { if (here->BSIM4rgateMod == 3) { xcgmgmb = cgdo + cgso + pParam->BSIM4cgbo; xcgmdb = -cgdo; xcgmsb = -cgso; xcgmbb = -pParam->BSIM4cgbo; xcdgmb = xcgmdb; xcsgmb = xcgmsb; xcbgmb = xcgmbb; xcggb = here->BSIM4cggb; xcgdb = here->BSIM4cgsb; xcgsb = here->BSIM4cgdb; xcgbb = -(xcggb + xcgdb + xcgsb); xcdgb = -(here->BSIM4cggb + here->BSIM4cbgb + here->BSIM4cdgb); xcsgb = here->BSIM4cdgb; xcbgb = here->BSIM4cbgb; } else { xcggb = here->BSIM4cggb + cgdo + cgso + pParam->BSIM4cgbo; xcgdb = here->BSIM4cgsb - cgdo; xcgsb = here->BSIM4cgdb - cgso; xcgbb = -(xcggb + xcgdb + xcgsb); xcdgb = -(here->BSIM4cggb + here->BSIM4cbgb + here->BSIM4cdgb + cgdo); xcsgb = here->BSIM4cdgb - cgso; xcbgb = here->BSIM4cbgb - pParam->BSIM4cgbo; xcdgmb = xcsgmb = xcbgmb = 0.0; } xcddb = here->BSIM4capbd + cgdo - (here->BSIM4cgsb + here->BSIM4cbsb + here->BSIM4cdsb); xcdsb = -(here->BSIM4cgdb + here->BSIM4cbdb + here->BSIM4cddb); xcsdb = here->BSIM4cdsb; xcssb = here->BSIM4cddb + here->BSIM4capbs + cgso; if (!here->BSIM4rbodyMod) { xcdbb = -(xcdgb + xcddb + xcdsb + xcdgmb); xcsbb = -(xcsgb + xcsdb + xcssb + xcsgmb); xcbdb = here->BSIM4cbsb - here->BSIM4capbd; xcbsb = here->BSIM4cbdb - here->BSIM4capbs; xcdbdb = 0.0; } else { xcdbb = -(xcdgb + xcddb + xcdsb + xcdgmb) + here->BSIM4capbd; xcsbb = -(here->BSIM4cddb + here->BSIM4cdgb + here->BSIM4cdsb); xcbdb = here->BSIM4cbsb; xcbsb = here->BSIM4cbdb; xcdbdb = -here->BSIM4capbd; xcsbsb = -here->BSIM4capbs; } xcbbb = -(xcbgb + xcbdb + xcbsb + xcbgmb); xgtg = xgtd = xgts = xgtb = 0.0; sxpart = 0.4; dxpart = 0.6; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { xcggb = xcgdb = xcgsb = xcgbb = 0.0; xcbgb = xcbdb = xcbsb = xcbbb = 0.0; xcdgb = xcddb = xcdsb = xcdbb = 0.0; xcsgb = xcsdb = xcssb = xcsbb = 0.0; xgtg = here->BSIM4gtg; xgtd = here->BSIM4gts; xgts = here->BSIM4gtd; xgtb = here->BSIM4gtb; xcqgb = here->BSIM4cqgb; xcqdb = here->BSIM4cqsb; xcqsb = here->BSIM4cqdb; xcqbb = here->BSIM4cqbb; CoxWL = model->BSIM4coxe * here->pParam->BSIM4weffCV * here->BSIM4nf * here->pParam->BSIM4leffCV; qcheq = -(here->BSIM4qgate + here->BSIM4qbulk); if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM4xpart < 0.5) { sxpart = 0.4; } else if (model->BSIM4xpart > 0.5) { sxpart = 0.0; } else { sxpart = 0.5; } dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { sxpart = here->BSIM4qdrn / qcheq; Css = here->BSIM4cddb; Cds = -(here->BSIM4cgdb + here->BSIM4cddb + here->BSIM4cbdb); dsxpart_dVs = (Css - sxpart * (Css + Cds)) / qcheq; Csg = here->BSIM4cdgb; Cdg = -(here->BSIM4cggb + here->BSIM4cdgb + here->BSIM4cbgb); dsxpart_dVg = (Csg - sxpart * (Csg + Cdg)) / qcheq; Csd = here->BSIM4cdsb; Cdd = -(here->BSIM4cgsb + here->BSIM4cdsb + here->BSIM4cbsb); dsxpart_dVd = (Csd - sxpart * (Csd + Cdd)) / qcheq; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); } dxpart = 1.0 - sxpart; ddxpart_dVd = -dsxpart_dVd; ddxpart_dVg = -dsxpart_dVg; ddxpart_dVs = -dsxpart_dVs; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); } } if (model->BSIM4rdsMod == 1) { gstot = here->BSIM4gstot; gstotd = here->BSIM4gstotd; gstotg = here->BSIM4gstotg; gstots = here->BSIM4gstots - gstot; gstotb = here->BSIM4gstotb; gdtot = here->BSIM4gdtot; gdtotd = here->BSIM4gdtotd - gdtot; gdtotg = here->BSIM4gdtotg; gdtots = here->BSIM4gdtots; gdtotb = here->BSIM4gdtotb; } else { gstot = gstotd = gstotg = gstots = gstotb = 0.0; gdtot = gdtotd = gdtotg = gdtots = gdtotb = 0.0; } T1 = *(ckt->CKTstate0 + here->BSIM4qdef) * here->BSIM4gtau; gds = here->BSIM4gds; /* * Loading PZ matrix */ m = here->BSIM4m; if (!model->BSIM4rdsMod) { gdpr = here->BSIM4drainConductance; gspr = here->BSIM4sourceConductance; } else gdpr = gspr = 0.0; if (!here->BSIM4rbodyMod) { gjbd = here->BSIM4gbd; gjbs = here->BSIM4gbs; } else gjbd = gjbs = 0.0; geltd = here->BSIM4grgeltd; if (here->BSIM4rgateMod == 1) { *(here->BSIM4GEgePtr) += m * geltd; *(here->BSIM4GPgePtr) -= m * geltd; *(here->BSIM4GEgpPtr) -= m * geltd; *(here->BSIM4GPgpPtr ) += m * xcggb * s->real; *(here->BSIM4GPgpPtr +1) += m * xcggb * s->imag; *(here->BSIM4GPgpPtr) += m * (geltd - xgtg + gIgtotg); *(here->BSIM4GPdpPtr ) += m * xcgdb * s->real; *(here->BSIM4GPdpPtr +1) += m * xcgdb * s->imag; *(here->BSIM4GPdpPtr) -= m * (xgtd - gIgtotd); *(here->BSIM4GPspPtr ) += m * xcgsb * s->real; *(here->BSIM4GPspPtr +1) += m * xcgsb * s->imag; *(here->BSIM4GPspPtr) -= m * (xgts - gIgtots); *(here->BSIM4GPbpPtr ) += m * xcgbb * s->real; *(here->BSIM4GPbpPtr +1) += m * xcgbb * s->imag; *(here->BSIM4GPbpPtr) -= m * (xgtb - gIgtotb); } else if (here->BSIM4rgateMod == 2) { *(here->BSIM4GEgePtr) += m * gcrg; *(here->BSIM4GEgpPtr) += m * gcrgg; *(here->BSIM4GEdpPtr) += m * gcrgd; *(here->BSIM4GEspPtr) += m * gcrgs; *(here->BSIM4GEbpPtr) += m * gcrgb; *(here->BSIM4GPgePtr) -= m * gcrg; *(here->BSIM4GPgpPtr ) += m * xcggb * s->real; *(here->BSIM4GPgpPtr +1) += m * xcggb * s->imag; *(here->BSIM4GPgpPtr) -= m * (gcrgg + xgtg - gIgtotg); *(here->BSIM4GPdpPtr ) += m * xcgdb * s->real; *(here->BSIM4GPdpPtr +1) += m * xcgdb * s->imag; *(here->BSIM4GPdpPtr) -= m * (gcrgd + xgtd - gIgtotd); *(here->BSIM4GPspPtr ) += m * xcgsb * s->real; *(here->BSIM4GPspPtr +1) += m * xcgsb * s->imag; *(here->BSIM4GPspPtr) -= m * (gcrgs + xgts - gIgtots); *(here->BSIM4GPbpPtr ) += m * xcgbb * s->real; *(here->BSIM4GPbpPtr +1) += m * xcgbb * s->imag; *(here->BSIM4GPbpPtr) -= m * (gcrgb + xgtb - gIgtotb); } else if (here->BSIM4rgateMod == 3) { *(here->BSIM4GEgePtr) += m * geltd; *(here->BSIM4GEgmPtr) -= m * geltd; *(here->BSIM4GMgePtr) -= m * geltd; *(here->BSIM4GMgmPtr) += m * (geltd + gcrg); *(here->BSIM4GMgmPtr ) += m * xcgmgmb * s->real; *(here->BSIM4GMgmPtr +1) += m * xcgmgmb * s->imag; *(here->BSIM4GMdpPtr) += m * gcrgd; *(here->BSIM4GMdpPtr ) += m * xcgmdb * s->real; *(here->BSIM4GMdpPtr +1) += m * xcgmdb * s->imag; *(here->BSIM4GMgpPtr) += m * gcrgg; *(here->BSIM4GMspPtr) += m * gcrgs; *(here->BSIM4GMspPtr ) += m * xcgmsb * s->real; *(here->BSIM4GMspPtr +1) += m * xcgmsb * s->imag; *(here->BSIM4GMbpPtr) += m * gcrgb; *(here->BSIM4GMbpPtr ) += m * xcgmbb * s->real; *(here->BSIM4GMbpPtr +1) += m * xcgmbb * s->imag; *(here->BSIM4DPgmPtr ) += m * xcdgmb * s->real; *(here->BSIM4DPgmPtr +1) += m * xcdgmb * s->imag; *(here->BSIM4GPgmPtr) -= m * gcrg; *(here->BSIM4SPgmPtr ) += m * xcsgmb * s->real; *(here->BSIM4SPgmPtr +1) += m * xcsgmb * s->imag; *(here->BSIM4BPgmPtr ) += m * xcbgmb * s->real; *(here->BSIM4BPgmPtr +1) += m * xcbgmb * s->imag; *(here->BSIM4GPgpPtr) -= m * (gcrgg + xgtg - gIgtotg); *(here->BSIM4GPgpPtr ) += m * xcggb * s->real; *(here->BSIM4GPgpPtr +1) += m * xcggb * s->imag; *(here->BSIM4GPdpPtr) -= m * (gcrgd + xgtd - gIgtotd); *(here->BSIM4GPdpPtr ) += m * xcgdb * s->real; *(here->BSIM4GPdpPtr +1) += m * xcgdb * s->imag; *(here->BSIM4GPspPtr) -= m * (gcrgs + xgts - gIgtots); *(here->BSIM4GPspPtr ) += m * xcgsb * s->real; *(here->BSIM4GPspPtr +1) += m * xcgsb * s->imag; *(here->BSIM4GPbpPtr) -= m * (gcrgb + xgtb - gIgtotb); *(here->BSIM4GPbpPtr ) += m * xcgbb * s->real; *(here->BSIM4GPbpPtr +1) += m * xcgbb * s->imag; } else { *(here->BSIM4GPdpPtr ) += m * xcgdb * s->real; *(here->BSIM4GPdpPtr +1) += m * xcgdb * s->imag; *(here->BSIM4GPdpPtr) -= m * (xgtd - gIgtotd); *(here->BSIM4GPgpPtr ) += m * xcggb * s->real; *(here->BSIM4GPgpPtr +1) += m * xcggb * s->imag; *(here->BSIM4GPgpPtr) -= m * (xgtg - gIgtotg); *(here->BSIM4GPspPtr ) += m * xcgsb * s->real; *(here->BSIM4GPspPtr +1) += m * xcgsb * s->imag; *(here->BSIM4GPspPtr) -= m * (xgts - gIgtots); *(here->BSIM4GPbpPtr ) += m * xcgbb * s->real; *(here->BSIM4GPbpPtr +1) += m * xcgbb * s->imag; *(here->BSIM4GPbpPtr) -= m * (xgtb - gIgtotb); } if (model->BSIM4rdsMod) { (*(here->BSIM4DgpPtr) += m * gdtotg); (*(here->BSIM4DspPtr) += m * gdtots); (*(here->BSIM4DbpPtr) += m * gdtotb); (*(here->BSIM4SdpPtr) += m * gstotd); (*(here->BSIM4SgpPtr) += m * gstotg); (*(here->BSIM4SbpPtr) += m * gstotb); } *(here->BSIM4DPdpPtr ) += m * xcddb * s->real; *(here->BSIM4DPdpPtr +1) += m * xcddb * s->imag; *(here->BSIM4DPdpPtr) += m * (gdpr + gds + here->BSIM4gbd - gdtotd + RevSum + gbdpdp - gIdtotd + dxpart * xgtd + T1 * ddxpart_dVd); *(here->BSIM4DPdPtr) -= m * (gdpr + gdtot); *(here->BSIM4DPgpPtr ) += m * xcdgb * s->real; *(here->BSIM4DPgpPtr +1) += m * xcdgb * s->imag; *(here->BSIM4DPgpPtr) += m * (Gm - gdtotg + gbdpg - gIdtotg + T1 * ddxpart_dVg + dxpart * xgtg); *(here->BSIM4DPspPtr ) += m * xcdsb * s->real; *(here->BSIM4DPspPtr +1) += m * xcdsb * s->imag; *(here->BSIM4DPspPtr) -= m * (gds + FwdSum + gdtots - gbdpsp + gIdtots - T1 * ddxpart_dVs - dxpart * xgts); *(here->BSIM4DPbpPtr ) += m * xcdbb * s->real; *(here->BSIM4DPbpPtr +1) += m * xcdbb * s->imag; *(here->BSIM4DPbpPtr) -= m * (gjbd + gdtotb - Gmbs - gbdpb + gIdtotb - T1 * ddxpart_dVb - dxpart * xgtb); *(here->BSIM4DdpPtr) -= m * (gdpr - gdtotd); *(here->BSIM4DdPtr) += m * (gdpr + gdtot); *(here->BSIM4SPdpPtr ) += m * xcsdb * s->real; *(here->BSIM4SPdpPtr +1) += m * xcsdb * s->imag; *(here->BSIM4SPdpPtr) -= m * (gds + gstotd + RevSum - gbspdp + gIstotd - T1 * dsxpart_dVd - sxpart * xgtd); *(here->BSIM4SPgpPtr ) += m * xcsgb * s->real; *(here->BSIM4SPgpPtr +1) += m * xcsgb * s->imag; *(here->BSIM4SPgpPtr) -= m * (Gm + gstotg - gbspg + gIstotg - T1 * dsxpart_dVg - sxpart * xgtg); *(here->BSIM4SPspPtr ) += m * xcssb * s->real; *(here->BSIM4SPspPtr +1) += m * xcssb * s->imag; *(here->BSIM4SPspPtr) += m * (gspr + gds + here->BSIM4gbs - gIstots - gstots + FwdSum + gbspsp + sxpart * xgts + T1 * dsxpart_dVs); *(here->BSIM4SPsPtr) -= m * (gspr + gstot); *(here->BSIM4SPbpPtr ) += m * xcsbb * s->real; *(here->BSIM4SPbpPtr +1) += m * xcsbb * s->imag; *(here->BSIM4SPbpPtr) -= m * (gjbs + gstotb + Gmbs - gbspb + gIstotb - T1 * dsxpart_dVb - sxpart * xgtb); *(here->BSIM4SspPtr) -= m * (gspr - gstots); *(here->BSIM4SsPtr) += m * (gspr + gstot); *(here->BSIM4BPdpPtr ) += m * xcbdb * s->real; *(here->BSIM4BPdpPtr +1) += m * xcbdb * s->imag; *(here->BSIM4BPdpPtr) -= m * (gjbd - gbbdp + gIbtotd); *(here->BSIM4BPgpPtr ) += m * xcbgb * s->real; *(here->BSIM4BPgpPtr +1) += m * xcbgb * s->imag; *(here->BSIM4BPgpPtr) -= m * (here->BSIM4gbgs + gIbtotg); *(here->BSIM4BPspPtr ) += m * xcbsb * s->real; *(here->BSIM4BPspPtr +1) += m * xcbsb * s->imag; *(here->BSIM4BPspPtr) -= m * (gjbs - gbbsp + gIbtots); *(here->BSIM4BPbpPtr ) += m * xcbbb * s->real; *(here->BSIM4BPbpPtr +1) += m * xcbbb * s->imag; *(here->BSIM4BPbpPtr) += m * (gjbd + gjbs - here->BSIM4gbbs - gIbtotb); ggidld = here->BSIM4ggidld; ggidlg = here->BSIM4ggidlg; ggidlb = here->BSIM4ggidlb; ggislg = here->BSIM4ggislg; ggisls = here->BSIM4ggisls; ggislb = here->BSIM4ggislb; /* stamp gidl */ (*(here->BSIM4DPdpPtr) += m * ggidld); (*(here->BSIM4DPgpPtr) += m * ggidlg); (*(here->BSIM4DPspPtr) -= m * ((ggidlg + ggidld) + ggidlb)); (*(here->BSIM4DPbpPtr) += m * ggidlb); (*(here->BSIM4BPdpPtr) -= m * ggidld); (*(here->BSIM4BPgpPtr) -= m * ggidlg); (*(here->BSIM4BPspPtr) += m * ((ggidlg + ggidld) + ggidlb)); (*(here->BSIM4BPbpPtr) -= m * ggidlb); /* stamp gisl */ (*(here->BSIM4SPdpPtr) -= m * ((ggisls + ggislg) + ggislb)); (*(here->BSIM4SPgpPtr) += m * ggislg); (*(here->BSIM4SPspPtr) += m * ggisls); (*(here->BSIM4SPbpPtr) += m * ggislb); (*(here->BSIM4BPdpPtr) += m * ((ggislg + ggisls) + ggislb)); (*(here->BSIM4BPgpPtr) -= m * ggislg); (*(here->BSIM4BPspPtr) -= m * ggisls); (*(here->BSIM4BPbpPtr) -= m * ggislb); if (here->BSIM4rbodyMod) { (*(here->BSIM4DPdbPtr ) += m * xcdbdb * s->real); (*(here->BSIM4DPdbPtr +1) += m * xcdbdb * s->imag); (*(here->BSIM4DPdbPtr) -= m * here->BSIM4gbd); (*(here->BSIM4SPsbPtr ) += m * xcsbsb * s->real); (*(here->BSIM4SPsbPtr +1) += m * xcsbsb * s->imag); (*(here->BSIM4SPsbPtr) -= m * here->BSIM4gbs); (*(here->BSIM4DBdpPtr ) += m * xcdbdb * s->real); (*(here->BSIM4DBdpPtr +1) += m * xcdbdb * s->imag); (*(here->BSIM4DBdpPtr) -= m * here->BSIM4gbd); (*(here->BSIM4DBdbPtr ) -= m * xcdbdb * s->real); (*(here->BSIM4DBdbPtr +1) -= m * xcdbdb * s->imag); (*(here->BSIM4DBdbPtr) += m * (here->BSIM4gbd + here->BSIM4grbpd + here->BSIM4grbdb)); (*(here->BSIM4DBbpPtr) -= m * here->BSIM4grbpd); (*(here->BSIM4DBbPtr) -= m * here->BSIM4grbdb); (*(here->BSIM4BPdbPtr) -= m * here->BSIM4grbpd); (*(here->BSIM4BPbPtr) -= m * here->BSIM4grbpb); (*(here->BSIM4BPsbPtr) -= m * here->BSIM4grbps); (*(here->BSIM4BPbpPtr) += m * (here->BSIM4grbpd + here->BSIM4grbps + here->BSIM4grbpb)); /* WDL: (-here->BSIM4gbbs) already added to BPbpPtr */ (*(here->BSIM4SBspPtr ) += m * xcsbsb * s->real); (*(here->BSIM4SBspPtr +1) += m * xcsbsb * s->imag); (*(here->BSIM4SBspPtr) -= m * here->BSIM4gbs); (*(here->BSIM4SBbpPtr) -= m * here->BSIM4grbps); (*(here->BSIM4SBbPtr) -= m * here->BSIM4grbsb); (*(here->BSIM4SBsbPtr ) -= m * xcsbsb * s->real); (*(here->BSIM4SBsbPtr +1) -= m * xcsbsb * s->imag); (*(here->BSIM4SBsbPtr) += m * (here->BSIM4gbs + here->BSIM4grbps + here->BSIM4grbsb)); (*(here->BSIM4BdbPtr) -= m * here->BSIM4grbdb); (*(here->BSIM4BbpPtr) -= m * here->BSIM4grbpb); (*(here->BSIM4BsbPtr) -= m * here->BSIM4grbsb); (*(here->BSIM4BbPtr) += m * (here->BSIM4grbsb + here->BSIM4grbdb + here->BSIM4grbpb)); } if (here->BSIM4acnqsMod) { *(here->BSIM4QqPtr ) += m * s->real * ScalingFactor; *(here->BSIM4QqPtr +1) += m * s->imag * ScalingFactor; *(here->BSIM4QgpPtr ) -= m * xcqgb * s->real; *(here->BSIM4QgpPtr +1) -= m * xcqgb * s->imag; *(here->BSIM4QdpPtr ) -= m * xcqdb * s->real; *(here->BSIM4QdpPtr +1) -= m * xcqdb * s->imag; *(here->BSIM4QbpPtr ) -= m * xcqbb * s->real; *(here->BSIM4QbpPtr +1) -= m * xcqbb * s->imag; *(here->BSIM4QspPtr ) -= m * xcqsb * s->real; *(here->BSIM4QspPtr +1) -= m * xcqsb * s->imag; *(here->BSIM4GPqPtr) -= m * here->BSIM4gtau; *(here->BSIM4DPqPtr) += m * dxpart * here->BSIM4gtau; *(here->BSIM4SPqPtr) += m * sxpart * here->BSIM4gtau; *(here->BSIM4QqPtr) += m * here->BSIM4gtau; *(here->BSIM4QgpPtr) += m * xgtg; *(here->BSIM4QdpPtr) += m * xgtd; *(here->BSIM4QbpPtr) += m * xgtb; *(here->BSIM4QspPtr) += m * xgts; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4/b4set.c0000644000175000017500000033443113546075722021376 0ustar carstencarsten/* ****************************************************************************** * BSIM4 4.8.1 released by Chetan Kumar Dabhi 2/15/2017 * * BSIM4 Model Equations * ****************************************************************************** ****************************************************************************** * Copyright 2017 Regents of the University of California. * * All rights reserved. * * * * Project Director: Prof. Chenming Hu. * * Authors: Gary W. Ng, Weidong Liu, Xuemei Xi, Mohan Dunga, Wenwei Yang * * Ali Niknejad, Shivendra Singh Parihar, Chetan Kumar Dabhi * * Yogesh Singh Chauhan, Sayeef Salahuddin, Chenming Hu * ****************************************************************************** ****************************************************************************** * CMC In-Code Statement * * * * The Developer agrees that the following statement will appear in the * * model code that has been adopted as a CMC Standard. * * * * Software is distributed as is, completely without warranty or service * * support. The University of California and its employees are not liable * * for the condition or performance of the software. * * * * The University of California owns the copyright and grants users a * * perpetual, irrevocable, worldwide, non-exclusive, royalty-free license * * with respect to the software as set forth below. * * * * The University of California hereby disclaims all implied warranties. * * * * The University of California grants the users the right to modify, * * copy, and redistribute the software and documentation, both within * * the user's organization and externally, subject to the following * * restrictions: * * * * 1. The users agree not to charge for the University of California code * * itself but may charge for additions, extensions, or support. * * * * 2. In any product based on the software, the users agree to * * acknowledge the University of California that developed the * * software. This acknowledgment shall appear in the product * * documentation. * * * * 3. Redistributions to others of source code and documentation must * * retain the copyright notice, disclaimer, and list of conditions. * * * * 4. Redistributions to others in binary form must reproduce the * * copyright notice, disclaimer, and list of conditions in the * * documentation and/or other materials provided with the * * distribution. * * * * Agreed to on ______Feb. 15, 2017______________ * * * * By: ____University of California, Berkeley___ * * ____Chenming Hu__________________________ * * ____Professor in Graduate School ________ * * * ****************************************************************************** */ #include "ngspice/ngspice.h" #include "ngspice/jobdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "bsim4def.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #ifdef USE_OMP #include "ngspice/cpextern.h" #endif #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define EPS0 8.85418e-12 #define EPSSI 1.03594e-10 #define PI 3.141592654 #define Charge_q 1.60219e-19 int BSIM4setup( SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { BSIM4model *model = (BSIM4model*)inModel; BSIM4instance *here; int error; CKTnode *tmp; int noiseAnalGiven = 0, createNode; /* Criteria for new node creation */ double Rtot, DMCGeff, DMCIeff, DMDGeff; JOB *job; #ifdef USE_OMP int idx, InstCount; BSIM4instance **InstArray; #endif /* Search for a noise analysis request */ for (job = ((TSKtask *)ft_curckt->ci_curTask)->jobs;job;job = job->JOBnextJob) { if(strcmp(job->JOBname,"Noise Analysis")==0) { noiseAnalGiven = 1; break; } } /* loop through all the BSIM4 device models */ for( ; model != NULL; model = BSIM4nextModel(model)) { /* process defaults of model parameters */ if (!model->BSIM4typeGiven) model->BSIM4type = NMOS; if (!model->BSIM4mobModGiven) model->BSIM4mobMod = 0; else if ((model->BSIM4mobMod != 0) && (model->BSIM4mobMod != 1)&& (model->BSIM4mobMod != 2)&& (model->BSIM4mobMod != 3) && (model->BSIM4mobMod != 4) && (model->BSIM4mobMod != 5) && (model->BSIM4mobMod != 6)) /* Synopsys 08/30/2013 modify */ { model->BSIM4mobMod = 0; printf("Warning: mobMod has been set to its default value: 0.\n"); } if (!model->BSIM4binUnitGiven) model->BSIM4binUnit = 1; if (!model->BSIM4paramChkGiven) model->BSIM4paramChk = 1; if (!model->BSIM4dioModGiven) model->BSIM4dioMod = 1; else if ((model->BSIM4dioMod != 0) && (model->BSIM4dioMod != 1) && (model->BSIM4dioMod != 2)) { model->BSIM4dioMod = 1; printf("Warning: dioMod has been set to its default value: 1.\n"); } if (!model->BSIM4cvchargeModGiven) model->BSIM4cvchargeMod = 0; if (!model->BSIM4capModGiven) model->BSIM4capMod = 2; else if ((model->BSIM4capMod != 0) && (model->BSIM4capMod != 1) && (model->BSIM4capMod != 2)) { model->BSIM4capMod = 2; printf("Warning: capMod has been set to its default value: 2.\n"); } if (!model->BSIM4rdsModGiven) model->BSIM4rdsMod = 0; else if ((model->BSIM4rdsMod != 0) && (model->BSIM4rdsMod != 1)) { model->BSIM4rdsMod = 0; printf("Warning: rdsMod has been set to its default value: 0.\n"); } if (!model->BSIM4rbodyModGiven) model->BSIM4rbodyMod = 0; else if ((model->BSIM4rbodyMod != 0) && (model->BSIM4rbodyMod != 1) && (model->BSIM4rbodyMod != 2)) { model->BSIM4rbodyMod = 0; printf("Warning: rbodyMod has been set to its default value: 0.\n"); } if (!model->BSIM4rgateModGiven) model->BSIM4rgateMod = 0; else if ((model->BSIM4rgateMod != 0) && (model->BSIM4rgateMod != 1) && (model->BSIM4rgateMod != 2) && (model->BSIM4rgateMod != 3)) { model->BSIM4rgateMod = 0; printf("Warning: rgateMod has been set to its default value: 0.\n"); } if (!model->BSIM4perModGiven) model->BSIM4perMod = 1; else if ((model->BSIM4perMod != 0) && (model->BSIM4perMod != 1)) { model->BSIM4perMod = 1; printf("Warning: perMod has been set to its default value: 1.\n"); } if (!model->BSIM4geoModGiven) model->BSIM4geoMod = 0; if (!model->BSIM4rgeoModGiven) model->BSIM4rgeoMod = 0; else if ((model->BSIM4rgeoMod != 0) && (model->BSIM4rgeoMod != 1)) { model->BSIM4rgeoMod = 1; printf("Warning: rgeoMod has been set to its default value: 1.\n"); } if (!model->BSIM4fnoiModGiven) model->BSIM4fnoiMod = 1; else if ((model->BSIM4fnoiMod != 0) && (model->BSIM4fnoiMod != 1)) { model->BSIM4fnoiMod = 1; printf("Warning: fnoiMod has been set to its default value: 1.\n"); } if (!model->BSIM4tnoiModGiven) model->BSIM4tnoiMod = 0; /* WDLiu: tnoiMod=1 needs to set internal S/D nodes */ else if ((model->BSIM4tnoiMod != 0) && (model->BSIM4tnoiMod != 1) && (model->BSIM4tnoiMod != 2)) /* v4.7 */ { model->BSIM4tnoiMod = 0; printf("Warning: tnoiMod has been set to its default value: 0.\n"); } if (!model->BSIM4trnqsModGiven) model->BSIM4trnqsMod = 0; else if ((model->BSIM4trnqsMod != 0) && (model->BSIM4trnqsMod != 1)) { model->BSIM4trnqsMod = 0; printf("Warning: trnqsMod has been set to its default value: 0.\n"); } if (!model->BSIM4acnqsModGiven) model->BSIM4acnqsMod = 0; else if ((model->BSIM4acnqsMod != 0) && (model->BSIM4acnqsMod != 1)) { model->BSIM4acnqsMod = 0; printf("Warning: acnqsMod has been set to its default value: 0.\n"); } if (!model->BSIM4mtrlModGiven) model->BSIM4mtrlMod = 0; else if((model->BSIM4mtrlMod != 0) && (model->BSIM4mtrlMod != 1)) { model->BSIM4mtrlMod = 0; printf("Warning: mtrlMod has been set to its default value: 0.\n"); } if (!model->BSIM4mtrlCompatModGiven) model->BSIM4mtrlCompatMod = 0; else if((model->BSIM4mtrlCompatMod != 0) && (model->BSIM4mtrlCompatMod != 1)) { model->BSIM4mtrlCompatMod = 0; printf("Warning: mtrlCompatMod has been set to its default value: 0.\n"); } if (!model->BSIM4igcModGiven) model->BSIM4igcMod = 0; else if ((model->BSIM4igcMod != 0) && (model->BSIM4igcMod != 1) && (model->BSIM4igcMod != 2)) { model->BSIM4igcMod = 0; printf("Warning: igcMod has been set to its default value: 0.\n"); } if (!model->BSIM4igbModGiven) model->BSIM4igbMod = 0; else if ((model->BSIM4igbMod != 0) && (model->BSIM4igbMod != 1)) { model->BSIM4igbMod = 0; printf("Warning: igbMod has been set to its default value: 0.\n"); } if (!model->BSIM4tempModGiven) model->BSIM4tempMod = 0; else if ((model->BSIM4tempMod != 0) && (model->BSIM4tempMod != 1) && (model->BSIM4tempMod != 2) && (model->BSIM4tempMod != 3)) { model->BSIM4tempMod = 0; printf("Warning: tempMod has been set to its default value: 0.\n"); } if (!model->BSIM4versionGiven) model->BSIM4version = copy("4.8.1"); if (!model->BSIM4toxrefGiven) model->BSIM4toxref = 30.0e-10; if (!model->BSIM4eotGiven) model->BSIM4eot = 15.0e-10; if (!model->BSIM4vddeotGiven) model->BSIM4vddeot = (model->BSIM4type == NMOS) ? 1.5 : -1.5; if (!model->BSIM4tempeotGiven) model->BSIM4tempeot = 300.15; if (!model->BSIM4leffeotGiven) model->BSIM4leffeot = 1; if (!model->BSIM4weffeotGiven) model->BSIM4weffeot = 10; if (!model->BSIM4adosGiven) model->BSIM4ados = 1.0; if (!model->BSIM4bdosGiven) model->BSIM4bdos = 1.0; if (!model->BSIM4toxeGiven) model->BSIM4toxe = 30.0e-10; if (!model->BSIM4toxpGiven) model->BSIM4toxp = model->BSIM4toxe; if (!model->BSIM4toxmGiven) model->BSIM4toxm = model->BSIM4toxe; if (!model->BSIM4dtoxGiven) model->BSIM4dtox = 0.0; if (!model->BSIM4epsroxGiven) model->BSIM4epsrox = 3.9; if (!model->BSIM4cdscGiven) model->BSIM4cdsc = 2.4e-4; /* unit Q/V/m^2 */ if (!model->BSIM4cdscbGiven) model->BSIM4cdscb = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM4cdscdGiven) model->BSIM4cdscd = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM4citGiven) model->BSIM4cit = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM4nfactorGiven) model->BSIM4nfactor = 1.0; if (!model->BSIM4xjGiven) model->BSIM4xj = .15e-6; if (!model->BSIM4vsatGiven) model->BSIM4vsat = 8.0e4; /* unit m/s */ if (!model->BSIM4atGiven) model->BSIM4at = 3.3e4; /* unit m/s */ if (!model->BSIM4a0Given) model->BSIM4a0 = 1.0; if (!model->BSIM4agsGiven) model->BSIM4ags = 0.0; if (!model->BSIM4a1Given) model->BSIM4a1 = 0.0; if (!model->BSIM4a2Given) model->BSIM4a2 = 1.0; if (!model->BSIM4ketaGiven) model->BSIM4keta = -0.047; /* unit / V */ if (!model->BSIM4nsubGiven) model->BSIM4nsub = 6.0e16; /* unit 1/cm3 */ if (!model->BSIM4phigGiven) model->BSIM4phig = 4.05; if (!model->BSIM4epsrgateGiven) model->BSIM4epsrgate = 11.7; if (!model->BSIM4easubGiven) model->BSIM4easub = 4.05; if (!model->BSIM4epsrsubGiven) model->BSIM4epsrsub = 11.7; if (!model->BSIM4ni0subGiven) model->BSIM4ni0sub = 1.45e10; /* unit 1/cm3 */ if (!model->BSIM4bg0subGiven) model->BSIM4bg0sub = 1.16; /* unit eV */ if (!model->BSIM4tbgasubGiven) model->BSIM4tbgasub = 7.02e-4; if (!model->BSIM4tbgbsubGiven) model->BSIM4tbgbsub = 1108.0; if (!model->BSIM4ndepGiven) model->BSIM4ndep = 1.7e17; /* unit 1/cm3 */ if (!model->BSIM4nsdGiven) model->BSIM4nsd = 1.0e20; /* unit 1/cm3 */ if (!model->BSIM4phinGiven) model->BSIM4phin = 0.0; /* unit V */ if (!model->BSIM4ngateGiven) model->BSIM4ngate = 0; /* unit 1/cm3 */ if (!model->BSIM4vbmGiven) model->BSIM4vbm = -3.0; if (!model->BSIM4xtGiven) model->BSIM4xt = 1.55e-7; if (!model->BSIM4kt1Given) model->BSIM4kt1 = -0.11; /* unit V */ if (!model->BSIM4kt1lGiven) model->BSIM4kt1l = 0.0; /* unit V*m */ if (!model->BSIM4kt2Given) model->BSIM4kt2 = 0.022; /* No unit */ if (!model->BSIM4k3Given) model->BSIM4k3 = 80.0; if (!model->BSIM4k3bGiven) model->BSIM4k3b = 0.0; if (!model->BSIM4w0Given) model->BSIM4w0 = 2.5e-6; if (!model->BSIM4lpe0Given) model->BSIM4lpe0 = 1.74e-7; if (!model->BSIM4lpebGiven) model->BSIM4lpeb = 0.0; if (!model->BSIM4dvtp0Given) model->BSIM4dvtp0 = 0.0; if (!model->BSIM4dvtp1Given) model->BSIM4dvtp1 = 0.0; if (!model->BSIM4dvtp2Given) /* New DIBL/Rout */ model->BSIM4dvtp2 = 0.0; if (!model->BSIM4dvtp3Given) model->BSIM4dvtp3 = 0.0; if (!model->BSIM4dvtp4Given) model->BSIM4dvtp4 = 0.0; if (!model->BSIM4dvtp5Given) model->BSIM4dvtp5 = 0.0; if (!model->BSIM4dvt0Given) model->BSIM4dvt0 = 2.2; if (!model->BSIM4dvt1Given) model->BSIM4dvt1 = 0.53; if (!model->BSIM4dvt2Given) model->BSIM4dvt2 = -0.032; /* unit 1 / V */ if (!model->BSIM4dvt0wGiven) model->BSIM4dvt0w = 0.0; if (!model->BSIM4dvt1wGiven) model->BSIM4dvt1w = 5.3e6; if (!model->BSIM4dvt2wGiven) model->BSIM4dvt2w = -0.032; if (!model->BSIM4droutGiven) model->BSIM4drout = 0.56; if (!model->BSIM4dsubGiven) model->BSIM4dsub = model->BSIM4drout; if (!model->BSIM4vth0Given) model->BSIM4vth0 = (model->BSIM4type == NMOS) ? 0.7 : -0.7; if (!model->BSIM4vfbGiven) model->BSIM4vfb = -1.0; if (!model->BSIM4euGiven) model->BSIM4eu = (model->BSIM4type == NMOS) ? 1.67 : 1.0; if (!model->BSIM4ucsGiven) model->BSIM4ucs = (model->BSIM4type == NMOS) ? 1.67 : 1.0; if ((strcmp(model->BSIM4version, "4.8.1")) && (strncmp(model->BSIM4version, "4.81", 4))) { if (!model->BSIM4uaGiven) model->BSIM4ua = ((model->BSIM4mobMod == 2)) ? 1.0e-15 : 1.0e-9; /* unit m/V */ if (!model->BSIM4ucGiven) model->BSIM4uc = (model->BSIM4mobMod == 1) ? -0.0465 : -0.0465e-9; if (!model->BSIM4uc1Given) model->BSIM4uc1 = (model->BSIM4mobMod == 1) ? -0.056 : -0.056e-9; } else { if (!model->BSIM4uaGiven) model->BSIM4ua = ((model->BSIM4mobMod == 2 || model->BSIM4mobMod == 6)) ? 1.0e-15 : 1.0e-9; /* unit m/V */ /*printf("warning:ua=%g",model->BSIM4ua);*/ if (!model->BSIM4ucGiven) model->BSIM4uc = (model->BSIM4mobMod == 1 || model->BSIM4mobMod == 5) ? -0.0465 : -0.0465e-9; if (!model->BSIM4uc1Given) model->BSIM4uc1 = (model->BSIM4mobMod == 1 || model->BSIM4mobMod == 5) ? -0.056 : -0.056e-9; } if (!model->BSIM4ua1Given) model->BSIM4ua1 = 1.0e-9; /* unit m/V */ if (!model->BSIM4ubGiven) model->BSIM4ub = 1.0e-19; /* unit (m/V)**2 */ if (!model->BSIM4ub1Given) model->BSIM4ub1 = -1.0e-18; /* unit (m/V)**2 */ if (!model->BSIM4udGiven) model->BSIM4ud = 0.0; /* unit m**(-2) */ if (!model->BSIM4ud1Given) model->BSIM4ud1 = 0.0; if (!model->BSIM4upGiven) model->BSIM4up = 0.0; if (!model->BSIM4lpGiven) model->BSIM4lp = 1.0e-8; if (!model->BSIM4u0Given) model->BSIM4u0 = (model->BSIM4type == NMOS) ? 0.067 : 0.025; if (!model->BSIM4uteGiven) model->BSIM4ute = -1.5; if (!model->BSIM4ucsteGiven) model->BSIM4ucste = -4.775e-3; if (!model->BSIM4voffGiven) model->BSIM4voff = -0.08; if (!model->BSIM4vofflGiven) model->BSIM4voffl = 0.0; if (!model->BSIM4voffcvlGiven) model->BSIM4voffcvl = 0.0; if (!model->BSIM4minvGiven) model->BSIM4minv = 0.0; if (!model->BSIM4minvcvGiven) model->BSIM4minvcv = 0.0; if (!model->BSIM4fproutGiven) model->BSIM4fprout = 0.0; if (!model->BSIM4pditsGiven) model->BSIM4pdits = 0.0; if (!model->BSIM4pditsdGiven) model->BSIM4pditsd = 0.0; if (!model->BSIM4pditslGiven) model->BSIM4pditsl = 0.0; if (!model->BSIM4deltaGiven) model->BSIM4delta = 0.01; if (!model->BSIM4rdswminGiven) model->BSIM4rdswmin = 0.0; if (!model->BSIM4rdwminGiven) model->BSIM4rdwmin = 0.0; if (!model->BSIM4rswminGiven) model->BSIM4rswmin = 0.0; if (!model->BSIM4rdswGiven) model->BSIM4rdsw = 200.0; /* in ohm*um */ if (!model->BSIM4rdwGiven) model->BSIM4rdw = 100.0; if (!model->BSIM4rswGiven) model->BSIM4rsw = 100.0; if (!model->BSIM4prwgGiven) model->BSIM4prwg = 1.0; /* in 1/V */ if (!model->BSIM4prwbGiven) model->BSIM4prwb = 0.0; if (!model->BSIM4prtGiven) model->BSIM4prt = 0.0; if (!model->BSIM4eta0Given) model->BSIM4eta0 = 0.08; /* no unit */ if (!model->BSIM4etabGiven) model->BSIM4etab = -0.07; /* unit 1/V */ if (!model->BSIM4pclmGiven) model->BSIM4pclm = 1.3; /* no unit */ if (!model->BSIM4pdibl1Given) model->BSIM4pdibl1 = 0.39; /* no unit */ if (!model->BSIM4pdibl2Given) model->BSIM4pdibl2 = 0.0086; /* no unit */ if (!model->BSIM4pdiblbGiven) model->BSIM4pdiblb = 0.0; /* 1/V */ if (!model->BSIM4pscbe1Given) model->BSIM4pscbe1 = 4.24e8; if (!model->BSIM4pscbe2Given) model->BSIM4pscbe2 = 1.0e-5; if (!model->BSIM4pvagGiven) model->BSIM4pvag = 0.0; if (!model->BSIM4wrGiven) model->BSIM4wr = 1.0; if (!model->BSIM4dwgGiven) model->BSIM4dwg = 0.0; if (!model->BSIM4dwbGiven) model->BSIM4dwb = 0.0; if (!model->BSIM4b0Given) model->BSIM4b0 = 0.0; if (!model->BSIM4b1Given) model->BSIM4b1 = 0.0; if (!model->BSIM4alpha0Given) model->BSIM4alpha0 = 0.0; if (!model->BSIM4alpha1Given) model->BSIM4alpha1 = 0.0; if (!model->BSIM4beta0Given) model->BSIM4beta0 = 0.0; if (!model->BSIM4gidlModGiven) model->BSIM4gidlMod = 0; /* v4.7 New GIDL/GISL */ if (!model->BSIM4agidlGiven) model->BSIM4agidl = 0.0; if (!model->BSIM4bgidlGiven) model->BSIM4bgidl = 2.3e9; /* V/m */ if (!model->BSIM4cgidlGiven) model->BSIM4cgidl = 0.5; /* V^3 */ if (!model->BSIM4egidlGiven) model->BSIM4egidl = 0.8; /* V */ if (!model->BSIM4rgidlGiven) /* v4.7 New GIDL/GISL */ model->BSIM4rgidl = 1.0; if (!model->BSIM4kgidlGiven) /* v4.7 New GIDL/GISL */ model->BSIM4kgidl = 0.0; if (!model->BSIM4fgidlGiven) /* v4.7 New GIDL/GISL */ /*model->BSIM4fgidl = 0.0;*/ /* Default value of fgdil set to 1 in BSIM4.8.0*/ model->BSIM4fgidl = 1.0; /*if (!model->BSIM4agislGiven) { if (model->BSIM4agidlGiven) model->BSIM4agisl = model->BSIM4agidl; else model->BSIM4agisl = 0.0; }*/ /*Default value of agidl being 0, agisl set as follows */ /*if (!model->BSIM4bgislGiven) { if (model->BSIM4bgidlGiven) model->BSIM4bgisl = model->BSIM4bgidl; else model->BSIM4bgisl = 2.3e9; }*/ /*Default value of bgidl being 2.3e9, bgisl set as follows */ /*if (!model->BSIM4cgislGiven) { if (model->BSIM4cgidlGiven) model->BSIM4cgisl = model->BSIM4cgidl; else model->BSIM4cgisl = 0.5; }*/ /*Default value of cgidl being 0.5, cgisl set as follows */ /*if (!model->BSIM4egislGiven) { if (model->BSIM4egidlGiven) model->BSIM4egisl = model->BSIM4egidl; else model->BSIM4egisl = 0.8; }*/ /*Default value of agisl, bgisl, cgisl, egisl, rgisl, kgisl, and fgisl are set as follows */ if (!model->BSIM4agislGiven) model->BSIM4agisl = model->BSIM4agidl; if (!model->BSIM4bgislGiven) model->BSIM4bgisl = model->BSIM4bgidl; if (!model->BSIM4cgislGiven) model->BSIM4cgisl = model->BSIM4cgidl; if (!model->BSIM4egislGiven) model->BSIM4egisl = model->BSIM4egidl; if (!model->BSIM4rgislGiven) /* v4.7 New GIDL/GISL */ model->BSIM4rgisl = model->BSIM4rgidl; if (!model->BSIM4kgislGiven) /* v4.7 New GIDL/GISL */ model->BSIM4kgisl = model->BSIM4kgidl; if (!model->BSIM4fgislGiven) /* v4.7 New GIDL/GISL */ model->BSIM4fgisl = model->BSIM4fgidl; if (!model->BSIM4aigcGiven) model->BSIM4aigc = (model->BSIM4type == NMOS) ? 1.36e-2 : 9.80e-3; if (!model->BSIM4bigcGiven) model->BSIM4bigc = (model->BSIM4type == NMOS) ? 1.71e-3 : 7.59e-4; if (!model->BSIM4cigcGiven) model->BSIM4cigc = (model->BSIM4type == NMOS) ? 0.075 : 0.03; if (model->BSIM4aigsdGiven) { model->BSIM4aigs = model->BSIM4aigd = model->BSIM4aigsd; } else { model->BSIM4aigsd = (model->BSIM4type == NMOS) ? 1.36e-2 : 9.80e-3; if (!model->BSIM4aigsGiven) model->BSIM4aigs = (model->BSIM4type == NMOS) ? 1.36e-2 : 9.80e-3; if (!model->BSIM4aigdGiven) model->BSIM4aigd = (model->BSIM4type == NMOS) ? 1.36e-2 : 9.80e-3; } if (model->BSIM4bigsdGiven) { model->BSIM4bigs = model->BSIM4bigd = model->BSIM4bigsd; } else { model->BSIM4bigsd = (model->BSIM4type == NMOS) ? 1.71e-3 : 7.59e-4; if (!model->BSIM4bigsGiven) model->BSIM4bigs = (model->BSIM4type == NMOS) ? 1.71e-3 : 7.59e-4; if (!model->BSIM4bigdGiven) model->BSIM4bigd = (model->BSIM4type == NMOS) ? 1.71e-3 : 7.59e-4; } if (model->BSIM4cigsdGiven) { model->BSIM4cigs = model->BSIM4cigd = model->BSIM4cigsd; } else { model->BSIM4cigsd = (model->BSIM4type == NMOS) ? 0.075 : 0.03; if (!model->BSIM4cigsGiven) model->BSIM4cigs = (model->BSIM4type == NMOS) ? 0.075 : 0.03; if (!model->BSIM4cigdGiven) model->BSIM4cigd = (model->BSIM4type == NMOS) ? 0.075 : 0.03; } if (!model->BSIM4aigbaccGiven) model->BSIM4aigbacc = 1.36e-2; if (!model->BSIM4bigbaccGiven) model->BSIM4bigbacc = 1.71e-3; if (!model->BSIM4cigbaccGiven) model->BSIM4cigbacc = 0.075; if (!model->BSIM4aigbinvGiven) model->BSIM4aigbinv = 1.11e-2; if (!model->BSIM4bigbinvGiven) model->BSIM4bigbinv = 9.49e-4; if (!model->BSIM4cigbinvGiven) model->BSIM4cigbinv = 0.006; if (!model->BSIM4nigcGiven) model->BSIM4nigc = 1.0; if (!model->BSIM4nigbinvGiven) model->BSIM4nigbinv = 3.0; if (!model->BSIM4nigbaccGiven) model->BSIM4nigbacc = 1.0; if (!model->BSIM4ntoxGiven) model->BSIM4ntox = 1.0; if (!model->BSIM4eigbinvGiven) model->BSIM4eigbinv = 1.1; if (!model->BSIM4pigcdGiven) model->BSIM4pigcd = 1.0; if (!model->BSIM4poxedgeGiven) model->BSIM4poxedge = 1.0; if (!model->BSIM4xrcrg1Given) model->BSIM4xrcrg1 = 12.0; if (!model->BSIM4xrcrg2Given) model->BSIM4xrcrg2 = 1.0; if (!model->BSIM4ijthsfwdGiven) model->BSIM4ijthsfwd = 0.1; /* unit A */ if (!model->BSIM4ijthdfwdGiven) model->BSIM4ijthdfwd = model->BSIM4ijthsfwd; if (!model->BSIM4ijthsrevGiven) model->BSIM4ijthsrev = 0.1; /* unit A */ if (!model->BSIM4ijthdrevGiven) model->BSIM4ijthdrev = model->BSIM4ijthsrev; if (!model->BSIM4tnoiaGiven) model->BSIM4tnoia = 1.5; if (!model->BSIM4tnoibGiven) model->BSIM4tnoib = 3.5; if (!model->BSIM4tnoicGiven) model->BSIM4tnoic = 0.0; if (!model->BSIM4rnoiaGiven) model->BSIM4rnoia = 0.577; if (!model->BSIM4rnoibGiven) model->BSIM4rnoib = 0.5164; if (!model->BSIM4rnoicGiven) model->BSIM4rnoic = 0.395; if (!model->BSIM4ntnoiGiven) model->BSIM4ntnoi = 1.0; if (!model->BSIM4lambdaGiven) model->BSIM4lambda = 0.0; if (!model->BSIM4vtlGiven) model->BSIM4vtl = 2.0e5; /* unit m/s */ if (!model->BSIM4xnGiven) model->BSIM4xn = 3.0; if (!model->BSIM4lcGiven) model->BSIM4lc = 5.0e-9; if (!model->BSIM4vfbsdoffGiven) model->BSIM4vfbsdoff = 0.0; /* unit v */ if (!model->BSIM4tvfbsdoffGiven) model->BSIM4tvfbsdoff = 0.0; if (!model->BSIM4tvoffGiven) model->BSIM4tvoff = 0.0; if (!model->BSIM4tnfactorGiven) /* v4.7 temp dep of leakage current */ model->BSIM4tnfactor = 0.0; if (!model->BSIM4teta0Given) /* v4.7 temp dep of leakage current */ model->BSIM4teta0 = 0.0; if (!model->BSIM4tvoffcvGiven) /* v4.7 temp dep of leakage current */ model->BSIM4tvoffcv = 0.0; if (!model->BSIM4lintnoiGiven) model->BSIM4lintnoi = 0.0; /* unit m */ if (!model->BSIM4xjbvsGiven) model->BSIM4xjbvs = 1.0; /* no unit */ if (!model->BSIM4xjbvdGiven) model->BSIM4xjbvd = model->BSIM4xjbvs; if (!model->BSIM4bvsGiven) model->BSIM4bvs = 10.0; /* V */ if (!model->BSIM4bvdGiven) model->BSIM4bvd = model->BSIM4bvs; if (!model->BSIM4gbminGiven) model->BSIM4gbmin = 1.0e-12; /* in mho */ if (!model->BSIM4rbdbGiven) model->BSIM4rbdb = 50.0; /* in ohm */ if (!model->BSIM4rbpbGiven) model->BSIM4rbpb = 50.0; if (!model->BSIM4rbsbGiven) model->BSIM4rbsb = 50.0; if (!model->BSIM4rbpsGiven) model->BSIM4rbps = 50.0; if (!model->BSIM4rbpdGiven) model->BSIM4rbpd = 50.0; if (!model->BSIM4rbps0Given) model->BSIM4rbps0 = 50.0; if (!model->BSIM4rbpslGiven) model->BSIM4rbpsl = 0.0; if (!model->BSIM4rbpswGiven) model->BSIM4rbpsw = 0.0; if (!model->BSIM4rbpsnfGiven) model->BSIM4rbpsnf = 0.0; if (!model->BSIM4rbpd0Given) model->BSIM4rbpd0 = 50.0; if (!model->BSIM4rbpdlGiven) model->BSIM4rbpdl = 0.0; if (!model->BSIM4rbpdwGiven) model->BSIM4rbpdw = 0.0; if (!model->BSIM4rbpdnfGiven) model->BSIM4rbpdnf = 0.0; if (!model->BSIM4rbpbx0Given) model->BSIM4rbpbx0 = 100.0; if (!model->BSIM4rbpbxlGiven) model->BSIM4rbpbxl = 0.0; if (!model->BSIM4rbpbxwGiven) model->BSIM4rbpbxw = 0.0; if (!model->BSIM4rbpbxnfGiven) model->BSIM4rbpbxnf = 0.0; if (!model->BSIM4rbpby0Given) model->BSIM4rbpby0 = 100.0; if (!model->BSIM4rbpbylGiven) model->BSIM4rbpbyl = 0.0; if (!model->BSIM4rbpbywGiven) model->BSIM4rbpbyw = 0.0; if (!model->BSIM4rbpbynfGiven) model->BSIM4rbpbynf = 0.0; if (!model->BSIM4rbsbx0Given) model->BSIM4rbsbx0 = 100.0; if (!model->BSIM4rbsby0Given) model->BSIM4rbsby0 = 100.0; if (!model->BSIM4rbdbx0Given) model->BSIM4rbdbx0 = 100.0; if (!model->BSIM4rbdby0Given) model->BSIM4rbdby0 = 100.0; if (!model->BSIM4rbsdbxlGiven) model->BSIM4rbsdbxl = 0.0; if (!model->BSIM4rbsdbxwGiven) model->BSIM4rbsdbxw = 0.0; if (!model->BSIM4rbsdbxnfGiven) model->BSIM4rbsdbxnf = 0.0; if (!model->BSIM4rbsdbylGiven) model->BSIM4rbsdbyl = 0.0; if (!model->BSIM4rbsdbywGiven) model->BSIM4rbsdbyw = 0.0; if (!model->BSIM4rbsdbynfGiven) model->BSIM4rbsdbynf = 0.0; if (!model->BSIM4cgslGiven) model->BSIM4cgsl = 0.0; if (!model->BSIM4cgdlGiven) model->BSIM4cgdl = 0.0; if (!model->BSIM4ckappasGiven) model->BSIM4ckappas = 0.6; if (!model->BSIM4ckappadGiven) model->BSIM4ckappad = model->BSIM4ckappas; if (!model->BSIM4clcGiven) model->BSIM4clc = 0.1e-6; if (!model->BSIM4cleGiven) model->BSIM4cle = 0.6; if (!model->BSIM4vfbcvGiven) model->BSIM4vfbcv = -1.0; if (!model->BSIM4acdeGiven) model->BSIM4acde = 1.0; if (!model->BSIM4moinGiven) model->BSIM4moin = 15.0; if (!model->BSIM4noffGiven) model->BSIM4noff = 1.0; if (!model->BSIM4voffcvGiven) model->BSIM4voffcv = 0.0; if (!model->BSIM4dmcgGiven) model->BSIM4dmcg = 0.0; if (!model->BSIM4dmciGiven) model->BSIM4dmci = model->BSIM4dmcg; if (!model->BSIM4dmdgGiven) model->BSIM4dmdg = 0.0; if (!model->BSIM4dmcgtGiven) model->BSIM4dmcgt = 0.0; if (!model->BSIM4xgwGiven) model->BSIM4xgw = 0.0; if (!model->BSIM4xglGiven) model->BSIM4xgl = 0.0; if (!model->BSIM4rshgGiven) model->BSIM4rshg = 0.1; if (!model->BSIM4ngconGiven) model->BSIM4ngcon = 1.0; if (!model->BSIM4tcjGiven) model->BSIM4tcj = 0.0; if (!model->BSIM4tpbGiven) model->BSIM4tpb = 0.0; if (!model->BSIM4tcjswGiven) model->BSIM4tcjsw = 0.0; if (!model->BSIM4tpbswGiven) model->BSIM4tpbsw = 0.0; if (!model->BSIM4tcjswgGiven) model->BSIM4tcjswg = 0.0; if (!model->BSIM4tpbswgGiven) model->BSIM4tpbswg = 0.0; /* Length dependence */ if (!model->BSIM4lcdscGiven) model->BSIM4lcdsc = 0.0; if (!model->BSIM4lcdscbGiven) model->BSIM4lcdscb = 0.0; if (!model->BSIM4lcdscdGiven) model->BSIM4lcdscd = 0.0; if (!model->BSIM4lcitGiven) model->BSIM4lcit = 0.0; if (!model->BSIM4lnfactorGiven) model->BSIM4lnfactor = 0.0; if (!model->BSIM4lxjGiven) model->BSIM4lxj = 0.0; if (!model->BSIM4lvsatGiven) model->BSIM4lvsat = 0.0; if (!model->BSIM4latGiven) model->BSIM4lat = 0.0; if (!model->BSIM4la0Given) model->BSIM4la0 = 0.0; if (!model->BSIM4lagsGiven) model->BSIM4lags = 0.0; if (!model->BSIM4la1Given) model->BSIM4la1 = 0.0; if (!model->BSIM4la2Given) model->BSIM4la2 = 0.0; if (!model->BSIM4lketaGiven) model->BSIM4lketa = 0.0; if (!model->BSIM4lnsubGiven) model->BSIM4lnsub = 0.0; if (!model->BSIM4lndepGiven) model->BSIM4lndep = 0.0; if (!model->BSIM4lnsdGiven) model->BSIM4lnsd = 0.0; if (!model->BSIM4lphinGiven) model->BSIM4lphin = 0.0; if (!model->BSIM4lngateGiven) model->BSIM4lngate = 0.0; if (!model->BSIM4lvbmGiven) model->BSIM4lvbm = 0.0; if (!model->BSIM4lxtGiven) model->BSIM4lxt = 0.0; if (!model->BSIM4lk1Given) model->BSIM4lk1 = 0.0; if (!model->BSIM4lkt1Given) model->BSIM4lkt1 = 0.0; if (!model->BSIM4lkt1lGiven) model->BSIM4lkt1l = 0.0; if (!model->BSIM4lkt2Given) model->BSIM4lkt2 = 0.0; if (!model->BSIM4lk2Given) model->BSIM4lk2 = 0.0; if (!model->BSIM4lk3Given) model->BSIM4lk3 = 0.0; if (!model->BSIM4lk3bGiven) model->BSIM4lk3b = 0.0; if (!model->BSIM4lw0Given) model->BSIM4lw0 = 0.0; if (!model->BSIM4llpe0Given) model->BSIM4llpe0 = 0.0; if (!model->BSIM4llpebGiven) model->BSIM4llpeb = 0.0; if (!model->BSIM4ldvtp0Given) model->BSIM4ldvtp0 = 0.0; if (!model->BSIM4ldvtp1Given) model->BSIM4ldvtp1 = 0.0; if (!model->BSIM4ldvtp2Given) /* New DIBL/Rout */ model->BSIM4ldvtp2 = 0.0; if (!model->BSIM4ldvtp3Given) model->BSIM4ldvtp3 = 0.0; if (!model->BSIM4ldvtp4Given) model->BSIM4ldvtp4 = 0.0; if (!model->BSIM4ldvtp5Given) model->BSIM4ldvtp5 = 0.0; if (!model->BSIM4ldvt0Given) model->BSIM4ldvt0 = 0.0; if (!model->BSIM4ldvt1Given) model->BSIM4ldvt1 = 0.0; if (!model->BSIM4ldvt2Given) model->BSIM4ldvt2 = 0.0; if (!model->BSIM4ldvt0wGiven) model->BSIM4ldvt0w = 0.0; if (!model->BSIM4ldvt1wGiven) model->BSIM4ldvt1w = 0.0; if (!model->BSIM4ldvt2wGiven) model->BSIM4ldvt2w = 0.0; if (!model->BSIM4ldroutGiven) model->BSIM4ldrout = 0.0; if (!model->BSIM4ldsubGiven) model->BSIM4ldsub = 0.0; if (!model->BSIM4lvth0Given) model->BSIM4lvth0 = 0.0; if (!model->BSIM4luaGiven) model->BSIM4lua = 0.0; if (!model->BSIM4lua1Given) model->BSIM4lua1 = 0.0; if (!model->BSIM4lubGiven) model->BSIM4lub = 0.0; if (!model->BSIM4lub1Given) model->BSIM4lub1 = 0.0; if (!model->BSIM4lucGiven) model->BSIM4luc = 0.0; if (!model->BSIM4luc1Given) model->BSIM4luc1 = 0.0; if (!model->BSIM4ludGiven) model->BSIM4lud = 0.0; if (!model->BSIM4lud1Given) model->BSIM4lud1 = 0.0; if (!model->BSIM4lupGiven) model->BSIM4lup = 0.0; if (!model->BSIM4llpGiven) model->BSIM4llp = 0.0; if (!model->BSIM4lu0Given) model->BSIM4lu0 = 0.0; if (!model->BSIM4luteGiven) model->BSIM4lute = 0.0; if (!model->BSIM4lucsteGiven) model->BSIM4lucste = 0.0; if (!model->BSIM4lvoffGiven) model->BSIM4lvoff = 0.0; if (!model->BSIM4lminvGiven) model->BSIM4lminv = 0.0; if (!model->BSIM4lminvcvGiven) model->BSIM4lminvcv = 0.0; if (!model->BSIM4lfproutGiven) model->BSIM4lfprout = 0.0; if (!model->BSIM4lpditsGiven) model->BSIM4lpdits = 0.0; if (!model->BSIM4lpditsdGiven) model->BSIM4lpditsd = 0.0; if (!model->BSIM4ldeltaGiven) model->BSIM4ldelta = 0.0; if (!model->BSIM4lrdswGiven) model->BSIM4lrdsw = 0.0; if (!model->BSIM4lrdwGiven) model->BSIM4lrdw = 0.0; if (!model->BSIM4lrswGiven) model->BSIM4lrsw = 0.0; if (!model->BSIM4lprwbGiven) model->BSIM4lprwb = 0.0; if (!model->BSIM4lprwgGiven) model->BSIM4lprwg = 0.0; if (!model->BSIM4lprtGiven) model->BSIM4lprt = 0.0; if (!model->BSIM4leta0Given) model->BSIM4leta0 = 0.0; if (!model->BSIM4letabGiven) model->BSIM4letab = -0.0; if (!model->BSIM4lpclmGiven) model->BSIM4lpclm = 0.0; if (!model->BSIM4lpdibl1Given) model->BSIM4lpdibl1 = 0.0; if (!model->BSIM4lpdibl2Given) model->BSIM4lpdibl2 = 0.0; if (!model->BSIM4lpdiblbGiven) model->BSIM4lpdiblb = 0.0; if (!model->BSIM4lpscbe1Given) model->BSIM4lpscbe1 = 0.0; if (!model->BSIM4lpscbe2Given) model->BSIM4lpscbe2 = 0.0; if (!model->BSIM4lpvagGiven) model->BSIM4lpvag = 0.0; if (!model->BSIM4lwrGiven) model->BSIM4lwr = 0.0; if (!model->BSIM4ldwgGiven) model->BSIM4ldwg = 0.0; if (!model->BSIM4ldwbGiven) model->BSIM4ldwb = 0.0; if (!model->BSIM4lb0Given) model->BSIM4lb0 = 0.0; if (!model->BSIM4lb1Given) model->BSIM4lb1 = 0.0; if (!model->BSIM4lalpha0Given) model->BSIM4lalpha0 = 0.0; if (!model->BSIM4lalpha1Given) model->BSIM4lalpha1 = 0.0; if (!model->BSIM4lbeta0Given) model->BSIM4lbeta0 = 0.0; if (!model->BSIM4lagidlGiven) model->BSIM4lagidl = 0.0; if (!model->BSIM4lbgidlGiven) model->BSIM4lbgidl = 0.0; if (!model->BSIM4lcgidlGiven) model->BSIM4lcgidl = 0.0; if (!model->BSIM4legidlGiven) model->BSIM4legidl = 0.0; if (!model->BSIM4lrgidlGiven) /* v4.7 New GIDL/GISL */ model->BSIM4lrgidl = 0.0; if (!model->BSIM4lkgidlGiven) /* v4.7 New GIDL/GISL */ model->BSIM4lkgidl = 0.0; if (!model->BSIM4lfgidlGiven) /* v4.7 New GIDL/GISL */ model->BSIM4lfgidl = 0.0; /*if (!model->BSIM4lagislGiven) { if (model->BSIM4lagidlGiven) model->BSIM4lagisl = model->BSIM4lagidl; else model->BSIM4lagisl = 0.0; } if (!model->BSIM4lbgislGiven) { if (model->BSIM4lbgidlGiven) model->BSIM4lbgisl = model->BSIM4lbgidl; else model->BSIM4lbgisl = 0.0; } if (!model->BSIM4lcgislGiven) { if (model->BSIM4lcgidlGiven) model->BSIM4lcgisl = model->BSIM4lcgidl; else model->BSIM4lcgisl = 0.0; } if (!model->BSIM4legislGiven) { if (model->BSIM4legidlGiven) model->BSIM4legisl = model->BSIM4legidl; else model->BSIM4legisl = 0.0; }*/ /*if (!model->BSIM4lrgislGiven) { if (model->BSIM4lrgidlGiven) model->BSIM4lrgisl = model->BSIM4lrgidl; } if (!model->BSIM4lkgislGiven) { if (model->BSIM4lkgidlGiven) model->BSIM4lkgisl = model->BSIM4lkgidl; } if (!model->BSIM4lfgislGiven) { if (model->BSIM4lfgidlGiven) model->BSIM4lfgisl = model->BSIM4lfgidl; }*/ /*Default value of lagisl, lbgisl, lcgisl, legisl, lrgisl, lkgisl, and lfgisl are set as follows */ if (!model->BSIM4lagislGiven) model->BSIM4lagisl = model->BSIM4lagidl; if (!model->BSIM4lbgislGiven) model->BSIM4lbgisl = model->BSIM4lbgidl; if (!model->BSIM4lcgislGiven) model->BSIM4lcgisl = model->BSIM4lcgidl; if (!model->BSIM4legislGiven) model->BSIM4legisl = model->BSIM4legidl; if (!model->BSIM4lrgislGiven) /* v4.7 New GIDL/GISL */ model->BSIM4lrgisl = model->BSIM4lrgidl; if (!model->BSIM4lkgislGiven) /* v4.7 New GIDL/GISL */ model->BSIM4lkgisl = model->BSIM4lkgidl; if (!model->BSIM4lfgislGiven) /* v4.7 New GIDL/GISL */ model->BSIM4lfgisl = model->BSIM4lfgidl; if (!model->BSIM4laigcGiven) model->BSIM4laigc = 0.0; if (!model->BSIM4lbigcGiven) model->BSIM4lbigc = 0.0; if (!model->BSIM4lcigcGiven) model->BSIM4lcigc = 0.0; if (!model->BSIM4aigsdGiven && (model->BSIM4aigsGiven || model->BSIM4aigdGiven)) { if (!model->BSIM4laigsGiven) model->BSIM4laigs = 0.0; if (!model->BSIM4laigdGiven) model->BSIM4laigd = 0.0; } else { if (!model->BSIM4laigsdGiven) model->BSIM4laigsd = 0.0; model->BSIM4laigs = model->BSIM4laigd = model->BSIM4laigsd; } if (!model->BSIM4bigsdGiven && (model->BSIM4bigsGiven || model->BSIM4bigdGiven)) { if (!model->BSIM4lbigsGiven) model->BSIM4lbigs = 0.0; if (!model->BSIM4lbigdGiven) model->BSIM4lbigd = 0.0; } else { if (!model->BSIM4lbigsdGiven) model->BSIM4lbigsd = 0.0; model->BSIM4lbigs = model->BSIM4lbigd = model->BSIM4lbigsd; } if (!model->BSIM4cigsdGiven && (model->BSIM4cigsGiven || model->BSIM4cigdGiven)) { if (!model->BSIM4lcigsGiven) model->BSIM4lcigs = 0.0; if (!model->BSIM4lcigdGiven) model->BSIM4lcigd = 0.0; } else { if (!model->BSIM4lcigsdGiven) model->BSIM4lcigsd = 0.0; model->BSIM4lcigs = model->BSIM4lcigd = model->BSIM4lcigsd; } if (!model->BSIM4laigbaccGiven) model->BSIM4laigbacc = 0.0; if (!model->BSIM4lbigbaccGiven) model->BSIM4lbigbacc = 0.0; if (!model->BSIM4lcigbaccGiven) model->BSIM4lcigbacc = 0.0; if (!model->BSIM4laigbinvGiven) model->BSIM4laigbinv = 0.0; if (!model->BSIM4lbigbinvGiven) model->BSIM4lbigbinv = 0.0; if (!model->BSIM4lcigbinvGiven) model->BSIM4lcigbinv = 0.0; if (!model->BSIM4lnigcGiven) model->BSIM4lnigc = 0.0; if (!model->BSIM4lnigbinvGiven) model->BSIM4lnigbinv = 0.0; if (!model->BSIM4lnigbaccGiven) model->BSIM4lnigbacc = 0.0; if (!model->BSIM4lntoxGiven) model->BSIM4lntox = 0.0; if (!model->BSIM4leigbinvGiven) model->BSIM4leigbinv = 0.0; if (!model->BSIM4lpigcdGiven) model->BSIM4lpigcd = 0.0; if (!model->BSIM4lpoxedgeGiven) model->BSIM4lpoxedge = 0.0; if (!model->BSIM4lxrcrg1Given) model->BSIM4lxrcrg1 = 0.0; if (!model->BSIM4lxrcrg2Given) model->BSIM4lxrcrg2 = 0.0; if (!model->BSIM4leuGiven) model->BSIM4leu = 0.0; if (!model->BSIM4lucsGiven) model->BSIM4lucs = 0.0; if (!model->BSIM4lvfbGiven) model->BSIM4lvfb = 0.0; if (!model->BSIM4llambdaGiven) model->BSIM4llambda = 0.0; if (!model->BSIM4lvtlGiven) model->BSIM4lvtl = 0.0; if (!model->BSIM4lxnGiven) model->BSIM4lxn = 0.0; if (!model->BSIM4lvfbsdoffGiven) model->BSIM4lvfbsdoff = 0.0; if (!model->BSIM4ltvfbsdoffGiven) model->BSIM4ltvfbsdoff = 0.0; if (!model->BSIM4ltvoffGiven) model->BSIM4ltvoff = 0.0; if (!model->BSIM4ltnfactorGiven) /* v4.7 temp dep of leakage current */ model->BSIM4ltnfactor = 0.0; if (!model->BSIM4lteta0Given) /* v4.7 temp dep of leakage current */ model->BSIM4lteta0 = 0.0; if (!model->BSIM4ltvoffcvGiven) /* v4.7 temp dep of leakage current */ model->BSIM4ltvoffcv = 0.0; if (!model->BSIM4lcgslGiven) model->BSIM4lcgsl = 0.0; if (!model->BSIM4lcgdlGiven) model->BSIM4lcgdl = 0.0; if (!model->BSIM4lckappasGiven) model->BSIM4lckappas = 0.0; if (!model->BSIM4lckappadGiven) model->BSIM4lckappad = 0.0; if (!model->BSIM4lclcGiven) model->BSIM4lclc = 0.0; if (!model->BSIM4lcleGiven) model->BSIM4lcle = 0.0; if (!model->BSIM4lcfGiven) model->BSIM4lcf = 0.0; if (!model->BSIM4lvfbcvGiven) model->BSIM4lvfbcv = 0.0; if (!model->BSIM4lacdeGiven) model->BSIM4lacde = 0.0; if (!model->BSIM4lmoinGiven) model->BSIM4lmoin = 0.0; if (!model->BSIM4lnoffGiven) model->BSIM4lnoff = 0.0; if (!model->BSIM4lvoffcvGiven) model->BSIM4lvoffcv = 0.0; /* Width dependence */ if (!model->BSIM4wcdscGiven) model->BSIM4wcdsc = 0.0; if (!model->BSIM4wcdscbGiven) model->BSIM4wcdscb = 0.0; if (!model->BSIM4wcdscdGiven) model->BSIM4wcdscd = 0.0; if (!model->BSIM4wcitGiven) model->BSIM4wcit = 0.0; if (!model->BSIM4wnfactorGiven) model->BSIM4wnfactor = 0.0; if (!model->BSIM4wxjGiven) model->BSIM4wxj = 0.0; if (!model->BSIM4wvsatGiven) model->BSIM4wvsat = 0.0; if (!model->BSIM4watGiven) model->BSIM4wat = 0.0; if (!model->BSIM4wa0Given) model->BSIM4wa0 = 0.0; if (!model->BSIM4wagsGiven) model->BSIM4wags = 0.0; if (!model->BSIM4wa1Given) model->BSIM4wa1 = 0.0; if (!model->BSIM4wa2Given) model->BSIM4wa2 = 0.0; if (!model->BSIM4wketaGiven) model->BSIM4wketa = 0.0; if (!model->BSIM4wnsubGiven) model->BSIM4wnsub = 0.0; if (!model->BSIM4wndepGiven) model->BSIM4wndep = 0.0; if (!model->BSIM4wnsdGiven) model->BSIM4wnsd = 0.0; if (!model->BSIM4wphinGiven) model->BSIM4wphin = 0.0; if (!model->BSIM4wngateGiven) model->BSIM4wngate = 0.0; if (!model->BSIM4wvbmGiven) model->BSIM4wvbm = 0.0; if (!model->BSIM4wxtGiven) model->BSIM4wxt = 0.0; if (!model->BSIM4wk1Given) model->BSIM4wk1 = 0.0; if (!model->BSIM4wkt1Given) model->BSIM4wkt1 = 0.0; if (!model->BSIM4wkt1lGiven) model->BSIM4wkt1l = 0.0; if (!model->BSIM4wkt2Given) model->BSIM4wkt2 = 0.0; if (!model->BSIM4wk2Given) model->BSIM4wk2 = 0.0; if (!model->BSIM4wk3Given) model->BSIM4wk3 = 0.0; if (!model->BSIM4wk3bGiven) model->BSIM4wk3b = 0.0; if (!model->BSIM4ww0Given) model->BSIM4ww0 = 0.0; if (!model->BSIM4wlpe0Given) model->BSIM4wlpe0 = 0.0; if (!model->BSIM4wlpebGiven) model->BSIM4wlpeb = 0.0; if (!model->BSIM4wdvtp0Given) model->BSIM4wdvtp0 = 0.0; if (!model->BSIM4wdvtp1Given) model->BSIM4wdvtp1 = 0.0; if (!model->BSIM4wdvtp2Given) /* New DIBL/Rout */ model->BSIM4wdvtp2 = 0.0; if (!model->BSIM4wdvtp3Given) model->BSIM4wdvtp3 = 0.0; if (!model->BSIM4wdvtp4Given) model->BSIM4wdvtp4 = 0.0; if (!model->BSIM4wdvtp5Given) model->BSIM4wdvtp5 = 0.0; if (!model->BSIM4wdvt0Given) model->BSIM4wdvt0 = 0.0; if (!model->BSIM4wdvt1Given) model->BSIM4wdvt1 = 0.0; if (!model->BSIM4wdvt2Given) model->BSIM4wdvt2 = 0.0; if (!model->BSIM4wdvt0wGiven) model->BSIM4wdvt0w = 0.0; if (!model->BSIM4wdvt1wGiven) model->BSIM4wdvt1w = 0.0; if (!model->BSIM4wdvt2wGiven) model->BSIM4wdvt2w = 0.0; if (!model->BSIM4wdroutGiven) model->BSIM4wdrout = 0.0; if (!model->BSIM4wdsubGiven) model->BSIM4wdsub = 0.0; if (!model->BSIM4wvth0Given) model->BSIM4wvth0 = 0.0; if (!model->BSIM4wuaGiven) model->BSIM4wua = 0.0; if (!model->BSIM4wua1Given) model->BSIM4wua1 = 0.0; if (!model->BSIM4wubGiven) model->BSIM4wub = 0.0; if (!model->BSIM4wub1Given) model->BSIM4wub1 = 0.0; if (!model->BSIM4wucGiven) model->BSIM4wuc = 0.0; if (!model->BSIM4wuc1Given) model->BSIM4wuc1 = 0.0; if (!model->BSIM4wudGiven) model->BSIM4wud = 0.0; if (!model->BSIM4wud1Given) model->BSIM4wud1 = 0.0; if (!model->BSIM4wupGiven) model->BSIM4wup = 0.0; if (!model->BSIM4wlpGiven) model->BSIM4wlp = 0.0; if (!model->BSIM4wu0Given) model->BSIM4wu0 = 0.0; if (!model->BSIM4wuteGiven) model->BSIM4wute = 0.0; if (!model->BSIM4wucsteGiven) model->BSIM4wucste = 0.0; if (!model->BSIM4wvoffGiven) model->BSIM4wvoff = 0.0; if (!model->BSIM4wminvGiven) model->BSIM4wminv = 0.0; if (!model->BSIM4wminvcvGiven) model->BSIM4wminvcv = 0.0; if (!model->BSIM4wfproutGiven) model->BSIM4wfprout = 0.0; if (!model->BSIM4wpditsGiven) model->BSIM4wpdits = 0.0; if (!model->BSIM4wpditsdGiven) model->BSIM4wpditsd = 0.0; if (!model->BSIM4wdeltaGiven) model->BSIM4wdelta = 0.0; if (!model->BSIM4wrdswGiven) model->BSIM4wrdsw = 0.0; if (!model->BSIM4wrdwGiven) model->BSIM4wrdw = 0.0; if (!model->BSIM4wrswGiven) model->BSIM4wrsw = 0.0; if (!model->BSIM4wprwbGiven) model->BSIM4wprwb = 0.0; if (!model->BSIM4wprwgGiven) model->BSIM4wprwg = 0.0; if (!model->BSIM4wprtGiven) model->BSIM4wprt = 0.0; if (!model->BSIM4weta0Given) model->BSIM4weta0 = 0.0; if (!model->BSIM4wetabGiven) model->BSIM4wetab = 0.0; if (!model->BSIM4wpclmGiven) model->BSIM4wpclm = 0.0; if (!model->BSIM4wpdibl1Given) model->BSIM4wpdibl1 = 0.0; if (!model->BSIM4wpdibl2Given) model->BSIM4wpdibl2 = 0.0; if (!model->BSIM4wpdiblbGiven) model->BSIM4wpdiblb = 0.0; if (!model->BSIM4wpscbe1Given) model->BSIM4wpscbe1 = 0.0; if (!model->BSIM4wpscbe2Given) model->BSIM4wpscbe2 = 0.0; if (!model->BSIM4wpvagGiven) model->BSIM4wpvag = 0.0; if (!model->BSIM4wwrGiven) model->BSIM4wwr = 0.0; if (!model->BSIM4wdwgGiven) model->BSIM4wdwg = 0.0; if (!model->BSIM4wdwbGiven) model->BSIM4wdwb = 0.0; if (!model->BSIM4wb0Given) model->BSIM4wb0 = 0.0; if (!model->BSIM4wb1Given) model->BSIM4wb1 = 0.0; if (!model->BSIM4walpha0Given) model->BSIM4walpha0 = 0.0; if (!model->BSIM4walpha1Given) model->BSIM4walpha1 = 0.0; if (!model->BSIM4wbeta0Given) model->BSIM4wbeta0 = 0.0; if (!model->BSIM4wagidlGiven) model->BSIM4wagidl = 0.0; if (!model->BSIM4wbgidlGiven) model->BSIM4wbgidl = 0.0; if (!model->BSIM4wcgidlGiven) model->BSIM4wcgidl = 0.0; if (!model->BSIM4wegidlGiven) model->BSIM4wegidl = 0.0; if (!model->BSIM4wrgidlGiven) /* v4.7 New GIDL/GISL */ model->BSIM4wrgidl = 0.0; if (!model->BSIM4wkgidlGiven) /* v4.7 New GIDL/GISL */ model->BSIM4wkgidl = 0.0; if (!model->BSIM4wfgidlGiven) /* v4.7 New GIDL/GISL */ model->BSIM4wfgidl = 0.0; /*if (!model->BSIM4wagislGiven) { if (model->BSIM4wagidlGiven) model->BSIM4wagisl = model->BSIM4wagidl; else model->BSIM4wagisl = 0.0; } if (!model->BSIM4wbgislGiven) { if (model->BSIM4wbgidlGiven) model->BSIM4wbgisl = model->BSIM4wbgidl; else model->BSIM4wbgisl = 0.0; } if (!model->BSIM4wcgislGiven) { if (model->BSIM4wcgidlGiven) model->BSIM4wcgisl = model->BSIM4wcgidl; else model->BSIM4wcgisl = 0.0; } if (!model->BSIM4wegislGiven) { if (model->BSIM4wegidlGiven) model->BSIM4wegisl = model->BSIM4wegidl; else model->BSIM4wegisl = 0.0; }*/ /*if (!model->BSIM4wrgislGiven) { if (model->BSIM4wrgidlGiven) model->BSIM4wrgisl = model->BSIM4wrgidl; } if (!model->BSIM4wkgislGiven) { if (model->BSIM4wkgidlGiven) model->BSIM4wkgisl = model->BSIM4wkgidl; } if (!model->BSIM4wfgislGiven) { if (model->BSIM4wfgidlGiven) model->BSIM4wfgisl = model->BSIM4wfgidl; }*/ /*Default value of wagisl, wbgisl, wcgisl, wegisl, wrgisl, wkgisl, and wfgisl are set as follows */ if (!model->BSIM4wagislGiven) model->BSIM4wagisl = model->BSIM4wagidl; if (!model->BSIM4wbgislGiven) model->BSIM4wbgisl = model->BSIM4wbgidl; if (!model->BSIM4wcgislGiven) model->BSIM4wcgisl = model->BSIM4wcgidl; if (!model->BSIM4wegislGiven) model->BSIM4wegisl = model->BSIM4wegidl; if (!model->BSIM4wrgislGiven) /* v4.7 New GIDL/GISL */ model->BSIM4wrgisl = model->BSIM4wrgidl; if (!model->BSIM4wkgislGiven) /* v4.7 New GIDL/GISL */ model->BSIM4wkgisl = model->BSIM4wkgidl; if (!model->BSIM4wfgislGiven) /* v4.7 New GIDL/GISL */ model->BSIM4wfgisl = model->BSIM4wfgidl; if (!model->BSIM4waigcGiven) model->BSIM4waigc = 0.0; if (!model->BSIM4wbigcGiven) model->BSIM4wbigc = 0.0; if (!model->BSIM4wcigcGiven) model->BSIM4wcigc = 0.0; if (!model->BSIM4aigsdGiven && (model->BSIM4aigsGiven || model->BSIM4aigdGiven)) { if (!model->BSIM4waigsGiven) model->BSIM4waigs = 0.0; if (!model->BSIM4waigdGiven) model->BSIM4waigd = 0.0; } else { if (!model->BSIM4waigsdGiven) model->BSIM4waigsd = 0.0; model->BSIM4waigs = model->BSIM4waigd = model->BSIM4waigsd; } if (!model->BSIM4bigsdGiven && (model->BSIM4bigsGiven || model->BSIM4bigdGiven)) { if (!model->BSIM4wbigsGiven) model->BSIM4wbigs = 0.0; if (!model->BSIM4wbigdGiven) model->BSIM4wbigd = 0.0; } else { if (!model->BSIM4wbigsdGiven) model->BSIM4wbigsd = 0.0; model->BSIM4wbigs = model->BSIM4wbigd = model->BSIM4wbigsd; } if (!model->BSIM4cigsdGiven && (model->BSIM4cigsGiven || model->BSIM4cigdGiven)) { if (!model->BSIM4wcigsGiven) model->BSIM4wcigs = 0.0; if (!model->BSIM4wcigdGiven) model->BSIM4wcigd = 0.0; } else { if (!model->BSIM4wcigsdGiven) model->BSIM4wcigsd = 0.0; model->BSIM4wcigs = model->BSIM4wcigd = model->BSIM4wcigsd; } if (!model->BSIM4waigbaccGiven) model->BSIM4waigbacc = 0.0; if (!model->BSIM4wbigbaccGiven) model->BSIM4wbigbacc = 0.0; if (!model->BSIM4wcigbaccGiven) model->BSIM4wcigbacc = 0.0; if (!model->BSIM4waigbinvGiven) model->BSIM4waigbinv = 0.0; if (!model->BSIM4wbigbinvGiven) model->BSIM4wbigbinv = 0.0; if (!model->BSIM4wcigbinvGiven) model->BSIM4wcigbinv = 0.0; if (!model->BSIM4wnigcGiven) model->BSIM4wnigc = 0.0; if (!model->BSIM4wnigbinvGiven) model->BSIM4wnigbinv = 0.0; if (!model->BSIM4wnigbaccGiven) model->BSIM4wnigbacc = 0.0; if (!model->BSIM4wntoxGiven) model->BSIM4wntox = 0.0; if (!model->BSIM4weigbinvGiven) model->BSIM4weigbinv = 0.0; if (!model->BSIM4wpigcdGiven) model->BSIM4wpigcd = 0.0; if (!model->BSIM4wpoxedgeGiven) model->BSIM4wpoxedge = 0.0; if (!model->BSIM4wxrcrg1Given) model->BSIM4wxrcrg1 = 0.0; if (!model->BSIM4wxrcrg2Given) model->BSIM4wxrcrg2 = 0.0; if (!model->BSIM4weuGiven) model->BSIM4weu = 0.0; if (!model->BSIM4wucsGiven) model->BSIM4wucs = 0.0; if (!model->BSIM4wvfbGiven) model->BSIM4wvfb = 0.0; if (!model->BSIM4wlambdaGiven) model->BSIM4wlambda = 0.0; if (!model->BSIM4wvtlGiven) model->BSIM4wvtl = 0.0; if (!model->BSIM4wxnGiven) model->BSIM4wxn = 0.0; if (!model->BSIM4wvfbsdoffGiven) model->BSIM4wvfbsdoff = 0.0; if (!model->BSIM4wtvfbsdoffGiven) model->BSIM4wtvfbsdoff = 0.0; if (!model->BSIM4wtvoffGiven) model->BSIM4wtvoff = 0.0; if (!model->BSIM4wtnfactorGiven) /* v4.7 temp dep of leakage current */ model->BSIM4wtnfactor = 0.0; if (!model->BSIM4wteta0Given) /* v4.7 temp dep of leakage current */ model->BSIM4wteta0 = 0.0; if (!model->BSIM4wtvoffcvGiven) /* v4.7 temp dep of leakage current */ model->BSIM4wtvoffcv = 0.0; if (!model->BSIM4wcgslGiven) model->BSIM4wcgsl = 0.0; if (!model->BSIM4wcgdlGiven) model->BSIM4wcgdl = 0.0; if (!model->BSIM4wckappasGiven) model->BSIM4wckappas = 0.0; if (!model->BSIM4wckappadGiven) model->BSIM4wckappad = 0.0; if (!model->BSIM4wcfGiven) model->BSIM4wcf = 0.0; if (!model->BSIM4wclcGiven) model->BSIM4wclc = 0.0; if (!model->BSIM4wcleGiven) model->BSIM4wcle = 0.0; if (!model->BSIM4wvfbcvGiven) model->BSIM4wvfbcv = 0.0; if (!model->BSIM4wacdeGiven) model->BSIM4wacde = 0.0; if (!model->BSIM4wmoinGiven) model->BSIM4wmoin = 0.0; if (!model->BSIM4wnoffGiven) model->BSIM4wnoff = 0.0; if (!model->BSIM4wvoffcvGiven) model->BSIM4wvoffcv = 0.0; /* Cross-term dependence */ if (!model->BSIM4pcdscGiven) model->BSIM4pcdsc = 0.0; if (!model->BSIM4pcdscbGiven) model->BSIM4pcdscb = 0.0; if (!model->BSIM4pcdscdGiven) model->BSIM4pcdscd = 0.0; if (!model->BSIM4pcitGiven) model->BSIM4pcit = 0.0; if (!model->BSIM4pnfactorGiven) model->BSIM4pnfactor = 0.0; if (!model->BSIM4pxjGiven) model->BSIM4pxj = 0.0; if (!model->BSIM4pvsatGiven) model->BSIM4pvsat = 0.0; if (!model->BSIM4patGiven) model->BSIM4pat = 0.0; if (!model->BSIM4pa0Given) model->BSIM4pa0 = 0.0; if (!model->BSIM4pagsGiven) model->BSIM4pags = 0.0; if (!model->BSIM4pa1Given) model->BSIM4pa1 = 0.0; if (!model->BSIM4pa2Given) model->BSIM4pa2 = 0.0; if (!model->BSIM4pketaGiven) model->BSIM4pketa = 0.0; if (!model->BSIM4pnsubGiven) model->BSIM4pnsub = 0.0; if (!model->BSIM4pndepGiven) model->BSIM4pndep = 0.0; if (!model->BSIM4pnsdGiven) model->BSIM4pnsd = 0.0; if (!model->BSIM4pphinGiven) model->BSIM4pphin = 0.0; if (!model->BSIM4pngateGiven) model->BSIM4pngate = 0.0; if (!model->BSIM4pvbmGiven) model->BSIM4pvbm = 0.0; if (!model->BSIM4pxtGiven) model->BSIM4pxt = 0.0; if (!model->BSIM4pk1Given) model->BSIM4pk1 = 0.0; if (!model->BSIM4pkt1Given) model->BSIM4pkt1 = 0.0; if (!model->BSIM4pkt1lGiven) model->BSIM4pkt1l = 0.0; if (!model->BSIM4pk2Given) model->BSIM4pk2 = 0.0; if (!model->BSIM4pkt2Given) model->BSIM4pkt2 = 0.0; if (!model->BSIM4pk3Given) model->BSIM4pk3 = 0.0; if (!model->BSIM4pk3bGiven) model->BSIM4pk3b = 0.0; if (!model->BSIM4pw0Given) model->BSIM4pw0 = 0.0; if (!model->BSIM4plpe0Given) model->BSIM4plpe0 = 0.0; if (!model->BSIM4plpebGiven) model->BSIM4plpeb = 0.0; if (!model->BSIM4pdvtp0Given) model->BSIM4pdvtp0 = 0.0; if (!model->BSIM4pdvtp1Given) model->BSIM4pdvtp1 = 0.0; if (!model->BSIM4pdvtp2Given) /* New DIBL/Rout */ model->BSIM4pdvtp2 = 0.0; if (!model->BSIM4pdvtp3Given) model->BSIM4pdvtp3 = 0.0; if (!model->BSIM4pdvtp4Given) model->BSIM4pdvtp4 = 0.0; if (!model->BSIM4pdvtp5Given) model->BSIM4pdvtp5 = 0.0; if (!model->BSIM4pdvt0Given) model->BSIM4pdvt0 = 0.0; if (!model->BSIM4pdvt1Given) model->BSIM4pdvt1 = 0.0; if (!model->BSIM4pdvt2Given) model->BSIM4pdvt2 = 0.0; if (!model->BSIM4pdvt0wGiven) model->BSIM4pdvt0w = 0.0; if (!model->BSIM4pdvt1wGiven) model->BSIM4pdvt1w = 0.0; if (!model->BSIM4pdvt2wGiven) model->BSIM4pdvt2w = 0.0; if (!model->BSIM4pdroutGiven) model->BSIM4pdrout = 0.0; if (!model->BSIM4pdsubGiven) model->BSIM4pdsub = 0.0; if (!model->BSIM4pvth0Given) model->BSIM4pvth0 = 0.0; if (!model->BSIM4puaGiven) model->BSIM4pua = 0.0; if (!model->BSIM4pua1Given) model->BSIM4pua1 = 0.0; if (!model->BSIM4pubGiven) model->BSIM4pub = 0.0; if (!model->BSIM4pub1Given) model->BSIM4pub1 = 0.0; if (!model->BSIM4pucGiven) model->BSIM4puc = 0.0; if (!model->BSIM4puc1Given) model->BSIM4puc1 = 0.0; if (!model->BSIM4pudGiven) model->BSIM4pud = 0.0; if (!model->BSIM4pud1Given) model->BSIM4pud1 = 0.0; if (!model->BSIM4pupGiven) model->BSIM4pup = 0.0; if (!model->BSIM4plpGiven) model->BSIM4plp = 0.0; if (!model->BSIM4pu0Given) model->BSIM4pu0 = 0.0; if (!model->BSIM4puteGiven) model->BSIM4pute = 0.0; if (!model->BSIM4pucsteGiven) model->BSIM4pucste = 0.0; if (!model->BSIM4pvoffGiven) model->BSIM4pvoff = 0.0; if (!model->BSIM4pminvGiven) model->BSIM4pminv = 0.0; if (!model->BSIM4pminvcvGiven) model->BSIM4pminvcv = 0.0; if (!model->BSIM4pfproutGiven) model->BSIM4pfprout = 0.0; if (!model->BSIM4ppditsGiven) model->BSIM4ppdits = 0.0; if (!model->BSIM4ppditsdGiven) model->BSIM4ppditsd = 0.0; if (!model->BSIM4pdeltaGiven) model->BSIM4pdelta = 0.0; if (!model->BSIM4prdswGiven) model->BSIM4prdsw = 0.0; if (!model->BSIM4prdwGiven) model->BSIM4prdw = 0.0; if (!model->BSIM4prswGiven) model->BSIM4prsw = 0.0; if (!model->BSIM4pprwbGiven) model->BSIM4pprwb = 0.0; if (!model->BSIM4pprwgGiven) model->BSIM4pprwg = 0.0; if (!model->BSIM4pprtGiven) model->BSIM4pprt = 0.0; if (!model->BSIM4peta0Given) model->BSIM4peta0 = 0.0; if (!model->BSIM4petabGiven) model->BSIM4petab = 0.0; if (!model->BSIM4ppclmGiven) model->BSIM4ppclm = 0.0; if (!model->BSIM4ppdibl1Given) model->BSIM4ppdibl1 = 0.0; if (!model->BSIM4ppdibl2Given) model->BSIM4ppdibl2 = 0.0; if (!model->BSIM4ppdiblbGiven) model->BSIM4ppdiblb = 0.0; if (!model->BSIM4ppscbe1Given) model->BSIM4ppscbe1 = 0.0; if (!model->BSIM4ppscbe2Given) model->BSIM4ppscbe2 = 0.0; if (!model->BSIM4ppvagGiven) model->BSIM4ppvag = 0.0; if (!model->BSIM4pwrGiven) model->BSIM4pwr = 0.0; if (!model->BSIM4pdwgGiven) model->BSIM4pdwg = 0.0; if (!model->BSIM4pdwbGiven) model->BSIM4pdwb = 0.0; if (!model->BSIM4pb0Given) model->BSIM4pb0 = 0.0; if (!model->BSIM4pb1Given) model->BSIM4pb1 = 0.0; if (!model->BSIM4palpha0Given) model->BSIM4palpha0 = 0.0; if (!model->BSIM4palpha1Given) model->BSIM4palpha1 = 0.0; if (!model->BSIM4pbeta0Given) model->BSIM4pbeta0 = 0.0; if (!model->BSIM4pagidlGiven) model->BSIM4pagidl = 0.0; if (!model->BSIM4pbgidlGiven) model->BSIM4pbgidl = 0.0; if (!model->BSIM4pcgidlGiven) model->BSIM4pcgidl = 0.0; if (!model->BSIM4pegidlGiven) model->BSIM4pegidl = 0.0; if (!model->BSIM4prgidlGiven) /* v4.7 New GIDL/GISL */ model->BSIM4prgidl = 0.0; if (!model->BSIM4pkgidlGiven) /* v4.7 New GIDL/GISL */ model->BSIM4pkgidl = 0.0; if (!model->BSIM4pfgidlGiven) /* v4.7 New GIDL/GISL */ model->BSIM4pfgidl = 0.0; /*if (!model->BSIM4pagislGiven) { if (model->BSIM4pagidlGiven) model->BSIM4pagisl = model->BSIM4pagidl; else model->BSIM4pagisl = 0.0; } if (!model->BSIM4pbgislGiven) { if (model->BSIM4pbgidlGiven) model->BSIM4pbgisl = model->BSIM4pbgidl; else model->BSIM4pbgisl = 0.0; } if (!model->BSIM4pcgislGiven) { if (model->BSIM4pcgidlGiven) model->BSIM4pcgisl = model->BSIM4pcgidl; else model->BSIM4pcgisl = 0.0; } if (!model->BSIM4pegislGiven) { if (model->BSIM4pegidlGiven) model->BSIM4pegisl = model->BSIM4pegidl; else model->BSIM4pegisl = 0.0; }*/ /*if (!model->BSIM4prgislGiven) { if (model->BSIM4prgidlGiven) model->BSIM4prgisl = model->BSIM4prgidl; } if (!model->BSIM4pkgislGiven) { if (model->BSIM4pkgidlGiven) model->BSIM4pkgisl = model->BSIM4pkgidl; } if (!model->BSIM4pfgislGiven) { if (model->BSIM4pfgidlGiven) model->BSIM4pfgisl = model->BSIM4pfgidl; }*/ /*Default value of pagisl, pbgisl, pcgisl, pegisl, prgisl, pkgisl, and pfgisl are set as follows */ if (!model->BSIM4pagislGiven) model->BSIM4pagisl = model->BSIM4pagidl; if (!model->BSIM4pbgislGiven) model->BSIM4pbgisl = model->BSIM4pbgidl; if (!model->BSIM4pcgislGiven) model->BSIM4pcgisl = model->BSIM4pcgidl; if (!model->BSIM4pegislGiven) model->BSIM4pegisl = model->BSIM4pegidl; if (!model->BSIM4prgislGiven) /* v4.7 New GIDL/GISL */ model->BSIM4prgisl = model->BSIM4prgidl; if (!model->BSIM4pkgislGiven) /* v4.7 New GIDL/GISL */ model->BSIM4pkgisl = model->BSIM4pkgidl; if (!model->BSIM4pfgislGiven) /* v4.7 New GIDL/GISL */ model->BSIM4pfgisl = model->BSIM4pfgidl; if (!model->BSIM4paigcGiven) model->BSIM4paigc = 0.0; if (!model->BSIM4pbigcGiven) model->BSIM4pbigc = 0.0; if (!model->BSIM4pcigcGiven) model->BSIM4pcigc = 0.0; if (!model->BSIM4aigsdGiven && (model->BSIM4aigsGiven || model->BSIM4aigdGiven)) { if (!model->BSIM4paigsGiven) model->BSIM4paigs = 0.0; if (!model->BSIM4paigdGiven) model->BSIM4paigd = 0.0; } else { if (!model->BSIM4paigsdGiven) model->BSIM4paigsd = 0.0; model->BSIM4paigs = model->BSIM4paigd = model->BSIM4paigsd; } if (!model->BSIM4bigsdGiven && (model->BSIM4bigsGiven || model->BSIM4bigdGiven)) { if (!model->BSIM4pbigsGiven) model->BSIM4pbigs = 0.0; if (!model->BSIM4pbigdGiven) model->BSIM4pbigd = 0.0; } else { if (!model->BSIM4pbigsdGiven) model->BSIM4pbigsd = 0.0; model->BSIM4pbigs = model->BSIM4pbigd = model->BSIM4pbigsd; } if (!model->BSIM4cigsdGiven && (model->BSIM4cigsGiven || model->BSIM4cigdGiven)) { if (!model->BSIM4pcigsGiven) model->BSIM4pcigs = 0.0; if (!model->BSIM4pcigdGiven) model->BSIM4pcigd = 0.0; } else { if (!model->BSIM4pcigsdGiven) model->BSIM4pcigsd = 0.0; model->BSIM4pcigs = model->BSIM4pcigd = model->BSIM4pcigsd; } if (!model->BSIM4paigbaccGiven) model->BSIM4paigbacc = 0.0; if (!model->BSIM4pbigbaccGiven) model->BSIM4pbigbacc = 0.0; if (!model->BSIM4pcigbaccGiven) model->BSIM4pcigbacc = 0.0; if (!model->BSIM4paigbinvGiven) model->BSIM4paigbinv = 0.0; if (!model->BSIM4pbigbinvGiven) model->BSIM4pbigbinv = 0.0; if (!model->BSIM4pcigbinvGiven) model->BSIM4pcigbinv = 0.0; if (!model->BSIM4pnigcGiven) model->BSIM4pnigc = 0.0; if (!model->BSIM4pnigbinvGiven) model->BSIM4pnigbinv = 0.0; if (!model->BSIM4pnigbaccGiven) model->BSIM4pnigbacc = 0.0; if (!model->BSIM4pntoxGiven) model->BSIM4pntox = 0.0; if (!model->BSIM4peigbinvGiven) model->BSIM4peigbinv = 0.0; if (!model->BSIM4ppigcdGiven) model->BSIM4ppigcd = 0.0; if (!model->BSIM4ppoxedgeGiven) model->BSIM4ppoxedge = 0.0; if (!model->BSIM4pxrcrg1Given) model->BSIM4pxrcrg1 = 0.0; if (!model->BSIM4pxrcrg2Given) model->BSIM4pxrcrg2 = 0.0; if (!model->BSIM4peuGiven) model->BSIM4peu = 0.0; if (!model->BSIM4pucsGiven) model->BSIM4pucs = 0.0; if (!model->BSIM4pvfbGiven) model->BSIM4pvfb = 0.0; if (!model->BSIM4plambdaGiven) model->BSIM4plambda = 0.0; if (!model->BSIM4pvtlGiven) model->BSIM4pvtl = 0.0; if (!model->BSIM4pxnGiven) model->BSIM4pxn = 0.0; if (!model->BSIM4pvfbsdoffGiven) model->BSIM4pvfbsdoff = 0.0; if (!model->BSIM4ptvfbsdoffGiven) model->BSIM4ptvfbsdoff = 0.0; if (!model->BSIM4ptvoffGiven) model->BSIM4ptvoff = 0.0; if (!model->BSIM4ptnfactorGiven) /* v4.7 temp dep of leakage current */ model->BSIM4ptnfactor = 0.0; if (!model->BSIM4pteta0Given) /* v4.7 temp dep of leakage current */ model->BSIM4pteta0 = 0.0; if (!model->BSIM4ptvoffcvGiven) /* v4.7 temp dep of leakage current */ model->BSIM4ptvoffcv = 0.0; if (!model->BSIM4pcgslGiven) model->BSIM4pcgsl = 0.0; if (!model->BSIM4pcgdlGiven) model->BSIM4pcgdl = 0.0; if (!model->BSIM4pckappasGiven) model->BSIM4pckappas = 0.0; if (!model->BSIM4pckappadGiven) model->BSIM4pckappad = 0.0; if (!model->BSIM4pcfGiven) model->BSIM4pcf = 0.0; if (!model->BSIM4pclcGiven) model->BSIM4pclc = 0.0; if (!model->BSIM4pcleGiven) model->BSIM4pcle = 0.0; if (!model->BSIM4pvfbcvGiven) model->BSIM4pvfbcv = 0.0; if (!model->BSIM4pacdeGiven) model->BSIM4pacde = 0.0; if (!model->BSIM4pmoinGiven) model->BSIM4pmoin = 0.0; if (!model->BSIM4pnoffGiven) model->BSIM4pnoff = 0.0; if (!model->BSIM4pvoffcvGiven) model->BSIM4pvoffcv = 0.0; if (!model->BSIM4gamma1Given) model->BSIM4gamma1 = 0.0; if (!model->BSIM4lgamma1Given) model->BSIM4lgamma1 = 0.0; if (!model->BSIM4wgamma1Given) model->BSIM4wgamma1 = 0.0; if (!model->BSIM4pgamma1Given) model->BSIM4pgamma1 = 0.0; if (!model->BSIM4gamma2Given) model->BSIM4gamma2 = 0.0; if (!model->BSIM4lgamma2Given) model->BSIM4lgamma2 = 0.0; if (!model->BSIM4wgamma2Given) model->BSIM4wgamma2 = 0.0; if (!model->BSIM4pgamma2Given) model->BSIM4pgamma2 = 0.0; if (!model->BSIM4vbxGiven) model->BSIM4vbx = 0.0; if (!model->BSIM4lvbxGiven) model->BSIM4lvbx = 0.0; if (!model->BSIM4wvbxGiven) model->BSIM4wvbx = 0.0; if (!model->BSIM4pvbxGiven) model->BSIM4pvbx = 0.0; /* unit degree celcius */ if (!model->BSIM4tnomGiven) model->BSIM4tnom = ckt->CKTnomTemp; if (!model->BSIM4LintGiven) model->BSIM4Lint = 0.0; if (!model->BSIM4LlGiven) model->BSIM4Ll = 0.0; if (!model->BSIM4LlcGiven) model->BSIM4Llc = model->BSIM4Ll; if (!model->BSIM4LlnGiven) model->BSIM4Lln = 1.0; if (!model->BSIM4LwGiven) model->BSIM4Lw = 0.0; if (!model->BSIM4LwcGiven) model->BSIM4Lwc = model->BSIM4Lw; if (!model->BSIM4LwnGiven) model->BSIM4Lwn = 1.0; if (!model->BSIM4LwlGiven) model->BSIM4Lwl = 0.0; if (!model->BSIM4LwlcGiven) model->BSIM4Lwlc = model->BSIM4Lwl; if (!model->BSIM4LminGiven) model->BSIM4Lmin = 0.0; if (!model->BSIM4LmaxGiven) model->BSIM4Lmax = 1.0; if (!model->BSIM4WintGiven) model->BSIM4Wint = 0.0; if (!model->BSIM4WlGiven) model->BSIM4Wl = 0.0; if (!model->BSIM4WlcGiven) model->BSIM4Wlc = model->BSIM4Wl; if (!model->BSIM4WlnGiven) model->BSIM4Wln = 1.0; if (!model->BSIM4WwGiven) model->BSIM4Ww = 0.0; if (!model->BSIM4WwcGiven) model->BSIM4Wwc = model->BSIM4Ww; if (!model->BSIM4WwnGiven) model->BSIM4Wwn = 1.0; if (!model->BSIM4WwlGiven) model->BSIM4Wwl = 0.0; if (!model->BSIM4WwlcGiven) model->BSIM4Wwlc = model->BSIM4Wwl; if (!model->BSIM4WminGiven) model->BSIM4Wmin = 0.0; if (!model->BSIM4WmaxGiven) model->BSIM4Wmax = 1.0; if (!model->BSIM4dwcGiven) model->BSIM4dwc = model->BSIM4Wint; if (!model->BSIM4dlcGiven) model->BSIM4dlc = model->BSIM4Lint; if (!model->BSIM4xlGiven) model->BSIM4xl = 0.0; if (!model->BSIM4xwGiven) model->BSIM4xw = 0.0; if (!model->BSIM4dlcigGiven) model->BSIM4dlcig = model->BSIM4Lint; if (!model->BSIM4dlcigdGiven) { if (model->BSIM4dlcigGiven) model->BSIM4dlcigd = model->BSIM4dlcig; else model->BSIM4dlcigd = model->BSIM4Lint; } if (!model->BSIM4dwjGiven) model->BSIM4dwj = model->BSIM4dwc; if (!model->BSIM4cfGiven) model->BSIM4cf = 2.0 * model->BSIM4epsrox * EPS0 / PI * log(1.0 + 0.4e-6 / model->BSIM4toxe); if (!model->BSIM4xpartGiven) model->BSIM4xpart = 0.0; if (!model->BSIM4sheetResistanceGiven) model->BSIM4sheetResistance = 0.0; if (!model->BSIM4SunitAreaJctCapGiven) model->BSIM4SunitAreaJctCap = 5.0E-4; if (!model->BSIM4DunitAreaJctCapGiven) model->BSIM4DunitAreaJctCap = model->BSIM4SunitAreaJctCap; if (!model->BSIM4SunitLengthSidewallJctCapGiven) model->BSIM4SunitLengthSidewallJctCap = 5.0E-10; if (!model->BSIM4DunitLengthSidewallJctCapGiven) model->BSIM4DunitLengthSidewallJctCap = model->BSIM4SunitLengthSidewallJctCap; if (!model->BSIM4SunitLengthGateSidewallJctCapGiven) model->BSIM4SunitLengthGateSidewallJctCap = model->BSIM4SunitLengthSidewallJctCap ; if (!model->BSIM4DunitLengthGateSidewallJctCapGiven) model->BSIM4DunitLengthGateSidewallJctCap = model->BSIM4SunitLengthGateSidewallJctCap; if (!model->BSIM4SjctSatCurDensityGiven) model->BSIM4SjctSatCurDensity = 1.0E-4; if (!model->BSIM4DjctSatCurDensityGiven) model->BSIM4DjctSatCurDensity = model->BSIM4SjctSatCurDensity; if (!model->BSIM4SjctSidewallSatCurDensityGiven) model->BSIM4SjctSidewallSatCurDensity = 0.0; if (!model->BSIM4DjctSidewallSatCurDensityGiven) model->BSIM4DjctSidewallSatCurDensity = model->BSIM4SjctSidewallSatCurDensity; if (!model->BSIM4SjctGateSidewallSatCurDensityGiven) model->BSIM4SjctGateSidewallSatCurDensity = 0.0; if (!model->BSIM4DjctGateSidewallSatCurDensityGiven) model->BSIM4DjctGateSidewallSatCurDensity = model->BSIM4SjctGateSidewallSatCurDensity; if (!model->BSIM4SbulkJctPotentialGiven) model->BSIM4SbulkJctPotential = 1.0; if (!model->BSIM4DbulkJctPotentialGiven) model->BSIM4DbulkJctPotential = model->BSIM4SbulkJctPotential; if (!model->BSIM4SsidewallJctPotentialGiven) model->BSIM4SsidewallJctPotential = 1.0; if (!model->BSIM4DsidewallJctPotentialGiven) model->BSIM4DsidewallJctPotential = model->BSIM4SsidewallJctPotential; if (!model->BSIM4SGatesidewallJctPotentialGiven) model->BSIM4SGatesidewallJctPotential = model->BSIM4SsidewallJctPotential; if (!model->BSIM4DGatesidewallJctPotentialGiven) model->BSIM4DGatesidewallJctPotential = model->BSIM4SGatesidewallJctPotential; if (!model->BSIM4SbulkJctBotGradingCoeffGiven) model->BSIM4SbulkJctBotGradingCoeff = 0.5; if (!model->BSIM4DbulkJctBotGradingCoeffGiven) model->BSIM4DbulkJctBotGradingCoeff = model->BSIM4SbulkJctBotGradingCoeff; if (!model->BSIM4SbulkJctSideGradingCoeffGiven) model->BSIM4SbulkJctSideGradingCoeff = 0.33; if (!model->BSIM4DbulkJctSideGradingCoeffGiven) model->BSIM4DbulkJctSideGradingCoeff = model->BSIM4SbulkJctSideGradingCoeff; if (!model->BSIM4SbulkJctGateSideGradingCoeffGiven) model->BSIM4SbulkJctGateSideGradingCoeff = model->BSIM4SbulkJctSideGradingCoeff; if (!model->BSIM4DbulkJctGateSideGradingCoeffGiven) model->BSIM4DbulkJctGateSideGradingCoeff = model->BSIM4SbulkJctGateSideGradingCoeff; if (!model->BSIM4SjctEmissionCoeffGiven) model->BSIM4SjctEmissionCoeff = 1.0; if (!model->BSIM4DjctEmissionCoeffGiven) model->BSIM4DjctEmissionCoeff = model->BSIM4SjctEmissionCoeff; if (!model->BSIM4SjctTempExponentGiven) model->BSIM4SjctTempExponent = 3.0; if (!model->BSIM4DjctTempExponentGiven) model->BSIM4DjctTempExponent = model->BSIM4SjctTempExponent; if (!model->BSIM4jtssGiven) model->BSIM4jtss = 0.0; if (!model->BSIM4jtsdGiven) model->BSIM4jtsd = model->BSIM4jtss; if (!model->BSIM4jtsswsGiven) model->BSIM4jtssws = 0.0; if (!model->BSIM4jtsswdGiven) model->BSIM4jtsswd = model->BSIM4jtssws; if (!model->BSIM4jtsswgsGiven) model->BSIM4jtsswgs = 0.0; if (!model->BSIM4jtsswgdGiven) model->BSIM4jtsswgd = model->BSIM4jtsswgs; if (!model->BSIM4jtweffGiven) model->BSIM4jtweff = 0.0; if (!model->BSIM4njtsGiven) model->BSIM4njts = 20.0; if (!model->BSIM4njtsswGiven) model->BSIM4njtssw = 20.0; if (!model->BSIM4njtsswgGiven) model->BSIM4njtsswg = 20.0; if (!model->BSIM4njtsdGiven) { if (model->BSIM4njtsGiven) model->BSIM4njtsd = model->BSIM4njts; else model->BSIM4njtsd = 20.0; } if (!model->BSIM4njtsswdGiven) { if (model->BSIM4njtsswGiven) model->BSIM4njtsswd = model->BSIM4njtssw; else model->BSIM4njtsswd = 20.0; } if (!model->BSIM4njtsswgdGiven) { if (model->BSIM4njtsswgGiven) model->BSIM4njtsswgd = model->BSIM4njtsswg; else model->BSIM4njtsswgd = 20.0; } if (!model->BSIM4xtssGiven) model->BSIM4xtss = 0.02; if (!model->BSIM4xtsdGiven) model->BSIM4xtsd = model->BSIM4xtss; if (!model->BSIM4xtsswsGiven) model->BSIM4xtssws = 0.02; if (!model->BSIM4xtsswdGiven) model->BSIM4xtsswd = model->BSIM4xtssws; if (!model->BSIM4xtsswgsGiven) model->BSIM4xtsswgs = 0.02; if (!model->BSIM4xtsswgdGiven) model->BSIM4xtsswgd = model->BSIM4xtsswgs; if (!model->BSIM4tnjtsGiven) model->BSIM4tnjts = 0.0; if (!model->BSIM4tnjtsswGiven) model->BSIM4tnjtssw = 0.0; if (!model->BSIM4tnjtsswgGiven) model->BSIM4tnjtsswg = 0.0; if (!model->BSIM4tnjtsdGiven) { if (model->BSIM4tnjtsGiven) model->BSIM4tnjtsd = model->BSIM4tnjts; else model->BSIM4tnjtsd = 0.0; } if (!model->BSIM4tnjtsswdGiven) { if (model->BSIM4tnjtsswGiven) model->BSIM4tnjtsswd = model->BSIM4tnjtssw; else model->BSIM4tnjtsswd = 0.0; } if (!model->BSIM4tnjtsswgdGiven) { if (model->BSIM4tnjtsswgGiven) model->BSIM4tnjtsswgd = model->BSIM4tnjtsswg; else model->BSIM4tnjtsswgd = 0.0; } if (!model->BSIM4vtssGiven) model->BSIM4vtss = 10.0; if (!model->BSIM4vtsdGiven) model->BSIM4vtsd = model->BSIM4vtss; if (!model->BSIM4vtsswsGiven) model->BSIM4vtssws = 10.0; if (!model->BSIM4vtsswdGiven) model->BSIM4vtsswd = model->BSIM4vtssws; if (!model->BSIM4vtsswgsGiven) model->BSIM4vtsswgs = 10.0; if (!model->BSIM4vtsswgdGiven) model->BSIM4vtsswgd = model->BSIM4vtsswgs; if (!model->BSIM4oxideTrapDensityAGiven) { if (model->BSIM4type == NMOS) model->BSIM4oxideTrapDensityA = 6.25e41; else model->BSIM4oxideTrapDensityA= 6.188e40; } if (!model->BSIM4oxideTrapDensityBGiven) { if (model->BSIM4type == NMOS) model->BSIM4oxideTrapDensityB = 3.125e26; else model->BSIM4oxideTrapDensityB = 1.5e25; } if (!model->BSIM4oxideTrapDensityCGiven) model->BSIM4oxideTrapDensityC = 8.75e9; if (!model->BSIM4emGiven) model->BSIM4em = 4.1e7; /* V/m */ if (!model->BSIM4efGiven) model->BSIM4ef = 1.0; if (!model->BSIM4afGiven) model->BSIM4af = 1.0; if (!model->BSIM4kfGiven) model->BSIM4kf = 0.0; if (!model->BSIM4vgsMaxGiven) model->BSIM4vgsMax = 1e99; if (!model->BSIM4vgdMaxGiven) model->BSIM4vgdMax = 1e99; if (!model->BSIM4vgbMaxGiven) model->BSIM4vgbMax = 1e99; if (!model->BSIM4vdsMaxGiven) model->BSIM4vdsMax = 1e99; if (!model->BSIM4vbsMaxGiven) model->BSIM4vbsMax = 1e99; if (!model->BSIM4vbdMaxGiven) model->BSIM4vbdMax = 1e99; if (!model->BSIM4vgsrMaxGiven) model->BSIM4vgsrMax = 1e99; if (!model->BSIM4vgdrMaxGiven) model->BSIM4vgdrMax = 1e99; if (!model->BSIM4vgbrMaxGiven) model->BSIM4vgbrMax = 1e99; if (!model->BSIM4vbsrMaxGiven) model->BSIM4vbsrMax = 1e99; if (!model->BSIM4vbdrMaxGiven) model->BSIM4vbdrMax = 1e99; /* stress effect */ if (!model->BSIM4sarefGiven) model->BSIM4saref = 1e-6; /* m */ if (!model->BSIM4sbrefGiven) model->BSIM4sbref = 1e-6; /* m */ if (!model->BSIM4wlodGiven) model->BSIM4wlod = 0; /* m */ if (!model->BSIM4ku0Given) model->BSIM4ku0 = 0; /* 1/m */ if (!model->BSIM4kvsatGiven) model->BSIM4kvsat = 0; if (!model->BSIM4kvth0Given) /* m */ model->BSIM4kvth0 = 0; if (!model->BSIM4tku0Given) model->BSIM4tku0 = 0; if (!model->BSIM4llodku0Given) model->BSIM4llodku0 = 0; if (!model->BSIM4wlodku0Given) model->BSIM4wlodku0 = 0; if (!model->BSIM4llodvthGiven) model->BSIM4llodvth = 0; if (!model->BSIM4wlodvthGiven) model->BSIM4wlodvth = 0; if (!model->BSIM4lku0Given) model->BSIM4lku0 = 0; if (!model->BSIM4wku0Given) model->BSIM4wku0 = 0; if (!model->BSIM4pku0Given) model->BSIM4pku0 = 0; if (!model->BSIM4lkvth0Given) model->BSIM4lkvth0 = 0; if (!model->BSIM4wkvth0Given) model->BSIM4wkvth0 = 0; if (!model->BSIM4pkvth0Given) model->BSIM4pkvth0 = 0; if (!model->BSIM4stk2Given) model->BSIM4stk2 = 0; if (!model->BSIM4lodk2Given) model->BSIM4lodk2 = 1.0; if (!model->BSIM4steta0Given) model->BSIM4steta0 = 0; if (!model->BSIM4lodeta0Given) model->BSIM4lodeta0 = 1.0; /* Well Proximity Effect */ if (!model->BSIM4webGiven) model->BSIM4web = 0.0; if (!model->BSIM4wecGiven) model->BSIM4wec = 0.0; if (!model->BSIM4kvth0weGiven) model->BSIM4kvth0we = 0.0; if (!model->BSIM4k2weGiven) model->BSIM4k2we = 0.0; if (!model->BSIM4ku0weGiven) model->BSIM4ku0we = 0.0; if (!model->BSIM4screfGiven) model->BSIM4scref = 1.0E-6; /* m */ if (!model->BSIM4wpemodGiven) model->BSIM4wpemod = 0; else if ((model->BSIM4wpemod != 0) && (model->BSIM4wpemod != 1)) { model->BSIM4wpemod = 0; printf("Warning: wpemod has been set to its default value: 0.\n"); } if (!model->BSIM4lkvth0weGiven) model->BSIM4lkvth0we = 0; if (!model->BSIM4lk2weGiven) model->BSIM4lk2we = 0; if (!model->BSIM4lku0weGiven) model->BSIM4lku0we = 0; if (!model->BSIM4wkvth0weGiven) model->BSIM4wkvth0we = 0; if (!model->BSIM4wk2weGiven) model->BSIM4wk2we = 0; if (!model->BSIM4wku0weGiven) model->BSIM4wku0we = 0; if (!model->BSIM4pkvth0weGiven) model->BSIM4pkvth0we = 0; if (!model->BSIM4pk2weGiven) model->BSIM4pk2we = 0; if (!model->BSIM4pku0weGiven) model->BSIM4pku0we = 0; DMCGeff = model->BSIM4dmcg - model->BSIM4dmcgt; DMCIeff = model->BSIM4dmci; DMDGeff = model->BSIM4dmdg - model->BSIM4dmcgt; /* * End processing models and begin to loop * through all the instances of the model */ for (here = BSIM4instances(model); here != NULL ; here=BSIM4nextInstance(here)) { /* allocate a chunk of the state vector */ here->BSIM4states = *states; *states += BSIM4numStates; /* perform the parameter defaulting */ if (!here->BSIM4lGiven) here->BSIM4l = 5.0e-6; if (!here->BSIM4wGiven) here->BSIM4w = 5.0e-6; if (!here->BSIM4mGiven) here->BSIM4m = 1.0; if (!here->BSIM4nfGiven) here->BSIM4nf = 1.0; if (!here->BSIM4minGiven) here->BSIM4min = 0; /* integer */ if (!here->BSIM4icVDSGiven) here->BSIM4icVDS = 0.0; if (!here->BSIM4icVGSGiven) here->BSIM4icVGS = 0.0; if (!here->BSIM4icVBSGiven) here->BSIM4icVBS = 0.0; if (!here->BSIM4drainAreaGiven) here->BSIM4drainArea = 0.0; if (!here->BSIM4drainPerimeterGiven) here->BSIM4drainPerimeter = 0.0; if (!here->BSIM4drainSquaresGiven) here->BSIM4drainSquares = 1.0; if (!here->BSIM4sourceAreaGiven) here->BSIM4sourceArea = 0.0; if (!here->BSIM4sourcePerimeterGiven) here->BSIM4sourcePerimeter = 0.0; if (!here->BSIM4sourceSquaresGiven) here->BSIM4sourceSquares = 1.0; if (!here->BSIM4rbdbGiven) here->BSIM4rbdb = model->BSIM4rbdb; /* in ohm */ if (!here->BSIM4rbsbGiven) here->BSIM4rbsb = model->BSIM4rbsb; if (!here->BSIM4rbpbGiven) here->BSIM4rbpb = model->BSIM4rbpb; if (!here->BSIM4rbpsGiven) here->BSIM4rbps = model->BSIM4rbps; if (!here->BSIM4rbpdGiven) here->BSIM4rbpd = model->BSIM4rbpd; if (!here->BSIM4delvtoGiven) here->BSIM4delvto = 0.0; if (!here->BSIM4mulu0Given) here->BSIM4mulu0 = 1.0; if (!here->BSIM4xgwGiven) here->BSIM4xgw = model->BSIM4xgw; if (!here->BSIM4ngconGiven) here->BSIM4ngcon = model->BSIM4ngcon; /* Process instance model selectors, some * may override their global counterparts */ if (!here->BSIM4rbodyModGiven) here->BSIM4rbodyMod = model->BSIM4rbodyMod; else if ((here->BSIM4rbodyMod != 0) && (here->BSIM4rbodyMod != 1) && (here->BSIM4rbodyMod != 2)) { here->BSIM4rbodyMod = model->BSIM4rbodyMod; printf("Warning: rbodyMod has been set to its global value %d.\n", model->BSIM4rbodyMod); } if (!here->BSIM4rgateModGiven) here->BSIM4rgateMod = model->BSIM4rgateMod; else if ((here->BSIM4rgateMod != 0) && (here->BSIM4rgateMod != 1) && (here->BSIM4rgateMod != 2) && (here->BSIM4rgateMod != 3)) { here->BSIM4rgateMod = model->BSIM4rgateMod; printf("Warning: rgateMod has been set to its global value %d.\n", model->BSIM4rgateMod); } if (!here->BSIM4geoModGiven) here->BSIM4geoMod = model->BSIM4geoMod; if (!here->BSIM4rgeoModGiven) here->BSIM4rgeoMod = model->BSIM4rgeoMod; else if ((here->BSIM4rgeoMod != 0) && (here->BSIM4rgeoMod != 1)) { here->BSIM4rgeoMod = model->BSIM4rgeoMod; printf("Warning: rgeoMod has been set to its global value %d.\n", model->BSIM4rgeoMod); } if (!here->BSIM4trnqsModGiven) here->BSIM4trnqsMod = model->BSIM4trnqsMod; else if ((here->BSIM4trnqsMod != 0) && (here->BSIM4trnqsMod != 1)) { here->BSIM4trnqsMod = model->BSIM4trnqsMod; printf("Warning: trnqsMod has been set to its global value %d.\n", model->BSIM4trnqsMod); } if (!here->BSIM4acnqsModGiven) here->BSIM4acnqsMod = model->BSIM4acnqsMod; else if ((here->BSIM4acnqsMod != 0) && (here->BSIM4acnqsMod != 1)) { here->BSIM4acnqsMod = model->BSIM4acnqsMod; printf("Warning: acnqsMod has been set to its global value %d.\n", model->BSIM4acnqsMod); } /* stress effect */ if (!here->BSIM4saGiven) here->BSIM4sa = 0.0; if (!here->BSIM4sbGiven) here->BSIM4sb = 0.0; if (!here->BSIM4sdGiven) here->BSIM4sd = 2 * model->BSIM4dmcg; /* Well Proximity Effect */ if (!here->BSIM4scaGiven) here->BSIM4sca = 0.0; if (!here->BSIM4scbGiven) here->BSIM4scb = 0.0; if (!here->BSIM4sccGiven) here->BSIM4scc = 0.0; if (!here->BSIM4scGiven) here->BSIM4sc = 0.0; /* m */ /* process drain series resistance */ createNode = 0; if ( (model->BSIM4rdsMod != 0) || (model->BSIM4tnoiMod == 1 && noiseAnalGiven)) { createNode = 1; } else if (model->BSIM4sheetResistance > 0) { if (here->BSIM4drainSquaresGiven && here->BSIM4drainSquares > 0) { createNode = 1; } else if (!here->BSIM4drainSquaresGiven && (here->BSIM4rgeoMod != 0)) { BSIM4RdseffGeo(here->BSIM4nf*here->BSIM4m, here->BSIM4geoMod, here->BSIM4rgeoMod, here->BSIM4min, here->BSIM4w, model->BSIM4sheetResistance, DMCGeff, DMCIeff, DMDGeff, 0, &Rtot); if(Rtot > 0) createNode = 1; } } if ( createNode != 0 ) { if ( here->BSIM4dNodePrime == 0 ) { error = CKTmkVolt(ckt,&tmp,here->BSIM4name,"drain"); if(error) return(error); here->BSIM4dNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->BSIM4dNodePrime = here->BSIM4dNode; } /* process source series resistance */ createNode = 0; if ( (model->BSIM4rdsMod != 0) || (model->BSIM4tnoiMod == 1 && noiseAnalGiven)) { createNode = 1; } else if (model->BSIM4sheetResistance > 0) { if (here->BSIM4sourceSquaresGiven && here->BSIM4sourceSquares > 0) { createNode = 1; } else if (!here->BSIM4sourceSquaresGiven && (here->BSIM4rgeoMod != 0)) { BSIM4RdseffGeo(here->BSIM4nf*here->BSIM4m, here->BSIM4geoMod, here->BSIM4rgeoMod, here->BSIM4min, here->BSIM4w, model->BSIM4sheetResistance, DMCGeff, DMCIeff, DMDGeff, 1, &Rtot); if(Rtot > 0) createNode = 1; } } if ( createNode != 0 ) { if ( here->BSIM4sNodePrime == 0 ) { error = CKTmkVolt(ckt,&tmp,here->BSIM4name,"source"); if(error) return(error); here->BSIM4sNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else here->BSIM4sNodePrime = here->BSIM4sNode; if ( here->BSIM4rgateMod > 0 ) { if ( here->BSIM4gNodePrime == 0 ) { error = CKTmkVolt(ckt,&tmp,here->BSIM4name,"gate"); if(error) return(error); here->BSIM4gNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,2,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else here->BSIM4gNodePrime = here->BSIM4gNodeExt; if ( here->BSIM4rgateMod == 3 ) { if ( here->BSIM4gNodeMid == 0 ) { error = CKTmkVolt(ckt,&tmp,here->BSIM4name,"midgate"); if(error) return(error); here->BSIM4gNodeMid = tmp->number; } } else here->BSIM4gNodeMid = here->BSIM4gNodeExt; /* internal body nodes for body resistance model */ if ((here->BSIM4rbodyMod ==1) || (here->BSIM4rbodyMod ==2)) { if (here->BSIM4dbNode == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM4name,"dbody"); if(error) return(error); here->BSIM4dbNode = tmp->number; } if (here->BSIM4bNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM4name,"body"); if(error) return(error); here->BSIM4bNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,4,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } if (here->BSIM4sbNode == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM4name,"sbody"); if(error) return(error); here->BSIM4sbNode = tmp->number; } } else here->BSIM4dbNode = here->BSIM4bNodePrime = here->BSIM4sbNode = here->BSIM4bNode; /* NQS node */ if ( here->BSIM4trnqsMod ) { if ( here->BSIM4qNode == 0 ) { error = CKTmkVolt(ckt,&tmp,here->BSIM4name,"charge"); if(error) return(error); here->BSIM4qNode = tmp->number; } } else here->BSIM4qNode = 0; /* set Sparse Matrix Pointers * macro to make elements with built-in out-of-memory test */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(BSIM4DPbpPtr, BSIM4dNodePrime, BSIM4bNodePrime); TSTALLOC(BSIM4GPbpPtr, BSIM4gNodePrime, BSIM4bNodePrime); TSTALLOC(BSIM4SPbpPtr, BSIM4sNodePrime, BSIM4bNodePrime); TSTALLOC(BSIM4BPdpPtr, BSIM4bNodePrime, BSIM4dNodePrime); TSTALLOC(BSIM4BPgpPtr, BSIM4bNodePrime, BSIM4gNodePrime); TSTALLOC(BSIM4BPspPtr, BSIM4bNodePrime, BSIM4sNodePrime); TSTALLOC(BSIM4BPbpPtr, BSIM4bNodePrime, BSIM4bNodePrime); TSTALLOC(BSIM4DdPtr, BSIM4dNode, BSIM4dNode); TSTALLOC(BSIM4GPgpPtr, BSIM4gNodePrime, BSIM4gNodePrime); TSTALLOC(BSIM4SsPtr, BSIM4sNode, BSIM4sNode); TSTALLOC(BSIM4DPdpPtr, BSIM4dNodePrime, BSIM4dNodePrime); TSTALLOC(BSIM4SPspPtr, BSIM4sNodePrime, BSIM4sNodePrime); TSTALLOC(BSIM4DdpPtr, BSIM4dNode, BSIM4dNodePrime); TSTALLOC(BSIM4GPdpPtr, BSIM4gNodePrime, BSIM4dNodePrime); TSTALLOC(BSIM4GPspPtr, BSIM4gNodePrime, BSIM4sNodePrime); TSTALLOC(BSIM4SspPtr, BSIM4sNode, BSIM4sNodePrime); TSTALLOC(BSIM4DPspPtr, BSIM4dNodePrime, BSIM4sNodePrime); TSTALLOC(BSIM4DPdPtr, BSIM4dNodePrime, BSIM4dNode); TSTALLOC(BSIM4DPgpPtr, BSIM4dNodePrime, BSIM4gNodePrime); TSTALLOC(BSIM4SPgpPtr, BSIM4sNodePrime, BSIM4gNodePrime); TSTALLOC(BSIM4SPsPtr, BSIM4sNodePrime, BSIM4sNode); TSTALLOC(BSIM4SPdpPtr, BSIM4sNodePrime, BSIM4dNodePrime); TSTALLOC(BSIM4QqPtr, BSIM4qNode, BSIM4qNode); TSTALLOC(BSIM4QbpPtr, BSIM4qNode, BSIM4bNodePrime) ; TSTALLOC(BSIM4QdpPtr, BSIM4qNode, BSIM4dNodePrime); TSTALLOC(BSIM4QspPtr, BSIM4qNode, BSIM4sNodePrime); TSTALLOC(BSIM4QgpPtr, BSIM4qNode, BSIM4gNodePrime); TSTALLOC(BSIM4DPqPtr, BSIM4dNodePrime, BSIM4qNode); TSTALLOC(BSIM4SPqPtr, BSIM4sNodePrime, BSIM4qNode); TSTALLOC(BSIM4GPqPtr, BSIM4gNodePrime, BSIM4qNode); if (here->BSIM4rgateMod != 0) { TSTALLOC(BSIM4GEgePtr, BSIM4gNodeExt, BSIM4gNodeExt); TSTALLOC(BSIM4GEgpPtr, BSIM4gNodeExt, BSIM4gNodePrime); TSTALLOC(BSIM4GPgePtr, BSIM4gNodePrime, BSIM4gNodeExt); TSTALLOC(BSIM4GEdpPtr, BSIM4gNodeExt, BSIM4dNodePrime); TSTALLOC(BSIM4GEspPtr, BSIM4gNodeExt, BSIM4sNodePrime); TSTALLOC(BSIM4GEbpPtr, BSIM4gNodeExt, BSIM4bNodePrime); TSTALLOC(BSIM4GMdpPtr, BSIM4gNodeMid, BSIM4dNodePrime); TSTALLOC(BSIM4GMgpPtr, BSIM4gNodeMid, BSIM4gNodePrime); TSTALLOC(BSIM4GMgmPtr, BSIM4gNodeMid, BSIM4gNodeMid); TSTALLOC(BSIM4GMgePtr, BSIM4gNodeMid, BSIM4gNodeExt); TSTALLOC(BSIM4GMspPtr, BSIM4gNodeMid, BSIM4sNodePrime); TSTALLOC(BSIM4GMbpPtr, BSIM4gNodeMid, BSIM4bNodePrime); TSTALLOC(BSIM4DPgmPtr, BSIM4dNodePrime, BSIM4gNodeMid); TSTALLOC(BSIM4GPgmPtr, BSIM4gNodePrime, BSIM4gNodeMid); TSTALLOC(BSIM4GEgmPtr, BSIM4gNodeExt, BSIM4gNodeMid); TSTALLOC(BSIM4SPgmPtr, BSIM4sNodePrime, BSIM4gNodeMid); TSTALLOC(BSIM4BPgmPtr, BSIM4bNodePrime, BSIM4gNodeMid); } if ((here->BSIM4rbodyMod ==1) || (here->BSIM4rbodyMod ==2)) { TSTALLOC(BSIM4DPdbPtr, BSIM4dNodePrime, BSIM4dbNode); TSTALLOC(BSIM4SPsbPtr, BSIM4sNodePrime, BSIM4sbNode); TSTALLOC(BSIM4DBdpPtr, BSIM4dbNode, BSIM4dNodePrime); TSTALLOC(BSIM4DBdbPtr, BSIM4dbNode, BSIM4dbNode); TSTALLOC(BSIM4DBbpPtr, BSIM4dbNode, BSIM4bNodePrime); TSTALLOC(BSIM4DBbPtr, BSIM4dbNode, BSIM4bNode); TSTALLOC(BSIM4BPdbPtr, BSIM4bNodePrime, BSIM4dbNode); TSTALLOC(BSIM4BPbPtr, BSIM4bNodePrime, BSIM4bNode); TSTALLOC(BSIM4BPsbPtr, BSIM4bNodePrime, BSIM4sbNode); TSTALLOC(BSIM4SBspPtr, BSIM4sbNode, BSIM4sNodePrime); TSTALLOC(BSIM4SBbpPtr, BSIM4sbNode, BSIM4bNodePrime); TSTALLOC(BSIM4SBbPtr, BSIM4sbNode, BSIM4bNode); TSTALLOC(BSIM4SBsbPtr, BSIM4sbNode, BSIM4sbNode); TSTALLOC(BSIM4BdbPtr, BSIM4bNode, BSIM4dbNode); TSTALLOC(BSIM4BbpPtr, BSIM4bNode, BSIM4bNodePrime); TSTALLOC(BSIM4BsbPtr, BSIM4bNode, BSIM4sbNode); TSTALLOC(BSIM4BbPtr, BSIM4bNode, BSIM4bNode); } if (model->BSIM4rdsMod) { TSTALLOC(BSIM4DgpPtr, BSIM4dNode, BSIM4gNodePrime); TSTALLOC(BSIM4DspPtr, BSIM4dNode, BSIM4sNodePrime); TSTALLOC(BSIM4DbpPtr, BSIM4dNode, BSIM4bNodePrime); TSTALLOC(BSIM4SdpPtr, BSIM4sNode, BSIM4dNodePrime); TSTALLOC(BSIM4SgpPtr, BSIM4sNode, BSIM4gNodePrime); TSTALLOC(BSIM4SbpPtr, BSIM4sNode, BSIM4bNodePrime); } } } #ifdef USE_OMP InstCount = 0; model = (BSIM4model*)inModel; /* loop through all the BSIM4 device models to count the number of instances */ for( ; model != NULL; model = BSIM4nextModel(model)) { /* loop through all the instances of the model */ for (here = BSIM4instances(model); here != NULL ; here=BSIM4nextInstance(here)) { InstCount++; } model->BSIM4InstCount = 0; model->BSIM4InstanceArray = NULL; } InstArray = TMALLOC(BSIM4instance*, InstCount); model = (BSIM4model*)inModel; /* store this in the first model only */ model->BSIM4InstCount = InstCount; model->BSIM4InstanceArray = InstArray; idx = 0; for( ; model != NULL; model = BSIM4nextModel(model)) { /* loop through all the instances of the model */ for (here = BSIM4instances(model); here != NULL ; here=BSIM4nextInstance(here)) { InstArray[idx] = here; idx++; } } #endif return(OK); } int BSIM4unsetup( GENmodel *inModel, CKTcircuit *ckt) { #ifndef HAS_BATCHSIM BSIM4model *model; BSIM4instance *here; #ifdef USE_OMP model = (BSIM4model*)inModel; tfree(model->BSIM4InstanceArray); #endif for (model = (BSIM4model *)inModel; model != NULL; model = BSIM4nextModel(model)) { for (here = BSIM4instances(model); here != NULL; here=BSIM4nextInstance(here)) { if (here->BSIM4qNode > 0) CKTdltNNum(ckt, here->BSIM4qNode); here->BSIM4qNode = 0; if (here->BSIM4sbNode > 0 && here->BSIM4sbNode != here->BSIM4bNode) CKTdltNNum(ckt, here->BSIM4sbNode); here->BSIM4sbNode = 0; if (here->BSIM4bNodePrime > 0 && here->BSIM4bNodePrime != here->BSIM4bNode) CKTdltNNum(ckt, here->BSIM4bNodePrime); here->BSIM4bNodePrime = 0; if (here->BSIM4dbNode > 0 && here->BSIM4dbNode != here->BSIM4bNode) CKTdltNNum(ckt, here->BSIM4dbNode); here->BSIM4dbNode = 0; if (here->BSIM4gNodeMid > 0 && here->BSIM4gNodeMid != here->BSIM4gNodeExt) CKTdltNNum(ckt, here->BSIM4gNodeMid); here->BSIM4gNodeMid = 0; if (here->BSIM4gNodePrime > 0 && here->BSIM4gNodePrime != here->BSIM4gNodeExt) CKTdltNNum(ckt, here->BSIM4gNodePrime); here->BSIM4gNodePrime = 0; if (here->BSIM4sNodePrime > 0 && here->BSIM4sNodePrime != here->BSIM4sNode) CKTdltNNum(ckt, here->BSIM4sNodePrime); here->BSIM4sNodePrime = 0; if (here->BSIM4dNodePrime > 0 && here->BSIM4dNodePrime != here->BSIM4dNode) CKTdltNNum(ckt, here->BSIM4dNodePrime); here->BSIM4dNodePrime = 0; } } #endif return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim4/b4trunc.c0000644000175000017500000001355513546075722021737 0ustar carstencarsten/* ****************************************************************************** * BSIM4 4.8.1 released by Chetan Kumar Dabhi 2/15/2017 * * BSIM4 Model Equations * ****************************************************************************** ****************************************************************************** * Copyright 2017 Regents of the University of California. * * All rights reserved. * * * * Project Director: Prof. Chenming Hu. * * Authors: Gary W. Ng, Weidong Liu, Xuemei Xi, Mohan Dunga, Wenwei Yang * * Ali Niknejad, Shivendra Singh Parihar, Chetan Kumar Dabhi * * Yogesh Singh Chauhan, Sayeef Salahuddin, Chenming Hu * ****************************************************************************** ****************************************************************************** * CMC In-Code Statement * * * * The Developer agrees that the following statement will appear in the * * model code that has been adopted as a CMC Standard. * * * * Software is distributed as is, completely without warranty or service * * support. The University of California and its employees are not liable * * for the condition or performance of the software. * * * * The University of California owns the copyright and grants users a * * perpetual, irrevocable, worldwide, non-exclusive, royalty-free license * * with respect to the software as set forth below. * * * * The University of California hereby disclaims all implied warranties. * * * * The University of California grants the users the right to modify, * * copy, and redistribute the software and documentation, both within * * the user's organization and externally, subject to the following * * restrictions: * * * * 1. The users agree not to charge for the University of California code * * itself but may charge for additions, extensions, or support. * * * * 2. In any product based on the software, the users agree to * * acknowledge the University of California that developed the * * software. This acknowledgment shall appear in the product * * documentation. * * * * 3. Redistributions to others of source code and documentation must * * retain the copyright notice, disclaimer, and list of conditions. * * * * 4. Redistributions to others in binary form must reproduce the * * copyright notice, disclaimer, and list of conditions in the * * documentation and/or other materials provided with the * * distribution. * * * * Agreed to on ______Feb. 15, 2017______________ * * * * By: ____University of California, Berkeley___ * * ____Chenming Hu__________________________ * * ____Professor in Graduate School ________ * * * ****************************************************************************** */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4trunc( GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { BSIM4model *model = (BSIM4model*)inModel; BSIM4instance *here; #ifdef STEPDEBUG double debugtemp; #endif /* STEPDEBUG */ for (; model != NULL; model = BSIM4nextModel(model)) { for (here = BSIM4instances(model); here != NULL; here = BSIM4nextInstance(here)) { #ifdef STEPDEBUG debugtemp = *timeStep; #endif /* STEPDEBUG */ CKTterr(here->BSIM4qb,ckt,timeStep); CKTterr(here->BSIM4qg,ckt,timeStep); CKTterr(here->BSIM4qd,ckt,timeStep); if (here->BSIM4trnqsMod) CKTterr(here->BSIM4qcdump,ckt,timeStep); if (here->BSIM4rbodyMod) { CKTterr(here->BSIM4qbs,ckt,timeStep); CKTterr(here->BSIM4qbd,ckt,timeStep); } if (here->BSIM4rgateMod == 3) CKTterr(here->BSIM4qgmid,ckt,timeStep); #ifdef STEPDEBUG if(debugtemp != *timeStep) { printf("device %s reduces step from %g to %g\n", here->BSIM4name,debugtemp,*timeStep); } #endif /* STEPDEBUG */ } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4/bsim4itf.h0000644000175000017500000001122513546075722022074 0ustar carstencarsten/* ****************************************************************************** * BSIM4 4.8.1 released by Chetan Kumar Dabhi 2/15/2017 * * BSIM4 Model Equations * ****************************************************************************** ****************************************************************************** * Copyright 2017 Regents of the University of California. * * All rights reserved. * * * * Project Director: Prof. Chenming Hu. * * Authors: Gary W. Ng, Weidong Liu, Xuemei Xi, Mohan Dunga, Wenwei Yang * * Ali Niknejad, Shivendra Singh Parihar, Chetan Kumar Dabhi * * Yogesh Singh Chauhan, Sayeef Salahuddin, Chenming Hu * ****************************************************************************** ****************************************************************************** * CMC In-Code Statement * * * * The Developer agrees that the following statement will appear in the * * model code that has been adopted as a CMC Standard. * * * * Software is distributed as is, completely without warranty or service * * support. The University of California and its employees are not liable * * for the condition or performance of the software. * * * * The University of California owns the copyright and grants users a * * perpetual, irrevocable, worldwide, non-exclusive, royalty-free license * * with respect to the software as set forth below. * * * * The University of California hereby disclaims all implied warranties. * * * * The University of California grants the users the right to modify, * * copy, and redistribute the software and documentation, both within * * the user's organization and externally, subject to the following * * restrictions: * * * * 1. The users agree not to charge for the University of California code * * itself but may charge for additions, extensions, or support. * * * * 2. In any product based on the software, the users agree to * * acknowledge the University of California that developed the * * software. This acknowledgment shall appear in the product * * documentation. * * * * 3. Redistributions to others of source code and documentation must * * retain the copyright notice, disclaimer, and list of conditions. * * * * 4. Redistributions to others in binary form must reproduce the * * copyright notice, disclaimer, and list of conditions in the * * documentation and/or other materials provided with the * * distribution. * * * * Agreed to on ______Feb. 15, 2017______________ * * * * By: ____University of California, Berkeley___ * * ____Chenming Hu__________________________ * * ____Professor in Graduate School ________ * * * ****************************************************************************** */ #ifndef DEV_BSIM4 #define DEV_BSIM4 SPICEdev *get_bsim4_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/bsim4/b4ask.c0000644000175000017500000004214313546075722021355 0ustar carstencarsten/* ****************************************************************************** * BSIM4 4.8.1 released by Chetan Kumar Dabhi 2/15/2017 * * BSIM4 Model Equations * ****************************************************************************** ****************************************************************************** * Copyright 2017 Regents of the University of California. * * All rights reserved. * * * * Project Director: Prof. Chenming Hu. * * Authors: Gary W. Ng, Weidong Liu, Xuemei Xi, Mohan Dunga, Wenwei Yang * * Ali Niknejad, Shivendra Singh Parihar, Chetan Kumar Dabhi * * Yogesh Singh Chauhan, Sayeef Salahuddin, Chenming Hu * ****************************************************************************** ****************************************************************************** * CMC In-Code Statement * * * * The Developer agrees that the following statement will appear in the * * model code that has been adopted as a CMC Standard. * * * * Software is distributed as is, completely without warranty or service * * support. The University of California and its employees are not liable * * for the condition or performance of the software. * * * * The University of California owns the copyright and grants users a * * perpetual, irrevocable, worldwide, non-exclusive, royalty-free license * * with respect to the software as set forth below. * * * * The University of California hereby disclaims all implied warranties. * * * * The University of California grants the users the right to modify, * * copy, and redistribute the software and documentation, both within * * the user's organization and externally, subject to the following * * restrictions: * * * * 1. The users agree not to charge for the University of California code * * itself but may charge for additions, extensions, or support. * * * * 2. In any product based on the software, the users agree to * * acknowledge the University of California that developed the * * software. This acknowledgment shall appear in the product * * documentation. * * * * 3. Redistributions to others of source code and documentation must * * retain the copyright notice, disclaimer, and list of conditions. * * * * 4. Redistributions to others in binary form must reproduce the * * copyright notice, disclaimer, and list of conditions in the * * documentation and/or other materials provided with the * * distribution. * * * * Agreed to on ______Feb. 15, 2017______________ * * * * By: ____University of California, Berkeley___ * * ____Chenming Hu__________________________ * * ____Professor in Graduate School ________ * * * ****************************************************************************** */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "bsim4def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4ask( CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { BSIM4instance *here = (BSIM4instance*)inst; NG_IGNORE(select); switch(which) { case BSIM4_L: value->rValue = here->BSIM4l; return(OK); case BSIM4_W: value->rValue = here->BSIM4w; return(OK); case BSIM4_M: value->rValue = here->BSIM4m; return(OK); case BSIM4_NF: value->rValue = here->BSIM4nf; return(OK); case BSIM4_MIN: value->iValue = here->BSIM4min; return(OK); case BSIM4_AS: value->rValue = here->BSIM4sourceArea; return(OK); case BSIM4_AD: value->rValue = here->BSIM4drainArea; return(OK); case BSIM4_PS: value->rValue = here->BSIM4sourcePerimeter; return(OK); case BSIM4_PD: value->rValue = here->BSIM4drainPerimeter; return(OK); case BSIM4_NRS: value->rValue = here->BSIM4sourceSquares; return(OK); case BSIM4_NRD: value->rValue = here->BSIM4drainSquares; return(OK); case BSIM4_OFF: value->rValue = here->BSIM4off; return(OK); case BSIM4_SA: value->rValue = here->BSIM4sa ; return(OK); case BSIM4_SB: value->rValue = here->BSIM4sb ; return(OK); case BSIM4_SD: value->rValue = here->BSIM4sd ; return(OK); case BSIM4_SCA: value->rValue = here->BSIM4sca ; return(OK); case BSIM4_SCB: value->rValue = here->BSIM4scb ; return(OK); case BSIM4_SCC: value->rValue = here->BSIM4scc ; return(OK); case BSIM4_SC: value->rValue = here->BSIM4sc ; return(OK); case BSIM4_RBSB: value->rValue = here->BSIM4rbsb; return(OK); case BSIM4_RBDB: value->rValue = here->BSIM4rbdb; return(OK); case BSIM4_RBPB: value->rValue = here->BSIM4rbpb; return(OK); case BSIM4_RBPS: value->rValue = here->BSIM4rbps; return(OK); case BSIM4_RBPD: value->rValue = here->BSIM4rbpd; return(OK); case BSIM4_DELVTO: value->rValue = here->BSIM4delvto; return(OK); case BSIM4_MULU0: value->rValue = here->BSIM4mulu0; return(OK); case BSIM4_XGW: value->rValue = here->BSIM4xgw; return(OK); case BSIM4_NGCON: value->rValue = here->BSIM4ngcon; return(OK); case BSIM4_TRNQSMOD: value->iValue = here->BSIM4trnqsMod; return(OK); case BSIM4_ACNQSMOD: value->iValue = here->BSIM4acnqsMod; return(OK); case BSIM4_RBODYMOD: value->iValue = here->BSIM4rbodyMod; return(OK); case BSIM4_RGATEMOD: value->iValue = here->BSIM4rgateMod; return(OK); case BSIM4_GEOMOD: value->iValue = here->BSIM4geoMod; return(OK); case BSIM4_RGEOMOD: value->iValue = here->BSIM4rgeoMod; return(OK); case BSIM4_IC_VDS: value->rValue = here->BSIM4icVDS; return(OK); case BSIM4_IC_VGS: value->rValue = here->BSIM4icVGS; return(OK); case BSIM4_IC_VBS: value->rValue = here->BSIM4icVBS; return(OK); case BSIM4_DNODE: value->iValue = here->BSIM4dNode; return(OK); case BSIM4_GNODEEXT: value->iValue = here->BSIM4gNodeExt; return(OK); case BSIM4_SNODE: value->iValue = here->BSIM4sNode; return(OK); case BSIM4_BNODE: value->iValue = here->BSIM4bNode; return(OK); case BSIM4_DNODEPRIME: value->iValue = here->BSIM4dNodePrime; return(OK); case BSIM4_GNODEPRIME: value->iValue = here->BSIM4gNodePrime; return(OK); case BSIM4_GNODEMID: value->iValue = here->BSIM4gNodeMid; return(OK); case BSIM4_SNODEPRIME: value->iValue = here->BSIM4sNodePrime; return(OK); case BSIM4_DBNODE: value->iValue = here->BSIM4dbNode; return(OK); case BSIM4_BNODEPRIME: value->iValue = here->BSIM4bNodePrime; return(OK); case BSIM4_SBNODE: value->iValue = here->BSIM4sbNode; return(OK); case BSIM4_SOURCECONDUCT: value->rValue = here->BSIM4sourceConductance; value->rValue *= here->BSIM4m; return(OK); case BSIM4_DRAINCONDUCT: value->rValue = here->BSIM4drainConductance; value->rValue *= here->BSIM4m; return(OK); case BSIM4_VBD: value->rValue = *(ckt->CKTstate0 + here->BSIM4vbd); return(OK); case BSIM4_VBS: value->rValue = *(ckt->CKTstate0 + here->BSIM4vbs); return(OK); case BSIM4_VGS: value->rValue = *(ckt->CKTstate0 + here->BSIM4vgs); return(OK); case BSIM4_VDS: value->rValue = *(ckt->CKTstate0 + here->BSIM4vds); return(OK); case BSIM4_CD: value->rValue = here->BSIM4cd; value->rValue *= here->BSIM4m; return(OK); case BSIM4_CBS: value->rValue = here->BSIM4cbs; value->rValue *= here->BSIM4m; return(OK); case BSIM4_CBD: value->rValue = here->BSIM4cbd; value->rValue *= here->BSIM4m; return(OK); case BSIM4_CSUB: value->rValue = here->BSIM4csub; value->rValue *= here->BSIM4m; return(OK); case BSIM4_QINV: value->rValue = here-> BSIM4qinv; value->rValue *= here->BSIM4m; return(OK); case BSIM4_IGIDL: value->rValue = here->BSIM4Igidl; value->rValue *= here->BSIM4m; return(OK); case BSIM4_IGISL: value->rValue = here->BSIM4Igisl; value->rValue *= here->BSIM4m; return(OK); case BSIM4_IGS: value->rValue = here->BSIM4Igs; value->rValue *= here->BSIM4m; return(OK); case BSIM4_IGD: value->rValue = here->BSIM4Igd; value->rValue *= here->BSIM4m; return(OK); case BSIM4_IGB: value->rValue = here->BSIM4Igb; value->rValue *= here->BSIM4m; return(OK); case BSIM4_IGCS: value->rValue = here->BSIM4Igcs; value->rValue *= here->BSIM4m; return(OK); case BSIM4_IGCD: value->rValue = here->BSIM4Igcd; value->rValue *= here->BSIM4m; return(OK); case BSIM4_GM: value->rValue = here->BSIM4gm; value->rValue *= here->BSIM4m; return(OK); case BSIM4_GDS: value->rValue = here->BSIM4gds; value->rValue *= here->BSIM4m; return(OK); case BSIM4_GMBS: value->rValue = here->BSIM4gmbs; value->rValue *= here->BSIM4m; return(OK); case BSIM4_GBD: value->rValue = here->BSIM4gbd; value->rValue *= here->BSIM4m; return(OK); case BSIM4_GBS: value->rValue = here->BSIM4gbs; value->rValue *= here->BSIM4m; return(OK); /* case BSIM4_QB: value->rValue = *(ckt->CKTstate0 + here->BSIM4qb); return(OK); */ case BSIM4_CQB: value->rValue = *(ckt->CKTstate0 + here->BSIM4cqb); return(OK); /* case BSIM4_QG: value->rValue = *(ckt->CKTstate0 + here->BSIM4qg); return(OK); */ case BSIM4_CQG: value->rValue = *(ckt->CKTstate0 + here->BSIM4cqg); return(OK); /* case BSIM4_QD: value->rValue = *(ckt->CKTstate0 + here->BSIM4qd); return(OK); */ case BSIM4_CQD: value->rValue = *(ckt->CKTstate0 + here->BSIM4cqd); return(OK); /* case BSIM4_QS: value->rValue = *(ckt->CKTstate0 + here->BSIM4qs); return(OK); */ case BSIM4_QB: value->rValue = here->BSIM4qbulk; value->rValue *= here->BSIM4m; return(OK); case BSIM4_QG: value->rValue = here->BSIM4qgate; value->rValue *= here->BSIM4m; return(OK); case BSIM4_QS: value->rValue = here->BSIM4qsrc; value->rValue *= here->BSIM4m; return(OK); case BSIM4_QD: value->rValue = here->BSIM4qdrn; value->rValue *= here->BSIM4m; return(OK); case BSIM4_QDEF: value->rValue = *(ckt->CKTstate0 + here->BSIM4qdef); return(OK); case BSIM4_GCRG: value->rValue = here->BSIM4gcrg; value->rValue *= here->BSIM4m; return(OK); case BSIM4_GTAU: value->rValue = here->BSIM4gtau; value->rValue *= here->BSIM4m; return(OK); case BSIM4_CGGB: value->rValue = here->BSIM4cggb; value->rValue *= here->BSIM4m; return(OK); case BSIM4_CGDB: value->rValue = here->BSIM4cgdb; value->rValue *= here->BSIM4m; return(OK); case BSIM4_CGSB: value->rValue = here->BSIM4cgsb; value->rValue *= here->BSIM4m; return(OK); case BSIM4_CDGB: value->rValue = here->BSIM4cdgb; value->rValue *= here->BSIM4m; return(OK); case BSIM4_CDDB: value->rValue = here->BSIM4cddb; value->rValue *= here->BSIM4m; return(OK); case BSIM4_CDSB: value->rValue = here->BSIM4cdsb; value->rValue *= here->BSIM4m; return(OK); case BSIM4_CBGB: value->rValue = here->BSIM4cbgb; value->rValue *= here->BSIM4m; return(OK); case BSIM4_CBDB: value->rValue = here->BSIM4cbdb; value->rValue *= here->BSIM4m; return(OK); case BSIM4_CBSB: value->rValue = here->BSIM4cbsb; value->rValue *= here->BSIM4m; return(OK); case BSIM4_CSGB: value->rValue = here->BSIM4csgb; value->rValue *= here->BSIM4m; return(OK); case BSIM4_CSDB: value->rValue = here->BSIM4csdb; value->rValue *= here->BSIM4m; return(OK); case BSIM4_CSSB: value->rValue = here->BSIM4cssb; value->rValue *= here->BSIM4m; return(OK); case BSIM4_CGBB: value->rValue = here->BSIM4cgbb; value->rValue *= here->BSIM4m; return(OK); case BSIM4_CDBB: value->rValue = here->BSIM4cdbb; value->rValue *= here->BSIM4m; return(OK); case BSIM4_CSBB: value->rValue = here->BSIM4csbb; value->rValue *= here->BSIM4m; return(OK); case BSIM4_CBBB: value->rValue = here->BSIM4cbbb; value->rValue *= here->BSIM4m; return(OK); case BSIM4_CAPBD: value->rValue = here->BSIM4capbd; value->rValue *= here->BSIM4m; return(OK); case BSIM4_CAPBS: value->rValue = here->BSIM4capbs; value->rValue *= here->BSIM4m; return(OK); case BSIM4_VON: value->rValue = here->BSIM4von; return(OK); case BSIM4_VDSAT: value->rValue = here->BSIM4vdsat; return(OK); case BSIM4_QBS: value->rValue = *(ckt->CKTstate0 + here->BSIM4qbs); return(OK); case BSIM4_QBD: value->rValue = *(ckt->CKTstate0 + here->BSIM4qbd); return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim4/B4TERMS_OF_USE0000644000175000017500000000254413546075722022311 0ustar carstencarsten The terms under which the software is provided are as the following. Software is distributed as is, completely without warranty or service support. The University of California and its employees are not liable for the condition or performance of the software. The University owns the copyright but shall not be liable for any infringement of copyright or other proprietary rights brought by third parties against the users of the software. The University of California hereby disclaims all implied warranties. The University of California grants the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions: 1. The users agree not to charge for the University of California code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge the UC Berkeley BSIM Research Group that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to obey all U.S. Government restrictions governing redistribution or export of the software. 4. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others. Chenming Hu, and Weidong Liu Mar. 2000 tmpk8ny_4pz/src/spicelib/devices/bsim4/b4acld.c0000644000175000017500000010056613546075722021506 0ustar carstencarsten/* ****************************************************************************** * BSIM4 4.8.1 released by Chetan Kumar Dabhi 2/15/2017 * * BSIM4 Model Equations * ****************************************************************************** ****************************************************************************** * Copyright 2017 Regents of the University of California. * * All rights reserved. * * * * Project Director: Prof. Chenming Hu. * * Authors: Gary W. Ng, Weidong Liu, Xuemei Xi, Mohan Dunga, Wenwei Yang * * Ali Niknejad, Shivendra Singh Parihar, Chetan Kumar Dabhi * * Yogesh Singh Chauhan, Sayeef Salahuddin, Chenming Hu * ****************************************************************************** ****************************************************************************** * CMC In-Code Statement * * * * The Developer agrees that the following statement will appear in the * * model code that has been adopted as a CMC Standard. * * * * Software is distributed as is, completely without warranty or service * * support. The University of California and its employees are not liable * * for the condition or performance of the software. * * * * The University of California owns the copyright and grants users a * * perpetual, irrevocable, worldwide, non-exclusive, royalty-free license * * with respect to the software as set forth below. * * * * The University of California hereby disclaims all implied warranties. * * * * The University of California grants the users the right to modify, * * copy, and redistribute the software and documentation, both within * * the user's organization and externally, subject to the following * * restrictions: * * * * 1. The users agree not to charge for the University of California code * * itself but may charge for additions, extensions, or support. * * * * 2. In any product based on the software, the users agree to * * acknowledge the University of California that developed the * * software. This acknowledgment shall appear in the product * * documentation. * * * * 3. Redistributions to others of source code and documentation must * * retain the copyright notice, disclaimer, and list of conditions. * * * * 4. Redistributions to others in binary form must reproduce the * * copyright notice, disclaimer, and list of conditions in the * * documentation and/or other materials provided with the * * distribution. * * * * Agreed to on ______Feb. 15, 2017______________ * * * * By: ____University of California, Berkeley___ * * ____Chenming Hu__________________________ * * ____Professor in Graduate School ________ * * * ****************************************************************************** */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4acLoad( GENmodel *inModel, CKTcircuit *ckt) { BSIM4model *model = (BSIM4model*)inModel; BSIM4instance *here; double gjbd, gjbs, geltd, gcrg, gcrgg, gcrgd, gcrgs, gcrgb; double xcbgb, xcbdb, xcbsb, xcbbb; double xcggbr, xcgdbr, xcgsbr, xcgbbr, xcggbi, xcgdbi, xcgsbi, xcgbbi; double Cggr, Cgdr, Cgsr, Cgbr, Cggi, Cgdi, Cgsi, Cgbi; double xcddbr, xcdgbr, xcdsbr, xcdbbr, xcsdbr, xcsgbr, xcssbr, xcsbbr; double xcddbi, xcdgbi, xcdsbi, xcdbbi, xcsdbi, xcsgbi, xcssbi, xcsbbi; double xcdbdb, xcsbsb=0.0, xcgmgmb=0.0, xcgmdb=0.0, xcgmsb=0.0, xcdgmb, xcsgmb; double xcgmbb=0.0, xcbgmb; double capbd, capbs, omega; double gstot, gstotd, gstotg, gstots, gstotb, gspr; double gdtot, gdtotd, gdtotg, gdtots, gdtotb, gdpr; double gIstotg, gIstotd, gIstots, gIstotb; double gIdtotg, gIdtotd, gIdtots, gIdtotb; double gIbtotg, gIbtotd, gIbtots, gIbtotb; double gIgtotg, gIgtotd, gIgtots, gIgtotb; double cgso, cgdo, cgbo; double gbspsp, gbbdp, gbbsp, gbspg, gbspb; double gbspdp, gbdpdp, gbdpg, gbdpb, gbdpsp; double T0=0.0, T1, T2, T3; double Csg, Csd, Css; double Cdgr, Cddr, Cdsr, Cdbr, Csgr, Csdr, Cssr, Csbr; double Cdgi, Cddi, Cdsi, Cdbi, Csgi, Csdi, Cssi, Csbi; double gmr, gmi, gmbsr, gmbsi, gdsr, gdsi; double FwdSumr, RevSumr, Gmr, Gmbsr; double FwdSumi, RevSumi, Gmi, Gmbsi; struct bsim4SizeDependParam *pParam; double ggidld, ggidlg, ggidlb, ggislg, ggislb, ggisls; double m; omega = ckt->CKTomega; for (; model != NULL; model = BSIM4nextModel(model)) { for (here = BSIM4instances(model); here!= NULL; here = BSIM4nextInstance(here)) { pParam = here->pParam; capbd = here->BSIM4capbd; capbs = here->BSIM4capbs; cgso = here->BSIM4cgso; cgdo = here->BSIM4cgdo; cgbo = pParam->BSIM4cgbo; Csd = -(here->BSIM4cddb + here->BSIM4cgdb + here->BSIM4cbdb); Csg = -(here->BSIM4cdgb + here->BSIM4cggb + here->BSIM4cbgb); Css = -(here->BSIM4cdsb + here->BSIM4cgsb + here->BSIM4cbsb); if (here->BSIM4acnqsMod) { T0 = omega * here->BSIM4taunet; T1 = T0 * T0; T2 = 1.0 / (1.0 + T1); T3 = T0 * T2; gmr = here->BSIM4gm * T2; gmbsr = here->BSIM4gmbs * T2; gdsr = here->BSIM4gds * T2; gmi = -here->BSIM4gm * T3; gmbsi = -here->BSIM4gmbs * T3; gdsi = -here->BSIM4gds * T3; Cddr = here->BSIM4cddb * T2; Cdgr = here->BSIM4cdgb * T2; Cdsr = here->BSIM4cdsb * T2; Cdbr = -(Cddr + Cdgr + Cdsr); /* WDLiu: Cxyi mulitplied by jomega below, and actually to be of conductance */ Cddi = here->BSIM4cddb * T3 * omega; Cdgi = here->BSIM4cdgb * T3 * omega; Cdsi = here->BSIM4cdsb * T3 * omega; Cdbi = -(Cddi + Cdgi + Cdsi); Csdr = Csd * T2; Csgr = Csg * T2; Cssr = Css * T2; Csbr = -(Csdr + Csgr + Cssr); Csdi = Csd * T3 * omega; Csgi = Csg * T3 * omega; Cssi = Css * T3 * omega; Csbi = -(Csdi + Csgi + Cssi); Cgdr = -(Cddr + Csdr + here->BSIM4cbdb); Cggr = -(Cdgr + Csgr + here->BSIM4cbgb); Cgsr = -(Cdsr + Cssr + here->BSIM4cbsb); Cgbr = -(Cgdr + Cggr + Cgsr); Cgdi = -(Cddi + Csdi); Cggi = -(Cdgi + Csgi); Cgsi = -(Cdsi + Cssi); Cgbi = -(Cgdi + Cggi + Cgsi); } else /* QS */ { gmr = here->BSIM4gm; gmbsr = here->BSIM4gmbs; gdsr = here->BSIM4gds; gmi = gmbsi = gdsi = 0.0; Cddr = here->BSIM4cddb; Cdgr = here->BSIM4cdgb; Cdsr = here->BSIM4cdsb; Cdbr = -(Cddr + Cdgr + Cdsr); Cddi = Cdgi = Cdsi = Cdbi = 0.0; Csdr = Csd; Csgr = Csg; Cssr = Css; Csbr = -(Csdr + Csgr + Cssr); Csdi = Csgi = Cssi = Csbi = 0.0; Cgdr = here->BSIM4cgdb; Cggr = here->BSIM4cggb; Cgsr = here->BSIM4cgsb; Cgbr = -(Cgdr + Cggr + Cgsr); Cgdi = Cggi = Cgsi = Cgbi = 0.0; } if (here->BSIM4mode >= 0) { Gmr = gmr; Gmbsr = gmbsr; FwdSumr = Gmr + Gmbsr; RevSumr = 0.0; Gmi = gmi; Gmbsi = gmbsi; FwdSumi = Gmi + Gmbsi; RevSumi = 0.0; gbbdp = -(here->BSIM4gbds); gbbsp = here->BSIM4gbds + here->BSIM4gbgs + here->BSIM4gbbs; gbdpg = here->BSIM4gbgs; gbdpdp = here->BSIM4gbds; gbdpb = here->BSIM4gbbs; gbdpsp = -(gbdpg + gbdpdp + gbdpb); gbspdp = 0.0; gbspg = 0.0; gbspb = 0.0; gbspsp = 0.0; if (model->BSIM4igcMod) { gIstotg = here->BSIM4gIgsg + here->BSIM4gIgcsg; gIstotd = here->BSIM4gIgcsd; gIstots = here->BSIM4gIgss + here->BSIM4gIgcss; gIstotb = here->BSIM4gIgcsb; gIdtotg = here->BSIM4gIgdg + here->BSIM4gIgcdg; gIdtotd = here->BSIM4gIgdd + here->BSIM4gIgcdd; gIdtots = here->BSIM4gIgcds; gIdtotb = here->BSIM4gIgcdb; } else { gIstotg = gIstotd = gIstots = gIstotb = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = 0.0; } if (model->BSIM4igbMod) { gIbtotg = here->BSIM4gIgbg; gIbtotd = here->BSIM4gIgbd; gIbtots = here->BSIM4gIgbs; gIbtotb = here->BSIM4gIgbb; } else gIbtotg = gIbtotd = gIbtots = gIbtotb = 0.0; if ((model->BSIM4igcMod != 0) || (model->BSIM4igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = 0.0; if (here->BSIM4rgateMod == 2) T0 = *(ckt->CKTstates[0] + here->BSIM4vges) - *(ckt->CKTstates[0] + here->BSIM4vgs); else if (here->BSIM4rgateMod == 3) T0 = *(ckt->CKTstates[0] + here->BSIM4vgms) - *(ckt->CKTstates[0] + here->BSIM4vgs); if (here->BSIM4rgateMod > 1) { gcrgd = here->BSIM4gcrgd * T0; gcrgg = here->BSIM4gcrgg * T0; gcrgs = here->BSIM4gcrgs * T0; gcrgb = here->BSIM4gcrgb * T0; gcrgg -= here->BSIM4gcrg; gcrg = here->BSIM4gcrg; } else gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; if (here->BSIM4rgateMod == 3) { xcgmgmb = (cgdo + cgso + pParam->BSIM4cgbo) * omega; xcgmdb = -cgdo * omega; xcgmsb = -cgso * omega; xcgmbb = -pParam->BSIM4cgbo * omega; xcdgmb = xcgmdb; xcsgmb = xcgmsb; xcbgmb = xcgmbb; xcggbr = Cggr * omega; xcgdbr = Cgdr * omega; xcgsbr = Cgsr * omega; xcgbbr = -(xcggbr + xcgdbr + xcgsbr); xcdgbr = Cdgr * omega; xcsgbr = Csgr * omega; xcbgb = here->BSIM4cbgb * omega; } else { xcggbr = (Cggr + cgdo + cgso + pParam->BSIM4cgbo ) * omega; xcgdbr = (Cgdr - cgdo) * omega; xcgsbr = (Cgsr - cgso) * omega; xcgbbr = -(xcggbr + xcgdbr + xcgsbr); xcdgbr = (Cdgr - cgdo) * omega; xcsgbr = (Csgr - cgso) * omega; xcbgb = (here->BSIM4cbgb - pParam->BSIM4cgbo) * omega; xcdgmb = xcsgmb = xcbgmb = 0.0; } xcddbr = (Cddr + here->BSIM4capbd + cgdo) * omega; xcdsbr = Cdsr * omega; xcsdbr = Csdr * omega; xcssbr = (here->BSIM4capbs + cgso + Cssr) * omega; if (!here->BSIM4rbodyMod) { xcdbbr = -(xcdgbr + xcddbr + xcdsbr + xcdgmb); xcsbbr = -(xcsgbr + xcsdbr + xcssbr + xcsgmb); xcbdb = (here->BSIM4cbdb - here->BSIM4capbd) * omega; xcbsb = (here->BSIM4cbsb - here->BSIM4capbs) * omega; xcdbdb = 0.0; } else { xcdbbr = Cdbr * omega; xcsbbr = -(xcsgbr + xcsdbr + xcssbr + xcsgmb) + here->BSIM4capbs * omega; xcbdb = here->BSIM4cbdb * omega; xcbsb = here->BSIM4cbsb * omega; xcdbdb = -here->BSIM4capbd * omega; xcsbsb = -here->BSIM4capbs * omega; } xcbbb = -(xcbdb + xcbgb + xcbsb + xcbgmb); xcdgbi = Cdgi; xcsgbi = Csgi; xcddbi = Cddi; xcdsbi = Cdsi; xcsdbi = Csdi; xcssbi = Cssi; xcdbbi = Cdbi; xcsbbi = Csbi; xcggbi = Cggi; xcgdbi = Cgdi; xcgsbi = Cgsi; xcgbbi = Cgbi; } else /* Reverse mode */ { Gmr = -gmr; Gmbsr = -gmbsr; FwdSumr = 0.0; RevSumr = -(Gmr + Gmbsr); Gmi = -gmi; Gmbsi = -gmbsi; FwdSumi = 0.0; RevSumi = -(Gmi + Gmbsi); gbbsp = -(here->BSIM4gbds); gbbdp = here->BSIM4gbds + here->BSIM4gbgs + here->BSIM4gbbs; gbdpg = 0.0; gbdpsp = 0.0; gbdpb = 0.0; gbdpdp = 0.0; gbspg = here->BSIM4gbgs; gbspsp = here->BSIM4gbds; gbspb = here->BSIM4gbbs; gbspdp = -(gbspg + gbspsp + gbspb); if (model->BSIM4igcMod) { gIstotg = here->BSIM4gIgsg + here->BSIM4gIgcdg; gIstotd = here->BSIM4gIgcds; gIstots = here->BSIM4gIgss + here->BSIM4gIgcdd; gIstotb = here->BSIM4gIgcdb; gIdtotg = here->BSIM4gIgdg + here->BSIM4gIgcsg; gIdtotd = here->BSIM4gIgdd + here->BSIM4gIgcss; gIdtots = here->BSIM4gIgcsd; gIdtotb = here->BSIM4gIgcsb; } else { gIstotg = gIstotd = gIstots = gIstotb = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = 0.0; } if (model->BSIM4igbMod) { gIbtotg = here->BSIM4gIgbg; gIbtotd = here->BSIM4gIgbs; gIbtots = here->BSIM4gIgbd; gIbtotb = here->BSIM4gIgbb; } else gIbtotg = gIbtotd = gIbtots = gIbtotb = 0.0; if ((model->BSIM4igcMod != 0) || (model->BSIM4igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = 0.0; if (here->BSIM4rgateMod == 2) T0 = *(ckt->CKTstates[0] + here->BSIM4vges) - *(ckt->CKTstates[0] + here->BSIM4vgs); else if (here->BSIM4rgateMod == 3) T0 = *(ckt->CKTstates[0] + here->BSIM4vgms) - *(ckt->CKTstates[0] + here->BSIM4vgs); if (here->BSIM4rgateMod > 1) { gcrgd = here->BSIM4gcrgs * T0; gcrgg = here->BSIM4gcrgg * T0; gcrgs = here->BSIM4gcrgd * T0; gcrgb = here->BSIM4gcrgb * T0; gcrgg -= here->BSIM4gcrg; gcrg = here->BSIM4gcrg; } else gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; if (here->BSIM4rgateMod == 3) { xcgmgmb = (cgdo + cgso + pParam->BSIM4cgbo) * omega; xcgmdb = -cgdo * omega; xcgmsb = -cgso * omega; xcgmbb = -pParam->BSIM4cgbo * omega; xcdgmb = xcgmdb; xcsgmb = xcgmsb; xcbgmb = xcgmbb; xcggbr = Cggr * omega; xcgdbr = Cgsr * omega; xcgsbr = Cgdr * omega; xcgbbr = -(xcggbr + xcgdbr + xcgsbr); xcdgbr = Csgr * omega; xcsgbr = Cdgr * omega; xcbgb = here->BSIM4cbgb * omega; } else { xcggbr = (Cggr + cgdo + cgso + pParam->BSIM4cgbo ) * omega; xcgdbr = (Cgsr - cgdo) * omega; xcgsbr = (Cgdr - cgso) * omega; xcgbbr = -(xcggbr + xcgdbr + xcgsbr); xcdgbr = (Csgr - cgdo) * omega; xcsgbr = (Cdgr - cgso) * omega; xcbgb = (here->BSIM4cbgb - pParam->BSIM4cgbo) * omega; xcdgmb = xcsgmb = xcbgmb = 0.0; } xcddbr = (here->BSIM4capbd + cgdo + Cssr) * omega; xcdsbr = Csdr * omega; xcsdbr = Cdsr * omega; xcssbr = (Cddr + here->BSIM4capbs + cgso) * omega; if (!here->BSIM4rbodyMod) { xcdbbr = -(xcdgbr + xcddbr + xcdsbr + xcdgmb); xcsbbr = -(xcsgbr + xcsdbr + xcssbr + xcsgmb); xcbdb = (here->BSIM4cbsb - here->BSIM4capbd) * omega; xcbsb = (here->BSIM4cbdb - here->BSIM4capbs) * omega; xcdbdb = 0.0; } else { xcdbbr = -(xcdgbr + xcddbr + xcdsbr + xcdgmb) + here->BSIM4capbd * omega; xcsbbr = Cdbr * omega; xcbdb = here->BSIM4cbsb * omega; xcbsb = here->BSIM4cbdb * omega; xcdbdb = -here->BSIM4capbd * omega; xcsbsb = -here->BSIM4capbs * omega; } xcbbb = -(xcbgb + xcbdb + xcbsb + xcbgmb); xcdgbi = Csgi; xcsgbi = Cdgi; xcddbi = Cssi; xcdsbi = Csdi; xcsdbi = Cdsi; xcssbi = Cddi; xcdbbi = Csbi; xcsbbi = Cdbi; xcggbi = Cggi; xcgdbi = Cgsi; xcgsbi = Cgdi; xcgbbi = Cgbi; } if (model->BSIM4rdsMod == 1) { gstot = here->BSIM4gstot; gstotd = here->BSIM4gstotd; gstotg = here->BSIM4gstotg; gstots = here->BSIM4gstots - gstot; gstotb = here->BSIM4gstotb; gdtot = here->BSIM4gdtot; gdtotd = here->BSIM4gdtotd - gdtot; gdtotg = here->BSIM4gdtotg; gdtots = here->BSIM4gdtots; gdtotb = here->BSIM4gdtotb; } else { gstot = gstotd = gstotg = gstots = gstotb = 0.0; gdtot = gdtotd = gdtotg = gdtots = gdtotb = 0.0; } /* * Loading AC matrix */ m = here->BSIM4m; if (!model->BSIM4rdsMod) { gdpr = here->BSIM4drainConductance; gspr = here->BSIM4sourceConductance; } else gdpr = gspr = 0.0; if (!here->BSIM4rbodyMod) { gjbd = here->BSIM4gbd; gjbs = here->BSIM4gbs; } else gjbd = gjbs = 0.0; geltd = here->BSIM4grgeltd; if (here->BSIM4rgateMod == 1) { *(here->BSIM4GEgePtr) += m * geltd; *(here->BSIM4GPgePtr) -= m * geltd; *(here->BSIM4GEgpPtr) -= m * geltd; *(here->BSIM4GPgpPtr +1) += m * xcggbr; *(here->BSIM4GPgpPtr) += m * (geltd + xcggbi + gIgtotg); *(here->BSIM4GPdpPtr +1) += m * xcgdbr; *(here->BSIM4GPdpPtr) += m * (xcgdbi + gIgtotd); *(here->BSIM4GPspPtr +1) += m * xcgsbr; *(here->BSIM4GPspPtr) += m * (xcgsbi + gIgtots); *(here->BSIM4GPbpPtr +1) += m * xcgbbr; *(here->BSIM4GPbpPtr) += m * (xcgbbi + gIgtotb); } /* WDLiu: gcrg already subtracted from all gcrgg below */ else if (here->BSIM4rgateMod == 2) { *(here->BSIM4GEgePtr) += m * gcrg; *(here->BSIM4GEgpPtr) += m * gcrgg; *(here->BSIM4GEdpPtr) += m * gcrgd; *(here->BSIM4GEspPtr) += m * gcrgs; *(here->BSIM4GEbpPtr) += m * gcrgb; *(here->BSIM4GPgePtr) -= m * gcrg; *(here->BSIM4GPgpPtr +1) += m * xcggbr; *(here->BSIM4GPgpPtr) -= m * (gcrgg - xcggbi - gIgtotg); *(here->BSIM4GPdpPtr +1) += m * xcgdbr; *(here->BSIM4GPdpPtr) -= m * (gcrgd - xcgdbi - gIgtotd); *(here->BSIM4GPspPtr +1) += m * xcgsbr; *(here->BSIM4GPspPtr) -= m * (gcrgs - xcgsbi - gIgtots); *(here->BSIM4GPbpPtr +1) += m * xcgbbr; *(here->BSIM4GPbpPtr) -= m * (gcrgb - xcgbbi - gIgtotb); } else if (here->BSIM4rgateMod == 3) { *(here->BSIM4GEgePtr) += m * geltd; *(here->BSIM4GEgmPtr) -= m * geltd; *(here->BSIM4GMgePtr) -= m * geltd; *(here->BSIM4GMgmPtr) += m * (geltd + gcrg); *(here->BSIM4GMgmPtr +1) += m * xcgmgmb; *(here->BSIM4GMdpPtr) += m * gcrgd; *(here->BSIM4GMdpPtr +1) += m * xcgmdb; *(here->BSIM4GMgpPtr) += m * gcrgg; *(here->BSIM4GMspPtr) += m * gcrgs; *(here->BSIM4GMspPtr +1) += m * xcgmsb; *(here->BSIM4GMbpPtr) += m * gcrgb; *(here->BSIM4GMbpPtr +1) += m * xcgmbb; *(here->BSIM4DPgmPtr +1) += m * xcdgmb; *(here->BSIM4GPgmPtr) -= m * gcrg; *(here->BSIM4SPgmPtr +1) += m * xcsgmb; *(here->BSIM4BPgmPtr +1) += m * xcbgmb; *(here->BSIM4GPgpPtr) -= m * (gcrgg - xcggbi - gIgtotg); *(here->BSIM4GPgpPtr +1) += m * xcggbr; *(here->BSIM4GPdpPtr) -= m * (gcrgd - xcgdbi - gIgtotd); *(here->BSIM4GPdpPtr +1) += m * xcgdbr; *(here->BSIM4GPspPtr) -= m * (gcrgs - xcgsbi - gIgtots); *(here->BSIM4GPspPtr +1) += m * xcgsbr; *(here->BSIM4GPbpPtr) -= m * (gcrgb - xcgbbi - gIgtotb); *(here->BSIM4GPbpPtr +1) += m * xcgbbr; } else { *(here->BSIM4GPgpPtr +1) += m * xcggbr; *(here->BSIM4GPgpPtr) += m * (xcggbi + gIgtotg); *(here->BSIM4GPdpPtr +1) += m * xcgdbr; *(here->BSIM4GPdpPtr) += m * (xcgdbi + gIgtotd); *(here->BSIM4GPspPtr +1) += m * xcgsbr; *(here->BSIM4GPspPtr) += m * (xcgsbi + gIgtots); *(here->BSIM4GPbpPtr +1) += m * xcgbbr; *(here->BSIM4GPbpPtr) += m * (xcgbbi + gIgtotb); } if (model->BSIM4rdsMod) { (*(here->BSIM4DgpPtr) += m * gdtotg); (*(here->BSIM4DspPtr) += m * gdtots); (*(here->BSIM4DbpPtr) += m * gdtotb); (*(here->BSIM4SdpPtr) += m * gstotd); (*(here->BSIM4SgpPtr) += m * gstotg); (*(here->BSIM4SbpPtr) += m * gstotb); } *(here->BSIM4DPdpPtr +1) += m * (xcddbr + gdsi + RevSumi); *(here->BSIM4DPdpPtr) += m * (gdpr + xcddbi + gdsr + here->BSIM4gbd - gdtotd + RevSumr + gbdpdp - gIdtotd); *(here->BSIM4DPdPtr) -= m * (gdpr + gdtot); *(here->BSIM4DPgpPtr +1) += m * (xcdgbr + Gmi); *(here->BSIM4DPgpPtr) += m * (Gmr + xcdgbi - gdtotg + gbdpg - gIdtotg); *(here->BSIM4DPspPtr +1) += m * (xcdsbr - gdsi - FwdSumi); *(here->BSIM4DPspPtr) -= m * (gdsr - xcdsbi + FwdSumr + gdtots - gbdpsp + gIdtots); *(here->BSIM4DPbpPtr +1) += m * (xcdbbr + Gmbsi); *(here->BSIM4DPbpPtr) -= m * (gjbd + gdtotb - xcdbbi - Gmbsr - gbdpb + gIdtotb); *(here->BSIM4DdpPtr) -= m * (gdpr - gdtotd); *(here->BSIM4DdPtr) += m * (gdpr + gdtot); *(here->BSIM4SPdpPtr +1) += m * (xcsdbr - gdsi - RevSumi); *(here->BSIM4SPdpPtr) -= m * (gdsr - xcsdbi + gstotd + RevSumr - gbspdp + gIstotd); *(here->BSIM4SPgpPtr +1) += m * (xcsgbr - Gmi); *(here->BSIM4SPgpPtr) -= m * (Gmr - xcsgbi + gstotg - gbspg + gIstotg); *(here->BSIM4SPspPtr +1) += m * (xcssbr + gdsi + FwdSumi); *(here->BSIM4SPspPtr) += m * (gspr + xcssbi + gdsr + here->BSIM4gbs - gstots + FwdSumr + gbspsp - gIstots); *(here->BSIM4SPsPtr) -= m * (gspr + gstot); *(here->BSIM4SPbpPtr +1) += m * (xcsbbr - Gmbsi); *(here->BSIM4SPbpPtr) -= m * (gjbs + gstotb - xcsbbi + Gmbsr - gbspb + gIstotb); *(here->BSIM4SspPtr) -= m * (gspr - gstots); *(here->BSIM4SsPtr) += m * (gspr + gstot); *(here->BSIM4BPdpPtr +1) += m * xcbdb; *(here->BSIM4BPdpPtr) -= m * (gjbd - gbbdp + gIbtotd); *(here->BSIM4BPgpPtr +1) += m * xcbgb; *(here->BSIM4BPgpPtr) -= m * (here->BSIM4gbgs + gIbtotg); *(here->BSIM4BPspPtr +1) += m * xcbsb; *(here->BSIM4BPspPtr) -= m * (gjbs - gbbsp + gIbtots); *(here->BSIM4BPbpPtr +1) += m * xcbbb; *(here->BSIM4BPbpPtr) += m * (gjbd + gjbs - here->BSIM4gbbs - gIbtotb); ggidld = here->BSIM4ggidld; ggidlg = here->BSIM4ggidlg; ggidlb = here->BSIM4ggidlb; ggislg = here->BSIM4ggislg; ggisls = here->BSIM4ggisls; ggislb = here->BSIM4ggislb; /* stamp gidl */ (*(here->BSIM4DPdpPtr) += m * ggidld); (*(here->BSIM4DPgpPtr) += m * ggidlg); (*(here->BSIM4DPspPtr) -= m * ((ggidlg + ggidld) + ggidlb)); (*(here->BSIM4DPbpPtr) += m * ggidlb); (*(here->BSIM4BPdpPtr) -= m * ggidld); (*(here->BSIM4BPgpPtr) -= m * ggidlg); (*(here->BSIM4BPspPtr) += m * ((ggidlg + ggidld) + ggidlb)); (*(here->BSIM4BPbpPtr) -= m * ggidlb); /* stamp gisl */ (*(here->BSIM4SPdpPtr) -= m * ((ggisls + ggislg) + ggislb)); (*(here->BSIM4SPgpPtr) += m * ggislg); (*(here->BSIM4SPspPtr) += m * ggisls); (*(here->BSIM4SPbpPtr) += m * ggislb); (*(here->BSIM4BPdpPtr) += m * ((ggislg + ggisls) + ggislb)); (*(here->BSIM4BPgpPtr) -= m * ggislg); (*(here->BSIM4BPspPtr) -= m * ggisls); (*(here->BSIM4BPbpPtr) -= m * ggislb); if (here->BSIM4rbodyMod) { (*(here->BSIM4DPdbPtr +1) += m * xcdbdb); (*(here->BSIM4DPdbPtr) -= m * here->BSIM4gbd); (*(here->BSIM4SPsbPtr +1) += m * xcsbsb); (*(here->BSIM4SPsbPtr) -= m * here->BSIM4gbs); (*(here->BSIM4DBdpPtr +1) += m * xcdbdb); (*(here->BSIM4DBdpPtr) -= m * here->BSIM4gbd); (*(here->BSIM4DBdbPtr +1) -= m * xcdbdb); (*(here->BSIM4DBdbPtr) += m * (here->BSIM4gbd + here->BSIM4grbpd + here->BSIM4grbdb)); (*(here->BSIM4DBbpPtr) -= m * here->BSIM4grbpd); (*(here->BSIM4DBbPtr) -= m * here->BSIM4grbdb); (*(here->BSIM4BPdbPtr) -= m * here->BSIM4grbpd); (*(here->BSIM4BPbPtr) -= m * here->BSIM4grbpb); (*(here->BSIM4BPsbPtr) -= m * here->BSIM4grbps); (*(here->BSIM4BPbpPtr) += m * (here->BSIM4grbpd + here->BSIM4grbps + here->BSIM4grbpb)); /* WDLiu: (-here->BSIM4gbbs) already added to BPbpPtr */ (*(here->BSIM4SBspPtr +1) += m * xcsbsb); (*(here->BSIM4SBspPtr) -= m * here->BSIM4gbs); (*(here->BSIM4SBbpPtr) -= m * here->BSIM4grbps); (*(here->BSIM4SBbPtr) -= m * here->BSIM4grbsb); (*(here->BSIM4SBsbPtr +1) -= m * xcsbsb); (*(here->BSIM4SBsbPtr) += m * (here->BSIM4gbs + here->BSIM4grbps + here->BSIM4grbsb)); (*(here->BSIM4BdbPtr) -= m * here->BSIM4grbdb); (*(here->BSIM4BbpPtr) -= m * here->BSIM4grbpb); (*(here->BSIM4BsbPtr) -= m * here->BSIM4grbsb); (*(here->BSIM4BbPtr) += m * (here->BSIM4grbsb + here->BSIM4grbdb + here->BSIM4grbpb)); } /* * WDLiu: The internal charge node generated for transient NQS is not needed for * AC NQS. The following is not doing a real job, but we have to keep it; * otherwise a singular AC NQS matrix may occur if the transient NQS is on. * The charge node is isolated from the instance. */ if (here->BSIM4trnqsMod) { (*(here->BSIM4QqPtr) += m * 1.0); (*(here->BSIM4QgpPtr) += 0.0); (*(here->BSIM4QdpPtr) += 0.0); (*(here->BSIM4QspPtr) += 0.0); (*(here->BSIM4QbpPtr) += 0.0); (*(here->BSIM4DPqPtr) += 0.0); (*(here->BSIM4SPqPtr) += 0.0); (*(here->BSIM4GPqPtr) += 0.0); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4/b4soachk.c0000644000175000017500000003616113546075722022052 0ustar carstencarsten/********** Copyright 2013 Dietmar Warning. All rights reserved. Author: 2013 Dietmar Warning **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4def.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/cpdefs.h" int BSIM4soaCheck(CKTcircuit *ckt, GENmodel *inModel) { BSIM4model *model = (BSIM4model *) inModel; BSIM4instance *here; double vgs, vgd, vgb, vds, vbs, vbd; /* actual mos voltages */ int maxwarns; static int warns_vgs = 0, warns_vgd = 0, warns_vgb = 0, warns_vds = 0, warns_vbs = 0, warns_vbd = 0; if (!ckt) { warns_vgs = 0; warns_vgd = 0; warns_vgb = 0; warns_vds = 0; warns_vbs = 0; warns_vbd = 0; return OK; } maxwarns = ckt->CKTsoaMaxWarns; for (; model; model = BSIM4nextModel(model)) { for (here = BSIM4instances(model); here; here = BSIM4nextInstance(here)) { vgs = ckt->CKTrhsOld [here->BSIM4gNodePrime] - ckt->CKTrhsOld [here->BSIM4sNodePrime]; vgd = ckt->CKTrhsOld [here->BSIM4gNodePrime] - ckt->CKTrhsOld [here->BSIM4dNodePrime]; vgb = ckt->CKTrhsOld [here->BSIM4gNodePrime] - ckt->CKTrhsOld [here->BSIM4bNodePrime]; vds = ckt->CKTrhsOld [here->BSIM4dNodePrime] - ckt->CKTrhsOld [here->BSIM4sNodePrime]; vbs = ckt->CKTrhsOld [here->BSIM4bNodePrime] - ckt->CKTrhsOld [here->BSIM4sNodePrime]; vbd = ckt->CKTrhsOld [here->BSIM4bNodePrime] - ckt->CKTrhsOld [here->BSIM4dNodePrime]; if (!model->BSIM4vgsrMaxGiven) { if (fabs(vgs) > model->BSIM4vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->BSIM4vgsMax); warns_vgs++; } if (!model->BSIM4vgbMaxGiven) { if (fabs(vgb) > model->BSIM4vgsMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgs_max=%g\n", vgb, model->BSIM4vgsMax); warns_vgb++; } } else { if (fabs(vgb) > model->BSIM4vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM4vgbMax); warns_vgb++; } } } else { if (model->BSIM4type > 0) { if (vgs > model->BSIM4vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->BSIM4vgsMax); warns_vgs++; } if (-1*vgs > model->BSIM4vgsrMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgsr_max=%g\n", vgs, model->BSIM4vgsrMax); warns_vgs++; } } else { if (vgs > model->BSIM4vgsrMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgsr_max=%g\n", vgs, model->BSIM4vgsrMax); warns_vgs++; } if (-1*vgs > model->BSIM4vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->BSIM4vgsMax); warns_vgs++; } } } if (!model->BSIM4vgdrMaxGiven) { if (fabs(vgd) > model->BSIM4vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->BSIM4vgdMax); warns_vgd++; } } else { if (model->BSIM4type > 0) { if (vgd > model->BSIM4vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->BSIM4vgdMax); warns_vgd++; } if (-1*vgd > model->BSIM4vgdrMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgdr_max=%g\n", vgd, model->BSIM4vgdrMax); warns_vgd++; } } else { if (vgd > model->BSIM4vgdrMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgdr_max=%g\n", vgd, model->BSIM4vgdrMax); warns_vgd++; } if (-1*vgd > model->BSIM4vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->BSIM4vgdMax); warns_vgd++; } } } if (fabs(vds) > model->BSIM4vdsMax) if (warns_vds < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vds=%g has exceeded Vds_max=%g\n", vds, model->BSIM4vdsMax); warns_vds++; } if (!model->BSIM4vgbrMaxGiven) { if (fabs(vgb) > model->BSIM4vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM4vgbMax); warns_vgb++; } } else { if (model->BSIM4type > 0) { if (vgb > model->BSIM4vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM4vgbMax); warns_vgb++; } if (-1*vgb > model->BSIM4vgbrMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgbr_max=%g\n", vgb, model->BSIM4vgbrMax); warns_vgb++; } } else { if (vgb > model->BSIM4vgbrMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgbr_max=%g\n", vgb, model->BSIM4vgbrMax); warns_vgb++; } if (-1*vgb > model->BSIM4vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM4vgbMax); warns_vgb++; } } } if (!model->BSIM4vbsrMaxGiven) { if (!model->BSIM4vbsMaxGiven) { if (fabs(vbs) > model->BSIM4vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->BSIM4vbdMax); warns_vbs++; } } else { if (fabs(vbs) > model->BSIM4vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->BSIM4vbsMax); warns_vbs++; } } } else { if (!model->BSIM4vbsMaxGiven) { if (model->BSIM4type > 0) { if (vbs > model->BSIM4vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->BSIM4vbdMax); warns_vbs++; } if (-1*vbs > model->BSIM4vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM4vbsrMax); warns_vbs++; } } else { if (vbs > model->BSIM4vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM4vbsrMax); warns_vbs++; } if (-1*vbs > model->BSIM4vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->BSIM4vbdMax); warns_vbs++; } } } else { if (model->BSIM4type > 0) { if (vbs > model->BSIM4vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->BSIM4vbsMax); warns_vbs++; } if (-1*vbs > model->BSIM4vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM4vbsrMax); warns_vbs++; } } else { if (vbs > model->BSIM4vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM4vbsrMax); warns_vbs++; } if (-1*vbs > model->BSIM4vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->BSIM4vbsMax); warns_vbs++; } } } } if (!model->BSIM4vbdrMaxGiven) { if (fabs(vbd) > model->BSIM4vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->BSIM4vbdMax); warns_vbd++; } } else { if (model->BSIM4type > 0) { if (vbd > model->BSIM4vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->BSIM4vbdMax); warns_vbd++; } if (-1*vbd > model->BSIM4vbdrMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbdr_max=%g\n", vbd, model->BSIM4vbdrMax); warns_vbd++; } } else { if (vbd > model->BSIM4vbdrMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbdr_max=%g\n", vbd, model->BSIM4vbdrMax); warns_vbd++; } if (-1*vbd > model->BSIM4vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->BSIM4vbdMax); warns_vbd++; } } } } } return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim4/b4geo.c0000644000175000017500000004067013546075722021354 0ustar carstencarsten/* ****************************************************************************** * BSIM4 4.8.1 released by Chetan Kumar Dabhi 2/15/2017 * * BSIM4 Model Equations * ****************************************************************************** ****************************************************************************** * Copyright 2017 Regents of the University of California. * * All rights reserved. * * * * Project Director: Prof. Chenming Hu. * * Authors: Gary W. Ng, Weidong Liu, Xuemei Xi, Mohan Dunga, Wenwei Yang * * Ali Niknejad, Shivendra Singh Parihar, Chetan Kumar Dabhi * * Yogesh Singh Chauhan, Sayeef Salahuddin, Chenming Hu * ****************************************************************************** ****************************************************************************** * CMC In-Code Statement * * * * The Developer agrees that the following statement will appear in the * * model code that has been adopted as a CMC Standard. * * * * Software is distributed as is, completely without warranty or service * * support. The University of California and its employees are not liable * * for the condition or performance of the software. * * * * The University of California owns the copyright and grants users a * * perpetual, irrevocable, worldwide, non-exclusive, royalty-free license * * with respect to the software as set forth below. * * * * The University of California hereby disclaims all implied warranties. * * * * The University of California grants the users the right to modify, * * copy, and redistribute the software and documentation, both within * * the user's organization and externally, subject to the following * * restrictions: * * * * 1. The users agree not to charge for the University of California code * * itself but may charge for additions, extensions, or support. * * * * 2. In any product based on the software, the users agree to * * acknowledge the University of California that developed the * * software. This acknowledgment shall appear in the product * * documentation. * * * * 3. Redistributions to others of source code and documentation must * * retain the copyright notice, disclaimer, and list of conditions. * * * * 4. Redistributions to others in binary form must reproduce the * * copyright notice, disclaimer, and list of conditions in the * * documentation and/or other materials provided with the * * distribution. * * * * Agreed to on ______Feb. 15, 2017______________ * * * * By: ____University of California, Berkeley___ * * ____Chenming Hu__________________________ * * ____Professor in Graduate School ________ * * * ****************************************************************************** */ #include "ngspice/ngspice.h" #include "bsim4def.h" /* * WDLiu: * This subrutine is a special module to process the geometry dependent * parasitics for BSIM4, which calculates Ps, Pd, As, Ad, and Rs and Rd * for multi-fingers and varous GEO and RGEO options. */ static int BSIM4NumFingerDiff( double nf, int minSD, double *nuIntD, double *nuEndD, double *nuIntS, double *nuEndS) { int NF; NF = (int)nf; if ((NF%2) != 0) { *nuEndD = *nuEndS = 1.0; *nuIntD = *nuIntS = 2.0 * MAX((nf - 1.0) / 2.0, 0.0); } else { if (minSD == 1) /* minimize # of source */ { *nuEndD = 2.0; *nuIntD = 2.0 * MAX((nf / 2.0 - 1.0), 0.0); *nuEndS = 0.0; *nuIntS = nf; } else { *nuEndD = 0.0; *nuIntD = nf; *nuEndS = 2.0; *nuIntS = 2.0 * MAX((nf / 2.0 - 1.0), 0.0); } } return 0; } int BSIM4PAeffGeo( double nf, int geo, int minSD, double Weffcj, double DMCG, double DMCI, double DMDG, double *Ps, double *Pd, double *As, double *Ad) { double T0, T1, T2; double ADiso, ADsha, ADmer, ASiso, ASsha, ASmer; double PDiso, PDsha, PDmer, PSiso, PSsha, PSmer; double nuIntD = 0.0, nuEndD = 0.0, nuIntS = 0.0, nuEndS = 0.0; if (geo < 9) /* For geo = 9 and 10, the numbers of S/D diffusions already known */ BSIM4NumFingerDiff(nf, minSD, &nuIntD, &nuEndD, &nuIntS, &nuEndS); T0 = DMCG + DMCI; T1 = DMCG + DMCG; T2 = DMDG + DMDG; PSiso = PDiso = T0 + T0 + Weffcj; PSsha = PDsha = T1; PSmer = PDmer = T2; ASiso = ADiso = T0 * Weffcj; ASsha = ADsha = DMCG * Weffcj; ASmer = ADmer = DMDG * Weffcj; switch(geo) { case 0: *Ps = nuEndS * PSiso + nuIntS * PSsha; *Pd = nuEndD * PDiso + nuIntD * PDsha; *As = nuEndS * ASiso + nuIntS * ASsha; *Ad = nuEndD * ADiso + nuIntD * ADsha; break; case 1: *Ps = nuEndS * PSiso + nuIntS * PSsha; *Pd = (nuEndD + nuIntD) * PDsha; *As = nuEndS * ASiso + nuIntS * ASsha; *Ad = (nuEndD + nuIntD) * ADsha; break; case 2: *Ps = (nuEndS + nuIntS) * PSsha; *Pd = nuEndD * PDiso + nuIntD * PDsha; *As = (nuEndS + nuIntS) * ASsha; *Ad = nuEndD * ADiso + nuIntD * ADsha; break; case 3: *Ps = (nuEndS + nuIntS) * PSsha; *Pd = (nuEndD + nuIntD) * PDsha; *As = (nuEndS + nuIntS) * ASsha; *Ad = (nuEndD + nuIntD) * ADsha; break; case 4: *Ps = nuEndS * PSiso + nuIntS * PSsha; *Pd = nuEndD * PDmer + nuIntD * PDsha; *As = nuEndS * ASiso + nuIntS * ASsha; *Ad = nuEndD * ADmer + nuIntD * ADsha; break; case 5: *Ps = (nuEndS + nuIntS) * PSsha; *Pd = nuEndD * PDmer + nuIntD * PDsha; *As = (nuEndS + nuIntS) * ASsha; *Ad = nuEndD * ADmer + nuIntD * ADsha; break; case 6: *Ps = nuEndS * PSmer + nuIntS * PSsha; *Pd = nuEndD * PDiso + nuIntD * PDsha; *As = nuEndS * ASmer + nuIntS * ASsha; *Ad = nuEndD * ADiso + nuIntD * ADsha; break; case 7: *Ps = nuEndS * PSmer + nuIntS * PSsha; *Pd = (nuEndD + nuIntD) * PDsha; *As = nuEndS * ASmer + nuIntS * ASsha; *Ad = (nuEndD + nuIntD) * ADsha; break; case 8: *Ps = nuEndS * PSmer + nuIntS * PSsha; *Pd = nuEndD * PDmer + nuIntD * PDsha; *As = nuEndS * ASmer + nuIntS * ASsha; *Ad = nuEndD * ADmer + nuIntD * ADsha; break; case 9: /* geo = 9 and 10 happen only when nf = even */ *Ps = PSiso + (nf - 1.0) * PSsha; *Pd = nf * PDsha; *As = ASiso + (nf - 1.0) * ASsha; *Ad = nf * ADsha; break; case 10: *Ps = nf * PSsha; *Pd = PDiso + (nf - 1.0) * PDsha; *As = nf * ASsha; *Ad = ADiso + (nf - 1.0) * ADsha; break; default: printf("Warning: Specified GEO = %d not matched\n", geo); } return 0; } int BSIM4RdseffGeo( double nf, int geo, int rgeo, int minSD, double Weffcj, double Rsh, double DMCG, double DMCI, double DMDG, int Type, double *Rtot) { double Rint=0.0, Rend = 0.0; double nuIntD = 0.0, nuEndD = 0.0, nuIntS = 0.0, nuEndS = 0.0; if (geo < 9) /* since geo = 9 and 10 only happen when nf = even */ { BSIM4NumFingerDiff(nf, minSD, &nuIntD, &nuEndD, &nuIntS, &nuEndS); /* Internal S/D resistance -- assume shared S or D and all wide contacts */ if (Type == 1) { if (nuIntS == 0.0) Rint = 0.0; else Rint = Rsh * DMCG / ( Weffcj * nuIntS); } else { if (nuIntD == 0.0) Rint = 0.0; else Rint = Rsh * DMCG / ( Weffcj * nuIntD); } } /* End S/D resistance -- geo dependent */ switch(geo) { case 0: if (Type == 1) BSIM4RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else BSIM4RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 1: if (Type == 1) BSIM4RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else BSIM4RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 2: if (Type == 1) BSIM4RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else BSIM4RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 3: if (Type == 1) BSIM4RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else BSIM4RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 4: if (Type == 1) BSIM4RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else Rend = Rsh * DMDG / Weffcj; break; case 5: if (Type == 1) BSIM4RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else Rend = Rsh * DMDG / (Weffcj * nuEndD); break; case 6: if (Type == 1) Rend = Rsh * DMDG / Weffcj; else BSIM4RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 7: if (Type == 1) Rend = Rsh * DMDG / (Weffcj * nuEndS); else BSIM4RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 8: Rend = Rsh * DMDG / Weffcj; break; case 9: /* all wide contacts assumed for geo = 9 and 10 */ if (Type == 1) { Rend = 0.5 * Rsh * DMCG / Weffcj; if (nf == 2.0) Rint = 0.0; else Rint = Rsh * DMCG / (Weffcj * (nf - 2.0)); } else { Rend = 0.0; Rint = Rsh * DMCG / (Weffcj * nf); } break; case 10: if (Type == 1) { Rend = 0.0; Rint = Rsh * DMCG / (Weffcj * nf); } else { Rend = 0.5 * Rsh * DMCG / Weffcj;; if (nf == 2.0) Rint = 0.0; else Rint = Rsh * DMCG / (Weffcj * (nf - 2.0)); } break; default: printf("Warning: Specified GEO = %d not matched\n", geo); } if (Rint <= 0.0) *Rtot = Rend; else if (Rend <= 0.0) *Rtot = Rint; else *Rtot = Rint * Rend / (Rint + Rend); if(*Rtot==0.0) printf("Warning: Zero resistance returned from RdseffGeo\n"); return 0; } int BSIM4RdsEndIso( double Weffcj, double Rsh, double DMCG, double DMCI, double DMDG, double nuEnd, int rgeo, int Type, double *Rend) { NG_IGNORE(DMDG); if (Type == 1) { switch(rgeo) { case 1: case 2: case 5: if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * DMCG / (Weffcj * nuEnd); break; case 3: case 4: case 6: if ((DMCG + DMCI) == 0.0) printf("(DMCG + DMCI) can not be equal to zero\n"); if ((nuEnd == 0.0)||((DMCG+DMCI)==0.0)) *Rend = 0.0; else *Rend = Rsh * Weffcj / (3.0 * nuEnd * (DMCG + DMCI)); break; default: printf("Warning: Specified RGEO = %d not matched\n", rgeo); } } else { switch(rgeo) { case 1: case 3: case 7: if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * DMCG / (Weffcj * nuEnd); break; case 2: case 4: case 8: if ((DMCG + DMCI) == 0.0) printf("(DMCG + DMCI) can not be equal to zero\n"); if ((nuEnd == 0.0)||((DMCG + DMCI)==0.0)) *Rend = 0.0; else *Rend = Rsh * Weffcj / (3.0 * nuEnd * (DMCG + DMCI)); break; default: printf("Warning: Specified RGEO = %d not matched\n", rgeo); } } return 0; } int BSIM4RdsEndSha( double Weffcj, double Rsh, double DMCG, double DMCI, double DMDG, double nuEnd, int rgeo, int Type, double *Rend) { NG_IGNORE(DMCI); NG_IGNORE(DMDG); if (Type == 1) { switch(rgeo) { case 1: case 2: case 5: if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * DMCG / (Weffcj * nuEnd); break; case 3: case 4: case 6: if (DMCG == 0.0) printf("DMCG can not be equal to zero\n"); if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * Weffcj / (6.0 * nuEnd * DMCG); break; default: printf("Warning: Specified RGEO = %d not matched\n", rgeo); } } else { switch(rgeo) { case 1: case 3: case 7: if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * DMCG / (Weffcj * nuEnd); break; case 2: case 4: case 8: if (DMCG == 0.0) printf("DMCG can not be equal to zero\n"); if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * Weffcj / (6.0 * nuEnd * DMCG); break; default: printf("Warning: Specified RGEO = %d not matched\n", rgeo); } } return 0; } tmpk8ny_4pz/src/spicelib/devices/vdmos/0000755000175000017500000000000013546075722020313 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/vdmos/vdmosext.h0000644000175000017500000000177113546075722022343 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ extern int VDMOSacLoad(GENmodel *,CKTcircuit*); extern int VDMOSask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int VDMOSgetic(GENmodel*,CKTcircuit*); extern int VDMOSload(GENmodel*,CKTcircuit*); extern int VDMOSmAsk(CKTcircuit *,GENmodel *,int,IFvalue*); extern int VDMOSmParam(int,IFvalue*,GENmodel*); extern int VDMOSparam(int,IFvalue*,GENinstance*,IFvalue*); extern int VDMOSpzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int VDMOSsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int VDMOSunsetup(GENmodel*,CKTcircuit*); extern int VDMOStemp(GENmodel*,CKTcircuit*); extern int VDMOStrunc(GENmodel*,CKTcircuit*,double*); extern int VDMOSconvTest(GENmodel*,CKTcircuit*); extern int VDMOSdisto(int,GENmodel*,CKTcircuit*); extern int VDMOSnoise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int VDMOSdSetup(GENmodel*,CKTcircuit*); tmpk8ny_4pz/src/spicelib/devices/vdmos/vdmosinit.c0000644000175000017500000000324413546075722022476 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "vdmositf.h" #include "vdmosext.h" #include "vdmosinit.h" SPICEdev VDMOSinfo = { .DEVpublic = { .name = "VDMOS", .description = "DMOS model based on Level 1 MOSFET model", .terms = &VDMOSnSize, .numNames = &VDMOSnSize, .termNames = VDMOSnames, .numInstanceParms = &VDMOSpTSize, .instanceParms = VDMOSpTable, .numModelParms = &VDMOSmPTSize, .modelParms = VDMOSmPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = VDMOSparam, .DEVmodParam = VDMOSmParam, .DEVload = VDMOSload, .DEVsetup = VDMOSsetup, .DEVunsetup = VDMOSunsetup, .DEVpzSetup = VDMOSsetup, .DEVtemperature = VDMOStemp, .DEVtrunc = VDMOStrunc, .DEVfindBranch = NULL, .DEVacLoad = VDMOSacLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = VDMOSgetic, .DEVask = VDMOSask, .DEVmodAsk = VDMOSmAsk, .DEVpzLoad = VDMOSpzLoad, .DEVconvTest = VDMOSconvTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = VDMOSdisto, .DEVnoise = VDMOSnoise, .DEVsoaCheck = NULL, .DEVinstSize = &VDMOSiSize, .DEVmodSize = &VDMOSmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_vdmos_info(void) { return &VDMOSinfo; } tmpk8ny_4pz/src/spicelib/devices/vdmos/vdmosset.c0000644000175000017500000002417013546075722022327 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* load the VDMOS device structure with those pointers needed later * for fast matrix loading */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "vdmosdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VDMOSsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { VDMOSmodel *model = (VDMOSmodel *)inModel; VDMOSinstance *here; int error; CKTnode *tmp; /* loop through all the VDMOS device models */ for (; model != NULL; model = VDMOSnextModel(model)) { if (!model->VDMOStypeGiven) { model->VDMOStype = NMOS; } if (!model->VDIOjctSatCurGiven) { model->VDIOjctSatCur = 1e-14; } if (!model->VDMOStransconductanceGiven) { model->VDMOStransconductance = 1; } if (!model->VDMOSvt0Given) { model->VDMOSvt0 = 0; } if (!model->VDIOjunctionPotGiven) { model->VDIOjunctionPot = .8; } if (!model->VDIOgradCoeffGiven) { model->VDIOgradCoeff = .5; } if (!model->VDIOdepletionCapCoeffGiven) { model->VDIOdepletionCapCoeff = .5; } if (!model->VDMOSphiGiven) { model->VDMOSphi = .6; } if (!model->VDMOSlambdaGiven) { model->VDMOSlambda = 0; } if (!model->VDMOSthetaGiven) { model->VDMOStheta = 0; } if (!model->VDMOSfNcoefGiven) { model->VDMOSfNcoef = 0; } if (!model->VDMOSfNexpGiven) { model->VDMOSfNexp = 1; } if (!model->VDMOScgdminGiven) { model->VDMOScgdmin = 0; } if (!model->VDMOScgdmaxGiven) { model->VDMOScgdmax = 0; } if (!model->VDMOScgsGiven) { model->VDMOScgs = 0; } if (!model->VDMOSaGiven) { model->VDMOSa = 1.; } if (!model->VDMOSsubslGiven) { model->VDMOSsubsl = 0; } if (!model->VDMOSsubshiftGiven) { model->VDMOSsubshift = 0; } if (!model->VDMOSksubthresGiven) { model->VDMOSksubthres = 0; } if (!model->VDMOSmtrGiven) { model->VDMOSmtr = 1.; } if (!model->VDMOSDbvGiven) { model->VDMOSDbv = 1.0e30; } if (!model->VDMOSDibvGiven) { model->VDMOSDibv = 1.0e-10; } if (!model->VDIObrkdEmissionCoeffGiven) { model->VDIObrkdEmissionCoeff = 1.; } if (!model->VDMOSrdsGiven) { model->VDMOSrds = 1.0e30; } if (!model->VDMOSDnGiven) { model->VDMOSDn = 1.; } if (!model->VDIOtransitTimeGiven) { model->VDIOtransitTime = 0.; } if (!model->VDMOSDegGiven) { model->VDMOSDeg = 1.11; } /* loop through all the instances of the model */ for (here = VDMOSinstances(model); here != NULL; here = VDMOSnextInstance(here)) { /* allocate a chunk of the state vector */ here->VDMOSstates = *states; *states += VDMOSnumStates; if (!here->VDMOSicVDSGiven) { here->VDMOSicVDS = 0; } if (!here->VDMOSicVGSGiven) { here->VDMOSicVGS = 0; } if (!here->VDMOSvdsatGiven) { here->VDMOSvdsat = 0; } if (!here->VDMOSvonGiven) { here->VDMOSvon = 0; } if (model->VDMOSdrainResistance != 0) { if (here->VDMOSdNodePrime == 0) { error = CKTmkVolt(ckt, &tmp, here->VDMOSname, "drain"); if (error) return(error); here->VDMOSdNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt, here, 1, &tmpNode, &tmpName) == OK) { if (tmpNode->nsGiven) { tmp->nodeset = tmpNode->nodeset; tmp->nsGiven = tmpNode->nsGiven; } } } } } else { here->VDMOSdNodePrime = here->VDMOSdNode; } if (model->VDMOSsourceResistance != 0) { if (here->VDMOSsNodePrime == 0) { error = CKTmkVolt(ckt, &tmp, here->VDMOSname, "source"); if (error) return(error); here->VDMOSsNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt, here, 3, &tmpNode, &tmpName) == OK) { if (tmpNode->nsGiven) { tmp->nodeset = tmpNode->nodeset; tmp->nsGiven = tmpNode->nsGiven; } } } } } else { here->VDMOSsNodePrime = here->VDMOSsNode; } if (model->VDMOSgateResistance != 0 ) { if (here->VDMOSgNodePrime == 0) { error = CKTmkVolt(ckt, &tmp, here->VDMOSname, "gate"); if (error) return(error); here->VDMOSgNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt, here, 3, &tmpNode, &tmpName) == OK) { if (tmpNode->nsGiven) { tmp->nodeset = tmpNode->nodeset; tmp->nsGiven = tmpNode->nsGiven; } } } } } else { here->VDMOSgNodePrime = here->VDMOSgNode; } if (model->VDIOresistance != 0 ) { if (here->VDIOposPrimeNode == 0) { error = CKTmkVolt(ckt, &tmp, here->VDMOSname, "bulk diode"); if (error) return(error); here->VDIOposPrimeNode = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt, here, 3, &tmpNode, &tmpName) == OK) { if (tmpNode->nsGiven) { tmp->nodeset = tmpNode->nodeset; tmp->nsGiven = tmpNode->nsGiven; } } } } } else { here->VDIOposPrimeNode = here->VDMOSsNode; } /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(VDMOSDdPtr, VDMOSdNode, VDMOSdNode); TSTALLOC(VDMOSGgPtr, VDMOSgNode, VDMOSgNode); TSTALLOC(VDMOSSsPtr, VDMOSsNode, VDMOSsNode); TSTALLOC(VDMOSDPdpPtr, VDMOSdNodePrime, VDMOSdNodePrime); TSTALLOC(VDMOSSPspPtr, VDMOSsNodePrime, VDMOSsNodePrime); TSTALLOC(VDMOSGPgpPtr, VDMOSgNodePrime, VDMOSgNodePrime); TSTALLOC(VDMOSDdpPtr, VDMOSdNode, VDMOSdNodePrime); TSTALLOC(VDMOSGPdpPtr, VDMOSgNodePrime, VDMOSdNodePrime); TSTALLOC(VDMOSGPspPtr, VDMOSgNodePrime, VDMOSsNodePrime); TSTALLOC(VDMOSSspPtr, VDMOSsNode, VDMOSsNodePrime); TSTALLOC(VDMOSDPspPtr, VDMOSdNodePrime, VDMOSsNodePrime); TSTALLOC(VDMOSDPdPtr, VDMOSdNodePrime, VDMOSdNode); TSTALLOC(VDMOSDPgpPtr, VDMOSdNodePrime, VDMOSgNodePrime); TSTALLOC(VDMOSSPgpPtr, VDMOSsNodePrime, VDMOSgNodePrime); TSTALLOC(VDMOSSPsPtr, VDMOSsNodePrime, VDMOSsNode); TSTALLOC(VDMOSSPdpPtr, VDMOSsNodePrime, VDMOSdNodePrime); TSTALLOC(VDMOSGgpPtr, VDMOSgNode, VDMOSgNodePrime); TSTALLOC(VDMOSGPgPtr, VDMOSgNodePrime, VDMOSgNode); TSTALLOC(VDMOSDsPtr, VDMOSdNode, VDMOSsNode); TSTALLOC(VDMOSSdPtr, VDMOSsNode, VDMOSdNode); TSTALLOC(VDIORPdPtr, VDIOposPrimeNode, VDMOSdNode); TSTALLOC(VDIODrpPtr, VDMOSdNode, VDIOposPrimeNode); TSTALLOC(VDIOSrpPtr, VDMOSsNode, VDIOposPrimeNode); TSTALLOC(VDIORPsPtr, VDIOposPrimeNode, VDMOSsNode); TSTALLOC(VDIORPrpPtr, VDIOposPrimeNode, VDIOposPrimeNode); } } return(OK); } int VDMOSunsetup(GENmodel *inModel, CKTcircuit *ckt) { VDMOSmodel *model; VDMOSinstance *here; for (model = (VDMOSmodel *)inModel; model != NULL; model = VDMOSnextModel(model)) { for (here = VDMOSinstances(model); here != NULL; here = VDMOSnextInstance(here)) { if (here->VDMOSsNodePrime > 0 && here->VDMOSsNodePrime != here->VDMOSsNode) CKTdltNNum(ckt, here->VDMOSsNodePrime); here->VDMOSsNodePrime = 0; if (here->VDMOSdNodePrime > 0 && here->VDMOSdNodePrime != here->VDMOSdNode) CKTdltNNum(ckt, here->VDMOSdNodePrime); here->VDMOSdNodePrime = 0; if (here->VDMOSgNodePrime > 0 && here->VDMOSgNodePrime != here->VDMOSgNode) CKTdltNNum(ckt, here->VDMOSgNodePrime); here->VDMOSgNodePrime = 0; if (here->VDIOposPrimeNode > 0 && here->VDIOposPrimeNode != here->VDMOSsNode) CKTdltNNum(ckt, here->VDIOposPrimeNode); here->VDIOposPrimeNode = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/vdmos/vdmositf.h0000644000175000017500000000027213546075722022320 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_VDMOS #define DEV_VDMOS extern SPICEdev *get_vdmos_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/vdmos/vdmosload.c0000644000175000017500000010354513546075722022457 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes VDMOS: 2018 Holger Vogt **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "vdmosdefs.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" static double cweakinv2(double sl, double shift, double vgst, double vds, double lambda, double beta, double vt, double mtr, double theta); int VDMOSload(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current value into the * sparse matrix previously provided */ { VDMOSmodel *model = (VDMOSmodel *)inModel; VDMOSinstance *here; double Beta; double DrainSatCur; double SourceSatCur; double arg; double cdhat; double cdrain; double cdreq; double ceq; double ceqgd; double ceqgs; double delvds; double delvgd; double delvgs; double gcgd; double gcgs; double geq; double sarg; double vds; double vdsat; double vgd1; double vgd; double vgdo; double vgs1; double vgs; double von; double vt; #ifndef PREDICTOR double xfact = 0.0; #endif int xnrm; int xrev; double capgs = 0.0; /* total gate-source capacitance */ double capgd = 0.0; /* total gate-drain capacitance */ int Check; int error; double CGBdummy; /* loop through all the VDMOS device models */ for (; model != NULL; model = VDMOSnextModel(model)) { /* VDMOS capacitance parameters */ const double cgdmin = model->VDMOScgdmin; const double cgdmax = model->VDMOScgdmax; const double a = model->VDMOSa; const double cgs = model->VDMOScgs; /* loop through all the instances of the model */ for (here = VDMOSinstances(model); here != NULL; here = VDMOSnextInstance(here)) { vt = CONSTKoverQ * here->VDMOStemp; Check = 1; /* first, we compute a few useful values - these could be * pre-computed, but for historical reasons are still done * here. They may be moved at the expense of instance size */ DrainSatCur = here->VDMOSm * here->VDMOStSatCur; SourceSatCur = here->VDMOSm * here->VDMOStSatCur; Beta = here->VDMOStTransconductance * here->VDMOSm * here->VDMOSw / here->VDMOSl; /* * ok - now to do the start-up operations * * we must get values for vbs, vds, and vgs from somewhere * so we either predict them or recover them from last iteration * These are the two most common cases - either a prediction * step or the general iteration step and they * share some code, so we put them first - others later on */ if ((ckt->CKTmode & (MODEINITFLOAT | MODEINITPRED | MODEINITSMSIG | MODEINITTRAN)) || ((ckt->CKTmode & MODEINITFIX) && (!here->VDMOSoff))) { #ifndef PREDICTOR if (ckt->CKTmode & (MODEINITPRED | MODEINITTRAN)) { /* predictor step */ xfact = ckt->CKTdelta / ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->VDMOSvgs) = *(ckt->CKTstate1 + here->VDMOSvgs); vgs = (1 + xfact)* (*(ckt->CKTstate1 + here->VDMOSvgs)) - (xfact * (*(ckt->CKTstate2 + here->VDMOSvgs))); *(ckt->CKTstate0 + here->VDMOSvds) = *(ckt->CKTstate1 + here->VDMOSvds); vds = (1 + xfact)* (*(ckt->CKTstate1 + here->VDMOSvds)) - (xfact * (*(ckt->CKTstate2 + here->VDMOSvds))); } else { #endif /* PREDICTOR */ /* general iteration */ vgs = model->VDMOStype * ( *(ckt->CKTrhsOld + here->VDMOSgNodePrime) - *(ckt->CKTrhsOld + here->VDMOSsNodePrime)); vds = model->VDMOStype * ( *(ckt->CKTrhsOld + here->VDMOSdNodePrime) - *(ckt->CKTrhsOld + here->VDMOSsNodePrime)); #ifndef PREDICTOR } #endif /* PREDICTOR */ /* now some common crunching for some more useful quantities */ vgd = vgs - vds; vgdo = *(ckt->CKTstate0 + here->VDMOSvgs) - *(ckt->CKTstate0 + here->VDMOSvds); delvgs = vgs - *(ckt->CKTstate0 + here->VDMOSvgs); delvds = vds - *(ckt->CKTstate0 + here->VDMOSvds); delvgd = vgd - vgdo; /* these are needed for convergence testing */ if (here->VDMOSmode >= 0) { cdhat = here->VDMOScd + here->VDMOSgm * delvgs + here->VDMOSgds * delvds; } else { cdhat = here->VDMOScd - here->VDMOSgm * delvgd + here->VDMOSgds * delvds; } #ifndef NOBYPASS /* now lets see if we can bypass (ugh) */ if ((!(ckt->CKTmode & (MODEINITPRED | MODEINITTRAN | MODEINITSMSIG))) && (ckt->CKTbypass) && (fabs(delvgs) < (ckt->CKTreltol * MAX(fabs(vgs), fabs(*(ckt->CKTstate0 + here->VDMOSvgs))) + ckt->CKTvoltTol)) && (fabs(delvds) < (ckt->CKTreltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0 + here->VDMOSvds))) + ckt->CKTvoltTol)) && (fabs(cdhat - here->VDMOScd) < (ckt->CKTreltol * MAX(fabs(cdhat), fabs(here->VDMOScd)) + ckt->CKTabstol))) { /* bypass code */ /* nothing interesting has changed since last * iteration on this device, so we just * copy all the values computed last iteration out * and keep going */ vgs = *(ckt->CKTstate0 + here->VDMOSvgs); vds = *(ckt->CKTstate0 + here->VDMOSvds); vgd = vgs - vds; cdrain = here->VDMOSmode * (here->VDMOScd); if (ckt->CKTmode & (MODETRAN | MODETRANOP)) { capgs = (*(ckt->CKTstate0 + here->VDMOScapgs) + *(ckt->CKTstate1 + here->VDMOScapgs)); capgd = (*(ckt->CKTstate0 + here->VDMOScapgd) + *(ckt->CKTstate1 + here->VDMOScapgd)); } goto bypass; } #endif /*NOBYPASS*/ /* ok - bypass is out, do it the hard way */ von = model->VDMOStype * here->VDMOSvon; #ifndef NODELIMITING /* * limiting * we want to keep device voltages from changing * so fast that the exponentials churn out overflows * and similar rudeness */ if (*(ckt->CKTstate0 + here->VDMOSvds) >= 0) { vgs = DEVfetlim(vgs, *(ckt->CKTstate0 + here->VDMOSvgs) , von); vds = vgs - vgd; vds = DEVlimvds(vds, *(ckt->CKTstate0 + here->VDMOSvds)); vgd = vgs - vds; } else { vgd = DEVfetlim(vgd, vgdo, von); vds = vgs - vgd; if (!(ckt->CKTfixLimit)) { vds = -DEVlimvds(-vds, -(*(ckt->CKTstate0 + here->VDMOSvds))); } vgs = vgd + vds; } #endif /*NODELIMITING*/ } else { /* ok - not one of the simple cases, so we have to * look at all of the possibilities for why we were * called. We still just initialize the three voltages */ if ((ckt->CKTmode & MODEINITJCT) && !here->VDMOSoff) { vds = model->VDMOStype * here->VDMOSicVDS; vgs = model->VDMOStype * here->VDMOSicVGS; if ((vds == 0) && (vgs == 0) && ((ckt->CKTmode & (MODETRAN | MODEDCOP | MODEDCTRANCURVE)) || (!(ckt->CKTmode & MODEUIC)))) { vgs = model->VDMOStype * here->VDMOStVto; vds = 0; } } else { vgs = vds = 0; } } /* * now all the preliminaries are over - we can start doing the * real work */ vgd = vgs - vds; /* now to determine whether the user was able to correctly * identify the source and drain of his device */ if (vds >= 0) { /* normal mode */ here->VDMOSmode = 1; } else { /* inverse mode */ here->VDMOSmode = -1; } { /* * this block of code evaluates the drain current and its * derivatives using the shichman-hodges model and the * charges associated with the gate, channel and bulk for * mosfets * */ /* the following 2 variables are local to this code block until * it is obvious that they can be made global */ double betap; double vgst; von = (model->VDMOSvt0*model->VDMOStype); vgst = (here->VDMOSmode == 1 ? vgs : vgd) - von; vdsat = MAX(vgst, 0); if (model->VDMOSksubthresGiven) { /* Alternative simple weak inversion model, according to https://www.anasoft.co.uk/MOS1Model.htm * Scale the voltage overdrive vgst logarithmically in weak inversion. * Best fits LTSPICE curves with shift=0 * Drain current including subthreshold current */ double slope = model->VDMOSksubthres; double lambda = model->VDMOSlambda; double theta = model->VDMOStheta; double shift = model->VDMOSsubshift; double mtr = model->VDMOSmtr; /* scale vds with mtr (except with lambda) */ double vdss = vds*mtr*here->VDMOSmode; double t0 = 1 + lambda*vds; double t1 = 1 + theta*vgs; betap = Beta*t0/t1; double dbetapdvgs = -Beta*theta*t0/(t1*t1); double dbetapdvds = Beta*lambda/t1; double t2 = exp((vgst-shift)/slope); vgst = slope * log(1 + t2); double dvgstdvgs = t2/(t2+1); if (vgst <= vdss) { /* saturation region */ cdrain = betap*vgst*vgst*.5; here->VDMOSgm = betap*vgst*dvgstdvgs + 0.5*dbetapdvgs*vgst*vgst; here->VDMOSgds = .5*dbetapdvds*vgst*vgst; } else { /* linear region */ cdrain = betap * vdss * (vgst - .5 * vdss); here->VDMOSgm = betap*vdss*dvgstdvgs + vdss*dbetapdvgs*(vgst-.5*vdss); here->VDMOSgds = vdss*dbetapdvds*(vgst-.5*vdss) + betap*mtr*(vgst-.5*vdss) - .5*vdss*betap*mtr; } } else if (model->VDMOSsubslGiven) { /* numerical differentiation for gd and gm with a delta of 2 mV */ double vdsm = vds * here->VDMOSmode; double delta = 0.001; cdrain = cweakinv2(model->VDMOSsubsl, model->VDMOSsubshift, vgst, vdsm, model->VDMOSlambda, Beta, vt, model->VDMOSmtr, model->VDMOStheta); /* gd */ double vds1 = vdsm + delta; double cdrp = cweakinv2(model->VDMOSsubsl, model->VDMOSsubshift, vgst, vds1, model->VDMOSlambda, Beta, vt, model->VDMOSmtr, model->VDMOStheta); vds1 = vdsm - delta; double cdrm = cweakinv2(model->VDMOSsubsl, model->VDMOSsubshift, vgst, vds1, model->VDMOSlambda, Beta, vt, model->VDMOSmtr, model->VDMOStheta); here->VDMOSgds = (cdrp - cdrm) / (2. * delta); /* gm */ double vgst1 = vgst + delta; cdrp = cweakinv2(model->VDMOSsubsl, model->VDMOSsubshift, vgst1, vdsm, model->VDMOSlambda, Beta, vt, model->VDMOSmtr, model->VDMOStheta); vgst1 = vgst - delta; cdrm = cweakinv2(model->VDMOSsubsl, model->VDMOSsubshift, vgst1, vdsm, model->VDMOSlambda, Beta, vt, model->VDMOSmtr, model->VDMOStheta); here->VDMOSgm = (cdrp - cdrm) / (2. * delta); } else { double onfg, fgate, Betam, dfgdvg; onfg = 1.0+model->VDMOStheta*vgst; fgate = 1.0/onfg; Betam = Beta * fgate; dfgdvg = -model->VDMOStheta*fgate*fgate; if (vgst <= 0) { /* * cutoff region */ cdrain = 0; here->VDMOSgm = 0; here->VDMOSgds = 0; } else { /* scale vds with mtr */ double mtr = model->VDMOSmtr; betap = Betam*(1 + model->VDMOSlambda*(vds*here->VDMOSmode)); if (vgst <= (vds * here->VDMOSmode) * mtr) { /* * saturation region */ cdrain = betap*vgst*vgst*.5; here->VDMOSgm = betap*vgst * fgate + dfgdvg * cdrain; here->VDMOSgds = model->VDMOSlambda*Betam*vgst*vgst*.5; } else { /* * linear region */ cdrain = betap * (vds * here->VDMOSmode) * mtr * (vgst - .5 * (vds*here->VDMOSmode) * mtr); here->VDMOSgm = betap * (vds * here->VDMOSmode) * mtr * fgate + dfgdvg * cdrain; here->VDMOSgds = betap * (vgst - (vds * here->VDMOSmode) * mtr) + model->VDMOSlambda * Betam * (vds * here->VDMOSmode) * mtr * (vgst - .5 * (vds * here->VDMOSmode) * mtr); } } } } /* now deal with n vs p polarity */ here->VDMOSvon = model->VDMOStype * von; here->VDMOSvdsat = model->VDMOStype * vdsat; /* * COMPUTE EQUIVALENT DRAIN CURRENT SOURCE */ here->VDMOScd = here->VDMOSmode * cdrain; /* save things away for next time */ *(ckt->CKTstate0 + here->VDMOSvgs) = vgs; *(ckt->CKTstate0 + here->VDMOSvds) = vds; /* * vdmos capacitor model */ if (ckt->CKTmode & (MODETRAN | MODETRANOP | MODEINITSMSIG)) { /* * calculate gate - drain, gate - source capacitors * drain-source capacitor is evaluated with the bulk diode below */ /* * this just evaluates at the current time, * expects you to remember values from previous time * returns 1/2 of non-constant portion of capacitance * you must add in the other half from previous time * and the constant part */ DevCapVDMOS(vgd, cgdmin, cgdmax, a, cgs, (ckt->CKTstate0 + here->VDMOScapgs), (ckt->CKTstate0 + here->VDMOScapgd), &CGBdummy); vgs1 = *(ckt->CKTstate1 + here->VDMOSvgs); vgd1 = vgs1 - *(ckt->CKTstate1 + here->VDMOSvds); if (ckt->CKTmode & (MODETRANOP | MODEINITSMSIG)) { capgs = 2 * *(ckt->CKTstate0 + here->VDMOScapgs); capgd = 2 * *(ckt->CKTstate0 + here->VDMOScapgd); } else { capgs = (*(ckt->CKTstate0 + here->VDMOScapgs) + *(ckt->CKTstate1 + here->VDMOScapgs)); capgd = (*(ckt->CKTstate0 + here->VDMOScapgd) + *(ckt->CKTstate1 + here->VDMOScapgd)); } /* */ #ifndef PREDICTOR if (ckt->CKTmode & (MODEINITPRED | MODEINITTRAN)) { *(ckt->CKTstate0 + here->VDMOSqgs) = (1 + xfact) * *(ckt->CKTstate1 + here->VDMOSqgs) - xfact * *(ckt->CKTstate2 + here->VDMOSqgs); *(ckt->CKTstate0 + here->VDMOSqgd) = (1 + xfact) * *(ckt->CKTstate1 + here->VDMOSqgd) - xfact * *(ckt->CKTstate2 + here->VDMOSqgd); } else { #endif /*PREDICTOR*/ if (ckt->CKTmode & MODETRAN) { *(ckt->CKTstate0 + here->VDMOSqgs) = (vgs - vgs1)*capgs + *(ckt->CKTstate1 + here->VDMOSqgs); *(ckt->CKTstate0 + here->VDMOSqgd) = (vgd - vgd1)*capgd + *(ckt->CKTstate1 + here->VDMOSqgd); } else { /* TRANOP only */ *(ckt->CKTstate0 + here->VDMOSqgs) = vgs*capgs; *(ckt->CKTstate0 + here->VDMOSqgd) = vgd*capgd; } #ifndef PREDICTOR } #endif /*PREDICTOR*/ } #ifndef NOBYPASS bypass : #endif if ((ckt->CKTmode & (MODEINITTRAN)) || (!(ckt->CKTmode & (MODETRAN)))) { /* * initialize to zero charge conductances * and current */ gcgs = 0; ceqgs = 0; gcgd = 0; ceqgd = 0; } else { if (capgs == 0) *(ckt->CKTstate0 + here->VDMOScqgs) = 0; if (capgd == 0) *(ckt->CKTstate0 + here->VDMOScqgd) = 0; /* * calculate equivalent conductances and currents for * meyer"s capacitors */ error = NIintegrate(ckt, &gcgs, &ceqgs, capgs, here->VDMOSqgs); if (error) return(error); error = NIintegrate(ckt, &gcgd, &ceqgd, capgd, here->VDMOSqgd); if (error) return(error); ceqgs = ceqgs - gcgs*vgs + ckt->CKTag[0] * *(ckt->CKTstate0 + here->VDMOSqgs); ceqgd = ceqgd - gcgd*vgd + ckt->CKTag[0] * *(ckt->CKTstate0 + here->VDMOSqgd); } /* * load current vector */ if (here->VDMOSmode >= 0) { xnrm = 1; xrev = 0; cdreq = model->VDMOStype*(cdrain - here->VDMOSgds*vds - here->VDMOSgm*vgs); } else { xnrm = 0; xrev = 1; cdreq = -(model->VDMOStype)*(cdrain - here->VDMOSgds*(-vds) - here->VDMOSgm*vgd); } *(ckt->CKTrhs + here->VDMOSgNodePrime) -= (model->VDMOStype * (ceqgs + ceqgd)); *(ckt->CKTrhs + here->VDMOSdNodePrime) += (-cdreq + model->VDMOStype * ceqgd); *(ckt->CKTrhs + here->VDMOSsNodePrime) += cdreq + model->VDMOStype * ceqgs; /* quasi saturation * according to Vincenzo d'Alessandro's Quasi-Saturation Model, simplified: V. D'Alessandro, F. Frisina, N. Rinaldi: A New SPICE Model of VDMOS Transistors Including Thermal and Quasi-saturation Effects, 9th European Conference on Power Electronics and applications (EPE), Graz, Austria, August 2001, pp. P.1 − P.10. */ if (model->VDMOSqsGiven && (here->VDMOSmode == 1)) { double vdsn = model->VDMOStype * ( *(ckt->CKTrhsOld + here->VDMOSdNode) - *(ckt->CKTrhsOld + here->VDMOSsNode)); double rd = model->VDMOSdrainResistance + model->VDMOSqsResistance * (vdsn / (vdsn + fabs(model->VDMOSqsVoltage))); here->VDMOSdrainConductance = 1 / rd; } /* * load y matrix */ *(here->VDMOSDdPtr) += (here->VDMOSdrainConductance + here->VDMOSdsConductance); *(here->VDMOSGgPtr) += (here->VDMOSgateConductance); //((gcgd + gcgs + gcgb)); *(here->VDMOSSsPtr) += (here->VDMOSsourceConductance + here->VDMOSdsConductance); *(here->VDMOSDPdpPtr) += (here->VDMOSdrainConductance + here->VDMOSgds + xrev*(here->VDMOSgm) + gcgd); *(here->VDMOSSPspPtr) += (here->VDMOSsourceConductance + here->VDMOSgds + xnrm*(here->VDMOSgm) + gcgs); *(here->VDMOSGPgpPtr) += (here->VDMOSgateConductance) + (gcgd + gcgs); *(here->VDMOSGgpPtr) += (-here->VDMOSgateConductance); *(here->VDMOSDdpPtr) += (-here->VDMOSdrainConductance); *(here->VDMOSGPgPtr) += (-here->VDMOSgateConductance); *(here->VDMOSGPdpPtr) -= gcgd; *(here->VDMOSGPspPtr) -= gcgs; *(here->VDMOSSspPtr) += (-here->VDMOSsourceConductance); *(here->VDMOSDPdPtr) += (-here->VDMOSdrainConductance); *(here->VDMOSDPgpPtr) += ((xnrm - xrev)*here->VDMOSgm - gcgd); *(here->VDMOSDPspPtr) += (-here->VDMOSgds - xnrm* (here->VDMOSgm)); *(here->VDMOSSPgpPtr) += (-(xnrm - xrev)*here->VDMOSgm - gcgs); *(here->VDMOSSPsPtr) += (-here->VDMOSsourceConductance); *(here->VDMOSSPdpPtr) += (-here->VDMOSgds - xrev* (here->VDMOSgm)); *(here->VDMOSDsPtr) += (-here->VDMOSdsConductance); *(here->VDMOSSdPtr) += (-here->VDMOSdsConductance); /* bulk diode model * Delivers reverse conduction and forward breakdown * of VDMOS transistor */ double vd; /* current diode voltage */ double vdtemp; double vte; double vtebrk, vbrknp; double cd, cdb, csat, cdeq; double czero; double czof2; double capd; double gd, gdb, gspr; double delvd; /* change in diode voltage temporary */ double diffcharge, deplcharge, diffcap, deplcap; double evd, evrev; #ifndef NOBYPASS double tol; /* temporary for tolerence calculations */ #endif cd = 0.0; cdb = 0.0; gd = 0.0; gdb = 0.0; csat = here->VDIOtSatCur; gspr = here->VDIOtConductance; vte = model->VDMOSDn * vt; vtebrk = model->VDIObrkdEmissionCoeff * vt; vbrknp = here->VDIOtBrkdwnV; Check = 1; if (ckt->CKTmode & MODEINITSMSIG) { vd = *(ckt->CKTstate0 + here->VDIOvoltage); } else if (ckt->CKTmode & MODEINITTRAN) { vd = *(ckt->CKTstate1 + here->VDIOvoltage); } else if ((ckt->CKTmode & MODEINITJCT) && (ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) { vd = here->VDIOinitCond; } else if (ckt->CKTmode & MODEINITJCT) { vd = here->VDIOtVcrit; } else { #ifndef PREDICTOR if (ckt->CKTmode & MODEINITPRED) { *(ckt->CKTstate0 + here->VDIOvoltage) = *(ckt->CKTstate1 + here->VDIOvoltage); vd = DEVpred(ckt, here->VDIOvoltage); *(ckt->CKTstate0 + here->VDIOcurrent) = *(ckt->CKTstate1 + here->VDIOcurrent); *(ckt->CKTstate0 + here->VDIOconduct) = *(ckt->CKTstate1 + here->VDIOconduct); } else { #endif /* PREDICTOR */ vd = model->VDMOStype * (*(ckt->CKTrhsOld + here->VDIOposPrimeNode) - *(ckt->CKTrhsOld + here->VDMOSdNode)); #ifndef PREDICTOR } #endif /* PREDICTOR */ delvd = vd - *(ckt->CKTstate0 + here->VDIOvoltage); cdhat = *(ckt->CKTstate0 + here->VDIOcurrent) + *(ckt->CKTstate0 + here->VDIOconduct) * delvd; /* * bypass if solution has not changed */ #ifndef NOBYPASS if ((!(ckt->CKTmode & MODEINITPRED)) && (ckt->CKTbypass)) { tol = ckt->CKTvoltTol + ckt->CKTreltol* MAX(fabs(vd), fabs(*(ckt->CKTstate0 + here->VDIOvoltage))); if (fabs(delvd) < tol) { tol = ckt->CKTreltol* MAX(fabs(cdhat), fabs(*(ckt->CKTstate0 + here->VDIOcurrent))) + ckt->CKTabstol; if (fabs(cdhat - *(ckt->CKTstate0 + here->VDIOcurrent)) < tol) { vd = *(ckt->CKTstate0 + here->VDIOvoltage); cd = *(ckt->CKTstate0 + here->VDIOcurrent); gd = *(ckt->CKTstate0 + here->VDIOconduct); goto load; } } } #endif /* NOBYPASS */ /* * limit new junction voltage */ if ((model->VDMOSDbvGiven) && (vd < MIN(0, -vbrknp + 10 * vtebrk))) { vdtemp = -(vd + vbrknp); vdtemp = DEVpnjlim(vdtemp, -(*(ckt->CKTstate0 + here->VDIOvoltage) + vbrknp), vtebrk, here->VDIOtVcrit, &Check); vd = -(vdtemp + vbrknp); } else { vd = DEVpnjlim(vd, *(ckt->CKTstate0 + here->VDIOvoltage), vte, here->VDIOtVcrit, &Check); } } /* * compute dc current and derivatives */ if (vd >= -3 * vte) { /* bottom current forward */ evd = exp(vd / vte); cdb = csat*(evd - 1); gdb = csat*evd / vte; } else if ((!(model->VDMOSDbvGiven)) || vd >= -vbrknp) { /* reverse */ arg = 3 * vte / (vd*CONSTe); arg = arg * arg * arg; cdb = -csat*(1 + arg); gdb = csat * 3 * arg / vd; } else { /* breakdown */ evrev = exp(-(vbrknp + vd) / vtebrk); cdb = -csat*evrev; gdb = csat*evrev / vtebrk; } cd = cdb; gd = gdb; gd = gd + ckt->CKTgmin; cd = cd + ckt->CKTgmin*vd; if ((ckt->CKTmode & (MODEDCTRANCURVE | MODETRAN | MODEAC | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) { /* * charge storage elements */ czero = here->VDIOtJctCap; if (vd < here->VDIOtDepCap) { arg = 1 - vd / here->VDIOtJctPot; sarg = exp(-here->VDIOtGradingCoeff*log(arg)); deplcharge = here->VDIOtJctPot*czero*(1 - arg*sarg) / (1 - here->VDIOtGradingCoeff); deplcap = czero*sarg; } else { czof2 = czero / here->VDIOtF2; deplcharge = czero*here->VDIOtF1 + czof2*(here->VDIOtF3*(vd - here->VDIOtDepCap) + (here->VDIOtGradingCoeff / (here->VDIOtJctPot + here->VDIOtJctPot))*(vd*vd - here->VDIOtDepCap*here->VDIOtDepCap)); deplcap = czof2*(here->VDIOtF3 + here->VDIOtGradingCoeff*vd / here->VDIOtJctPot); } diffcharge = here->VDIOtTransitTime*cdb; *(ckt->CKTstate0 + here->VDIOcapCharge) = diffcharge + deplcharge; diffcap = here->VDIOtTransitTime*gdb; capd = diffcap + deplcap; here->VDIOcap = capd; /* * store small-signal parameters */ if ((!(ckt->CKTmode & MODETRANOP)) || (!(ckt->CKTmode & MODEUIC))) { if (ckt->CKTmode & MODEINITSMSIG) { *(ckt->CKTstate0 + here->VDIOcapCurrent) = capd; continue; } /* * transient analysis */ if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->VDIOcapCharge) = *(ckt->CKTstate0 + here->VDIOcapCharge); } error = NIintegrate(ckt, &geq, &ceq, capd, here->VDIOcapCharge); if (error) return(error); gd = gd + geq; cd = cd + *(ckt->CKTstate0 + here->VDIOcapCurrent); if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->VDIOcapCurrent) = *(ckt->CKTstate0 + here->VDIOcapCurrent); } } } /* * check convergence */ if (Check == 1) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *)here; } *(ckt->CKTstate0 + here->VDIOvoltage) = vd; *(ckt->CKTstate0 + here->VDIOcurrent) = cd; *(ckt->CKTstate0 + here->VDIOconduct) = gd; #ifndef NOBYPASS load : #endif /* * load current vector */ cdeq = cd - gd*vd; if (model->VDMOStype == 1) { *(ckt->CKTrhs + here->VDMOSdNode) += cdeq; *(ckt->CKTrhs + here->VDIOposPrimeNode) -= cdeq; } else { *(ckt->CKTrhs + here->VDMOSdNode) -= cdeq; *(ckt->CKTrhs + here->VDIOposPrimeNode) += cdeq; } /* * load matrix */ *(here->VDMOSSsPtr) += gspr; *(here->VDMOSDdPtr) += gd; *(here->VDIORPrpPtr) += (gd + gspr); *(here->VDIOSrpPtr) -= gspr; *(here->VDIODrpPtr) -= gd; *(here->VDIORPsPtr) -= gspr; *(here->VDIORPdPtr) -= gd; } } return(OK); } /* scaling function, sine function interpolating between 0 and 1 * nf2: empirical setting of sine 'speed' */ static double scalef(double nf2, double vgst) { double vgstsin = vgst / nf2; if (vgstsin > 1) return 1; else if (vgstsin < -1) return 0; else return 0.5 * sin(vgstsin * M_PI / 2) + 0.5; } /* Calculate D/S current including weak inversion. * Uses a single function covering weak-moderate-stong inversion, as well * as linear and saturation regions, with an interpolation method according to * Tvividis, McAndrew: "Operation and Modeling of the MOS Transistor", Oxford, 2011, p. 209. * A single parameter n sets the slope of the weak inversion current. The weak inversion * current is independent from vds, as in long channel devices. * The following modification has been added for VDMOS compatibility: * n and lambda are depending on vgst with a sine function interpolating between 0 and 1. */ static double cweakinv2(double slope, double shift, double vgst, double vds, double lambda, double beta, double vt, double mtr, double theta) { double betam = beta / (1.0+theta*vgst); vgst += shift * (1 - scalef(0.5, vgst)); double n = slope / 2.3 / 0.0256; /* Tsividis, p. 208 */ double n1 = n + (1 - n) * scalef(0.7, vgst); /* n < n1 < 1 */ double first = log(1 + exp(vgst / (2 * n1 * vt))); double second = log(1 + exp((vgst - vds * mtr * n1) / (2 * n1 * vt))); double cds = betam * n1 * 2 * vt * vt * (1 + scalef(1, vgst) * lambda * vds) * (first * first - second * second); return cds; } tmpk8ny_4pz/src/spicelib/devices/vdmos/Makefile.am0000644000175000017500000000102713546075722022347 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libvdmos.la libvdmos_la_SOURCES = \ vdmos.c \ vdmosacld.c \ vdmosask.c \ vdmosconv.c \ vdmosdefs.h \ vdmosdist.c \ vdmosdset.c \ vdmosext.h \ vdmosic.c \ vdmosinit.c \ vdmosinit.h \ vdmositf.h \ vdmosload.c \ vdmosmask.c \ vdmosmpar.c \ vdmosnoi.c \ vdmospar.c \ vdmospzld.c \ vdmosset.c \ vdmostemp.c \ vdmostrun.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/vdmos/vdmosnoi.c0000644000175000017500000001561213546075722022322 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Gary W. Ng Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "vdmosdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" /* * VDMOSnoise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with MOSFET's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the MOSFET's is summed with the variable "OnDens". */ int VDMOSnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; VDMOSmodel *firstModel = (VDMOSmodel *) genmodel; VDMOSmodel *model; VDMOSinstance *inst; double coxSquared; double tempOnoise; double tempInoise; double noizDens[VDMOSNSRCS]; double lnNdens[VDMOSNSRCS]; int i; /* define the names of the noise sources */ static char *VDMOSnNames[VDMOSNSRCS] = { /* Note that we have to keep the order */ "_rd", /* noise due to rd */ /* consistent with thestrchr definitions */ "_rs", /* noise due to rs */ /* in VDMOSdefs.h */ "_id", /* noise due to id */ "_1overf", /* flicker (1/f) noise */ "" /* total transistor noise */ }; for (model=firstModel; model != NULL; model=VDMOSnextModel(model)) { /* Oxide capacitance can be zero in MOS level 1. Since this will give us problems in our 1/f */ /* noise model, we ASSUME an actual "tox" of 1e-7 */ if (model->VDMOSoxideCapFactor == 0.0) { coxSquared = 3.9 * 8.854214871e-12 / 1e-7; } else { coxSquared = model->VDMOSoxideCapFactor; } coxSquared *= coxSquared; for (inst=VDMOSinstances(model); inst != NULL; inst=VDMOSnextInstance(inst)) { switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i=0; i < VDMOSNSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_%s%s", inst->VDMOSname, VDMOSnNames[i]); } break; case INT_NOIZ: for (i=0; i < VDMOSNSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total_%s%s", inst->VDMOSname, VDMOSnNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total_%s%s", inst->VDMOSname, VDMOSnNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: NevalSrc(&noizDens[VDMOSRDNOIZ],&lnNdens[VDMOSRDNOIZ], ckt,THERMNOISE,inst->VDMOSdNodePrime,inst->VDMOSdNode, inst->VDMOSdrainConductance); NevalSrc(&noizDens[VDMOSRSNOIZ],&lnNdens[VDMOSRSNOIZ], ckt,THERMNOISE,inst->VDMOSsNodePrime,inst->VDMOSsNode, inst->VDMOSsourceConductance); NevalSrc(&noizDens[VDMOSIDNOIZ],&lnNdens[VDMOSIDNOIZ], ckt,THERMNOISE,inst->VDMOSdNodePrime,inst->VDMOSsNodePrime, (2.0/3.0 * fabs(inst->VDMOSgm))); NevalSrc(&noizDens[VDMOSFLNOIZ], NULL, ckt, N_GAIN,inst->VDMOSdNodePrime, inst->VDMOSsNodePrime, (double)0.0); noizDens[VDMOSFLNOIZ] *= model->VDMOSfNcoef * exp(model->VDMOSfNexp * log(MAX(fabs(inst->VDMOScd),N_MINLOG))) / (data->freq * inst->VDMOSw * inst->VDMOSm * inst->VDMOSl * coxSquared); lnNdens[VDMOSFLNOIZ] = log(MAX(noizDens[VDMOSFLNOIZ],N_MINLOG)); noizDens[VDMOSTOTNOIZ] = noizDens[VDMOSRDNOIZ] + noizDens[VDMOSRSNOIZ] + noizDens[VDMOSIDNOIZ] + noizDens[VDMOSFLNOIZ]; lnNdens[VDMOSTOTNOIZ] = log(MAX(noizDens[VDMOSTOTNOIZ], N_MINLOG)); *OnDens += noizDens[VDMOSTOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to */ /* initialize our "history" variables */ for (i=0; i < VDMOSNSRCS; i++) { inst->VDMOSnVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i=0; i < VDMOSNSRCS; i++) { inst->VDMOSnVar[OUTNOIZ][i] = 0.0; inst->VDMOSnVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0 (we have to integrate) */ for (i=0; i < VDMOSNSRCS; i++) { if (i != VDMOSTOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], inst->VDMOSnVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv , lnNdens[i] + data->lnGainInv, inst->VDMOSnVar[LNLSTDENS][i] + data->lnGainInv, data); inst->VDMOSnVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { inst->VDMOSnVar[OUTNOIZ][i] += tempOnoise; inst->VDMOSnVar[OUTNOIZ][VDMOSTOTNOIZ] += tempOnoise; inst->VDMOSnVar[INNOIZ][i] += tempInoise; inst->VDMOSnVar[INNOIZ][VDMOSTOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i=0; i < VDMOSNSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i=0; i < VDMOSNSRCS; i++) { data->outpVector[data->outNumber++] = inst->VDMOSnVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = inst->VDMOSnVar[INNOIZ][i]; } } /* if */ break; } /* switch (mode) */ break; case N_CLOSE: return (OK); /* do nothing, the main calling routine will close */ break; /* the plots */ } /* switch (operation) */ } /* for inst */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/vdmos/vdmostemp.c0000644000175000017500000002505513546075722022504 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vdmosdefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VDMOStemp(GENmodel *inModel, CKTcircuit *ckt) { VDMOSmodel *model = (VDMOSmodel *)inModel; VDMOSinstance *here; double egfet,egfet1; double fact1,fact2; double kt,kt1; double arg1; double ratio,ratio4; double phio; double pbfact1,pbfact; double vt,vtnom; double xfc; /* loop through all the resistor models */ for( ; model != NULL; model = VDMOSnextModel(model)) { /* perform model defaulting */ if(!model->VDMOStnomGiven) { model->VDMOStnom = ckt->CKTnomTemp; } fact1 = model->VDMOStnom/REFTEMP; vtnom = model->VDMOStnom*CONSTKoverQ; kt1 = CONSTboltz * model->VDMOStnom; egfet1 = 1.16-(7.02e-4*model->VDMOStnom*model->VDMOStnom)/ (model->VDMOStnom+1108); arg1 = -egfet1/(kt1+kt1)+1.1150877/(CONSTboltz*(REFTEMP+REFTEMP)); pbfact1 = -2*vtnom *(1.5*log(fact1)+CHARGE*arg1); /* now model parameter preprocessing */ if (model->VDMOSphi <= 0.0) { SPfrontEnd->IFerrorf(ERR_FATAL, "%s: Phi is not positive.", model->VDMOSmodName); return(E_BADPARM); } model->VDMOSoxideCapFactor = 0; /* bulk diode model */ /* limit activation energy to min of .1 */ if (model->VDMOSDeg<.1) { SPfrontEnd->IFerrorf(ERR_WARNING, "%s: bulk diode activation energy too small, limited to 0.1", model->VDMOSmodName); model->VDMOSDeg = .1; } /* limit depletion cap coeff to max of .95 */ if (model->VDIOdepletionCapCoeff>.95) { SPfrontEnd->IFerrorf(ERR_WARNING, "%s: coefficient Fc too large, limited to 0.95", model->VDMOSmodName); model->VDIOdepletionCapCoeff = .95; } /* set lower limit of saturation current */ if (model->VDIOjctSatCur < ckt->CKTepsmin) model->VDIOjctSatCur = ckt->CKTepsmin; if ((!model->VDIOresistanceGiven) || (model->VDIOresistance == 0)) { model->VDIOconductance = 0.0; } else { model->VDIOconductance = 1 / model->VDIOresistance; } xfc = log(1 - model->VDIOdepletionCapCoeff); /* loop through all instances of the model */ for(here = VDMOSinstances(model); here!= NULL; here = VDMOSnextInstance(here)) { double arg; /* 1 - fc */ /* perform the parameter defaulting */ if(!here->VDMOSdtempGiven) { here->VDMOSdtemp = 0.0; } if(!here->VDMOStempGiven) { here->VDMOStemp = ckt->CKTtemp + here->VDMOSdtemp; } vt = here->VDMOStemp * CONSTKoverQ; ratio = here->VDMOStemp/model->VDMOStnom; fact2 = here->VDMOStemp/REFTEMP; kt = here->VDMOStemp * CONSTboltz; egfet = 1.16-(7.02e-4*here->VDMOStemp*here->VDMOStemp)/ (here->VDMOStemp+1108); arg = -egfet/(kt+kt)+1.1150877/(CONSTboltz*(REFTEMP+REFTEMP)); pbfact = -2*vt *(1.5*log(fact2)+CHARGE*arg); if(!here->VDMOSmGiven) { here->VDMOSm = 1; } if(!here->VDMOSlGiven) { here->VDMOSl = 1; } if(!here->VDMOSwGiven) { here->VDMOSw = 1; } ratio4 = ratio * sqrt(ratio); here->VDMOStTransconductance = model->VDMOStransconductance / ratio4; phio = (model->VDMOSphi - pbfact1) / fact1; here->VDMOStPhi = fact2 * phio + pbfact; here->VDMOStVto = model->VDMOSvt0; here->VDMOSf2d = 0; here->VDMOSf3d = 0; here->VDMOSf4d = 0; here->VDMOSf2s = 0; here->VDMOSf3s = 0; here->VDMOSf4s = 0; if (model->VDMOSdrainResistanceGiven) { if (model->VDMOSdrainResistance != 0) { here->VDMOSdrainConductance = here->VDMOSm / model->VDMOSdrainResistance; } else { here->VDMOSdrainConductance = 0; } } else { here->VDMOSdrainConductance = 0; } if(model->VDMOSsourceResistanceGiven) { if(model->VDMOSsourceResistance != 0) { here->VDMOSsourceConductance = here->VDMOSm / model->VDMOSsourceResistance; } else { here->VDMOSsourceConductance = 0; } } else { here->VDMOSsourceConductance = 0; } if (model->VDMOSgateResistanceGiven) { if (model->VDMOSgateResistance != 0) { here->VDMOSgateConductance = here->VDMOSm / model->VDMOSgateResistance; } else { here->VDMOSgateConductance = 0; } } else { here->VDMOSgateConductance = 0; } if (model->VDMOSrdsGiven) { if (model->VDMOSrds != 0) { here->VDMOSdsConductance = here->VDMOSm / model->VDMOSrds; } else { here->VDMOSdsConductance = 0; } } else { here->VDMOSdsConductance = 0; } /* bulk diode model */ double pbo, gmaold; double gmanew, factor; double tBreakdownVoltage, vte, cbv; double xbv, xcbv, tol, iter, dt; dt = here->VDMOStemp - model->VDMOStnom; /* Junction grading temperature adjust */ factor = 1.0 + (model->VDIOgradCoeffTemp1 * dt) + (model->VDIOgradCoeffTemp2 * dt * dt); here->VDIOtGradingCoeff = model->VDIOgradCoeff * factor; pbo = (model->VDIOjunctionPot - pbfact1) / fact1; gmaold = (model->VDIOjunctionPot - pbo) / pbo; here->VDIOtJctCap = model->VDIOjunctionCap / (1 + here->VDIOtGradingCoeff* (400e-6*(model->VDMOStnom - REFTEMP) - gmaold)); here->VDIOtJctPot = pbfact + fact2*pbo; gmanew = (here->VDIOtJctPot - pbo) / pbo; here->VDIOtJctCap *= 1 + here->VDIOtGradingCoeff* (400e-6*(here->VDMOStemp - REFTEMP) - gmanew); here->VDIOtSatCur = model->VDIOjctSatCur * exp( ((here->VDMOStemp / model->VDMOStnom) - 1) * model->VDMOSDeg / (model->VDMOSDn*vt) + model->VDMOSDxti / model->VDMOSDn * log(here->VDMOStemp / model->VDMOStnom)); /* the defintion of f1, just recompute after temperature adjusting * all the variables used in it */ here->VDIOtF1 = here->VDIOtJctPot* (1 - exp((1 - here->VDIOtGradingCoeff)*xfc)) / (1 - here->VDIOtGradingCoeff); /* same for Depletion Capacitance */ here->VDIOtDepCap = model->VDIOdepletionCapCoeff * here->VDIOtJctPot; /* and Vcrit */ vte = model->VDMOSDn*vt; here->VDIOtVcrit = vte * log(vte / (CONSTroot2*here->VDIOtSatCur)); /* limit junction potential to max of 1/FC */ if (here->VDIOtDepCap > 1.0) { here->VDIOtJctPot = 1.0 / model->VDMOSDn; here->VDIOtDepCap = model->VDMOSDn*here->VDIOtJctPot; SPfrontEnd->IFerrorf(ERR_WARNING, "%s: junction potential VJ too large, limited to %f", model->VDMOSmodName, here->VDIOtJctPot); } /* and now to compute the breakdown voltage, again, using * temperature adjusted basic parameters */ if (model->VDMOSDbvGiven) { /* tlev == 0 */ tBreakdownVoltage = fabs(model->VDMOSDbv); cbv = model->VDMOSDibv; if (cbv < here->VDIOtSatCur * tBreakdownVoltage / vt) { cbv = here->VDIOtSatCur * tBreakdownVoltage / vt; #ifdef TRACE SPfrontEnd->IFerrorf(ERR_WARNING, "%s: breakdown current increased to %g to resolve", here->DIOname, cbv); SPfrontEnd->IFerrorf(ERR_WARNING, "incompatibility with specified saturation current"); #endif xbv = tBreakdownVoltage; } else { tol = ckt->CKTreltol*cbv; xbv = tBreakdownVoltage - model->VDIObrkdEmissionCoeff*vt*log(1 + cbv / (here->VDIOtSatCur)); iter = 0; for (iter = 0; iter < 25; iter++) { xbv = tBreakdownVoltage - model->VDIObrkdEmissionCoeff*vt*log(cbv / (here->VDIOtSatCur) + 1 - xbv / vt); xcbv = here->VDIOtSatCur * (exp((tBreakdownVoltage - xbv) / (model->VDIObrkdEmissionCoeff*vt)) - 1 + xbv / vt); if (fabs(xcbv - cbv) <= tol) goto matched; } #ifdef TRACE SPfrontEnd->IFerrorf(ERR_WARNING, "%s: unable to match forward and reverse diode regions: bv = %g, ibv = %g", here->DIOname, xbv, xcbv); #endif } matched: here->VDIOtBrkdwnV = xbv; } /* transit time temperature adjust */ factor = 1.0 + (model->VDIOtranTimeTemp1 * dt) + (model->VDIOtranTimeTemp2 * dt * dt); here->VDIOtTransitTime = model->VDIOtransitTime * factor; /* Series resistance temperature adjust */ here->VDIOtConductance = model->VDIOconductance; if (model->VDIOresistanceGiven && model->VDIOresistance != 0.0) { factor = 1.0 + (model->VDIOresistTemp1) * dt + (model->VDIOresistTemp2 * dt * dt); here->VDIOtConductance = model->VDIOconductance / factor; } here->VDIOtF2 = exp((1 + here->VDIOtGradingCoeff)*xfc); here->VDIOtF3 = 1 - model->VDIOdepletionCapCoeff* (1 + here->VDIOtGradingCoeff); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vdmos/vdmospar.c0000644000175000017500000000420513546075722022313 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "vdmosdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/fteext.h" /* ARGSUSED */ int VDMOSparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { double scale; VDMOSinstance *here = (VDMOSinstance *)inst; NG_IGNORE(select); if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; switch(param) { case VDMOS_TEMP: here->VDMOStemp = value->rValue+CONSTCtoK; here->VDMOStempGiven = TRUE; break; case VDMOS_DTEMP: here->VDMOSdtemp = value->rValue; here->VDMOSdtempGiven = TRUE; break; case VDMOS_M: here->VDMOSm = value->rValue; here->VDMOSmGiven = TRUE; break; case VDMOS_W: here->VDMOSw = value->rValue * scale; here->VDMOSwGiven = TRUE; break; case VDMOS_L: here->VDMOSl = value->rValue * scale; here->VDMOSlGiven = TRUE; break; case VDMOS_OFF: here->VDMOSoff = (value->iValue != 0); break; case VDMOS_IC_VDS: here->VDMOSicVDS = value->rValue; here->VDMOSicVDSGiven = TRUE; break; case VDMOS_IC_VGS: here->VDMOSicVGS = value->rValue; here->VDMOSicVGSGiven = TRUE; break; case VDMOS_IC: switch(value->v.numValue){ case 2: here->VDMOSicVGS = *(value->v.vec.rVec+1); here->VDMOSicVGSGiven = TRUE; case 1: here->VDMOSicVDS = *(value->v.vec.rVec); here->VDMOSicVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vdmos/vdmosdefs.h0000644000175000017500000003454613546075722022472 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #ifndef VDMOS #define VDMOS #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" /* declarations for VDMOSFETs */ /* indices to the array of MOSFET(1) noise sources */ enum { VDMOSRDNOIZ = 0, VDMOSRSNOIZ, VDMOSIDNOIZ, VDMOSFLNOIZ, VDMOSTOTNOIZ, /* finally, the number of noise sources */ VDMOSNSRCS }; /* information needed for each instance */ typedef struct sVDMOSinstance { struct GENinstance gen; #define VDMOSmodPtr(inst) ((struct sVDMOSmodel *)((inst)->gen.GENmodPtr)) #define VDMOSnextInstance(inst) ((struct sVDMOSinstance *)((inst)->gen.GENnextInstance)) #define VDMOSname gen.GENname #define VDMOSstates gen.GENstate const int VDMOSdNode; /* number of the gate node of the mosfet */ const int VDMOSgNode; /* number of the gate node of the mosfet */ const int VDMOSsNode; /* number of the source node of the mosfet */ int VDMOSdNodePrime; /* number of the internal drain node of the mosfet */ int VDMOSsNodePrime; /* number of the internal source node of the mosfet */ int VDMOSgNodePrime; /* number of the internal gate node of the mosfet */ int VDIOposPrimeNode; /* number of the internal node of the bulk diode */ double VDMOSm; /* parallel device multiplier */ double VDMOSl; /* the length of the channel region */ double VDMOSw; /* the width of the channel region */ double VDMOSsourceConductance; /*conductance of source(or 0):set in setup*/ double VDMOSdrainConductance; /*conductance of drain(or 0):set in setup*/ double VDMOSgateConductance; /*conductance of gate(or 0):set in setup*/ double VDMOSdsConductance; /*conductance of drain to source:set in setup*/ double VDMOStemp; /* operating temperature of this instance */ double VDMOSdtemp; /* operating temperature of the instance relative to circuit temperature*/ double VDMOStTransconductance; /* temperature corrected transconductance*/ double VDMOStPhi; /* temperature corrected Phi */ double VDMOStVto; /* temperature corrected Vto */ double VDMOStSatCur; /* temperature corrected saturation Cur. */ double VDMOSicVDS; /* initial condition D-S voltage */ double VDMOSicVGS; /* initial condition G-S voltage */ double VDMOSvon; double VDMOSvdsat; double VDMOSsourceVcrit; /* Vcrit for pos. vds */ double VDMOSdrainVcrit; /* Vcrit for pos. vds */ double VDMOScd; double VDMOSgm; double VDMOSgds; double VDMOSf2d; double VDMOSf3d; double VDMOSf4d; double VDMOSf2s; double VDMOSf3s; double VDMOSf4s; double VDIOcap; double VDIOtSatCur; /* temperature corrected saturation Cur. density*/ double VDIOinitCond; double VDIOtVcrit; double VDIOtConductance; double VDIOtBrkdwnV; double VDIOtJctCap; double VDIOtDepCap; /* temperature adjusted transition point in */ /* the cureve matching Fc * Vj */ double VDIOtJctPot; /* temperature corrected Bulk potential */ double VDIOtGradingCoeff; double VDIOtTransitTime; double VDIOtF1; double VDIOtF2; double VDIOtF3; /* * naming convention: * x = vgs * y = vbs * z = vds * cdr = cdrain */ #define VDMOSNDCOEFFS 11 #ifndef NODISTO double VDMOSdCoeffs[VDMOSNDCOEFFS]; #else /* NODISTO */ double *VDMOSdCoeffs; #endif /* NODISTO */ #ifndef CONFIG #define cdr_x2 VDMOSdCoeffs[0] #define cdr_y2 VDMOSdCoeffs[1] #define cdr_xy VDMOSdCoeffs[2] #define cdr_x3 VDMOSdCoeffs[3] #define cdr_y3 VDMOSdCoeffs[4] #define cdr_x2y VDMOSdCoeffs[5] #define cdr_xy2 VDMOSdCoeffs[6] #define capgs2 VDMOSdCoeffs[7] #define capgs3 VDMOSdCoeffs[8] #define capgd2 VDMOSdCoeffs[9] #define capgd3 VDMOSdCoeffs[10] #endif #ifndef NONOISE double VDMOSnVar[NSTATVARS][VDMOSNSRCS]; #else /* NONOISE */ double **VDMOSnVar; #endif /* NONOISE */ int VDMOSmode; /* device mode : 1 = normal, -1 = inverse */ unsigned VDMOSoff:1; /* non-zero to indicate device is off for dc analysis*/ unsigned VDMOStempGiven :1; /* instance temperature specified */ unsigned VDMOSdtempGiven :1; /* instance delta temperature specified */ unsigned VDMOSmGiven :1; unsigned VDMOSlGiven :1; unsigned VDMOSwGiven :1; unsigned VDMOSdNodePrimeSet :1; unsigned VDMOSsNodePrimeSet :1; unsigned VDMOSicVDSGiven :1; unsigned VDMOSicVGSGiven :1; unsigned VDMOSvonGiven :1; unsigned VDMOSvdsatGiven :1; unsigned VDMOSmodeGiven :1; double *VDMOSDdPtr; /* pointer to sparse matrix element at * (Drain node,drain node) */ double *VDMOSGgPtr; /* pointer to sparse matrix element at * (gate node,gate node) */ double *VDMOSSsPtr; /* pointer to sparse matrix element at * (source node,source node) */ double *VDMOSDPdpPtr; /* pointer to sparse matrix element at * (drain prime node,drain prime node) */ double *VDMOSSPspPtr; /* pointer to sparse matrix element at * (source prime node,source prime node) */ double *VDMOSDdpPtr; /* pointer to sparse matrix element at * (drain node,drain prime node) */ double *VDMOSGdpPtr; /* pointer to sparse matrix element at * (gate node,drain prime node) */ double *VDMOSGspPtr; /* pointer to sparse matrix element at * (gate node,source prime node) */ double *VDMOSSspPtr; /* pointer to sparse matrix element at * (source node,source prime node) */ double *VDMOSDPspPtr; /* pointer to sparse matrix element at * (drain prime node,source prime node) */ double *VDMOSDPdPtr; /* pointer to sparse matrix element at * (drain prime node,drain node) */ double *VDMOSDPgPtr; /* pointer to sparse matrix element at * (drain prime node,gate node) */ double *VDMOSSPgPtr; /* pointer to sparse matrix element at * (source prime node,gate node) */ double *VDMOSSPsPtr; /* pointer to sparse matrix element at * (source prime node,source node) */ double *VDMOSSPdpPtr; /* pointer to sparse matrix element at * (source prime node,drain prime node) */ /* added for VDMOS */ double *VDMOSGPgpPtr; /* pointer to sparse matrix element at * (gate prime node, gate prime node) */ double *VDMOSGPdpPtr; /* pointer to sparse matrix element at * (gate prime node, drain prime node) */ double *VDMOSGPspPtr; /* pointer to sparse matrix element at * (gate prime node, source prime node) */ double *VDMOSDPgpPtr; /* pointer to sparse matrix element at * (drain prime node, gate prime node) */ double *VDMOSSPgpPtr; /* pointer to sparse matrix element at * (source prime node, gate prime node) */ double *VDMOSGgpPtr; /* pointer to sparse matrix element at * (gate node, gate prime node) */ double *VDMOSGPgPtr; /* pointer to sparse matrix element at * (gate prime node, gate node) */ double *VDMOSDsPtr; /* pointer to sparse matrix element at * (source node, drain node) */ double *VDMOSSdPtr; /* pointer to sparse matrix element at * (drain node, source node) */ /* bulk diode */ double *VDIORPdPtr; /* pointer to sparse matrix element at * (diode prime node, drain node) */ double *VDIODrpPtr; /* pointer to sparse matrix element at * (drain node, diode prime node) */ double *VDIORPrpPtr; /* pointer to sparse matrix element at * (diode prime node, diode prime node) */ double *VDIOSrpPtr; /* pointer to sparse matrix element at * (source node, diode prime node) */ double *VDIORPsPtr; /* pointer to sparse matrix element at * (diode prime node, source node) */ } VDMOSinstance ; #define VDMOSvgs VDMOSstates+ 0 /* gate-source voltage */ #define VDMOSvds VDMOSstates+ 1 /* drain-source voltage */ #define VDMOScapgs VDMOSstates+2 /* gate-source capacitor value */ #define VDMOSqgs VDMOSstates+ 3 /* gate-source capacitor charge */ #define VDMOScqgs VDMOSstates+ 4 /* gate-source capacitor current */ #define VDMOScapgd VDMOSstates+ 5 /* gate-drain capacitor value */ #define VDMOSqgd VDMOSstates+ 6 /* gate-drain capacitor charge */ #define VDMOScqgd VDMOSstates+ 7 /* gate-drain capacitor current */ #define VDIOvoltage VDMOSstates+ 8 #define VDIOcurrent VDMOSstates+ 9 #define VDIOconduct VDMOSstates+ 10 #define VDIOcapCharge VDMOSstates+ 11 #define VDIOcapCurrent VDMOSstates+ 12 #define VDMOSnumStates 13 /* per model data */ /* NOTE: parameters marked 'input - use xxxx' are paramters for * which a temperature correction is applied in VDMOStemp, thus * the VDMOSxxxx value in the per-instance structure should be used * instead in all calculations */ typedef struct sVDMOSmodel { /* model structure for a resistor */ struct GENmodel gen; #define VDMOSmodType gen.GENmodType #define VDMOSnextModel(inst) ((struct sVDMOSmodel *)((inst)->gen.GENnextModel)) #define VDMOSinstances(inst) ((VDMOSinstance *)((inst)->gen.GENinstances)) #define VDMOSmodName gen.GENmodName int VDMOStype; /* device type : 1 = nmos, -1 = pmos */ double VDMOStnom; /* temperature at which parameters measured */ double VDMOSdrainResistance; double VDMOSsourceResistance; double VDMOSgateResistance; double VDMOSqsResistance; double VDMOSqsVoltage; double VDMOStransconductance; /* input - use tTransconductance */ double VDMOSoxideCapFactor; double VDMOSvt0; /* input - use tVto */ double VDMOSphi; /* input - use tPhi */ double VDMOSlambda; double VDMOStheta; double VDMOSfNcoef; double VDMOSfNexp; double VDMOScgdmin; double VDMOScgdmax; double VDMOSa; double VDMOScgs; double VDMOSsubsl; double VDMOSsubshift; double VDMOSksubthres; double VDMOSmtr; /* bulk diode */ double VDIOjunctionCap; /* input - use tCj */ double VDIOjunctionPot; /* input - use tBulkPot */ double VDIOdepletionCapCoeff; double VDIOjctSatCur; /* input - use tSatCur */ double VDMOSDbv; double VDMOSDibv; double VDIObrkdEmissionCoeff; double VDIOresistance; double VDIOresistTemp1; double VDIOresistTemp2; double VDIOconductance; double VDMOSrds; double VDMOSDn; double VDIOtransitTime; double VDIOtranTimeTemp1; double VDIOtranTimeTemp2; double VDMOSDeg; double VDMOSDxti; double VDIOgradCoeff; double VDIOgradCoeffTemp1; double VDIOgradCoeffTemp2; unsigned VDMOStypeGiven :1; unsigned VDIOjctSatCurGiven :1; unsigned VDMOSdrainResistanceGiven :1; unsigned VDMOSsourceResistanceGiven :1; unsigned VDMOSgateResistanceGiven :1; unsigned VDMOSqsResistanceGiven :1; unsigned VDMOSqsVoltageGiven :1; unsigned VDMOSqsGiven :1; unsigned VDMOStransconductanceGiven :1; unsigned VDMOSvt0Given :1; unsigned VDIOgradCoeffGiven :1; unsigned VDIOdepletionCapCoeffGiven :1; unsigned VDMOSphiGiven :1; unsigned VDMOSlambdaGiven :1; unsigned VDMOSthetaGiven :1; unsigned VDMOStnomGiven :1; unsigned VDMOSfNcoefGiven :1; unsigned VDMOSfNexpGiven :1; unsigned VDMOScgdminGiven :1; unsigned VDMOScgdmaxGiven :1; unsigned VDMOScgsGiven :1; unsigned VDMOSaGiven :1; unsigned VDMOSsubslGiven :1; unsigned VDMOSsubshiftGiven :1; unsigned VDMOSksubthresGiven :1; unsigned VDMOSmtrGiven :1; unsigned VDMOSDbvGiven :1; unsigned VDMOSDibvGiven :1; unsigned VDIOjunctionCapGiven :1; unsigned VDIOjunctionPotGiven :1; unsigned VDIObrkdEmissionCoeffGiven :1; unsigned VDIOresistanceGiven :1; unsigned VDMOSrdsGiven :1; unsigned VDMOSDnGiven :1; unsigned VDIOtransitTimeGiven :1; unsigned VDMOSDegGiven :1; unsigned VDMOSDxtiGiven :1; } VDMOSmodel; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ /* device parameters */ enum { VDMOS_W = 1, VDMOS_L, VDMOS_OFF, VDMOS_IC, VDMOS_IC_VDS, VDMOS_IC_VGS, VDMOS_CG, VDMOS_CS, VDMOS_POWER, VDMOS_TEMP, VDMOS_M, VDMOS_DTEMP, }; /* model paramerers */ enum { VDMOS_MOD_VTO = 101, VDMOS_MOD_KP, VDMOS_MOD_PHI, VDMOS_MOD_LAMBDA, VDMOS_MOD_THETA, VDMOS_MOD_RD, VDMOS_MOD_RS, VDMOS_MOD_RG, VDMOS_MOD_RQ, VDMOS_MOD_VQ, VDMOS_MOD_IS, VDMOS_MOD_VJ, VDMOS_MOD_CJ, VDMOS_MOD_MJ, VDMOS_MOD_FC, VDMOS_MOD_NMOS, VDMOS_MOD_PMOS, VDMOS_MOD_TNOM, VDMOS_MOD_KF, VDMOS_MOD_AF, VDMOS_MOD_TYPE, VDMOS_MOD_DMOS, VDMOS_MOD_CGDMIN, VDMOS_MOD_CGDMAX, VDMOS_MOD_A, VDMOS_MOD_CGS, VDMOS_MOD_RB, VDMOS_MOD_MTRIODE, VDMOS_MOD_SUBSLOPE, VDMOS_MOD_SUBSHIFT, VDMOS_MOD_KSUBTHRES, VDMOS_MOD_BV, VDMOS_MOD_IBV, VDMOS_MOD_NBV, VDMOS_MOD_RDS, VDMOS_MOD_N, VDMOS_MOD_TT, VDMOS_MOD_EG, VDMOS_MOD_XTI, }; /* device questions */ enum { VDMOS_CAPGS = 201, VDMOS_CAPGD, VDMOS_CAPDS, VDMOS_DNODE, VDMOS_GNODE, VDMOS_SNODE, VDMOS_DNODEPRIME, VDMOS_SNODEPRIME, VDMOS_SOURCECONDUCT, VDMOS_DRAINCONDUCT, VDMOS_VON, VDMOS_VDSAT, VDMOS_SOURCEVCRIT, VDMOS_DRAINVCRIT, VDMOS_CD, VDMOS_GM, VDMOS_GDS, VDMOS_VGS, VDMOS_VDS, VDMOS_QGS, VDMOS_CQGS, VDMOS_QGD, VDMOS_CQGD, VDMOS_SOURCERESIST, VDMOS_DRAINRESIST, }; /* model questions */ #include "vdmosext.h" #endif /*VDMOS*/ tmpk8ny_4pz/src/spicelib/devices/vdmos/vdmosic.c0000644000175000017500000000215413546075722022125 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vdmosdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VDMOSgetic(GENmodel *inModel, CKTcircuit *ckt) { VDMOSmodel *model = (VDMOSmodel *)inModel; VDMOSinstance *here; /* * grab initial conditions out of rhs array. User specified, so use * external nodes to get values */ for( ; model ; model = VDMOSnextModel(model)) { for(here = VDMOSinstances(model); here ; here = VDMOSnextInstance(here)) { if(!here->VDMOSicVDSGiven) { here->VDMOSicVDS = *(ckt->CKTrhs + here->VDMOSdNode) - *(ckt->CKTrhs + here->VDMOSsNode); } if(!here->VDMOSicVGSGiven) { here->VDMOSicVGS = *(ckt->CKTrhs + here->VDMOSgNode) - *(ckt->CKTrhs + here->VDMOSsNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vdmos/vdmosacld.c0000644000175000017500000000707113546075722022440 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vdmosdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VDMOSacLoad(GENmodel *inModel, CKTcircuit *ckt) { VDMOSmodel *model = (VDMOSmodel*)inModel; VDMOSinstance *here; int xnrm; int xrev; double xgs; double xgd; double capgs; double capgd; for( ; model != NULL; model = VDMOSnextModel(model)) { for(here = VDMOSinstances(model); here!= NULL; here = VDMOSnextInstance(here)) { if (here->VDMOSmode < 0) { xnrm=0; xrev=1; } else { xnrm=1; xrev=0; } /* * VDMOS cap model parameters */ capgs = ( *(ckt->CKTstate0+here->VDMOScapgs)+ *(ckt->CKTstate0+here->VDMOScapgs)); capgd = ( *(ckt->CKTstate0+here->VDMOScapgd)+ *(ckt->CKTstate0+here->VDMOScapgd)); xgs = capgs * ckt->CKTomega; xgd = capgd * ckt->CKTomega; /* bulk diode */ double gspr, geq, xceq; gspr = here->VDIOtConductance; geq = *(ckt->CKTstate0 + here->VDIOconduct); xceq= *(ckt->CKTstate0 + here->VDIOcapCurrent) * ckt->CKTomega; /* * load matrix */ *(here->VDMOSGPgpPtr +1) += xgd+xgs; *(here->VDMOSDPdpPtr +1) += xgd; *(here->VDMOSSPspPtr +1) += xgs; *(here->VDMOSGPdpPtr +1) -= xgd; *(here->VDMOSGPspPtr +1) -= xgs; *(here->VDMOSDPgpPtr +1) -= xgd; *(here->VDMOSSPgpPtr +1) -= xgs; *(here->VDMOSDdPtr) += here->VDMOSdrainConductance; *(here->VDMOSSsPtr) += here->VDMOSsourceConductance; *(here->VDMOSDPdpPtr) += here->VDMOSdrainConductance+ here->VDMOSgds+xrev*(here->VDMOSgm); *(here->VDMOSSPspPtr) += here->VDMOSsourceConductance+ here->VDMOSgds+xnrm*(here->VDMOSgm); *(here->VDMOSDdpPtr) -= here->VDMOSdrainConductance; *(here->VDMOSSspPtr) -= here->VDMOSsourceConductance; *(here->VDMOSDPdPtr) -= here->VDMOSdrainConductance; *(here->VDMOSDPgpPtr) += (xnrm-xrev)*here->VDMOSgm; *(here->VDMOSDPspPtr) -= here->VDMOSgds+xnrm*(here->VDMOSgm); *(here->VDMOSSPgpPtr) -= (xnrm-xrev)*here->VDMOSgm; *(here->VDMOSSPsPtr) -= here->VDMOSsourceConductance; *(here->VDMOSSPdpPtr) -= here->VDMOSgds+xrev*(here->VDMOSgm); /* gate resistor */ *(here->VDMOSGgPtr) += (here->VDMOSgateConductance); *(here->VDMOSGPgpPtr) += (here->VDMOSgateConductance)/* + ?? FIXME */; *(here->VDMOSGgpPtr) -= here->VDMOSgateConductance; *(here->VDMOSGPgPtr) -= here->VDMOSgateConductance; /* bulk diode */ *(here->VDMOSSsPtr) += gspr; *(here->VDMOSDdPtr) += geq; *(here->VDMOSDdPtr +1) += xceq; *(here->VDIORPrpPtr) += geq+gspr; *(here->VDIORPrpPtr +1) += xceq; *(here->VDIOSrpPtr) -= gspr; *(here->VDIODrpPtr) -= geq; *(here->VDIODrpPtr +1) -= xceq; *(here->VDIORPsPtr) -= gspr; *(here->VDIORPdPtr) -= geq; *(here->VDIORPdPtr +1) -= xceq; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vdmos/vdmosmask.c0000644000175000017500000001015213546075722022462 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "vdmosdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int VDMOSmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { VDMOSmodel *model = (VDMOSmodel *)inst; NG_IGNORE(ckt); switch(which) { case VDMOS_MOD_TNOM: value->rValue = model->VDMOStnom-CONSTCtoK; return(OK); case VDMOS_MOD_VTO: value->rValue = model->VDMOSvt0; return(OK); case VDMOS_MOD_KP: value->rValue = model->VDMOStransconductance; return(OK); case VDMOS_MOD_PHI: value->rValue = model->VDMOSphi; return(OK); case VDMOS_MOD_LAMBDA: value->rValue = model->VDMOSlambda; return(OK); case VDMOS_MOD_THETA: value->rValue = model->VDMOStheta; return(OK); case VDMOS_MOD_RD: value->rValue = model->VDMOSdrainResistance; return(OK); case VDMOS_MOD_RS: value->rValue = model->VDMOSsourceResistance; return(OK); case VDMOS_MOD_RG: value->rValue = model->VDMOSgateResistance; return(OK); case VDMOS_MOD_RQ: value->rValue = model->VDMOSqsResistance; return(OK); case VDMOS_MOD_VQ: value->rValue = model->VDMOSqsVoltage; return(OK); case VDMOS_MOD_MTRIODE: value->rValue = model->VDMOSmtr; return(OK); case VDMOS_MOD_SUBSLOPE: value->rValue = model->VDMOSsubsl; return(OK); case VDMOS_MOD_SUBSHIFT: value->rValue = model->VDMOSsubshift; return(OK); case VDMOS_MOD_KSUBTHRES: value->rValue = model->VDMOSksubthres; return(OK); case VDMOS_MOD_TYPE: if (model->VDMOStype > 0) value->sValue = "vdmosn"; else value->sValue = "vdmosp"; return(OK); case VDMOS_MOD_CGDMIN: value->rValue = model->VDMOScgdmin; return(OK); case VDMOS_MOD_CGDMAX: value->rValue = model->VDMOScgdmax; return(OK); case VDMOS_MOD_A: value->rValue = model->VDMOSa; return(OK); case VDMOS_MOD_CGS: value->rValue = model->VDMOScgs; return(OK); /* body diode */ case VDMOS_MOD_RB: value->rValue = model->VDIOresistance; return(OK); case VDMOS_MOD_IS: value->rValue = model->VDIOjctSatCur; return(OK); case VDMOS_MOD_N: value->rValue = model->VDMOSDn; return(OK); case VDMOS_MOD_VJ: value->rValue = model->VDIOjunctionPot; return(OK); case VDMOS_MOD_CJ: value->rValue = model->VDIOjunctionCap; return(OK); case VDMOS_MOD_MJ: value->rValue = model->VDIOgradCoeff; return(OK); case VDMOS_MOD_BV: value->rValue = model->VDMOSDbv; return(OK); case VDMOS_MOD_IBV: value->rValue = model->VDMOSDibv; return(OK); case VDMOS_MOD_NBV: value->rValue = model->VDIObrkdEmissionCoeff; return(OK); case VDMOS_MOD_RDS: value->rValue = model->VDMOSrds; return(OK); case VDMOS_MOD_FC: value->rValue = model->VDIOdepletionCapCoeff; return(OK); case VDMOS_MOD_TT: value->rValue = model->VDIOtransitTime; return(OK); case VDMOS_MOD_EG: value->rValue = model->VDMOSDeg; return(OK); case VDMOS_MOD_XTI: value->rValue = model->VDMOSDxti; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/vdmos/vdmosmpar.c0000644000175000017500000001447013546075722022475 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "vdmosdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VDMOSmParam(int param, IFvalue *value, GENmodel *inModel) { VDMOSmodel *model = (VDMOSmodel *)inModel; switch(param) { case VDMOS_MOD_TNOM: model->VDMOStnom = value->rValue + CONSTCtoK; model->VDMOStnomGiven = TRUE; break; case VDMOS_MOD_VTO: model->VDMOSvt0 = value->rValue; model->VDMOSvt0Given = TRUE; break; case VDMOS_MOD_KP: model->VDMOStransconductance = value->rValue; model->VDMOStransconductanceGiven = TRUE; break; case VDMOS_MOD_PHI: model->VDMOSphi = value->rValue; model->VDMOSphiGiven = TRUE; break; case VDMOS_MOD_LAMBDA: model->VDMOSlambda = value->rValue; model->VDMOSlambdaGiven = TRUE; break; case VDMOS_MOD_THETA: model->VDMOStheta = value->rValue; model->VDMOSthetaGiven = TRUE; break; case VDMOS_MOD_RD: model->VDMOSdrainResistance = value->rValue; model->VDMOSdrainResistanceGiven = TRUE; break; case VDMOS_MOD_RS: model->VDMOSsourceResistance = value->rValue; model->VDMOSsourceResistanceGiven = TRUE; break; case VDMOS_MOD_RG: model->VDMOSgateResistance = value->rValue; model->VDMOSgateResistanceGiven = TRUE; break; case VDMOS_MOD_RQ: model->VDMOSqsResistance = value->rValue; model->VDMOSqsResistanceGiven = TRUE; if (model->VDMOSqsVoltageGiven) model->VDMOSqsGiven = TRUE; break; case VDMOS_MOD_VQ: model->VDMOSqsVoltage = value->rValue; model->VDMOSqsVoltageGiven = TRUE; if (model->VDMOSqsResistanceGiven) model->VDMOSqsGiven = TRUE; break; case VDMOS_MOD_RB: model->VDIOresistance = value->rValue; model->VDIOresistanceGiven = TRUE; model->VDIOresistTemp1 = 0; model->VDIOresistTemp2 = 0; break; case VDMOS_MOD_IS: model->VDIOjctSatCur = value->rValue; model->VDIOjctSatCurGiven = TRUE; break; case VDMOS_MOD_VJ: model->VDIOjunctionPot = value->rValue; model->VDIOjunctionPotGiven = TRUE; break; case VDMOS_MOD_CJ: model->VDIOjunctionCap = value->rValue; model->VDIOjunctionCapGiven = TRUE; break; case VDMOS_MOD_MJ: model->VDIOgradCoeff = value->rValue; model->VDIOgradCoeffGiven = TRUE; model->VDIOgradCoeffTemp1 = 0; model->VDIOgradCoeffTemp2 = 0; break; case VDMOS_MOD_FC: model->VDIOdepletionCapCoeff = value->rValue; model->VDIOdepletionCapCoeffGiven = TRUE; break; case VDMOS_MOD_NMOS: if(value->iValue) { model->VDMOStype = 1; model->VDMOStypeGiven = TRUE; } break; case VDMOS_MOD_PMOS: if(value->iValue) { model->VDMOStype = -1; model->VDMOStypeGiven = TRUE; } break; case VDMOS_MOD_KF: model->VDMOSfNcoef = value->rValue; model->VDMOSfNcoefGiven = TRUE; break; case VDMOS_MOD_AF: model->VDMOSfNexp = value->rValue; model->VDMOSfNexpGiven = TRUE; break; case VDMOS_MOD_DMOS: if (value->iValue) { model->VDMOStype = 1; model->VDMOStypeGiven = TRUE; } break; case VDMOS_MOD_CGDMIN: model->VDMOScgdmin = value->rValue; model->VDMOScgdminGiven = TRUE; break; case VDMOS_MOD_CGDMAX: model->VDMOScgdmax = value->rValue; model->VDMOScgdmaxGiven = TRUE; break; case VDMOS_MOD_A: model->VDMOSa = value->rValue; model->VDMOSaGiven = TRUE; break; case VDMOS_MOD_CGS: model->VDMOScgs = value->rValue; model->VDMOScgsGiven = TRUE; break; case VDMOS_MOD_MTRIODE: model->VDMOSmtr = value->rValue; model->VDMOSmtrGiven = TRUE; break; case VDMOS_MOD_SUBSLOPE: model->VDMOSsubsl = value->rValue; model->VDMOSsubslGiven = TRUE; break; case VDMOS_MOD_SUBSHIFT: model->VDMOSsubshift = value->rValue; model->VDMOSsubshiftGiven = TRUE; break; case VDMOS_MOD_KSUBTHRES: model->VDMOSksubthres = value->rValue; model->VDMOSksubthresGiven = TRUE; break; case VDMOS_MOD_BV: model->VDMOSDbv = value->rValue; model->VDMOSDbvGiven = TRUE; break; case VDMOS_MOD_IBV: model->VDMOSDibv = value->rValue; model->VDMOSDibvGiven = TRUE; break; case VDMOS_MOD_NBV: model->VDIObrkdEmissionCoeff = value->rValue; model->VDIObrkdEmissionCoeffGiven = TRUE; break; case VDMOS_MOD_RDS: model->VDMOSrds = value->rValue; model->VDMOSrdsGiven = TRUE; break; case VDMOS_MOD_N: model->VDMOSDn = value->rValue; model->VDMOSDnGiven = TRUE; break; case VDMOS_MOD_TT: model->VDIOtransitTime = value->rValue; model->VDIOtransitTimeGiven = TRUE; model->VDIOtranTimeTemp1 = 0; model->VDIOtranTimeTemp2 = 0; break; case VDMOS_MOD_EG: model->VDMOSDeg = value->rValue; model->VDMOSDegGiven = TRUE; break; case VDMOS_MOD_XTI: model->VDMOSDxti = value->rValue; model->VDMOSDxtiGiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vdmos/vdmosconv.c0000644000175000017500000000422313546075722022476 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vdmosdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VDMOSconvTest(GENmodel *inModel, CKTcircuit *ckt) { VDMOSmodel *model = (VDMOSmodel*)inModel; VDMOSinstance *here; double delvgs; double delvds; double delvgd; double cdhat; double vgs; double vds; double vgd; double vgdo; double tol; for( ; model != NULL; model = VDMOSnextModel(model)) { for(here = VDMOSinstances(model); here!= NULL; here = VDMOSnextInstance(here)) { vgs = model->VDMOStype * ( *(ckt->CKTrhs+here->VDMOSgNode) - *(ckt->CKTrhs+here->VDMOSsNodePrime)); vds = model->VDMOStype * ( *(ckt->CKTrhs+here->VDMOSdNodePrime) - *(ckt->CKTrhs+here->VDMOSsNodePrime)); vgd=vgs-vds; vgdo = *(ckt->CKTstate0 + here->VDMOSvgs) - *(ckt->CKTstate0 + here->VDMOSvds); delvgs = vgs - *(ckt->CKTstate0 + here->VDMOSvgs); delvds = vds - *(ckt->CKTstate0 + here->VDMOSvds); delvgd = vgd-vgdo; /* these are needed for convergence testing */ if (here->VDMOSmode >= 0) { cdhat= here->VDMOScd - here->VDMOSgm * delvgs + here->VDMOSgds * delvds ; } else { cdhat= here->VDMOScd - here->VDMOSgm * delvgd + here->VDMOSgds * delvds ; } /* * check convergence */ tol=ckt->CKTreltol*MAX(fabs(cdhat),fabs(here->VDMOScd))+ ckt->CKTabstol; if (fabs(cdhat-here->VDMOScd) >= tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue, we haven't converged */ } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vdmos/vdmospzld.c0000644000175000017500000000601713546075722022505 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "vdmosdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VDMOSpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { VDMOSmodel *model = (VDMOSmodel*)inModel; VDMOSinstance *here; int xnrm; int xrev; double xgs; double xgd; double capgs; double capgd; for( ; model != NULL; model = VDMOSnextModel(model)) { for(here = VDMOSinstances(model); here!= NULL; here = VDMOSnextInstance(here)) { if (here->VDMOSmode < 0) { xnrm=0; xrev=1; } else { xnrm=1; xrev=0; } /* * meyer's model parameters */ capgs = ( 2* *(ckt->CKTstate0+here->VDMOScapgs)); capgd = ( 2* *(ckt->CKTstate0+here->VDMOScapgd)); xgs = capgs; xgd = capgd; /*printf("vdmos: xgs=%g, xgd=%g\n", xgs,xgd);*/ /* * load matrix */ *(here->VDMOSGgPtr ) += (xgd+xgs)*s->real; *(here->VDMOSGgPtr +1) += (xgd+xgs)*s->imag; *(here->VDMOSDPdpPtr ) += (xgd)*s->real; *(here->VDMOSDPdpPtr +1) += (xgd)*s->imag; *(here->VDMOSSPspPtr ) += (xgs)*s->real; *(here->VDMOSSPspPtr +1) += (xgs)*s->imag; *(here->VDMOSGdpPtr ) -= xgd*s->real; *(here->VDMOSGdpPtr +1) -= xgd*s->imag; *(here->VDMOSGspPtr ) -= xgs*s->real; *(here->VDMOSGspPtr +1) -= xgs*s->imag; *(here->VDMOSDPgPtr ) -= xgd*s->real; *(here->VDMOSDPgPtr +1) -= xgd*s->imag; *(here->VDMOSSPgPtr ) -= xgs*s->real; *(here->VDMOSSPgPtr +1) -= xgs*s->imag; *(here->VDMOSDdPtr) += here->VDMOSdrainConductance; *(here->VDMOSSsPtr) += here->VDMOSsourceConductance; *(here->VDMOSDPdpPtr) += here->VDMOSdrainConductance+ here->VDMOSgds+ xrev*(here->VDMOSgm); *(here->VDMOSSPspPtr) += here->VDMOSsourceConductance+ here->VDMOSgds+ xnrm*(here->VDMOSgm); *(here->VDMOSDdpPtr) -= here->VDMOSdrainConductance; *(here->VDMOSSspPtr) -= here->VDMOSsourceConductance; *(here->VDMOSDPdPtr) -= here->VDMOSdrainConductance; *(here->VDMOSDPgPtr) += (xnrm-xrev)*here->VDMOSgm; *(here->VDMOSDPspPtr) -= here->VDMOSgds+ xnrm*(here->VDMOSgm); *(here->VDMOSSPgPtr) -= (xnrm-xrev)*here->VDMOSgm; *(here->VDMOSSPsPtr) -= here->VDMOSsourceConductance; *(here->VDMOSSPdpPtr) -= here->VDMOSgds+ xrev*(here->VDMOSgm); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vdmos/vdmosdset.c0000644000175000017500000002272113546075722022473 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "vdmosdefs.h" #include "ngspice/distodef.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VDMOSdSetup(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current value into the * sparse matrix previously provided */ { VDMOSmodel *model = (VDMOSmodel *) inModel; VDMOSinstance *here; double Beta; double DrainSatCur; double SourceSatCur; double gm; double gds; double vgst; double vds; double vdsat; double vgd; double vgs; double vt; double gm2; double gds2; double gmds; double gm3; double gds3; double gm2ds; double gmds2; double lcapgs2; double lcapgs3; double lcapgd2; double lcapgd3; /* loop through all the VDMOS device models */ for( ; model != NULL; model = VDMOSnextModel(model)) { /* loop through all the instances of the model */ for (here = VDMOSinstances(model); here != NULL ; here=VDMOSnextInstance(here)) { vt = CONSTKoverQ * here->VDMOStemp; DrainSatCur = here->VDMOSm * here->VDMOStSatCur; SourceSatCur = here->VDMOSm * here->VDMOStSatCur; Beta = here->VDMOStTransconductance * here->VDMOSm * here->VDMOSw/here->VDMOSl; vgs = model->VDMOStype * ( *(ckt->CKTrhsOld+here->VDMOSgNode) - *(ckt->CKTrhsOld+here->VDMOSsNodePrime)); vds = model->VDMOStype * ( *(ckt->CKTrhsOld+here->VDMOSdNodePrime) - *(ckt->CKTrhsOld+here->VDMOSsNodePrime)); /* now some common crunching for some more useful quantities */ vgd=vgs-vds; /* now to determine whether the user was able to correctly * identify the source and drain of his device */ if(vds >= 0) { /* normal mode */ here->VDMOSmode = 1; } else { /* inverse mode */ here->VDMOSmode = -1; } /* * this block of code evaluates the drain current and its * derivatives using the shichman-hodges model and the * charges associated with the gate, channel and bulk for * mosfets * */ /* the following variables are local to this code block until * it is obvious that they can be made global */ { double betap; vgst=(here->VDMOSmode==1?vgs:vgd); vdsat=MAX(vgst,0); if (vgst <= 0) { /* * cutoff region */ /* cdrain = 0 */ gm=0; gds=0; gm2=gds2=0; gmds=0; gm3=gds3=0; gm2ds=gmds2=0; } else { /* * saturation region */ betap=Beta*(1+model->VDMOSlambda*(vds*here->VDMOSmode)); /* cdrain = betap * vgst * vgst * 0.5; */ if (vgst <= (vds*here->VDMOSmode)){ gm=betap*vgst; gds=model->VDMOSlambda*Beta*vgst*vgst*.5; gm2 = betap; gds2 = 0; gmds = vgst*model->VDMOSlambda*Beta; gm3 = 0; gds3 = 0; gm2ds = Beta * model->VDMOSlambda; gmds2 = 0; } else { /* * linear region */ /* cdrain = betap * vds * (vgst - vds/2); */ gm=betap*(vds*here->VDMOSmode); gds= Beta * model->VDMOSlambda*(vgst* vds*here->VDMOSmode - vds*vds*0.5) + betap*(vgst - vds*here->VDMOSmode); gm2 = 0; gds2 = 2*Beta * model->VDMOSlambda*(vgst - vds*here->VDMOSmode) - betap; gmds = Beta * model->VDMOSlambda* vds * here->VDMOSmode + betap; gm3=0; gds3 = -Beta*model->VDMOSlambda*3.; gm2ds=0; gmds2 = 2*model->VDMOSlambda*Beta; } } /* * finished */ } /* code block */ /* * COMPUTE EQUIVALENT DRAIN CURRENT SOURCE */ /* * now we do the hard part of the bulk-drain and bulk-source * diode - we evaluate the non-linear capacitance and * charge * * the basic equations are not hard, but the implementation * is somewhat long in an attempt to avoid log/exponential * evaluations */ /* * meyer's capacitor model */ /* * the meyer capacitance equations are in DEVqmeyer * these expressions are derived from those equations. * these expressions are incorrect; they assume just one * controlling variable for each charge storage element * while actually there are several; the VDMOS small * signal ac linear model is also wrong because it * ignores controlled capacitive elements. these can be * corrected (as can the linear ss ac model) if the * expressions for the charge are available */ { double phi; double cox; double vddif; double vddif1; double vddif2; /* von, vgst and vdsat have already been adjusted for possible source-drain interchange */ phi = here->VDMOStPhi; cox = 0;/*FIXME: can we do disto without knowing the oxide thickness?*/ lcapgs2=lcapgs3=lcapgd2=lcapgd3=0; if (vgst <= 0) { lcapgs2 = cox/(3*phi); } else { /* the VDMOSmodes are around because vds has not been adjusted */ if (vdsat <= here->VDMOSmode*vds) { lcapgs2=lcapgs3=lcapgd2=lcapgd3=0; } else { vddif = 2.0*vdsat-here->VDMOSmode*vds; vddif1 = vdsat-here->VDMOSmode*vds/*-1.0e-12*/; vddif2 = vddif*vddif; lcapgd2 = -vdsat*here->VDMOSmode*vds*cox/(3*vddif*vddif2); lcapgd3 = - here->VDMOSmode*vds*cox*(vddif - 6*vdsat)/(9*vddif2*vddif2); lcapgs2 = -vddif1*here->VDMOSmode*vds*cox/(3*vddif*vddif2); lcapgs3 = - here->VDMOSmode*vds*cox*(vddif - 6*vddif1)/(9*vddif2*vddif2); } } } /* * process to get Taylor coefficients, taking into * account type and mode. */ if (here->VDMOSmode == 1) { /* normal mode - no source-drain interchange */ here->cdr_x2 = gm2; here->cdr_y2 = gds2;; here->cdr_xy = gmds; here->cdr_x3 = gm3; here->cdr_y3 = gds3; here->cdr_x2y = gm2ds; here->cdr_xy2 = gmds2; /* the gate caps have been divided and made into Taylor coeffs., but not adjusted for type */ here->capgs2 = model->VDMOStype*lcapgs2; here->capgs3 = lcapgs3; here->capgd2 = model->VDMOStype*lcapgd2; here->capgd3 = lcapgd3; } else { /* * inverse mode - source and drain interchanged */ here->cdr_x2 = -gm2; here->cdr_y2 = -(gm2 + gds2 + 2*(gmds)); here->cdr_xy = gm2 + gmds; here->cdr_x3 = -gm3; here->cdr_y3 = gm3 + gds3 + 3*(gm2ds + gmds2) ; here->cdr_x2y = gm3 + gm2ds; here->cdr_xy2 = -(gm3 + 2*(gm2ds) + gmds2); here->capgs2 = model->VDMOStype*lcapgd2; here->capgs3 = lcapgd3; here->capgd2 = model->VDMOStype*lcapgs2; here->capgd3 = lcapgs3; } /* now to adjust for type and multiply by factors to convert to Taylor coeffs. */ here->cdr_x2 = 0.5*model->VDMOStype*here->cdr_x2; here->cdr_y2 = 0.5*model->VDMOStype*here->cdr_y2; here->cdr_xy = model->VDMOStype*here->cdr_xy; here->cdr_x3 = here->cdr_x3/6.; here->cdr_y3 = here->cdr_y3/6.; here->cdr_x2y = 0.5*here->cdr_x2y; here->cdr_xy2 = 0.5*here->cdr_xy2; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vdmos/vdmosinit.h0000644000175000017500000000040213546075722022474 0ustar carstencarsten#ifndef _VDMOSINIT_H #define _VDMOSINIT_H extern IFparm VDMOSpTable[ ]; extern IFparm VDMOSmPTable[ ]; extern char *VDMOSnames[ ]; extern int VDMOSpTSize; extern int VDMOSmPTSize; extern int VDMOSnSize; extern int VDMOSiSize; extern int VDMOSmSize; #endif tmpk8ny_4pz/src/spicelib/devices/vdmos/vdmos.c0000644000175000017500000001525113546075722021613 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles Modified: 2000 AlansFixes VDMOS Model: 2018 Holger Vogt **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "vdmosdefs.h" #include "ngspice/suffix.h" IFparm VDMOSpTable[] = { /* parameters */ IOPU("mu", VDMOS_M, IF_REAL, "Multiplier"), IOPU("l", VDMOS_L, IF_REAL, "Length"), IOPU("w", VDMOS_W, IF_REAL, "Width"), IP("off", VDMOS_OFF, IF_FLAG, "Device initially off"), IOPU("icvds", VDMOS_IC_VDS, IF_REAL, "Initial D-S voltage"), IOPU("icvgs", VDMOS_IC_VGS, IF_REAL, "Initial G-S voltage"), IOPU("temp", VDMOS_TEMP, IF_REAL, "Instance temperature"), IOPU("dtemp", VDMOS_DTEMP, IF_REAL, "Instance temperature difference"), IP( "ic", VDMOS_IC, IF_REALVEC, "Vector of D-S, G-S voltages"), OP( "id", VDMOS_CD, IF_REAL, "Drain current"), OP( "is", VDMOS_CS, IF_REAL, "Source current"), OP( "ig", VDMOS_CG, IF_REAL, "Gate current "), OP( "vgs", VDMOS_VGS, IF_REAL, "Gate-Source voltage"), OP( "vds", VDMOS_VDS, IF_REAL, "Drain-Source voltage"), OP( "cgs", VDMOS_CAPGS, IF_REAL, "Gate-Source capacitance"), OP( "cgd", VDMOS_CAPGD, IF_REAL, "Gate-Drain capacitance"), OP( "cds", VDMOS_CAPDS, IF_REAL, "Drain-Source capacitance"), OPU( "dnode", VDMOS_DNODE, IF_INTEGER, "Number of the drain node "), OPU( "gnode", VDMOS_GNODE, IF_INTEGER, "Number of the gate node "), OPU( "snode", VDMOS_SNODE, IF_INTEGER, "Number of the source node "), OPU( "dnodeprime", VDMOS_DNODEPRIME, IF_INTEGER, "Number of int. drain node"), OPU( "snodeprime", VDMOS_SNODEPRIME, IF_INTEGER, "Number of int. source node "), OP( "von", VDMOS_VON, IF_REAL, " "), OP( "vdsat", VDMOS_VDSAT, IF_REAL, "Saturation drain voltage"), OPU( "sourcevcrit", VDMOS_SOURCEVCRIT, IF_REAL, "Critical source voltage"), OPU( "drainvcrit", VDMOS_DRAINVCRIT, IF_REAL, "Critical drain voltage"), OP( "rs", VDMOS_SOURCERESIST, IF_REAL, "Source resistance"), OPU("sourceconductance", VDMOS_SOURCECONDUCT, IF_REAL, "Conductance of source"), OP( "rd", VDMOS_DRAINRESIST, IF_REAL, "Drain conductance"), OPU("drainconductance", VDMOS_DRAINCONDUCT, IF_REAL, "Conductance of drain"), OP( "gm", VDMOS_GM, IF_REAL, "Transconductance"), OP( "gds", VDMOS_GDS, IF_REAL, "Drain-Source conductance"), OPU( "cqgs", VDMOS_CQGS, IF_REAL, "Capacitance due to gate-source charge storage"), OPU( "cqgd", VDMOS_CQGD, IF_REAL, "Capacitance due to gate-drain charge storage"), OPU( "qgs", VDMOS_QGS, IF_REAL, "Gate-Source charge storage"), OPU( "qgd", VDMOS_QGD, IF_REAL, "Gate-Drain charge storage"), OPU( "p", VDMOS_POWER, IF_REAL, "Instaneous power"), }; IFparm VDMOSmPTable[] = { /* model parameters */ /* basic device */ OP("type", VDMOS_MOD_TYPE, IF_STRING, "N-channel or P-channel MOS"), IOP("vto", VDMOS_MOD_VTO, IF_REAL, "Threshold voltage"), IOP("kp", VDMOS_MOD_KP, IF_REAL, "Transconductance parameter"), IOP("phi", VDMOS_MOD_PHI, IF_REAL, "Surface potential"), IOP("lambda",VDMOS_MOD_LAMBDA,IF_REAL, "Channel length modulation"), IOP("theta", VDMOS_MOD_THETA, IF_REAL, "Vgs dependence on mobility"), IOP("rd", VDMOS_MOD_RD, IF_REAL, "Drain ohmic resistance"), IOP("rs", VDMOS_MOD_RS, IF_REAL, "Source ohmic resistance"), IOP("rg", VDMOS_MOD_RG, IF_REAL, "Gate ohmic resistance"), IOP("tnom", VDMOS_MOD_TNOM, IF_REAL, "Parameter measurement temperature"), IOP("kf", VDMOS_MOD_KF, IF_REAL, "Flicker noise coefficient"), IOP("af", VDMOS_MOD_AF, IF_REAL, "Flicker noise exponent"), IP("vdmosn", VDMOS_MOD_NMOS, IF_FLAG, "N type DMOSfet model"), IP("vdmosp", VDMOS_MOD_PMOS, IF_FLAG, "P type DMOSfet model"), IP("vdmos", VDMOS_MOD_DMOS, IF_REAL, "DMOS transistor"), /* quasi saturation */ IOP("rq", VDMOS_MOD_RQ, IF_REAL, "Quasi saturation resistance fitting parameter"), IOP("vq", VDMOS_MOD_VQ, IF_REAL, "Quasi saturation voltage fitting parameter"), IOP("mtriode", VDMOS_MOD_MTRIODE, IF_REAL, "Conductance multiplier in triode region"), /* weak inversion */ IOP("subslope", VDMOS_MOD_SUBSLOPE, IF_REAL, "Slope of weak inversion log current versus vgs - vth"), IOP("subshift", VDMOS_MOD_SUBSHIFT, IF_REAL, "Shift of weak inversion plot on the vgs axis"), IOP("ksubthres", VDMOS_MOD_KSUBTHRES, IF_REAL, "Shift of weak inversion plot on the vgs axis"), /* body diode */ IOP("bv", VDMOS_MOD_BV, IF_REAL, "Vds breakdown voltage"), IOP("ibv", VDMOS_MOD_IBV, IF_REAL, "Current at Vds=bv"), IOP("nbv", VDMOS_MOD_NBV, IF_REAL, "Vds breakdown emission coefficient"), IOP("rds", VDMOS_MOD_RDS, IF_REAL, "Drain-source shunt resistance"), IOP("rb", VDMOS_MOD_RB, IF_REAL, "Body diode ohmic resistance"), IOP("n", VDMOS_MOD_N, IF_REAL, "Body diode emission coefficient"), IOP("tt", VDMOS_MOD_TT, IF_REAL, "Body diode transit time"), IOP("eg", VDMOS_MOD_EG, IF_REAL, "Body diode activation energy for temperature effect on Is"), IOP("Xti", VDMOS_MOD_XTI, IF_REAL, "Body diode saturation current temperature exponent"), IOP("is", VDMOS_MOD_IS, IF_REAL, "Body diode saturation current"), IOP("vj", VDMOS_MOD_VJ, IF_REAL, "Body diode junction potential"), /* body diode capacitance (e.g. source-drain capacitance) */ IOP("fc", VDMOS_MOD_FC, IF_REAL, "Body diode coefficient for forward-bias depletion capacitance formula"), IOPA("cjo", VDMOS_MOD_CJ, IF_REAL, "Zero-bias body diode junction capacitance"), IOP("m", VDMOS_MOD_MJ, IF_REAL, "Body diode grading coefficient"), /* gate-source and gate-drain capacitances */ IOPA("cgdmin", VDMOS_MOD_CGDMIN, IF_REAL, "Minimum non-linear G-D capacitance"), IOPA("cgdmax", VDMOS_MOD_CGDMAX, IF_REAL, "Maximum non-linear G-D capacitance"), IOPA("a", VDMOS_MOD_A, IF_REAL, "Non-linear Cgd capacitance parameter"), IOPA("cgs", VDMOS_MOD_CGS, IF_REAL, "Gate-source capacitance"), }; char *VDMOSnames[] = { "Drain", "Gate", "Source" }; int VDMOSnSize = NUMELEMS(VDMOSnames); int VDMOSpTSize = NUMELEMS(VDMOSpTable); int VDMOSmPTSize = NUMELEMS(VDMOSmPTable); int VDMOSiSize = sizeof(VDMOSinstance); int VDMOSmSize = sizeof(VDMOSmodel); tmpk8ny_4pz/src/spicelib/devices/vdmos/vdmosdist.c0000644000175000017500000007102013546075722022473 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vdmosdefs.h" #include "ngspice/sperror.h" #include "ngspice/distodef.h" #include "ngspice/suffix.h" int VDMOSdisto(int mode, GENmodel *genmodel, CKTcircuit *ckt) /* assuming here that ckt->CKTomega has been initialised to * the correct value */ { VDMOSmodel *model = (VDMOSmodel *) genmodel; DISTOAN* job = (DISTOAN*) ckt->CKTcurJob; DpassStr pass; double r1h1x,i1h1x; double r1h1y,i1h1y; double r1h2x, i1h2x; double r1h2y, i1h2y; double r1hm2x,i1hm2x; double r1hm2y,i1hm2y; double r2h11x,i2h11x; double r2h11y,i2h11y; double r2h1m2x,i2h1m2x; double r2h1m2y,i2h1m2y; double temp, itemp; VDMOSinstance *here; if (mode == D_SETUP) return(VDMOSdSetup(genmodel,ckt)); if ((mode == D_TWOF1) || (mode == D_THRF1) || (mode == D_F1PF2) || (mode == D_F1MF2) || (mode == D_2F1MF2)) { /* loop through all the VDMOS models */ for( ; model != NULL; model = VDMOSnextModel(model)) { /* loop through all the instances of the model */ for (here = VDMOSinstances(model); here != NULL ; here=VDMOSnextInstance(here)) { /* loading starts here */ switch (mode) { case D_TWOF1: /* x = vgs, z = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->VDMOSgNode)) - *(job->r1H1ptr + (here->VDMOSsNodePrime)); i1h1x = *(job->i1H1ptr + (here->VDMOSgNode)) - *(job->i1H1ptr + (here->VDMOSsNodePrime)); r1h1y = *(job->r1H1ptr + (here->VDMOSdNodePrime)) - *(job->r1H1ptr + (here->VDMOSsNodePrime)); i1h1y = *(job->i1H1ptr + (here->VDMOSdNodePrime)) - *(job->i1H1ptr + (here->VDMOSsNodePrime)); /* loading starts here */ /* loading cdrain term */ temp = DFn2F1(here->cdr_x2, here->cdr_y2, 0.0, here->cdr_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0); itemp = DFi2F1(here->cdr_x2, here->cdr_y2, 0.0, here->cdr_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0); *(ckt->CKTrhs + (here->VDMOSdNodePrime)) -= temp; *(ckt->CKTirhs + (here->VDMOSdNodePrime)) -= itemp; *(ckt->CKTrhs + (here->VDMOSsNodePrime)) += temp; *(ckt->CKTirhs + (here->VDMOSsNodePrime)) += itemp; /* cdrain term over */ /* loading capgs term */ temp = -ckt->CKTomega * D1i2F1(here->capgs2, r1h1x, i1h1x); itemp = ckt->CKTomega * D1n2F1(here->capgs2, r1h1x, i1h1x); *(ckt->CKTrhs + (here->VDMOSgNode)) -= temp; *(ckt->CKTirhs + (here->VDMOSgNode)) -= itemp; *(ckt->CKTrhs + (here->VDMOSsNodePrime)) += temp; *(ckt->CKTirhs + (here->VDMOSsNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1i2F1(here->capgd2, r1h1x - r1h1y, i1h1x - i1h1y); itemp = ckt->CKTomega * D1n2F1(here->capgd2, r1h1x - r1h1y, i1h1x - i1h1y); *(ckt->CKTrhs + (here->VDMOSgNode)) -= temp; *(ckt->CKTirhs + (here->VDMOSgNode)) -= itemp; *(ckt->CKTrhs + (here->VDMOSdNodePrime)) += temp; *(ckt->CKTirhs + (here->VDMOSdNodePrime)) += itemp; /* capgd over */ /* all done */ break; case D_THRF1: /* x = vgs, y = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->VDMOSgNode)) - *(job->r1H1ptr + (here->VDMOSsNodePrime)); i1h1x = *(job->i1H1ptr + (here->VDMOSgNode)) - *(job->i1H1ptr + (here->VDMOSsNodePrime)); r1h1y = *(job->r1H1ptr + (here->VDMOSdNodePrime)) - *(job->r1H1ptr + (here->VDMOSsNodePrime)); i1h1y = *(job->i1H1ptr + (here->VDMOSdNodePrime)) - *(job->i1H1ptr + (here->VDMOSsNodePrime)); r2h11x = *(job->r2H11ptr + (here->VDMOSgNode)) - *(job->r2H11ptr + (here->VDMOSsNodePrime)); i2h11x = *(job->i2H11ptr + (here->VDMOSgNode)) - *(job->i2H11ptr + (here->VDMOSsNodePrime)); r2h11y = *(job->r2H11ptr + (here->VDMOSdNodePrime)) - *(job->r2H11ptr + (here->VDMOSsNodePrime)); i2h11y = *(job->i2H11ptr + (here->VDMOSdNodePrime)) - *(job->i2H11ptr + (here->VDMOSsNodePrime)); /* loading starts here */ /* loading cdrain term */ temp = DFn3F1(here->cdr_x2, here->cdr_y2, 0.0, here->cdr_xy, 0.0, 0.0, here->cdr_x3, here->cdr_y3, 0.0, here->cdr_x2y, 0.0, here->cdr_xy2, 0.0, 0.0, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r2h11x, i2h11x, r2h11y, i2h11y, 0.0, 0.0); itemp = DFi3F1(here->cdr_x2, here->cdr_y2, 0.0, here->cdr_xy, 0.0, 0.0, here->cdr_x3, here->cdr_y3, 0.0, here->cdr_x2y, 0.0, here->cdr_xy2, 0.0, 0.0, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r2h11x, i2h11x, r2h11y, i2h11y, 0.0, 0.0); *(ckt->CKTrhs + (here->VDMOSdNodePrime)) -= temp; *(ckt->CKTirhs + (here->VDMOSdNodePrime)) -= itemp; *(ckt->CKTrhs + (here->VDMOSsNodePrime)) += temp; *(ckt->CKTirhs + (here->VDMOSsNodePrime)) += itemp; /* cdrain term over */ /* loading capgs term */ temp = -ckt->CKTomega * D1i3F1(here->capgs2, here->capgs3, r1h1x, i1h1x, r2h11x, i2h11x); itemp = ckt->CKTomega * D1n3F1(here->capgs2, here->capgs3, r1h1x, i1h1x, r2h11x, i2h11x); *(ckt->CKTrhs + (here->VDMOSgNode)) -= temp; *(ckt->CKTirhs + (here->VDMOSgNode)) -= itemp; *(ckt->CKTrhs + (here->VDMOSsNodePrime)) += temp; *(ckt->CKTirhs + (here->VDMOSsNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1i3F1(here->capgd2, here->capgd3, r1h1x - r1h1y, i1h1x - i1h1y, r2h11x - r2h11y, i2h11x - i2h11y); itemp = ckt->CKTomega * D1n3F1(here->capgd2, here->capgd3, r1h1x - r1h1y, i1h1x - i1h1y, r2h11x - r2h11y, i2h11x - i2h11y); *(ckt->CKTrhs + (here->VDMOSgNode)) -= temp; *(ckt->CKTirhs + (here->VDMOSgNode)) -= itemp; *(ckt->CKTrhs + (here->VDMOSdNodePrime)) += temp; *(ckt->CKTirhs + (here->VDMOSdNodePrime)) += itemp; /* capgd over */ /* all done */ break; case D_F1PF2: /* x = vgs, y = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->VDMOSgNode)) - *(job->r1H1ptr + (here->VDMOSsNodePrime)); i1h1x = *(job->i1H1ptr + (here->VDMOSgNode)) - *(job->i1H1ptr + (here->VDMOSsNodePrime)); r1h1y = *(job->r1H1ptr + (here->VDMOSdNodePrime)) - *(job->r1H1ptr + (here->VDMOSsNodePrime)); i1h1y = *(job->i1H1ptr + (here->VDMOSdNodePrime)) - *(job->i1H1ptr + (here->VDMOSsNodePrime)); r1h2x = *(job->r1H2ptr + (here->VDMOSgNode)) - *(job->r1H2ptr + (here->VDMOSsNodePrime)); i1h2x = *(job->i1H2ptr + (here->VDMOSgNode)) - *(job->i1H2ptr + (here->VDMOSsNodePrime)); r1h2y = *(job->r1H2ptr + (here->VDMOSdNodePrime)) - *(job->r1H2ptr + (here->VDMOSsNodePrime)); i1h2y = *(job->i1H2ptr + (here->VDMOSdNodePrime)) - *(job->i1H2ptr + (here->VDMOSsNodePrime)); /* loading starts here */ /* loading cdrain term */ temp = DFnF12(here->cdr_x2, here->cdr_y2, 0.0, here->cdr_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r1h2x, i1h2x, r1h2y, i1h2y, 0.0, 0.0); itemp = DFiF12(here->cdr_x2, here->cdr_y2, 0.0, here->cdr_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r1h2x, i1h2x, r1h2y, i1h2y, 0.0, 0.0); *(ckt->CKTrhs + (here->VDMOSdNodePrime)) -= temp; *(ckt->CKTirhs + (here->VDMOSdNodePrime)) -= itemp; *(ckt->CKTrhs + (here->VDMOSsNodePrime)) += temp; *(ckt->CKTirhs + (here->VDMOSsNodePrime)) += itemp; /* cdrain term over */ /* loading capgs term */ temp = -ckt->CKTomega * D1iF12(here->capgs2, r1h1x, i1h1x, r1h2x, i1h2x); itemp = ckt->CKTomega * D1nF12(here->capgs2, r1h1x, i1h1x, r1h2x, i1h2x); *(ckt->CKTrhs + (here->VDMOSgNode)) -= temp; *(ckt->CKTirhs + (here->VDMOSgNode)) -= itemp; *(ckt->CKTrhs + (here->VDMOSsNodePrime)) += temp; *(ckt->CKTirhs + (here->VDMOSsNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1iF12(here->capgd2, r1h1x - r1h1y, i1h1x - i1h1y, r1h2x - r1h2y, i1h2x - i1h2y); itemp = ckt->CKTomega * D1nF12(here->capgd2, r1h1x - r1h1y, i1h1x - i1h1y, r1h2x - r1h2y, i1h2x - i1h2y); *(ckt->CKTrhs + (here->VDMOSgNode)) -= temp; *(ckt->CKTirhs + (here->VDMOSgNode)) -= itemp; *(ckt->CKTrhs + (here->VDMOSdNodePrime)) += temp; *(ckt->CKTirhs + (here->VDMOSdNodePrime)) += itemp; /* capgd over */ /* all done */ break; case D_F1MF2: /* x = vgs, y = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->VDMOSgNode)) - *(job->r1H1ptr + (here->VDMOSsNodePrime)); i1h1x = *(job->i1H1ptr + (here->VDMOSgNode)) - *(job->i1H1ptr + (here->VDMOSsNodePrime)); r1h1y = *(job->r1H1ptr + (here->VDMOSdNodePrime)) - *(job->r1H1ptr + (here->VDMOSsNodePrime)); i1h1y = *(job->i1H1ptr + (here->VDMOSdNodePrime)) - *(job->i1H1ptr + (here->VDMOSsNodePrime)); r1hm2x = *(job->r1H2ptr + (here->VDMOSgNode)) - *(job->r1H2ptr + (here->VDMOSsNodePrime)); i1hm2x = -(*(job->i1H2ptr + (here->VDMOSgNode)) - *(job->i1H2ptr + (here->VDMOSsNodePrime))); r1hm2y = *(job->r1H2ptr + (here->VDMOSdNodePrime)) - *(job->r1H2ptr + (here->VDMOSsNodePrime)); i1hm2y = -(*(job->i1H2ptr + (here->VDMOSdNodePrime)) - *(job->i1H2ptr + (here->VDMOSsNodePrime))); /* loading starts here */ /* loading cdrain term */ temp = DFnF12(here->cdr_x2, here->cdr_y2, 0.0, here->cdr_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r1hm2x, i1hm2x, r1hm2y, i1hm2y, 0.0, 0.0); itemp = DFiF12(here->cdr_x2, here->cdr_y2, 0.0, here->cdr_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r1hm2x, i1hm2x, r1hm2y, i1hm2y, 0.0, 0.0); *(ckt->CKTrhs + (here->VDMOSdNodePrime)) -= temp; *(ckt->CKTirhs + (here->VDMOSdNodePrime)) -= itemp; *(ckt->CKTrhs + (here->VDMOSsNodePrime)) += temp; *(ckt->CKTirhs + (here->VDMOSsNodePrime)) += itemp; /* cdrain term over */ /* loading capgs term */ temp = -ckt->CKTomega * D1iF12(here->capgs2, r1h1x, i1h1x, r1hm2x, i1hm2x); itemp = ckt->CKTomega * D1nF12(here->capgs2, r1h1x, i1h1x, r1hm2x, i1hm2x); *(ckt->CKTrhs + (here->VDMOSgNode)) -= temp; *(ckt->CKTirhs + (here->VDMOSgNode)) -= itemp; *(ckt->CKTrhs + (here->VDMOSsNodePrime)) += temp; *(ckt->CKTirhs + (here->VDMOSsNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1iF12(here->capgd2, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y); itemp = ckt->CKTomega * D1nF12(here->capgd2, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y); *(ckt->CKTrhs + (here->VDMOSgNode)) -= temp; *(ckt->CKTirhs + (here->VDMOSgNode)) -= itemp; *(ckt->CKTrhs + (here->VDMOSdNodePrime)) += temp; *(ckt->CKTirhs + (here->VDMOSdNodePrime)) += itemp; /* capgd over */ /* all done */ break; case D_2F1MF2: /* x = vgs, y = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->VDMOSgNode)) - *(job->r1H1ptr + (here->VDMOSsNodePrime)); i1h1x = *(job->i1H1ptr + (here->VDMOSgNode)) - *(job->i1H1ptr + (here->VDMOSsNodePrime)); r1h1y = *(job->r1H1ptr + (here->VDMOSdNodePrime)) - *(job->r1H1ptr + (here->VDMOSsNodePrime)); i1h1y = *(job->i1H1ptr + (here->VDMOSdNodePrime)) - *(job->i1H1ptr + (here->VDMOSsNodePrime)); r1hm2x = *(job->r1H2ptr + (here->VDMOSgNode)) - *(job->r1H2ptr + (here->VDMOSsNodePrime)); i1hm2x = -(*(job->i1H2ptr + (here->VDMOSgNode)) - *(job->i1H2ptr + (here->VDMOSsNodePrime))); r1hm2y = *(job->r1H2ptr + (here->VDMOSdNodePrime)) - *(job->r1H2ptr + (here->VDMOSsNodePrime)); i1hm2y = -(*(job->i1H2ptr + (here->VDMOSdNodePrime)) - *(job->i1H2ptr + (here->VDMOSsNodePrime))); r2h11x = *(job->r1H1ptr + (here->VDMOSgNode)) - *(job->r1H1ptr + (here->VDMOSsNodePrime)); i2h11x = *(job->i1H1ptr + (here->VDMOSgNode)) - *(job->i1H1ptr + (here->VDMOSsNodePrime)); r2h11y = *(job->r1H1ptr + (here->VDMOSdNodePrime)) - *(job->r1H1ptr + (here->VDMOSsNodePrime)); i2h11y = *(job->i1H1ptr + (here->VDMOSdNodePrime)) - *(job->i1H1ptr + (here->VDMOSsNodePrime)); r2h1m2x = *(job->r2H1m2ptr + (here->VDMOSgNode)) - *(job->r2H1m2ptr + (here->VDMOSsNodePrime)); i2h1m2x = *(job->i2H1m2ptr + (here->VDMOSgNode)) - *(job->i2H1m2ptr + (here->VDMOSsNodePrime)); r2h1m2y = *(job->r2H1m2ptr + (here->VDMOSdNodePrime)) - *(job->r2H1m2ptr + (here->VDMOSsNodePrime)); i2h1m2y = *(job->i2H1m2ptr + (here->VDMOSdNodePrime)) - *(job->i2H1m2ptr + (here->VDMOSsNodePrime)); /* loading starts here */ /* loading cdrain term */ pass.cxx = here->cdr_x2; pass.cyy = here->cdr_y2; pass.czz = 0.0; pass.cxy = here->cdr_xy; pass.cyz = 0.0; pass.cxz = 0.0; pass.cxxx = here->cdr_x3; pass.cyyy = here->cdr_y3; pass.czzz = 0.0; pass.cxxy = here->cdr_x2y; pass.cxxz = 0.0; pass.cxyy = here->cdr_xy2; pass.cyyz = 0.0; pass.cxzz = 0.0; pass.cyzz = 0.0; pass.cxyz = 0.0; pass.r1h1x = r1h1x; pass.i1h1x = i1h1x; pass.r1h1y = r1h1y; pass.i1h1y = i1h1y; pass.r1h1z = 0.0; pass.i1h1z = 0.0; pass.r1h2x = r1hm2x; pass.i1h2x = i1hm2x; pass.r1h2y = r1hm2y; pass.i1h2y = i1hm2y; pass.r1h2z = 0.0; pass.i1h2z = 0.0; pass.r2h11x = r2h11x; pass.i2h11x = i2h11x; pass.r2h11y = r2h11y; pass.i2h11y = i2h11y; pass.r2h11z = 0.0; pass.i2h11z = 0.0; pass.h2f1f2x = r2h1m2x; pass.ih2f1f2x = i2h1m2x; pass.h2f1f2y = r2h1m2y; pass.ih2f1f2y = i2h1m2y; pass.h2f1f2z = 0.0; pass.ih2f1f2z = 0.0; temp = DFn2F12(&pass); itemp = DFi2F12(&pass); *(ckt->CKTrhs + (here->VDMOSdNodePrime)) -= temp; *(ckt->CKTirhs + (here->VDMOSdNodePrime)) -= itemp; *(ckt->CKTrhs + (here->VDMOSsNodePrime)) += temp; *(ckt->CKTirhs + (here->VDMOSsNodePrime)) += itemp; /* cdrain term over */ /* loading capgs term */ temp = -ckt->CKTomega * D1i2F12(here->capgs2, here->capgs3, r1h1x, i1h1x, r1hm2x, i1hm2x, r2h11x, i2h11x, r2h1m2x, i2h1m2x); itemp = ckt->CKTomega * D1n2F12(here->capgs2, here->capgs3, r1h1x, i1h1x, r1hm2x, i1hm2x, r2h11x, i2h11x, r2h1m2x, i2h1m2x); *(ckt->CKTrhs + (here->VDMOSgNode)) -= temp; *(ckt->CKTirhs + (here->VDMOSgNode)) -= itemp; *(ckt->CKTrhs + (here->VDMOSsNodePrime)) += temp; *(ckt->CKTirhs + (here->VDMOSsNodePrime)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1i2F12(here->capgd2, here->capgd3, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y, r2h11x - r2h11y, i2h11x - i2h11y, r2h1m2x - r2h1m2y, i2h1m2x - i2h1m2y); itemp = ckt->CKTomega * D1n2F12(here->capgd2, here->capgd3, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y, r2h11x - r2h11y, i2h11x - i2h11y, r2h1m2x - r2h1m2y, i2h1m2x - i2h1m2y); *(ckt->CKTrhs + (here->VDMOSgNode)) -= temp; *(ckt->CKTirhs + (here->VDMOSgNode)) -= itemp; *(ckt->CKTrhs + (here->VDMOSdNodePrime)) += temp; *(ckt->CKTirhs + (here->VDMOSdNodePrime)) += itemp; /* capgd over */ /* all done */ break; default: ; } } } return(OK); } else return(E_BADPARM); } tmpk8ny_4pz/src/spicelib/devices/vdmos/vdmostrun.c0000644000175000017500000000130613546075722022520 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vdmosdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VDMOStrunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { VDMOSmodel *model = (VDMOSmodel *)inModel; VDMOSinstance *here; for( ; model != NULL; model = VDMOSnextModel(model)) { for(here=VDMOSinstances(model);here!=NULL;here = VDMOSnextInstance(here)){ CKTterr(here->VDMOSqgs,ckt,timeStep); CKTterr(here->VDMOSqgd,ckt,timeStep); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vdmos/vdmosask.c0000644000175000017500000001523313546075722022312 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "vdmosdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int VDMOSask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { VDMOSinstance *here = (VDMOSinstance*)inst; static char *msg = "Current and power not available for ac analysis"; NG_IGNORE(select); switch(which) { case VDMOS_TEMP: value->rValue = here->VDMOStemp - CONSTCtoK; return(OK); case VDMOS_DTEMP: value->rValue = here->VDMOSdtemp; return(OK); case VDMOS_CAPGS: value->rValue = 2* *(ckt->CKTstate0 + here->VDMOScapgs); return(OK); case VDMOS_CAPGD: value->rValue = 2* *(ckt->CKTstate0 + here->VDMOScapgd); return(OK); case VDMOS_CAPDS: value->rValue = here->VDIOcap; return(OK); case VDMOS_M: value->rValue = here->VDMOSm; return(OK); case VDMOS_L: value->rValue = here->VDMOSl; return(OK); case VDMOS_W: value->rValue = here->VDMOSw; return(OK); case VDMOS_OFF: value->rValue = here->VDMOSoff; return(OK); case VDMOS_IC_VDS: value->rValue = here->VDMOSicVDS; return(OK); case VDMOS_IC_VGS: value->rValue = here->VDMOSicVGS; return(OK); case VDMOS_DNODE: value->iValue = here->VDMOSdNode; return(OK); case VDMOS_GNODE: value->iValue = here->VDMOSgNode; return(OK); case VDMOS_SNODE: value->iValue = here->VDMOSsNode; return(OK); case VDMOS_SNODEPRIME: value->iValue = here->VDMOSsNodePrime; return(OK); case VDMOS_SOURCECONDUCT: value->rValue = here->VDMOSsourceConductance; return(OK); case VDMOS_SOURCERESIST: if (here->VDMOSsNodePrime != here->VDMOSsNode) value->rValue = 1.0 / here->VDMOSsourceConductance; else value->rValue = 0.0; return(OK); case VDMOS_DRAINCONDUCT: value->rValue = here->VDMOSdrainConductance; return(OK); case VDMOS_DRAINRESIST: if (here->VDMOSdNodePrime != here->VDMOSdNode) value->rValue = 1.0 / here->VDMOSdrainConductance; else value->rValue = 0.0; return(OK); case VDMOS_VON: value->rValue = here->VDMOSvon; return(OK); case VDMOS_VDSAT: value->rValue = here->VDMOSvdsat; return(OK); case VDMOS_SOURCEVCRIT: value->rValue = here->VDMOSsourceVcrit; return(OK); case VDMOS_DRAINVCRIT: value->rValue = here->VDMOSdrainVcrit; return(OK); case VDMOS_CD: value->rValue = here->VDMOScd; return(OK); case VDMOS_GM: value->rValue = here->VDMOSgm; return(OK); case VDMOS_GDS: value->rValue = here->VDMOSgds; return(OK); case VDMOS_VGS: value->rValue = *(ckt->CKTstate0 + here->VDMOSvgs); return(OK); case VDMOS_VDS: value->rValue = *(ckt->CKTstate0 + here->VDMOSvds); return(OK); case VDMOS_QGS: value->rValue = *(ckt->CKTstate0 + here->VDMOSqgs); return(OK); case VDMOS_CQGS: value->rValue = *(ckt->CKTstate0 + here->VDMOScqgs); return(OK); case VDMOS_QGD: value->rValue = *(ckt->CKTstate0 + here->VDMOSqgd); return(OK); case VDMOS_CQGD: value->rValue = *(ckt->CKTstate0 + here->VDMOScqgd); return(OK); case VDMOS_CG : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "VDMOSask.c"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else if (ckt->CKTcurrentAnalysis & (DOING_DCOP | DOING_TRCV)) { value->rValue = 0; } else if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && (ckt->CKTmode & MODETRANOP)) { value->rValue = 0; } else { value->rValue = *(ckt->CKTstate0 + here->VDMOScqgd) + *(ckt->CKTstate0 + here->VDMOScqgs); } return(OK); case VDMOS_CS : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "VDMOSask.c"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = -here->VDMOScd; if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { value->rValue -= *(ckt->CKTstate0 + here->VDMOScqgd) + *(ckt->CKTstate0 + here->VDMOScqgs); } } return(OK); case VDMOS_POWER : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "VDMOSask.c"; strcpy(errMsg,msg); return(E_ASKPOWER); } else { double temp; value->rValue = here->VDMOScd * *(ckt->CKTrhsOld + here->VDMOSdNode); if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { value->rValue += (*(ckt->CKTstate0 + here->VDMOScqgd) + *(ckt->CKTstate0 + here->VDMOScqgs)) * *(ckt->CKTrhsOld + here->VDMOSgNode); } temp = -here->VDMOScd; if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { temp -= *(ckt->CKTstate0 + here->VDMOScqgd) + *(ckt->CKTstate0 + here->VDMOScqgs); } value->rValue += temp * *(ckt->CKTrhsOld + here->VDMOSsNode); } return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/0000755000175000017500000000000013546075722021376 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/b3soipdcheck.c0000644000175000017500000007020013546075722024102 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soipdcheck.c 98/5/01 Modified by Pin Su and Jan Feng 99/2/15 Modified by Pin Su 99/4/30 Modified by Pin Su 00/3/1 Modified by Pin Su and Hui Wan 02/3/5 Modifies by Paolo Nenzi 2002 **********/ /* * Revision 2.2.3 02/3/5 Pin Su * BSIMPD2.2.3 release */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b3soipddef.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" int B3SOIPDcheckModel(B3SOIPDmodel *model, B3SOIPDinstance *here, CKTcircuit *ckt) { struct b3soipdSizeDependParam *pParam; int Fatal_Flag = 0; FILE *fplog; NG_IGNORE(ckt); if ((fplog = fopen("b3soipdv223check.log", "w")) != NULL) { pParam = here->pParam; fprintf(fplog, "B3SOIPDV223 Parameter Check\n"); fprintf(fplog, "Model = %s\n", model->B3SOIPDmodName); fprintf(fplog, "W = %g, L = %g, M = %g\n", here->B3SOIPDw, here->B3SOIPDl, here->B3SOIPDm); if (pParam->B3SOIPDnlx < -pParam->B3SOIPDleff) { fprintf(fplog, "Fatal: Nlx = %g is less than -Leff.\n", pParam->B3SOIPDnlx); printf("Fatal: Nlx = %g is less than -Leff.\n", pParam->B3SOIPDnlx); Fatal_Flag = 1; } if (model->B3SOIPDtox <= 0.0) { fprintf(fplog, "Fatal: Tox = %g is not positive.\n", model->B3SOIPDtox); printf("Fatal: Tox = %g is not positive.\n", model->B3SOIPDtox); Fatal_Flag = 1; } /* v2.2.3 */ if (model->B3SOIPDtox - model->B3SOIPDdtoxcv <= 0.0) { fprintf(fplog, "Fatal: Tox - dtoxcv = %g is not positive.\n", model->B3SOIPDtox - model->B3SOIPDdtoxcv); printf("Fatal: Tox - dtoxcv = %g is not positive.\n", model->B3SOIPDtox - model->B3SOIPDdtoxcv); Fatal_Flag = 1; } if (model->B3SOIPDtbox <= 0.0) { fprintf(fplog, "Fatal: Tbox = %g is not positive.\n", model->B3SOIPDtbox); printf("Fatal: Tbox = %g is not positive.\n", model->B3SOIPDtbox); Fatal_Flag = 1; } if (pParam->B3SOIPDnpeak <= 0.0) { fprintf(fplog, "Fatal: Nch = %g is not positive.\n", pParam->B3SOIPDnpeak); printf("Fatal: Nch = %g is not positive.\n", pParam->B3SOIPDnpeak); Fatal_Flag = 1; } if (pParam->B3SOIPDngate < 0.0) { fprintf(fplog, "Fatal: Ngate = %g is not positive.\n", pParam->B3SOIPDngate); printf("Fatal: Ngate = %g Ngate is not positive.\n", pParam->B3SOIPDngate); Fatal_Flag = 1; } if (pParam->B3SOIPDngate > 1.e25) { fprintf(fplog, "Fatal: Ngate = %g is too high.\n", pParam->B3SOIPDngate); printf("Fatal: Ngate = %g Ngate is too high\n", pParam->B3SOIPDngate); Fatal_Flag = 1; } if (pParam->B3SOIPDdvt1 < 0.0) { fprintf(fplog, "Fatal: Dvt1 = %g is negative.\n", pParam->B3SOIPDdvt1); printf("Fatal: Dvt1 = %g is negative.\n", pParam->B3SOIPDdvt1); Fatal_Flag = 1; } if (pParam->B3SOIPDdvt1w < 0.0) { fprintf(fplog, "Fatal: Dvt1w = %g is negative.\n", pParam->B3SOIPDdvt1w); printf("Fatal: Dvt1w = %g is negative.\n", pParam->B3SOIPDdvt1w); Fatal_Flag = 1; } if (pParam->B3SOIPDw0 == -pParam->B3SOIPDweff) { fprintf(fplog, "Fatal: (W0 + Weff) = 0 cauing divided-by-zero.\n"); printf("Fatal: (W0 + Weff) = 0 cauing divided-by-zero.\n"); Fatal_Flag = 1; } if (pParam->B3SOIPDdsub < 0.0) { fprintf(fplog, "Fatal: Dsub = %g is negative.\n", pParam->B3SOIPDdsub); printf("Fatal: Dsub = %g is negative.\n", pParam->B3SOIPDdsub); Fatal_Flag = 1; } if (pParam->B3SOIPDb1 == -pParam->B3SOIPDweff) { fprintf(fplog, "Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); printf("Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); Fatal_Flag = 1; } if (pParam->B3SOIPDu0temp <= 0.0) { fprintf(fplog, "Fatal: u0 at current temperature = %g is not positive.\n", pParam->B3SOIPDu0temp); printf("Fatal: u0 at current temperature = %g is not positive.\n", pParam->B3SOIPDu0temp); Fatal_Flag = 1; } /* Check delta parameter */ if (pParam->B3SOIPDdelta < 0.0) { fprintf(fplog, "Fatal: Delta = %g is less than zero.\n", pParam->B3SOIPDdelta); printf("Fatal: Delta = %g is less than zero.\n", pParam->B3SOIPDdelta); Fatal_Flag = 1; } if (pParam->B3SOIPDvsattemp <= 0.0) { fprintf(fplog, "Fatal: Vsat at current temperature = %g is not positive.\n", pParam->B3SOIPDvsattemp); printf("Fatal: Vsat at current temperature = %g is not positive.\n", pParam->B3SOIPDvsattemp); Fatal_Flag = 1; } /* Check Rout parameters */ if (pParam->B3SOIPDpclm <= 0.0) { fprintf(fplog, "Fatal: Pclm = %g is not positive.\n", pParam->B3SOIPDpclm); printf("Fatal: Pclm = %g is not positive.\n", pParam->B3SOIPDpclm); Fatal_Flag = 1; } if (pParam->B3SOIPDdrout < 0.0) { fprintf(fplog, "Fatal: Drout = %g is negative.\n", pParam->B3SOIPDdrout); printf("Fatal: Drout = %g is negative.\n", pParam->B3SOIPDdrout); Fatal_Flag = 1; } if ( model->B3SOIPDunitLengthGateSidewallJctCap > 0.0) { if (here->B3SOIPDdrainPerimeter < pParam->B3SOIPDweff) { fprintf(fplog, "Warning: Pd = %g is less than W.\n", here->B3SOIPDdrainPerimeter); printf("Warning: Pd = %g is less than W.\n", here->B3SOIPDdrainPerimeter); here->B3SOIPDdrainPerimeter =pParam->B3SOIPDweff; } if (here->B3SOIPDsourcePerimeter < pParam->B3SOIPDweff) { fprintf(fplog, "Warning: Ps = %g is less than W.\n", here->B3SOIPDsourcePerimeter); printf("Warning: Ps = %g is less than W.\n", here->B3SOIPDsourcePerimeter); here->B3SOIPDsourcePerimeter =pParam->B3SOIPDweff; } } /* Check capacitance parameters */ if (pParam->B3SOIPDclc < 0.0) { fprintf(fplog, "Fatal: Clc = %g is negative.\n", pParam->B3SOIPDclc); printf("Fatal: Clc = %g is negative.\n", pParam->B3SOIPDclc); Fatal_Flag = 1; } /* v2.2.3 */ if (pParam->B3SOIPDmoin < 5.0) { fprintf(fplog, "Warning: Moin = %g is too small.\n", pParam->B3SOIPDmoin); printf("Warning: Moin = %g is too small.\n", pParam->B3SOIPDmoin); } if (pParam->B3SOIPDmoin > 25.0) { fprintf(fplog, "Warning: Moin = %g is too large.\n", pParam->B3SOIPDmoin); printf("Warning: Moin = %g is too large.\n", pParam->B3SOIPDmoin); } if (model->B3SOIPDcapMod == 3) { if (pParam->B3SOIPDacde < 0.4) { fprintf (fplog, "Warning: Acde = %g is too small.\n", pParam->B3SOIPDacde); printf ("Warning: Acde = %g is too small.\n", pParam->B3SOIPDacde); } if (pParam->B3SOIPDacde > 1.6) { fprintf (fplog, "Warning: Acde = %g is too large.\n", pParam->B3SOIPDacde); printf ("Warning: Acde = %g is too large.\n", pParam->B3SOIPDacde); } } /* v2.2.3 */ if (model->B3SOIPDparamChk ==1) { /* Check L and W parameters */ if (pParam->B3SOIPDleff <= 5.0e-8) { fprintf(fplog, "Warning: Leff = %g may be too small.\n", pParam->B3SOIPDleff); printf("Warning: Leff = %g may be too small.\n", pParam->B3SOIPDleff); } if (pParam->B3SOIPDleffCV <= 5.0e-8) { fprintf(fplog, "Warning: Leff for CV = %g may be too small.\n", pParam->B3SOIPDleffCV); printf("Warning: Leff for CV = %g may be too small.\n", pParam->B3SOIPDleffCV); } if (pParam->B3SOIPDweff <= 1.0e-7) { fprintf(fplog, "Warning: Weff = %g may be too small.\n", pParam->B3SOIPDweff); printf("Warning: Weff = %g may be too small.\n", pParam->B3SOIPDweff); } if (pParam->B3SOIPDweffCV <= 1.0e-7) { fprintf(fplog, "Warning: Weff for CV = %g may be too small.\n", pParam->B3SOIPDweffCV); printf("Warning: Weff for CV = %g may be too small.\n", pParam->B3SOIPDweffCV); } /* Check threshold voltage parameters */ if (pParam->B3SOIPDnlx < 0.0) { fprintf(fplog, "Warning: Nlx = %g is negative.\n", pParam->B3SOIPDnlx); printf("Warning: Nlx = %g is negative.\n", pParam->B3SOIPDnlx); } if (model->B3SOIPDtox < 1.0e-9) { fprintf(fplog, "Warning: Tox = %g is less than 10A.\n", model->B3SOIPDtox); printf("Warning: Tox = %g is less than 10A.\n", model->B3SOIPDtox); } if (pParam->B3SOIPDnpeak <= 1.0e15) { fprintf(fplog, "Warning: Nch = %g may be too small.\n", pParam->B3SOIPDnpeak); printf("Warning: Nch = %g may be too small.\n", pParam->B3SOIPDnpeak); } else if (pParam->B3SOIPDnpeak >= 1.0e21) { fprintf(fplog, "Warning: Nch = %g may be too large.\n", pParam->B3SOIPDnpeak); printf("Warning: Nch = %g may be too large.\n", pParam->B3SOIPDnpeak); } if (fabs(pParam->B3SOIPDnsub) >= 1.0e21) { fprintf(fplog, "Warning: Nsub = %g may be too large.\n", pParam->B3SOIPDnsub); printf("Warning: Nsub = %g may be too large.\n", pParam->B3SOIPDnsub); } if ((pParam->B3SOIPDngate > 0.0) && (pParam->B3SOIPDngate <= 1.e18)) { fprintf(fplog, "Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->B3SOIPDngate); printf("Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->B3SOIPDngate); } if (pParam->B3SOIPDdvt0 < 0.0) { fprintf(fplog, "Warning: Dvt0 = %g is negative.\n", pParam->B3SOIPDdvt0); printf("Warning: Dvt0 = %g is negative.\n", pParam->B3SOIPDdvt0); } if (fabs(1.0e-6 / (pParam->B3SOIPDw0 + pParam->B3SOIPDweff)) > 10.0) { fprintf(fplog, "Warning: (W0 + Weff) may be too small.\n"); printf("Warning: (W0 + Weff) may be too small.\n"); } /* Check subthreshold parameters */ if (pParam->B3SOIPDnfactor < 0.0) { fprintf(fplog, "Warning: Nfactor = %g is negative.\n", pParam->B3SOIPDnfactor); printf("Warning: Nfactor = %g is negative.\n", pParam->B3SOIPDnfactor); } if (pParam->B3SOIPDcdsc < 0.0) { fprintf(fplog, "Warning: Cdsc = %g is negative.\n", pParam->B3SOIPDcdsc); printf("Warning: Cdsc = %g is negative.\n", pParam->B3SOIPDcdsc); } if (pParam->B3SOIPDcdscd < 0.0) { fprintf(fplog, "Warning: Cdscd = %g is negative.\n", pParam->B3SOIPDcdscd); printf("Warning: Cdscd = %g is negative.\n", pParam->B3SOIPDcdscd); } /* Check DIBL parameters */ if (pParam->B3SOIPDeta0 < 0.0) { fprintf(fplog, "Warning: Eta0 = %g is negative.\n", pParam->B3SOIPDeta0); printf("Warning: Eta0 = %g is negative.\n", pParam->B3SOIPDeta0); } /* Check Abulk parameters */ if (fabs(1.0e-6 / (pParam->B3SOIPDb1 + pParam->B3SOIPDweff)) > 10.0) { fprintf(fplog, "Warning: (B1 + Weff) may be too small.\n"); printf("Warning: (B1 + Weff) may be too small.\n"); } /* Check Saturation parameters */ if (pParam->B3SOIPDa2 < 0.01) { fprintf(fplog, "Warning: A2 = %g is too small. Set to 0.01.\n", pParam->B3SOIPDa2); printf("Warning: A2 = %g is too small. Set to 0.01.\n", pParam->B3SOIPDa2); pParam->B3SOIPDa2 = 0.01; } else if (pParam->B3SOIPDa2 > 1.0) { fprintf(fplog, "Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->B3SOIPDa2); printf("Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->B3SOIPDa2); pParam->B3SOIPDa2 = 1.0; pParam->B3SOIPDa1 = 0.0; } if (pParam->B3SOIPDrdsw < 0.0) { fprintf(fplog, "Warning: Rdsw = %g is negative. Set to zero.\n", pParam->B3SOIPDrdsw); printf("Warning: Rdsw = %g is negative. Set to zero.\n", pParam->B3SOIPDrdsw); pParam->B3SOIPDrdsw = 0.0; pParam->B3SOIPDrds0 = 0.0; } else if ((pParam->B3SOIPDrds0 > 0.0) && (pParam->B3SOIPDrds0 < 0.001)) { fprintf(fplog, "Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n", pParam->B3SOIPDrds0); printf("Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n", pParam->B3SOIPDrds0); pParam->B3SOIPDrds0 = 0.0; } if (pParam->B3SOIPDvsattemp < 1.0e3) { fprintf(fplog, "Warning: Vsat at current temperature = %g may be too small.\n", pParam->B3SOIPDvsattemp); printf("Warning: Vsat at current temperature = %g may be too small.\n", pParam->B3SOIPDvsattemp); } if (pParam->B3SOIPDpdibl1 < 0.0) { fprintf(fplog, "Warning: Pdibl1 = %g is negative.\n", pParam->B3SOIPDpdibl1); printf("Warning: Pdibl1 = %g is negative.\n", pParam->B3SOIPDpdibl1); } if (pParam->B3SOIPDpdibl2 < 0.0) { fprintf(fplog, "Warning: Pdibl2 = %g is negative.\n", pParam->B3SOIPDpdibl2); printf("Warning: Pdibl2 = %g is negative.\n", pParam->B3SOIPDpdibl2); } /* Check overlap capacitance parameters */ if (model->B3SOIPDcgdo < 0.0) { fprintf(fplog, "Warning: cgdo = %g is negative. Set to zero.\n", model->B3SOIPDcgdo); printf("Warning: cgdo = %g is negative. Set to zero.\n", model->B3SOIPDcgdo); model->B3SOIPDcgdo = 0.0; } if (model->B3SOIPDcgso < 0.0) { fprintf(fplog, "Warning: cgso = %g is negative. Set to zero.\n", model->B3SOIPDcgso); printf("Warning: cgso = %g is negative. Set to zero.\n", model->B3SOIPDcgso); model->B3SOIPDcgso = 0.0; } if (model->B3SOIPDcgeo < 0.0) { fprintf(fplog, "Warning: cgeo = %g is negative. Set to zero.\n", model->B3SOIPDcgeo); printf("Warning: cgeo = %g is negative. Set to zero.\n", model->B3SOIPDcgeo); model->B3SOIPDcgeo = 0.0; } if (model->B3SOIPDntun < 0.0) { fprintf(fplog, "Warning: Ntun = %g is negative.\n", model->B3SOIPDntun); printf("Warning: Ntun = %g is negative.\n", model->B3SOIPDntun); } if (model->B3SOIPDndiode < 0.0) { fprintf(fplog, "Warning: Ndiode = %g is negative.\n", model->B3SOIPDndiode); printf("Warning: Ndiode = %g is negative.\n", model->B3SOIPDndiode); } if (model->B3SOIPDisbjt < 0.0) { fprintf(fplog, "Warning: Isbjt = %g is negative.\n", model->B3SOIPDisbjt); printf("Warning: Isbjt = %g is negative.\n", model->B3SOIPDisbjt); } if (model->B3SOIPDisdif < 0.0) { fprintf(fplog, "Warning: Isdif = %g is negative.\n", model->B3SOIPDisdif); printf("Warning: Isdif = %g is negative.\n", model->B3SOIPDisdif); } if (model->B3SOIPDisrec < 0.0) { fprintf(fplog, "Warning: Isrec = %g is negative.\n", model->B3SOIPDisrec); printf("Warning: Isrec = %g is negative.\n", model->B3SOIPDisrec); } if (model->B3SOIPDistun < 0.0) { fprintf(fplog, "Warning: Istun = %g is negative.\n", model->B3SOIPDistun); printf("Warning: Istun = %g is negative.\n", model->B3SOIPDistun); } if (model->B3SOIPDtt < 0.0) { fprintf(fplog, "Warning: Tt = %g is negative.\n", model->B3SOIPDtt); printf("Warning: Tt = %g is negative.\n", model->B3SOIPDtt); } if (model->B3SOIPDcsdmin < 0.0) { fprintf(fplog, "Warning: Csdmin = %g is negative.\n", model->B3SOIPDcsdmin); printf("Warning: Csdmin = %g is negative.\n", model->B3SOIPDcsdmin); } if (model->B3SOIPDcsdesw < 0.0) { fprintf(fplog, "Warning: Csdesw = %g is negative.\n", model->B3SOIPDcsdesw); printf("Warning: Csdesw = %g is negative.\n", model->B3SOIPDcsdesw); } if (model->B3SOIPDasd < 0.0) { fprintf(fplog, "Warning: Asd = %g should be within (0, 1).\n", model->B3SOIPDasd); printf("Warning: Asd = %g should be within (0, 1).\n", model->B3SOIPDasd); } if (model->B3SOIPDrth0 < 0.0) { fprintf(fplog, "Warning: Rth0 = %g is negative.\n", model->B3SOIPDrth0); printf("Warning: Rth0 = %g is negative.\n", model->B3SOIPDrth0); } if (model->B3SOIPDcth0 < 0.0) { fprintf(fplog, "Warning: Cth0 = %g is negative.\n", model->B3SOIPDcth0); printf("Warning: Cth0 = %g is negative.\n", model->B3SOIPDcth0); } if (model->B3SOIPDrbody < 0.0) { fprintf(fplog, "Warning: Rbody = %g is negative.\n", model->B3SOIPDrbody); printf("Warning: Rbody = %g is negative.\n", model->B3SOIPDrbody); } if (model->B3SOIPDrbsh < 0.0) { fprintf(fplog, "Warning: Rbsh = %g is negative.\n", model->B3SOIPDrbsh); printf("Warning: Rbsh = %g is negative.\n", model->B3SOIPDrbsh); } /* v2.2 release */ if (model->B3SOIPDwth0 < 0.0) { fprintf(fplog, "Warning: WTH0 = %g is negative.\n", model->B3SOIPDwth0); printf("Warning: Wth0 = %g is negative.\n", model->B3SOIPDwth0); } if (model->B3SOIPDrhalo < 0.0) { fprintf(fplog, "Warning: RHALO = %g is negative.\n", model->B3SOIPDrhalo); printf("Warning: Rhalo = %g is negative.\n", model->B3SOIPDrhalo); } if (model->B3SOIPDntox < 0.0) { fprintf(fplog, "Warning: NTOX = %g is negative.\n", model->B3SOIPDntox); printf("Warning: Ntox = %g is negative.\n", model->B3SOIPDntox); } if (model->B3SOIPDtoxref < 0.0) { fprintf(fplog, "Warning: TOXREF = %g is negative.\n", model->B3SOIPDtoxref); printf("Warning: Toxref = %g is negative.\n", model->B3SOIPDtoxref); Fatal_Flag = 1; } if (model->B3SOIPDebg < 0.0) { fprintf(fplog, "Warning: EBG = %g is negative.\n", model->B3SOIPDebg); printf("Warning: Ebg = %g is negative.\n", model->B3SOIPDebg); } if (model->B3SOIPDvevb < 0.0) { fprintf(fplog, "Warning: VEVB = %g is negative.\n", model->B3SOIPDvevb); printf("Warning: Vevb = %g is negative.\n", model->B3SOIPDvevb); } if (model->B3SOIPDalphaGB1 < 0.0) { fprintf(fplog, "Warning: ALPHAGB1 = %g is negative.\n", model->B3SOIPDalphaGB1); printf("Warning: AlphaGB1 = %g is negative.\n", model->B3SOIPDalphaGB1); } if (model->B3SOIPDbetaGB1 < 0.0) { fprintf(fplog, "Warning: BETAGB1 = %g is negative.\n", model->B3SOIPDbetaGB1); printf("Warning: BetaGB1 = %g is negative.\n", model->B3SOIPDbetaGB1); } if (model->B3SOIPDvgb1 < 0.0) { fprintf(fplog, "Warning: VGB1 = %g is negative.\n", model->B3SOIPDvgb1); printf("Warning: Vgb1 = %g is negative.\n", model->B3SOIPDvgb1); } if (model->B3SOIPDvecb < 0.0) { fprintf(fplog, "Warning: VECB = %g is negative.\n", model->B3SOIPDvecb); printf("Warning: Vecb = %g is negative.\n", model->B3SOIPDvecb); } if (model->B3SOIPDalphaGB2 < 0.0) { fprintf(fplog, "Warning: ALPHAGB2 = %g is negative.\n", model->B3SOIPDalphaGB2); printf("Warning: AlphaGB2 = %g is negative.\n", model->B3SOIPDalphaGB2); } if (model->B3SOIPDbetaGB2 < 0.0) { fprintf(fplog, "Warning: BETAGB2 = %g is negative.\n", model->B3SOIPDbetaGB2); printf("Warning: BetaGB2 = %g is negative.\n", model->B3SOIPDbetaGB2); } if (model->B3SOIPDvgb2 < 0.0) { fprintf(fplog, "Warning: VGB2 = %g is negative.\n", model->B3SOIPDvgb2); printf("Warning: Vgb2 = %g is negative.\n", model->B3SOIPDvgb2); } if (model->B3SOIPDtoxqm <= 0.0) { fprintf(fplog, "Fatal: Toxqm = %g is not positive.\n", model->B3SOIPDtoxqm); printf("Fatal: Toxqm = %g is not positive.\n", model->B3SOIPDtoxqm); Fatal_Flag = 1; } if (model->B3SOIPDvoxh < 0.0) { fprintf(fplog, "Warning: Voxh = %g is negative.\n", model->B3SOIPDvoxh); printf("Warning: Voxh = %g is negative.\n", model->B3SOIPDvoxh); } if (model->B3SOIPDdeltavox <= 0.0) { fprintf(fplog, "Fatal: Deltavox = %g is not positive.\n", model->B3SOIPDdeltavox); printf("Fatal: Deltavox = %g is not positive.\n", model->B3SOIPDdeltavox); } /* v2.0 release */ if (model->B3SOIPDk1w1 < 0.0) { fprintf(fplog, "Warning: K1W1 = %g is negative.\n", model->B3SOIPDk1w1); printf("Warning: K1w1 = %g is negative.\n", model->B3SOIPDk1w1); } if (model->B3SOIPDk1w2 < 0.0) { fprintf(fplog, "Warning: K1W2 = %g is negative.\n", model->B3SOIPDk1w2); printf("Warning: K1w2 = %g is negative.\n", model->B3SOIPDk1w2); } if (model->B3SOIPDketas < 0.0) { fprintf(fplog, "Warning: KETAS = %g is negative.\n", model->B3SOIPDketas); printf("Warning: Ketas = %g is negative.\n", model->B3SOIPDketas); } if (model->B3SOIPDdwbc < 0.0) { fprintf(fplog, "Warning: DWBC = %g is negative.\n", model->B3SOIPDdwbc); printf("Warning: Dwbc = %g is negative.\n", model->B3SOIPDdwbc); } if (model->B3SOIPDbeta0 < 0.0) { fprintf(fplog, "Warning: BETA0 = %g is negative.\n", model->B3SOIPDbeta0); printf("Warning: Beta0 = %g is negative.\n", model->B3SOIPDbeta0); } if (model->B3SOIPDbeta1 < 0.0) { fprintf(fplog, "Warning: BETA1 = %g is negative.\n", model->B3SOIPDbeta1); printf("Warning: Beta1 = %g is negative.\n", model->B3SOIPDbeta1); } if (model->B3SOIPDbeta2 < 0.0) { fprintf(fplog, "Warning: BETA2 = %g is negative.\n", model->B3SOIPDbeta2); printf("Warning: Beta2 = %g is negative.\n", model->B3SOIPDbeta2); } if (model->B3SOIPDtii < 0.0) { fprintf(fplog, "Warning: TII = %g is negative.\n", model->B3SOIPDtii); printf("Warning: Tii = %g is negative.\n", model->B3SOIPDtii); } if (model->B3SOIPDlii < 0.0) { fprintf(fplog, "Warning: LII = %g is negative.\n", model->B3SOIPDlii); printf("Warning: Lii = %g is negative.\n", model->B3SOIPDlii); } if (model->B3SOIPDsii1 < 0.0) { fprintf(fplog, "Warning: SII1 = %g is negative.\n", model->B3SOIPDsii1); printf("Warning: Sii1 = %g is negative.\n", model->B3SOIPDsii1); } if (model->B3SOIPDsii2 < 0.0) { fprintf(fplog, "Warning: SII2 = %g is negative.\n", model->B3SOIPDsii2); printf("Warning: Sii2 = %g is negative.\n", model->B3SOIPDsii1); } if (model->B3SOIPDsiid < 0.0) { fprintf(fplog, "Warning: SIID = %g is negative.\n", model->B3SOIPDsiid); printf("Warning: Siid = %g is negative.\n", model->B3SOIPDsiid); } if (model->B3SOIPDfbjtii < 0.0) { fprintf(fplog, "Warning: FBJTII = %g is negative.\n", model->B3SOIPDfbjtii); printf("Warning: fbjtii = %g is negative.\n", model->B3SOIPDfbjtii); } if (model->B3SOIPDvrec0 < 0.0) { fprintf(fplog, "Warning: VREC0 = %g is negative.\n", model->B3SOIPDvrec0); printf("Warning: Vrec0 = %g is negative.\n", model->B3SOIPDvrec0); } if (model->B3SOIPDvtun0 < 0.0) { fprintf(fplog, "Warning: VTUN0 = %g is negative.\n", model->B3SOIPDvtun0); printf("Warning: Vtun0 = %g is negative.\n", model->B3SOIPDvtun0); } if (model->B3SOIPDnbjt < 0.0) { fprintf(fplog, "Warning: NBJT = %g is negative.\n", model->B3SOIPDnbjt); printf("Warning: Nbjt = %g is negative.\n", model->B3SOIPDnbjt); } if (model->B3SOIPDaely < 0.0) { fprintf(fplog, "Warning: AELY = %g is negative.\n", model->B3SOIPDaely); printf("Warning: Aely = %g is negative.\n", model->B3SOIPDaely); } if (model->B3SOIPDahli < 0.0) { fprintf(fplog, "Warning: AHLI = %g is negative.\n", model->B3SOIPDahli); printf("Warning: Ahli = %g is negative.\n", model->B3SOIPDahli); } if (model->B3SOIPDrbody < 0.0) { fprintf(fplog, "Warning: RBODY = %g is negative.\n", model->B3SOIPDrbody); printf("Warning: Rbody = %g is negative.\n", model->B3SOIPDrbody); } if (model->B3SOIPDrbsh < 0.0) { fprintf(fplog, "Warning: RBSH = %g is negative.\n", model->B3SOIPDrbsh); printf("Warning: Rbsh = %g is negative.\n", model->B3SOIPDrbsh); } if (model->B3SOIPDntrecf < 0.0) { fprintf(fplog, "Warning: NTRECF = %g is negative.\n", model->B3SOIPDntrecf); printf("Warning: Ntrecf = %g is negative.\n", model->B3SOIPDntrecf); } if (model->B3SOIPDntrecr < 0.0) { fprintf(fplog, "Warning: NTRECR = %g is negative.\n", model->B3SOIPDntrecr); printf("Warning: Ntrecr = %g is negative.\n", model->B3SOIPDntrecr); } if (model->B3SOIPDndif < 0.0) { fprintf(fplog, "Warning: NDIF = %g is negative.\n", model->B3SOIPDndif); printf("Warning: Ndif = %g is negative.\n", model->B3SOIPDndif); } if (model->B3SOIPDtcjswg < 0.0) { fprintf(fplog, "Warning: TCJSWG = %g is negative.\n", model->B3SOIPDtcjswg); printf("Warning: Tcjswg = %g is negative.\n", model->B3SOIPDtcjswg); } if (model->B3SOIPDtpbswg < 0.0) { fprintf(fplog, "Warning: TPBSWG = %g is negative.\n", model->B3SOIPDtpbswg); printf("Warning: Tpbswg = %g is negative.\n", model->B3SOIPDtpbswg); } if ((model->B3SOIPDacde < 0.4) || (model->B3SOIPDacde > 1.6)) { fprintf(fplog, "Warning: ACDE = %g is out of range.\n", model->B3SOIPDacde); printf("Warning: Acde = %g is out of range.\n", model->B3SOIPDacde); } if ((model->B3SOIPDmoin < 5.0)||(model->B3SOIPDmoin > 25.0)) { fprintf(fplog, "Warning: MOIN = %g is out of range.\n", model->B3SOIPDmoin); printf("Warning: Moin = %g is out of range.\n", model->B3SOIPDmoin); } if (model->B3SOIPDdlbg < 0.0) { fprintf(fplog, "Warning: DLBG = %g is negative.\n", model->B3SOIPDdlbg); printf("Warning: dlbg = %g is negative.\n", model->B3SOIPDdlbg); } if (model->B3SOIPDagidl < 0.0) { fprintf(fplog, "Warning: AGIDL = %g is negative.\n", model->B3SOIPDagidl); printf("Warning: Agidl = %g is negative.\n", model->B3SOIPDagidl); } if (model->B3SOIPDbgidl < 0.0) { fprintf(fplog, "Warning: BGIDL = %g is negative.\n", model->B3SOIPDbgidl); printf("Warning: Bgidl = %g is negative.\n", model->B3SOIPDbgidl); } if (model->B3SOIPDngidl < 0.0) { fprintf(fplog, "Warning: NGIDL = %g is negative.\n", model->B3SOIPDngidl); printf("Warning: Ngidl = %g is negative.\n", model->B3SOIPDngidl); } if (model->B3SOIPDesatii < 0.0) { fprintf(fplog, "Warning: Esatii = %g should be within positive.\n", model->B3SOIPDesatii); printf("Warning: Esatii = %g should be within (0, 1).\n", model->B3SOIPDesatii); } if (model->B3SOIPDxj > model->B3SOIPDtsi) { fprintf(fplog, "Warning: Xj = %g is thicker than Tsi = %g.\n", model->B3SOIPDxj, model->B3SOIPDtsi); printf("Warning: Xj = %g is thicker than Tsi = %g.\n", model->B3SOIPDxj, model->B3SOIPDtsi); } if (model->B3SOIPDcapMod < 2) { fprintf(fplog, "Warning: capMod < 2 is not supported by BSIM3SOI.\n"); printf("Warning: Warning: capMod < 2 is not supported by BSIM3SOI.\n"); } }/* loop for the parameter check for warning messages */ fclose(fplog); } else { fprintf(stderr, "Warning: Can't open log file. Parameter checking skipped.\n"); } return(Fatal_Flag); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/b3soipdpzld.c0000644000175000017500000001426013546075722024002 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soipdpzld.c 98/5/01 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.2.3 02/3/5 Pin Su * BSIMPD2.2.3 release */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "b3soipddef.h" #include "ngspice/suffix.h" int B3SOIPDpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { B3SOIPDmodel *model = (B3SOIPDmodel*)inModel; B3SOIPDinstance *here; double xcggb, xcgdb, xcgsb, xcbgb, xcbdb, xcbsb, xcddb, xcssb, xcdgb; double gdpr, gspr, gds, gbd, gbs, capbd = 0.0, capbs = 0.0; double xcsgb, xcdsb, xcsdb; double cggb, cgdb, cgsb, cbgb, cbdb, cbsb, cddb, cdgb, cdsb; double GSoverlapCap, GDoverlapCap, GBoverlapCap = 0.0; double FwdSum, RevSum, Gm, Gmbs; double m; NG_IGNORE(ckt); for (; model != NULL; model = B3SOIPDnextModel(model)) { for (here = B3SOIPDinstances(model); here!= NULL; here = B3SOIPDnextInstance(here)) { if (here->B3SOIPDmode >= 0) { Gm = here->B3SOIPDgm; Gmbs = here->B3SOIPDgmbs; FwdSum = Gm + Gmbs; RevSum = 0.0; cggb = here->B3SOIPDcggb; cgsb = here->B3SOIPDcgsb; cgdb = here->B3SOIPDcgdb; cbgb = here->B3SOIPDcbgb; cbsb = here->B3SOIPDcbsb; cbdb = here->B3SOIPDcbdb; cdgb = here->B3SOIPDcdgb; cdsb = here->B3SOIPDcdsb; cddb = here->B3SOIPDcddb; } else { Gm = -here->B3SOIPDgm; Gmbs = -here->B3SOIPDgmbs; FwdSum = 0.0; RevSum = -Gm - Gmbs; cggb = here->B3SOIPDcggb; cgsb = here->B3SOIPDcgdb; cgdb = here->B3SOIPDcgsb; cbgb = here->B3SOIPDcbgb; cbsb = here->B3SOIPDcbdb; cbdb = here->B3SOIPDcbsb; cdgb = -(here->B3SOIPDcdgb + cggb + cbgb); cdsb = -(here->B3SOIPDcddb + cgsb + cbsb); cddb = -(here->B3SOIPDcdsb + cgdb + cbdb); } gdpr=here->B3SOIPDdrainConductance; gspr=here->B3SOIPDsourceConductance; gds= here->B3SOIPDgds; gbd= here->B3SOIPDgjdb; gbs= here->B3SOIPDgjsb; #ifdef BULKCODE capbd= here->B3SOIPDcapbd; capbs= here->B3SOIPDcapbs; #endif GSoverlapCap = here->B3SOIPDcgso; GDoverlapCap = here->B3SOIPDcgdo; #ifdef BULKCODE GBoverlapCap = here->pParam->B3SOIPDcgbo; #endif xcdgb = (cdgb - GDoverlapCap); xcddb = (cddb + capbd + GDoverlapCap); xcdsb = cdsb; xcsgb = -(cggb + cbgb + cdgb + GSoverlapCap); xcsdb = -(cgdb + cbdb + cddb); xcssb = (capbs + GSoverlapCap - (cgsb+cbsb+cdsb)); xcggb = (cggb + GDoverlapCap + GSoverlapCap + GBoverlapCap); xcgdb = (cgdb - GDoverlapCap); xcgsb = (cgsb - GSoverlapCap); xcbgb = (cbgb - GBoverlapCap); xcbdb = (cbdb - capbd); xcbsb = (cbsb - capbs); m = here->B3SOIPDm; *(here->B3SOIPDGgPtr ) += m * (xcggb * s->real); *(here->B3SOIPDGgPtr +1) += m * (xcggb * s->imag); *(here->B3SOIPDBbPtr ) += m * ((-xcbgb-xcbdb-xcbsb) * s->real); *(here->B3SOIPDBbPtr +1) += m * ((-xcbgb-xcbdb-xcbsb) * s->imag); *(here->B3SOIPDDPdpPtr ) += m * (xcddb * s->real); *(here->B3SOIPDDPdpPtr +1) += m * (xcddb * s->imag); *(here->B3SOIPDSPspPtr ) += m * (xcssb * s->real); *(here->B3SOIPDSPspPtr +1) += m * (xcssb * s->imag); *(here->B3SOIPDGbPtr ) += m * ((-xcggb-xcgdb-xcgsb) * s->real); *(here->B3SOIPDGbPtr +1) += m * ((-xcggb-xcgdb-xcgsb) * s->imag); *(here->B3SOIPDGdpPtr ) += m * (xcgdb * s->real); *(here->B3SOIPDGdpPtr +1) += m * (xcgdb * s->imag); *(here->B3SOIPDGspPtr ) += m * (xcgsb * s->real); *(here->B3SOIPDGspPtr +1) += m * (xcgsb * s->imag); *(here->B3SOIPDBgPtr ) += m * (xcbgb * s->real); *(here->B3SOIPDBgPtr +1) += m * (xcbgb * s->imag); *(here->B3SOIPDBdpPtr ) += m * (xcbdb * s->real); *(here->B3SOIPDBdpPtr +1) += m * (xcbdb * s->imag); *(here->B3SOIPDBspPtr ) += m * (xcbsb * s->real); *(here->B3SOIPDBspPtr +1) += m * (xcbsb * s->imag); *(here->B3SOIPDDPgPtr ) += m * (xcdgb * s->real); *(here->B3SOIPDDPgPtr +1) += m * (xcdgb * s->imag); *(here->B3SOIPDDPbPtr ) += m * ((-xcdgb-xcddb-xcdsb) * s->real); *(here->B3SOIPDDPbPtr +1) += m * ((-xcdgb-xcddb-xcdsb) * s->imag); *(here->B3SOIPDDPspPtr ) += m * (xcdsb * s->real); *(here->B3SOIPDDPspPtr +1) += m * (xcdsb * s->imag); *(here->B3SOIPDSPgPtr ) += m * (xcsgb * s->real); *(here->B3SOIPDSPgPtr +1) += m * (xcsgb * s->imag); *(here->B3SOIPDSPbPtr ) += m * ((-xcsgb-xcsdb-xcssb) * s->real); *(here->B3SOIPDSPbPtr +1) += m * ((-xcsgb-xcsdb-xcssb) * s->imag); *(here->B3SOIPDSPdpPtr ) += m * (xcsdb * s->real); *(here->B3SOIPDSPdpPtr +1) += m * (xcsdb * s->imag); *(here->B3SOIPDDdPtr) += m * gdpr; *(here->B3SOIPDSsPtr) += m * gspr; *(here->B3SOIPDBbPtr) += m * (gbd + gbs); *(here->B3SOIPDDPdpPtr) += m * (gdpr + gds + gbd + RevSum); *(here->B3SOIPDSPspPtr) += m * (gspr + gds + gbs + FwdSum); *(here->B3SOIPDDdpPtr) -= m * gdpr; *(here->B3SOIPDSspPtr) -= m * gspr; *(here->B3SOIPDBdpPtr) -= m * gbd; *(here->B3SOIPDBspPtr) -= m * gbs; *(here->B3SOIPDDPdPtr) -= m * gdpr; *(here->B3SOIPDDPgPtr) += m * Gm; *(here->B3SOIPDDPbPtr) -= m * (gbd - Gmbs); *(here->B3SOIPDDPspPtr) -= m * (gds + FwdSum); *(here->B3SOIPDSPgPtr) -= m * Gm; *(here->B3SOIPDSPsPtr) -= m * gspr; *(here->B3SOIPDSPbPtr) -= m * (gbs + Gmbs); *(here->B3SOIPDSPdpPtr) -= m * (gds + RevSum); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/Makefile.am0000644000175000017500000000113213546075722023427 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libbsim3soipd.la libbsim3soipd_la_SOURCES = \ b3soipd.c \ b3soipdacld.c \ b3soipdask.c \ b3soipdcheck.c \ b3soipdcvtest.c \ b3soipdgetic.c \ b3soipdld.c \ b3soipdmask.c \ b3soipdmpar.c \ b3soipdnoi.c \ b3soipdpar.c \ b3soipdpzld.c \ b3soipdset.c \ b3soipdtemp.c \ b3soipdtrunc.c \ b3soipddef.h \ b3soipdext.h \ b3soipdinit.c \ b3soipdinit.h \ b3soipditf.h AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in EXTRA_DIST = BsimTerms_use tmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/b3soipdpar.c0000644000175000017500000001314513546075722023614 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soipdpar.c 98/5/01 Modified by Pin Su 99/2/15 Modified by Pin Su 01/2/15 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.2.3 02/3/5 Pin Su * BSIMPD2.2.3 release */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "b3soipddef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIPDparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { B3SOIPDinstance *here = (B3SOIPDinstance*)inst; NG_IGNORE(select); switch(param) { case B3SOIPD_W: here->B3SOIPDw = value->rValue; here->B3SOIPDwGiven = TRUE; break; case B3SOIPD_L: here->B3SOIPDl = value->rValue; here->B3SOIPDlGiven = TRUE; break; case B3SOIPD_M: here->B3SOIPDm = value->rValue; here->B3SOIPDmGiven = TRUE; break; case B3SOIPD_AS: here->B3SOIPDsourceArea = value->rValue; here->B3SOIPDsourceAreaGiven = TRUE; break; case B3SOIPD_AD: here->B3SOIPDdrainArea = value->rValue; here->B3SOIPDdrainAreaGiven = TRUE; break; case B3SOIPD_PS: here->B3SOIPDsourcePerimeter = value->rValue; here->B3SOIPDsourcePerimeterGiven = TRUE; break; case B3SOIPD_PD: here->B3SOIPDdrainPerimeter = value->rValue; here->B3SOIPDdrainPerimeterGiven = TRUE; break; case B3SOIPD_NRS: here->B3SOIPDsourceSquares = value->rValue; here->B3SOIPDsourceSquaresGiven = TRUE; break; case B3SOIPD_NRD: here->B3SOIPDdrainSquares = value->rValue; here->B3SOIPDdrainSquaresGiven = TRUE; break; case B3SOIPD_OFF: here->B3SOIPDoff = value->iValue; here->B3SOIPDoffGiven = TRUE; break; case B3SOIPD_IC_VBS: here->B3SOIPDicVBS = value->rValue; here->B3SOIPDicVBSGiven = TRUE; break; case B3SOIPD_IC_VDS: here->B3SOIPDicVDS = value->rValue; here->B3SOIPDicVDSGiven = TRUE; break; case B3SOIPD_IC_VGS: here->B3SOIPDicVGS = value->rValue; here->B3SOIPDicVGSGiven = TRUE; break; case B3SOIPD_IC_VES: here->B3SOIPDicVES = value->rValue; here->B3SOIPDicVESGiven = TRUE; break; case B3SOIPD_IC_VPS: here->B3SOIPDicVPS = value->rValue; here->B3SOIPDicVPSGiven = TRUE; break; case B3SOIPD_BJTOFF: here->B3SOIPDbjtoff = value->iValue; here->B3SOIPDbjtoffGiven= TRUE; break; case B3SOIPD_DEBUG: here->B3SOIPDdebugMod = value->iValue; here->B3SOIPDdebugModGiven= TRUE; break; case B3SOIPD_RTH0: here->B3SOIPDrth0= value->rValue; here->B3SOIPDrth0Given = TRUE; break; case B3SOIPD_CTH0: here->B3SOIPDcth0= value->rValue; here->B3SOIPDcth0Given = TRUE; break; case B3SOIPD_NRB: here->B3SOIPDbodySquares = value->rValue; here->B3SOIPDbodySquaresGiven = TRUE; break; case B3SOIPD_FRBODY: here->B3SOIPDfrbody = value->rValue; here->B3SOIPDfrbodyGiven = TRUE; break; /* v2.0 release */ case B3SOIPD_NBC: here->B3SOIPDnbc = value->rValue; here->B3SOIPDnbcGiven = TRUE; break; case B3SOIPD_NSEG: here->B3SOIPDnseg = value->rValue; here->B3SOIPDnsegGiven = TRUE; break; case B3SOIPD_PDBCP: here->B3SOIPDpdbcp = value->rValue; here->B3SOIPDpdbcpGiven = TRUE; break; case B3SOIPD_PSBCP: here->B3SOIPDpsbcp = value->rValue; here->B3SOIPDpsbcpGiven = TRUE; break; case B3SOIPD_AGBCP: here->B3SOIPDagbcp = value->rValue; here->B3SOIPDagbcpGiven = TRUE; break; case B3SOIPD_AEBCP: here->B3SOIPDaebcp = value->rValue; here->B3SOIPDaebcpGiven = TRUE; break; case B3SOIPD_VBSUSR: here->B3SOIPDvbsusr = value->rValue; here->B3SOIPDvbsusrGiven = TRUE; break; case B3SOIPD_TNODEOUT: here->B3SOIPDtnodeout = value->iValue; here->B3SOIPDtnodeoutGiven = TRUE; break; case B3SOIPD_IC: switch(value->v.numValue){ case 5: here->B3SOIPDicVPS = *(value->v.vec.rVec+4); here->B3SOIPDicVPSGiven = TRUE; case 4: here->B3SOIPDicVES = *(value->v.vec.rVec+3); here->B3SOIPDicVESGiven = TRUE; case 3: here->B3SOIPDicVBS = *(value->v.vec.rVec+2); here->B3SOIPDicVBSGiven = TRUE; case 2: here->B3SOIPDicVGS = *(value->v.vec.rVec+1); here->B3SOIPDicVGSGiven = TRUE; case 1: here->B3SOIPDicVDS = *(value->v.vec.rVec); here->B3SOIPDicVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/BsimTerms_use0000644000175000017500000000247313546075722024110 0ustar carstencarstenThe terms under which the software is provided are as the following. Software is distributed as is, completely without warranty or service support. The University of California and its employees are not liable for the condition or performance of the software. The University owns the copyright but shall not be liable for any infringement of copyright or other proprietary rights brought by third parties against the users of the software. The University of California hereby disclaims all implied warranties. The University of California grants the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for the University of California code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge the UC Berkeley BSIM Research Group that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to obey all U.S. Government restrictions governing redistribution or export of the software. 4. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others. tmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/b3soipdinit.h0000644000175000017500000000042313546075722023775 0ustar carstencarsten#ifndef _B3SOIPDINIT_H #define _B3SOIPDINIT_H extern IFparm B3SOIPDpTable[]; extern IFparm B3SOIPDmPTable[]; extern char *B3SOIPDnames[]; extern int B3SOIPDpTSize; extern int B3SOIPDmPTSize; extern int B3SOIPDnSize; extern int B3SOIPDiSize; extern int B3SOIPDmSize; #endif tmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/b3soipdcvtest.c0000644000175000017500000000612713546075722024344 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soipdcvtest.c 98/5/01 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.2.3 02/3/5 Pin Su * BSIMPD2.2.3 release */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b3soipddef.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIPDconvTest(GENmodel *inModel, CKTcircuit *ckt) { B3SOIPDmodel *model = (B3SOIPDmodel*)inModel; B3SOIPDinstance *here; double delvbd, delvbs, delvds, delvgd, delvgs, vbd, vbs, vds; double cbd, cbhat, cbs, cd, cdhat, tol, vgd, vgdo, vgs; /* loop through all the B3SOIPD device models */ for (; model != NULL; model = B3SOIPDnextModel(model)) { /* loop through all the instances of the model */ for (here = B3SOIPDinstances(model); here != NULL ; here=B3SOIPDnextInstance(here)) { vbs = model->B3SOIPDtype * (*(ckt->CKTrhsOld+here->B3SOIPDbNode) - *(ckt->CKTrhsOld+here->B3SOIPDsNodePrime)); vgs = model->B3SOIPDtype * (*(ckt->CKTrhsOld+here->B3SOIPDgNode) - *(ckt->CKTrhsOld+here->B3SOIPDsNodePrime)); vds = model->B3SOIPDtype * (*(ckt->CKTrhsOld+here->B3SOIPDdNodePrime) - *(ckt->CKTrhsOld+here->B3SOIPDsNodePrime)); vbd = vbs - vds; vgd = vgs - vds; vgdo = *(ckt->CKTstate0 + here->B3SOIPDvgs) - *(ckt->CKTstate0 + here->B3SOIPDvds); delvbs = vbs - *(ckt->CKTstate0 + here->B3SOIPDvbs); delvbd = vbd - *(ckt->CKTstate0 + here->B3SOIPDvbd); delvgs = vgs - *(ckt->CKTstate0 + here->B3SOIPDvgs); delvds = vds - *(ckt->CKTstate0 + here->B3SOIPDvds); delvgd = vgd-vgdo; cd = here->B3SOIPDcd; if (here->B3SOIPDmode >= 0) { cdhat = cd - here->B3SOIPDgjdb * delvbd + here->B3SOIPDgmbs * delvbs + here->B3SOIPDgm * delvgs + here->B3SOIPDgds * delvds; } else { cdhat = cd - (here->B3SOIPDgjdb - here->B3SOIPDgmbs) * delvbd - here->B3SOIPDgm * delvgd + here->B3SOIPDgds * delvds; } /* * check convergence */ if ((here->B3SOIPDoff == 0) || (!(ckt->CKTmode & MODEINITFIX))) { tol = ckt->CKTreltol * MAX(fabs(cdhat), fabs(cd)) + ckt->CKTabstol; if (fabs(cdhat - cd) >= tol) { ckt->CKTnoncon++; return(OK); } cbs = here->B3SOIPDcjs; cbd = here->B3SOIPDcjd; cbhat = cbs + cbd + here->B3SOIPDgjdb * delvbd + here->B3SOIPDgjsb * delvbs; tol = ckt->CKTreltol * MAX(fabs(cbhat), fabs(cbs + cbd)) + ckt->CKTabstol; if (fabs(cbhat - (cbs + cbd)) > tol) { ckt->CKTnoncon++; return(OK); } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/b3soipd.c0000644000175000017500000011671213546075722023115 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soipd.c 98/5/01 Modified by Pin Su and Jan Feng 99/2/15 Modified by Pin Su 99/4/30 Modified by Wei Jin 99/9/27 Modified by Pin Su 00/3/1 Modified by Pin Su 01/2/15 Modified by Pin Su 02/3/5 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.2.3 02/3/5 Pin Su * BSIMPD2.2.3 release */ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "b3soipddef.h" #include "ngspice/suffix.h" IFparm B3SOIPDpTable[] = { /* parameters */ IOP( "l", B3SOIPD_L, IF_REAL , "Length"), IOP( "w", B3SOIPD_W, IF_REAL , "Width"), IOP( "m", B3SOIPD_M, IF_REAL , "Parallel Multiplier"), IOP( "ad", B3SOIPD_AD, IF_REAL , "Drain area"), IOP( "as", B3SOIPD_AS, IF_REAL , "Source area"), IOP( "pd", B3SOIPD_PD, IF_REAL , "Drain perimeter"), IOP( "ps", B3SOIPD_PS, IF_REAL , "Source perimeter"), IOP( "nrd", B3SOIPD_NRD, IF_REAL , "Number of squares in drain"), IOP( "nrs", B3SOIPD_NRS, IF_REAL , "Number of squares in source"), IOP( "off", B3SOIPD_OFF, IF_FLAG , "Device is initially off"), IP( "ic", B3SOIPD_IC, IF_REALVEC , "Vector of DS,GS,BS initial voltages"), OP( "gmbs", B3SOIPD_GMBS, IF_REAL, "Gmb"), OP( "gm", B3SOIPD_GM, IF_REAL, "Gm"), OP( "gm/ids", B3SOIPD_GMID, IF_REAL, "Gm/Ids"), OP( "gds", B3SOIPD_GDS, IF_REAL, "Gds"), OP( "vdsat", B3SOIPD_VDSAT, IF_REAL, "Vdsat"), OP( "vth", B3SOIPD_VON, IF_REAL, "Vth"), OP( "ids", B3SOIPD_CD, IF_REAL, "Ids"), OP( "vbs", B3SOIPD_VBS, IF_REAL, "Vbs"), OP( "vgs", B3SOIPD_VGS, IF_REAL, "Vgs"), OP( "vds", B3SOIPD_VDS, IF_REAL, "Vds"), OP( "ves", B3SOIPD_VES, IF_REAL, "Ves"), IOP( "bjtoff", B3SOIPD_BJTOFF, IF_INTEGER, "BJT on/off flag"), IOP( "debug", B3SOIPD_DEBUG, IF_INTEGER, "BJT on/off flag"), IOP( "rth0", B3SOIPD_RTH0, IF_REAL, "Instance Thermal Resistance"), IOP( "cth0", B3SOIPD_CTH0, IF_REAL, "Instance Thermal Capacitance"), IOP( "nrb", B3SOIPD_NRB, IF_REAL, "Number of squares in body"), IOP( "frbody", B3SOIPD_FRBODY, IF_REAL, "layout dependent body-resistance coefficient"), /* v2.0 release */ IOP( "nbc", B3SOIPD_NBC, IF_REAL, "Number of body contact isolation edge"), IOP( "nseg", B3SOIPD_NSEG, IF_REAL, "Number segments for width partitioning"), IOP( "pdbcp", B3SOIPD_PDBCP, IF_REAL, "Perimeter length for bc parasitics at drain side"), IOP( "psbcp", B3SOIPD_PSBCP, IF_REAL, "Perimeter length for bc parasitics at source side"), IOP( "agbcp", B3SOIPD_AGBCP, IF_REAL, "Gate to body overlap area for bc parasitics"), IOP( "aebcp", B3SOIPD_AEBCP, IF_REAL, "Substrate to body overlap area for bc prasitics"), IOP( "vbsusr", B3SOIPD_VBSUSR, IF_REAL, "Vbs specified by user"), IOP( "tnodeout", B3SOIPD_TNODEOUT, IF_FLAG, "Flag indicating external temp node") }; IFparm B3SOIPDmPTable[] = { /* model parameters */ IOP( "capmod", B3SOIPD_MOD_CAPMOD, IF_INTEGER, "Capacitance model selector"), IOP( "mobmod", B3SOIPD_MOD_MOBMOD, IF_INTEGER, "Mobility model selector"), IOP( "noimod", B3SOIPD_MOD_NOIMOD, IF_INTEGER, "Noise model selector"), IOP( "paramchk", B3SOIPD_MOD_PARAMCHK, IF_INTEGER, "Model parameter checking selector"), IOP( "binunit", B3SOIPD_MOD_BINUNIT, IF_INTEGER, "Bin unit selector"), IOP( "version", B3SOIPD_MOD_VERSION, IF_REAL, " parameter for model version"), IOP( "tox", B3SOIPD_MOD_TOX, IF_REAL, "Gate oxide thickness in meters"), IOP( "dtoxcv", B3SOIPD_MOD_DTOXCV, IF_REAL, "Delta oxide thickness in meters in CapMod3"), /* v2.2.3 */ IOP( "cdsc", B3SOIPD_MOD_CDSC, IF_REAL, "Drain/Source and channel coupling capacitance"), IOP( "cdscb", B3SOIPD_MOD_CDSCB, IF_REAL, "Body-bias dependence of cdsc"), IOP( "cdscd", B3SOIPD_MOD_CDSCD, IF_REAL, "Drain-bias dependence of cdsc"), IOP( "cit", B3SOIPD_MOD_CIT, IF_REAL, "Interface state capacitance"), IOP( "nfactor", B3SOIPD_MOD_NFACTOR, IF_REAL, "Subthreshold swing Coefficient"), IOP( "vsat", B3SOIPD_MOD_VSAT, IF_REAL, "Saturation velocity at tnom"), IOP( "at", B3SOIPD_MOD_AT, IF_REAL, "Temperature coefficient of vsat"), IOP( "a0", B3SOIPD_MOD_A0, IF_REAL, "Non-uniform depletion width effect coefficient."), IOP( "ags", B3SOIPD_MOD_AGS, IF_REAL, "Gate bias coefficient of Abulk."), IOP( "a1", B3SOIPD_MOD_A1, IF_REAL, "Non-saturation effect coefficient"), IOP( "a2", B3SOIPD_MOD_A2, IF_REAL, "Non-saturation effect coefficient"), IOP( "keta", B3SOIPD_MOD_KETA, IF_REAL, "Body-bias coefficient of non-uniform depletion width effect."), IOP( "nsub", B3SOIPD_MOD_NSUB, IF_REAL, "Substrate doping concentration with polarity"), IOP( "nch", B3SOIPD_MOD_NPEAK, IF_REAL, "Channel doping concentration"), IOP( "ngate", B3SOIPD_MOD_NGATE, IF_REAL, "Poly-gate doping concentration"), IOP( "gamma1", B3SOIPD_MOD_GAMMA1, IF_REAL, "Vth body coefficient"), IOP( "gamma2", B3SOIPD_MOD_GAMMA2, IF_REAL, "Vth body coefficient"), IOP( "vbx", B3SOIPD_MOD_VBX, IF_REAL, "Vth transition body Voltage"), IOP( "vbm", B3SOIPD_MOD_VBM, IF_REAL, "Maximum body voltage"), IOP( "xt", B3SOIPD_MOD_XT, IF_REAL, "Doping depth"), IOP( "k1", B3SOIPD_MOD_K1, IF_REAL, "Bulk effect coefficient 1"), IOP( "kt1", B3SOIPD_MOD_KT1, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt1l", B3SOIPD_MOD_KT1L, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt2", B3SOIPD_MOD_KT2, IF_REAL, "Body-coefficient of kt1"), IOP( "k2", B3SOIPD_MOD_K2, IF_REAL, "Bulk effect coefficient 2"), IOP( "k3", B3SOIPD_MOD_K3, IF_REAL, "Narrow width effect coefficient"), IOP( "k3b", B3SOIPD_MOD_K3B, IF_REAL, "Body effect coefficient of k3"), IOP( "w0", B3SOIPD_MOD_W0, IF_REAL, "Narrow width effect parameter"), IOP( "nlx", B3SOIPD_MOD_NLX, IF_REAL, "Lateral non-uniform doping effect"), IOP( "dvt0", B3SOIPD_MOD_DVT0, IF_REAL, "Short channel effect coeff. 0"), IOP( "dvt1", B3SOIPD_MOD_DVT1, IF_REAL, "Short channel effect coeff. 1"), IOP( "dvt2", B3SOIPD_MOD_DVT2, IF_REAL, "Short channel effect coeff. 2"), IOP( "dvt0w", B3SOIPD_MOD_DVT0W, IF_REAL, "Narrow Width coeff. 0"), IOP( "dvt1w", B3SOIPD_MOD_DVT1W, IF_REAL, "Narrow Width effect coeff. 1"), IOP( "dvt2w", B3SOIPD_MOD_DVT2W, IF_REAL, "Narrow Width effect coeff. 2"), IOP( "drout", B3SOIPD_MOD_DROUT, IF_REAL, "DIBL coefficient of output resistance"), IOP( "dsub", B3SOIPD_MOD_DSUB, IF_REAL, "DIBL coefficient in the subthreshold region"), IOP( "vth0", B3SOIPD_MOD_VTH0, IF_REAL,"Threshold voltage"), IOPR("vtho", B3SOIPD_MOD_VTH0, IF_REAL,"Threshold voltage"), IOP( "ua", B3SOIPD_MOD_UA, IF_REAL, "Linear gate dependence of mobility"), IOP( "ua1", B3SOIPD_MOD_UA1, IF_REAL, "Temperature coefficient of ua"), IOP( "ub", B3SOIPD_MOD_UB, IF_REAL, "Quadratic gate dependence of mobility"), IOP( "ub1", B3SOIPD_MOD_UB1, IF_REAL, "Temperature coefficient of ub"), IOP( "uc", B3SOIPD_MOD_UC, IF_REAL, "Body-bias dependence of mobility"), IOP( "uc1", B3SOIPD_MOD_UC1, IF_REAL, "Temperature coefficient of uc"), IOP( "u0", B3SOIPD_MOD_U0, IF_REAL, "Low-field mobility at Tnom"), IOP( "ute", B3SOIPD_MOD_UTE, IF_REAL, "Temperature coefficient of mobility"), IOP( "voff", B3SOIPD_MOD_VOFF, IF_REAL, "Threshold voltage offset"), IOP( "tnom", B3SOIPD_MOD_TNOM, IF_REAL, "Parameter measurement temperature"), IOP( "cgso", B3SOIPD_MOD_CGSO, IF_REAL, "Gate-source overlap capacitance per width"), IOP( "cgdo", B3SOIPD_MOD_CGDO, IF_REAL, "Gate-drain overlap capacitance per width"), IOP( "xpart", B3SOIPD_MOD_XPART, IF_REAL, "Channel charge partitioning"), IOP( "delta", B3SOIPD_MOD_DELTA, IF_REAL, "Effective Vds parameter"), IOP( "rsh", B3SOIPD_MOD_RSH, IF_REAL, "Source-drain sheet resistance"), IOP( "rdsw", B3SOIPD_MOD_RDSW, IF_REAL, "Source-drain resistance per width"), IOP( "prwg", B3SOIPD_MOD_PRWG, IF_REAL, "Gate-bias effect on parasitic resistance "), IOP( "prwb", B3SOIPD_MOD_PRWB, IF_REAL, "Body-effect on parasitic resistance "), IOP( "prt", B3SOIPD_MOD_PRT, IF_REAL, "Temperature coefficient of parasitic resistance "), IOP( "eta0", B3SOIPD_MOD_ETA0, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "etab", B3SOIPD_MOD_ETAB, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "pclm", B3SOIPD_MOD_PCLM, IF_REAL, "Channel length modulation Coefficient"), IOP( "pdiblc1", B3SOIPD_MOD_PDIBL1, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblc2", B3SOIPD_MOD_PDIBL2, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblcb", B3SOIPD_MOD_PDIBLB, IF_REAL, "Body-effect on drain-induced barrier lowering"), IOP( "pvag", B3SOIPD_MOD_PVAG, IF_REAL, "Gate dependence of output resistance parameter"), IOP( "shmod", B3SOIPD_MOD_SHMOD, IF_INTEGER, "Self heating mode selector"), IOP( "ddmod", B3SOIPD_MOD_DDMOD, IF_INTEGER, "Dynamic depletion mode selector"), IOP( "tbox", B3SOIPD_MOD_TBOX, IF_REAL, "Back gate oxide thickness in meters"), IOP( "tsi", B3SOIPD_MOD_TSI, IF_REAL, "Silicon-on-insulator thickness in meters"), IOP( "xj", B3SOIPD_MOD_XJ, IF_REAL, "Junction Depth"), IOP( "rth0", B3SOIPD_MOD_RTH0, IF_REAL, "Self-heating thermal resistance"), IOP( "cth0", B3SOIPD_MOD_CTH0, IF_REAL, "Self-heating thermal capacitance"), IOP( "ngidl", B3SOIPD_MOD_NGIDL, IF_REAL, "GIDL first parameter"), IOP( "agidl", B3SOIPD_MOD_AGIDL, IF_REAL, "GIDL second parameter"), IOP( "bgidl", B3SOIPD_MOD_BGIDL, IF_REAL, "GIDL third parameter"), IOP( "ndiode", B3SOIPD_MOD_NDIODE, IF_REAL, "Diode non-ideality factor"), IOP( "xbjt", B3SOIPD_MOD_XBJT, IF_REAL, "Temperature coefficient for Isbjt"), IOP( "xdif", B3SOIPD_MOD_XDIF, IF_REAL, "Temperature coefficient for Isdif"), IOP( "xrec", B3SOIPD_MOD_XREC, IF_REAL, "Temperature coefficient for Isrec"), IOP( "xtun", B3SOIPD_MOD_XTUN, IF_REAL, "Temperature coefficient for Istun"), IOP( "pbswg", B3SOIPD_MOD_PBSWG, IF_REAL, "Source/drain (gate side) sidewall junction capacitance built in potential"), IOP( "mjswg", B3SOIPD_MOD_MJSWG, IF_REAL, "Source/drain (gate side) sidewall junction capacitance grading coefficient"), IOP( "cjswg", B3SOIPD_MOD_CJSWG, IF_REAL, "Source/drain (gate side) sidewall junction capacitance per unit width"), IOP( "lint", B3SOIPD_MOD_LINT, IF_REAL, "Length reduction parameter"), IOP( "ll", B3SOIPD_MOD_LL, IF_REAL, "Length reduction parameter"), IOP( "llc", B3SOIPD_MOD_LLC, IF_REAL, "Length reduction parameter"), /* v2.2.3 */ IOP( "lln", B3SOIPD_MOD_LLN, IF_REAL, "Length reduction parameter"), IOP( "lw", B3SOIPD_MOD_LW, IF_REAL, "Length reduction parameter"), IOP( "lwc", B3SOIPD_MOD_LWC, IF_REAL, "Length reduction parameter"), /* v2.2.3 */ IOP( "lwn", B3SOIPD_MOD_LWN, IF_REAL, "Length reduction parameter"), IOP( "lwl", B3SOIPD_MOD_LWL, IF_REAL, "Length reduction parameter"), IOP( "lwlc", B3SOIPD_MOD_LWLC, IF_REAL, "Length reduction parameter"), /* v2.2.3 */ IOP( "wr", B3SOIPD_MOD_WR, IF_REAL, "Width dependence of rds"), IOP( "wint", B3SOIPD_MOD_WINT, IF_REAL, "Width reduction parameter"), IOP( "dwg", B3SOIPD_MOD_DWG, IF_REAL, "Width reduction parameter"), IOP( "dwb", B3SOIPD_MOD_DWB, IF_REAL, "Width reduction parameter"), IOP( "wl", B3SOIPD_MOD_WL, IF_REAL, "Width reduction parameter"), IOP( "wlc", B3SOIPD_MOD_WLC, IF_REAL, "Width reduction parameter"), /* v2.2.3 */ IOP( "wln", B3SOIPD_MOD_WLN, IF_REAL, "Width reduction parameter"), IOP( "ww", B3SOIPD_MOD_WW, IF_REAL, "Width reduction parameter"), IOP( "wwc", B3SOIPD_MOD_WWC, IF_REAL, "Width reduction parameter"), /* v2.2.3 */ IOP( "wwn", B3SOIPD_MOD_WWN, IF_REAL, "Width reduction parameter"), IOP( "wwl", B3SOIPD_MOD_WWL, IF_REAL, "Width reduction parameter"), IOP( "wwlc", B3SOIPD_MOD_WWLC, IF_REAL, "Width reduction parameter"), /* v2.2.3 */ IOP( "b0", B3SOIPD_MOD_B0, IF_REAL, "Abulk narrow width parameter"), IOP( "b1", B3SOIPD_MOD_B1, IF_REAL, "Abulk narrow width parameter"), IOP( "cgsl", B3SOIPD_MOD_CGSL, IF_REAL, "New C-V model parameter"), IOP( "cgdl", B3SOIPD_MOD_CGDL, IF_REAL, "New C-V model parameter"), IOP( "ckappa", B3SOIPD_MOD_CKAPPA, IF_REAL, "New C-V model parameter"), IOP( "cf", B3SOIPD_MOD_CF, IF_REAL, "Fringe capacitance parameter"), IOP( "clc", B3SOIPD_MOD_CLC, IF_REAL, "Vdsat parameter for C-V model"), IOP( "cle", B3SOIPD_MOD_CLE, IF_REAL, "Vdsat parameter for C-V model"), IOP( "dwc", B3SOIPD_MOD_DWC, IF_REAL, "Delta W for C-V model"), IOP( "dlc", B3SOIPD_MOD_DLC, IF_REAL, "Delta L for C-V model"), IOP( "alpha0", B3SOIPD_MOD_ALPHA0, IF_REAL, "substrate current model parameter"), IOP( "noia", B3SOIPD_MOD_NOIA, IF_REAL, "Flicker noise parameter"), IOP( "noib", B3SOIPD_MOD_NOIB, IF_REAL, "Flicker noise parameter"), IOP( "noic", B3SOIPD_MOD_NOIC, IF_REAL, "Flicker noise parameter"), IOP( "em", B3SOIPD_MOD_EM, IF_REAL, "Flicker noise parameter"), IOP( "ef", B3SOIPD_MOD_EF, IF_REAL, "Flicker noise frequency exponent"), IOP( "af", B3SOIPD_MOD_AF, IF_REAL, "Flicker noise exponent"), IOP( "kf", B3SOIPD_MOD_KF, IF_REAL, "Flicker noise coefficient"), IOP( "noif", B3SOIPD_MOD_NOIF, IF_REAL, "Floating body excess noise ideality factor"), /* v2.0 release */ IOP( "k1w1", B3SOIPD_MOD_K1W1, IF_REAL, "First Body effect width dependent parameter"), IOP( "k1w2", B3SOIPD_MOD_K1W2, IF_REAL, "Second Boby effect width dependent parameter"), IOP( "ketas", B3SOIPD_MOD_KETAS, IF_REAL, "Surface potential adjustment for bulk charge effect"), IOP( "dwbc", B3SOIPD_MOD_DWBC, IF_REAL, "Width offset for body contact isolation edge"), IOP( "beta0", B3SOIPD_MOD_BETA0, IF_REAL, "First Vds dependent parameter of impact ionizition current"), IOP( "beta1", B3SOIPD_MOD_BETA1, IF_REAL, "Second Vds dependent parameter of impact ionizition current"), IOP( "beta2", B3SOIPD_MOD_BETA2, IF_REAL, "Third Vds dependent parameter of impact ionizition current"), IOP( "vdsatii0", B3SOIPD_MOD_VDSATII0, IF_REAL, "Nominal drain saturation voltage at threshold for impact ionizition current"), IOP( "tii", B3SOIPD_MOD_TII, IF_REAL, "Temperature dependent parameter for impact ionizition"), IOP( "lii", B3SOIPD_MOD_LII, IF_REAL, "Channel length dependent parameter at threshold for impact ionizition current"), IOP( "sii0", B3SOIPD_MOD_SII0, IF_REAL, "First Vgs dependent parameter for impact ionizition current"), IOP( "sii1", B3SOIPD_MOD_SII1, IF_REAL, "Second Vgs dependent parameter for impact ionizition current"), IOP( "sii2", B3SOIPD_MOD_SII2, IF_REAL, "Third Vgs dependent parameter for impact ionizition current"), IOP( "siid", B3SOIPD_MOD_SIID, IF_REAL, "Vds dependent parameter of drain saturation voltage for impact ionizition current"), IOP( "fbjtii", B3SOIPD_MOD_FBJTII, IF_REAL, "Fraction of bipolar current affecting the impact ionization"), IOP( "esatii", B3SOIPD_MOD_ESATII, IF_REAL, "Saturation electric field for impact ionization"), IOP( "ntun", B3SOIPD_MOD_NTUN, IF_REAL, "Reverse tunneling non-ideality factor"), IOP( "nrecf0", B3SOIPD_MOD_NRECF0, IF_REAL, "Recombination non-ideality factor at forward bias"), IOP( "nrecr0", B3SOIPD_MOD_NRECR0, IF_REAL, "Recombination non-ideality factor at reversed bias"), IOP( "isbjt", B3SOIPD_MOD_ISBJT, IF_REAL, "BJT injection saturation current"), IOP( "isdif", B3SOIPD_MOD_ISDIF, IF_REAL, "Body to source/drain injection saturation current"), IOP( "isrec", B3SOIPD_MOD_ISREC, IF_REAL, "Recombination in depletion saturation current"), IOP( "istun", B3SOIPD_MOD_ISTUN, IF_REAL, "Reverse tunneling saturation current"), IOP( "ln", B3SOIPD_MOD_LN, IF_REAL, "Electron/hole diffusion length"), IOP( "vrec0", B3SOIPD_MOD_VREC0, IF_REAL, "Voltage dependent parameter for recombination current"), IOP( "vtun0", B3SOIPD_MOD_VTUN0, IF_REAL, "Voltage dependent parameter for tunneling current"), IOP( "nbjt", B3SOIPD_MOD_NBJT, IF_REAL, "Power coefficient of channel length dependency for bipolar current"), IOP( "lbjt0", B3SOIPD_MOD_LBJT0, IF_REAL, "Refferenc channel length for bipolar cuurent"), IOP( "ldif0", B3SOIPD_MOD_LDIF0, IF_REAL, "Channel-length dependency coefficient of diffusion cap"), IOP( "vabjt", B3SOIPD_MOD_VABJT, IF_REAL, "Early voltage for bipolar current"), IOP( "aely", B3SOIPD_MOD_AELY, IF_REAL, "Channel length dependency of early voltage for bipolar cuurent"), IOP( "ahli", B3SOIPD_MOD_AHLI, IF_REAL, "High level injection parameter for bipolar current"), IOP( "rbody", B3SOIPD_MOD_RBODY, IF_REAL, "Intrinsic body contact sheet resistance"), IOP( "rbsh", B3SOIPD_MOD_RBSH, IF_REAL, "Extrinsic body contact sheet resistance"), IOP( "cgeo", B3SOIPD_MOD_CGEO, IF_REAL, "Gate substrate overlap capacitance per unit channel length"), IOP( "tt", B3SOIPD_MOD_TT, IF_REAL, "Diffusion capacitance transit time coefficient"), IOP( "ndif", B3SOIPD_MOD_NDIF, IF_REAL, "Power coefficient of channel length dependency for diffusion capacitance"), IOP( "vsdfb", B3SOIPD_MOD_VSDFB, IF_REAL, "Source/drain bottom diffusion capacitance flatband voltage"), IOP( "vsdth", B3SOIPD_MOD_VSDTH, IF_REAL, "Source/drain bottom diffusion capacitance threshold voltage"), IOP( "csdmin", B3SOIPD_MOD_CSDMIN, IF_REAL, "Source/drain bottom diffusion minimum capacitance"), IOP( "asd", B3SOIPD_MOD_ASD, IF_REAL, "Source/drain bottom diffusion smoothing parameter"), IOP( "csdesw", B3SOIPD_MOD_CSDESW, IF_REAL, "Source/drain sidewall fringing capacitance per unit length"), IOP( "ntrecf", B3SOIPD_MOD_NTRECF, IF_REAL, "Temperature coefficient for Nrecf"), IOP( "ntrecr", B3SOIPD_MOD_NTRECR, IF_REAL, "Temperature coefficient for Nrecr"), IOP( "dlcb", B3SOIPD_MOD_DLCB, IF_REAL, "Length offset fitting parameter for body charge"), IOP( "fbody", B3SOIPD_MOD_FBODY, IF_REAL, "Scaling factor for body charge"), IOP( "tcjswg", B3SOIPD_MOD_TCJSWG, IF_REAL, "Temperature coefficient of Cjswg"), IOP( "tpbswg", B3SOIPD_MOD_TPBSWG, IF_REAL, "Temperature coefficient of Pbswg"), IOP( "acde", B3SOIPD_MOD_ACDE, IF_REAL, "Exponential coefficient for charge thickness in capMod=3 for accumulation and depletion regions"), IOP( "moin", B3SOIPD_MOD_MOIN, IF_REAL, "Coefficient for the gate-bias dependent surface potential"), IOP( "delvt", B3SOIPD_MOD_DELVT, IF_REAL, "Threshold voltage adjust for CV"), IOP( "kb1", B3SOIPD_MOD_KB1, IF_REAL, "Scaling factor for backgate charge"), IOP( "dlbg", B3SOIPD_MOD_DLBG, IF_REAL, "Length offset fitting parameter for backgate charge"), /* v2.2 release */ IOP( "igmod", B3SOIPD_MOD_IGMOD, IF_INTEGER, "gate current model selector"), IOP( "toxqm", B3SOIPD_MOD_TOXQM, IF_REAL, "effective oxide thickness considering quantum effect"), IOP( "wth0", B3SOIPD_MOD_WTH0, IF_REAL, "Minimum width for thermal resistance calculation"), IOP( "rhalo", B3SOIPD_MOD_RHALO, IF_REAL, "body halo sheet resistance"), IOP( "ntox", B3SOIPD_MOD_NTOX, IF_REAL, "power term of gate current"), IOP( "toxref", B3SOIPD_MOD_TOXREF, IF_REAL, "target oxide thickness"), IOP( "ebg", B3SOIPD_MOD_EBG, IF_REAL, "effective bandgap in gate current calcula."), IOP( "vevb", B3SOIPD_MOD_VEVB, IF_REAL, "Vaux parameter for valence-band electron tunneling"), IOP( "alphagb1", B3SOIPD_MOD_ALPHAGB1, IF_REAL, "First Vox dependent parameter for gate current in inversion"), IOP( "betagb1", B3SOIPD_MOD_BETAGB1, IF_REAL, "Second Vox dependent parameter for gate current in inversion"), IOP( "vgb1", B3SOIPD_MOD_VGB1, IF_REAL, "Third Vox dependent parameter for gate current in inversion"), IOP( "vecb", B3SOIPD_MOD_VECB, IF_REAL, "Vaux parameter for conduction-band electron tunneling"), IOP( "alphagb2", B3SOIPD_MOD_ALPHAGB2, IF_REAL, "First Vox dependent parameter for gate current in accumulation"), IOP( "betagb2", B3SOIPD_MOD_BETAGB2, IF_REAL, "Second Vox dependent parameter for gate current in accumulation"), IOP( "vgb2", B3SOIPD_MOD_VGB2, IF_REAL, "Third Vox dependent parameter for gate current in accumulation"), IOP( "voxh", B3SOIPD_MOD_VOXH, IF_REAL, "the limit of Vox in gate current calculation"), IOP( "deltavox", B3SOIPD_MOD_DELTAVOX, IF_REAL, "the smoothing parameter in the Vox smoothing function"), /* Added for binning - START */ /* Length Dependence */ IOP( "lnch", B3SOIPD_MOD_LNPEAK, IF_REAL, "Length dependence of nch"), IOP( "lnsub", B3SOIPD_MOD_LNSUB, IF_REAL, "Length dependence of nsub"), IOP( "lngate", B3SOIPD_MOD_LNGATE, IF_REAL, "Length dependence of ngate"), IOP( "lvth0", B3SOIPD_MOD_LVTH0, IF_REAL,"Length dependence of vth0"), IOP( "lk1", B3SOIPD_MOD_LK1, IF_REAL, "Length dependence of k1"), IOP( "lk1w1", B3SOIPD_MOD_LK1W1, IF_REAL, "Length dependence of k1w1"), IOP( "lk1w2", B3SOIPD_MOD_LK1W2, IF_REAL, "Length dependence of k1w2"), IOP( "lk2", B3SOIPD_MOD_LK2, IF_REAL, "Length dependence of k2"), IOP( "lk3", B3SOIPD_MOD_LK3, IF_REAL, "Length dependence of k3"), IOP( "lk3b", B3SOIPD_MOD_LK3B, IF_REAL, "Length dependence of k3b"), IOP( "lkb1", B3SOIPD_MOD_LKB1, IF_REAL, "Length dependence of kb1"), IOP( "lw0", B3SOIPD_MOD_LW0, IF_REAL, "Length dependence of w0"), IOP( "lnlx", B3SOIPD_MOD_LNLX, IF_REAL, "Length dependence of nlx"), IOP( "ldvt0", B3SOIPD_MOD_LDVT0, IF_REAL, "Length dependence of dvt0"), IOP( "ldvt1", B3SOIPD_MOD_LDVT1, IF_REAL, "Length dependence of dvt1"), IOP( "ldvt2", B3SOIPD_MOD_LDVT2, IF_REAL, "Length dependence of dvt2"), IOP( "ldvt0w", B3SOIPD_MOD_LDVT0W, IF_REAL, "Length dependence of dvt0w"), IOP( "ldvt1w", B3SOIPD_MOD_LDVT1W, IF_REAL, "Length dependence of dvt1w"), IOP( "ldvt2w", B3SOIPD_MOD_LDVT2W, IF_REAL, "Length dependence of dvt2w"), IOP( "lu0", B3SOIPD_MOD_LU0, IF_REAL, "Length dependence of u0"), IOP( "lua", B3SOIPD_MOD_LUA, IF_REAL, "Length dependence of ua"), IOP( "lub", B3SOIPD_MOD_LUB, IF_REAL, "Length dependence of ub"), IOP( "luc", B3SOIPD_MOD_LUC, IF_REAL, "Length dependence of uc"), IOP( "lvsat", B3SOIPD_MOD_LVSAT, IF_REAL, "Length dependence of vsat"), IOP( "la0", B3SOIPD_MOD_LA0, IF_REAL, "Length dependence of a0"), IOP( "lags", B3SOIPD_MOD_LAGS, IF_REAL, "Length dependence of ags"), IOP( "lb0", B3SOIPD_MOD_LB0, IF_REAL, "Length dependence of b0"), IOP( "lb1", B3SOIPD_MOD_LB1, IF_REAL, "Length dependence of b1"), IOP( "lketa", B3SOIPD_MOD_LKETA, IF_REAL, "Length dependence of keta"), IOP( "lketas", B3SOIPD_MOD_LKETAS, IF_REAL, "Length dependence of ketas"), IOP( "la1", B3SOIPD_MOD_LA1, IF_REAL, "Length dependence of a1"), IOP( "la2", B3SOIPD_MOD_LA2, IF_REAL, "Length dependence of a2"), IOP( "lrdsw", B3SOIPD_MOD_LRDSW, IF_REAL, "Length dependence of rdsw "), IOP( "lprwb", B3SOIPD_MOD_LPRWB, IF_REAL, "Length dependence of prwb "), IOP( "lprwg", B3SOIPD_MOD_LPRWG, IF_REAL, "Length dependence of prwg "), IOP( "lwr", B3SOIPD_MOD_LWR, IF_REAL, "Length dependence of wr"), IOP( "lnfactor", B3SOIPD_MOD_LNFACTOR, IF_REAL, "Length dependence of nfactor"), IOP( "ldwg", B3SOIPD_MOD_LDWG, IF_REAL, "Length dependence of dwg"), IOP( "ldwb", B3SOIPD_MOD_LDWB, IF_REAL, "Length dependence of dwb"), IOP( "lvoff", B3SOIPD_MOD_LVOFF, IF_REAL, "Length dependence of voff"), IOP( "leta0", B3SOIPD_MOD_LETA0, IF_REAL, "Length dependence of eta0"), IOP( "letab", B3SOIPD_MOD_LETAB, IF_REAL, "Length dependence of etab"), IOP( "ldsub", B3SOIPD_MOD_LDSUB, IF_REAL, "Length dependence of dsub"), IOP( "lcit", B3SOIPD_MOD_LCIT, IF_REAL, "Length dependence of cit"), IOP( "lcdsc", B3SOIPD_MOD_LCDSC, IF_REAL, "Length dependence of cdsc"), IOP( "lcdscb", B3SOIPD_MOD_LCDSCB, IF_REAL, "Length dependence of cdscb"), IOP( "lcdscd", B3SOIPD_MOD_LCDSCD, IF_REAL, "Length dependence of cdscd"), IOP( "lpclm", B3SOIPD_MOD_LPCLM, IF_REAL, "Length dependence of pclm"), IOP( "lpdiblc1", B3SOIPD_MOD_LPDIBL1, IF_REAL, "Length dependence of pdiblc1"), IOP( "lpdiblc2", B3SOIPD_MOD_LPDIBL2, IF_REAL, "Length dependence of pdiblc2"), IOP( "lpdiblcb", B3SOIPD_MOD_LPDIBLB, IF_REAL, "Length dependence of pdiblcb"), IOP( "ldrout", B3SOIPD_MOD_LDROUT, IF_REAL, "Length dependence of drout"), IOP( "lpvag", B3SOIPD_MOD_LPVAG, IF_REAL, "Length dependence of pvag"), IOP( "ldelta", B3SOIPD_MOD_LDELTA, IF_REAL, "Length dependence of delta"), IOP( "lalpha0", B3SOIPD_MOD_LALPHA0, IF_REAL, "Length dependence of alpha0"), IOP( "lfbjtii", B3SOIPD_MOD_LFBJTII, IF_REAL, "Length dependence of fbjtii"), IOP( "lbeta0", B3SOIPD_MOD_LBETA0, IF_REAL, "Length dependence of beta0"), IOP( "lbeta1", B3SOIPD_MOD_LBETA1, IF_REAL, "Length dependence of beta1"), IOP( "lbeta2", B3SOIPD_MOD_LBETA2, IF_REAL, "Length dependence of beta2"), IOP( "lvdsatii0", B3SOIPD_MOD_LVDSATII0, IF_REAL, "Length dependence of vdsatii0"), IOP( "llii", B3SOIPD_MOD_LLII, IF_REAL, "Length dependence of lii"), IOP( "lesatii", B3SOIPD_MOD_LESATII, IF_REAL, "Length dependence of esatii"), IOP( "lsii0", B3SOIPD_MOD_LSII0, IF_REAL, "Length dependence of sii0"), IOP( "lsii1", B3SOIPD_MOD_LSII1, IF_REAL, "Length dependence of sii1"), IOP( "lsii2", B3SOIPD_MOD_LSII2, IF_REAL, "Length dependence of sii2"), IOP( "lsiid", B3SOIPD_MOD_LSIID, IF_REAL, "Length dependence of siid"), IOP( "lagidl", B3SOIPD_MOD_LAGIDL, IF_REAL, "Length dependence of agidl"), IOP( "lbgidl", B3SOIPD_MOD_LBGIDL, IF_REAL, "Length dependence of bgidl"), IOP( "lngidl", B3SOIPD_MOD_LNGIDL, IF_REAL, "Length dependence of ngidl"), IOP( "lntun", B3SOIPD_MOD_LNTUN, IF_REAL, "Length dependence of ntun"), IOP( "lndiode", B3SOIPD_MOD_LNDIODE, IF_REAL, "Length dependence of ndiode"), IOP( "lnrecf0", B3SOIPD_MOD_LNRECF0, IF_REAL, "Length dependence of nrecf0"), IOP( "lnrecr0", B3SOIPD_MOD_LNRECR0, IF_REAL, "Length dependence of nrecr0"), IOP( "lisbjt", B3SOIPD_MOD_LISBJT, IF_REAL, "Length dependence of isbjt"), IOP( "lisdif", B3SOIPD_MOD_LISDIF, IF_REAL, "Length dependence of isdif"), IOP( "lisrec", B3SOIPD_MOD_LISREC, IF_REAL, "Length dependence of isrec"), IOP( "listun", B3SOIPD_MOD_LISTUN, IF_REAL, "Length dependence of istun"), IOP( "lvrec0", B3SOIPD_MOD_LVREC0, IF_REAL, "Length dependence of vrec0"), IOP( "lvtun0", B3SOIPD_MOD_LVTUN0, IF_REAL, "Length dependence of vtun0"), IOP( "lnbjt", B3SOIPD_MOD_LNBJT, IF_REAL, "Length dependence of nbjt"), IOP( "llbjt0", B3SOIPD_MOD_LLBJT0, IF_REAL, "Length dependence of lbjt0"), IOP( "lvabjt", B3SOIPD_MOD_LVABJT, IF_REAL, "Length dependence of vabjt"), IOP( "laely", B3SOIPD_MOD_LAELY, IF_REAL, "Length dependence of aely"), IOP( "lahli", B3SOIPD_MOD_LAHLI, IF_REAL, "Length dependence of ahli"), IOP( "lvsdfb", B3SOIPD_MOD_LVSDFB, IF_REAL, "Length dependence of vsdfb"), IOP( "lvsdth", B3SOIPD_MOD_LVSDTH, IF_REAL, "Length dependence of vsdth"), IOP( "ldelvt", B3SOIPD_MOD_LDELVT, IF_REAL, "Length dependence of delvt"), IOP( "lacde", B3SOIPD_MOD_LACDE, IF_REAL, "Length dependence of acde"), IOP( "lmoin", B3SOIPD_MOD_LMOIN, IF_REAL, "Length dependence of amoin"), /* Width Dependence */ IOP( "wnch", B3SOIPD_MOD_WNPEAK, IF_REAL, "Width dependence of nch"), IOP( "wnsub", B3SOIPD_MOD_WNSUB, IF_REAL, "Width dependence of nsub"), IOP( "wngate", B3SOIPD_MOD_WNGATE, IF_REAL, "Width dependence of ngate"), IOP( "wvth0", B3SOIPD_MOD_WVTH0, IF_REAL,"Width dependence of vth0"), IOP( "wk1", B3SOIPD_MOD_WK1, IF_REAL, "Width dependence of k1"), IOP( "wk1w1", B3SOIPD_MOD_WK1W1, IF_REAL, "Width dependence of k1w1"), IOP( "wk1w2", B3SOIPD_MOD_WK1W2, IF_REAL, "Width dependence of k1w2"), IOP( "wk2", B3SOIPD_MOD_WK2, IF_REAL, "Width dependence of k2"), IOP( "wk3", B3SOIPD_MOD_WK3, IF_REAL, "Width dependence of k3"), IOP( "wk3b", B3SOIPD_MOD_WK3B, IF_REAL, "Width dependence of k3b"), IOP( "wkb1", B3SOIPD_MOD_WKB1, IF_REAL, "Width dependence of kb1"), IOP( "ww0", B3SOIPD_MOD_WW0, IF_REAL, "Width dependence of w0"), IOP( "wnlx", B3SOIPD_MOD_WNLX, IF_REAL, "Width dependence of nlx"), IOP( "wdvt0", B3SOIPD_MOD_WDVT0, IF_REAL, "Width dependence of dvt0"), IOP( "wdvt1", B3SOIPD_MOD_WDVT1, IF_REAL, "Width dependence of dvt1"), IOP( "wdvt2", B3SOIPD_MOD_WDVT2, IF_REAL, "Width dependence of dvt2"), IOP( "wdvt0w", B3SOIPD_MOD_WDVT0W, IF_REAL, "Width dependence of dvt0w"), IOP( "wdvt1w", B3SOIPD_MOD_WDVT1W, IF_REAL, "Width dependence of dvt1w"), IOP( "wdvt2w", B3SOIPD_MOD_WDVT2W, IF_REAL, "Width dependence of dvt2w"), IOP( "wu0", B3SOIPD_MOD_WU0, IF_REAL, "Width dependence of u0"), IOP( "wua", B3SOIPD_MOD_WUA, IF_REAL, "Width dependence of ua"), IOP( "wub", B3SOIPD_MOD_WUB, IF_REAL, "Width dependence of ub"), IOP( "wuc", B3SOIPD_MOD_WUC, IF_REAL, "Width dependence of uc"), IOP( "wvsat", B3SOIPD_MOD_WVSAT, IF_REAL, "Width dependence of vsat"), IOP( "wa0", B3SOIPD_MOD_WA0, IF_REAL, "Width dependence of a0"), IOP( "wags", B3SOIPD_MOD_WAGS, IF_REAL, "Width dependence of ags"), IOP( "wb0", B3SOIPD_MOD_WB0, IF_REAL, "Width dependence of b0"), IOP( "wb1", B3SOIPD_MOD_WB1, IF_REAL, "Width dependence of b1"), IOP( "wketa", B3SOIPD_MOD_WKETA, IF_REAL, "Width dependence of keta"), IOP( "wketas", B3SOIPD_MOD_WKETAS, IF_REAL, "Width dependence of ketas"), IOP( "wa1", B3SOIPD_MOD_WA1, IF_REAL, "Width dependence of a1"), IOP( "wa2", B3SOIPD_MOD_WA2, IF_REAL, "Width dependence of a2"), IOP( "wrdsw", B3SOIPD_MOD_WRDSW, IF_REAL, "Width dependence of rdsw "), IOP( "wprwb", B3SOIPD_MOD_WPRWB, IF_REAL, "Width dependence of prwb "), IOP( "wprwg", B3SOIPD_MOD_WPRWG, IF_REAL, "Width dependence of prwg "), IOP( "wwr", B3SOIPD_MOD_WWR, IF_REAL, "Width dependence of wr"), IOP( "wnfactor", B3SOIPD_MOD_WNFACTOR, IF_REAL, "Width dependence of nfactor"), IOP( "wdwg", B3SOIPD_MOD_WDWG, IF_REAL, "Width dependence of dwg"), IOP( "wdwb", B3SOIPD_MOD_WDWB, IF_REAL, "Width dependence of dwb"), IOP( "wvoff", B3SOIPD_MOD_WVOFF, IF_REAL, "Width dependence of voff"), IOP( "weta0", B3SOIPD_MOD_WETA0, IF_REAL, "Width dependence of eta0"), IOP( "wetab", B3SOIPD_MOD_WETAB, IF_REAL, "Width dependence of etab"), IOP( "wdsub", B3SOIPD_MOD_WDSUB, IF_REAL, "Width dependence of dsub"), IOP( "wcit", B3SOIPD_MOD_WCIT, IF_REAL, "Width dependence of cit"), IOP( "wcdsc", B3SOIPD_MOD_WCDSC, IF_REAL, "Width dependence of cdsc"), IOP( "wcdscb", B3SOIPD_MOD_WCDSCB, IF_REAL, "Width dependence of cdscb"), IOP( "wcdscd", B3SOIPD_MOD_WCDSCD, IF_REAL, "Width dependence of cdscd"), IOP( "wpclm", B3SOIPD_MOD_WPCLM, IF_REAL, "Width dependence of pclm"), IOP( "wpdiblc1", B3SOIPD_MOD_WPDIBL1, IF_REAL, "Width dependence of pdiblc1"), IOP( "wpdiblc2", B3SOIPD_MOD_WPDIBL2, IF_REAL, "Width dependence of pdiblc2"), IOP( "wpdiblcb", B3SOIPD_MOD_WPDIBLB, IF_REAL, "Width dependence of pdiblcb"), IOP( "wdrout", B3SOIPD_MOD_WDROUT, IF_REAL, "Width dependence of drout"), IOP( "wpvag", B3SOIPD_MOD_WPVAG, IF_REAL, "Width dependence of pvag"), IOP( "wdelta", B3SOIPD_MOD_WDELTA, IF_REAL, "Width dependence of delta"), IOP( "walpha0", B3SOIPD_MOD_WALPHA0, IF_REAL, "Width dependence of alpha0"), IOP( "wfbjtii", B3SOIPD_MOD_WFBJTII, IF_REAL, "Width dependence of fbjtii"), IOP( "wbeta0", B3SOIPD_MOD_WBETA0, IF_REAL, "Width dependence of beta0"), IOP( "wbeta1", B3SOIPD_MOD_WBETA1, IF_REAL, "Width dependence of beta1"), IOP( "wbeta2", B3SOIPD_MOD_WBETA2, IF_REAL, "Width dependence of beta2"), IOP( "wvdsatii0", B3SOIPD_MOD_WVDSATII0, IF_REAL, "Width dependence of vdsatii0"), IOP( "wlii", B3SOIPD_MOD_WLII, IF_REAL, "Width dependence of lii"), IOP( "wesatii", B3SOIPD_MOD_WESATII, IF_REAL, "Width dependence of esatii"), IOP( "wsii0", B3SOIPD_MOD_WSII0, IF_REAL, "Width dependence of sii0"), IOP( "wsii1", B3SOIPD_MOD_WSII1, IF_REAL, "Width dependence of sii1"), IOP( "wsii2", B3SOIPD_MOD_WSII2, IF_REAL, "Width dependence of sii2"), IOP( "wsiid", B3SOIPD_MOD_WSIID, IF_REAL, "Width dependence of siid"), IOP( "wagidl", B3SOIPD_MOD_WAGIDL, IF_REAL, "Width dependence of agidl"), IOP( "wbgidl", B3SOIPD_MOD_WBGIDL, IF_REAL, "Width dependence of bgidl"), IOP( "wngidl", B3SOIPD_MOD_WNGIDL, IF_REAL, "Width dependence of ngidl"), IOP( "wntun", B3SOIPD_MOD_WNTUN, IF_REAL, "Width dependence of ntun"), IOP( "wndiode", B3SOIPD_MOD_WNDIODE, IF_REAL, "Width dependence of ndiode"), IOP( "wnrecf0", B3SOIPD_MOD_WNRECF0, IF_REAL, "Width dependence of nrecf0"), IOP( "wnrecr0", B3SOIPD_MOD_WNRECR0, IF_REAL, "Width dependence of nrecr0"), IOP( "wisbjt", B3SOIPD_MOD_WISBJT, IF_REAL, "Width dependence of isbjt"), IOP( "wisdif", B3SOIPD_MOD_WISDIF, IF_REAL, "Width dependence of isdif"), IOP( "wisrec", B3SOIPD_MOD_WISREC, IF_REAL, "Width dependence of isrec"), IOP( "wistun", B3SOIPD_MOD_WISTUN, IF_REAL, "Width dependence of istun"), IOP( "wvrec0", B3SOIPD_MOD_WVREC0, IF_REAL, "Width dependence of vrec0"), IOP( "wvtun0", B3SOIPD_MOD_WVTUN0, IF_REAL, "Width dependence of vtun0"), IOP( "wnbjt", B3SOIPD_MOD_WNBJT, IF_REAL, "Width dependence of nbjt"), IOP( "wlbjt0", B3SOIPD_MOD_WLBJT0, IF_REAL, "Width dependence of lbjt0"), IOP( "wvabjt", B3SOIPD_MOD_WVABJT, IF_REAL, "Width dependence of vabjt"), IOP( "waely", B3SOIPD_MOD_WAELY, IF_REAL, "Width dependence of aely"), IOP( "wahli", B3SOIPD_MOD_WAHLI, IF_REAL, "Width dependence of ahli"), IOP( "wvsdfb", B3SOIPD_MOD_WVSDFB, IF_REAL, "Width dependence of vsdfb"), IOP( "wvsdth", B3SOIPD_MOD_WVSDTH, IF_REAL, "Width dependence of vsdth"), IOP( "wdelvt", B3SOIPD_MOD_WDELVT, IF_REAL, "Width dependence of delvt"), IOP( "wacde", B3SOIPD_MOD_WACDE, IF_REAL, "Width dependence of acde"), IOP( "wmoin", B3SOIPD_MOD_WMOIN, IF_REAL, "Width dependence of amoin"), /* Cross-term Dependence */ IOP( "pnch", B3SOIPD_MOD_PNPEAK, IF_REAL, "Cross-term dependence of nch"), IOP( "pnsub", B3SOIPD_MOD_PNSUB, IF_REAL, "Cross-term dependence of nsub"), IOP( "pngate", B3SOIPD_MOD_PNGATE, IF_REAL, "Cross-term dependence of ngate"), IOP( "pvth0", B3SOIPD_MOD_PVTH0, IF_REAL,"Cross-term dependence of vth0"), IOP( "pk1", B3SOIPD_MOD_PK1, IF_REAL, "Cross-term dependence of k1"), IOP( "pk1w1", B3SOIPD_MOD_PK1W1, IF_REAL, "Cross-term dependence of k1w1"), IOP( "pk1w2", B3SOIPD_MOD_PK1W2, IF_REAL, "Cross-term dependence of k1w2"), IOP( "pk2", B3SOIPD_MOD_PK2, IF_REAL, "Cross-term dependence of k2"), IOP( "pk3", B3SOIPD_MOD_PK3, IF_REAL, "Cross-term dependence of k3"), IOP( "pk3b", B3SOIPD_MOD_PK3B, IF_REAL, "Cross-term dependence of k3b"), IOP( "pkb1", B3SOIPD_MOD_PKB1, IF_REAL, "Cross-term dependence of kb1"), IOP( "pw0", B3SOIPD_MOD_PW0, IF_REAL, "Cross-term dependence of w0"), IOP( "pnlx", B3SOIPD_MOD_PNLX, IF_REAL, "Cross-term dependence of nlx"), IOP( "pdvt0", B3SOIPD_MOD_PDVT0, IF_REAL, "Cross-term dependence of dvt0"), IOP( "pdvt1", B3SOIPD_MOD_PDVT1, IF_REAL, "Cross-term dependence of dvt1"), IOP( "pdvt2", B3SOIPD_MOD_PDVT2, IF_REAL, "Cross-term dependence of dvt2"), IOP( "pdvt0w", B3SOIPD_MOD_PDVT0W, IF_REAL, "Cross-term dependence of dvt0w"), IOP( "pdvt1w", B3SOIPD_MOD_PDVT1W, IF_REAL, "Cross-term dependence of dvt1w"), IOP( "pdvt2w", B3SOIPD_MOD_PDVT2W, IF_REAL, "Cross-term dependence of dvt2w"), IOP( "pu0", B3SOIPD_MOD_PU0, IF_REAL, "Cross-term dependence of u0"), IOP( "pua", B3SOIPD_MOD_PUA, IF_REAL, "Cross-term dependence of ua"), IOP( "pub", B3SOIPD_MOD_PUB, IF_REAL, "Cross-term dependence of ub"), IOP( "puc", B3SOIPD_MOD_PUC, IF_REAL, "Cross-term dependence of uc"), IOP( "pvsat", B3SOIPD_MOD_PVSAT, IF_REAL, "Cross-term dependence of vsat"), IOP( "pa0", B3SOIPD_MOD_PA0, IF_REAL, "Cross-term dependence of a0"), IOP( "pags", B3SOIPD_MOD_PAGS, IF_REAL, "Cross-term dependence of ags"), IOP( "pb0", B3SOIPD_MOD_PB0, IF_REAL, "Cross-term dependence of b0"), IOP( "pb1", B3SOIPD_MOD_PB1, IF_REAL, "Cross-term dependence of b1"), IOP( "pketa", B3SOIPD_MOD_PKETA, IF_REAL, "Cross-term dependence of keta"), IOP( "pketas", B3SOIPD_MOD_PKETAS, IF_REAL, "Cross-term dependence of ketas"), IOP( "pa1", B3SOIPD_MOD_PA1, IF_REAL, "Cross-term dependence of a1"), IOP( "pa2", B3SOIPD_MOD_PA2, IF_REAL, "Cross-term dependence of a2"), IOP( "prdsw", B3SOIPD_MOD_PRDSW, IF_REAL, "Cross-term dependence of rdsw "), IOP( "pprwb", B3SOIPD_MOD_PPRWB, IF_REAL, "Cross-term dependence of prwb "), IOP( "pprwg", B3SOIPD_MOD_PPRWG, IF_REAL, "Cross-term dependence of prwg "), IOP( "pwr", B3SOIPD_MOD_PWR, IF_REAL, "Cross-term dependence of wr"), IOP( "pnfactor", B3SOIPD_MOD_PNFACTOR, IF_REAL, "Cross-term dependence of nfactor"), IOP( "pdwg", B3SOIPD_MOD_PDWG, IF_REAL, "Cross-term dependence of dwg"), IOP( "pdwb", B3SOIPD_MOD_PDWB, IF_REAL, "Cross-term dependence of dwb"), IOP( "pvoff", B3SOIPD_MOD_PVOFF, IF_REAL, "Cross-term dependence of voff"), IOP( "peta0", B3SOIPD_MOD_PETA0, IF_REAL, "Cross-term dependence of eta0"), IOP( "petab", B3SOIPD_MOD_PETAB, IF_REAL, "Cross-term dependence of etab"), IOP( "pdsub", B3SOIPD_MOD_PDSUB, IF_REAL, "Cross-term dependence of dsub"), IOP( "pcit", B3SOIPD_MOD_PCIT, IF_REAL, "Cross-term dependence of cit"), IOP( "pcdsc", B3SOIPD_MOD_PCDSC, IF_REAL, "Cross-term dependence of cdsc"), IOP( "pcdscb", B3SOIPD_MOD_PCDSCB, IF_REAL, "Cross-term dependence of cdscb"), IOP( "pcdscd", B3SOIPD_MOD_PCDSCD, IF_REAL, "Cross-term dependence of cdscd"), IOP( "ppclm", B3SOIPD_MOD_PPCLM, IF_REAL, "Cross-term dependence of pclm"), IOP( "ppdiblc1", B3SOIPD_MOD_PPDIBL1, IF_REAL, "Cross-term dependence of pdiblc1"), IOP( "ppdiblc2", B3SOIPD_MOD_PPDIBL2, IF_REAL, "Cross-term dependence of pdiblc2"), IOP( "ppdiblcb", B3SOIPD_MOD_PPDIBLB, IF_REAL, "Cross-term dependence of pdiblcb"), IOP( "pdrout", B3SOIPD_MOD_PDROUT, IF_REAL, "Cross-term dependence of drout"), IOP( "ppvag", B3SOIPD_MOD_PPVAG, IF_REAL, "Cross-term dependence of pvag"), IOP( "pdelta", B3SOIPD_MOD_PDELTA, IF_REAL, "Cross-term dependence of delta"), IOP( "palpha0", B3SOIPD_MOD_PALPHA0, IF_REAL, "Cross-term dependence of alpha0"), IOP( "pfbjtii", B3SOIPD_MOD_PFBJTII, IF_REAL, "Cross-term dependence of fbjtii"), IOP( "pbeta0", B3SOIPD_MOD_PBETA0, IF_REAL, "Cross-term dependence of beta0"), IOP( "pbeta1", B3SOIPD_MOD_PBETA1, IF_REAL, "Cross-term dependence of beta1"), IOP( "pbeta2", B3SOIPD_MOD_PBETA2, IF_REAL, "Cross-term dependence of beta2"), IOP( "pvdsatii0", B3SOIPD_MOD_PVDSATII0, IF_REAL, "Cross-term dependence of vdsatii0"), IOP( "plii", B3SOIPD_MOD_PLII, IF_REAL, "Cross-term dependence of lii"), IOP( "pesatii", B3SOIPD_MOD_PESATII, IF_REAL, "Cross-term dependence of esatii"), IOP( "psii0", B3SOIPD_MOD_PSII0, IF_REAL, "Cross-term dependence of sii0"), IOP( "psii1", B3SOIPD_MOD_PSII1, IF_REAL, "Cross-term dependence of sii1"), IOP( "psii2", B3SOIPD_MOD_PSII2, IF_REAL, "Cross-term dependence of sii2"), IOP( "psiid", B3SOIPD_MOD_PSIID, IF_REAL, "Cross-term dependence of siid"), IOP( "pagidl", B3SOIPD_MOD_PAGIDL, IF_REAL, "Cross-term dependence of agidl"), IOP( "pbgidl", B3SOIPD_MOD_PBGIDL, IF_REAL, "Cross-term dependence of bgidl"), IOP( "pngidl", B3SOIPD_MOD_PNGIDL, IF_REAL, "Cross-term dependence of ngidl"), IOP( "pntun", B3SOIPD_MOD_PNTUN, IF_REAL, "Cross-term dependence of ntun"), IOP( "pndiode", B3SOIPD_MOD_PNDIODE, IF_REAL, "Cross-term dependence of ndiode"), IOP( "pnrecf0", B3SOIPD_MOD_PNRECF0, IF_REAL, "Cross-term dependence of nrecf0"), IOP( "pnrecr0", B3SOIPD_MOD_PNRECR0, IF_REAL, "Cross-term dependence of nrecr0"), IOP( "pisbjt", B3SOIPD_MOD_PISBJT, IF_REAL, "Cross-term dependence of isbjt"), IOP( "pisdif", B3SOIPD_MOD_PISDIF, IF_REAL, "Cross-term dependence of isdif"), IOP( "pisrec", B3SOIPD_MOD_PISREC, IF_REAL, "Cross-term dependence of isrec"), IOP( "pistun", B3SOIPD_MOD_PISTUN, IF_REAL, "Cross-term dependence of istun"), IOP( "pvrec0", B3SOIPD_MOD_PVREC0, IF_REAL, "Cross-term dependence of vrec0"), IOP( "pvtun0", B3SOIPD_MOD_PVTUN0, IF_REAL, "Cross-term dependence of vtun0"), IOP( "pnbjt", B3SOIPD_MOD_PNBJT, IF_REAL, "Cross-term dependence of nbjt"), IOP( "plbjt0", B3SOIPD_MOD_PLBJT0, IF_REAL, "Cross-term dependence of lbjt0"), IOP( "pvabjt", B3SOIPD_MOD_PVABJT, IF_REAL, "Cross-term dependence of vabjt"), IOP( "paely", B3SOIPD_MOD_PAELY, IF_REAL, "Cross-term dependence of aely"), IOP( "pahli", B3SOIPD_MOD_PAHLI, IF_REAL, "Cross-term dependence of ahli"), IOP( "pvsdfb", B3SOIPD_MOD_PVSDFB, IF_REAL, "Cross-term dependence of vsdfb"), IOP( "pvsdth", B3SOIPD_MOD_PVSDTH, IF_REAL, "Cross-term dependence of vsdth"), IOP( "pdelvt", B3SOIPD_MOD_PDELVT, IF_REAL, "Cross-term dependence of delvt"), IOP( "pacde", B3SOIPD_MOD_PACDE, IF_REAL, "Cross-term dependence of acde"), IOP( "pmoin", B3SOIPD_MOD_PMOIN, IF_REAL, "Cross-term dependence of amoin"), /* Added for binning - END */ IP( "nmos", B3SOIPD_MOD_NMOS, IF_FLAG, "Flag to indicate NMOS"), IP( "pmos", B3SOIPD_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"), }; char *B3SOIPDnames[] = { "Drain", "Gate", "Source", "Backgate", "", "Body", "Temp", "Charge", }; int B3SOIPDnSize = NUMELEMS(B3SOIPDnames); int B3SOIPDpTSize = NUMELEMS(B3SOIPDpTable); int B3SOIPDmPTSize = NUMELEMS(B3SOIPDmPTable); int B3SOIPDiSize = sizeof(B3SOIPDinstance); int B3SOIPDmSize = sizeof(B3SOIPDmodel); tmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/ChangeLog0000644000175000017500000000010013546075722023137 0ustar carstencarsten2000-11-14 Paolo Nenzi * Initial release tmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/b3soipdinit.c0000644000175000017500000000312013546075722023765 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "b3soipditf.h" #include "b3soipdinit.h" SPICEdev B3SOIPDinfo = { .DEVpublic = { .name = "B3SOIPD", .description = "Berkeley SOI (PD) MOSFET model version 2.2.3", .terms = &B3SOIPDnSize, .numNames = &B3SOIPDnSize, .termNames = B3SOIPDnames, .numInstanceParms = &B3SOIPDpTSize, .instanceParms = B3SOIPDpTable, .numModelParms = &B3SOIPDmPTSize, .modelParms = B3SOIPDmPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = B3SOIPDparam, .DEVmodParam = B3SOIPDmParam, .DEVload = B3SOIPDload, .DEVsetup = B3SOIPDsetup, .DEVunsetup = B3SOIPDunsetup, .DEVpzSetup = B3SOIPDsetup, .DEVtemperature = B3SOIPDtemp, .DEVtrunc = B3SOIPDtrunc, .DEVfindBranch = NULL, .DEVacLoad = B3SOIPDacLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = B3SOIPDgetic, .DEVask = B3SOIPDask, .DEVmodAsk = B3SOIPDmAsk, .DEVpzLoad = B3SOIPDpzLoad, .DEVconvTest = B3SOIPDconvTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = B3SOIPDnoise, .DEVsoaCheck = NULL, .DEVinstSize = &B3SOIPDiSize, .DEVmodSize = &B3SOIPDmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_b3soipd_info (void) { return &B3SOIPDinfo; } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/b3soipdtemp.c0000644000175000017500000015016513546075722024003 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soipdtemp.c 98/5/01 Modified by Pin Su 99/2/15 Modified by Pin Su 99/4/30 Modified by Pin Su, Wei Jin 99/9/27 Modified by Pin Su 00/3/1 Modified by Pin Su 01/2/15 Modified by Pin Su and Hui Wan 02/3/5 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.2.3 02/3/5 Pin Su * BSIMPD2.2.3 release */ /* Lmin, Lmax, Wmin, Wmax */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "b3soipddef.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define Kb 1.3806226e-23 #define KboQ 8.617087e-5 /* Kb / q where q = 1.60219e-19 */ #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define PI 3.141592654 #define Charge_q 1.60219e-19 #define Eg300 1.115 /* energy gap at 300K */ #define MAX_EXPL 2.688117142e+43 #define MIN_EXPL 3.720075976e-44 #define EXPL_THRESHOLD 100.0 #define DEXP(A,B) { \ if (A > EXPL_THRESHOLD) { \ B = MAX_EXPL*(1.0+(A)-EXPL_THRESHOLD); \ } else if (A < -EXPL_THRESHOLD) { \ B = MIN_EXPL; \ } else { \ B = exp(A); \ } \ } /* ARGSUSED */ int B3SOIPDtemp(GENmodel *inModel, CKTcircuit *ckt) { B3SOIPDmodel *model = (B3SOIPDmodel*) inModel; B3SOIPDinstance *here; struct b3soipdSizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam=NULL; double tmp, tmp1, tmp2, Eg, Eg0, ni, T0, T1, T2, T3, T4, T5, Ldrn, Wdrn; double Temp, TempRatio, Inv_L, Inv_W, Inv_LW, Vtm0, Tnom; double SDphi, SDgamma; int Size_Not_Found; /* v2.0 release */ double tmp3, T7; /* loop through all the B3SOIPD device models */ for (; model != NULL; model = B3SOIPDnextModel(model)) { Temp = ckt->CKTtemp; if (model->B3SOIPDGatesidewallJctPotential < 0.1) model->B3SOIPDGatesidewallJctPotential = 0.1; struct b3soipdSizeDependParam *p = model->pSizeDependParamKnot; while (p) { struct b3soipdSizeDependParam *next_p = p->pNext; FREE(p); p = next_p; } model->pSizeDependParamKnot = NULL; pLastKnot = NULL; Tnom = model->B3SOIPDtnom; TempRatio = Temp / Tnom; model->B3SOIPDvcrit = CONSTvt0 * log(CONSTvt0 / (CONSTroot2 * 1.0e-14)); model->B3SOIPDfactor1 = sqrt(EPSSI / EPSOX * model->B3SOIPDtox); Vtm0 = KboQ * Tnom; Eg0 = 1.16 - 7.02e-4 * Tnom * Tnom / (Tnom + 1108.0); model->B3SOIPDeg0 = Eg0; model->B3SOIPDvtm = KboQ * Temp; Eg = 1.16 - 7.02e-4 * Temp * Temp / (Temp + 1108.0); /* ni is in cm^-3 */ ni = 1.45e10 * (Temp / 300.15) * sqrt(Temp / 300.15) * exp(21.5565981 - Eg / (2.0 * model->B3SOIPDvtm)); /* loop through all the instances of the model */ /* MCJ: Length and Width not initialized */ for (here = B3SOIPDinstances(model); here != NULL; here = B3SOIPDnextInstance(here)) { here->B3SOIPDrbodyext = here->B3SOIPDbodySquares * model->B3SOIPDrbsh; pSizeDependParamKnot = model->pSizeDependParamKnot; Size_Not_Found = 1; while ((pSizeDependParamKnot != NULL) && Size_Not_Found) { if ((here->B3SOIPDl == pSizeDependParamKnot->Length) && (here->B3SOIPDw == pSizeDependParamKnot->Width) && (here->B3SOIPDrth0 == pSizeDependParamKnot->Rth0) && (here->B3SOIPDcth0 == pSizeDependParamKnot->Cth0)) { Size_Not_Found = 0; here->pParam = pSizeDependParamKnot; pParam = here->pParam; /* v2.2.3 bug fix */ } else { pLastKnot = pSizeDependParamKnot; pSizeDependParamKnot = pSizeDependParamKnot->pNext; } } if (Size_Not_Found) { pParam = TMALLOC(struct b3soipdSizeDependParam, 1); if (pLastKnot == NULL) model->pSizeDependParamKnot = pParam; else pLastKnot->pNext = pParam; pParam->pNext = NULL; here->pParam = pParam; Ldrn = here->B3SOIPDl; Wdrn = here->B3SOIPDw; pParam->Length = Ldrn; pParam->Width = Wdrn; pParam->Rth0 = here->B3SOIPDrth0; pParam->Cth0 = here->B3SOIPDcth0; T0 = pow(Ldrn, model->B3SOIPDLln); T1 = pow(Wdrn, model->B3SOIPDLwn); tmp1 = model->B3SOIPDLl / T0 + model->B3SOIPDLw / T1 + model->B3SOIPDLwl / (T0 * T1); pParam->B3SOIPDdl = model->B3SOIPDLint + tmp1; /* v2.2.3 */ tmp1 = model->B3SOIPDLlc / T0 + model->B3SOIPDLwc / T1 + model->B3SOIPDLwlc / (T0 * T1); pParam->B3SOIPDdlc = model->B3SOIPDdlc + tmp1; T2 = pow(Ldrn, model->B3SOIPDWln); T3 = pow(Wdrn, model->B3SOIPDWwn); tmp2 = model->B3SOIPDWl / T2 + model->B3SOIPDWw / T3 + model->B3SOIPDWwl / (T2 * T3); pParam->B3SOIPDdw = model->B3SOIPDWint + tmp2; /* v2.2.3 */ tmp2 = model->B3SOIPDWlc / T2 + model->B3SOIPDWwc / T3 + model->B3SOIPDWwlc / (T2 * T3); pParam->B3SOIPDdwc = model->B3SOIPDdwc + tmp2; pParam->B3SOIPDleff = here->B3SOIPDl - 2.0 * pParam->B3SOIPDdl; if (pParam->B3SOIPDleff <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "B3SOIPD: mosfet %s, model %s: Effective channel length <= 0", model->B3SOIPDmodName, here->B3SOIPDname); return(E_BADPARM); } pParam->B3SOIPDweff = here->B3SOIPDw - here->B3SOIPDnbc * model->B3SOIPDdwbc - (2.0 - here->B3SOIPDnbc) * pParam->B3SOIPDdw; if (pParam->B3SOIPDweff <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "B3SOIPD: mosfet %s, model %s: Effective channel width <= 0", model->B3SOIPDmodName, here->B3SOIPDname); return(E_BADPARM); } pParam->B3SOIPDwdiod = pParam->B3SOIPDweff / here->B3SOIPDnseg + here->B3SOIPDpdbcp; pParam->B3SOIPDwdios = pParam->B3SOIPDweff / here->B3SOIPDnseg + here->B3SOIPDpsbcp; pParam->B3SOIPDleffCV = here->B3SOIPDl - 2.0 * pParam->B3SOIPDdlc; if (pParam->B3SOIPDleffCV <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "B3SOIPD: mosfet %s, model %s: Effective channel length for C-V <= 0", model->B3SOIPDmodName, here->B3SOIPDname); return(E_BADPARM); } pParam->B3SOIPDweffCV = here->B3SOIPDw - here->B3SOIPDnbc * model->B3SOIPDdwbc - (2.0 - here->B3SOIPDnbc) * pParam->B3SOIPDdwc; if (pParam->B3SOIPDweffCV <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "B3SOIPD: mosfet %s, model %s: Effective channel width for C-V <= 0", model->B3SOIPDmodName, here->B3SOIPDname); return(E_BADPARM); } pParam->B3SOIPDwdiodCV = pParam->B3SOIPDweffCV / here->B3SOIPDnseg + here->B3SOIPDpdbcp; pParam->B3SOIPDwdiosCV = pParam->B3SOIPDweffCV / here->B3SOIPDnseg + here->B3SOIPDpsbcp; pParam->B3SOIPDleffCVb = here->B3SOIPDl - 2.0 * pParam->B3SOIPDdlc - model->B3SOIPDdlcb; if (pParam->B3SOIPDleffCVb <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "B3SOIPD: mosfet %s, model %s: Effective channel length for C-V (body) <= 0", model->B3SOIPDmodName, here->B3SOIPDname); return(E_BADPARM); } pParam->B3SOIPDleffCVbg = pParam->B3SOIPDleffCVb + 2 * model->B3SOIPDdlbg; if (pParam->B3SOIPDleffCVbg <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "B3SOIPD: mosfet %s, model %s: Effective channel length for C-V (backgate) <= 0", model->B3SOIPDmodName, here->B3SOIPDname); return(E_BADPARM); } /* Not binned - START */ pParam->B3SOIPDat = model->B3SOIPDat; pParam->B3SOIPDgamma1 = model->B3SOIPDgamma1; pParam->B3SOIPDgamma2 = model->B3SOIPDgamma2; pParam->B3SOIPDvbx = model->B3SOIPDvbx; pParam->B3SOIPDvbm = model->B3SOIPDvbm; pParam->B3SOIPDxt = model->B3SOIPDxt; pParam->B3SOIPDkt1 = model->B3SOIPDkt1; pParam->B3SOIPDkt1l = model->B3SOIPDkt1l; pParam->B3SOIPDkt2 = model->B3SOIPDkt2; pParam->B3SOIPDua1 = model->B3SOIPDua1; pParam->B3SOIPDub1 = model->B3SOIPDub1; pParam->B3SOIPDuc1 = model->B3SOIPDuc1; pParam->B3SOIPDute = model->B3SOIPDute; pParam->B3SOIPDprt = model->B3SOIPDprt; /* Not binned - END */ /* CV model */ pParam->B3SOIPDcgsl = model->B3SOIPDcgsl; pParam->B3SOIPDcgdl = model->B3SOIPDcgdl; pParam->B3SOIPDckappa = model->B3SOIPDckappa; pParam->B3SOIPDcf = model->B3SOIPDcf; pParam->B3SOIPDclc = model->B3SOIPDclc; pParam->B3SOIPDcle = model->B3SOIPDcle; pParam->B3SOIPDabulkCVfactor = 1.0 + pow((pParam->B3SOIPDclc / pParam->B3SOIPDleff), pParam->B3SOIPDcle); /* Added for binning - START */ if (model->B3SOIPDbinUnit == 1) { Inv_L = 1.0e-6 / pParam->B3SOIPDleff; Inv_W = 1.0e-6 / pParam->B3SOIPDweff; Inv_LW = 1.0e-12 / (pParam->B3SOIPDleff * pParam->B3SOIPDweff); } else { Inv_L = 1.0 / pParam->B3SOIPDleff; Inv_W = 1.0 / pParam->B3SOIPDweff; Inv_LW = 1.0 / (pParam->B3SOIPDleff * pParam->B3SOIPDweff); } pParam->B3SOIPDnpeak = model->B3SOIPDnpeak + model->B3SOIPDlnpeak * Inv_L + model->B3SOIPDwnpeak * Inv_W + model->B3SOIPDpnpeak * Inv_LW; pParam->B3SOIPDnsub = model->B3SOIPDnsub + model->B3SOIPDlnsub * Inv_L + model->B3SOIPDwnsub * Inv_W + model->B3SOIPDpnsub * Inv_LW; pParam->B3SOIPDngate = model->B3SOIPDngate + model->B3SOIPDlngate * Inv_L + model->B3SOIPDwngate * Inv_W + model->B3SOIPDpngate * Inv_LW; pParam->B3SOIPDvth0 = model->B3SOIPDvth0 + model->B3SOIPDlvth0 * Inv_L + model->B3SOIPDwvth0 * Inv_W + model->B3SOIPDpvth0 * Inv_LW; pParam->B3SOIPDk1 = model->B3SOIPDk1 + model->B3SOIPDlk1 * Inv_L + model->B3SOIPDwk1 * Inv_W + model->B3SOIPDpk1 * Inv_LW; pParam->B3SOIPDk2 = model->B3SOIPDk2 + model->B3SOIPDlk2 * Inv_L + model->B3SOIPDwk2 * Inv_W + model->B3SOIPDpk2 * Inv_LW; pParam->B3SOIPDk1w1 = model->B3SOIPDk1w1 + model->B3SOIPDlk1w1 * Inv_L + model->B3SOIPDwk1w1 * Inv_W + model->B3SOIPDpk1w1 * Inv_LW; pParam->B3SOIPDk1w2 = model->B3SOIPDk1w2 + model->B3SOIPDlk1w2 * Inv_L + model->B3SOIPDwk1w2 * Inv_W + model->B3SOIPDpk1w2 * Inv_LW; pParam->B3SOIPDk3 = model->B3SOIPDk3 + model->B3SOIPDlk3 * Inv_L + model->B3SOIPDwk3 * Inv_W + model->B3SOIPDpk3 * Inv_LW; pParam->B3SOIPDk3b = model->B3SOIPDk3b + model->B3SOIPDlk3b * Inv_L + model->B3SOIPDwk3b * Inv_W + model->B3SOIPDpk3b * Inv_LW; pParam->B3SOIPDkb1 = model->B3SOIPDkb1 + model->B3SOIPDlkb1 * Inv_L + model->B3SOIPDwkb1 * Inv_W + model->B3SOIPDpkb1 * Inv_LW; pParam->B3SOIPDw0 = model->B3SOIPDw0 + model->B3SOIPDlw0 * Inv_L + model->B3SOIPDww0 * Inv_W + model->B3SOIPDpw0 * Inv_LW; pParam->B3SOIPDnlx = model->B3SOIPDnlx + model->B3SOIPDlnlx * Inv_L + model->B3SOIPDwnlx * Inv_W + model->B3SOIPDpnlx * Inv_LW; pParam->B3SOIPDdvt0 = model->B3SOIPDdvt0 + model->B3SOIPDldvt0 * Inv_L + model->B3SOIPDwdvt0 * Inv_W + model->B3SOIPDpdvt0 * Inv_LW; pParam->B3SOIPDdvt1 = model->B3SOIPDdvt1 + model->B3SOIPDldvt1 * Inv_L + model->B3SOIPDwdvt1 * Inv_W + model->B3SOIPDpdvt1 * Inv_LW; pParam->B3SOIPDdvt2 = model->B3SOIPDdvt2 + model->B3SOIPDldvt2 * Inv_L + model->B3SOIPDwdvt2 * Inv_W + model->B3SOIPDpdvt2 * Inv_LW; pParam->B3SOIPDdvt0w = model->B3SOIPDdvt0w + model->B3SOIPDldvt0w * Inv_L + model->B3SOIPDwdvt0w * Inv_W + model->B3SOIPDpdvt0w * Inv_LW; pParam->B3SOIPDdvt1w = model->B3SOIPDdvt1w + model->B3SOIPDldvt1w * Inv_L + model->B3SOIPDwdvt1w * Inv_W + model->B3SOIPDpdvt1w * Inv_LW; pParam->B3SOIPDdvt2w = model->B3SOIPDdvt2w + model->B3SOIPDldvt2w * Inv_L + model->B3SOIPDwdvt2w * Inv_W + model->B3SOIPDpdvt2w * Inv_LW; pParam->B3SOIPDu0 = model->B3SOIPDu0 + model->B3SOIPDlu0 * Inv_L + model->B3SOIPDwu0 * Inv_W + model->B3SOIPDpu0 * Inv_LW; pParam->B3SOIPDua = model->B3SOIPDua + model->B3SOIPDlua * Inv_L + model->B3SOIPDwua * Inv_W + model->B3SOIPDpua * Inv_LW; pParam->B3SOIPDub = model->B3SOIPDub + model->B3SOIPDlub * Inv_L + model->B3SOIPDwub * Inv_W + model->B3SOIPDpub * Inv_LW; pParam->B3SOIPDuc = model->B3SOIPDuc + model->B3SOIPDluc * Inv_L + model->B3SOIPDwuc * Inv_W + model->B3SOIPDpuc * Inv_LW; pParam->B3SOIPDvsat = model->B3SOIPDvsat + model->B3SOIPDlvsat * Inv_L + model->B3SOIPDwvsat * Inv_W + model->B3SOIPDpvsat * Inv_LW; pParam->B3SOIPDa0 = model->B3SOIPDa0 + model->B3SOIPDla0 * Inv_L + model->B3SOIPDwa0 * Inv_W + model->B3SOIPDpa0 * Inv_LW; pParam->B3SOIPDags = model->B3SOIPDags + model->B3SOIPDlags * Inv_L + model->B3SOIPDwags * Inv_W + model->B3SOIPDpags * Inv_LW; pParam->B3SOIPDb0 = model->B3SOIPDb0 + model->B3SOIPDlb0 * Inv_L + model->B3SOIPDwb0 * Inv_W + model->B3SOIPDpb0 * Inv_LW; pParam->B3SOIPDb1 = model->B3SOIPDb1 + model->B3SOIPDlb1 * Inv_L + model->B3SOIPDwb1 * Inv_W + model->B3SOIPDpb1 * Inv_LW; pParam->B3SOIPDketa = model->B3SOIPDketa + model->B3SOIPDlketa * Inv_L + model->B3SOIPDwketa * Inv_W + model->B3SOIPDpketa * Inv_LW; pParam->B3SOIPDketas = model->B3SOIPDketas + model->B3SOIPDlketas * Inv_L + model->B3SOIPDwketas * Inv_W + model->B3SOIPDpketas * Inv_LW; pParam->B3SOIPDa1 = model->B3SOIPDa1 + model->B3SOIPDla1 * Inv_L + model->B3SOIPDwa1 * Inv_W + model->B3SOIPDpa1 * Inv_LW; pParam->B3SOIPDa2 = model->B3SOIPDa2 + model->B3SOIPDla2 * Inv_L + model->B3SOIPDwa2 * Inv_W + model->B3SOIPDpa2 * Inv_LW; pParam->B3SOIPDrdsw = model->B3SOIPDrdsw + model->B3SOIPDlrdsw * Inv_L + model->B3SOIPDwrdsw * Inv_W + model->B3SOIPDprdsw * Inv_LW; pParam->B3SOIPDprwb = model->B3SOIPDprwb + model->B3SOIPDlprwb * Inv_L + model->B3SOIPDwprwb * Inv_W + model->B3SOIPDpprwb * Inv_LW; pParam->B3SOIPDprwg = model->B3SOIPDprwg + model->B3SOIPDlprwg * Inv_L + model->B3SOIPDwprwg * Inv_W + model->B3SOIPDpprwg * Inv_LW; pParam->B3SOIPDwr = model->B3SOIPDwr + model->B3SOIPDlwr * Inv_L + model->B3SOIPDwwr * Inv_W + model->B3SOIPDpwr * Inv_LW; pParam->B3SOIPDnfactor = model->B3SOIPDnfactor + model->B3SOIPDlnfactor * Inv_L + model->B3SOIPDwnfactor * Inv_W + model->B3SOIPDpnfactor * Inv_LW; pParam->B3SOIPDdwg = model->B3SOIPDdwg + model->B3SOIPDldwg * Inv_L + model->B3SOIPDwdwg * Inv_W + model->B3SOIPDpdwg * Inv_LW; pParam->B3SOIPDdwb = model->B3SOIPDdwb + model->B3SOIPDldwb * Inv_L + model->B3SOIPDwdwb * Inv_W + model->B3SOIPDpdwb * Inv_LW; pParam->B3SOIPDvoff = model->B3SOIPDvoff + model->B3SOIPDlvoff * Inv_L + model->B3SOIPDwvoff * Inv_W + model->B3SOIPDpvoff * Inv_LW; pParam->B3SOIPDeta0 = model->B3SOIPDeta0 + model->B3SOIPDleta0 * Inv_L + model->B3SOIPDweta0 * Inv_W + model->B3SOIPDpeta0 * Inv_LW; pParam->B3SOIPDetab = model->B3SOIPDetab + model->B3SOIPDletab * Inv_L + model->B3SOIPDwetab * Inv_W + model->B3SOIPDpetab * Inv_LW; pParam->B3SOIPDdsub = model->B3SOIPDdsub + model->B3SOIPDldsub * Inv_L + model->B3SOIPDwdsub * Inv_W + model->B3SOIPDpdsub * Inv_LW; pParam->B3SOIPDcit = model->B3SOIPDcit + model->B3SOIPDlcit * Inv_L + model->B3SOIPDwcit * Inv_W + model->B3SOIPDpcit * Inv_LW; pParam->B3SOIPDcdsc = model->B3SOIPDcdsc + model->B3SOIPDlcdsc * Inv_L + model->B3SOIPDwcdsc * Inv_W + model->B3SOIPDpcdsc * Inv_LW; pParam->B3SOIPDcdscb = model->B3SOIPDcdscb + model->B3SOIPDlcdscb * Inv_L + model->B3SOIPDwcdscb * Inv_W + model->B3SOIPDpcdscb * Inv_LW; pParam->B3SOIPDcdscd = model->B3SOIPDcdscd + model->B3SOIPDlcdscd * Inv_L + model->B3SOIPDwcdscd * Inv_W + model->B3SOIPDpcdscd * Inv_LW; pParam->B3SOIPDpclm = model->B3SOIPDpclm + model->B3SOIPDlpclm * Inv_L + model->B3SOIPDwpclm * Inv_W + model->B3SOIPDppclm * Inv_LW; pParam->B3SOIPDpdibl1 = model->B3SOIPDpdibl1 + model->B3SOIPDlpdibl1 * Inv_L + model->B3SOIPDwpdibl1 * Inv_W + model->B3SOIPDppdibl1 * Inv_LW; pParam->B3SOIPDpdibl2 = model->B3SOIPDpdibl2 + model->B3SOIPDlpdibl2 * Inv_L + model->B3SOIPDwpdibl2 * Inv_W + model->B3SOIPDppdibl2 * Inv_LW; pParam->B3SOIPDpdiblb = model->B3SOIPDpdiblb + model->B3SOIPDlpdiblb * Inv_L + model->B3SOIPDwpdiblb * Inv_W + model->B3SOIPDppdiblb * Inv_LW; pParam->B3SOIPDdrout = model->B3SOIPDdrout + model->B3SOIPDldrout * Inv_L + model->B3SOIPDwdrout * Inv_W + model->B3SOIPDpdrout * Inv_LW; pParam->B3SOIPDpvag = model->B3SOIPDpvag + model->B3SOIPDlpvag * Inv_L + model->B3SOIPDwpvag * Inv_W + model->B3SOIPDppvag * Inv_LW; pParam->B3SOIPDdelta = model->B3SOIPDdelta + model->B3SOIPDldelta * Inv_L + model->B3SOIPDwdelta * Inv_W + model->B3SOIPDpdelta * Inv_LW; pParam->B3SOIPDalpha0 = model->B3SOIPDalpha0 + model->B3SOIPDlalpha0 * Inv_L + model->B3SOIPDwalpha0 * Inv_W + model->B3SOIPDpalpha0 * Inv_LW; pParam->B3SOIPDfbjtii = model->B3SOIPDfbjtii + model->B3SOIPDlfbjtii * Inv_L + model->B3SOIPDwfbjtii * Inv_W + model->B3SOIPDpfbjtii * Inv_LW; pParam->B3SOIPDbeta0 = model->B3SOIPDbeta0 + model->B3SOIPDlbeta0 * Inv_L + model->B3SOIPDwbeta0 * Inv_W + model->B3SOIPDpbeta0 * Inv_LW; pParam->B3SOIPDbeta1 = model->B3SOIPDbeta1 + model->B3SOIPDlbeta1 * Inv_L + model->B3SOIPDwbeta1 * Inv_W + model->B3SOIPDpbeta1 * Inv_LW; pParam->B3SOIPDbeta2 = model->B3SOIPDbeta2 + model->B3SOIPDlbeta2 * Inv_L + model->B3SOIPDwbeta2 * Inv_W + model->B3SOIPDpbeta2 * Inv_LW; pParam->B3SOIPDvdsatii0 = model->B3SOIPDvdsatii0 + model->B3SOIPDlvdsatii0 * Inv_L + model->B3SOIPDwvdsatii0 * Inv_W + model->B3SOIPDpvdsatii0 * Inv_LW; pParam->B3SOIPDlii = model->B3SOIPDlii + model->B3SOIPDllii * Inv_L + model->B3SOIPDwlii * Inv_W + model->B3SOIPDplii * Inv_LW; pParam->B3SOIPDesatii = model->B3SOIPDesatii + model->B3SOIPDlesatii * Inv_L + model->B3SOIPDwesatii * Inv_W + model->B3SOIPDpesatii * Inv_LW; pParam->B3SOIPDsii0 = model->B3SOIPDsii0 + model->B3SOIPDlsii0 * Inv_L + model->B3SOIPDwsii0 * Inv_W + model->B3SOIPDpsii0 * Inv_LW; pParam->B3SOIPDsii1 = model->B3SOIPDsii1 + model->B3SOIPDlsii1 * Inv_L + model->B3SOIPDwsii1 * Inv_W + model->B3SOIPDpsii1 * Inv_LW; pParam->B3SOIPDsii2 = model->B3SOIPDsii2 + model->B3SOIPDlsii2 * Inv_L + model->B3SOIPDwsii2 * Inv_W + model->B3SOIPDpsii2 * Inv_LW; pParam->B3SOIPDsiid = model->B3SOIPDsiid + model->B3SOIPDlsiid * Inv_L + model->B3SOIPDwsiid * Inv_W + model->B3SOIPDpsiid * Inv_LW; pParam->B3SOIPDagidl = model->B3SOIPDagidl + model->B3SOIPDlagidl * Inv_L + model->B3SOIPDwagidl * Inv_W + model->B3SOIPDpagidl * Inv_LW; pParam->B3SOIPDbgidl = model->B3SOIPDbgidl + model->B3SOIPDlbgidl * Inv_L + model->B3SOIPDwbgidl * Inv_W + model->B3SOIPDpbgidl * Inv_LW; pParam->B3SOIPDngidl = model->B3SOIPDngidl + model->B3SOIPDlngidl * Inv_L + model->B3SOIPDwngidl * Inv_W + model->B3SOIPDpngidl * Inv_LW; pParam->B3SOIPDntun = model->B3SOIPDntun + model->B3SOIPDlntun * Inv_L + model->B3SOIPDwntun * Inv_W + model->B3SOIPDpntun * Inv_LW; pParam->B3SOIPDndiode = model->B3SOIPDndiode + model->B3SOIPDlndiode * Inv_L + model->B3SOIPDwndiode * Inv_W + model->B3SOIPDpndiode * Inv_LW; pParam->B3SOIPDnrecf0 = model->B3SOIPDnrecf0 + model->B3SOIPDlnrecf0 * Inv_L + model->B3SOIPDwnrecf0 * Inv_W + model->B3SOIPDpnrecf0 * Inv_LW; pParam->B3SOIPDnrecr0 = model->B3SOIPDnrecr0 + model->B3SOIPDlnrecr0 * Inv_L + model->B3SOIPDwnrecr0 * Inv_W + model->B3SOIPDpnrecr0 * Inv_LW; pParam->B3SOIPDisbjt = model->B3SOIPDisbjt + model->B3SOIPDlisbjt * Inv_L + model->B3SOIPDwisbjt * Inv_W + model->B3SOIPDpisbjt * Inv_LW; pParam->B3SOIPDisdif = model->B3SOIPDisdif + model->B3SOIPDlisdif * Inv_L + model->B3SOIPDwisdif * Inv_W + model->B3SOIPDpisdif * Inv_LW; pParam->B3SOIPDisrec = model->B3SOIPDisrec + model->B3SOIPDlisrec * Inv_L + model->B3SOIPDwisrec * Inv_W + model->B3SOIPDpisrec * Inv_LW; pParam->B3SOIPDistun = model->B3SOIPDistun + model->B3SOIPDlistun * Inv_L + model->B3SOIPDwistun * Inv_W + model->B3SOIPDpistun * Inv_LW; pParam->B3SOIPDvrec0 = model->B3SOIPDvrec0 + model->B3SOIPDlvrec0 * Inv_L + model->B3SOIPDwvrec0 * Inv_W + model->B3SOIPDpvrec0 * Inv_LW; pParam->B3SOIPDvtun0 = model->B3SOIPDvtun0 + model->B3SOIPDlvtun0 * Inv_L + model->B3SOIPDwvtun0 * Inv_W + model->B3SOIPDpvtun0 * Inv_LW; pParam->B3SOIPDnbjt = model->B3SOIPDnbjt + model->B3SOIPDlnbjt * Inv_L + model->B3SOIPDwnbjt * Inv_W + model->B3SOIPDpnbjt * Inv_LW; pParam->B3SOIPDlbjt0 = model->B3SOIPDlbjt0 + model->B3SOIPDllbjt0 * Inv_L + model->B3SOIPDwlbjt0 * Inv_W + model->B3SOIPDplbjt0 * Inv_LW; pParam->B3SOIPDvabjt = model->B3SOIPDvabjt + model->B3SOIPDlvabjt * Inv_L + model->B3SOIPDwvabjt * Inv_W + model->B3SOIPDpvabjt * Inv_LW; pParam->B3SOIPDaely = model->B3SOIPDaely + model->B3SOIPDlaely * Inv_L + model->B3SOIPDwaely * Inv_W + model->B3SOIPDpaely * Inv_LW; pParam->B3SOIPDahli = model->B3SOIPDahli + model->B3SOIPDlahli * Inv_L + model->B3SOIPDwahli * Inv_W + model->B3SOIPDpahli * Inv_LW; /* CV model */ pParam->B3SOIPDvsdfb = model->B3SOIPDvsdfb + model->B3SOIPDlvsdfb * Inv_L + model->B3SOIPDwvsdfb * Inv_W + model->B3SOIPDpvsdfb * Inv_LW; pParam->B3SOIPDvsdth = model->B3SOIPDvsdth + model->B3SOIPDlvsdth * Inv_L + model->B3SOIPDwvsdth * Inv_W + model->B3SOIPDpvsdth * Inv_LW; pParam->B3SOIPDdelvt = model->B3SOIPDdelvt + model->B3SOIPDldelvt * Inv_L + model->B3SOIPDwdelvt * Inv_W + model->B3SOIPDpdelvt * Inv_LW; pParam->B3SOIPDacde = model->B3SOIPDacde + model->B3SOIPDlacde * Inv_L + model->B3SOIPDwacde * Inv_W + model->B3SOIPDpacde * Inv_LW; pParam->B3SOIPDmoin = model->B3SOIPDmoin + model->B3SOIPDlmoin * Inv_L + model->B3SOIPDwmoin * Inv_W + model->B3SOIPDpmoin * Inv_LW; /* Added for binning - END */ T0 = (TempRatio - 1.0); pParam->B3SOIPDuatemp = pParam->B3SOIPDua; /* save ua, ub, and uc for b3soipdld.c */ pParam->B3SOIPDubtemp = pParam->B3SOIPDub; pParam->B3SOIPDuctemp = pParam->B3SOIPDuc; pParam->B3SOIPDrds0denom = pow(pParam->B3SOIPDweff * 1E6, pParam->B3SOIPDwr); /* v2.2 release */ pParam->B3SOIPDrth = here->B3SOIPDrth0 / (pParam->B3SOIPDweff + model->B3SOIPDwth0) * here->B3SOIPDnseg; pParam->B3SOIPDcth = here->B3SOIPDcth0 * (pParam->B3SOIPDweff + model->B3SOIPDwth0) / here->B3SOIPDnseg; /* v2.2.2 adding layout-dependent Frbody multiplier */ pParam->B3SOIPDrbody = here->B3SOIPDfrbody *model->B3SOIPDrbody * model->B3SOIPDrhalo / (2 * model->B3SOIPDrbody + model->B3SOIPDrhalo * pParam->B3SOIPDleff) * pParam->B3SOIPDweff / here->B3SOIPDnseg; pParam->B3SOIPDoxideRatio = pow(model->B3SOIPDtoxref/model->B3SOIPDtoxqm, model->B3SOIPDntox) /model->B3SOIPDtoxqm/model->B3SOIPDtoxqm; /* v2.2 release */ pParam->B3SOIPDua = pParam->B3SOIPDua + pParam->B3SOIPDua1 * T0; pParam->B3SOIPDub = pParam->B3SOIPDub + pParam->B3SOIPDub1 * T0; pParam->B3SOIPDuc = pParam->B3SOIPDuc + pParam->B3SOIPDuc1 * T0; if (pParam->B3SOIPDu0 > 1.0) pParam->B3SOIPDu0 = pParam->B3SOIPDu0 / 1.0e4; pParam->B3SOIPDu0temp = pParam->B3SOIPDu0 * pow(TempRatio, pParam->B3SOIPDute); pParam->B3SOIPDvsattemp = pParam->B3SOIPDvsat - pParam->B3SOIPDat * T0; pParam->B3SOIPDrds0 = (pParam->B3SOIPDrdsw + pParam->B3SOIPDprt * T0) / pow(pParam->B3SOIPDweff * 1E6, pParam->B3SOIPDwr); if (B3SOIPDcheckModel(model, here, ckt)) { SPfrontEnd->IFerrorf (ERR_FATAL, "Fatal error(s) detected during B3SOIPDV3 parameter checking for %s in model %s", model->B3SOIPDmodName, here->B3SOIPDname); return(E_BADPARM); } pParam->B3SOIPDcgdo = (model->B3SOIPDcgdo + pParam->B3SOIPDcf) * pParam->B3SOIPDwdiodCV; pParam->B3SOIPDcgso = (model->B3SOIPDcgso + pParam->B3SOIPDcf) * pParam->B3SOIPDwdiosCV; pParam->B3SOIPDcgeo = model->B3SOIPDcgeo * pParam->B3SOIPDleffCV; if (!model->B3SOIPDnpeakGiven && model->B3SOIPDgamma1Given) { T0 = pParam->B3SOIPDgamma1 * model->B3SOIPDcox; pParam->B3SOIPDnpeak = 3.021E22 * T0 * T0; } T4 = Eg300 / model->B3SOIPDvtm * (TempRatio - 1.0); T7 = model->B3SOIPDxbjt * T4 / pParam->B3SOIPDndiode; DEXP(T7, T0); T7 = model->B3SOIPDxdif * T4 / pParam->B3SOIPDndiode; DEXP(T7, T1); T7 = model->B3SOIPDxrec * T4 / pParam->B3SOIPDnrecf0; DEXP(T7, T2); /* v2.2.2 bug fix */ pParam->B3SOIPDahli0 = pParam->B3SOIPDahli * T0; pParam->B3SOIPDjbjt = pParam->B3SOIPDisbjt * T0; pParam->B3SOIPDjdif = pParam->B3SOIPDisdif * T1; pParam->B3SOIPDjrec = pParam->B3SOIPDisrec * T2; T7 = model->B3SOIPDxtun * (TempRatio - 1); DEXP(T7, T0); pParam->B3SOIPDjtun = pParam->B3SOIPDistun * T0; if (pParam->B3SOIPDnsub > 0) pParam->B3SOIPDvfbb = -model->B3SOIPDtype * model->B3SOIPDvtm * log(pParam->B3SOIPDnpeak/ pParam->B3SOIPDnsub); else pParam->B3SOIPDvfbb = -model->B3SOIPDtype * model->B3SOIPDvtm * log(-pParam->B3SOIPDnpeak* pParam->B3SOIPDnsub/ni/ni); if (!model->B3SOIPDvsdfbGiven) { if (pParam->B3SOIPDnsub > 0) pParam->B3SOIPDvsdfb = -model->B3SOIPDtype * (model->B3SOIPDvtm*log(1e20 * pParam->B3SOIPDnsub / ni /ni) - 0.3); else if (pParam->B3SOIPDnsub < 0) pParam->B3SOIPDvsdfb = -model->B3SOIPDtype * (model->B3SOIPDvtm*log(-1e20 / pParam->B3SOIPDnsub) + 0.3); } /* Phi & Gamma */ SDphi = 2.0*model->B3SOIPDvtm*log(fabs(pParam->B3SOIPDnsub) / ni); SDgamma = 5.753e-12 * sqrt(fabs(pParam->B3SOIPDnsub)) / model->B3SOIPDcbox; if (!model->B3SOIPDvsdthGiven) { if ( ((pParam->B3SOIPDnsub > 0) && (model->B3SOIPDtype > 0)) || ((pParam->B3SOIPDnsub < 0) && (model->B3SOIPDtype < 0)) ) pParam->B3SOIPDvsdth = pParam->B3SOIPDvsdfb + SDphi + SDgamma * sqrt(SDphi); else pParam->B3SOIPDvsdth = pParam->B3SOIPDvsdfb - SDphi - SDgamma * sqrt(SDphi); } if (!model->B3SOIPDcsdminGiven) { /* Cdmin */ tmp = sqrt(2.0 * EPSSI * SDphi / (Charge_q * fabs(pParam->B3SOIPDnsub) * 1.0e6)); tmp1 = EPSSI / tmp; model->B3SOIPDcsdmin = tmp1 * model->B3SOIPDcbox / (tmp1 + model->B3SOIPDcbox); } pParam->B3SOIPDphi = 2.0 * model->B3SOIPDvtm * log(pParam->B3SOIPDnpeak / ni); pParam->B3SOIPDsqrtPhi = sqrt(pParam->B3SOIPDphi); pParam->B3SOIPDphis3 = pParam->B3SOIPDsqrtPhi * pParam->B3SOIPDphi; pParam->B3SOIPDXdep0 = sqrt(2.0 * EPSSI / (Charge_q * pParam->B3SOIPDnpeak * 1.0e6)) * pParam->B3SOIPDsqrtPhi; pParam->B3SOIPDsqrtXdep0 = sqrt(pParam->B3SOIPDXdep0); pParam->B3SOIPDlitl = sqrt(3.0 * model->B3SOIPDxj * model->B3SOIPDtox); pParam->B3SOIPDvbi = model->B3SOIPDvtm * log(1.0e20 * pParam->B3SOIPDnpeak / (ni * ni)); pParam->B3SOIPDcdep0 = sqrt(Charge_q * EPSSI * pParam->B3SOIPDnpeak * 1.0e6 / 2.0 / pParam->B3SOIPDphi); if (model->B3SOIPDk1Given || model->B3SOIPDk2Given) { if (!model->B3SOIPDk1Given) { fprintf(stdout, "Warning: k1 should be specified with k2.\n"); pParam->B3SOIPDk1 = 0.53; } if (!model->B3SOIPDk2Given) { fprintf(stdout, "Warning: k2 should be specified with k1.\n"); pParam->B3SOIPDk2 = -0.0186; } if (model->B3SOIPDxtGiven) fprintf(stdout, "Warning: xt is ignored because k1 or k2 is given.\n"); if (model->B3SOIPDvbxGiven) fprintf(stdout, "Warning: vbx is ignored because k1 or k2 is given.\n"); if (model->B3SOIPDvbmGiven) fprintf(stdout, "Warning: vbm is ignored because k1 or k2 is given.\n"); if (model->B3SOIPDgamma1Given) fprintf(stdout, "Warning: gamma1 is ignored because k1 or k2 is given.\n"); if (model->B3SOIPDgamma2Given) fprintf(stdout, "Warning: gamma2 is ignored because k1 or k2 is given.\n"); } else { if (!model->B3SOIPDvbxGiven) pParam->B3SOIPDvbx = pParam->B3SOIPDphi - 7.7348e-4 * pParam->B3SOIPDnpeak * pParam->B3SOIPDxt * pParam->B3SOIPDxt; if (pParam->B3SOIPDvbx > 0.0) pParam->B3SOIPDvbx = -pParam->B3SOIPDvbx; if (pParam->B3SOIPDvbm > 0.0) pParam->B3SOIPDvbm = -pParam->B3SOIPDvbm; if (!model->B3SOIPDgamma1Given) pParam->B3SOIPDgamma1 = 5.753e-12 * sqrt(pParam->B3SOIPDnpeak) / model->B3SOIPDcox; if (!model->B3SOIPDgamma2Given) pParam->B3SOIPDgamma2 = 5.753e-12 * sqrt(pParam->B3SOIPDnsub) / model->B3SOIPDcox; T0 = pParam->B3SOIPDgamma1 - pParam->B3SOIPDgamma2; T1 = sqrt(pParam->B3SOIPDphi - pParam->B3SOIPDvbx) - pParam->B3SOIPDsqrtPhi; T2 = sqrt(pParam->B3SOIPDphi * (pParam->B3SOIPDphi - pParam->B3SOIPDvbm)) - pParam->B3SOIPDphi; pParam->B3SOIPDk2 = T0 * T1 / (2.0 * T2 + pParam->B3SOIPDvbm); pParam->B3SOIPDk1 = pParam->B3SOIPDgamma2 - 2.0 * pParam->B3SOIPDk2 * sqrt(pParam->B3SOIPDphi - pParam->B3SOIPDvbm); } if (pParam->B3SOIPDk2 < 0.0) { T0 = 0.5 * pParam->B3SOIPDk1 / pParam->B3SOIPDk2; pParam->B3SOIPDvbsc = 0.9 * (pParam->B3SOIPDphi - T0 * T0); if (pParam->B3SOIPDvbsc > -3.0) pParam->B3SOIPDvbsc = -3.0; else if (pParam->B3SOIPDvbsc < -30.0) pParam->B3SOIPDvbsc = -30.0; } else { pParam->B3SOIPDvbsc = -30.0; } if (pParam->B3SOIPDvbsc > pParam->B3SOIPDvbm) pParam->B3SOIPDvbsc = pParam->B3SOIPDvbm; if ((T0 = pParam->B3SOIPDweff + pParam->B3SOIPDk1w2) < 1e-8) T0 = 1e-8; pParam->B3SOIPDk1eff = pParam->B3SOIPDk1 * (1 + pParam->B3SOIPDk1w1/T0); if (model->B3SOIPDvth0Given) { pParam->B3SOIPDvfb = model->B3SOIPDtype * pParam->B3SOIPDvth0 - pParam->B3SOIPDphi - pParam->B3SOIPDk1eff * pParam->B3SOIPDsqrtPhi; } else { pParam->B3SOIPDvfb = -1.0; pParam->B3SOIPDvth0 = model->B3SOIPDtype * (pParam->B3SOIPDvfb + pParam->B3SOIPDphi + pParam->B3SOIPDk1eff * pParam->B3SOIPDsqrtPhi); } T1 = sqrt(EPSSI / EPSOX * model->B3SOIPDtox * pParam->B3SOIPDXdep0); T0 = exp(-0.5 * pParam->B3SOIPDdsub * pParam->B3SOIPDleff / T1); pParam->B3SOIPDtheta0vb0 = (T0 + 2.0 * T0 * T0); T0 = exp(-0.5 * pParam->B3SOIPDdrout * pParam->B3SOIPDleff / T1); T2 = (T0 + 2.0 * T0 * T0); pParam->B3SOIPDthetaRout = pParam->B3SOIPDpdibl1 * T2 + pParam->B3SOIPDpdibl2; } here->B3SOIPDcsbox = model->B3SOIPDcbox*here->B3SOIPDsourceArea; here->B3SOIPDcsmin = model->B3SOIPDcsdmin*here->B3SOIPDsourceArea; here->B3SOIPDcdbox = model->B3SOIPDcbox*here->B3SOIPDdrainArea; here->B3SOIPDcdmin = model->B3SOIPDcsdmin*here->B3SOIPDdrainArea; if ( ((pParam->B3SOIPDnsub > 0) && (model->B3SOIPDtype > 0)) || ((pParam->B3SOIPDnsub < 0) && (model->B3SOIPDtype < 0)) ) { T0 = pParam->B3SOIPDvsdth - pParam->B3SOIPDvsdfb; pParam->B3SOIPDsdt1 = pParam->B3SOIPDvsdfb + model->B3SOIPDasd * T0; T1 = here->B3SOIPDcsbox - here->B3SOIPDcsmin; T2 = T1 / T0 / T0; pParam->B3SOIPDst2 = T2 / model->B3SOIPDasd; pParam->B3SOIPDst3 = T2 /( 1 - model->B3SOIPDasd); here->B3SOIPDst4 = T0 * T1 * (1 + model->B3SOIPDasd) / 3 - here->B3SOIPDcsmin * pParam->B3SOIPDvsdfb; T1 = here->B3SOIPDcdbox - here->B3SOIPDcdmin; T2 = T1 / T0 / T0; pParam->B3SOIPDdt2 = T2 / model->B3SOIPDasd; pParam->B3SOIPDdt3 = T2 /( 1 - model->B3SOIPDasd); here->B3SOIPDdt4 = T0 * T1 * (1 + model->B3SOIPDasd) / 3 - here->B3SOIPDcdmin * pParam->B3SOIPDvsdfb; } else { T0 = pParam->B3SOIPDvsdfb - pParam->B3SOIPDvsdth; pParam->B3SOIPDsdt1 = pParam->B3SOIPDvsdth + model->B3SOIPDasd * T0; T1 = here->B3SOIPDcsmin - here->B3SOIPDcsbox; T2 = T1 / T0 / T0; pParam->B3SOIPDst2 = T2 / model->B3SOIPDasd; pParam->B3SOIPDst3 = T2 /( 1 - model->B3SOIPDasd); here->B3SOIPDst4 = T0 * T1 * (1 + model->B3SOIPDasd) / 3 - here->B3SOIPDcsbox * pParam->B3SOIPDvsdth; T1 = here->B3SOIPDcdmin - here->B3SOIPDcdbox; T2 = T1 / T0 / T0; pParam->B3SOIPDdt2 = T2 / model->B3SOIPDasd; pParam->B3SOIPDdt3 = T2 /( 1 - model->B3SOIPDasd); here->B3SOIPDdt4 = T0 * T1 * (1 + model->B3SOIPDasd) / 3 - here->B3SOIPDcdbox * pParam->B3SOIPDvsdth; } /* v2.2.2 bug fix */ T0 = model->B3SOIPDcsdesw * log(1 + model->B3SOIPDtsi / model->B3SOIPDtbox); T1 = here->B3SOIPDsourcePerimeter - here->B3SOIPDw; if (T1 > 0.0) here->B3SOIPDcsesw = T0 * T1; else here->B3SOIPDcsesw = 0.0; T1 = here->B3SOIPDdrainPerimeter - here->B3SOIPDw; if (T1 > 0.0) here->B3SOIPDcdesw = T0 * T1; else here->B3SOIPDcdesw = 0.0; here->B3SOIPDphi = pParam->B3SOIPDphi; /* process source/drain series resistance */ here->B3SOIPDdrainConductance = model->B3SOIPDsheetResistance * here->B3SOIPDdrainSquares; if (here->B3SOIPDdrainConductance > 0.0) here->B3SOIPDdrainConductance = 1.0 / here->B3SOIPDdrainConductance; else here->B3SOIPDdrainConductance = 0.0; here->B3SOIPDsourceConductance = model->B3SOIPDsheetResistance * here->B3SOIPDsourceSquares; if (here->B3SOIPDsourceConductance > 0.0) here->B3SOIPDsourceConductance = 1.0 / here->B3SOIPDsourceConductance; else here->B3SOIPDsourceConductance = 0.0; here->B3SOIPDcgso = pParam->B3SOIPDcgso; here->B3SOIPDcgdo = pParam->B3SOIPDcgdo; /* v2.0 release */ if (model->B3SOIPDln < 1e-15) model->B3SOIPDln = 1e-15; T0 = -0.5 * pParam->B3SOIPDleff * pParam->B3SOIPDleff / model->B3SOIPDln / model->B3SOIPDln; DEXP(T0,T1); pParam->B3SOIPDarfabjt = T1; T0 = pParam->B3SOIPDlbjt0 * (1.0 / pParam->B3SOIPDleff + 1.0 / model->B3SOIPDln); pParam->B3SOIPDlratio = pow(T0,pParam->B3SOIPDnbjt); pParam->B3SOIPDlratiodif = 1.0 + model->B3SOIPDldif0 * pow(T0,model->B3SOIPDndif); if ((pParam->B3SOIPDvearly = pParam->B3SOIPDvabjt + pParam->B3SOIPDaely * pParam->B3SOIPDleff) < 1) pParam->B3SOIPDvearly = 1; /* vfbzb calculation for capMod 3 */ tmp = sqrt(pParam->B3SOIPDXdep0); tmp1 = pParam->B3SOIPDvbi - pParam->B3SOIPDphi; tmp2 = model->B3SOIPDfactor1 * tmp; T0 = -0.5 * pParam->B3SOIPDdvt1w * pParam->B3SOIPDweff * pParam->B3SOIPDleff / tmp2; if (T0 > -EXPL_THRESHOLD) { T1 = exp(T0); T2 = T1 * (1.0 + 2.0 * T1); } else { T1 = MIN_EXPL; T2 = T1 * (1.0 + 2.0 * T1); } T0 = pParam->B3SOIPDdvt0w * T2; T2 = T0 * tmp1; T0 = -0.5 * pParam->B3SOIPDdvt1 * pParam->B3SOIPDleff / tmp2; if (T0 > -EXPL_THRESHOLD) { T1 = exp(T0); T3 = T1 * (1.0 + 2.0 * T1); } else { T1 = MIN_EXPL; T3 = T1 * (1.0 + 2.0 * T1); } T3 = pParam->B3SOIPDdvt0 * T3 * tmp1; /* v2.2.3 */ T4 = (model->B3SOIPDtox - model->B3SOIPDdtoxcv) * pParam->B3SOIPDphi / (pParam->B3SOIPDweff + pParam->B3SOIPDw0); T0 = sqrt(1.0 + pParam->B3SOIPDnlx / pParam->B3SOIPDleff); T5 = pParam->B3SOIPDk1eff * (T0 - 1.0) * pParam->B3SOIPDsqrtPhi + (pParam->B3SOIPDkt1 + pParam->B3SOIPDkt1l / pParam->B3SOIPDleff) * (TempRatio - 1.0); tmp3 = model->B3SOIPDtype * pParam->B3SOIPDvth0 - T2 - T3 + pParam->B3SOIPDk3 * T4 + T5; pParam->B3SOIPDvfbzb = tmp3 - pParam->B3SOIPDphi - pParam->B3SOIPDk1eff * pParam->B3SOIPDsqrtPhi; /* End of vfbzb */ pParam->B3SOIPDldeb = sqrt(EPSSI * Vtm0 / (Charge_q * pParam->B3SOIPDnpeak * 1.0e6)) / 3.0; pParam->B3SOIPDacde = pParam->B3SOIPDacde * pow((pParam->B3SOIPDnpeak / 2.0e16), -0.25); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/b3soipdacld.c0000644000175000017500000003245013546075722023735 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soipdacld.c 98/5/01 Modified by Pin Su 99/4/30 Modified by Pin Su 99/9/27 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.2.3 02/3/5 Pin Su * BSIMPD2.2.3 release */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b3soipddef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIPDacLoad(GENmodel *inModel, CKTcircuit *ckt) { B3SOIPDmodel *model = (B3SOIPDmodel*)inModel; B3SOIPDinstance *here; int selfheat; double xcggb, xcgdb, xcgsb, xcgeb, xcgT; double xcdgb, xcddb, xcdsb, xcdeb, xcdT; double xcsgb, xcsdb, xcssb, xcseb, xcsT; double xcbgb, xcbdb, xcbsb, xcbeb, xcbT; double xcegb, xceeb, xceT; double gdpr, gspr, gds; double cggb, cgdb, cgsb, cgT; double cdgb, cddb, cdsb, cdeb, cdT; double cbgb, cbdb, cbsb, cbeb, cbT; double ceeb, ceT; double GSoverlapCap, GDoverlapCap, GEoverlapCap, FwdSum, RevSum, Gm, Gmbs, GmT; double omega; double dxpart, sxpart; double gbbg, gbbdp, gbbb, gbbp, gbbsp, gbbT; double gddpg, gddpdp, gddpsp, gddpb, gddpT; double gsspg, gsspdp, gsspsp, gsspb, gsspT; double gppdp, gppb, gppp, gppT; double xcTt, cTt, gTtt, gTtg, gTtb, gTtdp, gTtsp; double EDextrinsicCap, ESextrinsicCap; double xcedb, xcesb; double m; omega = ckt->CKTomega; for (; model != NULL; model = B3SOIPDnextModel(model)) { for (here = B3SOIPDinstances(model); here!= NULL; here = B3SOIPDnextInstance(here)) { selfheat = (model->B3SOIPDshMod == 1) && (here->B3SOIPDrth0 != 0.0); if (here->B3SOIPDmode >= 0) { Gm = here->B3SOIPDgm; Gmbs = here->B3SOIPDgmbs; GmT = model->B3SOIPDtype * here->B3SOIPDgmT; FwdSum = Gm + Gmbs; RevSum = 0.0; cbgb = here->B3SOIPDcbgb; cbsb = here->B3SOIPDcbsb; cbdb = here->B3SOIPDcbdb; cbeb = here->B3SOIPDcbeb; cbT = model->B3SOIPDtype * here->B3SOIPDcbT; ceeb = here->B3SOIPDceeb; ceT = model->B3SOIPDtype * here->B3SOIPDceT; cggb = here->B3SOIPDcggb; cgsb = here->B3SOIPDcgsb; cgdb = here->B3SOIPDcgdb; cgT = model->B3SOIPDtype * here->B3SOIPDcgT; cdgb = here->B3SOIPDcdgb; cdsb = here->B3SOIPDcdsb; cddb = here->B3SOIPDcddb; cdeb = here->B3SOIPDcdeb; cdT = model->B3SOIPDtype * here->B3SOIPDcdT; cTt = here->pParam->B3SOIPDcth; gbbg = -here->B3SOIPDgbgs; gbbdp = -here->B3SOIPDgbds; gbbb = -here->B3SOIPDgbbs; gbbp = -here->B3SOIPDgbps; gbbT = -model->B3SOIPDtype * here->B3SOIPDgbT; gbbsp = - ( gbbg + gbbdp + gbbb + gbbp); gddpg = -here->B3SOIPDgjdg; gddpdp = -here->B3SOIPDgjdd; gddpb = -here->B3SOIPDgjdb; gddpT = -model->B3SOIPDtype * here->B3SOIPDgjdT; gddpsp = - ( gddpg + gddpdp + gddpb ); gsspg = -here->B3SOIPDgjsg; gsspdp = -here->B3SOIPDgjsd; gsspb = -here->B3SOIPDgjsb; gsspT = -model->B3SOIPDtype * here->B3SOIPDgjsT; gsspsp = - (gsspg + gsspdp + gsspb ); gppdp = 0; gppb = -here->B3SOIPDgbpbs; gppp = -here->B3SOIPDgbpps; gppT = -model->B3SOIPDtype * here->B3SOIPDgbpT; gTtg = here->B3SOIPDgtempg; gTtb = here->B3SOIPDgtempb; gTtdp = here->B3SOIPDgtempd; gTtt = here->B3SOIPDgtempT; gTtsp = - (gTtg + gTtb + gTtdp); sxpart = 0.6; dxpart = 0.4; } else { Gm = -here->B3SOIPDgm; Gmbs = -here->B3SOIPDgmbs; GmT = -model->B3SOIPDtype * here->B3SOIPDgmT; FwdSum = 0.0; RevSum = -Gm - Gmbs ; cdgb = - (here->B3SOIPDcdgb + here->B3SOIPDcggb + here->B3SOIPDcbgb); cdsb = - (here->B3SOIPDcddb + here->B3SOIPDcgdb + here->B3SOIPDcbdb); cddb = - (here->B3SOIPDcdsb + here->B3SOIPDcgsb + here->B3SOIPDcbsb); cdeb = - (here->B3SOIPDcdeb + here->B3SOIPDcbeb + here->B3SOIPDceeb); cdT = - model->B3SOIPDtype * (here->B3SOIPDcgT + here->B3SOIPDcbT + here->B3SOIPDcdT + here->B3SOIPDceT); ceeb = here->B3SOIPDceeb; ceT = model->B3SOIPDtype * here->B3SOIPDceT; cggb = here->B3SOIPDcggb; cgsb = here->B3SOIPDcgdb; cgdb = here->B3SOIPDcgsb; cgT = model->B3SOIPDtype * here->B3SOIPDcgT; cbgb = here->B3SOIPDcbgb; cbsb = here->B3SOIPDcbdb; cbdb = here->B3SOIPDcbsb; cbeb = here->B3SOIPDcbeb; cbT = model->B3SOIPDtype * here->B3SOIPDcbT; cTt = here->pParam->B3SOIPDcth; gbbg = -here->B3SOIPDgbgs; gbbb = -here->B3SOIPDgbbs; gbbp = -here->B3SOIPDgbps; gbbsp = -here->B3SOIPDgbds; gbbT = -model->B3SOIPDtype * here->B3SOIPDgbT; gbbdp = - ( gbbg + gbbsp + gbbb + gbbp); gddpg = -here->B3SOIPDgjsg; gddpsp = -here->B3SOIPDgjsd; gddpb = -here->B3SOIPDgjsb; gddpT = -model->B3SOIPDtype * here->B3SOIPDgjsT; gddpdp = - (gddpg + gddpsp + gddpb ); gsspg = -here->B3SOIPDgjdg; gsspsp = -here->B3SOIPDgjdd; gsspb = -here->B3SOIPDgjdb; gsspT = -model->B3SOIPDtype * here->B3SOIPDgjdT; gsspdp = - ( gsspg + gsspsp + gsspb ); gppb = -here->B3SOIPDgbpbs; gppp = -here->B3SOIPDgbpps; gppT = -model->B3SOIPDtype * here->B3SOIPDgbpT; gppdp = - (gppb + gppp); gTtt = here->B3SOIPDgtempT; gTtg = here->B3SOIPDgtempg; gTtb = here->B3SOIPDgtempb; gTtdp = here->B3SOIPDgtempd; gTtsp = - (gTtt + gTtg + gTtb + gTtdp); gTtg = here->B3SOIPDgtempg; gTtb = here->B3SOIPDgtempb; gTtsp = here->B3SOIPDgtempd; gTtt = here->B3SOIPDgtempT; gTtdp = - (gTtg + gTtb + gTtsp); sxpart = 0.6; sxpart = 0.4; dxpart = 0.6; } gdpr=here->B3SOIPDdrainConductance; gspr=here->B3SOIPDsourceConductance; gds= here->B3SOIPDgds; GSoverlapCap = here->B3SOIPDcgso; GDoverlapCap = here->B3SOIPDcgdo; GEoverlapCap = here->pParam->B3SOIPDcgeo; EDextrinsicCap = here->B3SOIPDgcde; ESextrinsicCap = here->B3SOIPDgcse; xcedb = -EDextrinsicCap * omega; xcdeb = (cdeb - EDextrinsicCap) * omega; xcddb = (cddb + GDoverlapCap + EDextrinsicCap) * omega; xceeb = (ceeb + GEoverlapCap + EDextrinsicCap + ESextrinsicCap) * omega; xcesb = -ESextrinsicCap * omega; xcssb = (GSoverlapCap + ESextrinsicCap - (cgsb + cbsb + cdsb)) * omega; xcseb = -(cbeb + cdeb + ceeb + ESextrinsicCap) * omega; xcegb = (- GEoverlapCap) * omega; xceT = ceT * omega; xcggb = (cggb + GDoverlapCap + GSoverlapCap + GEoverlapCap) * omega; xcgdb = (cgdb - GDoverlapCap ) * omega; xcgsb = (cgsb - GSoverlapCap) * omega; xcgeb = (- GEoverlapCap) * omega; xcgT = cgT * omega; xcdgb = (cdgb - GDoverlapCap) * omega; xcdsb = cdsb * omega; xcdT = cdT * omega; xcsgb = -(cggb + cbgb + cdgb + GSoverlapCap) * omega; xcsdb = -(cgdb + cbdb + cddb) * omega; xcsT = -(cgT + cbT + cdT + ceT) * omega; xcbgb = cbgb * omega; xcbdb = cbdb * omega; xcbsb = cbsb * omega; xcbeb = cbeb * omega; xcbT = cbT * omega; xcTt = cTt * omega; m = here->B3SOIPDm; *(here->B3SOIPDEdpPtr +1) += m * xcedb; *(here->B3SOIPDEspPtr +1) += m * xcesb; *(here->B3SOIPDDPePtr +1) += m * xcdeb; *(here->B3SOIPDSPePtr +1) += m * xcseb; *(here->B3SOIPDEgPtr +1) += m * xcegb; *(here->B3SOIPDGePtr +1) += m * xcgeb; *(here->B3SOIPDEePtr +1) += m * xceeb; *(here->B3SOIPDGgPtr +1) += m * xcggb; *(here->B3SOIPDGdpPtr +1) += m * xcgdb; *(here->B3SOIPDGspPtr +1) += m * xcgsb; *(here->B3SOIPDDPgPtr +1) += m * xcdgb; *(here->B3SOIPDDPdpPtr +1) += m * xcddb; *(here->B3SOIPDDPspPtr +1) += m * xcdsb; *(here->B3SOIPDSPgPtr +1) += m * xcsgb; *(here->B3SOIPDSPdpPtr +1) += m * xcsdb; *(here->B3SOIPDSPspPtr +1) += m * xcssb; *(here->B3SOIPDBePtr +1) += m * xcbeb; *(here->B3SOIPDBgPtr +1) += m * xcbgb; *(here->B3SOIPDBdpPtr +1) += m * xcbdb; *(here->B3SOIPDBspPtr +1) += m * xcbsb; *(here->B3SOIPDEbPtr +1) -= m * (xcegb + xceeb + xcedb + xcesb); *(here->B3SOIPDGbPtr +1) -= m * (xcggb + xcgdb + xcgsb + xcgeb); *(here->B3SOIPDDPbPtr +1) -= m * (xcdgb + xcddb + xcdsb + xcdeb); *(here->B3SOIPDSPbPtr +1) -= m * (xcsgb + xcsdb + xcssb + xcseb); *(here->B3SOIPDBbPtr +1) -= m * (xcbgb + xcbdb + xcbsb + xcbeb); if (selfheat) { *(here->B3SOIPDTemptempPtr + 1) += m * xcTt; *(here->B3SOIPDDPtempPtr + 1) += m * xcdT; *(here->B3SOIPDSPtempPtr + 1) += m * xcsT; *(here->B3SOIPDBtempPtr + 1) += m * xcbT; *(here->B3SOIPDEtempPtr + 1) += m * xceT; *(here->B3SOIPDGtempPtr + 1) += m * xcgT; } *(here->B3SOIPDEePtr) += 0.0; *(here->B3SOIPDDPgPtr) += m * (Gm + gddpg); *(here->B3SOIPDDPdpPtr) += m * (gdpr + gds + gddpdp + RevSum); *(here->B3SOIPDDPspPtr) -= m * (gds + FwdSum - gddpsp); *(here->B3SOIPDDPdPtr) -= m * gdpr; *(here->B3SOIPDSPgPtr) -= m * (Gm - gsspg); *(here->B3SOIPDSPdpPtr) -= m * (gds + RevSum - gsspdp); *(here->B3SOIPDSPspPtr) += m * (gspr + gds + FwdSum + gsspsp); *(here->B3SOIPDSPsPtr) -= m * gspr; *(here->B3SOIPDBePtr) += 0; *(here->B3SOIPDBgPtr) += m * gbbg; *(here->B3SOIPDBdpPtr) += m * gbbdp; *(here->B3SOIPDBspPtr) += m * gbbsp; *(here->B3SOIPDBbPtr) += m * gbbb; *(here->B3SOIPDEbPtr) += 0.0; *(here->B3SOIPDSPbPtr) -= m * Gmbs - gsspb; *(here->B3SOIPDDPbPtr) -= m * (-gddpb - Gmbs); if (selfheat) { *(here->B3SOIPDDPtempPtr) += m * (GmT + gddpT); *(here->B3SOIPDSPtempPtr) += m * (-GmT + gsspT); *(here->B3SOIPDBtempPtr) += m * gbbT; *(here->B3SOIPDTemptempPtr) += m * (gTtt + 1/here->pParam->B3SOIPDrth); *(here->B3SOIPDTempgPtr) += m * gTtg; *(here->B3SOIPDTempbPtr) += m * gTtb; *(here->B3SOIPDTempdpPtr) += m * gTtdp; *(here->B3SOIPDTempspPtr) += m * gTtsp; } *(here->B3SOIPDDdPtr) += m * gdpr; *(here->B3SOIPDDdpPtr) -= m * gdpr; *(here->B3SOIPDSsPtr) += m * gspr; *(here->B3SOIPDSspPtr) -= m * gspr; if (here->B3SOIPDbodyMod == 1) { (*(here->B3SOIPDBpPtr) -= m * gppp); (*(here->B3SOIPDPbPtr) += m * gppb); (*(here->B3SOIPDPpPtr) += m * gppp); } if (here->B3SOIPDdebugMod != 0) { *(here->B3SOIPDVbsPtr) += m * 1; *(here->B3SOIPDIdsPtr) += m * 1; *(here->B3SOIPDIcPtr) += m * 1; *(here->B3SOIPDIbsPtr) += m * 1; *(here->B3SOIPDIbdPtr) += m * 1; *(here->B3SOIPDIiiPtr) += m * 1; *(here->B3SOIPDIgidlPtr) += m * 1; *(here->B3SOIPDItunPtr) += m * 1; *(here->B3SOIPDIbpPtr) += m * 1; *(here->B3SOIPDCbgPtr) += m * 1; *(here->B3SOIPDCbbPtr) += m * 1; *(here->B3SOIPDCbdPtr) += m * 1; *(here->B3SOIPDQbfPtr) += m * 1; *(here->B3SOIPDQjsPtr) += m * 1; *(here->B3SOIPDQjdPtr) += m * 1; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/b3soipdset.c0000644000175000017500000016747413546075722023644 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soipdset.c 98/5/01 Modified by Pin Su and Jan Feng 99/2/15 Modified by Pin Su 99/4/30 Modified by Pin Su, Wei Jin 99/9/27 Modified by Pin Su 00/3/1 Modified by Pin Su 01/2/15 Modified by Pin Su 02/3/5 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.2.3 02/3/5 Pin Su * BSIMPD2.2.3 release */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "b3soipddef.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define SMOOTHFACTOR 0.1 #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define PI 3.141592654 #define Charge_q 1.60219e-19 #define Meter2Micron 1.0e6 int B3SOIPDsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { B3SOIPDmodel *model = (B3SOIPDmodel*)inModel; B3SOIPDinstance *here; int error; CKTnode *tmp; double Cboxt; CKTnode *tmpNode; IFuid tmpName; /* loop through all the B3SOIPD device models */ for( ; model != NULL; model = B3SOIPDnextModel(model)) { /* Default value Processing for B3SOIPD MOSFET Models */ if (!model->B3SOIPDtypeGiven) model->B3SOIPDtype = NMOS; if (!model->B3SOIPDmobModGiven) model->B3SOIPDmobMod = 1; if (!model->B3SOIPDbinUnitGiven) model->B3SOIPDbinUnit = 1; if (!model->B3SOIPDparamChkGiven) model->B3SOIPDparamChk = 0; if (!model->B3SOIPDcapModGiven) model->B3SOIPDcapMod = 2; if (!model->B3SOIPDnoiModGiven) model->B3SOIPDnoiMod = 1; if (!model->B3SOIPDshModGiven) model->B3SOIPDshMod = 0; if (!model->B3SOIPDversionGiven) model->B3SOIPDversion = 2.0; if (!model->B3SOIPDtoxGiven) model->B3SOIPDtox = 100.0e-10; model->B3SOIPDcox = 3.453133e-11 / model->B3SOIPDtox; /* v2.2.3 */ if (!model->B3SOIPDdtoxcvGiven) model->B3SOIPDdtoxcv = 0.0; if (!model->B3SOIPDcdscGiven) model->B3SOIPDcdsc = 2.4e-4; /* unit Q/V/m^2 */ if (!model->B3SOIPDcdscbGiven) model->B3SOIPDcdscb = 0.0; /* unit Q/V/m^2 */ if (!model->B3SOIPDcdscdGiven) model->B3SOIPDcdscd = 0.0; /* unit Q/V/m^2 */ if (!model->B3SOIPDcitGiven) model->B3SOIPDcit = 0.0; /* unit Q/V/m^2 */ if (!model->B3SOIPDnfactorGiven) model->B3SOIPDnfactor = 1; if (!model->B3SOIPDvsatGiven) model->B3SOIPDvsat = 8.0e4; /* unit m/s */ if (!model->B3SOIPDatGiven) model->B3SOIPDat = 3.3e4; /* unit m/s */ if (!model->B3SOIPDa0Given) model->B3SOIPDa0 = 1.0; if (!model->B3SOIPDagsGiven) model->B3SOIPDags = 0.0; if (!model->B3SOIPDa1Given) model->B3SOIPDa1 = 0.0; if (!model->B3SOIPDa2Given) model->B3SOIPDa2 = 1.0; if (!model->B3SOIPDketaGiven) model->B3SOIPDketa = -0.6; /* unit / V */ if (!model->B3SOIPDnsubGiven) model->B3SOIPDnsub = 6.0e16; /* unit 1/cm3 */ if (!model->B3SOIPDnpeakGiven) model->B3SOIPDnpeak = 1.7e17; /* unit 1/cm3 */ if (!model->B3SOIPDngateGiven) model->B3SOIPDngate = 0; /* unit 1/cm3 */ if (!model->B3SOIPDvbmGiven) model->B3SOIPDvbm = -3.0; if (!model->B3SOIPDxtGiven) model->B3SOIPDxt = 1.55e-7; if (!model->B3SOIPDkt1Given) model->B3SOIPDkt1 = -0.11; /* unit V */ if (!model->B3SOIPDkt1lGiven) model->B3SOIPDkt1l = 0.0; /* unit V*m */ if (!model->B3SOIPDkt2Given) model->B3SOIPDkt2 = 0.022; /* No unit */ if (!model->B3SOIPDk3Given) model->B3SOIPDk3 = 0.0; if (!model->B3SOIPDk3bGiven) model->B3SOIPDk3b = 0.0; if (!model->B3SOIPDw0Given) model->B3SOIPDw0 = 2.5e-6; if (!model->B3SOIPDnlxGiven) model->B3SOIPDnlx = 1.74e-7; if (!model->B3SOIPDdvt0Given) model->B3SOIPDdvt0 = 2.2; if (!model->B3SOIPDdvt1Given) model->B3SOIPDdvt1 = 0.53; if (!model->B3SOIPDdvt2Given) model->B3SOIPDdvt2 = -0.032; /* unit 1 / V */ if (!model->B3SOIPDdvt0wGiven) model->B3SOIPDdvt0w = 0.0; if (!model->B3SOIPDdvt1wGiven) model->B3SOIPDdvt1w = 5.3e6; if (!model->B3SOIPDdvt2wGiven) model->B3SOIPDdvt2w = -0.032; if (!model->B3SOIPDdroutGiven) model->B3SOIPDdrout = 0.56; if (!model->B3SOIPDdsubGiven) model->B3SOIPDdsub = model->B3SOIPDdrout; if (!model->B3SOIPDvth0Given) model->B3SOIPDvth0 = (model->B3SOIPDtype == NMOS) ? 0.7 : -0.7; if (!model->B3SOIPDuaGiven) model->B3SOIPDua = 2.25e-9; /* unit m/V */ if (!model->B3SOIPDua1Given) model->B3SOIPDua1 = 4.31e-9; /* unit m/V */ if (!model->B3SOIPDubGiven) model->B3SOIPDub = 5.87e-19; /* unit (m/V)**2 */ if (!model->B3SOIPDub1Given) model->B3SOIPDub1 = -7.61e-18; /* unit (m/V)**2 */ if (!model->B3SOIPDucGiven) model->B3SOIPDuc = (model->B3SOIPDmobMod == 3) ? -0.0465 : -0.0465e-9; if (!model->B3SOIPDuc1Given) model->B3SOIPDuc1 = (model->B3SOIPDmobMod == 3) ? -0.056 : -0.056e-9; if (!model->B3SOIPDu0Given) model->B3SOIPDu0 = (model->B3SOIPDtype == NMOS) ? 0.067 : 0.025; if (!model->B3SOIPDuteGiven) model->B3SOIPDute = -1.5; if (!model->B3SOIPDvoffGiven) model->B3SOIPDvoff = -0.08; if (!model->B3SOIPDdeltaGiven) model->B3SOIPDdelta = 0.01; if (!model->B3SOIPDrdswGiven) model->B3SOIPDrdsw = 100; if (!model->B3SOIPDprwgGiven) model->B3SOIPDprwg = 0.0; /* unit 1/V */ if (!model->B3SOIPDprwbGiven) model->B3SOIPDprwb = 0.0; if (!model->B3SOIPDprtGiven) model->B3SOIPDprt = 0.0; if (!model->B3SOIPDeta0Given) model->B3SOIPDeta0 = 0.08; /* no unit */ if (!model->B3SOIPDetabGiven) model->B3SOIPDetab = -0.07; /* unit 1/V */ if (!model->B3SOIPDpclmGiven) model->B3SOIPDpclm = 1.3; /* no unit */ if (!model->B3SOIPDpdibl1Given) model->B3SOIPDpdibl1 = .39; /* no unit */ if (!model->B3SOIPDpdibl2Given) model->B3SOIPDpdibl2 = 0.0086; /* no unit */ if (!model->B3SOIPDpdiblbGiven) model->B3SOIPDpdiblb = 0.0; /* 1/V */ if (!model->B3SOIPDpvagGiven) model->B3SOIPDpvag = 0.0; if (!model->B3SOIPDwrGiven) model->B3SOIPDwr = 1.0; if (!model->B3SOIPDdwgGiven) model->B3SOIPDdwg = 0.0; if (!model->B3SOIPDdwbGiven) model->B3SOIPDdwb = 0.0; if (!model->B3SOIPDb0Given) model->B3SOIPDb0 = 0.0; if (!model->B3SOIPDb1Given) model->B3SOIPDb1 = 0.0; if (!model->B3SOIPDalpha0Given) model->B3SOIPDalpha0 = 0.0; if (!model->B3SOIPDcgslGiven) model->B3SOIPDcgsl = 0.0; if (!model->B3SOIPDcgdlGiven) model->B3SOIPDcgdl = 0.0; if (!model->B3SOIPDckappaGiven) model->B3SOIPDckappa = 0.6; if (!model->B3SOIPDclcGiven) model->B3SOIPDclc = 0.1e-7; if (!model->B3SOIPDcleGiven) model->B3SOIPDcle = 0.0; if (!model->B3SOIPDtboxGiven) model->B3SOIPDtbox = 3e-7; if (!model->B3SOIPDtsiGiven) model->B3SOIPDtsi = 1e-7; if (!model->B3SOIPDxjGiven) model->B3SOIPDxj = model->B3SOIPDtsi; if (!model->B3SOIPDrbodyGiven) model->B3SOIPDrbody = 0.0; if (!model->B3SOIPDrbshGiven) model->B3SOIPDrbsh = 0.0; if (!model->B3SOIPDrth0Given) model->B3SOIPDrth0 = 0; if (!model->B3SOIPDcth0Given) model->B3SOIPDcth0 = 0; if (!model->B3SOIPDagidlGiven) model->B3SOIPDagidl = 0.0; if (!model->B3SOIPDbgidlGiven) model->B3SOIPDbgidl = 0.0; if (!model->B3SOIPDngidlGiven) model->B3SOIPDngidl = 1.2; if (!model->B3SOIPDndiodeGiven) model->B3SOIPDndiode = 1.0; if (!model->B3SOIPDntunGiven) model->B3SOIPDntun = 10.0; if (!model->B3SOIPDnrecf0Given) model->B3SOIPDnrecf0 = 2.0; if (!model->B3SOIPDnrecr0Given) model->B3SOIPDnrecr0 = 10.0; if (!model->B3SOIPDisbjtGiven) model->B3SOIPDisbjt = 1e-6; if (!model->B3SOIPDisdifGiven) model->B3SOIPDisdif = 0.0; if (!model->B3SOIPDisrecGiven) model->B3SOIPDisrec = 1e-5; if (!model->B3SOIPDistunGiven) model->B3SOIPDistun = 0.0; if (!model->B3SOIPDxbjtGiven) model->B3SOIPDxbjt = 1; /* if (!model->B3SOIPDxdifGiven) model->B3SOIPDxdif = 1; */ if (!model->B3SOIPDxdifGiven) model->B3SOIPDxdif = model->B3SOIPDxbjt; if (!model->B3SOIPDxrecGiven) model->B3SOIPDxrec = 1; if (!model->B3SOIPDxtunGiven) model->B3SOIPDxtun = 0; if (!model->B3SOIPDttGiven) model->B3SOIPDtt = 1e-12; if (!model->B3SOIPDasdGiven) model->B3SOIPDasd = 0.3; /* unit degree celcius */ if (!model->B3SOIPDtnomGiven) model->B3SOIPDtnom = ckt->CKTnomTemp; if (!model->B3SOIPDLintGiven) model->B3SOIPDLint = 0.0; if (!model->B3SOIPDLlGiven) model->B3SOIPDLl = 0.0; if (!model->B3SOIPDLlcGiven) model->B3SOIPDLlc = 0.0; /* v2.2.3 */ if (!model->B3SOIPDLlnGiven) model->B3SOIPDLln = 1.0; if (!model->B3SOIPDLwGiven) model->B3SOIPDLw = 0.0; if (!model->B3SOIPDLwcGiven) model->B3SOIPDLwc = 0.0; /* v2.2.3 */ if (!model->B3SOIPDLwnGiven) model->B3SOIPDLwn = 1.0; if (!model->B3SOIPDLwlGiven) model->B3SOIPDLwl = 0.0; if (!model->B3SOIPDLwlcGiven) model->B3SOIPDLwlc = 0.0; /* v2.2.3 */ if (!model->B3SOIPDLminGiven) model->B3SOIPDLmin = 0.0; if (!model->B3SOIPDLmaxGiven) model->B3SOIPDLmax = 1.0; if (!model->B3SOIPDWintGiven) model->B3SOIPDWint = 0.0; if (!model->B3SOIPDWlGiven) model->B3SOIPDWl = 0.0; if (!model->B3SOIPDWlcGiven) model->B3SOIPDWlc = 0.0; /* v2.2.3 */ if (!model->B3SOIPDWlnGiven) model->B3SOIPDWln = 1.0; if (!model->B3SOIPDWwGiven) model->B3SOIPDWw = 0.0; if (!model->B3SOIPDWwcGiven) model->B3SOIPDWwc = 0.0; /* v2.2.3 */ if (!model->B3SOIPDWwnGiven) model->B3SOIPDWwn = 1.0; if (!model->B3SOIPDWwlGiven) model->B3SOIPDWwl = 0.0; if (!model->B3SOIPDWwlcGiven) model->B3SOIPDWwlc = 0.0; /* v2.2.3 */ if (!model->B3SOIPDWminGiven) model->B3SOIPDWmin = 0.0; if (!model->B3SOIPDWmaxGiven) model->B3SOIPDWmax = 1.0; if (!model->B3SOIPDdwcGiven) model->B3SOIPDdwc = model->B3SOIPDWint; if (!model->B3SOIPDdlcGiven) model->B3SOIPDdlc = model->B3SOIPDLint; /* v2.2 release */ if (!model->B3SOIPDwth0Given) model->B3SOIPDwth0 = 0.0; if (!model->B3SOIPDrhaloGiven) model->B3SOIPDrhalo = 1e15; if (!model->B3SOIPDntoxGiven) model->B3SOIPDntox = 1; if (!model->B3SOIPDtoxrefGiven) model->B3SOIPDtoxref = 2.5e-9; if (!model->B3SOIPDebgGiven) model->B3SOIPDebg = 1.2; if (!model->B3SOIPDvevbGiven) model->B3SOIPDvevb = 0.075; if (!model->B3SOIPDalphaGB1Given) model->B3SOIPDalphaGB1 = 0.35; if (!model->B3SOIPDbetaGB1Given) model->B3SOIPDbetaGB1 = 0.03; if (!model->B3SOIPDvgb1Given) model->B3SOIPDvgb1 = 300; if (!model->B3SOIPDalphaGB2Given) model->B3SOIPDalphaGB2 = 0.43; if (!model->B3SOIPDbetaGB2Given) model->B3SOIPDbetaGB2 = 0.05; if (!model->B3SOIPDvecbGiven) model->B3SOIPDvecb = 0.026; if (!model->B3SOIPDvgb2Given) model->B3SOIPDvgb2 = 17; if (!model->B3SOIPDtoxqmGiven) model->B3SOIPDtoxqm = model->B3SOIPDtox; if (!model->B3SOIPDvoxhGiven) model->B3SOIPDvoxh = 5.0; if (!model->B3SOIPDdeltavoxGiven) model->B3SOIPDdeltavox = 0.005; if (!model->B3SOIPDigModGiven) model->B3SOIPDigMod = 0; /* v2.0 release */ if (!model->B3SOIPDk1w1Given) model->B3SOIPDk1w1 = 0.0; if (!model->B3SOIPDk1w2Given) model->B3SOIPDk1w2 = 0.0; if (!model->B3SOIPDketasGiven) model->B3SOIPDketas = 0.0; if (!model->B3SOIPDdwbcGiven) model->B3SOIPDdwbc = 0.0; if (!model->B3SOIPDbeta0Given) model->B3SOIPDbeta0 = 0.0; if (!model->B3SOIPDbeta1Given) model->B3SOIPDbeta1 = 0.0; if (!model->B3SOIPDbeta2Given) model->B3SOIPDbeta2 = 0.1; if (!model->B3SOIPDvdsatii0Given) model->B3SOIPDvdsatii0 = 0.9; if (!model->B3SOIPDtiiGiven) model->B3SOIPDtii = 0.0; if (!model->B3SOIPDliiGiven) model->B3SOIPDlii = 0.0; if (!model->B3SOIPDsii0Given) model->B3SOIPDsii0 = 0.5; if (!model->B3SOIPDsii1Given) model->B3SOIPDsii1 = 0.1; if (!model->B3SOIPDsii2Given) model->B3SOIPDsii2 = 0.0; if (!model->B3SOIPDsiidGiven) model->B3SOIPDsiid = 0.0; if (!model->B3SOIPDfbjtiiGiven) model->B3SOIPDfbjtii = 0.0; if (!model->B3SOIPDesatiiGiven) model->B3SOIPDesatii = 1e7; if (!model->B3SOIPDlnGiven) model->B3SOIPDln = 2e-6; if (!model->B3SOIPDvrec0Given) model->B3SOIPDvrec0 = 0; if (!model->B3SOIPDvtun0Given) model->B3SOIPDvtun0 = 0; if (!model->B3SOIPDnbjtGiven) model->B3SOIPDnbjt = 1.0; if (!model->B3SOIPDlbjt0Given) model->B3SOIPDlbjt0 = 0.20e-6; if (!model->B3SOIPDldif0Given) model->B3SOIPDldif0 = 1.0; if (!model->B3SOIPDvabjtGiven) model->B3SOIPDvabjt = 10.0; if (!model->B3SOIPDaelyGiven) model->B3SOIPDaely = 0; if (!model->B3SOIPDahliGiven) model->B3SOIPDahli = 0; if (!model->B3SOIPDrbodyGiven) model->B3SOIPDrbody = 0.0; if (!model->B3SOIPDrbshGiven) model->B3SOIPDrbsh = 0.0; if (!model->B3SOIPDntrecfGiven) model->B3SOIPDntrecf = 0.0; if (!model->B3SOIPDntrecrGiven) model->B3SOIPDntrecr = 0.0; if (!model->B3SOIPDndifGiven) model->B3SOIPDndif = -1.0; if (!model->B3SOIPDdlcbGiven) model->B3SOIPDdlcb = 0.0; if (!model->B3SOIPDfbodyGiven) model->B3SOIPDfbody = 1.0; if (!model->B3SOIPDtcjswgGiven) model->B3SOIPDtcjswg = 0.0; if (!model->B3SOIPDtpbswgGiven) model->B3SOIPDtpbswg = 0.0; if (!model->B3SOIPDacdeGiven) model->B3SOIPDacde = 1.0; if (!model->B3SOIPDmoinGiven) model->B3SOIPDmoin = 15.0; if (!model->B3SOIPDdelvtGiven) model->B3SOIPDdelvt = 0.0; if (!model->B3SOIPDkb1Given) model->B3SOIPDkb1 = 1.0; if (!model->B3SOIPDdlbgGiven) model->B3SOIPDdlbg = 0.0; /* Added for binning - START */ /* Length dependence */ if (!model->B3SOIPDlnpeakGiven) model->B3SOIPDlnpeak = 0.0; if (!model->B3SOIPDlnsubGiven) model->B3SOIPDlnsub = 0.0; if (!model->B3SOIPDlngateGiven) model->B3SOIPDlngate = 0.0; if (!model->B3SOIPDlvth0Given) model->B3SOIPDlvth0 = 0.0; if (!model->B3SOIPDlk1Given) model->B3SOIPDlk1 = 0.0; if (!model->B3SOIPDlk1w1Given) model->B3SOIPDlk1w1 = 0.0; if (!model->B3SOIPDlk1w2Given) model->B3SOIPDlk1w2 = 0.0; if (!model->B3SOIPDlk2Given) model->B3SOIPDlk2 = 0.0; if (!model->B3SOIPDlk3Given) model->B3SOIPDlk3 = 0.0; if (!model->B3SOIPDlk3bGiven) model->B3SOIPDlk3b = 0.0; if (!model->B3SOIPDlkb1Given) model->B3SOIPDlkb1 = 0.0; if (!model->B3SOIPDlw0Given) model->B3SOIPDlw0 = 0.0; if (!model->B3SOIPDlnlxGiven) model->B3SOIPDlnlx = 0.0; if (!model->B3SOIPDldvt0Given) model->B3SOIPDldvt0 = 0.0; if (!model->B3SOIPDldvt1Given) model->B3SOIPDldvt1 = 0.0; if (!model->B3SOIPDldvt2Given) model->B3SOIPDldvt2 = 0.0; if (!model->B3SOIPDldvt0wGiven) model->B3SOIPDldvt0w = 0.0; if (!model->B3SOIPDldvt1wGiven) model->B3SOIPDldvt1w = 0.0; if (!model->B3SOIPDldvt2wGiven) model->B3SOIPDldvt2w = 0.0; if (!model->B3SOIPDlu0Given) model->B3SOIPDlu0 = 0.0; if (!model->B3SOIPDluaGiven) model->B3SOIPDlua = 0.0; if (!model->B3SOIPDlubGiven) model->B3SOIPDlub = 0.0; if (!model->B3SOIPDlucGiven) model->B3SOIPDluc = 0.0; if (!model->B3SOIPDlvsatGiven) model->B3SOIPDlvsat = 0.0; if (!model->B3SOIPDla0Given) model->B3SOIPDla0 = 0.0; if (!model->B3SOIPDlagsGiven) model->B3SOIPDlags = 0.0; if (!model->B3SOIPDlb0Given) model->B3SOIPDlb0 = 0.0; if (!model->B3SOIPDlb1Given) model->B3SOIPDlb1 = 0.0; if (!model->B3SOIPDlketaGiven) model->B3SOIPDlketa = 0.0; if (!model->B3SOIPDlketasGiven) model->B3SOIPDlketas = 0.0; if (!model->B3SOIPDla1Given) model->B3SOIPDla1 = 0.0; if (!model->B3SOIPDla2Given) model->B3SOIPDla2 = 0.0; if (!model->B3SOIPDlrdswGiven) model->B3SOIPDlrdsw = 0.0; if (!model->B3SOIPDlprwbGiven) model->B3SOIPDlprwb = 0.0; if (!model->B3SOIPDlprwgGiven) model->B3SOIPDlprwg = 0.0; if (!model->B3SOIPDlwrGiven) model->B3SOIPDlwr = 0.0; if (!model->B3SOIPDlnfactorGiven) model->B3SOIPDlnfactor = 0.0; if (!model->B3SOIPDldwgGiven) model->B3SOIPDldwg = 0.0; if (!model->B3SOIPDldwbGiven) model->B3SOIPDldwb = 0.0; if (!model->B3SOIPDlvoffGiven) model->B3SOIPDlvoff = 0.0; if (!model->B3SOIPDleta0Given) model->B3SOIPDleta0 = 0.0; if (!model->B3SOIPDletabGiven) model->B3SOIPDletab = 0.0; if (!model->B3SOIPDldsubGiven) model->B3SOIPDldsub = 0.0; if (!model->B3SOIPDlcitGiven) model->B3SOIPDlcit = 0.0; if (!model->B3SOIPDlcdscGiven) model->B3SOIPDlcdsc = 0.0; if (!model->B3SOIPDlcdscbGiven) model->B3SOIPDlcdscb = 0.0; if (!model->B3SOIPDlcdscdGiven) model->B3SOIPDlcdscd = 0.0; if (!model->B3SOIPDlpclmGiven) model->B3SOIPDlpclm = 0.0; if (!model->B3SOIPDlpdibl1Given) model->B3SOIPDlpdibl1 = 0.0; if (!model->B3SOIPDlpdibl2Given) model->B3SOIPDlpdibl2 = 0.0; if (!model->B3SOIPDlpdiblbGiven) model->B3SOIPDlpdiblb = 0.0; if (!model->B3SOIPDldroutGiven) model->B3SOIPDldrout = 0.0; if (!model->B3SOIPDlpvagGiven) model->B3SOIPDlpvag = 0.0; if (!model->B3SOIPDldeltaGiven) model->B3SOIPDldelta = 0.0; if (!model->B3SOIPDlalpha0Given) model->B3SOIPDlalpha0 = 0.0; if (!model->B3SOIPDlfbjtiiGiven) model->B3SOIPDlfbjtii = 0.0; if (!model->B3SOIPDlbeta0Given) model->B3SOIPDlbeta0 = 0.0; if (!model->B3SOIPDlbeta1Given) model->B3SOIPDlbeta1 = 0.0; if (!model->B3SOIPDlbeta2Given) model->B3SOIPDlbeta2 = 0.0; if (!model->B3SOIPDlvdsatii0Given) model->B3SOIPDlvdsatii0 = 0.0; if (!model->B3SOIPDlliiGiven) model->B3SOIPDllii = 0.0; if (!model->B3SOIPDlesatiiGiven) model->B3SOIPDlesatii = 0.0; if (!model->B3SOIPDlsii0Given) model->B3SOIPDlsii0 = 0.0; if (!model->B3SOIPDlsii1Given) model->B3SOIPDlsii1 = 0.0; if (!model->B3SOIPDlsii2Given) model->B3SOIPDlsii2 = 0.0; if (!model->B3SOIPDlsiidGiven) model->B3SOIPDlsiid = 0.0; if (!model->B3SOIPDlagidlGiven) model->B3SOIPDlagidl = 0.0; if (!model->B3SOIPDlbgidlGiven) model->B3SOIPDlbgidl = 0.0; if (!model->B3SOIPDlngidlGiven) model->B3SOIPDlngidl = 0.0; if (!model->B3SOIPDlntunGiven) model->B3SOIPDlntun = 0.0; if (!model->B3SOIPDlndiodeGiven) model->B3SOIPDlndiode = 0.0; if (!model->B3SOIPDlnrecf0Given) model->B3SOIPDlnrecf0 = 0.0; if (!model->B3SOIPDlnrecr0Given) model->B3SOIPDlnrecr0 = 0.0; if (!model->B3SOIPDlisbjtGiven) model->B3SOIPDlisbjt = 0.0; if (!model->B3SOIPDlisdifGiven) model->B3SOIPDlisdif = 0.0; if (!model->B3SOIPDlisrecGiven) model->B3SOIPDlisrec = 0.0; if (!model->B3SOIPDlistunGiven) model->B3SOIPDlistun = 0.0; if (!model->B3SOIPDlvrec0Given) model->B3SOIPDlvrec0 = 0.0; if (!model->B3SOIPDlvtun0Given) model->B3SOIPDlvtun0 = 0.0; if (!model->B3SOIPDlnbjtGiven) model->B3SOIPDlnbjt = 0.0; if (!model->B3SOIPDllbjt0Given) model->B3SOIPDllbjt0 = 0.0; if (!model->B3SOIPDlvabjtGiven) model->B3SOIPDlvabjt = 0.0; if (!model->B3SOIPDlaelyGiven) model->B3SOIPDlaely = 0.0; if (!model->B3SOIPDlahliGiven) model->B3SOIPDlahli = 0.0; /* CV Model */ if (!model->B3SOIPDlvsdfbGiven) model->B3SOIPDlvsdfb = 0.0; if (!model->B3SOIPDlvsdthGiven) model->B3SOIPDlvsdth = 0.0; if (!model->B3SOIPDldelvtGiven) model->B3SOIPDldelvt = 0.0; if (!model->B3SOIPDlacdeGiven) model->B3SOIPDlacde = 0.0; if (!model->B3SOIPDlmoinGiven) model->B3SOIPDlmoin = 0.0; /* Width dependence */ if (!model->B3SOIPDwnpeakGiven) model->B3SOIPDwnpeak = 0.0; if (!model->B3SOIPDwnsubGiven) model->B3SOIPDwnsub = 0.0; if (!model->B3SOIPDwngateGiven) model->B3SOIPDwngate = 0.0; if (!model->B3SOIPDwvth0Given) model->B3SOIPDwvth0 = 0.0; if (!model->B3SOIPDwk1Given) model->B3SOIPDwk1 = 0.0; if (!model->B3SOIPDwk1w1Given) model->B3SOIPDwk1w1 = 0.0; if (!model->B3SOIPDwk1w2Given) model->B3SOIPDwk1w2 = 0.0; if (!model->B3SOIPDwk2Given) model->B3SOIPDwk2 = 0.0; if (!model->B3SOIPDwk3Given) model->B3SOIPDwk3 = 0.0; if (!model->B3SOIPDwk3bGiven) model->B3SOIPDwk3b = 0.0; if (!model->B3SOIPDwkb1Given) model->B3SOIPDwkb1 = 0.0; if (!model->B3SOIPDww0Given) model->B3SOIPDww0 = 0.0; if (!model->B3SOIPDwnlxGiven) model->B3SOIPDwnlx = 0.0; if (!model->B3SOIPDwdvt0Given) model->B3SOIPDwdvt0 = 0.0; if (!model->B3SOIPDwdvt1Given) model->B3SOIPDwdvt1 = 0.0; if (!model->B3SOIPDwdvt2Given) model->B3SOIPDwdvt2 = 0.0; if (!model->B3SOIPDwdvt0wGiven) model->B3SOIPDwdvt0w = 0.0; if (!model->B3SOIPDwdvt1wGiven) model->B3SOIPDwdvt1w = 0.0; if (!model->B3SOIPDwdvt2wGiven) model->B3SOIPDwdvt2w = 0.0; if (!model->B3SOIPDwu0Given) model->B3SOIPDwu0 = 0.0; if (!model->B3SOIPDwuaGiven) model->B3SOIPDwua = 0.0; if (!model->B3SOIPDwubGiven) model->B3SOIPDwub = 0.0; if (!model->B3SOIPDwucGiven) model->B3SOIPDwuc = 0.0; if (!model->B3SOIPDwvsatGiven) model->B3SOIPDwvsat = 0.0; if (!model->B3SOIPDwa0Given) model->B3SOIPDwa0 = 0.0; if (!model->B3SOIPDwagsGiven) model->B3SOIPDwags = 0.0; if (!model->B3SOIPDwb0Given) model->B3SOIPDwb0 = 0.0; if (!model->B3SOIPDwb1Given) model->B3SOIPDwb1 = 0.0; if (!model->B3SOIPDwketaGiven) model->B3SOIPDwketa = 0.0; if (!model->B3SOIPDwketasGiven) model->B3SOIPDwketas = 0.0; if (!model->B3SOIPDwa1Given) model->B3SOIPDwa1 = 0.0; if (!model->B3SOIPDwa2Given) model->B3SOIPDwa2 = 0.0; if (!model->B3SOIPDwrdswGiven) model->B3SOIPDwrdsw = 0.0; if (!model->B3SOIPDwprwbGiven) model->B3SOIPDwprwb = 0.0; if (!model->B3SOIPDwprwgGiven) model->B3SOIPDwprwg = 0.0; if (!model->B3SOIPDwwrGiven) model->B3SOIPDwwr = 0.0; if (!model->B3SOIPDwnfactorGiven) model->B3SOIPDwnfactor = 0.0; if (!model->B3SOIPDwdwgGiven) model->B3SOIPDwdwg = 0.0; if (!model->B3SOIPDwdwbGiven) model->B3SOIPDwdwb = 0.0; if (!model->B3SOIPDwvoffGiven) model->B3SOIPDwvoff = 0.0; if (!model->B3SOIPDweta0Given) model->B3SOIPDweta0 = 0.0; if (!model->B3SOIPDwetabGiven) model->B3SOIPDwetab = 0.0; if (!model->B3SOIPDwdsubGiven) model->B3SOIPDwdsub = 0.0; if (!model->B3SOIPDwcitGiven) model->B3SOIPDwcit = 0.0; if (!model->B3SOIPDwcdscGiven) model->B3SOIPDwcdsc = 0.0; if (!model->B3SOIPDwcdscbGiven) model->B3SOIPDwcdscb = 0.0; if (!model->B3SOIPDwcdscdGiven) model->B3SOIPDwcdscd = 0.0; if (!model->B3SOIPDwpclmGiven) model->B3SOIPDwpclm = 0.0; if (!model->B3SOIPDwpdibl1Given) model->B3SOIPDwpdibl1 = 0.0; if (!model->B3SOIPDwpdibl2Given) model->B3SOIPDwpdibl2 = 0.0; if (!model->B3SOIPDwpdiblbGiven) model->B3SOIPDwpdiblb = 0.0; if (!model->B3SOIPDwdroutGiven) model->B3SOIPDwdrout = 0.0; if (!model->B3SOIPDwpvagGiven) model->B3SOIPDwpvag = 0.0; if (!model->B3SOIPDwdeltaGiven) model->B3SOIPDwdelta = 0.0; if (!model->B3SOIPDwalpha0Given) model->B3SOIPDwalpha0 = 0.0; if (!model->B3SOIPDwfbjtiiGiven) model->B3SOIPDwfbjtii = 0.0; if (!model->B3SOIPDwbeta0Given) model->B3SOIPDwbeta0 = 0.0; if (!model->B3SOIPDwbeta1Given) model->B3SOIPDwbeta1 = 0.0; if (!model->B3SOIPDwbeta2Given) model->B3SOIPDwbeta2 = 0.0; if (!model->B3SOIPDwvdsatii0Given) model->B3SOIPDwvdsatii0 = 0.0; if (!model->B3SOIPDwliiGiven) model->B3SOIPDwlii = 0.0; if (!model->B3SOIPDwesatiiGiven) model->B3SOIPDwesatii = 0.0; if (!model->B3SOIPDwsii0Given) model->B3SOIPDwsii0 = 0.0; if (!model->B3SOIPDwsii1Given) model->B3SOIPDwsii1 = 0.0; if (!model->B3SOIPDwsii2Given) model->B3SOIPDwsii2 = 0.0; if (!model->B3SOIPDwsiidGiven) model->B3SOIPDwsiid = 0.0; if (!model->B3SOIPDwagidlGiven) model->B3SOIPDwagidl = 0.0; if (!model->B3SOIPDwbgidlGiven) model->B3SOIPDwbgidl = 0.0; if (!model->B3SOIPDwngidlGiven) model->B3SOIPDwngidl = 0.0; if (!model->B3SOIPDwntunGiven) model->B3SOIPDwntun = 0.0; if (!model->B3SOIPDwndiodeGiven) model->B3SOIPDwndiode = 0.0; if (!model->B3SOIPDwnrecf0Given) model->B3SOIPDwnrecf0 = 0.0; if (!model->B3SOIPDwnrecr0Given) model->B3SOIPDwnrecr0 = 0.0; if (!model->B3SOIPDwisbjtGiven) model->B3SOIPDwisbjt = 0.0; if (!model->B3SOIPDwisdifGiven) model->B3SOIPDwisdif = 0.0; if (!model->B3SOIPDwisrecGiven) model->B3SOIPDwisrec = 0.0; if (!model->B3SOIPDwistunGiven) model->B3SOIPDwistun = 0.0; if (!model->B3SOIPDwvrec0Given) model->B3SOIPDwvrec0 = 0.0; if (!model->B3SOIPDwvtun0Given) model->B3SOIPDwvtun0 = 0.0; if (!model->B3SOIPDwnbjtGiven) model->B3SOIPDwnbjt = 0.0; if (!model->B3SOIPDwlbjt0Given) model->B3SOIPDwlbjt0 = 0.0; if (!model->B3SOIPDwvabjtGiven) model->B3SOIPDwvabjt = 0.0; if (!model->B3SOIPDwaelyGiven) model->B3SOIPDwaely = 0.0; if (!model->B3SOIPDwahliGiven) model->B3SOIPDwahli = 0.0; /* CV Model */ if (!model->B3SOIPDwvsdfbGiven) model->B3SOIPDwvsdfb = 0.0; if (!model->B3SOIPDwvsdthGiven) model->B3SOIPDwvsdth = 0.0; if (!model->B3SOIPDwdelvtGiven) model->B3SOIPDwdelvt = 0.0; if (!model->B3SOIPDwacdeGiven) model->B3SOIPDwacde = 0.0; if (!model->B3SOIPDwmoinGiven) model->B3SOIPDwmoin = 0.0; /* Cross-term dependence */ if (!model->B3SOIPDpnpeakGiven) model->B3SOIPDpnpeak = 0.0; if (!model->B3SOIPDpnsubGiven) model->B3SOIPDpnsub = 0.0; if (!model->B3SOIPDpngateGiven) model->B3SOIPDpngate = 0.0; if (!model->B3SOIPDpvth0Given) model->B3SOIPDpvth0 = 0.0; if (!model->B3SOIPDpk1Given) model->B3SOIPDpk1 = 0.0; if (!model->B3SOIPDpk1w1Given) model->B3SOIPDpk1w1 = 0.0; if (!model->B3SOIPDpk1w2Given) model->B3SOIPDpk1w2 = 0.0; if (!model->B3SOIPDpk2Given) model->B3SOIPDpk2 = 0.0; if (!model->B3SOIPDpk3Given) model->B3SOIPDpk3 = 0.0; if (!model->B3SOIPDpk3bGiven) model->B3SOIPDpk3b = 0.0; if (!model->B3SOIPDpkb1Given) model->B3SOIPDpkb1 = 0.0; if (!model->B3SOIPDpw0Given) model->B3SOIPDpw0 = 0.0; if (!model->B3SOIPDpnlxGiven) model->B3SOIPDpnlx = 0.0; if (!model->B3SOIPDpdvt0Given) model->B3SOIPDpdvt0 = 0.0; if (!model->B3SOIPDpdvt1Given) model->B3SOIPDpdvt1 = 0.0; if (!model->B3SOIPDpdvt2Given) model->B3SOIPDpdvt2 = 0.0; if (!model->B3SOIPDpdvt0wGiven) model->B3SOIPDpdvt0w = 0.0; if (!model->B3SOIPDpdvt1wGiven) model->B3SOIPDpdvt1w = 0.0; if (!model->B3SOIPDpdvt2wGiven) model->B3SOIPDpdvt2w = 0.0; if (!model->B3SOIPDpu0Given) model->B3SOIPDpu0 = 0.0; if (!model->B3SOIPDpuaGiven) model->B3SOIPDpua = 0.0; if (!model->B3SOIPDpubGiven) model->B3SOIPDpub = 0.0; if (!model->B3SOIPDpucGiven) model->B3SOIPDpuc = 0.0; if (!model->B3SOIPDpvsatGiven) model->B3SOIPDpvsat = 0.0; if (!model->B3SOIPDpa0Given) model->B3SOIPDpa0 = 0.0; if (!model->B3SOIPDpagsGiven) model->B3SOIPDpags = 0.0; if (!model->B3SOIPDpb0Given) model->B3SOIPDpb0 = 0.0; if (!model->B3SOIPDpb1Given) model->B3SOIPDpb1 = 0.0; if (!model->B3SOIPDpketaGiven) model->B3SOIPDpketa = 0.0; if (!model->B3SOIPDpketasGiven) model->B3SOIPDpketas = 0.0; if (!model->B3SOIPDpa1Given) model->B3SOIPDpa1 = 0.0; if (!model->B3SOIPDpa2Given) model->B3SOIPDpa2 = 0.0; if (!model->B3SOIPDprdswGiven) model->B3SOIPDprdsw = 0.0; if (!model->B3SOIPDpprwbGiven) model->B3SOIPDpprwb = 0.0; if (!model->B3SOIPDpprwgGiven) model->B3SOIPDpprwg = 0.0; if (!model->B3SOIPDpwrGiven) model->B3SOIPDpwr = 0.0; if (!model->B3SOIPDpnfactorGiven) model->B3SOIPDpnfactor = 0.0; if (!model->B3SOIPDpdwgGiven) model->B3SOIPDpdwg = 0.0; if (!model->B3SOIPDpdwbGiven) model->B3SOIPDpdwb = 0.0; if (!model->B3SOIPDpvoffGiven) model->B3SOIPDpvoff = 0.0; if (!model->B3SOIPDpeta0Given) model->B3SOIPDpeta0 = 0.0; if (!model->B3SOIPDpetabGiven) model->B3SOIPDpetab = 0.0; if (!model->B3SOIPDpdsubGiven) model->B3SOIPDpdsub = 0.0; if (!model->B3SOIPDpcitGiven) model->B3SOIPDpcit = 0.0; if (!model->B3SOIPDpcdscGiven) model->B3SOIPDpcdsc = 0.0; if (!model->B3SOIPDpcdscbGiven) model->B3SOIPDpcdscb = 0.0; if (!model->B3SOIPDpcdscdGiven) model->B3SOIPDpcdscd = 0.0; if (!model->B3SOIPDppclmGiven) model->B3SOIPDppclm = 0.0; if (!model->B3SOIPDppdibl1Given) model->B3SOIPDppdibl1 = 0.0; if (!model->B3SOIPDppdibl2Given) model->B3SOIPDppdibl2 = 0.0; if (!model->B3SOIPDppdiblbGiven) model->B3SOIPDppdiblb = 0.0; if (!model->B3SOIPDpdroutGiven) model->B3SOIPDpdrout = 0.0; if (!model->B3SOIPDppvagGiven) model->B3SOIPDppvag = 0.0; if (!model->B3SOIPDpdeltaGiven) model->B3SOIPDpdelta = 0.0; if (!model->B3SOIPDpalpha0Given) model->B3SOIPDpalpha0 = 0.0; if (!model->B3SOIPDpfbjtiiGiven) model->B3SOIPDpfbjtii = 0.0; if (!model->B3SOIPDpbeta0Given) model->B3SOIPDpbeta0 = 0.0; if (!model->B3SOIPDpbeta1Given) model->B3SOIPDpbeta1 = 0.0; if (!model->B3SOIPDpbeta2Given) model->B3SOIPDpbeta2 = 0.0; if (!model->B3SOIPDpvdsatii0Given) model->B3SOIPDpvdsatii0 = 0.0; if (!model->B3SOIPDpliiGiven) model->B3SOIPDplii = 0.0; if (!model->B3SOIPDpesatiiGiven) model->B3SOIPDpesatii = 0.0; if (!model->B3SOIPDpsii0Given) model->B3SOIPDpsii0 = 0.0; if (!model->B3SOIPDpsii1Given) model->B3SOIPDpsii1 = 0.0; if (!model->B3SOIPDpsii2Given) model->B3SOIPDpsii2 = 0.0; if (!model->B3SOIPDpsiidGiven) model->B3SOIPDpsiid = 0.0; if (!model->B3SOIPDpagidlGiven) model->B3SOIPDpagidl = 0.0; if (!model->B3SOIPDpbgidlGiven) model->B3SOIPDpbgidl = 0.0; if (!model->B3SOIPDpngidlGiven) model->B3SOIPDpngidl = 0.0; if (!model->B3SOIPDpntunGiven) model->B3SOIPDpntun = 0.0; if (!model->B3SOIPDpndiodeGiven) model->B3SOIPDpndiode = 0.0; if (!model->B3SOIPDpnrecf0Given) model->B3SOIPDpnrecf0 = 0.0; if (!model->B3SOIPDpnrecr0Given) model->B3SOIPDpnrecr0 = 0.0; if (!model->B3SOIPDpisbjtGiven) model->B3SOIPDpisbjt = 0.0; if (!model->B3SOIPDpisdifGiven) model->B3SOIPDpisdif = 0.0; if (!model->B3SOIPDpisrecGiven) model->B3SOIPDpisrec = 0.0; if (!model->B3SOIPDpistunGiven) model->B3SOIPDpistun = 0.0; if (!model->B3SOIPDpvrec0Given) model->B3SOIPDpvrec0 = 0.0; if (!model->B3SOIPDpvtun0Given) model->B3SOIPDpvtun0 = 0.0; if (!model->B3SOIPDpnbjtGiven) model->B3SOIPDpnbjt = 0.0; if (!model->B3SOIPDplbjt0Given) model->B3SOIPDplbjt0 = 0.0; if (!model->B3SOIPDpvabjtGiven) model->B3SOIPDpvabjt = 0.0; if (!model->B3SOIPDpaelyGiven) model->B3SOIPDpaely = 0.0; if (!model->B3SOIPDpahliGiven) model->B3SOIPDpahli = 0.0; /* CV Model */ if (!model->B3SOIPDpvsdfbGiven) model->B3SOIPDpvsdfb = 0.0; if (!model->B3SOIPDpvsdthGiven) model->B3SOIPDpvsdth = 0.0; if (!model->B3SOIPDpdelvtGiven) model->B3SOIPDpdelvt = 0.0; if (!model->B3SOIPDpacdeGiven) model->B3SOIPDpacde = 0.0; if (!model->B3SOIPDpmoinGiven) model->B3SOIPDpmoin = 0.0; /* Added for binning - END */ if (!model->B3SOIPDcfGiven) model->B3SOIPDcf = 2.0 * EPSOX / PI * log(1.0 + 0.4e-6 / model->B3SOIPDtox); if (!model->B3SOIPDcgdoGiven) { if (model->B3SOIPDdlcGiven && (model->B3SOIPDdlc > 0.0)) { model->B3SOIPDcgdo = model->B3SOIPDdlc * model->B3SOIPDcox - model->B3SOIPDcgdl ; } else model->B3SOIPDcgdo = 0.6 * model->B3SOIPDxj * model->B3SOIPDcox; } if (!model->B3SOIPDcgsoGiven) { if (model->B3SOIPDdlcGiven && (model->B3SOIPDdlc > 0.0)) { model->B3SOIPDcgso = model->B3SOIPDdlc * model->B3SOIPDcox - model->B3SOIPDcgsl ; } else model->B3SOIPDcgso = 0.6 * model->B3SOIPDxj * model->B3SOIPDcox; } if (!model->B3SOIPDcgeoGiven) { model->B3SOIPDcgeo = 0.0; } if (!model->B3SOIPDxpartGiven) model->B3SOIPDxpart = 0.0; if (!model->B3SOIPDsheetResistanceGiven) model->B3SOIPDsheetResistance = 0.0; if (!model->B3SOIPDcsdeswGiven) model->B3SOIPDcsdesw = 0.0; if (!model->B3SOIPDunitLengthGateSidewallJctCapGiven) model->B3SOIPDunitLengthGateSidewallJctCap = 1e-10; if (!model->B3SOIPDGatesidewallJctPotentialGiven) model->B3SOIPDGatesidewallJctPotential = 0.7; if (!model->B3SOIPDbodyJctGateSideGradingCoeffGiven) model->B3SOIPDbodyJctGateSideGradingCoeff = 0.5; if (!model->B3SOIPDoxideTrapDensityAGiven) { if (model->B3SOIPDtype == NMOS) model->B3SOIPDoxideTrapDensityA = 1e20; else model->B3SOIPDoxideTrapDensityA=9.9e18; } if (!model->B3SOIPDoxideTrapDensityBGiven) { if (model->B3SOIPDtype == NMOS) model->B3SOIPDoxideTrapDensityB = 5e4; else model->B3SOIPDoxideTrapDensityB = 2.4e3; } if (!model->B3SOIPDoxideTrapDensityCGiven) { if (model->B3SOIPDtype == NMOS) model->B3SOIPDoxideTrapDensityC = -1.4e-12; else model->B3SOIPDoxideTrapDensityC = 1.4e-12; } if (!model->B3SOIPDemGiven) model->B3SOIPDem = 4.1e7; /* V/m */ if (!model->B3SOIPDefGiven) model->B3SOIPDef = 1.0; if (!model->B3SOIPDafGiven) model->B3SOIPDaf = 1.0; if (!model->B3SOIPDkfGiven) model->B3SOIPDkf = 0.0; if (!model->B3SOIPDnoifGiven) model->B3SOIPDnoif = 1.0; /* loop through all the instances of the model */ for (here = B3SOIPDinstances(model); here != NULL ; here=B3SOIPDnextInstance(here)) { /* allocate a chunk of the state vector */ here->B3SOIPDstates = *states; *states += B3SOIPDnumStates; /* perform the parameter defaulting */ if (!here->B3SOIPDdrainAreaGiven) here->B3SOIPDdrainArea = 0.0; if (!here->B3SOIPDdrainPerimeterGiven) here->B3SOIPDdrainPerimeter = 0.0; if (!here->B3SOIPDdrainSquaresGiven) here->B3SOIPDdrainSquares = 1.0; if (!here->B3SOIPDicVBSGiven) here->B3SOIPDicVBS = 0; if (!here->B3SOIPDicVDSGiven) here->B3SOIPDicVDS = 0; if (!here->B3SOIPDicVGSGiven) here->B3SOIPDicVGS = 0; if (!here->B3SOIPDicVESGiven) here->B3SOIPDicVES = 0; if (!here->B3SOIPDicVPSGiven) here->B3SOIPDicVPS = 0; if (!here->B3SOIPDbjtoffGiven) here->B3SOIPDbjtoff = 0; if (!here->B3SOIPDdebugModGiven) here->B3SOIPDdebugMod = 0; if (!here->B3SOIPDrth0Given) here->B3SOIPDrth0 = model->B3SOIPDrth0; if (!here->B3SOIPDcth0Given) here->B3SOIPDcth0 = model->B3SOIPDcth0; if (!here->B3SOIPDbodySquaresGiven) here->B3SOIPDbodySquares = 1.0; if (!here->B3SOIPDfrbodyGiven) here->B3SOIPDfrbody = 1.0; if (!here->B3SOIPDlGiven) here->B3SOIPDl = 5e-6; if (!here->B3SOIPDsourceAreaGiven) here->B3SOIPDsourceArea = 0; if (!here->B3SOIPDsourcePerimeterGiven) here->B3SOIPDsourcePerimeter = 0; if (!here->B3SOIPDsourceSquaresGiven) here->B3SOIPDsourceSquares = 1; if (!here->B3SOIPDwGiven) here->B3SOIPDw = 5e-6; if (!here->B3SOIPDmGiven) here->B3SOIPDm = 1; /* v2.0 release */ if (!here->B3SOIPDnbcGiven) here->B3SOIPDnbc = 0; if (!here->B3SOIPDnsegGiven) here->B3SOIPDnseg = 1; if (!here->B3SOIPDpdbcpGiven) here->B3SOIPDpdbcp = 0; if (!here->B3SOIPDpsbcpGiven) here->B3SOIPDpsbcp = 0; if (!here->B3SOIPDagbcpGiven) here->B3SOIPDagbcp = 0; if (!here->B3SOIPDaebcpGiven) here->B3SOIPDaebcp = 0; if (!here->B3SOIPDoffGiven) here->B3SOIPDoff = 0; /* process drain series resistance */ if ((model->B3SOIPDsheetResistance > 0.0) && (here->B3SOIPDdrainSquares > 0.0 ) && (here->B3SOIPDdNodePrime == 0)) { error = CKTmkVolt(ckt,&tmp,here->B3SOIPDname,"drain"); if(error) return(error); here->B3SOIPDdNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } else { here->B3SOIPDdNodePrime = here->B3SOIPDdNode; } /* process source series resistance */ if ((model->B3SOIPDsheetResistance > 0.0) && (here->B3SOIPDsourceSquares > 0.0 ) && (here->B3SOIPDsNodePrime == 0)) { error = CKTmkVolt(ckt,&tmp,here->B3SOIPDname,"source"); if(error) return(error); here->B3SOIPDsNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } else { here->B3SOIPDsNodePrime = here->B3SOIPDsNode; } /* process effective silicon film thickness */ model->B3SOIPDcbox = 3.453133e-11 / model->B3SOIPDtbox; model->B3SOIPDcsi = 1.03594e-10 / model->B3SOIPDtsi; Cboxt = model->B3SOIPDcbox * model->B3SOIPDcsi / (model->B3SOIPDcbox + model->B3SOIPDcsi); model->B3SOIPDqsi = Charge_q*model->B3SOIPDnpeak*1e6*model->B3SOIPDtsi; here->B3SOIPDfloat = 0; here->B3SOIPDpNode = here->B3SOIPDpNodeExt; here->B3SOIPDbNode = here->B3SOIPDbNodeExt; here->B3SOIPDtempNode = here->B3SOIPDtempNodeExt; if (here->B3SOIPDpNode == -1) { /* floating body case -- 4-node */ error = CKTmkVolt(ckt,&tmp,here->B3SOIPDname,"Body"); if (error) return(error); here->B3SOIPDbNode = tmp->number; here->B3SOIPDpNode = 0; here->B3SOIPDfloat = 1; here->B3SOIPDbodyMod = 0; } else /* the 5th Node has been assigned */ { if (!here->B3SOIPDtnodeoutGiven) { /* if t-node not assigned */ if (here->B3SOIPDbNode == -1) { /* 5-node body tie, bNode has not been assigned */ if ((model->B3SOIPDrbody == 0.0) && (model->B3SOIPDrbsh == 0.0)) { /* ideal body tie, pNode is not used */ here->B3SOIPDbNode = here->B3SOIPDpNode; here->B3SOIPDbodyMod = 2; } else { /* nonideal body tie */ error = CKTmkVolt(ckt, &tmp, here->B3SOIPDname, "Body"); if (error) return(error); here->B3SOIPDbNode = tmp->number; here->B3SOIPDbodyMod = 1; } } else { /* 6-node body tie, bNode has been assigned */ if ((model->B3SOIPDrbody == 0.0) && (model->B3SOIPDrbsh == 0.0)) { printf("\n Warning: model parameter rbody=0!\n"); model->B3SOIPDrbody = 1e0; here->B3SOIPDbodyMod = 1; } else { /* nonideal body tie */ here->B3SOIPDbodyMod = 1; } } } else { /* t-node assigned */ if (here->B3SOIPDbNode == -1) { /* 4 nodes & t-node, floating body */ error = CKTmkVolt(ckt, &tmp, here->B3SOIPDname, "Body"); if (error) return(error); here->B3SOIPDbNode = tmp->number; here->B3SOIPDtempNode = here->B3SOIPDpNode; here->B3SOIPDpNode = 0; here->B3SOIPDfloat = 1; here->B3SOIPDbodyMod = 0; } else { /* 5 or 6 nodes & t-node, body-contact device */ if (here->B3SOIPDtempNode == -1) { /* 5 nodes & tnode */ if ((model->B3SOIPDrbody == 0.0) && (model->B3SOIPDrbsh == 0.0)) { /* ideal body tie, pNode is not used */ here->B3SOIPDtempNode = here->B3SOIPDbNode; here->B3SOIPDbNode = here->B3SOIPDpNode; here->B3SOIPDbodyMod = 2; } else { /* nonideal body tie */ here->B3SOIPDtempNode = here->B3SOIPDbNode; error = CKTmkVolt(ckt, &tmp, here->B3SOIPDname, "Body"); if (error) return(error); here->B3SOIPDbNode = tmp->number; here->B3SOIPDbodyMod = 1; } } else { /* 6 nodes & t-node */ if ((model->B3SOIPDrbody == 0.0) && (model->B3SOIPDrbsh == 0.0)) { printf("\n Warning: model parameter rbody=0!\n"); model->B3SOIPDrbody = 1e0; here->B3SOIPDbodyMod = 1; } else { /* nonideal body tie */ here->B3SOIPDbodyMod = 1; } } } } } if ((model->B3SOIPDshMod == 1) && (here->B3SOIPDrth0!=0)) { if (here->B3SOIPDtempNode == -1) { error = CKTmkVolt(ckt,&tmp,here->B3SOIPDname,"Temp"); if (error) return(error); here->B3SOIPDtempNode = tmp->number; } } else { here->B3SOIPDtempNode = 0; } /* here for debugging purpose only */ if (here->B3SOIPDdebugMod != 0) { /* The real Vbs value */ error = CKTmkVolt(ckt, &tmp, here->B3SOIPDname, "Vbs"); if(error) return(error); here->B3SOIPDvbsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIPDname, "Ids"); if(error) return(error); here->B3SOIPDidsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIPDname, "Ic"); if(error) return(error); here->B3SOIPDicNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIPDname, "Ibs"); if(error) return(error); here->B3SOIPDibsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIPDname, "Ibd"); if(error) return(error); here->B3SOIPDibdNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIPDname, "Iii"); if(error) return(error); here->B3SOIPDiiiNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIPDname, "Ig"); if(error) return(error); here->B3SOIPDigNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIPDname, "Gigg"); if(error) return(error); here->B3SOIPDgiggNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIPDname, "Gigd"); if(error) return(error); here->B3SOIPDgigdNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIPDname, "Gigb"); if(error) return(error); here->B3SOIPDgigbNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIPDname, "Igidl"); if(error) return(error); here->B3SOIPDigidlNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIPDname, "Itun"); if(error) return(error); here->B3SOIPDitunNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIPDname, "Ibp"); if(error) return(error); here->B3SOIPDibpNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIPDname, "Cbb"); if(error) return(error); here->B3SOIPDcbbNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIPDname, "Cbd"); if(error) return(error); here->B3SOIPDcbdNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIPDname, "Cbg"); if(error) return(error); here->B3SOIPDcbgNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIPDname, "Qbf"); if(error) return(error); here->B3SOIPDqbfNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIPDname, "Qjs"); if(error) return(error); here->B3SOIPDqjsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIPDname, "Qjd"); if(error) return(error); here->B3SOIPDqjdNode = tmp->number; } /* set Sparse Matrix Pointers */ /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) if ((model->B3SOIPDshMod == 1) && (here->B3SOIPDrth0!=0.0)) { TSTALLOC(B3SOIPDTemptempPtr, B3SOIPDtempNode, B3SOIPDtempNode); TSTALLOC(B3SOIPDTempdpPtr, B3SOIPDtempNode, B3SOIPDdNodePrime); TSTALLOC(B3SOIPDTempspPtr, B3SOIPDtempNode, B3SOIPDsNodePrime); TSTALLOC(B3SOIPDTempgPtr, B3SOIPDtempNode, B3SOIPDgNode); TSTALLOC(B3SOIPDTempbPtr, B3SOIPDtempNode, B3SOIPDbNode); TSTALLOC(B3SOIPDGtempPtr, B3SOIPDgNode, B3SOIPDtempNode); TSTALLOC(B3SOIPDDPtempPtr, B3SOIPDdNodePrime, B3SOIPDtempNode); TSTALLOC(B3SOIPDSPtempPtr, B3SOIPDsNodePrime, B3SOIPDtempNode); TSTALLOC(B3SOIPDEtempPtr, B3SOIPDeNode, B3SOIPDtempNode); TSTALLOC(B3SOIPDBtempPtr, B3SOIPDbNode, B3SOIPDtempNode); if (here->B3SOIPDbodyMod == 1) { TSTALLOC(B3SOIPDPtempPtr, B3SOIPDpNode, B3SOIPDtempNode); } } if (here->B3SOIPDbodyMod == 2) { /* Don't create any Jacobian entry for pNode */ } else if (here->B3SOIPDbodyMod == 1) { TSTALLOC(B3SOIPDBpPtr, B3SOIPDbNode, B3SOIPDpNode); TSTALLOC(B3SOIPDPbPtr, B3SOIPDpNode, B3SOIPDbNode); TSTALLOC(B3SOIPDPpPtr, B3SOIPDpNode, B3SOIPDpNode); } TSTALLOC(B3SOIPDEbPtr, B3SOIPDeNode, B3SOIPDbNode); TSTALLOC(B3SOIPDGbPtr, B3SOIPDgNode, B3SOIPDbNode); TSTALLOC(B3SOIPDDPbPtr, B3SOIPDdNodePrime, B3SOIPDbNode); TSTALLOC(B3SOIPDSPbPtr, B3SOIPDsNodePrime, B3SOIPDbNode); TSTALLOC(B3SOIPDBePtr, B3SOIPDbNode, B3SOIPDeNode); TSTALLOC(B3SOIPDBgPtr, B3SOIPDbNode, B3SOIPDgNode); TSTALLOC(B3SOIPDBdpPtr, B3SOIPDbNode, B3SOIPDdNodePrime); TSTALLOC(B3SOIPDBspPtr, B3SOIPDbNode, B3SOIPDsNodePrime); TSTALLOC(B3SOIPDBbPtr, B3SOIPDbNode, B3SOIPDbNode); TSTALLOC(B3SOIPDEgPtr, B3SOIPDeNode, B3SOIPDgNode); TSTALLOC(B3SOIPDEdpPtr, B3SOIPDeNode, B3SOIPDdNodePrime); TSTALLOC(B3SOIPDEspPtr, B3SOIPDeNode, B3SOIPDsNodePrime); TSTALLOC(B3SOIPDGePtr, B3SOIPDgNode, B3SOIPDeNode); TSTALLOC(B3SOIPDDPePtr, B3SOIPDdNodePrime, B3SOIPDeNode); TSTALLOC(B3SOIPDSPePtr, B3SOIPDsNodePrime, B3SOIPDeNode); TSTALLOC(B3SOIPDEePtr, B3SOIPDeNode, B3SOIPDeNode); TSTALLOC(B3SOIPDGgPtr, B3SOIPDgNode, B3SOIPDgNode); TSTALLOC(B3SOIPDGdpPtr, B3SOIPDgNode, B3SOIPDdNodePrime); TSTALLOC(B3SOIPDGspPtr, B3SOIPDgNode, B3SOIPDsNodePrime); TSTALLOC(B3SOIPDDPgPtr, B3SOIPDdNodePrime, B3SOIPDgNode); TSTALLOC(B3SOIPDDPdpPtr, B3SOIPDdNodePrime, B3SOIPDdNodePrime); TSTALLOC(B3SOIPDDPspPtr, B3SOIPDdNodePrime, B3SOIPDsNodePrime); TSTALLOC(B3SOIPDDPdPtr, B3SOIPDdNodePrime, B3SOIPDdNode); TSTALLOC(B3SOIPDSPgPtr, B3SOIPDsNodePrime, B3SOIPDgNode); TSTALLOC(B3SOIPDSPdpPtr, B3SOIPDsNodePrime, B3SOIPDdNodePrime); TSTALLOC(B3SOIPDSPspPtr, B3SOIPDsNodePrime, B3SOIPDsNodePrime); TSTALLOC(B3SOIPDSPsPtr, B3SOIPDsNodePrime, B3SOIPDsNode); TSTALLOC(B3SOIPDDdPtr, B3SOIPDdNode, B3SOIPDdNode); TSTALLOC(B3SOIPDDdpPtr, B3SOIPDdNode, B3SOIPDdNodePrime); TSTALLOC(B3SOIPDSsPtr, B3SOIPDsNode, B3SOIPDsNode); TSTALLOC(B3SOIPDSspPtr, B3SOIPDsNode, B3SOIPDsNodePrime); /* here for debugging purpose only */ if (here->B3SOIPDdebugMod != 0) { TSTALLOC(B3SOIPDVbsPtr, B3SOIPDvbsNode, B3SOIPDvbsNode); TSTALLOC(B3SOIPDIdsPtr, B3SOIPDidsNode, B3SOIPDidsNode); TSTALLOC(B3SOIPDIcPtr, B3SOIPDicNode, B3SOIPDicNode); TSTALLOC(B3SOIPDIbsPtr, B3SOIPDibsNode, B3SOIPDibsNode); TSTALLOC(B3SOIPDIbdPtr, B3SOIPDibdNode, B3SOIPDibdNode); TSTALLOC(B3SOIPDIiiPtr, B3SOIPDiiiNode, B3SOIPDiiiNode); TSTALLOC(B3SOIPDIgPtr, B3SOIPDigNode, B3SOIPDigNode); TSTALLOC(B3SOIPDGiggPtr, B3SOIPDgiggNode, B3SOIPDgiggNode); TSTALLOC(B3SOIPDGigdPtr, B3SOIPDgigdNode, B3SOIPDgigdNode); TSTALLOC(B3SOIPDGigbPtr, B3SOIPDgigbNode, B3SOIPDgigbNode); TSTALLOC(B3SOIPDIgidlPtr, B3SOIPDigidlNode, B3SOIPDigidlNode); TSTALLOC(B3SOIPDItunPtr, B3SOIPDitunNode, B3SOIPDitunNode); TSTALLOC(B3SOIPDIbpPtr, B3SOIPDibpNode, B3SOIPDibpNode); TSTALLOC(B3SOIPDCbbPtr, B3SOIPDcbbNode, B3SOIPDcbbNode); TSTALLOC(B3SOIPDCbdPtr, B3SOIPDcbdNode, B3SOIPDcbdNode); TSTALLOC(B3SOIPDCbgPtr, B3SOIPDcbgNode, B3SOIPDcbgNode); TSTALLOC(B3SOIPDQbfPtr, B3SOIPDqbfNode, B3SOIPDqbfNode); TSTALLOC(B3SOIPDQjsPtr, B3SOIPDqjsNode, B3SOIPDqjsNode); TSTALLOC(B3SOIPDQjdPtr, B3SOIPDqjdNode, B3SOIPDqjdNode); } } } return(OK); } int B3SOIPDunsetup( GENmodel *inModel, CKTcircuit *ckt) { B3SOIPDmodel *model; B3SOIPDinstance *here; for (model = (B3SOIPDmodel *)inModel; model != NULL; model = B3SOIPDnextModel(model)) { for (here = B3SOIPDinstances(model); here != NULL; here=B3SOIPDnextInstance(here)) { /* here for debugging purpose only */ if (here->B3SOIPDqjdNode > 0) CKTdltNNum(ckt, here->B3SOIPDqjdNode); here->B3SOIPDqjdNode = 0; if (here->B3SOIPDqjsNode > 0) CKTdltNNum(ckt, here->B3SOIPDqjsNode); here->B3SOIPDqjsNode = 0; if (here->B3SOIPDqbfNode > 0) CKTdltNNum(ckt, here->B3SOIPDqbfNode); here->B3SOIPDqbfNode = 0; if (here->B3SOIPDcbgNode > 0) CKTdltNNum(ckt, here->B3SOIPDcbgNode); here->B3SOIPDcbgNode = 0; if (here->B3SOIPDcbdNode > 0) CKTdltNNum(ckt, here->B3SOIPDcbdNode); here->B3SOIPDcbdNode = 0; if (here->B3SOIPDcbbNode > 0) CKTdltNNum(ckt, here->B3SOIPDcbbNode); here->B3SOIPDcbbNode = 0; if (here->B3SOIPDibpNode > 0) CKTdltNNum(ckt, here->B3SOIPDibpNode); here->B3SOIPDibpNode = 0; if (here->B3SOIPDitunNode > 0) CKTdltNNum(ckt, here->B3SOIPDitunNode); here->B3SOIPDitunNode = 0; if (here->B3SOIPDigidlNode > 0) CKTdltNNum(ckt, here->B3SOIPDigidlNode); here->B3SOIPDigidlNode = 0; if (here->B3SOIPDgigbNode > 0) CKTdltNNum(ckt, here->B3SOIPDgigbNode); here->B3SOIPDgigbNode = 0; if (here->B3SOIPDgigdNode > 0) CKTdltNNum(ckt, here->B3SOIPDgigdNode); here->B3SOIPDgigdNode = 0; if (here->B3SOIPDgiggNode > 0) CKTdltNNum(ckt, here->B3SOIPDgiggNode); here->B3SOIPDgiggNode = 0; if (here->B3SOIPDigNode > 0) CKTdltNNum(ckt, here->B3SOIPDigNode); here->B3SOIPDigNode = 0; if (here->B3SOIPDiiiNode > 0) CKTdltNNum(ckt, here->B3SOIPDiiiNode); here->B3SOIPDiiiNode = 0; if (here->B3SOIPDibdNode > 0) CKTdltNNum(ckt, here->B3SOIPDibdNode); here->B3SOIPDibdNode = 0; if (here->B3SOIPDibsNode > 0) CKTdltNNum(ckt, here->B3SOIPDibsNode); here->B3SOIPDibsNode = 0; if (here->B3SOIPDicNode > 0) CKTdltNNum(ckt, here->B3SOIPDicNode); here->B3SOIPDicNode = 0; if (here->B3SOIPDidsNode > 0) CKTdltNNum(ckt, here->B3SOIPDidsNode); here->B3SOIPDidsNode = 0; if (here->B3SOIPDvbsNode > 0) CKTdltNNum(ckt, here->B3SOIPDvbsNode); here->B3SOIPDvbsNode = 0; if (here->B3SOIPDtempNode > 0 && here->B3SOIPDtempNode != here->B3SOIPDtempNodeExt && here->B3SOIPDtempNode != here->B3SOIPDbNodeExt && here->B3SOIPDtempNode != here->B3SOIPDpNodeExt) CKTdltNNum(ckt, here->B3SOIPDtempNode); here->B3SOIPDtempNode = 0; if (here->B3SOIPDbNode > 0 && here->B3SOIPDbNode != here->B3SOIPDbNodeExt && here->B3SOIPDbNode != here->B3SOIPDpNodeExt) CKTdltNNum(ckt, here->B3SOIPDbNode); here->B3SOIPDbNode = 0; here->B3SOIPDpNode = 0; if (here->B3SOIPDsNodePrime > 0 && here->B3SOIPDsNodePrime != here->B3SOIPDsNode) CKTdltNNum(ckt, here->B3SOIPDsNodePrime); here->B3SOIPDsNodePrime = 0; if (here->B3SOIPDdNodePrime > 0 && here->B3SOIPDdNodePrime != here->B3SOIPDdNode) CKTdltNNum(ckt, here->B3SOIPDdNodePrime); here->B3SOIPDdNodePrime = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/b3soipdgetic.c0000644000175000017500000000311313546075722024117 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soipdgetic.c 98/5/01 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.2.3 02/3/5 Pin Su * BSIMPD2.2.3 release */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b3soipddef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIPDgetic(GENmodel *inModel, CKTcircuit *ckt) { B3SOIPDmodel *model = (B3SOIPDmodel*)inModel; B3SOIPDinstance *here; for (; model ; model = B3SOIPDnextModel(model)) { for (here = B3SOIPDinstances(model); here; here = B3SOIPDnextInstance(here)) { if(!here->B3SOIPDicVBSGiven) { here->B3SOIPDicVBS = *(ckt->CKTrhs + here->B3SOIPDbNode) - *(ckt->CKTrhs + here->B3SOIPDsNode); } if (!here->B3SOIPDicVDSGiven) { here->B3SOIPDicVDS = *(ckt->CKTrhs + here->B3SOIPDdNode) - *(ckt->CKTrhs + here->B3SOIPDsNode); } if (!here->B3SOIPDicVGSGiven) { here->B3SOIPDicVGS = *(ckt->CKTrhs + here->B3SOIPDgNode) - *(ckt->CKTrhs + here->B3SOIPDsNode); } if (!here->B3SOIPDicVESGiven) { here->B3SOIPDicVES = *(ckt->CKTrhs + here->B3SOIPDeNode) - *(ckt->CKTrhs + here->B3SOIPDsNode); } if (!here->B3SOIPDicVPSGiven) { here->B3SOIPDicVPS = *(ckt->CKTrhs + here->B3SOIPDpNode) - *(ckt->CKTrhs + here->B3SOIPDsNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/b3soipdmpar.c0000644000175000017500000020700713546075722023773 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soipdmpar.c 98/5/01 Modified by Pin Su and Jan Feng 99/2/15 Modified by Pin Su 99/4/30 Modified by Wei Jin 99/9/27 Modified by Pin Su 00/3/1 Modified by Pin Su 01/2/15 Modified by Pin Su 02/3/5 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.2.3 02/3/5 Pin Su * BSIMPD2.2.3 release */ #include "ngspice/ngspice.h" #include "b3soipddef.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIPDmParam(int param, IFvalue *value, GENmodel *inMod) { B3SOIPDmodel *mod = (B3SOIPDmodel*)inMod; switch(param) { case B3SOIPD_MOD_MOBMOD : mod->B3SOIPDmobMod = value->iValue; mod->B3SOIPDmobModGiven = TRUE; break; case B3SOIPD_MOD_BINUNIT : mod->B3SOIPDbinUnit = value->iValue; mod->B3SOIPDbinUnitGiven = TRUE; break; case B3SOIPD_MOD_PARAMCHK : mod->B3SOIPDparamChk = value->iValue; mod->B3SOIPDparamChkGiven = TRUE; break; case B3SOIPD_MOD_CAPMOD : mod->B3SOIPDcapMod = value->iValue; mod->B3SOIPDcapModGiven = TRUE; break; case B3SOIPD_MOD_SHMOD : mod->B3SOIPDshMod = value->iValue; mod->B3SOIPDshModGiven = TRUE; break; case B3SOIPD_MOD_NOIMOD : mod->B3SOIPDnoiMod = value->iValue; mod->B3SOIPDnoiModGiven = TRUE; break; case B3SOIPD_MOD_VERSION : mod->B3SOIPDversion = value->rValue; mod->B3SOIPDversionGiven = TRUE; break; case B3SOIPD_MOD_TOX : mod->B3SOIPDtox = value->rValue; mod->B3SOIPDtoxGiven = TRUE; break; /* v2.2.3 */ case B3SOIPD_MOD_DTOXCV : mod->B3SOIPDdtoxcv = value->rValue; mod->B3SOIPDdtoxcvGiven = TRUE; break; case B3SOIPD_MOD_CDSC : mod->B3SOIPDcdsc = value->rValue; mod->B3SOIPDcdscGiven = TRUE; break; case B3SOIPD_MOD_CDSCB : mod->B3SOIPDcdscb = value->rValue; mod->B3SOIPDcdscbGiven = TRUE; break; case B3SOIPD_MOD_CDSCD : mod->B3SOIPDcdscd = value->rValue; mod->B3SOIPDcdscdGiven = TRUE; break; case B3SOIPD_MOD_CIT : mod->B3SOIPDcit = value->rValue; mod->B3SOIPDcitGiven = TRUE; break; case B3SOIPD_MOD_NFACTOR : mod->B3SOIPDnfactor = value->rValue; mod->B3SOIPDnfactorGiven = TRUE; break; case B3SOIPD_MOD_VSAT: mod->B3SOIPDvsat = value->rValue; mod->B3SOIPDvsatGiven = TRUE; break; case B3SOIPD_MOD_A0: mod->B3SOIPDa0 = value->rValue; mod->B3SOIPDa0Given = TRUE; break; case B3SOIPD_MOD_AGS: mod->B3SOIPDags= value->rValue; mod->B3SOIPDagsGiven = TRUE; break; case B3SOIPD_MOD_A1: mod->B3SOIPDa1 = value->rValue; mod->B3SOIPDa1Given = TRUE; break; case B3SOIPD_MOD_A2: mod->B3SOIPDa2 = value->rValue; mod->B3SOIPDa2Given = TRUE; break; case B3SOIPD_MOD_AT: mod->B3SOIPDat = value->rValue; mod->B3SOIPDatGiven = TRUE; break; case B3SOIPD_MOD_KETA: mod->B3SOIPDketa = value->rValue; mod->B3SOIPDketaGiven = TRUE; break; case B3SOIPD_MOD_NSUB: mod->B3SOIPDnsub = value->rValue; mod->B3SOIPDnsubGiven = TRUE; break; case B3SOIPD_MOD_NPEAK: mod->B3SOIPDnpeak = value->rValue; mod->B3SOIPDnpeakGiven = TRUE; if (mod->B3SOIPDnpeak > 1.0e20) mod->B3SOIPDnpeak *= 1.0e-6; break; case B3SOIPD_MOD_NGATE: mod->B3SOIPDngate = value->rValue; mod->B3SOIPDngateGiven = TRUE; if (mod->B3SOIPDngate > 1.0e23) mod->B3SOIPDngate *= 1.0e-6; break; case B3SOIPD_MOD_GAMMA1: mod->B3SOIPDgamma1 = value->rValue; mod->B3SOIPDgamma1Given = TRUE; break; case B3SOIPD_MOD_GAMMA2: mod->B3SOIPDgamma2 = value->rValue; mod->B3SOIPDgamma2Given = TRUE; break; case B3SOIPD_MOD_VBX: mod->B3SOIPDvbx = value->rValue; mod->B3SOIPDvbxGiven = TRUE; break; case B3SOIPD_MOD_VBM: mod->B3SOIPDvbm = value->rValue; mod->B3SOIPDvbmGiven = TRUE; break; case B3SOIPD_MOD_XT: mod->B3SOIPDxt = value->rValue; mod->B3SOIPDxtGiven = TRUE; break; case B3SOIPD_MOD_K1: mod->B3SOIPDk1 = value->rValue; mod->B3SOIPDk1Given = TRUE; break; case B3SOIPD_MOD_KT1: mod->B3SOIPDkt1 = value->rValue; mod->B3SOIPDkt1Given = TRUE; break; case B3SOIPD_MOD_KT1L: mod->B3SOIPDkt1l = value->rValue; mod->B3SOIPDkt1lGiven = TRUE; break; case B3SOIPD_MOD_KT2: mod->B3SOIPDkt2 = value->rValue; mod->B3SOIPDkt2Given = TRUE; break; case B3SOIPD_MOD_K2: mod->B3SOIPDk2 = value->rValue; mod->B3SOIPDk2Given = TRUE; break; case B3SOIPD_MOD_K3: mod->B3SOIPDk3 = value->rValue; mod->B3SOIPDk3Given = TRUE; break; case B3SOIPD_MOD_K3B: mod->B3SOIPDk3b = value->rValue; mod->B3SOIPDk3bGiven = TRUE; break; case B3SOIPD_MOD_NLX: mod->B3SOIPDnlx = value->rValue; mod->B3SOIPDnlxGiven = TRUE; break; case B3SOIPD_MOD_W0: mod->B3SOIPDw0 = value->rValue; mod->B3SOIPDw0Given = TRUE; break; case B3SOIPD_MOD_DVT0: mod->B3SOIPDdvt0 = value->rValue; mod->B3SOIPDdvt0Given = TRUE; break; case B3SOIPD_MOD_DVT1: mod->B3SOIPDdvt1 = value->rValue; mod->B3SOIPDdvt1Given = TRUE; break; case B3SOIPD_MOD_DVT2: mod->B3SOIPDdvt2 = value->rValue; mod->B3SOIPDdvt2Given = TRUE; break; case B3SOIPD_MOD_DVT0W: mod->B3SOIPDdvt0w = value->rValue; mod->B3SOIPDdvt0wGiven = TRUE; break; case B3SOIPD_MOD_DVT1W: mod->B3SOIPDdvt1w = value->rValue; mod->B3SOIPDdvt1wGiven = TRUE; break; case B3SOIPD_MOD_DVT2W: mod->B3SOIPDdvt2w = value->rValue; mod->B3SOIPDdvt2wGiven = TRUE; break; case B3SOIPD_MOD_DROUT: mod->B3SOIPDdrout = value->rValue; mod->B3SOIPDdroutGiven = TRUE; break; case B3SOIPD_MOD_DSUB: mod->B3SOIPDdsub = value->rValue; mod->B3SOIPDdsubGiven = TRUE; break; case B3SOIPD_MOD_VTH0: mod->B3SOIPDvth0 = value->rValue; mod->B3SOIPDvth0Given = TRUE; break; case B3SOIPD_MOD_UA: mod->B3SOIPDua = value->rValue; mod->B3SOIPDuaGiven = TRUE; break; case B3SOIPD_MOD_UA1: mod->B3SOIPDua1 = value->rValue; mod->B3SOIPDua1Given = TRUE; break; case B3SOIPD_MOD_UB: mod->B3SOIPDub = value->rValue; mod->B3SOIPDubGiven = TRUE; break; case B3SOIPD_MOD_UB1: mod->B3SOIPDub1 = value->rValue; mod->B3SOIPDub1Given = TRUE; break; case B3SOIPD_MOD_UC: mod->B3SOIPDuc = value->rValue; mod->B3SOIPDucGiven = TRUE; break; case B3SOIPD_MOD_UC1: mod->B3SOIPDuc1 = value->rValue; mod->B3SOIPDuc1Given = TRUE; break; case B3SOIPD_MOD_U0 : mod->B3SOIPDu0 = value->rValue; mod->B3SOIPDu0Given = TRUE; break; case B3SOIPD_MOD_UTE : mod->B3SOIPDute = value->rValue; mod->B3SOIPDuteGiven = TRUE; break; case B3SOIPD_MOD_VOFF: mod->B3SOIPDvoff = value->rValue; mod->B3SOIPDvoffGiven = TRUE; break; case B3SOIPD_MOD_DELTA : mod->B3SOIPDdelta = value->rValue; mod->B3SOIPDdeltaGiven = TRUE; break; case B3SOIPD_MOD_RDSW: mod->B3SOIPDrdsw = value->rValue; mod->B3SOIPDrdswGiven = TRUE; break; case B3SOIPD_MOD_PRWG: mod->B3SOIPDprwg = value->rValue; mod->B3SOIPDprwgGiven = TRUE; break; case B3SOIPD_MOD_PRWB: mod->B3SOIPDprwb = value->rValue; mod->B3SOIPDprwbGiven = TRUE; break; case B3SOIPD_MOD_PRT: mod->B3SOIPDprt = value->rValue; mod->B3SOIPDprtGiven = TRUE; break; case B3SOIPD_MOD_ETA0: mod->B3SOIPDeta0 = value->rValue; mod->B3SOIPDeta0Given = TRUE; break; case B3SOIPD_MOD_ETAB: mod->B3SOIPDetab = value->rValue; mod->B3SOIPDetabGiven = TRUE; break; case B3SOIPD_MOD_PCLM: mod->B3SOIPDpclm = value->rValue; mod->B3SOIPDpclmGiven = TRUE; break; case B3SOIPD_MOD_PDIBL1: mod->B3SOIPDpdibl1 = value->rValue; mod->B3SOIPDpdibl1Given = TRUE; break; case B3SOIPD_MOD_PDIBL2: mod->B3SOIPDpdibl2 = value->rValue; mod->B3SOIPDpdibl2Given = TRUE; break; case B3SOIPD_MOD_PDIBLB: mod->B3SOIPDpdiblb = value->rValue; mod->B3SOIPDpdiblbGiven = TRUE; break; case B3SOIPD_MOD_PVAG: mod->B3SOIPDpvag = value->rValue; mod->B3SOIPDpvagGiven = TRUE; break; case B3SOIPD_MOD_WR : mod->B3SOIPDwr = value->rValue; mod->B3SOIPDwrGiven = TRUE; break; case B3SOIPD_MOD_DWG : mod->B3SOIPDdwg = value->rValue; mod->B3SOIPDdwgGiven = TRUE; break; case B3SOIPD_MOD_DWB : mod->B3SOIPDdwb = value->rValue; mod->B3SOIPDdwbGiven = TRUE; break; case B3SOIPD_MOD_B0 : mod->B3SOIPDb0 = value->rValue; mod->B3SOIPDb0Given = TRUE; break; case B3SOIPD_MOD_B1 : mod->B3SOIPDb1 = value->rValue; mod->B3SOIPDb1Given = TRUE; break; case B3SOIPD_MOD_ALPHA0 : mod->B3SOIPDalpha0 = value->rValue; mod->B3SOIPDalpha0Given = TRUE; break; case B3SOIPD_MOD_CGSL : mod->B3SOIPDcgsl = value->rValue; mod->B3SOIPDcgslGiven = TRUE; break; case B3SOIPD_MOD_CGDL : mod->B3SOIPDcgdl = value->rValue; mod->B3SOIPDcgdlGiven = TRUE; break; case B3SOIPD_MOD_CKAPPA : mod->B3SOIPDckappa = value->rValue; mod->B3SOIPDckappaGiven = TRUE; break; case B3SOIPD_MOD_CF : mod->B3SOIPDcf = value->rValue; mod->B3SOIPDcfGiven = TRUE; break; case B3SOIPD_MOD_CLC : mod->B3SOIPDclc = value->rValue; mod->B3SOIPDclcGiven = TRUE; break; case B3SOIPD_MOD_CLE : mod->B3SOIPDcle = value->rValue; mod->B3SOIPDcleGiven = TRUE; break; case B3SOIPD_MOD_DWC : mod->B3SOIPDdwc = value->rValue; mod->B3SOIPDdwcGiven = TRUE; break; case B3SOIPD_MOD_DLC : mod->B3SOIPDdlc = value->rValue; mod->B3SOIPDdlcGiven = TRUE; break; case B3SOIPD_MOD_TBOX : mod->B3SOIPDtbox = value->rValue; mod->B3SOIPDtboxGiven = TRUE; break; case B3SOIPD_MOD_TSI : mod->B3SOIPDtsi = value->rValue; mod->B3SOIPDtsiGiven = TRUE; break; case B3SOIPD_MOD_XJ : mod->B3SOIPDxj = value->rValue; mod->B3SOIPDxjGiven = TRUE; break; case B3SOIPD_MOD_RBODY : mod->B3SOIPDrbody = value->rValue; mod->B3SOIPDrbodyGiven = TRUE; break; case B3SOIPD_MOD_RBSH : mod->B3SOIPDrbsh = value->rValue; mod->B3SOIPDrbshGiven = TRUE; break; case B3SOIPD_MOD_RTH0 : mod->B3SOIPDrth0 = value->rValue; mod->B3SOIPDrth0Given = TRUE; break; case B3SOIPD_MOD_CTH0 : mod->B3SOIPDcth0 = value->rValue; mod->B3SOIPDcth0Given = TRUE; break; case B3SOIPD_MOD_NGIDL : mod->B3SOIPDngidl = value->rValue; mod->B3SOIPDngidlGiven = TRUE; break; case B3SOIPD_MOD_AGIDL : mod->B3SOIPDagidl = value->rValue; mod->B3SOIPDagidlGiven = TRUE; break; case B3SOIPD_MOD_BGIDL : mod->B3SOIPDbgidl = value->rValue; mod->B3SOIPDbgidlGiven = TRUE; break; case B3SOIPD_MOD_NDIODE : mod->B3SOIPDndiode = value->rValue; mod->B3SOIPDndiodeGiven = TRUE; break; case B3SOIPD_MOD_XBJT : mod->B3SOIPDxbjt = value->rValue; mod->B3SOIPDxbjtGiven = TRUE; break; case B3SOIPD_MOD_XDIF : mod->B3SOIPDxdif = value->rValue; mod->B3SOIPDxdifGiven = TRUE; break; case B3SOIPD_MOD_XREC : mod->B3SOIPDxrec = value->rValue; mod->B3SOIPDxrecGiven = TRUE; break; case B3SOIPD_MOD_XTUN : mod->B3SOIPDxtun = value->rValue; mod->B3SOIPDxtunGiven = TRUE; break; case B3SOIPD_MOD_TT : mod->B3SOIPDtt = value->rValue; mod->B3SOIPDttGiven = TRUE; break; case B3SOIPD_MOD_VSDTH : mod->B3SOIPDvsdth = value->rValue; mod->B3SOIPDvsdthGiven = TRUE; break; case B3SOIPD_MOD_VSDFB : mod->B3SOIPDvsdfb = value->rValue; mod->B3SOIPDvsdfbGiven = TRUE; break; case B3SOIPD_MOD_CSDMIN : mod->B3SOIPDcsdmin = value->rValue; mod->B3SOIPDcsdminGiven = TRUE; break; case B3SOIPD_MOD_ASD : mod->B3SOIPDasd = value->rValue; mod->B3SOIPDasdGiven = TRUE; break; case B3SOIPD_MOD_TNOM : mod->B3SOIPDtnom = value->rValue + 273.15; mod->B3SOIPDtnomGiven = TRUE; break; case B3SOIPD_MOD_CGSO : mod->B3SOIPDcgso = value->rValue; mod->B3SOIPDcgsoGiven = TRUE; break; case B3SOIPD_MOD_CGDO : mod->B3SOIPDcgdo = value->rValue; mod->B3SOIPDcgdoGiven = TRUE; break; case B3SOIPD_MOD_CGEO : mod->B3SOIPDcgeo = value->rValue; mod->B3SOIPDcgeoGiven = TRUE; break; case B3SOIPD_MOD_XPART : mod->B3SOIPDxpart = value->rValue; mod->B3SOIPDxpartGiven = TRUE; break; case B3SOIPD_MOD_RSH : mod->B3SOIPDsheetResistance = value->rValue; mod->B3SOIPDsheetResistanceGiven = TRUE; break; case B3SOIPD_MOD_PBSWG : mod->B3SOIPDGatesidewallJctPotential = value->rValue; mod->B3SOIPDGatesidewallJctPotentialGiven = TRUE; break; case B3SOIPD_MOD_MJSWG : mod->B3SOIPDbodyJctGateSideGradingCoeff = value->rValue; mod->B3SOIPDbodyJctGateSideGradingCoeffGiven = TRUE; break; case B3SOIPD_MOD_CJSWG : mod->B3SOIPDunitLengthGateSidewallJctCap = value->rValue; mod->B3SOIPDunitLengthGateSidewallJctCapGiven = TRUE; break; case B3SOIPD_MOD_CSDESW : mod->B3SOIPDcsdesw = value->rValue; mod->B3SOIPDcsdeswGiven = TRUE; break; case B3SOIPD_MOD_LINT : mod->B3SOIPDLint = value->rValue; mod->B3SOIPDLintGiven = TRUE; break; case B3SOIPD_MOD_LL : mod->B3SOIPDLl = value->rValue; mod->B3SOIPDLlGiven = TRUE; break; /* v2.2.3 */ case B3SOIPD_MOD_LLC : mod->B3SOIPDLlc = value->rValue; mod->B3SOIPDLlcGiven = TRUE; break; case B3SOIPD_MOD_LLN : mod->B3SOIPDLln = value->rValue; mod->B3SOIPDLlnGiven = TRUE; break; case B3SOIPD_MOD_LW : mod->B3SOIPDLw = value->rValue; mod->B3SOIPDLwGiven = TRUE; break; /* v2.2.3 */ case B3SOIPD_MOD_LWC : mod->B3SOIPDLwc = value->rValue; mod->B3SOIPDLwcGiven = TRUE; break; case B3SOIPD_MOD_LWN : mod->B3SOIPDLwn = value->rValue; mod->B3SOIPDLwnGiven = TRUE; break; case B3SOIPD_MOD_LWL : mod->B3SOIPDLwl = value->rValue; mod->B3SOIPDLwlGiven = TRUE; break; /* v2.2.3 */ case B3SOIPD_MOD_LWLC : mod->B3SOIPDLwlc = value->rValue; mod->B3SOIPDLwlcGiven = TRUE; break; case B3SOIPD_MOD_WINT : mod->B3SOIPDWint = value->rValue; mod->B3SOIPDWintGiven = TRUE; break; case B3SOIPD_MOD_WL : mod->B3SOIPDWl = value->rValue; mod->B3SOIPDWlGiven = TRUE; break; /* v2.2.3 */ case B3SOIPD_MOD_WLC : mod->B3SOIPDWlc = value->rValue; mod->B3SOIPDWlcGiven = TRUE; break; case B3SOIPD_MOD_WLN : mod->B3SOIPDWln = value->rValue; mod->B3SOIPDWlnGiven = TRUE; break; case B3SOIPD_MOD_WW : mod->B3SOIPDWw = value->rValue; mod->B3SOIPDWwGiven = TRUE; break; /* v2.2.3 */ case B3SOIPD_MOD_WWC : mod->B3SOIPDWwc = value->rValue; mod->B3SOIPDWwcGiven = TRUE; break; case B3SOIPD_MOD_WWN : mod->B3SOIPDWwn = value->rValue; mod->B3SOIPDWwnGiven = TRUE; break; case B3SOIPD_MOD_WWL : mod->B3SOIPDWwl = value->rValue; mod->B3SOIPDWwlGiven = TRUE; break; /* v2.2.3 */ case B3SOIPD_MOD_WWLC : mod->B3SOIPDWwlc = value->rValue; mod->B3SOIPDWwlcGiven = TRUE; break; case B3SOIPD_MOD_NOIA : mod->B3SOIPDoxideTrapDensityA = value->rValue; mod->B3SOIPDoxideTrapDensityAGiven = TRUE; break; case B3SOIPD_MOD_NOIB : mod->B3SOIPDoxideTrapDensityB = value->rValue; mod->B3SOIPDoxideTrapDensityBGiven = TRUE; break; case B3SOIPD_MOD_NOIC : mod->B3SOIPDoxideTrapDensityC = value->rValue; mod->B3SOIPDoxideTrapDensityCGiven = TRUE; break; case B3SOIPD_MOD_NOIF : mod->B3SOIPDnoif = value->rValue; mod->B3SOIPDnoifGiven = TRUE; break; case B3SOIPD_MOD_EM : mod->B3SOIPDem = value->rValue; mod->B3SOIPDemGiven = TRUE; break; case B3SOIPD_MOD_EF : mod->B3SOIPDef = value->rValue; mod->B3SOIPDefGiven = TRUE; break; case B3SOIPD_MOD_AF : mod->B3SOIPDaf = value->rValue; mod->B3SOIPDafGiven = TRUE; break; case B3SOIPD_MOD_KF : mod->B3SOIPDkf = value->rValue; mod->B3SOIPDkfGiven = TRUE; break; /* v2.2 release */ case B3SOIPD_MOD_WTH0 : mod->B3SOIPDwth0 = value->rValue; mod->B3SOIPDwth0Given = TRUE; break; case B3SOIPD_MOD_RHALO : mod->B3SOIPDrhalo = value->rValue; mod->B3SOIPDrhaloGiven = TRUE; break; case B3SOIPD_MOD_NTOX : mod->B3SOIPDntox = value->rValue; mod->B3SOIPDntoxGiven = TRUE; break; case B3SOIPD_MOD_TOXREF : mod->B3SOIPDtoxref = value->rValue; mod->B3SOIPDtoxrefGiven = TRUE; break; case B3SOIPD_MOD_EBG : mod->B3SOIPDebg = value->rValue; mod->B3SOIPDebgGiven = TRUE; break; case B3SOIPD_MOD_VEVB : mod->B3SOIPDvevb = value->rValue; mod->B3SOIPDvevbGiven = TRUE; break; case B3SOIPD_MOD_ALPHAGB1 : mod->B3SOIPDalphaGB1 = value->rValue; mod->B3SOIPDalphaGB1Given = TRUE; break; case B3SOIPD_MOD_BETAGB1 : mod->B3SOIPDbetaGB1 = value->rValue; mod->B3SOIPDbetaGB1Given = TRUE; break; case B3SOIPD_MOD_VGB1 : mod->B3SOIPDvgb1 = value->rValue; mod->B3SOIPDvgb1Given = TRUE; break; case B3SOIPD_MOD_VECB : mod->B3SOIPDvecb = value->rValue; mod->B3SOIPDvecbGiven = TRUE; break; case B3SOIPD_MOD_ALPHAGB2 : mod->B3SOIPDalphaGB2 = value->rValue; mod->B3SOIPDalphaGB2Given = TRUE; break; case B3SOIPD_MOD_BETAGB2 : mod->B3SOIPDbetaGB2 = value->rValue; mod->B3SOIPDbetaGB2Given = TRUE; break; case B3SOIPD_MOD_VGB2 : mod->B3SOIPDvgb2 = value->rValue; mod->B3SOIPDvgb2Given = TRUE; break; case B3SOIPD_MOD_TOXQM : mod->B3SOIPDtoxqm = value->rValue; mod->B3SOIPDtoxqmGiven = TRUE; break; case B3SOIPD_MOD_VOXH : mod->B3SOIPDvoxh = value->rValue; mod->B3SOIPDvoxhGiven = TRUE; break; case B3SOIPD_MOD_DELTAVOX : mod->B3SOIPDdeltavox = value->rValue; mod->B3SOIPDdeltavoxGiven = TRUE; break; case B3SOIPD_MOD_IGMOD : mod->B3SOIPDigMod = value->iValue; mod->B3SOIPDigModGiven = TRUE; break; /* v2.0 release */ case B3SOIPD_MOD_K1W1 : mod->B3SOIPDk1w1 = value->rValue; mod->B3SOIPDk1w1Given = TRUE; break; case B3SOIPD_MOD_K1W2 : mod->B3SOIPDk1w2 = value->rValue; mod->B3SOIPDk1w2Given = TRUE; break; case B3SOIPD_MOD_KETAS : mod->B3SOIPDketas = value->rValue; mod->B3SOIPDketasGiven = TRUE; break; case B3SOIPD_MOD_DWBC : mod->B3SOIPDdwbc = value->rValue; mod->B3SOIPDdwbcGiven = TRUE; break; case B3SOIPD_MOD_BETA0 : mod->B3SOIPDbeta0 = value->rValue; mod->B3SOIPDbeta0Given = TRUE; break; case B3SOIPD_MOD_BETA1 : mod->B3SOIPDbeta1 = value->rValue; mod->B3SOIPDbeta1Given = TRUE; break; case B3SOIPD_MOD_BETA2 : mod->B3SOIPDbeta2 = value->rValue; mod->B3SOIPDbeta2Given = TRUE; break; case B3SOIPD_MOD_VDSATII0 : mod->B3SOIPDvdsatii0 = value->rValue; mod->B3SOIPDvdsatii0Given = TRUE; break; case B3SOIPD_MOD_TII : mod->B3SOIPDtii = value->rValue; mod->B3SOIPDtiiGiven = TRUE; break; case B3SOIPD_MOD_LII : mod->B3SOIPDlii = value->rValue; mod->B3SOIPDliiGiven = TRUE; break; case B3SOIPD_MOD_SII0 : mod->B3SOIPDsii0 = value->rValue; mod->B3SOIPDsii0Given = TRUE; break; case B3SOIPD_MOD_SII1 : mod->B3SOIPDsii1 = value->rValue; mod->B3SOIPDsii1Given = TRUE; break; case B3SOIPD_MOD_SII2 : mod->B3SOIPDsii2 = value->rValue; mod->B3SOIPDsii2Given = TRUE; break; case B3SOIPD_MOD_SIID : mod->B3SOIPDsiid = value->rValue; mod->B3SOIPDsiidGiven = TRUE; break; case B3SOIPD_MOD_FBJTII : mod->B3SOIPDfbjtii = value->rValue; mod->B3SOIPDfbjtiiGiven = TRUE; break; case B3SOIPD_MOD_ESATII : mod->B3SOIPDesatii = value->rValue; mod->B3SOIPDesatiiGiven = TRUE; break; case B3SOIPD_MOD_NTUN : mod->B3SOIPDntun = value->rValue; mod->B3SOIPDntunGiven = TRUE; break; case B3SOIPD_MOD_NRECF0 : mod->B3SOIPDnrecf0 = value->rValue; mod->B3SOIPDnrecf0Given = TRUE; break; case B3SOIPD_MOD_NRECR0 : mod->B3SOIPDnrecr0 = value->rValue; mod->B3SOIPDnrecr0Given = TRUE; break; case B3SOIPD_MOD_ISBJT : mod->B3SOIPDisbjt = value->rValue; mod->B3SOIPDisbjtGiven = TRUE; break; case B3SOIPD_MOD_ISDIF : mod->B3SOIPDisdif = value->rValue; mod->B3SOIPDisdifGiven = TRUE; break; case B3SOIPD_MOD_ISREC : mod->B3SOIPDisrec = value->rValue; mod->B3SOIPDisrecGiven = TRUE; break; case B3SOIPD_MOD_ISTUN : mod->B3SOIPDistun = value->rValue; mod->B3SOIPDistunGiven = TRUE; break; case B3SOIPD_MOD_LN : mod->B3SOIPDln = value->rValue; mod->B3SOIPDlnGiven = TRUE; break; case B3SOIPD_MOD_VREC0 : mod->B3SOIPDvrec0 = value->rValue; mod->B3SOIPDvrec0Given = TRUE; break; case B3SOIPD_MOD_VTUN0 : mod->B3SOIPDvtun0 = value->rValue; mod->B3SOIPDvtun0Given = TRUE; break; case B3SOIPD_MOD_NBJT : mod->B3SOIPDnbjt = value->rValue; mod->B3SOIPDnbjtGiven = TRUE; break; case B3SOIPD_MOD_LBJT0 : mod->B3SOIPDlbjt0 = value->rValue; mod->B3SOIPDlbjt0Given = TRUE; break; case B3SOIPD_MOD_LDIF0 : mod->B3SOIPDldif0 = value->rValue; mod->B3SOIPDldif0Given = TRUE; break; case B3SOIPD_MOD_VABJT : mod->B3SOIPDvabjt = value->rValue; mod->B3SOIPDvabjtGiven = TRUE; break; case B3SOIPD_MOD_AELY : mod->B3SOIPDaely = value->rValue; mod->B3SOIPDaelyGiven = TRUE; break; case B3SOIPD_MOD_AHLI : mod->B3SOIPDahli = value->rValue; mod->B3SOIPDahliGiven = TRUE; break; case B3SOIPD_MOD_NDIF : mod->B3SOIPDndif = value->rValue; mod->B3SOIPDndifGiven = TRUE; break; case B3SOIPD_MOD_NTRECF : mod->B3SOIPDntrecf = value->rValue; mod->B3SOIPDntrecfGiven = TRUE; break; case B3SOIPD_MOD_NTRECR : mod->B3SOIPDntrecr = value->rValue; mod->B3SOIPDntrecrGiven = TRUE; break; case B3SOIPD_MOD_DLCB : mod->B3SOIPDdlcb = value->rValue; mod->B3SOIPDdlcbGiven = TRUE; break; case B3SOIPD_MOD_FBODY : mod->B3SOIPDfbody = value->rValue; mod->B3SOIPDfbodyGiven = TRUE; break; case B3SOIPD_MOD_TCJSWG : mod->B3SOIPDtcjswg = value->rValue; mod->B3SOIPDtcjswgGiven = TRUE; break; case B3SOIPD_MOD_TPBSWG : mod->B3SOIPDtpbswg = value->rValue; mod->B3SOIPDtpbswgGiven = TRUE; break; case B3SOIPD_MOD_ACDE : mod->B3SOIPDacde = value->rValue; mod->B3SOIPDacdeGiven = TRUE; break; case B3SOIPD_MOD_MOIN : mod->B3SOIPDmoin = value->rValue; mod->B3SOIPDmoinGiven = TRUE; break; case B3SOIPD_MOD_DELVT : mod->B3SOIPDdelvt = value->rValue; mod->B3SOIPDdelvtGiven = TRUE; break; case B3SOIPD_MOD_KB1 : mod->B3SOIPDkb1 = value->rValue; mod->B3SOIPDkb1Given = TRUE; break; case B3SOIPD_MOD_DLBG : mod->B3SOIPDdlbg = value->rValue; mod->B3SOIPDdlbgGiven = TRUE; break; /* Added for binning - START */ /* Length Dependence */ case B3SOIPD_MOD_LNPEAK: mod->B3SOIPDlnpeak = value->rValue; mod->B3SOIPDlnpeakGiven = TRUE; break; case B3SOIPD_MOD_LNSUB: mod->B3SOIPDlnsub = value->rValue; mod->B3SOIPDlnsubGiven = TRUE; break; case B3SOIPD_MOD_LNGATE: mod->B3SOIPDlngate = value->rValue; mod->B3SOIPDlngateGiven = TRUE; break; case B3SOIPD_MOD_LVTH0: mod->B3SOIPDlvth0 = value->rValue; mod->B3SOIPDlvth0Given = TRUE; break; case B3SOIPD_MOD_LK1: mod->B3SOIPDlk1 = value->rValue; mod->B3SOIPDlk1Given = TRUE; break; case B3SOIPD_MOD_LK1W1: mod->B3SOIPDlk1w1 = value->rValue; mod->B3SOIPDlk1w1Given = TRUE; break; case B3SOIPD_MOD_LK1W2: mod->B3SOIPDlk1w2 = value->rValue; mod->B3SOIPDlk1w2Given = TRUE; break; case B3SOIPD_MOD_LK2: mod->B3SOIPDlk2 = value->rValue; mod->B3SOIPDlk2Given = TRUE; break; case B3SOIPD_MOD_LK3: mod->B3SOIPDlk3 = value->rValue; mod->B3SOIPDlk3Given = TRUE; break; case B3SOIPD_MOD_LK3B: mod->B3SOIPDlk3b = value->rValue; mod->B3SOIPDlk3bGiven = TRUE; break; case B3SOIPD_MOD_LKB1 : mod->B3SOIPDlkb1 = value->rValue; mod->B3SOIPDlkb1Given = TRUE; break; case B3SOIPD_MOD_LW0: mod->B3SOIPDlw0 = value->rValue; mod->B3SOIPDlw0Given = TRUE; break; case B3SOIPD_MOD_LNLX: mod->B3SOIPDlnlx = value->rValue; mod->B3SOIPDlnlxGiven = TRUE; break; case B3SOIPD_MOD_LDVT0: mod->B3SOIPDldvt0 = value->rValue; mod->B3SOIPDldvt0Given = TRUE; break; case B3SOIPD_MOD_LDVT1: mod->B3SOIPDldvt1 = value->rValue; mod->B3SOIPDldvt1Given = TRUE; break; case B3SOIPD_MOD_LDVT2: mod->B3SOIPDldvt2 = value->rValue; mod->B3SOIPDldvt2Given = TRUE; break; case B3SOIPD_MOD_LDVT0W: mod->B3SOIPDldvt0w = value->rValue; mod->B3SOIPDldvt0wGiven = TRUE; break; case B3SOIPD_MOD_LDVT1W: mod->B3SOIPDldvt1w = value->rValue; mod->B3SOIPDldvt1wGiven = TRUE; break; case B3SOIPD_MOD_LDVT2W: mod->B3SOIPDldvt2w = value->rValue; mod->B3SOIPDldvt2wGiven = TRUE; break; case B3SOIPD_MOD_LU0 : mod->B3SOIPDlu0 = value->rValue; mod->B3SOIPDlu0Given = TRUE; break; case B3SOIPD_MOD_LUA: mod->B3SOIPDlua = value->rValue; mod->B3SOIPDluaGiven = TRUE; break; case B3SOIPD_MOD_LUB: mod->B3SOIPDlub = value->rValue; mod->B3SOIPDlubGiven = TRUE; break; case B3SOIPD_MOD_LUC: mod->B3SOIPDluc = value->rValue; mod->B3SOIPDlucGiven = TRUE; break; case B3SOIPD_MOD_LVSAT: mod->B3SOIPDlvsat = value->rValue; mod->B3SOIPDlvsatGiven = TRUE; break; case B3SOIPD_MOD_LA0: mod->B3SOIPDla0 = value->rValue; mod->B3SOIPDla0Given = TRUE; break; case B3SOIPD_MOD_LAGS: mod->B3SOIPDlags= value->rValue; mod->B3SOIPDlagsGiven = TRUE; break; case B3SOIPD_MOD_LB0 : mod->B3SOIPDlb0 = value->rValue; mod->B3SOIPDlb0Given = TRUE; break; case B3SOIPD_MOD_LB1 : mod->B3SOIPDlb1 = value->rValue; mod->B3SOIPDlb1Given = TRUE; break; case B3SOIPD_MOD_LKETA: mod->B3SOIPDlketa = value->rValue; mod->B3SOIPDlketaGiven = TRUE; break; case B3SOIPD_MOD_LKETAS: mod->B3SOIPDlketas = value->rValue; mod->B3SOIPDlketasGiven = TRUE; break; case B3SOIPD_MOD_LA1: mod->B3SOIPDla1 = value->rValue; mod->B3SOIPDla1Given = TRUE; break; case B3SOIPD_MOD_LA2: mod->B3SOIPDla2 = value->rValue; mod->B3SOIPDla2Given = TRUE; break; case B3SOIPD_MOD_LRDSW: mod->B3SOIPDlrdsw = value->rValue; mod->B3SOIPDlrdswGiven = TRUE; break; case B3SOIPD_MOD_LPRWB: mod->B3SOIPDlprwb = value->rValue; mod->B3SOIPDlprwbGiven = TRUE; break; case B3SOIPD_MOD_LPRWG: mod->B3SOIPDlprwg = value->rValue; mod->B3SOIPDlprwgGiven = TRUE; break; case B3SOIPD_MOD_LWR : mod->B3SOIPDlwr = value->rValue; mod->B3SOIPDlwrGiven = TRUE; break; case B3SOIPD_MOD_LNFACTOR : mod->B3SOIPDlnfactor = value->rValue; mod->B3SOIPDlnfactorGiven = TRUE; break; case B3SOIPD_MOD_LDWG : mod->B3SOIPDldwg = value->rValue; mod->B3SOIPDldwgGiven = TRUE; break; case B3SOIPD_MOD_LDWB : mod->B3SOIPDldwb = value->rValue; mod->B3SOIPDldwbGiven = TRUE; break; case B3SOIPD_MOD_LVOFF: mod->B3SOIPDlvoff = value->rValue; mod->B3SOIPDlvoffGiven = TRUE; break; case B3SOIPD_MOD_LETA0: mod->B3SOIPDleta0 = value->rValue; mod->B3SOIPDleta0Given = TRUE; break; case B3SOIPD_MOD_LETAB: mod->B3SOIPDletab = value->rValue; mod->B3SOIPDletabGiven = TRUE; break; case B3SOIPD_MOD_LDSUB: mod->B3SOIPDldsub = value->rValue; mod->B3SOIPDldsubGiven = TRUE; break; case B3SOIPD_MOD_LCIT : mod->B3SOIPDlcit = value->rValue; mod->B3SOIPDlcitGiven = TRUE; break; case B3SOIPD_MOD_LCDSC : mod->B3SOIPDlcdsc = value->rValue; mod->B3SOIPDlcdscGiven = TRUE; break; case B3SOIPD_MOD_LCDSCB : mod->B3SOIPDlcdscb = value->rValue; mod->B3SOIPDlcdscbGiven = TRUE; break; case B3SOIPD_MOD_LCDSCD : mod->B3SOIPDlcdscd = value->rValue; mod->B3SOIPDlcdscdGiven = TRUE; break; case B3SOIPD_MOD_LPCLM: mod->B3SOIPDlpclm = value->rValue; mod->B3SOIPDlpclmGiven = TRUE; break; case B3SOIPD_MOD_LPDIBL1: mod->B3SOIPDlpdibl1 = value->rValue; mod->B3SOIPDlpdibl1Given = TRUE; break; case B3SOIPD_MOD_LPDIBL2: mod->B3SOIPDlpdibl2 = value->rValue; mod->B3SOIPDlpdibl2Given = TRUE; break; case B3SOIPD_MOD_LPDIBLB: mod->B3SOIPDlpdiblb = value->rValue; mod->B3SOIPDlpdiblbGiven = TRUE; break; case B3SOIPD_MOD_LDROUT: mod->B3SOIPDldrout = value->rValue; mod->B3SOIPDldroutGiven = TRUE; break; case B3SOIPD_MOD_LPVAG: mod->B3SOIPDlpvag = value->rValue; mod->B3SOIPDlpvagGiven = TRUE; break; case B3SOIPD_MOD_LDELTA : mod->B3SOIPDldelta = value->rValue; mod->B3SOIPDldeltaGiven = TRUE; break; case B3SOIPD_MOD_LALPHA0 : mod->B3SOIPDlalpha0 = value->rValue; mod->B3SOIPDlalpha0Given = TRUE; break; case B3SOIPD_MOD_LFBJTII : mod->B3SOIPDlfbjtii = value->rValue; mod->B3SOIPDlfbjtiiGiven = TRUE; break; case B3SOIPD_MOD_LBETA0 : mod->B3SOIPDlbeta0 = value->rValue; mod->B3SOIPDlbeta0Given = TRUE; break; case B3SOIPD_MOD_LBETA1 : mod->B3SOIPDlbeta1 = value->rValue; mod->B3SOIPDlbeta1Given = TRUE; break; case B3SOIPD_MOD_LBETA2 : mod->B3SOIPDlbeta2 = value->rValue; mod->B3SOIPDlbeta2Given = TRUE; break; case B3SOIPD_MOD_LVDSATII0 : mod->B3SOIPDlvdsatii0 = value->rValue; mod->B3SOIPDlvdsatii0Given = TRUE; break; case B3SOIPD_MOD_LLII : mod->B3SOIPDllii = value->rValue; mod->B3SOIPDlliiGiven = TRUE; break; case B3SOIPD_MOD_LESATII : mod->B3SOIPDlesatii = value->rValue; mod->B3SOIPDlesatiiGiven = TRUE; break; case B3SOIPD_MOD_LSII0 : mod->B3SOIPDlsii0 = value->rValue; mod->B3SOIPDlsii0Given = TRUE; break; case B3SOIPD_MOD_LSII1 : mod->B3SOIPDlsii1 = value->rValue; mod->B3SOIPDlsii1Given = TRUE; break; case B3SOIPD_MOD_LSII2 : mod->B3SOIPDlsii2 = value->rValue; mod->B3SOIPDlsii2Given = TRUE; break; case B3SOIPD_MOD_LSIID : mod->B3SOIPDlsiid = value->rValue; mod->B3SOIPDlsiidGiven = TRUE; break; case B3SOIPD_MOD_LAGIDL : mod->B3SOIPDlagidl = value->rValue; mod->B3SOIPDlagidlGiven = TRUE; break; case B3SOIPD_MOD_LBGIDL : mod->B3SOIPDlbgidl = value->rValue; mod->B3SOIPDlbgidlGiven = TRUE; break; case B3SOIPD_MOD_LNGIDL : mod->B3SOIPDlngidl = value->rValue; mod->B3SOIPDlngidlGiven = TRUE; break; case B3SOIPD_MOD_LNTUN : mod->B3SOIPDlntun = value->rValue; mod->B3SOIPDlntunGiven = TRUE; break; case B3SOIPD_MOD_LNDIODE : mod->B3SOIPDlndiode = value->rValue; mod->B3SOIPDlndiodeGiven = TRUE; break; case B3SOIPD_MOD_LNRECF0 : mod->B3SOIPDlnrecf0 = value->rValue; mod->B3SOIPDlnrecf0Given = TRUE; break; case B3SOIPD_MOD_LNRECR0 : mod->B3SOIPDlnrecr0 = value->rValue; mod->B3SOIPDlnrecr0Given = TRUE; break; case B3SOIPD_MOD_LISBJT : mod->B3SOIPDlisbjt = value->rValue; mod->B3SOIPDlisbjtGiven = TRUE; break; case B3SOIPD_MOD_LISDIF : mod->B3SOIPDlisdif = value->rValue; mod->B3SOIPDlisdifGiven = TRUE; break; case B3SOIPD_MOD_LISREC : mod->B3SOIPDlisrec = value->rValue; mod->B3SOIPDlisrecGiven = TRUE; break; case B3SOIPD_MOD_LISTUN : mod->B3SOIPDlistun = value->rValue; mod->B3SOIPDlistunGiven = TRUE; break; case B3SOIPD_MOD_LVREC0 : mod->B3SOIPDlvrec0 = value->rValue; mod->B3SOIPDlvrec0Given = TRUE; break; case B3SOIPD_MOD_LVTUN0 : mod->B3SOIPDlvtun0 = value->rValue; mod->B3SOIPDlvtun0Given = TRUE; break; case B3SOIPD_MOD_LNBJT : mod->B3SOIPDlnbjt = value->rValue; mod->B3SOIPDlnbjtGiven = TRUE; break; case B3SOIPD_MOD_LLBJT0 : mod->B3SOIPDllbjt0 = value->rValue; mod->B3SOIPDllbjt0Given = TRUE; break; case B3SOIPD_MOD_LVABJT : mod->B3SOIPDlvabjt = value->rValue; mod->B3SOIPDlvabjtGiven = TRUE; break; case B3SOIPD_MOD_LAELY : mod->B3SOIPDlaely = value->rValue; mod->B3SOIPDlaelyGiven = TRUE; break; case B3SOIPD_MOD_LAHLI : mod->B3SOIPDlahli = value->rValue; mod->B3SOIPDlahliGiven = TRUE; break; /* CV Model */ case B3SOIPD_MOD_LVSDFB : mod->B3SOIPDlvsdfb = value->rValue; mod->B3SOIPDlvsdfbGiven = TRUE; break; case B3SOIPD_MOD_LVSDTH : mod->B3SOIPDlvsdth = value->rValue; mod->B3SOIPDlvsdthGiven = TRUE; break; case B3SOIPD_MOD_LDELVT : mod->B3SOIPDldelvt = value->rValue; mod->B3SOIPDldelvtGiven = TRUE; break; case B3SOIPD_MOD_LACDE : mod->B3SOIPDlacde = value->rValue; mod->B3SOIPDlacdeGiven = TRUE; break; case B3SOIPD_MOD_LMOIN : mod->B3SOIPDlmoin = value->rValue; mod->B3SOIPDlmoinGiven = TRUE; break; /* Width Dependence */ case B3SOIPD_MOD_WNPEAK: mod->B3SOIPDwnpeak = value->rValue; mod->B3SOIPDwnpeakGiven = TRUE; break; case B3SOIPD_MOD_WNSUB: mod->B3SOIPDwnsub = value->rValue; mod->B3SOIPDwnsubGiven = TRUE; break; case B3SOIPD_MOD_WNGATE: mod->B3SOIPDwngate = value->rValue; mod->B3SOIPDwngateGiven = TRUE; break; case B3SOIPD_MOD_WVTH0: mod->B3SOIPDwvth0 = value->rValue; mod->B3SOIPDwvth0Given = TRUE; break; case B3SOIPD_MOD_WK1: mod->B3SOIPDwk1 = value->rValue; mod->B3SOIPDwk1Given = TRUE; break; case B3SOIPD_MOD_WK1W1: mod->B3SOIPDwk1w1 = value->rValue; mod->B3SOIPDwk1w1Given = TRUE; break; case B3SOIPD_MOD_WK1W2: mod->B3SOIPDwk1w2 = value->rValue; mod->B3SOIPDwk1w2Given = TRUE; break; case B3SOIPD_MOD_WK2: mod->B3SOIPDwk2 = value->rValue; mod->B3SOIPDwk2Given = TRUE; break; case B3SOIPD_MOD_WK3: mod->B3SOIPDwk3 = value->rValue; mod->B3SOIPDwk3Given = TRUE; break; case B3SOIPD_MOD_WK3B: mod->B3SOIPDwk3b = value->rValue; mod->B3SOIPDwk3bGiven = TRUE; break; case B3SOIPD_MOD_WKB1 : mod->B3SOIPDwkb1 = value->rValue; mod->B3SOIPDwkb1Given = TRUE; break; case B3SOIPD_MOD_WW0: mod->B3SOIPDww0 = value->rValue; mod->B3SOIPDww0Given = TRUE; break; case B3SOIPD_MOD_WNLX: mod->B3SOIPDwnlx = value->rValue; mod->B3SOIPDwnlxGiven = TRUE; break; case B3SOIPD_MOD_WDVT0: mod->B3SOIPDwdvt0 = value->rValue; mod->B3SOIPDwdvt0Given = TRUE; break; case B3SOIPD_MOD_WDVT1: mod->B3SOIPDwdvt1 = value->rValue; mod->B3SOIPDwdvt1Given = TRUE; break; case B3SOIPD_MOD_WDVT2: mod->B3SOIPDwdvt2 = value->rValue; mod->B3SOIPDwdvt2Given = TRUE; break; case B3SOIPD_MOD_WDVT0W: mod->B3SOIPDwdvt0w = value->rValue; mod->B3SOIPDwdvt0wGiven = TRUE; break; case B3SOIPD_MOD_WDVT1W: mod->B3SOIPDwdvt1w = value->rValue; mod->B3SOIPDwdvt1wGiven = TRUE; break; case B3SOIPD_MOD_WDVT2W: mod->B3SOIPDwdvt2w = value->rValue; mod->B3SOIPDwdvt2wGiven = TRUE; break; case B3SOIPD_MOD_WU0 : mod->B3SOIPDwu0 = value->rValue; mod->B3SOIPDwu0Given = TRUE; break; case B3SOIPD_MOD_WUA: mod->B3SOIPDwua = value->rValue; mod->B3SOIPDwuaGiven = TRUE; break; case B3SOIPD_MOD_WUB: mod->B3SOIPDwub = value->rValue; mod->B3SOIPDwubGiven = TRUE; break; case B3SOIPD_MOD_WUC: mod->B3SOIPDwuc = value->rValue; mod->B3SOIPDwucGiven = TRUE; break; case B3SOIPD_MOD_WVSAT: mod->B3SOIPDwvsat = value->rValue; mod->B3SOIPDwvsatGiven = TRUE; break; case B3SOIPD_MOD_WA0: mod->B3SOIPDwa0 = value->rValue; mod->B3SOIPDwa0Given = TRUE; break; case B3SOIPD_MOD_WAGS: mod->B3SOIPDwags= value->rValue; mod->B3SOIPDwagsGiven = TRUE; break; case B3SOIPD_MOD_WB0 : mod->B3SOIPDwb0 = value->rValue; mod->B3SOIPDwb0Given = TRUE; break; case B3SOIPD_MOD_WB1 : mod->B3SOIPDwb1 = value->rValue; mod->B3SOIPDwb1Given = TRUE; break; case B3SOIPD_MOD_WKETA: mod->B3SOIPDwketa = value->rValue; mod->B3SOIPDwketaGiven = TRUE; break; case B3SOIPD_MOD_WKETAS: mod->B3SOIPDwketas = value->rValue; mod->B3SOIPDwketasGiven = TRUE; break; case B3SOIPD_MOD_WA1: mod->B3SOIPDwa1 = value->rValue; mod->B3SOIPDwa1Given = TRUE; break; case B3SOIPD_MOD_WA2: mod->B3SOIPDwa2 = value->rValue; mod->B3SOIPDwa2Given = TRUE; break; case B3SOIPD_MOD_WRDSW: mod->B3SOIPDwrdsw = value->rValue; mod->B3SOIPDwrdswGiven = TRUE; break; case B3SOIPD_MOD_WPRWB: mod->B3SOIPDwprwb = value->rValue; mod->B3SOIPDwprwbGiven = TRUE; break; case B3SOIPD_MOD_WPRWG: mod->B3SOIPDwprwg = value->rValue; mod->B3SOIPDwprwgGiven = TRUE; break; case B3SOIPD_MOD_WWR : mod->B3SOIPDwwr = value->rValue; mod->B3SOIPDwwrGiven = TRUE; break; case B3SOIPD_MOD_WNFACTOR : mod->B3SOIPDwnfactor = value->rValue; mod->B3SOIPDwnfactorGiven = TRUE; break; case B3SOIPD_MOD_WDWG : mod->B3SOIPDwdwg = value->rValue; mod->B3SOIPDwdwgGiven = TRUE; break; case B3SOIPD_MOD_WDWB : mod->B3SOIPDwdwb = value->rValue; mod->B3SOIPDwdwbGiven = TRUE; break; case B3SOIPD_MOD_WVOFF: mod->B3SOIPDwvoff = value->rValue; mod->B3SOIPDwvoffGiven = TRUE; break; case B3SOIPD_MOD_WETA0: mod->B3SOIPDweta0 = value->rValue; mod->B3SOIPDweta0Given = TRUE; break; case B3SOIPD_MOD_WETAB: mod->B3SOIPDwetab = value->rValue; mod->B3SOIPDwetabGiven = TRUE; break; case B3SOIPD_MOD_WDSUB: mod->B3SOIPDwdsub = value->rValue; mod->B3SOIPDwdsubGiven = TRUE; break; case B3SOIPD_MOD_WCIT : mod->B3SOIPDwcit = value->rValue; mod->B3SOIPDwcitGiven = TRUE; break; case B3SOIPD_MOD_WCDSC : mod->B3SOIPDwcdsc = value->rValue; mod->B3SOIPDwcdscGiven = TRUE; break; case B3SOIPD_MOD_WCDSCB : mod->B3SOIPDwcdscb = value->rValue; mod->B3SOIPDwcdscbGiven = TRUE; break; case B3SOIPD_MOD_WCDSCD : mod->B3SOIPDwcdscd = value->rValue; mod->B3SOIPDwcdscdGiven = TRUE; break; case B3SOIPD_MOD_WPCLM: mod->B3SOIPDwpclm = value->rValue; mod->B3SOIPDwpclmGiven = TRUE; break; case B3SOIPD_MOD_WPDIBL1: mod->B3SOIPDwpdibl1 = value->rValue; mod->B3SOIPDwpdibl1Given = TRUE; break; case B3SOIPD_MOD_WPDIBL2: mod->B3SOIPDwpdibl2 = value->rValue; mod->B3SOIPDwpdibl2Given = TRUE; break; case B3SOIPD_MOD_WPDIBLB: mod->B3SOIPDwpdiblb = value->rValue; mod->B3SOIPDwpdiblbGiven = TRUE; break; case B3SOIPD_MOD_WDROUT: mod->B3SOIPDwdrout = value->rValue; mod->B3SOIPDwdroutGiven = TRUE; break; case B3SOIPD_MOD_WPVAG: mod->B3SOIPDwpvag = value->rValue; mod->B3SOIPDwpvagGiven = TRUE; break; case B3SOIPD_MOD_WDELTA : mod->B3SOIPDwdelta = value->rValue; mod->B3SOIPDwdeltaGiven = TRUE; break; case B3SOIPD_MOD_WALPHA0 : mod->B3SOIPDwalpha0 = value->rValue; mod->B3SOIPDwalpha0Given = TRUE; break; case B3SOIPD_MOD_WFBJTII : mod->B3SOIPDwfbjtii = value->rValue; mod->B3SOIPDwfbjtiiGiven = TRUE; break; case B3SOIPD_MOD_WBETA0 : mod->B3SOIPDwbeta0 = value->rValue; mod->B3SOIPDwbeta0Given = TRUE; break; case B3SOIPD_MOD_WBETA1 : mod->B3SOIPDwbeta1 = value->rValue; mod->B3SOIPDwbeta1Given = TRUE; break; case B3SOIPD_MOD_WBETA2 : mod->B3SOIPDwbeta2 = value->rValue; mod->B3SOIPDwbeta2Given = TRUE; break; case B3SOIPD_MOD_WVDSATII0 : mod->B3SOIPDwvdsatii0 = value->rValue; mod->B3SOIPDwvdsatii0Given = TRUE; break; case B3SOIPD_MOD_WLII : mod->B3SOIPDwlii = value->rValue; mod->B3SOIPDwliiGiven = TRUE; break; case B3SOIPD_MOD_WESATII : mod->B3SOIPDwesatii = value->rValue; mod->B3SOIPDwesatiiGiven = TRUE; break; case B3SOIPD_MOD_WSII0 : mod->B3SOIPDwsii0 = value->rValue; mod->B3SOIPDwsii0Given = TRUE; break; case B3SOIPD_MOD_WSII1 : mod->B3SOIPDwsii1 = value->rValue; mod->B3SOIPDwsii1Given = TRUE; break; case B3SOIPD_MOD_WSII2 : mod->B3SOIPDwsii2 = value->rValue; mod->B3SOIPDwsii2Given = TRUE; break; case B3SOIPD_MOD_WSIID : mod->B3SOIPDwsiid = value->rValue; mod->B3SOIPDwsiidGiven = TRUE; break; case B3SOIPD_MOD_WAGIDL : mod->B3SOIPDwagidl = value->rValue; mod->B3SOIPDwagidlGiven = TRUE; break; case B3SOIPD_MOD_WBGIDL : mod->B3SOIPDwbgidl = value->rValue; mod->B3SOIPDwbgidlGiven = TRUE; break; case B3SOIPD_MOD_WNGIDL : mod->B3SOIPDwngidl = value->rValue; mod->B3SOIPDwngidlGiven = TRUE; break; case B3SOIPD_MOD_WNTUN : mod->B3SOIPDwntun = value->rValue; mod->B3SOIPDwntunGiven = TRUE; break; case B3SOIPD_MOD_WNDIODE : mod->B3SOIPDwndiode = value->rValue; mod->B3SOIPDwndiodeGiven = TRUE; break; case B3SOIPD_MOD_WNRECF0 : mod->B3SOIPDwnrecf0 = value->rValue; mod->B3SOIPDwnrecf0Given = TRUE; break; case B3SOIPD_MOD_WNRECR0 : mod->B3SOIPDwnrecr0 = value->rValue; mod->B3SOIPDwnrecr0Given = TRUE; break; case B3SOIPD_MOD_WISBJT : mod->B3SOIPDwisbjt = value->rValue; mod->B3SOIPDwisbjtGiven = TRUE; break; case B3SOIPD_MOD_WISDIF : mod->B3SOIPDwisdif = value->rValue; mod->B3SOIPDwisdifGiven = TRUE; break; case B3SOIPD_MOD_WISREC : mod->B3SOIPDwisrec = value->rValue; mod->B3SOIPDwisrecGiven = TRUE; break; case B3SOIPD_MOD_WISTUN : mod->B3SOIPDwistun = value->rValue; mod->B3SOIPDwistunGiven = TRUE; break; case B3SOIPD_MOD_WVREC0 : mod->B3SOIPDwvrec0 = value->rValue; mod->B3SOIPDwvrec0Given = TRUE; break; case B3SOIPD_MOD_WVTUN0 : mod->B3SOIPDwvtun0 = value->rValue; mod->B3SOIPDwvtun0Given = TRUE; break; case B3SOIPD_MOD_WNBJT : mod->B3SOIPDwnbjt = value->rValue; mod->B3SOIPDwnbjtGiven = TRUE; break; case B3SOIPD_MOD_WLBJT0 : mod->B3SOIPDwlbjt0 = value->rValue; mod->B3SOIPDwlbjt0Given = TRUE; break; case B3SOIPD_MOD_WVABJT : mod->B3SOIPDwvabjt = value->rValue; mod->B3SOIPDwvabjtGiven = TRUE; break; case B3SOIPD_MOD_WAELY : mod->B3SOIPDwaely = value->rValue; mod->B3SOIPDwaelyGiven = TRUE; break; case B3SOIPD_MOD_WAHLI : mod->B3SOIPDwahli = value->rValue; mod->B3SOIPDwahliGiven = TRUE; break; /* CV Model */ case B3SOIPD_MOD_WVSDFB : mod->B3SOIPDwvsdfb = value->rValue; mod->B3SOIPDwvsdfbGiven = TRUE; break; case B3SOIPD_MOD_WVSDTH : mod->B3SOIPDwvsdth = value->rValue; mod->B3SOIPDwvsdthGiven = TRUE; break; case B3SOIPD_MOD_WDELVT : mod->B3SOIPDwdelvt = value->rValue; mod->B3SOIPDwdelvtGiven = TRUE; break; case B3SOIPD_MOD_WACDE : mod->B3SOIPDwacde = value->rValue; mod->B3SOIPDwacdeGiven = TRUE; break; case B3SOIPD_MOD_WMOIN : mod->B3SOIPDwmoin = value->rValue; mod->B3SOIPDwmoinGiven = TRUE; break; /* Cross-term Dependence */ case B3SOIPD_MOD_PNPEAK: mod->B3SOIPDpnpeak = value->rValue; mod->B3SOIPDpnpeakGiven = TRUE; break; case B3SOIPD_MOD_PNSUB: mod->B3SOIPDpnsub = value->rValue; mod->B3SOIPDpnsubGiven = TRUE; break; case B3SOIPD_MOD_PNGATE: mod->B3SOIPDpngate = value->rValue; mod->B3SOIPDpngateGiven = TRUE; break; case B3SOIPD_MOD_PVTH0: mod->B3SOIPDpvth0 = value->rValue; mod->B3SOIPDpvth0Given = TRUE; break; case B3SOIPD_MOD_PK1: mod->B3SOIPDpk1 = value->rValue; mod->B3SOIPDpk1Given = TRUE; break; case B3SOIPD_MOD_PK1W1: mod->B3SOIPDpk1w1 = value->rValue; mod->B3SOIPDpk1w1Given = TRUE; break; case B3SOIPD_MOD_PK1W2: mod->B3SOIPDpk1w2 = value->rValue; mod->B3SOIPDpk1w2Given = TRUE; break; case B3SOIPD_MOD_PK2: mod->B3SOIPDpk2 = value->rValue; mod->B3SOIPDpk2Given = TRUE; break; case B3SOIPD_MOD_PK3: mod->B3SOIPDpk3 = value->rValue; mod->B3SOIPDpk3Given = TRUE; break; case B3SOIPD_MOD_PK3B: mod->B3SOIPDpk3b = value->rValue; mod->B3SOIPDpk3bGiven = TRUE; break; case B3SOIPD_MOD_PKB1 : mod->B3SOIPDpkb1 = value->rValue; mod->B3SOIPDpkb1Given = TRUE; break; case B3SOIPD_MOD_PW0: mod->B3SOIPDpw0 = value->rValue; mod->B3SOIPDpw0Given = TRUE; break; case B3SOIPD_MOD_PNLX: mod->B3SOIPDpnlx = value->rValue; mod->B3SOIPDpnlxGiven = TRUE; break; case B3SOIPD_MOD_PDVT0: mod->B3SOIPDpdvt0 = value->rValue; mod->B3SOIPDpdvt0Given = TRUE; break; case B3SOIPD_MOD_PDVT1: mod->B3SOIPDpdvt1 = value->rValue; mod->B3SOIPDpdvt1Given = TRUE; break; case B3SOIPD_MOD_PDVT2: mod->B3SOIPDpdvt2 = value->rValue; mod->B3SOIPDpdvt2Given = TRUE; break; case B3SOIPD_MOD_PDVT0W: mod->B3SOIPDpdvt0w = value->rValue; mod->B3SOIPDpdvt0wGiven = TRUE; break; case B3SOIPD_MOD_PDVT1W: mod->B3SOIPDpdvt1w = value->rValue; mod->B3SOIPDpdvt1wGiven = TRUE; break; case B3SOIPD_MOD_PDVT2W: mod->B3SOIPDpdvt2w = value->rValue; mod->B3SOIPDpdvt2wGiven = TRUE; break; case B3SOIPD_MOD_PU0 : mod->B3SOIPDpu0 = value->rValue; mod->B3SOIPDpu0Given = TRUE; break; case B3SOIPD_MOD_PUA: mod->B3SOIPDpua = value->rValue; mod->B3SOIPDpuaGiven = TRUE; break; case B3SOIPD_MOD_PUB: mod->B3SOIPDpub = value->rValue; mod->B3SOIPDpubGiven = TRUE; break; case B3SOIPD_MOD_PUC: mod->B3SOIPDpuc = value->rValue; mod->B3SOIPDpucGiven = TRUE; break; case B3SOIPD_MOD_PVSAT: mod->B3SOIPDpvsat = value->rValue; mod->B3SOIPDpvsatGiven = TRUE; break; case B3SOIPD_MOD_PA0: mod->B3SOIPDpa0 = value->rValue; mod->B3SOIPDpa0Given = TRUE; break; case B3SOIPD_MOD_PAGS: mod->B3SOIPDpags= value->rValue; mod->B3SOIPDpagsGiven = TRUE; break; case B3SOIPD_MOD_PB0 : mod->B3SOIPDpb0 = value->rValue; mod->B3SOIPDpb0Given = TRUE; break; case B3SOIPD_MOD_PB1 : mod->B3SOIPDpb1 = value->rValue; mod->B3SOIPDpb1Given = TRUE; break; case B3SOIPD_MOD_PKETA: mod->B3SOIPDpketa = value->rValue; mod->B3SOIPDpketaGiven = TRUE; break; case B3SOIPD_MOD_PKETAS: mod->B3SOIPDpketas = value->rValue; mod->B3SOIPDpketasGiven = TRUE; break; case B3SOIPD_MOD_PA1: mod->B3SOIPDpa1 = value->rValue; mod->B3SOIPDpa1Given = TRUE; break; case B3SOIPD_MOD_PA2: mod->B3SOIPDpa2 = value->rValue; mod->B3SOIPDpa2Given = TRUE; break; case B3SOIPD_MOD_PRDSW: mod->B3SOIPDprdsw = value->rValue; mod->B3SOIPDprdswGiven = TRUE; break; case B3SOIPD_MOD_PPRWB: mod->B3SOIPDpprwb = value->rValue; mod->B3SOIPDpprwbGiven = TRUE; break; case B3SOIPD_MOD_PPRWG: mod->B3SOIPDpprwg = value->rValue; mod->B3SOIPDpprwgGiven = TRUE; break; case B3SOIPD_MOD_PWR : mod->B3SOIPDpwr = value->rValue; mod->B3SOIPDpwrGiven = TRUE; break; case B3SOIPD_MOD_PNFACTOR : mod->B3SOIPDpnfactor = value->rValue; mod->B3SOIPDpnfactorGiven = TRUE; break; case B3SOIPD_MOD_PDWG : mod->B3SOIPDpdwg = value->rValue; mod->B3SOIPDpdwgGiven = TRUE; break; case B3SOIPD_MOD_PDWB : mod->B3SOIPDpdwb = value->rValue; mod->B3SOIPDpdwbGiven = TRUE; break; case B3SOIPD_MOD_PVOFF: mod->B3SOIPDpvoff = value->rValue; mod->B3SOIPDpvoffGiven = TRUE; break; case B3SOIPD_MOD_PETA0: mod->B3SOIPDpeta0 = value->rValue; mod->B3SOIPDpeta0Given = TRUE; break; case B3SOIPD_MOD_PETAB: mod->B3SOIPDpetab = value->rValue; mod->B3SOIPDpetabGiven = TRUE; break; case B3SOIPD_MOD_PDSUB: mod->B3SOIPDpdsub = value->rValue; mod->B3SOIPDpdsubGiven = TRUE; break; case B3SOIPD_MOD_PCIT : mod->B3SOIPDpcit = value->rValue; mod->B3SOIPDpcitGiven = TRUE; break; case B3SOIPD_MOD_PCDSC : mod->B3SOIPDpcdsc = value->rValue; mod->B3SOIPDpcdscGiven = TRUE; break; case B3SOIPD_MOD_PCDSCB : mod->B3SOIPDpcdscb = value->rValue; mod->B3SOIPDpcdscbGiven = TRUE; break; case B3SOIPD_MOD_PCDSCD : mod->B3SOIPDpcdscd = value->rValue; mod->B3SOIPDpcdscdGiven = TRUE; break; case B3SOIPD_MOD_PPCLM: mod->B3SOIPDppclm = value->rValue; mod->B3SOIPDppclmGiven = TRUE; break; case B3SOIPD_MOD_PPDIBL1: mod->B3SOIPDppdibl1 = value->rValue; mod->B3SOIPDppdibl1Given = TRUE; break; case B3SOIPD_MOD_PPDIBL2: mod->B3SOIPDppdibl2 = value->rValue; mod->B3SOIPDppdibl2Given = TRUE; break; case B3SOIPD_MOD_PPDIBLB: mod->B3SOIPDppdiblb = value->rValue; mod->B3SOIPDppdiblbGiven = TRUE; break; case B3SOIPD_MOD_PDROUT: mod->B3SOIPDpdrout = value->rValue; mod->B3SOIPDpdroutGiven = TRUE; break; case B3SOIPD_MOD_PPVAG: mod->B3SOIPDppvag = value->rValue; mod->B3SOIPDppvagGiven = TRUE; break; case B3SOIPD_MOD_PDELTA : mod->B3SOIPDpdelta = value->rValue; mod->B3SOIPDpdeltaGiven = TRUE; break; case B3SOIPD_MOD_PALPHA0 : mod->B3SOIPDpalpha0 = value->rValue; mod->B3SOIPDpalpha0Given = TRUE; break; case B3SOIPD_MOD_PFBJTII : mod->B3SOIPDpfbjtii = value->rValue; mod->B3SOIPDpfbjtiiGiven = TRUE; break; case B3SOIPD_MOD_PBETA0 : mod->B3SOIPDpbeta0 = value->rValue; mod->B3SOIPDpbeta0Given = TRUE; break; case B3SOIPD_MOD_PBETA1 : mod->B3SOIPDpbeta1 = value->rValue; mod->B3SOIPDpbeta1Given = TRUE; break; case B3SOIPD_MOD_PBETA2 : mod->B3SOIPDpbeta2 = value->rValue; mod->B3SOIPDpbeta2Given = TRUE; break; case B3SOIPD_MOD_PVDSATII0 : mod->B3SOIPDpvdsatii0 = value->rValue; mod->B3SOIPDpvdsatii0Given = TRUE; break; case B3SOIPD_MOD_PLII : mod->B3SOIPDplii = value->rValue; mod->B3SOIPDpliiGiven = TRUE; break; case B3SOIPD_MOD_PESATII : mod->B3SOIPDpesatii = value->rValue; mod->B3SOIPDpesatiiGiven = TRUE; break; case B3SOIPD_MOD_PSII0 : mod->B3SOIPDpsii0 = value->rValue; mod->B3SOIPDpsii0Given = TRUE; break; case B3SOIPD_MOD_PSII1 : mod->B3SOIPDpsii1 = value->rValue; mod->B3SOIPDpsii1Given = TRUE; break; case B3SOIPD_MOD_PSII2 : mod->B3SOIPDpsii2 = value->rValue; mod->B3SOIPDpsii2Given = TRUE; break; case B3SOIPD_MOD_PSIID : mod->B3SOIPDpsiid = value->rValue; mod->B3SOIPDpsiidGiven = TRUE; break; case B3SOIPD_MOD_PAGIDL : mod->B3SOIPDpagidl = value->rValue; mod->B3SOIPDpagidlGiven = TRUE; break; case B3SOIPD_MOD_PBGIDL : mod->B3SOIPDpbgidl = value->rValue; mod->B3SOIPDpbgidlGiven = TRUE; break; case B3SOIPD_MOD_PNGIDL : mod->B3SOIPDpngidl = value->rValue; mod->B3SOIPDpngidlGiven = TRUE; break; case B3SOIPD_MOD_PNTUN : mod->B3SOIPDpntun = value->rValue; mod->B3SOIPDpntunGiven = TRUE; break; case B3SOIPD_MOD_PNDIODE : mod->B3SOIPDpndiode = value->rValue; mod->B3SOIPDpndiodeGiven = TRUE; break; case B3SOIPD_MOD_PNRECF0 : mod->B3SOIPDpnrecf0 = value->rValue; mod->B3SOIPDpnrecf0Given = TRUE; break; case B3SOIPD_MOD_PNRECR0 : mod->B3SOIPDpnrecr0 = value->rValue; mod->B3SOIPDpnrecr0Given = TRUE; break; case B3SOIPD_MOD_PISBJT : mod->B3SOIPDpisbjt = value->rValue; mod->B3SOIPDpisbjtGiven = TRUE; break; case B3SOIPD_MOD_PISDIF : mod->B3SOIPDpisdif = value->rValue; mod->B3SOIPDpisdifGiven = TRUE; break; case B3SOIPD_MOD_PISREC : mod->B3SOIPDpisrec = value->rValue; mod->B3SOIPDpisrecGiven = TRUE; break; case B3SOIPD_MOD_PISTUN : mod->B3SOIPDpistun = value->rValue; mod->B3SOIPDpistunGiven = TRUE; break; case B3SOIPD_MOD_PVREC0 : mod->B3SOIPDpvrec0 = value->rValue; mod->B3SOIPDpvrec0Given = TRUE; break; case B3SOIPD_MOD_PVTUN0 : mod->B3SOIPDpvtun0 = value->rValue; mod->B3SOIPDpvtun0Given = TRUE; break; case B3SOIPD_MOD_PNBJT : mod->B3SOIPDpnbjt = value->rValue; mod->B3SOIPDpnbjtGiven = TRUE; break; case B3SOIPD_MOD_PLBJT0 : mod->B3SOIPDplbjt0 = value->rValue; mod->B3SOIPDplbjt0Given = TRUE; break; case B3SOIPD_MOD_PVABJT : mod->B3SOIPDpvabjt = value->rValue; mod->B3SOIPDpvabjtGiven = TRUE; break; case B3SOIPD_MOD_PAELY : mod->B3SOIPDpaely = value->rValue; mod->B3SOIPDpaelyGiven = TRUE; break; case B3SOIPD_MOD_PAHLI : mod->B3SOIPDpahli = value->rValue; mod->B3SOIPDpahliGiven = TRUE; break; /* CV Model */ case B3SOIPD_MOD_PVSDFB : mod->B3SOIPDpvsdfb = value->rValue; mod->B3SOIPDpvsdfbGiven = TRUE; break; case B3SOIPD_MOD_PVSDTH : mod->B3SOIPDpvsdth = value->rValue; mod->B3SOIPDpvsdthGiven = TRUE; break; case B3SOIPD_MOD_PDELVT : mod->B3SOIPDpdelvt = value->rValue; mod->B3SOIPDpdelvtGiven = TRUE; break; case B3SOIPD_MOD_PACDE : mod->B3SOIPDpacde = value->rValue; mod->B3SOIPDpacdeGiven = TRUE; break; case B3SOIPD_MOD_PMOIN : mod->B3SOIPDpmoin = value->rValue; mod->B3SOIPDpmoinGiven = TRUE; break; /* Added for binning - END */ case B3SOIPD_MOD_NMOS : if(value->iValue) { mod->B3SOIPDtype = 1; mod->B3SOIPDtypeGiven = TRUE; } break; case B3SOIPD_MOD_PMOS : if(value->iValue) { mod->B3SOIPDtype = - 1; mod->B3SOIPDtypeGiven = TRUE; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/b3soipdld.c0000644000175000017500000050704013546075722023433 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soipdld.c 98/5/01 Modified by Pin Su, Weidong Liu and Jan Feng 99/2/15 Modified by Pin Su 99/4/30 Modified by Pin Su, Wei Jin 99/9/27 Modified by Pin Su 00/3/1 Modified by Pin Su 00/8/15 Modified by Pin Su 01/2/15 Modified by Pin Su and Hui Wan 02/3/5 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.2.3 02/3/5 Pin Su * BSIMPD2.2.3 release */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b3soipddef.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define Charge_q 1.60219e-19 #define KboQ 8.617087e-5 /* Kb / q */ #define Eg300 1.115 /* energy gap at 300K */ #define DELTA_1 0.02 #define DELTA_2 0.02 #define DELTA_3 0.02 /* Original is 0.02, for matching IBM model, change to 0.08 */ #define DELTA_3_SOI 0.08 #define DELTA_4 0.02 #define DELT_Vbseff 0.005 #define DELTA_VFB 0.02 #define CONST_2OV3 0.6666666666 #define MAX_EXPL 2.688117142e+43 #define MIN_EXPL 3.720075976e-44 #define EXPL_THRESHOLD 100.0 #define DEXP(A,B,C) { \ if (A > EXPL_THRESHOLD) { \ B = MAX_EXPL*(1.0+(A)-EXPL_THRESHOLD); \ C = MAX_EXPL; \ } else if (A < -EXPL_THRESHOLD) { \ B = MIN_EXPL; \ C = 0; \ } else { \ B = exp(A); \ C = B; \ } \ } #define FLOG(A) fabs(A) + 1e-14 /* B3SOIPDlimit(vnew,vold) * limits the per-iteration change of any absolute voltage value */ static double B3SOIPDlimit(double vnew, double vold, double limit, int *check) { double T0, T1; if (isnan (vnew) || isnan (vold)) { fprintf(stderr, "Alberto says: YOU TURKEY! The limiting function received NaN.\n"); fprintf(stderr, "New prediction returns to 0.0!\n"); vnew = 0.0; *check = 1; } T0 = vnew - vold; T1 = fabs(T0); if (T1 > limit) { if (T0 > 0.0) vnew = vold + limit; else vnew = vold - limit; *check = 1; } return vnew; } int B3SOIPDload(GENmodel *inModel, CKTcircuit *ckt) { B3SOIPDmodel *model = (B3SOIPDmodel*)inModel; B3SOIPDinstance *here; int selfheat; double Gmin; double ag0, qgd, qgs, von, cbhat, VgstNVt, ExpVgst = 0.0; double cdhat, cdreq, ceqbd, ceqbs, ceqqb, ceqqd, ceqqg, ceq, geq; double arg; double delvbd, delvbs, delvds, delvgd, delvgs; double Vfbeff, dVfbeff_dVg, dVfbeff_dVd, dVfbeff_dVb, V3, V4; double PhiBSWG, MJSWG; double gcgdb, gcggb, gcgsb, gcgeb, gcgT; double gcsdb, gcsgb, gcssb, gcseb, gcsT; double gcddb, gcdgb, gcdsb, gcdeb, gcdT; double gcbdb, gcbgb, gcbsb, gcbeb, gcbT; double gcedb, gcegb, gcesb, gceeb, gceT; double gcTt, gTtg, gTtb, gTtdp, gTtt, gTtsp; double vbd, vbs, vds, vgb, vgd, vgs, vgdo; #ifndef PREDICTOR double xfact; #endif double vg, vd, vs, vp, ve, vb; double Vds, Vgs, Vbs, Gmbs, FwdSum, RevSum; double Vgs_eff, Vfb, dVfb_dVb, dVfb_dVd, dVfb_dT; double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth, dVth_dVb, dVth_dVd, dVth_dT; double Vgst, dVgst_dVg, dVgst_dVb, dVgs_eff_dVg; double n, dn_dVb, Vtm; double ExpArg, V0; double ueff, dueff_dVg, dueff_dVd, dueff_dVb, dueff_dT; double Esat, Vdsat; double EsatL, dEsatL_dVg, dEsatL_dVd, dEsatL_dVb, dEsatL_dT; double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, dVdsat_dT, Vasat; double dVasat_dVg, dVasat_dVb, dVasat_dVd, dVasat_dT; double Va, dVa_dVd, dVa_dVg, dVa_dVb, dVa_dT; double Vbseff, dVbseff_dVb; double CoxWL; double T0, dT0_dVg, dT0_dVd, dT0_dVb, dT0_dT; double T1, dT1_dVg, dT1_dVd, dT1_dVb, dT1_dT; double T2, dT2_dVg, dT2_dVd, dT2_dVb, dT2_dT; double T3, dT3_dVg, dT3_dVd, dT3_dVb, dT3_dT = 0.0; double T4, dT4_dVd, dT4_dVb, dT4_dT; double T5, dT5_dVg, dT5_dVd, dT5_dVb, dT5_dT = 0.0; double T6, dT6_dT = 0.0; double T7, Vdsatii; double T8; double T9; double T10, dT10_dVb; double T11, T12; double tmp, Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVb; double VACLM, dVACLM_dVg, dVACLM_dVd, dVACLM_dVb, dVACLM_dT; double VADIBL, dVADIBL_dVg, dVADIBL_dVd, dVADIBL_dVb, dVADIBL_dT; double Xdep, dXdep_dVb, lt1, dlt1_dVb, ltw, dltw_dVb; double Delt_vth, dDelt_vth_dVb, dDelt_vth_dT; double Theta0, dTheta0_dVb; double TempRatio, tmp1, tmp2, tmp3, tmp4; double DIBL_Sft, dDIBL_Sft_dVd, Lambda, dLambda_dVg; double a1; double Vgsteff, dVgsteff_dVg, dVgsteff_dVd, dVgsteff_dVb, dVgsteff_dT; double Vdseff, dVdseff_dVg, dVdseff_dVd, dVdseff_dVb, dVdseff_dT; double VdseffCV, dVdseffCV_dVg, dVdseffCV_dVd, dVdseffCV_dVb; double diffVds; double dAbulk_dVg, dn_dVd ; double beta, dbeta_dVg, dbeta_dVd, dbeta_dVb, dbeta_dT; double gche, dgche_dVg, dgche_dVd, dgche_dVb, dgche_dT; double fgche1, dfgche1_dVg, dfgche1_dVd, dfgche1_dVb, dfgche1_dT; double fgche2, dfgche2_dVg, dfgche2_dVd, dfgche2_dVb, dfgche2_dT; double Idl, dIdl_dVg, dIdl_dVd, dIdl_dVb, dIdl_dT; double Ids, Gm, Gds, Gmb; double CoxWovL; double Rds, dRds_dVg, dRds_dVb, dRds_dT, WVCox, WVCoxRds; double Vgst2Vtm, dVgst2Vtm_dT, VdsatCV, dVdsatCV_dVg, dVdsatCV_dVb; double Leff, Weff, dWeff_dVg, dWeff_dVb; double AbulkCV, dAbulkCV_dVb; double qgdo, qgso, cgdo, cgso; double dxpart, sxpart; struct b3soipdSizeDependParam *pParam; int ByPass, Check, ChargeComputationNeeded = 0, error; double gbbsp, gbbdp, gbbg, gbbb, gbbp, gbbT; double gddpsp, gddpdp, gddpg, gddpb, gddpT; double gsspsp, gsspdp, gsspg, gsspb, gsspT; double Gbpbs, Gbpps; double ves, ved, veb, vge = 0.0, delves, vedo, delved; double vps, vpd, Vps, delvps; double Vbd, Ves, Vesfb, DeltVthtemp, dDeltVthtemp_dT; double Vbp, dVbp_dVb; double DeltVthw, dDeltVthw_dVb, dDeltVthw_dT; double Gm0, Gds0, Gmb0, GmT0, Gmc, GmT; double dDIBL_Sft_dVb; double Idgidl, Gdgidld, Gdgidlg, Isgidl, Gsgidlg; double Gjsd, Gjsb, GjsT, Gjdd, Gjdb, GjdT; double Ibp, Iii, Giid, Giig, Giib, GiiT, Gcd, Gcb, GcT, ceqbody, ceqbodcon; double gppb, gppp, gppT; double delTemp, deldelTemp, Temp; double ceqth, ceqqth; double K1; double qjs = 0.0, gcjsbs, gcjsT; double qjd = 0.0, gcjdbs, gcjdds, gcjdT; double qge; double ceqqe; double ni, Eg, Cbox, CboxWL; double cjsbs; double dVfbeff_dVrg; double qinv, qgate = 0.0, qbody = 0.0, qdrn = 0.0, qsrc, qsub = 0.0; double cqgate, cqbody, cqdrn, cqsub, cqtemp; double Cgg, Cgd, Cgb; double Csg, Csd, Csb, Cbg = 0.0, Cbd = 0.0, Cbb = 0.0; double Cgg1, Cgb1, Cgd1, Cbg1, Cbb1, Cbd1, Csg1, Csd1, Csb1; double Ibs1 ,dIbs1_dVb ,dIbs1_dT; double Ibs2 ,dIbs2_dVb ,dIbs2_dT; double Ibs3 ,dIbs3_dVb ,dIbs3_dVd, dIbs3_dT; double Ibs4 ,dIbs4_dVb ,dIbs4_dT; double Ibd1 ,dIbd1_dVb ,dIbd1_dVd ,dIbd1_dT; double Ibd2 ,dIbd2_dVb ,dIbd2_dVd ,dIbd2_dT; double Ibd3 ,dIbd3_dVb ,dIbd3_dVd ,dIbd3_dT; double Ibd4 ,dIbd4_dVb ,dIbd4_dVd ,dIbd4_dT; double WTsi, NVtm1, NVtm2; double Ic ,dIc_dVb ,dIc_dVd; double Ibs; double Ibd; double Denomi ,dDenomi_dVg ,dDenomi_dVd ,dDenomi_dVb ,dDenomi_dT; double Qsub0 = 0.0, dQsub0_dVg, dQsub0_dVb, dQsub0_dVd; double Qac0 = 0.0, dQac0_dVb, dQac0_dVd; double Qe1 , dQe1_dVb, dQe1_dVe, dQe1_dT; double Ce1b ,Ce1e, Ce1T; double dQac0_dVrg, dQsub0_dVrg; /* for self-heating */ double vbi, vfbb, phi, sqrtPhi, Xdep0, jbjt, jdif, jrec, jtun, u0temp, vsattemp; double rds0, ua, ub, uc; double dvbi_dT, dvfbb_dT, djbjt_dT, djdif_dT, djrec_dT, djtun_dT, du0temp_dT; double dvsattemp_dT, drds0_dT, dua_dT, dub_dT, duc_dT, dni_dT, dVtm_dT; double dVfbeff_dT, dQac0_dT, dQsub0_dT; double CbT, CsT, CgT; /* v2.0 release */ double Vbsh, dVbsh_dVb; double sqrtPhisExt, dsqrtPhisExt_dVb; double T13, T14; double dT11_dVb, dT13_dVb, dT14_dVb; double dVgst_dVd; double Vdsatii0, dVdsatii0_dT; double VgsStep, dVgsStep_dT, Ratio, dRatio_dVg, dRatio_dVb, dRatio_dVd, dRatio_dT, dTempRatio_dT; double Vdiff, dVdiff_dVg, dVdiff_dVb, dVdiff_dVd, dVdiff_dT; double dNVtm1_dT; double NVtmf, NVtmr, dNVtmf_dT, dNVtmr_dT; double TempRatioMinus1; double Ahli, dAhli_dT; double WsTsi, WdTsi; double dPhiBSWG_dT, dcjsbs_dT, darg_dT = 0.0, ddT3_dVb_dT = 0.0; double dT7_dT, dT0_dT7, dT1_dT7, dT2_dT7; double CoxWLb, CoxWLcenb; double ExpVbsNVtm, dExpVbsNVtm_dVb, dExpVbsNVtm_dT; double ExpVbdNVtm, dExpVbdNVtm_dVb, dExpVbdNVtm_dVd, dExpVbdNVtm_dT; double Ien, dIen_dT, Iendif, dIendif_dT; double Ibsdif, dIbsdif_dVb, dIbsdif_dT; double Ibddif, dIbddif_dVb, dIbddif_dVd, dIbddif_dT; double Ehlis, dEhlis_dVb, dEhlis_dT; double EhlisFactor, dEhlisFactor_dVb, dEhlisFactor_dT; double Ehlid, dEhlid_dVb, dEhlid_dVd, dEhlid_dT; double EhlidFactor, dEhlidFactor_dVb, dEhlidFactor_dVd, dEhlidFactor_dT; double E2ndFactor, dE2ndFactor_dVb, dE2ndFactor_dVd, dE2ndFactor_dT; double dT10_dT, dT11_dT, DioMax; double cjdbs, dcjdbs_dT; double wdios, wdiod, wdiosCV, wdiodCV; /* for capMod3 */ double Cox, Tox, Tcen, dTcen_dVg, dTcen_dVb, LINK, Ccen, Coxeff, dCoxeff_dVg, dCoxeff_dVb; double CoxWLcen, QovCox, dQac0_dVg, DeltaPhi, dDeltaPhi_dVg, dDeltaPhi_dVd, dDeltaPhi_dVb; double dTcen_dVd, dTcen_dT, dCoxeff_dVd, dCoxeff_dT, dCoxWLcenb_dT, qinoi, qbulk; double T3zb, lt1zb, ltwzb, Theta0zb; double Delt_vthzb, dDelt_vthzb_dT; double DeltVthwzb, dDeltVthwzb_dT; double DeltVthtempzb, dDeltVthtempzb_dT; double Vthzb = 0.0, dVthzb_dT = 0.0, Vfbzb, dVfbzb_dT; /* v2.2 release */ double Vgb, dVgb_dVg, dVgb_dVb, Vox, dVox_dVg, dVox_dVd, dVox_dVb; double OxideRatio, Vaux, dVaux_dVg, dVaux_dVd, dVaux_dVb; double Igb, dIgb_dVg, dIgb_dVd, dIgb_dVb; double ceqgate; double dT0_dVox, Voxeff, dVoxeff_dVox; double dVox_dT = 0.0, dVaux_dT = 0.0, dIgb_dT; double Voxacc, dVoxacc_dVg, dVoxacc_dVd, dVoxacc_dVb; double Voxdepinv, dVoxdepinv_dVg, dVoxdepinv_dVb, dVoxdepinv_dVd; double dVoxdepinv_dT = 0.0; double Igb1, dIgb1_dVg, dIgb1_dVd, dIgb1_dVb, dIgb1_dT; double Igb2, dIgb2_dVg, dIgb2_dVd, dIgb2_dVb, dIgb2_dT; double gigs, gigd, gigb, gigg; double gigT; double m; for (; model != NULL; model = B3SOIPDnextModel(model)) { for (here = B3SOIPDinstances(model); here != NULL; here = B3SOIPDnextInstance(here)) { Check = 0; ByPass = 0; selfheat = (model->B3SOIPDshMod == 1) && (here->B3SOIPDrth0 != 0.0); pParam = here->pParam; if ((ckt->CKTmode & MODEINITSMSIG)) { vs = *(ckt->CKTrhsOld + here->B3SOIPDsNodePrime); if (!here->B3SOIPDvbsusrGiven) { vbs = *(ckt->CKTstate0 + here->B3SOIPDvbs); vb = *(ckt->CKTrhsOld + here->B3SOIPDbNode); } else { vbs = here->B3SOIPDvbsusr; vb = here->B3SOIPDvbsusr + vs; } vgs = *(ckt->CKTstate0 + here->B3SOIPDvgs); ves = *(ckt->CKTstate0 + here->B3SOIPDves); vps = *(ckt->CKTstate0 + here->B3SOIPDvps); vds = *(ckt->CKTstate0 + here->B3SOIPDvds); delTemp = *(ckt->CKTstate0 + here->B3SOIPDdeltemp); vg = *(ckt->CKTrhsOld + here->B3SOIPDgNode); vd = *(ckt->CKTrhsOld + here->B3SOIPDdNodePrime); vp = *(ckt->CKTrhsOld + here->B3SOIPDpNode); ve = *(ckt->CKTrhsOld + here->B3SOIPDeNode); } else if ((ckt->CKTmode & MODEINITTRAN)) { vs = *(ckt->CKTrhsOld + here->B3SOIPDsNodePrime); if (!here->B3SOIPDvbsusrGiven) { vbs = *(ckt->CKTstate1 + here->B3SOIPDvbs); vb = *(ckt->CKTrhsOld + here->B3SOIPDbNode); } else { vbs = here->B3SOIPDvbsusr; vb = here->B3SOIPDvbsusr + vs; } vgs = *(ckt->CKTstate1 + here->B3SOIPDvgs); ves = *(ckt->CKTstate1 + here->B3SOIPDves); vps = *(ckt->CKTstate1 + here->B3SOIPDvps); vds = *(ckt->CKTstate1 + here->B3SOIPDvds); delTemp = *(ckt->CKTstate1 + here->B3SOIPDdeltemp); vg = *(ckt->CKTrhsOld + here->B3SOIPDgNode); vd = *(ckt->CKTrhsOld + here->B3SOIPDdNodePrime); vp = *(ckt->CKTrhsOld + here->B3SOIPDpNode); ve = *(ckt->CKTrhsOld + here->B3SOIPDeNode); } else if ((ckt->CKTmode & MODEINITJCT) && !here->B3SOIPDoff) { vds = model->B3SOIPDtype * here->B3SOIPDicVDS; vgs = model->B3SOIPDtype * here->B3SOIPDicVGS; ves = model->B3SOIPDtype * here->B3SOIPDicVES; vbs = model->B3SOIPDtype * here->B3SOIPDicVBS; vps = model->B3SOIPDtype * here->B3SOIPDicVPS; vg = vd = vs = vp = ve = 0.0; delTemp = 0.0; here->B3SOIPDphi = pParam->B3SOIPDphi; if ((vds == 0.0) && (vgs == 0.0) && (vbs == 0.0) && ((ckt->CKTmode & (MODETRAN | MODEAC|MODEDCOP | MODEDCTRANCURVE)) || (!(ckt->CKTmode & MODEUIC)))) { vbs = 0.0; vgs = model->B3SOIPDtype*0.1 + pParam->B3SOIPDvth0; vds = 0.0; ves = 0.0; vps = 0.0; } } else if ((ckt->CKTmode & (MODEINITJCT | MODEINITFIX)) && (here->B3SOIPDoff)) { delTemp = vps = vbs = vgs = vds = ves = 0.0; vg = vd = vs = vp = ve = 0.0; } else { #ifndef PREDICTOR if ((ckt->CKTmode & MODEINITPRED)) { xfact = ckt->CKTdelta / ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->B3SOIPDvbs) = *(ckt->CKTstate1 + here->B3SOIPDvbs); vbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B3SOIPDvbs)) - (xfact * (*(ckt->CKTstate2 + here->B3SOIPDvbs))); *(ckt->CKTstate0 + here->B3SOIPDvgs) = *(ckt->CKTstate1 + here->B3SOIPDvgs); vgs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B3SOIPDvgs)) - (xfact * (*(ckt->CKTstate2 + here->B3SOIPDvgs))); *(ckt->CKTstate0 + here->B3SOIPDves) = *(ckt->CKTstate1 + here->B3SOIPDves); ves = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B3SOIPDves)) - (xfact * (*(ckt->CKTstate2 + here->B3SOIPDves))); *(ckt->CKTstate0 + here->B3SOIPDvps) = *(ckt->CKTstate1 + here->B3SOIPDvps); vps = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B3SOIPDvps)) - (xfact * (*(ckt->CKTstate2 + here->B3SOIPDvps))); *(ckt->CKTstate0 + here->B3SOIPDvds) = *(ckt->CKTstate1 + here->B3SOIPDvds); vds = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B3SOIPDvds)) - (xfact * (*(ckt->CKTstate2 + here->B3SOIPDvds))); *(ckt->CKTstate0 + here->B3SOIPDvbd) = *(ckt->CKTstate0 + here->B3SOIPDvbs) - *(ckt->CKTstate0 + here->B3SOIPDvds); *(ckt->CKTstate0 + here->B3SOIPDvg) = *(ckt->CKTstate1 + here->B3SOIPDvg); *(ckt->CKTstate0 + here->B3SOIPDvd) = *(ckt->CKTstate1 + here->B3SOIPDvd); *(ckt->CKTstate0 + here->B3SOIPDvs) = *(ckt->CKTstate1 + here->B3SOIPDvs); *(ckt->CKTstate0 + here->B3SOIPDvp) = *(ckt->CKTstate1 + here->B3SOIPDvp); *(ckt->CKTstate0 + here->B3SOIPDve) = *(ckt->CKTstate1 + here->B3SOIPDve); /* Only predict ve */ ve = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B3SOIPDve)) - (xfact * (*(ckt->CKTstate2 + here->B3SOIPDve))); /* Then update vg, vs, vb, vd, vp base on ve */ vs = ve - model->B3SOIPDtype * ves; vg = model->B3SOIPDtype * vgs + vs; vd = model->B3SOIPDtype * vds + vs; vb = model->B3SOIPDtype * vbs + vs; vp = model->B3SOIPDtype * vps + vs; delTemp = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B3SOIPDdeltemp))-(xfact * (*(ckt->CKTstate2 + here->B3SOIPDdeltemp))); /* v2.2.3 bug fix */ *(ckt->CKTstate0 + here->B3SOIPDdeltemp) = *(ckt->CKTstate1 + here->B3SOIPDdeltemp); if (selfheat) { here->B3SOIPDphi = 2.0 * here->B3SOIPDvtm * log(pParam->B3SOIPDnpeak / here->B3SOIPDni); } } else { #endif /* PREDICTOR */ vg = B3SOIPDlimit(*(ckt->CKTrhsOld + here->B3SOIPDgNode), *(ckt->CKTstate0 + here->B3SOIPDvg), 3.0, &Check); vd = B3SOIPDlimit(*(ckt->CKTrhsOld + here->B3SOIPDdNodePrime), *(ckt->CKTstate0 + here->B3SOIPDvd), 3.0, &Check); vs = B3SOIPDlimit(*(ckt->CKTrhsOld + here->B3SOIPDsNodePrime), *(ckt->CKTstate0 + here->B3SOIPDvs), 3.0, &Check); vp = B3SOIPDlimit(*(ckt->CKTrhsOld + here->B3SOIPDpNode), *(ckt->CKTstate0 + here->B3SOIPDvp), 3.0, &Check); ve = B3SOIPDlimit(*(ckt->CKTrhsOld + here->B3SOIPDeNode), *(ckt->CKTstate0 + here->B3SOIPDve), 3.0, &Check); delTemp = *(ckt->CKTrhsOld + here->B3SOIPDtempNode); vbs = model->B3SOIPDtype * (*(ckt->CKTrhsOld+here->B3SOIPDbNode) - *(ckt->CKTrhsOld+here->B3SOIPDsNodePrime)); vps = model->B3SOIPDtype * (vp - vs); vgs = model->B3SOIPDtype * (vg - vs); ves = model->B3SOIPDtype * (ve - vs); vds = model->B3SOIPDtype * (vd - vs); #ifndef PREDICTOR } #endif /* PREDICTOR */ vbd = vbs - vds; vgd = vgs - vds; ved = ves - vds; vgdo = *(ckt->CKTstate0 + here->B3SOIPDvgs) - *(ckt->CKTstate0 + here->B3SOIPDvds); vedo = *(ckt->CKTstate0 + here->B3SOIPDves) - *(ckt->CKTstate0 + here->B3SOIPDvds); delvbs = vbs - *(ckt->CKTstate0 + here->B3SOIPDvbs); delvbd = vbd - *(ckt->CKTstate0 + here->B3SOIPDvbd); delvgs = vgs - *(ckt->CKTstate0 + here->B3SOIPDvgs); delves = ves - *(ckt->CKTstate0 + here->B3SOIPDves); delvps = vps - *(ckt->CKTstate0 + here->B3SOIPDvps); deldelTemp = delTemp - *(ckt->CKTstate0 + here->B3SOIPDdeltemp); delvds = vds - *(ckt->CKTstate0 + here->B3SOIPDvds); delvgd = vgd - vgdo; delved = ved - vedo; if (here->B3SOIPDmode >= 0) { cdhat = here->B3SOIPDcd + (here->B3SOIPDgm-here->B3SOIPDgjdg) * delvgs + (here->B3SOIPDgds - here->B3SOIPDgjdd) * delvds + (here->B3SOIPDgmbs - here->B3SOIPDgjdb) * delvbs + (here->B3SOIPDgmT - here->B3SOIPDgjdT) * deldelTemp; } else { cdhat = here->B3SOIPDcd + (here->B3SOIPDgm-here->B3SOIPDgjdg) * delvgd - (here->B3SOIPDgds - here->B3SOIPDgjdd) * delvds + (here->B3SOIPDgmbs - here->B3SOIPDgjdb) * delvbd + (here->B3SOIPDgmT - here->B3SOIPDgjdT) * deldelTemp; } cbhat = here->B3SOIPDcb + here->B3SOIPDgbgs * delvgs + here->B3SOIPDgbbs * delvbs + here->B3SOIPDgbds * delvds + here->B3SOIPDgbps * delvps + here->B3SOIPDgbT * deldelTemp; #ifndef NOBYPASS /* following should be one big if connected by && all over * the place, but some C compilers can't handle that, so * we split it up here to let them digest it in stages */ if ((!(ckt->CKTmode & MODEINITPRED)) && (ckt->CKTbypass) && Check == 0) if ((fabs(delvbs) < (ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->B3SOIPDvbs))) + ckt->CKTvoltTol)) ) if ((fabs(delvbd) < (ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0+here->B3SOIPDvbd))) + ckt->CKTvoltTol)) ) if ((fabs(delvgs) < (ckt->CKTreltol * MAX(fabs(vgs), fabs(*(ckt->CKTstate0+here->B3SOIPDvgs))) + ckt->CKTvoltTol))) if ((fabs(delves) < (ckt->CKTreltol * MAX(fabs(ves), fabs(*(ckt->CKTstate0+here->B3SOIPDves))) + ckt->CKTvoltTol))) if ( (here->B3SOIPDbodyMod == 0) || (here->B3SOIPDbodyMod == 2) || (fabs(delvps) < (ckt->CKTreltol * MAX(fabs(vps), fabs(*(ckt->CKTstate0+here->B3SOIPDvps))) + ckt->CKTvoltTol)) ) if ( (here->B3SOIPDtempNode == 0) || (fabs(deldelTemp) < (ckt->CKTreltol * MAX(fabs(delTemp), fabs(*(ckt->CKTstate0+here->B3SOIPDdeltemp))) + ckt->CKTvoltTol*1e4))) if ((fabs(delvds) < (ckt->CKTreltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0+here->B3SOIPDvds))) + ckt->CKTvoltTol))) if ((fabs(cdhat - here->B3SOIPDcd) < ckt->CKTreltol * MAX(fabs(cdhat),fabs(here->B3SOIPDcd)) + ckt->CKTabstol)) if ((fabs(cbhat - here->B3SOIPDcb) < ckt->CKTreltol * MAX(fabs(cbhat),fabs(here->B3SOIPDcb)) + ckt->CKTabstol) ) { /* bypass code */ vbs = *(ckt->CKTstate0 + here->B3SOIPDvbs); vbd = *(ckt->CKTstate0 + here->B3SOIPDvbd); vgs = *(ckt->CKTstate0 + here->B3SOIPDvgs); ves = *(ckt->CKTstate0 + here->B3SOIPDves); vps = *(ckt->CKTstate0 + here->B3SOIPDvps); vds = *(ckt->CKTstate0 + here->B3SOIPDvds); delTemp = *(ckt->CKTstate0 + here->B3SOIPDdeltemp); /* calculate Vds for temperature conductance calculation in bypass (used later when filling Temp node matrix) */ Vds = here->B3SOIPDmode > 0 ? vds : -vds; vgd = vgs - vds; vgb = vgs - vbs; veb = ves - vbs; if ((ckt->CKTmode & (MODETRAN | MODEAC)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) { ByPass = 1; goto line755; } else { goto line850; } } #endif /*NOBYPASS*/ von = here->B3SOIPDvon; if (*(ckt->CKTstate0 + here->B3SOIPDvds) >= 0.0) T0 = *(ckt->CKTstate0 + here->B3SOIPDvbs); else T0 = *(ckt->CKTstate0 + here->B3SOIPDvbd); if (vds >= 0.0) { vbs = B3SOIPDlimit(vbs, T0, 0.2, &Check); vbd = vbs - vds; vb = model->B3SOIPDtype * vbs + vs; } else { vbd = B3SOIPDlimit(vbd, T0, 0.2, &Check); vbs = vbd + vds; vb = model->B3SOIPDtype * vbs + vd; } delTemp =B3SOIPDlimit(delTemp, *(ckt->CKTstate0 + here->B3SOIPDdeltemp),5.0,&Check); } /* Calculate temperature dependent values for self-heating effect */ Temp = delTemp + ckt->CKTtemp; dTempRatio_dT = 1 / model->B3SOIPDtnom; TempRatio = Temp * dTempRatio_dT; if (selfheat) { Vtm = KboQ * Temp; T0 = 1108.0 + Temp; T5 = Temp * Temp; Eg = 1.16 - 7.02e-4 * T5 / T0; T1 = ((7.02e-4 * T5) - T0 * (14.04e-4 * Temp)) / T0 / T0; /* T1 = dEg / dT */ T2 = 1.9230584e-4; /* T2 = 1 / 300.15^(3/2) */ T5 = sqrt(Temp); T3 = 1.45e10 * Temp * T5 * T2; T4 = exp(21.5565981 - Eg / (2.0 * Vtm)); ni = T3 * T4; dni_dT = 2.175e10 * T2 * T5 * T4 + T3 * T4 * (-Vtm * T1 + Eg * KboQ) / (2.0 * Vtm * Vtm); T0 = log(1.0e20 * pParam->B3SOIPDnpeak / (ni * ni)); vbi = Vtm * T0; dvbi_dT = KboQ * T0 + Vtm * (-2.0 * dni_dT / ni); if (pParam->B3SOIPDnsub > 0) { T0 = log(pParam->B3SOIPDnpeak / pParam->B3SOIPDnsub); vfbb = -model->B3SOIPDtype * Vtm * T0; dvfbb_dT = -model->B3SOIPDtype * KboQ * T0; } else { T0 = log(-pParam->B3SOIPDnpeak * pParam->B3SOIPDnsub / ni / ni); vfbb = -model->B3SOIPDtype * Vtm * T0; dvfbb_dT = -model->B3SOIPDtype * (KboQ * T0 - Vtm * 2.0 * dni_dT / ni); } /* phi = 2.0 * Vtm * log(pParam->B3SOIPDnpeak / ni); */ phi = here->B3SOIPDphi; sqrtPhi = sqrt(phi); Xdep0 = sqrt(2.0 * EPSSI / (Charge_q * pParam->B3SOIPDnpeak * 1.0e6)) * sqrtPhi; /* Save the values below for phi calculation in B3SOIPDaccept() */ here->B3SOIPDvtm = Vtm; here->B3SOIPDni = ni; T3 = TempRatio - 1.0; T8 = 1/ model->B3SOIPDtnom; T4 = Eg300 / Vtm * T3; dT4_dT = Eg300 / Vtm / Vtm * (Vtm * T8 - T3 * KboQ); T7 = model->B3SOIPDxbjt * T4 / pParam->B3SOIPDndiode; dT7_dT = model->B3SOIPDxbjt * dT4_dT / pParam->B3SOIPDndiode; DEXP(T7, T0, dT0_dT7); dT0_dT = dT0_dT7 * dT7_dT; if (model->B3SOIPDxbjt == model->B3SOIPDxdif) { T1 = T0; dT1_dT = dT0_dT; } else { T7 = model->B3SOIPDxdif * T4 / pParam->B3SOIPDndiode; dT7_dT = model->B3SOIPDxdif * dT4_dT / pParam->B3SOIPDndiode; DEXP(T7, T1, dT1_dT7); dT1_dT = dT1_dT7 * dT7_dT; } T7 = model->B3SOIPDxrec * T4 / pParam->B3SOIPDnrecf0; dT7_dT = model->B3SOIPDxrec * dT4_dT / pParam->B3SOIPDnrecf0; DEXP(T7, T2, dT2_dT7); dT2_dT = dT2_dT7 * dT7_dT; /* high level injection */ Ahli = pParam->B3SOIPDahli * T0; dAhli_dT = pParam->B3SOIPDahli * dT0_dT; jbjt = pParam->B3SOIPDisbjt * T0; jdif = pParam->B3SOIPDisdif * T1; jrec = pParam->B3SOIPDisrec * T2; djbjt_dT = pParam->B3SOIPDisbjt * dT0_dT; djdif_dT = pParam->B3SOIPDisdif * dT1_dT; djrec_dT = pParam->B3SOIPDisrec * dT2_dT; T7 = model->B3SOIPDxtun * T3; dT7_dT = model->B3SOIPDxtun * T8; DEXP(T7, T0, dT0_dT7); dT0_dT = dT0_dT7 * dT7_dT; jtun = pParam->B3SOIPDistun * T0; djtun_dT = pParam->B3SOIPDistun * dT0_dT; u0temp = pParam->B3SOIPDu0 * pow(TempRatio, pParam->B3SOIPDute); du0temp_dT = pParam->B3SOIPDu0 * pParam->B3SOIPDute * pow(TempRatio, pParam->B3SOIPDute - 1.0) * T8; vsattemp = pParam->B3SOIPDvsat - pParam->B3SOIPDat * T3; dvsattemp_dT = -pParam->B3SOIPDat * T8; rds0 = (pParam->B3SOIPDrdsw + pParam->B3SOIPDprt * T3) / pParam->B3SOIPDrds0denom; drds0_dT = pParam->B3SOIPDprt / pParam->B3SOIPDrds0denom * T8; ua = pParam->B3SOIPDuatemp + pParam->B3SOIPDua1 * T3; ub = pParam->B3SOIPDubtemp + pParam->B3SOIPDub1 * T3; uc = pParam->B3SOIPDuctemp + pParam->B3SOIPDuc1 * T3; dua_dT = pParam->B3SOIPDua1 * T8; dub_dT = pParam->B3SOIPDub1 * T8; duc_dT = pParam->B3SOIPDuc1 * T8; } else { vbi = pParam->B3SOIPDvbi; vfbb = pParam->B3SOIPDvfbb; phi = pParam->B3SOIPDphi; sqrtPhi = pParam->B3SOIPDsqrtPhi; Xdep0 = pParam->B3SOIPDXdep0; jbjt = pParam->B3SOIPDjbjt; jdif = pParam->B3SOIPDjdif; jrec = pParam->B3SOIPDjrec; jtun = pParam->B3SOIPDjtun; /* v2.2.2 bug fix */ Ahli = pParam->B3SOIPDahli0; u0temp = pParam->B3SOIPDu0temp; vsattemp = pParam->B3SOIPDvsattemp; rds0 = pParam->B3SOIPDrds0; ua = pParam->B3SOIPDua; ub = pParam->B3SOIPDub; uc = pParam->B3SOIPDuc; dni_dT = dvbi_dT = dvfbb_dT = djbjt_dT = djdif_dT = 0.0; djrec_dT = djtun_dT = du0temp_dT = dvsattemp_dT = 0.0; drds0_dT = dua_dT = dub_dT = duc_dT = 0.0; dAhli_dT = 0; } /* TempRatio used for Vth and mobility */ if (selfheat) { TempRatioMinus1 = Temp / model->B3SOIPDtnom - 1.0; } else { TempRatioMinus1 = ckt->CKTtemp / model->B3SOIPDtnom - 1.0; } /* determine DC current and derivatives */ vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; ved = ves - vds; veb = ves - vbs; vge = vgs - ves; vpd = vps - vds; if (vds >= 0.0) { /* normal mode */ here->B3SOIPDmode = 1; Vds = vds; Vgs = vgs; Vbs = vbs; Vbd = vbd; Ves = ves; Vps = vps; wdios = pParam->B3SOIPDwdios; wdiod = pParam->B3SOIPDwdiod; wdiosCV = pParam->B3SOIPDwdiosCV; wdiodCV = pParam->B3SOIPDwdiodCV; } else { /* inverse mode */ here->B3SOIPDmode = -1; Vds = -vds; Vgs = vgd; Vbs = vbd; Vbd = vbs; Ves = ved; Vps = vpd; wdios = pParam->B3SOIPDwdiod; wdiod = pParam->B3SOIPDwdios; wdiosCV = pParam->B3SOIPDwdiodCV; wdiodCV = pParam->B3SOIPDwdiosCV; } Vesfb = Ves - vfbb; Cbox = model->B3SOIPDcbox; K1 = pParam->B3SOIPDk1eff; ChargeComputationNeeded = ((ckt->CKTmode & (MODEAC | MODETRAN | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) ? 1 : 0; if (here->B3SOIPDdebugMod <0) ChargeComputationNeeded = 1; /* Poly Gate Si Depletion Effect */ T0 = pParam->B3SOIPDvfb + phi; if ((pParam->B3SOIPDngate > 1.e18) && (pParam->B3SOIPDngate < 1.e25) && (Vgs > T0)) /* added to avoid the problem caused by ngate */ { T1 = 1.0e6 * Charge_q * EPSSI * pParam->B3SOIPDngate / (model->B3SOIPDcox * model->B3SOIPDcox); T4 = sqrt(1.0 + 2.0 * (Vgs - T0) / T1); T2 = T1 * (T4 - 1.0); T3 = 0.5 * T2 * T2 / T1; /* T3 = Vpoly */ T7 = 1.12 - T3 - 0.05; T6 = sqrt(T7 * T7 + 0.224); T5 = 1.12 - 0.5 * (T7 + T6); Vgs_eff = Vgs - T5; dVgs_eff_dVg = 1.0 - (0.5 - 0.5 / T4) * (1.0 + T7 / T6); } else { Vgs_eff = Vgs; dVgs_eff_dVg = 1.0; } Leff = pParam->B3SOIPDleff; if (selfheat) { Vtm = KboQ * Temp; dVtm_dT = KboQ; } else { Vtm = model->B3SOIPDvtm; dVtm_dT = 0.0; } V0 = vbi - phi; Vbp = Vbs - Vps; dVbp_dVb = 1; /* T2 is Vbs limited above Vbsc=-5 */ T0 = Vbs + 5 - 0.001; T1 = sqrt(T0 * T0 - 0.004 * (-5)); T2 = (-5) + 0.5 * (T0 + T1); dT2_dVb = 0.5 * (1.0 + T0 / T1); /* Vbsh is T2 limited below 1.5 */ T0 = 1.5; T1 = T0 - T2 - 0.002; T3 = sqrt(T1 * T1 + 0.008 * T0); Vbsh = T0 - 0.5 * (T1 + T3); dVbsh_dVb = 0.5 * (1.0 + T1 / T3) * dT2_dVb; /* Vbseff is Vbsh limited to 0.95*phi */ T0 = 0.95 * phi; T1 = T0 - Vbsh - 0.002; T2 = sqrt(T1 * T1 + 0.008 * T0); Vbseff = T0 - 0.5 * (T1 + T2); dVbseff_dVb = 0.5 * (1.0 + T1 / T2) * dVbsh_dVb; here->B3SOIPDvbseff = Vbs; /* Below all the variables refer to Vbseff */ if (dVbseff_dVb < 1e-20) { dVbseff_dVb = 1e-20; dVbsh_dVb *= 1e20; } else dVbsh_dVb /= dVbseff_dVb; Phis = phi - Vbseff; dPhis_dVb = -1; sqrtPhis = sqrt(Phis); dsqrtPhis_dVb = -0.5 / sqrtPhis; Xdep = Xdep0 * sqrtPhis / sqrtPhi; dXdep_dVb = (Xdep0 / sqrtPhi) * dsqrtPhis_dVb; /* Vth Calculation */ T3 = sqrt(Xdep); T0 = pParam->B3SOIPDdvt2 * Vbseff; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->B3SOIPDdvt2 ; } else /* Added to avoid any discontinuity problems caused by dvt2 */ { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->B3SOIPDdvt2 * T4 * T4 ; } lt1 = model->B3SOIPDfactor1 * T3 * T1; dlt1_dVb =model->B3SOIPDfactor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * T2); T0 = pParam->B3SOIPDdvt2w * Vbseff; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->B3SOIPDdvt2w ; } else /* Added to avoid any discontinuity problems caused by dvt2w */ { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->B3SOIPDdvt2w * T4 * T4 ; } ltw= model->B3SOIPDfactor1 * T3 * T1; dltw_dVb=model->B3SOIPDfactor1*(0.5 / T3 * T1 * dXdep_dVb + T3 * T2); T0 = -0.5 * pParam->B3SOIPDdvt1 * Leff / lt1; if (T0 > -EXPL_THRESHOLD) { T1 = exp(T0); Theta0 = T1 * (1.0 + 2.0 * T1); dT1_dVb = -T0 / lt1 * T1 * dlt1_dVb; dTheta0_dVb = (1.0 + 4.0 * T1) * dT1_dVb; } else { T1 = MIN_EXPL; Theta0 = T1 * (1.0 + 2.0 * T1); dTheta0_dVb = 0.0; } here->B3SOIPDthetavth = pParam->B3SOIPDdvt0 * Theta0; Delt_vth = here->B3SOIPDthetavth * V0; dDelt_vth_dVb = pParam->B3SOIPDdvt0 * dTheta0_dVb * V0; if (selfheat) dDelt_vth_dT = here->B3SOIPDthetavth * dvbi_dT; else dDelt_vth_dT = 0.0; T0 = -0.5 * pParam->B3SOIPDdvt1w * pParam->B3SOIPDweff * Leff / ltw; if (T0 > -EXPL_THRESHOLD) { T1 = exp(T0); T2 = T1 * (1.0 + 2.0 * T1); dT1_dVb = -T0 / ltw * T1 * dltw_dVb; dT2_dVb = (1.0 + 4.0 * T1) * dT1_dVb; } else { T1 = MIN_EXPL; T2 = T1 * (1.0 + 2.0 * T1); dT2_dVb = 0.0; } T0 = pParam->B3SOIPDdvt0w * T2; DeltVthw = T0 * V0; dDeltVthw_dVb = pParam->B3SOIPDdvt0w * dT2_dVb * V0; if (selfheat) dDeltVthw_dT = T0 * dvbi_dT; else dDeltVthw_dT = 0.0; T0 = sqrt(1.0 + pParam->B3SOIPDnlx / Leff); T1 = (pParam->B3SOIPDkt1 + pParam->B3SOIPDkt1l / Leff + pParam->B3SOIPDkt2 * Vbseff); DeltVthtemp = pParam->B3SOIPDk1eff * (T0 - 1.0) * sqrtPhi + T1 * TempRatioMinus1; if (selfheat) dDeltVthtemp_dT = T1 / model->B3SOIPDtnom; else dDeltVthtemp_dT = 0.0; tmp2 = model->B3SOIPDtox * phi / (pParam->B3SOIPDweff + pParam->B3SOIPDw0); T3 = pParam->B3SOIPDeta0 + pParam->B3SOIPDetab * Vbseff; if (T3 < 1.0e-4) /* avoid discontinuity problems caused by etab */ { T9 = 1.0 / (3.0 - 2.0e4 * T3); T3 = (2.0e-4 - T3) * T9; T4 = T9 * T9 * pParam->B3SOIPDetab; dT3_dVb = T4 ; } else { dT3_dVb = pParam->B3SOIPDetab ; } DIBL_Sft = T3 * pParam->B3SOIPDtheta0vb0 * Vds; dDIBL_Sft_dVd = pParam->B3SOIPDtheta0vb0 * T3; dDIBL_Sft_dVb = pParam->B3SOIPDtheta0vb0 * Vds * dT3_dVb; T9 = 2.2361 / sqrtPhi; sqrtPhisExt = sqrtPhis - T9 * (Vbsh - Vbseff); dsqrtPhisExt_dVb = dsqrtPhis_dVb - T9 * (dVbsh_dVb - 1); Vth = model->B3SOIPDtype * pParam->B3SOIPDvth0 + pParam->B3SOIPDk1eff * (sqrtPhisExt - sqrtPhi) - pParam->B3SOIPDk2 * Vbseff- Delt_vth - DeltVthw +(pParam->B3SOIPDk3 + pParam->B3SOIPDk3b * Vbseff) * tmp2 + DeltVthtemp - DIBL_Sft; here->B3SOIPDvon = Vth; T6 = pParam->B3SOIPDk3b * tmp2 - pParam->B3SOIPDk2 + pParam->B3SOIPDkt2 * TempRatioMinus1; dVth_dVb = pParam->B3SOIPDk1eff * dsqrtPhisExt_dVb - dDelt_vth_dVb - dDeltVthw_dVb + T6 - dDIBL_Sft_dVb; /* this is actually dVth_dVbseff */ dVth_dVd = -dDIBL_Sft_dVd; if (selfheat) dVth_dT = dDeltVthtemp_dT - dDelt_vth_dT - dDeltVthw_dT; else dVth_dT = 0.0; /* dVthzb_dT calculation */ if ((model->B3SOIPDcapMod == 3) && (selfheat == 1)) { T3zb = sqrt(Xdep0); ltwzb = lt1zb = model->B3SOIPDfactor1 * T3zb; T0 = -0.5 * pParam->B3SOIPDdvt1 * Leff / lt1zb; if (T0 > -EXPL_THRESHOLD) { T1 = exp(T0); Theta0zb = T1 * (1.0 + 2.0 * T1); } else { T1 = MIN_EXPL; Theta0zb = T1 * (1.0 + 2.0 * T1); } Delt_vthzb = pParam->B3SOIPDdvt0 * Theta0zb * V0; dDelt_vthzb_dT = pParam->B3SOIPDdvt0 * Theta0zb * dvbi_dT; T0 = -0.5 * pParam->B3SOIPDdvt1w * pParam->B3SOIPDweff * Leff / ltwzb; if (T0 > -EXPL_THRESHOLD) { T1 = exp(T0); T2 = T1 * (1.0 + 2.0 * T1); } else { T1 = MIN_EXPL; T2 = T1 * (1.0 + 2.0 * T1); } T0 = pParam->B3SOIPDdvt0w * T2; DeltVthwzb = T0 * V0; dDeltVthwzb_dT = T0 * dvbi_dT; T0 = sqrt(1.0 + pParam->B3SOIPDnlx / Leff); T1 = (pParam->B3SOIPDkt1 + pParam->B3SOIPDkt1l / Leff); DeltVthtempzb = pParam->B3SOIPDk1eff * (T0 - 1.0) * sqrtPhi + T1 * TempRatioMinus1; dDeltVthtempzb_dT = T1 / model->B3SOIPDtnom; Vthzb = model->B3SOIPDtype * pParam->B3SOIPDvth0 - Delt_vthzb - DeltVthwzb + pParam->B3SOIPDk3 * tmp2 + DeltVthtempzb; dVthzb_dT = dDeltVthtempzb_dT - dDelt_vthzb_dT - dDeltVthwzb_dT; } /* Calculate n */ T2 = pParam->B3SOIPDnfactor * EPSSI / Xdep; dT2_dVb = - T2 / Xdep * dXdep_dVb; T3 = pParam->B3SOIPDcdsc + pParam->B3SOIPDcdscb * Vbseff + pParam->B3SOIPDcdscd * Vds; dT3_dVb = pParam->B3SOIPDcdscb; dT3_dVd = pParam->B3SOIPDcdscd; T4 = (T2 + T3 * Theta0 + pParam->B3SOIPDcit) / model->B3SOIPDcox; dT4_dVb = (dT2_dVb + Theta0 * dT3_dVb + dTheta0_dVb * T3) / model->B3SOIPDcox; dT4_dVd = Theta0 * dT3_dVd / model->B3SOIPDcox; if (T4 >= -0.5) { n = 1.0 + T4; dn_dVb = dT4_dVb; dn_dVd = dT4_dVd; } else /* avoid discontinuity problems caused by T4 */ { T0 = 1.0 / (3.0 + 8.0 * T4); n = (1.0 + 3.0 * T4) * T0; T0 *= T0; dn_dVb = T0 * dT4_dVb; dn_dVd = T0 * dT4_dVd; } /* Effective Vgst (Vgsteff) Calculation */ Vgst = Vgs_eff - Vth; dVgst_dVg = dVgs_eff_dVg; dVgst_dVd = -dVth_dVd; dVgst_dVb = -dVth_dVb; T10 = 2.0 * n * Vtm; VgstNVt = Vgst / T10; ExpArg = (2.0 * pParam->B3SOIPDvoff - Vgst) / T10; /* MCJ: Very small Vgst */ if (VgstNVt > EXPL_THRESHOLD) { Vgsteff = Vgst; /* T0 is dVgsteff_dVbseff */ T0 = -dVth_dVb; dVgsteff_dVg = dVgs_eff_dVg; dVgsteff_dVd = -dVth_dVd; dVgsteff_dVb = T0 * dVbseff_dVb; if (selfheat) dVgsteff_dT = -dVth_dT; else dVgsteff_dT = 0.0; } else if (ExpArg > EXPL_THRESHOLD) { T0 = (Vgst - pParam->B3SOIPDvoff) / (n * Vtm); ExpVgst = exp(T0); Vgsteff = Vtm * pParam->B3SOIPDcdep0 / model->B3SOIPDcox * ExpVgst; T3 = Vgsteff / (n * Vtm) ; /* T1 is dVgsteff_dVbseff */ T1 = -T3 * (dVth_dVb + T0 * Vtm * dn_dVb); dVgsteff_dVg = T3 * dVgs_eff_dVg; dVgsteff_dVd = -T3 * (dVth_dVd + T0 * Vtm * dn_dVd); dVgsteff_dVb = T1 * dVbseff_dVb; if (selfheat) dVgsteff_dT = -T3 * (dVth_dT + T0 * dVtm_dT * n) + Vgsteff / Temp; else dVgsteff_dT = 0.0; } else { ExpVgst = exp(VgstNVt); T1 = T10 * log(1.0 + ExpVgst); dT1_dVg = ExpVgst / (1.0 + ExpVgst); dT1_dVb = -dT1_dVg * (dVth_dVb + Vgst / n * dn_dVb) + T1 / n * dn_dVb; dT1_dVd = -dT1_dVg * (dVth_dVd + Vgst / n * dn_dVd) + T1 / n * dn_dVd; T3 = (1.0 / Temp); if (selfheat) dT1_dT = -dT1_dVg * (dVth_dT + Vgst * T3) + T1 * T3; else dT1_dT = 0.0; dT2_dVg = -model->B3SOIPDcox / (Vtm * pParam->B3SOIPDcdep0) * exp(ExpArg); T2 = 1.0 - T10 * dT2_dVg; dT2_dVd = -dT2_dVg * (dVth_dVd - 2.0 * Vtm * ExpArg * dn_dVd) + (T2 - 1.0) / n * dn_dVd; dT2_dVb = -dT2_dVg * (dVth_dVb - 2.0 * Vtm * ExpArg * dn_dVb) + (T2 - 1.0) / n * dn_dVb; if (selfheat) dT2_dT = -dT2_dVg * (dVth_dT - ExpArg * T10 * T3); else dT2_dT = 0.0; Vgsteff = T1 / T2; T3 = T2 * T2; /* T4 is dVgsteff_dVbseff */ T4 = (T2 * dT1_dVb - T1 * dT2_dVb) / T3; dVgsteff_dVb = T4 * dVbseff_dVb; dVgsteff_dVg = (T2 * dT1_dVg - T1 * dT2_dVg) / T3 * dVgs_eff_dVg; dVgsteff_dVd = (T2 * dT1_dVd - T1 * dT2_dVd) / T3; if (selfheat) dVgsteff_dT = (T2 * dT1_dT - T1 * dT2_dT) / T3; else dVgsteff_dT = 0.0; } Vgst2Vtm = Vgsteff + 2.0 * Vtm; if (selfheat) dVgst2Vtm_dT = 2.0 * dVtm_dT; else dVgst2Vtm_dT = 0.0; here->B3SOIPDVgsteff = Vgsteff; /* v2.2.3 bug fix */ /* Calculate Effective Channel Geometry */ T9 = sqrtPhis - sqrtPhi; Weff = pParam->B3SOIPDweff - (2.0 - here->B3SOIPDnbc) * (pParam->B3SOIPDdwg * Vgsteff + pParam->B3SOIPDdwb * T9); dWeff_dVg = -(2.0 - here->B3SOIPDnbc) * pParam->B3SOIPDdwg; dWeff_dVb = -(2.0 - here->B3SOIPDnbc) * pParam->B3SOIPDdwb * dsqrtPhis_dVb; if (Weff < 2.0e-8) /* to avoid the discontinuity problem due to Weff*/ { T0 = 1.0 / (6.0e-8 - 2.0 * Weff); Weff = 2.0e-8 * (4.0e-8 - Weff) * T0; T0 *= T0 * 4.0e-16; dWeff_dVg *= T0; dWeff_dVb *= T0; } T0 = pParam->B3SOIPDprwg * Vgsteff + pParam->B3SOIPDprwb * T9; if (T0 >= -0.9) { Rds = rds0 * (1.0 + T0); dRds_dVg = rds0 * pParam->B3SOIPDprwg; dRds_dVb = rds0 * pParam->B3SOIPDprwb * dsqrtPhis_dVb; if (selfheat && (Rds!=0.0)) dRds_dT = (1.0 + T0) * drds0_dT; else dRds_dT = 0.0; } else /* to avoid the discontinuity problem due to prwg and prwb*/ { T1 = 1.0 / (17.0 + 20.0 * T0); Rds = rds0 * (0.8 + T0) * T1; T1 *= T1; dRds_dVg = rds0 * pParam->B3SOIPDprwg * T1; dRds_dVb = rds0 * pParam->B3SOIPDprwb * dsqrtPhis_dVb * T1; if (selfheat && (Rds!=0.0)) dRds_dT = (0.8 + T0) * T1 * drds0_dT; else dRds_dT = 0.0; } here->B3SOIPDrds = Rds; /* v2.2.3 bug fix */ /* Calculate Abulk */ if (pParam->B3SOIPDa0 == 0.0) { Abulk0 = Abulk = 1.0; dAbulk0_dVb = dAbulk_dVg = dAbulk_dVb = 0.0; } else { T10 = pParam->B3SOIPDketa * Vbsh; if (T10 >= -0.9) { T11 = 1.0 / (1.0 + T10); dT11_dVb = -pParam->B3SOIPDketa * T11 * T11 * dVbsh_dVb; } else { /* added to avoid the problems caused by Keta */ T12 = 1.0 / (0.8 + T10); T11 = (17.0 + 20.0 * T10) * T12; dT11_dVb = -pParam->B3SOIPDketa * T12 * T12 * dVbsh_dVb; } T10 = pParam->B3SOIPDphi + pParam->B3SOIPDketas; T13 = (Vbsh * T11) / T10; dT13_dVb = (Vbsh * dT11_dVb + T11 * dVbsh_dVb) / T10; /* limit 1/sqrt(1-T13) to 6, starting at T13=0.96 */ if (T13 < 0.96) { T14 = 1 / sqrt(1-T13); T10 = 0.5 * T14 / (1-T13); dT14_dVb = T10 * dT13_dVb; } else { T11 = 1.0 / (1.0 - 1.043406*T13); T14 = (6.00167 - 6.26044 * T13) * T11; T10 = 0.001742 * T11 * T11; dT14_dVb = T10 * dT13_dVb; } T10 = 0.5 * pParam->B3SOIPDk1eff / sqrt(pParam->B3SOIPDphi + pParam->B3SOIPDketas); T1 = T10 * T14; dT1_dVb = T10 * dT14_dVb; T9 = sqrt(model->B3SOIPDxj * Xdep); tmp1 = Leff + 2.0 * T9; T5 = Leff / tmp1; tmp2 = pParam->B3SOIPDa0 * T5; tmp3 = pParam->B3SOIPDweff + pParam->B3SOIPDb1; tmp4 = pParam->B3SOIPDb0 / tmp3; T2 = tmp2 + tmp4; dT2_dVb = -T9 * tmp2 / tmp1 / Xdep * dXdep_dVb; T6 = T5 * T5; T7 = T5 * T6; Abulk0 = 1 + T1 * T2; dAbulk0_dVb = T1 * dT2_dVb + T2 * dT1_dVb; T8 = pParam->B3SOIPDags * pParam->B3SOIPDa0 * T7; dAbulk_dVg = -T1 * T8; Abulk = Abulk0 + dAbulk_dVg * Vgsteff; dAbulk_dVb = dAbulk0_dVb - T8 * Vgsteff * (dT1_dVb + 3.0 * T1 * dT2_dVb / tmp2); } if (Abulk0 < 0.01) { T9 = 1.0 / (3.0 - 200.0 * Abulk0); Abulk0 = (0.02 - Abulk0) * T9; dAbulk0_dVb *= T9 * T9; } if (Abulk < 0.01) { T9 = 1.0 / (3.0 - 200.0 * Abulk); Abulk = (0.02 - Abulk) * T9; dAbulk_dVb *= T9 * T9; } /* Mobility calculation */ if (model->B3SOIPDmobMod == 1) { T0 = Vgsteff + Vth + Vth; T2 = ua + uc * Vbseff; T3 = T0 / model->B3SOIPDtox; T5 = T3 * (T2 + ub * T3); dDenomi_dVg = (T2 + 2.0 * ub * T3) / model->B3SOIPDtox; dDenomi_dVd = dDenomi_dVg * 2 * dVth_dVd; dDenomi_dVb = dDenomi_dVg * 2 * dVth_dVb + uc * T3 ; if (selfheat) dDenomi_dT = dDenomi_dVg * 2 * dVth_dT + (dua_dT + Vbseff * duc_dT + dub_dT * T3 ) * T3; else dDenomi_dT = 0.0; } else if (model->B3SOIPDmobMod == 2) { T5 = Vgsteff / model->B3SOIPDtox * (ua + uc * Vbseff + ub * Vgsteff / model->B3SOIPDtox); dDenomi_dVg = (ua + uc * Vbseff + 2.0 * ub * Vgsteff / model->B3SOIPDtox) / model->B3SOIPDtox; dDenomi_dVd = 0.0; dDenomi_dVb = Vgsteff * uc / model->B3SOIPDtox ; if (selfheat) dDenomi_dT = Vgsteff / model->B3SOIPDtox * (dua_dT + Vbseff * duc_dT + dub_dT * Vgsteff / model->B3SOIPDtox); else dDenomi_dT = 0.0; } else /* mobMod == 3 */ { T0 = Vgsteff + Vth + Vth; T2 = 1.0 + uc * Vbseff; T3 = T0 / model->B3SOIPDtox; T4 = T3 * (ua + ub * T3); T5 = T4 * T2; dDenomi_dVg = (ua + 2.0 * ub * T3) * T2 / model->B3SOIPDtox; dDenomi_dVd = dDenomi_dVg * 2.0 * dVth_dVd; dDenomi_dVb = dDenomi_dVg * 2.0 * dVth_dVb + uc * T4 ; if (selfheat) dDenomi_dT = dDenomi_dVg * 2.0 * dVth_dT + (dua_dT + dub_dT * T3) * T3 * T2 + T4 * Vbseff * duc_dT; else dDenomi_dT = 0.0; } if (T5 >= -0.8) { Denomi = 1.0 + T5; } else /* Added to avoid the discontinuity problem caused by ua and ub*/ { T9 = 1.0 / (7.0 + 10.0 * T5); Denomi = (0.6 + T5) * T9; T9 *= T9; dDenomi_dVg *= T9; dDenomi_dVd *= T9; dDenomi_dVb *= T9; if (selfheat) dDenomi_dT *= T9; else dDenomi_dT = 0.0; } here->B3SOIPDueff = ueff = u0temp / Denomi; T9 = -ueff / Denomi; dueff_dVg = T9 * dDenomi_dVg; dueff_dVd = T9 * dDenomi_dVd; dueff_dVb = T9 * dDenomi_dVb; if (selfheat) dueff_dT = T9 * dDenomi_dT + du0temp_dT / Denomi; else dueff_dT = 0.0; /* Saturation Drain Voltage Vdsat */ WVCox = Weff * vsattemp * model->B3SOIPDcox; WVCoxRds = WVCox * Rds; /* dWVCoxRds_dT = WVCox * dRds_dT + Weff * model->B3SOIPDcox * Rds * dvsattemp_dT; */ Esat = 2.0 * vsattemp / ueff; EsatL = Esat * Leff; T0 = -EsatL /ueff; dEsatL_dVg = T0 * dueff_dVg; dEsatL_dVd = T0 * dueff_dVd; dEsatL_dVb = T0 * dueff_dVb; if (selfheat) dEsatL_dT = T0 * dueff_dT + EsatL / vsattemp * dvsattemp_dT; else dEsatL_dT = 0.0; /* Sqrt() */ a1 = pParam->B3SOIPDa1; if (a1 == 0.0) { Lambda = pParam->B3SOIPDa2; dLambda_dVg = 0.0; } else if (a1 > 0.0) /* Added to avoid the discontinuity problem caused by a1 and a2 (Lambda) */ { T0 = 1.0 - pParam->B3SOIPDa2; T1 = T0 - pParam->B3SOIPDa1 * Vgsteff - 0.0001; T2 = sqrt(T1 * T1 + 0.0004 * T0); Lambda = pParam->B3SOIPDa2 + T0 - 0.5 * (T1 + T2); dLambda_dVg = 0.5 * pParam->B3SOIPDa1 * (1.0 + T1 / T2); } else { T1 = pParam->B3SOIPDa2 + pParam->B3SOIPDa1 * Vgsteff - 0.0001; T2 = sqrt(T1 * T1 + 0.0004 * pParam->B3SOIPDa2); Lambda = 0.5 * (T1 + T2); dLambda_dVg = 0.5 * pParam->B3SOIPDa1 * (1.0 + T1 / T2); } here->B3SOIPDAbovVgst2Vtm = Abulk /Vgst2Vtm; /* v2.2.3 bug fix */ if (Rds > 0) { tmp2 = dRds_dVg / Rds + dWeff_dVg / Weff; tmp3 = dRds_dVb / Rds + dWeff_dVb / Weff; } else { tmp2 = dWeff_dVg / Weff; tmp3 = dWeff_dVb / Weff; } if ((Rds == 0.0) && (Lambda == 1.0)) { T0 = 1.0 / (Abulk * EsatL + Vgst2Vtm); tmp1 = 0.0; T1 = T0 * T0; T2 = Vgst2Vtm * T0; T3 = EsatL * Vgst2Vtm; Vdsat = T3 * T0; dT0_dVg = -(Abulk * dEsatL_dVg + EsatL * dAbulk_dVg + 1.0) * T1; dT0_dVd = -(Abulk * dEsatL_dVd) * T1; dT0_dVb = -(Abulk * dEsatL_dVb + EsatL * dAbulk_dVb) * T1; if (selfheat) dT0_dT = -(Abulk * dEsatL_dT + dVgst2Vtm_dT) * T1; else dT0_dT = 0.0; dVdsat_dVg = T3 * dT0_dVg + T2 * dEsatL_dVg + EsatL * T0; dVdsat_dVd = T3 * dT0_dVd + T2 * dEsatL_dVd; dVdsat_dVb = T3 * dT0_dVb + T2 * dEsatL_dVb; if (selfheat) dVdsat_dT = T3 * dT0_dT + T2 * dEsatL_dT + EsatL * T0 * dVgst2Vtm_dT; else dVdsat_dT = 0.0; } else { tmp1 = dLambda_dVg / (Lambda * Lambda); T9 = Abulk * WVCoxRds; T8 = Abulk * T9; T7 = Vgst2Vtm * T9; T6 = Vgst2Vtm * WVCoxRds; T0 = 2.0 * Abulk * (T9 - 1.0 + 1.0 / Lambda); dT0_dVg = 2.0 * (T8 * tmp2 - Abulk * tmp1 + (2.0 * T9 + 1.0 / Lambda - 1.0) * dAbulk_dVg); /* dT0_dVb = 2.0 * (T8 * tmp3 this is equivalent to one below, but simpler + (2.0 * T9 + 1.0 / Lambda - 1.0) * dAbulk_dVg); */ dT0_dVb = 2.0 * (T8 * (2.0 / Abulk * dAbulk_dVb + tmp3) + (1.0 / Lambda - 1.0) * dAbulk_dVb); dT0_dVd = 0.0; if (selfheat) { if (Rds!=0.0) tmp4 = dRds_dT / Rds + dvsattemp_dT / vsattemp; else tmp4 = dvsattemp_dT / vsattemp; dT0_dT = 2.0 * T8 * tmp4; } else tmp4 = dT0_dT = 0.0; T1 = Vgst2Vtm * (2.0 / Lambda - 1.0) + Abulk * EsatL + 3.0 * T7; dT1_dVg = (2.0 / Lambda - 1.0) - 2.0 * Vgst2Vtm * tmp1 + Abulk * dEsatL_dVg + EsatL * dAbulk_dVg + 3.0 * (T9 + T7 * tmp2 + T6 * dAbulk_dVg); dT1_dVb = Abulk * dEsatL_dVb + EsatL * dAbulk_dVb + 3.0 * (T6 * dAbulk_dVb + T7 * tmp3); dT1_dVd = Abulk * dEsatL_dVd; if (selfheat) { tmp4 += dVgst2Vtm_dT / Vgst2Vtm; dT1_dT = (2.0 / Lambda - 1.0) * dVgst2Vtm_dT + Abulk * dEsatL_dT + 3.0 * T7 * tmp4; } else dT1_dT = 0.0; T2 = Vgst2Vtm * (EsatL + 2.0 * T6); dT2_dVg = EsatL + Vgst2Vtm * dEsatL_dVg + T6 * (4.0 + 2.0 * Vgst2Vtm * tmp2); dT2_dVb = Vgst2Vtm * (dEsatL_dVb + 2.0 * T6 * tmp3); dT2_dVd = Vgst2Vtm * dEsatL_dVd; if (selfheat) dT2_dT = Vgst2Vtm * dEsatL_dT + EsatL * dVgst2Vtm_dT + 2.0 * T6 * (dVgst2Vtm_dT + Vgst2Vtm * tmp4); else dT2_dT = 0.0; T3 = sqrt(T1 * T1 - 2.0 * T0 * T2); Vdsat = (T1 - T3) / T0; dVdsat_dVg = (dT1_dVg - (T1 * dT1_dVg - dT0_dVg * T2 - T0 * dT2_dVg) / T3 - Vdsat * dT0_dVg) / T0; dVdsat_dVb = (dT1_dVb - (T1 * dT1_dVb - dT0_dVb * T2 - T0 * dT2_dVb) / T3 - Vdsat * dT0_dVb) / T0; dVdsat_dVd = (dT1_dVd - (T1 * dT1_dVd - T0 * dT2_dVd) / T3) / T0; if (selfheat) dVdsat_dT = (dT1_dT - (T1 * dT1_dT - dT0_dT * T2 - T0 * dT2_dT) / T3 - Vdsat * dT0_dT) / T0; else dVdsat_dT = 0.0; } here->B3SOIPDvdsat = Vdsat; /* Effective Vds (Vdseff) Calculation */ T1 = Vdsat - Vds - pParam->B3SOIPDdelta; dT1_dVg = dVdsat_dVg; dT1_dVd = dVdsat_dVd - 1.0; dT1_dVb = dVdsat_dVb; dT1_dT = dVdsat_dT; T2 = sqrt(T1 * T1 + 4.0 * pParam->B3SOIPDdelta * Vdsat); T0 = T1 / T2; T3 = 2.0 * pParam->B3SOIPDdelta / T2; dT2_dVg = T0 * dT1_dVg + T3 * dVdsat_dVg; dT2_dVd = T0 * dT1_dVd + T3 * dVdsat_dVd; dT2_dVb = T0 * dT1_dVb + T3 * dVdsat_dVb; if (selfheat) dT2_dT = T0 * dT1_dT + T3 * dVdsat_dT; else dT2_dT = 0.0; Vdseff = Vdsat - 0.5 * (T1 + T2); dVdseff_dVg = dVdsat_dVg - 0.5 * (dT1_dVg + dT2_dVg); dVdseff_dVd = dVdsat_dVd - 0.5 * (dT1_dVd + dT2_dVd); dVdseff_dVb = dVdsat_dVb - 0.5 * (dT1_dVb + dT2_dVb); if (selfheat) dVdseff_dT = dVdsat_dT - 0.5 * (dT1_dT + dT2_dT); else dVdseff_dT = 0.0; if (Vdseff > Vds) Vdseff = Vds; /* This code is added to fixed the problem caused by computer precision when Vds is very close to Vdseff. */ diffVds = Vds - Vdseff; here->B3SOIPDVdseff = Vdseff; /* v2.2.3 bug fix */ /* Calculate VAsat */ tmp4 = 1.0 - 0.5 * Abulk * Vdsat / Vgst2Vtm; T9 = WVCoxRds * Vgsteff; T8 = T9 / Vgst2Vtm; T0 = EsatL + Vdsat + 2.0 * T9 * tmp4; T7 = 2.0 * WVCoxRds * tmp4; dT0_dVg = dEsatL_dVg + dVdsat_dVg + T7 * (1.0 + tmp2 * Vgsteff) - T8 * (Abulk * dVdsat_dVg - Abulk * Vdsat / Vgst2Vtm + Vdsat * dAbulk_dVg); dT0_dVb = dEsatL_dVb + dVdsat_dVb + T7 * tmp3 * Vgsteff - T8 * (dAbulk_dVb * Vdsat + Abulk * dVdsat_dVb); dT0_dVd = dEsatL_dVd + dVdsat_dVd - T8 * Abulk * dVdsat_dVd; if (selfheat) { if (Rds!=0.0) tmp4 = dRds_dT / Rds + dvsattemp_dT / vsattemp; else tmp4 = dvsattemp_dT / vsattemp; dT0_dT = dEsatL_dT + dVdsat_dT + T7 * tmp4 * Vgsteff - T8 * (Abulk * dVdsat_dT - Abulk * Vdsat * dVgst2Vtm_dT / Vgst2Vtm); } else dT0_dT = 0.0; T9 = WVCoxRds * Abulk; T1 = 2.0 / Lambda - 1.0 + T9; dT1_dVg = -2.0 * tmp1 + WVCoxRds * (Abulk * tmp2 + dAbulk_dVg); dT1_dVb = dAbulk_dVb * WVCoxRds + T9 * tmp3; if (selfheat) dT1_dT = T9 * tmp4; else dT1_dT = 0.0; Vasat = T0 / T1; dVasat_dVg = (dT0_dVg - Vasat * dT1_dVg) / T1; dVasat_dVb = (dT0_dVb - Vasat * dT1_dVb) / T1; dVasat_dVd = dT0_dVd / T1; if (selfheat) dVasat_dT = (dT0_dT - Vasat * dT1_dT) / T1; else dVasat_dT = 0.0; /* Calculate VACLM */ if ((pParam->B3SOIPDpclm > 0.0) && (diffVds > 1.0e-10)) { T0 = 1.0 / (pParam->B3SOIPDpclm * Abulk * pParam->B3SOIPDlitl); dT0_dVb = -T0 / Abulk * dAbulk_dVb; dT0_dVg = -T0 / Abulk * dAbulk_dVg; T2 = Vgsteff / EsatL; T1 = Leff * (Abulk + T2); dT1_dVg = Leff * ((1.0 - T2 * dEsatL_dVg) / EsatL + dAbulk_dVg); dT1_dVb = Leff * (dAbulk_dVb - T2 * dEsatL_dVb / EsatL); dT1_dVd = -T2 * dEsatL_dVd / Esat; if (selfheat) dT1_dT = -T2 * dEsatL_dT / Esat; else dT1_dT = 0.0; T9 = T0 * T1; VACLM = T9 * diffVds; dVACLM_dVg = T0 * dT1_dVg * diffVds - T9 * dVdseff_dVg + T1 * diffVds * dT0_dVg; dVACLM_dVb = (dT0_dVb * T1 + T0 * dT1_dVb) * diffVds - T9 * dVdseff_dVb; dVACLM_dVd = T0 * dT1_dVd * diffVds + T9 * (1.0 - dVdseff_dVd); if (selfheat) dVACLM_dT = T0 * dT1_dT * diffVds - T9 * dVdseff_dT; else dVACLM_dT = 0.0; } else { VACLM = MAX_EXPL; dVACLM_dVd = dVACLM_dVg = dVACLM_dVb = dVACLM_dT = 0.0; } /* Calculate VADIBL */ if (pParam->B3SOIPDthetaRout > 0.0) { T8 = Abulk * Vdsat; T0 = Vgst2Vtm * T8; T1 = Vgst2Vtm + T8; dT0_dVg = Vgst2Vtm * Abulk * dVdsat_dVg + T8 + Vgst2Vtm * Vdsat * dAbulk_dVg; dT1_dVg = 1.0 + Abulk * dVdsat_dVg + Vdsat * dAbulk_dVg; dT1_dVb = dAbulk_dVb * Vdsat + Abulk * dVdsat_dVb; dT0_dVb = Vgst2Vtm * dT1_dVb; dT1_dVd = Abulk * dVdsat_dVd; dT0_dVd = Vgst2Vtm * dT1_dVd; if (selfheat) { dT0_dT = dVgst2Vtm_dT * T8 + Abulk * Vgst2Vtm * dVdsat_dT; dT1_dT = dVgst2Vtm_dT + Abulk * dVdsat_dT; } else dT0_dT = dT1_dT = 0.0; T9 = T1 * T1; T2 = pParam->B3SOIPDthetaRout; VADIBL = (Vgst2Vtm - T0 / T1) / T2; dVADIBL_dVg = (1.0 - dT0_dVg / T1 + T0 * dT1_dVg / T9) / T2; dVADIBL_dVb = (-dT0_dVb / T1 + T0 * dT1_dVb / T9) / T2; dVADIBL_dVd = (-dT0_dVd / T1 + T0 * dT1_dVd / T9) / T2; if (selfheat) dVADIBL_dT = (dVgst2Vtm_dT - dT0_dT/T1 + T0*dT1_dT/T9) / T2; else dVADIBL_dT = 0.0; T7 = pParam->B3SOIPDpdiblb * Vbseff; if (T7 >= -0.9) { T3 = 1.0 / (1.0 + T7); VADIBL *= T3; dVADIBL_dVg *= T3; dVADIBL_dVb = (dVADIBL_dVb - VADIBL * pParam->B3SOIPDpdiblb) * T3; dVADIBL_dVd *= T3; if (selfheat) dVADIBL_dT *= T3; else dVADIBL_dT = 0.0; } else /* Added to avoid the discontinuity problem caused by pdiblcb */ { T4 = 1.0 / (0.8 + T7); T3 = (17.0 + 20.0 * T7) * T4; dVADIBL_dVg *= T3; dVADIBL_dVb = dVADIBL_dVb * T3 - VADIBL * pParam->B3SOIPDpdiblb * T4 * T4; dVADIBL_dVd *= T3; if (selfheat) dVADIBL_dT *= T3; else dVADIBL_dT = 0.0; VADIBL *= T3; } } else { VADIBL = MAX_EXPL; dVADIBL_dVd = dVADIBL_dVg = dVADIBL_dVb = dVADIBL_dT = 0.0; } /* Calculate VA */ T8 = pParam->B3SOIPDpvag / EsatL; T9 = T8 * Vgsteff; if (T9 > -0.9) { T0 = 1.0 + T9; dT0_dVg = T8 * (1.0 - Vgsteff * dEsatL_dVg / EsatL); dT0_dVb = -T9 * dEsatL_dVb / EsatL; dT0_dVd = -T9 * dEsatL_dVd / EsatL; if (selfheat) dT0_dT = -T9 * dEsatL_dT / EsatL; else dT0_dT = 0.0; } else /* Added to avoid the discontinuity problems caused by pvag */ { T1 = 1.0 / (17.0 + 20.0 * T9); T0 = (0.8 + T9) * T1; T1 *= T1; dT0_dVg = T8 * (1.0 - Vgsteff * dEsatL_dVg / EsatL) * T1; T9 *= T1 / EsatL; dT0_dVb = -T9 * dEsatL_dVb; dT0_dVd = -T9 * dEsatL_dVd; if (selfheat) dT0_dT = -T9 * dEsatL_dT; else dT0_dT = 0.0; } tmp1 = VACLM * VACLM; tmp2 = VADIBL * VADIBL; tmp3 = VACLM + VADIBL; T1 = VACLM * VADIBL / tmp3; tmp3 *= tmp3; dT1_dVg = (tmp1 * dVADIBL_dVg + tmp2 * dVACLM_dVg) / tmp3; dT1_dVd = (tmp1 * dVADIBL_dVd + tmp2 * dVACLM_dVd) / tmp3; dT1_dVb = (tmp1 * dVADIBL_dVb + tmp2 * dVACLM_dVb) / tmp3; if (selfheat) dT1_dT = (tmp1 * dVADIBL_dT + tmp2 * dVACLM_dT ) / tmp3; else dT1_dT = 0.0; Va = Vasat + T0 * T1; dVa_dVg = dVasat_dVg + T1 * dT0_dVg + T0 * dT1_dVg; dVa_dVd = dVasat_dVd + T1 * dT0_dVd + T0 * dT1_dVd; dVa_dVb = dVasat_dVb + T1 * dT0_dVb + T0 * dT1_dVb; if (selfheat) dVa_dT = dVasat_dT + T1 * dT0_dT + T0 * dT1_dT; else dVa_dT = 0.0; /* Calculate Ids */ CoxWovL = model->B3SOIPDcox * Weff / Leff; beta = ueff * CoxWovL; dbeta_dVg = CoxWovL * dueff_dVg + beta * dWeff_dVg / Weff ; dbeta_dVd = CoxWovL * dueff_dVd; dbeta_dVb = CoxWovL * dueff_dVb + beta * dWeff_dVb / Weff ; if (selfheat) dbeta_dT = CoxWovL * dueff_dT; else dbeta_dT = 0.0; T0 = 1.0 - 0.5 * Abulk * Vdseff / Vgst2Vtm; dT0_dVg = -0.5 * (Abulk * dVdseff_dVg - Abulk * Vdseff / Vgst2Vtm + Vdseff * dAbulk_dVg) / Vgst2Vtm; dT0_dVd = -0.5 * Abulk * dVdseff_dVd / Vgst2Vtm; dT0_dVb = -0.5 * (Abulk * dVdseff_dVb + dAbulk_dVb * Vdseff) / Vgst2Vtm; if (selfheat) dT0_dT = -0.5 * (Abulk * dVdseff_dT - Abulk * Vdseff / Vgst2Vtm * dVgst2Vtm_dT) / Vgst2Vtm; else dT0_dT = 0.0; fgche1 = Vgsteff * T0; dfgche1_dVg = Vgsteff * dT0_dVg + T0; dfgche1_dVd = Vgsteff * dT0_dVd; dfgche1_dVb = Vgsteff * dT0_dVb; if (selfheat) dfgche1_dT = Vgsteff * dT0_dT; else dfgche1_dT = 0.0; T9 = Vdseff / EsatL; fgche2 = 1.0 + T9; dfgche2_dVg = (dVdseff_dVg - T9 * dEsatL_dVg) / EsatL; dfgche2_dVd = (dVdseff_dVd - T9 * dEsatL_dVd) / EsatL; dfgche2_dVb = (dVdseff_dVb - T9 * dEsatL_dVb) / EsatL; if (selfheat) dfgche2_dT = (dVdseff_dT - T9 * dEsatL_dT) / EsatL; else dfgche2_dT = 0.0; gche = beta * fgche1 / fgche2; dgche_dVg = (beta * dfgche1_dVg + fgche1 * dbeta_dVg - gche * dfgche2_dVg) / fgche2; dgche_dVd = (beta * dfgche1_dVd + fgche1 * dbeta_dVd - gche * dfgche2_dVd) / fgche2; dgche_dVb = (beta * dfgche1_dVb + fgche1 * dbeta_dVb - gche * dfgche2_dVb) / fgche2; if (selfheat) dgche_dT = (beta * dfgche1_dT + fgche1 * dbeta_dT - gche * dfgche2_dT) / fgche2; else dgche_dT = 0.0; T0 = 1.0 + gche * Rds; T9 = Vdseff / T0; Idl = gche * T9; /* Whoa, these formulas for the derivatives of Idl are convoluted, but I verified them to be correct */ dIdl_dVg = (gche * dVdseff_dVg + T9 * dgche_dVg) / T0 - Idl * gche / T0 * dRds_dVg ; dIdl_dVd = (gche * dVdseff_dVd + T9 * dgche_dVd) / T0; dIdl_dVb = (gche * dVdseff_dVb + T9 * dgche_dVb - Idl * dRds_dVb * gche) / T0; if (selfheat) dIdl_dT = (gche * dVdseff_dT + T9 * dgche_dT - Idl * dRds_dT * gche) / T0; else dIdl_dT = 0.0; T9 = diffVds / Va; T0 = 1.0 + T9; here->B3SOIPDids = Ids = Idl * T0 / here->B3SOIPDnseg; Gm0 = T0 * dIdl_dVg - Idl * (dVdseff_dVg + T9 * dVa_dVg) / Va; Gds0 = T0 * dIdl_dVd + Idl * (1.0 - dVdseff_dVd - T9 * dVa_dVd) / Va; Gmb0 = T0 * dIdl_dVb - Idl * (dVdseff_dVb + T9 * dVa_dVb) / Va; Gmc = 0.0; if (selfheat) GmT0 = T0 * dIdl_dT - Idl * (dVdseff_dT + T9 * dVa_dT) / Va; else GmT0 = 0.0; /* This includes all dependencies from Vgsteff, Vbseff */ Gm = Gm0 * dVgsteff_dVg / here->B3SOIPDnseg; Gmb = (Gm0 * dVgsteff_dVb + Gmb0 * dVbseff_dVb) / here->B3SOIPDnseg; Gds = (Gm0 * dVgsteff_dVd + Gds0) / here->B3SOIPDnseg; if (selfheat) GmT = (Gm0 * dVgsteff_dT + GmT0) / here->B3SOIPDnseg; else GmT = 0.0; /* calculate GIDL current */ T0 = 3 * model->B3SOIPDtox; /* For drain side */ T1 = (Vds - Vgs_eff - pParam->B3SOIPDngidl) / T0; if ((pParam->B3SOIPDagidl <= 0.0) || (pParam->B3SOIPDbgidl <= 0.0) || (T1 <= 0.0)) { Idgidl = Gdgidld = Gdgidlg = 0.0; } else { dT1_dVd = 1 / T0; dT1_dVg = - dT1_dVd * dVgs_eff_dVg; T2 = pParam->B3SOIPDbgidl / T1; if (T2 < EXPL_THRESHOLD) { Idgidl = wdiod * pParam->B3SOIPDagidl * T1 * exp(-T2); T3 = Idgidl / T1 * (T2 + 1); Gdgidld = T3 * dT1_dVd; Gdgidlg = T3 * dT1_dVg; } else { T3 = wdiod * pParam->B3SOIPDagidl * MIN_EXPL; Idgidl = T3 * T1 ; Gdgidld = T3 * dT1_dVd; Gdgidlg = T3 * dT1_dVg; } } here->B3SOIPDigidl = Idgidl; /* For source side */ T1 = (- Vgs_eff - pParam->B3SOIPDngidl) / T0; if ((pParam->B3SOIPDagidl <= 0.0) || (pParam->B3SOIPDbgidl <= 0.0) || (T1 <= 0.0)) { Isgidl = Gsgidlg = 0; } else { dT1_dVg = - dVgs_eff_dVg / T0; T2 = pParam->B3SOIPDbgidl / T1; if (T2 < EXPL_THRESHOLD) { Isgidl = wdios * pParam->B3SOIPDagidl * T1 * exp(-T2); T3 = Isgidl / T1 * (T2 + 1); Gsgidlg = T3 * dT1_dVg; } else { T3 = wdios * pParam->B3SOIPDagidl * MIN_EXPL; Isgidl = T3 * T1 ; Gsgidlg = T3 * dT1_dVg; } } /* calculate diode and BJT current */ WsTsi = wdios * model->B3SOIPDtsi; WdTsi = wdiod * model->B3SOIPDtsi; NVtm1 = Vtm * pParam->B3SOIPDndiode; if (selfheat) dNVtm1_dT = pParam->B3SOIPDndiode * dVtm_dT; else dNVtm1_dT = 0; T0 = Vbs / NVtm1; dT0_dVb = 1.0 / NVtm1; if (selfheat) dT0_dT = -Vbs / NVtm1 / NVtm1 * dNVtm1_dT; else dT0_dT = 0; DEXP(T0, ExpVbsNVtm, T1); dExpVbsNVtm_dVb = T1 * dT0_dVb; if (selfheat) dExpVbsNVtm_dT = T1 * dT0_dT; else dExpVbsNVtm_dT = 0; T0 = Vbd / NVtm1; dT0_dVb = 1.0 / NVtm1; dT0_dVd = -dT0_dVb; if (selfheat) dT0_dT = -Vbd / NVtm1 / NVtm1 * dNVtm1_dT; else dT0_dT = 0; DEXP(T0, ExpVbdNVtm, T1); dExpVbdNVtm_dVb = T1 * dT0_dVb; dExpVbdNVtm_dVd = -dExpVbdNVtm_dVb; if (selfheat) dExpVbdNVtm_dT = T1 * dT0_dT; else dExpVbdNVtm_dT = 0; /* Ibs1 / Ibd1 : diffusion current */ if (jdif == 0) { Ibs1 = dIbs1_dVb = dIbs1_dT = Ibd1 = dIbd1_dVb = dIbd1_dVd = dIbd1_dT = 0; } else { T0 = WsTsi * jdif; if (selfheat) dT0_dT = WsTsi * djdif_dT; else dT0_dT = 0; Ibs1 = T0 * (ExpVbsNVtm - 1); dIbs1_dVb = T0 * dExpVbsNVtm_dVb; if (selfheat) dIbs1_dT = T0 * dExpVbsNVtm_dT + (ExpVbsNVtm - 1) * dT0_dT; else dIbs1_dT = 0; T0 = WdTsi * jdif; if (selfheat) dT0_dT = WdTsi * djdif_dT; else dT0_dT = 0; Ibd1 = T0 * (ExpVbdNVtm - 1); dIbd1_dVb = T0 * dExpVbdNVtm_dVb; dIbd1_dVd = -dIbd1_dVb; if (selfheat) dIbd1_dT = T0 * dExpVbdNVtm_dT + (ExpVbdNVtm -1) * dT0_dT; else dIbd1_dT = 0; } /* Ibs2:recombination/trap-assisted tunneling current */ NVtmf = 0.026 * pParam->B3SOIPDnrecf0 * (1 + model->B3SOIPDntrecf * (TempRatio - 1)); NVtmr = 0.026 * pParam->B3SOIPDnrecr0 /* v2.2.2 bug fix */ * (1 + model->B3SOIPDntrecr * (TempRatio - 1)); if (selfheat) { dNVtmf_dT = pParam->B3SOIPDnrecf0 * 0.026 * model->B3SOIPDntrecf * dTempRatio_dT; dNVtmr_dT = pParam->B3SOIPDnrecr0 * 0.026 /* v2.2.2 bug fix */ * model->B3SOIPDntrecr * dTempRatio_dT; } else dNVtmf_dT = dNVtmr_dT = 0; if (jrec == 0) { Ibs2 = dIbs2_dVb = dIbs2_dT = 0; Ibd2 = dIbd2_dVb = dIbd2_dVd = dIbd2_dT = 0; } else { /* forward bias */ T0 = Vbs / NVtmf; DEXP(T0,T10,T2); T4 = 1 / NVtmf; dT10_dVb = T4 * T2; if (selfheat) dT10_dT = - T4 * T2 * Vbs / NVtmf * dNVtmf_dT ; else dT10_dT = 0.0; /* reverse bias */ if ((pParam->B3SOIPDvrec0 - Vbs) < 1e-3) { /* v2.2.3 bug fix */ T1 = 1e3; T0 = -Vbs / NVtmr * pParam->B3SOIPDvrec0 * T1; T11 = -exp(T0); dT11_dVb = dT11_dT = 0; } else { T1 = 1 / (pParam->B3SOIPDvrec0 - Vbs); T0 = -Vbs / NVtmr * pParam->B3SOIPDvrec0 * T1; dT0_dVb = -pParam->B3SOIPDvrec0 / NVtmr * (T1 + Vbs * T1 * T1) ; if (selfheat) dT0_dT = -T0 / NVtmr * dNVtmr_dT; else dT0_dT = 0; DEXP(T0, T11, T2); T11 = -T11; dT11_dVb = -T2 * dT0_dVb; if (selfheat) dT11_dT = -T2 * dT0_dT; else dT11_dT = 0; } T3 = WsTsi * jrec; Ibs2 = T3 * (T10 + T11); dIbs2_dVb = T3 * (dT10_dVb + dT11_dVb); if (selfheat) dIbs2_dT = T3 * (dT10_dT + dT11_dT) + WsTsi * (T10 + T11) * djrec_dT; else dIbs2_dT = 0; /* Ibd2 */ T0 = Vbd / NVtmf; DEXP(T0,T10,T2); T4 = 1 / NVtmf; dT10_dVb = T4 * T2; if (selfheat) dT10_dT = - T4 * T2 * Vbd / NVtmf * dNVtmf_dT ; else dT10_dT = 0.0; if ((pParam->B3SOIPDvrec0 - Vbd) < 1e-3) { /* v2.2.3 bug fix */ T1 = 1e3; T0 = -Vbd / NVtmr * pParam->B3SOIPDvrec0 * T1; T11 = -exp(T0); dT11_dVb = dT11_dT = 0; } else { T1 = 1 / (pParam->B3SOIPDvrec0 - Vbd); T0 = -Vbd / NVtmr * pParam->B3SOIPDvrec0 * T1; dT0_dVb = -pParam->B3SOIPDvrec0 / NVtmr * (T1 + Vbd * T1 * T1) ; if (selfheat) dT0_dT = -T0 / NVtmr * dNVtmr_dT; else dT0_dT = 0; DEXP(T0, T11, T2); T11 = - T11; dT11_dVb = -T2 * dT0_dVb; if (selfheat) dT11_dT = -T2 * dT0_dT; else dT11_dT = 0; } T3 = WdTsi * jrec; Ibd2 = T3 * (T10 + T11); dIbd2_dVb = T3 * (dT10_dVb + dT11_dVb); dIbd2_dVd = -dIbd2_dVb; if (selfheat) dIbd2_dT = T3 * (dT10_dT + dT11_dT) + WdTsi * (T10 + T11) * djrec_dT; else dIbd2_dT = 0; } /* Ibs3/Ibd3: recombination current in neutral body */ WTsi = pParam->B3SOIPDweff / here->B3SOIPDnseg * model->B3SOIPDtsi; if (jbjt == 0.0) { Ibs3 = dIbs3_dVb = dIbs3_dVd = dIbs3_dT = 0.0; Ibd3 = dIbd3_dVb = dIbd3_dVd = dIbd3_dT = 0.0; Ibsdif = dIbsdif_dVb = dIbsdif_dT = 0; Ibddif = dIbddif_dVb = dIbddif_dVd = dIbddif_dT = 0; here->B3SOIPDic = Ic = Gcd = Gcb = GcT = 0.0; } else { Ien = WTsi * jbjt * pParam->B3SOIPDlratio; if (selfheat) dIen_dT = WTsi * djbjt_dT * pParam->B3SOIPDlratio; else dIen_dT = 0; /* high level injection of source side */ if ((Ehlis = Ahli * (ExpVbsNVtm - 1)) < 1e-5) { Ehlis = dEhlis_dVb = dEhlis_dT = 0; EhlisFactor = 1; dEhlisFactor_dVb = dEhlisFactor_dT = 0; } else { dEhlis_dVb = Ahli * dExpVbsNVtm_dVb; if (selfheat) dEhlis_dT = Ahli * dExpVbsNVtm_dT + (ExpVbsNVtm - 1) * dAhli_dT; else dEhlis_dT = 0; EhlisFactor = 1.0 / sqrt(1 + Ehlis); T0 = -0.5 * EhlisFactor / (1 + Ehlis); dEhlisFactor_dVb = T0 * dEhlis_dVb; if (selfheat) dEhlisFactor_dT = T0 * dEhlis_dT; else dEhlisFactor_dT = 0; } /* high level injection of drain side */ if ((Ehlid = Ahli * (ExpVbdNVtm - 1)) < 1e-5) { Ehlid = dEhlid_dVb = dEhlid_dVd = dEhlid_dT = 0; EhlidFactor = 1; dEhlidFactor_dVb = dEhlidFactor_dVd = dEhlidFactor_dT = 0; } else { dEhlid_dVb = Ahli * dExpVbdNVtm_dVb; dEhlid_dVd = -dEhlid_dVb; if (selfheat) dEhlid_dT = Ahli * dExpVbdNVtm_dT + (ExpVbdNVtm - 1) * dAhli_dT; else dEhlid_dT = 0; EhlidFactor = 1.0 / sqrt(1 + Ehlid); T0 = -0.5 * EhlidFactor / (1 + Ehlid); dEhlidFactor_dVb = T0 * dEhlid_dVb; dEhlidFactor_dVd = -dEhlidFactor_dVb; if (selfheat) dEhlidFactor_dT = T0 * dEhlid_dT; else dEhlidFactor_dT = 0; } if ((T0 = (1 - pParam->B3SOIPDarfabjt)) < 1e-2) { Ibs3 = dIbs3_dVb = dIbs3_dT = 0; dIbs3_dVd = 0; Ibd3 = dIbd3_dVb = dIbd3_dVd = dIbd3_dT = 0; } else { T1 = T0 * Ien; if (selfheat) dT1_dT = T0 * dIen_dT; else dT1_dT = 0; Ibs3 = T1 * (ExpVbsNVtm - 1) * EhlisFactor; dIbs3_dVb = T1 * (dExpVbsNVtm_dVb * EhlisFactor + (ExpVbsNVtm - 1) * dEhlisFactor_dVb); dIbs3_dVd = 0; if (selfheat) dIbs3_dT = dT1_dT * (ExpVbsNVtm - 1) * EhlisFactor + T1 * (dExpVbsNVtm_dT * EhlisFactor + (ExpVbsNVtm - 1) * dEhlisFactor_dT); else dIbs3_dT = 0.0; Ibd3 = T1 * (ExpVbdNVtm - 1) * EhlidFactor; dIbd3_dVb = T1 * (dExpVbdNVtm_dVb * EhlidFactor + (ExpVbdNVtm - 1) * dEhlidFactor_dVb); dIbd3_dVd = -dIbd3_dVb; if (selfheat) dIbd3_dT = dT1_dT * (ExpVbdNVtm - 1) * EhlidFactor + T1 * (dExpVbdNVtm_dT * EhlidFactor + (ExpVbdNVtm - 1) * dEhlidFactor_dT); else dIbd3_dT = 0.0; } /* effective diffusion current for capacitance calcu. */ Iendif = WTsi * jbjt * pParam->B3SOIPDlratiodif; if (selfheat) dIendif_dT = WTsi * djbjt_dT * pParam->B3SOIPDlratiodif; else dIendif_dT = 0; Ibsdif = Iendif * (ExpVbsNVtm - 1) * EhlisFactor; dIbsdif_dVb = Iendif * (dExpVbsNVtm_dVb * EhlisFactor + (ExpVbsNVtm - 1) * dEhlisFactor_dVb); if (selfheat) dIbsdif_dT = dIendif_dT * (ExpVbsNVtm - 1) * EhlisFactor + Iendif * (dExpVbsNVtm_dT * EhlisFactor + (ExpVbsNVtm - 1) * dEhlisFactor_dT); else dIbsdif_dT = 0; Ibddif = Iendif * (ExpVbdNVtm - 1) * EhlidFactor; dIbddif_dVb = Iendif * (dExpVbdNVtm_dVb * EhlidFactor + (ExpVbdNVtm - 1) * dEhlidFactor_dVb); dIbddif_dVd = -dIbddif_dVb; if (selfheat) dIbddif_dT = dIendif_dT * (ExpVbdNVtm - 1) * EhlidFactor + Iendif * (dExpVbdNVtm_dT * EhlidFactor + (ExpVbdNVtm - 1) * dEhlidFactor_dT); else dIbddif_dT = 0; /* Ic: Bjt collector current */ if ((here->B3SOIPDbjtoff == 1) || (Vds == 0.0)) { here->B3SOIPDic = Ic = Gcd = Gcb = GcT = 0.0; } else { /* second order effects */ T0 = 1 + (Vbs + Vbd) / pParam->B3SOIPDvearly; dT0_dVb = 2.0 / pParam->B3SOIPDvearly; dT0_dVd = -1.0 / pParam->B3SOIPDvearly; T1 = Ehlis + Ehlid; dT1_dVb = dEhlis_dVb + dEhlid_dVb; dT1_dVd = dEhlid_dVd; if (selfheat) dT1_dT = dEhlis_dT + dEhlid_dT; else dT1_dT = 0; T3 = sqrt(T0 * T0 + 4 * T1); dT3_dVb = 0.5 / T3 * (2 * T0 * dT0_dVb + 4 * dT1_dVb); dT3_dVd = 0.5 / T3 * (2 * T0 * dT0_dVd + 4 * dT1_dVd); if (selfheat) dT3_dT = 2 * dT1_dT / T3; else dT3_dT = 0; T2 = (T0 + T3) / 2.0; dT2_dVb = (dT0_dVb + dT3_dVb) / 2.0; dT2_dVd = (dT0_dVd + dT3_dVd) / 2.0; if (selfheat) dT2_dT = dT3_dT /2.0; else dT2_dT = 0; if (T2 < .1) { E2ndFactor = 10.0; dE2ndFactor_dVb = dE2ndFactor_dVd = dE2ndFactor_dT = 0; } else { E2ndFactor = 1.0 / T2; dE2ndFactor_dVb = -E2ndFactor / T2 * dT2_dVb; dE2ndFactor_dVd = -E2ndFactor / T2 * dT2_dVd; if (selfheat) dE2ndFactor_dT = -E2ndFactor / T2 * dT2_dT; else dE2ndFactor_dT = 0; } T0 = pParam->B3SOIPDarfabjt * Ien; if (selfheat) dT0_dT = pParam->B3SOIPDarfabjt * dIen_dT; else dT0_dT = 0; here->B3SOIPDic = Ic = T0 * (ExpVbsNVtm - ExpVbdNVtm) * E2ndFactor; Gcb = dIc_dVb = T0 * ((dExpVbsNVtm_dVb - dExpVbdNVtm_dVb) * E2ndFactor + (ExpVbsNVtm - ExpVbdNVtm) * dE2ndFactor_dVb); Gcd = dIc_dVd = T0 * (-dExpVbdNVtm_dVd * E2ndFactor + (ExpVbsNVtm - ExpVbdNVtm) * dE2ndFactor_dVd); if (selfheat) GcT = T0 * (dExpVbsNVtm_dT - dExpVbdNVtm_dT) * E2ndFactor + dT0_dT * (ExpVbsNVtm - ExpVbdNVtm) * E2ndFactor + T0 * (ExpVbsNVtm - ExpVbdNVtm) * dE2ndFactor_dT; else GcT = 0; } } /* Ibs4/Ibd4 : tunneling */ NVtm2 = 0.026 * pParam->B3SOIPDntun; if (jtun == 0) { Ibs4 = Ibd4 = dIbs4_dVb = dIbs4_dT = dIbd4_dVb = dIbd4_dVd = dIbd4_dT = 0; } else { if ((pParam->B3SOIPDvtun0 - Vbs) < 1e-3) { /* v2.2.3 bug fix */ T1=1e3; T0 = -Vbs / NVtm2 * pParam->B3SOIPDvtun0 * T1; T1 = exp(T0); T3 = WsTsi * jtun; Ibs4 = T3 * (1- T1); dIbs4_dVb = dIbs4_dT = 0; } else { T1 = 1 / (pParam->B3SOIPDvtun0 - Vbs); T0 = -Vbs / NVtm2 * pParam->B3SOIPDvtun0 * T1; dT0_dVb = -pParam->B3SOIPDvtun0 / NVtm2 * (T1 + Vbs * T1 * T1) ; DEXP(T0, T1, T2); T3 = WsTsi * jtun; Ibs4 = T3 * (1- T1); dIbs4_dVb = -T3 * T2 * dT0_dVb; if (selfheat) dIbs4_dT = (1 - T1) * WsTsi * djtun_dT; else dIbs4_dT = 0; } if ((pParam->B3SOIPDvtun0 - Vbd) < 1e-3) { /* v2.2.3 bug fix */ T1=1e3; T0 = -Vbd / NVtm2 * pParam->B3SOIPDvtun0 * T1; T1 = exp(T0); T3 = WdTsi * jtun; Ibd4 = T3 * (1- T1); dIbd4_dVb = dIbd4_dT = 0; dIbd4_dVd = 0; } else { T1 = 1 / (pParam->B3SOIPDvtun0 - Vbd); T0 = -Vbd / NVtm2 * pParam->B3SOIPDvtun0 * T1; dT0_dVb = -pParam->B3SOIPDvtun0 / NVtm2 * (T1 + Vbd * T1 * T1) ; DEXP(T0, T1, T2); T3 = WdTsi * jtun; Ibd4 = T3 * (1- T1); dIbd4_dVb = -T3 * T2 * dT0_dVb; dIbd4_dVd = -dIbd4_dVb; if (selfheat) dIbd4_dT = (1 - T1) * WdTsi * djtun_dT; else dIbd4_dT = 0; } } here->B3SOIPDitun = - Ibd3 - Ibd4; here->B3SOIPDibs = Ibs = Ibs1 + Ibs2 + Ibs3 + Ibs4; here->B3SOIPDibd = Ibd = Ibd1 + Ibd2 + Ibd3 + Ibd4; Gjsb = dIbs1_dVb + dIbs2_dVb + dIbs3_dVb + dIbs4_dVb; Gjsd = dIbs3_dVd; if (selfheat) GjsT = dIbs1_dT + dIbs2_dT + dIbs3_dT + dIbs4_dT; else GjsT = 0.0; Gjdb = dIbd1_dVb + dIbd2_dVb + dIbd3_dVb + dIbd4_dVb; Gjdd = dIbd1_dVd + dIbd2_dVd + dIbd3_dVd + dIbd4_dVd; if (selfheat) GjdT = dIbd1_dT + dIbd2_dT + dIbd3_dT + dIbd4_dT; else GjdT = 0.0; /* v2.2: calculate gate-tunneling-to-body current */ if (model->B3SOIPDigMod >= 1) { Vgb = Vgs_eff - Vbs; dVgb_dVg = dVgs_eff_dVg; dVgb_dVb = -1; /* Calculate Vox first */ Vfb = model->B3SOIPDtype * pParam->B3SOIPDvth0 - phi - pParam->B3SOIPDk1eff * sqrtPhi; T3 = Vfb - Vgs_eff + Vbs - DELTA_3; dT3_dVg = -dVgs_eff_dVg; dT3_dVd = 0; dT3_dVb = 1; if (Vfb <= 0.0) { T0 = sqrt(T3 * T3 - 4.0 * DELTA_3 * Vfb); dT0_dVg = 1.0/(2.0 * T0) * 2.0*T3 * dT3_dVg; dT0_dVb = 0.5*(1.0/T0) * 2.0*T3 * dT3_dVb; } else { T0 = sqrt(T3 * T3 + 4.0 * DELTA_3 * Vfb); dT0_dVg = 1.0/(2.0 * T0) * 2.0*T3 * dT3_dVg; dT0_dVb = 0.5*(1.0/T0) * 2.0*T3 * dT3_dVb; } Vfbeff = Vfb - 0.5 * (T3 + T0); dVfbeff_dVg = -0.5 * (dT3_dVg + dT0_dVg); dVfbeff_dVb = -0.5 * (dT3_dVb + dT0_dVb); Voxacc = Vfb - Vfbeff; dVoxacc_dVg = -dVfbeff_dVg; dVoxacc_dVd = 0.0; dVoxacc_dVb = -dVfbeff_dVb; if (Voxacc < 0.0) Voxacc = dVoxacc_dVg = dVoxacc_dVb = 0.0; T0 = Vgs_eff - Vgsteff - Vfbeff - Vbseff; dT0_dVg = dVgs_eff_dVg - dVgsteff_dVg - dVfbeff_dVg; dT0_dVd = -dVgsteff_dVd; dT0_dVb = -dVgsteff_dVb - dVfbeff_dVb - dVbseff_dVb; if (selfheat) dT0_dT = -dVgsteff_dT; if (pParam->B3SOIPDk1eff == 0.0) { Voxdepinv = dVoxdepinv_dVg = dVoxdepinv_dVd = dVoxdepinv_dVb = dVoxdepinv_dT = 0.0; } else { if (T0 < 0.0) { T1 = T0/pParam->B3SOIPDk1eff; dT1_dVg = dT0_dVg/pParam->B3SOIPDk1eff; dT1_dVd = dT0_dVd/pParam->B3SOIPDk1eff; dT1_dVb = dT0_dVb/pParam->B3SOIPDk1eff; if (selfheat) dT1_dT = dT0_dT/pParam->B3SOIPDk1eff; } else { T1 = pParam->B3SOIPDk1eff/2*(-1 + sqrt(1 + 4*T0/pParam->B3SOIPDk1eff/pParam->B3SOIPDk1eff)); T2 = pParam->B3SOIPDk1eff/2 * 0.5/sqrt(1 + 4*T0/pParam->B3SOIPDk1eff/pParam->B3SOIPDk1eff) * 4/pParam->B3SOIPDk1eff/pParam->B3SOIPDk1eff; dT1_dVg = T2 * dT0_dVg; dT1_dVd = T2 * dT0_dVd; dT1_dVb = T2 * dT0_dVb; if (selfheat) dT1_dT = T2 * dT0_dT; } Voxdepinv = Vgs_eff - (T1*T1 + Vbs) - Vfb; dVoxdepinv_dVg = dVgs_eff_dVg - (2.0*T1*dT1_dVg); dVoxdepinv_dVd = -(2.0*T1*dT1_dVd); dVoxdepinv_dVb = -(2.0*T1*dT1_dVb + 1); if (selfheat) dVoxdepinv_dT = -(2.0*T1*dT1_dT); } OxideRatio = pParam->B3SOIPDoxideRatio; Vox = Voxdepinv; /* Voxeff is Vox limited below Voxh */ T0 = model->B3SOIPDvoxh; T1 = T0 - Vox - model->B3SOIPDdeltavox; T3 = sqrt(T1 * T1 + 4*model->B3SOIPDdeltavox * T0); Voxeff = T0 - 0.5 * (T1 + T3); dVoxeff_dVox = 0.5 * (1.0 + T1 / T3); Vox = Voxeff; dVox_dVg = dVoxdepinv_dVg * dVoxeff_dVox; dVox_dVd = dVoxdepinv_dVd * dVoxeff_dVox; dVox_dVb = dVoxdepinv_dVb * dVoxeff_dVox; dVox_dT = dVoxdepinv_dT * dVoxeff_dVox; T0 = (Vox - model->B3SOIPDebg)/model->B3SOIPDvevb; if (selfheat) dT0_dT = dVox_dT /model->B3SOIPDvevb; DEXP(T0, T1, T2); /* T1=exp(T0), T2=dT1_dT0 */ if (selfheat) dT1_dT = T2 * dT0_dT; Vaux = model->B3SOIPDvevb * log(1 + T1); dVaux_dVg = T2 / (1 + T1) * dVox_dVg; dVaux_dVd = T2 / (1 + T1) * dVox_dVd; dVaux_dVb = T2 / (1 + T1) * dVox_dVb; if (selfheat) dVaux_dT = T2 / (1 + T1) * dVox_dT; if (model->B3SOIPDvgb1 != 0) { T0 = 1 - Vox / model->B3SOIPDvgb1; dT0_dVox = -1.0/model->B3SOIPDvgb1; if (selfheat) dT0_dT = -dVox_dT / model->B3SOIPDvgb1; } else { T0 = 1; dT0_dVox = dT0_dT = 0.0; } if (T0 < 0.01) { T0 = 0.01; dT0_dVox = dT0_dT = 0.0; } /* v2.2.3 bug fix */ T1 = Leff * Weff * 3.7622e-7 * OxideRatio / here->B3SOIPDnseg; T2 = -3.1051e10 * model->B3SOIPDtoxqm; T3 = model->B3SOIPDalphaGB1; T4 = model->B3SOIPDbetaGB1; T6 = T2*(T3 - T4 * Vox) / T0; if (selfheat) dT6_dT = -T2 * T4 * dVox_dT / T0 - T6/T0 * dT0_dT; DEXP(T6, T5, T7); /* T5=exp(T6), T7=dT5_dT6 */ dT5_dVg = -T7 * dVox_dVg * T2 / T0 * (T4 + (T3 - T4 * Vox) / T0 * dT0_dVox); dT5_dVd = -T7 * dVox_dVd * T2 / T0 * (T4 + (T3 - T4 * Vox) / T0 * dT0_dVox); dT5_dVb = -T7 * dVox_dVb * T2 / T0 * (T4 + (T3 - T4 * Vox) / T0 * dT0_dVox); if (selfheat) dT5_dT = T7 * dT6_dT; Igb1 = T1 * Vgb * Vaux * T5; dIgb1_dVg = T1 * (Vgb*Vaux*dT5_dVg + dVgb_dVg*Vaux*T5 + Vgb*T5*dVaux_dVg); dIgb1_dVd = T1 * (Vgb*Vaux*dT5_dVd + Vgb*T5*dVaux_dVd); dIgb1_dVb = T1 * (Vgb*Vaux*dT5_dVb + dVgb_dVb*Vaux*T5 + Vgb*T5*dVaux_dVb); if (selfheat) dIgb1_dT = T1 * Vgb * (Vaux*dT5_dT + T5*dVaux_dT); else dIgb1_dT = 0.0; Vox = Voxacc; /* Voxeff is Vox limited below Voxh */ T0 = model->B3SOIPDvoxh; T1 = T0 - Vox - model->B3SOIPDdeltavox; T3 = sqrt(T1 * T1 + 4*model->B3SOIPDdeltavox * T0); Voxeff = T0 - 0.5 * (T1 + T3); dVoxeff_dVox = 0.5 * (1.0 + T1 / T3); Vox = Voxeff; dVox_dVg = dVoxacc_dVg * dVoxeff_dVox; dVox_dVd = dVoxacc_dVd * dVoxeff_dVox; dVox_dVb = dVoxacc_dVb * dVoxeff_dVox; dVox_dT = 0; T0 = (-Vgb+(Vfb))/model->B3SOIPDvecb; if (selfheat) dT0_dT = 0; DEXP(T0, T1, T2); /* T1=exp(T0), T2=dT1_dT0 */ if (selfheat) dT1_dT = 0; Vaux = model->B3SOIPDvecb* log(1 + T1); dVaux_dVg = -T2 / (1 + T1); dVaux_dVd = 0; dVaux_dVb = -dVaux_dVg; if (selfheat) dVaux_dT = 0; if (model->B3SOIPDvgb2 != 0) { T0 = 1 - Vox / model->B3SOIPDvgb2; dT0_dVox = -1.0/model->B3SOIPDvgb2; if (selfheat) dT0_dT = -dVox_dT / model->B3SOIPDvgb2; } else { T0 = 1; dT0_dVox = dT0_dT =0.0; } if (T0 < 0.01) { T0 = 0.01; dT0_dVox = dT0_dT =0.0; } /* v2.2.3 bug fix */ T1 = Leff * Weff * 4.9758e-7 * OxideRatio / here->B3SOIPDnseg; T2 = -2.357e10 * model->B3SOIPDtoxqm; T3 = model->B3SOIPDalphaGB2; T4 = model->B3SOIPDbetaGB2; T6 = T2*(T3 - T4 * Vox) / T0; if (selfheat) dT6_dT = -T2 * T4 * dVox_dT / T0 - T6/T0 * dT0_dT; DEXP(T6, T5, T7); /* T5=exp(T6), T7=dT5_dT6 */ dT5_dVg = -T7 * dVox_dVg * T2 / T0 * (T4 + (T3 - T4 * Vox) / T0 * dT0_dVox); dT5_dVd = -T7 * dVox_dVd * T2 / T0 * (T4 + (T3 - T4 * Vox) / T0 * dT0_dVox); dT5_dVb = -T7 * dVox_dVb * T2 / T0 * (T4 + (T3 - T4 * Vox) / T0 * dT0_dVox); if (selfheat) dT5_dT = T7 * dT6_dT; Igb2 = T1 * Vgb * Vaux * T5; dIgb2_dVg = T1 * (Vgb*Vaux*dT5_dVg + dVgb_dVg*Vaux*T5 + Vgb*T5*dVaux_dVg); dIgb2_dVd = T1 * (Vgb*Vaux*dT5_dVd + Vgb*T5*dVaux_dVd); dIgb2_dVb = T1 * (Vgb*Vaux*dT5_dVb + dVgb_dVb*Vaux*T5 + Vgb*T5*dVaux_dVb); if (selfheat) dIgb2_dT = T1 * Vgb * (Vaux*dT5_dT + T5*dVaux_dT); else dIgb2_dT = 0.0; /* Igb1 dominates in inversion region, while Igb2 doninates in accumulation */ /* v2.2.3 bug fix for residue at low Vgb */ if (Vgb >= 0) { Igb = Igb1; dIgb_dVg = dIgb1_dVg; dIgb_dVd = dIgb1_dVd; dIgb_dVb = dIgb1_dVb; dIgb_dT = dIgb1_dT; } else { Igb = Igb2; dIgb_dVg = dIgb2_dVg; dIgb_dVd = dIgb2_dVd; dIgb_dVb = dIgb2_dVb; dIgb_dT = dIgb2_dT; } } else { Igb = 0.0; dIgb_dVg = 0.0; dIgb_dVd = 0.0; dIgb_dVb = 0.0; dIgb_dT = 0.0; } here->B3SOIPDig = Igb; here->B3SOIPDgigg = dIgb_dVg; here->B3SOIPDgigd = dIgb_dVd; here->B3SOIPDgigb = dIgb_dVb; here->B3SOIPDgigs = -(dIgb_dVg + dIgb_dVd + dIgb_dVb); here->B3SOIPDgigT = dIgb_dT; /* end of v2.2 gate current */ /* calculate substrate current Iii */ if (pParam->B3SOIPDalpha0 <= 0.0) { Giig = Giib = Giid = GiiT = 0.0; here->B3SOIPDiii = Iii = 0.0; } else { Vdsatii0 = pParam->B3SOIPDvdsatii0 * (1 + model->B3SOIPDtii * (TempRatio-1.0)) - pParam->B3SOIPDlii / Leff; if (selfheat) dVdsatii0_dT = pParam->B3SOIPDvdsatii0 * model->B3SOIPDtii * dTempRatio_dT; else dVdsatii0_dT = 0; /* Calculate VgsStep */ T0 = pParam->B3SOIPDesatii * Leff; T1 = pParam->B3SOIPDsii0 * T0 / (1.0 + T0); T0 = 1 / (1 + pParam->B3SOIPDsii1 * Vgsteff); if (selfheat) dT0_dT = - pParam->B3SOIPDsii1 * T0 * T0 *dVgsteff_dT; else dT0_dT = 0; T3 = T0 + pParam->B3SOIPDsii2; T4 = Vgst * pParam->B3SOIPDsii1 * T0 * T0; T2 = Vgst * T3; dT2_dVg = T3 * dVgst_dVg - T4 * dVgsteff_dVg; dT2_dVb = T3 * dVgst_dVb * dVbseff_dVb - T4 * dVgsteff_dVb; dT2_dVd = T3 * dVgst_dVd - T4 * dVgsteff_dVd; if (selfheat) dT2_dT = -dVth_dT * T3 + Vgst * dT0_dT; else dT2_dT = 0; T3 = 1 / (1 + pParam->B3SOIPDsiid * Vds); dT3_dVd = - pParam->B3SOIPDsiid * T3 * T3; VgsStep = T1 * T2 * T3; if (selfheat) dVgsStep_dT = T1 * T3 * dT2_dT; else dVgsStep_dT = 0; Vdsatii = Vdsatii0 + VgsStep; Vdiff = Vds - Vdsatii; dVdiff_dVg = - T1 * T3 * dT2_dVg; dVdiff_dVb = - T1 * T3 * dT2_dVb; dVdiff_dVd = 1.0 - T1 * (T3 * dT2_dVd + T2 * dT3_dVd); if (selfheat) dVdiff_dT = -(dVdsatii0_dT + dVgsStep_dT); else dVdiff_dT = 0; T0 = pParam->B3SOIPDbeta2 + pParam->B3SOIPDbeta1 * Vdiff + pParam->B3SOIPDbeta0 * Vdiff * Vdiff; if (T0 < 1e-5) { T0 = 1e-5; dT0_dVg = dT0_dVd = dT0_dVb = dT0_dT = 0.0; } else { T1 = pParam->B3SOIPDbeta1 + 2 * pParam->B3SOIPDbeta0 * Vdiff; dT0_dVg = T1 * dVdiff_dVg; dT0_dVb = T1 * dVdiff_dVb; dT0_dVd = T1 * dVdiff_dVd; if (selfheat) dT0_dT = T1 * dVdiff_dT; else dT0_dT = 0; } if ((T0 < Vdiff / EXPL_THRESHOLD) && (Vdiff > 0.0)) { Ratio = pParam->B3SOIPDalpha0 * MAX_EXPL; dRatio_dVg = dRatio_dVb = dRatio_dVd = dRatio_dT = 0.0; } else if ((T0 < -Vdiff / EXPL_THRESHOLD) && (Vdiff < 0.0)) { Ratio = pParam->B3SOIPDalpha0 * MIN_EXPL; dRatio_dVg = dRatio_dVb = dRatio_dVd = dRatio_dT = 0.0; } else { Ratio = pParam->B3SOIPDalpha0 * exp(Vdiff / T0); T1 = Ratio / T0 / T0; dRatio_dVg = T1 * (T0 * dVdiff_dVg - Vdiff * dT0_dVg); dRatio_dVb = T1 * (T0 * dVdiff_dVb - Vdiff * dT0_dVb); dRatio_dVd = T1 * (T0 * dVdiff_dVd - Vdiff * dT0_dVd); if (selfheat) dRatio_dT = T1 * (T0 * dVdiff_dT - Vdiff * dT0_dT); else dRatio_dT = 0; } /* Avoid too high ratio */ if (Ratio > 10.0) { Ratio = 10.0; dRatio_dVg = dRatio_dVb = dRatio_dVd = dRatio_dT = 0.0; } T0 = Ids + pParam->B3SOIPDfbjtii * Ic; here->B3SOIPDiii = Iii = Ratio * T0; Giig = Ratio * Gm + T0 * dRatio_dVg; Giib = Ratio * (Gmb + pParam->B3SOIPDfbjtii * Gcb) + T0 * dRatio_dVb; Giid = Ratio * (Gds + pParam->B3SOIPDfbjtii * Gcd) + T0 * dRatio_dVd; if (selfheat) GiiT = Ratio * (GmT + pParam->B3SOIPDfbjtii * GcT) + T0 * dRatio_dT; else GiiT = 0.0; } /* Current through body resistor */ /* Current going out is +ve */ if ((here->B3SOIPDbodyMod == 0) || (here->B3SOIPDbodyMod == 2)) { Ibp = Gbpbs = Gbpps = 0.0; } else { /* here->B3SOIPDbodyMod == 1 */ if (pParam->B3SOIPDrbody < 1e-30) { if (here->B3SOIPDrbodyext <= 1e-30) T0 = 1.0 / 1e-30; else T0 = 1.0 / here->B3SOIPDrbodyext; Ibp = Vbp * T0; Gbpbs = T0 * dVbp_dVb; Gbpps = -T0 * dVbp_dVb; } else { Gbpbs = 1.0 / (pParam->B3SOIPDrbody + here->B3SOIPDrbodyext); Ibp = Vbp * Gbpbs; Gbpps = - Gbpbs; } } here->B3SOIPDibp = Ibp; here->B3SOIPDgbpbs = Gbpbs; here->B3SOIPDgbpps = Gbpps; here->B3SOIPDgbpT = 0.0; here->B3SOIPDcbodcon = Ibp - (Gbpbs * Vbs + Gbpps * Vps); /* Current going out of drainprime node into the drain of device */ /* "node" means the SPICE circuit node */ here->B3SOIPDcdrain = Ids + Ic; here->B3SOIPDcd = Ids + Ic - Ibd + Iii + Idgidl; here->B3SOIPDcb = Ibs + Ibd + Ibp - Iii - Idgidl - Isgidl - Igb; here->B3SOIPDgds = Gds + Gcd; here->B3SOIPDgm = Gm; here->B3SOIPDgmbs = Gmb + Gcb; if (selfheat) here->B3SOIPDgmT = GmT + GcT; else here->B3SOIPDgmT = 0.0; /* note that sign is switched because power flows out of device into the temperature node. Currently ommit self-heating due to bipolar current because it can cause convergence problem*/ here->B3SOIPDgtempg = -Gm * Vds; here->B3SOIPDgtempb = -Gmb * Vds; here->B3SOIPDgtempT = -GmT * Vds; here->B3SOIPDgtempd = -Gds * Vds - Ids; here->B3SOIPDcth = - Ids * Vds - model->B3SOIPDtype * (here->B3SOIPDgtempg * Vgs + here->B3SOIPDgtempb * Vbs + here->B3SOIPDgtempd * Vds) - here->B3SOIPDgtempT * delTemp; /* Body current which flows into drainprime node from the drain of device */ here->B3SOIPDgjdb = Gjdb - Giib; here->B3SOIPDgjdd = Gjdd - (Giid + Gdgidld); here->B3SOIPDgjdg = - (Giig + Gdgidlg); if (selfheat) here->B3SOIPDgjdT = GjdT - GiiT; else here->B3SOIPDgjdT = 0.0; here->B3SOIPDcjd = Ibd - Iii - Idgidl - (here->B3SOIPDgjdb * Vbs + here->B3SOIPDgjdd * Vds + here->B3SOIPDgjdg * Vgs + here->B3SOIPDgjdT * delTemp); /* Body current which flows into sourceprime node from the source of device */ here->B3SOIPDgjsb = Gjsb; here->B3SOIPDgjsd = Gjsd; here->B3SOIPDgjsg = - Gsgidlg; if (selfheat) here->B3SOIPDgjsT = GjsT; else here->B3SOIPDgjsT = 0.0; here->B3SOIPDcjs = Ibs - Isgidl - (here->B3SOIPDgjsb * Vbs + here->B3SOIPDgjsd * Vds + here->B3SOIPDgjsg * Vgs + here->B3SOIPDgjsT * delTemp); /* Current flowing into body node */ here->B3SOIPDgbbs = Giib - Gjsb - Gjdb - Gbpbs; here->B3SOIPDgbgs = Giig + Gdgidlg + Gsgidlg; here->B3SOIPDgbds = Giid + Gdgidld - Gjsd - Gjdd; here->B3SOIPDgbps = - Gbpps; if (selfheat) here->B3SOIPDgbT = GiiT - GjsT - GjdT; else here->B3SOIPDgbT = 0.0; here->B3SOIPDcbody = Iii + Idgidl + Isgidl - Ibs - Ibd - Ibp + Igb - ( (here->B3SOIPDgbbs + dIgb_dVb) * Vbs + (here->B3SOIPDgbgs + dIgb_dVg) * Vgs + (here->B3SOIPDgbds + dIgb_dVd) * Vds + here->B3SOIPDgbps * Vps + (here->B3SOIPDgbT + dIgb_dT) * delTemp); here->B3SOIPDcgate = Igb - (dIgb_dVb * Vbs + dIgb_dVg * Vgs + dIgb_dVd * Vds + dIgb_dT * delTemp); /* Calculate Qinv for Noise analysis */ T1 = Vgsteff * (1.0 - 0.5 * Abulk * Vdseff / Vgst2Vtm); here->B3SOIPDqinv = -model->B3SOIPDcox * pParam->B3SOIPDweff * Leff * T1; /* Begin CV (charge) model */ if ((model->B3SOIPDxpart < 0) || (!ChargeComputationNeeded)) { qgate = qdrn = qsrc = qbody = qsub = 0.0; /* v2.2.3 bug fix */ here->B3SOIPDcggb = here->B3SOIPDcgsb = here->B3SOIPDcgdb = 0.0; here->B3SOIPDcdgb = here->B3SOIPDcdsb = here->B3SOIPDcddb = 0.0; here->B3SOIPDcbgb = here->B3SOIPDcbsb = here->B3SOIPDcbdb = 0.0; goto finished; } else { CoxWL = model->B3SOIPDcox * (pParam->B3SOIPDweffCV / here->B3SOIPDnseg * pParam->B3SOIPDleffCV + here->B3SOIPDagbcp); CoxWLb = model->B3SOIPDfbody * model->B3SOIPDcox * (pParam->B3SOIPDweffCV / here->B3SOIPDnseg * pParam->B3SOIPDleffCVb + here->B3SOIPDagbcp); /* By using this Vgsteff,cv, discontinuity in moderate inversion charges can be avoid. */ if ((VgstNVt > -EXPL_THRESHOLD) && (VgstNVt < EXPL_THRESHOLD)) { ExpVgst *= ExpVgst; ExpVgst *= exp( -(pParam->B3SOIPDdelvt / (n * Vtm))); Vgsteff = n * Vtm * log(1.0 + ExpVgst); T0 = ExpVgst / (1.0 + ExpVgst); T1 = -T0 * (dVth_dVb + Vgst / n * dn_dVb) + Vgsteff / n * dn_dVb; dVgsteff_dVd = -T0 * (dVth_dVd + Vgst / n * dn_dVd) + Vgsteff / n * dn_dVd; dVgsteff_dVg = T0 * dVgs_eff_dVg; dVgsteff_dVb = T1 * dVbseff_dVb; if (selfheat) dVgsteff_dT = -T0 * (dVth_dT + (Vgst - pParam->B3SOIPDdelvt) / Temp) + Vgsteff / Temp; else dVgsteff_dT = 0.0; } if (model->B3SOIPDcapMod == 2) { Vfb = Vth - phi - pParam->B3SOIPDk1eff * sqrtPhis + pParam->B3SOIPDdelvt; dVfb_dVb = dVth_dVb - pParam->B3SOIPDk1eff * dsqrtPhis_dVb; dVfb_dVd = dVth_dVd; dVfb_dT = dVth_dT; V3 = Vfb - Vgs_eff + Vbseff - DELTA_3_SOI; if (Vfb <= 0.0) { T0 = sqrt(V3 * V3 - 4.0 * DELTA_3_SOI * Vfb); T2 = -DELTA_3_SOI / T0; } else { T0 = sqrt(V3 * V3 + 4.0 * DELTA_3_SOI * Vfb); T2 = DELTA_3_SOI / T0; } T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = Vfb - 0.5 * (V3 + T0); dVfbeff_dVd = (1.0 - T1 - T2) * dVfb_dVd; dVfbeff_dVb = (1.0 - T1 - T2) * dVfb_dVb - T1; dVfbeff_dVrg = T1 * dVgs_eff_dVg; if (selfheat) dVfbeff_dT = (1.0 - T1 - T2) * dVfb_dT; else dVfbeff_dT = 0.0; Qac0 = CoxWLb * (Vfbeff - Vfb); dQac0_dVrg = CoxWLb * dVfbeff_dVrg; dQac0_dVd = CoxWLb * (dVfbeff_dVd - dVfb_dVd); dQac0_dVb = CoxWLb * (dVfbeff_dVb - dVfb_dVb); if (selfheat) dQac0_dT = CoxWLb * (dVfbeff_dT - dVfb_dT); else dQac0_dT = 0.0; T0 = 0.5 * K1; T3 = Vgs_eff - Vfbeff - Vbseff - Vgsteff; if (pParam->B3SOIPDk1eff == 0.0) { T1 = 0.0; T2 = 0.0; } else if (T3 < 0.0) { T1 = T0 + T3 / pParam->B3SOIPDk1eff; T2 = CoxWLb; } else { T1 = sqrt(T0 * T0 + T3); T2 = CoxWLb * T0 / T1; } Qsub0 = CoxWLb * K1 * (T1 - T0); dQsub0_dVrg = T2 * (dVgs_eff_dVg - dVfbeff_dVrg); dQsub0_dVg = -T2; dQsub0_dVd = -T2 * dVfbeff_dVd; dQsub0_dVb = -T2 * (dVfbeff_dVb + 1); if (selfheat) dQsub0_dT = -T2 * dVfbeff_dT; else dQsub0_dT = 0.0; AbulkCV = Abulk0 * pParam->B3SOIPDabulkCVfactor; dAbulkCV_dVb = pParam->B3SOIPDabulkCVfactor * dAbulk0_dVb; VdsatCV = Vgsteff / AbulkCV; dVdsatCV_dVg = 1.0 / AbulkCV; dVdsatCV_dVb = -VdsatCV * dAbulkCV_dVb / AbulkCV; V4 = VdsatCV - Vds - DELTA_4; T0 = sqrt(V4 * V4 + 4.0 * DELTA_4 * VdsatCV); VdseffCV = VdsatCV - 0.5 * (V4 + T0); T1 = 0.5 * (1.0 + V4 / T0); T2 = DELTA_4 / T0; T3 = (1.0 - T1 - T2) / AbulkCV; dVdseffCV_dVg = T3; dVdseffCV_dVd = T1; dVdseffCV_dVb = -T3 * VdsatCV * dAbulkCV_dVb; T0 = AbulkCV * VdseffCV; T1 = 12.0 * (Vgsteff - 0.5 * T0 + 1e-20); T2 = VdseffCV / T1; T3 = T0 * T2; T4 = (1.0 - 12.0 * T2 * T2 * AbulkCV); T5 = (6.0 * T0 * (4.0 * Vgsteff- T0) / (T1 * T1) - 0.5); T6 = 12.0 * T2 * T2 * Vgsteff; T7 = 1.0 - AbulkCV; qbulk = CoxWLb * T7 * (0.5 * VdseffCV - T3); T4 = -T7 * (T4 - 1.0); T5 = -T7 * T5; T6 = -(T7 * T6 + (0.5 * VdseffCV - T3)); Cbg1 = CoxWLb * (T4 + T5 * dVdseffCV_dVg); Cbd1 = CoxWLb * T5 * dVdseffCV_dVd ; Cbb1 = CoxWLb * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb); /* Total inversion charge */ T0 = AbulkCV * VdseffCV; T1 = 12.0 * (Vgsteff - 0.5 * T0 + 1e-20); T2 = VdseffCV / T1; T3 = T0 * T2; T4 = (1.0 - 12.0 * T2 * T2 * AbulkCV); T5 = (6.0 * T0 * (4.0 * Vgsteff - T0) / (T1 * T1) - 0.5); T6 = 12.0 * T2 * T2 * Vgsteff; qinv = CoxWL * (Vgsteff - 0.5 * VdseffCV + T3); Cgg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); Cgd1 = CoxWL * T5 * dVdseffCV_dVd; Cgb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb); /* Inversion charge partitioning into S / D */ if (model->B3SOIPDxpart > 0.5) { /* 0/100 Charge partition model */ T1 = T1 + T1; qsrc = -CoxWL * (0.5 * Vgsteff + 0.25 * T0 - T0 * T0 / T1); T7 = (4.0 * Vgsteff - T0) / (T1 * T1); T4 = -(0.5 + 24.0 * T0 * T0 / (T1 * T1)); T5 = -(0.25 * AbulkCV - 12.0 * AbulkCV * T0 * T7); T6 = -(0.25 * VdseffCV - 12.0 * T0 * VdseffCV * T7); Csg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); Csd1 = CoxWL * T5 * dVdseffCV_dVd; Csb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb); } else if (model->B3SOIPDxpart < 0.5) { /* 40/60 Charge partition model */ T1 = T1 / 12.0; T2 = 0.5 * CoxWL / (T1 * T1); T3 = Vgsteff * (2.0 * T0 * T0 / 3.0 + Vgsteff * (Vgsteff - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T2 * T3; T7 = 4.0 / 3.0 * Vgsteff * (Vgsteff - T0) + 0.4 * T0 * T0; T4 = -2.0 * qsrc / T1 - T2 * (Vgsteff * (3.0 * Vgsteff - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0); T5 = (qsrc / T1 + T2 * T7) * AbulkCV; T6 = (qsrc / T1 * VdseffCV + T2 * T7 * VdseffCV); Csg1 = T4 + T5 * dVdseffCV_dVg; Csd1 = T5 * dVdseffCV_dVd; Csb1 = T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb; } else { /* 50/50 Charge partition model */ qsrc = - 0.5 * (qinv + qbulk); Csg1 = - 0.5 * (Cgg1 + Cbg1); Csb1 = - 0.5 * (Cgb1 + Cbb1); Csd1 = - 0.5 * (Cgd1 + Cbd1); } /* Backgate charge */ CboxWL = pParam->B3SOIPDkb1 * model->B3SOIPDfbody * Cbox * (pParam->B3SOIPDweffCV / here->B3SOIPDnseg * pParam->B3SOIPDleffCVbg + here->B3SOIPDaebcp); Qe1 = CboxWL * (Vesfb - Vbs); dQe1_dVb = -CboxWL; dQe1_dVe = CboxWL; if (selfheat) dQe1_dT = -CboxWL * dvfbb_dT; else dQe1_dT = 0; qgate = qinv + Qac0 + Qsub0; qbody = (qbulk - Qac0 - Qsub0 - Qe1); qsub = Qe1; qdrn = -(qgate + qsrc + qbody + qsub); /* This transform all the dependency on Vgsteff, Vbseff into real ones */ Ce1b = dQe1_dVb; Ce1e = dQe1_dVe; Csg = Csg1 * dVgsteff_dVg; Csd = Csd1 + Csg1 * dVgsteff_dVd; Csb = Csg1 * dVgsteff_dVb + Csb1 * dVbseff_dVb; if (selfheat) CsT = Csg1 * dVgsteff_dT; else CsT = 0.0; Cgg = (Cgg1 + dQsub0_dVg) * dVgsteff_dVg + dQac0_dVrg + dQsub0_dVrg; Cgd = (Cgg1 + dQsub0_dVg) * dVgsteff_dVd + Cgd1 + dQac0_dVd + dQsub0_dVd; Cgb = (Cgg1 + dQsub0_dVg) * dVgsteff_dVb + (Cgb1 + dQsub0_dVb + dQac0_dVb) * dVbseff_dVb; if (selfheat) CgT = (Cgg1 + dQsub0_dVg) * dVgsteff_dT + dQac0_dT + dQsub0_dT; else CgT = 0.0; Cbg = (Cbg1 - dQsub0_dVg) * dVgsteff_dVg - dQac0_dVrg - dQsub0_dVrg; Cbd = (Cbg1 - dQsub0_dVg) * dVgsteff_dVd + Cbd1 - dQac0_dVd - dQsub0_dVd; Cbb = (Cbg1 - dQsub0_dVg) * dVgsteff_dVb - dQe1_dVb + (Cbb1 - dQsub0_dVb - dQac0_dVb) * dVbseff_dVb; if (selfheat) CbT = (Cbg1 - dQsub0_dVg) * dVgsteff_dT - dQac0_dT - dQsub0_dT - dQe1_dT; else CbT = 0.0; here->B3SOIPDcggb = Cgg ; here->B3SOIPDcgsb = - (Cgg + Cgd + Cgb); here->B3SOIPDcgdb = Cgd; here->B3SOIPDcgT = CgT; here->B3SOIPDcbgb = Cbg; here->B3SOIPDcbsb = -(Cbg + Cbd + Cbb) + Ce1e; here->B3SOIPDcbdb = Cbd; here->B3SOIPDcbeb = - Ce1e ; here->B3SOIPDcbT = CbT; here->B3SOIPDceeb = Ce1e ; here->B3SOIPDceT = dQe1_dT; here->B3SOIPDcdgb = -(Cgg + Cbg + Csg); here->B3SOIPDcddb = -(Cgd + Cbd + Csd); here->B3SOIPDcdeb = 0; here->B3SOIPDcdT = -(CgT + CbT + CsT) - dQe1_dT; here->B3SOIPDcdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb + Csg + Csd + Csb) + Ce1b; } /* End of if capMod == 2 */ else if (model->B3SOIPDcapMod == 3) { dVgsteff_dVb /= dVbseff_dVb; if (selfheat) { Vfbzb = Vthzb - phi - pParam->B3SOIPDk1eff * sqrtPhi + pParam->B3SOIPDdelvt; dVfbzb_dT = dVthzb_dT; } else { Vfbzb = pParam->B3SOIPDvfbzb + pParam->B3SOIPDdelvt; dVfbzb_dT = 0; } V3 = Vfbzb - Vgs_eff + Vbseff - DELTA_3; if (Vfbzb <= 0.0) { T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * Vfbzb); T2 = -DELTA_3 / T0; } else { T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * Vfbzb); T2 = DELTA_3 / T0; } T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = Vfbzb - 0.5 * (V3 + T0); dVfbeff_dVg = T1 * dVgs_eff_dVg; dVfbeff_dVb = -T1; if (selfheat) dVfbeff_dT = (1.0 - T1 - T2) * dVfbzb_dT; else dVfbeff_dT = 0.0; /* v2.2.3 */ Cox = 3.453133e-11 / (model->B3SOIPDtox - model->B3SOIPDdtoxcv); CoxWL *= model->B3SOIPDtox/ (model->B3SOIPDtox - model->B3SOIPDdtoxcv); CoxWLb *= model->B3SOIPDtox/ (model->B3SOIPDtox - model->B3SOIPDdtoxcv); Tox = 1.0e8 * (model->B3SOIPDtox - model->B3SOIPDdtoxcv); T0 = (Vgs_eff - Vbseff - Vfbzb) / Tox; dT0_dVg = dVgs_eff_dVg / Tox; dT0_dVb = -1.0 / Tox; tmp = T0 * pParam->B3SOIPDacde; if ((-EXPL_THRESHOLD < tmp) && (tmp < EXPL_THRESHOLD)) { Tcen = pParam->B3SOIPDldeb * exp(tmp); dTcen_dVg = pParam->B3SOIPDacde * Tcen; dTcen_dVb = dTcen_dVg * dT0_dVb; dTcen_dVg *= dT0_dVg; if (selfheat) dTcen_dT = -Tcen * pParam->B3SOIPDacde * dVfbzb_dT / Tox; else dTcen_dT = 0; } else if (tmp <= -EXPL_THRESHOLD) { Tcen = pParam->B3SOIPDldeb * MIN_EXPL; dTcen_dVg = dTcen_dVb = dTcen_dT = 0.0; } else { Tcen = pParam->B3SOIPDldeb * MAX_EXPL; dTcen_dVg = dTcen_dVb = dTcen_dT = 0.0; } LINK = 1.0e-3 * (model->B3SOIPDtox - model->B3SOIPDdtoxcv); /* v2.2.3 */ V3 = pParam->B3SOIPDldeb - Tcen - LINK; V4 = sqrt(V3 * V3 + 4.0 * LINK * pParam->B3SOIPDldeb); Tcen = pParam->B3SOIPDldeb - 0.5 * (V3 + V4); T1 = 0.5 * (1.0 + V3 / V4); dTcen_dVg *= T1; dTcen_dVb *= T1; if (selfheat) dTcen_dT *= T1; else dTcen_dT = 0; Ccen = EPSSI / Tcen; T2 = Cox / (Cox + Ccen); Coxeff = T2 * Ccen; T3 = -Ccen / Tcen; dCoxeff_dVg = T2 * T2 * T3; dCoxeff_dVb = dCoxeff_dVg * dTcen_dVb; dCoxeff_dVg *= dTcen_dVg; if (selfheat) dCoxeff_dT = T3 * dTcen_dT * (T2 - Coxeff / (Cox + Ccen)); else dCoxeff_dT = 0; CoxWLcenb = CoxWLb * Coxeff / Cox; if (selfheat) dCoxWLcenb_dT = CoxWLb * dCoxeff_dT / Cox; else dCoxWLcenb_dT = 0; Qac0 = CoxWLcenb * (Vfbeff - Vfbzb); QovCox = Qac0 / Coxeff; dQac0_dVg = CoxWLcenb * dVfbeff_dVg + QovCox * dCoxeff_dVg; dQac0_dVb = CoxWLcenb * dVfbeff_dVb + QovCox * dCoxeff_dVb; if (selfheat) dQac0_dT = CoxWLcenb * (dVfbeff_dT - dVfbzb_dT) + dCoxWLcenb_dT * (Vfbeff - Vfbzb); else dQac0_dT = 0.0; T0 = 0.5 * pParam->B3SOIPDk1eff; T3 = Vgs_eff - Vfbeff - Vbseff - Vgsteff; if (pParam->B3SOIPDk1eff == 0.0) { T1 = 0.0; T2 = 0.0; } else if (T3 < 0.0) { T1 = T0 + T3 / pParam->B3SOIPDk1eff; T2 = CoxWLcenb; } else { T1 = sqrt(T0 * T0 + T3); T2 = CoxWLcenb * T0 / T1; } Qsub0 = CoxWLcenb * pParam->B3SOIPDk1eff * (T1 - T0); QovCox = Qsub0 / Coxeff; dQsub0_dVg = T2 * (dVgs_eff_dVg - dVfbeff_dVg - dVgsteff_dVg) + QovCox * dCoxeff_dVg; dQsub0_dVd = -T2 * dVgsteff_dVd; dQsub0_dVb = -T2 * (dVfbeff_dVb + 1 + dVgsteff_dVb) + QovCox * dCoxeff_dVb; if (selfheat) dQsub0_dT = -T2 * (dVfbeff_dT + dVgsteff_dT) + dCoxWLcenb_dT * pParam->B3SOIPDk1eff * (T1 - T0); else dQsub0_dT = 0.0; /* Gate-bias dependent delta Phis begins */ if (pParam->B3SOIPDk1eff <= 0.0) { Denomi = 0.25 * pParam->B3SOIPDmoin * Vtm; T0 = 0.5 * pParam->B3SOIPDsqrtPhi; } else { Denomi = pParam->B3SOIPDmoin * Vtm * pParam->B3SOIPDk1eff * pParam->B3SOIPDk1eff; T0 = pParam->B3SOIPDk1eff * pParam->B3SOIPDsqrtPhi; } T1 = 2.0 * T0 + Vgsteff; DeltaPhi = Vtm * log(1.0 + T1 * Vgsteff / Denomi); dDeltaPhi_dVg = 2.0 * Vtm * (T1 -T0) / (Denomi + T1 * Vgsteff); dDeltaPhi_dVd = dDeltaPhi_dVg * dVgsteff_dVd; dDeltaPhi_dVb = dDeltaPhi_dVg * dVgsteff_dVb; /* End of delta Phis */ T3 = 4.0 * (Vth - Vfbzb - phi); Tox += Tox; if ((T0 = (Vgsteff + T3) / Tox) > 1e-20) { tmp = exp(0.7 * log(T0)); T1 = 1.0 + tmp; T2 = 0.7 * tmp / (T0 * Tox); Tcen = 1.9e-9 / T1; dTcen_dVg = -1.9e-9 * T2 / T1 /T1; dTcen_dVd = dTcen_dVg * (4.0 * dVth_dVd + dVgsteff_dVd); dTcen_dVb = dTcen_dVg * (4.0 * dVth_dVb + dVgsteff_dVb); dTcen_dVg *= dVgsteff_dVg; if (selfheat) dTcen_dT = -Tcen * T2 / T1 * (4.0 * (dVth_dT - dVfbzb_dT) + dVgsteff_dT); else dTcen_dT = 0; } else { T0 = 1e-20; tmp = exp(0.7 * log(T0)); T1 = 1.0 + tmp; T2 = 0.7 * tmp / (T0 * Tox); Tcen = 1.9e-9 / T1; dTcen_dVg = 0; dTcen_dVd = 0; dTcen_dVb = 0; dTcen_dT = 0; } Ccen = EPSSI / Tcen; T0 = Cox / (Cox + Ccen); Coxeff = T0 * Ccen; T1 = -Ccen / Tcen; dCoxeff_dVg = T0 * T0 * T1; dCoxeff_dVd = dCoxeff_dVg * dTcen_dVd; dCoxeff_dVb = dCoxeff_dVg * dTcen_dVb; dCoxeff_dVg *= dTcen_dVg; if (selfheat) dCoxeff_dT = T1 * dTcen_dT * (T0 - Coxeff / (Cox + Ccen)); else dCoxeff_dT = 0; CoxWLcen = CoxWL * Coxeff / Cox; CoxWLcenb = CoxWLb * Coxeff / Cox; AbulkCV = Abulk0 * pParam->B3SOIPDabulkCVfactor; dAbulkCV_dVb = pParam->B3SOIPDabulkCVfactor * dAbulk0_dVb; VdsatCV = (Vgsteff - DeltaPhi) / AbulkCV; V4 = VdsatCV - Vds - DELTA_4; T0 = sqrt(V4 * V4 + 4.0 * DELTA_4 * VdsatCV); VdseffCV = VdsatCV - 0.5 * (V4 + T0); T1 = 0.5 * (1.0 + V4 / T0); T2 = DELTA_4 / T0; T3 = (1.0 - T1 - T2) / AbulkCV; T4 = T3 * ( 1.0 - dDeltaPhi_dVg); dVdseffCV_dVg = T4; dVdseffCV_dVd = T1; dVdseffCV_dVb = -T3 * VdsatCV * dAbulkCV_dVb; T0 = AbulkCV * VdseffCV; T1 = Vgsteff - DeltaPhi; T2 = 12.0 * (T1 - 0.5 * T0 + 1.0e-20); T3 = T0 / T2; T4 = 1.0 - 12.0 * T3 * T3; T5 = AbulkCV * (6.0 * T0 * (4.0 * T1 - T0) / (T2 * T2) - 0.5); T6 = T5 * VdseffCV / AbulkCV; qinv = qgate = qinoi = CoxWLcen * (T1 - T0 * (0.5 - T3)); QovCox = qgate / Coxeff; Cgg1 = CoxWLcen * (T4 * (1.0 - dDeltaPhi_dVg) + T5 * dVdseffCV_dVg); Cgd1 = CoxWLcen * T5 * dVdseffCV_dVd + Cgg1 * dVgsteff_dVd + QovCox * dCoxeff_dVd; Cgb1 = CoxWLcen * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Cgg1 * dVgsteff_dVb + QovCox * dCoxeff_dVb; Cgg1 = Cgg1 * dVgsteff_dVg + QovCox * dCoxeff_dVg; T7 = 1.0 - AbulkCV; T8 = T2 * T2; T9 = 12.0 * T7 * T0 * T0 / (T8 * AbulkCV); T10 = T9 * (1.0 - dDeltaPhi_dVg); T11 = -T7 * T5 / AbulkCV; T12 = -(T9 * T1 / AbulkCV + VdseffCV * (0.5 - T0 / T2)); qbulk = CoxWLcenb * T7 * (0.5 * VdseffCV - T0 * VdseffCV / T2); QovCox = qbulk / Coxeff; Cbg1 = CoxWLcenb * (T10 + T11 * dVdseffCV_dVg); Cbd1 = CoxWLcenb * T11 * dVdseffCV_dVd + Cbg1 * dVgsteff_dVd + QovCox * dCoxeff_dVd; Cbb1 = CoxWLcenb * (T11 * dVdseffCV_dVb + T12 * dAbulkCV_dVb) + Cbg1 * dVgsteff_dVb + QovCox * dCoxeff_dVb; Cbg1 = Cbg1 * dVgsteff_dVg + QovCox * dCoxeff_dVg; if (model->B3SOIPDxpart > 0.5) { /* 0/100 partition */ qsrc = -CoxWLcen * (T1 / 2.0 + T0 / 4.0 - 0.5 * T0 * T0 / T2); QovCox = qsrc / Coxeff; T2 += T2; T3 = T2 * T2; T7 = -(0.25 - 12.0 * T0 * (4.0 * T1 - T0) / T3); T4 = -(0.5 + 24.0 * T0 * T0 / T3) * (1.0 - dDeltaPhi_dVg); T5 = T7 * AbulkCV; T6 = T7 * VdseffCV; Csg = CoxWLcen * (T4 + T5 * dVdseffCV_dVg); Csd = CoxWLcen * T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd + QovCox * dCoxeff_dVd; Csb = CoxWLcen * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Csg * dVgsteff_dVb + QovCox * dCoxeff_dVb; Csg = Csg * dVgsteff_dVg + QovCox * dCoxeff_dVg; } else if (model->B3SOIPDxpart < 0.5) { /* 40/60 partition */ T2 = T2 / 12.0; T3 = 0.5 * CoxWLcen / (T2 * T2); T4 = T1 * (2.0 * T0 * T0 / 3.0 + T1 * (T1 - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T3 * T4; QovCox = qsrc / Coxeff; T8 = 4.0 / 3.0 * T1 * (T1 - T0) + 0.4 * T0 * T0; T5 = -2.0 * qsrc / T2 - T3 * (T1 * (3.0 * T1 - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0); T6 = AbulkCV * (qsrc / T2 + T3 * T8); T7 = T6 * VdseffCV / AbulkCV; Csg = T5 * (1.0 - dDeltaPhi_dVg) + T6 * dVdseffCV_dVg; Csd = Csg * dVgsteff_dVd + T6 * dVdseffCV_dVd + QovCox * dCoxeff_dVd; Csb = Csg * dVgsteff_dVb + T6 * dVdseffCV_dVb + T7 * dAbulkCV_dVb + QovCox * dCoxeff_dVb; Csg = Csg * dVgsteff_dVg + QovCox * dCoxeff_dVg; } else { /* 50/50 partition */ qsrc = -0.5 * qgate; Csg = -0.5 * Cgg1; Csd = -0.5 * Cgd1; Csb = -0.5 * Cgb1; } /* Backgate charge */ CboxWL = pParam->B3SOIPDkb1 * model->B3SOIPDfbody * Cbox * (pParam->B3SOIPDweffCV / here->B3SOIPDnseg * pParam->B3SOIPDleffCVbg + here->B3SOIPDaebcp); Qe1 = CboxWL * (Vesfb - Vbs); Ce1b = dQe1_dVb = -CboxWL; Ce1e = dQe1_dVe = CboxWL; if (selfheat) Ce1T = dQe1_dT = -CboxWL * dvfbb_dT; else Ce1T = dQe1_dT = 0.0; qgate += Qac0 + Qsub0 - qbulk; qbody = qbulk - Qac0 - Qsub0 - Qe1; qsub = Qe1; qdrn = -(qgate + qbody + qsub + qsrc); Cbg = Cbg1 - dQac0_dVg - dQsub0_dVg; Cbd = Cbd1 - dQsub0_dVd; Cbb = Cbb1 - dQac0_dVb - dQsub0_dVb - Ce1b / dVbseff_dVb; if (selfheat) CbT = Cbg1 * dVgsteff_dT - dQac0_dT - dQsub0_dT - dQe1_dT; else CbT = 0.0; Cgg = Cgg1 - Cbg; Cgd = Cgd1 - Cbd; Cgb = Cgb1 - Cbb - Ce1b / dVbseff_dVb; if (selfheat) CgT = Cgg1 * dVgsteff_dT + dQac0_dT + dQsub0_dT; else CgT = 0.0; Cgb *= dVbseff_dVb; Cbb *= dVbseff_dVb; Csb *= dVbseff_dVb; if (selfheat) CsT = Csg * dVgsteff_dT; else CsT = 0.0; here->B3SOIPDcggb = Cgg; here->B3SOIPDcgsb = -(Cgg + Cgd + Cgb); here->B3SOIPDcgdb = Cgd; here->B3SOIPDcgT = CgT; here->B3SOIPDcbgb = Cbg; here->B3SOIPDcbsb = -(Cbg + Cbd + Cbb) + Ce1e; here->B3SOIPDcbdb = Cbd; here->B3SOIPDcbeb = -Ce1e; here->B3SOIPDcbT = CbT; here->B3SOIPDceT = Ce1T; here->B3SOIPDceeb = Ce1e ; here->B3SOIPDcdgb = -(Cgg + Cbg + Csg); here->B3SOIPDcddb = -(Cgd + Cbd + Csd); here->B3SOIPDcdeb = 0; here->B3SOIPDcdT = -(CgT+CbT+CsT) - Ce1T; here->B3SOIPDcdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb + Csg + Csd + Csb) + Ce1b; here->B3SOIPDqinv = -qinoi; } /* End of if capMod ==3 */ } finished: /* returning Values to Calling Routine */ /* * COMPUTE EQUIVALENT DRAIN CURRENT SOURCE */ if (ChargeComputationNeeded) { /* Intrinsic S/D junction charge */ PhiBSWG = model->B3SOIPDGatesidewallJctPotential; dPhiBSWG_dT = -model->B3SOIPDtpbswg; PhiBSWG += dPhiBSWG_dT * (Temp - model->B3SOIPDtnom); MJSWG = model->B3SOIPDbodyJctGateSideGradingCoeff; cjsbs = model->B3SOIPDunitLengthGateSidewallJctCap * wdiosCV * model->B3SOIPDtsi / 1e-7; dcjsbs_dT = cjsbs * model->B3SOIPDtcjswg; cjsbs += dcjsbs_dT * (Temp - model->B3SOIPDtnom); cjdbs = model->B3SOIPDunitLengthGateSidewallJctCap * wdiodCV * model->B3SOIPDtsi / 1e-7; dcjdbs_dT = cjdbs * model->B3SOIPDtcjswg; cjdbs += dcjdbs_dT * (Temp - model->B3SOIPDtnom); DioMax = 0.9 * (PhiBSWG); arg = 1.0 - (Vbs > DioMax ? DioMax : Vbs) / PhiBSWG; if (selfheat) darg_dT = (1 - arg) / PhiBSWG * dPhiBSWG_dT; if (MJSWG == 0.5) { dT3_dVb = 1.0 / sqrt(arg); if (selfheat) ddT3_dVb_dT = -0.5 * dT3_dVb / arg * darg_dT; } else { dT3_dVb = exp(-MJSWG * log(arg)); if (selfheat) ddT3_dVb_dT = -MJSWG * dT3_dVb / arg * darg_dT; } T3 = (1.0 - arg * dT3_dVb) * PhiBSWG / (1.0 - MJSWG); if (selfheat) dT3_dT = (1.0 - arg * dT3_dVb) * dPhiBSWG_dT / (1.0 - MJSWG) - (arg * ddT3_dVb_dT + darg_dT * dT3_dVb) * PhiBSWG / (1.0 - MJSWG); if (Vbs > DioMax) T3 += dT3_dVb * (Vbs - DioMax); qjs = cjsbs * T3 + model->B3SOIPDtt * Ibsdif; gcjsbs = cjsbs * dT3_dVb + model->B3SOIPDtt * dIbsdif_dVb; if (selfheat) gcjsT = model->B3SOIPDtt * dIbsdif_dT + dcjsbs_dT * T3 + dT3_dT * cjsbs; else gcjsT = 0.0; arg = 1.0 - (Vbd > DioMax ? DioMax : Vbd) / PhiBSWG; if (selfheat) darg_dT = (1 - arg) / PhiBSWG * dPhiBSWG_dT; if (MJSWG == 0.5) { dT3_dVb = 1.0 / sqrt(arg); if (selfheat) ddT3_dVb_dT = -0.5 * dT3_dVb / arg * darg_dT; } else { dT3_dVb = exp(-MJSWG * log(arg)); if (selfheat) ddT3_dVb_dT = -MJSWG * dT3_dVb / arg * darg_dT; } T3 = (1.0 - arg * dT3_dVb) * PhiBSWG / (1.0 - MJSWG); if (selfheat) dT3_dT = (1.0 - arg * dT3_dVb) * dPhiBSWG_dT / (1.0 - MJSWG) - (arg * ddT3_dVb_dT + darg_dT * dT3_dVb) * PhiBSWG / (1.0 - MJSWG); if (Vbd > DioMax) T3 += dT3_dVb * (Vbd - DioMax); dT3_dVd = -dT3_dVb; qjd = cjdbs * T3 + model->B3SOIPDtt * Ibddif; gcjdbs = cjdbs * dT3_dVb + model->B3SOIPDtt * dIbddif_dVb; gcjdds = cjdbs * dT3_dVd + model->B3SOIPDtt * dIbddif_dVd; if (selfheat) gcjdT = model->B3SOIPDtt * dIbddif_dT + dcjdbs_dT * T3 + dT3_dT * cjdbs; else gcjdT = 0.0; qdrn -= qjd; qbody += (qjs + qjd); qsrc = -(qgate + qbody + qdrn + qsub); /* Update the conductance */ here->B3SOIPDcddb -= gcjdds; here->B3SOIPDcdT -= gcjdT; here->B3SOIPDcdsb += gcjdds + gcjdbs; here->B3SOIPDcbdb += (gcjdds); here->B3SOIPDcbT += (gcjdT + gcjsT); here->B3SOIPDcbsb -= (gcjdds + gcjdbs + gcjsbs); /* Extrinsic Bottom S/D to substrate charge */ T10 = -model->B3SOIPDtype * ves; /* T10 is vse without type conversion */ T11 = model->B3SOIPDtype * (vds - ves); /* T11 is vde without type conversion */ if (model->B3SOIPDcsdmin != 0.0) { if ( ((pParam->B3SOIPDnsub > 0) && (model->B3SOIPDtype > 0)) || ((pParam->B3SOIPDnsub < 0) && (model->B3SOIPDtype < 0)) ) { if (T10 < pParam->B3SOIPDvsdfb) { here->B3SOIPDqse = here->B3SOIPDcsbox * (T10 - pParam->B3SOIPDvsdfb); here->B3SOIPDgcse = here->B3SOIPDcsbox; } else if (T10 < pParam->B3SOIPDsdt1) { T0 = T10 - pParam->B3SOIPDvsdfb; T1 = T0 * T0; here->B3SOIPDqse = T0 * (here->B3SOIPDcsbox - pParam->B3SOIPDst2 / 3 * T1) ; here->B3SOIPDgcse = here->B3SOIPDcsbox - pParam->B3SOIPDst2 * T1; } else if (T10 < pParam->B3SOIPDvsdth) { T0 = T10 - pParam->B3SOIPDvsdth; T1 = T0 * T0; here->B3SOIPDqse = here->B3SOIPDcsmin * T10 + here->B3SOIPDst4 + pParam->B3SOIPDst3 / 3 * T0 * T1; here->B3SOIPDgcse = here->B3SOIPDcsmin + pParam->B3SOIPDst3 * T1; } else { here->B3SOIPDqse = here->B3SOIPDcsmin * T10 + here->B3SOIPDst4; here->B3SOIPDgcse = here->B3SOIPDcsmin; } } else { if (T10 < pParam->B3SOIPDvsdth) { here->B3SOIPDqse = here->B3SOIPDcsmin * (T10 - pParam->B3SOIPDvsdth); here->B3SOIPDgcse = here->B3SOIPDcsmin; } else if (T10 < pParam->B3SOIPDsdt1) { T0 = T10 - pParam->B3SOIPDvsdth; T1 = T0 * T0; here->B3SOIPDqse = T0 * (here->B3SOIPDcsmin - pParam->B3SOIPDst2 / 3 * T1) ; here->B3SOIPDgcse = here->B3SOIPDcsmin - pParam->B3SOIPDst2 * T1; } else if (T10 < pParam->B3SOIPDvsdfb) { T0 = T10 - pParam->B3SOIPDvsdfb; T1 = T0 * T0; here->B3SOIPDqse = here->B3SOIPDcsbox * T10 + here->B3SOIPDst4 + pParam->B3SOIPDst3 / 3 * T0 * T1; here->B3SOIPDgcse = here->B3SOIPDcsbox + pParam->B3SOIPDst3 * T1; } else { here->B3SOIPDqse = here->B3SOIPDcsbox * T10 + here->B3SOIPDst4; here->B3SOIPDgcse = here->B3SOIPDcsbox; } } if ( ((pParam->B3SOIPDnsub > 0) && (model->B3SOIPDtype > 0)) || ((pParam->B3SOIPDnsub < 0) && (model->B3SOIPDtype < 0)) ) { if (T11 < pParam->B3SOIPDvsdfb) { here->B3SOIPDqde = here->B3SOIPDcdbox * (T11 - pParam->B3SOIPDvsdfb); here->B3SOIPDgcde = here->B3SOIPDcdbox; } else if (T11 < pParam->B3SOIPDsdt1) { T0 = T11 - pParam->B3SOIPDvsdfb; T1 = T0 * T0; here->B3SOIPDqde = T0 * (here->B3SOIPDcdbox - pParam->B3SOIPDdt2 / 3 * T1) ; here->B3SOIPDgcde = here->B3SOIPDcdbox - pParam->B3SOIPDdt2 * T1; } else if (T11 < pParam->B3SOIPDvsdth) { T0 = T11 - pParam->B3SOIPDvsdth; T1 = T0 * T0; here->B3SOIPDqde = here->B3SOIPDcdmin * T11 + here->B3SOIPDdt4 + pParam->B3SOIPDdt3 / 3 * T0 * T1; here->B3SOIPDgcde = here->B3SOIPDcdmin + pParam->B3SOIPDdt3 * T1; } else { here->B3SOIPDqde = here->B3SOIPDcdmin * T11 + here->B3SOIPDdt4; here->B3SOIPDgcde = here->B3SOIPDcdmin; } } else { if (T11 < pParam->B3SOIPDvsdth) { here->B3SOIPDqde = here->B3SOIPDcdmin * (T11 - pParam->B3SOIPDvsdth); here->B3SOIPDgcde = here->B3SOIPDcdmin; } else if (T11 < pParam->B3SOIPDsdt1) { T0 = T11 - pParam->B3SOIPDvsdth; T1 = T0 * T0; here->B3SOIPDqde = T0 * (here->B3SOIPDcdmin - pParam->B3SOIPDdt2 / 3 * T1) ; here->B3SOIPDgcde = here->B3SOIPDcdmin - pParam->B3SOIPDdt2 * T1; } else if (T11 < pParam->B3SOIPDvsdfb) { T0 = T11 - pParam->B3SOIPDvsdfb; T1 = T0 * T0; here->B3SOIPDqde = here->B3SOIPDcdbox * T11 + here->B3SOIPDdt4 + pParam->B3SOIPDdt3 / 3 * T0 * T1; here->B3SOIPDgcde = here->B3SOIPDcdbox + pParam->B3SOIPDdt3 * T1; } else { here->B3SOIPDqde = here->B3SOIPDcdbox * T11 + here->B3SOIPDdt4; here->B3SOIPDgcde = here->B3SOIPDcdbox; } } } else { here->B3SOIPDqse = here->B3SOIPDcsbox * T10; here->B3SOIPDgcse = here->B3SOIPDcsbox; here->B3SOIPDqde = here->B3SOIPDcdbox * T11; here->B3SOIPDgcde = here->B3SOIPDcdbox; } /* Extrinsic : Sidewall fringing S/D charge */ here->B3SOIPDqse += here->B3SOIPDcsesw * T10; here->B3SOIPDgcse += here->B3SOIPDcsesw; here->B3SOIPDqde += here->B3SOIPDcdesw * T11; here->B3SOIPDgcde += here->B3SOIPDcdesw; /* All charge are mutliplied with type at the end, but qse and qde have true polarity => so pre-mutliplied with type */ here->B3SOIPDqse *= model->B3SOIPDtype; here->B3SOIPDqde *= model->B3SOIPDtype; } here->B3SOIPDcbb = Cbb; here->B3SOIPDcbd = Cbd; here->B3SOIPDcbg = Cbg; here->B3SOIPDqbf = -Qsub0 - Qac0; here->B3SOIPDqjs = qjs; here->B3SOIPDqjd = qjd; /* * check convergence */ if ((here->B3SOIPDoff == 0) || (!(ckt->CKTmode & MODEINITFIX))) { if (Check == 1) { ckt->CKTnoncon++; } } *(ckt->CKTstate0 + here->B3SOIPDvg) = vg; *(ckt->CKTstate0 + here->B3SOIPDvd) = vd; *(ckt->CKTstate0 + here->B3SOIPDvs) = vs; *(ckt->CKTstate0 + here->B3SOIPDvp) = vp; *(ckt->CKTstate0 + here->B3SOIPDve) = ve; *(ckt->CKTstate0 + here->B3SOIPDvbs) = vbs; *(ckt->CKTstate0 + here->B3SOIPDvbd) = vbd; *(ckt->CKTstate0 + here->B3SOIPDvgs) = vgs; *(ckt->CKTstate0 + here->B3SOIPDvds) = vds; *(ckt->CKTstate0 + here->B3SOIPDves) = ves; *(ckt->CKTstate0 + here->B3SOIPDvps) = vps; *(ckt->CKTstate0 + here->B3SOIPDdeltemp) = delTemp; /* bulk and channel charge plus overlaps */ if (!ChargeComputationNeeded) goto line850; #ifndef NOBYPASS line755: #endif ag0 = ckt->CKTag[0]; T0 = vgd + DELTA_1; T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); /* v2.2.3 bug fix */ T3 = pParam->B3SOIPDwdiodCV * pParam->B3SOIPDcgdl; T4 = sqrt(1.0 - 4.0 * T2 / pParam->B3SOIPDckappa); cgdo = pParam->B3SOIPDcgdo + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgdo = (pParam->B3SOIPDcgdo + T3) * vgd - T3 * (T2 + 0.5 * pParam->B3SOIPDckappa * (T4 - 1.0)); T0 = vgs + DELTA_1; T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); /* v2.2.3 bug fix */ T3 = pParam->B3SOIPDwdiosCV * pParam->B3SOIPDcgsl; T4 = sqrt(1.0 - 4.0 * T2 / pParam->B3SOIPDckappa); cgso = pParam->B3SOIPDcgso + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgso = (pParam->B3SOIPDcgso + T3) * vgs - T3 * (T2 + 0.5 * pParam->B3SOIPDckappa * (T4 - 1.0)); if (here->B3SOIPDdebugMod < 0) goto line850; if (here->B3SOIPDmode > 0) { gcdgb = (here->B3SOIPDcdgb - cgdo) * ag0; gcddb = (here->B3SOIPDcddb + cgdo + here->B3SOIPDgcde) * ag0; gcdsb = here->B3SOIPDcdsb * ag0; gcdeb = (here->B3SOIPDcdeb - here->B3SOIPDgcde) * ag0; gcdT = model->B3SOIPDtype * here->B3SOIPDcdT * ag0; gcsgb = -(here->B3SOIPDcggb + here->B3SOIPDcbgb + here->B3SOIPDcdgb + cgso) * ag0; gcsdb = -(here->B3SOIPDcgdb + here->B3SOIPDcbdb + here->B3SOIPDcddb) * ag0; gcssb = (cgso + here->B3SOIPDgcse - (here->B3SOIPDcgsb + here->B3SOIPDcbsb + here->B3SOIPDcdsb)) * ag0; gcseb = -(here->B3SOIPDgcse + here->B3SOIPDcbeb + here->B3SOIPDcdeb + here->B3SOIPDceeb) * ag0; gcsT = - model->B3SOIPDtype * (here->B3SOIPDcgT + here->B3SOIPDcbT + here->B3SOIPDcdT + here->B3SOIPDceT) * ag0; gcggb = (here->B3SOIPDcggb + cgdo + cgso + pParam->B3SOIPDcgeo) * ag0; gcgdb = (here->B3SOIPDcgdb - cgdo) * ag0; gcgsb = (here->B3SOIPDcgsb - cgso) * ag0; gcgeb = (- pParam->B3SOIPDcgeo) * ag0; gcgT = model->B3SOIPDtype * here->B3SOIPDcgT * ag0; gcbgb = here->B3SOIPDcbgb * ag0; gcbdb = here->B3SOIPDcbdb * ag0; gcbsb = here->B3SOIPDcbsb * ag0; gcbeb = here->B3SOIPDcbeb * ag0; gcbT = model->B3SOIPDtype * here->B3SOIPDcbT * ag0; gcegb = (- pParam->B3SOIPDcgeo) * ag0; gcedb = (- here->B3SOIPDgcde) * ag0; gcesb = (- here->B3SOIPDgcse) * ag0; gceeb = (here->B3SOIPDgcse + here->B3SOIPDgcde + here->B3SOIPDceeb + pParam->B3SOIPDcgeo) * ag0; gceT = model->B3SOIPDtype * here->B3SOIPDceT * ag0; gcTt = pParam->B3SOIPDcth * ag0; sxpart = 0.6; dxpart = 0.4; /* Lump the overlap capacitance and S/D parasitics */ qgd = qgdo; qgs = qgso; qge = pParam->B3SOIPDcgeo * vge; qgate += qgd + qgs + qge; qdrn += here->B3SOIPDqde - qgd; qsub -= qge + here->B3SOIPDqse + here->B3SOIPDqde; qsrc = -(qgate + qbody + qdrn + qsub); } else { gcsgb = (here->B3SOIPDcdgb - cgso) * ag0; gcssb = (here->B3SOIPDcddb + cgso + here->B3SOIPDgcse) * ag0; gcsdb = here->B3SOIPDcdsb * ag0; gcseb = (here->B3SOIPDcdeb - here->B3SOIPDgcse) * ag0; gcsT = model->B3SOIPDtype * here->B3SOIPDcdT * ag0; gcdgb = -(here->B3SOIPDcggb + here->B3SOIPDcbgb + here->B3SOIPDcdgb + cgdo) * ag0; gcdsb = -(here->B3SOIPDcgdb + here->B3SOIPDcbdb + here->B3SOIPDcddb) * ag0; gcddb = (cgdo + here->B3SOIPDgcde - (here->B3SOIPDcgsb + here->B3SOIPDcbsb + here->B3SOIPDcdsb)) * ag0; gcdeb = -(here->B3SOIPDgcde + here->B3SOIPDcbeb + here->B3SOIPDcdeb + here->B3SOIPDceeb) * ag0; gcdT = - model->B3SOIPDtype * (here->B3SOIPDcgT + here->B3SOIPDcbT + here->B3SOIPDcdT + here->B3SOIPDceT) * ag0; gcggb = (here->B3SOIPDcggb + cgdo + cgso + pParam->B3SOIPDcgeo) * ag0; gcgsb = (here->B3SOIPDcgdb - cgso) * ag0; gcgdb = (here->B3SOIPDcgsb - cgdo) * ag0; gcgeb = (- pParam->B3SOIPDcgeo) * ag0; gcgT = model->B3SOIPDtype * here->B3SOIPDcgT * ag0; gcbgb = here->B3SOIPDcbgb * ag0; gcbsb = here->B3SOIPDcbdb * ag0; gcbdb = here->B3SOIPDcbsb * ag0; gcbeb = here->B3SOIPDcbeb * ag0; gcbT = model->B3SOIPDtype * here->B3SOIPDcbT * ag0; gcegb = (-pParam->B3SOIPDcgeo) * ag0; gcesb = (- here->B3SOIPDgcse) * ag0; gcedb = (- here->B3SOIPDgcde) * ag0; gceeb = (here->B3SOIPDceeb + pParam->B3SOIPDcgeo + here->B3SOIPDgcse + here->B3SOIPDgcde) * ag0; gceT = model->B3SOIPDtype * here->B3SOIPDceT * ag0; gcTt = pParam->B3SOIPDcth * ag0; dxpart = 0.6; sxpart = 0.4; /* Lump the overlap capacitance */ qgd = qgdo; qgs = qgso; qge = pParam->B3SOIPDcgeo * vge; qgate += qgd + qgs + qge; qsrc = qdrn - qgs + here->B3SOIPDqse; qsub -= qge + here->B3SOIPDqse + here->B3SOIPDqde; qdrn = -(qgate + qbody + qsrc + qsub); } here->B3SOIPDcgdo = cgdo; here->B3SOIPDcgso = cgso; if (ByPass) goto line860; *(ckt->CKTstate0 + here->B3SOIPDqe) = qsub; *(ckt->CKTstate0 + here->B3SOIPDqg) = qgate; *(ckt->CKTstate0 + here->B3SOIPDqd) = qdrn; *(ckt->CKTstate0 + here->B3SOIPDqb) = qbody; if ((model->B3SOIPDshMod == 1) && (here->B3SOIPDrth0!=0.0)) *(ckt->CKTstate0 + here->B3SOIPDqth) = pParam->B3SOIPDcth * delTemp; /* store small signal parameters */ if (ckt->CKTmode & MODEINITSMSIG) { goto line1000; } if (!ChargeComputationNeeded) goto line850; if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->B3SOIPDqb) = *(ckt->CKTstate0 + here->B3SOIPDqb); *(ckt->CKTstate1 + here->B3SOIPDqg) = *(ckt->CKTstate0 + here->B3SOIPDqg); *(ckt->CKTstate1 + here->B3SOIPDqd) = *(ckt->CKTstate0 + here->B3SOIPDqd); *(ckt->CKTstate1 + here->B3SOIPDqe) = *(ckt->CKTstate0 + here->B3SOIPDqe); *(ckt->CKTstate1 + here->B3SOIPDqth) = *(ckt->CKTstate0 + here->B3SOIPDqth); } error = NIintegrate(ckt, &geq, &ceq,0.0,here->B3SOIPDqb); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->B3SOIPDqg); if (error) return(error); error = NIintegrate(ckt,&geq, &ceq, 0.0, here->B3SOIPDqd); if (error) return(error); error = NIintegrate(ckt,&geq, &ceq, 0.0, here->B3SOIPDqe); if (error) return(error); if ((model->B3SOIPDshMod == 1) && (here->B3SOIPDrth0!=0.0)) { error = NIintegrate(ckt, &geq, &ceq, 0.0, here->B3SOIPDqth); if (error) return (error); } goto line860; line850: /* initialize to zero charge conductance and current */ ceqqe = ceqqg = ceqqb = ceqqd = ceqqth= 0.0; gcdgb = gcddb = gcdsb = gcdeb = gcdT = 0.0; gcsgb = gcsdb = gcssb = gcseb = gcsT = 0.0; gcggb = gcgdb = gcgsb = gcgeb = gcgT = 0.0; gcbgb = gcbdb = gcbsb = gcbeb = gcbT = 0.0; gcegb = gcedb = gceeb = gcesb = gceT = 0.0; gcTt = 0.0; sxpart = (1.0 - (dxpart = (here->B3SOIPDmode > 0) ? 0.4 : 0.6)); goto line900; line860: /* evaluate equivalent charge current */ cqgate = *(ckt->CKTstate0 + here->B3SOIPDcqg); cqbody = *(ckt->CKTstate0 + here->B3SOIPDcqb); cqdrn = *(ckt->CKTstate0 + here->B3SOIPDcqd); cqsub = *(ckt->CKTstate0 + here->B3SOIPDcqe); cqtemp = *(ckt->CKTstate0 + here->B3SOIPDcqth); here->B3SOIPDcb += cqbody; here->B3SOIPDcd += cqdrn; ceqqg = cqgate - gcggb * vgb + gcgdb * vbd + gcgsb * vbs - gcgeb * veb - gcgT * delTemp; ceqqb = cqbody - gcbgb * vgb + gcbdb * vbd + gcbsb * vbs - gcbeb * veb - gcbT * delTemp; ceqqd = cqdrn - gcdgb * vgb + gcddb * vbd + gcdsb * vbs - gcdeb * veb - gcdT * delTemp; ceqqe = cqsub - gcegb * vgb + gcedb * vbd + gcesb * vbs - gceeb * veb - gceT * delTemp;; ceqqth = cqtemp - gcTt * delTemp; if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->B3SOIPDcqe) = *(ckt->CKTstate0 + here->B3SOIPDcqe); *(ckt->CKTstate1 + here->B3SOIPDcqb) = *(ckt->CKTstate0 + here->B3SOIPDcqb); *(ckt->CKTstate1 + here->B3SOIPDcqg) = *(ckt->CKTstate0 + here->B3SOIPDcqg); *(ckt->CKTstate1 + here->B3SOIPDcqd) = *(ckt->CKTstate0 + here->B3SOIPDcqd); *(ckt->CKTstate1 + here->B3SOIPDcqth) = *(ckt->CKTstate0 + here->B3SOIPDcqth); } /* * load current vector */ line900: m = here->B3SOIPDm; if (here->B3SOIPDmode >= 0) { Gm = here->B3SOIPDgm; Gmbs = here->B3SOIPDgmbs; GmT = model->B3SOIPDtype * here->B3SOIPDgmT; FwdSum = Gm + Gmbs; RevSum = 0.0; /* v2.2.2 bug fix */ cdreq = model->B3SOIPDtype * (here->B3SOIPDcdrain - here->B3SOIPDgds * vds - Gm * vgs - Gmbs * vbs) - GmT * delTemp; /* ceqbs now is compatible with cdreq, ie. going in is +ve */ /* Equivalent current source from the diode */ ceqbs = here->B3SOIPDcjs; ceqbd = here->B3SOIPDcjd; /* Current going in is +ve */ ceqbody = -here->B3SOIPDcbody; ceqgate = here->B3SOIPDcgate; gigg = here->B3SOIPDgigg; gigb = here->B3SOIPDgigb; gigs = here->B3SOIPDgigs; gigd = here->B3SOIPDgigd; gigT = model->B3SOIPDtype * here->B3SOIPDgigT; ceqth = here->B3SOIPDcth; ceqbodcon = here->B3SOIPDcbodcon; gbbg = -here->B3SOIPDgbgs; gbbdp = -here->B3SOIPDgbds; gbbb = -here->B3SOIPDgbbs; gbbp = -here->B3SOIPDgbps; gbbT = -model->B3SOIPDtype * here->B3SOIPDgbT; gbbsp = - ( gbbg + gbbdp + gbbb + gbbp); gddpg = -here->B3SOIPDgjdg; gddpdp = -here->B3SOIPDgjdd; gddpb = -here->B3SOIPDgjdb; gddpT = -model->B3SOIPDtype * here->B3SOIPDgjdT; gddpsp = - ( gddpg + gddpdp + gddpb); gsspg = -here->B3SOIPDgjsg; gsspdp = -here->B3SOIPDgjsd; gsspb = -here->B3SOIPDgjsb; gsspT = -model->B3SOIPDtype * here->B3SOIPDgjsT; gsspsp = - (gsspg + gsspdp + gsspb ); gppb = -here->B3SOIPDgbpbs; gppp = -here->B3SOIPDgbpps; gppT = -model->B3SOIPDtype * here->B3SOIPDgbpT; gTtg = here->B3SOIPDgtempg; gTtb = here->B3SOIPDgtempb; gTtdp = here->B3SOIPDgtempd; gTtt = here->B3SOIPDgtempT; gTtsp = - (gTtg + gTtb + gTtdp); } else { Gm = -here->B3SOIPDgm; Gmbs = -here->B3SOIPDgmbs; GmT = -model->B3SOIPDtype * here->B3SOIPDgmT; FwdSum = 0.0; RevSum = -(Gm + Gmbs); /* v2.2.2 bug fix */ cdreq = -model->B3SOIPDtype * (here->B3SOIPDcdrain + here->B3SOIPDgds*vds + Gm * vgd + Gmbs * vbd) + GmT * delTemp; ceqbs = here->B3SOIPDcjd; ceqbd = here->B3SOIPDcjs; /* Current going in is +ve */ ceqbody = -here->B3SOIPDcbody; ceqgate = here->B3SOIPDcgate; gigg = here->B3SOIPDgigg; gigb = here->B3SOIPDgigb; gigs = here->B3SOIPDgigd; gigd = here->B3SOIPDgigs; gigT = model->B3SOIPDtype * here->B3SOIPDgigT; ceqth = here->B3SOIPDcth; ceqbodcon = here->B3SOIPDcbodcon; gbbg = -here->B3SOIPDgbgs; gbbb = -here->B3SOIPDgbbs; gbbp = -here->B3SOIPDgbps; gbbsp = -here->B3SOIPDgbds; gbbT = -model->B3SOIPDtype * here->B3SOIPDgbT; gbbdp = - ( gbbg + gbbsp + gbbb + gbbp); gddpg = -here->B3SOIPDgjsg; gddpsp = -here->B3SOIPDgjsd; gddpb = -here->B3SOIPDgjsb; gddpT = -model->B3SOIPDtype * here->B3SOIPDgjsT; gddpdp = - (gddpg + gddpsp + gddpb ); gsspg = -here->B3SOIPDgjdg; gsspsp = -here->B3SOIPDgjdd; gsspb = -here->B3SOIPDgjdb; gsspT = -model->B3SOIPDtype * here->B3SOIPDgjdT; gsspdp = - ( gsspg + gsspsp + gsspb ); gppb = -here->B3SOIPDgbpbs; gppp = -here->B3SOIPDgbpps; gppT = -model->B3SOIPDtype * here->B3SOIPDgbpT; gTtg = here->B3SOIPDgtempg; gTtb = here->B3SOIPDgtempb; gTtsp = here->B3SOIPDgtempd; gTtt = here->B3SOIPDgtempT; gTtdp = - (gTtg + gTtb + gTtsp); } if (model->B3SOIPDtype > 0) { ceqqg = ceqqg; ceqqb = ceqqb; ceqqe = ceqqe; ceqqd = ceqqd; } else { ceqbodcon = -ceqbodcon; ceqbody = -ceqbody; ceqgate = -ceqgate; ceqbs = -ceqbs; ceqbd = -ceqbd; ceqqg = -ceqqg; ceqqb = -ceqqb; ceqqd = -ceqqd; ceqqe = -ceqqe; } (*(ckt->CKTrhs + here->B3SOIPDbNode) -= m * (ceqbody + ceqqb)); (*(ckt->CKTrhs + here->B3SOIPDgNode) -= m * (ceqgate + ceqqg)); (*(ckt->CKTrhs + here->B3SOIPDdNodePrime) += m * (ceqbd - cdreq - ceqqd)); (*(ckt->CKTrhs + here->B3SOIPDsNodePrime) += m * (cdreq + ceqbs + ceqqg + ceqqb + ceqqd + ceqqe)); (*(ckt->CKTrhs + here->B3SOIPDeNode) -= m * ceqqe); if (here->B3SOIPDbodyMod == 1) { (*(ckt->CKTrhs + here->B3SOIPDpNode) += m * ceqbodcon); } if (selfheat) { (*(ckt->CKTrhs + here->B3SOIPDtempNode) -= m * (ceqth + ceqqth)); } if (here->B3SOIPDdebugMod != 0) { *(ckt->CKTrhs + here->B3SOIPDvbsNode) = here->B3SOIPDvbseff; *(ckt->CKTrhs + here->B3SOIPDidsNode) = FLOG(here->B3SOIPDids); *(ckt->CKTrhs + here->B3SOIPDicNode) = FLOG(here->B3SOIPDic); *(ckt->CKTrhs + here->B3SOIPDibsNode) = FLOG(here->B3SOIPDibs); *(ckt->CKTrhs + here->B3SOIPDibdNode) = FLOG(here->B3SOIPDibd); *(ckt->CKTrhs + here->B3SOIPDiiiNode) = FLOG(here->B3SOIPDiii); *(ckt->CKTrhs + here->B3SOIPDigNode) = here->B3SOIPDig; *(ckt->CKTrhs + here->B3SOIPDgiggNode) = here->B3SOIPDgigg; *(ckt->CKTrhs + here->B3SOIPDgigdNode) = here->B3SOIPDgigd; *(ckt->CKTrhs + here->B3SOIPDgigbNode) = here->B3SOIPDgigb; *(ckt->CKTrhs + here->B3SOIPDigidlNode) = here->B3SOIPDigidl; *(ckt->CKTrhs + here->B3SOIPDitunNode) = here->B3SOIPDitun; *(ckt->CKTrhs + here->B3SOIPDibpNode) = here->B3SOIPDibp; *(ckt->CKTrhs + here->B3SOIPDcbbNode) = here->B3SOIPDcbb; *(ckt->CKTrhs + here->B3SOIPDcbdNode) = here->B3SOIPDcbd; *(ckt->CKTrhs + here->B3SOIPDcbgNode) = here->B3SOIPDcbg; *(ckt->CKTrhs + here->B3SOIPDqbfNode) = here->B3SOIPDqbf; *(ckt->CKTrhs + here->B3SOIPDqjsNode) = here->B3SOIPDqjs; *(ckt->CKTrhs + here->B3SOIPDqjdNode) = here->B3SOIPDqjd; } /* * load y matrix */ Gmin = ckt->CKTgmin * 1e-6; *(here->B3SOIPDEdpPtr) += m * gcedb; *(here->B3SOIPDEspPtr) += m * gcesb; *(here->B3SOIPDDPePtr) += m * gcdeb; *(here->B3SOIPDSPePtr) += m * gcseb; *(here->B3SOIPDEgPtr) += m * gcegb; *(here->B3SOIPDGePtr) += m * gcgeb; (*(here->B3SOIPDEbPtr) -= m * (gcegb + gcedb + gcesb + gceeb)); (*(here->B3SOIPDGbPtr) -= m * (-gigb + gcggb + gcgdb + gcgsb + gcgeb)); (*(here->B3SOIPDDPbPtr) -= m * (-gddpb - Gmbs + gcdgb + gcddb + gcdeb + gcdsb)); (*(here->B3SOIPDSPbPtr) -= m * (-gsspb + Gmbs + gcsgb + gcsdb + gcseb + gcssb + Gmin)); (*(here->B3SOIPDBePtr) += m * gcbeb); (*(here->B3SOIPDBgPtr) += m * (-gigg + gcbgb + gbbg)); (*(here->B3SOIPDBdpPtr) += (-gigd + gcbdb + gbbdp)); (*(here->B3SOIPDBspPtr) += m * (gcbsb + gbbsp - Gmin - gigs)); (*(here->B3SOIPDBbPtr) += m * (-gigb + gbbb - gcbgb - gcbdb - gcbsb - gcbeb + Gmin)); (*(here->B3SOIPDEePtr) += m * gceeb); (*(here->B3SOIPDGgPtr) += m * (gigg + gcggb + ckt->CKTgmin)); (*(here->B3SOIPDGdpPtr) += m * (gigd + gcgdb - ckt->CKTgmin)); (*(here->B3SOIPDGspPtr) += m * (gcgsb + gigs)); (*(here->B3SOIPDDPgPtr) += m * ((Gm + gcdgb) + gddpg - ckt->CKTgmin)); (*(here->B3SOIPDDPdpPtr) += m * ((here->B3SOIPDdrainConductance + here->B3SOIPDgds + gddpdp + RevSum + gcddb) + ckt->CKTgmin)); (*(here->B3SOIPDDPspPtr) -= m * (-gddpsp + here->B3SOIPDgds + FwdSum - gcdsb)); (*(here->B3SOIPDDPdPtr) -= m * here->B3SOIPDdrainConductance); (*(here->B3SOIPDSPgPtr) += m * (gcsgb - Gm + gsspg)); (*(here->B3SOIPDSPdpPtr) -= m * (here->B3SOIPDgds - gsspdp + RevSum - gcsdb)); (*(here->B3SOIPDSPspPtr) += m * (here->B3SOIPDsourceConductance + here->B3SOIPDgds + gsspsp + FwdSum + gcssb + Gmin)); (*(here->B3SOIPDSPsPtr) -= m * here->B3SOIPDsourceConductance); (*(here->B3SOIPDDdPtr) += m * here->B3SOIPDdrainConductance); (*(here->B3SOIPDDdpPtr) -= m * here->B3SOIPDdrainConductance); (*(here->B3SOIPDSsPtr) += m * here->B3SOIPDsourceConductance); (*(here->B3SOIPDSspPtr) -= m * here->B3SOIPDsourceConductance); if (here->B3SOIPDbodyMod == 1) { (*(here->B3SOIPDBpPtr) -= m * gppp); (*(here->B3SOIPDPbPtr) += m * gppb); (*(here->B3SOIPDPpPtr) += m * gppp); } if (selfheat) { (*(here->B3SOIPDDPtempPtr) += m * (GmT + gddpT + gcdT)); (*(here->B3SOIPDSPtempPtr) += m * (-GmT + gsspT + gcsT)); (*(here->B3SOIPDBtempPtr) += m * (gbbT + gcbT - gigT)); (*(here->B3SOIPDEtempPtr) += m * gceT); (*(here->B3SOIPDGtempPtr) += m * (gcgT + gigT)); (*(here->B3SOIPDTemptempPtr) += m * (gTtt + 1/pParam->B3SOIPDrth + gcTt)); (*(here->B3SOIPDTempgPtr) += m * gTtg); (*(here->B3SOIPDTempbPtr) += m * gTtb); (*(here->B3SOIPDTempdpPtr) += m * gTtdp); (*(here->B3SOIPDTempspPtr) += m * gTtsp); } if (here->B3SOIPDdebugMod != 0) { *(here->B3SOIPDVbsPtr) += m * 1; *(here->B3SOIPDIdsPtr) += m * 1; *(here->B3SOIPDIcPtr) += m * 1; *(here->B3SOIPDIbsPtr) += m * 1; *(here->B3SOIPDIbdPtr) += m * 1; *(here->B3SOIPDIiiPtr) += m * 1; *(here->B3SOIPDIgPtr) += m * 1; *(here->B3SOIPDGiggPtr) += m * 1; *(here->B3SOIPDGigdPtr) += m * 1; *(here->B3SOIPDGigbPtr) += m * 1; *(here->B3SOIPDIgidlPtr) += m * 1; *(here->B3SOIPDItunPtr) += m * 1; *(here->B3SOIPDIbpPtr) += m * 1; *(here->B3SOIPDCbgPtr) += m * 1; *(here->B3SOIPDCbbPtr) += m * 1; *(here->B3SOIPDCbdPtr) += m * 1; *(here->B3SOIPDQbfPtr) += m * 1; *(here->B3SOIPDQjsPtr) += m * 1; *(here->B3SOIPDQjdPtr) += m * 1; } line1000: ; } /* End of Mosfet Instance */ } /* End of Model Instance */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/b3soipditf.h0000644000175000017500000000037713546075722023624 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung File: b3soipditf.h **********/ #ifndef DEV_B3SOIPD #define DEV_B3SOIPD #include "b3soipdext.h" SPICEdev *get_b3soipd_info (void); #endif tmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/b3soipdtrunc.c0000644000175000017500000000240113546075722024156 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soipdtrunc.c 98/5/01 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.2.3 02/3/5 Pin Su * BSIMPD2.2.3 release */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b3soipddef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIPDtrunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { B3SOIPDmodel *model = (B3SOIPDmodel*)inModel; B3SOIPDinstance *here; #ifdef STEPDEBUG double debugtemp; #endif /* STEPDEBUG */ for (; model != NULL; model = B3SOIPDnextModel(model)) { for (here = B3SOIPDinstances(model); here != NULL; here = B3SOIPDnextInstance(here)) { #ifdef STEPDEBUG debugtemp = *timeStep; #endif /* STEPDEBUG */ CKTterr(here->B3SOIPDqb,ckt,timeStep); CKTterr(here->B3SOIPDqg,ckt,timeStep); CKTterr(here->B3SOIPDqd,ckt,timeStep); #ifdef STEPDEBUG if(debugtemp != *timeStep) { printf("device %s reduces step from %g to %g\n", here->B3SOIPDname,debugtemp,*timeStep); } #endif /* STEPDEBUG */ } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/b3soipdext.h0000644000175000017500000000245713546075722023643 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung File: b3soipdext.h Modified by Paolo Nenzi 2002 **********/ extern int B3SOIPDacLoad(GENmodel *,CKTcircuit*); extern int B3SOIPDask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*); extern int B3SOIPDconvTest(GENmodel *,CKTcircuit*); extern int B3SOIPDgetic(GENmodel*,CKTcircuit*); extern int B3SOIPDload(GENmodel*,CKTcircuit*); extern int B3SOIPDmAsk(CKTcircuit*,GENmodel *,int, IFvalue*); extern int B3SOIPDmParam(int,IFvalue*,GENmodel*); extern void B3SOIPDmosCap(CKTcircuit*, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*); extern int B3SOIPDparam(int,IFvalue*,GENinstance*,IFvalue*); extern int B3SOIPDpzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int B3SOIPDsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int B3SOIPDtemp(GENmodel*,CKTcircuit*); extern int B3SOIPDtrunc(GENmodel*,CKTcircuit*,double*); extern int B3SOIPDnoise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int B3SOIPDunsetup(GENmodel*,CKTcircuit*); tmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/b3soipddef.h0000644000175000017500000021262013546075722023574 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung File: b3soipddef.h Modified by Pin Su and Jan Feng 99/2/15 Modified by Pin Su 99/4/30 Modified by Pin Su and Wei Jin 99/9/27 Modified by Pin Su 00/3/1 Modified by Pin Su 01/2/15 Modified by Pin Su and Hui Wan 02/3/5 Modified by Paolo Nenzi 2002 **********/ #ifndef B3SOIPD #define B3SOIPD #define SOICODE /* #define BULKCODE */ #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" typedef struct sB3SOIPDinstance { struct GENinstance gen; #define B3SOIPDmodPtr(inst) ((struct sB3SOIPDmodel *)((inst)->gen.GENmodPtr)) #define B3SOIPDnextInstance(inst) ((struct sB3SOIPDinstance *)((inst)->gen.GENnextInstance)) #define B3SOIPDname gen.GENname #define B3SOIPDstates gen.GENstate const int B3SOIPDdNode; const int B3SOIPDgNode; const int B3SOIPDsNode; const int B3SOIPDeNode; const int B3SOIPDbNodeExt; const int B3SOIPDtempNodeExt; const int B3SOIPDpNodeExt; int B3SOIPDpNode; int B3SOIPDbNode; int B3SOIPDtempNode; int B3SOIPDdNodePrime; int B3SOIPDsNodePrime; int B3SOIPDvbsNode; /* for Debug */ int B3SOIPDidsNode; int B3SOIPDicNode; int B3SOIPDibsNode; int B3SOIPDibdNode; int B3SOIPDiiiNode; int B3SOIPDigNode; int B3SOIPDgiggNode; int B3SOIPDgigdNode; int B3SOIPDgigbNode; int B3SOIPDigidlNode; int B3SOIPDitunNode; int B3SOIPDibpNode; int B3SOIPDcbbNode; int B3SOIPDcbdNode; int B3SOIPDcbgNode; int B3SOIPDqbfNode; int B3SOIPDqjsNode; int B3SOIPDqjdNode; double B3SOIPDphi; double B3SOIPDvtm; double B3SOIPDni; double B3SOIPDueff; double B3SOIPDthetavth; double B3SOIPDvon; double B3SOIPDvdsat; double B3SOIPDcgdo; double B3SOIPDcgso; double B3SOIPDcgeo; double B3SOIPDids; double B3SOIPDic; double B3SOIPDibs; double B3SOIPDibd; double B3SOIPDiii; double B3SOIPDig; double B3SOIPDgigg; double B3SOIPDgigd; double B3SOIPDgigb; double B3SOIPDigidl; double B3SOIPDitun; double B3SOIPDibp; double B3SOIPDabeff; double B3SOIPDvbseff; double B3SOIPDcbg; double B3SOIPDcbb; double B3SOIPDcbd; double B3SOIPDqb; double B3SOIPDqbf; double B3SOIPDqjs; double B3SOIPDqjd; int B3SOIPDfloat; double B3SOIPDl; double B3SOIPDw; double B3SOIPDm; double B3SOIPDdrainArea; double B3SOIPDsourceArea; double B3SOIPDdrainSquares; double B3SOIPDsourceSquares; double B3SOIPDdrainPerimeter; double B3SOIPDsourcePerimeter; double B3SOIPDsourceConductance; double B3SOIPDdrainConductance; double B3SOIPDicVBS; double B3SOIPDicVDS; double B3SOIPDicVGS; double B3SOIPDicVES; double B3SOIPDicVPS; int B3SOIPDbjtoff; int B3SOIPDbodyMod; int B3SOIPDdebugMod; double B3SOIPDrth0; double B3SOIPDcth0; double B3SOIPDbodySquares; double B3SOIPDrbodyext; double B3SOIPDfrbody; /* v2.0 release */ double B3SOIPDnbc; double B3SOIPDnseg; double B3SOIPDpdbcp; double B3SOIPDpsbcp; double B3SOIPDagbcp; double B3SOIPDaebcp; double B3SOIPDvbsusr; int B3SOIPDtnodeout; /* Deleted from pParam and moved to here */ double B3SOIPDcsesw; double B3SOIPDcdesw; double B3SOIPDcsbox; double B3SOIPDcdbox; double B3SOIPDcsmin; double B3SOIPDcdmin; double B3SOIPDst4; double B3SOIPDdt4; int B3SOIPDoff; int B3SOIPDmode; /* OP point */ double B3SOIPDqinv; double B3SOIPDcd; double B3SOIPDcjs; double B3SOIPDcjd; double B3SOIPDcbody; /* v2.2 release */ double B3SOIPDcgate; double B3SOIPDgigs; double B3SOIPDgigT; double B3SOIPDcbodcon; double B3SOIPDcth; double B3SOIPDcsubstrate; double B3SOIPDgm; double B3SOIPDcb; double B3SOIPDcdrain; double B3SOIPDgds; double B3SOIPDgmbs; double B3SOIPDgmT; double B3SOIPDgbbs; double B3SOIPDgbgs; double B3SOIPDgbds; double B3SOIPDgbps; double B3SOIPDgbT; double B3SOIPDgjsd; double B3SOIPDgjsb; double B3SOIPDgjsg; double B3SOIPDgjsT; double B3SOIPDgjdb; double B3SOIPDgjdd; double B3SOIPDgjdg; double B3SOIPDgjdT; double B3SOIPDgbpbs; double B3SOIPDgbpps; double B3SOIPDgbpT; double B3SOIPDgtempb; double B3SOIPDgtempg; double B3SOIPDgtempd; double B3SOIPDgtempT; double B3SOIPDcggb; double B3SOIPDcgdb; double B3SOIPDcgsb; double B3SOIPDcgT; double B3SOIPDcbgb; double B3SOIPDcbdb; double B3SOIPDcbsb; double B3SOIPDcbeb; double B3SOIPDcbT; double B3SOIPDcdgb; double B3SOIPDcddb; double B3SOIPDcdsb; double B3SOIPDcdeb; double B3SOIPDcdT; double B3SOIPDceeb; double B3SOIPDceT; double B3SOIPDqse; double B3SOIPDgcse; double B3SOIPDqde; double B3SOIPDgcde; double B3SOIPDrds; /* v2.2.3 */ double B3SOIPDVgsteff; /* v2.2.3 */ double B3SOIPDVdseff; /* v2.2.3 */ double B3SOIPDAbovVgst2Vtm; /* v2.2.3 */ struct b3soipdSizeDependParam *pParam; unsigned B3SOIPDlGiven :1; unsigned B3SOIPDwGiven :1; unsigned B3SOIPDmGiven :1; unsigned B3SOIPDdrainAreaGiven :1; unsigned B3SOIPDsourceAreaGiven :1; unsigned B3SOIPDdrainSquaresGiven :1; unsigned B3SOIPDsourceSquaresGiven :1; unsigned B3SOIPDdrainPerimeterGiven :1; unsigned B3SOIPDsourcePerimeterGiven :1; unsigned B3SOIPDdNodePrimeSet :1; unsigned B3SOIPDsNodePrimeSet :1; unsigned B3SOIPDicVBSGiven :1; unsigned B3SOIPDicVDSGiven :1; unsigned B3SOIPDicVGSGiven :1; unsigned B3SOIPDicVESGiven :1; unsigned B3SOIPDicVPSGiven :1; unsigned B3SOIPDbjtoffGiven :1; unsigned B3SOIPDdebugModGiven :1; unsigned B3SOIPDrth0Given :1; unsigned B3SOIPDcth0Given :1; unsigned B3SOIPDbodySquaresGiven :1; unsigned B3SOIPDfrbodyGiven: 1; /* v2.0 release */ unsigned B3SOIPDnbcGiven :1; unsigned B3SOIPDnsegGiven :1; unsigned B3SOIPDpdbcpGiven :1; unsigned B3SOIPDpsbcpGiven :1; unsigned B3SOIPDagbcpGiven :1; unsigned B3SOIPDaebcpGiven :1; unsigned B3SOIPDvbsusrGiven :1; unsigned B3SOIPDtnodeoutGiven :1; unsigned B3SOIPDoffGiven :1; double *B3SOIPDGePtr; double *B3SOIPDDPePtr; double *B3SOIPDSPePtr; double *B3SOIPDEePtr; double *B3SOIPDEbPtr; double *B3SOIPDBePtr; double *B3SOIPDEgPtr; double *B3SOIPDEdpPtr; double *B3SOIPDEspPtr; double *B3SOIPDTemptempPtr; double *B3SOIPDTempdpPtr; double *B3SOIPDTempspPtr; double *B3SOIPDTempgPtr; double *B3SOIPDTempbPtr; double *B3SOIPDGtempPtr; double *B3SOIPDDPtempPtr; double *B3SOIPDSPtempPtr; double *B3SOIPDEtempPtr; double *B3SOIPDBtempPtr; double *B3SOIPDPtempPtr; double *B3SOIPDBpPtr; double *B3SOIPDPbPtr; double *B3SOIPDPpPtr; double *B3SOIPDDdPtr; double *B3SOIPDGgPtr; double *B3SOIPDSsPtr; double *B3SOIPDBbPtr; double *B3SOIPDDPdpPtr; double *B3SOIPDSPspPtr; double *B3SOIPDDdpPtr; double *B3SOIPDGbPtr; double *B3SOIPDGdpPtr; double *B3SOIPDGspPtr; double *B3SOIPDSspPtr; double *B3SOIPDBdpPtr; double *B3SOIPDBspPtr; double *B3SOIPDDPspPtr; double *B3SOIPDDPdPtr; double *B3SOIPDBgPtr; double *B3SOIPDDPgPtr; double *B3SOIPDSPgPtr; double *B3SOIPDSPsPtr; double *B3SOIPDDPbPtr; double *B3SOIPDSPbPtr; double *B3SOIPDSPdpPtr; double *B3SOIPDVbsPtr; /* Debug */ double *B3SOIPDIdsPtr; double *B3SOIPDIcPtr; double *B3SOIPDIbsPtr; double *B3SOIPDIbdPtr; double *B3SOIPDIiiPtr; double *B3SOIPDIgPtr; double *B3SOIPDGiggPtr; double *B3SOIPDGigdPtr; double *B3SOIPDGigbPtr; double *B3SOIPDIgidlPtr; double *B3SOIPDItunPtr; double *B3SOIPDIbpPtr; double *B3SOIPDCbbPtr; double *B3SOIPDCbdPtr; double *B3SOIPDCbgPtr; double *B3SOIPDqbPtr; double *B3SOIPDQbfPtr; double *B3SOIPDQjsPtr; double *B3SOIPDQjdPtr; #define B3SOIPDvbd B3SOIPDstates+ 0 #define B3SOIPDvbs B3SOIPDstates+ 1 #define B3SOIPDvgs B3SOIPDstates+ 2 #define B3SOIPDvds B3SOIPDstates+ 3 #define B3SOIPDves B3SOIPDstates+ 4 #define B3SOIPDvps B3SOIPDstates+ 5 #define B3SOIPDvg B3SOIPDstates+ 6 #define B3SOIPDvd B3SOIPDstates+ 7 #define B3SOIPDvs B3SOIPDstates+ 8 #define B3SOIPDvp B3SOIPDstates+ 9 #define B3SOIPDve B3SOIPDstates+ 10 #define B3SOIPDdeltemp B3SOIPDstates+ 11 #define B3SOIPDqb B3SOIPDstates+ 12 #define B3SOIPDcqb B3SOIPDstates+ 13 #define B3SOIPDqg B3SOIPDstates+ 14 #define B3SOIPDcqg B3SOIPDstates+ 15 #define B3SOIPDqd B3SOIPDstates+ 16 #define B3SOIPDcqd B3SOIPDstates+ 17 #define B3SOIPDqe B3SOIPDstates+ 18 #define B3SOIPDcqe B3SOIPDstates+ 19 #define B3SOIPDqbs B3SOIPDstates+ 20 #define B3SOIPDqbd B3SOIPDstates+ 21 #define B3SOIPDqbe B3SOIPDstates+ 22 #define B3SOIPDqth B3SOIPDstates+ 23 #define B3SOIPDcqth B3SOIPDstates+ 24 #define B3SOIPDnumStates 25 /* indices to the array of B3SOIPD NOISE SOURCES */ #define B3SOIPDRDNOIZ 0 #define B3SOIPDRSNOIZ 1 #define B3SOIPDIDNOIZ 2 #define B3SOIPDFLNOIZ 3 #define B3SOIPDFBNOIZ 4 #define B3SOIPDTOTNOIZ 5 #define B3SOIPDNSRCS 6 /* the number of MOSFET(3) noise sources */ #ifndef NONOISE double B3SOIPDnVar[NSTATVARS][B3SOIPDNSRCS]; #else /* NONOISE */ double **B3SOIPDnVar; #endif /* NONOISE */ } B3SOIPDinstance ; struct b3soipdSizeDependParam { double Width; double Length; double Rth0; double Cth0; double B3SOIPDcdsc; double B3SOIPDcdscb; double B3SOIPDcdscd; double B3SOIPDcit; double B3SOIPDnfactor; double B3SOIPDvsat; double B3SOIPDat; double B3SOIPDa0; double B3SOIPDags; double B3SOIPDa1; double B3SOIPDa2; double B3SOIPDketa; double B3SOIPDnpeak; double B3SOIPDnsub; double B3SOIPDngate; double B3SOIPDgamma1; double B3SOIPDgamma2; double B3SOIPDvbx; double B3SOIPDvbi; double B3SOIPDvbm; double B3SOIPDvbsc; double B3SOIPDxt; double B3SOIPDphi; double B3SOIPDlitl; double B3SOIPDk1; double B3SOIPDkt1; double B3SOIPDkt1l; double B3SOIPDkt2; double B3SOIPDk2; double B3SOIPDk3; double B3SOIPDk3b; double B3SOIPDw0; double B3SOIPDnlx; double B3SOIPDdvt0; double B3SOIPDdvt1; double B3SOIPDdvt2; double B3SOIPDdvt0w; double B3SOIPDdvt1w; double B3SOIPDdvt2w; double B3SOIPDdrout; double B3SOIPDdsub; double B3SOIPDvth0; double B3SOIPDua; double B3SOIPDua1; double B3SOIPDub; double B3SOIPDub1; double B3SOIPDuc; double B3SOIPDuc1; double B3SOIPDu0; double B3SOIPDute; double B3SOIPDvoff; double B3SOIPDvfb; double B3SOIPDuatemp; double B3SOIPDubtemp; double B3SOIPDuctemp; double B3SOIPDrbody; double B3SOIPDrth; double B3SOIPDcth; double B3SOIPDrds0denom; double B3SOIPDvfbb; double B3SOIPDjbjt; double B3SOIPDjdif; double B3SOIPDjrec; double B3SOIPDjtun; double B3SOIPDsdt1; double B3SOIPDst2; double B3SOIPDst3; double B3SOIPDdt2; double B3SOIPDdt3; double B3SOIPDdelta; double B3SOIPDrdsw; double B3SOIPDrds0; double B3SOIPDprwg; double B3SOIPDprwb; double B3SOIPDprt; double B3SOIPDeta0; double B3SOIPDetab; double B3SOIPDpclm; double B3SOIPDpdibl1; double B3SOIPDpdibl2; double B3SOIPDpdiblb; double B3SOIPDpvag; double B3SOIPDwr; double B3SOIPDdwg; double B3SOIPDdwb; double B3SOIPDb0; double B3SOIPDb1; double B3SOIPDalpha0; double B3SOIPDbeta0; /* CV model */ double B3SOIPDcgsl; double B3SOIPDcgdl; double B3SOIPDckappa; double B3SOIPDcf; double B3SOIPDclc; double B3SOIPDcle; /* Added for binning - START0 */ double B3SOIPDkb1; double B3SOIPDk1w1; double B3SOIPDk1w2; double B3SOIPDketas; double B3SOIPDfbjtii; double B3SOIPDbeta1; double B3SOIPDbeta2; double B3SOIPDvdsatii0; double B3SOIPDlii; double B3SOIPDesatii; double B3SOIPDsii0; double B3SOIPDsii1; double B3SOIPDsii2; double B3SOIPDsiid; double B3SOIPDagidl; double B3SOIPDbgidl; double B3SOIPDngidl; double B3SOIPDntun; double B3SOIPDndiode; double B3SOIPDnrecf0; double B3SOIPDnrecr0; double B3SOIPDisbjt; double B3SOIPDisdif; double B3SOIPDisrec; double B3SOIPDistun; double B3SOIPDvrec0; double B3SOIPDvtun0; double B3SOIPDnbjt; double B3SOIPDlbjt0; double B3SOIPDvabjt; double B3SOIPDaely; double B3SOIPDvsdfb; double B3SOIPDvsdth; double B3SOIPDdelvt; /* Added by binning - END0 */ /* Pre-calculated constants */ double B3SOIPDdw; double B3SOIPDdl; double B3SOIPDleff; double B3SOIPDweff; double B3SOIPDdwc; double B3SOIPDdlc; double B3SOIPDleffCV; double B3SOIPDweffCV; double B3SOIPDabulkCVfactor; double B3SOIPDcgso; double B3SOIPDcgdo; double B3SOIPDcgeo; double B3SOIPDu0temp; double B3SOIPDvsattemp; double B3SOIPDsqrtPhi; double B3SOIPDphis3; double B3SOIPDXdep0; double B3SOIPDsqrtXdep0; double B3SOIPDtheta0vb0; double B3SOIPDthetaRout; /* v2.2 release */ double B3SOIPDoxideRatio; /* v2.0 release */ double B3SOIPDk1eff; double B3SOIPDwdios; double B3SOIPDwdiod; double B3SOIPDwdiodCV; double B3SOIPDwdiosCV; double B3SOIPDarfabjt; double B3SOIPDlratio; double B3SOIPDlratiodif; double B3SOIPDvearly; double B3SOIPDahli; double B3SOIPDahli0; double B3SOIPDvfbzb; double B3SOIPDldeb; double B3SOIPDacde; double B3SOIPDmoin; double B3SOIPDleffCVb; double B3SOIPDleffCVbg; double B3SOIPDcof1; double B3SOIPDcof2; double B3SOIPDcof3; double B3SOIPDcof4; double B3SOIPDcdep0; struct b3soipdSizeDependParam *pNext; }; typedef struct sB3SOIPDmodel { struct GENmodel gen; #define B3SOIPDmodType gen.GENmodType #define B3SOIPDnextModel(inst) ((struct sB3SOIPDmodel *)((inst)->gen.GENnextModel)) #define B3SOIPDinstances(inst) ((B3SOIPDinstance *)((inst)->gen.GENinstances)) #define B3SOIPDmodName gen.GENmodName int B3SOIPDtype; int B3SOIPDmobMod; int B3SOIPDcapMod; int B3SOIPDnoiMod; int B3SOIPDshMod; int B3SOIPDbinUnit; int B3SOIPDparamChk; double B3SOIPDversion; double B3SOIPDtox; double B3SOIPDdtoxcv; /* v2.2.3 */ double B3SOIPDcdsc; double B3SOIPDcdscb; double B3SOIPDcdscd; double B3SOIPDcit; double B3SOIPDnfactor; double B3SOIPDvsat; double B3SOIPDat; double B3SOIPDa0; double B3SOIPDags; double B3SOIPDa1; double B3SOIPDa2; double B3SOIPDketa; double B3SOIPDnsub; double B3SOIPDnpeak; double B3SOIPDngate; double B3SOIPDgamma1; double B3SOIPDgamma2; double B3SOIPDvbx; double B3SOIPDvbm; double B3SOIPDxt; double B3SOIPDk1; double B3SOIPDkt1; double B3SOIPDkt1l; double B3SOIPDkt2; double B3SOIPDk2; double B3SOIPDk3; double B3SOIPDk3b; double B3SOIPDw0; double B3SOIPDnlx; double B3SOIPDdvt0; double B3SOIPDdvt1; double B3SOIPDdvt2; double B3SOIPDdvt0w; double B3SOIPDdvt1w; double B3SOIPDdvt2w; double B3SOIPDdrout; double B3SOIPDdsub; double B3SOIPDvth0; double B3SOIPDua; double B3SOIPDua1; double B3SOIPDub; double B3SOIPDub1; double B3SOIPDuc; double B3SOIPDuc1; double B3SOIPDu0; double B3SOIPDute; double B3SOIPDvoff; double B3SOIPDdelta; double B3SOIPDrdsw; double B3SOIPDprwg; double B3SOIPDprwb; double B3SOIPDprt; double B3SOIPDeta0; double B3SOIPDetab; double B3SOIPDpclm; double B3SOIPDpdibl1; double B3SOIPDpdibl2; double B3SOIPDpdiblb; double B3SOIPDpvag; double B3SOIPDwr; double B3SOIPDdwg; double B3SOIPDdwb; double B3SOIPDb0; double B3SOIPDb1; double B3SOIPDalpha0; double B3SOIPDtbox; double B3SOIPDtsi; double B3SOIPDxj; double B3SOIPDkb1; double B3SOIPDrth0; double B3SOIPDcth0; double B3SOIPDngidl; double B3SOIPDagidl; double B3SOIPDbgidl; double B3SOIPDndiode; double B3SOIPDistun; double B3SOIPDxbjt; double B3SOIPDxdif; double B3SOIPDxrec; double B3SOIPDxtun; /* v2.2 release */ double B3SOIPDwth0; double B3SOIPDrhalo; double B3SOIPDntox; double B3SOIPDtoxref; double B3SOIPDebg; double B3SOIPDvevb; double B3SOIPDalphaGB1; double B3SOIPDbetaGB1; double B3SOIPDvgb1; double B3SOIPDvecb; double B3SOIPDalphaGB2; double B3SOIPDbetaGB2; double B3SOIPDvgb2; double B3SOIPDtoxqm; double B3SOIPDvoxh; double B3SOIPDdeltavox; int B3SOIPDigMod; /* v2.0 release */ double B3SOIPDk1w1; double B3SOIPDk1w2; double B3SOIPDketas; double B3SOIPDdwbc; double B3SOIPDbeta0; double B3SOIPDbeta1; double B3SOIPDbeta2; double B3SOIPDvdsatii0; double B3SOIPDtii; double B3SOIPDlii; double B3SOIPDsii0; double B3SOIPDsii1; double B3SOIPDsii2; double B3SOIPDsiid; double B3SOIPDfbjtii; double B3SOIPDesatii; double B3SOIPDntun; double B3SOIPDnrecf0; double B3SOIPDnrecr0; double B3SOIPDisbjt; double B3SOIPDisdif; double B3SOIPDisrec; double B3SOIPDln; double B3SOIPDvrec0; double B3SOIPDvtun0; double B3SOIPDnbjt; double B3SOIPDlbjt0; double B3SOIPDldif0; double B3SOIPDvabjt; double B3SOIPDaely; double B3SOIPDahli; double B3SOIPDrbody; double B3SOIPDrbsh; double B3SOIPDtt; double B3SOIPDndif; double B3SOIPDvsdfb; double B3SOIPDvsdth; double B3SOIPDcsdmin; double B3SOIPDasd; double B3SOIPDntrecf; double B3SOIPDntrecr; double B3SOIPDdlcb; double B3SOIPDfbody; double B3SOIPDtcjswg; double B3SOIPDtpbswg; double B3SOIPDacde; double B3SOIPDmoin; double B3SOIPDdelvt; double B3SOIPDdlbg; /* CV model */ double B3SOIPDcgsl; double B3SOIPDcgdl; double B3SOIPDckappa; double B3SOIPDcf; double B3SOIPDclc; double B3SOIPDcle; double B3SOIPDdwc; double B3SOIPDdlc; double B3SOIPDtnom; double B3SOIPDcgso; double B3SOIPDcgdo; double B3SOIPDcgeo; double B3SOIPDxpart; double B3SOIPDcFringOut; double B3SOIPDcFringMax; double B3SOIPDsheetResistance; double B3SOIPDbodyJctGateSideGradingCoeff; double B3SOIPDGatesidewallJctPotential; double B3SOIPDunitLengthGateSidewallJctCap; double B3SOIPDcsdesw; double B3SOIPDLint; double B3SOIPDLl; double B3SOIPDLlc; /* v2.2.3 */ double B3SOIPDLln; double B3SOIPDLw; double B3SOIPDLwc; /* v2.2.3 */ double B3SOIPDLwn; double B3SOIPDLwl; double B3SOIPDLwlc; /* v2.2.3 */ double B3SOIPDLmin; double B3SOIPDLmax; double B3SOIPDWint; double B3SOIPDWl; double B3SOIPDWlc; /* v2.2.3 */ double B3SOIPDWln; double B3SOIPDWw; double B3SOIPDWwc; /* v2.2.3 */ double B3SOIPDWwn; double B3SOIPDWwl; double B3SOIPDWwlc; /* v2.2.3 */ double B3SOIPDWmin; double B3SOIPDWmax; /* Added for binning - START1 */ /* Length Dependence */ double B3SOIPDlnpeak; double B3SOIPDlnsub; double B3SOIPDlngate; double B3SOIPDlvth0; double B3SOIPDlk1; double B3SOIPDlk1w1; double B3SOIPDlk1w2; double B3SOIPDlk2; double B3SOIPDlk3; double B3SOIPDlk3b; double B3SOIPDlkb1; double B3SOIPDlw0; double B3SOIPDlnlx; double B3SOIPDldvt0; double B3SOIPDldvt1; double B3SOIPDldvt2; double B3SOIPDldvt0w; double B3SOIPDldvt1w; double B3SOIPDldvt2w; double B3SOIPDlu0; double B3SOIPDlua; double B3SOIPDlub; double B3SOIPDluc; double B3SOIPDlvsat; double B3SOIPDla0; double B3SOIPDlags; double B3SOIPDlb0; double B3SOIPDlb1; double B3SOIPDlketa; double B3SOIPDlketas; double B3SOIPDla1; double B3SOIPDla2; double B3SOIPDlrdsw; double B3SOIPDlprwb; double B3SOIPDlprwg; double B3SOIPDlwr; double B3SOIPDlnfactor; double B3SOIPDldwg; double B3SOIPDldwb; double B3SOIPDlvoff; double B3SOIPDleta0; double B3SOIPDletab; double B3SOIPDldsub; double B3SOIPDlcit; double B3SOIPDlcdsc; double B3SOIPDlcdscb; double B3SOIPDlcdscd; double B3SOIPDlpclm; double B3SOIPDlpdibl1; double B3SOIPDlpdibl2; double B3SOIPDlpdiblb; double B3SOIPDldrout; double B3SOIPDlpvag; double B3SOIPDldelta; double B3SOIPDlalpha0; double B3SOIPDlfbjtii; double B3SOIPDlbeta0; double B3SOIPDlbeta1; double B3SOIPDlbeta2; double B3SOIPDlvdsatii0; double B3SOIPDllii; double B3SOIPDlesatii; double B3SOIPDlsii0; double B3SOIPDlsii1; double B3SOIPDlsii2; double B3SOIPDlsiid; double B3SOIPDlagidl; double B3SOIPDlbgidl; double B3SOIPDlngidl; double B3SOIPDlntun; double B3SOIPDlndiode; double B3SOIPDlnrecf0; double B3SOIPDlnrecr0; double B3SOIPDlisbjt; double B3SOIPDlisdif; double B3SOIPDlisrec; double B3SOIPDlistun; double B3SOIPDlvrec0; double B3SOIPDlvtun0; double B3SOIPDlnbjt; double B3SOIPDllbjt0; double B3SOIPDlvabjt; double B3SOIPDlaely; double B3SOIPDlahli; /* CV model */ double B3SOIPDlvsdfb; double B3SOIPDlvsdth; double B3SOIPDldelvt; double B3SOIPDlacde; double B3SOIPDlmoin; /* Width Dependence */ double B3SOIPDwnpeak; double B3SOIPDwnsub; double B3SOIPDwngate; double B3SOIPDwvth0; double B3SOIPDwk1; double B3SOIPDwk1w1; double B3SOIPDwk1w2; double B3SOIPDwk2; double B3SOIPDwk3; double B3SOIPDwk3b; double B3SOIPDwkb1; double B3SOIPDww0; double B3SOIPDwnlx; double B3SOIPDwdvt0; double B3SOIPDwdvt1; double B3SOIPDwdvt2; double B3SOIPDwdvt0w; double B3SOIPDwdvt1w; double B3SOIPDwdvt2w; double B3SOIPDwu0; double B3SOIPDwua; double B3SOIPDwub; double B3SOIPDwuc; double B3SOIPDwvsat; double B3SOIPDwa0; double B3SOIPDwags; double B3SOIPDwb0; double B3SOIPDwb1; double B3SOIPDwketa; double B3SOIPDwketas; double B3SOIPDwa1; double B3SOIPDwa2; double B3SOIPDwrdsw; double B3SOIPDwprwb; double B3SOIPDwprwg; double B3SOIPDwwr; double B3SOIPDwnfactor; double B3SOIPDwdwg; double B3SOIPDwdwb; double B3SOIPDwvoff; double B3SOIPDweta0; double B3SOIPDwetab; double B3SOIPDwdsub; double B3SOIPDwcit; double B3SOIPDwcdsc; double B3SOIPDwcdscb; double B3SOIPDwcdscd; double B3SOIPDwpclm; double B3SOIPDwpdibl1; double B3SOIPDwpdibl2; double B3SOIPDwpdiblb; double B3SOIPDwdrout; double B3SOIPDwpvag; double B3SOIPDwdelta; double B3SOIPDwalpha0; double B3SOIPDwfbjtii; double B3SOIPDwbeta0; double B3SOIPDwbeta1; double B3SOIPDwbeta2; double B3SOIPDwvdsatii0; double B3SOIPDwlii; double B3SOIPDwesatii; double B3SOIPDwsii0; double B3SOIPDwsii1; double B3SOIPDwsii2; double B3SOIPDwsiid; double B3SOIPDwagidl; double B3SOIPDwbgidl; double B3SOIPDwngidl; double B3SOIPDwntun; double B3SOIPDwndiode; double B3SOIPDwnrecf0; double B3SOIPDwnrecr0; double B3SOIPDwisbjt; double B3SOIPDwisdif; double B3SOIPDwisrec; double B3SOIPDwistun; double B3SOIPDwvrec0; double B3SOIPDwvtun0; double B3SOIPDwnbjt; double B3SOIPDwlbjt0; double B3SOIPDwvabjt; double B3SOIPDwaely; double B3SOIPDwahli; /* CV model */ double B3SOIPDwvsdfb; double B3SOIPDwvsdth; double B3SOIPDwdelvt; double B3SOIPDwacde; double B3SOIPDwmoin; /* Cross-term Dependence */ double B3SOIPDpnpeak; double B3SOIPDpnsub; double B3SOIPDpngate; double B3SOIPDpvth0; double B3SOIPDpk1; double B3SOIPDpk1w1; double B3SOIPDpk1w2; double B3SOIPDpk2; double B3SOIPDpk3; double B3SOIPDpk3b; double B3SOIPDpkb1; double B3SOIPDpw0; double B3SOIPDpnlx; double B3SOIPDpdvt0; double B3SOIPDpdvt1; double B3SOIPDpdvt2; double B3SOIPDpdvt0w; double B3SOIPDpdvt1w; double B3SOIPDpdvt2w; double B3SOIPDpu0; double B3SOIPDpua; double B3SOIPDpub; double B3SOIPDpuc; double B3SOIPDpvsat; double B3SOIPDpa0; double B3SOIPDpags; double B3SOIPDpb0; double B3SOIPDpb1; double B3SOIPDpketa; double B3SOIPDpketas; double B3SOIPDpa1; double B3SOIPDpa2; double B3SOIPDprdsw; double B3SOIPDpprwb; double B3SOIPDpprwg; double B3SOIPDpwr; double B3SOIPDpnfactor; double B3SOIPDpdwg; double B3SOIPDpdwb; double B3SOIPDpvoff; double B3SOIPDpeta0; double B3SOIPDpetab; double B3SOIPDpdsub; double B3SOIPDpcit; double B3SOIPDpcdsc; double B3SOIPDpcdscb; double B3SOIPDpcdscd; double B3SOIPDppclm; double B3SOIPDppdibl1; double B3SOIPDppdibl2; double B3SOIPDppdiblb; double B3SOIPDpdrout; double B3SOIPDppvag; double B3SOIPDpdelta; double B3SOIPDpalpha0; double B3SOIPDpfbjtii; double B3SOIPDpbeta0; double B3SOIPDpbeta1; double B3SOIPDpbeta2; double B3SOIPDpvdsatii0; double B3SOIPDplii; double B3SOIPDpesatii; double B3SOIPDpsii0; double B3SOIPDpsii1; double B3SOIPDpsii2; double B3SOIPDpsiid; double B3SOIPDpagidl; double B3SOIPDpbgidl; double B3SOIPDpngidl; double B3SOIPDpntun; double B3SOIPDpndiode; double B3SOIPDpnrecf0; double B3SOIPDpnrecr0; double B3SOIPDpisbjt; double B3SOIPDpisdif; double B3SOIPDpisrec; double B3SOIPDpistun; double B3SOIPDpvrec0; double B3SOIPDpvtun0; double B3SOIPDpnbjt; double B3SOIPDplbjt0; double B3SOIPDpvabjt; double B3SOIPDpaely; double B3SOIPDpahli; /* CV model */ double B3SOIPDpvsdfb; double B3SOIPDpvsdth; double B3SOIPDpdelvt; double B3SOIPDpacde; double B3SOIPDpmoin; /* Added for binning - END1 */ /* Pre-calculated constants */ double B3SOIPDcbox; double B3SOIPDcsi; double B3SOIPDcsieff; double B3SOIPDcoxt; double B3SOIPDnfb; double B3SOIPDadice; double B3SOIPDqsi; double B3SOIPDqsieff; double B3SOIPDeg0; /* MCJ: move to size-dependent param. */ double B3SOIPDvtm; double B3SOIPDcox; double B3SOIPDcof1; double B3SOIPDcof2; double B3SOIPDcof3; double B3SOIPDcof4; double B3SOIPDvcrit; double B3SOIPDfactor1; double B3SOIPDoxideTrapDensityA; double B3SOIPDoxideTrapDensityB; double B3SOIPDoxideTrapDensityC; double B3SOIPDem; double B3SOIPDef; double B3SOIPDaf; double B3SOIPDkf; double B3SOIPDnoif; struct b3soipdSizeDependParam *pSizeDependParamKnot; /* Flags */ unsigned B3SOIPDtboxGiven:1; unsigned B3SOIPDtsiGiven :1; unsigned B3SOIPDxjGiven :1; unsigned B3SOIPDkb1Given :1; unsigned B3SOIPDrth0Given :1; unsigned B3SOIPDcth0Given :1; unsigned B3SOIPDngidlGiven :1; unsigned B3SOIPDagidlGiven :1; unsigned B3SOIPDbgidlGiven :1; unsigned B3SOIPDndiodeGiven :1; unsigned B3SOIPDxbjtGiven :1; unsigned B3SOIPDxdifGiven :1; unsigned B3SOIPDxrecGiven :1; unsigned B3SOIPDxtunGiven :1; unsigned B3SOIPDttGiven :1; unsigned B3SOIPDvsdfbGiven :1; unsigned B3SOIPDvsdthGiven :1; unsigned B3SOIPDasdGiven :1; unsigned B3SOIPDcsdminGiven :1; unsigned B3SOIPDmobModGiven :1; unsigned B3SOIPDbinUnitGiven :1; unsigned B3SOIPDcapModGiven :1; unsigned B3SOIPDparamChkGiven :1; unsigned B3SOIPDnoiModGiven :1; unsigned B3SOIPDshModGiven :1; unsigned B3SOIPDtypeGiven :1; unsigned B3SOIPDtoxGiven :1; unsigned B3SOIPDdtoxcvGiven :1; /* v2.2.3 */ unsigned B3SOIPDversionGiven :1; unsigned B3SOIPDcdscGiven :1; unsigned B3SOIPDcdscbGiven :1; unsigned B3SOIPDcdscdGiven :1; unsigned B3SOIPDcitGiven :1; unsigned B3SOIPDnfactorGiven :1; unsigned B3SOIPDvsatGiven :1; unsigned B3SOIPDatGiven :1; unsigned B3SOIPDa0Given :1; unsigned B3SOIPDagsGiven :1; unsigned B3SOIPDa1Given :1; unsigned B3SOIPDa2Given :1; unsigned B3SOIPDketaGiven :1; unsigned B3SOIPDnsubGiven :1; unsigned B3SOIPDnpeakGiven :1; unsigned B3SOIPDngateGiven :1; unsigned B3SOIPDgamma1Given :1; unsigned B3SOIPDgamma2Given :1; unsigned B3SOIPDvbxGiven :1; unsigned B3SOIPDvbmGiven :1; unsigned B3SOIPDxtGiven :1; unsigned B3SOIPDk1Given :1; unsigned B3SOIPDkt1Given :1; unsigned B3SOIPDkt1lGiven :1; unsigned B3SOIPDkt2Given :1; unsigned B3SOIPDk2Given :1; unsigned B3SOIPDk3Given :1; unsigned B3SOIPDk3bGiven :1; unsigned B3SOIPDw0Given :1; unsigned B3SOIPDnlxGiven :1; unsigned B3SOIPDdvt0Given :1; unsigned B3SOIPDdvt1Given :1; unsigned B3SOIPDdvt2Given :1; unsigned B3SOIPDdvt0wGiven :1; unsigned B3SOIPDdvt1wGiven :1; unsigned B3SOIPDdvt2wGiven :1; unsigned B3SOIPDdroutGiven :1; unsigned B3SOIPDdsubGiven :1; unsigned B3SOIPDvth0Given :1; unsigned B3SOIPDuaGiven :1; unsigned B3SOIPDua1Given :1; unsigned B3SOIPDubGiven :1; unsigned B3SOIPDub1Given :1; unsigned B3SOIPDucGiven :1; unsigned B3SOIPDuc1Given :1; unsigned B3SOIPDu0Given :1; unsigned B3SOIPDuteGiven :1; unsigned B3SOIPDvoffGiven :1; unsigned B3SOIPDrdswGiven :1; unsigned B3SOIPDprwgGiven :1; unsigned B3SOIPDprwbGiven :1; unsigned B3SOIPDprtGiven :1; unsigned B3SOIPDeta0Given :1; unsigned B3SOIPDetabGiven :1; unsigned B3SOIPDpclmGiven :1; unsigned B3SOIPDpdibl1Given :1; unsigned B3SOIPDpdibl2Given :1; unsigned B3SOIPDpdiblbGiven :1; unsigned B3SOIPDpvagGiven :1; unsigned B3SOIPDdeltaGiven :1; unsigned B3SOIPDwrGiven :1; unsigned B3SOIPDdwgGiven :1; unsigned B3SOIPDdwbGiven :1; unsigned B3SOIPDb0Given :1; unsigned B3SOIPDb1Given :1; unsigned B3SOIPDalpha0Given :1; /* v2.2 release */ unsigned B3SOIPDwth0Given :1; unsigned B3SOIPDrhaloGiven :1; unsigned B3SOIPDntoxGiven :1; unsigned B3SOIPDtoxrefGiven :1; unsigned B3SOIPDebgGiven :1; unsigned B3SOIPDvevbGiven :1; unsigned B3SOIPDalphaGB1Given :1; unsigned B3SOIPDbetaGB1Given :1; unsigned B3SOIPDvgb1Given :1; unsigned B3SOIPDvecbGiven :1; unsigned B3SOIPDalphaGB2Given :1; unsigned B3SOIPDbetaGB2Given :1; unsigned B3SOIPDvgb2Given :1; unsigned B3SOIPDtoxqmGiven :1; unsigned B3SOIPDigModGiven :1; unsigned B3SOIPDvoxhGiven :1; unsigned B3SOIPDdeltavoxGiven :1; /* v2.0 release */ unsigned B3SOIPDk1w1Given :1; unsigned B3SOIPDk1w2Given :1; unsigned B3SOIPDketasGiven :1; unsigned B3SOIPDdwbcGiven :1; unsigned B3SOIPDbeta0Given :1; unsigned B3SOIPDbeta1Given :1; unsigned B3SOIPDbeta2Given :1; unsigned B3SOIPDvdsatii0Given :1; unsigned B3SOIPDtiiGiven :1; unsigned B3SOIPDliiGiven :1; unsigned B3SOIPDsii0Given :1; unsigned B3SOIPDsii1Given :1; unsigned B3SOIPDsii2Given :1; unsigned B3SOIPDsiidGiven :1; unsigned B3SOIPDfbjtiiGiven :1; unsigned B3SOIPDesatiiGiven :1; unsigned B3SOIPDntunGiven :1; unsigned B3SOIPDnrecf0Given :1; unsigned B3SOIPDnrecr0Given :1; unsigned B3SOIPDisbjtGiven :1; unsigned B3SOIPDisdifGiven :1; unsigned B3SOIPDisrecGiven :1; unsigned B3SOIPDistunGiven :1; unsigned B3SOIPDlnGiven :1; unsigned B3SOIPDvrec0Given :1; unsigned B3SOIPDvtun0Given :1; unsigned B3SOIPDnbjtGiven :1; unsigned B3SOIPDlbjt0Given :1; unsigned B3SOIPDldif0Given :1; unsigned B3SOIPDvabjtGiven :1; unsigned B3SOIPDaelyGiven :1; unsigned B3SOIPDahliGiven :1; unsigned B3SOIPDrbodyGiven :1; unsigned B3SOIPDrbshGiven :1; unsigned B3SOIPDndifGiven :1; unsigned B3SOIPDntrecfGiven :1; unsigned B3SOIPDntrecrGiven :1; unsigned B3SOIPDdlcbGiven :1; unsigned B3SOIPDfbodyGiven :1; unsigned B3SOIPDtcjswgGiven :1; unsigned B3SOIPDtpbswgGiven :1; unsigned B3SOIPDacdeGiven :1; unsigned B3SOIPDmoinGiven :1; unsigned B3SOIPDdelvtGiven :1; unsigned B3SOIPDdlbgGiven :1; /* CV model */ unsigned B3SOIPDcgslGiven :1; unsigned B3SOIPDcgdlGiven :1; unsigned B3SOIPDckappaGiven :1; unsigned B3SOIPDcfGiven :1; unsigned B3SOIPDclcGiven :1; unsigned B3SOIPDcleGiven :1; unsigned B3SOIPDdwcGiven :1; unsigned B3SOIPDdlcGiven :1; /* Added for binning - START2 */ /* Length Dependence */ unsigned B3SOIPDlnpeakGiven :1; unsigned B3SOIPDlnsubGiven :1; unsigned B3SOIPDlngateGiven :1; unsigned B3SOIPDlvth0Given :1; unsigned B3SOIPDlk1Given :1; unsigned B3SOIPDlk1w1Given :1; unsigned B3SOIPDlk1w2Given :1; unsigned B3SOIPDlk2Given :1; unsigned B3SOIPDlk3Given :1; unsigned B3SOIPDlk3bGiven :1; unsigned B3SOIPDlkb1Given :1; unsigned B3SOIPDlw0Given :1; unsigned B3SOIPDlnlxGiven :1; unsigned B3SOIPDldvt0Given :1; unsigned B3SOIPDldvt1Given :1; unsigned B3SOIPDldvt2Given :1; unsigned B3SOIPDldvt0wGiven :1; unsigned B3SOIPDldvt1wGiven :1; unsigned B3SOIPDldvt2wGiven :1; unsigned B3SOIPDlu0Given :1; unsigned B3SOIPDluaGiven :1; unsigned B3SOIPDlubGiven :1; unsigned B3SOIPDlucGiven :1; unsigned B3SOIPDlvsatGiven :1; unsigned B3SOIPDla0Given :1; unsigned B3SOIPDlagsGiven :1; unsigned B3SOIPDlb0Given :1; unsigned B3SOIPDlb1Given :1; unsigned B3SOIPDlketaGiven :1; unsigned B3SOIPDlketasGiven :1; unsigned B3SOIPDla1Given :1; unsigned B3SOIPDla2Given :1; unsigned B3SOIPDlrdswGiven :1; unsigned B3SOIPDlprwbGiven :1; unsigned B3SOIPDlprwgGiven :1; unsigned B3SOIPDlwrGiven :1; unsigned B3SOIPDlnfactorGiven :1; unsigned B3SOIPDldwgGiven :1; unsigned B3SOIPDldwbGiven :1; unsigned B3SOIPDlvoffGiven :1; unsigned B3SOIPDleta0Given :1; unsigned B3SOIPDletabGiven :1; unsigned B3SOIPDldsubGiven :1; unsigned B3SOIPDlcitGiven :1; unsigned B3SOIPDlcdscGiven :1; unsigned B3SOIPDlcdscbGiven :1; unsigned B3SOIPDlcdscdGiven :1; unsigned B3SOIPDlpclmGiven :1; unsigned B3SOIPDlpdibl1Given :1; unsigned B3SOIPDlpdibl2Given :1; unsigned B3SOIPDlpdiblbGiven :1; unsigned B3SOIPDldroutGiven :1; unsigned B3SOIPDlpvagGiven :1; unsigned B3SOIPDldeltaGiven :1; unsigned B3SOIPDlalpha0Given :1; unsigned B3SOIPDlfbjtiiGiven :1; unsigned B3SOIPDlbeta0Given :1; unsigned B3SOIPDlbeta1Given :1; unsigned B3SOIPDlbeta2Given :1; unsigned B3SOIPDlvdsatii0Given :1; unsigned B3SOIPDlliiGiven :1; unsigned B3SOIPDlesatiiGiven :1; unsigned B3SOIPDlsii0Given :1; unsigned B3SOIPDlsii1Given :1; unsigned B3SOIPDlsii2Given :1; unsigned B3SOIPDlsiidGiven :1; unsigned B3SOIPDlagidlGiven :1; unsigned B3SOIPDlbgidlGiven :1; unsigned B3SOIPDlngidlGiven :1; unsigned B3SOIPDlntunGiven :1; unsigned B3SOIPDlndiodeGiven :1; unsigned B3SOIPDlnrecf0Given :1; unsigned B3SOIPDlnrecr0Given :1; unsigned B3SOIPDlisbjtGiven :1; unsigned B3SOIPDlisdifGiven :1; unsigned B3SOIPDlisrecGiven :1; unsigned B3SOIPDlistunGiven :1; unsigned B3SOIPDlvrec0Given :1; unsigned B3SOIPDlvtun0Given :1; unsigned B3SOIPDlnbjtGiven :1; unsigned B3SOIPDllbjt0Given :1; unsigned B3SOIPDlvabjtGiven :1; unsigned B3SOIPDlaelyGiven :1; unsigned B3SOIPDlahliGiven :1; /* CV model */ unsigned B3SOIPDlvsdfbGiven :1; unsigned B3SOIPDlvsdthGiven :1; unsigned B3SOIPDldelvtGiven :1; unsigned B3SOIPDlacdeGiven :1; unsigned B3SOIPDlmoinGiven :1; /* Width Dependence */ unsigned B3SOIPDwnpeakGiven :1; unsigned B3SOIPDwnsubGiven :1; unsigned B3SOIPDwngateGiven :1; unsigned B3SOIPDwvth0Given :1; unsigned B3SOIPDwk1Given :1; unsigned B3SOIPDwk1w1Given :1; unsigned B3SOIPDwk1w2Given :1; unsigned B3SOIPDwk2Given :1; unsigned B3SOIPDwk3Given :1; unsigned B3SOIPDwk3bGiven :1; unsigned B3SOIPDwkb1Given :1; unsigned B3SOIPDww0Given :1; unsigned B3SOIPDwnlxGiven :1; unsigned B3SOIPDwdvt0Given :1; unsigned B3SOIPDwdvt1Given :1; unsigned B3SOIPDwdvt2Given :1; unsigned B3SOIPDwdvt0wGiven :1; unsigned B3SOIPDwdvt1wGiven :1; unsigned B3SOIPDwdvt2wGiven :1; unsigned B3SOIPDwu0Given :1; unsigned B3SOIPDwuaGiven :1; unsigned B3SOIPDwubGiven :1; unsigned B3SOIPDwucGiven :1; unsigned B3SOIPDwvsatGiven :1; unsigned B3SOIPDwa0Given :1; unsigned B3SOIPDwagsGiven :1; unsigned B3SOIPDwb0Given :1; unsigned B3SOIPDwb1Given :1; unsigned B3SOIPDwketaGiven :1; unsigned B3SOIPDwketasGiven :1; unsigned B3SOIPDwa1Given :1; unsigned B3SOIPDwa2Given :1; unsigned B3SOIPDwrdswGiven :1; unsigned B3SOIPDwprwbGiven :1; unsigned B3SOIPDwprwgGiven :1; unsigned B3SOIPDwwrGiven :1; unsigned B3SOIPDwnfactorGiven :1; unsigned B3SOIPDwdwgGiven :1; unsigned B3SOIPDwdwbGiven :1; unsigned B3SOIPDwvoffGiven :1; unsigned B3SOIPDweta0Given :1; unsigned B3SOIPDwetabGiven :1; unsigned B3SOIPDwdsubGiven :1; unsigned B3SOIPDwcitGiven :1; unsigned B3SOIPDwcdscGiven :1; unsigned B3SOIPDwcdscbGiven :1; unsigned B3SOIPDwcdscdGiven :1; unsigned B3SOIPDwpclmGiven :1; unsigned B3SOIPDwpdibl1Given :1; unsigned B3SOIPDwpdibl2Given :1; unsigned B3SOIPDwpdiblbGiven :1; unsigned B3SOIPDwdroutGiven :1; unsigned B3SOIPDwpvagGiven :1; unsigned B3SOIPDwdeltaGiven :1; unsigned B3SOIPDwalpha0Given :1; unsigned B3SOIPDwfbjtiiGiven :1; unsigned B3SOIPDwbeta0Given :1; unsigned B3SOIPDwbeta1Given :1; unsigned B3SOIPDwbeta2Given :1; unsigned B3SOIPDwvdsatii0Given :1; unsigned B3SOIPDwliiGiven :1; unsigned B3SOIPDwesatiiGiven :1; unsigned B3SOIPDwsii0Given :1; unsigned B3SOIPDwsii1Given :1; unsigned B3SOIPDwsii2Given :1; unsigned B3SOIPDwsiidGiven :1; unsigned B3SOIPDwagidlGiven :1; unsigned B3SOIPDwbgidlGiven :1; unsigned B3SOIPDwngidlGiven :1; unsigned B3SOIPDwntunGiven :1; unsigned B3SOIPDwndiodeGiven :1; unsigned B3SOIPDwnrecf0Given :1; unsigned B3SOIPDwnrecr0Given :1; unsigned B3SOIPDwisbjtGiven :1; unsigned B3SOIPDwisdifGiven :1; unsigned B3SOIPDwisrecGiven :1; unsigned B3SOIPDwistunGiven :1; unsigned B3SOIPDwvrec0Given :1; unsigned B3SOIPDwvtun0Given :1; unsigned B3SOIPDwnbjtGiven :1; unsigned B3SOIPDwlbjt0Given :1; unsigned B3SOIPDwvabjtGiven :1; unsigned B3SOIPDwaelyGiven :1; unsigned B3SOIPDwahliGiven :1; /* CV model */ unsigned B3SOIPDwvsdfbGiven :1; unsigned B3SOIPDwvsdthGiven :1; unsigned B3SOIPDwdelvtGiven :1; unsigned B3SOIPDwacdeGiven :1; unsigned B3SOIPDwmoinGiven :1; /* Cross-term Dependence */ unsigned B3SOIPDpnpeakGiven :1; unsigned B3SOIPDpnsubGiven :1; unsigned B3SOIPDpngateGiven :1; unsigned B3SOIPDpvth0Given :1; unsigned B3SOIPDpk1Given :1; unsigned B3SOIPDpk1w1Given :1; unsigned B3SOIPDpk1w2Given :1; unsigned B3SOIPDpk2Given :1; unsigned B3SOIPDpk3Given :1; unsigned B3SOIPDpk3bGiven :1; unsigned B3SOIPDpkb1Given :1; unsigned B3SOIPDpw0Given :1; unsigned B3SOIPDpnlxGiven :1; unsigned B3SOIPDpdvt0Given :1; unsigned B3SOIPDpdvt1Given :1; unsigned B3SOIPDpdvt2Given :1; unsigned B3SOIPDpdvt0wGiven :1; unsigned B3SOIPDpdvt1wGiven :1; unsigned B3SOIPDpdvt2wGiven :1; unsigned B3SOIPDpu0Given :1; unsigned B3SOIPDpuaGiven :1; unsigned B3SOIPDpubGiven :1; unsigned B3SOIPDpucGiven :1; unsigned B3SOIPDpvsatGiven :1; unsigned B3SOIPDpa0Given :1; unsigned B3SOIPDpagsGiven :1; unsigned B3SOIPDpb0Given :1; unsigned B3SOIPDpb1Given :1; unsigned B3SOIPDpketaGiven :1; unsigned B3SOIPDpketasGiven :1; unsigned B3SOIPDpa1Given :1; unsigned B3SOIPDpa2Given :1; unsigned B3SOIPDprdswGiven :1; unsigned B3SOIPDpprwbGiven :1; unsigned B3SOIPDpprwgGiven :1; unsigned B3SOIPDpwrGiven :1; unsigned B3SOIPDpnfactorGiven :1; unsigned B3SOIPDpdwgGiven :1; unsigned B3SOIPDpdwbGiven :1; unsigned B3SOIPDpvoffGiven :1; unsigned B3SOIPDpeta0Given :1; unsigned B3SOIPDpetabGiven :1; unsigned B3SOIPDpdsubGiven :1; unsigned B3SOIPDpcitGiven :1; unsigned B3SOIPDpcdscGiven :1; unsigned B3SOIPDpcdscbGiven :1; unsigned B3SOIPDpcdscdGiven :1; unsigned B3SOIPDppclmGiven :1; unsigned B3SOIPDppdibl1Given :1; unsigned B3SOIPDppdibl2Given :1; unsigned B3SOIPDppdiblbGiven :1; unsigned B3SOIPDpdroutGiven :1; unsigned B3SOIPDppvagGiven :1; unsigned B3SOIPDpdeltaGiven :1; unsigned B3SOIPDpalpha0Given :1; unsigned B3SOIPDpfbjtiiGiven :1; unsigned B3SOIPDpbeta0Given :1; unsigned B3SOIPDpbeta1Given :1; unsigned B3SOIPDpbeta2Given :1; unsigned B3SOIPDpvdsatii0Given :1; unsigned B3SOIPDpliiGiven :1; unsigned B3SOIPDpesatiiGiven :1; unsigned B3SOIPDpsii0Given :1; unsigned B3SOIPDpsii1Given :1; unsigned B3SOIPDpsii2Given :1; unsigned B3SOIPDpsiidGiven :1; unsigned B3SOIPDpagidlGiven :1; unsigned B3SOIPDpbgidlGiven :1; unsigned B3SOIPDpngidlGiven :1; unsigned B3SOIPDpntunGiven :1; unsigned B3SOIPDpndiodeGiven :1; unsigned B3SOIPDpnrecf0Given :1; unsigned B3SOIPDpnrecr0Given :1; unsigned B3SOIPDpisbjtGiven :1; unsigned B3SOIPDpisdifGiven :1; unsigned B3SOIPDpisrecGiven :1; unsigned B3SOIPDpistunGiven :1; unsigned B3SOIPDpvrec0Given :1; unsigned B3SOIPDpvtun0Given :1; unsigned B3SOIPDpnbjtGiven :1; unsigned B3SOIPDplbjt0Given :1; unsigned B3SOIPDpvabjtGiven :1; unsigned B3SOIPDpaelyGiven :1; unsigned B3SOIPDpahliGiven :1; /* CV model */ unsigned B3SOIPDpvsdfbGiven :1; unsigned B3SOIPDpvsdthGiven :1; unsigned B3SOIPDpdelvtGiven :1; unsigned B3SOIPDpacdeGiven :1; unsigned B3SOIPDpmoinGiven :1; /* Added for binning - END2 */ unsigned B3SOIPDuseFringeGiven :1; unsigned B3SOIPDtnomGiven :1; unsigned B3SOIPDcgsoGiven :1; unsigned B3SOIPDcgdoGiven :1; unsigned B3SOIPDcgeoGiven :1; unsigned B3SOIPDxpartGiven :1; unsigned B3SOIPDsheetResistanceGiven :1; unsigned B3SOIPDGatesidewallJctPotentialGiven :1; unsigned B3SOIPDbodyJctGateSideGradingCoeffGiven :1; unsigned B3SOIPDunitLengthGateSidewallJctCapGiven :1; unsigned B3SOIPDcsdeswGiven :1; unsigned B3SOIPDoxideTrapDensityAGiven :1; unsigned B3SOIPDoxideTrapDensityBGiven :1; unsigned B3SOIPDoxideTrapDensityCGiven :1; unsigned B3SOIPDemGiven :1; unsigned B3SOIPDefGiven :1; unsigned B3SOIPDafGiven :1; unsigned B3SOIPDkfGiven :1; unsigned B3SOIPDnoifGiven :1; unsigned B3SOIPDLintGiven :1; unsigned B3SOIPDLlGiven :1; unsigned B3SOIPDLlcGiven :1; /* v2.2.3 */ unsigned B3SOIPDLlnGiven :1; unsigned B3SOIPDLwGiven :1; unsigned B3SOIPDLwcGiven :1; /* v2.2.3 */ unsigned B3SOIPDLwnGiven :1; unsigned B3SOIPDLwlGiven :1; unsigned B3SOIPDLwlcGiven :1; /* v2.2.3 */ unsigned B3SOIPDLminGiven :1; unsigned B3SOIPDLmaxGiven :1; unsigned B3SOIPDWintGiven :1; unsigned B3SOIPDWlGiven :1; unsigned B3SOIPDWlcGiven :1; /* v2.2.3 */ unsigned B3SOIPDWlnGiven :1; unsigned B3SOIPDWwGiven :1; unsigned B3SOIPDWwcGiven :1; /* v2.2.3 */ unsigned B3SOIPDWwnGiven :1; unsigned B3SOIPDWwlGiven :1; unsigned B3SOIPDWwlcGiven :1; /* v2.2.3 */ unsigned B3SOIPDWminGiven :1; unsigned B3SOIPDWmaxGiven :1; } B3SOIPDmodel; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ /* device parameters */ #define B3SOIPD_W 1 #define B3SOIPD_L 2 #define B3SOIPD_M 31 #define B3SOIPD_AS 3 #define B3SOIPD_AD 4 #define B3SOIPD_PS 5 #define B3SOIPD_PD 6 #define B3SOIPD_NRS 7 #define B3SOIPD_NRD 8 #define B3SOIPD_OFF 9 #define B3SOIPD_IC_VBS 10 #define B3SOIPD_IC_VDS 11 #define B3SOIPD_IC_VGS 12 #define B3SOIPD_IC_VES 13 #define B3SOIPD_IC_VPS 14 #define B3SOIPD_BJTOFF 15 #define B3SOIPD_RTH0 16 #define B3SOIPD_CTH0 17 #define B3SOIPD_NRB 18 #define B3SOIPD_IC 19 #define B3SOIPD_NQSMOD 20 #define B3SOIPD_DEBUG 21 /* v2.0 release */ #define B3SOIPD_NBC 22 #define B3SOIPD_NSEG 23 #define B3SOIPD_PDBCP 24 #define B3SOIPD_PSBCP 25 #define B3SOIPD_AGBCP 26 #define B3SOIPD_AEBCP 27 #define B3SOIPD_VBSUSR 28 #define B3SOIPD_TNODEOUT 29 /* v2.2.2 */ #define B3SOIPD_FRBODY 30 /* model parameters */ #define B3SOIPD_MOD_CAPMOD 101 #define B3SOIPD_MOD_NQSMOD 102 #define B3SOIPD_MOD_MOBMOD 103 #define B3SOIPD_MOD_NOIMOD 104 #define B3SOIPD_MOD_SHMOD 105 #define B3SOIPD_MOD_DDMOD 106 #define B3SOIPD_MOD_TOX 107 #define B3SOIPD_MOD_CDSC 108 #define B3SOIPD_MOD_CDSCB 109 #define B3SOIPD_MOD_CIT 110 #define B3SOIPD_MOD_NFACTOR 111 #define B3SOIPD_MOD_XJ 112 #define B3SOIPD_MOD_VSAT 113 #define B3SOIPD_MOD_AT 114 #define B3SOIPD_MOD_A0 115 #define B3SOIPD_MOD_A1 116 #define B3SOIPD_MOD_A2 117 #define B3SOIPD_MOD_KETA 118 #define B3SOIPD_MOD_NSUB 119 #define B3SOIPD_MOD_NPEAK 120 #define B3SOIPD_MOD_NGATE 121 #define B3SOIPD_MOD_GAMMA1 122 #define B3SOIPD_MOD_GAMMA2 123 #define B3SOIPD_MOD_VBX 124 #define B3SOIPD_MOD_BINUNIT 125 #define B3SOIPD_MOD_VBM 126 #define B3SOIPD_MOD_XT 127 #define B3SOIPD_MOD_K1 129 #define B3SOIPD_MOD_KT1 130 #define B3SOIPD_MOD_KT1L 131 #define B3SOIPD_MOD_K2 132 #define B3SOIPD_MOD_KT2 133 #define B3SOIPD_MOD_K3 134 #define B3SOIPD_MOD_K3B 135 #define B3SOIPD_MOD_W0 136 #define B3SOIPD_MOD_NLX 137 #define B3SOIPD_MOD_DVT0 138 #define B3SOIPD_MOD_DVT1 139 #define B3SOIPD_MOD_DVT2 140 #define B3SOIPD_MOD_DVT0W 141 #define B3SOIPD_MOD_DVT1W 142 #define B3SOIPD_MOD_DVT2W 143 #define B3SOIPD_MOD_DROUT 144 #define B3SOIPD_MOD_DSUB 145 #define B3SOIPD_MOD_VTH0 146 #define B3SOIPD_MOD_UA 147 #define B3SOIPD_MOD_UA1 148 #define B3SOIPD_MOD_UB 149 #define B3SOIPD_MOD_UB1 150 #define B3SOIPD_MOD_UC 151 #define B3SOIPD_MOD_UC1 152 #define B3SOIPD_MOD_U0 153 #define B3SOIPD_MOD_UTE 154 #define B3SOIPD_MOD_VOFF 155 #define B3SOIPD_MOD_DELTA 156 #define B3SOIPD_MOD_RDSW 157 #define B3SOIPD_MOD_PRT 158 #define B3SOIPD_MOD_LDD 159 #define B3SOIPD_MOD_ETA 160 #define B3SOIPD_MOD_ETA0 161 #define B3SOIPD_MOD_ETAB 162 #define B3SOIPD_MOD_PCLM 163 #define B3SOIPD_MOD_PDIBL1 164 #define B3SOIPD_MOD_PDIBL2 165 #define B3SOIPD_MOD_PSCBE1 166 #define B3SOIPD_MOD_PSCBE2 167 #define B3SOIPD_MOD_PVAG 168 #define B3SOIPD_MOD_WR 169 #define B3SOIPD_MOD_DWG 170 #define B3SOIPD_MOD_DWB 171 #define B3SOIPD_MOD_B0 172 #define B3SOIPD_MOD_B1 173 #define B3SOIPD_MOD_ALPHA0 174 #define B3SOIPD_MOD_PDIBLB 178 #define B3SOIPD_MOD_PRWG 179 #define B3SOIPD_MOD_PRWB 180 #define B3SOIPD_MOD_CDSCD 181 #define B3SOIPD_MOD_AGS 182 #define B3SOIPD_MOD_FRINGE 184 #define B3SOIPD_MOD_CGSL 186 #define B3SOIPD_MOD_CGDL 187 #define B3SOIPD_MOD_CKAPPA 188 #define B3SOIPD_MOD_CF 189 #define B3SOIPD_MOD_CLC 190 #define B3SOIPD_MOD_CLE 191 #define B3SOIPD_MOD_PARAMCHK 192 #define B3SOIPD_MOD_VERSION 193 #define B3SOIPD_MOD_TBOX 195 #define B3SOIPD_MOD_TSI 196 #define B3SOIPD_MOD_KB1 197 #define B3SOIPD_MOD_KB3 198 #define B3SOIPD_MOD_DVBD0 199 #define B3SOIPD_MOD_DVBD1 200 #define B3SOIPD_MOD_DELP 201 #define B3SOIPD_MOD_VBSA 202 #define B3SOIPD_MOD_RBODY 204 #define B3SOIPD_MOD_ADICE0 205 #define B3SOIPD_MOD_ABP 206 #define B3SOIPD_MOD_MXC 207 #define B3SOIPD_MOD_RTH0 208 #define B3SOIPD_MOD_CTH0 209 #define B3SOIPD_MOD_ALPHA1 214 #define B3SOIPD_MOD_NGIDL 215 #define B3SOIPD_MOD_AGIDL 216 #define B3SOIPD_MOD_BGIDL 217 #define B3SOIPD_MOD_NDIODE 218 #define B3SOIPD_MOD_LDIOF 219 #define B3SOIPD_MOD_LDIOR 220 #define B3SOIPD_MOD_NTUN 221 #define B3SOIPD_MOD_ISBJT 222 #define B3SOIPD_MOD_ISDIF 223 #define B3SOIPD_MOD_ISREC 224 #define B3SOIPD_MOD_ISTUN 225 #define B3SOIPD_MOD_XBJT 226 #define B3SOIPD_MOD_XDIF 227 #define B3SOIPD_MOD_XREC 228 #define B3SOIPD_MOD_XTUN 229 #define B3SOIPD_MOD_TT 232 #define B3SOIPD_MOD_VSDTH 233 #define B3SOIPD_MOD_VSDFB 234 #define B3SOIPD_MOD_ASD 235 #define B3SOIPD_MOD_CSDMIN 236 #define B3SOIPD_MOD_RBSH 237 #define B3SOIPD_MOD_ESATII 238 /* v2.0 release */ #define B3SOIPD_MOD_K1W1 239 #define B3SOIPD_MOD_K1W2 240 #define B3SOIPD_MOD_KETAS 241 #define B3SOIPD_MOD_DWBC 242 #define B3SOIPD_MOD_BETA0 243 #define B3SOIPD_MOD_BETA1 244 #define B3SOIPD_MOD_BETA2 245 #define B3SOIPD_MOD_VDSATII0 246 #define B3SOIPD_MOD_TII 247 #define B3SOIPD_MOD_LII 248 #define B3SOIPD_MOD_SII0 249 #define B3SOIPD_MOD_SII1 250 #define B3SOIPD_MOD_SII2 251 #define B3SOIPD_MOD_SIID 252 #define B3SOIPD_MOD_FBJTII 253 #define B3SOIPD_MOD_NRECF0 255 #define B3SOIPD_MOD_NRECR0 256 #define B3SOIPD_MOD_LN 257 #define B3SOIPD_MOD_VREC0 258 #define B3SOIPD_MOD_VTUN0 259 #define B3SOIPD_MOD_NBJT 260 #define B3SOIPD_MOD_LBJT0 261 #define B3SOIPD_MOD_VABJT 262 #define B3SOIPD_MOD_AELY 263 #define B3SOIPD_MOD_AHLI 264 #define B3SOIPD_MOD_NTRECF 265 #define B3SOIPD_MOD_NTRECR 266 #define B3SOIPD_MOD_DLCB 267 #define B3SOIPD_MOD_FBODY 268 #define B3SOIPD_MOD_NDIF 269 #define B3SOIPD_MOD_TCJSWG 270 #define B3SOIPD_MOD_TPBSWG 271 #define B3SOIPD_MOD_ACDE 272 #define B3SOIPD_MOD_MOIN 273 #define B3SOIPD_MOD_DELVT 274 #define B3SOIPD_MOD_DLBG 275 #define B3SOIPD_MOD_LDIF0 276 /* v2.2 release */ #define B3SOIPD_MOD_WTH0 277 #define B3SOIPD_MOD_RHALO 278 #define B3SOIPD_MOD_NTOX 279 #define B3SOIPD_MOD_TOXREF 280 #define B3SOIPD_MOD_EBG 281 #define B3SOIPD_MOD_VEVB 282 #define B3SOIPD_MOD_ALPHAGB1 283 #define B3SOIPD_MOD_BETAGB1 284 #define B3SOIPD_MOD_VGB1 285 #define B3SOIPD_MOD_VECB 286 #define B3SOIPD_MOD_ALPHAGB2 287 #define B3SOIPD_MOD_BETAGB2 288 #define B3SOIPD_MOD_VGB2 289 #define B3SOIPD_MOD_TOXQM 290 #define B3SOIPD_MOD_IGMOD 291 #define B3SOIPD_MOD_VOXH 292 #define B3SOIPD_MOD_DELTAVOX 293 /* Added for binning - START3 */ /* Length dependence */ #define B3SOIPD_MOD_LNPEAK 301 #define B3SOIPD_MOD_LNSUB 302 #define B3SOIPD_MOD_LNGATE 303 #define B3SOIPD_MOD_LVTH0 304 #define B3SOIPD_MOD_LK1 305 #define B3SOIPD_MOD_LK1W1 306 #define B3SOIPD_MOD_LK1W2 307 #define B3SOIPD_MOD_LK2 308 #define B3SOIPD_MOD_LK3 309 #define B3SOIPD_MOD_LK3B 310 #define B3SOIPD_MOD_LKB1 311 #define B3SOIPD_MOD_LW0 312 #define B3SOIPD_MOD_LNLX 313 #define B3SOIPD_MOD_LDVT0 314 #define B3SOIPD_MOD_LDVT1 315 #define B3SOIPD_MOD_LDVT2 316 #define B3SOIPD_MOD_LDVT0W 317 #define B3SOIPD_MOD_LDVT1W 318 #define B3SOIPD_MOD_LDVT2W 319 #define B3SOIPD_MOD_LU0 320 #define B3SOIPD_MOD_LUA 321 #define B3SOIPD_MOD_LUB 322 #define B3SOIPD_MOD_LUC 323 #define B3SOIPD_MOD_LVSAT 324 #define B3SOIPD_MOD_LA0 325 #define B3SOIPD_MOD_LAGS 326 #define B3SOIPD_MOD_LB0 327 #define B3SOIPD_MOD_LB1 328 #define B3SOIPD_MOD_LKETA 329 #define B3SOIPD_MOD_LKETAS 330 #define B3SOIPD_MOD_LA1 331 #define B3SOIPD_MOD_LA2 332 #define B3SOIPD_MOD_LRDSW 333 #define B3SOIPD_MOD_LPRWB 334 #define B3SOIPD_MOD_LPRWG 335 #define B3SOIPD_MOD_LWR 336 #define B3SOIPD_MOD_LNFACTOR 337 #define B3SOIPD_MOD_LDWG 338 #define B3SOIPD_MOD_LDWB 339 #define B3SOIPD_MOD_LVOFF 340 #define B3SOIPD_MOD_LETA0 341 #define B3SOIPD_MOD_LETAB 342 #define B3SOIPD_MOD_LDSUB 343 #define B3SOIPD_MOD_LCIT 344 #define B3SOIPD_MOD_LCDSC 345 #define B3SOIPD_MOD_LCDSCB 346 #define B3SOIPD_MOD_LCDSCD 347 #define B3SOIPD_MOD_LPCLM 348 #define B3SOIPD_MOD_LPDIBL1 349 #define B3SOIPD_MOD_LPDIBL2 350 #define B3SOIPD_MOD_LPDIBLB 351 #define B3SOIPD_MOD_LDROUT 352 #define B3SOIPD_MOD_LPVAG 353 #define B3SOIPD_MOD_LDELTA 354 #define B3SOIPD_MOD_LALPHA0 355 #define B3SOIPD_MOD_LFBJTII 356 #define B3SOIPD_MOD_LBETA0 357 #define B3SOIPD_MOD_LBETA1 358 #define B3SOIPD_MOD_LBETA2 359 #define B3SOIPD_MOD_LVDSATII0 360 #define B3SOIPD_MOD_LLII 361 #define B3SOIPD_MOD_LESATII 362 #define B3SOIPD_MOD_LSII0 363 #define B3SOIPD_MOD_LSII1 364 #define B3SOIPD_MOD_LSII2 365 #define B3SOIPD_MOD_LSIID 366 #define B3SOIPD_MOD_LAGIDL 367 #define B3SOIPD_MOD_LBGIDL 368 #define B3SOIPD_MOD_LNGIDL 369 #define B3SOIPD_MOD_LNTUN 370 #define B3SOIPD_MOD_LNDIODE 371 #define B3SOIPD_MOD_LNRECF0 372 #define B3SOIPD_MOD_LNRECR0 373 #define B3SOIPD_MOD_LISBJT 374 #define B3SOIPD_MOD_LISDIF 375 #define B3SOIPD_MOD_LISREC 376 #define B3SOIPD_MOD_LISTUN 377 #define B3SOIPD_MOD_LVREC0 378 #define B3SOIPD_MOD_LVTUN0 379 #define B3SOIPD_MOD_LNBJT 380 #define B3SOIPD_MOD_LLBJT0 381 #define B3SOIPD_MOD_LVABJT 382 #define B3SOIPD_MOD_LAELY 383 #define B3SOIPD_MOD_LAHLI 384 #define B3SOIPD_MOD_LVSDFB 385 #define B3SOIPD_MOD_LVSDTH 386 #define B3SOIPD_MOD_LDELVT 387 #define B3SOIPD_MOD_LACDE 388 #define B3SOIPD_MOD_LMOIN 389 /* Width dependence */ #define B3SOIPD_MOD_WNPEAK 401 #define B3SOIPD_MOD_WNSUB 402 #define B3SOIPD_MOD_WNGATE 403 #define B3SOIPD_MOD_WVTH0 404 #define B3SOIPD_MOD_WK1 405 #define B3SOIPD_MOD_WK1W1 406 #define B3SOIPD_MOD_WK1W2 407 #define B3SOIPD_MOD_WK2 408 #define B3SOIPD_MOD_WK3 409 #define B3SOIPD_MOD_WK3B 410 #define B3SOIPD_MOD_WKB1 411 #define B3SOIPD_MOD_WW0 412 #define B3SOIPD_MOD_WNLX 413 #define B3SOIPD_MOD_WDVT0 414 #define B3SOIPD_MOD_WDVT1 415 #define B3SOIPD_MOD_WDVT2 416 #define B3SOIPD_MOD_WDVT0W 417 #define B3SOIPD_MOD_WDVT1W 418 #define B3SOIPD_MOD_WDVT2W 419 #define B3SOIPD_MOD_WU0 420 #define B3SOIPD_MOD_WUA 421 #define B3SOIPD_MOD_WUB 422 #define B3SOIPD_MOD_WUC 423 #define B3SOIPD_MOD_WVSAT 424 #define B3SOIPD_MOD_WA0 425 #define B3SOIPD_MOD_WAGS 426 #define B3SOIPD_MOD_WB0 427 #define B3SOIPD_MOD_WB1 428 #define B3SOIPD_MOD_WKETA 429 #define B3SOIPD_MOD_WKETAS 430 #define B3SOIPD_MOD_WA1 431 #define B3SOIPD_MOD_WA2 432 #define B3SOIPD_MOD_WRDSW 433 #define B3SOIPD_MOD_WPRWB 434 #define B3SOIPD_MOD_WPRWG 435 #define B3SOIPD_MOD_WWR 436 #define B3SOIPD_MOD_WNFACTOR 437 #define B3SOIPD_MOD_WDWG 438 #define B3SOIPD_MOD_WDWB 439 #define B3SOIPD_MOD_WVOFF 440 #define B3SOIPD_MOD_WETA0 441 #define B3SOIPD_MOD_WETAB 442 #define B3SOIPD_MOD_WDSUB 443 #define B3SOIPD_MOD_WCIT 444 #define B3SOIPD_MOD_WCDSC 445 #define B3SOIPD_MOD_WCDSCB 446 #define B3SOIPD_MOD_WCDSCD 447 #define B3SOIPD_MOD_WPCLM 448 #define B3SOIPD_MOD_WPDIBL1 449 #define B3SOIPD_MOD_WPDIBL2 450 #define B3SOIPD_MOD_WPDIBLB 451 #define B3SOIPD_MOD_WDROUT 452 #define B3SOIPD_MOD_WPVAG 453 #define B3SOIPD_MOD_WDELTA 454 #define B3SOIPD_MOD_WALPHA0 455 #define B3SOIPD_MOD_WFBJTII 456 #define B3SOIPD_MOD_WBETA0 457 #define B3SOIPD_MOD_WBETA1 458 #define B3SOIPD_MOD_WBETA2 459 #define B3SOIPD_MOD_WVDSATII0 460 #define B3SOIPD_MOD_WLII 461 #define B3SOIPD_MOD_WESATII 462 #define B3SOIPD_MOD_WSII0 463 #define B3SOIPD_MOD_WSII1 464 #define B3SOIPD_MOD_WSII2 465 #define B3SOIPD_MOD_WSIID 466 #define B3SOIPD_MOD_WAGIDL 467 #define B3SOIPD_MOD_WBGIDL 468 #define B3SOIPD_MOD_WNGIDL 469 #define B3SOIPD_MOD_WNTUN 470 #define B3SOIPD_MOD_WNDIODE 471 #define B3SOIPD_MOD_WNRECF0 472 #define B3SOIPD_MOD_WNRECR0 473 #define B3SOIPD_MOD_WISBJT 474 #define B3SOIPD_MOD_WISDIF 475 #define B3SOIPD_MOD_WISREC 476 #define B3SOIPD_MOD_WISTUN 477 #define B3SOIPD_MOD_WVREC0 478 #define B3SOIPD_MOD_WVTUN0 479 #define B3SOIPD_MOD_WNBJT 480 #define B3SOIPD_MOD_WLBJT0 481 #define B3SOIPD_MOD_WVABJT 482 #define B3SOIPD_MOD_WAELY 483 #define B3SOIPD_MOD_WAHLI 484 #define B3SOIPD_MOD_WVSDFB 485 #define B3SOIPD_MOD_WVSDTH 486 #define B3SOIPD_MOD_WDELVT 487 #define B3SOIPD_MOD_WACDE 488 #define B3SOIPD_MOD_WMOIN 489 /* Cross-term dependence */ #define B3SOIPD_MOD_PNPEAK 501 #define B3SOIPD_MOD_PNSUB 502 #define B3SOIPD_MOD_PNGATE 503 #define B3SOIPD_MOD_PVTH0 504 #define B3SOIPD_MOD_PK1 505 #define B3SOIPD_MOD_PK1W1 506 #define B3SOIPD_MOD_PK1W2 507 #define B3SOIPD_MOD_PK2 508 #define B3SOIPD_MOD_PK3 509 #define B3SOIPD_MOD_PK3B 510 #define B3SOIPD_MOD_PKB1 511 #define B3SOIPD_MOD_PW0 512 #define B3SOIPD_MOD_PNLX 513 #define B3SOIPD_MOD_PDVT0 514 #define B3SOIPD_MOD_PDVT1 515 #define B3SOIPD_MOD_PDVT2 516 #define B3SOIPD_MOD_PDVT0W 517 #define B3SOIPD_MOD_PDVT1W 518 #define B3SOIPD_MOD_PDVT2W 519 #define B3SOIPD_MOD_PU0 520 #define B3SOIPD_MOD_PUA 521 #define B3SOIPD_MOD_PUB 522 #define B3SOIPD_MOD_PUC 523 #define B3SOIPD_MOD_PVSAT 524 #define B3SOIPD_MOD_PA0 525 #define B3SOIPD_MOD_PAGS 526 #define B3SOIPD_MOD_PB0 527 #define B3SOIPD_MOD_PB1 528 #define B3SOIPD_MOD_PKETA 529 #define B3SOIPD_MOD_PKETAS 530 #define B3SOIPD_MOD_PA1 531 #define B3SOIPD_MOD_PA2 532 #define B3SOIPD_MOD_PRDSW 533 #define B3SOIPD_MOD_PPRWB 534 #define B3SOIPD_MOD_PPRWG 535 #define B3SOIPD_MOD_PWR 536 #define B3SOIPD_MOD_PNFACTOR 537 #define B3SOIPD_MOD_PDWG 538 #define B3SOIPD_MOD_PDWB 539 #define B3SOIPD_MOD_PVOFF 540 #define B3SOIPD_MOD_PETA0 541 #define B3SOIPD_MOD_PETAB 542 #define B3SOIPD_MOD_PDSUB 543 #define B3SOIPD_MOD_PCIT 544 #define B3SOIPD_MOD_PCDSC 545 #define B3SOIPD_MOD_PCDSCB 546 #define B3SOIPD_MOD_PCDSCD 547 #define B3SOIPD_MOD_PPCLM 548 #define B3SOIPD_MOD_PPDIBL1 549 #define B3SOIPD_MOD_PPDIBL2 550 #define B3SOIPD_MOD_PPDIBLB 551 #define B3SOIPD_MOD_PDROUT 552 #define B3SOIPD_MOD_PPVAG 553 #define B3SOIPD_MOD_PDELTA 554 #define B3SOIPD_MOD_PALPHA0 555 #define B3SOIPD_MOD_PFBJTII 556 #define B3SOIPD_MOD_PBETA0 557 #define B3SOIPD_MOD_PBETA1 558 #define B3SOIPD_MOD_PBETA2 559 #define B3SOIPD_MOD_PVDSATII0 560 #define B3SOIPD_MOD_PLII 561 #define B3SOIPD_MOD_PESATII 562 #define B3SOIPD_MOD_PSII0 563 #define B3SOIPD_MOD_PSII1 564 #define B3SOIPD_MOD_PSII2 565 #define B3SOIPD_MOD_PSIID 566 #define B3SOIPD_MOD_PAGIDL 567 #define B3SOIPD_MOD_PBGIDL 568 #define B3SOIPD_MOD_PNGIDL 569 #define B3SOIPD_MOD_PNTUN 570 #define B3SOIPD_MOD_PNDIODE 571 #define B3SOIPD_MOD_PNRECF0 572 #define B3SOIPD_MOD_PNRECR0 573 #define B3SOIPD_MOD_PISBJT 574 #define B3SOIPD_MOD_PISDIF 575 #define B3SOIPD_MOD_PISREC 576 #define B3SOIPD_MOD_PISTUN 577 #define B3SOIPD_MOD_PVREC0 578 #define B3SOIPD_MOD_PVTUN0 579 #define B3SOIPD_MOD_PNBJT 580 #define B3SOIPD_MOD_PLBJT0 581 #define B3SOIPD_MOD_PVABJT 582 #define B3SOIPD_MOD_PAELY 583 #define B3SOIPD_MOD_PAHLI 584 #define B3SOIPD_MOD_PVSDFB 585 #define B3SOIPD_MOD_PVSDTH 586 #define B3SOIPD_MOD_PDELVT 587 #define B3SOIPD_MOD_PACDE 588 #define B3SOIPD_MOD_PMOIN 589 /* Added for binning - END3 */ #define B3SOIPD_MOD_TNOM 701 #define B3SOIPD_MOD_CGSO 702 #define B3SOIPD_MOD_CGDO 703 #define B3SOIPD_MOD_CGEO 704 #define B3SOIPD_MOD_XPART 705 #define B3SOIPD_MOD_RSH 706 #define B3SOIPD_MOD_NMOS 814 #define B3SOIPD_MOD_PMOS 815 #define B3SOIPD_MOD_NOIA 816 #define B3SOIPD_MOD_NOIB 817 #define B3SOIPD_MOD_NOIC 818 #define B3SOIPD_MOD_LINT 819 #define B3SOIPD_MOD_LL 820 #define B3SOIPD_MOD_LLN 821 #define B3SOIPD_MOD_LW 822 #define B3SOIPD_MOD_LWN 823 #define B3SOIPD_MOD_LWL 824 #define B3SOIPD_MOD_WINT 827 #define B3SOIPD_MOD_WL 828 #define B3SOIPD_MOD_WLN 829 #define B3SOIPD_MOD_WW 830 #define B3SOIPD_MOD_WWN 831 #define B3SOIPD_MOD_WWL 832 /* v2.2.3 */ #define B3SOIPD_MOD_LWLC 847 #define B3SOIPD_MOD_LLC 848 #define B3SOIPD_MOD_LWC 849 #define B3SOIPD_MOD_WWLC 850 #define B3SOIPD_MOD_WLC 851 #define B3SOIPD_MOD_WWC 852 #define B3SOIPD_MOD_DTOXCV 853 #define B3SOIPD_MOD_DWC 835 #define B3SOIPD_MOD_DLC 836 #define B3SOIPD_MOD_EM 837 #define B3SOIPD_MOD_EF 838 #define B3SOIPD_MOD_AF 839 #define B3SOIPD_MOD_KF 840 #define B3SOIPD_MOD_NOIF 841 #define B3SOIPD_MOD_PBSWG 843 #define B3SOIPD_MOD_MJSWG 844 #define B3SOIPD_MOD_CJSWG 845 #define B3SOIPD_MOD_CSDESW 846 /* device questions */ #define B3SOIPD_DNODE 901 #define B3SOIPD_GNODE 902 #define B3SOIPD_SNODE 903 #define B3SOIPD_BNODE 904 #define B3SOIPD_ENODE 905 #define B3SOIPD_DNODEPRIME 906 #define B3SOIPD_SNODEPRIME 907 #define B3SOIPD_VBD 908 #define B3SOIPD_VBS 909 #define B3SOIPD_VGS 910 #define B3SOIPD_VES 911 #define B3SOIPD_VDS 912 #define B3SOIPD_CD 913 #define B3SOIPD_CBS 914 #define B3SOIPD_CBD 915 #define B3SOIPD_GM 916 #define B3SOIPD_GDS 917 #define B3SOIPD_GMBS 918 #define B3SOIPD_GBD 919 #define B3SOIPD_GBS 920 #define B3SOIPD_QB 921 #define B3SOIPD_CQB 922 #define B3SOIPD_QG 923 #define B3SOIPD_CQG 924 #define B3SOIPD_QD 925 #define B3SOIPD_CQD 926 #define B3SOIPD_CGG 927 #define B3SOIPD_CGD 928 #define B3SOIPD_CGS 929 #define B3SOIPD_CBG 930 #define B3SOIPD_CAPBD 931 #define B3SOIPD_CQBD 932 #define B3SOIPD_CAPBS 933 #define B3SOIPD_CQBS 934 #define B3SOIPD_CDG 935 #define B3SOIPD_CDD 936 #define B3SOIPD_CDS 937 #define B3SOIPD_VON 938 #define B3SOIPD_VDSAT 939 #define B3SOIPD_QBS 940 #define B3SOIPD_QBD 941 #define B3SOIPD_SOURCECONDUCT 942 #define B3SOIPD_DRAINCONDUCT 943 #define B3SOIPD_CBDB 944 #define B3SOIPD_CBSB 945 #define B3SOIPD_GMID 946 #include "b3soipdext.h" extern void B3SOIPDevaluate(double,double,double,B3SOIPDinstance*,B3SOIPDmodel*, double*,double*,double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, CKTcircuit*); extern int B3SOIPDdebug(B3SOIPDmodel*, B3SOIPDinstance*, CKTcircuit*, int); extern int B3SOIPDcheckModel(B3SOIPDmodel*, B3SOIPDinstance*, CKTcircuit*); #endif /*B3SOIPD*/ tmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/b3soipdask.c0000644000175000017500000002174413546075722023614 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soipdask.c 98/5/01 Modified by Pin Su 99/4/30 Modified by Pin Su 01/2/15 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.2.3 02/3/5 Pin Su * BSIMPD2.2.3 release */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "b3soipddef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIPDask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { B3SOIPDinstance *here = (B3SOIPDinstance*)inst; NG_IGNORE(select); switch(which) { case B3SOIPD_L: value->rValue = here->B3SOIPDl; return(OK); case B3SOIPD_W: value->rValue = here->B3SOIPDw; return(OK); case B3SOIPD_M: value->rValue = here->B3SOIPDm; return(OK); case B3SOIPD_AS: value->rValue = here->B3SOIPDsourceArea; return(OK); case B3SOIPD_AD: value->rValue = here->B3SOIPDdrainArea; return(OK); case B3SOIPD_PS: value->rValue = here->B3SOIPDsourcePerimeter; return(OK); case B3SOIPD_PD: value->rValue = here->B3SOIPDdrainPerimeter; return(OK); case B3SOIPD_NRS: value->rValue = here->B3SOIPDsourceSquares; return(OK); case B3SOIPD_NRD: value->rValue = here->B3SOIPDdrainSquares; return(OK); case B3SOIPD_OFF: value->iValue = here->B3SOIPDoff; return(OK); case B3SOIPD_BJTOFF: value->iValue = here->B3SOIPDbjtoff; return(OK); case B3SOIPD_RTH0: value->rValue = here->B3SOIPDrth0; value->rValue /= here->B3SOIPDm; return(OK); case B3SOIPD_CTH0: value->rValue = here->B3SOIPDcth0; value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_NRB: value->rValue = here->B3SOIPDbodySquares; return(OK); case B3SOIPD_FRBODY: value->rValue = here->B3SOIPDfrbody; return(OK); /* v2.0 release */ case B3SOIPD_NBC: value->rValue = here->B3SOIPDnbc; return(OK); case B3SOIPD_NSEG: value->rValue = here->B3SOIPDnseg; return(OK); case B3SOIPD_PDBCP: value->rValue = here->B3SOIPDpdbcp; return(OK); case B3SOIPD_PSBCP: value->rValue = here->B3SOIPDpsbcp; return(OK); case B3SOIPD_AGBCP: value->rValue = here->B3SOIPDagbcp; return(OK); case B3SOIPD_AEBCP: value->rValue = here->B3SOIPDaebcp; return(OK); case B3SOIPD_VBSUSR: value->rValue = here->B3SOIPDvbsusr; return(OK); case B3SOIPD_TNODEOUT: value->iValue = here->B3SOIPDtnodeout; return(OK); case B3SOIPD_IC_VBS: value->rValue = here->B3SOIPDicVBS; return(OK); case B3SOIPD_IC_VDS: value->rValue = here->B3SOIPDicVDS; return(OK); case B3SOIPD_IC_VGS: value->rValue = here->B3SOIPDicVGS; return(OK); case B3SOIPD_IC_VES: value->rValue = here->B3SOIPDicVES; return(OK); case B3SOIPD_IC_VPS: value->rValue = here->B3SOIPDicVPS; return(OK); case B3SOIPD_DNODE: value->iValue = here->B3SOIPDdNode; return(OK); case B3SOIPD_GNODE: value->iValue = here->B3SOIPDgNode; return(OK); case B3SOIPD_SNODE: value->iValue = here->B3SOIPDsNode; return(OK); case B3SOIPD_BNODE: value->iValue = here->B3SOIPDbNode; return(OK); case B3SOIPD_ENODE: value->iValue = here->B3SOIPDeNode; return(OK); case B3SOIPD_DNODEPRIME: value->iValue = here->B3SOIPDdNodePrime; return(OK); case B3SOIPD_SNODEPRIME: value->iValue = here->B3SOIPDsNodePrime; return(OK); case B3SOIPD_SOURCECONDUCT: value->rValue = here->B3SOIPDsourceConductance; value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_DRAINCONDUCT: value->rValue = here->B3SOIPDdrainConductance; value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_VBD: value->rValue = *(ckt->CKTstate0 + here->B3SOIPDvbd); return(OK); case B3SOIPD_VBS: value->rValue = *(ckt->CKTstate0 + here->B3SOIPDvbs); return(OK); case B3SOIPD_VGS: value->rValue = *(ckt->CKTstate0 + here->B3SOIPDvgs); return(OK); case B3SOIPD_VES: value->rValue = *(ckt->CKTstate0 + here->B3SOIPDves); return(OK); case B3SOIPD_VDS: value->rValue = *(ckt->CKTstate0 + here->B3SOIPDvds); return(OK); case B3SOIPD_CD: value->rValue = here->B3SOIPDcd; value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_CBS: value->rValue = here->B3SOIPDcjs; value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_CBD: value->rValue = here->B3SOIPDcjd; value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_GM: value->rValue = here->B3SOIPDgm; value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_GMID: value->rValue = here->B3SOIPDgm/here->B3SOIPDcd; return(OK); case B3SOIPD_GDS: value->rValue = here->B3SOIPDgds; value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_GMBS: value->rValue = here->B3SOIPDgmbs; value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_GBD: value->rValue = here->B3SOIPDgjdb; value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_GBS: value->rValue = here->B3SOIPDgjsb; value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_QB: value->rValue = *(ckt->CKTstate0 + here->B3SOIPDqb); value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_CQB: value->rValue = *(ckt->CKTstate0 + here->B3SOIPDcqb); value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_QG: value->rValue = *(ckt->CKTstate0 + here->B3SOIPDqg); value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_CQG: value->rValue = *(ckt->CKTstate0 + here->B3SOIPDcqg); value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_QD: value->rValue = *(ckt->CKTstate0 + here->B3SOIPDqd); value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_CQD: value->rValue = *(ckt->CKTstate0 + here->B3SOIPDcqd); value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_CGG: value->rValue = here->B3SOIPDcggb; value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_CGD: value->rValue = here->B3SOIPDcgdb; value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_CGS: value->rValue = here->B3SOIPDcgsb; value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_CDG: value->rValue = here->B3SOIPDcdgb; value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_CDD: value->rValue = here->B3SOIPDcddb; value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_CDS: value->rValue = here->B3SOIPDcdsb; value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_CBG: value->rValue = here->B3SOIPDcbgb; value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_CBDB: value->rValue = here->B3SOIPDcbdb; value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_CBSB: value->rValue = here->B3SOIPDcbsb; value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_VON: value->rValue = here->B3SOIPDvon; return(OK); case B3SOIPD_VDSAT: value->rValue = here->B3SOIPDvdsat; return(OK); case B3SOIPD_QBS: value->rValue = *(ckt->CKTstate0 + here->B3SOIPDqbs); value->rValue *= here->B3SOIPDm; return(OK); case B3SOIPD_QBD: value->rValue = *(ckt->CKTstate0 + here->B3SOIPDqbd); value->rValue *= here->B3SOIPDm; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/b3soipdnoi.c0000644000175000017500000003036313546075722023620 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soipdnoi.c 98/5/01 Modified by Hui Wan 02/3/5 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.2.3 02/3/5 Pin Su * BSIMPD2.2.3 release */ #include "ngspice/ngspice.h" #include "b3soipddef.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" #include "ngspice/const.h" /* jwan */ /* * B3SOIPDnoise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with MOSFET's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the MOSFET's is summed with the variable "OnDens". */ /* Channel thermal and flicker noises are calculated based on the value of model->B3SOIPDnoiMod. If model->B3SOIPDnoiMod = 1, Channel thermal noise = SPICE2 model Flicker noise = SPICE2 model If model->B3SOIPDnoiMod = 2, Channel thermal noise = B3SOIPD model Flicker noise = B3SOIPD model If model->B3SOIPDnoiMod = 3, Channel thermal noise = SPICE2 model Flicker noise = B3SOIPD model If model->B3SOIPDnoiMod = 4, Channel thermal noise = B3SOIPD model Flicker noise = SPICE2 model */ static double B3SOIPDStrongInversionNoiseEval(double vgs, double vds, B3SOIPDmodel *model, B3SOIPDinstance *here, double freq, double temp) { struct b3soipdSizeDependParam *pParam; double cd, esat, DelClm, EffFreq, N0, Nl; double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi; NG_IGNORE(vgs); pParam = here->pParam; cd = fabs(here->B3SOIPDcd) * here->B3SOIPDm; /* v2.2.3 bug fix */ if(model->B3SOIPDem<=0.0) DelClm = 0.0; else { esat = 2.0 * pParam->B3SOIPDvsattemp / here->B3SOIPDueff; T0 = ((((vds - here->B3SOIPDVdseff) / pParam->B3SOIPDlitl) + model->B3SOIPDem) / esat); DelClm = pParam->B3SOIPDlitl * log (MAX(T0, N_MINLOG)); } EffFreq = pow(freq, model->B3SOIPDef); T1 = CHARGE * CHARGE * 8.62e-5 * cd * temp * here->B3SOIPDueff; T2 = 1.0e8 * EffFreq * model->B3SOIPDcox * pParam->B3SOIPDleff * pParam->B3SOIPDleff; /* v2.2.3 bug fix */ N0 = model->B3SOIPDcox * here->B3SOIPDVgsteff / CHARGE; Nl = model->B3SOIPDcox * here->B3SOIPDVgsteff * (1.0 - here->B3SOIPDAbovVgst2Vtm * here->B3SOIPDVdseff) / CHARGE; T3 = model->B3SOIPDoxideTrapDensityA * log(MAX(((N0 + 2.0e14) / (Nl + 2.0e14)), N_MINLOG)); T4 = model->B3SOIPDoxideTrapDensityB * (N0 - Nl); T5 = model->B3SOIPDoxideTrapDensityC * 0.5 * (N0 * N0 - Nl * Nl); T6 = 8.62e-5 * temp * cd * cd; T7 = 1.0e8 * EffFreq * pParam->B3SOIPDleff * pParam->B3SOIPDleff * pParam->B3SOIPDweff * here->B3SOIPDm; T8 = model->B3SOIPDoxideTrapDensityA + model->B3SOIPDoxideTrapDensityB * Nl + model->B3SOIPDoxideTrapDensityC * Nl * Nl; T9 = (Nl + 2.0e14) * (Nl + 2.0e14); Ssi = T1 / T2 * (T3 + T4 + T5) + T6 / T7 * DelClm * T8 / T9; return Ssi; } int B3SOIPDnoise (int mode, int operation, GENmodel *inModel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; B3SOIPDmodel *model = (B3SOIPDmodel *)inModel; B3SOIPDinstance *here; struct b3soipdSizeDependParam *pParam; double tempOnoise; double tempInoise; double noizDens[B3SOIPDNSRCS]; double lnNdens[B3SOIPDNSRCS]; double vgs, vds, Slimit; double T1, T10, T11; double Ssi, Swi; int i; /* define the names of the noise sources */ static char *B3SOIPDnNames[B3SOIPDNSRCS] = { /* Note that we have to keep the order */ ".rd", /* noise due to rd */ /* consistent with the index definitions */ ".rs", /* noise due to rs */ /* in B3SOIPDdefs.h */ ".id", /* noise due to id */ ".1overf", /* flicker (1/f) noise */ ".fb", /* noise due to floating body */ "" /* total transistor noise */ }; for (; model != NULL; model = B3SOIPDnextModel(model)) { for (here = B3SOIPDinstances(model); here != NULL; here = B3SOIPDnextInstance(here)) { pParam = here->pParam; switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i = 0; i < B3SOIPDNSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise.%s%s", here->B3SOIPDname, B3SOIPDnNames[i]); } break; case INT_NOIZ: for (i = 0; i < B3SOIPDNSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total.%s%s", here->B3SOIPDname, B3SOIPDnNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total.%s%s", here->B3SOIPDname, B3SOIPDnNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: NevalSrc(&noizDens[B3SOIPDRDNOIZ], &lnNdens[B3SOIPDRDNOIZ], ckt, THERMNOISE, here->B3SOIPDdNodePrime, here->B3SOIPDdNode, here->B3SOIPDdrainConductance * here->B3SOIPDm); NevalSrc(&noizDens[B3SOIPDRSNOIZ], &lnNdens[B3SOIPDRSNOIZ], ckt, THERMNOISE, here->B3SOIPDsNodePrime, here->B3SOIPDsNode, here->B3SOIPDsourceConductance * here->B3SOIPDm); switch( model->B3SOIPDnoiMod ) { case 1: case 3: NevalSrc(&noizDens[B3SOIPDIDNOIZ], &lnNdens[B3SOIPDIDNOIZ], ckt, THERMNOISE, here->B3SOIPDdNodePrime, here->B3SOIPDsNodePrime, (2.0 / 3.0 * fabs(here->B3SOIPDm * (here->B3SOIPDgm + here->B3SOIPDgds + here->B3SOIPDgmbs)))); break; case 2: /* v2.2.3 bug fix */ case 4: NevalSrc(&noizDens[B3SOIPDIDNOIZ], &lnNdens[B3SOIPDIDNOIZ], ckt, THERMNOISE, here->B3SOIPDdNodePrime, here->B3SOIPDsNodePrime, (here->B3SOIPDueff * fabs((here->B3SOIPDqinv * here->B3SOIPDm) / (pParam->B3SOIPDleff * pParam->B3SOIPDleff+ here->B3SOIPDueff*fabs (here->B3SOIPDqinv * here->B3SOIPDm)* (here->B3SOIPDrds / here->B3SOIPDm))))); break; } NevalSrc(&noizDens[B3SOIPDFLNOIZ], NULL, ckt, N_GAIN, here->B3SOIPDdNodePrime, here->B3SOIPDsNodePrime, (double) 0.0); switch( model->B3SOIPDnoiMod ) { case 1: case 4: noizDens[B3SOIPDFLNOIZ] *= model->B3SOIPDkf * exp(model->B3SOIPDaf * log(MAX(fabs(here->B3SOIPDcd * here->B3SOIPDm), N_MINLOG))) / (pow(data->freq, model->B3SOIPDef) * pParam->B3SOIPDleff * pParam->B3SOIPDleff * model->B3SOIPDcox); break; case 2: case 3: vgs = *(ckt->CKTstates[0] + here->B3SOIPDvgs); vds = *(ckt->CKTstates[0] + here->B3SOIPDvds); if (vds < 0.0) { vds = -vds; vgs = vgs + vds; } if (vgs >= here->B3SOIPDvon + 0.1) { Ssi = B3SOIPDStrongInversionNoiseEval(vgs, vds, model, here, data->freq, ckt->CKTtemp); noizDens[B3SOIPDFLNOIZ] *= Ssi; } else { pParam = here->pParam; T10 = model->B3SOIPDoxideTrapDensityA * 8.62e-5 * ckt->CKTtemp; T11 = pParam->B3SOIPDweff * here->B3SOIPDm * pParam->B3SOIPDleff * pow(data->freq, model->B3SOIPDef) * 4.0e36; Swi = T10 / T11 * here->B3SOIPDcd * here->B3SOIPDm * here->B3SOIPDcd * here->B3SOIPDm; Slimit = B3SOIPDStrongInversionNoiseEval( here->B3SOIPDvon + 0.1, vds, model, here, data->freq, ckt->CKTtemp); T1 = Swi + Slimit; if (T1 > 0.0) noizDens[B3SOIPDFLNOIZ] *= (Slimit * Swi) / T1; else noizDens[B3SOIPDFLNOIZ] *= 0.0; } break; } lnNdens[B3SOIPDFLNOIZ] = log(MAX(noizDens[B3SOIPDFLNOIZ], N_MINLOG)); /* Low frequency excess noise due to FBE */ NevalSrc(&noizDens[B3SOIPDFBNOIZ], &lnNdens[B3SOIPDFBNOIZ], ckt, SHOTNOISE, here->B3SOIPDsNodePrime, here->B3SOIPDbNode, 2.0 * model->B3SOIPDnoif * here->B3SOIPDibs * here->B3SOIPDm); noizDens[B3SOIPDTOTNOIZ] = noizDens[B3SOIPDRDNOIZ] + noizDens[B3SOIPDRSNOIZ] + noizDens[B3SOIPDIDNOIZ] + noizDens[B3SOIPDFLNOIZ] + noizDens[B3SOIPDFBNOIZ]; lnNdens[B3SOIPDTOTNOIZ] = log(MAX(noizDens[B3SOIPDTOTNOIZ], N_MINLOG)); *OnDens += noizDens[B3SOIPDTOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to initialize our "history" variables. */ for (i = 0; i < B3SOIPDNSRCS; i++) { here->B3SOIPDnVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i = 0; i < B3SOIPDNSRCS; i++) { here->B3SOIPDnVar[OUTNOIZ][i] = 0.0; here->B3SOIPDnVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0, we have to integrate. */ for (i = 0; i < B3SOIPDNSRCS; i++) { if (i != B3SOIPDTOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], here->B3SOIPDnVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv, lnNdens[i] + data->lnGainInv, here->B3SOIPDnVar[LNLSTDENS][i] + data->lnGainInv, data); here->B3SOIPDnVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { here->B3SOIPDnVar[OUTNOIZ][i] += tempOnoise; here->B3SOIPDnVar[OUTNOIZ][B3SOIPDTOTNOIZ] += tempOnoise; here->B3SOIPDnVar[INNOIZ][i] += tempInoise; here->B3SOIPDnVar[INNOIZ][B3SOIPDTOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i = 0; i < B3SOIPDNSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i = 0; i < B3SOIPDNSRCS; i++) { data->outpVector[data->outNumber++] = here->B3SOIPDnVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = here->B3SOIPDnVar[INNOIZ][i]; } } break; } break; case N_CLOSE: /* do nothing, the main calling routine will close */ return (OK); break; /* the plots */ } /* switch (operation) */ } /* for here */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_pd/b3soipdmask.c0000644000175000017500000014215013546075722023764 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soipdmask.c 98/5/01 Modified by Pin Su and Jan Feng 99/2/15 Modified by Pin Su 99/4/30 Modified by Wei Jin 99/9/27 Modified by Pin Su 00/3/1 Modified by Pin Su 01/2/15 Modified by Pin Su 02/3/5 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.2.3 02/3/5 Pin Su * BSIMPD2.2.3 release */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "b3soipddef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIPDmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { B3SOIPDmodel *model = (B3SOIPDmodel *)inst; NG_IGNORE(ckt); switch(which) { case B3SOIPD_MOD_MOBMOD: value->iValue = model->B3SOIPDmobMod; return(OK); case B3SOIPD_MOD_PARAMCHK: value->iValue = model->B3SOIPDparamChk; return(OK); case B3SOIPD_MOD_BINUNIT: value->iValue = model->B3SOIPDbinUnit; return(OK); case B3SOIPD_MOD_CAPMOD: value->iValue = model->B3SOIPDcapMod; return(OK); case B3SOIPD_MOD_SHMOD: value->iValue = model->B3SOIPDshMod; return(OK); case B3SOIPD_MOD_NOIMOD: value->iValue = model->B3SOIPDnoiMod; return(OK); case B3SOIPD_MOD_VERSION : value->rValue = model->B3SOIPDversion; return(OK); case B3SOIPD_MOD_TOX : value->rValue = model->B3SOIPDtox; return(OK); /* v2.2.3 */ case B3SOIPD_MOD_DTOXCV : value->rValue = model->B3SOIPDdtoxcv; return(OK); case B3SOIPD_MOD_CDSC : value->rValue = model->B3SOIPDcdsc; return(OK); case B3SOIPD_MOD_CDSCB : value->rValue = model->B3SOIPDcdscb; return(OK); case B3SOIPD_MOD_CDSCD : value->rValue = model->B3SOIPDcdscd; return(OK); case B3SOIPD_MOD_CIT : value->rValue = model->B3SOIPDcit; return(OK); case B3SOIPD_MOD_NFACTOR : value->rValue = model->B3SOIPDnfactor; return(OK); case B3SOIPD_MOD_VSAT: value->rValue = model->B3SOIPDvsat; return(OK); case B3SOIPD_MOD_AT: value->rValue = model->B3SOIPDat; return(OK); case B3SOIPD_MOD_A0: value->rValue = model->B3SOIPDa0; return(OK); case B3SOIPD_MOD_AGS: value->rValue = model->B3SOIPDags; return(OK); case B3SOIPD_MOD_A1: value->rValue = model->B3SOIPDa1; return(OK); case B3SOIPD_MOD_A2: value->rValue = model->B3SOIPDa2; return(OK); case B3SOIPD_MOD_KETA: value->rValue = model->B3SOIPDketa; return(OK); case B3SOIPD_MOD_NSUB: value->rValue = model->B3SOIPDnsub; return(OK); case B3SOIPD_MOD_NPEAK: value->rValue = model->B3SOIPDnpeak; return(OK); case B3SOIPD_MOD_NGATE: value->rValue = model->B3SOIPDngate; return(OK); case B3SOIPD_MOD_GAMMA1: value->rValue = model->B3SOIPDgamma1; return(OK); case B3SOIPD_MOD_GAMMA2: value->rValue = model->B3SOIPDgamma2; return(OK); case B3SOIPD_MOD_VBX: value->rValue = model->B3SOIPDvbx; return(OK); case B3SOIPD_MOD_VBM: value->rValue = model->B3SOIPDvbm; return(OK); case B3SOIPD_MOD_XT: value->rValue = model->B3SOIPDxt; return(OK); case B3SOIPD_MOD_K1: value->rValue = model->B3SOIPDk1; return(OK); case B3SOIPD_MOD_KT1: value->rValue = model->B3SOIPDkt1; return(OK); case B3SOIPD_MOD_KT1L: value->rValue = model->B3SOIPDkt1l; return(OK); case B3SOIPD_MOD_KT2 : value->rValue = model->B3SOIPDkt2; return(OK); case B3SOIPD_MOD_K2 : value->rValue = model->B3SOIPDk2; return(OK); case B3SOIPD_MOD_K3: value->rValue = model->B3SOIPDk3; return(OK); case B3SOIPD_MOD_K3B: value->rValue = model->B3SOIPDk3b; return(OK); case B3SOIPD_MOD_W0: value->rValue = model->B3SOIPDw0; return(OK); case B3SOIPD_MOD_NLX: value->rValue = model->B3SOIPDnlx; return(OK); case B3SOIPD_MOD_DVT0 : value->rValue = model->B3SOIPDdvt0; return(OK); case B3SOIPD_MOD_DVT1 : value->rValue = model->B3SOIPDdvt1; return(OK); case B3SOIPD_MOD_DVT2 : value->rValue = model->B3SOIPDdvt2; return(OK); case B3SOIPD_MOD_DVT0W : value->rValue = model->B3SOIPDdvt0w; return(OK); case B3SOIPD_MOD_DVT1W : value->rValue = model->B3SOIPDdvt1w; return(OK); case B3SOIPD_MOD_DVT2W : value->rValue = model->B3SOIPDdvt2w; return(OK); case B3SOIPD_MOD_DROUT : value->rValue = model->B3SOIPDdrout; return(OK); case B3SOIPD_MOD_DSUB : value->rValue = model->B3SOIPDdsub; return(OK); case B3SOIPD_MOD_VTH0: value->rValue = model->B3SOIPDvth0; return(OK); case B3SOIPD_MOD_UA: value->rValue = model->B3SOIPDua; return(OK); case B3SOIPD_MOD_UA1: value->rValue = model->B3SOIPDua1; return(OK); case B3SOIPD_MOD_UB: value->rValue = model->B3SOIPDub; return(OK); case B3SOIPD_MOD_UB1: value->rValue = model->B3SOIPDub1; return(OK); case B3SOIPD_MOD_UC: value->rValue = model->B3SOIPDuc; return(OK); case B3SOIPD_MOD_UC1: value->rValue = model->B3SOIPDuc1; return(OK); case B3SOIPD_MOD_U0: value->rValue = model->B3SOIPDu0; return(OK); case B3SOIPD_MOD_UTE: value->rValue = model->B3SOIPDute; return(OK); case B3SOIPD_MOD_VOFF: value->rValue = model->B3SOIPDvoff; return(OK); case B3SOIPD_MOD_DELTA: value->rValue = model->B3SOIPDdelta; return(OK); case B3SOIPD_MOD_RDSW: value->rValue = model->B3SOIPDrdsw; return(OK); case B3SOIPD_MOD_PRWG: value->rValue = model->B3SOIPDprwg; return(OK); case B3SOIPD_MOD_PRWB: value->rValue = model->B3SOIPDprwb; return(OK); case B3SOIPD_MOD_PRT: value->rValue = model->B3SOIPDprt; return(OK); case B3SOIPD_MOD_ETA0: value->rValue = model->B3SOIPDeta0; return(OK); case B3SOIPD_MOD_ETAB: value->rValue = model->B3SOIPDetab; return(OK); case B3SOIPD_MOD_PCLM: value->rValue = model->B3SOIPDpclm; return(OK); case B3SOIPD_MOD_PDIBL1: value->rValue = model->B3SOIPDpdibl1; return(OK); case B3SOIPD_MOD_PDIBL2: value->rValue = model->B3SOIPDpdibl2; return(OK); case B3SOIPD_MOD_PDIBLB: value->rValue = model->B3SOIPDpdiblb; return(OK); case B3SOIPD_MOD_PVAG: value->rValue = model->B3SOIPDpvag; return(OK); case B3SOIPD_MOD_WR: value->rValue = model->B3SOIPDwr; return(OK); case B3SOIPD_MOD_DWG: value->rValue = model->B3SOIPDdwg; return(OK); case B3SOIPD_MOD_DWB: value->rValue = model->B3SOIPDdwb; return(OK); case B3SOIPD_MOD_B0: value->rValue = model->B3SOIPDb0; return(OK); case B3SOIPD_MOD_B1: value->rValue = model->B3SOIPDb1; return(OK); case B3SOIPD_MOD_ALPHA0: value->rValue = model->B3SOIPDalpha0; return(OK); case B3SOIPD_MOD_CGSL: value->rValue = model->B3SOIPDcgsl; return(OK); case B3SOIPD_MOD_CGDL: value->rValue = model->B3SOIPDcgdl; return(OK); case B3SOIPD_MOD_CKAPPA: value->rValue = model->B3SOIPDckappa; return(OK); case B3SOIPD_MOD_CF: value->rValue = model->B3SOIPDcf; return(OK); case B3SOIPD_MOD_CLC: value->rValue = model->B3SOIPDclc; return(OK); case B3SOIPD_MOD_CLE: value->rValue = model->B3SOIPDcle; return(OK); case B3SOIPD_MOD_DWC: value->rValue = model->B3SOIPDdwc; return(OK); case B3SOIPD_MOD_DLC: value->rValue = model->B3SOIPDdlc; return(OK); case B3SOIPD_MOD_TBOX: value->rValue = model->B3SOIPDtbox; return(OK); case B3SOIPD_MOD_TSI: value->rValue = model->B3SOIPDtsi; return(OK); case B3SOIPD_MOD_RTH0: value->rValue = model->B3SOIPDrth0; return(OK); case B3SOIPD_MOD_CTH0: value->rValue = model->B3SOIPDcth0; return(OK); case B3SOIPD_MOD_NDIODE: value->rValue = model->B3SOIPDndiode; return(OK); case B3SOIPD_MOD_XBJT: value->rValue = model->B3SOIPDxbjt; return(OK); case B3SOIPD_MOD_XDIF: value->rValue = model->B3SOIPDxdif; return(OK); case B3SOIPD_MOD_XREC: value->rValue = model->B3SOIPDxrec; return(OK); case B3SOIPD_MOD_XTUN: value->rValue = model->B3SOIPDxtun; return(OK); case B3SOIPD_MOD_TT: value->rValue = model->B3SOIPDtt; return(OK); case B3SOIPD_MOD_VSDTH: value->rValue = model->B3SOIPDvsdth; return(OK); case B3SOIPD_MOD_VSDFB: value->rValue = model->B3SOIPDvsdfb; return(OK); case B3SOIPD_MOD_CSDMIN: value->rValue = model->B3SOIPDcsdmin; return(OK); case B3SOIPD_MOD_ASD: value->rValue = model->B3SOIPDasd; return(OK); case B3SOIPD_MOD_TNOM : value->rValue = model->B3SOIPDtnom; return(OK); case B3SOIPD_MOD_CGSO: value->rValue = model->B3SOIPDcgso; return(OK); case B3SOIPD_MOD_CGDO: value->rValue = model->B3SOIPDcgdo; return(OK); case B3SOIPD_MOD_CGEO: value->rValue = model->B3SOIPDcgeo; return(OK); case B3SOIPD_MOD_XPART: value->rValue = model->B3SOIPDxpart; return(OK); case B3SOIPD_MOD_RSH: value->rValue = model->B3SOIPDsheetResistance; return(OK); case B3SOIPD_MOD_PBSWG: value->rValue = model->B3SOIPDGatesidewallJctPotential; return(OK); case B3SOIPD_MOD_MJSWG: value->rValue = model->B3SOIPDbodyJctGateSideGradingCoeff; return(OK); case B3SOIPD_MOD_CJSWG: value->rValue = model->B3SOIPDunitLengthGateSidewallJctCap; return(OK); case B3SOIPD_MOD_CSDESW: value->rValue = model->B3SOIPDcsdesw; return(OK); case B3SOIPD_MOD_LINT: value->rValue = model->B3SOIPDLint; return(OK); case B3SOIPD_MOD_LL: value->rValue = model->B3SOIPDLl; return(OK); /* v2.2.3 */ case B3SOIPD_MOD_LLC: value->rValue = model->B3SOIPDLlc; return(OK); case B3SOIPD_MOD_LLN: value->rValue = model->B3SOIPDLln; return(OK); case B3SOIPD_MOD_LW: value->rValue = model->B3SOIPDLw; return(OK); /* v2.2.3 */ case B3SOIPD_MOD_LWC: value->rValue = model->B3SOIPDLwc; return(OK); case B3SOIPD_MOD_LWN: value->rValue = model->B3SOIPDLwn; return(OK); case B3SOIPD_MOD_LWL: value->rValue = model->B3SOIPDLwl; return(OK); /* v2.2.3 */ case B3SOIPD_MOD_LWLC: value->rValue = model->B3SOIPDLwlc; return(OK); case B3SOIPD_MOD_WINT: value->rValue = model->B3SOIPDWint; return(OK); case B3SOIPD_MOD_WL: value->rValue = model->B3SOIPDWl; return(OK); /* v2.2.3 */ case B3SOIPD_MOD_WLC: value->rValue = model->B3SOIPDWlc; return(OK); case B3SOIPD_MOD_WLN: value->rValue = model->B3SOIPDWln; return(OK); case B3SOIPD_MOD_WW: value->rValue = model->B3SOIPDWw; return(OK); /* v2.2.3 */ case B3SOIPD_MOD_WWC: value->rValue = model->B3SOIPDWwc; return(OK); case B3SOIPD_MOD_WWN: value->rValue = model->B3SOIPDWwn; return(OK); case B3SOIPD_MOD_WWL: value->rValue = model->B3SOIPDWwl; return(OK); /* v2.2.3 */ case B3SOIPD_MOD_WWLC: value->rValue = model->B3SOIPDWwlc; return(OK); case B3SOIPD_MOD_NOIA: value->rValue = model->B3SOIPDoxideTrapDensityA; return(OK); case B3SOIPD_MOD_NOIB: value->rValue = model->B3SOIPDoxideTrapDensityB; return(OK); case B3SOIPD_MOD_NOIC: value->rValue = model->B3SOIPDoxideTrapDensityC; return(OK); case B3SOIPD_MOD_NOIF: value->rValue = model->B3SOIPDnoif; return(OK); case B3SOIPD_MOD_EM: value->rValue = model->B3SOIPDem; return(OK); case B3SOIPD_MOD_EF: value->rValue = model->B3SOIPDef; return(OK); case B3SOIPD_MOD_AF: value->rValue = model->B3SOIPDaf; return(OK); case B3SOIPD_MOD_KF: value->rValue = model->B3SOIPDkf; return(OK); /* v2.0 release */ case B3SOIPD_MOD_K1W1: value->rValue = model->B3SOIPDk1w1; return(OK); case B3SOIPD_MOD_K1W2: value->rValue = model->B3SOIPDk1w2; return(OK); case B3SOIPD_MOD_KETAS: value->rValue = model->B3SOIPDketas; return(OK); case B3SOIPD_MOD_DWBC: value->rValue = model->B3SOIPDdwbc; return(OK); case B3SOIPD_MOD_BETA0: value->rValue = model->B3SOIPDbeta0; return(OK); case B3SOIPD_MOD_BETA1: value->rValue = model->B3SOIPDbeta1; return(OK); case B3SOIPD_MOD_BETA2: value->rValue = model->B3SOIPDbeta2; return(OK); case B3SOIPD_MOD_VDSATII0: value->rValue = model->B3SOIPDvdsatii0; return(OK); case B3SOIPD_MOD_TII: value->rValue = model->B3SOIPDtii; return(OK); case B3SOIPD_MOD_LII: value->rValue = model->B3SOIPDlii; return(OK); case B3SOIPD_MOD_SII0: value->rValue = model->B3SOIPDsii0; return(OK); case B3SOIPD_MOD_SII1: value->rValue = model->B3SOIPDsii1; return(OK); case B3SOIPD_MOD_SII2: value->rValue = model->B3SOIPDsii2; return(OK); case B3SOIPD_MOD_SIID: value->rValue = model->B3SOIPDsiid; return(OK); case B3SOIPD_MOD_FBJTII: value->rValue = model->B3SOIPDfbjtii; return(OK); case B3SOIPD_MOD_ESATII: value->rValue = model->B3SOIPDesatii; return(OK); case B3SOIPD_MOD_NTUN: value->rValue = model->B3SOIPDntun; return(OK); case B3SOIPD_MOD_NRECF0: value->rValue = model->B3SOIPDnrecf0; return(OK); case B3SOIPD_MOD_NRECR0: value->rValue = model->B3SOIPDnrecr0; return(OK); case B3SOIPD_MOD_ISBJT: value->rValue = model->B3SOIPDisbjt; return(OK); case B3SOIPD_MOD_ISDIF: value->rValue = model->B3SOIPDisdif; return(OK); case B3SOIPD_MOD_ISREC: value->rValue = model->B3SOIPDisrec; return(OK); case B3SOIPD_MOD_ISTUN: value->rValue = model->B3SOIPDistun; return(OK); case B3SOIPD_MOD_LN: value->rValue = model->B3SOIPDln; return(OK); case B3SOIPD_MOD_VREC0: value->rValue = model->B3SOIPDvrec0; return(OK); case B3SOIPD_MOD_VTUN0: value->rValue = model->B3SOIPDvtun0; return(OK); case B3SOIPD_MOD_NBJT: value->rValue = model->B3SOIPDnbjt; return(OK); case B3SOIPD_MOD_LBJT0: value->rValue = model->B3SOIPDlbjt0; return(OK); case B3SOIPD_MOD_LDIF0: value->rValue = model->B3SOIPDldif0; return(OK); case B3SOIPD_MOD_VABJT: value->rValue = model->B3SOIPDvabjt; return(OK); case B3SOIPD_MOD_AELY: value->rValue = model->B3SOIPDaely; return(OK); case B3SOIPD_MOD_AHLI: value->rValue = model->B3SOIPDahli; return(OK); case B3SOIPD_MOD_RBODY: value->rValue = model->B3SOIPDrbody; return(OK); case B3SOIPD_MOD_RBSH: value->rValue = model->B3SOIPDrbsh; return(OK); case B3SOIPD_MOD_NTRECF: value->rValue = model->B3SOIPDntrecf; return(OK); case B3SOIPD_MOD_NTRECR: value->rValue = model->B3SOIPDntrecr; return(OK); case B3SOIPD_MOD_NDIF: value->rValue = model->B3SOIPDndif; return(OK); case B3SOIPD_MOD_DLCB: value->rValue = model->B3SOIPDdlcb; return(OK); case B3SOIPD_MOD_FBODY: value->rValue = model->B3SOIPDfbody; return(OK); case B3SOIPD_MOD_TCJSWG: value->rValue = model->B3SOIPDtcjswg; return(OK); case B3SOIPD_MOD_TPBSWG: value->rValue = model->B3SOIPDtpbswg; return(OK); case B3SOIPD_MOD_ACDE: value->rValue = model->B3SOIPDacde; return(OK); case B3SOIPD_MOD_MOIN: value->rValue = model->B3SOIPDmoin; return(OK); case B3SOIPD_MOD_DELVT: value->rValue = model->B3SOIPDdelvt; return(OK); case B3SOIPD_MOD_KB1: value->rValue = model->B3SOIPDkb1; return(OK); case B3SOIPD_MOD_DLBG: value->rValue = model->B3SOIPDdlbg; return(OK); case B3SOIPD_MOD_NGIDL: value->rValue = model->B3SOIPDngidl; return(OK); case B3SOIPD_MOD_AGIDL: value->rValue = model->B3SOIPDagidl; return(OK); case B3SOIPD_MOD_BGIDL: value->rValue = model->B3SOIPDbgidl; return(OK); /* v2.2 release */ case B3SOIPD_MOD_WTH0: value->rValue = model->B3SOIPDwth0; return(OK); case B3SOIPD_MOD_RHALO: value->rValue = model->B3SOIPDrhalo; return(OK); case B3SOIPD_MOD_NTOX: value->rValue = model->B3SOIPDntox; return(OK); case B3SOIPD_MOD_TOXREF: value->rValue = model->B3SOIPDtoxref; return(OK); case B3SOIPD_MOD_EBG: value->rValue = model->B3SOIPDebg; return(OK); case B3SOIPD_MOD_VEVB: value->rValue = model->B3SOIPDvevb; return(OK); case B3SOIPD_MOD_ALPHAGB1: value->rValue = model->B3SOIPDalphaGB1; return(OK); case B3SOIPD_MOD_BETAGB1: value->rValue = model->B3SOIPDbetaGB1; return(OK); case B3SOIPD_MOD_VGB1: value->rValue = model->B3SOIPDvgb1; return(OK); case B3SOIPD_MOD_VECB: value->rValue = model->B3SOIPDvecb; return(OK); case B3SOIPD_MOD_ALPHAGB2: value->rValue = model->B3SOIPDalphaGB2; return(OK); case B3SOIPD_MOD_BETAGB2: value->rValue = model->B3SOIPDbetaGB2; return(OK); case B3SOIPD_MOD_VGB2: value->rValue = model->B3SOIPDvgb2; return(OK); case B3SOIPD_MOD_TOXQM: value->rValue = model->B3SOIPDtoxqm; return(OK); case B3SOIPD_MOD_VOXH: value->rValue = model->B3SOIPDvoxh; return(OK); case B3SOIPD_MOD_DELTAVOX: value->rValue = model->B3SOIPDdeltavox; return(OK); case B3SOIPD_MOD_IGMOD: value->iValue = model->B3SOIPDigMod; return(OK); /* Added for binning - START */ /* Length Dependence */ case B3SOIPD_MOD_LNPEAK: value->rValue = model->B3SOIPDlnpeak; return(OK); case B3SOIPD_MOD_LNSUB: value->rValue = model->B3SOIPDlnsub; return(OK); case B3SOIPD_MOD_LNGATE: value->rValue = model->B3SOIPDlngate; return(OK); case B3SOIPD_MOD_LVTH0: value->rValue = model->B3SOIPDlvth0; return(OK); case B3SOIPD_MOD_LK1: value->rValue = model->B3SOIPDlk1; return(OK); case B3SOIPD_MOD_LK1W1: value->rValue = model->B3SOIPDlk1w1; return(OK); case B3SOIPD_MOD_LK1W2: value->rValue = model->B3SOIPDlk1w2; return(OK); case B3SOIPD_MOD_LK2: value->rValue = model->B3SOIPDlk2; return(OK); case B3SOIPD_MOD_LK3: value->rValue = model->B3SOIPDlk3; return(OK); case B3SOIPD_MOD_LK3B: value->rValue = model->B3SOIPDlk3b; return(OK); case B3SOIPD_MOD_LKB1: value->rValue = model->B3SOIPDlkb1; return(OK); case B3SOIPD_MOD_LW0: value->rValue = model->B3SOIPDlw0; return(OK); case B3SOIPD_MOD_LNLX: value->rValue = model->B3SOIPDlnlx; return(OK); case B3SOIPD_MOD_LDVT0 : value->rValue = model->B3SOIPDldvt0; return(OK); case B3SOIPD_MOD_LDVT1 : value->rValue = model->B3SOIPDldvt1; return(OK); case B3SOIPD_MOD_LDVT2 : value->rValue = model->B3SOIPDldvt2; return(OK); case B3SOIPD_MOD_LDVT0W : value->rValue = model->B3SOIPDldvt0w; return(OK); case B3SOIPD_MOD_LDVT1W : value->rValue = model->B3SOIPDldvt1w; return(OK); case B3SOIPD_MOD_LDVT2W : value->rValue = model->B3SOIPDldvt2w; return(OK); case B3SOIPD_MOD_LU0: value->rValue = model->B3SOIPDlu0; return(OK); case B3SOIPD_MOD_LUA: value->rValue = model->B3SOIPDlua; return(OK); case B3SOIPD_MOD_LUB: value->rValue = model->B3SOIPDlub; return(OK); case B3SOIPD_MOD_LUC: value->rValue = model->B3SOIPDluc; return(OK); case B3SOIPD_MOD_LVSAT: value->rValue = model->B3SOIPDlvsat; return(OK); case B3SOIPD_MOD_LA0: value->rValue = model->B3SOIPDla0; return(OK); case B3SOIPD_MOD_LAGS: value->rValue = model->B3SOIPDlags; return(OK); case B3SOIPD_MOD_LB0: value->rValue = model->B3SOIPDlb0; return(OK); case B3SOIPD_MOD_LB1: value->rValue = model->B3SOIPDlb1; return(OK); case B3SOIPD_MOD_LKETA: value->rValue = model->B3SOIPDlketa; return(OK); case B3SOIPD_MOD_LKETAS: value->rValue = model->B3SOIPDlketas; return(OK); case B3SOIPD_MOD_LA1: value->rValue = model->B3SOIPDla1; return(OK); case B3SOIPD_MOD_LA2: value->rValue = model->B3SOIPDla2; return(OK); case B3SOIPD_MOD_LRDSW: value->rValue = model->B3SOIPDlrdsw; return(OK); case B3SOIPD_MOD_LPRWB: value->rValue = model->B3SOIPDlprwb; return(OK); case B3SOIPD_MOD_LPRWG: value->rValue = model->B3SOIPDlprwg; return(OK); case B3SOIPD_MOD_LWR: value->rValue = model->B3SOIPDlwr; return(OK); case B3SOIPD_MOD_LNFACTOR : value->rValue = model->B3SOIPDlnfactor; return(OK); case B3SOIPD_MOD_LDWG: value->rValue = model->B3SOIPDldwg; return(OK); case B3SOIPD_MOD_LDWB: value->rValue = model->B3SOIPDldwb; return(OK); case B3SOIPD_MOD_LVOFF: value->rValue = model->B3SOIPDlvoff; return(OK); case B3SOIPD_MOD_LETA0: value->rValue = model->B3SOIPDleta0; return(OK); case B3SOIPD_MOD_LETAB: value->rValue = model->B3SOIPDletab; return(OK); case B3SOIPD_MOD_LDSUB : value->rValue = model->B3SOIPDldsub; return(OK); case B3SOIPD_MOD_LCIT : value->rValue = model->B3SOIPDlcit; return(OK); case B3SOIPD_MOD_LCDSC : value->rValue = model->B3SOIPDlcdsc; return(OK); case B3SOIPD_MOD_LCDSCB : value->rValue = model->B3SOIPDlcdscb; return(OK); case B3SOIPD_MOD_LCDSCD : value->rValue = model->B3SOIPDlcdscd; return(OK); case B3SOIPD_MOD_LPCLM: value->rValue = model->B3SOIPDlpclm; return(OK); case B3SOIPD_MOD_LPDIBL1: value->rValue = model->B3SOIPDlpdibl1; return(OK); case B3SOIPD_MOD_LPDIBL2: value->rValue = model->B3SOIPDlpdibl2; return(OK); case B3SOIPD_MOD_LPDIBLB: value->rValue = model->B3SOIPDlpdiblb; return(OK); case B3SOIPD_MOD_LDROUT : value->rValue = model->B3SOIPDldrout; return(OK); case B3SOIPD_MOD_LPVAG: value->rValue = model->B3SOIPDlpvag; return(OK); case B3SOIPD_MOD_LDELTA: value->rValue = model->B3SOIPDldelta; return(OK); case B3SOIPD_MOD_LALPHA0: value->rValue = model->B3SOIPDlalpha0; return(OK); case B3SOIPD_MOD_LFBJTII: value->rValue = model->B3SOIPDlfbjtii; return(OK); case B3SOIPD_MOD_LBETA0: value->rValue = model->B3SOIPDlbeta0; return(OK); case B3SOIPD_MOD_LBETA1: value->rValue = model->B3SOIPDlbeta1; return(OK); case B3SOIPD_MOD_LBETA2: value->rValue = model->B3SOIPDlbeta2; return(OK); case B3SOIPD_MOD_LVDSATII0: value->rValue = model->B3SOIPDlvdsatii0; return(OK); case B3SOIPD_MOD_LLII: value->rValue = model->B3SOIPDllii; return(OK); case B3SOIPD_MOD_LESATII: value->rValue = model->B3SOIPDlesatii; return(OK); case B3SOIPD_MOD_LSII0: value->rValue = model->B3SOIPDlsii0; return(OK); case B3SOIPD_MOD_LSII1: value->rValue = model->B3SOIPDlsii1; return(OK); case B3SOIPD_MOD_LSII2: value->rValue = model->B3SOIPDlsii2; return(OK); case B3SOIPD_MOD_LSIID: value->rValue = model->B3SOIPDlsiid; return(OK); case B3SOIPD_MOD_LAGIDL: value->rValue = model->B3SOIPDlagidl; return(OK); case B3SOIPD_MOD_LBGIDL: value->rValue = model->B3SOIPDlbgidl; return(OK); case B3SOIPD_MOD_LNGIDL: value->rValue = model->B3SOIPDlngidl; return(OK); case B3SOIPD_MOD_LNTUN: value->rValue = model->B3SOIPDlntun; return(OK); case B3SOIPD_MOD_LNDIODE: value->rValue = model->B3SOIPDlndiode; return(OK); case B3SOIPD_MOD_LNRECF0: value->rValue = model->B3SOIPDlnrecf0; return(OK); case B3SOIPD_MOD_LNRECR0: value->rValue = model->B3SOIPDlnrecr0; return(OK); case B3SOIPD_MOD_LISBJT: value->rValue = model->B3SOIPDlisbjt; return(OK); case B3SOIPD_MOD_LISDIF: value->rValue = model->B3SOIPDlisdif; return(OK); case B3SOIPD_MOD_LISREC: value->rValue = model->B3SOIPDlisrec; return(OK); case B3SOIPD_MOD_LISTUN: value->rValue = model->B3SOIPDlistun; return(OK); case B3SOIPD_MOD_LVREC0: value->rValue = model->B3SOIPDlvrec0; return(OK); case B3SOIPD_MOD_LVTUN0: value->rValue = model->B3SOIPDlvtun0; return(OK); case B3SOIPD_MOD_LNBJT: value->rValue = model->B3SOIPDlnbjt; return(OK); case B3SOIPD_MOD_LLBJT0: value->rValue = model->B3SOIPDllbjt0; return(OK); case B3SOIPD_MOD_LVABJT: value->rValue = model->B3SOIPDlvabjt; return(OK); case B3SOIPD_MOD_LAELY: value->rValue = model->B3SOIPDlaely; return(OK); case B3SOIPD_MOD_LAHLI: value->rValue = model->B3SOIPDlahli; return(OK); /* CV Model */ case B3SOIPD_MOD_LVSDFB: value->rValue = model->B3SOIPDlvsdfb; return(OK); case B3SOIPD_MOD_LVSDTH: value->rValue = model->B3SOIPDlvsdth; return(OK); case B3SOIPD_MOD_LDELVT: value->rValue = model->B3SOIPDldelvt; return(OK); case B3SOIPD_MOD_LACDE: value->rValue = model->B3SOIPDlacde; return(OK); case B3SOIPD_MOD_LMOIN: value->rValue = model->B3SOIPDlmoin; return(OK); /* Width Dependence */ case B3SOIPD_MOD_WNPEAK: value->rValue = model->B3SOIPDwnpeak; return(OK); case B3SOIPD_MOD_WNSUB: value->rValue = model->B3SOIPDwnsub; return(OK); case B3SOIPD_MOD_WNGATE: value->rValue = model->B3SOIPDwngate; return(OK); case B3SOIPD_MOD_WVTH0: value->rValue = model->B3SOIPDwvth0; return(OK); case B3SOIPD_MOD_WK1: value->rValue = model->B3SOIPDwk1; return(OK); case B3SOIPD_MOD_WK1W1: value->rValue = model->B3SOIPDwk1w1; return(OK); case B3SOIPD_MOD_WK1W2: value->rValue = model->B3SOIPDwk1w2; return(OK); case B3SOIPD_MOD_WK2: value->rValue = model->B3SOIPDwk2; return(OK); case B3SOIPD_MOD_WK3: value->rValue = model->B3SOIPDwk3; return(OK); case B3SOIPD_MOD_WK3B: value->rValue = model->B3SOIPDwk3b; return(OK); case B3SOIPD_MOD_WKB1: value->rValue = model->B3SOIPDwkb1; return(OK); case B3SOIPD_MOD_WW0: value->rValue = model->B3SOIPDww0; return(OK); case B3SOIPD_MOD_WNLX: value->rValue = model->B3SOIPDwnlx; return(OK); case B3SOIPD_MOD_WDVT0 : value->rValue = model->B3SOIPDwdvt0; return(OK); case B3SOIPD_MOD_WDVT1 : value->rValue = model->B3SOIPDwdvt1; return(OK); case B3SOIPD_MOD_WDVT2 : value->rValue = model->B3SOIPDwdvt2; return(OK); case B3SOIPD_MOD_WDVT0W : value->rValue = model->B3SOIPDwdvt0w; return(OK); case B3SOIPD_MOD_WDVT1W : value->rValue = model->B3SOIPDwdvt1w; return(OK); case B3SOIPD_MOD_WDVT2W : value->rValue = model->B3SOIPDwdvt2w; return(OK); case B3SOIPD_MOD_WU0: value->rValue = model->B3SOIPDwu0; return(OK); case B3SOIPD_MOD_WUA: value->rValue = model->B3SOIPDwua; return(OK); case B3SOIPD_MOD_WUB: value->rValue = model->B3SOIPDwub; return(OK); case B3SOIPD_MOD_WUC: value->rValue = model->B3SOIPDwuc; return(OK); case B3SOIPD_MOD_WVSAT: value->rValue = model->B3SOIPDwvsat; return(OK); case B3SOIPD_MOD_WA0: value->rValue = model->B3SOIPDwa0; return(OK); case B3SOIPD_MOD_WAGS: value->rValue = model->B3SOIPDwags; return(OK); case B3SOIPD_MOD_WB0: value->rValue = model->B3SOIPDwb0; return(OK); case B3SOIPD_MOD_WB1: value->rValue = model->B3SOIPDwb1; return(OK); case B3SOIPD_MOD_WKETA: value->rValue = model->B3SOIPDwketa; return(OK); case B3SOIPD_MOD_WKETAS: value->rValue = model->B3SOIPDwketas; return(OK); case B3SOIPD_MOD_WA1: value->rValue = model->B3SOIPDwa1; return(OK); case B3SOIPD_MOD_WA2: value->rValue = model->B3SOIPDwa2; return(OK); case B3SOIPD_MOD_WRDSW: value->rValue = model->B3SOIPDwrdsw; return(OK); case B3SOIPD_MOD_WPRWB: value->rValue = model->B3SOIPDwprwb; return(OK); case B3SOIPD_MOD_WPRWG: value->rValue = model->B3SOIPDwprwg; return(OK); case B3SOIPD_MOD_WWR: value->rValue = model->B3SOIPDwwr; return(OK); case B3SOIPD_MOD_WNFACTOR : value->rValue = model->B3SOIPDwnfactor; return(OK); case B3SOIPD_MOD_WDWG: value->rValue = model->B3SOIPDwdwg; return(OK); case B3SOIPD_MOD_WDWB: value->rValue = model->B3SOIPDwdwb; return(OK); case B3SOIPD_MOD_WVOFF: value->rValue = model->B3SOIPDwvoff; return(OK); case B3SOIPD_MOD_WETA0: value->rValue = model->B3SOIPDweta0; return(OK); case B3SOIPD_MOD_WETAB: value->rValue = model->B3SOIPDwetab; return(OK); case B3SOIPD_MOD_WDSUB : value->rValue = model->B3SOIPDwdsub; return(OK); case B3SOIPD_MOD_WCIT : value->rValue = model->B3SOIPDwcit; return(OK); case B3SOIPD_MOD_WCDSC : value->rValue = model->B3SOIPDwcdsc; return(OK); case B3SOIPD_MOD_WCDSCB : value->rValue = model->B3SOIPDwcdscb; return(OK); case B3SOIPD_MOD_WCDSCD : value->rValue = model->B3SOIPDwcdscd; return(OK); case B3SOIPD_MOD_WPCLM: value->rValue = model->B3SOIPDwpclm; return(OK); case B3SOIPD_MOD_WPDIBL1: value->rValue = model->B3SOIPDwpdibl1; return(OK); case B3SOIPD_MOD_WPDIBL2: value->rValue = model->B3SOIPDwpdibl2; return(OK); case B3SOIPD_MOD_WPDIBLB: value->rValue = model->B3SOIPDwpdiblb; return(OK); case B3SOIPD_MOD_WDROUT : value->rValue = model->B3SOIPDwdrout; return(OK); case B3SOIPD_MOD_WPVAG: value->rValue = model->B3SOIPDwpvag; return(OK); case B3SOIPD_MOD_WDELTA: value->rValue = model->B3SOIPDwdelta; return(OK); case B3SOIPD_MOD_WALPHA0: value->rValue = model->B3SOIPDwalpha0; return(OK); case B3SOIPD_MOD_WFBJTII: value->rValue = model->B3SOIPDwfbjtii; return(OK); case B3SOIPD_MOD_WBETA0: value->rValue = model->B3SOIPDwbeta0; return(OK); case B3SOIPD_MOD_WBETA1: value->rValue = model->B3SOIPDwbeta1; return(OK); case B3SOIPD_MOD_WBETA2: value->rValue = model->B3SOIPDwbeta2; return(OK); case B3SOIPD_MOD_WVDSATII0: value->rValue = model->B3SOIPDwvdsatii0; return(OK); case B3SOIPD_MOD_WLII: value->rValue = model->B3SOIPDwlii; return(OK); case B3SOIPD_MOD_WESATII: value->rValue = model->B3SOIPDwesatii; return(OK); case B3SOIPD_MOD_WSII0: value->rValue = model->B3SOIPDwsii0; return(OK); case B3SOIPD_MOD_WSII1: value->rValue = model->B3SOIPDwsii1; return(OK); case B3SOIPD_MOD_WSII2: value->rValue = model->B3SOIPDwsii2; return(OK); case B3SOIPD_MOD_WSIID: value->rValue = model->B3SOIPDwsiid; return(OK); case B3SOIPD_MOD_WAGIDL: value->rValue = model->B3SOIPDwagidl; return(OK); case B3SOIPD_MOD_WBGIDL: value->rValue = model->B3SOIPDwbgidl; return(OK); case B3SOIPD_MOD_WNGIDL: value->rValue = model->B3SOIPDwngidl; return(OK); case B3SOIPD_MOD_WNTUN: value->rValue = model->B3SOIPDwntun; return(OK); case B3SOIPD_MOD_WNDIODE: value->rValue = model->B3SOIPDwndiode; return(OK); case B3SOIPD_MOD_WNRECF0: value->rValue = model->B3SOIPDwnrecf0; return(OK); case B3SOIPD_MOD_WNRECR0: value->rValue = model->B3SOIPDwnrecr0; return(OK); case B3SOIPD_MOD_WISBJT: value->rValue = model->B3SOIPDwisbjt; return(OK); case B3SOIPD_MOD_WISDIF: value->rValue = model->B3SOIPDwisdif; return(OK); case B3SOIPD_MOD_WISREC: value->rValue = model->B3SOIPDwisrec; return(OK); case B3SOIPD_MOD_WISTUN: value->rValue = model->B3SOIPDwistun; return(OK); case B3SOIPD_MOD_WVREC0: value->rValue = model->B3SOIPDwvrec0; return(OK); case B3SOIPD_MOD_WVTUN0: value->rValue = model->B3SOIPDwvtun0; return(OK); case B3SOIPD_MOD_WNBJT: value->rValue = model->B3SOIPDwnbjt; return(OK); case B3SOIPD_MOD_WLBJT0: value->rValue = model->B3SOIPDwlbjt0; return(OK); case B3SOIPD_MOD_WVABJT: value->rValue = model->B3SOIPDwvabjt; return(OK); case B3SOIPD_MOD_WAELY: value->rValue = model->B3SOIPDwaely; return(OK); case B3SOIPD_MOD_WAHLI: value->rValue = model->B3SOIPDwahli; return(OK); /* CV Model */ case B3SOIPD_MOD_WVSDFB: value->rValue = model->B3SOIPDwvsdfb; return(OK); case B3SOIPD_MOD_WVSDTH: value->rValue = model->B3SOIPDwvsdth; return(OK); case B3SOIPD_MOD_WDELVT: value->rValue = model->B3SOIPDwdelvt; return(OK); case B3SOIPD_MOD_WACDE: value->rValue = model->B3SOIPDwacde; return(OK); case B3SOIPD_MOD_WMOIN: value->rValue = model->B3SOIPDwmoin; return(OK); /* Cross-term Dependence */ case B3SOIPD_MOD_PNPEAK: value->rValue = model->B3SOIPDpnpeak; return(OK); case B3SOIPD_MOD_PNSUB: value->rValue = model->B3SOIPDpnsub; return(OK); case B3SOIPD_MOD_PNGATE: value->rValue = model->B3SOIPDpngate; return(OK); case B3SOIPD_MOD_PVTH0: value->rValue = model->B3SOIPDpvth0; return(OK); case B3SOIPD_MOD_PK1: value->rValue = model->B3SOIPDpk1; return(OK); case B3SOIPD_MOD_PK1W1: value->rValue = model->B3SOIPDpk1w1; return(OK); case B3SOIPD_MOD_PK1W2: value->rValue = model->B3SOIPDpk1w2; return(OK); case B3SOIPD_MOD_PK2: value->rValue = model->B3SOIPDpk2; return(OK); case B3SOIPD_MOD_PK3: value->rValue = model->B3SOIPDpk3; return(OK); case B3SOIPD_MOD_PK3B: value->rValue = model->B3SOIPDpk3b; return(OK); case B3SOIPD_MOD_PKB1: value->rValue = model->B3SOIPDpkb1; return(OK); case B3SOIPD_MOD_PW0: value->rValue = model->B3SOIPDpw0; return(OK); case B3SOIPD_MOD_PNLX: value->rValue = model->B3SOIPDpnlx; return(OK); case B3SOIPD_MOD_PDVT0 : value->rValue = model->B3SOIPDpdvt0; return(OK); case B3SOIPD_MOD_PDVT1 : value->rValue = model->B3SOIPDpdvt1; return(OK); case B3SOIPD_MOD_PDVT2 : value->rValue = model->B3SOIPDpdvt2; return(OK); case B3SOIPD_MOD_PDVT0W : value->rValue = model->B3SOIPDpdvt0w; return(OK); case B3SOIPD_MOD_PDVT1W : value->rValue = model->B3SOIPDpdvt1w; return(OK); case B3SOIPD_MOD_PDVT2W : value->rValue = model->B3SOIPDpdvt2w; return(OK); case B3SOIPD_MOD_PU0: value->rValue = model->B3SOIPDpu0; return(OK); case B3SOIPD_MOD_PUA: value->rValue = model->B3SOIPDpua; return(OK); case B3SOIPD_MOD_PUB: value->rValue = model->B3SOIPDpub; return(OK); case B3SOIPD_MOD_PUC: value->rValue = model->B3SOIPDpuc; return(OK); case B3SOIPD_MOD_PVSAT: value->rValue = model->B3SOIPDpvsat; return(OK); case B3SOIPD_MOD_PA0: value->rValue = model->B3SOIPDpa0; return(OK); case B3SOIPD_MOD_PAGS: value->rValue = model->B3SOIPDpags; return(OK); case B3SOIPD_MOD_PB0: value->rValue = model->B3SOIPDpb0; return(OK); case B3SOIPD_MOD_PB1: value->rValue = model->B3SOIPDpb1; return(OK); case B3SOIPD_MOD_PKETA: value->rValue = model->B3SOIPDpketa; return(OK); case B3SOIPD_MOD_PKETAS: value->rValue = model->B3SOIPDpketas; return(OK); case B3SOIPD_MOD_PA1: value->rValue = model->B3SOIPDpa1; return(OK); case B3SOIPD_MOD_PA2: value->rValue = model->B3SOIPDpa2; return(OK); case B3SOIPD_MOD_PRDSW: value->rValue = model->B3SOIPDprdsw; return(OK); case B3SOIPD_MOD_PPRWB: value->rValue = model->B3SOIPDpprwb; return(OK); case B3SOIPD_MOD_PPRWG: value->rValue = model->B3SOIPDpprwg; return(OK); case B3SOIPD_MOD_PWR: value->rValue = model->B3SOIPDpwr; return(OK); case B3SOIPD_MOD_PNFACTOR : value->rValue = model->B3SOIPDpnfactor; return(OK); case B3SOIPD_MOD_PDWG: value->rValue = model->B3SOIPDpdwg; return(OK); case B3SOIPD_MOD_PDWB: value->rValue = model->B3SOIPDpdwb; return(OK); case B3SOIPD_MOD_PVOFF: value->rValue = model->B3SOIPDpvoff; return(OK); case B3SOIPD_MOD_PETA0: value->rValue = model->B3SOIPDpeta0; return(OK); case B3SOIPD_MOD_PETAB: value->rValue = model->B3SOIPDpetab; return(OK); case B3SOIPD_MOD_PDSUB : value->rValue = model->B3SOIPDpdsub; return(OK); case B3SOIPD_MOD_PCIT : value->rValue = model->B3SOIPDpcit; return(OK); case B3SOIPD_MOD_PCDSC : value->rValue = model->B3SOIPDpcdsc; return(OK); case B3SOIPD_MOD_PCDSCB : value->rValue = model->B3SOIPDpcdscb; return(OK); case B3SOIPD_MOD_PCDSCD : value->rValue = model->B3SOIPDpcdscd; return(OK); case B3SOIPD_MOD_PPCLM: value->rValue = model->B3SOIPDppclm; return(OK); case B3SOIPD_MOD_PPDIBL1: value->rValue = model->B3SOIPDppdibl1; return(OK); case B3SOIPD_MOD_PPDIBL2: value->rValue = model->B3SOIPDppdibl2; return(OK); case B3SOIPD_MOD_PPDIBLB: value->rValue = model->B3SOIPDppdiblb; return(OK); case B3SOIPD_MOD_PDROUT : value->rValue = model->B3SOIPDpdrout; return(OK); case B3SOIPD_MOD_PPVAG: value->rValue = model->B3SOIPDppvag; return(OK); case B3SOIPD_MOD_PDELTA: value->rValue = model->B3SOIPDpdelta; return(OK); case B3SOIPD_MOD_PALPHA0: value->rValue = model->B3SOIPDpalpha0; return(OK); case B3SOIPD_MOD_PFBJTII: value->rValue = model->B3SOIPDpfbjtii; return(OK); case B3SOIPD_MOD_PBETA0: value->rValue = model->B3SOIPDpbeta0; return(OK); case B3SOIPD_MOD_PBETA1: value->rValue = model->B3SOIPDpbeta1; return(OK); case B3SOIPD_MOD_PBETA2: value->rValue = model->B3SOIPDpbeta2; return(OK); case B3SOIPD_MOD_PVDSATII0: value->rValue = model->B3SOIPDpvdsatii0; return(OK); case B3SOIPD_MOD_PLII: value->rValue = model->B3SOIPDplii; return(OK); case B3SOIPD_MOD_PESATII: value->rValue = model->B3SOIPDpesatii; return(OK); case B3SOIPD_MOD_PSII0: value->rValue = model->B3SOIPDpsii0; return(OK); case B3SOIPD_MOD_PSII1: value->rValue = model->B3SOIPDpsii1; return(OK); case B3SOIPD_MOD_PSII2: value->rValue = model->B3SOIPDpsii2; return(OK); case B3SOIPD_MOD_PSIID: value->rValue = model->B3SOIPDpsiid; return(OK); case B3SOIPD_MOD_PAGIDL: value->rValue = model->B3SOIPDpagidl; return(OK); case B3SOIPD_MOD_PBGIDL: value->rValue = model->B3SOIPDpbgidl; return(OK); case B3SOIPD_MOD_PNGIDL: value->rValue = model->B3SOIPDpngidl; return(OK); case B3SOIPD_MOD_PNTUN: value->rValue = model->B3SOIPDpntun; return(OK); case B3SOIPD_MOD_PNDIODE: value->rValue = model->B3SOIPDpndiode; return(OK); case B3SOIPD_MOD_PNRECF0: value->rValue = model->B3SOIPDpnrecf0; return(OK); case B3SOIPD_MOD_PNRECR0: value->rValue = model->B3SOIPDpnrecr0; return(OK); case B3SOIPD_MOD_PISBJT: value->rValue = model->B3SOIPDpisbjt; return(OK); case B3SOIPD_MOD_PISDIF: value->rValue = model->B3SOIPDpisdif; return(OK); case B3SOIPD_MOD_PISREC: value->rValue = model->B3SOIPDpisrec; return(OK); case B3SOIPD_MOD_PISTUN: value->rValue = model->B3SOIPDpistun; return(OK); case B3SOIPD_MOD_PVREC0: value->rValue = model->B3SOIPDpvrec0; return(OK); case B3SOIPD_MOD_PVTUN0: value->rValue = model->B3SOIPDpvtun0; return(OK); case B3SOIPD_MOD_PNBJT: value->rValue = model->B3SOIPDpnbjt; return(OK); case B3SOIPD_MOD_PLBJT0: value->rValue = model->B3SOIPDplbjt0; return(OK); case B3SOIPD_MOD_PVABJT: value->rValue = model->B3SOIPDpvabjt; return(OK); case B3SOIPD_MOD_PAELY: value->rValue = model->B3SOIPDpaely; return(OK); case B3SOIPD_MOD_PAHLI: value->rValue = model->B3SOIPDpahli; return(OK); /* CV Model */ case B3SOIPD_MOD_PVSDFB: value->rValue = model->B3SOIPDpvsdfb; return(OK); case B3SOIPD_MOD_PVSDTH: value->rValue = model->B3SOIPDpvsdth; return(OK); case B3SOIPD_MOD_PDELVT: value->rValue = model->B3SOIPDpdelvt; return(OK); case B3SOIPD_MOD_PACDE: value->rValue = model->B3SOIPDpacde; return(OK); case B3SOIPD_MOD_PMOIN: value->rValue = model->B3SOIPDpmoin; return(OK); /* Added for binning - END */ default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/cktaccept.c0000644000175000017500000000224413546075722021272 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* CKTaccept(ckt) * * this is a driver program to iterate through all the various accept * functions provided for the circuit elements in the given circuit */ #include "ngspice/config.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/ifsim.h" #include "ngspice/devdefs.h" #include "dev.h" int CKTaccept(CKTcircuit *ckt) { int i; int error; SPICEdev **devs; #ifdef PREDICTOR double *temp; int size; #endif devs = devices(); for (i = 0; i < DEVmaxnum; i++) { if ( devs[i] && devs[i]->DEVaccept && ckt->CKThead[i] ) { error = devs[i]->DEVaccept (ckt, ckt->CKThead[i]); if (error) return(error); } } #ifdef PREDICTOR /* now, move the sols vectors around */ temp = ckt->CKTsols[7]; for ( i=7;i>0;i--) { ckt->CKTsols[i] = ckt->CKTsols[i-1]; } ckt->CKTsols[0]=temp; size = SMPmatSize(ckt->CKTmatrix); for(i=0;i<=size;i++) { ckt->CKTsols[0][i]=ckt->CKTrhs[i]; } #endif /* PREDICTOR */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/ndev/0000755000175000017500000000000013546075722020117 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/ndev/ndevload.c0000644000175000017500000000557513546075722022073 0ustar carstencarsten/********** Permit to use it as your wish. Author: 2007 Gong Ding, gdiso@ustc.edu University of Science and Technology of China **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/cktdefs.h" #include "ndevdefs.h" #include "ngspice/numenum.h" #include "ngspice/trandefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int NDEVload(GENmodel * inModel, CKTcircuit * ckt) { NDEVmodel *model = (NDEVmodel *)inModel; NDEVinstance *here; int i,j; /* loop through all the ndev models */ for( ; model != NULL; model = NDEVnextModel(model)) { /* loop through all the instances of the model */ for (here = NDEVinstances(model); here != NULL ; here=NDEVnextInstance(here)) { /* sent ckt information to device simulator */ here->CKTInfo.DEV_CALL = NDEV_LOAD; here->CKTInfo.CKTmode = ckt->CKTmode; here->CKTInfo.time = ckt->CKTtime; here->CKTInfo.dt = ckt->CKTdelta; here->CKTInfo.dt_old = ckt->CKTdeltaOld[0]; here->CKTInfo.accept_flag = 0; send(model->sock,&here->CKTInfo,sizeof(sCKTinfo),0); /* send terminal voltage to device simulator */ for(i=0;iterm;i++) { here->PINinfos[i].V_old = here->PINinfos[i].V; here->PINinfos[i].V = *(ckt->CKTrhsOld+here->pin[i]); send(model->sock,&here->PINinfos[i],sizeof(here->PINinfos[i]),0); } } } /* loop through all the ndev models */ for(model = (NDEVmodel *)inModel; model != NULL; model = NDEVnextModel(model)) { /* loop through all the instances of the model */ for (here = NDEVinstances(model); here != NULL ; here=NDEVnextInstance(here)) { /* reveive terminal current and conductional matrix from device simulator */ for(i=0;iterm;i++) { recv(model->sock,&here->PINinfos[i],sizeof(here->PINinfos[i]),MSG_WAITALL); *(ckt->CKTrhs+here->pin[i]) += here->PINinfos[i].I; for(j=0;jterm;j++) *(here->mat_pointer[i*here->term+j]) += here->PINinfos[i].dI_dV[j]; } } } return(OK); } int NDEVgetic(GENmodel *inModel, CKTcircuit *ckt) { NDEVmodel *model = (NDEVmodel*)inModel; NDEVinstance *here; NG_IGNORE(ckt); /* * grab initial conditions out of rhs array. User specified, so use * external nodes to get values */ printf("set ic\n"); for( ; model ; model = NDEVnextModel(model)) { for(here = NDEVinstances(model); here ; here = NDEVnextInstance(here)) { /* if(!here->DIOinitCondGiven) { here->DIOinitCond = *(ckt->CKTrhs + here->DIOposNode) - *(ckt->CKTrhs + here->DIOnegNode); } */ } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ndev/Makefile.am0000644000175000017500000000075213546075722022157 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libndev.la libndev_la_SOURCES = \ ndev.c \ ndevacld.c \ ndevaccept.c \ ndevask.c \ ndevdefs.h \ ndevdump.c \ ndevext.h \ ndevexch.h \ ndevinit.c \ ndevinit.h \ ndevitf.h \ ndevload.c \ ndevmdel.c \ ndevmpar.c \ ndevparm.c \ ndevpzld.c \ ndevset.c \ ndevtemp.c \ ndevtrun.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/ndev/ndevaccept.c0000644000175000017500000000372013546075722022401 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ndevdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int NDEVaccept(CKTcircuit *ckt, GENmodel *inModel) { NDEVmodel *model = (NDEVmodel *)inModel; NDEVinstance *here; /* loop through all the ndev models */ for( ; model != NULL; model = NDEVnextModel(model)) { /* loop through all the instances of the model */ for (here = NDEVinstances(model); here != NULL ; here=NDEVnextInstance(here)) { /* set ckt accept_flag */ here->CKTInfo.DEV_CALL = NDEV_ACCEPT; here->CKTInfo.CKTmode = ckt->CKTmode; here->CKTInfo.time = ckt->CKTtime; here->CKTInfo.dt = ckt->CKTdelta; here->CKTInfo.dt_old = ckt->CKTdeltaOld[0]; here->CKTInfo.accept_flag = 1; send(model->sock,&here->CKTInfo,sizeof(sCKTinfo),0); } } return (OK); /* NOTREACHED */ } int NDEVconvTest(GENmodel *inModel, CKTcircuit *ckt) { NDEVmodel *model = (NDEVmodel *)inModel; NDEVinstance *here; for( ; model != NULL; model = NDEVnextModel(model)) { for(here=NDEVinstances(model);here!=NULL;here = NDEVnextInstance(here)){ /* * get convergence information from ndev */ here->CKTInfo.DEV_CALL = NDEV_CONVERGINCE_TEST; send(model->sock,&here->CKTInfo,sizeof(sCKTinfo),0); recv(model->sock,&here->CKTInfo,sizeof(sCKTinfo),MSG_WAITALL); if (here->CKTInfo.convergence_flag<0) { /* no reason to continue - we've failed... */ ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ndev/ndevask.c0000644000175000017500000000120513546075722021714 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ndevdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int NDEVask( CKTcircuit *ckt, GENinstance *inInst, int which, IFvalue *value, IFvalue *select ) { NG_IGNORE(ckt); NG_IGNORE(inInst); NG_IGNORE(which); NG_IGNORE(value); NG_IGNORE(select); return (OK); /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/ndev/ndev.c0000644000175000017500000000201413546075722021214 0ustar carstencarsten/********** Permit to use it as your wish. Author: 2007 Gong Ding, gdiso@ustc.edu University of Science and Technology of China **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ndevdefs.h" #include "ngspice/suffix.h" IFparm NDEVpTable[] = { /* parameters */ /* numerical-device models no longer have parameters */ /* one is left behind to keep the table from being empty */ IP("ndev", NDEV_MOD_NDEV, IF_FLAG, "Numerical Device"), }; IFparm NDEVmPTable[] = { /* model parameters */ IP("ndev", NDEV_MOD_NDEV, IF_FLAG, "Numerical Device"), IP("remote", NDEV_REMOTE, IF_STRING, "Remote computer run device simulation"), IP("port", NDEV_PORT, IF_INTEGER, "Remote port") }; char *NDEVnames[] = { "pin1", "pin2", "pin3", "pin4", "pin5", "pin6", "pin7" }; int NDEVnSize = NUMELEMS(NDEVnames); int NDEVpTSize = NUMELEMS(NDEVpTable); int NDEVmPTSize = NUMELEMS(NDEVmPTable); int NDEViSize = sizeof(NDEVinstance); int NDEVmSize = sizeof(NDEVmodel); tmpk8ny_4pz/src/spicelib/devices/ndev/ndevinit.c0000644000175000017500000000314413546075722022105 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "ndevitf.h" #include "ndevext.h" #include "ndevinit.h" SPICEdev NDEVinfo = { .DEVpublic = { .name = "NDEV", .description = "Numerical Device", .terms = &NDEVnSize, .numNames = &NDEVnSize, .termNames = NDEVnames, .numInstanceParms = &NDEVpTSize, .instanceParms = NDEVpTable, .numModelParms = &NDEVmPTSize, .modelParms = NDEVmPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = NDEVparam, .DEVmodParam = NDEVmParam, .DEVload = NDEVload, .DEVsetup = NDEVsetup, .DEVunsetup = NULL, .DEVpzSetup = NDEVsetup, .DEVtemperature = NDEVtemp, .DEVtrunc = NDEVtrunc, .DEVfindBranch = NULL, .DEVacLoad = NDEVacLoad, .DEVaccept = NDEVaccept, .DEVdestroy = NULL, .DEVmodDelete = NDEVmDelete, .DEVdelete = NULL, .DEVsetic = NDEVgetic, .DEVask = NDEVask, .DEVmodAsk = NULL, .DEVpzLoad = NDEVpzLoad, .DEVconvTest = NDEVconvTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &NDEViSize, .DEVmodSize = &NDEVmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_ndev_info(void) { return &NDEVinfo; } tmpk8ny_4pz/src/spicelib/devices/ndev/ndevexch.h0000644000175000017500000000254013546075722022075 0ustar carstencarsten#ifndef _netexchange_h_ #define _netexchange_h_ #define NG_QUERY "This is ngspice. Are you ready?" #define NDEV_REPLY "Waiting orders!" #define NG_STOP "Ngspice finished, goodbye." #define NDEV_LOAD 0x0001 #define NDEV_ACCEPT 0x0002 #define NDEV_CONVERGINCE_TEST 0x0004 #define NDEV_TRUNCATION_ERROR 0x0008 #define NDEV_TEMPERATURE 0x1000 #define NDEV_AC_LOAD 0x0010 #define NDEV_PZ_LOAD 0x0020 #ifndef ngspice_CKTDEFS_H /* defines for CKTmode */ /* this should be the same as cktdefs.h */ /* old 'mode' parameters */ #define MODE 0x3 #define MODETRAN 0x1 #define MODEAC 0x2 /* old 'modedc' parameters */ #define MODEDC 0x70 #define MODEDCOP 0x10 #define MODETRANOP 0x20 #define MODEDCTRANCURVE 0x40 /* old 'initf' parameters */ #define INITF 0x3f00 #define MODEINITFLOAT 0x100 #define MODEINITJCT 0x200 #define MODEINITFIX 0x400 #define MODEINITSMSIG 0x800 #define MODEINITTRAN 0x1000 #define MODEINITPRED 0x2000 /* old 'nosolv' paramater */ #define MODEUIC 0x10000l #endif typedef struct { char NDEVname[32]; int term; }sDeviceinfo; typedef struct { int pin; char name[32]; double V,I; double V_old; double dI_dV[7]; } sPINinfo; typedef struct { long DEV_CALL; long CKTmode; double time; double dt; double dt_old; double omega; int accept_flag; int convergence_flag; }sCKTinfo; #endif tmpk8ny_4pz/src/spicelib/devices/ndev/ndevparm.c0000644000175000017500000000123513546075722022100 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/const.h" #include "ndevdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int NDEVparam( int param, IFvalue *value, GENinstance *inInst, IFvalue *select ) { NG_IGNORE(value); NG_IGNORE(inInst); NG_IGNORE(select); switch (param) { case NDEV_MOD_NDEV: /* no action , but this */ /* makes life easier for spice-2 like parsers */ break; default: return (E_BADPARM); } return (OK); } tmpk8ny_4pz/src/spicelib/devices/ndev/ndevdefs.h0000644000175000017500000000374413546075722022076 0ustar carstencarsten/********** Permit to use it as your wish. Author: 2007 Gong Ding, gdiso@ustc.edu University of Science and Technology of China **********/ #ifndef NDEV_H #define NDEV_H /* circuit level includes */ #include "ngspice/ifsim.h" #include "ngspice/inpmacs.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ndevexch.h" /* network function */ #include #include /* IPv4 socket address structres. */ #include /* Access to DNS lookups. */ #include /* inet_ntop function. */ #include /* Socket functions. */ /* information needed per instance */ typedef struct sNDEVinstance { struct GENinstance gen; #define NDEVmodPtr(inst) ((struct sNDEVmodel *)((inst)->gen.GENmodPtr)) #define NDEVnextInstance(inst) ((struct sNDEVinstance *)((inst)->gen.GENnextInstance)) #define NDEVstate gen.GENstate const int pin[7]; /* max 7 terminals are allowed */ int term; /* the real number of terminals */ CKTnode *node[7]; /* the array of CKT node's node pointer */ char *bname[7]; /* the electrode boundary label for numerical solver */ sCKTinfo CKTInfo; sDeviceinfo Ndevinfo; sPINinfo PINinfos[7]; double * mat_pointer[49]; /* the pointer array to matrix */ } NDEVinstance; /* per model data */ typedef struct sNDEVmodel { /* model structure for a diode */ struct GENmodel gen; #define NDEVmodType gen.GENmodType #define NDEVnextModel(inst) ((struct sNDEVmodel *)((inst)->gen.GENnextModel)) #define NDEVinstances(inst) ((NDEVinstance *)((inst)->gen.GENinstances)) #define NDEVmodName gen.GENmodName char * NDEVmodelfile; char * host; int port; /* Port number. */ int sock; /* Our connection socket. */ } NDEVmodel; /* device parameters */ #define NDEV_MODEL_FILE 1 /* model parameters */ enum { NDEV_MOD_NDEV = 101, NDEV_REMOTE, NDEV_PORT, }; #include "ndevext.h" #endif /* NDEV_H */ tmpk8ny_4pz/src/spicelib/devices/ndev/ndevset.c0000644000175000017500000001151513546075722021736 0ustar carstencarsten/********** Permit to use it as your wish. Author: 2007 Gong Ding, gdiso@ustc.edu University of Science and Technology of China **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "ndevdefs.h" #include "ngspice/numconst.h" #include "ngspice/numenum.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define TSCALLOC(var, size, type)\ if (size && (var =(type *)calloc(1, (unsigned)(size)*sizeof(type))) == NULL) {\ return(E_NOMEM);\ } int NDEVmodelConnect(NDEVmodel *inModel); int NDEVsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* * load the structure with those pointers needed later for fast matrix * loading */ { NDEVmodel *model = (NDEVmodel *)inModel; NDEVinstance *here; int i,j; CKTnode *node; NG_IGNORE(ckt); NG_IGNORE(states); /* loop through all the ndev models */ for( ; model != NULL; model = NDEVnextModel(model)) { /* connect to remote device simulator */ if(NDEVmodelConnect(model)) return E_PRIVATE; /* loop through all the instances of the model */ for (here = NDEVinstances(model); here != NULL ; here=NDEVnextInstance(here)) { here->Ndevinfo.term = here->term; strncpy(here->Ndevinfo.NDEVname, here->gen.GENname, 32); send(model->sock,&(here->Ndevinfo),sizeof(here->Ndevinfo),0); /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) for(i=0;iterm;i++) for(j=0;jterm;j++) { TSTALLOC(mat_pointer[i*here->term+j], pin[i], pin[j]); } for(i=0;iterm;i++) { node = here->node[i]; here->PINinfos[i].pin=node->number; strncpy(here->PINinfos[i].name,here->bname[i],32); here->PINinfos[i].V = 0.0; send(model->sock,&here->PINinfos[i],sizeof(here->PINinfos[i]),0); } } } return(OK); } int NDEVmodelConnect(NDEVmodel *inModel) { NDEVmodel *model = inModel; struct hostent *hostlist; /* List of hosts returned by gethostbyname. */ char dotted_ip[15]; /* Buffer for converting the resolved address to a readable format. */ struct sockaddr_in sa; /* Connection address. */ char *buf = TMALLOC(char, 128); /* Look up the hostname with DNS. gethostbyname (at least most UNIX versions of it) properly handles dotted IP addresses as well as hostnames. */ hostlist = gethostbyname(model->host); if (hostlist == NULL) { fprintf(stderr,"NDEV: Unable to resolve host %s.\n", model->host); return E_PRIVATE; } /* Good, we have an address. However, some sites are moving over to IPv6 (the newer version of IP), and we're not ready for it (since it uses a new address format). It's a good idea to check for this. */ if (hostlist->h_addrtype != AF_INET) { fprintf(stderr,"NDEV: Host %s doesn't seem to be an IPv4 address.\n",model->host); return E_PRIVATE; } /* inet_ntop converts a 32-bit IP address to the dotted string notation (suitable for printing). hostlist->h_addr_list is an array of possible addresses (in case a name resolves to more than on IP). In most cases we just want the first. */ inet_ntop(AF_INET, hostlist->h_addr_list[0], dotted_ip, 15); /* Create a socket for the connection. */ model->sock = socket(PF_INET, SOCK_STREAM, IPPROTO_IP); if (model->sock < 0) { fprintf(stderr, "NDEV: Unable to create a socket %s.\n", strerror(errno)); return E_PRIVATE; } /* Fill in the sockaddr_in structure. The address is already in network byte order (from the gethostbyname call). We need to convert the port number with the htons macro. Before we do anything else, we'll zero out the entire structure. */ memset(&sa, 0, sizeof(struct sockaddr_in)); sa.sin_port = htons(model->port); /* The IP address was returned as a char * for various reasons. Just memcpy it into the sockaddr_in structure. */ memcpy(&sa.sin_addr, hostlist->h_addr_list[0], (size_t) hostlist->h_length); /* This is an Internet socket. */ sa.sin_family = AF_INET; /* Connect! */ if (connect(model->sock, (struct sockaddr *)&sa, sizeof(sa)) < 0) { fprintf(stderr, "NDEV: Unable to connect %s\n",strerror(errno)); return E_PRIVATE; } sprintf(buf, NG_QUERY); send(model->sock, buf, 128, 0); if(recv(model->sock, buf, 128, MSG_WAITALL) < 128) { fprintf(stderr, "NDEV: Remote answer error. %s\n",strerror(errno)); return E_PRIVATE; } if(strncmp(buf, NDEV_REPLY, sizeof(NDEV_REPLY))) { fprintf(stderr, "NDEV: Remote answer error. %s\n", buf); return E_PRIVATE; } free(buf); return (OK); } tmpk8ny_4pz/src/spicelib/devices/ndev/ndevext.h0000644000175000017500000000176013546075722021751 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Karti Mayaram **********/ #ifndef NDEVEXT_H #define NDEVEXT_H extern int NDEVacLoad(GENmodel *, CKTcircuit *); extern int NDEVask(CKTcircuit *, GENinstance *, int, IFvalue *, IFvalue *); extern int NDEVgetic(GENmodel *, CKTcircuit *); extern int NDEVload(GENmodel *, CKTcircuit *); extern int NDEVaccept(CKTcircuit *, GENmodel *); extern int NDEVconvTest(GENmodel *, CKTcircuit *); extern int NDEVmDelete(GENmodel *); extern int NDEVmParam(int, IFvalue *, GENmodel *); extern int NDEVparam(int, IFvalue *, GENinstance *, IFvalue *); extern int NDEVpzLoad(GENmodel *, CKTcircuit *, SPcomplex *); extern int NDEVsetup(SMPmatrix *, GENmodel *, CKTcircuit *, int *); extern int NDEVtemp(GENmodel *, CKTcircuit *); extern int NDEVtrunc(GENmodel *, CKTcircuit *, double *); extern void NDEV_dump(GENmodel *, CKTcircuit *); extern void NDEV_acct(GENmodel *, CKTcircuit *, FILE *); #endif /* NDEVEXT_H */ tmpk8ny_4pz/src/spicelib/devices/ndev/ndevdump.c0000644000175000017500000000146613546075722022114 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ /* * This is a simple routine to dump the internal device states. It produces * states for .OP, .DC, & .TRAN simulations. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ndevdefs.h" #include "ngspice/suffix.h" /* State Counter * static int state_numOP = 0; * static int state_numDC = 0; * static int state_numTR = 0; */ void NDEV_dump( GENmodel *inModel, CKTcircuit *ckt ) { NG_IGNORE(inModel); NG_IGNORE(ckt); } void NDEV_acct( GENmodel *inModel, CKTcircuit *ckt, FILE *file ) { NG_IGNORE(inModel); NG_IGNORE(ckt); NG_IGNORE(file); } tmpk8ny_4pz/src/spicelib/devices/ndev/ndevitf.h0000644000175000017500000000027013546075722021726 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_NDEV #define DEV_NDEV extern SPICEdev *get_ndev_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/ndev/ndevinit.h0000644000175000017500000000037013546075722022110 0ustar carstencarsten#ifndef _NDEVINIT_H #define _NDEVINIT_H extern IFparm NDEVpTable[ ]; extern IFparm NDEVmPTable[ ]; extern char *NDEVnames[ ]; extern int NDEVpTSize; extern int NDEVmPTSize; extern int NDEVnSize; extern int NDEViSize; extern int NDEVmSize; #endif tmpk8ny_4pz/src/spicelib/devices/ndev/ndevpzld.c0000644000175000017500000000074713546075722022121 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "ndevdefs.h" #include "ngspice/suffix.h" int NDEVpzLoad( GENmodel *inModel, register CKTcircuit *ckt, SPcomplex *s ) { NG_IGNORE(inModel); NG_IGNORE(ckt); NG_IGNORE(s); return (OK); } tmpk8ny_4pz/src/spicelib/devices/ndev/ndevtemp.c0000644000175000017500000000111713546075722022105 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1992 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ndevdefs.h" #include "ngspice/numenum.h" #include "ngspice/carddefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int NDEVtemp( GENmodel *inModel, register CKTcircuit *ckt ) /* * perform the temperature update to the diode */ { NG_IGNORE(inModel); NG_IGNORE(ckt); return (OK); } tmpk8ny_4pz/src/spicelib/devices/ndev/ndevtrun.c0000644000175000017500000000072513546075722022134 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ndevdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int NDEVtrunc( GENmodel *inModel, register CKTcircuit *ckt, double *timeStep ) { NG_IGNORE(inModel); NG_IGNORE(ckt); NG_IGNORE(timeStep); return (OK); } tmpk8ny_4pz/src/spicelib/devices/ndev/ndevmpar.c0000644000175000017500000000150613546075722022101 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * This routine sets model parameters for NDEVs in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ndevdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int NDEVmParam(int param, IFvalue * value, GENmodel * inModel) { NDEVmodel *model = (NDEVmodel *) inModel; switch (param) { case NDEV_REMOTE: model->host = value->sValue; break; case NDEV_PORT: model->port = value->iValue; break; case NDEV_MOD_NDEV: /* no action , but this */ /* makes life easier for spice-2 like parsers */ break; default: return (E_BADPARM); } return (OK); } tmpk8ny_4pz/src/spicelib/devices/ndev/ndevmdel.c0000644000175000017500000000074213546075722022064 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ndevdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int NDEVmDelete(GENmodel *gen_model) { NDEVmodel *model = (NDEVmodel *) gen_model; close(model->sock); printf("Disconnect to remote NDEV server %s:%d\n", model->host, model->port); return OK; } tmpk8ny_4pz/src/spicelib/devices/ndev/ndevacld.c0000644000175000017500000000111113546075722022035 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* * Function to load the COMPLEX circuit matrix using the small signal * parameters saved during a previous DC operating point analysis. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ndevdefs.h" #include "ngspice/sperror.h" #include "ngspice/complex.h" #include "ngspice/suffix.h" int NDEVacLoad(GENmodel *inModel, CKTcircuit *ckt) { NG_IGNORE(inModel); NG_IGNORE(ckt); return (OK); } tmpk8ny_4pz/src/spicelib/devices/vsrc/0000755000175000017500000000000013546075722020140 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/vsrc/Makefile.am0000644000175000017500000000071113546075722022173 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libvsrc.la libvsrc_la_SOURCES = \ vsrc.c \ vsrcacct.c \ vsrcacld.c \ vsrcask.c \ vsrcdefs.h \ vsrcdel.c \ vsrcext.h \ vsrcfbr.c \ vsrcinit.c \ vsrcinit.h \ vsrcitf.h \ vsrcload.c \ vsrcpar.c \ vsrcpzld.c \ vsrcpzs.c \ vsrcset.c \ vsrctemp.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/vsrc/vsrcset.c0000644000175000017500000000440613546075722022001 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "vsrcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int VSRCsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *state) /* load the voltage source structure with those pointers needed later * for fast matrix loading */ { VSRCmodel *model = (VSRCmodel *)inModel; VSRCinstance *here; CKTnode *tmp; int error; NG_IGNORE(state); /* loop through all the voltage source models */ for( ; model != NULL; model = VSRCnextModel(model)) { /* loop through all the instances of the model */ for (here = VSRCinstances(model); here != NULL ; here=VSRCnextInstance(here)) { if(here->VSRCposNode == here->VSRCnegNode) { SPfrontEnd->IFerrorf (ERR_FATAL, "instance %s is a shorted VSRC", here->VSRCname); return(E_UNSUPP); } if(here->VSRCbranch == 0) { error = CKTmkCur(ckt,&tmp,here->VSRCname,"branch"); if(error) return(error); here->VSRCbranch = tmp->number; } /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(VSRCposIbrPtr, VSRCposNode, VSRCbranch); TSTALLOC(VSRCnegIbrPtr, VSRCnegNode, VSRCbranch); TSTALLOC(VSRCibrNegPtr, VSRCbranch, VSRCnegNode); TSTALLOC(VSRCibrPosPtr, VSRCbranch, VSRCposNode); } } return(OK); } int VSRCunsetup(GENmodel *inModel, CKTcircuit *ckt) { VSRCmodel *model; VSRCinstance *here; for (model = (VSRCmodel *)inModel; model != NULL; model = VSRCnextModel(model)) { for (here = VSRCinstances(model); here != NULL; here=VSRCnextInstance(here)) { if (here->VSRCbranch > 0) CKTdltNNum(ckt, here->VSRCbranch); here->VSRCbranch = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/vsrc/vsrctemp.c0000644000175000017500000000341313546075722022150 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "vsrcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int VSRCtemp(GENmodel *inModel, CKTcircuit *ckt) /* Pre-process voltage source parameters */ { VSRCmodel *model = (VSRCmodel *) inModel; VSRCinstance *here; double radians; NG_IGNORE(ckt); /* loop through all the voltage source models */ for( ; model != NULL; model = VSRCnextModel(model)) { /* loop through all the instances of the model */ for (here = VSRCinstances(model); here != NULL ; here=VSRCnextInstance(here)) { if(here->VSRCacGiven && !here->VSRCacMGiven) { here->VSRCacMag = 1; } if(here->VSRCacGiven && !here->VSRCacPGiven) { here->VSRCacPhase = 0; } if(!here->VSRCdcGiven) { /* no DC value - either have a transient value, or none */ if(here->VSRCfuncTGiven) { SPfrontEnd->IFerrorf (ERR_WARNING, "%s: no DC value, transient time 0 value used", here->VSRCname); } else { SPfrontEnd->IFerrorf (ERR_WARNING, "%s: has no value, DC 0 assumed", here->VSRCname); } } radians = here->VSRCacPhase * M_PI / 180.0; here->VSRCacReal = here->VSRCacMag * cos(radians); here->VSRCacImag = here->VSRCacMag * sin(radians); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vsrc/vsrcpar.c0000644000175000017500000002130513546075722021765 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "vsrcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/1-f-code.h" static void copy_coeffs(VSRCinstance *here, IFvalue *value) { int n = value->v.numValue; if(here->VSRCcoeffs) tfree(here->VSRCcoeffs); here->VSRCcoeffs = TMALLOC(double, n); here->VSRCfunctionOrder = n; here->VSRCcoeffsGiven = TRUE; memcpy(here->VSRCcoeffs, value->v.vec.rVec, (size_t) n * sizeof(double)); } /* ARGSUSED */ int VSRCparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { int i; VSRCinstance *here = (VSRCinstance *) inst; NG_IGNORE(select); switch(param) { case VSRC_DC: here->VSRCdcValue = value->rValue; here->VSRCdcGiven = TRUE; break; case VSRC_AC_MAG: here->VSRCacMag = value->rValue; here->VSRCacMGiven = TRUE; here->VSRCacGiven = TRUE; break; case VSRC_AC_PHASE: here->VSRCacPhase = value->rValue; here->VSRCacPGiven = TRUE; here->VSRCacGiven = TRUE; break; case VSRC_AC: switch(value->v.numValue) { case 2: here->VSRCacPhase = *(value->v.vec.rVec+1); here->VSRCacPGiven = TRUE; case 1: here->VSRCacMag = *(value->v.vec.rVec); here->VSRCacMGiven = TRUE; case 0: here->VSRCacGiven = TRUE; break; default: return(E_BADPARM); } break; case VSRC_PULSE: if(value->v.numValue < 2) return(E_BADPARM); here->VSRCfunctionType = PULSE; here->VSRCfuncTGiven = TRUE; copy_coeffs(here, value); break; case VSRC_SINE: if(value->v.numValue < 2) return(E_BADPARM); here->VSRCfunctionType = SINE; here->VSRCfuncTGiven = TRUE; copy_coeffs(here, value); break; case VSRC_EXP: if(value->v.numValue < 2) return(E_BADPARM); here->VSRCfunctionType = EXP; here->VSRCfuncTGiven = TRUE; copy_coeffs(here, value); break; case VSRC_PWL: if(value->v.numValue < 2) return(E_BADPARM); here->VSRCfunctionType = PWL; here->VSRCfuncTGiven = TRUE; copy_coeffs(here, value); for (i=0; i<(here->VSRCfunctionOrder/2)-1; i++) { if (*(here->VSRCcoeffs+2*(i+1))<=*(here->VSRCcoeffs+2*i)) { fprintf(stderr, "Warning : voltage source %s", here->VSRCname); fprintf(stderr, " has non-increasing PWL time points.\n"); } } break; case VSRC_TD: here->VSRCrdelay = value->rValue; break; case VSRC_R: { double end_time; here->VSRCr = value->rValue; here->VSRCrGiven = TRUE; for ( i = 0; i < here->VSRCfunctionOrder; i += 2 ) { here->VSRCrBreakpt = i; if ( here->VSRCr == *(here->VSRCcoeffs+i) ) break; } end_time = *(here->VSRCcoeffs + here->VSRCfunctionOrder-2); if ( here->VSRCr > end_time ) { fprintf(stderr, "ERROR: repeat start time value %g for pwl voltage source must be smaller than final time point given!\n", here->VSRCr ); return ( E_PARMVAL ); } if ( here->VSRCr != *(here->VSRCcoeffs+here->VSRCrBreakpt) ) { fprintf(stderr, "ERROR: repeat start time value %g for pwl voltage source does not match any time point given!\n", here->VSRCr ); return ( E_PARMVAL ); } break; } case VSRC_SFFM: if(value->v.numValue < 2) return(E_BADPARM); here->VSRCfunctionType = SFFM; here->VSRCfuncTGiven = TRUE; copy_coeffs(here, value); break; case VSRC_AM: if(value->v.numValue < 2) return(E_BADPARM); here->VSRCfunctionType = AM; here->VSRCfuncTGiven = TRUE; copy_coeffs(here, value); break; case VSRC_D_F1: here->VSRCdF1given = TRUE; here->VSRCdGiven = TRUE; switch(value->v.numValue) { case 2: here->VSRCdF1phase = *(value->v.vec.rVec+1); here->VSRCdF1mag = *(value->v.vec.rVec); break; case 1: here->VSRCdF1mag = *(value->v.vec.rVec); here->VSRCdF1phase = 0.0; break; case 0: here->VSRCdF1mag = 1.0; here->VSRCdF1phase = 0.0; break; default: return(E_BADPARM); } break; case VSRC_D_F2: here->VSRCdF2given = TRUE; here->VSRCdGiven = TRUE; switch(value->v.numValue) { case 2: here->VSRCdF2phase = *(value->v.vec.rVec+1); here->VSRCdF2mag = *(value->v.vec.rVec); break; case 1: here->VSRCdF2mag = *(value->v.vec.rVec); here->VSRCdF2phase = 0.0; break; case 0: here->VSRCdF2mag = 1.0; here->VSRCdF2phase = 0.0; break; default: return(E_BADPARM); } break; case VSRC_TRNOISE: { double NA, TS; double NALPHA = 0.0; double NAMP = 0.0; double RTSAM = 0.0; double RTSCAPT = 0.0; double RTSEMT = 0.0; here->VSRCfunctionType = TRNOISE; here->VSRCfuncTGiven = TRUE; copy_coeffs(here, value); NA = here->VSRCcoeffs[0]; // input is rms value TS = here->VSRCcoeffs[1]; // time step if (here->VSRCfunctionOrder > 2) NALPHA = here->VSRCcoeffs[2]; // 1/f exponent if (here->VSRCfunctionOrder > 3 && NALPHA != 0.0) NAMP = here->VSRCcoeffs[3]; // 1/f amplitude if (here->VSRCfunctionOrder > 4) RTSAM = here->VSRCcoeffs[4]; // RTS amplitude if (here->VSRCfunctionOrder > 5 && RTSAM != 0.0) RTSCAPT = here->VSRCcoeffs[5]; // RTS trap capture time if (here->VSRCfunctionOrder > 6 && RTSAM != 0.0) RTSEMT = here->VSRCcoeffs[6]; // RTS trap emission time /* after an 'alter' command to the TRNOISE voltage source the state gets re-written with the new parameters. So free the old state first. */ trnoise_state_free(here->VSRCtrnoise_state); here->VSRCtrnoise_state = trnoise_state_init(NA, TS, NALPHA, NAMP, RTSAM, RTSCAPT, RTSEMT); } break; case VSRC_TRRANDOM: { double TD = 0.0, TS; int rndtype = 1; double PARAM1 = 1.0; double PARAM2 = 0.0; here->VSRCfunctionType = TRRANDOM; here->VSRCfuncTGiven = TRUE; copy_coeffs(here, value); rndtype = (int)here->VSRCcoeffs[0]; // type of random function TS = here->VSRCcoeffs[1]; // time step if (here->VSRCfunctionOrder > 2) TD = here->VSRCcoeffs[2]; // delay if (here->VSRCfunctionOrder > 3) PARAM1 = here->VSRCcoeffs[3]; // first parameter if (here->VSRCfunctionOrder > 4) PARAM2 = here->VSRCcoeffs[4]; // second parameter /* after an 'alter' command to the TRRANDOM voltage source the state gets re-written with the new parameters. So free the old state first. */ tfree(here->VSRCtrrandom_state); here->VSRCtrrandom_state = trrandom_state_init(rndtype, TS, TD, PARAM1, PARAM2); } break; #ifdef SHARED_MODULE case VSRC_EXTERNAL: { here->VSRCfunctionType = EXTERNAL; here->VSRCfuncTGiven = TRUE; /* no coefficients copy_coeffs(here, value); */ } break; #endif default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vsrc/vsrcitf.h0000644000175000017500000000026713546075722021776 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_VSRC #define DEV_VSRC extern SPICEdev *get_vsrc_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/vsrc/vsrcacct.c0000644000175000017500000003134613546075722022123 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vsrcdefs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/missing_math.h" #include "ngspice/1-f-code.h" #ifndef HAVE_LIBFFTW3 extern void fftFree(void); #endif extern bool ft_ngdebug; /* some additional debug info printed */ #define SAMETIME(a,b) (fabs((a)-(b))<= TIMETOL * PW) #define TIMETOL 1e-7 int VSRCaccept(CKTcircuit *ckt, GENmodel *inModel) /* set up the breakpoint table. */ { VSRCmodel *model = (VSRCmodel *) inModel; VSRCinstance *here; int error; /* loop through all the voltage source models */ for( ; model != NULL; model = VSRCnextModel(model)) { /* loop through all the instances of the model */ for (here = VSRCinstances(model); here != NULL ; here=VSRCnextInstance(here)) { if(!(ckt->CKTmode & (MODETRAN | MODETRANOP))) { /* not transient, so shouldn't be here */ return(OK); } else { /* use the transient functions */ switch(here->VSRCfunctionType) { default: { /* no function specified:DC no breakpoints */ break; } case PULSE: { double TD, TR, TF, PW, PER; double tshift; double time = 0.; double basetime = 0; /* gtri - begin - wbk - add PHASE parameter */ #ifdef XSPICE double PHASE; double phase; double deltat; #endif TD = here->VSRCfunctionOrder > 2 ? here->VSRCcoeffs[2] : 0.0; TR = here->VSRCfunctionOrder > 3 && here->VSRCcoeffs[3] != 0.0 ? here->VSRCcoeffs[3] : ckt->CKTstep; TF = here->VSRCfunctionOrder > 4 && here->VSRCcoeffs[4] != 0.0 ? here->VSRCcoeffs[4] : ckt->CKTstep; PW = here->VSRCfunctionOrder > 5 && here->VSRCcoeffs[5] != 0.0 ? here->VSRCcoeffs[5] : ckt->CKTfinalTime; PER = here->VSRCfunctionOrder > 6 && here->VSRCcoeffs[6] != 0.0 ? here->VSRCcoeffs[6] : ckt->CKTfinalTime; #ifdef XSPICE PHASE = here->VSRCfunctionOrder > 7 ? here->VSRCcoeffs[7] : 0.0; #endif /* offset time by delay */ time = ckt->CKTtime - TD; tshift = TD; #ifdef XSPICE /* normalize phase to 0 - 360° */ /* normalize phase to cycles */ phase = PHASE / 360.0; phase = fmod(phase, 1.0); deltat = phase * PER; while (deltat > 0) deltat -= PER; time += deltat; tshift = TD - deltat; #endif /* gtri - end - wbk - add PHASE parameter */ if(time >= PER) { /* repeating signal - figure out where we are */ /* in period */ basetime = PER * floor(time/PER); time -= basetime; } if( time <= 0.0 || time >= TR + PW + TF) { if(ckt->CKTbreak && SAMETIME(time,0.0)) { error = CKTsetBreak(ckt,basetime + TR + tshift); if(error) return(error); } else if(ckt->CKTbreak && SAMETIME(TR+PW+TF,time) ) { error = CKTsetBreak(ckt,basetime + PER + tshift); if(error) return(error); } else if (ckt->CKTbreak && (time == -tshift) ) { error = CKTsetBreak(ckt,basetime + tshift); if(error) return(error); } else if (ckt->CKTbreak && SAMETIME(PER,time) ) { error = CKTsetBreak(ckt,basetime + tshift + TR + PER); if(error) return(error); } } else if ( time >= TR && time <= TR + PW) { if(ckt->CKTbreak && SAMETIME(time,TR) ) { error = CKTsetBreak(ckt,basetime + tshift + TR + PW); if(error) return(error); } else if(ckt->CKTbreak && SAMETIME(TR+PW,time) ) { error = CKTsetBreak(ckt,basetime + tshift + TR + PW + TF); if(error) return(error); } } else if (time > 0 && time < TR) { if(ckt->CKTbreak && SAMETIME(time,0) ) { error = CKTsetBreak(ckt,basetime + tshift + TR); if(error) return(error); } else if(ckt->CKTbreak && SAMETIME(time,TR)) { error = CKTsetBreak(ckt,basetime + tshift + TR + PW); if(error) return(error); } } else { /* time > TR + PW && < TR + PW + TF */ if(ckt->CKTbreak && SAMETIME(time,TR+PW) ) { error = CKTsetBreak(ckt,basetime + tshift+TR + PW +TF); if(error) return(error); } else if(ckt->CKTbreak && SAMETIME(time,TR+PW+TF) ) { error = CKTsetBreak(ckt,basetime + tshift + PER); if(error) return(error); } } } break; case SINE: { /* no breakpoints (yet) */ } break; case EXP: { /* no breakpoints (yet) */ } break; case SFFM:{ /* no breakpoints (yet) */ } break; case AM:{ /* no breakpoints (yet) */ } break; case PWL: { int i; if(ckt->CKTtime < *(here->VSRCcoeffs)) { if(ckt->CKTbreak) { error = CKTsetBreak(ckt,*(here->VSRCcoeffs)); break; } } for(i=0;i<(here->VSRCfunctionOrder/2)-1;i++) { if ( ckt->CKTbreak && AlmostEqualUlps(*(here->VSRCcoeffs+2*i), ckt->CKTtime, 3 ) ) { error = CKTsetBreak(ckt, *(here->VSRCcoeffs+2*i+2)); if(error) return(error); goto bkptset; } } break; } /**** tansient noise routines: VNoi2 2 0 DC 0 TRNOISE(10n 0.5n 0 0n) : generate gaussian distributed noise rms value, time step, 0 0 VNoi1 1 0 DC 0 TRNOISE(0n 0.5n 1 10n) : generate 1/f noise 0, time step, exponent < 2, rms value */ case TRNOISE: { struct trnoise_state *state = here -> VSRCtrnoise_state; double TS = state -> TS; double RTSAM = state ->RTSAM; if ((TS == 0.0) && (RTSAM == 0.0)) // no further breakpoint if value not given break; #ifndef HAVE_LIBFFTW3 /* FIXME, dont' want this here, over to aof_get or somesuch */ if (ckt->CKTtime == 0.0) { if(ft_ngdebug) printf("VSRC: free fft tables\n"); fftFree(); } #endif if(ckt->CKTbreak) { int n = (int) floor(ckt->CKTtime / TS + 0.5); volatile double nearest = n * TS; if(AlmostEqualUlps(nearest, ckt->CKTtime, 3)) { /* carefull calculate `next' * make sure it is really identical * with the next calculated `nearest' value */ volatile double next = (n+1) * TS; error = CKTsetBreak(ckt, next); if(error) return(error); } } if (RTSAM > 0) { double RTScapTime = state->RTScapTime; double RTSemTime = state->RTSemTime; double RTSCAPT = state->RTSCAPT; double RTSEMT = state->RTSEMT; if (ckt->CKTtime == 0) { /* initialzing here again needed for repeated calls to tran command */ state->RTScapTime = RTScapTime = exprand(RTSCAPT); state->RTSemTime = RTSemTime = RTScapTime + exprand(RTSEMT); if (ckt->CKTbreak) { error = CKTsetBreak(ckt, RTScapTime); if(error) return(error); } } if(AlmostEqualUlps(RTScapTime, ckt->CKTtime, 3)) { if (ckt->CKTbreak) { error = CKTsetBreak(ckt, RTSemTime); if(error) return(error); } } if(AlmostEqualUlps(RTSemTime, ckt->CKTtime, 3)) { /* new values */ RTScapTime = here -> VSRCtrnoise_state ->RTScapTime = ckt->CKTtime + exprand(RTSCAPT); here -> VSRCtrnoise_state ->RTSemTime = RTScapTime + exprand(RTSEMT); if (ckt->CKTbreak) { error = CKTsetBreak(ckt, RTScapTime); if(error) return(error); } } } } break; case TRRANDOM: { struct trrandom_state *state = here -> VSRCtrrandom_state; double TS = state -> TS; double TD = state -> TD; double time = ckt->CKTtime - TD; if (time < 0) break; if(ckt->CKTbreak) { int n = (int) floor(time / TS + 0.5); volatile double nearest = n * TS; if(AlmostEqualUlps(nearest, time, 3)) { /* carefully calculate `next' * make sure it is really identical * with the next calculated `nearest' value */ volatile double next = (n+1) * TS + TD; error = CKTsetBreak(ckt, next); if(error) return(error); state->value = trrandom_state_get(state); } } } break; #ifdef SHARED_MODULE case EXTERNAL: { /* no breakpoints (yet) */ } break; #endif } // switch } // if ... else bkptset: ; } // for } // for return(OK); } tmpk8ny_4pz/src/spicelib/devices/vsrc/vsrcdefs.h0000644000175000017500000001061713546075722022135 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #ifndef VSRC #define VSRC #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" struct trnoise_state; /* * structures to describe independent voltage sources */ /* information needed for each instance */ typedef struct sVSRCinstance { struct GENinstance gen; #define VSRCmodPtr(inst) ((struct sVSRCmodel *)((inst)->gen.GENmodPtr)) #define VSRCnextInstance(inst) ((struct sVSRCinstance *)((inst)->gen.GENnextInstance)) #define VSRCname gen.GENname #define VSRCstate gen.GENstate const int VSRCposNode; /* number of positive node of source */ const int VSRCnegNode; /* number of negative node of source */ int VSRCbranch; /* equation number of branch equation added for source */ int VSRCfunctionType; /* code number of function type for source */ int VSRCfunctionOrder; /* order of the function for the source */ int VSRCrBreakpt; /* pwl repeat breakpoint index */ double *VSRCcoeffs; /* pointer to array of coefficients */ double VSRCdcValue; /* DC and TRANSIENT value of source */ double VSRCacPhase; /* AC phase angle */ double VSRCacMag; /* AC magnitude */ double VSRCacReal; /* AC real component */ double VSRCacImag; /* AC imaginary component */ double VSRCdF1mag; /* distortion f1 magnitude */ double VSRCdF2mag; /* distortion f2 magnitude */ double VSRCdF1phase; /* distortion f1 phase */ double VSRCdF2phase; /* distortion f2 phase */ struct trnoise_state *VSRCtrnoise_state; /* transient noise */ struct trrandom_state *VSRCtrrandom_state; /* transient random source */ double VSRCr; /* pwl repeat */ double VSRCrdelay; /* pwl delay period */ double *VSRCposIbrPtr; /* pointer to sparse matrix element at * (positive node, branch equation) */ double *VSRCnegIbrPtr; /* pointer to sparse matrix element at * (negative node, branch equation) */ double *VSRCibrPosPtr; /* pointer to sparse matrix element at * (branch equation, positive node) */ double *VSRCibrNegPtr; /* pointer to sparse matrix element at * (branch equation, negative node) */ double *VSRCibrIbrPtr; /* pointer to sparse matrix element at * (branch equation, branch equation) */ unsigned VSRCdcGiven :1 ; /* flag to indicate dc value given */ unsigned VSRCacGiven :1 ; /* flag to indicate ac keyword given */ unsigned VSRCacMGiven :1 ; /* flag to indicate ac magnitude given */ unsigned VSRCacPGiven :1 ; /* flag to indicate ac phase given */ unsigned VSRCfuncTGiven :1 ; /* flag to indicate function type given */ unsigned VSRCcoeffsGiven :1 ; /* flag to indicate function coeffs given */ unsigned VSRCdGiven :1 ; /* flag to indicate source is a distortion input */ unsigned VSRCdF1given :1 ; /* flag to indicate source is an f1 distortion input */ unsigned VSRCdF2given :1 ; /* flag to indicate source is an f2 distortion input */ unsigned VSRCrGiven :1 ; /* flag to indicate repeating pwl */ } VSRCinstance ; /* per model data */ typedef struct sVSRCmodel { struct GENmodel gen; #define VSRCmodType gen.GENmodType #define VSRCnextModel(inst) ((struct sVSRCmodel *)((inst)->gen.GENnextModel)) #define VSRCinstances(inst) ((VSRCinstance *)((inst)->gen.GENinstances)) #define VSRCmodName gen.GENmodName } VSRCmodel; /* source function types (shared with current sources) */ #ifndef PULSE_FUN_TYPES #define PULSE_FUN_TYPES enum { PULSE = 1, SINE, EXP, SFFM, PWL, AM, TRNOISE, TRRANDOM, EXTERNAL, }; #endif /* device parameters */ enum { VSRC_DC = 1, VSRC_AC, VSRC_AC_MAG, VSRC_AC_PHASE, VSRC_PULSE, VSRC_SINE, VSRC_EXP, VSRC_PWL, VSRC_SFFM, VSRC_BR, VSRC_FCN_TYPE, VSRC_FCN_ORDER, VSRC_FCN_COEFFS, VSRC_AC_REAL, VSRC_AC_IMAG, VSRC_POS_NODE, VSRC_NEG_NODE, VSRC_CURRENT, VSRC_POWER, VSRC_D_F1, VSRC_D_F2, VSRC_AM, VSRC_R, VSRC_TD, VSRC_TRNOISE, VSRC_TRRANDOM, VSRC_EXTERNAL, }; /* model parameters */ /* device questions */ /* model questions */ #include "vsrcext.h" #endif /*VSRC*/ tmpk8ny_4pz/src/spicelib/devices/vsrc/vsrcdel.c0000644000175000017500000000076213546075722021753 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "vsrcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/1-f-code.h" int VSRCdelete(GENinstance *gen_inst) { VSRCinstance *inst = (VSRCinstance *) gen_inst; FREE(inst->VSRCcoeffs); trnoise_state_free(inst->VSRCtrnoise_state); FREE(inst->VSRCtrrandom_state); return OK; } tmpk8ny_4pz/src/spicelib/devices/vsrc/vsrcask.c0000644000175000017500000000706313546075722021766 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ /* */ /* * This routine gives access to the internal device parameters * of independent Voltage SouRCe */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "vsrcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int VSRCask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { VSRCinstance *here = (VSRCinstance*)inst; static char *msg = "Current and power not available in ac analysis"; int temp; double *v, *w; NG_IGNORE(select); switch(which) { case VSRC_DC: value->rValue = here->VSRCdcValue; return (OK); case VSRC_AC_MAG: value->rValue = here->VSRCacMag; return (OK); case VSRC_AC_PHASE: value->rValue = here->VSRCacPhase; return (OK); case VSRC_PULSE: case VSRC_SINE: case VSRC_EXP: case VSRC_PWL: case VSRC_SFFM: case VSRC_AM: case VSRC_TRNOISE: case VSRC_TRRANDOM: case VSRC_FCN_COEFFS: temp = value->v.numValue = here->VSRCfunctionOrder; v = value->v.vec.rVec = TMALLOC(double, here->VSRCfunctionOrder); w = here->VSRCcoeffs; while (temp--) *v++ = *w++; return (OK); case VSRC_AC: value->v.numValue = 2; value->v.vec.rVec = TMALLOC(double, value->v.numValue); value->v.vec.rVec[0] = here->VSRCacMag; value->v.vec.rVec[1] = here->VSRCacPhase; return (OK); case VSRC_NEG_NODE: value->iValue = here->VSRCnegNode; return (OK); case VSRC_POS_NODE: value->iValue = here->VSRCposNode; return (OK); case VSRC_FCN_TYPE: value->iValue = here->VSRCfunctionType; return (OK); case VSRC_AC_REAL: value->rValue = here->VSRCacReal; return (OK); case VSRC_AC_IMAG: value->rValue = here->VSRCacImag; return (OK); case VSRC_R: value->rValue = here->VSRCr; return (OK); case VSRC_TD: value->rValue = here->VSRCrdelay; return (OK); case VSRC_FCN_ORDER: value->rValue = here->VSRCfunctionOrder; return (OK); case VSRC_CURRENT: if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "VSRCask"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = *(ckt->CKTrhsOld+here->VSRCbranch); } return(OK); case VSRC_POWER: if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "VSRCask"; strcpy(errMsg,msg); return(E_ASKPOWER); } else { value->rValue = (*(ckt->CKTrhsOld+here->VSRCposNode) - *(ckt->CKTrhsOld + here->VSRCnegNode)) * -*(ckt->CKTrhsOld + here->VSRCbranch); } return(OK); #ifdef SHARED_MODULE case VSRC_EXTERNAL: /* Don't do anything */ return (OK); #endif default: return (E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/vsrc/vsrcload.c0000644000175000017500000004141513546075722022126 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vsrcdefs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/1-f-code.h" #ifdef XSPICE_EXP /* gtri - begin - wbk - modify for supply ramping option */ #include "ngspice/cmproto.h" /* gtri - end - wbk - modify for supply ramping option */ #endif #ifdef SHARED_MODULE extern double getvsrcval(double, char*); #endif int VSRCload(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current value into the * sparse matrix previously provided */ { VSRCmodel *model = (VSRCmodel *) inModel; VSRCinstance *here; double time; double value = 0.0; /* loop through all the source models */ for( ; model != NULL; model = VSRCnextModel(model)) { /* loop through all the instances of the model */ for (here = VSRCinstances(model); here != NULL ; here=VSRCnextInstance(here)) { *(here->VSRCposIbrPtr) += 1.0 ; *(here->VSRCnegIbrPtr) -= 1.0 ; *(here->VSRCibrPosPtr) += 1.0 ; *(here->VSRCibrNegPtr) -= 1.0 ; if( (ckt->CKTmode & (MODEDCOP | MODEDCTRANCURVE)) && here->VSRCdcGiven ) { /* load using DC value */ #ifdef XSPICE_EXP /* gtri - begin - wbk - modify to process srcFact, etc. for all sources */ value = here->VSRCdcValue; #else value = here->VSRCdcValue * ckt->CKTsrcFact; #endif } else { if(ckt->CKTmode & (MODEDC)) { time = 0; } else { time = ckt->CKTtime; } /* use the transient functions */ switch(here->VSRCfunctionType) { default: value = here->VSRCdcValue; break; case PULSE: { double V1, V2, TD, TR, TF, PW, PER; double basetime = 0; #ifdef XSPICE double PHASE; double phase; double deltat; #endif V1 = here->VSRCcoeffs[0]; V2 = here->VSRCcoeffs[1]; TD = here->VSRCfunctionOrder > 2 ? here->VSRCcoeffs[2] : 0.0; TR = here->VSRCfunctionOrder > 3 && here->VSRCcoeffs[3] != 0.0 ? here->VSRCcoeffs[3] : ckt->CKTstep; TF = here->VSRCfunctionOrder > 4 && here->VSRCcoeffs[4] != 0.0 ? here->VSRCcoeffs[4] : ckt->CKTstep; PW = here->VSRCfunctionOrder > 5 && here->VSRCcoeffs[5] != 0.0 ? here->VSRCcoeffs[5] : ckt->CKTfinalTime; PER = here->VSRCfunctionOrder > 6 && here->VSRCcoeffs[6] != 0.0 ? here->VSRCcoeffs[6] : ckt->CKTfinalTime; /* shift time by delay time TD */ time -= TD; #ifdef XSPICE /* gtri - begin - wbk - add PHASE parameter */ PHASE = here->VSRCfunctionOrder > 7 ? here->VSRCcoeffs[7] : 0.0; /* normalize phase to cycles */ phase = PHASE / 360.0; phase = fmod(phase, 1.0); deltat = phase * PER; while (deltat > 0) deltat -= PER; /* shift time by pase (neg. for pos. phase value) */ time += deltat; /* gtri - end - wbk - add PHASE parameter */ #endif if(time > PER) { /* repeating signal - figure out where we are */ /* in period */ basetime = PER * floor(time/PER); time -= basetime; } if (time <= 0 || time >= TR + PW + TF) { value = V1; } else if (time >= TR && time <= TR + PW) { value = V2; } else if (time > 0 && time < TR) { value = V1 + (V2 - V1) * (time) / TR; } else { /* time > TR + PW && < TR + PW + TF */ value = V2 + (V1 - V2) * (time - (TR + PW)) / TF; } } break; case SINE: { double VO, VA, FREQ, TD, THETA; /* gtri - begin - wbk - add PHASE parameter */ #ifdef XSPICE double PHASE; double phase; PHASE = here->VSRCfunctionOrder > 5 ? here->VSRCcoeffs[5] : 0.0; /* compute phase in radians */ phase = PHASE * M_PI / 180.0; #endif VO = here->VSRCcoeffs[0]; VA = here->VSRCcoeffs[1]; FREQ = here->VSRCfunctionOrder > 2 && here->VSRCcoeffs[2] != 0.0 ? here->VSRCcoeffs[2] : (1/ckt->CKTfinalTime); TD = here->VSRCfunctionOrder > 3 ? here->VSRCcoeffs[3] : 0.0; THETA = here->VSRCfunctionOrder > 4 ? here->VSRCcoeffs[4] : 0.0; time -= TD; if (time <= 0) { #ifdef XSPICE value = VO + VA * sin(phase); } else { value = VO + VA * sin(FREQ*time * 2.0 * M_PI + phase) * exp(-time*THETA); #else value = VO; } else { value = VO + VA * sin(FREQ * time * 2.0 * M_PI) * exp(-time*THETA); #endif /* gtri - end - wbk - add PHASE parameter */ } } break; case EXP: { double V1, V2, TD1, TD2, TAU1, TAU2; V1 = here->VSRCcoeffs[0]; V2 = here->VSRCcoeffs[1]; TD1 = here->VSRCfunctionOrder > 2 && here->VSRCcoeffs[2] != 0.0 ? here->VSRCcoeffs[2] : ckt->CKTstep; TAU1 = here->VSRCfunctionOrder > 3 && here->VSRCcoeffs[3] != 0.0 ? here->VSRCcoeffs[3] : ckt->CKTstep; TD2 = here->VSRCfunctionOrder > 4 && here->VSRCcoeffs[4] != 0.0 ? here->VSRCcoeffs[4] : TD1 + ckt->CKTstep; TAU2 = here->VSRCfunctionOrder > 5 && here->VSRCcoeffs[5] ? here->VSRCcoeffs[5] : ckt->CKTstep; if(time <= TD1) { value = V1; } else if (time <= TD2) { value = V1 + (V2-V1)*(1-exp(-(time-TD1)/TAU1)); } else { value = V1 + (V2-V1)*(1-exp(-(time-TD1)/TAU1)) + (V1-V2)*(1-exp(-(time-TD2)/TAU2)) ; } } break; case SFFM: { double VO, VA, FC, MDI, FS; /* gtri - begin - wbk - add PHASE parameters */ #ifdef XSPICE double PHASEC, PHASES; double phasec; double phases; PHASEC = here->VSRCfunctionOrder > 5 ? here->VSRCcoeffs[5] : 0.0; PHASES = here->VSRCfunctionOrder > 6 ? here->VSRCcoeffs[6] : 0.0; /* compute phases in radians */ phasec = PHASEC * M_PI / 180.0; phases = PHASES * M_PI / 180.0; #endif VO = here->VSRCcoeffs[0]; VA = here->VSRCcoeffs[1]; FC = here->VSRCfunctionOrder > 2 && here->VSRCcoeffs[2] ? here->VSRCcoeffs[2] : (1/ckt->CKTfinalTime); MDI = here->VSRCfunctionOrder > 3 ? here->VSRCcoeffs[3] : 0.0; FS = here->VSRCfunctionOrder > 4 && here->VSRCcoeffs[4] ? here->VSRCcoeffs[4] : (1/ckt->CKTfinalTime); #ifdef XSPICE /* compute waveform value */ value = VO + VA * sin((2.0 * M_PI * FC * time + phasec) + MDI * sin(2.0 * M_PI * FS * time + phases)); #else value = VO + VA * sin((2.0 * M_PI * FC * time) + MDI * sin(2.0 * M_PI * FS * time)); #endif /* gtri - end - wbk - add PHASE parameters */ } break; case AM: { double VA, FC, MF, VO, TD; /* gtri - begin - wbk - add PHASE parameters */ #ifdef XSPICE double PHASEC, PHASES; double phasec; double phases; PHASEC = here->VSRCfunctionOrder > 5 ? here->VSRCcoeffs[5] : 0.0; PHASES = here->VSRCfunctionOrder > 6 ? here->VSRCcoeffs[6] : 0.0; /* compute phases in radians */ phasec = PHASEC * M_PI / 180.0; phases = PHASES * M_PI / 180.0; #endif VA = here->VSRCcoeffs[0]; VO = here->VSRCcoeffs[1]; MF = here->VSRCfunctionOrder > 2 && here->VSRCcoeffs[2] ? here->VSRCcoeffs[2] : (1/ckt->CKTfinalTime); FC = here->VSRCfunctionOrder > 3 ? here->VSRCcoeffs[3] : 0.0; TD = here->VSRCfunctionOrder > 4 && here->VSRCcoeffs[4] ? here->VSRCcoeffs[4] : 0.0; time -= TD; if (time <= 0) { value = 0; } else { #ifdef XSPICE /* compute waveform value */ value = VA * (VO + sin(2.0 * M_PI * MF * time + phases )) * sin(2.0 * M_PI * FC * time + phases); #else value = VA * (VO + sin(2.0 * M_PI * MF * time)) * sin(2.0 * M_PI * FC * time); #endif } /* gtri - end - wbk - add PHASE parameters */ } break; case PWL: { int i = 0, num_repeat = 0, ii = 0; double foo, repeat_time = 0, end_time, breakpt_time, itime; time -= here->VSRCrdelay; if(time < *(here->VSRCcoeffs)) { foo = *(here->VSRCcoeffs + 1) ; value = foo; goto loadDone; } do { for(i=ii ; i<(here->VSRCfunctionOrder/2)-1; i++ ) { itime = *(here->VSRCcoeffs+2*i); if ( AlmostEqualUlps(itime+repeat_time, time, 3 )) { foo = *(here->VSRCcoeffs+2*i+1); value = foo; goto loadDone; } else if ( (*(here->VSRCcoeffs+2*i)+repeat_time < time) && (*(here->VSRCcoeffs+2*(i+1))+repeat_time > time) ) { foo = *(here->VSRCcoeffs+2*i+1) + (((time-(*(here->VSRCcoeffs+2*i)+repeat_time))/ (*(here->VSRCcoeffs+2*(i+1)) - *(here->VSRCcoeffs+2*i))) * (*(here->VSRCcoeffs+2*i+3) - *(here->VSRCcoeffs+2*i+1))); value = foo; goto loadDone; } } foo = *(here->VSRCcoeffs+ here->VSRCfunctionOrder-1) ; value = foo; if ( !here->VSRCrGiven ) goto loadDone; end_time = *(here->VSRCcoeffs + here->VSRCfunctionOrder-2); breakpt_time = *(here->VSRCcoeffs + here->VSRCrBreakpt); repeat_time = end_time + (end_time - breakpt_time)*num_repeat++ - breakpt_time; ii = here->VSRCrBreakpt/2; } while ( here->VSRCrGiven ); break; } /**** tansient noise routines: VNoi2 2 0 DC 0 TRNOISE(10n 0.5n 0 0n) : generate gaussian distributed noise rms value, time step, 0 0 VNoi1 1 0 DC 0 TRNOISE(0n 0.5n 1 10n) : generate 1/f noise 0, time step, exponent < 2, rms value VNoi3 3 0 DC 0 TRNOISE(0 0 0 0 15m 22u 50u) : generate RTS noise 0 0 0 0, amplitude, capture time, emission time */ case TRNOISE: { struct trnoise_state *state = here -> VSRCtrnoise_state; double TS = state -> TS; double RTSAM = state->RTSAM; /* reset top (hack for repeated tran commands) when there is the jump from time=0 to time>0 */ if (time == 0.0) state->timezero = TRUE; else if (state->timezero) { state->top = 0; state->timezero = FALSE; } /* no noise or time == 0 */ if(TS == 0.0 || time == 0.0) { value = 0.0; } else { /* 1/f and white noise */ size_t n1 = (size_t) floor(time / TS); double V1 = trnoise_state_get(state, ckt, n1); double V2 = trnoise_state_get(state, ckt, n1+1); value = V1 + (V2 - V1) * (time / TS - (double)n1); } /* RTS noise */ if (RTSAM > 0) { double RTScapTime = state->RTScapTime; if (time >= RTScapTime) value += RTSAM; } /* DC value */ if(here -> VSRCdcGiven) value += here->VSRCdcValue; } break; case TRRANDOM: { struct trrandom_state *state = here -> VSRCtrrandom_state; value = state -> value; /* DC value */ if(here -> VSRCdcGiven) value += here->VSRCdcValue; } break; #ifdef SHARED_MODULE case EXTERNAL: { value = getvsrcval(time, here->VSRCname); if(here -> VSRCdcGiven) value += here->VSRCdcValue; } break; #endif } // switch } // else (line 48) loadDone: /* gtri - begin - wbk - modify for supply ramping option */ #ifdef XSPICE_EXP value *= ckt->CKTsrcFact; value *= cm_analog_ramp_factor(); #else if (ckt->CKTmode & MODETRANOP) value *= ckt->CKTsrcFact; #endif /* gtri - end - wbk - modify to process srcFact, etc. for all sources */ /* load the new voltage value into the matrix */ *(ckt->CKTrhs + (here->VSRCbranch)) += value; } // for loop instances } // for loop models return(OK); } tmpk8ny_4pz/src/spicelib/devices/vsrc/vsrcfbr.c0000644000175000017500000000171413546075722021756 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vsrcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VSRCfindBr(CKTcircuit *ckt, GENmodel *inModel, IFuid name) { VSRCmodel *model = (VSRCmodel *)inModel; VSRCinstance *here; int error; CKTnode *tmp; for( ; model != NULL; model = VSRCnextModel(model)) { for (here = VSRCinstances(model); here != NULL; here = VSRCnextInstance(here)) { if(here->VSRCname == name) { if(here->VSRCbranch == 0) { error = CKTmkCur(ckt,&tmp,here->VSRCname,"branch"); if(error) return(error); here->VSRCbranch = tmp->number; } return(here->VSRCbranch); } } } return(0); } tmpk8ny_4pz/src/spicelib/devices/vsrc/vsrcacld.c0000644000175000017500000000256413546075722022114 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vsrcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VSRCacLoad(GENmodel *inModel, CKTcircuit *ckt) { VSRCmodel *model = (VSRCmodel *) inModel; VSRCinstance *here; for( ; model != NULL; model = VSRCnextModel(model)) { /* loop through all the instances of the model */ for (here = VSRCinstances(model); here != NULL ; here=VSRCnextInstance(here)) { double acReal, acImag; if (ckt->CKTmode & MODEACNOISE) { if ((GENinstance *) here == ckt->noise_input) { acReal = 1.0; acImag = 0.0; } else { acReal = 0.0; acImag = 0.0; } } else { acReal = here->VSRCacReal; acImag = here->VSRCacImag; } *(here->VSRCposIbrPtr) += 1.0 ; *(here->VSRCnegIbrPtr) -= 1.0 ; *(here->VSRCibrPosPtr) += 1.0 ; *(here->VSRCibrNegPtr) -= 1.0 ; *(ckt->CKTrhs + (here->VSRCbranch)) += acReal; *(ckt->CKTirhs + (here->VSRCbranch)) += acImag; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vsrc/vsrc.c0000644000175000017500000000500013546075722021254 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "vsrcdefs.h" #include "ngspice/suffix.h" IFparm VSRCpTable[] = { /* parameters */ IOPP("dc", VSRC_DC, IF_REAL ,"DC value of source"), IOPPA("acmag", VSRC_AC_MAG, IF_REAL ,"AC Magnitude"), IOPAAU("acphase", VSRC_AC_PHASE, IF_REAL ,"AC Phase"), /* Modified to allow print @vin[sin] A.Roldan */ IOP ("pulse", VSRC_PULSE, IF_REALVEC,"Pulse description"), IOP ("sin", VSRC_SINE, IF_REALVEC,"Sinusoidal source description"), IOPR("sine", VSRC_SINE, IF_REALVEC,"Sinusoidal source description"), IOP ("exp", VSRC_EXP, IF_REALVEC,"Exponential source description"), IOP ("pwl", VSRC_PWL, IF_REALVEC,"Piecewise linear description"), IOP ("sffm", VSRC_SFFM, IF_REALVEC,"Single freq. FM description"), IOP ("am", VSRC_AM, IF_REALVEC,"Amplitude modulation description"), IOP ("trnoise", VSRC_TRNOISE, IF_REALVEC,"Transient noise description"), IOP ("trrandom", VSRC_TRRANDOM, IF_REALVEC,"random source description"), #ifdef SHARED_MODULE IOP ("external", VSRC_EXTERNAL, IF_REALVEC,"external source description"), #endif OPU ("pos_node",VSRC_POS_NODE, IF_INTEGER,"Positive node of source"), OPU ("neg_node",VSRC_NEG_NODE, IF_INTEGER,"Negative node of source"), OPU ("function",VSRC_FCN_TYPE, IF_INTEGER,"Function of the source"), OPU ("order", VSRC_FCN_ORDER, IF_INTEGER,"Order of the source function"), OPU ("coeffs", VSRC_FCN_COEFFS,IF_REALVEC,"Coefficients for the function"), OPU ("acreal", VSRC_AC_REAL, IF_REAL, "AC real part"), OPU ("acimag", VSRC_AC_IMAG, IF_REAL, "AC imaginary part"), IP ("ac", VSRC_AC, IF_REALVEC,"AC magnitude, phase vector"), OP ("i", VSRC_CURRENT, IF_REAL, "Voltage source current"), OP ("p", VSRC_POWER, IF_REAL, "Instantaneous power"), IP ("r", VSRC_R, IF_REAL, "pwl repeat value"), IP ("td", VSRC_TD, IF_REAL, "pwl delay value"), IP ("distof1", VSRC_D_F1, IF_REALVEC,"f1 input for distortion"), IP ("distof2", VSRC_D_F2, IF_REALVEC,"f2 input for distortion") }; char *VSRCnames[] = { "V+", "V-" }; int VSRCnSize = NUMELEMS(VSRCnames); int VSRCpTSize = NUMELEMS(VSRCpTable); int VSRCmPTSize = 0; int VSRCiSize = sizeof(VSRCinstance); int VSRCmSize = sizeof(VSRCmodel); tmpk8ny_4pz/src/spicelib/devices/vsrc/vsrcinit.c0000644000175000017500000000313013546075722022142 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "vsrcitf.h" #include "vsrcext.h" #include "vsrcinit.h" SPICEdev VSRCinfo = { .DEVpublic = { .name = "Vsource", .description = "Independent voltage source", .terms = &VSRCnSize, .numNames = &VSRCnSize, .termNames = VSRCnames, .numInstanceParms = &VSRCpTSize, .instanceParms = VSRCpTable, .numModelParms = NULL, .modelParms = NULL, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = VSRCparam, .DEVmodParam = NULL, .DEVload = VSRCload, .DEVsetup = VSRCsetup, .DEVunsetup = VSRCunsetup, .DEVpzSetup = VSRCpzSetup, .DEVtemperature = VSRCtemp, .DEVtrunc = NULL, .DEVfindBranch = VSRCfindBr, .DEVacLoad = VSRCacLoad, .DEVaccept = VSRCaccept, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = VSRCdelete, .DEVsetic = NULL, .DEVask = VSRCask, .DEVmodAsk = NULL, .DEVpzLoad = VSRCpzLoad, .DEVconvTest = NULL, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &VSRCiSize, .DEVmodSize = &VSRCmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_vsrc_info(void) { return &VSRCinfo; } tmpk8ny_4pz/src/spicelib/devices/vsrc/vsrcpzld.c0000644000175000017500000000256113546075722022157 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "vsrcdefs.h" #include "ngspice/suffix.h" /* ARGSUSED */ int VSRCpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { VSRCmodel *model = (VSRCmodel *)inModel; VSRCinstance *here; NG_IGNORE(s); NG_IGNORE(ckt); for( ; model != NULL; model = VSRCnextModel(model)) { /* loop through all the instances of the model */ for (here = VSRCinstances(model); here != NULL ; here=VSRCnextInstance(here)) { if (!(here->VSRCacGiven)) { /*a dc source*/ /*the connecting nodes are shorted*/ *(here->VSRCposIbrPtr) += 1.0 ; *(here->VSRCnegIbrPtr) += -1.0 ; *(here->VSRCibrPosPtr) += 1.0 ; *(here->VSRCibrNegPtr) += -1.0 ; } else { /*an ac source*/ /*no effective contribution *diagonal element made 1 */ *(here->VSRCposIbrPtr) += 1.0 ; *(here->VSRCnegIbrPtr) += -1.0 ; *(here->VSRCibrIbrPtr) += 1.0 ; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vsrc/vsrcext.h0000644000175000017500000000145613546075722022015 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ extern int VSRCaccept(CKTcircuit*,GENmodel*); extern int VSRCacLoad(GENmodel*,CKTcircuit*); extern int VSRCask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int VSRCdelete(GENinstance*); extern int VSRCfindBr(CKTcircuit*,GENmodel*,IFuid); extern int VSRCload(GENmodel*,CKTcircuit*); extern int VSRCmAsk(CKTcircuit*,GENmodel*,int,IFvalue*); extern int VSRCparam(int,IFvalue*,GENinstance*,IFvalue*); extern int VSRCpzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int VSRCsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int VSRCunsetup(GENmodel*,CKTcircuit*); extern int VSRCpzSetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int VSRCtemp(GENmodel*,CKTcircuit*); tmpk8ny_4pz/src/spicelib/devices/vsrc/vsrcinit.h0000644000175000017500000000030213546075722022145 0ustar carstencarsten#ifndef _VSRCINIT_H #define _VSRCINIT_H extern IFparm VSRCpTable[ ]; extern char *VSRCnames[ ]; extern int VSRCpTSize; extern int VSRCnSize; extern int VSRCiSize; extern int VSRCmSize; #endif tmpk8ny_4pz/src/spicelib/devices/vsrc/vsrcpzs.c0000644000175000017500000000320713546075722022020 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "vsrcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* load the voltage source structure with those pointers needed later * for fast matrix loading */ int VSRCpzSetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *state) { VSRCmodel *model = (VSRCmodel *)inModel; VSRCinstance *here; CKTnode *tmp; int error; NG_IGNORE(state); /* loop through all the voltage source models */ for( ; model != NULL; model = VSRCnextModel(model)) { /* loop through all the instances of the model */ for (here = VSRCinstances(model); here != NULL ; here = VSRCnextInstance(here)) { if (here->VSRCbranch == 0) { error = CKTmkCur(ckt,&tmp,here->VSRCname,"branch"); if(error) return(error); here->VSRCbranch = tmp->number; } /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(VSRCposIbrPtr, VSRCposNode, VSRCbranch); TSTALLOC(VSRCnegIbrPtr, VSRCnegNode, VSRCbranch); TSTALLOC(VSRCibrNegPtr, VSRCbranch, VSRCnegNode); TSTALLOC(VSRCibrPosPtr, VSRCbranch, VSRCposNode); TSTALLOC(VSRCibrIbrPtr, VSRCbranch, VSRCbranch); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v1/0000755000175000017500000000000013546075722020447 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/bsim3v1/b3v1trunc.c0000644000175000017500000000235713546075722022451 0ustar carstencarsten/********** * Copyright 1990 Regents of the University of California. All rights reserved. * File: b3v1ld.c * Author: 1995 Min-Chie Jeng and Mansun Chan. * Modified by Paolo Nenzi 2002 **********/ /* * Release Notes: * BSIM3v3.1, Released by yuhua 96/12/08 */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3v1def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3v1trunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { BSIM3v1model *model = (BSIM3v1model*)inModel; BSIM3v1instance *here; #ifdef STEPDEBUG double debugtemp; #endif /* STEPDEBUG */ for (; model != NULL; model = BSIM3v1nextModel(model)) { for (here = BSIM3v1instances(model); here != NULL; here = BSIM3v1nextInstance(here)) { #ifdef STEPDEBUG debugtemp = *timeStep; #endif /* STEPDEBUG */ CKTterr(here->BSIM3v1qb,ckt,timeStep); CKTterr(here->BSIM3v1qg,ckt,timeStep); CKTterr(here->BSIM3v1qd,ckt,timeStep); #ifdef STEPDEBUG if(debugtemp != *timeStep) { printf("device %s reduces step from %g to %g\n", here->BSIM3v1name,debugtemp,*timeStep); } #endif /* STEPDEBUG */ } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v1/bsim3v1def.h0000644000175000017500000014520013546075722022565 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1995 Min-Chie Jeng and Mansun Chan. Modified: 2002 Paolo Nenzi. File: bsim3v1def.h **********/ #ifndef BSIM3v1 #define BSIM3v1 #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" typedef struct sBSIM3v1instance { struct GENinstance gen; #define BSIM3v1modPtr(inst) ((struct sBSIM3v1model *)((inst)->gen.GENmodPtr)) #define BSIM3v1nextInstance(inst) ((struct sBSIM3v1instance *)((inst)->gen.GENnextInstance)) #define BSIM3v1name gen.GENname #define BSIM3v1states gen.GENstate const int BSIM3v1dNode; const int BSIM3v1gNode; const int BSIM3v1sNode; const int BSIM3v1bNode; int BSIM3v1dNodePrime; int BSIM3v1sNodePrime; int BSIM3v1qNode; /* MCJ */ /* MCJ */ double BSIM3v1ueff; double BSIM3v1thetavth; double BSIM3v1von; double BSIM3v1vdsat; double BSIM3v1cgdo; double BSIM3v1cgso; double BSIM3v1l; double BSIM3v1w; double BSIM3v1m; double BSIM3v1drainArea; double BSIM3v1sourceArea; double BSIM3v1drainSquares; double BSIM3v1sourceSquares; double BSIM3v1drainPerimeter; double BSIM3v1sourcePerimeter; double BSIM3v1sourceConductance; double BSIM3v1drainConductance; double BSIM3v1icVBS; double BSIM3v1icVDS; double BSIM3v1icVGS; int BSIM3v1off; int BSIM3v1mode; int BSIM3v1nqsMod; /* OP point */ double BSIM3v1qinv; double BSIM3v1cd; double BSIM3v1cbs; double BSIM3v1cbd; double BSIM3v1csub; double BSIM3v1gm; double BSIM3v1gds; double BSIM3v1gmbs; double BSIM3v1gbd; double BSIM3v1gbs; double BSIM3v1gbbs; double BSIM3v1gbgs; double BSIM3v1gbds; double BSIM3v1cggb; double BSIM3v1cgdb; double BSIM3v1cgsb; double BSIM3v1cbgb; double BSIM3v1cbdb; double BSIM3v1cbsb; double BSIM3v1cdgb; double BSIM3v1cddb; double BSIM3v1cdsb; double BSIM3v1capbd; double BSIM3v1capbs; double BSIM3v1cqgb; double BSIM3v1cqdb; double BSIM3v1cqsb; double BSIM3v1cqbb; double BSIM3v1gtau; double BSIM3v1gtg; double BSIM3v1gtd; double BSIM3v1gts; double BSIM3v1gtb; double BSIM3v1tconst; struct bsim3v1SizeDependParam *pParam; unsigned BSIM3v1lGiven :1; unsigned BSIM3v1wGiven :1; unsigned BSIM3v1mGiven :1; unsigned BSIM3v1drainAreaGiven :1; unsigned BSIM3v1sourceAreaGiven :1; unsigned BSIM3v1drainSquaresGiven :1; unsigned BSIM3v1sourceSquaresGiven :1; unsigned BSIM3v1drainPerimeterGiven :1; unsigned BSIM3v1sourcePerimeterGiven :1; unsigned BSIM3v1dNodePrimeSet :1; unsigned BSIM3v1sNodePrimeSet :1; unsigned BSIM3v1icVBSGiven :1; unsigned BSIM3v1icVDSGiven :1; unsigned BSIM3v1icVGSGiven :1; unsigned BSIM3v1nqsModGiven :1; double *BSIM3v1DdPtr; double *BSIM3v1GgPtr; double *BSIM3v1SsPtr; double *BSIM3v1BbPtr; double *BSIM3v1DPdpPtr; double *BSIM3v1SPspPtr; double *BSIM3v1DdpPtr; double *BSIM3v1GbPtr; double *BSIM3v1GdpPtr; double *BSIM3v1GspPtr; double *BSIM3v1SspPtr; double *BSIM3v1BdpPtr; double *BSIM3v1BspPtr; double *BSIM3v1DPspPtr; double *BSIM3v1DPdPtr; double *BSIM3v1BgPtr; double *BSIM3v1DPgPtr; double *BSIM3v1SPgPtr; double *BSIM3v1SPsPtr; double *BSIM3v1DPbPtr; double *BSIM3v1SPbPtr; double *BSIM3v1SPdpPtr; double *BSIM3v1QqPtr; double *BSIM3v1QdpPtr; double *BSIM3v1QgPtr; double *BSIM3v1QspPtr; double *BSIM3v1QbPtr; double *BSIM3v1DPqPtr; double *BSIM3v1GqPtr; double *BSIM3v1SPqPtr; double *BSIM3v1BqPtr; #define BSIM3v1vbd BSIM3v1states+ 0 #define BSIM3v1vbs BSIM3v1states+ 1 #define BSIM3v1vgs BSIM3v1states+ 2 #define BSIM3v1vds BSIM3v1states+ 3 #define BSIM3v1qb BSIM3v1states+ 4 #define BSIM3v1cqb BSIM3v1states+ 5 #define BSIM3v1qg BSIM3v1states+ 6 #define BSIM3v1cqg BSIM3v1states+ 7 #define BSIM3v1qd BSIM3v1states+ 8 #define BSIM3v1cqd BSIM3v1states+ 9 #define BSIM3v1qbs BSIM3v1states+ 10 #define BSIM3v1qbd BSIM3v1states+ 11 #define BSIM3v1qcheq BSIM3v1states+ 12 #define BSIM3v1cqcheq BSIM3v1states+ 13 #define BSIM3v1qcdump BSIM3v1states+ 14 #define BSIM3v1cqcdump BSIM3v1states+ 15 #define BSIM3v1tau BSIM3v1states+ 16 #define BSIM3v1qdef BSIM3v1states+ 17 #define BSIM3v1numStates 18 /* indices to the array of BSIM3v1 NOISE SOURCES */ #define BSIM3v1RDNOIZ 0 #define BSIM3v1RSNOIZ 1 #define BSIM3v1IDNOIZ 2 #define BSIM3v1FLNOIZ 3 #define BSIM3v1TOTNOIZ 4 #define BSIM3v1NSRCS 5 /* the number of MOSFET(3) noise sources */ #ifndef NONOISE double BSIM3v1nVar[NSTATVARS][BSIM3v1NSRCS]; #else /* NONOISE */ double **BSIM3v1nVar; #endif /* NONOISE */ } BSIM3v1instance ; struct bsim3v1SizeDependParam { double Width; double Length; double BSIM3v1cdsc; double BSIM3v1cdscb; double BSIM3v1cdscd; double BSIM3v1cit; double BSIM3v1nfactor; double BSIM3v1xj; double BSIM3v1vsat; double BSIM3v1at; double BSIM3v1a0; double BSIM3v1ags; double BSIM3v1a1; double BSIM3v1a2; double BSIM3v1keta; double BSIM3v1nsub; double BSIM3v1npeak; double BSIM3v1ngate; double BSIM3v1gamma1; double BSIM3v1gamma2; double BSIM3v1vbx; double BSIM3v1vbi; double BSIM3v1vbm; double BSIM3v1vbsc; double BSIM3v1xt; double BSIM3v1phi; double BSIM3v1litl; double BSIM3v1k1; double BSIM3v1kt1; double BSIM3v1kt1l; double BSIM3v1kt2; double BSIM3v1k2; double BSIM3v1k3; double BSIM3v1k3b; double BSIM3v1w0; double BSIM3v1nlx; double BSIM3v1dvt0; double BSIM3v1dvt1; double BSIM3v1dvt2; double BSIM3v1dvt0w; double BSIM3v1dvt1w; double BSIM3v1dvt2w; double BSIM3v1drout; double BSIM3v1dsub; double BSIM3v1vth0; double BSIM3v1ua; double BSIM3v1ua1; double BSIM3v1ub; double BSIM3v1ub1; double BSIM3v1uc; double BSIM3v1uc1; double BSIM3v1u0; double BSIM3v1ute; double BSIM3v1voff; double BSIM3v1vfb; double BSIM3v1delta; double BSIM3v1rdsw; double BSIM3v1rds0; double BSIM3v1prwg; double BSIM3v1prwb; double BSIM3v1prt; double BSIM3v1eta0; double BSIM3v1etab; double BSIM3v1pclm; double BSIM3v1pdibl1; double BSIM3v1pdibl2; double BSIM3v1pdiblb; double BSIM3v1pscbe1; double BSIM3v1pscbe2; double BSIM3v1pvag; double BSIM3v1wr; double BSIM3v1dwg; double BSIM3v1dwb; double BSIM3v1b0; double BSIM3v1b1; double BSIM3v1alpha0; double BSIM3v1beta0; /* CV model */ double BSIM3v1elm; double BSIM3v1cgsl; double BSIM3v1cgdl; double BSIM3v1ckappa; double BSIM3v1cf; double BSIM3v1clc; double BSIM3v1cle; double BSIM3v1vfbcv; /* Pre-calculated constants */ double BSIM3v1dw; double BSIM3v1dl; double BSIM3v1leff; double BSIM3v1weff; double BSIM3v1dwc; double BSIM3v1dlc; double BSIM3v1leffCV; double BSIM3v1weffCV; double BSIM3v1abulkCVfactor; double BSIM3v1cgso; double BSIM3v1cgdo; double BSIM3v1cgbo; double BSIM3v1u0temp; double BSIM3v1vsattemp; double BSIM3v1sqrtPhi; double BSIM3v1phis3; double BSIM3v1Xdep0; double BSIM3v1sqrtXdep0; double BSIM3v1theta0vb0; double BSIM3v1thetaRout; double BSIM3v1cof1; double BSIM3v1cof2; double BSIM3v1cof3; double BSIM3v1cof4; double BSIM3v1cdep0; struct bsim3v1SizeDependParam *pNext; }; typedef struct sBSIM3v1model { struct GENmodel gen; #define BSIM3v1modType gen.GENmodType #define BSIM3v1nextModel(inst) ((struct sBSIM3v1model *)((inst)->gen.GENnextModel)) #define BSIM3v1instances(inst) ((BSIM3v1instance *)((inst)->gen.GENinstances)) #define BSIM3v1modName gen.GENmodName int BSIM3v1type; int BSIM3v1mobMod; int BSIM3v1capMod; int BSIM3v1nqsMod; int BSIM3v1noiMod; int BSIM3v1binUnit; int BSIM3v1paramChk; double BSIM3v1version; double BSIM3v1tox; double BSIM3v1cdsc; double BSIM3v1cdscb; double BSIM3v1cdscd; double BSIM3v1cit; double BSIM3v1nfactor; double BSIM3v1xj; double BSIM3v1vsat; double BSIM3v1at; double BSIM3v1a0; double BSIM3v1ags; double BSIM3v1a1; double BSIM3v1a2; double BSIM3v1keta; double BSIM3v1nsub; double BSIM3v1npeak; double BSIM3v1ngate; double BSIM3v1gamma1; double BSIM3v1gamma2; double BSIM3v1vbx; double BSIM3v1vbm; double BSIM3v1xt; double BSIM3v1k1; double BSIM3v1kt1; double BSIM3v1kt1l; double BSIM3v1kt2; double BSIM3v1k2; double BSIM3v1k3; double BSIM3v1k3b; double BSIM3v1w0; double BSIM3v1nlx; double BSIM3v1dvt0; double BSIM3v1dvt1; double BSIM3v1dvt2; double BSIM3v1dvt0w; double BSIM3v1dvt1w; double BSIM3v1dvt2w; double BSIM3v1drout; double BSIM3v1dsub; double BSIM3v1vth0; double BSIM3v1ua; double BSIM3v1ua1; double BSIM3v1ub; double BSIM3v1ub1; double BSIM3v1uc; double BSIM3v1uc1; double BSIM3v1u0; double BSIM3v1ute; double BSIM3v1voff; double BSIM3v1delta; double BSIM3v1rdsw; double BSIM3v1prwg; double BSIM3v1prwb; double BSIM3v1prt; double BSIM3v1eta0; double BSIM3v1etab; double BSIM3v1pclm; double BSIM3v1pdibl1; double BSIM3v1pdibl2; double BSIM3v1pdiblb; double BSIM3v1pscbe1; double BSIM3v1pscbe2; double BSIM3v1pvag; double BSIM3v1wr; double BSIM3v1dwg; double BSIM3v1dwb; double BSIM3v1b0; double BSIM3v1b1; double BSIM3v1alpha0; double BSIM3v1beta0; /* serban */ double BSIM3v1hdif; /* CV model */ double BSIM3v1elm; double BSIM3v1cgsl; double BSIM3v1cgdl; double BSIM3v1ckappa; double BSIM3v1cf; double BSIM3v1vfbcv; double BSIM3v1clc; double BSIM3v1cle; double BSIM3v1dwc; double BSIM3v1dlc; /* Length Dependence */ double BSIM3v1lcdsc; double BSIM3v1lcdscb; double BSIM3v1lcdscd; double BSIM3v1lcit; double BSIM3v1lnfactor; double BSIM3v1lxj; double BSIM3v1lvsat; double BSIM3v1lat; double BSIM3v1la0; double BSIM3v1lags; double BSIM3v1la1; double BSIM3v1la2; double BSIM3v1lketa; double BSIM3v1lnsub; double BSIM3v1lnpeak; double BSIM3v1lngate; double BSIM3v1lgamma1; double BSIM3v1lgamma2; double BSIM3v1lvbx; double BSIM3v1lvbm; double BSIM3v1lxt; double BSIM3v1lk1; double BSIM3v1lkt1; double BSIM3v1lkt1l; double BSIM3v1lkt2; double BSIM3v1lk2; double BSIM3v1lk3; double BSIM3v1lk3b; double BSIM3v1lw0; double BSIM3v1lnlx; double BSIM3v1ldvt0; double BSIM3v1ldvt1; double BSIM3v1ldvt2; double BSIM3v1ldvt0w; double BSIM3v1ldvt1w; double BSIM3v1ldvt2w; double BSIM3v1ldrout; double BSIM3v1ldsub; double BSIM3v1lvth0; double BSIM3v1lua; double BSIM3v1lua1; double BSIM3v1lub; double BSIM3v1lub1; double BSIM3v1luc; double BSIM3v1luc1; double BSIM3v1lu0; double BSIM3v1lute; double BSIM3v1lvoff; double BSIM3v1ldelta; double BSIM3v1lrdsw; double BSIM3v1lprwg; double BSIM3v1lprwb; double BSIM3v1lprt; double BSIM3v1leta0; double BSIM3v1letab; double BSIM3v1lpclm; double BSIM3v1lpdibl1; double BSIM3v1lpdibl2; double BSIM3v1lpdiblb; double BSIM3v1lpscbe1; double BSIM3v1lpscbe2; double BSIM3v1lpvag; double BSIM3v1lwr; double BSIM3v1ldwg; double BSIM3v1ldwb; double BSIM3v1lb0; double BSIM3v1lb1; double BSIM3v1lalpha0; double BSIM3v1lbeta0; /* CV model */ double BSIM3v1lelm; double BSIM3v1lcgsl; double BSIM3v1lcgdl; double BSIM3v1lckappa; double BSIM3v1lcf; double BSIM3v1lclc; double BSIM3v1lcle; double BSIM3v1lvfbcv; /* Width Dependence */ double BSIM3v1wcdsc; double BSIM3v1wcdscb; double BSIM3v1wcdscd; double BSIM3v1wcit; double BSIM3v1wnfactor; double BSIM3v1wxj; double BSIM3v1wvsat; double BSIM3v1wat; double BSIM3v1wa0; double BSIM3v1wags; double BSIM3v1wa1; double BSIM3v1wa2; double BSIM3v1wketa; double BSIM3v1wnsub; double BSIM3v1wnpeak; double BSIM3v1wngate; double BSIM3v1wgamma1; double BSIM3v1wgamma2; double BSIM3v1wvbx; double BSIM3v1wvbm; double BSIM3v1wxt; double BSIM3v1wk1; double BSIM3v1wkt1; double BSIM3v1wkt1l; double BSIM3v1wkt2; double BSIM3v1wk2; double BSIM3v1wk3; double BSIM3v1wk3b; double BSIM3v1ww0; double BSIM3v1wnlx; double BSIM3v1wdvt0; double BSIM3v1wdvt1; double BSIM3v1wdvt2; double BSIM3v1wdvt0w; double BSIM3v1wdvt1w; double BSIM3v1wdvt2w; double BSIM3v1wdrout; double BSIM3v1wdsub; double BSIM3v1wvth0; double BSIM3v1wua; double BSIM3v1wua1; double BSIM3v1wub; double BSIM3v1wub1; double BSIM3v1wuc; double BSIM3v1wuc1; double BSIM3v1wu0; double BSIM3v1wute; double BSIM3v1wvoff; double BSIM3v1wdelta; double BSIM3v1wrdsw; double BSIM3v1wprwg; double BSIM3v1wprwb; double BSIM3v1wprt; double BSIM3v1weta0; double BSIM3v1wetab; double BSIM3v1wpclm; double BSIM3v1wpdibl1; double BSIM3v1wpdibl2; double BSIM3v1wpdiblb; double BSIM3v1wpscbe1; double BSIM3v1wpscbe2; double BSIM3v1wpvag; double BSIM3v1wwr; double BSIM3v1wdwg; double BSIM3v1wdwb; double BSIM3v1wb0; double BSIM3v1wb1; double BSIM3v1walpha0; double BSIM3v1wbeta0; /* CV model */ double BSIM3v1welm; double BSIM3v1wcgsl; double BSIM3v1wcgdl; double BSIM3v1wckappa; double BSIM3v1wcf; double BSIM3v1wclc; double BSIM3v1wcle; double BSIM3v1wvfbcv; /* Cross-term Dependence */ double BSIM3v1pcdsc; double BSIM3v1pcdscb; double BSIM3v1pcdscd; double BSIM3v1pcit; double BSIM3v1pnfactor; double BSIM3v1pxj; double BSIM3v1pvsat; double BSIM3v1pat; double BSIM3v1pa0; double BSIM3v1pags; double BSIM3v1pa1; double BSIM3v1pa2; double BSIM3v1pketa; double BSIM3v1pnsub; double BSIM3v1pnpeak; double BSIM3v1pngate; double BSIM3v1pgamma1; double BSIM3v1pgamma2; double BSIM3v1pvbx; double BSIM3v1pvbm; double BSIM3v1pxt; double BSIM3v1pk1; double BSIM3v1pkt1; double BSIM3v1pkt1l; double BSIM3v1pkt2; double BSIM3v1pk2; double BSIM3v1pk3; double BSIM3v1pk3b; double BSIM3v1pw0; double BSIM3v1pnlx; double BSIM3v1pdvt0; double BSIM3v1pdvt1; double BSIM3v1pdvt2; double BSIM3v1pdvt0w; double BSIM3v1pdvt1w; double BSIM3v1pdvt2w; double BSIM3v1pdrout; double BSIM3v1pdsub; double BSIM3v1pvth0; double BSIM3v1pua; double BSIM3v1pua1; double BSIM3v1pub; double BSIM3v1pub1; double BSIM3v1puc; double BSIM3v1puc1; double BSIM3v1pu0; double BSIM3v1pute; double BSIM3v1pvoff; double BSIM3v1pdelta; double BSIM3v1prdsw; double BSIM3v1pprwg; double BSIM3v1pprwb; double BSIM3v1pprt; double BSIM3v1peta0; double BSIM3v1petab; double BSIM3v1ppclm; double BSIM3v1ppdibl1; double BSIM3v1ppdibl2; double BSIM3v1ppdiblb; double BSIM3v1ppscbe1; double BSIM3v1ppscbe2; double BSIM3v1ppvag; double BSIM3v1pwr; double BSIM3v1pdwg; double BSIM3v1pdwb; double BSIM3v1pb0; double BSIM3v1pb1; double BSIM3v1palpha0; double BSIM3v1pbeta0; /* CV model */ double BSIM3v1pelm; double BSIM3v1pcgsl; double BSIM3v1pcgdl; double BSIM3v1pckappa; double BSIM3v1pcf; double BSIM3v1pclc; double BSIM3v1pcle; double BSIM3v1pvfbcv; double BSIM3v1tnom; double BSIM3v1cgso; double BSIM3v1cgdo; double BSIM3v1cgbo; double BSIM3v1xpart; double BSIM3v1cFringOut; double BSIM3v1cFringMax; double BSIM3v1sheetResistance; double BSIM3v1jctSatCurDensity; double BSIM3v1jctSidewallSatCurDensity; double BSIM3v1bulkJctPotential; double BSIM3v1bulkJctBotGradingCoeff; double BSIM3v1bulkJctSideGradingCoeff; double BSIM3v1bulkJctGateSideGradingCoeff; double BSIM3v1sidewallJctPotential; double BSIM3v1GatesidewallJctPotential; double BSIM3v1unitAreaJctCap; double BSIM3v1unitLengthSidewallJctCap; double BSIM3v1unitLengthGateSidewallJctCap; double BSIM3v1jctEmissionCoeff; double BSIM3v1jctTempExponent; double BSIM3v1Lint; double BSIM3v1Ll; double BSIM3v1Lln; double BSIM3v1Lw; double BSIM3v1Lwn; double BSIM3v1Lwl; double BSIM3v1Lmin; double BSIM3v1Lmax; double BSIM3v1Wint; double BSIM3v1Wl; double BSIM3v1Wln; double BSIM3v1Ww; double BSIM3v1Wwn; double BSIM3v1Wwl; double BSIM3v1Wmin; double BSIM3v1Wmax; /* Pre-calculated constants */ /* MCJ: move to size-dependent param. */ double BSIM3v1vtm; double BSIM3v1cox; double BSIM3v1cof1; double BSIM3v1cof2; double BSIM3v1cof3; double BSIM3v1cof4; double BSIM3v1vcrit; double BSIM3v1factor1; double BSIM3v1jctTempSatCurDensity; double BSIM3v1jctSidewallTempSatCurDensity; double BSIM3v1oxideTrapDensityA; double BSIM3v1oxideTrapDensityB; double BSIM3v1oxideTrapDensityC; double BSIM3v1em; double BSIM3v1ef; double BSIM3v1af; double BSIM3v1kf; struct bsim3v1SizeDependParam *pSizeDependParamKnot; /* Flags */ unsigned BSIM3v1mobModGiven :1; unsigned BSIM3v1binUnitGiven :1; unsigned BSIM3v1capModGiven :1; unsigned BSIM3v1paramChkGiven :1; unsigned BSIM3v1nqsModGiven :1; unsigned BSIM3v1noiModGiven :1; unsigned BSIM3v1typeGiven :1; unsigned BSIM3v1toxGiven :1; unsigned BSIM3v1versionGiven :1; unsigned BSIM3v1cdscGiven :1; unsigned BSIM3v1cdscbGiven :1; unsigned BSIM3v1cdscdGiven :1; unsigned BSIM3v1citGiven :1; unsigned BSIM3v1nfactorGiven :1; unsigned BSIM3v1xjGiven :1; unsigned BSIM3v1vsatGiven :1; unsigned BSIM3v1atGiven :1; unsigned BSIM3v1a0Given :1; unsigned BSIM3v1agsGiven :1; unsigned BSIM3v1a1Given :1; unsigned BSIM3v1a2Given :1; unsigned BSIM3v1ketaGiven :1; unsigned BSIM3v1nsubGiven :1; unsigned BSIM3v1npeakGiven :1; unsigned BSIM3v1ngateGiven :1; unsigned BSIM3v1gamma1Given :1; unsigned BSIM3v1gamma2Given :1; unsigned BSIM3v1vbxGiven :1; unsigned BSIM3v1vbmGiven :1; unsigned BSIM3v1xtGiven :1; unsigned BSIM3v1k1Given :1; unsigned BSIM3v1kt1Given :1; unsigned BSIM3v1kt1lGiven :1; unsigned BSIM3v1kt2Given :1; unsigned BSIM3v1k2Given :1; unsigned BSIM3v1k3Given :1; unsigned BSIM3v1k3bGiven :1; unsigned BSIM3v1w0Given :1; unsigned BSIM3v1nlxGiven :1; unsigned BSIM3v1dvt0Given :1; unsigned BSIM3v1dvt1Given :1; unsigned BSIM3v1dvt2Given :1; unsigned BSIM3v1dvt0wGiven :1; unsigned BSIM3v1dvt1wGiven :1; unsigned BSIM3v1dvt2wGiven :1; unsigned BSIM3v1droutGiven :1; unsigned BSIM3v1dsubGiven :1; unsigned BSIM3v1vth0Given :1; unsigned BSIM3v1uaGiven :1; unsigned BSIM3v1ua1Given :1; unsigned BSIM3v1ubGiven :1; unsigned BSIM3v1ub1Given :1; unsigned BSIM3v1ucGiven :1; unsigned BSIM3v1uc1Given :1; unsigned BSIM3v1u0Given :1; unsigned BSIM3v1uteGiven :1; unsigned BSIM3v1voffGiven :1; unsigned BSIM3v1rdswGiven :1; unsigned BSIM3v1prwgGiven :1; unsigned BSIM3v1prwbGiven :1; unsigned BSIM3v1prtGiven :1; unsigned BSIM3v1eta0Given :1; unsigned BSIM3v1etabGiven :1; unsigned BSIM3v1pclmGiven :1; unsigned BSIM3v1pdibl1Given :1; unsigned BSIM3v1pdibl2Given :1; unsigned BSIM3v1pdiblbGiven :1; unsigned BSIM3v1pscbe1Given :1; unsigned BSIM3v1pscbe2Given :1; unsigned BSIM3v1pvagGiven :1; unsigned BSIM3v1deltaGiven :1; unsigned BSIM3v1wrGiven :1; unsigned BSIM3v1dwgGiven :1; unsigned BSIM3v1dwbGiven :1; unsigned BSIM3v1b0Given :1; unsigned BSIM3v1b1Given :1; unsigned BSIM3v1alpha0Given :1; unsigned BSIM3v1beta0Given :1; unsigned BSIM3v1hdifGiven :1; /* CV model */ unsigned BSIM3v1elmGiven :1; unsigned BSIM3v1cgslGiven :1; unsigned BSIM3v1cgdlGiven :1; unsigned BSIM3v1ckappaGiven :1; unsigned BSIM3v1cfGiven :1; unsigned BSIM3v1vfbcvGiven :1; unsigned BSIM3v1clcGiven :1; unsigned BSIM3v1cleGiven :1; unsigned BSIM3v1dwcGiven :1; unsigned BSIM3v1dlcGiven :1; /* Length dependence */ unsigned BSIM3v1lcdscGiven :1; unsigned BSIM3v1lcdscbGiven :1; unsigned BSIM3v1lcdscdGiven :1; unsigned BSIM3v1lcitGiven :1; unsigned BSIM3v1lnfactorGiven :1; unsigned BSIM3v1lxjGiven :1; unsigned BSIM3v1lvsatGiven :1; unsigned BSIM3v1latGiven :1; unsigned BSIM3v1la0Given :1; unsigned BSIM3v1lagsGiven :1; unsigned BSIM3v1la1Given :1; unsigned BSIM3v1la2Given :1; unsigned BSIM3v1lketaGiven :1; unsigned BSIM3v1lnsubGiven :1; unsigned BSIM3v1lnpeakGiven :1; unsigned BSIM3v1lngateGiven :1; unsigned BSIM3v1lgamma1Given :1; unsigned BSIM3v1lgamma2Given :1; unsigned BSIM3v1lvbxGiven :1; unsigned BSIM3v1lvbmGiven :1; unsigned BSIM3v1lxtGiven :1; unsigned BSIM3v1lk1Given :1; unsigned BSIM3v1lkt1Given :1; unsigned BSIM3v1lkt1lGiven :1; unsigned BSIM3v1lkt2Given :1; unsigned BSIM3v1lk2Given :1; unsigned BSIM3v1lk3Given :1; unsigned BSIM3v1lk3bGiven :1; unsigned BSIM3v1lw0Given :1; unsigned BSIM3v1lnlxGiven :1; unsigned BSIM3v1ldvt0Given :1; unsigned BSIM3v1ldvt1Given :1; unsigned BSIM3v1ldvt2Given :1; unsigned BSIM3v1ldvt0wGiven :1; unsigned BSIM3v1ldvt1wGiven :1; unsigned BSIM3v1ldvt2wGiven :1; unsigned BSIM3v1ldroutGiven :1; unsigned BSIM3v1ldsubGiven :1; unsigned BSIM3v1lvth0Given :1; unsigned BSIM3v1luaGiven :1; unsigned BSIM3v1lua1Given :1; unsigned BSIM3v1lubGiven :1; unsigned BSIM3v1lub1Given :1; unsigned BSIM3v1lucGiven :1; unsigned BSIM3v1luc1Given :1; unsigned BSIM3v1lu0Given :1; unsigned BSIM3v1luteGiven :1; unsigned BSIM3v1lvoffGiven :1; unsigned BSIM3v1lrdswGiven :1; unsigned BSIM3v1lprwgGiven :1; unsigned BSIM3v1lprwbGiven :1; unsigned BSIM3v1lprtGiven :1; unsigned BSIM3v1leta0Given :1; unsigned BSIM3v1letabGiven :1; unsigned BSIM3v1lpclmGiven :1; unsigned BSIM3v1lpdibl1Given :1; unsigned BSIM3v1lpdibl2Given :1; unsigned BSIM3v1lpdiblbGiven :1; unsigned BSIM3v1lpscbe1Given :1; unsigned BSIM3v1lpscbe2Given :1; unsigned BSIM3v1lpvagGiven :1; unsigned BSIM3v1ldeltaGiven :1; unsigned BSIM3v1lwrGiven :1; unsigned BSIM3v1ldwgGiven :1; unsigned BSIM3v1ldwbGiven :1; unsigned BSIM3v1lb0Given :1; unsigned BSIM3v1lb1Given :1; unsigned BSIM3v1lalpha0Given :1; unsigned BSIM3v1lbeta0Given :1; /* CV model */ unsigned BSIM3v1lelmGiven :1; unsigned BSIM3v1lcgslGiven :1; unsigned BSIM3v1lcgdlGiven :1; unsigned BSIM3v1lckappaGiven :1; unsigned BSIM3v1lcfGiven :1; unsigned BSIM3v1lclcGiven :1; unsigned BSIM3v1lcleGiven :1; unsigned BSIM3v1lvfbcvGiven :1; /* Width dependence */ unsigned BSIM3v1wcdscGiven :1; unsigned BSIM3v1wcdscbGiven :1; unsigned BSIM3v1wcdscdGiven :1; unsigned BSIM3v1wcitGiven :1; unsigned BSIM3v1wnfactorGiven :1; unsigned BSIM3v1wxjGiven :1; unsigned BSIM3v1wvsatGiven :1; unsigned BSIM3v1watGiven :1; unsigned BSIM3v1wa0Given :1; unsigned BSIM3v1wagsGiven :1; unsigned BSIM3v1wa1Given :1; unsigned BSIM3v1wa2Given :1; unsigned BSIM3v1wketaGiven :1; unsigned BSIM3v1wnsubGiven :1; unsigned BSIM3v1wnpeakGiven :1; unsigned BSIM3v1wngateGiven :1; unsigned BSIM3v1wgamma1Given :1; unsigned BSIM3v1wgamma2Given :1; unsigned BSIM3v1wvbxGiven :1; unsigned BSIM3v1wvbmGiven :1; unsigned BSIM3v1wxtGiven :1; unsigned BSIM3v1wk1Given :1; unsigned BSIM3v1wkt1Given :1; unsigned BSIM3v1wkt1lGiven :1; unsigned BSIM3v1wkt2Given :1; unsigned BSIM3v1wk2Given :1; unsigned BSIM3v1wk3Given :1; unsigned BSIM3v1wk3bGiven :1; unsigned BSIM3v1ww0Given :1; unsigned BSIM3v1wnlxGiven :1; unsigned BSIM3v1wdvt0Given :1; unsigned BSIM3v1wdvt1Given :1; unsigned BSIM3v1wdvt2Given :1; unsigned BSIM3v1wdvt0wGiven :1; unsigned BSIM3v1wdvt1wGiven :1; unsigned BSIM3v1wdvt2wGiven :1; unsigned BSIM3v1wdroutGiven :1; unsigned BSIM3v1wdsubGiven :1; unsigned BSIM3v1wvth0Given :1; unsigned BSIM3v1wuaGiven :1; unsigned BSIM3v1wua1Given :1; unsigned BSIM3v1wubGiven :1; unsigned BSIM3v1wub1Given :1; unsigned BSIM3v1wucGiven :1; unsigned BSIM3v1wuc1Given :1; unsigned BSIM3v1wu0Given :1; unsigned BSIM3v1wuteGiven :1; unsigned BSIM3v1wvoffGiven :1; unsigned BSIM3v1wrdswGiven :1; unsigned BSIM3v1wprwgGiven :1; unsigned BSIM3v1wprwbGiven :1; unsigned BSIM3v1wprtGiven :1; unsigned BSIM3v1weta0Given :1; unsigned BSIM3v1wetabGiven :1; unsigned BSIM3v1wpclmGiven :1; unsigned BSIM3v1wpdibl1Given :1; unsigned BSIM3v1wpdibl2Given :1; unsigned BSIM3v1wpdiblbGiven :1; unsigned BSIM3v1wpscbe1Given :1; unsigned BSIM3v1wpscbe2Given :1; unsigned BSIM3v1wpvagGiven :1; unsigned BSIM3v1wdeltaGiven :1; unsigned BSIM3v1wwrGiven :1; unsigned BSIM3v1wdwgGiven :1; unsigned BSIM3v1wdwbGiven :1; unsigned BSIM3v1wb0Given :1; unsigned BSIM3v1wb1Given :1; unsigned BSIM3v1walpha0Given :1; unsigned BSIM3v1wbeta0Given :1; /* CV model */ unsigned BSIM3v1welmGiven :1; unsigned BSIM3v1wcgslGiven :1; unsigned BSIM3v1wcgdlGiven :1; unsigned BSIM3v1wckappaGiven :1; unsigned BSIM3v1wcfGiven :1; unsigned BSIM3v1wclcGiven :1; unsigned BSIM3v1wcleGiven :1; unsigned BSIM3v1wvfbcvGiven :1; /* Cross-term dependence */ unsigned BSIM3v1pcdscGiven :1; unsigned BSIM3v1pcdscbGiven :1; unsigned BSIM3v1pcdscdGiven :1; unsigned BSIM3v1pcitGiven :1; unsigned BSIM3v1pnfactorGiven :1; unsigned BSIM3v1pxjGiven :1; unsigned BSIM3v1pvsatGiven :1; unsigned BSIM3v1patGiven :1; unsigned BSIM3v1pa0Given :1; unsigned BSIM3v1pagsGiven :1; unsigned BSIM3v1pa1Given :1; unsigned BSIM3v1pa2Given :1; unsigned BSIM3v1pketaGiven :1; unsigned BSIM3v1pnsubGiven :1; unsigned BSIM3v1pnpeakGiven :1; unsigned BSIM3v1pngateGiven :1; unsigned BSIM3v1pgamma1Given :1; unsigned BSIM3v1pgamma2Given :1; unsigned BSIM3v1pvbxGiven :1; unsigned BSIM3v1pvbmGiven :1; unsigned BSIM3v1pxtGiven :1; unsigned BSIM3v1pk1Given :1; unsigned BSIM3v1pkt1Given :1; unsigned BSIM3v1pkt1lGiven :1; unsigned BSIM3v1pkt2Given :1; unsigned BSIM3v1pk2Given :1; unsigned BSIM3v1pk3Given :1; unsigned BSIM3v1pk3bGiven :1; unsigned BSIM3v1pw0Given :1; unsigned BSIM3v1pnlxGiven :1; unsigned BSIM3v1pdvt0Given :1; unsigned BSIM3v1pdvt1Given :1; unsigned BSIM3v1pdvt2Given :1; unsigned BSIM3v1pdvt0wGiven :1; unsigned BSIM3v1pdvt1wGiven :1; unsigned BSIM3v1pdvt2wGiven :1; unsigned BSIM3v1pdroutGiven :1; unsigned BSIM3v1pdsubGiven :1; unsigned BSIM3v1pvth0Given :1; unsigned BSIM3v1puaGiven :1; unsigned BSIM3v1pua1Given :1; unsigned BSIM3v1pubGiven :1; unsigned BSIM3v1pub1Given :1; unsigned BSIM3v1pucGiven :1; unsigned BSIM3v1puc1Given :1; unsigned BSIM3v1pu0Given :1; unsigned BSIM3v1puteGiven :1; unsigned BSIM3v1pvoffGiven :1; unsigned BSIM3v1prdswGiven :1; unsigned BSIM3v1pprwgGiven :1; unsigned BSIM3v1pprwbGiven :1; unsigned BSIM3v1pprtGiven :1; unsigned BSIM3v1peta0Given :1; unsigned BSIM3v1petabGiven :1; unsigned BSIM3v1ppclmGiven :1; unsigned BSIM3v1ppdibl1Given :1; unsigned BSIM3v1ppdibl2Given :1; unsigned BSIM3v1ppdiblbGiven :1; unsigned BSIM3v1ppscbe1Given :1; unsigned BSIM3v1ppscbe2Given :1; unsigned BSIM3v1ppvagGiven :1; unsigned BSIM3v1pdeltaGiven :1; unsigned BSIM3v1pwrGiven :1; unsigned BSIM3v1pdwgGiven :1; unsigned BSIM3v1pdwbGiven :1; unsigned BSIM3v1pb0Given :1; unsigned BSIM3v1pb1Given :1; unsigned BSIM3v1palpha0Given :1; unsigned BSIM3v1pbeta0Given :1; /* CV model */ unsigned BSIM3v1pelmGiven :1; unsigned BSIM3v1pcgslGiven :1; unsigned BSIM3v1pcgdlGiven :1; unsigned BSIM3v1pckappaGiven :1; unsigned BSIM3v1pcfGiven :1; unsigned BSIM3v1pclcGiven :1; unsigned BSIM3v1pcleGiven :1; unsigned BSIM3v1pvfbcvGiven :1; unsigned BSIM3v1useFringeGiven :1; unsigned BSIM3v1tnomGiven :1; unsigned BSIM3v1cgsoGiven :1; unsigned BSIM3v1cgdoGiven :1; unsigned BSIM3v1cgboGiven :1; unsigned BSIM3v1xpartGiven :1; unsigned BSIM3v1sheetResistanceGiven :1; unsigned BSIM3v1jctSatCurDensityGiven :1; unsigned BSIM3v1jctSidewallSatCurDensityGiven :1; unsigned BSIM3v1bulkJctPotentialGiven :1; unsigned BSIM3v1bulkJctBotGradingCoeffGiven :1; unsigned BSIM3v1sidewallJctPotentialGiven :1; unsigned BSIM3v1GatesidewallJctPotentialGiven :1; unsigned BSIM3v1bulkJctSideGradingCoeffGiven :1; unsigned BSIM3v1unitAreaJctCapGiven :1; unsigned BSIM3v1unitLengthSidewallJctCapGiven :1; unsigned BSIM3v1bulkJctGateSideGradingCoeffGiven :1; unsigned BSIM3v1unitLengthGateSidewallJctCapGiven :1; unsigned BSIM3v1jctEmissionCoeffGiven :1; unsigned BSIM3v1jctTempExponentGiven :1; unsigned BSIM3v1oxideTrapDensityAGiven :1; unsigned BSIM3v1oxideTrapDensityBGiven :1; unsigned BSIM3v1oxideTrapDensityCGiven :1; unsigned BSIM3v1emGiven :1; unsigned BSIM3v1efGiven :1; unsigned BSIM3v1afGiven :1; unsigned BSIM3v1kfGiven :1; unsigned BSIM3v1LintGiven :1; unsigned BSIM3v1LlGiven :1; unsigned BSIM3v1LlnGiven :1; unsigned BSIM3v1LwGiven :1; unsigned BSIM3v1LwnGiven :1; unsigned BSIM3v1LwlGiven :1; unsigned BSIM3v1LminGiven :1; unsigned BSIM3v1LmaxGiven :1; unsigned BSIM3v1WintGiven :1; unsigned BSIM3v1WlGiven :1; unsigned BSIM3v1WlnGiven :1; unsigned BSIM3v1WwGiven :1; unsigned BSIM3v1WwnGiven :1; unsigned BSIM3v1WwlGiven :1; unsigned BSIM3v1WminGiven :1; unsigned BSIM3v1WmaxGiven :1; } BSIM3v1model; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ /* device parameters */ #define BSIM3v1_W 1 #define BSIM3v1_L 2 #define BSIM3v1_M 15 #define BSIM3v1_AS 3 #define BSIM3v1_AD 4 #define BSIM3v1_PS 5 #define BSIM3v1_PD 6 #define BSIM3v1_NRS 7 #define BSIM3v1_NRD 8 #define BSIM3v1_OFF 9 #define BSIM3v1_IC_VBS 10 #define BSIM3v1_IC_VDS 11 #define BSIM3v1_IC_VGS 12 #define BSIM3v1_IC 13 #define BSIM3v1_NQSMOD 14 /* model parameters */ #define BSIM3v1_MOD_CAPMOD 101 #define BSIM3v1_MOD_NQSMOD 102 #define BSIM3v1_MOD_MOBMOD 103 #define BSIM3v1_MOD_NOIMOD 104 #define BSIM3v1_MOD_TOX 105 #define BSIM3v1_MOD_CDSC 106 #define BSIM3v1_MOD_CDSCB 107 #define BSIM3v1_MOD_CIT 108 #define BSIM3v1_MOD_NFACTOR 109 #define BSIM3v1_MOD_XJ 110 #define BSIM3v1_MOD_VSAT 111 #define BSIM3v1_MOD_AT 112 #define BSIM3v1_MOD_A0 113 #define BSIM3v1_MOD_A1 114 #define BSIM3v1_MOD_A2 115 #define BSIM3v1_MOD_KETA 116 #define BSIM3v1_MOD_NSUB 117 #define BSIM3v1_MOD_NPEAK 118 #define BSIM3v1_MOD_NGATE 120 #define BSIM3v1_MOD_GAMMA1 121 #define BSIM3v1_MOD_GAMMA2 122 #define BSIM3v1_MOD_VBX 123 #define BSIM3v1_MOD_BINUNIT 124 #define BSIM3v1_MOD_VBM 125 #define BSIM3v1_MOD_XT 126 #define BSIM3v1_MOD_K1 129 #define BSIM3v1_MOD_KT1 130 #define BSIM3v1_MOD_KT1L 131 #define BSIM3v1_MOD_K2 132 #define BSIM3v1_MOD_KT2 133 #define BSIM3v1_MOD_K3 134 #define BSIM3v1_MOD_K3B 135 #define BSIM3v1_MOD_W0 136 #define BSIM3v1_MOD_NLX 137 #define BSIM3v1_MOD_DVT0 138 #define BSIM3v1_MOD_DVT1 139 #define BSIM3v1_MOD_DVT2 140 #define BSIM3v1_MOD_DVT0W 141 #define BSIM3v1_MOD_DVT1W 142 #define BSIM3v1_MOD_DVT2W 143 #define BSIM3v1_MOD_DROUT 144 #define BSIM3v1_MOD_DSUB 145 #define BSIM3v1_MOD_VTH0 146 #define BSIM3v1_MOD_UA 147 #define BSIM3v1_MOD_UA1 148 #define BSIM3v1_MOD_UB 149 #define BSIM3v1_MOD_UB1 150 #define BSIM3v1_MOD_UC 151 #define BSIM3v1_MOD_UC1 152 #define BSIM3v1_MOD_U0 153 #define BSIM3v1_MOD_UTE 154 #define BSIM3v1_MOD_VOFF 155 #define BSIM3v1_MOD_DELTA 156 #define BSIM3v1_MOD_RDSW 157 #define BSIM3v1_MOD_PRT 158 #define BSIM3v1_MOD_LDD 159 #define BSIM3v1_MOD_ETA 160 #define BSIM3v1_MOD_ETA0 161 #define BSIM3v1_MOD_ETAB 162 #define BSIM3v1_MOD_PCLM 163 #define BSIM3v1_MOD_PDIBL1 164 #define BSIM3v1_MOD_PDIBL2 165 #define BSIM3v1_MOD_PSCBE1 166 #define BSIM3v1_MOD_PSCBE2 167 #define BSIM3v1_MOD_PVAG 168 #define BSIM3v1_MOD_WR 169 #define BSIM3v1_MOD_DWG 170 #define BSIM3v1_MOD_DWB 171 #define BSIM3v1_MOD_B0 172 #define BSIM3v1_MOD_B1 173 #define BSIM3v1_MOD_ALPHA0 174 #define BSIM3v1_MOD_BETA0 175 #define BSIM3v1_MOD_PDIBLB 178 #define BSIM3v1_MOD_PRWG 179 #define BSIM3v1_MOD_PRWB 180 #define BSIM3v1_MOD_CDSCD 181 #define BSIM3v1_MOD_AGS 182 #define BSIM3v1_MOD_FRINGE 184 #define BSIM3v1_MOD_ELM 185 #define BSIM3v1_MOD_CGSL 186 #define BSIM3v1_MOD_CGDL 187 #define BSIM3v1_MOD_CKAPPA 188 #define BSIM3v1_MOD_CF 189 #define BSIM3v1_MOD_CLC 190 #define BSIM3v1_MOD_CLE 191 #define BSIM3v1_MOD_PARAMCHK 192 #define BSIM3v1_MOD_VERSION 193 #define BSIM3v1_MOD_VFBCV 194 #define BSIM3v1_MOD_HDIF 198 /* Length dependence */ #define BSIM3v1_MOD_LCDSC 201 #define BSIM3v1_MOD_LCDSCB 202 #define BSIM3v1_MOD_LCIT 203 #define BSIM3v1_MOD_LNFACTOR 204 #define BSIM3v1_MOD_LXJ 205 #define BSIM3v1_MOD_LVSAT 206 #define BSIM3v1_MOD_LAT 207 #define BSIM3v1_MOD_LA0 208 #define BSIM3v1_MOD_LA1 209 #define BSIM3v1_MOD_LA2 210 #define BSIM3v1_MOD_LKETA 211 #define BSIM3v1_MOD_LNSUB 212 #define BSIM3v1_MOD_LNPEAK 213 #define BSIM3v1_MOD_LNGATE 215 #define BSIM3v1_MOD_LGAMMA1 216 #define BSIM3v1_MOD_LGAMMA2 217 #define BSIM3v1_MOD_LVBX 218 #define BSIM3v1_MOD_LVBM 220 #define BSIM3v1_MOD_LXT 222 #define BSIM3v1_MOD_LK1 225 #define BSIM3v1_MOD_LKT1 226 #define BSIM3v1_MOD_LKT1L 227 #define BSIM3v1_MOD_LK2 228 #define BSIM3v1_MOD_LKT2 229 #define BSIM3v1_MOD_LK3 230 #define BSIM3v1_MOD_LK3B 231 #define BSIM3v1_MOD_LW0 232 #define BSIM3v1_MOD_LNLX 233 #define BSIM3v1_MOD_LDVT0 234 #define BSIM3v1_MOD_LDVT1 235 #define BSIM3v1_MOD_LDVT2 236 #define BSIM3v1_MOD_LDVT0W 237 #define BSIM3v1_MOD_LDVT1W 238 #define BSIM3v1_MOD_LDVT2W 239 #define BSIM3v1_MOD_LDROUT 240 #define BSIM3v1_MOD_LDSUB 241 #define BSIM3v1_MOD_LVTH0 242 #define BSIM3v1_MOD_LUA 243 #define BSIM3v1_MOD_LUA1 244 #define BSIM3v1_MOD_LUB 245 #define BSIM3v1_MOD_LUB1 246 #define BSIM3v1_MOD_LUC 247 #define BSIM3v1_MOD_LUC1 248 #define BSIM3v1_MOD_LU0 249 #define BSIM3v1_MOD_LUTE 250 #define BSIM3v1_MOD_LVOFF 251 #define BSIM3v1_MOD_LDELTA 252 #define BSIM3v1_MOD_LRDSW 253 #define BSIM3v1_MOD_LPRT 254 #define BSIM3v1_MOD_LLDD 255 #define BSIM3v1_MOD_LETA 256 #define BSIM3v1_MOD_LETA0 257 #define BSIM3v1_MOD_LETAB 258 #define BSIM3v1_MOD_LPCLM 259 #define BSIM3v1_MOD_LPDIBL1 260 #define BSIM3v1_MOD_LPDIBL2 261 #define BSIM3v1_MOD_LPSCBE1 262 #define BSIM3v1_MOD_LPSCBE2 263 #define BSIM3v1_MOD_LPVAG 264 #define BSIM3v1_MOD_LWR 265 #define BSIM3v1_MOD_LDWG 266 #define BSIM3v1_MOD_LDWB 267 #define BSIM3v1_MOD_LB0 268 #define BSIM3v1_MOD_LB1 269 #define BSIM3v1_MOD_LALPHA0 270 #define BSIM3v1_MOD_LBETA0 271 #define BSIM3v1_MOD_LPDIBLB 274 #define BSIM3v1_MOD_LPRWG 275 #define BSIM3v1_MOD_LPRWB 276 #define BSIM3v1_MOD_LCDSCD 277 #define BSIM3v1_MOD_LAGS 278 #define BSIM3v1_MOD_LFRINGE 281 #define BSIM3v1_MOD_LELM 282 #define BSIM3v1_MOD_LCGSL 283 #define BSIM3v1_MOD_LCGDL 284 #define BSIM3v1_MOD_LCKAPPA 285 #define BSIM3v1_MOD_LCF 286 #define BSIM3v1_MOD_LCLC 287 #define BSIM3v1_MOD_LCLE 288 #define BSIM3v1_MOD_LVFBCV 289 /* Width dependence */ #define BSIM3v1_MOD_WCDSC 301 #define BSIM3v1_MOD_WCDSCB 302 #define BSIM3v1_MOD_WCIT 303 #define BSIM3v1_MOD_WNFACTOR 304 #define BSIM3v1_MOD_WXJ 305 #define BSIM3v1_MOD_WVSAT 306 #define BSIM3v1_MOD_WAT 307 #define BSIM3v1_MOD_WA0 308 #define BSIM3v1_MOD_WA1 309 #define BSIM3v1_MOD_WA2 310 #define BSIM3v1_MOD_WKETA 311 #define BSIM3v1_MOD_WNSUB 312 #define BSIM3v1_MOD_WNPEAK 313 #define BSIM3v1_MOD_WNGATE 315 #define BSIM3v1_MOD_WGAMMA1 316 #define BSIM3v1_MOD_WGAMMA2 317 #define BSIM3v1_MOD_WVBX 318 #define BSIM3v1_MOD_WVBM 320 #define BSIM3v1_MOD_WXT 322 #define BSIM3v1_MOD_WK1 325 #define BSIM3v1_MOD_WKT1 326 #define BSIM3v1_MOD_WKT1L 327 #define BSIM3v1_MOD_WK2 328 #define BSIM3v1_MOD_WKT2 329 #define BSIM3v1_MOD_WK3 330 #define BSIM3v1_MOD_WK3B 331 #define BSIM3v1_MOD_WW0 332 #define BSIM3v1_MOD_WNLX 333 #define BSIM3v1_MOD_WDVT0 334 #define BSIM3v1_MOD_WDVT1 335 #define BSIM3v1_MOD_WDVT2 336 #define BSIM3v1_MOD_WDVT0W 337 #define BSIM3v1_MOD_WDVT1W 338 #define BSIM3v1_MOD_WDVT2W 339 #define BSIM3v1_MOD_WDROUT 340 #define BSIM3v1_MOD_WDSUB 341 #define BSIM3v1_MOD_WVTH0 342 #define BSIM3v1_MOD_WUA 343 #define BSIM3v1_MOD_WUA1 344 #define BSIM3v1_MOD_WUB 345 #define BSIM3v1_MOD_WUB1 346 #define BSIM3v1_MOD_WUC 347 #define BSIM3v1_MOD_WUC1 348 #define BSIM3v1_MOD_WU0 349 #define BSIM3v1_MOD_WUTE 350 #define BSIM3v1_MOD_WVOFF 351 #define BSIM3v1_MOD_WDELTA 352 #define BSIM3v1_MOD_WRDSW 353 #define BSIM3v1_MOD_WPRT 354 #define BSIM3v1_MOD_WLDD 355 #define BSIM3v1_MOD_WETA 356 #define BSIM3v1_MOD_WETA0 357 #define BSIM3v1_MOD_WETAB 358 #define BSIM3v1_MOD_WPCLM 359 #define BSIM3v1_MOD_WPDIBL1 360 #define BSIM3v1_MOD_WPDIBL2 361 #define BSIM3v1_MOD_WPSCBE1 362 #define BSIM3v1_MOD_WPSCBE2 363 #define BSIM3v1_MOD_WPVAG 364 #define BSIM3v1_MOD_WWR 365 #define BSIM3v1_MOD_WDWG 366 #define BSIM3v1_MOD_WDWB 367 #define BSIM3v1_MOD_WB0 368 #define BSIM3v1_MOD_WB1 369 #define BSIM3v1_MOD_WALPHA0 370 #define BSIM3v1_MOD_WBETA0 371 #define BSIM3v1_MOD_WPDIBLB 374 #define BSIM3v1_MOD_WPRWG 375 #define BSIM3v1_MOD_WPRWB 376 #define BSIM3v1_MOD_WCDSCD 377 #define BSIM3v1_MOD_WAGS 378 #define BSIM3v1_MOD_WFRINGE 381 #define BSIM3v1_MOD_WELM 382 #define BSIM3v1_MOD_WCGSL 383 #define BSIM3v1_MOD_WCGDL 384 #define BSIM3v1_MOD_WCKAPPA 385 #define BSIM3v1_MOD_WCF 386 #define BSIM3v1_MOD_WCLC 387 #define BSIM3v1_MOD_WCLE 388 #define BSIM3v1_MOD_WVFBCV 389 /* Cross-term dependence */ #define BSIM3v1_MOD_PCDSC 401 #define BSIM3v1_MOD_PCDSCB 402 #define BSIM3v1_MOD_PCIT 403 #define BSIM3v1_MOD_PNFACTOR 404 #define BSIM3v1_MOD_PXJ 405 #define BSIM3v1_MOD_PVSAT 406 #define BSIM3v1_MOD_PAT 407 #define BSIM3v1_MOD_PA0 408 #define BSIM3v1_MOD_PA1 409 #define BSIM3v1_MOD_PA2 410 #define BSIM3v1_MOD_PKETA 411 #define BSIM3v1_MOD_PNSUB 412 #define BSIM3v1_MOD_PNPEAK 413 #define BSIM3v1_MOD_PNGATE 415 #define BSIM3v1_MOD_PGAMMA1 416 #define BSIM3v1_MOD_PGAMMA2 417 #define BSIM3v1_MOD_PVBX 418 #define BSIM3v1_MOD_PVBM 420 #define BSIM3v1_MOD_PXT 422 #define BSIM3v1_MOD_PK1 425 #define BSIM3v1_MOD_PKT1 426 #define BSIM3v1_MOD_PKT1L 427 #define BSIM3v1_MOD_PK2 428 #define BSIM3v1_MOD_PKT2 429 #define BSIM3v1_MOD_PK3 430 #define BSIM3v1_MOD_PK3B 431 #define BSIM3v1_MOD_PW0 432 #define BSIM3v1_MOD_PNLX 433 #define BSIM3v1_MOD_PDVT0 434 #define BSIM3v1_MOD_PDVT1 435 #define BSIM3v1_MOD_PDVT2 436 #define BSIM3v1_MOD_PDVT0W 437 #define BSIM3v1_MOD_PDVT1W 438 #define BSIM3v1_MOD_PDVT2W 439 #define BSIM3v1_MOD_PDROUT 440 #define BSIM3v1_MOD_PDSUB 441 #define BSIM3v1_MOD_PVTH0 442 #define BSIM3v1_MOD_PUA 443 #define BSIM3v1_MOD_PUA1 444 #define BSIM3v1_MOD_PUB 445 #define BSIM3v1_MOD_PUB1 446 #define BSIM3v1_MOD_PUC 447 #define BSIM3v1_MOD_PUC1 448 #define BSIM3v1_MOD_PU0 449 #define BSIM3v1_MOD_PUTE 450 #define BSIM3v1_MOD_PVOFF 451 #define BSIM3v1_MOD_PDELTA 452 #define BSIM3v1_MOD_PRDSW 453 #define BSIM3v1_MOD_PPRT 454 #define BSIM3v1_MOD_PLDD 455 #define BSIM3v1_MOD_PETA 456 #define BSIM3v1_MOD_PETA0 457 #define BSIM3v1_MOD_PETAB 458 #define BSIM3v1_MOD_PPCLM 459 #define BSIM3v1_MOD_PPDIBL1 460 #define BSIM3v1_MOD_PPDIBL2 461 #define BSIM3v1_MOD_PPSCBE1 462 #define BSIM3v1_MOD_PPSCBE2 463 #define BSIM3v1_MOD_PPVAG 464 #define BSIM3v1_MOD_PWR 465 #define BSIM3v1_MOD_PDWG 466 #define BSIM3v1_MOD_PDWB 467 #define BSIM3v1_MOD_PB0 468 #define BSIM3v1_MOD_PB1 469 #define BSIM3v1_MOD_PALPHA0 470 #define BSIM3v1_MOD_PBETA0 471 #define BSIM3v1_MOD_PPDIBLB 474 #define BSIM3v1_MOD_PPRWG 475 #define BSIM3v1_MOD_PPRWB 476 #define BSIM3v1_MOD_PCDSCD 477 #define BSIM3v1_MOD_PAGS 478 #define BSIM3v1_MOD_PFRINGE 481 #define BSIM3v1_MOD_PELM 482 #define BSIM3v1_MOD_PCGSL 483 #define BSIM3v1_MOD_PCGDL 484 #define BSIM3v1_MOD_PCKAPPA 485 #define BSIM3v1_MOD_PCF 486 #define BSIM3v1_MOD_PCLC 487 #define BSIM3v1_MOD_PCLE 488 #define BSIM3v1_MOD_PVFBCV 489 #define BSIM3v1_MOD_TNOM 501 #define BSIM3v1_MOD_CGSO 502 #define BSIM3v1_MOD_CGDO 503 #define BSIM3v1_MOD_CGBO 504 #define BSIM3v1_MOD_XPART 505 #define BSIM3v1_MOD_RSH 506 #define BSIM3v1_MOD_JS 507 #define BSIM3v1_MOD_PB 508 #define BSIM3v1_MOD_MJ 509 #define BSIM3v1_MOD_PBSW 510 #define BSIM3v1_MOD_MJSW 511 #define BSIM3v1_MOD_CJ 512 #define BSIM3v1_MOD_CJSW 513 #define BSIM3v1_MOD_NMOS 514 #define BSIM3v1_MOD_PMOS 515 #define BSIM3v1_MOD_NOIA 516 #define BSIM3v1_MOD_NOIB 517 #define BSIM3v1_MOD_NOIC 518 #define BSIM3v1_MOD_LINT 519 #define BSIM3v1_MOD_LL 520 #define BSIM3v1_MOD_LLN 521 #define BSIM3v1_MOD_LW 522 #define BSIM3v1_MOD_LWN 523 #define BSIM3v1_MOD_LWL 524 #define BSIM3v1_MOD_LMIN 525 #define BSIM3v1_MOD_LMAX 526 #define BSIM3v1_MOD_WINT 527 #define BSIM3v1_MOD_WL 528 #define BSIM3v1_MOD_WLN 529 #define BSIM3v1_MOD_WW 530 #define BSIM3v1_MOD_WWN 531 #define BSIM3v1_MOD_WWL 532 #define BSIM3v1_MOD_WMIN 533 #define BSIM3v1_MOD_WMAX 534 #define BSIM3v1_MOD_DWC 535 #define BSIM3v1_MOD_DLC 536 #define BSIM3v1_MOD_EM 537 #define BSIM3v1_MOD_EF 538 #define BSIM3v1_MOD_AF 539 #define BSIM3v1_MOD_KF 540 #define BSIM3v1_MOD_NJ 541 #define BSIM3v1_MOD_XTI 542 #define BSIM3v1_MOD_PBSWG 543 #define BSIM3v1_MOD_MJSWG 544 #define BSIM3v1_MOD_CJSWG 545 #define BSIM3v1_MOD_JSW 546 /* device questions */ #define BSIM3v1_DNODE 601 #define BSIM3v1_GNODE 602 #define BSIM3v1_SNODE 603 #define BSIM3v1_BNODE 604 #define BSIM3v1_DNODEPRIME 605 #define BSIM3v1_SNODEPRIME 606 #define BSIM3v1_VBD 607 #define BSIM3v1_VBS 608 #define BSIM3v1_VGS 609 #define BSIM3v1_VDS 610 #define BSIM3v1_CD 611 #define BSIM3v1_CBS 612 #define BSIM3v1_CBD 613 #define BSIM3v1_GM 614 #define BSIM3v1_GDS 615 #define BSIM3v1_GMBS 616 #define BSIM3v1_GBD 617 #define BSIM3v1_GBS 618 #define BSIM3v1_QB 619 #define BSIM3v1_CQB 620 #define BSIM3v1_QG 621 #define BSIM3v1_CQG 622 #define BSIM3v1_QD 623 #define BSIM3v1_CQD 624 #define BSIM3v1_CGG 625 #define BSIM3v1_CGD 626 #define BSIM3v1_CGS 627 #define BSIM3v1_CBG 628 #define BSIM3v1_CAPBD 629 #define BSIM3v1_CQBD 630 #define BSIM3v1_CAPBS 631 #define BSIM3v1_CQBS 632 #define BSIM3v1_CDG 633 #define BSIM3v1_CDD 634 #define BSIM3v1_CDS 635 #define BSIM3v1_VON 636 #define BSIM3v1_VDSAT 637 #define BSIM3v1_QBS 638 #define BSIM3v1_QBD 639 #define BSIM3v1_SOURCECONDUCT 640 #define BSIM3v1_DRAINCONDUCT 641 #define BSIM3v1_CBDB 642 #define BSIM3v1_CBSB 643 #include "bsim3v1ext.h" extern void BSIM3v1evaluate(double,double,double,BSIM3v1instance*,BSIM3v1model*, double*,double*,double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, CKTcircuit*); extern int BSIM3v1debug(BSIM3v1model*, BSIM3v1instance*, CKTcircuit*, int); extern int BSIM3v1checkModel(BSIM3v1model*, BSIM3v1instance*, CKTcircuit*); #endif /*BSIM3v1*/ tmpk8ny_4pz/src/spicelib/devices/bsim3v1/bsim3v1itf.h0000644000175000017500000000043013546075722022604 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1991 JianHui Huang and Min-Chie Jeng. Modified: 2002 Paolo Nenzi. File: bsim3v1itf.h **********/ #ifndef DEV_BSIM3v1 #define DEV_BSIM3v1 SPICEdev *get_bsim3v1_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/bsim3v1/b3v1temp.c0000644000175000017500000010732613546075722022265 0ustar carstencarsten/********** * Copyright 1990 Regents of the University of California. All rights reserved. * File: b3v1ld.c * Author: 1995 Min-Chie Jeng and Mansun Chan. * Modified by Paolo Nenzi 2002 **********/ /* * Release Notes: * BSIM3v3.1, Released by yuhua 96/12/08 */ /* Lmin, Lmax, Wmin, Wmax */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "bsim3v1def.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define Kb 1.3806226e-23 #define KboQ 8.617087e-5 /* Kb / q where q = 1.60219e-19 */ #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define PI 3.141592654 #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define Charge_q 1.60219e-19 /* ARGSUSED */ int BSIM3v1temp(GENmodel *inModel, CKTcircuit *ckt) { BSIM3v1model *model = (BSIM3v1model*) inModel; BSIM3v1instance *here; struct bsim3v1SizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam = NULL; double tmp1, tmp2, Eg, Eg0, ni, T0, T1, T2, T3, Ldrn, Wdrn; double Temp, TRatio, Inv_L, Inv_W, Inv_LW, Vtm0, Tnom; int Size_Not_Found; /* loop through all the BSIM3v1 device models */ for (; model != NULL; model = BSIM3v1nextModel(model)) { Temp = ckt->CKTtemp; if (model->BSIM3v1bulkJctPotential < 0.1) model->BSIM3v1bulkJctPotential = 0.1; if (model->BSIM3v1sidewallJctPotential < 0.1) model->BSIM3v1sidewallJctPotential = 0.1; if (model->BSIM3v1GatesidewallJctPotential < 0.1) model->BSIM3v1GatesidewallJctPotential = 0.1; struct bsim3v1SizeDependParam *p = model->pSizeDependParamKnot; while (p) { struct bsim3v1SizeDependParam *next_p = p->pNext; FREE(p); p = next_p; } model->pSizeDependParamKnot = NULL; pLastKnot = NULL; Tnom = model->BSIM3v1tnom; TRatio = Temp / Tnom; model->BSIM3v1vcrit = CONSTvt0 * log(CONSTvt0 / (CONSTroot2 * 1.0e-14)); model->BSIM3v1factor1 = sqrt(EPSSI / EPSOX * model->BSIM3v1tox); Vtm0 = KboQ * Tnom; Eg0 = 1.16 - 7.02e-4 * Tnom * Tnom / (Tnom + 1108.0); ni = 1.45e10 * (Tnom / 300.15) * sqrt(Tnom / 300.15) * exp(21.5565981 - Eg0 / (2.0 * Vtm0)); model->BSIM3v1vtm = KboQ * Temp; Eg = 1.16 - 7.02e-4 * Temp * Temp / (Temp + 1108.0); if (Temp != Tnom) { T0 = Eg0 / Vtm0 - Eg / model->BSIM3v1vtm + model->BSIM3v1jctTempExponent * log(Temp / Tnom); T1 = exp(T0 / model->BSIM3v1jctEmissionCoeff); model->BSIM3v1jctTempSatCurDensity = model->BSIM3v1jctSatCurDensity * T1; model->BSIM3v1jctSidewallTempSatCurDensity = model->BSIM3v1jctSidewallSatCurDensity * T1; } else { model->BSIM3v1jctTempSatCurDensity = model->BSIM3v1jctSatCurDensity; model->BSIM3v1jctSidewallTempSatCurDensity = model->BSIM3v1jctSidewallSatCurDensity; } if (model->BSIM3v1jctTempSatCurDensity < 0.0) model->BSIM3v1jctTempSatCurDensity = 0.0; if (model->BSIM3v1jctSidewallTempSatCurDensity < 0.0) model->BSIM3v1jctSidewallTempSatCurDensity = 0.0; /* loop through all the instances of the model */ /* MCJ: Length and Width not initialized */ for (here = BSIM3v1instances(model); here != NULL; here = BSIM3v1nextInstance(here)) { pSizeDependParamKnot = model->pSizeDependParamKnot; Size_Not_Found = 1; while ((pSizeDependParamKnot != NULL) && Size_Not_Found) { if ((here->BSIM3v1l == pSizeDependParamKnot->Length) && (here->BSIM3v1w == pSizeDependParamKnot->Width)) { Size_Not_Found = 0; here->pParam = pSizeDependParamKnot; } else { pLastKnot = pSizeDependParamKnot; pSizeDependParamKnot = pSizeDependParamKnot->pNext; } } if (Size_Not_Found) { pParam = TMALLOC(struct bsim3v1SizeDependParam, 1); if (pLastKnot == NULL) model->pSizeDependParamKnot = pParam; else pLastKnot->pNext = pParam; pParam->pNext = NULL; here->pParam = pParam; Ldrn = here->BSIM3v1l; Wdrn = here->BSIM3v1w; pParam->Length = Ldrn; pParam->Width = Wdrn; T0 = pow(Ldrn, model->BSIM3v1Lln); T1 = pow(Wdrn, model->BSIM3v1Lwn); tmp1 = model->BSIM3v1Ll / T0 + model->BSIM3v1Lw / T1 + model->BSIM3v1Lwl / (T0 * T1); pParam->BSIM3v1dl = model->BSIM3v1Lint + tmp1; pParam->BSIM3v1dlc = model->BSIM3v1dlc + tmp1; T2 = pow(Ldrn, model->BSIM3v1Wln); T3 = pow(Wdrn, model->BSIM3v1Wwn); tmp2 = model->BSIM3v1Wl / T2 + model->BSIM3v1Ww / T3 + model->BSIM3v1Wwl / (T2 * T3); pParam->BSIM3v1dw = model->BSIM3v1Wint + tmp2; pParam->BSIM3v1dwc = model->BSIM3v1dwc + tmp2; pParam->BSIM3v1leff = here->BSIM3v1l - 2.0 * pParam->BSIM3v1dl; if (pParam->BSIM3v1leff <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM3v1: mosfet %s, model %s: Effective channel length <= 0", model->BSIM3v1modName, here->BSIM3v1name); return(E_BADPARM); } pParam->BSIM3v1weff = here->BSIM3v1w - 2.0 * pParam->BSIM3v1dw; if (pParam->BSIM3v1weff <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM3v1: mosfet %s, model %s: Effective channel width <= 0", model->BSIM3v1modName, here->BSIM3v1name); return(E_BADPARM); } pParam->BSIM3v1leffCV = here->BSIM3v1l - 2.0 * pParam->BSIM3v1dlc; if (pParam->BSIM3v1leffCV <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM3v1: mosfet %s, model %s: Effective channel length for C-V <= 0", model->BSIM3v1modName, here->BSIM3v1name); return(E_BADPARM); } pParam->BSIM3v1weffCV = here->BSIM3v1w - 2.0 * pParam->BSIM3v1dwc; if (pParam->BSIM3v1weffCV <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM3v1: mosfet %s, model %s: Effective channel width for C-V <= 0", model->BSIM3v1modName, here->BSIM3v1name); return(E_BADPARM); } if (model->BSIM3v1binUnit == 1) { Inv_L = 1.0e-6 / pParam->BSIM3v1leff; Inv_W = 1.0e-6 / pParam->BSIM3v1weff; Inv_LW = 1.0e-12 / (pParam->BSIM3v1leff * pParam->BSIM3v1weff); } else { Inv_L = 1.0 / pParam->BSIM3v1leff; Inv_W = 1.0 / pParam->BSIM3v1weff; Inv_LW = 1.0 / (pParam->BSIM3v1leff * pParam->BSIM3v1weff); } pParam->BSIM3v1cdsc = model->BSIM3v1cdsc + model->BSIM3v1lcdsc * Inv_L + model->BSIM3v1wcdsc * Inv_W + model->BSIM3v1pcdsc * Inv_LW; pParam->BSIM3v1cdscb = model->BSIM3v1cdscb + model->BSIM3v1lcdscb * Inv_L + model->BSIM3v1wcdscb * Inv_W + model->BSIM3v1pcdscb * Inv_LW; pParam->BSIM3v1cdscd = model->BSIM3v1cdscd + model->BSIM3v1lcdscd * Inv_L + model->BSIM3v1wcdscd * Inv_W + model->BSIM3v1pcdscd * Inv_LW; pParam->BSIM3v1cit = model->BSIM3v1cit + model->BSIM3v1lcit * Inv_L + model->BSIM3v1wcit * Inv_W + model->BSIM3v1pcit * Inv_LW; pParam->BSIM3v1nfactor = model->BSIM3v1nfactor + model->BSIM3v1lnfactor * Inv_L + model->BSIM3v1wnfactor * Inv_W + model->BSIM3v1pnfactor * Inv_LW; pParam->BSIM3v1xj = model->BSIM3v1xj + model->BSIM3v1lxj * Inv_L + model->BSIM3v1wxj * Inv_W + model->BSIM3v1pxj * Inv_LW; pParam->BSIM3v1vsat = model->BSIM3v1vsat + model->BSIM3v1lvsat * Inv_L + model->BSIM3v1wvsat * Inv_W + model->BSIM3v1pvsat * Inv_LW; pParam->BSIM3v1at = model->BSIM3v1at + model->BSIM3v1lat * Inv_L + model->BSIM3v1wat * Inv_W + model->BSIM3v1pat * Inv_LW; pParam->BSIM3v1a0 = model->BSIM3v1a0 + model->BSIM3v1la0 * Inv_L + model->BSIM3v1wa0 * Inv_W + model->BSIM3v1pa0 * Inv_LW; pParam->BSIM3v1ags = model->BSIM3v1ags + model->BSIM3v1lags * Inv_L + model->BSIM3v1wags * Inv_W + model->BSIM3v1pags * Inv_LW; pParam->BSIM3v1a1 = model->BSIM3v1a1 + model->BSIM3v1la1 * Inv_L + model->BSIM3v1wa1 * Inv_W + model->BSIM3v1pa1 * Inv_LW; pParam->BSIM3v1a2 = model->BSIM3v1a2 + model->BSIM3v1la2 * Inv_L + model->BSIM3v1wa2 * Inv_W + model->BSIM3v1pa2 * Inv_LW; pParam->BSIM3v1keta = model->BSIM3v1keta + model->BSIM3v1lketa * Inv_L + model->BSIM3v1wketa * Inv_W + model->BSIM3v1pketa * Inv_LW; pParam->BSIM3v1nsub = model->BSIM3v1nsub + model->BSIM3v1lnsub * Inv_L + model->BSIM3v1wnsub * Inv_W + model->BSIM3v1pnsub * Inv_LW; pParam->BSIM3v1npeak = model->BSIM3v1npeak + model->BSIM3v1lnpeak * Inv_L + model->BSIM3v1wnpeak * Inv_W + model->BSIM3v1pnpeak * Inv_LW; pParam->BSIM3v1ngate = model->BSIM3v1ngate + model->BSIM3v1lngate * Inv_L + model->BSIM3v1wngate * Inv_W + model->BSIM3v1pngate * Inv_LW; pParam->BSIM3v1gamma1 = model->BSIM3v1gamma1 + model->BSIM3v1lgamma1 * Inv_L + model->BSIM3v1wgamma1 * Inv_W + model->BSIM3v1pgamma1 * Inv_LW; pParam->BSIM3v1gamma2 = model->BSIM3v1gamma2 + model->BSIM3v1lgamma2 * Inv_L + model->BSIM3v1wgamma2 * Inv_W + model->BSIM3v1pgamma2 * Inv_LW; pParam->BSIM3v1vbx = model->BSIM3v1vbx + model->BSIM3v1lvbx * Inv_L + model->BSIM3v1wvbx * Inv_W + model->BSIM3v1pvbx * Inv_LW; pParam->BSIM3v1vbm = model->BSIM3v1vbm + model->BSIM3v1lvbm * Inv_L + model->BSIM3v1wvbm * Inv_W + model->BSIM3v1pvbm * Inv_LW; pParam->BSIM3v1xt = model->BSIM3v1xt + model->BSIM3v1lxt * Inv_L + model->BSIM3v1wxt * Inv_W + model->BSIM3v1pxt * Inv_LW; pParam->BSIM3v1k1 = model->BSIM3v1k1 + model->BSIM3v1lk1 * Inv_L + model->BSIM3v1wk1 * Inv_W + model->BSIM3v1pk1 * Inv_LW; pParam->BSIM3v1kt1 = model->BSIM3v1kt1 + model->BSIM3v1lkt1 * Inv_L + model->BSIM3v1wkt1 * Inv_W + model->BSIM3v1pkt1 * Inv_LW; pParam->BSIM3v1kt1l = model->BSIM3v1kt1l + model->BSIM3v1lkt1l * Inv_L + model->BSIM3v1wkt1l * Inv_W + model->BSIM3v1pkt1l * Inv_LW; pParam->BSIM3v1k2 = model->BSIM3v1k2 + model->BSIM3v1lk2 * Inv_L + model->BSIM3v1wk2 * Inv_W + model->BSIM3v1pk2 * Inv_LW; pParam->BSIM3v1kt2 = model->BSIM3v1kt2 + model->BSIM3v1lkt2 * Inv_L + model->BSIM3v1wkt2 * Inv_W + model->BSIM3v1pkt2 * Inv_LW; pParam->BSIM3v1k3 = model->BSIM3v1k3 + model->BSIM3v1lk3 * Inv_L + model->BSIM3v1wk3 * Inv_W + model->BSIM3v1pk3 * Inv_LW; pParam->BSIM3v1k3b = model->BSIM3v1k3b + model->BSIM3v1lk3b * Inv_L + model->BSIM3v1wk3b * Inv_W + model->BSIM3v1pk3b * Inv_LW; pParam->BSIM3v1w0 = model->BSIM3v1w0 + model->BSIM3v1lw0 * Inv_L + model->BSIM3v1ww0 * Inv_W + model->BSIM3v1pw0 * Inv_LW; pParam->BSIM3v1nlx = model->BSIM3v1nlx + model->BSIM3v1lnlx * Inv_L + model->BSIM3v1wnlx * Inv_W + model->BSIM3v1pnlx * Inv_LW; pParam->BSIM3v1dvt0 = model->BSIM3v1dvt0 + model->BSIM3v1ldvt0 * Inv_L + model->BSIM3v1wdvt0 * Inv_W + model->BSIM3v1pdvt0 * Inv_LW; pParam->BSIM3v1dvt1 = model->BSIM3v1dvt1 + model->BSIM3v1ldvt1 * Inv_L + model->BSIM3v1wdvt1 * Inv_W + model->BSIM3v1pdvt1 * Inv_LW; pParam->BSIM3v1dvt2 = model->BSIM3v1dvt2 + model->BSIM3v1ldvt2 * Inv_L + model->BSIM3v1wdvt2 * Inv_W + model->BSIM3v1pdvt2 * Inv_LW; pParam->BSIM3v1dvt0w = model->BSIM3v1dvt0w + model->BSIM3v1ldvt0w * Inv_L + model->BSIM3v1wdvt0w * Inv_W + model->BSIM3v1pdvt0w * Inv_LW; pParam->BSIM3v1dvt1w = model->BSIM3v1dvt1w + model->BSIM3v1ldvt1w * Inv_L + model->BSIM3v1wdvt1w * Inv_W + model->BSIM3v1pdvt1w * Inv_LW; pParam->BSIM3v1dvt2w = model->BSIM3v1dvt2w + model->BSIM3v1ldvt2w * Inv_L + model->BSIM3v1wdvt2w * Inv_W + model->BSIM3v1pdvt2w * Inv_LW; pParam->BSIM3v1drout = model->BSIM3v1drout + model->BSIM3v1ldrout * Inv_L + model->BSIM3v1wdrout * Inv_W + model->BSIM3v1pdrout * Inv_LW; pParam->BSIM3v1dsub = model->BSIM3v1dsub + model->BSIM3v1ldsub * Inv_L + model->BSIM3v1wdsub * Inv_W + model->BSIM3v1pdsub * Inv_LW; pParam->BSIM3v1vth0 = model->BSIM3v1vth0 + model->BSIM3v1lvth0 * Inv_L + model->BSIM3v1wvth0 * Inv_W + model->BSIM3v1pvth0 * Inv_LW; pParam->BSIM3v1ua = model->BSIM3v1ua + model->BSIM3v1lua * Inv_L + model->BSIM3v1wua * Inv_W + model->BSIM3v1pua * Inv_LW; pParam->BSIM3v1ua1 = model->BSIM3v1ua1 + model->BSIM3v1lua1 * Inv_L + model->BSIM3v1wua1 * Inv_W + model->BSIM3v1pua1 * Inv_LW; pParam->BSIM3v1ub = model->BSIM3v1ub + model->BSIM3v1lub * Inv_L + model->BSIM3v1wub * Inv_W + model->BSIM3v1pub * Inv_LW; pParam->BSIM3v1ub1 = model->BSIM3v1ub1 + model->BSIM3v1lub1 * Inv_L + model->BSIM3v1wub1 * Inv_W + model->BSIM3v1pub1 * Inv_LW; pParam->BSIM3v1uc = model->BSIM3v1uc + model->BSIM3v1luc * Inv_L + model->BSIM3v1wuc * Inv_W + model->BSIM3v1puc * Inv_LW; pParam->BSIM3v1uc1 = model->BSIM3v1uc1 + model->BSIM3v1luc1 * Inv_L + model->BSIM3v1wuc1 * Inv_W + model->BSIM3v1puc1 * Inv_LW; pParam->BSIM3v1u0 = model->BSIM3v1u0 + model->BSIM3v1lu0 * Inv_L + model->BSIM3v1wu0 * Inv_W + model->BSIM3v1pu0 * Inv_LW; pParam->BSIM3v1ute = model->BSIM3v1ute + model->BSIM3v1lute * Inv_L + model->BSIM3v1wute * Inv_W + model->BSIM3v1pute * Inv_LW; pParam->BSIM3v1voff = model->BSIM3v1voff + model->BSIM3v1lvoff * Inv_L + model->BSIM3v1wvoff * Inv_W + model->BSIM3v1pvoff * Inv_LW; pParam->BSIM3v1delta = model->BSIM3v1delta + model->BSIM3v1ldelta * Inv_L + model->BSIM3v1wdelta * Inv_W + model->BSIM3v1pdelta * Inv_LW; pParam->BSIM3v1rdsw = model->BSIM3v1rdsw + model->BSIM3v1lrdsw * Inv_L + model->BSIM3v1wrdsw * Inv_W + model->BSIM3v1prdsw * Inv_LW; pParam->BSIM3v1prwg = model->BSIM3v1prwg + model->BSIM3v1lprwg * Inv_L + model->BSIM3v1wprwg * Inv_W + model->BSIM3v1pprwg * Inv_LW; pParam->BSIM3v1prwb = model->BSIM3v1prwb + model->BSIM3v1lprwb * Inv_L + model->BSIM3v1wprwb * Inv_W + model->BSIM3v1pprwb * Inv_LW; pParam->BSIM3v1prt = model->BSIM3v1prt + model->BSIM3v1lprt * Inv_L + model->BSIM3v1wprt * Inv_W + model->BSIM3v1pprt * Inv_LW; pParam->BSIM3v1eta0 = model->BSIM3v1eta0 + model->BSIM3v1leta0 * Inv_L + model->BSIM3v1weta0 * Inv_W + model->BSIM3v1peta0 * Inv_LW; pParam->BSIM3v1etab = model->BSIM3v1etab + model->BSIM3v1letab * Inv_L + model->BSIM3v1wetab * Inv_W + model->BSIM3v1petab * Inv_LW; pParam->BSIM3v1pclm = model->BSIM3v1pclm + model->BSIM3v1lpclm * Inv_L + model->BSIM3v1wpclm * Inv_W + model->BSIM3v1ppclm * Inv_LW; pParam->BSIM3v1pdibl1 = model->BSIM3v1pdibl1 + model->BSIM3v1lpdibl1 * Inv_L + model->BSIM3v1wpdibl1 * Inv_W + model->BSIM3v1ppdibl1 * Inv_LW; pParam->BSIM3v1pdibl2 = model->BSIM3v1pdibl2 + model->BSIM3v1lpdibl2 * Inv_L + model->BSIM3v1wpdibl2 * Inv_W + model->BSIM3v1ppdibl2 * Inv_LW; pParam->BSIM3v1pdiblb = model->BSIM3v1pdiblb + model->BSIM3v1lpdiblb * Inv_L + model->BSIM3v1wpdiblb * Inv_W + model->BSIM3v1ppdiblb * Inv_LW; pParam->BSIM3v1pscbe1 = model->BSIM3v1pscbe1 + model->BSIM3v1lpscbe1 * Inv_L + model->BSIM3v1wpscbe1 * Inv_W + model->BSIM3v1ppscbe1 * Inv_LW; pParam->BSIM3v1pscbe2 = model->BSIM3v1pscbe2 + model->BSIM3v1lpscbe2 * Inv_L + model->BSIM3v1wpscbe2 * Inv_W + model->BSIM3v1ppscbe2 * Inv_LW; pParam->BSIM3v1pvag = model->BSIM3v1pvag + model->BSIM3v1lpvag * Inv_L + model->BSIM3v1wpvag * Inv_W + model->BSIM3v1ppvag * Inv_LW; pParam->BSIM3v1wr = model->BSIM3v1wr + model->BSIM3v1lwr * Inv_L + model->BSIM3v1wwr * Inv_W + model->BSIM3v1pwr * Inv_LW; pParam->BSIM3v1dwg = model->BSIM3v1dwg + model->BSIM3v1ldwg * Inv_L + model->BSIM3v1wdwg * Inv_W + model->BSIM3v1pdwg * Inv_LW; pParam->BSIM3v1dwb = model->BSIM3v1dwb + model->BSIM3v1ldwb * Inv_L + model->BSIM3v1wdwb * Inv_W + model->BSIM3v1pdwb * Inv_LW; pParam->BSIM3v1b0 = model->BSIM3v1b0 + model->BSIM3v1lb0 * Inv_L + model->BSIM3v1wb0 * Inv_W + model->BSIM3v1pb0 * Inv_LW; pParam->BSIM3v1b1 = model->BSIM3v1b1 + model->BSIM3v1lb1 * Inv_L + model->BSIM3v1wb1 * Inv_W + model->BSIM3v1pb1 * Inv_LW; pParam->BSIM3v1alpha0 = model->BSIM3v1alpha0 + model->BSIM3v1lalpha0 * Inv_L + model->BSIM3v1walpha0 * Inv_W + model->BSIM3v1palpha0 * Inv_LW; pParam->BSIM3v1beta0 = model->BSIM3v1beta0 + model->BSIM3v1lbeta0 * Inv_L + model->BSIM3v1wbeta0 * Inv_W + model->BSIM3v1pbeta0 * Inv_LW; /* CV model */ pParam->BSIM3v1elm = model->BSIM3v1elm + model->BSIM3v1lelm * Inv_L + model->BSIM3v1welm * Inv_W + model->BSIM3v1pelm * Inv_LW; pParam->BSIM3v1cgsl = model->BSIM3v1cgsl + model->BSIM3v1lcgsl * Inv_L + model->BSIM3v1wcgsl * Inv_W + model->BSIM3v1pcgsl * Inv_LW; pParam->BSIM3v1cgdl = model->BSIM3v1cgdl + model->BSIM3v1lcgdl * Inv_L + model->BSIM3v1wcgdl * Inv_W + model->BSIM3v1pcgdl * Inv_LW; pParam->BSIM3v1ckappa = model->BSIM3v1ckappa + model->BSIM3v1lckappa * Inv_L + model->BSIM3v1wckappa * Inv_W + model->BSIM3v1pckappa * Inv_LW; pParam->BSIM3v1cf = model->BSIM3v1cf + model->BSIM3v1lcf * Inv_L + model->BSIM3v1wcf * Inv_W + model->BSIM3v1pcf * Inv_LW; pParam->BSIM3v1clc = model->BSIM3v1clc + model->BSIM3v1lclc * Inv_L + model->BSIM3v1wclc * Inv_W + model->BSIM3v1pclc * Inv_LW; pParam->BSIM3v1cle = model->BSIM3v1cle + model->BSIM3v1lcle * Inv_L + model->BSIM3v1wcle * Inv_W + model->BSIM3v1pcle * Inv_LW; pParam->BSIM3v1vfbcv = model->BSIM3v1vfbcv + model->BSIM3v1lvfbcv * Inv_L + model->BSIM3v1wvfbcv * Inv_W + model->BSIM3v1pvfbcv * Inv_LW; pParam->BSIM3v1abulkCVfactor = 1.0 + pow((pParam->BSIM3v1clc / pParam->BSIM3v1leff), pParam->BSIM3v1cle); T0 = (TRatio - 1.0); pParam->BSIM3v1ua = pParam->BSIM3v1ua + pParam->BSIM3v1ua1 * T0; pParam->BSIM3v1ub = pParam->BSIM3v1ub + pParam->BSIM3v1ub1 * T0; pParam->BSIM3v1uc = pParam->BSIM3v1uc + pParam->BSIM3v1uc1 * T0; if (pParam->BSIM3v1u0 > 1.0) pParam->BSIM3v1u0 = pParam->BSIM3v1u0 / 1.0e4; pParam->BSIM3v1u0temp = pParam->BSIM3v1u0 * pow(TRatio, pParam->BSIM3v1ute); pParam->BSIM3v1vsattemp = pParam->BSIM3v1vsat - pParam->BSIM3v1at * T0; pParam->BSIM3v1rds0 = (pParam->BSIM3v1rdsw + pParam->BSIM3v1prt * T0) / pow(pParam->BSIM3v1weff * 1E6, pParam->BSIM3v1wr); if (BSIM3v1checkModel(model, here, ckt)) { SPfrontEnd->IFerrorf (ERR_FATAL, "Fatal error(s) detected during BSIM3V3.1 parameter checking for %s in model %s", model->BSIM3v1modName, here->BSIM3v1name); return(E_BADPARM); } pParam->BSIM3v1cgdo = (model->BSIM3v1cgdo + pParam->BSIM3v1cf) * pParam->BSIM3v1weffCV; pParam->BSIM3v1cgso = (model->BSIM3v1cgso + pParam->BSIM3v1cf) * pParam->BSIM3v1weffCV; pParam->BSIM3v1cgbo = model->BSIM3v1cgbo * pParam->BSIM3v1leffCV; if (!model->BSIM3v1npeakGiven && model->BSIM3v1gamma1Given) { T0 = pParam->BSIM3v1gamma1 * model->BSIM3v1cox; pParam->BSIM3v1npeak = 3.021E22 * T0 * T0; } pParam->BSIM3v1phi = 2.0 * Vtm0 * log(pParam->BSIM3v1npeak / ni); pParam->BSIM3v1sqrtPhi = sqrt(pParam->BSIM3v1phi); pParam->BSIM3v1phis3 = pParam->BSIM3v1sqrtPhi * pParam->BSIM3v1phi; pParam->BSIM3v1Xdep0 = sqrt(2.0 * EPSSI / (Charge_q * pParam->BSIM3v1npeak * 1.0e6)) * pParam->BSIM3v1sqrtPhi; pParam->BSIM3v1sqrtXdep0 = sqrt(pParam->BSIM3v1Xdep0); pParam->BSIM3v1litl = sqrt(3.0 * pParam->BSIM3v1xj * model->BSIM3v1tox); pParam->BSIM3v1vbi = Vtm0 * log(1.0e20 * pParam->BSIM3v1npeak / (ni * ni)); pParam->BSIM3v1cdep0 = sqrt(Charge_q * EPSSI * pParam->BSIM3v1npeak * 1.0e6 / 2.0 / pParam->BSIM3v1phi); if (model->BSIM3v1k1Given || model->BSIM3v1k2Given) { if (!model->BSIM3v1k1Given) { fprintf(stdout, "Warning: k1 should be specified with k2.\n"); pParam->BSIM3v1k1 = 0.53; } if (!model->BSIM3v1k2Given) { fprintf(stdout, "Warning: k2 should be specified with k1.\n"); pParam->BSIM3v1k2 = -0.0186; } if (model->BSIM3v1nsubGiven) fprintf(stdout, "Warning: nsub is ignored because k1 or k2 is given.\n"); if (model->BSIM3v1xtGiven) fprintf(stdout, "Warning: xt is ignored because k1 or k2 is given.\n"); if (model->BSIM3v1vbxGiven) fprintf(stdout, "Warning: vbx is ignored because k1 or k2 is given.\n"); if (model->BSIM3v1vbmGiven) fprintf(stdout, "Warning: vbm is ignored because k1 or k2 is given.\n"); if (model->BSIM3v1gamma1Given) fprintf(stdout, "Warning: gamma1 is ignored because k1 or k2 is given.\n"); if (model->BSIM3v1gamma2Given) fprintf(stdout, "Warning: gamma2 is ignored because k1 or k2 is given.\n"); } else { if (!model->BSIM3v1vbxGiven) pParam->BSIM3v1vbx = pParam->BSIM3v1phi - 7.7348e-4 * pParam->BSIM3v1npeak * pParam->BSIM3v1xt * pParam->BSIM3v1xt; if (pParam->BSIM3v1vbx > 0.0) pParam->BSIM3v1vbx = -pParam->BSIM3v1vbx; if (pParam->BSIM3v1vbm > 0.0) pParam->BSIM3v1vbm = -pParam->BSIM3v1vbm; if (!model->BSIM3v1gamma1Given) pParam->BSIM3v1gamma1 = 5.753e-12 * sqrt(pParam->BSIM3v1npeak) / model->BSIM3v1cox; if (!model->BSIM3v1gamma2Given) pParam->BSIM3v1gamma2 = 5.753e-12 * sqrt(pParam->BSIM3v1nsub) / model->BSIM3v1cox; T0 = pParam->BSIM3v1gamma1 - pParam->BSIM3v1gamma2; T1 = sqrt(pParam->BSIM3v1phi - pParam->BSIM3v1vbx) - pParam->BSIM3v1sqrtPhi; T2 = sqrt(pParam->BSIM3v1phi * (pParam->BSIM3v1phi - pParam->BSIM3v1vbm)) - pParam->BSIM3v1phi; pParam->BSIM3v1k2 = T0 * T1 / (2.0 * T2 + pParam->BSIM3v1vbm); pParam->BSIM3v1k1 = pParam->BSIM3v1gamma2 - 2.0 * pParam->BSIM3v1k2 * sqrt(pParam->BSIM3v1phi - pParam->BSIM3v1vbm); } if (pParam->BSIM3v1k2 < 0.0) { T0 = 0.5 * pParam->BSIM3v1k1 / pParam->BSIM3v1k2; pParam->BSIM3v1vbsc = 0.9 * (pParam->BSIM3v1phi - T0 * T0); if (pParam->BSIM3v1vbsc > -3.0) pParam->BSIM3v1vbsc = -3.0; else if (pParam->BSIM3v1vbsc < -30.0) pParam->BSIM3v1vbsc = -30.0; } else { pParam->BSIM3v1vbsc = -30.0; } if (pParam->BSIM3v1vbsc > pParam->BSIM3v1vbm) pParam->BSIM3v1vbsc = pParam->BSIM3v1vbm; if (model->BSIM3v1vth0Given) { pParam->BSIM3v1vfb = model->BSIM3v1type * pParam->BSIM3v1vth0 - pParam->BSIM3v1phi - pParam->BSIM3v1k1 * pParam->BSIM3v1sqrtPhi; } else { pParam->BSIM3v1vfb = -1.0; pParam->BSIM3v1vth0 = model->BSIM3v1type * (pParam->BSIM3v1vfb + pParam->BSIM3v1phi + pParam->BSIM3v1k1 * pParam->BSIM3v1sqrtPhi); } T1 = sqrt(EPSSI / EPSOX * model->BSIM3v1tox * pParam->BSIM3v1Xdep0); T0 = exp(-0.5 * pParam->BSIM3v1dsub * pParam->BSIM3v1leff / T1); pParam->BSIM3v1theta0vb0 = (T0 + 2.0 * T0 * T0); T0 = exp(-0.5 * pParam->BSIM3v1drout * pParam->BSIM3v1leff / T1); T2 = (T0 + 2.0 * T0 * T0); pParam->BSIM3v1thetaRout = pParam->BSIM3v1pdibl1 * T2 + pParam->BSIM3v1pdibl2; } /* process source/drain series resistance */ here->BSIM3v1drainConductance = model->BSIM3v1sheetResistance * here->BSIM3v1drainSquares; if (here->BSIM3v1drainConductance > 0.0) here->BSIM3v1drainConductance = 1.0 / here->BSIM3v1drainConductance; else here->BSIM3v1drainConductance = 0.0; here->BSIM3v1sourceConductance = model->BSIM3v1sheetResistance * here->BSIM3v1sourceSquares; if (here->BSIM3v1sourceConductance > 0.0) here->BSIM3v1sourceConductance = 1.0 / here->BSIM3v1sourceConductance; else here->BSIM3v1sourceConductance = 0.0; here->BSIM3v1cgso = pParam->BSIM3v1cgso; here->BSIM3v1cgdo = pParam->BSIM3v1cgdo; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v1/b3v1ask.c0000644000175000017500000001503013546075722022064 0ustar carstencarsten/********** * Copyright 1990 Regents of the University of California. All rights reserved. * File: b3ask.c * Author: 1995 Min-Chie Jeng and Mansun Chan. * Modified by Paolo Nenzi 2002 **********/ /* * Release Notes: * BSIM3v1v3.1, Released by yuhua 96/12/08 */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "bsim3v1def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3v1ask (CKTcircuit * ckt, GENinstance * inst, int which, IFvalue * value, IFvalue * select) { BSIM3v1instance *here = (BSIM3v1instance *) inst; NG_IGNORE(select); switch (which) { case BSIM3v1_L: value->rValue = here->BSIM3v1l; return(OK); case BSIM3v1_W: value->rValue = here->BSIM3v1w; return(OK); case BSIM3v1_M: value->rValue = here->BSIM3v1m; return(OK); case BSIM3v1_AS: value->rValue = here->BSIM3v1sourceArea; return(OK); case BSIM3v1_AD: value->rValue = here->BSIM3v1drainArea; return(OK); case BSIM3v1_PS: value->rValue = here->BSIM3v1sourcePerimeter; return(OK); case BSIM3v1_PD: value->rValue = here->BSIM3v1drainPerimeter; return(OK); case BSIM3v1_NRS: value->rValue = here->BSIM3v1sourceSquares; return(OK); case BSIM3v1_NRD: value->rValue = here->BSIM3v1drainSquares; return(OK); case BSIM3v1_OFF: value->rValue = here->BSIM3v1off; return(OK); case BSIM3v1_NQSMOD: value->iValue = here->BSIM3v1nqsMod; return(OK); case BSIM3v1_IC_VBS: value->rValue = here->BSIM3v1icVBS; return(OK); case BSIM3v1_IC_VDS: value->rValue = here->BSIM3v1icVDS; return(OK); case BSIM3v1_IC_VGS: value->rValue = here->BSIM3v1icVGS; return(OK); case BSIM3v1_DNODE: value->iValue = here->BSIM3v1dNode; return(OK); case BSIM3v1_GNODE: value->iValue = here->BSIM3v1gNode; return(OK); case BSIM3v1_SNODE: value->iValue = here->BSIM3v1sNode; return(OK); case BSIM3v1_BNODE: value->iValue = here->BSIM3v1bNode; return(OK); case BSIM3v1_DNODEPRIME: value->iValue = here->BSIM3v1dNodePrime; return(OK); case BSIM3v1_SNODEPRIME: value->iValue = here->BSIM3v1sNodePrime; return(OK); case BSIM3v1_SOURCECONDUCT: value->rValue = here->BSIM3v1sourceConductance; value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_DRAINCONDUCT: value->rValue = here->BSIM3v1drainConductance; value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_VBD: value->rValue = *(ckt->CKTstate0 + here->BSIM3v1vbd); return(OK); case BSIM3v1_VBS: value->rValue = *(ckt->CKTstate0 + here->BSIM3v1vbs); return(OK); case BSIM3v1_VGS: value->rValue = *(ckt->CKTstate0 + here->BSIM3v1vgs); return(OK); case BSIM3v1_VDS: value->rValue = *(ckt->CKTstate0 + here->BSIM3v1vds); return(OK); case BSIM3v1_CD: value->rValue = here->BSIM3v1cd; value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_CBS: value->rValue = here->BSIM3v1cbs; value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_CBD: value->rValue = here->BSIM3v1cbd; value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_GM: value->rValue = here->BSIM3v1gm; value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_GDS: value->rValue = here->BSIM3v1gds; value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_GMBS: value->rValue = here->BSIM3v1gmbs; value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_GBD: value->rValue = here->BSIM3v1gbd; value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_GBS: value->rValue = here->BSIM3v1gbs; value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_QB: value->rValue = *(ckt->CKTstate0 + here->BSIM3v1qb); value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_CQB: value->rValue = *(ckt->CKTstate0 + here->BSIM3v1cqb); value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_QG: value->rValue = *(ckt->CKTstate0 + here->BSIM3v1qg); value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_CQG: value->rValue = *(ckt->CKTstate0 + here->BSIM3v1cqg); value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_QD: value->rValue = *(ckt->CKTstate0 + here->BSIM3v1qd); value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_CQD: value->rValue = *(ckt->CKTstate0 + here->BSIM3v1cqd); value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_CGG: value->rValue = here->BSIM3v1cggb; value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_CGD: value->rValue = here->BSIM3v1cgdb; value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_CGS: value->rValue = here->BSIM3v1cgsb; value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_CDG: value->rValue = here->BSIM3v1cdgb; value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_CDD: value->rValue = here->BSIM3v1cddb; value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_CDS: value->rValue = here->BSIM3v1cdsb; value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_CBG: value->rValue = here->BSIM3v1cbgb; value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_CBDB: value->rValue = here->BSIM3v1cbdb; value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_CBSB: value->rValue = here->BSIM3v1cbsb; value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_CAPBD: value->rValue = here->BSIM3v1capbd; value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_CAPBS: value->rValue = here->BSIM3v1capbs; value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_VON: value->rValue = here->BSIM3v1von; return(OK); case BSIM3v1_VDSAT: value->rValue = here->BSIM3v1vdsat; return(OK); case BSIM3v1_QBS: value->rValue = *(ckt->CKTstate0 + here->BSIM3v1qbs); value->rValue *= here->BSIM3v1m; return(OK); case BSIM3v1_QBD: value->rValue = *(ckt->CKTstate0 + here->BSIM3v1qbd); value->rValue *= here->BSIM3v1m; return(OK); default: return (E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim3v1/Makefile.am0000644000175000017500000000101413546075722022477 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libbsim3v1.la libbsim3v1_la_SOURCES = \ b3v1.c \ b3v1acld.c \ b3v1ask.c \ b3v1check.c \ b3v1cvtest.c \ b3v1getic.c \ b3v1ld.c \ b3v1mask.c \ b3v1mpar.c \ b3v1noi.c \ b3v1par.c \ b3v1pzld.c \ b3v1set.c \ b3v1temp.c \ b3v1trunc.c \ bsim3v1def.h \ bsim3v1ext.h \ bsim3v1init.c \ bsim3v1init.h \ bsim3v1itf.h AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/bsim3v1/b3v1acld.c0000644000175000017500000001366213546075722022222 0ustar carstencarsten/********** * Copyright 1990 Regents of the University of California. All rights reserved. * File: b3v1acld.c * Author: 1995 Min-Chie Jeng and Mansun Chan. * Modified by Paolo Nenzi 2002 **********/ /* * Release Notes: * BSIM3v3.1, Released by yuhua 96/12/08 */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3v1def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3v1acLoad (GENmodel * inModel, CKTcircuit * ckt) { BSIM3v1model *model = (BSIM3v1model *) inModel; BSIM3v1instance *here; double xcggb, xcgdb, xcgsb, xcbgb, xcbdb, xcbsb, xcddb, xcssb, xcdgb; double gdpr, gspr, gds, gbd, gbs, capbd, capbs, xcsgb, xcdsb, xcsdb; double cggb, cgdb, cgsb, cbgb, cbdb, cbsb, cddb, cdgb, cdsb, omega; double GSoverlapCap, GDoverlapCap, GBoverlapCap, FwdSum, RevSum, Gm, Gmbs; double dxpart, sxpart, cqgb, cqdb, cqsb, cqbb, xcqgb, xcqdb, xcqsb, xcqbb; double m; omega = ckt->CKTomega; for (; model != NULL; model = BSIM3v1nextModel(model)) { for (here = BSIM3v1instances(model); here != NULL; here = BSIM3v1nextInstance(here)) { if (here->BSIM3v1mode >= 0) { Gm = here->BSIM3v1gm; Gmbs = here->BSIM3v1gmbs; FwdSum = Gm + Gmbs; RevSum = 0.0; cggb = here->BSIM3v1cggb; cgsb = here->BSIM3v1cgsb; cgdb = here->BSIM3v1cgdb; cbgb = here->BSIM3v1cbgb; cbsb = here->BSIM3v1cbsb; cbdb = here->BSIM3v1cbdb; cdgb = here->BSIM3v1cdgb; cdsb = here->BSIM3v1cdsb; cddb = here->BSIM3v1cddb; cqgb = here->BSIM3v1cqgb; cqdb = here->BSIM3v1cqdb; cqsb = here->BSIM3v1cqsb; cqbb = here->BSIM3v1cqbb; sxpart = 0.6; dxpart = 0.4; } else { Gm = -here->BSIM3v1gm; Gmbs = -here->BSIM3v1gmbs; FwdSum = 0.0; RevSum = -Gm - Gmbs; cggb = here->BSIM3v1cggb; cgsb = here->BSIM3v1cgdb; cgdb = here->BSIM3v1cgsb; cbgb = here->BSIM3v1cbgb; cbsb = here->BSIM3v1cbdb; cbdb = here->BSIM3v1cbsb; cdgb = -(here->BSIM3v1cdgb + cggb + cbgb); cdsb = -(here->BSIM3v1cddb + cgsb + cbsb); cddb = -(here->BSIM3v1cdsb + cgdb + cbdb); cqgb = here->BSIM3v1cqgb; cqdb = here->BSIM3v1cqsb; cqsb = here->BSIM3v1cqdb; cqbb = here->BSIM3v1cqbb; sxpart = 0.4; dxpart = 0.6; } gdpr = here->BSIM3v1drainConductance; gspr = here->BSIM3v1sourceConductance; gds = here->BSIM3v1gds; gbd = here->BSIM3v1gbd; gbs = here->BSIM3v1gbs; capbd = here->BSIM3v1capbd; capbs = here->BSIM3v1capbs; GSoverlapCap = here->BSIM3v1cgso; GDoverlapCap = here->BSIM3v1cgdo; GBoverlapCap = here->pParam->BSIM3v1cgbo; xcdgb = (cdgb - GDoverlapCap) * omega; xcddb = (cddb + capbd + GDoverlapCap) * omega; xcdsb = cdsb * omega; xcsgb = -(cggb + cbgb + cdgb + GSoverlapCap) * omega; xcsdb = -(cgdb + cbdb + cddb) * omega; xcssb = (capbs + GSoverlapCap - (cgsb + cbsb + cdsb)) * omega; xcggb = (cggb + GDoverlapCap + GSoverlapCap + GBoverlapCap) * omega; xcgdb = (cgdb - GDoverlapCap) * omega; xcgsb = (cgsb - GSoverlapCap) * omega; xcbgb = (cbgb - GBoverlapCap) * omega; xcbdb = (cbdb - capbd) * omega; xcbsb = (cbsb - capbs) * omega; xcqgb = cqgb * omega; xcqdb = cqdb * omega; xcqsb = cqsb * omega; xcqbb = cqbb * omega; m = here->BSIM3v1m; *(here->BSIM3v1GgPtr + 1) += m * xcggb; *(here->BSIM3v1BbPtr + 1) -= m * (xcbgb + xcbdb + xcbsb); *(here->BSIM3v1DPdpPtr + 1) += m * xcddb; *(here->BSIM3v1SPspPtr + 1) += m * xcssb; *(here->BSIM3v1GbPtr + 1) -= m * (xcggb + xcgdb + xcgsb); *(here->BSIM3v1GdpPtr + 1) += m * xcgdb; *(here->BSIM3v1GspPtr + 1) += m * xcgsb; *(here->BSIM3v1BgPtr + 1) += m * xcbgb; *(here->BSIM3v1BdpPtr + 1) += m * xcbdb; *(here->BSIM3v1BspPtr + 1) += m * xcbsb; *(here->BSIM3v1DPgPtr + 1) += m * xcdgb; *(here->BSIM3v1DPbPtr + 1) -= m * (xcdgb + xcddb + xcdsb); *(here->BSIM3v1DPspPtr + 1) += m * xcdsb; *(here->BSIM3v1SPgPtr + 1) += m * xcsgb; *(here->BSIM3v1SPbPtr + 1) -= m * (xcsgb + xcsdb + xcssb); *(here->BSIM3v1SPdpPtr + 1) += m * xcsdb; *(here->BSIM3v1QqPtr + 1) += m * omega; *(here->BSIM3v1QgPtr + 1) -= m * xcqgb; *(here->BSIM3v1QdpPtr + 1) -= m * xcqdb; *(here->BSIM3v1QspPtr + 1) -= m * xcqsb; *(here->BSIM3v1QbPtr + 1) -= m * xcqbb; *(here->BSIM3v1DdPtr) += m * gdpr; *(here->BSIM3v1SsPtr) += m * gspr; *(here->BSIM3v1BbPtr) += m * (gbd + gbs); *(here->BSIM3v1DPdpPtr) += m * (gdpr + gds + gbd + RevSum + dxpart * here->BSIM3v1gtd); *(here->BSIM3v1SPspPtr) += m * (gspr + gds + gbs + FwdSum + sxpart * here->BSIM3v1gts); *(here->BSIM3v1DdpPtr) -= m * gdpr; *(here->BSIM3v1SspPtr) -= m * gspr; *(here->BSIM3v1BdpPtr) -= m * gbd; *(here->BSIM3v1BspPtr) -= m * gbs; *(here->BSIM3v1DPdPtr) -= m * gdpr; *(here->BSIM3v1DPgPtr) += m * (Gm + dxpart * here->BSIM3v1gtg); *(here->BSIM3v1DPbPtr) -= m * (gbd - Gmbs - dxpart * here->BSIM3v1gtb); *(here->BSIM3v1DPspPtr) -= m * (gds + FwdSum - dxpart * here->BSIM3v1gts); *(here->BSIM3v1SPgPtr) -= m * (Gm - sxpart * here->BSIM3v1gtg); *(here->BSIM3v1SPsPtr) -= m * gspr; *(here->BSIM3v1SPbPtr) -= m * (gbs + Gmbs - sxpart * here->BSIM3v1gtg); *(here->BSIM3v1SPdpPtr) -= m * (gds + RevSum - sxpart * here->BSIM3v1gtd); *(here->BSIM3v1GgPtr) -= m * here->BSIM3v1gtg; *(here->BSIM3v1GbPtr) -= m * here->BSIM3v1gtb; *(here->BSIM3v1GdpPtr) -= m * here->BSIM3v1gtd; *(here->BSIM3v1GspPtr) -= m * here->BSIM3v1gts; *(here->BSIM3v1QqPtr) += m * here->BSIM3v1gtau; *(here->BSIM3v1DPqPtr) += m * dxpart * here->BSIM3v1gtau; *(here->BSIM3v1SPqPtr) += m * sxpart * here->BSIM3v1gtau; *(here->BSIM3v1GqPtr) -= m * here->BSIM3v1gtau; *(here->BSIM3v1QgPtr) += m * here->BSIM3v1gtg; *(here->BSIM3v1QdpPtr) += m * here->BSIM3v1gtd; *(here->BSIM3v1QspPtr) += m * here->BSIM3v1gts; *(here->BSIM3v1QbPtr) += m * here->BSIM3v1gtb; } } return (OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v1/b3v1check.c0000644000175000017500000003135713546075722022375 0ustar carstencarsten/********** * Copyright 1990 Regents of the University of California. All rights reserved. * File: b3v1check.c * Author: 1995 Min-Chie Jeng and Mansun Chan. * Modified by Paolo Nenzi 2002 **********/ /* * Release Notes: * BSIM3v3.1, Released by yuhua 96/12/08 */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3v1def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" int BSIM3v1checkModel(BSIM3v1model *model, BSIM3v1instance *here, CKTcircuit *ckt) { struct bsim3v1SizeDependParam *pParam; int Fatal_Flag = 0; FILE *fplog; NG_IGNORE(ckt); if ((fplog = fopen("b3v3_1check.log", "w")) != NULL) { pParam = here->pParam; fprintf(fplog, "BSIM3V3.1 Parameter Check\n"); fprintf(fplog, "Model = %s\n", model->BSIM3v1modName); fprintf(fplog, "W = %g, L = %g\n", here->BSIM3v1w, here->BSIM3v1l); if (pParam->BSIM3v1nlx < -pParam->BSIM3v1leff) { fprintf(fplog, "Fatal: Nlx = %g is less than -Leff.\n", pParam->BSIM3v1nlx); printf("Fatal: Nlx = %g is less than -Leff.\n", pParam->BSIM3v1nlx); Fatal_Flag = 1; } if (model->BSIM3v1tox <= 0.0) { fprintf(fplog, "Fatal: Tox = %g is not positive.\n", model->BSIM3v1tox); printf("Fatal: Tox = %g is not positive.\n", model->BSIM3v1tox); Fatal_Flag = 1; } if (pParam->BSIM3v1npeak <= 0.0) { fprintf(fplog, "Fatal: Nch = %g is not positive.\n", pParam->BSIM3v1npeak); printf("Fatal: Nch = %g is not positive.\n", pParam->BSIM3v1npeak); Fatal_Flag = 1; } if (pParam->BSIM3v1nsub <= 0.0) { fprintf(fplog, "Fatal: Nsub = %g is not positive.\n", pParam->BSIM3v1nsub); printf("Fatal: Nsub = %g is not positive.\n", pParam->BSIM3v1nsub); Fatal_Flag = 1; } if (pParam->BSIM3v1ngate < 0.0) { fprintf(fplog, "Fatal: Ngate = %g is not positive.\n", pParam->BSIM3v1ngate); printf("Fatal: Ngate = %g Ngate is not positive.\n", pParam->BSIM3v1ngate); Fatal_Flag = 1; } if (pParam->BSIM3v1ngate > 1.e25) { fprintf(fplog, "Fatal: Ngate = %g is too high.\n", pParam->BSIM3v1ngate); printf("Fatal: Ngate = %g Ngate is too high\n", pParam->BSIM3v1ngate); Fatal_Flag = 1; } if (pParam->BSIM3v1xj <= 0.0) { fprintf(fplog, "Fatal: Xj = %g is not positive.\n", pParam->BSIM3v1xj); printf("Fatal: Xj = %g is not positive.\n", pParam->BSIM3v1xj); Fatal_Flag = 1; } if (pParam->BSIM3v1dvt1 < 0.0) { fprintf(fplog, "Fatal: Dvt1 = %g is negative.\n", pParam->BSIM3v1dvt1); printf("Fatal: Dvt1 = %g is negative.\n", pParam->BSIM3v1dvt1); Fatal_Flag = 1; } if (pParam->BSIM3v1dvt1w < 0.0) { fprintf(fplog, "Fatal: Dvt1w = %g is negative.\n", pParam->BSIM3v1dvt1w); printf("Fatal: Dvt1w = %g is negative.\n", pParam->BSIM3v1dvt1w); Fatal_Flag = 1; } if (pParam->BSIM3v1w0 == -pParam->BSIM3v1weff) { fprintf(fplog, "Fatal: (W0 + Weff) = 0 cauing divided-by-zero.\n"); printf("Fatal: (W0 + Weff) = 0 cauing divided-by-zero.\n"); Fatal_Flag = 1; } if (pParam->BSIM3v1dsub < 0.0) { fprintf(fplog, "Fatal: Dsub = %g is negative.\n", pParam->BSIM3v1dsub); printf("Fatal: Dsub = %g is negative.\n", pParam->BSIM3v1dsub); Fatal_Flag = 1; } if (pParam->BSIM3v1b1 == -pParam->BSIM3v1weff) { fprintf(fplog, "Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); printf("Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); Fatal_Flag = 1; } if (pParam->BSIM3v1u0temp <= 0.0) { fprintf(fplog, "Fatal: u0 at current temperature = %g is not positive.\n", pParam->BSIM3v1u0temp); printf("Fatal: u0 at current temperature = %g is not positive.\n", pParam->BSIM3v1u0temp); Fatal_Flag = 1; } /* Check delta parameter */ if (pParam->BSIM3v1delta < 0.0) { fprintf(fplog, "Fatal: Delta = %g is less than zero.\n", pParam->BSIM3v1delta); printf("Fatal: Delta = %g is less than zero.\n", pParam->BSIM3v1delta); Fatal_Flag = 1; } if (pParam->BSIM3v1vsattemp <= 0.0) { fprintf(fplog, "Fatal: Vsat at current temperature = %g is not positive.\n", pParam->BSIM3v1vsattemp); printf("Fatal: Vsat at current temperature = %g is not positive.\n", pParam->BSIM3v1vsattemp); Fatal_Flag = 1; } /* Check Rout parameters */ if (pParam->BSIM3v1pclm <= 0.0) { fprintf(fplog, "Fatal: Pclm = %g is not positive.\n", pParam->BSIM3v1pclm); printf("Fatal: Pclm = %g is not positive.\n", pParam->BSIM3v1pclm); Fatal_Flag = 1; } if (pParam->BSIM3v1drout < 0.0) { fprintf(fplog, "Fatal: Drout = %g is negative.\n", pParam->BSIM3v1drout); printf("Fatal: Drout = %g is negative.\n", pParam->BSIM3v1drout); Fatal_Flag = 1; } if (model->BSIM3v1unitLengthSidewallJctCap > 0.0 || model->BSIM3v1unitLengthGateSidewallJctCap > 0.0) { if (here->BSIM3v1drainPerimeter < pParam->BSIM3v1weff) { fprintf(fplog, "Warning: Pd = %g is less than W.\n", here->BSIM3v1drainPerimeter); printf("Warning: Pd = %g is less than W.\n", here->BSIM3v1drainPerimeter); here->BSIM3v1drainPerimeter =pParam->BSIM3v1weff; } if (here->BSIM3v1sourcePerimeter < pParam->BSIM3v1weff) { fprintf(fplog, "Warning: Ps = %g is less than W.\n", here->BSIM3v1sourcePerimeter); printf("Warning: Ps = %g is less than W.\n", here->BSIM3v1sourcePerimeter); here->BSIM3v1sourcePerimeter =pParam->BSIM3v1weff; } } /* Check capacitance parameters */ if (pParam->BSIM3v1clc < 0.0) { fprintf(fplog, "Fatal: Clc = %g is negative.\n", pParam->BSIM3v1clc); printf("Fatal: Clc = %g is negative.\n", pParam->BSIM3v1clc); Fatal_Flag = 1; } if (model->BSIM3v1paramChk ==1) { /* Check L and W parameters */ if (pParam->BSIM3v1leff <= 5.0e-8) { fprintf(fplog, "Warning: Leff = %g may be too small.\n", pParam->BSIM3v1leff); printf("Warning: Leff = %g may be too small.\n", pParam->BSIM3v1leff); } if (pParam->BSIM3v1leffCV <= 5.0e-8) { fprintf(fplog, "Warning: Leff for CV = %g may be too small.\n", pParam->BSIM3v1leffCV); printf("Warning: Leff for CV = %g may be too small.\n", pParam->BSIM3v1leffCV); } if (pParam->BSIM3v1weff <= 1.0e-7) { fprintf(fplog, "Warning: Weff = %g may be too small.\n", pParam->BSIM3v1weff); printf("Warning: Weff = %g may be too small.\n", pParam->BSIM3v1weff); } if (pParam->BSIM3v1weffCV <= 1.0e-7) { fprintf(fplog, "Warning: Weff for CV = %g may be too small.\n", pParam->BSIM3v1weffCV); printf("Warning: Weff for CV = %g may be too small.\n", pParam->BSIM3v1weffCV); } /* Check threshold voltage parameters */ if (pParam->BSIM3v1nlx < 0.0) { fprintf(fplog, "Warning: Nlx = %g is negative.\n", pParam->BSIM3v1nlx); printf("Warning: Nlx = %g is negative.\n", pParam->BSIM3v1nlx); } if (model->BSIM3v1tox < 1.0e-9) { fprintf(fplog, "Warning: Tox = %g is less than 10A.\n", model->BSIM3v1tox); printf("Warning: Tox = %g is less than 10A.\n", model->BSIM3v1tox); } if (pParam->BSIM3v1npeak <= 1.0e15) { fprintf(fplog, "Warning: Nch = %g may be too small.\n", pParam->BSIM3v1npeak); printf("Warning: Nch = %g may be too small.\n", pParam->BSIM3v1npeak); } else if (pParam->BSIM3v1npeak >= 1.0e21) { fprintf(fplog, "Warning: Nch = %g may be too large.\n", pParam->BSIM3v1npeak); printf("Warning: Nch = %g may be too large.\n", pParam->BSIM3v1npeak); } if (pParam->BSIM3v1nsub <= 1.0e14) { fprintf(fplog, "Warning: Nsub = %g may be too small.\n", pParam->BSIM3v1nsub); printf("Warning: Nsub = %g may be too small.\n", pParam->BSIM3v1nsub); } else if (pParam->BSIM3v1nsub >= 1.0e21) { fprintf(fplog, "Warning: Nsub = %g may be too large.\n", pParam->BSIM3v1nsub); printf("Warning: Nsub = %g may be too large.\n", pParam->BSIM3v1nsub); } if ((pParam->BSIM3v1ngate > 0.0) && (pParam->BSIM3v1ngate <= 1.e18)) { fprintf(fplog, "Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->BSIM3v1ngate); printf("Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->BSIM3v1ngate); } if (pParam->BSIM3v1dvt0 < 0.0) { fprintf(fplog, "Warning: Dvt0 = %g is negative.\n", pParam->BSIM3v1dvt0); printf("Warning: Dvt0 = %g is negative.\n", pParam->BSIM3v1dvt0); } if (fabs(1.0e-6 / (pParam->BSIM3v1w0 + pParam->BSIM3v1weff)) > 10.0) { fprintf(fplog, "Warning: (W0 + Weff) may be too small.\n"); printf("Warning: (W0 + Weff) may be too small.\n"); } /* Check subthreshold parameters */ if (pParam->BSIM3v1nfactor < 0.0) { fprintf(fplog, "Warning: Nfactor = %g is negative.\n", pParam->BSIM3v1nfactor); printf("Warning: Nfactor = %g is negative.\n", pParam->BSIM3v1nfactor); } if (pParam->BSIM3v1cdsc < 0.0) { fprintf(fplog, "Warning: Cdsc = %g is negative.\n", pParam->BSIM3v1cdsc); printf("Warning: Cdsc = %g is negative.\n", pParam->BSIM3v1cdsc); } if (pParam->BSIM3v1cdscd < 0.0) { fprintf(fplog, "Warning: Cdscd = %g is negative.\n", pParam->BSIM3v1cdscd); printf("Warning: Cdscd = %g is negative.\n", pParam->BSIM3v1cdscd); } /* Check DIBL parameters */ if (pParam->BSIM3v1eta0 < 0.0) { fprintf(fplog, "Warning: Eta0 = %g is negative.\n", pParam->BSIM3v1eta0); printf("Warning: Eta0 = %g is negative.\n", pParam->BSIM3v1eta0); } /* Check Abulk parameters */ if (fabs(1.0e-6 / (pParam->BSIM3v1b1 + pParam->BSIM3v1weff)) > 10.0) { fprintf(fplog, "Warning: (B1 + Weff) may be too small.\n"); printf("Warning: (B1 + Weff) may be too small.\n"); } /* Check Saturation parameters */ if (pParam->BSIM3v1a2 < 0.01) { fprintf(fplog, "Warning: A2 = %g is too small. Set to 0.01.\n", pParam->BSIM3v1a2); printf("Warning: A2 = %g is too small. Set to 0.01.\n", pParam->BSIM3v1a2); pParam->BSIM3v1a2 = 0.01; } else if (pParam->BSIM3v1a2 > 1.0) { fprintf(fplog, "Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->BSIM3v1a2); printf("Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->BSIM3v1a2); pParam->BSIM3v1a2 = 1.0; pParam->BSIM3v1a1 = 0.0; } if (pParam->BSIM3v1rdsw < 0.0) { fprintf(fplog, "Warning: Rdsw = %g is negative. Set to zero.\n", pParam->BSIM3v1rdsw); printf("Warning: Rdsw = %g is negative. Set to zero.\n", pParam->BSIM3v1rdsw); pParam->BSIM3v1rdsw = 0.0; pParam->BSIM3v1rds0 = 0.0; } else if ((pParam->BSIM3v1rds0 > 0.0) && (pParam->BSIM3v1rds0 < 0.001)) { fprintf(fplog, "Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n", pParam->BSIM3v1rds0); printf("Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n", pParam->BSIM3v1rds0); pParam->BSIM3v1rds0 = 0.0; } if (pParam->BSIM3v1vsattemp < 1.0e3) { fprintf(fplog, "Warning: Vsat at current temperature = %g may be too small.\n", pParam->BSIM3v1vsattemp); printf("Warning: Vsat at current temperature = %g may be too small.\n", pParam->BSIM3v1vsattemp); } if (pParam->BSIM3v1pdibl1 < 0.0) { fprintf(fplog, "Warning: Pdibl1 = %g is negative.\n", pParam->BSIM3v1pdibl1); printf("Warning: Pdibl1 = %g is negative.\n", pParam->BSIM3v1pdibl1); } if (pParam->BSIM3v1pdibl2 < 0.0) { fprintf(fplog, "Warning: Pdibl2 = %g is negative.\n", pParam->BSIM3v1pdibl2); printf("Warning: Pdibl2 = %g is negative.\n", pParam->BSIM3v1pdibl2); } /* Check overlap capacitance parameters */ if (model->BSIM3v1cgdo < 0.0) { fprintf(fplog, "Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM3v1cgdo); printf("Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM3v1cgdo); model->BSIM3v1cgdo = 0.0; } if (model->BSIM3v1cgso < 0.0) { fprintf(fplog, "Warning: cgso = %g is negative. Set to zero.\n", model->BSIM3v1cgso); printf("Warning: cgso = %g is negative. Set to zero.\n", model->BSIM3v1cgso); model->BSIM3v1cgso = 0.0; } if (model->BSIM3v1cgbo < 0.0) { fprintf(fplog, "Warning: cgbo = %g is negative. Set to zero.\n", model->BSIM3v1cgbo); printf("Warning: cgbo = %g is negative. Set to zero.\n", model->BSIM3v1cgbo); model->BSIM3v1cgbo = 0.0; } }/* loop for the parameter check for warning messages */ fclose(fplog); } else { fprintf(stderr, "Warning: Can't open log file. Parameter checking skipped.\n"); } return(Fatal_Flag); } tmpk8ny_4pz/src/spicelib/devices/bsim3v1/b3v1pzld.c0000644000175000017500000001412213546075722022260 0ustar carstencarsten/********** * Copyright 1990 Regents of the University of California. All rights reserved. * File: b3v1pzld.c * Author: 1995 Min-Chie Jeng and Mansun Chan. * Modified by Paolo Nenzi 2002 **********/ /* * Release Notes: * BSIM3v3.1, Released by yuhua 96/12/08 */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "bsim3v1def.h" #include "ngspice/suffix.h" int BSIM3v1pzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { BSIM3v1model *model = (BSIM3v1model*)inModel; BSIM3v1instance *here; double xcggb, xcgdb, xcgsb, xcbgb, xcbdb, xcbsb, xcddb, xcssb, xcdgb; double gdpr, gspr, gds, gbd, gbs, capbd, capbs, xcsgb, xcdsb, xcsdb; double cggb, cgdb, cgsb, cbgb, cbdb, cbsb, cddb, cdgb, cdsb; double GSoverlapCap, GDoverlapCap, GBoverlapCap; double FwdSum, RevSum, Gm, Gmbs; double m; NG_IGNORE(ckt); for (; model != NULL; model = BSIM3v1nextModel(model)) { for (here = BSIM3v1instances(model); here!= NULL; here = BSIM3v1nextInstance(here)) { if (here->BSIM3v1mode >= 0) { Gm = here->BSIM3v1gm; Gmbs = here->BSIM3v1gmbs; FwdSum = Gm + Gmbs; RevSum = 0.0; cggb = here->BSIM3v1cggb; cgsb = here->BSIM3v1cgsb; cgdb = here->BSIM3v1cgdb; cbgb = here->BSIM3v1cbgb; cbsb = here->BSIM3v1cbsb; cbdb = here->BSIM3v1cbdb; cdgb = here->BSIM3v1cdgb; cdsb = here->BSIM3v1cdsb; cddb = here->BSIM3v1cddb; } else { Gm = -here->BSIM3v1gm; Gmbs = -here->BSIM3v1gmbs; FwdSum = 0.0; RevSum = -Gm - Gmbs; cggb = here->BSIM3v1cggb; cgsb = here->BSIM3v1cgdb; cgdb = here->BSIM3v1cgsb; cbgb = here->BSIM3v1cbgb; cbsb = here->BSIM3v1cbdb; cbdb = here->BSIM3v1cbsb; cdgb = -(here->BSIM3v1cdgb + cggb + cbgb); cdsb = -(here->BSIM3v1cddb + cgsb + cbsb); cddb = -(here->BSIM3v1cdsb + cgdb + cbdb); } gdpr=here->BSIM3v1drainConductance; gspr=here->BSIM3v1sourceConductance; gds= here->BSIM3v1gds; gbd= here->BSIM3v1gbd; gbs= here->BSIM3v1gbs; capbd= here->BSIM3v1capbd; capbs= here->BSIM3v1capbs; GSoverlapCap = here->BSIM3v1cgso; GDoverlapCap = here->BSIM3v1cgdo; GBoverlapCap = here->pParam->BSIM3v1cgbo; xcdgb = (cdgb - GDoverlapCap); xcddb = (cddb + capbd + GDoverlapCap); xcdsb = cdsb; xcsgb = -(cggb + cbgb + cdgb + GSoverlapCap); xcsdb = -(cgdb + cbdb + cddb); xcssb = (capbs + GSoverlapCap - (cgsb+cbsb+cdsb)); xcggb = (cggb + GDoverlapCap + GSoverlapCap + GBoverlapCap); xcgdb = (cgdb - GDoverlapCap); xcgsb = (cgsb - GSoverlapCap); xcbgb = (cbgb - GBoverlapCap); xcbdb = (cbdb - capbd); xcbsb = (cbsb - capbs); m = here->BSIM3v1m; *(here->BSIM3v1GgPtr ) += m * (xcggb * s->real); *(here->BSIM3v1GgPtr +1) += m * (xcggb * s->imag); *(here->BSIM3v1BbPtr ) += m * ((-xcbgb-xcbdb-xcbsb) * s->real); *(here->BSIM3v1BbPtr +1) += m * ((-xcbgb-xcbdb-xcbsb) * s->imag); *(here->BSIM3v1DPdpPtr ) += m * (xcddb * s->real); *(here->BSIM3v1DPdpPtr +1) += xcddb * s->imag; *(here->BSIM3v1SPspPtr ) += m * (xcssb * s->real); *(here->BSIM3v1SPspPtr +1) += m * (xcssb * s->imag); *(here->BSIM3v1GbPtr ) += m * ((-xcggb-xcgdb-xcgsb) * s->real); *(here->BSIM3v1GbPtr +1) += m * ((-xcggb-xcgdb-xcgsb) * s->imag); *(here->BSIM3v1GdpPtr ) += m * (xcgdb * s->real); *(here->BSIM3v1GdpPtr +1) += m * (xcgdb * s->imag); *(here->BSIM3v1GspPtr ) += m * (xcgsb * s->real); *(here->BSIM3v1GspPtr +1) += m * (xcgsb * s->imag); *(here->BSIM3v1BgPtr ) += m * (xcbgb * s->real); *(here->BSIM3v1BgPtr +1) += m * (xcbgb * s->imag); *(here->BSIM3v1BdpPtr ) += m * (xcbdb * s->real); *(here->BSIM3v1BdpPtr +1) += m * (xcbdb * s->imag); *(here->BSIM3v1BspPtr ) += m * (xcbsb * s->real); *(here->BSIM3v1BspPtr +1) += m * (xcbsb * s->imag); *(here->BSIM3v1DPgPtr ) += m * (xcdgb * s->real); *(here->BSIM3v1DPgPtr +1) += m * (xcdgb * s->imag); *(here->BSIM3v1DPbPtr ) += m * ((-xcdgb-xcddb-xcdsb) * s->real); *(here->BSIM3v1DPbPtr +1) += m * ((-xcdgb-xcddb-xcdsb) * s->imag); *(here->BSIM3v1DPspPtr ) += m * (xcdsb * s->real); *(here->BSIM3v1DPspPtr +1) += m * (xcdsb * s->imag); *(here->BSIM3v1SPgPtr ) += m * (xcsgb * s->real); *(here->BSIM3v1SPgPtr +1) += m * (xcsgb * s->imag); *(here->BSIM3v1SPbPtr ) += m * ((-xcsgb-xcsdb-xcssb) * s->real); *(here->BSIM3v1SPbPtr +1) += m * ((-xcsgb-xcsdb-xcssb) * s->imag); *(here->BSIM3v1SPdpPtr ) += m * (xcsdb * s->real); *(here->BSIM3v1SPdpPtr +1) += m * (xcsdb * s->imag); *(here->BSIM3v1DdPtr) += m * gdpr; *(here->BSIM3v1SsPtr) += m * gspr; *(here->BSIM3v1BbPtr) += m * (gbd + gbs); *(here->BSIM3v1DPdpPtr) += m * (gdpr + gds + gbd + RevSum); *(here->BSIM3v1SPspPtr) += m * (gspr + gds + gbs + FwdSum); *(here->BSIM3v1DdpPtr) -= m * gdpr; *(here->BSIM3v1SspPtr) -= m * gspr; *(here->BSIM3v1BdpPtr) -= m * gbd; *(here->BSIM3v1BspPtr) -= m * gbs; *(here->BSIM3v1DPdPtr) -= m * gdpr; *(here->BSIM3v1DPgPtr) += m * Gm; *(here->BSIM3v1DPbPtr) -= m * (gbd - Gmbs); *(here->BSIM3v1DPspPtr) -= m * (gds + FwdSum); *(here->BSIM3v1SPgPtr) -= m * Gm; *(here->BSIM3v1SPsPtr) -= m * gspr; *(here->BSIM3v1SPbPtr) -= m * (gbs + Gmbs); *(here->BSIM3v1SPdpPtr) -= m * (gds + RevSum); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v1/b3v1.c0000644000175000017500000007151613546075722021400 0ustar carstencarsten/********** * Copyright 1990 Regents of the University of California. All rights reserved. * File: b3.c * Author: 1995 Min-Chie Jeng and Mansun Chan. * Modified by Paolo Nenzi 2002 **********/ /* * Release Notes: * BSIM3v1v3.1, Released by yuhua 96/12/08 */ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "bsim3v1def.h" #include "ngspice/suffix.h" IFparm BSIM3v1pTable[] = { /* parameters */ IOP( "l", BSIM3v1_L, IF_REAL , "Length"), IOP( "w", BSIM3v1_W, IF_REAL , "Width"), IOP( "m", BSIM3v1_M, IF_REAL , "Parallel multiplier"), IOP( "ad", BSIM3v1_AD, IF_REAL , "Drain area"), IOP( "as", BSIM3v1_AS, IF_REAL , "Source area"), IOP( "pd", BSIM3v1_PD, IF_REAL , "Drain perimeter"), IOP( "ps", BSIM3v1_PS, IF_REAL , "Source perimeter"), IOP( "nrd", BSIM3v1_NRD, IF_REAL , "Number of squares in drain"), IOP( "nrs", BSIM3v1_NRS, IF_REAL , "Number of squares in source"), IOP( "off", BSIM3v1_OFF, IF_FLAG , "Device is initially off"), IOP( "nqsmod", BSIM3v1_NQSMOD, IF_INTEGER, "Non-quasi-static model selector"), IP( "ic", BSIM3v1_IC, IF_REALVEC , "Vector of DS,GS,BS initial voltages"), OP( "gmbs", BSIM3v1_GMBS, IF_REAL, "Gmb"), OP( "gm", BSIM3v1_GM, IF_REAL, "Gm"), OP( "gds", BSIM3v1_GDS, IF_REAL, "Gds"), OP( "vdsat", BSIM3v1_VDSAT, IF_REAL, "Vdsat"), OP( "vth", BSIM3v1_VON, IF_REAL, "Vth"), OP( "id", BSIM3v1_CD, IF_REAL, "Ids"), OP( "vbs", BSIM3v1_VBS, IF_REAL, "Vbs"), OP( "vgs", BSIM3v1_VGS, IF_REAL, "Vgs"), OP( "vds", BSIM3v1_VDS, IF_REAL, "Vds"), }; IFparm BSIM3v1mPTable[] = { /* model parameters */ IOP( "capmod", BSIM3v1_MOD_CAPMOD, IF_INTEGER, "Capacitance model selector"), IOP( "nqsmod", BSIM3v1_MOD_NQSMOD, IF_INTEGER, "Non-quasi-static model selector"), IOP( "mobmod", BSIM3v1_MOD_MOBMOD, IF_INTEGER, "Mobility model selector"), IOP( "noimod", BSIM3v1_MOD_NOIMOD, IF_INTEGER, "Noise model selector"), IOP( "paramchk", BSIM3v1_MOD_PARAMCHK, IF_INTEGER, "Model parameter checking selector"), IOP( "binunit", BSIM3v1_MOD_BINUNIT, IF_INTEGER, "Bin unit selector"), IOP( "version", BSIM3v1_MOD_VERSION, IF_REAL, " parameter for model version"), IOP( "tox", BSIM3v1_MOD_TOX, IF_REAL, "Gate oxide thickness in meters"), IOP( "cdsc", BSIM3v1_MOD_CDSC, IF_REAL, "Drain/Source and channel coupling capacitance"), IOP( "cdscb", BSIM3v1_MOD_CDSCB, IF_REAL, "Body-bias dependence of cdsc"), IOP( "cdscd", BSIM3v1_MOD_CDSCD, IF_REAL, "Drain-bias dependence of cdsc"), IOP( "cit", BSIM3v1_MOD_CIT, IF_REAL, "Interface state capacitance"), IOP( "nfactor", BSIM3v1_MOD_NFACTOR, IF_REAL, "Subthreshold swing Coefficient"), IOP( "xj", BSIM3v1_MOD_XJ, IF_REAL, "Junction depth in meters"), IOP( "vsat", BSIM3v1_MOD_VSAT, IF_REAL, "Saturation velocity at tnom"), IOP( "at", BSIM3v1_MOD_AT, IF_REAL, "Temperature coefficient of vsat"), IOP( "a0", BSIM3v1_MOD_A0, IF_REAL, "Non-uniform depletion width effect coefficient."), IOP( "ags", BSIM3v1_MOD_AGS, IF_REAL, "Gate bias coefficient of Abulk."), IOP( "a1", BSIM3v1_MOD_A1, IF_REAL, "Non-saturation effect coefficient"), IOP( "a2", BSIM3v1_MOD_A2, IF_REAL, "Non-saturation effect coefficient"), IOP( "keta", BSIM3v1_MOD_KETA, IF_REAL, "Body-bias coefficient of non-uniform depletion width effect."), IOP( "nsub", BSIM3v1_MOD_NSUB, IF_REAL, "Substrate doping concentration"), IOP( "nch", BSIM3v1_MOD_NPEAK, IF_REAL, "Channel doping concentration"), IOP( "ngate", BSIM3v1_MOD_NGATE, IF_REAL, "Poly-gate doping concentration"), IOP( "gamma1", BSIM3v1_MOD_GAMMA1, IF_REAL, "Vth body coefficient"), IOP( "gamma2", BSIM3v1_MOD_GAMMA2, IF_REAL, "Vth body coefficient"), IOP( "vbx", BSIM3v1_MOD_VBX, IF_REAL, "Vth transition body Voltage"), IOP( "vbm", BSIM3v1_MOD_VBM, IF_REAL, "Maximum body voltage"), IOP( "xt", BSIM3v1_MOD_XT, IF_REAL, "Doping depth"), IOP( "k1", BSIM3v1_MOD_K1, IF_REAL, "Bulk effect coefficient 1"), IOP( "kt1", BSIM3v1_MOD_KT1, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt1l", BSIM3v1_MOD_KT1L, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt2", BSIM3v1_MOD_KT2, IF_REAL, "Body-coefficient of kt1"), IOP( "k2", BSIM3v1_MOD_K2, IF_REAL, "Bulk effect coefficient 2"), IOP( "k3", BSIM3v1_MOD_K3, IF_REAL, "Narrow width effect coefficient"), IOP( "k3b", BSIM3v1_MOD_K3B, IF_REAL, "Body effect coefficient of k3"), IOP( "w0", BSIM3v1_MOD_W0, IF_REAL, "Narrow width effect parameter"), IOP( "nlx", BSIM3v1_MOD_NLX, IF_REAL, "Lateral non-uniform doping effect"), IOP( "dvt0", BSIM3v1_MOD_DVT0, IF_REAL, "Short channel effect coeff. 0"), IOP( "dvt1", BSIM3v1_MOD_DVT1, IF_REAL, "Short channel effect coeff. 1"), IOP( "dvt2", BSIM3v1_MOD_DVT2, IF_REAL, "Short channel effect coeff. 2"), IOP( "dvt0w", BSIM3v1_MOD_DVT0W, IF_REAL, "Narrow Width coeff. 0"), IOP( "dvt1w", BSIM3v1_MOD_DVT1W, IF_REAL, "Narrow Width effect coeff. 1"), IOP( "dvt2w", BSIM3v1_MOD_DVT2W, IF_REAL, "Narrow Width effect coeff. 2"), IOP( "drout", BSIM3v1_MOD_DROUT, IF_REAL, "DIBL coefficient of output resistance"), IOP( "dsub", BSIM3v1_MOD_DSUB, IF_REAL, "DIBL coefficient in the subthreshold region"), IOP( "vth0", BSIM3v1_MOD_VTH0, IF_REAL,"Threshold voltage"), IOPR("vtho", BSIM3v1_MOD_VTH0, IF_REAL,"Threshold voltage"), IOP( "ua", BSIM3v1_MOD_UA, IF_REAL, "Linear gate dependence of mobility"), IOP( "ua1", BSIM3v1_MOD_UA1, IF_REAL, "Temperature coefficient of ua"), IOP( "ub", BSIM3v1_MOD_UB, IF_REAL, "Quadratic gate dependence of mobility"), IOP( "ub1", BSIM3v1_MOD_UB1, IF_REAL, "Temperature coefficient of ub"), IOP( "uc", BSIM3v1_MOD_UC, IF_REAL, "Body-bias dependence of mobility"), IOP( "uc1", BSIM3v1_MOD_UC1, IF_REAL, "Temperature coefficient of uc"), IOP( "u0", BSIM3v1_MOD_U0, IF_REAL, "Low-field mobility at Tnom"), IOP( "ute", BSIM3v1_MOD_UTE, IF_REAL, "Temperature coefficient of mobility"), IOP( "voff", BSIM3v1_MOD_VOFF, IF_REAL, "Threshold voltage offset"), IOP( "tnom", BSIM3v1_MOD_TNOM, IF_REAL, "Parameter measurement temperature"), IOP( "cgso", BSIM3v1_MOD_CGSO, IF_REAL, "Gate-source overlap capacitance per width"), IOP( "cgdo", BSIM3v1_MOD_CGDO, IF_REAL, "Gate-drain overlap capacitance per width"), IOP( "cgbo", BSIM3v1_MOD_CGBO, IF_REAL, "Gate-bulk overlap capacitance per length"), IOP( "xpart", BSIM3v1_MOD_XPART, IF_REAL, "Channel charge partitioning"), IOP( "elm", BSIM3v1_MOD_ELM, IF_REAL, "Non-quasi-static Elmore Constant Parameter"), IOP( "delta", BSIM3v1_MOD_DELTA, IF_REAL, "Effective Vds parameter"), IOP( "rsh", BSIM3v1_MOD_RSH, IF_REAL, "Source-drain sheet resistance"), IOP( "rdsw", BSIM3v1_MOD_RDSW, IF_REAL, "Source-drain resistance per width"), IOP( "prwg", BSIM3v1_MOD_PRWG, IF_REAL, "Gate-bias effect on parasitic resistance "), IOP( "prwb", BSIM3v1_MOD_PRWB, IF_REAL, "Body-effect on parasitic resistance "), IOP( "prt", BSIM3v1_MOD_PRT, IF_REAL, "Temperature coefficient of parasitic resistance "), IOP( "eta0", BSIM3v1_MOD_ETA0, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "etab", BSIM3v1_MOD_ETAB, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "pclm", BSIM3v1_MOD_PCLM, IF_REAL, "Channel length modulation Coefficient"), IOP( "pdiblc1", BSIM3v1_MOD_PDIBL1, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblc2", BSIM3v1_MOD_PDIBL2, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblcb", BSIM3v1_MOD_PDIBLB, IF_REAL, "Body-effect on drain-induced barrier lowering"), IOP( "pscbe1", BSIM3v1_MOD_PSCBE1, IF_REAL, "Substrate current body-effect coefficient"), IOP( "pscbe2", BSIM3v1_MOD_PSCBE2, IF_REAL, "Substrate current body-effect coefficient"), IOP( "pvag", BSIM3v1_MOD_PVAG, IF_REAL, "Gate dependence of output resistance parameter"), IOP( "js", BSIM3v1_MOD_JS, IF_REAL, "Source/drain junction reverse saturation current density"), IOP( "jsw", BSIM3v1_MOD_JSW, IF_REAL, "Sidewall junction reverse saturation current density"), IOP( "pb", BSIM3v1_MOD_PB, IF_REAL, "Source/drain junction built-in potential"), IOP( "nj", BSIM3v1_MOD_NJ, IF_REAL, "Source/drain junction emission coefficient"), IOP( "xti", BSIM3v1_MOD_XTI, IF_REAL, "Junction current temperature exponent"), IOP( "mj", BSIM3v1_MOD_MJ, IF_REAL, "Source/drain bottom junction capacitance grading coefficient"), IOP( "pbsw", BSIM3v1_MOD_PBSW, IF_REAL, "Source/drain sidewall junction capacitance built in potential"), IOP( "mjsw", BSIM3v1_MOD_MJSW, IF_REAL, "Source/drain sidewall junction capacitance grading coefficient"), IOP( "pbswg", BSIM3v1_MOD_PBSWG, IF_REAL, "Source/drain (gate side) sidewall junction capacitance built in potential"), IOP( "mjswg", BSIM3v1_MOD_MJSWG, IF_REAL, "Source/drain (gate side) sidewall junction capacitance grading coefficient"), IOP( "cj", BSIM3v1_MOD_CJ, IF_REAL, "Source/drain bottom junction capacitance per unit area"), IOP( "vfbcv", BSIM3v1_MOD_VFBCV, IF_REAL, "Flat Band Voltage parameter for capmod=0 only"), IOP( "cjsw", BSIM3v1_MOD_CJSW, IF_REAL, "Source/drain sidewall junction capacitance per unit periphery"), IOP( "cjswg", BSIM3v1_MOD_CJSWG, IF_REAL, "Source/drain (gate side) sidewall junction capacitance per unit width"), IOP( "lint", BSIM3v1_MOD_LINT, IF_REAL, "Length reduction parameter"), IOP( "ll", BSIM3v1_MOD_LL, IF_REAL, "Length reduction parameter"), IOP( "lln", BSIM3v1_MOD_LLN, IF_REAL, "Length reduction parameter"), IOP( "lw", BSIM3v1_MOD_LW, IF_REAL, "Length reduction parameter"), IOP( "lwn", BSIM3v1_MOD_LWN, IF_REAL, "Length reduction parameter"), IOP( "lwl", BSIM3v1_MOD_LWL, IF_REAL, "Length reduction parameter"), IOP( "lmin", BSIM3v1_MOD_LMIN, IF_REAL, "Minimum length for the model"), IOP( "lmax", BSIM3v1_MOD_LMAX, IF_REAL, "Maximum length for the model"), IOP( "wr", BSIM3v1_MOD_WR, IF_REAL, "Width dependence of rds"), IOP( "wint", BSIM3v1_MOD_WINT, IF_REAL, "Width reduction parameter"), IOP( "dwg", BSIM3v1_MOD_DWG, IF_REAL, "Width reduction parameter"), IOP( "dwb", BSIM3v1_MOD_DWB, IF_REAL, "Width reduction parameter"), IOP( "wl", BSIM3v1_MOD_WL, IF_REAL, "Width reduction parameter"), IOP( "wln", BSIM3v1_MOD_WLN, IF_REAL, "Width reduction parameter"), IOP( "ww", BSIM3v1_MOD_WW, IF_REAL, "Width reduction parameter"), IOP( "wwn", BSIM3v1_MOD_WWN, IF_REAL, "Width reduction parameter"), IOP( "wwl", BSIM3v1_MOD_WWL, IF_REAL, "Width reduction parameter"), IOP( "wmin", BSIM3v1_MOD_WMIN, IF_REAL, "Minimum width for the model"), IOP( "wmax", BSIM3v1_MOD_WMAX, IF_REAL, "Maximum width for the model"), IOP( "b0", BSIM3v1_MOD_B0, IF_REAL, "Abulk narrow width parameter"), IOP( "b1", BSIM3v1_MOD_B1, IF_REAL, "Abulk narrow width parameter"), IOP( "cgsl", BSIM3v1_MOD_CGSL, IF_REAL, "New C-V model parameter"), IOP( "cgdl", BSIM3v1_MOD_CGDL, IF_REAL, "New C-V model parameter"), IOP( "ckappa", BSIM3v1_MOD_CKAPPA, IF_REAL, "New C-V model parameter"), IOP( "cf", BSIM3v1_MOD_CF, IF_REAL, "Fringe capacitance parameter"), IOP( "clc", BSIM3v1_MOD_CLC, IF_REAL, "Vdsat parameter for C-V model"), IOP( "cle", BSIM3v1_MOD_CLE, IF_REAL, "Vdsat parameter for C-V model"), IOP( "dwc", BSIM3v1_MOD_DWC, IF_REAL, "Delta W for C-V model"), IOP( "dlc", BSIM3v1_MOD_DLC, IF_REAL, "Delta L for C-V model"), IOP( "alpha0", BSIM3v1_MOD_ALPHA0, IF_REAL, "substrate current model parameter"), IOP( "beta0", BSIM3v1_MOD_BETA0, IF_REAL, "substrate current model parameter"), IOP( "lcdsc", BSIM3v1_MOD_LCDSC, IF_REAL, "Length dependence of cdsc"), IOP( "lcdscb", BSIM3v1_MOD_LCDSCB, IF_REAL, "Length dependence of cdscb"), IOP( "lcdscd", BSIM3v1_MOD_LCDSCD, IF_REAL, "Length dependence of cdscd"), IOP( "lcit", BSIM3v1_MOD_LCIT, IF_REAL, "Length dependence of cit"), IOP( "lnfactor", BSIM3v1_MOD_LNFACTOR, IF_REAL, "Length dependence of nfactor"), IOP( "lxj", BSIM3v1_MOD_LXJ, IF_REAL, "Length dependence of xj"), IOP( "lvsat", BSIM3v1_MOD_LVSAT, IF_REAL, "Length dependence of vsat"), IOP( "lat", BSIM3v1_MOD_LAT, IF_REAL, "Length dependence of at"), IOP( "la0", BSIM3v1_MOD_LA0, IF_REAL, "Length dependence of a0"), IOP( "lags", BSIM3v1_MOD_LAGS, IF_REAL, "Length dependence of ags"), IOP( "la1", BSIM3v1_MOD_LA1, IF_REAL, "Length dependence of a1"), IOP( "la2", BSIM3v1_MOD_LA2, IF_REAL, "Length dependence of a2"), IOP( "lketa", BSIM3v1_MOD_LKETA, IF_REAL, "Length dependence of keta"), IOP( "lnsub", BSIM3v1_MOD_LNSUB, IF_REAL, "Length dependence of nsub"), IOP( "lnch", BSIM3v1_MOD_LNPEAK, IF_REAL, "Length dependence of nch"), IOP( "lngate", BSIM3v1_MOD_LNGATE, IF_REAL, "Length dependence of ngate"), IOP( "lgamma1", BSIM3v1_MOD_LGAMMA1, IF_REAL, "Length dependence of gamma1"), IOP( "lgamma2", BSIM3v1_MOD_LGAMMA2, IF_REAL, "Length dependence of gamma2"), IOP( "lvbx", BSIM3v1_MOD_LVBX, IF_REAL, "Length dependence of vbx"), IOP( "lvbm", BSIM3v1_MOD_LVBM, IF_REAL, "Length dependence of vbm"), IOP( "lxt", BSIM3v1_MOD_LXT, IF_REAL, "Length dependence of xt"), IOP( "lk1", BSIM3v1_MOD_LK1, IF_REAL, "Length dependence of k1"), IOP( "lkt1", BSIM3v1_MOD_LKT1, IF_REAL, "Length dependence of kt1"), IOP( "lkt1l", BSIM3v1_MOD_LKT1L, IF_REAL, "Length dependence of kt1l"), IOP( "lkt2", BSIM3v1_MOD_LKT2, IF_REAL, "Length dependence of kt2"), IOP( "lk2", BSIM3v1_MOD_LK2, IF_REAL, "Length dependence of k2"), IOP( "lk3", BSIM3v1_MOD_LK3, IF_REAL, "Length dependence of k3"), IOP( "lk3b", BSIM3v1_MOD_LK3B, IF_REAL, "Length dependence of k3b"), IOP( "lw0", BSIM3v1_MOD_LW0, IF_REAL, "Length dependence of w0"), IOP( "lnlx", BSIM3v1_MOD_LNLX, IF_REAL, "Length dependence of nlx"), IOP( "ldvt0", BSIM3v1_MOD_LDVT0, IF_REAL, "Length dependence of dvt0"), IOP( "ldvt1", BSIM3v1_MOD_LDVT1, IF_REAL, "Length dependence of dvt1"), IOP( "ldvt2", BSIM3v1_MOD_LDVT2, IF_REAL, "Length dependence of dvt2"), IOP( "ldvt0w", BSIM3v1_MOD_LDVT0W, IF_REAL, "Length dependence of dvt0w"), IOP( "ldvt1w", BSIM3v1_MOD_LDVT1W, IF_REAL, "Length dependence of dvt1w"), IOP( "ldvt2w", BSIM3v1_MOD_LDVT2W, IF_REAL, "Length dependence of dvt2w"), IOP( "ldrout", BSIM3v1_MOD_LDROUT, IF_REAL, "Length dependence of drout"), IOP( "ldsub", BSIM3v1_MOD_LDSUB, IF_REAL, "Length dependence of dsub"), IOP( "lvth0", BSIM3v1_MOD_LVTH0, IF_REAL,"Length dependence of vth0"), IOPR("lvtho", BSIM3v1_MOD_LVTH0, IF_REAL,"Length dependence of vtho"), IOP( "lua", BSIM3v1_MOD_LUA, IF_REAL, "Length dependence of ua"), IOP( "lua1", BSIM3v1_MOD_LUA1, IF_REAL, "Length dependence of ua1"), IOP( "lub", BSIM3v1_MOD_LUB, IF_REAL, "Length dependence of ub"), IOP( "lub1", BSIM3v1_MOD_LUB1, IF_REAL, "Length dependence of ub1"), IOP( "luc", BSIM3v1_MOD_LUC, IF_REAL, "Length dependence of uc"), IOP( "luc1", BSIM3v1_MOD_LUC1, IF_REAL, "Length dependence of uc1"), IOP( "lu0", BSIM3v1_MOD_LU0, IF_REAL, "Length dependence of u0"), IOP( "lute", BSIM3v1_MOD_LUTE, IF_REAL, "Length dependence of ute"), IOP( "lvoff", BSIM3v1_MOD_LVOFF, IF_REAL, "Length dependence of voff"), IOP( "lelm", BSIM3v1_MOD_LELM, IF_REAL, "Length dependence of elm"), IOP( "ldelta", BSIM3v1_MOD_LDELTA, IF_REAL, "Length dependence of delta"), IOP( "lrdsw", BSIM3v1_MOD_LRDSW, IF_REAL, "Length dependence of rdsw "), IOP( "lprwg", BSIM3v1_MOD_LPRWG, IF_REAL, "Length dependence of prwg "), IOP( "lprwb", BSIM3v1_MOD_LPRWB, IF_REAL, "Length dependence of prwb "), IOP( "lprt", BSIM3v1_MOD_LPRT, IF_REAL, "Length dependence of prt "), IOP( "leta0", BSIM3v1_MOD_LETA0, IF_REAL, "Length dependence of eta0"), IOP( "letab", BSIM3v1_MOD_LETAB, IF_REAL, "Length dependence of etab"), IOP( "lpclm", BSIM3v1_MOD_LPCLM, IF_REAL, "Length dependence of pclm"), IOP( "lpdiblc1", BSIM3v1_MOD_LPDIBL1, IF_REAL, "Length dependence of pdiblc1"), IOP( "lpdiblc2", BSIM3v1_MOD_LPDIBL2, IF_REAL, "Length dependence of pdiblc2"), IOP( "lpdiblcb", BSIM3v1_MOD_LPDIBLB, IF_REAL, "Length dependence of pdiblcb"), IOP( "lpscbe1", BSIM3v1_MOD_LPSCBE1, IF_REAL, "Length dependence of pscbe1"), IOP( "lpscbe2", BSIM3v1_MOD_LPSCBE2, IF_REAL, "Length dependence of pscbe2"), IOP( "lpvag", BSIM3v1_MOD_LPVAG, IF_REAL, "Length dependence of pvag"), IOP( "lwr", BSIM3v1_MOD_LWR, IF_REAL, "Length dependence of wr"), IOP( "ldwg", BSIM3v1_MOD_LDWG, IF_REAL, "Length dependence of dwg"), IOP( "ldwb", BSIM3v1_MOD_LDWB, IF_REAL, "Length dependence of dwb"), IOP( "lb0", BSIM3v1_MOD_LB0, IF_REAL, "Length dependence of b0"), IOP( "lb1", BSIM3v1_MOD_LB1, IF_REAL, "Length dependence of b1"), IOP( "lcgsl", BSIM3v1_MOD_LCGSL, IF_REAL, "Length dependence of cgsl"), IOP( "lcgdl", BSIM3v1_MOD_LCGDL, IF_REAL, "Length dependence of cgdl"), IOP( "lckappa", BSIM3v1_MOD_LCKAPPA, IF_REAL, "Length dependence of ckappa"), IOP( "lcf", BSIM3v1_MOD_LCF, IF_REAL, "Length dependence of cf"), IOP( "lclc", BSIM3v1_MOD_LCLC, IF_REAL, "Length dependence of clc"), IOP( "lcle", BSIM3v1_MOD_LCLE, IF_REAL, "Length dependence of cle"), IOP( "lalpha0", BSIM3v1_MOD_LALPHA0, IF_REAL, "Length dependence of alpha0"), IOP( "lbeta0", BSIM3v1_MOD_LBETA0, IF_REAL, "Length dependence of beta0"), IOP( "lvfbcv", BSIM3v1_MOD_LVFBCV, IF_REAL, "Length dependence of vfbcv"), IOP( "wcdsc", BSIM3v1_MOD_WCDSC, IF_REAL, "Width dependence of cdsc"), IOP( "wcdscb", BSIM3v1_MOD_WCDSCB, IF_REAL, "Width dependence of cdscb"), IOP( "wcdscd", BSIM3v1_MOD_WCDSCD, IF_REAL, "Width dependence of cdscd"), IOP( "wcit", BSIM3v1_MOD_WCIT, IF_REAL, "Width dependence of cit"), IOP( "wnfactor", BSIM3v1_MOD_WNFACTOR, IF_REAL, "Width dependence of nfactor"), IOP( "wxj", BSIM3v1_MOD_WXJ, IF_REAL, "Width dependence of xj"), IOP( "wvsat", BSIM3v1_MOD_WVSAT, IF_REAL, "Width dependence of vsat"), IOP( "wat", BSIM3v1_MOD_WAT, IF_REAL, "Width dependence of at"), IOP( "wa0", BSIM3v1_MOD_WA0, IF_REAL, "Width dependence of a0"), IOP( "wags", BSIM3v1_MOD_WAGS, IF_REAL, "Width dependence of ags"), IOP( "wa1", BSIM3v1_MOD_WA1, IF_REAL, "Width dependence of a1"), IOP( "wa2", BSIM3v1_MOD_WA2, IF_REAL, "Width dependence of a2"), IOP( "wketa", BSIM3v1_MOD_WKETA, IF_REAL, "Width dependence of keta"), IOP( "wnsub", BSIM3v1_MOD_WNSUB, IF_REAL, "Width dependence of nsub"), IOP( "wnch", BSIM3v1_MOD_WNPEAK, IF_REAL, "Width dependence of nch"), IOP( "wngate", BSIM3v1_MOD_WNGATE, IF_REAL, "Width dependence of ngate"), IOP( "wgamma1", BSIM3v1_MOD_WGAMMA1, IF_REAL, "Width dependence of gamma1"), IOP( "wgamma2", BSIM3v1_MOD_WGAMMA2, IF_REAL, "Width dependence of gamma2"), IOP( "wvbx", BSIM3v1_MOD_WVBX, IF_REAL, "Width dependence of vbx"), IOP( "wvbm", BSIM3v1_MOD_WVBM, IF_REAL, "Width dependence of vbm"), IOP( "wxt", BSIM3v1_MOD_WXT, IF_REAL, "Width dependence of xt"), IOP( "wk1", BSIM3v1_MOD_WK1, IF_REAL, "Width dependence of k1"), IOP( "wkt1", BSIM3v1_MOD_WKT1, IF_REAL, "Width dependence of kt1"), IOP( "wkt1l", BSIM3v1_MOD_WKT1L, IF_REAL, "Width dependence of kt1l"), IOP( "wkt2", BSIM3v1_MOD_WKT2, IF_REAL, "Width dependence of kt2"), IOP( "wk2", BSIM3v1_MOD_WK2, IF_REAL, "Width dependence of k2"), IOP( "wk3", BSIM3v1_MOD_WK3, IF_REAL, "Width dependence of k3"), IOP( "wk3b", BSIM3v1_MOD_WK3B, IF_REAL, "Width dependence of k3b"), IOP( "ww0", BSIM3v1_MOD_WW0, IF_REAL, "Width dependence of w0"), IOP( "wnlx", BSIM3v1_MOD_WNLX, IF_REAL, "Width dependence of nlx"), IOP( "wdvt0", BSIM3v1_MOD_WDVT0, IF_REAL, "Width dependence of dvt0"), IOP( "wdvt1", BSIM3v1_MOD_WDVT1, IF_REAL, "Width dependence of dvt1"), IOP( "wdvt2", BSIM3v1_MOD_WDVT2, IF_REAL, "Width dependence of dvt2"), IOP( "wdvt0w", BSIM3v1_MOD_WDVT0W, IF_REAL, "Width dependence of dvt0w"), IOP( "wdvt1w", BSIM3v1_MOD_WDVT1W, IF_REAL, "Width dependence of dvt1w"), IOP( "wdvt2w", BSIM3v1_MOD_WDVT2W, IF_REAL, "Width dependence of dvt2w"), IOP( "wdrout", BSIM3v1_MOD_WDROUT, IF_REAL, "Width dependence of drout"), IOP( "wdsub", BSIM3v1_MOD_WDSUB, IF_REAL, "Width dependence of dsub"), IOP( "wvth0", BSIM3v1_MOD_WVTH0, IF_REAL,"Width dependence of vth0"), IOPR("wvtho", BSIM3v1_MOD_WVTH0, IF_REAL,"Width dependence of vtho"), IOP( "wua", BSIM3v1_MOD_WUA, IF_REAL, "Width dependence of ua"), IOP( "wua1", BSIM3v1_MOD_WUA1, IF_REAL, "Width dependence of ua1"), IOP( "wub", BSIM3v1_MOD_WUB, IF_REAL, "Width dependence of ub"), IOP( "wub1", BSIM3v1_MOD_WUB1, IF_REAL, "Width dependence of ub1"), IOP( "wuc", BSIM3v1_MOD_WUC, IF_REAL, "Width dependence of uc"), IOP( "wuc1", BSIM3v1_MOD_WUC1, IF_REAL, "Width dependence of uc1"), IOP( "wu0", BSIM3v1_MOD_WU0, IF_REAL, "Width dependence of u0"), IOP( "wute", BSIM3v1_MOD_WUTE, IF_REAL, "Width dependence of ute"), IOP( "wvoff", BSIM3v1_MOD_WVOFF, IF_REAL, "Width dependence of voff"), IOP( "welm", BSIM3v1_MOD_WELM, IF_REAL, "Width dependence of elm"), IOP( "wdelta", BSIM3v1_MOD_WDELTA, IF_REAL, "Width dependence of delta"), IOP( "wrdsw", BSIM3v1_MOD_WRDSW, IF_REAL, "Width dependence of rdsw "), IOP( "wprwg", BSIM3v1_MOD_WPRWG, IF_REAL, "Width dependence of prwg "), IOP( "wprwb", BSIM3v1_MOD_WPRWB, IF_REAL, "Width dependence of prwb "), IOP( "wprt", BSIM3v1_MOD_WPRT, IF_REAL, "Width dependence of prt"), IOP( "weta0", BSIM3v1_MOD_WETA0, IF_REAL, "Width dependence of eta0"), IOP( "wetab", BSIM3v1_MOD_WETAB, IF_REAL, "Width dependence of etab"), IOP( "wpclm", BSIM3v1_MOD_WPCLM, IF_REAL, "Width dependence of pclm"), IOP( "wpdiblc1", BSIM3v1_MOD_WPDIBL1, IF_REAL, "Width dependence of pdiblc1"), IOP( "wpdiblc2", BSIM3v1_MOD_WPDIBL2, IF_REAL, "Width dependence of pdiblc2"), IOP( "wpdiblcb", BSIM3v1_MOD_WPDIBLB, IF_REAL, "Width dependence of pdiblcb"), IOP( "wpscbe1", BSIM3v1_MOD_WPSCBE1, IF_REAL, "Width dependence of pscbe1"), IOP( "wpscbe2", BSIM3v1_MOD_WPSCBE2, IF_REAL, "Width dependence of pscbe2"), IOP( "wpvag", BSIM3v1_MOD_WPVAG, IF_REAL, "Width dependence of pvag"), IOP( "wwr", BSIM3v1_MOD_WWR, IF_REAL, "Width dependence of wr"), IOP( "wdwg", BSIM3v1_MOD_WDWG, IF_REAL, "Width dependence of dwg"), IOP( "wdwb", BSIM3v1_MOD_WDWB, IF_REAL, "Width dependence of dwb"), IOP( "wb0", BSIM3v1_MOD_WB0, IF_REAL, "Width dependence of b0"), IOP( "wb1", BSIM3v1_MOD_WB1, IF_REAL, "Width dependence of b1"), IOP( "wcgsl", BSIM3v1_MOD_WCGSL, IF_REAL, "Width dependence of cgsl"), IOP( "wcgdl", BSIM3v1_MOD_WCGDL, IF_REAL, "Width dependence of cgdl"), IOP( "wckappa", BSIM3v1_MOD_WCKAPPA, IF_REAL, "Width dependence of ckappa"), IOP( "wcf", BSIM3v1_MOD_WCF, IF_REAL, "Width dependence of cf"), IOP( "wclc", BSIM3v1_MOD_WCLC, IF_REAL, "Width dependence of clc"), IOP( "wcle", BSIM3v1_MOD_WCLE, IF_REAL, "Width dependence of cle"), IOP( "walpha0", BSIM3v1_MOD_WALPHA0, IF_REAL, "Width dependence of alpha0"), IOP( "wbeta0", BSIM3v1_MOD_WBETA0, IF_REAL, "Width dependence of beta0"), IOP( "wvfbcv", BSIM3v1_MOD_WVFBCV, IF_REAL, "Width dependence of vfbcv"), IOP( "pcdsc", BSIM3v1_MOD_PCDSC, IF_REAL, "Cross-term dependence of cdsc"), IOP( "pcdscb", BSIM3v1_MOD_PCDSCB, IF_REAL, "Cross-term dependence of cdscb"), IOP( "pcdscd", BSIM3v1_MOD_PCDSCD, IF_REAL, "Cross-term dependence of cdscd"), IOP( "pcit", BSIM3v1_MOD_PCIT, IF_REAL, "Cross-term dependence of cit"), IOP( "pnfactor", BSIM3v1_MOD_PNFACTOR, IF_REAL, "Cross-term dependence of nfactor"), IOP( "pxj", BSIM3v1_MOD_PXJ, IF_REAL, "Cross-term dependence of xj"), IOP( "pvsat", BSIM3v1_MOD_PVSAT, IF_REAL, "Cross-term dependence of vsat"), IOP( "pat", BSIM3v1_MOD_PAT, IF_REAL, "Cross-term dependence of at"), IOP( "pa0", BSIM3v1_MOD_PA0, IF_REAL, "Cross-term dependence of a0"), IOP( "pags", BSIM3v1_MOD_PAGS, IF_REAL, "Cross-term dependence of ags"), IOP( "pa1", BSIM3v1_MOD_PA1, IF_REAL, "Cross-term dependence of a1"), IOP( "pa2", BSIM3v1_MOD_PA2, IF_REAL, "Cross-term dependence of a2"), IOP( "pketa", BSIM3v1_MOD_PKETA, IF_REAL, "Cross-term dependence of keta"), IOP( "pnsub", BSIM3v1_MOD_PNSUB, IF_REAL, "Cross-term dependence of nsub"), IOP( "pnch", BSIM3v1_MOD_PNPEAK, IF_REAL, "Cross-term dependence of nch"), IOP( "pngate", BSIM3v1_MOD_PNGATE, IF_REAL, "Cross-term dependence of ngate"), IOP( "pgamma1", BSIM3v1_MOD_PGAMMA1, IF_REAL, "Cross-term dependence of gamma1"), IOP( "pgamma2", BSIM3v1_MOD_PGAMMA2, IF_REAL, "Cross-term dependence of gamma2"), IOP( "pvbx", BSIM3v1_MOD_PVBX, IF_REAL, "Cross-term dependence of vbx"), IOP( "pvbm", BSIM3v1_MOD_PVBM, IF_REAL, "Cross-term dependence of vbm"), IOP( "pxt", BSIM3v1_MOD_PXT, IF_REAL, "Cross-term dependence of xt"), IOP( "pk1", BSIM3v1_MOD_PK1, IF_REAL, "Cross-term dependence of k1"), IOP( "pkt1", BSIM3v1_MOD_PKT1, IF_REAL, "Cross-term dependence of kt1"), IOP( "pkt1l", BSIM3v1_MOD_PKT1L, IF_REAL, "Cross-term dependence of kt1l"), IOP( "pkt2", BSIM3v1_MOD_PKT2, IF_REAL, "Cross-term dependence of kt2"), IOP( "pk2", BSIM3v1_MOD_PK2, IF_REAL, "Cross-term dependence of k2"), IOP( "pk3", BSIM3v1_MOD_PK3, IF_REAL, "Cross-term dependence of k3"), IOP( "pk3b", BSIM3v1_MOD_PK3B, IF_REAL, "Cross-term dependence of k3b"), IOP( "pw0", BSIM3v1_MOD_PW0, IF_REAL, "Cross-term dependence of w0"), IOP( "pnlx", BSIM3v1_MOD_PNLX, IF_REAL, "Cross-term dependence of nlx"), IOP( "pdvt0", BSIM3v1_MOD_PDVT0, IF_REAL, "Cross-term dependence of dvt0"), IOP( "pdvt1", BSIM3v1_MOD_PDVT1, IF_REAL, "Cross-term dependence of dvt1"), IOP( "pdvt2", BSIM3v1_MOD_PDVT2, IF_REAL, "Cross-term dependence of dvt2"), IOP( "pdvt0w", BSIM3v1_MOD_PDVT0W, IF_REAL, "Cross-term dependence of dvt0w"), IOP( "pdvt1w", BSIM3v1_MOD_PDVT1W, IF_REAL, "Cross-term dependence of dvt1w"), IOP( "pdvt2w", BSIM3v1_MOD_PDVT2W, IF_REAL, "Cross-term dependence of dvt2w"), IOP( "pdrout", BSIM3v1_MOD_PDROUT, IF_REAL, "Cross-term dependence of drout"), IOP( "pdsub", BSIM3v1_MOD_PDSUB, IF_REAL, "Cross-term dependence of dsub"), IOP( "pvth0", BSIM3v1_MOD_PVTH0, IF_REAL,"Cross-term dependence of vth0"), IOPR("pvtho", BSIM3v1_MOD_PVTH0, IF_REAL,"Cross-term dependence of vtho"), IOP( "pua", BSIM3v1_MOD_PUA, IF_REAL, "Cross-term dependence of ua"), IOP( "pua1", BSIM3v1_MOD_PUA1, IF_REAL, "Cross-term dependence of ua1"), IOP( "pub", BSIM3v1_MOD_PUB, IF_REAL, "Cross-term dependence of ub"), IOP( "pub1", BSIM3v1_MOD_PUB1, IF_REAL, "Cross-term dependence of ub1"), IOP( "puc", BSIM3v1_MOD_PUC, IF_REAL, "Cross-term dependence of uc"), IOP( "puc1", BSIM3v1_MOD_PUC1, IF_REAL, "Cross-term dependence of uc1"), IOP( "pu0", BSIM3v1_MOD_PU0, IF_REAL, "Cross-term dependence of u0"), IOP( "pute", BSIM3v1_MOD_PUTE, IF_REAL, "Cross-term dependence of ute"), IOP( "pvoff", BSIM3v1_MOD_PVOFF, IF_REAL, "Cross-term dependence of voff"), IOP( "pelm", BSIM3v1_MOD_PELM, IF_REAL, "Cross-term dependence of elm"), IOP( "pdelta", BSIM3v1_MOD_PDELTA, IF_REAL, "Cross-term dependence of delta"), IOP( "prdsw", BSIM3v1_MOD_PRDSW, IF_REAL, "Cross-term dependence of rdsw "), IOP( "pprwg", BSIM3v1_MOD_PPRWG, IF_REAL, "Cross-term dependence of prwg "), IOP( "pprwb", BSIM3v1_MOD_PPRWB, IF_REAL, "Cross-term dependence of prwb "), IOP( "pprt", BSIM3v1_MOD_PPRT, IF_REAL, "Cross-term dependence of prt "), IOP( "peta0", BSIM3v1_MOD_PETA0, IF_REAL, "Cross-term dependence of eta0"), IOP( "petab", BSIM3v1_MOD_PETAB, IF_REAL, "Cross-term dependence of etab"), IOP( "ppclm", BSIM3v1_MOD_PPCLM, IF_REAL, "Cross-term dependence of pclm"), IOP( "ppdiblc1", BSIM3v1_MOD_PPDIBL1, IF_REAL, "Cross-term dependence of pdiblc1"), IOP( "ppdiblc2", BSIM3v1_MOD_PPDIBL2, IF_REAL, "Cross-term dependence of pdiblc2"), IOP( "ppdiblcb", BSIM3v1_MOD_PPDIBLB, IF_REAL, "Cross-term dependence of pdiblcb"), IOP( "ppscbe1", BSIM3v1_MOD_PPSCBE1, IF_REAL, "Cross-term dependence of pscbe1"), IOP( "ppscbe2", BSIM3v1_MOD_PPSCBE2, IF_REAL, "Cross-term dependence of pscbe2"), IOP( "ppvag", BSIM3v1_MOD_PPVAG, IF_REAL, "Cross-term dependence of pvag"), IOP( "pwr", BSIM3v1_MOD_PWR, IF_REAL, "Cross-term dependence of wr"), IOP( "pdwg", BSIM3v1_MOD_PDWG, IF_REAL, "Cross-term dependence of dwg"), IOP( "pdwb", BSIM3v1_MOD_PDWB, IF_REAL, "Cross-term dependence of dwb"), IOP( "pb0", BSIM3v1_MOD_PB0, IF_REAL, "Cross-term dependence of b0"), IOP( "pb1", BSIM3v1_MOD_PB1, IF_REAL, "Cross-term dependence of b1"), IOP( "pcgsl", BSIM3v1_MOD_PCGSL, IF_REAL, "Cross-term dependence of cgsl"), IOP( "pcgdl", BSIM3v1_MOD_PCGDL, IF_REAL, "Cross-term dependence of cgdl"), IOP( "pckappa", BSIM3v1_MOD_PCKAPPA, IF_REAL, "Cross-term dependence of ckappa"), IOP( "pcf", BSIM3v1_MOD_PCF, IF_REAL, "Cross-term dependence of cf"), IOP( "pclc", BSIM3v1_MOD_PCLC, IF_REAL, "Cross-term dependence of clc"), IOP( "pcle", BSIM3v1_MOD_PCLE, IF_REAL, "Cross-term dependence of cle"), IOP( "palpha0", BSIM3v1_MOD_PALPHA0, IF_REAL, "Cross-term dependence of alpha0"), IOP( "pbeta0", BSIM3v1_MOD_PBETA0, IF_REAL, "Cross-term dependence of beta0"), IOP( "pvfbcv", BSIM3v1_MOD_PVFBCV, IF_REAL, "Cross-term dependence of vfbcv"), IOP( "noia", BSIM3v1_MOD_NOIA, IF_REAL, "Flicker noise parameter"), IOP( "noib", BSIM3v1_MOD_NOIB, IF_REAL, "Flicker noise parameter"), IOP( "noic", BSIM3v1_MOD_NOIC, IF_REAL, "Flicker noise parameter"), IOP( "em", BSIM3v1_MOD_EM, IF_REAL, "Flicker noise parameter"), IOP( "ef", BSIM3v1_MOD_EF, IF_REAL, "Flicker noise frequency exponent"), IOP( "af", BSIM3v1_MOD_AF, IF_REAL, "Flicker noise exponent"), IOP( "kf", BSIM3v1_MOD_KF, IF_REAL, "Flicker noise coefficient"), IP( "nmos", BSIM3v1_MOD_NMOS, IF_FLAG, "Flag to indicate NMOS"), IP( "pmos", BSIM3v1_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"), /* serban */ IOP( "hdif", BSIM3v1_MOD_HDIF, IF_REAL, "S/D junction extension"), }; char *BSIM3v1names[] = { "Drain", "Gate", "Source", "Bulk", "Charge" }; int BSIM3v1nSize = NUMELEMS(BSIM3v1names); int BSIM3v1pTSize = NUMELEMS(BSIM3v1pTable); int BSIM3v1mPTSize = NUMELEMS(BSIM3v1mPTable); int BSIM3v1iSize = sizeof(BSIM3v1instance); int BSIM3v1mSize = sizeof(BSIM3v1model); tmpk8ny_4pz/src/spicelib/devices/bsim3v1/bsim3v1init.c0000644000175000017500000000334713546075722022772 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "bsim3v1itf.h" #include "bsim3v1ext.h" #include "bsim3v1init.h" SPICEdev BSIM3v1info = { .DEVpublic = { .name = "BSIM3v1", .description = "Berkeley Short Channel IGFET Model Version-3 (3.1)", .terms = &BSIM3v1nSize, .numNames = &BSIM3v1nSize, .termNames = BSIM3v1names, .numInstanceParms = &BSIM3v1pTSize, .instanceParms = BSIM3v1pTable, .numModelParms = &BSIM3v1mPTSize, .modelParms = BSIM3v1mPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = BSIM3v1param, .DEVmodParam = BSIM3v1mParam, .DEVload = BSIM3v1load, .DEVsetup = BSIM3v1setup, .DEVunsetup = BSIM3v1unsetup, .DEVpzSetup = BSIM3v1setup, .DEVtemperature = BSIM3v1temp, .DEVtrunc = BSIM3v1trunc, .DEVfindBranch = NULL, .DEVacLoad = BSIM3v1acLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = BSIM3v1getic, .DEVask = BSIM3v1ask, .DEVmodAsk = BSIM3v1mAsk, .DEVpzLoad = BSIM3v1pzLoad, .DEVconvTest = BSIM3v1convTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = BSIM3v1noise, .DEVsoaCheck = NULL, .DEVinstSize = &BSIM3v1iSize, .DEVmodSize = &BSIM3v1mSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_bsim3v1_info(void) { return &BSIM3v1info; } tmpk8ny_4pz/src/spicelib/devices/bsim3v1/b3v1mask.c0000644000175000017500000011542013546075722022245 0ustar carstencarsten/********** * Copyright 1990 Regents of the University of California. All rights reserved. * File: b3v1mask.c * Author: 1995 Min-Chie Jeng and Mansun Chan. * Modified by Paolo Nenzi 2002 **********/ /* * Release Notes: * BSIM3v3.1, Released by yuhua 96/12/08 */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "bsim3v1def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3v1mAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { BSIM3v1model *model = (BSIM3v1model *)inst; NG_IGNORE(ckt); switch(which) { case BSIM3v1_MOD_MOBMOD: value->iValue = model->BSIM3v1mobMod; return(OK); case BSIM3v1_MOD_PARAMCHK: value->iValue = model->BSIM3v1paramChk; return(OK); case BSIM3v1_MOD_BINUNIT: value->iValue = model->BSIM3v1binUnit; return(OK); case BSIM3v1_MOD_CAPMOD: value->iValue = model->BSIM3v1capMod; return(OK); case BSIM3v1_MOD_NQSMOD: value->iValue = model->BSIM3v1nqsMod; return(OK); case BSIM3v1_MOD_NOIMOD: value->iValue = model->BSIM3v1noiMod; return(OK); case BSIM3v1_MOD_VERSION : value->rValue = model->BSIM3v1version; return(OK); case BSIM3v1_MOD_TOX : value->rValue = model->BSIM3v1tox; return(OK); case BSIM3v1_MOD_CDSC : value->rValue = model->BSIM3v1cdsc; return(OK); case BSIM3v1_MOD_CDSCB : value->rValue = model->BSIM3v1cdscb; return(OK); case BSIM3v1_MOD_CDSCD : value->rValue = model->BSIM3v1cdscd; return(OK); case BSIM3v1_MOD_CIT : value->rValue = model->BSIM3v1cit; return(OK); case BSIM3v1_MOD_NFACTOR : value->rValue = model->BSIM3v1nfactor; return(OK); case BSIM3v1_MOD_XJ: value->rValue = model->BSIM3v1xj; return(OK); case BSIM3v1_MOD_VSAT: value->rValue = model->BSIM3v1vsat; return(OK); case BSIM3v1_MOD_AT: value->rValue = model->BSIM3v1at; return(OK); case BSIM3v1_MOD_A0: value->rValue = model->BSIM3v1a0; return(OK); case BSIM3v1_MOD_AGS: value->rValue = model->BSIM3v1ags; return(OK); case BSIM3v1_MOD_A1: value->rValue = model->BSIM3v1a1; return(OK); case BSIM3v1_MOD_A2: value->rValue = model->BSIM3v1a2; return(OK); case BSIM3v1_MOD_KETA: value->rValue = model->BSIM3v1keta; return(OK); case BSIM3v1_MOD_NSUB: value->rValue = model->BSIM3v1nsub; return(OK); case BSIM3v1_MOD_NPEAK: value->rValue = model->BSIM3v1npeak; return(OK); case BSIM3v1_MOD_NGATE: value->rValue = model->BSIM3v1ngate; return(OK); case BSIM3v1_MOD_GAMMA1: value->rValue = model->BSIM3v1gamma1; return(OK); case BSIM3v1_MOD_GAMMA2: value->rValue = model->BSIM3v1gamma2; return(OK); case BSIM3v1_MOD_VBX: value->rValue = model->BSIM3v1vbx; return(OK); case BSIM3v1_MOD_VBM: value->rValue = model->BSIM3v1vbm; return(OK); case BSIM3v1_MOD_XT: value->rValue = model->BSIM3v1xt; return(OK); case BSIM3v1_MOD_K1: value->rValue = model->BSIM3v1k1; return(OK); case BSIM3v1_MOD_KT1: value->rValue = model->BSIM3v1kt1; return(OK); case BSIM3v1_MOD_KT1L: value->rValue = model->BSIM3v1kt1l; return(OK); case BSIM3v1_MOD_KT2 : value->rValue = model->BSIM3v1kt2; return(OK); case BSIM3v1_MOD_K2 : value->rValue = model->BSIM3v1k2; return(OK); case BSIM3v1_MOD_K3: value->rValue = model->BSIM3v1k3; return(OK); case BSIM3v1_MOD_K3B: value->rValue = model->BSIM3v1k3b; return(OK); case BSIM3v1_MOD_W0: value->rValue = model->BSIM3v1w0; return(OK); case BSIM3v1_MOD_NLX: value->rValue = model->BSIM3v1nlx; return(OK); case BSIM3v1_MOD_DVT0 : value->rValue = model->BSIM3v1dvt0; return(OK); case BSIM3v1_MOD_DVT1 : value->rValue = model->BSIM3v1dvt1; return(OK); case BSIM3v1_MOD_DVT2 : value->rValue = model->BSIM3v1dvt2; return(OK); case BSIM3v1_MOD_DVT0W : value->rValue = model->BSIM3v1dvt0w; return(OK); case BSIM3v1_MOD_DVT1W : value->rValue = model->BSIM3v1dvt1w; return(OK); case BSIM3v1_MOD_DVT2W : value->rValue = model->BSIM3v1dvt2w; return(OK); case BSIM3v1_MOD_DROUT : value->rValue = model->BSIM3v1drout; return(OK); case BSIM3v1_MOD_DSUB : value->rValue = model->BSIM3v1dsub; return(OK); case BSIM3v1_MOD_VTH0: value->rValue = model->BSIM3v1vth0; return(OK); case BSIM3v1_MOD_UA: value->rValue = model->BSIM3v1ua; return(OK); case BSIM3v1_MOD_UA1: value->rValue = model->BSIM3v1ua1; return(OK); case BSIM3v1_MOD_UB: value->rValue = model->BSIM3v1ub; return(OK); case BSIM3v1_MOD_UB1: value->rValue = model->BSIM3v1ub1; return(OK); case BSIM3v1_MOD_UC: value->rValue = model->BSIM3v1uc; return(OK); case BSIM3v1_MOD_UC1: value->rValue = model->BSIM3v1uc1; return(OK); case BSIM3v1_MOD_U0: value->rValue = model->BSIM3v1u0; return(OK); case BSIM3v1_MOD_UTE: value->rValue = model->BSIM3v1ute; return(OK); case BSIM3v1_MOD_VOFF: value->rValue = model->BSIM3v1voff; return(OK); case BSIM3v1_MOD_DELTA: value->rValue = model->BSIM3v1delta; return(OK); case BSIM3v1_MOD_RDSW: value->rValue = model->BSIM3v1rdsw; return(OK); case BSIM3v1_MOD_PRWG: value->rValue = model->BSIM3v1prwg; return(OK); case BSIM3v1_MOD_PRWB: value->rValue = model->BSIM3v1prwb; return(OK); case BSIM3v1_MOD_PRT: value->rValue = model->BSIM3v1prt; return(OK); case BSIM3v1_MOD_ETA0: value->rValue = model->BSIM3v1eta0; return(OK); case BSIM3v1_MOD_ETAB: value->rValue = model->BSIM3v1etab; return(OK); case BSIM3v1_MOD_PCLM: value->rValue = model->BSIM3v1pclm; return(OK); case BSIM3v1_MOD_PDIBL1: value->rValue = model->BSIM3v1pdibl1; return(OK); case BSIM3v1_MOD_PDIBL2: value->rValue = model->BSIM3v1pdibl2; return(OK); case BSIM3v1_MOD_PDIBLB: value->rValue = model->BSIM3v1pdiblb; return(OK); case BSIM3v1_MOD_PSCBE1: value->rValue = model->BSIM3v1pscbe1; return(OK); case BSIM3v1_MOD_PSCBE2: value->rValue = model->BSIM3v1pscbe2; return(OK); case BSIM3v1_MOD_PVAG: value->rValue = model->BSIM3v1pvag; return(OK); case BSIM3v1_MOD_WR: value->rValue = model->BSIM3v1wr; return(OK); case BSIM3v1_MOD_DWG: value->rValue = model->BSIM3v1dwg; return(OK); case BSIM3v1_MOD_DWB: value->rValue = model->BSIM3v1dwb; return(OK); case BSIM3v1_MOD_B0: value->rValue = model->BSIM3v1b0; return(OK); case BSIM3v1_MOD_B1: value->rValue = model->BSIM3v1b1; return(OK); case BSIM3v1_MOD_ALPHA0: value->rValue = model->BSIM3v1alpha0; return(OK); case BSIM3v1_MOD_BETA0: value->rValue = model->BSIM3v1beta0; return(OK); case BSIM3v1_MOD_ELM: value->rValue = model->BSIM3v1elm; return(OK); case BSIM3v1_MOD_CGSL: value->rValue = model->BSIM3v1cgsl; return(OK); case BSIM3v1_MOD_CGDL: value->rValue = model->BSIM3v1cgdl; return(OK); case BSIM3v1_MOD_CKAPPA: value->rValue = model->BSIM3v1ckappa; return(OK); case BSIM3v1_MOD_CF: value->rValue = model->BSIM3v1cf; return(OK); case BSIM3v1_MOD_CLC: value->rValue = model->BSIM3v1clc; return(OK); case BSIM3v1_MOD_CLE: value->rValue = model->BSIM3v1cle; return(OK); case BSIM3v1_MOD_DWC: value->rValue = model->BSIM3v1dwc; return(OK); case BSIM3v1_MOD_DLC: value->rValue = model->BSIM3v1dlc; return(OK); case BSIM3v1_MOD_VFBCV: value->rValue = model->BSIM3v1vfbcv; return(OK); /* Length dependence */ case BSIM3v1_MOD_LCDSC : value->rValue = model->BSIM3v1lcdsc; return(OK); case BSIM3v1_MOD_LCDSCB : value->rValue = model->BSIM3v1lcdscb; return(OK); case BSIM3v1_MOD_LCDSCD : value->rValue = model->BSIM3v1lcdscd; return(OK); case BSIM3v1_MOD_LCIT : value->rValue = model->BSIM3v1lcit; return(OK); case BSIM3v1_MOD_LNFACTOR : value->rValue = model->BSIM3v1lnfactor; return(OK); case BSIM3v1_MOD_LXJ: value->rValue = model->BSIM3v1lxj; return(OK); case BSIM3v1_MOD_LVSAT: value->rValue = model->BSIM3v1lvsat; return(OK); case BSIM3v1_MOD_LAT: value->rValue = model->BSIM3v1lat; return(OK); case BSIM3v1_MOD_LA0: value->rValue = model->BSIM3v1la0; return(OK); case BSIM3v1_MOD_LAGS: value->rValue = model->BSIM3v1lags; return(OK); case BSIM3v1_MOD_LA1: value->rValue = model->BSIM3v1la1; return(OK); case BSIM3v1_MOD_LA2: value->rValue = model->BSIM3v1la2; return(OK); case BSIM3v1_MOD_LKETA: value->rValue = model->BSIM3v1lketa; return(OK); case BSIM3v1_MOD_LNSUB: value->rValue = model->BSIM3v1lnsub; return(OK); case BSIM3v1_MOD_LNPEAK: value->rValue = model->BSIM3v1lnpeak; return(OK); case BSIM3v1_MOD_LNGATE: value->rValue = model->BSIM3v1lngate; return(OK); case BSIM3v1_MOD_LGAMMA1: value->rValue = model->BSIM3v1lgamma1; return(OK); case BSIM3v1_MOD_LGAMMA2: value->rValue = model->BSIM3v1lgamma2; return(OK); case BSIM3v1_MOD_LVBX: value->rValue = model->BSIM3v1lvbx; return(OK); case BSIM3v1_MOD_LVBM: value->rValue = model->BSIM3v1lvbm; return(OK); case BSIM3v1_MOD_LXT: value->rValue = model->BSIM3v1lxt; return(OK); case BSIM3v1_MOD_LK1: value->rValue = model->BSIM3v1lk1; return(OK); case BSIM3v1_MOD_LKT1: value->rValue = model->BSIM3v1lkt1; return(OK); case BSIM3v1_MOD_LKT1L: value->rValue = model->BSIM3v1lkt1l; return(OK); case BSIM3v1_MOD_LKT2 : value->rValue = model->BSIM3v1lkt2; return(OK); case BSIM3v1_MOD_LK2 : value->rValue = model->BSIM3v1lk2; return(OK); case BSIM3v1_MOD_LK3: value->rValue = model->BSIM3v1lk3; return(OK); case BSIM3v1_MOD_LK3B: value->rValue = model->BSIM3v1lk3b; return(OK); case BSIM3v1_MOD_LW0: value->rValue = model->BSIM3v1lw0; return(OK); case BSIM3v1_MOD_LNLX: value->rValue = model->BSIM3v1lnlx; return(OK); case BSIM3v1_MOD_LDVT0: value->rValue = model->BSIM3v1ldvt0; return(OK); case BSIM3v1_MOD_LDVT1 : value->rValue = model->BSIM3v1ldvt1; return(OK); case BSIM3v1_MOD_LDVT2 : value->rValue = model->BSIM3v1ldvt2; return(OK); case BSIM3v1_MOD_LDVT0W : value->rValue = model->BSIM3v1ldvt0w; return(OK); case BSIM3v1_MOD_LDVT1W : value->rValue = model->BSIM3v1ldvt1w; return(OK); case BSIM3v1_MOD_LDVT2W : value->rValue = model->BSIM3v1ldvt2w; return(OK); case BSIM3v1_MOD_LDROUT : value->rValue = model->BSIM3v1ldrout; return(OK); case BSIM3v1_MOD_LDSUB : value->rValue = model->BSIM3v1ldsub; return(OK); case BSIM3v1_MOD_LVTH0: value->rValue = model->BSIM3v1lvth0; return(OK); case BSIM3v1_MOD_LUA: value->rValue = model->BSIM3v1lua; return(OK); case BSIM3v1_MOD_LUA1: value->rValue = model->BSIM3v1lua1; return(OK); case BSIM3v1_MOD_LUB: value->rValue = model->BSIM3v1lub; return(OK); case BSIM3v1_MOD_LUB1: value->rValue = model->BSIM3v1lub1; return(OK); case BSIM3v1_MOD_LUC: value->rValue = model->BSIM3v1luc; return(OK); case BSIM3v1_MOD_LUC1: value->rValue = model->BSIM3v1luc1; return(OK); case BSIM3v1_MOD_LU0: value->rValue = model->BSIM3v1lu0; return(OK); case BSIM3v1_MOD_LUTE: value->rValue = model->BSIM3v1lute; return(OK); case BSIM3v1_MOD_LVOFF: value->rValue = model->BSIM3v1lvoff; return(OK); case BSIM3v1_MOD_LDELTA: value->rValue = model->BSIM3v1ldelta; return(OK); case BSIM3v1_MOD_LRDSW: value->rValue = model->BSIM3v1lrdsw; return(OK); case BSIM3v1_MOD_LPRWB: value->rValue = model->BSIM3v1lprwb; return(OK); case BSIM3v1_MOD_LPRWG: value->rValue = model->BSIM3v1lprwg; return(OK); case BSIM3v1_MOD_LPRT: value->rValue = model->BSIM3v1lprt; return(OK); case BSIM3v1_MOD_LETA0: value->rValue = model->BSIM3v1leta0; return(OK); case BSIM3v1_MOD_LETAB: value->rValue = model->BSIM3v1letab; return(OK); case BSIM3v1_MOD_LPCLM: value->rValue = model->BSIM3v1lpclm; return(OK); case BSIM3v1_MOD_LPDIBL1: value->rValue = model->BSIM3v1lpdibl1; return(OK); case BSIM3v1_MOD_LPDIBL2: value->rValue = model->BSIM3v1lpdibl2; return(OK); case BSIM3v1_MOD_LPDIBLB: value->rValue = model->BSIM3v1lpdiblb; return(OK); case BSIM3v1_MOD_LPSCBE1: value->rValue = model->BSIM3v1lpscbe1; return(OK); case BSIM3v1_MOD_LPSCBE2: value->rValue = model->BSIM3v1lpscbe2; return(OK); case BSIM3v1_MOD_LPVAG: value->rValue = model->BSIM3v1lpvag; return(OK); case BSIM3v1_MOD_LWR: value->rValue = model->BSIM3v1lwr; return(OK); case BSIM3v1_MOD_LDWG: value->rValue = model->BSIM3v1ldwg; return(OK); case BSIM3v1_MOD_LDWB: value->rValue = model->BSIM3v1ldwb; return(OK); case BSIM3v1_MOD_LB0: value->rValue = model->BSIM3v1lb0; return(OK); case BSIM3v1_MOD_LB1: value->rValue = model->BSIM3v1lb1; return(OK); case BSIM3v1_MOD_LALPHA0: value->rValue = model->BSIM3v1lalpha0; return(OK); case BSIM3v1_MOD_LBETA0: value->rValue = model->BSIM3v1lbeta0; return(OK); case BSIM3v1_MOD_LELM: value->rValue = model->BSIM3v1lelm; return(OK); case BSIM3v1_MOD_LCGSL: value->rValue = model->BSIM3v1lcgsl; return(OK); case BSIM3v1_MOD_LCGDL: value->rValue = model->BSIM3v1lcgdl; return(OK); case BSIM3v1_MOD_LCKAPPA: value->rValue = model->BSIM3v1lckappa; return(OK); case BSIM3v1_MOD_LCF: value->rValue = model->BSIM3v1lcf; return(OK); case BSIM3v1_MOD_LCLC: value->rValue = model->BSIM3v1lclc; return(OK); case BSIM3v1_MOD_LCLE: value->rValue = model->BSIM3v1lcle; return(OK); case BSIM3v1_MOD_LVFBCV: value->rValue = model->BSIM3v1lvfbcv; return(OK); /* Width dependence */ case BSIM3v1_MOD_WCDSC : value->rValue = model->BSIM3v1wcdsc; return(OK); case BSIM3v1_MOD_WCDSCB : value->rValue = model->BSIM3v1wcdscb; return(OK); case BSIM3v1_MOD_WCDSCD : value->rValue = model->BSIM3v1wcdscd; return(OK); case BSIM3v1_MOD_WCIT : value->rValue = model->BSIM3v1wcit; return(OK); case BSIM3v1_MOD_WNFACTOR : value->rValue = model->BSIM3v1wnfactor; return(OK); case BSIM3v1_MOD_WXJ: value->rValue = model->BSIM3v1wxj; return(OK); case BSIM3v1_MOD_WVSAT: value->rValue = model->BSIM3v1wvsat; return(OK); case BSIM3v1_MOD_WAT: value->rValue = model->BSIM3v1wat; return(OK); case BSIM3v1_MOD_WA0: value->rValue = model->BSIM3v1wa0; return(OK); case BSIM3v1_MOD_WAGS: value->rValue = model->BSIM3v1wags; return(OK); case BSIM3v1_MOD_WA1: value->rValue = model->BSIM3v1wa1; return(OK); case BSIM3v1_MOD_WA2: value->rValue = model->BSIM3v1wa2; return(OK); case BSIM3v1_MOD_WKETA: value->rValue = model->BSIM3v1wketa; return(OK); case BSIM3v1_MOD_WNSUB: value->rValue = model->BSIM3v1wnsub; return(OK); case BSIM3v1_MOD_WNPEAK: value->rValue = model->BSIM3v1wnpeak; return(OK); case BSIM3v1_MOD_WNGATE: value->rValue = model->BSIM3v1wngate; return(OK); case BSIM3v1_MOD_WGAMMA1: value->rValue = model->BSIM3v1wgamma1; return(OK); case BSIM3v1_MOD_WGAMMA2: value->rValue = model->BSIM3v1wgamma2; return(OK); case BSIM3v1_MOD_WVBX: value->rValue = model->BSIM3v1wvbx; return(OK); case BSIM3v1_MOD_WVBM: value->rValue = model->BSIM3v1wvbm; return(OK); case BSIM3v1_MOD_WXT: value->rValue = model->BSIM3v1wxt; return(OK); case BSIM3v1_MOD_WK1: value->rValue = model->BSIM3v1wk1; return(OK); case BSIM3v1_MOD_WKT1: value->rValue = model->BSIM3v1wkt1; return(OK); case BSIM3v1_MOD_WKT1L: value->rValue = model->BSIM3v1wkt1l; return(OK); case BSIM3v1_MOD_WKT2 : value->rValue = model->BSIM3v1wkt2; return(OK); case BSIM3v1_MOD_WK2 : value->rValue = model->BSIM3v1wk2; return(OK); case BSIM3v1_MOD_WK3: value->rValue = model->BSIM3v1wk3; return(OK); case BSIM3v1_MOD_WK3B: value->rValue = model->BSIM3v1wk3b; return(OK); case BSIM3v1_MOD_WW0: value->rValue = model->BSIM3v1ww0; return(OK); case BSIM3v1_MOD_WNLX: value->rValue = model->BSIM3v1wnlx; return(OK); case BSIM3v1_MOD_WDVT0: value->rValue = model->BSIM3v1wdvt0; return(OK); case BSIM3v1_MOD_WDVT1 : value->rValue = model->BSIM3v1wdvt1; return(OK); case BSIM3v1_MOD_WDVT2 : value->rValue = model->BSIM3v1wdvt2; return(OK); case BSIM3v1_MOD_WDVT0W : value->rValue = model->BSIM3v1wdvt0w; return(OK); case BSIM3v1_MOD_WDVT1W : value->rValue = model->BSIM3v1wdvt1w; return(OK); case BSIM3v1_MOD_WDVT2W : value->rValue = model->BSIM3v1wdvt2w; return(OK); case BSIM3v1_MOD_WDROUT : value->rValue = model->BSIM3v1wdrout; return(OK); case BSIM3v1_MOD_WDSUB : value->rValue = model->BSIM3v1wdsub; return(OK); case BSIM3v1_MOD_WVTH0: value->rValue = model->BSIM3v1wvth0; return(OK); case BSIM3v1_MOD_WUA: value->rValue = model->BSIM3v1wua; return(OK); case BSIM3v1_MOD_WUA1: value->rValue = model->BSIM3v1wua1; return(OK); case BSIM3v1_MOD_WUB: value->rValue = model->BSIM3v1wub; return(OK); case BSIM3v1_MOD_WUB1: value->rValue = model->BSIM3v1wub1; return(OK); case BSIM3v1_MOD_WUC: value->rValue = model->BSIM3v1wuc; return(OK); case BSIM3v1_MOD_WUC1: value->rValue = model->BSIM3v1wuc1; return(OK); case BSIM3v1_MOD_WU0: value->rValue = model->BSIM3v1wu0; return(OK); case BSIM3v1_MOD_WUTE: value->rValue = model->BSIM3v1wute; return(OK); case BSIM3v1_MOD_WVOFF: value->rValue = model->BSIM3v1wvoff; return(OK); case BSIM3v1_MOD_WDELTA: value->rValue = model->BSIM3v1wdelta; return(OK); case BSIM3v1_MOD_WRDSW: value->rValue = model->BSIM3v1wrdsw; return(OK); case BSIM3v1_MOD_WPRWB: value->rValue = model->BSIM3v1wprwb; return(OK); case BSIM3v1_MOD_WPRWG: value->rValue = model->BSIM3v1wprwg; return(OK); case BSIM3v1_MOD_WPRT: value->rValue = model->BSIM3v1wprt; return(OK); case BSIM3v1_MOD_WETA0: value->rValue = model->BSIM3v1weta0; return(OK); case BSIM3v1_MOD_WETAB: value->rValue = model->BSIM3v1wetab; return(OK); case BSIM3v1_MOD_WPCLM: value->rValue = model->BSIM3v1wpclm; return(OK); case BSIM3v1_MOD_WPDIBL1: value->rValue = model->BSIM3v1wpdibl1; return(OK); case BSIM3v1_MOD_WPDIBL2: value->rValue = model->BSIM3v1wpdibl2; return(OK); case BSIM3v1_MOD_WPDIBLB: value->rValue = model->BSIM3v1wpdiblb; return(OK); case BSIM3v1_MOD_WPSCBE1: value->rValue = model->BSIM3v1wpscbe1; return(OK); case BSIM3v1_MOD_WPSCBE2: value->rValue = model->BSIM3v1wpscbe2; return(OK); case BSIM3v1_MOD_WPVAG: value->rValue = model->BSIM3v1wpvag; return(OK); case BSIM3v1_MOD_WWR: value->rValue = model->BSIM3v1wwr; return(OK); case BSIM3v1_MOD_WDWG: value->rValue = model->BSIM3v1wdwg; return(OK); case BSIM3v1_MOD_WDWB: value->rValue = model->BSIM3v1wdwb; return(OK); case BSIM3v1_MOD_WB0: value->rValue = model->BSIM3v1wb0; return(OK); case BSIM3v1_MOD_WB1: value->rValue = model->BSIM3v1wb1; return(OK); case BSIM3v1_MOD_WALPHA0: value->rValue = model->BSIM3v1walpha0; return(OK); case BSIM3v1_MOD_WBETA0: value->rValue = model->BSIM3v1wbeta0; return(OK); case BSIM3v1_MOD_WELM: value->rValue = model->BSIM3v1welm; return(OK); case BSIM3v1_MOD_WCGSL: value->rValue = model->BSIM3v1wcgsl; return(OK); case BSIM3v1_MOD_WCGDL: value->rValue = model->BSIM3v1wcgdl; return(OK); case BSIM3v1_MOD_WCKAPPA: value->rValue = model->BSIM3v1wckappa; return(OK); case BSIM3v1_MOD_WCF: value->rValue = model->BSIM3v1wcf; return(OK); case BSIM3v1_MOD_WCLC: value->rValue = model->BSIM3v1wclc; return(OK); case BSIM3v1_MOD_WCLE: value->rValue = model->BSIM3v1wcle; return(OK); case BSIM3v1_MOD_WVFBCV: value->rValue = model->BSIM3v1wvfbcv; return(OK); /* Cross-term dependence */ case BSIM3v1_MOD_PCDSC : value->rValue = model->BSIM3v1pcdsc; return(OK); case BSIM3v1_MOD_PCDSCB : value->rValue = model->BSIM3v1pcdscb; return(OK); case BSIM3v1_MOD_PCDSCD : value->rValue = model->BSIM3v1pcdscd; return(OK); case BSIM3v1_MOD_PCIT : value->rValue = model->BSIM3v1pcit; return(OK); case BSIM3v1_MOD_PNFACTOR : value->rValue = model->BSIM3v1pnfactor; return(OK); case BSIM3v1_MOD_PXJ: value->rValue = model->BSIM3v1pxj; return(OK); case BSIM3v1_MOD_PVSAT: value->rValue = model->BSIM3v1pvsat; return(OK); case BSIM3v1_MOD_PAT: value->rValue = model->BSIM3v1pat; return(OK); case BSIM3v1_MOD_PA0: value->rValue = model->BSIM3v1pa0; return(OK); case BSIM3v1_MOD_PAGS: value->rValue = model->BSIM3v1pags; return(OK); case BSIM3v1_MOD_PA1: value->rValue = model->BSIM3v1pa1; return(OK); case BSIM3v1_MOD_PA2: value->rValue = model->BSIM3v1pa2; return(OK); case BSIM3v1_MOD_PKETA: value->rValue = model->BSIM3v1pketa; return(OK); case BSIM3v1_MOD_PNSUB: value->rValue = model->BSIM3v1pnsub; return(OK); case BSIM3v1_MOD_PNPEAK: value->rValue = model->BSIM3v1pnpeak; return(OK); case BSIM3v1_MOD_PNGATE: value->rValue = model->BSIM3v1pngate; return(OK); case BSIM3v1_MOD_PGAMMA1: value->rValue = model->BSIM3v1pgamma1; return(OK); case BSIM3v1_MOD_PGAMMA2: value->rValue = model->BSIM3v1pgamma2; return(OK); case BSIM3v1_MOD_PVBX: value->rValue = model->BSIM3v1pvbx; return(OK); case BSIM3v1_MOD_PVBM: value->rValue = model->BSIM3v1pvbm; return(OK); case BSIM3v1_MOD_PXT: value->rValue = model->BSIM3v1pxt; return(OK); case BSIM3v1_MOD_PK1: value->rValue = model->BSIM3v1pk1; return(OK); case BSIM3v1_MOD_PKT1: value->rValue = model->BSIM3v1pkt1; return(OK); case BSIM3v1_MOD_PKT1L: value->rValue = model->BSIM3v1pkt1l; return(OK); case BSIM3v1_MOD_PKT2 : value->rValue = model->BSIM3v1pkt2; return(OK); case BSIM3v1_MOD_PK2 : value->rValue = model->BSIM3v1pk2; return(OK); case BSIM3v1_MOD_PK3: value->rValue = model->BSIM3v1pk3; return(OK); case BSIM3v1_MOD_PK3B: value->rValue = model->BSIM3v1pk3b; return(OK); case BSIM3v1_MOD_PW0: value->rValue = model->BSIM3v1pw0; return(OK); case BSIM3v1_MOD_PNLX: value->rValue = model->BSIM3v1pnlx; return(OK); case BSIM3v1_MOD_PDVT0 : value->rValue = model->BSIM3v1pdvt0; return(OK); case BSIM3v1_MOD_PDVT1 : value->rValue = model->BSIM3v1pdvt1; return(OK); case BSIM3v1_MOD_PDVT2 : value->rValue = model->BSIM3v1pdvt2; return(OK); case BSIM3v1_MOD_PDVT0W : value->rValue = model->BSIM3v1pdvt0w; return(OK); case BSIM3v1_MOD_PDVT1W : value->rValue = model->BSIM3v1pdvt1w; return(OK); case BSIM3v1_MOD_PDVT2W : value->rValue = model->BSIM3v1pdvt2w; return(OK); case BSIM3v1_MOD_PDROUT : value->rValue = model->BSIM3v1pdrout; return(OK); case BSIM3v1_MOD_PDSUB : value->rValue = model->BSIM3v1pdsub; return(OK); case BSIM3v1_MOD_PVTH0: value->rValue = model->BSIM3v1pvth0; return(OK); case BSIM3v1_MOD_PUA: value->rValue = model->BSIM3v1pua; return(OK); case BSIM3v1_MOD_PUA1: value->rValue = model->BSIM3v1pua1; return(OK); case BSIM3v1_MOD_PUB: value->rValue = model->BSIM3v1pub; return(OK); case BSIM3v1_MOD_PUB1: value->rValue = model->BSIM3v1pub1; return(OK); case BSIM3v1_MOD_PUC: value->rValue = model->BSIM3v1puc; return(OK); case BSIM3v1_MOD_PUC1: value->rValue = model->BSIM3v1puc1; return(OK); case BSIM3v1_MOD_PU0: value->rValue = model->BSIM3v1pu0; return(OK); case BSIM3v1_MOD_PUTE: value->rValue = model->BSIM3v1pute; return(OK); case BSIM3v1_MOD_PVOFF: value->rValue = model->BSIM3v1pvoff; return(OK); case BSIM3v1_MOD_PDELTA: value->rValue = model->BSIM3v1pdelta; return(OK); case BSIM3v1_MOD_PRDSW: value->rValue = model->BSIM3v1prdsw; return(OK); case BSIM3v1_MOD_PPRWB: value->rValue = model->BSIM3v1pprwb; return(OK); case BSIM3v1_MOD_PPRWG: value->rValue = model->BSIM3v1pprwg; return(OK); case BSIM3v1_MOD_PPRT: value->rValue = model->BSIM3v1pprt; return(OK); case BSIM3v1_MOD_PETA0: value->rValue = model->BSIM3v1peta0; return(OK); case BSIM3v1_MOD_PETAB: value->rValue = model->BSIM3v1petab; return(OK); case BSIM3v1_MOD_PPCLM: value->rValue = model->BSIM3v1ppclm; return(OK); case BSIM3v1_MOD_PPDIBL1: value->rValue = model->BSIM3v1ppdibl1; return(OK); case BSIM3v1_MOD_PPDIBL2: value->rValue = model->BSIM3v1ppdibl2; return(OK); case BSIM3v1_MOD_PPDIBLB: value->rValue = model->BSIM3v1ppdiblb; return(OK); case BSIM3v1_MOD_PPSCBE1: value->rValue = model->BSIM3v1ppscbe1; return(OK); case BSIM3v1_MOD_PPSCBE2: value->rValue = model->BSIM3v1ppscbe2; return(OK); case BSIM3v1_MOD_PPVAG: value->rValue = model->BSIM3v1ppvag; return(OK); case BSIM3v1_MOD_PWR: value->rValue = model->BSIM3v1pwr; return(OK); case BSIM3v1_MOD_PDWG: value->rValue = model->BSIM3v1pdwg; return(OK); case BSIM3v1_MOD_PDWB: value->rValue = model->BSIM3v1pdwb; return(OK); case BSIM3v1_MOD_PB0: value->rValue = model->BSIM3v1pb0; return(OK); case BSIM3v1_MOD_PB1: value->rValue = model->BSIM3v1pb1; return(OK); case BSIM3v1_MOD_PALPHA0: value->rValue = model->BSIM3v1palpha0; return(OK); case BSIM3v1_MOD_PBETA0: value->rValue = model->BSIM3v1pbeta0; return(OK); case BSIM3v1_MOD_PELM: value->rValue = model->BSIM3v1pelm; return(OK); case BSIM3v1_MOD_PCGSL: value->rValue = model->BSIM3v1pcgsl; return(OK); case BSIM3v1_MOD_PCGDL: value->rValue = model->BSIM3v1pcgdl; return(OK); case BSIM3v1_MOD_PCKAPPA: value->rValue = model->BSIM3v1pckappa; return(OK); case BSIM3v1_MOD_PCF: value->rValue = model->BSIM3v1pcf; return(OK); case BSIM3v1_MOD_PCLC: value->rValue = model->BSIM3v1pclc; return(OK); case BSIM3v1_MOD_PCLE: value->rValue = model->BSIM3v1pcle; return(OK); case BSIM3v1_MOD_PVFBCV: value->rValue = model->BSIM3v1pvfbcv; return(OK); case BSIM3v1_MOD_TNOM : value->rValue = model->BSIM3v1tnom; return(OK); case BSIM3v1_MOD_CGSO: value->rValue = model->BSIM3v1cgso; return(OK); case BSIM3v1_MOD_CGDO: value->rValue = model->BSIM3v1cgdo; return(OK); case BSIM3v1_MOD_CGBO: value->rValue = model->BSIM3v1cgbo; return(OK); case BSIM3v1_MOD_XPART: value->rValue = model->BSIM3v1xpart; return(OK); case BSIM3v1_MOD_RSH: value->rValue = model->BSIM3v1sheetResistance; return(OK); case BSIM3v1_MOD_JS: value->rValue = model->BSIM3v1jctSatCurDensity; return(OK); case BSIM3v1_MOD_JSW: value->rValue = model->BSIM3v1jctSidewallSatCurDensity; return(OK); case BSIM3v1_MOD_PB: value->rValue = model->BSIM3v1bulkJctPotential; return(OK); case BSIM3v1_MOD_MJ: value->rValue = model->BSIM3v1bulkJctBotGradingCoeff; return(OK); case BSIM3v1_MOD_PBSW: value->rValue = model->BSIM3v1sidewallJctPotential; return(OK); case BSIM3v1_MOD_MJSW: value->rValue = model->BSIM3v1bulkJctSideGradingCoeff; return(OK); case BSIM3v1_MOD_CJ: value->rValue = model->BSIM3v1unitAreaJctCap; return(OK); case BSIM3v1_MOD_CJSW: value->rValue = model->BSIM3v1unitLengthSidewallJctCap; return(OK); case BSIM3v1_MOD_PBSWG: value->rValue = model->BSIM3v1GatesidewallJctPotential; return(OK); case BSIM3v1_MOD_MJSWG: value->rValue = model->BSIM3v1bulkJctGateSideGradingCoeff; return(OK); case BSIM3v1_MOD_CJSWG: value->rValue = model->BSIM3v1unitLengthGateSidewallJctCap; return(OK); case BSIM3v1_MOD_NJ: value->rValue = model->BSIM3v1jctEmissionCoeff; return(OK); case BSIM3v1_MOD_XTI: value->rValue = model->BSIM3v1jctTempExponent; return(OK); case BSIM3v1_MOD_LINT: value->rValue = model->BSIM3v1Lint; return(OK); case BSIM3v1_MOD_LL: value->rValue = model->BSIM3v1Ll; return(OK); case BSIM3v1_MOD_LLN: value->rValue = model->BSIM3v1Lln; return(OK); case BSIM3v1_MOD_LW: value->rValue = model->BSIM3v1Lw; return(OK); case BSIM3v1_MOD_LWN: value->rValue = model->BSIM3v1Lwn; return(OK); case BSIM3v1_MOD_LWL: value->rValue = model->BSIM3v1Lwl; return(OK); case BSIM3v1_MOD_LMIN: value->rValue = model->BSIM3v1Lmin; return(OK); case BSIM3v1_MOD_LMAX: value->rValue = model->BSIM3v1Lmax; return(OK); case BSIM3v1_MOD_WINT: value->rValue = model->BSIM3v1Wint; return(OK); case BSIM3v1_MOD_WL: value->rValue = model->BSIM3v1Wl; return(OK); case BSIM3v1_MOD_WLN: value->rValue = model->BSIM3v1Wln; return(OK); case BSIM3v1_MOD_WW: value->rValue = model->BSIM3v1Ww; return(OK); case BSIM3v1_MOD_WWN: value->rValue = model->BSIM3v1Wwn; return(OK); case BSIM3v1_MOD_WWL: value->rValue = model->BSIM3v1Wwl; return(OK); case BSIM3v1_MOD_WMIN: value->rValue = model->BSIM3v1Wmin; return(OK); case BSIM3v1_MOD_WMAX: value->rValue = model->BSIM3v1Wmax; return(OK); case BSIM3v1_MOD_NOIA: value->rValue = model->BSIM3v1oxideTrapDensityA; return(OK); case BSIM3v1_MOD_NOIB: value->rValue = model->BSIM3v1oxideTrapDensityB; return(OK); case BSIM3v1_MOD_NOIC: value->rValue = model->BSIM3v1oxideTrapDensityC; return(OK); case BSIM3v1_MOD_EM: value->rValue = model->BSIM3v1em; return(OK); case BSIM3v1_MOD_EF: value->rValue = model->BSIM3v1ef; return(OK); case BSIM3v1_MOD_AF: value->rValue = model->BSIM3v1af; return(OK); case BSIM3v1_MOD_KF: value->rValue = model->BSIM3v1kf; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim3v1/ChangeLog0000644000175000017500000000077713546075722022234 0ustar carstencarsten22-10-2012 Francesco Lannutti * b3v1acld.c, b3v1cvtest.c, b3v1getic.c, b3v1ld.c, b3v1pzld.c, b3v1set.c, b3v1temp.c, b3v1trunc.c, bsim3v1def.h: Deleted the BSIM3V1owner field 27-01-2000 Paolo Nenzi * bsim3v1def.h: added BSIM3V1owner varialbe to the BSIM3V1instance structure to support "parallel" processing with Cider * b3v1acld.c, b3v1cvtest.c, b3v1getic.c, b3v1ld.c, b3v1pzld.c, b3v1set.c, b3v1temp.c, b3v1trunc.c: added the BSIM3V1owner check in these files tmpk8ny_4pz/src/spicelib/devices/bsim3v1/b3v1ld.c0000644000175000017500000027207213546075722021720 0ustar carstencarsten/********** * Copyright 1990 Regents of the University of California. All rights reserved. * File: b3ld.c * Author: 1995 Min-Chie Jeng and Mansun Chan. * Modified by Mansun Chan (1995) * Modified by Paolo Nenzi 2002 **********/ /* * Release Notes: * BSIM3v1v3.1, Released by yuhua 96/12/08 */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3v1def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define Charge_q 1.60219e-19 #define DELTA_1 0.02 #define DELTA_2 0.02 #define DELTA_3 0.02 #define DELTA_4 0.02 int BSIM3v1load(GENmodel *inModel, CKTcircuit *ckt) { BSIM3v1model *model = (BSIM3v1model*)inModel; BSIM3v1instance *here; double SourceSatCurrent, DrainSatCurrent; double ag0, qgd, qgs, qgb, von, cbhat, VgstNVt, ExpVgst = 0.0; double cdrain, cdhat, cdreq, ceqbd, ceqbs, ceqqb, ceqqd, ceqqg, ceq, geq; double czbd, czbdsw, czbdswg, czbs, czbssw, czbsswg, evbd, evbs, arg, sarg; double delvbd, delvbs, delvds, delvgd, delvgs; double Vfbeff, dVfbeff_dVg, dVfbeff_dVd, dVfbeff_dVb, V3, V4; double gcbdb, gcbgb, gcbsb, gcddb, gcdgb, gcdsb, gcgdb, gcggb, gcgsb, gcsdb; double gcsgb, gcssb, PhiB, PhiBSW, MJ, MJSW, PhiBSWG, MJSWG; double vbd, vbs, vds, vgb, vgd, vgs, vgdo; #ifndef PREDICTOR double xfact; #endif double qgate = 0.0, qbulk = 0.0, qdrn = 0.0, qsrc, cqgate, cqbulk, cqdrn; double Vds, Vgs, Vbs, Gmbs, FwdSum, RevSum; double Vgs_eff, Vfb, dVfb_dVb, dVfb_dVd; double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth, dVth_dVb, dVth_dVd; double Vgst, dVgst_dVg, dVgst_dVb, dVgs_eff_dVg, Nvtm; double n, dn_dVb, Vtm; double ExpArg, V0; double Denomi, dDenomi_dVg, dDenomi_dVd, dDenomi_dVb; double ueff, dueff_dVg, dueff_dVd, dueff_dVb; double Esat, Vdsat; double EsatL, dEsatL_dVg, dEsatL_dVd, dEsatL_dVb; double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, Vasat, dAlphaz_dVg, dAlphaz_dVb; double dVasat_dVg, dVasat_dVb, dVasat_dVd, Va, dVa_dVd, dVa_dVg, dVa_dVb; double Vbseff, dVbseff_dVb, VbseffCV, dVbseffCV_dVb; double Arg1, One_Third_CoxWL, Two_Third_CoxWL, Alphaz, CoxWL; double T0, dT0_dVg, dT0_dVd, dT0_dVb; double T1, dT1_dVg, dT1_dVd, dT1_dVb; double T2, dT2_dVg, dT2_dVd, dT2_dVb; double T3, dT3_dVg, dT3_dVd, dT3_dVb; double T4; double T5; double T6; double T7; double T8; double T9; double T10; double T11, T12; double tmp, Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVb; double VACLM, dVACLM_dVg, dVACLM_dVd, dVACLM_dVb; double VADIBL, dVADIBL_dVg, dVADIBL_dVd, dVADIBL_dVb; double Xdep, dXdep_dVb, lt1, dlt1_dVb, ltw, dltw_dVb, Delt_vth, dDelt_vth_dVb; double Theta0, dTheta0_dVb; double TempRatio, tmp1, tmp2, tmp3, tmp4; double DIBL_Sft, dDIBL_Sft_dVd, Lambda, dLambda_dVg; #ifndef NOBYPASS double tempv; #endif double a1; double Vgsteff, dVgsteff_dVg, dVgsteff_dVd, dVgsteff_dVb; double Vdseff, dVdseff_dVg, dVdseff_dVd, dVdseff_dVb; double VdseffCV, dVdseffCV_dVg, dVdseffCV_dVd, dVdseffCV_dVb; double diffVds; double dAbulk_dVg, dn_dVd ; double beta, dbeta_dVg, dbeta_dVd, dbeta_dVb; double gche, dgche_dVg, dgche_dVd, dgche_dVb; double fgche1, dfgche1_dVg, dfgche1_dVd, dfgche1_dVb; double fgche2, dfgche2_dVg, dfgche2_dVd, dfgche2_dVb; double Idl, dIdl_dVg, dIdl_dVd, dIdl_dVb; double Idsa, dIdsa_dVg, dIdsa_dVd, dIdsa_dVb; double Ids, Gm, Gds, Gmb; double Isub, Gbd, Gbg, Gbb; double VASCBE, dVASCBE_dVg, dVASCBE_dVd, dVASCBE_dVb; double CoxWovL; double Rds, dRds_dVg, dRds_dVb, WVCox, WVCoxRds; double Vgst2Vtm, VdsatCV, dVdsatCV_dVg, dVdsatCV_dVb; double Leff = 0.0, Weff, dWeff_dVg, dWeff_dVb; double AbulkCV, dAbulkCV_dVb; double qgdo, qgso, cgdo, cgso; double qcheq, qdef, gqdef, cqdef, cqcheq, gtau_diff, gtau_drift; double gcqdb,gcqsb,gcqgb,gcqbb; double dxpart, sxpart; double gbspsp, gbbdp, gbbsp, gbspg, gbspb, gbspdp; double gbdpdp, gbdpg, gbdpb, gbdpsp; double Cgg, Cgd, Cgb; double Csg, Csd, Csb, Cbg, Cbd, Cbb; double Cgg1, Cgb1, Cgd1, Cbg1, Cbb1, Cbd1, Qac0, Qsub0; double dQac0_dVg, dQac0_dVd, dQac0_dVb, dQsub0_dVg, dQsub0_dVd, dQsub0_dVb; double m = 1.0; struct bsim3v1SizeDependParam *pParam; int ByPass, Check, ChargeComputationNeeded = 0, error; for (; model != NULL; model = BSIM3v1nextModel(model)) { for (here = BSIM3v1instances(model); here != NULL; here = BSIM3v1nextInstance(here)) { Check = 1; ByPass = 0; pParam = here->pParam; if ((ckt->CKTmode & MODEINITSMSIG)) { vbs = *(ckt->CKTstate0 + here->BSIM3v1vbs); vgs = *(ckt->CKTstate0 + here->BSIM3v1vgs); vds = *(ckt->CKTstate0 + here->BSIM3v1vds); qdef = *(ckt->CKTstate0 + here->BSIM3v1qcdump); } else if ((ckt->CKTmode & MODEINITTRAN)) { vbs = *(ckt->CKTstate1 + here->BSIM3v1vbs); vgs = *(ckt->CKTstate1 + here->BSIM3v1vgs); vds = *(ckt->CKTstate1 + here->BSIM3v1vds); qdef = *(ckt->CKTstate1 + here->BSIM3v1qcdump); } else if ((ckt->CKTmode & MODEINITJCT) && !here->BSIM3v1off) { vds = model->BSIM3v1type * here->BSIM3v1icVDS; vgs = model->BSIM3v1type * here->BSIM3v1icVGS; vbs = model->BSIM3v1type * here->BSIM3v1icVBS; qdef = 0.0; if ((vds == 0.0) && (vgs == 0.0) && (vbs == 0.0) && ((ckt->CKTmode & (MODETRAN | MODEAC|MODEDCOP | MODEDCTRANCURVE)) || (!(ckt->CKTmode & MODEUIC)))) { vbs = 0.0; vgs = pParam->BSIM3v1vth0 + 0.1; vds = 0.1; } } else if ((ckt->CKTmode & (MODEINITJCT | MODEINITFIX)) && (here->BSIM3v1off)) { qdef = vbs = vgs = vds = 0.0; } else { #ifndef PREDICTOR if ((ckt->CKTmode & MODEINITPRED)) { xfact = ckt->CKTdelta / ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->BSIM3v1vbs) = *(ckt->CKTstate1 + here->BSIM3v1vbs); vbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM3v1vbs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM3v1vbs))); *(ckt->CKTstate0 + here->BSIM3v1vgs) = *(ckt->CKTstate1 + here->BSIM3v1vgs); vgs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM3v1vgs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM3v1vgs))); *(ckt->CKTstate0 + here->BSIM3v1vds) = *(ckt->CKTstate1 + here->BSIM3v1vds); vds = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM3v1vds)) - (xfact * (*(ckt->CKTstate2 + here->BSIM3v1vds))); *(ckt->CKTstate0 + here->BSIM3v1vbd) = *(ckt->CKTstate0 + here->BSIM3v1vbs) - *(ckt->CKTstate0 + here->BSIM3v1vds); qdef = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM3v1qcdump)) -(xfact * (*(ckt->CKTstate2 + here->BSIM3v1qcdump))); } else { #endif /* PREDICTOR */ vbs = model->BSIM3v1type * (*(ckt->CKTrhsOld + here->BSIM3v1bNode) - *(ckt->CKTrhsOld + here->BSIM3v1sNodePrime)); vgs = model->BSIM3v1type * (*(ckt->CKTrhsOld + here->BSIM3v1gNode) - *(ckt->CKTrhsOld + here->BSIM3v1sNodePrime)); vds = model->BSIM3v1type * (*(ckt->CKTrhsOld + here->BSIM3v1dNodePrime) - *(ckt->CKTrhsOld + here->BSIM3v1sNodePrime)); qdef = *(ckt->CKTrhsOld + here->BSIM3v1qNode); #ifndef PREDICTOR } #endif /* PREDICTOR */ vbd = vbs - vds; vgd = vgs - vds; vgdo = *(ckt->CKTstate0 + here->BSIM3v1vgs) - *(ckt->CKTstate0 + here->BSIM3v1vds); delvbs = vbs - *(ckt->CKTstate0 + here->BSIM3v1vbs); delvbd = vbd - *(ckt->CKTstate0 + here->BSIM3v1vbd); delvgs = vgs - *(ckt->CKTstate0 + here->BSIM3v1vgs); delvds = vds - *(ckt->CKTstate0 + here->BSIM3v1vds); delvgd = vgd - vgdo; if (here->BSIM3v1mode >= 0) { cdhat = here->BSIM3v1cd - here->BSIM3v1gbd * delvbd + here->BSIM3v1gmbs * delvbs + here->BSIM3v1gm * delvgs + here->BSIM3v1gds * delvds; } else { cdhat = here->BSIM3v1cd - (here->BSIM3v1gbd - here->BSIM3v1gmbs) * delvbd - here->BSIM3v1gm * delvgd + here->BSIM3v1gds * delvds; } cbhat = here->BSIM3v1cbs + here->BSIM3v1cbd + here->BSIM3v1gbd * delvbd + here->BSIM3v1gbs * delvbs; #ifndef NOBYPASS /* following should be one big if connected by && all over * the place, but some C compilers can't handle that, so * we split it up here to let them digest it in stages */ if ((!(ckt->CKTmode & MODEINITPRED)) && (ckt->CKTbypass)) if ((fabs(delvbs) < (ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->BSIM3v1vbs))) + ckt->CKTvoltTol))) if ((fabs(delvbd) < (ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0+here->BSIM3v1vbd))) + ckt->CKTvoltTol))) if ((fabs(delvgs) < (ckt->CKTreltol * MAX(fabs(vgs), fabs(*(ckt->CKTstate0+here->BSIM3v1vgs))) + ckt->CKTvoltTol))) if ((fabs(delvds) < (ckt->CKTreltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0+here->BSIM3v1vds))) + ckt->CKTvoltTol))) if ((fabs(cdhat - here->BSIM3v1cd) < ckt->CKTreltol * MAX(fabs(cdhat),fabs(here->BSIM3v1cd)) + ckt->CKTabstol)) { tempv = MAX(fabs(cbhat),fabs(here->BSIM3v1cbs + here->BSIM3v1cbd)) + ckt->CKTabstol; if ((fabs(cbhat - (here->BSIM3v1cbs + here->BSIM3v1cbd)) < ckt->CKTreltol * tempv)) { /* bypass code */ vbs = *(ckt->CKTstate0 + here->BSIM3v1vbs); vbd = *(ckt->CKTstate0 + here->BSIM3v1vbd); vgs = *(ckt->CKTstate0 + here->BSIM3v1vgs); vds = *(ckt->CKTstate0 + here->BSIM3v1vds); qcheq = *(ckt->CKTstate0 + here->BSIM3v1qcheq); vgd = vgs - vds; vgb = vgs - vbs; cdrain = here->BSIM3v1mode * (here->BSIM3v1cd + here->BSIM3v1cbd); if ((ckt->CKTmode & (MODETRAN | MODEAC)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) { ByPass = 1; goto line755; } else { goto line850; } } } #endif /*NOBYPASS*/ von = here->BSIM3v1von; if (*(ckt->CKTstate0 + here->BSIM3v1vds) >= 0.0) { vgs = DEVfetlim(vgs, *(ckt->CKTstate0+here->BSIM3v1vgs), von); vds = vgs - vgd; vds = DEVlimvds(vds, *(ckt->CKTstate0 + here->BSIM3v1vds)); vgd = vgs - vds; } else { vgd = DEVfetlim(vgd, vgdo, von); vds = vgs - vgd; vds = -DEVlimvds(-vds, -(*(ckt->CKTstate0+here->BSIM3v1vds))); vgs = vgd + vds; } if (vds >= 0.0) { vbs = DEVpnjlim(vbs, *(ckt->CKTstate0 + here->BSIM3v1vbs), CONSTvt0, model->BSIM3v1vcrit, &Check); vbd = vbs - vds; } else { vbd = DEVpnjlim(vbd, *(ckt->CKTstate0 + here->BSIM3v1vbd), CONSTvt0, model->BSIM3v1vcrit, &Check); vbs = vbd + vds; } } /* determine DC current and derivatives */ vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; m = here->BSIM3v1m; /* the following code has been changed for the calculation of S/B and D/B diodes*/ if ((here->BSIM3v1sourceArea <= 0.0) && (here->BSIM3v1sourcePerimeter <= 0.0)) { SourceSatCurrent = 1.0e-14; } else { SourceSatCurrent = here->BSIM3v1sourceArea * model->BSIM3v1jctTempSatCurDensity + here->BSIM3v1sourcePerimeter * model->BSIM3v1jctSidewallTempSatCurDensity; } Nvtm = model->BSIM3v1vtm * model->BSIM3v1jctEmissionCoeff; if (SourceSatCurrent <= 0.0) { here->BSIM3v1gbs = ckt->CKTgmin; here->BSIM3v1cbs = here->BSIM3v1gbs * vbs; } else if (vbs < 0.5) { evbs = exp(vbs / Nvtm); here->BSIM3v1gbs = SourceSatCurrent * evbs / Nvtm + ckt->CKTgmin; here->BSIM3v1cbs = SourceSatCurrent * (evbs - 1.0) + ckt->CKTgmin * vbs; } else { evbs = exp(0.5 / Nvtm); T0 = SourceSatCurrent * evbs / Nvtm; here->BSIM3v1gbs = T0 + ckt->CKTgmin; here->BSIM3v1cbs = SourceSatCurrent * (evbs - 1.0) + T0 * (vbs - 0.5) + ckt->CKTgmin * vbs; } if ((here->BSIM3v1drainArea <= 0.0) && (here->BSIM3v1drainPerimeter <= 0.0)) { DrainSatCurrent = 1.0e-14; } else { DrainSatCurrent = here->BSIM3v1drainArea * model->BSIM3v1jctTempSatCurDensity + here->BSIM3v1drainPerimeter * model->BSIM3v1jctSidewallTempSatCurDensity; } if (DrainSatCurrent <= 0.0) { here->BSIM3v1gbd = ckt->CKTgmin; here->BSIM3v1cbd = here->BSIM3v1gbd * vbd; } else if (vbd < 0.5) { evbd = exp(vbd / Nvtm); here->BSIM3v1gbd = DrainSatCurrent * evbd / Nvtm + ckt->CKTgmin; here->BSIM3v1cbd = DrainSatCurrent * (evbd - 1.0) + ckt->CKTgmin * vbd; } else { evbd = exp(0.5 / Nvtm); T0 = DrainSatCurrent * evbd / Nvtm; here->BSIM3v1gbd = T0 + ckt->CKTgmin; here->BSIM3v1cbd = DrainSatCurrent * (evbd - 1.0) + T0 * (vbd - 0.5) + ckt->CKTgmin * vbd; } /* S/B and D/B diodes code change ends */ if (vds >= 0.0) { /* normal mode */ here->BSIM3v1mode = 1; Vds = vds; Vgs = vgs; Vbs = vbs; } else { /* inverse mode */ here->BSIM3v1mode = -1; Vds = -vds; Vgs = vgd; Vbs = vbd; } ChargeComputationNeeded = ((ckt->CKTmode & (MODEAC | MODETRAN | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) ? 1 : 0; T0 = Vbs - pParam->BSIM3v1vbsc - 0.001; T1 = sqrt(T0 * T0 - 0.004 * pParam->BSIM3v1vbsc); Vbseff = pParam->BSIM3v1vbsc + 0.5 * (T0 + T1); dVbseff_dVb = 0.5 * (1.0 + T0 / T1); if (Vbseff < Vbs) { Vbseff = Vbs; } /* Added to avoid the possible numerical problems due to computer accuracy. See comments for diffVds */ if (Vbseff > 0.0) { T0 = pParam->BSIM3v1phi / (pParam->BSIM3v1phi + Vbseff); Phis = pParam->BSIM3v1phi * T0; dPhis_dVb = -T0 * T0; sqrtPhis = pParam->BSIM3v1phis3 / (pParam->BSIM3v1phi + 0.5 * Vbseff); dsqrtPhis_dVb = -0.5 * sqrtPhis * sqrtPhis / pParam->BSIM3v1phis3; } else { Phis = pParam->BSIM3v1phi - Vbseff; dPhis_dVb = -1.0; sqrtPhis = sqrt(Phis); dsqrtPhis_dVb = -0.5 / sqrtPhis; } Xdep = pParam->BSIM3v1Xdep0 * sqrtPhis / pParam->BSIM3v1sqrtPhi; dXdep_dVb = (pParam->BSIM3v1Xdep0 / pParam->BSIM3v1sqrtPhi) * dsqrtPhis_dVb; Leff = pParam->BSIM3v1leff; Vtm = model->BSIM3v1vtm; /* Vth Calculation */ T3 = sqrt(Xdep); V0 = pParam->BSIM3v1vbi - pParam->BSIM3v1phi; T0 = pParam->BSIM3v1dvt2 * Vbseff; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->BSIM3v1dvt2; } else /* Added to avoid any discontinuity problems caused by dvt2 */ { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->BSIM3v1dvt2 * T4 * T4; } lt1 = model->BSIM3v1factor1 * T3 * T1; dlt1_dVb = model->BSIM3v1factor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * T2); T0 = pParam->BSIM3v1dvt2w * Vbseff; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->BSIM3v1dvt2w; } else /* Added to avoid any discontinuity problems caused by dvt2w */ { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->BSIM3v1dvt2w * T4 * T4; } ltw = model->BSIM3v1factor1 * T3 * T1; dltw_dVb = model->BSIM3v1factor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * T2); T0 = -0.5 * pParam->BSIM3v1dvt1 * Leff / lt1; if (T0 > -EXP_THRESHOLD) { T1 = exp(T0); Theta0 = T1 * (1.0 + 2.0 * T1); dT1_dVb = -T0 / lt1 * T1 * dlt1_dVb; dTheta0_dVb = (1.0 + 4.0 * T1) * dT1_dVb; } else { T1 = MIN_EXP; Theta0 = T1 * (1.0 + 2.0 * T1); dTheta0_dVb = 0.0; } here->BSIM3v1thetavth = pParam->BSIM3v1dvt0 * Theta0; Delt_vth = here->BSIM3v1thetavth * V0; dDelt_vth_dVb = pParam->BSIM3v1dvt0 * dTheta0_dVb * V0; T0 = -0.5 * pParam->BSIM3v1dvt1w * pParam->BSIM3v1weff * Leff / ltw; if (T0 > -EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 * (1.0 + 2.0 * T1); dT1_dVb = -T0 / ltw * T1 * dltw_dVb; dT2_dVb = (1.0 + 4.0 * T1) * dT1_dVb; } else { T1 = MIN_EXP; T2 = T1 * (1.0 + 2.0 * T1); dT2_dVb = 0.0; } T0 = pParam->BSIM3v1dvt0w * T2; T2 = T0 * V0; dT2_dVb = pParam->BSIM3v1dvt0w * dT2_dVb * V0; TempRatio = ckt->CKTtemp / model->BSIM3v1tnom - 1.0; T0 = sqrt(1.0 + pParam->BSIM3v1nlx / Leff); T1 = pParam->BSIM3v1k1 * (T0 - 1.0) * pParam->BSIM3v1sqrtPhi + (pParam->BSIM3v1kt1 + pParam->BSIM3v1kt1l / Leff + pParam->BSIM3v1kt2 * Vbseff) * TempRatio; tmp2 = model->BSIM3v1tox * pParam->BSIM3v1phi / (pParam->BSIM3v1weff + pParam->BSIM3v1w0); T3 = pParam->BSIM3v1eta0 + pParam->BSIM3v1etab * Vbseff; if (T3 < 1.0e-4) /* avoid discontinuity problems caused by etab */ { T9 = 1.0 / (3.0 - 2.0e4 * T3); T3 = (2.0e-4 - T3) * T9; T4 = T9 * T9; } else { T4 = 1.0; } dDIBL_Sft_dVd = T3 * pParam->BSIM3v1theta0vb0; DIBL_Sft = dDIBL_Sft_dVd * Vds; Vth = model->BSIM3v1type * pParam->BSIM3v1vth0 + pParam->BSIM3v1k1 * (sqrtPhis - pParam->BSIM3v1sqrtPhi) - pParam->BSIM3v1k2 * Vbseff - Delt_vth - T2 + (pParam->BSIM3v1k3 + pParam->BSIM3v1k3b * Vbseff) * tmp2 + T1 - DIBL_Sft; here->BSIM3v1von = Vth; dVth_dVb = pParam->BSIM3v1k1 * dsqrtPhis_dVb - pParam->BSIM3v1k2 - dDelt_vth_dVb - dT2_dVb + pParam->BSIM3v1k3b * tmp2 - pParam->BSIM3v1etab * Vds * pParam->BSIM3v1theta0vb0 * T4 + pParam->BSIM3v1kt2 * TempRatio; dVth_dVd = -dDIBL_Sft_dVd; /* Calculate n */ tmp2 = pParam->BSIM3v1nfactor * EPSSI / Xdep; tmp3 = pParam->BSIM3v1cdsc + pParam->BSIM3v1cdscb * Vbseff + pParam->BSIM3v1cdscd * Vds; tmp4 = (tmp2 + tmp3 * Theta0 + pParam->BSIM3v1cit) / model->BSIM3v1cox; if (tmp4 >= -0.5) { n = 1.0 + tmp4; dn_dVb = (-tmp2 / Xdep * dXdep_dVb + tmp3 * dTheta0_dVb + pParam->BSIM3v1cdscb * Theta0) / model->BSIM3v1cox; dn_dVd = pParam->BSIM3v1cdscd * Theta0 / model->BSIM3v1cox; } else /* avoid discontinuity problems caused by tmp4 */ { T0 = 1.0 / (3.0 + 8.0 * tmp4); n = (1.0 + 3.0 * tmp4) * T0; T0 *= T0; dn_dVb = (-tmp2 / Xdep * dXdep_dVb + tmp3 * dTheta0_dVb + pParam->BSIM3v1cdscb * Theta0) / model->BSIM3v1cox * T0; dn_dVd = pParam->BSIM3v1cdscd * Theta0 / model->BSIM3v1cox * T0; } /* Poly Gate Si Depletion Effect */ T0 = pParam->BSIM3v1vfb + pParam->BSIM3v1phi; if ((pParam->BSIM3v1ngate > 1.e18) && (pParam->BSIM3v1ngate < 1.e25) && (Vgs > T0)) /* added to avoid the problem caused by ngate */ { T1 = 1.0e6 * Charge_q * EPSSI * pParam->BSIM3v1ngate / (model->BSIM3v1cox * model->BSIM3v1cox); T4 = sqrt(1.0 + 2.0 * (Vgs - T0) / T1); T2 = T1 * (T4 - 1.0); T3 = 0.5 * T2 * T2 / T1; /* T3 = Vpoly */ T7 = 1.12 - T3 - 0.05; T6 = sqrt(T7 * T7 + 0.224); T5 = 1.12 - 0.5 * (T7 + T6); Vgs_eff = Vgs - T5; dVgs_eff_dVg = 1.0 - (0.5 - 0.5 / T4) * (1.0 + T7 / T6); } else { Vgs_eff = Vgs; dVgs_eff_dVg = 1.0; } Vgst = Vgs_eff - Vth; /* Effective Vgst (Vgsteff) Calculation */ T10 = 2.0 * n * Vtm; VgstNVt = Vgst / T10; ExpArg = (2.0 * pParam->BSIM3v1voff - Vgst) / T10; /* MCJ: Very small Vgst */ if (VgstNVt > EXP_THRESHOLD) { Vgsteff = Vgst; dVgsteff_dVg = dVgs_eff_dVg; dVgsteff_dVd = -dVth_dVd; dVgsteff_dVb = -dVth_dVb; } else if (ExpArg > EXP_THRESHOLD) { T0 = (Vgst - pParam->BSIM3v1voff) / (n * Vtm); ExpVgst = exp(T0); Vgsteff = Vtm * pParam->BSIM3v1cdep0 / model->BSIM3v1cox * ExpVgst; dVgsteff_dVg = Vgsteff / (n * Vtm); dVgsteff_dVd = -dVgsteff_dVg * (dVth_dVd + T0 * Vtm * dn_dVd); dVgsteff_dVb = -dVgsteff_dVg * (dVth_dVb + T0 * Vtm * dn_dVb); dVgsteff_dVg *= dVgs_eff_dVg; } else { ExpVgst = exp(VgstNVt); T1 = T10 * log(1.0 + ExpVgst); dT1_dVg = ExpVgst / (1.0 + ExpVgst); dT1_dVb = -dT1_dVg * (dVth_dVb + Vgst / n * dn_dVb) + T1 / n * dn_dVb; dT1_dVd = -dT1_dVg * (dVth_dVd + Vgst / n * dn_dVd) + T1 / n * dn_dVd; dT2_dVg = -model->BSIM3v1cox / (Vtm * pParam->BSIM3v1cdep0) * exp(ExpArg); T2 = 1.0 - T10 * dT2_dVg; dT2_dVd = -dT2_dVg * (dVth_dVd - 2.0 * Vtm * ExpArg * dn_dVd) + (T2 - 1.0) / n * dn_dVd; dT2_dVb = -dT2_dVg * (dVth_dVb - 2.0 * Vtm * ExpArg * dn_dVb) + (T2 - 1.0) / n * dn_dVb; Vgsteff = T1 / T2; T3 = T2 * T2; dVgsteff_dVg = (T2 * dT1_dVg - T1 * dT2_dVg) / T3 * dVgs_eff_dVg; dVgsteff_dVd = (T2 * dT1_dVd - T1 * dT2_dVd) / T3; dVgsteff_dVb = (T2 * dT1_dVb - T1 * dT2_dVb) / T3; } /* Calculate Effective Channel Geometry */ T9 = sqrtPhis - pParam->BSIM3v1sqrtPhi; Weff = pParam->BSIM3v1weff - 2.0 * (pParam->BSIM3v1dwg * Vgsteff + pParam->BSIM3v1dwb * T9); dWeff_dVg = -2.0 * pParam->BSIM3v1dwg; dWeff_dVb = -2.0 * pParam->BSIM3v1dwb * dsqrtPhis_dVb; if (Weff < 2.0e-8) /* to avoid the discontinuity problem due to Weff*/ { T0 = 1.0 / (6.0e-8 - 2.0 * Weff); Weff = 2.0e-8 * (4.0e-8 - Weff) * T0; T0 *= T0 * 4.0e-16; dWeff_dVg *= T0; dWeff_dVb *= T0; } T0 = pParam->BSIM3v1prwg * Vgsteff + pParam->BSIM3v1prwb * T9; if (T0 >= -0.9) { Rds = pParam->BSIM3v1rds0 * (1.0 + T0); dRds_dVg = pParam->BSIM3v1rds0 * pParam->BSIM3v1prwg; dRds_dVb = pParam->BSIM3v1rds0 * pParam->BSIM3v1prwb * dsqrtPhis_dVb; } else /* to avoid the discontinuity problem due to prwg and prwb*/ { T1 = 1.0 / (17.0 + 20.0 * T0); Rds = pParam->BSIM3v1rds0 * (0.8 + T0) * T1; T1 *= T1; dRds_dVg = pParam->BSIM3v1rds0 * pParam->BSIM3v1prwg * T1; dRds_dVb = pParam->BSIM3v1rds0 * pParam->BSIM3v1prwb * dsqrtPhis_dVb * T1; } /* Calculate Abulk */ T1 = 0.5 * pParam->BSIM3v1k1 / sqrtPhis; dT1_dVb = -T1 / sqrtPhis * dsqrtPhis_dVb; T9 = sqrt(pParam->BSIM3v1xj * Xdep); tmp1 = Leff + 2.0 * T9; T5 = Leff / tmp1; tmp2 = pParam->BSIM3v1a0 * T5; tmp3 = pParam->BSIM3v1weff + pParam->BSIM3v1b1; tmp4 = pParam->BSIM3v1b0 / tmp3; T2 = tmp2 + tmp4; dT2_dVb = -T9 / tmp1 / Xdep * dXdep_dVb; T6 = T5 * T5; T7 = T5 * T6; Abulk0 = 1.0 + T1 * T2; dAbulk0_dVb = T1 * tmp2 * dT2_dVb + T2 * dT1_dVb; T8 = pParam->BSIM3v1ags * pParam->BSIM3v1a0 * T7; dAbulk_dVg = -T1 * T8; Abulk = Abulk0 + dAbulk_dVg * Vgsteff; dAbulk_dVb = dAbulk0_dVb - T8 * Vgsteff * (dT1_dVb + 3.0 * T1 * dT2_dVb); if (Abulk0 < 0.1) /* added to avoid the problems caused by Abulk0 */ { T9 = 1.0 / (3.0 - 20.0 * Abulk0); Abulk0 = (0.2 - Abulk0) * T9; dAbulk0_dVb *= T9 * T9; } if (Abulk < 0.1) /* added to avoid the problems caused by Abulk */ { T9 = 1.0 / (3.0 - 20.0 * Abulk); Abulk = (0.2 - Abulk) * T9; dAbulk_dVb *= T9 * T9; } T2 = pParam->BSIM3v1keta * Vbseff; if (T2 >= -0.9) { T0 = 1.0 / (1.0 + T2); dT0_dVb = -pParam->BSIM3v1keta * T0 * T0; } else /* added to avoid the problems caused by Keta */ { T1 = 1.0 / (0.8 + T2); T0 = (17.0 + 20.0 * T2) * T1; dT0_dVb = -pParam->BSIM3v1keta * T1 * T1; } dAbulk_dVg *= T0; dAbulk_dVb = dAbulk_dVb * T0 + Abulk * dT0_dVb; dAbulk0_dVb = dAbulk0_dVb * T0 + Abulk0 * dT0_dVb; Abulk *= T0; Abulk0 *= T0; /* Mobility calculation */ if (model->BSIM3v1mobMod == 1) { T0 = Vgsteff + Vth + Vth; T2 = pParam->BSIM3v1ua + pParam->BSIM3v1uc * Vbseff; T3 = T0 / model->BSIM3v1tox; T5 = T3 * (T2 + pParam->BSIM3v1ub * T3); dDenomi_dVg = (T2 + 2.0 * pParam->BSIM3v1ub * T3) / model->BSIM3v1tox; dDenomi_dVd = dDenomi_dVg * 2.0 * dVth_dVd; dDenomi_dVb = dDenomi_dVg * 2.0 * dVth_dVb + pParam->BSIM3v1uc * T3; } else if (model->BSIM3v1mobMod == 2) { T5 = Vgsteff / model->BSIM3v1tox * (pParam->BSIM3v1ua + pParam->BSIM3v1uc * Vbseff + pParam->BSIM3v1ub * Vgsteff / model->BSIM3v1tox); dDenomi_dVg = (pParam->BSIM3v1ua + pParam->BSIM3v1uc * Vbseff + 2.0 * pParam->BSIM3v1ub * Vgsteff / model->BSIM3v1tox) / model->BSIM3v1tox; dDenomi_dVd = 0.0; dDenomi_dVb = Vgsteff * pParam->BSIM3v1uc / model->BSIM3v1tox; } else { T0 = Vgsteff + Vth + Vth; T2 = 1.0 + pParam->BSIM3v1uc * Vbseff; T3 = T0 / model->BSIM3v1tox; T4 = T3 * (pParam->BSIM3v1ua + pParam->BSIM3v1ub * T3); T5 = T4 * T2; dDenomi_dVg = (pParam->BSIM3v1ua + 2.0 * pParam->BSIM3v1ub * T3) * T2 / model->BSIM3v1tox; dDenomi_dVd = dDenomi_dVg * 2.0 * dVth_dVd; dDenomi_dVb = dDenomi_dVg * 2.0 * dVth_dVb + pParam->BSIM3v1uc * T4; } if (T5 >= -0.8) { Denomi = 1.0 + T5; } else /* Added to avoid the discontinuity problem caused by ua and ub*/ { T9 = 1.0 / (7.0 + 10.0 * T5); Denomi = (0.6 + T5) * T9; T9 *= T9; dDenomi_dVg *= T9; dDenomi_dVd *= T9; dDenomi_dVb *= T9; } here->BSIM3v1ueff = ueff = pParam->BSIM3v1u0temp / Denomi; T9 = -ueff / Denomi; dueff_dVg = T9 * dDenomi_dVg; dueff_dVd = T9 * dDenomi_dVd; dueff_dVb = T9 * dDenomi_dVb; /* Saturation Drain Voltage Vdsat */ WVCox = Weff * pParam->BSIM3v1vsattemp * model->BSIM3v1cox; WVCoxRds = WVCox * Rds; Esat = 2.0 * pParam->BSIM3v1vsattemp / ueff; EsatL = Esat * Leff; T0 = -EsatL /ueff; dEsatL_dVg = T0 * dueff_dVg; dEsatL_dVd = T0 * dueff_dVd; dEsatL_dVb = T0 * dueff_dVb; /* Sqrt() */ a1 = pParam->BSIM3v1a1; if (a1 == 0.0) { Lambda = pParam->BSIM3v1a2; dLambda_dVg = 0.0; } else if (a1 > 0.0) /* Added to avoid the discontinuity problem caused by a1 and a2 (Lambda) */ { T0 = 1.0 - pParam->BSIM3v1a2; T1 = T0 - pParam->BSIM3v1a1 * Vgsteff - 0.0001; T2 = sqrt(T1 * T1 + 0.0004 * T0); Lambda = pParam->BSIM3v1a2 + T0 - 0.5 * (T1 + T2); dLambda_dVg = 0.5 * pParam->BSIM3v1a1 * (1.0 + T1 / T2); } else { T1 = pParam->BSIM3v1a2 + pParam->BSIM3v1a1 * Vgsteff - 0.0001; T2 = sqrt(T1 * T1 + 0.0004 * pParam->BSIM3v1a2); Lambda = 0.5 * (T1 + T2); dLambda_dVg = 0.5 * pParam->BSIM3v1a1 * (1.0 + T1 / T2); } Vgst2Vtm = Vgsteff + 2.0 * Vtm; if (Rds > 0) { tmp2 = dRds_dVg / Rds + dWeff_dVg / Weff; tmp3 = dRds_dVb / Rds + dWeff_dVb / Weff; } else { tmp2 = dWeff_dVg / Weff; tmp3 = dWeff_dVb / Weff; } if ((Rds == 0.0) && (Lambda == 1.0)) { T0 = 1.0 / (Abulk * EsatL + Vgst2Vtm); tmp1 = 0.0; T1 = T0 * T0; T2 = Vgst2Vtm * T0; T3 = EsatL * Vgst2Vtm; Vdsat = T3 * T0; dT0_dVg = -(Abulk * dEsatL_dVg + EsatL * dAbulk_dVg + 1.0) * T1; dT0_dVd = -(Abulk * dEsatL_dVd) * T1; dT0_dVb = -(Abulk * dEsatL_dVb + dAbulk_dVb * EsatL) * T1; dVdsat_dVg = T3 * dT0_dVg + T2 * dEsatL_dVg + EsatL * T0; dVdsat_dVd = T3 * dT0_dVd + T2 * dEsatL_dVd; dVdsat_dVb = T3 * dT0_dVb + T2 * dEsatL_dVb; } else { tmp1 = dLambda_dVg / (Lambda * Lambda); T9 = Abulk * WVCoxRds; T8 = Abulk * T9; T7 = Vgst2Vtm * T9; T6 = Vgst2Vtm * WVCoxRds; T0 = 2.0 * Abulk * (T9 - 1.0 + 1.0 / Lambda); dT0_dVg = 2.0 * (T8 * tmp2 - Abulk * tmp1 + (2.0 * T9 + 1.0 / Lambda - 1.0) * dAbulk_dVg); dT0_dVb = 2.0 * (T8 * (2.0 / Abulk * dAbulk_dVb + tmp3) + (1.0 / Lambda - 1.0) * dAbulk_dVb); dT0_dVd = 0.0; T1 = Vgst2Vtm * (2.0 / Lambda - 1.0) + Abulk * EsatL + 3.0 * T7; dT1_dVg = (2.0 / Lambda - 1.0) - 2.0 * Vgst2Vtm * tmp1 + Abulk * dEsatL_dVg + EsatL * dAbulk_dVg + 3.0 * (T9 + T7 * tmp2 + T6 * dAbulk_dVg); dT1_dVb = Abulk * dEsatL_dVb + EsatL * dAbulk_dVb + 3.0 * (T6 * dAbulk_dVb + T7 * tmp3); dT1_dVd = Abulk * dEsatL_dVd; T2 = Vgst2Vtm * (EsatL + 2.0 * T6); dT2_dVg = EsatL + Vgst2Vtm * dEsatL_dVg + T6 * (4.0 + 2.0 * Vgst2Vtm * tmp2); dT2_dVb = Vgst2Vtm * (dEsatL_dVb + 2.0 * T6 * tmp3); dT2_dVd = Vgst2Vtm * dEsatL_dVd; T3 = sqrt(T1 * T1 - 2.0 * T0 * T2); Vdsat = (T1 - T3) / T0; dT3_dVg = (T1 * dT1_dVg - 2.0 * (T0 * dT2_dVg + T2 * dT0_dVg)) / T3; dT3_dVd = (T1 * dT1_dVd - 2.0 * (T0 * dT2_dVd + T2 * dT0_dVd)) / T3; dT3_dVb = (T1 * dT1_dVb - 2.0 * (T0 * dT2_dVb + T2 * dT0_dVb)) / T3; dVdsat_dVg = (dT1_dVg - (T1 * dT1_dVg - dT0_dVg * T2 - T0 * dT2_dVg) / T3 - Vdsat * dT0_dVg) / T0; dVdsat_dVb = (dT1_dVb - (T1 * dT1_dVb - dT0_dVb * T2 - T0 * dT2_dVb) / T3 - Vdsat * dT0_dVb) / T0; dVdsat_dVd = (dT1_dVd - (T1 * dT1_dVd - T0 * dT2_dVd) / T3) / T0; } here->BSIM3v1vdsat = Vdsat; /* Effective Vds (Vdseff) Calculation */ T1 = Vdsat - Vds - pParam->BSIM3v1delta; dT1_dVg = dVdsat_dVg; dT1_dVd = dVdsat_dVd - 1.0; dT1_dVb = dVdsat_dVb; T2 = sqrt(T1 * T1 + 4.0 * pParam->BSIM3v1delta * Vdsat); T0 = T1 / T2; T3 = 2.0 * pParam->BSIM3v1delta / T2; dT2_dVg = T0 * dT1_dVg + T3 * dVdsat_dVg; dT2_dVd = T0 * dT1_dVd + T3 * dVdsat_dVd; dT2_dVb = T0 * dT1_dVb + T3 * dVdsat_dVb; Vdseff = Vdsat - 0.5 * (T1 + T2); dVdseff_dVg = dVdsat_dVg - 0.5 * (dT1_dVg + dT2_dVg); dVdseff_dVd = dVdsat_dVd - 0.5 * (dT1_dVd + dT2_dVd); dVdseff_dVb = dVdsat_dVb - 0.5 * (dT1_dVb + dT2_dVb); /* Calculate VAsat */ tmp4 = 1.0 - 0.5 * Abulk * Vdsat / Vgst2Vtm; T9 = WVCoxRds * Vgsteff; T8 = T9 / Vgst2Vtm; T0 = EsatL + Vdsat + 2.0 * T9 * tmp4; T7 = 2.0 * WVCoxRds * tmp4; dT0_dVg = dEsatL_dVg + dVdsat_dVg + T7 * (1.0 + tmp2 * Vgsteff) - T8 * (Abulk * dVdsat_dVg - Abulk * Vdsat / Vgst2Vtm + Vdsat * dAbulk_dVg); dT0_dVb = dEsatL_dVb + dVdsat_dVb + T7 * tmp3 * Vgsteff - T8 * (dAbulk_dVb * Vdsat + Abulk * dVdsat_dVb); dT0_dVd = dEsatL_dVd + dVdsat_dVd - T8 * Abulk * dVdsat_dVd; T9 = WVCoxRds * Abulk; T1 = 2.0 / Lambda - 1.0 + T9; dT1_dVg = -2.0 * tmp1 + WVCoxRds * (Abulk * tmp2 + dAbulk_dVg); dT1_dVb = dAbulk_dVb * WVCoxRds + T9 * tmp3; Vasat = T0 / T1; dVasat_dVg = (dT0_dVg - Vasat * dT1_dVg) / T1; dVasat_dVb = (dT0_dVb - Vasat * dT1_dVb) / T1; dVasat_dVd = dT0_dVd / T1; if (Vdseff > Vds) Vdseff = Vds; /* This code is added to fixed the problem caused by computer precision when Vds is very close to Vdseff. */ diffVds = Vds - Vdseff; /* Calculate VACLM */ if ((pParam->BSIM3v1pclm > 0.0) && (diffVds > 1.0e-10)) { T0 = 1.0 / (pParam->BSIM3v1pclm * Abulk * pParam->BSIM3v1litl); dT0_dVb = -T0 / Abulk * dAbulk_dVb; dT0_dVg = -T0 / Abulk * dAbulk_dVg; T2 = Vgsteff / EsatL; T1 = Leff * (Abulk + T2); dT1_dVg = Leff * ((1.0 - T2 * dEsatL_dVg) / EsatL + dAbulk_dVg); dT1_dVb = Leff * (dAbulk_dVb - T2 * dEsatL_dVb / EsatL); dT1_dVd = -T2 * dEsatL_dVd / Esat; T9 = T0 * T1; VACLM = T9 * diffVds; dVACLM_dVg = T0 * dT1_dVg * diffVds - T9 * dVdseff_dVg + T1 * diffVds * dT0_dVg; dVACLM_dVb = (dT0_dVb * T1 + T0 * dT1_dVb) * diffVds - T9 * dVdseff_dVb; dVACLM_dVd = T0 * dT1_dVd * diffVds + T9 * (1.0 - dVdseff_dVd); } else { VACLM = MAX_EXP; dVACLM_dVd = dVACLM_dVg = dVACLM_dVb = 0.0; } /* Calculate VADIBL */ if (pParam->BSIM3v1thetaRout > 0.0) { T8 = Abulk * Vdsat; T0 = Vgst2Vtm * T8; dT0_dVg = Vgst2Vtm * Abulk * dVdsat_dVg + T8 + Vgst2Vtm * Vdsat * dAbulk_dVg; dT0_dVb = Vgst2Vtm * (dAbulk_dVb * Vdsat + Abulk * dVdsat_dVb); dT0_dVd = Vgst2Vtm * Abulk * dVdsat_dVd; T1 = Vgst2Vtm + T8; dT1_dVg = 1.0 + Abulk * dVdsat_dVg + Vdsat * dAbulk_dVg; dT1_dVb = Abulk * dVdsat_dVb + dAbulk_dVb * Vdsat; dT1_dVd = Abulk * dVdsat_dVd; T9 = T1 * T1; T2 = pParam->BSIM3v1thetaRout; VADIBL = (Vgst2Vtm - T0 / T1) / T2; dVADIBL_dVg = (1.0 - dT0_dVg / T1 + T0 * dT1_dVg / T9) / T2; dVADIBL_dVb = (-dT0_dVb / T1 + T0 * dT1_dVb / T9) / T2; dVADIBL_dVd = (-dT0_dVd / T1 + T0 * dT1_dVd / T9) / T2; T7 = pParam->BSIM3v1pdiblb * Vbseff; if (T7 >= -0.9) { T3 = 1.0 / (1.0 + T7); VADIBL *= T3; dVADIBL_dVg *= T3; dVADIBL_dVb = (dVADIBL_dVb - VADIBL * pParam->BSIM3v1pdiblb) * T3; dVADIBL_dVd *= T3; } else /* Added to avoid the discontinuity problem caused by pdiblcb */ { T4 = 1.0 / (0.8 + T7); T3 = (17.0 + 20.0 * T7) * T4; dVADIBL_dVg *= T3; dVADIBL_dVb = dVADIBL_dVb * T3 - VADIBL * pParam->BSIM3v1pdiblb * T4 * T4; dVADIBL_dVd *= T3; VADIBL *= T3; } } else { VADIBL = MAX_EXP; dVADIBL_dVd = dVADIBL_dVg = dVADIBL_dVb = 0.0; } /* Calculate VA */ T8 = pParam->BSIM3v1pvag / EsatL; T9 = T8 * Vgsteff; if (T9 > -0.9) { T0 = 1.0 + T9; dT0_dVg = T8 * (1.0 - Vgsteff * dEsatL_dVg / EsatL); dT0_dVb = -T9 * dEsatL_dVb / EsatL; dT0_dVd = -T9 * dEsatL_dVd / EsatL; } else /* Added to avoid the discontinuity problems caused by pvag */ { T1 = 1.0 / (17.0 + 20.0 * T9); T0 = (0.8 + T9) * T1; T1 *= T1; dT0_dVg = T8 * (1.0 - Vgsteff * dEsatL_dVg / EsatL) * T1; T9 *= T1 / EsatL; dT0_dVb = -T9 * dEsatL_dVb; dT0_dVd = -T9 * dEsatL_dVd; } tmp1 = VACLM * VACLM; tmp2 = VADIBL * VADIBL; tmp3 = VACLM + VADIBL; T1 = VACLM * VADIBL / tmp3; tmp3 *= tmp3; dT1_dVg = (tmp1 * dVADIBL_dVg + tmp2 * dVACLM_dVg) / tmp3; dT1_dVd = (tmp1 * dVADIBL_dVd + tmp2 * dVACLM_dVd) / tmp3; dT1_dVb = (tmp1 * dVADIBL_dVb + tmp2 * dVACLM_dVb) / tmp3; Va = Vasat + T0 * T1; dVa_dVg = dVasat_dVg + T1 * dT0_dVg + T0 * dT1_dVg; dVa_dVd = dVasat_dVd + T1 * dT0_dVd + T0 * dT1_dVd; dVa_dVb = dVasat_dVb + T1 * dT0_dVb + T0 * dT1_dVb; /* Calculate VASCBE */ if (pParam->BSIM3v1pscbe2 > 0.0) { if (diffVds > pParam->BSIM3v1pscbe1 * pParam->BSIM3v1litl / EXP_THRESHOLD) { T0 = pParam->BSIM3v1pscbe1 * pParam->BSIM3v1litl / diffVds; VASCBE = Leff * exp(T0) / pParam->BSIM3v1pscbe2; T1 = T0 * VASCBE / diffVds; dVASCBE_dVg = T1 * dVdseff_dVg; dVASCBE_dVd = -T1 * (1.0 - dVdseff_dVd); dVASCBE_dVb = T1 * dVdseff_dVb; } else { VASCBE = MAX_EXP * Leff/pParam->BSIM3v1pscbe2; dVASCBE_dVg = dVASCBE_dVd = dVASCBE_dVb = 0.0; } } else { VASCBE = MAX_EXP; dVASCBE_dVg = dVASCBE_dVd = dVASCBE_dVb = 0.0; } /* Calculate Ids */ CoxWovL = model->BSIM3v1cox * Weff / Leff; beta = ueff * CoxWovL; dbeta_dVg = CoxWovL * dueff_dVg + beta * dWeff_dVg / Weff; dbeta_dVd = CoxWovL * dueff_dVd; dbeta_dVb = CoxWovL * dueff_dVb + beta * dWeff_dVb / Weff; T0 = 1.0 - 0.5 * Abulk * Vdseff / Vgst2Vtm; dT0_dVg = -0.5 * (Abulk * dVdseff_dVg - Abulk * Vdseff / Vgst2Vtm + Vdseff * dAbulk_dVg) / Vgst2Vtm; dT0_dVd = -0.5 * Abulk * dVdseff_dVd / Vgst2Vtm; dT0_dVb = -0.5 * (Abulk * dVdseff_dVb + dAbulk_dVb * Vdseff) / Vgst2Vtm; fgche1 = Vgsteff * T0; dfgche1_dVg = Vgsteff * dT0_dVg + T0; dfgche1_dVd = Vgsteff * dT0_dVd; dfgche1_dVb = Vgsteff * dT0_dVb; T9 = Vdseff / EsatL; fgche2 = 1.0 + T9; dfgche2_dVg = (dVdseff_dVg - T9 * dEsatL_dVg) / EsatL; dfgche2_dVd = (dVdseff_dVd - T9 * dEsatL_dVd) / EsatL; dfgche2_dVb = (dVdseff_dVb - T9 * dEsatL_dVb) / EsatL; gche = beta * fgche1 / fgche2; dgche_dVg = (beta * dfgche1_dVg + fgche1 * dbeta_dVg - gche * dfgche2_dVg) / fgche2; dgche_dVd = (beta * dfgche1_dVd + fgche1 * dbeta_dVd - gche * dfgche2_dVd) / fgche2; dgche_dVb = (beta * dfgche1_dVb + fgche1 * dbeta_dVb - gche * dfgche2_dVb) / fgche2; T0 = 1.0 + gche * Rds; T9 = Vdseff / T0; Idl = gche * T9; dIdl_dVg = (gche * dVdseff_dVg + T9 * dgche_dVg) / T0 - Idl * gche / T0 * dRds_dVg ; dIdl_dVd = (gche * dVdseff_dVd + T9 * dgche_dVd) / T0; dIdl_dVb = (gche * dVdseff_dVb + T9 * dgche_dVb - Idl * dRds_dVb * gche) / T0; T9 = diffVds / Va; T0 = 1.0 + T9; Idsa = Idl * T0; dIdsa_dVg = T0 * dIdl_dVg - Idl * (dVdseff_dVg + T9 * dVa_dVg) / Va; dIdsa_dVd = T0 * dIdl_dVd + Idl * (1.0 - dVdseff_dVd - T9 * dVa_dVd) / Va; dIdsa_dVb = T0 * dIdl_dVb - Idl * (dVdseff_dVb + T9 * dVa_dVb) / Va; T9 = diffVds / VASCBE; T0 = 1.0 + T9; Ids = Idsa * T0; Gm = T0 * dIdsa_dVg - Idsa * (dVdseff_dVg + T9 * dVASCBE_dVg) / VASCBE; Gds = T0 * dIdsa_dVd + Idsa * (1.0 - dVdseff_dVd - T9 * dVASCBE_dVd) / VASCBE; Gmb = T0 * dIdsa_dVb - Idsa * (dVdseff_dVb + T9 * dVASCBE_dVb) / VASCBE; Gds += Gm * dVgsteff_dVd; Gmb += Gm * dVgsteff_dVb; Gm *= dVgsteff_dVg; Gmb *= dVbseff_dVb; /* calculate substrate current Isub */ if ((pParam->BSIM3v1alpha0 <= 0.0) || (pParam->BSIM3v1beta0 <= 0.0)) { Isub = Gbd = Gbb = Gbg = 0.0; } else { T2 = pParam->BSIM3v1alpha0 / Leff; if (diffVds > pParam->BSIM3v1beta0 / EXP_THRESHOLD) { T0 = -pParam->BSIM3v1beta0 / diffVds; T1 = T2 * diffVds * exp(T0); T3 = T1 / diffVds * (T0 - 1.0); dT1_dVg = T3 * dVdseff_dVg; dT1_dVd = -T3 * (1.0 - dVdseff_dVd); dT1_dVb = T3 * dVdseff_dVb; } else { T3 = T2 * MIN_EXP; T1 = T3 * diffVds; dT1_dVg = -T3 * dVdseff_dVg; dT1_dVd = T3 * (1.0 - dVdseff_dVd); dT1_dVb = -T3 * dVdseff_dVb; } Isub = T1 * Idsa; Gbg = T1 * dIdsa_dVg + Idsa * dT1_dVg; Gbd = T1 * dIdsa_dVd + Idsa * dT1_dVd; Gbb = T1 * dIdsa_dVb + Idsa * dT1_dVb; Gbd += Gbg * dVgsteff_dVd; Gbb += Gbg * dVgsteff_dVb; Gbg *= dVgsteff_dVg; Gbb *= dVbseff_dVb; /* bug fixing */ } cdrain = Ids; here->BSIM3v1gds = Gds; here->BSIM3v1gm = Gm; here->BSIM3v1gmbs = Gmb; here->BSIM3v1gbbs = Gbb; here->BSIM3v1gbgs = Gbg; here->BSIM3v1gbds = Gbd; here->BSIM3v1csub = Isub - (Gbb * Vbseff + Gbd * Vds + Gbg * Vgs); /* Calculate Qinv for Noise analysis */ T1 = Vgsteff * (1.0 - 0.5 * Abulk * Vdseff / Vgst2Vtm); here->BSIM3v1qinv = -model->BSIM3v1cox * Weff * Leff * T1; if ((model->BSIM3v1xpart < 0) || (!ChargeComputationNeeded)) { qgate = qdrn = qsrc = qbulk = 0.0; here->BSIM3v1cggb = here->BSIM3v1cgsb = here->BSIM3v1cgdb = 0.0; here->BSIM3v1cdgb = here->BSIM3v1cdsb = here->BSIM3v1cddb = 0.0; here->BSIM3v1cbgb = here->BSIM3v1cbsb = here->BSIM3v1cbdb = 0.0; here->BSIM3v1cqdb = here->BSIM3v1cqsb = here->BSIM3v1cqgb = here->BSIM3v1cqbb = 0.0; here->BSIM3v1gtau = 0.0; goto finished; } else if (model->BSIM3v1capMod == 0) { if (Vbseff < 0.0) { Vbseff = Vbs; dVbseff_dVb = 1.0; } else { Vbseff = pParam->BSIM3v1phi - Phis; dVbseff_dVb = -dPhis_dVb; } Vfb = pParam->BSIM3v1vfbcv; Vth = Vfb + pParam->BSIM3v1phi + pParam->BSIM3v1k1 * sqrtPhis; Vgst = Vgs_eff - Vth; dVth_dVb = pParam->BSIM3v1k1 * dsqrtPhis_dVb; dVgst_dVb = -dVth_dVb; dVgst_dVg = dVgs_eff_dVg; CoxWL = model->BSIM3v1cox * pParam->BSIM3v1weffCV * pParam->BSIM3v1leffCV; Arg1 = Vgs_eff - Vbseff - Vfb; if (Arg1 <= 0.0) { qgate = CoxWL * Arg1; qbulk = -qgate; qdrn = 0.0; here->BSIM3v1cggb = CoxWL * dVgs_eff_dVg; here->BSIM3v1cgdb = 0.0; here->BSIM3v1cgsb = CoxWL * (dVbseff_dVb - dVgs_eff_dVg); here->BSIM3v1cdgb = 0.0; here->BSIM3v1cddb = 0.0; here->BSIM3v1cdsb = 0.0; here->BSIM3v1cbgb = -CoxWL * dVgs_eff_dVg; here->BSIM3v1cbdb = 0.0; here->BSIM3v1cbsb = -here->BSIM3v1cgsb; } else if (Vgst <= 0.0) { T1 = 0.5 * pParam->BSIM3v1k1; T2 = sqrt(T1 * T1 + Arg1); qgate = CoxWL * pParam->BSIM3v1k1 * (T2 - T1); qbulk = -qgate; qdrn = 0.0; T0 = CoxWL * T1 / T2; here->BSIM3v1cggb = T0 * dVgs_eff_dVg; here->BSIM3v1cgdb = 0.0; here->BSIM3v1cgsb = T0 * (dVbseff_dVb - dVgs_eff_dVg); here->BSIM3v1cdgb = 0.0; here->BSIM3v1cddb = 0.0; here->BSIM3v1cdsb = 0.0; here->BSIM3v1cbgb = -here->BSIM3v1cggb; here->BSIM3v1cbdb = 0.0; here->BSIM3v1cbsb = -here->BSIM3v1cgsb; } else { One_Third_CoxWL = CoxWL / 3.0; Two_Third_CoxWL = 2.0 * One_Third_CoxWL; AbulkCV = Abulk0 * pParam->BSIM3v1abulkCVfactor; dAbulkCV_dVb = pParam->BSIM3v1abulkCVfactor * dAbulk0_dVb; Vdsat = Vgst / AbulkCV; dVdsat_dVg = dVgs_eff_dVg / AbulkCV; dVdsat_dVb = - (Vdsat * dAbulkCV_dVb + dVth_dVb)/ AbulkCV; if (model->BSIM3v1xpart > 0.5) { /* 0/100 Charge petition model */ if (Vdsat <= Vds) { /* saturation region */ T1 = Vdsat / 3.0; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM3v1phi - T1); T2 = -Two_Third_CoxWL * Vgst; qbulk = -(qgate + T2); qdrn = 0.0; here->BSIM3v1cggb = One_Third_CoxWL * (3.0 - dVdsat_dVg) * dVgs_eff_dVg; T2 = -One_Third_CoxWL * dVdsat_dVb; here->BSIM3v1cgsb = -(here->BSIM3v1cggb + T2); here->BSIM3v1cgdb = 0.0; here->BSIM3v1cdgb = 0.0; here->BSIM3v1cddb = 0.0; here->BSIM3v1cdsb = 0.0; here->BSIM3v1cbgb = -(here->BSIM3v1cggb - Two_Third_CoxWL * dVgs_eff_dVg); T3 = -(T2 + Two_Third_CoxWL * dVth_dVb); here->BSIM3v1cbsb = -(here->BSIM3v1cbgb + T3); here->BSIM3v1cbdb = 0.0; } else { /* linear region */ Alphaz = Vgst / Vdsat; T1 = 2.0 * Vdsat - Vds; T2 = Vds / (3.0 * T1); T3 = T2 * Vds; T9 = 0.25 * CoxWL; T4 = T9 * Alphaz; T7 = 2.0 * Vds - T1 - 3.0 * T3; T8 = T3 - T1 - 2.0 * Vds; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM3v1phi - 0.5 * (Vds - T3)); T10 = T4 * T8; qdrn = T4 * T7; qbulk = -(qgate + qdrn + T10); T5 = T3 / T1; here->BSIM3v1cggb = CoxWL * (1.0 - T5 * dVdsat_dVg) * dVgs_eff_dVg; T11 = -CoxWL * T5 * dVdsat_dVb; here->BSIM3v1cgdb = CoxWL * (T2 - 0.5 + 0.5 * T5); here->BSIM3v1cgsb = -(here->BSIM3v1cggb + T11 + here->BSIM3v1cgdb); T6 = 1.0 / Vdsat; dAlphaz_dVg = T6 * (1.0 - Alphaz * dVdsat_dVg); dAlphaz_dVb = -T6 * (dVth_dVb + Alphaz * dVdsat_dVb); T7 = T9 * T7; T8 = T9 * T8; T9 = 2.0 * T4 * (1.0 - 3.0 * T5); here->BSIM3v1cdgb = (T7 * dAlphaz_dVg - T9 * dVdsat_dVg) * dVgs_eff_dVg; T12 = T7 * dAlphaz_dVb - T9 * dVdsat_dVb; here->BSIM3v1cddb = T4 * (3.0 - 6.0 * T2 - 3.0 * T5); here->BSIM3v1cdsb = -(here->BSIM3v1cdgb + T12 + here->BSIM3v1cddb); T9 = 2.0 * T4 * (1.0 + T5); T10 = (T8 * dAlphaz_dVg - T9 * dVdsat_dVg) * dVgs_eff_dVg; T11 = T8 * dAlphaz_dVb - T9 * dVdsat_dVb; T12 = T4 * (2.0 * T2 + T5 - 1.0); T0 = -(T10 + T11 + T12); here->BSIM3v1cbgb = -(here->BSIM3v1cggb + here->BSIM3v1cdgb + T10); here->BSIM3v1cbdb = -(here->BSIM3v1cgdb + here->BSIM3v1cddb + T12); here->BSIM3v1cbsb = -(here->BSIM3v1cgsb + here->BSIM3v1cdsb + T0); } } else if (model->BSIM3v1xpart < 0.5) { /* 40/60 Charge petition model */ if (Vds >= Vdsat) { /* saturation region */ T1 = Vdsat / 3.0; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM3v1phi - T1); T2 = -Two_Third_CoxWL * Vgst; qbulk = -(qgate + T2); qdrn = 0.4 * T2; here->BSIM3v1cggb = One_Third_CoxWL * (3.0 - dVdsat_dVg) * dVgs_eff_dVg; T2 = -One_Third_CoxWL * dVdsat_dVb; here->BSIM3v1cgsb = -(here->BSIM3v1cggb + T2); here->BSIM3v1cgdb = 0.0; T3 = 0.4 * Two_Third_CoxWL; here->BSIM3v1cdgb = -T3 * dVgs_eff_dVg; here->BSIM3v1cddb = 0.0; T4 = T3 * dVth_dVb; here->BSIM3v1cdsb = -(T4 + here->BSIM3v1cdgb); here->BSIM3v1cbgb = -(here->BSIM3v1cggb - Two_Third_CoxWL * dVgs_eff_dVg); T3 = -(T2 + Two_Third_CoxWL * dVth_dVb); here->BSIM3v1cbsb = -(here->BSIM3v1cbgb + T3); here->BSIM3v1cbdb = 0.0; } else { /* linear region */ Alphaz = Vgst / Vdsat; T1 = 2.0 * Vdsat - Vds; T2 = Vds / (3.0 * T1); T3 = T2 * Vds; T9 = 0.25 * CoxWL; T4 = T9 * Alphaz; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM3v1phi - 0.5 * (Vds - T3)); T5 = T3 / T1; here->BSIM3v1cggb = CoxWL * (1.0 - T5 * dVdsat_dVg) * dVgs_eff_dVg; tmp = -CoxWL * T5 * dVdsat_dVb; here->BSIM3v1cgdb = CoxWL * (T2 - 0.5 + 0.5 * T5); here->BSIM3v1cgsb = -(here->BSIM3v1cggb + here->BSIM3v1cgdb + tmp); T6 = 1.0 / Vdsat; dAlphaz_dVg = T6 * (1.0 - Alphaz * dVdsat_dVg); dAlphaz_dVb = -T6 * (dVth_dVb + Alphaz * dVdsat_dVb); T6 = 8.0 * Vdsat * Vdsat - 6.0 * Vdsat * Vds + 1.2 * Vds * Vds; T8 = T2 / T1; T7 = Vds - T1 - T8 * T6; qdrn = T4 * T7; T7 *= T9; tmp = T8 / T1; tmp1 = T4 * (2.0 - 4.0 * tmp * T6 + T8 * (16.0 * Vdsat - 6.0 * Vds)); here->BSIM3v1cdgb = (T7 * dAlphaz_dVg - tmp1 * dVdsat_dVg) * dVgs_eff_dVg; T10 = T7 * dAlphaz_dVb - tmp1 * dVdsat_dVb; here->BSIM3v1cddb = T4 * (2.0 - (1.0 / (3.0 * T1 * T1) + 2.0 * tmp) * T6 + T8 * (6.0 * Vdsat - 2.4 * Vds)); here->BSIM3v1cdsb = -(here->BSIM3v1cdgb + T10 + here->BSIM3v1cddb); T7 = 2.0 * (T1 + T3); qbulk = -(qgate - T4 * T7); T7 *= T9; T0 = 4.0 * T4 * (1.0 - T5); T12 = (-T7 * dAlphaz_dVg - here->BSIM3v1cdgb - T0 * dVdsat_dVg) * dVgs_eff_dVg; T11 = -T7 * dAlphaz_dVb - T10 - T0 * dVdsat_dVb; T10 = -4.0 * T4 * (T2 - 0.5 + 0.5 * T5) - here->BSIM3v1cddb; tmp = -(T10 + T11 + T12); here->BSIM3v1cbgb = -(here->BSIM3v1cggb + here->BSIM3v1cdgb + T12); here->BSIM3v1cbdb = -(here->BSIM3v1cgdb + here->BSIM3v1cddb + T11); here->BSIM3v1cbsb = -(here->BSIM3v1cgsb + here->BSIM3v1cdsb + tmp); } } else { /* 50/50 partitioning */ if (Vds >= Vdsat) { /* saturation region */ T1 = Vdsat / 3.0; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM3v1phi - T1); T2 = -Two_Third_CoxWL * Vgst; qbulk = -(qgate + T2); qdrn = 0.5 * T2; here->BSIM3v1cggb = One_Third_CoxWL * (3.0 - dVdsat_dVg) * dVgs_eff_dVg; T2 = -One_Third_CoxWL * dVdsat_dVb; here->BSIM3v1cgsb = -(here->BSIM3v1cggb + T2); here->BSIM3v1cgdb = 0.0; here->BSIM3v1cdgb = -One_Third_CoxWL * dVgs_eff_dVg; here->BSIM3v1cddb = 0.0; T4 = One_Third_CoxWL * dVth_dVb; here->BSIM3v1cdsb = -(T4 + here->BSIM3v1cdgb); here->BSIM3v1cbgb = -(here->BSIM3v1cggb - Two_Third_CoxWL * dVgs_eff_dVg); T3 = -(T2 + Two_Third_CoxWL * dVth_dVb); here->BSIM3v1cbsb = -(here->BSIM3v1cbgb + T3); here->BSIM3v1cbdb = 0.0; } else { /* linear region */ Alphaz = Vgst / Vdsat; T1 = 2.0 * Vdsat - Vds; T2 = Vds / (3.0 * T1); T3 = T2 * Vds; T9 = 0.25 * CoxWL; T4 = T9 * Alphaz; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM3v1phi - 0.5 * (Vds - T3)); T5 = T3 / T1; here->BSIM3v1cggb = CoxWL * (1.0 - T5 * dVdsat_dVg) * dVgs_eff_dVg; tmp = -CoxWL * T5 * dVdsat_dVb; here->BSIM3v1cgdb = CoxWL * (T2 - 0.5 + 0.5 * T5); here->BSIM3v1cgsb = -(here->BSIM3v1cggb + here->BSIM3v1cgdb + tmp); T6 = 1.0 / Vdsat; dAlphaz_dVg = T6 * (1.0 - Alphaz * dVdsat_dVg); dAlphaz_dVb = -T6 * (dVth_dVb + Alphaz * dVdsat_dVb); T7 = T1 + T3; qdrn = -T4 * T7; qbulk = - (qgate + qdrn + qdrn); T7 *= T9; T0 = T4 * (2.0 * T5 - 2.0); here->BSIM3v1cdgb = (T0 * dVdsat_dVg - T7 * dAlphaz_dVg) * dVgs_eff_dVg; T12 = T0 * dVdsat_dVb - T7 * dAlphaz_dVb; here->BSIM3v1cddb = T4 * (1.0 - 2.0 * T2 - T5); here->BSIM3v1cdsb = -(here->BSIM3v1cdgb + T12 + here->BSIM3v1cddb); here->BSIM3v1cbgb = -(here->BSIM3v1cggb + 2.0 * here->BSIM3v1cdgb); here->BSIM3v1cbdb = -(here->BSIM3v1cgdb + 2.0 * here->BSIM3v1cddb); here->BSIM3v1cbsb = -(here->BSIM3v1cgsb + 2.0 * here->BSIM3v1cdsb); } } } } else { if (Vbseff < 0.0) { VbseffCV = Vbseff; dVbseffCV_dVb = 1.0; } else { VbseffCV = pParam->BSIM3v1phi - Phis; dVbseffCV_dVb = -dPhis_dVb; } CoxWL = model->BSIM3v1cox * pParam->BSIM3v1weffCV * pParam->BSIM3v1leffCV; Vfb = Vth - pParam->BSIM3v1phi - pParam->BSIM3v1k1 * sqrtPhis; dVfb_dVb = dVth_dVb - pParam->BSIM3v1k1 * dsqrtPhis_dVb; dVfb_dVd = dVth_dVd; if ((VgstNVt > -EXP_THRESHOLD) && (VgstNVt < EXP_THRESHOLD)) { ExpVgst *= ExpVgst; Vgsteff = n * Vtm * log(1.0 + ExpVgst); dVgsteff_dVg = ExpVgst / (1.0 + ExpVgst); dVgsteff_dVd = -dVgsteff_dVg * (dVth_dVd + (Vgs_eff - Vth) / n * dn_dVd) + Vgsteff / n * dn_dVd; dVgsteff_dVb = -dVgsteff_dVg * (dVth_dVb + (Vgs_eff - Vth) / n * dn_dVb) + Vgsteff / n * dn_dVb; dVgsteff_dVg *= dVgs_eff_dVg; } if (model->BSIM3v1capMod == 1) { Arg1 = Vgs_eff - VbseffCV - Vfb - Vgsteff; if (Arg1 <= 0.0) { qgate = CoxWL * Arg1; Cgg = CoxWL * (dVgs_eff_dVg - dVgsteff_dVg); Cgd = -CoxWL * (dVfb_dVd + dVgsteff_dVd); Cgb = -CoxWL * (dVfb_dVb + dVbseffCV_dVb + dVgsteff_dVb); } else { T0 = 0.5 * pParam->BSIM3v1k1; T1 = sqrt(T0 * T0 + Arg1); T2 = CoxWL * T0 / T1; qgate = CoxWL * pParam->BSIM3v1k1 * (T1 - T0); Cgg = T2 * (dVgs_eff_dVg - dVgsteff_dVg); Cgd = -T2 * (dVfb_dVd + dVgsteff_dVd); Cgb = -T2 * (dVfb_dVb + dVbseffCV_dVb + dVgsteff_dVb); } qbulk = -qgate; Cbg = -Cgg; Cbd = -Cgd; Cbb = -Cgb; One_Third_CoxWL = CoxWL / 3.0; Two_Third_CoxWL = 2.0 * One_Third_CoxWL; AbulkCV = Abulk0 * pParam->BSIM3v1abulkCVfactor; dAbulkCV_dVb = pParam->BSIM3v1abulkCVfactor * dAbulk0_dVb; VdsatCV = Vgsteff / AbulkCV; if (VdsatCV < Vds) { dVdsatCV_dVg = 1.0 / AbulkCV; dVdsatCV_dVb = -VdsatCV * dAbulkCV_dVb / AbulkCV; T0 = Vgsteff - VdsatCV / 3.0; dT0_dVg = 1.0 - dVdsatCV_dVg / 3.0; dT0_dVb = -dVdsatCV_dVb / 3.0; qgate += CoxWL * T0; Cgg1 = CoxWL * dT0_dVg; Cgb1 = CoxWL * dT0_dVb + Cgg1 * dVgsteff_dVb; Cgd1 = Cgg1 * dVgsteff_dVd; Cgg1 *= dVgsteff_dVg; Cgg += Cgg1; Cgb += Cgb1; Cgd += Cgd1; T0 = VdsatCV - Vgsteff; dT0_dVg = dVdsatCV_dVg - 1.0; dT0_dVb = dVdsatCV_dVb; qbulk += One_Third_CoxWL * T0; Cbg1 = One_Third_CoxWL * dT0_dVg; Cbb1 = One_Third_CoxWL * dT0_dVb + Cbg1 * dVgsteff_dVb; Cbd1 = Cbg1 * dVgsteff_dVd; Cbg1 *= dVgsteff_dVg; Cbg += Cbg1; Cbb += Cbb1; Cbd += Cbd1; if (model->BSIM3v1xpart > 0.5) T0 = -Two_Third_CoxWL; else if (model->BSIM3v1xpart < 0.5) T0 = -0.4 * CoxWL; else T0 = -One_Third_CoxWL; qsrc = T0 * Vgsteff; Csg = T0 * dVgsteff_dVg; Csb = T0 * dVgsteff_dVb; Csd = T0 * dVgsteff_dVd; Cgb *= dVbseff_dVb; Cbb *= dVbseff_dVb; Csb *= dVbseff_dVb; } else { T0 = AbulkCV * Vds; T1 = 12.0 * (Vgsteff - 0.5 * T0 + 1.e-20); T2 = Vds / T1; T3 = T0 * T2; dT3_dVg = -12.0 * T2 * T2 * AbulkCV; dT3_dVd = 6.0 * T0 * (4.0 * Vgsteff - T0) / T1 / T1 - 0.5; dT3_dVb = 12.0 * T2 * T2 * dAbulkCV_dVb * Vgsteff; qgate += CoxWL * (Vgsteff - 0.5 * Vds + T3); Cgg1 = CoxWL * (1.0 + dT3_dVg); Cgb1 = CoxWL * dT3_dVb + Cgg1 * dVgsteff_dVb; Cgd1 = CoxWL * dT3_dVd + Cgg1 * dVgsteff_dVd; Cgg1 *= dVgsteff_dVg; Cgg += Cgg1; Cgb += Cgb1; Cgd += Cgd1; qbulk += CoxWL * (1.0 - AbulkCV) * (0.5 * Vds - T3); Cbg1 = -CoxWL * ((1.0 - AbulkCV) * dT3_dVg); Cbb1 = -CoxWL * ((1.0 - AbulkCV) * dT3_dVb + (0.5 * Vds - T3) * dAbulkCV_dVb) + Cbg1 * dVgsteff_dVb; Cbd1 = -CoxWL * (1.0 - AbulkCV) * dT3_dVd + Cbg1 * dVgsteff_dVd; Cbg1 *= dVgsteff_dVg; Cbg += Cbg1; Cbb += Cbb1; Cbd += Cbd1; if (model->BSIM3v1xpart > 0.5) { /* 0/100 Charge petition model */ T1 = T1 + T1; qsrc = -CoxWL * (0.5 * Vgsteff + 0.25 * T0 - T0 * T0 / T1); Csg = -CoxWL * (0.5 + 24.0 * T0 * Vds / T1 / T1 * AbulkCV); Csb = -CoxWL * (0.25 * Vds * dAbulkCV_dVb - 12.0 * T0 * Vds / T1 / T1 * (4.0 * Vgsteff - T0) * dAbulkCV_dVb) + Csg * dVgsteff_dVb; Csd = -CoxWL * (0.25 * AbulkCV - 12.0 * AbulkCV * T0 / T1 / T1 * (4.0 * Vgsteff - T0)) + Csg * dVgsteff_dVd; Csg *= dVgsteff_dVg; } else if (model->BSIM3v1xpart < 0.5) { /* 40/60 Charge petition model */ T1 = T1 / 12.0; T2 = 0.5 * CoxWL / (T1 * T1); T3 = Vgsteff * (2.0 * T0 * T0 / 3.0 + Vgsteff * (Vgsteff - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T2 * T3; T4 = 4.0 / 3.0 * Vgsteff * (Vgsteff - T0) + 0.4 * T0 * T0; Csg = -2.0 * qsrc / T1 - T2 * (Vgsteff * (3.0 * Vgsteff - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0); Csb = (qsrc / T1 * Vds + T2 * T4 * Vds) * dAbulkCV_dVb + Csg * dVgsteff_dVb; Csd = (qsrc / T1 + T2 * T4) * AbulkCV + Csg * dVgsteff_dVd; Csg *= dVgsteff_dVg; } else { /* 50/50 Charge petition model */ qsrc = -0.5 * (qgate + qbulk); Csg = -0.5 * (Cgg1 + Cbg1); Csb = -0.5 * (Cgb1 + Cbb1); Csd = -0.5 * (Cgd1 + Cbd1); } Cgb *= dVbseff_dVb; Cbb *= dVbseff_dVb; Csb *= dVbseff_dVb; } qdrn = -(qgate + qbulk + qsrc); here->BSIM3v1cggb = Cgg; here->BSIM3v1cgsb = -(Cgg + Cgd + Cgb); here->BSIM3v1cgdb = Cgd; here->BSIM3v1cdgb = -(Cgg + Cbg + Csg); here->BSIM3v1cdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb + Csg + Csd + Csb); here->BSIM3v1cddb = -(Cgd + Cbd + Csd); here->BSIM3v1cbgb = Cbg; here->BSIM3v1cbsb = -(Cbg + Cbd + Cbb); here->BSIM3v1cbdb = Cbd; } else if (model->BSIM3v1capMod == 2) { V3 = Vfb - Vgs_eff + VbseffCV - DELTA_3; if (Vfb <= 0.0) { T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * Vfb); T2 = -DELTA_3 / T0; } else { T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * Vfb); T2 = DELTA_3 / T0; } T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = Vfb - 0.5 * (V3 + T0); dVfbeff_dVd = (1.0 - T1 - T2) * dVfb_dVd; dVfbeff_dVg = T1 * dVgs_eff_dVg; dVfbeff_dVb = (1.0 - T1 - T2) * dVfb_dVb - T1 * dVbseffCV_dVb; Qac0 = CoxWL * (Vfbeff - Vfb); dQac0_dVg = CoxWL * dVfbeff_dVg; dQac0_dVd = CoxWL * (dVfbeff_dVd - dVfb_dVd); dQac0_dVb = CoxWL * (dVfbeff_dVb - dVfb_dVb); T0 = 0.5 * pParam->BSIM3v1k1; T3 = Vgs_eff - Vfbeff - VbseffCV - Vgsteff; if (pParam->BSIM3v1k1 == 0.0) { T1 = 0.0; T2 = 0.0; } else if (T3 < 0.0) { T1 = T0 + T3 / pParam->BSIM3v1k1; T2 = CoxWL; } else { T1 = sqrt(T0 * T0 + T3); T2 = CoxWL * T0 / T1; } Qsub0 = CoxWL * pParam->BSIM3v1k1 * (T1 - T0); dQsub0_dVg = T2 * (dVgs_eff_dVg - dVfbeff_dVg - dVgsteff_dVg); dQsub0_dVd = -T2 * (dVfbeff_dVd + dVgsteff_dVd); dQsub0_dVb = -T2 * (dVfbeff_dVb + dVbseffCV_dVb + dVgsteff_dVb); One_Third_CoxWL = CoxWL / 3.0; Two_Third_CoxWL = 2.0 * One_Third_CoxWL; AbulkCV = Abulk0 * pParam->BSIM3v1abulkCVfactor; dAbulkCV_dVb = pParam->BSIM3v1abulkCVfactor * dAbulk0_dVb; VdsatCV = Vgsteff / AbulkCV; V4 = VdsatCV - Vds - DELTA_4; T0 = sqrt(V4 * V4 + 4.0 * DELTA_4 * VdsatCV); VdseffCV = VdsatCV - 0.5 * (V4 + T0); T1 = 0.5 * (1.0 + V4 / T0); T2 = DELTA_4 / T0; T3 = (1.0 - T1 - T2) / AbulkCV; dVdseffCV_dVg = T3; dVdseffCV_dVd = T1; dVdseffCV_dVb = -T3 * VdsatCV * dAbulkCV_dVb; T0 = AbulkCV * VdseffCV; T1 = 12.0 * (Vgsteff - 0.5 * T0 + 1e-20); T2 = VdseffCV / T1; T3 = T0 * T2; T4 = (1.0 - 12.0 * T2 * T2 * AbulkCV); T5 = (6.0 * T0 * (4.0 * Vgsteff - T0) / (T1 * T1) - 0.5); T6 = 12.0 * T2 * T2 * Vgsteff; qgate = CoxWL * (Vgsteff - 0.5 * VdseffCV + T3); Cgg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); Cgd1 = CoxWL * T5 * dVdseffCV_dVd + Cgg1 * dVgsteff_dVd; Cgb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Cgg1 * dVgsteff_dVb; Cgg1 *= dVgsteff_dVg; T7 = 1.0 - AbulkCV; qbulk = CoxWL * T7 * (0.5 * VdseffCV - T3); T4 = -T7 * (T4 - 1.0); T5 = -T7 * T5; T6 = -(T7 * T6 + (0.5 * VdseffCV - T3)); Cbg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); Cbd1 = CoxWL * T5 * dVdseffCV_dVd + Cbg1 * dVgsteff_dVd; Cbb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Cbg1 * dVgsteff_dVb; Cbg1 *= dVgsteff_dVg; if (model->BSIM3v1xpart > 0.5) { /* 0/100 Charge petition model */ T1 = T1 + T1; qsrc = -CoxWL * (0.5 * Vgsteff + 0.25 * T0 - T0 * T0 / T1); T7 = (4.0 * Vgsteff - T0) / (T1 * T1); T4 = -(0.5 + 24.0 * T0 * T0 / (T1 * T1)); T5 = -(0.25 * AbulkCV - 12.0 * AbulkCV * T0 * T7); T6 = -(0.25 * VdseffCV - 12.0 * T0 * VdseffCV * T7); Csg = CoxWL * (T4 + T5 * dVdseffCV_dVg); Csd = CoxWL * T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd; Csb = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Csg * dVgsteff_dVb; Csg *= dVgsteff_dVg; } else if (model->BSIM3v1xpart < 0.5) { /* 40/60 Charge petition model */ T1 = T1 / 12.0; T2 = 0.5 * CoxWL / (T1 * T1); T3 = Vgsteff * (2.0 * T0 * T0 / 3.0 + Vgsteff * (Vgsteff - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T2 * T3; T7 = 4.0 / 3.0 * Vgsteff * (Vgsteff - T0) + 0.4 * T0 * T0; T4 = -2.0 * qsrc / T1 - T2 * (Vgsteff * (3.0 * Vgsteff - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0); T5 = (qsrc / T1 + T2 * T7) * AbulkCV; T6 = (qsrc / T1 * VdseffCV + T2 * T7 * VdseffCV); Csg = (T4 + T5 * dVdseffCV_dVg); Csd = T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd; Csb = (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Csg * dVgsteff_dVb; Csg *= dVgsteff_dVg; } else { /* 50/50 Charge petition model */ qsrc = -0.5 * (qgate + qbulk); Csg = -0.5 * (Cgg1 + Cbg1); Csb = -0.5 * (Cgb1 + Cbb1); Csd = -0.5 * (Cgd1 + Cbd1); } qgate += Qac0 + Qsub0; qbulk -= (Qac0 + Qsub0); qdrn = -(qgate + qbulk + qsrc); Cgg = dQac0_dVg + dQsub0_dVg + Cgg1; Cgd = dQac0_dVd + dQsub0_dVd + Cgd1; Cgb = dQac0_dVb + dQsub0_dVb + Cgb1; Cbg = Cbg1 - dQac0_dVg - dQsub0_dVg; Cbd = Cbd1 - dQac0_dVd - dQsub0_dVd; Cbb = Cbb1 - dQac0_dVb - dQsub0_dVb; Cgb *= dVbseff_dVb; Cbb *= dVbseff_dVb; Csb *= dVbseff_dVb; here->BSIM3v1cggb = Cgg; here->BSIM3v1cgsb = -(Cgg + Cgd + Cgb); here->BSIM3v1cgdb = Cgd; here->BSIM3v1cdgb = -(Cgg + Cbg + Csg); here->BSIM3v1cdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb + Csg + Csd + Csb); here->BSIM3v1cddb = -(Cgd + Cbd + Csd); here->BSIM3v1cbgb = Cbg; here->BSIM3v1cbsb = -(Cbg + Cbd + Cbb); here->BSIM3v1cbdb = Cbd; } /* Non-quasi-static Model */ if (here->BSIM3v1nqsMod) { qcheq = -qbulk - qgate; qbulk = qgate = qdrn = qsrc = 0.0; here->BSIM3v1cqgb = -(here->BSIM3v1cggb + here->BSIM3v1cbgb); here->BSIM3v1cqdb = -(here->BSIM3v1cgdb + here->BSIM3v1cbdb); here->BSIM3v1cqsb = -(here->BSIM3v1cgsb + here->BSIM3v1cbsb); here->BSIM3v1cqbb = here->BSIM3v1cggb + here->BSIM3v1cgdb + here->BSIM3v1cgsb + here->BSIM3v1cbgb + here->BSIM3v1cbdb + here->BSIM3v1cbsb; here->BSIM3v1cggb = here->BSIM3v1cgsb = here->BSIM3v1cgdb = 0.0; here->BSIM3v1cdgb = here->BSIM3v1cdsb = here->BSIM3v1cddb = 0.0; here->BSIM3v1cbgb = here->BSIM3v1cbsb = here->BSIM3v1cbdb = 0.0; T0 = pParam->BSIM3v1leffCV * pParam->BSIM3v1leffCV; here->BSIM3v1tconst = pParam->BSIM3v1u0temp * pParam->BSIM3v1elm / CoxWL / T0; if (qcheq == 0.0) here->BSIM3v1tconst = 0.0; else if (qcheq < 0.0) here->BSIM3v1tconst = -here->BSIM3v1tconst; gtau_drift = fabs(here->BSIM3v1tconst * qcheq); gtau_diff = 16.0 * pParam->BSIM3v1u0temp * model->BSIM3v1vtm / T0; here->BSIM3v1gtau = gtau_drift + gtau_diff; *(ckt->CKTstate0 + here->BSIM3v1qcheq) = qcheq; if (ckt->CKTmode & MODEINITTRAN) *(ckt->CKTstate1 + here->BSIM3v1qcheq) = *(ckt->CKTstate0 + here->BSIM3v1qcheq); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM3v1qcheq); if (error) return (error); } else { here->BSIM3v1cqgb = here->BSIM3v1cqdb = here->BSIM3v1cqsb = here->BSIM3v1cqbb = 0.0; here->BSIM3v1gtau = 0.0; } } finished: /* returning Values to Calling Routine */ /* * COMPUTE EQUIVALENT DRAIN CURRENT SOURCE */ here->BSIM3v1cd = here->BSIM3v1mode * cdrain - here->BSIM3v1cbd; if (ChargeComputationNeeded) { /* charge storage elements * bulk-drain and bulk-source depletion capacitances * czbd : zero bias drain junction capacitance * czbs : zero bias source junction capacitance * czbdsw: zero bias drain junction sidewall capacitance along field oxide * czbssw: zero bias source junction sidewall capacitance along field oxide * czbdswg: zero bias drain junction sidewall capacitance along gate side * czbsswg: zero bias source junction sidewall capacitance along gate side */ czbd = model->BSIM3v1unitAreaJctCap * here->BSIM3v1drainArea; czbs = model->BSIM3v1unitAreaJctCap * here->BSIM3v1sourceArea; if (here->BSIM3v1drainPerimeter < pParam->BSIM3v1weff) { czbdswg = model->BSIM3v1unitLengthGateSidewallJctCap * here->BSIM3v1drainPerimeter; czbdsw = 0.0; } else { czbdsw = model->BSIM3v1unitLengthSidewallJctCap * (here->BSIM3v1drainPerimeter - pParam->BSIM3v1weff); czbdswg = model->BSIM3v1unitLengthGateSidewallJctCap * pParam->BSIM3v1weff; } if (here->BSIM3v1sourcePerimeter < pParam->BSIM3v1weff) { czbssw = 0.0; czbsswg = model->BSIM3v1unitLengthGateSidewallJctCap * here->BSIM3v1sourcePerimeter; } else { czbssw = model->BSIM3v1unitLengthSidewallJctCap * (here->BSIM3v1sourcePerimeter - pParam->BSIM3v1weff); czbsswg = model->BSIM3v1unitLengthGateSidewallJctCap * pParam->BSIM3v1weff; } PhiB = model->BSIM3v1bulkJctPotential; PhiBSW = model->BSIM3v1sidewallJctPotential; PhiBSWG = model->BSIM3v1GatesidewallJctPotential; MJ = model->BSIM3v1bulkJctBotGradingCoeff; MJSW = model->BSIM3v1bulkJctSideGradingCoeff; MJSWG = model->BSIM3v1bulkJctGateSideGradingCoeff; /* Source Bulk Junction */ if (vbs == 0.0) { *(ckt->CKTstate0 + here->BSIM3v1qbs) = 0.0; here->BSIM3v1capbs = czbs + czbssw + czbsswg; } else if (vbs < 0.0) { if (czbs > 0.0) { arg = 1.0 - vbs / PhiB; if (MJ == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJ * log(arg)); *(ckt->CKTstate0 + here->BSIM3v1qbs) = PhiB * czbs * (1.0 - arg * sarg) / (1.0 - MJ); here->BSIM3v1capbs = czbs * sarg; } else { *(ckt->CKTstate0 + here->BSIM3v1qbs) = 0.0; here->BSIM3v1capbs = 0.0; } if (czbssw > 0.0) { arg = 1.0 - vbs / PhiBSW; if (MJSW == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSW * log(arg)); *(ckt->CKTstate0 + here->BSIM3v1qbs) += PhiBSW * czbssw * (1.0 - arg * sarg) / (1.0 - MJSW); here->BSIM3v1capbs += czbssw * sarg; } if (czbsswg > 0.0) { arg = 1.0 - vbs / PhiBSWG; if (MJSWG == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSWG * log(arg)); *(ckt->CKTstate0 + here->BSIM3v1qbs) += PhiBSWG * czbsswg * (1.0 - arg * sarg) / (1.0 - MJSWG); here->BSIM3v1capbs += czbsswg * sarg; } } else { *(ckt->CKTstate0+here->BSIM3v1qbs) = vbs * (czbs + czbssw + czbsswg) + vbs * vbs * (czbs * MJ * 0.5 / PhiB + czbssw * MJSW * 0.5 / PhiBSW + czbsswg * MJSWG * 0.5 / PhiBSWG); here->BSIM3v1capbs = czbs + czbssw + czbsswg + vbs * (czbs * MJ / PhiB + czbssw * MJSW / PhiBSW + czbsswg * MJSWG / PhiBSWG); } /* Drain Bulk Junction */ if (vbd == 0.0) { *(ckt->CKTstate0 + here->BSIM3v1qbd) = 0.0; here->BSIM3v1capbd = czbd + czbdsw + czbdswg; } else if (vbd < 0.0) { if (czbd > 0.0) { arg = 1.0 - vbd / PhiB; if (MJ == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJ * log(arg)); *(ckt->CKTstate0 + here->BSIM3v1qbd) = PhiB * czbd * (1.0 - arg * sarg) / (1.0 - MJ); here->BSIM3v1capbd = czbd * sarg; } else { *(ckt->CKTstate0 + here->BSIM3v1qbd) = 0.0; here->BSIM3v1capbd = 0.0; } if (czbdsw > 0.0) { arg = 1.0 - vbd / PhiBSW; if (MJSW == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSW * log(arg)); *(ckt->CKTstate0 + here->BSIM3v1qbd) += PhiBSW * czbdsw * (1.0 - arg * sarg) / (1.0 - MJSW); here->BSIM3v1capbd += czbdsw * sarg; } if (czbdswg > 0.0) { arg = 1.0 - vbd / PhiBSWG; if (MJSWG == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSWG * log(arg)); *(ckt->CKTstate0 + here->BSIM3v1qbd) += PhiBSWG * czbdswg * (1.0 - arg * sarg) / (1.0 - MJSWG); here->BSIM3v1capbd += czbdswg * sarg; } } else { *(ckt->CKTstate0+here->BSIM3v1qbd) = vbd * (czbd + czbdsw + czbdswg) + vbd * vbd * (czbd * MJ * 0.5 / PhiB + czbdsw * MJSW * 0.5 / PhiBSW + czbdswg * MJSWG * 0.5 / PhiBSWG); here->BSIM3v1capbd = czbd + czbdsw + czbdswg + vbd * (czbd * MJ / PhiB + czbdsw * MJSW / PhiBSW + czbdswg * MJSWG / PhiBSWG); } } /* * check convergence */ if ((here->BSIM3v1off == 0) || (!(ckt->CKTmode & MODEINITFIX))) { if (Check == 1) { ckt->CKTnoncon++; #ifndef NEWCONV } else { tol = ckt->CKTreltol * MAX(fabs(cdhat), fabs(here->BSIM3v1cd)) + ckt->CKTabstol; if (fabs(cdhat - here->BSIM3v1cd) >= tol) { ckt->CKTnoncon++; } else { tol = ckt->CKTreltol * MAX(fabs(cbhat), fabs(here->BSIM3v1cbs + here->BSIM3v1cbd)) + ckt->CKTabstol; if (fabs(cbhat - (here->BSIM3v1cbs + here->BSIM3v1cbd)) > tol) { ckt->CKTnoncon++; } } #endif /* NEWCONV */ } } *(ckt->CKTstate0 + here->BSIM3v1vbs) = vbs; *(ckt->CKTstate0 + here->BSIM3v1vbd) = vbd; *(ckt->CKTstate0 + here->BSIM3v1vgs) = vgs; *(ckt->CKTstate0 + here->BSIM3v1vds) = vds; /* bulk and channel charge plus overlaps */ if (!ChargeComputationNeeded) goto line850; #ifndef NOBYPASS line755: #endif ag0 = ckt->CKTag[0]; if (model->BSIM3v1capMod == 0) { cgdo = pParam->BSIM3v1cgdo; qgdo = pParam->BSIM3v1cgdo * vgd; cgso = pParam->BSIM3v1cgso; qgso = pParam->BSIM3v1cgso * vgs; } else if (model->BSIM3v1capMod == 1) { if (vgd < 0.0) { T1 = sqrt(1.0 - 4.0 * vgd / pParam->BSIM3v1ckappa); cgdo = pParam->BSIM3v1cgdo + pParam->BSIM3v1weffCV * pParam->BSIM3v1cgdl / T1; qgdo = pParam->BSIM3v1cgdo * vgd - pParam->BSIM3v1weffCV * 0.5 * pParam->BSIM3v1cgdl * pParam->BSIM3v1ckappa * (T1 - 1.0); } else { cgdo = pParam->BSIM3v1cgdo + pParam->BSIM3v1weffCV * pParam->BSIM3v1cgdl; qgdo = (pParam->BSIM3v1weffCV * pParam->BSIM3v1cgdl + pParam->BSIM3v1cgdo) * vgd; } if (vgs < 0.0) { T1 = sqrt(1.0 - 4.0 * vgs / pParam->BSIM3v1ckappa); cgso = pParam->BSIM3v1cgso + pParam->BSIM3v1weffCV * pParam->BSIM3v1cgsl / T1; qgso = pParam->BSIM3v1cgso * vgs - pParam->BSIM3v1weffCV * 0.5 * pParam->BSIM3v1cgsl * pParam->BSIM3v1ckappa * (T1 - 1.0); } else { cgso = pParam->BSIM3v1cgso + pParam->BSIM3v1weffCV * pParam->BSIM3v1cgsl; qgso = (pParam->BSIM3v1weffCV * pParam->BSIM3v1cgsl + pParam->BSIM3v1cgso) * vgs; } } else { T0 = vgd + DELTA_1; T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); T3 = pParam->BSIM3v1weffCV * pParam->BSIM3v1cgdl; T4 = sqrt(1.0 - 4.0 * T2 / pParam->BSIM3v1ckappa); cgdo = pParam->BSIM3v1cgdo + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgdo = (pParam->BSIM3v1cgdo + T3) * vgd - T3 * (T2 + 0.5 * pParam->BSIM3v1ckappa * (T4 - 1.0)); T0 = vgs + DELTA_1; T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); T3 = pParam->BSIM3v1weffCV * pParam->BSIM3v1cgsl; T4 = sqrt(1.0 - 4.0 * T2 / pParam->BSIM3v1ckappa); cgso = pParam->BSIM3v1cgso + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgso = (pParam->BSIM3v1cgso + T3) * vgs - T3 * (T2 + 0.5 * pParam->BSIM3v1ckappa * (T4 - 1.0)); } if (here->BSIM3v1mode > 0) { gcdgb = (here->BSIM3v1cdgb - cgdo) * ag0; gcddb = (here->BSIM3v1cddb + here->BSIM3v1capbd + cgdo) * ag0; gcdsb = here->BSIM3v1cdsb * ag0; gcsgb = -(here->BSIM3v1cggb + here->BSIM3v1cbgb + here->BSIM3v1cdgb + cgso) * ag0; gcsdb = -(here->BSIM3v1cgdb + here->BSIM3v1cbdb + here->BSIM3v1cddb) * ag0; gcssb = (here->BSIM3v1capbs + cgso - (here->BSIM3v1cgsb + here->BSIM3v1cbsb + here->BSIM3v1cdsb)) * ag0; gcggb = (here->BSIM3v1cggb + cgdo + cgso + pParam->BSIM3v1cgbo ) * ag0; gcgdb = (here->BSIM3v1cgdb - cgdo) * ag0; gcgsb = (here->BSIM3v1cgsb - cgso) * ag0; gcbgb = (here->BSIM3v1cbgb - pParam->BSIM3v1cgbo) * ag0; gcbdb = (here->BSIM3v1cbdb - here->BSIM3v1capbd) * ag0; gcbsb = (here->BSIM3v1cbsb - here->BSIM3v1capbs) * ag0; gcqgb = here->BSIM3v1cqgb * ag0; gcqdb = here->BSIM3v1cqdb * ag0; gcqsb = here->BSIM3v1cqsb * ag0; gcqbb = here->BSIM3v1cqbb * ag0; T0 = here->BSIM3v1tconst * qdef; here->BSIM3v1gtg = T0 * here->BSIM3v1cqgb; here->BSIM3v1gtb = T0 * here->BSIM3v1cqbb; here->BSIM3v1gtd = T0 * here->BSIM3v1cqdb; here->BSIM3v1gts = T0 * here->BSIM3v1cqsb; sxpart = 0.6; dxpart = 0.4; /* compute total terminal charge */ qgd = qgdo; qgs = qgso; qgb = pParam->BSIM3v1cgbo * vgb; qgate += qgd + qgs + qgb; qbulk -= qgb; qdrn -= qgd; qsrc = -(qgate + qbulk + qdrn); } else { gcsgb = (here->BSIM3v1cdgb - cgso) * ag0; gcsdb = here->BSIM3v1cdsb * ag0; gcssb = (here->BSIM3v1cddb + here->BSIM3v1capbs + cgso) * ag0; gcdgb = -(here->BSIM3v1cggb + here->BSIM3v1cbgb + here->BSIM3v1cdgb + cgdo) * ag0; gcdsb = -(here->BSIM3v1cgdb + here->BSIM3v1cbdb + here->BSIM3v1cddb) * ag0; gcddb = (here->BSIM3v1capbd + cgdo - (here->BSIM3v1cgsb + here->BSIM3v1cbsb + here->BSIM3v1cdsb)) * ag0; gcggb = (here->BSIM3v1cggb + cgdo + cgso + pParam->BSIM3v1cgbo ) * ag0; gcgdb = (here->BSIM3v1cgsb - cgdo) * ag0; gcgsb = (here->BSIM3v1cgdb - cgso) * ag0; gcbgb = (here->BSIM3v1cbgb - pParam->BSIM3v1cgbo) * ag0; gcbdb = (here->BSIM3v1cbsb - here->BSIM3v1capbd) * ag0; gcbsb = (here->BSIM3v1cbdb - here->BSIM3v1capbs) * ag0; gcqgb = here->BSIM3v1cqgb * ag0; gcqdb = here->BSIM3v1cqsb * ag0; gcqsb = here->BSIM3v1cqdb * ag0; gcqbb = here->BSIM3v1cqbb * ag0; T0 = here->BSIM3v1tconst * qdef; here->BSIM3v1gtg = T0 * here->BSIM3v1cqgb; here->BSIM3v1gtb = T0 * here->BSIM3v1cqbb; here->BSIM3v1gtd = T0 * here->BSIM3v1cqdb; here->BSIM3v1gts = T0 * here->BSIM3v1cqsb; dxpart = 0.6; sxpart = 0.4; /* compute total terminal charge */ qgd = qgdo; qgs = qgso; qgb = pParam->BSIM3v1cgbo * vgb; qgate += qgd + qgs + qgb; qbulk -= qgb; qsrc = qdrn - qgs; qdrn = -(qgate + qbulk + qsrc); } here->BSIM3v1cgdo = cgdo; here->BSIM3v1cgso = cgso; /* added by Mansun 11/1/93 */ if (here->BSIM3v1nqsMod) { *(ckt->CKTstate0 + here->BSIM3v1qcdump) = qdef; if (ckt->CKTmode & MODEINITTRAN) *(ckt->CKTstate1 + here->BSIM3v1qcdump) = *(ckt->CKTstate0 + here->BSIM3v1qcdump); error = NIintegrate(ckt, &gqdef, &cqdef, 1.0, here->BSIM3v1qcdump); if (error) return (error); } else { gqdef = cqdef = 0.0; } if (ByPass) goto line860; /* End added by Mansun 11/1/93 */ *(ckt->CKTstate0 + here->BSIM3v1qg) = qgate; *(ckt->CKTstate0 + here->BSIM3v1qd) = qdrn - *(ckt->CKTstate0 + here->BSIM3v1qbd); *(ckt->CKTstate0 + here->BSIM3v1qb) = qbulk + *(ckt->CKTstate0 + here->BSIM3v1qbd) + *(ckt->CKTstate0 + here->BSIM3v1qbs); /* store small signal parameters */ if (ckt->CKTmode & MODEINITSMSIG) { goto line1000; } if (!ChargeComputationNeeded) goto line850; if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->BSIM3v1qb) = *(ckt->CKTstate0 + here->BSIM3v1qb); *(ckt->CKTstate1 + here->BSIM3v1qg) = *(ckt->CKTstate0 + here->BSIM3v1qg); *(ckt->CKTstate1 + here->BSIM3v1qd) = *(ckt->CKTstate0 + here->BSIM3v1qd); } error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM3v1qb); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM3v1qg); if (error) return(error); error = NIintegrate(ckt,&geq, &ceq, 0.0, here->BSIM3v1qd); if (error) return(error); goto line860; line850: /* initialize to zero charge conductance and current */ ceqqg = ceqqb = ceqqd = 0.0; cqcheq = cqdef = 0.0; gcdgb = gcddb = gcdsb = 0.0; gcsgb = gcsdb = gcssb = 0.0; gcggb = gcgdb = gcgsb = 0.0; gcbgb = gcbdb = gcbsb = 0.0; gcqgb = gcqdb = gcqsb = gcqbb = 0.0; here->BSIM3v1gtg = here->BSIM3v1gtd = here->BSIM3v1gts = here->BSIM3v1gtb = 0.0; gqdef = 0.0; sxpart = (1.0 - (dxpart = (here->BSIM3v1mode > 0) ? 0.4 : 0.6)); if (here->BSIM3v1nqsMod) here->BSIM3v1gtau = 16.0 * pParam->BSIM3v1u0temp * model->BSIM3v1vtm / Leff / Leff; else here->BSIM3v1gtau = 0.0; goto line900; line860: /* evaluate equivalent charge current */ cqgate = *(ckt->CKTstate0 + here->BSIM3v1cqg); cqbulk = *(ckt->CKTstate0 + here->BSIM3v1cqb); cqdrn = *(ckt->CKTstate0 + here->BSIM3v1cqd); ceqqg = cqgate - gcggb * vgb + gcgdb * vbd + gcgsb * vbs + (here->BSIM3v1gtg * vgb - here->BSIM3v1gtd * vbd - here->BSIM3v1gts * vbs); ceqqb = cqbulk - gcbgb * vgb + gcbdb * vbd + gcbsb * vbs; ceqqd = cqdrn - gcdgb * vgb + gcddb * vbd + gcdsb * vbs - dxpart * (here->BSIM3v1gtg * vgb - here->BSIM3v1gtd * vbd - here->BSIM3v1gts * vbs); cqcheq = *(ckt->CKTstate0 + here->BSIM3v1cqcheq) - (gcqgb * vgb - gcqdb * vbd - gcqsb * vbs) + (here->BSIM3v1gtg * vgb - here->BSIM3v1gtd * vbd - here->BSIM3v1gts * vbs); if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->BSIM3v1cqb) = *(ckt->CKTstate0 + here->BSIM3v1cqb); *(ckt->CKTstate1 + here->BSIM3v1cqg) = *(ckt->CKTstate0 + here->BSIM3v1cqg); *(ckt->CKTstate1 + here->BSIM3v1cqd) = *(ckt->CKTstate0 + here->BSIM3v1cqd); *(ckt->CKTstate1 + here->BSIM3v1cqcheq) = *(ckt->CKTstate0 + here->BSIM3v1cqcheq); *(ckt->CKTstate1 + here->BSIM3v1cqcdump) = *(ckt->CKTstate0 + here->BSIM3v1cqcdump); } /* * load current vector */ line900: if (here->BSIM3v1mode >= 0) { Gm = here->BSIM3v1gm; Gmbs = here->BSIM3v1gmbs; FwdSum = Gm + Gmbs; RevSum = 0.0; cdreq = model->BSIM3v1type * (cdrain - here->BSIM3v1gds * vds - Gm * vgs - Gmbs * vbs); ceqbs = -here->BSIM3v1csub; ceqbd = 0.0; gbspsp = -here->BSIM3v1gbds - here->BSIM3v1gbgs - here->BSIM3v1gbbs; gbbdp = -here->BSIM3v1gbds; gbbsp = here->BSIM3v1gbds + here->BSIM3v1gbgs + here->BSIM3v1gbbs; gbspg = here->BSIM3v1gbgs; gbspb = here->BSIM3v1gbbs; gbspdp = here->BSIM3v1gbds; gbdpdp = 0.0; gbdpg = 0.0; gbdpb = 0.0; gbdpsp = 0.0; } else { Gm = -here->BSIM3v1gm; Gmbs = -here->BSIM3v1gmbs; FwdSum = 0.0; RevSum = -(Gm + Gmbs); cdreq = -model->BSIM3v1type * (cdrain + here->BSIM3v1gds * vds + Gm * vgd + Gmbs * vbd); ceqbs = 0.0; ceqbd = -here->BSIM3v1csub; gbspsp = 0.0; gbbdp = here->BSIM3v1gbds + here->BSIM3v1gbgs + here->BSIM3v1gbbs; gbbsp = -here->BSIM3v1gbds; gbspg = 0.0; gbspb = 0.0; gbspdp = 0.0; gbdpdp = -here->BSIM3v1gbds - here->BSIM3v1gbgs - here->BSIM3v1gbbs; gbdpg = here->BSIM3v1gbgs; gbdpb = here->BSIM3v1gbbs; gbdpsp = here->BSIM3v1gbds; } if (model->BSIM3v1type > 0) { ceqbs += (here->BSIM3v1cbs - (here->BSIM3v1gbs - ckt->CKTgmin) * vbs); ceqbd += (here->BSIM3v1cbd - (here->BSIM3v1gbd - ckt->CKTgmin) * vbd); ceqqg = ceqqg; ceqqb = ceqqb; ceqqd = ceqqd; cqcheq = cqcheq; } else { ceqbs = -ceqbs - (here->BSIM3v1cbs - (here->BSIM3v1gbs - ckt->CKTgmin) * vbs); ceqbd = -ceqbd - (here->BSIM3v1cbd - (here->BSIM3v1gbd - ckt->CKTgmin) * vbd); ceqqg = -ceqqg; ceqqb = -ceqqb; ceqqd = -ceqqd; cqcheq = -cqcheq; } (*(ckt->CKTrhs + here->BSIM3v1gNode) -= m * ceqqg); (*(ckt->CKTrhs + here->BSIM3v1bNode) -= m * (ceqbs + ceqbd + ceqqb)); (*(ckt->CKTrhs + here->BSIM3v1dNodePrime) += m * (ceqbd - cdreq - ceqqd)); (*(ckt->CKTrhs + here->BSIM3v1sNodePrime) += m * (cdreq + ceqbs + ceqqg + ceqqb + ceqqd)); *(ckt->CKTrhs + here->BSIM3v1qNode) += m * (cqcheq - cqdef); /* * load y matrix */ (*(here->BSIM3v1DdPtr) += m * here->BSIM3v1drainConductance); (*(here->BSIM3v1GgPtr) += m * (gcggb - here->BSIM3v1gtg)); (*(here->BSIM3v1SsPtr) += m * here->BSIM3v1sourceConductance); (*(here->BSIM3v1BbPtr) += m * ((here->BSIM3v1gbd + here->BSIM3v1gbs - gcbgb - gcbdb - gcbsb) - here->BSIM3v1gbbs)); (*(here->BSIM3v1DPdpPtr) += m * ((here->BSIM3v1drainConductance + here->BSIM3v1gds + here->BSIM3v1gbd + RevSum + gcddb) + dxpart * here->BSIM3v1gtd + gbdpdp)); (*(here->BSIM3v1SPspPtr) += m * ((here->BSIM3v1sourceConductance + here->BSIM3v1gds + here->BSIM3v1gbs + FwdSum + gcssb) + sxpart * here->BSIM3v1gts + gbspsp)); (*(here->BSIM3v1DdpPtr) -= m * here->BSIM3v1drainConductance); (*(here->BSIM3v1GbPtr) -= m * (gcggb + gcgdb + gcgsb + here->BSIM3v1gtb)); (*(here->BSIM3v1GdpPtr) += m * (gcgdb - here->BSIM3v1gtd)); (*(here->BSIM3v1GspPtr) += m * (gcgsb - here->BSIM3v1gts)); (*(here->BSIM3v1SspPtr) -= m * here->BSIM3v1sourceConductance); (*(here->BSIM3v1BgPtr) += m * (gcbgb - here->BSIM3v1gbgs)); (*(here->BSIM3v1BdpPtr) += m * (gcbdb - here->BSIM3v1gbd + gbbdp)); (*(here->BSIM3v1BspPtr) += m * (gcbsb - here->BSIM3v1gbs + gbbsp)); (*(here->BSIM3v1DPdPtr) -= m * here->BSIM3v1drainConductance); (*(here->BSIM3v1DPgPtr) += m * ((Gm + gcdgb) + dxpart * here->BSIM3v1gtg + gbdpg)); (*(here->BSIM3v1DPbPtr) -= m * ((here->BSIM3v1gbd - Gmbs + gcdgb + gcddb + gcdsb - dxpart * here->BSIM3v1gtb) - gbdpb)); (*(here->BSIM3v1DPspPtr) -= m * ((here->BSIM3v1gds + FwdSum - gcdsb - dxpart * here->BSIM3v1gts) - gbdpsp)); (*(here->BSIM3v1SPgPtr) += m * (gcsgb - Gm + sxpart * here->BSIM3v1gtg + gbspg)); (*(here->BSIM3v1SPsPtr) -= m * here->BSIM3v1sourceConductance); (*(here->BSIM3v1SPbPtr) -= m * ((here->BSIM3v1gbs + Gmbs + gcsgb + gcsdb + gcssb - sxpart * here->BSIM3v1gtb) - gbspb)); (*(here->BSIM3v1SPdpPtr) -= m * ((here->BSIM3v1gds + RevSum - gcsdb - sxpart * here->BSIM3v1gtd - here->BSIM3v1gbd) - gbspdp)); *(here->BSIM3v1QqPtr) += m * ((gqdef + here->BSIM3v1gtau)); *(here->BSIM3v1DPqPtr) += m * ((dxpart * here->BSIM3v1gtau)); *(here->BSIM3v1SPqPtr) += m * ((sxpart * here->BSIM3v1gtau)); *(here->BSIM3v1GqPtr) -= m * here->BSIM3v1gtau; *(here->BSIM3v1QgPtr) += m * (-gcqgb + here->BSIM3v1gtg); *(here->BSIM3v1QdpPtr) += m * (-gcqdb + here->BSIM3v1gtd); *(here->BSIM3v1QspPtr) += m * (-gcqsb + here->BSIM3v1gts); *(here->BSIM3v1QbPtr) += m * (-gcqbb + here->BSIM3v1gtb); line1000: ; } /* End of Mosfet Instance */ } /* End of Model Instance */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v1/b3v1noi.c0000644000175000017500000002707313546075722022105 0ustar carstencarsten/********** * Copyright 1990 Regents of the University of California. All rights reserved. * File: b3noi.c * Author: 1995 Min-Chie Jeng and Mansun Chan. * Modified by Paolo Nenzi 2002 **********/ /* * Release Notes: * BSIM3v1v3.1, Released by yuhua 96/12/08 */ #include "ngspice/ngspice.h" #include "bsim3v1def.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" #include "ngspice/const.h" /* jwan */ /* * BSIM3v1noise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with MOSFET's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the MOSFET's is summed with the variable "OnDens". */ /* Channel thermal and flicker noises are calculated based on the value of model->BSIM3v1noiMod. If model->BSIM3v1noiMod = 1, Channel thermal noise = SPICE2 model Flicker noise = SPICE2 model If model->BSIM3v1noiMod = 2, Channel thermal noise = BSIM3v1 model Flicker noise = BSIM3v1 model If model->BSIM3v1noiMod = 3, Channel thermal noise = SPICE2 model Flicker noise = BSIM3v1 model If model->BSIM3v1noiMod = 4, Channel thermal noise = BSIM3v1 model Flicker noise = SPICE2 model */ static double StrongInversionNoiseEval_b3(double vgs, double vds, BSIM3v1model *model, BSIM3v1instance *here, double freq, double temp) { struct bsim3v1SizeDependParam *pParam; double cd, esat, DelClm, EffFreq, N0, Nl, Vgst; double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi; pParam = here->pParam; cd = fabs(here->BSIM3v1cd) * here->BSIM3v1m; if (vds > here->BSIM3v1vdsat) { esat = 2.0 * pParam->BSIM3v1vsattemp / here->BSIM3v1ueff; T0 = ((((vds - here->BSIM3v1vdsat) / pParam->BSIM3v1litl) + model->BSIM3v1em) / esat); DelClm = pParam->BSIM3v1litl * log (MAX(T0, N_MINLOG)); } else DelClm = 0.0; EffFreq = pow(freq, model->BSIM3v1ef); T1 = CHARGE * CHARGE * 8.62e-5 * cd * temp * here->BSIM3v1ueff; T2 = 1.0e8 * EffFreq * model->BSIM3v1cox * pParam->BSIM3v1leff * pParam->BSIM3v1leff; Vgst = vgs - here->BSIM3v1von; N0 = model->BSIM3v1cox * Vgst / CHARGE; if (N0 < 0.0) N0 = 0.0; Nl = model->BSIM3v1cox * (Vgst - MIN(vds, here->BSIM3v1vdsat)) / CHARGE; if (Nl < 0.0) Nl = 0.0; T3 = model->BSIM3v1oxideTrapDensityA * log(MAX(((N0 + 2.0e14) / (Nl + 2.0e14)), N_MINLOG)); T4 = model->BSIM3v1oxideTrapDensityB * (N0 - Nl); T5 = model->BSIM3v1oxideTrapDensityC * 0.5 * (N0 * N0 - Nl * Nl); T6 = 8.62e-5 * temp * cd * cd; T7 = 1.0e8 * EffFreq * pParam->BSIM3v1leff * pParam->BSIM3v1leff * pParam->BSIM3v1weff * here->BSIM3v1m; T8 = model->BSIM3v1oxideTrapDensityA + model->BSIM3v1oxideTrapDensityB * Nl + model->BSIM3v1oxideTrapDensityC * Nl * Nl; T9 = (Nl + 2.0e14) * (Nl + 2.0e14); Ssi = T1 / T2 * (T3 + T4 + T5) + T6 / T7 * DelClm * T8 / T9; return Ssi; } int BSIM3v1noise (int mode, int operation, GENmodel *inModel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; BSIM3v1model *model = (BSIM3v1model *)inModel; BSIM3v1instance *here; struct bsim3v1SizeDependParam *pParam; double tempOnoise; double tempInoise; double noizDens[BSIM3v1NSRCS]; double lnNdens[BSIM3v1NSRCS]; double vgs, vds, Slimit; double T1, T10, T11; double Ssi, Swi; int i; /* define the names of the noise sources */ static char *BSIM3v1nNames[BSIM3v1NSRCS] = { /* Note that we have to keep the order */ ".rd", /* noise due to rd */ /* consistent with the index definitions */ ".rs", /* noise due to rs */ /* in BSIM3v1defs.h */ ".id", /* noise due to id */ ".1overf", /* flicker (1/f) noise */ "" /* total transistor noise */ }; for (; model != NULL; model = BSIM3v1nextModel(model)) { for (here = BSIM3v1instances(model); here != NULL; here = BSIM3v1nextInstance(here)) { pParam = here->pParam; switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i = 0; i < BSIM3v1NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise.%s%s", here->BSIM3v1name, BSIM3v1nNames[i]); } break; case INT_NOIZ: for (i = 0; i < BSIM3v1NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total.%s%s", here->BSIM3v1name, BSIM3v1nNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total.%s%s", here->BSIM3v1name, BSIM3v1nNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: NevalSrc(&noizDens[BSIM3v1RDNOIZ], &lnNdens[BSIM3v1RDNOIZ], ckt, THERMNOISE, here->BSIM3v1dNodePrime, here->BSIM3v1dNode, here->BSIM3v1drainConductance * here->BSIM3v1m); NevalSrc(&noizDens[BSIM3v1RSNOIZ], &lnNdens[BSIM3v1RSNOIZ], ckt, THERMNOISE, here->BSIM3v1sNodePrime, here->BSIM3v1sNode, here->BSIM3v1sourceConductance * here->BSIM3v1m); switch( model->BSIM3v1noiMod ) { case 1: case 3: NevalSrc(&noizDens[BSIM3v1IDNOIZ], &lnNdens[BSIM3v1IDNOIZ], ckt, THERMNOISE, here->BSIM3v1dNodePrime, here->BSIM3v1sNodePrime, (2.0 / 3.0 * fabs(here->BSIM3v1gm + here->BSIM3v1gds + here->BSIM3v1gmbs) * here->BSIM3v1m)); break; case 2: case 4: NevalSrc(&noizDens[BSIM3v1IDNOIZ], &lnNdens[BSIM3v1IDNOIZ], ckt, THERMNOISE, here->BSIM3v1dNodePrime, here->BSIM3v1sNodePrime, (here->BSIM3v1ueff * fabs((here->BSIM3v1qinv * here->BSIM3v1m) / (pParam->BSIM3v1leff * pParam->BSIM3v1leff)))); break; } NevalSrc(&noizDens[BSIM3v1FLNOIZ], NULL, ckt, N_GAIN, here->BSIM3v1dNodePrime, here->BSIM3v1sNodePrime, (double) 0.0); switch( model->BSIM3v1noiMod ) { case 1: case 4: noizDens[BSIM3v1FLNOIZ] *= model->BSIM3v1kf * exp(model->BSIM3v1af * log(MAX(fabs(here->BSIM3v1cd * here->BSIM3v1m), N_MINLOG))) / (pow(data->freq, model->BSIM3v1ef) * pParam->BSIM3v1leff * pParam->BSIM3v1leff * model->BSIM3v1cox); break; case 2: case 3: vgs = *(ckt->CKTstates[0] + here->BSIM3v1vgs); vds = *(ckt->CKTstates[0] + here->BSIM3v1vds); if (vds < 0.0) { vds = -vds; vgs = vgs + vds; } if (vgs >= here->BSIM3v1von + 0.1) { Ssi = StrongInversionNoiseEval_b3(vgs, vds, model, here, data->freq, ckt->CKTtemp); noizDens[BSIM3v1FLNOIZ] *= Ssi; } else { pParam = here->pParam; T10 = model->BSIM3v1oxideTrapDensityA * 8.62e-5 * ckt->CKTtemp; T11 = pParam->BSIM3v1weff * here->BSIM3v1m * pParam->BSIM3v1leff * pow(data->freq, model->BSIM3v1ef) * 4.0e36; Swi = T10 / T11 * here->BSIM3v1cd * here->BSIM3v1m * here->BSIM3v1cd * here->BSIM3v1m; Slimit = StrongInversionNoiseEval_b3( here->BSIM3v1von + 0.1, vds, model, here, data->freq, ckt->CKTtemp); T1 = Swi + Slimit; if (T1 > 0.0) noizDens[BSIM3v1FLNOIZ] *= (Slimit * Swi) / T1; else noizDens[BSIM3v1FLNOIZ] *= 0.0; } break; } lnNdens[BSIM3v1FLNOIZ] = log(MAX(noizDens[BSIM3v1FLNOIZ], N_MINLOG)); noizDens[BSIM3v1TOTNOIZ] = noizDens[BSIM3v1RDNOIZ] + noizDens[BSIM3v1RSNOIZ] + noizDens[BSIM3v1IDNOIZ] + noizDens[BSIM3v1FLNOIZ]; lnNdens[BSIM3v1TOTNOIZ] = log(MAX(noizDens[BSIM3v1TOTNOIZ], N_MINLOG)); *OnDens += noizDens[BSIM3v1TOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to initialize our "history" variables. */ for (i = 0; i < BSIM3v1NSRCS; i++) { here->BSIM3v1nVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i = 0; i < BSIM3v1NSRCS; i++) { here->BSIM3v1nVar[OUTNOIZ][i] = 0.0; here->BSIM3v1nVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0, we have to integrate. */ for (i = 0; i < BSIM3v1NSRCS; i++) { if (i != BSIM3v1TOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], here->BSIM3v1nVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv, lnNdens[i] + data->lnGainInv, here->BSIM3v1nVar[LNLSTDENS][i] + data->lnGainInv, data); here->BSIM3v1nVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { here->BSIM3v1nVar[OUTNOIZ][i] += tempOnoise; here->BSIM3v1nVar[OUTNOIZ][BSIM3v1TOTNOIZ] += tempOnoise; here->BSIM3v1nVar[INNOIZ][i] += tempInoise; here->BSIM3v1nVar[INNOIZ][BSIM3v1TOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i = 0; i < BSIM3v1NSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i = 0; i < BSIM3v1NSRCS; i++) { data->outpVector[data->outNumber++] = here->BSIM3v1nVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = here->BSIM3v1nVar[INNOIZ][i]; } } break; } break; case N_CLOSE: /* do nothing, the main calling routine will close */ return (OK); break; /* the plots */ } /* switch (operation) */ } /* for here */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v1/b3v1set.c0000644000175000017500000011104313546075722022102 0ustar carstencarsten/********** * Copyright 1990 Regents of the University of California. All rights reserved. * File: b3set.c * Author: 1995 Min-Chie Jeng and Mansun Chan. * Modified by Paolo Nenzi 2002 **********/ /* * Release Notes: * BSIM3v1v3.1, Released by yuhua 96/12/08 */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "bsim3v1def.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define SMOOTHFACTOR 0.1 #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define PI 3.141592654 #define Charge_q 1.60219e-19 #define Meter2Micron 1.0e6 int BSIM3v1setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { BSIM3v1model *model = (BSIM3v1model*)inModel; BSIM3v1instance *here; int error; CKTnode *tmp; CKTnode *tmpNode; IFuid tmpName; /* loop through all the BSIM3v1 device models */ for( ; model != NULL; model = BSIM3v1nextModel(model)) { /* Default value Processing for BSIM3v1 MOSFET Models */ if (!model->BSIM3v1typeGiven) model->BSIM3v1type = NMOS; if (!model->BSIM3v1mobModGiven) model->BSIM3v1mobMod = 1; if (!model->BSIM3v1binUnitGiven) model->BSIM3v1binUnit = 1; if (!model->BSIM3v1paramChkGiven) model->BSIM3v1paramChk = 0; if (!model->BSIM3v1capModGiven) model->BSIM3v1capMod = 2; if (!model->BSIM3v1nqsModGiven) model->BSIM3v1nqsMod = 0; if (!model->BSIM3v1noiModGiven) model->BSIM3v1noiMod = 1; if (!model->BSIM3v1versionGiven) model->BSIM3v1version = 3.1; if (!model->BSIM3v1toxGiven) model->BSIM3v1tox = 150.0e-10; model->BSIM3v1cox = 3.453133e-11 / model->BSIM3v1tox; if (!model->BSIM3v1cdscGiven) model->BSIM3v1cdsc = 2.4e-4; /* unit Q/V/m^2 */ if (!model->BSIM3v1cdscbGiven) model->BSIM3v1cdscb = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3v1cdscdGiven) model->BSIM3v1cdscd = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3v1citGiven) model->BSIM3v1cit = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3v1nfactorGiven) model->BSIM3v1nfactor = 1; if (!model->BSIM3v1xjGiven) model->BSIM3v1xj = .15e-6; if (!model->BSIM3v1vsatGiven) model->BSIM3v1vsat = 8.0e4; /* unit m/s */ if (!model->BSIM3v1atGiven) model->BSIM3v1at = 3.3e4; /* unit m/s */ if (!model->BSIM3v1a0Given) model->BSIM3v1a0 = 1.0; if (!model->BSIM3v1agsGiven) model->BSIM3v1ags = 0.0; if (!model->BSIM3v1a1Given) model->BSIM3v1a1 = 0.0; if (!model->BSIM3v1a2Given) model->BSIM3v1a2 = 1.0; if (!model->BSIM3v1ketaGiven) model->BSIM3v1keta = -0.047; /* unit / V */ if (!model->BSIM3v1nsubGiven) model->BSIM3v1nsub = 6.0e16; /* unit 1/cm3 */ if (!model->BSIM3v1npeakGiven) model->BSIM3v1npeak = 1.7e17; /* unit 1/cm3 */ if (!model->BSIM3v1ngateGiven) model->BSIM3v1ngate = 0; /* unit 1/cm3 */ if (!model->BSIM3v1vbmGiven) model->BSIM3v1vbm = -3.0; if (!model->BSIM3v1xtGiven) model->BSIM3v1xt = 1.55e-7; if (!model->BSIM3v1kt1Given) model->BSIM3v1kt1 = -0.11; /* unit V */ if (!model->BSIM3v1kt1lGiven) model->BSIM3v1kt1l = 0.0; /* unit V*m */ if (!model->BSIM3v1kt2Given) model->BSIM3v1kt2 = 0.022; /* No unit */ if (!model->BSIM3v1k3Given) model->BSIM3v1k3 = 80.0; if (!model->BSIM3v1k3bGiven) model->BSIM3v1k3b = 0.0; if (!model->BSIM3v1w0Given) model->BSIM3v1w0 = 2.5e-6; if (!model->BSIM3v1nlxGiven) model->BSIM3v1nlx = 1.74e-7; if (!model->BSIM3v1dvt0Given) model->BSIM3v1dvt0 = 2.2; if (!model->BSIM3v1dvt1Given) model->BSIM3v1dvt1 = 0.53; if (!model->BSIM3v1dvt2Given) model->BSIM3v1dvt2 = -0.032; /* unit 1 / V */ if (!model->BSIM3v1dvt0wGiven) model->BSIM3v1dvt0w = 0.0; if (!model->BSIM3v1dvt1wGiven) model->BSIM3v1dvt1w = 5.3e6; if (!model->BSIM3v1dvt2wGiven) model->BSIM3v1dvt2w = -0.032; if (!model->BSIM3v1droutGiven) model->BSIM3v1drout = 0.56; if (!model->BSIM3v1dsubGiven) model->BSIM3v1dsub = model->BSIM3v1drout; if (!model->BSIM3v1vth0Given) model->BSIM3v1vth0 = (model->BSIM3v1type == NMOS) ? 0.7 : -0.7; if (!model->BSIM3v1uaGiven) model->BSIM3v1ua = 2.25e-9; /* unit m/V */ if (!model->BSIM3v1ua1Given) model->BSIM3v1ua1 = 4.31e-9; /* unit m/V */ if (!model->BSIM3v1ubGiven) model->BSIM3v1ub = 5.87e-19; /* unit (m/V)**2 */ if (!model->BSIM3v1ub1Given) model->BSIM3v1ub1 = -7.61e-18; /* unit (m/V)**2 */ if (!model->BSIM3v1ucGiven) model->BSIM3v1uc = (model->BSIM3v1mobMod == 3) ? -0.0465 : -0.0465e-9; if (!model->BSIM3v1uc1Given) model->BSIM3v1uc1 = (model->BSIM3v1mobMod == 3) ? -0.056 : -0.056e-9; if (!model->BSIM3v1u0Given) model->BSIM3v1u0 = (model->BSIM3v1type == NMOS) ? 0.067 : 0.025; if (!model->BSIM3v1uteGiven) model->BSIM3v1ute = -1.5; if (!model->BSIM3v1voffGiven) model->BSIM3v1voff = -0.08; if (!model->BSIM3v1deltaGiven) model->BSIM3v1delta = 0.01; if (!model->BSIM3v1rdswGiven) model->BSIM3v1rdsw = 0; if (!model->BSIM3v1prwgGiven) model->BSIM3v1prwg = 0.0; /* unit 1/V */ if (!model->BSIM3v1prwbGiven) model->BSIM3v1prwb = 0.0; if (!model->BSIM3v1prtGiven) model->BSIM3v1prt = 0.0; if (!model->BSIM3v1eta0Given) model->BSIM3v1eta0 = 0.08; /* no unit */ if (!model->BSIM3v1etabGiven) model->BSIM3v1etab = -0.07; /* unit 1/V */ if (!model->BSIM3v1pclmGiven) model->BSIM3v1pclm = 1.3; /* no unit */ if (!model->BSIM3v1pdibl1Given) model->BSIM3v1pdibl1 = .39; /* no unit */ if (!model->BSIM3v1pdibl2Given) model->BSIM3v1pdibl2 = 0.0086; /* no unit */ if (!model->BSIM3v1pdiblbGiven) model->BSIM3v1pdiblb = 0.0; /* 1/V */ if (!model->BSIM3v1pscbe1Given) model->BSIM3v1pscbe1 = 4.24e8; if (!model->BSIM3v1pscbe2Given) model->BSIM3v1pscbe2 = 1.0e-5; if (!model->BSIM3v1pvagGiven) model->BSIM3v1pvag = 0.0; if (!model->BSIM3v1wrGiven) model->BSIM3v1wr = 1.0; if (!model->BSIM3v1dwgGiven) model->BSIM3v1dwg = 0.0; if (!model->BSIM3v1dwbGiven) model->BSIM3v1dwb = 0.0; if (!model->BSIM3v1b0Given) model->BSIM3v1b0 = 0.0; if (!model->BSIM3v1b1Given) model->BSIM3v1b1 = 0.0; if (!model->BSIM3v1alpha0Given) model->BSIM3v1alpha0 = 0.0; if (!model->BSIM3v1beta0Given) model->BSIM3v1beta0 = 30.0; if (!model->BSIM3v1elmGiven) model->BSIM3v1elm = 5.0; if (!model->BSIM3v1cgslGiven) model->BSIM3v1cgsl = 0.0; if (!model->BSIM3v1cgdlGiven) model->BSIM3v1cgdl = 0.0; if (!model->BSIM3v1ckappaGiven) model->BSIM3v1ckappa = 0.6; if (!model->BSIM3v1clcGiven) model->BSIM3v1clc = 0.1e-6; if (!model->BSIM3v1cleGiven) model->BSIM3v1cle = 0.6; if (!model->BSIM3v1vfbcvGiven) model->BSIM3v1vfbcv = -1.0; /* Length dependence */ if (!model->BSIM3v1lcdscGiven) model->BSIM3v1lcdsc = 0.0; if (!model->BSIM3v1lcdscbGiven) model->BSIM3v1lcdscb = 0.0; if (!model->BSIM3v1lcdscdGiven) model->BSIM3v1lcdscd = 0.0; if (!model->BSIM3v1lcitGiven) model->BSIM3v1lcit = 0.0; if (!model->BSIM3v1lnfactorGiven) model->BSIM3v1lnfactor = 0.0; if (!model->BSIM3v1lxjGiven) model->BSIM3v1lxj = 0.0; if (!model->BSIM3v1lvsatGiven) model->BSIM3v1lvsat = 0.0; if (!model->BSIM3v1latGiven) model->BSIM3v1lat = 0.0; if (!model->BSIM3v1la0Given) model->BSIM3v1la0 = 0.0; if (!model->BSIM3v1lagsGiven) model->BSIM3v1lags = 0.0; if (!model->BSIM3v1la1Given) model->BSIM3v1la1 = 0.0; if (!model->BSIM3v1la2Given) model->BSIM3v1la2 = 0.0; if (!model->BSIM3v1lketaGiven) model->BSIM3v1lketa = 0.0; if (!model->BSIM3v1lnsubGiven) model->BSIM3v1lnsub = 0.0; if (!model->BSIM3v1lnpeakGiven) model->BSIM3v1lnpeak = 0.0; if (!model->BSIM3v1lngateGiven) model->BSIM3v1lngate = 0.0; if (!model->BSIM3v1lvbmGiven) model->BSIM3v1lvbm = 0.0; if (!model->BSIM3v1lxtGiven) model->BSIM3v1lxt = 0.0; if (!model->BSIM3v1lkt1Given) model->BSIM3v1lkt1 = 0.0; if (!model->BSIM3v1lkt1lGiven) model->BSIM3v1lkt1l = 0.0; if (!model->BSIM3v1lkt2Given) model->BSIM3v1lkt2 = 0.0; if (!model->BSIM3v1lk3Given) model->BSIM3v1lk3 = 0.0; if (!model->BSIM3v1lk3bGiven) model->BSIM3v1lk3b = 0.0; if (!model->BSIM3v1lw0Given) model->BSIM3v1lw0 = 0.0; if (!model->BSIM3v1lnlxGiven) model->BSIM3v1lnlx = 0.0; if (!model->BSIM3v1ldvt0Given) model->BSIM3v1ldvt0 = 0.0; if (!model->BSIM3v1ldvt1Given) model->BSIM3v1ldvt1 = 0.0; if (!model->BSIM3v1ldvt2Given) model->BSIM3v1ldvt2 = 0.0; if (!model->BSIM3v1ldvt0wGiven) model->BSIM3v1ldvt0w = 0.0; if (!model->BSIM3v1ldvt1wGiven) model->BSIM3v1ldvt1w = 0.0; if (!model->BSIM3v1ldvt2wGiven) model->BSIM3v1ldvt2w = 0.0; if (!model->BSIM3v1ldroutGiven) model->BSIM3v1ldrout = 0.0; if (!model->BSIM3v1ldsubGiven) model->BSIM3v1ldsub = 0.0; if (!model->BSIM3v1lvth0Given) model->BSIM3v1lvth0 = 0.0; if (!model->BSIM3v1luaGiven) model->BSIM3v1lua = 0.0; if (!model->BSIM3v1lua1Given) model->BSIM3v1lua1 = 0.0; if (!model->BSIM3v1lubGiven) model->BSIM3v1lub = 0.0; if (!model->BSIM3v1lub1Given) model->BSIM3v1lub1 = 0.0; if (!model->BSIM3v1lucGiven) model->BSIM3v1luc = 0.0; if (!model->BSIM3v1luc1Given) model->BSIM3v1luc1 = 0.0; if (!model->BSIM3v1lu0Given) model->BSIM3v1lu0 = 0.0; if (!model->BSIM3v1luteGiven) model->BSIM3v1lute = 0.0; if (!model->BSIM3v1lvoffGiven) model->BSIM3v1lvoff = 0.0; if (!model->BSIM3v1ldeltaGiven) model->BSIM3v1ldelta = 0.0; if (!model->BSIM3v1lrdswGiven) model->BSIM3v1lrdsw = 0.0; if (!model->BSIM3v1lprwbGiven) model->BSIM3v1lprwb = 0.0; if (!model->BSIM3v1lprwgGiven) model->BSIM3v1lprwg = 0.0; if (!model->BSIM3v1lprtGiven) model->BSIM3v1lprt = 0.0; if (!model->BSIM3v1leta0Given) model->BSIM3v1leta0 = 0.0; if (!model->BSIM3v1letabGiven) model->BSIM3v1letab = -0.0; if (!model->BSIM3v1lpclmGiven) model->BSIM3v1lpclm = 0.0; if (!model->BSIM3v1lpdibl1Given) model->BSIM3v1lpdibl1 = 0.0; if (!model->BSIM3v1lpdibl2Given) model->BSIM3v1lpdibl2 = 0.0; if (!model->BSIM3v1lpdiblbGiven) model->BSIM3v1lpdiblb = 0.0; if (!model->BSIM3v1lpscbe1Given) model->BSIM3v1lpscbe1 = 0.0; if (!model->BSIM3v1lpscbe2Given) model->BSIM3v1lpscbe2 = 0.0; if (!model->BSIM3v1lpvagGiven) model->BSIM3v1lpvag = 0.0; if (!model->BSIM3v1lwrGiven) model->BSIM3v1lwr = 0.0; if (!model->BSIM3v1ldwgGiven) model->BSIM3v1ldwg = 0.0; if (!model->BSIM3v1ldwbGiven) model->BSIM3v1ldwb = 0.0; if (!model->BSIM3v1lb0Given) model->BSIM3v1lb0 = 0.0; if (!model->BSIM3v1lb1Given) model->BSIM3v1lb1 = 0.0; if (!model->BSIM3v1lalpha0Given) model->BSIM3v1lalpha0 = 0.0; if (!model->BSIM3v1lbeta0Given) model->BSIM3v1lbeta0 = 0.0; if (!model->BSIM3v1lelmGiven) model->BSIM3v1lelm = 0.0; if (!model->BSIM3v1lcgslGiven) model->BSIM3v1lcgsl = 0.0; if (!model->BSIM3v1lcgdlGiven) model->BSIM3v1lcgdl = 0.0; if (!model->BSIM3v1lckappaGiven) model->BSIM3v1lckappa = 0.0; if (!model->BSIM3v1lclcGiven) model->BSIM3v1lclc = 0.0; if (!model->BSIM3v1lcleGiven) model->BSIM3v1lcle = 0.0; if (!model->BSIM3v1lcfGiven) model->BSIM3v1lcf = 0.0; if (!model->BSIM3v1lvfbcvGiven) model->BSIM3v1lvfbcv = 0.0; /* Width dependence */ if (!model->BSIM3v1wcdscGiven) model->BSIM3v1wcdsc = 0.0; if (!model->BSIM3v1wcdscbGiven) model->BSIM3v1wcdscb = 0.0; if (!model->BSIM3v1wcdscdGiven) model->BSIM3v1wcdscd = 0.0; if (!model->BSIM3v1wcitGiven) model->BSIM3v1wcit = 0.0; if (!model->BSIM3v1wnfactorGiven) model->BSIM3v1wnfactor = 0.0; if (!model->BSIM3v1wxjGiven) model->BSIM3v1wxj = 0.0; if (!model->BSIM3v1wvsatGiven) model->BSIM3v1wvsat = 0.0; if (!model->BSIM3v1watGiven) model->BSIM3v1wat = 0.0; if (!model->BSIM3v1wa0Given) model->BSIM3v1wa0 = 0.0; if (!model->BSIM3v1wagsGiven) model->BSIM3v1wags = 0.0; if (!model->BSIM3v1wa1Given) model->BSIM3v1wa1 = 0.0; if (!model->BSIM3v1wa2Given) model->BSIM3v1wa2 = 0.0; if (!model->BSIM3v1wketaGiven) model->BSIM3v1wketa = 0.0; if (!model->BSIM3v1wnsubGiven) model->BSIM3v1wnsub = 0.0; if (!model->BSIM3v1wnpeakGiven) model->BSIM3v1wnpeak = 0.0; if (!model->BSIM3v1wngateGiven) model->BSIM3v1wngate = 0.0; if (!model->BSIM3v1wvbmGiven) model->BSIM3v1wvbm = 0.0; if (!model->BSIM3v1wxtGiven) model->BSIM3v1wxt = 0.0; if (!model->BSIM3v1wkt1Given) model->BSIM3v1wkt1 = 0.0; if (!model->BSIM3v1wkt1lGiven) model->BSIM3v1wkt1l = 0.0; if (!model->BSIM3v1wkt2Given) model->BSIM3v1wkt2 = 0.0; if (!model->BSIM3v1wk3Given) model->BSIM3v1wk3 = 0.0; if (!model->BSIM3v1wk3bGiven) model->BSIM3v1wk3b = 0.0; if (!model->BSIM3v1ww0Given) model->BSIM3v1ww0 = 0.0; if (!model->BSIM3v1wnlxGiven) model->BSIM3v1wnlx = 0.0; if (!model->BSIM3v1wdvt0Given) model->BSIM3v1wdvt0 = 0.0; if (!model->BSIM3v1wdvt1Given) model->BSIM3v1wdvt1 = 0.0; if (!model->BSIM3v1wdvt2Given) model->BSIM3v1wdvt2 = 0.0; if (!model->BSIM3v1wdvt0wGiven) model->BSIM3v1wdvt0w = 0.0; if (!model->BSIM3v1wdvt1wGiven) model->BSIM3v1wdvt1w = 0.0; if (!model->BSIM3v1wdvt2wGiven) model->BSIM3v1wdvt2w = 0.0; if (!model->BSIM3v1wdroutGiven) model->BSIM3v1wdrout = 0.0; if (!model->BSIM3v1wdsubGiven) model->BSIM3v1wdsub = 0.0; if (!model->BSIM3v1wvth0Given) model->BSIM3v1wvth0 = 0.0; if (!model->BSIM3v1wuaGiven) model->BSIM3v1wua = 0.0; if (!model->BSIM3v1wua1Given) model->BSIM3v1wua1 = 0.0; if (!model->BSIM3v1wubGiven) model->BSIM3v1wub = 0.0; if (!model->BSIM3v1wub1Given) model->BSIM3v1wub1 = 0.0; if (!model->BSIM3v1wucGiven) model->BSIM3v1wuc = 0.0; if (!model->BSIM3v1wuc1Given) model->BSIM3v1wuc1 = 0.0; if (!model->BSIM3v1wu0Given) model->BSIM3v1wu0 = 0.0; if (!model->BSIM3v1wuteGiven) model->BSIM3v1wute = 0.0; if (!model->BSIM3v1wvoffGiven) model->BSIM3v1wvoff = 0.0; if (!model->BSIM3v1wdeltaGiven) model->BSIM3v1wdelta = 0.0; if (!model->BSIM3v1wrdswGiven) model->BSIM3v1wrdsw = 0.0; if (!model->BSIM3v1wprwbGiven) model->BSIM3v1wprwb = 0.0; if (!model->BSIM3v1wprwgGiven) model->BSIM3v1wprwg = 0.0; if (!model->BSIM3v1wprtGiven) model->BSIM3v1wprt = 0.0; if (!model->BSIM3v1weta0Given) model->BSIM3v1weta0 = 0.0; if (!model->BSIM3v1wetabGiven) model->BSIM3v1wetab = 0.0; if (!model->BSIM3v1wpclmGiven) model->BSIM3v1wpclm = 0.0; if (!model->BSIM3v1wpdibl1Given) model->BSIM3v1wpdibl1 = 0.0; if (!model->BSIM3v1wpdibl2Given) model->BSIM3v1wpdibl2 = 0.0; if (!model->BSIM3v1wpdiblbGiven) model->BSIM3v1wpdiblb = 0.0; if (!model->BSIM3v1wpscbe1Given) model->BSIM3v1wpscbe1 = 0.0; if (!model->BSIM3v1wpscbe2Given) model->BSIM3v1wpscbe2 = 0.0; if (!model->BSIM3v1wpvagGiven) model->BSIM3v1wpvag = 0.0; if (!model->BSIM3v1wwrGiven) model->BSIM3v1wwr = 0.0; if (!model->BSIM3v1wdwgGiven) model->BSIM3v1wdwg = 0.0; if (!model->BSIM3v1wdwbGiven) model->BSIM3v1wdwb = 0.0; if (!model->BSIM3v1wb0Given) model->BSIM3v1wb0 = 0.0; if (!model->BSIM3v1wb1Given) model->BSIM3v1wb1 = 0.0; if (!model->BSIM3v1walpha0Given) model->BSIM3v1walpha0 = 0.0; if (!model->BSIM3v1wbeta0Given) model->BSIM3v1wbeta0 = 0.0; if (!model->BSIM3v1welmGiven) model->BSIM3v1welm = 0.0; if (!model->BSIM3v1wcgslGiven) model->BSIM3v1wcgsl = 0.0; if (!model->BSIM3v1wcgdlGiven) model->BSIM3v1wcgdl = 0.0; if (!model->BSIM3v1wckappaGiven) model->BSIM3v1wckappa = 0.0; if (!model->BSIM3v1wcfGiven) model->BSIM3v1wcf = 0.0; if (!model->BSIM3v1wclcGiven) model->BSIM3v1wclc = 0.0; if (!model->BSIM3v1wcleGiven) model->BSIM3v1wcle = 0.0; if (!model->BSIM3v1wvfbcvGiven) model->BSIM3v1wvfbcv = 0.0; /* Cross-term dependence */ if (!model->BSIM3v1pcdscGiven) model->BSIM3v1pcdsc = 0.0; if (!model->BSIM3v1pcdscbGiven) model->BSIM3v1pcdscb = 0.0; if (!model->BSIM3v1pcdscdGiven) model->BSIM3v1pcdscd = 0.0; if (!model->BSIM3v1pcitGiven) model->BSIM3v1pcit = 0.0; if (!model->BSIM3v1pnfactorGiven) model->BSIM3v1pnfactor = 0.0; if (!model->BSIM3v1pxjGiven) model->BSIM3v1pxj = 0.0; if (!model->BSIM3v1pvsatGiven) model->BSIM3v1pvsat = 0.0; if (!model->BSIM3v1patGiven) model->BSIM3v1pat = 0.0; if (!model->BSIM3v1pa0Given) model->BSIM3v1pa0 = 0.0; if (!model->BSIM3v1pagsGiven) model->BSIM3v1pags = 0.0; if (!model->BSIM3v1pa1Given) model->BSIM3v1pa1 = 0.0; if (!model->BSIM3v1pa2Given) model->BSIM3v1pa2 = 0.0; if (!model->BSIM3v1pketaGiven) model->BSIM3v1pketa = 0.0; if (!model->BSIM3v1pnsubGiven) model->BSIM3v1pnsub = 0.0; if (!model->BSIM3v1pnpeakGiven) model->BSIM3v1pnpeak = 0.0; if (!model->BSIM3v1pngateGiven) model->BSIM3v1pngate = 0.0; if (!model->BSIM3v1pvbmGiven) model->BSIM3v1pvbm = 0.0; if (!model->BSIM3v1pxtGiven) model->BSIM3v1pxt = 0.0; if (!model->BSIM3v1pkt1Given) model->BSIM3v1pkt1 = 0.0; if (!model->BSIM3v1pkt1lGiven) model->BSIM3v1pkt1l = 0.0; if (!model->BSIM3v1pkt2Given) model->BSIM3v1pkt2 = 0.0; if (!model->BSIM3v1pk3Given) model->BSIM3v1pk3 = 0.0; if (!model->BSIM3v1pk3bGiven) model->BSIM3v1pk3b = 0.0; if (!model->BSIM3v1pw0Given) model->BSIM3v1pw0 = 0.0; if (!model->BSIM3v1pnlxGiven) model->BSIM3v1pnlx = 0.0; if (!model->BSIM3v1pdvt0Given) model->BSIM3v1pdvt0 = 0.0; if (!model->BSIM3v1pdvt1Given) model->BSIM3v1pdvt1 = 0.0; if (!model->BSIM3v1pdvt2Given) model->BSIM3v1pdvt2 = 0.0; if (!model->BSIM3v1pdvt0wGiven) model->BSIM3v1pdvt0w = 0.0; if (!model->BSIM3v1pdvt1wGiven) model->BSIM3v1pdvt1w = 0.0; if (!model->BSIM3v1pdvt2wGiven) model->BSIM3v1pdvt2w = 0.0; if (!model->BSIM3v1pdroutGiven) model->BSIM3v1pdrout = 0.0; if (!model->BSIM3v1pdsubGiven) model->BSIM3v1pdsub = 0.0; if (!model->BSIM3v1pvth0Given) model->BSIM3v1pvth0 = 0.0; if (!model->BSIM3v1puaGiven) model->BSIM3v1pua = 0.0; if (!model->BSIM3v1pua1Given) model->BSIM3v1pua1 = 0.0; if (!model->BSIM3v1pubGiven) model->BSIM3v1pub = 0.0; if (!model->BSIM3v1pub1Given) model->BSIM3v1pub1 = 0.0; if (!model->BSIM3v1pucGiven) model->BSIM3v1puc = 0.0; if (!model->BSIM3v1puc1Given) model->BSIM3v1puc1 = 0.0; if (!model->BSIM3v1pu0Given) model->BSIM3v1pu0 = 0.0; if (!model->BSIM3v1puteGiven) model->BSIM3v1pute = 0.0; if (!model->BSIM3v1pvoffGiven) model->BSIM3v1pvoff = 0.0; if (!model->BSIM3v1pdeltaGiven) model->BSIM3v1pdelta = 0.0; if (!model->BSIM3v1prdswGiven) model->BSIM3v1prdsw = 0.0; if (!model->BSIM3v1pprwbGiven) model->BSIM3v1pprwb = 0.0; if (!model->BSIM3v1pprwgGiven) model->BSIM3v1pprwg = 0.0; if (!model->BSIM3v1pprtGiven) model->BSIM3v1pprt = 0.0; if (!model->BSIM3v1peta0Given) model->BSIM3v1peta0 = 0.0; if (!model->BSIM3v1petabGiven) model->BSIM3v1petab = 0.0; if (!model->BSIM3v1ppclmGiven) model->BSIM3v1ppclm = 0.0; if (!model->BSIM3v1ppdibl1Given) model->BSIM3v1ppdibl1 = 0.0; if (!model->BSIM3v1ppdibl2Given) model->BSIM3v1ppdibl2 = 0.0; if (!model->BSIM3v1ppdiblbGiven) model->BSIM3v1ppdiblb = 0.0; if (!model->BSIM3v1ppscbe1Given) model->BSIM3v1ppscbe1 = 0.0; if (!model->BSIM3v1ppscbe2Given) model->BSIM3v1ppscbe2 = 0.0; if (!model->BSIM3v1ppvagGiven) model->BSIM3v1ppvag = 0.0; if (!model->BSIM3v1pwrGiven) model->BSIM3v1pwr = 0.0; if (!model->BSIM3v1pdwgGiven) model->BSIM3v1pdwg = 0.0; if (!model->BSIM3v1pdwbGiven) model->BSIM3v1pdwb = 0.0; if (!model->BSIM3v1pb0Given) model->BSIM3v1pb0 = 0.0; if (!model->BSIM3v1pb1Given) model->BSIM3v1pb1 = 0.0; if (!model->BSIM3v1palpha0Given) model->BSIM3v1palpha0 = 0.0; if (!model->BSIM3v1pbeta0Given) model->BSIM3v1pbeta0 = 0.0; if (!model->BSIM3v1pelmGiven) model->BSIM3v1pelm = 0.0; if (!model->BSIM3v1pcgslGiven) model->BSIM3v1pcgsl = 0.0; if (!model->BSIM3v1pcgdlGiven) model->BSIM3v1pcgdl = 0.0; if (!model->BSIM3v1pckappaGiven) model->BSIM3v1pckappa = 0.0; if (!model->BSIM3v1pcfGiven) model->BSIM3v1pcf = 0.0; if (!model->BSIM3v1pclcGiven) model->BSIM3v1pclc = 0.0; if (!model->BSIM3v1pcleGiven) model->BSIM3v1pcle = 0.0; if (!model->BSIM3v1pvfbcvGiven) model->BSIM3v1pvfbcv = 0.0; /* unit degree celcius */ if (!model->BSIM3v1tnomGiven) model->BSIM3v1tnom = ckt->CKTnomTemp; if (!model->BSIM3v1LintGiven) model->BSIM3v1Lint = 0.0; if (!model->BSIM3v1LlGiven) model->BSIM3v1Ll = 0.0; if (!model->BSIM3v1LlnGiven) model->BSIM3v1Lln = 1.0; if (!model->BSIM3v1LwGiven) model->BSIM3v1Lw = 0.0; if (!model->BSIM3v1LwnGiven) model->BSIM3v1Lwn = 1.0; if (!model->BSIM3v1LwlGiven) model->BSIM3v1Lwl = 0.0; if (!model->BSIM3v1LminGiven) model->BSIM3v1Lmin = 0.0; if (!model->BSIM3v1LmaxGiven) model->BSIM3v1Lmax = 1.0; if (!model->BSIM3v1WintGiven) model->BSIM3v1Wint = 0.0; if (!model->BSIM3v1WlGiven) model->BSIM3v1Wl = 0.0; if (!model->BSIM3v1WlnGiven) model->BSIM3v1Wln = 1.0; if (!model->BSIM3v1WwGiven) model->BSIM3v1Ww = 0.0; if (!model->BSIM3v1WwnGiven) model->BSIM3v1Wwn = 1.0; if (!model->BSIM3v1WwlGiven) model->BSIM3v1Wwl = 0.0; if (!model->BSIM3v1WminGiven) model->BSIM3v1Wmin = 0.0; if (!model->BSIM3v1WmaxGiven) model->BSIM3v1Wmax = 1.0; if (!model->BSIM3v1dwcGiven) model->BSIM3v1dwc = model->BSIM3v1Wint; if (!model->BSIM3v1dlcGiven) model->BSIM3v1dlc = model->BSIM3v1Lint; if (!model->BSIM3v1cfGiven) model->BSIM3v1cf = 2.0 * EPSOX / PI * log(1.0 + 0.4e-6 / model->BSIM3v1tox); if (!model->BSIM3v1cgdoGiven) { if (model->BSIM3v1dlcGiven && (model->BSIM3v1dlc > 0.0)) { model->BSIM3v1cgdo = model->BSIM3v1dlc * model->BSIM3v1cox - model->BSIM3v1cgdl ; } else model->BSIM3v1cgdo = 0.6 * model->BSIM3v1xj * model->BSIM3v1cox; } if (!model->BSIM3v1cgsoGiven) { if (model->BSIM3v1dlcGiven && (model->BSIM3v1dlc > 0.0)) { model->BSIM3v1cgso = model->BSIM3v1dlc * model->BSIM3v1cox - model->BSIM3v1cgsl ; } else model->BSIM3v1cgso = 0.6 * model->BSIM3v1xj * model->BSIM3v1cox; } if (!model->BSIM3v1cgboGiven) { model->BSIM3v1cgbo = 2.0 * model->BSIM3v1dwc * model->BSIM3v1cox; } if (!model->BSIM3v1xpartGiven) model->BSIM3v1xpart = 0.0; if (!model->BSIM3v1sheetResistanceGiven) model->BSIM3v1sheetResistance = 0.0; if (!model->BSIM3v1unitAreaJctCapGiven) model->BSIM3v1unitAreaJctCap = 5.0E-4; if (!model->BSIM3v1unitLengthSidewallJctCapGiven) model->BSIM3v1unitLengthSidewallJctCap = 5.0E-10; if (!model->BSIM3v1unitLengthGateSidewallJctCapGiven) model->BSIM3v1unitLengthGateSidewallJctCap = model->BSIM3v1unitLengthSidewallJctCap ; if (!model->BSIM3v1jctSatCurDensityGiven) model->BSIM3v1jctSatCurDensity = 1.0E-4; if (!model->BSIM3v1jctSidewallSatCurDensityGiven) model->BSIM3v1jctSidewallSatCurDensity = 0.0; if (!model->BSIM3v1bulkJctPotentialGiven) model->BSIM3v1bulkJctPotential = 1.0; if (!model->BSIM3v1sidewallJctPotentialGiven) model->BSIM3v1sidewallJctPotential = 1.0; if (!model->BSIM3v1GatesidewallJctPotentialGiven) model->BSIM3v1GatesidewallJctPotential = model->BSIM3v1sidewallJctPotential; if (!model->BSIM3v1bulkJctBotGradingCoeffGiven) model->BSIM3v1bulkJctBotGradingCoeff = 0.5; if (!model->BSIM3v1bulkJctSideGradingCoeffGiven) model->BSIM3v1bulkJctSideGradingCoeff = 0.33; if (!model->BSIM3v1bulkJctGateSideGradingCoeffGiven) model->BSIM3v1bulkJctGateSideGradingCoeff = model->BSIM3v1bulkJctSideGradingCoeff; if (!model->BSIM3v1jctEmissionCoeffGiven) model->BSIM3v1jctEmissionCoeff = 1.0; if (!model->BSIM3v1jctTempExponentGiven) model->BSIM3v1jctTempExponent = 3.0; if (!model->BSIM3v1oxideTrapDensityAGiven) { if (model->BSIM3v1type == NMOS) model->BSIM3v1oxideTrapDensityA = 1e20; else model->BSIM3v1oxideTrapDensityA=9.9e18; } if (!model->BSIM3v1oxideTrapDensityBGiven) { if (model->BSIM3v1type == NMOS) model->BSIM3v1oxideTrapDensityB = 5e4; else model->BSIM3v1oxideTrapDensityB = 2.4e3; } if (!model->BSIM3v1oxideTrapDensityCGiven) { if (model->BSIM3v1type == NMOS) model->BSIM3v1oxideTrapDensityC = -1.4e-12; else model->BSIM3v1oxideTrapDensityC = 1.4e-12; } if (!model->BSIM3v1emGiven) model->BSIM3v1em = 4.1e7; /* V/m */ if (!model->BSIM3v1efGiven) model->BSIM3v1ef = 1.0; if (!model->BSIM3v1afGiven) model->BSIM3v1af = 1.0; if (!model->BSIM3v1kfGiven) model->BSIM3v1kf = 0.0; /* loop through all the instances of the model */ for (here = BSIM3v1instances(model); here != NULL ; here=BSIM3v1nextInstance(here)) { /* allocate a chunk of the state vector */ here->BSIM3v1states = *states; *states += BSIM3v1numStates; /* perform the parameter defaulting */ if(here->BSIM3v1m == 0.0) here->BSIM3v1m = 1.0; if (!here->BSIM3v1wGiven) here->BSIM3v1w = 5e-6; if (!here->BSIM3v1drainAreaGiven) { if(model->BSIM3v1hdifGiven) here->BSIM3v1drainArea = here->BSIM3v1w * 2 * model->BSIM3v1hdif; else here->BSIM3v1drainArea = 0.0; } if (!here->BSIM3v1drainPerimeterGiven) { if(model->BSIM3v1hdifGiven) here->BSIM3v1drainPerimeter = 2 * here->BSIM3v1w + 4 * model->BSIM3v1hdif; else here->BSIM3v1drainPerimeter = 0.0; } if (!here->BSIM3v1drainSquaresGiven) here->BSIM3v1drainSquares = 1.0; if (!here->BSIM3v1icVBSGiven) here->BSIM3v1icVBS = 0; if (!here->BSIM3v1icVDSGiven) here->BSIM3v1icVDS = 0; if (!here->BSIM3v1icVGSGiven) here->BSIM3v1icVGS = 0; if (!here->BSIM3v1lGiven) here->BSIM3v1l = 5e-6; if (!here->BSIM3v1sourceAreaGiven) { if(model->BSIM3v1hdifGiven) here->BSIM3v1sourceArea = here->BSIM3v1w * 2 * model->BSIM3v1hdif; else here->BSIM3v1sourceArea = 0.0; } if (!here->BSIM3v1sourcePerimeterGiven) { if(model->BSIM3v1hdifGiven) here->BSIM3v1sourcePerimeter = 2 * here->BSIM3v1w + 4 * model->BSIM3v1hdif; else here->BSIM3v1sourcePerimeter = 0.0; } if (!here->BSIM3v1sourceSquaresGiven) here->BSIM3v1sourceSquares = 1; if (!here->BSIM3v1wGiven) here->BSIM3v1w = 5e-6; if (!here->BSIM3v1mGiven) here->BSIM3v1m = 1; if (!here->BSIM3v1nqsModGiven) here->BSIM3v1nqsMod = model->BSIM3v1nqsMod; /* process drain series resistance */ if ((model->BSIM3v1sheetResistance > 0.0) && (here->BSIM3v1drainSquares > 0.0 )) { if(here->BSIM3v1dNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM3v1name,"drain"); if(error) return(error); here->BSIM3v1dNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->BSIM3v1dNodePrime = here->BSIM3v1dNode; } /* process source series resistance */ if ((model->BSIM3v1sheetResistance > 0.0) && (here->BSIM3v1sourceSquares > 0.0 )) { if(here->BSIM3v1sNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM3v1name,"source"); if(error) return(error); here->BSIM3v1sNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->BSIM3v1sNodePrime = here->BSIM3v1sNode; } /* internal charge node */ if ((here->BSIM3v1nqsMod)) { if(here->BSIM3v1qNode == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM3v1name,"charge"); if(error) return(error); here->BSIM3v1qNode = tmp->number; } } else { here->BSIM3v1qNode = 0; } /* set Sparse Matrix Pointers */ /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(BSIM3v1DdPtr, BSIM3v1dNode, BSIM3v1dNode); TSTALLOC(BSIM3v1GgPtr, BSIM3v1gNode, BSIM3v1gNode); TSTALLOC(BSIM3v1SsPtr, BSIM3v1sNode, BSIM3v1sNode); TSTALLOC(BSIM3v1BbPtr, BSIM3v1bNode, BSIM3v1bNode); TSTALLOC(BSIM3v1DPdpPtr, BSIM3v1dNodePrime, BSIM3v1dNodePrime); TSTALLOC(BSIM3v1SPspPtr, BSIM3v1sNodePrime, BSIM3v1sNodePrime); TSTALLOC(BSIM3v1DdpPtr, BSIM3v1dNode, BSIM3v1dNodePrime); TSTALLOC(BSIM3v1GbPtr, BSIM3v1gNode, BSIM3v1bNode); TSTALLOC(BSIM3v1GdpPtr, BSIM3v1gNode, BSIM3v1dNodePrime); TSTALLOC(BSIM3v1GspPtr, BSIM3v1gNode, BSIM3v1sNodePrime); TSTALLOC(BSIM3v1SspPtr, BSIM3v1sNode, BSIM3v1sNodePrime); TSTALLOC(BSIM3v1BdpPtr, BSIM3v1bNode, BSIM3v1dNodePrime); TSTALLOC(BSIM3v1BspPtr, BSIM3v1bNode, BSIM3v1sNodePrime); TSTALLOC(BSIM3v1DPspPtr, BSIM3v1dNodePrime, BSIM3v1sNodePrime); TSTALLOC(BSIM3v1DPdPtr, BSIM3v1dNodePrime, BSIM3v1dNode); TSTALLOC(BSIM3v1BgPtr, BSIM3v1bNode, BSIM3v1gNode); TSTALLOC(BSIM3v1DPgPtr, BSIM3v1dNodePrime, BSIM3v1gNode); TSTALLOC(BSIM3v1SPgPtr, BSIM3v1sNodePrime, BSIM3v1gNode); TSTALLOC(BSIM3v1SPsPtr, BSIM3v1sNodePrime, BSIM3v1sNode); TSTALLOC(BSIM3v1DPbPtr, BSIM3v1dNodePrime, BSIM3v1bNode); TSTALLOC(BSIM3v1SPbPtr, BSIM3v1sNodePrime, BSIM3v1bNode); TSTALLOC(BSIM3v1SPdpPtr, BSIM3v1sNodePrime, BSIM3v1dNodePrime); TSTALLOC(BSIM3v1QqPtr, BSIM3v1qNode, BSIM3v1qNode); TSTALLOC(BSIM3v1QdpPtr, BSIM3v1qNode, BSIM3v1dNodePrime); TSTALLOC(BSIM3v1QspPtr, BSIM3v1qNode, BSIM3v1sNodePrime); TSTALLOC(BSIM3v1QgPtr, BSIM3v1qNode, BSIM3v1gNode); TSTALLOC(BSIM3v1QbPtr, BSIM3v1qNode, BSIM3v1bNode); TSTALLOC(BSIM3v1DPqPtr, BSIM3v1dNodePrime, BSIM3v1qNode); TSTALLOC(BSIM3v1SPqPtr, BSIM3v1sNodePrime, BSIM3v1qNode); TSTALLOC(BSIM3v1GqPtr, BSIM3v1gNode, BSIM3v1qNode); TSTALLOC(BSIM3v1BqPtr, BSIM3v1bNode, BSIM3v1qNode); } } return(OK); } int BSIM3v1unsetup(GENmodel *inModel, CKTcircuit *ckt) { BSIM3v1model *model; BSIM3v1instance *here; for (model = (BSIM3v1model *)inModel; model != NULL; model = BSIM3v1nextModel(model)) { for (here = BSIM3v1instances(model); here != NULL; here=BSIM3v1nextInstance(here)) { if (here->BSIM3v1qNode > 0) CKTdltNNum(ckt, here->BSIM3v1qNode); here->BSIM3v1qNode = 0; if (here->BSIM3v1sNodePrime > 0 && here->BSIM3v1sNodePrime != here->BSIM3v1sNode) CKTdltNNum(ckt, here->BSIM3v1sNodePrime); here->BSIM3v1sNodePrime = 0; if (here->BSIM3v1dNodePrime > 0 && here->BSIM3v1dNodePrime != here->BSIM3v1dNode) CKTdltNNum(ckt, here->BSIM3v1dNodePrime); here->BSIM3v1dNodePrime = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim3v1/bsim3v1init.h0000644000175000017500000000042613546075722022772 0ustar carstencarsten#ifndef _BSIM3v1INIT_H #define _BSIM3v1INIT_H extern IFparm BSIM3v1pTable[ ]; extern IFparm BSIM3v1mPTable[ ]; extern char *BSIM3v1names[ ]; extern int BSIM3v1pTSize; extern int BSIM3v1mPTSize; extern int BSIM3v1nSize; extern int BSIM3v1iSize; extern int BSIM3v1mSize; #endif tmpk8ny_4pz/src/spicelib/devices/bsim3v1/b3v1cvtest.c0000644000175000017500000000610413546075722022620 0ustar carstencarsten/********** * Copyright 1990 Regents of the University of California. All rights reserved. * File: b3v1cvtest.c * Author: 1995 Min-Chie Jeng and Mansun Chan. * Modified by Paolo Nenzi 2002 **********/ /* * Release Notes: * BSIM3v3.1, Released by yuhua 96/12/08 */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3v1def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3v1convTest(GENmodel *inModel, CKTcircuit *ckt) { BSIM3v1model *model = (BSIM3v1model*)inModel; BSIM3v1instance *here; double delvbd, delvbs, delvds, delvgd, delvgs, vbd, vbs, vds; double cbd, cbhat, cbs, cd, cdhat, tol, vgd, vgdo, vgs; /* loop through all the BSIM3v1 device models */ for (; model != NULL; model = BSIM3v1nextModel(model)) { /* loop through all the instances of the model */ for (here = BSIM3v1instances(model); here != NULL ; here=BSIM3v1nextInstance(here)) { vbs = model->BSIM3v1type * (*(ckt->CKTrhsOld+here->BSIM3v1bNode) - *(ckt->CKTrhsOld+here->BSIM3v1sNodePrime)); vgs = model->BSIM3v1type * (*(ckt->CKTrhsOld+here->BSIM3v1gNode) - *(ckt->CKTrhsOld+here->BSIM3v1sNodePrime)); vds = model->BSIM3v1type * (*(ckt->CKTrhsOld+here->BSIM3v1dNodePrime) - *(ckt->CKTrhsOld+here->BSIM3v1sNodePrime)); vbd = vbs - vds; vgd = vgs - vds; vgdo = *(ckt->CKTstate0 + here->BSIM3v1vgs) - *(ckt->CKTstate0 + here->BSIM3v1vds); delvbs = vbs - *(ckt->CKTstate0 + here->BSIM3v1vbs); delvbd = vbd - *(ckt->CKTstate0 + here->BSIM3v1vbd); delvgs = vgs - *(ckt->CKTstate0 + here->BSIM3v1vgs); delvds = vds - *(ckt->CKTstate0 + here->BSIM3v1vds); delvgd = vgd-vgdo; cd = here->BSIM3v1cd; if (here->BSIM3v1mode >= 0) { cdhat = cd - here->BSIM3v1gbd * delvbd + here->BSIM3v1gmbs * delvbs + here->BSIM3v1gm * delvgs + here->BSIM3v1gds * delvds; } else { cdhat = cd - (here->BSIM3v1gbd - here->BSIM3v1gmbs) * delvbd - here->BSIM3v1gm * delvgd + here->BSIM3v1gds * delvds; } /* * check convergence */ if ((here->BSIM3v1off == 0) || (!(ckt->CKTmode & MODEINITFIX))) { tol = ckt->CKTreltol * MAX(fabs(cdhat), fabs(cd)) + ckt->CKTabstol; if (fabs(cdhat - cd) >= tol) { ckt->CKTnoncon++; return(OK); } cbs = here->BSIM3v1cbs; cbd = here->BSIM3v1cbd; cbhat = cbs + cbd + here->BSIM3v1gbd * delvbd + here->BSIM3v1gbs * delvbs; tol = ckt->CKTreltol * MAX(fabs(cbhat), fabs(cbs + cbd)) + ckt->CKTabstol; if (fabs(cbhat - (cbs + cbd)) > tol) { ckt->CKTnoncon++; return(OK); } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v1/b3v1mpar.c0000644000175000017500000015215013546075722022252 0ustar carstencarsten/********** * Copyright 1990 Regents of the University of California. All rights reserved. * File: b3mpar.c * Author: 1995 Min-Chie Jeng and Mansun Chan. * Modified by Paolo Nenzi 2002 **********/ /* * Release Notes: * BSIM3v1v3.1, Released by yuhua 96/12/08 */ #include "ngspice/ngspice.h" #include "bsim3v1def.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3v1mParam(int param, IFvalue *value, GENmodel *inMod) { BSIM3v1model *mod = (BSIM3v1model*)inMod; switch(param) { case BSIM3v1_MOD_MOBMOD : mod->BSIM3v1mobMod = value->iValue; mod->BSIM3v1mobModGiven = TRUE; break; case BSIM3v1_MOD_BINUNIT : mod->BSIM3v1binUnit = value->iValue; mod->BSIM3v1binUnitGiven = TRUE; break; case BSIM3v1_MOD_PARAMCHK : mod->BSIM3v1paramChk = value->iValue; mod->BSIM3v1paramChkGiven = TRUE; break; case BSIM3v1_MOD_CAPMOD : mod->BSIM3v1capMod = value->iValue; mod->BSIM3v1capModGiven = TRUE; break; case BSIM3v1_MOD_NQSMOD : mod->BSIM3v1nqsMod = value->iValue; mod->BSIM3v1nqsModGiven = TRUE; break; case BSIM3v1_MOD_NOIMOD : mod->BSIM3v1noiMod = value->iValue; mod->BSIM3v1noiModGiven = TRUE; break; case BSIM3v1_MOD_VERSION : mod->BSIM3v1version = value->rValue; mod->BSIM3v1versionGiven = TRUE; break; case BSIM3v1_MOD_TOX : mod->BSIM3v1tox = value->rValue; mod->BSIM3v1toxGiven = TRUE; break; case BSIM3v1_MOD_CDSC : mod->BSIM3v1cdsc = value->rValue; mod->BSIM3v1cdscGiven = TRUE; break; case BSIM3v1_MOD_CDSCB : mod->BSIM3v1cdscb = value->rValue; mod->BSIM3v1cdscbGiven = TRUE; break; case BSIM3v1_MOD_CDSCD : mod->BSIM3v1cdscd = value->rValue; mod->BSIM3v1cdscdGiven = TRUE; break; case BSIM3v1_MOD_CIT : mod->BSIM3v1cit = value->rValue; mod->BSIM3v1citGiven = TRUE; break; case BSIM3v1_MOD_NFACTOR : mod->BSIM3v1nfactor = value->rValue; mod->BSIM3v1nfactorGiven = TRUE; break; case BSIM3v1_MOD_XJ: mod->BSIM3v1xj = value->rValue; mod->BSIM3v1xjGiven = TRUE; break; case BSIM3v1_MOD_VSAT: mod->BSIM3v1vsat = value->rValue; mod->BSIM3v1vsatGiven = TRUE; break; case BSIM3v1_MOD_A0: mod->BSIM3v1a0 = value->rValue; mod->BSIM3v1a0Given = TRUE; break; case BSIM3v1_MOD_AGS: mod->BSIM3v1ags= value->rValue; mod->BSIM3v1agsGiven = TRUE; break; case BSIM3v1_MOD_A1: mod->BSIM3v1a1 = value->rValue; mod->BSIM3v1a1Given = TRUE; break; case BSIM3v1_MOD_A2: mod->BSIM3v1a2 = value->rValue; mod->BSIM3v1a2Given = TRUE; break; case BSIM3v1_MOD_AT: mod->BSIM3v1at = value->rValue; mod->BSIM3v1atGiven = TRUE; break; case BSIM3v1_MOD_KETA: mod->BSIM3v1keta = value->rValue; mod->BSIM3v1ketaGiven = TRUE; break; case BSIM3v1_MOD_NSUB: mod->BSIM3v1nsub = value->rValue; mod->BSIM3v1nsubGiven = TRUE; break; case BSIM3v1_MOD_NPEAK: mod->BSIM3v1npeak = value->rValue; mod->BSIM3v1npeakGiven = TRUE; if (mod->BSIM3v1npeak > 1.0e20) mod->BSIM3v1npeak *= 1.0e-6; break; case BSIM3v1_MOD_NGATE: mod->BSIM3v1ngate = value->rValue; mod->BSIM3v1ngateGiven = TRUE; if (mod->BSIM3v1ngate > 1.0e23) mod->BSIM3v1ngate *= 1.0e-6; break; case BSIM3v1_MOD_GAMMA1: mod->BSIM3v1gamma1 = value->rValue; mod->BSIM3v1gamma1Given = TRUE; break; case BSIM3v1_MOD_GAMMA2: mod->BSIM3v1gamma2 = value->rValue; mod->BSIM3v1gamma2Given = TRUE; break; case BSIM3v1_MOD_VBX: mod->BSIM3v1vbx = value->rValue; mod->BSIM3v1vbxGiven = TRUE; break; case BSIM3v1_MOD_VBM: mod->BSIM3v1vbm = value->rValue; mod->BSIM3v1vbmGiven = TRUE; break; case BSIM3v1_MOD_XT: mod->BSIM3v1xt = value->rValue; mod->BSIM3v1xtGiven = TRUE; break; case BSIM3v1_MOD_K1: mod->BSIM3v1k1 = value->rValue; mod->BSIM3v1k1Given = TRUE; break; case BSIM3v1_MOD_KT1: mod->BSIM3v1kt1 = value->rValue; mod->BSIM3v1kt1Given = TRUE; break; case BSIM3v1_MOD_KT1L: mod->BSIM3v1kt1l = value->rValue; mod->BSIM3v1kt1lGiven = TRUE; break; case BSIM3v1_MOD_KT2: mod->BSIM3v1kt2 = value->rValue; mod->BSIM3v1kt2Given = TRUE; break; case BSIM3v1_MOD_K2: mod->BSIM3v1k2 = value->rValue; mod->BSIM3v1k2Given = TRUE; break; case BSIM3v1_MOD_K3: mod->BSIM3v1k3 = value->rValue; mod->BSIM3v1k3Given = TRUE; break; case BSIM3v1_MOD_K3B: mod->BSIM3v1k3b = value->rValue; mod->BSIM3v1k3bGiven = TRUE; break; case BSIM3v1_MOD_NLX: mod->BSIM3v1nlx = value->rValue; mod->BSIM3v1nlxGiven = TRUE; break; case BSIM3v1_MOD_W0: mod->BSIM3v1w0 = value->rValue; mod->BSIM3v1w0Given = TRUE; break; case BSIM3v1_MOD_DVT0: mod->BSIM3v1dvt0 = value->rValue; mod->BSIM3v1dvt0Given = TRUE; break; case BSIM3v1_MOD_DVT1: mod->BSIM3v1dvt1 = value->rValue; mod->BSIM3v1dvt1Given = TRUE; break; case BSIM3v1_MOD_DVT2: mod->BSIM3v1dvt2 = value->rValue; mod->BSIM3v1dvt2Given = TRUE; break; case BSIM3v1_MOD_DVT0W: mod->BSIM3v1dvt0w = value->rValue; mod->BSIM3v1dvt0wGiven = TRUE; break; case BSIM3v1_MOD_DVT1W: mod->BSIM3v1dvt1w = value->rValue; mod->BSIM3v1dvt1wGiven = TRUE; break; case BSIM3v1_MOD_DVT2W: mod->BSIM3v1dvt2w = value->rValue; mod->BSIM3v1dvt2wGiven = TRUE; break; case BSIM3v1_MOD_DROUT: mod->BSIM3v1drout = value->rValue; mod->BSIM3v1droutGiven = TRUE; break; case BSIM3v1_MOD_DSUB: mod->BSIM3v1dsub = value->rValue; mod->BSIM3v1dsubGiven = TRUE; break; case BSIM3v1_MOD_VTH0: mod->BSIM3v1vth0 = value->rValue; mod->BSIM3v1vth0Given = TRUE; break; case BSIM3v1_MOD_UA: mod->BSIM3v1ua = value->rValue; mod->BSIM3v1uaGiven = TRUE; break; case BSIM3v1_MOD_UA1: mod->BSIM3v1ua1 = value->rValue; mod->BSIM3v1ua1Given = TRUE; break; case BSIM3v1_MOD_UB: mod->BSIM3v1ub = value->rValue; mod->BSIM3v1ubGiven = TRUE; break; case BSIM3v1_MOD_UB1: mod->BSIM3v1ub1 = value->rValue; mod->BSIM3v1ub1Given = TRUE; break; case BSIM3v1_MOD_UC: mod->BSIM3v1uc = value->rValue; mod->BSIM3v1ucGiven = TRUE; break; case BSIM3v1_MOD_UC1: mod->BSIM3v1uc1 = value->rValue; mod->BSIM3v1uc1Given = TRUE; break; case BSIM3v1_MOD_U0 : mod->BSIM3v1u0 = value->rValue; mod->BSIM3v1u0Given = TRUE; break; case BSIM3v1_MOD_UTE : mod->BSIM3v1ute = value->rValue; mod->BSIM3v1uteGiven = TRUE; break; case BSIM3v1_MOD_VOFF: mod->BSIM3v1voff = value->rValue; mod->BSIM3v1voffGiven = TRUE; break; case BSIM3v1_MOD_DELTA : mod->BSIM3v1delta = value->rValue; mod->BSIM3v1deltaGiven = TRUE; break; case BSIM3v1_MOD_RDSW: mod->BSIM3v1rdsw = value->rValue; mod->BSIM3v1rdswGiven = TRUE; break; case BSIM3v1_MOD_PRWG: mod->BSIM3v1prwg = value->rValue; mod->BSIM3v1prwgGiven = TRUE; break; case BSIM3v1_MOD_PRWB: mod->BSIM3v1prwb = value->rValue; mod->BSIM3v1prwbGiven = TRUE; break; case BSIM3v1_MOD_PRT: mod->BSIM3v1prt = value->rValue; mod->BSIM3v1prtGiven = TRUE; break; case BSIM3v1_MOD_ETA0: mod->BSIM3v1eta0 = value->rValue; mod->BSIM3v1eta0Given = TRUE; break; case BSIM3v1_MOD_ETAB: mod->BSIM3v1etab = value->rValue; mod->BSIM3v1etabGiven = TRUE; break; case BSIM3v1_MOD_PCLM: mod->BSIM3v1pclm = value->rValue; mod->BSIM3v1pclmGiven = TRUE; break; case BSIM3v1_MOD_PDIBL1: mod->BSIM3v1pdibl1 = value->rValue; mod->BSIM3v1pdibl1Given = TRUE; break; case BSIM3v1_MOD_PDIBL2: mod->BSIM3v1pdibl2 = value->rValue; mod->BSIM3v1pdibl2Given = TRUE; break; case BSIM3v1_MOD_PDIBLB: mod->BSIM3v1pdiblb = value->rValue; mod->BSIM3v1pdiblbGiven = TRUE; break; case BSIM3v1_MOD_PSCBE1: mod->BSIM3v1pscbe1 = value->rValue; mod->BSIM3v1pscbe1Given = TRUE; break; case BSIM3v1_MOD_PSCBE2: mod->BSIM3v1pscbe2 = value->rValue; mod->BSIM3v1pscbe2Given = TRUE; break; case BSIM3v1_MOD_PVAG: mod->BSIM3v1pvag = value->rValue; mod->BSIM3v1pvagGiven = TRUE; break; case BSIM3v1_MOD_WR : mod->BSIM3v1wr = value->rValue; mod->BSIM3v1wrGiven = TRUE; break; case BSIM3v1_MOD_DWG : mod->BSIM3v1dwg = value->rValue; mod->BSIM3v1dwgGiven = TRUE; break; case BSIM3v1_MOD_DWB : mod->BSIM3v1dwb = value->rValue; mod->BSIM3v1dwbGiven = TRUE; break; case BSIM3v1_MOD_B0 : mod->BSIM3v1b0 = value->rValue; mod->BSIM3v1b0Given = TRUE; break; case BSIM3v1_MOD_B1 : mod->BSIM3v1b1 = value->rValue; mod->BSIM3v1b1Given = TRUE; break; case BSIM3v1_MOD_ALPHA0 : mod->BSIM3v1alpha0 = value->rValue; mod->BSIM3v1alpha0Given = TRUE; break; case BSIM3v1_MOD_BETA0 : mod->BSIM3v1beta0 = value->rValue; mod->BSIM3v1beta0Given = TRUE; break; case BSIM3v1_MOD_ELM : mod->BSIM3v1elm = value->rValue; mod->BSIM3v1elmGiven = TRUE; break; case BSIM3v1_MOD_CGSL : mod->BSIM3v1cgsl = value->rValue; mod->BSIM3v1cgslGiven = TRUE; break; case BSIM3v1_MOD_CGDL : mod->BSIM3v1cgdl = value->rValue; mod->BSIM3v1cgdlGiven = TRUE; break; case BSIM3v1_MOD_CKAPPA : mod->BSIM3v1ckappa = value->rValue; mod->BSIM3v1ckappaGiven = TRUE; break; case BSIM3v1_MOD_CF : mod->BSIM3v1cf = value->rValue; mod->BSIM3v1cfGiven = TRUE; break; case BSIM3v1_MOD_CLC : mod->BSIM3v1clc = value->rValue; mod->BSIM3v1clcGiven = TRUE; break; case BSIM3v1_MOD_CLE : mod->BSIM3v1cle = value->rValue; mod->BSIM3v1cleGiven = TRUE; break; case BSIM3v1_MOD_DWC : mod->BSIM3v1dwc = value->rValue; mod->BSIM3v1dwcGiven = TRUE; break; case BSIM3v1_MOD_DLC : mod->BSIM3v1dlc = value->rValue; mod->BSIM3v1dlcGiven = TRUE; break; case BSIM3v1_MOD_VFBCV : mod->BSIM3v1vfbcv = value->rValue; mod->BSIM3v1vfbcvGiven = TRUE; break; /* Length dependence */ case BSIM3v1_MOD_LCDSC : mod->BSIM3v1lcdsc = value->rValue; mod->BSIM3v1lcdscGiven = TRUE; break; case BSIM3v1_MOD_LCDSCB : mod->BSIM3v1lcdscb = value->rValue; mod->BSIM3v1lcdscbGiven = TRUE; break; case BSIM3v1_MOD_LCDSCD : mod->BSIM3v1lcdscd = value->rValue; mod->BSIM3v1lcdscdGiven = TRUE; break; case BSIM3v1_MOD_LCIT : mod->BSIM3v1lcit = value->rValue; mod->BSIM3v1lcitGiven = TRUE; break; case BSIM3v1_MOD_LNFACTOR : mod->BSIM3v1lnfactor = value->rValue; mod->BSIM3v1lnfactorGiven = TRUE; break; case BSIM3v1_MOD_LXJ: mod->BSIM3v1lxj = value->rValue; mod->BSIM3v1lxjGiven = TRUE; break; case BSIM3v1_MOD_LVSAT: mod->BSIM3v1lvsat = value->rValue; mod->BSIM3v1lvsatGiven = TRUE; break; case BSIM3v1_MOD_LA0: mod->BSIM3v1la0 = value->rValue; mod->BSIM3v1la0Given = TRUE; break; case BSIM3v1_MOD_LAGS: mod->BSIM3v1lags = value->rValue; mod->BSIM3v1lagsGiven = TRUE; break; case BSIM3v1_MOD_LA1: mod->BSIM3v1la1 = value->rValue; mod->BSIM3v1la1Given = TRUE; break; case BSIM3v1_MOD_LA2: mod->BSIM3v1la2 = value->rValue; mod->BSIM3v1la2Given = TRUE; break; case BSIM3v1_MOD_LAT: mod->BSIM3v1lat = value->rValue; mod->BSIM3v1latGiven = TRUE; break; case BSIM3v1_MOD_LKETA: mod->BSIM3v1lketa = value->rValue; mod->BSIM3v1lketaGiven = TRUE; break; case BSIM3v1_MOD_LNSUB: mod->BSIM3v1lnsub = value->rValue; mod->BSIM3v1lnsubGiven = TRUE; break; case BSIM3v1_MOD_LNPEAK: mod->BSIM3v1lnpeak = value->rValue; mod->BSIM3v1lnpeakGiven = TRUE; if (mod->BSIM3v1lnpeak > 1.0e20) mod->BSIM3v1lnpeak *= 1.0e-6; break; case BSIM3v1_MOD_LNGATE: mod->BSIM3v1lngate = value->rValue; mod->BSIM3v1lngateGiven = TRUE; if (mod->BSIM3v1lngate > 1.0e23) mod->BSIM3v1lngate *= 1.0e-6; break; case BSIM3v1_MOD_LGAMMA1: mod->BSIM3v1lgamma1 = value->rValue; mod->BSIM3v1lgamma1Given = TRUE; break; case BSIM3v1_MOD_LGAMMA2: mod->BSIM3v1lgamma2 = value->rValue; mod->BSIM3v1lgamma2Given = TRUE; break; case BSIM3v1_MOD_LVBX: mod->BSIM3v1lvbx = value->rValue; mod->BSIM3v1lvbxGiven = TRUE; break; case BSIM3v1_MOD_LVBM: mod->BSIM3v1lvbm = value->rValue; mod->BSIM3v1lvbmGiven = TRUE; break; case BSIM3v1_MOD_LXT: mod->BSIM3v1lxt = value->rValue; mod->BSIM3v1lxtGiven = TRUE; break; case BSIM3v1_MOD_LK1: mod->BSIM3v1lk1 = value->rValue; mod->BSIM3v1lk1Given = TRUE; break; case BSIM3v1_MOD_LKT1: mod->BSIM3v1lkt1 = value->rValue; mod->BSIM3v1lkt1Given = TRUE; break; case BSIM3v1_MOD_LKT1L: mod->BSIM3v1lkt1l = value->rValue; mod->BSIM3v1lkt1lGiven = TRUE; break; case BSIM3v1_MOD_LKT2: mod->BSIM3v1lkt2 = value->rValue; mod->BSIM3v1lkt2Given = TRUE; break; case BSIM3v1_MOD_LK2: mod->BSIM3v1lk2 = value->rValue; mod->BSIM3v1lk2Given = TRUE; break; case BSIM3v1_MOD_LK3: mod->BSIM3v1lk3 = value->rValue; mod->BSIM3v1lk3Given = TRUE; break; case BSIM3v1_MOD_LK3B: mod->BSIM3v1lk3b = value->rValue; mod->BSIM3v1lk3bGiven = TRUE; break; case BSIM3v1_MOD_LNLX: mod->BSIM3v1lnlx = value->rValue; mod->BSIM3v1lnlxGiven = TRUE; break; case BSIM3v1_MOD_LW0: mod->BSIM3v1lw0 = value->rValue; mod->BSIM3v1lw0Given = TRUE; break; case BSIM3v1_MOD_LDVT0: mod->BSIM3v1ldvt0 = value->rValue; mod->BSIM3v1ldvt0Given = TRUE; break; case BSIM3v1_MOD_LDVT1: mod->BSIM3v1ldvt1 = value->rValue; mod->BSIM3v1ldvt1Given = TRUE; break; case BSIM3v1_MOD_LDVT2: mod->BSIM3v1ldvt2 = value->rValue; mod->BSIM3v1ldvt2Given = TRUE; break; case BSIM3v1_MOD_LDVT0W: mod->BSIM3v1ldvt0w = value->rValue; mod->BSIM3v1ldvt0Given = TRUE; break; case BSIM3v1_MOD_LDVT1W: mod->BSIM3v1ldvt1w = value->rValue; mod->BSIM3v1ldvt1wGiven = TRUE; break; case BSIM3v1_MOD_LDVT2W: mod->BSIM3v1ldvt2w = value->rValue; mod->BSIM3v1ldvt2wGiven = TRUE; break; case BSIM3v1_MOD_LDROUT: mod->BSIM3v1ldrout = value->rValue; mod->BSIM3v1ldroutGiven = TRUE; break; case BSIM3v1_MOD_LDSUB: mod->BSIM3v1ldsub = value->rValue; mod->BSIM3v1ldsubGiven = TRUE; break; case BSIM3v1_MOD_LVTH0: mod->BSIM3v1lvth0 = value->rValue; mod->BSIM3v1lvth0Given = TRUE; break; case BSIM3v1_MOD_LUA: mod->BSIM3v1lua = value->rValue; mod->BSIM3v1luaGiven = TRUE; break; case BSIM3v1_MOD_LUA1: mod->BSIM3v1lua1 = value->rValue; mod->BSIM3v1lua1Given = TRUE; break; case BSIM3v1_MOD_LUB: mod->BSIM3v1lub = value->rValue; mod->BSIM3v1lubGiven = TRUE; break; case BSIM3v1_MOD_LUB1: mod->BSIM3v1lub1 = value->rValue; mod->BSIM3v1lub1Given = TRUE; break; case BSIM3v1_MOD_LUC: mod->BSIM3v1luc = value->rValue; mod->BSIM3v1lucGiven = TRUE; break; case BSIM3v1_MOD_LUC1: mod->BSIM3v1luc1 = value->rValue; mod->BSIM3v1luc1Given = TRUE; break; case BSIM3v1_MOD_LU0 : mod->BSIM3v1lu0 = value->rValue; mod->BSIM3v1lu0Given = TRUE; break; case BSIM3v1_MOD_LUTE : mod->BSIM3v1lute = value->rValue; mod->BSIM3v1luteGiven = TRUE; break; case BSIM3v1_MOD_LVOFF: mod->BSIM3v1lvoff = value->rValue; mod->BSIM3v1lvoffGiven = TRUE; break; case BSIM3v1_MOD_LDELTA : mod->BSIM3v1ldelta = value->rValue; mod->BSIM3v1ldeltaGiven = TRUE; break; case BSIM3v1_MOD_LRDSW: mod->BSIM3v1lrdsw = value->rValue; mod->BSIM3v1lrdswGiven = TRUE; break; case BSIM3v1_MOD_LPRWB: mod->BSIM3v1lprwb = value->rValue; mod->BSIM3v1lprwbGiven = TRUE; break; case BSIM3v1_MOD_LPRWG: mod->BSIM3v1lprwg = value->rValue; mod->BSIM3v1lprwgGiven = TRUE; break; case BSIM3v1_MOD_LPRT: mod->BSIM3v1lprt = value->rValue; mod->BSIM3v1lprtGiven = TRUE; break; case BSIM3v1_MOD_LETA0: mod->BSIM3v1leta0 = value->rValue; mod->BSIM3v1leta0Given = TRUE; break; case BSIM3v1_MOD_LETAB: mod->BSIM3v1letab = value->rValue; mod->BSIM3v1letabGiven = TRUE; break; case BSIM3v1_MOD_LPCLM: mod->BSIM3v1lpclm = value->rValue; mod->BSIM3v1lpclmGiven = TRUE; break; case BSIM3v1_MOD_LPDIBL1: mod->BSIM3v1lpdibl1 = value->rValue; mod->BSIM3v1lpdibl1Given = TRUE; break; case BSIM3v1_MOD_LPDIBL2: mod->BSIM3v1lpdibl2 = value->rValue; mod->BSIM3v1lpdibl2Given = TRUE; break; case BSIM3v1_MOD_LPDIBLB: mod->BSIM3v1lpdiblb = value->rValue; mod->BSIM3v1lpdiblbGiven = TRUE; break; case BSIM3v1_MOD_LPSCBE1: mod->BSIM3v1lpscbe1 = value->rValue; mod->BSIM3v1lpscbe1Given = TRUE; break; case BSIM3v1_MOD_LPSCBE2: mod->BSIM3v1lpscbe2 = value->rValue; mod->BSIM3v1lpscbe2Given = TRUE; break; case BSIM3v1_MOD_LPVAG: mod->BSIM3v1lpvag = value->rValue; mod->BSIM3v1lpvagGiven = TRUE; break; case BSIM3v1_MOD_LWR : mod->BSIM3v1lwr = value->rValue; mod->BSIM3v1lwrGiven = TRUE; break; case BSIM3v1_MOD_LDWG : mod->BSIM3v1ldwg = value->rValue; mod->BSIM3v1ldwgGiven = TRUE; break; case BSIM3v1_MOD_LDWB : mod->BSIM3v1ldwb = value->rValue; mod->BSIM3v1ldwbGiven = TRUE; break; case BSIM3v1_MOD_LB0 : mod->BSIM3v1lb0 = value->rValue; mod->BSIM3v1lb0Given = TRUE; break; case BSIM3v1_MOD_LB1 : mod->BSIM3v1lb1 = value->rValue; mod->BSIM3v1lb1Given = TRUE; break; case BSIM3v1_MOD_LALPHA0 : mod->BSIM3v1lalpha0 = value->rValue; mod->BSIM3v1lalpha0Given = TRUE; break; case BSIM3v1_MOD_LBETA0 : mod->BSIM3v1lbeta0 = value->rValue; mod->BSIM3v1lbeta0Given = TRUE; break; case BSIM3v1_MOD_LELM : mod->BSIM3v1lelm = value->rValue; mod->BSIM3v1lelmGiven = TRUE; break; case BSIM3v1_MOD_LCGSL : mod->BSIM3v1lcgsl = value->rValue; mod->BSIM3v1lcgslGiven = TRUE; break; case BSIM3v1_MOD_LCGDL : mod->BSIM3v1lcgdl = value->rValue; mod->BSIM3v1lcgdlGiven = TRUE; break; case BSIM3v1_MOD_LCKAPPA : mod->BSIM3v1lckappa = value->rValue; mod->BSIM3v1lckappaGiven = TRUE; break; case BSIM3v1_MOD_LCF : mod->BSIM3v1lcf = value->rValue; mod->BSIM3v1lcfGiven = TRUE; break; case BSIM3v1_MOD_LCLC : mod->BSIM3v1lclc = value->rValue; mod->BSIM3v1lclcGiven = TRUE; break; case BSIM3v1_MOD_LCLE : mod->BSIM3v1lcle = value->rValue; mod->BSIM3v1lcleGiven = TRUE; break; case BSIM3v1_MOD_LVFBCV : mod->BSIM3v1lvfbcv = value->rValue; mod->BSIM3v1lvfbcvGiven = TRUE; break; /* Width dependence */ case BSIM3v1_MOD_WCDSC : mod->BSIM3v1wcdsc = value->rValue; mod->BSIM3v1wcdscGiven = TRUE; break; case BSIM3v1_MOD_WCDSCB : mod->BSIM3v1wcdscb = value->rValue; mod->BSIM3v1wcdscbGiven = TRUE; break; case BSIM3v1_MOD_WCDSCD : mod->BSIM3v1wcdscd = value->rValue; mod->BSIM3v1wcdscdGiven = TRUE; break; case BSIM3v1_MOD_WCIT : mod->BSIM3v1wcit = value->rValue; mod->BSIM3v1wcitGiven = TRUE; break; case BSIM3v1_MOD_WNFACTOR : mod->BSIM3v1wnfactor = value->rValue; mod->BSIM3v1wnfactorGiven = TRUE; break; case BSIM3v1_MOD_WXJ: mod->BSIM3v1wxj = value->rValue; mod->BSIM3v1wxjGiven = TRUE; break; case BSIM3v1_MOD_WVSAT: mod->BSIM3v1wvsat = value->rValue; mod->BSIM3v1wvsatGiven = TRUE; break; case BSIM3v1_MOD_WA0: mod->BSIM3v1wa0 = value->rValue; mod->BSIM3v1wa0Given = TRUE; break; case BSIM3v1_MOD_WAGS: mod->BSIM3v1wags = value->rValue; mod->BSIM3v1wagsGiven = TRUE; break; case BSIM3v1_MOD_WA1: mod->BSIM3v1wa1 = value->rValue; mod->BSIM3v1wa1Given = TRUE; break; case BSIM3v1_MOD_WA2: mod->BSIM3v1wa2 = value->rValue; mod->BSIM3v1wa2Given = TRUE; break; case BSIM3v1_MOD_WAT: mod->BSIM3v1wat = value->rValue; mod->BSIM3v1watGiven = TRUE; break; case BSIM3v1_MOD_WKETA: mod->BSIM3v1wketa = value->rValue; mod->BSIM3v1wketaGiven = TRUE; break; case BSIM3v1_MOD_WNSUB: mod->BSIM3v1wnsub = value->rValue; mod->BSIM3v1wnsubGiven = TRUE; break; case BSIM3v1_MOD_WNPEAK: mod->BSIM3v1wnpeak = value->rValue; mod->BSIM3v1wnpeakGiven = TRUE; if (mod->BSIM3v1wnpeak > 1.0e20) mod->BSIM3v1wnpeak *= 1.0e-6; break; case BSIM3v1_MOD_WNGATE: mod->BSIM3v1wngate = value->rValue; mod->BSIM3v1wngateGiven = TRUE; if (mod->BSIM3v1wngate > 1.0e23) mod->BSIM3v1wngate *= 1.0e-6; break; case BSIM3v1_MOD_WGAMMA1: mod->BSIM3v1wgamma1 = value->rValue; mod->BSIM3v1wgamma1Given = TRUE; break; case BSIM3v1_MOD_WGAMMA2: mod->BSIM3v1wgamma2 = value->rValue; mod->BSIM3v1wgamma2Given = TRUE; break; case BSIM3v1_MOD_WVBX: mod->BSIM3v1wvbx = value->rValue; mod->BSIM3v1wvbxGiven = TRUE; break; case BSIM3v1_MOD_WVBM: mod->BSIM3v1wvbm = value->rValue; mod->BSIM3v1wvbmGiven = TRUE; break; case BSIM3v1_MOD_WXT: mod->BSIM3v1wxt = value->rValue; mod->BSIM3v1wxtGiven = TRUE; break; case BSIM3v1_MOD_WK1: mod->BSIM3v1wk1 = value->rValue; mod->BSIM3v1wk1Given = TRUE; break; case BSIM3v1_MOD_WKT1: mod->BSIM3v1wkt1 = value->rValue; mod->BSIM3v1wkt1Given = TRUE; break; case BSIM3v1_MOD_WKT1L: mod->BSIM3v1wkt1l = value->rValue; mod->BSIM3v1wkt1lGiven = TRUE; break; case BSIM3v1_MOD_WKT2: mod->BSIM3v1wkt2 = value->rValue; mod->BSIM3v1wkt2Given = TRUE; break; case BSIM3v1_MOD_WK2: mod->BSIM3v1wk2 = value->rValue; mod->BSIM3v1wk2Given = TRUE; break; case BSIM3v1_MOD_WK3: mod->BSIM3v1wk3 = value->rValue; mod->BSIM3v1wk3Given = TRUE; break; case BSIM3v1_MOD_WK3B: mod->BSIM3v1wk3b = value->rValue; mod->BSIM3v1wk3bGiven = TRUE; break; case BSIM3v1_MOD_WNLX: mod->BSIM3v1wnlx = value->rValue; mod->BSIM3v1wnlxGiven = TRUE; break; case BSIM3v1_MOD_WW0: mod->BSIM3v1ww0 = value->rValue; mod->BSIM3v1ww0Given = TRUE; break; case BSIM3v1_MOD_WDVT0: mod->BSIM3v1wdvt0 = value->rValue; mod->BSIM3v1wdvt0Given = TRUE; break; case BSIM3v1_MOD_WDVT1: mod->BSIM3v1wdvt1 = value->rValue; mod->BSIM3v1wdvt1Given = TRUE; break; case BSIM3v1_MOD_WDVT2: mod->BSIM3v1wdvt2 = value->rValue; mod->BSIM3v1wdvt2Given = TRUE; break; case BSIM3v1_MOD_WDVT0W: mod->BSIM3v1wdvt0w = value->rValue; mod->BSIM3v1wdvt0wGiven = TRUE; break; case BSIM3v1_MOD_WDVT1W: mod->BSIM3v1wdvt1w = value->rValue; mod->BSIM3v1wdvt1wGiven = TRUE; break; case BSIM3v1_MOD_WDVT2W: mod->BSIM3v1wdvt2w = value->rValue; mod->BSIM3v1wdvt2wGiven = TRUE; break; case BSIM3v1_MOD_WDROUT: mod->BSIM3v1wdrout = value->rValue; mod->BSIM3v1wdroutGiven = TRUE; break; case BSIM3v1_MOD_WDSUB: mod->BSIM3v1wdsub = value->rValue; mod->BSIM3v1wdsubGiven = TRUE; break; case BSIM3v1_MOD_WVTH0: mod->BSIM3v1wvth0 = value->rValue; mod->BSIM3v1wvth0Given = TRUE; break; case BSIM3v1_MOD_WUA: mod->BSIM3v1wua = value->rValue; mod->BSIM3v1wuaGiven = TRUE; break; case BSIM3v1_MOD_WUA1: mod->BSIM3v1wua1 = value->rValue; mod->BSIM3v1wua1Given = TRUE; break; case BSIM3v1_MOD_WUB: mod->BSIM3v1wub = value->rValue; mod->BSIM3v1wubGiven = TRUE; break; case BSIM3v1_MOD_WUB1: mod->BSIM3v1wub1 = value->rValue; mod->BSIM3v1wub1Given = TRUE; break; case BSIM3v1_MOD_WUC: mod->BSIM3v1wuc = value->rValue; mod->BSIM3v1wucGiven = TRUE; break; case BSIM3v1_MOD_WUC1: mod->BSIM3v1wuc1 = value->rValue; mod->BSIM3v1wuc1Given = TRUE; break; case BSIM3v1_MOD_WU0 : mod->BSIM3v1wu0 = value->rValue; mod->BSIM3v1wu0Given = TRUE; break; case BSIM3v1_MOD_WUTE : mod->BSIM3v1wute = value->rValue; mod->BSIM3v1wuteGiven = TRUE; break; case BSIM3v1_MOD_WVOFF: mod->BSIM3v1wvoff = value->rValue; mod->BSIM3v1wvoffGiven = TRUE; break; case BSIM3v1_MOD_WDELTA : mod->BSIM3v1wdelta = value->rValue; mod->BSIM3v1wdeltaGiven = TRUE; break; case BSIM3v1_MOD_WRDSW: mod->BSIM3v1wrdsw = value->rValue; mod->BSIM3v1wrdswGiven = TRUE; break; case BSIM3v1_MOD_WPRWB: mod->BSIM3v1wprwb = value->rValue; mod->BSIM3v1wprwbGiven = TRUE; break; case BSIM3v1_MOD_WPRWG: mod->BSIM3v1wprwg = value->rValue; mod->BSIM3v1wprwgGiven = TRUE; break; case BSIM3v1_MOD_WPRT: mod->BSIM3v1wprt = value->rValue; mod->BSIM3v1wprtGiven = TRUE; break; case BSIM3v1_MOD_WETA0: mod->BSIM3v1weta0 = value->rValue; mod->BSIM3v1weta0Given = TRUE; break; case BSIM3v1_MOD_WETAB: mod->BSIM3v1wetab = value->rValue; mod->BSIM3v1wetabGiven = TRUE; break; case BSIM3v1_MOD_WPCLM: mod->BSIM3v1wpclm = value->rValue; mod->BSIM3v1wpclmGiven = TRUE; break; case BSIM3v1_MOD_WPDIBL1: mod->BSIM3v1wpdibl1 = value->rValue; mod->BSIM3v1wpdibl1Given = TRUE; break; case BSIM3v1_MOD_WPDIBL2: mod->BSIM3v1wpdibl2 = value->rValue; mod->BSIM3v1wpdibl2Given = TRUE; break; case BSIM3v1_MOD_WPDIBLB: mod->BSIM3v1wpdiblb = value->rValue; mod->BSIM3v1wpdiblbGiven = TRUE; break; case BSIM3v1_MOD_WPSCBE1: mod->BSIM3v1wpscbe1 = value->rValue; mod->BSIM3v1wpscbe1Given = TRUE; break; case BSIM3v1_MOD_WPSCBE2: mod->BSIM3v1wpscbe2 = value->rValue; mod->BSIM3v1wpscbe2Given = TRUE; break; case BSIM3v1_MOD_WPVAG: mod->BSIM3v1wpvag = value->rValue; mod->BSIM3v1wpvagGiven = TRUE; break; case BSIM3v1_MOD_WWR : mod->BSIM3v1wwr = value->rValue; mod->BSIM3v1wwrGiven = TRUE; break; case BSIM3v1_MOD_WDWG : mod->BSIM3v1wdwg = value->rValue; mod->BSIM3v1wdwgGiven = TRUE; break; case BSIM3v1_MOD_WDWB : mod->BSIM3v1wdwb = value->rValue; mod->BSIM3v1wdwbGiven = TRUE; break; case BSIM3v1_MOD_WB0 : mod->BSIM3v1wb0 = value->rValue; mod->BSIM3v1wb0Given = TRUE; break; case BSIM3v1_MOD_WB1 : mod->BSIM3v1wb1 = value->rValue; mod->BSIM3v1wb1Given = TRUE; break; case BSIM3v1_MOD_WALPHA0 : mod->BSIM3v1walpha0 = value->rValue; mod->BSIM3v1walpha0Given = TRUE; break; case BSIM3v1_MOD_WBETA0 : mod->BSIM3v1wbeta0 = value->rValue; mod->BSIM3v1wbeta0Given = TRUE; break; case BSIM3v1_MOD_WELM : mod->BSIM3v1welm = value->rValue; mod->BSIM3v1welmGiven = TRUE; break; case BSIM3v1_MOD_WCGSL : mod->BSIM3v1wcgsl = value->rValue; mod->BSIM3v1wcgslGiven = TRUE; break; case BSIM3v1_MOD_WCGDL : mod->BSIM3v1wcgdl = value->rValue; mod->BSIM3v1wcgdlGiven = TRUE; break; case BSIM3v1_MOD_WCKAPPA : mod->BSIM3v1wckappa = value->rValue; mod->BSIM3v1wckappaGiven = TRUE; break; case BSIM3v1_MOD_WCF : mod->BSIM3v1wcf = value->rValue; mod->BSIM3v1wcfGiven = TRUE; break; case BSIM3v1_MOD_WCLC : mod->BSIM3v1wclc = value->rValue; mod->BSIM3v1wclcGiven = TRUE; break; case BSIM3v1_MOD_WCLE : mod->BSIM3v1wcle = value->rValue; mod->BSIM3v1wcleGiven = TRUE; break; case BSIM3v1_MOD_WVFBCV : mod->BSIM3v1wvfbcv = value->rValue; mod->BSIM3v1wvfbcvGiven = TRUE; break; /* Cross-term dependence */ case BSIM3v1_MOD_PCDSC : mod->BSIM3v1pcdsc = value->rValue; mod->BSIM3v1pcdscGiven = TRUE; break; case BSIM3v1_MOD_PCDSCB : mod->BSIM3v1pcdscb = value->rValue; mod->BSIM3v1pcdscbGiven = TRUE; break; case BSIM3v1_MOD_PCDSCD : mod->BSIM3v1pcdscd = value->rValue; mod->BSIM3v1pcdscdGiven = TRUE; break; case BSIM3v1_MOD_PCIT : mod->BSIM3v1pcit = value->rValue; mod->BSIM3v1pcitGiven = TRUE; break; case BSIM3v1_MOD_PNFACTOR : mod->BSIM3v1pnfactor = value->rValue; mod->BSIM3v1pnfactorGiven = TRUE; break; case BSIM3v1_MOD_PXJ: mod->BSIM3v1pxj = value->rValue; mod->BSIM3v1pxjGiven = TRUE; break; case BSIM3v1_MOD_PVSAT: mod->BSIM3v1pvsat = value->rValue; mod->BSIM3v1pvsatGiven = TRUE; break; case BSIM3v1_MOD_PA0: mod->BSIM3v1pa0 = value->rValue; mod->BSIM3v1pa0Given = TRUE; break; case BSIM3v1_MOD_PAGS: mod->BSIM3v1pags = value->rValue; mod->BSIM3v1pagsGiven = TRUE; break; case BSIM3v1_MOD_PA1: mod->BSIM3v1pa1 = value->rValue; mod->BSIM3v1pa1Given = TRUE; break; case BSIM3v1_MOD_PA2: mod->BSIM3v1pa2 = value->rValue; mod->BSIM3v1pa2Given = TRUE; break; case BSIM3v1_MOD_PAT: mod->BSIM3v1pat = value->rValue; mod->BSIM3v1patGiven = TRUE; break; case BSIM3v1_MOD_PKETA: mod->BSIM3v1pketa = value->rValue; mod->BSIM3v1pketaGiven = TRUE; break; case BSIM3v1_MOD_PNSUB: mod->BSIM3v1pnsub = value->rValue; mod->BSIM3v1pnsubGiven = TRUE; break; case BSIM3v1_MOD_PNPEAK: mod->BSIM3v1pnpeak = value->rValue; mod->BSIM3v1pnpeakGiven = TRUE; if (mod->BSIM3v1pnpeak > 1.0e20) mod->BSIM3v1pnpeak *= 1.0e-6; break; case BSIM3v1_MOD_PNGATE: mod->BSIM3v1pngate = value->rValue; mod->BSIM3v1pngateGiven = TRUE; if (mod->BSIM3v1pngate > 1.0e23) mod->BSIM3v1pngate *= 1.0e-6; break; case BSIM3v1_MOD_PGAMMA1: mod->BSIM3v1pgamma1 = value->rValue; mod->BSIM3v1pgamma1Given = TRUE; break; case BSIM3v1_MOD_PGAMMA2: mod->BSIM3v1pgamma2 = value->rValue; mod->BSIM3v1pgamma2Given = TRUE; break; case BSIM3v1_MOD_PVBX: mod->BSIM3v1pvbx = value->rValue; mod->BSIM3v1pvbxGiven = TRUE; break; case BSIM3v1_MOD_PVBM: mod->BSIM3v1pvbm = value->rValue; mod->BSIM3v1pvbmGiven = TRUE; break; case BSIM3v1_MOD_PXT: mod->BSIM3v1pxt = value->rValue; mod->BSIM3v1pxtGiven = TRUE; break; case BSIM3v1_MOD_PK1: mod->BSIM3v1pk1 = value->rValue; mod->BSIM3v1pk1Given = TRUE; break; case BSIM3v1_MOD_PKT1: mod->BSIM3v1pkt1 = value->rValue; mod->BSIM3v1pkt1Given = TRUE; break; case BSIM3v1_MOD_PKT1L: mod->BSIM3v1pkt1l = value->rValue; mod->BSIM3v1pkt1lGiven = TRUE; break; case BSIM3v1_MOD_PKT2: mod->BSIM3v1pkt2 = value->rValue; mod->BSIM3v1pkt2Given = TRUE; break; case BSIM3v1_MOD_PK2: mod->BSIM3v1pk2 = value->rValue; mod->BSIM3v1pk2Given = TRUE; break; case BSIM3v1_MOD_PK3: mod->BSIM3v1pk3 = value->rValue; mod->BSIM3v1pk3Given = TRUE; break; case BSIM3v1_MOD_PK3B: mod->BSIM3v1pk3b = value->rValue; mod->BSIM3v1pk3bGiven = TRUE; break; case BSIM3v1_MOD_PNLX: mod->BSIM3v1pnlx = value->rValue; mod->BSIM3v1pnlxGiven = TRUE; break; case BSIM3v1_MOD_PW0: mod->BSIM3v1pw0 = value->rValue; mod->BSIM3v1pw0Given = TRUE; break; case BSIM3v1_MOD_PDVT0: mod->BSIM3v1pdvt0 = value->rValue; mod->BSIM3v1pdvt0Given = TRUE; break; case BSIM3v1_MOD_PDVT1: mod->BSIM3v1pdvt1 = value->rValue; mod->BSIM3v1pdvt1Given = TRUE; break; case BSIM3v1_MOD_PDVT2: mod->BSIM3v1pdvt2 = value->rValue; mod->BSIM3v1pdvt2Given = TRUE; break; case BSIM3v1_MOD_PDVT0W: mod->BSIM3v1pdvt0w = value->rValue; mod->BSIM3v1pdvt0wGiven = TRUE; break; case BSIM3v1_MOD_PDVT1W: mod->BSIM3v1pdvt1w = value->rValue; mod->BSIM3v1pdvt1wGiven = TRUE; break; case BSIM3v1_MOD_PDVT2W: mod->BSIM3v1pdvt2w = value->rValue; mod->BSIM3v1pdvt2wGiven = TRUE; break; case BSIM3v1_MOD_PDROUT: mod->BSIM3v1pdrout = value->rValue; mod->BSIM3v1pdroutGiven = TRUE; break; case BSIM3v1_MOD_PDSUB: mod->BSIM3v1pdsub = value->rValue; mod->BSIM3v1pdsubGiven = TRUE; break; case BSIM3v1_MOD_PVTH0: mod->BSIM3v1pvth0 = value->rValue; mod->BSIM3v1pvth0Given = TRUE; break; case BSIM3v1_MOD_PUA: mod->BSIM3v1pua = value->rValue; mod->BSIM3v1puaGiven = TRUE; break; case BSIM3v1_MOD_PUA1: mod->BSIM3v1pua1 = value->rValue; mod->BSIM3v1pua1Given = TRUE; break; case BSIM3v1_MOD_PUB: mod->BSIM3v1pub = value->rValue; mod->BSIM3v1pubGiven = TRUE; break; case BSIM3v1_MOD_PUB1: mod->BSIM3v1pub1 = value->rValue; mod->BSIM3v1pub1Given = TRUE; break; case BSIM3v1_MOD_PUC: mod->BSIM3v1puc = value->rValue; mod->BSIM3v1pucGiven = TRUE; break; case BSIM3v1_MOD_PUC1: mod->BSIM3v1puc1 = value->rValue; mod->BSIM3v1puc1Given = TRUE; break; case BSIM3v1_MOD_PU0 : mod->BSIM3v1pu0 = value->rValue; mod->BSIM3v1pu0Given = TRUE; break; case BSIM3v1_MOD_PUTE : mod->BSIM3v1pute = value->rValue; mod->BSIM3v1puteGiven = TRUE; break; case BSIM3v1_MOD_PVOFF: mod->BSIM3v1pvoff = value->rValue; mod->BSIM3v1pvoffGiven = TRUE; break; case BSIM3v1_MOD_PDELTA : mod->BSIM3v1pdelta = value->rValue; mod->BSIM3v1pdeltaGiven = TRUE; break; case BSIM3v1_MOD_PRDSW: mod->BSIM3v1prdsw = value->rValue; mod->BSIM3v1prdswGiven = TRUE; break; case BSIM3v1_MOD_PPRWB: mod->BSIM3v1pprwb = value->rValue; mod->BSIM3v1pprwbGiven = TRUE; break; case BSIM3v1_MOD_PPRWG: mod->BSIM3v1pprwg = value->rValue; mod->BSIM3v1pprwgGiven = TRUE; break; case BSIM3v1_MOD_PPRT: mod->BSIM3v1pprt = value->rValue; mod->BSIM3v1pprtGiven = TRUE; break; case BSIM3v1_MOD_PETA0: mod->BSIM3v1peta0 = value->rValue; mod->BSIM3v1peta0Given = TRUE; break; case BSIM3v1_MOD_PETAB: mod->BSIM3v1petab = value->rValue; mod->BSIM3v1petabGiven = TRUE; break; case BSIM3v1_MOD_PPCLM: mod->BSIM3v1ppclm = value->rValue; mod->BSIM3v1ppclmGiven = TRUE; break; case BSIM3v1_MOD_PPDIBL1: mod->BSIM3v1ppdibl1 = value->rValue; mod->BSIM3v1ppdibl1Given = TRUE; break; case BSIM3v1_MOD_PPDIBL2: mod->BSIM3v1ppdibl2 = value->rValue; mod->BSIM3v1ppdibl2Given = TRUE; break; case BSIM3v1_MOD_PPDIBLB: mod->BSIM3v1ppdiblb = value->rValue; mod->BSIM3v1ppdiblbGiven = TRUE; break; case BSIM3v1_MOD_PPSCBE1: mod->BSIM3v1ppscbe1 = value->rValue; mod->BSIM3v1ppscbe1Given = TRUE; break; case BSIM3v1_MOD_PPSCBE2: mod->BSIM3v1ppscbe2 = value->rValue; mod->BSIM3v1ppscbe2Given = TRUE; break; case BSIM3v1_MOD_PPVAG: mod->BSIM3v1ppvag = value->rValue; mod->BSIM3v1ppvagGiven = TRUE; break; case BSIM3v1_MOD_PWR : mod->BSIM3v1pwr = value->rValue; mod->BSIM3v1pwrGiven = TRUE; break; case BSIM3v1_MOD_PDWG : mod->BSIM3v1pdwg = value->rValue; mod->BSIM3v1pdwgGiven = TRUE; break; case BSIM3v1_MOD_PDWB : mod->BSIM3v1pdwb = value->rValue; mod->BSIM3v1pdwbGiven = TRUE; break; case BSIM3v1_MOD_PB0 : mod->BSIM3v1pb0 = value->rValue; mod->BSIM3v1pb0Given = TRUE; break; case BSIM3v1_MOD_PB1 : mod->BSIM3v1pb1 = value->rValue; mod->BSIM3v1pb1Given = TRUE; break; case BSIM3v1_MOD_PALPHA0 : mod->BSIM3v1palpha0 = value->rValue; mod->BSIM3v1palpha0Given = TRUE; break; case BSIM3v1_MOD_PBETA0 : mod->BSIM3v1pbeta0 = value->rValue; mod->BSIM3v1pbeta0Given = TRUE; break; case BSIM3v1_MOD_PELM : mod->BSIM3v1pelm = value->rValue; mod->BSIM3v1pelmGiven = TRUE; break; case BSIM3v1_MOD_PCGSL : mod->BSIM3v1pcgsl = value->rValue; mod->BSIM3v1pcgslGiven = TRUE; break; case BSIM3v1_MOD_PCGDL : mod->BSIM3v1pcgdl = value->rValue; mod->BSIM3v1pcgdlGiven = TRUE; break; case BSIM3v1_MOD_PCKAPPA : mod->BSIM3v1pckappa = value->rValue; mod->BSIM3v1pckappaGiven = TRUE; break; case BSIM3v1_MOD_PCF : mod->BSIM3v1pcf = value->rValue; mod->BSIM3v1pcfGiven = TRUE; break; case BSIM3v1_MOD_PCLC : mod->BSIM3v1pclc = value->rValue; mod->BSIM3v1pclcGiven = TRUE; break; case BSIM3v1_MOD_PCLE : mod->BSIM3v1pcle = value->rValue; mod->BSIM3v1pcleGiven = TRUE; break; case BSIM3v1_MOD_PVFBCV : mod->BSIM3v1pvfbcv = value->rValue; mod->BSIM3v1pvfbcvGiven = TRUE; break; case BSIM3v1_MOD_TNOM : mod->BSIM3v1tnom = value->rValue + 273.15; mod->BSIM3v1tnomGiven = TRUE; break; case BSIM3v1_MOD_CGSO : mod->BSIM3v1cgso = value->rValue; mod->BSIM3v1cgsoGiven = TRUE; break; case BSIM3v1_MOD_CGDO : mod->BSIM3v1cgdo = value->rValue; mod->BSIM3v1cgdoGiven = TRUE; break; case BSIM3v1_MOD_CGBO : mod->BSIM3v1cgbo = value->rValue; mod->BSIM3v1cgboGiven = TRUE; break; case BSIM3v1_MOD_XPART : mod->BSIM3v1xpart = value->rValue; mod->BSIM3v1xpartGiven = TRUE; break; case BSIM3v1_MOD_RSH : mod->BSIM3v1sheetResistance = value->rValue; mod->BSIM3v1sheetResistanceGiven = TRUE; break; case BSIM3v1_MOD_JS : mod->BSIM3v1jctSatCurDensity = value->rValue; mod->BSIM3v1jctSatCurDensityGiven = TRUE; break; case BSIM3v1_MOD_JSW : mod->BSIM3v1jctSidewallSatCurDensity = value->rValue; mod->BSIM3v1jctSidewallSatCurDensityGiven = TRUE; break; case BSIM3v1_MOD_PB : mod->BSIM3v1bulkJctPotential = value->rValue; mod->BSIM3v1bulkJctPotentialGiven = TRUE; break; case BSIM3v1_MOD_MJ : mod->BSIM3v1bulkJctBotGradingCoeff = value->rValue; mod->BSIM3v1bulkJctBotGradingCoeffGiven = TRUE; break; case BSIM3v1_MOD_PBSW : mod->BSIM3v1sidewallJctPotential = value->rValue; mod->BSIM3v1sidewallJctPotentialGiven = TRUE; break; case BSIM3v1_MOD_MJSW : mod->BSIM3v1bulkJctSideGradingCoeff = value->rValue; mod->BSIM3v1bulkJctSideGradingCoeffGiven = TRUE; break; case BSIM3v1_MOD_CJ : mod->BSIM3v1unitAreaJctCap = value->rValue; mod->BSIM3v1unitAreaJctCapGiven = TRUE; break; case BSIM3v1_MOD_CJSW : mod->BSIM3v1unitLengthSidewallJctCap = value->rValue; mod->BSIM3v1unitLengthSidewallJctCapGiven = TRUE; break; case BSIM3v1_MOD_NJ : mod->BSIM3v1jctEmissionCoeff = value->rValue; mod->BSIM3v1jctEmissionCoeffGiven = TRUE; break; case BSIM3v1_MOD_PBSWG : mod->BSIM3v1GatesidewallJctPotential = value->rValue; mod->BSIM3v1GatesidewallJctPotentialGiven = TRUE; break; case BSIM3v1_MOD_MJSWG : mod->BSIM3v1bulkJctGateSideGradingCoeff = value->rValue; mod->BSIM3v1bulkJctGateSideGradingCoeffGiven = TRUE; break; case BSIM3v1_MOD_CJSWG : mod->BSIM3v1unitLengthGateSidewallJctCap = value->rValue; mod->BSIM3v1unitLengthGateSidewallJctCapGiven = TRUE; break; case BSIM3v1_MOD_XTI : mod->BSIM3v1jctTempExponent = value->rValue; mod->BSIM3v1jctTempExponentGiven = TRUE; break; case BSIM3v1_MOD_LINT : mod->BSIM3v1Lint = value->rValue; mod->BSIM3v1LintGiven = TRUE; break; case BSIM3v1_MOD_LL : mod->BSIM3v1Ll = value->rValue; mod->BSIM3v1LlGiven = TRUE; break; case BSIM3v1_MOD_LLN : mod->BSIM3v1Lln = value->rValue; mod->BSIM3v1LlnGiven = TRUE; break; case BSIM3v1_MOD_LW : mod->BSIM3v1Lw = value->rValue; mod->BSIM3v1LwGiven = TRUE; break; case BSIM3v1_MOD_LWN : mod->BSIM3v1Lwn = value->rValue; mod->BSIM3v1LwnGiven = TRUE; break; case BSIM3v1_MOD_LWL : mod->BSIM3v1Lwl = value->rValue; mod->BSIM3v1LwlGiven = TRUE; break; case BSIM3v1_MOD_LMIN : mod->BSIM3v1Lmin = value->rValue; mod->BSIM3v1LminGiven = TRUE; break; case BSIM3v1_MOD_LMAX : mod->BSIM3v1Lmax = value->rValue; mod->BSIM3v1LmaxGiven = TRUE; break; case BSIM3v1_MOD_WINT : mod->BSIM3v1Wint = value->rValue; mod->BSIM3v1WintGiven = TRUE; break; case BSIM3v1_MOD_WL : mod->BSIM3v1Wl = value->rValue; mod->BSIM3v1WlGiven = TRUE; break; case BSIM3v1_MOD_WLN : mod->BSIM3v1Wln = value->rValue; mod->BSIM3v1WlnGiven = TRUE; break; case BSIM3v1_MOD_WW : mod->BSIM3v1Ww = value->rValue; mod->BSIM3v1WwGiven = TRUE; break; case BSIM3v1_MOD_WWN : mod->BSIM3v1Wwn = value->rValue; mod->BSIM3v1WwnGiven = TRUE; break; case BSIM3v1_MOD_WWL : mod->BSIM3v1Wwl = value->rValue; mod->BSIM3v1WwlGiven = TRUE; break; case BSIM3v1_MOD_WMIN : mod->BSIM3v1Wmin = value->rValue; mod->BSIM3v1WminGiven = TRUE; break; case BSIM3v1_MOD_WMAX : mod->BSIM3v1Wmax = value->rValue; mod->BSIM3v1WmaxGiven = TRUE; break; case BSIM3v1_MOD_NOIA : mod->BSIM3v1oxideTrapDensityA = value->rValue; mod->BSIM3v1oxideTrapDensityAGiven = TRUE; break; case BSIM3v1_MOD_NOIB : mod->BSIM3v1oxideTrapDensityB = value->rValue; mod->BSIM3v1oxideTrapDensityBGiven = TRUE; break; case BSIM3v1_MOD_NOIC : mod->BSIM3v1oxideTrapDensityC = value->rValue; mod->BSIM3v1oxideTrapDensityCGiven = TRUE; break; case BSIM3v1_MOD_EM : mod->BSIM3v1em = value->rValue; mod->BSIM3v1emGiven = TRUE; break; case BSIM3v1_MOD_EF : mod->BSIM3v1ef = value->rValue; mod->BSIM3v1efGiven = TRUE; break; case BSIM3v1_MOD_AF : mod->BSIM3v1af = value->rValue; mod->BSIM3v1afGiven = TRUE; break; case BSIM3v1_MOD_KF : mod->BSIM3v1kf = value->rValue; mod->BSIM3v1kfGiven = TRUE; break; case BSIM3v1_MOD_NMOS : if(value->iValue) { mod->BSIM3v1type = 1; mod->BSIM3v1typeGiven = TRUE; } break; case BSIM3v1_MOD_PMOS : if(value->iValue) { mod->BSIM3v1type = - 1; mod->BSIM3v1typeGiven = TRUE; } break; /* serban */ case BSIM3v1_MOD_HDIF : mod->BSIM3v1hdif = value->rValue; mod->BSIM3v1hdifGiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v1/bsim3v1ext.h0000644000175000017500000000262313546075722022630 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1991 JianHui Huang and Min-Chie Jeng. Modified: 2002 Paolo Nenzi. File: bsim3v1ext.h **********/ extern int BSIM3v1acLoad(GENmodel *, CKTcircuit *); extern int BSIM3v1ask(CKTcircuit *, GENinstance *, int, IFvalue *, IFvalue *); extern int BSIM3v1convTest(GENmodel *, CKTcircuit *); extern int BSIM3v1getic(GENmodel *, CKTcircuit *); extern int BSIM3v1load(GENmodel *, CKTcircuit *); extern int BSIM3v1mAsk(CKTcircuit *, GENmodel *, int, IFvalue *); extern int BSIM3v1mParam(int, IFvalue *, GENmodel *); extern void BSIM3v1mosCap(CKTcircuit *, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double*, double *, double *, double *, double *, double *, double *, double *, double *, double *, double *, double *, double *, double *, double *, double *); extern int BSIM3v1param(int, IFvalue *, GENinstance *, IFvalue *); extern int BSIM3v1pzLoad(GENmodel *, CKTcircuit *, SPcomplex *); extern int BSIM3v1setup(SMPmatrix *, GENmodel *, CKTcircuit *, int *); extern int BSIM3v1temp(GENmodel *, CKTcircuit *); extern int BSIM3v1trunc(GENmodel *, CKTcircuit *, double *); extern int BSIM3v1noise(int, int, GENmodel *, CKTcircuit *, Ndata *, double *); extern int BSIM3v1unsetup(GENmodel *, CKTcircuit *); tmpk8ny_4pz/src/spicelib/devices/bsim3v1/b3v1par.c0000644000175000017500000000646413546075722022103 0ustar carstencarsten/********** * Copyright 1990 Regents of the University of California. All rights reserved. * File: b3par.c * Author: 1995 Min-Chie Jeng and Mansun Chan. * Modified by Paolo Nenzi 2002 **********/ /* * Release Notes: * BSIM3v1v3.1, Released by yuhua 96/12/08 */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "bsim3v1def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/fteext.h" int BSIM3v1param(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { double scale; BSIM3v1instance *here = (BSIM3v1instance*)inst; NG_IGNORE(select); if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; switch(param) { case BSIM3v1_W: here->BSIM3v1w = value->rValue*scale; here->BSIM3v1wGiven = TRUE; break; case BSIM3v1_L: here->BSIM3v1l = value->rValue*scale; here->BSIM3v1lGiven = TRUE; break; case BSIM3v1_M: here->BSIM3v1m = value->rValue; here->BSIM3v1mGiven = TRUE; break; case BSIM3v1_AS: here->BSIM3v1sourceArea = value->rValue*scale*scale; here->BSIM3v1sourceAreaGiven = TRUE; break; case BSIM3v1_AD: here->BSIM3v1drainArea = value->rValue*scale*scale; here->BSIM3v1drainAreaGiven = TRUE; break; case BSIM3v1_PS: here->BSIM3v1sourcePerimeter = value->rValue*scale; here->BSIM3v1sourcePerimeterGiven = TRUE; break; case BSIM3v1_PD: here->BSIM3v1drainPerimeter = value->rValue*scale; here->BSIM3v1drainPerimeterGiven = TRUE; break; case BSIM3v1_NRS: here->BSIM3v1sourceSquares = value->rValue; here->BSIM3v1sourceSquaresGiven = TRUE; break; case BSIM3v1_NRD: here->BSIM3v1drainSquares = value->rValue; here->BSIM3v1drainSquaresGiven = TRUE; break; case BSIM3v1_OFF: here->BSIM3v1off = value->iValue; break; case BSIM3v1_IC_VBS: here->BSIM3v1icVBS = value->rValue; here->BSIM3v1icVBSGiven = TRUE; break; case BSIM3v1_IC_VDS: here->BSIM3v1icVDS = value->rValue; here->BSIM3v1icVDSGiven = TRUE; break; case BSIM3v1_IC_VGS: here->BSIM3v1icVGS = value->rValue; here->BSIM3v1icVGSGiven = TRUE; break; case BSIM3v1_NQSMOD: here->BSIM3v1nqsMod = value->iValue; here->BSIM3v1nqsModGiven = TRUE; break; case BSIM3v1_IC: switch(value->v.numValue){ case 3: here->BSIM3v1icVBS = *(value->v.vec.rVec+2); here->BSIM3v1icVBSGiven = TRUE; case 2: here->BSIM3v1icVGS = *(value->v.vec.rVec+1); here->BSIM3v1icVGSGiven = TRUE; case 1: here->BSIM3v1icVDS = *(value->v.vec.rVec); here->BSIM3v1icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3v1/b3v1getic.c0000644000175000017500000000233213546075722022402 0ustar carstencarsten/********** * Copyright 1990 Regents of the University of California. All rights reserved. * File: b3v1getic.c * Author: 1995 Min-Chie Jeng and Mansun Chan. * Modified by Paolo Nenzi 2002 **********/ /* * Release Notes: * BSIM3v3.1, Released by yuhua 96/12/08 */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim3v1def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM3v1getic(GENmodel *inModel, CKTcircuit *ckt) { BSIM3v1model *model = (BSIM3v1model*)inModel; BSIM3v1instance *here; for (; model ; model = BSIM3v1nextModel(model)) { for (here = BSIM3v1instances(model); here; here = BSIM3v1nextInstance(here)) { if(!here->BSIM3v1icVBSGiven) { here->BSIM3v1icVBS = *(ckt->CKTrhs + here->BSIM3v1bNode) - *(ckt->CKTrhs + here->BSIM3v1sNode); } if (!here->BSIM3v1icVDSGiven) { here->BSIM3v1icVDS = *(ckt->CKTrhs + here->BSIM3v1dNode) - *(ckt->CKTrhs + here->BSIM3v1sNode); } if (!here->BSIM3v1icVGSGiven) { here->BSIM3v1icVGS = *(ckt->CKTrhs + here->BSIM3v1gNode) - *(ckt->CKTrhs + here->BSIM3v1sNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/soi3/0000755000175000017500000000000013546075722020040 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/soi3/Makefile.am0000644000175000017500000000074413546075722022101 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libsoi3.la libsoi3_la_SOURCES = \ soi3.c \ soi3acld.c \ soi3ask.c \ soi3cap.c \ soi3conv.c \ soi3defs.h \ soi3ext.h \ soi3ic.c \ soi3init.c \ soi3init.h \ soi3itf.h \ soi3load.c \ soi3mask.c \ soi3mpar.c \ soi3nois.c \ soi3par.c \ soi3set.c \ soi3temp.c \ soi3trun.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/soi3/soi3.c0000644000175000017500000003421113546075722021062 0ustar carstencarsten/********** STAG version 2.7 Copyright 2000 owned by the United Kingdom Secretary of State for Defence acting through the Defence Evaluation and Research Agency. Developed by : Jim Benson, Department of Electronics and Computer Science, University of Southampton, United Kingdom. With help from : Nele D'Halleweyn, Ketan Mistry, Bill Redman-White, and Craig Easson. Based on STAG version 2.1 Developed by : Mike Lee, With help from : Bernard Tenbroek, Bill Redman-White, Mike Uren, Chris Edwards and John Bunyan. Acknowledgements : Rupert Howes and Pete Mole. **********/ /********** Modified by Paolo Nenzi 2002 ngspice integration **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "soi3defs.h" #include "ngspice/suffix.h" char *SOI3names[] = { "Drain", "Front Gate", "Source", "Back Gate", "Bulk", "Thermal" }; IFparm SOI3pTable[] = { /* parameters */ IOP("l", SOI3_L, IF_REAL, "Length"), IOP("w", SOI3_W, IF_REAL, "Width"), IOP("m", SOI3_M, IF_REAL, "Parallel Multiplier"), IOP("as", SOI3_AS, IF_REAL, "Source area"), IOP("ad", SOI3_AD, IF_REAL, "Drain area"), IOP("ab", SOI3_AB, IF_REAL, "Body area"), IOP("nrd", SOI3_NRD, IF_REAL, "Drain squares"), IOP("nrs", SOI3_NRS, IF_REAL, "Source squares"), IP("off", SOI3_OFF, IF_FLAG, "Device initially off"), IOP("icvds", SOI3_IC_VDS, IF_REAL, "Initial D-S voltage"), IOP("icvgfs", SOI3_IC_VGFS, IF_REAL, "Initial GF-S voltage"), IOP("icvgbs", SOI3_IC_VGBS, IF_REAL, "Initial GB-S voltage"), IOP("icvbs", SOI3_IC_VBS, IF_REAL, "Initial B-S voltage"), IOP("temp", SOI3_TEMP, IF_REAL, "Instance temperature"), IOP("rt", SOI3_RT, IF_REAL, "Instance Lumped Thermal Resistance"), IOP("ct", SOI3_CT, IF_REAL, "Instance Lumped Thermal Capacitance"), IOP("rt1", SOI3_RT1, IF_REAL, "Second Thermal Resistance"), IOP("ct1", SOI3_CT1, IF_REAL, "Second Thermal Capacitance"), IOP("rt2", SOI3_RT2, IF_REAL, "Third Thermal Resistance"), IOP("ct2", SOI3_CT2, IF_REAL, "Third Thermal Capacitance"), IOP("rt3", SOI3_RT3, IF_REAL, "Fourth Thermal Resistance"), IOP("ct3", SOI3_CT3, IF_REAL, "Fourth Thermal Capacitance"), IOP("rt4", SOI3_RT4, IF_REAL, "Fifth Thermal Resistance"), IOP("ct4", SOI3_CT4, IF_REAL, "Fifth Thermal Capacitance"), IP( "ic", SOI3_IC, IF_REALVEC,"Vector of D-S, GF-S, GB-S, B-S voltages"), /* IP( "sens_l", SOI3_L_SENS, IF_FLAG, "flag to request sensitivity WRT length"), IP( "sens_w", SOI3_W_SENS, IF_FLAG, "flag to request sensitivity WRT width"),*/ OP( "dnode", SOI3_DNODE, IF_INTEGER, "Number of the drain node "), OP( "gfnode", SOI3_GFNODE, IF_INTEGER, "Number of frt. gate node "), OP( "snode", SOI3_SNODE, IF_INTEGER, "Number of the source node "), OP( "gbnode", SOI3_GBNODE, IF_INTEGER, "Number of back gate node "), OP( "bnode", SOI3_BNODE, IF_INTEGER, "Number of the body node "), OP( "dnodeprime", SOI3_DNODEPRIME, IF_INTEGER, "Number of int. drain node"), OP( "snodeprime", SOI3_SNODEPRIME, IF_INTEGER, "Number of int. source node "), OP( "tnode", SOI3_TNODE, IF_INTEGER, "Number of thermal node "), OP( "branch", SOI3_BRANCH, IF_INTEGER, "Number of thermal branch "), OP( "sourceconductance", SOI3_SOURCECONDUCT, IF_REAL, "Conductance of source"), OP( "drainconductance", SOI3_DRAINCONDUCT, IF_REAL, "Conductance of drain"), OP( "von", SOI3_VON, IF_REAL, "Effective Threshold Voltage (von) "), OP( "vfbf", SOI3_VFBF, IF_REAL, "Temperature adjusted flat band voltage"), OP( "vdsat", SOI3_VDSAT, IF_REAL, "Saturation drain voltage"), OP( "sourcevcrit", SOI3_SOURCEVCRIT,IF_REAL, "Critical source voltage"), OP( "drainvcrit", SOI3_DRAINVCRIT, IF_REAL, "Critical drain voltage"), OP( "id", SOI3_ID, IF_REAL, "Drain current"), OP( "ibs", SOI3_IBS, IF_REAL, "B-S junction current"), OP( "ibd", SOI3_IBD, IF_REAL, "B-D junction current"), OP( "gmbs", SOI3_GMBS, IF_REAL, "Bulk-Source transconductance"), OP( "gmf", SOI3_GMF, IF_REAL, "Front transconductance"), OP( "gmb", SOI3_GMB, IF_REAL, "Back transconductance"), OP( "gds", SOI3_GDS, IF_REAL, "Drain-Source conductance"), OP( "gbd", SOI3_GBD, IF_REAL, "Bulk-Drain conductance"), OP( "gbs", SOI3_GBS, IF_REAL, "Bulk-Source conductance"), OP( "capbd", SOI3_CAPBD, IF_REAL, "Bulk-Drain capacitance"), OP( "capbs", SOI3_CAPBS, IF_REAL, "Bulk-Source capacitance"), OP( "cbd0", SOI3_CAPZEROBIASBD, IF_REAL, "Zero-Bias B-D junction capacitance"), OP( "cbs0", SOI3_CAPZEROBIASBS, IF_REAL, "Zero-Bias B-S junction capacitance"), OP( "vbd", SOI3_VBD, IF_REAL, "Bulk-Drain voltage"), OP( "vbs", SOI3_VBS, IF_REAL, "Bulk-Source voltage"), OP( "vgfs", SOI3_VGFS, IF_REAL, "Front gate-Source voltage"), OP( "vgbs", SOI3_VGBS, IF_REAL, "Back gate-Source voltage"), OP( "vds", SOI3_VDS, IF_REAL, "Drain-Source voltage"), OP( "qgf", SOI3_QGF, IF_REAL, "Front Gate charge storage"), OP( "iqgf",SOI3_IQGF,IF_REAL,"Current due to front gate charge storage"), /* OP( "qgb", SOI3_QGB, IF_REAL, "Back Gate charge storage"), OP( "iqgb",SOI3_IQGB,IF_REAL,"Current due to back gate charge storage"), */ OP( "qd", SOI3_QD, IF_REAL, "Drain charge storage"), OP( "iqd",SOI3_IQD,IF_REAL,"Current due to drain charge storage"), OP( "qs", SOI3_QS, IF_REAL, "Source charge storage"), OP( "iqs",SOI3_IQS,IF_REAL,"Current due to source charge storage"), OP( "qbd", SOI3_QBD, IF_REAL, "Bulk-Drain charge storage"), OP( "iqbd",SOI3_IQBD,IF_REAL,"Current due to bulk-drain charge storage"), OP( "qbs", SOI3_QBS, IF_REAL, "Bulk-Source charge storage"), OP( "iqbs",SOI3_IQBS,IF_REAL,"Currnet due to bulk-source charge storage"), /* extra stuff for newer model -msll Jan96 */ OP( "vfbb", SOI3_VFBB, IF_REAL, "Temperature adjusted back flat band voltage") /*, OP( "sens_l_dc", SOI3_L_SENS_DC, IF_REAL, "dc sensitivity wrt length"), OP( "sens_l_real", SOI3_L_SENS_REAL,IF_REAL, "real part of ac sensitivity wrt length"), OP( "sens_l_imag", SOI3_L_SENS_IMAG,IF_REAL, "imag part of ac sensitivity wrt length"), OP( "sens_l_mag", SOI3_L_SENS_MAG, IF_REAL, "sensitivity wrt l of ac magnitude"), OP( "sens_l_ph", SOI3_L_SENS_PH, IF_REAL, "sensitivity wrt l of ac phase"), OP( "sens_l_cplx", SOI3_L_SENS_CPLX,IF_COMPLEX, "ac sensitivity wrt length"), OP( "sens_w_dc", SOI3_W_SENS_DC, IF_REAL, "dc sensitivity wrt width"), OP( "sens_w_real", SOI3_W_SENS_REAL,IF_REAL, "real part of ac sensitivity wrt width"), OP( "sens_w_imag", SOI3_W_SENS_IMAG,IF_REAL, "imag part of ac sensitivity wrt width"), OP( "sens_w_mag", SOI3_W_SENS_MAG, IF_REAL, "sensitivity wrt w of ac magnitude"), OP( "sens_w_ph", SOI3_W_SENS_PH, IF_REAL, "sensitivity wrt w of ac phase"), OP( "sens_w_cplx", SOI3_W_SENS_CPLX,IF_COMPLEX, "ac sensitivity wrt width")*/ }; IFparm SOI3mPTable[] = { /* model parameters */ IOP("vto", SOI3_MOD_VTO, IF_REAL ,"Threshold voltage"), IOPR("vt0", SOI3_MOD_VTO, IF_REAL ,"Threshold voltage"), IOP("vfbf", SOI3_MOD_VFBF, IF_REAL ,"Flat band voltage"), IOP("kp", SOI3_MOD_KP, IF_REAL ,"Transconductance parameter"), IOP("gamma", SOI3_MOD_GAMMA, IF_REAL ,"Body Factor"), IOP("phi", SOI3_MOD_PHI, IF_REAL ,"Surface potential"), IOP("lambda",SOI3_MOD_LAMBDA,IF_REAL ,"Channel length modulation"), IOP("theta", SOI3_MOD_THETA, IF_REAL ,"Vertical field mobility degradation"), IOP("rd", SOI3_MOD_RD, IF_REAL ,"Drain ohmic resistance"), IOP("rs", SOI3_MOD_RS, IF_REAL ,"Source ohmic resistance"), IOP("cbd", SOI3_MOD_CBD, IF_REAL ,"B-D junction capacitance"), IOP("cbs", SOI3_MOD_CBS, IF_REAL ,"B-S junction capacitance"), IOP("is", SOI3_MOD_IS, IF_REAL ,"Bulk junction sat. current"), IOP("is1", SOI3_MOD_IS1, IF_REAL ,"2nd Bulk junction sat. current"), IOP("pb", SOI3_MOD_PB, IF_REAL ,"Bulk junction potential"), IOP("cgfso", SOI3_MOD_CGFSO, IF_REAL ,"Front Gate-source overlap cap."), IOP("cgfdo", SOI3_MOD_CGFDO, IF_REAL ,"Front Gate-drain overlap cap."), IOP("cgfbo", SOI3_MOD_CGFBO, IF_REAL ,"Front Gate-bulk overlap cap."), IOP("cgbso", SOI3_MOD_CGBSO, IF_REAL ,"Back Gate-source overlap cap."), IOP("cgbdo", SOI3_MOD_CGBDO, IF_REAL ,"Back Gate-drain overlap cap."), IOP("cgbbo", SOI3_MOD_CGBBO, IF_REAL ,"Back Gate-bulk overlap cap."), IOP("rsh", SOI3_MOD_RSH, IF_REAL ,"Sheet resistance"), IOP("cj", SOI3_MOD_CJSW, IF_REAL ,"Side junction cap per area"), IOP("mj", SOI3_MOD_MJSW, IF_REAL ,"Side grading coefficient"), IOP("js", SOI3_MOD_JS, IF_REAL ,"Bulk jct. sat. current density"), IOP("js1", SOI3_MOD_JS1, IF_REAL ,"2nd Bulk jct. sat. current density"), IOP("tof", SOI3_MOD_TOF, IF_REAL ,"Front Oxide thickness"), IOP("tob", SOI3_MOD_TOB, IF_REAL ,"Back Oxide thickness"), IOP("tb", SOI3_MOD_TB, IF_REAL ,"Bulk film thickness"), IOP("ld", SOI3_MOD_LD, IF_REAL ,"Lateral diffusion"), IOP("u0", SOI3_MOD_U0, IF_REAL ,"Surface mobility"), IOPR("uo", SOI3_MOD_U0, IF_REAL ,"Surface mobility"), IOP("fc", SOI3_MOD_FC, IF_REAL ,"Forward bias jct. fit parm."), IP("nsoi", SOI3_MOD_NSOI3, IF_FLAG ,"N type SOI3fet model"), IP("psoi", SOI3_MOD_PSOI3, IF_FLAG ,"P type SOI3fet model"), IOP("kox", SOI3_MOD_KOX, IF_REAL ,"Oxide thermal conductivity"), IOP("shsi", SOI3_MOD_SHSI, IF_REAL ,"Specific heat of silicon"), IOP("dsi", SOI3_MOD_DSI, IF_REAL ,"Density of silicon"), IOP("nsub", SOI3_MOD_NSUB, IF_REAL ,"Substrate doping"), IOP("tpg", SOI3_MOD_TPG, IF_INTEGER,"Gate type"), IOP("nqff", SOI3_MOD_NQFF, IF_REAL ,"Front fixed oxide charge density"), IOP("nqfb", SOI3_MOD_NQFB, IF_REAL ,"Back fixed oxide charge density"), IOP("nssf", SOI3_MOD_NSSF, IF_REAL ,"Front surface state density"), IOP("nssb", SOI3_MOD_NSSB, IF_REAL ,"Back surface state density"), IOP("tnom", SOI3_MOD_TNOM, IF_REAL ,"Parameter measurement temp"), IP("kf", SOI3_MOD_KF, IF_REAL ,"Flicker noise coefficient"), IP("af", SOI3_MOD_AF, IF_REAL ,"Flicker noise exponent"), /* extra stuff for newer model - msll Jan96 */ IOP("sigma", SOI3_MOD_SIGMA, IF_REAL ,"DIBL coefficient"), IOP("chifb", SOI3_MOD_CHIFB, IF_REAL ,"Temperature coeff of flatband voltage"), IOP("chiphi",SOI3_MOD_CHIPHI, IF_REAL ,"Temperature coeff of PHI"), IOP("deltaw",SOI3_MOD_DELTAW,IF_REAL ,"Narrow width factor"), IOP("deltal",SOI3_MOD_DELTAL,IF_REAL ,"Short channel factor"), IOP("vsat", SOI3_MOD_VSAT, IF_REAL ,"Saturation velocity"), IOP("k", SOI3_MOD_K, IF_REAL ,"Thermal exponent"), IOP("lx", SOI3_MOD_LX, IF_REAL ,"Channel length modulation (alternative)"), IOP("vp", SOI3_MOD_VP, IF_REAL ,"Channel length modulation (alt. empirical)"), IOP("eta", SOI3_MOD_ETA, IF_REAL ,"Impact ionization field adjustment factor"), IOP("alpha0",SOI3_MOD_ALPHA0,IF_REAL ,"First impact ionisation coeff (alpha0)"), IOP("beta0", SOI3_MOD_BETA0, IF_REAL ,"Second impact ionisation coeff (beta0)"), IOP("lm", SOI3_MOD_LM, IF_REAL ,"Impact ion. drain region length"), IOP("lm1", SOI3_MOD_LM1, IF_REAL ,"Impact ion. drain region length coeff"), IOP("lm2", SOI3_MOD_LM2, IF_REAL ,"Impact ion. drain region length coeff"), IOP("etad", SOI3_MOD_ETAD, IF_REAL ,"Diode ideality factor"), IOP("etad1", SOI3_MOD_ETAD1, IF_REAL ,"2nd Diode ideality factor"), IOP("chibeta",SOI3_MOD_CHIBETA,IF_REAL ,"Impact ionisation temperature coefficient"), IOP("vfbb", SOI3_MOD_VFBB, IF_REAL ,"Back Flat band voltage"), IOP("gammab",SOI3_MOD_GAMMAB,IF_REAL ,"Back Body Factor"), IOP("chid", SOI3_MOD_CHID, IF_REAL ,"Junction temperature factor"), IOP("chid1", SOI3_MOD_CHID1, IF_REAL ,"2nd Junction temperature factor"), IOP("dvt", SOI3_MOD_DVT, IF_INTEGER,"Switch for temperature dependence of vt in diodes"), IOP("nlev", SOI3_MOD_NLEV, IF_INTEGER,"Level switch for flicker noise model"), IOP("betabjt",SOI3_MOD_BETABJT,IF_REAL ,"Beta for BJT"), IOP("tauf", SOI3_MOD_TAUFBJT,IF_REAL ,"Forward tau for BJT"), IOP("taur", SOI3_MOD_TAURBJT,IF_REAL ,"Reverse tau for BJT"), IOP("betaexp",SOI3_MOD_BETAEXP,IF_REAL ,"Exponent for Beta of BJT"), IOP("tauexp", SOI3_MOD_TAUEXP,IF_REAL, "Exponent for Transit time of BJT"), IOP("rsw", SOI3_MOD_RSW, IF_REAL ,"Source resistance width scaling factor"), IOP("rdw", SOI3_MOD_RDW, IF_REAL ,"Drain resistance width scaling factor"), IOP("fmin", SOI3_MOD_FMIN, IF_REAL ,"Minimum feature size of technology"), IOP("vtex", SOI3_MOD_VTEX, IF_REAL ,"Extracted threshold voltage"), IOP("vdex", SOI3_MOD_VDEX, IF_REAL ,"Drain bias at which vtex extracted"), IOP("delta0",SOI3_MOD_DELTA0,IF_REAL ,"Surface potential factor for vtex conversion"), IOP("csf", SOI3_MOD_CSF ,IF_REAL ,"Saturation region charge sharing factor"), IOP("nplus", SOI3_MOD_NPLUS ,IF_REAL ,"Doping concentration of N+ or P+ regions"), IOP("rta", SOI3_MOD_RTA ,IF_REAL ,"Thermal resistance area scaling factor"), IOP("cta", SOI3_MOD_CTA ,IF_REAL ,"Thermal capacitance area scaling factor"), IOP("mexp", SOI3_MOD_MEXP ,IF_REAL ,"Exponent for CLM smoothing") }; int SOI3nSize = NUMELEMS(SOI3names); int SOI3pTSize = NUMELEMS(SOI3pTable); int SOI3mPTSize = NUMELEMS(SOI3mPTable); int SOI3iSize = sizeof(SOI3instance); int SOI3mSize = sizeof(SOI3model); tmpk8ny_4pz/src/spicelib/devices/soi3/soi3mask.c0000644000175000017500000002276413546075722021750 0ustar carstencarsten/********** STAG version 2.7 Copyright 2000 owned by the United Kingdom Secretary of State for Defence acting through the Defence Evaluation and Research Agency. Developed by : Jim Benson, Department of Electronics and Computer Science, University of Southampton, United Kingdom. With help from : Nele D'Halleweyn, Ketan Mistry, Bill Redman-White, and Craig Easson. Based on STAG version 2.1 Developed by : Mike Lee, With help from : Bernard Tenbroek, Bill Redman-White, Mike Uren, Chris Edwards and John Bunyan. Acknowledgements : Rupert Howes and Pete Mole. **********/ /********** Modified by Paolo Nenzi 2002 ngspice integration **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "soi3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int SOI3mAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { SOI3model *model = (SOI3model *)inst; NG_IGNORE(ckt); switch(which) { case SOI3_MOD_VTO: value->rValue = model->SOI3vt0; return(OK); case SOI3_MOD_VFBF: value->rValue = model->SOI3vfbF; return(OK); case SOI3_MOD_KP: value->rValue = model->SOI3transconductance; return(OK); case SOI3_MOD_GAMMA: value->rValue = model->SOI3gamma; return(OK); case SOI3_MOD_PHI: value->rValue = model->SOI3phi; return(OK); case SOI3_MOD_LAMBDA: value->rValue = model->SOI3lambda; return(OK); case SOI3_MOD_THETA: value->rValue = model->SOI3theta; return(OK); case SOI3_MOD_RD: value->rValue = model->SOI3drainResistance; return(OK); case SOI3_MOD_RS: value->rValue = model->SOI3sourceResistance; return(OK); case SOI3_MOD_CBD: value->rValue = model->SOI3capBD; return(OK); case SOI3_MOD_CBS: value->rValue = model->SOI3capBS; return(OK); case SOI3_MOD_IS: value->rValue = model->SOI3jctSatCur; return(OK); case SOI3_MOD_IS1: value->rValue = model->SOI3jctSatCur1; return(OK); case SOI3_MOD_PB: value->rValue = model->SOI3bulkJctPotential; return(OK); case SOI3_MOD_CGFSO: value->rValue = model->SOI3frontGateSourceOverlapCapFactor; return(OK); case SOI3_MOD_CGFDO: value->rValue = model->SOI3frontGateDrainOverlapCapFactor; return(OK); case SOI3_MOD_CGFBO: value->rValue = model->SOI3frontGateBulkOverlapCapFactor; return(OK); case SOI3_MOD_CGBSO: value->rValue = model->SOI3backGateSourceOverlapCapAreaFactor; return(OK); case SOI3_MOD_CGBDO: value->rValue = model->SOI3backGateDrainOverlapCapAreaFactor; return(OK); case SOI3_MOD_CGBBO: value->rValue = model->SOI3backGateBulkOverlapCapAreaFactor; return(OK); case SOI3_MOD_RSH: value->rValue = model->SOI3sheetResistance; return(OK); case SOI3_MOD_CJSW: value->rValue = model->SOI3sideWallCapFactor; return(OK); case SOI3_MOD_MJSW: value->rValue = model->SOI3bulkJctSideGradingCoeff; return(OK); case SOI3_MOD_JS: value->rValue = model->SOI3jctSatCurDensity; return(OK); case SOI3_MOD_JS1: value->rValue = model->SOI3jctSatCurDensity1; return(OK); case SOI3_MOD_TOF: value->rValue = model->SOI3frontOxideThickness; return(OK); case SOI3_MOD_TOB: value->rValue = model->SOI3backOxideThickness; return(OK); case SOI3_MOD_TB: value->rValue = model->SOI3bodyThickness; return(OK); case SOI3_MOD_LD: value->rValue = model->SOI3latDiff; return(OK); case SOI3_MOD_U0: value->rValue = model->SOI3surfaceMobility; return(OK); case SOI3_MOD_FC: value->rValue = model->SOI3fwdCapDepCoeff; return(OK); case SOI3_MOD_KOX: value->rValue = model->SOI3oxideThermalConductivity; return(OK); case SOI3_MOD_SHSI: value->rValue = model->SOI3siliconSpecificHeat; return(OK); case SOI3_MOD_DSI: value->rValue = model->SOI3siliconDensity; return(OK); case SOI3_MOD_NSUB: value->rValue = model->SOI3substrateDoping; return(OK); case SOI3_MOD_TPG: value->iValue = model->SOI3gateType; return(OK); case SOI3_MOD_NQFF: value->rValue = model->SOI3frontFixedChargeDensity; return(OK); case SOI3_MOD_NQFB: value->rValue = model->SOI3backFixedChargeDensity; return(OK); case SOI3_MOD_NSSF: value->rValue = model->SOI3frontSurfaceStateDensity; return(OK); case SOI3_MOD_NSSB: value->rValue = model->SOI3backSurfaceStateDensity; return(OK); case SOI3_MOD_TNOM: value->rValue = model->SOI3tnom-CONSTCtoK; return(OK); /* extra stuff for newer model - msll Jan96 */ case SOI3_MOD_SIGMA: value->rValue = model->SOI3sigma; return(OK); case SOI3_MOD_CHIFB: value->rValue = model->SOI3chiFB; return(OK); case SOI3_MOD_CHIPHI: value->rValue = model->SOI3chiPHI; return(OK); case SOI3_MOD_DELTAW: value->rValue = model->SOI3deltaW; return(OK); case SOI3_MOD_DELTAL: value->rValue = model->SOI3deltaL; return(OK); case SOI3_MOD_VSAT: value->rValue = model->SOI3vsat; return(OK); case SOI3_MOD_K: value->rValue = model->SOI3k; return(OK); case SOI3_MOD_LX: value->rValue = model->SOI3lx; return(OK); case SOI3_MOD_VP: value->rValue = model->SOI3vp; return(OK); case SOI3_MOD_ETA: value->rValue = model->SOI3eta; return(OK); case SOI3_MOD_ALPHA0: value->rValue = model->SOI3alpha0; return(OK); case SOI3_MOD_BETA0: value->rValue = model->SOI3beta0; return(OK); case SOI3_MOD_LM: value->rValue = model->SOI3lm; return(OK); case SOI3_MOD_LM1: value->rValue = model->SOI3lm1; return(OK); case SOI3_MOD_LM2: value->rValue = model->SOI3lm2; return(OK); case SOI3_MOD_ETAD: value->rValue = model->SOI3etad; return(OK); case SOI3_MOD_ETAD1: value->rValue = model->SOI3etad1; return(OK); case SOI3_MOD_CHIBETA: value->rValue = model->SOI3chibeta; return(OK); case SOI3_MOD_VFBB: value->rValue = model->SOI3vfbB; return(OK); case SOI3_MOD_GAMMAB: value->rValue = model->SOI3gammaB; return(OK); case SOI3_MOD_CHID: value->rValue = model->SOI3chid; return(OK); case SOI3_MOD_CHID1: value->rValue = model->SOI3chid1; return(OK); case SOI3_MOD_DVT: value->iValue = model->SOI3dvt; return(OK); case SOI3_MOD_NLEV: value->iValue = model->SOI3nLev; return(OK); case SOI3_MOD_BETABJT: value->rValue = model->SOI3betaBJT; return(OK); case SOI3_MOD_TAUFBJT: value->rValue = model->SOI3tauFBJT; return(OK); case SOI3_MOD_TAURBJT: value->rValue = model->SOI3tauRBJT; return(OK); case SOI3_MOD_BETAEXP: value->rValue = model->SOI3betaEXP; return(OK); case SOI3_MOD_TAUEXP: value->rValue = model->SOI3tauEXP; return(OK); case SOI3_MOD_RSW: value->rValue = model->SOI3rsw; return(OK); case SOI3_MOD_RDW: value->rValue = model->SOI3rdw; return(OK); case SOI3_MOD_FMIN: value->rValue = model->SOI3minimumFeatureSize; return(OK); case SOI3_MOD_VTEX: value->rValue = model->SOI3vtex; return(OK); case SOI3_MOD_VDEX: value->rValue = model->SOI3vdex; return(OK); case SOI3_MOD_DELTA0: value->rValue = model->SOI3delta0; return(OK); case SOI3_MOD_CSF: value->rValue = model->SOI3satChargeShareFactor; return(OK); case SOI3_MOD_NPLUS: value->rValue = model->SOI3nplusDoping; return(OK); case SOI3_MOD_RTA: value->rValue = model->SOI3rta; return(OK); case SOI3_MOD_CTA: value->rValue = model->SOI3cta; return(OK); case SOI3_MOD_MEXP: value->rValue = model->SOI3mexp; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/soi3/soi3itf.h0000644000175000017500000000145413546075722021575 0ustar carstencarsten/********** STAG version 2.7 Copyright 2000 owned by the United Kingdom Secretary of State for Defence acting through the Defence Evaluation and Research Agency. Developed by : Jim Benson, Department of Electronics and Computer Science, University of Southampton, United Kingdom. With help from : Nele D'Halleweyn, Ketan Mistry, Bill Redman-White, and Craig Easson. Based on STAG version 2.1 Developed by : Mike Lee, With help from : Bernard Tenbroek, Bill Redman-White, Mike Uren, Chris Edwards and John Bunyan. Acknowledgements : Rupert Howes and Pete Mole. **********/ /********** Modified by Paolo Nenzi 2002 ngspice integration **********/ #ifndef DEV_SOI3 #define DEV_SOI3 SPICEdev *get_soi3_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/soi3/soi3init.c0000644000175000017500000000316113546075722021746 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "soi3itf.h" #include "soi3ext.h" #include "soi3init.h" SPICEdev SOI3info = { .DEVpublic = { .name = "SOI3", .description = "Basic Thick Film SOI3 model v2.7", .terms = &SOI3nSize, .numNames = &SOI3nSize, .termNames = SOI3names, .numInstanceParms = &SOI3pTSize, .instanceParms = SOI3pTable, .numModelParms = &SOI3mPTSize, .modelParms = SOI3mPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = SOI3param, .DEVmodParam = SOI3mParam, .DEVload = SOI3load, .DEVsetup = SOI3setup, .DEVunsetup = SOI3unsetup, .DEVpzSetup = SOI3setup, .DEVtemperature = SOI3temp, .DEVtrunc = SOI3trunc, .DEVfindBranch = NULL, .DEVacLoad = SOI3acLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = SOI3getic, .DEVask = SOI3ask, .DEVmodAsk = SOI3mAsk, .DEVpzLoad = NULL, .DEVconvTest = SOI3convTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = SOI3noise, .DEVsoaCheck = NULL, .DEVinstSize = &SOI3iSize, .DEVmodSize = &SOI3mSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_soi3_info(void) { return &SOI3info; } tmpk8ny_4pz/src/spicelib/devices/soi3/soi3ic.c0000644000175000017500000000410213546075722021372 0ustar carstencarsten/********** STAG version 2.7 Copyright 2000 owned by the United Kingdom Secretary of State for Defence acting through the Defence Evaluation and Research Agency. Developed by : Jim Benson, Department of Electronics and Computer Science, University of Southampton, United Kingdom. With help from : Nele D'Halleweyn, Ketan Mistry, Bill Redman-White, and Craig Easson. Based on STAG version 2.1 Developed by : Mike Lee, With help from : Bernard Tenbroek, Bill Redman-White, Mike Uren, Chris Edwards and John Bunyan. Acknowledgements : Rupert Howes and Pete Mole. **********/ /********** Modified by Paolo Nenzi 2002 ngspice integration **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "soi3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int SOI3getic(GENmodel *inModel, CKTcircuit *ckt) { SOI3model *model = (SOI3model *)inModel; SOI3instance *here; /* * grab initial conditions out of rhs array. User specified, so use * external nodes to get values */ for( ; model ; model = SOI3nextModel(model)) { for(here = SOI3instances(model); here ; here = SOI3nextInstance(here)) { if(!here->SOI3icVBSGiven) { here->SOI3icVBS = *(ckt->CKTrhs + here->SOI3bNode) - *(ckt->CKTrhs + here->SOI3sNode); } if(!here->SOI3icVDSGiven) { here->SOI3icVDS = *(ckt->CKTrhs + here->SOI3dNode) - *(ckt->CKTrhs + here->SOI3sNode); } if(!here->SOI3icVGFSGiven) { here->SOI3icVGFS = *(ckt->CKTrhs + here->SOI3gfNode) - *(ckt->CKTrhs + here->SOI3sNode); } if(!here->SOI3icVGBSGiven) { here->SOI3icVGBS = *(ckt->CKTrhs + here->SOI3gbNode) - *(ckt->CKTrhs + here->SOI3sNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/soi3/soi3nois.c0000644000175000017500000002015713546075722021757 0ustar carstencarsten/********** STAG version 2.7 Copyright 2000 owned by the United Kingdom Secretary of State for Defence acting through the Defence Evaluation and Research Agency. Developed by : Jim Benson, Department of Electronics and Computer Science, University of Southampton, United Kingdom. With help from : Nele D'Halleweyn, Bill Redman-White, and Craig Easson. Based on STAG version 2.1 Developed by : Mike Lee, With help from : Bernard Tenbroek, Bill Redman-White, Mike Uren, Chris Edwards and John Bunyan. Acknowledgements : Rupert Howes and Pete Mole. **********/ /********** Modified by Paolo Nenzi 2002 ngspice integration **********/ #include "ngspice/ngspice.h" #include "soi3defs.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/const.h" #include "ngspice/suffix.h" /* This routine is VERY closely based on the standard MOS noise function. * SOI3noise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with MOSFET's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the MOSFET's is summed with the variable "OnDens". */ int SOI3noise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; SOI3model *firstModel = (SOI3model *) genmodel; SOI3model *model; SOI3instance *inst; double tempOnoise; double tempInoise; double noizDens[SOI3NSRCS]; double lnNdens[SOI3NSRCS]; double gain; double EffectiveLength; int i; /* define the names of the noise sources */ static char *SOI3nNames[SOI3NSRCS] = { /* Note that we have to keep the order */ "_rd", /* noise due to rd */ /* consistent with the index definitions */ "_rs", /* noise due to rs */ /* in SOI3defs.h */ "_id", /* noise due to id */ "_1overf", /* flicker (1/f) noise */ "" /* total transistor noise */ }; for (model=firstModel; model != NULL; model=SOI3nextModel(model)) { for (inst=SOI3instances(model); inst != NULL; inst=SOI3nextInstance(inst)) { switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i=0; i < SOI3NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_%s%s", inst->SOI3name, SOI3nNames[i]); } break; case INT_NOIZ: for (i=0; i < SOI3NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total_%s%s", inst->SOI3name, SOI3nNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total_%s%s", inst->SOI3name, SOI3nNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: /* just get gain from eval routine. Do thermal * noise ourselves as we have local temperature * rise. Also can use channel charge so model * is valid in ALL regions and not just saturation. */ EffectiveLength=inst->SOI3l - 2*model->SOI3latDiff; NevalSrc(&noizDens[SOI3RDNOIZ], NULL, ckt,N_GAIN,inst->SOI3dNodePrime,inst->SOI3dNode, (double)0.0); noizDens[SOI3RDNOIZ] *= 4 * CONSTboltz * (ckt->CKTtemp + *(ckt->CKTstate0 + inst->SOI3deltaT)) * inst->SOI3drainConductance * inst->SOI3m; lnNdens[SOI3RDNOIZ] = log(MAX(noizDens[SOI3RDNOIZ],N_MINLOG)); NevalSrc(&noizDens[SOI3RSNOIZ], NULL, ckt,N_GAIN,inst->SOI3sNodePrime,inst->SOI3sNode, (double)0.0); noizDens[SOI3RSNOIZ] *= 4 * CONSTboltz * (ckt->CKTtemp + *(ckt->CKTstate0 + inst->SOI3deltaT)) * inst->SOI3sourceConductance * inst->SOI3m; lnNdens[SOI3RSNOIZ] = log(MAX(noizDens[SOI3RSNOIZ],N_MINLOG)); NevalSrc(&gain, NULL, ckt, N_GAIN,inst->SOI3dNodePrime, inst->SOI3sNodePrime, (double)0.0); noizDens[SOI3IDNOIZ] = (gain * 4 * CONSTboltz * (ckt->CKTtemp + *(ckt->CKTstate0 + inst->SOI3deltaT)) * inst->SOI3ueff * inst->SOI3m * fabs(*(ckt->CKTstate0 + inst->SOI3qd) + *(ckt->CKTstate0 + inst->SOI3qs)))/ (EffectiveLength*EffectiveLength); lnNdens[SOI3IDNOIZ] = log(MAX(noizDens[SOI3IDNOIZ],N_MINLOG)); switch (model->SOI3nLev) { case 2: noizDens[SOI3FLNOIZ] = gain * model->SOI3fNcoef * (inst->SOI3gmf * inst->SOI3m)*(inst->SOI3gmf * inst->SOI3m)/ (model->SOI3frontOxideCapFactor * inst->SOI3w * inst->SOI3m * EffectiveLength * exp(model->SOI3fNexp * log(MAX(fabs(data->freq),N_MINLOG))) ); break; case 1: noizDens[SOI3FLNOIZ] = gain * model->SOI3fNcoef * exp(model->SOI3fNexp * log(MAX(fabs(inst->SOI3id * inst->SOI3m),N_MINLOG))) / (data->freq * EffectiveLength * inst->SOI3w * inst->SOI3m * model->SOI3frontOxideCapFactor); break; case 0: default: noizDens[SOI3FLNOIZ] = gain * model->SOI3fNcoef * exp(model->SOI3fNexp * log(MAX(fabs(inst->SOI3id),N_MINLOG))) / (data->freq * EffectiveLength * EffectiveLength * model->SOI3frontOxideCapFactor); break; } lnNdens[SOI3FLNOIZ] = log(MAX(noizDens[SOI3FLNOIZ],N_MINLOG)); noizDens[SOI3TOTNOIZ] = noizDens[SOI3RDNOIZ] + noizDens[SOI3RSNOIZ] + noizDens[SOI3IDNOIZ] + noizDens[SOI3FLNOIZ]; lnNdens[SOI3TOTNOIZ] = log(MAX(noizDens[SOI3TOTNOIZ], N_MINLOG)); *OnDens += noizDens[SOI3TOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to */ /* initialize our "history" variables */ for (i=0; i < SOI3NSRCS; i++) { inst->SOI3nVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i=0; i < SOI3NSRCS; i++) { inst->SOI3nVar[OUTNOIZ][i] = 0.0; inst->SOI3nVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0 (we have to integrate) */ for (i=0; i < SOI3NSRCS; i++) { if (i != SOI3TOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], inst->SOI3nVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv , lnNdens[i] + data->lnGainInv, inst->SOI3nVar[LNLSTDENS][i] + data->lnGainInv, data); inst->SOI3nVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { inst->SOI3nVar[OUTNOIZ][i] += tempOnoise; inst->SOI3nVar[OUTNOIZ][SOI3TOTNOIZ] += tempOnoise; inst->SOI3nVar[INNOIZ][i] += tempInoise; inst->SOI3nVar[INNOIZ][SOI3TOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i=0; i < SOI3NSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i=0; i < SOI3NSRCS; i++) { data->outpVector[data->outNumber++] = inst->SOI3nVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = inst->SOI3nVar[INNOIZ][i]; } } /* if */ break; } /* switch (mode) */ break; case N_CLOSE: return (OK); /* do nothing, the main calling routine will close */ break; /* the plots */ } /* switch (operation) */ } /* for inst */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/soi3/soi3temp.c0000644000175000017500000006165713546075722021766 0ustar carstencarsten/********** STAG version 2.7 Copyright 2000 owned by the United Kingdom Secretary of State for Defence acting through the Defence Evaluation and Research Agency. Developed by : Jim Benson, Department of Electronics and Computer Science, University of Southampton, United Kingdom. With help from : Nele D'Halleweyn, Ketan Mistry, Bill Redman-White, and Craig Easson. Based on STAG version 2.1 Developed by : Mike Lee, With help from : Bernard Tenbroek, Bill Redman-White, Mike Uren, Chris Edwards and John Bunyan. Acknowledgements : Rupert Howes and Pete Mole. **********/ /********** Modified by Paolo Nenzi 2002 ngspice integration **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "soi3defs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int SOI3temp(GENmodel *inModel, CKTcircuit *ckt) { SOI3model *model = (SOI3model *)inModel; SOI3instance *here; /* All variables ending in 1 denote that they pertain to the model and so use model->SOI3tnom for temperature - the others use here->SOI3temp. REFTEMP is temp at which hard-coded quantities are given. */ double egfet,egfet1; /* Band Gap */ double fact1,fact2; /* temperature/REFTEMP */ double kt,kt1; /* kT @ various temps */ double arg1; /* ??? */ double ratio,ratio4; /* (temp/tnom) and (temp/tnom)^(3/2) */ double phio; /* temp adjusted phi PHI0*/ double pbo; double gmanew,gmaold; double capfact; double pbfact1,pbfact; /* ??? */ double vt,vtnom; double wkfngfs; /* work function difference phi(gate,Si) */ double wkfngf; /* work fn of front gate */ double wkfngbs; /* work fn diff of back gate = 0 usu. */ double fermig; /* fermi level of gate */ double fermis; /* fermi level of Si */ double xd_max; /* Minimum Si film thickness for this model to be valid */ double eta_s; /* JimB - new variables for improved threshold voltage conversion model. */ double Edelta0; double psi_delta0; /* loop through all the transistor models */ for( ; model != NULL; model = SOI3nextModel(model)) { /* perform model defaulting */ if(!model->SOI3tnomGiven) { model->SOI3tnom = ckt->CKTnomTemp; } fact1 = model->SOI3tnom/REFTEMP; vtnom = model->SOI3tnom*CONSTKoverQ; kt1 = CONSTboltz * model->SOI3tnom; egfet1 = 1.16-(7.02e-4*model->SOI3tnom*model->SOI3tnom)/ (model->SOI3tnom+1108); arg1 = -egfet1/(kt1+kt1)+1.1150877/(CONSTboltz*(REFTEMP+REFTEMP)); /* this is -Egnom + Egref. - sign due to it being in bracket with log(fact1) 'cos we wanted log(1/fact1). */ pbfact1 = -2*vtnom *(1.5*log(fact1)+CHARGE*arg1); /* 2 comes from fact phi=2*phi_F ^ */ /* now model parameter preprocessing */ if(!model->SOI3frontOxideThicknessGiven || model->SOI3frontOxideThickness == 0 || !model->SOI3backOxideThicknessGiven || model->SOI3backOxideThickness == 0 || !model->SOI3bodyThicknessGiven || model->SOI3bodyThickness == 0) { SPfrontEnd->IFerrorf (ERR_FATAL, "%s: SOI3 device film thickness must be supplied", model->SOI3modName); return(E_BADPARM); } else /* Oxide and film thicknesses are supplied. */ { model->SOI3frontOxideCapFactor = 3.9 * 8.854214871e-12/ model->SOI3frontOxideThickness; model->SOI3backOxideCapFactor = 3.9 * 8.854214871e-12/ model->SOI3backOxideThickness; model->SOI3bodyCapFactor = 11.7 * 8.854214871e-12/ model->SOI3bodyThickness; model->SOI3C_ssf = CHARGE*model->SOI3frontSurfaceStateDensity*1e4; model->SOI3C_ssb = CHARGE*model->SOI3backSurfaceStateDensity*1e4; eta_s = 1 + model->SOI3C_ssf/model->SOI3frontOxideCapFactor; if(!model->SOI3transconductanceGiven) { if(!model->SOI3surfaceMobilityGiven) { model->SOI3surfaceMobility=600; } model->SOI3transconductance = model->SOI3surfaceMobility * model->SOI3frontOxideCapFactor * 1e-4 /*(m**2/cm**2) for mobility */; } if(model->SOI3substrateDopingGiven) { /* work everything out */ if(model->SOI3substrateDoping*1e6 /*(cm**3/m**3)*/ >1.45e16) { if(!model->SOI3phiGiven) { model->SOI3phi = 2*vtnom* log(model->SOI3substrateDoping* 1e6/*(cm**3/m**3)*//1.45e16); model->SOI3phi = MAX(0.1,model->SOI3phi); } /* Now that we have ascertained both the doping * * and the body film thickness, check to see * * if we have a thick film device. If not, complain ! */ xd_max=2*sqrt((2* 11.7 * 8.854214871e-12 * model->SOI3phi)/ (CHARGE*1e6 /*(cm**3/m**3)*/ * model->SOI3substrateDoping)); if(model->SOI3bodyThickness < xd_max) { SPfrontEnd->IFerrorf (ERR_WARNING, "%s: Body Film thickness may be too small \nfor this model to be valid", model->SOI3modName); /* return(E_PAUSE); don't want to stop, just issue a warning */ } /* End of thick film check - msll 21/2/94 Changed to only give warning - msll 31/10/95 */ if(!model->SOI3vfbFGiven) { if(!model->SOI3frontFixedChargeDensityGiven) model->SOI3frontFixedChargeDensity = 0; fermis = model->SOI3type * 0.5 * model->SOI3phi; wkfngf = 3.2; if(!model->SOI3gateTypeGiven) model->SOI3gateType=1; if(model->SOI3gateType != 0) { fermig = model->SOI3type *model->SOI3gateType*0.5*egfet1; wkfngf = 3.25 + 0.5 * egfet1 - fermig; } wkfngfs = wkfngf - (3.25 + 0.5 * egfet1 +fermis); /* Fixed oxide charge is normally +ve for both n and p-channel, so need -ve voltage to neutralise it */ model->SOI3vfbF = wkfngfs - model->SOI3frontFixedChargeDensity * 1e4 /*(cm**2/m**2)*/ * CHARGE/model->SOI3frontOxideCapFactor; } if(!model->SOI3vfbBGiven) { wkfngbs = (1-model->SOI3type)*0.5*model->SOI3phi; /* assume p-sub */ model->SOI3vfbB = wkfngbs - model->SOI3backFixedChargeDensity * 1e4 /*(cm**2/m**2)*/ * CHARGE/model->SOI3backOxideCapFactor; } if(!model->SOI3gammaGiven) { model->SOI3gamma = sqrt(2 * 11.70 * 8.854214871e-12 * CHARGE * model->SOI3substrateDoping * 1e6 /*(cm**3/m**3)*/)/model->SOI3frontOxideCapFactor; } if(!model->SOI3gammaBGiven) { model->SOI3gammaB = sqrt(2 * 11.70 * 8.854214871e-12 * CHARGE * model->SOI3substrateDoping * 1e6 /*(cm**3/m**3)*/)/model->SOI3backOxideCapFactor; } if(model->SOI3vt0Given) { /* NSUB given AND VT0 given - change vfbF */ model->SOI3vfbF = model->SOI3vt0 - model->SOI3type * (eta_s*model->SOI3phi + model->SOI3gamma*sqrt(model->SOI3phi)); } else { if(model->SOI3vtexGiven) { /* JimB - Improved threshold voltage conversion model. */ if (model->SOI3delta0 < 0) { model->SOI3delta0 = 0; } if (model->SOI3vdex < 0) { /* Use convention that Vd at which Vtex was extracted */ /* is always +ve. */ model->SOI3vdex = -model->SOI3vdex; } /* Exponential term delta*phiF/phit (SOI3phi = 2phiF) */ Edelta0 = exp(MIN(MAX_EXP_ARG, (model->SOI3delta0*model->SOI3phi)/(2*vtnom)) ); /* Modified surface potential term (2+delta)*phiF + vdex/2 */ /* (SOI3phi = 2phiF) */ psi_delta0 = ((2+model->SOI3delta0)*model->SOI3phi/2) + model->SOI3vdex/2; model->SOI3vfbF = model->SOI3vtex - model->SOI3type * (eta_s*psi_delta0 + model->SOI3gamma* sqrt(psi_delta0 + vtnom*Edelta0) ); } } } else /* Substrate doping less than intrinsic silicon, so set to zero. */ { model->SOI3substrateDoping = 0; SPfrontEnd->IFerrorf (ERR_FATAL, "%s: Nsub < Ni", model->SOI3modName); return(E_BADPARM); } } else /* NSUB not given, have to assume that VT0, PHI and GAMMA are given */ { xd_max=(2* 11.7 * 8.854214871e-12*sqrt(model->SOI3phi))/ (model->SOI3gamma*model->SOI3frontOxideCapFactor); if(model->SOI3bodyThickness < xd_max) { SPfrontEnd->IFerrorf (ERR_WARNING, "%s :Body Film thickness may be too small \nfor this model to be valid", model->SOI3modName); /* return(E_PAUSE); */ } /* End of thick film check - msll 21/2/94 Changed to only give warning - msll 31/10/95 */ /* If vtext given in netlist, but no vt0. */ if( (model->SOI3vtexGiven) && (!model->SOI3vt0Given) ) { /* JimB - Improved threshold voltage conversion model. */ if (model->SOI3delta0 < 0) { model->SOI3delta0 = 0; } if (model->SOI3vdex < 0) { /* Use convention that Vd at which Vtex was extracted */ /* is always +ve. */ model->SOI3vdex = -model->SOI3vdex; } /* Exponential term delta*phiF/phit (SOI3phi = 2phiF) */ Edelta0 = exp(MIN(MAX_EXP_ARG, (model->SOI3delta0*model->SOI3phi)/(2*vtnom)) ); /* Modified surface potential term (2+delta)*phiF + vdex/2 */ /* (SOI3phi = 2phiF) */ psi_delta0 = ((2+model->SOI3delta0)*model->SOI3phi/2) + model->SOI3vdex/2; model->SOI3vfbF = model->SOI3vtex - model->SOI3type * (eta_s*psi_delta0 + model->SOI3gamma* sqrt(psi_delta0 + vtnom*Edelta0) ); } else /* If no vtex, then use vt0, either netlist or default value. */ { /* Use standard threshold voltage model. */ model->SOI3vfbF = model->SOI3vt0 - model->SOI3type * (eta_s*model->SOI3phi + model->SOI3gamma*sqrt(model->SOI3phi)); } if (!model->SOI3vfbBGiven) { model->SOI3vfbB = 0; /* NSUB not given, vfbB not given */ } } } if((model->SOI3vsatGiven)&&(model->SOI3vsat != 0)) { model->SOI3TVF0 = 0.8*exp(model->SOI3tnom/600); } else { model->SOI3TVF0 = 0; } /* loop through all instances of the model */ for(here = SOI3instances(model); here!= NULL; here = SOI3nextInstance(here)) { double czbd; /* zero voltage bulk-drain capacitance */ double czbs; /* zero voltage bulk-source capacitance */ double cj0; /* default value of zero voltage bulk-source/drain capacitance*/ double Nratio; /* ratio of Nsub*Nplus/Nsub+Nplus */ double arg; /* 1 - fc */ double sarg; /* (1-fc) ^^ (-mj) */ /* perform the parameter defaulting */ /* JimB - if device temperature not given, OR, if self-heating switched */ /* on, then set device temperature equal to circuit temperature. Can't */ /* set device temp with self-heating on, otherwise get multiple thermal */ /* ground nodes, but doesn't matter, since any sizeable thermal gradient*/ /* across an IC circuit is probably due to self-heating anyway. */ if ( (!here->SOI3tempGiven) || (here->SOI3rt != 0) ) { here->SOI3temp = ckt->CKTtemp; } vt = here->SOI3temp * CONSTKoverQ; ratio = here->SOI3temp/model->SOI3tnom; fact2 = here->SOI3temp/REFTEMP; kt = here->SOI3temp * CONSTboltz; egfet = 1.16-(7.02e-4*here->SOI3temp*here->SOI3temp)/ (here->SOI3temp+1108); if (!model->SOI3chidGiven) { model->SOI3chid = CHARGE*egfet/CONSTboltz; } if (!model->SOI3chid1Given) { model->SOI3chid1 = CHARGE*egfet/CONSTboltz; } arg = -egfet/(kt+kt)+1.1150877/(CONSTboltz*(REFTEMP+REFTEMP)); pbfact = -2*vt *(1.5*log(fact2)+CHARGE*arg); if(!here->SOI3lGiven) { here->SOI3l = ckt->CKTdefaultMosL; } if(!here->SOI3wGiven) { here->SOI3w = ckt->CKTdefaultMosW; } if(here->SOI3l - 2 * model->SOI3latDiff <=0) { SPfrontEnd->IFerrorf (ERR_WARNING, "%s: Effective channel length less than zero \nIncreasing \ this instance length by 2*LD to remove effect of LD", here->SOI3name); here->SOI3l += 2*model->SOI3latDiff; } ratio4 = exp(model->SOI3k*log(ratio)); /* ratio4 = (temp/tnom)^k */ /* i.e. mobilitites prop to */ /* T^-(k) where k=1.5 for old SPICE */ here->SOI3tTransconductance = model->SOI3transconductance / ratio4; here->SOI3tSurfMob = model->SOI3surfaceMobility/ratio4; phio= (model->SOI3phi-pbfact1)/fact1; /* this is PHI @ REFTEMP */ here->SOI3tPhi = fact2 * phio + pbfact; here->SOI3tVfbF = model->SOI3vfbF + (model->SOI3type * model->SOI3gateType * 0.5*(egfet1-egfet)) + (model->SOI3type * 0.5 * (model->SOI3phi - here->SOI3tPhi)); here->SOI3tVfbB = model->SOI3vfbB + (1-model->SOI3type)*0.5*(here->SOI3tPhi-model->SOI3phi); here->SOI3tVto = here->SOI3tVfbF + model->SOI3type * (model->SOI3gamma * sqrt(here->SOI3tPhi) + eta_s*here->SOI3tPhi); here->SOI3tSatCur = model->SOI3jctSatCur* exp(-egfet/vt+egfet1/vtnom); here->SOI3tSatCur1 = model->SOI3jctSatCur1* exp(-egfet/vt+egfet1/vtnom); here->SOI3tSatCurDens = model->SOI3jctSatCurDensity * exp(-egfet/vt+egfet1/vtnom); here->SOI3tSatCurDens1 = model->SOI3jctSatCurDensity1 * exp(-egfet/vt+egfet1/vtnom); pbo = (model->SOI3bulkJctPotential - pbfact1)/fact1; gmaold = (model->SOI3bulkJctPotential-pbo)/pbo; capfact = 1/(1+model->SOI3bulkJctSideGradingCoeff* (4e-4*(model->SOI3tnom-REFTEMP)-gmaold)); here->SOI3tCbd = model->SOI3capBD * capfact; here->SOI3tCbs = model->SOI3capBS * capfact; here->SOI3tCjsw = model->SOI3sideWallCapFactor * capfact; here->SOI3tBulkPot = fact2 * pbo+pbfact; gmanew = (here->SOI3tBulkPot-pbo)/pbo; capfact = (1+model->SOI3bulkJctSideGradingCoeff* (4e-4*(here->SOI3temp-REFTEMP)-gmanew)); here->SOI3tCbd *= capfact; here->SOI3tCbs *= capfact; here->SOI3tCjsw *= capfact; here->SOI3tDepCap = model->SOI3fwdCapDepCoeff * here->SOI3tBulkPot; if (here->SOI3tSatCurDens == 0) { if (here->SOI3tSatCur == 0) { here->SOI3sourceVcrit = here->SOI3drainVcrit = vt*log(vt/(CONSTroot2*1.0e-15)); } else { here->SOI3sourceVcrit = here->SOI3drainVcrit = vt*log(vt/(CONSTroot2*here->SOI3tSatCur)); } } else { here->SOI3drainVcrit = vt * log( vt / (CONSTroot2 * here->SOI3tSatCurDens * (here->SOI3w))); here->SOI3sourceVcrit = vt * log( vt / (CONSTroot2 * here->SOI3tSatCurDens * (here->SOI3w))); } if(model->SOI3capBDGiven) { czbd = here->SOI3tCbd; } else { if(model->SOI3sideWallCapFactorGiven) { czbd = here->SOI3tCjsw * (here->SOI3w*model->SOI3bodyThickness); } /* JimB - 2/1/99. Calculate default value for Cj0 */ /* using PN junction theory. */ else { Nratio = (1e6*model->SOI3nplusDoping * model->SOI3substrateDoping)/ (model->SOI3nplusDoping + model->SOI3substrateDoping); cj0 = sqrt((Nratio * 11.7 * 8.854214871e-12 * CHARGE)/ (2 * here->SOI3tBulkPot)); /* JimB - temperature dependence code */ gmaold = (model->SOI3bulkJctPotential-pbo)/pbo; capfact = 1/(1+model->SOI3bulkJctSideGradingCoeff* (4e-4*(model->SOI3tnom-REFTEMP)-gmaold)); cj0 *= capfact; gmanew = (here->SOI3tBulkPot-pbo)/pbo; capfact = (1+model->SOI3bulkJctSideGradingCoeff* (4e-4*(here->SOI3temp-REFTEMP)-gmanew)); cj0 *= capfact; czbd = cj0 * (here->SOI3w*model->SOI3bodyThickness); } } arg = 1-model->SOI3fwdCapDepCoeff; sarg = exp( (-model->SOI3bulkJctSideGradingCoeff) * log(arg) ); here->SOI3Cbd = czbd; here->SOI3f2d = czbd*(1-model->SOI3fwdCapDepCoeff* (1+model->SOI3bulkJctSideGradingCoeff))* sarg/arg; here->SOI3f3d = czbd * model->SOI3bulkJctSideGradingCoeff * sarg/arg / here->SOI3tBulkPot; here->SOI3f4d = czbd*here->SOI3tBulkPot*(1-arg*sarg)/ (1-model->SOI3bulkJctSideGradingCoeff) -here->SOI3f3d/2* (here->SOI3tDepCap*here->SOI3tDepCap) -here->SOI3tDepCap * here->SOI3f2d; if(model->SOI3capBSGiven) { czbs=here->SOI3tCbs; } else { if(model->SOI3sideWallCapFactorGiven) { czbs=here->SOI3tCjsw * (here->SOI3w*model->SOI3bodyThickness); } /* JimB - 2/1/99. Calculate default value for Cj0 */ /* using PN junction theory. */ else { Nratio = (1e6*model->SOI3nplusDoping * model->SOI3substrateDoping)/ (model->SOI3nplusDoping + model->SOI3substrateDoping); cj0 = sqrt((Nratio * 11.7 * 8.854214871e-12 * CHARGE)/ (2 * here->SOI3tBulkPot)); /* JimB - temperature dependence code */ gmaold = (model->SOI3bulkJctPotential-pbo)/pbo; capfact = 1/(1+model->SOI3bulkJctSideGradingCoeff* (4e-4*(model->SOI3tnom-REFTEMP)-gmaold)); cj0 *= capfact; gmanew = (here->SOI3tBulkPot-pbo)/pbo; capfact = (1+model->SOI3bulkJctSideGradingCoeff* (4e-4*(here->SOI3temp-REFTEMP)-gmanew)); cj0 *= capfact; czbs = cj0 * (here->SOI3w*model->SOI3bodyThickness); } } arg = 1-model->SOI3fwdCapDepCoeff; sarg = exp( (-model->SOI3bulkJctSideGradingCoeff) * log(arg) ); here->SOI3Cbs = czbs; here->SOI3f2s = czbs*(1-model->SOI3fwdCapDepCoeff* (1+model->SOI3bulkJctSideGradingCoeff))* sarg/arg; here->SOI3f3s = czbs * model->SOI3bulkJctSideGradingCoeff * sarg/arg / here->SOI3tBulkPot; here->SOI3f4s = czbs*here->SOI3tBulkPot*(1-arg*sarg)/ (1-model->SOI3bulkJctSideGradingCoeff) -here->SOI3f3s/2* (here->SOI3tDepCap*here->SOI3tDepCap) -here->SOI3tDepCap * here->SOI3f2s; if(model->SOI3drainResistanceGiven) { if(model->SOI3drainResistance != 0) { here->SOI3drainConductance = 1/model->SOI3drainResistance; } else { here->SOI3drainConductance = 0; } } else if (model->SOI3sheetResistanceGiven) { if(model->SOI3sheetResistance != 0) { here->SOI3drainConductance = 1/(model->SOI3sheetResistance*here->SOI3drainSquares); } else { here->SOI3drainConductance = 0; } } else if(model->SOI3rdwGiven) { if (model->SOI3rdw != 0) { /* JimB - 1e6 multiplying factor converts W from m to microns */ here->SOI3drainConductance = (here->SOI3w/model->SOI3rdw)*1e6; } else { here->SOI3drainConductance = 0; } } else { here->SOI3drainConductance = 0; } if(model->SOI3sourceResistanceGiven) { if(model->SOI3sourceResistance != 0) { here->SOI3sourceConductance = 1/model->SOI3sourceResistance; } else { here->SOI3sourceConductance = 0; } } else if (model->SOI3sheetResistanceGiven) { if(model->SOI3sheetResistance != 0) { here->SOI3sourceConductance = 1/(model->SOI3sheetResistance*here->SOI3sourceSquares); } else { here->SOI3sourceConductance = 0; } } else if(model->SOI3rswGiven) { if (model->SOI3rsw != 0) { /* JimB - 1e6 multiplying factor converts W from m to microns */ here->SOI3sourceConductance = (here->SOI3w/model->SOI3rsw)*1e6; } else { here->SOI3sourceConductance = 0; } } else { here->SOI3sourceConductance = 0; } /* extra stuff for newer model - msll Jan96 */ } /* finish looping through all instances of the model*/ } /* finish looping through all the transistor models */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/soi3/soi3defs.h0000644000175000017500000007555613546075722021752 0ustar carstencarsten/********** STAG version 2.7 Copyright 2000 owned by the United Kingdom Secretary of State for Defence acting through the Defence Evaluation and Research Agency. Developed by : Jim Benson, Department of Electronics and Computer Science, University of Southampton, United Kingdom. With help from : Nele D'Halleweyn, Ketan Mistry, Bill Redman-White, and Craig Easson. Based on STAG version 2.1 Developed by : Mike Lee, With help from : Bernard Tenbroek, Bill Redman-White, Mike Uren, Chris Edwards and John Bunyan. Acknowledgements : Rupert Howes and Pete Mole. **********/ /********** Modified by Paolo Nenzi 2002 ngspice integration **********/ #ifndef SOI3 #define SOI3 #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" /* declarations for SOI3 MOSFETs */ /* indices to the array of SOI(3) noise sources */ enum { SOI3RDNOIZ = 0, SOI3RSNOIZ, SOI3IDNOIZ, SOI3FLNOIZ, SOI3TOTNOIZ, /* finally, the number of noise sources */ SOI3NSRCS }; /* information needed for each instance */ typedef struct sSOI3instance { struct GENinstance gen; #define SOI3modPtr(inst) ((struct sSOI3model *)((inst)->gen.GENmodPtr)) #define SOI3nextInstance(inst) ((struct sSOI3instance *)((inst)->gen.GENnextInstance)) #define SOI3name gen.GENname #define SOI3states gen.GENstate const int SOI3dNode; /* number of the drain node of the mosfet */ const int SOI3gfNode; /* number of the front gate node of the mosfet */ const int SOI3sNode; /* number of the source node of the mosfet */ const int SOI3gbNode; /* number of the back gate node of the mosfet */ const int SOI3bNode; /* number of the bulk node of the mosfet */ const int SOI3toutNode; /* number of thermal output node (tout) */ int SOI3branch; /* branch number for zero voltage source if no thermal */ int SOI3dNodePrime; /* number of the internal drain node of the mosfet */ int SOI3sNodePrime; /* number of the internal source node of the mosfet */ int SOI3tout1Node; /* first internal thermal node */ int SOI3tout2Node; /* second internal thermal node */ int SOI3tout3Node; /* third internal thermal node */ int SOI3tout4Node; /* fourth internal thermal node */ double SOI3l; /* the length of the channel region */ double SOI3w; /* the width of the channel region */ double SOI3m; /* the parallel multiplier parameter */ double SOI3as; /* Area of source region */ double SOI3ad; /* Area of drain region */ double SOI3ab; /* Area of body region */ double SOI3drainSquares; /* the length of the drain in squares */ double SOI3sourceSquares; /* the length of the source in squares */ double SOI3sourceConductance; /*conductance of source(or 0):set in setup*/ double SOI3drainConductance; /*conductance of drain(or 0):set in setup*/ double SOI3temp; /* operating temperature of this instance */ double SOI3rt; /* Thermal resistance */ double SOI3ct; /* Thermal capacitance */ double SOI3rt1; /* 1st internal Thermal resistance */ double SOI3ct1; /* 1st internal Thermal capacitance */ double SOI3rt2; /* 2nd internal Thermal resistance */ double SOI3ct2; /* 2nd internal Thermal capacitance */ double SOI3rt3; /* 3rd internal Thermal resistance */ double SOI3ct3; /* 3rd internal Thermal capacitance */ double SOI3rt4; /* 4th internal Thermal resistance */ double SOI3ct4; /* 4th internal Thermal capacitance */ double SOI3tTransconductance; /* temperature corrected transconductance (KP param) */ double SOI3ueff; /* passed on to noise model */ double SOI3tSurfMob; /* temperature corrected surface mobility */ double SOI3tPhi; /* temperature corrected Phi */ double SOI3tVto; /* temperature corrected Vto */ double SOI3tVfbF; /* temperature corrected Vfb */ double SOI3tVfbB; /* temperature corrected Vfb (back gate) */ double SOI3tSatCur; /* temperature corrected jnct saturation Cur. */ double SOI3tSatCur1; /* temperature corrected jnct saturation Cur. */ double SOI3tSatCurDens; /* temperature corrected jnct saturation Cur. density */ double SOI3tSatCurDens1; /* temperature corrected jnct saturation Cur. density */ double SOI3tCbd; /* temperature corrected B-D Capacitance */ double SOI3tCbs; /* temperature corrected B-S Capacitance */ double SOI3tCjsw; /* temperature corrected Bulk side Capacitance */ double SOI3tBulkPot; /* temperature corrected Bulk potential */ double SOI3tDepCap; /* temperature adjusted transition point in */ /* the curve matching Fc * Vj */ double SOI3tVbi; /* temperature adjusted Vbi diode built-in voltage */ double SOI3icVBS; /* initial condition B-S voltage */ double SOI3icVDS; /* initial condition D-S voltage */ double SOI3icVGFS; /* initial condition GF-S voltage */ double SOI3icVGBS; /* initial condition GB-S voltage */ double SOI3von; double SOI3vdsat; double SOI3sourceVcrit; /* Vcrit for pos. vds */ double SOI3drainVcrit; /* Vcrit for pos. vds */ double SOI3id; /* DC drain current */ double SOI3ibs; /* bulk source current */ double SOI3ibd; /* bulk drain current */ double SOI3iMdb; /* drain bulk impact ionisation current */ double SOI3iMsb; /* source bulk impact ionisation cur. (rev mode) */ double SOI3iPt; /* heat 'current' in thermal circuit */ double SOI3gmbs; double SOI3gmf; double SOI3gmb; double SOI3gds; double SOI3gt; /* change of channel current wrt deltaT */ double SOI3gdsnotherm; /* gds0 at elevated temp - ac use only) */ double SOI3gMmbs; double SOI3gMmf; double SOI3gMmb; double SOI3gMd; double SOI3gMdeltaT; double SOI3iBJTdb; double SOI3gBJTdb_bs; double SOI3gBJTdb_deltaT; double SOI3iBJTsb; double SOI3gBJTsb_bd; double SOI3gBJTsb_deltaT; double SOI3gPmf; /* change of Pt wrt vgfs */ double SOI3gPmb; /* change of Pt wrt vgbs */ double SOI3gPmbs; /* change of Pt wrt vbs */ double SOI3gPds; /* change of Pt wrt vds */ double SOI3gPdT; /* change of Pt wrt deltaT */ double SOI3gbd; /* for body drain current */ double SOI3gbdT; /* for body drain current */ double SOI3gbs; /* for body source current */ double SOI3gbsT; /* for body source current */ double SOI3capbd; double SOI3capbs; double SOI3Cbd; double SOI3Cbs; double SOI3f2d; double SOI3f3d; double SOI3f4d; double SOI3f2s; double SOI3f3s; double SOI3f4s; double SOI3dDT_dVds; /* sm-sig gT term */ double SOI3dId_dDT; /* sm-sig source term */ /*debug stuff*/ double SOI3debug1; double SOI3debug2; double SOI3debug3; double SOI3debug4; double SOI3debug5; double SOI3debug6; /* extra stuff for newer model - msll Jan96 */ /* * naming convention: * x = vgs * y = vbs * z = vds * cdr = cdrain */ int SOI3mode; /* device mode : 1 = normal, -1 = inverse */ int SOI3backstate; /* indicates charge condition of back surface */ int SOI3numThermalNodes; /* Number of thermal nodes required */ unsigned SOI3off:1; /* non-zero to indicate device is off for dc analysis*/ unsigned SOI3tempGiven :1; /* instance temperature specified */ unsigned SOI3lGiven :1; unsigned SOI3wGiven :1; unsigned SOI3mGiven :1; unsigned SOI3asGiven:1; unsigned SOI3adGiven:1; unsigned SOI3abGiven:1; unsigned SOI3drainSquaresGiven :1; unsigned SOI3sourceSquaresGiven :1; unsigned SOI3dNodePrimeSet :1; unsigned SOI3sNodePrimeSet :1; unsigned SOI3icVBSGiven :1; unsigned SOI3icVDSGiven :1; unsigned SOI3icVGFSGiven:1; unsigned SOI3icVGBSGiven:1; unsigned SOI3rtGiven:1; unsigned SOI3ctGiven:1; unsigned SOI3rt1Given:1; unsigned SOI3ct1Given:1; unsigned SOI3rt2Given:1; unsigned SOI3ct2Given:1; unsigned SOI3rt3Given:1; unsigned SOI3ct3Given:1; unsigned SOI3rt4Given:1; unsigned SOI3ct4Given:1; unsigned SOI3vonGiven :1; unsigned SOI3vdsatGiven :1; unsigned SOI3modeGiven :1; double *SOI3D_dPtr; /* pointer to sparse matrix element at * (Drain node,drain node) */ double *SOI3D_dpPtr; /* pointer to sparse matrix element at * (drain node,drain prime node) */ double *SOI3DP_dPtr; /* pointer to sparse matrix element at * (drain prime node,drain node) */ double *SOI3S_sPtr; /* pointer to sparse matrix element at * (source node,source node) */ double *SOI3S_spPtr; /* pointer to sparse matrix element at * (source node,source prime node) */ double *SOI3SP_sPtr; /* pointer to sparse matrix element at * (source prime node,source node) */ double *SOI3GF_gfPtr; /* pointer to sparse matrix element at * (front gate node,front gate node) */ double *SOI3GF_gbPtr; /* pointer to sparse matrix element at * (front gate node,back gate node) */ double *SOI3GF_dpPtr; /* pointer to sparse matrix element at * (front gate node,drain prime node) */ double *SOI3GF_spPtr; /* pointer to sparse matrix element at * (front gate node,source prime node) */ double *SOI3GF_bPtr; /* pointer to sparse matrix element at * (front gate node,bulk node) */ double *SOI3GB_gfPtr; /* pointer to sparse matrix element at * (back gate node,front gate node) */ double *SOI3GB_gbPtr; /* pointer to sparse matrix element at * (back gate node,back gate node) */ double *SOI3GB_dpPtr; /* pointer to sparse matrix element at * (back gate node,drain prime node) */ double *SOI3GB_spPtr; /* pointer to sparse matrix element at * (back gate node,source prime node) */ double *SOI3GB_bPtr; /* pointer to sparse matrix element at * (back gate node,bulk node) */ double *SOI3DP_gfPtr; /* pointer to sparse matrix element at * (drain prime node,front gate node) */ double *SOI3DP_gbPtr; /* pointer to sparse matrix element at * (drain prime node,back gate node) */ double *SOI3DP_dpPtr; /* pointer to sparse matrix element at * (drain prime node,drain prime node) */ double *SOI3DP_spPtr; /* pointer to sparse matrix element at * (drain prime node,source prime node) */ double *SOI3DP_bPtr; /* pointer to sparse matrix element at * (drain prime node,bulk node) */ double *SOI3SP_gfPtr; /* pointer to sparse matrix element at * (source prime node,front gate node) */ double *SOI3SP_gbPtr; /* pointer to sparse matrix element at * (source prime node,back gate node) */ double *SOI3SP_dpPtr; /* pointer to sparse matrix element at * (source prime node,drain prime node) */ double *SOI3SP_spPtr; /* pointer to sparse matrix element at * (source prime node,source prime node) */ double *SOI3SP_bPtr; /* pointer to sparse matrix element at * (source prime node,bulk node) */ double *SOI3B_gfPtr; /* pointer to sparse matrix element at * (bulk node,front gate node) */ double *SOI3B_gbPtr; /* pointer to sparse matrix element at * (bulk node,back gate node) */ double *SOI3B_dpPtr; /* pointer to sparse matrix element at * (bulk node,drain prime node) */ double *SOI3B_spPtr; /* pointer to sparse matrix element at * (bulk node,source prime node) */ double *SOI3B_bPtr; /* pointer to sparse matrix element at * (bulk node,bulk node) */ /** Now for Thermal Node **/ double *SOI3TOUT_toutPtr; double *SOI3TOUT_dpPtr; double *SOI3TOUT_gfPtr; double *SOI3TOUT_gbPtr; double *SOI3TOUT_bPtr; double *SOI3TOUT_spPtr; double *SOI3GF_toutPtr; double *SOI3GB_toutPtr; double *SOI3DP_toutPtr; double *SOI3SP_toutPtr; double *SOI3TOUT_ibrPtr; /* these are for zero voltage source should */ double *SOI3IBR_toutPtr; /* no thermal behaviour be specified */ double *SOI3B_toutPtr; /* for impact ionisation current source */ double *SOI3TOUT_tout1Ptr; double *SOI3TOUT1_toutPtr; double *SOI3TOUT1_tout1Ptr; double *SOI3TOUT1_tout2Ptr; double *SOI3TOUT2_tout1Ptr; double *SOI3TOUT2_tout2Ptr; double *SOI3TOUT2_tout3Ptr; double *SOI3TOUT3_tout2Ptr; double *SOI3TOUT3_tout3Ptr; double *SOI3TOUT3_tout4Ptr; double *SOI3TOUT4_tout3Ptr; double *SOI3TOUT4_tout4Ptr; #ifndef NONOISE double SOI3nVar[NSTATVARS][SOI3NSRCS]; #else /* NONOISE */ double **SOI3nVar; #endif /* NONOISE */ } SOI3instance ; #define SOI3vbd SOI3states+ 0 /* bulk-drain voltage */ #define SOI3vbs SOI3states+ 1 /* bulk-source voltage */ #define SOI3vgfs SOI3states+ 2 /* front gate-source voltage */ #define SOI3vgbs SOI3states+ 3 /* back gate-source voltage */ #define SOI3vds SOI3states+ 4 /* drain-source voltage */ #define SOI3deltaT SOI3states+ 5 /* final temperature difference */ #define SOI3qgf SOI3states + 6 /* front gate charge */ #define SOI3iqgf SOI3states +7 /* front gate current */ #define SOI3qgb SOI3states+ 8 /* back gate charge */ #define SOI3iqgb SOI3states+ 9 /* back gate current */ #define SOI3qd SOI3states+ 10 /* drain charge */ #define SOI3iqd SOI3states+ 11 /* drain current */ #define SOI3qs SOI3states+ 14 /* body charge */ #define SOI3iqs SOI3states+ 15 /* body current */ #define SOI3cgfgf SOI3states+ 16 #define SOI3cgfd SOI3states+ 17 #define SOI3cgfs SOI3states+ 18 #define SOI3cgfdeltaT SOI3states+ 19 #define SOI3cgfgb SOI3states+ 20 #define SOI3cdgf SOI3states+ 21 #define SOI3cdd SOI3states+ 22 #define SOI3cds SOI3states+ 23 #define SOI3cddeltaT SOI3states+ 24 #define SOI3cdgb SOI3states+ 25 #define SOI3csgf SOI3states+ 26 #define SOI3csd SOI3states+ 27 #define SOI3css SOI3states+ 28 #define SOI3csdeltaT SOI3states+ 29 #define SOI3csgb SOI3states+ 30 #define SOI3cgbgf SOI3states + 31 #define SOI3cgbd SOI3states + 32 #define SOI3cgbs SOI3states + 33 #define SOI3cgbdeltaT SOI3states+ 34 #define SOI3cgbgb SOI3states + 35 #define SOI3qbd SOI3states+ 36 /* body-drain capacitor charge */ #define SOI3iqbd SOI3states+ 37 /* body-drain capacitor current */ #define SOI3qbs SOI3states+ 38 /* body-source capacitor charge */ #define SOI3iqbs SOI3states+ 39 /* body-source capacitor current */ #define SOI3qt SOI3states+ 40 /* Energy or 'charge' associated with ct */ #define SOI3iqt SOI3states+ 41 /* equiv current source for ct */ #define SOI3qt1 SOI3states+ 42 /* Energy or 'charge' associated with ct */ #define SOI3iqt1 SOI3states+ 43 /* equiv current source for ct */ #define SOI3qt2 SOI3states+ 44 /* Energy or 'charge' associated with ct */ #define SOI3iqt2 SOI3states+ 45 /* equiv current source for ct */ #define SOI3qt3 SOI3states+ 46 /* Energy or 'charge' associated with ct */ #define SOI3iqt3 SOI3states+ 47 /* equiv current source for ct */ #define SOI3qt4 SOI3states+ 48 /* Energy or 'charge' associated with ct */ #define SOI3iqt4 SOI3states+ 49 /* equiv current source for ct */ #define SOI3qBJTbs SOI3states+ 50 #define SOI3iqBJTbs SOI3states+ 51 #define SOI3qBJTbd SOI3states+ 52 #define SOI3iqBJTbd SOI3states+ 53 #define SOI3cBJTbsbs SOI3states+ 54 #define SOI3cBJTbsdeltaT SOI3states+ 55 #define SOI3cBJTbdbd SOI3states+ 56 #define SOI3cBJTbddeltaT SOI3states+ 57 #define SOI3idrain SOI3states+ 58 /* final drain current at timepoint (no define) */ #define SOI3deltaT1 SOI3states+ 59 /* final temperature difference */ #define SOI3deltaT2 SOI3states+ 60 /* final temperature difference */ #define SOI3deltaT3 SOI3states+ 61 /* final temperature difference */ #define SOI3deltaT4 SOI3states+ 62 /* final temperature difference */ #define SOI3deltaT5 SOI3states+ 63 /* final temperature difference */ #define SOI3numStates 64 /* per model data */ /* NOTE: parameters marked 'input - use xxxx' are paramters for * which a temperature correction is applied in SOI3temp, thus * the SOI3xxxx value in the per-instance structure should be used * instead in all calculations */ typedef struct sSOI3model { /* model structure for an SOI3 MOSFET */ struct GENmodel gen; #define SOI3modType gen.GENmodType #define SOI3nextModel(inst) ((struct sSOI3model *)((inst)->gen.GENnextModel)) #define SOI3instances(inst) ((SOI3instance *)((inst)->gen.GENinstances)) #define SOI3modName gen.GENmodName int SOI3type; /* device type : 1 = nsoi, -1 = psoi */ double SOI3tnom; /* temperature at which parameters measured */ double SOI3latDiff; double SOI3jctSatCurDensity; /* input - use tSatCurDens (jnct)*/ double SOI3jctSatCurDensity1; /* input - use tSatCurDens1 (jnct)*/ double SOI3jctSatCur; /* input - use tSatCur (jnct Is)*/ double SOI3jctSatCur1; /* input - use tSatCur1 (jnct Is)*/ double SOI3drainResistance; double SOI3sourceResistance; double SOI3sheetResistance; double SOI3transconductance; /* (KP) input - use tTransconductance */ double SOI3frontGateSourceOverlapCapFactor; double SOI3frontGateDrainOverlapCapFactor; double SOI3frontGateBulkOverlapCapFactor; double SOI3backGateSourceOverlapCapAreaFactor; double SOI3backGateDrainOverlapCapAreaFactor; double SOI3backGateBulkOverlapCapAreaFactor; double SOI3frontOxideCapFactor; /* Cof NO DEFINES */ double SOI3backOxideCapFactor; /* Cob OR */ double SOI3bodyCapFactor; /* Cb FLAGS */ double SOI3C_bb; /* Cb in series with Cob */ double SOI3C_fb; /* Cb in series with Cof */ double SOI3C_ssf; /* q*NQFF */ double SOI3C_ssb; /* q*NQFB */ double SOI3C_fac; /* C_ob/(C_ob+C_b+C_ssb) */ double SOI3vt0; /* input - use tVto */ double SOI3vfbF; /* flat-band voltage. input - use tVfbF */ double SOI3vfbB; /* back flat-band voltage. input - use tVfbB */ double SOI3gamma; /* gamma */ double SOI3gammaB; /* back gamma */ double SOI3capBD; /* input - use tCbd */ double SOI3capBS; /* input - use tCbs */ double SOI3sideWallCapFactor; /* input - use tCjsw */ double SOI3bulkJctPotential; /* input - use tBulkPot */ double SOI3bulkJctSideGradingCoeff; /* MJSW */ double SOI3fwdCapDepCoeff; /* FC */ double SOI3phi; /* input - use tPhi */ double SOI3vbi; /* input - use tVbi */ double SOI3lambda; double SOI3theta; double SOI3substrateDoping; /* Nsub */ double SOI3substrateCharge; /* Qb - no define/flag */ int SOI3gateType; /* +1=same, -1=different, 0=Al */ double SOI3frontFixedChargeDensity; double SOI3backFixedChargeDensity; double SOI3frontSurfaceStateDensity; double SOI3backSurfaceStateDensity; double SOI3frontOxideThickness; double SOI3backOxideThickness; double SOI3bodyThickness; double SOI3surfaceMobility; /* input - use tSurfMob */ double SOI3oxideThermalConductivity; double SOI3siliconSpecificHeat; double SOI3siliconDensity; double SOI3fNcoef; double SOI3fNexp; /* new stuff for newer model - msll Jan96 */ double SOI3sigma; /* DIBL factor */ double SOI3chiFB; /* temperature coeff of flatband voltage */ double SOI3chiPHI; /* temperature coeff of PHI */ double SOI3deltaW; /* narrow width effect factor */ double SOI3deltaL; /* short channel effect factor */ double SOI3vsat; /* input - saturation velocity, use tVsat */ double SOI3TVF0; /* internal use - precalculation of exp to save time */ double SOI3k; /* thermal exponent for mobility factor */ double SOI3lx; /* channel length modulation factor */ double SOI3vp; /* channel length modulation empirical voltage */ double SOI3eta; /* Imp. ion. field adjustment factor */ double SOI3alpha0; /* 1st impact ionisation coeff */ double SOI3beta0; /* 2nd impact ionisation coeff */ double SOI3lm; /* impact ion. drain region length cf LX */ double SOI3lm1; /* impact ion. drain region coeff */ double SOI3lm2; /* impact ion. drain region coeff */ double SOI3etad; /* diode ideality factor */ double SOI3etad1; /* 2nd diode ideality factor */ double SOI3chibeta; /* temp coeff of BETA0 */ double SOI3chid; /* temp factor for junction 1 */ double SOI3chid1; /* temp factor for junction 2 */ int SOI3dvt; /* switch for temp dependence of vt in diodes */ int SOI3nLev; /* level switch for noise model */ double SOI3betaBJT; /* beta for Eber Moll BJT model */ double SOI3tauFBJT; /* forward BJT transit time */ double SOI3tauRBJT; /* reverse BJT transit time */ double SOI3betaEXP; double SOI3tauEXP; double SOI3rsw; /* source resistance width scaling factor */ double SOI3rdw; /* drain resistance width scaling factor */ double SOI3minimumFeatureSize; /* minimum feature size of simulated process technology */ double SOI3vtex; /* Extracted threshold voltage */ double SOI3vdex; /* Drain bias at which vtex extracted */ double SOI3delta0; /* Surface potential factor for vtex conversion */ double SOI3satChargeShareFactor; /* Saturation region charge sharing factor */ double SOI3nplusDoping; /* Doping concentration of N+ or P+ regions */ double SOI3rta; /* thermal resistance area scaling factor */ double SOI3cta; /* thermal capacitance area scaling factor */ double SOI3mexp; /* exponent for CLM smoothing */ unsigned SOI3typeGiven :1; unsigned SOI3latDiffGiven :1; unsigned SOI3jctSatCurDensityGiven :1; unsigned SOI3jctSatCurDensity1Given :1; unsigned SOI3jctSatCurGiven :1; unsigned SOI3jctSatCur1Given :1; unsigned SOI3drainResistanceGiven :1; unsigned SOI3sourceResistanceGiven :1; unsigned SOI3sheetResistanceGiven :1; unsigned SOI3transconductanceGiven :1; unsigned SOI3frontGateSourceOverlapCapFactorGiven :1; unsigned SOI3frontGateDrainOverlapCapFactorGiven :1; unsigned SOI3frontGateBulkOverlapCapFactorGiven :1; unsigned SOI3backGateSourceOverlapCapAreaFactorGiven :1; unsigned SOI3backGateDrainOverlapCapAreaFactorGiven :1; unsigned SOI3backGateBulkOverlapCapAreaFactorGiven :1; unsigned SOI3subsBiasFactorGiven :1; unsigned SOI3bodyFactorGiven :1; unsigned SOI3vt0Given :1; unsigned SOI3vfbFGiven :1; unsigned SOI3vfbBGiven :1; unsigned SOI3gammaGiven :1; unsigned SOI3gammaBGiven :1; unsigned SOI3capBDGiven :1; unsigned SOI3capBSGiven :1; unsigned SOI3sideWallCapFactorGiven :1; unsigned SOI3bulkJctPotentialGiven :1; unsigned SOI3bulkJctSideGradingCoeffGiven :1; unsigned SOI3fwdCapDepCoeffGiven :1; unsigned SOI3phiGiven :1; unsigned SOI3lambdaGiven :1; unsigned SOI3thetaGiven :1; unsigned SOI3substrateDopingGiven :1; unsigned SOI3gateTypeGiven :1; unsigned SOI3frontFixedChargeDensityGiven :1; unsigned SOI3backFixedChargeDensityGiven :1; unsigned SOI3frontSurfaceStateDensityGiven :1; unsigned SOI3backSurfaceStateDensityGiven :1; unsigned SOI3frontOxideThicknessGiven :1; unsigned SOI3backOxideThicknessGiven :1; unsigned SOI3bodyThicknessGiven :1; unsigned SOI3surfaceMobilityGiven :1; unsigned SOI3tnomGiven :1; unsigned SOI3oxideThermalConductivityGiven :1; unsigned SOI3siliconSpecificHeatGiven :1; unsigned SOI3siliconDensityGiven :1; unsigned SOI3fNcoefGiven :1; unsigned SOI3fNexpGiven :1; /* extra stuff for newer model - msll Jan96 */ unsigned SOI3sigmaGiven :1; unsigned SOI3chiFBGiven :1; unsigned SOI3chiPHIGiven :1; unsigned SOI3deltaWGiven :1; unsigned SOI3deltaLGiven :1; unsigned SOI3vsatGiven :1; unsigned SOI3kGiven :1; unsigned SOI3lxGiven :1; unsigned SOI3vpGiven :1; unsigned SOI3useLAMBDA :1; unsigned SOI3etaGiven :1; unsigned SOI3alpha0Given :1; unsigned SOI3beta0Given :1; unsigned SOI3lmGiven :1; unsigned SOI3lm1Given :1; unsigned SOI3lm2Given :1; unsigned SOI3etadGiven :1; unsigned SOI3etad1Given :1; unsigned SOI3chibetaGiven :1; unsigned SOI3chidGiven :1; unsigned SOI3chid1Given :1; unsigned SOI3dvtGiven :1; unsigned SOI3nLevGiven :1; unsigned SOI3betaBJTGiven :1; unsigned SOI3tauFBJTGiven :1; unsigned SOI3tauRBJTGiven :1; unsigned SOI3betaEXPGiven :1; unsigned SOI3tauEXPGiven :1; unsigned SOI3rswGiven :1; unsigned SOI3rdwGiven :1; unsigned SOI3minimumFeatureSizeGiven :1; unsigned SOI3vtexGiven :1; unsigned SOI3vdexGiven :1; unsigned SOI3delta0Given :1; unsigned SOI3satChargeShareFactorGiven :1; unsigned SOI3nplusDopingGiven :1; unsigned SOI3rtaGiven :1; unsigned SOI3ctaGiven :1; unsigned SOI3mexpGiven :1; } SOI3model; #ifndef NSOI3 #define NSOI3 1 #define PSOI3 -1 #endif /*NSOI3*/ /* device parameters */ #define SOI3_W 1 #define SOI3_L 2 #define SOI3_M 25 enum { SOI3_AS = 3, SOI3_AD, SOI3_AB, SOI3_PS, SOI3_PD, SOI3_PB, SOI3_NRS, SOI3_NRD, SOI3_OFF, SOI3_IC, SOI3_IC_VBS, SOI3_IC_VDS, SOI3_IC_VGFS, SOI3_IC_VGBS, SOI3_W_SENS, SOI3_L_SENS, SOI3_IB, SOI3_IGF, SOI3_IGB, SOI3_IS, SOI3_POWER, SOI3_TEMP, }; /* model parameters */ #define SOI3_MOD_VTO 101 #define SOI3_MOD_VFBF 149 enum { SOI3_MOD_KP = 102, SOI3_MOD_GAMMA, SOI3_MOD_PHI, SOI3_MOD_LAMBDA, }; #define SOI3_MOD_THETA 139 enum { SOI3_MOD_RD = 106, SOI3_MOD_RS, SOI3_MOD_CBD, SOI3_MOD_CBS, SOI3_MOD_IS, SOI3_MOD_PB, SOI3_MOD_CGFSO, SOI3_MOD_CGFDO, SOI3_MOD_CGFBO, }; enum { SOI3_MOD_CGBSO = 144, SOI3_MOD_CGBDO, SOI3_MOD_CGBBO, }; enum { SOI3_MOD_CJ = 115, SOI3_MOD_MJ, SOI3_MOD_CJSW, SOI3_MOD_MJSW, SOI3_MOD_JS, SOI3_MOD_TOF, }; #define SOI3_MOD_TOB 133 #define SOI3_MOD_TB 134 enum { SOI3_MOD_LD = 121, SOI3_MOD_RSH, SOI3_MOD_U0, SOI3_MOD_FC, SOI3_MOD_NSUB, SOI3_MOD_TPG, }; #define SOI3_MOD_NQFF 147 #define SOI3_MOD_NQFB 148 #define SOI3_MOD_NSSF 127 #define SOI3_MOD_NSSB 135 enum { SOI3_MOD_NSOI3 = 128, SOI3_MOD_PSOI3, SOI3_MOD_TNOM, SOI3_MOD_KF, SOI3_MOD_AF, }; #define SOI3_MOD_KOX 142 #define SOI3_MOD_SHSI 143 /* extra stuff for newer model - msll Jan96 */ enum { SOI3_MOD_SIGMA = 150, SOI3_MOD_CHIFB, SOI3_MOD_CHIPHI, SOI3_MOD_DELTAW, SOI3_MOD_DELTAL, SOI3_MOD_VSAT, SOI3_MOD_K, SOI3_MOD_LX, SOI3_MOD_VP, SOI3_MOD_ETA, }; #define SOI3_MOD_ALPHA0 140 #define SOI3_MOD_BETA0 141 enum { SOI3_MOD_LM = 160, SOI3_MOD_LM1, SOI3_MOD_LM2, SOI3_MOD_ETAD, SOI3_MOD_ETAD1, SOI3_MOD_IS1, SOI3_MOD_JS1, SOI3_MOD_CHIBETA, SOI3_MOD_VFBB, SOI3_MOD_GAMMAB, SOI3_MOD_CHID, SOI3_MOD_CHID1, SOI3_MOD_DVT, SOI3_MOD_NLEV, SOI3_MOD_BETABJT, }; enum { SOI3_MOD_TAUFBJT = 176, SOI3_MOD_TAURBJT, SOI3_MOD_BETAEXP, SOI3_MOD_TAUEXP, SOI3_MOD_RSW, SOI3_MOD_RDW, }; enum { SOI3_MOD_FMIN = 382, SOI3_MOD_VTEX, SOI3_MOD_VDEX, SOI3_MOD_DELTA0, SOI3_MOD_CSF, SOI3_MOD_DSI, SOI3_MOD_NPLUS, SOI3_MOD_RTA, SOI3_MOD_CTA, SOI3_MOD_MEXP, }; /* device questions */ enum { SOI3_DNODE = 201, SOI3_GFNODE, SOI3_SNODE, SOI3_GBNODE, SOI3_BNODE, SOI3_DNODEPRIME, SOI3_SNODEPRIME, SOI3_TNODE, SOI3_BRANCH, SOI3_SOURCECONDUCT, SOI3_DRAINCONDUCT, SOI3_VON, SOI3_VFBF, SOI3_VDSAT, SOI3_SOURCEVCRIT, SOI3_DRAINVCRIT, SOI3_ID, SOI3_IBS, SOI3_IBD, SOI3_GMBS, SOI3_GMF, SOI3_GMB, SOI3_GDS, SOI3_GBD, SOI3_GBS, SOI3_CAPBD, SOI3_CAPBS, SOI3_CAPZEROBIASBD, SOI3_CAPZEROBIASBDSW, SOI3_CAPZEROBIASBS, SOI3_CAPZEROBIASBSSW, SOI3_VBD, SOI3_VBS, SOI3_VGFS, SOI3_VGBS, SOI3_VDS, SOI3_QGF, SOI3_IQGF, SOI3_QGB, SOI3_IQGB, SOI3_QD, SOI3_IQD, SOI3_QS, SOI3_IQS, SOI3_QBD, SOI3_IQBD, SOI3_QBS, SOI3_IQBS, SOI3_CGFGF, SOI3_CGFD, SOI3_CGFS, SOI3_CGFDELTAT, SOI3_CGFGB, SOI3_CDGF, SOI3_CDD, SOI3_CDS, SOI3_CDDELTAT, SOI3_CDGB, SOI3_CSGF, SOI3_CSD, SOI3_CSS, SOI3_CSDELTAT, SOI3_CSGB, SOI3_CGBGF, SOI3_CGBD, SOI3_CGBS, SOI3_CGBDELTAT, SOI3_CGBGB, SOI3_L_SENS_REAL, SOI3_L_SENS_IMAG, SOI3_L_SENS_MAG, SOI3_L_SENS_PH, SOI3_L_SENS_CPLX, SOI3_W_SENS_REAL, SOI3_W_SENS_IMAG, SOI3_W_SENS_MAG, SOI3_W_SENS_PH, SOI3_W_SENS_CPLX, SOI3_L_SENS_DC, SOI3_W_SENS_DC, SOI3_RT, SOI3_CT, SOI3_VFBB, SOI3_RT1, SOI3_CT1, SOI3_RT2, SOI3_CT2, SOI3_RT3, SOI3_CT3, SOI3_RT4, SOI3_CT4, SOI3_ITOT, }; /* model questions */ #include "soi3ext.h" #endif /*SOI3*/ tmpk8ny_4pz/src/spicelib/devices/soi3/soi3set.c0000644000175000017500000005742613546075722021613 0ustar carstencarsten/********** STAG version 2.7 Copyright 2000 owned by the United Kingdom Secretary of State for Defence acting through the Defence Evaluation and Research Agency. Developed by : Jim Benson, Department of Electronics and Computer Science, University of Southampton, United Kingdom. With help from : Nele D'Halleweyn, Ketan Mistry, Bill Redman-White, and Craig Easson. Based on STAG version 2.1 Developed by : Mike Lee, With help from : Bernard Tenbroek, Bill Redman-White, Mike Uren, Chris Edwards and John Bunyan. Acknowledgements : Rupert Howes and Pete Mole. **********/ /********** Modified by Paolo Nenzi 2002 ngspice integration **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "soi3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int SOI3setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { SOI3model *model = (SOI3model *)inModel; SOI3instance *here; int error; CKTnode *tmp; /* JimB - new variable for RT and CT scaling */ double thermal_area; double rtargs[5]; double * rtptr; int node_count; CKTnode *tmpNode; IFuid tmpName; /****** Part 1 - set any model parameters that are not present in ******/ /****** the netlist to default values. ******/ /* loop through all the SOI3 device models */ for( ; model != NULL; model = SOI3nextModel(model)) { if(!model->SOI3typeGiven) { model->SOI3type = NSOI3; } if(!model->SOI3latDiffGiven) { model->SOI3latDiff = 0; } if(!model->SOI3jctSatCurDensityGiven) { model->SOI3jctSatCurDensity = 1.0e-10; } if(!model->SOI3jctSatCurDensity1Given) { model->SOI3jctSatCurDensity1 = 0.0; } if(!model->SOI3jctSatCurGiven) { model->SOI3jctSatCur = 0.0; } if(!model->SOI3jctSatCur1Given) { model->SOI3jctSatCur1 = 0.0; } if(!model->SOI3transconductanceGiven) { model->SOI3transconductance = 2e-5; } if(!model->SOI3frontGateSourceOverlapCapFactorGiven) { model->SOI3frontGateSourceOverlapCapFactor = 0; } if(!model->SOI3frontGateDrainOverlapCapFactorGiven) { model->SOI3frontGateDrainOverlapCapFactor = 0; } if(!model->SOI3frontGateBulkOverlapCapFactorGiven) { model->SOI3frontGateBulkOverlapCapFactor = 0; } if(!model->SOI3backGateSourceOverlapCapAreaFactorGiven) { model->SOI3backGateSourceOverlapCapAreaFactor = 0; } if(!model->SOI3backGateDrainOverlapCapAreaFactorGiven) { model->SOI3backGateDrainOverlapCapAreaFactor = 0; } if(!model->SOI3backGateBulkOverlapCapAreaFactorGiven) { model->SOI3backGateBulkOverlapCapAreaFactor = 0; } if(!model->SOI3sideWallCapFactorGiven) { model->SOI3sideWallCapFactor = 0; } if(!model->SOI3bulkJctPotentialGiven) { model->SOI3bulkJctPotential = 0.8; } if(!model->SOI3bulkJctSideGradingCoeffGiven) { model->SOI3bulkJctSideGradingCoeff = 0.5; } if(!model->SOI3fwdCapDepCoeffGiven) { model->SOI3fwdCapDepCoeff = 0.5; } if(!model->SOI3lambdaGiven) { model->SOI3lambda = 0; } if(!model->SOI3thetaGiven) { model->SOI3theta = 0; } /* JimB - If SiO2 thermal conductivity given in netlist then use */ /* that value, otherwise use literature value. (Units W/K*m). */ if(!model->SOI3oxideThermalConductivityGiven) { model->SOI3oxideThermalConductivity = 1.4; } /* JimB - If Si specific heat given in netlist then use that value, */ /* otherwise use literature value. (Units J/kg*K). */ if(!model->SOI3siliconSpecificHeatGiven) { model->SOI3siliconSpecificHeat = 700; } /* JimB - If density of Si given in netlist then use that value, */ /* otherwise use literature value. (kg/m^3). */ if(!model->SOI3siliconDensityGiven) { model->SOI3siliconDensity = 2330; } if(!model->SOI3frontFixedChargeDensityGiven) { model->SOI3frontFixedChargeDensity = 0; } if(!model->SOI3backFixedChargeDensityGiven) { model->SOI3backFixedChargeDensity = 0; } if(!model->SOI3frontSurfaceStateDensityGiven) { model->SOI3frontSurfaceStateDensity = 0; } if(!model->SOI3backSurfaceStateDensityGiven) { model->SOI3backSurfaceStateDensity = 0; } if(!model->SOI3gammaGiven) { model->SOI3gamma = 0; } if(!model->SOI3fNcoefGiven) { model->SOI3fNcoef = 0; } if(!model->SOI3fNexpGiven) { model->SOI3fNexp = 1; } /* extra stuff for newer model - msll Jan96 */ if(!model->SOI3sigmaGiven) { model->SOI3sigma = 0; } if(!model->SOI3chiFBGiven) { model->SOI3chiFB = 0; } if(!model->SOI3chiPHIGiven) { model->SOI3chiPHI = 0; } if(!model->SOI3deltaWGiven) { model->SOI3deltaW = 0; } if(!model->SOI3deltaLGiven) { model->SOI3deltaL = 0; } if(!model->SOI3vsatGiven) { model->SOI3vsat = 0; /* special case - must check for it */ } if(!model->SOI3kGiven) { model->SOI3k = 1.5; /* defaults to old SPICE value */ } if(!model->SOI3lxGiven) { model->SOI3lx = 0; } if(!model->SOI3vpGiven) { model->SOI3vp = 0; } if(!model->SOI3gammaBGiven) { model->SOI3gammaB = 0; } if(!model->SOI3etaGiven) { model->SOI3eta = 1.0; /* normal field for imp. ion. */ } if(!model->SOI3alpha0Given) { model->SOI3alpha0=0; } if(!model->SOI3beta0Given) { model->SOI3beta0=1.92e6; } if(!model->SOI3lmGiven) { model->SOI3lm = 0; } if(!model->SOI3lm1Given) { model->SOI3lm1 = 0; } if(!model->SOI3lm2Given) { model->SOI3lm2 = 0; } if((!model->SOI3etadGiven) || (model->SOI3etad == 0 )) { model->SOI3etad = 1.0; } if((!model->SOI3etad1Given) || (model->SOI3etad1 == 0 )) { model->SOI3etad1 = 1.0; } if(!model->SOI3chibetaGiven) { model->SOI3chibeta = 0.0; } if(!model->SOI3dvtGiven) { model->SOI3dvt = 1; } if(!model->SOI3nLevGiven) { model->SOI3nLev = 0; } if(!model->SOI3betaBJTGiven) { model->SOI3betaBJT = 0.0; } if(!model->SOI3tauFBJTGiven) { model->SOI3tauFBJT = 0.0; } if(!model->SOI3tauRBJTGiven) { model->SOI3tauRBJT = 0.0; } if(!model->SOI3betaEXPGiven) { model->SOI3betaEXP = 2.0; } if(!model->SOI3tauEXPGiven) { model->SOI3tauEXP = 0.0; } if(!model->SOI3rswGiven) { model->SOI3rsw = 0.0; } if(!model->SOI3rdwGiven) { model->SOI3rdw = 0.0; } if(!model->SOI3minimumFeatureSizeGiven) { model->SOI3minimumFeatureSize = 0.0; } if(!model->SOI3vtexGiven) { model->SOI3vtex = 0.0; } if(!model->SOI3vdexGiven) { model->SOI3vdex = 0.0; } if(!model->SOI3delta0Given) { model->SOI3delta0 = 0.0; } if(!model->SOI3satChargeShareFactorGiven) { model->SOI3satChargeShareFactor = 0.5; } if(!model->SOI3nplusDopingGiven) { model->SOI3nplusDoping = 1e20; } if(!model->SOI3rtaGiven) { model->SOI3rta = 0; } if(!model->SOI3ctaGiven) { model->SOI3cta = 0; } if(!model->SOI3mexpGiven) { model->SOI3mexp = 0; } /* now check to determine which CLM model to use */ if((model->SOI3lx != 0) && (model->SOI3lambda != 0)) { SPfrontEnd->IFerrorf (ERR_WARNING, "%s: Non-zero values for BOTH LAMBDA and LX. \nDefaulting to simple LAMBDA model", model->SOI3modName); model->SOI3useLAMBDA = TRUE; } /* if only lx given, AND vp!=0, AND mexp (integer) is at least 1, use lx/vp, else basic lambda model*/ if ((model->SOI3lxGiven) && (model->SOI3lx != 0) && (!model->SOI3lambdaGiven) && (model->SOI3vp != 0) && (model->SOI3mexp > 0)) { model->SOI3useLAMBDA = FALSE; } else { model->SOI3useLAMBDA = TRUE; } /****** Part 2 - set any instance parameters that are not present ******/ /****** in the netlist to default values. ******/ /* loop through all the instances of the model */ for (here = SOI3instances(model); here != NULL ; here=SOI3nextInstance(here)) { if(!here->SOI3icVBSGiven) { here->SOI3icVBS = 0; } if(!here->SOI3icVDSGiven) { here->SOI3icVDS = 0; } if(!here->SOI3icVGFSGiven) { here->SOI3icVGFS = 0; } if(!here->SOI3icVGBSGiven) { here->SOI3icVGBS = 0; } if(!here->SOI3drainSquaresGiven || here->SOI3drainSquares==0) { here->SOI3drainSquares=1; } if(!here->SOI3sourceSquaresGiven || here->SOI3sourceSquares==0) { here->SOI3sourceSquares=1; } if (!here->SOI3mGiven) here->SOI3m = 1; /****** Part 3 - Initialise transconductances. ******/ /* initialise gM's */ here->SOI3iMdb= 0.0; here->SOI3iMsb= 0.0; here->SOI3gMmbs = 0.0; here->SOI3gMmf = 0.0; here->SOI3gMmb = 0.0; here->SOI3gMd = 0.0; here->SOI3gMdeltaT = 0.0; /* allocate a chunk of the state vector */ here->SOI3states = *states; *states += SOI3numStates; /* if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN) ){ *states += SOI3numSenStates * (ckt->CKTsenInfo->SENparms); } */ /****** Part 4 - check resistance values for internal nodes, ******/ /****** to see which internal nodes need to be created. ******/ /* Start with internal source and drain nodes */ if((model->SOI3drainResistance != 0 || (model->SOI3sheetResistance != 0 && here->SOI3drainSquares != 0) || model->SOI3rdw != 0) && here->SOI3dNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->SOI3name,"drain"); if(error) { return(error); } here->SOI3dNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } else { here->SOI3dNodePrime = here->SOI3dNode; } if((model->SOI3sourceResistance != 0 || (model->SOI3sheetResistance != 0 && here->SOI3sourceSquares != 0) || model->SOI3rsw != 0) && here->SOI3sNodePrime==0) { error = CKTmkVolt(ckt,&tmp,here->SOI3name,"source"); if(error) { return(error); } here->SOI3sNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } else { here->SOI3sNodePrime = here->SOI3sNode; } /* Now for thermal node */ /* JimB - If minimum feature size has non-zero value, then this */ /* will be used to calculate thermal area of SiO2 - this gives */ /* more accurate values of RT for short-channel devices. Assume*/ /* 4*fmin added to L, and 2*fmin added to W (fmin in microns). */ thermal_area = (here->SOI3w + 2*1e-6*model->SOI3minimumFeatureSize) * (here->SOI3l + 4*1e-6*model->SOI3minimumFeatureSize); /* Now calculate RT and CT. */ /* If RT is given on instance line, use it, otherwise calculate from */ /* above variables. */ if (!here->SOI3rtGiven) { if (model->SOI3rtaGiven) { here->SOI3rt = model->SOI3rta/thermal_area; } else { if (model->SOI3oxideThermalConductivity != 0) { here->SOI3rt = model->SOI3backOxideThickness / (model->SOI3oxideThermalConductivity * thermal_area); } else /* If conductivity set to zero in netlist, switch off self-heating. */ { here->SOI3rt = 0; } } } if (!here->SOI3rt1Given) { here->SOI3rt1=0; } if (!here->SOI3rt2Given) { here->SOI3rt2=0; } if (!here->SOI3rt3Given) { here->SOI3rt3=0; } if (!here->SOI3rt4Given) { here->SOI3rt4=0; } /* Now same thing for CT, but less complex as CT=0 does not cause problems */ if (!here->SOI3ctGiven) { if (model->SOI3ctaGiven) { here->SOI3ct = model->SOI3cta*thermal_area; } else { here->SOI3ct = model->SOI3siliconDensity * model->SOI3siliconSpecificHeat * thermal_area * model->SOI3bodyThickness; } } if (!here->SOI3ct1Given) { here->SOI3ct1=0; } if (!here->SOI3ct2Given) { here->SOI3ct2=0; } if (!here->SOI3ct3Given) { here->SOI3ct3=0; } if (!here->SOI3ct4Given) { here->SOI3ct4=0; } /* JimB - 15/9/99 */ rtargs[0]=here->SOI3rt; rtargs[1]=here->SOI3rt1; rtargs[2]=here->SOI3rt2; rtargs[3]=here->SOI3rt3; rtargs[4]=here->SOI3rt4; rtptr = rtargs; /* Set pointer to start address of rtargs array. */ node_count=0; while ( (*rtptr) && (node_count<5) ) { node_count++; if (node_count<5) { rtptr++; /* Increment pointer to next array element. */ } } here->SOI3numThermalNodes=node_count; /* Thermal node is now external and so is automatically created by CKTcreate in INP2A. It is also bound to the created node's number. However, if rt=0 then no thermal so make tout be the thermal ground. Can't simply use CKTbindNode 'cos the row and column associated with the original node has already been created. Thus problems will occur during pivoting. Instead put zero voltage source here. First create branch for it.*/ if ((here->SOI3rt == 0) && (here->SOI3branch == 0)) { error = CKTmkCur(ckt,&tmp,here->SOI3name,"branch"); if(error) { return(error); } here->SOI3branch = tmp->number; } else { /* have thermal - now how many time constants ? */ if ((here->SOI3numThermalNodes > 1) && (here->SOI3tout1Node == 0)) { error = CKTmkVolt(ckt,&tmp,here->SOI3name,"tout1"); if (error) return (error); here->SOI3tout1Node = tmp->number; } else { here->SOI3tout1Node = 0; } if ((here->SOI3numThermalNodes > 2) && (here->SOI3tout2Node == 0)) { error = CKTmkVolt(ckt,&tmp,here->SOI3name,"tout2"); if (error) return (error); here->SOI3tout2Node = tmp->number; } else { here->SOI3tout2Node = 0; } if ((here->SOI3numThermalNodes > 3) && (here->SOI3tout3Node == 0)) { error = CKTmkVolt(ckt,&tmp,here->SOI3name,"tout3"); if (error) return (error); here->SOI3tout3Node = tmp->number; } else { here->SOI3tout3Node = 0; } if ((here->SOI3numThermalNodes > 4) && (here->SOI3tout4Node == 0)) { error = CKTmkVolt(ckt,&tmp,here->SOI3name,"tout4"); if (error) return (error); here->SOI3tout4Node = tmp->number; } else { here->SOI3tout4Node = 0; } } /****** Part 5 - allocate memory to matrix elements corresponding to ******/ /****** pairs of nodes. ******/ /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(SOI3D_dPtr,SOI3dNode,SOI3dNode); TSTALLOC(SOI3D_dpPtr,SOI3dNode,SOI3dNodePrime); TSTALLOC(SOI3DP_dPtr,SOI3dNodePrime,SOI3dNode); TSTALLOC(SOI3S_sPtr,SOI3sNode,SOI3sNode); TSTALLOC(SOI3S_spPtr,SOI3sNode,SOI3sNodePrime); TSTALLOC(SOI3SP_sPtr,SOI3sNodePrime,SOI3sNode); TSTALLOC(SOI3GF_gfPtr,SOI3gfNode,SOI3gfNode); TSTALLOC(SOI3GF_gbPtr,SOI3gfNode,SOI3gbNode); TSTALLOC(SOI3GF_dpPtr,SOI3gfNode,SOI3dNodePrime); TSTALLOC(SOI3GF_spPtr,SOI3gfNode,SOI3sNodePrime); TSTALLOC(SOI3GF_bPtr,SOI3gfNode,SOI3bNode); TSTALLOC(SOI3GB_gfPtr,SOI3gbNode,SOI3gfNode); TSTALLOC(SOI3GB_gbPtr,SOI3gbNode,SOI3gbNode); TSTALLOC(SOI3GB_dpPtr,SOI3gbNode,SOI3dNodePrime); TSTALLOC(SOI3GB_spPtr,SOI3gbNode,SOI3sNodePrime); TSTALLOC(SOI3GB_bPtr,SOI3gbNode,SOI3bNode); TSTALLOC(SOI3B_gfPtr,SOI3bNode,SOI3gfNode); TSTALLOC(SOI3B_gbPtr,SOI3bNode,SOI3gbNode); TSTALLOC(SOI3B_dpPtr,SOI3bNode,SOI3dNodePrime); TSTALLOC(SOI3B_spPtr,SOI3bNode,SOI3sNodePrime); TSTALLOC(SOI3B_bPtr,SOI3bNode,SOI3bNode); TSTALLOC(SOI3DP_gfPtr,SOI3dNodePrime,SOI3gfNode); TSTALLOC(SOI3DP_gbPtr,SOI3dNodePrime,SOI3gbNode); TSTALLOC(SOI3DP_dpPtr,SOI3dNodePrime,SOI3dNodePrime); TSTALLOC(SOI3DP_spPtr,SOI3dNodePrime,SOI3sNodePrime); TSTALLOC(SOI3DP_bPtr,SOI3dNodePrime,SOI3bNode); TSTALLOC(SOI3SP_gfPtr,SOI3sNodePrime,SOI3gfNode); TSTALLOC(SOI3SP_gbPtr,SOI3sNodePrime,SOI3gbNode); TSTALLOC(SOI3SP_dpPtr,SOI3sNodePrime,SOI3dNodePrime); TSTALLOC(SOI3SP_spPtr,SOI3sNodePrime,SOI3sNodePrime); TSTALLOC(SOI3SP_bPtr,SOI3sNodePrime,SOI3bNode); if (here->SOI3rt == 0) { TSTALLOC(SOI3TOUT_ibrPtr,SOI3toutNode,SOI3branch); TSTALLOC(SOI3IBR_toutPtr,SOI3branch,SOI3toutNode); } else { TSTALLOC(SOI3TOUT_toutPtr,SOI3toutNode,SOI3toutNode); if (here->SOI3numThermalNodes > 1) { TSTALLOC(SOI3TOUT_tout1Ptr,SOI3toutNode,SOI3tout1Node); TSTALLOC(SOI3TOUT1_toutPtr,SOI3tout1Node,SOI3toutNode); TSTALLOC(SOI3TOUT1_tout1Ptr,SOI3tout1Node,SOI3tout1Node); } if (here->SOI3numThermalNodes > 2) { TSTALLOC(SOI3TOUT1_tout2Ptr,SOI3tout1Node,SOI3tout2Node); TSTALLOC(SOI3TOUT2_tout1Ptr,SOI3tout2Node,SOI3tout1Node); TSTALLOC(SOI3TOUT2_tout2Ptr,SOI3tout2Node,SOI3tout2Node); } if (here->SOI3numThermalNodes > 3) { TSTALLOC(SOI3TOUT2_tout3Ptr,SOI3tout2Node,SOI3tout3Node); TSTALLOC(SOI3TOUT3_tout2Ptr,SOI3tout3Node,SOI3tout2Node); TSTALLOC(SOI3TOUT3_tout3Ptr,SOI3tout3Node,SOI3tout3Node); } if (here->SOI3numThermalNodes > 4) { TSTALLOC(SOI3TOUT3_tout4Ptr,SOI3tout3Node,SOI3tout4Node); TSTALLOC(SOI3TOUT4_tout3Ptr,SOI3tout4Node,SOI3tout3Node); TSTALLOC(SOI3TOUT4_tout4Ptr,SOI3tout4Node,SOI3tout4Node); } TSTALLOC(SOI3TOUT_toutPtr,SOI3toutNode,SOI3toutNode); TSTALLOC(SOI3TOUT_gfPtr,SOI3toutNode,SOI3gfNode); TSTALLOC(SOI3TOUT_gbPtr,SOI3toutNode,SOI3gbNode); TSTALLOC(SOI3TOUT_dpPtr,SOI3toutNode,SOI3dNodePrime); TSTALLOC(SOI3TOUT_spPtr,SOI3toutNode,SOI3sNodePrime); TSTALLOC(SOI3TOUT_bPtr,SOI3toutNode,SOI3bNode); TSTALLOC(SOI3GF_toutPtr,SOI3gfNode,SOI3toutNode); TSTALLOC(SOI3GB_toutPtr,SOI3gbNode,SOI3toutNode); TSTALLOC(SOI3DP_toutPtr,SOI3dNodePrime,SOI3toutNode); TSTALLOC(SOI3SP_toutPtr,SOI3sNodePrime,SOI3toutNode); TSTALLOC(SOI3B_toutPtr,SOI3bNode,SOI3toutNode); } } } return(OK); } int SOI3unsetup(GENmodel *inModel, CKTcircuit *ckt) { SOI3model *model; SOI3instance *here; for (model = (SOI3model *)inModel; model != NULL; model = SOI3nextModel(model)) { for (here = SOI3instances(model); here != NULL; here=SOI3nextInstance(here)) { if (here->SOI3tout4Node > 0) CKTdltNNum(ckt, here->SOI3tout4Node); here->SOI3tout4Node = 0; if (here->SOI3tout3Node > 0) CKTdltNNum(ckt, here->SOI3tout3Node); here->SOI3tout3Node = 0; if (here->SOI3tout2Node > 0) CKTdltNNum(ckt, here->SOI3tout2Node); here->SOI3tout2Node = 0; if (here->SOI3tout1Node > 0) CKTdltNNum(ckt, here->SOI3tout1Node); here->SOI3tout1Node = 0; if (here->SOI3branch > 0) CKTdltNNum(ckt, here->SOI3branch); here->SOI3branch=0; if (here->SOI3sNodePrime > 0 && here->SOI3sNodePrime != here->SOI3sNode) CKTdltNNum(ckt, here->SOI3sNodePrime); here->SOI3sNodePrime= 0; if (here->SOI3dNodePrime > 0 && here->SOI3dNodePrime != here->SOI3dNode) CKTdltNNum(ckt, here->SOI3dNodePrime); here->SOI3dNodePrime= 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/soi3/soi3par.c0000644000175000017500000001217113546075722021566 0ustar carstencarsten/********** STAG version 2.7 Copyright 2000 owned by the United Kingdom Secretary of State for Defence acting through the Defence Evaluation and Research Agency. Developed by : Jim Benson, Department of Electronics and Computer Science, University of Southampton, United Kingdom. With help from : Nele D'Halleweyn, Ketan Mistry, Bill Redman-White, and Craig Easson. Based on STAG version 2.1 Developed by : Mike Lee, With help from : Bernard Tenbroek, Bill Redman-White, Mike Uren, Chris Edwards and John Bunyan. Acknowledgements : Rupert Howes and Pete Mole. **********/ /********** Modified by Paolo Nenzi 2002 ngspice integration **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "soi3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int SOI3param(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { SOI3instance *here = (SOI3instance *)inst; NG_IGNORE(select); switch(param) { case SOI3_L: here->SOI3l = value->rValue; here->SOI3lGiven = TRUE; break; case SOI3_W: here->SOI3w = value->rValue; here->SOI3wGiven = TRUE; break; case SOI3_M: here->SOI3m = value->rValue; here->SOI3mGiven = TRUE; break; case SOI3_AS: here->SOI3as = value->rValue; here->SOI3asGiven = TRUE; break; case SOI3_AD: here->SOI3ad = value->rValue; here->SOI3adGiven = TRUE; break; case SOI3_AB: here->SOI3ab = value->rValue; here->SOI3abGiven = TRUE; break; case SOI3_NRD: here->SOI3drainSquares = value->rValue; here->SOI3drainSquaresGiven = TRUE; break; case SOI3_NRS: here->SOI3sourceSquares = value->rValue; here->SOI3sourceSquaresGiven = TRUE; break; case SOI3_OFF: here->SOI3off = (value->iValue != 0); break; case SOI3_IC_VDS: here->SOI3icVDS = value->rValue; here->SOI3icVDSGiven = TRUE; break; case SOI3_IC_VGFS: here->SOI3icVGFS = value->rValue; here->SOI3icVGFSGiven = TRUE; break; case SOI3_IC_VGBS: here->SOI3icVGBS = value->rValue; here->SOI3icVGBSGiven = TRUE; break; case SOI3_IC_VBS: here->SOI3icVBS = value->rValue; here->SOI3icVBSGiven = TRUE; break; case SOI3_TEMP: here->SOI3temp = value->rValue+CONSTCtoK; here->SOI3tempGiven = TRUE; break; case SOI3_RT: here->SOI3rt = value->rValue; here->SOI3rtGiven = TRUE; break; case SOI3_CT: here->SOI3ct = value->rValue; here->SOI3ctGiven = TRUE; break; case SOI3_RT1: here->SOI3rt1 = value->rValue; here->SOI3rt1Given = TRUE; break; case SOI3_CT1: here->SOI3ct1 = value->rValue; here->SOI3ct1Given = TRUE; break; case SOI3_RT2: here->SOI3rt2 = value->rValue; here->SOI3rt2Given = TRUE; break; case SOI3_CT2: here->SOI3ct2 = value->rValue; here->SOI3ct2Given = TRUE; break; case SOI3_RT3: here->SOI3rt3 = value->rValue; here->SOI3rt3Given = TRUE; break; case SOI3_CT3: here->SOI3ct3 = value->rValue; here->SOI3ct3Given = TRUE; break; case SOI3_RT4: here->SOI3rt4 = value->rValue; here->SOI3rt4Given = TRUE; break; case SOI3_CT4: here->SOI3ct4 = value->rValue; here->SOI3ct4Given = TRUE; break; case SOI3_IC: switch(value->v.numValue){ case 4: here->SOI3icVBS = *(value->v.vec.rVec+3); here->SOI3icVBSGiven = TRUE; case 3: here->SOI3icVGBS = *(value->v.vec.rVec+2); here->SOI3icVGBSGiven = TRUE; case 2: here->SOI3icVGFS = *(value->v.vec.rVec+1); here->SOI3icVGFSGiven = TRUE; case 1: here->SOI3icVDS = *(value->v.vec.rVec); here->SOI3icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; /* case SOI3_L_SENS: if(value->iValue) { here->SOI3senParmNo = 1; here->SOI3sens_l = 1; } break; case SOI3_W_SENS: if(value->iValue) { here->SOI3senParmNo = 1; here->SOI3sens_w = 1; } break; */ default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/soi3/soi3cap.c0000644000175000017500000003636713546075722021564 0ustar carstencarsten/********** STAG version 2.7 Copyright 2000 owned by the United Kingdom Secretary of State for Defence acting through the Defence Evaluation and Research Agency. Developed by : Jim Benson, Department of Electronics and Computer Science, University of Southampton, United Kingdom. With help from : Nele D'Halleweyn, Ketan Mistry, Bill Redman-White, and Craig Easson. Based on STAG version 2.1 Developed by : Mike Lee, With help from : Bernard Tenbroek, Bill Redman-White, Mike Uren, Chris Edwards and John Bunyan. Acknowledgements : Rupert Howes and Pete Mole. **********/ /********** Modified by Paolo Nenzi 2002 ngspice integration **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/suffix.h" #include "soi3defs.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" void SOI3cap(double vgB, double Phiplusvsb, double gammaB, double paramargs[10], double Bfargs[2], double alpha_args[5], double psi_st0args[5], double vGTargs[5], double psi_sLargs[5], double psi_s0args[5], double ldargs[5], double *Qg, double *Qb, double *Qd, double *QgB, double *cgfgf, double *cgfd, double *cgfs, double *cgfdeltaT, double *cgfgb, double *cbgf, double *cbd, double *cbs, double *cbdeltaT, double *cbgb, double *cdgf, double *cdd, double *cds, double *cddeltaT, double *cdgb, double *cgbgf, double *cgbd, double *cgbs, double *cgbdeltaT, double *cgbgb ) /****** Part 1 - declare local variables. ******/ { double WCox,WCob,L; double gamma,eta_s,vt,delta,sigma,chiFB; double Bf,pDBf_Dpsi_st0; double alpha,Dalpha_Dvgfb,Dalpha_Dvdb,Dalpha_Dvsb,Dalpha_DdeltaT; double Dpsi_st0_Dvgfb,Dpsi_st0_Dvdb,Dpsi_st0_Dvsb,Dpsi_st0_DdeltaT; double vGT,DvGT_Dvgfb,DvGT_Dvdb,DvGT_Dvsb,DvGT_DdeltaT; double psi_sL,Dpsi_sL_Dvgfb,Dpsi_sL_Dvdb,Dpsi_sL_Dvsb,Dpsi_sL_DdeltaT; double psi_s0,Dpsi_s0_Dvgfb,Dpsi_s0_Dvdb,Dpsi_s0_Dvsb,Dpsi_s0_DdeltaT; double ld,Dld_Dvgfb,Dld_Dvdb,Dld_Dvsb,Dld_DdeltaT; double Lprime,Fc; double Qbprime,Qcprime,Qdprime,Qgprime,Qb2prime,Qc2prime,Qd2prime,Qg2prime; double Dlimc,Dlimd; double Vqd,Vqs; double F,F2; double cq,dq; double dercq,derdq; double sigmaC,Eqc,Eqd; double DVqs_Dvgfb,DVqs_Dvdb,DVqs_Dvsb,DVqs_DdeltaT; double DF_Dvgfb,DF_Dvdb,DF_Dvsb,DF_DdeltaT; double ccgf,ccd,ccs,ccdeltaT,ccgb; double vg,vgacc,Egacc,tmpacc,Qacc; double csf; NG_IGNORE(gammaB); NG_IGNORE(Phiplusvsb); NG_IGNORE(vgB); /****** Part 2 - extract variables passed from soi3load(), which ******/ /****** have been passed to soi3cap() in *arg arrays. ******/ WCox = paramargs[0]; L = paramargs[1]; gamma = paramargs[2]; eta_s = paramargs[3]; vt = paramargs[4]; delta = paramargs[5]; WCob = paramargs[6]; sigma = paramargs[7]; chiFB = paramargs[8]; csf = paramargs[9]; Bf = Bfargs[0]; pDBf_Dpsi_st0 = Bfargs[1]; alpha = alpha_args[0]; Dalpha_Dvgfb = alpha_args[1]; Dalpha_Dvdb = alpha_args[2]; Dalpha_Dvsb = alpha_args[3]; Dalpha_DdeltaT = alpha_args[4]; Dpsi_st0_Dvgfb = psi_st0args[1]; Dpsi_st0_Dvdb = psi_st0args[2]; Dpsi_st0_Dvsb = psi_st0args[3]; Dpsi_st0_DdeltaT = psi_st0args[4]; vGT = vGTargs[0]; DvGT_Dvgfb = vGTargs[1]; DvGT_Dvdb = vGTargs[2]; DvGT_Dvsb = vGTargs[3]; DvGT_DdeltaT = vGTargs[4]; psi_sL = psi_sLargs[0]; Dpsi_sL_Dvgfb = psi_sLargs[1]; Dpsi_sL_Dvdb = psi_sLargs[2]; Dpsi_sL_Dvsb = psi_sLargs[3]; Dpsi_sL_DdeltaT = psi_sLargs[4]; psi_s0 = psi_s0args[0]; Dpsi_s0_Dvgfb = psi_s0args[1]; Dpsi_s0_Dvdb = psi_s0args[2]; Dpsi_s0_Dvsb = psi_s0args[3]; Dpsi_s0_DdeltaT = psi_s0args[4]; ld = ldargs[0]; Dld_Dvgfb = ldargs[1]; Dld_Dvdb = ldargs[2]; Dld_Dvsb = ldargs[3]; Dld_DdeltaT = ldargs[4]; /****** Part 3 - define some important quantities. ******/ sigmaC = 1E-8; Vqd = (vGT - alpha*psi_sL); /* This is -qd/Cof */ Vqs = (vGT - alpha*psi_s0); /* This is -qs/Cof */ if (Vqs<=0) { /* deep subthreshold contingency */ F = 1; } else { F = Vqd/Vqs; if (F<0) { /* physically impossible situation */ F=0; } } F2 = F*F; Fc = 1 + ld/L; Lprime = L/Fc; /****** Part 4 - calculate normalised (see note below) terminal ******/ /****** charge expressions for the GCA region. ******/ /* JimB - important note */ /* The charge expressions Qcprime, Qd2prime etc in this file are not charges */ /* but voltages! Each expression is equal to the derived expression for the */ /* total charge in each region, but divided by a factor WL'Cof. This is */ /* compensated for later on. */ /* Channel charge Qc1 */ cq = (F*F + F + 1)/(F+1); Qcprime = -2*Vqs*cq/3; if ((-Qcprime/sigmaC) MAX_EXP_ARG) { vgacc = vg; tmpacc = 1; } else { Egacc = exp(-vg/vt); vgacc = -vt*log(1+Egacc); tmpacc = Egacc/(1+Egacc); } Qacc = -WCox*L*vgacc; /* Now work out GCA region charges */ *Qb = WCox*Lprime*Qbprime + Qacc; *Qd = WCox*Lprime*Qdprime; *Qg = WCox*Lprime*Qgprime - Qacc; /****** Part 7 - calculate normalised (see note below) terminal ******/ /****** charge expressions for the saturated drain region. ******/ Qc2prime = -Vqd; /* Basic expression for the intrinsic body charge in the saturation region is */ /* modified by csf, to reflect the fact that the body charge will be shared */ /* between the gate and the drain/body depletion region. This factor must be */ /* between 0 and 1, since it represents the fraction of ld over which qb is */ /* integrated to give Qb2. */ Qb2prime = -gamma*csf*(Bf + delta*psi_sL); Qd2prime = 0.5*Qc2prime; /* JimB - 9/1/99. Re-partition drain region charge */ /* Qd2prime = Qc2prime; */ Qg2prime = -Qc2prime-Qb2prime; *Qb += WCox*ld*Qb2prime; *Qd += WCox*ld*Qd2prime; *Qg += WCox*ld*Qg2prime; /****** Part 8 - calculate full capacitance expressions, accounting ******/ /****** for both GCA and drain region contributions. As explained ******/ /****** in part 5, *cbgf, *cbd etc only derivatives of GCA charge ******/ /****** expression w.r.t. Vx. Now need to include Lprime/ld ******/ /****** dependence on Vx as well. ******/ *cbgf = WCox*(Lprime*(*cbgf) - ld*csf*(pDBf_Dpsi_st0*Dpsi_st0_Dvgfb + delta*Dpsi_sL_Dvgfb + (psi_sL*Dalpha_Dvgfb/gamma)) + (Qb2prime - Qbprime/(Fc*Fc))*Dld_Dvgfb ); *cbd = WCox*(Lprime*(*cbd) - ld*csf*(pDBf_Dpsi_st0*Dpsi_st0_Dvdb + delta*Dpsi_sL_Dvdb + (psi_sL*Dalpha_Dvdb/gamma)) + (Qb2prime - Qbprime/(Fc*Fc))*Dld_Dvdb ); *cbs = WCox*(Lprime*(*cbs) - ld*csf*(pDBf_Dpsi_st0*Dpsi_st0_Dvsb + delta*Dpsi_sL_Dvsb + (psi_sL*Dalpha_Dvsb/gamma)) + (Qb2prime - Qbprime/(Fc*Fc))*Dld_Dvsb ); *cbdeltaT = WCox*(Lprime*(*cbdeltaT) - ld*csf*(pDBf_Dpsi_st0*Dpsi_st0_DdeltaT + delta*Dpsi_sL_DdeltaT + (psi_sL*Dalpha_DdeltaT/gamma)) + (Qb2prime - Qbprime/(Fc*Fc))*Dld_DdeltaT ); *cbgb = 0; ccgf = WCox*(Lprime*(ccgf) - ld*(DvGT_Dvgfb - alpha*Dpsi_sL_Dvgfb - psi_sL*Dalpha_Dvgfb) + (Qc2prime - Qcprime/(Fc*Fc))*Dld_Dvgfb ); ccd = WCox*(Lprime*(ccd) - ld*(DvGT_Dvdb - alpha*Dpsi_sL_Dvdb - psi_sL*Dalpha_Dvdb) + (Qc2prime - Qcprime/(Fc*Fc))*Dld_Dvdb ); ccs = WCox*(Lprime*(ccs) - ld*(DvGT_Dvsb - alpha*Dpsi_sL_Dvsb - psi_sL*Dalpha_Dvsb) + (Qc2prime - Qcprime/(Fc*Fc))*Dld_Dvsb ); ccdeltaT = WCox*(Lprime*(ccdeltaT) - ld*(DvGT_DdeltaT - alpha*Dpsi_sL_DdeltaT - psi_sL*Dalpha_DdeltaT) + (Qc2prime - Qcprime/(Fc*Fc))*Dld_DdeltaT ); ccgb = 0; *cdgf = WCox*(Lprime*(*cdgf) - 0.5*ld*(DvGT_Dvgfb - alpha*Dpsi_sL_Dvgfb - psi_sL*Dalpha_Dvgfb) + (Qd2prime - Qdprime/(Fc*Fc))*Dld_Dvgfb ); *cdd = WCox*(Lprime*(*cdd) - 0.5*ld*(DvGT_Dvdb - alpha*Dpsi_sL_Dvdb - psi_sL*Dalpha_Dvdb) + (Qd2prime - Qdprime/(Fc*Fc))*Dld_Dvdb ); *cds = WCox*(Lprime*(*cds) - 0.5*ld*(DvGT_Dvsb - alpha*Dpsi_sL_Dvsb - psi_sL*Dalpha_Dvsb) + (Qd2prime - Qdprime/(Fc*Fc))*Dld_Dvsb ); *cddeltaT = WCox*(Lprime*(*cddeltaT) - 0.5*ld*(DvGT_DdeltaT - alpha*Dpsi_sL_DdeltaT - psi_sL*Dalpha_DdeltaT) + (Qd2prime - Qdprime/(Fc*Fc))*Dld_DdeltaT ); *cdgb = 0; /****** Part 9 - Finally, include accumulation charge derivatives. ******/ /* Now include accumulation charge derivs */ *cbgf += -WCox*L*tmpacc; *cbd += -WCox*L*tmpacc*sigma; *cbs += -WCox*L*tmpacc*(-sigma); *cbdeltaT += -WCox*L*tmpacc*chiFB; *cbgb += 0; *cgfgf = -(ccgf + *cbgf); *cgfd = -(ccd + *cbd); *cgfs = -(ccs + *cbs); *cgfdeltaT = -(ccdeltaT + *cbdeltaT); *cgfgb = 0; /****** Part 10 - Back gate stuff - doesn't work, so set to zero. ******/ /* Should move this before the accumulation section for consistency, but */ /* doesn't matter, as all intrinsic back-gate capacitances set to zero anyway. */ *QgB = 0; *cgbgf = 0; *cgbd = 0; *cgbs = 0; *cgbgb = 0; *cgbdeltaT = 0; } void SOI3capEval(CKTcircuit *ckt, double Frontcapargs[6], double Backcapargs[6], double cgfgf, double cgfd, double cgfs, double cgfdeltaT, double cgfgb, double cdgf, double cdd, double cds, double cddeltaT, double cdgb, double csgf, double csd, double css, double csdeltaT, double csgb, double cbgf, double cbd, double cbs, double cbdeltaT, double cbgb, double cgbgf, double cgbd, double cgbs, double cgbdeltaT, double cgbgb, double *gcgfgf, double *gcgfd, double *gcgfs, double *gcgfdeltaT, double *gcgfgb, double *gcdgf, double *gcdd, double *gcds, double *gcddeltaT, double *gcdgb, double *gcsgf, double *gcsd, double *gcss, double *gcsdeltaT, double *gcsgb, double *gcbgf, double *gcbd, double *gcbs, double *gcbdeltaT, double *gcbgb, double *gcgbgf, double *gcgbd, double *gcgbs, double *gcgbdeltaT, double *gcgbgb, double *qgatef, double *qbody, double *qdrn, double *qsrc, double *qgateb) { double cgfd0,cgfs0,cgfb0; double cgbd0,cgbs0,cgbb0; double vgfd,vgfs,vgfb; double vgbd,vgbs,vgbb; double ag0; double qgfd,qgfs,qgfb; double qgbd,qgbs,qgbb; cgfd0 = Frontcapargs[0]; cgfs0 = Frontcapargs[1]; cgfb0 = Frontcapargs[2]; vgfd = Frontcapargs[3]; vgfs = Frontcapargs[4]; vgfb = Frontcapargs[5]; cgbd0 = Backcapargs[0]; cgbs0 = Backcapargs[1]; cgbb0 = Backcapargs[2]; vgbd = Backcapargs[3]; vgbs = Backcapargs[4]; vgbb = Backcapargs[5]; /* stuff below includes overlap caps' conductances */ ag0 = ckt->CKTag[0]; *gcgfgf = (cgfgf + cgfd0 + cgfs0 + cgfb0) * ag0; *gcgfd = (cgfd - cgfd0) * ag0; *gcgfs = (cgfs - cgfs0) * ag0; *gcgfdeltaT = cgfdeltaT * ag0; *gcgfgb = cgfgb * ag0; *gcdgf = (cdgf - cgfd0) * ag0; *gcdd = (cdd + cgfd0 + cgbd0) * ag0; *gcds = cds * ag0; *gcddeltaT = cddeltaT * ag0; *gcdgb = (cdgb - cgbd0) * ag0; *gcsgf = (csgf - cgfs0) * ag0; *gcsd = csd * ag0; *gcss = (css + cgfs0 + cgbs0) * ag0; *gcsdeltaT = csdeltaT * ag0; *gcsgb = (csgb - cgbs0) * ag0; *gcbgf = (cbgf - cgfb0) * ag0; *gcbd = cbd * ag0; *gcbs = cbs * ag0; *gcbdeltaT = cbdeltaT * ag0; *gcbgb = (cbgb - cgbb0) * ag0; *gcgbgf = cgbgf * ag0; *gcgbd = (cgbd - cgbd0) * ag0; *gcgbs = (cgbs - cgbs0) * ag0; *gcgbdeltaT = cgbdeltaT * ag0; *gcgbgb = (cgbgb + cgbd0 + cgbs0 + cgbb0) * ag0; qgfd = cgfd0 * vgfd; qgfs = cgfs0 * vgfs; qgfb = cgfb0 * vgfb; qgbd = cgbd0 * vgbd; qgbs = cgbs0 * vgbs; qgbb = cgbb0 * vgbb; *qgatef = *qgatef + qgfd + qgfs + qgfb; *qbody = *qbody - qgfb - qgbb; *qdrn = *qdrn - qgfd - qgbd; *qgateb = *qgateb + qgbd + qgbs + qgbb; *qsrc = -(*qgatef + *qbody + *qdrn + *qgateb); } tmpk8ny_4pz/src/spicelib/devices/soi3/README0000644000175000017500000000453213546075722020724 0ustar carstencarstenLicence Agreement (STAG) from DERA 1. The STAG Computer Model is subject to Copyright owned by the United Kingdom Secretary of State for Defence acting through the Defence Evaluation and Research Agency (DERA). It is made available to licensee (hereinafter LICENSEE) on the following conditions:- 2. Downloading the STAG Model deems acceptance of the terms of the licence. 3. DERA grants to LICENSEE a royalty free non-exclusive licence to use the furnished STAG Model. LICENSEE is permitted to copy, distribute, and transfer the STAG Model to customers for their royalty free use on the same licence terms. 4. LICENSEE acknowledges that STAG is a research tool still in the development stage, that it is being supplied "as is", without any accompanying services or improvements from DERA. 5. LICENSEE acknowledges that STAG is a Model developed by the Department of Electronics and Computer Science at the University of Southampton (UOS), England, and is incorporated within SPICE 3f5, a program developed by the Department of Electrical Engineering and Computer Science at the University of California, Berkeley, California (UCB). As such, LICENSEE acknowledges that in addition to the rights licensed by DERA, UCB itself imposes restrictions on use, copying, and distribution of the SPICE 3f5 program and its derivatives. 6. LICENSEE undertakes to obtain any separate licence required for the use of SPICE 3f5 from UCB. 7. DERA make no representations or warranties, express or implied. DERA shall not be held liable for any liability nor for any direct, indirect, or consequential damages with respect to any claim by LICENSEE or any third party on account of or arising from this Agreement or use of STAG. 8. Title to copyright of all portions of STAG developed at UOS and/or DERA together with associated documentation shall at all times remain with DERA, and LICENSEE agrees to preserve same. LICENSEE agrees to ensure that this information and appropriate copyright notice is reproduced with any copies of STAG or any modified versions derived from it. 9. This agreement shall be construed, interpreted, and applied in accordance with the laws of England. for DERA by: J B EDWARDS IPD5A 10 NOV 1997 Intellectual Property Department Defence Evaluation and Research Agency St Andrews Road Malvern WR14 3PS United Kingdom phone: +44 - 1684 - 894234 fax: +44 - 1684 - 894146 tmpk8ny_4pz/src/spicelib/devices/soi3/soi3mpar.c0000644000175000017500000003327113546075722021747 0ustar carstencarsten/********** STAG version 2.7 Copyright 2000 owned by the United Kingdom Secretary of State for Defence acting through the Defence Evaluation and Research Agency. Developed by : Jim Benson, Department of Electronics and Computer Science, University of Southampton, United Kingdom. With help from : Nele D'Halleweyn, Ketan Mistry, Bill Redman-White, and Craig Easson. Based on STAG version 2.1 Developed by : Mike Lee, With help from : Bernard Tenbroek, Bill Redman-White, Mike Uren, Chris Edwards and John Bunyan. Acknowledgements : Rupert Howes and Pete Mole. **********/ /********** Modified by Paolo Nenzi 2002 ngspice integration **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "soi3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int SOI3mParam(int param, IFvalue *value, GENmodel *inModel) { register SOI3model *model = (SOI3model *)inModel; switch(param) { case SOI3_MOD_VTO: model->SOI3vt0 = value->rValue; model->SOI3vt0Given = TRUE; break; case SOI3_MOD_VFBF: model->SOI3vfbF = value->rValue; model->SOI3vfbFGiven = TRUE; break; case SOI3_MOD_KP: model->SOI3transconductance = value->rValue; model->SOI3transconductanceGiven = TRUE; break; case SOI3_MOD_GAMMA: model->SOI3gamma = value->rValue; model->SOI3gammaGiven = TRUE; break; case SOI3_MOD_PHI: model->SOI3phi = value->rValue; model->SOI3phiGiven = TRUE; break; case SOI3_MOD_LAMBDA: model->SOI3lambda = value->rValue; model->SOI3lambdaGiven = TRUE; break; case SOI3_MOD_THETA: model->SOI3theta = value->rValue; model->SOI3thetaGiven = TRUE; break; case SOI3_MOD_RD: model->SOI3drainResistance = value->rValue; model->SOI3drainResistanceGiven = TRUE; break; case SOI3_MOD_RS: model->SOI3sourceResistance = value->rValue; model->SOI3sourceResistanceGiven = TRUE; break; case SOI3_MOD_CBD: model->SOI3capBD = value->rValue; model->SOI3capBDGiven = TRUE; break; case SOI3_MOD_CBS: model->SOI3capBS = value->rValue; model->SOI3capBSGiven = TRUE; break; case SOI3_MOD_IS: model->SOI3jctSatCur = value->rValue; model->SOI3jctSatCurGiven = TRUE; break; case SOI3_MOD_IS1: model->SOI3jctSatCur1 = value->rValue; model->SOI3jctSatCur1Given = TRUE; break; case SOI3_MOD_PB: model->SOI3bulkJctPotential = value->rValue; model->SOI3bulkJctPotentialGiven = TRUE; break; case SOI3_MOD_CGFSO: model->SOI3frontGateSourceOverlapCapFactor = value->rValue; model->SOI3frontGateSourceOverlapCapFactorGiven = TRUE; break; case SOI3_MOD_CGFDO: model->SOI3frontGateDrainOverlapCapFactor = value->rValue; model->SOI3frontGateDrainOverlapCapFactorGiven = TRUE; break; case SOI3_MOD_CGFBO: model->SOI3frontGateBulkOverlapCapFactor = value->rValue; model->SOI3frontGateBulkOverlapCapFactorGiven = TRUE; break; case SOI3_MOD_CGBSO: model->SOI3backGateSourceOverlapCapAreaFactor = value->rValue; model->SOI3backGateSourceOverlapCapAreaFactorGiven = TRUE; break; case SOI3_MOD_CGBDO: model->SOI3backGateDrainOverlapCapAreaFactor = value->rValue; model->SOI3backGateDrainOverlapCapAreaFactorGiven = TRUE; break; case SOI3_MOD_CGBBO: model->SOI3backGateBulkOverlapCapAreaFactor = value->rValue; model->SOI3backGateBulkOverlapCapAreaFactorGiven = TRUE; break; /* case SOI3_MOD_CJ: model->SOI3bulkCapFactor = value->rValue; model->SOI3bulkCapFactorGiven = TRUE; break; case SOI3_MOD_MJ: model->SOI3bulkJctBotGradingCoeff = value->rValue; model->SOI3bulkJctBotGradingCoeffGiven = TRUE; break; */ case SOI3_MOD_RSH: model->SOI3sheetResistance = value->rValue; model->SOI3sheetResistanceGiven = TRUE; break; case SOI3_MOD_CJSW: model->SOI3sideWallCapFactor = value->rValue; model->SOI3sideWallCapFactorGiven = TRUE; break; case SOI3_MOD_MJSW: model->SOI3bulkJctSideGradingCoeff = value->rValue; model->SOI3bulkJctSideGradingCoeffGiven = TRUE; break; case SOI3_MOD_JS: model->SOI3jctSatCurDensity = value->rValue; model->SOI3jctSatCurDensityGiven = TRUE; break; case SOI3_MOD_JS1: model->SOI3jctSatCurDensity1 = value->rValue; model->SOI3jctSatCurDensity1Given = TRUE; break; case SOI3_MOD_TOF: model->SOI3frontOxideThickness = value->rValue; model->SOI3frontOxideThicknessGiven = TRUE; break; case SOI3_MOD_TOB: model->SOI3backOxideThickness = value->rValue; model->SOI3backOxideThicknessGiven = TRUE; break; case SOI3_MOD_TB: model->SOI3bodyThickness = value->rValue; model->SOI3bodyThicknessGiven = TRUE; break; case SOI3_MOD_LD: model->SOI3latDiff = value->rValue; model->SOI3latDiffGiven = TRUE; break; case SOI3_MOD_U0: model->SOI3surfaceMobility = value->rValue; model->SOI3surfaceMobilityGiven = TRUE; break; case SOI3_MOD_FC: model->SOI3fwdCapDepCoeff = value->rValue; model->SOI3fwdCapDepCoeffGiven = TRUE; break; case SOI3_MOD_NSOI3: if(value->iValue) { model->SOI3type = 1; model->SOI3typeGiven = TRUE; } break; case SOI3_MOD_PSOI3: if(value->iValue) { model->SOI3type = -1; model->SOI3typeGiven = TRUE; } break; case SOI3_MOD_KOX: model->SOI3oxideThermalConductivity = value->rValue; model->SOI3oxideThermalConductivityGiven = TRUE; break; case SOI3_MOD_SHSI: model->SOI3siliconSpecificHeat = value->rValue; model->SOI3siliconSpecificHeatGiven = TRUE; break; case SOI3_MOD_DSI: model->SOI3siliconDensity = value->rValue; model->SOI3siliconDensityGiven = TRUE; break; case SOI3_MOD_NSUB: model->SOI3substrateDoping = value->rValue; model->SOI3substrateDopingGiven = TRUE; break; case SOI3_MOD_TPG: model->SOI3gateType = value->iValue; model->SOI3gateTypeGiven = TRUE; break; case SOI3_MOD_NQFF: model->SOI3frontFixedChargeDensity = value->rValue; model->SOI3frontFixedChargeDensityGiven = TRUE; break; case SOI3_MOD_NQFB: model->SOI3backFixedChargeDensity = value->rValue; model->SOI3backFixedChargeDensityGiven = TRUE; break; case SOI3_MOD_NSSF: model->SOI3frontSurfaceStateDensity = value->rValue; model->SOI3frontSurfaceStateDensityGiven = TRUE; break; case SOI3_MOD_NSSB: model->SOI3backSurfaceStateDensity = value->rValue; model->SOI3backSurfaceStateDensityGiven = TRUE; break; case SOI3_MOD_TNOM: model->SOI3tnom = value->rValue+CONSTCtoK; model->SOI3tnomGiven = TRUE; break; case SOI3_MOD_KF: model->SOI3fNcoef = value->rValue; model->SOI3fNcoefGiven = TRUE; break; case SOI3_MOD_AF: model->SOI3fNexp = value->rValue; model->SOI3fNexpGiven = TRUE; break; /* extra stuff for newer model - msll Jan96 */ case SOI3_MOD_SIGMA: model->SOI3sigma = value->rValue; model->SOI3sigmaGiven = TRUE; break; case SOI3_MOD_CHIFB: model->SOI3chiFB = value->rValue; model->SOI3chiFBGiven = TRUE; break; case SOI3_MOD_CHIPHI: model->SOI3chiPHI = value->rValue; model->SOI3chiPHIGiven = TRUE; break; case SOI3_MOD_DELTAW: model->SOI3deltaW = value->rValue; model->SOI3deltaWGiven = TRUE; break; case SOI3_MOD_DELTAL: model->SOI3deltaL = value->rValue; model->SOI3deltaLGiven = TRUE; break; case SOI3_MOD_VSAT: model->SOI3vsat = value->rValue; model->SOI3vsatGiven = TRUE; break; case SOI3_MOD_K: model->SOI3k = value->rValue; model->SOI3kGiven = TRUE; break; case SOI3_MOD_LX: model->SOI3lx = value->rValue; model->SOI3lxGiven = TRUE; break; case SOI3_MOD_VP: model->SOI3vp = value->rValue; model->SOI3vpGiven = TRUE; break; case SOI3_MOD_ETA: model->SOI3eta = value->rValue; model->SOI3etaGiven = TRUE; break; case SOI3_MOD_ALPHA0: model->SOI3alpha0 = value->rValue; model->SOI3alpha0Given = TRUE; break; case SOI3_MOD_BETA0: model->SOI3beta0 = value->rValue; model->SOI3beta0Given = TRUE; break; case SOI3_MOD_LM: model->SOI3lm = value->rValue; model->SOI3lmGiven = TRUE; break; case SOI3_MOD_LM1: model->SOI3lm1 = value->rValue; model->SOI3lm1Given = TRUE; break; case SOI3_MOD_LM2: model->SOI3lm2 = value->rValue; model->SOI3lm2Given = TRUE; break; case SOI3_MOD_ETAD: model->SOI3etad = value->rValue; model->SOI3etadGiven = TRUE; break; case SOI3_MOD_ETAD1: model->SOI3etad1 = value->rValue; model->SOI3etad1Given = TRUE; break; case SOI3_MOD_CHIBETA: model->SOI3chibeta = value->rValue; model->SOI3chibetaGiven = TRUE; break; case SOI3_MOD_VFBB: model->SOI3vfbB = value->rValue; model->SOI3vfbBGiven = TRUE; break; case SOI3_MOD_GAMMAB: model->SOI3gammaB = value->rValue; model->SOI3gammaBGiven = TRUE; break; case SOI3_MOD_CHID: model->SOI3chid = value->rValue; model->SOI3chidGiven = TRUE; break; case SOI3_MOD_CHID1: model->SOI3chid1 = value->rValue; model->SOI3chid1Given = TRUE; break; case SOI3_MOD_DVT: model->SOI3dvt = value->iValue; model->SOI3dvtGiven = TRUE; break; case SOI3_MOD_NLEV: model->SOI3nLev = value->iValue; model->SOI3nLevGiven = TRUE; break; case SOI3_MOD_BETABJT: model->SOI3betaBJT = value->rValue; model->SOI3betaBJTGiven = TRUE; break; case SOI3_MOD_TAUFBJT: model->SOI3tauFBJT = value->rValue; model->SOI3tauFBJTGiven = TRUE; break; case SOI3_MOD_TAURBJT: model->SOI3tauRBJT = value->rValue; model->SOI3tauRBJTGiven = TRUE; break; case SOI3_MOD_BETAEXP: model->SOI3betaEXP = value->rValue; model->SOI3betaEXPGiven = TRUE; break; case SOI3_MOD_TAUEXP: model->SOI3tauEXP = value->rValue; model->SOI3tauEXPGiven = TRUE; break; case SOI3_MOD_RSW: model->SOI3rsw = value->rValue; model->SOI3rswGiven = TRUE; break; case SOI3_MOD_RDW: model->SOI3rdw = value->rValue; model->SOI3rdwGiven = TRUE; break; case SOI3_MOD_FMIN: model->SOI3minimumFeatureSize = value->rValue; model->SOI3minimumFeatureSizeGiven = TRUE; break; case SOI3_MOD_VTEX: model->SOI3vtex = value->rValue; model->SOI3vtexGiven = TRUE; break; case SOI3_MOD_VDEX: model->SOI3vdex = value->rValue; model->SOI3vdexGiven = TRUE; break; case SOI3_MOD_DELTA0: model->SOI3delta0 = value->rValue; model->SOI3delta0Given = TRUE; break; case SOI3_MOD_CSF: model->SOI3satChargeShareFactor = value->rValue; model->SOI3satChargeShareFactorGiven = TRUE; break; case SOI3_MOD_NPLUS: model->SOI3nplusDoping = value->rValue; model->SOI3nplusDopingGiven = TRUE; break; case SOI3_MOD_RTA: model->SOI3rta = value->rValue; model->SOI3rtaGiven = TRUE; break; case SOI3_MOD_CTA: model->SOI3cta = value->rValue; model->SOI3ctaGiven = TRUE; break; case SOI3_MOD_MEXP: model->SOI3mexp = value->rValue; model->SOI3mexpGiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/soi3/soi3acld.c0000644000175000017500000004600113546075722021706 0ustar carstencarsten/********** STAG version 2.7 Copyright 2000 owned by the United Kingdom Secretary of State for Defence acting through the Defence Evaluation and Research Agency. Developed by : Jim Benson, Department of Electronics and Computer Science, University of Southampton, United Kingdom. With help from : Nele D'Halleweyn, Ketan Mistry, Bill Redman-White, and Craig Easson. Based on STAG version 2.1 Developed by : Mike Lee, With help from : Bernard Tenbroek, Bill Redman-White, Mike Uren, Chris Edwards and John Bunyan. Acknowledgements : Rupert Howes and Pete Mole. **********/ /********** Modified by Paolo Nenzi 2002 ngspice integration **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "soi3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int SOI3acLoad(GENmodel *inModel, CKTcircuit *ckt) { SOI3model *model = (SOI3model*)inModel; SOI3instance *here; int xnrm; int xrev; double cgfgf,cgfd,cgfs,cgfdeltaT,cgfgb; double cdgf,cdd,cds,cddeltaT,cdgb; double csgf,csd,css,csdeltaT,csgb; double cbgf,cbd,cbs,cbdeltaT,cbgb; double cgbgf,cgbd,cgbs,cgbdeltaT,cgbgb; double xcgfgf,xcgfd,xcgfs,xcgfdeltaT,xcgfgb; double xcdgf,xcdd,xcds,xcddeltaT,xcdgb; double xcsgf,xcsd,xcss,xcsdeltaT,xcsgb; double xcbgf,xcbd,xcbs,xcbdeltaT,xcbgb; double xcgbgf,xcgbd,xcgbs,xcgbdeltaT,xcgbgb; double capbd,capbs; /* diode capacitances */ double xcBJTbsbs,xcBJTbsdeltaT; double xcBJTbdbd,xcBJTbddeltaT; double rtargs[5]; double grt[5]; double ctargs[5]; double xct[5]; /* 1/reactance of thermal cap */ int tnodeindex; double cgfb0; double cgfd0; double cgfs0; double cgbb0; double cgbd0; double cgbs0; double EffectiveLength; double omega; double m; omega = ckt->CKTomega; for( ; model != NULL; model = SOI3nextModel(model)) { for(here = SOI3instances(model); here!= NULL; here = SOI3nextInstance(here)) { if (here->SOI3mode < 0) { xnrm=0; xrev=1; } else { xnrm=1; xrev=0; } EffectiveLength=here->SOI3l - 2*model->SOI3latDiff; /* JimB - can use basic device geometry to estimate front and back */ /* overlap capacitances to a first approximation. Use this default */ /* model if capacitance factors aren't given in model netlist. */ /* Calculate front gate overlap capacitances. */ if(model->SOI3frontGateSourceOverlapCapFactorGiven) { cgfs0 = model->SOI3frontGateSourceOverlapCapFactor * here->SOI3w; } else { cgfs0 = model->SOI3latDiff * here->SOI3w * model->SOI3frontOxideCapFactor; } if(model->SOI3frontGateDrainOverlapCapFactorGiven) { cgfd0 = model->SOI3frontGateDrainOverlapCapFactor * here->SOI3w; } else { cgfd0 = model->SOI3latDiff * here->SOI3w * model->SOI3frontOxideCapFactor; } if(model->SOI3frontGateBulkOverlapCapFactorGiven) { cgfb0 = model->SOI3frontGateBulkOverlapCapFactor * EffectiveLength; } else { cgfb0 = EffectiveLength * (0.1*1e-6*model->SOI3minimumFeatureSize) * model->SOI3frontOxideCapFactor; } /* Calculate back gate overlap capacitances. */ if( (model->SOI3backGateSourceOverlapCapAreaFactorGiven) && (!model->SOI3backGateSourceOverlapCapAreaFactor || here->SOI3asGiven) ) { cgbs0 = model->SOI3backGateSourceOverlapCapAreaFactor * here->SOI3as; } else { cgbs0 = (2*1e-6*model->SOI3minimumFeatureSize + model->SOI3latDiff) * here->SOI3w * model->SOI3backOxideCapFactor; } if( (model->SOI3backGateDrainOverlapCapAreaFactorGiven) && (!model->SOI3backGateDrainOverlapCapAreaFactor || here->SOI3adGiven) ) { cgbd0 = model->SOI3backGateDrainOverlapCapAreaFactor * here->SOI3ad; } else { cgbd0 = (2*1e-6*model->SOI3minimumFeatureSize + model->SOI3latDiff) * here->SOI3w * model->SOI3backOxideCapFactor; } if( (model->SOI3backGateBulkOverlapCapAreaFactorGiven) && (!model->SOI3backGateBulkOverlapCapAreaFactor || here->SOI3abGiven) ) { cgbb0 = model->SOI3backGateBulkOverlapCapAreaFactor * here->SOI3ab; } else { cgbb0 = EffectiveLength * (0.1*1e-6*model->SOI3minimumFeatureSize + here->SOI3w) * model->SOI3backOxideCapFactor; } capbd = here->SOI3capbd; capbs = here->SOI3capbs; cgfgf = *(ckt->CKTstate0 + here->SOI3cgfgf); cgfd = *(ckt->CKTstate0 + here->SOI3cgfd); cgfs = *(ckt->CKTstate0 + here->SOI3cgfs); cgfdeltaT = *(ckt->CKTstate0 + here->SOI3cgfdeltaT); cgfgb = *(ckt->CKTstate0 + here->SOI3cgfgb); csgf = *(ckt->CKTstate0 + here->SOI3csgf); csd = *(ckt->CKTstate0 + here->SOI3csd); css = *(ckt->CKTstate0 + here->SOI3css); csdeltaT = *(ckt->CKTstate0 + here->SOI3csdeltaT); csgb = *(ckt->CKTstate0 + here->SOI3csgb); cdgf = *(ckt->CKTstate0 + here->SOI3cdgf); cdd = *(ckt->CKTstate0 + here->SOI3cdd); cds = *(ckt->CKTstate0 + here->SOI3cds); cddeltaT = *(ckt->CKTstate0 + here->SOI3cddeltaT); cdgb = *(ckt->CKTstate0 + here->SOI3cdgb); cgbgf = *(ckt->CKTstate0 + here->SOI3cgbgf); cgbd = *(ckt->CKTstate0 + here->SOI3cgbd); cgbs = *(ckt->CKTstate0 + here->SOI3cgbs); cgbdeltaT = *(ckt->CKTstate0 + here->SOI3cgbdeltaT); cgbgb = *(ckt->CKTstate0 + here->SOI3cgbgb); cbgf = -(cgfgf + cdgf + csgf + cgbgf); cbd = -(cgfd + cdd + csd + cgbd); cbs = -(cgfs + cds + css + cgbs); cbdeltaT = -(cgfdeltaT + cddeltaT + csdeltaT + cgbdeltaT); cbgb = -(cgfgb + cdgb + csgb + cgbgb); xcgfgf = (cgfgf + cgfd0 + cgfs0 + cgfb0) * omega; xcgfd = (cgfd - cgfd0) * omega; xcgfs = (cgfs - cgfs0) * omega; xcgfdeltaT = cgfdeltaT * omega; xcgfgb = cgfgb * omega; xcdgf = (cdgf - cgfd0) * omega; xcdd = (cdd + capbd + cgfd0 + cgbd0) * omega; xcds = cds * omega; xcddeltaT = cddeltaT * omega; xcdgb = (cdgb - cgbd0) * omega; xcsgf = (csgf - cgfs0) * omega; xcsd = csd * omega; xcss = (css + capbs + cgfs0 + cgbs0) * omega; xcsdeltaT = csdeltaT * omega; xcsgb = (csgb - cgbs0) * omega; xcbgf = (cbgf - cgfb0) * omega; xcbd = (cbd - capbd) * omega; xcbs = (cbs - capbs) * omega; xcbdeltaT = cbdeltaT * omega; xcbgb = (cbgb - cgbb0) * omega; xcgbgf = cgbgf * omega; xcgbd = (cgbd - cgbd0) * omega; xcgbs = (cgbs - cgbs0) * omega; xcgbdeltaT = cgbdeltaT * omega; xcgbgb = (cgbgb + cgbd0 + cgbs0 + cgbb0) * omega; xcBJTbsbs = *(ckt->CKTstate0 + here->SOI3cBJTbsbs) * omega; xcBJTbsdeltaT = *(ckt->CKTstate0 + here->SOI3cBJTbsdeltaT) * omega; xcBJTbdbd = *(ckt->CKTstate0 + here->SOI3cBJTbdbd) * omega; xcBJTbddeltaT = *(ckt->CKTstate0 + here->SOI3cBJTbddeltaT) * omega; /* JimB - 15/9/99 */ /* Code for multiple thermal time constants. Start by moving all */ /* rt and ct constants into arrays. */ rtargs[0]=here->SOI3rt; rtargs[1]=here->SOI3rt1; rtargs[2]=here->SOI3rt2; rtargs[3]=here->SOI3rt3; rtargs[4]=here->SOI3rt4; ctargs[0]=here->SOI3ct; ctargs[1]=here->SOI3ct1; ctargs[2]=here->SOI3ct2; ctargs[3]=here->SOI3ct3; ctargs[4]=here->SOI3ct4; /* Set all admittance components to zero. */ grt[0]=grt[1]=grt[2]=grt[3]=grt[4]=0.0; xct[0]=xct[1]=xct[2]=xct[3]=xct[4]=0.0; /* Now calculate conductances and susceptances from rt and ct. */ /* Don't need to worry about divide by zero when calculating */ /* grt components, as soi3setup() only creates a thermal node */ /* if corresponding rt is greater than zero. */ for(tnodeindex=0;tnodeindexSOI3numThermalNodes;tnodeindex++) { xct[tnodeindex] = ctargs[tnodeindex] * ckt->CKTomega; grt[tnodeindex] = 1/rtargs[tnodeindex]; } /* End JimB */ /* * load matrix */ m = here->SOI3m; *(here->SOI3GF_gfPtr + 1) += m * xcgfgf; *(here->SOI3GF_gbPtr + 1) += m * xcgfgb; *(here->SOI3GF_dpPtr + 1) += m * xcgfd; *(here->SOI3GF_spPtr + 1) += m * xcgfs; *(here->SOI3GF_bPtr + 1) -= m * (xcgfgf + xcgfd + xcgfs + xcgfgb); *(here->SOI3GB_gfPtr + 1) += m * xcgbgf; *(here->SOI3GB_gbPtr + 1) += m * xcgbgb; *(here->SOI3GB_dpPtr + 1) += m * xcgbd; *(here->SOI3GB_spPtr + 1) += m * xcgbs; *(here->SOI3GB_bPtr + 1) -= m * (xcgbgf + xcgbd + xcgbs + xcgbgb); *(here->SOI3B_gfPtr + 1) += m * xcbgf; *(here->SOI3B_gbPtr + 1) += m * xcbgb; *(here->SOI3B_dpPtr + 1) += m * (xcbd-xcBJTbdbd); *(here->SOI3B_spPtr + 1) += m * (xcbs-xcBJTbsbs); *(here->SOI3B_bPtr + 1) += m * (-(xcbgf+xcbd+xcbs+xcbgb) +xcBJTbsbs+xcBJTbdbd); *(here->SOI3DP_gfPtr + 1) += m * xcdgf; *(here->SOI3DP_gbPtr + 1) += m * xcdgb; *(here->SOI3DP_dpPtr + 1) += m * (xcdd+xcBJTbdbd); *(here->SOI3DP_spPtr + 1) += m * xcds; *(here->SOI3DP_bPtr + 1) -= m * (xcdgf + xcdd + xcds + xcdgb + xcBJTbdbd); *(here->SOI3SP_gfPtr + 1) += m * xcsgf; *(here->SOI3SP_gbPtr + 1) += m * xcsgb; *(here->SOI3SP_dpPtr + 1) += m * xcsd; *(here->SOI3SP_spPtr + 1) += m * (xcss+xcBJTbsbs); *(here->SOI3SP_bPtr + 1) -= m * (xcsgf + xcsd + xcss + xcsgb + xcBJTbsbs); /* if no thermal behaviour specified, then put in zero valued indpt. voltage source between TOUT and ground */ if (here->SOI3rt==0) { *(here->SOI3TOUT_ibrPtr + 1) += m * 1.0; *(here->SOI3IBR_toutPtr + 1) += m * 1.0; *(ckt->CKTirhs + (here->SOI3branch)) = 0; } else { *(here->SOI3TOUT_toutPtr + 1) += m * xct[0]; if (here->SOI3numThermalNodes > 1) { *(here->SOI3TOUT_tout1Ptr + 1) += m * (-xct[0]); *(here->SOI3TOUT1_toutPtr + 1) += m * (-xct[0]); *(here->SOI3TOUT1_tout1Ptr + 1) += m * (xct[0]+xct[1]); } if (here->SOI3numThermalNodes > 2) { *(here->SOI3TOUT1_tout2Ptr + 1) += m * (-xct[1]); *(here->SOI3TOUT2_tout1Ptr + 1) += m * (-xct[1]); *(here->SOI3TOUT2_tout2Ptr + 1) += m * (xct[1]+xct[2]); } if (here->SOI3numThermalNodes > 3) { *(here->SOI3TOUT2_tout3Ptr + 1) += m * (-xct[2]); *(here->SOI3TOUT3_tout2Ptr + 1) += m * (-xct[2]); *(here->SOI3TOUT3_tout3Ptr + 1) += m * (xct[2]+xct[3]); } if (here->SOI3numThermalNodes > 4) { *(here->SOI3TOUT3_tout4Ptr + 1) += m * (-xct[3]); *(here->SOI3TOUT4_tout3Ptr + 1) += m * (-xct[3]); *(here->SOI3TOUT4_tout4Ptr + 1) += m * (xct[3]+xct[4]); } *(here->SOI3GF_toutPtr + 1) += m * xcgfdeltaT*model->SOI3type; *(here->SOI3DP_toutPtr + 1) += m * (xcddeltaT - xcBJTbddeltaT)*model->SOI3type; *(here->SOI3SP_toutPtr + 1) += m * (xcsdeltaT - xcBJTbsdeltaT)*model->SOI3type; *(here->SOI3B_toutPtr + 1) += m * model->SOI3type * (xcbdeltaT + xcBJTbsdeltaT + xcBJTbddeltaT); *(here->SOI3GB_toutPtr + 1) += m * xcgbdeltaT*model->SOI3type; } /* and now real part */ *(here->SOI3D_dPtr) += (m * here->SOI3drainConductance); *(here->SOI3D_dpPtr) += (m * (-here->SOI3drainConductance)); *(here->SOI3DP_dPtr) += (m * (-here->SOI3drainConductance)); *(here->SOI3S_sPtr) += (m * here->SOI3sourceConductance); *(here->SOI3S_spPtr) += (m * (-here->SOI3sourceConductance)); *(here->SOI3SP_sPtr) += (m * (-here->SOI3sourceConductance)); *(here->SOI3DP_gfPtr) += ((m * (xnrm-xrev)*here->SOI3gmf + xnrm*here->SOI3gMmf)); *(here->SOI3DP_gbPtr) += (m * ((xnrm-xrev)*here->SOI3gmb + xnrm*here->SOI3gMmb)); *(here->SOI3DP_dpPtr) += m * (here->SOI3drainConductance+here->SOI3gds+ here->SOI3gbd+xrev*(here->SOI3gmf+here->SOI3gmbs+ here->SOI3gmb)+xnrm*here->SOI3gMd); *(here->SOI3DP_spPtr) += m * (-here->SOI3gds - here->SOI3gBJTdb_bs -xnrm*(here->SOI3gmf+here->SOI3gmb+here->SOI3gmbs + here->SOI3gMmf+here->SOI3gMmb+here->SOI3gMmbs+here->SOI3gMd)); *(here->SOI3DP_bPtr) += m * (-here->SOI3gbd + here->SOI3gBJTdb_bs +(xnrm-xrev)*here->SOI3gmbs+ xnrm*here->SOI3gMmbs); *(here->SOI3SP_gfPtr) += m * (-(xnrm-xrev)*here->SOI3gmf+ xrev*here->SOI3gMmf); *(here->SOI3SP_gbPtr) += m * (-(xnrm-xrev)*here->SOI3gmb+ xrev*here->SOI3gMmb); *(here->SOI3SP_dpPtr) += m * (-here->SOI3gds - here->SOI3gBJTsb_bd -xrev*(here->SOI3gmf+here->SOI3gmb+here->SOI3gmbs+ here->SOI3gMmf+here->SOI3gMmb+here->SOI3gMmbs+here->SOI3gMd)); *(here->SOI3SP_spPtr) += m * (here->SOI3sourceConductance+here->SOI3gds+ here->SOI3gbs+xnrm*(here->SOI3gmf+here->SOI3gmbs+ here->SOI3gmb)+xrev*here->SOI3gMd); *(here->SOI3SP_bPtr) += m * (-here->SOI3gbs + here->SOI3gBJTsb_bd -(xnrm-xrev)*here->SOI3gmbs+ xrev*here->SOI3gMmbs); *(here->SOI3B_gfPtr) += m * (-here->SOI3gMmf); *(here->SOI3B_gbPtr) += m * (-here->SOI3gMmb); *(here->SOI3B_dpPtr) += m * (-(here->SOI3gbd) + here->SOI3gBJTsb_bd + xrev*(here->SOI3gMmf+here->SOI3gMmb+ here->SOI3gMmbs+here->SOI3gMd) - xnrm*here->SOI3gMd); *(here->SOI3B_spPtr) += m * (-(here->SOI3gbs) + here->SOI3gBJTdb_bs + xnrm*(here->SOI3gMmf+here->SOI3gMmb+ here->SOI3gMmbs+here->SOI3gMd) - xrev*here->SOI3gMd); *(here->SOI3B_bPtr) += m * (here->SOI3gbd+here->SOI3gbs - here->SOI3gMmbs - here->SOI3gBJTdb_bs - here->SOI3gBJTsb_bd); /* if no thermal behaviour specified, then put in zero valued indpt. voltage source between TOUT and ground */ if (here->SOI3rt==0) { *(here->SOI3TOUT_ibrPtr) += m * 1.0; *(here->SOI3IBR_toutPtr) += m * 1.0; *(ckt->CKTrhs + (here->SOI3branch)) = 0; } else { *(here->SOI3TOUT_toutPtr) += m * (-(here->SOI3gPdT)+grt[0]); if (here->SOI3numThermalNodes > 1) { *(here->SOI3TOUT_tout1Ptr) += m * (-grt[0]); *(here->SOI3TOUT1_toutPtr) += m * (-grt[0]); *(here->SOI3TOUT1_tout1Ptr) += m * (grt[0]+grt[1]); } if (here->SOI3numThermalNodes > 2) { *(here->SOI3TOUT1_tout2Ptr) += m * (-grt[1]); *(here->SOI3TOUT2_tout1Ptr) += m * (-grt[1]); *(here->SOI3TOUT2_tout2Ptr) += m * (grt[1]+grt[2]); } if (here->SOI3numThermalNodes > 3) { *(here->SOI3TOUT2_tout3Ptr) += m * (-grt[2]); *(here->SOI3TOUT3_tout2Ptr) += m * (-grt[2]); *(here->SOI3TOUT3_tout3Ptr) += m * (grt[2]+grt[3]); } if (here->SOI3numThermalNodes > 4) { *(here->SOI3TOUT3_tout4Ptr) += m * (-grt[3]); *(here->SOI3TOUT4_tout3Ptr) += m * (-grt[3]); *(here->SOI3TOUT4_tout4Ptr) += m * (grt[3]+grt[4]); } *(here->SOI3TOUT_dpPtr) += m * (xnrm*(-(here->SOI3gPds*model->SOI3type)) +xrev*(here->SOI3gPds+here->SOI3gPmf+ here->SOI3gPmb+here->SOI3gPmbs)* model->SOI3type); *(here->SOI3TOUT_gfPtr) += m * (-(here->SOI3gPmf*model->SOI3type)); *(here->SOI3TOUT_gbPtr) += m * (-(here->SOI3gPmb*model->SOI3type)); *(here->SOI3TOUT_bPtr) += m * (-(here->SOI3gPmbs*model->SOI3type)); *(here->SOI3TOUT_spPtr) += m * (xnrm*(here->SOI3gPds+here->SOI3gPmf+ here->SOI3gPmb+here->SOI3gPmbs)*model->SOI3type +xrev*(-(here->SOI3gPds*model->SOI3type))); *(here->SOI3DP_toutPtr) += m * (xnrm-xrev)*here->SOI3gt*model->SOI3type; *(here->SOI3SP_toutPtr) += m * (xrev-xnrm)*here->SOI3gt*model->SOI3type; /* need to mult by type in above as conductances will be used with exterior voltages which will be -ve for PMOS except for gPdT */ /* now for thermal influence on impact ionisation current and transient stuff */ *(here->SOI3DP_toutPtr) += m * (xnrm*here->SOI3gMdeltaT - here->SOI3gbdT + here->SOI3gBJTdb_deltaT)*model->SOI3type; *(here->SOI3SP_toutPtr) += m * (xrev*here->SOI3gMdeltaT - here->SOI3gbsT + here->SOI3gBJTsb_deltaT)*model->SOI3type; *(here->SOI3B_toutPtr) -= m * (here->SOI3gMdeltaT - here->SOI3gbsT - here->SOI3gbdT + here->SOI3gBJTdb_deltaT + here->SOI3gBJTsb_deltaT)*model->SOI3type; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/soi3/soi3init.h0000644000175000017500000000037013546075722021752 0ustar carstencarsten#ifndef _SOI3INIT_H #define _SOI3INIT_H extern IFparm SOI3pTable[ ]; extern IFparm SOI3mPTable[ ]; extern char *SOI3names[ ]; extern int SOI3pTSize; extern int SOI3mPTSize; extern int SOI3nSize; extern int SOI3iSize; extern int SOI3mSize; #endif tmpk8ny_4pz/src/spicelib/devices/soi3/soi3ext.h0000644000175000017500000000570613546075722021617 0ustar carstencarsten/********** STAG version 2.7 Copyright 2000 owned by the United Kingdom Secretary of State for Defence acting through the Defence Evaluation and Research Agency. Developed by : Jim Benson, Department of Electronics and Computer Science, University of Southampton, United Kingdom. With help from : Nele D'Halleweyn, Ketan Mistry, Bill Redman-White, and Craig Easson. Based on STAG version 2.1 Developed by : Mike Lee, With help from : Bernard Tenbroek, Bill Redman-White, Mike Uren, Chris Edwards and John Bunyan. Acknowledgements : Rupert Howes and Pete Mole. **********/ /********** Modified by Paolo Nenzi 2002 ngspice integration **********/ extern int SOI3acLoad(GENmodel *,CKTcircuit*); extern int SOI3ask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int SOI3getic(GENmodel*,CKTcircuit*); extern int SOI3load(GENmodel*,CKTcircuit*); extern int SOI3mAsk(CKTcircuit *,GENmodel *,int,IFvalue*); extern int SOI3mParam(int,IFvalue*,GENmodel*); extern void SOI3cap(double,double,double, double*,double*,double*,double*, double*,double*,double*,double*, double*,double*,double*,double*, double*,double*,double*,double*,double*, double*,double*,double*,double*,double*, double*,double*,double*,double*,double*, double*,double*,double*,double*,double*); extern void SOI3capEval(CKTcircuit*,double*,double*, double,double,double,double,double, double,double,double,double,double, double,double,double,double,double, double,double,double,double,double, double,double,double,double,double, double*,double*,double*,double*,double*, double*,double*,double*,double*,double*, double*,double*,double*,double*,double*, double*,double*,double*,double*,double*, double*,double*,double*,double*,double*, double*,double*,double*,double*,double*); extern int SOI3param(int,IFvalue*,GENinstance*,IFvalue*); /* extern int SOI3pzLoad(GENmodel*,CKTcircuit*,SPcomplex*); | extern int SOI3sAcLoad(GENmodel*,CKTcircuit*); | extern int SOI3sLoad(GENmodel*,CKTcircuit*); | Ignored extern void SOI3sPrint(GENmodel*,CKTcircuit*); | extern int SOI3sSetup(SENstruct*,GENmodel*); | extern int SOI3sUpdate(GENmodel*,CKTcircuit*); | */ extern int SOI3setup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int SOI3unsetup(GENmodel*,CKTcircuit*); extern int SOI3temp(GENmodel*,CKTcircuit*); extern int SOI3trunc(GENmodel*,CKTcircuit*,double*); extern int SOI3convTest(GENmodel*,CKTcircuit*); /* extern int SOI3disto(int,GENmodel*,CKTcircuit*); */ extern int SOI3noise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); tmpk8ny_4pz/src/spicelib/devices/soi3/soi3ask.c0000644000175000017500000005324213546075722021566 0ustar carstencarsten/********** STAG version 2.7 Copyright 2000 owned by the United Kingdom Secretary of State for Defence acting through the Defence Evaluation and Research Agency. Developed by : Jim Benson, Department of Electronics and Computer Science, University of Southampton, United Kingdom. With help from : Nele D'Halleweyn, Ketan Mistry, Bill Redman-White, and Craig Easson. Based on STAG version 2.1 Developed by : Mike Lee, With help from : Bernard Tenbroek, Bill Redman-White, Mike Uren, Chris Edwards and John Bunyan. Acknowledgements : Rupert Howes and Pete Mole. **********/ /********** Modified by Paolo Nenzi 2002 ngspice integration **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "soi3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int SOI3ask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { SOI3instance *here = (SOI3instance*)inst; NG_IGNORE(select); /* The line below belong to the parts of the case statement that are also * commented out */ /* double vr; */ /* double vi; */ /* double sr; */ /* double si; */ /* double vm; */ /* static char *msg = "Current and power not available for ac analysis"; */ switch(which) { case SOI3_L: value->rValue = here->SOI3l; return(OK); case SOI3_W: value->rValue = here->SOI3w; return(OK); case SOI3_M: value->rValue = here->SOI3m; return(OK); case SOI3_AS: value->rValue = here->SOI3as; return(OK); case SOI3_AD: value->rValue = here->SOI3ad; return(OK); case SOI3_AB: value->rValue = here->SOI3ab; return(OK); case SOI3_NRS: value->rValue = here->SOI3sourceSquares; return(OK); case SOI3_NRD: value->rValue = here->SOI3drainSquares; return(OK); case SOI3_OFF: value->rValue = here->SOI3off; return(OK); case SOI3_IC_VDS: value->rValue = here->SOI3icVDS; return(OK); case SOI3_IC_VGFS: value->rValue = here->SOI3icVGFS; return(OK); case SOI3_IC_VGBS: value->rValue = here->SOI3icVGBS; return(OK); case SOI3_IC_VBS: value->rValue = here->SOI3icVBS; return(OK); case SOI3_TEMP: value->rValue = here->SOI3temp-CONSTCtoK; return(OK); case SOI3_RT: value->rValue = here->SOI3rt; value->rValue /= here->SOI3m; return(OK); case SOI3_CT: value->rValue = here->SOI3ct; value->rValue *= here->SOI3m; return(OK); case SOI3_DNODE: value->iValue = here->SOI3dNode; return(OK); case SOI3_GFNODE: value->iValue = here->SOI3gfNode; return(OK); case SOI3_SNODE: value->iValue = here->SOI3sNode; return(OK); case SOI3_GBNODE: value->iValue = here->SOI3gbNode; return(OK); case SOI3_BNODE: value->iValue = here->SOI3bNode; return(OK); case SOI3_DNODEPRIME: value->iValue = here->SOI3dNodePrime; return(OK); case SOI3_SNODEPRIME: value->iValue = here->SOI3sNodePrime; return(OK); case SOI3_TNODE: value->iValue = here->SOI3toutNode; return(OK); case SOI3_BRANCH: value->iValue = here->SOI3branch; return(OK); case SOI3_SOURCECONDUCT: value->rValue = here->SOI3sourceConductance; value->rValue *= here->SOI3m; return(OK); case SOI3_DRAINCONDUCT: value->rValue = here->SOI3drainConductance; value->rValue *= here->SOI3m; return(OK); case SOI3_VON: value->rValue = here->SOI3tVto; return(OK); case SOI3_VFBF: value->rValue = here->SOI3tVfbF; return(OK); case SOI3_VDSAT: value->rValue = here->SOI3vdsat; return(OK); case SOI3_SOURCEVCRIT: value->rValue = here->SOI3sourceVcrit; return(OK); case SOI3_DRAINVCRIT: value->rValue = here->SOI3drainVcrit; return(OK); case SOI3_ID: value->rValue = here->SOI3id; value->rValue *= here->SOI3m; return(OK); case SOI3_IBS: value->rValue = here->SOI3ibs; value->rValue *= here->SOI3m; return(OK); case SOI3_IBD: value->rValue = here->SOI3ibd; value->rValue *= here->SOI3m; return(OK); case SOI3_GMBS: value->rValue = here->SOI3gmbs; value->rValue *= here->SOI3m; return(OK); case SOI3_GMF: value->rValue = here->SOI3gmf; value->rValue *= here->SOI3m; return(OK); case SOI3_GMB: value->rValue = here->SOI3gmb; value->rValue *= here->SOI3m; return(OK); case SOI3_GDS: value->rValue = here->SOI3gds; value->rValue *= here->SOI3m; return(OK); case SOI3_GBD: value->rValue = here->SOI3gbd; value->rValue *= here->SOI3m; return(OK); case SOI3_GBS: value->rValue = here->SOI3gbs; value->rValue *= here->SOI3m; return(OK); case SOI3_CAPBD: value->rValue = here->SOI3capbd; value->rValue *= here->SOI3m; return(OK); case SOI3_CAPBS: value->rValue = here->SOI3capbs; value->rValue *= here->SOI3m; return(OK); case SOI3_CAPZEROBIASBD: value->rValue = here->SOI3Cbd; value->rValue *= here->SOI3m; return(OK); case SOI3_CAPZEROBIASBS: value->rValue = here->SOI3Cbs; value->rValue *= here->SOI3m; return(OK); case SOI3_VBD: value->rValue = *(ckt->CKTstate0 + here->SOI3vbd); return(OK); case SOI3_VBS: value->rValue = *(ckt->CKTstate0 + here->SOI3vbs); return(OK); case SOI3_VGFS: value->rValue = *(ckt->CKTstate0 + here->SOI3vgfs); return(OK); case SOI3_VGBS: value->rValue = *(ckt->CKTstate0 + here->SOI3vgbs); return(OK); case SOI3_VDS: value->rValue = *(ckt->CKTstate0 + here->SOI3vds); return(OK); case SOI3_QGF: value->rValue = *(ckt->CKTstate0 + here->SOI3qgf); value->rValue *= here->SOI3m; return(OK); case SOI3_IQGF: value->rValue = *(ckt->CKTstate0 + here->SOI3iqgf); value->rValue *= here->SOI3m; return(OK); case SOI3_QD: value->rValue = *(ckt->CKTstate0 + here->SOI3qd); value->rValue *= here->SOI3m; return(OK); case SOI3_IQD: value->rValue = *(ckt->CKTstate0 + here->SOI3iqd); value->rValue *= here->SOI3m; return(OK); case SOI3_QS: value->rValue = *(ckt->CKTstate0 + here->SOI3qs); value->rValue *= here->SOI3m; return(OK); case SOI3_IQS: value->rValue = *(ckt->CKTstate0 + here->SOI3iqs); value->rValue *= here->SOI3m; return(OK); case SOI3_CGFGF: value->rValue = *(ckt->CKTstate0 + here->SOI3cgfgf); value->rValue *= here->SOI3m; return (OK); case SOI3_CGFD: value->rValue = *(ckt->CKTstate0 + here->SOI3cgfd); value->rValue *= here->SOI3m; return (OK); case SOI3_CGFS: value->rValue = *(ckt->CKTstate0 + here->SOI3cgfs); value->rValue *= here->SOI3m; return (OK); case SOI3_CGFDELTAT: value->rValue = *(ckt->CKTstate0 + here->SOI3cgfdeltaT); value->rValue *= here->SOI3m; return (OK); case SOI3_CGFGB: value->rValue = *(ckt->CKTstate0 + here->SOI3cgfgb); value->rValue *= here->SOI3m; return (OK); case SOI3_CDGF: value->rValue = *(ckt->CKTstate0 + here->SOI3cdgf); value->rValue *= here->SOI3m; return (OK); case SOI3_CDD: value->rValue = *(ckt->CKTstate0 + here->SOI3cdd); value->rValue *= here->SOI3m; return (OK); case SOI3_CDS: value->rValue = *(ckt->CKTstate0 + here->SOI3cds); value->rValue *= here->SOI3m; return (OK); case SOI3_CDDELTAT: value->rValue = *(ckt->CKTstate0 + here->SOI3cddeltaT); value->rValue *= here->SOI3m; return (OK); case SOI3_CDGB: value->rValue = *(ckt->CKTstate0 + here->SOI3cdgb); value->rValue *= here->SOI3m; return (OK); case SOI3_CSGF: value->rValue = *(ckt->CKTstate0 + here->SOI3csgf); value->rValue *= here->SOI3m; return (OK); case SOI3_CSD: value->rValue = *(ckt->CKTstate0 + here->SOI3csd); value->rValue *= here->SOI3m; return (OK); case SOI3_CSS: value->rValue = *(ckt->CKTstate0 + here->SOI3css); value->rValue *= here->SOI3m; return (OK); case SOI3_CSDELTAT: value->rValue = *(ckt->CKTstate0 + here->SOI3csdeltaT); value->rValue *= here->SOI3m; return (OK); case SOI3_CSGB: value->rValue = *(ckt->CKTstate0 + here->SOI3csgb); value->rValue *= here->SOI3m; return (OK); case SOI3_CGBGF: value->rValue = *(ckt->CKTstate0 + here->SOI3cgbgf); value->rValue *= here->SOI3m; return (OK); case SOI3_CGBD: value->rValue = *(ckt->CKTstate0 + here->SOI3cgbd); value->rValue *= here->SOI3m; return (OK); case SOI3_CGBS: value->rValue = *(ckt->CKTstate0 + here->SOI3cgbs); value->rValue *= here->SOI3m; return (OK); case SOI3_CGBDELTAT: value->rValue = *(ckt->CKTstate0 + here->SOI3cgbdeltaT); value->rValue *= here->SOI3m; return (OK); case SOI3_CGBGB: value->rValue = *(ckt->CKTstate0 + here->SOI3cgbgb); value->rValue *= here->SOI3m; return (OK); case SOI3_QBD: value->rValue = *(ckt->CKTstate0 + here->SOI3qbd); value->rValue *= here->SOI3m; return(OK); case SOI3_IQBD: value->rValue = *(ckt->CKTstate0 + here->SOI3iqbd); value->rValue *= here->SOI3m; return(OK); case SOI3_QBS: value->rValue = *(ckt->CKTstate0 + here->SOI3qbs); value->rValue *= here->SOI3m; return(OK); case SOI3_IQBS: value->rValue = *(ckt->CKTstate0 + here->SOI3iqbs); value->rValue *= here->SOI3m; return(OK); /* extra stuff for newer model - msll Jan96 */ case SOI3_VFBB: value->rValue = here->SOI3tVfbB; return(OK); case SOI3_RT1: value->rValue = here->SOI3rt1; value->rValue /= here->SOI3m; return(OK); case SOI3_CT1: value->rValue = here->SOI3ct1; value->rValue *= here->SOI3m; return(OK); case SOI3_RT2: value->rValue = here->SOI3rt2; value->rValue /= here->SOI3m; return(OK); case SOI3_CT2: value->rValue = here->SOI3ct2; value->rValue *= here->SOI3m; return(OK); case SOI3_RT3: value->rValue = here->SOI3rt3; value->rValue /= here->SOI3m; return(OK); case SOI3_CT3: value->rValue = here->SOI3ct3; value->rValue *= here->SOI3m; return(OK); case SOI3_RT4: value->rValue = here->SOI3rt4; value->rValue /= here->SOI3m; return(OK); case SOI3_CT4: value->rValue = here->SOI3ct4; value->rValue *= here->SOI3m; return(OK); /* case SOI3_L_SENS_DC: if(ckt->CKTsenInfo && here->SOI3sens_l){ value->rValue = *(ckt->CKTsenInfo->SEN_Sap[select->iValue + 1]+ here->SOI3senParmNo); } return(OK); case SOI3_L_SENS_REAL: if(ckt->CKTsenInfo && here->SOI3sens_l){ value->rValue = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->SOI3senParmNo); } return(OK); case SOI3_L_SENS_IMAG: if(ckt->CKTsenInfo && here->SOI3sens_l){ value->rValue = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->SOI3senParmNo); } return(OK); case SOI3_L_SENS_MAG: if(ckt->CKTsenInfo && here->SOI3sens_l){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = sqrt(vr*vr + vi*vi); if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->SOI3senParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->SOI3senParmNo); value->rValue = (vr * sr + vi * si)/vm; } return(OK); case SOI3_L_SENS_PH: if(ckt->CKTsenInfo && here->SOI3sens_l){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = vr*vr + vi*vi; if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->SOI3senParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->SOI3senParmNo); value->rValue = (vr * si - vi * sr)/vm; } return(OK); case SOI3_L_SENS_CPLX: if(ckt->CKTsenInfo && here->SOI3sens_l){ value->cValue.real= *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->SOI3senParmNo); value->cValue.imag= *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->SOI3senParmNo); } return(OK); case SOI3_W_SENS_DC: if(ckt->CKTsenInfo && here->SOI3sens_w){ value->rValue = *(ckt->CKTsenInfo->SEN_Sap[select->iValue + 1]+ here->SOI3senParmNo + here->SOI3sens_l); } return(OK); case SOI3_W_SENS_REAL: if(ckt->CKTsenInfo && here->SOI3sens_w){ value->rValue = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->SOI3senParmNo + here->SOI3sens_l); } return(OK); case SOI3_W_SENS_IMAG: if(ckt->CKTsenInfo && here->SOI3sens_w){ value->rValue = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->SOI3senParmNo + here->SOI3sens_l); } return(OK); case SOI3_W_SENS_MAG: if(ckt->CKTsenInfo && here->SOI3sens_w){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = sqrt(vr*vr + vi*vi); if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->SOI3senParmNo + here->SOI3sens_l); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->SOI3senParmNo + here->SOI3sens_l); value->rValue = (vr * sr + vi * si)/vm; } return(OK); case SOI3_W_SENS_PH: if(ckt->CKTsenInfo && here->SOI3sens_w){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = vr*vr + vi*vi; if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->SOI3senParmNo + here->SOI3sens_l); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->SOI3senParmNo + here->SOI3sens_l); value->rValue = (vr * si - vi * sr)/vm; } return(OK); case SOI3_W_SENS_CPLX: if(ckt->CKTsenInfo && here->SOI3sens_w){ value->cValue.real= *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->SOI3senParmNo + here->SOI3sens_l); value->cValue.imag= *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->SOI3senParmNo + here->SOI3sens_l); } return(OK); */ /* case SOI3_IS : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "SOI3ask.c"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = -here->SOI3id; value->rValue -= here->SOI3ibd + here->SOI3ibs - *(ckt->CKTstate0 + here->SOI3iqgfb); if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { value->rValue -= *(ckt->CKTstate0 + here->SOI3iqgfb) + *(ckt->CKTstate0 + here->SOI3iqgfd) + *(ckt->CKTstate0 + here->SOI3iqgfs); } } return(OK); case SOI3_IB : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "SOI3ask.c"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = here->SOI3ibd + here->SOI3ibs - *(ckt->CKTstate0 + here->SOI3iqgfb); } return(OK); case SOI3_IGF : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "SOI3ask.c"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else if (ckt->CKTcurrentAnalysis & (DOING_DCOP | DOING_TRCV)) { value->rValue = 0; } else if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && (ckt->CKTmode & MODETRANOP)) { value->rValue = 0; } else { value->rValue = *(ckt->CKTstate0 + here->SOI3iqgfb) + *(ckt->CKTstate0 + here->SOI3iqgfd) + *(ckt->CKTstate0 + here->SOI3iqgfs); } return(OK); case SOI3_IGB : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "SOI3ask.c"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else if (ckt->CKTcurrentAnalysis & (DOING_DCOP | DOING_TRCV)) { value->rValue = 0; } else if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && (ckt->CKTmode & MODETRANOP)) { value->rValue = 0; } else { value->rValue = *(ckt->CKTstate0 + here->SOI3iqgfb) + *(ckt->CKTstate0 + here->SOI3iqgfd) + *(ckt->CKTstate0 + here->SOI3iqgfs); } return(OK); case SOI3_POWER : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "SOI3ask.c"; strcpy(errMsg,msg); return(E_ASKPOWER); } else { double temp; value->rValue = here->SOI3id * *(ckt->CKTrhsOld + here->SOI3dNode); value->rValue += ((here->SOI3ibd + here->SOI3ibs) - *(ckt->CKTstate0 + here->SOI3iqgfb)) * *(ckt->CKTrhsOld + here->SOI3bNode); if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { value->rValue += (*(ckt->CKTstate0 + here->SOI3iqgfb) + *(ckt->CKTstate0 + here->SOI3iqgfd) + *(ckt->CKTstate0 + here->SOI3iqgfs)) * *(ckt->CKTrhsOld + here->SOI3gfNode); } temp = -here->SOI3id; temp -= here->SOI3ibd + here->SOI3ibs ; if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { temp -= *(ckt->CKTstate0 + here->SOI3iqgfb) + *(ckt->CKTstate0 + here->SOI3iqgfd) + *(ckt->CKTstate0 + here->SOI3iqgfs); } value->rValue += temp * *(ckt->CKTrhsOld + here->SOI3sNode); } return(OK); */ default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/soi3/soi3load.c0000644000175000017500000034326013546075722021731 0ustar carstencarsten/********** STAG version 2.7 Copyright 2000 owned by the United Kingdom Secretary of State for Defence acting through the Defence Evaluation and Research Agency. Developed by : Jim Benson, Department of Electronics and Computer Science, University of Southampton, United Kingdom. With help from : Nele D'Halleweyn, Ketan Mistry, Bill Redman-White, and Craig Easson. Based on STAG version 2.1 Developed by : Mike Lee, With help from : Bernard Tenbroek, Bill Redman-White, Mike Uren, Chris Edwards and John Bunyan. Acknowledgements : Rupert Howes and Pete Mole. **********/ /********** Modified by Paolo Nenzi 2002 ngspice integration **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "soi3defs.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" extern double DEVsoipnjlim(double, double, double, double, int *); int SOI3load(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current value into the * sparse matrix previously provided */ { SOI3model *model = (SOI3model *) inModel; SOI3instance *here; double Beta; double DrainSatCur; /* for drain pn junction */ double SourceSatCur; /* for source pn junction */ double DrainSatCur1; /* for 2nd drain pn junction */ double SourceSatCur1; /* for 2nd source pn junction */ double EffectiveLength,logL; double FrontGateBulkOverlapCap; double FrontGateDrainOverlapCap; double FrontGateSourceOverlapCap; double BackGateBulkOverlapCap; double BackGateDrainOverlapCap; double BackGateSourceOverlapCap; double Frontcapargs[6]; double Backcapargs[6]; double FrontOxideCap; double BackOxideCap; double arg; double ibhat; double idhat; double iPthat; /* needed for convergence */ double ieqPt; /* value of equivalent current source */ double idrain; double idreq; double ieq; double ieqct,ieqct1,ieqct2,ieqct3,ieqct4; double ieqbd; double ieqbs; double iMdbeq; double iMsbeq; double iBJTdbeq; double iBJTsbeq; double delvbd; double delvbs; double delvds; double delvgfd; double delvgfs; double delvgbd; double delvgbs; double deldeltaT; double evbd,evbd1; double evbs,evbs1; double rtargs[5]; double grt[5]; double gct[5]; int tnodeindex; double geq; double sarg; double vbd; double vbs; double vds; /* the next lot are so we can cast the problem with the body node as ref */ double vsb; double vdb; double vgbb; /* now back to our regular programming */ /* vgfb exists already for gate cap calc */ double deltaT,deltaT1 = 0.0,deltaT2 = 0.0,deltaT3 = 0.0; double deltaT4 = 0.0,deltaT5 = 0.0; double vdsat_ext; double vgfb; double vgfd; double vgbd; double vgfdo; double vgbdo; double vgfs; double vgbs; double von; double vt; #ifndef PREDICTOR double xfact; #endif int xnrm; int xrev; /* now stuff needed for new charge model */ double paramargs[10]; double Bfargs[2],alpha_args[5]; double psi_st0args[5]; double vGTargs[5]; double psi_sLargs[5],psi_s0args[5]; double ldargs[5]; double qgatef,qdrn,qsrc,qbody,qgateb; double ieqqgf,ieqqd,ieqqs,ieqqgb; double cgfgf,cgfd,cgfs,cgfdeltaT,cgfgb; double cdgf,cdd,cds,cddeltaT,cdgb; double csgf,csd,css,csdeltaT,csgb; double cbgf,cbd,cbs,cbdeltaT,cbgb; double cgbgf,cgbd,cgbs,cgbdeltaT,cgbgb; double gcgfgf,gcgfd,gcgfs,gcgfdeltaT,gcgfgb; double gcdgf,gcdd,gcds,gcddeltaT,gcdgb; double gcsgf,gcsd,gcss,gcsdeltaT,gcsgb; double gcbgf,gcbd,gcbs,gcbdeltaT,gcbgb; double gcgbgf,gcgbd,gcgbs,gcgbdeltaT,gcgbgb; double alphaBJT; double tauFBJTeff,tauRBJTeff; double ISts,IS1ts,IStd,IS1td; double ieqqBJTbs,ieqqBJTbd; double gcBJTbsbs,gcBJTbsdeltaT; double gcBJTbdbd,gcBJTbddeltaT; double ag0; int Check; int ByPass; #ifndef NOBYPASS double tempv; #endif /*NOBYPASS*/ int error; #ifdef CAPBYPASS int senflag; #endif /* CAPBYPASS */ double m; for( ; model != NULL; model = SOI3nextModel(model)) { /* loop through all the instances of the model */ for (here = SOI3instances(model); here != NULL ; here=SOI3nextInstance(here)) { vt = CONSTKoverQ * here->SOI3temp; Check=1; ByPass=0; /* first, we compute a few useful values - these could be * pre-computed, but for historical reasons are still done * here. They may be moved at the expense of instance size */ EffectiveLength=here->SOI3l - 2*model->SOI3latDiff; logL = log(EffectiveLength); if (here->SOI3tSatCurDens == 0) { DrainSatCur = here->SOI3tSatCur; SourceSatCur = here->SOI3tSatCur; } else { DrainSatCur = here->SOI3tSatCurDens * here->SOI3w; SourceSatCur = here->SOI3tSatCurDens * here->SOI3w; } if (here->SOI3tSatCurDens1 == 0) { DrainSatCur1 = here->SOI3tSatCur1; SourceSatCur1 = here->SOI3tSatCur1; } else { DrainSatCur1 = here->SOI3tSatCurDens1 * here->SOI3w; SourceSatCur1 = here->SOI3tSatCurDens1 * here->SOI3w; } /* NB Junction sat. cur. density is NOW PER UNIT WIDTH */ /* JimB - can use basic device geometry to estimate front and back */ /* overlap capacitances to a first approximation. Use this default */ /* model if capacitance factors aren't given in model netlist. */ /* Calculate front gate overlap capacitances. */ if(model->SOI3frontGateSourceOverlapCapFactorGiven) { FrontGateSourceOverlapCap = model->SOI3frontGateSourceOverlapCapFactor * here->SOI3w; } else { FrontGateSourceOverlapCap = model->SOI3latDiff * here->SOI3w * model->SOI3frontOxideCapFactor; } if(model->SOI3frontGateDrainOverlapCapFactorGiven) { FrontGateDrainOverlapCap = model->SOI3frontGateDrainOverlapCapFactor * here->SOI3w; } else { FrontGateDrainOverlapCap = model->SOI3latDiff * here->SOI3w * model->SOI3frontOxideCapFactor; } if(model->SOI3frontGateBulkOverlapCapFactorGiven) { FrontGateBulkOverlapCap = model->SOI3frontGateBulkOverlapCapFactor * EffectiveLength; } else { FrontGateBulkOverlapCap = EffectiveLength * (0.1*1e-6*model->SOI3minimumFeatureSize) * model->SOI3frontOxideCapFactor; } /* Calculate back gate overlap capacitances. */ if( (model->SOI3backGateSourceOverlapCapAreaFactorGiven) && (!model->SOI3backGateSourceOverlapCapAreaFactor || here->SOI3asGiven) ) { BackGateSourceOverlapCap = model->SOI3backGateSourceOverlapCapAreaFactor * here->SOI3as; } else { BackGateSourceOverlapCap = (2*1e-6*model->SOI3minimumFeatureSize + model->SOI3latDiff) * here->SOI3w * model->SOI3backOxideCapFactor; } if( (model->SOI3backGateDrainOverlapCapAreaFactorGiven) && (!model->SOI3backGateDrainOverlapCapAreaFactor || here->SOI3adGiven) ) { BackGateDrainOverlapCap = model->SOI3backGateDrainOverlapCapAreaFactor * here->SOI3ad; } else { BackGateDrainOverlapCap = (2*1e-6*model->SOI3minimumFeatureSize + model->SOI3latDiff) * here->SOI3w * model->SOI3backOxideCapFactor; } if( (model->SOI3backGateBulkOverlapCapAreaFactorGiven) && (!model->SOI3backGateBulkOverlapCapAreaFactor || here->SOI3abGiven) ) { BackGateBulkOverlapCap = model->SOI3backGateBulkOverlapCapAreaFactor * here->SOI3ab; } else { BackGateBulkOverlapCap = EffectiveLength * (0.1*1e-6*model->SOI3minimumFeatureSize + here->SOI3w) * model->SOI3backOxideCapFactor; } Beta = here->SOI3tTransconductance * here->SOI3w/EffectiveLength; /* reset mu_eff to ambient temp value in SI units */ here->SOI3ueff = here->SOI3tTransconductance/ model->SOI3frontOxideCapFactor; FrontOxideCap = model->SOI3frontOxideCapFactor * EffectiveLength * here->SOI3w; BackOxideCap = model->SOI3backOxideCapFactor * EffectiveLength * here->SOI3w; /* * ok - now to do the start-up operations * * we must get values for vbs, vds, vgfs and vgbs from somewhere * so we either predict them or recover them from last iteration * These are the two most common cases - either a prediction * step or the general iteration step and they * share some code, so we put them first - others later on */ /* yeah, but we'll then use vsb and vdb for the real work */ /* we will use conventional voltages to save * * work rewriting the convergence criteria */ if((ckt->CKTmode & (MODEINITFLOAT | MODEINITPRED | MODEINITSMSIG | MODEINITTRAN)) || ( (ckt->CKTmode & MODEINITFIX) && (!here->SOI3off) ) ) { #ifndef PREDICTOR if(ckt->CKTmode & (MODEINITPRED | MODEINITTRAN) ) { /* predictor step */ xfact=ckt->CKTdelta/ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->SOI3vbs) = *(ckt->CKTstate1 + here->SOI3vbs); vbs = (1+xfact)* (*(ckt->CKTstate1 + here->SOI3vbs)) -(xfact * (*(ckt->CKTstate2 + here->SOI3vbs))); *(ckt->CKTstate0 + here->SOI3vgfs) = *(ckt->CKTstate1 + here->SOI3vgfs); vgfs = (1+xfact)* (*(ckt->CKTstate1 + here->SOI3vgfs)) -(xfact * (*(ckt->CKTstate2 + here->SOI3vgfs))); *(ckt->CKTstate0 + here->SOI3vgbs) = *(ckt->CKTstate1 + here->SOI3vgbs); vgbs = (1+xfact)* (*(ckt->CKTstate1 + here->SOI3vgbs)) -(xfact * (*(ckt->CKTstate2 + here->SOI3vgbs))); *(ckt->CKTstate0 + here->SOI3vds) = *(ckt->CKTstate1 + here->SOI3vds); vds = (1+xfact)* (*(ckt->CKTstate1 + here->SOI3vds)) -(xfact * (*(ckt->CKTstate2 + here->SOI3vds))); *(ckt->CKTstate0 + here->SOI3vbd) = *(ckt->CKTstate0 + here->SOI3vbs)- *(ckt->CKTstate0 + here->SOI3vds); *(ckt->CKTstate0 + here->SOI3deltaT) = *(ckt->CKTstate1 + here->SOI3deltaT); deltaT = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT)) -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT)))); /* need to stop deltaT being -ve */ /* JimB - 19/5/99 */ if (here->SOI3numThermalNodes == 0) { deltaT1=deltaT2=deltaT3=deltaT4=deltaT5=0.0; } if (here->SOI3numThermalNodes == 1) { deltaT1=deltaT; deltaT2=deltaT3=deltaT4=deltaT5=0.0; } if (here->SOI3numThermalNodes == 2) { deltaT1 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT1)) -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT1)))); deltaT2 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT2)) -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT2)))); deltaT3=deltaT4=deltaT5=0.0; } if (here->SOI3numThermalNodes == 3) { deltaT1 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT1)) -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT1)))); deltaT2 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT2)) -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT2)))); deltaT3 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT3)) -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT3)))); deltaT4=deltaT5=0.0; } if (here->SOI3numThermalNodes == 4) { deltaT1 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT1)) -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT1)))); deltaT2 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT2)) -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT2)))); deltaT3 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT3)) -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT3)))); deltaT4 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT4)) -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT4)))); deltaT5=0.0; } if (here->SOI3numThermalNodes == 5) { deltaT1 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT1)) -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT1)))); deltaT2 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT2)) -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT2)))); deltaT3 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT3)) -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT3)))); deltaT4 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT4)) -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT4)))); deltaT5 =MAX(0,deltaT-deltaT1-deltaT2-deltaT3-deltaT4); } *(ckt->CKTstate0 + here->SOI3idrain) = *(ckt->CKTstate1 + here->SOI3idrain); *(ckt->CKTstate0 + here->SOI3cgfgf) = *(ckt->CKTstate1 + here->SOI3cgfgf); *(ckt->CKTstate0 + here->SOI3cgfd) = *(ckt->CKTstate1 + here->SOI3cgfd); *(ckt->CKTstate0 + here->SOI3cgfs) = *(ckt->CKTstate1 + here->SOI3cgfs); *(ckt->CKTstate0 + here->SOI3cgfdeltaT) = *(ckt->CKTstate1 + here->SOI3cgfdeltaT); *(ckt->CKTstate0 + here->SOI3cgfgb) = *(ckt->CKTstate1 + here->SOI3cgfgb); *(ckt->CKTstate0 + here->SOI3csgf) = *(ckt->CKTstate1 + here->SOI3csgf); *(ckt->CKTstate0 + here->SOI3csd) = *(ckt->CKTstate1 + here->SOI3csd); *(ckt->CKTstate0 + here->SOI3css) = *(ckt->CKTstate1 + here->SOI3css); *(ckt->CKTstate0 + here->SOI3csdeltaT) = *(ckt->CKTstate1 + here->SOI3csdeltaT); *(ckt->CKTstate0 + here->SOI3csgb) = *(ckt->CKTstate1 + here->SOI3csgb); *(ckt->CKTstate0 + here->SOI3cdgf) = *(ckt->CKTstate1 + here->SOI3cdgf); *(ckt->CKTstate0 + here->SOI3cdd) = *(ckt->CKTstate1 + here->SOI3cdd); *(ckt->CKTstate0 + here->SOI3cds) = *(ckt->CKTstate1 + here->SOI3cds); *(ckt->CKTstate0 + here->SOI3cddeltaT) = *(ckt->CKTstate1 + here->SOI3cddeltaT); *(ckt->CKTstate0 + here->SOI3cdgb) = *(ckt->CKTstate1 + here->SOI3cdgb); *(ckt->CKTstate0 + here->SOI3cgbgf) = *(ckt->CKTstate1 + here->SOI3cgbgf); *(ckt->CKTstate0 + here->SOI3cgbd) = *(ckt->CKTstate1 + here->SOI3cgbd); *(ckt->CKTstate0 + here->SOI3cgbs) = *(ckt->CKTstate1 + here->SOI3cgbs); *(ckt->CKTstate0 + here->SOI3cgbdeltaT) = *(ckt->CKTstate1 + here->SOI3cgbdeltaT); *(ckt->CKTstate0 + here->SOI3cgbgb) = *(ckt->CKTstate1 + here->SOI3cgbgb); *(ckt->CKTstate0 + here->SOI3cBJTbsbs) = *(ckt->CKTstate1 + here->SOI3cBJTbsbs); *(ckt->CKTstate0 + here->SOI3cBJTbsdeltaT) = *(ckt->CKTstate1 + here->SOI3cBJTbsdeltaT); *(ckt->CKTstate0 + here->SOI3cBJTbdbd) = *(ckt->CKTstate1 + here->SOI3cBJTbdbd); *(ckt->CKTstate0 + here->SOI3cBJTbddeltaT) = *(ckt->CKTstate1 + here->SOI3cBJTbddeltaT); } else { #endif /* PREDICTOR */ /* general iteration */ vbs = model->SOI3type * ( *(ckt->CKTrhsOld+here->SOI3bNode) - *(ckt->CKTrhsOld+here->SOI3sNodePrime)); vgfs = model->SOI3type * ( *(ckt->CKTrhsOld+here->SOI3gfNode) - *(ckt->CKTrhsOld+here->SOI3sNodePrime)); vgbs = model->SOI3type * ( *(ckt->CKTrhsOld+here->SOI3gbNode) - *(ckt->CKTrhsOld+here->SOI3sNodePrime)); vds = model->SOI3type * ( *(ckt->CKTrhsOld+here->SOI3dNodePrime) - *(ckt->CKTrhsOld+here->SOI3sNodePrime)); deltaT = MAX(0,*(ckt->CKTrhsOld+here->SOI3toutNode)); /* voltage deltaT is V(tout) wrt ground and shoule be positive */ /* the next lot are needed for the (extra) thermal capacitances */ /* JimB - 19/5/99 */ if (here->SOI3numThermalNodes == 0) { deltaT1=deltaT2=deltaT3=deltaT4=deltaT5=0; } if (here->SOI3numThermalNodes == 1) { deltaT1=deltaT; deltaT2=deltaT3=deltaT4=deltaT5=0; } if (here->SOI3numThermalNodes == 2) { deltaT2 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout1Node)); deltaT1 = deltaT - deltaT2; deltaT3=deltaT4=deltaT5=0; } if (here->SOI3numThermalNodes == 3) { deltaT3 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout2Node)); deltaT2 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout1Node) - deltaT3); deltaT1 = deltaT - deltaT2 - deltaT3; deltaT4=deltaT5=0; } if (here->SOI3numThermalNodes == 4) { deltaT4 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout3Node)); deltaT3 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout2Node) - deltaT4); deltaT2 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout1Node) - deltaT3 - deltaT4); deltaT1 = deltaT - deltaT2 - deltaT3 - deltaT4; deltaT5=0; } if (here->SOI3numThermalNodes == 5) { deltaT5 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout4Node)); deltaT4 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout3Node) - deltaT5); deltaT3 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout2Node) - deltaT4 - deltaT5); deltaT2 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout1Node) - deltaT3 - deltaT4 - deltaT5); deltaT1 = deltaT - deltaT2 - deltaT3 - deltaT4 - deltaT5; } #ifndef PREDICTOR } #endif /* PREDICTOR */ /* now some common crunching for some more useful quantities */ /* bloody useful in our case */ vbd=vbs-vds; vdb=-vbd; vsb=-vbs; vgfd=vgfs-vds; vgbd=vgbs-vds; vgbb=vgbs-vbs; vgfdo = *(ckt->CKTstate0 + here->SOI3vgfs) - *(ckt->CKTstate0 + here->SOI3vds); vgbdo = *(ckt->CKTstate0 + here->SOI3vgbs) - *(ckt->CKTstate0 + here->SOI3vds); delvbs = vbs - *(ckt->CKTstate0 + here->SOI3vbs); delvbd = vbd - *(ckt->CKTstate0 + here->SOI3vbd); delvgfs = vgfs - *(ckt->CKTstate0 + here->SOI3vgfs); delvgbs = vgbs - *(ckt->CKTstate0 + here->SOI3vgbs); delvds = vds - *(ckt->CKTstate0 + here->SOI3vds); delvgfd = vgfd-vgfdo; delvgbd = vgbd-vgbdo; deldeltaT = deltaT - *(ckt->CKTstate0 + here->SOI3deltaT); /* these are needed for convergence testing */ /* we're keeping these the same as convergence on vgfs, vbs, vbd, vgbs, deltaT is equiv to conv. on vgfb, vsb, vdb, vgb_b, deltaT */ if (here->SOI3mode >= 0) { /* normal */ idhat= here->SOI3id- here->SOI3gbd * delvbd - here->SOI3gbdT * deldeltaT + /* for -ibd bit of id */ (here->SOI3gmbs + here->SOI3gMmbs) * delvbs + (here->SOI3gmf + here->SOI3gMmf) * delvgfs + (here->SOI3gmb + here->SOI3gMmb) * delvgbs + (here->SOI3gds + here->SOI3gMd) * delvds + (here->SOI3gt + here->SOI3gMdeltaT) * deldeltaT + here->SOI3gBJTdb_bs * delvbs + here->SOI3gBJTdb_deltaT * deldeltaT; ibhat= here->SOI3ibs + here->SOI3ibd + here->SOI3gbd * delvbd + here->SOI3gbdT * deldeltaT + here->SOI3gbs * delvbs + here->SOI3gbsT * deldeltaT - here->SOI3iMdb - here->SOI3gMmbs * delvbs - here->SOI3gMmf * delvgfs - here->SOI3gMmb * delvgbs - here->SOI3gMd * delvds - here->SOI3gMdeltaT * deldeltaT - here->SOI3iBJTsb - here->SOI3gBJTsb_bd * delvbd - here->SOI3gBJTsb_deltaT * deldeltaT - here->SOI3iBJTdb - here->SOI3gBJTdb_bs * delvbs - here->SOI3gBJTdb_deltaT * deldeltaT; } else { /* A over T */ idhat= here->SOI3id - ( here->SOI3gbd + here->SOI3gmbs) * delvbd - (here->SOI3gmf) * delvgfd - (here->SOI3gmb) * delvgbd + (here->SOI3gds) * delvds - (here->SOI3gt + here->SOI3gbdT) * deldeltaT + here->SOI3gBJTdb_bs * delvbs + here->SOI3gBJTdb_deltaT * deldeltaT; ibhat= here->SOI3ibs + here->SOI3ibd + here->SOI3gbd * delvbd + here->SOI3gbdT * deldeltaT + here->SOI3gbs * delvbs + here->SOI3gbsT * deldeltaT - here->SOI3iMsb - here->SOI3gMmbs * delvbd - here->SOI3gMmf * delvgfd - here->SOI3gMmb * delvgbd + here->SOI3gMd * delvds - /* gMd should go with vsd */ here->SOI3gMdeltaT * deldeltaT - here->SOI3iBJTsb - here->SOI3gBJTsb_bd * delvbd - here->SOI3gBJTsb_deltaT * deldeltaT - here->SOI3iBJTdb - here->SOI3gBJTdb_bs * delvbs - here->SOI3gBJTdb_deltaT * deldeltaT; } /* thermal current source comparator */ iPthat =here->SOI3iPt + here->SOI3gPmbs * delvbs + here->SOI3gPmf * delvgfs + here->SOI3gPmb * delvgbs + here->SOI3gPds * delvds * here->SOI3mode + here->SOI3gPdT * deldeltaT; #ifndef NOBYPASS /* now lets see if we can bypass (ugh) */ /* the following mess should be one if statement, but * many compilers can't handle it all at once, so it * is split into several successive if statements */ /* bypass just needs to check any four voltages have not changed so leave as before to avoid hassle */ tempv = MAX(fabs(ibhat),fabs(here->SOI3ibs + here->SOI3ibd-here->SOI3iMsb - here->SOI3iMdb - here->SOI3iBJTdb - here->SOI3iBJTsb))+ckt->CKTabstol; if((!(ckt->CKTmode & (MODEINITPRED|MODEINITTRAN|MODEINITSMSIG) )) && (ckt->CKTbypass) ) if ( (fabs(ibhat-(here->SOI3ibs + here->SOI3ibd-here->SOI3iMdb - here->SOI3iMsb - here->SOI3iBJTdb - here->SOI3iBJTsb)) < ckt->CKTreltol * tempv)) if( (fabs(delvbs) < (ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->SOI3vbs)))+ ckt->CKTvoltTol))) if ( (fabs(delvbd) < (ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0+here->SOI3vbd)))+ ckt->CKTvoltTol)) ) if( (fabs(delvgfs) < (ckt->CKTreltol * MAX(fabs(vgfs), fabs(*(ckt->CKTstate0+here->SOI3vgfs)))+ ckt->CKTvoltTol))) if( (fabs(delvgbs) < (ckt->CKTreltol * MAX(fabs(vgbs), fabs(*(ckt->CKTstate0+here->SOI3vgbs)))+ ckt->CKTvoltTol))) if ( (fabs(delvds) < (ckt->CKTreltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0+here->SOI3vds)))+ ckt->CKTvoltTol)) ) if ( (fabs(deldeltaT) < (ckt->CKTreltol * MAX(fabs(deltaT), fabs(*(ckt->CKTstate0+here->SOI3deltaT)))+ ckt->CKTvoltTol)) ) if( (fabs(iPthat- here->SOI3iPt) < ckt->CKTreltol * MAX(fabs(iPthat),fabs( here->SOI3iPt)) + ckt->CKTabstol) ) if( (fabs(idhat- here->SOI3id) < ckt->CKTreltol * MAX(fabs(idhat),fabs( here->SOI3id)) + ckt->CKTabstol) ) { /* bypass code */ /* nothing interesting has changed since last * iteration on this device, so we just * copy all the values computed last iteration out * and keep going */ vbs = *(ckt->CKTstate0 + here->SOI3vbs); vbd = *(ckt->CKTstate0 + here->SOI3vbd); vgfs = *(ckt->CKTstate0 + here->SOI3vgfs); vgbs = *(ckt->CKTstate0 + here->SOI3vgbs); vds = *(ckt->CKTstate0 + here->SOI3vds); deltaT = *(ckt->CKTstate0 + here->SOI3deltaT); deltaT1 = *(ckt->CKTstate0 + here->SOI3deltaT1); deltaT2 = *(ckt->CKTstate0 + here->SOI3deltaT2); deltaT3 = *(ckt->CKTstate0 + here->SOI3deltaT3); deltaT4 = *(ckt->CKTstate0 + here->SOI3deltaT4); deltaT5 = *(ckt->CKTstate0 + here->SOI3deltaT5); /* and now the extra ones */ vsb=-vbs; vdb=-vbd; vgfb = vgfs - vbs; vgbb = vgbs - vbs; /* JimB - 15/9/99 */ /* Code for multiple thermal time constants. Start by moving all */ /* rt constants into arrays. */ rtargs[0]=here->SOI3rt; rtargs[1]=here->SOI3rt1; rtargs[2]=here->SOI3rt2; rtargs[3]=here->SOI3rt3; rtargs[4]=here->SOI3rt4; /* Set all conductance components to zero. */ grt[0]=grt[1]=grt[2]=grt[3]=grt[4]=0.0; /* Now calculate conductances from rt. */ /* Don't need to worry about divide by zero when calculating */ /* grt components, as soi3setup() only creates a thermal node */ /* if corresponding rt is greater than zero. */ for(tnodeindex=0;tnodeindexSOI3numThermalNodes;tnodeindex++) { grt[tnodeindex]=1/rtargs[tnodeindex]; } /* End JimB */ vgfd = vgfs - vds; vgbd = vgbs - vds; if (here->SOI3mode==1) { idrain = here->SOI3id + here->SOI3ibd - here->SOI3iMdb - here->SOI3iBJTdb; } else { idrain = -here->SOI3id - here->SOI3ibd + here->SOI3iBJTdb; } /* Pt doesn't need changing as it's in here->SOI3iPt */ if((ckt->CKTmode & (MODETRAN | MODEAC)) || (ckt->CKTmode & MODETRANOP)) { cgfgf = *(ckt->CKTstate0 + here->SOI3cgfgf); cgfd = *(ckt->CKTstate0 + here->SOI3cgfd); cgfs = *(ckt->CKTstate0 + here->SOI3cgfs); cgfdeltaT = *(ckt->CKTstate0 + here->SOI3cgfdeltaT); cgfgb = *(ckt->CKTstate0 + here->SOI3cgfgb); csgf = *(ckt->CKTstate0 + here->SOI3csgf); csd = *(ckt->CKTstate0 + here->SOI3csd); css = *(ckt->CKTstate0 + here->SOI3css); csdeltaT = *(ckt->CKTstate0 + here->SOI3csdeltaT); csgb = *(ckt->CKTstate0 + here->SOI3csgb); cdgf = *(ckt->CKTstate0 + here->SOI3cdgf); cdd = *(ckt->CKTstate0 + here->SOI3cdd); cds = *(ckt->CKTstate0 + here->SOI3cds); cddeltaT = *(ckt->CKTstate0 + here->SOI3cddeltaT); cdgb = *(ckt->CKTstate0 + here->SOI3cdgb); cgbgf = *(ckt->CKTstate0 + here->SOI3cgbgf); cgbd = *(ckt->CKTstate0 + here->SOI3cgbd); cgbs = *(ckt->CKTstate0 + here->SOI3cgbs); cgbdeltaT = *(ckt->CKTstate0 + here->SOI3cgbdeltaT); cgbgb = *(ckt->CKTstate0 + here->SOI3cgbgb); cbgf = -(cgfgf + cdgf + csgf + cgbgf); cbd = -(cgfd + cdd + csd + cgbd); cbs = -(cgfs + cds + css + cgbs); cbdeltaT = -(cgfdeltaT + cddeltaT + csdeltaT + cgbdeltaT); cbgb = -(cgfgb + cdgb + csgb + cgbgb); qgatef = *(ckt->CKTstate0 + here->SOI3qgf); qdrn = *(ckt->CKTstate0 + here->SOI3qd); qsrc = *(ckt->CKTstate0 + here->SOI3qs); qgateb = *(ckt->CKTstate0 + here->SOI3qgb); qbody = -(qgatef + qdrn + qsrc + qgateb); ByPass = 1; goto bypass1; } goto bypass2; } #endif /*NOBYPASS*/ /* ok - bypass is out, do it the hard way */ von = model->SOI3type * here->SOI3von; #ifndef NODELIMITING /* * limiting * we want to keep device voltages from changing * so fast that the exponentials churn out overflows * and similar rudeness */ if(*(ckt->CKTstate0 + here->SOI3vds) >=0) { vgfs = DEVfetlim(vgfs,*(ckt->CKTstate0 + here->SOI3vgfs) ,von); vds = vgfs - vgfd; vds = DEVlimvds(vds,*(ckt->CKTstate0 + here->SOI3vds)); vgfd = vgfs - vds; } else { vgfd = DEVfetlim(vgfd,vgfdo,von); vds = vgfs - vgfd; if(!(ckt->CKTfixLimit)) { vds = -DEVlimvds(-vds,-(*(ckt->CKTstate0 + here->SOI3vds))); } vgfs = vgfd + vds; } if(vds >= 0) { vbs = DEVsoipnjlim(vbs,*(ckt->CKTstate0 + here->SOI3vbs), vt,here->SOI3sourceVcrit,&Check); vbd = vbs-vds; } else { vbd = DEVsoipnjlim(vbd,*(ckt->CKTstate0 + here->SOI3vbd), vt,here->SOI3drainVcrit,&Check); vbs = vbd + vds; } /* and now some limiting of the temperature rise */ if (deltaT>(10 + *(ckt->CKTstate0 + here->SOI3deltaT))) { deltaT = 10 + *(ckt->CKTstate0 + here->SOI3deltaT); /* need limiting, therefore must also impose limits on other thermal voltages. */ /* JimB - 19/5/99 */ if (here->SOI3numThermalNodes == 0) { deltaT1=deltaT2=deltaT3=deltaT4=deltaT5=0; } if (here->SOI3numThermalNodes == 1) { deltaT1=deltaT; deltaT2=deltaT3=deltaT4=deltaT5=0; } if (here->SOI3numThermalNodes == 2) { deltaT2 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout1Node)); deltaT1 = deltaT - deltaT2; deltaT3=deltaT4=deltaT5=0; } if (here->SOI3numThermalNodes == 3) { deltaT3 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout2Node)); deltaT2 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout1Node) - deltaT3); deltaT1 = deltaT - deltaT2 - deltaT3; deltaT4=deltaT5=0; } if (here->SOI3numThermalNodes == 4) { deltaT4 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout3Node)); deltaT3 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout2Node) - deltaT4); deltaT2 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout1Node) - deltaT3 - deltaT4); deltaT1 = deltaT - deltaT2 - deltaT3 - deltaT4; deltaT5=0; } if (here->SOI3numThermalNodes == 5) { deltaT5 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout4Node)); deltaT4 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout3Node) - deltaT5); deltaT3 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout2Node) - deltaT4 - deltaT5); deltaT2 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout1Node) - deltaT3 - deltaT4 - deltaT5); deltaT1 = deltaT - deltaT2 - deltaT3 - deltaT4 - deltaT5; } Check = 1; } #endif /*NODELIMITING*/ } else { /* ok - not one of the simple cases, so we have to * look at all of the possibilities for why we were * called. We still just initialize the three voltages */ if((ckt->CKTmode & MODEINITJCT) && !here->SOI3off) { vds= model->SOI3type * here->SOI3icVDS; vgfs= model->SOI3type * here->SOI3icVGFS; vgbs= model->SOI3type * here->SOI3icVGBS; vbs= model->SOI3type * here->SOI3icVBS; deltaT=deltaT1=deltaT2=deltaT3=deltaT4=deltaT5=0.0; if((vds==0) && (vgfs==0) && (vbs==0) && (vgbs==0) && ((ckt->CKTmode & (MODETRAN|MODEDCOP|MODEDCTRANCURVE)) || (!(ckt->CKTmode & MODEUIC)))) { vbs = -1; vgfs = model->SOI3type * here->SOI3tVto; vds = 0; vgbs = 0; deltaT=deltaT1=deltaT2=deltaT3=deltaT4=deltaT5=0.0; } } else { vbs=vgfs=vds=vgbs=deltaT=deltaT1=deltaT2=deltaT3=deltaT4=deltaT5=0.0; } } /* * now all the preliminaries are over - we can start doing the * real work */ vbd = vbs - vds; vgfd = vgfs - vds; vgbd = vgbs - vds; vgfb = vgfs - vbs; vgbb = vgbs - vbs; vsb = -vbs; vdb = -vbd; /* now to determine whether the user was able to correctly * identify the source and drain of his device */ if(vds >= 0) { /* normal mode */ here->SOI3mode = 1; } else { /* inverse mode */ here->SOI3mode = -1; } { /* begin block */ /* * This block works out drain current and derivatives. * It does this via the calculation of the surface potential * which is a bit complex mostly for reasons of continuity * and robustness - c'est la vie. * */ /* the following variables are local to this code block until * it is obvious that they can be made global */ double vg; double eta_s; /* 1+Citf/Cof */ double gamma,sigma; double Egy = 0.0,vgy,Sgy; double psi_ss; double AL,A0,LL,L0; double ALx,A0x,EAL = 0.0,EA0 = 0.0; double logterm0,logtermL; double Vgconst0,VgconstL; double Egx0 = 0.0,EgxL = 0.0; double vgx0,vgxL; double psi_si0,psi_siL,psi_st0; double Esi0 = 0.0,EsiL = 0.0,Ess0 = 0.0; double theta2; double TVF; /* thermal velocity-saturation factor */ double Mmob; double sqt0,sqt0one; double alpha,delta,Bf; double vGBF,vGT,vGBT; double PSI; double S; double psi_sLsat; double Esd0 = 0.0,EsdL = 0.0; double psi_s0,psi_sL; double fL,f0; double DfL_Dvgfb,DfL_Dvdb,DfL_Dvsb,DfL_DdeltaT; double Df0_Dvgfb,Df0_Dvdb,Df0_Dvsb,Df0_DdeltaT; double ld,Dld_Dvgfb,Dld_Dvdb,Dld_Dvsb,Dld_DdeltaT; double ich0; double pDpsi_si0_Dvgx0,pDpsi_siL_DvgxL; double Dvgx0_Dvgfb,pDvgx0_Dvg,Dvgx0_Dvsb,Dvgx0_Dvdb,Dvgx0_DdeltaT; double DvgxL_Dvgfb,pDvgxL_Dvg,DvgxL_Dvsb,DvgxL_Dvdb,DvgxL_DdeltaT; double pDpsi_si0_Dvsb,pDpsi_siL_Dvdb; double Dpsi_si0_Dvgfb,Dpsi_si0_Dvsb,Dpsi_si0_Dvdb; double Dpsi_siL_Dvgfb,Dpsi_siL_Dvsb,Dpsi_siL_Dvdb; double Dpsi_ss_Dvgfb,Dpsi_ss_Dvsb,Dpsi_ss_Dvdb; double Dpsi_st0_Dvgfb,Dpsi_st0_Dvsb,Dpsi_st0_Dvdb; double pDdelta_Dpsi_st0; double Dalpha_Dvgfb,Dalpha_Dvdb,Dalpha_Dvsb,Dalpha_DdeltaT; double DPSI_Dvgfb,DPSI_Dvdb,DPSI_Dvsb,DPSI_DdeltaT; double pDBf_Dpsi_st0,DvGT_Dvgfb,DvGT_Dvsb,DvGT_Dvdb,DvGT_DdeltaT; double D,DS_Dvgfb,DS_Dvsb,DS_Dvdb,DS_DdeltaT; double Dpsi_sLsat_Dvgfb,Dpsi_sLsat_Dvsb,Dpsi_sLsat_Dvdb; double gmg,gmd,gms,gmt; double Dpsi_si0_DdeltaT,Dpsi_siL_DdeltaT; double Dpsi_ss_DdeltaT,Dpsi_st0_DdeltaT; double Dpsi_sLsat_DdeltaT; double Dpsi_sL_Dvgfb,Dpsi_s0_Dvgfb,Dpsi_sL_Dvdb,Dpsi_s0_Dvdb; double Dpsi_sL_Dvsb,Dpsi_s0_Dvsb,Dpsi_sL_DdeltaT,Dpsi_s0_DdeltaT; double vdsat; double Dvdsat_Dvgfb,Dvdsat_Dvsb,Dvdsat_Dvdb,Dvdsat_DdeltaT; int i; double vds2m,vdsat2m,Em,vdslim; double Dvdslim_Dvgfb,Dvdslim_Dvdb,Dvdslim_Dvsb,Dvdslim_DdeltaT; double Vmx; double DVmx_Dvgfb,DVmx_Dvdb,DVmx_Dvsb,DVmx_DdeltaT; double Vm1,Em1,Vm1x; double DVm1x_Dvgfb,DVm1x_Dvdb,DVm1x_Dvsb,DVm1x_DdeltaT; double vgeff,lm,lmeff,Elm,Dlm_Dvgfb,Dlm_Dvdb,Dlm_Dvsb,Dlm_DdeltaT; double Mminus1=0; double EM,betaM; double gMg,gMd,gMs; double Fm; /* mobility degradation factor */ double Y; /* channel length modulation factor */ double tmp,tmp1; /* temporary var to aid pre-calculation */ double TMF; /* thermal mobility factor */ int vgx0trans,vgxLtrans; /* flags to indicate if vg transform performed */ int psi_s0_trans,psi_sL_trans=0; int Ess0_trans,Esd0_trans,EsdL_trans; int A0trans,ALtrans; double vT,EchiD,EchiD1; double BetaBJTeff; /* Now we use a nasty trick - if device is A over T, must "swap" drain and source potentials. we do a literal switch and change it back for the outside world. */ if (here->SOI3mode == -1) { SWAP(double, vsb, vdb); } /* Intrinsic Electrical Bit - has a bit of thermal due to TTC */ sigma = model->SOI3sigma/(EffectiveLength); eta_s = 1 + (model->SOI3C_ssf/model->SOI3frontOxideCapFactor); vg = vgfb - here->SOI3tVfbF * model->SOI3type + sigma*(here->SOI3mode*vds) - model->SOI3chiFB*deltaT; gamma = model->SOI3gamma * (1 + (model->SOI3deltaW)/(here->SOI3w)) * (1 - (model->SOI3deltaL)/EffectiveLength); /* must introduce some limiting to prevent exp overflow */ if (vg > (vt*MAX_EXP_ARG)) { vgy = vg; } else { Egy = exp(vg/vt); vgy = vt*log(1+Egy); } Sgy = sqrt((vgy/eta_s) + (gamma*gamma)/(4*eta_s*eta_s)); psi_ss = (Sgy-0.5*gamma/eta_s)*(Sgy-0.5*gamma/eta_s); A0 = here->SOI3tPhi + vsb; AL = here->SOI3tPhi + vdb; if (A0 > (vt*MAX_EXP_ARG)) { A0x = A0; A0trans = 0; } else { EA0 = exp(A0/vt); A0x = vt * log(1+EA0); A0trans = 1; } if (AL > (vt*MAX_EXP_ARG)) { ALx = AL; ALtrans = 0; } else { EAL = exp(AL/vt); ALx = vt * log(1+EAL); ALtrans = 1; } /* if vg is very large then don't need to transform vg into vgx. */ Vgconst0 = eta_s*A0x - vt*(eta_s - 1) + gamma*sqrt(A0x); if ((vg-Vgconst0) < (5 * vt * MAX_EXP_ARG)) { vgx0trans = 1; Egx0 = exp((vg - Vgconst0)/(5*vt)); vgx0 = (5*vt) * log(1 + Egx0) + Vgconst0; } else { vgx0trans = 0; /* no transform performed */ vgx0 = vg; } VgconstL = eta_s*ALx - vt*(eta_s - 1) + gamma*sqrt(ALx); if ((vg-VgconstL) < (5 * vt * MAX_EXP_ARG)) { vgxLtrans = 1; EgxL = exp((vg - VgconstL)/(5*vt)); vgxL = (5*vt) * log(1 + EgxL) + VgconstL; } else { vgxLtrans = 0; /* no transform performed */ vgxL = vg; } L0 = vgx0 - eta_s*(A0 - vt); LL = vgxL - eta_s*(AL - vt); logterm0 = ((L0/gamma)*(L0/gamma) - A0)/vt; logtermL = ((LL/gamma)*(LL/gamma) - AL)/vt; if (logterm0<=0) { /* can only happen due to numerical problems with sqrt*/ psi_si0 = A0 + model->SOI3chiPHI*deltaT + vt*log(vt/(gamma*gamma)); } else { psi_si0 = A0 + model->SOI3chiPHI*deltaT + vt*log(logterm0); } if (logtermL<=0) { psi_siL = AL + model->SOI3chiPHI*deltaT + vt*log(vt/(gamma*gamma)); } else { psi_siL = AL + model->SOI3chiPHI*deltaT + vt*log(logtermL); } if ((psi_si0-psi_ss) < vt*MAX_EXP_ARG) { Ess0 = exp((psi_si0-psi_ss)/vt); Ess0_trans = 1; if (psi_si0 > (vt * MAX_EXP_ARG)) { /* psi_si0 is BIG */ psi_st0 = psi_si0 - vt*log(1+Ess0); psi_s0_trans = 0; } else { Esi0 = exp(psi_si0/vt); psi_st0 = vt*log(1+(Esi0/(1+Ess0))); psi_s0_trans = 1; } } else { psi_st0 = psi_ss; Ess0_trans = 0; psi_s0_trans = 0; } /* now for psi_sLsat - has thermal influence ! (if vel sat is included) */ TMF = exp(-model->SOI3k*log(1+(deltaT/here->SOI3temp))); sqt0 = sqrt(psi_st0+1E-25); sqt0one = sqrt(1+psi_st0); /* delta is formulated this way so we can change it here and nowhere else */ delta = 0.5/sqt0one; pDdelta_Dpsi_st0 = -0.25/((1+psi_st0)*sqt0one); alpha = eta_s+gamma*delta; vGBF = vg - psi_st0; Bf = sqt0 - delta*psi_st0; vGT = vg - gamma*Bf; vGBT = vGT + alpha*vt; if(model->SOI3vsat == 0) { theta2 = 0; TVF = 0.0; /* could be any nominal value */ } else { TVF = 0.8*exp((here->SOI3temp+deltaT)/600); theta2 = (here->SOI3tSurfMob/(model->SOI3vsat))*1e-2 /*cm to m*/ *TMF*(1+TVF)/(EffectiveLength*(1+model->SOI3TVF0)); /* theta2=1/(L.Ec) */ } Mmob = theta2 - 0.5*model->SOI3theta; PSI = MAX(0,(vGT/alpha) - psi_st0); S = 0.5*(1+sqrt(1 + (2*Mmob*PSI)/(1+model->SOI3theta*vGBF))); psi_sLsat = psi_st0 + PSI/S; if ((psi_si0 - psi_sLsat)<(vt*MAX_EXP_ARG)) { Esd0 = exp((psi_si0 - psi_sLsat)/vt); Esd0_trans = 1; if (psi_s0_trans) { psi_s0 = vt*log(1+Esi0/(1+Esd0)); } else { psi_s0 = psi_si0 - vt*log(1+Esd0); } } else { psi_s0 = psi_sLsat; Esd0_trans = 0; } if ((psi_siL - psi_sLsat)<(vt*MAX_EXP_ARG)) { EsdL = exp((psi_siL - psi_sLsat)/vt); EsdL_trans = 1; if (psi_siL < (vt * MAX_EXP_ARG)) { EsiL = exp(psi_siL/vt); psi_sL = vt*log(1+EsiL/(1+EsdL)); psi_sL_trans = 1; } else { psi_sL = psi_siL - vt*log(1+EsdL); psi_sL_trans = 0; } } else { psi_sL = psi_sLsat; EsdL_trans = 0; } /* if, after all that, we have impossible situation due to numerical limiting schemes ... */ if (psi_s0>psi_sL) { psi_sL = psi_s0; } /* now we can finally work out surface potential for source and drain end */ /* now surface potential is ready */ f0 = (vGBT - 0.5*alpha*psi_s0)*psi_s0; fL = (vGBT - 0.5*alpha*psi_sL)*psi_sL; ich0 = Beta * (fL - f0); /* This is "intrinsic" bit */ /* now for derivatives - they're a bit of a nightmare * * notation pD... means PARTIAL derivative whilst D... * * means FULL derivative */ /* first sub-threshold */ if (vg > (vt*MAX_EXP_ARG)) { Dpsi_ss_Dvgfb = (1-0.5*gamma/(eta_s*Sgy))/eta_s; } else { Dpsi_ss_Dvgfb = (1-0.5*gamma/(eta_s*Sgy))*(Egy/(1+Egy))/eta_s; } Dpsi_ss_Dvsb = Dpsi_ss_Dvgfb*(-sigma); Dpsi_ss_Dvdb = Dpsi_ss_Dvgfb*(sigma); Dpsi_ss_DdeltaT = Dpsi_ss_Dvgfb*(-model->SOI3chiFB); /* now for strong inversion */ pDpsi_si0_Dvgx0 = 2*vt*L0/(L0*L0-gamma*gamma*A0); pDpsi_siL_DvgxL = 2*vt*LL/(LL*LL-gamma*gamma*AL); /* if vg is transformed, must have deriv accordingly, else it is 1 */ if (vgx0trans) { Dvgx0_Dvgfb = pDvgx0_Dvg = Egx0/(1+Egx0); if (A0trans) { /* JimB - 27/8/98 */ /* Get divide by zero errors when A0x is equal to zero */ /* Temporary fix - add small constant to denominator */ /* Dvgx0_Dvsb = pDvgx0_Dvg * (-sigma) + (1-pDvgx0_Dvg)*(eta_s+0.5*gamma/sqrt(A0x))* (EA0/(1+EA0)); */ Dvgx0_Dvsb = pDvgx0_Dvg * (-sigma) + (1-pDvgx0_Dvg)*(eta_s+0.5*gamma/(sqrt(A0x)+1e-25))* (EA0/(1+EA0)); /* End JimB */ } else { /* JimB - 27/8/97 */ /* Temporary fix - add small constant to denominator */ /*Dvgx0_Dvsb = pDvgx0_Dvg * (-sigma) + (1-pDvgx0_Dvg)*(eta_s+0.5*gamma/sqrt(A0)); */ Dvgx0_Dvsb = pDvgx0_Dvg * (-sigma) + (1-pDvgx0_Dvg)*(eta_s+0.5*gamma/(sqrt(A0)+1e-25)); /* End JimB */ } Dvgx0_Dvdb = pDvgx0_Dvg*(sigma); Dvgx0_DdeltaT = pDvgx0_Dvg*(-model->SOI3chiFB); } else { Dvgx0_Dvgfb = pDvgx0_Dvg = 1; Dvgx0_Dvsb = (-sigma); Dvgx0_Dvdb = (sigma); Dvgx0_DdeltaT = (-model->SOI3chiFB); } if (vgxLtrans) { DvgxL_Dvgfb = pDvgxL_Dvg = EgxL/(1+EgxL); DvgxL_Dvsb = pDvgxL_Dvg * (-sigma); if (ALtrans) { /* JimB - 27/8/98 */ /* Get divide by zero errors when ALx is equal to zero */ /* Temporary fix - add small constant to denominator */ /*DvgxL_Dvdb = pDvgxL_Dvg * (sigma) + (1-pDvgxL_Dvg)*(eta_s+0.5*gamma/sqrt(ALx))* (EAL/(1+EAL)); */ DvgxL_Dvdb = pDvgxL_Dvg * (sigma) + (1-pDvgxL_Dvg)*(eta_s+0.5*gamma/(sqrt(ALx)+1e-25))* (EAL/(1+EAL)); /* End JimB */ } else { /* JimB - 27/8/97 */ /* Temporary fix - add small constant to denominator */ /* DvgxL_Dvdb = pDvgxL_Dvg * (sigma) + (1-pDvgxL_Dvg)*(eta_s+0.5*gamma/sqrt(AL)); */ DvgxL_Dvdb = pDvgxL_Dvg * (sigma) + (1-pDvgxL_Dvg)*(eta_s+0.5*gamma/(sqrt(AL)+1e-25)); /* End JimB */ } DvgxL_DdeltaT = pDvgxL_Dvg * (-model->SOI3chiFB); } else { DvgxL_Dvgfb = 1; DvgxL_Dvsb = (-sigma); DvgxL_Dvdb = (sigma); DvgxL_DdeltaT = (-model->SOI3chiFB); } pDpsi_si0_Dvsb = 1 - (2*vt*eta_s*L0+vt*gamma*gamma)/(L0*L0-gamma*gamma*A0); pDpsi_siL_Dvdb = 1 - (2*vt*eta_s*LL+vt*gamma*gamma)/(LL*LL-gamma*gamma*AL); Dpsi_si0_Dvgfb = pDpsi_si0_Dvgx0*Dvgx0_Dvgfb; Dpsi_si0_Dvsb = pDpsi_si0_Dvgx0*Dvgx0_Dvsb + pDpsi_si0_Dvsb; Dpsi_si0_Dvdb = pDpsi_si0_Dvgx0*Dvgx0_Dvdb; Dpsi_si0_DdeltaT = model->SOI3chiPHI + pDpsi_si0_Dvgx0*Dvgx0_DdeltaT; Dpsi_siL_Dvgfb = pDpsi_siL_DvgxL*DvgxL_Dvgfb; Dpsi_siL_Dvsb = pDpsi_siL_DvgxL*DvgxL_Dvsb; Dpsi_siL_Dvdb = pDpsi_siL_DvgxL*DvgxL_Dvdb + pDpsi_siL_Dvdb; Dpsi_siL_DdeltaT = model->SOI3chiPHI + pDpsi_siL_DvgxL*DvgxL_DdeltaT; /* now we can get full deriv of first guess but also, partials of psi_s0 and psi_sL, the final values have similar structure, so do them now as well */ /* deriv of psi_s etc wrt psi_si must be according to transform used */ if (Ess0_trans) { if (psi_s0_trans) { tmp = (Esi0/(1+Ess0+Esi0))/(1+Ess0); tmp1 = (Esi0/(1+Ess0+Esi0))*(Ess0/(1+Ess0)); } else { tmp = 1/(1+Ess0); tmp1 = Ess0*tmp; } Dpsi_st0_Dvgfb = tmp*Dpsi_si0_Dvgfb + tmp1*Dpsi_ss_Dvgfb; Dpsi_st0_Dvsb = tmp*Dpsi_si0_Dvsb + tmp1*Dpsi_ss_Dvsb; Dpsi_st0_Dvdb = tmp*Dpsi_si0_Dvdb + tmp1*Dpsi_ss_Dvdb; Dpsi_st0_DdeltaT = tmp*Dpsi_si0_DdeltaT + tmp1*Dpsi_ss_DdeltaT; } else { Dpsi_st0_Dvgfb = Dpsi_ss_Dvgfb; Dpsi_st0_Dvdb = Dpsi_ss_Dvdb; Dpsi_st0_Dvsb = Dpsi_ss_Dvsb; Dpsi_st0_DdeltaT = Dpsi_ss_DdeltaT; } /* now some itsy bitsy quantities useful all over the shop */ /* Ddelta_Dpsi_st0 is defined earlier with delta to allow change of delta expression in one place */ pDBf_Dpsi_st0 = 0.5/sqt0 - psi_st0*pDdelta_Dpsi_st0 - delta; DvGT_Dvgfb = 1 - gamma*pDBf_Dpsi_st0*Dpsi_st0_Dvgfb; DvGT_Dvsb = (-sigma) - gamma*pDBf_Dpsi_st0*Dpsi_st0_Dvsb; DvGT_Dvdb = (sigma) - gamma*pDBf_Dpsi_st0*Dpsi_st0_Dvdb; DvGT_DdeltaT = (-model->SOI3chiFB) - gamma*pDBf_Dpsi_st0*Dpsi_st0_DdeltaT; Dalpha_Dvgfb = gamma*pDdelta_Dpsi_st0*Dpsi_st0_Dvgfb; Dalpha_Dvsb = gamma*pDdelta_Dpsi_st0*Dpsi_st0_Dvsb; Dalpha_Dvdb = gamma*pDdelta_Dpsi_st0*Dpsi_st0_Dvdb; Dalpha_DdeltaT = gamma*pDdelta_Dpsi_st0*Dpsi_st0_DdeltaT; /* Now for saturation stuff psi_sLsat */ /* NB no need for special case, theta2=0 ==> Mmob=-theta/2 */ if (PSI != 0) { /* stops unnecessary math if PSI = 0 */ DPSI_Dvgfb = (DvGT_Dvgfb - (vGT/alpha)*Dalpha_Dvgfb )/alpha - Dpsi_st0_Dvgfb; DPSI_Dvsb = (DvGT_Dvsb - (vGT/alpha)*Dalpha_Dvsb )/alpha - Dpsi_st0_Dvsb; DPSI_Dvdb = (DvGT_Dvdb - (vGT/alpha)*Dalpha_Dvdb )/alpha - Dpsi_st0_Dvdb; DPSI_DdeltaT = (DvGT_DdeltaT - (vGT/alpha)*Dalpha_DdeltaT )/alpha - Dpsi_st0_DdeltaT; D = 2*(1+model->SOI3theta*vGBF)* sqrt(1 + (2*Mmob*PSI)/(1+model->SOI3theta*vGBF)); DS_Dvgfb = (Mmob/D)*DPSI_Dvgfb - (Mmob*PSI*(model->SOI3theta)/(D*(1+model->SOI3theta*vGBF))) *(1-Dpsi_st0_Dvgfb); DS_Dvsb = (Mmob/D)*DPSI_Dvsb - (Mmob*PSI*(model->SOI3theta)/(D*(1+model->SOI3theta*vGBF))) *((-sigma)-Dpsi_st0_Dvsb); DS_Dvdb = (Mmob/D)*DPSI_Dvdb - (Mmob*PSI*(model->SOI3theta)/(D*(1+model->SOI3theta*vGBF))) *((sigma)-Dpsi_st0_Dvdb); DS_DdeltaT = (Mmob/D)*DPSI_DdeltaT - (Mmob*PSI*(model->SOI3theta)/(D*(1+model->SOI3theta*vGBF))) *((-model->SOI3chiFB)-Dpsi_st0_DdeltaT) - (PSI/D)*theta2*(model->SOI3k/(deltaT+here->SOI3temp) - TVF/(600*(1+TVF))); Dpsi_sLsat_Dvgfb = Dpsi_st0_Dvgfb + DPSI_Dvgfb/S - PSI*DS_Dvgfb/(S*S); Dpsi_sLsat_Dvsb = Dpsi_st0_Dvsb + DPSI_Dvsb/S - PSI*DS_Dvsb/(S*S); Dpsi_sLsat_Dvdb = Dpsi_st0_Dvdb + DPSI_Dvdb/S - PSI*DS_Dvdb/(S*S); Dpsi_sLsat_DdeltaT = Dpsi_st0_DdeltaT + DPSI_DdeltaT/S - PSI*DS_DdeltaT/(S*S); } else { Dpsi_sLsat_Dvgfb = Dpsi_st0_Dvgfb; Dpsi_sLsat_Dvsb = Dpsi_st0_Dvsb; Dpsi_sLsat_Dvdb = Dpsi_st0_Dvdb; Dpsi_sLsat_DdeltaT = Dpsi_st0_DdeltaT; } if (Esd0_trans) { if (psi_s0_trans) { tmp = (Esi0/(1+Esd0+Esi0))/(1+Esd0); tmp1 = (Esi0/(1+Esd0+Esi0))*(Esd0/(1+Esd0)); } else { tmp = 1/(1+Esd0); tmp1 = Esd0*tmp; } Dpsi_s0_Dvgfb = tmp*Dpsi_si0_Dvgfb + tmp1*Dpsi_sLsat_Dvgfb; Dpsi_s0_Dvdb = tmp*Dpsi_si0_Dvdb + tmp1*Dpsi_sLsat_Dvdb; Dpsi_s0_Dvsb = tmp*Dpsi_si0_Dvsb + tmp1*Dpsi_sLsat_Dvsb; Dpsi_s0_DdeltaT = tmp*Dpsi_si0_DdeltaT + tmp1*Dpsi_sLsat_DdeltaT; } else { Dpsi_s0_Dvgfb = Dpsi_sLsat_Dvgfb; Dpsi_s0_Dvdb = Dpsi_sLsat_Dvdb; Dpsi_s0_Dvsb = Dpsi_sLsat_Dvsb; Dpsi_s0_DdeltaT = Dpsi_sLsat_DdeltaT; } if (EsdL_trans) { if (psi_sL_trans) { tmp = (EsiL/(1+EsdL+EsiL))/(1+EsdL); tmp1 = (EsiL/(1+EsdL+EsiL))*(EsdL/(1+EsdL)); } else { tmp = 1/(1+EsdL); tmp1 = EsdL*tmp; } Dpsi_sL_Dvgfb = tmp*Dpsi_siL_Dvgfb + tmp1*Dpsi_sLsat_Dvgfb; Dpsi_sL_Dvdb = tmp*Dpsi_siL_Dvdb + tmp1*Dpsi_sLsat_Dvdb; Dpsi_sL_Dvsb = tmp*Dpsi_siL_Dvsb + tmp1*Dpsi_sLsat_Dvsb; Dpsi_sL_DdeltaT = tmp*Dpsi_siL_DdeltaT + tmp1*Dpsi_sLsat_DdeltaT; } else { Dpsi_sL_Dvgfb = Dpsi_sLsat_Dvgfb; Dpsi_sL_Dvdb = Dpsi_sLsat_Dvdb; Dpsi_sL_Dvsb = Dpsi_sLsat_Dvsb; Dpsi_sL_DdeltaT = Dpsi_sLsat_DdeltaT; } /* now for the whole kaboodle */ DfL_Dvgfb = psi_sL*(DvGT_Dvgfb + vt*Dalpha_Dvgfb) - psi_sL*psi_sL*0.5*Dalpha_Dvgfb + (vGBT - alpha*psi_sL)*Dpsi_sL_Dvgfb; Df0_Dvgfb = psi_s0*(DvGT_Dvgfb + vt*Dalpha_Dvgfb) - psi_s0*psi_s0*0.5*Dalpha_Dvgfb + (vGBT - alpha*psi_s0)*Dpsi_s0_Dvgfb; DfL_Dvdb = psi_sL*(DvGT_Dvdb + vt*Dalpha_Dvdb) - psi_sL*psi_sL*0.5*Dalpha_Dvdb + (vGBT - alpha*psi_sL)*Dpsi_sL_Dvdb; Df0_Dvdb = psi_s0*(DvGT_Dvdb + vt*Dalpha_Dvdb) - psi_s0*psi_s0*0.5*Dalpha_Dvdb + (vGBT - alpha*psi_s0)*Dpsi_s0_Dvdb; DfL_Dvsb = psi_sL*(DvGT_Dvsb + vt*Dalpha_Dvsb) - psi_sL*psi_sL*0.5*Dalpha_Dvsb + (vGBT - alpha*psi_sL)*Dpsi_sL_Dvsb; Df0_Dvsb = psi_s0*(DvGT_Dvsb + vt*Dalpha_Dvsb) - psi_s0*psi_s0*0.5*Dalpha_Dvsb + (vGBT - alpha*psi_s0)*Dpsi_s0_Dvsb; DfL_DdeltaT = psi_sL*(DvGT_DdeltaT + vt*Dalpha_DdeltaT) - psi_sL*psi_sL*0.5*Dalpha_DdeltaT + (vGBT - alpha*psi_sL)*Dpsi_sL_DdeltaT; Df0_DdeltaT = psi_s0*(DvGT_DdeltaT + vt*Dalpha_DdeltaT) - psi_s0*psi_s0*0.5*Dalpha_DdeltaT + (vGBT - alpha*psi_s0)*Dpsi_s0_DdeltaT; /* put them all together and what have you got ...? */ gmg = Beta*(DfL_Dvgfb - Df0_Dvgfb); gmd = Beta*(DfL_Dvdb - Df0_Dvdb); gms = Beta*(DfL_Dvsb - Df0_Dvsb); gmt = Beta*(DfL_DdeltaT - Df0_DdeltaT); /* End Intrinsic Electrical Bit */ /* * High Field Mobility Effects */ Fm = 1 + model->SOI3theta*(vg - 0.5*(psi_sL + psi_s0)) + theta2 * (psi_sL - psi_s0); ich0 = ich0/Fm; here->SOI3ueff = here->SOI3ueff/Fm; gmg = (gmg-ich0*(model->SOI3theta* (1-0.5*(Dpsi_sL_Dvgfb + Dpsi_s0_Dvgfb)) + theta2*(Dpsi_sL_Dvgfb - Dpsi_s0_Dvgfb) ) )/Fm; gmd = (gmd-ich0*(model->SOI3theta* (sigma-0.5*(Dpsi_sL_Dvdb + Dpsi_s0_Dvdb)) + theta2*(Dpsi_sL_Dvdb - Dpsi_s0_Dvdb) ) )/Fm; gms = (gms-ich0*(model->SOI3theta* (-sigma-0.5*(Dpsi_sL_Dvsb + Dpsi_s0_Dvsb)) + theta2*(Dpsi_sL_Dvsb - Dpsi_s0_Dvsb) ) )/Fm; gmt = (gmt-ich0*(model->SOI3theta* ((-model->SOI3chiFB)-0.5*(Dpsi_sL_DdeltaT + Dpsi_s0_DdeltaT) ) + theta2*(Dpsi_sL_DdeltaT - Dpsi_s0_DdeltaT - (psi_sL - psi_s0)*(model->SOI3k/(deltaT+here->SOI3temp) - TVF/(600*(1+TVF)) ) ) ) )/Fm; /* * End High Field Mobility Effects */ /* Now to define bits which affect the drain region */ /* * Channel Length Modulation */ /* JimB - add thermal voltage to vdsat to ensure it remains above zero in subthreshold */ vdsat = psi_sLsat - psi_st0 + vt; Dvdsat_Dvgfb = Dpsi_sLsat_Dvgfb - Dpsi_st0_Dvgfb; Dvdsat_Dvsb = Dpsi_sLsat_Dvsb - Dpsi_st0_Dvsb; Dvdsat_Dvdb = Dpsi_sLsat_Dvdb - Dpsi_st0_Dvdb; Dvdsat_DdeltaT = Dpsi_sLsat_DdeltaT - Dpsi_st0_DdeltaT; m = model->SOI3mexp; if (m>0) { if (vdsat>0) { vds2m = 1; vdsat2m = 1; for (i=0; i<2*m; i=i+1) { vds2m = vds2m*(vds*here->SOI3mode); vdsat2m = vdsat2m*vdsat; } Em = exp(-log(vds2m+vdsat2m)/(2*m)); vdslim = (here->SOI3mode*vds)*vdsat*Em; Dvdslim_Dvgfb = (here->SOI3mode*vds*Em*Dvdsat_Dvgfb*vds2m)/(vds2m+vdsat2m); Dvdslim_Dvdb = (here->SOI3mode*vds*Em*Dvdsat_Dvdb*vds2m + vdsat*Em*vdsat2m)/(vds2m+vdsat2m); Dvdslim_Dvsb = (here->SOI3mode*vds*Em*Dvdsat_Dvsb*vds2m - vdsat*Em*vdsat2m)/(vds2m+vdsat2m); Dvdslim_DdeltaT = (here->SOI3mode*vds*Em*Dvdsat_DdeltaT*vds2m)/(vds2m+vdsat2m); Vmx = (here->SOI3mode*vds) - vdslim; DVmx_Dvgfb = -Dvdslim_Dvgfb; DVmx_Dvdb = 1 - Dvdslim_Dvdb; DVmx_Dvsb = -1 - Dvdslim_Dvsb; DVmx_DdeltaT = -Dvdslim_DdeltaT; } else { Vmx = 0; DVmx_Dvgfb = 0; DVmx_Dvdb = 0; DVmx_Dvsb = 0; DVmx_DdeltaT = 0; } } else { Vmx = (here->SOI3mode*vds) - vdsat; DVmx_Dvgfb = -Dvdsat_Dvgfb; DVmx_Dvdb = 1 - Dvdsat_Dvdb; DVmx_Dvsb = -1 - Dvdsat_Dvsb; DVmx_DdeltaT = -Dvdsat_DdeltaT; } if (model->SOI3useLAMBDA) { ld = model->SOI3lambda*Vmx; tmp = model->SOI3lambda; } else { ld = model->SOI3lx * log(1 + Vmx/model->SOI3vp); tmp = model->SOI3lx/(model->SOI3vp + Vmx); } Y = 1 + (ld/EffectiveLength); Dld_Dvgfb = tmp * DVmx_Dvgfb; Dld_Dvdb = tmp * DVmx_Dvdb; Dld_Dvsb = tmp * DVmx_Dvsb; Dld_DdeltaT = tmp * DVmx_DdeltaT; gmg = gmg * Y + (ich0/EffectiveLength) * Dld_Dvgfb; gmd = gmd * Y + (ich0/EffectiveLength) * Dld_Dvdb; gms = gms * Y + (ich0/EffectiveLength) * Dld_Dvsb; gmt = gmt * Y + (ich0/EffectiveLength) * Dld_DdeltaT; ich0 = ich0 * Y; /* Need to do ich0 last as its old value is needed for gds */ /* * End Channel Length Modulation */ here->SOI3gdsnotherm = here->SOI3gds; /************** Thermal Mobility Stuff **************/ /* thermal effect on intrinsic electrical circuit */ idrain = ich0 * TMF; /* idrain has new value now */ here->SOI3ueff *= TMF; gmg = gmg * TMF; /* here->SOI3gmb = here->SOI3gmb * TMF; */ gms = gms * TMF; gmd = gmd * TMF; /* deltaT is indpt voltage now */ gmt = gmt*TMF - (model->SOI3k/(deltaT+here->SOI3temp)) * idrain; ich0 = idrain; /* * finished intrinsic electrical */ /* * Impact Ionisation current sources */ Vm1 = (here->SOI3mode*vds) + model->SOI3eta*(psi_s0 - psi_sLsat); if (Vm1 > (vt*MAX_EXP_ARG)) { Vm1x = Vm1; tmp = 1; } else { Em1 = exp(MIN(MAX_EXP_ARG,Vm1/vt)); Vm1x = vt * log(1 + Em1) + 1e-25; tmp = (Em1/(1+Em1)); } DVm1x_Dvgfb = tmp*model->SOI3eta*(Dpsi_s0_Dvgfb - Dpsi_sLsat_Dvgfb); DVm1x_Dvdb = tmp*(model->SOI3eta*(Dpsi_s0_Dvdb - Dpsi_sLsat_Dvdb) + 1); DVm1x_Dvsb = tmp*(model->SOI3eta*(Dpsi_s0_Dvsb - Dpsi_sLsat_Dvsb) - 1); DVm1x_DdeltaT = tmp*model->SOI3eta*(Dpsi_s0_DdeltaT - Dpsi_sLsat_DdeltaT); vgeff = vg - vsb - eta_s*here->SOI3tPhi - gamma*sqrt(here->SOI3tPhi); lm = model->SOI3lm + model->SOI3lm1*(here->SOI3mode*vds-vgeff) + model->SOI3lm2*(here->SOI3mode*vds-vgeff)*(here->SOI3mode*vds-vgeff); Elm = exp(MIN(MAX_EXP_ARG,lm/MAX(1e-10,(model->SOI3lm/40)))); lmeff = (model->SOI3lm/40)*log(1+Elm); betaM = 100*(model->SOI3beta0 + model->SOI3chibeta*deltaT); EM = exp(MIN(MAX_EXP_ARG,-(lmeff*betaM)/Vm1x)); Mminus1 = (100*model->SOI3alpha0/betaM) * Vm1x * EM; if (here->SOI3mode==1) { here->SOI3iMdb=Mminus1*ich0; here->SOI3iMsb=0; } else { here->SOI3iMsb=Mminus1*ich0; here->SOI3iMdb=0; } tmp = (Elm/(1+Elm))* (model->SOI3lm1 + 2*model->SOI3lm2*(here->SOI3mode*vds-vgeff)); Dlm_Dvgfb = -tmp; Dlm_Dvdb = tmp*(1-sigma); Dlm_Dvsb = tmp*(sigma); Dlm_DdeltaT = tmp*(model->SOI3chiFB); tmp = (ich0/Vm1x); tmp1 = (1+(lmeff*betaM/Vm1x)); gMg = Mminus1 * (gmg + tmp * (tmp1*DVm1x_Dvgfb - betaM*Dlm_Dvgfb)); gMd = Mminus1 * (gmd + tmp * (tmp1*DVm1x_Dvdb - betaM*Dlm_Dvdb)); gMs = Mminus1 * (gms + tmp * (tmp1*DVm1x_Dvsb - betaM*Dlm_Dvsb)); here->SOI3gMmf = gMg; here->SOI3gMmb = 0; here->SOI3gMmbs= -(gMs + gMg + gMd); here->SOI3gMd = gMd; here->SOI3gMdeltaT = Mminus1*(gmt+ tmp*(tmp1*DVm1x_DdeltaT - betaM*Dlm_DdeltaT - lmeff*model->SOI3chibeta*100) - (ich0*model->SOI3chibeta*100/betaM) ); /* * End Impact Ionisation current sources */ /***** time to convert to conventional names for (trans)conductances *****/ here->SOI3gmf = gmg; here->SOI3gmb = 0; /* FOR NOW */ here->SOI3gmbs = -(gms + gmg + gmd); here->SOI3gds = gmd; here->SOI3gt = gmt; vdsat_ext = psi_sLsat - psi_s0; /* now for thermal subcircuit values */ tmp = (here->SOI3drainConductance==0?0:(1/(here->SOI3drainConductance))); tmp += (here->SOI3sourceConductance==0?0:(1/(here->SOI3sourceConductance))); /* tmp = RS+RD */ here->SOI3iPt = (here->SOI3mode*vds + idrain*tmp)*idrain; here->SOI3gPmf = (here->SOI3mode*vds + 2*idrain*tmp)*here->SOI3gmf; here->SOI3gPmb = (here->SOI3mode*vds + 2*idrain*tmp)*here->SOI3gmb; here->SOI3gPmbs = (here->SOI3mode*vds + 2*idrain*tmp)*here->SOI3gmbs; here->SOI3gPds = idrain + (here->SOI3mode*vds + 2*idrain*tmp)*here->SOI3gds; here->SOI3gPdT = (here->SOI3mode*vds + 2*idrain*tmp)*here->SOI3gt; /* JimB - 15/9/99 */ /* Code for multiple thermal time constants. Start by moving all */ /* rt constants into arrays. */ rtargs[0]=here->SOI3rt; rtargs[1]=here->SOI3rt1; rtargs[2]=here->SOI3rt2; rtargs[3]=here->SOI3rt3; rtargs[4]=here->SOI3rt4; /* Set all conductance components to zero. */ grt[0]=grt[1]=grt[2]=grt[3]=grt[4]=0.0; /* Now calculate conductances from rt. */ /* Don't need to worry about divide by zero when calculating */ /* grt components, as soi3setup() only creates a thermal node */ /* if corresponding rt is greater than zero. */ for(tnodeindex=0;tnodeindexSOI3numThermalNodes;tnodeindex++) { grt[tnodeindex]=1/rtargs[tnodeindex]; } /* End JimB */ /* now end nasty trick - if vsb and vdb have been switched, reverse them back */ if (here->SOI3mode == -1) { SWAP(double, vsb, vdb); } /* * bulk-source and bulk-drain diodes * includes parasitic BJT and 2nd diode * */ tmp = here->SOI3temp+deltaT; tmp1 = here->SOI3temp + model->SOI3dvt * deltaT; vT = CONSTKoverQ * tmp1; if ((model->SOI3betaEXP) != 1.0) { if ((model->SOI3betaEXP) != 2.0) { BetaBJTeff = model->SOI3betaBJT * exp(-(model->SOI3betaEXP)*logL); } else { BetaBJTeff = model->SOI3betaBJT/ (EffectiveLength*EffectiveLength); } } else { BetaBJTeff = model->SOI3betaBJT/EffectiveLength; } alphaBJT = BetaBJTeff/(BetaBJTeff + 1); EchiD = exp(MIN(MAX_EXP_ARG, (model->SOI3chid * deltaT)/(here->SOI3temp*tmp) ) ); EchiD1 = exp(MIN(MAX_EXP_ARG, (model->SOI3chid1 * deltaT)/(here->SOI3temp*tmp) ) ); ISts = SourceSatCur*EchiD; IS1ts = SourceSatCur1*EchiD1; evbs = exp(MIN(MAX_EXP_ARG,vbs/((model->SOI3etad)*vT))); evbs1 = exp(MIN(MAX_EXP_ARG,vbs/((model->SOI3etad1)*vT))); /* First Junction */ here->SOI3ibs = ISts * (evbs-1); here->SOI3gbs = ISts*evbs/((model->SOI3etad)*vT); here->SOI3gbsT = ISts*((evbs-1)*model->SOI3chid/(tmp*tmp) - evbs*vbs*model->SOI3dvt/((model->SOI3etad)*vT*tmp1)); /* Now Bipolar */ here->SOI3iBJTdb = alphaBJT * ISts * (evbs-1); here->SOI3gBJTdb_bs = alphaBJT * here->SOI3gbs; here->SOI3gBJTdb_deltaT = alphaBJT * here->SOI3gbsT; /* Now second junction and gmin */ /* JimB - make gmin code consistent */ here->SOI3ibs += IS1ts * (evbs1-1) + ckt->CKTgmin*vbs; here->SOI3gbs += IS1ts*evbs1/((model->SOI3etad1)*vT) + ckt->CKTgmin; /* End JimB */ here->SOI3gbsT += IS1ts*((evbs1-1)*model->SOI3chid1/(tmp*tmp) - evbs1*vbs*model->SOI3dvt/((model->SOI3etad1)*vT*tmp1) ); IStd = DrainSatCur*EchiD; IS1td = DrainSatCur1*EchiD1; evbd = exp(MIN(MAX_EXP_ARG,vbd/((model->SOI3etad)*vT))); evbd1 = exp(MIN(MAX_EXP_ARG,vbd/((model->SOI3etad1)*vT))); /* First Junction */ here->SOI3ibd = IStd *(evbd-1); here->SOI3gbd = IStd*evbd/((model->SOI3etad)*vT); here->SOI3gbdT = IStd*((evbd-1)*model->SOI3chid/(tmp*tmp) - evbd*vbd*model->SOI3dvt/((model->SOI3etad)*vT*tmp1)); /* Now Bipolar */ here->SOI3iBJTsb = alphaBJT * IStd *(evbd-1); here->SOI3gBJTsb_bd = alphaBJT * here->SOI3gbd; here->SOI3gBJTsb_deltaT = alphaBJT * here->SOI3gbdT; /* Now second junction and gmin */ /* JimB - make gmin code consistent */ here->SOI3ibd += IS1td *(evbd1-1) + ckt->CKTgmin*vbd; here->SOI3gbd += IS1td*evbd1/((model->SOI3etad1)*vT) + ckt->CKTgmin; /* End JimB */ here->SOI3gbdT += IS1td*((evbd1-1)*model->SOI3chid1/(tmp*tmp) - evbd1*vbd*model->SOI3dvt/((model->SOI3etad1)*vT*tmp1) ); /* initialise von for voltage limiting purposes */ von = (here->SOI3tVfbF * model->SOI3type) + psi_s0 + gamma*sqt0 + sigma*(here->SOI3mode*vds) - model->SOI3chiFB*deltaT; /* finally if we're going to do charge/capacitance calcs, store * some stuff to pass to function. Need to use arrays 'cos there's * a limit to how many parameters you can pass in standard C */ paramargs[0] = here->SOI3w*model->SOI3frontOxideCapFactor; paramargs[1] = EffectiveLength; paramargs[2] = gamma; paramargs[3] = eta_s; paramargs[4] = vt; paramargs[5] = delta; paramargs[6] = here->SOI3w*model->SOI3backOxideCapFactor; paramargs[7] = sigma; paramargs[8] = model->SOI3chiFB; paramargs[9] = model->SOI3satChargeShareFactor; Bfargs[0] = Bf; Bfargs[1] = pDBf_Dpsi_st0; alpha_args[0] = alpha; alpha_args[1] = Dalpha_Dvgfb; alpha_args[2] = Dalpha_Dvdb; alpha_args[3] = Dalpha_Dvsb; alpha_args[4] = Dalpha_DdeltaT; psi_st0args[0] = psi_st0; psi_st0args[1] = Dpsi_st0_Dvgfb; psi_st0args[2] = Dpsi_st0_Dvdb; psi_st0args[3] = Dpsi_st0_Dvsb; psi_st0args[4] = Dpsi_st0_DdeltaT; vGTargs[0] = vGT; vGTargs[1] = DvGT_Dvgfb; vGTargs[2] = DvGT_Dvdb; vGTargs[3] = DvGT_Dvsb; vGTargs[4] = DvGT_DdeltaT; psi_sLargs[0] = psi_sL; psi_sLargs[1] = Dpsi_sL_Dvgfb; psi_sLargs[2] = Dpsi_sL_Dvdb; psi_sLargs[3] = Dpsi_sL_Dvsb; psi_sLargs[4] = Dpsi_sL_DdeltaT; psi_s0args[0] = psi_s0; psi_s0args[1] = Dpsi_s0_Dvgfb; psi_s0args[2] = Dpsi_s0_Dvdb; psi_s0args[3] = Dpsi_s0_Dvsb; psi_s0args[4] = Dpsi_s0_DdeltaT; ldargs[0] = ld; ldargs[1] = Dld_Dvgfb; ldargs[2] = Dld_Dvdb; ldargs[3] = Dld_Dvsb; ldargs[4] = Dld_DdeltaT; /* debug stuff */ here->SOI3debug1 = psi_sL; here->SOI3debug2 = psi_s0; here->SOI3debug3 = fL; here->SOI3debug4 = f0; here->SOI3debug5 = gmd; here->SOI3debug6 = gms; } /* end block */ /* now deal with n vs p polarity */ here->SOI3von = model->SOI3type * von; here->SOI3vdsat = model->SOI3type * vdsat_ext; /* line 490 */ /* * COMPUTE EQUIVALENT DRAIN CURRENT SOURCE * OLD here->SOI3id=here->SOI3mode * idrain - here->SOI3ibd; */ if (here->SOI3mode==1) { here->SOI3id= idrain - here->SOI3ibd + here->SOI3iMdb + here->SOI3iBJTdb; } else { here->SOI3id= -idrain - here->SOI3ibd + here->SOI3iBJTdb; } /* JimB - 4/1/99 */ /* Tidy up depletion capacitance code, and remove unwanted */ /* compile options. */ if (ckt->CKTmode & (MODETRAN | MODETRANOP | MODEINITSMSIG)) { /* * Now we do the hard part of the bulk-drain and bulk-source * diode - we evaluate the non-linear capacitance and * charge * * The basic equations are not hard, but the implementation * is somewhat long in an attempt to avoid log/exponential * evaluations. This is because most users use the default * grading coefficients of 0.5, and sqrt is MUCH faster than * an exp(log()), so we use this special case to buy time - * as much as 10% of total job time! */ /******** Bulk-source depletion capacitance ********/ #ifdef CAPBYPASS if(((ckt->CKTmode & (MODEINITPRED | MODEINITTRAN) ) || fabs(delvbs) >= ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->SOI3vbs)))+ ckt->CKTvoltTol)) #endif /*CAPBYPASS*/ { if(here->SOI3Cbs != 0) { if (vbs < here->SOI3tDepCap) { arg=1-vbs/here->SOI3tBulkPot; if(model->SOI3bulkJctSideGradingCoeff == 0.5) { sarg = 1/sqrt(arg); } else { sarg = exp(-model->SOI3bulkJctSideGradingCoeff* log(arg)); } *(ckt->CKTstate0 + here->SOI3qbs) = here->SOI3tBulkPot*(here->SOI3Cbs* (1-arg*sarg)/(1-model->SOI3bulkJctSideGradingCoeff)); here->SOI3capbs=here->SOI3Cbs*sarg; } else { *(ckt->CKTstate0 + here->SOI3qbs) = here->SOI3f4s + vbs*(here->SOI3f2s+vbs*(here->SOI3f3s/2)); here->SOI3capbs=here->SOI3f2s+here->SOI3f3s*vbs; } } else { *(ckt->CKTstate0 + here->SOI3qbs) = 0; here->SOI3capbs=0; } } /******** End bulk-source depletion capcitance ********/ /******** Bulk-drain depletion capacitance ********/ #ifdef CAPBYPASS if(((ckt->CKTmode & (MODEINITPRED | MODEINITTRAN) ) || fabs(delvbd) >= ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0+here->SOI3vbd)))+ ckt->CKTvoltTol)) #endif /*CAPBYPASS*/ { if(here->SOI3Cbd != 0) { if (vbd < here->SOI3tDepCap) { arg=1-vbd/here->SOI3tBulkPot; if(model->SOI3bulkJctSideGradingCoeff == 0.5) { sarg = 1/sqrt(arg); } else { sarg = exp(-model->SOI3bulkJctSideGradingCoeff* log(arg)); } *(ckt->CKTstate0 + here->SOI3qbd) = here->SOI3tBulkPot*(here->SOI3Cbd* (1-arg*sarg)/(1-model->SOI3bulkJctSideGradingCoeff)); here->SOI3capbd=here->SOI3Cbd*sarg; } else { *(ckt->CKTstate0 + here->SOI3qbd) = here->SOI3f4d + vbd * (here->SOI3f2d + vbd *(here->SOI3f3d/2)); here->SOI3capbd=here->SOI3f2d + vbd * here->SOI3f3d; } } else { *(ckt->CKTstate0 + here->SOI3qbd) = 0; here->SOI3capbd = 0; } } /******** End bulk-drain depletion capacitance ********/ /* Need to work out charge on thermal cap */ *(ckt->CKTstate0 + here->SOI3qt) = here->SOI3ct * deltaT1; *(ckt->CKTstate0 + here->SOI3qt1) = here->SOI3ct1 * deltaT2; *(ckt->CKTstate0 + here->SOI3qt2) = here->SOI3ct2 * deltaT3; *(ckt->CKTstate0 + here->SOI3qt3) = here->SOI3ct3 * deltaT4; *(ckt->CKTstate0 + here->SOI3qt4) = here->SOI3ct4 * deltaT5; /* ct is constant, so integral is trivial */ if ( (ckt->CKTmode & MODETRAN) || ( (ckt->CKTmode&MODEINITTRAN) && !(ckt->CKTmode&MODEUIC)) ) { /* (above only excludes tranop, since we're only at this * point if tran or tranop ) */ /* * calculate equivalent conductances and currents for * depletion capacitors */ /* integrate the capacitors and save results */ error = NIintegrate(ckt,&geq,&ieq,here->SOI3capbd, here->SOI3qbd); if(error) return(error); here->SOI3gbd += geq; here->SOI3ibd += *(ckt->CKTstate0 + here->SOI3iqbd); here->SOI3id -= *(ckt->CKTstate0 + here->SOI3iqbd); error = NIintegrate(ckt,&geq,&ieq,here->SOI3capbs, here->SOI3qbs); if(error) return(error); here->SOI3gbs += geq; here->SOI3ibs += *(ckt->CKTstate0 + here->SOI3iqbs); } } /* * check convergence */ if ( (here->SOI3off == 0) || (!(ckt->CKTmode & (MODEINITFIX|MODEINITSMSIG))) ){ if (Check == 1) { ckt->CKTnoncon++; } } /* * new capacitor model */ if ((ckt->CKTmode & (MODETRAN | MODEAC | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) ){ /* * calculate charges and capacitances */ /* * Partially Depleted model => back surface neglected * so back capacitances are ignored. */ /* * All the args assume vsb and vdb are 'correct' * so must make sure we're getting right values * back. */ if (here->SOI3mode > 0) { SOI3cap((vgbb-here->SOI3tVfbB),(here->SOI3tPhi + vsb),model->SOI3gammaB, paramargs, Bfargs,alpha_args,psi_st0args, vGTargs, psi_sLargs,psi_s0args, ldargs, &qgatef,&qbody,&qdrn,&qgateb, &cgfgf,&cgfd,&cgfs,&cgfdeltaT,&cgfgb, &cbgf,&cbd,&cbs,&cbdeltaT,&cbgb, &cdgf,&cdd,&cds,&cddeltaT,&cdgb, &cgbgf,&cgbd,&cgbs,&cgbdeltaT,&cgbgb); csgf = -(cgfgf + cdgf + cbgf + cgbgf); csd = -(cgfd + cdd + cbd + cgbd); css = -(cgfs + cds + cbs + cgbs); csdeltaT = -(cgfdeltaT + cddeltaT + cbdeltaT + cgbdeltaT); csgb = -(cgfgb + cdgb + cbgb + cgbgb); } else { SOI3cap((vgbb-here->SOI3tVfbB),(here->SOI3tPhi + vdb),model->SOI3gammaB, paramargs, Bfargs,alpha_args,psi_st0args, vGTargs, psi_sLargs,psi_s0args, ldargs, &qgatef,&qbody,&qsrc,&qgateb, &cgfgf,&cgfs,&cgfd,&cgfdeltaT,&cgfgb, &cbgf,&cbs,&cbd,&cbdeltaT,&cbgb, &csgf,&css,&csd,&csdeltaT,&csgb, &cgbgf,&cgbs,&cgbd,&cgbdeltaT,&cgbgb); cdgf = -(cgfgf + csgf + cbgf + cgbgf); cdd = -(cgfd + csd + cbd + cgbd); cds = -(cgfs + css + cbs + cgbs); cddeltaT = -(cgfdeltaT + csdeltaT + cbdeltaT + cgbdeltaT); cdgb = -(cgfgb + csgb + cbgb + cgbgb); } *(ckt->CKTstate0 + here->SOI3cgfgf) = cgfgf; *(ckt->CKTstate0 + here->SOI3cgfd) = cgfd; *(ckt->CKTstate0 + here->SOI3cgfs) = cgfs; *(ckt->CKTstate0 + here->SOI3cgfdeltaT) = cgfdeltaT; *(ckt->CKTstate0 + here->SOI3cgfgb) = cgfgb; *(ckt->CKTstate0 + here->SOI3csgf) = csgf; *(ckt->CKTstate0 + here->SOI3csd) = csd; *(ckt->CKTstate0 + here->SOI3css) = css; *(ckt->CKTstate0 + here->SOI3csdeltaT) = csdeltaT; *(ckt->CKTstate0 + here->SOI3csgb) = csgb; *(ckt->CKTstate0 + here->SOI3cdgf) = cdgf; *(ckt->CKTstate0 + here->SOI3cdd) = cdd; *(ckt->CKTstate0 + here->SOI3cds) = cds; *(ckt->CKTstate0 + here->SOI3cddeltaT) = cddeltaT; *(ckt->CKTstate0 + here->SOI3cdgb) = cdgb; *(ckt->CKTstate0 + here->SOI3cgbgf) = cgbgf; *(ckt->CKTstate0 + here->SOI3cgbd) = cgbd; *(ckt->CKTstate0 + here->SOI3cgbs) = cgbs; *(ckt->CKTstate0 + here->SOI3cgbdeltaT) = cgbdeltaT; *(ckt->CKTstate0 + here->SOI3cgbgb) = cgbgb; /* got charges and caps now, must get equiv conductances/current sources * but first work out charge and caps for BJT charge storage */ if ((model->SOI3tauEXP) != 2.0) { if ((model->SOI3tauEXP) != 1.0) { tauFBJTeff = model->SOI3tauFBJT * exp((model->SOI3tauEXP)*logL); tauRBJTeff = model->SOI3tauRBJT * exp((model->SOI3tauEXP)*logL); } else { tauFBJTeff = model->SOI3tauFBJT*EffectiveLength; tauRBJTeff = model->SOI3tauRBJT*EffectiveLength; } } else { tauFBJTeff = model->SOI3tauFBJT*(EffectiveLength*EffectiveLength); tauRBJTeff = model->SOI3tauRBJT*(EffectiveLength*EffectiveLength); } *(ckt->CKTstate0 + here->SOI3qBJTbs) = tauFBJTeff * here->SOI3iBJTdb; *(ckt->CKTstate0 + here->SOI3cBJTbsbs) = tauFBJTeff * here->SOI3gBJTdb_bs; *(ckt->CKTstate0 + here->SOI3cBJTbsdeltaT) = tauFBJTeff * here->SOI3gBJTdb_deltaT; *(ckt->CKTstate0 + here->SOI3qBJTbd) = tauRBJTeff * here->SOI3iBJTsb; *(ckt->CKTstate0 + here->SOI3cBJTbdbd) = tauRBJTeff * here->SOI3gBJTsb_bd; *(ckt->CKTstate0 + here->SOI3cBJTbddeltaT) = tauRBJTeff * here->SOI3gBJTsb_deltaT; } /* end of charge/cap calculations */ /* save things away for next time */ *(ckt->CKTstate0 + here->SOI3vbs) = vbs; *(ckt->CKTstate0 + here->SOI3vbd) = vbd; *(ckt->CKTstate0 + here->SOI3vgfs) = vgfs; *(ckt->CKTstate0 + here->SOI3vgbs) = vgbs; *(ckt->CKTstate0 + here->SOI3vds) = vds; *(ckt->CKTstate0 + here->SOI3deltaT) = deltaT; *(ckt->CKTstate0 + here->SOI3deltaT1) = deltaT1; *(ckt->CKTstate0 + here->SOI3deltaT2) = deltaT2; *(ckt->CKTstate0 + here->SOI3deltaT3) = deltaT3; *(ckt->CKTstate0 + here->SOI3deltaT4) = deltaT4; *(ckt->CKTstate0 + here->SOI3deltaT5) = deltaT5; *(ckt->CKTstate0 + here->SOI3idrain) = idrain; if((!(ckt->CKTmode & (MODETRAN | MODEAC))) && ((!(ckt->CKTmode & MODETRANOP)) || (!(ckt->CKTmode & MODEUIC))) && (!(ckt->CKTmode & MODEINITSMSIG))) goto bypass2; #ifndef NOBYPASS bypass1: #endif if (here->SOI3mode>0) { Frontcapargs[0] = FrontGateDrainOverlapCap; Frontcapargs[1] = FrontGateSourceOverlapCap; Frontcapargs[2] = FrontGateBulkOverlapCap; Frontcapargs[3] = vgfd; Frontcapargs[4] = vgfs; Frontcapargs[5] = vgfb; Backcapargs[0] = BackGateDrainOverlapCap; Backcapargs[1] = BackGateSourceOverlapCap; Backcapargs[2] = BackGateBulkOverlapCap; Backcapargs[3] = vgbd; Backcapargs[4] = vgbs; Backcapargs[5] = vgbb; SOI3capEval(ckt, Frontcapargs, Backcapargs, cgfgf,cgfd,cgfs,cgfdeltaT,cgfgb, cdgf,cdd,cds,cddeltaT,cdgb, csgf,csd,css,csdeltaT,csgb, cbgf,cbd,cbs,cbdeltaT,cbgb, cgbgf,cgbd,cgbs,cgbdeltaT,cgbgb, &gcgfgf,&gcgfd,&gcgfs,&gcgfdeltaT,&gcgfgb, &gcdgf,&gcdd,&gcds,&gcddeltaT,&gcdgb, &gcsgf,&gcsd,&gcss,&gcsdeltaT,&gcsgb, &gcbgf,&gcbd,&gcbs,&gcbdeltaT,&gcbgb, &gcgbgf,&gcgbd,&gcgbs,&gcgbdeltaT,&gcgbgb, &qgatef,&qbody,&qdrn,&qsrc,&qgateb); } else { Frontcapargs[0] = FrontGateSourceOverlapCap; Frontcapargs[1] = FrontGateDrainOverlapCap; Frontcapargs[2] = FrontGateBulkOverlapCap; Frontcapargs[3] = vgfs; Frontcapargs[4] = vgfd; Frontcapargs[5] = vgfb; Backcapargs[0] = BackGateSourceOverlapCap; Backcapargs[1] = BackGateDrainOverlapCap; Backcapargs[2] = BackGateBulkOverlapCap; Backcapargs[3] = vgbs; Backcapargs[4] = vgbd; Backcapargs[5] = vgbb; SOI3capEval(ckt, Frontcapargs, Backcapargs, cgfgf,cgfs,cgfd,cgfdeltaT,cgfgb, csgf,css,csd,csdeltaT,csgb, cdgf,cds,cdd,cddeltaT,cdgb, cbgf,cbs,cbd,cbdeltaT,cbgb, cgbgf,cgbs,cgbd,cgbdeltaT,cgbgb, &gcgfgf,&gcgfs,&gcgfd,&gcgfdeltaT,&gcgfgb, &gcsgf,&gcss,&gcsd,&gcsdeltaT,&gcsgb, &gcdgf,&gcds,&gcdd,&gcddeltaT,&gcdgb, &gcbgf,&gcbs,&gcbd,&gcbdeltaT,&gcbgb, &gcgbgf,&gcgbs,&gcgbd,&gcgbdeltaT,&gcgbgb, &qgatef,&qbody,&qsrc,&qdrn,&qgateb); } ag0 = ckt->CKTag[0]; gcBJTbsbs = ag0 * *(ckt->CKTstate0+here->SOI3cBJTbsbs); gcBJTbsdeltaT = ag0 * *(ckt->CKTstate0+here->SOI3cBJTbsdeltaT); gcBJTbdbd = ag0 * *(ckt->CKTstate0+here->SOI3cBJTbdbd); gcBJTbddeltaT = ag0 * *(ckt->CKTstate0+here->SOI3cBJTbddeltaT); if (ByPass) goto line860; /* already stored charges */ *(ckt->CKTstate0 + here->SOI3qgf) = qgatef; *(ckt->CKTstate0 + here->SOI3qd) = qdrn; *(ckt->CKTstate0 + here->SOI3qs) = qsrc; *(ckt->CKTstate0 + here->SOI3qgb) = qgateb; /* NB, we've kept charge/cap associated with diodes separately */ if((!(ckt->CKTmode & (MODEAC | MODETRAN))) && (ckt->CKTmode & MODETRANOP ) && (ckt->CKTmode & MODEUIC )) goto bypass2; /* store small signal parameters */ if(ckt->CKTmode & MODEINITSMSIG ) { *(ckt->CKTstate0+here->SOI3cgfgf) = cgfgf; *(ckt->CKTstate0+here->SOI3cgfd) = cgfd; *(ckt->CKTstate0+here->SOI3cgfs) = cgfs; *(ckt->CKTstate0+here->SOI3cgfdeltaT) = cgfdeltaT; *(ckt->CKTstate0+here->SOI3cgfgb) = cgfgb; *(ckt->CKTstate0+here->SOI3cdgf) = cdgf; *(ckt->CKTstate0+here->SOI3cdd) = cdd; *(ckt->CKTstate0+here->SOI3cds) = cds; *(ckt->CKTstate0+here->SOI3cddeltaT) = cddeltaT; *(ckt->CKTstate0+here->SOI3cdgb) = cdgb; *(ckt->CKTstate0+here->SOI3csgf) = csgf; *(ckt->CKTstate0+here->SOI3csd) = csd; *(ckt->CKTstate0+here->SOI3css) = css; *(ckt->CKTstate0+here->SOI3csdeltaT) = csdeltaT; *(ckt->CKTstate0+here->SOI3csgb) = csgb; *(ckt->CKTstate0+here->SOI3cgbgf) = cgbgf; *(ckt->CKTstate0+here->SOI3cgbd) = cgbd; *(ckt->CKTstate0+here->SOI3cgbs) = cgbs; *(ckt->CKTstate0+here->SOI3cgbdeltaT) = cgbdeltaT; *(ckt->CKTstate0+here->SOI3cgbgb) = cgbgb; goto End; } if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->SOI3qgf) = *(ckt->CKTstate0 + here->SOI3qgf); *(ckt->CKTstate1 + here->SOI3qd) = *(ckt->CKTstate0 + here->SOI3qd); *(ckt->CKTstate1 + here->SOI3qs) = *(ckt->CKTstate0 + here->SOI3qs); *(ckt->CKTstate1 + here->SOI3qgb) = *(ckt->CKTstate0 + here->SOI3qgb); *(ckt->CKTstate1 + here->SOI3qBJTbs) = *(ckt->CKTstate0 + here->SOI3qBJTbs); *(ckt->CKTstate1 + here->SOI3qBJTbd) = *(ckt->CKTstate0 + here->SOI3qBJTbd); } /* * numerical integration of intrinsic caps * and BJT caps */ error = NIintegrate(ckt,&geq,&ieq,0.0,here->SOI3qgf); if(error) return(error); error = NIintegrate(ckt,&geq,&ieq,0.0,here->SOI3qd); if(error) return(error); error = NIintegrate(ckt,&geq,&ieq,0.0,here->SOI3qs); if(error) return(error); error = NIintegrate(ckt,&geq,&ieq,0.0,here->SOI3qgb); if(error) return(error); error = NIintegrate(ckt,&geq,&ieq,0.0,here->SOI3qBJTbs); if(error) return(error); error = NIintegrate(ckt,&geq,&ieq,0.0,here->SOI3qBJTbd); if(error) return(error); goto line860; bypass2: /* * initialize to zero charge conductances * and current (DC and TRANOP) */ ieqqgf = ieqqd = ieqqs = ieqqgb = 0.0; gcgfgf = gcgfd = gcgfs = gcgfdeltaT = gcgfgb = 0.0; gcdgf = gcdd = gcds = gcddeltaT = gcdgb = 0.0; gcsgf = gcsd = gcss = gcsdeltaT = gcsgb = 0.0; gcbgf = gcbd = gcbs = gcbdeltaT = gcbgb = 0.0; gcgbgf = gcgbd = gcgbs = gcgbdeltaT = gcgbgb = 0.0; gct[0]=gct[1]=gct[2]=gct[3]=gct[4]=0.0; ieqct=ieqct1=ieqct2=ieqct3=ieqct4=0.0; ieqqBJTbs = ieqqBJTbd = 0.0; gcBJTbsbs = gcBJTbsdeltaT = gcBJTbdbd = gcBJTbddeltaT = 0.0; goto LoadUp; line860: /* evaluate equivalent charge currents */ ieqqgf = *(ckt->CKTstate0 + here->SOI3iqgf) - gcgfgf * vgfb - gcgfd * vdb - gcgfs * vsb - gcgfdeltaT * deltaT - gcgfgb * vgbb; ieqqd = *(ckt->CKTstate0 + here->SOI3iqd) - gcdgf * vgfb - gcdd * vdb - gcds * vsb - gcddeltaT * deltaT - gcdgb * vgbb; ieqqs = *(ckt->CKTstate0 + here->SOI3iqs) - gcsgf * vgfb - gcsd * vdb - gcss * vsb - gcsdeltaT * deltaT - gcsgb * vgbb; ieqqgb = *(ckt->CKTstate0 + here->SOI3iqgb) - gcgbgf * vgfb - gcgbd * vdb - gcgbs * vsb - gcgbdeltaT * deltaT - gcgbgb * vgbb; ieqqBJTbs = *(ckt->CKTstate0 + here->SOI3iqBJTbs) - gcBJTbsbs * vbs - gcBJTbsdeltaT * deltaT; ieqqBJTbd = *(ckt->CKTstate0 + here->SOI3iqBJTbd) - gcBJTbdbd * vbd - gcBJTbddeltaT * deltaT; /* now for the thermal capacitance is constant and linear so no need to fart about with equiv current */ error = NIintegrate(ckt,&gct[0],&ieqct,here->SOI3ct, here->SOI3qt); if(error) return(error); error = NIintegrate(ckt,&gct[1],&ieqct1,here->SOI3ct1, here->SOI3qt1); if(error) return(error); error = NIintegrate(ckt,&gct[2],&ieqct2,here->SOI3ct2, here->SOI3qt2); if(error) return(error); error = NIintegrate(ckt,&gct[3],&ieqct3,here->SOI3ct3, here->SOI3qt3); if(error) return(error); error = NIintegrate(ckt,&gct[4],&ieqct4,here->SOI3ct4, here->SOI3qt4); if(error) return(error); LoadUp: /* * load current vector */ m = here->SOI3m; ieqbs = model->SOI3type * (here->SOI3ibs-(here->SOI3gbs-ckt->CKTgmin)*vbs -(here->SOI3gbsT)*deltaT); ieqbd = model->SOI3type * (here->SOI3ibd-(here->SOI3gbd-ckt->CKTgmin)*vbd -(here->SOI3gbdT)*deltaT); iBJTdbeq = model->SOI3type * (here->SOI3iBJTdb -(here->SOI3gBJTdb_bs)*vbs -(here->SOI3gBJTdb_deltaT)*deltaT); iBJTsbeq = model->SOI3type * (here->SOI3iBJTsb -(here->SOI3gBJTsb_bd)*vbd -(here->SOI3gBJTsb_deltaT)*deltaT); ieqPt = here->SOI3iPt - (here->SOI3gPds*(here->SOI3mode*vds)+ here->SOI3gPmf*(here->SOI3mode==1?vgfs:vgfd)+ here->SOI3gPmb*(here->SOI3mode==1?vgbs:vgbd)+ here->SOI3gPmbs*(here->SOI3mode==1?vbs:vbd)+ here->SOI3gPdT*(deltaT)); if (here->SOI3mode >= 0) { xnrm=1; xrev=0; idreq=model->SOI3type*(idrain-here->SOI3gds*vds- here->SOI3gmf*vgfs-here->SOI3gmbs*vbs- here->SOI3gmb*vgbs-here->SOI3gt*deltaT); iMdbeq=model->SOI3type*(here->SOI3iMdb-here->SOI3gMd*vds- here->SOI3gMmf*vgfs-here->SOI3gMmbs*vbs- here->SOI3gMmb*vgbs-here->SOI3gMdeltaT*deltaT); iMsbeq=0; } else { xnrm=0; xrev=1; idreq = -(model->SOI3type)*(idrain-here->SOI3gds*(-vds)- here->SOI3gmf*vgfd-here->SOI3gmbs*vbd- here->SOI3gmb*vgbd-here->SOI3gt*deltaT); iMsbeq= (model->SOI3type)*(here->SOI3iMsb-here->SOI3gMd*(-vds)- here->SOI3gMmf*vgfd-here->SOI3gMmbs*vbd- here->SOI3gMmb*vgbd-here->SOI3gMdeltaT*deltaT); iMdbeq = 0; } *(ckt->CKTrhs + here->SOI3gfNode) -= m * (model->SOI3type * ieqqgf); *(ckt->CKTrhs + here->SOI3gbNode) -= m * (model->SOI3type * ieqqgb); *(ckt->CKTrhs + here->SOI3bNode) += m * (-(ieqbs + ieqbd) + iMdbeq + iMsbeq /* one is 0 */ +iBJTdbeq + iBJTsbeq + model->SOI3type * (ieqqgf + ieqqd + ieqqs + ieqqgb) - model->SOI3type * (ieqqBJTbs + ieqqBJTbd)); *(ckt->CKTrhs + here->SOI3dNodePrime) += m * ((ieqbd-idreq) - iMdbeq - iBJTdbeq - model->SOI3type * (ieqqd) + model->SOI3type * (ieqqBJTbd)); *(ckt->CKTrhs + here->SOI3sNodePrime) += m * ((idreq + ieqbs) - iMsbeq - iBJTsbeq - model->SOI3type * (ieqqs) + model->SOI3type * (ieqqBJTbs)); *(ckt->CKTrhs + here->SOI3toutNode) += m * (ieqPt-ieqct); if (here->SOI3numThermalNodes > 1) { *(ckt->CKTrhs + here->SOI3tout1Node) += m * (ieqct-ieqct1); } if (here->SOI3numThermalNodes > 2) { *(ckt->CKTrhs + here->SOI3tout2Node) += m * (ieqct1-ieqct2); } if (here->SOI3numThermalNodes > 3) { *(ckt->CKTrhs + here->SOI3tout3Node) += m * (ieqct2-ieqct3); } if (here->SOI3numThermalNodes > 4) { *(ckt->CKTrhs + here->SOI3tout4Node) += m * (ieqct3-ieqct4); } /* load y matrix */ *(here->SOI3D_dPtr) += m * (here->SOI3drainConductance); *(here->SOI3D_dpPtr) += m * (-here->SOI3drainConductance); *(here->SOI3DP_dPtr) += m * (-here->SOI3drainConductance); *(here->SOI3S_sPtr) += m * (here->SOI3sourceConductance); *(here->SOI3S_spPtr) += m * (-here->SOI3sourceConductance); *(here->SOI3SP_sPtr) += m * (-here->SOI3sourceConductance); *(here->SOI3GF_gfPtr) += m * gcgfgf; *(here->SOI3GF_dpPtr) += m * gcgfd; *(here->SOI3GF_spPtr) += m * gcgfs; *(here->SOI3GF_gbPtr) += m * gcgfgb; *(here->SOI3GF_bPtr) -= m * (gcgfgf + gcgfd + gcgfs + gcgfgb); *(here->SOI3DP_gfPtr) += m * ((xnrm-xrev)*here->SOI3gmf + gcdgf+ xnrm*here->SOI3gMmf); *(here->SOI3DP_dpPtr) += m * ((here->SOI3drainConductance+here->SOI3gds+ here->SOI3gbd+xrev*(here->SOI3gmf+here->SOI3gmbs+ here->SOI3gmb)+xnrm*here->SOI3gMd + gcdd)+ gcBJTbdbd); *(here->SOI3DP_spPtr) += m * ((-here->SOI3gds - here->SOI3gBJTdb_bs -xnrm*(here->SOI3gmf+here->SOI3gmb+here->SOI3gmbs + here->SOI3gMmf+here->SOI3gMmb+here->SOI3gMmbs+here->SOI3gMd)) + gcds); *(here->SOI3DP_gbPtr) += m * (((xnrm-xrev)*here->SOI3gmb + xnrm*here->SOI3gMmb) + gcdgb); *(here->SOI3DP_bPtr) += m * ((-here->SOI3gbd + here->SOI3gBJTdb_bs + (xnrm-xrev)*here->SOI3gmbs + xnrm*here->SOI3gMmbs) - (gcdgf + gcdd + gcds + gcdgb + gcBJTbdbd)); *(here->SOI3SP_gfPtr) += m * ((-(xnrm-xrev)*here->SOI3gmf+ xrev*here->SOI3gMmf) + gcsgf); *(here->SOI3SP_dpPtr) += m * ((-here->SOI3gds - here->SOI3gBJTsb_bd -xrev*(here->SOI3gmf+here->SOI3gmb+here->SOI3gmbs+ here->SOI3gMmf+here->SOI3gMmb+here->SOI3gMmbs+here->SOI3gMd)) + gcsd); *(here->SOI3SP_spPtr) += m * ((here->SOI3sourceConductance+here->SOI3gds+ here->SOI3gbs+xnrm*(here->SOI3gmf+here->SOI3gmbs+ here->SOI3gmb)+xrev*here->SOI3gMd + gcss)+ gcBJTbsbs); *(here->SOI3SP_gbPtr) += m * ((-(xnrm-xrev)*here->SOI3gmb+ xrev*here->SOI3gMmb) + gcsgb); *(here->SOI3SP_bPtr) += m * ((-here->SOI3gbs + here->SOI3gBJTsb_bd - (xnrm-xrev)*here->SOI3gmbs+ xrev*here->SOI3gMmbs) - (gcsgf + gcsd + gcss + gcsgb + gcBJTbsbs)); *(here->SOI3GB_gfPtr) += m * gcgbgf; *(here->SOI3GB_dpPtr) += m * gcgbd; *(here->SOI3GB_spPtr) += m * gcgbs; *(here->SOI3GB_gbPtr) += m * gcgbgb; *(here->SOI3GB_bPtr) -= m * (gcgbgf + gcgbd + gcgbs + gcgbgb); *(here->SOI3B_gfPtr) += m * (-here->SOI3gMmf + gcbgf); *(here->SOI3B_dpPtr) += m * (-(here->SOI3gbd) + here->SOI3gBJTsb_bd + xrev*(here->SOI3gMmf+here->SOI3gMmb+ here->SOI3gMmbs+here->SOI3gMd) - xnrm*here->SOI3gMd + gcbd - gcBJTbdbd); *(here->SOI3B_spPtr) += m * (-(here->SOI3gbs) + here->SOI3gBJTdb_bs + xnrm*(here->SOI3gMmf+here->SOI3gMmb+ here->SOI3gMmbs+here->SOI3gMd) - xrev*here->SOI3gMd + gcbs - gcBJTbsbs); *(here->SOI3B_gbPtr) += m * (-(here->SOI3gMmb) + gcbgb); *(here->SOI3B_bPtr) += m * ((here->SOI3gbd+here->SOI3gbs - here->SOI3gMmbs - here->SOI3gBJTdb_bs - here->SOI3gBJTsb_bd) - (gcbgf+gcbd+gcbs+gcbgb) + gcBJTbsbs+gcBJTbdbd); /* if no thermal behaviour specified, then put in zero valued indpt. voltage source between TOUT and ground */ if (here->SOI3rt==0) { *(here->SOI3TOUT_ibrPtr) += m * 1.0 ; *(here->SOI3IBR_toutPtr) += m * 1.0 ; *(ckt->CKTrhs + (here->SOI3branch)) = 0 ; } else { *(here->SOI3TOUT_toutPtr) += m * (-(here->SOI3gPdT)+grt[0]+gct[0]); if (here->SOI3numThermalNodes > 1) { *(here->SOI3TOUT_tout1Ptr) += m * (-grt[0]-gct[0]); *(here->SOI3TOUT1_toutPtr) += m * (-grt[0]-gct[0]); *(here->SOI3TOUT1_tout1Ptr) += m * (grt[0]+grt[1]+gct[0]+gct[1]); } if (here->SOI3numThermalNodes > 2) { *(here->SOI3TOUT1_tout2Ptr) += m * (-grt[1]-gct[1]); *(here->SOI3TOUT2_tout1Ptr) += m * (-grt[1]-gct[1]); *(here->SOI3TOUT2_tout2Ptr) += m * (grt[1]+grt[2]+gct[1]+gct[2]); } if (here->SOI3numThermalNodes > 3) { *(here->SOI3TOUT2_tout3Ptr) += m * (-grt[2]-gct[2]); *(here->SOI3TOUT3_tout2Ptr) += m * (-grt[2]-gct[2]); *(here->SOI3TOUT3_tout3Ptr) += m * (grt[2]+grt[3]+gct[2]+gct[3]); } if (here->SOI3numThermalNodes > 4) { *(here->SOI3TOUT3_tout4Ptr) += m * (-grt[3]-gct[3]); *(here->SOI3TOUT4_tout3Ptr) += m * (-grt[3]-gct[3]); *(here->SOI3TOUT4_tout4Ptr) += m * (grt[3]+grt[4]+gct[3]+gct[4]); } *(here->SOI3TOUT_dpPtr) += m * (xnrm*(-(here->SOI3gPds*model->SOI3type)) +xrev*(here->SOI3gPds+here->SOI3gPmf+ here->SOI3gPmb+here->SOI3gPmbs)* model->SOI3type); *(here->SOI3TOUT_gfPtr) += m * (-(here->SOI3gPmf*model->SOI3type)); *(here->SOI3TOUT_gbPtr) += m * (-(here->SOI3gPmb*model->SOI3type)); *(here->SOI3TOUT_bPtr) += m * (-(here->SOI3gPmbs*model->SOI3type)); *(here->SOI3TOUT_spPtr) += m * (xnrm*(here->SOI3gPds+here->SOI3gPmf+ here->SOI3gPmb+here->SOI3gPmbs)*model->SOI3type +xrev*(-(here->SOI3gPds*model->SOI3type))); *(here->SOI3DP_toutPtr) += m * (xnrm-xrev)*here->SOI3gt*model->SOI3type; *(here->SOI3SP_toutPtr) += m * (xrev-xnrm)*here->SOI3gt*model->SOI3type; /* need to mult by type in above as conductances will be used with exterior voltages which will be -ve for PMOS except for gPdT */ /* now for thermal influence on impact ionisation current and tranisent stuff */ *(here->SOI3GF_toutPtr) += m * gcgfdeltaT*model->SOI3type; *(here->SOI3DP_toutPtr) += m * (xnrm*here->SOI3gMdeltaT + gcddeltaT - here->SOI3gbdT + here->SOI3gBJTdb_deltaT - gcBJTbddeltaT)*model->SOI3type; *(here->SOI3SP_toutPtr) += m * (xrev*here->SOI3gMdeltaT + gcsdeltaT - here->SOI3gbsT + here->SOI3gBJTsb_deltaT - gcBJTbsdeltaT)*model->SOI3type; *(here->SOI3GB_toutPtr) += m * gcgbdeltaT*model->SOI3type; *(here->SOI3B_toutPtr) -= m * (here->SOI3gMdeltaT - gcbdeltaT - here->SOI3gbsT - here->SOI3gbdT + here->SOI3gBJTdb_deltaT + here->SOI3gBJTsb_deltaT -gcBJTbsdeltaT-gcBJTbddeltaT)*model->SOI3type; } End: ; } } return(OK); } /* DEVsoipnjlim(vnew,vold,vt,vcrit,icheck) * limit the per-iteration change of PN junction voltages */ double DEVsoipnjlim(double vnew, double vold, double vt, double vcrit, int *icheck) { double arg; if((vnew > vcrit) && (fabs(vnew - vold) > (vt + vt))) { if(vold > 0) { arg = 1 + (vnew - vold) / vt; if(arg > 0) { vnew = vold + vt * log(arg); } else { vnew = vcrit; } } else { vnew = vt *log(vnew/vt); } *icheck = 1; } else { if (fabs(vnew - vold) < (vt + vt)) { *icheck = 0; } else { if (vnew>vold) { *icheck = 0; } else { arg = 1 + (vold - vnew) / vt; vnew = vold - vt*log(arg); *icheck = 1; } } } return(vnew); } tmpk8ny_4pz/src/spicelib/devices/soi3/soi3trun.c0000644000175000017500000000250513546075722021774 0ustar carstencarsten/********** STAG version 2.7 Copyright 2000 owned by the United Kingdom Secretary of State for Defence acting through the Defence Evaluation and Research Agency. Developed by : Jim Benson, Department of Electronics and Computer Science, University of Southampton, United Kingdom. With help from : Nele D'Halleweyn, Ketan Mistry, Bill Redman-White, and Craig Easson. Based on STAG version 2.1 Developed by : Mike Lee, With help from : Bernard Tenbroek, Bill Redman-White, Mike Uren, Chris Edwards and John Bunyan. Acknowledgements : Rupert Howes and Pete Mole. **********/ /********** Modified by Paolo Nenzi 2002 ngspice integration **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "soi3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int SOI3trunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { SOI3model *model = (SOI3model *)inModel; SOI3instance *here; for( ; model != NULL; model = SOI3nextModel(model)) { for(here=SOI3instances(model);here!=NULL;here = SOI3nextInstance(here)) { CKTterr(here->SOI3qgf,ckt,timeStep); CKTterr(here->SOI3qd,ckt,timeStep); CKTterr(here->SOI3qs,ckt,timeStep); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/soi3/soi3conv.c0000644000175000017500000002162113546075722021751 0ustar carstencarsten/********** STAG version 2.7 Copyright 2000 owned by the United Kingdom Secretary of State for Defence acting through the Defence Evaluation and Research Agency. Developed by : Jim Benson, Department of Electronics and Computer Science, University of Southampton, United Kingdom. With help from : Nele D'Halleweyn, Ketan Mistry, Bill Redman-White, and Craig Easson. Based on STAG version 2.1 Developed by : Mike Lee, With help from : Bernard Tenbroek, Bill Redman-White, Mike Uren, Chris Edwards and John Bunyan. Acknowledgements : Rupert Howes and Pete Mole. **********/ /********** Modified by Paolo Nenzi 2002 ngspice integration **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "soi3defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int SOI3convTest(GENmodel *inModel, CKTcircuit *ckt) { SOI3model *model = (SOI3model*)inModel; SOI3instance *here; double delvbs; double delvbd; double delvgfs; double delvgbs; double delvds; double delvgfd; double delvgbd; double deldeltaT; double ibhat; double idhat; double iPthat; double vbs; double vbd; double vgfs; double vgbs; double vds; double deltaT; double vgfd; double vgbd; double vgfdo; double vgbdo; double tol; /* debug stuff */ /* FILE *fp,*fopen(); */ for( ; model != NULL; model = SOI3nextModel(model)) { for(here = SOI3instances(model); here!= NULL; here = SOI3nextInstance(here)) { vbs = model->SOI3type * ( *(ckt->CKTrhs+here->SOI3bNode) - *(ckt->CKTrhs+here->SOI3sNodePrime)); vgfs = model->SOI3type * ( *(ckt->CKTrhs+here->SOI3gfNode) - *(ckt->CKTrhs+here->SOI3sNodePrime)); vgbs = model->SOI3type * ( *(ckt->CKTrhs+here->SOI3gbNode) - *(ckt->CKTrhs+here->SOI3sNodePrime)); vds = model->SOI3type * ( *(ckt->CKTrhs+here->SOI3dNodePrime) - *(ckt->CKTrhs+here->SOI3sNodePrime)); deltaT = MAX(0,*(ckt->CKTrhs+here->SOI3toutNode)); /* voltage deltaT is V(tout) wrt thermal ground */ vbd=vbs-vds; vgfd=vgfs-vds; vgbd=vgbs-vds; vgfdo = *(ckt->CKTstate0 + here->SOI3vgfs) - *(ckt->CKTstate0 + here->SOI3vds); vgbdo = *(ckt->CKTstate0 + here->SOI3vgbs) - *(ckt->CKTstate0 + here->SOI3vds); delvbs = vbs - *(ckt->CKTstate0 + here->SOI3vbs); delvbd = vbd - *(ckt->CKTstate0 + here->SOI3vbd); delvgfs = vgfs - *(ckt->CKTstate0 + here->SOI3vgfs); delvgbs = vgbs - *(ckt->CKTstate0 + here->SOI3vgbs); delvds = vds - *(ckt->CKTstate0 + here->SOI3vds); delvgfd = vgfd-vgfdo; delvgbd = vgbd-vgbdo; deldeltaT = deltaT - *(ckt->CKTstate0 + here->SOI3deltaT); /* these are needed for convergence testing */ if (here->SOI3mode >= 0) { /* normal */ idhat= here->SOI3id- here->SOI3gbd * delvbd - here->SOI3gbdT * deldeltaT + /* for -ibd bit of id */ (here->SOI3gmbs + here->SOI3gMmbs) * delvbs + (here->SOI3gmf + here->SOI3gMmf) * delvgfs + (here->SOI3gmb + here->SOI3gMmb) * delvgbs + (here->SOI3gds + here->SOI3gMd) * delvds + (here->SOI3gt + here->SOI3gMdeltaT) * deldeltaT + here->SOI3gBJTdb_bs * delvbs + here->SOI3gBJTdb_deltaT * deldeltaT; ibhat= here->SOI3ibs + here->SOI3ibd + here->SOI3gbd * delvbd + here->SOI3gbdT * deldeltaT + here->SOI3gbs * delvbs + here->SOI3gbsT * deldeltaT - here->SOI3iMdb - here->SOI3gMmbs * delvbs - (here->SOI3gMmf)* delvgfs - (here->SOI3gMmb)* delvgbs - here->SOI3gMd * delvds - here->SOI3gMdeltaT * deldeltaT - here->SOI3iBJTsb - here->SOI3gBJTsb_bd * delvbd - here->SOI3gBJTsb_deltaT * deldeltaT - here->SOI3iBJTdb - here->SOI3gBJTdb_bs * delvbs - here->SOI3gBJTdb_deltaT * deldeltaT; } else { /* A over T */ idhat= here->SOI3id - ( here->SOI3gbd + here->SOI3gmbs) * delvbd - (here->SOI3gmf) * delvgfd - (here->SOI3gmb) * delvgbd + (here->SOI3gds) * delvds - (here->SOI3gt + here->SOI3gbdT) * deldeltaT + here->SOI3gBJTdb_bs * delvbs + here->SOI3gBJTdb_deltaT * deldeltaT; ibhat= here->SOI3ibs + here->SOI3ibd + here->SOI3gbd * delvbd + here->SOI3gbdT * deldeltaT + here->SOI3gbs * delvbs + here->SOI3gbsT * deldeltaT - here->SOI3iMsb - here->SOI3gMmbs * delvbd - here->SOI3gMmf * delvgfd - here->SOI3gMmb * delvgbd + here->SOI3gMd * delvds - /* gMd should go with vsd */ here->SOI3gMdeltaT * deldeltaT - here->SOI3iBJTsb - here->SOI3gBJTsb_bd * delvbd - here->SOI3gBJTsb_deltaT * deldeltaT - here->SOI3iBJTdb - here->SOI3gBJTdb_bs * delvbs - here->SOI3gBJTdb_deltaT * deldeltaT; } iPthat = here->SOI3iPt + here->SOI3gPmbs * delvbs + here->SOI3gPmf * delvgfs + here->SOI3gPmb * delvgbs + here->SOI3gPds * delvds * here->SOI3mode + here->SOI3gPdT * deldeltaT; /* * check convergence */ tol=ckt->CKTreltol*MAX(fabs(idhat),fabs(here->SOI3id))+ ckt->CKTabstol; if (fabs(idhat-here->SOI3id) >= tol) { ckt->CKTnoncon++; /* JimB - Remove line containing ckt->CKTtroubleElt for the */ /* Simetrix DLL version - element removed from ckt structure */ ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue, we haven't converged */ } else { tol=ckt->CKTreltol* MAX(fabs(ibhat),fabs(here->SOI3ibs+here->SOI3ibd - here->SOI3iMdb - here->SOI3iMsb - here->SOI3iBJTdb - here->SOI3iBJTsb))+ ckt->CKTabstol; if (fabs(ibhat-(here->SOI3ibs+here->SOI3ibd - here->SOI3iMdb - here->SOI3iMsb - here->SOI3iBJTdb - here->SOI3iBJTsb)) > tol) { ckt->CKTnoncon++; /* JimB - Remove line containing ckt->CKTtroubleElt for the */ /* Simetrix DLL version - element removed from ckt structure */ ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue,we haven't converged*/ } else { tol=ckt->CKTreltol*MAX(fabs(iPthat), fabs(here->SOI3iPt))+ckt->CKTabstol; if (fabs(iPthat-here->SOI3iPt) >= tol) { ckt->CKTnoncon++; /* JimB - Remove line containing ckt->CKTtroubleElt for the */ /* Simetrix DLL version - element removed from ckt structure */ ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue,we haven't converged*/ } } } /* debug stuff */ /* fp=fopen("level3.dat","a"); fprintf(fp,"%2.3f %2.3f %.15e %.15e %.15e %.15e %.15e %.15e %.15e\n", vgfs-vbs,vds,ckt->CKTtime,here->SOI3debug1,here->SOI3debug2,here->SOI3debug3, here->SOI3debug4,here->SOI3debug5,here->SOI3debug6); fclose(fp); */ } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim2/0000755000175000017500000000000013546075722020177 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/bsim2/b2ask.c0000644000175000017500000001665113546075722021356 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Hong J. Park **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "bsim2def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int B2ask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { B2instance *here = (B2instance*)inst; NG_IGNORE(select); switch(which) { case BSIM2_L: value->rValue = here->B2l; return(OK); case BSIM2_W: value->rValue = here->B2w; value->rValue *= here->B2m; return(OK); case BSIM2_M: value->rValue = here->B2m; return(OK); case BSIM2_AS: value->rValue = here->B2sourceArea; value->rValue *= here->B2m; return(OK); case BSIM2_AD: value->rValue = here->B2drainArea; value->rValue *= here->B2m; return(OK); case BSIM2_PS: value->rValue = here->B2sourcePerimeter; value->rValue *= here->B2m; return(OK); case BSIM2_PD: value->rValue = here->B2drainPerimeter; value->rValue *= here->B2m; return(OK); case BSIM2_NRS: value->rValue = here->B2sourceSquares; value->rValue *= here->B2m; return(OK); case BSIM2_NRD: value->rValue = here->B2drainSquares; value->rValue *= here->B2m; return(OK); case BSIM2_OFF: value->rValue = here->B2off; return(OK); case BSIM2_IC_VBS: value->rValue = here->B2icVBS; return(OK); case BSIM2_IC_VDS: value->rValue = here->B2icVDS; return(OK); case BSIM2_IC_VGS: value->rValue = here->B2icVGS; return(OK); case BSIM2_DNODE: value->iValue = here->B2dNode; return(OK); case BSIM2_GNODE: value->iValue = here->B2gNode; return(OK); case BSIM2_SNODE: value->iValue = here->B2sNode; return(OK); case BSIM2_BNODE: value->iValue = here->B2bNode; return(OK); case BSIM2_DNODEPRIME: value->iValue = here->B2dNodePrime; return(OK); case BSIM2_SNODEPRIME: value->iValue = here->B2sNodePrime; return(OK); case BSIM2_SOURCECONDUCT: value->rValue = here->B2sourceConductance; value->rValue *= here->B2m; return(OK); case BSIM2_DRAINCONDUCT: value->rValue = here->B2drainConductance; value->rValue *= here->B2m; return(OK); case BSIM2_VBD: value->rValue = *(ckt->CKTstate0 + here->B2vbd); return(OK); case BSIM2_VBS: value->rValue = *(ckt->CKTstate0 + here->B2vbs); return(OK); case BSIM2_VGS: value->rValue = *(ckt->CKTstate0 + here->B2vgs); return(OK); case BSIM2_VDS: value->rValue = *(ckt->CKTstate0 + here->B2vds); return(OK); case BSIM2_CD: value->rValue = *(ckt->CKTstate0 + here->B2cd); value->rValue *= here->B2m; return(OK); case BSIM2_CBS: value->rValue = *(ckt->CKTstate0 + here->B2cbs); value->rValue *= here->B2m; return(OK); case BSIM2_CBD: value->rValue = *(ckt->CKTstate0 + here->B2cbd); value->rValue *= here->B2m; return(OK); case BSIM2_GM: value->rValue = *(ckt->CKTstate0 + here->B2gm); value->rValue *= here->B2m; return(OK); case BSIM2_GDS: value->rValue = *(ckt->CKTstate0 + here->B2gds); value->rValue *= here->B2m; return(OK); case BSIM2_GMBS: value->rValue = *(ckt->CKTstate0 + here->B2gmbs); value->rValue *= here->B2m; return(OK); case BSIM2_GBD: value->rValue = *(ckt->CKTstate0 + here->B2gbd); value->rValue *= here->B2m; return(OK); case BSIM2_GBS: value->rValue = *(ckt->CKTstate0 + here->B2gbs); value->rValue *= here->B2m; return(OK); case BSIM2_QB: value->rValue = *(ckt->CKTstate0 + here->B2qb); value->rValue *= here->B2m; return(OK); case BSIM2_CQB: value->rValue = *(ckt->CKTstate0 + here->B2cqb); value->rValue *= here->B2m; return(OK); case BSIM2_QG: value->rValue = *(ckt->CKTstate0 + here->B2qg); value->rValue *= here->B2m; return(OK); case BSIM2_CQG: value->rValue = *(ckt->CKTstate0 + here->B2cqg); value->rValue *= here->B2m; return(OK); case BSIM2_QD: value->rValue = *(ckt->CKTstate0 + here->B2qd); value->rValue *= here->B2m; return(OK); case BSIM2_CQD: value->rValue = *(ckt->CKTstate0 + here->B2cqd); value->rValue *= here->B2m; return(OK); case BSIM2_CGG: value->rValue = *(ckt->CKTstate0 + here->B2cggb); value->rValue *= here->B2m; return(OK); case BSIM2_CGD: value->rValue = *(ckt->CKTstate0 + here->B2cgdb); value->rValue *= here->B2m; return(OK); case BSIM2_CGS: value->rValue = *(ckt->CKTstate0 + here->B2cgsb); value->rValue *= here->B2m; return(OK); case BSIM2_CBG: value->rValue = *(ckt->CKTstate0 + here->B2cbgb); value->rValue *= here->B2m; return(OK); case BSIM2_CAPBD: value->rValue = *(ckt->CKTstate0 + here->B2capbd); value->rValue *= here->B2m; return(OK); case BSIM2_CQBD: value->rValue = *(ckt->CKTstate0 + here->B2cqbd); value->rValue *= here->B2m; return(OK); case BSIM2_CAPBS: value->rValue = *(ckt->CKTstate0 + here->B2capbs); value->rValue *= here->B2m; return(OK); case BSIM2_CQBS: value->rValue = *(ckt->CKTstate0 + here->B2cqbs); value->rValue *= here->B2m; return(OK); case BSIM2_CDG: value->rValue = *(ckt->CKTstate0 + here->B2cdgb); value->rValue *= here->B2m; return(OK); case BSIM2_CDD: value->rValue = *(ckt->CKTstate0 + here->B2cddb); value->rValue *= here->B2m; return(OK); case BSIM2_CDS: value->rValue = *(ckt->CKTstate0 + here->B2cdsb); value->rValue *= here->B2m; return(OK); case BSIM2_VON: value->rValue = *(ckt->CKTstate0 + here->B2vono); return(OK); case BSIM2_QBS: value->rValue = *(ckt->CKTstate0 + here->B2qbs); value->rValue *= here->B2m; return(OK); case BSIM2_QBD: value->rValue = *(ckt->CKTstate0 + here->B2qbd); value->rValue *= here->B2m; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim2/b2trunc.c0000644000175000017500000000210113546075722021714 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Hong J. Park, Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim2def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B2trunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { B2model *model = (B2model*)inModel; B2instance *here; #ifdef STEPDEBUG double debugtemp; #endif /* STEPDEBUG */ for( ; model != NULL; model = B2nextModel(model)) { for(here=B2instances(model);here!=NULL;here = B2nextInstance(here)){ #ifdef STEPDEBUG debugtemp = *timeStep; #endif /* STEPDEBUG */ CKTterr(here->B2qb,ckt,timeStep); CKTterr(here->B2qg,ckt,timeStep); CKTterr(here->B2qd,ckt,timeStep); #ifdef STEPDEBUG if(debugtemp != *timeStep) { printf("device %s reduces step from %g to %g\n", here->B2name,debugtemp,*timeStep); } #endif /* STEPDEBUG */ } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim2/Makefile.am0000644000175000017500000000076213546075722022240 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libbsim2.la libbsim2_la_SOURCES = \ b2.c \ b2acld.c \ b2ask.c \ b2cvtest.c \ b2eval.c \ b2getic.c \ b2ld.c \ b2mask.c \ b2moscap.c \ b2mpar.c \ b2noi.c \ b2par.c \ b2pzld.c \ b2set.c \ b2temp.c \ b2trunc.c \ bsim2def.h \ bsim2ext.h \ bsim2init.c \ bsim2init.h \ bsim2itf.h AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/bsim2/b2noi.c0000644000175000017500000001267113546075722021363 0ustar carstencarsten/********** Copyright 2003 ??. All rights reserved. Author: 2003 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "bsim2def.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" /* * B2noise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with MOSFET's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the MOSFET's is summed with the variable "OnDens". */ int B2noise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; B2model *firstModel = (B2model *) genmodel; B2model *model; B2instance *inst; double tempOnoise; double tempInoise; double noizDens[B2NSRCS]; double lnNdens[B2NSRCS]; int i; /* define the names of the noise sources */ static char *B2nNames[B2NSRCS] = { /* Note that we have to keep the order */ "_rd", /* noise due to rd */ /* consistent with thestrchr definitions */ "_rs", /* noise due to rs */ /* in bsim1defs.h */ "_id", /* noise due to id */ "_1overf", /* flicker (1/f) noise */ "" /* total transistor noise */ }; for (model=firstModel; model != NULL; model=B2nextModel(model)) { for (inst=B2instances(model); inst != NULL; inst=B2nextInstance(inst)) { switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i=0; i < B2NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_%s%s", inst->B2name, B2nNames[i]); } break; case INT_NOIZ: for (i=0; i < B2NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total_%s%s", inst->B2name, B2nNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total_%s%s", inst->B2name, B2nNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: NevalSrc(&noizDens[B2RDNOIZ],&lnNdens[B2RDNOIZ], ckt,THERMNOISE,inst->B2dNodePrime,inst->B2dNode, inst->B2drainConductance * inst->B2m); NevalSrc(&noizDens[B2RSNOIZ],&lnNdens[B2RSNOIZ], ckt,THERMNOISE,inst->B2sNodePrime,inst->B2sNode, inst->B2sourceConductance * inst->B2m); NevalSrc(&noizDens[B2IDNOIZ],&lnNdens[B2IDNOIZ], ckt,THERMNOISE,inst->B2dNodePrime,inst->B2sNodePrime, (2.0/3.0 * fabs(inst->B2gm * inst->B2m))); NevalSrc(&noizDens[B2FLNOIZ], NULL, ckt, N_GAIN,inst->B2dNodePrime, inst->B2sNodePrime, (double)0.0); noizDens[B2FLNOIZ] *= model->B2fNcoef * inst->B2m * exp(model->B2fNexp * log(MAX(fabs(inst->B2cd),N_MINLOG))) / (data->freq * (inst->B2w - model->B2deltaW * 1e-6) * (inst->B2l - model->B2deltaL * 1e-6) * model->B2Cox * model->B2Cox); lnNdens[B2FLNOIZ] = log(MAX(noizDens[B2FLNOIZ],N_MINLOG)); noizDens[B2TOTNOIZ] = noizDens[B2RDNOIZ] + noizDens[B2RSNOIZ] + noizDens[B2IDNOIZ] + noizDens[B2FLNOIZ]; lnNdens[B2TOTNOIZ] = log(MAX(noizDens[B2TOTNOIZ], N_MINLOG)); *OnDens += noizDens[B2TOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to */ /* initialize our "history" variables */ for (i=0; i < B2NSRCS; i++) { inst->B2nVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i=0; i < B2NSRCS; i++) { inst->B2nVar[OUTNOIZ][i] = 0.0; inst->B2nVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0 (we have to integrate) */ for (i=0; i < B2NSRCS; i++) { if (i != B2TOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], inst->B2nVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv , lnNdens[i] + data->lnGainInv, inst->B2nVar[LNLSTDENS][i] + data->lnGainInv, data); inst->B2nVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { inst->B2nVar[OUTNOIZ][i] += tempOnoise; inst->B2nVar[OUTNOIZ][B2TOTNOIZ] += tempOnoise; inst->B2nVar[INNOIZ][i] += tempInoise; inst->B2nVar[INNOIZ][B2TOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i=0; i < B2NSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i=0; i < B2NSRCS; i++) { data->outpVector[data->outNumber++] = inst->B2nVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = inst->B2nVar[INNOIZ][i]; } } /* if */ break; } /* switch (mode) */ break; case N_CLOSE: return (OK); /* do nothing, the main calling routine will close */ break; /* the plots */ } /* switch (operation) */ } /* for inst */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim2/bsim2init.h0000644000175000017500000000035213546075722022250 0ustar carstencarsten#ifndef _BSIM2INIT_H #define _BSIM2INIT_H extern IFparm B2pTable[ ]; extern IFparm B2mPTable[ ]; extern char *B2names[ ]; extern int B2pTSize; extern int B2mPTSize; extern int B2nSize; extern int B2iSize; extern int B2mSize; #endif tmpk8ny_4pz/src/spicelib/devices/bsim2/b2temp.c0000644000175000017500000003041013546075722021532 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Hong J. Park, Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "bsim2def.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int B2temp(GENmodel *inModel, CKTcircuit *ckt) /* load the B2 device structure with those pointers needed later * for fast matrix loading */ { B2model *model = (B2model*) inModel; B2instance *here; struct bsim2SizeDependParam *pSizeDependParamKnot, *pLastKnot; double EffectiveLength; double EffectiveWidth; double CoxWoverL, Inv_L, Inv_W, tmp; int Size_Not_Found; NG_IGNORE(ckt); /* loop through all the B2 device models */ for( ; model != NULL; model = B2nextModel(model)) { /* Default value Processing for B2 MOSFET Models */ /* Some Limiting for Model Parameters */ if( model->B2bulkJctPotential < 0.1) { model->B2bulkJctPotential = 0.1; } if( model->B2sidewallJctPotential < 0.1) { model->B2sidewallJctPotential = 0.1; } model->B2Cox = 3.453e-13/(model->B2tox * 1.0e-4);/*in F/cm**2 */ model->B2vdd2 = 2.0 * model->B2vdd; model->B2vgg2 = 2.0 * model->B2vgg; model->B2vbb2 = 2.0 * model->B2vbb; model->B2Vtm = 8.625e-5 * (model->B2temp + 273.0); struct bsim2SizeDependParam *p = model->pSizeDependParamKnot; while (p) { struct bsim2SizeDependParam *next_p = p->pNext; FREE(p); p = next_p; } model->pSizeDependParamKnot = NULL; pLastKnot = NULL; /* loop through all the instances of the model */ for (here = B2instances(model); here != NULL ; here=B2nextInstance(here)) { pSizeDependParamKnot = model->pSizeDependParamKnot; Size_Not_Found = 1; while ((pSizeDependParamKnot != NULL) && Size_Not_Found) { if ((here->B2l == pSizeDependParamKnot->Length) && (here->B2w == pSizeDependParamKnot->Width)) { Size_Not_Found = 0; here->pParam = pSizeDependParamKnot; } else { pLastKnot = pSizeDependParamKnot; pSizeDependParamKnot = pSizeDependParamKnot->pNext; } } if (Size_Not_Found) { here->pParam = TMALLOC(struct bsim2SizeDependParam, 1); if (pLastKnot == NULL) model->pSizeDependParamKnot = here->pParam; else pLastKnot->pNext = here->pParam; here->pParam->pNext = NULL; EffectiveLength = here->B2l - model->B2deltaL * 1.0e-6; EffectiveWidth = here->B2w - model->B2deltaW * 1.0e-6; if(EffectiveLength<=0) { SPfrontEnd->IFerrorf (ERR_FATAL, "B2: mosfet %s, model %s: Effective channel length <=0", model->B2modName, here->B2name); return(E_BADPARM); } if(EffectiveWidth <= 0) { SPfrontEnd->IFerrorf (ERR_FATAL, "B2: mosfet %s, model %s: Effective channel width <=0", model->B2modName, here->B2name); return(E_BADPARM); } Inv_L = 1.0e-6 / EffectiveLength; Inv_W = 1.0e-6 / EffectiveWidth; here->pParam->Width = here->B2w; here->pParam->Length = here->B2l; here->pParam->B2vfb = model->B2vfb0 + model->B2vfbW * Inv_W + model->B2vfbL * Inv_L; here->pParam->B2phi = model->B2phi0 + model->B2phiW * Inv_W + model->B2phiL * Inv_L; here->pParam->B2k1 = model->B2k10 + model->B2k1W * Inv_W + model->B2k1L * Inv_L; here->pParam->B2k2 = model->B2k20 + model->B2k2W * Inv_W + model->B2k2L * Inv_L; here->pParam->B2eta0 = model->B2eta00 + model->B2eta0W * Inv_W + model->B2eta0L * Inv_L; here->pParam->B2etaB = model->B2etaB0 + model->B2etaBW * Inv_W + model->B2etaBL * Inv_L; here->pParam->B2beta0 = model->B2mob00; here->pParam->B2beta0B = model->B2mob0B0 + model->B2mob0BW * Inv_W + model->B2mob0BL * Inv_L; here->pParam->B2betas0 = model->B2mobs00 + model->B2mobs0W * Inv_W + model->B2mobs0L * Inv_L; if (here->pParam->B2betas0 < 1.01 * here->pParam->B2beta0) here->pParam->B2betas0 = 1.01 * here->pParam->B2beta0; here->pParam->B2betasB = model->B2mobsB0 + model->B2mobsBW * Inv_W + model->B2mobsBL * Inv_L; tmp = (here->pParam->B2betas0 - here->pParam->B2beta0 - here->pParam->B2beta0B * model->B2vbb); if ((-here->pParam->B2betasB * model->B2vbb) > tmp) here->pParam->B2betasB = -tmp / model->B2vbb; here->pParam->B2beta20 = model->B2mob200 + model->B2mob20W * Inv_W + model->B2mob20L * Inv_L; here->pParam->B2beta2B = model->B2mob2B0 + model->B2mob2BW * Inv_W + model->B2mob2BL * Inv_L; here->pParam->B2beta2G = model->B2mob2G0 + model->B2mob2GW * Inv_W + model->B2mob2GL * Inv_L; here->pParam->B2beta30 = model->B2mob300 + model->B2mob30W * Inv_W + model->B2mob30L * Inv_L; here->pParam->B2beta3B = model->B2mob3B0 + model->B2mob3BW * Inv_W + model->B2mob3BL * Inv_L; here->pParam->B2beta3G = model->B2mob3G0 + model->B2mob3GW * Inv_W + model->B2mob3GL * Inv_L; here->pParam->B2beta40 = model->B2mob400 + model->B2mob40W * Inv_W + model->B2mob40L * Inv_L; here->pParam->B2beta4B = model->B2mob4B0 + model->B2mob4BW * Inv_W + model->B2mob4BL * Inv_L; here->pParam->B2beta4G = model->B2mob4G0 + model->B2mob4GW * Inv_W + model->B2mob4GL * Inv_L; CoxWoverL = model->B2Cox * EffectiveWidth / EffectiveLength; here->pParam->B2beta0 *= CoxWoverL; here->pParam->B2beta0B *= CoxWoverL; here->pParam->B2betas0 *= CoxWoverL; here->pParam->B2betasB *= CoxWoverL; here->pParam->B2beta30 *= CoxWoverL; here->pParam->B2beta3B *= CoxWoverL; here->pParam->B2beta3G *= CoxWoverL; here->pParam->B2beta40 *= CoxWoverL; here->pParam->B2beta4B *= CoxWoverL; here->pParam->B2beta4G *= CoxWoverL; here->pParam->B2ua0 = model->B2ua00 + model->B2ua0W * Inv_W + model->B2ua0L * Inv_L; here->pParam->B2uaB = model->B2uaB0 + model->B2uaBW * Inv_W + model->B2uaBL * Inv_L; here->pParam->B2ub0 = model->B2ub00 + model->B2ub0W * Inv_W + model->B2ub0L * Inv_L; here->pParam->B2ubB = model->B2ubB0 + model->B2ubBW * Inv_W + model->B2ubBL * Inv_L; here->pParam->B2u10 = model->B2u100 + model->B2u10W * Inv_W + model->B2u10L * Inv_L; here->pParam->B2u1B = model->B2u1B0 + model->B2u1BW * Inv_W + model->B2u1BL * Inv_L; here->pParam->B2u1D = model->B2u1D0 + model->B2u1DW * Inv_W + model->B2u1DL * Inv_L; here->pParam->B2n0 = model->B2n00 + model->B2n0W * Inv_W + model->B2n0L * Inv_L; here->pParam->B2nB = model->B2nB0 + model->B2nBW * Inv_W + model->B2nBL * Inv_L; here->pParam->B2nD = model->B2nD0 + model->B2nDW * Inv_W + model->B2nDL * Inv_L; if (here->pParam->B2n0 < 0.0) here->pParam->B2n0 = 0.0; here->pParam->B2vof0 = model->B2vof00 + model->B2vof0W * Inv_W + model->B2vof0L * Inv_L; here->pParam->B2vofB = model->B2vofB0 + model->B2vofBW * Inv_W + model->B2vofBL * Inv_L; here->pParam->B2vofD = model->B2vofD0 + model->B2vofDW * Inv_W + model->B2vofDL * Inv_L; here->pParam->B2ai0 = model->B2ai00 + model->B2ai0W * Inv_W + model->B2ai0L * Inv_L; here->pParam->B2aiB = model->B2aiB0 + model->B2aiBW * Inv_W + model->B2aiBL * Inv_L; here->pParam->B2bi0 = model->B2bi00 + model->B2bi0W * Inv_W + model->B2bi0L * Inv_L; here->pParam->B2biB = model->B2biB0 + model->B2biBW * Inv_W + model->B2biBL * Inv_L; here->pParam->B2vghigh = model->B2vghigh0 + model->B2vghighW * Inv_W + model->B2vghighL * Inv_L; here->pParam->B2vglow = model->B2vglow0 + model->B2vglowW * Inv_W + model->B2vglowL * Inv_L; here->pParam->CoxWL = model->B2Cox * EffectiveLength * EffectiveWidth * 1.0e4; here->pParam->One_Third_CoxWL = here->pParam->CoxWL / 3.0; here->pParam->Two_Third_CoxWL = 2.0 * here->pParam->One_Third_CoxWL; here->pParam->B2GSoverlapCap = model->B2gateSourceOverlapCap * EffectiveWidth; here->pParam->B2GDoverlapCap = model->B2gateDrainOverlapCap * EffectiveWidth; here->pParam->B2GBoverlapCap = model->B2gateBulkOverlapCap * EffectiveLength; here->pParam->SqrtPhi = sqrt(here->pParam->B2phi); here->pParam->Phis3 = here->pParam->SqrtPhi * here->pParam->B2phi; here->pParam->Arg = here->pParam->B2betasB - here->pParam->B2beta0B - model->B2vdd * (here->pParam->B2beta3B - model->B2vdd * here->pParam->B2beta4B); } /* process drain series resistance */ if( (here->B2drainConductance=model->B2sheetResistance * here->B2drainSquares) != 0.0 ) { here->B2drainConductance = 1. / here->B2drainConductance ; } /* process source series resistance */ if( (here->B2sourceConductance=model->B2sheetResistance * here->B2sourceSquares) != 0.0 ) { here->B2sourceConductance = 1. / here->B2sourceConductance ; } here->pParam->B2vt0 = here->pParam->B2vfb + here->pParam->B2phi + here->pParam->B2k1 * here->pParam->SqrtPhi - here->pParam->B2k2 * here->pParam->B2phi; here->B2von = here->pParam->B2vt0; /* added for initialization*/ } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim2/b2getic.c0000644000175000017500000000242413546075722021664 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Hong J. Park, Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim2def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B2getic(GENmodel *inModel, CKTcircuit *ckt) { B2model *model = (B2model*)inModel; B2instance *here; /* * grab initial conditions out of rhs array. User specified, so use * external nodes to get values */ for( ; model ; model = B2nextModel(model)) { for(here = B2instances(model); here ; here = B2nextInstance(here)) { if(!here->B2icVBSGiven) { here->B2icVBS = *(ckt->CKTrhs + here->B2bNode) - *(ckt->CKTrhs + here->B2sNode); } if(!here->B2icVDSGiven) { here->B2icVDS = *(ckt->CKTrhs + here->B2dNode) - *(ckt->CKTrhs + here->B2sNode); } if(!here->B2icVGSGiven) { here->B2icVGS = *(ckt->CKTrhs + here->B2gNode) - *(ckt->CKTrhs + here->B2sNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim2/b2moscap.c0000644000175000017500000000432313546075722022053 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Hong J. Park, Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim2def.h" #include "ngspice/suffix.h" /* routine to calculate equivalent conductance and total terminal * charges */ void B2mosCap( CKTcircuit *ckt, double vgd, double vgs, double vgb, double args[8], /* double GateDrainOverlapCap, double GateSourceOverlapCap, double GateBulkOverlapCap, double capbd, double capbs, double cggb, double cgdb, double cgsb, */ double cbgb, double cbdb, double cbsb, double cdgb, double cddb, double cdsb, double *gcggbPointer, double *gcgdbPointer, double *gcgsbPointer, double *gcbgbPointer, double *gcbdbPointer, double *gcbsbPointer, double *gcdgbPointer, double *gcddbPointer, double *gcdsbPointer, double *gcsgbPointer, double *gcsdbPointer, double *gcssbPointer, double *qGatePointer, double *qBulkPointer, double *qDrainPointer, double *qSourcePointer) { double qgd; double qgs; double qgb; double ag0; ag0 = ckt->CKTag[0]; /* compute equivalent conductance */ *gcdgbPointer = (cdgb - args[0]) * ag0; *gcddbPointer = (cddb + args[3] + args[0]) * ag0; *gcdsbPointer = cdsb * ag0; *gcsgbPointer = -(args[5] + cbgb + cdgb + args[1]) * ag0; *gcsdbPointer = -(args[6] + cbdb + cddb ) * ag0; *gcssbPointer = (args[4] + args[1] - (args[7] + cbsb + cdsb )) * ag0; *gcggbPointer = (args[5] + args[0] + args[1] + args[2] ) * ag0; *gcgdbPointer = (args[6] - args[0]) * ag0; *gcgsbPointer = (args[7] - args[1]) * ag0; *gcbgbPointer = (cbgb - args[2]) * ag0; *gcbdbPointer = (cbdb - args[3]) * ag0; *gcbsbPointer = (cbsb - args[4]) * ag0; /* compute total terminal charge */ qgd = args[0] * vgd; qgs = args[1] * vgs; qgb = args[2] * vgb; *qGatePointer = *qGatePointer + qgd + qgs + qgb; *qBulkPointer = *qBulkPointer - qgb; *qDrainPointer = *qDrainPointer - qgd; *qSourcePointer = -(*qGatePointer + *qBulkPointer + *qDrainPointer); } tmpk8ny_4pz/src/spicelib/devices/bsim2/bsim2init.c0000644000175000017500000000311213546075722022240 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "bsim2itf.h" #include "bsim2ext.h" #include "bsim2init.h" SPICEdev B2info = { .DEVpublic = { .name = "BSIM2", .description = "Berkeley Short Channel IGFET Model", .terms = &B2nSize, .numNames = &B2nSize, .termNames = B2names, .numInstanceParms = &B2pTSize, .instanceParms = B2pTable, .numModelParms = &B2mPTSize, .modelParms = B2mPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = B2param, .DEVmodParam = B2mParam, .DEVload = B2load, .DEVsetup = B2setup, .DEVunsetup = B2unsetup, .DEVpzSetup = B2setup, .DEVtemperature = B2temp, .DEVtrunc = B2trunc, .DEVfindBranch = NULL, .DEVacLoad = B2acLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = B2getic, .DEVask = B2ask, .DEVmodAsk = B2mAsk, .DEVpzLoad = B2pzLoad, .DEVconvTest = B2convTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = B2noise, .DEVsoaCheck = NULL, .DEVinstSize = &B2iSize, .DEVmodSize = &B2mSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_bsim2_info(void) { return &B2info; } tmpk8ny_4pz/src/spicelib/devices/bsim2/b2eval.c0000644000175000017500000005275413546075722021533 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Min-Chie Jeng, Hong J. Park, Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim2def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/suffix.h" /* This routine evaluates the drain current, its derivatives and the * charges associated with the gate,bulk and drain terminal * using the B2 (Berkeley Short-Channel IGFET Model) Equations. */ void B2evaluate(double Vds, double Vbs, double Vgs, B2instance *here, B2model *model, double *gm, double *gds, double *gmb, double *qg, double *qb, double *qd, double *cgg,double *cgd,double *cgs, double *cbg, double *cbd, double *cbs, double *cdg, double *cdd, double *cds, double *Ids, double *von, double *vdsat, CKTcircuit *ckt) { double Vth, Vdsat = 0.0; double Phisb, T1s, Eta, Gg, Aa, Inv_Aa, U1, U1s, Vc, Kk, SqrtKk; double dPhisb_dVb, dT1s_dVb, dVth_dVb, dVth_dVd, dAa_dVb, dVc_dVd; double dVc_dVg, dVc_dVb, dKk_dVc; double dVdsat_dVd = 0.0, dVdsat_dVg = 0.0, dVdsat_dVb = 0.0; double dUvert_dVg, dUvert_dVd, dUvert_dVb, Inv_Kk; double dUtot_dVd, dUtot_dVb, dUtot_dVg, Ai, Bi, Vghigh, Vglow, Vgeff, Vof; double Vbseff, Vgst, Vgdt, Qbulk, Utot; double T0, T1, T2, T3, T4, T5, Arg1, Arg2, Exp0 = 0.0, Exp1 = 0.0; double tmp, tmp1, tmp2, tmp3, Uvert, Beta1, Beta2, Beta0, dGg_dVb; double T6, T7, T8, T9, n = 0.0, ExpArg, ExpArg1; double Beta, dQbulk_dVb, dVgdt_dVg, dVgdt_dVd; double dVbseff_dVb, Ua, Ub, dVgdt_dVb, dQbulk_dVd; double Con1, Con3, Con4, SqrVghigh, SqrVglow, CubVghigh, CubVglow; double delta, Coeffa, Coeffb, Coeffc, Coeffd, Inv_Uvert, Inv_Utot; double Inv_Vdsat, tanh, Sqrsech, dBeta1_dVb, dU1_dVd, dU1_dVg, dU1_dVb; double Betaeff, FR, dFR_dVd, dFR_dVg, dFR_dVb, Betas, Beta3, Beta4; double dBeta_dVd, dBeta_dVg, dBeta_dVb, dVgeff_dVg, dVgeff_dVd, dVgeff_dVb; double dCon3_dVd, dCon3_dVb, dCon4_dVd, dCon4_dVb, dCoeffa_dVd, dCoeffa_dVb; double dCoeffb_dVd, dCoeffb_dVb, dCoeffc_dVd, dCoeffc_dVb; double dCoeffd_dVd, dCoeffd_dVb; int ChargeComputationNeeded; int valuetypeflag; /* added 3/19/90 JSD */ if ((ckt->CKTmode & (MODEAC | MODETRAN)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) || (ckt->CKTmode & MODEINITSMSIG) ) { ChargeComputationNeeded = 1; } else { ChargeComputationNeeded = 0; } if (Vbs < model->B2vbb2) Vbs = model->B2vbb2; if (Vgs > model->B2vgg2) Vgs = model->B2vgg2; if (Vds > model->B2vdd2) Vds = model->B2vdd2; /* Threshold Voltage. */ if (Vbs <= 0.0) { Phisb = here->pParam->B2phi - Vbs; dPhisb_dVb = -1.0; T1s = sqrt(Phisb); dT1s_dVb = -0.5 / T1s; } else { tmp = here->pParam->B2phi / (here->pParam->B2phi + Vbs); Phisb = here->pParam->B2phi * tmp; dPhisb_dVb = -tmp * tmp; T1s = here->pParam->Phis3 / (here->pParam->B2phi + 0.5 * Vbs); dT1s_dVb = -0.5 * T1s * T1s / here->pParam->Phis3; } Eta = here->pParam->B2eta0 + here->pParam->B2etaB * Vbs; Ua = here->pParam->B2ua0 + here->pParam->B2uaB * Vbs; Ub = here->pParam->B2ub0 + here->pParam->B2ubB * Vbs; U1s = here->pParam->B2u10 + here->pParam->B2u1B * Vbs; Vth = here->pParam->B2vfb + here->pParam->B2phi + here->pParam->B2k1 * T1s - here->pParam->B2k2 * Phisb - Eta * Vds; dVth_dVd = -Eta; dVth_dVb = here->pParam->B2k1 * dT1s_dVb + here->pParam->B2k2 - here->pParam->B2etaB * Vds; Vgst = Vgs - Vth; tmp = 1.0 / (1.744 + 0.8364 * Phisb); Gg = 1.0 - tmp; dGg_dVb = 0.8364 * tmp * tmp * dPhisb_dVb; T0 = Gg / T1s; tmp1 = 0.5 * T0 * here->pParam->B2k1; Aa = 1.0 + tmp1; dAa_dVb = (Aa - 1.0) * (dGg_dVb / Gg - dT1s_dVb / T1s); Inv_Aa = 1.0 / Aa; Vghigh = here->pParam->B2vghigh; Vglow = here->pParam->B2vglow; if ((Vgst >= Vghigh) || (here->pParam->B2n0 == 0.0)) { Vgeff = Vgst; dVgeff_dVg = 1.0; dVgeff_dVd = -dVth_dVd; dVgeff_dVb = -dVth_dVb; } else { Vof = here->pParam->B2vof0 + here->pParam->B2vofB * Vbs + here->pParam->B2vofD * Vds; n = here->pParam->B2n0 + here->pParam->B2nB / T1s + here->pParam->B2nD * Vds; tmp = 0.5 / (n * model->B2Vtm); ExpArg1 = -Vds / model->B2Vtm; ExpArg1 = MAX(ExpArg1, -30.0); Exp1 = exp(ExpArg1); tmp1 = 1.0 - Exp1; tmp1 = MAX(tmp1, 1.0e-18); tmp2 = 2.0 * Aa * tmp1; if (Vgst <= Vglow) { ExpArg = Vgst * tmp; ExpArg = MAX(ExpArg, -30.0); Exp0 = exp(0.5 * Vof + ExpArg); Vgeff = sqrt(tmp2) * model->B2Vtm * Exp0; T0 = n * model->B2Vtm; dVgeff_dVg = Vgeff * tmp; dVgeff_dVd = dVgeff_dVg * (n / tmp1 * Exp1 - dVth_dVd - Vgst * here->pParam->B2nD / n + T0 * here->pParam->B2vofD); dVgeff_dVb = dVgeff_dVg * (here->pParam->B2vofB * T0 - dVth_dVb + here->pParam->B2nB * Vgst / (n * T1s * T1s) * dT1s_dVb + T0 * Inv_Aa * dAa_dVb); } else { ExpArg = Vglow * tmp; ExpArg = MAX(ExpArg, -30.0); Exp0 = exp(0.5 * Vof + ExpArg); Vgeff = sqrt(2.0 * Aa * (1.0 - Exp1)) * model->B2Vtm * Exp0; Con1 = Vghigh; Con3 = Vgeff; Con4 = Con3 * tmp; SqrVghigh = Vghigh * Vghigh; SqrVglow = Vglow * Vglow; CubVghigh = Vghigh * SqrVghigh; CubVglow = Vglow * SqrVglow; T0 = 2.0 * Vghigh; T1 = 2.0 * Vglow; T2 = 3.0 * SqrVghigh; T3 = 3.0 * SqrVglow; T4 = Vghigh - Vglow; T5 = SqrVghigh - SqrVglow; T6 = CubVghigh - CubVglow; T7 = Con1 - Con3; delta = (T1 - T0) * T6 + (T2 - T3) * T5 + (T0 * T3 - T1 * T2) * T4; delta = 1.0 / delta; Coeffb = (T1 - Con4 * T0) * T6 + (Con4 * T2 - T3) * T5 + (T0 * T3 - T1 * T2) * T7; Coeffc = (Con4 - 1.0) * T6 + (T2 - T3) * T7 + (T3 - Con4 * T2) * T4; Coeffd = (T1 - T0) * T7 + (1.0 - Con4) * T5 + (Con4 * T0 - T1) * T4; Coeffa = SqrVghigh * (Coeffc + Coeffd * T0); Vgeff = (Coeffa + Vgst * (Coeffb + Vgst * (Coeffc + Vgst * Coeffd))) * delta; dVgeff_dVg = (Coeffb + Vgst * (2.0 * Coeffc + 3.0 * Vgst * Coeffd)) * delta; T7 = Con3 * tmp; T8 = dT1s_dVb * here->pParam->B2nB / (T1s * T1s * n); T9 = n * model->B2Vtm; dCon3_dVd = T7 * (n * Exp1 / tmp1 - Vglow * here->pParam->B2nD / n + T9 * here->pParam->B2vofD); dCon3_dVb = T7 * (T9 * Inv_Aa * dAa_dVb + Vglow * T8 + T9 * here->pParam->B2vofB); dCon4_dVd = tmp * dCon3_dVd - T7 * here->pParam->B2nD / n; dCon4_dVb = tmp * dCon3_dVb + T7 * T8; dCoeffb_dVd = dCon4_dVd * (T2 * T5 - T0 * T6) + dCon3_dVd * (T1 * T2 - T0 * T3); dCoeffc_dVd = dCon4_dVd * (T6 - T2 * T4) + dCon3_dVd * (T3 - T2); dCoeffd_dVd = dCon4_dVd * (T0 * T4 - T5) + dCon3_dVd * (T0 - T1); dCoeffa_dVd = SqrVghigh * (dCoeffc_dVd + dCoeffd_dVd * T0); dVgeff_dVd = -dVgeff_dVg * dVth_dVd + (dCoeffa_dVd + Vgst * (dCoeffb_dVd + Vgst * (dCoeffc_dVd + Vgst * dCoeffd_dVd))) * delta; dCoeffb_dVb = dCon4_dVb * (T2 * T5 - T0 * T6) + dCon3_dVb * (T1 * T2 - T0 * T3); dCoeffc_dVb = dCon4_dVb * (T6 - T2 * T4) + dCon3_dVb * (T3 - T2); dCoeffd_dVb = dCon4_dVb * (T0 * T4 - T5) + dCon3_dVb * (T0 - T1); dCoeffa_dVb = SqrVghigh * (dCoeffc_dVb + dCoeffd_dVb * T0); dVgeff_dVb = -dVgeff_dVg * dVth_dVb + (dCoeffa_dVb + Vgst * (dCoeffb_dVb + Vgst * (dCoeffc_dVb + Vgst * dCoeffd_dVb))) * delta; } } if (Vgeff > 0.0) { Uvert = 1.0 + Vgeff * (Ua + Vgeff * Ub); Uvert = MAX(Uvert, 0.2); Inv_Uvert = 1.0 / Uvert; T8 = Ua + 2.0 * Ub * Vgeff; dUvert_dVg = T8 * dVgeff_dVg; dUvert_dVd = T8 * dVgeff_dVd; dUvert_dVb = T8 * dVgeff_dVb + Vgeff * (here->pParam->B2uaB + Vgeff * here->pParam->B2ubB); T8 = U1s * Inv_Aa * Inv_Uvert; Vc = T8 * Vgeff; T9 = Vc * Inv_Uvert; dVc_dVg = T8 * dVgeff_dVg - T9 * dUvert_dVg; dVc_dVd = T8 * dVgeff_dVd - T9 * dUvert_dVd; dVc_dVb = T8 * dVgeff_dVb + here->pParam->B2u1B * Vgeff * Inv_Aa * Inv_Uvert - Vc * Inv_Aa * dAa_dVb - T9 * dUvert_dVb; tmp2 = sqrt(1.0 + 2.0 * Vc); Kk = 0.5 * (1.0 + Vc + tmp2); Inv_Kk = 1.0 / Kk; dKk_dVc = 0.5 + 0.5 / tmp2; SqrtKk = sqrt(Kk); T8 = Inv_Aa / SqrtKk; Vdsat = Vgeff * T8; Vdsat = MAX(Vdsat, 1.0e-18); Inv_Vdsat = 1.0 / Vdsat; T9 = 0.5 * Vdsat * Inv_Kk * dKk_dVc; dVdsat_dVd = T8 * dVgeff_dVd - T9 * dVc_dVd; dVdsat_dVg = T8 * dVgeff_dVg - T9 * dVc_dVg; dVdsat_dVb = T8 * dVgeff_dVb - T9 * dVc_dVb - Vdsat* Inv_Aa * dAa_dVb; Beta0 = here->pParam->B2beta0 + here->pParam->B2beta0B * Vbs; Betas = here->pParam->B2betas0 + here->pParam->B2betasB * Vbs; Beta2 = here->pParam->B2beta20 + here->pParam->B2beta2B * Vbs + here->pParam->B2beta2G * Vgs; Beta3 = here->pParam->B2beta30 + here->pParam->B2beta3B * Vbs + here->pParam->B2beta3G * Vgs; Beta4 = here->pParam->B2beta40 + here->pParam->B2beta4B * Vbs + here->pParam->B2beta4G * Vgs; Beta1 = Betas - (Beta0 + model->B2vdd * (Beta3 - model->B2vdd * Beta4)); T0 = Vds * Beta2 * Inv_Vdsat; T0 = MIN(T0, 30.0); T1 = exp(T0); T2 = T1 * T1; T3 = T2 + 1.0; tanh = (T2 - 1.0) / T3; Sqrsech = 4.0 * T2 / (T3 * T3); Beta = Beta0 + Beta1 * tanh + Vds * (Beta3 - Beta4 * Vds); T4 = Beta1 * Sqrsech * Inv_Vdsat; T5 = model->B2vdd * tanh; dBeta_dVd = Beta3 - 2.0 * Beta4 * Vds + T4 * (Beta2 - T0 * dVdsat_dVd); dBeta_dVg = T4 * (here->pParam->B2beta2G * Vds - T0 * dVdsat_dVg) + here->pParam->B2beta3G * (Vds - T5) - here->pParam->B2beta4G * (Vds * Vds - model->B2vdd * T5); dBeta1_dVb = here->pParam->Arg; dBeta_dVb = here->pParam->B2beta0B + dBeta1_dVb * tanh + Vds * (here->pParam->B2beta3B - Vds * here->pParam->B2beta4B) + T4 * (here->pParam->B2beta2B * Vds - T0 * dVdsat_dVb); if (Vgst > Vglow) { if (Vds <= Vdsat) /* triode region */ { T3 = Vds * Inv_Vdsat; T4 = T3 - 1.0; T2 = 1.0 - here->pParam->B2u1D * T4 * T4; U1 = U1s * T2; Utot = Uvert + U1 * Vds; Utot = MAX(Utot, 0.5); Inv_Utot = 1.0 / Utot; T5 = 2.0 * U1s * here->pParam->B2u1D * Inv_Vdsat * T4; dU1_dVd = T5 * (T3 * dVdsat_dVd - 1.0); dU1_dVg = T5 * T3 * dVdsat_dVg; dU1_dVb = T5 * T3 * dVdsat_dVb + here->pParam->B2u1B * T2; dUtot_dVd = dUvert_dVd + U1 + Vds * dU1_dVd; dUtot_dVg = dUvert_dVg + Vds * dU1_dVg; dUtot_dVb = dUvert_dVb + Vds * dU1_dVb; tmp1 = (Vgeff - 0.5 * Aa * Vds); tmp3 = tmp1 * Vds; Betaeff = Beta * Inv_Utot; *Ids = Betaeff * tmp3; T6 = *Ids / Betaeff * Inv_Utot; *gds = T6 * (dBeta_dVd - Betaeff * dUtot_dVd) + Betaeff * (tmp1 + (dVgeff_dVd - 0.5 * Aa) * Vds); *gm = T6 * (dBeta_dVg - Betaeff * dUtot_dVg) + Betaeff * Vds * dVgeff_dVg; *gmb = T6 * (dBeta_dVb - Betaeff * dUtot_dVb) + Betaeff * Vds * (dVgeff_dVb - 0.5 * Vds * dAa_dVb); } else /* Saturation */ { tmp1 = Vgeff * Inv_Aa * Inv_Kk; tmp3 = 0.5 * Vgeff * tmp1; Betaeff = Beta * Inv_Uvert; *Ids = Betaeff * tmp3; T0 = *Ids / Betaeff * Inv_Uvert; T1 = Betaeff * Vgeff * Inv_Aa * Inv_Kk; T2 = *Ids * Inv_Kk * dKk_dVc; if (here->pParam->B2ai0 != 0.0) { Ai = here->pParam->B2ai0 + here->pParam->B2aiB * Vbs; Bi = here->pParam->B2bi0 + here->pParam->B2biB * Vbs; T5 = Bi / (Vds - Vdsat); T5 = MIN(T5, 30.0); T6 = exp(-T5); FR = 1.0 + Ai * T6; T7 = T5 / (Vds - Vdsat); T8 = (1.0 - FR) * T7; dFR_dVd = T8 * (dVdsat_dVd - 1.0); dFR_dVg = T8 * dVdsat_dVg; dFR_dVb = T8 * dVdsat_dVb + T6 * (here->pParam->B2aiB - Ai * here->pParam->B2biB / (Vds - Vdsat)); *gds = (T0 * (dBeta_dVd - Betaeff * dUvert_dVd) + T1 * dVgeff_dVd - T2 * dVc_dVd) * FR + *Ids * dFR_dVd; *gm = (T0 * (dBeta_dVg - Betaeff * dUvert_dVg) + T1 * dVgeff_dVg - T2 * dVc_dVg) * FR + *Ids * dFR_dVg; *gmb = (T0 * (dBeta_dVb - Betaeff * dUvert_dVb) + T1 * dVgeff_dVb - T2 * dVc_dVb - *Ids * Inv_Aa * dAa_dVb) * FR + *Ids * dFR_dVb; *Ids *= FR; } else { *gds = T0 * (dBeta_dVd - Betaeff * dUvert_dVd) + T1 * dVgeff_dVd - T2 * dVc_dVd; *gm = T0 * (dBeta_dVg - Betaeff * dUvert_dVg) + T1 * dVgeff_dVg - T2 * dVc_dVg; *gmb = T0 * (dBeta_dVb - Betaeff * dUvert_dVb) + T1 * dVgeff_dVb - T2 * dVc_dVb - *Ids * Inv_Aa * dAa_dVb; } } /* end of Saturation */ } else { T0 = Exp0 * Exp0; T1 = Exp1; *Ids = Beta * model->B2Vtm * model->B2Vtm * T0 * (1.0 - T1); T2 = *Ids / Beta; T4 = n * model->B2Vtm; T3 = *Ids / T4; if ((Vds > Vdsat) && here->pParam->B2ai0 != 0.0) { Ai = here->pParam->B2ai0 + here->pParam->B2aiB * Vbs; Bi = here->pParam->B2bi0 + here->pParam->B2biB * Vbs; T5 = Bi / (Vds - Vdsat); T5 = MIN(T5, 30.0); T6 = exp(-T5); FR = 1.0 + Ai * T6; T7 = T5 / (Vds - Vdsat); T8 = (1.0 - FR) * T7; dFR_dVd = T8 * (dVdsat_dVd - 1.0); dFR_dVg = T8 * dVdsat_dVg; dFR_dVb = T8 * dVdsat_dVb + T6 * (here->pParam->B2aiB - Ai * here->pParam->B2biB / (Vds - Vdsat)); } else { FR = 1.0; dFR_dVd = 0.0; dFR_dVg = 0.0; dFR_dVb = 0.0; } *gds = (T2 * dBeta_dVd + T3 * (here->pParam->B2vofD * T4 - dVth_dVd - here->pParam->B2nD * Vgst / n) + Beta * model->B2Vtm * T0 * T1) * FR + *Ids * dFR_dVd; *gm = (T2 * dBeta_dVg + T3) * FR + *Ids * dFR_dVg; *gmb = (T2 * dBeta_dVb + T3 * (here->pParam->B2vofB * T4 - dVth_dVb + here->pParam->B2nB * Vgst / (n * T1s * T1s) * dT1s_dVb)) * FR + *Ids * dFR_dVb; *Ids *= FR; } } else { *Ids = 0.0; *gm = 0.0; *gds = 0.0; *gmb = 0.0; } /* Some Limiting of DC Parameters */ *gds = MAX(*gds,1.0e-20); if ((model->B2channelChargePartitionFlag > 1) || ((!ChargeComputationNeeded) && (model->B2channelChargePartitionFlag > -5))) { *qg = 0.0; *qd = 0.0; *qb = 0.0; *cgg = 0.0; *cgs = 0.0; *cgd = 0.0; *cdg = 0.0; *cds = 0.0; *cdd = 0.0; *cbg = 0.0; *cbs = 0.0; *cbd = 0.0; goto finished; } else { if (Vbs < 0.0) { Vbseff = Vbs; dVbseff_dVb = 1.0; } else { Vbseff = here->pParam->B2phi - Phisb; dVbseff_dVb = -dPhisb_dVb; } Arg1 = Vgs - Vbseff - here->pParam->B2vfb; Arg2 = Arg1 - Vgst; Qbulk = here->pParam->One_Third_CoxWL * Arg2; dQbulk_dVb = here->pParam->One_Third_CoxWL * (dVth_dVb - dVbseff_dVb); dQbulk_dVd = here->pParam->One_Third_CoxWL * dVth_dVd; if (Arg1 <= 0.0) { *qg = here->pParam->CoxWL * Arg1; *qb = -(*qg); *qd = 0.0; *cgg = here->pParam->CoxWL; *cgd = 0.0; *cgs = -*cgg * (1.0 - dVbseff_dVb); *cdg = 0.0; *cdd = 0.0; *cds = 0.0; *cbg = -here->pParam->CoxWL; *cbd = 0.0; *cbs = -*cgs; } else if (Vgst <= 0.0) { T2 = Arg1 / Arg2; T3 = T2 * T2 * (here->pParam->CoxWL - here->pParam->Two_Third_CoxWL * T2); *qg = here->pParam->CoxWL * Arg1 * (1.0 - T2 * (1.0 - T2 / 3.0)); *qb = -(*qg); *qd = 0.0; *cgg = here->pParam->CoxWL * (1.0 - T2 * (2.0 - T2)); tmp = T3 * dVth_dVb - (*cgg + T3) * dVbseff_dVb; *cgd = T3 * dVth_dVd; *cgs = -(*cgg + *cgd + tmp); *cdg = 0.0; *cdd = 0.0; *cds = 0.0; *cbg = -*cgg; *cbd = -*cgd; *cbs = -*cgs; } else { if (Vgst < here->pParam->B2vghigh) { Uvert = 1.0 + Vgst * (Ua + Vgst * Ub); Uvert = MAX(Uvert, 0.2); Inv_Uvert = 1.0 / Uvert; dUvert_dVg = Ua + 2.0 * Ub * Vgst; dUvert_dVd = -dUvert_dVg * dVth_dVd; dUvert_dVb = -dUvert_dVg * dVth_dVb + Vgst * (here->pParam->B2uaB + Vgst * here->pParam->B2ubB); T8 = U1s * Inv_Aa * Inv_Uvert; Vc = T8 * Vgst; T9 = Vc * Inv_Uvert; dVc_dVg = T8 - T9 * dUvert_dVg; dVc_dVd = -T8 * dVth_dVd - T9 * dUvert_dVd; dVc_dVb = -T8 * dVth_dVb + here->pParam->B2u1B * Vgst * Inv_Aa * Inv_Uvert - Vc * Inv_Aa * dAa_dVb - T9 * dUvert_dVb; tmp2 = sqrt(1.0 + 2.0 * Vc); Kk = 0.5 * (1.0 + Vc + tmp2); Inv_Kk = 1.0 / Kk; dKk_dVc = 0.5 + 0.5 / tmp2; SqrtKk = sqrt(Kk); T8 = Inv_Aa / SqrtKk; Vdsat = Vgst * T8; T9 = 0.5 * Vdsat * Inv_Kk * dKk_dVc; dVdsat_dVd = -T8 * dVth_dVd - T9 * dVc_dVd; dVdsat_dVg = T8 - T9 * dVc_dVg; dVdsat_dVb = -T8 * dVth_dVb - T9 * dVc_dVb - Vdsat* Inv_Aa * dAa_dVb; } if (Vds >= Vdsat) { /* saturation region */ *cgg = here->pParam->Two_Third_CoxWL; *cgd = -*cgg * dVth_dVd + dQbulk_dVd; tmp = -*cgg * dVth_dVb + dQbulk_dVb; *cgs = -(*cgg + *cgd + tmp); *cbg = 0.0; *cbd = -dQbulk_dVd; *cbs = dQbulk_dVd + dQbulk_dVb; *cdg = -0.4 * *cgg; tmp = -*cdg * dVth_dVb; *cdd = -*cdg * dVth_dVd; *cds = -(*cdg + *cdd + tmp); *qb = -Qbulk; *qg = here->pParam->Two_Third_CoxWL * Vgst + Qbulk; *qd = *cdg * Vgst; } else { /* linear region */ T7 = Vds / Vdsat; T8 = Vgst / Vdsat; T6 = T7 * T8; T9 = 1.0 - T7; Vgdt = Vgst * T9; T0 = Vgst / (Vgst + Vgdt); T1 = Vgdt / (Vgst + Vgdt); T5 = T0 * T1; T2 = 1.0 - T1 + T5; T3 = 1.0 - T0 + T5; dVgdt_dVg = T9 + T6 * dVdsat_dVg; dVgdt_dVd = T6 * dVdsat_dVd - T8 -T9 * dVth_dVd; dVgdt_dVb = T6 * dVdsat_dVb -T9 * dVth_dVb; *qg = here->pParam->Two_Third_CoxWL * (Vgst + Vgdt - Vgdt * T0) + Qbulk; *qb = -Qbulk; *qd = -here->pParam->One_Third_CoxWL * (0.2 * Vgdt + 0.8 * Vgst + Vgdt * T1 + 0.2 * T5 * (Vgdt - Vgst)); *cgg = here->pParam->Two_Third_CoxWL * (T2 + T3 * dVgdt_dVg); tmp = dQbulk_dVb + here->pParam->Two_Third_CoxWL * (T3 * dVgdt_dVb - T2 * dVth_dVb); *cgd = here->pParam->Two_Third_CoxWL * (T3 * dVgdt_dVd - T2 * dVth_dVd) + dQbulk_dVd; *cgs = -(*cgg + *cgd + tmp); T2 = 0.8 - 0.4 * T1 * (2.0 * T1 + T0 + T0 * (T1 - T0)); T3 = 0.2 + T1 + T0 * (1.0 - 0.4 * T0 * (T1 + 3.0 * T0)); *cdg = -here->pParam->One_Third_CoxWL * (T2 + T3 * dVgdt_dVg); tmp = here->pParam->One_Third_CoxWL * (T2 * dVth_dVb - T3 * dVgdt_dVb); *cdd = here->pParam->One_Third_CoxWL * (T2 * dVth_dVd - T3 * dVgdt_dVd); *cds = -(*cdg + tmp + *cdd); *cbg = 0.0; *cbd = -dQbulk_dVd; *cbs = dQbulk_dVd + dQbulk_dVb; } } } finished: /* returning Values to Calling Routine */ valuetypeflag = (int) model->B2channelChargePartitionFlag; switch (valuetypeflag) { case 0: *Ids = MAX(*Ids,1e-50); break; case -1: *Ids = MAX(*Ids,1e-50); break; case -2: *Ids = *gm; break; case -3: *Ids = *gds; break; case -4: *Ids = 1.0 / *gds; break; case -5: *Ids = *gmb; break; case -6: *Ids = *qg / 1.0e-12; break; case -7: *Ids = *qb / 1.0e-12; break; case -8: *Ids = *qd / 1.0e-12; break; case -9: *Ids = -(*qb + *qg + *qd) / 1.0e-12; break; case -10: *Ids = *cgg / 1.0e-12; break; case -11: *Ids = *cgd / 1.0e-12; break; case -12: *Ids = *cgs / 1.0e-12; break; case -13: *Ids = -(*cgg + *cgd + *cgs) / 1.0e-12; break; case -14: *Ids = *cbg / 1.0e-12; break; case -15: *Ids = *cbd / 1.0e-12; break; case -16: *Ids = *cbs / 1.0e-12; break; case -17: *Ids = -(*cbg + *cbd + *cbs) / 1.0e-12; break; case -18: *Ids = *cdg / 1.0e-12; break; case -19: *Ids = *cdd / 1.0e-12; break; case -20: *Ids = *cds / 1.0e-12; break; case -21: *Ids = -(*cdg + *cdd + *cds) / 1.0e-12; break; case -22: *Ids = -(*cgg + *cdg + *cbg) / 1.0e-12; break; case -23: *Ids = -(*cgd + *cdd + *cbd) / 1.0e-12; break; case -24: *Ids = -(*cgs + *cds + *cbs) / 1.0e-12; break; default: *Ids = MAX(*Ids, 1.0e-50); break; } *von = Vth; *vdsat = Vdsat; } tmpk8ny_4pz/src/spicelib/devices/bsim2/b2pzld.c0000644000175000017500000001365013546075722021545 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "bsim2def.h" #include "ngspice/suffix.h" int B2pzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { B2model *model = (B2model*)inModel; B2instance *here; int xnrm; int xrev; double gdpr; double gspr; double gm; double gds; double gmbs; double gbd; double gbs; double capbd; double capbs; double xcggb; double xcgdb; double xcgsb; double xcbgb; double xcbdb; double xcbsb; double xcddb; double xcssb; double xcdgb; double xcsgb; double xcdsb; double xcsdb; double cggb; double cgdb; double cgsb; double cbgb; double cbdb; double cbsb; double cddb; double cdgb; double cdsb; double m; for( ; model != NULL; model = B2nextModel(model)) { for(here = B2instances(model); here!= NULL; here = B2nextInstance(here)) { if (here->B2mode >= 0) { xnrm=1; xrev=0; } else { xnrm=0; xrev=1; } gdpr=here->B2drainConductance; gspr=here->B2sourceConductance; gm= *(ckt->CKTstate0 + here->B2gm); gds= *(ckt->CKTstate0 + here->B2gds); gmbs= *(ckt->CKTstate0 + here->B2gmbs); gbd= *(ckt->CKTstate0 + here->B2gbd); gbs= *(ckt->CKTstate0 + here->B2gbs); capbd= *(ckt->CKTstate0 + here->B2capbd); capbs= *(ckt->CKTstate0 + here->B2capbs); /* * charge oriented model parameters */ cggb = *(ckt->CKTstate0 + here->B2cggb); cgsb = *(ckt->CKTstate0 + here->B2cgsb); cgdb = *(ckt->CKTstate0 + here->B2cgdb); cbgb = *(ckt->CKTstate0 + here->B2cbgb); cbsb = *(ckt->CKTstate0 + here->B2cbsb); cbdb = *(ckt->CKTstate0 + here->B2cbdb); cdgb = *(ckt->CKTstate0 + here->B2cdgb); cdsb = *(ckt->CKTstate0 + here->B2cdsb); cddb = *(ckt->CKTstate0 + here->B2cddb); xcdgb = (cdgb - here->pParam->B2GDoverlapCap) ; xcddb = (cddb + capbd + here->pParam->B2GDoverlapCap) ; xcdsb = cdsb ; xcsgb = -(cggb + cbgb + cdgb + here->pParam->B2GSoverlapCap ) ; xcsdb = -(cgdb + cbdb + cddb) ; xcssb = (capbs + here->pParam->B2GSoverlapCap - (cgsb+cbsb+cdsb)) ; xcggb = (cggb + here->pParam->B2GDoverlapCap + here->pParam->B2GSoverlapCap + here->pParam->B2GBoverlapCap) ; xcgdb = (cgdb - here->pParam->B2GDoverlapCap ) ; xcgsb = (cgsb - here->pParam->B2GSoverlapCap) ; xcbgb = (cbgb - here->pParam->B2GBoverlapCap) ; xcbdb = (cbdb - capbd ) ; xcbsb = (cbsb - capbs ) ; m = here->B2m; *(here->B2GgPtr ) += m * (xcggb * s->real); *(here->B2GgPtr +1) += m * (xcggb * s->imag); *(here->B2BbPtr ) += m * ((-xcbgb-xcbdb-xcbsb) * s->real); *(here->B2BbPtr +1) += m * ((-xcbgb-xcbdb-xcbsb) * s->imag); *(here->B2DPdpPtr ) += m * (xcddb * s->real); *(here->B2DPdpPtr +1) += m * (xcddb * s->imag); *(here->B2SPspPtr ) += m * (xcssb * s->real); *(here->B2SPspPtr +1) += m * (xcssb * s->imag); *(here->B2GbPtr ) += m * ((-xcggb-xcgdb-xcgsb) * s->real); *(here->B2GbPtr +1) += m * ((-xcggb-xcgdb-xcgsb) * s->imag); *(here->B2GdpPtr ) += m * (xcgdb * s->real); *(here->B2GdpPtr +1) += m * (xcgdb * s->imag); *(here->B2GspPtr ) += m * (xcgsb * s->real); *(here->B2GspPtr +1) += m * (xcgsb * s->imag); *(here->B2BgPtr ) += m * (xcbgb * s->real); *(here->B2BgPtr +1) += m * (xcbgb * s->imag); *(here->B2BdpPtr ) += m * (xcbdb * s->real); *(here->B2BdpPtr +1) += m * (xcbdb * s->imag); *(here->B2BspPtr ) += m * (xcbsb * s->real); *(here->B2BspPtr +1) += m * (xcbsb * s->imag); *(here->B2DPgPtr ) += m * (xcdgb * s->real); *(here->B2DPgPtr +1) += m * (xcdgb * s->imag); *(here->B2DPbPtr ) += m * ((-xcdgb-xcddb-xcdsb) * s->real); *(here->B2DPbPtr +1) += m * ((-xcdgb-xcddb-xcdsb) * s->imag); *(here->B2DPspPtr ) += m * (xcdsb * s->real); *(here->B2DPspPtr +1) += m * (xcdsb * s->imag); *(here->B2SPgPtr ) += m * (xcsgb * s->real); *(here->B2SPgPtr +1) += m * (xcsgb * s->imag); *(here->B2SPbPtr ) += m * ((-xcsgb-xcsdb-xcssb) * s->real); *(here->B2SPbPtr +1) += m * ((-xcsgb-xcsdb-xcssb) * s->imag); *(here->B2SPdpPtr ) += m * (xcsdb * s->real); *(here->B2SPdpPtr +1) += m * (xcsdb * s->imag); *(here->B2DdPtr) += m * (gdpr); *(here->B2SsPtr) += m * (gspr); *(here->B2BbPtr) += m * (gbd+gbs); *(here->B2DPdpPtr) += m * (gdpr+gds+gbd+xrev*(gm+gmbs)); *(here->B2SPspPtr) += m * (gspr+gds+gbs+xnrm*(gm+gmbs)); *(here->B2DdpPtr) -= m * (gdpr); *(here->B2SspPtr) -= m * (gspr); *(here->B2BdpPtr) -= m * (gbd); *(here->B2BspPtr) -= m * (gbs); *(here->B2DPdPtr) -= m * (gdpr); *(here->B2DPgPtr) += m * ((xnrm-xrev)*gm); *(here->B2DPbPtr) += m * (-gbd+(xnrm-xrev)*gmbs); *(here->B2DPspPtr) += m * (-gds-xnrm*(gm+gmbs)); *(here->B2SPgPtr) += m * (-(xnrm-xrev)*gm); *(here->B2SPsPtr) -= m * (gspr); *(here->B2SPbPtr) += m * (-gbs-(xnrm-xrev)*gmbs); *(here->B2SPdpPtr) += m * (-gds-xrev*(gm+gmbs)); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim2/b2par.c0000644000175000017500000000532013546075722021351 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Hong J. Park, Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "bsim2def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int B2param(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { B2instance *here = (B2instance*)inst; NG_IGNORE(select); switch(param) { case BSIM2_W: here->B2w = value->rValue; here->B2wGiven = TRUE; break; case BSIM2_L: here->B2l = value->rValue; here->B2lGiven = TRUE; break; case BSIM2_M: here->B2m = value->rValue; here->B2mGiven = TRUE; break; case BSIM2_AS: here->B2sourceArea = value->rValue; here->B2sourceAreaGiven = TRUE; break; case BSIM2_AD: here->B2drainArea = value->rValue; here->B2drainAreaGiven = TRUE; break; case BSIM2_PS: here->B2sourcePerimeter = value->rValue; here->B2sourcePerimeterGiven = TRUE; break; case BSIM2_PD: here->B2drainPerimeter = value->rValue; here->B2drainPerimeterGiven = TRUE; break; case BSIM2_NRS: here->B2sourceSquares = value->rValue; here->B2sourceSquaresGiven = TRUE; break; case BSIM2_NRD: here->B2drainSquares = value->rValue; here->B2drainSquaresGiven = TRUE; break; case BSIM2_OFF: here->B2off = value->iValue; break; case BSIM2_IC_VBS: here->B2icVBS = value->rValue; here->B2icVBSGiven = TRUE; break; case BSIM2_IC_VDS: here->B2icVDS = value->rValue; here->B2icVDSGiven = TRUE; break; case BSIM2_IC_VGS: here->B2icVGS = value->rValue; here->B2icVGSGiven = TRUE; break; case BSIM2_IC: switch(value->v.numValue){ case 3: here->B2icVBS = *(value->v.vec.rVec+2); here->B2icVBSGiven = TRUE; case 2: here->B2icVGS = *(value->v.vec.rVec+1); here->B2icVGSGiven = TRUE; case 1: here->B2icVDS = *(value->v.vec.rVec); here->B2icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim2/b2ld.c0000644000175000017500000006775513546075722021212 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Hong J. Park, Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim2def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" int B2load(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current value into the * sparse matrix previously provided */ { B2model *model = (B2model*)inModel; B2instance *here; double DrainSatCurrent; double EffectiveLength; double GateBulkOverlapCap; double GateDrainOverlapCap; double GateSourceOverlapCap; double SourceSatCurrent; double DrainArea; double SourceArea; double DrainPerimeter; double SourcePerimeter; double arg; double capbd = 0.0; double capbs = 0.0; double cbd; double cbhat; double cbs; double cd; double cdrain; double cdhat; double cdreq; double ceq; double ceqbd; double ceqbs; double ceqqb; double ceqqd; double ceqqg; double czbd; double czbdsw; double czbs; double czbssw; double delvbd; double delvbs; double delvds; double delvgd; double delvgs; double evbd; double evbs; double gbd; double gbs; double gcbdb; double gcbgb; double gcbsb; double gcddb; double gcdgb; double gcdsb; double gcgdb; double gcggb; double gcgsb; double gcsdb; double gcsgb; double gcssb; double gds; double geq; double gm; double gmbs; double sarg; double sargsw; double vbd; double vbs; double vcrit; double vds; double vdsat; double vgb; double vgd; double vgdo; double vgs; double von; #ifndef PREDICTOR double xfact; #endif double xnrm; double xrev; int Check; double cgdb; double cgsb; double cbdb; double cdgb; double cddb; double cdsb; double cggb; double cbgb; double cbsb; double csgb; double cssb; double csdb; double PhiB; double PhiBSW; double MJ; double MJSW; double argsw; double qgate; double qbulk; double qdrn; double qsrc; double cqgate; double cqbulk; double cqdrn; double vt0; double args[8]; int ByPass; #ifndef NOBYPASS double tempv; #endif /*NOBYPASS*/ int error; double m; /* loop through all the B2 device models */ for( ; model != NULL; model = B2nextModel(model)) { /* loop through all the instances of the model */ for (here = B2instances(model); here != NULL ; here=B2nextInstance(here)) { EffectiveLength=here->B2l - model->B2deltaL * 1.e-6;/* m */ DrainArea = here->B2drainArea; SourceArea = here->B2sourceArea; DrainPerimeter = here->B2drainPerimeter; SourcePerimeter = here->B2sourcePerimeter; if( (DrainSatCurrent=DrainArea*model->B2jctSatCurDensity) < 1e-15){ DrainSatCurrent = 1.0e-15; } if( (SourceSatCurrent=SourceArea*model->B2jctSatCurDensity) <1.0e-15){ SourceSatCurrent = 1.0e-15; } GateSourceOverlapCap = model->B2gateSourceOverlapCap *here->B2w; GateDrainOverlapCap = model->B2gateDrainOverlapCap * here->B2w; GateBulkOverlapCap = model->B2gateBulkOverlapCap *EffectiveLength; von = model->B2type * here->B2von; vdsat = model->B2type * here->B2vdsat; vt0 = model->B2type * here->pParam->B2vt0; Check=1; ByPass = 0; if((ckt->CKTmode & MODEINITSMSIG)) { vbs= *(ckt->CKTstate0 + here->B2vbs); vgs= *(ckt->CKTstate0 + here->B2vgs); vds= *(ckt->CKTstate0 + here->B2vds); } else if ((ckt->CKTmode & MODEINITTRAN)) { vbs= *(ckt->CKTstate1 + here->B2vbs); vgs= *(ckt->CKTstate1 + here->B2vgs); vds= *(ckt->CKTstate1 + here->B2vds); } else if((ckt->CKTmode & MODEINITJCT) && !here->B2off) { vds= model->B2type * here->B2icVDS; vgs= model->B2type * here->B2icVGS; vbs= model->B2type * here->B2icVBS; if((vds==0) && (vgs==0) && (vbs==0) && ((ckt->CKTmode & (MODETRAN|MODEAC|MODEDCOP|MODEDCTRANCURVE)) || (!(ckt->CKTmode & MODEUIC)))) { vbs = -1; vgs = vt0; vds = 0; } } else if((ckt->CKTmode & (MODEINITJCT | MODEINITFIX) ) && (here->B2off)) { vbs=vgs=vds=0; } else { #ifndef PREDICTOR if((ckt->CKTmode & MODEINITPRED)) { xfact=ckt->CKTdelta/ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->B2vbs) = *(ckt->CKTstate1 + here->B2vbs); vbs = (1+xfact)* (*(ckt->CKTstate1 + here->B2vbs)) -(xfact * (*(ckt->CKTstate2 + here->B2vbs))); *(ckt->CKTstate0 + here->B2vgs) = *(ckt->CKTstate1 + here->B2vgs); vgs = (1+xfact)* (*(ckt->CKTstate1 + here->B2vgs)) -(xfact * (*(ckt->CKTstate2 + here->B2vgs))); *(ckt->CKTstate0 + here->B2vds) = *(ckt->CKTstate1 + here->B2vds); vds = (1+xfact)* (*(ckt->CKTstate1 + here->B2vds)) -(xfact * (*(ckt->CKTstate2 + here->B2vds))); *(ckt->CKTstate0 + here->B2vbd) = *(ckt->CKTstate0 + here->B2vbs)- *(ckt->CKTstate0 + here->B2vds); *(ckt->CKTstate0 + here->B2cd) = *(ckt->CKTstate1 + here->B2cd); *(ckt->CKTstate0 + here->B2cbs) = *(ckt->CKTstate1 + here->B2cbs); *(ckt->CKTstate0 + here->B2cbd) = *(ckt->CKTstate1 + here->B2cbd); *(ckt->CKTstate0 + here->B2gm) = *(ckt->CKTstate1 + here->B2gm); *(ckt->CKTstate0 + here->B2gds) = *(ckt->CKTstate1 + here->B2gds); *(ckt->CKTstate0 + here->B2gmbs) = *(ckt->CKTstate1 + here->B2gmbs); *(ckt->CKTstate0 + here->B2gbd) = *(ckt->CKTstate1 + here->B2gbd); *(ckt->CKTstate0 + here->B2gbs) = *(ckt->CKTstate1 + here->B2gbs); *(ckt->CKTstate0 + here->B2cggb) = *(ckt->CKTstate1 + here->B2cggb); *(ckt->CKTstate0 + here->B2cbgb) = *(ckt->CKTstate1 + here->B2cbgb); *(ckt->CKTstate0 + here->B2cbsb) = *(ckt->CKTstate1 + here->B2cbsb); *(ckt->CKTstate0 + here->B2cgdb) = *(ckt->CKTstate1 + here->B2cgdb); *(ckt->CKTstate0 + here->B2cgsb) = *(ckt->CKTstate1 + here->B2cgsb); *(ckt->CKTstate0 + here->B2cbdb) = *(ckt->CKTstate1 + here->B2cbdb); *(ckt->CKTstate0 + here->B2cdgb) = *(ckt->CKTstate1 + here->B2cdgb); *(ckt->CKTstate0 + here->B2cddb) = *(ckt->CKTstate1 + here->B2cddb); *(ckt->CKTstate0 + here->B2cdsb) = *(ckt->CKTstate1 + here->B2cdsb); } else { #endif /* PREDICTOR */ vbs = model->B2type * ( *(ckt->CKTrhsOld+here->B2bNode) - *(ckt->CKTrhsOld+here->B2sNodePrime)); vgs = model->B2type * ( *(ckt->CKTrhsOld+here->B2gNode) - *(ckt->CKTrhsOld+here->B2sNodePrime)); vds = model->B2type * ( *(ckt->CKTrhsOld+here->B2dNodePrime) - *(ckt->CKTrhsOld+here->B2sNodePrime)); #ifndef PREDICTOR } #endif /* PREDICTOR */ vbd=vbs-vds; vgd=vgs-vds; vgdo = *(ckt->CKTstate0 + here->B2vgs) - *(ckt->CKTstate0 + here->B2vds); delvbs = vbs - *(ckt->CKTstate0 + here->B2vbs); delvbd = vbd - *(ckt->CKTstate0 + here->B2vbd); delvgs = vgs - *(ckt->CKTstate0 + here->B2vgs); delvds = vds - *(ckt->CKTstate0 + here->B2vds); delvgd = vgd-vgdo; if (here->B2mode >= 0) { cdhat= *(ckt->CKTstate0 + here->B2cd) - *(ckt->CKTstate0 + here->B2gbd) * delvbd + *(ckt->CKTstate0 + here->B2gmbs) * delvbs + *(ckt->CKTstate0 + here->B2gm) * delvgs + *(ckt->CKTstate0 + here->B2gds) * delvds ; } else { cdhat= *(ckt->CKTstate0 + here->B2cd) - ( *(ckt->CKTstate0 + here->B2gbd) - *(ckt->CKTstate0 + here->B2gmbs)) * delvbd - *(ckt->CKTstate0 + here->B2gm) * delvgd + *(ckt->CKTstate0 + here->B2gds) * delvds; } cbhat= *(ckt->CKTstate0 + here->B2cbs) + *(ckt->CKTstate0 + here->B2cbd) + *(ckt->CKTstate0 + here->B2gbd) * delvbd + *(ckt->CKTstate0 + here->B2gbs) * delvbs ; #ifndef NOBYPASS /* now lets see if we can bypass (ugh) */ /* following should be one big if connected by && all over * the place, but some C compilers can't handle that, so * we split it up here to let them digest it in stages */ tempv = MAX(fabs(cbhat),fabs(*(ckt->CKTstate0 + here->B2cbs) + *(ckt->CKTstate0 + here->B2cbd)))+ckt->CKTabstol; if((!(ckt->CKTmode & MODEINITPRED)) && (ckt->CKTbypass) ) if( (fabs(delvbs) < (ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->B2vbs)))+ ckt->CKTvoltTol)) ) if ( (fabs(delvbd) < (ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0+here->B2vbd)))+ ckt->CKTvoltTol)) ) if( (fabs(delvgs) < (ckt->CKTreltol * MAX(fabs(vgs), fabs(*(ckt->CKTstate0+here->B2vgs)))+ ckt->CKTvoltTol))) if ( (fabs(delvds) < (ckt->CKTreltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0+here->B2vds)))+ ckt->CKTvoltTol)) ) if( (fabs(cdhat- *(ckt->CKTstate0 + here->B2cd)) < ckt->CKTreltol * MAX(fabs(cdhat),fabs(*(ckt->CKTstate0 + here->B2cd))) + ckt->CKTabstol) ) if ( (fabs(cbhat-(*(ckt->CKTstate0 + here->B2cbs) + *(ckt->CKTstate0 + here->B2cbd))) < ckt->CKTreltol * tempv)) { /* bypass code */ vbs = *(ckt->CKTstate0 + here->B2vbs); vbd = *(ckt->CKTstate0 + here->B2vbd); vgs = *(ckt->CKTstate0 + here->B2vgs); vds = *(ckt->CKTstate0 + here->B2vds); vgd = vgs - vds; vgb = vgs - vbs; cd = *(ckt->CKTstate0 + here->B2cd); cbs = *(ckt->CKTstate0 + here->B2cbs); cbd = *(ckt->CKTstate0 + here->B2cbd); cdrain = here->B2mode * (cd + cbd); gm = *(ckt->CKTstate0 + here->B2gm); gds = *(ckt->CKTstate0 + here->B2gds); gmbs = *(ckt->CKTstate0 + here->B2gmbs); gbd = *(ckt->CKTstate0 + here->B2gbd); gbs = *(ckt->CKTstate0 + here->B2gbs); if((ckt->CKTmode & (MODETRAN | MODEAC)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) { cggb = *(ckt->CKTstate0 + here->B2cggb); cgdb = *(ckt->CKTstate0 + here->B2cgdb); cgsb = *(ckt->CKTstate0 + here->B2cgsb); cbgb = *(ckt->CKTstate0 + here->B2cbgb); cbdb = *(ckt->CKTstate0 + here->B2cbdb); cbsb = *(ckt->CKTstate0 + here->B2cbsb); cdgb = *(ckt->CKTstate0 + here->B2cdgb); cddb = *(ckt->CKTstate0 + here->B2cddb); cdsb = *(ckt->CKTstate0 + here->B2cdsb); capbs = *(ckt->CKTstate0 + here->B2capbs); capbd = *(ckt->CKTstate0 + here->B2capbd); ByPass = 1; goto line755; } else { goto line850; } } #endif /*NOBYPASS*/ von = model->B2type * here->B2von; if(*(ckt->CKTstate0 + here->B2vds) >=0) { vgs = DEVfetlim(vgs,*(ckt->CKTstate0 + here->B2vgs) ,von); vds = vgs - vgd; vds = DEVlimvds(vds,*(ckt->CKTstate0 + here->B2vds)); vgd = vgs - vds; } else { vgd = DEVfetlim(vgd,vgdo,von); vds = vgs - vgd; vds = -DEVlimvds(-vds,-(*(ckt->CKTstate0 + here->B2vds))); vgs = vgd + vds; } if(vds >= 0) { vcrit = CONSTvt0 *log(CONSTvt0/(CONSTroot2*SourceSatCurrent)); vbs = DEVpnjlim(vbs,*(ckt->CKTstate0 + here->B2vbs), CONSTvt0,vcrit,&Check); /* B2 test */ vbd = vbs-vds; } else { vcrit = CONSTvt0 * log(CONSTvt0/(CONSTroot2*DrainSatCurrent)); vbd = DEVpnjlim(vbd,*(ckt->CKTstate0 + here->B2vbd), CONSTvt0,vcrit,&Check); /* B2 test*/ vbs = vbd + vds; } } /* determine DC current and derivatives */ vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; if(vbs <= 0.0 ) { gbs = SourceSatCurrent / CONSTvt0 + ckt->CKTgmin; cbs = gbs * vbs ; } else { evbs = exp(vbs/CONSTvt0); gbs = SourceSatCurrent*evbs/CONSTvt0 + ckt->CKTgmin; cbs = SourceSatCurrent * (evbs-1) + ckt->CKTgmin * vbs ; } if(vbd <= 0.0) { gbd = DrainSatCurrent / CONSTvt0 + ckt->CKTgmin; cbd = gbd * vbd ; } else { evbd = exp(vbd/CONSTvt0); gbd = DrainSatCurrent*evbd/CONSTvt0 +ckt->CKTgmin; cbd = DrainSatCurrent *(evbd-1)+ckt->CKTgmin*vbd; } /* line 400 */ if(vds >= 0) { /* normal mode */ here->B2mode = 1; } else { /* inverse mode */ here->B2mode = -1; } /* call B2evaluate to calculate drain current and its * derivatives and charge and capacitances related to gate * drain, and bulk */ if( vds >= 0 ) { B2evaluate(vds,vbs,vgs,here,model,&gm,&gds,&gmbs,&qgate, &qbulk,&qdrn,&cggb,&cgdb,&cgsb,&cbgb,&cbdb,&cbsb,&cdgb, &cddb,&cdsb,&cdrain,&von,&vdsat,ckt); } else { B2evaluate(-vds,vbd,vgd,here,model,&gm,&gds,&gmbs,&qgate, &qbulk,&qsrc,&cggb,&cgsb,&cgdb,&cbgb,&cbsb,&cbdb,&csgb, &cssb,&csdb,&cdrain,&von,&vdsat,ckt); } here->B2von = model->B2type * von; here->B2vdsat = model->B2type * vdsat; /* * COMPUTE EQUIVALENT DRAIN CURRENT SOURCE */ cd=here->B2mode * cdrain - cbd; if ((ckt->CKTmode & (MODETRAN | MODEAC | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP ) && (ckt->CKTmode & MODEUIC))) { /* * charge storage elements * * bulk-drain and bulk-source depletion capacitances * czbd : zero bias drain junction capacitance * czbs : zero bias source junction capacitance * czbdsw:zero bias drain junction sidewall capacitance * czbssw:zero bias source junction sidewall capacitance */ czbd = model->B2unitAreaJctCap * DrainArea; czbs = model->B2unitAreaJctCap * SourceArea; czbdsw= model->B2unitLengthSidewallJctCap * DrainPerimeter; czbssw= model->B2unitLengthSidewallJctCap * SourcePerimeter; PhiB = model->B2bulkJctPotential; PhiBSW = model->B2sidewallJctPotential; MJ = model->B2bulkJctBotGradingCoeff; MJSW = model->B2bulkJctSideGradingCoeff; /* Source Bulk Junction */ if( vbs < 0 ) { arg = 1 - vbs / PhiB; argsw = 1 - vbs / PhiBSW; sarg = exp(-MJ*log(arg)); sargsw = exp(-MJSW*log(argsw)); *(ckt->CKTstate0 + here->B2qbs) = PhiB * czbs * (1-arg*sarg)/(1-MJ) + PhiBSW * czbssw * (1-argsw*sargsw)/(1-MJSW); capbs = czbs * sarg + czbssw * sargsw ; } else { *(ckt->CKTstate0+here->B2qbs) = vbs*(czbs+czbssw)+ vbs*vbs*(czbs*MJ*0.5/PhiB + czbssw * MJSW * 0.5/PhiBSW); capbs = czbs + czbssw + vbs *(czbs*MJ/PhiB+ czbssw * MJSW / PhiBSW ); } /* Drain Bulk Junction */ if( vbd < 0 ) { arg = 1 - vbd / PhiB; argsw = 1 - vbd / PhiBSW; sarg = exp(-MJ*log(arg)); sargsw = exp(-MJSW*log(argsw)); *(ckt->CKTstate0 + here->B2qbd) = PhiB * czbd * (1-arg*sarg)/(1-MJ) + PhiBSW * czbdsw * (1-argsw*sargsw)/(1-MJSW); capbd = czbd * sarg + czbdsw * sargsw ; } else { *(ckt->CKTstate0+here->B2qbd) = vbd*(czbd+czbdsw)+ vbd*vbd*(czbd*MJ*0.5/PhiB + czbdsw * MJSW * 0.5/PhiBSW); capbd = czbd + czbdsw + vbd *(czbd*MJ/PhiB+ czbdsw * MJSW / PhiBSW ); } } /* * check convergence */ if ( (here->B2off == 0) || (!(ckt->CKTmode & MODEINITFIX)) ){ if (Check == 1) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; } } *(ckt->CKTstate0 + here->B2vbs) = vbs; *(ckt->CKTstate0 + here->B2vbd) = vbd; *(ckt->CKTstate0 + here->B2vgs) = vgs; *(ckt->CKTstate0 + here->B2vds) = vds; *(ckt->CKTstate0 + here->B2cd) = cd; *(ckt->CKTstate0 + here->B2cbs) = cbs; *(ckt->CKTstate0 + here->B2cbd) = cbd; *(ckt->CKTstate0 + here->B2gm) = gm; *(ckt->CKTstate0 + here->B2gds) = gds; *(ckt->CKTstate0 + here->B2gmbs) = gmbs; *(ckt->CKTstate0 + here->B2gbd) = gbd; *(ckt->CKTstate0 + here->B2gbs) = gbs; *(ckt->CKTstate0 + here->B2cggb) = cggb; *(ckt->CKTstate0 + here->B2cgdb) = cgdb; *(ckt->CKTstate0 + here->B2cgsb) = cgsb; *(ckt->CKTstate0 + here->B2cbgb) = cbgb; *(ckt->CKTstate0 + here->B2cbdb) = cbdb; *(ckt->CKTstate0 + here->B2cbsb) = cbsb; *(ckt->CKTstate0 + here->B2cdgb) = cdgb; *(ckt->CKTstate0 + here->B2cddb) = cddb; *(ckt->CKTstate0 + here->B2cdsb) = cdsb; *(ckt->CKTstate0 + here->B2capbs) = capbs; *(ckt->CKTstate0 + here->B2capbd) = capbd; /* bulk and channel charge plus overlaps */ if((!(ckt->CKTmode & (MODETRAN | MODEAC))) && ((!(ckt->CKTmode & MODETRANOP)) || (!(ckt->CKTmode & MODEUIC))) && (!(ckt->CKTmode & MODEINITSMSIG))) goto line850; #ifndef NOBYPASS line755: #endif if( here->B2mode > 0 ) { args[0] = GateDrainOverlapCap; args[1] = GateSourceOverlapCap; args[2] = GateBulkOverlapCap; args[3] = capbd; args[4] = capbs; args[5] = cggb; args[6] = cgdb; args[7] = cgsb; B2mosCap(ckt,vgd,vgs,vgb, args, /* GateDrainOverlapCap, GateSourceOverlapCap,GateBulkOverlapCap, capbd,capbs,cggb,cgdb,cgsb, */ cbgb,cbdb,cbsb,cdgb,cddb,cdsb ,&gcggb,&gcgdb,&gcgsb,&gcbgb,&gcbdb,&gcbsb,&gcdgb ,&gcddb,&gcdsb,&gcsgb,&gcsdb,&gcssb,&qgate,&qbulk ,&qdrn,&qsrc); } else { args[0] = GateSourceOverlapCap; args[1] = GateDrainOverlapCap; args[2] = GateBulkOverlapCap; args[3] = capbs; args[4] = capbd; args[5] = cggb; args[6] = cgsb; args[7] = cgdb; B2mosCap(ckt,vgs,vgd,vgb,args, /* GateSourceOverlapCap, GateDrainOverlapCap,GateBulkOverlapCap, capbs,capbd,cggb,cgsb,cgdb, */ cbgb,cbsb,cbdb,csgb,cssb,csdb ,&gcggb,&gcgsb,&gcgdb,&gcbgb,&gcbsb,&gcbdb,&gcsgb ,&gcssb,&gcsdb,&gcdgb,&gcdsb,&gcddb,&qgate,&qbulk ,&qsrc,&qdrn); } if(ByPass) goto line860; *(ckt->CKTstate0 + here->B2qg) = qgate; *(ckt->CKTstate0 + here->B2qd) = qdrn - *(ckt->CKTstate0 + here->B2qbd); *(ckt->CKTstate0 + here->B2qb) = qbulk + *(ckt->CKTstate0 + here->B2qbd) + *(ckt->CKTstate0 + here->B2qbs); /* store small signal parameters */ if((!(ckt->CKTmode & (MODEAC | MODETRAN))) && (ckt->CKTmode & MODETRANOP ) && (ckt->CKTmode & MODEUIC )) goto line850; if(ckt->CKTmode & MODEINITSMSIG ) { *(ckt->CKTstate0+here->B2cggb) = cggb; *(ckt->CKTstate0+here->B2cgdb) = cgdb; *(ckt->CKTstate0+here->B2cgsb) = cgsb; *(ckt->CKTstate0+here->B2cbgb) = cbgb; *(ckt->CKTstate0+here->B2cbdb) = cbdb; *(ckt->CKTstate0+here->B2cbsb) = cbsb; *(ckt->CKTstate0+here->B2cdgb) = cdgb; *(ckt->CKTstate0+here->B2cddb) = cddb; *(ckt->CKTstate0+here->B2cdsb) = cdsb; *(ckt->CKTstate0+here->B2capbd) = capbd; *(ckt->CKTstate0+here->B2capbs) = capbs; goto line1000; } if(ckt->CKTmode & MODEINITTRAN ) { *(ckt->CKTstate1+here->B2qb) = *(ckt->CKTstate0+here->B2qb) ; *(ckt->CKTstate1+here->B2qg) = *(ckt->CKTstate0+here->B2qg) ; *(ckt->CKTstate1+here->B2qd) = *(ckt->CKTstate0+here->B2qd) ; } error = NIintegrate(ckt,&geq,&ceq,0.0,here->B2qb); if(error) return(error); error = NIintegrate(ckt,&geq,&ceq,0.0,here->B2qg); if(error) return(error); error = NIintegrate(ckt,&geq,&ceq,0.0,here->B2qd); if(error) return(error); goto line860; line850: /* initialize to zero charge conductance and current */ ceqqg = ceqqb = ceqqd = 0.0; gcdgb = gcddb = gcdsb = 0.0; gcsgb = gcsdb = gcssb = 0.0; gcggb = gcgdb = gcgsb = 0.0; gcbgb = gcbdb = gcbsb = 0.0; goto line900; line860: /* evaluate equivalent charge current */ cqgate = *(ckt->CKTstate0 + here->B2iqg); cqbulk = *(ckt->CKTstate0 + here->B2iqb); cqdrn = *(ckt->CKTstate0 + here->B2iqd); ceqqg = cqgate - gcggb * vgb + gcgdb * vbd + gcgsb * vbs; ceqqb = cqbulk - gcbgb * vgb + gcbdb * vbd + gcbsb * vbs; ceqqd = cqdrn - gcdgb * vgb + gcddb * vbd + gcdsb * vbs; if(ckt->CKTmode & MODEINITTRAN ) { *(ckt->CKTstate1 + here->B2iqb) = *(ckt->CKTstate0 + here->B2iqb); *(ckt->CKTstate1 + here->B2iqg) = *(ckt->CKTstate0 + here->B2iqg); *(ckt->CKTstate1 + here->B2iqd) = *(ckt->CKTstate0 + here->B2iqd); } /* * load current vector */ line900: m = here->B2m; ceqbs = model->B2type * (cbs-(gbs-ckt->CKTgmin)*vbs); ceqbd = model->B2type * (cbd-(gbd-ckt->CKTgmin)*vbd); ceqqg = model->B2type * ceqqg; ceqqb = model->B2type * ceqqb; ceqqd = model->B2type * ceqqd; if (here->B2mode >= 0) { xnrm=1; xrev=0; cdreq=model->B2type*(cdrain-gds*vds-gm*vgs-gmbs*vbs); } else { xnrm=0; xrev=1; cdreq = -(model->B2type)*(cdrain+gds*vds-gm*vgd-gmbs*vbd); } *(ckt->CKTrhs + here->B2gNode) -= m * (ceqqg); *(ckt->CKTrhs + here->B2bNode) -= m * (ceqbs+ceqbd+ceqqb); *(ckt->CKTrhs + here->B2dNodePrime) += m * (ceqbd-cdreq-ceqqd); *(ckt->CKTrhs + here->B2sNodePrime) += m * (cdreq+ceqbs+ceqqg+ceqqb+ceqqd); /* * load y matrix */ *(here->B2DdPtr) += m * (here->B2drainConductance); *(here->B2GgPtr) += m * (gcggb); *(here->B2SsPtr) += m * (here->B2sourceConductance); *(here->B2BbPtr) += m * (gbd+gbs-gcbgb-gcbdb-gcbsb); *(here->B2DPdpPtr) += m * (here->B2drainConductance+gds+gbd+xrev*(gm+gmbs)+gcddb); *(here->B2SPspPtr) += m * (here->B2sourceConductance+gds+gbs+xnrm*(gm+gmbs)+gcssb); *(here->B2DdpPtr) += m * (-here->B2drainConductance); *(here->B2GbPtr) += m * (-gcggb-gcgdb-gcgsb); *(here->B2GdpPtr) += m * (gcgdb); *(here->B2GspPtr) += m * (gcgsb); *(here->B2SspPtr) += m * (-here->B2sourceConductance); *(here->B2BgPtr) += m * (gcbgb); *(here->B2BdpPtr) += m * (-gbd+gcbdb); *(here->B2BspPtr) += m * (-gbs+gcbsb); *(here->B2DPdPtr) += m * (-here->B2drainConductance); *(here->B2DPgPtr) += m * ((xnrm-xrev)*gm+gcdgb); *(here->B2DPbPtr) += m * (-gbd+(xnrm-xrev)*gmbs-gcdgb-gcddb-gcdsb); *(here->B2DPspPtr) += m * (-gds-xnrm*(gm+gmbs)+gcdsb); *(here->B2SPgPtr) += m * (-(xnrm-xrev)*gm+gcsgb); *(here->B2SPsPtr) += m * (-here->B2sourceConductance); *(here->B2SPbPtr) += m * (-gbs-(xnrm-xrev)*gmbs-gcsgb-gcsdb-gcssb); *(here->B2SPdpPtr) += m * (-gds-xrev*(gm+gmbs)+gcsdb); line1000: ; } /* End of Mosfet Instance */ } /* End of Model Instance */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim2/b2mask.c0000644000175000017500000003322013546075722021522 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Hong J. Park **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "bsim2def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int B2mAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { B2model *model = (B2model *)inst; NG_IGNORE(ckt); switch(which) { case BSIM2_MOD_VFB0: value->rValue = model->B2vfb0; return(OK); case BSIM2_MOD_VFBL : value->rValue = model->B2vfbL; return(OK); case BSIM2_MOD_VFBW : value->rValue = model->B2vfbW; return(OK); case BSIM2_MOD_PHI0 : value->rValue = model->B2phi0; return(OK); case BSIM2_MOD_PHIL : value->rValue = model->B2phiL; return(OK); case BSIM2_MOD_PHIW : value->rValue = model->B2phiW; return(OK); case BSIM2_MOD_K10 : value->rValue = model->B2k10; return(OK); case BSIM2_MOD_K1L : value->rValue = model->B2k1L; return(OK); case BSIM2_MOD_K1W : value->rValue = model->B2k1W; return(OK); case BSIM2_MOD_K20 : value->rValue = model->B2k20; return(OK); case BSIM2_MOD_K2L : value->rValue = model->B2k2L; return(OK); case BSIM2_MOD_K2W : value->rValue = model->B2k2W; return(OK); case BSIM2_MOD_ETA00 : value->rValue = model->B2eta00; return(OK); case BSIM2_MOD_ETA0L : value->rValue = model->B2eta0L; return(OK); case BSIM2_MOD_ETA0W : value->rValue = model->B2eta0W; return(OK); case BSIM2_MOD_ETAB0 : value->rValue = model->B2etaB0; return(OK); case BSIM2_MOD_ETABL : value->rValue = model->B2etaBL; return(OK); case BSIM2_MOD_ETABW : value->rValue = model->B2etaBW; return(OK); case BSIM2_MOD_DELTAL : value->rValue = model->B2deltaL = value->rValue; return(OK); case BSIM2_MOD_DELTAW : value->rValue = model->B2deltaW = value->rValue; return(OK); case BSIM2_MOD_MOB00 : value->rValue = model->B2mob00; return(OK); case BSIM2_MOD_MOB0B0 : value->rValue = model->B2mob0B0; return(OK); case BSIM2_MOD_MOB0BL : value->rValue = model->B2mob0BL; return(OK); case BSIM2_MOD_MOB0BW : value->rValue = model->B2mob0BW; return(OK); case BSIM2_MOD_MOBS00 : value->rValue = model->B2mobs00; return(OK); case BSIM2_MOD_MOBS0L : value->rValue = model->B2mobs0L; return(OK); case BSIM2_MOD_MOBS0W : value->rValue = model->B2mobs0W; return(OK); case BSIM2_MOD_MOBSB0 : value->rValue = model->B2mobsB0; return(OK); case BSIM2_MOD_MOBSBL : value->rValue = model->B2mobsBL; return(OK); case BSIM2_MOD_MOBSBW : value->rValue = model->B2mobsBW; return(OK); case BSIM2_MOD_MOB200 : value->rValue = model->B2mob200; return(OK); case BSIM2_MOD_MOB20L : value->rValue = model->B2mob20L; return(OK); case BSIM2_MOD_MOB20W : value->rValue = model->B2mob20W; return(OK); case BSIM2_MOD_MOB2B0 : value->rValue = model->B2mob2B0; return(OK); case BSIM2_MOD_MOB2BL : value->rValue = model->B2mob2BL; return(OK); case BSIM2_MOD_MOB2BW : value->rValue = model->B2mob2BW; return(OK); case BSIM2_MOD_MOB2G0 : value->rValue = model->B2mob2G0; return(OK); case BSIM2_MOD_MOB2GL : value->rValue = model->B2mob2GL; return(OK); case BSIM2_MOD_MOB2GW : value->rValue = model->B2mob2GW; return(OK); case BSIM2_MOD_MOB300 : value->rValue = model->B2mob300; return(OK); case BSIM2_MOD_MOB30L : value->rValue = model->B2mob30L; return(OK); case BSIM2_MOD_MOB30W : value->rValue = model->B2mob30W; return(OK); case BSIM2_MOD_MOB3B0 : value->rValue = model->B2mob3B0; return(OK); case BSIM2_MOD_MOB3BL : value->rValue = model->B2mob3BL; return(OK); case BSIM2_MOD_MOB3BW : value->rValue = model->B2mob3BW; return(OK); case BSIM2_MOD_MOB3G0 : value->rValue = model->B2mob3G0; return(OK); case BSIM2_MOD_MOB3GL : value->rValue = model->B2mob3GL; return(OK); case BSIM2_MOD_MOB3GW : value->rValue = model->B2mob3GW; return(OK); case BSIM2_MOD_MOB400 : value->rValue = model->B2mob400; return(OK); case BSIM2_MOD_MOB40L : value->rValue = model->B2mob40L; return(OK); case BSIM2_MOD_MOB40W : value->rValue = model->B2mob40W; return(OK); case BSIM2_MOD_MOB4B0 : value->rValue = model->B2mob4B0; return(OK); case BSIM2_MOD_MOB4BL : value->rValue = model->B2mob4BL; return(OK); case BSIM2_MOD_MOB4BW : value->rValue = model->B2mob4BW; return(OK); case BSIM2_MOD_MOB4G0 : value->rValue = model->B2mob4G0; return(OK); case BSIM2_MOD_MOB4GL : value->rValue = model->B2mob4GL; return(OK); case BSIM2_MOD_MOB4GW : value->rValue = model->B2mob4GW; return(OK); case BSIM2_MOD_UA00 : value->rValue = model->B2ua00; return(OK); case BSIM2_MOD_UA0L : value->rValue = model->B2ua0L; return(OK); case BSIM2_MOD_UA0W : value->rValue = model->B2ua0W; return(OK); case BSIM2_MOD_UAB0 : value->rValue = model->B2uaB0; return(OK); case BSIM2_MOD_UABL : value->rValue = model->B2uaBL; return(OK); case BSIM2_MOD_UABW : value->rValue = model->B2uaBW; return(OK); case BSIM2_MOD_UB00 : value->rValue = model->B2ub00; return(OK); case BSIM2_MOD_UB0L : value->rValue = model->B2ub0L; return(OK); case BSIM2_MOD_UB0W : value->rValue = model->B2ub0W; return(OK); case BSIM2_MOD_UBB0 : value->rValue = model->B2ubB0; return(OK); case BSIM2_MOD_UBBL : value->rValue = model->B2ubBL; return(OK); case BSIM2_MOD_UBBW : value->rValue = model->B2ubBW; return(OK); case BSIM2_MOD_U100 : value->rValue = model->B2u100; return(OK); case BSIM2_MOD_U10L : value->rValue = model->B2u10L; return(OK); case BSIM2_MOD_U10W : value->rValue = model->B2u10W; return(OK); case BSIM2_MOD_U1B0 : value->rValue = model->B2u1B0; return(OK); case BSIM2_MOD_U1BL : value->rValue = model->B2u1BL; return(OK); case BSIM2_MOD_U1BW : value->rValue = model->B2u1BW; return(OK); case BSIM2_MOD_U1D0 : value->rValue = model->B2u1D0; return(OK); case BSIM2_MOD_U1DL : value->rValue = model->B2u1DL; return(OK); case BSIM2_MOD_U1DW : value->rValue = model->B2u1DW; return(OK); case BSIM2_MOD_N00 : value->rValue = model->B2n00; return(OK); case BSIM2_MOD_N0L : value->rValue = model->B2n0L; return(OK); case BSIM2_MOD_N0W : value->rValue = model->B2n0W; return(OK); case BSIM2_MOD_NB0 : value->rValue = model->B2nB0; return(OK); case BSIM2_MOD_NBL : value->rValue = model->B2nBL; return(OK); case BSIM2_MOD_NBW : value->rValue = model->B2nBW; return(OK); case BSIM2_MOD_ND0 : value->rValue = model->B2nD0; return(OK); case BSIM2_MOD_NDL : value->rValue = model->B2nDL; return(OK); case BSIM2_MOD_NDW : value->rValue = model->B2nDW; return(OK); case BSIM2_MOD_VOF00 : value->rValue = model->B2vof00; return(OK); case BSIM2_MOD_VOF0L : value->rValue = model->B2vof0L; return(OK); case BSIM2_MOD_VOF0W : value->rValue = model->B2vof0W; return(OK); case BSIM2_MOD_VOFB0 : value->rValue = model->B2vofB0; return(OK); case BSIM2_MOD_VOFBL : value->rValue = model->B2vofBL; return(OK); case BSIM2_MOD_VOFBW : value->rValue = model->B2vofBW; return(OK); case BSIM2_MOD_VOFD0 : value->rValue = model->B2vofD0; return(OK); case BSIM2_MOD_VOFDL : value->rValue = model->B2vofDL; return(OK); case BSIM2_MOD_VOFDW : value->rValue = model->B2vofDW; return(OK); case BSIM2_MOD_AI00 : value->rValue = model->B2ai00; return(OK); case BSIM2_MOD_AI0L : value->rValue = model->B2ai0L; return(OK); case BSIM2_MOD_AI0W : value->rValue = model->B2ai0W; return(OK); case BSIM2_MOD_AIB0 : value->rValue = model->B2aiB0; return(OK); case BSIM2_MOD_AIBL : value->rValue = model->B2aiBL; return(OK); case BSIM2_MOD_AIBW : value->rValue = model->B2aiBW; return(OK); case BSIM2_MOD_BI00 : value->rValue = model->B2bi00; return(OK); case BSIM2_MOD_BI0L : value->rValue = model->B2bi0L; return(OK); case BSIM2_MOD_BI0W : value->rValue = model->B2bi0W; return(OK); case BSIM2_MOD_BIB0 : value->rValue = model->B2biB0; return(OK); case BSIM2_MOD_BIBL : value->rValue = model->B2biBL; return(OK); case BSIM2_MOD_BIBW : value->rValue = model->B2biBW; return(OK); case BSIM2_MOD_VGHIGH0 : value->rValue = model->B2vghigh0; return(OK); case BSIM2_MOD_VGHIGHL : value->rValue = model->B2vghighL; return(OK); case BSIM2_MOD_VGHIGHW : value->rValue = model->B2vghighW; return(OK); case BSIM2_MOD_VGLOW0 : value->rValue = model->B2vglow0; return(OK); case BSIM2_MOD_VGLOWL : value->rValue = model->B2vglowL; return(OK); case BSIM2_MOD_VGLOWW : value->rValue = model->B2vglowW; return(OK); case BSIM2_MOD_TOX : value->rValue = model->B2tox; return(OK); case BSIM2_MOD_TEMP : value->rValue = model->B2temp; return(OK); case BSIM2_MOD_VDD : value->rValue = model->B2vdd; return(OK); case BSIM2_MOD_VGG : value->rValue = model->B2vgg; return(OK); case BSIM2_MOD_VBB : value->rValue = model->B2vbb; return(OK); case BSIM2_MOD_CGSO: value->rValue = model->B2gateSourceOverlapCap; return(OK); case BSIM2_MOD_CGDO: value->rValue = model->B2gateDrainOverlapCap; return(OK); case BSIM2_MOD_CGBO: value->rValue = model->B2gateBulkOverlapCap; return(OK); case BSIM2_MOD_XPART: value->iValue = model->B2channelChargePartitionFlag; return(OK); case BSIM2_MOD_RSH: value->rValue = model->B2sheetResistance; return(OK); case BSIM2_MOD_JS: value->rValue = model->B2jctSatCurDensity; return(OK); case BSIM2_MOD_PB: value->rValue = model->B2bulkJctPotential; return(OK); case BSIM2_MOD_MJ: value->rValue = model->B2bulkJctBotGradingCoeff; return(OK); case BSIM2_MOD_PBSW: value->rValue = model->B2sidewallJctPotential; return(OK); case BSIM2_MOD_MJSW: value->rValue = model->B2bulkJctSideGradingCoeff; return(OK); case BSIM2_MOD_CJ: value->rValue = model->B2unitAreaJctCap; return(OK); case BSIM2_MOD_CJSW: value->rValue = model->B2unitLengthSidewallJctCap; return(OK); case BSIM2_MOD_DEFWIDTH: value->rValue = model->B2defaultWidth; return(OK); case BSIM2_MOD_DELLENGTH: value->rValue = model->B2deltaLength; return(OK); case BSIM2_MOD_AF: value->rValue = model->B2fNexp; return(OK); case BSIM2_MOD_KF: value->rValue = model->B2fNcoef; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim2/b2cvtest.c0000644000175000017500000000743313546075722022106 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Hong J. Park, Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim2def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B2convTest(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current value into the * sparse matrix previously provided */ { B2model *model = (B2model*)inModel; B2instance *here; double cbd; double cbhat; double cbs; double cd; double cdhat; double delvbd; double delvbs; double delvds; double delvgd; double delvgs; double tol; double vbd; double vbs; double vds; double vgd; double vgdo; double vgs; /* loop through all the B2 device models */ for( ; model != NULL; model = B2nextModel(model)) { /* loop through all the instances of the model */ for (here = B2instances(model); here != NULL ; here=B2nextInstance(here)) { vbs = model->B2type * ( *(ckt->CKTrhsOld+here->B2bNode) - *(ckt->CKTrhsOld+here->B2sNodePrime)); vgs = model->B2type * ( *(ckt->CKTrhsOld+here->B2gNode) - *(ckt->CKTrhsOld+here->B2sNodePrime)); vds = model->B2type * ( *(ckt->CKTrhsOld+here->B2dNodePrime) - *(ckt->CKTrhsOld+here->B2sNodePrime)); vbd=vbs-vds; vgd=vgs-vds; vgdo = *(ckt->CKTstate0 + here->B2vgs) - *(ckt->CKTstate0 + here->B2vds); delvbs = vbs - *(ckt->CKTstate0 + here->B2vbs); delvbd = vbd - *(ckt->CKTstate0 + here->B2vbd); delvgs = vgs - *(ckt->CKTstate0 + here->B2vgs); delvds = vds - *(ckt->CKTstate0 + here->B2vds); delvgd = vgd-vgdo; if (here->B2mode >= 0) { cdhat= *(ckt->CKTstate0 + here->B2cd) - *(ckt->CKTstate0 + here->B2gbd) * delvbd + *(ckt->CKTstate0 + here->B2gmbs) * delvbs + *(ckt->CKTstate0 + here->B2gm) * delvgs + *(ckt->CKTstate0 + here->B2gds) * delvds ; } else { cdhat= *(ckt->CKTstate0 + here->B2cd) - ( *(ckt->CKTstate0 + here->B2gbd) - *(ckt->CKTstate0 + here->B2gmbs)) * delvbd - *(ckt->CKTstate0 + here->B2gm) * delvgd + *(ckt->CKTstate0 + here->B2gds) * delvds; } cbhat= *(ckt->CKTstate0 + here->B2cbs) + *(ckt->CKTstate0 + here->B2cbd) + *(ckt->CKTstate0 + here->B2gbd) * delvbd + *(ckt->CKTstate0 + here->B2gbs) * delvbs ; cd = *(ckt->CKTstate0 + here->B2cd); cbs = *(ckt->CKTstate0 + here->B2cbs); cbd = *(ckt->CKTstate0 + here->B2cbd); /* * check convergence */ if ( (here->B2off == 0) || (!(ckt->CKTmode & MODEINITFIX)) ){ tol=ckt->CKTreltol*MAX(fabs(cdhat),fabs(cd))+ckt->CKTabstol; if (fabs(cdhat-cd) >= tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); } tol=ckt->CKTreltol*MAX(fabs(cbhat),fabs(cbs+cbd))+ ckt->CKTabstol; if (fabs(cbhat-(cbs+cbd)) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim2/b2set.c0000644000175000017500000004171013546075722021365 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Min-Chie Jeng, Hong J. Park, Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "bsim2def.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B2setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* load the B2 device structure with those pointers needed later * for fast matrix loading */ { B2model *model = (B2model*)inModel; B2instance *here; int error; CKTnode *tmp; /* loop through all the B2 device models */ for( ; model != NULL; model = B2nextModel(model)) { /* Default value Processing for B2 MOSFET Models */ if( ! model->B2typeGiven) { model->B2type = NMOS; /* NMOS */ } if( ! model->B2vfb0Given) { model->B2vfb0 = -1.0; } if( ! model->B2vfbLGiven) { model->B2vfbL = 0.0; } if( ! model->B2vfbWGiven) { model->B2vfbW = 0.0; } if( ! model->B2phi0Given) { model->B2phi0 = 0.75; } if( ! model->B2phiLGiven) { model->B2phiL = 0.0; } if( ! model->B2phiWGiven) { model->B2phiW = 0.0; } if( ! model->B2k10Given) { model->B2k10 = 0.8; } if( ! model->B2k1LGiven) { model->B2k1L = 0.0; } if( ! model->B2k1WGiven) { model->B2k1W = 0.0; } if( ! model->B2k20Given) { model->B2k20 = 0.0; } if( ! model->B2k2LGiven) { model->B2k2L = 0.0; } if( ! model->B2k2WGiven) { model->B2k2W = 0.0; } if( ! model->B2eta00Given) { model->B2eta00 = 0.0; } if( ! model->B2eta0LGiven) { model->B2eta0L = 0.0; } if( ! model->B2eta0WGiven) { model->B2eta0W = 0.0; } if( ! model->B2etaB0Given) { model->B2etaB0 = 0.0; } if( ! model->B2etaBLGiven) { model->B2etaBL = 0.0; } if( ! model->B2etaBWGiven) { model->B2etaBW = 0.0; } if( ! model->B2deltaLGiven) { model->B2deltaL = 0.0; } if( ! model->B2deltaWGiven) { model->B2deltaW = 0.0; } if( ! model->B2ua00Given) { model->B2ua00 = 0.2; } if( ! model->B2ua0LGiven) { model->B2ua0L = 0.0; } if( ! model->B2ua0WGiven) { model->B2ua0W = 0.0; } if( ! model->B2uaB0Given) { model->B2uaB0 = 0.0; } if( ! model->B2uaBLGiven) { model->B2uaBL = 0.0; } if( ! model->B2uaBWGiven) { model->B2uaBW = 0.0; } if( ! model->B2ub00Given) { model->B2ub00 = 0.0; } if( ! model->B2ub0LGiven) { model->B2ub0L = 0.0; } if( ! model->B2ub0WGiven) { model->B2ub0W = 0.0; } if( ! model->B2ubB0Given) { model->B2ubB0 = 0.0; } if( ! model->B2ubBLGiven) { model->B2ubBL = 0.0; } if( ! model->B2ubBWGiven) { model->B2ubBW = 0.0; } if( ! model->B2u100Given) { model->B2u100 = 0.1; } if( ! model->B2u10LGiven) { model->B2u10L = 0.0; } if( ! model->B2u10WGiven) { model->B2u10W = 0.0; } if( ! model->B2u1B0Given) { model->B2u1B0 = 0.0; } if( ! model->B2u1BLGiven) { model->B2u1BL = 0.0; } if( ! model->B2u1BWGiven) { model->B2u1BW = 0.0; } if( ! model->B2u1D0Given) { model->B2u1D0 = 0.0; } if( ! model->B2u1DLGiven) { model->B2u1DL = 0.0; } if( ! model->B2u1DWGiven) { model->B2u1DW = 0.0; } if( ! model->B2mob00Given) { model->B2mob00 = 400.0; } if( ! model->B2mob0B0Given) { model->B2mob0B0 = 0.0; } if( ! model->B2mob0BLGiven) { model->B2mob0BL = 0.0; } if( ! model->B2mob0BWGiven) { model->B2mob0BW = 0.0; } if( ! model->B2mobs00Given) { model->B2mobs00 = 500.0; } if( ! model->B2mobs0LGiven) { model->B2mobs0L = 0.0; } if( ! model->B2mobs0WGiven) { model->B2mobs0W = 0.0; } if( ! model->B2mobsB0Given) { model->B2mobsB0 = 0.0; } if( ! model->B2mobsBLGiven) { model->B2mobsBL = 0.0; } if( ! model->B2mobsBWGiven) { model->B2mobsBW = 0.0; } if( ! model->B2mob200Given) { model->B2mob200 = 1.5; } if( ! model->B2mob20LGiven) { model->B2mob20L = 0.0; } if( ! model->B2mob20WGiven) { model->B2mob20W = 0.0; } if( ! model->B2mob2B0Given) { model->B2mob2B0 = 0.0; } if( ! model->B2mob2BLGiven) { model->B2mob2BL = 0.0; } if( ! model->B2mob2BWGiven) { model->B2mob2BW = 0.0; } if( ! model->B2mob2G0Given) { model->B2mob2G0 = 0.0; } if( ! model->B2mob2GLGiven) { model->B2mob2GL = 0.0; } if( ! model->B2mob2GWGiven) { model->B2mob2GW = 0.0; } if( ! model->B2mob300Given) { model->B2mob300 = 10; } if( ! model->B2mob30LGiven) { model->B2mob30L = 0.0; } if( ! model->B2mob30WGiven) { model->B2mob30W = 0.0; } if( ! model->B2mob3B0Given) { model->B2mob3B0 = 0.0; } if( ! model->B2mob3BLGiven) { model->B2mob3BL = 0.0; } if( ! model->B2mob3BWGiven) { model->B2mob3BW = 0.0; } if( ! model->B2mob3G0Given) { model->B2mob3G0 = 0.0; } if( ! model->B2mob3GLGiven) { model->B2mob3GL = 0.0; } if( ! model->B2mob3GWGiven) { model->B2mob3GW = 0.0; } if( ! model->B2mob400Given) { model->B2mob400 = 0.0; } if( ! model->B2mob40LGiven) { model->B2mob40L = 0.0; } if( ! model->B2mob40WGiven) { model->B2mob40W = 0.0; } if( ! model->B2mob4B0Given) { model->B2mob4B0 = 0.0; } if( ! model->B2mob4BLGiven) { model->B2mob4BL = 0.0; } if( ! model->B2mob4BWGiven) { model->B2mob4BW = 0.0; } if( ! model->B2mob4G0Given) { model->B2mob4G0 = 0.0; } if( ! model->B2mob4GLGiven) { model->B2mob4GL = 0.0; } if( ! model->B2mob4GWGiven) { model->B2mob4GW = 0.0; } if( ! model->B2n00Given) { model->B2n00 = 1.4; } if( ! model->B2n0LGiven) { model->B2n0L = 0.0; } if( ! model->B2n0WGiven) { model->B2n0W = 0.0; } if( ! model->B2nB0Given) { model->B2nB0 = 0.5; } if( ! model->B2nBLGiven) { model->B2nBL = 0.0; } if( ! model->B2nBWGiven) { model->B2nBW = 0.0; } if( ! model->B2nD0Given) { model->B2nD0 = 0.0; } if( ! model->B2nDLGiven) { model->B2nDL = 0.0; } if( ! model->B2nDWGiven) { model->B2nDW = 0.0; } if( ! model->B2vof00Given) { model->B2vof00 = 1.8; } if( ! model->B2vof0LGiven) { model->B2vof0L = 0.0; } if( ! model->B2vof0WGiven) { model->B2vof0W = 0.0; } if( ! model->B2vofB0Given) { model->B2vofB0 = 0.0; } if( ! model->B2vofBLGiven) { model->B2vofBL = 0.0; } if( ! model->B2vofBWGiven) { model->B2vofBW = 0.0; } if( ! model->B2vofD0Given) { model->B2vofD0 = 0.0; } if( ! model->B2vofDLGiven) { model->B2vofDL = 0.0; } if( ! model->B2vofDWGiven) { model->B2vofDW = 0.0; } if( ! model->B2ai00Given) { model->B2ai00 = 0.0; } if( ! model->B2ai0LGiven) { model->B2ai0L = 0.0; } if( ! model->B2ai0WGiven) { model->B2ai0W = 0.0; } if( ! model->B2aiB0Given) { model->B2aiB0 = 0.0; } if( ! model->B2aiBLGiven) { model->B2aiBL = 0.0; } if( ! model->B2aiBWGiven) { model->B2aiBW = 0.0; } if( ! model->B2bi00Given) { model->B2bi00 = 0.0; } if( ! model->B2bi0LGiven) { model->B2bi0L = 0.0; } if( ! model->B2bi0WGiven) { model->B2bi0W = 0.0; } if( ! model->B2biB0Given) { model->B2biB0 = 0.0; } if( ! model->B2biBLGiven) { model->B2biBL = 0.0; } if( ! model->B2biBWGiven) { model->B2biBW = 0.0; } if( ! model->B2vghigh0Given) { model->B2vghigh0 = 0.2; } if( ! model->B2vghighLGiven) { model->B2vghighL = 0.0; } if( ! model->B2vghighWGiven) { model->B2vghighW = 0.0; } if( ! model->B2vglow0Given) { model->B2vglow0 = -0.15; } if( ! model->B2vglowLGiven) { model->B2vglowL = 0.0; } if( ! model->B2vglowWGiven) { model->B2vglowW = 0.0; } if( ! model->B2toxGiven) { model->B2tox = 0.03; /* um */ } if( ! model->B2tempGiven) { model->B2temp = 27.0; } if( ! model->B2vddGiven) { model->B2vdd = 5.0; } if( ! model->B2vggGiven) { model->B2vgg = 5.0; } if( ! model->B2vbbGiven) { model->B2vbb = 5.0; } if( ! model->B2gateDrainOverlapCapGiven) { model->B2gateDrainOverlapCap = 0.0; } if( ! model->B2gateSourceOverlapCapGiven) { model->B2gateSourceOverlapCap = 0.0; } if( ! model->B2gateBulkOverlapCapGiven) { model->B2gateBulkOverlapCap = 0.0; } if( ! model->B2channelChargePartitionFlagGiven) { model->B2channelChargePartitionFlag = 0; } if( ! model->B2sheetResistanceGiven) { model->B2sheetResistance = 0.0; } if( ! model->B2unitAreaJctCapGiven) { model->B2unitAreaJctCap = 0.0; } if( ! model->B2unitLengthSidewallJctCapGiven) { model->B2unitLengthSidewallJctCap = 0.0; } if( ! model->B2jctSatCurDensityGiven) { model->B2jctSatCurDensity = 0.0; } if( ! model->B2bulkJctPotentialGiven) { model->B2bulkJctPotential = 0.0; } if( ! model->B2sidewallJctPotentialGiven) { model->B2sidewallJctPotential = 0.0; } if( ! model->B2bulkJctBotGradingCoeffGiven) { model->B2bulkJctBotGradingCoeff = 0.0; } if( ! model->B2bulkJctSideGradingCoeffGiven) { model->B2bulkJctSideGradingCoeff = 0.0; } if( ! model->B2defaultWidthGiven) { model->B2defaultWidth = 10.0; } if( ! model->B2deltaLengthGiven) { model->B2deltaLength = 0.0; } /* loop through all the instances of the model */ for (here = B2instances(model); here != NULL ; here=B2nextInstance(here)) { /* allocate a chunk of the state vector */ here->B2states = *states; *states += B2numStates; /* perform the parameter defaulting */ if(!here->B2drainAreaGiven) { here->B2drainArea = 0; } if(!here->B2drainPerimeterGiven) { here->B2drainPerimeter = 0; } if(!here->B2drainSquaresGiven) { here->B2drainSquares = 1; } if(!here->B2icVBSGiven) { here->B2icVBS = 0; } if(!here->B2icVDSGiven) { here->B2icVDS = 0; } if(!here->B2icVGSGiven) { here->B2icVGS = 0; } if(!here->B2lGiven) { here->B2l = 5e-6; } if(!here->B2sourceAreaGiven) { here->B2sourceArea = 0; } if(!here->B2sourcePerimeterGiven) { here->B2sourcePerimeter = 0; } if(!here->B2sourceSquaresGiven) { here->B2sourceSquares = 1; } if(!here->B2vdsatGiven) { here->B2vdsat = 0; } if(!here->B2vonGiven) { here->B2von = 0; } if(!here->B2wGiven) { here->B2w = 5e-6; } if(!here->B2mGiven) { here->B2m = 1.0; } /* process drain series resistance */ if( (model->B2sheetResistance != 0) && (here->B2drainSquares != 0.0 ) ) { if (here->B2dNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->B2name,"drain"); if(error) return(error); here->B2dNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->B2dNodePrime = here->B2dNode; } /* process source series resistance */ if( (model->B2sheetResistance != 0) && (here->B2sourceSquares != 0.0 ) ) { if(here->B2sNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->B2name,"source"); if(error) return(error); here->B2sNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->B2sNodePrime = here->B2sNode; } /* set Sparse Matrix Pointers */ /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(B2DdPtr, B2dNode, B2dNode); TSTALLOC(B2GgPtr, B2gNode, B2gNode); TSTALLOC(B2SsPtr, B2sNode, B2sNode); TSTALLOC(B2BbPtr, B2bNode, B2bNode); TSTALLOC(B2DPdpPtr, B2dNodePrime, B2dNodePrime); TSTALLOC(B2SPspPtr, B2sNodePrime, B2sNodePrime); TSTALLOC(B2DdpPtr, B2dNode, B2dNodePrime); TSTALLOC(B2GbPtr, B2gNode, B2bNode); TSTALLOC(B2GdpPtr, B2gNode, B2dNodePrime); TSTALLOC(B2GspPtr, B2gNode, B2sNodePrime); TSTALLOC(B2SspPtr, B2sNode, B2sNodePrime); TSTALLOC(B2BdpPtr, B2bNode, B2dNodePrime); TSTALLOC(B2BspPtr, B2bNode, B2sNodePrime); TSTALLOC(B2DPspPtr, B2dNodePrime, B2sNodePrime); TSTALLOC(B2DPdPtr, B2dNodePrime, B2dNode); TSTALLOC(B2BgPtr, B2bNode, B2gNode); TSTALLOC(B2DPgPtr, B2dNodePrime, B2gNode); TSTALLOC(B2SPgPtr, B2sNodePrime, B2gNode); TSTALLOC(B2SPsPtr, B2sNodePrime, B2sNode); TSTALLOC(B2DPbPtr, B2dNodePrime, B2bNode); TSTALLOC(B2SPbPtr, B2sNodePrime, B2bNode); TSTALLOC(B2SPdpPtr, B2sNodePrime, B2dNodePrime); } } return(OK); } int B2unsetup( GENmodel *inModel, CKTcircuit *ckt) { B2model *model; B2instance *here; for (model = (B2model *)inModel; model != NULL; model = B2nextModel(model)) { for (here = B2instances(model); here != NULL; here=B2nextInstance(here)) { if (here->B2sNodePrime > 0 && here->B2sNodePrime != here->B2sNode) CKTdltNNum(ckt, here->B2sNodePrime); here->B2sNodePrime = 0; if (here->B2dNodePrime > 0 && here->B2dNodePrime != here->B2dNode) CKTdltNNum(ckt, here->B2dNodePrime); here->B2dNodePrime = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim2/bsim2itf.h0000644000175000017500000000026313546075722022070 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_BSIM2 #define DEV_BSIM2 SPICEdev *get_bsim2_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/bsim2/b2acld.c0000644000175000017500000001202013546075722021465 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Hong J. Park, Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim2def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B2acLoad(GENmodel *inModel, CKTcircuit *ckt) { B2model *model = (B2model*)inModel; B2instance *here; int xnrm; int xrev; double gdpr; double gspr; double gm; double gds; double gmbs; double gbd; double gbs; double capbd; double capbs; double xcggb; double xcgdb; double xcgsb; double xcbgb; double xcbdb; double xcbsb; double xcddb; double xcssb; double xcdgb; double xcsgb; double xcdsb; double xcsdb; double cggb; double cgdb; double cgsb; double cbgb; double cbdb; double cbsb; double cddb; double cdgb; double cdsb; double omega; /* angular fequency of the signal */ double m; /* parallel multiplier */ omega = ckt->CKTomega; for( ; model != NULL; model = B2nextModel(model)) { for(here = B2instances(model); here!= NULL; here = B2nextInstance(here)) { if (here->B2mode >= 0) { xnrm=1; xrev=0; } else { xnrm=0; xrev=1; } gdpr=here->B2drainConductance; gspr=here->B2sourceConductance; gm= *(ckt->CKTstate0 + here->B2gm); gds= *(ckt->CKTstate0 + here->B2gds); gmbs= *(ckt->CKTstate0 + here->B2gmbs); gbd= *(ckt->CKTstate0 + here->B2gbd); gbs= *(ckt->CKTstate0 + here->B2gbs); capbd= *(ckt->CKTstate0 + here->B2capbd); capbs= *(ckt->CKTstate0 + here->B2capbs); /* * charge oriented model parameters */ cggb = *(ckt->CKTstate0 + here->B2cggb); cgsb = *(ckt->CKTstate0 + here->B2cgsb); cgdb = *(ckt->CKTstate0 + here->B2cgdb); cbgb = *(ckt->CKTstate0 + here->B2cbgb); cbsb = *(ckt->CKTstate0 + here->B2cbsb); cbdb = *(ckt->CKTstate0 + here->B2cbdb); cdgb = *(ckt->CKTstate0 + here->B2cdgb); cdsb = *(ckt->CKTstate0 + here->B2cdsb); cddb = *(ckt->CKTstate0 + here->B2cddb); xcdgb = (cdgb - here->pParam->B2GDoverlapCap) * omega; xcddb = (cddb + capbd + here->pParam->B2GDoverlapCap) * omega; xcdsb = cdsb * omega; xcsgb = -(cggb + cbgb + cdgb + here->pParam->B2GSoverlapCap) * omega; xcsdb = -(cgdb + cbdb + cddb) * omega; xcssb = (capbs + here->pParam->B2GSoverlapCap - (cgsb+cbsb+cdsb)) * omega; xcggb = (cggb + here->pParam->B2GDoverlapCap + here->pParam->B2GSoverlapCap + here->pParam->B2GBoverlapCap) * omega; xcgdb = (cgdb - here->pParam->B2GDoverlapCap ) * omega; xcgsb = (cgsb - here->pParam->B2GSoverlapCap) * omega; xcbgb = (cbgb - here->pParam->B2GBoverlapCap) * omega; xcbdb = (cbdb - capbd ) * omega; xcbsb = (cbsb - capbs ) * omega; m = here->B2m; *(here->B2GgPtr +1) += m * (xcggb); *(here->B2BbPtr +1) += m * (-xcbgb-xcbdb-xcbsb); *(here->B2DPdpPtr +1) += m * (xcddb); *(here->B2SPspPtr +1) += m * (xcssb); *(here->B2GbPtr +1) += m * (-xcggb-xcgdb-xcgsb); *(here->B2GdpPtr +1) += m * (xcgdb); *(here->B2GspPtr +1) += m * (xcgsb); *(here->B2BgPtr +1) += m * (xcbgb); *(here->B2BdpPtr +1) += m * (xcbdb); *(here->B2BspPtr +1) += m * (xcbsb); *(here->B2DPgPtr +1) += m * (xcdgb); *(here->B2DPbPtr +1) += m * (-xcdgb-xcddb-xcdsb); *(here->B2DPspPtr +1) += m * (xcdsb); *(here->B2SPgPtr +1) += m * (xcsgb); *(here->B2SPbPtr +1) += m * (-xcsgb-xcsdb-xcssb); *(here->B2SPdpPtr +1) += m * (xcsdb); *(here->B2DdPtr) += m * (gdpr); *(here->B2SsPtr) += m * (gspr); *(here->B2BbPtr) += m * (gbd+gbs); *(here->B2DPdpPtr) += m * (gdpr+gds+gbd+xrev*(gm+gmbs)); *(here->B2SPspPtr) += m * (gspr+gds+gbs+xnrm*(gm+gmbs)); *(here->B2DdpPtr) -= m * (gdpr); *(here->B2SspPtr) -= m * (gspr); *(here->B2BdpPtr) -= m * (gbd); *(here->B2BspPtr) -= m * (gbs); *(here->B2DPdPtr) -= m * (gdpr); *(here->B2DPgPtr) += m * ((xnrm-xrev)*gm); *(here->B2DPbPtr) += m * (-gbd+(xnrm-xrev)*gmbs); *(here->B2DPspPtr) += m * (-gds-xnrm*(gm+gmbs)); *(here->B2SPgPtr) += m * (-(xnrm-xrev)*gm); *(here->B2SPsPtr) -= m * (gspr); *(here->B2SPbPtr) += m * (-gbs-(xnrm-xrev)*gmbs); *(here->B2SPdpPtr) += m * (-gds-xrev*(gm+gmbs)); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim2/b2mpar.c0000644000175000017500000004455213546075722021540 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Min-Chie Jeng, Hong J. Park, Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "bsim2def.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B2mParam(int param, IFvalue *value, GENmodel *inMod) { B2model *mod = (B2model*)inMod; switch(param) { case BSIM2_MOD_VFB0 : mod->B2vfb0 = value->rValue; mod->B2vfb0Given = TRUE; break; case BSIM2_MOD_VFBL : mod->B2vfbL = value->rValue; mod->B2vfbLGiven = TRUE; break; case BSIM2_MOD_VFBW : mod->B2vfbW = value->rValue; mod->B2vfbWGiven = TRUE; break; case BSIM2_MOD_PHI0 : mod->B2phi0 = value->rValue; mod->B2phi0Given = TRUE; break; case BSIM2_MOD_PHIL : mod->B2phiL = value->rValue; mod->B2phiLGiven = TRUE; break; case BSIM2_MOD_PHIW : mod->B2phiW = value->rValue; mod->B2phiWGiven = TRUE; break; case BSIM2_MOD_K10 : mod->B2k10 = value->rValue; mod->B2k10Given = TRUE; break; case BSIM2_MOD_K1L : mod->B2k1L = value->rValue; mod->B2k1LGiven = TRUE; break; case BSIM2_MOD_K1W : mod->B2k1W = value->rValue; mod->B2k1WGiven = TRUE; break; case BSIM2_MOD_K20 : mod->B2k20 = value->rValue; mod->B2k20Given = TRUE; break; case BSIM2_MOD_K2L : mod->B2k2L = value->rValue; mod->B2k2LGiven = TRUE; break; case BSIM2_MOD_K2W : mod->B2k2W = value->rValue; mod->B2k2WGiven = TRUE; break; case BSIM2_MOD_ETA00 : mod->B2eta00 = value->rValue; mod->B2eta00Given = TRUE; break; case BSIM2_MOD_ETA0L : mod->B2eta0L = value->rValue; mod->B2eta0LGiven = TRUE; break; case BSIM2_MOD_ETA0W : mod->B2eta0W = value->rValue; mod->B2eta0WGiven = TRUE; break; case BSIM2_MOD_ETAB0 : mod->B2etaB0 = value->rValue; mod->B2etaB0Given = TRUE; break; case BSIM2_MOD_ETABL : mod->B2etaBL = value->rValue; mod->B2etaBLGiven = TRUE; break; case BSIM2_MOD_ETABW : mod->B2etaBW = value->rValue; mod->B2etaBWGiven = TRUE; break; case BSIM2_MOD_DELTAL : mod->B2deltaL = value->rValue; mod->B2deltaLGiven = TRUE; break; case BSIM2_MOD_DELTAW : mod->B2deltaW = value->rValue; mod->B2deltaWGiven = TRUE; break; case BSIM2_MOD_MOB00 : mod->B2mob00 = value->rValue; mod->B2mob00Given = TRUE; break; case BSIM2_MOD_MOB0B0 : mod->B2mob0B0 = value->rValue; mod->B2mob0B0Given = TRUE; break; case BSIM2_MOD_MOB0BL : mod->B2mob0BL = value->rValue; mod->B2mob0BLGiven = TRUE; break; case BSIM2_MOD_MOB0BW : mod->B2mob0BW = value->rValue; mod->B2mob0BWGiven = TRUE; break; case BSIM2_MOD_MOBS00 : mod->B2mobs00 = value->rValue; mod->B2mobs00Given = TRUE; break; case BSIM2_MOD_MOBS0L : mod->B2mobs0L = value->rValue; mod->B2mobs0LGiven = TRUE; break; case BSIM2_MOD_MOBS0W : mod->B2mobs0W = value->rValue; mod->B2mobs0WGiven = TRUE; break; case BSIM2_MOD_MOBSB0 : mod->B2mobsB0 = value->rValue; mod->B2mobsB0Given = TRUE; break; case BSIM2_MOD_MOBSBL : mod->B2mobsBL = value->rValue; mod->B2mobsBLGiven = TRUE; break; case BSIM2_MOD_MOBSBW : mod->B2mobsBW = value->rValue; mod->B2mobsBWGiven = TRUE; break; case BSIM2_MOD_MOB200 : mod->B2mob200 = value->rValue; mod->B2mob200Given = TRUE; break; case BSIM2_MOD_MOB20L : mod->B2mob20L = value->rValue; mod->B2mob20LGiven = TRUE; break; case BSIM2_MOD_MOB20W : mod->B2mob20W = value->rValue; mod->B2mob20WGiven = TRUE; break; case BSIM2_MOD_MOB2B0 : mod->B2mob2B0 = value->rValue; mod->B2mob2B0Given = TRUE; break; case BSIM2_MOD_MOB2BL : mod->B2mob2BL = value->rValue; mod->B2mob2BLGiven = TRUE; break; case BSIM2_MOD_MOB2BW : mod->B2mob2BW = value->rValue; mod->B2mob2BWGiven = TRUE; break; case BSIM2_MOD_MOB2G0 : mod->B2mob2G0 = value->rValue; mod->B2mob2G0Given = TRUE; break; case BSIM2_MOD_MOB2GL : mod->B2mob2GL = value->rValue; mod->B2mob2GLGiven = TRUE; break; case BSIM2_MOD_MOB2GW : mod->B2mob2GW = value->rValue; mod->B2mob2GWGiven = TRUE; break; case BSIM2_MOD_MOB300 : mod->B2mob300 = value->rValue; mod->B2mob300Given = TRUE; break; case BSIM2_MOD_MOB30L : mod->B2mob30L = value->rValue; mod->B2mob30LGiven = TRUE; break; case BSIM2_MOD_MOB30W : mod->B2mob30W = value->rValue; mod->B2mob30WGiven = TRUE; break; case BSIM2_MOD_MOB3B0 : mod->B2mob3B0 = value->rValue; mod->B2mob3B0Given = TRUE; break; case BSIM2_MOD_MOB3BL : mod->B2mob3BL = value->rValue; mod->B2mob3BLGiven = TRUE; break; case BSIM2_MOD_MOB3BW : mod->B2mob3BW = value->rValue; mod->B2mob3BWGiven = TRUE; break; case BSIM2_MOD_MOB3G0 : mod->B2mob3G0 = value->rValue; mod->B2mob3G0Given = TRUE; break; case BSIM2_MOD_MOB3GL : mod->B2mob3GL = value->rValue; mod->B2mob3GLGiven = TRUE; break; case BSIM2_MOD_MOB3GW : mod->B2mob3GW = value->rValue; mod->B2mob3GWGiven = TRUE; break; case BSIM2_MOD_MOB400 : mod->B2mob400 = value->rValue; mod->B2mob400Given = TRUE; break; case BSIM2_MOD_MOB40L : mod->B2mob40L = value->rValue; mod->B2mob40LGiven = TRUE; break; case BSIM2_MOD_MOB40W : mod->B2mob40W = value->rValue; mod->B2mob40WGiven = TRUE; break; case BSIM2_MOD_MOB4B0 : mod->B2mob4B0 = value->rValue; mod->B2mob4B0Given = TRUE; break; case BSIM2_MOD_MOB4BL : mod->B2mob4BL = value->rValue; mod->B2mob4BLGiven = TRUE; break; case BSIM2_MOD_MOB4BW : mod->B2mob4BW = value->rValue; mod->B2mob4BWGiven = TRUE; break; case BSIM2_MOD_MOB4G0 : mod->B2mob4G0 = value->rValue; mod->B2mob4G0Given = TRUE; break; case BSIM2_MOD_MOB4GL : mod->B2mob4GL = value->rValue; mod->B2mob4GLGiven = TRUE; break; case BSIM2_MOD_MOB4GW : mod->B2mob4GW = value->rValue; mod->B2mob4GWGiven = TRUE; break; case BSIM2_MOD_UA00 : mod->B2ua00 = value->rValue; mod->B2ua00Given = TRUE; break; case BSIM2_MOD_UA0L : mod->B2ua0L = value->rValue; mod->B2ua0LGiven = TRUE; break; case BSIM2_MOD_UA0W : mod->B2ua0W = value->rValue; mod->B2ua0WGiven = TRUE; break; case BSIM2_MOD_UAB0 : mod->B2uaB0 = value->rValue; mod->B2uaB0Given = TRUE; break; case BSIM2_MOD_UABL : mod->B2uaBL = value->rValue; mod->B2uaBLGiven = TRUE; break; case BSIM2_MOD_UABW : mod->B2uaBW = value->rValue; mod->B2uaBWGiven = TRUE; break; case BSIM2_MOD_UB00 : mod->B2ub00 = value->rValue; mod->B2ub00Given = TRUE; break; case BSIM2_MOD_UB0L : mod->B2ub0L = value->rValue; mod->B2ub0LGiven = TRUE; break; case BSIM2_MOD_UB0W : mod->B2ub0W = value->rValue; mod->B2ub0WGiven = TRUE; break; case BSIM2_MOD_UBB0 : mod->B2ubB0 = value->rValue; mod->B2ubB0Given = TRUE; break; case BSIM2_MOD_UBBL : mod->B2ubBL = value->rValue; mod->B2ubBLGiven = TRUE; break; case BSIM2_MOD_UBBW : mod->B2ubBW = value->rValue; mod->B2ubBWGiven = TRUE; break; case BSIM2_MOD_U100 : mod->B2u100 = value->rValue; mod->B2u100Given = TRUE; break; case BSIM2_MOD_U10L : mod->B2u10L = value->rValue; mod->B2u10LGiven = TRUE; break; case BSIM2_MOD_U10W : mod->B2u10W = value->rValue; mod->B2u10WGiven = TRUE; break; case BSIM2_MOD_U1B0 : mod->B2u1B0 = value->rValue; mod->B2u1B0Given = TRUE; break; case BSIM2_MOD_U1BL : mod->B2u1BL = value->rValue; mod->B2u1BLGiven = TRUE; break; case BSIM2_MOD_U1BW : mod->B2u1BW = value->rValue; mod->B2u1BWGiven = TRUE; break; case BSIM2_MOD_U1D0 : mod->B2u1D0 = value->rValue; mod->B2u1D0Given = TRUE; break; case BSIM2_MOD_U1DL : mod->B2u1DL = value->rValue; mod->B2u1DLGiven = TRUE; break; case BSIM2_MOD_U1DW : mod->B2u1DW = value->rValue; mod->B2u1DWGiven = TRUE; break; case BSIM2_MOD_N00 : mod->B2n00 = value->rValue; mod->B2n00Given = TRUE; break; case BSIM2_MOD_N0L : mod->B2n0L = value->rValue; mod->B2n0LGiven = TRUE; break; case BSIM2_MOD_N0W : mod->B2n0W = value->rValue; mod->B2n0WGiven = TRUE; break; case BSIM2_MOD_NB0 : mod->B2nB0 = value->rValue; mod->B2nB0Given = TRUE; break; case BSIM2_MOD_NBL : mod->B2nBL = value->rValue; mod->B2nBLGiven = TRUE; break; case BSIM2_MOD_NBW : mod->B2nBW = value->rValue; mod->B2nBWGiven = TRUE; break; case BSIM2_MOD_ND0 : mod->B2nD0 = value->rValue; mod->B2nD0Given = TRUE; break; case BSIM2_MOD_NDL : mod->B2nDL = value->rValue; mod->B2nDLGiven = TRUE; break; case BSIM2_MOD_NDW : mod->B2nDW = value->rValue; mod->B2nDWGiven = TRUE; break; case BSIM2_MOD_VOF00 : mod->B2vof00 = value->rValue; mod->B2vof00Given = TRUE; break; case BSIM2_MOD_VOF0L : mod->B2vof0L = value->rValue; mod->B2vof0LGiven = TRUE; break; case BSIM2_MOD_VOF0W : mod->B2vof0W = value->rValue; mod->B2vof0WGiven = TRUE; break; case BSIM2_MOD_VOFB0 : mod->B2vofB0 = value->rValue; mod->B2vofB0Given = TRUE; break; case BSIM2_MOD_VOFBL : mod->B2vofBL = value->rValue; mod->B2vofBLGiven = TRUE; break; case BSIM2_MOD_VOFBW : mod->B2vofBW = value->rValue; mod->B2vofBWGiven = TRUE; break; case BSIM2_MOD_VOFD0 : mod->B2vofD0 = value->rValue; mod->B2vofD0Given = TRUE; break; case BSIM2_MOD_VOFDL : mod->B2vofDL = value->rValue; mod->B2vofDLGiven = TRUE; break; case BSIM2_MOD_VOFDW : mod->B2vofDW = value->rValue; mod->B2vofDWGiven = TRUE; break; case BSIM2_MOD_AI00 : mod->B2ai00 = value->rValue; mod->B2ai00Given = TRUE; break; case BSIM2_MOD_AI0L : mod->B2ai0L = value->rValue; mod->B2ai0LGiven = TRUE; break; case BSIM2_MOD_AI0W : mod->B2ai0W = value->rValue; mod->B2ai0WGiven = TRUE; break; case BSIM2_MOD_AIB0 : mod->B2aiB0 = value->rValue; mod->B2aiB0Given = TRUE; break; case BSIM2_MOD_AIBL : mod->B2aiBL = value->rValue; mod->B2aiBLGiven = TRUE; break; case BSIM2_MOD_AIBW : mod->B2aiBW = value->rValue; mod->B2aiBWGiven = TRUE; break; case BSIM2_MOD_BI00 : mod->B2bi00 = value->rValue; mod->B2bi00Given = TRUE; break; case BSIM2_MOD_BI0L : mod->B2bi0L = value->rValue; mod->B2bi0LGiven = TRUE; break; case BSIM2_MOD_BI0W : mod->B2bi0W = value->rValue; mod->B2bi0WGiven = TRUE; break; case BSIM2_MOD_BIB0 : mod->B2biB0 = value->rValue; mod->B2biB0Given = TRUE; break; case BSIM2_MOD_BIBL : mod->B2biBL = value->rValue; mod->B2biBLGiven = TRUE; break; case BSIM2_MOD_BIBW : mod->B2biBW = value->rValue; mod->B2biBWGiven = TRUE; break; case BSIM2_MOD_VGHIGH0 : mod->B2vghigh0 = value->rValue; mod->B2vghigh0Given = TRUE; break; case BSIM2_MOD_VGHIGHL : mod->B2vghighL = value->rValue; mod->B2vghighLGiven = TRUE; break; case BSIM2_MOD_VGHIGHW : mod->B2vghighW = value->rValue; mod->B2vghighWGiven = TRUE; break; case BSIM2_MOD_VGLOW0 : mod->B2vglow0 = value->rValue; mod->B2vglow0Given = TRUE; break; case BSIM2_MOD_VGLOWL : mod->B2vglowL = value->rValue; mod->B2vglowLGiven = TRUE; break; case BSIM2_MOD_VGLOWW : mod->B2vglowW = value->rValue; mod->B2vglowWGiven = TRUE; break; case BSIM2_MOD_TOX : mod->B2tox = value->rValue; mod->B2toxGiven = TRUE; break; case BSIM2_MOD_TEMP : mod->B2temp = value->rValue; mod->B2tempGiven = TRUE; break; case BSIM2_MOD_VDD : mod->B2vdd = value->rValue; mod->B2vddGiven = TRUE; break; case BSIM2_MOD_VGG : mod->B2vgg = value->rValue; mod->B2vggGiven = TRUE; break; case BSIM2_MOD_VBB : mod->B2vbb = value->rValue; mod->B2vbbGiven = TRUE; break; case BSIM2_MOD_CGSO : mod->B2gateSourceOverlapCap = value->rValue; mod->B2gateSourceOverlapCapGiven = TRUE; break; case BSIM2_MOD_CGDO : mod->B2gateDrainOverlapCap = value->rValue; mod->B2gateDrainOverlapCapGiven = TRUE; break; case BSIM2_MOD_CGBO : mod->B2gateBulkOverlapCap = value->rValue; mod->B2gateBulkOverlapCapGiven = TRUE; break; case BSIM2_MOD_XPART : mod->B2channelChargePartitionFlag = (value->iValue != 0); mod->B2channelChargePartitionFlagGiven = TRUE; break; case BSIM2_MOD_RSH : mod->B2sheetResistance = value->rValue; mod->B2sheetResistanceGiven = TRUE; break; case BSIM2_MOD_JS : mod->B2jctSatCurDensity = value->rValue; mod->B2jctSatCurDensityGiven = TRUE; break; case BSIM2_MOD_PB : mod->B2bulkJctPotential = value->rValue; mod->B2bulkJctPotentialGiven = TRUE; break; case BSIM2_MOD_MJ : mod->B2bulkJctBotGradingCoeff = value->rValue; mod->B2bulkJctBotGradingCoeffGiven = TRUE; break; case BSIM2_MOD_PBSW : mod->B2sidewallJctPotential = value->rValue; mod->B2sidewallJctPotentialGiven = TRUE; break; case BSIM2_MOD_MJSW : mod->B2bulkJctSideGradingCoeff = value->rValue; mod->B2bulkJctSideGradingCoeffGiven = TRUE; break; case BSIM2_MOD_CJ : mod->B2unitAreaJctCap = value->rValue; mod->B2unitAreaJctCapGiven = TRUE; break; case BSIM2_MOD_CJSW : mod->B2unitLengthSidewallJctCap = value->rValue; mod->B2unitLengthSidewallJctCapGiven = TRUE; break; case BSIM2_MOD_DEFWIDTH : mod->B2defaultWidth = value->rValue; mod->B2defaultWidthGiven = TRUE; break; case BSIM2_MOD_DELLENGTH : mod->B2deltaLength = value->rValue; mod->B2deltaLengthGiven = TRUE; break; case BSIM2_MOD_AF : mod->B2fNexp = value->rValue; mod->B2fNexpGiven = TRUE; break; case BSIM2_MOD_KF : mod->B2fNcoef = value->rValue; mod->B2fNcoefGiven = TRUE; break; case BSIM2_MOD_NMOS : if(value->iValue) { mod->B2type = 1; mod->B2typeGiven = TRUE; } break; case BSIM2_MOD_PMOS : if(value->iValue) { mod->B2type = - 1; mod->B2typeGiven = TRUE; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim2/bsim2def.h0000644000175000017500000005714013546075722022052 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Min-Chie Jeng, Hong June Park, Thomas L. Quarles **********/ #ifndef BSIM2 #define BSIM2 #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" /* declarations for B2 MOSFETs */ /* information needed for each instance */ typedef struct sBSIM2instance { struct GENinstance gen; #define B2modPtr(inst) ((struct sBSIM2model *)((inst)->gen.GENmodPtr)) #define B2nextInstance(inst) ((struct sBSIM2instance *)((inst)->gen.GENnextInstance)) #define B2name gen.GENname #define B2states gen.GENstate const int B2dNode; /* number of the gate node of the mosfet */ const int B2gNode; /* number of the gate node of the mosfet */ const int B2sNode; /* number of the source node of the mosfet */ const int B2bNode; /* number of the bulk node of the mosfet */ int B2dNodePrime; /* number of the internal drain node of the mosfet */ int B2sNodePrime; /* number of the internal source node of the mosfet */ double B2l; /* the length of the channel region */ double B2w; /* the width of the channel region */ double B2m; /* the parallel multiplier */ double B2drainArea; /* the area of the drain diffusion */ double B2sourceArea; /* the area of the source diffusion */ double B2drainSquares; /* the length of the drain in squares */ double B2sourceSquares; /* the length of the source in squares */ double B2drainPerimeter; double B2sourcePerimeter; double B2sourceConductance; /* cond. of source (or 0): set in setup */ double B2drainConductance; /* cond. of drain (or 0): set in setup */ double B2icVBS; /* initial condition B-S voltage */ double B2icVDS; /* initial condition D-S voltage */ double B2icVGS; /* initial condition G-S voltage */ double B2von; double B2vdsat; int B2off; /* non-zero to indicate device is off for dc analysis*/ int B2mode; /* device mode : 1 = normal, -1 = inverse */ struct bsim2SizeDependParam *pParam; unsigned B2lGiven :1; unsigned B2wGiven :1; unsigned B2mGiven :1; unsigned B2drainAreaGiven :1; unsigned B2sourceAreaGiven :1; unsigned B2drainSquaresGiven :1; unsigned B2sourceSquaresGiven :1; unsigned B2drainPerimeterGiven :1; unsigned B2sourcePerimeterGiven :1; unsigned B2dNodePrimeSet :1; unsigned B2sNodePrimeSet :1; unsigned B2icVBSGiven :1; unsigned B2icVDSGiven :1; unsigned B2icVGSGiven :1; unsigned B2vonGiven :1; unsigned B2vdsatGiven :1; double *B2DdPtr; /* pointer to sparse matrix element at * (Drain node,drain node) */ double *B2GgPtr; /* pointer to sparse matrix element at * (gate node,gate node) */ double *B2SsPtr; /* pointer to sparse matrix element at * (source node,source node) */ double *B2BbPtr; /* pointer to sparse matrix element at * (bulk node,bulk node) */ double *B2DPdpPtr; /* pointer to sparse matrix element at * (drain prime node,drain prime node) */ double *B2SPspPtr; /* pointer to sparse matrix element at * (source prime node,source prime node) */ double *B2DdpPtr; /* pointer to sparse matrix element at * (drain node,drain prime node) */ double *B2GbPtr; /* pointer to sparse matrix element at * (gate node,bulk node) */ double *B2GdpPtr; /* pointer to sparse matrix element at * (gate node,drain prime node) */ double *B2GspPtr; /* pointer to sparse matrix element at * (gate node,source prime node) */ double *B2SspPtr; /* pointer to sparse matrix element at * (source node,source prime node) */ double *B2BdpPtr; /* pointer to sparse matrix element at * (bulk node,drain prime node) */ double *B2BspPtr; /* pointer to sparse matrix element at * (bulk node,source prime node) */ double *B2DPspPtr; /* pointer to sparse matrix element at * (drain prime node,source prime node) */ double *B2DPdPtr; /* pointer to sparse matrix element at * (drain prime node,drain node) */ double *B2BgPtr; /* pointer to sparse matrix element at * (bulk node,gate node) */ double *B2DPgPtr; /* pointer to sparse matrix element at * (drain prime node,gate node) */ double *B2SPgPtr; /* pointer to sparse matrix element at * (source prime node,gate node) */ double *B2SPsPtr; /* pointer to sparse matrix element at * (source prime node,source node) */ double *B2DPbPtr; /* pointer to sparse matrix element at * (drain prime node,bulk node) */ double *B2SPbPtr; /* pointer to sparse matrix element at * (source prime node,bulk node) */ double *B2SPdpPtr; /* pointer to sparse matrix element at * (source prime node,drain prime node) */ #define B2RDNOIZ 0 #define B2RSNOIZ 1 #define B2IDNOIZ 2 #define B2FLNOIZ 3 #define B2TOTNOIZ 4 #define B2NSRCS 5 /* the number of BSIM2 noise sources */ #ifndef NONOISE double B2nVar[NSTATVARS][B2NSRCS]; #else /* NONOISE */ double **B2nVar; #endif /* NONOISE */ #define B2vbd B2states+ 0 #define B2vbs B2states+ 1 #define B2vgs B2states+ 2 #define B2vds B2states+ 3 #define B2cd B2states+ 4 #define B2id B2states+ 4 #define B2cbs B2states+ 5 #define B2ibs B2states+ 5 #define B2cbd B2states+ 6 #define B2ibd B2states+ 6 #define B2gm B2states+ 7 #define B2gds B2states+ 8 #define B2gmbs B2states+ 9 #define B2gbd B2states+ 10 #define B2gbs B2states+ 11 #define B2qb B2states+ 12 #define B2cqb B2states+ 13 #define B2iqb B2states+ 13 #define B2qg B2states+ 14 #define B2cqg B2states+ 15 #define B2iqg B2states+ 15 #define B2qd B2states+ 16 #define B2cqd B2states+ 17 #define B2iqd B2states+ 17 #define B2cggb B2states+ 18 #define B2cgdb B2states+ 19 #define B2cgsb B2states+ 20 #define B2cbgb B2states+ 21 #define B2cbdb B2states+ 22 #define B2cbsb B2states+ 23 #define B2capbd B2states+ 24 #define B2iqbd B2states+ 25 #define B2cqbd B2states+ 25 #define B2capbs B2states+ 26 #define B2iqbs B2states+ 27 #define B2cqbs B2states+ 27 #define B2cdgb B2states+ 28 #define B2cddb B2states+ 29 #define B2cdsb B2states+ 30 #define B2vono B2states+ 31 #define B2vdsato B2states+ 32 #define B2qbs B2states+ 33 #define B2qbd B2states+ 34 #define B2numStates 35 } B2instance ; struct bsim2SizeDependParam { double Width; double Length; double B2vfb; /* flat band voltage at given L and W */ double B2phi; /* surface potential at strong inversion */ double B2k1; /* bulk effect coefficient 1 */ double B2k2; /* bulk effect coefficient 2 */ double B2eta0; /* drain induced barrier lowering */ double B2etaB; /* Vbs dependence of Eta */ double B2beta0; /* Beta at Vds = 0 and Vgs = Vth */ double B2beta0B; /* Vbs dependence of Beta0 */ double B2betas0; /* Beta at Vds=Vdd and Vgs=Vth */ double B2betasB; /* Vbs dependence of Betas */ double B2beta20; /* Vds dependence of Beta in tanh term */ double B2beta2B; /* Vbs dependence of Beta2 */ double B2beta2G; /* Vgs dependence of Beta2 */ double B2beta30; /* Vds dependence of Beta in linear term */ double B2beta3B; /* Vbs dependence of Beta3 */ double B2beta3G; /* Vgs dependence of Beta3 */ double B2beta40; /* Vds dependence of Beta in quadra term */ double B2beta4B; /* Vbs dependence of Beta4 */ double B2beta4G; /* Vgs dependence of Beta4 */ double B2ua0; /* Linear Vgs dependence of Mobility */ double B2uaB; /* Vbs dependence of Ua */ double B2ub0; /* Quadratic Vgs dependence of Mobility */ double B2ubB; /* Vbs dependence of Ub */ double B2u10; /* Drift Velocity Saturation due to Vds */ double B2u1B; /* Vbs dependence of U1 */ double B2u1D; /* Vds dependence of U1 */ double B2n0; /* Subthreshold slope at Vds=0, Vbs=0 */ double B2nB; /* Vbs dependence of n */ double B2nD; /* Vds dependence of n */ double B2vof0; /* Vth offset at Vds=0, Vbs=0 */ double B2vofB; /* Vbs dependence of Vof */ double B2vofD; /* Vds dependence of Vof */ double B2ai0; /* Pre-factor in hot-electron effects */ double B2aiB; /* Vbs dependence of Ai */ double B2bi0; /* Exp-factor in hot-electron effects */ double B2biB; /* Vbs dependence of Bi */ double B2vghigh; /* Upper bound of cubic spline function */ double B2vglow; /* Lower bound of cubic spline function */ double B2GDoverlapCap;/* Gate Drain Overlap Capacitance */ double B2GSoverlapCap;/* Gate Source Overlap Capacitance */ double B2GBoverlapCap;/* Gate Bulk Overlap Capacitance */ double SqrtPhi; double Phis3; double CoxWL; double One_Third_CoxWL; double Two_Third_CoxWL; double Arg; double B2vt0; struct bsim2SizeDependParam *pNext; }; /* per model data */ typedef struct sBSIM2model { /* model structure for a resistor */ struct GENmodel gen; #define B2modType gen.GENmodType #define B2nextModel(inst) ((struct sBSIM2model *)((inst)->gen.GENnextModel)) #define B2instances(inst) ((B2instance *)((inst)->gen.GENinstances)) #define B2modName gen.GENmodName int B2type; /* device type: 1 = nmos, -1 = pmos */ int pad; double B2vfb0; double B2vfbL; double B2vfbW; double B2phi0; double B2phiL; double B2phiW; double B2k10; double B2k1L; double B2k1W; double B2k20; double B2k2L; double B2k2W; double B2eta00; double B2eta0L; double B2eta0W; double B2etaB0; double B2etaBL; double B2etaBW; double B2deltaL; double B2deltaW; double B2mob00; double B2mob0B0; double B2mob0BL; double B2mob0BW ; double B2mobs00; double B2mobs0L; double B2mobs0W; double B2mobsB0; double B2mobsBL; double B2mobsBW; double B2mob200; double B2mob20L; double B2mob20W; double B2mob2B0; double B2mob2BL; double B2mob2BW; double B2mob2G0; double B2mob2GL; double B2mob2GW; double B2mob300; double B2mob30L; double B2mob30W; double B2mob3B0; double B2mob3BL; double B2mob3BW; double B2mob3G0; double B2mob3GL; double B2mob3GW; double B2mob400; double B2mob40L; double B2mob40W; double B2mob4B0; double B2mob4BL; double B2mob4BW; double B2mob4G0; double B2mob4GL; double B2mob4GW; double B2ua00; double B2ua0L; double B2ua0W; double B2uaB0; double B2uaBL; double B2uaBW; double B2ub00; double B2ub0L; double B2ub0W; double B2ubB0; double B2ubBL; double B2ubBW; double B2u100; double B2u10L; double B2u10W; double B2u1B0; double B2u1BL; double B2u1BW; double B2u1D0; double B2u1DL; double B2u1DW; double B2n00; double B2n0L; double B2n0W; double B2nB0; double B2nBL; double B2nBW; double B2nD0; double B2nDL; double B2nDW; double B2vof00; double B2vof0L; double B2vof0W; double B2vofB0; double B2vofBL; double B2vofBW; double B2vofD0; double B2vofDL; double B2vofDW; double B2ai00; double B2ai0L; double B2ai0W; double B2aiB0; double B2aiBL; double B2aiBW; double B2bi00; double B2bi0L; double B2bi0W; double B2biB0; double B2biBL; double B2biBW; double B2vghigh0; double B2vghighL; double B2vghighW; double B2vglow0; double B2vglowL; double B2vglowW; double B2tox; /* unit: micron */ double B2Cox; /* unit: F/cm**2 */ double B2temp; double B2vdd; double B2vdd2; double B2vgg; double B2vgg2; double B2vbb; double B2vbb2; double B2gateSourceOverlapCap; double B2gateDrainOverlapCap; double B2gateBulkOverlapCap; double B2Vtm; double B2sheetResistance; double B2jctSatCurDensity; double B2bulkJctPotential; double B2bulkJctBotGradingCoeff; double B2bulkJctSideGradingCoeff; double B2sidewallJctPotential; double B2unitAreaJctCap; double B2unitLengthSidewallJctCap; double B2defaultWidth; double B2deltaLength; double B2fNcoef; double B2fNexp; int B2channelChargePartitionFlag; struct bsim2SizeDependParam *pSizeDependParamKnot; unsigned B2vfb0Given :1; unsigned B2vfbLGiven :1; unsigned B2vfbWGiven :1; unsigned B2phi0Given :1; unsigned B2phiLGiven :1; unsigned B2phiWGiven :1; unsigned B2k10Given :1; unsigned B2k1LGiven :1; unsigned B2k1WGiven :1; unsigned B2k20Given :1; unsigned B2k2LGiven :1; unsigned B2k2WGiven :1; unsigned B2eta00Given :1; unsigned B2eta0LGiven :1; unsigned B2eta0WGiven :1; unsigned B2etaB0Given :1; unsigned B2etaBLGiven :1; unsigned B2etaBWGiven :1; unsigned B2deltaLGiven :1; unsigned B2deltaWGiven :1; unsigned B2mob00Given :1; unsigned B2mob0B0Given :1; unsigned B2mob0BLGiven :1; unsigned B2mob0BWGiven :1; unsigned B2mobs00Given :1; unsigned B2mobs0LGiven :1; unsigned B2mobs0WGiven :1; unsigned B2mobsB0Given :1; unsigned B2mobsBLGiven :1; unsigned B2mobsBWGiven :1; unsigned B2mob200Given :1; unsigned B2mob20LGiven :1; unsigned B2mob20WGiven :1; unsigned B2mob2B0Given :1; unsigned B2mob2BLGiven :1; unsigned B2mob2BWGiven :1; unsigned B2mob2G0Given :1; unsigned B2mob2GLGiven :1; unsigned B2mob2GWGiven :1; unsigned B2mob300Given :1; unsigned B2mob30LGiven :1; unsigned B2mob30WGiven :1; unsigned B2mob3B0Given :1; unsigned B2mob3BLGiven :1; unsigned B2mob3BWGiven :1; unsigned B2mob3G0Given :1; unsigned B2mob3GLGiven :1; unsigned B2mob3GWGiven :1; unsigned B2mob400Given :1; unsigned B2mob40LGiven :1; unsigned B2mob40WGiven :1; unsigned B2mob4B0Given :1; unsigned B2mob4BLGiven :1; unsigned B2mob4BWGiven :1; unsigned B2mob4G0Given :1; unsigned B2mob4GLGiven :1; unsigned B2mob4GWGiven :1; unsigned B2ua00Given :1; unsigned B2ua0LGiven :1; unsigned B2ua0WGiven :1; unsigned B2uaB0Given :1; unsigned B2uaBLGiven :1; unsigned B2uaBWGiven :1; unsigned B2ub00Given :1; unsigned B2ub0LGiven :1; unsigned B2ub0WGiven :1; unsigned B2ubB0Given :1; unsigned B2ubBLGiven :1; unsigned B2ubBWGiven :1; unsigned B2u100Given :1; unsigned B2u10LGiven :1; unsigned B2u10WGiven :1; unsigned B2u1B0Given :1; unsigned B2u1BLGiven :1; unsigned B2u1BWGiven :1; unsigned B2u1D0Given :1; unsigned B2u1DLGiven :1; unsigned B2u1DWGiven :1; unsigned B2n00Given :1; unsigned B2n0LGiven :1; unsigned B2n0WGiven :1; unsigned B2nB0Given :1; unsigned B2nBLGiven :1; unsigned B2nBWGiven :1; unsigned B2nD0Given :1; unsigned B2nDLGiven :1; unsigned B2nDWGiven :1; unsigned B2vof00Given :1; unsigned B2vof0LGiven :1; unsigned B2vof0WGiven :1; unsigned B2vofB0Given :1; unsigned B2vofBLGiven :1; unsigned B2vofBWGiven :1; unsigned B2vofD0Given :1; unsigned B2vofDLGiven :1; unsigned B2vofDWGiven :1; unsigned B2ai00Given :1; unsigned B2ai0LGiven :1; unsigned B2ai0WGiven :1; unsigned B2aiB0Given :1; unsigned B2aiBLGiven :1; unsigned B2aiBWGiven :1; unsigned B2bi00Given :1; unsigned B2bi0LGiven :1; unsigned B2bi0WGiven :1; unsigned B2biB0Given :1; unsigned B2biBLGiven :1; unsigned B2biBWGiven :1; unsigned B2vghigh0Given :1; unsigned B2vghighLGiven :1; unsigned B2vghighWGiven :1; unsigned B2vglow0Given :1; unsigned B2vglowLGiven :1; unsigned B2vglowWGiven :1; unsigned B2toxGiven :1; unsigned B2tempGiven :1; unsigned B2vddGiven :1; unsigned B2vggGiven :1; unsigned B2vbbGiven :1; unsigned B2gateSourceOverlapCapGiven :1; unsigned B2gateDrainOverlapCapGiven :1; unsigned B2gateBulkOverlapCapGiven :1; unsigned B2channelChargePartitionFlagGiven :1; unsigned B2sheetResistanceGiven :1; unsigned B2jctSatCurDensityGiven :1; unsigned B2bulkJctPotentialGiven :1; unsigned B2bulkJctBotGradingCoeffGiven :1; unsigned B2sidewallJctPotentialGiven :1; unsigned B2bulkJctSideGradingCoeffGiven :1; unsigned B2unitAreaJctCapGiven :1; unsigned B2unitLengthSidewallJctCapGiven :1; unsigned B2defaultWidthGiven :1; unsigned B2deltaLengthGiven :1; unsigned B2fNcoefGiven :1; unsigned B2fNexpGiven :1; unsigned B2typeGiven :1; } B2model; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ /* device parameters */ #define BSIM2_W 1 #define BSIM2_L 2 #define BSIM2_AS 3 #define BSIM2_AD 4 #define BSIM2_PS 5 #define BSIM2_PD 6 #define BSIM2_NRS 7 #define BSIM2_NRD 8 #define BSIM2_OFF 9 #define BSIM2_IC_VBS 10 #define BSIM2_IC_VDS 11 #define BSIM2_IC_VGS 12 #define BSIM2_IC 13 #define BSIM2_M 14 /* model parameters */ #define BSIM2_MOD_VFB0 101 #define BSIM2_MOD_VFBL 102 #define BSIM2_MOD_VFBW 103 #define BSIM2_MOD_PHI0 104 #define BSIM2_MOD_PHIL 105 #define BSIM2_MOD_PHIW 106 #define BSIM2_MOD_K10 107 #define BSIM2_MOD_K1L 108 #define BSIM2_MOD_K1W 109 #define BSIM2_MOD_K20 110 #define BSIM2_MOD_K2L 111 #define BSIM2_MOD_K2W 112 #define BSIM2_MOD_ETA00 113 #define BSIM2_MOD_ETA0L 114 #define BSIM2_MOD_ETA0W 115 #define BSIM2_MOD_ETAB0 116 #define BSIM2_MOD_ETABL 117 #define BSIM2_MOD_ETABW 118 #define BSIM2_MOD_DELTAL 119 #define BSIM2_MOD_DELTAW 120 #define BSIM2_MOD_MOB00 121 #define BSIM2_MOD_MOB0B0 122 #define BSIM2_MOD_MOB0BL 123 #define BSIM2_MOD_MOB0BW 124 #define BSIM2_MOD_MOBS00 125 #define BSIM2_MOD_MOBS0L 126 #define BSIM2_MOD_MOBS0W 127 #define BSIM2_MOD_MOBSB0 128 #define BSIM2_MOD_MOBSBL 129 #define BSIM2_MOD_MOBSBW 130 #define BSIM2_MOD_MOB200 131 #define BSIM2_MOD_MOB20L 132 #define BSIM2_MOD_MOB20W 133 #define BSIM2_MOD_MOB2B0 134 #define BSIM2_MOD_MOB2BL 135 #define BSIM2_MOD_MOB2BW 136 #define BSIM2_MOD_MOB2G0 137 #define BSIM2_MOD_MOB2GL 138 #define BSIM2_MOD_MOB2GW 139 #define BSIM2_MOD_MOB300 140 #define BSIM2_MOD_MOB30L 141 #define BSIM2_MOD_MOB30W 142 #define BSIM2_MOD_MOB3B0 143 #define BSIM2_MOD_MOB3BL 144 #define BSIM2_MOD_MOB3BW 145 #define BSIM2_MOD_MOB3G0 146 #define BSIM2_MOD_MOB3GL 147 #define BSIM2_MOD_MOB3GW 148 #define BSIM2_MOD_MOB400 149 #define BSIM2_MOD_MOB40L 150 #define BSIM2_MOD_MOB40W 151 #define BSIM2_MOD_MOB4B0 152 #define BSIM2_MOD_MOB4BL 153 #define BSIM2_MOD_MOB4BW 154 #define BSIM2_MOD_MOB4G0 155 #define BSIM2_MOD_MOB4GL 156 #define BSIM2_MOD_MOB4GW 157 #define BSIM2_MOD_UA00 158 #define BSIM2_MOD_UA0L 159 #define BSIM2_MOD_UA0W 160 #define BSIM2_MOD_UAB0 161 #define BSIM2_MOD_UABL 162 #define BSIM2_MOD_UABW 163 #define BSIM2_MOD_UB00 164 #define BSIM2_MOD_UB0L 165 #define BSIM2_MOD_UB0W 166 #define BSIM2_MOD_UBB0 167 #define BSIM2_MOD_UBBL 168 #define BSIM2_MOD_UBBW 169 #define BSIM2_MOD_U100 170 #define BSIM2_MOD_U10L 171 #define BSIM2_MOD_U10W 172 #define BSIM2_MOD_U1B0 173 #define BSIM2_MOD_U1BL 174 #define BSIM2_MOD_U1BW 175 #define BSIM2_MOD_U1D0 176 #define BSIM2_MOD_U1DL 177 #define BSIM2_MOD_U1DW 178 #define BSIM2_MOD_N00 179 #define BSIM2_MOD_N0L 180 #define BSIM2_MOD_N0W 181 #define BSIM2_MOD_NB0 182 #define BSIM2_MOD_NBL 183 #define BSIM2_MOD_NBW 184 #define BSIM2_MOD_ND0 185 #define BSIM2_MOD_NDL 186 #define BSIM2_MOD_NDW 187 #define BSIM2_MOD_VOF00 188 #define BSIM2_MOD_VOF0L 189 #define BSIM2_MOD_VOF0W 190 #define BSIM2_MOD_VOFB0 191 #define BSIM2_MOD_VOFBL 192 #define BSIM2_MOD_VOFBW 193 #define BSIM2_MOD_VOFD0 194 #define BSIM2_MOD_VOFDL 195 #define BSIM2_MOD_VOFDW 196 #define BSIM2_MOD_AI00 197 #define BSIM2_MOD_AI0L 198 #define BSIM2_MOD_AI0W 199 #define BSIM2_MOD_AIB0 200 #define BSIM2_MOD_AIBL 201 #define BSIM2_MOD_AIBW 202 #define BSIM2_MOD_BI00 203 #define BSIM2_MOD_BI0L 204 #define BSIM2_MOD_BI0W 205 #define BSIM2_MOD_BIB0 206 #define BSIM2_MOD_BIBL 207 #define BSIM2_MOD_BIBW 208 #define BSIM2_MOD_VGHIGH0 209 #define BSIM2_MOD_VGHIGHL 210 #define BSIM2_MOD_VGHIGHW 211 #define BSIM2_MOD_VGLOW0 212 #define BSIM2_MOD_VGLOWL 213 #define BSIM2_MOD_VGLOWW 214 #define BSIM2_MOD_TOX 215 #define BSIM2_MOD_TEMP 216 #define BSIM2_MOD_VDD 217 #define BSIM2_MOD_VGG 218 #define BSIM2_MOD_VBB 219 #define BSIM2_MOD_CGSO 220 #define BSIM2_MOD_CGDO 221 #define BSIM2_MOD_CGBO 222 #define BSIM2_MOD_XPART 223 #define BSIM2_MOD_RSH 224 #define BSIM2_MOD_JS 225 #define BSIM2_MOD_PB 226 #define BSIM2_MOD_MJ 227 #define BSIM2_MOD_PBSW 228 #define BSIM2_MOD_MJSW 229 #define BSIM2_MOD_CJ 230 #define BSIM2_MOD_CJSW 231 #define BSIM2_MOD_DEFWIDTH 232 #define BSIM2_MOD_DELLENGTH 233 #define BSIM2_MOD_NMOS 234 #define BSIM2_MOD_PMOS 235 #define BSIM2_MOD_KF 236 #define BSIM2_MOD_AF 237 /* device questions */ #define BSIM2_DNODE 241 #define BSIM2_GNODE 242 #define BSIM2_SNODE 243 #define BSIM2_BNODE 244 #define BSIM2_DNODEPRIME 245 #define BSIM2_SNODEPRIME 246 #define BSIM2_VBD 247 #define BSIM2_VBS 248 #define BSIM2_VGS 249 #define BSIM2_VDS 250 #define BSIM2_CD 251 #define BSIM2_CBS 252 #define BSIM2_CBD 253 #define BSIM2_GM 254 #define BSIM2_GDS 255 #define BSIM2_GMBS 256 #define BSIM2_GBD 257 #define BSIM2_GBS 258 #define BSIM2_QB 259 #define BSIM2_CQB 260 #define BSIM2_QG 261 #define BSIM2_CQG 262 #define BSIM2_QD 263 #define BSIM2_CQD 264 #define BSIM2_CGG 265 #define BSIM2_CGD 266 #define BSIM2_CGS 267 #define BSIM2_CBG 268 #define BSIM2_CAPBD 269 #define BSIM2_CQBD 270 #define BSIM2_CAPBS 271 #define BSIM2_CQBS 272 #define BSIM2_CDG 273 #define BSIM2_CDD 274 #define BSIM2_CDS 275 #define BSIM2_VON 276 #define BSIM2_QBS 277 #define BSIM2_QBD 278 #define BSIM2_SOURCECONDUCT 279 #define BSIM2_DRAINCONDUCT 280 /* model questions */ #include "bsim2ext.h" extern void B2evaluate(double,double,double,B2instance*,B2model*, double*,double*,double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, CKTcircuit*); #endif /*B2*/ tmpk8ny_4pz/src/spicelib/devices/bsim2/b2.c0000644000175000017500000003012113546075722020643 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Min-Chie Jeng, Hong J. Park, Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "bsim2def.h" #include "ngspice/suffix.h" IFparm B2pTable[] = { /* parameters */ IOP( "l", BSIM2_L, IF_REAL , "Length"), IOP( "w", BSIM2_W, IF_REAL , "Width"), IOP( "m", BSIM2_M, IF_REAL , "Parallel Multiplier"), IOP( "ad", BSIM2_AD, IF_REAL , "Drain area"), IOP( "as", BSIM2_AS, IF_REAL , "Source area"), IOP( "pd", BSIM2_PD, IF_REAL , "Drain perimeter"), IOP( "ps", BSIM2_PS, IF_REAL , "Source perimeter"), IOP( "nrd", BSIM2_NRD, IF_REAL , "Number of squares in drain"), IOP( "nrs", BSIM2_NRS, IF_REAL , "Number of squares in source"), IOP( "off", BSIM2_OFF, IF_FLAG , "Device is initially off"), IOP( "vds", BSIM2_IC_VDS, IF_REAL , "Initial D-S voltage"), IOP( "vgs", BSIM2_IC_VGS, IF_REAL , "Initial G-S voltage"), IOP( "vbs", BSIM2_IC_VBS, IF_REAL , "Initial B-S voltage"), IP( "ic", BSIM2_IC, IF_VECTOR , "Vector of DS,GS,BS initial voltages") }; IFparm B2mPTable[] = { /* model parameters */ IOP( "vfb", BSIM2_MOD_VFB0, IF_REAL,"Flat band voltage"), IOP( "lvfb", BSIM2_MOD_VFBL, IF_REAL, "Length dependence of vfb"), IOP( "wvfb", BSIM2_MOD_VFBW, IF_REAL, "Width dependence of vfb"), IOP( "phi", BSIM2_MOD_PHI0, IF_REAL, "Strong inversion surface potential "), IOP( "lphi", BSIM2_MOD_PHIL, IF_REAL, "Length dependence of phi"), IOP( "wphi", BSIM2_MOD_PHIW, IF_REAL, "Width dependence of phi"), IOP( "k1", BSIM2_MOD_K10, IF_REAL, "Bulk effect coefficient 1"), IOP( "lk1", BSIM2_MOD_K1L, IF_REAL, "Length dependence of k1"), IOP( "wk1", BSIM2_MOD_K1W, IF_REAL, "Width dependence of k1"), IOP( "k2", BSIM2_MOD_K20, IF_REAL, "Bulk effect coefficient 2"), IOP( "lk2", BSIM2_MOD_K2L, IF_REAL, "Length dependence of k2"), IOP( "wk2", BSIM2_MOD_K2W, IF_REAL, "Width dependence of k2"), IOP( "eta0", BSIM2_MOD_ETA00, IF_REAL, "VDS dependence of threshold voltage at VDD=0"), IOP( "leta0", BSIM2_MOD_ETA0L, IF_REAL, "Length dependence of eta0"), IOP( "weta0", BSIM2_MOD_ETA0W, IF_REAL, "Width dependence of eta0"), IOP( "etab", BSIM2_MOD_ETAB0, IF_REAL, "VBS dependence of eta"), IOP( "letab", BSIM2_MOD_ETABL, IF_REAL, "Length dependence of etab"), IOP( "wetab", BSIM2_MOD_ETABW, IF_REAL, "Width dependence of etab"), IOP( "dl", BSIM2_MOD_DELTAL, IF_REAL, "Channel length reduction in um"), IOP( "dw", BSIM2_MOD_DELTAW, IF_REAL, "Channel width reduction in um"), IOP( "mu0", BSIM2_MOD_MOB00, IF_REAL, "Low-field mobility, at VDS=0 VGS=VTH"), IOP( "mu0b", BSIM2_MOD_MOB0B0, IF_REAL, "VBS dependence of low-field mobility"), IOP( "lmu0b", BSIM2_MOD_MOB0BL, IF_REAL, "Length dependence of mu0b"), IOP( "wmu0b", BSIM2_MOD_MOB0BW, IF_REAL, "Width dependence of mu0b"), IOP( "mus0", BSIM2_MOD_MOBS00, IF_REAL, "Mobility at VDS=VDD VGS=VTH"), IOP( "lmus0", BSIM2_MOD_MOBS0L, IF_REAL, "Length dependence of mus0"), IOP( "wmus0", BSIM2_MOD_MOBS0W, IF_REAL, "Width dependence of mus"), IOP( "musb", BSIM2_MOD_MOBSB0, IF_REAL, "VBS dependence of mus"), IOP( "lmusb", BSIM2_MOD_MOBSBL, IF_REAL, "Length dependence of musb"), IOP( "wmusb", BSIM2_MOD_MOBSBW, IF_REAL, "Width dependence of musb"), IOP( "mu20", BSIM2_MOD_MOB200, IF_REAL, "VDS dependence of mu in tanh term"), IOP( "lmu20", BSIM2_MOD_MOB20L, IF_REAL, "Length dependence of mu20"), IOP( "wmu20", BSIM2_MOD_MOB20W, IF_REAL, "Width dependence of mu20"), IOP( "mu2b", BSIM2_MOD_MOB2B0, IF_REAL, "VBS dependence of mu2"), IOP( "lmu2b", BSIM2_MOD_MOB2BL, IF_REAL, "Length dependence of mu2b"), IOP( "wmu2b", BSIM2_MOD_MOB2BW, IF_REAL, "Width dependence of mu2b"), IOP( "mu2g", BSIM2_MOD_MOB2G0, IF_REAL, "VGS dependence of mu2"), IOP( "lmu2g", BSIM2_MOD_MOB2GL, IF_REAL, "Length dependence of mu2g"), IOP( "wmu2g", BSIM2_MOD_MOB2GW, IF_REAL, "Width dependence of mu2g"), IOP( "mu30", BSIM2_MOD_MOB300, IF_REAL, "VDS dependence of mu in linear term"), IOP( "lmu30", BSIM2_MOD_MOB30L, IF_REAL, "Length dependence of mu30"), IOP( "wmu30", BSIM2_MOD_MOB30W, IF_REAL, "Width dependence of mu30"), IOP( "mu3b", BSIM2_MOD_MOB3B0, IF_REAL, "VBS dependence of mu3"), IOP( "lmu3b", BSIM2_MOD_MOB3BL, IF_REAL, "Length dependence of mu3b"), IOP( "wmu3b", BSIM2_MOD_MOB3BW, IF_REAL, "Width dependence of mu3b"), IOP( "mu3g", BSIM2_MOD_MOB3G0, IF_REAL, "VGS dependence of mu3"), IOP( "lmu3g", BSIM2_MOD_MOB3GL, IF_REAL, "Length dependence of mu3g"), IOP( "wmu3g", BSIM2_MOD_MOB3GW, IF_REAL, "Width dependence of mu3g"), IOP( "mu40", BSIM2_MOD_MOB400, IF_REAL, "VDS dependence of mu in linear term"), IOP( "lmu40", BSIM2_MOD_MOB40L, IF_REAL, "Length dependence of mu40"), IOP( "wmu40", BSIM2_MOD_MOB40W, IF_REAL, "Width dependence of mu40"), IOP( "mu4b", BSIM2_MOD_MOB4B0, IF_REAL, "VBS dependence of mu4"), IOP( "lmu4b", BSIM2_MOD_MOB4BL, IF_REAL, "Length dependence of mu4b"), IOP( "wmu4b", BSIM2_MOD_MOB4BW, IF_REAL, "Width dependence of mu4b"), IOP( "mu4g", BSIM2_MOD_MOB4G0, IF_REAL, "VGS dependence of mu4"), IOP( "lmu4g", BSIM2_MOD_MOB4GL, IF_REAL, "Length dependence of mu4g"), IOP( "wmu4g", BSIM2_MOD_MOB4GW, IF_REAL, "Width dependence of mu4g"), IOP( "ua0", BSIM2_MOD_UA00, IF_REAL, "Linear VGS dependence of mobility"), IOP( "lua0", BSIM2_MOD_UA0L, IF_REAL, "Length dependence of ua0"), IOP( "wua0", BSIM2_MOD_UA0W, IF_REAL, "Width dependence of ua0"), IOP( "uab", BSIM2_MOD_UAB0, IF_REAL, "VBS dependence of ua"), IOP( "luab", BSIM2_MOD_UABL, IF_REAL, "Length dependence of uab"), IOP( "wuab", BSIM2_MOD_UABW, IF_REAL, "Width dependence of uab"), IOP( "ub0", BSIM2_MOD_UB00, IF_REAL, "Quadratic VGS dependence of mobility"), IOP( "lub0", BSIM2_MOD_UB0L, IF_REAL, "Length dependence of ub0"), IOP( "wub0", BSIM2_MOD_UB0W, IF_REAL, "Width dependence of ub0"), IOP( "ubb", BSIM2_MOD_UBB0, IF_REAL, "VBS dependence of ub"), IOP( "lubb", BSIM2_MOD_UBBL, IF_REAL, "Length dependence of ubb"), IOP( "wubb", BSIM2_MOD_UBBW, IF_REAL, "Width dependence of ubb"), IOP( "u10", BSIM2_MOD_U100, IF_REAL, "VDS depence of mobility"), IOP( "lu10", BSIM2_MOD_U10L, IF_REAL, "Length dependence of u10"), IOP( "wu10", BSIM2_MOD_U10W, IF_REAL, "Width dependence of u10"), IOP( "u1b", BSIM2_MOD_U1B0, IF_REAL, "VBS depence of u1"), IOP( "lu1b", BSIM2_MOD_U1BL, IF_REAL, "Length depence of u1b"), IOP( "wu1b", BSIM2_MOD_U1BW, IF_REAL, "Width depence of u1b"), IOP( "u1d", BSIM2_MOD_U1D0, IF_REAL, "VDS depence of u1"), IOP( "lu1d", BSIM2_MOD_U1DL, IF_REAL, "Length depence of u1d"), IOP( "wu1d", BSIM2_MOD_U1DW, IF_REAL, "Width depence of u1d"), IOP( "n0", BSIM2_MOD_N00, IF_REAL, "Subthreshold slope at VDS=0 VBS=0"), IOP( "ln0", BSIM2_MOD_N0L, IF_REAL, "Length dependence of n0"), IOP( "wn0", BSIM2_MOD_N0W, IF_REAL, "Width dependence of n0"), IOP( "nb", BSIM2_MOD_NB0, IF_REAL, "VBS dependence of n"), IOP( "lnb", BSIM2_MOD_NBL, IF_REAL, "Length dependence of nb"), IOP( "wnb", BSIM2_MOD_NBW, IF_REAL, "Width dependence of nb"), IOP( "nd", BSIM2_MOD_ND0, IF_REAL, "VDS dependence of n"), IOP( "lnd", BSIM2_MOD_NDL, IF_REAL, "Length dependence of nd"), IOP( "wnd", BSIM2_MOD_NDW, IF_REAL, "Width dependence of nd"), IOP( "vof0", BSIM2_MOD_VOF00, IF_REAL, "Threshold voltage offset AT VDS=0 VBS=0"), IOP( "lvof0", BSIM2_MOD_VOF0L, IF_REAL, "Length dependence of vof0"), IOP( "wvof0", BSIM2_MOD_VOF0W, IF_REAL, "Width dependence of vof0"), IOP( "vofb", BSIM2_MOD_VOFB0, IF_REAL, "VBS dependence of vof"), IOP( "lvofb", BSIM2_MOD_VOFBL, IF_REAL, "Length dependence of vofb"), IOP( "wvofb", BSIM2_MOD_VOFBW, IF_REAL, "Width dependence of vofb"), IOP( "vofd", BSIM2_MOD_VOFD0, IF_REAL, "VDS dependence of vof"), IOP( "lvofd", BSIM2_MOD_VOFDL, IF_REAL, "Length dependence of vofd"), IOP( "wvofd", BSIM2_MOD_VOFDW, IF_REAL, "Width dependence of vofd"), IOP( "ai0", BSIM2_MOD_AI00, IF_REAL, "Pre-factor of hot-electron effect."), IOP( "lai0", BSIM2_MOD_AI0L, IF_REAL, "Length dependence of ai0"), IOP( "wai0", BSIM2_MOD_AI0W, IF_REAL, "Width dependence of ai0"), IOP( "aib", BSIM2_MOD_AIB0, IF_REAL, "VBS dependence of ai"), IOP( "laib", BSIM2_MOD_AIBL, IF_REAL, "Length dependence of aib"), IOP( "waib", BSIM2_MOD_AIBW, IF_REAL, "Width dependence of aib"), IOP( "bi0", BSIM2_MOD_BI00, IF_REAL, "Exponential factor of hot-electron effect."), IOP( "lbi0", BSIM2_MOD_BI0L, IF_REAL, "Length dependence of bi0"), IOP( "wbi0", BSIM2_MOD_BI0W, IF_REAL, "Width dependence of bi0"), IOP( "bib", BSIM2_MOD_BIB0, IF_REAL, "VBS dependence of bi"), IOP( "lbib", BSIM2_MOD_BIBL, IF_REAL, "Length dependence of bib"), IOP( "wbib", BSIM2_MOD_BIBW, IF_REAL, "Width dependence of bib"), IOP( "vghigh", BSIM2_MOD_VGHIGH0, IF_REAL, "Upper bound of the cubic spline function."), IOP( "lvghigh", BSIM2_MOD_VGHIGHL, IF_REAL, "Length dependence of vghigh"), IOP( "wvghigh", BSIM2_MOD_VGHIGHW, IF_REAL, "Width dependence of vghigh"), IOP( "vglow", BSIM2_MOD_VGLOW0, IF_REAL, "Lower bound of the cubic spline function."), IOP( "lvglow", BSIM2_MOD_VGLOWL, IF_REAL, "Length dependence of vglow"), IOP( "wvglow", BSIM2_MOD_VGLOWW, IF_REAL, "Width dependence of vglow"), IOP( "tox", BSIM2_MOD_TOX, IF_REAL, "Gate oxide thickness in um"), IOP( "temp", BSIM2_MOD_TEMP, IF_REAL, "Temperature in degree Celcius"), IOP( "vdd", BSIM2_MOD_VDD, IF_REAL, "Maximum Vds "), IOP( "vgg", BSIM2_MOD_VGG, IF_REAL, "Maximum Vgs "), IOP( "vbb", BSIM2_MOD_VBB, IF_REAL, "Maximum Vbs "), IOPA( "cgso", BSIM2_MOD_CGSO, IF_REAL, "Gate source overlap capacitance per unit channel width(m)"), IOPA( "cgdo", BSIM2_MOD_CGDO, IF_REAL, "Gate drain overlap capacitance per unit channel width(m)"), IOPA( "cgbo", BSIM2_MOD_CGBO, IF_REAL, "Gate bulk overlap capacitance per unit channel length(m)"), IOP( "xpart", BSIM2_MOD_XPART, IF_REAL, "Flag for channel charge partitioning"), IOP( "rsh", BSIM2_MOD_RSH, IF_REAL, "Source drain diffusion sheet resistance in ohm per square"), IOP( "js", BSIM2_MOD_JS, IF_REAL, "Source drain junction saturation current per unit area"), IOP( "pb", BSIM2_MOD_PB, IF_REAL, "Source drain junction built in potential"), IOPA( "mj", BSIM2_MOD_MJ, IF_REAL, "Source drain bottom junction capacitance grading coefficient"), IOPA( "pbsw", BSIM2_MOD_PBSW, IF_REAL, "Source drain side junction capacitance built in potential"), IOPA( "mjsw", BSIM2_MOD_MJSW, IF_REAL, "Source drain side junction capacitance grading coefficient"), IOPA( "cj", BSIM2_MOD_CJ, IF_REAL, "Source drain bottom junction capacitance per unit area"), IOPA( "cjsw", BSIM2_MOD_CJSW, IF_REAL, "Source drain side junction capacitance per unit area"), IOP( "wdf", BSIM2_MOD_DEFWIDTH, IF_REAL, "Default width of source drain diffusion in um"), IOP( "dell", BSIM2_MOD_DELLENGTH, IF_REAL, "Length reduction of source drain diffusion"), IOP("kf", BSIM2_MOD_KF, IF_REAL ,"Flicker noise coefficient"), IOP("af", BSIM2_MOD_AF, IF_REAL ,"Flicker noise exponent"), IP( "nmos", BSIM2_MOD_NMOS, IF_FLAG, "Flag to indicate NMOS"), IP( "pmos", BSIM2_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"), }; char *B2names[] = { "Drain", "Gate", "Source", "Bulk" }; int B2nSize = NUMELEMS(B2names); int B2pTSize = NUMELEMS(B2pTable); int B2mPTSize = NUMELEMS(B2mPTable); int B2iSize = sizeof(B2instance); int B2mSize = sizeof(B2model); tmpk8ny_4pz/src/spicelib/devices/bsim2/bsim2ext.h0000644000175000017500000000223513546075722022107 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Min-Chie Jeng, Hong June Park, Thomas L. Quarles **********/ extern int B2acLoad(GENmodel *,CKTcircuit*); extern int B2ask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*); extern int B2convTest(GENmodel *,CKTcircuit*); extern int B2getic(GENmodel*,CKTcircuit*); extern int B2load(GENmodel*,CKTcircuit*); extern int B2mAsk(CKTcircuit*,GENmodel *,int, IFvalue*); extern int B2mParam(int,IFvalue*,GENmodel*); extern void B2mosCap(CKTcircuit*, double, double, double, double*, double, double, double, double, double, double, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*); extern int B2noise (int, int, GENmodel *, CKTcircuit *, Ndata *, double *); extern int B2param(int,IFvalue*,GENinstance*,IFvalue*); extern int B2pzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int B2setup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int B2unsetup(GENmodel*,CKTcircuit*); extern int B2temp(GENmodel*,CKTcircuit*); extern int B2trunc(GENmodel*,CKTcircuit*,double*); tmpk8ny_4pz/src/spicelib/devices/vbic/0000755000175000017500000000000013546075722020106 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/vbic/vbicparam.c0000644000175000017500000000401513546075722022216 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Model Author: 1995 Colin McAndrew Motorola Spice3 Implementation: 2003 Dietmar Warning DAnalyse GmbH **********/ /* * This routine sets instance parameters for * VBICs in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "vbicdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int VBICparam(int param, IFvalue *value, GENinstance *instPtr, IFvalue *select) { VBICinstance *here = (VBICinstance*)instPtr; NG_IGNORE(select); switch(param) { case VBIC_AREA: here->VBICarea = value->rValue; here->VBICareaGiven = TRUE; break; case VBIC_OFF: here->VBICoff = (value->iValue != 0); break; case VBIC_IC_VBE: here->VBICicVBE = value->rValue; here->VBICicVBEGiven = TRUE; break; case VBIC_IC_VCE: here->VBICicVCE = value->rValue; here->VBICicVCEGiven = TRUE; break; case VBIC_TEMP: here->VBICtemp = value->rValue+CONSTCtoK; here->VBICtempGiven = TRUE; break; case VBIC_DTEMP: here->VBICdtemp = value->rValue; here->VBICdtempGiven = TRUE; break; case VBIC_M: here->VBICm = value->rValue; here->VBICmGiven = TRUE; break; case VBIC_IC : switch(value->v.numValue) { case 2: here->VBICicVCE = *(value->v.vec.rVec+1); here->VBICicVCEGiven = TRUE; case 1: here->VBICicVBE = *(value->v.vec.rVec); here->VBICicVBEGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vbic/vbicmask.c0000644000175000017500000003046313546075722022057 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Mathew Lew and Thomas L. Quarles Model Author: 1995 Colin McAndrew Motorola Spice3 Implementation: 2003 Dietmar Warning DAnalyse GmbH **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "vbicdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int VBICmAsk(CKTcircuit *ckt, GENmodel *instPtr, int which, IFvalue *value) { VBICmodel *here = (VBICmodel*)instPtr; NG_IGNORE(ckt); switch(which) { case VBIC_MOD_TNOM: value->rValue = here->VBICtnom; return(OK); case VBIC_MOD_RCX: value->rValue = here->VBICextCollResist; return(OK); case VBIC_MOD_RCI: value->rValue = here->VBICintCollResist; return(OK); case VBIC_MOD_VO: value->rValue = here->VBICepiSatVoltage; return(OK); case VBIC_MOD_GAMM: value->rValue = here->VBICepiDoping; return(OK); case VBIC_MOD_HRCF: value->rValue = here->VBIChighCurFac; return(OK); case VBIC_MOD_RBX: value->rValue = here->VBICextBaseResist; return(OK); case VBIC_MOD_RBI: value->rValue = here->VBICintBaseResist; return(OK); case VBIC_MOD_RE: value->rValue = here->VBICemitterResist; return(OK); case VBIC_MOD_RS: value->rValue = here->VBICsubstrateResist; return(OK); case VBIC_MOD_RBP: value->rValue = here->VBICparBaseResist; return(OK); case VBIC_MOD_IS: value->rValue = here->VBICsatCur; return(OK); case VBIC_MOD_NF: value->rValue = here->VBICemissionCoeffF; return(OK); case VBIC_MOD_NR: value->rValue = here->VBICemissionCoeffR; return(OK); case VBIC_MOD_FC: value->rValue = here->VBICdeplCapLimitF; return(OK); case VBIC_MOD_CBEO: value->rValue = here->VBICextOverlapCapBE; return(OK); case VBIC_MOD_CJE: value->rValue = here->VBICdepletionCapBE; return(OK); case VBIC_MOD_PE: value->rValue = here->VBICpotentialBE; return(OK); case VBIC_MOD_ME: value->rValue = here->VBICjunctionExpBE; return(OK); case VBIC_MOD_AJE: value->rValue = here->VBICsmoothCapBE; return(OK); case VBIC_MOD_CBCO: value->rValue = here->VBICextOverlapCapBC; return(OK); case VBIC_MOD_CJC: value->rValue = here->VBICdepletionCapBC; return(OK); case VBIC_MOD_QCO: value->rValue = here->VBICepiCharge; return(OK); case VBIC_MOD_CJEP: value->rValue = here->VBICextCapBC; return(OK); case VBIC_MOD_PC: value->rValue = here->VBICpotentialBC; return(OK); case VBIC_MOD_MC: value->rValue = here->VBICjunctionExpBC; return(OK); case VBIC_MOD_AJC: value->rValue = here->VBICsmoothCapBC; return(OK); case VBIC_MOD_CJCP: value->rValue = here->VBICextCapSC; return(OK); case VBIC_MOD_PS: value->rValue = here->VBICpotentialSC; return(OK); case VBIC_MOD_MS: value->rValue = here->VBICjunctionExpSC; return(OK); case VBIC_MOD_AJS: value->rValue = here->VBICsmoothCapSC; return(OK); case VBIC_MOD_IBEI: value->rValue = here->VBICidealSatCurBE; return(OK); case VBIC_MOD_WBE: value->rValue = here->VBICportionIBEI; return(OK); case VBIC_MOD_NEI: value->rValue = here->VBICidealEmissCoeffBE; return(OK); case VBIC_MOD_IBEN: value->rValue = here->VBICnidealSatCurBE; return(OK); case VBIC_MOD_NEN: value->rValue = here->VBICnidealEmissCoeffBE; return(OK); case VBIC_MOD_IBCI: value->rValue = here->VBICidealSatCurBC; return(OK); case VBIC_MOD_NCI: value->rValue = here->VBICidealEmissCoeffBC; return(OK); case VBIC_MOD_IBCN: value->rValue = here->VBICnidealSatCurBC; return(OK); case VBIC_MOD_NCN: value->rValue = here->VBICnidealEmissCoeffBC; return(OK); case VBIC_MOD_AVC1: value->rValue = here->VBICavalanchePar1BC; return(OK); case VBIC_MOD_AVC2: value->rValue = here->VBICavalanchePar2BC; return(OK); case VBIC_MOD_ISP: value->rValue = here->VBICparasitSatCur; return(OK); case VBIC_MOD_WSP: value->rValue = here->VBICportionICCP; return(OK); case VBIC_MOD_NFP: value->rValue = here->VBICparasitFwdEmissCoeff; return(OK); case VBIC_MOD_IBEIP: value->rValue = here->VBICidealParasitSatCurBE; return(OK); case VBIC_MOD_IBENP: value->rValue = here->VBICnidealParasitSatCurBE; return(OK); case VBIC_MOD_IBCIP: value->rValue = here->VBICidealParasitSatCurBC; return(OK); case VBIC_MOD_NCIP: value->rValue = here->VBICidealParasitEmissCoeffBC; return(OK); case VBIC_MOD_IBCNP: value->rValue = here->VBICnidealParasitSatCurBC; return(OK); case VBIC_MOD_NCNP: value->rValue = here->VBICnidealParasitEmissCoeffBC; return(OK); case VBIC_MOD_VEF: value->rValue = here->VBICearlyVoltF; return(OK); case VBIC_MOD_VER: value->rValue = here->VBICearlyVoltR; return(OK); case VBIC_MOD_IKF: value->rValue = here->VBICrollOffF; return(OK); case VBIC_MOD_IKR: value->rValue = here->VBICrollOffR; return(OK); case VBIC_MOD_IKP: value->rValue = here->VBICparRollOff; return(OK); case VBIC_MOD_TF: value->rValue = here->VBICtransitTimeF; return(OK); case VBIC_MOD_QTF: value->rValue = here->VBICvarTransitTimeF; return(OK); case VBIC_MOD_XTF: value->rValue = here->VBICtransitTimeBiasCoeffF; return(OK); case VBIC_MOD_VTF: value->rValue = here->VBICtransitTimeFVBC; return(OK); case VBIC_MOD_ITF: value->rValue = here->VBICtransitTimeHighCurrentF; return(OK); case VBIC_MOD_TR: value->rValue = here->VBICtransitTimeR; return(OK); case VBIC_MOD_TD: value->rValue = here->VBICdelayTimeF; return(OK); case VBIC_MOD_KFN: value->rValue = here->VBICfNcoef; return(OK); case VBIC_MOD_AFN: value->rValue = here->VBICfNexpA; return(OK); case VBIC_MOD_BFN: value->rValue = here->VBICfNexpB; return(OK); case VBIC_MOD_XRE: value->rValue = here->VBICtempExpRE; return(OK); case VBIC_MOD_XRB: value->rValue = here->VBICtempExpRB; return(OK); case VBIC_MOD_XRBI: value->rValue = here->VBICtempExpRBI; return(OK); case VBIC_MOD_XRC: value->rValue = here->VBICtempExpRC; return(OK); case VBIC_MOD_XRCI: value->rValue = here->VBICtempExpRCI; return(OK); case VBIC_MOD_XRS: value->rValue = here->VBICtempExpRS; return(OK); case VBIC_MOD_XVO: value->rValue = here->VBICtempExpVO; return(OK); case VBIC_MOD_EA: value->rValue = here->VBICactivEnergyEA; return(OK); case VBIC_MOD_EAIE: value->rValue = here->VBICactivEnergyEAIE; return(OK); case VBIC_MOD_EAIC: value->rValue = here->VBICactivEnergyEAIC; return(OK); case VBIC_MOD_EAIS: value->rValue = here->VBICactivEnergyEAIS; return(OK); case VBIC_MOD_EANE: value->rValue = here->VBICactivEnergyEANE; return(OK); case VBIC_MOD_EANC: value->rValue = here->VBICactivEnergyEANC; return(OK); case VBIC_MOD_EANS: value->rValue = here->VBICactivEnergyEANS; return(OK); case VBIC_MOD_XIS: value->rValue = here->VBICtempExpIS; return(OK); case VBIC_MOD_XII: value->rValue = here->VBICtempExpII; return(OK); case VBIC_MOD_XIN: value->rValue = here->VBICtempExpIN; return(OK); case VBIC_MOD_TNF: value->rValue = here->VBICtempExpNF; return(OK); case VBIC_MOD_TAVC: value->rValue = here->VBICtempExpAVC; return(OK); case VBIC_MOD_RTH: value->rValue = here->VBICthermalResist; return(OK); case VBIC_MOD_CTH: value->rValue = here->VBICthermalCapacitance; return(OK); case VBIC_MOD_VRT: value->rValue = here->VBICpunchThroughVoltageBC; return(OK); case VBIC_MOD_ART: value->rValue = here->VBICdeplCapCoeff1; return(OK); case VBIC_MOD_CCSO: value->rValue = here->VBICfixedCapacitanceCS; return(OK); case VBIC_MOD_QBM: value->rValue = here->VBICsgpQBselector; return(OK); case VBIC_MOD_NKF: value->rValue = here->VBIChighCurrentBetaRolloff; return(OK); case VBIC_MOD_XIKF: value->rValue = here->VBICtempExpIKF; return(OK); case VBIC_MOD_XRCX: value->rValue = here->VBICtempExpRCX; return(OK); case VBIC_MOD_XRBX: value->rValue = here->VBICtempExpRBX; return(OK); case VBIC_MOD_XRBP: value->rValue = here->VBICtempExpRBP; return(OK); case VBIC_MOD_ISRR: value->rValue = here->VBICsepISRR; return(OK); case VBIC_MOD_XISR: value->rValue = here->VBICtempExpXISR; return(OK); case VBIC_MOD_DEAR: value->rValue = here->VBICdear; return(OK); case VBIC_MOD_EAP: value->rValue = here->VBICeap; return(OK); case VBIC_MOD_VBBE: value->rValue = here->VBICvbbe; return(OK); case VBIC_MOD_NBBE: value->rValue = here->VBICnbbe; return(OK); case VBIC_MOD_IBBE: value->rValue = here->VBICibbe; return(OK); case VBIC_MOD_TVBBE1: value->rValue = here->VBICtvbbe1; return(OK); case VBIC_MOD_TVBBE2: value->rValue = here->VBICtvbbe2; return(OK); case VBIC_MOD_TNBBE: value->rValue = here->VBICtnbbe; return(OK); case VBIC_MOD_EBBE: value->rValue = here->VBICebbe; return(OK); case VBIC_MOD_DTEMP: value->rValue = here->VBIClocTempDiff; return(OK); case VBIC_MOD_VERS: value->rValue = here->VBICrevVersion; return(OK); case VBIC_MOD_VREF: value->rValue = here->VBICrefVersion; return(OK); case VBIC_MOD_VBE_MAX: value->rValue = here->VBICvbeMax; return(OK); case VBIC_MOD_VBC_MAX: value->rValue = here->VBICvbcMax; return(OK); case VBIC_MOD_VCE_MAX: value->rValue = here->VBICvceMax; return(OK); case VBIC_MOD_TYPE: if (here->VBICtype == NPN) value->sValue = "npn"; else value->sValue = "pnp"; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/vbic/vbicinit.h0000644000175000017500000000037013546075722022066 0ustar carstencarsten#ifndef _VBICINIT_H #define _VBICINIT_H extern IFparm VBICpTable[ ]; extern IFparm VBICmPTable[ ]; extern char *VBICnames[ ]; extern int VBICpTSize; extern int VBICmPTSize; extern int VBICnSize; extern int VBICiSize; extern int VBICmSize; #endif tmpk8ny_4pz/src/spicelib/devices/vbic/vbicgetic.c0000644000175000017500000000243613546075722022216 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Model Author: 1995 Colin McAndrew Motorola Spice3 Implementation: 2003 Dietmar Warning DAnalyse GmbH **********/ /* * This routine gets the device initial conditions for the VBICs * from the RHS vector */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vbicdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VBICgetic(GENmodel *inModel, CKTcircuit *ckt) { VBICmodel *model = (VBICmodel*)inModel; VBICinstance *here; /* * grab initial conditions out of rhs array. User specified, so use * external nodes to get values */ for( ; model ; model = VBICnextModel(model)) { for(here = VBICinstances(model); here ; here = VBICnextInstance(here)) { if(!here->VBICicVBEGiven) { here->VBICicVBE = *(ckt->CKTrhs + here->VBICbaseNode) - *(ckt->CKTrhs + here->VBICemitNode); } if(!here->VBICicVCEGiven) { here->VBICicVCE = *(ckt->CKTrhs + here->VBICcollNode) - *(ckt->CKTrhs + here->VBICemitNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vbic/Makefile.am0000644000175000017500000000077713546075722022155 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libvbic.la libvbic_la_SOURCES = \ vbic.c \ vbicacld.c \ vbicask.c \ vbicconv.c \ vbicdefs.h \ vbicext.h \ vbicgetic.c \ vbicinit.c \ vbicinit.h \ vbicitf.h \ vbicload.c \ vbicmask.c \ vbicmpar.c \ vbicnoise.c \ vbicparam.c \ vbicpzld.c \ vbicsetup.c \ vbicsoachk.c \ vbictemp.c \ vbictrunc.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/vbic/vbicsoachk.c0000644000175000017500000000423213546075722022367 0ustar carstencarsten/********** Copyright 2013 Dietmar Warning. All rights reserved. Author: 2013 Dietmar Warning **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vbicdefs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/cpdefs.h" int VBICsoaCheck(CKTcircuit *ckt, GENmodel *inModel) { VBICmodel *model = (VBICmodel *) inModel; VBICinstance *here; double vbe, vbc, vce; /* actual bjt voltages */ int maxwarns; static int warns_vbe = 0, warns_vbc = 0, warns_vce = 0; if (!ckt) { warns_vbe = 0; warns_vbc = 0; warns_vce = 0; return OK; } maxwarns = ckt->CKTsoaMaxWarns; for (; model; model = VBICnextModel(model)) { for (here = VBICinstances(model); here; here=VBICnextInstance(here)) { vbe = fabs(ckt->CKTrhsOld [here->VBICbaseNode] - ckt->CKTrhsOld [here->VBICemitNode]); vbc = fabs(ckt->CKTrhsOld [here->VBICbaseNode] - ckt->CKTrhsOld [here->VBICcollNode]); vce = fabs(ckt->CKTrhsOld [here->VBICcollNode] - ckt->CKTrhsOld [here->VBICemitNode]); if (vbe > model->VBICvbeMax) if (warns_vbe < maxwarns) { soa_printf(ckt, (GENinstance*) here, "|Vbe|=%g has exceeded Vbe_max=%g\n", vbe, model->VBICvbeMax); warns_vbe++; } if (vbc > model->VBICvbcMax) if (warns_vbc < maxwarns) { soa_printf(ckt, (GENinstance*) here, "|Vbc|=%g has exceeded Vbc_max=%g\n", vbc, model->VBICvbcMax); warns_vbc++; } if (vce > model->VBICvceMax) if (warns_vce < maxwarns) { soa_printf(ckt, (GENinstance*) here, "|Vce|=%g has exceeded Vce_max=%g\n", vce, model->VBICvceMax); warns_vce++; } } } return OK; } tmpk8ny_4pz/src/spicelib/devices/vbic/vbicconv.c0000644000175000017500000002523013546075722022065 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Model Author: 1995 Colin McAndrew Motorola Spice3 Implementation: 2003 Dietmar Warning DAnalyse GmbH **********/ /* * This routine performs the device convergence test for * VBICs in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vbicdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VBICconvTest(GENmodel *inModel, CKTcircuit *ckt) { VBICinstance *here; VBICmodel *model = (VBICmodel *) inModel; double tol; double delvbei; double delvbex; double delvbci; double delvbcx; double delvbep; double delvrci; double delvrbi; double delvrbp; double delvbcp; double ibehat; double ibexhat; double itzfhat; double itzrhat; double ibchat; double ibephat; double ircihat; double irbihat; double irbphat; double ibcphat; double iccphat; double Vbei, Vbex, Vbci, Vbcx, Vbep, Vrci, Vrbi, Vrbp, Vbcp; double Ibe, Ibex, Itzf, Itzr, Ibc, Ibep, Irci, Irbi, Irbp, Ibcp, Iccp; for( ; model != NULL; model = VBICnextModel(model)) { for(here=VBICinstances(model);here!=NULL;here = VBICnextInstance(here)) { Vbei=model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseBINode)- *(ckt->CKTrhsOld+here->VBICemitEINode)); Vbex=model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseBXNode)- *(ckt->CKTrhsOld+here->VBICemitEINode)); Vbci =model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseBINode)- *(ckt->CKTrhsOld+here->VBICcollCINode)); Vbcx =model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseBINode)- *(ckt->CKTrhsOld+here->VBICcollCXNode)); Vbep =model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseBXNode)- *(ckt->CKTrhsOld+here->VBICbaseBPNode)); Vrci =model->VBICtype*( *(ckt->CKTrhsOld+here->VBICcollCXNode)- *(ckt->CKTrhsOld+here->VBICcollCINode)); Vrbi =model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseBXNode)- *(ckt->CKTrhsOld+here->VBICbaseBINode)); Vrbp =model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseBPNode)- *(ckt->CKTrhsOld+here->VBICcollCXNode)); Vbcp =model->VBICtype*( *(ckt->CKTrhsOld+here->VBICsubsSINode)- *(ckt->CKTrhsOld+here->VBICbaseBPNode)); delvbei = Vbei - *(ckt->CKTstate0 + here->VBICvbei); delvbex = Vbex - *(ckt->CKTstate0 + here->VBICvbex); delvbci = Vbci - *(ckt->CKTstate0 + here->VBICvbci); delvbcx = Vbcx - *(ckt->CKTstate0 + here->VBICvbcx); delvbep = Vbep - *(ckt->CKTstate0 + here->VBICvbep); delvrci = Vrci - *(ckt->CKTstate0 + here->VBICvrci); delvrbi = Vrbi - *(ckt->CKTstate0 + here->VBICvrbi); delvrbp = Vrbp - *(ckt->CKTstate0 + here->VBICvrbp); delvbcp = Vbcp - *(ckt->CKTstate0 + here->VBICvbcp); ibehat = *(ckt->CKTstate0 + here->VBICibe) + *(ckt->CKTstate0 + here->VBICibe_Vbei)*delvbei; ibexhat = *(ckt->CKTstate0 + here->VBICibex) + *(ckt->CKTstate0 + here->VBICibex_Vbex)*delvbex; itzfhat = *(ckt->CKTstate0 + here->VBICitzf) + *(ckt->CKTstate0 + here->VBICitzf_Vbei)*delvbei + *(ckt->CKTstate0 + here->VBICitzf_Vbci)*delvbci; itzrhat = *(ckt->CKTstate0 + here->VBICitzr) + *(ckt->CKTstate0 + here->VBICitzr_Vbei)*delvbei + *(ckt->CKTstate0 + here->VBICitzr_Vbci)*delvbci; ibchat = *(ckt->CKTstate0 + here->VBICibc) + *(ckt->CKTstate0 + here->VBICibc_Vbei)*delvbei + *(ckt->CKTstate0 + here->VBICibc_Vbci)*delvbci; ibephat = *(ckt->CKTstate0 + here->VBICibep) + *(ckt->CKTstate0 + here->VBICibep_Vbep)*delvbep; ircihat = *(ckt->CKTstate0 + here->VBICirci) + *(ckt->CKTstate0 + here->VBICirci_Vrci)*delvrci + *(ckt->CKTstate0 + here->VBICirci_Vbcx)*delvbcx + *(ckt->CKTstate0 + here->VBICirci_Vbci)*delvbci; irbihat = *(ckt->CKTstate0 + here->VBICirbi) + *(ckt->CKTstate0 + here->VBICirbi_Vrbi)*delvrbi + *(ckt->CKTstate0 + here->VBICirbi_Vbei)*delvbei + *(ckt->CKTstate0 + here->VBICirbi_Vbci)*delvbci; irbphat = *(ckt->CKTstate0 + here->VBICirbp) + *(ckt->CKTstate0 + here->VBICirbp_Vrbp)*delvrbp + *(ckt->CKTstate0 + here->VBICirbp_Vbep)*delvbep + *(ckt->CKTstate0 + here->VBICirbp_Vbci)*delvbci; ibcphat = *(ckt->CKTstate0 + here->VBICibcp) + *(ckt->CKTstate0 + here->VBICibcp_Vbcp)*delvbcp; iccphat = *(ckt->CKTstate0 + here->VBICiccp) + *(ckt->CKTstate0 + here->VBICiccp_Vbep)*delvbep + *(ckt->CKTstate0 + here->VBICiccp_Vbci)*delvbci + *(ckt->CKTstate0 + here->VBICiccp_Vbcp)*delvbcp; Ibe = *(ckt->CKTstate0 + here->VBICibe); Ibex = *(ckt->CKTstate0 + here->VBICibex); Itzf = *(ckt->CKTstate0 + here->VBICitzf); Itzr = *(ckt->CKTstate0 + here->VBICitzr); Ibc = *(ckt->CKTstate0 + here->VBICibc); Ibep = *(ckt->CKTstate0 + here->VBICibep); Irci = *(ckt->CKTstate0 + here->VBICirci); Irbi = *(ckt->CKTstate0 + here->VBICirbi); Irbp = *(ckt->CKTstate0 + here->VBICirbp); Ibcp = *(ckt->CKTstate0 + here->VBICibcp); Iccp = *(ckt->CKTstate0 + here->VBICiccp); /* * check convergence */ tol=ckt->CKTreltol*MAX(fabs(ibehat),fabs(Ibe))+ckt->CKTabstol; if (fabs(ibehat-Ibe) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { tol=ckt->CKTreltol*MAX(fabs(ibexhat),fabs(Ibex))+ckt->CKTabstol; if (fabs(ibexhat-Ibex) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { tol=ckt->CKTreltol*MAX(fabs(itzfhat),fabs(Itzf))+ckt->CKTabstol; if (fabs(itzfhat-Itzf) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { tol=ckt->CKTreltol*MAX(fabs(itzrhat),fabs(Itzr))+ckt->CKTabstol; if (fabs(itzrhat-Itzr) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { tol=ckt->CKTreltol*MAX(fabs(ibchat),fabs(Ibc))+ckt->CKTabstol; if (fabs(ibchat-Ibc) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { tol=ckt->CKTreltol*MAX(fabs(ibephat),fabs(Ibep))+ckt->CKTabstol; if (fabs(ibephat-Ibep) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { tol=ckt->CKTreltol*MAX(fabs(ircihat),fabs(Irci))+ckt->CKTabstol; if (fabs(ircihat-Irci) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { tol=ckt->CKTreltol*MAX(fabs(irbihat),fabs(Irbi))+ckt->CKTabstol; if (fabs(irbihat-Irbi) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { tol=ckt->CKTreltol*MAX(fabs(irbphat),fabs(Irbp))+ckt->CKTabstol; if (fabs(irbphat-Irbp) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { tol=ckt->CKTreltol*MAX(fabs(ibcphat),fabs(Ibcp))+ckt->CKTabstol; if (fabs(ibcphat-Ibcp) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { tol=ckt->CKTreltol*MAX(fabs(iccphat),fabs(Iccp))+ckt->CKTabstol; if (fabs(iccphat-Iccp) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } } } } } } } } } } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vbic/vbictemp.c0000644000175000017500000003636013546075722022073 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Model Author: 1995 Colin McAndrew Motorola Spice3 Implementation: 2003 Dietmar Warning DAnalyse GmbH **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "vbicdefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/ifsim.h" #include "ngspice/suffix.h" /* ARGSUSED */ int iret, vbic_4T_et_cf_t(double *, double *, double *); int VBICtemp(GENmodel *inModel, CKTcircuit *ckt) /* Pre-compute many useful parameters */ { VBICmodel *model = (VBICmodel *)inModel; VBICinstance *here; double p[108], pnom[108], TAMB; double vt; /* loop through all the bipolar models */ for( ; model != NULL; model = VBICnextModel(model)) { /* loop through all the instances of the model */ for (here = VBICinstances(model); here != NULL ; here=VBICnextInstance(here)) { if(!here->VBICtempGiven) here->VBICtemp = ckt->CKTtemp; if(here->VBICdtempGiven) here->VBICtemp = here->VBICtemp + here->VBICdtemp; TAMB = here->VBICtemp - CONSTCtoK; pnom[0] = model->VBICtnom; pnom[1] = model->VBICextCollResist; pnom[2] = model->VBICintCollResist; pnom[3] = model->VBICepiSatVoltage; pnom[4] = model->VBICepiDoping; pnom[5] = model->VBIChighCurFac; pnom[6] = model->VBICextBaseResist; pnom[7] = model->VBICintBaseResist; pnom[8] = model->VBICemitterResist; pnom[9] = model->VBICsubstrateResist; pnom[10] = model->VBICparBaseResist; pnom[11] = model->VBICsatCur; pnom[12] = model->VBICemissionCoeffF; pnom[13] = model->VBICemissionCoeffR; pnom[14] = model->VBICdeplCapLimitF; pnom[15] = model->VBICextOverlapCapBE; pnom[16] = model->VBICdepletionCapBE; pnom[17] = model->VBICpotentialBE; pnom[18] = model->VBICjunctionExpBE; pnom[19] = model->VBICsmoothCapBE; pnom[20] = model->VBICextOverlapCapBC; pnom[21] = model->VBICdepletionCapBC; pnom[22] = model->VBICepiCharge; pnom[23] = model->VBICextCapBC; pnom[24] = model->VBICpotentialBC; pnom[25] = model->VBICjunctionExpBC; pnom[26] = model->VBICsmoothCapBC; pnom[27] = model->VBICextCapSC; pnom[28] = model->VBICpotentialSC; pnom[29] = model->VBICjunctionExpSC; pnom[30] = model->VBICsmoothCapSC; pnom[31] = model->VBICidealSatCurBE; pnom[32] = model->VBICportionIBEI; pnom[33] = model->VBICidealEmissCoeffBE; pnom[34] = model->VBICnidealSatCurBE; pnom[35] = model->VBICnidealEmissCoeffBE; pnom[36] = model->VBICidealSatCurBC; pnom[37] = model->VBICidealEmissCoeffBC; pnom[38] = model->VBICnidealSatCurBC; pnom[39] = model->VBICnidealEmissCoeffBC; pnom[40] = model->VBICavalanchePar1BC; pnom[41] = model->VBICavalanchePar2BC; pnom[42] = model->VBICparasitSatCur; pnom[43] = model->VBICportionICCP; pnom[44] = model->VBICparasitFwdEmissCoeff; pnom[45] = model->VBICidealParasitSatCurBE; pnom[46] = model->VBICnidealParasitSatCurBE; pnom[47] = model->VBICidealParasitSatCurBC; pnom[48] = model->VBICidealParasitEmissCoeffBC; pnom[49] = model->VBICnidealParasitSatCurBC; pnom[50] = model->VBICnidealParasitEmissCoeffBC; pnom[51] = model->VBICearlyVoltF; pnom[52] = model->VBICearlyVoltR; pnom[53] = model->VBICrollOffF; pnom[54] = model->VBICrollOffR; pnom[55] = model->VBICparRollOff; pnom[56] = model->VBICtransitTimeF; pnom[57] = model->VBICvarTransitTimeF; pnom[58] = model->VBICtransitTimeBiasCoeffF; pnom[59] = model->VBICtransitTimeFVBC; pnom[60] = model->VBICtransitTimeHighCurrentF; pnom[61] = model->VBICtransitTimeR; pnom[62] = model->VBICdelayTimeF; pnom[63] = model->VBICfNcoef; pnom[64] = model->VBICfNexpA; pnom[65] = model->VBICfNexpB; pnom[66] = model->VBICtempExpRE; pnom[67] = model->VBICtempExpRBI; pnom[68] = model->VBICtempExpRCI; pnom[69] = model->VBICtempExpRS; pnom[70] = model->VBICtempExpVO; pnom[71] = model->VBICactivEnergyEA; pnom[72] = model->VBICactivEnergyEAIE; pnom[73] = model->VBICactivEnergyEAIC; pnom[74] = model->VBICactivEnergyEAIS; pnom[75] = model->VBICactivEnergyEANE; pnom[76] = model->VBICactivEnergyEANC; pnom[77] = model->VBICactivEnergyEANS; pnom[78] = model->VBICtempExpIS; pnom[79] = model->VBICtempExpII; pnom[80] = model->VBICtempExpIN; pnom[81] = model->VBICtempExpNF; pnom[82] = model->VBICtempExpAVC; pnom[83] = model->VBICthermalResist; pnom[84] = model->VBICthermalCapacitance; pnom[85] = model->VBICpunchThroughVoltageBC; pnom[86] = model->VBICdeplCapCoeff1; pnom[87] = model->VBICfixedCapacitanceCS; pnom[88] = model->VBICsgpQBselector; pnom[89] = model->VBIChighCurrentBetaRolloff; pnom[90] = model->VBICtempExpIKF; pnom[91] = model->VBICtempExpRCX; pnom[92] = model->VBICtempExpRBX; pnom[93] = model->VBICtempExpRBP; pnom[94] = model->VBICsepISRR; pnom[95] = model->VBICtempExpXISR; pnom[96] = model->VBICdear; pnom[97] = model->VBICeap; pnom[98] = model->VBICvbbe; pnom[99] = model->VBICnbbe; pnom[100] = model->VBICibbe; pnom[101] = model->VBICtvbbe1; pnom[102] = model->VBICtvbbe2; pnom[103] = model->VBICtnbbe; pnom[104] = model->VBICebbe; pnom[105] = model->VBIClocTempDiff; pnom[106] = model->VBICrevVersion; pnom[107] = model->VBICrefVersion; iret = vbic_4T_et_cf_t(p,pnom,&TAMB); here->VBICtextCollResist = p[1]; here->VBICtintCollResist = p[2]; here->VBICtepiSatVoltage = p[3]; here->VBICtepiDoping = p[4]; here->VBICtextBaseResist = p[6]; here->VBICtintBaseResist = p[7]; here->VBICtemitterResist = p[8]; here->VBICtsubstrateResist = p[9]; here->VBICtparBaseResist = p[10]; here->VBICtsatCur = p[11]; here->VBICtemissionCoeffF = p[12]; here->VBICtemissionCoeffR = p[13]; here->VBICtdepletionCapBE = p[16]; here->VBICtpotentialBE = p[17]; here->VBICtdepletionCapBC = p[21]; here->VBICtextCapBC = p[23]; here->VBICtpotentialBC = p[24]; here->VBICtextCapSC = p[27]; here->VBICtpotentialSC = p[28]; here->VBICtidealSatCurBE = p[31]; here->VBICtnidealSatCurBE = p[34]; here->VBICtidealSatCurBC = p[36]; here->VBICtnidealSatCurBC = p[38]; here->VBICtavalanchePar2BC = p[41]; here->VBICtparasitSatCur = p[42]; here->VBICtidealParasitSatCurBE = p[45]; here->VBICtnidealParasitSatCurBE = p[46]; here->VBICtidealParasitSatCurBC = p[47]; here->VBICtnidealParasitSatCurBC = p[49]; here->VBICtrollOffF = p[53]; here->VBICtsepISRR = p[94]; here->VBICtvbbe = p[98]; here->VBICtnbbe = p[99]; vt = here->VBICtemp * CONSTKoverQ; here->VBICtVcrit = vt * log(vt / (CONSTroot2*model->VBICsatCur*here->VBICarea*here->VBICm)); } } return(OK); } int vbic_4T_et_cf_t(double *p, double *pnom, double *TAMB) { double Tini, Tdev, Vtv, rT, dT, xvar1; double xvar2, xvar3, xvar4, xvar5, xvar6, psiio; double psiin; /* Direct copy p<-pnom for temperature independent parameters */ p[5]=pnom[5]; p[14]=pnom[14]; p[15]=pnom[15]; p[18]=pnom[18]; p[19]=pnom[19]; p[20]=pnom[20]; p[22]=pnom[22]; p[25]=pnom[25]; p[26]=pnom[26]; p[29]=pnom[29]; p[30]=pnom[30]; p[32]=pnom[32]; p[33]=pnom[33]; p[35]=pnom[35]; p[37]=pnom[37]; p[39]=pnom[39]; p[40]=pnom[40]; p[43]=pnom[43]; p[44]=pnom[44]; p[48]=pnom[48]; p[50]=pnom[50]; p[51]=pnom[51]; p[52]=pnom[52]; p[54]=pnom[54]; p[55]=pnom[55]; p[56]=pnom[56]; p[57]=pnom[57]; p[58]=pnom[58]; p[59]=pnom[59]; p[60]=pnom[60]; p[61]=pnom[61]; p[62]=pnom[62]; p[63]=pnom[63]; p[64]=pnom[64]; p[65]=pnom[65]; p[66]=pnom[66]; p[67]=pnom[67]; p[68]=pnom[68]; p[69]=pnom[69]; p[70]=pnom[70]; p[71]=pnom[71]; p[72]=pnom[72]; p[73]=pnom[73]; p[74]=pnom[74]; p[75]=pnom[75]; p[76]=pnom[76]; p[77]=pnom[77]; p[78]=pnom[78]; p[79]=pnom[79]; p[80]=pnom[80]; p[81]=pnom[81]; p[82]=pnom[82]; p[83]=pnom[83]; p[84]=pnom[84]; p[85]=pnom[85]; p[86]=pnom[86]; p[87]=pnom[87]; p[88]=pnom[88]; p[89]=pnom[89]; p[90]=pnom[90]; p[91]=pnom[91]; p[92]=pnom[92]; p[93]=pnom[93]; p[95]=pnom[95]; p[96]=pnom[96]; p[97]=pnom[97]; p[100]=pnom[100]; p[101]=pnom[101]; p[102]=pnom[102]; p[103]=pnom[103]; p[105]=pnom[105]; p[106]=pnom[106]; p[107]=pnom[107]; /* Temperature mappings for model parameters */ Tini=2.731500e+02+pnom[0]; Tdev=(2.731500e+02+(*TAMB))+pnom[105]; Vtv=1.380662e-23*Tdev/1.602189e-19; rT=Tdev/Tini; dT=Tdev-Tini; xvar1=pow(rT,pnom[90]); p[53]=pnom[53]*xvar1; xvar1=pow(rT,pnom[91]); p[1]=pnom[1]*xvar1; xvar1=pow(rT,pnom[68]); p[2]=pnom[2]*xvar1; xvar1=pow(rT,pnom[92]); p[6]=pnom[6]*xvar1; xvar1=pow(rT,pnom[67]); p[7]=pnom[7]*xvar1; xvar1=pow(rT,pnom[66]); p[8]=pnom[8]*xvar1; xvar1=pow(rT,pnom[69]); p[9]=pnom[9]*xvar1; xvar1=pow(rT,pnom[93]); p[10]=pnom[10]*xvar1; xvar2=pow(rT,pnom[78]); xvar3=-pnom[71]*(1.0-rT)/Vtv; xvar4=exp(xvar3); xvar1=(xvar2*xvar4); xvar5=(1.0/pnom[12]); xvar6=pow(xvar1,xvar5); p[11]=pnom[11]*xvar6; xvar2=pow(rT,pnom[95]); xvar3=-pnom[96]*(1.0-rT)/Vtv; xvar4=exp(xvar3); xvar1=(xvar2*xvar4); xvar5=(1.0/pnom[13]); xvar6=pow(xvar1,xvar5); p[94]=pnom[94]*xvar6; xvar2=pow(rT,pnom[78]); xvar3=-pnom[97]*(1.0-rT)/Vtv; xvar4=exp(xvar3); xvar1=(xvar2*xvar4); xvar5=(1.0/pnom[44]); xvar6=pow(xvar1,xvar5); p[42]=pnom[42]*xvar6; xvar2=pow(rT,pnom[79]); xvar3=-pnom[72]*(1.0-rT)/Vtv; xvar4=exp(xvar3); xvar1=(xvar2*xvar4); xvar5=(1.0/pnom[33]); xvar6=pow(xvar1,xvar5); p[31]=pnom[31]*xvar6; xvar2=pow(rT,pnom[80]); xvar3=-pnom[75]*(1.0-rT)/Vtv; xvar4=exp(xvar3); xvar1=(xvar2*xvar4); xvar5=(1.0/pnom[35]); xvar6=pow(xvar1,xvar5); p[34]=pnom[34]*xvar6; xvar2=pow(rT,pnom[79]); xvar3=-pnom[73]*(1.0-rT)/Vtv; xvar4=exp(xvar3); xvar1=(xvar2*xvar4); xvar5=(1.0/pnom[37]); xvar6=pow(xvar1,xvar5); p[36]=pnom[36]*xvar6; xvar2=pow(rT,pnom[80]); xvar3=-pnom[76]*(1.0-rT)/Vtv; xvar4=exp(xvar3); xvar1=(xvar2*xvar4); xvar5=(1.0/pnom[39]); xvar6=pow(xvar1,xvar5); p[38]=pnom[38]*xvar6; xvar2=pow(rT,pnom[79]); xvar3=-pnom[73]*(1.0-rT)/Vtv; xvar4=exp(xvar3); xvar1=(xvar2*xvar4); xvar5=(1.0/pnom[37]); xvar6=pow(xvar1,xvar5); p[45]=pnom[45]*xvar6; xvar2=pow(rT,pnom[80]); xvar3=-pnom[76]*(1.0-rT)/Vtv; xvar4=exp(xvar3); xvar1=(xvar2*xvar4); xvar5=(1.0/pnom[39]); xvar6=pow(xvar1,xvar5); p[46]=pnom[46]*xvar6; xvar2=pow(rT,pnom[79]); xvar3=-pnom[74]*(1.0-rT)/Vtv; xvar4=exp(xvar3); xvar1=(xvar2*xvar4); xvar5=(1.0/pnom[48]); xvar6=pow(xvar1,xvar5); p[47]=pnom[47]*xvar6; xvar2=pow(rT,pnom[80]); xvar3=-pnom[77]*(1.0-rT)/Vtv; xvar4=exp(xvar3); xvar1=(xvar2*xvar4); xvar5=(1.0/pnom[50]); xvar6=pow(xvar1,xvar5); p[49]=pnom[49]*xvar6; p[12]=pnom[12]*(1.0+dT*pnom[81]); p[13]=pnom[13]*(1.0+dT*pnom[81]); p[41]=pnom[41]*(1.0+dT*pnom[82]); p[98]=pnom[98]*(1.0+dT*(pnom[101]+dT*pnom[102])); p[99]=pnom[99]*(1.0+dT*pnom[103]); xvar2=0.5*pnom[17]*rT/Vtv; xvar3=exp(xvar2); xvar4=-0.5*pnom[17]*rT/Vtv; xvar5=exp(xvar4); xvar1=xvar3-xvar5; xvar6=log(xvar1); psiio=2.0*(Vtv/rT)*xvar6; xvar1=log(rT); psiin=psiio*rT-3.0*Vtv*xvar1-pnom[72]*(rT-1.0); xvar2=-psiin/Vtv; xvar3=exp(xvar2); xvar1=0.5*(1.0+sqrt(1.0+4.0*xvar3)); xvar4=log(xvar1); p[17]=psiin+2.0*Vtv*xvar4; xvar2=0.5*pnom[24]*rT/Vtv; xvar3=exp(xvar2); xvar4=-0.5*pnom[24]*rT/Vtv; xvar5=exp(xvar4); xvar1=xvar3-xvar5; xvar6=log(xvar1); psiio=2.0*(Vtv/rT)*xvar6; xvar1=log(rT); psiin=psiio*rT-3.0*Vtv*xvar1-pnom[73]*(rT-1.0); xvar2=-psiin/Vtv; xvar3=exp(xvar2); xvar1=0.5*(1.0+sqrt(1.0+4.0*xvar3)); xvar4=log(xvar1); p[24]=psiin+2.0*Vtv*xvar4; xvar2=0.5*pnom[28]*rT/Vtv; xvar3=exp(xvar2); xvar4=-0.5*pnom[28]*rT/Vtv; xvar5=exp(xvar4); xvar1=xvar3-xvar5; xvar6=log(xvar1); psiio=2.0*(Vtv/rT)*xvar6; xvar1=log(rT); psiin=psiio*rT-3.0*Vtv*xvar1-pnom[74]*(rT-1.0); xvar2=-psiin/Vtv; xvar3=exp(xvar2); xvar1=0.5*(1.0+sqrt(1.0+4.0*xvar3)); xvar4=log(xvar1); p[28]=psiin+2.0*Vtv*xvar4; xvar1=pnom[17]/p[17]; xvar2=pow(xvar1,pnom[18]); p[16]=pnom[16]*xvar2; xvar1=pnom[24]/p[24]; xvar2=pow(xvar1,pnom[25]); p[21]=pnom[21]*xvar2; xvar1=pnom[24]/p[24]; xvar2=pow(xvar1,pnom[25]); p[23]=pnom[23]*xvar2; xvar1=pnom[28]/p[28]; xvar2=pow(xvar1,pnom[29]); p[27]=pnom[27]*xvar2; xvar1=pow(rT,pnom[78]); xvar2=-pnom[71]*(1.0-rT)/Vtv; xvar3=exp(xvar2); p[4]=pnom[4]*xvar1*xvar3; xvar1=pow(rT,pnom[70]); p[3]=pnom[3]*xvar1; xvar1=-p[98]/(p[99]*Vtv); p[104]=exp(xvar1); p[0]=(*TAMB)+p[105]; return(0); } tmpk8ny_4pz/src/spicelib/devices/vbic/vbicask.c0000644000175000017500000001340713546075722021701 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Mathew Lew and Thomas L. Quarles Model Author: 1995 Colin McAndrew Motorola Spice3 Implementation: 2003 Dietmar Warning DAnalyse GmbH **********/ /* * This routine gives access to the internal device * parameters for VBICs */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/cktdefs.h" #include "vbicdefs.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int VBICask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFvalue *select) { VBICinstance *here = (VBICinstance*)instPtr; NG_IGNORE(select); switch(which) { case VBIC_AREA: value->rValue = here->VBICarea; return(OK); case VBIC_OFF: value->iValue = here->VBICoff; return(OK); case VBIC_IC_VBE: value->rValue = here->VBICicVBE; return(OK); case VBIC_IC_VCE: value->rValue = here->VBICicVCE; return(OK); case VBIC_TEMP: value->rValue = here->VBICtemp - CONSTCtoK; return(OK); case VBIC_M: value->rValue = here->VBICm; return(OK); case VBIC_QUEST_COLLNODE: value->iValue = here->VBICcollNode; return(OK); case VBIC_QUEST_BASENODE: value->iValue = here->VBICbaseNode; return(OK); case VBIC_QUEST_EMITNODE: value->iValue = here->VBICemitNode; return(OK); case VBIC_QUEST_SUBSNODE: value->iValue = here->VBICsubsNode; return(OK); case VBIC_QUEST_COLLCXNODE: value->iValue = here->VBICcollCXNode; return(OK); case VBIC_QUEST_BASEBXNODE: value->iValue = here->VBICbaseBXNode; return(OK); case VBIC_QUEST_EMITEINODE: value->iValue = here->VBICemitEINode; return(OK); case VBIC_QUEST_SUBSSINODE: value->iValue = here->VBICsubsSINode; return(OK); case VBIC_QUEST_VBE: value->rValue = *(ckt->CKTstate0 + here->VBICvbei); return(OK); case VBIC_QUEST_VBC: value->rValue = *(ckt->CKTstate0 + here->VBICvbci); return(OK); case VBIC_QUEST_CC: value->rValue = *(ckt->CKTstate0 + here->VBICitzf) - *(ckt->CKTstate0 + here->VBICitzr) - *(ckt->CKTstate0 + here->VBICibc); return(OK); case VBIC_QUEST_CB: value->rValue = *(ckt->CKTstate0 + here->VBICibe) + *(ckt->CKTstate0 + here->VBICibc) + *(ckt->CKTstate0 + here->VBICibex) + *(ckt->CKTstate0 + here->VBICibep) + *(ckt->CKTstate0 + here->VBICiccp); return(OK); case VBIC_QUEST_CE: value->rValue = - *(ckt->CKTstate0 + here->VBICibe) - *(ckt->CKTstate0 + here->VBICibex) - *(ckt->CKTstate0 + here->VBICitzf) + *(ckt->CKTstate0 + here->VBICitzr); return(OK); case VBIC_QUEST_CS: value->rValue = *(ckt->CKTstate0 + here->VBICiccp) - *(ckt->CKTstate0 + here->VBICibcp); return(OK); case VBIC_QUEST_POWER: value->rValue = fabs(*(ckt->CKTstate0 + here->VBICitzf) - *(ckt->CKTstate0 + here->VBICitzr)) * fabs(*(ckt->CKTstate0 + here->VBICvbei) - *(ckt->CKTstate0 + here->VBICvbci)) + fabs(*(ckt->CKTstate0 + here->VBICibe) * *(ckt->CKTstate0 + here->VBICvbei)) + fabs(*(ckt->CKTstate0 + here->VBICibex) * *(ckt->CKTstate0 + here->VBICvbex)) + fabs(*(ckt->CKTstate0 + here->VBICibc) * *(ckt->CKTstate0 + here->VBICvbci)) + fabs(*(ckt->CKTstate0 + here->VBICibcp) * *(ckt->CKTstate0 + here->VBICvbcp)) + fabs(*(ckt->CKTstate0 + here->VBICiccp)) * fabs(*(ckt->CKTstate0 + here->VBICvbep) - *(ckt->CKTstate0 + here->VBICvbcp)); return(OK); case VBIC_QUEST_GM: value->rValue = *(ckt->CKTstate0 + here->VBICitzf_Vbei); return(OK); case VBIC_QUEST_GO: value->rValue = *(ckt->CKTstate0 + here->VBICitzf_Vbci); return(OK); case VBIC_QUEST_GPI: value->rValue = *(ckt->CKTstate0 + here->VBICibe_Vbei); return(OK); case VBIC_QUEST_GMU: value->rValue = *(ckt->CKTstate0 + here->VBICibc_Vbci); return(OK); case VBIC_QUEST_GX: value->rValue = *(ckt->CKTstate0 + here->VBICirbi_Vrbi); return(OK); case VBIC_QUEST_CBE: value->rValue = here->VBICcapbe; return(OK); case VBIC_QUEST_CBEX: value->rValue = here->VBICcapbex; return(OK); case VBIC_QUEST_CBC: value->rValue = here->VBICcapbc; return(OK); case VBIC_QUEST_CBCX: value->rValue = here->VBICcapbcx; return(OK); case VBIC_QUEST_CBEP: value->rValue = here->VBICcapbep; return(OK); case VBIC_QUEST_CBCP: value->rValue = here->VBICcapbcp; return(OK); case VBIC_QUEST_QBE: value->rValue = *(ckt->CKTstate0 + here->VBICqbe); return(OK); case VBIC_QUEST_QBC: value->rValue = *(ckt->CKTstate0 + here->VBICqbc); return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/vbic/vbictrunc.c0000644000175000017500000000224613546075722022255 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Model Author: 1995 Colin McAndrew Motorola Spice3 Implementation: 2003 Dietmar Warning DAnalyse GmbH **********/ /* * This routine performs truncation error calculations for * VBICs in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vbicdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VBICtrunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { VBICmodel *model = (VBICmodel*)inModel; VBICinstance *here; for( ; model != NULL; model = VBICnextModel(model)) { for(here=VBICinstances(model);here!=NULL; here = VBICnextInstance(here)){ CKTterr(here->VBICqbe,ckt,timeStep); CKTterr(here->VBICqbex,ckt,timeStep); CKTterr(here->VBICqbc,ckt,timeStep); CKTterr(here->VBICqbcx,ckt,timeStep); CKTterr(here->VBICqbep,ckt,timeStep); CKTterr(here->VBICqbeo,ckt,timeStep); CKTterr(here->VBICqbco,ckt,timeStep); CKTterr(here->VBICqbcp,ckt,timeStep); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vbic/vbic.c0000644000175000017500000003071413546075722021202 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Model Author: 1995 Colin McAndrew Motorola Spice3 Implementation: 2003 Dietmar Warning DAnalyse GmbH **********/ /* * This file defines the VBIC data structures that are * available to the next level(s) up the calling hierarchy */ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "vbicdefs.h" #include "ngspice/suffix.h" IFparm VBICpTable[] = { /* parameters */ IOPU("area", VBIC_AREA, IF_REAL, "Area factor"), IOPU("off", VBIC_OFF, IF_FLAG, "Device initially off"), IP("ic", VBIC_IC, IF_REALVEC, "Initial condition vector"), IOPAU("icvbe", VBIC_IC_VBE, IF_REAL, "Initial B-E voltage"), IOPAU("icvce", VBIC_IC_VCE, IF_REAL, "Initial C-E voltage"), IOPU("temp", VBIC_TEMP, IF_REAL, "Instance temperature"), IOPU("dtemp", VBIC_DTEMP, IF_REAL, "Instance delta temperature"), IOPU("m", VBIC_M, IF_REAL, "Multiplier"), OPU("collnode", VBIC_QUEST_COLLNODE, IF_INTEGER, "Number of collector node"), OPU("basenode", VBIC_QUEST_BASENODE, IF_INTEGER, "Number of base node"), OPU("emitnode", VBIC_QUEST_EMITNODE, IF_INTEGER, "Number of emitter node"), OPU("subsnode", VBIC_QUEST_SUBSNODE, IF_INTEGER, "Number of substrate node"), OPU("collCXnode",VBIC_QUEST_COLLCXNODE,IF_INTEGER, "Internal collector node"), OPU("collCInode",VBIC_QUEST_COLLCINODE,IF_INTEGER, "Internal collector node"), OPU("baseBXnode",VBIC_QUEST_BASEBXNODE,IF_INTEGER, "Internal base node"), OPU("baseBInode",VBIC_QUEST_BASEBINODE,IF_INTEGER, "Internal base node"), OPU("baseBPnode",VBIC_QUEST_BASEBPNODE,IF_INTEGER, "Internal base node"), OPU("emitEInode",VBIC_QUEST_EMITEINODE,IF_INTEGER, "Internal emitter node"), OPU("subsSInode",VBIC_QUEST_SUBSSINODE,IF_INTEGER, "Internal substrate node"), OP("vbe", VBIC_QUEST_VBE, IF_REAL, "B-E voltage"), OP("vbc", VBIC_QUEST_VBC, IF_REAL, "B-C voltage"), OP("ic", VBIC_QUEST_CC, IF_REAL, "Collector current"), OP("ib", VBIC_QUEST_CB, IF_REAL, "Base current"), OP("ie", VBIC_QUEST_CE, IF_REAL, "Emitter current"), OP("is", VBIC_QUEST_CS, IF_REAL, "Substrate current"), OP("gm", VBIC_QUEST_GM, IF_REAL, "Small signal transconductance dIc/dVbe"), OP("go", VBIC_QUEST_GO, IF_REAL, "Small signal output conductance dIc/dVbc"), OP("gpi", VBIC_QUEST_GPI, IF_REAL, "Small signal input conductance dIb/dVbe"), OP("gmu", VBIC_QUEST_GMU, IF_REAL, "Small signal conductance dIb/dVbc"), OP("gx", VBIC_QUEST_GX, IF_REAL, "Conductance from base to internal base"), OP("cbe", VBIC_QUEST_CBE, IF_REAL, "Internal base to emitter capacitance"), OP("cbex", VBIC_QUEST_CBEX, IF_REAL, "External base to emitter capacitance"), OP("cbc", VBIC_QUEST_CBC, IF_REAL, "Internal base to collector capacitance"), OP("cbcx", VBIC_QUEST_CBCX, IF_REAL, "External Base to collector capacitance"), OP("cbep", VBIC_QUEST_CBEP, IF_REAL, "Parasitic Base to emitter capacitance"), OP("cbcp", VBIC_QUEST_CBCP, IF_REAL, "Parasitic Base to collector capacitance"), OP("p", VBIC_QUEST_POWER,IF_REAL, "Power dissipation"), OPU("geqcb",VBIC_QUEST_GEQCB,IF_REAL, "Internal C-B-base cap. equiv. cond."), OPU("geqbx",VBIC_QUEST_GEQBX,IF_REAL, "External C-B-base cap. equiv. cond."), OPU("qbe", VBIC_QUEST_QBE, IF_REAL, "Charge storage B-E junction"), OPU("cqbe", VBIC_QUEST_CQBE, IF_REAL, "Cap. due to charge storage in B-E jct."), OPU("qbc", VBIC_QUEST_QBC, IF_REAL, "Charge storage B-C junction"), OPU("cqbc", VBIC_QUEST_CQBC, IF_REAL, "Cap. due to charge storage in B-C jct."), OPU("qbx", VBIC_QUEST_QBX, IF_REAL, "Charge storage B-X junction"), OPU("cqbx", VBIC_QUEST_CQBX, IF_REAL, "Cap. due to charge storage in B-X jct.") }; IFparm VBICmPTable[] = { /* model parameters */ OP("type", VBIC_MOD_TYPE, IF_STRING, "NPN or PNP"), IOPU("npn", VBIC_MOD_NPN, IF_FLAG, "NPN type device"), IOPU("pnp", VBIC_MOD_PNP, IF_FLAG, "PNP type device"), IOP("tnom", VBIC_MOD_TNOM, IF_REAL, "Parameter measurement temperature"), IOPR("tref", VBIC_MOD_TNOM, IF_REAL, "Parameter measurement temperature"), IOP("rcx", VBIC_MOD_RCX, IF_REAL, "Extrinsic coll resistance"), IOP("rci", VBIC_MOD_RCI, IF_REAL, "Intrinsic coll resistance"), IOP("vo", VBIC_MOD_VO, IF_REAL, "Epi drift saturation voltage"), IOP("gamm", VBIC_MOD_GAMM, IF_REAL, "Epi doping parameter"), IOP("hrcf", VBIC_MOD_HRCF, IF_REAL, "High current RC factor"), IOP("rbx", VBIC_MOD_RBX, IF_REAL, "Extrinsic base resistance"), IOP("rbi", VBIC_MOD_RBI, IF_REAL, "Intrinsic base resistance"), IOP("re", VBIC_MOD_RE, IF_REAL, "Intrinsic emitter resistance"), IOP("rs", VBIC_MOD_RS, IF_REAL, "Intrinsic substrate resistance"), IOP("rbp", VBIC_MOD_RBP, IF_REAL, "Parasitic base resistance"), IOP("is", VBIC_MOD_IS, IF_REAL, "Transport saturation current"), IOP("nf", VBIC_MOD_NF, IF_REAL, "Forward emission coefficient"), IOP("nr", VBIC_MOD_NR, IF_REAL, "Reverse emission coefficient"), IOP("fc", VBIC_MOD_FC, IF_REAL, "Fwd bias depletion capacitance limit"), IOP("cbeo", VBIC_MOD_CBEO, IF_REAL, "Extrinsic B-E overlap capacitance"), IOP("cje", VBIC_MOD_CJE, IF_REAL, "Zero bias B-E depletion capacitance"), IOP("pe", VBIC_MOD_PE, IF_REAL, "B-E built in potential"), IOP("me", VBIC_MOD_ME, IF_REAL, "B-E junction grading coefficient"), IOP("aje", VBIC_MOD_AJE, IF_REAL, "B-E capacitance smoothing factor"), IOP("cbco", VBIC_MOD_CBCO, IF_REAL, "Extrinsic B-C overlap capacitance"), IOP("cjc", VBIC_MOD_CJC, IF_REAL, "Zero bias B-C depletion capacitance"), IOP("qco", VBIC_MOD_QCO, IF_REAL, "Epi charge parameter"), IOP("cjep", VBIC_MOD_CJEP, IF_REAL, "B-C extrinsic zero bias capacitance"), IOP("pc", VBIC_MOD_PC, IF_REAL, "B-C built in potential"), IOP("mc", VBIC_MOD_MC, IF_REAL, "B-C junction grading coefficient"), IOP("ajc", VBIC_MOD_AJC, IF_REAL, "B-C capacitance smoothing factor"), IOP("cjcp", VBIC_MOD_CJCP, IF_REAL, "Zero bias S-C capacitance"), IOP("ps", VBIC_MOD_PS, IF_REAL, "S-C junction built in potential"), IOP("ms", VBIC_MOD_MS, IF_REAL, "S-C junction grading coefficient"), IOP("ajs", VBIC_MOD_AJS, IF_REAL, "S-C capacitance smoothing factor"), IOP("ibei", VBIC_MOD_IBEI, IF_REAL, "Ideal B-E saturation current"), IOP("wbe", VBIC_MOD_WBE, IF_REAL, "Portion of IBEI from Vbei, 1-WBE from Vbex"), IOP("nei", VBIC_MOD_NEI, IF_REAL, "Ideal B-E emission coefficient"), IOP("iben", VBIC_MOD_IBEN, IF_REAL, "Non-ideal B-E saturation current"), IOP("nen", VBIC_MOD_NEN, IF_REAL, "Non-ideal B-E emission coefficient"), IOP("ibci", VBIC_MOD_IBCI, IF_REAL, "Ideal B-C saturation current"), IOP("nci", VBIC_MOD_NCI, IF_REAL, "Ideal B-C emission coefficient"), IOP("ibcn", VBIC_MOD_IBCN, IF_REAL, "Non-ideal B-C saturation current"), IOP("ncn", VBIC_MOD_NCN, IF_REAL, "Non-ideal B-C emission coefficient"), IOP("avc1", VBIC_MOD_AVC1, IF_REAL, "B-C weak avalanche parameter 1"), IOP("avc2", VBIC_MOD_AVC2, IF_REAL, "B-C weak avalanche parameter 2"), IOP("isp", VBIC_MOD_ISP, IF_REAL, "Parasitic transport saturation current"), IOP("wsp", VBIC_MOD_WSP, IF_REAL, "Portion of ICCP"), IOP("nfp", VBIC_MOD_NFP, IF_REAL, "Parasitic fwd emission coefficient"), IOP("ibeip", VBIC_MOD_IBEIP, IF_REAL, "Ideal parasitic B-E saturation current"), IOP("ibenp", VBIC_MOD_IBENP, IF_REAL, "Non-ideal parasitic B-E saturation current"), IOP("ibcip", VBIC_MOD_IBCIP, IF_REAL, "Ideal parasitic B-C saturation current"), IOP("ncip", VBIC_MOD_NCIP, IF_REAL, "Ideal parasitic B-C emission coefficient"), IOP("ibcnp", VBIC_MOD_IBCNP, IF_REAL, "Nonideal parasitic B-C saturation current"), IOP("ncnp", VBIC_MOD_NCNP, IF_REAL, "Nonideal parasitic B-C emission coefficient"), IOP("vef", VBIC_MOD_VEF, IF_REAL, "Forward Early voltage"), IOP("ver", VBIC_MOD_VER, IF_REAL, "Reverse Early voltage"), IOP("ikf", VBIC_MOD_IKF, IF_REAL, "Forward knee current"), IOP("ikr", VBIC_MOD_IKR, IF_REAL, "Reverse knee current"), IOP("ikp", VBIC_MOD_IKP, IF_REAL, "Parasitic knee current"), IOP("tf", VBIC_MOD_TF, IF_REAL, "Ideal forward transit time"), IOP("qtf", VBIC_MOD_QTF, IF_REAL, "Variation of TF with base-width modulation"), IOP("xtf", VBIC_MOD_XTF, IF_REAL, "Coefficient for bias dependence of TF"), IOP("vtf", VBIC_MOD_VTF, IF_REAL, "Voltage giving VBC dependence of TF"), IOP("itf", VBIC_MOD_ITF, IF_REAL, "High current dependence of TF"), IOP("tr", VBIC_MOD_TR, IF_REAL, "Ideal reverse transit time"), IOP("td", VBIC_MOD_TD, IF_REAL, "Forward excess-phase delay time"), IOP("kfn", VBIC_MOD_KFN, IF_REAL, "B-E Flicker Noise Coefficient"), IOP("afn", VBIC_MOD_AFN, IF_REAL, "B-E Flicker Noise Exponent"), IOP("bfn", VBIC_MOD_BFN, IF_REAL, "B-E Flicker Noise 1/f dependence"), IOP("xre", VBIC_MOD_XRE, IF_REAL, "Temperature exponent of RE"), IOP("xrb", VBIC_MOD_XRB, IF_REAL, "Temperature exponent of RB"), IOP("xrbi", VBIC_MOD_XRBI, IF_REAL, "Temperature exponent of RBI"), IOP("xrc", VBIC_MOD_XRC, IF_REAL, "Temperature exponent of RC"), IOP("xrci", VBIC_MOD_XRCI, IF_REAL, "Temperature exponent of RCI"), IOP("xrs", VBIC_MOD_XRS, IF_REAL, "Temperature exponent of RS"), IOP("xvo", VBIC_MOD_XVO, IF_REAL, "Temperature exponent of VO"), IOP("ea", VBIC_MOD_EA, IF_REAL, "Activation energy for IS"), IOP("eaie", VBIC_MOD_EAIE, IF_REAL, "Activation energy for IBEI"), IOP("eaic", VBIC_MOD_EAIC, IF_REAL, "Activation energy for IBCI/IBEIP"), IOP("eais", VBIC_MOD_EAIS, IF_REAL, "Activation energy for IBCIP"), IOP("eane", VBIC_MOD_EANE, IF_REAL, "Activation energy for IBEN"), IOP("eanc", VBIC_MOD_EANC, IF_REAL, "Activation energy for IBCN/IBENP"), IOP("eans", VBIC_MOD_EANS, IF_REAL, "Activation energy for IBCNP"), IOP("xis", VBIC_MOD_XIS, IF_REAL, "Temperature exponent of IS"), IOP("xii", VBIC_MOD_XII, IF_REAL, "Temperature exponent of IBEI,IBCI,IBEIP,IBCIP"), IOP("xin", VBIC_MOD_XIN, IF_REAL, "Temperature exponent of IBEN,IBCN,IBENP,IBCNP"), IOP("tnf", VBIC_MOD_TNF, IF_REAL, "Temperature exponent of NF"), IOP("tavc", VBIC_MOD_TAVC, IF_REAL, "Temperature exponent of AVC2"), IOP("rth", VBIC_MOD_RTH, IF_REAL, "Thermal resistance"), IOP("cth", VBIC_MOD_CTH, IF_REAL, "Thermal capacitance"), IOP("vrt", VBIC_MOD_VRT, IF_REAL, "Punch-through voltage of internal B-C junction"), IOP("art", VBIC_MOD_ART, IF_REAL, "Smoothing parameter for reach-through"), IOP("ccso", VBIC_MOD_CCSO, IF_REAL, "Fixed C-S capacitance"), IOP("qbm", VBIC_MOD_QBM, IF_REAL, "Select SGP qb formulation"), IOP("nkf", VBIC_MOD_NKF, IF_REAL, "High current beta rolloff"), IOP("xikf", VBIC_MOD_XIKF, IF_REAL, "Temperature exponent of IKF"), IOP("xrcx", VBIC_MOD_XRCX, IF_REAL, "Temperature exponent of RCX"), IOP("xrbx", VBIC_MOD_XRBX, IF_REAL, "Temperature exponent of RBX"), IOP("xrbp", VBIC_MOD_XRBP, IF_REAL, "Temperature exponent of RBP"), IOP("isrr", VBIC_MOD_ISRR, IF_REAL, "Separate IS for fwd and rev"), IOP("xisr", VBIC_MOD_XISR, IF_REAL, "Temperature exponent of ISR"), IOP("dear", VBIC_MOD_DEAR, IF_REAL, "Delta activation energy for ISRR"), IOP("eap", VBIC_MOD_EAP, IF_REAL, "Exitivation energy for ISP"), IOP("vbbe", VBIC_MOD_VBBE, IF_REAL, "B-E breakdown voltage"), IOP("nbbe", VBIC_MOD_NBBE, IF_REAL, "B-E breakdown emission coefficient"), IOP("ibbe", VBIC_MOD_IBBE, IF_REAL, "B-E breakdown current"), IOP("tvbbe1",VBIC_MOD_TVBBE1,IF_REAL, "Linear temperature coefficient of VBBE"), IOP("tvbbe2",VBIC_MOD_TVBBE2,IF_REAL, "Quadratic temperature coefficient of VBBE"), IOP("tnbbe", VBIC_MOD_TNBBE, IF_REAL, "Temperature coefficient of NBBE"), IOP("ebbe", VBIC_MOD_EBBE, IF_REAL, "exp(-VBBE/(NBBE*Vtv))"), IOP("dtemp", VBIC_MOD_DTEMP, IF_REAL, "Locale Temperature difference"), IOP("vers", VBIC_MOD_VERS, IF_REAL, "Revision Version"), IOP("vref", VBIC_MOD_VREF, IF_REAL, "Reference Version"), IOP("vbe_max", VBIC_MOD_VBE_MAX, IF_REAL, "maximum voltage B-E junction"), IOP("vbc_max", VBIC_MOD_VBC_MAX, IF_REAL, "maximum voltage B-C junction"), IOP("vce_max", VBIC_MOD_VCE_MAX, IF_REAL, "maximum voltage C-E branch") }; char *VBICnames[] = { "collector", "base", "emitter", "substrate", "temp" }; int VBICnSize = NUMELEMS(VBICnames); int VBICpTSize = NUMELEMS(VBICpTable); int VBICmPTSize = NUMELEMS(VBICmPTable); int VBICiSize = sizeof(VBICinstance); int VBICmSize = sizeof(VBICmodel); tmpk8ny_4pz/src/spicelib/devices/vbic/vbicdefs.h0000644000175000017500000006165413546075722022060 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Model Author: 1995 Colin McAndrew Motorola Spice3 Implementation: 2003 Dietmar Warning DAnalyse GmbH **********/ #ifndef VBIC #define VBIC #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" /* structures to describe Bipolar Junction Transistors */ /* indices to array of VBIC noise sources */ enum { VBICRCNOIZ = 0, VBICRCINOIZ, VBICRBNOIZ, VBICRBINOIZ, VBICRENOIZ, VBICRBPNOIZ, VBICRSNOIZ, VBICICNOIZ, VBICIBNOIZ, VBICIBEPNOIZ, VBICICCPNOIZ, VBICFLBENOIZ, VBICFLBEPNOIZ, VBICTOTNOIZ, /* finally, the number of noise sources */ VBICNSRCS }; /* data needed to describe a single instance */ typedef struct sVBICinstance { struct GENinstance gen; #define VBICmodPtr(inst) ((struct sVBICmodel *)((inst)->gen.GENmodPtr)) #define VBICnextInstance(inst) ((struct sVBICinstance *)((inst)->gen.GENnextInstance)) #define VBICname gen.GENname #define VBICstate gen.GENstate const int VBICcollNode; /* number of collector node of vbic */ const int VBICbaseNode; /* number of base node of vbic */ const int VBICemitNode; /* number of emitter node of vbic */ const int VBICsubsNode; /* number of substrate node of vbic */ const int VBICtempNode; /* number of the temperature node of the vbic */ int VBICcollCXNode; /* number of internal collector node of vbic */ int VBICcollCINode; /* number of internal collector node of vbic */ int VBICbaseBXNode; /* number of internal base node of vbic */ int VBICbaseBINode; /* number of internal base node of vbic */ int VBICemitEINode; /* number of internal emitter node of vbic */ int VBICbaseBPNode; /* number of internal base node of vbic */ int VBICsubsSINode; /* number of internal substrate node */ double VBICarea; /* area factor for the vbic */ double VBICicVBE; /* initial condition voltage B-E*/ double VBICicVCE; /* initial condition voltage C-E*/ double VBICtemp; /* instance temperature */ double VBICdtemp; /* instance delta temperature */ double VBICm; /* multiply factor for the vbic */ double VBICtVcrit; double VBICtextCollResist; double VBICtintCollResist; double VBICtepiSatVoltage; double VBICtepiDoping; double VBICtextBaseResist; double VBICtintBaseResist; double VBICtemitterResist; double VBICtsubstrateResist; double VBICtparBaseResist; double VBICtsatCur; double VBICtemissionCoeffF; double VBICtemissionCoeffR; double VBICtdepletionCapBE; double VBICtpotentialBE; double VBICtdepletionCapBC; double VBICtextCapBC; double VBICtpotentialBC; double VBICtextCapSC; double VBICtpotentialSC; double VBICtidealSatCurBE; double VBICtnidealSatCurBE; double VBICtidealSatCurBC; double VBICtnidealSatCurBC; double VBICtavalanchePar2BC; double VBICtparasitSatCur; double VBICtidealParasitSatCurBE; double VBICtnidealParasitSatCurBE; double VBICtidealParasitSatCurBC; double VBICtnidealParasitSatCurBC; double VBICtrollOffF; double VBICtsepISRR; double VBICtvbbe; double VBICtnbbe; double *VBICcollCollPtr; /* pointer to sparse matrix at * (collector,collector) */ double *VBICbaseBasePtr; /* pointer to sparse matrix at * (base,base) */ double *VBICemitEmitPtr; /* pointer to sparse matrix at * (emitter,emitter) */ double *VBICsubsSubsPtr; /* pointer to sparse matrix at * (substrate,substrate) */ double *VBICcollCXCollCXPtr; /* pointer to sparse matrix at * (collector prime,collector prime) */ double *VBICcollCICollCIPtr; /* pointer to sparse matrix at * (collector prime,collector prime) */ double *VBICbaseBXBaseBXPtr; /* pointer to sparse matrix at * (base prime,base prime) */ double *VBICbaseBIBaseBIPtr; /* pointer to sparse matrix at * (collector prime,collector prime) */ double *VBICbaseBPBaseBPPtr; /* pointer to sparse matrix at * (collector prime,collector prime) */ double *VBICemitEIEmitEIPtr; /* pointer to sparse matrix at * (emitter prime,emitter prime) */ double *VBICsubsSISubsSIPtr; /* pointer to sparse matrix at * (substrate prime, substrate prime) */ double *VBICbaseEmitPtr; /* pointer to sparse matrix at * (base,emit) */ double *VBICemitBasePtr; /* pointer to sparse matrix at * (emit,base) */ double *VBICbaseCollPtr; /* pointer to sparse matrix at * (base,coll) */ double *VBICcollBasePtr; /* pointer to sparse matrix at * (coll,base) */ double *VBICcollCollCXPtr; /* pointer to sparse matrix at * (collector,collector prime) */ double *VBICbaseBaseBXPtr; /* pointer to sparse matrix at * (base,base prime) */ double *VBICemitEmitEIPtr; /* pointer to sparse matrix at * (emitter,emitter prime) */ double *VBICsubsSubsSIPtr; /* pointer to sparse matrix at * (substrate, Substrate connection) */ double *VBICcollCXCollCIPtr; /* pointer to sparse matrix at * (collector prime,base prime) */ double *VBICcollCXBaseBXPtr; /* pointer to sparse matrix at * (collector prime,collector prime) */ double *VBICcollCXBaseBIPtr; /* pointer to sparse matrix at * (collector prime,collector prime) */ double *VBICcollCXBaseBPPtr; /* pointer to sparse matrix at * (collector prime,base prime) */ double *VBICcollCIBaseBIPtr; /* pointer to sparse matrix at * (collector prime,base) */ double *VBICcollCIEmitEIPtr; /* pointer to sparse matrix at * (collector prime,emitter prime) */ double *VBICbaseBXBaseBIPtr; /* pointer to sparse matrix at * (base primt,emitter prime) */ double *VBICbaseBXEmitEIPtr; /* pointer to sparse matrix at * (base primt,emitter prime) */ double *VBICbaseBXBaseBPPtr; /* pointer to sparse matrix at * (base primt,emitter prime) */ double *VBICbaseBXSubsSIPtr; /* pointer to sparse matrix at * (base primt,emitter prime) */ double *VBICbaseBIEmitEIPtr; /* pointer to sparse matrix at * (base primt,emitter prime) */ double *VBICbaseBPSubsSIPtr; /* pointer to sparse matrix at * (base primt,emitter prime) */ double *VBICcollCXCollPtr; /* pointer to sparse matrix at * (collector prime,collector) */ double *VBICbaseBXBasePtr; /* pointer to sparse matrix at * (base prime,base ) */ double *VBICemitEIEmitPtr; /* pointer to sparse matrix at * (emitter prime,emitter) */ double *VBICsubsSISubsPtr; /* pointer to sparse matrix at * (Substrate connection, substrate) */ double *VBICcollCICollCXPtr; /* pointer to sparse matrix at * (collector prime,base prime) */ double *VBICbaseBICollCXPtr; /* pointer to sparse matrix at * (base prime,collector prime) */ double *VBICbaseBPCollCXPtr; /* pointer to sparse matrix at * (base primt,emitter prime) */ double *VBICbaseBXCollCIPtr; /* pointer to sparse matrix at * (base,collector prime) */ double *VBICbaseBICollCIPtr; /* pointer to sparse matrix at * (base,collector prime) */ double *VBICemitEICollCIPtr; /* pointer to sparse matrix at * (emitter prime,collector prime) */ double *VBICbaseBPCollCIPtr; /* pointer to sparse matrix at * (base primt,emitter prime) */ double *VBICsubsSICollCIPtr; /* pointer to sparse matrix at * (substrate,collector prime) */ double *VBICbaseBIBaseBXPtr; /* pointer to sparse matrix at * (base primt,emitter prime) */ double *VBICemitEIBaseBXPtr; /* pointer to sparse matrix at * (emitter prime,base prime) */ double *VBICbaseBPBaseBXPtr; /* pointer to sparse matrix at * (base primt,emitter prime) */ double *VBICsubsSIBaseBXPtr; /* pointer to sparse matrix at * (substrate,substrate) */ double *VBICemitEIBaseBIPtr; /* pointer to sparse matrix at * (emitter prime,base prime) */ double *VBICbaseBPBaseBIPtr; /* pointer to sparse matrix at * (base primt,emitter prime) */ double *VBICsubsSIBaseBIPtr; /* pointer to sparse matrix at * (substrate,base prime) */ double *VBICsubsSIBaseBPPtr; /* pointer to sparse matrix at * (substrate,substrate) */ /* self heating */ double *VBICcollTempPtr; double *VBICbaseTempPtr; double *VBICemitTempPtr; double *VBICsubsTempPtr; double *VBICcollCItempPtr; double *VBICcollCXtempPtr; double *VBICbaseBItempPtr; double *VBICbaseBXtempPtr; double *VBICbaseBPtempPtr; double *VBICemitEItempPtr; double *VBICsubsSItempPtr; double *VBICtempCollCIPtr; double *VBICtempCollCXPtr; double *VBICtempBaseBIPtr; double *VBICtempBaseBXPtr; double *VBICtempBaseBPPtr; double *VBICtempEmitEIPtr; double *VBICtempSubsPtr; double *VBICtempTempPtr; unsigned VBICareaGiven :1; /* flag to indicate area was specified */ unsigned VBICoff :1; /* 'off' flag for vbic */ unsigned VBICicVBEGiven :1; /* flag to indicate VBE init. cond. given */ unsigned VBICicVCEGiven :1; /* flag to indicate VCE init. cond. given */ unsigned VBICtempGiven :1; /* temperature given for vbic instance*/ unsigned VBICdtempGiven :1; /* delta temperature given for vbic instance*/ unsigned VBICmGiven :1; /* flag to indicate multiplier was specified */ double VBICcapbe; double VBICcapbex; double VBICcapbc; double VBICcapbcx; double VBICcapbep; double VBICcapbcp; double VBICcapcth; int VBIC_selfheat; /* self-heating enabled */ #ifndef NONOISE double VBICnVar[NSTATVARS][VBICNSRCS]; #else /*NONOISE*/ double **VBICnVar; #endif /*NONOISE*/ /* the above to avoid allocating memory when it is not needed */ } VBICinstance ; /* entries in the state vector for vbic: */ #define VBICvbei VBICstate #define VBICvbex VBICstate+1 #define VBICvbci VBICstate+2 #define VBICvbcx VBICstate+3 #define VBICvbep VBICstate+4 #define VBICvrci VBICstate+5 #define VBICvrbi VBICstate+6 #define VBICvrbp VBICstate+7 #define VBICvbcp VBICstate+8 #define VBICibe VBICstate+9 #define VBICibe_Vbei VBICstate+10 #define VBICibex VBICstate+11 #define VBICibex_Vbex VBICstate+12 #define VBICitzf VBICstate+13 #define VBICitzf_Vbei VBICstate+14 #define VBICitzf_Vbci VBICstate+15 #define VBICitzr VBICstate+16 #define VBICitzr_Vbci VBICstate+17 #define VBICitzr_Vbei VBICstate+18 #define VBICibc VBICstate+19 #define VBICibc_Vbci VBICstate+20 #define VBICibc_Vbei VBICstate+21 #define VBICibep VBICstate+22 #define VBICibep_Vbep VBICstate+23 #define VBICirci VBICstate+24 #define VBICirci_Vrci VBICstate+25 #define VBICirci_Vbci VBICstate+26 #define VBICirci_Vbcx VBICstate+27 #define VBICirbi VBICstate+28 #define VBICirbi_Vrbi VBICstate+29 #define VBICirbi_Vbei VBICstate+30 #define VBICirbi_Vbci VBICstate+31 #define VBICirbp VBICstate+32 #define VBICirbp_Vrbp VBICstate+33 #define VBICirbp_Vbep VBICstate+34 #define VBICirbp_Vbci VBICstate+35 #define VBICqbe VBICstate+36 #define VBICcqbe VBICstate+37 #define VBICcqbeci VBICstate+38 #define VBICqbex VBICstate+39 #define VBICcqbex VBICstate+40 #define VBICqbc VBICstate+41 #define VBICcqbc VBICstate+42 #define VBICqbcx VBICstate+43 #define VBICcqbcx VBICstate+44 #define VBICqbep VBICstate+45 #define VBICcqbep VBICstate+46 #define VBICcqbepci VBICstate+47 #define VBICqbeo VBICstate+48 #define VBICcqbeo VBICstate+49 #define VBICgqbeo VBICstate+50 #define VBICqbco VBICstate+51 #define VBICcqbco VBICstate+52 #define VBICgqbco VBICstate+53 #define VBICibcp VBICstate+54 #define VBICibcp_Vbcp VBICstate+55 #define VBICiccp VBICstate+56 #define VBICiccp_Vbep VBICstate+57 #define VBICiccp_Vbci VBICstate+58 #define VBICiccp_Vbcp VBICstate+59 #define VBICqbcp VBICstate+60 #define VBICcqbcp VBICstate+61 #define VBICircx_Vrcx VBICstate+62 #define VBICirbx_Vrbx VBICstate+63 #define VBICirs_Vrs VBICstate+64 #define VBICire_Vre VBICstate+65 #define VBICqcth VBICstate+66 /* thermal capacitor charge */ #define VBICcqcth VBICstate+67 /* thermal capacitor current */ #define VBICvrth VBICstate+68 #define VBICicth_Vrth VBICstate+69 #define VBICnumStates 70 /* per model data */ typedef struct sVBICmodel { /* model structure for a vbic */ struct GENmodel gen; #define VBICmodType gen.GENmodType #define VBICnextModel(inst) ((struct sVBICmodel *)((inst)->gen.GENnextModel)) #define VBICinstances(inst) ((VBICinstance *)((inst)->gen.GENinstances)) #define VBICmodName gen.GENmodName int VBICtype; double VBICtnom; double VBICextCollResist; double VBICintCollResist; double VBICepiSatVoltage; double VBICepiDoping; double VBIChighCurFac; double VBICextBaseResist; double VBICintBaseResist; double VBICemitterResist; double VBICsubstrateResist; double VBICparBaseResist; double VBICsatCur; double VBICemissionCoeffF; double VBICemissionCoeffR; double VBICdeplCapLimitF; double VBICextOverlapCapBE; double VBICdepletionCapBE; double VBICpotentialBE; double VBICjunctionExpBE; double VBICsmoothCapBE; double VBICextOverlapCapBC; double VBICdepletionCapBC; double VBICepiCharge; double VBICextCapBC; double VBICpotentialBC; double VBICjunctionExpBC; double VBICsmoothCapBC; double VBICextCapSC; double VBICpotentialSC; double VBICjunctionExpSC; double VBICsmoothCapSC; double VBICidealSatCurBE; double VBICportionIBEI; double VBICidealEmissCoeffBE; double VBICnidealSatCurBE; double VBICnidealEmissCoeffBE; double VBICidealSatCurBC; double VBICidealEmissCoeffBC; double VBICnidealSatCurBC; double VBICnidealEmissCoeffBC; double VBICavalanchePar1BC; double VBICavalanchePar2BC; double VBICparasitSatCur; double VBICportionICCP; double VBICparasitFwdEmissCoeff; double VBICidealParasitSatCurBE; double VBICnidealParasitSatCurBE; double VBICidealParasitSatCurBC; double VBICidealParasitEmissCoeffBC; double VBICnidealParasitSatCurBC; double VBICnidealParasitEmissCoeffBC; double VBICearlyVoltF; double VBICearlyVoltR; double VBICrollOffF; double VBICrollOffR; double VBICparRollOff; double VBICtransitTimeF; double VBICvarTransitTimeF; double VBICtransitTimeBiasCoeffF; double VBICtransitTimeFVBC; double VBICtransitTimeHighCurrentF; double VBICtransitTimeR; double VBICdelayTimeF; double VBICfNcoef; double VBICfNexpA; double VBICfNexpB; double VBICtempExpRE; double VBICtempExpRB; double VBICtempExpRBI; double VBICtempExpRC; double VBICtempExpRCI; double VBICtempExpRS; double VBICtempExpVO; double VBICactivEnergyEA; double VBICactivEnergyEAIE; double VBICactivEnergyEAIC; double VBICactivEnergyEAIS; double VBICactivEnergyEANE; double VBICactivEnergyEANC; double VBICactivEnergyEANS; double VBICtempExpIS; double VBICtempExpII; double VBICtempExpIN; double VBICtempExpNF; double VBICtempExpAVC; double VBICthermalResist; double VBICthermalCapacitance; double VBICpunchThroughVoltageBC; double VBICdeplCapCoeff1; double VBICfixedCapacitanceCS; double VBICsgpQBselector; double VBIChighCurrentBetaRolloff; double VBICtempExpIKF; double VBICtempExpRCX; double VBICtempExpRBX; double VBICtempExpRBP; double VBICsepISRR; double VBICtempExpXISR; double VBICdear; double VBICeap; double VBICvbbe; double VBICnbbe; double VBICibbe; double VBICtvbbe1; double VBICtvbbe2; double VBICtnbbe; double VBICebbe; double VBIClocTempDiff; double VBICrevVersion; double VBICrefVersion; double VBICvbeMax; /* maximum voltage over B-E junction */ double VBICvbcMax; /* maximum voltage over B-C junction */ double VBICvceMax; /* maximum voltage over C-E branch */ unsigned VBICtnomGiven : 1; unsigned VBICextCollResistGiven : 1; unsigned VBICintCollResistGiven : 1; unsigned VBICepiSatVoltageGiven : 1; unsigned VBICepiDopingGiven : 1; unsigned VBIChighCurFacGiven : 1; unsigned VBICextBaseResistGiven : 1; unsigned VBICintBaseResistGiven : 1; unsigned VBICemitterResistGiven : 1; unsigned VBICsubstrateResistGiven : 1; unsigned VBICparBaseResistGiven : 1; unsigned VBICsatCurGiven : 1; unsigned VBICemissionCoeffFGiven : 1; unsigned VBICemissionCoeffRGiven : 1; unsigned VBICdeplCapLimitFGiven : 1; unsigned VBICextOverlapCapBEGiven : 1; unsigned VBICdepletionCapBEGiven : 1; unsigned VBICpotentialBEGiven : 1; unsigned VBICjunctionExpBEGiven : 1; unsigned VBICsmoothCapBEGiven : 1; unsigned VBICextOverlapCapBCGiven : 1; unsigned VBICdepletionCapBCGiven : 1; unsigned VBICepiChargeGiven : 1; unsigned VBICextCapBCGiven : 1; unsigned VBICpotentialBCGiven : 1; unsigned VBICjunctionExpBCGiven : 1; unsigned VBICsmoothCapBCGiven : 1; unsigned VBICextCapSCGiven : 1; unsigned VBICpotentialSCGiven : 1; unsigned VBICjunctionExpSCGiven : 1; unsigned VBICsmoothCapSCGiven : 1; unsigned VBICidealSatCurBEGiven : 1; unsigned VBICportionIBEIGiven : 1; unsigned VBICidealEmissCoeffBEGiven : 1; unsigned VBICnidealSatCurBEGiven : 1; unsigned VBICnidealEmissCoeffBEGiven : 1; unsigned VBICidealSatCurBCGiven : 1; unsigned VBICidealEmissCoeffBCGiven : 1; unsigned VBICnidealSatCurBCGiven : 1; unsigned VBICnidealEmissCoeffBCGiven : 1; unsigned VBICavalanchePar1BCGiven : 1; unsigned VBICavalanchePar2BCGiven : 1; unsigned VBICparasitSatCurGiven : 1; unsigned VBICportionICCPGiven : 1; unsigned VBICparasitFwdEmissCoeffGiven : 1; unsigned VBICidealParasitSatCurBEGiven : 1; unsigned VBICnidealParasitSatCurBEGiven : 1; unsigned VBICidealParasitSatCurBCGiven : 1; unsigned VBICidealParasitEmissCoeffBCGiven : 1; unsigned VBICnidealParasitSatCurBCGiven : 1; unsigned VBICnidealParasitEmissCoeffBCGiven : 1; unsigned VBICearlyVoltFGiven : 1; unsigned VBICearlyVoltRGiven : 1; unsigned VBICrollOffFGiven : 1; unsigned VBICrollOffRGiven : 1; unsigned VBICparRollOffGiven : 1; unsigned VBICtransitTimeFGiven : 1; unsigned VBICvarTransitTimeFGiven : 1; unsigned VBICtransitTimeBiasCoeffFGiven : 1; unsigned VBICtransitTimeFVBCGiven : 1; unsigned VBICtransitTimeHighCurrentFGiven : 1; unsigned VBICtransitTimeRGiven : 1; unsigned VBICdelayTimeFGiven : 1; unsigned VBICfNcoefGiven : 1; unsigned VBICfNexpAGiven : 1; unsigned VBICfNexpBGiven : 1; unsigned VBICtempExpREGiven : 1; unsigned VBICtempExpRBGiven : 1; unsigned VBICtempExpRBIGiven : 1; unsigned VBICtempExpRCGiven : 1; unsigned VBICtempExpRCIGiven : 1; unsigned VBICtempExpRSGiven : 1; unsigned VBICtempExpVOGiven : 1; unsigned VBICactivEnergyEAGiven : 1; unsigned VBICactivEnergyEAIEGiven : 1; unsigned VBICactivEnergyEAICGiven : 1; unsigned VBICactivEnergyEAISGiven : 1; unsigned VBICactivEnergyEANEGiven : 1; unsigned VBICactivEnergyEANCGiven : 1; unsigned VBICactivEnergyEANSGiven : 1; unsigned VBICtempExpISGiven : 1; unsigned VBICtempExpIIGiven : 1; unsigned VBICtempExpINGiven : 1; unsigned VBICtempExpNFGiven : 1; unsigned VBICtempExpAVCGiven : 1; unsigned VBICthermalResistGiven : 1; unsigned VBICthermalCapacitanceGiven : 1; unsigned VBICpunchThroughVoltageBCGiven : 1; unsigned VBICdeplCapCoeff1Given : 1; unsigned VBICfixedCapacitanceCSGiven : 1; unsigned VBICsgpQBselectorGiven : 1; unsigned VBIChighCurrentBetaRolloffGiven : 1; unsigned VBICtempExpIKFGiven : 1; unsigned VBICtempExpRCXGiven : 1; unsigned VBICtempExpRBXGiven : 1; unsigned VBICtempExpRBPGiven : 1; unsigned VBICsepISRRGiven : 1; unsigned VBICtempExpXISRGiven : 1; unsigned VBICdearGiven : 1; unsigned VBICeapGiven : 1; unsigned VBICvbbeGiven : 1; unsigned VBICnbbeGiven : 1; unsigned VBICibbeGiven : 1; unsigned VBICtvbbe1Given : 1; unsigned VBICtvbbe2Given : 1; unsigned VBICtnbbeGiven : 1; unsigned VBICebbeGiven : 1; unsigned VBIClocTempDiffGiven : 1; unsigned VBICrevVersionGiven : 1; unsigned VBICrefVersionGiven : 1; unsigned VBICvbeMaxGiven : 1; unsigned VBICvbcMaxGiven : 1; unsigned VBICvceMaxGiven : 1; } VBICmodel; #ifndef NPN #define NPN 1 #define PNP -1 #endif /*NPN*/ /* device parameters */ enum { VBIC_AREA = 1, VBIC_OFF, VBIC_IC, VBIC_IC_VBE, VBIC_IC_VCE, VBIC_TEMP, VBIC_DTEMP, VBIC_M, }; /* model parameters */ enum { VBIC_MOD_NPN = 101, VBIC_MOD_PNP, VBIC_MOD_TNOM, VBIC_MOD_RCX, VBIC_MOD_RCI, VBIC_MOD_VO, VBIC_MOD_GAMM, VBIC_MOD_HRCF, VBIC_MOD_RBX, VBIC_MOD_RBI, VBIC_MOD_RE, VBIC_MOD_RS, VBIC_MOD_RBP, VBIC_MOD_IS, VBIC_MOD_NF, VBIC_MOD_NR, VBIC_MOD_FC, VBIC_MOD_CBEO, VBIC_MOD_CJE, VBIC_MOD_PE, VBIC_MOD_ME, VBIC_MOD_AJE, VBIC_MOD_CBCO, VBIC_MOD_CJC, VBIC_MOD_QCO, VBIC_MOD_CJEP, VBIC_MOD_PC, VBIC_MOD_MC, VBIC_MOD_AJC, VBIC_MOD_CJCP, VBIC_MOD_PS, VBIC_MOD_MS, VBIC_MOD_AJS, VBIC_MOD_IBEI, VBIC_MOD_WBE, VBIC_MOD_NEI, VBIC_MOD_IBEN, VBIC_MOD_NEN, VBIC_MOD_IBCI, VBIC_MOD_NCI, VBIC_MOD_IBCN, VBIC_MOD_NCN, VBIC_MOD_AVC1, VBIC_MOD_AVC2, VBIC_MOD_ISP, VBIC_MOD_WSP, VBIC_MOD_NFP, VBIC_MOD_IBEIP, VBIC_MOD_IBENP, VBIC_MOD_IBCIP, VBIC_MOD_NCIP, VBIC_MOD_IBCNP, VBIC_MOD_NCNP, VBIC_MOD_VEF, VBIC_MOD_VER, VBIC_MOD_IKF, VBIC_MOD_IKR, VBIC_MOD_IKP, VBIC_MOD_TF, VBIC_MOD_QTF, VBIC_MOD_XTF, VBIC_MOD_VTF, VBIC_MOD_ITF, VBIC_MOD_TR, VBIC_MOD_TD, VBIC_MOD_KFN, VBIC_MOD_AFN, VBIC_MOD_BFN, VBIC_MOD_XRE, VBIC_MOD_XRB, VBIC_MOD_XRBI, VBIC_MOD_XRC, VBIC_MOD_XRCI, VBIC_MOD_XRS, VBIC_MOD_XVO, VBIC_MOD_EA, VBIC_MOD_EAIE, VBIC_MOD_EAIC, VBIC_MOD_EAIS, VBIC_MOD_EANE, VBIC_MOD_EANC, VBIC_MOD_EANS, VBIC_MOD_XIS, VBIC_MOD_XII, VBIC_MOD_XIN, VBIC_MOD_TNF, VBIC_MOD_TAVC, VBIC_MOD_RTH, VBIC_MOD_CTH, VBIC_MOD_VRT, VBIC_MOD_ART, VBIC_MOD_CCSO, VBIC_MOD_QBM, VBIC_MOD_NKF, VBIC_MOD_XIKF, VBIC_MOD_XRCX, VBIC_MOD_XRBX, VBIC_MOD_XRBP, VBIC_MOD_ISRR, VBIC_MOD_XISR, VBIC_MOD_DEAR, VBIC_MOD_EAP, VBIC_MOD_VBBE, VBIC_MOD_NBBE, VBIC_MOD_IBBE, VBIC_MOD_TVBBE1, VBIC_MOD_TVBBE2, VBIC_MOD_TNBBE, VBIC_MOD_EBBE, VBIC_MOD_DTEMP, VBIC_MOD_VERS, VBIC_MOD_VREF, VBIC_MOD_VBE_MAX, VBIC_MOD_VBC_MAX, VBIC_MOD_VCE_MAX, }; /* device questions */ enum { VBIC_QUEST_FT = 221, VBIC_QUEST_COLLNODE, VBIC_QUEST_BASENODE, VBIC_QUEST_EMITNODE, VBIC_QUEST_SUBSNODE, VBIC_QUEST_COLLCXNODE, VBIC_QUEST_COLLCINODE, VBIC_QUEST_BASEBXNODE, VBIC_QUEST_BASEBINODE, VBIC_QUEST_BASEBPNODE, VBIC_QUEST_EMITEINODE, VBIC_QUEST_SUBSSINODE, VBIC_QUEST_VBE, VBIC_QUEST_VBC, VBIC_QUEST_CC, VBIC_QUEST_CB, VBIC_QUEST_CE, VBIC_QUEST_CS, VBIC_QUEST_GM, VBIC_QUEST_GO, VBIC_QUEST_GPI, VBIC_QUEST_GMU, VBIC_QUEST_GX, VBIC_QUEST_QBE, VBIC_QUEST_CQBE, VBIC_QUEST_QBC, VBIC_QUEST_CQBC, VBIC_QUEST_QBX, VBIC_QUEST_CQBX, VBIC_QUEST_QBCP, VBIC_QUEST_CQBCP, VBIC_QUEST_CEXBC, VBIC_QUEST_GEQCB, VBIC_QUEST_GCSUB, VBIC_QUEST_GDSUB, VBIC_QUEST_GEQBX, VBIC_QUEST_CBE, VBIC_QUEST_CBEX, VBIC_QUEST_CBC, VBIC_QUEST_CBCX, VBIC_QUEST_CBEP, VBIC_QUEST_CBCP, VBIC_QUEST_POWER, }; /* model questions */ enum { VBIC_MOD_COLLCONDUCT = 301, VBIC_MOD_BASECONDUCT, VBIC_MOD_EMITTERCONDUCT, VBIC_MOD_SUBSTRATECONDUCT, VBIC_MOD_TYPE, }; #include "vbicext.h" #endif /*VBIC*/ tmpk8ny_4pz/src/spicelib/devices/vbic/vbicacld.c0000644000175000017500000002730613546075722022031 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Model Author: 1995 Colin McAndrew Motorola Spice3 Implementation: 2003 Dietmar Warning DAnalyse GmbH **********/ /* * Function to load the COMPLEX circuit matrix using the * small signal parameters saved during a previous DC operating * point analysis. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vbicdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VBICacLoad(GENmodel *inModel, CKTcircuit *ckt) { VBICinstance *here; VBICmodel *model = (VBICmodel*)inModel; double Ibe_Vbei,Ibex_Vbex ,Itzf_Vbei,Itzf_Vbci,Itzr_Vbci,Itzr_Vbei,Ibc_Vbci ,Ibc_Vbei,Ibep_Vbep,Ircx_Vrcx,Irci_Vrci ,Irci_Vbci,Irci_Vbcx,Irbx_Vrbx,Irbi_Vrbi,Irbi_Vbei ,Irbi_Vbci,Ire_Vre,Irbp_Vrbp,Irbp_Vbep,Irbp_Vbci ,Ibcp_Vbcp,Iccp_Vbep,Irs_Vrs,Iccp_Vbci,Iccp_Vbcp; double XQbe_Vbei, XQbe_Vbci, XQbex_Vbex, XQbc_Vbci, XQbcx_Vbcx, XQbep_Vbep, XQbep_Vbci, XQbcp_Vbcp; /* loop through all the models */ for( ; model != NULL; model = VBICnextModel(model)) { /* loop through all the instances of the model */ for( here = VBICinstances(model); here!= NULL; here = VBICnextInstance(here)) { Ibe_Vbei = *(ckt->CKTstate0 + here->VBICibe_Vbei); Ibex_Vbex = *(ckt->CKTstate0 + here->VBICibex_Vbex); Itzf_Vbei = *(ckt->CKTstate0 + here->VBICitzf_Vbei); Itzf_Vbci = *(ckt->CKTstate0 + here->VBICitzf_Vbci); Itzr_Vbci = *(ckt->CKTstate0 + here->VBICitzr_Vbci); Itzr_Vbei = *(ckt->CKTstate0 + here->VBICitzr_Vbei); Ibc_Vbci = *(ckt->CKTstate0 + here->VBICibc_Vbci); Ibc_Vbei = *(ckt->CKTstate0 + here->VBICibc_Vbei); Ibep_Vbep = *(ckt->CKTstate0 + here->VBICibep_Vbep); Irci_Vrci = *(ckt->CKTstate0 + here->VBICirci_Vrci); Irci_Vbci = *(ckt->CKTstate0 + here->VBICirci_Vbci); Irci_Vbcx = *(ckt->CKTstate0 + here->VBICirci_Vbcx); Irbi_Vrbi = *(ckt->CKTstate0 + here->VBICirbi_Vrbi); Irbi_Vbei = *(ckt->CKTstate0 + here->VBICirbi_Vbei); Irbi_Vbci = *(ckt->CKTstate0 + here->VBICirbi_Vbci); Irbp_Vrbp = *(ckt->CKTstate0 + here->VBICirbp_Vrbp); Irbp_Vbep = *(ckt->CKTstate0 + here->VBICirbp_Vbep); Irbp_Vbci = *(ckt->CKTstate0 + here->VBICirbp_Vbci); Ibcp_Vbcp = *(ckt->CKTstate0 + here->VBICibcp_Vbcp); Iccp_Vbep = *(ckt->CKTstate0 + here->VBICiccp_Vbep); Iccp_Vbci = *(ckt->CKTstate0 + here->VBICiccp_Vbci); Iccp_Vbcp = *(ckt->CKTstate0 + here->VBICiccp_Vbcp); Ircx_Vrcx = *(ckt->CKTstate0 + here->VBICircx_Vrcx); Irbx_Vrbx = *(ckt->CKTstate0 + here->VBICirbx_Vrbx); Irs_Vrs = *(ckt->CKTstate0 + here->VBICirs_Vrs); Ire_Vre = *(ckt->CKTstate0 + here->VBICire_Vre); /* c The real part */ /* c Stamp element: Ibe */ *(here->VBICbaseBIBaseBIPtr) += Ibe_Vbei; *(here->VBICbaseBIEmitEIPtr) += -Ibe_Vbei; *(here->VBICemitEIBaseBIPtr) += -Ibe_Vbei; *(here->VBICemitEIEmitEIPtr) += Ibe_Vbei; /* c Stamp element: Ibex */ *(here->VBICbaseBXBaseBXPtr) += Ibex_Vbex; *(here->VBICbaseBXEmitEIPtr) += -Ibex_Vbex; *(here->VBICemitEIBaseBXPtr) += -Ibex_Vbex; *(here->VBICemitEIEmitEIPtr) += Ibex_Vbex; /* c Stamp element: Itzf */ *(here->VBICcollCIBaseBIPtr) += Itzf_Vbei; *(here->VBICcollCIEmitEIPtr) += -Itzf_Vbei; *(here->VBICcollCIBaseBIPtr) += Itzf_Vbci; *(here->VBICcollCICollCIPtr) += -Itzf_Vbci; *(here->VBICemitEIBaseBIPtr) += -Itzf_Vbei; *(here->VBICemitEIEmitEIPtr) += Itzf_Vbei; *(here->VBICemitEIBaseBIPtr) += -Itzf_Vbci; *(here->VBICemitEICollCIPtr) += Itzf_Vbci; /* c Stamp element: Itzr */ *(here->VBICemitEIBaseBIPtr) += Itzr_Vbci; *(here->VBICemitEICollCIPtr) += -Itzr_Vbci; *(here->VBICemitEIBaseBIPtr) += Itzr_Vbei; *(here->VBICemitEIEmitEIPtr) += -Itzr_Vbei; *(here->VBICcollCIBaseBIPtr) += -Itzr_Vbci; *(here->VBICcollCICollCIPtr) += Itzr_Vbci; *(here->VBICcollCIBaseBIPtr) += -Itzr_Vbei; *(here->VBICcollCIEmitEIPtr) += Itzr_Vbei; /* c Stamp element: Ibc */ *(here->VBICbaseBIBaseBIPtr) += Ibc_Vbci; *(here->VBICbaseBICollCIPtr) += -Ibc_Vbci; *(here->VBICbaseBIBaseBIPtr) += Ibc_Vbei; *(here->VBICbaseBIEmitEIPtr) += -Ibc_Vbei; *(here->VBICcollCIBaseBIPtr) += -Ibc_Vbci; *(here->VBICcollCICollCIPtr) += Ibc_Vbci; *(here->VBICcollCIBaseBIPtr) += -Ibc_Vbei; *(here->VBICcollCIEmitEIPtr) += Ibc_Vbei; /* c Stamp element: Ibep */ *(here->VBICbaseBXBaseBXPtr) += Ibep_Vbep; *(here->VBICbaseBXBaseBPPtr) += -Ibep_Vbep; *(here->VBICbaseBPBaseBXPtr) += -Ibep_Vbep; *(here->VBICbaseBPBaseBPPtr) += Ibep_Vbep; /* c Stamp element: Ircx */ *(here->VBICcollCollPtr) += Ircx_Vrcx; *(here->VBICcollCXCollCXPtr) += Ircx_Vrcx; *(here->VBICcollCXCollPtr) += -Ircx_Vrcx; *(here->VBICcollCollCXPtr) += -Ircx_Vrcx; /* c Stamp element: Irci */ *(here->VBICcollCXCollCXPtr) += Irci_Vrci; *(here->VBICcollCXCollCIPtr) += -Irci_Vrci; *(here->VBICcollCXBaseBIPtr) += Irci_Vbci; *(here->VBICcollCXCollCIPtr) += -Irci_Vbci; *(here->VBICcollCXBaseBIPtr) += Irci_Vbcx; *(here->VBICcollCXCollCXPtr) += -Irci_Vbcx; *(here->VBICcollCICollCXPtr) += -Irci_Vrci; *(here->VBICcollCICollCIPtr) += Irci_Vrci; *(here->VBICcollCIBaseBIPtr) += -Irci_Vbci; *(here->VBICcollCICollCIPtr) += Irci_Vbci; *(here->VBICcollCIBaseBIPtr) += -Irci_Vbcx; *(here->VBICcollCICollCXPtr) += Irci_Vbcx; /* c Stamp element: Irbx */ *(here->VBICbaseBasePtr) += Irbx_Vrbx; *(here->VBICbaseBXBaseBXPtr) += Irbx_Vrbx; *(here->VBICbaseBXBasePtr) += -Irbx_Vrbx; *(here->VBICbaseBaseBXPtr) += -Irbx_Vrbx; /* c Stamp element: Irbi */ *(here->VBICbaseBXBaseBXPtr) += Irbi_Vrbi; *(here->VBICbaseBXBaseBIPtr) += -Irbi_Vrbi; *(here->VBICbaseBXBaseBIPtr) += Irbi_Vbei; *(here->VBICbaseBXEmitEIPtr) += -Irbi_Vbei; *(here->VBICbaseBXBaseBIPtr) += Irbi_Vbci; *(here->VBICbaseBXCollCIPtr) += -Irbi_Vbci; *(here->VBICbaseBIBaseBXPtr) += -Irbi_Vrbi; *(here->VBICbaseBIBaseBIPtr) += Irbi_Vrbi; *(here->VBICbaseBIBaseBIPtr) += -Irbi_Vbei; *(here->VBICbaseBIEmitEIPtr) += Irbi_Vbei; *(here->VBICbaseBIBaseBIPtr) += -Irbi_Vbci; *(here->VBICbaseBICollCIPtr) += Irbi_Vbci; /* c Stamp element: Ire */ *(here->VBICemitEmitPtr) += Ire_Vre; *(here->VBICemitEIEmitEIPtr) += Ire_Vre; *(here->VBICemitEIEmitPtr) += -Ire_Vre; *(here->VBICemitEmitEIPtr) += -Ire_Vre; /* c Stamp element: Irbp */ *(here->VBICbaseBPBaseBPPtr) += Irbp_Vrbp; *(here->VBICbaseBPCollCXPtr) += -Irbp_Vrbp; *(here->VBICbaseBPBaseBXPtr) += Irbp_Vbep; *(here->VBICbaseBPBaseBPPtr) += -Irbp_Vbep; *(here->VBICbaseBPBaseBIPtr) += Irbp_Vbci; *(here->VBICbaseBPCollCIPtr) += -Irbp_Vbci; *(here->VBICcollCXBaseBPPtr) += -Irbp_Vrbp; *(here->VBICcollCXCollCXPtr) += Irbp_Vrbp; *(here->VBICcollCXBaseBXPtr) += -Irbp_Vbep; *(here->VBICcollCXBaseBPPtr) += Irbp_Vbep; *(here->VBICcollCXBaseBIPtr) += -Irbp_Vbci; *(here->VBICcollCXCollCIPtr) += Irbp_Vbci; /* c Stamp element: Ibcp */ *(here->VBICsubsSISubsSIPtr) += Ibcp_Vbcp; *(here->VBICsubsSIBaseBPPtr) += -Ibcp_Vbcp; *(here->VBICbaseBPSubsSIPtr) += -Ibcp_Vbcp; *(here->VBICbaseBPBaseBPPtr) += Ibcp_Vbcp; /* c Stamp element: Iccp */ *(here->VBICbaseBXBaseBXPtr) += Iccp_Vbep; *(here->VBICbaseBXBaseBPPtr) += -Iccp_Vbep; *(here->VBICbaseBXBaseBIPtr) += Iccp_Vbci; *(here->VBICbaseBXCollCIPtr) += -Iccp_Vbci; *(here->VBICbaseBXSubsSIPtr) += Iccp_Vbcp; *(here->VBICbaseBXBaseBPPtr) += -Iccp_Vbcp; *(here->VBICsubsSIBaseBXPtr) += -Iccp_Vbep; *(here->VBICsubsSIBaseBPPtr) += Iccp_Vbep; *(here->VBICsubsSIBaseBIPtr) += -Iccp_Vbci; *(here->VBICsubsSICollCIPtr) += Iccp_Vbci; *(here->VBICsubsSISubsSIPtr) += -Iccp_Vbcp; *(here->VBICsubsSIBaseBPPtr) += Iccp_Vbcp; /* c Stamp element: Irs */ *(here->VBICsubsSubsPtr) += Irs_Vrs; *(here->VBICsubsSISubsSIPtr) += Irs_Vrs; *(here->VBICsubsSISubsPtr) += -Irs_Vrs; *(here->VBICsubsSubsSIPtr) += -Irs_Vrs; /* c The complex part */ XQbe_Vbei = *(ckt->CKTstate0 + here->VBICcqbe) * ckt->CKTomega; XQbe_Vbci = *(ckt->CKTstate0 + here->VBICcqbeci) * ckt->CKTomega; XQbex_Vbex = *(ckt->CKTstate0 + here->VBICcqbex) * ckt->CKTomega; XQbc_Vbci = *(ckt->CKTstate0 + here->VBICcqbc) * ckt->CKTomega; XQbcx_Vbcx = *(ckt->CKTstate0 + here->VBICcqbcx) * ckt->CKTomega; XQbep_Vbep = *(ckt->CKTstate0 + here->VBICcqbep) * ckt->CKTomega; XQbep_Vbci = *(ckt->CKTstate0 + here->VBICcqbepci) * ckt->CKTomega; XQbcp_Vbcp = *(ckt->CKTstate0 + here->VBICcqbcp) * ckt->CKTomega; /* c Stamp element: Qbe */ *(here->VBICbaseBIBaseBIPtr + 1) += XQbe_Vbei; *(here->VBICbaseBIEmitEIPtr + 1) += -XQbe_Vbei; *(here->VBICbaseBIBaseBIPtr + 1) += XQbe_Vbci; *(here->VBICbaseBICollCIPtr + 1) += -XQbe_Vbci; *(here->VBICemitEIBaseBIPtr + 1) += -XQbe_Vbei; *(here->VBICemitEIEmitEIPtr + 1) += XQbe_Vbei; *(here->VBICemitEIBaseBIPtr + 1) += -XQbe_Vbci; *(here->VBICemitEICollCIPtr + 1) += XQbe_Vbci; /* c Stamp element: Qbex */ *(here->VBICbaseBXBaseBXPtr + 1) += XQbex_Vbex; *(here->VBICbaseBXEmitEIPtr + 1) += -XQbex_Vbex; *(here->VBICemitEIBaseBXPtr + 1) += -XQbex_Vbex; *(here->VBICemitEIEmitEIPtr + 1) += XQbex_Vbex; /* c Stamp element: Qbc */ *(here->VBICbaseBIBaseBIPtr + 1) += XQbc_Vbci; *(here->VBICbaseBICollCIPtr + 1) += -XQbc_Vbci; *(here->VBICcollCIBaseBIPtr + 1) += -XQbc_Vbci; *(here->VBICcollCICollCIPtr + 1) += XQbc_Vbci; /* c Stamp element: Qbcx */ *(here->VBICbaseBIBaseBIPtr + 1) += XQbcx_Vbcx; *(here->VBICbaseBICollCXPtr + 1) += -XQbcx_Vbcx; *(here->VBICcollCXBaseBIPtr + 1) += -XQbcx_Vbcx; *(here->VBICcollCXCollCXPtr + 1) += XQbcx_Vbcx; /* c Stamp element: Qbep */ *(here->VBICbaseBXBaseBXPtr + 1) += XQbep_Vbep; *(here->VBICbaseBXBaseBPPtr + 1) += -XQbep_Vbep; *(here->VBICbaseBXBaseBIPtr + 1) += XQbep_Vbci; *(here->VBICbaseBXCollCIPtr + 1) += -XQbep_Vbci; *(here->VBICbaseBPBaseBXPtr + 1) += -XQbep_Vbep; *(here->VBICbaseBPBaseBPPtr + 1) += XQbep_Vbep; *(here->VBICbaseBPBaseBIPtr + 1) += -XQbep_Vbci; *(here->VBICbaseBPCollCIPtr + 1) += XQbep_Vbci; /* c Stamp element: Qbcp */ *(here->VBICsubsSISubsSIPtr + 1) += XQbcp_Vbcp; *(here->VBICsubsSIBaseBPPtr + 1) += -XQbcp_Vbcp; *(here->VBICbaseBPSubsSIPtr + 1) += -XQbcp_Vbcp; *(here->VBICbaseBPBaseBPPtr + 1) += XQbcp_Vbcp; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vbic/vbicnoise.c0000644000175000017500000002622713546075722022244 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Gary W. Ng Model Author: 1995 Colin McAndrew Motorola Spice3 Implementation: 2003 Dietmar Warning DAnalyse GmbH **********/ #include "ngspice/ngspice.h" #include "vbicdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" /* * VBICnoise (mode, operation, firstModel, ckt, data, OnDens) * * This routine names and evaluates all of the noise sources * associated with VBIC's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the VBIC's is summed with the variable "OnDens". */ int VBICnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; VBICmodel *firstModel = (VBICmodel *) genmodel; VBICmodel *model; VBICinstance *inst; double tempOnoise; double tempInoise; double noizDens[VBICNSRCS]; double lnNdens[VBICNSRCS]; int i; /* define the names of the noise sources */ static char *VBICnNames[VBICNSRCS] = { /* Note that we have to keep the order consistent with the strchr definitions in VBICdefs.h */ "_rc", /* noise due to rc */ "_rci", /* noise due to rci */ "_rb", /* noise due to rb */ "_rbi", /* noise due to rbi */ "_re", /* noise due to re */ "_rbp", /* noise due to rbp */ "_rs", /* noise due to rs */ "_ic", /* noise due to ic */ "_ib", /* noise due to ib */ "_ibep", /* noise due to ibep */ "_iccp", /* noise due to iccp */ "_1overfbe", /* flicker (1/f) noise ibe */ "_1overfbep", /* flicker (1/f) noise ibep */ "" /* total transistor noise */ }; for (model=firstModel; model != NULL; model=VBICnextModel(model)) { for (inst=VBICinstances(model); inst != NULL; inst=VBICnextInstance(inst)) { switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i=0; i < VBICNSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_%s%s", inst->VBICname, VBICnNames[i]); } break; case INT_NOIZ: for (i=0; i < VBICNSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total_%s%s", inst->VBICname, VBICnNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total_%s%s", inst->VBICname, VBICnNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: NevalSrc(&noizDens[VBICRCNOIZ],&lnNdens[VBICRCNOIZ], ckt,THERMNOISE,inst->VBICcollCXNode,inst->VBICcollNode, *(ckt->CKTstate0 + inst->VBICircx_Vrcx)); NevalSrc(&noizDens[VBICRCINOIZ],&lnNdens[VBICRCINOIZ], ckt,THERMNOISE,inst->VBICcollCXNode,inst->VBICcollCINode, *(ckt->CKTstate0 + inst->VBICirci_Vrci)); NevalSrc(&noizDens[VBICRBNOIZ],&lnNdens[VBICRBNOIZ], ckt,THERMNOISE,inst->VBICbaseBXNode,inst->VBICbaseNode, *(ckt->CKTstate0 + inst->VBICirbx_Vrbx)); NevalSrc(&noizDens[VBICRBINOIZ],&lnNdens[VBICRBINOIZ], ckt,THERMNOISE,inst->VBICbaseBXNode,inst->VBICbaseBINode, *(ckt->CKTstate0 + inst->VBICirbi_Vrbi)); NevalSrc(&noizDens[VBICRENOIZ],&lnNdens[VBICRENOIZ], ckt,THERMNOISE,inst->VBICemitEINode,inst->VBICemitNode, *(ckt->CKTstate0 + inst->VBICire_Vre)); NevalSrc(&noizDens[VBICRBPNOIZ],&lnNdens[VBICRBPNOIZ], ckt,THERMNOISE,inst->VBICemitEINode,inst->VBICemitNode, *(ckt->CKTstate0 + inst->VBICirbp_Vrbp)); NevalSrc(&noizDens[VBICRSNOIZ],&lnNdens[VBICRSNOIZ], ckt,THERMNOISE,inst->VBICsubsSINode,inst->VBICsubsNode, *(ckt->CKTstate0 + inst->VBICirs_Vrs)); NevalSrc(&noizDens[VBICICNOIZ],&lnNdens[VBICICNOIZ], ckt,SHOTNOISE,inst->VBICcollCINode, inst->VBICemitEINode, *(ckt->CKTstate0 + inst->VBICitzf)); NevalSrc(&noizDens[VBICIBNOIZ],&lnNdens[VBICIBNOIZ], ckt,SHOTNOISE,inst->VBICbaseBINode, inst->VBICemitEINode, *(ckt->CKTstate0 + inst->VBICibe)); NevalSrc(&noizDens[VBICIBEPNOIZ],&lnNdens[VBICIBEPNOIZ], ckt,SHOTNOISE,inst->VBICbaseBXNode, inst->VBICbaseBPNode, *(ckt->CKTstate0 + inst->VBICibep)); NevalSrc(&noizDens[VBICICCPNOIZ],&lnNdens[VBICICCPNOIZ], ckt,SHOTNOISE,inst->VBICbaseBXNode, inst->VBICsubsSINode, *(ckt->CKTstate0 + inst->VBICiccp)); NevalSrc(&noizDens[VBICFLBENOIZ], NULL, ckt, N_GAIN,inst->VBICbaseBINode, inst->VBICemitEINode, (double)0.0); noizDens[VBICFLBENOIZ] *= inst->VBICm * model->VBICfNcoef * exp(model->VBICfNexpA * log(MAX(fabs(*(ckt->CKTstate0 + inst->VBICibe)/inst->VBICm),N_MINLOG))) / pow(data->freq, model->VBICfNexpB); lnNdens[VBICFLBENOIZ] = log(MAX(noizDens[VBICFLBENOIZ],N_MINLOG)); NevalSrc(&noizDens[VBICFLBEPNOIZ], NULL, ckt, N_GAIN,inst->VBICbaseBXNode, inst->VBICbaseBPNode, (double)0.0); noizDens[VBICFLBEPNOIZ] *= inst->VBICm * model->VBICfNcoef * exp(model->VBICfNexpA * log(MAX(fabs(*(ckt->CKTstate0 + inst->VBICibep)/inst->VBICm),N_MINLOG))) / pow(data->freq, model->VBICfNexpB); lnNdens[VBICFLBEPNOIZ] = log(MAX(noizDens[VBICFLBEPNOIZ],N_MINLOG)); noizDens[VBICTOTNOIZ] = noizDens[VBICRCNOIZ] + noizDens[VBICRCINOIZ] + noizDens[VBICRBNOIZ] + noizDens[VBICRBINOIZ] + noizDens[VBICRENOIZ] + noizDens[VBICRBPNOIZ] + noizDens[VBICICNOIZ] + noizDens[VBICIBNOIZ] + noizDens[VBICIBEPNOIZ] + noizDens[VBICFLBENOIZ] + noizDens[VBICFLBEPNOIZ]; lnNdens[VBICTOTNOIZ] = log(noizDens[VBICTOTNOIZ]); *OnDens += noizDens[VBICTOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to */ /* initialize our "history" variables */ for (i=0; i < VBICNSRCS; i++) { inst->VBICnVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i=0; i < VBICNSRCS; i++) { inst->VBICnVar[OUTNOIZ][i] = 0.0; inst->VBICnVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0 (we have to integrate) */ /* In order to get the best curve fit, we have to integrate each component separately */ for (i=0; i < VBICNSRCS; i++) { if (i != VBICTOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], inst->VBICnVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv , lnNdens[i] + data->lnGainInv, inst->VBICnVar[LNLSTDENS][i] + data->lnGainInv, data); inst->VBICnVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { inst->VBICnVar[OUTNOIZ][i] += tempOnoise; inst->VBICnVar[OUTNOIZ][VBICTOTNOIZ] += tempOnoise; inst->VBICnVar[INNOIZ][i] += tempInoise; inst->VBICnVar[INNOIZ][VBICTOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i=0; i < VBICNSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i=0; i < VBICNSRCS; i++) { data->outpVector[data->outNumber++] = inst->VBICnVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = inst->VBICnVar[INNOIZ][i]; } } /* if */ break; } /* switch (mode) */ break; case N_CLOSE: return (OK); /* do nothing, the main calling routine will close */ break; /* the plots */ } /* switch (operation) */ } /* for inst */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/vbic/vbicext.h0000644000175000017500000000213713546075722021726 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Model Author: 1995 Colin McAndrew Motorola Spice3 Implementation: 2003 Dietmar Warning DAnalyse GmbH **********/ #ifndef __VBICEXT_H #define __VBICEXT_H extern int VBICacLoad(GENmodel *,CKTcircuit*); extern int VBICask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*); extern int VBICconvTest(GENmodel*,CKTcircuit*); extern int VBICdelete(GENinstance*); extern int VBICgetic(GENmodel*,CKTcircuit*); extern int VBICload(GENmodel*,CKTcircuit*); extern int VBICmAsk(CKTcircuit*,GENmodel*,int,IFvalue*); extern int VBICmParam(int,IFvalue*,GENmodel*); extern int VBICparam(int,IFvalue*,GENinstance*,IFvalue*); extern int VBICpzLoad(GENmodel*, CKTcircuit*, SPcomplex*); extern int VBICsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int VBICunsetup(GENmodel*,CKTcircuit*); extern int VBICtemp(GENmodel*,CKTcircuit*); extern int VBICtrunc(GENmodel*,CKTcircuit*,double*); extern int VBICnoise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int VBICsoaCheck(CKTcircuit *, GENmodel *); #endif tmpk8ny_4pz/src/spicelib/devices/vbic/vbicload.c0000644000175000017500000051452013546075722022044 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Model Author: 1995 Colin McAndrew Motorola Spice3 Implementation: 2003 Dietmar Warning DAnalyse GmbH **********/ /* * This is the function called each iteration to evaluate the * VBICs in the circuit and load them into the matrix as appropriate */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vbicdefs.h" #include "ngspice/const.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" int vbic_4T_et_cf_fj(double *, double *,double *,double *,double *,double *,double *, double *,double *,double *,double *,double *,double *, double *, double *,double *,double *,double *,double *,double *, double *, double *,double *,double *,double *,double *,double *, double *, double *,double *,double *,double *,double *,double *, double *, double *,double *,double *,double *,double *,double *, double *, double *,double *,double *,double *,double *,double *, double *, double *,double *,double *,double *,double *,double *, double *, double *,double *,double *,double *,double *,double *, double *, double *,double *,double *,double *,double *,double *, double *, double *,double *,double *,double *,double *,double *, double *, double *,double *,double *,double *,double *,double *, double *, double *,double *,double *,double *,double *,double *, double *, double *,double *,double *,double *,double *,double *, double *, double *,double *,double *,double *,double *,double *, double *, double *,double *,double *,double *,double *,double *, double *, double *,double *,double *,double *,double *,double *, double *, double *,double *); /* VBIClimitlog(deltemp, deltemp_old, LIM_TOL, check) * Logarithmic damping the per-iteration change of deltemp beyond LIM_TOL. */ static double VBIClimitlog( double deltemp, double deltemp_old, double LIM_TOL, int *check) { *check = 0; if (isnan (deltemp) || isnan (deltemp_old)) { fprintf(stderr, "Alberto says: YOU TURKEY! The limiting function received NaN.\n"); fprintf(stderr, "New prediction returns to 0.0!\n"); deltemp = 0.0; *check = 1; } /* Logarithmic damping of deltemp beyond LIM_TOL */ if (deltemp > deltemp_old + LIM_TOL) { deltemp = deltemp_old + LIM_TOL + log10((deltemp-deltemp_old)/LIM_TOL); *check = 1; } else if (deltemp < deltemp_old - LIM_TOL) { deltemp = deltemp_old - LIM_TOL - log10((deltemp_old-deltemp)/LIM_TOL); *check = 1; } return deltemp; } int VBICload(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current resistance value into the * sparse matrix previously provided */ { VBICmodel *model = (VBICmodel*)inModel; VBICinstance *here; double p[108] ,Vrth=0.0,Vbei,Vbex,Vbci,Vbep,Vbcp ,Vrcx,Vbcx,Vrci,Vrbx,Vrbi,Vre,Vrbp ,Vrs,Vbe,Vbc,Vcei=0.0,Vcep=0.0,Ibe,Ibe_Vrth=0.0 ,Ibe_Vbei,Ibex,Ibex_Vrth=0.0,Ibex_Vbex,Itzf,Itzf_Vrth=0.0,Itzf_Vbei ,Itzf_Vbci,Itzr,Itzr_Vrth=0.0,Itzr_Vbci,Itzr_Vbei,Ibc,Ibc_Vrth=0.0 ,Ibc_Vbci,Ibc_Vbei,Ibep,Ibep_Vrth=0.0,Ibep_Vbep,Ircx,Ircx_Vrcx ,Ircx_Vrth=0.0,Irci,Irci_Vrci,Irci_Vrth=0.0,Irci_Vbci,Irci_Vbcx,Irbx ,Irbx_Vrbx,Irbx_Vrth=0.0,Irbi,Irbi_Vrbi,Irbi_Vrth=0.0,Irbi_Vbei,Irbi_Vbci ,Ire,Ire_Vre,Ire_Vrth=0.0,Irbp,Irbp_Vrbp,Irbp_Vrth=0.0,Irbp_Vbep ,Irbp_Vbci,Qbe,Qbe_Vrth,Qbe_Vbei,Qbe_Vbci,Qbex,Qbex_Vrth ,Qbex_Vbex,Qbc,Qbc_Vrth,Qbc_Vbci,Qbcx,Qbcx_Vrth,Qbcx_Vbcx ,Qbep,Qbep_Vrth,Qbep_Vbep,Qbep_Vbci,Qbeo,Qbeo_Vbe,Qbco ,Qbco_Vbc,Ibcp,Ibcp_Vrth=0.0,Ibcp_Vbcp,Iccp,Iccp_Vrth=0.0,Iccp_Vbep ,Iccp_Vbci,Iccp_Vbcp,Irs,Irs_Vrs,Irs_Vrth=0.0,Qbcp,Qbcp_Vrth ,Qbcp_Vbcp,Irth,Irth_Vrth=0.0,Ith=0.0,Ith_Vrth=0.0,Ith_Vbei=0.0,Ith_Vbci=0.0 ,Ith_Vcei=0.0,Ith_Vbex=0.0,Ith_Vbep=0.0,Ith_Vrs=0.0,Ith_Vbcp=0.0,Ith_Vcep=0.0,Ith_Vrcx=0.0 ,Ith_Vrci=0.0,Ith_Vbcx=0.0,Ith_Vrbx=0.0,Ith_Vrbi=0.0,Ith_Vre=0.0,Ith_Vrbp=0.0,Qcth ,Qcth_Vrth,SCALE; int iret; double vce; #ifndef PREDICTOR double xfact; #endif double vt; double delvbei; double delvbex; double delvbci; double delvbcx; double delvbep; double delvrci; double delvrbi; double delvrbp; double delvbcp; double ibehat; double ibexhat; double itzfhat; double itzrhat; double ibchat; double ibephat; double ircihat; double irbihat; double irbphat; double ibcphat; double iccphat; double ceq, geq, rhs_current; int icheck=1; int ichk1, ichk2, ichk3, ichk4, ichk5, ichk6; int error; double gqbeo, cqbeo, gqbco, cqbco, gbcx, cbcx; double Icth, Icth_Vrth, delvrth; /* loop through all the models */ for( ; model != NULL; model = VBICnextModel(model)) { /* loop through all the instances of the model */ for (here = VBICinstances(model); here != NULL ; here=VBICnextInstance(here)) { vt = here->VBICtemp * CONSTKoverQ; gbcx = 0.0; cbcx = 0.0; gqbeo = 0.0; cqbeo = 0.0; gqbco = 0.0; cqbco = 0.0; Icth = 0.0, Icth_Vrth = 0.0; /* * model parameters */ p[0] = model->VBICtnom; p[1] = here->VBICtextCollResist; p[2] = here->VBICtintCollResist; p[3] = here->VBICtepiSatVoltage; p[4] = here->VBICtepiDoping; p[5] = model->VBIChighCurFac; p[6] = here->VBICtextBaseResist; p[7] = here->VBICtintBaseResist; p[8] = here->VBICtemitterResist; p[9] = here->VBICtsubstrateResist; p[10] = here->VBICtparBaseResist; p[11] = here->VBICtsatCur; p[12] = here->VBICtemissionCoeffF; p[13] = here->VBICtemissionCoeffR; p[14] = model->VBICdeplCapLimitF; p[15] = model->VBICextOverlapCapBE; p[16] = here->VBICtdepletionCapBE; p[17] = here->VBICtpotentialBE; p[18] = model->VBICjunctionExpBE; p[19] = model->VBICsmoothCapBE; p[20] = model->VBICextOverlapCapBC; p[21] = here->VBICtdepletionCapBC; p[22] = model->VBICepiCharge; p[23] = here->VBICtextCapBC; p[24] = here->VBICtpotentialBC; p[25] = model->VBICjunctionExpBC; p[26] = model->VBICsmoothCapBC; p[27] = here->VBICtextCapSC; p[28] = here->VBICtpotentialSC; p[29] = model->VBICjunctionExpSC; p[30] = model->VBICsmoothCapSC; p[31] = here->VBICtidealSatCurBE; p[32] = model->VBICportionIBEI; p[33] = model->VBICidealEmissCoeffBE; p[34] = here->VBICtnidealSatCurBE; p[35] = model->VBICnidealEmissCoeffBE; p[36] = here->VBICtidealSatCurBC; p[37] = model->VBICidealEmissCoeffBC; p[38] = here->VBICtnidealSatCurBC; p[39] = model->VBICnidealEmissCoeffBC; p[40] = model->VBICavalanchePar1BC; p[41] = here->VBICtavalanchePar2BC; p[42] = here->VBICtparasitSatCur; p[43] = model->VBICportionICCP; p[44] = model->VBICparasitFwdEmissCoeff; p[45] = here->VBICtidealParasitSatCurBE; p[46] = here->VBICtnidealParasitSatCurBE; p[47] = here->VBICtidealParasitSatCurBC; p[48] = model->VBICidealParasitEmissCoeffBC; p[49] = here->VBICtnidealParasitSatCurBC; p[50] = model->VBICnidealParasitEmissCoeffBC; p[51] = model->VBICearlyVoltF; p[52] = model->VBICearlyVoltR; p[53] = here->VBICtrollOffF; p[54] = model->VBICrollOffR; p[55] = model->VBICparRollOff; p[56] = model->VBICtransitTimeF; p[57] = model->VBICvarTransitTimeF; p[58] = model->VBICtransitTimeBiasCoeffF; p[59] = model->VBICtransitTimeFVBC; p[60] = model->VBICtransitTimeHighCurrentF; p[61] = model->VBICtransitTimeR; p[62] = model->VBICdelayTimeF; p[63] = model->VBICfNcoef; p[64] = model->VBICfNexpA; p[65] = model->VBICfNexpB; p[66] = model->VBICtempExpRE; p[67] = model->VBICtempExpRBI; p[68] = model->VBICtempExpRCI; p[69] = model->VBICtempExpRS; p[70] = model->VBICtempExpVO; p[71] = model->VBICactivEnergyEA; p[72] = model->VBICactivEnergyEAIE; p[73] = model->VBICactivEnergyEAIC; p[74] = model->VBICactivEnergyEAIS; p[75] = model->VBICactivEnergyEANE; p[76] = model->VBICactivEnergyEANC; p[77] = model->VBICactivEnergyEANS; p[78] = model->VBICtempExpIS; p[79] = model->VBICtempExpII; p[80] = model->VBICtempExpIN; p[81] = model->VBICtempExpNF; p[82] = model->VBICtempExpAVC; p[83] = model->VBICthermalResist; p[84] = model->VBICthermalCapacitance; p[85] = model->VBICpunchThroughVoltageBC; p[86] = model->VBICdeplCapCoeff1; p[87] = model->VBICfixedCapacitanceCS; p[88] = model->VBICsgpQBselector; p[89] = model->VBIChighCurrentBetaRolloff; p[90] = model->VBICtempExpIKF; p[91] = model->VBICtempExpRCX; p[92] = model->VBICtempExpRBX; p[93] = model->VBICtempExpRBP; p[94] = here->VBICtsepISRR; p[95] = model->VBICtempExpXISR; p[96] = model->VBICdear; p[97] = model->VBICeap; p[98] = here->VBICtvbbe; p[99] = here->VBICtnbbe; p[100] = model->VBICibbe; p[101] = model->VBICtvbbe1; p[102] = model->VBICtvbbe2; p[103] = model->VBICtnbbe; p[104] = model->VBICebbe; p[105] = model->VBIClocTempDiff; p[106] = model->VBICrevVersion; p[107] = model->VBICrefVersion; SCALE = here->VBICarea * here->VBICm; /* * initialization */ icheck=1; if(ckt->CKTmode & MODEINITSMSIG) { Vbe = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseNode)- *(ckt->CKTrhsOld+here->VBICemitNode)); Vbc = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseNode)- *(ckt->CKTrhsOld+here->VBICcollNode)); Vbei = *(ckt->CKTstate0 + here->VBICvbei); Vbex = *(ckt->CKTstate0 + here->VBICvbex); Vbci = *(ckt->CKTstate0 + here->VBICvbci); Vbcx = *(ckt->CKTstate0 + here->VBICvbcx); Vbep = *(ckt->CKTstate0 + here->VBICvbep); Vrci = *(ckt->CKTstate0 + here->VBICvrci); Vrbi = *(ckt->CKTstate0 + here->VBICvrbi); Vrbp = *(ckt->CKTstate0 + here->VBICvrbp); Vrcx = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICcollNode)- *(ckt->CKTrhsOld+here->VBICcollCXNode)); Vrbx = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseNode)- *(ckt->CKTrhsOld+here->VBICbaseBXNode)); Vre = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICemitNode)- *(ckt->CKTrhsOld+here->VBICemitEINode)); Vbcp = *(ckt->CKTstate0 + here->VBICvbcp); Vrs = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICsubsNode)- *(ckt->CKTrhsOld+here->VBICsubsSINode)); if (here->VBIC_selfheat) Vrth = *(ckt->CKTstate0 + here->VBICvrth); } else if(ckt->CKTmode & MODEINITTRAN) { Vbe = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseNode)- *(ckt->CKTrhsOld+here->VBICemitNode)); Vbc = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseNode)- *(ckt->CKTrhsOld+here->VBICcollNode)); Vbei = *(ckt->CKTstate1 + here->VBICvbei); Vbex = *(ckt->CKTstate1 + here->VBICvbex); Vbci = *(ckt->CKTstate1 + here->VBICvbci); Vbcx = *(ckt->CKTstate1 + here->VBICvbcx); Vbep = *(ckt->CKTstate1 + here->VBICvbep); Vrci = *(ckt->CKTstate1 + here->VBICvrci); Vrbi = *(ckt->CKTstate1 + here->VBICvrbi); Vrbp = *(ckt->CKTstate1 + here->VBICvrbp); Vrcx = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICcollNode)- *(ckt->CKTrhsOld+here->VBICcollCXNode)); Vrbx = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseNode)- *(ckt->CKTrhsOld+here->VBICbaseBXNode)); Vre = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICemitNode)- *(ckt->CKTrhsOld+here->VBICemitEINode)); Vbcp = *(ckt->CKTstate1 + here->VBICvbcp); Vrs = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICsubsNode)- *(ckt->CKTrhsOld+here->VBICsubsSINode)); if (here->VBIC_selfheat) Vrth = *(ckt->CKTstate1 + here->VBICvrth); } else if((ckt->CKTmode & MODEINITJCT) && (ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)){ Vbe=model->VBICtype*here->VBICicVBE; Vbei=Vbex=Vbe; vce=model->VBICtype*here->VBICicVCE; Vbc=Vbe-vce; Vbci=Vbcx=Vbc; Vbep=Vbcp=0.0; Vrci=Vrbi=Vrbp=0.0; Vrcx=Vrbx=Vre=Vrs=0.0; Vrth = 0.0, Icth = 0.0, Icth_Vrth = 0.0; } else if((ckt->CKTmode & MODEINITJCT) && (here->VBICoff==0)) { Vbe=Vbei=Vbex=model->VBICtype*here->VBICtVcrit; Vbc=Vbci=Vbcx=Vbep=0.0; Vbcp=Vbc-Vbe; Vrci=Vrbi=Vrbp=0.0; Vrcx=Vrbx=Vre=Vrs=0.0; Vrth = 0.0, Icth = 0.0, Icth_Vrth = 0.0; } else if((ckt->CKTmode & MODEINITJCT) || ( (ckt->CKTmode & MODEINITFIX) && (here->VBICoff!=0))) { Vbe=0.0; Vbei=Vbex=Vbe; Vbc=0.0; Vbci=Vbcx=Vbc; Vbep=Vbcp=0.0; Vrci=Vrbi=Vrbp=0.0; Vrcx=Vrbx=Vre=Vrs=0.0; Vrth = 0.0, Icth = 0.0, Icth_Vrth = 0.0; } else { #ifndef PREDICTOR if(ckt->CKTmode & MODEINITPRED) { xfact = ckt->CKTdelta/ckt->CKTdeltaOld[1]; Vbei = (1+xfact) * *(ckt->CKTstate1 + here->VBICvbei)- xfact * *(ckt->CKTstate2 + here->VBICvbei); Vbex = (1+xfact) * *(ckt->CKTstate1 + here->VBICvbex)- xfact * *(ckt->CKTstate2 + here->VBICvbex); Vbci = (1+xfact) * *(ckt->CKTstate1 + here->VBICvbci)- xfact * *(ckt->CKTstate2 + here->VBICvbci); Vbcx = (1+xfact) * *(ckt->CKTstate1 + here->VBICvbcx)- xfact * *(ckt->CKTstate2 + here->VBICvbcx); Vbep = (1+xfact) * *(ckt->CKTstate1 + here->VBICvbep)- xfact * *(ckt->CKTstate2 + here->VBICvbep); Vrci = (1+xfact) * *(ckt->CKTstate1 + here->VBICvrci)- xfact * *(ckt->CKTstate2 + here->VBICvrci); Vrbi = (1+xfact) * *(ckt->CKTstate1 + here->VBICvrbi)- xfact * *(ckt->CKTstate2 + here->VBICvrbi); Vrbp = (1+xfact) * *(ckt->CKTstate1 + here->VBICvrbp)- xfact * *(ckt->CKTstate2 + here->VBICvrbp); Vbcp = (1+xfact) * *(ckt->CKTstate1 + here->VBICvbcp)- xfact * *(ckt->CKTstate2 + here->VBICvbcp); if (here->VBIC_selfheat) { Vrth = (1.0 + xfact)* (*(ckt->CKTstate1 + here->VBICvrth)) - ( xfact * (*(ckt->CKTstate2 + here->VBICvrth))); *(ckt->CKTstate0 + here->VBICvrth) = *(ckt->CKTstate1 + here->VBICvrth); } *(ckt->CKTstate0 + here->VBICvbei) = *(ckt->CKTstate1 + here->VBICvbei); *(ckt->CKTstate0 + here->VBICvbex) = *(ckt->CKTstate1 + here->VBICvbex); *(ckt->CKTstate0 + here->VBICvbci) = *(ckt->CKTstate1 + here->VBICvbci); *(ckt->CKTstate0 + here->VBICvbcx) = *(ckt->CKTstate1 + here->VBICvbcx); *(ckt->CKTstate0 + here->VBICvbep) = *(ckt->CKTstate1 + here->VBICvbep); *(ckt->CKTstate0 + here->VBICvrci) = *(ckt->CKTstate1 + here->VBICvrci); *(ckt->CKTstate0 + here->VBICvrbi) = *(ckt->CKTstate1 + here->VBICvrbi); *(ckt->CKTstate0 + here->VBICvrbp) = *(ckt->CKTstate1 + here->VBICvrbp); *(ckt->CKTstate0 + here->VBICvbcp) = *(ckt->CKTstate1 + here->VBICvbcp); *(ckt->CKTstate0 + here->VBICibe) = *(ckt->CKTstate1 + here->VBICibe); *(ckt->CKTstate0 + here->VBICibe_Vbei) = *(ckt->CKTstate1 + here->VBICibe_Vbei); *(ckt->CKTstate0 + here->VBICibex) = *(ckt->CKTstate1 + here->VBICibex); *(ckt->CKTstate0 + here->VBICibex_Vbex) = *(ckt->CKTstate1 + here->VBICibex_Vbex); *(ckt->CKTstate0 + here->VBICitzf) = *(ckt->CKTstate1 + here->VBICitzf); *(ckt->CKTstate0 + here->VBICitzf_Vbei) = *(ckt->CKTstate1 + here->VBICitzf_Vbei); *(ckt->CKTstate0 + here->VBICitzf_Vbci) = *(ckt->CKTstate1 + here->VBICitzf_Vbci); *(ckt->CKTstate0 + here->VBICitzr) = *(ckt->CKTstate1 + here->VBICitzr); *(ckt->CKTstate0 + here->VBICitzr_Vbei) = *(ckt->CKTstate1 + here->VBICitzf_Vbei); *(ckt->CKTstate0 + here->VBICitzr_Vbci) = *(ckt->CKTstate1 + here->VBICitzr_Vbci); *(ckt->CKTstate0 + here->VBICibc) = *(ckt->CKTstate1 + here->VBICibc); *(ckt->CKTstate0 + here->VBICibc_Vbci) = *(ckt->CKTstate1 + here->VBICibc_Vbci); *(ckt->CKTstate0 + here->VBICibc_Vbei) = *(ckt->CKTstate1 + here->VBICibc_Vbei); *(ckt->CKTstate0 + here->VBICibep) = *(ckt->CKTstate1 + here->VBICibep); *(ckt->CKTstate0 + here->VBICibep_Vbep) = *(ckt->CKTstate1 + here->VBICibep_Vbep); *(ckt->CKTstate0 + here->VBICirci) = *(ckt->CKTstate1 + here->VBICirci); *(ckt->CKTstate0 + here->VBICirci_Vrci) = *(ckt->CKTstate1 + here->VBICirci_Vrci); *(ckt->CKTstate0 + here->VBICirci_Vbci) = *(ckt->CKTstate1 + here->VBICirci_Vbci); *(ckt->CKTstate0 + here->VBICirci_Vbcx) = *(ckt->CKTstate1 + here->VBICirci_Vbcx); *(ckt->CKTstate0 + here->VBICirbi) = *(ckt->CKTstate1 + here->VBICirbi); *(ckt->CKTstate0 + here->VBICirbi_Vrbi) = *(ckt->CKTstate1 + here->VBICirbi_Vrbi); *(ckt->CKTstate0 + here->VBICirbi_Vbei) = *(ckt->CKTstate1 + here->VBICirbi_Vbei); *(ckt->CKTstate0 + here->VBICirbi_Vbci) = *(ckt->CKTstate1 + here->VBICirbi_Vbci); *(ckt->CKTstate0 + here->VBICirbp) = *(ckt->CKTstate1 + here->VBICirbp); *(ckt->CKTstate0 + here->VBICirbp_Vrbp) = *(ckt->CKTstate1 + here->VBICirbp_Vrbp); *(ckt->CKTstate0 + here->VBICirbp_Vbep) = *(ckt->CKTstate1 + here->VBICirbp_Vbep); *(ckt->CKTstate0 + here->VBICirbp_Vbci) = *(ckt->CKTstate1 + here->VBICirbp_Vbci); *(ckt->CKTstate0 + here->VBICibcp) = *(ckt->CKTstate1 + here->VBICibcp); *(ckt->CKTstate0 + here->VBICibcp_Vbcp) = *(ckt->CKTstate1 + here->VBICibcp_Vbcp); *(ckt->CKTstate0 + here->VBICiccp) = *(ckt->CKTstate1 + here->VBICiccp); *(ckt->CKTstate0 + here->VBICiccp_Vbep) = *(ckt->CKTstate1 + here->VBICiccp_Vbep); *(ckt->CKTstate0 + here->VBICiccp_Vbci) = *(ckt->CKTstate1 + here->VBICiccp_Vbci); *(ckt->CKTstate0 + here->VBICiccp_Vbcp) = *(ckt->CKTstate1 + here->VBICiccp_Vbcp); *(ckt->CKTstate0 + here->VBICgqbeo) = *(ckt->CKTstate1 + here->VBICgqbeo); *(ckt->CKTstate0 + here->VBICgqbco) = *(ckt->CKTstate1 + here->VBICgqbco); *(ckt->CKTstate0 + here->VBICircx_Vrcx) = *(ckt->CKTstate1 + here->VBICircx_Vrcx); *(ckt->CKTstate0 + here->VBICirbx_Vrbx) = *(ckt->CKTstate1 + here->VBICirbx_Vrbx); *(ckt->CKTstate0 + here->VBICirs_Vrs) = *(ckt->CKTstate1 + here->VBICirs_Vrs); *(ckt->CKTstate0 + here->VBICire_Vre) = *(ckt->CKTstate1 + here->VBICire_Vre); if (here->VBIC_selfheat) *(ckt->CKTstate0 + here->VBICqcth) = *(ckt->CKTstate1 + here->VBICqcth); } else { #endif /* PREDICTOR */ /* * compute new nonlinear branch voltages */ Vbei = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseBINode)- *(ckt->CKTrhsOld+here->VBICemitEINode)); Vbex = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseBXNode)- *(ckt->CKTrhsOld+here->VBICemitEINode)); Vbci = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseBINode)- *(ckt->CKTrhsOld+here->VBICcollCINode)); Vbcx = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseBINode)- *(ckt->CKTrhsOld+here->VBICcollCXNode)); Vbep = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseBXNode)- *(ckt->CKTrhsOld+here->VBICbaseBPNode)); Vrci = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICcollCXNode)- *(ckt->CKTrhsOld+here->VBICcollCINode)); Vrbi = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseBXNode)- *(ckt->CKTrhsOld+here->VBICbaseBINode)); Vrbp = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseBPNode)- *(ckt->CKTrhsOld+here->VBICcollCXNode)); Vbcp = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICsubsSINode)- *(ckt->CKTrhsOld+here->VBICbaseBPNode)); if (here->VBIC_selfheat) Vrth = *(ckt->CKTrhsOld + here->VBICtempNode); #ifndef PREDICTOR } #endif /* PREDICTOR */ delvbei = Vbei - *(ckt->CKTstate0 + here->VBICvbei); delvbex = Vbex - *(ckt->CKTstate0 + here->VBICvbex); delvbci = Vbci - *(ckt->CKTstate0 + here->VBICvbci); delvbcx = Vbcx - *(ckt->CKTstate0 + here->VBICvbcx); delvbep = Vbep - *(ckt->CKTstate0 + here->VBICvbep); delvrci = Vrci - *(ckt->CKTstate0 + here->VBICvrci); delvrbi = Vrbi - *(ckt->CKTstate0 + here->VBICvrbi); delvrbp = Vrbp - *(ckt->CKTstate0 + here->VBICvrbp); delvbcp = Vbcp - *(ckt->CKTstate0 + here->VBICvbcp); if (here->VBIC_selfheat) delvrth = Vrth - *(ckt->CKTstate0 + here->VBICvrth); Vbe = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseNode)- *(ckt->CKTrhsOld+here->VBICemitNode)); Vbc = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseNode)- *(ckt->CKTrhsOld+here->VBICcollNode)); Vrcx = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICcollNode)- *(ckt->CKTrhsOld+here->VBICcollCXNode)); Vrbx = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseNode)- *(ckt->CKTrhsOld+here->VBICbaseBXNode)); Vre = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICemitNode)- *(ckt->CKTrhsOld+here->VBICemitEINode)); Vrs = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICsubsNode)- *(ckt->CKTrhsOld+here->VBICsubsSINode)); if (here->VBIC_selfheat) Vrth = *(ckt->CKTrhsOld + here->VBICtempNode); ibehat = *(ckt->CKTstate0 + here->VBICibe) + *(ckt->CKTstate0 + here->VBICibe_Vbei)*delvbei; ibexhat = *(ckt->CKTstate0 + here->VBICibex) + *(ckt->CKTstate0 + here->VBICibex_Vbex)*delvbex; itzfhat = *(ckt->CKTstate0 + here->VBICitzf) + *(ckt->CKTstate0 + here->VBICitzf_Vbei)*delvbei + *(ckt->CKTstate0 + here->VBICitzf_Vbci)*delvbci; itzrhat = *(ckt->CKTstate0 + here->VBICitzr) + *(ckt->CKTstate0 + here->VBICitzr_Vbei)*delvbei + *(ckt->CKTstate0 + here->VBICitzr_Vbci)*delvbci; ibchat = *(ckt->CKTstate0 + here->VBICibc) + *(ckt->CKTstate0 + here->VBICibc_Vbei)*delvbei + *(ckt->CKTstate0 + here->VBICibc_Vbci)*delvbci; ibephat = *(ckt->CKTstate0 + here->VBICibep) + *(ckt->CKTstate0 + here->VBICibep_Vbep)*delvbep; ircihat = *(ckt->CKTstate0 + here->VBICirci) + *(ckt->CKTstate0 + here->VBICirci_Vrci)*delvrci + *(ckt->CKTstate0 + here->VBICirci_Vbcx)*delvbcx + *(ckt->CKTstate0 + here->VBICirci_Vbci)*delvbci; irbihat = *(ckt->CKTstate0 + here->VBICirbi) + *(ckt->CKTstate0 + here->VBICirbi_Vrbi)*delvrbi + *(ckt->CKTstate0 + here->VBICirbi_Vbei)*delvbei + *(ckt->CKTstate0 + here->VBICirbi_Vbci)*delvbci; irbphat = *(ckt->CKTstate0 + here->VBICirbp) + *(ckt->CKTstate0 + here->VBICirbp_Vrbp)*delvrbp + *(ckt->CKTstate0 + here->VBICirbp_Vbep)*delvbep + *(ckt->CKTstate0 + here->VBICirbp_Vbci)*delvbci; ibcphat = *(ckt->CKTstate0 + here->VBICibcp) + *(ckt->CKTstate0 + here->VBICibcp_Vbcp)*delvbcp; iccphat = *(ckt->CKTstate0 + here->VBICiccp) + *(ckt->CKTstate0 + here->VBICiccp_Vbep)*delvbep + *(ckt->CKTstate0 + here->VBICiccp_Vbci)*delvbci + *(ckt->CKTstate0 + here->VBICiccp_Vbcp)*delvbcp; /* * bypass if solution has not changed */ /* the following collections of if's would be just one * if the average compiler could handle it, but many * find the expression too complicated, thus the split. * ... no bypass in case of selfheating */ if( (ckt->CKTbypass) && (!(ckt->CKTmode & MODEINITPRED)) && !here->VBIC_selfheat && (fabs(delvbei) < (ckt->CKTreltol*MAX(fabs(Vbei), fabs(*(ckt->CKTstate0 + here->VBICvbei)))+ ckt->CKTvoltTol)) ) if( (fabs(delvbex) < ckt->CKTreltol*MAX(fabs(Vbex), fabs(*(ckt->CKTstate0 + here->VBICvbex)))+ ckt->CKTvoltTol) ) if( (fabs(delvbci) < ckt->CKTreltol*MAX(fabs(Vbci), fabs(*(ckt->CKTstate0 + here->VBICvbci)))+ ckt->CKTvoltTol) ) if( (fabs(delvbcx) < ckt->CKTreltol*MAX(fabs(Vbcx), fabs(*(ckt->CKTstate0 + here->VBICvbcx)))+ ckt->CKTvoltTol) ) if( (fabs(delvbep) < ckt->CKTreltol*MAX(fabs(Vbep), fabs(*(ckt->CKTstate0 + here->VBICvbep)))+ ckt->CKTvoltTol) ) if( (fabs(delvrci) < ckt->CKTreltol*MAX(fabs(Vrci), fabs(*(ckt->CKTstate0 + here->VBICvrci)))+ ckt->CKTvoltTol) ) if( (fabs(delvrbi) < ckt->CKTreltol*MAX(fabs(Vrbi), fabs(*(ckt->CKTstate0 + here->VBICvrbi)))+ ckt->CKTvoltTol) ) if( (fabs(delvrbp) < ckt->CKTreltol*MAX(fabs(Vrbp), fabs(*(ckt->CKTstate0 + here->VBICvrbp)))+ ckt->CKTvoltTol) ) if( (fabs(delvbcp) < ckt->CKTreltol*MAX(fabs(Vbcp), fabs(*(ckt->CKTstate0 + here->VBICvbcp)))+ ckt->CKTvoltTol) ) if( (fabs(ibehat-*(ckt->CKTstate0 + here->VBICibe)) < ckt->CKTreltol* MAX(fabs(ibehat), fabs(*(ckt->CKTstate0 + here->VBICibe)))+ ckt->CKTabstol) ) if( (fabs(ibexhat-*(ckt->CKTstate0 + here->VBICibex)) < ckt->CKTreltol* MAX(fabs(ibexhat), fabs(*(ckt->CKTstate0 + here->VBICibex)))+ ckt->CKTabstol) ) if( (fabs(itzfhat-*(ckt->CKTstate0 + here->VBICitzf)) < ckt->CKTreltol* MAX(fabs(itzfhat), fabs(*(ckt->CKTstate0 + here->VBICitzf)))+ ckt->CKTabstol) ) if( (fabs(itzrhat-*(ckt->CKTstate0 + here->VBICitzr)) < ckt->CKTreltol* MAX(fabs(itzrhat), fabs(*(ckt->CKTstate0 + here->VBICitzr)))+ ckt->CKTabstol) ) if( (fabs(ibchat-*(ckt->CKTstate0 + here->VBICibc)) < ckt->CKTreltol* MAX(fabs(ibchat), fabs(*(ckt->CKTstate0 + here->VBICibc)))+ ckt->CKTabstol) ) if( (fabs(ibephat-*(ckt->CKTstate0 + here->VBICibep)) < ckt->CKTreltol* MAX(fabs(ibephat), fabs(*(ckt->CKTstate0 + here->VBICibep)))+ ckt->CKTabstol) ) if( (fabs(ircihat-*(ckt->CKTstate0 + here->VBICirci)) < ckt->CKTreltol* MAX(fabs(ircihat), fabs(*(ckt->CKTstate0 + here->VBICirci)))+ ckt->CKTabstol) ) if( (fabs(irbihat-*(ckt->CKTstate0 + here->VBICirbi)) < ckt->CKTreltol* MAX(fabs(irbihat), fabs(*(ckt->CKTstate0 + here->VBICirbi)))+ ckt->CKTabstol) ) if( (fabs(irbphat-*(ckt->CKTstate0 + here->VBICirbp)) < ckt->CKTreltol* MAX(fabs(irbphat), fabs(*(ckt->CKTstate0 + here->VBICirbp)))+ ckt->CKTabstol) ) if( (fabs(ibcphat-*(ckt->CKTstate0 + here->VBICibcp)) < ckt->CKTreltol* MAX(fabs(ibcphat), fabs(*(ckt->CKTstate0 + here->VBICibcp)))+ ckt->CKTabstol) ) if( (fabs(iccphat-*(ckt->CKTstate0 + here->VBICiccp)) < ckt->CKTreltol* MAX(fabs(iccphat), fabs(*(ckt->CKTstate0 + here->VBICiccp)))+ ckt->CKTabstol) ) { /* * bypassing.... */ Vbei = *(ckt->CKTstate0 + here->VBICvbei); Vbex = *(ckt->CKTstate0 + here->VBICvbex); Vbci = *(ckt->CKTstate0 + here->VBICvbci); Vbcx = *(ckt->CKTstate0 + here->VBICvbcx); Vbep = *(ckt->CKTstate0 + here->VBICvbep); Vrci = *(ckt->CKTstate0 + here->VBICvrci); Vrbi = *(ckt->CKTstate0 + here->VBICvrbi); Vrbp = *(ckt->CKTstate0 + here->VBICvrbp); Vbcp = *(ckt->CKTstate0 + here->VBICvbcp); Ibe = *(ckt->CKTstate0 + here->VBICibe); Ibe_Vbei = *(ckt->CKTstate0 + here->VBICibe_Vbei); Ibex = *(ckt->CKTstate0 + here->VBICibex); Ibex_Vbex = *(ckt->CKTstate0 + here->VBICibex_Vbex); Itzf = *(ckt->CKTstate0 + here->VBICitzf); Itzf_Vbei = *(ckt->CKTstate0 + here->VBICitzf_Vbei); Itzf_Vbci = *(ckt->CKTstate0 + here->VBICitzf_Vbci); Itzr = *(ckt->CKTstate0 + here->VBICitzr); Itzr_Vbci = *(ckt->CKTstate0 + here->VBICitzr_Vbci); Itzr_Vbei = *(ckt->CKTstate0 + here->VBICitzr_Vbei); Ibc = *(ckt->CKTstate0 + here->VBICibc); Ibc_Vbci = *(ckt->CKTstate0 + here->VBICibc_Vbci); Ibc_Vbei = *(ckt->CKTstate0 + here->VBICibc_Vbei); Ibep = *(ckt->CKTstate0 + here->VBICibep); Ibep_Vbep = *(ckt->CKTstate0 + here->VBICibep_Vbep); Irci = *(ckt->CKTstate0 + here->VBICirci); Irci_Vrci = *(ckt->CKTstate0 + here->VBICirci_Vrci); Irci_Vbci = *(ckt->CKTstate0 + here->VBICirci_Vbci); Irci_Vbcx = *(ckt->CKTstate0 + here->VBICirci_Vbcx); Irbi = *(ckt->CKTstate0 + here->VBICirbi); Irbi_Vrbi = *(ckt->CKTstate0 + here->VBICirbi_Vrbi); Irbi_Vbei = *(ckt->CKTstate0 + here->VBICirbi_Vbei); Irbi_Vbci = *(ckt->CKTstate0 + here->VBICirbi_Vbci); Irbp = *(ckt->CKTstate0 + here->VBICirbp); Irbp_Vrbp = *(ckt->CKTstate0 + here->VBICirbp_Vrbp); Irbp_Vbep = *(ckt->CKTstate0 + here->VBICirbp_Vbep); Irbp_Vbci = *(ckt->CKTstate0 + here->VBICirbp_Vbci); Ibcp = *(ckt->CKTstate0 + here->VBICibcp); Ibcp_Vbcp = *(ckt->CKTstate0 + here->VBICibcp_Vbcp); Iccp = *(ckt->CKTstate0 + here->VBICiccp); Iccp_Vbep = *(ckt->CKTstate0 + here->VBICiccp_Vbep); Iccp_Vbci = *(ckt->CKTstate0 + here->VBICiccp_Vbci); Iccp_Vbcp = *(ckt->CKTstate0 + here->VBICiccp_Vbcp); gqbeo = *(ckt->CKTstate0 + here->VBICgqbeo); gqbco = *(ckt->CKTstate0 + here->VBICgqbco); Ircx_Vrcx = *(ckt->CKTstate0 + here->VBICircx_Vrcx); Irbx_Vrbx = *(ckt->CKTstate0 + here->VBICirbx_Vrbx); Irs_Vrs = *(ckt->CKTstate0 + here->VBICirs_Vrs); Ire_Vre = *(ckt->CKTstate0 + here->VBICire_Vre); goto load; } /* * limit nonlinear branch voltages */ ichk1 = 1, ichk2 = 1, ichk3 = 1, ichk4 = 1, ichk5 = 1, ichk6 = 0; Vbei = DEVpnjlim(Vbei,*(ckt->CKTstate0 + here->VBICvbei),vt, here->VBICtVcrit,&icheck); Vbex = DEVpnjlim(Vbex,*(ckt->CKTstate0 + here->VBICvbex),vt, here->VBICtVcrit,&ichk1); Vbci = DEVpnjlim(Vbci,*(ckt->CKTstate0 + here->VBICvbci),vt, here->VBICtVcrit,&ichk2); Vbcx = DEVpnjlim(Vbcx,*(ckt->CKTstate0 + here->VBICvbcx),vt, here->VBICtVcrit,&ichk3); Vbep = DEVpnjlim(Vbep,*(ckt->CKTstate0 + here->VBICvbep),vt, here->VBICtVcrit,&ichk4); Vbcp = DEVpnjlim(Vbcp,*(ckt->CKTstate0 + here->VBICvbcp),vt, here->VBICtVcrit,&ichk5); if (here->VBIC_selfheat) { ichk6 = 1; Vrth = VBIClimitlog(Vrth, *(ckt->CKTstate0 + here->VBICvrth),100,&ichk6); } if ((ichk1 == 1) || (ichk2 == 1) || (ichk3 == 1) || (ichk4 == 1) || (ichk5 == 1) || (ichk6 == 1)) icheck=1; } /* * determine dc current and derivatives */ Vcei = Vbei - Vbci; Vcep = Vbep - Vbcp; iret = vbic_4T_et_cf_fj(p ,&Vrth, &Vbei, &Vbex, &Vbci, &Vbep, &Vbcp ,&Vrcx, &Vbcx, &Vrci, &Vrbx, &Vrbi, &Vre, &Vrbp ,&Vrs, &Vbe, &Vbc, &Vcei, &Vcep, &Ibe, &Ibe_Vrth ,&Ibe_Vbei, &Ibex, &Ibex_Vrth, &Ibex_Vbex, &Itzf, &Itzf_Vrth, &Itzf_Vbei ,&Itzf_Vbci, &Itzr, &Itzr_Vrth, &Itzr_Vbci, &Itzr_Vbei, &Ibc, &Ibc_Vrth ,&Ibc_Vbci, &Ibc_Vbei, &Ibep, &Ibep_Vrth, &Ibep_Vbep, &Ircx, &Ircx_Vrcx ,&Ircx_Vrth, &Irci, &Irci_Vrci, &Irci_Vrth, &Irci_Vbci, &Irci_Vbcx, &Irbx ,&Irbx_Vrbx, &Irbx_Vrth, &Irbi, &Irbi_Vrbi, &Irbi_Vrth, &Irbi_Vbei, &Irbi_Vbci ,&Ire, &Ire_Vre, &Ire_Vrth, &Irbp, &Irbp_Vrbp, &Irbp_Vrth, &Irbp_Vbep ,&Irbp_Vbci, &Qbe, &Qbe_Vrth, &Qbe_Vbei, &Qbe_Vbci, &Qbex, &Qbex_Vrth ,&Qbex_Vbex, &Qbc, &Qbc_Vrth, &Qbc_Vbci, &Qbcx, &Qbcx_Vrth, &Qbcx_Vbcx ,&Qbep, &Qbep_Vrth, &Qbep_Vbep, &Qbep_Vbci, &Qbeo, &Qbeo_Vbe, &Qbco ,&Qbco_Vbc, &Ibcp, &Ibcp_Vrth, &Ibcp_Vbcp, &Iccp, &Iccp_Vrth, &Iccp_Vbep ,&Iccp_Vbci, &Iccp_Vbcp, &Irs, &Irs_Vrs, &Irs_Vrth, &Qbcp, &Qbcp_Vrth ,&Qbcp_Vbcp, &Irth, &Irth_Vrth, &Ith, &Ith_Vrth, &Ith_Vbei, &Ith_Vbci ,&Ith_Vcei, &Ith_Vbex, &Ith_Vbep, &Ith_Vrs, &Ith_Vbcp, &Ith_Vcep, &Ith_Vrcx ,&Ith_Vrci, &Ith_Vbcx, &Ith_Vrbx, &Ith_Vrbi, &Ith_Vre, &Ith_Vrbp, &Qcth ,&Qcth_Vrth, &SCALE); Ibe += ckt->CKTgmin*Vbei; Ibe_Vbei += ckt->CKTgmin; Ibex += ckt->CKTgmin*Vbex; Ibex_Vbex += ckt->CKTgmin; Ibc += ckt->CKTgmin*Vbci; Ibc_Vbci += ckt->CKTgmin; Ibep += ckt->CKTgmin*Vbep; Ibep_Vbep += ckt->CKTgmin; Irci += ckt->CKTgmin*Vrci; Irci_Vrci += ckt->CKTgmin; Irci += ckt->CKTgmin*Vbci; Irci_Vbci += ckt->CKTgmin; Irci += ckt->CKTgmin*Vbcx; Irci_Vbcx += ckt->CKTgmin; Ibcp += ckt->CKTgmin*Vbcp; Ibcp_Vbcp += ckt->CKTgmin; if( (ckt->CKTmode & (MODEDCTRANCURVE | MODETRAN | MODEAC)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) || (ckt->CKTmode & MODEINITSMSIG)) { /* * charge storage elements */ *(ckt->CKTstate0 + here->VBICqbe) = Qbe; *(ckt->CKTstate0 + here->VBICqbex) = Qbex; *(ckt->CKTstate0 + here->VBICqbc) = Qbc; *(ckt->CKTstate0 + here->VBICqbcx) = Qbcx; *(ckt->CKTstate0 + here->VBICqbep) = Qbep; *(ckt->CKTstate0 + here->VBICqbeo) = Qbeo; *(ckt->CKTstate0 + here->VBICqbco) = Qbco; *(ckt->CKTstate0 + here->VBICqbcp) = Qbcp; if (here->VBIC_selfheat) *(ckt->CKTstate0 + here->VBICqcth) = Qcth; here->VBICcapbe = Qbe_Vbei; here->VBICcapbex = Qbex_Vbex; here->VBICcapbc = Qbc_Vbci; here->VBICcapbcx = Qbcx_Vbcx; here->VBICcapbep = Qbep_Vbep; here->VBICcapbcp = Qbcp_Vbcp; here->VBICcapcth = Qcth_Vrth; /* * store small-signal parameters */ if ( (!(ckt->CKTmode & MODETRANOP))|| (!(ckt->CKTmode & MODEUIC)) ) { if(ckt->CKTmode & MODEINITSMSIG) { *(ckt->CKTstate0 + here->VBICcqbe) = Qbe_Vbei; *(ckt->CKTstate0 + here->VBICcqbeci) = Qbe_Vbci; *(ckt->CKTstate0 + here->VBICcqbex) = Qbex_Vbex; *(ckt->CKTstate0 + here->VBICcqbc) = Qbc_Vbci; *(ckt->CKTstate0 + here->VBICcqbcx) = Qbcx_Vbcx; *(ckt->CKTstate0 + here->VBICcqbep) = Qbep_Vbep; *(ckt->CKTstate0 + here->VBICcqbepci) = Qbep_Vbci; *(ckt->CKTstate0 + here->VBICcqbeo) = Qbeo_Vbe; *(ckt->CKTstate0 + here->VBICcqbco) = Qbco_Vbc; *(ckt->CKTstate0 + here->VBICcqbcp) = Qbcp_Vbcp; if (here->VBIC_selfheat) *(ckt->CKTstate0 + here->VBICcqcth) = Qcth_Vrth; continue; /* go to 1000 */ } /* * transient analysis */ if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->VBICqbe) = *(ckt->CKTstate0 + here->VBICqbe) ; *(ckt->CKTstate1 + here->VBICqbex) = *(ckt->CKTstate0 + here->VBICqbex) ; *(ckt->CKTstate1 + here->VBICqbc) = *(ckt->CKTstate0 + here->VBICqbc) ; *(ckt->CKTstate1 + here->VBICqbcx) = *(ckt->CKTstate0 + here->VBICqbcx) ; *(ckt->CKTstate1 + here->VBICqbep) = *(ckt->CKTstate0 + here->VBICqbep) ; *(ckt->CKTstate1 + here->VBICqbeo) = *(ckt->CKTstate0 + here->VBICqbeo) ; *(ckt->CKTstate1 + here->VBICqbco) = *(ckt->CKTstate0 + here->VBICqbco) ; *(ckt->CKTstate1 + here->VBICqbcp) = *(ckt->CKTstate0 + here->VBICqbcp) ; if (here->VBIC_selfheat) *(ckt->CKTstate1 + here->VBICqcth) = *(ckt->CKTstate0 + here->VBICqcth) ; } error = NIintegrate(ckt,&geq,&ceq,Qbe_Vbei,here->VBICqbe); if(error) return(error); Ibe_Vbei = Ibe_Vbei + geq; Ibe = Ibe + *(ckt->CKTstate0 + here->VBICcqbe); error = NIintegrate(ckt,&geq,&ceq,Qbex_Vbex,here->VBICqbex); if(error) return(error); Ibex_Vbex = Ibex_Vbex + geq; Ibex = Ibex + *(ckt->CKTstate0 + here->VBICcqbex); error = NIintegrate(ckt,&geq,&ceq,Qbc_Vbci,here->VBICqbc); if(error) return(error); Ibc_Vbci = Ibc_Vbci + geq; Ibc = Ibc + *(ckt->CKTstate0 + here->VBICcqbc); error = NIintegrate(ckt,&geq,&ceq,Qbcx_Vbcx,here->VBICqbcx); if(error) return(error); gbcx = geq; cbcx = *(ckt->CKTstate0 + here->VBICcqbcx); error = NIintegrate(ckt,&geq,&ceq,Qbep_Vbep,here->VBICqbep); if(error) return(error); Ibep_Vbep = Ibep_Vbep + geq; Ibep = Ibep + *(ckt->CKTstate0 + here->VBICcqbep); error = NIintegrate(ckt,&geq,&ceq,Qbcp_Vbcp,here->VBICqbcp); if(error) return(error); Ibcp_Vbcp = Ibcp_Vbcp + geq; Ibcp = Ibcp + *(ckt->CKTstate0 + here->VBICcqbcp); if (here->VBIC_selfheat) { error = NIintegrate(ckt,&geq,&ceq,Qcth_Vrth,here->VBICqcth); if(error) return(error); Icth_Vrth = geq; Icth = *(ckt->CKTstate0 + here->VBICcqcth); } if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->VBICcqbe) = *(ckt->CKTstate0 + here->VBICcqbe); *(ckt->CKTstate1 + here->VBICcqbex) = *(ckt->CKTstate0 + here->VBICcqbex); *(ckt->CKTstate1 + here->VBICcqbc) = *(ckt->CKTstate0 + here->VBICcqbc); *(ckt->CKTstate1 + here->VBICcqbcx) = *(ckt->CKTstate0 + here->VBICcqbcx); *(ckt->CKTstate1 + here->VBICcqbep) = *(ckt->CKTstate0 + here->VBICcqbep); *(ckt->CKTstate1 + here->VBICcqbcp) = *(ckt->CKTstate0 + here->VBICcqbcp); if (here->VBIC_selfheat) *(ckt->CKTstate1 + here->VBICcqcth) = *(ckt->CKTstate0 + here->VBICcqcth); } } } /* * check convergence */ if ( (!(ckt->CKTmode & MODEINITFIX))||(!(here->VBICoff))) { if (icheck == 1) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; } } /* * charge storage for outer b-e and b-c junctions */ if(ckt->CKTmode & (MODETRAN | MODEAC)) { error = NIintegrate(ckt,&gqbeo,&cqbeo,Qbeo_Vbe,here->VBICqbeo); if(error) return(error); error = NIintegrate(ckt,&gqbco,&cqbco,Qbco_Vbc,here->VBICqbco); if(error) return(error); if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->VBICcqbeo) = *(ckt->CKTstate0 + here->VBICcqbeo); *(ckt->CKTstate1 + here->VBICcqbco) = *(ckt->CKTstate0 + here->VBICcqbco); } } *(ckt->CKTstate0 + here->VBICvbei) = Vbei; *(ckt->CKTstate0 + here->VBICvbex) = Vbex; *(ckt->CKTstate0 + here->VBICvbci) = Vbci; *(ckt->CKTstate0 + here->VBICvbcx) = Vbcx; *(ckt->CKTstate0 + here->VBICvbep) = Vbep; *(ckt->CKTstate0 + here->VBICvrci) = Vrci; *(ckt->CKTstate0 + here->VBICvrbi) = Vrbi; *(ckt->CKTstate0 + here->VBICvrbp) = Vrbp; *(ckt->CKTstate0 + here->VBICvbcp) = Vbcp; *(ckt->CKTstate0 + here->VBICibe) = Ibe; *(ckt->CKTstate0 + here->VBICibe_Vbei) = Ibe_Vbei; *(ckt->CKTstate0 + here->VBICibex) = Ibex; *(ckt->CKTstate0 + here->VBICibex_Vbex) = Ibex_Vbex; *(ckt->CKTstate0 + here->VBICitzf) = Itzf; *(ckt->CKTstate0 + here->VBICitzf_Vbei) = Itzf_Vbei; *(ckt->CKTstate0 + here->VBICitzf_Vbci) = Itzf_Vbci; *(ckt->CKTstate0 + here->VBICitzr) = Itzr; *(ckt->CKTstate0 + here->VBICitzr_Vbci) = Itzr_Vbci; *(ckt->CKTstate0 + here->VBICitzr_Vbei) = Itzr_Vbei; *(ckt->CKTstate0 + here->VBICibc) = Ibc; *(ckt->CKTstate0 + here->VBICibc_Vbci) = Ibc_Vbci; *(ckt->CKTstate0 + here->VBICibc_Vbei) = Ibc_Vbei; *(ckt->CKTstate0 + here->VBICibep) = Ibep; *(ckt->CKTstate0 + here->VBICibep_Vbep) = Ibep_Vbep; *(ckt->CKTstate0 + here->VBICirci) = Irci; *(ckt->CKTstate0 + here->VBICirci_Vrci) = Irci_Vrci; *(ckt->CKTstate0 + here->VBICirci_Vbci) = Irci_Vbci; *(ckt->CKTstate0 + here->VBICirci_Vbcx) = Irci_Vbcx; *(ckt->CKTstate0 + here->VBICirbi) = Irbi; *(ckt->CKTstate0 + here->VBICirbi_Vrbi) = Irbi_Vrbi; *(ckt->CKTstate0 + here->VBICirbi_Vbei) = Irbi_Vbei; *(ckt->CKTstate0 + here->VBICirbi_Vbci) = Irbi_Vbci; *(ckt->CKTstate0 + here->VBICirbp) = Irbp; *(ckt->CKTstate0 + here->VBICirbp_Vrbp) = Irbp_Vrbp; *(ckt->CKTstate0 + here->VBICirbp_Vbep) = Irbp_Vbep; *(ckt->CKTstate0 + here->VBICirbp_Vbci) = Irbp_Vbci; *(ckt->CKTstate0 + here->VBICibcp) = Ibcp; *(ckt->CKTstate0 + here->VBICibcp_Vbcp) = Ibcp_Vbcp; *(ckt->CKTstate0 + here->VBICiccp) = Iccp; *(ckt->CKTstate0 + here->VBICiccp_Vbep) = Iccp_Vbep; *(ckt->CKTstate0 + here->VBICiccp_Vbci) = Iccp_Vbci; *(ckt->CKTstate0 + here->VBICiccp_Vbcp) = Iccp_Vbcp; *(ckt->CKTstate0 + here->VBICgqbeo) = gqbeo; *(ckt->CKTstate0 + here->VBICgqbco) = gqbco; *(ckt->CKTstate0 + here->VBICircx_Vrcx) = Ircx_Vrcx; *(ckt->CKTstate0 + here->VBICirbx_Vrbx) = Irbx_Vrbx; *(ckt->CKTstate0 + here->VBICirs_Vrs) = Irs_Vrs; *(ckt->CKTstate0 + here->VBICire_Vre) = Ire_Vre; *(ckt->CKTstate0 + here->VBICcqcth) = Icth; *(ckt->CKTstate0 + here->VBICicth_Vrth) = Icth_Vrth; load: /* * load current excitation vector and matrix */ rhs_current = model->VBICtype * (*(ckt->CKTstate0 + here->VBICcqbeo) - Vbe * gqbeo); *(ckt->CKTrhs + here->VBICbaseNode) += -rhs_current; *(ckt->CKTrhs + here->VBICemitNode) += rhs_current; *(here->VBICbaseBasePtr) += gqbeo; *(here->VBICemitEmitPtr) += gqbeo; *(here->VBICbaseEmitPtr) += -gqbeo; *(here->VBICemitBasePtr) += -gqbeo; rhs_current = model->VBICtype * (*(ckt->CKTstate0 + here->VBICcqbco) - Vbc * gqbco); *(ckt->CKTrhs + here->VBICbaseNode) += -rhs_current; *(ckt->CKTrhs + here->VBICcollNode) += rhs_current; *(here->VBICbaseBasePtr) += gqbco; *(here->VBICcollCollPtr) += gqbco; *(here->VBICbaseCollPtr) += -gqbco; *(here->VBICcollBasePtr) += -gqbco; *(ckt->CKTrhs + here->VBICbaseBINode) += -cbcx; *(ckt->CKTrhs + here->VBICcollCXNode) += cbcx; *(here->VBICbaseBIBaseBIPtr) += gbcx; *(here->VBICcollCXCollCXPtr) += gbcx; *(here->VBICbaseBICollCXPtr) += -gbcx; *(here->VBICcollCXBaseBIPtr) += -gbcx; /* c MNA at internal nodes c c Stamp element: Ibe */ rhs_current = model->VBICtype * (Ibe - Ibe_Vbei*Vbei); *(ckt->CKTrhs + here->VBICbaseBINode) += -rhs_current; *(here->VBICbaseBIBaseBIPtr) += Ibe_Vbei; *(here->VBICbaseBIEmitEIPtr) += -Ibe_Vbei; *(ckt->CKTrhs + here->VBICemitEINode) += rhs_current; *(here->VBICemitEIBaseBIPtr) += -Ibe_Vbei; *(here->VBICemitEIEmitEIPtr) += Ibe_Vbei; /* c Stamp element: Ibex */ rhs_current = model->VBICtype * (Ibex - Ibex_Vbex*Vbex); *(ckt->CKTrhs + here->VBICbaseBXNode) += -rhs_current; *(here->VBICbaseBXBaseBXPtr) += Ibex_Vbex; *(here->VBICbaseBXEmitEIPtr) += -Ibex_Vbex; *(ckt->CKTrhs + here->VBICemitEINode) += rhs_current; *(here->VBICemitEIBaseBXPtr) += -Ibex_Vbex; *(here->VBICemitEIEmitEIPtr) += Ibex_Vbex; /* c Stamp element: Itzf */ rhs_current = model->VBICtype * (Itzf - Itzf_Vbei*Vbei - Itzf_Vbci*Vbci); *(ckt->CKTrhs + here->VBICcollCINode) += -rhs_current; *(here->VBICcollCIBaseBIPtr) += Itzf_Vbei; *(here->VBICcollCIEmitEIPtr) += -Itzf_Vbei; *(here->VBICcollCIBaseBIPtr) += Itzf_Vbci; *(here->VBICcollCICollCIPtr) += -Itzf_Vbci; *(ckt->CKTrhs + here->VBICemitEINode) += rhs_current; *(here->VBICemitEIBaseBIPtr) += -Itzf_Vbei; *(here->VBICemitEIEmitEIPtr) += Itzf_Vbei; *(here->VBICemitEIBaseBIPtr) += -Itzf_Vbci; *(here->VBICemitEICollCIPtr) += Itzf_Vbci; /* c Stamp element: Itzr */ rhs_current = model->VBICtype * (Itzr - Itzr_Vbei*Vbei - Itzr_Vbci*Vbci); *(ckt->CKTrhs + here->VBICemitEINode) += -rhs_current; *(here->VBICemitEIBaseBIPtr) += Itzr_Vbei; *(here->VBICemitEIEmitEIPtr) += -Itzr_Vbei; *(here->VBICemitEIBaseBIPtr) += Itzr_Vbci; *(here->VBICemitEICollCIPtr) += -Itzr_Vbci; *(ckt->CKTrhs + here->VBICcollCINode) += rhs_current; *(here->VBICcollCIBaseBIPtr) += -Itzr_Vbei; *(here->VBICcollCIEmitEIPtr) += Itzr_Vbei; *(here->VBICcollCIBaseBIPtr) += -Itzr_Vbci; *(here->VBICcollCICollCIPtr) += Itzr_Vbci; /* c Stamp element: Ibc */ rhs_current = model->VBICtype * (Ibc - Ibc_Vbci*Vbci - Ibc_Vbei*Vbei); *(ckt->CKTrhs + here->VBICbaseBINode) += -rhs_current; *(here->VBICbaseBIBaseBIPtr) += Ibc_Vbci; *(here->VBICbaseBICollCIPtr) += -Ibc_Vbci; *(here->VBICbaseBIBaseBIPtr) += Ibc_Vbei; *(here->VBICbaseBIEmitEIPtr) += -Ibc_Vbei; *(ckt->CKTrhs + here->VBICcollCINode) += rhs_current; *(here->VBICcollCIBaseBIPtr) += -Ibc_Vbci; *(here->VBICcollCICollCIPtr) += Ibc_Vbci; *(here->VBICcollCIBaseBIPtr) += -Ibc_Vbei; *(here->VBICcollCIEmitEIPtr) += Ibc_Vbei; /* c Stamp element: Ibep */ rhs_current = model->VBICtype * (Ibep - Ibep_Vbep*Vbep); *(ckt->CKTrhs + here->VBICbaseBXNode) += -rhs_current; *(here->VBICbaseBXBaseBXPtr) += Ibep_Vbep; *(here->VBICbaseBXBaseBPPtr) += -Ibep_Vbep; *(ckt->CKTrhs + here->VBICbaseBPNode) += rhs_current; *(here->VBICbaseBPBaseBXPtr) += -Ibep_Vbep; *(here->VBICbaseBPBaseBPPtr) += Ibep_Vbep; /* c Stamp element: Rcx */ *(here->VBICcollCollPtr) += Ircx_Vrcx; *(here->VBICcollCXCollCXPtr) += Ircx_Vrcx; *(here->VBICcollCXCollPtr) += -Ircx_Vrcx; *(here->VBICcollCollCXPtr) += -Ircx_Vrcx; /* c Stamp element: Irci */ rhs_current = model->VBICtype * (Irci - Irci_Vrci*Vrci - Irci_Vbci*Vbci - Irci_Vbcx*Vbcx); *(ckt->CKTrhs + here->VBICcollCXNode) += -rhs_current; *(here->VBICcollCXCollCXPtr) += Irci_Vrci; *(here->VBICcollCXCollCIPtr) += -Irci_Vrci; *(here->VBICcollCXBaseBIPtr) += Irci_Vbci; *(here->VBICcollCXCollCIPtr) += -Irci_Vbci; *(here->VBICcollCXBaseBIPtr) += Irci_Vbcx; *(here->VBICcollCXCollCXPtr) += -Irci_Vbcx; *(ckt->CKTrhs + here->VBICcollCINode) += rhs_current; *(here->VBICcollCICollCXPtr) += -Irci_Vrci; *(here->VBICcollCICollCIPtr) += Irci_Vrci; *(here->VBICcollCIBaseBIPtr) += -Irci_Vbci; *(here->VBICcollCICollCIPtr) += Irci_Vbci; *(here->VBICcollCIBaseBIPtr) += -Irci_Vbcx; *(here->VBICcollCICollCXPtr) += Irci_Vbcx; /* c Stamp element: Rbx */ *(here->VBICbaseBasePtr) += Irbx_Vrbx; *(here->VBICbaseBXBaseBXPtr) += Irbx_Vrbx; *(here->VBICbaseBXBasePtr) += -Irbx_Vrbx; *(here->VBICbaseBaseBXPtr) += -Irbx_Vrbx; /* c Stamp element: Irbi */ rhs_current = model->VBICtype * (Irbi - Irbi_Vrbi*Vrbi - Irbi_Vbei*Vbei - Irbi_Vbci*Vbci); *(ckt->CKTrhs + here->VBICbaseBXNode) += -rhs_current; *(here->VBICbaseBXBaseBXPtr) += Irbi_Vrbi; *(here->VBICbaseBXBaseBIPtr) += -Irbi_Vrbi; *(here->VBICbaseBXBaseBIPtr) += Irbi_Vbei; *(here->VBICbaseBXEmitEIPtr) += -Irbi_Vbei; *(here->VBICbaseBXBaseBIPtr) += Irbi_Vbci; *(here->VBICbaseBXCollCIPtr) += -Irbi_Vbci; *(ckt->CKTrhs + here->VBICbaseBINode) += rhs_current; *(here->VBICbaseBIBaseBXPtr) += -Irbi_Vrbi; *(here->VBICbaseBIBaseBIPtr) += Irbi_Vrbi; *(here->VBICbaseBIBaseBIPtr) += -Irbi_Vbei; *(here->VBICbaseBIEmitEIPtr) += Irbi_Vbei; *(here->VBICbaseBIBaseBIPtr) += -Irbi_Vbci; *(here->VBICbaseBICollCIPtr) += Irbi_Vbci; /* c Stamp element: Re */ *(here->VBICemitEmitPtr) += Ire_Vre; *(here->VBICemitEIEmitEIPtr) += Ire_Vre; *(here->VBICemitEIEmitPtr) += -Ire_Vre; *(here->VBICemitEmitEIPtr) += -Ire_Vre; /* c Stamp element: Irbp */ rhs_current = model->VBICtype * (Irbp - Irbp_Vrbp*Vrbp - Irbp_Vbep*Vbep - Irbp_Vbci*Vbci); *(ckt->CKTrhs + here->VBICbaseBPNode) += -rhs_current; *(here->VBICbaseBPBaseBPPtr) += Irbp_Vrbp; *(here->VBICbaseBPCollCXPtr) += -Irbp_Vrbp; *(here->VBICbaseBPBaseBXPtr) += Irbp_Vbep; *(here->VBICbaseBPBaseBPPtr) += -Irbp_Vbep; *(here->VBICbaseBPBaseBIPtr) += Irbp_Vbci; *(here->VBICbaseBPCollCIPtr) += -Irbp_Vbci; *(ckt->CKTrhs + here->VBICcollCXNode) += rhs_current; *(here->VBICcollCXBaseBPPtr) += -Irbp_Vrbp; *(here->VBICcollCXCollCXPtr) += Irbp_Vrbp; *(here->VBICcollCXBaseBXPtr) += -Irbp_Vbep; *(here->VBICcollCXBaseBPPtr) += Irbp_Vbep; *(here->VBICcollCXBaseBIPtr) += -Irbp_Vbci; *(here->VBICcollCXCollCIPtr) += Irbp_Vbci; /* c Stamp element: Ibcp */ rhs_current = model->VBICtype * (Ibcp - Ibcp_Vbcp*Vbcp); *(ckt->CKTrhs + here->VBICsubsSINode) += -rhs_current; *(here->VBICsubsSISubsSIPtr) += Ibcp_Vbcp; *(here->VBICsubsSIBaseBPPtr) += -Ibcp_Vbcp; *(ckt->CKTrhs + here->VBICbaseBPNode) += rhs_current; *(here->VBICbaseBPSubsSIPtr) += -Ibcp_Vbcp; *(here->VBICbaseBPBaseBPPtr) += Ibcp_Vbcp; /* c Stamp element: Iccp */ rhs_current = model->VBICtype * (Iccp - Iccp_Vbep*Vbep - Iccp_Vbci*Vbci - Iccp_Vbcp*Vbcp); *(ckt->CKTrhs + here->VBICbaseBXNode) += -rhs_current; *(here->VBICbaseBXBaseBXPtr) += Iccp_Vbep; *(here->VBICbaseBXBaseBPPtr) += -Iccp_Vbep; *(here->VBICbaseBXBaseBIPtr) += Iccp_Vbci; *(here->VBICbaseBXCollCIPtr) += -Iccp_Vbci; *(here->VBICbaseBXSubsSIPtr) += Iccp_Vbcp; *(here->VBICbaseBXBaseBPPtr) += -Iccp_Vbcp; *(ckt->CKTrhs + here->VBICsubsSINode) += rhs_current; *(here->VBICsubsSIBaseBXPtr) += -Iccp_Vbep; *(here->VBICsubsSIBaseBPPtr) += Iccp_Vbep; *(here->VBICsubsSIBaseBIPtr) += -Iccp_Vbci; *(here->VBICsubsSICollCIPtr) += Iccp_Vbci; *(here->VBICsubsSISubsSIPtr) += -Iccp_Vbcp; *(here->VBICsubsSIBaseBPPtr) += Iccp_Vbcp; /* c Stamp element: Rs */ *(here->VBICsubsSubsPtr) += Irs_Vrs; *(here->VBICsubsSISubsSIPtr) += Irs_Vrs; *(here->VBICsubsSISubsPtr) += -Irs_Vrs; *(here->VBICsubsSubsSIPtr) += -Irs_Vrs; if (here->VBIC_selfheat) { /* c Stamp element: Ibe */ rhs_current = -Ibe_Vrth*Vrth; *(ckt->CKTrhs + here->VBICbaseBINode) += -rhs_current; *(here->VBICbaseBItempPtr) += Ibe_Vrth; *(ckt->CKTrhs + here->VBICemitEINode) += rhs_current; *(here->VBICemitEItempPtr) += -Ibe_Vrth; /* c Stamp element: Ibex */ rhs_current = -Ibex_Vrth*Vrth; *(ckt->CKTrhs + here->VBICbaseBXNode) += -rhs_current; *(here->VBICbaseBXtempPtr) += Ibex_Vrth; *(ckt->CKTrhs + here->VBICemitEINode) += rhs_current; *(here->VBICemitEItempPtr) += -Ibex_Vrth; /* c Stamp element: Itzf */ rhs_current = -Itzf_Vrth*Vrth; *(ckt->CKTrhs + here->VBICcollCINode) += -rhs_current; *(here->VBICcollCItempPtr) += Itzf_Vrth; *(ckt->CKTrhs + here->VBICemitEINode) += rhs_current; *(here->VBICemitEItempPtr) += -Itzf_Vrth; /* c Stamp element: Itzr */ rhs_current = -Itzr_Vrth*Vrth; *(ckt->CKTrhs + here->VBICemitEINode) += -rhs_current; *(here->VBICemitEItempPtr) += Itzr_Vrth; *(ckt->CKTrhs + here->VBICcollCINode) += rhs_current; *(here->VBICcollCItempPtr) += -Itzr_Vrth; /* c Stamp element: Ibc */ rhs_current = -Ibc_Vrth*Vrth; *(ckt->CKTrhs + here->VBICbaseBINode) += -rhs_current; *(here->VBICbaseBItempPtr) += Ibc_Vrth; *(ckt->CKTrhs + here->VBICcollCINode) += rhs_current; *(here->VBICcollCItempPtr) += -Ibc_Vrth; /* c Stamp element: Ibep */ rhs_current = -Ibep_Vrth*Vrth; *(ckt->CKTrhs + here->VBICbaseBXNode) += -rhs_current; *(here->VBICbaseBXtempPtr) += Ibep_Vrth; *(ckt->CKTrhs + here->VBICbaseBPNode) += rhs_current; *(here->VBICbaseBPtempPtr) += -Ibep_Vrth; /* c Stamp element: Rcx */ *(here->VBICcollTempPtr) += Ircx_Vrth; /* c Stamp element: Irci */ rhs_current = -Irci_Vrth*Vrth; *(ckt->CKTrhs + here->VBICcollCXNode) += -rhs_current; *(here->VBICcollCXtempPtr) += Irci_Vrth; *(ckt->CKTrhs + here->VBICcollCINode) += rhs_current; *(here->VBICcollCItempPtr) += -Irci_Vrth; /* c Stamp element: Rbx */ *(here->VBICbaseTempPtr) += Irbx_Vrth; /* c Stamp element: Irbi */ rhs_current = -Irbi_Vrth*Vrth; *(ckt->CKTrhs + here->VBICbaseBXNode) += -rhs_current; *(here->VBICbaseBXtempPtr) += Irbi_Vrth; *(ckt->CKTrhs + here->VBICbaseBINode) += rhs_current; *(here->VBICbaseBItempPtr) += -Irbi_Vrth; /* c Stamp element: Re */ *(here->VBICemitTempPtr) += Ire_Vrth; /* c Stamp element: Irbp */ rhs_current = -Irbp_Vrth*Vrth; *(ckt->CKTrhs + here->VBICbaseBPNode) += -rhs_current; *(here->VBICbaseBPtempPtr) += Irbp_Vrth; *(ckt->CKTrhs + here->VBICcollCXNode) += rhs_current; *(here->VBICcollCXtempPtr) += -Irbp_Vrth; /* c Stamp element: Ibcp */ rhs_current = -Ibcp_Vrth*Vrth; *(ckt->CKTrhs + here->VBICsubsSINode) += -rhs_current; *(here->VBICsubsSItempPtr) += Ibcp_Vrth; *(ckt->CKTrhs + here->VBICbaseBPNode) += rhs_current; *(here->VBICbaseBPtempPtr) += -Ibcp_Vrth; /* c Stamp element: Iccp */ rhs_current = -Iccp_Vrth*Vrth; *(ckt->CKTrhs + here->VBICbaseBXNode) += -rhs_current; *(here->VBICbaseBXtempPtr) += Iccp_Vrth; *(ckt->CKTrhs + here->VBICsubsSINode) += rhs_current; *(here->VBICsubsSItempPtr) += -Iccp_Vrth; /* c Stamp element: Rs */ *(here->VBICsubsTempPtr) += Irs_Vrth; /* c Stamp element: Rth */ *(here->VBICtempTempPtr) += Irth_Vrth; /* c Stamp element: Cth */ *(here->VBICtempTempPtr) += Icth_Vrth; /* c Stamp element: Ith */ rhs_current = - Ith + Ith_Vrth*Vrth + Icth - Icth_Vrth*Vrth + Ith_Vbei*Vbei + Ith_Vbci*Vbci + Ith_Vcei*Vcei + Ith_Vbex*Vbex + Ith_Vbep*Vbep + Ith_Vbcp*Vbcp + Ith_Vcep*Vcep + Ith_Vrci*Vrci + Ith_Vbcx*Vbcx + Ith_Vrbi*Vrbi + Ith_Vrbp*Vrbp + Ith_Vrcx*Vrcx + Ith_Vrbx*Vrbx + Ith_Vre*Vre + Ith_Vrs*Vrs; *(ckt->CKTrhs + here->VBICtempNode) -= rhs_current; *(here->VBICtempTempPtr) += -Ith_Vrth; *(here->VBICtempBaseBIPtr) += -Ith_Vbei; *(here->VBICtempEmitEIPtr) += +Ith_Vbei; *(here->VBICtempBaseBIPtr) += -Ith_Vbci; *(here->VBICtempCollCIPtr) += +Ith_Vbci; *(here->VBICtempCollCIPtr) += -Ith_Vcei; *(here->VBICtempEmitEIPtr) += +Ith_Vcei; *(here->VBICtempBaseBXPtr) += -Ith_Vbex; *(here->VBICtempEmitEIPtr) += +Ith_Vbex; *(here->VBICtempBaseBXPtr) += -Ith_Vbep; *(here->VBICtempBaseBPPtr) += +Ith_Vbep; *(here->VBICtempSubsPtr) += -Ith_Vbcp; *(here->VBICtempBaseBPPtr) += +Ith_Vbcp; *(here->VBICtempBaseBXPtr) += -Ith_Vcep; *(here->VBICtempSubsPtr) += +Ith_Vcep; *(here->VBICtempCollCXPtr) += -Ith_Vrci; *(here->VBICtempCollCIPtr) += +Ith_Vrci; *(here->VBICtempBaseBIPtr) += -Ith_Vbcx; *(here->VBICtempCollCXPtr) += +Ith_Vbcx; *(here->VBICtempBaseBXPtr) += -Ith_Vrbi; *(here->VBICtempBaseBIPtr) += +Ith_Vrbi; *(here->VBICtempBaseBPPtr) += -Ith_Vrbp; *(here->VBICtempCollCXPtr) += +Ith_Vrbp; *(here->VBICtempCollCXPtr) += +Ith_Vrcx; *(here->VBICtempBaseBXPtr) += +Ith_Vrbx; *(here->VBICtempEmitEIPtr) += +Ith_Vre; *(here->VBICtempSubsPtr) += +Ith_Vrs; } } } return(OK); } int vbic_4T_et_cf_fj(double *p ,double *Vrth, double *Vbei, double *Vbex, double *Vbci, double *Vbep, double *Vbcp ,double *Vrcx, double *Vbcx, double *Vrci, double *Vrbx, double *Vrbi, double *Vre, double *Vrbp ,double *Vrs, double *Vbe, double *Vbc, double *Vcei, double *Vcep, double *Ibe, double *Ibe_Vrth ,double *Ibe_Vbei, double *Ibex, double *Ibex_Vrth, double *Ibex_Vbex, double *Itzf, double *Itzf_Vrth, double *Itzf_Vbei ,double *Itzf_Vbci, double *Itzr, double *Itzr_Vrth, double *Itzr_Vbci, double *Itzr_Vbei, double *Ibc, double *Ibc_Vrth ,double *Ibc_Vbci, double *Ibc_Vbei, double *Ibep, double *Ibep_Vrth, double *Ibep_Vbep, double *Ircx, double *Ircx_Vrcx ,double *Ircx_Vrth, double *Irci, double *Irci_Vrci, double *Irci_Vrth, double *Irci_Vbci, double *Irci_Vbcx, double *Irbx ,double *Irbx_Vrbx, double *Irbx_Vrth, double *Irbi, double *Irbi_Vrbi, double *Irbi_Vrth, double *Irbi_Vbei, double *Irbi_Vbci ,double *Ire, double *Ire_Vre, double *Ire_Vrth, double *Irbp, double *Irbp_Vrbp, double *Irbp_Vrth, double *Irbp_Vbep ,double *Irbp_Vbci, double *Qbe, double *Qbe_Vrth, double *Qbe_Vbei, double *Qbe_Vbci, double *Qbex, double *Qbex_Vrth ,double *Qbex_Vbex, double *Qbc, double *Qbc_Vrth, double *Qbc_Vbci, double *Qbcx, double *Qbcx_Vrth, double *Qbcx_Vbcx ,double *Qbep, double *Qbep_Vrth, double *Qbep_Vbep, double *Qbep_Vbci, double *Qbeo, double *Qbeo_Vbe, double *Qbco ,double *Qbco_Vbc, double *Ibcp, double *Ibcp_Vrth, double *Ibcp_Vbcp, double *Iccp, double *Iccp_Vrth, double *Iccp_Vbep ,double *Iccp_Vbci, double *Iccp_Vbcp, double *Irs, double *Irs_Vrs, double *Irs_Vrth, double *Qbcp, double *Qbcp_Vrth ,double *Qbcp_Vbcp, double *Irth, double *Irth_Vrth, double *Ith, double *Ith_Vrth, double *Ith_Vbei, double *Ith_Vbci ,double *Ith_Vcei, double *Ith_Vbex, double *Ith_Vbep, double *Ith_Vrs, double *Ith_Vbcp, double *Ith_Vcep, double *Ith_Vrcx ,double *Ith_Vrci, double *Ith_Vbcx, double *Ith_Vrbx, double *Ith_Vrbi, double *Ith_Vre, double *Ith_Vrbp, double *Qcth ,double *Qcth_Vrth, double *SCALE) { double Tini,Tdev,Tdev_Vrth,Vtv,Vtv_Tdev,Vtv_Vrth,rT; double rT_Tdev,rT_Vrth,dT,dT_Tdev,dT_Vrth,xvar1,xvar1_rT; double xvar1_Vrth,IKFatT,IKFatT_xvar1,IKFatT_Vrth,RCXatT,RCXatT_xvar1,RCXatT_Vrth; double RCIatT,RCIatT_xvar1,RCIatT_Vrth,RBXatT,RBXatT_xvar1,RBXatT_Vrth,RBIatT; double RBIatT_xvar1,RBIatT_Vrth,REatT,REatT_xvar1,REatT_Vrth,RSatT,RSatT_xvar1; double RSatT_Vrth,RBPatT,RBPatT_xvar1,RBPatT_Vrth,xvar2,xvar2_rT,xvar2_Vrth; double xvar3,xvar3_rT,xvar3_Vrth,xvar3_Vtv,xvar4,xvar4_xvar3,xvar4_Vrth; double xvar1_xvar2,xvar1_xvar4,xvar5,xvar6,xvar6_xvar1,xvar6_Vrth,ISatT; double ISatT_xvar6,ISatT_Vrth,ISRRatT,ISRRatT_xvar6,ISRRatT_Vrth,ISPatT,ISPatT_xvar6; double ISPatT_Vrth,IBEIatT,IBEIatT_xvar6,IBEIatT_Vrth,IBENatT,IBENatT_xvar6,IBENatT_Vrth; double IBCIatT,IBCIatT_xvar6,IBCIatT_Vrth,IBCNatT,IBCNatT_xvar6,IBCNatT_Vrth,IBEIPatT; double IBEIPatT_xvar6,IBEIPatT_Vrth,IBENPatT,IBENPatT_xvar6,IBENPatT_Vrth,IBCIPatT,IBCIPatT_xvar6; double IBCIPatT_Vrth,IBCNPatT,IBCNPatT_xvar6,IBCNPatT_Vrth,NFatT,NFatT_dT,NFatT_Vrth; double NRatT,NRatT_dT,NRatT_Vrth,AVC2atT,AVC2atT_dT,AVC2atT_Vrth,VBBEatT; double VBBEatT_dT,VBBEatT_Vrth,NBBEatT,NBBEatT_dT,NBBEatT_Vrth,xvar2_Vtv,xvar3_xvar2; double xvar4_rT,xvar4_Vtv,xvar5_xvar4,xvar5_Vrth,xvar1_xvar3,xvar1_xvar5,psiio; double psiio_Vtv,psiio_Vrth,psiio_rT,psiio_xvar6,psiin,psiin_psiio,psiin_Vrth; double psiin_rT,psiin_Vtv,psiin_xvar1,xvar2_psiin,xvar4_xvar1,PEatT,PEatT_psiin; double PEatT_Vrth,PEatT_Vtv,PEatT_xvar4,PCatT,PCatT_psiin,PCatT_Vrth,PCatT_Vtv; double PCatT_xvar4,PSatT,PSatT_psiin,PSatT_Vrth,PSatT_Vtv,PSatT_xvar4,xvar1_PEatT; double xvar2_xvar1,CJEatT,CJEatT_xvar2,CJEatT_Vrth,xvar1_PCatT,CJCatT,CJCatT_xvar2; double CJCatT_Vrth,CJEPatT,CJEPatT_xvar2,CJEPatT_Vrth,xvar1_PSatT,CJCPatT,CJCPatT_xvar2; double CJCPatT_Vrth,GAMMatT,GAMMatT_xvar1,GAMMatT_Vrth,GAMMatT_xvar3,VOatT,VOatT_xvar1; double VOatT_Vrth,xvar1_VBBEatT,xvar1_NBBEatT,xvar1_Vtv,EBBEatT,EBBEatT_xvar1,EBBEatT_Vrth; double IVEF,IVER,IIKF,IIKF_IKFatT,IIKF_Vrth,IIKR,IIKP; double IVO,IVO_VOatT,IVO_Vrth,IHRCF,IVTF,IITF,slTF; double dv0,dv0_PEatT,dv0_Vrth,dvh,dvh_Vbei,dvh_dv0,dvh_Vrth; double pwq,qlo,qlo_PEatT,qlo_Vrth,qlo_Vbei,qhi,qhi_dvh; double qhi_Vbei,qhi_Vrth,qhi_PEatT,xvar1_Vbei,xvar3_xvar1,xvar3_Vbei,qlo_xvar3; double qdbe,qdbe_qlo,qdbe_Vrth,qdbe_Vbei,qdbe_qhi,mv0,mv0_dv0; double mv0_Vrth,vl0,vl0_dv0,vl0_Vrth,vl0_mv0,xvar1_vl0,q0; double q0_PEatT,q0_Vrth,q0_xvar3,dv,dv_Vbei,dv_dv0,dv_Vrth; double mv,mv_dv,mv_Vbei,mv_Vrth,vl,vl_dv,vl_Vbei; double vl_Vrth,vl_mv,vl_dv0,xvar1_vl,qdbe_vl,qdbe_vl0,qdbe_q0; double dvh_Vbex,qlo_Vbex,qhi_Vbex,xvar1_Vbex,xvar3_Vbex,qdbex,qdbex_qlo; double qdbex_Vrth,qdbex_Vbex,qdbex_qhi,dv_Vbex,mv_Vbex,vl_Vbex,qdbex_vl; double qdbex_vl0,qdbex_q0,dv0_PCatT,dvh_Vbci,qlo_PCatT,qlo_Vbci,qhi_Vbci; double qhi_PCatT,xvar1_Vbci,xvar3_Vbci,qdbc,qdbc_qlo,qdbc_Vrth,qdbc_Vbci; double qdbc_qhi,vn0,vn0_dv0,vn0_Vrth,vnl0,vnl0_vn0,vnl0_Vrth; double vl0_vnl0,qlo0,qlo0_PCatT,qlo0_Vrth,qlo0_xvar3,vn,vn_Vbci; double vn_dv0,vn_Vrth,vnl,vnl_vn,vnl_Vbci,vnl_Vrth,vl_vnl; double vl_Vbci,sel,sel_vnl,sel_Vbci,sel_Vrth,crt,crt_xvar1; double crt_Vrth,xvar1_dv0,cmx,cmx_xvar1,cmx_Vrth,cl,cl_sel; double cl_Vbci,cl_Vrth,cl_crt,cl_cmx,ql,ql_Vbci,ql_vl; double ql_Vrth,ql_vl0,ql_cl,qdbc_ql,qdbc_qlo0,q0_PCatT,dv_Vbci; double mv_Vbci,qdbc_vl,qdbc_vl0,qdbc_q0,dvh_Vbep,qlo_Vbep,qhi_Vbep; double xvar1_Vbep,xvar3_Vbep,qdbep,qdbep_qlo,qdbep_Vrth,qdbep_Vbep,qdbep_qhi; double vn_Vbep,vnl_Vbep,vl_Vbep,sel_Vbep,cl_Vbep,ql_Vbep,qdbep_ql; double qdbep_qlo0,dv_Vbep,mv_Vbep,qdbep_vl,qdbep_vl0,qdbep_q0,dv0_PSatT; double dvh_Vbcp,qlo_PSatT,qlo_Vbcp,qhi_Vbcp,qhi_PSatT,xvar1_Vbcp,xvar3_Vbcp; double qdbcp,qdbcp_qlo,qdbcp_Vrth,qdbcp_Vbcp,qdbcp_Vbep,qdbcp_qhi,q0_PSatT; double dv_Vbcp,mv_Vbcp,vl_Vbcp,qdbcp_vl,qdbcp_vl0,qdbcp_q0,argi; double argi_Vbei,argi_NFatT,argi_Vrth,argi_Vtv,expi,expi_argi,expi_Vbei; double expi_Vrth,Ifi,Ifi_ISatT,Ifi_Vrth,Ifi_expi,Ifi_Vbei,argi_Vbci; double argi_NRatT,expi_Vbci,Iri,Iri_ISatT,Iri_Vrth,Iri_ISRRatT,Iri_expi; double Iri_Vbci,q1z,q1z_qdbe,q1z_Vrth,q1z_Vbei,q1z_qdbc,q1z_Vbci; double q1,q1_q1z,q1_Vrth,q1_Vbei,q1_Vbci,q2,q2_Ifi; double q2_Vrth,q2_Vbei,q2_IIKF,q2_Iri,q2_Vbci,xvar3_q1,xvar1_q2; double xvar4_Vbei,xvar4_Vbci,qb,qb_q1,qb_Vrth,qb_Vbei,qb_Vbci; double qb_xvar4,xvar2_Vbei,xvar2_Vbci,qb_xvar2,Itzr_Iri,Itzr_qb,Itzf_Ifi; double Itzf_qb,argi_Vbep,expi_Vbep,argx,argx_Vbci,argx_Vtv,argx_Vrth; double expx,expx_argx,expx_Vbci,expx_Vrth,Ifp,Ifp_ISPatT,Ifp_Vrth; double Ifp_expi,Ifp_Vbep,Ifp_expx,Ifp_Vbci,q2p,q2p_Ifp,q2p_Vrth; double q2p_Vbep,q2p_Vbci,qbp,qbp_q2p,qbp_Vrth,qbp_Vbep,qbp_Vbci; double argi_Vbcp,expi_Vbcp,Irp,Irp_ISPatT,Irp_Vrth,Irp_expi,Irp_Vbcp; double Iccp_Ifp,Iccp_Irp,Iccp_qbp,argn,argn_Vbei,argn_Vtv,argn_Vrth; double expn,expn_argn,expn_Vbei,expn_Vrth,argx_VBBEatT,argx_Vbei,argx_NBBEatT; double expx_Vbei,Ibe_IBEIatT,Ibe_expi,Ibe_IBENatT,Ibe_expn,Ibe_expx,Ibe_EBBEatT; double argi_Vbex,expi_Vbex,argn_Vbex,expn_Vbex,argx_Vbex,expx_Vbex,Ibex_IBEIatT; double Ibex_expi,Ibex_IBENatT,Ibex_expn,Ibex_expx,Ibex_EBBEatT,argn_Vbci,expn_Vbci; double Ibcj,Ibcj_IBCIatT,Ibcj_Vrth,Ibcj_expi,Ibcj_Vbci,Ibcj_IBCNatT,Ibcj_expn; double argn_Vbep,expn_Vbep,Ibep_IBEIPatT,Ibep_expi,Ibep_IBENPatT,Ibep_expn,vl_PCatT; double xvar3_vl,xvar1_AVC2atT,avalf,avalf_vl,avalf_Vrth,avalf_Vbci,avalf_xvar4; double Igc,Igc_Itzf,Igc_Vrth,Igc_Vbei,Igc_Vbci,Igc_Itzr,Igc_Ibcj; double Igc_avalf,Ibc_Ibcj,Ibc_Igc,Ircx_RCXatT,argx_Vbcx,expx_Vbcx,Kbci; double Kbci_GAMMatT,Kbci_Vrth,Kbci_expi,Kbci_Vbci,Kbcx,Kbcx_GAMMatT,Kbcx_Vrth; double Kbcx_expx,Kbcx_Vbcx,rKp1,rKp1_Kbci,rKp1_Vrth,rKp1_Vbci,rKp1_Kbcx; double rKp1_Vbcx,xvar1_rKp1,xvar1_Vbcx,Iohm,Iohm_Vrci,Iohm_Vtv,Iohm_Vrth; double Iohm_Kbci,Iohm_Vbci,Iohm_Kbcx,Iohm_Vbcx,Iohm_xvar1,Iohm_RCIatT,derf; double derf_IVO,derf_Vrth,derf_RCIatT,derf_Iohm,derf_Vrci,derf_Vbci,derf_Vbcx; double Irci_Iohm,Irci_derf,Irbx_RBXatT,Irbi_qb,Irbi_RBIatT,Ire_REatT,Irbp_qbp; double Irbp_RBPatT,argn_Vbcp,expn_Vbcp,Ibcp_IBCIPatT,Ibcp_expi,Ibcp_IBCNPatT,Ibcp_expn; double Irs_RSatT,sgIf,rIf,rIf_Ifi,rIf_Vrth,rIf_Vbei,mIf; double mIf_rIf,mIf_Vrth,mIf_Vbei,tff,tff_q1,tff_Vrth,tff_Vbei; double tff_Vbci,tff_xvar2,tff_mIf,Qbe_CJEatT,Qbe_qdbe,Qbe_tff,Qbe_Ifi; double Qbe_qb,Qbex_CJEatT,Qbex_qdbex,Qbc_CJCatT,Qbc_qdbc,Qbc_Iri,Qbc_Kbci; double Qbcx_Kbcx,Qbep_CJEPatT,Qbep_qdbep,Qbep_Ifp,Qbcp_CJCPatT,Qbcp_qdbcp,Ith_Ibe; double Ith_Ibc,Ith_Itzf,Ith_Itzr,Ith_Ibex,Ith_Ibep,Ith_Irs,Ith_Ibcp; double Ith_Iccp,Ith_Ircx,Ith_Irci,Ith_Irbx,Ith_Irbi,Ith_Ire,Ith_Irbp; /* Function and derivative code */ Tini=2.731500e+02+p[0]; Tdev=(2.731500e+02+p[0])+(*Vrth); Tdev_Vrth=1.0; Vtv=1.380662e-23*Tdev/1.602189e-19; Vtv_Tdev=8.617347e-5; Vtv_Vrth=Vtv_Tdev*Tdev_Vrth; rT=Tdev/Tini; rT_Tdev=1.0/Tini; rT_Vrth=rT_Tdev*Tdev_Vrth; dT=Tdev-Tini; dT_Tdev=1.0; dT_Vrth=dT_Tdev*Tdev_Vrth; xvar1=pow(rT,p[90]); xvar1_rT=xvar1*p[90]/rT; xvar1_Vrth=xvar1_rT*rT_Vrth; IKFatT=p[53]*xvar1; IKFatT_xvar1=p[53]; IKFatT_Vrth=IKFatT_xvar1*xvar1_Vrth; xvar1=pow(rT,p[91]); xvar1_rT=xvar1*p[91]/rT; xvar1_Vrth=xvar1_rT*rT_Vrth; RCXatT=p[1]*xvar1; RCXatT_xvar1=p[1]; RCXatT_Vrth=RCXatT_xvar1*xvar1_Vrth; xvar1=pow(rT,p[68]); xvar1_rT=xvar1*p[68]/rT; xvar1_Vrth=xvar1_rT*rT_Vrth; RCIatT=p[2]*xvar1; RCIatT_xvar1=p[2]; RCIatT_Vrth=RCIatT_xvar1*xvar1_Vrth; xvar1=pow(rT,p[92]); xvar1_rT=xvar1*p[92]/rT; xvar1_Vrth=xvar1_rT*rT_Vrth; RBXatT=p[6]*xvar1; RBXatT_xvar1=p[6]; RBXatT_Vrth=RBXatT_xvar1*xvar1_Vrth; xvar1=pow(rT,p[67]); xvar1_rT=xvar1*p[67]/rT; xvar1_Vrth=xvar1_rT*rT_Vrth; RBIatT=p[7]*xvar1; RBIatT_xvar1=p[7]; RBIatT_Vrth=RBIatT_xvar1*xvar1_Vrth; xvar1=pow(rT,p[66]); xvar1_rT=xvar1*p[66]/rT; xvar1_Vrth=xvar1_rT*rT_Vrth; REatT=p[8]*xvar1; REatT_xvar1=p[8]; REatT_Vrth=REatT_xvar1*xvar1_Vrth; xvar1=pow(rT,p[69]); xvar1_rT=xvar1*p[69]/rT; xvar1_Vrth=xvar1_rT*rT_Vrth; RSatT=p[9]*xvar1; RSatT_xvar1=p[9]; RSatT_Vrth=RSatT_xvar1*xvar1_Vrth; xvar1=pow(rT,p[93]); xvar1_rT=xvar1*p[93]/rT; xvar1_Vrth=xvar1_rT*rT_Vrth; RBPatT=p[10]*xvar1; RBPatT_xvar1=p[10]; RBPatT_Vrth=RBPatT_xvar1*xvar1_Vrth; xvar2=pow(rT,p[78]); xvar2_rT=xvar2*p[78]/rT; xvar2_Vrth=xvar2_rT*rT_Vrth; xvar3=-p[71]*(1.0-rT)/Vtv; xvar3_rT=p[71]/Vtv; xvar3_Vtv=p[71]*(1.0-rT)/(Vtv*Vtv); xvar3_Vrth=xvar3_rT*rT_Vrth; xvar3_Vrth=xvar3_Vrth+xvar3_Vtv*Vtv_Vrth; xvar4=exp(xvar3); xvar4_xvar3=xvar4; xvar4_Vrth=xvar4_xvar3*xvar3_Vrth; xvar1=(xvar2*xvar4); xvar1_xvar2=xvar4; xvar1_xvar4=xvar2; xvar1_Vrth=xvar1_xvar2*xvar2_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_xvar4*xvar4_Vrth; xvar5=(1.0/p[12]); xvar6=pow(xvar1,xvar5); xvar6_xvar1=xvar6*xvar5/xvar1; xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; ISatT=p[11]*xvar6; ISatT_xvar6=p[11]; ISatT_Vrth=ISatT_xvar6*xvar6_Vrth; xvar2=pow(rT,p[95]); xvar2_rT=xvar2*p[95]/rT; xvar2_Vrth=xvar2_rT*rT_Vrth; xvar3=-p[96]*(1.0-rT)/Vtv; xvar3_rT=p[96]/Vtv; xvar3_Vtv=p[96]*(1.0-rT)/(Vtv*Vtv); xvar3_Vrth=xvar3_rT*rT_Vrth; xvar3_Vrth=xvar3_Vrth+xvar3_Vtv*Vtv_Vrth; xvar4=exp(xvar3); xvar4_xvar3=xvar4; xvar4_Vrth=xvar4_xvar3*xvar3_Vrth; xvar1=(xvar2*xvar4); xvar1_xvar2=xvar4; xvar1_xvar4=xvar2; xvar1_Vrth=xvar1_xvar2*xvar2_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_xvar4*xvar4_Vrth; xvar5=(1.0/p[13]); xvar6=pow(xvar1,xvar5); xvar6_xvar1=xvar6*xvar5/xvar1; xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; ISRRatT=p[94]*xvar6; ISRRatT_xvar6=p[94]; ISRRatT_Vrth=ISRRatT_xvar6*xvar6_Vrth; xvar2=pow(rT,p[78]); xvar2_rT=xvar2*p[78]/rT; xvar2_Vrth=xvar2_rT*rT_Vrth; xvar3=-p[97]*(1.0-rT)/Vtv; xvar3_rT=p[97]/Vtv; xvar3_Vtv=p[97]*(1.0-rT)/(Vtv*Vtv); xvar3_Vrth=xvar3_rT*rT_Vrth; xvar3_Vrth=xvar3_Vrth+xvar3_Vtv*Vtv_Vrth; xvar4=exp(xvar3); xvar4_xvar3=xvar4; xvar4_Vrth=xvar4_xvar3*xvar3_Vrth; xvar1=(xvar2*xvar4); xvar1_xvar2=xvar4; xvar1_xvar4=xvar2; xvar1_Vrth=xvar1_xvar2*xvar2_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_xvar4*xvar4_Vrth; xvar5=(1.0/p[44]); xvar6=pow(xvar1,xvar5); xvar6_xvar1=xvar6*xvar5/xvar1; xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; ISPatT=p[42]*xvar6; ISPatT_xvar6=p[42]; ISPatT_Vrth=ISPatT_xvar6*xvar6_Vrth; xvar2=pow(rT,p[79]); xvar2_rT=xvar2*p[79]/rT; xvar2_Vrth=xvar2_rT*rT_Vrth; xvar3=-p[72]*(1.0-rT)/Vtv; xvar3_rT=p[72]/Vtv; xvar3_Vtv=p[72]*(1.0-rT)/(Vtv*Vtv); xvar3_Vrth=xvar3_rT*rT_Vrth; xvar3_Vrth=xvar3_Vrth+xvar3_Vtv*Vtv_Vrth; xvar4=exp(xvar3); xvar4_xvar3=xvar4; xvar4_Vrth=xvar4_xvar3*xvar3_Vrth; xvar1=(xvar2*xvar4); xvar1_xvar2=xvar4; xvar1_xvar4=xvar2; xvar1_Vrth=xvar1_xvar2*xvar2_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_xvar4*xvar4_Vrth; xvar5=(1.0/p[33]); xvar6=pow(xvar1,xvar5); xvar6_xvar1=xvar6*xvar5/xvar1; xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; IBEIatT=p[31]*xvar6; IBEIatT_xvar6=p[31]; IBEIatT_Vrth=IBEIatT_xvar6*xvar6_Vrth; xvar2=pow(rT,p[80]); xvar2_rT=xvar2*p[80]/rT; xvar2_Vrth=xvar2_rT*rT_Vrth; xvar3=-p[75]*(1.0-rT)/Vtv; xvar3_rT=p[75]/Vtv; xvar3_Vtv=p[75]*(1.0-rT)/(Vtv*Vtv); xvar3_Vrth=xvar3_rT*rT_Vrth; xvar3_Vrth=xvar3_Vrth+xvar3_Vtv*Vtv_Vrth; xvar4=exp(xvar3); xvar4_xvar3=xvar4; xvar4_Vrth=xvar4_xvar3*xvar3_Vrth; xvar1=(xvar2*xvar4); xvar1_xvar2=xvar4; xvar1_xvar4=xvar2; xvar1_Vrth=xvar1_xvar2*xvar2_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_xvar4*xvar4_Vrth; xvar5=(1.0/p[35]); xvar6=pow(xvar1,xvar5); xvar6_xvar1=xvar6*xvar5/xvar1; xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; IBENatT=p[34]*xvar6; IBENatT_xvar6=p[34]; IBENatT_Vrth=IBENatT_xvar6*xvar6_Vrth; xvar2=pow(rT,p[79]); xvar2_rT=xvar2*p[79]/rT; xvar2_Vrth=xvar2_rT*rT_Vrth; xvar3=-p[73]*(1.0-rT)/Vtv; xvar3_rT=p[73]/Vtv; xvar3_Vtv=p[73]*(1.0-rT)/(Vtv*Vtv); xvar3_Vrth=xvar3_rT*rT_Vrth; xvar3_Vrth=xvar3_Vrth+xvar3_Vtv*Vtv_Vrth; xvar4=exp(xvar3); xvar4_xvar3=xvar4; xvar4_Vrth=xvar4_xvar3*xvar3_Vrth; xvar1=(xvar2*xvar4); xvar1_xvar2=xvar4; xvar1_xvar4=xvar2; xvar1_Vrth=xvar1_xvar2*xvar2_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_xvar4*xvar4_Vrth; xvar5=(1.0/p[37]); xvar6=pow(xvar1,xvar5); xvar6_xvar1=xvar6*xvar5/xvar1; xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; IBCIatT=p[36]*xvar6; IBCIatT_xvar6=p[36]; IBCIatT_Vrth=IBCIatT_xvar6*xvar6_Vrth; xvar2=pow(rT,p[80]); xvar2_rT=xvar2*p[80]/rT; xvar2_Vrth=xvar2_rT*rT_Vrth; xvar3=-p[76]*(1.0-rT)/Vtv; xvar3_rT=p[76]/Vtv; xvar3_Vtv=p[76]*(1.0-rT)/(Vtv*Vtv); xvar3_Vrth=xvar3_rT*rT_Vrth; xvar3_Vrth=xvar3_Vrth+xvar3_Vtv*Vtv_Vrth; xvar4=exp(xvar3); xvar4_xvar3=xvar4; xvar4_Vrth=xvar4_xvar3*xvar3_Vrth; xvar1=(xvar2*xvar4); xvar1_xvar2=xvar4; xvar1_xvar4=xvar2; xvar1_Vrth=xvar1_xvar2*xvar2_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_xvar4*xvar4_Vrth; xvar5=(1.0/p[39]); xvar6=pow(xvar1,xvar5); xvar6_xvar1=xvar6*xvar5/xvar1; xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; IBCNatT=p[38]*xvar6; IBCNatT_xvar6=p[38]; IBCNatT_Vrth=IBCNatT_xvar6*xvar6_Vrth; xvar2=pow(rT,p[79]); xvar2_rT=xvar2*p[79]/rT; xvar2_Vrth=xvar2_rT*rT_Vrth; xvar3=-p[73]*(1.0-rT)/Vtv; xvar3_rT=p[73]/Vtv; xvar3_Vtv=p[73]*(1.0-rT)/(Vtv*Vtv); xvar3_Vrth=xvar3_rT*rT_Vrth; xvar3_Vrth=xvar3_Vrth+xvar3_Vtv*Vtv_Vrth; xvar4=exp(xvar3); xvar4_xvar3=xvar4; xvar4_Vrth=xvar4_xvar3*xvar3_Vrth; xvar1=(xvar2*xvar4); xvar1_xvar2=xvar4; xvar1_xvar4=xvar2; xvar1_Vrth=xvar1_xvar2*xvar2_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_xvar4*xvar4_Vrth; xvar5=(1.0/p[37]); xvar6=pow(xvar1,xvar5); xvar6_xvar1=xvar6*xvar5/xvar1; xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; IBEIPatT=p[45]*xvar6; IBEIPatT_xvar6=p[45]; IBEIPatT_Vrth=IBEIPatT_xvar6*xvar6_Vrth; xvar2=pow(rT,p[80]); xvar2_rT=xvar2*p[80]/rT; xvar2_Vrth=xvar2_rT*rT_Vrth; xvar3=-p[76]*(1.0-rT)/Vtv; xvar3_rT=p[76]/Vtv; xvar3_Vtv=p[76]*(1.0-rT)/(Vtv*Vtv); xvar3_Vrth=xvar3_rT*rT_Vrth; xvar3_Vrth=xvar3_Vrth+xvar3_Vtv*Vtv_Vrth; xvar4=exp(xvar3); xvar4_xvar3=xvar4; xvar4_Vrth=xvar4_xvar3*xvar3_Vrth; xvar1=(xvar2*xvar4); xvar1_xvar2=xvar4; xvar1_xvar4=xvar2; xvar1_Vrth=xvar1_xvar2*xvar2_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_xvar4*xvar4_Vrth; xvar5=(1.0/p[39]); xvar6=pow(xvar1,xvar5); xvar6_xvar1=xvar6*xvar5/xvar1; xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; IBENPatT=p[46]*xvar6; IBENPatT_xvar6=p[46]; IBENPatT_Vrth=IBENPatT_xvar6*xvar6_Vrth; xvar2=pow(rT,p[79]); xvar2_rT=xvar2*p[79]/rT; xvar2_Vrth=xvar2_rT*rT_Vrth; xvar3=-p[74]*(1.0-rT)/Vtv; xvar3_rT=p[74]/Vtv; xvar3_Vtv=p[74]*(1.0-rT)/(Vtv*Vtv); xvar3_Vrth=xvar3_rT*rT_Vrth; xvar3_Vrth=xvar3_Vrth+xvar3_Vtv*Vtv_Vrth; xvar4=exp(xvar3); xvar4_xvar3=xvar4; xvar4_Vrth=xvar4_xvar3*xvar3_Vrth; xvar1=(xvar2*xvar4); xvar1_xvar2=xvar4; xvar1_xvar4=xvar2; xvar1_Vrth=xvar1_xvar2*xvar2_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_xvar4*xvar4_Vrth; xvar5=(1.0/p[48]); xvar6=pow(xvar1,xvar5); xvar6_xvar1=xvar6*xvar5/xvar1; xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; IBCIPatT=p[47]*xvar6; IBCIPatT_xvar6=p[47]; IBCIPatT_Vrth=IBCIPatT_xvar6*xvar6_Vrth; xvar2=pow(rT,p[80]); xvar2_rT=xvar2*p[80]/rT; xvar2_Vrth=xvar2_rT*rT_Vrth; xvar3=-p[77]*(1.0-rT)/Vtv; xvar3_rT=p[77]/Vtv; xvar3_Vtv=p[77]*(1.0-rT)/(Vtv*Vtv); xvar3_Vrth=xvar3_rT*rT_Vrth; xvar3_Vrth=xvar3_Vrth+xvar3_Vtv*Vtv_Vrth; xvar4=exp(xvar3); xvar4_xvar3=xvar4; xvar4_Vrth=xvar4_xvar3*xvar3_Vrth; xvar1=(xvar2*xvar4); xvar1_xvar2=xvar4; xvar1_xvar4=xvar2; xvar1_Vrth=xvar1_xvar2*xvar2_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_xvar4*xvar4_Vrth; xvar5=(1.0/p[50]); xvar6=pow(xvar1,xvar5); xvar6_xvar1=xvar6*xvar5/xvar1; xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; IBCNPatT=p[49]*xvar6; IBCNPatT_xvar6=p[49]; IBCNPatT_Vrth=IBCNPatT_xvar6*xvar6_Vrth; NFatT=p[12]*(1.0+dT*p[81]); NFatT_dT=p[12]*p[81]; NFatT_Vrth=NFatT_dT*dT_Vrth; NRatT=p[13]*(1.0+dT*p[81]); NRatT_dT=p[13]*p[81]; NRatT_Vrth=NRatT_dT*dT_Vrth; AVC2atT=p[41]*(1.0+dT*p[82]); AVC2atT_dT=p[41]*p[82]; AVC2atT_Vrth=AVC2atT_dT*dT_Vrth; VBBEatT=p[98]*(1.0+dT*(p[101]+dT*p[102])); VBBEatT_dT=(2.0*dT*p[102]+p[101])*p[98]; VBBEatT_Vrth=VBBEatT_dT*dT_Vrth; NBBEatT=p[99]*(1.0+dT*p[103]); NBBEatT_dT=p[99]*p[103]; NBBEatT_Vrth=NBBEatT_dT*dT_Vrth; xvar2=0.5*p[17]*rT/Vtv; xvar2_rT=0.5*p[17]/Vtv; xvar2_Vtv=-0.5*p[17]*rT/(Vtv*Vtv); xvar2_Vrth=xvar2_rT*rT_Vrth; xvar2_Vrth=xvar2_Vrth+xvar2_Vtv*Vtv_Vrth; xvar3=exp(xvar2); xvar3_xvar2=xvar3; xvar3_Vrth=xvar3_xvar2*xvar2_Vrth; xvar4=-0.5*p[17]*rT/Vtv; xvar4_rT=-0.5*p[17]/Vtv; xvar4_Vtv=0.5*p[17]*rT/(Vtv*Vtv); xvar4_Vrth=xvar4_rT*rT_Vrth; xvar4_Vrth=xvar4_Vrth+xvar4_Vtv*Vtv_Vrth; xvar5=exp(xvar4); xvar5_xvar4=xvar5; xvar5_Vrth=xvar5_xvar4*xvar4_Vrth; xvar1=xvar3-xvar5; xvar1_xvar3=1.0; xvar1_xvar5=-1.0; xvar1_Vrth=xvar1_xvar3*xvar3_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_xvar5*xvar5_Vrth; xvar6=log(xvar1); xvar6_xvar1=1.0/xvar1; xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; psiio=2.0*(Vtv/rT)*xvar6; psiio_Vtv=2.0*xvar6/rT; psiio_rT=-2.0*Vtv*xvar6/(rT*rT); psiio_xvar6=2.0*Vtv/rT; psiio_Vrth=psiio_Vtv*Vtv_Vrth; psiio_Vrth=psiio_Vrth+psiio_rT*rT_Vrth; psiio_Vrth=psiio_Vrth+psiio_xvar6*xvar6_Vrth; xvar1=log(rT); xvar1_rT=1.0/rT; xvar1_Vrth=xvar1_rT*rT_Vrth; psiin=psiio*rT-3.0*Vtv*xvar1-p[72]*(rT-1.0); psiin_psiio=rT; psiin_rT=psiio-p[72]; psiin_Vtv=-3.0*xvar1; psiin_xvar1=-3.0*Vtv; psiin_Vrth=psiin_psiio*psiio_Vrth; psiin_Vrth=psiin_Vrth+psiin_rT*rT_Vrth; psiin_Vrth=psiin_Vrth+psiin_Vtv*Vtv_Vrth; psiin_Vrth=psiin_Vrth+psiin_xvar1*xvar1_Vrth; xvar2=-psiin/Vtv; xvar2_psiin=-1.0/Vtv; xvar2_Vtv=psiin/(Vtv*Vtv); xvar2_Vrth=xvar2_psiin*psiin_Vrth; xvar2_Vrth=xvar2_Vrth+xvar2_Vtv*Vtv_Vrth; xvar3=exp(xvar2); xvar3_xvar2=xvar3; xvar3_Vrth=xvar3_xvar2*xvar2_Vrth; xvar1=0.5*(1.0+sqrt(1.0+4.0*xvar3)); xvar1_xvar3=1.0/sqrt(4.0*xvar3+1.0); xvar1_Vrth=xvar1_xvar3*xvar3_Vrth; xvar4=log(xvar1); xvar4_xvar1=1.0/xvar1; xvar4_Vrth=xvar4_xvar1*xvar1_Vrth; PEatT=psiin+2.0*Vtv*xvar4; PEatT_psiin=1.0; PEatT_Vtv=2.0*xvar4; PEatT_xvar4=2.0*Vtv; PEatT_Vrth=PEatT_psiin*psiin_Vrth; PEatT_Vrth=PEatT_Vrth+PEatT_Vtv*Vtv_Vrth; PEatT_Vrth=PEatT_Vrth+PEatT_xvar4*xvar4_Vrth; xvar2=0.5*p[24]*rT/Vtv; xvar2_rT=0.5*p[24]/Vtv; xvar2_Vtv=-0.5*p[24]*rT/(Vtv*Vtv); xvar2_Vrth=xvar2_rT*rT_Vrth; xvar2_Vrth=xvar2_Vrth+xvar2_Vtv*Vtv_Vrth; xvar3=exp(xvar2); xvar3_xvar2=xvar3; xvar3_Vrth=xvar3_xvar2*xvar2_Vrth; xvar4=-0.5*p[24]*rT/Vtv; xvar4_rT=-0.5*p[24]/Vtv; xvar4_Vtv=0.5*p[24]*rT/(Vtv*Vtv); xvar4_Vrth=xvar4_rT*rT_Vrth; xvar4_Vrth=xvar4_Vrth+xvar4_Vtv*Vtv_Vrth; xvar5=exp(xvar4); xvar5_xvar4=xvar5; xvar5_Vrth=xvar5_xvar4*xvar4_Vrth; xvar1=xvar3-xvar5; xvar1_xvar3=1.0; xvar1_xvar5=-1.0; xvar1_Vrth=xvar1_xvar3*xvar3_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_xvar5*xvar5_Vrth; xvar6=log(xvar1); xvar6_xvar1=1.0/xvar1; xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; psiio=2.0*(Vtv/rT)*xvar6; psiio_Vtv=2.0*xvar6/rT; psiio_rT=-2.0*Vtv*xvar6/(rT*rT); psiio_xvar6=2.0*Vtv/rT; psiio_Vrth=psiio_Vtv*Vtv_Vrth; psiio_Vrth=psiio_Vrth+psiio_rT*rT_Vrth; psiio_Vrth=psiio_Vrth+psiio_xvar6*xvar6_Vrth; xvar1=log(rT); xvar1_rT=1.0/rT; xvar1_Vrth=xvar1_rT*rT_Vrth; psiin=psiio*rT-3.0*Vtv*xvar1-p[73]*(rT-1.0); psiin_psiio=rT; psiin_rT=psiio-p[73]; psiin_Vtv=-3.0*xvar1; psiin_xvar1=-3.0*Vtv; psiin_Vrth=psiin_psiio*psiio_Vrth; psiin_Vrth=psiin_Vrth+psiin_rT*rT_Vrth; psiin_Vrth=psiin_Vrth+psiin_Vtv*Vtv_Vrth; psiin_Vrth=psiin_Vrth+psiin_xvar1*xvar1_Vrth; xvar2=-psiin/Vtv; xvar2_psiin=-1.0/Vtv; xvar2_Vtv=psiin/(Vtv*Vtv); xvar2_Vrth=xvar2_psiin*psiin_Vrth; xvar2_Vrth=xvar2_Vrth+xvar2_Vtv*Vtv_Vrth; xvar3=exp(xvar2); xvar3_xvar2=xvar3; xvar3_Vrth=xvar3_xvar2*xvar2_Vrth; xvar1=0.5*(1.0+sqrt(1.0+4.0*xvar3)); xvar1_xvar3=1.0/sqrt(4.0*xvar3+1.0); xvar1_Vrth=xvar1_xvar3*xvar3_Vrth; xvar4=log(xvar1); xvar4_xvar1=1.0/xvar1; xvar4_Vrth=xvar4_xvar1*xvar1_Vrth; PCatT=psiin+2.0*Vtv*xvar4; PCatT_psiin=1.0; PCatT_Vtv=2.0*xvar4; PCatT_xvar4=2.0*Vtv; PCatT_Vrth=PCatT_psiin*psiin_Vrth; PCatT_Vrth=PCatT_Vrth+PCatT_Vtv*Vtv_Vrth; PCatT_Vrth=PCatT_Vrth+PCatT_xvar4*xvar4_Vrth; xvar2=0.5*p[28]*rT/Vtv; xvar2_rT=0.5*p[28]/Vtv; xvar2_Vtv=-0.5*p[28]*rT/(Vtv*Vtv); xvar2_Vrth=xvar2_rT*rT_Vrth; xvar2_Vrth=xvar2_Vrth+xvar2_Vtv*Vtv_Vrth; xvar3=exp(xvar2); xvar3_xvar2=xvar3; xvar3_Vrth=xvar3_xvar2*xvar2_Vrth; xvar4=-0.5*p[28]*rT/Vtv; xvar4_rT=-0.5*p[28]/Vtv; xvar4_Vtv=0.5*p[28]*rT/(Vtv*Vtv); xvar4_Vrth=xvar4_rT*rT_Vrth; xvar4_Vrth=xvar4_Vrth+xvar4_Vtv*Vtv_Vrth; xvar5=exp(xvar4); xvar5_xvar4=xvar5; xvar5_Vrth=xvar5_xvar4*xvar4_Vrth; xvar1=xvar3-xvar5; xvar1_xvar3=1.0; xvar1_xvar5=-1.0; xvar1_Vrth=xvar1_xvar3*xvar3_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_xvar5*xvar5_Vrth; xvar6=log(xvar1); xvar6_xvar1=1.0/xvar1; xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; psiio=2.0*(Vtv/rT)*xvar6; psiio_Vtv=2.0*xvar6/rT; psiio_rT=-2.0*Vtv*xvar6/(rT*rT); psiio_xvar6=2.0*Vtv/rT; psiio_Vrth=psiio_Vtv*Vtv_Vrth; psiio_Vrth=psiio_Vrth+psiio_rT*rT_Vrth; psiio_Vrth=psiio_Vrth+psiio_xvar6*xvar6_Vrth; xvar1=log(rT); xvar1_rT=1.0/rT; xvar1_Vrth=xvar1_rT*rT_Vrth; psiin=psiio*rT-3.0*Vtv*xvar1-p[74]*(rT-1.0); psiin_psiio=rT; psiin_rT=psiio-p[74]; psiin_Vtv=-3.0*xvar1; psiin_xvar1=-3.0*Vtv; psiin_Vrth=psiin_psiio*psiio_Vrth; psiin_Vrth=psiin_Vrth+psiin_rT*rT_Vrth; psiin_Vrth=psiin_Vrth+psiin_Vtv*Vtv_Vrth; psiin_Vrth=psiin_Vrth+psiin_xvar1*xvar1_Vrth; xvar2=-psiin/Vtv; xvar2_psiin=-1.0/Vtv; xvar2_Vtv=psiin/(Vtv*Vtv); xvar2_Vrth=xvar2_psiin*psiin_Vrth; xvar2_Vrth=xvar2_Vrth+xvar2_Vtv*Vtv_Vrth; xvar3=exp(xvar2); xvar3_xvar2=xvar3; xvar3_Vrth=xvar3_xvar2*xvar2_Vrth; xvar1=0.5*(1.0+sqrt(1.0+4.0*xvar3)); xvar1_xvar3=1.0/sqrt(4.0*xvar3+1.0); xvar1_Vrth=xvar1_xvar3*xvar3_Vrth; xvar4=log(xvar1); xvar4_xvar1=1.0/xvar1; xvar4_Vrth=xvar4_xvar1*xvar1_Vrth; PSatT=psiin+2.0*Vtv*xvar4; PSatT_psiin=1.0; PSatT_Vtv=2.0*xvar4; PSatT_xvar4=2.0*Vtv; PSatT_Vrth=PSatT_psiin*psiin_Vrth; PSatT_Vrth=PSatT_Vrth+PSatT_Vtv*Vtv_Vrth; PSatT_Vrth=PSatT_Vrth+PSatT_xvar4*xvar4_Vrth; xvar1=p[17]/PEatT; xvar1_PEatT=-p[17]/(PEatT*PEatT); xvar1_Vrth=xvar1_PEatT*PEatT_Vrth; xvar2=pow(xvar1,p[18]); xvar2_xvar1=xvar2*p[18]/xvar1; xvar2_Vrth=xvar2_xvar1*xvar1_Vrth; CJEatT=p[16]*xvar2; CJEatT_xvar2=p[16]; CJEatT_Vrth=CJEatT_xvar2*xvar2_Vrth; xvar1=p[24]/PCatT; xvar1_PCatT=-p[24]/(PCatT*PCatT); xvar1_Vrth=xvar1_PCatT*PCatT_Vrth; xvar2=pow(xvar1,p[25]); xvar2_xvar1=xvar2*p[25]/xvar1; xvar2_Vrth=xvar2_xvar1*xvar1_Vrth; CJCatT=p[21]*xvar2; CJCatT_xvar2=p[21]; CJCatT_Vrth=CJCatT_xvar2*xvar2_Vrth; xvar1=p[24]/PCatT; xvar1_PCatT=-p[24]/(PCatT*PCatT); xvar1_Vrth=xvar1_PCatT*PCatT_Vrth; xvar2=pow(xvar1,p[25]); xvar2_xvar1=xvar2*p[25]/xvar1; xvar2_Vrth=xvar2_xvar1*xvar1_Vrth; CJEPatT=p[23]*xvar2; CJEPatT_xvar2=p[23]; CJEPatT_Vrth=CJEPatT_xvar2*xvar2_Vrth; xvar1=p[28]/PSatT; xvar1_PSatT=-p[28]/(PSatT*PSatT); xvar1_Vrth=xvar1_PSatT*PSatT_Vrth; xvar2=pow(xvar1,p[29]); xvar2_xvar1=xvar2*p[29]/xvar1; xvar2_Vrth=xvar2_xvar1*xvar1_Vrth; CJCPatT=p[27]*xvar2; CJCPatT_xvar2=p[27]; CJCPatT_Vrth=CJCPatT_xvar2*xvar2_Vrth; xvar1=pow(rT,p[78]); xvar1_rT=xvar1*p[78]/rT; xvar1_Vrth=xvar1_rT*rT_Vrth; xvar2=-p[71]*(1.0-rT)/Vtv; xvar2_rT=p[71]/Vtv; xvar2_Vtv=p[71]*(1.0-rT)/(Vtv*Vtv); xvar2_Vrth=xvar2_rT*rT_Vrth; xvar2_Vrth=xvar2_Vrth+xvar2_Vtv*Vtv_Vrth; xvar3=exp(xvar2); xvar3_xvar2=xvar3; xvar3_Vrth=xvar3_xvar2*xvar2_Vrth; GAMMatT=p[4]*xvar1*xvar3; GAMMatT_xvar1=p[4]*xvar3; GAMMatT_xvar3=p[4]*xvar1; GAMMatT_Vrth=GAMMatT_xvar1*xvar1_Vrth; GAMMatT_Vrth=GAMMatT_Vrth+GAMMatT_xvar3*xvar3_Vrth; xvar1=pow(rT,p[70]); xvar1_rT=xvar1*p[70]/rT; xvar1_Vrth=xvar1_rT*rT_Vrth; VOatT=p[3]*xvar1; VOatT_xvar1=p[3]; VOatT_Vrth=VOatT_xvar1*xvar1_Vrth; xvar1=-VBBEatT/(NBBEatT*Vtv); xvar1_VBBEatT=-1.0/(NBBEatT*Vtv); xvar1_NBBEatT=VBBEatT/((NBBEatT*NBBEatT)*Vtv); xvar1_Vtv=VBBEatT/(NBBEatT*(Vtv*Vtv)); xvar1_Vrth=xvar1_VBBEatT*VBBEatT_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_NBBEatT*NBBEatT_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_Vtv*Vtv_Vrth; EBBEatT=exp(xvar1); EBBEatT_xvar1=EBBEatT; EBBEatT_Vrth=EBBEatT_xvar1*xvar1_Vrth; if(p[51]>0.0){ IVEF=1.0/p[51]; }else{ IVEF=0.0; } if(p[52]>0.0){ IVER=1.0/p[52]; }else{ IVER=0.0; } if(p[53]>0.0){ IIKF=1.0/IKFatT; IIKF_IKFatT=-1.0/(IKFatT*IKFatT); IIKF_Vrth=IIKF_IKFatT*IKFatT_Vrth; }else{ IIKF=0.0; IIKF_Vrth=0.0; } if(p[54]>0.0){ IIKR=1.0/p[54]; }else{ IIKR=0.0; } if(p[55]>0.0){ IIKP=1.0/p[55]; }else{ IIKP=0.0; } if(p[3]>0.0){ IVO=1.0/VOatT; IVO_VOatT=-1.0/(VOatT*VOatT); IVO_Vrth=IVO_VOatT*VOatT_Vrth; }else{ IVO=0.0; IVO_Vrth=0.0; } if(p[5]>0.0){ IHRCF=1.0/p[5]; }else{ IHRCF=0.0; } if(p[59]>0.0){ IVTF=1.0/p[59]; }else{ IVTF=0.0; } if(p[60]>0.0){ IITF=1.0/p[60]; }else{ IITF=0.0; } if(p[60]>0.0){ slTF=0.0; }else{ slTF=1.0; } dv0=-PEatT*p[14]; dv0_PEatT=-p[14]; dv0_Vrth=dv0_PEatT*PEatT_Vrth; if(p[19]<=0.0){ dvh=(*Vbei)+dv0; dvh_Vbei=1.0; dvh_dv0=1.0; dvh_Vrth=dvh_dv0*dv0_Vrth; if(dvh>0.0){ xvar1=(1.0-p[14]); xvar2=(-1.0-p[18]); pwq=pow(xvar1,xvar2); qlo=PEatT*(1.0-pwq*(1.0-p[14])*(1.0-p[14]))/(1.0-p[18]); qlo_PEatT=(1.0-((1.0-p[14])*(1.0-p[14]))*pwq)/(1.0-p[18]); qlo_Vbei=0.0; qlo_Vrth=qlo_PEatT*PEatT_Vrth; qhi=dvh*(1.0-p[14]+0.5*p[18]*dvh/PEatT)*pwq; qhi_dvh=(0.5*dvh*p[18]/PEatT-p[14]+1.0)*pwq+0.5*dvh*p[18]*pwq/PEatT; qhi_PEatT=-0.5*(dvh*dvh)*p[18]*pwq/(PEatT*PEatT); qhi_Vbei=qhi_dvh*dvh_Vbei; qhi_Vrth=qhi_dvh*dvh_Vrth; qhi_Vrth=qhi_Vrth+qhi_PEatT*PEatT_Vrth; }else{ xvar1=(1.0-(*Vbei)/PEatT); xvar1_Vbei=-1.0/PEatT; xvar1_PEatT=(*Vbei)/(PEatT*PEatT); xvar1_Vrth=xvar1_PEatT*PEatT_Vrth; xvar2=(1.0-p[18]); xvar3=pow(xvar1,xvar2); xvar3_xvar1=xvar3*xvar2/xvar1; xvar3_Vbei=xvar3_xvar1*xvar1_Vbei; xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; qlo=PEatT*(1.0-xvar3)/(1.0-p[18]); qlo_PEatT=(1.0-xvar3)/(1.0-p[18]); qlo_xvar3=-PEatT/(1.0-p[18]); qlo_Vrth=qlo_PEatT*PEatT_Vrth; qlo_Vbei=qlo_xvar3*xvar3_Vbei; qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; qhi=0.0; qhi_Vbei=0.0; qhi_Vrth=0.0; } qdbe=qlo+qhi; qdbe_qlo=1.0; qdbe_qhi=1.0; qdbe_Vrth=qdbe_qlo*qlo_Vrth; qdbe_Vbei=qdbe_qlo*qlo_Vbei; qdbe_Vbei=qdbe_Vbei+qdbe_qhi*qhi_Vbei; qdbe_Vrth=qdbe_Vrth+qdbe_qhi*qhi_Vrth; }else{ mv0=sqrt(dv0*dv0+4.0*p[19]*p[19]); mv0_dv0=dv0/sqrt((dv0*dv0)+4.0*(p[19]*p[19])); mv0_Vrth=mv0_dv0*dv0_Vrth; vl0=-0.5*(dv0+mv0); vl0_dv0=-0.5; vl0_mv0=-0.5; vl0_Vrth=vl0_dv0*dv0_Vrth; vl0_Vrth=vl0_Vrth+vl0_mv0*mv0_Vrth; xvar1=(1.0-vl0/PEatT); xvar1_vl0=-1.0/PEatT; xvar1_PEatT=vl0/(PEatT*PEatT); xvar1_Vrth=xvar1_vl0*vl0_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_PEatT*PEatT_Vrth; xvar2=(1.0-p[18]); xvar3=pow(xvar1,xvar2); xvar3_xvar1=xvar3*xvar2/xvar1; xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; q0=-PEatT*xvar3/(1.0-p[18]); q0_PEatT=-xvar3/(1.0-p[18]); q0_xvar3=-PEatT/(1.0-p[18]); q0_Vrth=q0_PEatT*PEatT_Vrth; q0_Vrth=q0_Vrth+q0_xvar3*xvar3_Vrth; dv=(*Vbei)+dv0; dv_Vbei=1.0; dv_dv0=1.0; dv_Vrth=dv_dv0*dv0_Vrth; mv=sqrt(dv*dv+4.0*p[19]*p[19]); mv_dv=dv/sqrt((dv*dv)+4.0*(p[19]*p[19])); mv_Vbei=mv_dv*dv_Vbei; mv_Vrth=mv_dv*dv_Vrth; vl=0.5*(dv-mv)-dv0; vl_dv=0.5; vl_mv=-0.5; vl_dv0=-1.0; vl_Vbei=vl_dv*dv_Vbei; vl_Vrth=vl_dv*dv_Vrth; vl_Vbei=vl_Vbei+vl_mv*mv_Vbei; vl_Vrth=vl_Vrth+vl_mv*mv_Vrth; vl_Vrth=vl_Vrth+vl_dv0*dv0_Vrth; xvar1=(1.0-vl/PEatT); xvar1_vl=-1.0/PEatT; xvar1_PEatT=vl/(PEatT*PEatT); xvar1_Vbei=xvar1_vl*vl_Vbei; xvar1_Vrth=xvar1_vl*vl_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_PEatT*PEatT_Vrth; xvar2=(1.0-p[18]); xvar3=pow(xvar1,xvar2); xvar3_xvar1=xvar3*xvar2/xvar1; xvar3_Vbei=xvar3_xvar1*xvar1_Vbei; xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; qlo=-PEatT*xvar3/(1.0-p[18]); qlo_PEatT=-xvar3/(1.0-p[18]); qlo_xvar3=-PEatT/(1.0-p[18]); qlo_Vrth=qlo_PEatT*PEatT_Vrth; qlo_Vbei=qlo_xvar3*xvar3_Vbei; qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; xvar1=(1.0-p[14]); xvar2=(-p[18]); xvar3=pow(xvar1,xvar2); qdbe=qlo+xvar3*((*Vbei)-vl+vl0)-q0; qdbe_qlo=1.0; qdbe_Vbei=xvar3; qdbe_vl=-xvar3; qdbe_vl0=xvar3; qdbe_q0=-1.0; qdbe_Vrth=qdbe_qlo*qlo_Vrth; qdbe_Vbei=qdbe_Vbei+qdbe_qlo*qlo_Vbei; qdbe_Vbei=qdbe_Vbei+qdbe_vl*vl_Vbei; qdbe_Vrth=qdbe_Vrth+qdbe_vl*vl_Vrth; qdbe_Vrth=qdbe_Vrth+qdbe_vl0*vl0_Vrth; qdbe_Vrth=qdbe_Vrth+qdbe_q0*q0_Vrth; } dv0=-PEatT*p[14]; dv0_PEatT=-p[14]; dv0_Vrth=dv0_PEatT*PEatT_Vrth; if(p[19]<=0.0){ dvh=(*Vbex)+dv0; dvh_Vbex=1.0; dvh_dv0=1.0; dvh_Vrth=dvh_dv0*dv0_Vrth; if(dvh>0.0){ xvar1=(1.0-p[14]); xvar2=(-1.0-p[18]); pwq=pow(xvar1,xvar2); qlo=PEatT*(1.0-pwq*(1.0-p[14])*(1.0-p[14]))/(1.0-p[18]); qlo_PEatT=(1.0-((1.0-p[14])*(1.0-p[14]))*pwq)/(1.0-p[18]); qlo_Vbex=0.0; qlo_Vrth=qlo_PEatT*PEatT_Vrth; qhi=dvh*(1.0-p[14]+0.5*p[18]*dvh/PEatT)*pwq; qhi_dvh=(0.5*dvh*p[18]/PEatT-p[14]+1.0)*pwq+0.5*dvh*p[18]*pwq/PEatT; qhi_PEatT=-0.5*(dvh*dvh)*p[18]*pwq/(PEatT*PEatT); qhi_Vbex=qhi_dvh*dvh_Vbex; qhi_Vrth=qhi_dvh*dvh_Vrth; qhi_Vrth=qhi_Vrth+qhi_PEatT*PEatT_Vrth; }else{ xvar1=(1.0-(*Vbex)/PEatT); xvar1_Vbex=-1.0/PEatT; xvar1_PEatT=(*Vbex)/(PEatT*PEatT); xvar1_Vrth=xvar1_PEatT*PEatT_Vrth; xvar2=(1.0-p[18]); xvar3=pow(xvar1,xvar2); xvar3_xvar1=xvar3*xvar2/xvar1; xvar3_Vbex=xvar3_xvar1*xvar1_Vbex; xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; qlo=PEatT*(1.0-xvar3)/(1.0-p[18]); qlo_PEatT=(1.0-xvar3)/(1.0-p[18]); qlo_xvar3=-PEatT/(1.0-p[18]); qlo_Vrth=qlo_PEatT*PEatT_Vrth; qlo_Vbex=qlo_xvar3*xvar3_Vbex; qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; qhi=0.0; qhi_Vbex=0.0; qhi_Vrth=0.0; } qdbex=qlo+qhi; qdbex_qlo=1.0; qdbex_qhi=1.0; qdbex_Vrth=qdbex_qlo*qlo_Vrth; qdbex_Vbex=qdbex_qlo*qlo_Vbex; qdbex_Vbex=qdbex_Vbex+qdbex_qhi*qhi_Vbex; qdbex_Vrth=qdbex_Vrth+qdbex_qhi*qhi_Vrth; }else{ mv0=sqrt(dv0*dv0+4.0*p[19]*p[19]); mv0_dv0=dv0/sqrt((dv0*dv0)+4.0*(p[19]*p[19])); mv0_Vrth=mv0_dv0*dv0_Vrth; vl0=-0.5*(dv0+mv0); vl0_dv0=-0.5; vl0_mv0=-0.5; vl0_Vrth=vl0_dv0*dv0_Vrth; vl0_Vrth=vl0_Vrth+vl0_mv0*mv0_Vrth; xvar1=(1.0-vl0/PEatT); xvar1_vl0=-1.0/PEatT; xvar1_PEatT=vl0/(PEatT*PEatT); xvar1_Vrth=xvar1_vl0*vl0_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_PEatT*PEatT_Vrth; xvar2=(1.0-p[18]); xvar3=pow(xvar1,xvar2); xvar3_xvar1=xvar3*xvar2/xvar1; xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; q0=-PEatT*xvar3/(1.0-p[18]); q0_PEatT=-xvar3/(1.0-p[18]); q0_xvar3=-PEatT/(1.0-p[18]); q0_Vrth=q0_PEatT*PEatT_Vrth; q0_Vrth=q0_Vrth+q0_xvar3*xvar3_Vrth; dv=(*Vbex)+dv0; dv_Vbex=1.0; dv_dv0=1.0; dv_Vrth=dv_dv0*dv0_Vrth; mv=sqrt(dv*dv+4.0*p[19]*p[19]); mv_dv=dv/sqrt((dv*dv)+4.0*(p[19]*p[19])); mv_Vbex=mv_dv*dv_Vbex; mv_Vrth=mv_dv*dv_Vrth; vl=0.5*(dv-mv)-dv0; vl_dv=0.5; vl_mv=-0.5; vl_dv0=-1.0; vl_Vbex=vl_dv*dv_Vbex; vl_Vrth=vl_dv*dv_Vrth; vl_Vbex=vl_Vbex+vl_mv*mv_Vbex; vl_Vrth=vl_Vrth+vl_mv*mv_Vrth; vl_Vrth=vl_Vrth+vl_dv0*dv0_Vrth; xvar1=(1.0-vl/PEatT); xvar1_vl=-1.0/PEatT; xvar1_PEatT=vl/(PEatT*PEatT); xvar1_Vbex=xvar1_vl*vl_Vbex; xvar1_Vrth=xvar1_vl*vl_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_PEatT*PEatT_Vrth; xvar2=(1.0-p[18]); xvar3=pow(xvar1,xvar2); xvar3_xvar1=xvar3*xvar2/xvar1; xvar3_Vbex=xvar3_xvar1*xvar1_Vbex; xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; qlo=-PEatT*xvar3/(1.0-p[18]); qlo_PEatT=-xvar3/(1.0-p[18]); qlo_xvar3=-PEatT/(1.0-p[18]); qlo_Vrth=qlo_PEatT*PEatT_Vrth; qlo_Vbex=qlo_xvar3*xvar3_Vbex; qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; xvar1=(1.0-p[14]); xvar2=(-p[18]); xvar3=pow(xvar1,xvar2); qdbex=qlo+xvar3*((*Vbex)-vl+vl0)-q0; qdbex_qlo=1.0; qdbex_Vbex=xvar3; qdbex_vl=-xvar3; qdbex_vl0=xvar3; qdbex_q0=-1.0; qdbex_Vrth=qdbex_qlo*qlo_Vrth; qdbex_Vbex=qdbex_Vbex+qdbex_qlo*qlo_Vbex; qdbex_Vbex=qdbex_Vbex+qdbex_vl*vl_Vbex; qdbex_Vrth=qdbex_Vrth+qdbex_vl*vl_Vrth; qdbex_Vrth=qdbex_Vrth+qdbex_vl0*vl0_Vrth; qdbex_Vrth=qdbex_Vrth+qdbex_q0*q0_Vrth; } dv0=-PCatT*p[14]; dv0_PCatT=-p[14]; dv0_Vrth=dv0_PCatT*PCatT_Vrth; if(p[26]<=0.0){ dvh=(*Vbci)+dv0; dvh_Vbci=1.0; dvh_dv0=1.0; dvh_Vrth=dvh_dv0*dv0_Vrth; if(dvh>0.0){ xvar1=(1.0-p[14]); xvar2=(-1.0-p[25]); pwq=pow(xvar1,xvar2); qlo=PCatT*(1.0-pwq*(1.0-p[14])*(1.0-p[14]))/(1.0-p[25]); qlo_PCatT=(1.0-((1.0-p[14])*(1.0-p[14]))*pwq)/(1.0-p[25]); qlo_Vbci=0.0; qlo_Vrth=qlo_PCatT*PCatT_Vrth; qhi=dvh*(1.0-p[14]+0.5*p[25]*dvh/PCatT)*pwq; qhi_dvh=(0.5*dvh*p[25]/PCatT-p[14]+1.0)*pwq+0.5*dvh*p[25]*pwq/PCatT; qhi_PCatT=-0.5*(dvh*dvh)*p[25]*pwq/(PCatT*PCatT); qhi_Vbci=qhi_dvh*dvh_Vbci; qhi_Vrth=qhi_dvh*dvh_Vrth; qhi_Vrth=qhi_Vrth+qhi_PCatT*PCatT_Vrth; }else{ if((p[85]>0.0)&&((*Vbci)<-p[85])){ xvar1=(1.0+p[85]/PCatT); xvar1_PCatT=-p[85]/(PCatT*PCatT); xvar1_Vrth=xvar1_PCatT*PCatT_Vrth; xvar2=(1.0-p[25]); xvar3=pow(xvar1,xvar2); xvar3_xvar1=xvar3*xvar2/xvar1; xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; qlo=PCatT*(1.0-xvar3*(1.0-((1.0-p[25])*((*Vbci)+p[85]))/(PCatT+p[85])))/(1.0-p[25]); qlo_PCatT=(1.0-(1.0-(1.0-p[25])*(p[85]+(*Vbci))/(p[85]+PCatT))*xvar3)/(1.0-p[25])-PCatT*(p[85]+(*Vbci))*xvar3/((p[85]+PCatT)*(p[85]+PCatT)); qlo_xvar3=PCatT*((1.0-p[25])*(p[85]+(*Vbci))/(p[85]+PCatT)-1.0)/(1.0-p[25]); qlo_Vbci=PCatT*xvar3/(p[85]+PCatT); qlo_Vrth=qlo_PCatT*PCatT_Vrth; qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; }else{ xvar1=(1.0-(*Vbci)/PCatT); xvar1_Vbci=-1.0/PCatT; xvar1_PCatT=(*Vbci)/(PCatT*PCatT); xvar1_Vrth=xvar1_PCatT*PCatT_Vrth; xvar2=(1.0-p[25]); xvar3=pow(xvar1,xvar2); xvar3_xvar1=xvar3*xvar2/xvar1; xvar3_Vbci=xvar3_xvar1*xvar1_Vbci; xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; qlo=PCatT*(1.0-xvar3)/(1.0-p[25]); qlo_PCatT=(1.0-xvar3)/(1.0-p[25]); qlo_xvar3=-PCatT/(1.0-p[25]); qlo_Vrth=qlo_PCatT*PCatT_Vrth; qlo_Vbci=qlo_xvar3*xvar3_Vbci; qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; } qhi=0.0; qhi_Vbci=0.0; qhi_Vrth=0.0; } qdbc=qlo+qhi; qdbc_qlo=1.0; qdbc_qhi=1.0; qdbc_Vrth=qdbc_qlo*qlo_Vrth; qdbc_Vbci=qdbc_qlo*qlo_Vbci; qdbc_Vbci=qdbc_Vbci+qdbc_qhi*qhi_Vbci; qdbc_Vrth=qdbc_Vrth+qdbc_qhi*qhi_Vrth; }else{ if((p[85]>0.0)&&(p[86]>0.0)){ vn0=(p[85]+dv0)/(p[85]-dv0); vn0_dv0=(p[85]+dv0)/((p[85]-dv0)*(p[85]-dv0))+1.0/(p[85]-dv0); vn0_Vrth=vn0_dv0*dv0_Vrth; vnl0=2.0*vn0/(sqrt((vn0-1.0)*(vn0-1.0)+4.0*p[26]*p[26])+sqrt((vn0+1.0)*(vn0+1.0)+4.0*p[86]*p[86])); vnl0_vn0=2.0/(sqrt(((vn0+1.0)*(vn0+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn0-1.0)*(vn0-1.0))+4.0*(p[26]*p[26])))-2.0*vn0*((vn0+1.0)/sqrt(((vn0+1.0)*(vn0+1.0))+4.0*(p[86]*p[86]))+(vn0-1.0)/sqrt(((vn0-1.0)*(vn0-1.0))+4.0*(p[26]*p[26])))/((sqrt(((vn0+1.0)*(vn0+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn0-1.0)*(vn0-1.0))+4.0*(p[26]*p[26])))*(sqrt(((vn0+1.0)*(vn0+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn0-1.0)*(vn0-1.0))+4.0*(p[26]*p[26])))); vnl0_Vrth=vnl0_vn0*vn0_Vrth; vl0=0.5*(vnl0*(p[85]-dv0)-p[85]-dv0); vl0_vnl0=0.5*(p[85]-dv0); vl0_dv0=0.5*(-vnl0-1.0); vl0_Vrth=vl0_vnl0*vnl0_Vrth; vl0_Vrth=vl0_Vrth+vl0_dv0*dv0_Vrth; xvar1=(1.0-vl0/PCatT); xvar1_vl0=-1.0/PCatT; xvar1_PCatT=vl0/(PCatT*PCatT); xvar1_Vrth=xvar1_vl0*vl0_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_PCatT*PCatT_Vrth; xvar2=(1.0-p[25]); xvar3=pow(xvar1,xvar2); xvar3_xvar1=xvar3*xvar2/xvar1; xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; qlo0=PCatT*(1.0-xvar3)/(1.0-p[25]); qlo0_PCatT=(1.0-xvar3)/(1.0-p[25]); qlo0_xvar3=-PCatT/(1.0-p[25]); qlo0_Vrth=qlo0_PCatT*PCatT_Vrth; qlo0_Vrth=qlo0_Vrth+qlo0_xvar3*xvar3_Vrth; vn=(2.0*(*Vbci)+p[85]+dv0)/(p[85]-dv0); vn_Vbci=2.0/(p[85]-dv0); vn_dv0=(p[85]+2.0*(*Vbci)+dv0)/((p[85]-dv0)*(p[85]-dv0))+1.0/(p[85]-dv0); vn_Vrth=vn_dv0*dv0_Vrth; vnl=2.0*vn/(sqrt((vn-1.0)*(vn-1.0)+4.0*p[26]*p[26])+sqrt((vn+1.0)*(vn+1.0)+4.0*p[86]*p[86])); vnl_vn=2.0/(sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))-2.0*vn*((vn+1.0)/sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+(vn-1.0)/sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))/((sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))*(sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))); vnl_Vbci=vnl_vn*vn_Vbci; vnl_Vrth=vnl_vn*vn_Vrth; vl=0.5*(vnl*(p[85]-dv0)-p[85]-dv0); vl_vnl=0.5*(p[85]-dv0); vl_dv0=0.5*(-vnl-1.0); vl_Vbci=vl_vnl*vnl_Vbci; vl_Vrth=vl_vnl*vnl_Vrth; vl_Vrth=vl_Vrth+vl_dv0*dv0_Vrth; xvar1=(1.0-vl/PCatT); xvar1_vl=-1.0/PCatT; xvar1_PCatT=vl/(PCatT*PCatT); xvar1_Vbci=xvar1_vl*vl_Vbci; xvar1_Vrth=xvar1_vl*vl_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_PCatT*PCatT_Vrth; xvar2=(1.0-p[25]); xvar3=pow(xvar1,xvar2); xvar3_xvar1=xvar3*xvar2/xvar1; xvar3_Vbci=xvar3_xvar1*xvar1_Vbci; xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; qlo=PCatT*(1.0-xvar3)/(1.0-p[25]); qlo_PCatT=(1.0-xvar3)/(1.0-p[25]); qlo_xvar3=-PCatT/(1.0-p[25]); qlo_Vrth=qlo_PCatT*PCatT_Vrth; qlo_Vbci=qlo_xvar3*xvar3_Vbci; qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; sel=0.5*(vnl+1.0); sel_vnl=0.5; sel_Vbci=sel_vnl*vnl_Vbci; sel_Vrth=sel_vnl*vnl_Vrth; xvar1=(1.0+p[85]/PCatT); xvar1_PCatT=-p[85]/(PCatT*PCatT); xvar1_Vrth=xvar1_PCatT*PCatT_Vrth; xvar2=(-p[25]); crt=pow(xvar1,xvar2); crt_xvar1=crt*xvar2/xvar1; crt_Vrth=crt_xvar1*xvar1_Vrth; xvar1=(1.0+dv0/PCatT); xvar1_dv0=1.0/PCatT; xvar1_PCatT=-dv0/(PCatT*PCatT); xvar1_Vrth=xvar1_dv0*dv0_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_PCatT*PCatT_Vrth; xvar2=(-p[25]); cmx=pow(xvar1,xvar2); cmx_xvar1=cmx*xvar2/xvar1; cmx_Vrth=cmx_xvar1*xvar1_Vrth; cl=(1.0-sel)*crt+sel*cmx; cl_sel=cmx-crt; cl_crt=1.0-sel; cl_cmx=sel; cl_Vbci=cl_sel*sel_Vbci; cl_Vrth=cl_sel*sel_Vrth; cl_Vrth=cl_Vrth+cl_crt*crt_Vrth; cl_Vrth=cl_Vrth+cl_cmx*cmx_Vrth; ql=((*Vbci)-vl+vl0)*cl; ql_Vbci=cl; ql_vl=-cl; ql_vl0=cl; ql_cl=vl0-vl+(*Vbci); ql_Vbci=ql_Vbci+ql_vl*vl_Vbci; ql_Vrth=ql_vl*vl_Vrth; ql_Vrth=ql_Vrth+ql_vl0*vl0_Vrth; ql_Vbci=ql_Vbci+ql_cl*cl_Vbci; ql_Vrth=ql_Vrth+ql_cl*cl_Vrth; qdbc=ql+qlo-qlo0; qdbc_ql=1.0; qdbc_qlo=1.0; qdbc_qlo0=-1.0; qdbc_Vbci=qdbc_ql*ql_Vbci; qdbc_Vrth=qdbc_ql*ql_Vrth; qdbc_Vrth=qdbc_Vrth+qdbc_qlo*qlo_Vrth; qdbc_Vbci=qdbc_Vbci+qdbc_qlo*qlo_Vbci; qdbc_Vrth=qdbc_Vrth+qdbc_qlo0*qlo0_Vrth; }else{ mv0=sqrt(dv0*dv0+4.0*p[26]*p[26]); mv0_dv0=dv0/sqrt((dv0*dv0)+4.0*(p[26]*p[26])); mv0_Vrth=mv0_dv0*dv0_Vrth; vl0=-0.5*(dv0+mv0); vl0_dv0=-0.5; vl0_mv0=-0.5; vl0_Vrth=vl0_dv0*dv0_Vrth; vl0_Vrth=vl0_Vrth+vl0_mv0*mv0_Vrth; xvar1=(1.0-vl0/PCatT); xvar1_vl0=-1.0/PCatT; xvar1_PCatT=vl0/(PCatT*PCatT); xvar1_Vrth=xvar1_vl0*vl0_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_PCatT*PCatT_Vrth; xvar2=(1.0-p[25]); xvar3=pow(xvar1,xvar2); xvar3_xvar1=xvar3*xvar2/xvar1; xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; q0=-PCatT*xvar3/(1.0-p[25]); q0_PCatT=-xvar3/(1.0-p[25]); q0_xvar3=-PCatT/(1.0-p[25]); q0_Vrth=q0_PCatT*PCatT_Vrth; q0_Vrth=q0_Vrth+q0_xvar3*xvar3_Vrth; dv=(*Vbci)+dv0; dv_Vbci=1.0; dv_dv0=1.0; dv_Vrth=dv_dv0*dv0_Vrth; mv=sqrt(dv*dv+4.0*p[26]*p[26]); mv_dv=dv/sqrt((dv*dv)+4.0*(p[26]*p[26])); mv_Vbci=mv_dv*dv_Vbci; mv_Vrth=mv_dv*dv_Vrth; vl=0.5*(dv-mv)-dv0; vl_dv=0.5; vl_mv=-0.5; vl_dv0=-1.0; vl_Vbci=vl_dv*dv_Vbci; vl_Vrth=vl_dv*dv_Vrth; vl_Vbci=vl_Vbci+vl_mv*mv_Vbci; vl_Vrth=vl_Vrth+vl_mv*mv_Vrth; vl_Vrth=vl_Vrth+vl_dv0*dv0_Vrth; xvar1=(1.0-vl/PCatT); xvar1_vl=-1.0/PCatT; xvar1_PCatT=vl/(PCatT*PCatT); xvar1_Vbci=xvar1_vl*vl_Vbci; xvar1_Vrth=xvar1_vl*vl_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_PCatT*PCatT_Vrth; xvar2=(1.0-p[25]); xvar3=pow(xvar1,xvar2); xvar3_xvar1=xvar3*xvar2/xvar1; xvar3_Vbci=xvar3_xvar1*xvar1_Vbci; xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; qlo=-PCatT*xvar3/(1.0-p[25]); qlo_PCatT=-xvar3/(1.0-p[25]); qlo_xvar3=-PCatT/(1.0-p[25]); qlo_Vrth=qlo_PCatT*PCatT_Vrth; qlo_Vbci=qlo_xvar3*xvar3_Vbci; qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; xvar1=(1.0-p[14]); xvar2=(-p[25]); xvar3=pow(xvar1,xvar2); qdbc=qlo+xvar3*((*Vbci)-vl+vl0)-q0; qdbc_qlo=1.0; qdbc_Vbci=xvar3; qdbc_vl=-xvar3; qdbc_vl0=xvar3; qdbc_q0=-1.0; qdbc_Vrth=qdbc_qlo*qlo_Vrth; qdbc_Vbci=qdbc_Vbci+qdbc_qlo*qlo_Vbci; qdbc_Vbci=qdbc_Vbci+qdbc_vl*vl_Vbci; qdbc_Vrth=qdbc_Vrth+qdbc_vl*vl_Vrth; qdbc_Vrth=qdbc_Vrth+qdbc_vl0*vl0_Vrth; qdbc_Vrth=qdbc_Vrth+qdbc_q0*q0_Vrth; } } dv0=-PCatT*p[14]; dv0_PCatT=-p[14]; dv0_Vrth=dv0_PCatT*PCatT_Vrth; if(p[26]<=0.0){ dvh=(*Vbep)+dv0; dvh_Vbep=1.0; dvh_dv0=1.0; dvh_Vrth=dvh_dv0*dv0_Vrth; if(dvh>0.0){ xvar1=(1.0-p[14]); xvar2=(-1.0-p[25]); pwq=pow(xvar1,xvar2); qlo=PCatT*(1.0-pwq*(1.0-p[14])*(1.0-p[14]))/(1.0-p[25]); qlo_PCatT=(1.0-((1.0-p[14])*(1.0-p[14]))*pwq)/(1.0-p[25]); qlo_Vbep=0.0; qlo_Vrth=qlo_PCatT*PCatT_Vrth; qhi=dvh*(1.0-p[14]+0.5*p[25]*dvh/PCatT)*pwq; qhi_dvh=(0.5*dvh*p[25]/PCatT-p[14]+1.0)*pwq+0.5*dvh*p[25]*pwq/PCatT; qhi_PCatT=-0.5*(dvh*dvh)*p[25]*pwq/(PCatT*PCatT); qhi_Vbep=qhi_dvh*dvh_Vbep; qhi_Vrth=qhi_dvh*dvh_Vrth; qhi_Vrth=qhi_Vrth+qhi_PCatT*PCatT_Vrth; }else{ if((p[85]>0.0)&&((*Vbep)<-p[85])){ xvar1=(1.0+p[85]/PCatT); xvar1_PCatT=-p[85]/(PCatT*PCatT); xvar1_Vrth=xvar1_PCatT*PCatT_Vrth; xvar2=(1.0-p[25]); xvar3=pow(xvar1,xvar2); xvar3_xvar1=xvar3*xvar2/xvar1; xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; qlo=PCatT*(1.0-xvar3*(1.0-((1.0-p[25])*((*Vbep)+p[85]))/(PCatT+p[85])))/(1.0-p[25]); qlo_PCatT=(1.0-(1.0-(1.0-p[25])*(p[85]+(*Vbep))/(p[85]+PCatT))*xvar3)/(1.0-p[25])-PCatT*(p[85]+(*Vbep))*xvar3/((p[85]+PCatT)*(p[85]+PCatT)); qlo_xvar3=PCatT*((1.0-p[25])*(p[85]+(*Vbep))/(p[85]+PCatT)-1.0)/(1.0-p[25]); qlo_Vbep=PCatT*xvar3/(p[85]+PCatT); qlo_Vrth=qlo_PCatT*PCatT_Vrth; qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; }else{ xvar1=(1.0-(*Vbep)/PCatT); xvar1_Vbep=-1.0/PCatT; xvar1_PCatT=(*Vbep)/(PCatT*PCatT); xvar1_Vrth=xvar1_PCatT*PCatT_Vrth; xvar2=(1.0-p[25]); xvar3=pow(xvar1,xvar2); xvar3_xvar1=xvar3*xvar2/xvar1; xvar3_Vbep=xvar3_xvar1*xvar1_Vbep; xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; qlo=PCatT*(1.0-xvar3)/(1.0-p[25]); qlo_PCatT=(1.0-xvar3)/(1.0-p[25]); qlo_xvar3=-PCatT/(1.0-p[25]); qlo_Vrth=qlo_PCatT*PCatT_Vrth; qlo_Vbep=qlo_xvar3*xvar3_Vbep; qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; } qhi=0.0; qhi_Vbep=0.0; qhi_Vrth=0.0; } qdbep=qlo+qhi; qdbep_qlo=1.0; qdbep_qhi=1.0; qdbep_Vrth=qdbep_qlo*qlo_Vrth; qdbep_Vbep=qdbep_qlo*qlo_Vbep; qdbep_Vbep=qdbep_Vbep+qdbep_qhi*qhi_Vbep; qdbep_Vrth=qdbep_Vrth+qdbep_qhi*qhi_Vrth; }else{ if((p[85]>0.0)&&(p[86]>0.0)){ vn0=(p[85]+dv0)/(p[85]-dv0); vn0_dv0=(p[85]+dv0)/((p[85]-dv0)*(p[85]-dv0))+1.0/(p[85]-dv0); vn0_Vrth=vn0_dv0*dv0_Vrth; vnl0=2.0*vn0/(sqrt((vn0-1.0)*(vn0-1.0)+4.0*p[26]*p[26])+sqrt((vn0+1.0)*(vn0+1.0)+4.0*p[86]*p[86])); vnl0_vn0=2.0/(sqrt(((vn0+1.0)*(vn0+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn0-1.0)*(vn0-1.0))+4.0*(p[26]*p[26])))-2.0*vn0*((vn0+1.0)/sqrt(((vn0+1.0)*(vn0+1.0))+4.0*(p[86]*p[86]))+(vn0-1.0)/sqrt(((vn0-1.0)*(vn0-1.0))+4.0*(p[26]*p[26])))/((sqrt(((vn0+1.0)*(vn0+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn0-1.0)*(vn0-1.0))+4.0*(p[26]*p[26])))*(sqrt(((vn0+1.0)*(vn0+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn0-1.0)*(vn0-1.0))+4.0*(p[26]*p[26])))); vnl0_Vrth=vnl0_vn0*vn0_Vrth; vl0=0.5*(vnl0*(p[85]-dv0)-p[85]-dv0); vl0_vnl0=0.5*(p[85]-dv0); vl0_dv0=0.5*(-vnl0-1.0); vl0_Vrth=vl0_vnl0*vnl0_Vrth; vl0_Vrth=vl0_Vrth+vl0_dv0*dv0_Vrth; xvar1=(1.0-vl0/PCatT); xvar1_vl0=-1.0/PCatT; xvar1_PCatT=vl0/(PCatT*PCatT); xvar1_Vrth=xvar1_vl0*vl0_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_PCatT*PCatT_Vrth; xvar2=(1.0-p[25]); xvar3=pow(xvar1,xvar2); xvar3_xvar1=xvar3*xvar2/xvar1; xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; qlo0=PCatT*(1.0-xvar3)/(1.0-p[25]); qlo0_PCatT=(1.0-xvar3)/(1.0-p[25]); qlo0_xvar3=-PCatT/(1.0-p[25]); qlo0_Vrth=qlo0_PCatT*PCatT_Vrth; qlo0_Vrth=qlo0_Vrth+qlo0_xvar3*xvar3_Vrth; vn=(2.0*(*Vbep)+p[85]+dv0)/(p[85]-dv0); vn_Vbep=2.0/(p[85]-dv0); vn_dv0=(p[85]+2.0*(*Vbep)+dv0)/((p[85]-dv0)*(p[85]-dv0))+1.0/(p[85]-dv0); vn_Vrth=vn_dv0*dv0_Vrth; vnl=2.0*vn/(sqrt((vn-1.0)*(vn-1.0)+4.0*p[26]*p[26])+sqrt((vn+1.0)*(vn+1.0)+4.0*p[86]*p[86])); vnl_vn=2.0/(sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))-2.0*vn*((vn+1.0)/sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+(vn-1.0)/sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))/((sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))*(sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))); vnl_Vbep=vnl_vn*vn_Vbep; vnl_Vrth=vnl_vn*vn_Vrth; vl=0.5*(vnl*(p[85]-dv0)-p[85]-dv0); vl_vnl=0.5*(p[85]-dv0); vl_dv0=0.5*(-vnl-1.0); vl_Vbep=vl_vnl*vnl_Vbep; vl_Vrth=vl_vnl*vnl_Vrth; vl_Vrth=vl_Vrth+vl_dv0*dv0_Vrth; xvar1=(1.0-vl/PCatT); xvar1_vl=-1.0/PCatT; xvar1_PCatT=vl/(PCatT*PCatT); xvar1_Vbep=xvar1_vl*vl_Vbep; xvar1_Vrth=xvar1_vl*vl_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_PCatT*PCatT_Vrth; xvar2=(1.0-p[25]); xvar3=pow(xvar1,xvar2); xvar3_xvar1=xvar3*xvar2/xvar1; xvar3_Vbep=xvar3_xvar1*xvar1_Vbep; xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; qlo=PCatT*(1.0-xvar3)/(1.0-p[25]); qlo_PCatT=(1.0-xvar3)/(1.0-p[25]); qlo_xvar3=-PCatT/(1.0-p[25]); qlo_Vrth=qlo_PCatT*PCatT_Vrth; qlo_Vbep=qlo_xvar3*xvar3_Vbep; qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; sel=0.5*(vnl+1.0); sel_vnl=0.5; sel_Vbep=sel_vnl*vnl_Vbep; sel_Vrth=sel_vnl*vnl_Vrth; xvar1=(1.0+p[85]/PCatT); xvar1_PCatT=-p[85]/(PCatT*PCatT); xvar1_Vrth=xvar1_PCatT*PCatT_Vrth; xvar2=(-p[25]); crt=pow(xvar1,xvar2); crt_xvar1=crt*xvar2/xvar1; crt_Vrth=crt_xvar1*xvar1_Vrth; xvar1=(1.0+dv0/PCatT); xvar1_dv0=1.0/PCatT; xvar1_PCatT=-dv0/(PCatT*PCatT); xvar1_Vrth=xvar1_dv0*dv0_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_PCatT*PCatT_Vrth; xvar2=(-p[25]); cmx=pow(xvar1,xvar2); cmx_xvar1=cmx*xvar2/xvar1; cmx_Vrth=cmx_xvar1*xvar1_Vrth; cl=(1.0-sel)*crt+sel*cmx; cl_sel=cmx-crt; cl_crt=1.0-sel; cl_cmx=sel; cl_Vbep=cl_sel*sel_Vbep; cl_Vrth=cl_sel*sel_Vrth; cl_Vrth=cl_Vrth+cl_crt*crt_Vrth; cl_Vrth=cl_Vrth+cl_cmx*cmx_Vrth; ql=((*Vbep)-vl+vl0)*cl; ql_Vbep=cl; ql_vl=-cl; ql_vl0=cl; ql_cl=vl0-vl+(*Vbep); ql_Vbep=ql_Vbep+ql_vl*vl_Vbep; ql_Vrth=ql_vl*vl_Vrth; ql_Vrth=ql_Vrth+ql_vl0*vl0_Vrth; ql_Vbep=ql_Vbep+ql_cl*cl_Vbep; ql_Vrth=ql_Vrth+ql_cl*cl_Vrth; qdbep=ql+qlo-qlo0; qdbep_ql=1.0; qdbep_qlo=1.0; qdbep_qlo0=-1.0; qdbep_Vbep=qdbep_ql*ql_Vbep; qdbep_Vrth=qdbep_ql*ql_Vrth; qdbep_Vrth=qdbep_Vrth+qdbep_qlo*qlo_Vrth; qdbep_Vbep=qdbep_Vbep+qdbep_qlo*qlo_Vbep; qdbep_Vrth=qdbep_Vrth+qdbep_qlo0*qlo0_Vrth; }else{ mv0=sqrt(dv0*dv0+4.0*p[26]*p[26]); mv0_dv0=dv0/sqrt((dv0*dv0)+4.0*(p[26]*p[26])); mv0_Vrth=mv0_dv0*dv0_Vrth; vl0=-0.5*(dv0+mv0); vl0_dv0=-0.5; vl0_mv0=-0.5; vl0_Vrth=vl0_dv0*dv0_Vrth; vl0_Vrth=vl0_Vrth+vl0_mv0*mv0_Vrth; xvar1=(1.0-vl0/PCatT); xvar1_vl0=-1.0/PCatT; xvar1_PCatT=vl0/(PCatT*PCatT); xvar1_Vrth=xvar1_vl0*vl0_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_PCatT*PCatT_Vrth; xvar2=(1.0-p[25]); xvar3=pow(xvar1,xvar2); xvar3_xvar1=xvar3*xvar2/xvar1; xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; q0=-PCatT*xvar3/(1.0-p[25]); q0_PCatT=-xvar3/(1.0-p[25]); q0_xvar3=-PCatT/(1.0-p[25]); q0_Vrth=q0_PCatT*PCatT_Vrth; q0_Vrth=q0_Vrth+q0_xvar3*xvar3_Vrth; dv=(*Vbep)+dv0; dv_Vbep=1.0; dv_dv0=1.0; dv_Vrth=dv_dv0*dv0_Vrth; mv=sqrt(dv*dv+4.0*p[26]*p[26]); mv_dv=dv/sqrt((dv*dv)+4.0*(p[26]*p[26])); mv_Vbep=mv_dv*dv_Vbep; mv_Vrth=mv_dv*dv_Vrth; vl=0.5*(dv-mv)-dv0; vl_dv=0.5; vl_mv=-0.5; vl_dv0=-1.0; vl_Vbep=vl_dv*dv_Vbep; vl_Vrth=vl_dv*dv_Vrth; vl_Vbep=vl_Vbep+vl_mv*mv_Vbep; vl_Vrth=vl_Vrth+vl_mv*mv_Vrth; vl_Vrth=vl_Vrth+vl_dv0*dv0_Vrth; xvar1=(1.0-vl/PCatT); xvar1_vl=-1.0/PCatT; xvar1_PCatT=vl/(PCatT*PCatT); xvar1_Vbep=xvar1_vl*vl_Vbep; xvar1_Vrth=xvar1_vl*vl_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_PCatT*PCatT_Vrth; xvar2=(1.0-p[25]); xvar3=pow(xvar1,xvar2); xvar3_xvar1=xvar3*xvar2/xvar1; xvar3_Vbep=xvar3_xvar1*xvar1_Vbep; xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; qlo=-PCatT*xvar3/(1.0-p[25]); qlo_PCatT=-xvar3/(1.0-p[25]); qlo_xvar3=-PCatT/(1.0-p[25]); qlo_Vrth=qlo_PCatT*PCatT_Vrth; qlo_Vbep=qlo_xvar3*xvar3_Vbep; qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; xvar1=(1.0-p[14]); xvar2=(-p[25]); xvar3=pow(xvar1,xvar2); qdbep=qlo+xvar3*((*Vbep)-vl+vl0)-q0; qdbep_qlo=1.0; qdbep_Vbep=xvar3; qdbep_vl=-xvar3; qdbep_vl0=xvar3; qdbep_q0=-1.0; qdbep_Vrth=qdbep_qlo*qlo_Vrth; qdbep_Vbep=qdbep_Vbep+qdbep_qlo*qlo_Vbep; qdbep_Vbep=qdbep_Vbep+qdbep_vl*vl_Vbep; qdbep_Vrth=qdbep_Vrth+qdbep_vl*vl_Vrth; qdbep_Vrth=qdbep_Vrth+qdbep_vl0*vl0_Vrth; qdbep_Vrth=qdbep_Vrth+qdbep_q0*q0_Vrth; } } if(p[27]>0.0){ dv0=-PSatT*p[14]; dv0_PSatT=-p[14]; dv0_Vrth=dv0_PSatT*PSatT_Vrth; if(p[30]<=0.0){ dvh=(*Vbcp)+dv0; dvh_Vbcp=1.0; dvh_dv0=1.0; dvh_Vrth=dvh_dv0*dv0_Vrth; if(dvh>0.0){ xvar1=(1.0-p[14]); xvar2=(-1.0-p[29]); pwq=pow(xvar1,xvar2); qlo=PSatT*(1.0-pwq*(1.0-p[14])*(1.0-p[14]))/(1.0-p[29]); qlo_PSatT=(1.0-((1.0-p[14])*(1.0-p[14]))*pwq)/(1.0-p[29]); qlo_Vbep=0.0; qlo_Vbcp=0.0; qlo_Vrth=qlo_PSatT*PSatT_Vrth; qhi=dvh*(1.0-p[14]+0.5*p[29]*dvh/PSatT)*pwq; qhi_dvh=(0.5*dvh*p[29]/PSatT-p[14]+1.0)*pwq+0.5*dvh*p[29]*pwq/PSatT; qhi_PSatT=-0.5*(dvh*dvh)*p[29]*pwq/(PSatT*PSatT); qhi_Vbep=0.0; qhi_Vbcp=qhi_dvh*dvh_Vbcp; qhi_Vrth=qhi_dvh*dvh_Vrth; qhi_Vrth=qhi_Vrth+qhi_PSatT*PSatT_Vrth; }else{ xvar1=(1.0-(*Vbcp)/PSatT); xvar1_Vbcp=-1.0/PSatT; xvar1_PSatT=(*Vbcp)/(PSatT*PSatT); xvar1_Vrth=xvar1_PSatT*PSatT_Vrth; xvar2=(1.0-p[29]); xvar3=pow(xvar1,xvar2); xvar3_xvar1=xvar3*xvar2/xvar1; xvar3_Vbcp=xvar3_xvar1*xvar1_Vbcp; xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; qlo=PSatT*(1.0-xvar3)/(1.0-p[29]); qlo_PSatT=(1.0-xvar3)/(1.0-p[29]); qlo_xvar3=-PSatT/(1.0-p[29]); qlo_Vbep=0.0; qlo_Vrth=qlo_PSatT*PSatT_Vrth; qlo_Vbcp=qlo_xvar3*xvar3_Vbcp; qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; qhi=0.0; qhi_Vbep=0.0; qhi_Vrth=0.0; qhi_Vbcp=0.0; } qdbcp=qlo+qhi; qdbcp_qlo=1.0; qdbcp_qhi=1.0; qdbcp_Vrth=qdbcp_qlo*qlo_Vrth; qdbcp_Vbcp=qdbcp_qlo*qlo_Vbcp; qdbcp_Vbep=qdbcp_qlo*qlo_Vbep; qdbcp_Vbep=qdbcp_Vbep+qdbcp_qhi*qhi_Vbep; qdbcp_Vrth=qdbcp_Vrth+qdbcp_qhi*qhi_Vrth; qdbcp_Vbcp=qdbcp_Vbcp+qdbcp_qhi*qhi_Vbcp; }else{ mv0=sqrt(dv0*dv0+4.0*p[30]*p[30]); mv0_dv0=dv0/sqrt((dv0*dv0)+4.0*(p[30]*p[30])); mv0_Vrth=mv0_dv0*dv0_Vrth; vl0=-0.5*(dv0+mv0); vl0_dv0=-0.5; vl0_mv0=-0.5; vl0_Vrth=vl0_dv0*dv0_Vrth; vl0_Vrth=vl0_Vrth+vl0_mv0*mv0_Vrth; xvar1=(1.0-vl0/PSatT); xvar1_vl0=-1.0/PSatT; xvar1_PSatT=vl0/(PSatT*PSatT); xvar1_Vrth=xvar1_vl0*vl0_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_PSatT*PSatT_Vrth; xvar2=(1.0-p[29]); xvar3=pow(xvar1,xvar2); xvar3_xvar1=xvar3*xvar2/xvar1; xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; q0=-PSatT*xvar3/(1.0-p[29]); q0_PSatT=-xvar3/(1.0-p[29]); q0_xvar3=-PSatT/(1.0-p[29]); q0_Vrth=q0_PSatT*PSatT_Vrth; q0_Vrth=q0_Vrth+q0_xvar3*xvar3_Vrth; dv=(*Vbcp)+dv0; dv_Vbcp=1.0; dv_dv0=1.0; dv_Vrth=dv_dv0*dv0_Vrth; mv=sqrt(dv*dv+4.0*p[30]*p[30]); mv_dv=dv/sqrt((dv*dv)+4.0*(p[30]*p[30])); mv_Vbcp=mv_dv*dv_Vbcp; mv_Vrth=mv_dv*dv_Vrth; vl=0.5*(dv-mv)-dv0; vl_dv=0.5; vl_mv=-0.5; vl_dv0=-1.0; vl_Vbcp=vl_dv*dv_Vbcp; vl_Vrth=vl_dv*dv_Vrth; vl_Vbcp=vl_Vbcp+vl_mv*mv_Vbcp; vl_Vrth=vl_Vrth+vl_mv*mv_Vrth; vl_Vrth=vl_Vrth+vl_dv0*dv0_Vrth; xvar1=(1.0-vl/PSatT); xvar1_vl=-1.0/PSatT; xvar1_PSatT=vl/(PSatT*PSatT); xvar1_Vbcp=xvar1_vl*vl_Vbcp; xvar1_Vrth=xvar1_vl*vl_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_PSatT*PSatT_Vrth; xvar2=(1.0-p[29]); xvar3=pow(xvar1,xvar2); xvar3_xvar1=xvar3*xvar2/xvar1; xvar3_Vbcp=xvar3_xvar1*xvar1_Vbcp; xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; qlo=-PSatT*xvar3/(1.0-p[29]); qlo_PSatT=-xvar3/(1.0-p[29]); qlo_xvar3=-PSatT/(1.0-p[29]); qlo_Vbep=0.0; qlo_Vrth=qlo_PSatT*PSatT_Vrth; qlo_Vbcp=qlo_xvar3*xvar3_Vbcp; qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; xvar1=(1.0-p[14]); xvar2=(-p[29]); xvar3=pow(xvar1,xvar2); qdbcp=qlo+xvar3*((*Vbcp)-vl+vl0)-q0; qdbcp_qlo=1.0; qdbcp_Vbcp=xvar3; qdbcp_vl=-xvar3; qdbcp_vl0=xvar3; qdbcp_q0=-1.0; qdbcp_Vrth=qdbcp_qlo*qlo_Vrth; qdbcp_Vbcp=qdbcp_Vbcp+qdbcp_qlo*qlo_Vbcp; qdbcp_Vbep=qdbcp_qlo*qlo_Vbep; qdbcp_Vbcp=qdbcp_Vbcp+qdbcp_vl*vl_Vbcp; qdbcp_Vrth=qdbcp_Vrth+qdbcp_vl*vl_Vrth; qdbcp_Vrth=qdbcp_Vrth+qdbcp_vl0*vl0_Vrth; qdbcp_Vrth=qdbcp_Vrth+qdbcp_q0*q0_Vrth; } }else{ qdbcp=0.0; qdbcp_Vrth=0.0; qdbcp_Vbcp=0.0; } argi=(*Vbei)/(NFatT*Vtv); argi_Vbei=1.0/(NFatT*Vtv); argi_NFatT=-(*Vbei)/((NFatT*NFatT)*Vtv); argi_Vtv=-(*Vbei)/(NFatT*(Vtv*Vtv)); argi_Vrth=argi_NFatT*NFatT_Vrth; argi_Vrth=argi_Vrth+argi_Vtv*Vtv_Vrth; expi=exp(argi); expi_argi=expi; expi_Vbei=expi_argi*argi_Vbei; expi_Vrth=expi_argi*argi_Vrth; Ifi=ISatT*(expi-1.0); Ifi_ISatT=expi-1.0; Ifi_expi=ISatT; Ifi_Vrth=Ifi_ISatT*ISatT_Vrth; Ifi_Vbei=Ifi_expi*expi_Vbei; Ifi_Vrth=Ifi_Vrth+Ifi_expi*expi_Vrth; argi=(*Vbci)/(NRatT*Vtv); argi_Vbci=1.0/(NRatT*Vtv); argi_NRatT=-(*Vbci)/((NRatT*NRatT)*Vtv); argi_Vtv=-(*Vbci)/(NRatT*(Vtv*Vtv)); argi_Vrth=argi_NRatT*NRatT_Vrth; argi_Vrth=argi_Vrth+argi_Vtv*Vtv_Vrth; expi=exp(argi); expi_argi=expi; expi_Vbci=expi_argi*argi_Vbci; expi_Vrth=expi_argi*argi_Vrth; Iri=ISatT*ISRRatT*(expi-1.0); Iri_ISatT=(expi-1.0)*ISRRatT; Iri_ISRRatT=(expi-1.0)*ISatT; Iri_expi=ISatT*ISRRatT; Iri_Vrth=Iri_ISatT*ISatT_Vrth; Iri_Vrth=Iri_Vrth+Iri_ISRRatT*ISRRatT_Vrth; Iri_Vbci=Iri_expi*expi_Vbci; Iri_Vrth=Iri_Vrth+Iri_expi*expi_Vrth; q1z=1.0+qdbe*IVER+qdbc*IVEF; q1z_qdbe=IVER; q1z_qdbc=IVEF; q1z_Vrth=q1z_qdbe*qdbe_Vrth; q1z_Vbei=q1z_qdbe*qdbe_Vbei; q1z_Vrth=q1z_Vrth+q1z_qdbc*qdbc_Vrth; q1z_Vbci=q1z_qdbc*qdbc_Vbci; q1=0.5*(sqrt((q1z-1.0e-4)*(q1z-1.0e-4)+1.0e-8)+q1z-1.0e-4)+1.0e-4; q1_q1z=0.5*((q1z-1.0e-4)/sqrt(((q1z-1.0e-4)*(q1z-1.0e-4))+1.0e-8)+1.0); q1_Vrth=q1_q1z*q1z_Vrth; q1_Vbei=q1_q1z*q1z_Vbei; q1_Vbci=q1_q1z*q1z_Vbci; q2=Ifi*IIKF+Iri*IIKR; q2_Ifi=IIKF; q2_IIKF=Ifi; q2_Iri=IIKR; q2_Vrth=q2_Ifi*Ifi_Vrth; q2_Vbei=q2_Ifi*Ifi_Vbei; q2_Vrth=q2_Vrth+q2_IIKF*IIKF_Vrth; q2_Vrth=q2_Vrth+q2_Iri*Iri_Vrth; q2_Vbci=q2_Iri*Iri_Vbci; if(p[88]<0.5){ xvar2=1.0/p[89]; xvar3=pow(q1,xvar2); xvar3_q1=xvar3*xvar2/q1; xvar3_Vrth=xvar3_q1*q1_Vrth; xvar3_Vbei=xvar3_q1*q1_Vbei; xvar3_Vbci=xvar3_q1*q1_Vbci; xvar1=(xvar3+4.0*q2); xvar1_xvar3=1.0; xvar1_q2=4.0; xvar1_Vrth=xvar1_xvar3*xvar3_Vrth; xvar1_Vbei=xvar1_xvar3*xvar3_Vbei; xvar1_Vbci=xvar1_xvar3*xvar3_Vbci; xvar1_Vrth=xvar1_Vrth+xvar1_q2*q2_Vrth; xvar1_Vbei=xvar1_Vbei+xvar1_q2*q2_Vbei; xvar1_Vbci=xvar1_Vbci+xvar1_q2*q2_Vbci; xvar4=pow(xvar1,p[89]); xvar4_xvar1=xvar4*p[89]/xvar1; xvar4_Vrth=xvar4_xvar1*xvar1_Vrth; xvar4_Vbei=xvar4_xvar1*xvar1_Vbei; xvar4_Vbci=xvar4_xvar1*xvar1_Vbci; qb=0.5*(q1+xvar4); qb_q1=0.5; qb_xvar4=0.5; qb_Vrth=qb_q1*q1_Vrth; qb_Vbei=qb_q1*q1_Vbei; qb_Vbci=qb_q1*q1_Vbci; qb_Vrth=qb_Vrth+qb_xvar4*xvar4_Vrth; qb_Vbei=qb_Vbei+qb_xvar4*xvar4_Vbei; qb_Vbci=qb_Vbci+qb_xvar4*xvar4_Vbci; }else{ xvar1=(1.0+4.0*q2); xvar1_q2=4.0; xvar1_Vrth=xvar1_q2*q2_Vrth; xvar1_Vbei=xvar1_q2*q2_Vbei; xvar1_Vbci=xvar1_q2*q2_Vbci; xvar2=pow(xvar1,p[89]); xvar2_xvar1=xvar2*p[89]/xvar1; xvar2_Vrth=xvar2_xvar1*xvar1_Vrth; xvar2_Vbei=xvar2_xvar1*xvar1_Vbei; xvar2_Vbci=xvar2_xvar1*xvar1_Vbci; qb=0.5*q1*(1.0+xvar2); qb_q1=0.5*(xvar2+1.0); qb_xvar2=0.5*q1; qb_Vrth=qb_q1*q1_Vrth; qb_Vbei=qb_q1*q1_Vbei; qb_Vbci=qb_q1*q1_Vbci; qb_Vrth=qb_Vrth+qb_xvar2*xvar2_Vrth; qb_Vbei=qb_Vbei+qb_xvar2*xvar2_Vbei; qb_Vbci=qb_Vbci+qb_xvar2*xvar2_Vbci; } (*Itzr)=Iri/qb; Itzr_Iri=1.0/qb; Itzr_qb=-Iri/(qb*qb); *Itzr_Vrth=Itzr_Iri*Iri_Vrth; *Itzr_Vbci=Itzr_Iri*Iri_Vbci; *Itzr_Vrth=(*Itzr_Vrth)+Itzr_qb*qb_Vrth; *Itzr_Vbei=Itzr_qb*qb_Vbei; *Itzr_Vbci=(*Itzr_Vbci)+Itzr_qb*qb_Vbci; (*Itzf)=Ifi/qb; Itzf_Ifi=1.0/qb; Itzf_qb=-Ifi/(qb*qb); *Itzf_Vrth=Itzf_Ifi*Ifi_Vrth; *Itzf_Vbei=Itzf_Ifi*Ifi_Vbei; *Itzf_Vrth=(*Itzf_Vrth)+Itzf_qb*qb_Vrth; *Itzf_Vbei=(*Itzf_Vbei)+Itzf_qb*qb_Vbei; *Itzf_Vbci=Itzf_qb*qb_Vbci; if(p[42]>0.0){ argi=(*Vbep)/(p[44]*Vtv); argi_Vbep=1.0/(p[44]*Vtv); argi_Vtv=-(*Vbep)/(p[44]*(Vtv*Vtv)); argi_Vrth=argi_Vtv*Vtv_Vrth; expi=exp(argi); expi_argi=expi; expi_Vbep=expi_argi*argi_Vbep; expi_Vrth=expi_argi*argi_Vrth; argx=(*Vbci)/(p[44]*Vtv); argx_Vbci=1.0/(p[44]*Vtv); argx_Vtv=-(*Vbci)/(p[44]*(Vtv*Vtv)); argx_Vrth=argx_Vtv*Vtv_Vrth; expx=exp(argx); expx_argx=expx; expx_Vbci=expx_argx*argx_Vbci; expx_Vrth=expx_argx*argx_Vrth; Ifp=ISPatT*(p[43]*expi+(1.0-p[43])*expx-1.0); Ifp_ISPatT=expi*p[43]+expx*(1.0-p[43])-1.0; Ifp_expi=ISPatT*p[43]; Ifp_expx=ISPatT*(1.0-p[43]); Ifp_Vrth=Ifp_ISPatT*ISPatT_Vrth; Ifp_Vbep=Ifp_expi*expi_Vbep; Ifp_Vrth=Ifp_Vrth+Ifp_expi*expi_Vrth; Ifp_Vbci=Ifp_expx*expx_Vbci; Ifp_Vrth=Ifp_Vrth+Ifp_expx*expx_Vrth; q2p=Ifp*IIKP; q2p_Ifp=IIKP; q2p_Vrth=q2p_Ifp*Ifp_Vrth; q2p_Vbep=q2p_Ifp*Ifp_Vbep; q2p_Vbci=q2p_Ifp*Ifp_Vbci; qbp=0.5*(1.0+sqrt(1.0+4.0*q2p)); qbp_q2p=1.0/sqrt(4.0*q2p+1.0); qbp_Vrth=qbp_q2p*q2p_Vrth; qbp_Vbep=qbp_q2p*q2p_Vbep; qbp_Vbci=qbp_q2p*q2p_Vbci; argi=(*Vbcp)/(p[44]*Vtv); argi_Vbcp=1.0/(p[44]*Vtv); argi_Vtv=-(*Vbcp)/(p[44]*(Vtv*Vtv)); argi_Vrth=argi_Vtv*Vtv_Vrth; expi=exp(argi); expi_argi=expi; expi_Vbcp=expi_argi*argi_Vbcp; expi_Vrth=expi_argi*argi_Vrth; Irp=ISPatT*(expi-1.0); Irp_ISPatT=expi-1.0; Irp_expi=ISPatT; Irp_Vrth=Irp_ISPatT*ISPatT_Vrth; Irp_Vbcp=Irp_expi*expi_Vbcp; Irp_Vrth=Irp_Vrth+Irp_expi*expi_Vrth; (*Iccp)=(Ifp-Irp)/qbp; Iccp_Ifp=1.0/qbp; Iccp_Irp=-1.0/qbp; Iccp_qbp=-(Ifp-Irp)/(qbp*qbp); *Iccp_Vrth=Iccp_Ifp*Ifp_Vrth; *Iccp_Vbep=Iccp_Ifp*Ifp_Vbep; *Iccp_Vbci=Iccp_Ifp*Ifp_Vbci; *Iccp_Vrth=(*Iccp_Vrth)+Iccp_Irp*Irp_Vrth; *Iccp_Vbcp=Iccp_Irp*Irp_Vbcp; *Iccp_Vrth=(*Iccp_Vrth)+Iccp_qbp*qbp_Vrth; *Iccp_Vbep=(*Iccp_Vbep)+Iccp_qbp*qbp_Vbep; *Iccp_Vbci=(*Iccp_Vbci)+Iccp_qbp*qbp_Vbci; }else{ Ifp=0.0; Ifp_Vrth=0.0; Ifp_Vbep=0.0; Ifp_Vbci=0.0; qbp=1.0; qbp_Vrth=0.0; qbp_Vbep=0.0; qbp_Vbci=0.0; (*Iccp)=0.0; *Iccp_Vrth=0.0; *Iccp_Vbep=0.0; *Iccp_Vbci=0.0; *Iccp_Vbcp=0.0; } if(p[32]==1.0){ argi=(*Vbei)/(p[33]*Vtv); argi_Vbei=1.0/(p[33]*Vtv); argi_Vtv=-(*Vbei)/(p[33]*(Vtv*Vtv)); argi_Vrth=argi_Vtv*Vtv_Vrth; expi=exp(argi); expi_argi=expi; expi_Vbei=expi_argi*argi_Vbei; expi_Vrth=expi_argi*argi_Vrth; argn=(*Vbei)/(p[35]*Vtv); argn_Vbei=1.0/(p[35]*Vtv); argn_Vtv=-(*Vbei)/(p[35]*(Vtv*Vtv)); argn_Vrth=argn_Vtv*Vtv_Vrth; expn=exp(argn); expn_argn=expn; expn_Vbei=expn_argn*argn_Vbei; expn_Vrth=expn_argn*argn_Vrth; if(p[98]>0.0){ argx=(-VBBEatT-(*Vbei))/(NBBEatT*Vtv); argx_VBBEatT=-1.0/(NBBEatT*Vtv); argx_Vbei=-1.0/(NBBEatT*Vtv); argx_NBBEatT=-(-(*Vbei)-VBBEatT)/((NBBEatT*NBBEatT)*Vtv); argx_Vtv=-(-(*Vbei)-VBBEatT)/(NBBEatT*(Vtv*Vtv)); argx_Vrth=argx_VBBEatT*VBBEatT_Vrth; argx_Vrth=argx_Vrth+argx_NBBEatT*NBBEatT_Vrth; argx_Vrth=argx_Vrth+argx_Vtv*Vtv_Vrth; expx=exp(argx); expx_argx=expx; expx_Vrth=expx_argx*argx_Vrth; expx_Vbei=expx_argx*argx_Vbei; (*Ibe)=IBEIatT*(expi-1.0)+IBENatT*(expn-1.0)-p[100]*(expx-EBBEatT); Ibe_IBEIatT=expi-1.0; Ibe_expi=IBEIatT; Ibe_IBENatT=expn-1.0; Ibe_expn=IBENatT; Ibe_expx=-p[100]; Ibe_EBBEatT=p[100]; *Ibe_Vrth=Ibe_IBEIatT*IBEIatT_Vrth; *Ibe_Vbei=Ibe_expi*expi_Vbei; *Ibe_Vrth=(*Ibe_Vrth)+Ibe_expi*expi_Vrth; *Ibe_Vrth=(*Ibe_Vrth)+Ibe_IBENatT*IBENatT_Vrth; *Ibe_Vbei=(*Ibe_Vbei)+Ibe_expn*expn_Vbei; *Ibe_Vrth=(*Ibe_Vrth)+Ibe_expn*expn_Vrth; *Ibe_Vrth=(*Ibe_Vrth)+Ibe_expx*expx_Vrth; *Ibe_Vbei=(*Ibe_Vbei)+Ibe_expx*expx_Vbei; *Ibe_Vrth=(*Ibe_Vrth)+Ibe_EBBEatT*EBBEatT_Vrth; }else{ (*Ibe)=IBEIatT*(expi-1.0)+IBENatT*(expn-1.0); Ibe_IBEIatT=expi-1.0; Ibe_expi=IBEIatT; Ibe_IBENatT=expn-1.0; Ibe_expn=IBENatT; *Ibe_Vrth=Ibe_IBEIatT*IBEIatT_Vrth; *Ibe_Vbei=Ibe_expi*expi_Vbei; *Ibe_Vrth=(*Ibe_Vrth)+Ibe_expi*expi_Vrth; *Ibe_Vrth=(*Ibe_Vrth)+Ibe_IBENatT*IBENatT_Vrth; *Ibe_Vbei=(*Ibe_Vbei)+Ibe_expn*expn_Vbei; *Ibe_Vrth=(*Ibe_Vrth)+Ibe_expn*expn_Vrth; } (*Ibex)=0.0; *Ibex_Vrth=0.0; *Ibex_Vbex=0.0; }else if(p[32]==0.0){ (*Ibe)=0.0; *Ibe_Vrth=0.0; *Ibe_Vbei=0.0; argi=(*Vbex)/(p[33]*Vtv); argi_Vbex=1.0/(p[33]*Vtv); argi_Vtv=-(*Vbex)/(p[33]*(Vtv*Vtv)); argi_Vrth=argi_Vtv*Vtv_Vrth; expi=exp(argi); expi_argi=expi; expi_Vbex=expi_argi*argi_Vbex; expi_Vrth=expi_argi*argi_Vrth; argn=(*Vbex)/(p[35]*Vtv); argn_Vbex=1.0/(p[35]*Vtv); argn_Vtv=-(*Vbex)/(p[35]*(Vtv*Vtv)); argn_Vrth=argn_Vtv*Vtv_Vrth; expn=exp(argn); expn_argn=expn; expn_Vbex=expn_argn*argn_Vbex; expn_Vrth=expn_argn*argn_Vrth; if(p[98]>0.0){ argx=(-VBBEatT-(*Vbex))/(NBBEatT*Vtv); argx_VBBEatT=-1.0/(NBBEatT*Vtv); argx_Vbex=-1.0/(NBBEatT*Vtv); argx_NBBEatT=-(-(*Vbex)-VBBEatT)/((NBBEatT*NBBEatT)*Vtv); argx_Vtv=-(-(*Vbex)-VBBEatT)/(NBBEatT*(Vtv*Vtv)); argx_Vrth=argx_VBBEatT*VBBEatT_Vrth; argx_Vrth=argx_Vrth+argx_NBBEatT*NBBEatT_Vrth; argx_Vrth=argx_Vrth+argx_Vtv*Vtv_Vrth; expx=exp(argx); expx_argx=expx; expx_Vrth=expx_argx*argx_Vrth; expx_Vbex=expx_argx*argx_Vbex; (*Ibex)=IBEIatT*(expi-1.0)+IBENatT*(expn-1.0)-p[100]*(expx-EBBEatT); Ibex_IBEIatT=expi-1.0; Ibex_expi=IBEIatT; Ibex_IBENatT=expn-1.0; Ibex_expn=IBENatT; Ibex_expx=-p[100]; Ibex_EBBEatT=p[100]; *Ibex_Vrth=Ibex_IBEIatT*IBEIatT_Vrth; *Ibex_Vbex=Ibex_expi*expi_Vbex; *Ibex_Vrth=(*Ibex_Vrth)+Ibex_expi*expi_Vrth; *Ibex_Vrth=(*Ibex_Vrth)+Ibex_IBENatT*IBENatT_Vrth; *Ibex_Vbex=(*Ibex_Vbex)+Ibex_expn*expn_Vbex; *Ibex_Vrth=(*Ibex_Vrth)+Ibex_expn*expn_Vrth; *Ibex_Vrth=(*Ibex_Vrth)+Ibex_expx*expx_Vrth; *Ibex_Vbex=(*Ibex_Vbex)+Ibex_expx*expx_Vbex; *Ibex_Vrth=(*Ibex_Vrth)+Ibex_EBBEatT*EBBEatT_Vrth; }else{ (*Ibex)=IBEIatT*(expi-1.0)+IBENatT*(expn-1.0); Ibex_IBEIatT=expi-1.0; Ibex_expi=IBEIatT; Ibex_IBENatT=expn-1.0; Ibex_expn=IBENatT; *Ibex_Vrth=Ibex_IBEIatT*IBEIatT_Vrth; *Ibex_Vbex=Ibex_expi*expi_Vbex; *Ibex_Vrth=(*Ibex_Vrth)+Ibex_expi*expi_Vrth; *Ibex_Vrth=(*Ibex_Vrth)+Ibex_IBENatT*IBENatT_Vrth; *Ibex_Vbex=(*Ibex_Vbex)+Ibex_expn*expn_Vbex; *Ibex_Vrth=(*Ibex_Vrth)+Ibex_expn*expn_Vrth; } }else{ argi=(*Vbei)/(p[33]*Vtv); argi_Vbei=1.0/(p[33]*Vtv); argi_Vtv=-(*Vbei)/(p[33]*(Vtv*Vtv)); argi_Vrth=argi_Vtv*Vtv_Vrth; expi=exp(argi); expi_argi=expi; expi_Vbei=expi_argi*argi_Vbei; expi_Vrth=expi_argi*argi_Vrth; argn=(*Vbei)/(p[35]*Vtv); argn_Vbei=1.0/(p[35]*Vtv); argn_Vtv=-(*Vbei)/(p[35]*(Vtv*Vtv)); argn_Vrth=argn_Vtv*Vtv_Vrth; expn=exp(argn); expn_argn=expn; expn_Vbei=expn_argn*argn_Vbei; expn_Vrth=expn_argn*argn_Vrth; if(p[98]>0.0){ argx=(-VBBEatT-(*Vbei))/(NBBEatT*Vtv); argx_VBBEatT=-1.0/(NBBEatT*Vtv); argx_Vbei=-1.0/(NBBEatT*Vtv); argx_NBBEatT=-(-(*Vbei)-VBBEatT)/((NBBEatT*NBBEatT)*Vtv); argx_Vtv=-(-(*Vbei)-VBBEatT)/(NBBEatT*(Vtv*Vtv)); argx_Vrth=argx_VBBEatT*VBBEatT_Vrth; argx_Vrth=argx_Vrth+argx_NBBEatT*NBBEatT_Vrth; argx_Vrth=argx_Vrth+argx_Vtv*Vtv_Vrth; expx=exp(argx); expx_argx=expx; expx_Vrth=expx_argx*argx_Vrth; expx_Vbei=expx_argx*argx_Vbei; (*Ibe)=p[32]*(IBEIatT*(expi-1.0)+IBENatT*(expn-1.0)-p[100]*(expx-EBBEatT)); Ibe_IBEIatT=(expi-1.0)*p[32]; Ibe_expi=IBEIatT*p[32]; Ibe_IBENatT=(expn-1.0)*p[32]; Ibe_expn=IBENatT*p[32]; Ibe_expx=-p[100]*p[32]; Ibe_EBBEatT=p[100]*p[32]; *Ibe_Vrth=Ibe_IBEIatT*IBEIatT_Vrth; *Ibe_Vbei=Ibe_expi*expi_Vbei; *Ibe_Vrth=(*Ibe_Vrth)+Ibe_expi*expi_Vrth; *Ibe_Vrth=(*Ibe_Vrth)+Ibe_IBENatT*IBENatT_Vrth; *Ibe_Vbei=(*Ibe_Vbei)+Ibe_expn*expn_Vbei; *Ibe_Vrth=(*Ibe_Vrth)+Ibe_expn*expn_Vrth; *Ibe_Vrth=(*Ibe_Vrth)+Ibe_expx*expx_Vrth; *Ibe_Vbei=(*Ibe_Vbei)+Ibe_expx*expx_Vbei; *Ibe_Vrth=(*Ibe_Vrth)+Ibe_EBBEatT*EBBEatT_Vrth; }else{ (*Ibe)=p[32]*(IBEIatT*(expi-1.0)+IBENatT*(expn-1.0)); Ibe_IBEIatT=(expi-1.0)*p[32]; Ibe_expi=IBEIatT*p[32]; Ibe_IBENatT=(expn-1.0)*p[32]; Ibe_expn=IBENatT*p[32]; *Ibe_Vrth=Ibe_IBEIatT*IBEIatT_Vrth; *Ibe_Vbei=Ibe_expi*expi_Vbei; *Ibe_Vrth=(*Ibe_Vrth)+Ibe_expi*expi_Vrth; *Ibe_Vrth=(*Ibe_Vrth)+Ibe_IBENatT*IBENatT_Vrth; *Ibe_Vbei=(*Ibe_Vbei)+Ibe_expn*expn_Vbei; *Ibe_Vrth=(*Ibe_Vrth)+Ibe_expn*expn_Vrth; } argi=(*Vbex)/(p[33]*Vtv); argi_Vbex=1.0/(p[33]*Vtv); argi_Vtv=-(*Vbex)/(p[33]*(Vtv*Vtv)); argi_Vrth=argi_Vtv*Vtv_Vrth; expi=exp(argi); expi_argi=expi; expi_Vbex=expi_argi*argi_Vbex; expi_Vrth=expi_argi*argi_Vrth; argn=(*Vbex)/(p[35]*Vtv); argn_Vbex=1.0/(p[35]*Vtv); argn_Vtv=-(*Vbex)/(p[35]*(Vtv*Vtv)); argn_Vrth=argn_Vtv*Vtv_Vrth; expn=exp(argn); expn_argn=expn; expn_Vbex=expn_argn*argn_Vbex; expn_Vrth=expn_argn*argn_Vrth; if(p[98]>0.0){ argx=(-VBBEatT-(*Vbex))/(NBBEatT*Vtv); argx_VBBEatT=-1.0/(NBBEatT*Vtv); argx_Vbex=-1.0/(NBBEatT*Vtv); argx_NBBEatT=-(-(*Vbex)-VBBEatT)/((NBBEatT*NBBEatT)*Vtv); argx_Vtv=-(-(*Vbex)-VBBEatT)/(NBBEatT*(Vtv*Vtv)); argx_Vrth=argx_VBBEatT*VBBEatT_Vrth; argx_Vrth=argx_Vrth+argx_NBBEatT*NBBEatT_Vrth; argx_Vrth=argx_Vrth+argx_Vtv*Vtv_Vrth; expx=exp(argx); expx_argx=expx; expx_Vrth=expx_argx*argx_Vrth; expx_Vbex=expx_argx*argx_Vbex; (*Ibex)=(1.0-p[32])*(IBEIatT*(expi-1.0)+IBENatT*(expn-1.0)-p[100]*(expx-EBBEatT)); Ibex_IBEIatT=(expi-1.0)*(1.0-p[32]); Ibex_expi=IBEIatT*(1.0-p[32]); Ibex_IBENatT=(expn-1.0)*(1.0-p[32]); Ibex_expn=IBENatT*(1.0-p[32]); Ibex_expx=-p[100]*(1.0-p[32]); Ibex_EBBEatT=p[100]*(1.0-p[32]); *Ibex_Vrth=Ibex_IBEIatT*IBEIatT_Vrth; *Ibex_Vbex=Ibex_expi*expi_Vbex; *Ibex_Vrth=(*Ibex_Vrth)+Ibex_expi*expi_Vrth; *Ibex_Vrth=(*Ibex_Vrth)+Ibex_IBENatT*IBENatT_Vrth; *Ibex_Vbex=(*Ibex_Vbex)+Ibex_expn*expn_Vbex; *Ibex_Vrth=(*Ibex_Vrth)+Ibex_expn*expn_Vrth; *Ibex_Vrth=(*Ibex_Vrth)+Ibex_expx*expx_Vrth; *Ibex_Vbex=(*Ibex_Vbex)+Ibex_expx*expx_Vbex; *Ibex_Vrth=(*Ibex_Vrth)+Ibex_EBBEatT*EBBEatT_Vrth; }else{ (*Ibex)=(1.0-p[32])*(IBEIatT*(expi-1.0)+IBENatT*(expn-1.0)); Ibex_IBEIatT=(expi-1.0)*(1.0-p[32]); Ibex_expi=IBEIatT*(1.0-p[32]); Ibex_IBENatT=(expn-1.0)*(1.0-p[32]); Ibex_expn=IBENatT*(1.0-p[32]); *Ibex_Vrth=Ibex_IBEIatT*IBEIatT_Vrth; *Ibex_Vbex=Ibex_expi*expi_Vbex; *Ibex_Vrth=(*Ibex_Vrth)+Ibex_expi*expi_Vrth; *Ibex_Vrth=(*Ibex_Vrth)+Ibex_IBENatT*IBENatT_Vrth; *Ibex_Vbex=(*Ibex_Vbex)+Ibex_expn*expn_Vbex; *Ibex_Vrth=(*Ibex_Vrth)+Ibex_expn*expn_Vrth; } } argi=(*Vbci)/(p[37]*Vtv); argi_Vbci=1.0/(p[37]*Vtv); argi_Vtv=-(*Vbci)/(p[37]*(Vtv*Vtv)); argi_Vrth=argi_Vtv*Vtv_Vrth; expi=exp(argi); expi_argi=expi; expi_Vbci=expi_argi*argi_Vbci; expi_Vrth=expi_argi*argi_Vrth; argn=(*Vbci)/(p[39]*Vtv); argn_Vbci=1.0/(p[39]*Vtv); argn_Vtv=-(*Vbci)/(p[39]*(Vtv*Vtv)); argn_Vrth=argn_Vtv*Vtv_Vrth; expn=exp(argn); expn_argn=expn; expn_Vbci=expn_argn*argn_Vbci; expn_Vrth=expn_argn*argn_Vrth; Ibcj=IBCIatT*(expi-1.0)+IBCNatT*(expn-1.0); Ibcj_IBCIatT=expi-1.0; Ibcj_expi=IBCIatT; Ibcj_IBCNatT=expn-1.0; Ibcj_expn=IBCNatT; Ibcj_Vrth=Ibcj_IBCIatT*IBCIatT_Vrth; Ibcj_Vbci=Ibcj_expi*expi_Vbci; Ibcj_Vrth=Ibcj_Vrth+Ibcj_expi*expi_Vrth; Ibcj_Vrth=Ibcj_Vrth+Ibcj_IBCNatT*IBCNatT_Vrth; Ibcj_Vbci=Ibcj_Vbci+Ibcj_expn*expn_Vbci; Ibcj_Vrth=Ibcj_Vrth+Ibcj_expn*expn_Vrth; if((p[45]>0.0)||(p[46]>0.0)){ argi=(*Vbep)/(p[37]*Vtv); argi_Vbep=1.0/(p[37]*Vtv); argi_Vtv=-(*Vbep)/(p[37]*(Vtv*Vtv)); argi_Vrth=argi_Vtv*Vtv_Vrth; expi=exp(argi); expi_argi=expi; expi_Vbep=expi_argi*argi_Vbep; expi_Vrth=expi_argi*argi_Vrth; argn=(*Vbep)/(p[39]*Vtv); argn_Vbep=1.0/(p[39]*Vtv); argn_Vtv=-(*Vbep)/(p[39]*(Vtv*Vtv)); argn_Vrth=argn_Vtv*Vtv_Vrth; expn=exp(argn); expn_argn=expn; expn_Vbep=expn_argn*argn_Vbep; expn_Vrth=expn_argn*argn_Vrth; (*Ibep)=IBEIPatT*(expi-1.0)+IBENPatT*(expn-1.0); Ibep_IBEIPatT=expi-1.0; Ibep_expi=IBEIPatT; Ibep_IBENPatT=expn-1.0; Ibep_expn=IBENPatT; *Ibep_Vrth=Ibep_IBEIPatT*IBEIPatT_Vrth; *Ibep_Vbep=Ibep_expi*expi_Vbep; *Ibep_Vrth=(*Ibep_Vrth)+Ibep_expi*expi_Vrth; *Ibep_Vrth=(*Ibep_Vrth)+Ibep_IBENPatT*IBENPatT_Vrth; *Ibep_Vbep=(*Ibep_Vbep)+Ibep_expn*expn_Vbep; *Ibep_Vrth=(*Ibep_Vrth)+Ibep_expn*expn_Vrth; }else{ (*Ibep)=0.0; *Ibep_Vrth=0.0; *Ibep_Vbep=0.0; } if(p[40]>0.0){ vl=0.5*(sqrt((PCatT-(*Vbci))*(PCatT-(*Vbci))+0.01)+(PCatT-(*Vbci))); vl_PCatT=0.5*((PCatT-(*Vbci))/sqrt(((PCatT-(*Vbci))*(PCatT-(*Vbci)))+0.01)+1.0); vl_Vbci=0.5*(-(PCatT-(*Vbci))/sqrt(((PCatT-(*Vbci))*(PCatT-(*Vbci)))+0.01)-1.0); vl_Vrth=vl_PCatT*PCatT_Vrth; xvar2=(p[25]-1.0); xvar3=pow(vl,xvar2); xvar3_vl=xvar3*xvar2/vl; xvar3_Vrth=xvar3_vl*vl_Vrth; xvar3_Vbci=xvar3_vl*vl_Vbci; xvar1=-AVC2atT*xvar3; xvar1_AVC2atT=-xvar3; xvar1_xvar3=-AVC2atT; xvar1_Vrth=xvar1_AVC2atT*AVC2atT_Vrth; xvar1_Vrth=xvar1_Vrth+xvar1_xvar3*xvar3_Vrth; xvar1_Vbci=xvar1_xvar3*xvar3_Vbci; xvar4=exp(xvar1); xvar4_xvar1=xvar4; xvar4_Vrth=xvar4_xvar1*xvar1_Vrth; xvar4_Vbci=xvar4_xvar1*xvar1_Vbci; avalf=p[40]*vl*xvar4; avalf_vl=p[40]*xvar4; avalf_xvar4=p[40]*vl; avalf_Vrth=avalf_vl*vl_Vrth; avalf_Vbci=avalf_vl*vl_Vbci; avalf_Vrth=avalf_Vrth+avalf_xvar4*xvar4_Vrth; avalf_Vbci=avalf_Vbci+avalf_xvar4*xvar4_Vbci; Igc=((*Itzf)-(*Itzr)-Ibcj)*avalf; Igc_Itzf=avalf; Igc_Itzr=-avalf; Igc_Ibcj=-avalf; Igc_avalf=-(*Itzr)+(*Itzf)-Ibcj; Igc_Vrth=Igc_Itzf*(*Itzf_Vrth); Igc_Vbei=Igc_Itzf*(*Itzf_Vbei); Igc_Vbci=Igc_Itzf*(*Itzf_Vbci); Igc_Vrth=Igc_Vrth+Igc_Itzr*(*Itzr_Vrth); Igc_Vbci=Igc_Vbci+Igc_Itzr*(*Itzr_Vbci); Igc_Vbei=Igc_Vbei+Igc_Itzr*(*Itzr_Vbei); Igc_Vrth=Igc_Vrth+Igc_Ibcj*Ibcj_Vrth; Igc_Vbci=Igc_Vbci+Igc_Ibcj*Ibcj_Vbci; Igc_Vrth=Igc_Vrth+Igc_avalf*avalf_Vrth; Igc_Vbci=Igc_Vbci+Igc_avalf*avalf_Vbci; }else{ Igc=0.0; Igc_Vrth=0.0; Igc_Vbei=0.0; Igc_Vbci=0.0; } (*Ibc)=Ibcj-Igc; Ibc_Ibcj=1.0; Ibc_Igc=-1.0; *Ibc_Vrth=Ibc_Ibcj*Ibcj_Vrth; *Ibc_Vbci=Ibc_Ibcj*Ibcj_Vbci; *Ibc_Vrth=(*Ibc_Vrth)+Ibc_Igc*Igc_Vrth; *Ibc_Vbei=Ibc_Igc*Igc_Vbei; *Ibc_Vbci=(*Ibc_Vbci)+Ibc_Igc*Igc_Vbci; if(p[1]>0.0){ (*Ircx)=(*Vrcx)/RCXatT; *Ircx_Vrcx=1.0/RCXatT; Ircx_RCXatT=-(*Vrcx)/(RCXatT*RCXatT); *Ircx_Vrth=Ircx_RCXatT*RCXatT_Vrth; }else{ (*Ircx)=0.0; *Ircx_Vrcx=0.0; *Ircx_Vrth=0.0; } argi=(*Vbci)/Vtv; argi_Vbci=1.0/Vtv; argi_Vtv=-(*Vbci)/(Vtv*Vtv); argi_Vrth=argi_Vtv*Vtv_Vrth; expi=exp(argi); expi_argi=expi; expi_Vbci=expi_argi*argi_Vbci; expi_Vrth=expi_argi*argi_Vrth; argx=(*Vbcx)/Vtv; argx_Vbcx=1.0/Vtv; argx_Vtv=-(*Vbcx)/(Vtv*Vtv); argx_Vrth=argx_Vtv*Vtv_Vrth; expx=exp(argx); expx_argx=expx; expx_Vbcx=expx_argx*argx_Vbcx; expx_Vrth=expx_argx*argx_Vrth; Kbci=sqrt(1.0+GAMMatT*expi); Kbci_GAMMatT=expi/(2.0*sqrt(expi*GAMMatT+1.0)); Kbci_expi=GAMMatT/(2.0*sqrt(expi*GAMMatT+1.0)); Kbci_Vrth=Kbci_GAMMatT*GAMMatT_Vrth; Kbci_Vbci=Kbci_expi*expi_Vbci; Kbci_Vrth=Kbci_Vrth+Kbci_expi*expi_Vrth; Kbcx=sqrt(1.0+GAMMatT*expx); Kbcx_GAMMatT=expx/(2.0*sqrt(expx*GAMMatT+1.0)); Kbcx_expx=GAMMatT/(2.0*sqrt(expx*GAMMatT+1.0)); Kbcx_Vrth=Kbcx_GAMMatT*GAMMatT_Vrth; Kbcx_Vbcx=Kbcx_expx*expx_Vbcx; Kbcx_Vrth=Kbcx_Vrth+Kbcx_expx*expx_Vrth; if(p[2]>0.0){ rKp1=(Kbci+1.0)/(Kbcx+1.0); rKp1_Kbci=1.0/(Kbcx+1.0); rKp1_Kbcx=-(Kbci+1.0)/((Kbcx+1.0)*(Kbcx+1.0)); rKp1_Vrth=rKp1_Kbci*Kbci_Vrth; rKp1_Vbci=rKp1_Kbci*Kbci_Vbci; rKp1_Vrth=rKp1_Vrth+rKp1_Kbcx*Kbcx_Vrth; rKp1_Vbcx=rKp1_Kbcx*Kbcx_Vbcx; xvar1=log(rKp1); xvar1_rKp1=1.0/rKp1; xvar1_Vrth=xvar1_rKp1*rKp1_Vrth; xvar1_Vbci=xvar1_rKp1*rKp1_Vbci; xvar1_Vbcx=xvar1_rKp1*rKp1_Vbcx; Iohm=((*Vrci)+Vtv*(Kbci-Kbcx-xvar1))/RCIatT; Iohm_Vrci=1.0/RCIatT; Iohm_Vtv=(-xvar1-Kbcx+Kbci)/RCIatT; Iohm_Kbci=Vtv/RCIatT; Iohm_Kbcx=-Vtv/RCIatT; Iohm_xvar1=-Vtv/RCIatT; Iohm_RCIatT=-(Vtv*(-xvar1-Kbcx+Kbci)+(*Vrci))/(RCIatT*RCIatT); Iohm_Vrth=Iohm_Vtv*Vtv_Vrth; Iohm_Vrth=Iohm_Vrth+Iohm_Kbci*Kbci_Vrth; Iohm_Vbci=Iohm_Kbci*Kbci_Vbci; Iohm_Vrth=Iohm_Vrth+Iohm_Kbcx*Kbcx_Vrth; Iohm_Vbcx=Iohm_Kbcx*Kbcx_Vbcx; Iohm_Vrth=Iohm_Vrth+Iohm_xvar1*xvar1_Vrth; Iohm_Vbci=Iohm_Vbci+Iohm_xvar1*xvar1_Vbci; Iohm_Vbcx=Iohm_Vbcx+Iohm_xvar1*xvar1_Vbcx; Iohm_Vrth=Iohm_Vrth+Iohm_RCIatT*RCIatT_Vrth; derf=IVO*RCIatT*Iohm/(1.0+0.5*IVO*IHRCF*sqrt((*Vrci)*(*Vrci)+0.01)); derf_IVO=Iohm*RCIatT/(0.5*IHRCF*IVO*sqrt(((*Vrci)*(*Vrci))+0.01)+1.0)-0.5*IHRCF*Iohm*IVO*RCIatT*sqrt(((*Vrci)*(*Vrci))+0.01)/((0.5*IHRCF*IVO*sqrt(((*Vrci)*(*Vrci))+0.01)+1.0)*(0.5*IHRCF*IVO*sqrt(((*Vrci)*(*Vrci))+0.01)+1.0)); derf_RCIatT=Iohm*IVO/(0.5*IHRCF*IVO*sqrt(((*Vrci)*(*Vrci))+0.01)+1.0); derf_Iohm=IVO*RCIatT/(0.5*IHRCF*IVO*sqrt(((*Vrci)*(*Vrci))+0.01)+1.0); derf_Vrci=-0.5*IHRCF*Iohm*(IVO*IVO)*RCIatT*(*Vrci)/(sqrt(((*Vrci)*(*Vrci))+0.01)*((0.5*IHRCF*IVO*sqrt(((*Vrci)*(*Vrci))+0.01)+1.0)*(0.5*IHRCF*IVO*sqrt(((*Vrci)*(*Vrci))+0.01)+1.0))); derf_Vrth=derf_IVO*IVO_Vrth; derf_Vrth=derf_Vrth+derf_RCIatT*RCIatT_Vrth; derf_Vrci=derf_Vrci+derf_Iohm*Iohm_Vrci; derf_Vrth=derf_Vrth+derf_Iohm*Iohm_Vrth; derf_Vbci=derf_Iohm*Iohm_Vbci; derf_Vbcx=derf_Iohm*Iohm_Vbcx; (*Irci)=Iohm/sqrt(1.0+derf*derf); Irci_Iohm=1.0/sqrt((derf*derf)+1.0); Irci_derf=-derf*Iohm/pow(((derf*derf)+1.0),(3.0/2.0)); *Irci_Vrci=Irci_Iohm*Iohm_Vrci; *Irci_Vrth=Irci_Iohm*Iohm_Vrth; *Irci_Vbci=Irci_Iohm*Iohm_Vbci; *Irci_Vbcx=Irci_Iohm*Iohm_Vbcx; *Irci_Vrth=(*Irci_Vrth)+Irci_derf*derf_Vrth; *Irci_Vrci=(*Irci_Vrci)+Irci_derf*derf_Vrci; *Irci_Vbci=(*Irci_Vbci)+Irci_derf*derf_Vbci; *Irci_Vbcx=(*Irci_Vbcx)+Irci_derf*derf_Vbcx; }else{ (*Irci)=0.0; *Irci_Vrci=0.0; *Irci_Vrth=0.0; *Irci_Vbci=0.0; *Irci_Vbcx=0.0; } if(p[6]>0.0){ (*Irbx)=(*Vrbx)/RBXatT; *Irbx_Vrbx=1.0/RBXatT; Irbx_RBXatT=-(*Vrbx)/(RBXatT*RBXatT); *Irbx_Vrth=Irbx_RBXatT*RBXatT_Vrth; }else{ (*Irbx)=0.0; *Irbx_Vrbx=0.0; *Irbx_Vrth=0.0; } if(p[7]>0.0){ (*Irbi)=(*Vrbi)*qb/RBIatT; *Irbi_Vrbi=qb/RBIatT; Irbi_qb=(*Vrbi)/RBIatT; Irbi_RBIatT=-qb*(*Vrbi)/(RBIatT*RBIatT); *Irbi_Vrth=Irbi_qb*qb_Vrth; *Irbi_Vbei=Irbi_qb*qb_Vbei; *Irbi_Vbci=Irbi_qb*qb_Vbci; *Irbi_Vrth=(*Irbi_Vrth)+Irbi_RBIatT*RBIatT_Vrth; }else{ (*Irbi)=0.0; *Irbi_Vrbi=0.0; *Irbi_Vrth=0.0; *Irbi_Vbei=0.0; *Irbi_Vbci=0.0; } if(p[8]>0.0){ (*Ire)=(*Vre)/REatT; *Ire_Vre=1.0/REatT; Ire_REatT=-(*Vre)/(REatT*REatT); *Ire_Vrth=Ire_REatT*REatT_Vrth; }else{ (*Ire)=0.0; *Ire_Vre=0.0; *Ire_Vrth=0.0; } if(p[10]>0.0){ (*Irbp)=(*Vrbp)*qbp/RBPatT; *Irbp_Vrbp=qbp/RBPatT; Irbp_qbp=(*Vrbp)/RBPatT; Irbp_RBPatT=-qbp*(*Vrbp)/(RBPatT*RBPatT); *Irbp_Vrth=Irbp_qbp*qbp_Vrth; *Irbp_Vbep=Irbp_qbp*qbp_Vbep; *Irbp_Vbci=Irbp_qbp*qbp_Vbci; *Irbp_Vrth=(*Irbp_Vrth)+Irbp_RBPatT*RBPatT_Vrth; }else{ (*Irbp)=0.0; *Irbp_Vrbp=0.0; *Irbp_Vrth=0.0; *Irbp_Vbep=0.0; *Irbp_Vbci=0.0; } if((p[47]>0.0)||(p[49]>0.0)){ argi=(*Vbcp)/(p[48]*Vtv); argi_Vbcp=1.0/(p[48]*Vtv); argi_Vtv=-(*Vbcp)/(p[48]*(Vtv*Vtv)); argi_Vrth=argi_Vtv*Vtv_Vrth; expi=exp(argi); expi_argi=expi; expi_Vbcp=expi_argi*argi_Vbcp; expi_Vrth=expi_argi*argi_Vrth; argn=(*Vbcp)/(p[50]*Vtv); argn_Vbcp=1.0/(p[50]*Vtv); argn_Vtv=-(*Vbcp)/(p[50]*(Vtv*Vtv)); argn_Vrth=argn_Vtv*Vtv_Vrth; expn=exp(argn); expn_argn=expn; expn_Vbcp=expn_argn*argn_Vbcp; expn_Vrth=expn_argn*argn_Vrth; (*Ibcp)=IBCIPatT*(expi-1.0)+IBCNPatT*(expn-1.0); Ibcp_IBCIPatT=expi-1.0; Ibcp_expi=IBCIPatT; Ibcp_IBCNPatT=expn-1.0; Ibcp_expn=IBCNPatT; *Ibcp_Vrth=Ibcp_IBCIPatT*IBCIPatT_Vrth; *Ibcp_Vbcp=Ibcp_expi*expi_Vbcp; *Ibcp_Vrth=(*Ibcp_Vrth)+Ibcp_expi*expi_Vrth; *Ibcp_Vrth=(*Ibcp_Vrth)+Ibcp_IBCNPatT*IBCNPatT_Vrth; *Ibcp_Vbcp=(*Ibcp_Vbcp)+Ibcp_expn*expn_Vbcp; *Ibcp_Vrth=(*Ibcp_Vrth)+Ibcp_expn*expn_Vrth; }else{ (*Ibcp)=0.0; *Ibcp_Vrth=0.0; *Ibcp_Vbcp=0.0; } if(p[9]>0.0){ (*Irs)=(*Vrs)/RSatT; *Irs_Vrs=1.0/RSatT; Irs_RSatT=-(*Vrs)/(RSatT*RSatT); *Irs_Vrth=Irs_RSatT*RSatT_Vrth; }else{ (*Irs)=0.0; *Irs_Vrs=0.0; *Irs_Vrth=0.0; } if(Ifi>0.0){ sgIf=1.0; }else{ sgIf=0.0; } rIf=Ifi*sgIf*IITF; rIf_Ifi=IITF*sgIf; rIf_Vrth=rIf_Ifi*Ifi_Vrth; rIf_Vbei=rIf_Ifi*Ifi_Vbei; mIf=rIf/(rIf+1.0); mIf_rIf=1.0/(rIf+1.0)-rIf/((rIf+1.0)*(rIf+1.0)); mIf_Vrth=mIf_rIf*rIf_Vrth; mIf_Vbei=mIf_rIf*rIf_Vbei; xvar1=(*Vbci)*IVTF/1.44; xvar1_Vbci=0.6944444*IVTF; xvar2=exp(xvar1); xvar2_xvar1=xvar2; xvar2_Vbci=xvar2_xvar1*xvar1_Vbci; tff=p[56]*(1.0+p[57]*q1)*(1.0+p[58]*xvar2*(slTF+mIf*mIf)*sgIf); tff_q1=p[57]*p[56]*(sgIf*(slTF+(mIf*mIf))*p[58]*xvar2+1.0); tff_xvar2=(q1*p[57]+1.0)*sgIf*(slTF+(mIf*mIf))*p[56]*p[58]; tff_mIf=2.0*mIf*(q1*p[57]+1.0)*sgIf*p[56]*p[58]*xvar2; tff_Vrth=tff_q1*q1_Vrth; tff_Vbei=tff_q1*q1_Vbei; tff_Vbci=tff_q1*q1_Vbci; tff_Vbci=tff_Vbci+tff_xvar2*xvar2_Vbci; tff_Vrth=tff_Vrth+tff_mIf*mIf_Vrth; tff_Vbei=tff_Vbei+tff_mIf*mIf_Vbei; (*Qbe)=CJEatT*qdbe*p[32]+tff*Ifi/qb; Qbe_CJEatT=qdbe*p[32]; Qbe_qdbe=CJEatT*p[32]; Qbe_tff=Ifi/qb; Qbe_Ifi=tff/qb; Qbe_qb=-Ifi*tff/(qb*qb); *Qbe_Vrth=Qbe_CJEatT*CJEatT_Vrth; *Qbe_Vrth=(*Qbe_Vrth)+Qbe_qdbe*qdbe_Vrth; *Qbe_Vbei=Qbe_qdbe*qdbe_Vbei; *Qbe_Vrth=(*Qbe_Vrth)+Qbe_tff*tff_Vrth; *Qbe_Vbei=(*Qbe_Vbei)+Qbe_tff*tff_Vbei; *Qbe_Vbci=Qbe_tff*tff_Vbci; *Qbe_Vrth=(*Qbe_Vrth)+Qbe_Ifi*Ifi_Vrth; *Qbe_Vbei=(*Qbe_Vbei)+Qbe_Ifi*Ifi_Vbei; *Qbe_Vrth=(*Qbe_Vrth)+Qbe_qb*qb_Vrth; *Qbe_Vbei=(*Qbe_Vbei)+Qbe_qb*qb_Vbei; *Qbe_Vbci=(*Qbe_Vbci)+Qbe_qb*qb_Vbci; (*Qbex)=CJEatT*qdbex*(1.0-p[32]); Qbex_CJEatT=qdbex*(1.0-p[32]); Qbex_qdbex=CJEatT*(1.0-p[32]); *Qbex_Vrth=Qbex_CJEatT*CJEatT_Vrth; *Qbex_Vrth=(*Qbex_Vrth)+Qbex_qdbex*qdbex_Vrth; *Qbex_Vbex=Qbex_qdbex*qdbex_Vbex; (*Qbc)=CJCatT*qdbc+p[61]*Iri+p[22]*Kbci; Qbc_CJCatT=qdbc; Qbc_qdbc=CJCatT; Qbc_Iri=p[61]; Qbc_Kbci=p[22]; *Qbc_Vrth=Qbc_CJCatT*CJCatT_Vrth; *Qbc_Vrth=(*Qbc_Vrth)+Qbc_qdbc*qdbc_Vrth; *Qbc_Vbci=Qbc_qdbc*qdbc_Vbci; *Qbc_Vrth=(*Qbc_Vrth)+Qbc_Iri*Iri_Vrth; *Qbc_Vbci=(*Qbc_Vbci)+Qbc_Iri*Iri_Vbci; *Qbc_Vrth=(*Qbc_Vrth)+Qbc_Kbci*Kbci_Vrth; *Qbc_Vbci=(*Qbc_Vbci)+Qbc_Kbci*Kbci_Vbci; (*Qbcx)=p[22]*Kbcx; Qbcx_Kbcx=p[22]; *Qbcx_Vrth=Qbcx_Kbcx*Kbcx_Vrth; *Qbcx_Vbcx=Qbcx_Kbcx*Kbcx_Vbcx; (*Qbep)=CJEPatT*qdbep+p[61]*Ifp; Qbep_CJEPatT=qdbep; Qbep_qdbep=CJEPatT; Qbep_Ifp=p[61]; *Qbep_Vrth=Qbep_CJEPatT*CJEPatT_Vrth; *Qbep_Vrth=(*Qbep_Vrth)+Qbep_qdbep*qdbep_Vrth; *Qbep_Vbep=Qbep_qdbep*qdbep_Vbep; *Qbep_Vrth=(*Qbep_Vrth)+Qbep_Ifp*Ifp_Vrth; *Qbep_Vbep=(*Qbep_Vbep)+Qbep_Ifp*Ifp_Vbep; *Qbep_Vbci=Qbep_Ifp*Ifp_Vbci; (*Qbcp)=CJCPatT*qdbcp+p[87]*(*Vbcp); Qbcp_CJCPatT=qdbcp; Qbcp_qdbcp=CJCPatT; *Qbcp_Vbcp=p[87]; *Qbcp_Vrth=Qbcp_CJCPatT*CJCPatT_Vrth; *Qbcp_Vrth=(*Qbcp_Vrth)+Qbcp_qdbcp*qdbcp_Vrth; *Qbcp_Vbcp=(*Qbcp_Vbcp)+Qbcp_qdbcp*qdbcp_Vbcp; (*Qbeo)=(*Vbe)*p[15]; *Qbeo_Vbe=p[15]; (*Qbco)=(*Vbc)*p[20]; *Qbco_Vbc=p[20]; (*Ith)=-((*Ibe)*(*Vbei)+(*Ibc)*(*Vbci)+((*Itzf)-(*Itzr))*(*Vcei)+(*Ibex)*(*Vbex)+(*Ibep)*(*Vbep)+(*Irs)*(*Vrs)+(*Ibcp)*(*Vbcp)+(*Iccp)*(*Vcep)+(*Ircx)*(*Vrcx)+(*Irci)*(*Vrci)+(*Irbx)*(*Vrbx)+(*Irbi)*(*Vrbi)+(*Ire)*(*Vre)+(*Irbp)*(*Vrbp)); Ith_Ibe=-(*Vbei); *Ith_Vbei=-(*Ibe); Ith_Ibc=-(*Vbci); *Ith_Vbci=-(*Ibc); Ith_Itzf=-(*Vcei); Ith_Itzr=(*Vcei); *Ith_Vcei=(*Itzr)-(*Itzf); Ith_Ibex=-(*Vbex); *Ith_Vbex=-(*Ibex); Ith_Ibep=-(*Vbep); *Ith_Vbep=-(*Ibep); Ith_Irs=-(*Vrs); *Ith_Vrs=-(*Irs); Ith_Ibcp=-(*Vbcp); *Ith_Vbcp=-(*Ibcp); Ith_Iccp=-(*Vcep); *Ith_Vcep=-(*Iccp); Ith_Ircx=-(*Vrcx); *Ith_Vrcx=-(*Ircx); Ith_Irci=-(*Vrci); *Ith_Vrci=-(*Irci); Ith_Irbx=-(*Vrbx); *Ith_Vrbx=-(*Irbx); Ith_Irbi=-(*Vrbi); *Ith_Vrbi=-(*Irbi); Ith_Ire=-(*Vre); *Ith_Vre=-(*Ire); Ith_Irbp=-(*Vrbp); *Ith_Vrbp=-(*Irbp); *Ith_Vrth=Ith_Ibe*(*Ibe_Vrth); *Ith_Vbei=(*Ith_Vbei)+Ith_Ibe*(*Ibe_Vbei); *Ith_Vrth=(*Ith_Vrth)+Ith_Ibc*(*Ibc_Vrth); *Ith_Vbci=(*Ith_Vbci)+Ith_Ibc*(*Ibc_Vbci); *Ith_Vbei=(*Ith_Vbei)+Ith_Ibc*(*Ibc_Vbei); *Ith_Vrth=(*Ith_Vrth)+Ith_Itzf*(*Itzf_Vrth); *Ith_Vbei=(*Ith_Vbei)+Ith_Itzf*(*Itzf_Vbei); *Ith_Vbci=(*Ith_Vbci)+Ith_Itzf*(*Itzf_Vbci); *Ith_Vrth=(*Ith_Vrth)+Ith_Itzr*(*Itzr_Vrth); *Ith_Vbci=(*Ith_Vbci)+Ith_Itzr*(*Itzr_Vbci); *Ith_Vbei=(*Ith_Vbei)+Ith_Itzr*(*Itzr_Vbei); *Ith_Vrth=(*Ith_Vrth)+Ith_Ibex*(*Ibex_Vrth); *Ith_Vbex=(*Ith_Vbex)+Ith_Ibex*(*Ibex_Vbex); *Ith_Vrth=(*Ith_Vrth)+Ith_Ibep*(*Ibep_Vrth); *Ith_Vbep=(*Ith_Vbep)+Ith_Ibep*(*Ibep_Vbep); *Ith_Vrs=(*Ith_Vrs)+Ith_Irs*(*Irs_Vrs); *Ith_Vrth=(*Ith_Vrth)+Ith_Irs*(*Irs_Vrth); *Ith_Vrth=(*Ith_Vrth)+Ith_Ibcp*(*Ibcp_Vrth); *Ith_Vbcp=(*Ith_Vbcp)+Ith_Ibcp*(*Ibcp_Vbcp); *Ith_Vrth=(*Ith_Vrth)+Ith_Iccp*(*Iccp_Vrth); *Ith_Vbep=(*Ith_Vbep)+Ith_Iccp*(*Iccp_Vbep); *Ith_Vbci=(*Ith_Vbci)+Ith_Iccp*(*Iccp_Vbci); *Ith_Vbcp=(*Ith_Vbcp)+Ith_Iccp*(*Iccp_Vbcp); *Ith_Vrcx=(*Ith_Vrcx)+Ith_Ircx*(*Ircx_Vrcx); *Ith_Vrth=(*Ith_Vrth)+Ith_Ircx*(*Ircx_Vrth); *Ith_Vrci=(*Ith_Vrci)+Ith_Irci*(*Irci_Vrci); *Ith_Vrth=(*Ith_Vrth)+Ith_Irci*(*Irci_Vrth); *Ith_Vbci=(*Ith_Vbci)+Ith_Irci*(*Irci_Vbci); *Ith_Vbcx=Ith_Irci*(*Irci_Vbcx); *Ith_Vrbx=(*Ith_Vrbx)+Ith_Irbx*(*Irbx_Vrbx); *Ith_Vrth=(*Ith_Vrth)+Ith_Irbx*(*Irbx_Vrth); *Ith_Vrbi=(*Ith_Vrbi)+Ith_Irbi*(*Irbi_Vrbi); *Ith_Vrth=(*Ith_Vrth)+Ith_Irbi*(*Irbi_Vrth); *Ith_Vbei=(*Ith_Vbei)+Ith_Irbi*(*Irbi_Vbei); *Ith_Vbci=(*Ith_Vbci)+Ith_Irbi*(*Irbi_Vbci); *Ith_Vre=(*Ith_Vre)+Ith_Ire*(*Ire_Vre); *Ith_Vrth=(*Ith_Vrth)+Ith_Ire*(*Ire_Vrth); *Ith_Vrbp=(*Ith_Vrbp)+Ith_Irbp*(*Irbp_Vrbp); *Ith_Vrth=(*Ith_Vrth)+Ith_Irbp*(*Irbp_Vrth); *Ith_Vbep=(*Ith_Vbep)+Ith_Irbp*(*Irbp_Vbep); *Ith_Vbci=(*Ith_Vbci)+Ith_Irbp*(*Irbp_Vbci); if(p[83]>0.0){ (*Irth)=(*Vrth)/p[83]; *Irth_Vrth=1.0/p[83]; }else{ (*Irth)=0.0; *Irth_Vrth=0.0; } (*Qcth)=(*Vrth)*p[84]; *Qcth_Vrth=p[84]; /* Scale outputs */ if((*SCALE)!=1.0){ *Ibe=(*SCALE)*(*Ibe); *Ibe_Vrth=(*SCALE)*(*Ibe_Vrth); *Ibe_Vbei=(*SCALE)*(*Ibe_Vbei); *Ibex=(*SCALE)*(*Ibex); *Ibex_Vrth=(*SCALE)*(*Ibex_Vrth); *Ibex_Vbex=(*SCALE)*(*Ibex_Vbex); *Itzf=(*SCALE)*(*Itzf); *Itzf_Vrth=(*SCALE)*(*Itzf_Vrth); *Itzf_Vbei=(*SCALE)*(*Itzf_Vbei); *Itzf_Vbci=(*SCALE)*(*Itzf_Vbci); *Itzr=(*SCALE)*(*Itzr); *Itzr_Vrth=(*SCALE)*(*Itzr_Vrth); *Itzr_Vbci=(*SCALE)*(*Itzr_Vbci); *Itzr_Vbei=(*SCALE)*(*Itzr_Vbei); *Ibc=(*SCALE)*(*Ibc); *Ibc_Vrth=(*SCALE)*(*Ibc_Vrth); *Ibc_Vbci=(*SCALE)*(*Ibc_Vbci); *Ibc_Vbei=(*SCALE)*(*Ibc_Vbei); *Ibep=(*SCALE)*(*Ibep); *Ibep_Vrth=(*SCALE)*(*Ibep_Vrth); *Ibep_Vbep=(*SCALE)*(*Ibep_Vbep); *Ircx=(*SCALE)*(*Ircx); *Ircx_Vrcx=(*SCALE)*(*Ircx_Vrcx); *Ircx_Vrth=(*SCALE)*(*Ircx_Vrth); *Irci=(*SCALE)*(*Irci); *Irci_Vrci=(*SCALE)*(*Irci_Vrci); *Irci_Vrth=(*SCALE)*(*Irci_Vrth); *Irci_Vbci=(*SCALE)*(*Irci_Vbci); *Irci_Vbcx=(*SCALE)*(*Irci_Vbcx); *Irbx=(*SCALE)*(*Irbx); *Irbx_Vrbx=(*SCALE)*(*Irbx_Vrbx); *Irbx_Vrth=(*SCALE)*(*Irbx_Vrth); *Irbi=(*SCALE)*(*Irbi); *Irbi_Vrbi=(*SCALE)*(*Irbi_Vrbi); *Irbi_Vrth=(*SCALE)*(*Irbi_Vrth); *Irbi_Vbei=(*SCALE)*(*Irbi_Vbei); *Irbi_Vbci=(*SCALE)*(*Irbi_Vbci); *Ire=(*SCALE)*(*Ire); *Ire_Vre=(*SCALE)*(*Ire_Vre); *Ire_Vrth=(*SCALE)*(*Ire_Vrth); *Irbp=(*SCALE)*(*Irbp); *Irbp_Vrbp=(*SCALE)*(*Irbp_Vrbp); *Irbp_Vrth=(*SCALE)*(*Irbp_Vrth); *Irbp_Vbep=(*SCALE)*(*Irbp_Vbep); *Irbp_Vbci=(*SCALE)*(*Irbp_Vbci); *Qbe=(*SCALE)*(*Qbe); *Qbe_Vrth=(*SCALE)*(*Qbe_Vrth); *Qbe_Vbei=(*SCALE)*(*Qbe_Vbei); *Qbe_Vbci=(*SCALE)*(*Qbe_Vbci); *Qbex=(*SCALE)*(*Qbex); *Qbex_Vrth=(*SCALE)*(*Qbex_Vrth); *Qbex_Vbex=(*SCALE)*(*Qbex_Vbex); *Qbc=(*SCALE)*(*Qbc); *Qbc_Vrth=(*SCALE)*(*Qbc_Vrth); *Qbc_Vbci=(*SCALE)*(*Qbc_Vbci); *Qbcx=(*SCALE)*(*Qbcx); *Qbcx_Vrth=(*SCALE)*(*Qbcx_Vrth); *Qbcx_Vbcx=(*SCALE)*(*Qbcx_Vbcx); *Qbep=(*SCALE)*(*Qbep); *Qbep_Vrth=(*SCALE)*(*Qbep_Vrth); *Qbep_Vbep=(*SCALE)*(*Qbep_Vbep); *Qbep_Vbci=(*SCALE)*(*Qbep_Vbci); *Qbeo=(*SCALE)*(*Qbeo); *Qbeo_Vbe=(*SCALE)*(*Qbeo_Vbe); *Qbco=(*SCALE)*(*Qbco); *Qbco_Vbc=(*SCALE)*(*Qbco_Vbc); *Ibcp=(*SCALE)*(*Ibcp); *Ibcp_Vrth=(*SCALE)*(*Ibcp_Vrth); *Ibcp_Vbcp=(*SCALE)*(*Ibcp_Vbcp); *Iccp=(*SCALE)*(*Iccp); *Iccp_Vrth=(*SCALE)*(*Iccp_Vrth); *Iccp_Vbep=(*SCALE)*(*Iccp_Vbep); *Iccp_Vbci=(*SCALE)*(*Iccp_Vbci); *Iccp_Vbcp=(*SCALE)*(*Iccp_Vbcp); *Irs=(*SCALE)*(*Irs); *Irs_Vrs=(*SCALE)*(*Irs_Vrs); *Irs_Vrth=(*SCALE)*(*Irs_Vrth); *Qbcp=(*SCALE)*(*Qbcp); *Qbcp_Vrth=(*SCALE)*(*Qbcp_Vrth); *Qbcp_Vbcp=(*SCALE)*(*Qbcp_Vbcp); *Irth=(*SCALE)*(*Irth); *Irth_Vrth=(*SCALE)*(*Irth_Vrth); *Ith=(*SCALE)*(*Ith); *Ith_Vrth=(*SCALE)*(*Ith_Vrth); *Ith_Vbei=(*SCALE)*(*Ith_Vbei); *Ith_Vbci=(*SCALE)*(*Ith_Vbci); *Ith_Vcei=(*SCALE)*(*Ith_Vcei); *Ith_Vbex=(*SCALE)*(*Ith_Vbex); *Ith_Vbep=(*SCALE)*(*Ith_Vbep); *Ith_Vrs=(*SCALE)*(*Ith_Vrs); *Ith_Vbcp=(*SCALE)*(*Ith_Vbcp); *Ith_Vcep=(*SCALE)*(*Ith_Vcep); *Ith_Vrcx=(*SCALE)*(*Ith_Vrcx); *Ith_Vrci=(*SCALE)*(*Ith_Vrci); *Ith_Vbcx=(*SCALE)*(*Ith_Vbcx); *Ith_Vrbx=(*SCALE)*(*Ith_Vrbx); *Ith_Vrbi=(*SCALE)*(*Ith_Vrbi); *Ith_Vre=(*SCALE)*(*Ith_Vre); *Ith_Vrbp=(*SCALE)*(*Ith_Vrbp); *Qcth=(*SCALE)*(*Qcth); *Qcth_Vrth=(*SCALE)*(*Qcth_Vrth); } return(0); } tmpk8ny_4pz/src/spicelib/devices/vbic/vbicitf.h0000644000175000017500000000047313546075722021711 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Model Author: 1995 Colin McAndrew Motorola Spice3 Implementation: 2003 Dietmar Warning DAnalyse GmbH **********/ #ifndef DEV_VBIC #define DEV_VBIC extern SPICEdev *get_vbic_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/vbic/vbicpzld.c0000644000175000017500000003465413546075722022103 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Model Author: 1995 Colin McAndrew Motorola Spice3 Implementation: 2003 Dietmar Warning DAnalyse GmbH **********/ /* * Function to load the COMPLEX circuit matrix using the * small signal parameters saved during a previous DC operating * point analysis. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vbicdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VBICpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { VBICinstance *here; VBICmodel *model = (VBICmodel*)inModel; double Ibe_Vbei,Ibex_Vbex ,Itzf_Vbei,Itzf_Vbci,Itzr_Vbci,Itzr_Vbei,Ibc_Vbci ,Ibc_Vbei,Ibep_Vbep,Ircx_Vrcx,Irci_Vrci ,Irci_Vbci,Irci_Vbcx,Irbx_Vrbx,Irbi_Vrbi,Irbi_Vbei ,Irbi_Vbci,Ire_Vre,Irbp_Vrbp,Irbp_Vbep,Irbp_Vbci ,Ibcp_Vbcp,Iccp_Vbep,Irs_Vrs,Iccp_Vbci,Iccp_Vbcp; double XQbe_Vbei, XQbe_Vbci, XQbex_Vbex, XQbc_Vbci, XQbcx_Vbcx, XQbep_Vbep, XQbep_Vbci, XQbcp_Vbcp; /* loop through all the models */ for( ; model != NULL; model = VBICnextModel(model)) { /* loop through all the instances of the model */ for( here = VBICinstances(model); here!= NULL; here = VBICnextInstance(here)) { Ibe_Vbei = *(ckt->CKTstate0 + here->VBICibe_Vbei); Ibex_Vbex = *(ckt->CKTstate0 + here->VBICibex_Vbex); Itzf_Vbei = *(ckt->CKTstate0 + here->VBICitzf_Vbei); Itzf_Vbci = *(ckt->CKTstate0 + here->VBICitzf_Vbci); Itzr_Vbci = *(ckt->CKTstate0 + here->VBICitzr_Vbci); Itzr_Vbei = *(ckt->CKTstate0 + here->VBICitzr_Vbei); Ibc_Vbci = *(ckt->CKTstate0 + here->VBICibc_Vbci); Ibc_Vbei = *(ckt->CKTstate0 + here->VBICibc_Vbei); Ibep_Vbep = *(ckt->CKTstate0 + here->VBICibep_Vbep); Irci_Vrci = *(ckt->CKTstate0 + here->VBICirci_Vrci); Irci_Vbci = *(ckt->CKTstate0 + here->VBICirci_Vbci); Irci_Vbcx = *(ckt->CKTstate0 + here->VBICirci_Vbcx); Irbi_Vrbi = *(ckt->CKTstate0 + here->VBICirbi_Vrbi); Irbi_Vbei = *(ckt->CKTstate0 + here->VBICirbi_Vbei); Irbi_Vbci = *(ckt->CKTstate0 + here->VBICirbi_Vbci); Irbp_Vrbp = *(ckt->CKTstate0 + here->VBICirbp_Vrbp); Irbp_Vbep = *(ckt->CKTstate0 + here->VBICirbp_Vbep); Irbp_Vbci = *(ckt->CKTstate0 + here->VBICirbp_Vbci); Ibcp_Vbcp = *(ckt->CKTstate0 + here->VBICibcp_Vbcp); Iccp_Vbep = *(ckt->CKTstate0 + here->VBICiccp_Vbep); Iccp_Vbci = *(ckt->CKTstate0 + here->VBICiccp_Vbci); Iccp_Vbcp = *(ckt->CKTstate0 + here->VBICiccp_Vbcp); Ircx_Vrcx = *(ckt->CKTstate0 + here->VBICircx_Vrcx); Irbx_Vrbx = *(ckt->CKTstate0 + here->VBICirbx_Vrbx); Irs_Vrs = *(ckt->CKTstate0 + here->VBICirs_Vrs); Ire_Vre = *(ckt->CKTstate0 + here->VBICire_Vre); /* c The real part */ /* c Stamp element: Ibe */ *(here->VBICbaseBIBaseBIPtr) += Ibe_Vbei; *(here->VBICbaseBIEmitEIPtr) += -Ibe_Vbei; *(here->VBICemitEIBaseBIPtr) += -Ibe_Vbei; *(here->VBICemitEIEmitEIPtr) += Ibe_Vbei; /* c Stamp element: Ibex */ *(here->VBICbaseBXBaseBXPtr) += Ibex_Vbex; *(here->VBICbaseBXEmitEIPtr) += -Ibex_Vbex; *(here->VBICemitEIBaseBXPtr) += -Ibex_Vbex; *(here->VBICemitEIEmitEIPtr) += Ibex_Vbex; /* c Stamp element: Itzf */ *(here->VBICcollCIBaseBIPtr) += Itzf_Vbei; *(here->VBICcollCIEmitEIPtr) += -Itzf_Vbei; *(here->VBICcollCIBaseBIPtr) += Itzf_Vbci; *(here->VBICcollCICollCIPtr) += -Itzf_Vbci; *(here->VBICemitEIBaseBIPtr) += -Itzf_Vbei; *(here->VBICemitEIEmitEIPtr) += Itzf_Vbei; *(here->VBICemitEIBaseBIPtr) += -Itzf_Vbci; *(here->VBICemitEICollCIPtr) += Itzf_Vbci; /* c Stamp element: Itzr */ *(here->VBICemitEIBaseBIPtr) += Itzr_Vbci; *(here->VBICemitEICollCIPtr) += -Itzr_Vbci; *(here->VBICemitEIBaseBIPtr) += Itzr_Vbei; *(here->VBICemitEIEmitEIPtr) += -Itzr_Vbei; *(here->VBICcollCIBaseBIPtr) += -Itzr_Vbci; *(here->VBICcollCICollCIPtr) += Itzr_Vbci; *(here->VBICcollCIBaseBIPtr) += -Itzr_Vbei; *(here->VBICcollCIEmitEIPtr) += Itzr_Vbei; /* c Stamp element: Ibc */ *(here->VBICbaseBIBaseBIPtr) += Ibc_Vbci; *(here->VBICbaseBICollCIPtr) += -Ibc_Vbci; *(here->VBICbaseBIBaseBIPtr) += Ibc_Vbei; *(here->VBICbaseBIEmitEIPtr) += -Ibc_Vbei; *(here->VBICcollCIBaseBIPtr) += -Ibc_Vbci; *(here->VBICcollCICollCIPtr) += Ibc_Vbci; *(here->VBICcollCIBaseBIPtr) += -Ibc_Vbei; *(here->VBICcollCIEmitEIPtr) += Ibc_Vbei; /* c Stamp element: Ibep */ *(here->VBICbaseBXBaseBXPtr) += Ibep_Vbep; *(here->VBICbaseBXBaseBPPtr) += -Ibep_Vbep; *(here->VBICbaseBPBaseBXPtr) += -Ibep_Vbep; *(here->VBICbaseBPBaseBPPtr) += Ibep_Vbep; /* c Stamp element: Ircx */ *(here->VBICcollCollPtr) += Ircx_Vrcx; *(here->VBICcollCXCollCXPtr) += Ircx_Vrcx; *(here->VBICcollCXCollPtr) += -Ircx_Vrcx; *(here->VBICcollCollCXPtr) += -Ircx_Vrcx; /* c Stamp element: Irci */ *(here->VBICcollCXCollCXPtr) += Irci_Vrci; *(here->VBICcollCXCollCIPtr) += -Irci_Vrci; *(here->VBICcollCXBaseBIPtr) += Irci_Vbci; *(here->VBICcollCXCollCIPtr) += -Irci_Vbci; *(here->VBICcollCXBaseBIPtr) += Irci_Vbcx; *(here->VBICcollCXCollCXPtr) += -Irci_Vbcx; *(here->VBICcollCICollCXPtr) += -Irci_Vrci; *(here->VBICcollCICollCIPtr) += Irci_Vrci; *(here->VBICcollCIBaseBIPtr) += -Irci_Vbci; *(here->VBICcollCICollCIPtr) += Irci_Vbci; *(here->VBICcollCIBaseBIPtr) += -Irci_Vbcx; *(here->VBICcollCICollCXPtr) += Irci_Vbcx; /* c Stamp element: Irbx */ *(here->VBICbaseBasePtr) += Irbx_Vrbx; *(here->VBICbaseBXBaseBXPtr) += Irbx_Vrbx; *(here->VBICbaseBXBasePtr) += -Irbx_Vrbx; *(here->VBICbaseBaseBXPtr) += -Irbx_Vrbx; /* c Stamp element: Irbi */ *(here->VBICbaseBXBaseBXPtr) += Irbi_Vrbi; *(here->VBICbaseBXBaseBIPtr) += -Irbi_Vrbi; *(here->VBICbaseBXBaseBIPtr) += Irbi_Vbei; *(here->VBICbaseBXEmitEIPtr) += -Irbi_Vbei; *(here->VBICbaseBXBaseBIPtr) += Irbi_Vbci; *(here->VBICbaseBXCollCIPtr) += -Irbi_Vbci; *(here->VBICbaseBIBaseBXPtr) += -Irbi_Vrbi; *(here->VBICbaseBIBaseBIPtr) += Irbi_Vrbi; *(here->VBICbaseBIBaseBIPtr) += -Irbi_Vbei; *(here->VBICbaseBIEmitEIPtr) += Irbi_Vbei; *(here->VBICbaseBIBaseBIPtr) += -Irbi_Vbci; *(here->VBICbaseBICollCIPtr) += Irbi_Vbci; /* c Stamp element: Ire */ *(here->VBICemitEmitPtr) += Ire_Vre; *(here->VBICemitEIEmitEIPtr) += Ire_Vre; *(here->VBICemitEIEmitPtr) += -Ire_Vre; *(here->VBICemitEmitEIPtr) += -Ire_Vre; /* c Stamp element: Irbp */ *(here->VBICbaseBPBaseBPPtr) += Irbp_Vrbp; *(here->VBICbaseBPCollCXPtr) += -Irbp_Vrbp; *(here->VBICbaseBPBaseBXPtr) += Irbp_Vbep; *(here->VBICbaseBPBaseBPPtr) += -Irbp_Vbep; *(here->VBICbaseBPBaseBIPtr) += Irbp_Vbci; *(here->VBICbaseBPCollCIPtr) += -Irbp_Vbci; *(here->VBICcollCXBaseBPPtr) += -Irbp_Vrbp; *(here->VBICcollCXCollCXPtr) += Irbp_Vrbp; *(here->VBICcollCXBaseBXPtr) += -Irbp_Vbep; *(here->VBICcollCXBaseBPPtr) += Irbp_Vbep; *(here->VBICcollCXBaseBIPtr) += -Irbp_Vbci; *(here->VBICcollCXCollCIPtr) += Irbp_Vbci; /* c Stamp element: Ibcp */ *(here->VBICsubsSISubsSIPtr) += Ibcp_Vbcp; *(here->VBICsubsSIBaseBPPtr) += -Ibcp_Vbcp; *(here->VBICbaseBPSubsSIPtr) += -Ibcp_Vbcp; *(here->VBICbaseBPBaseBPPtr) += Ibcp_Vbcp; /* c Stamp element: Iccp */ *(here->VBICbaseBXBaseBXPtr) += Iccp_Vbep; *(here->VBICbaseBXBaseBPPtr) += -Iccp_Vbep; *(here->VBICbaseBXBaseBIPtr) += Iccp_Vbci; *(here->VBICbaseBXCollCIPtr) += -Iccp_Vbci; *(here->VBICbaseBXSubsSIPtr) += Iccp_Vbcp; *(here->VBICbaseBXBaseBPPtr) += -Iccp_Vbcp; *(here->VBICsubsSIBaseBXPtr) += -Iccp_Vbep; *(here->VBICsubsSIBaseBPPtr) += Iccp_Vbep; *(here->VBICsubsSIBaseBIPtr) += -Iccp_Vbci; *(here->VBICsubsSICollCIPtr) += Iccp_Vbci; *(here->VBICsubsSISubsSIPtr) += -Iccp_Vbcp; *(here->VBICsubsSIBaseBPPtr) += Iccp_Vbcp; /* c Stamp element: Irs */ *(here->VBICsubsSubsPtr) += Irs_Vrs; *(here->VBICsubsSISubsSIPtr) += Irs_Vrs; *(here->VBICsubsSISubsPtr) += -Irs_Vrs; *(here->VBICsubsSubsSIPtr) += -Irs_Vrs; /* c The complex part */ XQbe_Vbei = *(ckt->CKTstate0 + here->VBICcqbe); XQbe_Vbci = *(ckt->CKTstate0 + here->VBICcqbeci); XQbex_Vbex = *(ckt->CKTstate0 + here->VBICcqbex); XQbc_Vbci = *(ckt->CKTstate0 + here->VBICcqbc); XQbcx_Vbcx = *(ckt->CKTstate0 + here->VBICcqbcx); XQbep_Vbep = *(ckt->CKTstate0 + here->VBICcqbep); XQbep_Vbci = *(ckt->CKTstate0 + here->VBICcqbepci); XQbcp_Vbcp = *(ckt->CKTstate0 + here->VBICcqbcp); /* c Stamp element: Qbe */ *(here->VBICbaseBIBaseBIPtr) += XQbe_Vbei * (s->real); *(here->VBICbaseBIBaseBIPtr + 1) += XQbe_Vbei * (s->imag); *(here->VBICbaseBIEmitEIPtr) += -XQbe_Vbei * (s->real); *(here->VBICbaseBIEmitEIPtr + 1) += -XQbe_Vbei * (s->imag); *(here->VBICbaseBIBaseBIPtr) += XQbe_Vbci * (s->real); *(here->VBICbaseBIBaseBIPtr + 1) += XQbe_Vbci * (s->imag); *(here->VBICbaseBICollCIPtr) += -XQbe_Vbci * (s->real); *(here->VBICbaseBICollCIPtr + 1) += -XQbe_Vbci * (s->imag); *(here->VBICemitEIBaseBIPtr) += -XQbe_Vbei * (s->real); *(here->VBICemitEIBaseBIPtr + 1) += -XQbe_Vbei * (s->imag); *(here->VBICemitEIEmitEIPtr) += XQbe_Vbei * (s->real); *(here->VBICemitEIEmitEIPtr + 1) += XQbe_Vbei * (s->imag); *(here->VBICemitEIBaseBIPtr) += -XQbe_Vbci * (s->real); *(here->VBICemitEIBaseBIPtr + 1) += -XQbe_Vbci * (s->imag); *(here->VBICemitEICollCIPtr) += XQbe_Vbci * (s->real); *(here->VBICemitEICollCIPtr + 1) += XQbe_Vbci * (s->imag); /* c Stamp element: Qbex */ *(here->VBICbaseBXBaseBXPtr) += XQbex_Vbex * (s->real); *(here->VBICbaseBXBaseBXPtr + 1) += XQbex_Vbex * (s->imag); *(here->VBICbaseBXEmitEIPtr) += -XQbex_Vbex * (s->real); *(here->VBICbaseBXEmitEIPtr + 1) += -XQbex_Vbex * (s->imag); *(here->VBICemitEIBaseBXPtr) += -XQbex_Vbex * (s->real); *(here->VBICemitEIBaseBXPtr + 1) += -XQbex_Vbex * (s->imag); *(here->VBICemitEIEmitEIPtr ) += XQbex_Vbex * (s->real); *(here->VBICemitEIEmitEIPtr + 1) += XQbex_Vbex * (s->imag); /* c Stamp element: Qbc */ *(here->VBICbaseBIBaseBIPtr) += XQbc_Vbci * (s->real); *(here->VBICbaseBIBaseBIPtr + 1) += XQbc_Vbci * (s->imag); *(here->VBICbaseBICollCIPtr) += -XQbc_Vbci * (s->real); *(here->VBICbaseBICollCIPtr + 1) += -XQbc_Vbci * (s->imag); *(here->VBICcollCIBaseBIPtr) += -XQbc_Vbci * (s->real); *(here->VBICcollCIBaseBIPtr + 1) += -XQbc_Vbci * (s->imag); *(here->VBICcollCICollCIPtr) += XQbc_Vbci * (s->real); *(here->VBICcollCICollCIPtr + 1) += XQbc_Vbci * (s->imag); /* c Stamp element: Qbcx */ *(here->VBICbaseBIBaseBIPtr) += XQbcx_Vbcx * (s->real); *(here->VBICbaseBIBaseBIPtr + 1) += XQbcx_Vbcx * (s->imag); *(here->VBICbaseBICollCXPtr) += -XQbcx_Vbcx * (s->real); *(here->VBICbaseBICollCXPtr + 1) += -XQbcx_Vbcx * (s->imag); *(here->VBICcollCXBaseBIPtr) += -XQbcx_Vbcx * (s->real); *(here->VBICcollCXBaseBIPtr + 1) += -XQbcx_Vbcx * (s->imag); *(here->VBICcollCXCollCXPtr) += XQbcx_Vbcx * (s->real); *(here->VBICcollCXCollCXPtr + 1) += XQbcx_Vbcx * (s->imag); /* c Stamp element: Qbep */ *(here->VBICbaseBXBaseBXPtr) += XQbep_Vbep * (s->real); *(here->VBICbaseBXBaseBXPtr + 1) += XQbep_Vbep * (s->imag); *(here->VBICbaseBXBaseBPPtr) += -XQbep_Vbep * (s->real); *(here->VBICbaseBXBaseBPPtr + 1) += -XQbep_Vbep * (s->imag); *(here->VBICbaseBXBaseBIPtr) += XQbep_Vbci * (s->real); *(here->VBICbaseBXBaseBIPtr + 1) += XQbep_Vbci * (s->imag); *(here->VBICbaseBXCollCIPtr) += -XQbep_Vbci * (s->real); *(here->VBICbaseBXCollCIPtr + 1) += -XQbep_Vbci * (s->imag); *(here->VBICbaseBPBaseBXPtr) += -XQbep_Vbep * (s->real); *(here->VBICbaseBPBaseBXPtr + 1) += -XQbep_Vbep * (s->imag); *(here->VBICbaseBPBaseBPPtr) += XQbep_Vbep * (s->real); *(here->VBICbaseBPBaseBPPtr + 1) += XQbep_Vbep * (s->imag); *(here->VBICbaseBPBaseBIPtr) += -XQbep_Vbci * (s->real); *(here->VBICbaseBPBaseBIPtr + 1) += -XQbep_Vbci * (s->imag); *(here->VBICbaseBPCollCIPtr) += XQbep_Vbci * (s->real); *(here->VBICbaseBPCollCIPtr + 1) += XQbep_Vbci * (s->imag); /* c Stamp element: Qbcp */ *(here->VBICsubsSISubsSIPtr) += XQbcp_Vbcp * (s->real); *(here->VBICsubsSISubsSIPtr + 1) += XQbcp_Vbcp * (s->imag); *(here->VBICsubsSIBaseBPPtr) += -XQbcp_Vbcp * (s->real); *(here->VBICsubsSIBaseBPPtr + 1) += -XQbcp_Vbcp * (s->imag); *(here->VBICbaseBPSubsSIPtr) += -XQbcp_Vbcp * (s->real); *(here->VBICbaseBPSubsSIPtr + 1) += -XQbcp_Vbcp * (s->imag); *(here->VBICbaseBPBaseBPPtr) += XQbcp_Vbcp * (s->real); *(here->VBICbaseBPBaseBPPtr + 1) += XQbcp_Vbcp * (s->imag); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vbic/vbicmpar.c0000644000175000017500000004317113546075722022063 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Model Author: 1995 Colin McAndrew Motorola Spice3 Implementation: 2003 Dietmar Warning DAnalyse GmbH **********/ /* * This routine sets model parameters for * VBICs in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "vbicdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int VBICmParam(int param, IFvalue *value, GENmodel *inModel) { VBICmodel *mods = (VBICmodel*)inModel; switch(param) { case VBIC_MOD_NPN: if(value->iValue) { mods->VBICtype = NPN; } break; case VBIC_MOD_PNP: if(value->iValue) { mods->VBICtype = PNP; } break; case VBIC_MOD_TNOM: mods->VBICtnom = value->rValue; mods->VBICtnomGiven = TRUE; break; case VBIC_MOD_RCX: mods->VBICextCollResist = value->rValue; if (mods->VBICextCollResist < 0.01) mods->VBICextCollResist = 0.01; mods->VBICextCollResistGiven = TRUE; break; case VBIC_MOD_RCI: mods->VBICintCollResist = value->rValue; if (mods->VBICintCollResist < 0.01) mods->VBICintCollResist = 0.01; mods->VBICintCollResistGiven = TRUE; break; case VBIC_MOD_VO: mods->VBICepiSatVoltage = value->rValue; mods->VBICepiSatVoltageGiven = TRUE; break; case VBIC_MOD_GAMM: mods->VBICepiDoping = value->rValue; mods->VBICepiDopingGiven = TRUE; break; case VBIC_MOD_HRCF: mods->VBIChighCurFac = value->rValue; mods->VBIChighCurFacGiven = TRUE; break; case VBIC_MOD_RBX: mods->VBICextBaseResist = value->rValue; if (mods->VBICextBaseResist < 0.01) mods->VBICextBaseResist = 0.01; mods->VBICextBaseResistGiven = TRUE; break; case VBIC_MOD_RBI: mods->VBICintBaseResist = value->rValue; if (mods->VBICintBaseResist < 0.01) mods->VBICintBaseResist = 0.01; mods->VBICintBaseResistGiven = TRUE; break; case VBIC_MOD_RE: mods->VBICemitterResist = value->rValue; if (mods->VBICemitterResist < 0.01) mods->VBICemitterResist = 0.01; mods->VBICemitterResistGiven = TRUE; break; case VBIC_MOD_RS: mods->VBICsubstrateResist = value->rValue; if (mods->VBICsubstrateResist < 0.01) mods->VBICsubstrateResist = 0.01; mods->VBICsubstrateResistGiven = TRUE; break; case VBIC_MOD_RBP: mods->VBICparBaseResist = value->rValue; if (mods->VBICparBaseResist < 0.01) mods->VBICparBaseResist = 0.01; mods->VBICparBaseResistGiven = TRUE; break; case VBIC_MOD_IS: mods->VBICsatCur = value->rValue; mods->VBICsatCurGiven = TRUE; break; case VBIC_MOD_NF: mods->VBICemissionCoeffF = value->rValue; mods->VBICemissionCoeffFGiven = TRUE; break; case VBIC_MOD_NR: mods->VBICemissionCoeffR = value->rValue; mods->VBICemissionCoeffRGiven = TRUE; break; case VBIC_MOD_FC: mods->VBICdeplCapLimitF = value->rValue; mods->VBICdeplCapLimitFGiven = TRUE; break; case VBIC_MOD_CBEO: mods->VBICextOverlapCapBE = value->rValue; mods->VBICextOverlapCapBEGiven=TRUE; break; case VBIC_MOD_CJE: mods->VBICdepletionCapBE = value->rValue; mods->VBICdepletionCapBEGiven = TRUE; break; case VBIC_MOD_PE: mods->VBICpotentialBE = value->rValue; mods->VBICpotentialBEGiven = TRUE; break; case VBIC_MOD_ME: mods->VBICjunctionExpBE = value->rValue; mods->VBICjunctionExpBEGiven = TRUE; break; case VBIC_MOD_AJE: mods->VBICsmoothCapBE = value->rValue; mods->VBICsmoothCapBEGiven = TRUE; break; case VBIC_MOD_CBCO: mods->VBICextOverlapCapBC = value->rValue; mods->VBICextOverlapCapBCGiven=TRUE; break; case VBIC_MOD_CJC: mods->VBICdepletionCapBC = value->rValue; mods->VBICdepletionCapBCGiven = TRUE; break; case VBIC_MOD_QCO: mods->VBICepiCharge = value->rValue; mods->VBICepiChargeGiven = TRUE; break; case VBIC_MOD_CJEP: mods->VBICextCapBC = value->rValue; mods->VBICextCapBCGiven = TRUE; break; case VBIC_MOD_PC: mods->VBICpotentialBC = value->rValue; mods->VBICpotentialBCGiven = TRUE; break; case VBIC_MOD_MC: mods->VBICjunctionExpBC = value->rValue; mods->VBICjunctionExpBCGiven = TRUE; break; case VBIC_MOD_AJC: mods->VBICsmoothCapBC = value->rValue; mods->VBICsmoothCapBCGiven = TRUE; break; case VBIC_MOD_CJCP: mods->VBICextCapSC = value->rValue; mods->VBICextCapSCGiven = TRUE; break; case VBIC_MOD_PS: mods->VBICpotentialSC = value->rValue; mods->VBICpotentialSCGiven = TRUE; break; case VBIC_MOD_MS: mods->VBICjunctionExpSC = value->rValue; mods->VBICjunctionExpSCGiven = TRUE; break; case VBIC_MOD_AJS: mods->VBICsmoothCapSC = value->rValue; mods->VBICsmoothCapSCGiven = TRUE; break; case VBIC_MOD_IBEI: mods->VBICidealSatCurBE = value->rValue; mods->VBICidealSatCurBEGiven = TRUE; break; case VBIC_MOD_WBE: mods->VBICportionIBEI = value->rValue; mods->VBICportionIBEIGiven = TRUE; break; case VBIC_MOD_NEI: mods->VBICidealEmissCoeffBE = value->rValue; mods->VBICidealEmissCoeffBEGiven = TRUE; break; case VBIC_MOD_IBEN: mods->VBICnidealSatCurBE = value->rValue; mods->VBICnidealSatCurBEGiven = TRUE; break; case VBIC_MOD_NEN: mods->VBICnidealEmissCoeffBE = value->rValue; mods->VBICnidealEmissCoeffBEGiven = TRUE; break; case VBIC_MOD_IBCI: mods->VBICidealSatCurBC = value->rValue; mods->VBICidealSatCurBCGiven = TRUE; break; case VBIC_MOD_NCI: mods->VBICidealEmissCoeffBC = value->rValue; mods->VBICidealEmissCoeffBCGiven = TRUE; break; case VBIC_MOD_IBCN: mods->VBICnidealSatCurBC = value->rValue; mods->VBICnidealSatCurBCGiven = TRUE; break; case VBIC_MOD_NCN: mods->VBICnidealEmissCoeffBC = value->rValue; mods->VBICnidealEmissCoeffBCGiven = TRUE; break; case VBIC_MOD_AVC1: mods->VBICavalanchePar1BC = value->rValue; mods->VBICavalanchePar1BCGiven = TRUE; break; case VBIC_MOD_AVC2: mods->VBICavalanchePar2BC = value->rValue; mods->VBICavalanchePar2BCGiven = TRUE; break; case VBIC_MOD_ISP: mods->VBICparasitSatCur = value->rValue; mods->VBICparasitSatCurGiven = TRUE; break; case VBIC_MOD_WSP: mods->VBICportionICCP = value->rValue; mods->VBICportionICCPGiven = TRUE; break; case VBIC_MOD_NFP: mods->VBICparasitFwdEmissCoeff = value->rValue; mods->VBICparasitFwdEmissCoeffGiven = TRUE; break; case VBIC_MOD_IBEIP: mods->VBICidealParasitSatCurBE = value->rValue; mods->VBICidealParasitSatCurBEGiven = TRUE; break; case VBIC_MOD_IBENP: mods->VBICnidealParasitSatCurBE = value->rValue; mods->VBICnidealParasitSatCurBEGiven = TRUE; break; case VBIC_MOD_IBCIP: mods->VBICidealParasitSatCurBC = value->rValue; mods->VBICidealParasitSatCurBCGiven = TRUE; break; case VBIC_MOD_NCIP: mods->VBICidealParasitEmissCoeffBC = value->rValue; mods->VBICidealParasitEmissCoeffBCGiven = TRUE; break; case VBIC_MOD_IBCNP: mods->VBICnidealParasitSatCurBC = value->rValue; mods->VBICnidealParasitSatCurBCGiven = TRUE; break; case VBIC_MOD_NCNP: mods->VBICnidealParasitEmissCoeffBC = value->rValue; mods->VBICnidealParasitEmissCoeffBCGiven = TRUE; break; case VBIC_MOD_VEF: mods->VBICearlyVoltF = value->rValue; mods->VBICearlyVoltFGiven = TRUE; break; case VBIC_MOD_VER: mods->VBICearlyVoltR = value->rValue; mods->VBICearlyVoltRGiven = TRUE; break; case VBIC_MOD_IKF: mods->VBICrollOffF = value->rValue; mods->VBICrollOffFGiven = TRUE; break; case VBIC_MOD_IKR: mods->VBICrollOffR = value->rValue; mods->VBICrollOffRGiven = TRUE; break; case VBIC_MOD_IKP: mods->VBICparRollOff = value->rValue; mods->VBICparRollOffGiven = TRUE; break; case VBIC_MOD_TF: mods->VBICtransitTimeF = value->rValue; mods->VBICtransitTimeFGiven = TRUE; break; case VBIC_MOD_QTF: mods->VBICvarTransitTimeF = value->rValue; mods->VBICvarTransitTimeFGiven = TRUE; break; case VBIC_MOD_XTF: mods->VBICtransitTimeBiasCoeffF = value->rValue; mods->VBICtransitTimeBiasCoeffFGiven = TRUE; break; case VBIC_MOD_VTF: mods->VBICtransitTimeFVBC = value->rValue; mods->VBICtransitTimeFVBCGiven = TRUE; break; case VBIC_MOD_ITF: mods->VBICtransitTimeHighCurrentF = value->rValue; mods->VBICtransitTimeHighCurrentFGiven = TRUE; break; case VBIC_MOD_TR: mods->VBICtransitTimeR = value->rValue; mods->VBICtransitTimeRGiven = TRUE; break; case VBIC_MOD_TD: mods->VBICdelayTimeF = value->rValue; mods->VBICdelayTimeFGiven = TRUE; break; case VBIC_MOD_KFN: mods->VBICfNcoef = value->rValue; mods->VBICfNcoefGiven = TRUE; break; case VBIC_MOD_AFN: mods->VBICfNexpA = value->rValue; mods->VBICfNexpAGiven = TRUE; break; case VBIC_MOD_BFN: mods->VBICfNexpB = value->rValue; mods->VBICfNexpBGiven = TRUE; break; case VBIC_MOD_XRE: mods->VBICtempExpRE = value->rValue; mods->VBICtempExpREGiven = TRUE; break; case VBIC_MOD_XRB: mods->VBICtempExpRB = value->rValue; mods->VBICtempExpRBGiven = TRUE; break; case VBIC_MOD_XRBI: mods->VBICtempExpRBI = value->rValue; mods->VBICtempExpRBIGiven = TRUE; break; case VBIC_MOD_XRC: mods->VBICtempExpRC = value->rValue; mods->VBICtempExpRCGiven = TRUE; break; case VBIC_MOD_XRCI: mods->VBICtempExpRCI = value->rValue; mods->VBICtempExpRCIGiven = TRUE; break; case VBIC_MOD_XRS: mods->VBICtempExpRS = value->rValue; mods->VBICtempExpRSGiven = TRUE; break; case VBIC_MOD_XVO: mods->VBICtempExpVO = value->rValue; mods->VBICtempExpVOGiven = TRUE; break; case VBIC_MOD_EA: mods->VBICactivEnergyEA = value->rValue; mods->VBICactivEnergyEAGiven = TRUE; break; case VBIC_MOD_EAIE: mods->VBICactivEnergyEAIE = value->rValue; mods->VBICactivEnergyEAIEGiven = TRUE; break; case VBIC_MOD_EAIC: mods->VBICactivEnergyEAIC = value->rValue; mods->VBICactivEnergyEAICGiven = TRUE; break; case VBIC_MOD_EAIS: mods->VBICactivEnergyEAIS = value->rValue; mods->VBICactivEnergyEAISGiven = TRUE; break; case VBIC_MOD_EANE: mods->VBICactivEnergyEANE = value->rValue; mods->VBICactivEnergyEANEGiven = TRUE; break; case VBIC_MOD_EANC: mods->VBICactivEnergyEANC = value->rValue; mods->VBICactivEnergyEANCGiven = TRUE; break; case VBIC_MOD_EANS: mods->VBICactivEnergyEANS = value->rValue; mods->VBICactivEnergyEANSGiven = TRUE; break; case VBIC_MOD_XIS: mods->VBICtempExpIS = value->rValue; mods->VBICtempExpISGiven = TRUE; break; case VBIC_MOD_XII: mods->VBICtempExpII = value->rValue; mods->VBICtempExpIIGiven = TRUE; break; case VBIC_MOD_XIN: mods->VBICtempExpIN = value->rValue; mods->VBICtempExpINGiven = TRUE; break; case VBIC_MOD_TNF: mods->VBICtempExpNF = value->rValue; mods->VBICtempExpNFGiven = TRUE; break; case VBIC_MOD_TAVC: mods->VBICtempExpAVC = value->rValue; mods->VBICtempExpAVCGiven = TRUE; break; case VBIC_MOD_RTH: mods->VBICthermalResist = value->rValue; mods->VBICthermalResistGiven = TRUE; break; case VBIC_MOD_CTH: mods->VBICthermalCapacitance = value->rValue; mods->VBICthermalCapacitanceGiven = TRUE; break; case VBIC_MOD_VRT: mods->VBICpunchThroughVoltageBC = value->rValue; mods->VBICpunchThroughVoltageBCGiven = TRUE; break; case VBIC_MOD_ART: mods->VBICdeplCapCoeff1 = value->rValue; mods->VBICdeplCapCoeff1Given = TRUE; break; case VBIC_MOD_CCSO: mods->VBICfixedCapacitanceCS = value->rValue; mods->VBICfixedCapacitanceCSGiven = TRUE; break; case VBIC_MOD_QBM: mods->VBICsgpQBselector = value->rValue; mods->VBICsgpQBselectorGiven = TRUE; break; case VBIC_MOD_NKF: mods->VBIChighCurrentBetaRolloff = value->rValue; mods->VBIChighCurrentBetaRolloffGiven = TRUE; break; case VBIC_MOD_XIKF: mods->VBICtempExpIKF = value->rValue; mods->VBICtempExpIKFGiven = TRUE; break; case VBIC_MOD_XRCX: mods->VBICtempExpRCX = value->rValue; mods->VBICtempExpRCXGiven = TRUE; break; case VBIC_MOD_XRBX: mods->VBICtempExpRBX = value->rValue; mods->VBICtempExpRBXGiven = TRUE; break; case VBIC_MOD_XRBP: mods->VBICtempExpRBP = value->rValue; mods->VBICtempExpRBPGiven = TRUE; break; case VBIC_MOD_ISRR: mods->VBICsepISRR = value->rValue; mods->VBICsepISRRGiven = TRUE; break; case VBIC_MOD_XISR: mods->VBICtempExpXISR = value->rValue; mods->VBICtempExpXISRGiven = TRUE; break; case VBIC_MOD_DEAR: mods->VBICdear = value->rValue; mods->VBICdearGiven = TRUE; break; case VBIC_MOD_EAP: mods->VBICeap = value->rValue; mods->VBICeapGiven = TRUE; break; case VBIC_MOD_VBBE: mods->VBICvbbe = value->rValue; mods->VBICvbbeGiven = TRUE; break; case VBIC_MOD_NBBE: mods->VBICnbbe = value->rValue; mods->VBICnbbeGiven = TRUE; break; case VBIC_MOD_IBBE: mods->VBICibbe = value->rValue; mods->VBICibbeGiven = TRUE; break; case VBIC_MOD_TVBBE1: mods->VBICtvbbe1 = value->rValue; mods->VBICtvbbe1Given = TRUE; break; case VBIC_MOD_TVBBE2: mods->VBICtvbbe2 = value->rValue; mods->VBICtvbbe2Given = TRUE; break; case VBIC_MOD_TNBBE: mods->VBICtnbbe = value->rValue; mods->VBICtnbbeGiven = TRUE; break; case VBIC_MOD_EBBE: mods->VBICebbe = value->rValue; mods->VBICebbeGiven = TRUE; break; case VBIC_MOD_DTEMP: mods->VBIClocTempDiff = value->rValue; mods->VBIClocTempDiffGiven = TRUE; break; case VBIC_MOD_VERS: mods->VBICrevVersion = value->rValue; mods->VBICrevVersionGiven = TRUE; break; case VBIC_MOD_VREF: mods->VBICrefVersion = value->rValue; mods->VBICrefVersionGiven = TRUE; break; case VBIC_MOD_VBE_MAX: mods->VBICvbeMax = value->rValue; mods->VBICvbeMaxGiven = TRUE; break; case VBIC_MOD_VBC_MAX: mods->VBICvbcMax = value->rValue; mods->VBICvbcMaxGiven = TRUE; break; case VBIC_MOD_VCE_MAX: mods->VBICvceMax = value->rValue; mods->VBICvceMaxGiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/vbic/vbicinit.c0000644000175000017500000000323213546075722022061 0ustar carstencarsten/* * vbicinit.c */ #include "ngspice/config.h" #include "ngspice/devdefs.h" #include "vbicitf.h" #include "vbicext.h" #include "vbicinit.h" SPICEdev VBICinfo = { .DEVpublic = { .name = "VBIC", .description = "Vertical Bipolar Inter-Company Model", .terms = &VBICnSize, .numNames = &VBICnSize, .termNames = VBICnames, .numInstanceParms = &VBICpTSize, .instanceParms = VBICpTable, .numModelParms = &VBICmPTSize, .modelParms = VBICmPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = VBICparam, .DEVmodParam = VBICmParam, .DEVload = VBICload, .DEVsetup = VBICsetup, .DEVunsetup = VBICunsetup, .DEVpzSetup = VBICsetup, .DEVtemperature = VBICtemp, .DEVtrunc = VBICtrunc, .DEVfindBranch = NULL, .DEVacLoad = VBICacLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = VBICgetic, .DEVask = VBICask, .DEVmodAsk = VBICmAsk, .DEVpzLoad = VBICpzLoad, .DEVconvTest = VBICconvTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = VBICnoise, .DEVsoaCheck = VBICsoaCheck, .DEVinstSize = &VBICiSize, .DEVmodSize = &VBICmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_vbic_info(void) { return &VBICinfo; } tmpk8ny_4pz/src/spicelib/devices/vbic/vbicsetup.c0000644000175000017500000005645313546075722022273 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Model Author: 1995 Colin McAndrew Motorola Spice3 Implementation: 2003 Dietmar Warning DAnalyse GmbH **********/ /* * This routine should only be called when circuit topology * changes, since its computations do not depend on most * device or model parameters, only on topology (as * affected by emitter, collector, and base resistances) */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "vbicdefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/ifsim.h" #include "ngspice/suffix.h" int VBICsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* load the VBIC structure with those pointers needed later * for fast matrix loading */ { VBICmodel *model = (VBICmodel*)inModel; VBICinstance *here; int error; CKTnode *tmp; /* loop through all the transistor models */ for( ; model != NULL; model = VBICnextModel(model)) { if(model->VBICtype != NPN && model->VBICtype != PNP) { model->VBICtype = NPN; } if(!model->VBICtnomGiven) { model->VBICtnom = 27.0; } if(!model->VBICextCollResistGiven) { model->VBICextCollResist = 0.0; } if(!model->VBICintCollResistGiven) { model->VBICintCollResist = 0.1; } if(!model->VBICepiSatVoltageGiven) { model->VBICepiSatVoltage = 0.0; } if(!model->VBICepiDopingGiven) { model->VBICepiDoping = 0.0; } if(!model->VBIChighCurFacGiven) { model->VBIChighCurFac = 1.0; } if(!model->VBICextBaseResistGiven) { model->VBICextBaseResist = 0.0; } if(!model->VBICintBaseResistGiven) { model->VBICintBaseResist = 0.1; } if(!model->VBICemitterResistGiven) { model->VBICemitterResist = 0.0; } if(!model->VBICsubstrateResistGiven) { model->VBICsubstrateResist = 0.0; } if(!model->VBICparBaseResistGiven) { model->VBICparBaseResist = 0.1; } if(!model->VBICsatCurGiven) { model->VBICsatCur = 1e-16; } if(!model->VBICemissionCoeffFGiven) { model->VBICemissionCoeffF = 1.0; } if(!model->VBICemissionCoeffRGiven) { model->VBICemissionCoeffR = 1.0; } if(!model->VBICdeplCapLimitFGiven) { model->VBICdeplCapLimitF = 0.9; } if(!model->VBICextOverlapCapBEGiven) { model->VBICextOverlapCapBE = 0.0; } if(!model->VBICdepletionCapBEGiven) { model->VBICdepletionCapBE = 0.0; } if(!model->VBICpotentialBEGiven) { model->VBICpotentialBE = 0.75; } if(!model->VBICjunctionExpBEGiven) { model->VBICjunctionExpBE = 0.33; } if(!model->VBICsmoothCapBEGiven) { model->VBICsmoothCapBE = -0.5; } if(!model->VBICextOverlapCapBCGiven) { model->VBICextOverlapCapBC = 0.0; } if(!model->VBICdepletionCapBCGiven) { model->VBICdepletionCapBC = 0.0; } if(!model->VBICepiChargeGiven) { model->VBICepiCharge = 0.0; } if(!model->VBICextCapBCGiven) { model->VBICextCapBC = 0.0; } if(!model->VBICpotentialBCGiven) { model->VBICpotentialBC = 0.75; } if(!model->VBICjunctionExpBCGiven) { model->VBICjunctionExpBC = 0.33; } if(!model->VBICsmoothCapBCGiven) { model->VBICsmoothCapBC = -0.5; } if(!model->VBICextCapSCGiven) { model->VBICextCapSC = 0.0; } if(!model->VBICpotentialSCGiven) { model->VBICpotentialSC = 0.75; } if(!model->VBICjunctionExpSCGiven) { model->VBICjunctionExpSC = 0.33; } if(!model->VBICsmoothCapSCGiven) { model->VBICsmoothCapSC = -0.5; } if(!model->VBICidealSatCurBEGiven) { model->VBICidealSatCurBE = 1e-18; } if(!model->VBICportionIBEIGiven) { model->VBICportionIBEI = 1.0; } if(!model->VBICidealEmissCoeffBEGiven) { model->VBICidealEmissCoeffBE = 1.0; } if(!model->VBICnidealSatCurBEGiven) { model->VBICnidealSatCurBE = 0.0; } if(!model->VBICnidealEmissCoeffBEGiven) { model->VBICnidealEmissCoeffBE = 2.0; } if(!model->VBICidealSatCurBCGiven) { model->VBICidealSatCurBC = 1e-16; } if(!model->VBICidealEmissCoeffBCGiven) { model->VBICidealEmissCoeffBC = 1.0; } if(!model->VBICnidealSatCurBCGiven) { model->VBICnidealSatCurBC = 0.0; } if(!model->VBICnidealEmissCoeffBCGiven) { model->VBICnidealEmissCoeffBC = 2.0; } if(!model->VBICavalanchePar1BCGiven) { model->VBICavalanchePar1BC = 0.0; } if(!model->VBICavalanchePar2BCGiven) { model->VBICavalanchePar2BC = 0.0; } if(!model->VBICparasitSatCurGiven) { model->VBICparasitSatCur = 0.0; } if(!model->VBICportionICCPGiven) { model->VBICportionICCP = 1.0; } if(!model->VBICparasitFwdEmissCoeffGiven) { model->VBICparasitFwdEmissCoeff = 1.0; } if(!model->VBICidealParasitSatCurBEGiven) { model->VBICidealParasitSatCurBE = 0.0; } if(!model->VBICnidealParasitSatCurBEGiven) { model->VBICnidealParasitSatCurBE = 0.0; } if(!model->VBICidealParasitSatCurBCGiven) { model->VBICidealParasitSatCurBC = 0.0; } if(!model->VBICidealParasitEmissCoeffBCGiven) { model->VBICidealParasitEmissCoeffBC = 1.0; } if(!model->VBICnidealParasitSatCurBCGiven) { model->VBICnidealParasitSatCurBC = 0.0; } if(!model->VBICnidealParasitEmissCoeffBCGiven) { model->VBICnidealParasitEmissCoeffBC = 2.0; } if(!model->VBICearlyVoltFGiven) { model->VBICearlyVoltF = 0.0; } if(!model->VBICearlyVoltRGiven) { model->VBICearlyVoltR = 0.0; } if(!model->VBICrollOffFGiven) { model->VBICrollOffF = 0.0; } if(!model->VBICrollOffRGiven) { model->VBICrollOffR = 0.0; } if(!model->VBICparRollOffGiven) { model->VBICparRollOff = 0.0; } if(!model->VBICtransitTimeFGiven) { model->VBICtransitTimeF = 0.0; } if(!model->VBICvarTransitTimeFGiven) { model->VBICvarTransitTimeF = 0.0; } if(!model->VBICtransitTimeBiasCoeffFGiven) { model->VBICtransitTimeBiasCoeffF = 0.0; } if(!model->VBICtransitTimeFVBCGiven) { model->VBICtransitTimeFVBC = 0.0; } if(!model->VBICtransitTimeHighCurrentFGiven) { model->VBICtransitTimeHighCurrentF = 0.0; } if(!model->VBICtransitTimeRGiven) { model->VBICtransitTimeR = 0.0; } if(!model->VBICdelayTimeFGiven) { model->VBICdelayTimeF = 0.0; } if(!model->VBICfNcoefGiven) { model->VBICfNcoef = 0.0; } if(!model->VBICfNexpAGiven) { model->VBICfNexpA = 1.0; } if(!model->VBICfNexpBGiven) { model->VBICfNexpB = 1.0; } if(!model->VBICtempExpREGiven) { model->VBICtempExpRE = 0.0; } if(!model->VBICtempExpRBGiven) { model->VBICtempExpRB = 0.0; } if(!model->VBICtempExpRBIGiven) { model->VBICtempExpRBI = 0.0; } if(!model->VBICtempExpRCGiven) { model->VBICtempExpRC = 0.0; } if(!model->VBICtempExpRCIGiven) { model->VBICtempExpRCI = 0.0; } if(!model->VBICtempExpRSGiven) { model->VBICtempExpRS = 0.0; } if(!model->VBICtempExpVOGiven) { model->VBICtempExpVO = 0.0; } if(!model->VBICactivEnergyEAGiven) { model->VBICactivEnergyEA = 1.12; } if(!model->VBICactivEnergyEAIEGiven) { model->VBICactivEnergyEAIE = 1.12; } if(!model->VBICactivEnergyEAICGiven) { model->VBICactivEnergyEAIC = 1.12; } if(!model->VBICactivEnergyEAISGiven) { model->VBICactivEnergyEAIS = 1.12; } if(!model->VBICactivEnergyEANEGiven) { model->VBICactivEnergyEANE = 1.12; } if(!model->VBICactivEnergyEANCGiven) { model->VBICactivEnergyEANC = 1.12; } if(!model->VBICactivEnergyEANSGiven) { model->VBICactivEnergyEANS = 1.12; } if(!model->VBICtempExpISGiven) { model->VBICtempExpIS = 3.0; } if(!model->VBICtempExpIIGiven) { model->VBICtempExpII = 3.0; } if(!model->VBICtempExpINGiven) { model->VBICtempExpIN = 3.0; } if(!model->VBICtempExpNFGiven) { model->VBICtempExpNF = 0.0; } if(!model->VBICtempExpAVCGiven) { model->VBICtempExpAVC = 0.0; } if(!model->VBICthermalResistGiven) { model->VBICthermalResist = 0.0; } if(!model->VBICthermalCapacitanceGiven) { model->VBICthermalCapacitance = 0.0; } if(!model->VBICpunchThroughVoltageBCGiven) { model->VBICpunchThroughVoltageBC = 0.0; } if(!model->VBICdeplCapCoeff1Given) { model->VBICdeplCapCoeff1 = 0.1; } if(!model->VBICfixedCapacitanceCSGiven) { model->VBICfixedCapacitanceCS = 0.0; } if(!model->VBICsgpQBselectorGiven) { model->VBICsgpQBselector = 0.0; } if(!model->VBIChighCurrentBetaRolloffGiven) { model->VBIChighCurrentBetaRolloff = 0.5; } if(!model->VBICtempExpIKFGiven) { model->VBICtempExpIKF = 0.0; } if(!model->VBICtempExpRCXGiven) { model->VBICtempExpRCX = 0.0; } if(!model->VBICtempExpRBXGiven) { model->VBICtempExpRBX = 0.0; } if(!model->VBICtempExpRBPGiven) { model->VBICtempExpRBP = 0.0; } if(!model->VBICsepISRRGiven) { model->VBICsepISRR = 1.0; } if(!model->VBICtempExpXISRGiven) { model->VBICtempExpXISR = 0.0; } if(!model->VBICdearGiven) { model->VBICdear = 0.0; } if(!model->VBICeapGiven) { model->VBICeap = 1.12; } if(!model->VBICvbbeGiven) { model->VBICvbbe = 0.0; } if(!model->VBICnbbeGiven) { model->VBICnbbe = 1.0; } if(!model->VBICibbeGiven) { model->VBICibbe = 1e-06; } if(!model->VBICtvbbe1Given) { model->VBICtvbbe1 = 0.0; } if(!model->VBICtvbbe2Given) { model->VBICtvbbe2 = 0.0; } if(!model->VBICtnbbeGiven) { model->VBICtnbbe = 0.0; } if(!model->VBICebbeGiven) { model->VBICebbe = 0.0; } if(!model->VBIClocTempDiffGiven) { model->VBIClocTempDiff = 0.0; } if(!model->VBICrevVersionGiven) { model->VBICrevVersion = 1.2; } if(!model->VBICrefVersionGiven) { model->VBICrefVersion = 0.0; } if(model->VBICtempExpRBGiven && !model->VBICtempExpRBIGiven) { model->VBICtempExpRBI = model->VBICtempExpRB; } if(model->VBICtempExpRBGiven && !model->VBICtempExpRBXGiven) { model->VBICtempExpRBX = model->VBICtempExpRB; } if(model->VBICtempExpRCGiven && !model->VBICtempExpRCIGiven) { model->VBICtempExpRCI = model->VBICtempExpRC; } if(model->VBICtempExpRCGiven && !model->VBICtempExpRCXGiven) { model->VBICtempExpRCX = model->VBICtempExpRC; } if(!model->VBICvbeMaxGiven) { model->VBICvbeMax = 1e99; } if(!model->VBICvbcMaxGiven) { model->VBICvbcMax = 1e99; } if(!model->VBICvceMaxGiven) { model->VBICvceMax = 1e99; } /* loop through all the instances of the model */ for (here = VBICinstances(model); here != NULL ; here=VBICnextInstance(here)) { CKTnode *tmpNode; IFuid tmpName; if(!here->VBICareaGiven) { here->VBICarea = 1.0; } if(!here->VBICmGiven) { here->VBICm = 1.0; } if(!here->VBICdtempGiven) { here->VBICdtemp = 0.0; } here->VBICstate = *states; *states += VBICnumStates; if(model->VBICextCollResist == 0) { here->VBICcollCXNode = here->VBICcollNode; } else if(here->VBICcollCXNode == 0) { error = CKTmkVolt(ckt,&tmp,here->VBICname,"collector"); if(error) return(error); here->VBICcollCXNode = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } if(model->VBICextBaseResist == 0) { here->VBICbaseBXNode = here->VBICbaseNode; } else if(here->VBICbaseBXNode == 0){ error = CKTmkVolt(ckt,&tmp,here->VBICname, "base"); if(error) return(error); here->VBICbaseBXNode = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,2,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } if(model->VBICemitterResist == 0) { here->VBICemitEINode = here->VBICemitNode; } else if(here->VBICemitEINode == 0) { error = CKTmkVolt(ckt,&tmp,here->VBICname, "emitter"); if(error) return(error); here->VBICemitEINode = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } if(model->VBICsubstrateResist == 0) { here->VBICsubsSINode = here->VBICsubsNode; } else if(here->VBICsubsSINode == 0) { error = CKTmkVolt(ckt,&tmp,here->VBICname, "substrate"); if(error) return(error); here->VBICsubsSINode = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,4,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } if((model->VBICthermalResistGiven) && (model->VBICthermalResist > 0.0)) here->VBIC_selfheat = 1; else here->VBIC_selfheat = 0; if((model->VBICthermalResistGiven) && (model->VBICthermalCapacitance < 1e-12)) model->VBICthermalCapacitance = 1e-12; if(here->VBICcollCINode == 0) { error = CKTmkVolt(ckt, &tmp, here->VBICname, "collCI"); if(error) return(error); here->VBICcollCINode = tmp->number; } if(here->VBICbaseBPNode == 0) { error = CKTmkVolt(ckt, &tmp, here->VBICname, "baseBP"); if(error) return(error); here->VBICbaseBPNode = tmp->number; } if(here->VBICbaseBINode == 0) { error = CKTmkVolt(ckt, &tmp, here->VBICname, "baseBI"); if(error) return(error); here->VBICbaseBINode = tmp->number; } /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(VBICcollCollPtr,VBICcollNode,VBICcollNode); TSTALLOC(VBICbaseBasePtr,VBICbaseNode,VBICbaseNode); TSTALLOC(VBICemitEmitPtr,VBICemitNode,VBICemitNode); TSTALLOC(VBICsubsSubsPtr,VBICsubsNode,VBICsubsNode); TSTALLOC(VBICcollCXCollCXPtr,VBICcollCXNode,VBICcollCXNode); TSTALLOC(VBICcollCICollCIPtr,VBICcollCINode,VBICcollCINode); TSTALLOC(VBICbaseBXBaseBXPtr,VBICbaseBXNode,VBICbaseBXNode); TSTALLOC(VBICbaseBIBaseBIPtr,VBICbaseBINode,VBICbaseBINode); TSTALLOC(VBICemitEIEmitEIPtr,VBICemitEINode,VBICemitEINode); TSTALLOC(VBICbaseBPBaseBPPtr,VBICbaseBPNode,VBICbaseBPNode); TSTALLOC(VBICsubsSISubsSIPtr,VBICsubsSINode,VBICsubsSINode); TSTALLOC(VBICbaseEmitPtr,VBICbaseNode,VBICemitNode); TSTALLOC(VBICemitBasePtr,VBICemitNode,VBICbaseNode); TSTALLOC(VBICbaseCollPtr,VBICbaseNode,VBICcollNode); TSTALLOC(VBICcollBasePtr,VBICcollNode,VBICbaseNode); TSTALLOC(VBICcollCollCXPtr,VBICcollNode,VBICcollCXNode); TSTALLOC(VBICbaseBaseBXPtr,VBICbaseNode,VBICbaseBXNode); TSTALLOC(VBICemitEmitEIPtr,VBICemitNode,VBICemitEINode); TSTALLOC(VBICsubsSubsSIPtr,VBICsubsNode,VBICsubsSINode); TSTALLOC(VBICcollCXCollCIPtr,VBICcollCXNode,VBICcollCINode); TSTALLOC(VBICcollCXBaseBXPtr,VBICcollCXNode,VBICbaseBXNode); TSTALLOC(VBICcollCXBaseBIPtr,VBICcollCXNode,VBICbaseBINode); TSTALLOC(VBICcollCXBaseBPPtr,VBICcollCXNode,VBICbaseBPNode); TSTALLOC(VBICcollCIBaseBIPtr,VBICcollCINode,VBICbaseBINode); TSTALLOC(VBICcollCIEmitEIPtr,VBICcollCINode,VBICemitEINode); TSTALLOC(VBICbaseBXBaseBIPtr,VBICbaseBXNode,VBICbaseBINode); TSTALLOC(VBICbaseBXEmitEIPtr,VBICbaseBXNode,VBICemitEINode); TSTALLOC(VBICbaseBXBaseBPPtr,VBICbaseBXNode,VBICbaseBPNode); TSTALLOC(VBICbaseBXSubsSIPtr,VBICbaseBXNode,VBICsubsSINode); TSTALLOC(VBICbaseBIEmitEIPtr,VBICbaseBINode,VBICemitEINode); TSTALLOC(VBICbaseBPSubsSIPtr,VBICbaseBPNode,VBICsubsSINode); TSTALLOC(VBICcollCXCollPtr,VBICcollCXNode,VBICcollNode); TSTALLOC(VBICbaseBXBasePtr,VBICbaseBXNode,VBICbaseNode); TSTALLOC(VBICemitEIEmitPtr,VBICemitEINode,VBICemitNode); TSTALLOC(VBICsubsSISubsPtr,VBICsubsSINode,VBICsubsNode); TSTALLOC(VBICcollCICollCXPtr,VBICcollCINode,VBICcollCXNode); TSTALLOC(VBICbaseBICollCXPtr,VBICbaseBINode,VBICcollCXNode); TSTALLOC(VBICbaseBPCollCXPtr,VBICbaseBPNode,VBICcollCXNode); TSTALLOC(VBICbaseBXCollCIPtr,VBICbaseBXNode,VBICcollCINode); TSTALLOC(VBICbaseBICollCIPtr,VBICbaseBINode,VBICcollCINode); TSTALLOC(VBICemitEICollCIPtr,VBICemitEINode,VBICcollCINode); TSTALLOC(VBICbaseBPCollCIPtr,VBICbaseBPNode,VBICcollCINode); TSTALLOC(VBICbaseBIBaseBXPtr,VBICbaseBINode,VBICbaseBXNode); TSTALLOC(VBICemitEIBaseBXPtr,VBICemitEINode,VBICbaseBXNode); TSTALLOC(VBICbaseBPBaseBXPtr,VBICbaseBPNode,VBICbaseBXNode); TSTALLOC(VBICsubsSIBaseBXPtr,VBICsubsSINode,VBICbaseBXNode); TSTALLOC(VBICemitEIBaseBIPtr,VBICemitEINode,VBICbaseBINode); TSTALLOC(VBICbaseBPBaseBIPtr,VBICbaseBPNode,VBICbaseBINode); TSTALLOC(VBICsubsSICollCIPtr,VBICsubsSINode,VBICcollCINode); TSTALLOC(VBICsubsSIBaseBIPtr,VBICsubsSINode,VBICbaseBINode); TSTALLOC(VBICsubsSIBaseBPPtr,VBICsubsSINode,VBICbaseBPNode); if (here->VBIC_selfheat) { TSTALLOC(VBICcollTempPtr,VBICcollNode,VBICtempNode); TSTALLOC(VBICbaseTempPtr,VBICbaseNode,VBICtempNode); TSTALLOC(VBICemitTempPtr,VBICemitNode,VBICtempNode); TSTALLOC(VBICsubsTempPtr,VBICsubsNode,VBICtempNode); TSTALLOC(VBICcollCItempPtr,VBICcollCINode,VBICtempNode); TSTALLOC(VBICcollCXtempPtr,VBICcollCXNode,VBICtempNode); TSTALLOC(VBICbaseBItempPtr,VBICbaseBINode,VBICtempNode); TSTALLOC(VBICbaseBXtempPtr,VBICbaseBXNode,VBICtempNode); TSTALLOC(VBICbaseBPtempPtr,VBICbaseBPNode,VBICtempNode); TSTALLOC(VBICemitEItempPtr,VBICemitEINode,VBICtempNode); TSTALLOC(VBICsubsSItempPtr,VBICsubsSINode,VBICtempNode); TSTALLOC(VBICtempCollCIPtr,VBICtempNode,VBICcollCINode); TSTALLOC(VBICtempCollCXPtr,VBICtempNode,VBICcollCXNode); TSTALLOC(VBICtempBaseBIPtr,VBICtempNode,VBICbaseBINode); TSTALLOC(VBICtempBaseBXPtr,VBICtempNode,VBICbaseBXNode); TSTALLOC(VBICtempBaseBPPtr,VBICtempNode,VBICbaseBPNode); TSTALLOC(VBICtempEmitEIPtr,VBICtempNode,VBICemitEINode); TSTALLOC(VBICtempSubsPtr,VBICtempNode,VBICsubsNode); TSTALLOC(VBICtempTempPtr,VBICtempNode,VBICtempNode); } } } return(OK); } int VBICunsetup( GENmodel *inModel, CKTcircuit *ckt) { VBICmodel *model; VBICinstance *here; for (model = (VBICmodel *)inModel; model != NULL; model = VBICnextModel(model)) { for (here = VBICinstances(model); here != NULL; here=VBICnextInstance(here)) { if (here->VBICbaseBINode > 0) CKTdltNNum(ckt, here->VBICbaseBINode); here->VBICbaseBINode = 0; if (here->VBICbaseBPNode > 0) CKTdltNNum(ckt, here->VBICbaseBPNode); here->VBICbaseBPNode = 0; if (here->VBICcollCINode > 0) CKTdltNNum(ckt, here->VBICcollCINode); here->VBICcollCINode = 0; if (here->VBICsubsSINode > 0 && here->VBICsubsSINode != here->VBICsubsNode) CKTdltNNum(ckt, here->VBICsubsSINode); here->VBICsubsSINode = 0; if (here->VBICemitEINode > 0 && here->VBICemitEINode != here->VBICemitNode) CKTdltNNum(ckt, here->VBICemitEINode); here->VBICemitEINode = 0; if (here->VBICbaseBXNode > 0 && here->VBICbaseBXNode != here->VBICbaseNode) CKTdltNNum(ckt, here->VBICbaseBXNode); here->VBICbaseBXNode = 0; if (here->VBICcollCXNode > 0 && here->VBICcollCXNode != here->VBICcollNode) CKTdltNNum(ckt, here->VBICcollCXNode); here->VBICcollCXNode = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_dd/0000755000175000017500000000000013546075722021362 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/bsim3soi_dd/b3soidd.c0000644000175000017500000007667613546075722023103 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: Weidong Liu and Pin Su Feb 1999 Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soidd.c 98/5/01 Modified by Wei Jin 99/9/27 Modified by Paolo Nenzi 2001 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMDD2.1 release */ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "b3soidddef.h" #include "ngspice/suffix.h" IFparm B3SOIDDpTable[] = { /* parameters */ IOP( "l", B3SOIDD_L, IF_REAL , "Length"), IOP( "w", B3SOIDD_W, IF_REAL , "Width"), IOP( "m", B3SOIDD_M, IF_REAL , "Parallel Multiplier"), IOP( "ad", B3SOIDD_AD, IF_REAL , "Drain area"), IOP( "as", B3SOIDD_AS, IF_REAL , "Source area"), IOP( "pd", B3SOIDD_PD, IF_REAL , "Drain perimeter"), IOP( "ps", B3SOIDD_PS, IF_REAL , "Source perimeter"), IOP( "nrd", B3SOIDD_NRD, IF_REAL , "Number of squares in drain"), IOP( "nrs", B3SOIDD_NRS, IF_REAL , "Number of squares in source"), IOP( "off", B3SOIDD_OFF, IF_FLAG , "Device is initially off"), IP( "ic", B3SOIDD_IC, IF_REALVEC , "Vector of DS,GS,BS initial voltages"), OP( "gmbs", B3SOIDD_GMBS, IF_REAL, "Gmb"), OP( "gm", B3SOIDD_GM, IF_REAL, "Gm"), OP( "gm/ids", B3SOIDD_GMID, IF_REAL, "Gm/Ids"), OP( "gds", B3SOIDD_GDS, IF_REAL, "Gds"), OP( "vdsat", B3SOIDD_VDSAT, IF_REAL, "Vdsat"), OP( "vth", B3SOIDD_VON, IF_REAL, "Vth"), OP( "ids", B3SOIDD_CD, IF_REAL, "Ids"), OP( "vbs", B3SOIDD_VBS, IF_REAL, "Vbs"), OP( "vgs", B3SOIDD_VGS, IF_REAL, "Vgs"), OP( "vds", B3SOIDD_VDS, IF_REAL, "Vds"), OP( "ves", B3SOIDD_VES, IF_REAL, "Ves"), IOP( "bjtoff", B3SOIDD_BJTOFF, IF_INTEGER, "BJT on/off flag"), IOP( "debug", B3SOIDD_DEBUG, IF_INTEGER, "BJT on/off flag"), IOP( "rth0", B3SOIDD_RTH0, IF_REAL, "Instance Thermal Resistance"), IOP( "cth0", B3SOIDD_CTH0, IF_REAL, "Instance Thermal Capacitance"), IOP( "nrb", B3SOIDD_NRB, IF_REAL, "Number of squares in body"), }; IFparm B3SOIDDmPTable[] = { /* model parameters */ IOP( "capmod", B3SOIDD_MOD_CAPMOD, IF_INTEGER, "Capacitance model selector"), IOP( "mobmod", B3SOIDD_MOD_MOBMOD, IF_INTEGER, "Mobility model selector"), IOP( "noimod", B3SOIDD_MOD_NOIMOD, IF_INTEGER, "Noise model selector"), IOP( "paramchk", B3SOIDD_MOD_PARAMCHK, IF_INTEGER, "Model parameter checking selector"), IOP( "binunit", B3SOIDD_MOD_BINUNIT, IF_INTEGER, "Bin unit selector"), IOP( "version", B3SOIDD_MOD_VERSION, IF_REAL, " parameter for model version"), IOP( "tox", B3SOIDD_MOD_TOX, IF_REAL, "Gate oxide thickness in meters"), IOP( "cdsc", B3SOIDD_MOD_CDSC, IF_REAL, "Drain/Source and channel coupling capacitance"), IOP( "cdscb", B3SOIDD_MOD_CDSCB, IF_REAL, "Body-bias dependence of cdsc"), IOP( "cdscd", B3SOIDD_MOD_CDSCD, IF_REAL, "Drain-bias dependence of cdsc"), IOP( "cit", B3SOIDD_MOD_CIT, IF_REAL, "Interface state capacitance"), IOP( "nfactor", B3SOIDD_MOD_NFACTOR, IF_REAL, "Subthreshold swing Coefficient"), IOP( "vsat", B3SOIDD_MOD_VSAT, IF_REAL, "Saturation velocity at tnom"), IOP( "at", B3SOIDD_MOD_AT, IF_REAL, "Temperature coefficient of vsat"), IOP( "a0", B3SOIDD_MOD_A0, IF_REAL, "Non-uniform depletion width effect coefficient."), IOP( "ags", B3SOIDD_MOD_AGS, IF_REAL, "Gate bias coefficient of Abulk."), IOP( "a1", B3SOIDD_MOD_A1, IF_REAL, "Non-saturation effect coefficient"), IOP( "a2", B3SOIDD_MOD_A2, IF_REAL, "Non-saturation effect coefficient"), IOP( "keta", B3SOIDD_MOD_KETA, IF_REAL, "Body-bias coefficient of non-uniform depletion width effect."), IOP( "nsub", B3SOIDD_MOD_NSUB, IF_REAL, "Substrate doping concentration with polarity"), IOP( "nch", B3SOIDD_MOD_NPEAK, IF_REAL, "Channel doping concentration"), IOP( "ngate", B3SOIDD_MOD_NGATE, IF_REAL, "Poly-gate doping concentration"), IOP( "gamma1", B3SOIDD_MOD_GAMMA1, IF_REAL, "Vth body coefficient"), IOP( "gamma2", B3SOIDD_MOD_GAMMA2, IF_REAL, "Vth body coefficient"), IOP( "vbx", B3SOIDD_MOD_VBX, IF_REAL, "Vth transition body Voltage"), IOP( "vbm", B3SOIDD_MOD_VBM, IF_REAL, "Maximum body voltage"), IOP( "xt", B3SOIDD_MOD_XT, IF_REAL, "Doping depth"), IOP( "k1", B3SOIDD_MOD_K1, IF_REAL, "Bulk effect coefficient 1"), IOP( "kt1", B3SOIDD_MOD_KT1, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt1l", B3SOIDD_MOD_KT1L, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt2", B3SOIDD_MOD_KT2, IF_REAL, "Body-coefficient of kt1"), IOP( "k2", B3SOIDD_MOD_K2, IF_REAL, "Bulk effect coefficient 2"), IOP( "k3", B3SOIDD_MOD_K3, IF_REAL, "Narrow width effect coefficient"), IOP( "k3b", B3SOIDD_MOD_K3B, IF_REAL, "Body effect coefficient of k3"), IOP( "w0", B3SOIDD_MOD_W0, IF_REAL, "Narrow width effect parameter"), IOP( "nlx", B3SOIDD_MOD_NLX, IF_REAL, "Lateral non-uniform doping effect"), IOP( "dvt0", B3SOIDD_MOD_DVT0, IF_REAL, "Short channel effect coeff. 0"), IOP( "dvt1", B3SOIDD_MOD_DVT1, IF_REAL, "Short channel effect coeff. 1"), IOP( "dvt2", B3SOIDD_MOD_DVT2, IF_REAL, "Short channel effect coeff. 2"), IOP( "dvt0w", B3SOIDD_MOD_DVT0W, IF_REAL, "Narrow Width coeff. 0"), IOP( "dvt1w", B3SOIDD_MOD_DVT1W, IF_REAL, "Narrow Width effect coeff. 1"), IOP( "dvt2w", B3SOIDD_MOD_DVT2W, IF_REAL, "Narrow Width effect coeff. 2"), IOP( "drout", B3SOIDD_MOD_DROUT, IF_REAL, "DIBL coefficient of output resistance"), IOP( "dsub", B3SOIDD_MOD_DSUB, IF_REAL, "DIBL coefficient in the subthreshold region"), IOP( "vth0", B3SOIDD_MOD_VTH0, IF_REAL,"Threshold voltage"), IOPR("vtho", B3SOIDD_MOD_VTH0, IF_REAL,"Threshold voltage"), IOP( "ua", B3SOIDD_MOD_UA, IF_REAL, "Linear gate dependence of mobility"), IOP( "ua1", B3SOIDD_MOD_UA1, IF_REAL, "Temperature coefficient of ua"), IOP( "ub", B3SOIDD_MOD_UB, IF_REAL, "Quadratic gate dependence of mobility"), IOP( "ub1", B3SOIDD_MOD_UB1, IF_REAL, "Temperature coefficient of ub"), IOP( "uc", B3SOIDD_MOD_UC, IF_REAL, "Body-bias dependence of mobility"), IOP( "uc1", B3SOIDD_MOD_UC1, IF_REAL, "Temperature coefficient of uc"), IOP( "u0", B3SOIDD_MOD_U0, IF_REAL, "Low-field mobility at Tnom"), IOP( "ute", B3SOIDD_MOD_UTE, IF_REAL, "Temperature coefficient of mobility"), IOP( "voff", B3SOIDD_MOD_VOFF, IF_REAL, "Threshold voltage offset"), IOP( "tnom", B3SOIDD_MOD_TNOM, IF_REAL, "Parameter measurement temperature"), IOP( "cgso", B3SOIDD_MOD_CGSO, IF_REAL, "Gate-source overlap capacitance per width"), IOP( "cgdo", B3SOIDD_MOD_CGDO, IF_REAL, "Gate-drain overlap capacitance per width"), IOP( "cgeo", B3SOIDD_MOD_CGEO, IF_REAL, "Gate-substrate overlap capacitance"), IOP( "xpart", B3SOIDD_MOD_XPART, IF_REAL, "Channel charge partitioning"), IOP( "delta", B3SOIDD_MOD_DELTA, IF_REAL, "Effective Vds parameter"), IOP( "rsh", B3SOIDD_MOD_RSH, IF_REAL, "Source-drain sheet resistance"), IOP( "rdsw", B3SOIDD_MOD_RDSW, IF_REAL, "Source-drain resistance per width"), IOP( "prwg", B3SOIDD_MOD_PRWG, IF_REAL, "Gate-bias effect on parasitic resistance "), IOP( "prwb", B3SOIDD_MOD_PRWB, IF_REAL, "Body-effect on parasitic resistance "), IOP( "prt", B3SOIDD_MOD_PRT, IF_REAL, "Temperature coefficient of parasitic resistance "), IOP( "eta0", B3SOIDD_MOD_ETA0, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "etab", B3SOIDD_MOD_ETAB, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "pclm", B3SOIDD_MOD_PCLM, IF_REAL, "Channel length modulation Coefficient"), IOP( "pdiblc1", B3SOIDD_MOD_PDIBL1, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblc2", B3SOIDD_MOD_PDIBL2, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblcb", B3SOIDD_MOD_PDIBLB, IF_REAL, "Body-effect on drain-induced barrier lowering"), IOP( "pvag", B3SOIDD_MOD_PVAG, IF_REAL, "Gate dependence of output resistance parameter"), IOP( "shmod", B3SOIDD_MOD_SHMOD, IF_INTEGER, "Self heating mode selector"), IOP( "tbox", B3SOIDD_MOD_TBOX, IF_REAL, "Back gate oxide thickness in meters"), IOP( "tsi", B3SOIDD_MOD_TSI, IF_REAL, "Silicon-on-insulator thickness in meters"), IOP( "xj", B3SOIDD_MOD_XJ, IF_REAL, "Junction Depth"), IOP( "kb1", B3SOIDD_MOD_KB1, IF_REAL, "Backgate coupling coefficient at strong inversion"), IOP( "kb3", B3SOIDD_MOD_KB3, IF_REAL, "Backgate coupling coefficient at subthreshold"), IOP( "dvbd0", B3SOIDD_MOD_DVBD0, IF_REAL, "First coefficient of short-channel effect on Vbs0t"), IOP( "dvbd1", B3SOIDD_MOD_DVBD1, IF_REAL, "Second coefficient of short-channel effect on Vbs0t"), IOP( "vbsa", B3SOIDD_MOD_VBSA, IF_REAL, "Vbs0t offset voltage"), IOP( "delp", B3SOIDD_MOD_DELP, IF_REAL, "Offset constant for limiting Vbseff to Phis"), IOP( "rbody", B3SOIDD_MOD_RBODY, IF_REAL, "Intrinsic body contact sheet resistance"), IOP( "rbsh", B3SOIDD_MOD_RBSH, IF_REAL, "Extrinsic body contact sheet resistance"), IOP( "adice0", B3SOIDD_MOD_ADICE0, IF_REAL, "DICE constant for bulk charge effect"), IOP( "abp", B3SOIDD_MOD_ABP, IF_REAL, "Gate bias coefficient for Xcsat calculation"), IOP( "mxc", B3SOIDD_MOD_MXC, IF_REAL, "A smoothing parameter for Xcsat calculation"), IOP( "rth0", B3SOIDD_MOD_RTH0, IF_REAL, "Self-heating thermal resistance"), IOP( "cth0", B3SOIDD_MOD_CTH0, IF_REAL, "Self-heating thermal capacitance"), IOP( "aii", B3SOIDD_MOD_AII, IF_REAL, "1st Vdsatii parameter"), IOP( "bii", B3SOIDD_MOD_BII, IF_REAL, "2nd Vdsatii parameter"), IOP( "cii", B3SOIDD_MOD_CII, IF_REAL, "3rd Vdsatii parameter"), IOP( "dii", B3SOIDD_MOD_DII, IF_REAL, "4th Vdsatii parameter"), IOP( "ngidl", B3SOIDD_MOD_NGIDL, IF_REAL, "GIDL first parameter"), IOP( "agidl", B3SOIDD_MOD_AGIDL, IF_REAL, "GIDL second parameter"), IOP( "bgidl", B3SOIDD_MOD_BGIDL, IF_REAL, "GIDL third parameter"), IOP( "ndiode", B3SOIDD_MOD_NDIODE, IF_REAL, "Diode non-ideality factor"), IOP( "ntun", B3SOIDD_MOD_NTUN, IF_REAL, "Reverse tunneling non-ideality factor"), IOP( "isbjt", B3SOIDD_MOD_ISBJT, IF_REAL, "BJT emitter injection constant"), IOP( "isdif", B3SOIDD_MOD_ISDIF, IF_REAL, "Body to S/D injection constant"), IOP( "isrec", B3SOIDD_MOD_ISREC, IF_REAL, "Recombination in depletion constant"), IOP( "istun", B3SOIDD_MOD_ISTUN, IF_REAL, "Tunneling diode constant"), IOP( "xbjt", B3SOIDD_MOD_XBJT, IF_REAL, "Temperature coefficient for Isbjt"), IOPR( "xdif",B3SOIDD_MOD_XBJT, IF_REAL, "Temperature coefficient for Isdif"), IOP( "xrec", B3SOIDD_MOD_XREC, IF_REAL, "Temperature coefficient for Isrec"), IOP( "xtun", B3SOIDD_MOD_XTUN, IF_REAL, "Temperature coefficient for Istun"), IOP( "edl", B3SOIDD_MOD_EDL, IF_REAL, "Electron diffusion length"), IOP( "kbjt1", B3SOIDD_MOD_KBJT1, IF_REAL, "Vds dependency on BJT base width"), IOP( "tt", B3SOIDD_MOD_TT, IF_REAL, "Diffusion capacitance transit time coefficient"), IOP( "vsdth", B3SOIDD_MOD_VSDTH, IF_REAL, "Source/Drain diffusion threshold voltage"), IOP( "vsdfb", B3SOIDD_MOD_VSDFB, IF_REAL, "Source/Drain diffusion flatband voltage"), IOP( "csdmin", B3SOIDD_MOD_CSDMIN, IF_REAL, "Source/Drain diffusion bottom minimum capacitance"), IOP( "asd", B3SOIDD_MOD_ASD, IF_REAL, "Source/Drain diffusion smoothing parameter"), IOP( "pbswg", B3SOIDD_MOD_PBSWG, IF_REAL, "Source/drain (gate side) sidewall junction capacitance built in potential"), IOP( "mjswg", B3SOIDD_MOD_MJSWG, IF_REAL, "Source/drain (gate side) sidewall junction capacitance grading coefficient"), IOP( "cjswg", B3SOIDD_MOD_CJSWG, IF_REAL, "Source/drain (gate side) sidewall junction capacitance per unit width"), IOP( "csdesw", B3SOIDD_MOD_CSDESW, IF_REAL, "Source/drain sidewall fringing constant"), IOP( "lint", B3SOIDD_MOD_LINT, IF_REAL, "Length reduction parameter"), IOP( "ll", B3SOIDD_MOD_LL, IF_REAL, "Length reduction parameter"), IOP( "lln", B3SOIDD_MOD_LLN, IF_REAL, "Length reduction parameter"), IOP( "lw", B3SOIDD_MOD_LW, IF_REAL, "Length reduction parameter"), IOP( "lwn", B3SOIDD_MOD_LWN, IF_REAL, "Length reduction parameter"), IOP( "lwl", B3SOIDD_MOD_LWL, IF_REAL, "Length reduction parameter"), IOP( "wr", B3SOIDD_MOD_WR, IF_REAL, "Width dependence of rds"), IOP( "wint", B3SOIDD_MOD_WINT, IF_REAL, "Width reduction parameter"), IOP( "dwg", B3SOIDD_MOD_DWG, IF_REAL, "Width reduction parameter"), IOP( "dwb", B3SOIDD_MOD_DWB, IF_REAL, "Width reduction parameter"), IOP( "wl", B3SOIDD_MOD_WL, IF_REAL, "Width reduction parameter"), IOP( "wln", B3SOIDD_MOD_WLN, IF_REAL, "Width reduction parameter"), IOP( "ww", B3SOIDD_MOD_WW, IF_REAL, "Width reduction parameter"), IOP( "wwn", B3SOIDD_MOD_WWN, IF_REAL, "Width reduction parameter"), IOP( "wwl", B3SOIDD_MOD_WWL, IF_REAL, "Width reduction parameter"), IOP( "b0", B3SOIDD_MOD_B0, IF_REAL, "Abulk narrow width parameter"), IOP( "b1", B3SOIDD_MOD_B1, IF_REAL, "Abulk narrow width parameter"), IOP( "cgsl", B3SOIDD_MOD_CGSL, IF_REAL, "New C-V model parameter"), IOP( "cgdl", B3SOIDD_MOD_CGDL, IF_REAL, "New C-V model parameter"), IOP( "ckappa", B3SOIDD_MOD_CKAPPA, IF_REAL, "New C-V model parameter"), IOP( "cf", B3SOIDD_MOD_CF, IF_REAL, "Fringe capacitance parameter"), IOP( "clc", B3SOIDD_MOD_CLC, IF_REAL, "Vdsat parameter for C-V model"), IOP( "cle", B3SOIDD_MOD_CLE, IF_REAL, "Vdsat parameter for C-V model"), IOP( "dwc", B3SOIDD_MOD_DWC, IF_REAL, "Delta W for C-V model"), IOP( "dlc", B3SOIDD_MOD_DLC, IF_REAL, "Delta L for C-V model"), IOP( "alpha0", B3SOIDD_MOD_ALPHA0, IF_REAL, "substrate current model parameter"), IOP( "alpha1", B3SOIDD_MOD_ALPHA1, IF_REAL, "substrate current model parameter"), IOP( "beta0", B3SOIDD_MOD_BETA0, IF_REAL, "substrate current model parameter"), IOP( "noia", B3SOIDD_MOD_NOIA, IF_REAL, "Flicker noise parameter"), IOP( "noib", B3SOIDD_MOD_NOIB, IF_REAL, "Flicker noise parameter"), IOP( "noic", B3SOIDD_MOD_NOIC, IF_REAL, "Flicker noise parameter"), IOP( "em", B3SOIDD_MOD_EM, IF_REAL, "Flicker noise parameter"), IOP( "ef", B3SOIDD_MOD_EF, IF_REAL, "Flicker noise frequency exponent"), IOP( "af", B3SOIDD_MOD_AF, IF_REAL, "Flicker noise exponent"), IOP( "kf", B3SOIDD_MOD_KF, IF_REAL, "Flicker noise coefficient"), IOP( "noif", B3SOIDD_MOD_NOIF, IF_REAL, "Floating body excess noise ideality factor"), /* Added for binning - START */ /* Length Dependence */ IOP( "lnch", B3SOIDD_MOD_LNPEAK, IF_REAL, "Length dependence of nch"), IOP( "lnsub", B3SOIDD_MOD_LNSUB, IF_REAL, "Length dependence of nsub"), IOP( "lngate", B3SOIDD_MOD_LNGATE, IF_REAL, "Length dependence of ngate"), IOP( "lvth0", B3SOIDD_MOD_LVTH0, IF_REAL,"Length dependence of vth0"), IOP( "lk1", B3SOIDD_MOD_LK1, IF_REAL, "Length dependence of k1"), IOP( "lk2", B3SOIDD_MOD_LK2, IF_REAL, "Length dependence of k2"), IOP( "lk3", B3SOIDD_MOD_LK3, IF_REAL, "Length dependence of k3"), IOP( "lk3b", B3SOIDD_MOD_LK3B, IF_REAL, "Length dependence of k3b"), IOP( "lvbsa", B3SOIDD_MOD_LVBSA, IF_REAL, "Length dependence of vbsa"), IOP( "ldelp", B3SOIDD_MOD_LDELP, IF_REAL, "Length dependence of delp"), IOP( "lkb1", B3SOIDD_MOD_LKB1, IF_REAL, "Length dependence of kb1"), IOP( "lkb3", B3SOIDD_MOD_LKB3, IF_REAL, "Length dependence of kb3"), IOP( "ldvbd0", B3SOIDD_MOD_LDVBD0, IF_REAL, "Length dependence of dvbd0"), IOP( "ldvbd1", B3SOIDD_MOD_LDVBD1, IF_REAL, "Length dependence of dvbd1"), IOP( "lw0", B3SOIDD_MOD_LW0, IF_REAL, "Length dependence of w0"), IOP( "lnlx", B3SOIDD_MOD_LNLX, IF_REAL, "Length dependence of nlx"), IOP( "ldvt0", B3SOIDD_MOD_LDVT0, IF_REAL, "Length dependence of dvt0"), IOP( "ldvt1", B3SOIDD_MOD_LDVT1, IF_REAL, "Length dependence of dvt1"), IOP( "ldvt2", B3SOIDD_MOD_LDVT2, IF_REAL, "Length dependence of dvt2"), IOP( "ldvt0w", B3SOIDD_MOD_LDVT0W, IF_REAL, "Length dependence of dvt0w"), IOP( "ldvt1w", B3SOIDD_MOD_LDVT1W, IF_REAL, "Length dependence of dvt1w"), IOP( "ldvt2w", B3SOIDD_MOD_LDVT2W, IF_REAL, "Length dependence of dvt2w"), IOP( "lu0", B3SOIDD_MOD_LU0, IF_REAL, "Length dependence of u0"), IOP( "lua", B3SOIDD_MOD_LUA, IF_REAL, "Length dependence of ua"), IOP( "lub", B3SOIDD_MOD_LUB, IF_REAL, "Length dependence of ub"), IOP( "luc", B3SOIDD_MOD_LUC, IF_REAL, "Length dependence of uc"), IOP( "lvsat", B3SOIDD_MOD_LVSAT, IF_REAL, "Length dependence of vsat"), IOP( "la0", B3SOIDD_MOD_LA0, IF_REAL, "Length dependence of a0"), IOP( "lags", B3SOIDD_MOD_LAGS, IF_REAL, "Length dependence of ags"), IOP( "lb0", B3SOIDD_MOD_LB0, IF_REAL, "Length dependence of b0"), IOP( "lb1", B3SOIDD_MOD_LB1, IF_REAL, "Length dependence of b1"), IOP( "lketa", B3SOIDD_MOD_LKETA, IF_REAL, "Length dependence of keta"), IOP( "labp", B3SOIDD_MOD_LABP, IF_REAL, "Length dependence of abp"), IOP( "lmxc", B3SOIDD_MOD_LMXC, IF_REAL, "Length dependence of mxc"), IOP( "ladice0", B3SOIDD_MOD_LADICE0, IF_REAL, "Length dependence of adice0"), IOP( "la1", B3SOIDD_MOD_LA1, IF_REAL, "Length dependence of a1"), IOP( "la2", B3SOIDD_MOD_LA2, IF_REAL, "Length dependence of a2"), IOP( "lrdsw", B3SOIDD_MOD_LRDSW, IF_REAL, "Length dependence of rdsw "), IOP( "lprwb", B3SOIDD_MOD_LPRWB, IF_REAL, "Length dependence of prwb "), IOP( "lprwg", B3SOIDD_MOD_LPRWG, IF_REAL, "Length dependence of prwg "), IOP( "lwr", B3SOIDD_MOD_LWR, IF_REAL, "Length dependence of wr"), IOP( "lnfactor", B3SOIDD_MOD_LNFACTOR, IF_REAL, "Length dependence of nfactor"), IOP( "ldwg", B3SOIDD_MOD_LDWG, IF_REAL, "Length dependence of dwg"), IOP( "ldwb", B3SOIDD_MOD_LDWB, IF_REAL, "Length dependence of dwb"), IOP( "lvoff", B3SOIDD_MOD_LVOFF, IF_REAL, "Length dependence of voff"), IOP( "leta0", B3SOIDD_MOD_LETA0, IF_REAL, "Length dependence of eta0"), IOP( "letab", B3SOIDD_MOD_LETAB, IF_REAL, "Length dependence of etab"), IOP( "ldsub", B3SOIDD_MOD_LDSUB, IF_REAL, "Length dependence of dsub"), IOP( "lcit", B3SOIDD_MOD_LCIT, IF_REAL, "Length dependence of cit"), IOP( "lcdsc", B3SOIDD_MOD_LCDSC, IF_REAL, "Length dependence of cdsc"), IOP( "lcdscb", B3SOIDD_MOD_LCDSCB, IF_REAL, "Length dependence of cdscb"), IOP( "lcdscd", B3SOIDD_MOD_LCDSCD, IF_REAL, "Length dependence of cdscd"), IOP( "lpclm", B3SOIDD_MOD_LPCLM, IF_REAL, "Length dependence of pclm"), IOP( "lpdiblc1", B3SOIDD_MOD_LPDIBL1, IF_REAL, "Length dependence of pdiblc1"), IOP( "lpdiblc2", B3SOIDD_MOD_LPDIBL2, IF_REAL, "Length dependence of pdiblc2"), IOP( "lpdiblcb", B3SOIDD_MOD_LPDIBLB, IF_REAL, "Length dependence of pdiblcb"), IOP( "ldrout", B3SOIDD_MOD_LDROUT, IF_REAL, "Length dependence of drout"), IOP( "lpvag", B3SOIDD_MOD_LPVAG, IF_REAL, "Length dependence of pvag"), IOP( "ldelta", B3SOIDD_MOD_LDELTA, IF_REAL, "Length dependence of delta"), IOP( "laii", B3SOIDD_MOD_LAII, IF_REAL, "Length dependence of aii"), IOP( "lbii", B3SOIDD_MOD_LBII, IF_REAL, "Length dependence of bii"), IOP( "lcii", B3SOIDD_MOD_LCII, IF_REAL, "Length dependence of cii"), IOP( "ldii", B3SOIDD_MOD_LDII, IF_REAL, "Length dependence of dii"), IOP( "lalpha0", B3SOIDD_MOD_LALPHA0, IF_REAL, "Length dependence of alpha0"), IOP( "lalpha1", B3SOIDD_MOD_LALPHA1, IF_REAL, "Length dependence of alpha1"), IOP( "lbeta0", B3SOIDD_MOD_LBETA0, IF_REAL, "Length dependence of beta0"), IOP( "lagidl", B3SOIDD_MOD_LAGIDL, IF_REAL, "Length dependence of agidl"), IOP( "lbgidl", B3SOIDD_MOD_LBGIDL, IF_REAL, "Length dependence of bgidl"), IOP( "lngidl", B3SOIDD_MOD_LNGIDL, IF_REAL, "Length dependence of ngidl"), IOP( "lntun", B3SOIDD_MOD_LNTUN, IF_REAL, "Length dependence of ntun"), IOP( "lndiode", B3SOIDD_MOD_LNDIODE, IF_REAL, "Length dependence of ndiode"), IOP( "lisbjt", B3SOIDD_MOD_LISBJT, IF_REAL, "Length dependence of isbjt"), IOP( "lisdif", B3SOIDD_MOD_LISDIF, IF_REAL, "Length dependence of isdif"), IOP( "lisrec", B3SOIDD_MOD_LISREC, IF_REAL, "Length dependence of isrec"), IOP( "listun", B3SOIDD_MOD_LISTUN, IF_REAL, "Length dependence of istun"), IOP( "ledl", B3SOIDD_MOD_LEDL, IF_REAL, "Length dependence of edl"), IOP( "lkbjt1", B3SOIDD_MOD_LKBJT1, IF_REAL, "Length dependence of kbjt1"), IOP( "lvsdfb", B3SOIDD_MOD_LVSDFB, IF_REAL, "Length dependence of vsdfb"), IOP( "lvsdth", B3SOIDD_MOD_LVSDTH, IF_REAL, "Length dependence of vsdth"), /* Width Dependence */ IOP( "wnch", B3SOIDD_MOD_WNPEAK, IF_REAL, "Width dependence of nch"), IOP( "wnsub", B3SOIDD_MOD_WNSUB, IF_REAL, "Width dependence of nsub"), IOP( "wngate", B3SOIDD_MOD_WNGATE, IF_REAL, "Width dependence of ngate"), IOP( "wvth0", B3SOIDD_MOD_WVTH0, IF_REAL,"Width dependence of vth0"), IOP( "wk1", B3SOIDD_MOD_WK1, IF_REAL, "Width dependence of k1"), IOP( "wk2", B3SOIDD_MOD_WK2, IF_REAL, "Width dependence of k2"), IOP( "wk3", B3SOIDD_MOD_WK3, IF_REAL, "Width dependence of k3"), IOP( "wk3b", B3SOIDD_MOD_WK3B, IF_REAL, "Width dependence of k3b"), IOP( "wvbsa", B3SOIDD_MOD_WVBSA, IF_REAL, "Width dependence of vbsa"), IOP( "wdelp", B3SOIDD_MOD_WDELP, IF_REAL, "Width dependence of delp"), IOP( "wkb1", B3SOIDD_MOD_WKB1, IF_REAL, "Width dependence of kb1"), IOP( "wkb3", B3SOIDD_MOD_WKB3, IF_REAL, "Width dependence of kb3"), IOP( "wdvbd0", B3SOIDD_MOD_WDVBD0, IF_REAL, "Width dependence of dvbd0"), IOP( "wdvbd1", B3SOIDD_MOD_WDVBD1, IF_REAL, "Width dependence of dvbd1"), IOP( "ww0", B3SOIDD_MOD_WW0, IF_REAL, "Width dependence of w0"), IOP( "wnlx", B3SOIDD_MOD_WNLX, IF_REAL, "Width dependence of nlx"), IOP( "wdvt0", B3SOIDD_MOD_WDVT0, IF_REAL, "Width dependence of dvt0"), IOP( "wdvt1", B3SOIDD_MOD_WDVT1, IF_REAL, "Width dependence of dvt1"), IOP( "wdvt2", B3SOIDD_MOD_WDVT2, IF_REAL, "Width dependence of dvt2"), IOP( "wdvt0w", B3SOIDD_MOD_WDVT0W, IF_REAL, "Width dependence of dvt0w"), IOP( "wdvt1w", B3SOIDD_MOD_WDVT1W, IF_REAL, "Width dependence of dvt1w"), IOP( "wdvt2w", B3SOIDD_MOD_WDVT2W, IF_REAL, "Width dependence of dvt2w"), IOP( "wu0", B3SOIDD_MOD_WU0, IF_REAL, "Width dependence of u0"), IOP( "wua", B3SOIDD_MOD_WUA, IF_REAL, "Width dependence of ua"), IOP( "wub", B3SOIDD_MOD_WUB, IF_REAL, "Width dependence of ub"), IOP( "wuc", B3SOIDD_MOD_WUC, IF_REAL, "Width dependence of uc"), IOP( "wvsat", B3SOIDD_MOD_WVSAT, IF_REAL, "Width dependence of vsat"), IOP( "wa0", B3SOIDD_MOD_WA0, IF_REAL, "Width dependence of a0"), IOP( "wags", B3SOIDD_MOD_WAGS, IF_REAL, "Width dependence of ags"), IOP( "wb0", B3SOIDD_MOD_WB0, IF_REAL, "Width dependence of b0"), IOP( "wb1", B3SOIDD_MOD_WB1, IF_REAL, "Width dependence of b1"), IOP( "wketa", B3SOIDD_MOD_WKETA, IF_REAL, "Width dependence of keta"), IOP( "wabp", B3SOIDD_MOD_WABP, IF_REAL, "Width dependence of abp"), IOP( "wmxc", B3SOIDD_MOD_WMXC, IF_REAL, "Width dependence of mxc"), IOP( "wadice0", B3SOIDD_MOD_WADICE0, IF_REAL, "Width dependence of adice0"), IOP( "wa1", B3SOIDD_MOD_WA1, IF_REAL, "Width dependence of a1"), IOP( "wa2", B3SOIDD_MOD_WA2, IF_REAL, "Width dependence of a2"), IOP( "wrdsw", B3SOIDD_MOD_WRDSW, IF_REAL, "Width dependence of rdsw "), IOP( "wprwb", B3SOIDD_MOD_WPRWB, IF_REAL, "Width dependence of prwb "), IOP( "wprwg", B3SOIDD_MOD_WPRWG, IF_REAL, "Width dependence of prwg "), IOP( "wwr", B3SOIDD_MOD_WWR, IF_REAL, "Width dependence of wr"), IOP( "wnfactor", B3SOIDD_MOD_WNFACTOR, IF_REAL, "Width dependence of nfactor"), IOP( "wdwg", B3SOIDD_MOD_WDWG, IF_REAL, "Width dependence of dwg"), IOP( "wdwb", B3SOIDD_MOD_WDWB, IF_REAL, "Width dependence of dwb"), IOP( "wvoff", B3SOIDD_MOD_WVOFF, IF_REAL, "Width dependence of voff"), IOP( "weta0", B3SOIDD_MOD_WETA0, IF_REAL, "Width dependence of eta0"), IOP( "wetab", B3SOIDD_MOD_WETAB, IF_REAL, "Width dependence of etab"), IOP( "wdsub", B3SOIDD_MOD_WDSUB, IF_REAL, "Width dependence of dsub"), IOP( "wcit", B3SOIDD_MOD_WCIT, IF_REAL, "Width dependence of cit"), IOP( "wcdsc", B3SOIDD_MOD_WCDSC, IF_REAL, "Width dependence of cdsc"), IOP( "wcdscb", B3SOIDD_MOD_WCDSCB, IF_REAL, "Width dependence of cdscb"), IOP( "wcdscd", B3SOIDD_MOD_WCDSCD, IF_REAL, "Width dependence of cdscd"), IOP( "wpclm", B3SOIDD_MOD_WPCLM, IF_REAL, "Width dependence of pclm"), IOP( "wpdiblc1", B3SOIDD_MOD_WPDIBL1, IF_REAL, "Width dependence of pdiblc1"), IOP( "wpdiblc2", B3SOIDD_MOD_WPDIBL2, IF_REAL, "Width dependence of pdiblc2"), IOP( "wpdiblcb", B3SOIDD_MOD_WPDIBLB, IF_REAL, "Width dependence of pdiblcb"), IOP( "wdrout", B3SOIDD_MOD_WDROUT, IF_REAL, "Width dependence of drout"), IOP( "wpvag", B3SOIDD_MOD_WPVAG, IF_REAL, "Width dependence of pvag"), IOP( "wdelta", B3SOIDD_MOD_WDELTA, IF_REAL, "Width dependence of delta"), IOP( "waii", B3SOIDD_MOD_WAII, IF_REAL, "Width dependence of aii"), IOP( "wbii", B3SOIDD_MOD_WBII, IF_REAL, "Width dependence of bii"), IOP( "wcii", B3SOIDD_MOD_WCII, IF_REAL, "Width dependence of cii"), IOP( "wdii", B3SOIDD_MOD_WDII, IF_REAL, "Width dependence of dii"), IOP( "walpha0", B3SOIDD_MOD_WALPHA0, IF_REAL, "Width dependence of alpha0"), IOP( "walpha1", B3SOIDD_MOD_WALPHA1, IF_REAL, "Width dependence of alpha1"), IOP( "wbeta0", B3SOIDD_MOD_WBETA0, IF_REAL, "Width dependence of beta0"), IOP( "wagidl", B3SOIDD_MOD_WAGIDL, IF_REAL, "Width dependence of agidl"), IOP( "wbgidl", B3SOIDD_MOD_WBGIDL, IF_REAL, "Width dependence of bgidl"), IOP( "wngidl", B3SOIDD_MOD_WNGIDL, IF_REAL, "Width dependence of ngidl"), IOP( "wntun", B3SOIDD_MOD_WNTUN, IF_REAL, "Width dependence of ntun"), IOP( "wndiode", B3SOIDD_MOD_WNDIODE, IF_REAL, "Width dependence of ndiode"), IOP( "wisbjt", B3SOIDD_MOD_WISBJT, IF_REAL, "Width dependence of isbjt"), IOP( "wisdif", B3SOIDD_MOD_WISDIF, IF_REAL, "Width dependence of isdif"), IOP( "wisrec", B3SOIDD_MOD_WISREC, IF_REAL, "Width dependence of isrec"), IOP( "wistun", B3SOIDD_MOD_WISTUN, IF_REAL, "Width dependence of istun"), IOP( "wedl", B3SOIDD_MOD_WEDL, IF_REAL, "Width dependence of edl"), IOP( "wkbjt1", B3SOIDD_MOD_WKBJT1, IF_REAL, "Width dependence of kbjt1"), IOP( "wvsdfb", B3SOIDD_MOD_WVSDFB, IF_REAL, "Width dependence of vsdfb"), IOP( "wvsdth", B3SOIDD_MOD_WVSDTH, IF_REAL, "Width dependence of vsdth"), /* Cross-term Dependence */ IOP( "pnch", B3SOIDD_MOD_PNPEAK, IF_REAL, "Cross-term dependence of nch"), IOP( "pnsub", B3SOIDD_MOD_PNSUB, IF_REAL, "Cross-term dependence of nsub"), IOP( "pngate", B3SOIDD_MOD_PNGATE, IF_REAL, "Cross-term dependence of ngate"), IOP( "pvth0", B3SOIDD_MOD_PVTH0, IF_REAL,"Cross-term dependence of vth0"), IOP( "pk1", B3SOIDD_MOD_PK1, IF_REAL, "Cross-term dependence of k1"), IOP( "pk2", B3SOIDD_MOD_PK2, IF_REAL, "Cross-term dependence of k2"), IOP( "pk3", B3SOIDD_MOD_PK3, IF_REAL, "Cross-term dependence of k3"), IOP( "pk3b", B3SOIDD_MOD_PK3B, IF_REAL, "Cross-term dependence of k3b"), IOP( "pvbsa", B3SOIDD_MOD_PVBSA, IF_REAL, "Cross-term dependence of vbsa"), IOP( "pdelp", B3SOIDD_MOD_PDELP, IF_REAL, "Cross-term dependence of delp"), IOP( "pkb1", B3SOIDD_MOD_PKB1, IF_REAL, "Cross-term dependence of kb1"), IOP( "pkb3", B3SOIDD_MOD_PKB3, IF_REAL, "Cross-term dependence of kb3"), IOP( "pdvbd0", B3SOIDD_MOD_PDVBD0, IF_REAL, "Cross-term dependence of dvbd0"), IOP( "pdvbd1", B3SOIDD_MOD_PDVBD1, IF_REAL, "Cross-term dependence of dvbd1"), IOP( "pw0", B3SOIDD_MOD_PW0, IF_REAL, "Cross-term dependence of w0"), IOP( "pnlx", B3SOIDD_MOD_PNLX, IF_REAL, "Cross-term dependence of nlx"), IOP( "pdvt0", B3SOIDD_MOD_PDVT0, IF_REAL, "Cross-term dependence of dvt0"), IOP( "pdvt1", B3SOIDD_MOD_PDVT1, IF_REAL, "Cross-term dependence of dvt1"), IOP( "pdvt2", B3SOIDD_MOD_PDVT2, IF_REAL, "Cross-term dependence of dvt2"), IOP( "pdvt0w", B3SOIDD_MOD_PDVT0W, IF_REAL, "Cross-term dependence of dvt0w"), IOP( "pdvt1w", B3SOIDD_MOD_PDVT1W, IF_REAL, "Cross-term dependence of dvt1w"), IOP( "pdvt2w", B3SOIDD_MOD_PDVT2W, IF_REAL, "Cross-term dependence of dvt2w"), IOP( "pu0", B3SOIDD_MOD_PU0, IF_REAL, "Cross-term dependence of u0"), IOP( "pua", B3SOIDD_MOD_PUA, IF_REAL, "Cross-term dependence of ua"), IOP( "pub", B3SOIDD_MOD_PUB, IF_REAL, "Cross-term dependence of ub"), IOP( "puc", B3SOIDD_MOD_PUC, IF_REAL, "Cross-term dependence of uc"), IOP( "pvsat", B3SOIDD_MOD_PVSAT, IF_REAL, "Cross-term dependence of vsat"), IOP( "pa0", B3SOIDD_MOD_PA0, IF_REAL, "Cross-term dependence of a0"), IOP( "pags", B3SOIDD_MOD_PAGS, IF_REAL, "Cross-term dependence of ags"), IOP( "pb0", B3SOIDD_MOD_PB0, IF_REAL, "Cross-term dependence of b0"), IOP( "pb1", B3SOIDD_MOD_PB1, IF_REAL, "Cross-term dependence of b1"), IOP( "pketa", B3SOIDD_MOD_PKETA, IF_REAL, "Cross-term dependence of keta"), IOP( "pabp", B3SOIDD_MOD_PABP, IF_REAL, "Cross-term dependence of abp"), IOP( "pmxc", B3SOIDD_MOD_PMXC, IF_REAL, "Cross-term dependence of mxc"), IOP( "padice0", B3SOIDD_MOD_PADICE0, IF_REAL, "Cross-term dependence of adice0"), IOP( "pa1", B3SOIDD_MOD_PA1, IF_REAL, "Cross-term dependence of a1"), IOP( "pa2", B3SOIDD_MOD_PA2, IF_REAL, "Cross-term dependence of a2"), IOP( "prdsw", B3SOIDD_MOD_PRDSW, IF_REAL, "Cross-term dependence of rdsw "), IOP( "pprwb", B3SOIDD_MOD_PPRWB, IF_REAL, "Cross-term dependence of prwb "), IOP( "pprwg", B3SOIDD_MOD_PPRWG, IF_REAL, "Cross-term dependence of prwg "), IOP( "pwr", B3SOIDD_MOD_PWR, IF_REAL, "Cross-term dependence of wr"), IOP( "pnfactor", B3SOIDD_MOD_PNFACTOR, IF_REAL, "Cross-term dependence of nfactor"), IOP( "pdwg", B3SOIDD_MOD_PDWG, IF_REAL, "Cross-term dependence of dwg"), IOP( "pdwb", B3SOIDD_MOD_PDWB, IF_REAL, "Cross-term dependence of dwb"), IOP( "pvoff", B3SOIDD_MOD_PVOFF, IF_REAL, "Cross-term dependence of voff"), IOP( "peta0", B3SOIDD_MOD_PETA0, IF_REAL, "Cross-term dependence of eta0"), IOP( "petab", B3SOIDD_MOD_PETAB, IF_REAL, "Cross-term dependence of etab"), IOP( "pdsub", B3SOIDD_MOD_PDSUB, IF_REAL, "Cross-term dependence of dsub"), IOP( "pcit", B3SOIDD_MOD_PCIT, IF_REAL, "Cross-term dependence of cit"), IOP( "pcdsc", B3SOIDD_MOD_PCDSC, IF_REAL, "Cross-term dependence of cdsc"), IOP( "pcdscb", B3SOIDD_MOD_PCDSCB, IF_REAL, "Cross-term dependence of cdscb"), IOP( "pcdscd", B3SOIDD_MOD_PCDSCD, IF_REAL, "Cross-term dependence of cdscd"), IOP( "ppclm", B3SOIDD_MOD_PPCLM, IF_REAL, "Cross-term dependence of pclm"), IOP( "ppdiblc1", B3SOIDD_MOD_PPDIBL1, IF_REAL, "Cross-term dependence of pdiblc1"), IOP( "ppdiblc2", B3SOIDD_MOD_PPDIBL2, IF_REAL, "Cross-term dependence of pdiblc2"), IOP( "ppdiblcb", B3SOIDD_MOD_PPDIBLB, IF_REAL, "Cross-term dependence of pdiblcb"), IOP( "pdrout", B3SOIDD_MOD_PDROUT, IF_REAL, "Cross-term dependence of drout"), IOP( "ppvag", B3SOIDD_MOD_PPVAG, IF_REAL, "Cross-term dependence of pvag"), IOP( "pdelta", B3SOIDD_MOD_PDELTA, IF_REAL, "Cross-term dependence of delta"), IOP( "paii", B3SOIDD_MOD_PAII, IF_REAL, "Cross-term dependence of aii"), IOP( "pbii", B3SOIDD_MOD_PBII, IF_REAL, "Cross-term dependence of bii"), IOP( "pcii", B3SOIDD_MOD_PCII, IF_REAL, "Cross-term dependence of cii"), IOP( "pdii", B3SOIDD_MOD_PDII, IF_REAL, "Cross-term dependence of dii"), IOP( "palpha0", B3SOIDD_MOD_PALPHA0, IF_REAL, "Cross-term dependence of alpha0"), IOP( "palpha1", B3SOIDD_MOD_PALPHA1, IF_REAL, "Cross-term dependence of alpha1"), IOP( "pbeta0", B3SOIDD_MOD_PBETA0, IF_REAL, "Cross-term dependence of beta0"), IOP( "pagidl", B3SOIDD_MOD_PAGIDL, IF_REAL, "Cross-term dependence of agidl"), IOP( "pbgidl", B3SOIDD_MOD_PBGIDL, IF_REAL, "Cross-term dependence of bgidl"), IOP( "pngidl", B3SOIDD_MOD_PNGIDL, IF_REAL, "Cross-term dependence of ngidl"), IOP( "pntun", B3SOIDD_MOD_PNTUN, IF_REAL, "Cross-term dependence of ntun"), IOP( "pndiode", B3SOIDD_MOD_PNDIODE, IF_REAL, "Cross-term dependence of ndiode"), IOP( "pisbjt", B3SOIDD_MOD_PISBJT, IF_REAL, "Cross-term dependence of isbjt"), IOP( "pisdif", B3SOIDD_MOD_PISDIF, IF_REAL, "Cross-term dependence of isdif"), IOP( "pisrec", B3SOIDD_MOD_PISREC, IF_REAL, "Cross-term dependence of isrec"), IOP( "pistun", B3SOIDD_MOD_PISTUN, IF_REAL, "Cross-term dependence of istun"), IOP( "pedl", B3SOIDD_MOD_PEDL, IF_REAL, "Cross-term dependence of edl"), IOP( "pkbjt1", B3SOIDD_MOD_PKBJT1, IF_REAL, "Cross-term dependence of kbjt1"), IOP( "pvsdfb", B3SOIDD_MOD_PVSDFB, IF_REAL, "Cross-term dependence of vsdfb"), IOP( "pvsdth", B3SOIDD_MOD_PVSDTH, IF_REAL, "Cross-term dependence of vsdth"), /* Added for binning - END */ IP( "nmos", B3SOIDD_MOD_NMOS, IF_FLAG, "Flag to indicate NMOS"), IP( "pmos", B3SOIDD_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"), }; char *B3SOIDDnames[] = { "Drain", "Gate", "Source", "Backgate", "", "Body", "Temp", "Charge", }; int B3SOIDDnSize = NUMELEMS(B3SOIDDnames); int B3SOIDDpTSize = NUMELEMS(B3SOIDDpTable); int B3SOIDDmPTSize = NUMELEMS(B3SOIDDmPTable); int B3SOIDDiSize = sizeof(B3SOIDDinstance); int B3SOIDDmSize = sizeof(B3SOIDDmodel); tmpk8ny_4pz/src/spicelib/devices/bsim3soi_dd/Makefile.am0000644000175000017500000000113213546075722023413 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libbsim3soidd.la libbsim3soidd_la_SOURCES = \ b3soidd.c \ b3soiddacld.c \ b3soiddask.c \ b3soiddcheck.c \ b3soiddcvtest.c \ b3soiddgetic.c \ b3soiddld.c \ b3soiddmask.c \ b3soiddmpar.c \ b3soiddnoi.c \ b3soiddpar.c \ b3soiddpzld.c \ b3soiddset.c \ b3soiddtemp.c \ b3soiddtrunc.c \ b3soidddef.h \ b3soiddext.h \ b3soiddinit.c \ b3soiddinit.h \ b3soidditf.h AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in EXTRA_DIST = BsimTerms_use tmpk8ny_4pz/src/spicelib/devices/bsim3soi_dd/b3soiddld.c0000644000175000017500000053170213546075722023405 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: Weidong Liu and Pin Su Feb 1999 Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang Modified by Pin Su, Wei Jin 99/9/27 Modified by Paolo Nenzi 2002 File: b3soiddld.c 98/5/01 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMDD2.1 release */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b3soidddef.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define Charge_q 1.60219e-19 #define KboQ 8.617087e-5 /* Kb / q */ #define Eg300 1.115 /* energy gap at 300K */ #define DELTA_1 0.02 #define DELTA_2 0.02 #define DELTA_3 0.02 #define DELTA_4 0.02 #define DELT_Vbs0eff 0.02 #define DELT_Vbsmos 0.005 #define DELT_Vbseff 0.005 #define DELT_Xcsat 0.2 #define DELT_Vbs0dio 1e-7 #define DELTA_VFB 0.02 #define DELTA_Vcscv 0.0004 #define DELT_Vbsdio 0.01 #define CONST_2OV3 0.6666666666 #define OFF_Vbsdio 2e-2 #define OFF_Vbs0_dio 2.02e-2 #define QEX_FACT 20 /* B3SOIDDSmartVbs(Vbs, Old, here, check) * Smart Vbs guess. */ static double B3SOIDDSmartVbs(double New, double Old, B3SOIDDinstance *here, CKTcircuit *ckt, int *check) { NG_IGNORE(Old); NG_IGNORE(check); /* only do it for floating body and DC */ if (here->B3SOIDDfloat && (ckt->CKTmode & (MODEDC | MODEDCOP))) { /* Vbs cannot be negative in DC */ if (New < 0.0) New = 0.0; } return(New); } /* B3SOIDDlimit(vnew,vold) * limits the per-iteration change of any absolute voltage value */ static double B3SOIDDlimit(double vnew, double vold, double limit, int *check) { double T0, T1; if (isnan (vnew) || isnan (vold)) { fprintf(stderr, "Alberto says: YOU TURKEY! The limiting function received NaN.\n"); fprintf(stderr, "New prediction returns to 0.0!\n"); vnew = 0.0; *check = 1; } T0 = vnew - vold; T1 = fabs(T0); if (T1 > limit) { if (T0 > 0.0) vnew = vold + limit; else vnew = vold - limit; *check = 1; } return vnew; } int B3SOIDDload(GENmodel *inModel, CKTcircuit *ckt) { B3SOIDDmodel *model = (B3SOIDDmodel*)inModel; B3SOIDDinstance *here; int selfheat; double Gmin; double ag0, qgd, qgs, von, cbhat, VgstNVt, ExpVgst = 0.0; double cdhat, cdreq, ceqbd, ceqbs, ceqqb, ceqqd, ceqqg, ceq, geq; double arg; double delvbd, delvbs, delvds, delvgd, delvgs; double Vfbeff, dVfbeff_dVd, dVfbeff_dVb, V3, V4; double PhiBSWG, MJSWG; double gcgdb, gcggb, gcgsb, gcgeb, gcgT; double gcsdb, gcsgb, gcssb, gcseb, gcsT; double gcddb, gcdgb, gcdsb, gcdeb, gcdT; double gcbdb, gcbgb, gcbsb, gcbeb, gcbT; double gcedb, gcegb, gcesb, gceeb, gceT; double gcTt, gTtg, gTtb, gTte, gTtdp, gTtt, gTtsp; double vbd, vbs, vds, vgb, vgd, vgs, vgdo; #ifndef PREDICTOR double xfact; #endif double vg, vd, vs, vp, ve, vb; double Vds, Vgs, Vbs, Gmbs, FwdSum, RevSum; double Vgs_eff, Vfb, dVfb_dVb, dVfb_dVd, dVfb_dT; double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth = 0.0; double dVth_dVb, dVth_dVd, dVth_dT; double Vgst, dVgs_eff_dVg; double n, dn_dVb, Vtm; double ExpArg, V0; double ueff = 0.0, dueff_dVg, dueff_dVd, dueff_dVb, dueff_dT; double Esat, Vdsat = 0.0; double EsatL, dEsatL_dVg, dEsatL_dVd, dEsatL_dVb, dEsatL_dT; double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, dVdsat_dT, Vasat; double dVasat_dVg, dVasat_dVb, dVasat_dVd, dVasat_dT; double Va, dVa_dVd, dVa_dVg, dVa_dVb, dVa_dT; double Vbseff, dVbseff_dVb; double One_Third_CoxWL, Two_Third_CoxWL, CoxWL; double T0, dT0_dVg, dT0_dVd, dT0_dVb, dT0_dVc, dT0_dVe, dT0_dT; double T1, dT1_dVg, dT1_dVd, dT1_dVb, dT1_dVc, dT1_dVe, dT1_dT; double T2, dT2_dVg, dT2_dVd, dT2_dVb, dT2_dVc, dT2_dVe, dT2_dT; double T3, dT3_dVg, dT3_dVd, dT3_dVb, dT3_dVc, dT3_dVe, dT3_dT; double T4, dT4_dVg, dT4_dVd, dT4_dVb, dT4_dVc, dT4_dVe, dT4_dT; double T5, dT5_dVg, dT5_dVd, dT5_dVb, dT5_dVc, dT5_dVe, dT5_dT; double T6, dT6_dVg, dT6_dVd, dT6_dVb, dT6_dVc, dT6_dVe, dT6_dT; double T7; double T8; double T9; double T10; double T11, T12; double Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVb; double VACLM, dVACLM_dVg, dVACLM_dVd, dVACLM_dVb, dVACLM_dT; double VADIBL, dVADIBL_dVg, dVADIBL_dVd, dVADIBL_dVb, dVADIBL_dT; double Xdep, dXdep_dVb, lt1, dlt1_dVb, ltw, dltw_dVb; double Delt_vth, dDelt_vth_dVb, dDelt_vth_dT; double Theta0, dTheta0_dVb; double TempRatio, tmp1, tmp2, tmp3, tmp4; double DIBL_Sft, dDIBL_Sft_dVd, Lambda, dLambda_dVg; double a1; double Vgsteff = 0.0, dVgsteff_dVg, dVgsteff_dVd, dVgsteff_dVb; double dVgsteff_dVe, dVgsteff_dT; double Vdseff = 0.0, dVdseff_dVg, dVdseff_dVd, dVdseff_dVb, dVdseff_dT; double VdseffCV, dVdseffCV_dVg, dVdseffCV_dVd, dVdseffCV_dVb; double diffVds; double dAbulk_dVg, dn_dVd ; double beta, dbeta_dVg, dbeta_dVd, dbeta_dVb, dbeta_dT; double gche, dgche_dVg, dgche_dVd, dgche_dVb, dgche_dT; double fgche1, dfgche1_dVg, dfgche1_dVd, dfgche1_dVb, dfgche1_dT; double fgche2, dfgche2_dVg, dfgche2_dVd, dfgche2_dVb, dfgche2_dT; double Idl, dIdl_dVg, dIdl_dVd, dIdl_dVb, dIdl_dT; double Ids = 0.0, Gm, Gds = 0.0, Gmb; double CoxWovL; double Rds, dRds_dVg, dRds_dVb, dRds_dT, WVCox, WVCoxRds; double Vgst2Vtm, dVgst2Vtm_dT, VdsatCV, dVdsatCV_dVg, dVdsatCV_dVb; double Leff, Weff, dWeff_dVg, dWeff_dVb; double AbulkCV, dAbulkCV_dVb; double qgdo, qgso, cgdo, cgso; double dxpart, sxpart; struct b3soiddSizeDependParam *pParam; int ByPass, Check, ChargeComputationNeeded = 0, error; double gbbsp, gbbdp, gbbg, gbbb, gbbe, gbbp, gbbT; double gddpsp, gddpdp, gddpg, gddpb, gddpe, gddpT; double gsspsp, gsspdp, gsspg, gsspb, gsspe, gsspT; double Gbpbs, Gbpgs, Gbpds, Gbpes, Gbpps, GbpT; double ves, ved, veb, vge = 0.0, delves, vedo, delved; double vps, vpd, Vps, delvps; double Vbd, Ves, Vesfb, sqrtXdep, DeltVthtemp, dDeltVthtemp_dT; double Vbp, dVbp_dVp, dVbp_dVb, dVbp_dVg, dVbp_dVd, dVbp_dVe, dVbp_dT; double Vpsdio, dVpsdio_dVg, dVpsdio_dVd, dVpsdio_dVe, dVpsdio_dVp, dVpsdio_dT; double DeltVthw, dDeltVthw_dVb, dDeltVthw_dT; double dVbseff_dVd, dVbseff_dVe, dVbseff_dT; double dVdsat_dVc, dVasat_dVc, dVACLM_dVc, dVADIBL_dVc, dVa_dVc; double dfgche1_dVc, dfgche2_dVc, dgche_dVc, dVdseff_dVc, dIdl_dVc; double Gm0, Gds0, Gmb0, GmT0, Gmc, Gme, GmT, dVbseff_dVg; double dDIBL_Sft_dVb, BjtA, dBjtA_dVd; double diffVdsii ; double Idgidl = 0.0, Gdgidld, Gdgidlg, Isgidl = 0.0, Gsgidlg; double Gjsd, Gjsb, GjsT, Gjdd, Gjdb, GjdT; double Ibp = 0.0, Iii = 0.0, Giid, Giig, Giib, Giie, GiiT, Gcd, Gcb, GcT; double ceqbody, ceqbodcon = 0.0; double gppg = 0.0, gppdp = 0.0, gppb = 0.0, gppe = 0.0, gppp = 0.0; double gppsp = 0.0, gppT; double delTemp, deldelTemp, Temp; double ceqth, ceqqth; double K1; double qjs = 0.0, gcjsbs, gcjsT; double qjd = 0.0, gcjdbs, gcjdds, gcjdT; double qge; double ceqqe; double ni, Eg, Cbox, Nfb, CboxWL; double cjsbs; double Qbf0, Qsicv, dVfbeff_dVrg, Cbe = 0.0; double qinv = 0.0, qgate = 0.0, qbody = 0.0, qdrn = 0.0, qsrc, qsub = 0.0; double cqgate, cqbody = 0.0, cqdrn = 0.0, cqsub, cqtemp; double Cgg, Cgd, Cgb, Cge; double Csg, Csd, Csb, Cse, Cbg = 0.0, Cbd = 0.0, Cbb = 0.0; double Cgg1, Cgb1, Cgd1, Csg1, Csd1, Csb1; double Vbs0t = 0.0, dVbs0t_dT ; double Vbs0 = 0.0 ,dVbs0_dVe, dVbs0_dT; double Vbs0eff = 0.0 ,dVbs0eff_dVg ,dVbs0eff_dVd ,dVbs0eff_dVe, dVbs0eff_dT; double Vbs0teff = 0.0,dVbs0teff_dVg ,dVbs0teff_dVd, dVbs0teff_dVe; double dVbs0teff_dT; double Vbsdio = 0.0, dVbsdio_dVg, dVbsdio_dVd, dVbsdio_dVe, dVbsdio_dVb; double dVbsdio_dT; double Vthfd = 0.0 ,dVthfd_dVd ,dVthfd_dVe, dVthfd_dT; double Vbs0mos = 0.0 ,dVbs0mos_dVe, dVbs0mos_dT; double Vbsmos ,dVbsmos_dVg ,dVbsmos_dVb ,dVbsmos_dVd, dVbsmos_dVe, dVbsmos_dT; double Abeff ,dAbeff_dVg ,dAbeff_dVb, dAbeff_dVc; double Vcs ,dVcs_dVg ,dVcs_dVb ,dVcs_dVd ,dVcs_dVe, dVcs_dT; double Xcsat = 0.0, dXcsat_dVg, dXcsat_dVc; double Vdsatii ,dVdsatii_dVg ,dVdsatii_dVd, dVdsatii_dVb, dVdsatii_dT; double Vdseffii ,dVdseffii_dVg ,dVdseffii_dVd, dVdseffii_dVb, dVdseffii_dT; double VcsCV = 0.0 ,dVcsCV_dVg = 0.0 ,dVcsCV_dVb = 0.0; double dVcsCV_dVd = 0.0 ,dVcsCV_dVc = 0.0; double VdsCV = 0.0 ,dVdsCV_dVg = 0.0 ,dVdsCV_dVb = 0.0; double dVdsCV_dVd = 0.0 ,dVdsCV_dVc = 0.0; double Phisc ,dPhisc_dVg ,dPhisc_dVb ,dPhisc_dVd, dPhisc_dVc; double Phisd ,dPhisd_dVg ,dPhisd_dVb ,dPhisd_dVd, dPhisd_dVc; double sqrtPhisc; double sqrtPhisd; double Xc = 0.0 ,dXc_dVg = 0.0 ,dXc_dVb = 0.0 ,dXc_dVd = 0.0 ,dXc_dVc = 0.0; double Ibjt = 0.0 ,dIbjt_dVb ,dIbjt_dVd ,dIbjt_dT = 0.0; double Ibs1 ,dIbs1_dVb ,dIbs1_dT = 0.0; double Ibs2 ,dIbs2_dVb ,dIbs2_dT = 0.0; double Ibs3 ,dIbs3_dVb ,dIbs3_dVd, dIbs3_dT = 0.0; double Ibs4 ,dIbs4_dVb ,dIbs4_dT = 0.0; double Ibd1 ,dIbd1_dVb ,dIbd1_dVd ,dIbd1_dT = 0.0; double Ibd2 ,dIbd2_dVb ,dIbd2_dVd ,dIbd2_dT = 0.0; double Ibd3 ,dIbd3_dVb ,dIbd3_dVd ,dIbd3_dT = 0.0; double Ibd4 ,dIbd4_dVb ,dIbd4_dVd ,dIbd4_dT = 0.0; double ExpVbs1, dExpVbs1_dVb, dExpVbs1_dT = 0.0; double ExpVbs2, dExpVbs2_dVb, dExpVbs2_dT = 0.0; double ExpVbs4 = 0.0, dExpVbs4_dVb = 0.0, dExpVbs4_dT = 0.0; double ExpVbd1, dExpVbd1_dVb, dExpVbd1_dT = 0.0; double ExpVbd2, dExpVbd2_dVb, dExpVbd2_dT = 0.0; double ExpVbd4 = 0.0, dExpVbd4_dVb = 0.0, dExpVbd4_dT = 0.0; double WTsi, NVtm1, NVtm2; double Ic = 0.0; double Ibs = 0.0; double Ibd = 0.0; double Nomi ,dNomi_dVg ,dNomi_dVb ,dNomi_dVd ,dNomi_dVc; double Denomi ,dDenomi_dVg ,dDenomi_dVd ,dDenomi_dVb ,dDenomi_dVc, dDenomi_dT; double Qbf = 0.0 ,dQbf_dVg = 0.0 ,dQbf_dVb = 0.0 ,dQbf_dVd = 0.0; double dQbf_dVc = 0.0 ,dQbf_dVe = 0.0; double Qsubs1 = 0.0 ,dQsubs1_dVg ,dQsubs1_dVb ,dQsubs1_dVd ,dQsubs1_dVc; double Qsubs2 = 0.0 ,dQsubs2_dVg ,dQsubs2_dVb ,dQsubs2_dVd ,dQsubs2_dVc ,dQsubs2_dVe; double Qsub0 = 0.0 ,dQsub0_dVg ,dQsub0_dVb ,dQsub0_dVd ; double Qac0 = 0.0 ,dQac0_dVb ,dQac0_dVd; double Qdep0 ,dQdep0_dVb; double Qe1 = 0.0 , dQe1_dVg ,dQe1_dVb, dQe1_dVd, dQe1_dVe, dQe1_dT; double Ce1g ,Ce1b ,Ce1d ,Ce1e, Ce1T; double Ce2g ,Ce2b ,Ce2d ,Ce2e, Ce2T; double Qe2 = 0.0 , dQe2_dVg ,dQe2_dVb, dQe2_dVd, dQe2_dVe, dQe2_dT; double dQbf_dVrg = 0.0, dQac0_dVrg, dQsub0_dVrg; double dQsubs2_dVrg, dQbf0_dVe, dQbf0_dT; /* for self-heating */ double vbi, vfbb, phi, sqrtPhi, Xdep0, jbjt, jdif, jrec, jtun, u0temp, vsattemp; double rds0, ua, ub, uc; double dvbi_dT, dvfbb_dT, djbjt_dT, djdif_dT, djrec_dT, djtun_dT, du0temp_dT; double dvsattemp_dT, drds0_dT, dua_dT, dub_dT, duc_dT, dni_dT, dVtm_dT; double dVfbeff_dT, dQac0_dT, dQsub0_dT; double dQbf_dT = 0.0, dVdsCV_dT = 0.0, dPhisd_dT; double dNomi_dT, dXc_dT = 0.0, dQsubs1_dT, dQsubs2_dT; double dVcsCV_dT = 0.0, dPhisc_dT, dQsicv_dT; double CbT, CsT, CgT; double Qex, dQex_dVg, dQex_dVb, dQex_dVd, dQex_dVe, dQex_dT; /* clean up last */ FILE *fpdebug = NULL; /* end clean up */ int nandetect; static int nanfound = 0; char nanmessage [12]; double m; for (; model != NULL; model = B3SOIDDnextModel(model)) { for (here = B3SOIDDinstances(model); here != NULL; here = B3SOIDDnextInstance(here)) { Check = 0; ByPass = 0; selfheat = (model->B3SOIDDshMod == 1) && (here->B3SOIDDrth0 != 0.0); pParam = here->pParam; if (here->B3SOIDDdebugMod > 3) { if (model->B3SOIDDtype > 0) fpdebug = fopen("b3soiddn.log", "a"); else fpdebug = fopen("b3soiddp.log", "a"); fprintf(fpdebug, "******* Time : %.5e ******* Device: %s Iteration: %d\n", ckt->CKTtime, here->B3SOIDDname, here->B3SOIDDiterations); } if ((ckt->CKTmode & MODEINITSMSIG)) { vbs = *(ckt->CKTstate0 + here->B3SOIDDvbs); vgs = *(ckt->CKTstate0 + here->B3SOIDDvgs); ves = *(ckt->CKTstate0 + here->B3SOIDDves); vps = *(ckt->CKTstate0 + here->B3SOIDDvps); vds = *(ckt->CKTstate0 + here->B3SOIDDvds); delTemp = *(ckt->CKTstate0 + here->B3SOIDDdeltemp); vg = *(ckt->CKTrhsOld + here->B3SOIDDgNode); vd = *(ckt->CKTrhsOld + here->B3SOIDDdNodePrime); vs = *(ckt->CKTrhsOld + here->B3SOIDDsNodePrime); vp = *(ckt->CKTrhsOld + here->B3SOIDDpNode); ve = *(ckt->CKTrhsOld + here->B3SOIDDeNode); vb = *(ckt->CKTrhsOld + here->B3SOIDDbNode); if (here->B3SOIDDdebugMod > 2) { fprintf(fpdebug, "... INIT SMSIG ...\n"); } if (here->B3SOIDDdebugMod > 0) { fprintf(stderr,"DC op. point converge with %d iterations\n", here->B3SOIDDiterations); } } else if ((ckt->CKTmode & MODEINITTRAN)) { vbs = *(ckt->CKTstate1 + here->B3SOIDDvbs); vgs = *(ckt->CKTstate1 + here->B3SOIDDvgs); ves = *(ckt->CKTstate1 + here->B3SOIDDves); vps = *(ckt->CKTstate1 + here->B3SOIDDvps); vds = *(ckt->CKTstate1 + here->B3SOIDDvds); delTemp = *(ckt->CKTstate1 + here->B3SOIDDdeltemp); vg = *(ckt->CKTrhsOld + here->B3SOIDDgNode); vd = *(ckt->CKTrhsOld + here->B3SOIDDdNodePrime); vs = *(ckt->CKTrhsOld + here->B3SOIDDsNodePrime); vp = *(ckt->CKTrhsOld + here->B3SOIDDpNode); ve = *(ckt->CKTrhsOld + here->B3SOIDDeNode); vb = *(ckt->CKTrhsOld + here->B3SOIDDbNode); if (here->B3SOIDDdebugMod > 2) { fprintf(fpdebug, "... Init Transient ....\n"); } if (here->B3SOIDDdebugMod > 0) { fprintf(stderr, "Transient operation point converge with %d iterations\n", here->B3SOIDDiterations); } here->B3SOIDDiterations = 0; } else if ((ckt->CKTmode & MODEINITJCT) && !here->B3SOIDDoff) { vds = model->B3SOIDDtype * here->B3SOIDDicVDS; vgs = model->B3SOIDDtype * here->B3SOIDDicVGS; ves = model->B3SOIDDtype * here->B3SOIDDicVES; vbs = model->B3SOIDDtype * here->B3SOIDDicVBS; vps = model->B3SOIDDtype * here->B3SOIDDicVPS; vg = vd = vs = vp = ve = 0.0; here->B3SOIDDiterations = 0; /* initialize iteration number */ delTemp = 0.0; here->B3SOIDDphi = pParam->B3SOIDDphi; if (here->B3SOIDDdebugMod > 2) fprintf(fpdebug, "... INIT JCT ...\n"); if ((vds == 0.0) && (vgs == 0.0) && (vbs == 0.0) && ((ckt->CKTmode & (MODETRAN | MODEAC|MODEDCOP | MODEDCTRANCURVE)) || (!(ckt->CKTmode & MODEUIC)))) { vbs = 0.0; vgs = model->B3SOIDDtype*0.1 + pParam->B3SOIDDvth0; vds = 0.0; ves = 0.0; vps = 0.0; } } else if ((ckt->CKTmode & (MODEINITJCT | MODEINITFIX)) && (here->B3SOIDDoff)) { delTemp = vps = vbs = vgs = vds = ves = 0.0; vg = vd = vs = vp = ve = 0.0; here->B3SOIDDiterations = 0; /* initialize iteration number */ } else { #ifndef PREDICTOR if ((ckt->CKTmode & MODEINITPRED)) { xfact = ckt->CKTdelta / ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->B3SOIDDvbs) = *(ckt->CKTstate1 + here->B3SOIDDvbs); vbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B3SOIDDvbs)) - (xfact * (*(ckt->CKTstate2 + here->B3SOIDDvbs))); *(ckt->CKTstate0 + here->B3SOIDDvgs) = *(ckt->CKTstate1 + here->B3SOIDDvgs); vgs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B3SOIDDvgs)) - (xfact * (*(ckt->CKTstate2 + here->B3SOIDDvgs))); *(ckt->CKTstate0 + here->B3SOIDDves) = *(ckt->CKTstate1 + here->B3SOIDDves); ves = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B3SOIDDves)) - (xfact * (*(ckt->CKTstate2 + here->B3SOIDDves))); *(ckt->CKTstate0 + here->B3SOIDDvps) = *(ckt->CKTstate1 + here->B3SOIDDvps); vps = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B3SOIDDvps)) - (xfact * (*(ckt->CKTstate2 + here->B3SOIDDvps))); *(ckt->CKTstate0 + here->B3SOIDDvds) = *(ckt->CKTstate1 + here->B3SOIDDvds); vds = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B3SOIDDvds)) - (xfact * (*(ckt->CKTstate2 + here->B3SOIDDvds))); *(ckt->CKTstate0 + here->B3SOIDDvbd) = *(ckt->CKTstate0 + here->B3SOIDDvbs) - *(ckt->CKTstate0 + here->B3SOIDDvds); *(ckt->CKTstate0 + here->B3SOIDDvg) = *(ckt->CKTstate1 + here->B3SOIDDvg); *(ckt->CKTstate0 + here->B3SOIDDvd) = *(ckt->CKTstate1 + here->B3SOIDDvd); *(ckt->CKTstate0 + here->B3SOIDDvs) = *(ckt->CKTstate1 + here->B3SOIDDvs); *(ckt->CKTstate0 + here->B3SOIDDvp) = *(ckt->CKTstate1 + here->B3SOIDDvp); *(ckt->CKTstate0 + here->B3SOIDDve) = *(ckt->CKTstate1 + here->B3SOIDDve); /* Only predict ve */ ve = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B3SOIDDve)) - (xfact * (*(ckt->CKTstate2 + here->B3SOIDDve))); /* Then update vg, vs, vb, vd, vp base on ve */ vs = ve - model->B3SOIDDtype * ves; vg = model->B3SOIDDtype * vgs + vs; vd = model->B3SOIDDtype * vds + vs; vb = model->B3SOIDDtype * vbs + vs; vp = model->B3SOIDDtype * vps + vs; delTemp = (1.0 + xfact)* (*(ckt->CKTstate1 + here->B3SOIDDdeltemp))-(xfact * (*(ckt->CKTstate2 + here->B3SOIDDdeltemp))); if (selfheat) { here->B3SOIDDphi = 2.0 * here->B3SOIDDvtm * log (pParam->B3SOIDDnpeak / here->B3SOIDDni); } if (here->B3SOIDDdebugMod > 0) { fprintf(stderr, "Time = %.6e converge with %d iterations\n", ckt->CKTtime, here->B3SOIDDiterations); } if (here->B3SOIDDdebugMod > 2) { fprintf(fpdebug, "... PREDICTOR calculation ....\n"); } here->B3SOIDDiterations = 0; } else { #endif /* PREDICTOR */ vg = B3SOIDDlimit(*(ckt->CKTrhsOld + here->B3SOIDDgNode), *(ckt->CKTstate0 + here->B3SOIDDvg), 3.0, &Check); vd = B3SOIDDlimit(*(ckt->CKTrhsOld + here->B3SOIDDdNodePrime), *(ckt->CKTstate0 + here->B3SOIDDvd), 3.0, &Check); vs = B3SOIDDlimit(*(ckt->CKTrhsOld + here->B3SOIDDsNodePrime), *(ckt->CKTstate0 + here->B3SOIDDvs), 3.0, &Check); vp = B3SOIDDlimit(*(ckt->CKTrhsOld + here->B3SOIDDpNode), *(ckt->CKTstate0 + here->B3SOIDDvp), 3.0, &Check); ve = B3SOIDDlimit(*(ckt->CKTrhsOld + here->B3SOIDDeNode), *(ckt->CKTstate0 + here->B3SOIDDve), 3.0, &Check); delTemp = *(ckt->CKTrhsOld + here->B3SOIDDtempNode); vbs = model->B3SOIDDtype * (*(ckt->CKTrhsOld+here->B3SOIDDbNode) - *(ckt->CKTrhsOld+here->B3SOIDDsNodePrime)); vps = model->B3SOIDDtype * (vp - vs); vgs = model->B3SOIDDtype * (vg - vs); ves = model->B3SOIDDtype * (ve - vs); vds = model->B3SOIDDtype * (vd - vs); if (here->B3SOIDDdebugMod > 2) { fprintf(fpdebug, "... DC calculation ....\n"); fprintf(fpdebug, "Vg = %.10f; Vb = %.10f; Vs = %.10f\n", *(ckt->CKTrhsOld + here->B3SOIDDgNode), *(ckt->CKTrhsOld + here->B3SOIDDbNode), *(ckt->CKTrhsOld + here->B3SOIDDsNode)); fprintf(fpdebug, "Vd = %.10f; Vsp = %.10f; Vdp = %.10f\n", *(ckt->CKTrhsOld + here->B3SOIDDdNode), *(ckt->CKTrhsOld + here->B3SOIDDsNodePrime), *(ckt->CKTrhsOld + here->B3SOIDDdNodePrime)); fprintf(fpdebug, "Ve = %.10f; Vp = %.10f; delTemp = %.10f\n", *(ckt->CKTrhsOld + here->B3SOIDDeNode), *(ckt->CKTrhsOld + here->B3SOIDDpNode), *(ckt->CKTrhsOld + here->B3SOIDDtempNode)); } #ifndef PREDICTOR } #endif /* PREDICTOR */ vbd = vbs - vds; vgd = vgs - vds; ved = ves - vds; vgdo = *(ckt->CKTstate0 + here->B3SOIDDvgs) - *(ckt->CKTstate0 + here->B3SOIDDvds); vedo = *(ckt->CKTstate0 + here->B3SOIDDves) - *(ckt->CKTstate0 + here->B3SOIDDvds); delvbs = vbs - *(ckt->CKTstate0 + here->B3SOIDDvbs); delvbd = vbd - *(ckt->CKTstate0 + here->B3SOIDDvbd); delvgs = vgs - *(ckt->CKTstate0 + here->B3SOIDDvgs); delves = ves - *(ckt->CKTstate0 + here->B3SOIDDves); delvps = vps - *(ckt->CKTstate0 + here->B3SOIDDvps); deldelTemp = delTemp - *(ckt->CKTstate0 + here->B3SOIDDdeltemp); delvds = vds - *(ckt->CKTstate0 + here->B3SOIDDvds); delvgd = vgd - vgdo; delved = ved - vedo; if (here->B3SOIDDmode >= 0) { cdhat = here->B3SOIDDcd + (here->B3SOIDDgm-here->B3SOIDDgjdg) * delvgs + (here->B3SOIDDgds - here->B3SOIDDgjdd) * delvds + (here->B3SOIDDgmbs - here->B3SOIDDgjdb) * delvbs + (here->B3SOIDDgme - here->B3SOIDDgjde) * delves + (here->B3SOIDDgmT - here->B3SOIDDgjdT) * deldelTemp; } else { cdhat = here->B3SOIDDcd + (here->B3SOIDDgm-here->B3SOIDDgjdg) * delvgd - (here->B3SOIDDgds - here->B3SOIDDgjdd) * delvds + (here->B3SOIDDgmbs - here->B3SOIDDgjdb) * delvbd + (here->B3SOIDDgme - here->B3SOIDDgjde) * delved + (here->B3SOIDDgmT - here->B3SOIDDgjdT) * deldelTemp; } cbhat = here->B3SOIDDcb + here->B3SOIDDgbgs * delvgs + here->B3SOIDDgbbs * delvbs + here->B3SOIDDgbds * delvds + here->B3SOIDDgbes * delves + here->B3SOIDDgbps * delvps + here->B3SOIDDgbT * deldelTemp; #ifndef NOBYPASS /* following should be one big if connected by && all over * the place, but some C compilers can't handle that, so * we split it up here to let them digest it in stages */ if (here->B3SOIDDdebugMod > 3) { fprintf(fpdebug, "Convergent Criteria : vbs %d vds %d vgs %d ves %d vps %d temp %d\n", ((fabs(delvbs) < (ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->B3SOIDDvbs))) + ckt->CKTvoltTol))) ? 1 : 0, ((fabs(delvds) < (ckt->CKTreltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0+here->B3SOIDDvds))) + ckt->CKTvoltTol))) ? 1 : 0, ((fabs(delvgs) < (ckt->CKTreltol * MAX(fabs(vgs), fabs(*(ckt->CKTstate0+here->B3SOIDDvgs))) + ckt->CKTvoltTol))) ? 1 : 0, ((fabs(delves) < (ckt->CKTreltol * MAX(fabs(ves), fabs(*(ckt->CKTstate0+here->B3SOIDDves))) + ckt->CKTvoltTol))) ? 1 : 0, ((fabs(delvps) < (ckt->CKTreltol * MAX(fabs(vps), fabs(*(ckt->CKTstate0+here->B3SOIDDvps))) + ckt->CKTvoltTol))) ? 1 : 0, ((fabs(deldelTemp) < (ckt->CKTreltol * MAX(fabs(delTemp), fabs(*(ckt->CKTstate0+here->B3SOIDDdeltemp))) + ckt->CKTvoltTol*1e4))) ? 1 : 0); fprintf(fpdebug, "delCd %.4e, delCb %.4e\n", fabs(cdhat - here->B3SOIDDcd) , fabs(cbhat - here->B3SOIDDcb)); } if ((!(ckt->CKTmode & MODEINITPRED)) && (ckt->CKTbypass) && Check == 0) if ((fabs(delvbs) < (ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0+here->B3SOIDDvbs))) + ckt->CKTvoltTol)) ) if ((fabs(delvbd) < (ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0+here->B3SOIDDvbd))) + ckt->CKTvoltTol)) ) if ((fabs(delvgs) < (ckt->CKTreltol * MAX(fabs(vgs), fabs(*(ckt->CKTstate0+here->B3SOIDDvgs))) + ckt->CKTvoltTol))) if ((fabs(delves) < (ckt->CKTreltol * MAX(fabs(ves), fabs(*(ckt->CKTstate0+here->B3SOIDDves))) + ckt->CKTvoltTol))) if ( (here->B3SOIDDbodyMod == 0) || (here->B3SOIDDbodyMod == 2) || (fabs(delvps) < (ckt->CKTreltol * MAX(fabs(vps), fabs(*(ckt->CKTstate0+here->B3SOIDDvps))) + ckt->CKTvoltTol)) ) if ( (here->B3SOIDDtempNode == 0) || (fabs(deldelTemp) < (ckt->CKTreltol * MAX(fabs(delTemp), fabs(*(ckt->CKTstate0+here->B3SOIDDdeltemp))) + ckt->CKTvoltTol*1e4))) if ((fabs(delvds) < (ckt->CKTreltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0+here->B3SOIDDvds))) + ckt->CKTvoltTol))) if ((fabs(cdhat - here->B3SOIDDcd) < ckt->CKTreltol * MAX(fabs(cdhat),fabs(here->B3SOIDDcd)) + ckt->CKTabstol)) if ((fabs(cbhat - here->B3SOIDDcb) < ckt->CKTreltol * MAX(fabs(cbhat),fabs(here->B3SOIDDcb)) + ckt->CKTabstol) ) { /* bypass code */ vbs = *(ckt->CKTstate0 + here->B3SOIDDvbs); vbd = *(ckt->CKTstate0 + here->B3SOIDDvbd); vgs = *(ckt->CKTstate0 + here->B3SOIDDvgs); ves = *(ckt->CKTstate0 + here->B3SOIDDves); vps = *(ckt->CKTstate0 + here->B3SOIDDvps); vds = *(ckt->CKTstate0 + here->B3SOIDDvds); delTemp = *(ckt->CKTstate0 + here->B3SOIDDdeltemp); /* calculate Vds for temperature conductance calculation in bypass (used later when filling Temp node matrix) */ Vds = here->B3SOIDDmode > 0 ? vds : -vds; vgd = vgs - vds; vgb = vgs - vbs; veb = ves - vbs; if (here->B3SOIDDdebugMod > 2) { fprintf(stderr, "Bypass for %s...\n", here->B3SOIDDname); fprintf(fpdebug, "... By pass ....\n"); fprintf(fpdebug, "vgs=%.4f, vds=%.4f, vbs=%.4f, ", vgs, vds, vbs); fprintf(fpdebug, "ves=%.4f, vps=%.4f\n", ves, vps); } if ((ckt->CKTmode & (MODETRAN | MODEAC)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) { ByPass = 1; goto line755; } else { goto line850; } } #endif /*NOBYPASS*/ von = here->B3SOIDDvon; if ((here->B3SOIDDdebugMod > 1) || (here->B3SOIDDdebugMod == -1)) { here->B3SOIDDdum1 = here->B3SOIDDdum2 = here->B3SOIDDdum3 = 0.0; here->B3SOIDDdum4 = here->B3SOIDDdum5 = 0.0; Qac0 = Qsub0 = Qsubs1 = Qsubs2 = Qbf = Qe1 = Qe2 = 0.0; qjs = qjd = Cbg = Cbb = Cbd = Cbe = Xc = qdrn = qgate = 0.0; qbody = qsub = 0.0; } if (here->B3SOIDDdebugMod > 2) { fprintf(fpdebug, "Limited : vgs = %.8f\n", vgs); fprintf(fpdebug, "Limited : vds = %.8f\n", vds); } if (*(ckt->CKTstate0 + here->B3SOIDDvds) >= 0.0) T0 = *(ckt->CKTstate0 + here->B3SOIDDvbs); else T0 = *(ckt->CKTstate0 + here->B3SOIDDvbd); if (here->B3SOIDDdebugMod > 2) fprintf(fpdebug, "Before lim : vbs = %.8f, after = ", T0); if (vds >= 0.0) { vbs = B3SOIDDlimit(vbs, T0, 0.2, &Check); vbs = B3SOIDDSmartVbs(vbs, T0, here, ckt, &Check); vbd = vbs - vds; vb = model->B3SOIDDtype * vbs + vs; if (here->B3SOIDDdebugMod > 2) fprintf(fpdebug, "%.8f\n", vbs); } else { vbd = B3SOIDDlimit(vbd, T0, 0.2, &Check); vbd = B3SOIDDSmartVbs(vbd, T0, here, ckt, &Check); vbs = vbd + vds; vb = model->B3SOIDDtype * vbs + vd; if (here->B3SOIDDdebugMod > 2) fprintf(fpdebug, "%.8f\n", vbd); } delTemp =B3SOIDDlimit(delTemp, *(ckt->CKTstate0 + here->B3SOIDDdeltemp),5.0,&Check); } /* Calculate temperature dependent values for self-heating effect */ Temp = delTemp + ckt->CKTtemp; /* for debugging Temp = ckt->CKTtemp; selfheat = 1; if (here->B3SOIDDname[1] == '2') { Temp += 0.01; } */ TempRatio = Temp / model->B3SOIDDtnom; if (selfheat) { Vtm = KboQ * Temp; T0 = 1108.0 + Temp; T5 = Temp * Temp; Eg = 1.16 - 7.02e-4 * T5 / T0; T1 = ((7.02e-4 * T5) - T0 * (14.04e-4 * Temp)) / T0 / T0; /* T1 = dEg / dT */ T2 = 1.9230584e-4; /* T2 = 1 / 300.15^(3/2) */ T5 = sqrt(Temp); T3 = 1.45e10 * Temp * T5 * T2; T4 = exp(21.5565981 - Eg / (2.0 * Vtm)); ni = T3 * T4; dni_dT = 2.175e10 * T2 * T5 * T4 + T3 * T4 * (-Vtm * T1 + Eg * KboQ) / (2.0 * Vtm * Vtm); T0 = log(1.0e20 * pParam->B3SOIDDnpeak / (ni * ni)); vbi = Vtm * T0; dvbi_dT = KboQ * T0 + Vtm * (-2.0 * dni_dT / ni); if (pParam->B3SOIDDnsub > 0) { T0 = log(pParam->B3SOIDDnpeak / pParam->B3SOIDDnsub); vfbb = -model->B3SOIDDtype * Vtm*T0; dvfbb_dT = -model->B3SOIDDtype * KboQ*T0; } else { T0 = log(-pParam->B3SOIDDnpeak*pParam->B3SOIDDnsub/ni/ni); vfbb = -model->B3SOIDDtype * Vtm*T0; dvfbb_dT = -model->B3SOIDDtype * (KboQ * T0 + Vtm * 2.0 * dni_dT / ni); } /* phi = 2.0 * Vtm * log(pParam->B3SOIDDnpeak / ni); */ phi = here->B3SOIDDphi; sqrtPhi = sqrt(phi); Xdep0 = sqrt(2.0 * EPSSI / (Charge_q * pParam->B3SOIDDnpeak * 1.0e6)) * sqrtPhi; /* Save the values below for phi calculation in B3SOIDDaccept() */ here->B3SOIDDvtm = Vtm; here->B3SOIDDni = ni; /* Use dTx_dVe variables to act as dTx_dT variables */ T8 = 1 / model->B3SOIDDtnom; T7 = model->B3SOIDDxbjt / pParam->B3SOIDDndiode; T0 = pow(TempRatio, T7); dT0_dVe = T7 * pow(TempRatio, T7 - 1.0) * T8; T7 = model->B3SOIDDxdif / pParam->B3SOIDDndiode; T1 = pow(TempRatio, T7); dT1_dVe = T7 * pow(TempRatio, T7 - 1.0) * T8; T7 = model->B3SOIDDxrec / pParam->B3SOIDDndiode / 2.0; T2 = pow(TempRatio, T7); dT2_dVe = T7 * pow(TempRatio, T7 - 1.0) * T8; T3 = TempRatio - 1.0; T4 = Eg300 / pParam->B3SOIDDndiode / Vtm * T3; dT4_dVe = Eg300 / pParam->B3SOIDDndiode / Vtm / Vtm * (Vtm * T8 - T3 * KboQ); T5 = exp(T4); dT5_dVe = dT4_dVe * T5; T6 = sqrt(T5); dT6_dVe = 0.5 / T6 * dT5_dVe; jbjt = pParam->B3SOIDDisbjt * T0 * T5; jdif = pParam->B3SOIDDisdif * T1 * T5; jrec = pParam->B3SOIDDisrec * T2 * T6; djbjt_dT = pParam->B3SOIDDisbjt * (T0 * dT5_dVe + T5 * dT0_dVe); djdif_dT = pParam->B3SOIDDisdif * (T1 * dT5_dVe + T5 * dT1_dVe); djrec_dT = pParam->B3SOIDDisrec * (T2 * dT6_dVe + T6 * dT2_dVe); T7 = model->B3SOIDDxtun / pParam->B3SOIDDntun; T0 = pow(TempRatio, T7); jtun = model->B3SOIDDistun * T0; djtun_dT = model->B3SOIDDistun * T7 * pow(TempRatio, T7 - 1.0) * T8; u0temp = pParam->B3SOIDDu0 * pow(TempRatio, pParam->B3SOIDDute); du0temp_dT = pParam->B3SOIDDu0 * pParam->B3SOIDDute * pow(TempRatio, pParam->B3SOIDDute - 1.0) * T8; vsattemp = pParam->B3SOIDDvsat - pParam->B3SOIDDat * T3; dvsattemp_dT = -pParam->B3SOIDDat * T8; rds0 = (pParam->B3SOIDDrdsw + pParam->B3SOIDDprt * T3) / pParam->B3SOIDDrds0denom; drds0_dT = pParam->B3SOIDDprt / pParam->B3SOIDDrds0denom * T8; ua = pParam->B3SOIDDuatemp + pParam->B3SOIDDua1 * T3; ub = pParam->B3SOIDDubtemp + pParam->B3SOIDDub1 * T3; uc = pParam->B3SOIDDuctemp + pParam->B3SOIDDuc1 * T3; dua_dT = pParam->B3SOIDDua1 * T8; dub_dT = pParam->B3SOIDDub1 * T8; duc_dT = pParam->B3SOIDDuc1 * T8; } else { vbi = pParam->B3SOIDDvbi; vfbb = pParam->B3SOIDDvfbb; phi = pParam->B3SOIDDphi; sqrtPhi = pParam->B3SOIDDsqrtPhi; Xdep0 = pParam->B3SOIDDXdep0; jbjt = pParam->B3SOIDDjbjt; jdif = pParam->B3SOIDDjdif; jrec = pParam->B3SOIDDjrec; jtun = pParam->B3SOIDDjtun; u0temp = pParam->B3SOIDDu0temp; vsattemp = pParam->B3SOIDDvsattemp; rds0 = pParam->B3SOIDDrds0; ua = pParam->B3SOIDDua; ub = pParam->B3SOIDDub; uc = pParam->B3SOIDDuc; dni_dT = dvbi_dT = dvfbb_dT = djbjt_dT = djdif_dT = 0.0; djrec_dT = djtun_dT = du0temp_dT = dvsattemp_dT = 0.0; drds0_dT = dua_dT = dub_dT = duc_dT = 0.0; } /* TempRatio used for Vth and mobility */ if (selfheat) { TempRatio = Temp / model->B3SOIDDtnom - 1.0; } else { TempRatio = ckt->CKTtemp / model->B3SOIDDtnom - 1.0; } /* determine DC current and derivatives */ vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; ved = ves - vds; veb = ves - vbs; vge = vgs - ves; vpd = vps - vds; if (vds >= 0.0) { /* normal mode */ here->B3SOIDDmode = 1; Vds = vds; Vgs = vgs; Vbs = vbs; Vbd = vbd; Ves = ves; Vps = vps; } else { /* inverse mode */ here->B3SOIDDmode = -1; Vds = -vds; Vgs = vgd; Vbs = vbd; Vbd = vbs; Ves = ved; Vps = vpd; } if (here->B3SOIDDdebugMod > 2) { fprintf(fpdebug, "Vgs=%.4f, Vds=%.4f, Vbs=%.4f, ", Vgs, Vds, Vbs); fprintf(fpdebug, "Ves=%.4f, Vps=%.4f, Temp=%.1f\n", Ves, Vps, Temp); } Vesfb = Ves - vfbb; Cbox = model->B3SOIDDcbox; K1 = pParam->B3SOIDDk1; ChargeComputationNeeded = ((ckt->CKTmode & (MODEAC | MODETRAN | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) ? 1 : 0; if (here->B3SOIDDdebugMod == -1) ChargeComputationNeeded = 1; /* Poly Gate Si Depletion Effect */ T0 = pParam->B3SOIDDvfb + phi; if ((pParam->B3SOIDDngate > 1.e18) && (pParam->B3SOIDDngate < 1.e25) && (Vgs > T0)) /* added to avoid the problem caused by ngate */ { T1 = 1.0e6 * Charge_q * EPSSI * pParam->B3SOIDDngate / (model->B3SOIDDcox * model->B3SOIDDcox); T4 = sqrt(1.0 + 2.0 * (Vgs - T0) / T1); T2 = T1 * (T4 - 1.0); T3 = 0.5 * T2 * T2 / T1; /* T3 = Vpoly */ T7 = 1.12 - T3 - 0.05; T6 = sqrt(T7 * T7 + 0.224); T5 = 1.12 - 0.5 * (T7 + T6); Vgs_eff = Vgs - T5; dVgs_eff_dVg = 1.0 - (0.5 - 0.5 / T4) * (1.0 + T7 / T6); } else { Vgs_eff = Vgs; dVgs_eff_dVg = 1.0; } Leff = pParam->B3SOIDDleff; if (selfheat) { Vtm = KboQ * Temp; dVtm_dT = KboQ; } else { Vtm = model->B3SOIDDvtm; dVtm_dT = 0.0; } V0 = vbi - phi; /* Prepare Vbs0t */ T0 = -pParam->B3SOIDDdvbd1 * pParam->B3SOIDDleff / pParam->B3SOIDDlitl; T1 = pParam->B3SOIDDdvbd0 * (exp(0.5*T0) + 2*exp(T0)); T2 = T1 * (vbi - phi); T3 = 0.5 * model->B3SOIDDqsi / model->B3SOIDDcsi; Vbs0t = phi - T3 + pParam->B3SOIDDvbsa + T2; if (selfheat) dVbs0t_dT = T1 * dvbi_dT; else dVbs0t_dT = 0.0; /* Prepare Vbs0 */ T0 = 1 + model->B3SOIDDcsieff / Cbox; T1 = pParam->B3SOIDDkb1 / T0; T2 = T1 * (Vbs0t - Vesfb); /* T6 is Vbs0 before limiting */ T6 = Vbs0t - T2; dT6_dVe = T1; if (selfheat) dT6_dT = dVbs0t_dT - T1 * (dVbs0t_dT + dvfbb_dT); else dT6_dT = 0.0; /* limit Vbs0 to below phi */ T1 = phi - pParam->B3SOIDDdelp; T2 = T1 - T6 - DELT_Vbseff; T3 = sqrt(T2 * T2 + 4.0 * DELT_Vbseff); Vbs0 = T1 - 0.5 * (T2 + T3); T4 = 0.5 * (1 + T2/T3); dVbs0_dVe = T4 * dT6_dVe; if (selfheat) dVbs0_dT = T4 * dT6_dT; else dVbs0_dT = 0.0; T1 = Vbs0t - Vbs0 - DELT_Vbsmos; T2 = sqrt(T1 * T1 + DELT_Vbsmos * DELT_Vbsmos); T3 = 0.5 * (T1 + T2); T4 = T3 * model->B3SOIDDcsieff / model->B3SOIDDqsieff; Vbs0mos = Vbs0 - 0.5 * T3 * T4; T5 = 0.5 * T4 * (1 + T1 / T2); dVbs0mos_dVe = dVbs0_dVe * (1 + T5); if (selfheat) dVbs0mos_dT = dVbs0_dT - (dVbs0t_dT - dVbs0_dT) * T5; else dVbs0mos_dT = 0.0; /* Prepare Vthfd - treat Vbs0mos as if it were independent variable Vb */ Phis = phi - Vbs0mos; dPhis_dVb = -1; sqrtPhis = sqrt(Phis); dsqrtPhis_dVb = -0.5 / sqrtPhis; Xdep = Xdep0 * sqrtPhis / sqrtPhi; dXdep_dVb = (Xdep0 / sqrtPhi) * dsqrtPhis_dVb; sqrtXdep = sqrt(Xdep); T0 = pParam->B3SOIDDdvt2 * Vbs0mos; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->B3SOIDDdvt2; } else /* Added to avoid any discontinuity problems caused by dvt2*/ { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->B3SOIDDdvt2 * T4 * T4; } lt1 = model->B3SOIDDfactor1 * sqrtXdep * T1; dlt1_dVb = model->B3SOIDDfactor1 * (0.5 / sqrtXdep * T1 * dXdep_dVb + sqrtXdep * T2); T0 = pParam->B3SOIDDdvt2w * Vbs0mos; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->B3SOIDDdvt2w; } else /* Added to avoid any discontinuity problems caused by dvt2w */ { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->B3SOIDDdvt2w * T4 * T4; } ltw= model->B3SOIDDfactor1 * sqrtXdep * T1; dltw_dVb = model->B3SOIDDfactor1 * (0.5 / sqrtXdep * T1 * dXdep_dVb + sqrtXdep * T2); T0 = -0.5 * pParam->B3SOIDDdvt1 * Leff / lt1; if (T0 > -EXP_THRESHOLD) { T1 = exp(T0); dT1_dVb = -T0 / lt1 * T1 * dlt1_dVb; Theta0 = T1 * (1.0 + 2.0 * T1); dTheta0_dVb = (1.0 + 4.0 * T1) * dT1_dVb; } else { T1 = MIN_EXP; Theta0 = T1 * (1.0 + 2.0 * T1); dTheta0_dVb = 0.0; } here->B3SOIDDthetavth = pParam->B3SOIDDdvt0 * Theta0; Delt_vth = here->B3SOIDDthetavth * V0; dDelt_vth_dVb = pParam->B3SOIDDdvt0 * dTheta0_dVb * V0; if (selfheat) dDelt_vth_dT = here->B3SOIDDthetavth * dvbi_dT; else dDelt_vth_dT = 0.0; T0 = -0.5*pParam->B3SOIDDdvt1w * pParam->B3SOIDDweff*Leff/ltw; if (T0 > -EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 * (1.0 + 2.0 * T1); dT1_dVb = -T0 / ltw * T1 * dltw_dVb; dT2_dVb = (1.0 + 4.0 * T1) * dT1_dVb; } else { T1 = MIN_EXP; T2 = T1 * (1.0 + 2.0 * T1); dT2_dVb = 0.0; } T0 = pParam->B3SOIDDdvt0w * T2; DeltVthw = T0 * V0; dDeltVthw_dVb = pParam->B3SOIDDdvt0w * dT2_dVb * V0; if (selfheat) dDeltVthw_dT = T0 * dvbi_dT; else dDeltVthw_dT = 0.0; T0 = sqrt(1.0 + pParam->B3SOIDDnlx / Leff); T1 = (pParam->B3SOIDDkt1 + pParam->B3SOIDDkt1l / Leff + pParam->B3SOIDDkt2 * Vbs0mos); DeltVthtemp = pParam->B3SOIDDk1 * (T0 - 1.0) * sqrtPhi + T1 * TempRatio; if (selfheat) dDeltVthtemp_dT = T1 / model->B3SOIDDtnom; else dDeltVthtemp_dT = 0.0; tmp2 = model->B3SOIDDtox * phi / (pParam->B3SOIDDweff + pParam->B3SOIDDw0); T3 = pParam->B3SOIDDeta0 + pParam->B3SOIDDetab * Vbs0mos; if (T3 < 1.0e-4) /* avoid discontinuity problems caused by etab */ { T9 = 1.0 / (3.0 - 2.0e4 * T3); T3 = (2.0e-4 - T3) * T9; T4 = T9 * T9 * pParam->B3SOIDDetab; dT3_dVb = T4; } else { dT3_dVb = pParam->B3SOIDDetab; } DIBL_Sft = T3 * pParam->B3SOIDDtheta0vb0 * Vds; dDIBL_Sft_dVd = T3 * pParam->B3SOIDDtheta0vb0; dDIBL_Sft_dVb = pParam->B3SOIDDtheta0vb0 * Vds * dT3_dVb; Vthfd = model->B3SOIDDtype * pParam->B3SOIDDvth0 + pParam->B3SOIDDk1 * (sqrtPhis - sqrtPhi) - pParam->B3SOIDDk2 * Vbs0mos-Delt_vth-DeltVthw +(pParam->B3SOIDDk3 +pParam->B3SOIDDk3b * Vbs0mos) * tmp2 + DeltVthtemp - DIBL_Sft; T6 = pParam->B3SOIDDk3b * tmp2 - pParam->B3SOIDDk2 + pParam->B3SOIDDkt2 * TempRatio; dVthfd_dVd = -dDIBL_Sft_dVd; T7 = pParam->B3SOIDDk1 * dsqrtPhis_dVb - dDelt_vth_dVb - dDeltVthw_dVb + T6 - dDIBL_Sft_dVb; dVthfd_dVe = T7 * dVbs0mos_dVe; if (selfheat) dVthfd_dT = dDeltVthtemp_dT - dDelt_vth_dT - dDeltVthw_dT + T7 * dVbs0mos_dT; else dVthfd_dT = 0.0; /* Effective Vbs0 and Vbs0t for all Vgs */ T1 = Vthfd - Vgs_eff - DELT_Vbs0eff; T2 = sqrt(T1 * T1 + DELT_Vbs0eff * DELT_Vbs0eff ); Vbs0teff = Vbs0t - 0.5 * (T1 + T2); dVbs0teff_dVg = 0.5 * (1 + T1/T2) * dVgs_eff_dVg; dVbs0teff_dVd = - 0.5 * (1 + T1 / T2) * dVthfd_dVd; dVbs0teff_dVe = - 0.5 * (1 + T1 / T2) * dVthfd_dVe; if (selfheat) dVbs0teff_dT = dVbs0t_dT - 0.5 * (1 + T1 / T2) * dVthfd_dT; else dVbs0teff_dT = 0.0; /* Calculate nfb */ T3 = 1 / (K1 * K1); T4 = pParam->B3SOIDDkb3 * Cbox / model->B3SOIDDcox; T8 = sqrt(phi - Vbs0mos); T5 = sqrt(1 + 4 * T3 * (phi + K1 * T8 - Vbs0mos)); T6 = 1 + T4 * T5; Nfb = model->B3SOIDDnfb = 1 / T6; T7 = 2 * T3 * T4 * Nfb * Nfb / T5 * (0.5 * K1 / T8 + 1); Vbs0eff = Vbs0 - Nfb * 0.5 * (T1 + T2); dVbs0eff_dVg = Nfb * 0.5 * (1 + T1/T2) * dVgs_eff_dVg; dVbs0eff_dVd = - Nfb * 0.5 * (1 + T1 / T2) * dVthfd_dVd; dVbs0eff_dVe = dVbs0_dVe - Nfb * 0.5 * (1 + T1 / T2) * dVthfd_dVe - T7 * 0.5 * (T1 + T2) * dVbs0mos_dVe; if (selfheat) dVbs0eff_dT = dVbs0_dT - Nfb * 0.5 * (1 + T1 / T2) * dVthfd_dT - T7 * 0.5 * (T1 + T2) * dVbs0mos_dT; else dVbs0eff_dT = 0.0; /* Simple check of Vbs */ /* Prepare Vbsdio */ T1 = Vbs - (Vbs0eff + OFF_Vbsdio) - DELT_Vbsdio; T2 = sqrt(T1*T1 + DELT_Vbsdio * DELT_Vbsdio); T3 = 0.5 * (1 + T1/T2); Vbsdio = Vbs0eff + OFF_Vbsdio + 0.5 * (T1 + T2); dVbsdio_dVg = (1 - T3) * dVbs0eff_dVg; dVbsdio_dVd = (1 - T3) * dVbs0eff_dVd; dVbsdio_dVe = (1 - T3) * dVbs0eff_dVe; if (selfheat) dVbsdio_dT = (1 - T3) * dVbs0eff_dT; else dVbsdio_dT = 0.0; dVbsdio_dVb = T3; /* Prepare Vbseff */ T1 = Vbs0teff - Vbsdio - DELT_Vbsmos; T2 = sqrt(T1 * T1 + DELT_Vbsmos * DELT_Vbsmos); T3 = 0.5 * (T1 + T2); T5 = 0.5 * (1 + T1/T2); dT3_dVg = T5 * (dVbs0teff_dVg - dVbsdio_dVg); dT3_dVd = T5 * (dVbs0teff_dVd - dVbsdio_dVd); dT3_dVb = - T5 * dVbsdio_dVb; dT3_dVe = T5 * (dVbs0teff_dVe - dVbsdio_dVe); if (selfheat) dT3_dT = T5 * (dVbs0teff_dT - dVbsdio_dT); else dT3_dT = 0.0; T4 = T3 * model->B3SOIDDcsieff / model->B3SOIDDqsieff; Vbsmos = Vbsdio - 0.5 * T3 * T4; dVbsmos_dVg = dVbsdio_dVg - T4 * dT3_dVg; dVbsmos_dVd = dVbsdio_dVd - T4 * dT3_dVd; dVbsmos_dVb = dVbsdio_dVb - T4 * dT3_dVb; dVbsmos_dVe = dVbsdio_dVe - T4 * dT3_dVe; if (selfheat) dVbsmos_dT = dVbsdio_dT - T4 * dT3_dT; else dVbsmos_dT = 0.0; /* Prepare Vcs */ Vcs = Vbsdio - Vbs0eff; dVcs_dVb = dVbsdio_dVb; dVcs_dVg = dVbsdio_dVg - dVbs0eff_dVg; dVcs_dVd = dVbsdio_dVd - dVbs0eff_dVd; dVcs_dVe = dVbsdio_dVe - dVbs0eff_dVe; dVcs_dT = dVbsdio_dT - dVbs0eff_dT; /* Check Vps */ /* Note : if Vps is less Vbs0eff => non-physical */ T1 = Vps - Vbs0eff + DELT_Vbs0dio; T2 = sqrt(T1 * T1 + DELT_Vbs0dio * DELT_Vbs0dio); T3 = 0.5 * (1 + T1/T2); Vpsdio = Vbs0eff + 0.5 * (T1 + T2); dVpsdio_dVg = (1 - T3) * dVbs0eff_dVg; dVpsdio_dVd = (1 - T3) * dVbs0eff_dVd; dVpsdio_dVe = (1 - T3) * dVbs0eff_dVe; if (selfheat) dVpsdio_dT = (1 - T3) * dVbs0eff_dT; else dVpsdio_dT = 0.0; dVpsdio_dVp = T3; Vbp = Vbsdio - Vpsdio; dVbp_dVb = dVbsdio_dVb; dVbp_dVg = dVbsdio_dVg - dVpsdio_dVg; dVbp_dVd = dVbsdio_dVd - dVpsdio_dVd; dVbp_dVe = dVbsdio_dVe - dVpsdio_dVe; dVbp_dT = dVbsdio_dT - dVpsdio_dT; dVbp_dVp = - dVpsdio_dVp; here->B3SOIDDvbsdio = Vbsdio; here->B3SOIDDvbs0eff = Vbs0eff; T1 = phi - pParam->B3SOIDDdelp; T2 = T1 - Vbsmos - DELT_Vbseff; T3 = sqrt(T2 * T2 + 4.0 * DELT_Vbseff * T1); Vbseff = T1 - 0.5 * (T2 + T3); T4 = 0.5 * (1 + T2/T3); dVbseff_dVg = T4 * dVbsmos_dVg; dVbseff_dVd = T4 * dVbsmos_dVd; dVbseff_dVb = T4 * dVbsmos_dVb; dVbseff_dVe = T4 * dVbsmos_dVe; if (selfheat) dVbseff_dT = T4 * dVbsmos_dT; else dVbseff_dT = 0.0; here->B3SOIDDvbseff = Vbseff; Phis = phi - Vbseff; dPhis_dVb = -1; sqrtPhis = sqrt(Phis); dsqrtPhis_dVb = -0.5 / sqrtPhis ; Xdep = Xdep0 * sqrtPhis / sqrtPhi; dXdep_dVb = (Xdep0 / sqrtPhi) * dsqrtPhis_dVb; /* Vth Calculation */ T3 = sqrt(Xdep); T0 = pParam->B3SOIDDdvt2 * Vbseff; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->B3SOIDDdvt2 ; } else /* Added to avoid any discontinuity problems caused by dvt2 */ { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->B3SOIDDdvt2 * T4 * T4 ; } lt1 = model->B3SOIDDfactor1 * T3 * T1; dlt1_dVb =model->B3SOIDDfactor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * T2); T0 = pParam->B3SOIDDdvt2w * Vbseff; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->B3SOIDDdvt2w ; } else /* Added to avoid any discontinuity problems caused by dvt2w */ { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->B3SOIDDdvt2w * T4 * T4 ; } ltw= model->B3SOIDDfactor1 * T3 * T1; dltw_dVb=model->B3SOIDDfactor1*(0.5 / T3 * T1 * dXdep_dVb + T3 * T2); T0 = -0.5 * pParam->B3SOIDDdvt1 * Leff / lt1; if (T0 > -EXP_THRESHOLD) { T1 = exp(T0); Theta0 = T1 * (1.0 + 2.0 * T1); dT1_dVb = -T0 / lt1 * T1 * dlt1_dVb; dTheta0_dVb = (1.0 + 4.0 * T1) * dT1_dVb; } else { T1 = MIN_EXP; Theta0 = T1 * (1.0 + 2.0 * T1); dTheta0_dVb = 0.0; } here->B3SOIDDthetavth = pParam->B3SOIDDdvt0 * Theta0; Delt_vth = here->B3SOIDDthetavth * V0; dDelt_vth_dVb = pParam->B3SOIDDdvt0 * dTheta0_dVb * V0; if (selfheat) dDelt_vth_dT = here->B3SOIDDthetavth * dvbi_dT; else dDelt_vth_dT = 0.0; T0 = -0.5 * pParam->B3SOIDDdvt1w * pParam->B3SOIDDweff * Leff / ltw; if (T0 > -EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 * (1.0 + 2.0 * T1); dT1_dVb = -T0 / ltw * T1 * dltw_dVb; dT2_dVb = (1.0 + 4.0 * T1) * dT1_dVb; } else { T1 = MIN_EXP; T2 = T1 * (1.0 + 2.0 * T1); dT2_dVb = 0.0; } T0 = pParam->B3SOIDDdvt0w * T2; DeltVthw = T0 * V0; dDeltVthw_dVb = pParam->B3SOIDDdvt0w * dT2_dVb * V0; if (selfheat) dDeltVthw_dT = T0 * dvbi_dT; else dDeltVthw_dT = 0.0; T0 = sqrt(1.0 + pParam->B3SOIDDnlx / Leff); T1 = (pParam->B3SOIDDkt1 + pParam->B3SOIDDkt1l / Leff + pParam->B3SOIDDkt2 * Vbseff); DeltVthtemp = pParam->B3SOIDDk1 * (T0 - 1.0) * sqrtPhi + T1 * TempRatio; if (selfheat) dDeltVthtemp_dT = T1 / model->B3SOIDDtnom; else dDeltVthtemp_dT = 0.0; tmp2 = model->B3SOIDDtox * phi / (pParam->B3SOIDDweff + pParam->B3SOIDDw0); T3 = pParam->B3SOIDDeta0 + pParam->B3SOIDDetab * Vbseff; if (T3 < 1.0e-4) /* avoid discontinuity problems caused by etab */ { T9 = 1.0 / (3.0 - 2.0e4 * T3); T3 = (2.0e-4 - T3) * T9; T4 = T9 * T9 * pParam->B3SOIDDetab; dT3_dVb = T4 ; } else { dT3_dVb = pParam->B3SOIDDetab ; } DIBL_Sft = T3 * pParam->B3SOIDDtheta0vb0 * Vds; dDIBL_Sft_dVd = pParam->B3SOIDDtheta0vb0 * T3; dDIBL_Sft_dVb = pParam->B3SOIDDtheta0vb0 * Vds * dT3_dVb; Vth = model->B3SOIDDtype * pParam->B3SOIDDvth0 + pParam->B3SOIDDk1 * (sqrtPhis - sqrtPhi) - pParam->B3SOIDDk2 * Vbseff- Delt_vth - DeltVthw +(pParam->B3SOIDDk3 + pParam->B3SOIDDk3b * Vbseff) * tmp2 + DeltVthtemp - DIBL_Sft; here->B3SOIDDvon = Vth; T6 = pParam->B3SOIDDk3b * tmp2 - pParam->B3SOIDDk2 + pParam->B3SOIDDkt2 * TempRatio; dVth_dVb = pParam->B3SOIDDk1 * dsqrtPhis_dVb - dDelt_vth_dVb - dDeltVthw_dVb + T6 - dDIBL_Sft_dVb; /* this is actually dVth_dVbseff */ dVth_dVd = -dDIBL_Sft_dVd; if (selfheat) dVth_dT = dDeltVthtemp_dT - dDelt_vth_dT - dDeltVthw_dT; else dVth_dT = 0.0; /* Calculate n */ T2 = pParam->B3SOIDDnfactor * EPSSI / Xdep; dT2_dVb = - T2 / Xdep * dXdep_dVb; T3 = pParam->B3SOIDDcdsc + pParam->B3SOIDDcdscb * Vbseff + pParam->B3SOIDDcdscd * Vds; dT3_dVb = pParam->B3SOIDDcdscb; dT3_dVd = pParam->B3SOIDDcdscd; T4 = (T2 + T3 * Theta0 + pParam->B3SOIDDcit) / model->B3SOIDDcox; dT4_dVb = (dT2_dVb + Theta0 * dT3_dVb + dTheta0_dVb * T3) / model->B3SOIDDcox; dT4_dVd = Theta0 * dT3_dVd / model->B3SOIDDcox; if (T4 >= -0.5) { n = 1.0 + T4; dn_dVb = dT4_dVb; dn_dVd = dT4_dVd; } else /* avoid discontinuity problems caused by T4 */ { T0 = 1.0 / (3.0 + 8.0 * T4); n = (1.0 + 3.0 * T4) * T0; T0 *= T0; dn_dVb = T0 * dT4_dVb; dn_dVd = T0 * dT4_dVd; } /* Effective Vgst (Vgsteff) Calculation */ Vgst = Vgs_eff - Vth; T10 = 2.0 * n * Vtm; VgstNVt = Vgst / T10; ExpArg = (2.0 * pParam->B3SOIDDvoff - Vgst) / T10; /* MCJ: Very small Vgst */ if (VgstNVt > EXP_THRESHOLD) { Vgsteff = Vgst; /* T0 is dVgsteff_dVbseff */ T0 = -dVth_dVb; dVgsteff_dVg = dVgs_eff_dVg + T0 * dVbseff_dVg; dVgsteff_dVd = -dVth_dVd + T0 * dVbseff_dVd; dVgsteff_dVb = T0 * dVbseff_dVb; dVgsteff_dVe = T0 * dVbseff_dVe; if (selfheat) dVgsteff_dT = -dVth_dT + T0 * dVbseff_dT; else dVgsteff_dT = 0.0; } else if (ExpArg > EXP_THRESHOLD) { T0 = (Vgst - pParam->B3SOIDDvoff) / (n * Vtm); ExpVgst = exp(T0); Vgsteff = Vtm * pParam->B3SOIDDcdep0 / model->B3SOIDDcox * ExpVgst; T3 = Vgsteff / (n * Vtm) ; /* T1 is dVgsteff_dVbseff */ T1 = -T3 * (dVth_dVb + T0 * Vtm * dn_dVb); dVgsteff_dVg = T3 * dVgs_eff_dVg + T1 * dVbseff_dVg; dVgsteff_dVd = -T3 * (dVth_dVd + T0 * Vtm * dn_dVd) + T1 * dVbseff_dVd; dVgsteff_dVe = T1 * dVbseff_dVe; dVgsteff_dVb = T1 * dVbseff_dVb; if (selfheat) dVgsteff_dT = -T3 * (dVth_dT + T0 * dVtm_dT * n) + Vgsteff / Temp + T1 * dVbseff_dT; else dVgsteff_dT = 0.0; } else { ExpVgst = exp(VgstNVt); T1 = T10 * log(1.0 + ExpVgst); dT1_dVg = ExpVgst / (1.0 + ExpVgst); dT1_dVb = -dT1_dVg * (dVth_dVb + Vgst / n * dn_dVb) + T1 / n * dn_dVb; dT1_dVd = -dT1_dVg * (dVth_dVd + Vgst / n * dn_dVd) + T1 / n * dn_dVd; T3 = (1.0 / Temp); if (selfheat) dT1_dT = -dT1_dVg * (dVth_dT + Vgst * T3) + T1 * T3; else dT1_dT = 0.0; dT2_dVg = -model->B3SOIDDcox / (Vtm * pParam->B3SOIDDcdep0) * exp(ExpArg); T2 = 1.0 - T10 * dT2_dVg; dT2_dVd = -dT2_dVg * (dVth_dVd - 2.0 * Vtm * ExpArg * dn_dVd) + (T2 - 1.0) / n * dn_dVd; dT2_dVb = -dT2_dVg * (dVth_dVb - 2.0 * Vtm * ExpArg * dn_dVb) + (T2 - 1.0) / n * dn_dVb; if (selfheat) dT2_dT = -dT2_dVg * (dVth_dT - ExpArg * T10 * T3); else dT2_dT = 0.0; Vgsteff = T1 / T2; T3 = T2 * T2; /* T4 is dVgsteff_dVbseff */ T4 = (T2 * dT1_dVb - T1 * dT2_dVb) / T3; dVgsteff_dVb = T4 * dVbseff_dVb; dVgsteff_dVe = T4 * dVbseff_dVe; dVgsteff_dVg = (T2 * dT1_dVg - T1 * dT2_dVg) / T3 * dVgs_eff_dVg + T4 * dVbseff_dVg; dVgsteff_dVd = (T2 * dT1_dVd - T1 * dT2_dVd) / T3 + T4 * dVbseff_dVd; if (selfheat) dVgsteff_dT = (T2 * dT1_dT - T1 * dT2_dT) / T3 + T4 * dVbseff_dT; else dVgsteff_dT = 0.0; } Vgst2Vtm = Vgsteff + 2.0 * Vtm; if (selfheat) dVgst2Vtm_dT = 2.0 * dVtm_dT; else dVgst2Vtm_dT = 0.0; /* Calculate Effective Channel Geometry */ T9 = sqrtPhis - sqrtPhi; Weff = pParam->B3SOIDDweff - 2.0 * (pParam->B3SOIDDdwg * Vgsteff + pParam->B3SOIDDdwb * T9); dWeff_dVg = -2.0 * pParam->B3SOIDDdwg; dWeff_dVb = -2.0 * pParam->B3SOIDDdwb * dsqrtPhis_dVb; if (Weff < 2.0e-8) /* to avoid the discontinuity problem due to Weff*/ { T0 = 1.0 / (6.0e-8 - 2.0 * Weff); Weff = 2.0e-8 * (4.0e-8 - Weff) * T0; T0 *= T0 * 4.0e-16; dWeff_dVg *= T0; dWeff_dVb *= T0; } T0 = pParam->B3SOIDDprwg * Vgsteff + pParam->B3SOIDDprwb * T9; if (T0 >= -0.9) { Rds = rds0 * (1.0 + T0); dRds_dVg = rds0 * pParam->B3SOIDDprwg; dRds_dVb = rds0 * pParam->B3SOIDDprwb * dsqrtPhis_dVb; if (selfheat) dRds_dT = (1.0 + T0) * drds0_dT; else dRds_dT = 0.0; } else /* to avoid the discontinuity problem due to prwg and prwb*/ { T1 = 1.0 / (17.0 + 20.0 * T0); Rds = rds0 * (0.8 + T0) * T1; T1 *= T1; dRds_dVg = rds0 * pParam->B3SOIDDprwg * T1; dRds_dVb = rds0 * pParam->B3SOIDDprwb * dsqrtPhis_dVb * T1; if (selfheat) dRds_dT = (0.8 + T0) * T1 * drds0_dT; else dRds_dT = 0.0; } /* Calculate Abulk */ if (pParam->B3SOIDDa0 == 0.0) { Abulk0 = Abulk = dAbulk0_dVb = dAbulk_dVg = dAbulk_dVb = 0.0; } else { T1 = 0.5 * pParam->B3SOIDDk1 / sqrtPhi; T9 = sqrt(model->B3SOIDDxj * Xdep); tmp1 = Leff + 2.0 * T9; T5 = Leff / tmp1; tmp2 = pParam->B3SOIDDa0 * T5; tmp3 = pParam->B3SOIDDweff + pParam->B3SOIDDb1; tmp4 = pParam->B3SOIDDb0 / tmp3; T2 = tmp2 + tmp4; dT2_dVb = -T9 * tmp2 / tmp1 / Xdep * dXdep_dVb; T6 = T5 * T5; T7 = T5 * T6; Abulk0 = T1 * T2; dAbulk0_dVb = T1 * dT2_dVb; T8 = pParam->B3SOIDDags * pParam->B3SOIDDa0 * T7; dAbulk_dVg = -T1 * T8; Abulk = Abulk0 + dAbulk_dVg * Vgsteff; dAbulk_dVb = dAbulk0_dVb - T8 * Vgsteff * 3.0 * T1 * dT2_dVb / tmp2; } if (Abulk0 < 0.01) { T9 = 1.0 / (3.0 - 200.0 * Abulk0); Abulk0 = (0.02 - Abulk0) * T9; dAbulk0_dVb *= T9 * T9; } if (Abulk < 0.01) { T9 = 1.0 / (3.0 - 200.0 * Abulk); Abulk = (0.02 - Abulk) * T9; dAbulk_dVb *= T9 * T9; } T2 = pParam->B3SOIDDketa * Vbseff; if (T2 >= -0.9) { T0 = 1.0 / (1.0 + T2); dT0_dVb = -pParam->B3SOIDDketa * T0 * T0 ; } else /* added to avoid the problems caused by Keta */ { T1 = 1.0 / (0.8 + T2); T0 = (17.0 + 20.0 * T2) * T1; dT0_dVb = -pParam->B3SOIDDketa * T1 * T1 ; } dAbulk_dVg *= T0; dAbulk_dVb = dAbulk_dVb * T0 + Abulk * dT0_dVb; dAbulk0_dVb = dAbulk0_dVb * T0 + Abulk0 * dT0_dVb; Abulk *= T0; Abulk0 *= T0; Abulk += 1; Abulk0 += 1; /* Prepare Abeff */ T0 = pParam->B3SOIDDabp * Vgst2Vtm; T1 = 1 - Vcs / T0 - DELT_Xcsat; T2 = sqrt(T1 * T1 + DELT_Xcsat * DELT_Xcsat); T3 = 1 - 0.5 * (T1 + T2); T5 = -0.5 * (1 + T1 / T2); dT1_dVg = Vcs / Vgst2Vtm / T0; dT3_dVg = T5 * dT1_dVg; dT1_dVc = - 1 / T0; dT3_dVc = T5 * dT1_dVc; Xcsat = pParam->B3SOIDDmxc * T3 * T3 + (1 - pParam->B3SOIDDmxc)*T3; T4 = 2 * pParam->B3SOIDDmxc * T3 + (1 - pParam->B3SOIDDmxc); dXcsat_dVg = T4 * dT3_dVg; dXcsat_dVc = T4 * dT3_dVc; Abeff = Xcsat * Abulk + (1 - Xcsat) * model->B3SOIDDadice; T0 = Xcsat * dAbulk_dVg + Abulk * dXcsat_dVg; dAbeff_dVg = T0 - model->B3SOIDDadice * dXcsat_dVg; dAbeff_dVb = Xcsat * dAbulk_dVb; dAbeff_dVc = (Abulk - model->B3SOIDDadice) * dXcsat_dVc; here->B3SOIDDabeff = Abeff; /* Mobility calculation */ if (model->B3SOIDDmobMod == 1) { T0 = Vgsteff + Vth + Vth; T2 = ua + uc * Vbseff; T3 = T0 / model->B3SOIDDtox; T5 = T3 * (T2 + ub * T3); dDenomi_dVg = (T2 + 2.0 * ub * T3) / model->B3SOIDDtox; dDenomi_dVd = dDenomi_dVg * 2 * dVth_dVd; dDenomi_dVb = dDenomi_dVg * 2 * dVth_dVb + uc * T3 ; if (selfheat) dDenomi_dT = dDenomi_dVg * 2 * dVth_dT + (dua_dT + Vbseff * duc_dT + dub_dT * T3 ) * T3; else dDenomi_dT = 0.0; } else if (model->B3SOIDDmobMod == 2) { T5 = Vgsteff / model->B3SOIDDtox * (ua + uc * Vbseff + ub * Vgsteff / model->B3SOIDDtox); dDenomi_dVg = (ua + uc * Vbseff + 2.0 * ub * Vgsteff / model->B3SOIDDtox) / model->B3SOIDDtox; dDenomi_dVd = 0.0; dDenomi_dVb = Vgsteff * uc / model->B3SOIDDtox ; if (selfheat) dDenomi_dT = Vgsteff / model->B3SOIDDtox * (dua_dT + Vbseff * duc_dT + dub_dT * Vgsteff / model->B3SOIDDtox); else dDenomi_dT = 0.0; } else /* mobMod == 3 */ { T0 = Vgsteff + Vth + Vth; T2 = 1.0 + uc * Vbseff; T3 = T0 / model->B3SOIDDtox; T4 = T3 * (ua + ub * T3); T5 = T4 * T2; dDenomi_dVg = (ua + 2.0 * ub * T3) * T2 / model->B3SOIDDtox; dDenomi_dVd = dDenomi_dVg * 2.0 * dVth_dVd; dDenomi_dVb = dDenomi_dVg * 2.0 * dVth_dVb + uc * T4 ; if (selfheat) dDenomi_dT = dDenomi_dVg * 2.0 * dVth_dT + (dua_dT + dub_dT * T3) * T3 * T2 + T4 * Vbseff * duc_dT; else dDenomi_dT = 0.0; } if (T5 >= -0.8) { Denomi = 1.0 + T5; } else /* Added to avoid the discontinuity problem caused by ua and ub*/ { T9 = 1.0 / (7.0 + 10.0 * T5); Denomi = (0.6 + T5) * T9; T9 *= T9; dDenomi_dVg *= T9; dDenomi_dVd *= T9; dDenomi_dVb *= T9; if (selfheat) dDenomi_dT *= T9; else dDenomi_dT = 0.0; } here->B3SOIDDueff = ueff = u0temp / Denomi; T9 = -ueff / Denomi; dueff_dVg = T9 * dDenomi_dVg; dueff_dVd = T9 * dDenomi_dVd; dueff_dVb = T9 * dDenomi_dVb; if (selfheat) dueff_dT = T9 * dDenomi_dT + du0temp_dT / Denomi; else dueff_dT = 0.0; /* Saturation Drain Voltage Vdsat */ WVCox = Weff * vsattemp * model->B3SOIDDcox; WVCoxRds = WVCox * Rds; /* dWVCoxRds_dT = WVCox * dRds_dT + Weff * model->B3SOIDDcox * Rds * dvsattemp_dT; */ Esat = 2.0 * vsattemp / ueff; EsatL = Esat * Leff; T0 = -EsatL /ueff; dEsatL_dVg = T0 * dueff_dVg; dEsatL_dVd = T0 * dueff_dVd; dEsatL_dVb = T0 * dueff_dVb; if (selfheat) dEsatL_dT = T0 * dueff_dT + EsatL / vsattemp * dvsattemp_dT; else dEsatL_dT = 0.0; /* Sqrt() */ a1 = pParam->B3SOIDDa1; if (a1 == 0.0) { Lambda = pParam->B3SOIDDa2; dLambda_dVg = 0.0; } else if (a1 > 0.0) /* Added to avoid the discontinuity problem caused by a1 and a2 (Lambda) */ { T0 = 1.0 - pParam->B3SOIDDa2; T1 = T0 - pParam->B3SOIDDa1 * Vgsteff - 0.0001; T2 = sqrt(T1 * T1 + 0.0004 * T0); Lambda = pParam->B3SOIDDa2 + T0 - 0.5 * (T1 + T2); dLambda_dVg = 0.5 * pParam->B3SOIDDa1 * (1.0 + T1 / T2); } else { T1 = pParam->B3SOIDDa2 + pParam->B3SOIDDa1 * Vgsteff - 0.0001; T2 = sqrt(T1 * T1 + 0.0004 * pParam->B3SOIDDa2); Lambda = 0.5 * (T1 + T2); dLambda_dVg = 0.5 * pParam->B3SOIDDa1 * (1.0 + T1 / T2); } if (Rds > 0) { tmp2 = dRds_dVg / Rds + dWeff_dVg / Weff; tmp3 = dRds_dVb / Rds + dWeff_dVb / Weff; } else { tmp2 = dWeff_dVg / Weff; tmp3 = dWeff_dVb / Weff; } if ((Rds == 0.0) && (Lambda == 1.0)) { T0 = 1.0 / (Abeff * EsatL + Vgst2Vtm); tmp1 = 0.0; T1 = T0 * T0; T2 = Vgst2Vtm * T0; T3 = EsatL * Vgst2Vtm; Vdsat = T3 * T0; dT0_dVg = -(Abeff * dEsatL_dVg + EsatL * dAbeff_dVg + 1.0) * T1; dT0_dVd = -(Abeff * dEsatL_dVd) * T1; dT0_dVb = -(Abeff * dEsatL_dVb + EsatL * dAbeff_dVb) * T1; dT0_dVc = -(EsatL * dAbeff_dVc) * T1; if (selfheat) dT0_dT = -(Abeff * dEsatL_dT + dVgst2Vtm_dT) * T1; else dT0_dT = 0.0; dVdsat_dVg = T3 * dT0_dVg + T2 * dEsatL_dVg + EsatL * T0; dVdsat_dVd = T3 * dT0_dVd + T2 * dEsatL_dVd; dVdsat_dVb = T3 * dT0_dVb + T2 * dEsatL_dVb; dVdsat_dVc = T3 * dT0_dVc; if (selfheat) dVdsat_dT = T3 * dT0_dT + T2 * dEsatL_dT + EsatL * T0 * dVgst2Vtm_dT; else dVdsat_dT = 0.0; } else { tmp1 = dLambda_dVg / (Lambda * Lambda); T9 = Abeff * WVCoxRds; T8 = Abeff * T9; T7 = Vgst2Vtm * T9; T6 = Vgst2Vtm * WVCoxRds; T0 = 2.0 * Abeff * (T9 - 1.0 + 1.0 / Lambda); dT0_dVg = 2.0 * (T8 * tmp2 - Abeff * tmp1 + (2.0 * T9 + 1.0 / Lambda - 1.0) * dAbeff_dVg); /* dT0_dVb = 2.0 * (T8 * tmp3 this is equivalent to one below, but simpler + (2.0 * T9 + 1.0 / Lambda - 1.0) * dAbeff_dVg); */ dT0_dVb = 2.0 * (T8 * (2.0 / Abeff * dAbeff_dVb + tmp3) + (1.0 / Lambda - 1.0) * dAbeff_dVb); dT0_dVd = 0.0; dT0_dVc = 4.0 * T9 * dAbeff_dVc; if (selfheat) { tmp4 = dRds_dT / Rds + dvsattemp_dT / vsattemp; dT0_dT = 2.0 * T8 * tmp4; } else tmp4 = dT0_dT = 0.0; T1 = Vgst2Vtm * (2.0 / Lambda - 1.0) + Abeff * EsatL + 3.0 * T7; dT1_dVg = (2.0 / Lambda - 1.0) - 2.0 * Vgst2Vtm * tmp1 + Abeff * dEsatL_dVg + EsatL * dAbeff_dVg + 3.0 * (T9 + T7 * tmp2 + T6 * dAbeff_dVg); dT1_dVb = Abeff * dEsatL_dVb + EsatL * dAbeff_dVb + 3.0 * (T6 * dAbeff_dVb + T7 * tmp3); dT1_dVd = Abeff * dEsatL_dVd; dT1_dVc = EsatL * dAbeff_dVc + 3.0 * T6 * dAbeff_dVc; if (selfheat) { tmp4 += dVgst2Vtm_dT / Vgst2Vtm; dT1_dT = (2.0 / Lambda - 1.0) * dVgst2Vtm_dT + Abeff * dEsatL_dT + 3.0 * T7 * tmp4; } else dT1_dT = 0.0; T2 = Vgst2Vtm * (EsatL + 2.0 * T6); dT2_dVg = EsatL + Vgst2Vtm * dEsatL_dVg + T6 * (4.0 + 2.0 * Vgst2Vtm * tmp2); dT2_dVb = Vgst2Vtm * (dEsatL_dVb + 2.0 * T6 * tmp3); dT2_dVd = Vgst2Vtm * dEsatL_dVd; if (selfheat) dT2_dT = Vgst2Vtm * dEsatL_dT + EsatL * dVgst2Vtm_dT + 2.0 * T6 * (dVgst2Vtm_dT + Vgst2Vtm * tmp4); else dT2_dT = 0.0; T3 = sqrt(T1 * T1 - 2.0 * T0 * T2); Vdsat = (T1 - T3) / T0; dVdsat_dVg = (dT1_dVg - (T1 * dT1_dVg - dT0_dVg * T2 - T0 * dT2_dVg) / T3 - Vdsat * dT0_dVg) / T0; dVdsat_dVb = (dT1_dVb - (T1 * dT1_dVb - dT0_dVb * T2 - T0 * dT2_dVb) / T3 - Vdsat * dT0_dVb) / T0; dVdsat_dVd = (dT1_dVd - (T1 * dT1_dVd - T0 * dT2_dVd) / T3) / T0; dVdsat_dVc = (dT1_dVc - (T1 * dT1_dVc - dT0_dVc * T2) / T3 - Vdsat * dT0_dVc) / T0; if (selfheat) dVdsat_dT = (dT1_dT - (T1 * dT1_dT - dT0_dT * T2 - T0 * dT2_dT) / T3 - Vdsat * dT0_dT) / T0; else dVdsat_dT = 0.0; } here->B3SOIDDvdsat = Vdsat; /* Vdsatii for impact ionization */ if (pParam->B3SOIDDaii > 0.0) { if (pParam->B3SOIDDcii != 0.0) { T0 = pParam->B3SOIDDcii / sqrt(3.0) + pParam->B3SOIDDdii; /* Hard limit Vds to T0 => T4 i.e. limit T0 to 3.0 */ T1 = Vds - T0 - 0.1; T2 = sqrt(T1 * T1 + 0.4); T3 = T0 + 0.5 * (T1 + T2); dT3_dVd = 0.5 * (1.0 + T1/T2); T4 = T3 - pParam->B3SOIDDdii; T5 = pParam->B3SOIDDcii / T4; T0 = T5 * T5; dT0_dVd = - 2 * T0 / T4 * dT3_dVd; } else { T0 = dT0_dVd = 0.0; } T0 += 1.0; T3 = pParam->B3SOIDDaii + pParam->B3SOIDDbii / Leff; T4 = 1.0 / (T0 * Vgsteff + T3 * EsatL); T5 = -T4 * T4; T6 = Vgsteff * T4; T7 = EsatL * Vgsteff; Vdsatii = T7 * T4; dT4_dVg = T5 * (T0 + T3 * dEsatL_dVg); dT4_dVb = T5 * T3 * dEsatL_dVb; dT4_dVd = T5 * (Vgsteff * dT0_dVd + T3 * dEsatL_dVd); if (selfheat) dT4_dT = T5 * (T3 * dEsatL_dT); else dT4_dT = 0.0; T8 = T4 * Vgsteff; dVdsatii_dVg = T7 * dT4_dVg + T4 * (EsatL + Vgsteff * dEsatL_dVg); dVdsatii_dVb = T7 * dT4_dVb + T8 * dEsatL_dVb; dVdsatii_dVd = T7 * dT4_dVd + T8 * dEsatL_dVd; if (selfheat) dVdsatii_dT = T7 * dT4_dT + T8 * dEsatL_dT; else dVdsatii_dT = 0.0; } else { Vdsatii = Vdsat; dVdsatii_dVg = dVdsat_dVg; dVdsatii_dVb = dVdsat_dVb; dVdsatii_dVd = dVdsat_dVd; dVdsatii_dT = dVdsat_dT; } /* Effective Vds (Vdseff) Calculation */ T1 = Vdsat - Vds - pParam->B3SOIDDdelta; dT1_dVg = dVdsat_dVg; dT1_dVd = dVdsat_dVd - 1.0; dT1_dVb = dVdsat_dVb; dT1_dVc = dVdsat_dVc; dT1_dT = dVdsat_dT; T2 = sqrt(T1 * T1 + 4.0 * pParam->B3SOIDDdelta * Vdsat); T0 = T1 / T2; T3 = 2.0 * pParam->B3SOIDDdelta / T2; dT2_dVg = T0 * dT1_dVg + T3 * dVdsat_dVg; dT2_dVd = T0 * dT1_dVd + T3 * dVdsat_dVd; dT2_dVb = T0 * dT1_dVb + T3 * dVdsat_dVb; dT2_dVc = T0 * dT1_dVc + T3 * dVdsat_dVc; if (selfheat) dT2_dT = T0 * dT1_dT + T3 * dVdsat_dT; else dT2_dT = 0.0; Vdseff = Vdsat - 0.5 * (T1 + T2); dVdseff_dVg = dVdsat_dVg - 0.5 * (dT1_dVg + dT2_dVg); dVdseff_dVd = dVdsat_dVd - 0.5 * (dT1_dVd + dT2_dVd); dVdseff_dVb = dVdsat_dVb - 0.5 * (dT1_dVb + dT2_dVb); dVdseff_dVc = dVdsat_dVc - 0.5 * (dT1_dVc + dT2_dVc); if (selfheat) dVdseff_dT = dVdsat_dT - 0.5 * (dT1_dT + dT2_dT); else dVdseff_dT = 0.0; if (Vdseff > Vds) Vdseff = Vds; /* This code is added to fixed the problem caused by computer precision when Vds is very close to Vdseff. */ diffVds = Vds - Vdseff; /* Effective Vdsii for Iii calculation */ T1 = Vdsatii - Vds - pParam->B3SOIDDdelta; T2 = sqrt(T1 * T1 + 4.0 * pParam->B3SOIDDdelta * Vdsatii); T0 = T1 / T2; T3 = 2.0 * pParam->B3SOIDDdelta / T2; T4 = T0 + T3; dT2_dVg = T4 * dVdsatii_dVg; dT2_dVd = T4 * dVdsatii_dVd - T0; dT2_dVb = T4 * dVdsatii_dVb; if (selfheat) dT2_dT = T4*dVdsatii_dT; else dT2_dT = 0.0; Vdseffii = Vdsatii - 0.5 * (T1 + T2); dVdseffii_dVg = 0.5 * (dVdsatii_dVg - dT2_dVg); dVdseffii_dVd = 0.5 * (dVdsatii_dVd - dT2_dVd + 1.0); dVdseffii_dVb = 0.5 * (dVdsatii_dVb - dT2_dVb); if (selfheat) dVdseffii_dT = 0.5 * (dVdsatii_dT - dT2_dT); else dVdseffii_dT = 0.0; diffVdsii = Vds - Vdseffii; /* Calculate VAsat */ tmp4 = 1.0 - 0.5 * Abeff * Vdsat / Vgst2Vtm; T9 = WVCoxRds * Vgsteff; T8 = T9 / Vgst2Vtm; T0 = EsatL + Vdsat + 2.0 * T9 * tmp4; T7 = 2.0 * WVCoxRds * tmp4; dT0_dVg = dEsatL_dVg + dVdsat_dVg + T7 * (1.0 + tmp2 * Vgsteff) - T8 * (Abeff * dVdsat_dVg - Abeff * Vdsat / Vgst2Vtm + Vdsat * dAbeff_dVg); dT0_dVb = dEsatL_dVb + dVdsat_dVb + T7 * tmp3 * Vgsteff - T8 * (dAbeff_dVb * Vdsat + Abeff * dVdsat_dVb); dT0_dVd = dEsatL_dVd + dVdsat_dVd - T8 * Abeff * dVdsat_dVd; dT0_dVc = dVdsat_dVc - T8 * (Abeff * dVdsat_dVc + Vdsat * dAbeff_dVc); if (selfheat) { tmp4 = dRds_dT / Rds + dvsattemp_dT / vsattemp; dT0_dT = dEsatL_dT + dVdsat_dT + T7 * tmp4 * Vgsteff - T8 * (Abeff * dVdsat_dT - Abeff * Vdsat * dVgst2Vtm_dT / Vgst2Vtm); } else dT0_dT = 0.0; T9 = WVCoxRds * Abeff; T1 = 2.0 / Lambda - 1.0 + T9; dT1_dVg = -2.0 * tmp1 + WVCoxRds * (Abeff * tmp2 + dAbeff_dVg); dT1_dVb = dAbeff_dVb * WVCoxRds + T9 * tmp3; dT1_dVc = dAbeff_dVc * WVCoxRds; if (selfheat) dT1_dT = T9 * tmp4; else dT1_dT = 0.0; Vasat = T0 / T1; dVasat_dVg = (dT0_dVg - Vasat * dT1_dVg) / T1; dVasat_dVb = (dT0_dVb - Vasat * dT1_dVb) / T1; dVasat_dVd = dT0_dVd / T1; dVasat_dVc = (dT0_dVc - Vasat * dT1_dVc) / T1; if (selfheat) dVasat_dT = (dT0_dT - Vasat * dT1_dT) / T1; else dVasat_dT = 0.0; /* Calculate VACLM */ if ((pParam->B3SOIDDpclm > 0.0) && (diffVds > 1.0e-10)) { T0 = 1.0 / (pParam->B3SOIDDpclm * Abeff * pParam->B3SOIDDlitl); dT0_dVb = -T0 / Abeff * dAbeff_dVb; dT0_dVg = -T0 / Abeff * dAbeff_dVg; dT0_dVc = -T0 / Abeff * dAbeff_dVc; T2 = Vgsteff / EsatL; T1 = Leff * (Abeff + T2); dT1_dVg = Leff * ((1.0 - T2 * dEsatL_dVg) / EsatL + dAbeff_dVg); dT1_dVb = Leff * (dAbeff_dVb - T2 * dEsatL_dVb / EsatL); dT1_dVd = -T2 * dEsatL_dVd / Esat; dT1_dVc = Leff * dAbeff_dVc; if (selfheat) dT1_dT = -T2 * dEsatL_dT / Esat; else dT1_dT = 0.0; T9 = T0 * T1; VACLM = T9 * diffVds; dVACLM_dVg = T0 * dT1_dVg * diffVds - T9 * dVdseff_dVg + T1 * diffVds * dT0_dVg; dVACLM_dVb = (dT0_dVb * T1 + T0 * dT1_dVb) * diffVds - T9 * dVdseff_dVb; dVACLM_dVd = T0 * dT1_dVd * diffVds + T9 * (1.0 - dVdseff_dVd); dVACLM_dVc = (T1 * dT0_dVc + T0 * dT1_dVc) * diffVds - T9 * dVdseff_dVc; if (selfheat) dVACLM_dT = T0 * dT1_dT * diffVds - T9 * dVdseff_dT; else dVACLM_dT = 0.0; } else { VACLM = MAX_EXP; dVACLM_dVd = dVACLM_dVg = dVACLM_dVb = dVACLM_dVc = dVACLM_dT = 0.0; } /* Calculate VADIBL */ if (pParam->B3SOIDDthetaRout > 0.0) { T8 = Abeff * Vdsat; T0 = Vgst2Vtm * T8; T1 = Vgst2Vtm + T8; dT0_dVg = Vgst2Vtm * Abeff * dVdsat_dVg + T8 + Vgst2Vtm * Vdsat * dAbeff_dVg; dT1_dVg = 1.0 + Abeff * dVdsat_dVg + Vdsat * dAbeff_dVg; dT1_dVb = dAbeff_dVb * Vdsat + Abeff * dVdsat_dVb; dT0_dVb = Vgst2Vtm * dT1_dVb; dT1_dVd = Abeff * dVdsat_dVd; dT0_dVd = Vgst2Vtm * dT1_dVd; dT1_dVc = (Abeff * dVdsat_dVc + Vdsat * dAbeff_dVc); dT0_dVc = Vgst2Vtm * dT1_dVc; if (selfheat) { dT0_dT = dVgst2Vtm_dT * T8 + Abeff * Vgst2Vtm * dVdsat_dT; dT1_dT = dVgst2Vtm_dT + Abeff * dVdsat_dT; } else dT0_dT = dT1_dT = 0.0; T9 = T1 * T1; T2 = pParam->B3SOIDDthetaRout; VADIBL = (Vgst2Vtm - T0 / T1) / T2; dVADIBL_dVg = (1.0 - dT0_dVg / T1 + T0 * dT1_dVg / T9) / T2; dVADIBL_dVb = (-dT0_dVb / T1 + T0 * dT1_dVb / T9) / T2; dVADIBL_dVd = (-dT0_dVd / T1 + T0 * dT1_dVd / T9) / T2; dVADIBL_dVc = (-dT0_dVc / T1 + T0 * dT1_dVc / T9) / T2; if (selfheat) dVADIBL_dT = (dVgst2Vtm_dT - dT0_dT/T1 + T0*dT1_dT/T9) / T2; else dVADIBL_dT = 0.0; T7 = pParam->B3SOIDDpdiblb * Vbseff; if (T7 >= -0.9) { T3 = 1.0 / (1.0 + T7); VADIBL *= T3; dVADIBL_dVg *= T3; dVADIBL_dVb = (dVADIBL_dVb - VADIBL * pParam->B3SOIDDpdiblb) * T3; dVADIBL_dVd *= T3; dVADIBL_dVc *= T3; if (selfheat) dVADIBL_dT *= T3; else dVADIBL_dT = 0.0; } else /* Added to avoid the discontinuity problem caused by pdiblcb */ { T4 = 1.0 / (0.8 + T7); T3 = (17.0 + 20.0 * T7) * T4; dVADIBL_dVg *= T3; dVADIBL_dVb = dVADIBL_dVb * T3 - VADIBL * pParam->B3SOIDDpdiblb * T4 * T4; dVADIBL_dVd *= T3; dVADIBL_dVc *= T3; if (selfheat) dVADIBL_dT *= T3; else dVADIBL_dT = 0.0; VADIBL *= T3; } } else { VADIBL = MAX_EXP; dVADIBL_dVd = dVADIBL_dVg = dVADIBL_dVb = dVADIBL_dVc = dVADIBL_dT = 0.0; } /* Calculate VA */ T8 = pParam->B3SOIDDpvag / EsatL; T9 = T8 * Vgsteff; if (T9 > -0.9) { T0 = 1.0 + T9; dT0_dVg = T8 * (1.0 - Vgsteff * dEsatL_dVg / EsatL); dT0_dVb = -T9 * dEsatL_dVb / EsatL; dT0_dVd = -T9 * dEsatL_dVd / EsatL; if (selfheat) dT0_dT = -T9 * dEsatL_dT / EsatL; else dT0_dT = 0.0; } else /* Added to avoid the discontinuity problems caused by pvag */ { T1 = 1.0 / (17.0 + 20.0 * T9); T0 = (0.8 + T9) * T1; T1 *= T1; dT0_dVg = T8 * (1.0 - Vgsteff * dEsatL_dVg / EsatL) * T1; T9 *= T1 / EsatL; dT0_dVb = -T9 * dEsatL_dVb; dT0_dVd = -T9 * dEsatL_dVd; if (selfheat) dT0_dT = -T9 * dEsatL_dT; else dT0_dT = 0.0; } tmp1 = VACLM * VACLM; tmp2 = VADIBL * VADIBL; tmp3 = VACLM + VADIBL; T1 = VACLM * VADIBL / tmp3; tmp3 *= tmp3; dT1_dVg = (tmp1 * dVADIBL_dVg + tmp2 * dVACLM_dVg) / tmp3; dT1_dVd = (tmp1 * dVADIBL_dVd + tmp2 * dVACLM_dVd) / tmp3; dT1_dVb = (tmp1 * dVADIBL_dVb + tmp2 * dVACLM_dVb) / tmp3; dT1_dVc = (tmp1 * dVADIBL_dVc + tmp2 * dVACLM_dVc) / tmp3; if (selfheat) dT1_dT = (tmp1 * dVADIBL_dT + tmp2 * dVACLM_dT ) / tmp3; else dT1_dT = 0.0; Va = Vasat + T0 * T1; dVa_dVg = dVasat_dVg + T1 * dT0_dVg + T0 * dT1_dVg; dVa_dVd = dVasat_dVd + T1 * dT0_dVd + T0 * dT1_dVd; dVa_dVb = dVasat_dVb + T1 * dT0_dVb + T0 * dT1_dVb; dVa_dVc = dVasat_dVc + T0 * dT1_dVc; if (selfheat) dVa_dT = dVasat_dT + T1 * dT0_dT + T0 * dT1_dT; else dVa_dT = 0.0; /* Calculate Ids */ CoxWovL = model->B3SOIDDcox * Weff / Leff; beta = ueff * CoxWovL; dbeta_dVg = CoxWovL * dueff_dVg + beta * dWeff_dVg / Weff; dbeta_dVd = CoxWovL * dueff_dVd; dbeta_dVb = CoxWovL * dueff_dVb + beta * dWeff_dVb / Weff; if (selfheat) dbeta_dT = CoxWovL * dueff_dT; else dbeta_dT = 0.0; T0 = 1.0 - 0.5 * Abeff * Vdseff / Vgst2Vtm; dT0_dVg = -0.5 * (Abeff * dVdseff_dVg - Abeff * Vdseff / Vgst2Vtm + Vdseff * dAbeff_dVg) / Vgst2Vtm; dT0_dVd = -0.5 * Abeff * dVdseff_dVd / Vgst2Vtm; dT0_dVb = -0.5 * (Abeff * dVdseff_dVb + dAbeff_dVb * Vdseff) / Vgst2Vtm; dT0_dVc = -0.5 * (Abeff * dVdseff_dVc + dAbeff_dVc * Vdseff) / Vgst2Vtm; if (selfheat) dT0_dT = -0.5 * (Abeff * dVdseff_dT - Abeff * Vdseff / Vgst2Vtm * dVgst2Vtm_dT) / Vgst2Vtm; else dT0_dT = 0.0; fgche1 = Vgsteff * T0; dfgche1_dVg = Vgsteff * dT0_dVg + T0; dfgche1_dVd = Vgsteff * dT0_dVd; dfgche1_dVb = Vgsteff * dT0_dVb; dfgche1_dVc = Vgsteff * dT0_dVc; if (selfheat) dfgche1_dT = Vgsteff * dT0_dT; else dfgche1_dT = 0.0; T9 = Vdseff / EsatL; fgche2 = 1.0 + T9; dfgche2_dVg = (dVdseff_dVg - T9 * dEsatL_dVg) / EsatL; dfgche2_dVd = (dVdseff_dVd - T9 * dEsatL_dVd) / EsatL; dfgche2_dVb = (dVdseff_dVb - T9 * dEsatL_dVb) / EsatL; dfgche2_dVc = (dVdseff_dVc) / EsatL; if (selfheat) dfgche2_dT = (dVdseff_dT - T9 * dEsatL_dT) / EsatL; else dfgche2_dT = 0.0; gche = beta * fgche1 / fgche2; dgche_dVg = (beta * dfgche1_dVg + fgche1 * dbeta_dVg - gche * dfgche2_dVg) / fgche2; dgche_dVd = (beta * dfgche1_dVd + fgche1 * dbeta_dVd - gche * dfgche2_dVd) / fgche2; dgche_dVb = (beta * dfgche1_dVb + fgche1 * dbeta_dVb - gche * dfgche2_dVb) / fgche2; dgche_dVc = (beta * dfgche1_dVc - gche * dfgche2_dVc) / fgche2; if (selfheat) dgche_dT = (beta * dfgche1_dT + fgche1 * dbeta_dT - gche * dfgche2_dT) / fgche2; else dgche_dT = 0.0; T0 = 1.0 + gche * Rds; T9 = Vdseff / T0; Idl = gche * T9; /* Whoa, these formulas for the derivatives of Idl are convoluted, but I verified them to be correct */ dIdl_dVg = (gche * dVdseff_dVg + T9 * dgche_dVg) / T0 - Idl * gche / T0 * dRds_dVg ; dIdl_dVd = (gche * dVdseff_dVd + T9 * dgche_dVd) / T0; dIdl_dVb = (gche * dVdseff_dVb + T9 * dgche_dVb - Idl * dRds_dVb * gche) / T0; dIdl_dVc = (gche * dVdseff_dVc + T9 * dgche_dVc) / T0; if (selfheat) dIdl_dT = (gche * dVdseff_dT + T9 * dgche_dT - Idl * dRds_dT * gche) / T0; else dIdl_dT = 0.0; T9 = diffVds / Va; T0 = 1.0 + T9; here->B3SOIDDids = Ids = Idl * T0; Gm0 = T0 * dIdl_dVg - Idl * (dVdseff_dVg + T9 * dVa_dVg) / Va; Gds0 = T0 * dIdl_dVd + Idl * (1.0 - dVdseff_dVd - T9 * dVa_dVd) / Va; Gmb0 = T0 * dIdl_dVb - Idl * (dVdseff_dVb + T9 * dVa_dVb) / Va; Gmc = T0 * dIdl_dVc - Idl * (dVdseff_dVc + T9 * dVa_dVc) / Va; if (selfheat) GmT0 = T0 * dIdl_dT - Idl * (dVdseff_dT + T9 * dVa_dT) / Va; else GmT0 = 0.0; /* This includes all dependencies from Vgsteff, Vbseff, Vcs */ Gm = Gm0 * dVgsteff_dVg + Gmb0 * dVbseff_dVg + Gmc * dVcs_dVg; Gmb = Gm0 * dVgsteff_dVb + Gmb0 * dVbseff_dVb + Gmc * dVcs_dVb; Gds = Gm0 * dVgsteff_dVd + Gmb0 * dVbseff_dVd + Gmc * dVcs_dVd + Gds0; Gme = Gm0 * dVgsteff_dVe + Gmb0 * dVbseff_dVe + Gmc * dVcs_dVe; if (selfheat) GmT = Gm0 * dVgsteff_dT + Gmb0 * dVbseff_dT + Gmc * dVcs_dT + GmT0; else GmT = 0.0; /* calculate substrate current Iii */ T2 = pParam->B3SOIDDalpha1 + pParam->B3SOIDDalpha0 / Leff; if ((T2 <= 0.0) || (pParam->B3SOIDDbeta0 <= 0.0)) { Giig = Giib = Giid = Giie = GiiT = 0.0; here->B3SOIDDiii = Iii = 0.0; } else { T5 = pParam->B3SOIDDbeta0; if (diffVdsii > T5 / EXP_THRESHOLD) { T0 = -T5 / diffVdsii; T10 = T0 / diffVdsii; dT0_dVg = T10 * dVdseffii_dVg; T1 = T2 * diffVdsii * exp(T0); T3 = T1 / diffVdsii * (T0 - 1.0); dT1_dVg = T1 * (dT0_dVg - dVdseffii_dVg / diffVdsii); dT1_dVd = -T3 * (1.0 - dVdseffii_dVd); dT1_dVb = T3 * dVdseffii_dVb; if (selfheat) dT1_dT = T3 * dVdseffii_dT; else dT1_dT = 0.0; } else { T3 = T2 * MIN_EXP; T1 = T3 * diffVdsii; dT1_dVg = -T3 * dVdseffii_dVg; dT1_dVd = T3 * (1.0 - dVdseffii_dVd); dT1_dVb = -T3 * dVdseffii_dVb; if (selfheat) dT1_dT = -T3 * dVdseffii_dT; else dT1_dT = 0.0; } here->B3SOIDDiii = Iii = T1 * Ids; T2 = T1 * Gm0 + Ids * dT1_dVg; T3 = T1 * Gds0 + Ids * dT1_dVd; T4 = T1 * Gmb0 + Ids * dT1_dVb; T5 = T1 * Gmc; if (selfheat) T6 = T1 * GmT0 + Ids * dT1_dT; else T6 = 0.0; Giig = T2 * dVgsteff_dVg + T4 * dVbseff_dVg + T5 * dVcs_dVg; Giib = T2 * dVgsteff_dVb + T4 * dVbseff_dVb + T5 * dVcs_dVb; Giid = T2 * dVgsteff_dVd + T4 * dVbseff_dVd + T5 * dVcs_dVd + T3; Giie = T2 * dVgsteff_dVe + T4 * dVbseff_dVe + T5 * dVcs_dVe; if (selfheat) GiiT = T2 * dVgsteff_dT + T4 * dVbseff_dT + T5 * dVcs_dT + T6; else GiiT = 0.0; } /* calculate GIDL current */ T0 = 3 * model->B3SOIDDtox; /* For drain side */ T1 = (Vds - Vgs_eff - pParam->B3SOIDDngidl) / T0; if ((pParam->B3SOIDDagidl <= 0.0) || (pParam->B3SOIDDbgidl <= 0.0) || (T1 <= 0.0)) { Idgidl = Gdgidld = Gdgidlg = 0.0; } else { dT1_dVd = 1 / T0; dT1_dVg = - dT1_dVd * dVgs_eff_dVg; T2 = pParam->B3SOIDDbgidl / T1; if (T2 < EXP_THRESHOLD) { Idgidl = pParam->B3SOIDDweff * pParam->B3SOIDDagidl * T1 * exp(-T2); T3 = Idgidl / T1 * (T2 + 1); Gdgidld = T3 * dT1_dVd; Gdgidlg = T3 * dT1_dVg; } else { T3 = pParam->B3SOIDDweff * pParam->B3SOIDDagidl * MIN_EXP; Idgidl = T3 * T1 ; Gdgidld = T3 * dT1_dVd; Gdgidlg = T3 * dT1_dVg; } } here->B3SOIDDigidl = Idgidl; /* For source side */ T1 = (- Vgs_eff - pParam->B3SOIDDngidl) / T0; if ((pParam->B3SOIDDagidl <= 0.0) || (pParam->B3SOIDDbgidl <= 0.0) || (T1 <= 0.0)) { Isgidl = Gsgidlg = 0; } else { dT1_dVg = - dVgs_eff_dVg / T0; T2 = pParam->B3SOIDDbgidl / T1; if (T2 < EXP_THRESHOLD) { Isgidl = pParam->B3SOIDDweff * pParam->B3SOIDDagidl * T1 * exp(-T2); T3 = Isgidl / T1 * (T2 + 1); Gsgidlg = T3 * dT1_dVg; } else { T3 = pParam->B3SOIDDweff * pParam->B3SOIDDagidl * MIN_EXP; Isgidl = T3 * T1 ; Gsgidlg = T3 * dT1_dVg; } } /* calculate diode and BJT current */ WTsi = pParam->B3SOIDDweff * model->B3SOIDDtsi; NVtm1 = Vtm * pParam->B3SOIDDndiode; NVtm2 = Vtm * pParam->B3SOIDDntun; /* Create exponents first */ T0 = Vbs / NVtm1; if (T0 < 30) { ExpVbs1 = exp(T0); dExpVbs1_dVb = ExpVbs1 / NVtm1; if (selfheat) dExpVbs1_dT = - T0 * ExpVbs1 / Temp; } else { T1 = 1.0686e13; /* exp(30) */ dExpVbs1_dVb = T1 / NVtm1; ExpVbs1 = dExpVbs1_dVb * Vbs - 29.0 * T1; if (selfheat) dExpVbs1_dT = - dExpVbs1_dVb * Vbs / Temp; } T0 = Vbd / NVtm1; if (T0 < 30) { ExpVbd1 = exp(T0); dExpVbd1_dVb = ExpVbd1 / NVtm1; if (selfheat) dExpVbd1_dT = - T0 * ExpVbd1 / Temp; } else { T1 = 1.0686e13; /* exp(30) */ dExpVbd1_dVb = T1 / NVtm1; ExpVbd1 = dExpVbd1_dVb * Vbd - 29.0 * T1; if (selfheat) dExpVbd1_dT = - dExpVbd1_dVb * Vbd / Temp; } if (jtun > 0.0) { T0 = -Vbs / NVtm2; if (T0 < 30) { ExpVbs4 = exp(T0); dExpVbs4_dVb = - ExpVbs4 / NVtm2; if (selfheat) dExpVbs4_dT = - T0 * ExpVbs4 / Temp; } else { T1 = 1.0686e13; /* exp(30) */ dExpVbs4_dVb = - T1 / NVtm2; ExpVbs4 = dExpVbs4_dVb * Vbs - 29.0 * T1; if (selfheat) dExpVbs4_dT = - dExpVbs4_dVb * Vbs / Temp; } T0 = -Vbd / NVtm2; if (T0 < 30) { ExpVbd4 = exp(T0); dExpVbd4_dVb = - ExpVbd4 / NVtm2; if (selfheat) dExpVbd4_dT = - T0 * ExpVbd4 / Temp; } else { T1 = 1.0686e13; /* exp(30) */ dExpVbd4_dVb = - T1 / NVtm2; ExpVbd4 = dExpVbd4_dVb * Vbd - 29.0 * T1; if (selfheat) dExpVbd4_dT = - dExpVbd4_dVb * Vbd / Temp; } } /* Ibs1 / Ibd1 */ if (jdif == 0.0) { Ibs1 = dIbs1_dVb = dIbs1_dT = 0.0; Ibd1 = dIbd1_dVd = dIbd1_dVb = dIbd1_dT = 0.0; } else { T5 = WTsi * jdif; Ibs1 = T5 * (ExpVbs1 - 1.0); dIbs1_dVb = T5 * dExpVbs1_dVb; if (selfheat) dIbs1_dT = Ibs1 / jdif * djdif_dT + T5 * dExpVbs1_dT; Ibd1 = T5 * (ExpVbd1 - 1.0); dIbd1_dVb = T5 * dExpVbd1_dVb; dIbd1_dVd = -dIbd1_dVb; if (selfheat) dIbd1_dT = Ibd1 / jdif * djdif_dT + T5 * dExpVbd1_dT; } /* Ibs2 */ if (jrec == 0.0) { Ibs2 = dIbs2_dVb = dIbs2_dT = 0.0; Ibd2 = dIbd2_dVb = dIbd2_dVd = dIbd2_dT = 0.0; } else { ExpVbs2 = sqrt(ExpVbs1); if (ExpVbs2 > 1e-20) { dExpVbs2_dVb = 0.5 / ExpVbs2 * dExpVbs1_dVb; if (selfheat) dExpVbs2_dT = 0.5 / ExpVbs2 * dExpVbs1_dT; } else { dExpVbs2_dVb = dExpVbs2_dT = 0.0; } ExpVbd2 = sqrt(ExpVbd1); if (ExpVbd2 > 1e-20) { dExpVbd2_dVb = 0.5 / ExpVbd2 * dExpVbd1_dVb; if (selfheat) dExpVbd2_dT = 0.5 / ExpVbd2 * dExpVbd1_dT; } else { dExpVbd2_dVb = dExpVbd2_dT = 0.0; } T8 = WTsi * jrec; T9 = 0.5 * T8 / NVtm1; Ibs2 = T8 * (ExpVbs2 - 1.0); dIbs2_dVb = T8 * dExpVbs2_dVb; if (selfheat) dIbs2_dT = Ibs2 / jrec * djrec_dT + T8 * dExpVbs2_dT; T8 = WTsi * jrec; T9 = 0.5 * T8 / NVtm1; Ibd2 = T8 * (ExpVbd2 - 1.0); dIbd2_dVb = T8 * dExpVbd2_dVb; dIbd2_dVd = -dIbd2_dVb; if (selfheat) dIbd2_dT = Ibd2 / jrec * djrec_dT + T8 * dExpVbd2_dT; } /* Ibjt */ if ((here->B3SOIDDbjtoff == 1) || (Vds == 0.0) || (jbjt == 0.0)) { Ibs3 = dIbs3_dVb = dIbs3_dVd = dIbs3_dT = 0.0; Ibd3 = dIbd3_dVb = dIbd3_dVd = dIbd3_dT = 0.0; here->B3SOIDDic = Ic = Gcd = Gcb = GcT = 0.0; } else { T0 = Leff - pParam->B3SOIDDkbjt1 * Vds; T1 = T0 / pParam->B3SOIDDedl; dT1_dVd = - pParam->B3SOIDDkbjt1 / pParam->B3SOIDDedl; if (T1 < 1e-3) /* Limit to 1/2e4 */ { T2 = 1.0 / (3.0 - 2.0e3 * T1); T1 = (2.0e-3 - T1) * T2; dT1_dVd *= T2 * T2; } else if (T1 > 1.0) { T1 = 1.0; dT1_dVd = 0.0; } BjtA = 1 - 0.5 * T1 * T1; dBjtA_dVd = - T1 * dT1_dVd; T5 = WTsi * jbjt; Ibjt = T5 * (ExpVbs1 - ExpVbd1); dIbjt_dVb = T5 * (dExpVbs1_dVb - dExpVbd1_dVb); dIbjt_dVd = T5 * dExpVbd1_dVb; if (selfheat) dIbjt_dT = T5 * (dExpVbs1_dT - dExpVbd1_dT) + Ibjt / jbjt * djbjt_dT; T3 = (1.0 - BjtA) * T5; T4 = - T5 * dBjtA_dVd; Ibs3 = T3 * ExpVbs1; dIbs3_dVb = T3 * dExpVbs1_dVb; dIbs3_dVd = T4 * ExpVbs1; if (selfheat) dIbs3_dT = Ibs3 / jbjt * djbjt_dT + T3 * dExpVbs1_dT; Ibd3 = T3 * ExpVbd1; dIbd3_dVb = T3 * dExpVbd1_dVb; dIbd3_dVd = T4 * ExpVbd1 - dIbd3_dVb; if (selfheat) dIbd3_dT = Ibd3 / jbjt * djbjt_dT + T3 * dExpVbd1_dT; here->B3SOIDDic = Ic = Ibjt - Ibs3 + Ibd3; Gcd = dIbjt_dVd - dIbs3_dVd + dIbd3_dVd; Gcb = dIbjt_dVb - dIbs3_dVb + dIbd3_dVb; if (selfheat) GcT = dIbjt_dT - dIbs3_dT + dIbd3_dT; else GcT = 0.0; } if (jtun == 0.0) { Ibs4 = dIbs4_dVb = dIbs4_dT = 0.0; Ibd4 = dIbd4_dVb = dIbd4_dVd = dIbd4_dT = 0.0; } else { T5 = WTsi * jtun; Ibs4 = T5 * (1.0 - ExpVbs4); dIbs4_dVb = - T5 * dExpVbs4_dVb; if (selfheat) dIbs4_dT = Ibs4 / jtun * djtun_dT - T5 * dExpVbs4_dT; Ibd4 = T5 * (1.0 - ExpVbd4); dIbd4_dVb = - T5 * dExpVbd4_dVb; dIbd4_dVd = -dIbd4_dVb; if (selfheat) dIbd4_dT = Ibd4 / jtun * djtun_dT - T5 * dExpVbd4_dT; } here->B3SOIDDdum1 = Ibs3 + Ibd4; here->B3SOIDDdum2 = Ibs1; here->B3SOIDDdum3 = Ibjt; here->B3SOIDDdum4 = Ic; here->B3SOIDDitun = - Ibd3 - Ibd4; here->B3SOIDDibs = Ibs = Ibs1 + Ibs2 + Ibs3 + Ibs4; here->B3SOIDDibd = Ibd = Ibd1 + Ibd2 + Ibd3 + Ibd4; Gjsb = dIbs1_dVb + dIbs2_dVb + dIbs3_dVb + dIbs4_dVb; Gjsd = dIbs3_dVd; if (selfheat) GjsT = dIbs1_dT + dIbs2_dT + dIbs3_dT + dIbs4_dT; else GjsT = 0.0; Gjdb = dIbd1_dVb + dIbd2_dVb + dIbd3_dVb + dIbd4_dVb; Gjdd = dIbd1_dVd + dIbd2_dVd + dIbd3_dVd + dIbd4_dVd; if (selfheat) GjdT = dIbd1_dT + dIbd2_dT + dIbd3_dT + dIbd4_dT; else GjdT = 0.0; /* Current through body resistor */ /* Current going out is +ve */ if ((here->B3SOIDDbodyMod == 0) || (here->B3SOIDDbodyMod == 2)) { Ibp = Gbpbs = Gbpgs = Gbpds = Gbpes = Gbpps = GbpT = 0.0; } else { /* here->B3SOIDDbodyMod == 1 */ if (pParam->B3SOIDDrbody < 1e-30) { if (here->B3SOIDDrbodyext <= 1e-30) T0 = 1.0 / 1e-30; else T0 = 1.0 / here->B3SOIDDrbodyext; Ibp = Vbp * T0; Gbpbs = T0 * dVbp_dVb; Gbpps = T0 * dVbp_dVp; Gbpgs = T0 * dVbp_dVg; Gbpds = T0 * dVbp_dVd; Gbpes = 0.0; if (selfheat) GbpT = T0 * dVbp_dT; else GbpT = 0.0; } else { T0 = 1.0 / pParam->B3SOIDDrbody; if (Vbp >= 0.0) { T1 = sqrt(Vcs); T3 = T1 * T0; T5 = 1.0 + here->B3SOIDDrbodyext * T3; T6 = T3 / T5; T2 = 0.5 * T0 / T1; T7 = T2 / (T5 * T5); Ibp = Vbp * T6; /* Whoa, again these derivatives are convoluted, but correct */ Gbpbs = T6 * dVbp_dVb + Vbp * T7 * dVcs_dVb; Gbpps = T6 * dVbp_dVp; Gbpgs = T6 * dVbp_dVg + Vbp * T7 * dVcs_dVg; Gbpds = T6 * dVbp_dVg + Vbp * T7 * dVcs_dVd; Gbpes = T6 * dVbp_dVg + Vbp * T7 * dVcs_dVe; if (selfheat) GbpT = T6 * dVbp_dT + Vbp * T7 * dVcs_dT; else GbpT = 0.0; } else { T1 = sqrt(Vpsdio - Vbs0eff); T3 = T1 * T0; T5 = 1.0 + here->B3SOIDDrbodyext * T3; T6 = T3 / T5; T2 = 0.5 * T0 / T1; Ibp = Vbp * T6; T7 = T2 / (T5 * T5); Gbpbs = T6 * dVbp_dVb; Gbpps = T6 * dVbp_dVp + Vbp * T7 * dVpsdio_dVp; Gbpgs = Vbp * T7 * (dVpsdio_dVg - dVbs0eff_dVg); Gbpds = Vbp * T7 * (dVpsdio_dVd - dVbs0eff_dVd); Gbpes = Vbp * T7 * (dVpsdio_dVe - dVbs0eff_dVe); if (selfheat) GbpT = Vbp * T7 * (dVpsdio_dT - dVbs0eff_dT); else GbpT = 0.0; } } } here->B3SOIDDibp = Ibp; here->B3SOIDDgbpbs = Gbpbs; here->B3SOIDDgbpgs = Gbpgs; here->B3SOIDDgbpds = Gbpds; here->B3SOIDDgbpes = Gbpes; here->B3SOIDDgbpps = Gbpps; if (selfheat) here->B3SOIDDgbpT = GbpT; else { GbpT = 0.0; here->B3SOIDDgbpT = 0.0; } here->B3SOIDDcbodcon = Ibp - (Gbpbs * Vbs + Gbpgs * Vgs + Gbpds * Vds + Gbpes * Ves + Gbpps * Vps + GbpT * delTemp); /* Current going out of drainprime node into the drain of device */ /* "node" means the SPICE circuit node */ here->B3SOIDDcdrain = Ids + Ic; here->B3SOIDDcd = Ids + Ic - Ibd + Iii + Idgidl; here->B3SOIDDcb = Ibs + Ibd + Ibp - Iii - Idgidl - Isgidl; here->B3SOIDDgds = Gds + Gcd; here->B3SOIDDgm = Gm; here->B3SOIDDgmbs = Gmb + Gcb; here->B3SOIDDgme = Gme; if (selfheat) here->B3SOIDDgmT = GmT + GcT; else here->B3SOIDDgmT = 0.0; /* note that sign is switched because power flows out of device into the temperature node. Currently ommit self-heating due to bipolar current because it can cause convergence problem*/ here->B3SOIDDgtempg = -Gm * Vds; here->B3SOIDDgtempb = -Gmb * Vds; here->B3SOIDDgtempe = -Gme * Vds; here->B3SOIDDgtempT = -GmT * Vds; here->B3SOIDDgtempd = -Gds * Vds - Ids; here->B3SOIDDcth = - Ids * Vds - model->B3SOIDDtype * (here->B3SOIDDgtempg * Vgs + here->B3SOIDDgtempb * Vbs + here->B3SOIDDgtempe * Ves + here->B3SOIDDgtempd * Vds) - here->B3SOIDDgtempT * delTemp; /* Body current which flows into drainprime node from the drain of device */ here->B3SOIDDgjdb = Gjdb - Giib; here->B3SOIDDgjdd = Gjdd - (Giid + Gdgidld); here->B3SOIDDgjdg = - (Giig + Gdgidlg); here->B3SOIDDgjde = - Giie; if (selfheat) here->B3SOIDDgjdT = GjdT - GiiT; else here->B3SOIDDgjdT = 0.0; here->B3SOIDDcjd = Ibd - Iii - Idgidl - here->B3SOIDDminIsub/2 - (here->B3SOIDDgjdb * Vbs + here->B3SOIDDgjdd * Vds + here->B3SOIDDgjdg * Vgs + here->B3SOIDDgjde * Ves + here->B3SOIDDgjdT * delTemp); /* Body current which flows into sourceprime node from the source of device */ here->B3SOIDDgjsb = Gjsb; here->B3SOIDDgjsd = Gjsd; here->B3SOIDDgjsg = - Gsgidlg; if (selfheat) here->B3SOIDDgjsT = GjsT; else here->B3SOIDDgjsT = 0.0; here->B3SOIDDcjs = Ibs - Isgidl - here->B3SOIDDminIsub/2 - (here->B3SOIDDgjsb * Vbs + here->B3SOIDDgjsd * Vds + here->B3SOIDDgjsg * Vgs + here->B3SOIDDgjsT * delTemp); /* Current flowing into body node */ here->B3SOIDDgbbs = Giib - Gjsb - Gjdb - Gbpbs; here->B3SOIDDgbgs = Giig + Gdgidlg + Gsgidlg - Gbpgs; here->B3SOIDDgbds = Giid + Gdgidld - Gjsd - Gjdd - Gbpds; here->B3SOIDDgbes = Giie - Gbpes; here->B3SOIDDgbps = - Gbpps; if (selfheat) here->B3SOIDDgbT = GiiT - GjsT - GjdT - GbpT; else here->B3SOIDDgbT = 0.0; here->B3SOIDDcbody = Iii + Idgidl + Isgidl - Ibs - Ibd - Ibp + here->B3SOIDDminIsub - (here->B3SOIDDgbbs * Vbs + here->B3SOIDDgbgs * Vgs + here->B3SOIDDgbds * Vds + here->B3SOIDDgbps * Vps + here->B3SOIDDgbes * Ves + here->B3SOIDDgbT * delTemp); /* Calculate Qinv for Noise analysis */ T1 = Vgsteff * (1.0 - 0.5 * Abeff * Vdseff / Vgst2Vtm); here->B3SOIDDqinv = -model->B3SOIDDcox * pParam->B3SOIDDweff * Leff * T1; /* Begin CV (charge) model */ if ((model->B3SOIDDxpart < 0) || (!ChargeComputationNeeded)) { qgate = qdrn = qsrc = qbody = 0.0; here->B3SOIDDcggb = here->B3SOIDDcgsb = here->B3SOIDDcgdb = 0.0; here->B3SOIDDcdgb = here->B3SOIDDcdsb = here->B3SOIDDcddb = 0.0; here->B3SOIDDcbgb = here->B3SOIDDcbsb = here->B3SOIDDcbdb = 0.0; goto finished; } else { CoxWL = model->B3SOIDDcox * pParam->B3SOIDDweffCV * pParam->B3SOIDDleffCV; /* By using this Vgsteff,cv, discontinuity in moderate inversion charges can be avoid. However, in capMod=3, Vdsat from IV is used. The dVdsat_dVg is referred to the IV Vgsteff and therefore induces error in the charges derivatives. Fortunately, Vgsteff,iv and Vgsteff,cv are different only in subthreshold where Qsubs is neglectible. So the errors in derivatives is not a serious problem */ if ((VgstNVt > -EXP_THRESHOLD) && (VgstNVt < EXP_THRESHOLD)) { ExpVgst *= ExpVgst; Vgsteff = n * Vtm * log(1.0 + ExpVgst); T0 = ExpVgst / (1.0 + ExpVgst); T1 = -T0 * (dVth_dVb + Vgst / n * dn_dVb) + Vgsteff / n * dn_dVb; dVgsteff_dVd = -T0 * (dVth_dVd + Vgst / n * dn_dVd) + Vgsteff / n * dn_dVd + T1 * dVbseff_dVd; dVgsteff_dVg = T0 * dVgs_eff_dVg + T1 * dVbseff_dVg; dVgsteff_dVb = T1 * dVbseff_dVb; dVgsteff_dVe = T1 * dVbseff_dVe; if (selfheat) dVgsteff_dT = -T0 * (dVth_dT + Vgst / Temp) + Vgsteff / Temp + T1 * dVbseff_dT; else dVgsteff_dT = 0.0; } Vfb = Vth - phi - pParam->B3SOIDDk1 * sqrtPhis; dVfb_dVb = dVth_dVb - pParam->B3SOIDDk1 * dsqrtPhis_dVb; dVfb_dVd = dVth_dVd; dVfb_dT = dVth_dT; if ((model->B3SOIDDcapMod == 2) || (model->B3SOIDDcapMod == 3)) { /* Necessary because charge behaviour very strange at Vgsteff = 0 */ Vgsteff += 1e-4; /* Something common in capMod 2 and 3 */ V3 = Vfb - Vgs_eff + Vbseff - DELTA_3; if (Vfb <= 0.0) { T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * Vfb); T2 = -DELTA_3 / T0; } else { T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * Vfb); T2 = DELTA_3 / T0; } T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = Vfb - 0.5 * (V3 + T0); dVfbeff_dVd = (1.0 - T1 - T2) * dVfb_dVd; dVfbeff_dVb = (1.0 - T1 - T2) * dVfb_dVb - T1; dVfbeff_dVrg = T1 * dVgs_eff_dVg; if (selfheat) dVfbeff_dT = (1.0 - T1 - T2) * dVfb_dT; else dVfbeff_dT = 0.0; Qac0 = -CoxWL * (Vfbeff - Vfb); dQac0_dVrg = -CoxWL * dVfbeff_dVrg; dQac0_dVd = -CoxWL * (dVfbeff_dVd - dVfb_dVd); dQac0_dVb = -CoxWL * (dVfbeff_dVb - dVfb_dVb); if (selfheat) dQac0_dT = -CoxWL * (dVfbeff_dT - dVfb_dT); else dQac0_dT = 0.0; T0 = 0.5 * K1; T3 = Vgs_eff - Vfbeff - Vbseff - Vgsteff; if (pParam->B3SOIDDk1 == 0.0) { T1 = 0.0; T2 = 0.0; } else if (T3 < 0.0) { T1 = T0 + T3 / pParam->B3SOIDDk1; T2 = CoxWL; } else { T1 = sqrt(T0 * T0 + T3); T2 = CoxWL * T0 / T1; } Qsub0 = CoxWL * K1 * (T0 - T1); dQsub0_dVrg = T2 * (dVfbeff_dVrg - dVgs_eff_dVg); dQsub0_dVg = T2; dQsub0_dVd = T2 * dVfbeff_dVd; dQsub0_dVb = T2 * (dVfbeff_dVb + 1); if (selfheat) dQsub0_dT = T2 * dVfbeff_dT; else dQsub0_dT = 0.0; One_Third_CoxWL = CoxWL / 3.0; Two_Third_CoxWL = 2.0 * One_Third_CoxWL; AbulkCV = Abulk0 * pParam->B3SOIDDabulkCVfactor; dAbulkCV_dVb = pParam->B3SOIDDabulkCVfactor * dAbulk0_dVb; /* This is actually capMod=2 calculation */ VdsatCV = Vgsteff / AbulkCV; dVdsatCV_dVg = 1.0 / AbulkCV; dVdsatCV_dVb = -VdsatCV * dAbulkCV_dVb / AbulkCV; VdsatCV += 1e-5; V4 = VdsatCV - Vds - DELTA_4; T0 = sqrt(V4 * V4 + 4.0 * DELTA_4 * VdsatCV); VdseffCV = VdsatCV - 0.5 * (V4 + T0); T1 = 0.5 * (1.0 + V4 / T0); T2 = DELTA_4 / T0; T3 = (1.0 - T1 - T2) / AbulkCV; dVdseffCV_dVg = T3; dVdseffCV_dVd = T1; dVdseffCV_dVb = -T3 * VdsatCV * dAbulkCV_dVb; if (model->B3SOIDDcapMod == 2) { /* VdsCV Make it compatible with capMod 3 */ VdsCV = VdseffCV; dVdsCV_dVg = dVdseffCV_dVg; dVdsCV_dVd = dVdseffCV_dVd; dVdsCV_dVb = dVdseffCV_dVb; dVdsCV_dVc = 0.0; /* This is good for Xc calculation */ VdsCV += 1e-5; if (VdsCV > (VdsatCV-1e-7)) VdsCV=VdsatCV-1e-7; /* VcsCV calculation */ T1 = VdsCV - Vcs - VdsCV * VdsCV * DELTA_Vcscv; T5 = 2 * DELTA_Vcscv; T2 = sqrt(T1 * T1 + T5 * VdsCV * VdsCV); dT1_dVb = dVdsCV_dVb * (1.0 - 2.0 * VdsCV * DELTA_Vcscv); dT2_dVb = (T1 * dT1_dVb + T5 * VdsCV * dVdsCV_dVb)/T2; dT1_dVd = dVdsCV_dVd * (1.0 - 2.0 * VdsCV * DELTA_Vcscv); dT2_dVd = (T1 * dT1_dVd + T5 * VdsCV * dVdsCV_dVd)/ T2; dT1_dVg = dVdsCV_dVg * (1.0 - 2.0 * VdsCV * DELTA_Vcscv) ; dT2_dVg = (T1 * dT1_dVg + T5 * VdsCV * dVdsCV_dVg)/T2; dT1_dVc = -1; dT2_dVc = T1 * dT1_dVc / T2; VcsCV = Vcs + 0.5 * (T1 - T2); dVcsCV_dVb = 0.5 * (dT1_dVb - dT2_dVb); dVcsCV_dVg = 0.5 * (dT1_dVg - dT2_dVg); dVcsCV_dVd = 0.5 * (dT1_dVd - dT2_dVd); dVcsCV_dVc = 1.0 + 0.5 * (dT1_dVc - dT2_dVc); if (VcsCV < 0.0) VcsCV = 0.0; else if (VcsCV > VdsCV) VcsCV = VdsCV; /* Xc calculation */ T3 = 2 * VdsatCV - VcsCV; T4 = 2 * VdsatCV - VdsCV; dT4_dVg = 2 * dVdsatCV_dVg - dVdsCV_dVg; dT4_dVd = - dVdsCV_dVd; dT4_dVb = 2 * dVdsatCV_dVb - dVdsCV_dVb; T0 = T3 * VcsCV; T1 = T4 * VdsCV; Xc = T0 / T1; dT0_dVb = VcsCV * (2 * dVdsatCV_dVb - dVcsCV_dVb) + T3 * dVcsCV_dVb; dT0_dVg = VcsCV * (2 * dVdsatCV_dVg - dVcsCV_dVg) + T3 * dVcsCV_dVg; dT0_dVd = 2 * dVcsCV_dVd * (VdsatCV - VcsCV); dT0_dVc = 2 * dVcsCV_dVc * (VdsatCV - VcsCV); dT1_dVb = VdsCV * dT4_dVb + T4 * dVdsCV_dVb; dT1_dVg = VdsCV * dT4_dVg + T4 * dVdsCV_dVg; dT1_dVd = dVdsCV_dVd * T4 + VdsCV * dT4_dVd; T3 = T1 * T1; dXc_dVb = (dT0_dVb - dT1_dVb * Xc) / T1; dXc_dVg = (dT0_dVg - dT1_dVg * Xc) / T1; dXc_dVd = (dT0_dVd - dT1_dVd * Xc) / T1; dXc_dVc = dT0_dVc / T1; T0 = AbulkCV * VcsCV; dT0_dVb = dAbulkCV_dVb * VcsCV + dVcsCV_dVb * AbulkCV; dT0_dVg = dVcsCV_dVg * AbulkCV; dT0_dVd = AbulkCV * dVcsCV_dVd; dT0_dVc = AbulkCV * dVcsCV_dVc; T1 = 12.0 * (Vgsteff - 0.5 * T0 + 1e-20); dT1_dVb = -6.0 * dT0_dVb; dT1_dVg = 12.0 * (1.0 - 0.5 * dT0_dVg); dT1_dVd = -6.0 * dT0_dVd; dT1_dVc = -6.0 * dT0_dVc; T2 = VcsCV / T1; T4 = T1 * T1; dT2_dVb = ( dVcsCV_dVb * T1 - dT1_dVb * VcsCV ) / T4; dT2_dVg = ( dVcsCV_dVg * T1 - dT1_dVg * VcsCV ) / T4; dT2_dVd = ( dVcsCV_dVd * T1 - dT1_dVd * VcsCV ) / T4; dT2_dVc = ( dVcsCV_dVc * T1 - dT1_dVc * VcsCV ) / T4; T3 = T0 * T2; dT3_dVb = dT0_dVb * T2 + dT2_dVb * T0; dT3_dVg = dT0_dVg * T2 + dT2_dVg * T0; dT3_dVd = dT0_dVd * T2 + dT2_dVd * T0; dT3_dVc = dT0_dVc * T2 + dT2_dVc * T0; T4 = 1.0 - AbulkCV; dT4_dVb = - dAbulkCV_dVb; T5 = 0.5 * VcsCV - T3; dT5_dVb = 0.5 * dVcsCV_dVb - dT3_dVb; dT5_dVg = 0.5 * dVcsCV_dVg - dT3_dVg; dT5_dVd = 0.5 * dVcsCV_dVd - dT3_dVd; dT5_dVc = 0.5 * dVcsCV_dVc - dT3_dVc; T6 = T4 * T5 * CoxWL; T7 = CoxWL * Xc; Qsubs1 = CoxWL * Xc * T4 * T5; dQsubs1_dVb = T6 * dXc_dVb + T7 * ( T4*dT5_dVb + dT4_dVb*T5 ); dQsubs1_dVg = T6 * dXc_dVg + T7 * T4 * dT5_dVg; dQsubs1_dVd = T6 * dXc_dVd + T7 * T4 * dT5_dVd; dQsubs1_dVc = T6 * dXc_dVc + T7 * T4 * dT5_dVc; Qsubs2 = -CoxWL * (1-Xc) * (AbulkCV - 1.0) * Vcs; T2 = CoxWL * (AbulkCV - 1.0) * Vcs; dQsubs2_dVb = T2 * dXc_dVb - CoxWL * (1-Xc) * Vcs * dAbulkCV_dVb; dQsubs2_dVg = T2 * dXc_dVg; dQsubs2_dVd = T2 * dXc_dVd; dQsubs2_dVc = T2 * dXc_dVc - CoxWL * (1-Xc) * (AbulkCV - 1.0); Qbf = Qac0 + Qsub0 + Qsubs1 + Qsubs2; dQbf_dVrg = dQac0_dVrg + dQsub0_dVrg; dQbf_dVg = dQsub0_dVg + dQsubs1_dVg + dQsubs2_dVg; dQbf_dVd = dQac0_dVd + dQsub0_dVd + dQsubs1_dVd + dQsubs2_dVd; dQbf_dVb = dQac0_dVb + dQsub0_dVb + dQsubs1_dVb + dQsubs2_dVb; dQbf_dVc = dQsubs1_dVc + dQsubs2_dVc; dQbf_dVe = 0.0; if (selfheat) dQbf_dT = dQac0_dT + dQsub0_dT; else dQbf_dT = 0.0; } /* End of if (capMod == 2) */ else if (model->B3SOIDDcapMod == 3) { /* Front gate strong inversion depletion charge */ /* VdssatCV calculation */ T1 = Vgsteff + K1*sqrtPhis + 0.5*K1*K1; T2 = Vgsteff + K1*sqrtPhis + Phis + 0.25*K1*K1; dT1_dVb = K1*dsqrtPhis_dVb; dT2_dVb = dT1_dVb + dPhis_dVb; dT1_dVg = dT2_dVg = 1; /* Note VdsatCV is redefined in capMod = 3 */ VdsatCV = T1 - K1*sqrt(T2); dVdsatCV_dVb = dT1_dVb - K1/2/sqrt(T2)*dT2_dVb; dVdsatCV_dVg = dT1_dVg - K1/2/sqrt(T2)*dT2_dVg; T1 = VdsatCV - Vdsat; dT1_dVg = dVdsatCV_dVg - dVdsat_dVg; dT1_dVb = dVdsatCV_dVb - dVdsat_dVb; dT1_dVd = - dVdsat_dVd; dT1_dVc = - dVdsat_dVc; dT1_dT = - dVdsat_dT; if (!(T1 == 0.0)) { T3 = -0.5 * Vdsat / T1; /* Vdsmax */ T2 = T3 * Vdsat; T4 = T2 + T1 * T3 * T3; /* fmax */ if ((Vdseff > T2) && (T1 < 0)) { VdsCV = T4; T5 = -0.5 / (T1 * T1); dT3_dVg = T5 * (T1 * dVdsat_dVg - Vdsat * dT1_dVg); dT3_dVb = T5 * (T1 * dVdsat_dVb - Vdsat * dT1_dVb); dT3_dVd = T5 * (T1 * dVdsat_dVd - Vdsat * dT1_dVd); dT3_dVc = T5 * (T1 * dVdsat_dVc - Vdsat * dT1_dVc); if (selfheat) dT3_dT=T5 * (T1 * dVdsat_dT - Vdsat * dT1_dT); else dT3_dT=0.0; dVdsCV_dVd = T3 * dVdsat_dVd + Vdsat * dT3_dVd + T3 * (2 * T1 * dT3_dVd + T3 * dT1_dVd); dVdsCV_dVg = T3 * dVdsat_dVg + Vdsat * dT3_dVg + T3 * (2 * T1 * dT3_dVg + T3 * dT1_dVg); dVdsCV_dVb = T3 * dVdsat_dVb + Vdsat * dT3_dVb + T3 * (2 * T1 * dT3_dVb + T3 * dT1_dVb); dVdsCV_dVc = T3 * dVdsat_dVc + Vdsat * dT3_dVc + T3 * (2 * T1 * dT3_dVc + T3 * dT1_dVc); if (selfheat) dVdsCV_dT = T3 * dVdsat_dT + Vdsat * dT3_dT + T3 * (2 * T1 * dT3_dT + T3 * dT1_dT ); else dVdsCV_dT = 0.0; } else { T5 = Vdseff / Vdsat; T6 = T5 * T5; T7 = 2 * T1 * T5 / Vdsat; T8 = T7 / Vdsat; VdsCV = Vdseff + T1 * T6; dVdsCV_dVd = dVdseff_dVd + T8 * ( Vdsat * dVdseff_dVd - Vdseff * dVdsat_dVd) + T6 * dT1_dVd; dVdsCV_dVb = dVdseff_dVb + T8 * ( Vdsat * dVdseff_dVb - Vdseff * dVdsat_dVb) + T6 * dT1_dVb; dVdsCV_dVg = dVdseff_dVg + T8 * ( Vdsat * dVdseff_dVg - Vdseff * dVdsat_dVg) + T6 * dT1_dVg; dVdsCV_dVc = dVdseff_dVc + T8 * ( Vdsat * dVdseff_dVc - Vdseff * dVdsat_dVc) + T6 * dT1_dVc; if (selfheat) dVdsCV_dT = dVdseff_dT + T8 * ( Vdsat * dVdseff_dT - Vdseff * dVdsat_dT ) + T6 * dT1_dT ; else dVdsCV_dT = 0.0; } } else { VdsCV = Vdseff; dVdsCV_dVb = dVdseff_dVb; dVdsCV_dVd = dVdseff_dVd; dVdsCV_dVg = dVdseff_dVg; dVdsCV_dVc = dVdseff_dVc; dVdsCV_dT = dVdseff_dT; } if (VdsCV < 0.0) VdsCV = 0.0; VdsCV += 1e-4; if (VdsCV > (VdsatCV - 1e-7)) { VdsCV = VdsatCV - 1e-7; } Phisd = Phis + VdsCV; dPhisd_dVb = dPhis_dVb + dVdsCV_dVb; dPhisd_dVd = dVdsCV_dVd; dPhisd_dVg = dVdsCV_dVg; dPhisd_dVc = dVdsCV_dVc; dPhisd_dT = dVdsCV_dT; sqrtPhisd = sqrt(Phisd); /* Qdep0 - Depletion charge at Vgs=Vth */ T10 = CoxWL * K1; Qdep0 = T10 * sqrtPhis; dQdep0_dVb = T10 * dsqrtPhis_dVb; /* VcsCV calculation */ T1 = VdsCV - Vcs - VdsCV * VdsCV * DELTA_Vcscv; T5 = 2 * DELTA_Vcscv; T2 = sqrt(T1 * T1 + T5 * VdsCV * VdsCV); dT1_dVb = dVdsCV_dVb * (1.0 - 2.0 * VdsCV * DELTA_Vcscv); dT2_dVb = (T1 * dT1_dVb + T5 * VdsCV * dVdsCV_dVb)/T2; dT1_dVd = dVdsCV_dVd * (1.0 - 2.0 * VdsCV * DELTA_Vcscv); dT2_dVd = (T1 * dT1_dVd + T5 * VdsCV * dVdsCV_dVd)/ T2; dT1_dVg = dVdsCV_dVg * (1.0 - 2.0 * VdsCV * DELTA_Vcscv) ; dT2_dVg = (T1 * dT1_dVg + T5 * VdsCV * dVdsCV_dVg)/T2; dT1_dVc = dVdsCV_dVc * (1.0 - 2.0 * VdsCV * DELTA_Vcscv) - 1; dT2_dVc = (T1 * dT1_dVc + T5 * VdsCV * dVdsCV_dVc)/T2; if (selfheat) { dT1_dT = dVdsCV_dT * (1.0 - 2.0 * VdsCV * DELTA_Vcscv); dT2_dT = (T1 * dT1_dT + T5 * VdsCV * dVdsCV_dT )/ T2; } else dT1_dT = dT2_dT = 0.0; VcsCV = Vcs + 0.5*(T1 - T2); dVcsCV_dVb = 0.5 * (dT1_dVb - dT2_dVb); dVcsCV_dVg = 0.5 * (dT1_dVg - dT2_dVg); dVcsCV_dVd = 0.5 * (dT1_dVd - dT2_dVd); dVcsCV_dVc = 1 + 0.5 * (dT1_dVc - dT2_dVc); if (selfheat) dVcsCV_dT = 0.5 * (dT1_dT - dT2_dT); else dVcsCV_dT = 0.0; Phisc = Phis + VcsCV; dPhisc_dVb = dPhis_dVb + dVcsCV_dVb; dPhisc_dVd = dVcsCV_dVd; dPhisc_dVg = dVcsCV_dVg; dPhisc_dVc = dVcsCV_dVc; dPhisc_dT = dVcsCV_dT; sqrtPhisc = sqrt(Phisc); /* Xc calculation */ T1 = Vgsteff + K1*sqrtPhis - 0.5*VdsCV; T2 = CONST_2OV3*K1*(Phisd*sqrtPhisd - Phis*sqrtPhis); T3 = Vgsteff + K1*sqrtPhis - 0.5*VcsCV; T4 = CONST_2OV3*K1*(Phisc*sqrtPhisc - Phis*sqrtPhis); T5 = T1*VdsCV - T2; T6 = T3*VcsCV - T4; Xc = T6/T5; dT1_dVb = K1*dsqrtPhis_dVb - 0.5*dVdsCV_dVb; dT2_dVb = K1*(sqrtPhisd*dPhisd_dVb - sqrtPhis*dPhis_dVb); dT3_dVb = K1*dsqrtPhis_dVb - 0.5*dVcsCV_dVb; dT4_dVb = K1*(sqrtPhisc*dPhisc_dVb - sqrtPhis*dPhis_dVb); dT1_dVd = - 0.5*dVdsCV_dVd; dT2_dVd = K1 * (sqrtPhisd*dPhisd_dVd); dT3_dVd = - 0.5*dVcsCV_dVd; dT4_dVd = K1 * (sqrtPhisc*dPhisc_dVd); dT1_dVg = 1 - 0.5*dVdsCV_dVg; dT2_dVg = K1 * (sqrtPhisd*dPhisd_dVg); dT3_dVg = 1 - 0.5*dVcsCV_dVg; dT4_dVg = K1 * (sqrtPhisc*dPhisc_dVg); dT1_dVc = - 0.5*dVdsCV_dVc; dT2_dVc = K1 * (sqrtPhisd*dPhisd_dVc); dT3_dVc = - 0.5*dVcsCV_dVc; dT4_dVc = K1 * (sqrtPhisc*dPhisc_dVc); if (selfheat) { dT1_dT = - 0.5*dVdsCV_dT; dT2_dT = K1 * (sqrtPhisd*dPhisd_dT); dT3_dT = - 0.5*dVcsCV_dT; dT4_dT = K1 * (sqrtPhisc*dPhisc_dT); } else dT1_dT = dT2_dT = dT3_dT = dT4_dT = 0.0; dT5_dVb = T1 * dVdsCV_dVb + VdsCV * dT1_dVb - dT2_dVb; dT6_dVb = T3 * dVcsCV_dVb + VcsCV * dT3_dVb - dT4_dVb; dT5_dVd = T1 * dVdsCV_dVd + VdsCV * dT1_dVd - dT2_dVd; dT6_dVd = T3 * dVcsCV_dVd + VcsCV * dT3_dVd - dT4_dVd; dT5_dVg = T1 * dVdsCV_dVg + VdsCV * dT1_dVg - dT2_dVg; dT6_dVg = T3 * dVcsCV_dVg + VcsCV * dT3_dVg - dT4_dVg; dT5_dVc = T1 * dVdsCV_dVc + VdsCV * dT1_dVc - dT2_dVc; dT6_dVc = T3 * dVcsCV_dVc + VcsCV * dT3_dVc - dT4_dVc; if (selfheat) { dT5_dT = T1 * dVdsCV_dT + VdsCV * dT1_dT - dT2_dT; dT6_dT = T3 * dVcsCV_dT + VcsCV * dT3_dT - dT4_dT; } else dT5_dT = dT6_dT = 0.0; dXc_dVb = (dT6_dVb - T6/T5 * dT5_dVb) / T5; dXc_dVd = (dT6_dVd - T6/T5 * dT5_dVd) / T5; dXc_dVg = (dT6_dVg - T6/T5 * dT5_dVg) / T5; dXc_dVc = (dT6_dVc - T6/T5 * dT5_dVc) / T5; if (selfheat) dXc_dT = (dT6_dT - T6/T5 * dT5_dT ) / T5; else dXc_dT = 0.0; T10 = Phis * sqrtPhis ; T5 = Phisc * sqrtPhisc; T0 = T5 - T10; T1 = Vgsteff + K1*sqrtPhis + Phis; T2 = Phisc*T5 - Phis*T10; T3 = K1*VcsCV*(Phis + 0.5*VcsCV); dT0_dVb = 1.5 *(sqrtPhisc*dPhisc_dVb-sqrtPhis*dPhis_dVb); dT1_dVb = (0.5*K1/sqrtPhis + 1) * dPhis_dVb; dT2_dVb = 2.5 * (T5 * dPhisc_dVb - T10 * dPhis_dVb); dT3_dVb = K1 * ( VcsCV * (dPhis_dVb + 0.5 * dVcsCV_dVb) + dVcsCV_dVb * (Phis + 0.5*VcsCV)); dT0_dVd = 1.5 * sqrtPhisc * dPhisc_dVd; dT1_dVd = 0; dT2_dVd = 2.5 * T5 * dPhisc_dVd; dT3_dVd = K1 * (Phis + VcsCV) * dVcsCV_dVd; dT0_dVg = 1.5 * sqrtPhisc * dPhisc_dVg; dT1_dVg = 1; dT2_dVg = 2.5 * T5 * dPhisc_dVg; dT3_dVg = K1 * (VcsCV * 0.5 * dVcsCV_dVg + dVcsCV_dVg * (Phis + 0.5*VcsCV)); dT0_dVc = 1.5 * sqrtPhisc * dPhisc_dVc; dT1_dVc = 0.0; dT2_dVc = 2.5 * T5 * dPhisc_dVc; dT3_dVc = K1 * (VcsCV * 0.5 * dVcsCV_dVc + dVcsCV_dVc * (Phis + 0.5*VcsCV)); if (selfheat) { dT0_dT = 1.5 * sqrtPhisc * dPhisc_dT; dT1_dT = 0; dT2_dT = 2.5 * T5 * dPhisc_dT; dT3_dT = K1 * (Phis + VcsCV) * dVcsCV_dT; } else dT0_dT = dT1_dT = dT2_dT = dT3_dT = 0.0; Nomi = K1*(CONST_2OV3*T1*T0 - 0.4*T2 - T3); dNomi_dVb = K1*(CONST_2OV3 * (T1 * dT0_dVb + T0*dT1_dVb) - 0.4 * dT2_dVb - dT3_dVb); dNomi_dVd = K1*(CONST_2OV3 * (T1 * dT0_dVd + T0*dT1_dVd) - 0.4 * dT2_dVd - dT3_dVd); dNomi_dVg = K1*(CONST_2OV3 * (T1 * dT0_dVg + T0*dT1_dVg) - 0.4 * dT2_dVg - dT3_dVg); dNomi_dVc = K1*(CONST_2OV3 * (T1 * dT0_dVc + T0*dT1_dVc) - 0.4 * dT2_dVc - dT3_dVc); if (selfheat) dNomi_dT = K1*(CONST_2OV3 * (T1 * dT0_dT + T0*dT1_dT ) - 0.4 * dT2_dT - dT3_dT ); else dNomi_dT = 0.0; T4 = Vgsteff + K1*sqrtPhis - 0.5*VdsCV; T5 = CONST_2OV3*K1*(Phisd*sqrtPhisd - T10); dT4_dVb = K1 * dsqrtPhis_dVb - 0.5*dVdsCV_dVb; dT5_dVb = K1*(sqrtPhisd*dPhisd_dVb - sqrtPhis*dPhis_dVb); dT4_dVd = - 0.5*dVdsCV_dVd; dT5_dVd = K1*( sqrtPhisd * dPhisd_dVd); dT4_dVg = 1 - 0.5 * dVdsCV_dVg; dT5_dVg = K1* sqrtPhisd * dPhisd_dVg; dT4_dVc = - 0.5 * dVdsCV_dVc; dT5_dVc = K1* sqrtPhisd * dPhisd_dVc; if (selfheat) { dT4_dT = - 0.5 * dVdsCV_dT; dT5_dT = K1* sqrtPhisd * dPhisd_dT; } else dT4_dT = dT5_dT = 0.0; Denomi = T4*VdsCV - T5; dDenomi_dVb = VdsCV*dT4_dVb + T4*dVdsCV_dVb - dT5_dVb; dDenomi_dVd = VdsCV*dT4_dVd + T4*dVdsCV_dVd - dT5_dVd; dDenomi_dVg = VdsCV*dT4_dVg + T4*dVdsCV_dVg - dT5_dVg; dDenomi_dVc = VdsCV*dT4_dVc + T4*dVdsCV_dVc - dT5_dVc; if (selfheat) dDenomi_dT = VdsCV*dT4_dT + T4*dVdsCV_dT - dT5_dT; else dDenomi_dT = 0.0; T6 = -CoxWL / Denomi; Qsubs1 = T6 * Nomi; dQsubs1_dVb = T6*(dNomi_dVb - Nomi / Denomi*dDenomi_dVb); dQsubs1_dVg = T6*(dNomi_dVg - Nomi / Denomi*dDenomi_dVg); dQsubs1_dVd = T6*(dNomi_dVd - Nomi / Denomi*dDenomi_dVd); dQsubs1_dVc = T6*(dNomi_dVc - Nomi / Denomi*dDenomi_dVc); if (selfheat) dQsubs1_dT = T6*(dNomi_dT - Nomi / Denomi*dDenomi_dT ); else dQsubs1_dT = 0.0; T6 = sqrt(1e-4 + phi - Vbs0eff); T7 = K1 * CoxWL; T8 = 1 - Xc; T10 = T7 * T6; T11 = T7 * T8 * 0.5 / T6; Qsubs2 = -T10 * T8 ; dQsubs2_dVg = T10 * dXc_dVg; dQsubs2_dVb = T10 * dXc_dVb; dQsubs2_dVd = T10 * dXc_dVd + T11 * dVbs0eff_dVd; dQsubs2_dVc = T10 * dXc_dVc; dQsubs2_dVe = T11 * dVbs0eff_dVe; dQsubs2_dVrg = T11 * dVbs0eff_dVg; if (selfheat) dQsubs2_dT = T10 * dXc_dT + T11 * dVbs0eff_dT; else dQsubs2_dT = 0.0; Qbf = Qac0 + Qsub0 + Qsubs1 + Qsubs2 + Qdep0; dQbf_dVrg = dQac0_dVrg + dQsub0_dVrg + dQsubs2_dVrg; dQbf_dVg = dQsub0_dVg + dQsubs1_dVg + dQsubs2_dVg ; dQbf_dVd = dQac0_dVd + dQsub0_dVd + dQsubs1_dVd + dQsubs2_dVd; dQbf_dVb = dQac0_dVb + dQsub0_dVb + dQsubs1_dVb + dQsubs2_dVb + dQdep0_dVb; dQbf_dVc = dQsubs1_dVc + dQsubs2_dVc; dQbf_dVe = dQsubs2_dVe; if (selfheat) dQbf_dT = dQac0_dT + dQsub0_dT + dQsubs1_dT + dQsubs2_dT; else dQbf_dT = 0.0; } /* End of if capMod == 3 */ /* Something common in both capMod 2 or 3 */ /* Backgate charge */ CboxWL = pParam->B3SOIDDkb3 * Cbox * pParam->B3SOIDDweffCV * pParam->B3SOIDDleffCV; T0 = 0.5 * K1; T2 = sqrt(phi - Vbs0t); T3 = phi + K1 * T2 - Vbs0t; T4 = sqrt(T0 * T0 + T3); Qsicv = K1 * CoxWL * ( T0 - T4); T6 = CoxWL * T0 / T4 * (1 + T0 / T2); if (selfheat) dQsicv_dT = T6 * dVbs0t_dT; else dQsicv_dT = 0.0; T2 = sqrt(phi - Vbs0mos); T3 = phi + K1 * T2 - Vbs0mos; T4 = sqrt(T0 * T0 + T3); Qbf0 = K1 * CoxWL * ( T0 - T4); T6 = CoxWL * T0 / T4 * (1 + T0 / T2); dQbf0_dVe = T6 * dVbs0mos_dVe; if (selfheat) dQbf0_dT = T6 * dVbs0mos_dT; else dQbf0_dT = 0.0; T5 = -CboxWL * (Vbsdio - Vbs0); T6 = CboxWL * Xc; Qe1 = -Qsicv + Qbf0 + T5 * Xc; dQe1_dVg = T5 * (dXc_dVg * dVgsteff_dVg + dXc_dVb * dVbseff_dVg + dXc_dVc * dVcs_dVg) - T6 * dVbsdio_dVg; dQe1_dVb = T5 * (dXc_dVg * dVgsteff_dVb + dXc_dVb * dVbseff_dVb + dXc_dVc * dVcs_dVb) - T6 * dVbsdio_dVb; dQe1_dVd = T5 * (dXc_dVg * dVgsteff_dVd + dXc_dVb * dVbseff_dVd + dXc_dVc * dVcs_dVd + dXc_dVd) - T6 * dVbsdio_dVd; dQe1_dVe = dQbf0_dVe + T6 * (dVbs0_dVe - dVbsdio_dVe); if (selfheat) dQe1_dT = -dQsicv_dT + dQbf0_dT + T5 * (dXc_dVg * dVgsteff_dT + dXc_dVb * dVbseff_dT + dXc_dVc * dVcs_dT + dXc_dT ) + T6 * (dVbs0_dT - dVbsdio_dT); else dQe1_dT = 0.0; T2 = -model->B3SOIDDcboxt * pParam->B3SOIDDweffCV * pParam->B3SOIDDleffCV; T3 = T2 * 0.5 * (1 - Xc); T4 = T2 * 0.5 * (VdsCV - VcsCV); Qe2 = T2 * 0.5 * (1 - Xc) * (VdsCV - VcsCV); /* T10 - dVgsteff, T11 - dVbseff, T12 - dVcs */ T10 = T3 * (dVdsCV_dVg - dVcsCV_dVg) - T4 * dXc_dVg; T11 = T3 * (dVdsCV_dVb - dVcsCV_dVb) - T4 * dXc_dVb; T12 = T3 * (dVdsCV_dVc - dVcsCV_dVc) - T4 * dXc_dVc; dQe2_dVg = T10 * dVgsteff_dVg + T11 * dVbseff_dVg + T12 * dVcs_dVg; dQe2_dVb = T10 * dVgsteff_dVb + T11 * dVbseff_dVb + T12 * dVcs_dVb; dQe2_dVd = T10 * dVgsteff_dVd + T11 * dVbseff_dVd + T12 * dVcs_dVd + T3 * (dVdsCV_dVd - dVcsCV_dVd) - T4 * dXc_dVd; dQe2_dVe = T10 * dVgsteff_dVe + T11 * dVbseff_dVe + T12 * dVcs_dVe; if (selfheat) dQe2_dT = T10 * dVgsteff_dT + T11 * dVbseff_dT + T12 * dVcs_dT + T3 * (dVdsCV_dT - dVcsCV_dT ) - T4 * dXc_dT; else dQe2_dT = 0.0; /* This transform all the dependency on Vgsteff, Vbseff, Vcs into real ones */ Cbg = dQbf_dVrg + dQbf_dVg * dVgsteff_dVg + dQbf_dVb * dVbseff_dVg + dQbf_dVc * dVcs_dVg; Cbb = dQbf_dVg * dVgsteff_dVb + dQbf_dVb * dVbseff_dVb + dQbf_dVc * dVcs_dVb; Cbd = dQbf_dVg * dVgsteff_dVd + dQbf_dVb * dVbseff_dVd + dQbf_dVc * dVcs_dVd + dQbf_dVd; Cbe = dQbf_dVg * dVgsteff_dVe + dQbf_dVb * dVbseff_dVe + dQbf_dVc * dVcs_dVe + dQbf_dVe; if (selfheat) CbT = dQbf_dVg * dVgsteff_dT + dQbf_dVb * dVbseff_dT + dQbf_dVc * dVcs_dT + dQbf_dT; else CbT = 0.0; Ce1g = dQe1_dVg; Ce1b = dQe1_dVb; Ce1d = dQe1_dVd; Ce1e = dQe1_dVe; Ce1T = dQe1_dT; Ce2g = dQe2_dVg; Ce2b = dQe2_dVb; Ce2d = dQe2_dVd; Ce2e = dQe2_dVe; Ce2T = dQe2_dT; /* Total inversion charge */ T0 = AbulkCV * VdseffCV; T1 = 12.0 * (Vgsteff - 0.5 * T0 + 1e-20); T2 = VdseffCV / T1; T3 = T0 * T2; T4 = (1.0 - 12.0 * T2 * T2 * AbulkCV); T5 = (6.0 * T0 * (4.0 * Vgsteff - T0) / (T1 * T1) - 0.5); T6 = 12.0 * T2 * T2 * Vgsteff; qinv = CoxWL * (Vgsteff - 0.5 * VdseffCV + T3); Cgg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); Cgd1 = CoxWL * T5 * dVdseffCV_dVd; Cgb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb); /* Inversion charge partitioning into S / D */ if (model->B3SOIDDxpart > 0.5) { /* 0/100 Charge partition model */ T1 = T1 + T1; qsrc = -CoxWL * (0.5 * Vgsteff + 0.25 * T0 - T0 * T0 / T1); T7 = (4.0 * Vgsteff - T0) / (T1 * T1); T4 = -(0.5 + 24.0 * T0 * T0 / (T1 * T1)); T5 = -(0.25 * AbulkCV - 12.0 * AbulkCV * T0 * T7); T6 = -(0.25 * VdseffCV - 12.0 * T0 * VdseffCV * T7); Csg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); Csd1 = CoxWL * T5 * dVdseffCV_dVd; Csb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb); } else if (model->B3SOIDDxpart < 0.5) { /* 40/60 Charge partition model */ T1 = T1 / 12.0; T2 = 0.5 * CoxWL / (T1 * T1); T3 = Vgsteff * (2.0 * T0 * T0 / 3.0 + Vgsteff * (Vgsteff - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T2 * T3; T7 = 4.0 / 3.0 * Vgsteff * (Vgsteff - T0) + 0.4 * T0 * T0; T4 = -2.0 * qsrc / T1 - T2 * (Vgsteff * (3.0 * Vgsteff - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0); T5 = (qsrc / T1 + T2 * T7) * AbulkCV; T6 = (qsrc / T1 * VdseffCV + T2 * T7 * VdseffCV); Csg1 = T4 + T5 * dVdseffCV_dVg; Csd1 = T5 * dVdseffCV_dVd; Csb1 = T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb; } else { /* 50/50 Charge partition model */ qsrc = - 0.5 * qinv; Csg1 = - 0.5 * Cgg1; Csb1 = - 0.5 * Cgb1; Csd1 = - 0.5 * Cgd1; } Csg = Csg1 * dVgsteff_dVg + Csb1 * dVbseff_dVg; Csd = Csd1 + Csg1 * dVgsteff_dVd + Csb1 * dVbseff_dVd; Csb = Csg1 * dVgsteff_dVb + Csb1 * dVbseff_dVb; Cse = Csg1 * dVgsteff_dVe + Csb1 * dVbseff_dVe; if (selfheat) CsT = Csg1 * dVgsteff_dT + Csb1 * dVbseff_dT; else CsT = 0.0; T0 = QEX_FACT * K1 * CoxWL; Qex = T0 * (Vbs - Vbsdio); dQex_dVg = - T0 * dVbsdio_dVg; dQex_dVb = T0 * (1 - dVbsdio_dVb); dQex_dVd = - T0 * dVbsdio_dVd; dQex_dVe = - T0 * dVbsdio_dVe; if (selfheat) dQex_dT = - T0 * dVbsdio_dT; else dQex_dT = 0.0; qgate = qinv - (Qbf + Qe2); qbody = (Qbf - Qe1 + Qex); qsub = Qe1 + Qe2 - Qex; qdrn = -(qinv + qsrc); Cgg = (Cgg1 * dVgsteff_dVg + Cgb1 * dVbseff_dVg) - Cbg ; Cgd = (Cgd1 + Cgg1 * dVgsteff_dVd + Cgb1 * dVbseff_dVd)-Cbd; Cgb = (Cgb1 * dVbseff_dVb + Cgg1 * dVgsteff_dVb) - Cbb; Cge = (Cgg1 * dVgsteff_dVe + Cgb1 * dVbseff_dVe) - Cbe; if (selfheat) CgT = (Cgg1 * dVgsteff_dT + Cgb1 * dVbseff_dT ) - CbT; else CgT = 0.0; here->B3SOIDDcggb = Cgg - Ce2g; here->B3SOIDDcgsb = - (Cgg + Cgd + Cgb + Cge) + (Ce2g + Ce2d + Ce2b + Ce2e); here->B3SOIDDcgdb = Cgd - Ce2d; here->B3SOIDDcgeb = Cge - Ce2e; here->B3SOIDDcgT = CgT - Ce2T; here->B3SOIDDcbgb = Cbg - Ce1g + dQex_dVg; here->B3SOIDDcbsb = -(Cbg + Cbd + Cbb + Cbe) + (Ce1g + Ce1d + Ce1b + Ce1e) - (dQex_dVg + dQex_dVd + dQex_dVb + dQex_dVe); here->B3SOIDDcbdb = Cbd - Ce1d + dQex_dVd; here->B3SOIDDcbeb = Cbe - Ce1e + dQex_dVe; here->B3SOIDDcbT = CbT - Ce1T + dQex_dT; here->B3SOIDDcegb = Ce1g + Ce2g - dQex_dVg; here->B3SOIDDcesb = -(Ce1g + Ce1d + Ce1b + Ce1e) -(Ce2g + Ce2d + Ce2b + Ce2e) +(dQex_dVg + dQex_dVd + dQex_dVb + dQex_dVe); here->B3SOIDDcedb = Ce1d + Ce2d - dQex_dVd; here->B3SOIDDceeb = Ce1e + Ce2e - dQex_dVe; here->B3SOIDDceT = Ce1T + Ce2T - dQex_dT; here->B3SOIDDcdgb = -(Cgg + Cbg + Csg); here->B3SOIDDcddb = -(Cgd + Cbd + Csd); here->B3SOIDDcdeb = -(Cge + Cbe + Cse); here->B3SOIDDcdT = -(CgT + CbT + CsT); here->B3SOIDDcdsb = (Cgg + Cgd + Cgb + Cge + Cbg + Cbd + Cbb + Cbe + Csg + Csd + Csb + Cse); } /* End of if capMod == 2 or capMod ==3 */ } finished: /* returning Values to Calling Routine */ /* * COMPUTE EQUIVALENT DRAIN CURRENT SOURCE */ if (ChargeComputationNeeded) { /* Intrinsic S/D junction charge */ PhiBSWG = model->B3SOIDDGatesidewallJctPotential; MJSWG = model->B3SOIDDbodyJctGateSideGradingCoeff; cjsbs = model->B3SOIDDunitLengthGateSidewallJctCap * pParam->B3SOIDDweff * model->B3SOIDDtsi / 1e-7; if (Vbs < 0.0) { arg = 1.0 - Vbs / PhiBSWG; if (MJSWG == 0.5) dT3_dVb = 1.0 / sqrt(arg); else dT3_dVb = exp(-MJSWG * log(arg)); T3 = (1.0 - arg * dT3_dVb) * PhiBSWG / (1.0 - MJSWG); } else { T3 = Vbs * ( 1 + 0.5 * MJSWG * Vbs / PhiBSWG); dT3_dVb = 1 + MJSWG * Vbs / PhiBSWG; } qjs = cjsbs * T3 + model->B3SOIDDtt * Ibs1; gcjsbs = cjsbs * dT3_dVb + model->B3SOIDDtt * dIbs1_dVb; if (selfheat) gcjsT = model->B3SOIDDtt * dIbs1_dT; else gcjsT = 0.0; if (Vbd < 0.0) { arg = 1.0 - Vbd / PhiBSWG; if (MJSWG == 0.5) dT3_dVb = 1.0 / sqrt(arg); else dT3_dVb = exp(-MJSWG * log(arg)); T3 = (1.0 - arg * dT3_dVb) * PhiBSWG / (1.0 - MJSWG); } else { T3 = Vbd * ( 1 + 0.5 * MJSWG * Vbd / PhiBSWG); dT3_dVb = 1 + MJSWG * Vbd / PhiBSWG; } dT3_dVd = - dT3_dVb; qjd = cjsbs * T3 + model->B3SOIDDtt * Ibd1; gcjdbs = cjsbs * dT3_dVb + model->B3SOIDDtt * dIbd1_dVb; gcjdds = cjsbs * dT3_dVd + model->B3SOIDDtt * dIbd1_dVd; if (selfheat) gcjdT = model->B3SOIDDtt * dIbd1_dT; else gcjdT = 0.0; qdrn -= qjd; qbody += (qjs + qjd); qsrc = -(qgate + qbody + qdrn + qsub); /* Update the conductance */ here->B3SOIDDcddb -= gcjdds; here->B3SOIDDcdT -= gcjdT; here->B3SOIDDcdsb += gcjdds + gcjdbs; here->B3SOIDDcbdb += (gcjdds); here->B3SOIDDcbT += (gcjdT + gcjsT); here->B3SOIDDcbsb -= (gcjdds + gcjdbs + gcjsbs); /* Extrinsic Bottom S/D to substrate charge */ T10 = -model->B3SOIDDtype * ves; /* T10 is vse without type conversion */ if ( ((pParam->B3SOIDDnsub > 0) && (model->B3SOIDDtype > 0)) || ((pParam->B3SOIDDnsub < 0) && (model->B3SOIDDtype < 0)) ) { if (T10 < pParam->B3SOIDDvsdfb) { here->B3SOIDDqse = here->B3SOIDDcsbox * (T10 - pParam->B3SOIDDvsdfb); here->B3SOIDDgcse = here->B3SOIDDcsbox; } else if (T10 < pParam->B3SOIDDsdt1) { T0 = T10 - pParam->B3SOIDDvsdfb; T1 = T0 * T0; here->B3SOIDDqse = T0 * (here->B3SOIDDcsbox - pParam->B3SOIDDst2 / 3 * T1) ; here->B3SOIDDgcse = here->B3SOIDDcsbox - pParam->B3SOIDDst2 * T1; } else if (T10 < pParam->B3SOIDDvsdth) { T0 = T10 - pParam->B3SOIDDvsdth; T1 = T0 * T0; here->B3SOIDDqse = here->B3SOIDDcsmin * T10 + here->B3SOIDDst4 + pParam->B3SOIDDst3 / 3 * T0 * T1; here->B3SOIDDgcse = here->B3SOIDDcsmin + pParam->B3SOIDDst3 * T1; } else { here->B3SOIDDqse = here->B3SOIDDcsmin * T10 + here->B3SOIDDst4; here->B3SOIDDgcse = here->B3SOIDDcsmin; } } else { if (T10 < pParam->B3SOIDDvsdth) { here->B3SOIDDqse = here->B3SOIDDcsmin * (T10 - pParam->B3SOIDDvsdth); here->B3SOIDDgcse = here->B3SOIDDcsmin; } else if (T10 < pParam->B3SOIDDsdt1) { T0 = T10 - pParam->B3SOIDDvsdth; T1 = T0 * T0; here->B3SOIDDqse = T0 * (here->B3SOIDDcsmin - pParam->B3SOIDDst2 / 3 * T1) ; here->B3SOIDDgcse = here->B3SOIDDcsmin - pParam->B3SOIDDst2 * T1; } else if (T10 < pParam->B3SOIDDvsdfb) { T0 = T10 - pParam->B3SOIDDvsdfb; T1 = T0 * T0; here->B3SOIDDqse = here->B3SOIDDcsbox * T10 + here->B3SOIDDst4 + pParam->B3SOIDDst3 / 3 * T0 * T1; here->B3SOIDDgcse = here->B3SOIDDcsbox + pParam->B3SOIDDst3 * T1; } else { here->B3SOIDDqse = here->B3SOIDDcsbox * T10 + here->B3SOIDDst4; here->B3SOIDDgcse = here->B3SOIDDcsbox; } } /* T11 is vde without type conversion */ T11 = model->B3SOIDDtype * (vds - ves); if ( ((pParam->B3SOIDDnsub > 0) && (model->B3SOIDDtype > 0)) || ((pParam->B3SOIDDnsub < 0) && (model->B3SOIDDtype < 0)) ) { if (T11 < pParam->B3SOIDDvsdfb) { here->B3SOIDDqde = here->B3SOIDDcdbox * (T11 - pParam->B3SOIDDvsdfb); here->B3SOIDDgcde = here->B3SOIDDcdbox; } else if (T11 < pParam->B3SOIDDsdt1) { T0 = T11 - pParam->B3SOIDDvsdfb; T1 = T0 * T0; here->B3SOIDDqde = T0 * (here->B3SOIDDcdbox - pParam->B3SOIDDdt2 / 3 * T1) ; here->B3SOIDDgcde = here->B3SOIDDcdbox - pParam->B3SOIDDdt2 * T1; } else if (T11 < pParam->B3SOIDDvsdth) { T0 = T11 - pParam->B3SOIDDvsdth; T1 = T0 * T0; here->B3SOIDDqde = here->B3SOIDDcdmin * T11 + here->B3SOIDDdt4 + pParam->B3SOIDDdt3 / 3 * T0 * T1; here->B3SOIDDgcde = here->B3SOIDDcdmin + pParam->B3SOIDDdt3 * T1; } else { here->B3SOIDDqde = here->B3SOIDDcdmin * T11 + here->B3SOIDDdt4; here->B3SOIDDgcde = here->B3SOIDDcdmin; } } else { if (T11 < pParam->B3SOIDDvsdth) { here->B3SOIDDqde = here->B3SOIDDcdmin * (T11 - pParam->B3SOIDDvsdth); here->B3SOIDDgcde = here->B3SOIDDcdmin; } else if (T11 < pParam->B3SOIDDsdt1) { T0 = T11 - pParam->B3SOIDDvsdth; T1 = T0 * T0; here->B3SOIDDqde = T0 * (here->B3SOIDDcdmin - pParam->B3SOIDDdt2 / 3 * T1) ; here->B3SOIDDgcde = here->B3SOIDDcdmin - pParam->B3SOIDDdt2 * T1; } else if (T11 < pParam->B3SOIDDvsdfb) { T0 = T11 - pParam->B3SOIDDvsdfb; T1 = T0 * T0; here->B3SOIDDqde = here->B3SOIDDcdbox * T11 + here->B3SOIDDdt4 + pParam->B3SOIDDdt3 / 3 * T0 * T1; here->B3SOIDDgcde = here->B3SOIDDcdbox + pParam->B3SOIDDdt3 * T1; } else { here->B3SOIDDqde = here->B3SOIDDcdbox * T11 + here->B3SOIDDdt4; here->B3SOIDDgcde = here->B3SOIDDcdbox; } } /* Extrinsic : Sidewall fringing S/D charge */ here->B3SOIDDqse += pParam->B3SOIDDcsesw * T10; here->B3SOIDDgcse += pParam->B3SOIDDcsesw; here->B3SOIDDqde += pParam->B3SOIDDcdesw * T11; here->B3SOIDDgcde += pParam->B3SOIDDcdesw; /* All charge are mutliplied with type at the end, but qse and qde have true polarity => so pre-mutliplied with type */ here->B3SOIDDqse *= model->B3SOIDDtype; here->B3SOIDDqde *= model->B3SOIDDtype; } here->B3SOIDDxc = Xc; here->B3SOIDDcbb = Cbb; here->B3SOIDDcbd = Cbd; here->B3SOIDDcbg = Cbg; here->B3SOIDDqbf = Qbf; here->B3SOIDDqjs = qjs; here->B3SOIDDqjd = qjd; if (here->B3SOIDDdebugMod == -1) ChargeComputationNeeded = 0; /* * check convergence */ if ((here->B3SOIDDoff == 0) || (!(ckt->CKTmode & MODEINITFIX))) { if (Check == 1) { ckt->CKTnoncon++; if (here->B3SOIDDdebugMod > 2) fprintf(fpdebug, "Check is on, noncon=%d\n", ckt->CKTnoncon++); } } *(ckt->CKTstate0 + here->B3SOIDDvg) = vg; *(ckt->CKTstate0 + here->B3SOIDDvd) = vd; *(ckt->CKTstate0 + here->B3SOIDDvs) = vs; *(ckt->CKTstate0 + here->B3SOIDDvp) = vp; *(ckt->CKTstate0 + here->B3SOIDDve) = ve; *(ckt->CKTstate0 + here->B3SOIDDvbs) = vbs; *(ckt->CKTstate0 + here->B3SOIDDvbd) = vbd; *(ckt->CKTstate0 + here->B3SOIDDvgs) = vgs; *(ckt->CKTstate0 + here->B3SOIDDvds) = vds; *(ckt->CKTstate0 + here->B3SOIDDves) = ves; *(ckt->CKTstate0 + here->B3SOIDDvps) = vps; *(ckt->CKTstate0 + here->B3SOIDDdeltemp) = delTemp; /* bulk and channel charge plus overlaps */ if (!ChargeComputationNeeded) goto line850; #ifndef NOBYPASS line755: #endif ag0 = ckt->CKTag[0]; T0 = vgd + DELTA_1; T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); T3 = pParam->B3SOIDDweffCV * pParam->B3SOIDDcgdl; T4 = sqrt(1.0 - 4.0 * T2 / pParam->B3SOIDDckappa); cgdo = pParam->B3SOIDDcgdo + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgdo = (pParam->B3SOIDDcgdo + T3) * vgd - T3 * (T2 + 0.5 * pParam->B3SOIDDckappa * (T4 - 1.0)); T0 = vgs + DELTA_1; T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); T3 = pParam->B3SOIDDweffCV * pParam->B3SOIDDcgsl; T4 = sqrt(1.0 - 4.0 * T2 / pParam->B3SOIDDckappa); cgso = pParam->B3SOIDDcgso + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgso = (pParam->B3SOIDDcgso + T3) * vgs - T3 * (T2 + 0.5 * pParam->B3SOIDDckappa * (T4 - 1.0)); if (here->B3SOIDDmode > 0) { gcdgb = (here->B3SOIDDcdgb - cgdo) * ag0; gcddb = (here->B3SOIDDcddb + cgdo + here->B3SOIDDgcde) * ag0; gcdsb = here->B3SOIDDcdsb * ag0; gcdeb = (here->B3SOIDDcdeb - here->B3SOIDDgcde) * ag0; gcdT = model->B3SOIDDtype * here->B3SOIDDcdT * ag0; gcsgb = -(here->B3SOIDDcggb + here->B3SOIDDcbgb + here->B3SOIDDcdgb + here->B3SOIDDcegb + cgso) * ag0; gcsdb = -(here->B3SOIDDcgdb + here->B3SOIDDcbdb + here->B3SOIDDcddb + here->B3SOIDDcedb) * ag0; gcssb = (cgso + here->B3SOIDDgcse - (here->B3SOIDDcgsb + here->B3SOIDDcbsb + here->B3SOIDDcdsb + here->B3SOIDDcesb)) * ag0; gcseb = -(here->B3SOIDDgcse + here->B3SOIDDcgeb + here->B3SOIDDcbeb + here->B3SOIDDcdeb + here->B3SOIDDceeb) * ag0; gcsT = - model->B3SOIDDtype * (here->B3SOIDDcgT + here->B3SOIDDcbT + here->B3SOIDDcdT + here->B3SOIDDceT) * ag0; gcggb = (here->B3SOIDDcggb + cgdo + cgso + pParam->B3SOIDDcgeo) * ag0; gcgdb = (here->B3SOIDDcgdb - cgdo) * ag0; gcgsb = (here->B3SOIDDcgsb - cgso) * ag0; gcgeb = (here->B3SOIDDcgeb - pParam->B3SOIDDcgeo) * ag0; gcgT = model->B3SOIDDtype * here->B3SOIDDcgT * ag0; gcbgb = here->B3SOIDDcbgb * ag0; gcbdb = here->B3SOIDDcbdb * ag0; gcbsb = here->B3SOIDDcbsb * ag0; gcbeb = here->B3SOIDDcbeb * ag0; gcbT = model->B3SOIDDtype * here->B3SOIDDcbT * ag0; gcegb = (here->B3SOIDDcegb - pParam->B3SOIDDcgeo) * ag0; gcedb = (here->B3SOIDDcedb - here->B3SOIDDgcde) * ag0; gcesb = (here->B3SOIDDcesb - here->B3SOIDDgcse) * ag0; gceeb = (here->B3SOIDDgcse + here->B3SOIDDgcde + here->B3SOIDDceeb + pParam->B3SOIDDcgeo) * ag0; gceT = model->B3SOIDDtype * here->B3SOIDDceT * ag0; gcTt = pParam->B3SOIDDcth * ag0; sxpart = 0.6; dxpart = 0.4; /* Lump the overlap capacitance and S/D parasitics */ qgd = qgdo; qgs = qgso; qge = pParam->B3SOIDDcgeo * vge; qgate += qgd + qgs + qge; qdrn += here->B3SOIDDqde - qgd; qsub -= qge + here->B3SOIDDqse + here->B3SOIDDqde; qsrc = -(qgate + qbody + qdrn + qsub); } else { gcsgb = (here->B3SOIDDcdgb - cgso) * ag0; gcssb = (here->B3SOIDDcddb + cgso + here->B3SOIDDgcse) * ag0; gcsdb = here->B3SOIDDcdsb * ag0; gcseb = (here->B3SOIDDcdeb - here->B3SOIDDgcse) * ag0; gcsT = model->B3SOIDDtype * here->B3SOIDDcdT * ag0; gcdgb = -(here->B3SOIDDcggb + here->B3SOIDDcbgb + here->B3SOIDDcdgb + here->B3SOIDDcegb + cgdo) * ag0; gcdsb = -(here->B3SOIDDcgdb + here->B3SOIDDcbdb + here->B3SOIDDcddb + here->B3SOIDDcedb) * ag0; gcddb = (cgdo + here->B3SOIDDgcde - (here->B3SOIDDcgsb + here->B3SOIDDcbsb + here->B3SOIDDcdsb + here->B3SOIDDcesb)) * ag0; gcdeb = -(here->B3SOIDDgcde + here->B3SOIDDcgeb + here->B3SOIDDcbeb + here->B3SOIDDcdeb + here->B3SOIDDceeb) * ag0; gcdT = - model->B3SOIDDtype * (here->B3SOIDDcgT + here->B3SOIDDcbT + here->B3SOIDDcdT + here->B3SOIDDceT) * ag0; gcggb = (here->B3SOIDDcggb + cgdo + cgso + pParam->B3SOIDDcgeo) * ag0; gcgsb = (here->B3SOIDDcgdb - cgso) * ag0; gcgdb = (here->B3SOIDDcgsb - cgdo) * ag0; gcgeb = (here->B3SOIDDcgeb - pParam->B3SOIDDcgeo) * ag0; gcgT = model->B3SOIDDtype * here->B3SOIDDcgT * ag0; gcbgb = here->B3SOIDDcbgb * ag0; gcbsb = here->B3SOIDDcbdb * ag0; gcbdb = here->B3SOIDDcbsb * ag0; gcbeb = here->B3SOIDDcbeb * ag0; gcbT = model->B3SOIDDtype * here->B3SOIDDcbT * ag0; gcegb = (here->B3SOIDDcegb - pParam->B3SOIDDcgeo) * ag0; gcesb = (here->B3SOIDDcedb - here->B3SOIDDgcse) * ag0; gcedb = (here->B3SOIDDcesb - here->B3SOIDDgcde) * ag0; gceeb = (here->B3SOIDDceeb + pParam->B3SOIDDcgeo + here->B3SOIDDgcse + here->B3SOIDDgcde) * ag0; gceT = model->B3SOIDDtype * here->B3SOIDDceT * ag0; gcTt = pParam->B3SOIDDcth * ag0; dxpart = 0.6; sxpart = 0.4; /* Lump the overlap capacitance */ qgd = qgdo; qgs = qgso; qge = pParam->B3SOIDDcgeo * vge; qgate += qgd + qgs + qge; qsrc = qdrn - qgs + here->B3SOIDDqse; qsub -= qge + here->B3SOIDDqse + here->B3SOIDDqde; qdrn = -(qgate + qbody + qsrc + qsub); } here->B3SOIDDcgdo = cgdo; here->B3SOIDDcgso = cgso; if (ByPass) goto line860; *(ckt->CKTstate0 + here->B3SOIDDqe) = qsub; *(ckt->CKTstate0 + here->B3SOIDDqg) = qgate; *(ckt->CKTstate0 + here->B3SOIDDqd) = qdrn; *(ckt->CKTstate0 + here->B3SOIDDqb) = qbody; if ((model->B3SOIDDshMod == 1) && (here->B3SOIDDrth0!=0.0)) *(ckt->CKTstate0 + here->B3SOIDDqth) = pParam->B3SOIDDcth * delTemp; /* store small signal parameters */ if (ckt->CKTmode & MODEINITSMSIG) { goto line1000; } if (!ChargeComputationNeeded) goto line850; if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->B3SOIDDqb) = *(ckt->CKTstate0 + here->B3SOIDDqb); *(ckt->CKTstate1 + here->B3SOIDDqg) = *(ckt->CKTstate0 + here->B3SOIDDqg); *(ckt->CKTstate1 + here->B3SOIDDqd) = *(ckt->CKTstate0 + here->B3SOIDDqd); *(ckt->CKTstate1 + here->B3SOIDDqe) = *(ckt->CKTstate0 + here->B3SOIDDqe); *(ckt->CKTstate1 + here->B3SOIDDqth) = *(ckt->CKTstate0 + here->B3SOIDDqth); } error = NIintegrate(ckt, &geq, &ceq,0.0,here->B3SOIDDqb); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->B3SOIDDqg); if (error) return(error); error = NIintegrate(ckt,&geq, &ceq, 0.0, here->B3SOIDDqd); if (error) return(error); error = NIintegrate(ckt,&geq, &ceq, 0.0, here->B3SOIDDqe); if (error) return(error); if ((model->B3SOIDDshMod == 1) && (here->B3SOIDDrth0!=0.0)) { error = NIintegrate(ckt, &geq, &ceq, 0.0, here->B3SOIDDqth); if (error) return (error); } goto line860; line850: /* initialize to zero charge conductance and current */ ceqqe = ceqqg = ceqqb = ceqqd = ceqqth= 0.0; gcdgb = gcddb = gcdsb = gcdeb = gcdT = 0.0; gcsgb = gcsdb = gcssb = gcseb = gcsT = 0.0; gcggb = gcgdb = gcgsb = gcgeb = gcgT = 0.0; gcbgb = gcbdb = gcbsb = gcbeb = gcbT = 0.0; gcegb = gcedb = gceeb = gcesb = gceT = 0.0; gcTt = 0.0; sxpart = (1.0 - (dxpart = (here->B3SOIDDmode > 0) ? 0.4 : 0.6)); goto line900; line860: /* evaluate equivalent charge current */ cqgate = *(ckt->CKTstate0 + here->B3SOIDDcqg); cqbody = *(ckt->CKTstate0 + here->B3SOIDDcqb); cqdrn = *(ckt->CKTstate0 + here->B3SOIDDcqd); cqsub = *(ckt->CKTstate0 + here->B3SOIDDcqe); cqtemp = *(ckt->CKTstate0 + here->B3SOIDDcqth); here->B3SOIDDcb += cqbody; here->B3SOIDDcd += cqdrn; ceqqg = cqgate - gcggb * vgb + gcgdb * vbd + gcgsb * vbs - gcgeb * veb - gcgT * delTemp; ceqqb = cqbody - gcbgb * vgb + gcbdb * vbd + gcbsb * vbs - gcbeb * veb - gcbT * delTemp; ceqqd = cqdrn - gcdgb * vgb + gcddb * vbd + gcdsb * vbs - gcdeb * veb - gcdT * delTemp; ceqqe = cqsub - gcegb * vgb + gcedb * vbd + gcesb * vbs - gceeb * veb - gceT * delTemp;; ceqqth = cqtemp - gcTt * delTemp; if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->B3SOIDDcqe) = *(ckt->CKTstate0 + here->B3SOIDDcqe); *(ckt->CKTstate1 + here->B3SOIDDcqb) = *(ckt->CKTstate0 + here->B3SOIDDcqb); *(ckt->CKTstate1 + here->B3SOIDDcqg) = *(ckt->CKTstate0 + here->B3SOIDDcqg); *(ckt->CKTstate1 + here->B3SOIDDcqd) = *(ckt->CKTstate0 + here->B3SOIDDcqd); *(ckt->CKTstate1 + here->B3SOIDDcqth) = *(ckt->CKTstate0 + here->B3SOIDDcqth); } /* * load current vector */ line900: m = here->B3SOIDDm; if (here->B3SOIDDmode >= 0) { Gm = here->B3SOIDDgm; Gmbs = here->B3SOIDDgmbs; Gme = here->B3SOIDDgme; GmT = model->B3SOIDDtype * here->B3SOIDDgmT; FwdSum = Gm + Gmbs + Gme; RevSum = 0.0; cdreq = model->B3SOIDDtype * (here->B3SOIDDcdrain - here->B3SOIDDgds * vds - Gm * vgs - Gmbs * vbs - Gme * ves - GmT * delTemp); /* ceqbs now is compatible with cdreq, ie. going in is +ve */ /* Equivalent current source from the diode */ ceqbs = here->B3SOIDDcjs; ceqbd = here->B3SOIDDcjd; /* Current going in is +ve */ ceqbody = -here->B3SOIDDcbody; ceqth = here->B3SOIDDcth; ceqbodcon = here->B3SOIDDcbodcon; gbbg = -here->B3SOIDDgbgs; gbbdp = -here->B3SOIDDgbds; gbbb = -here->B3SOIDDgbbs; gbbe = -here->B3SOIDDgbes; gbbp = -here->B3SOIDDgbps; gbbT = -model->B3SOIDDtype * here->B3SOIDDgbT; gbbsp = - ( gbbg + gbbdp + gbbb + gbbe + gbbp); gddpg = -here->B3SOIDDgjdg; gddpdp = -here->B3SOIDDgjdd; gddpb = -here->B3SOIDDgjdb; gddpe = -here->B3SOIDDgjde; gddpT = -model->B3SOIDDtype * here->B3SOIDDgjdT; gddpsp = - ( gddpg + gddpdp + gddpb + gddpe); gsspg = -here->B3SOIDDgjsg; gsspdp = -here->B3SOIDDgjsd; gsspb = -here->B3SOIDDgjsb; gsspe = 0.0; gsspT = -model->B3SOIDDtype * here->B3SOIDDgjsT; gsspsp = - (gsspg + gsspdp + gsspb + gsspe); gppg = -here->B3SOIDDgbpgs; gppdp = -here->B3SOIDDgbpds; gppb = -here->B3SOIDDgbpbs; gppe = -here->B3SOIDDgbpes; gppp = -here->B3SOIDDgbpps; gppT = -model->B3SOIDDtype * here->B3SOIDDgbpT; gppsp = - (gppg + gppdp + gppb + gppe + gppp); gTtg = here->B3SOIDDgtempg; gTtb = here->B3SOIDDgtempb; gTte = here->B3SOIDDgtempe; gTtdp = here->B3SOIDDgtempd; gTtt = here->B3SOIDDgtempT; gTtsp = - (gTtg + gTtb + gTte + gTtdp); } else { Gm = -here->B3SOIDDgm; Gmbs = -here->B3SOIDDgmbs; Gme = -here->B3SOIDDgme; GmT = -model->B3SOIDDtype * here->B3SOIDDgmT; FwdSum = 0.0; RevSum = -(Gm + Gmbs + Gme); cdreq = -model->B3SOIDDtype * (here->B3SOIDDcdrain + here->B3SOIDDgds*vds + Gm * vgd + Gmbs * vbd + Gme * (ves - vds) + GmT * delTemp); ceqbs = here->B3SOIDDcjd; ceqbd = here->B3SOIDDcjs; /* Current going in is +ve */ ceqbody = -here->B3SOIDDcbody; ceqth = here->B3SOIDDcth; ceqbodcon = here->B3SOIDDcbodcon; gbbg = -here->B3SOIDDgbgs; gbbb = -here->B3SOIDDgbbs; gbbe = -here->B3SOIDDgbes; gbbp = -here->B3SOIDDgbps; gbbsp = -here->B3SOIDDgbds; gbbT = -model->B3SOIDDtype * here->B3SOIDDgbT; gbbdp = - ( gbbg + gbbsp + gbbb + gbbe + gbbp); gddpg = -here->B3SOIDDgjsg; gddpsp = -here->B3SOIDDgjsd; gddpb = -here->B3SOIDDgjsb; gddpe = 0.0; gddpT = -model->B3SOIDDtype * here->B3SOIDDgjsT; gddpdp = - (gddpg + gddpsp + gddpb + gddpe); gsspg = -here->B3SOIDDgjdg; gsspsp = -here->B3SOIDDgjdd; gsspb = -here->B3SOIDDgjdb; gsspe = -here->B3SOIDDgjde; gsspT = -model->B3SOIDDtype * here->B3SOIDDgjdT; gsspdp = - ( gsspg + gsspsp + gsspb + gsspe); gppg = -here->B3SOIDDgbpgs; gppsp = -here->B3SOIDDgbpds; gppb = -here->B3SOIDDgbpbs; gppe = -here->B3SOIDDgbpes; gppp = -here->B3SOIDDgbpps; gppT = -model->B3SOIDDtype * here->B3SOIDDgbpT; gppdp = - (gppg + gppsp + gppb + gppe + gppp); gTtg = here->B3SOIDDgtempg; gTtb = here->B3SOIDDgtempb; gTte = here->B3SOIDDgtempe; gTtsp = here->B3SOIDDgtempd; gTtt = here->B3SOIDDgtempT; gTtdp = - (gTtg + gTtb + gTte + gTtsp); } if (model->B3SOIDDtype > 0) { ceqqg = ceqqg; ceqqb = ceqqb; ceqqe = ceqqe; ceqqd = ceqqd; } else { ceqbodcon = -ceqbodcon; ceqbody = -ceqbody; ceqbs = -ceqbs; ceqbd = -ceqbd; ceqqg = -ceqqg; ceqqb = -ceqqb; ceqqd = -ceqqd; ceqqe = -ceqqe; } (*(ckt->CKTrhs + here->B3SOIDDbNode) -= m * (ceqbody+ceqqb)); (*(ckt->CKTrhs + here->B3SOIDDgNode) -= m * ceqqg); (*(ckt->CKTrhs + here->B3SOIDDdNodePrime) += m * (ceqbd - cdreq - ceqqd)); (*(ckt->CKTrhs + here->B3SOIDDsNodePrime) += m * ((cdreq + ceqbs + ceqqg + ceqqb + ceqqd + ceqqe))); (*(ckt->CKTrhs + here->B3SOIDDeNode) -= m * ceqqe); if (here->B3SOIDDbodyMod == 1) { (*(ckt->CKTrhs + here->B3SOIDDpNode) += m * ceqbodcon); } if (selfheat) { (*(ckt->CKTrhs + here->B3SOIDDtempNode) -= m * (ceqth + ceqqth)); } if ((here->B3SOIDDdebugMod > 1) || (here->B3SOIDDdebugMod == -1)) { *(ckt->CKTrhs + here->B3SOIDDvbsNode) = here->B3SOIDDvbsdio; *(ckt->CKTrhs + here->B3SOIDDidsNode) = here->B3SOIDDids; *(ckt->CKTrhs + here->B3SOIDDicNode) = here->B3SOIDDic; *(ckt->CKTrhs + here->B3SOIDDibsNode) = here->B3SOIDDibs; *(ckt->CKTrhs + here->B3SOIDDibdNode) = here->B3SOIDDibd; *(ckt->CKTrhs + here->B3SOIDDiiiNode) = here->B3SOIDDiii; *(ckt->CKTrhs + here->B3SOIDDigidlNode) = here->B3SOIDDigidl; *(ckt->CKTrhs + here->B3SOIDDitunNode) = here->B3SOIDDitun; *(ckt->CKTrhs + here->B3SOIDDibpNode) = here->B3SOIDDibp; *(ckt->CKTrhs + here->B3SOIDDabeffNode) = here->B3SOIDDabeff; *(ckt->CKTrhs + here->B3SOIDDvbs0effNode) = here->B3SOIDDvbs0eff; *(ckt->CKTrhs + here->B3SOIDDvbseffNode) = here->B3SOIDDvbseff; *(ckt->CKTrhs + here->B3SOIDDxcNode) = here->B3SOIDDxc; *(ckt->CKTrhs + here->B3SOIDDcbbNode) = here->B3SOIDDcbb; *(ckt->CKTrhs + here->B3SOIDDcbdNode) = here->B3SOIDDcbd; *(ckt->CKTrhs + here->B3SOIDDcbgNode) = here->B3SOIDDcbg; *(ckt->CKTrhs + here->B3SOIDDqbfNode) = here->B3SOIDDqbf; *(ckt->CKTrhs + here->B3SOIDDqjsNode) = here->B3SOIDDqjs; *(ckt->CKTrhs + here->B3SOIDDqjdNode) = here->B3SOIDDqjd; /* clean up last */ *(ckt->CKTrhs + here->B3SOIDDgmNode) = Gm; *(ckt->CKTrhs + here->B3SOIDDgmbsNode) = Gmbs; *(ckt->CKTrhs + here->B3SOIDDgdsNode) = Gds; *(ckt->CKTrhs + here->B3SOIDDgmeNode) = Gme; *(ckt->CKTrhs + here->B3SOIDDqdNode) = qdrn; *(ckt->CKTrhs + here->B3SOIDDcbeNode) = Cbe; *(ckt->CKTrhs + here->B3SOIDDvbs0teffNode) = Vbs0teff; *(ckt->CKTrhs + here->B3SOIDDvthNode) = here->B3SOIDDvon; *(ckt->CKTrhs + here->B3SOIDDvgsteffNode) = Vgsteff; *(ckt->CKTrhs + here->B3SOIDDxcsatNode) = Xcsat; *(ckt->CKTrhs + here->B3SOIDDqaccNode) = -Qac0; *(ckt->CKTrhs + here->B3SOIDDqsub0Node) = Qsub0; *(ckt->CKTrhs + here->B3SOIDDqsubs1Node) = Qsubs1; *(ckt->CKTrhs + here->B3SOIDDqsubs2Node) = Qsubs2; *(ckt->CKTrhs + here->B3SOIDDvdscvNode) = VdsCV; *(ckt->CKTrhs + here->B3SOIDDvcscvNode) = VcsCV; *(ckt->CKTrhs + here->B3SOIDDqgNode) = qgate; *(ckt->CKTrhs + here->B3SOIDDqbNode) = qbody; *(ckt->CKTrhs + here->B3SOIDDqeNode) = qsub; *(ckt->CKTrhs + here->B3SOIDDdum1Node) = here->B3SOIDDdum1; *(ckt->CKTrhs + here->B3SOIDDdum2Node) = here->B3SOIDDdum2; *(ckt->CKTrhs + here->B3SOIDDdum3Node) = here->B3SOIDDdum3; *(ckt->CKTrhs + here->B3SOIDDdum4Node) = here->B3SOIDDdum4; *(ckt->CKTrhs + here->B3SOIDDdum5Node) = here->B3SOIDDdum5; /* end clean up last */ } /* * load y matrix */ (*(here->B3SOIDDEgPtr) += m * gcegb); (*(here->B3SOIDDEdpPtr) += m * gcedb); (*(here->B3SOIDDEspPtr) += m * gcesb); (*(here->B3SOIDDGePtr) += m * gcgeb); (*(here->B3SOIDDDPePtr) += m * (Gme + gddpe + gcdeb)); (*(here->B3SOIDDSPePtr) += m * (gsspe - Gme + gcseb)); Gmin = ckt->CKTgmin * 1e-6; (*(here->B3SOIDDEbPtr) -= m * (gcegb + gcedb + gcesb + gceeb)); (*(here->B3SOIDDGbPtr) -= m * (gcggb + gcgdb + gcgsb + gcgeb)); (*(here->B3SOIDDDPbPtr) -= m * (-gddpb - Gmbs + gcdgb + gcddb + gcdeb + gcdsb)); (*(here->B3SOIDDSPbPtr) -= m * (-gsspb + Gmbs + gcsgb + gcsdb + gcseb + gcssb)); (*(here->B3SOIDDBePtr) += m * (gbbe + gcbeb)); (*(here->B3SOIDDBgPtr) += m * (gcbgb + gbbg)); (*(here->B3SOIDDBdpPtr) += m * (gcbdb + gbbdp)); (*(here->B3SOIDDBspPtr) += m * (gcbsb + gbbsp - Gmin)); (*(here->B3SOIDDBbPtr) += m * (gbbb - gcbgb - gcbdb - gcbsb - gcbeb + Gmin)) ; (*(here->B3SOIDDEePtr) += m * gceeb); (*(here->B3SOIDDGgPtr) += m * (gcggb + ckt->CKTgmin)); (*(here->B3SOIDDGdpPtr) += m * (gcgdb - ckt->CKTgmin)); (*(here->B3SOIDDGspPtr) += m * gcgsb ); (*(here->B3SOIDDDPgPtr) += m * ((Gm + gcdgb) + gddpg - ckt->CKTgmin)); (*(here->B3SOIDDDPdpPtr) += m * ((here->B3SOIDDdrainConductance + here->B3SOIDDgds + gddpdp + RevSum + gcddb) + ckt->CKTgmin)); (*(here->B3SOIDDDPspPtr) -= m * (-gddpsp + here->B3SOIDDgds + FwdSum - gcdsb)); (*(here->B3SOIDDDPdPtr) -= m * here->B3SOIDDdrainConductance); (*(here->B3SOIDDSPgPtr) += m * (gcsgb - Gm + gsspg)); (*(here->B3SOIDDSPdpPtr) -= m * (here->B3SOIDDgds - gsspdp + RevSum - gcsdb)); (*(here->B3SOIDDSPspPtr) += m * (here->B3SOIDDsourceConductance + here->B3SOIDDgds + gsspsp + FwdSum + gcssb)); (*(here->B3SOIDDSPsPtr) -= m * here->B3SOIDDsourceConductance); (*(here->B3SOIDDDdPtr) += m * here->B3SOIDDdrainConductance); (*(here->B3SOIDDDdpPtr) -= m * here->B3SOIDDdrainConductance); (*(here->B3SOIDDSsPtr) += m * here->B3SOIDDsourceConductance); (*(here->B3SOIDDSspPtr) -= m * here->B3SOIDDsourceConductance); if (here->B3SOIDDbodyMod == 1) { (*(here->B3SOIDDBpPtr) -= m * gppp); (*(here->B3SOIDDPbPtr) += m * gppb); (*(here->B3SOIDDPpPtr) += m * gppp); (*(here->B3SOIDDPgPtr) += m * gppg); (*(here->B3SOIDDPdpPtr) += m * gppdp); (*(here->B3SOIDDPspPtr) += m * gppsp); (*(here->B3SOIDDPePtr) += m * gppe); } if (selfheat) { (*(here->B3SOIDDDPtempPtr) += m * (GmT + gddpT + gcdT)); (*(here->B3SOIDDSPtempPtr) += m * (-GmT + gsspT + gcsT)); (*(here->B3SOIDDBtempPtr) += m * (gbbT + gcbT)); (*(here->B3SOIDDEtempPtr) += m * (gceT)); (*(here->B3SOIDDGtempPtr) += m * (gcgT)); if (here->B3SOIDDbodyMod == 1) { (*(here->B3SOIDDPtempPtr) += m * gppT); } (*(here->B3SOIDDTemptempPtr) += m * (gTtt + 1/pParam->B3SOIDDrth + gcTt)); (*(here->B3SOIDDTempgPtr) += m * gTtg); (*(here->B3SOIDDTempbPtr) += m * gTtb); (*(here->B3SOIDDTempePtr) += m * gTte); (*(here->B3SOIDDTempdpPtr) += m * gTtdp); (*(here->B3SOIDDTempspPtr) += m * gTtsp); } if ((here->B3SOIDDdebugMod > 1) || (here->B3SOIDDdebugMod == -1)) { *(here->B3SOIDDVbsPtr) += m * 1; *(here->B3SOIDDIdsPtr) += m * 1; *(here->B3SOIDDIcPtr) += m * 1; *(here->B3SOIDDIbsPtr) += m * 1; *(here->B3SOIDDIbdPtr) += m * 1; *(here->B3SOIDDIiiPtr) += m * 1; *(here->B3SOIDDIgidlPtr) += m * 1; *(here->B3SOIDDItunPtr) += m * 1; *(here->B3SOIDDIbpPtr) += m * 1; *(here->B3SOIDDAbeffPtr) += m * 1; *(here->B3SOIDDVbs0effPtr) += m * 1; *(here->B3SOIDDVbseffPtr) += m * 1; *(here->B3SOIDDXcPtr) += m * 1; *(here->B3SOIDDCbgPtr) += m * 1; *(here->B3SOIDDCbbPtr) += m * 1; *(here->B3SOIDDCbdPtr) += m * 1; *(here->B3SOIDDqbPtr) += m * 1; *(here->B3SOIDDQbfPtr) += m * 1; *(here->B3SOIDDQjsPtr) += m * 1; *(here->B3SOIDDQjdPtr) += m * 1; /* clean up last */ *(here->B3SOIDDGmPtr) += m * 1; *(here->B3SOIDDGmbsPtr) += m * 1; *(here->B3SOIDDGdsPtr) += m * 1; *(here->B3SOIDDGmePtr) += m * 1; *(here->B3SOIDDVbs0teffPtr) += m * 1; *(here->B3SOIDDVgsteffPtr) += m * 1; *(here->B3SOIDDCbePtr) += m * 1; *(here->B3SOIDDVthPtr) += m * 1; *(here->B3SOIDDXcsatPtr) += m * 1; *(here->B3SOIDDVdscvPtr) += m * 1; *(here->B3SOIDDVcscvPtr) += m * 1; *(here->B3SOIDDQaccPtr) += m * 1; *(here->B3SOIDDQsub0Ptr) += m * 1; *(here->B3SOIDDQsubs1Ptr) += m * 1; *(here->B3SOIDDQsubs2Ptr) += m * 1; *(here->B3SOIDDqgPtr) += m * 1; *(here->B3SOIDDqdPtr) += m * 1; *(here->B3SOIDDqePtr) += m * 1; *(here->B3SOIDDDum1Ptr) += m * 1; *(here->B3SOIDDDum2Ptr) += m * 1; *(here->B3SOIDDDum3Ptr) += m * 1; *(here->B3SOIDDDum4Ptr) += m * 1; *(here->B3SOIDDDum5Ptr) += m * 1; /* end clean up last */ } line1000: ; /* Here NaN will be detected in any conductance or equivalent current. Note that nandetect is initialized within the "if" statements */ if ((nandetect = isnan (*(here->B3SOIDDGbPtr))) != 0) { strcpy (nanmessage, "GbPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDEbPtr))) != 0) { strcpy (nanmessage, "EbPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDDPbPtr))) != 0) { strcpy (nanmessage, "DPbPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDSPbPtr))) != 0) { strcpy (nanmessage, "SPbPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDBbPtr))) != 0) { strcpy (nanmessage, "BbPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDBgPtr))) != 0) { strcpy (nanmessage, "BgPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDBePtr))) != 0) { strcpy (nanmessage, "BePtr"); } else if ((nandetect = isnan (*(here->B3SOIDDBdpPtr))) != 0) { strcpy (nanmessage, "BdpPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDBspPtr))) != 0) { strcpy (nanmessage, "BspPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDGgPtr))) != 0) { strcpy (nanmessage, "GgPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDGdpPtr))) != 0) { strcpy (nanmessage, "GdpPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDGspPtr))) != 0) { strcpy (nanmessage, "GspPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDDPgPtr))) != 0) { strcpy (nanmessage, "DPgPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDDPdpPtr))) != 0) { strcpy (nanmessage, "DPdpPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDDPspPtr))) != 0) { strcpy (nanmessage, "DPspPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDSPgPtr))) != 0) { strcpy (nanmessage, "SPgPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDSPdpPtr))) != 0) { strcpy (nanmessage, "SPdpPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDSPspPtr))) != 0) { strcpy (nanmessage, "SPspPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDEePtr))) != 0) { strcpy (nanmessage, "EePtr"); } /* At this point, nandetect = 0 if none of the conductances checked so far are NaN */ if (nandetect == 0) { if ((nandetect = isnan (*(here->B3SOIDDEgPtr))) != 0) { strcpy (nanmessage, "EgPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDEdpPtr))) != 0) { strcpy (nanmessage, "EdpPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDEspPtr))) != 0) { strcpy (nanmessage, "EspPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDGePtr))) != 0) { strcpy (nanmessage, "GePtr"); } else if ((nandetect = isnan (*(here->B3SOIDDDPePtr))) != 0) { strcpy (nanmessage, "DPePtr"); } else if ((nandetect = isnan (*(here->B3SOIDDSPePtr))) != 0) { strcpy (nanmessage, "SPePtr"); } } /* Now check if self-heating caused NaN if nothing else has so far (check tempnode current also) */ if (selfheat && nandetect == 0) { if ((nandetect = isnan (*(here->B3SOIDDTemptempPtr))) != 0) { strcpy (nanmessage, "TemptempPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDTempgPtr))) != 0) { strcpy (nanmessage, "TempgPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDTempbPtr))) != 0) { strcpy (nanmessage, "TempbPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDTempePtr))) != 0) { strcpy (nanmessage, "TempePtr"); } else if ((nandetect = isnan (*(here->B3SOIDDTempdpPtr))) != 0) { strcpy (nanmessage, "TempdpPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDTempspPtr))) != 0) { strcpy (nanmessage, "TempspPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDGtempPtr))) != 0) { strcpy (nanmessage, "GtempPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDDPtempPtr))) != 0) { strcpy (nanmessage, "DPtempPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDSPtempPtr))) != 0) { strcpy (nanmessage, "SPtempPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDEtempPtr))) != 0) { strcpy (nanmessage, "EtempPtr"); } else if ((nandetect = isnan (*(here->B3SOIDDBtempPtr))) != 0) { strcpy (nanmessage, "BtempPtr"); } else if ((nandetect = isnan (*(ckt->CKTrhs + here->B3SOIDDtempNode))) != 0) { strcpy (nanmessage, "tempNode"); } } /* Lastly, check all equivalent currents (tempnode is checked above */ if (nandetect == 0) { if ((nandetect = isnan (*(ckt->CKTrhs + here->B3SOIDDgNode))) != 0) { strcpy (nanmessage, "gNode"); } else if ((nandetect = isnan (*(ckt->CKTrhs + here->B3SOIDDbNode))) != 0) { strcpy (nanmessage, "bNode"); } else if ((nandetect = isnan (*(ckt->CKTrhs + here->B3SOIDDdNodePrime))) != 0) { strcpy (nanmessage, "dpNode"); } else if ((nandetect = isnan (*(ckt->CKTrhs + here->B3SOIDDsNodePrime))) != 0) { strcpy (nanmessage, "spNode"); } else if ((nandetect = isnan (*(ckt->CKTrhs + here->B3SOIDDeNode))) != 0) { strcpy (nanmessage, "eNode"); } } /* Now print error message if NaN detected. Note that error will only be printed once (the first time it is encountered) each time SPICE is run since nanfound is static variable */ if (nanfound == 0 && nandetect) { fprintf(stderr, "Alberto says: YOU TURKEY! %s is NaN for instance %s at time %g!\n", nanmessage, here->B3SOIDDname, ckt->CKTtime); nanfound = nandetect; fprintf(stderr, " The program exit!\n"); controlled_exit(EXIT_FAILURE); } if (here->B3SOIDDdebugMod > 2) { fprintf(fpdebug, "Ids = %.4e, Ic = %.4e, cqdrn = %.4e, gmin=%.3e\n", Ids, Ic, cqdrn, ckt->CKTgmin); fprintf(fpdebug, "Iii = %.4e, Idgidl = %.4e, Ibs = %.14e\n", Iii, Idgidl, Ibs); fprintf(fpdebug, "Ibd = %.4e, Ibp = %.4e\n", Ibd, Ibp); fprintf(fpdebug, "qbody = %.5e, qbf = %.5e, qbe = %.5e\n", qbody, Qbf, -(Qe1+Qe2)); fprintf(fpdebug, "qbs = %.5e, qbd = %.5e\n", qjs, qjd); fprintf(fpdebug, "qdrn = %.5e, qinv = %.5e\n", qdrn, qinv); /* I am trying to debug the convergence problems here by printing out the entire Jacobian and equivalent current matrix */ if (here->B3SOIDDdebugMod > 4) { fprintf(fpdebug, "Ibtot = %.6e;\t Cbtot = %.6e;\n", Ibs+Ibp+Ibd-Iii-Idgidl-Isgidl, cqbody); fprintf(fpdebug, "ceqg = %.6e;\t ceqb = %.6e;\t ceqdp = %.6e;\t ceqsp = %.6e;\n", *(ckt->CKTrhs + here->B3SOIDDgNode), *(ckt->CKTrhs + here->B3SOIDDbNode), *(ckt->CKTrhs + here->B3SOIDDdNodePrime), *(ckt->CKTrhs + here->B3SOIDDsNodePrime)); fprintf(fpdebug, "ceqe = %.6e;\t ceqp = %.6e;\t ceqth = %.6e;\n", *(ckt->CKTrhs + here->B3SOIDDeNode), *(ckt->CKTrhs + here->B3SOIDDpNode), *(ckt->CKTrhs + here->B3SOIDDtempNode)); fprintf(fpdebug, "Eg = %.5e;\t Edp = %.5e;\t Esp = %.5e;\t Eb = %.5e;\n", *(here->B3SOIDDEgPtr), *(here->B3SOIDDEdpPtr), *(here->B3SOIDDEspPtr), *(here->B3SOIDDEbPtr)); fprintf(fpdebug, "Ee = %.5e;\t Gg = %.5e;\t Gdp = %.5e;\t Gsp = %.5e;\n", *(here->B3SOIDDEePtr), *(here->B3SOIDDGgPtr), *(here->B3SOIDDGdpPtr), *(here->B3SOIDDGspPtr)); fprintf(fpdebug, "Gb = %.5e;\t Ge = %.5e;\t DPg = %.5e;\t DPdp = %.5e;\n", *(here->B3SOIDDGbPtr), *(here->B3SOIDDGePtr), *(here->B3SOIDDDPgPtr), *(here->B3SOIDDDPdpPtr)); fprintf(fpdebug, "DPsp = %.5e;\t DPb = %.5e;\t DPe = %.5e;\t\n", *(here->B3SOIDDDPspPtr), *(here->B3SOIDDDPbPtr), *(here->B3SOIDDDPePtr)); fprintf(fpdebug, "DPd = %.5e;\t SPg = %.5e;\t SPdp = %.5e;\t SPsp = %.5e;\n", *(here->B3SOIDDDPdPtr), *(here->B3SOIDDSPgPtr), *(here->B3SOIDDSPdpPtr), *(here->B3SOIDDSPspPtr)); fprintf(fpdebug, "SPb = %.5e;\t SPe = %.5e;\t SPs = %.5e;\n", *(here->B3SOIDDSPbPtr), *(here->B3SOIDDSPePtr), *(here->B3SOIDDSPsPtr)); fprintf(fpdebug, "Dd = %.5e;\t Ddp = %.5e;\t Ss = %.5e;\t Ssp = %.5e;\n", *(here->B3SOIDDDdPtr), *(here->B3SOIDDDdpPtr), *(here->B3SOIDDSsPtr), *(here->B3SOIDDSspPtr)); fprintf(fpdebug, "Bg = %.5e;\t Bdp = %.5e;\t Bsp = %.5e;\t Bb = %.5e;\n", *(here->B3SOIDDBgPtr), *(here->B3SOIDDBdpPtr), *(here->B3SOIDDBspPtr), *(here->B3SOIDDBbPtr)); fprintf(fpdebug, "Be = %.5e;\t Btot = %.5e;\t DPtot = %.5e;\n", *(here->B3SOIDDBePtr), *(here->B3SOIDDBgPtr) + *(here->B3SOIDDBdpPtr) + *(here->B3SOIDDBspPtr) + *(here->B3SOIDDBbPtr) + *(here->B3SOIDDBePtr), *(here->B3SOIDDDPePtr) + *(here->B3SOIDDDPgPtr) + *(here->B3SOIDDDPdpPtr) + *(here->B3SOIDDDPspPtr) + *(here->B3SOIDDDPbPtr)); if (selfheat) { fprintf (fpdebug, "DPtemp = %.5e;\t SPtemp = %.5e;\t Btemp = %.5e;\n", *(here->B3SOIDDDPtempPtr), *(here->B3SOIDDSPtempPtr), *(here->B3SOIDDBtempPtr)); fprintf (fpdebug, "Gtemp = %.5e;\t Etemp = %.5e;\n", *(here->B3SOIDDGtempPtr), *(here->B3SOIDDEtempPtr)); fprintf (fpdebug, "Tempg = %.5e;\t Tempdp = %.5e;\t Tempsp = %.5e;\t Tempb = %.5e;\n", *(here->B3SOIDDTempgPtr), *(here->B3SOIDDTempdpPtr), *(here->B3SOIDDTempspPtr), *(here->B3SOIDDTempbPtr)); fprintf (fpdebug, "Tempe = %.5e;\t TempT = %.5e;\t Temptot = %.5e;\n", *(here->B3SOIDDTempePtr), *(here->B3SOIDDTemptempPtr), *(here->B3SOIDDTempgPtr) + *(here->B3SOIDDTempdpPtr) + *(here->B3SOIDDTempspPtr)+ *(here->B3SOIDDTempbPtr) + *(here->B3SOIDDTempePtr)); } if (here->B3SOIDDbodyMod == 1) { fprintf(fpdebug, "ceqbodcon=%.5e;\t", ceqbodcon); fprintf(fpdebug, "Bp = %.5e;\t Pb = %.5e;\t Pp = %.5e;\n", -gppp, gppb, gppp); fprintf(fpdebug, "Pg=%.5e;\t Pdp=%.5e;\t Psp=%.5e;\t Pe=%.5e;\n", gppg, gppdp, gppsp, gppe); } } if (here->B3SOIDDdebugMod > 3) { fprintf(fpdebug, "Vth = %.4f, Vbs0eff = %.8f, Vdsat = %.4f\n", Vth, Vbs0eff, Vdsat); fprintf(fpdebug, "ueff = %g, Vgsteff = %.4f, Vdseff = %.4f\n", ueff, Vgsteff, Vdseff); fprintf(fpdebug, "Vthfd = %.4f, Vbs0mos = %.4f, Vbs0 = %.4f\n", Vthfd, Vbs0mos, Vbs0); fprintf(fpdebug, "Vbs0t = %.4f, Vbsdio = %.8f\n", Vbs0t, Vbsdio); } fclose(fpdebug); } here->B3SOIDDiterations++; /* increment the iteration counter */ } /* End of Mosfet Instance */ } /* End of Model Instance */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_dd/b3soiddpzld.c0000644000175000017500000001433013546075722023750 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: Weidong Liu and Pin Su Feb 1999 Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soiddpzld.c 98/5/01 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMDD2.1 release */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "b3soidddef.h" #include "ngspice/suffix.h" int B3SOIDDpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { B3SOIDDmodel *model = (B3SOIDDmodel*)inModel; B3SOIDDinstance *here; double xcggb, xcgdb, xcgsb, xcbgb, xcbdb, xcbsb, xcddb, xcssb, xcdgb; double gdpr, gspr, gds, gbd, gbs, capbd = 0.0, capbs = 0.0; double xcsgb, xcdsb, xcsdb; double cggb, cgdb, cgsb, cbgb, cbdb, cbsb, cddb, cdgb, cdsb; double GSoverlapCap, GDoverlapCap, GBoverlapCap = 0.0; double FwdSum, RevSum, Gm, Gmbs; double m; NG_IGNORE(ckt); for (; model != NULL; model = B3SOIDDnextModel(model)) { for (here = B3SOIDDinstances(model); here!= NULL; here = B3SOIDDnextInstance(here)) { if (here->B3SOIDDmode >= 0) { Gm = here->B3SOIDDgm; Gmbs = here->B3SOIDDgmbs; FwdSum = Gm + Gmbs; RevSum = 0.0; cggb = here->B3SOIDDcggb; cgsb = here->B3SOIDDcgsb; cgdb = here->B3SOIDDcgdb; cbgb = here->B3SOIDDcbgb; cbsb = here->B3SOIDDcbsb; cbdb = here->B3SOIDDcbdb; cdgb = here->B3SOIDDcdgb; cdsb = here->B3SOIDDcdsb; cddb = here->B3SOIDDcddb; } else { Gm = -here->B3SOIDDgm; Gmbs = -here->B3SOIDDgmbs; FwdSum = 0.0; RevSum = -Gm - Gmbs; cggb = here->B3SOIDDcggb; cgsb = here->B3SOIDDcgdb; cgdb = here->B3SOIDDcgsb; cbgb = here->B3SOIDDcbgb; cbsb = here->B3SOIDDcbdb; cbdb = here->B3SOIDDcbsb; cdgb = -(here->B3SOIDDcdgb + cggb + cbgb); cdsb = -(here->B3SOIDDcddb + cgsb + cbsb); cddb = -(here->B3SOIDDcdsb + cgdb + cbdb); } gdpr=here->B3SOIDDdrainConductance; gspr=here->B3SOIDDsourceConductance; gds= here->B3SOIDDgds; gbd= here->B3SOIDDgjdb; gbs= here->B3SOIDDgjsb; #ifdef BULKCODE capbd= here->B3SOIDDcapbd; capbs= here->B3SOIDDcapbs; #endif GSoverlapCap = here->B3SOIDDcgso; GDoverlapCap = here->B3SOIDDcgdo; #ifdef BULKCODE GBoverlapCap = here->pParam->B3SOIDDcgbo; #endif xcdgb = (cdgb - GDoverlapCap); xcddb = (cddb + capbd + GDoverlapCap); xcdsb = cdsb; xcsgb = -(cggb + cbgb + cdgb + GSoverlapCap); xcsdb = -(cgdb + cbdb + cddb); xcssb = (capbs + GSoverlapCap - (cgsb+cbsb+cdsb)); xcggb = (cggb + GDoverlapCap + GSoverlapCap + GBoverlapCap); xcgdb = (cgdb - GDoverlapCap); xcgsb = (cgsb - GSoverlapCap); xcbgb = (cbgb - GBoverlapCap); xcbdb = (cbdb - capbd); xcbsb = (cbsb - capbs); m = here->B3SOIDDm; *(here->B3SOIDDGgPtr ) += m * (xcggb * s->real); *(here->B3SOIDDGgPtr +1) += m * (xcggb * s->imag); *(here->B3SOIDDBbPtr ) += m * ((-xcbgb-xcbdb-xcbsb) * s->real); *(here->B3SOIDDBbPtr +1) += m * ((-xcbgb-xcbdb-xcbsb) * s->imag); *(here->B3SOIDDDPdpPtr ) += m * (xcddb * s->real); *(here->B3SOIDDDPdpPtr +1) += m * (xcddb * s->imag); *(here->B3SOIDDSPspPtr ) += m * (xcssb * s->real); *(here->B3SOIDDSPspPtr +1) += m * (xcssb * s->imag); *(here->B3SOIDDGbPtr ) += m * ((-xcggb-xcgdb-xcgsb) * s->real); *(here->B3SOIDDGbPtr +1) += m * ((-xcggb-xcgdb-xcgsb) * s->imag); *(here->B3SOIDDGdpPtr ) += m * (xcgdb * s->real); *(here->B3SOIDDGdpPtr +1) += m * (xcgdb * s->imag); *(here->B3SOIDDGspPtr ) += m * (xcgsb * s->real); *(here->B3SOIDDGspPtr +1) += m * (xcgsb * s->imag); *(here->B3SOIDDBgPtr ) += m * (xcbgb * s->real); *(here->B3SOIDDBgPtr +1) += m * (xcbgb * s->imag); *(here->B3SOIDDBdpPtr ) += m * (xcbdb * s->real); *(here->B3SOIDDBdpPtr +1) += m * (xcbdb * s->imag); *(here->B3SOIDDBspPtr ) += m * (xcbsb * s->real); *(here->B3SOIDDBspPtr +1) += (xcbsb * s->imag); *(here->B3SOIDDDPgPtr ) += m * (xcdgb * s->real); *(here->B3SOIDDDPgPtr +1) += m * (xcdgb * s->imag); *(here->B3SOIDDDPbPtr ) += m * ((-xcdgb-xcddb-xcdsb) * s->real); *(here->B3SOIDDDPbPtr +1) += m * ((-xcdgb-xcddb-xcdsb) * s->imag); *(here->B3SOIDDDPspPtr ) += m * (xcdsb * s->real); *(here->B3SOIDDDPspPtr +1) += m * (xcdsb * s->imag); *(here->B3SOIDDSPgPtr ) += m * (xcsgb * s->real); *(here->B3SOIDDSPgPtr +1) += m * (xcsgb * s->imag); *(here->B3SOIDDSPbPtr ) += m * ((-xcsgb-xcsdb-xcssb) * s->real); *(here->B3SOIDDSPbPtr +1) += m * ((-xcsgb-xcsdb-xcssb) * s->imag); *(here->B3SOIDDSPdpPtr ) += m * (xcsdb * s->real); *(here->B3SOIDDSPdpPtr +1) += m * (xcsdb * s->imag); *(here->B3SOIDDDdPtr) += m * gdpr; *(here->B3SOIDDSsPtr) += m * gspr; *(here->B3SOIDDBbPtr) += m * (gbd + gbs); *(here->B3SOIDDDPdpPtr) += m * (gdpr + gds + gbd + RevSum); *(here->B3SOIDDSPspPtr) += m * (gspr + gds + gbs + FwdSum); *(here->B3SOIDDDdpPtr) -= m * gdpr; *(here->B3SOIDDSspPtr) -= m * gspr; *(here->B3SOIDDBdpPtr) -= m * gbd; *(here->B3SOIDDBspPtr) -= m * gbs; *(here->B3SOIDDDPdPtr) -= m * gdpr; *(here->B3SOIDDDPgPtr) += m * Gm; *(here->B3SOIDDDPbPtr) -= m * (gbd - Gmbs); *(here->B3SOIDDDPspPtr) -= m * (gds + FwdSum); *(here->B3SOIDDSPgPtr) -= m * Gm; *(here->B3SOIDDSPsPtr) -= m * gspr; *(here->B3SOIDDSPbPtr) -= m * (gbs + Gmbs); *(here->B3SOIDDSPdpPtr) -= m * (gds + RevSum); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_dd/b3soiddacld.c0000644000175000017500000004537013546075722023712 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: Weidong Liu and Pin Su Feb 1999 Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soiddacld.c 98/5/01 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMDD2.1 release */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b3soidddef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIDDacLoad(GENmodel *inModel, CKTcircuit *ckt) { B3SOIDDmodel *model = (B3SOIDDmodel*)inModel; B3SOIDDinstance *here; int selfheat; double xcggb, xcgdb, xcgsb, xcgeb, xcgT; double xcdgb, xcddb, xcdsb, xcdeb, xcdT; double xcsgb, xcsdb, xcssb, xcseb, xcsT; double xcbgb, xcbdb, xcbsb, xcbeb, xcbT; double xcegb, xcedb, xcesb, xceeb, xceT; double gdpr, gspr, gds; double cggb, cgdb, cgsb, cgeb, cgT; double cdgb, cddb, cdsb, cdeb, cdT; double cbgb, cbdb, cbsb, cbeb, cbT; double cegb, cedb, cesb, ceeb, ceT; double GSoverlapCap, GDoverlapCap, GEoverlapCap, FwdSum, RevSum, Gm, Gmbs, Gme, GmT; double omega; double dxpart, sxpart; double gbbg, gbbdp, gbbb, gbbe, gbbp, gbbsp, gbbT; double gddpg, gddpdp, gddpsp, gddpb, gddpe, gddpT; double gsspg, gsspdp, gsspsp, gsspb, gsspe, gsspT; double gppg, gppdp, gppb, gppe, gppp, gppsp, gppT; double xcTt, cTt, gTtt, gTtg, gTtb, gTte, gTtdp, gTtsp; FILE *fpdebug = NULL; double m; omega = ckt->CKTomega; for (; model != NULL; model = B3SOIDDnextModel(model)) { for (here = B3SOIDDinstances(model); here!= NULL; here = B3SOIDDnextInstance(here)) { selfheat = (model->B3SOIDDshMod == 1) && (here->B3SOIDDrth0 != 0.0); if (here->B3SOIDDdebugMod > 2) { fpdebug = fopen("b3soiddac.log", "a"); fprintf(fpdebug, ".......omega=%.5e\n", omega); } if (here->B3SOIDDmode >= 0) { Gm = here->B3SOIDDgm; Gmbs = here->B3SOIDDgmbs; Gme = here->B3SOIDDgme; GmT = model->B3SOIDDtype * here->B3SOIDDgmT; FwdSum = Gm + Gmbs + Gme; RevSum = 0.0; cbgb = here->B3SOIDDcbgb; cbsb = here->B3SOIDDcbsb; cbdb = here->B3SOIDDcbdb; cbeb = here->B3SOIDDcbeb; cbT = model->B3SOIDDtype * here->B3SOIDDcbT; cegb = here->B3SOIDDcegb; cesb = here->B3SOIDDcesb; cedb = here->B3SOIDDcedb; ceeb = here->B3SOIDDceeb; ceT = model->B3SOIDDtype * here->B3SOIDDceT; cggb = here->B3SOIDDcggb; cgsb = here->B3SOIDDcgsb; cgdb = here->B3SOIDDcgdb; cgeb = here->B3SOIDDcgeb; cgT = model->B3SOIDDtype * here->B3SOIDDcgT; cdgb = here->B3SOIDDcdgb; cdsb = here->B3SOIDDcdsb; cddb = here->B3SOIDDcddb; cdeb = here->B3SOIDDcdeb; cdT = model->B3SOIDDtype * here->B3SOIDDcdT; cTt = here->pParam->B3SOIDDcth; gbbg = -here->B3SOIDDgbgs; gbbdp = -here->B3SOIDDgbds; gbbb = -here->B3SOIDDgbbs; gbbe = -here->B3SOIDDgbes; gbbp = -here->B3SOIDDgbps; gbbT = -model->B3SOIDDtype * here->B3SOIDDgbT; gbbsp = - ( gbbg + gbbdp + gbbb + gbbe + gbbp); gddpg = -here->B3SOIDDgjdg; gddpdp = -here->B3SOIDDgjdd; gddpb = -here->B3SOIDDgjdb; gddpe = -here->B3SOIDDgjde; gddpT = -model->B3SOIDDtype * here->B3SOIDDgjdT; gddpsp = - ( gddpg + gddpdp + gddpb + gddpe); gsspg = -here->B3SOIDDgjsg; gsspdp = -here->B3SOIDDgjsd; gsspb = -here->B3SOIDDgjsb; gsspe = 0.0; gsspT = -model->B3SOIDDtype * here->B3SOIDDgjsT; gsspsp = - (gsspg + gsspdp + gsspb + gsspe); gppg = -here->B3SOIDDgbpgs; gppdp = -here->B3SOIDDgbpds; gppb = -here->B3SOIDDgbpbs; gppe = -here->B3SOIDDgbpes; gppp = -here->B3SOIDDgbpps; gppT = -model->B3SOIDDtype * here->B3SOIDDgbpT; gppsp = - (gppg + gppdp + gppb + gppe + gppp); gTtg = here->B3SOIDDgtempg; gTtb = here->B3SOIDDgtempb; gTte = here->B3SOIDDgtempe; gTtdp = here->B3SOIDDgtempd; gTtt = here->B3SOIDDgtempT; gTtsp = - (gTtg + gTtb + gTte + gTtdp); sxpart = 0.6; dxpart = 0.4; } else { Gm = -here->B3SOIDDgm; Gmbs = -here->B3SOIDDgmbs; Gme = -here->B3SOIDDgme; GmT = -model->B3SOIDDtype * here->B3SOIDDgmT; FwdSum = 0.0; RevSum = -Gm - Gmbs - Gme; cdgb = - (here->B3SOIDDcdgb + here->B3SOIDDcggb + here->B3SOIDDcbgb + here->B3SOIDDcegb); cdsb = - (here->B3SOIDDcddb + here->B3SOIDDcgdb + here->B3SOIDDcbdb + here->B3SOIDDcedb); cddb = - (here->B3SOIDDcdsb + here->B3SOIDDcgsb + here->B3SOIDDcbsb + here->B3SOIDDcesb); cdeb = - (here->B3SOIDDcdeb + here->B3SOIDDcgeb + here->B3SOIDDcbeb + here->B3SOIDDceeb); cdT = - model->B3SOIDDtype * (here->B3SOIDDcgT + here->B3SOIDDcbT + here->B3SOIDDcdT + here->B3SOIDDceT); cegb = here->B3SOIDDcegb; cesb = here->B3SOIDDcedb; cedb = here->B3SOIDDcesb; ceeb = here->B3SOIDDceeb; ceT = model->B3SOIDDtype * here->B3SOIDDceT; cggb = here->B3SOIDDcggb; cgsb = here->B3SOIDDcgdb; cgdb = here->B3SOIDDcgsb; cgeb = here->B3SOIDDcgeb; cgT = model->B3SOIDDtype * here->B3SOIDDcgT; cbgb = here->B3SOIDDcbgb; cbsb = here->B3SOIDDcbdb; cbdb = here->B3SOIDDcbsb; cbeb = here->B3SOIDDcbeb; cbT = model->B3SOIDDtype * here->B3SOIDDcbT; cTt = here->pParam->B3SOIDDcth; gbbg = -here->B3SOIDDgbgs; gbbb = -here->B3SOIDDgbbs; gbbe = -here->B3SOIDDgbes; gbbp = -here->B3SOIDDgbps; gbbsp = -here->B3SOIDDgbds; gbbT = -model->B3SOIDDtype * here->B3SOIDDgbT; gbbdp = - ( gbbg + gbbsp + gbbb + gbbe + gbbp); gddpg = -here->B3SOIDDgjsg; gddpsp = -here->B3SOIDDgjsd; gddpb = -here->B3SOIDDgjsb; gddpe = 0.0; gddpT = -model->B3SOIDDtype * here->B3SOIDDgjsT; gddpdp = - (gddpg + gddpsp + gddpb + gddpe); gsspg = -here->B3SOIDDgjdg; gsspsp = -here->B3SOIDDgjdd; gsspb = -here->B3SOIDDgjdb; gsspe = -here->B3SOIDDgjde; gsspT = -model->B3SOIDDtype * here->B3SOIDDgjdT; gsspdp = - ( gsspg + gsspsp + gsspb + gsspe); gppg = -here->B3SOIDDgbpgs; gppsp = -here->B3SOIDDgbpds; gppb = -here->B3SOIDDgbpbs; gppe = -here->B3SOIDDgbpes; gppp = -here->B3SOIDDgbpps; gppT = -model->B3SOIDDtype * here->B3SOIDDgbpT; gppdp = - (gppg + gppsp + gppb + gppe + gppp); gTtt = here->B3SOIDDgtempT; gTtg = here->B3SOIDDgtempg; gTtb = here->B3SOIDDgtempb; gTte = here->B3SOIDDgtempe; gTtdp = here->B3SOIDDgtempd; gTtsp = - (gTtt + gTtg + gTtb + gTte + gTtdp); gTtg = here->B3SOIDDgtempg; gTtb = here->B3SOIDDgtempb; gTte = here->B3SOIDDgtempe; gTtsp = here->B3SOIDDgtempd; gTtt = here->B3SOIDDgtempT; gTtdp = - (gTtg + gTtb + gTte + gTtsp); sxpart = 0.6; sxpart = 0.4; dxpart = 0.6; } gdpr=here->B3SOIDDdrainConductance; gspr=here->B3SOIDDsourceConductance; gds= here->B3SOIDDgds; GSoverlapCap = here->B3SOIDDcgso; GDoverlapCap = here->B3SOIDDcgdo; GEoverlapCap = here->pParam->B3SOIDDcgeo; xcegb = (cegb - GEoverlapCap) * omega; xcedb = cedb * omega; xcesb = cesb * omega; xceeb = (ceeb + GEoverlapCap) * omega; xceT = ceT * omega; xcggb = (cggb + GDoverlapCap + GSoverlapCap + GEoverlapCap) * omega; xcgdb = (cgdb - GDoverlapCap ) * omega; xcgsb = (cgsb - GSoverlapCap) * omega; xcgeb = (cgeb - GEoverlapCap) * omega; xcgT = cgT * omega; xcdgb = (cdgb - GDoverlapCap) * omega; xcddb = (cddb + GDoverlapCap) * omega; xcdsb = cdsb * omega; xcdeb = cdeb * omega; xcdT = cdT * omega; xcsgb = -(cggb + cbgb + cdgb + cegb + GSoverlapCap) * omega; xcsdb = -(cgdb + cbdb + cddb + cedb) * omega; xcssb = (GSoverlapCap - (cgsb + cbsb + cdsb + cesb)) * omega; xcseb = -(cgeb + cbeb + cdeb + ceeb) * omega; xcsT = -(cgT + cbT + cdT + ceT) * omega; xcbgb = cbgb * omega; xcbdb = cbdb * omega; xcbsb = cbsb * omega; xcbeb = cbeb * omega; xcbT = cbT * omega; xcTt = cTt * omega; m = here->B3SOIDDm; *(here->B3SOIDDEgPtr +1) += m * xcegb; *(here->B3SOIDDEdpPtr +1) += m * xcedb; *(here->B3SOIDDEspPtr +1) += m * xcesb; *(here->B3SOIDDGePtr +1) += m * xcgeb; *(here->B3SOIDDDPePtr +1) += m * xcdeb; *(here->B3SOIDDSPePtr +1) += m * xcseb; *(here->B3SOIDDEePtr +1) += m * xceeb; *(here->B3SOIDDGgPtr +1) += m * xcggb; *(here->B3SOIDDGdpPtr +1) += m * xcgdb; *(here->B3SOIDDGspPtr +1) += m * xcgsb; *(here->B3SOIDDDPgPtr +1) += m * xcdgb; *(here->B3SOIDDDPdpPtr +1) += m * xcddb; *(here->B3SOIDDDPspPtr +1) += m * xcdsb; *(here->B3SOIDDSPgPtr +1) += m * xcsgb; *(here->B3SOIDDSPdpPtr +1) += m * xcsdb; *(here->B3SOIDDSPspPtr +1) += m * xcssb; *(here->B3SOIDDBePtr +1) += m * xcbeb; *(here->B3SOIDDBgPtr +1) += m * xcbgb; *(here->B3SOIDDBdpPtr +1) += m * xcbdb; *(here->B3SOIDDBspPtr +1) += m * xcbsb; *(here->B3SOIDDEbPtr +1) -= m * (xcegb + xcedb + xcesb + xceeb); *(here->B3SOIDDGbPtr +1) -= m * (xcggb + xcgdb + xcgsb + xcgeb); *(here->B3SOIDDDPbPtr +1) -= m * (xcdgb + xcddb + xcdsb + xcdeb); *(here->B3SOIDDSPbPtr +1) -= m * (xcsgb + xcsdb + xcssb + xcseb); *(here->B3SOIDDBbPtr +1) -= m * (xcbgb + xcbdb + xcbsb + xcbeb); if (selfheat) { *(here->B3SOIDDTemptempPtr + 1) += m * xcTt; *(here->B3SOIDDDPtempPtr + 1) += m * xcdT; *(here->B3SOIDDSPtempPtr + 1) += m * xcsT; *(here->B3SOIDDBtempPtr + 1) += m * xcbT; *(here->B3SOIDDEtempPtr + 1) += m * xceT; *(here->B3SOIDDGtempPtr + 1) += m * xcgT; } if (here->B3SOIDDdebugMod > 3) { fprintf(fpdebug, "Cbg+Cbs+Cbe = %.5e; Cbd = %.5e;\n", (xcbgb+xcbsb+xcbeb)/omega, xcbdb/omega); fprintf(fpdebug, "gbs = %.5e; gbd = %.5e\n", gbbsp, gbbdp); fprintf(fpdebug, "AC condunctance...\n"); fprintf(fpdebug, "Eg=%.5e; Edp=%.5e; Esp=%.5e;\nEb=%.5e; Ee=%.5e\n", xcegb, xcedb, xcesb, -(xcegb+xcedb+xcesb+xceeb), xceeb); fprintf(fpdebug, "Gg=%.5e; Gdp=%.5e; Gsp=%.5e;\nGb=%.5e; Ge=%.5e\n", xcggb, xcgdb, xcgsb, -(xcggb+xcgdb+xcgsb+xcgeb), xcgeb); fprintf(fpdebug, "Bg=%.5e; Bdp=%.5e; Bsp=%.5e;\nBb=%.5e; Be=%.5e\n", xcbgb, xcbdb, xcbsb, -(xcbgb+xcbdb+xcbsb+xcbeb), xcbeb); fprintf(fpdebug, "DPg=%.5e; DPdp=%.5e; DPsp=%.5e;\nDPb=%.5e; DPe=%.5e\n", xcdgb, xcddb, xcdsb, -(xcdgb+xcddb+xcdsb+xcdeb), xcdeb); fprintf(fpdebug, "SPg=%.5e; SPdp=%.5e; SPsp=%.5e;\nSPb=%.5e; SPe=%.5e\n", xcsgb, xcsdb, xcssb, -(xcsgb+xcsdb+xcssb+xcseb), xcseb); } *(here->B3SOIDDEgPtr) += 0.0; *(here->B3SOIDDEdpPtr) += 0.0; *(here->B3SOIDDEspPtr) += 0.0; *(here->B3SOIDDGePtr) -= 0.0; *(here->B3SOIDDDPePtr) += m * (Gme + gddpe); *(here->B3SOIDDSPePtr) += m * (gsspe - Gme); *(here->B3SOIDDEePtr) += 0.0; *(here->B3SOIDDDPgPtr) += m * (Gm + gddpg); *(here->B3SOIDDDPdpPtr) += m * (gdpr + gds + gddpdp + RevSum); *(here->B3SOIDDDPspPtr) -= m * (gds + FwdSum - gddpsp); *(here->B3SOIDDDPdPtr) -= m * gdpr; *(here->B3SOIDDSPgPtr) -= m * (Gm - gsspg); *(here->B3SOIDDSPdpPtr) -= m * (gds + RevSum - gsspdp); *(here->B3SOIDDSPspPtr) += m * (gspr + gds + FwdSum + gsspsp); *(here->B3SOIDDSPsPtr) -= m * gspr; *(here->B3SOIDDBePtr) += m * gbbe; *(here->B3SOIDDBgPtr) += m * gbbg; *(here->B3SOIDDBdpPtr) += m * gbbdp; *(here->B3SOIDDBspPtr) += m * gbbsp; *(here->B3SOIDDBbPtr) += m * gbbb; *(here->B3SOIDDEbPtr) += 0.0; *(here->B3SOIDDSPbPtr) -= m * (Gmbs - gsspb); *(here->B3SOIDDDPbPtr) -= m * (-gddpb - Gmbs); if (selfheat) { *(here->B3SOIDDDPtempPtr) += m * (GmT + gddpT); *(here->B3SOIDDSPtempPtr) += m * (-GmT + gsspT); *(here->B3SOIDDBtempPtr) += m * gbbT; if (here->B3SOIDDbodyMod == 1) { (*(here->B3SOIDDPtempPtr) += m * gppT); } *(here->B3SOIDDTemptempPtr) += m * (gTtt + 1/here->pParam->B3SOIDDrth); *(here->B3SOIDDTempgPtr) += m * gTtg; *(here->B3SOIDDTempbPtr) += m * gTtb; *(here->B3SOIDDTempePtr) += m * gTte; *(here->B3SOIDDTempdpPtr) += m * gTtdp; *(here->B3SOIDDTempspPtr) += m * gTtsp; } if (here->B3SOIDDdebugMod > 3) { fprintf(fpdebug, "Static condunctance...\n"); fprintf(fpdebug, "Gg=%.5e; Gdp=%.5e; Gsp=%.5e;\nGb=%.5e; Ge=%.5e\n", *(here->B3SOIDDGgPtr), *(here->B3SOIDDGdpPtr), *(here->B3SOIDDGspPtr), *(here->B3SOIDDGbPtr), *(here->B3SOIDDGePtr)); fprintf(fpdebug, "DPg=%.5e; DPdp=%.5e; DPsp=%.5e;\nDPb=%.5e; DPe=%.5e\n", *(here->B3SOIDDDPgPtr), *(here->B3SOIDDDPdpPtr), *(here->B3SOIDDDPspPtr), *(here->B3SOIDDDPbPtr), *(here->B3SOIDDDPePtr)); fprintf(fpdebug, "SPg=%.5e; SPdp=%.5e; SPsp=%.5e;\nSPb=%.5e; SPe=%.5e\n", *(here->B3SOIDDSPgPtr), *(here->B3SOIDDSPdpPtr), *(here->B3SOIDDSPspPtr), *(here->B3SOIDDSPbPtr), *(here->B3SOIDDSPePtr)); fprintf(fpdebug, "Bg=%.5e; Bdp=%.5e; Bsp=%.5e;\nBb=%.5e; Be=%.5e\n", gbbg, gbbdp, gbbsp, gbbb, gbbe); } *(here->B3SOIDDDdPtr) += m * gdpr; *(here->B3SOIDDDdpPtr) -= m * gdpr; *(here->B3SOIDDSsPtr) += m * gspr; *(here->B3SOIDDSspPtr) -= m * gspr; if (here->B3SOIDDbodyMod == 1) { (*(here->B3SOIDDBpPtr) -= m * gppp); (*(here->B3SOIDDPbPtr) += m * gppb); (*(here->B3SOIDDPpPtr) += m * gppp); (*(here->B3SOIDDPgPtr) += m * gppg); (*(here->B3SOIDDPdpPtr) += m * gppdp); (*(here->B3SOIDDPspPtr) += m * gppsp); (*(here->B3SOIDDPePtr) += m * gppe); } if (here->B3SOIDDdebugMod > 1) { *(here->B3SOIDDVbsPtr) += m * 1; *(here->B3SOIDDIdsPtr) += m * 1; *(here->B3SOIDDIcPtr) += m * 1; *(here->B3SOIDDIbsPtr) += m * 1; *(here->B3SOIDDIbdPtr) += m * 1; *(here->B3SOIDDIiiPtr) += m * 1; *(here->B3SOIDDIgidlPtr) += m * 1; *(here->B3SOIDDItunPtr) += m * 1; *(here->B3SOIDDIbpPtr) += m * 1; *(here->B3SOIDDAbeffPtr) += m * 1; *(here->B3SOIDDVbs0effPtr) += m * 1; *(here->B3SOIDDVbseffPtr) += 1; *(here->B3SOIDDXcPtr) += m * 1; *(here->B3SOIDDCbgPtr) += m * 1; *(here->B3SOIDDCbbPtr) += m * 1; *(here->B3SOIDDCbdPtr) += m * 1; *(here->B3SOIDDqbPtr) += m * 1; *(here->B3SOIDDQbfPtr) += m * 1; *(here->B3SOIDDQjsPtr) += m * 1; *(here->B3SOIDDQjdPtr) += m * 1; /* clean up last */ *(here->B3SOIDDGmPtr) += m * 1; *(here->B3SOIDDGmbsPtr) += m * 1; *(here->B3SOIDDGdsPtr) += m * 1; *(here->B3SOIDDGmePtr) += m * 1; *(here->B3SOIDDVbs0teffPtr) += m * 1; *(here->B3SOIDDVgsteffPtr) += m * 1; *(here->B3SOIDDCbePtr) += m * 1; *(here->B3SOIDDVthPtr) += m * 1; *(here->B3SOIDDXcsatPtr) += m * 1; *(here->B3SOIDDVdscvPtr) += m * 1; *(here->B3SOIDDVcscvPtr) += m * 1; *(here->B3SOIDDQaccPtr) += m * 1; *(here->B3SOIDDQsub0Ptr) += m * 1; *(here->B3SOIDDQsubs1Ptr) += m * 1; *(here->B3SOIDDQsubs2Ptr) += m * 1; *(here->B3SOIDDqgPtr) += m * 1; *(here->B3SOIDDqdPtr) += m * 1; *(here->B3SOIDDqePtr) += m * 1; *(here->B3SOIDDDum1Ptr) += m * 1; *(here->B3SOIDDDum2Ptr) += m * 1; *(here->B3SOIDDDum3Ptr) += m * 1; *(here->B3SOIDDDum4Ptr) += m * 1; *(here->B3SOIDDDum5Ptr) += m * 1; } if (here->B3SOIDDdebugMod > 2) fclose(fpdebug); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_dd/BsimTerms_use0000644000175000017500000000247313546075722024074 0ustar carstencarstenThe terms under which the software is provided are as the following. Software is distributed as is, completely without warranty or service support. The University of California and its employees are not liable for the condition or performance of the software. The University owns the copyright but shall not be liable for any infringement of copyright or other proprietary rights brought by third parties against the users of the software. The University of California hereby disclaims all implied warranties. The University of California grants the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions 1. The users agree not to charge for the University of California code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge the UC Berkeley BSIM Research Group that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to obey all U.S. Government restrictions governing redistribution or export of the software. 4. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others. tmpk8ny_4pz/src/spicelib/devices/bsim3soi_dd/b3soiddext.h0000644000175000017500000000245613546075722023612 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung File: b3soiddext.h Modifed by Paolo Nenzi 2002 **********/ extern int B3SOIDDacLoad(GENmodel *,CKTcircuit*); extern int B3SOIDDask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*); extern int B3SOIDDconvTest(GENmodel *,CKTcircuit*); extern int B3SOIDDgetic(GENmodel*,CKTcircuit*); extern int B3SOIDDload(GENmodel*,CKTcircuit*); extern int B3SOIDDmAsk(CKTcircuit*,GENmodel *,int, IFvalue*); extern int B3SOIDDmParam(int,IFvalue*,GENmodel*); extern void B3SOIDDmosCap(CKTcircuit*, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*); extern int B3SOIDDparam(int,IFvalue*,GENinstance*,IFvalue*); extern int B3SOIDDpzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int B3SOIDDsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int B3SOIDDtemp(GENmodel*,CKTcircuit*); extern int B3SOIDDtrunc(GENmodel*,CKTcircuit*,double*); extern int B3SOIDDnoise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int B3SOIDDunsetup(GENmodel*,CKTcircuit*); tmpk8ny_4pz/src/spicelib/devices/bsim3soi_dd/b3soidddef.h0000644000175000017500000017144313546075722023553 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: Weidong Liu and Pin Su Feb 1999 Author: 1998 Samuel Fung Modified by Pin Su, Wei Jin 99/9/27 File: b3soidddef.h Modified by Paolo Nenzi 2002 **********/ #ifndef B3SOIDD #define B3SOIDD #define SOICODE /* #define BULKCODE */ #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" typedef struct sB3SOIDDinstance { struct GENinstance gen; #define B3SOIDDmodPtr(inst) ((struct sB3SOIDDmodel *)((inst)->gen.GENmodPtr)) #define B3SOIDDnextInstance(inst) ((struct sB3SOIDDinstance *)((inst)->gen.GENnextInstance)) #define B3SOIDDname gen.GENname #define B3SOIDDstates gen.GENstate const int B3SOIDDdNode; const int B3SOIDDgNode; const int B3SOIDDsNode; const int B3SOIDDeNode; const int B3SOIDDbNodeExt; const int B3SOIDDtempNodeExt; const int B3SOIDDpNodeExt; int B3SOIDDbNode; int B3SOIDDtempNode; int B3SOIDDpNode; int B3SOIDDdNodePrime; int B3SOIDDsNodePrime; int B3SOIDDvbsNode; /* for Debug */ int B3SOIDDidsNode; int B3SOIDDicNode; int B3SOIDDibsNode; int B3SOIDDibdNode; int B3SOIDDiiiNode; int B3SOIDDigidlNode; int B3SOIDDitunNode; int B3SOIDDibpNode; int B3SOIDDabeffNode; int B3SOIDDvbs0effNode; int B3SOIDDvbseffNode; int B3SOIDDxcNode; int B3SOIDDcbbNode; int B3SOIDDcbdNode; int B3SOIDDcbeNode; int B3SOIDDcbgNode; int B3SOIDDqbNode; int B3SOIDDqbfNode; int B3SOIDDqjsNode; int B3SOIDDqjdNode; /* clean up last */ int B3SOIDDgmNode; int B3SOIDDgmbsNode; int B3SOIDDgdsNode; int B3SOIDDgmeNode; int B3SOIDDqgNode; int B3SOIDDqdNode; int B3SOIDDqeNode; int B3SOIDDiterations; int B3SOIDDvbs0teffNode; int B3SOIDDvthNode; int B3SOIDDvgsteffNode; int B3SOIDDxcsatNode; int B3SOIDDqaccNode; int B3SOIDDqsub0Node; int B3SOIDDqsubs1Node; int B3SOIDDqsubs2Node; int B3SOIDDvcscvNode; int B3SOIDDvdscvNode; int B3SOIDDdum1Node; int B3SOIDDdum2Node; int B3SOIDDdum3Node; int B3SOIDDdum4Node; int B3SOIDDdum5Node; /* end clean up last */ double B3SOIDDphi; double B3SOIDDvtm; double B3SOIDDni; double B3SOIDDueff; double B3SOIDDthetavth; double B3SOIDDvon; double B3SOIDDvbsdio; double B3SOIDDvdsat; double B3SOIDDcgdo; double B3SOIDDcgso; double B3SOIDDcgeo; double B3SOIDDids; double B3SOIDDic; double B3SOIDDibs; double B3SOIDDibd; double B3SOIDDiii; double B3SOIDDigidl; double B3SOIDDitun; double B3SOIDDibp; double B3SOIDDabeff; double B3SOIDDvbs0eff; double B3SOIDDvbseff; double B3SOIDDxc; double B3SOIDDcbg; double B3SOIDDcbb; double B3SOIDDcbd; double B3SOIDDqb; double B3SOIDDqbf; double B3SOIDDqjs; double B3SOIDDqjd; double B3SOIDDminIsub; int B3SOIDDfloat; /* clean up last */ double B3SOIDDdum1; double B3SOIDDdum2; double B3SOIDDdum3; double B3SOIDDdum4; double B3SOIDDdum5; /* end clean up last */ double B3SOIDDl; double B3SOIDDw; double B3SOIDDm; double B3SOIDDdrainArea; double B3SOIDDsourceArea; double B3SOIDDdrainSquares; double B3SOIDDsourceSquares; double B3SOIDDdrainPerimeter; double B3SOIDDsourcePerimeter; double B3SOIDDsourceConductance; double B3SOIDDdrainConductance; double B3SOIDDicVBS; double B3SOIDDicVDS; double B3SOIDDicVGS; double B3SOIDDicVES; double B3SOIDDicVPS; int B3SOIDDbjtoff; int B3SOIDDbodyMod; int B3SOIDDdebugMod; double B3SOIDDrth0; double B3SOIDDcth0; double B3SOIDDbodySquares; double B3SOIDDrbodyext; double B3SOIDDcsbox; double B3SOIDDcdbox; double B3SOIDDcsmin; double B3SOIDDcdmin; double B3SOIDDst4; double B3SOIDDdt4; int B3SOIDDoff; int B3SOIDDmode; /* OP point */ double B3SOIDDqinv; double B3SOIDDcd; double B3SOIDDcjs; double B3SOIDDcjd; double B3SOIDDcbody; double B3SOIDDcbodcon; double B3SOIDDcth; double B3SOIDDcsubstrate; double B3SOIDDgm; double B3SOIDDgme; double B3SOIDDcb; double B3SOIDDcdrain; double B3SOIDDgds; double B3SOIDDgmbs; double B3SOIDDgmT; double B3SOIDDgbbs; double B3SOIDDgbgs; double B3SOIDDgbds; double B3SOIDDgbes; double B3SOIDDgbps; double B3SOIDDgbT; double B3SOIDDgjsd; double B3SOIDDgjsb; double B3SOIDDgjsg; double B3SOIDDgjsT; double B3SOIDDgjdb; double B3SOIDDgjdd; double B3SOIDDgjdg; double B3SOIDDgjde; double B3SOIDDgjdT; double B3SOIDDgbpbs; double B3SOIDDgbpgs; double B3SOIDDgbpds; double B3SOIDDgbpes; double B3SOIDDgbpps; double B3SOIDDgbpT; double B3SOIDDgtempb; double B3SOIDDgtempg; double B3SOIDDgtempd; double B3SOIDDgtempe; double B3SOIDDgtempT; double B3SOIDDcggb; double B3SOIDDcgdb; double B3SOIDDcgsb; double B3SOIDDcgeb; double B3SOIDDcgT; double B3SOIDDcbgb; double B3SOIDDcbdb; double B3SOIDDcbsb; double B3SOIDDcbeb; double B3SOIDDcbT; double B3SOIDDcdgb; double B3SOIDDcddb; double B3SOIDDcdsb; double B3SOIDDcdeb; double B3SOIDDcdT; double B3SOIDDcegb; double B3SOIDDcedb; double B3SOIDDcesb; double B3SOIDDceeb; double B3SOIDDceT; double B3SOIDDqse; double B3SOIDDgcse; double B3SOIDDqde; double B3SOIDDgcde; struct b3soiddSizeDependParam *pParam; unsigned B3SOIDDlGiven :1; unsigned B3SOIDDwGiven :1; unsigned B3SOIDDmGiven :1; unsigned B3SOIDDdrainAreaGiven :1; unsigned B3SOIDDsourceAreaGiven :1; unsigned B3SOIDDdrainSquaresGiven :1; unsigned B3SOIDDsourceSquaresGiven :1; unsigned B3SOIDDdrainPerimeterGiven :1; unsigned B3SOIDDsourcePerimeterGiven :1; unsigned B3SOIDDdNodePrimeSet :1; unsigned B3SOIDDsNodePrimeSet :1; unsigned B3SOIDDicVBSGiven :1; unsigned B3SOIDDicVDSGiven :1; unsigned B3SOIDDicVGSGiven :1; unsigned B3SOIDDicVESGiven :1; unsigned B3SOIDDicVPSGiven :1; unsigned B3SOIDDbjtoffGiven :1; unsigned B3SOIDDdebugModGiven :1; unsigned B3SOIDDrth0Given :1; unsigned B3SOIDDcth0Given :1; unsigned B3SOIDDbodySquaresGiven :1; unsigned B3SOIDDoffGiven :1; double *B3SOIDDEePtr; double *B3SOIDDEbPtr; double *B3SOIDDBePtr; double *B3SOIDDEgPtr; double *B3SOIDDEdpPtr; double *B3SOIDDEspPtr; double *B3SOIDDTemptempPtr; double *B3SOIDDTempdpPtr; double *B3SOIDDTempspPtr; double *B3SOIDDTempgPtr; double *B3SOIDDTempbPtr; double *B3SOIDDTempePtr; double *B3SOIDDGtempPtr; double *B3SOIDDDPtempPtr; double *B3SOIDDSPtempPtr; double *B3SOIDDEtempPtr; double *B3SOIDDBtempPtr; double *B3SOIDDPtempPtr; double *B3SOIDDBpPtr; double *B3SOIDDPbPtr; double *B3SOIDDPpPtr; double *B3SOIDDPgPtr; double *B3SOIDDPdpPtr; double *B3SOIDDPspPtr; double *B3SOIDDPePtr; double *B3SOIDDDPePtr; double *B3SOIDDSPePtr; double *B3SOIDDGePtr; double *B3SOIDDDdPtr; double *B3SOIDDGgPtr; double *B3SOIDDSsPtr; double *B3SOIDDBbPtr; double *B3SOIDDDPdpPtr; double *B3SOIDDSPspPtr; double *B3SOIDDDdpPtr; double *B3SOIDDGbPtr; double *B3SOIDDGdpPtr; double *B3SOIDDGspPtr; double *B3SOIDDSspPtr; double *B3SOIDDBdpPtr; double *B3SOIDDBspPtr; double *B3SOIDDDPspPtr; double *B3SOIDDDPdPtr; double *B3SOIDDBgPtr; double *B3SOIDDDPgPtr; double *B3SOIDDSPgPtr; double *B3SOIDDSPsPtr; double *B3SOIDDDPbPtr; double *B3SOIDDSPbPtr; double *B3SOIDDSPdpPtr; double *B3SOIDDVbsPtr; /* Debug */ double *B3SOIDDIdsPtr; double *B3SOIDDIcPtr; double *B3SOIDDIbsPtr; double *B3SOIDDIbdPtr; double *B3SOIDDIiiPtr; double *B3SOIDDIgidlPtr; double *B3SOIDDItunPtr; double *B3SOIDDIbpPtr; double *B3SOIDDAbeffPtr; double *B3SOIDDVbs0effPtr; double *B3SOIDDVbseffPtr; double *B3SOIDDXcPtr; double *B3SOIDDCbbPtr; double *B3SOIDDCbdPtr; double *B3SOIDDCbgPtr; double *B3SOIDDqbPtr; double *B3SOIDDQbfPtr; double *B3SOIDDQjsPtr; double *B3SOIDDQjdPtr; /* clean up last */ double *B3SOIDDGmPtr; double *B3SOIDDGmbsPtr; double *B3SOIDDGdsPtr; double *B3SOIDDGmePtr; double *B3SOIDDVbs0teffPtr; double *B3SOIDDVthPtr; double *B3SOIDDVgsteffPtr; double *B3SOIDDXcsatPtr; double *B3SOIDDQaccPtr; double *B3SOIDDQsub0Ptr; double *B3SOIDDQsubs1Ptr; double *B3SOIDDQsubs2Ptr; double *B3SOIDDVdscvPtr; double *B3SOIDDVcscvPtr; double *B3SOIDDCbePtr; double *B3SOIDDqgPtr; double *B3SOIDDqdPtr; double *B3SOIDDqePtr; double *B3SOIDDDum1Ptr; double *B3SOIDDDum2Ptr; double *B3SOIDDDum3Ptr; double *B3SOIDDDum4Ptr; double *B3SOIDDDum5Ptr; /* End clean up last */ #define B3SOIDDvbd B3SOIDDstates+ 0 #define B3SOIDDvbs B3SOIDDstates+ 1 #define B3SOIDDvgs B3SOIDDstates+ 2 #define B3SOIDDvds B3SOIDDstates+ 3 #define B3SOIDDves B3SOIDDstates+ 4 #define B3SOIDDvps B3SOIDDstates+ 5 #define B3SOIDDvg B3SOIDDstates+ 6 #define B3SOIDDvd B3SOIDDstates+ 7 #define B3SOIDDvs B3SOIDDstates+ 8 #define B3SOIDDvp B3SOIDDstates+ 9 #define B3SOIDDve B3SOIDDstates+ 10 #define B3SOIDDdeltemp B3SOIDDstates+ 11 #define B3SOIDDqb B3SOIDDstates+ 12 #define B3SOIDDcqb B3SOIDDstates+ 13 #define B3SOIDDqg B3SOIDDstates+ 14 #define B3SOIDDcqg B3SOIDDstates+ 15 #define B3SOIDDqd B3SOIDDstates+ 16 #define B3SOIDDcqd B3SOIDDstates+ 17 #define B3SOIDDqe B3SOIDDstates+ 18 #define B3SOIDDcqe B3SOIDDstates+ 19 #define B3SOIDDqbs B3SOIDDstates+ 20 #define B3SOIDDqbd B3SOIDDstates+ 21 #define B3SOIDDqbe B3SOIDDstates+ 22 #define B3SOIDDqth B3SOIDDstates+ 23 #define B3SOIDDcqth B3SOIDDstates+ 24 #define B3SOIDDnumStates 25 /* indices to the array of B3SOIDD NOISE SOURCES */ #define B3SOIDDRDNOIZ 0 #define B3SOIDDRSNOIZ 1 #define B3SOIDDIDNOIZ 2 #define B3SOIDDFLNOIZ 3 #define B3SOIDDFBNOIZ 4 #define B3SOIDDTOTNOIZ 5 #define B3SOIDDNSRCS 6 /* the number of MOSFET(3) noise sources */ #ifndef NONOISE double B3SOIDDnVar[NSTATVARS][B3SOIDDNSRCS]; #else /* NONOISE */ double **B3SOIDDnVar; #endif /* NONOISE */ } B3SOIDDinstance ; struct b3soiddSizeDependParam { double Width; double Length; double Rth0; double Cth0; double B3SOIDDcdsc; double B3SOIDDcdscb; double B3SOIDDcdscd; double B3SOIDDcit; double B3SOIDDnfactor; double B3SOIDDvsat; double B3SOIDDat; double B3SOIDDa0; double B3SOIDDags; double B3SOIDDa1; double B3SOIDDa2; double B3SOIDDketa; double B3SOIDDnpeak; double B3SOIDDnsub; double B3SOIDDngate; double B3SOIDDgamma1; double B3SOIDDgamma2; double B3SOIDDvbx; double B3SOIDDvbi; double B3SOIDDvbm; double B3SOIDDvbsc; double B3SOIDDxt; double B3SOIDDphi; double B3SOIDDlitl; double B3SOIDDk1; double B3SOIDDkt1; double B3SOIDDkt1l; double B3SOIDDkt2; double B3SOIDDk2; double B3SOIDDk3; double B3SOIDDk3b; double B3SOIDDw0; double B3SOIDDnlx; double B3SOIDDdvt0; double B3SOIDDdvt1; double B3SOIDDdvt2; double B3SOIDDdvt0w; double B3SOIDDdvt1w; double B3SOIDDdvt2w; double B3SOIDDdrout; double B3SOIDDdsub; double B3SOIDDvth0; double B3SOIDDua; double B3SOIDDua1; double B3SOIDDub; double B3SOIDDub1; double B3SOIDDuc; double B3SOIDDuc1; double B3SOIDDu0; double B3SOIDDute; double B3SOIDDvoff; double B3SOIDDvfb; double B3SOIDDuatemp; double B3SOIDDubtemp; double B3SOIDDuctemp; double B3SOIDDrbody; double B3SOIDDrth; double B3SOIDDcth; double B3SOIDDrds0denom; double B3SOIDDvfbb; double B3SOIDDjbjt; double B3SOIDDjdif; double B3SOIDDjrec; double B3SOIDDjtun; double B3SOIDDcsesw; double B3SOIDDcdesw; /* Added */ double B3SOIDDsdt1; double B3SOIDDst2; double B3SOIDDst3; double B3SOIDDdt2; double B3SOIDDdt3; /* Added */ double B3SOIDDdelta; double B3SOIDDrdsw; double B3SOIDDrds0; double B3SOIDDprwg; double B3SOIDDprwb; double B3SOIDDprt; double B3SOIDDeta0; double B3SOIDDetab; double B3SOIDDpclm; double B3SOIDDpdibl1; double B3SOIDDpdibl2; double B3SOIDDpdiblb; double B3SOIDDpvag; double B3SOIDDwr; double B3SOIDDdwg; double B3SOIDDdwb; double B3SOIDDb0; double B3SOIDDb1; double B3SOIDDalpha0; double B3SOIDDalpha1; double B3SOIDDbeta0; /* CV model */ double B3SOIDDcgsl; double B3SOIDDcgdl; double B3SOIDDckappa; double B3SOIDDcf; double B3SOIDDclc; double B3SOIDDcle; /* Added for binning - START0 */ double B3SOIDDvbsa; double B3SOIDDdelp; double B3SOIDDkb1; double B3SOIDDkb3; double B3SOIDDdvbd0; double B3SOIDDdvbd1; double B3SOIDDabp; double B3SOIDDmxc; double B3SOIDDadice0; double B3SOIDDaii; double B3SOIDDbii; double B3SOIDDcii; double B3SOIDDdii; double B3SOIDDagidl; double B3SOIDDbgidl; double B3SOIDDngidl; double B3SOIDDntun; double B3SOIDDndiode; double B3SOIDDisbjt; double B3SOIDDisdif; double B3SOIDDisrec; double B3SOIDDistun; double B3SOIDDedl; double B3SOIDDkbjt1; double B3SOIDDvsdfb; double B3SOIDDvsdth; /* Added for binning - END0 */ /* Pre-calculated constants */ double B3SOIDDdw; double B3SOIDDdl; double B3SOIDDleff; double B3SOIDDweff; double B3SOIDDdwc; double B3SOIDDdlc; double B3SOIDDleffCV; double B3SOIDDweffCV; double B3SOIDDabulkCVfactor; double B3SOIDDcgso; double B3SOIDDcgdo; double B3SOIDDcgeo; double B3SOIDDu0temp; double B3SOIDDvsattemp; double B3SOIDDsqrtPhi; double B3SOIDDphis3; double B3SOIDDXdep0; double B3SOIDDsqrtXdep0; double B3SOIDDtheta0vb0; double B3SOIDDthetaRout; double B3SOIDDcof1; double B3SOIDDcof2; double B3SOIDDcof3; double B3SOIDDcof4; double B3SOIDDcdep0; struct b3soiddSizeDependParam *pNext; }; typedef struct sB3SOIDDmodel { struct GENmodel gen; #define B3SOIDDmodType gen.GENmodType #define B3SOIDDnextModel(inst) ((struct sB3SOIDDmodel *)((inst)->gen.GENnextModel)) #define B3SOIDDinstances(inst) ((B3SOIDDinstance *)((inst)->gen.GENinstances)) #define B3SOIDDmodName gen.GENmodName int B3SOIDDtype; int B3SOIDDmobMod; int B3SOIDDcapMod; int B3SOIDDnoiMod; int B3SOIDDshMod; int B3SOIDDbinUnit; int B3SOIDDparamChk; double B3SOIDDversion; double B3SOIDDtox; double B3SOIDDcdsc; double B3SOIDDcdscb; double B3SOIDDcdscd; double B3SOIDDcit; double B3SOIDDnfactor; double B3SOIDDvsat; double B3SOIDDat; double B3SOIDDa0; double B3SOIDDags; double B3SOIDDa1; double B3SOIDDa2; double B3SOIDDketa; double B3SOIDDnsub; double B3SOIDDnpeak; double B3SOIDDngate; double B3SOIDDgamma1; double B3SOIDDgamma2; double B3SOIDDvbx; double B3SOIDDvbm; double B3SOIDDxt; double B3SOIDDk1; double B3SOIDDkt1; double B3SOIDDkt1l; double B3SOIDDkt2; double B3SOIDDk2; double B3SOIDDk3; double B3SOIDDk3b; double B3SOIDDw0; double B3SOIDDnlx; double B3SOIDDdvt0; double B3SOIDDdvt1; double B3SOIDDdvt2; double B3SOIDDdvt0w; double B3SOIDDdvt1w; double B3SOIDDdvt2w; double B3SOIDDdrout; double B3SOIDDdsub; double B3SOIDDvth0; double B3SOIDDua; double B3SOIDDua1; double B3SOIDDub; double B3SOIDDub1; double B3SOIDDuc; double B3SOIDDuc1; double B3SOIDDu0; double B3SOIDDute; double B3SOIDDvoff; double B3SOIDDdelta; double B3SOIDDrdsw; double B3SOIDDprwg; double B3SOIDDprwb; double B3SOIDDprt; double B3SOIDDeta0; double B3SOIDDetab; double B3SOIDDpclm; double B3SOIDDpdibl1; double B3SOIDDpdibl2; double B3SOIDDpdiblb; double B3SOIDDpvag; double B3SOIDDwr; double B3SOIDDdwg; double B3SOIDDdwb; double B3SOIDDb0; double B3SOIDDb1; double B3SOIDDalpha0; double B3SOIDDalpha1; double B3SOIDDbeta0; double B3SOIDDtbox; double B3SOIDDtsi; double B3SOIDDxj; double B3SOIDDkb1; double B3SOIDDkb3; double B3SOIDDdvbd0; double B3SOIDDdvbd1; double B3SOIDDvbsa; double B3SOIDDdelp; double B3SOIDDrbody; double B3SOIDDrbsh; double B3SOIDDadice0; double B3SOIDDabp; double B3SOIDDmxc; double B3SOIDDrth0; double B3SOIDDcth0; double B3SOIDDaii; double B3SOIDDbii; double B3SOIDDcii; double B3SOIDDdii; double B3SOIDDngidl; double B3SOIDDagidl; double B3SOIDDbgidl; double B3SOIDDndiode; double B3SOIDDntun; double B3SOIDDisbjt; double B3SOIDDisdif; double B3SOIDDisrec; double B3SOIDDistun; double B3SOIDDxbjt; double B3SOIDDxdif; double B3SOIDDxrec; double B3SOIDDxtun; double B3SOIDDedl; double B3SOIDDkbjt1; double B3SOIDDtt; double B3SOIDDvsdfb; double B3SOIDDvsdth; double B3SOIDDcsdmin; double B3SOIDDasd; /* CV model */ double B3SOIDDcgsl; double B3SOIDDcgdl; double B3SOIDDckappa; double B3SOIDDcf; double B3SOIDDclc; double B3SOIDDcle; double B3SOIDDdwc; double B3SOIDDdlc; double B3SOIDDtnom; double B3SOIDDcgso; double B3SOIDDcgdo; double B3SOIDDcgeo; double B3SOIDDxpart; double B3SOIDDcFringOut; double B3SOIDDcFringMax; double B3SOIDDsheetResistance; double B3SOIDDbodyJctGateSideGradingCoeff; double B3SOIDDGatesidewallJctPotential; double B3SOIDDunitLengthGateSidewallJctCap; double B3SOIDDcsdesw; double B3SOIDDLint; double B3SOIDDLl; double B3SOIDDLln; double B3SOIDDLw; double B3SOIDDLwn; double B3SOIDDLwl; double B3SOIDDLmin; double B3SOIDDLmax; double B3SOIDDWint; double B3SOIDDWl; double B3SOIDDWln; double B3SOIDDWw; double B3SOIDDWwn; double B3SOIDDWwl; double B3SOIDDWmin; double B3SOIDDWmax; /* Added for binning - START1 */ /* Length Dependence */ double B3SOIDDlnpeak; double B3SOIDDlnsub; double B3SOIDDlngate; double B3SOIDDlvth0; double B3SOIDDlk1; double B3SOIDDlk2; double B3SOIDDlk3; double B3SOIDDlk3b; double B3SOIDDlvbsa; double B3SOIDDldelp; double B3SOIDDlkb1; double B3SOIDDlkb3; double B3SOIDDldvbd0; double B3SOIDDldvbd1; double B3SOIDDlw0; double B3SOIDDlnlx; double B3SOIDDldvt0; double B3SOIDDldvt1; double B3SOIDDldvt2; double B3SOIDDldvt0w; double B3SOIDDldvt1w; double B3SOIDDldvt2w; double B3SOIDDlu0; double B3SOIDDlua; double B3SOIDDlub; double B3SOIDDluc; double B3SOIDDlvsat; double B3SOIDDla0; double B3SOIDDlags; double B3SOIDDlb0; double B3SOIDDlb1; double B3SOIDDlketa; double B3SOIDDlabp; double B3SOIDDlmxc; double B3SOIDDladice0; double B3SOIDDla1; double B3SOIDDla2; double B3SOIDDlrdsw; double B3SOIDDlprwb; double B3SOIDDlprwg; double B3SOIDDlwr; double B3SOIDDlnfactor; double B3SOIDDldwg; double B3SOIDDldwb; double B3SOIDDlvoff; double B3SOIDDleta0; double B3SOIDDletab; double B3SOIDDldsub; double B3SOIDDlcit; double B3SOIDDlcdsc; double B3SOIDDlcdscb; double B3SOIDDlcdscd; double B3SOIDDlpclm; double B3SOIDDlpdibl1; double B3SOIDDlpdibl2; double B3SOIDDlpdiblb; double B3SOIDDldrout; double B3SOIDDlpvag; double B3SOIDDldelta; double B3SOIDDlaii; double B3SOIDDlbii; double B3SOIDDlcii; double B3SOIDDldii; double B3SOIDDlalpha0; double B3SOIDDlalpha1; double B3SOIDDlbeta0; double B3SOIDDlagidl; double B3SOIDDlbgidl; double B3SOIDDlngidl; double B3SOIDDlntun; double B3SOIDDlndiode; double B3SOIDDlisbjt; double B3SOIDDlisdif; double B3SOIDDlisrec; double B3SOIDDlistun; double B3SOIDDledl; double B3SOIDDlkbjt1; /* CV model */ double B3SOIDDlvsdfb; double B3SOIDDlvsdth; /* Width Dependence */ double B3SOIDDwnpeak; double B3SOIDDwnsub; double B3SOIDDwngate; double B3SOIDDwvth0; double B3SOIDDwk1; double B3SOIDDwk2; double B3SOIDDwk3; double B3SOIDDwk3b; double B3SOIDDwvbsa; double B3SOIDDwdelp; double B3SOIDDwkb1; double B3SOIDDwkb3; double B3SOIDDwdvbd0; double B3SOIDDwdvbd1; double B3SOIDDww0; double B3SOIDDwnlx; double B3SOIDDwdvt0; double B3SOIDDwdvt1; double B3SOIDDwdvt2; double B3SOIDDwdvt0w; double B3SOIDDwdvt1w; double B3SOIDDwdvt2w; double B3SOIDDwu0; double B3SOIDDwua; double B3SOIDDwub; double B3SOIDDwuc; double B3SOIDDwvsat; double B3SOIDDwa0; double B3SOIDDwags; double B3SOIDDwb0; double B3SOIDDwb1; double B3SOIDDwketa; double B3SOIDDwabp; double B3SOIDDwmxc; double B3SOIDDwadice0; double B3SOIDDwa1; double B3SOIDDwa2; double B3SOIDDwrdsw; double B3SOIDDwprwb; double B3SOIDDwprwg; double B3SOIDDwwr; double B3SOIDDwnfactor; double B3SOIDDwdwg; double B3SOIDDwdwb; double B3SOIDDwvoff; double B3SOIDDweta0; double B3SOIDDwetab; double B3SOIDDwdsub; double B3SOIDDwcit; double B3SOIDDwcdsc; double B3SOIDDwcdscb; double B3SOIDDwcdscd; double B3SOIDDwpclm; double B3SOIDDwpdibl1; double B3SOIDDwpdibl2; double B3SOIDDwpdiblb; double B3SOIDDwdrout; double B3SOIDDwpvag; double B3SOIDDwdelta; double B3SOIDDwaii; double B3SOIDDwbii; double B3SOIDDwcii; double B3SOIDDwdii; double B3SOIDDwalpha0; double B3SOIDDwalpha1; double B3SOIDDwbeta0; double B3SOIDDwagidl; double B3SOIDDwbgidl; double B3SOIDDwngidl; double B3SOIDDwntun; double B3SOIDDwndiode; double B3SOIDDwisbjt; double B3SOIDDwisdif; double B3SOIDDwisrec; double B3SOIDDwistun; double B3SOIDDwedl; double B3SOIDDwkbjt1; /* CV model */ double B3SOIDDwvsdfb; double B3SOIDDwvsdth; /* Cross-term Dependence */ double B3SOIDDpnpeak; double B3SOIDDpnsub; double B3SOIDDpngate; double B3SOIDDpvth0; double B3SOIDDpk1; double B3SOIDDpk2; double B3SOIDDpk3; double B3SOIDDpk3b; double B3SOIDDpvbsa; double B3SOIDDpdelp; double B3SOIDDpkb1; double B3SOIDDpkb3; double B3SOIDDpdvbd0; double B3SOIDDpdvbd1; double B3SOIDDpw0; double B3SOIDDpnlx; double B3SOIDDpdvt0; double B3SOIDDpdvt1; double B3SOIDDpdvt2; double B3SOIDDpdvt0w; double B3SOIDDpdvt1w; double B3SOIDDpdvt2w; double B3SOIDDpu0; double B3SOIDDpua; double B3SOIDDpub; double B3SOIDDpuc; double B3SOIDDpvsat; double B3SOIDDpa0; double B3SOIDDpags; double B3SOIDDpb0; double B3SOIDDpb1; double B3SOIDDpketa; double B3SOIDDpabp; double B3SOIDDpmxc; double B3SOIDDpadice0; double B3SOIDDpa1; double B3SOIDDpa2; double B3SOIDDprdsw; double B3SOIDDpprwb; double B3SOIDDpprwg; double B3SOIDDpwr; double B3SOIDDpnfactor; double B3SOIDDpdwg; double B3SOIDDpdwb; double B3SOIDDpvoff; double B3SOIDDpeta0; double B3SOIDDpetab; double B3SOIDDpdsub; double B3SOIDDpcit; double B3SOIDDpcdsc; double B3SOIDDpcdscb; double B3SOIDDpcdscd; double B3SOIDDppclm; double B3SOIDDppdibl1; double B3SOIDDppdibl2; double B3SOIDDppdiblb; double B3SOIDDpdrout; double B3SOIDDppvag; double B3SOIDDpdelta; double B3SOIDDpaii; double B3SOIDDpbii; double B3SOIDDpcii; double B3SOIDDpdii; double B3SOIDDpalpha0; double B3SOIDDpalpha1; double B3SOIDDpbeta0; double B3SOIDDpagidl; double B3SOIDDpbgidl; double B3SOIDDpngidl; double B3SOIDDpntun; double B3SOIDDpndiode; double B3SOIDDpisbjt; double B3SOIDDpisdif; double B3SOIDDpisrec; double B3SOIDDpistun; double B3SOIDDpedl; double B3SOIDDpkbjt1; /* CV model */ double B3SOIDDpvsdfb; double B3SOIDDpvsdth; /* Added for binning - END1 */ /* Pre-calculated constants */ double B3SOIDDcbox; double B3SOIDDcsi; double B3SOIDDcsieff; double B3SOIDDcoxt; double B3SOIDDcboxt; double B3SOIDDcsit; double B3SOIDDnfb; double B3SOIDDadice; double B3SOIDDqsi; double B3SOIDDqsieff; double B3SOIDDeg0; /* MCJ: move to size-dependent param. */ double B3SOIDDvtm; double B3SOIDDcox; double B3SOIDDcof1; double B3SOIDDcof2; double B3SOIDDcof3; double B3SOIDDcof4; double B3SOIDDvcrit; double B3SOIDDfactor1; double B3SOIDDoxideTrapDensityA; double B3SOIDDoxideTrapDensityB; double B3SOIDDoxideTrapDensityC; double B3SOIDDem; double B3SOIDDef; double B3SOIDDaf; double B3SOIDDkf; double B3SOIDDnoif; struct b3soiddSizeDependParam *pSizeDependParamKnot; /* Flags */ unsigned B3SOIDDtboxGiven:1; unsigned B3SOIDDtsiGiven :1; unsigned B3SOIDDxjGiven :1; unsigned B3SOIDDkb1Given :1; unsigned B3SOIDDkb3Given :1; unsigned B3SOIDDdvbd0Given :1; unsigned B3SOIDDdvbd1Given :1; unsigned B3SOIDDvbsaGiven :1; unsigned B3SOIDDdelpGiven :1; unsigned B3SOIDDrbodyGiven :1; unsigned B3SOIDDrbshGiven :1; unsigned B3SOIDDadice0Given :1; unsigned B3SOIDDabpGiven :1; unsigned B3SOIDDmxcGiven :1; unsigned B3SOIDDrth0Given :1; unsigned B3SOIDDcth0Given :1; unsigned B3SOIDDaiiGiven :1; unsigned B3SOIDDbiiGiven :1; unsigned B3SOIDDciiGiven :1; unsigned B3SOIDDdiiGiven :1; unsigned B3SOIDDngidlGiven :1; unsigned B3SOIDDagidlGiven :1; unsigned B3SOIDDbgidlGiven :1; unsigned B3SOIDDndiodeGiven :1; unsigned B3SOIDDntunGiven :1; unsigned B3SOIDDisbjtGiven :1; unsigned B3SOIDDisdifGiven :1; unsigned B3SOIDDisrecGiven :1; unsigned B3SOIDDistunGiven :1; unsigned B3SOIDDxbjtGiven :1; unsigned B3SOIDDxdifGiven :1; unsigned B3SOIDDxrecGiven :1; unsigned B3SOIDDxtunGiven :1; unsigned B3SOIDDedlGiven :1; unsigned B3SOIDDkbjt1Given :1; unsigned B3SOIDDttGiven :1; unsigned B3SOIDDvsdfbGiven :1; unsigned B3SOIDDvsdthGiven :1; unsigned B3SOIDDasdGiven :1; unsigned B3SOIDDcsdminGiven :1; unsigned B3SOIDDmobModGiven :1; unsigned B3SOIDDbinUnitGiven :1; unsigned B3SOIDDcapModGiven :1; unsigned B3SOIDDparamChkGiven :1; unsigned B3SOIDDnoiModGiven :1; unsigned B3SOIDDshModGiven :1; unsigned B3SOIDDtypeGiven :1; unsigned B3SOIDDtoxGiven :1; unsigned B3SOIDDversionGiven :1; unsigned B3SOIDDcdscGiven :1; unsigned B3SOIDDcdscbGiven :1; unsigned B3SOIDDcdscdGiven :1; unsigned B3SOIDDcitGiven :1; unsigned B3SOIDDnfactorGiven :1; unsigned B3SOIDDvsatGiven :1; unsigned B3SOIDDatGiven :1; unsigned B3SOIDDa0Given :1; unsigned B3SOIDDagsGiven :1; unsigned B3SOIDDa1Given :1; unsigned B3SOIDDa2Given :1; unsigned B3SOIDDketaGiven :1; unsigned B3SOIDDnsubGiven :1; unsigned B3SOIDDnpeakGiven :1; unsigned B3SOIDDngateGiven :1; unsigned B3SOIDDgamma1Given :1; unsigned B3SOIDDgamma2Given :1; unsigned B3SOIDDvbxGiven :1; unsigned B3SOIDDvbmGiven :1; unsigned B3SOIDDxtGiven :1; unsigned B3SOIDDk1Given :1; unsigned B3SOIDDkt1Given :1; unsigned B3SOIDDkt1lGiven :1; unsigned B3SOIDDkt2Given :1; unsigned B3SOIDDk2Given :1; unsigned B3SOIDDk3Given :1; unsigned B3SOIDDk3bGiven :1; unsigned B3SOIDDw0Given :1; unsigned B3SOIDDnlxGiven :1; unsigned B3SOIDDdvt0Given :1; unsigned B3SOIDDdvt1Given :1; unsigned B3SOIDDdvt2Given :1; unsigned B3SOIDDdvt0wGiven :1; unsigned B3SOIDDdvt1wGiven :1; unsigned B3SOIDDdvt2wGiven :1; unsigned B3SOIDDdroutGiven :1; unsigned B3SOIDDdsubGiven :1; unsigned B3SOIDDvth0Given :1; unsigned B3SOIDDuaGiven :1; unsigned B3SOIDDua1Given :1; unsigned B3SOIDDubGiven :1; unsigned B3SOIDDub1Given :1; unsigned B3SOIDDucGiven :1; unsigned B3SOIDDuc1Given :1; unsigned B3SOIDDu0Given :1; unsigned B3SOIDDuteGiven :1; unsigned B3SOIDDvoffGiven :1; unsigned B3SOIDDrdswGiven :1; unsigned B3SOIDDprwgGiven :1; unsigned B3SOIDDprwbGiven :1; unsigned B3SOIDDprtGiven :1; unsigned B3SOIDDeta0Given :1; unsigned B3SOIDDetabGiven :1; unsigned B3SOIDDpclmGiven :1; unsigned B3SOIDDpdibl1Given :1; unsigned B3SOIDDpdibl2Given :1; unsigned B3SOIDDpdiblbGiven :1; unsigned B3SOIDDpvagGiven :1; unsigned B3SOIDDdeltaGiven :1; unsigned B3SOIDDwrGiven :1; unsigned B3SOIDDdwgGiven :1; unsigned B3SOIDDdwbGiven :1; unsigned B3SOIDDb0Given :1; unsigned B3SOIDDb1Given :1; unsigned B3SOIDDalpha0Given :1; unsigned B3SOIDDalpha1Given :1; unsigned B3SOIDDbeta0Given :1; /* CV model */ unsigned B3SOIDDcgslGiven :1; unsigned B3SOIDDcgdlGiven :1; unsigned B3SOIDDckappaGiven :1; unsigned B3SOIDDcfGiven :1; unsigned B3SOIDDclcGiven :1; unsigned B3SOIDDcleGiven :1; unsigned B3SOIDDdwcGiven :1; unsigned B3SOIDDdlcGiven :1; /* Added for binning - START2 */ /* Length Dependence */ unsigned B3SOIDDlnpeakGiven :1; unsigned B3SOIDDlnsubGiven :1; unsigned B3SOIDDlngateGiven :1; unsigned B3SOIDDlvth0Given :1; unsigned B3SOIDDlk1Given :1; unsigned B3SOIDDlk2Given :1; unsigned B3SOIDDlk3Given :1; unsigned B3SOIDDlk3bGiven :1; unsigned B3SOIDDlvbsaGiven :1; unsigned B3SOIDDldelpGiven :1; unsigned B3SOIDDlkb1Given :1; unsigned B3SOIDDlkb3Given :1; unsigned B3SOIDDldvbd0Given :1; unsigned B3SOIDDldvbd1Given :1; unsigned B3SOIDDlw0Given :1; unsigned B3SOIDDlnlxGiven :1; unsigned B3SOIDDldvt0Given :1; unsigned B3SOIDDldvt1Given :1; unsigned B3SOIDDldvt2Given :1; unsigned B3SOIDDldvt0wGiven :1; unsigned B3SOIDDldvt1wGiven :1; unsigned B3SOIDDldvt2wGiven :1; unsigned B3SOIDDlu0Given :1; unsigned B3SOIDDluaGiven :1; unsigned B3SOIDDlubGiven :1; unsigned B3SOIDDlucGiven :1; unsigned B3SOIDDlvsatGiven :1; unsigned B3SOIDDla0Given :1; unsigned B3SOIDDlagsGiven :1; unsigned B3SOIDDlb0Given :1; unsigned B3SOIDDlb1Given :1; unsigned B3SOIDDlketaGiven :1; unsigned B3SOIDDlabpGiven :1; unsigned B3SOIDDlmxcGiven :1; unsigned B3SOIDDladice0Given :1; unsigned B3SOIDDla1Given :1; unsigned B3SOIDDla2Given :1; unsigned B3SOIDDlrdswGiven :1; unsigned B3SOIDDlprwbGiven :1; unsigned B3SOIDDlprwgGiven :1; unsigned B3SOIDDlwrGiven :1; unsigned B3SOIDDlnfactorGiven :1; unsigned B3SOIDDldwgGiven :1; unsigned B3SOIDDldwbGiven :1; unsigned B3SOIDDlvoffGiven :1; unsigned B3SOIDDleta0Given :1; unsigned B3SOIDDletabGiven :1; unsigned B3SOIDDldsubGiven :1; unsigned B3SOIDDlcitGiven :1; unsigned B3SOIDDlcdscGiven :1; unsigned B3SOIDDlcdscbGiven :1; unsigned B3SOIDDlcdscdGiven :1; unsigned B3SOIDDlpclmGiven :1; unsigned B3SOIDDlpdibl1Given :1; unsigned B3SOIDDlpdibl2Given :1; unsigned B3SOIDDlpdiblbGiven :1; unsigned B3SOIDDldroutGiven :1; unsigned B3SOIDDlpvagGiven :1; unsigned B3SOIDDldeltaGiven :1; unsigned B3SOIDDlaiiGiven :1; unsigned B3SOIDDlbiiGiven :1; unsigned B3SOIDDlciiGiven :1; unsigned B3SOIDDldiiGiven :1; unsigned B3SOIDDlalpha0Given :1; unsigned B3SOIDDlalpha1Given :1; unsigned B3SOIDDlbeta0Given :1; unsigned B3SOIDDlagidlGiven :1; unsigned B3SOIDDlbgidlGiven :1; unsigned B3SOIDDlngidlGiven :1; unsigned B3SOIDDlntunGiven :1; unsigned B3SOIDDlndiodeGiven :1; unsigned B3SOIDDlisbjtGiven :1; unsigned B3SOIDDlisdifGiven :1; unsigned B3SOIDDlisrecGiven :1; unsigned B3SOIDDlistunGiven :1; unsigned B3SOIDDledlGiven :1; unsigned B3SOIDDlkbjt1Given :1; /* CV model */ unsigned B3SOIDDlvsdfbGiven :1; unsigned B3SOIDDlvsdthGiven :1; /* Width Dependence */ unsigned B3SOIDDwnpeakGiven :1; unsigned B3SOIDDwnsubGiven :1; unsigned B3SOIDDwngateGiven :1; unsigned B3SOIDDwvth0Given :1; unsigned B3SOIDDwk1Given :1; unsigned B3SOIDDwk2Given :1; unsigned B3SOIDDwk3Given :1; unsigned B3SOIDDwk3bGiven :1; unsigned B3SOIDDwvbsaGiven :1; unsigned B3SOIDDwdelpGiven :1; unsigned B3SOIDDwkb1Given :1; unsigned B3SOIDDwkb3Given :1; unsigned B3SOIDDwdvbd0Given :1; unsigned B3SOIDDwdvbd1Given :1; unsigned B3SOIDDww0Given :1; unsigned B3SOIDDwnlxGiven :1; unsigned B3SOIDDwdvt0Given :1; unsigned B3SOIDDwdvt1Given :1; unsigned B3SOIDDwdvt2Given :1; unsigned B3SOIDDwdvt0wGiven :1; unsigned B3SOIDDwdvt1wGiven :1; unsigned B3SOIDDwdvt2wGiven :1; unsigned B3SOIDDwu0Given :1; unsigned B3SOIDDwuaGiven :1; unsigned B3SOIDDwubGiven :1; unsigned B3SOIDDwucGiven :1; unsigned B3SOIDDwvsatGiven :1; unsigned B3SOIDDwa0Given :1; unsigned B3SOIDDwagsGiven :1; unsigned B3SOIDDwb0Given :1; unsigned B3SOIDDwb1Given :1; unsigned B3SOIDDwketaGiven :1; unsigned B3SOIDDwabpGiven :1; unsigned B3SOIDDwmxcGiven :1; unsigned B3SOIDDwadice0Given :1; unsigned B3SOIDDwa1Given :1; unsigned B3SOIDDwa2Given :1; unsigned B3SOIDDwrdswGiven :1; unsigned B3SOIDDwprwbGiven :1; unsigned B3SOIDDwprwgGiven :1; unsigned B3SOIDDwwrGiven :1; unsigned B3SOIDDwnfactorGiven :1; unsigned B3SOIDDwdwgGiven :1; unsigned B3SOIDDwdwbGiven :1; unsigned B3SOIDDwvoffGiven :1; unsigned B3SOIDDweta0Given :1; unsigned B3SOIDDwetabGiven :1; unsigned B3SOIDDwdsubGiven :1; unsigned B3SOIDDwcitGiven :1; unsigned B3SOIDDwcdscGiven :1; unsigned B3SOIDDwcdscbGiven :1; unsigned B3SOIDDwcdscdGiven :1; unsigned B3SOIDDwpclmGiven :1; unsigned B3SOIDDwpdibl1Given :1; unsigned B3SOIDDwpdibl2Given :1; unsigned B3SOIDDwpdiblbGiven :1; unsigned B3SOIDDwdroutGiven :1; unsigned B3SOIDDwpvagGiven :1; unsigned B3SOIDDwdeltaGiven :1; unsigned B3SOIDDwaiiGiven :1; unsigned B3SOIDDwbiiGiven :1; unsigned B3SOIDDwciiGiven :1; unsigned B3SOIDDwdiiGiven :1; unsigned B3SOIDDwalpha0Given :1; unsigned B3SOIDDwalpha1Given :1; unsigned B3SOIDDwbeta0Given :1; unsigned B3SOIDDwagidlGiven :1; unsigned B3SOIDDwbgidlGiven :1; unsigned B3SOIDDwngidlGiven :1; unsigned B3SOIDDwntunGiven :1; unsigned B3SOIDDwndiodeGiven :1; unsigned B3SOIDDwisbjtGiven :1; unsigned B3SOIDDwisdifGiven :1; unsigned B3SOIDDwisrecGiven :1; unsigned B3SOIDDwistunGiven :1; unsigned B3SOIDDwedlGiven :1; unsigned B3SOIDDwkbjt1Given :1; /* CV model */ unsigned B3SOIDDwvsdfbGiven :1; unsigned B3SOIDDwvsdthGiven :1; /* Cross-term Dependence */ unsigned B3SOIDDpnpeakGiven :1; unsigned B3SOIDDpnsubGiven :1; unsigned B3SOIDDpngateGiven :1; unsigned B3SOIDDpvth0Given :1; unsigned B3SOIDDpk1Given :1; unsigned B3SOIDDpk2Given :1; unsigned B3SOIDDpk3Given :1; unsigned B3SOIDDpk3bGiven :1; unsigned B3SOIDDpvbsaGiven :1; unsigned B3SOIDDpdelpGiven :1; unsigned B3SOIDDpkb1Given :1; unsigned B3SOIDDpkb3Given :1; unsigned B3SOIDDpdvbd0Given :1; unsigned B3SOIDDpdvbd1Given :1; unsigned B3SOIDDpw0Given :1; unsigned B3SOIDDpnlxGiven :1; unsigned B3SOIDDpdvt0Given :1; unsigned B3SOIDDpdvt1Given :1; unsigned B3SOIDDpdvt2Given :1; unsigned B3SOIDDpdvt0wGiven :1; unsigned B3SOIDDpdvt1wGiven :1; unsigned B3SOIDDpdvt2wGiven :1; unsigned B3SOIDDpu0Given :1; unsigned B3SOIDDpuaGiven :1; unsigned B3SOIDDpubGiven :1; unsigned B3SOIDDpucGiven :1; unsigned B3SOIDDpvsatGiven :1; unsigned B3SOIDDpa0Given :1; unsigned B3SOIDDpagsGiven :1; unsigned B3SOIDDpb0Given :1; unsigned B3SOIDDpb1Given :1; unsigned B3SOIDDpketaGiven :1; unsigned B3SOIDDpabpGiven :1; unsigned B3SOIDDpmxcGiven :1; unsigned B3SOIDDpadice0Given :1; unsigned B3SOIDDpa1Given :1; unsigned B3SOIDDpa2Given :1; unsigned B3SOIDDprdswGiven :1; unsigned B3SOIDDpprwbGiven :1; unsigned B3SOIDDpprwgGiven :1; unsigned B3SOIDDpwrGiven :1; unsigned B3SOIDDpnfactorGiven :1; unsigned B3SOIDDpdwgGiven :1; unsigned B3SOIDDpdwbGiven :1; unsigned B3SOIDDpvoffGiven :1; unsigned B3SOIDDpeta0Given :1; unsigned B3SOIDDpetabGiven :1; unsigned B3SOIDDpdsubGiven :1; unsigned B3SOIDDpcitGiven :1; unsigned B3SOIDDpcdscGiven :1; unsigned B3SOIDDpcdscbGiven :1; unsigned B3SOIDDpcdscdGiven :1; unsigned B3SOIDDppclmGiven :1; unsigned B3SOIDDppdibl1Given :1; unsigned B3SOIDDppdibl2Given :1; unsigned B3SOIDDppdiblbGiven :1; unsigned B3SOIDDpdroutGiven :1; unsigned B3SOIDDppvagGiven :1; unsigned B3SOIDDpdeltaGiven :1; unsigned B3SOIDDpaiiGiven :1; unsigned B3SOIDDpbiiGiven :1; unsigned B3SOIDDpciiGiven :1; unsigned B3SOIDDpdiiGiven :1; unsigned B3SOIDDpalpha0Given :1; unsigned B3SOIDDpalpha1Given :1; unsigned B3SOIDDpbeta0Given :1; unsigned B3SOIDDpagidlGiven :1; unsigned B3SOIDDpbgidlGiven :1; unsigned B3SOIDDpngidlGiven :1; unsigned B3SOIDDpntunGiven :1; unsigned B3SOIDDpndiodeGiven :1; unsigned B3SOIDDpisbjtGiven :1; unsigned B3SOIDDpisdifGiven :1; unsigned B3SOIDDpisrecGiven :1; unsigned B3SOIDDpistunGiven :1; unsigned B3SOIDDpedlGiven :1; unsigned B3SOIDDpkbjt1Given :1; /* CV model */ unsigned B3SOIDDpvsdfbGiven :1; unsigned B3SOIDDpvsdthGiven :1; /* Added for binning - END2 */ unsigned B3SOIDDuseFringeGiven :1; unsigned B3SOIDDtnomGiven :1; unsigned B3SOIDDcgsoGiven :1; unsigned B3SOIDDcgdoGiven :1; unsigned B3SOIDDcgeoGiven :1; unsigned B3SOIDDxpartGiven :1; unsigned B3SOIDDsheetResistanceGiven :1; unsigned B3SOIDDGatesidewallJctPotentialGiven :1; unsigned B3SOIDDbodyJctGateSideGradingCoeffGiven :1; unsigned B3SOIDDunitLengthGateSidewallJctCapGiven :1; unsigned B3SOIDDcsdeswGiven :1; unsigned B3SOIDDoxideTrapDensityAGiven :1; unsigned B3SOIDDoxideTrapDensityBGiven :1; unsigned B3SOIDDoxideTrapDensityCGiven :1; unsigned B3SOIDDemGiven :1; unsigned B3SOIDDefGiven :1; unsigned B3SOIDDafGiven :1; unsigned B3SOIDDkfGiven :1; unsigned B3SOIDDnoifGiven :1; unsigned B3SOIDDLintGiven :1; unsigned B3SOIDDLlGiven :1; unsigned B3SOIDDLlnGiven :1; unsigned B3SOIDDLwGiven :1; unsigned B3SOIDDLwnGiven :1; unsigned B3SOIDDLwlGiven :1; unsigned B3SOIDDLminGiven :1; unsigned B3SOIDDLmaxGiven :1; unsigned B3SOIDDWintGiven :1; unsigned B3SOIDDWlGiven :1; unsigned B3SOIDDWlnGiven :1; unsigned B3SOIDDWwGiven :1; unsigned B3SOIDDWwnGiven :1; unsigned B3SOIDDWwlGiven :1; unsigned B3SOIDDWminGiven :1; unsigned B3SOIDDWmaxGiven :1; } B3SOIDDmodel; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ /* device parameters */ #define B3SOIDD_W 1 #define B3SOIDD_L 2 #define B3SOIDD_M 22 #define B3SOIDD_AS 3 #define B3SOIDD_AD 4 #define B3SOIDD_PS 5 #define B3SOIDD_PD 6 #define B3SOIDD_NRS 7 #define B3SOIDD_NRD 8 #define B3SOIDD_OFF 9 #define B3SOIDD_IC_VBS 10 #define B3SOIDD_IC_VDS 11 #define B3SOIDD_IC_VGS 12 #define B3SOIDD_IC_VES 13 #define B3SOIDD_IC_VPS 14 #define B3SOIDD_BJTOFF 15 #define B3SOIDD_RTH0 16 #define B3SOIDD_CTH0 17 #define B3SOIDD_NRB 18 #define B3SOIDD_IC 19 #define B3SOIDD_NQSMOD 20 #define B3SOIDD_DEBUG 21 /* model parameters */ #define B3SOIDD_MOD_CAPMOD 101 #define B3SOIDD_MOD_NQSMOD 102 #define B3SOIDD_MOD_MOBMOD 103 #define B3SOIDD_MOD_NOIMOD 104 #define B3SOIDD_MOD_SHMOD 105 #define B3SOIDD_MOD_DDMOD 106 #define B3SOIDD_MOD_TOX 107 #define B3SOIDD_MOD_CDSC 108 #define B3SOIDD_MOD_CDSCB 109 #define B3SOIDD_MOD_CIT 110 #define B3SOIDD_MOD_NFACTOR 111 #define B3SOIDD_MOD_XJ 112 #define B3SOIDD_MOD_VSAT 113 #define B3SOIDD_MOD_AT 114 #define B3SOIDD_MOD_A0 115 #define B3SOIDD_MOD_A1 116 #define B3SOIDD_MOD_A2 117 #define B3SOIDD_MOD_KETA 118 #define B3SOIDD_MOD_NSUB 119 #define B3SOIDD_MOD_NPEAK 120 #define B3SOIDD_MOD_NGATE 121 #define B3SOIDD_MOD_GAMMA1 122 #define B3SOIDD_MOD_GAMMA2 123 #define B3SOIDD_MOD_VBX 124 #define B3SOIDD_MOD_BINUNIT 125 #define B3SOIDD_MOD_VBM 126 #define B3SOIDD_MOD_XT 127 #define B3SOIDD_MOD_K1 129 #define B3SOIDD_MOD_KT1 130 #define B3SOIDD_MOD_KT1L 131 #define B3SOIDD_MOD_K2 132 #define B3SOIDD_MOD_KT2 133 #define B3SOIDD_MOD_K3 134 #define B3SOIDD_MOD_K3B 135 #define B3SOIDD_MOD_W0 136 #define B3SOIDD_MOD_NLX 137 #define B3SOIDD_MOD_DVT0 138 #define B3SOIDD_MOD_DVT1 139 #define B3SOIDD_MOD_DVT2 140 #define B3SOIDD_MOD_DVT0W 141 #define B3SOIDD_MOD_DVT1W 142 #define B3SOIDD_MOD_DVT2W 143 #define B3SOIDD_MOD_DROUT 144 #define B3SOIDD_MOD_DSUB 145 #define B3SOIDD_MOD_VTH0 146 #define B3SOIDD_MOD_UA 147 #define B3SOIDD_MOD_UA1 148 #define B3SOIDD_MOD_UB 149 #define B3SOIDD_MOD_UB1 150 #define B3SOIDD_MOD_UC 151 #define B3SOIDD_MOD_UC1 152 #define B3SOIDD_MOD_U0 153 #define B3SOIDD_MOD_UTE 154 #define B3SOIDD_MOD_VOFF 155 #define B3SOIDD_MOD_DELTA 156 #define B3SOIDD_MOD_RDSW 157 #define B3SOIDD_MOD_PRT 158 #define B3SOIDD_MOD_LDD 159 #define B3SOIDD_MOD_ETA 160 #define B3SOIDD_MOD_ETA0 161 #define B3SOIDD_MOD_ETAB 162 #define B3SOIDD_MOD_PCLM 163 #define B3SOIDD_MOD_PDIBL1 164 #define B3SOIDD_MOD_PDIBL2 165 #define B3SOIDD_MOD_PSCBE1 166 #define B3SOIDD_MOD_PSCBE2 167 #define B3SOIDD_MOD_PVAG 168 #define B3SOIDD_MOD_WR 169 #define B3SOIDD_MOD_DWG 170 #define B3SOIDD_MOD_DWB 171 #define B3SOIDD_MOD_B0 172 #define B3SOIDD_MOD_B1 173 #define B3SOIDD_MOD_ALPHA0 174 #define B3SOIDD_MOD_BETA0 175 #define B3SOIDD_MOD_PDIBLB 178 #define B3SOIDD_MOD_PRWG 179 #define B3SOIDD_MOD_PRWB 180 #define B3SOIDD_MOD_CDSCD 181 #define B3SOIDD_MOD_AGS 182 #define B3SOIDD_MOD_FRINGE 184 #define B3SOIDD_MOD_CGSL 186 #define B3SOIDD_MOD_CGDL 187 #define B3SOIDD_MOD_CKAPPA 188 #define B3SOIDD_MOD_CF 189 #define B3SOIDD_MOD_CLC 190 #define B3SOIDD_MOD_CLE 191 #define B3SOIDD_MOD_PARAMCHK 192 #define B3SOIDD_MOD_VERSION 193 #define B3SOIDD_MOD_TBOX 195 #define B3SOIDD_MOD_TSI 196 #define B3SOIDD_MOD_KB1 197 #define B3SOIDD_MOD_KB3 198 #define B3SOIDD_MOD_DVBD0 199 #define B3SOIDD_MOD_DVBD1 200 #define B3SOIDD_MOD_DELP 201 #define B3SOIDD_MOD_VBSA 202 #define B3SOIDD_MOD_RBODY 204 #define B3SOIDD_MOD_ADICE0 205 #define B3SOIDD_MOD_ABP 206 #define B3SOIDD_MOD_MXC 207 #define B3SOIDD_MOD_RTH0 208 #define B3SOIDD_MOD_CTH0 209 #define B3SOIDD_MOD_AII 210 #define B3SOIDD_MOD_BII 211 #define B3SOIDD_MOD_CII 212 #define B3SOIDD_MOD_DII 213 #define B3SOIDD_MOD_ALPHA1 214 #define B3SOIDD_MOD_NGIDL 215 #define B3SOIDD_MOD_AGIDL 216 #define B3SOIDD_MOD_BGIDL 217 #define B3SOIDD_MOD_NDIODE 218 #define B3SOIDD_MOD_LDIOF 219 #define B3SOIDD_MOD_LDIOR 220 #define B3SOIDD_MOD_NTUN 221 #define B3SOIDD_MOD_ISBJT 222 #define B3SOIDD_MOD_ISDIF 223 #define B3SOIDD_MOD_ISREC 224 #define B3SOIDD_MOD_ISTUN 225 #define B3SOIDD_MOD_XBJT 226 #define B3SOIDD_MOD_XDIF 227 #define B3SOIDD_MOD_XREC 228 #define B3SOIDD_MOD_XTUN 229 #define B3SOIDD_MOD_EDL 230 #define B3SOIDD_MOD_KBJT1 231 #define B3SOIDD_MOD_TT 232 #define B3SOIDD_MOD_VSDTH 233 #define B3SOIDD_MOD_VSDFB 234 #define B3SOIDD_MOD_ASD 235 #define B3SOIDD_MOD_CSDMIN 236 #define B3SOIDD_MOD_RBSH 237 /* Added for binning - START3 */ /* Length dependence */ #define B3SOIDD_MOD_LNPEAK 301 #define B3SOIDD_MOD_LNSUB 302 #define B3SOIDD_MOD_LNGATE 303 #define B3SOIDD_MOD_LVTH0 304 #define B3SOIDD_MOD_LK1 305 #define B3SOIDD_MOD_LK2 306 #define B3SOIDD_MOD_LK3 307 #define B3SOIDD_MOD_LK3B 308 #define B3SOIDD_MOD_LVBSA 309 #define B3SOIDD_MOD_LDELP 310 #define B3SOIDD_MOD_LKB1 311 #define B3SOIDD_MOD_LKB3 312 #define B3SOIDD_MOD_LDVBD0 313 #define B3SOIDD_MOD_LDVBD1 314 #define B3SOIDD_MOD_LW0 315 #define B3SOIDD_MOD_LNLX 316 #define B3SOIDD_MOD_LDVT0 317 #define B3SOIDD_MOD_LDVT1 318 #define B3SOIDD_MOD_LDVT2 319 #define B3SOIDD_MOD_LDVT0W 320 #define B3SOIDD_MOD_LDVT1W 321 #define B3SOIDD_MOD_LDVT2W 322 #define B3SOIDD_MOD_LU0 323 #define B3SOIDD_MOD_LUA 324 #define B3SOIDD_MOD_LUB 325 #define B3SOIDD_MOD_LUC 326 #define B3SOIDD_MOD_LVSAT 327 #define B3SOIDD_MOD_LA0 328 #define B3SOIDD_MOD_LAGS 329 #define B3SOIDD_MOD_LB0 330 #define B3SOIDD_MOD_LB1 331 #define B3SOIDD_MOD_LKETA 332 #define B3SOIDD_MOD_LABP 333 #define B3SOIDD_MOD_LMXC 334 #define B3SOIDD_MOD_LADICE0 335 #define B3SOIDD_MOD_LA1 336 #define B3SOIDD_MOD_LA2 337 #define B3SOIDD_MOD_LRDSW 338 #define B3SOIDD_MOD_LPRWB 339 #define B3SOIDD_MOD_LPRWG 340 #define B3SOIDD_MOD_LWR 341 #define B3SOIDD_MOD_LNFACTOR 342 #define B3SOIDD_MOD_LDWG 343 #define B3SOIDD_MOD_LDWB 344 #define B3SOIDD_MOD_LVOFF 345 #define B3SOIDD_MOD_LETA0 346 #define B3SOIDD_MOD_LETAB 347 #define B3SOIDD_MOD_LDSUB 348 #define B3SOIDD_MOD_LCIT 349 #define B3SOIDD_MOD_LCDSC 350 #define B3SOIDD_MOD_LCDSCB 351 #define B3SOIDD_MOD_LCDSCD 352 #define B3SOIDD_MOD_LPCLM 353 #define B3SOIDD_MOD_LPDIBL1 354 #define B3SOIDD_MOD_LPDIBL2 355 #define B3SOIDD_MOD_LPDIBLB 356 #define B3SOIDD_MOD_LDROUT 357 #define B3SOIDD_MOD_LPVAG 358 #define B3SOIDD_MOD_LDELTA 359 #define B3SOIDD_MOD_LAII 360 #define B3SOIDD_MOD_LBII 361 #define B3SOIDD_MOD_LCII 362 #define B3SOIDD_MOD_LDII 363 #define B3SOIDD_MOD_LALPHA0 364 #define B3SOIDD_MOD_LALPHA1 365 #define B3SOIDD_MOD_LBETA0 366 #define B3SOIDD_MOD_LAGIDL 367 #define B3SOIDD_MOD_LBGIDL 368 #define B3SOIDD_MOD_LNGIDL 369 #define B3SOIDD_MOD_LNTUN 370 #define B3SOIDD_MOD_LNDIODE 371 #define B3SOIDD_MOD_LISBJT 372 #define B3SOIDD_MOD_LISDIF 373 #define B3SOIDD_MOD_LISREC 374 #define B3SOIDD_MOD_LISTUN 375 #define B3SOIDD_MOD_LEDL 376 #define B3SOIDD_MOD_LKBJT1 377 #define B3SOIDD_MOD_LVSDFB 378 #define B3SOIDD_MOD_LVSDTH 379 /* Width dependence */ #define B3SOIDD_MOD_WNPEAK 401 #define B3SOIDD_MOD_WNSUB 402 #define B3SOIDD_MOD_WNGATE 403 #define B3SOIDD_MOD_WVTH0 404 #define B3SOIDD_MOD_WK1 405 #define B3SOIDD_MOD_WK2 406 #define B3SOIDD_MOD_WK3 407 #define B3SOIDD_MOD_WK3B 408 #define B3SOIDD_MOD_WVBSA 409 #define B3SOIDD_MOD_WDELP 410 #define B3SOIDD_MOD_WKB1 411 #define B3SOIDD_MOD_WKB3 412 #define B3SOIDD_MOD_WDVBD0 413 #define B3SOIDD_MOD_WDVBD1 414 #define B3SOIDD_MOD_WW0 415 #define B3SOIDD_MOD_WNLX 416 #define B3SOIDD_MOD_WDVT0 417 #define B3SOIDD_MOD_WDVT1 418 #define B3SOIDD_MOD_WDVT2 419 #define B3SOIDD_MOD_WDVT0W 420 #define B3SOIDD_MOD_WDVT1W 421 #define B3SOIDD_MOD_WDVT2W 422 #define B3SOIDD_MOD_WU0 423 #define B3SOIDD_MOD_WUA 424 #define B3SOIDD_MOD_WUB 425 #define B3SOIDD_MOD_WUC 426 #define B3SOIDD_MOD_WVSAT 427 #define B3SOIDD_MOD_WA0 428 #define B3SOIDD_MOD_WAGS 429 #define B3SOIDD_MOD_WB0 430 #define B3SOIDD_MOD_WB1 431 #define B3SOIDD_MOD_WKETA 432 #define B3SOIDD_MOD_WABP 433 #define B3SOIDD_MOD_WMXC 434 #define B3SOIDD_MOD_WADICE0 435 #define B3SOIDD_MOD_WA1 436 #define B3SOIDD_MOD_WA2 437 #define B3SOIDD_MOD_WRDSW 438 #define B3SOIDD_MOD_WPRWB 439 #define B3SOIDD_MOD_WPRWG 440 #define B3SOIDD_MOD_WWR 441 #define B3SOIDD_MOD_WNFACTOR 442 #define B3SOIDD_MOD_WDWG 443 #define B3SOIDD_MOD_WDWB 444 #define B3SOIDD_MOD_WVOFF 445 #define B3SOIDD_MOD_WETA0 446 #define B3SOIDD_MOD_WETAB 447 #define B3SOIDD_MOD_WDSUB 448 #define B3SOIDD_MOD_WCIT 449 #define B3SOIDD_MOD_WCDSC 450 #define B3SOIDD_MOD_WCDSCB 451 #define B3SOIDD_MOD_WCDSCD 452 #define B3SOIDD_MOD_WPCLM 453 #define B3SOIDD_MOD_WPDIBL1 454 #define B3SOIDD_MOD_WPDIBL2 455 #define B3SOIDD_MOD_WPDIBLB 456 #define B3SOIDD_MOD_WDROUT 457 #define B3SOIDD_MOD_WPVAG 458 #define B3SOIDD_MOD_WDELTA 459 #define B3SOIDD_MOD_WAII 460 #define B3SOIDD_MOD_WBII 461 #define B3SOIDD_MOD_WCII 462 #define B3SOIDD_MOD_WDII 463 #define B3SOIDD_MOD_WALPHA0 464 #define B3SOIDD_MOD_WALPHA1 465 #define B3SOIDD_MOD_WBETA0 466 #define B3SOIDD_MOD_WAGIDL 467 #define B3SOIDD_MOD_WBGIDL 468 #define B3SOIDD_MOD_WNGIDL 469 #define B3SOIDD_MOD_WNTUN 470 #define B3SOIDD_MOD_WNDIODE 471 #define B3SOIDD_MOD_WISBJT 472 #define B3SOIDD_MOD_WISDIF 473 #define B3SOIDD_MOD_WISREC 474 #define B3SOIDD_MOD_WISTUN 475 #define B3SOIDD_MOD_WEDL 476 #define B3SOIDD_MOD_WKBJT1 477 #define B3SOIDD_MOD_WVSDFB 478 #define B3SOIDD_MOD_WVSDTH 479 /* Cross-term dependence */ #define B3SOIDD_MOD_PNPEAK 501 #define B3SOIDD_MOD_PNSUB 502 #define B3SOIDD_MOD_PNGATE 503 #define B3SOIDD_MOD_PVTH0 504 #define B3SOIDD_MOD_PK1 505 #define B3SOIDD_MOD_PK2 506 #define B3SOIDD_MOD_PK3 507 #define B3SOIDD_MOD_PK3B 508 #define B3SOIDD_MOD_PVBSA 509 #define B3SOIDD_MOD_PDELP 510 #define B3SOIDD_MOD_PKB1 511 #define B3SOIDD_MOD_PKB3 512 #define B3SOIDD_MOD_PDVBD0 513 #define B3SOIDD_MOD_PDVBD1 514 #define B3SOIDD_MOD_PW0 515 #define B3SOIDD_MOD_PNLX 516 #define B3SOIDD_MOD_PDVT0 517 #define B3SOIDD_MOD_PDVT1 518 #define B3SOIDD_MOD_PDVT2 519 #define B3SOIDD_MOD_PDVT0W 520 #define B3SOIDD_MOD_PDVT1W 521 #define B3SOIDD_MOD_PDVT2W 522 #define B3SOIDD_MOD_PU0 523 #define B3SOIDD_MOD_PUA 524 #define B3SOIDD_MOD_PUB 525 #define B3SOIDD_MOD_PUC 526 #define B3SOIDD_MOD_PVSAT 527 #define B3SOIDD_MOD_PA0 528 #define B3SOIDD_MOD_PAGS 529 #define B3SOIDD_MOD_PB0 530 #define B3SOIDD_MOD_PB1 531 #define B3SOIDD_MOD_PKETA 532 #define B3SOIDD_MOD_PABP 533 #define B3SOIDD_MOD_PMXC 534 #define B3SOIDD_MOD_PADICE0 535 #define B3SOIDD_MOD_PA1 536 #define B3SOIDD_MOD_PA2 537 #define B3SOIDD_MOD_PRDSW 538 #define B3SOIDD_MOD_PPRWB 539 #define B3SOIDD_MOD_PPRWG 540 #define B3SOIDD_MOD_PWR 541 #define B3SOIDD_MOD_PNFACTOR 542 #define B3SOIDD_MOD_PDWG 543 #define B3SOIDD_MOD_PDWB 544 #define B3SOIDD_MOD_PVOFF 545 #define B3SOIDD_MOD_PETA0 546 #define B3SOIDD_MOD_PETAB 547 #define B3SOIDD_MOD_PDSUB 548 #define B3SOIDD_MOD_PCIT 549 #define B3SOIDD_MOD_PCDSC 550 #define B3SOIDD_MOD_PCDSCB 551 #define B3SOIDD_MOD_PCDSCD 552 #define B3SOIDD_MOD_PPCLM 553 #define B3SOIDD_MOD_PPDIBL1 554 #define B3SOIDD_MOD_PPDIBL2 555 #define B3SOIDD_MOD_PPDIBLB 556 #define B3SOIDD_MOD_PDROUT 557 #define B3SOIDD_MOD_PPVAG 558 #define B3SOIDD_MOD_PDELTA 559 #define B3SOIDD_MOD_PAII 560 #define B3SOIDD_MOD_PBII 561 #define B3SOIDD_MOD_PCII 562 #define B3SOIDD_MOD_PDII 563 #define B3SOIDD_MOD_PALPHA0 564 #define B3SOIDD_MOD_PALPHA1 565 #define B3SOIDD_MOD_PBETA0 566 #define B3SOIDD_MOD_PAGIDL 567 #define B3SOIDD_MOD_PBGIDL 568 #define B3SOIDD_MOD_PNGIDL 569 #define B3SOIDD_MOD_PNTUN 570 #define B3SOIDD_MOD_PNDIODE 571 #define B3SOIDD_MOD_PISBJT 572 #define B3SOIDD_MOD_PISDIF 573 #define B3SOIDD_MOD_PISREC 574 #define B3SOIDD_MOD_PISTUN 575 #define B3SOIDD_MOD_PEDL 576 #define B3SOIDD_MOD_PKBJT1 577 #define B3SOIDD_MOD_PVSDFB 578 #define B3SOIDD_MOD_PVSDTH 579 /* Added for binning - END3 */ #define B3SOIDD_MOD_TNOM 701 #define B3SOIDD_MOD_CGSO 702 #define B3SOIDD_MOD_CGDO 703 #define B3SOIDD_MOD_CGEO 704 #define B3SOIDD_MOD_XPART 705 #define B3SOIDD_MOD_RSH 706 #define B3SOIDD_MOD_NMOS 814 #define B3SOIDD_MOD_PMOS 815 #define B3SOIDD_MOD_NOIA 816 #define B3SOIDD_MOD_NOIB 817 #define B3SOIDD_MOD_NOIC 818 #define B3SOIDD_MOD_LINT 819 #define B3SOIDD_MOD_LL 820 #define B3SOIDD_MOD_LLN 821 #define B3SOIDD_MOD_LW 822 #define B3SOIDD_MOD_LWN 823 #define B3SOIDD_MOD_LWL 824 #define B3SOIDD_MOD_WINT 827 #define B3SOIDD_MOD_WL 828 #define B3SOIDD_MOD_WLN 829 #define B3SOIDD_MOD_WW 830 #define B3SOIDD_MOD_WWN 831 #define B3SOIDD_MOD_WWL 832 #define B3SOIDD_MOD_DWC 835 #define B3SOIDD_MOD_DLC 836 #define B3SOIDD_MOD_EM 837 #define B3SOIDD_MOD_EF 838 #define B3SOIDD_MOD_AF 839 #define B3SOIDD_MOD_KF 840 #define B3SOIDD_MOD_NOIF 841 #define B3SOIDD_MOD_PBSWG 843 #define B3SOIDD_MOD_MJSWG 844 #define B3SOIDD_MOD_CJSWG 845 #define B3SOIDD_MOD_CSDESW 846 /* device questions */ #define B3SOIDD_DNODE 901 #define B3SOIDD_GNODE 902 #define B3SOIDD_SNODE 903 #define B3SOIDD_BNODE 904 #define B3SOIDD_ENODE 905 #define B3SOIDD_DNODEPRIME 906 #define B3SOIDD_SNODEPRIME 907 #define B3SOIDD_VBD 908 #define B3SOIDD_VBS 909 #define B3SOIDD_VGS 910 #define B3SOIDD_VES 911 #define B3SOIDD_VDS 912 #define B3SOIDD_CD 913 #define B3SOIDD_CBS 914 #define B3SOIDD_CBD 915 #define B3SOIDD_GM 916 #define B3SOIDD_GDS 917 #define B3SOIDD_GMBS 918 #define B3SOIDD_GBD 919 #define B3SOIDD_GBS 920 #define B3SOIDD_QB 921 #define B3SOIDD_CQB 922 #define B3SOIDD_QG 923 #define B3SOIDD_CQG 924 #define B3SOIDD_QD 925 #define B3SOIDD_CQD 926 #define B3SOIDD_CGG 927 #define B3SOIDD_CGD 928 #define B3SOIDD_CGS 929 #define B3SOIDD_CBG 930 #define B3SOIDD_CAPBD 931 #define B3SOIDD_CQBD 932 #define B3SOIDD_CAPBS 933 #define B3SOIDD_CQBS 934 #define B3SOIDD_CDG 935 #define B3SOIDD_CDD 936 #define B3SOIDD_CDS 937 #define B3SOIDD_VON 938 #define B3SOIDD_VDSAT 939 #define B3SOIDD_QBS 940 #define B3SOIDD_QBD 941 #define B3SOIDD_SOURCECONDUCT 942 #define B3SOIDD_DRAINCONDUCT 943 #define B3SOIDD_CBDB 944 #define B3SOIDD_CBSB 945 #define B3SOIDD_GMID 946 #include "b3soiddext.h" extern void B3SOIDDevaluate(double,double,double,B3SOIDDinstance*,B3SOIDDmodel*, double*,double*,double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, CKTcircuit*); extern int B3SOIDDdebug(B3SOIDDmodel*, B3SOIDDinstance*, CKTcircuit*, int); extern int B3SOIDDcheckModel(B3SOIDDmodel*, B3SOIDDinstance*, CKTcircuit*); #endif /*B3SOIDD*/ tmpk8ny_4pz/src/spicelib/devices/bsim3soi_dd/b3soiddask.c0000644000175000017500000001774113546075722023566 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: Weidong Liu and Pin Su Feb 1999 Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soiddask.c 98/5/01 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMDD2.1 release */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "b3soidddef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIDDask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { B3SOIDDinstance *here = (B3SOIDDinstance*)inst; NG_IGNORE(select); switch(which) { case B3SOIDD_L: value->rValue = here->B3SOIDDl; return(OK); case B3SOIDD_W: value->rValue = here->B3SOIDDw; return(OK); case B3SOIDD_AS: value->rValue = here->B3SOIDDsourceArea; return(OK); case B3SOIDD_AD: value->rValue = here->B3SOIDDdrainArea; return(OK); case B3SOIDD_PS: value->rValue = here->B3SOIDDsourcePerimeter; return(OK); case B3SOIDD_PD: value->rValue = here->B3SOIDDdrainPerimeter; return(OK); case B3SOIDD_NRS: value->rValue = here->B3SOIDDsourceSquares; return(OK); case B3SOIDD_NRD: value->rValue = here->B3SOIDDdrainSquares; return(OK); case B3SOIDD_OFF: value->rValue = here->B3SOIDDoff; return(OK); case B3SOIDD_BJTOFF: value->iValue = here->B3SOIDDbjtoff; return(OK); case B3SOIDD_RTH0: value->rValue = here->B3SOIDDrth0; value->rValue /= here->B3SOIDDm; return(OK); case B3SOIDD_CTH0: value->rValue = here->B3SOIDDcth0; value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_NRB: value->rValue = here->B3SOIDDbodySquares; return(OK); case B3SOIDD_IC_VBS: value->rValue = here->B3SOIDDicVBS; return(OK); case B3SOIDD_IC_VDS: value->rValue = here->B3SOIDDicVDS; return(OK); case B3SOIDD_IC_VGS: value->rValue = here->B3SOIDDicVGS; return(OK); case B3SOIDD_IC_VES: value->rValue = here->B3SOIDDicVES; return(OK); case B3SOIDD_IC_VPS: value->rValue = here->B3SOIDDicVPS; return(OK); case B3SOIDD_DNODE: value->iValue = here->B3SOIDDdNode; return(OK); case B3SOIDD_GNODE: value->iValue = here->B3SOIDDgNode; return(OK); case B3SOIDD_SNODE: value->iValue = here->B3SOIDDsNode; return(OK); case B3SOIDD_BNODE: value->iValue = here->B3SOIDDbNode; return(OK); case B3SOIDD_ENODE: value->iValue = here->B3SOIDDeNode; return(OK); case B3SOIDD_DNODEPRIME: value->iValue = here->B3SOIDDdNodePrime; return(OK); case B3SOIDD_SNODEPRIME: value->iValue = here->B3SOIDDsNodePrime; return(OK); case B3SOIDD_SOURCECONDUCT: value->rValue = here->B3SOIDDsourceConductance; value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_DRAINCONDUCT: value->rValue = here->B3SOIDDdrainConductance; value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_VBD: value->rValue = *(ckt->CKTstate0 + here->B3SOIDDvbd); return(OK); case B3SOIDD_VBS: value->rValue = *(ckt->CKTstate0 + here->B3SOIDDvbs); return(OK); case B3SOIDD_VGS: value->rValue = *(ckt->CKTstate0 + here->B3SOIDDvgs); return(OK); case B3SOIDD_VES: value->rValue = *(ckt->CKTstate0 + here->B3SOIDDves); return(OK); case B3SOIDD_VDS: value->rValue = *(ckt->CKTstate0 + here->B3SOIDDvds); return(OK); case B3SOIDD_CD: value->rValue = here->B3SOIDDcd; value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_CBS: value->rValue = here->B3SOIDDcjs; value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_CBD: value->rValue = here->B3SOIDDcjd; value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_GM: value->rValue = here->B3SOIDDgm; value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_GMID: value->rValue = here->B3SOIDDgm/here->B3SOIDDcd; return(OK); case B3SOIDD_GDS: value->rValue = here->B3SOIDDgds; value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_GMBS: value->rValue = here->B3SOIDDgmbs; value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_GBD: value->rValue = here->B3SOIDDgjdb; value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_GBS: value->rValue = here->B3SOIDDgjsb; value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_QB: value->rValue = *(ckt->CKTstate0 + here->B3SOIDDqb); value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_CQB: value->rValue = *(ckt->CKTstate0 + here->B3SOIDDcqb); value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_QG: value->rValue = *(ckt->CKTstate0 + here->B3SOIDDqg); value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_CQG: value->rValue = *(ckt->CKTstate0 + here->B3SOIDDcqg); value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_QD: value->rValue = *(ckt->CKTstate0 + here->B3SOIDDqd); value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_CQD: value->rValue = *(ckt->CKTstate0 + here->B3SOIDDcqd); value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_CGG: value->rValue = here->B3SOIDDcggb; value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_CGD: value->rValue = here->B3SOIDDcgdb; value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_CGS: value->rValue = here->B3SOIDDcgsb; value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_CDG: value->rValue = here->B3SOIDDcdgb; value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_CDD: value->rValue = here->B3SOIDDcddb; value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_CDS: value->rValue = here->B3SOIDDcdsb; value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_CBG: value->rValue = here->B3SOIDDcbgb; value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_CBDB: value->rValue = here->B3SOIDDcbdb; value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_CBSB: value->rValue = here->B3SOIDDcbsb; value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_VON: value->rValue = here->B3SOIDDvon; return(OK); case B3SOIDD_VDSAT: value->rValue = here->B3SOIDDvdsat; return(OK); case B3SOIDD_QBS: value->rValue = *(ckt->CKTstate0 + here->B3SOIDDqbs); value->rValue *= here->B3SOIDDm; return(OK); case B3SOIDD_QBD: value->rValue = *(ckt->CKTstate0 + here->B3SOIDDqbd); value->rValue *= here->B3SOIDDm; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_dd/b3soiddinit.c0000644000175000017500000000330613546075722023743 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "b3soidditf.h" #include "b3soiddinit.h" SPICEdev B3SOIDDinfo = { .DEVpublic = { .name = "B3SOIDD", .description = "Berkeley SOI MOSFET (DD) model version 2.1", .terms = &B3SOIDDnSize, .numNames = &B3SOIDDnSize, .termNames = B3SOIDDnames, .numInstanceParms = &B3SOIDDpTSize, .instanceParms = B3SOIDDpTable, .numModelParms = &B3SOIDDmPTSize, .modelParms = B3SOIDDmPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = B3SOIDDparam, .DEVmodParam = B3SOIDDmParam, .DEVload = B3SOIDDload, .DEVsetup = B3SOIDDsetup, .DEVunsetup = B3SOIDDunsetup, .DEVpzSetup = B3SOIDDsetup, .DEVtemperature = B3SOIDDtemp, .DEVtrunc = B3SOIDDtrunc, .DEVfindBranch = NULL, .DEVacLoad = B3SOIDDacLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = B3SOIDDgetic, .DEVask = B3SOIDDask, .DEVmodAsk = B3SOIDDmAsk, .DEVpzLoad = B3SOIDDpzLoad, .DEVconvTest = B3SOIDDconvTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = B3SOIDDnoise, .DEVsoaCheck = NULL, .DEVinstSize = &B3SOIDDiSize, .DEVmodSize = &B3SOIDDmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_b3soidd_info (void) { return &B3SOIDDinfo; } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_dd/b3soiddmpar.c0000644000175000017500000016053713546075722023751 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: Weidong Liu and Pin Su Feb 1999 Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang Modified by Wei Jin 99/9/27 File: b3soiddmpar.c 98/5/01 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMDD2.1 release */ #include "ngspice/ngspice.h" #include "b3soidddef.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIDDmParam(int param, IFvalue *value, GENmodel *inMod) { B3SOIDDmodel *mod = (B3SOIDDmodel*)inMod; switch(param) { case B3SOIDD_MOD_MOBMOD : mod->B3SOIDDmobMod = value->iValue; mod->B3SOIDDmobModGiven = TRUE; break; case B3SOIDD_MOD_BINUNIT : mod->B3SOIDDbinUnit = value->iValue; mod->B3SOIDDbinUnitGiven = TRUE; break; case B3SOIDD_MOD_PARAMCHK : mod->B3SOIDDparamChk = value->iValue; mod->B3SOIDDparamChkGiven = TRUE; break; case B3SOIDD_MOD_CAPMOD : mod->B3SOIDDcapMod = value->iValue; mod->B3SOIDDcapModGiven = TRUE; break; case B3SOIDD_MOD_SHMOD : mod->B3SOIDDshMod = value->iValue; mod->B3SOIDDshModGiven = TRUE; break; case B3SOIDD_MOD_NOIMOD : mod->B3SOIDDnoiMod = value->iValue; mod->B3SOIDDnoiModGiven = TRUE; break; case B3SOIDD_MOD_VERSION : mod->B3SOIDDversion = value->rValue; mod->B3SOIDDversionGiven = TRUE; break; case B3SOIDD_MOD_TOX : mod->B3SOIDDtox = value->rValue; mod->B3SOIDDtoxGiven = TRUE; break; case B3SOIDD_MOD_CDSC : mod->B3SOIDDcdsc = value->rValue; mod->B3SOIDDcdscGiven = TRUE; break; case B3SOIDD_MOD_CDSCB : mod->B3SOIDDcdscb = value->rValue; mod->B3SOIDDcdscbGiven = TRUE; break; case B3SOIDD_MOD_CDSCD : mod->B3SOIDDcdscd = value->rValue; mod->B3SOIDDcdscdGiven = TRUE; break; case B3SOIDD_MOD_CIT : mod->B3SOIDDcit = value->rValue; mod->B3SOIDDcitGiven = TRUE; break; case B3SOIDD_MOD_NFACTOR : mod->B3SOIDDnfactor = value->rValue; mod->B3SOIDDnfactorGiven = TRUE; break; case B3SOIDD_MOD_VSAT: mod->B3SOIDDvsat = value->rValue; mod->B3SOIDDvsatGiven = TRUE; break; case B3SOIDD_MOD_A0: mod->B3SOIDDa0 = value->rValue; mod->B3SOIDDa0Given = TRUE; break; case B3SOIDD_MOD_AGS: mod->B3SOIDDags= value->rValue; mod->B3SOIDDagsGiven = TRUE; break; case B3SOIDD_MOD_A1: mod->B3SOIDDa1 = value->rValue; mod->B3SOIDDa1Given = TRUE; break; case B3SOIDD_MOD_A2: mod->B3SOIDDa2 = value->rValue; mod->B3SOIDDa2Given = TRUE; break; case B3SOIDD_MOD_AT: mod->B3SOIDDat = value->rValue; mod->B3SOIDDatGiven = TRUE; break; case B3SOIDD_MOD_KETA: mod->B3SOIDDketa = value->rValue; mod->B3SOIDDketaGiven = TRUE; break; case B3SOIDD_MOD_NSUB: mod->B3SOIDDnsub = value->rValue; mod->B3SOIDDnsubGiven = TRUE; break; case B3SOIDD_MOD_NPEAK: mod->B3SOIDDnpeak = value->rValue; mod->B3SOIDDnpeakGiven = TRUE; if (mod->B3SOIDDnpeak > 1.0e20) mod->B3SOIDDnpeak *= 1.0e-6; break; case B3SOIDD_MOD_NGATE: mod->B3SOIDDngate = value->rValue; mod->B3SOIDDngateGiven = TRUE; if (mod->B3SOIDDngate > 1.0e23) mod->B3SOIDDngate *= 1.0e-6; break; case B3SOIDD_MOD_GAMMA1: mod->B3SOIDDgamma1 = value->rValue; mod->B3SOIDDgamma1Given = TRUE; break; case B3SOIDD_MOD_GAMMA2: mod->B3SOIDDgamma2 = value->rValue; mod->B3SOIDDgamma2Given = TRUE; break; case B3SOIDD_MOD_VBX: mod->B3SOIDDvbx = value->rValue; mod->B3SOIDDvbxGiven = TRUE; break; case B3SOIDD_MOD_VBM: mod->B3SOIDDvbm = value->rValue; mod->B3SOIDDvbmGiven = TRUE; break; case B3SOIDD_MOD_XT: mod->B3SOIDDxt = value->rValue; mod->B3SOIDDxtGiven = TRUE; break; case B3SOIDD_MOD_K1: mod->B3SOIDDk1 = value->rValue; mod->B3SOIDDk1Given = TRUE; break; case B3SOIDD_MOD_KT1: mod->B3SOIDDkt1 = value->rValue; mod->B3SOIDDkt1Given = TRUE; break; case B3SOIDD_MOD_KT1L: mod->B3SOIDDkt1l = value->rValue; mod->B3SOIDDkt1lGiven = TRUE; break; case B3SOIDD_MOD_KT2: mod->B3SOIDDkt2 = value->rValue; mod->B3SOIDDkt2Given = TRUE; break; case B3SOIDD_MOD_K2: mod->B3SOIDDk2 = value->rValue; mod->B3SOIDDk2Given = TRUE; break; case B3SOIDD_MOD_K3: mod->B3SOIDDk3 = value->rValue; mod->B3SOIDDk3Given = TRUE; break; case B3SOIDD_MOD_K3B: mod->B3SOIDDk3b = value->rValue; mod->B3SOIDDk3bGiven = TRUE; break; case B3SOIDD_MOD_NLX: mod->B3SOIDDnlx = value->rValue; mod->B3SOIDDnlxGiven = TRUE; break; case B3SOIDD_MOD_W0: mod->B3SOIDDw0 = value->rValue; mod->B3SOIDDw0Given = TRUE; break; case B3SOIDD_MOD_DVT0: mod->B3SOIDDdvt0 = value->rValue; mod->B3SOIDDdvt0Given = TRUE; break; case B3SOIDD_MOD_DVT1: mod->B3SOIDDdvt1 = value->rValue; mod->B3SOIDDdvt1Given = TRUE; break; case B3SOIDD_MOD_DVT2: mod->B3SOIDDdvt2 = value->rValue; mod->B3SOIDDdvt2Given = TRUE; break; case B3SOIDD_MOD_DVT0W: mod->B3SOIDDdvt0w = value->rValue; mod->B3SOIDDdvt0wGiven = TRUE; break; case B3SOIDD_MOD_DVT1W: mod->B3SOIDDdvt1w = value->rValue; mod->B3SOIDDdvt1wGiven = TRUE; break; case B3SOIDD_MOD_DVT2W: mod->B3SOIDDdvt2w = value->rValue; mod->B3SOIDDdvt2wGiven = TRUE; break; case B3SOIDD_MOD_DROUT: mod->B3SOIDDdrout = value->rValue; mod->B3SOIDDdroutGiven = TRUE; break; case B3SOIDD_MOD_DSUB: mod->B3SOIDDdsub = value->rValue; mod->B3SOIDDdsubGiven = TRUE; break; case B3SOIDD_MOD_VTH0: mod->B3SOIDDvth0 = value->rValue; mod->B3SOIDDvth0Given = TRUE; break; case B3SOIDD_MOD_UA: mod->B3SOIDDua = value->rValue; mod->B3SOIDDuaGiven = TRUE; break; case B3SOIDD_MOD_UA1: mod->B3SOIDDua1 = value->rValue; mod->B3SOIDDua1Given = TRUE; break; case B3SOIDD_MOD_UB: mod->B3SOIDDub = value->rValue; mod->B3SOIDDubGiven = TRUE; break; case B3SOIDD_MOD_UB1: mod->B3SOIDDub1 = value->rValue; mod->B3SOIDDub1Given = TRUE; break; case B3SOIDD_MOD_UC: mod->B3SOIDDuc = value->rValue; mod->B3SOIDDucGiven = TRUE; break; case B3SOIDD_MOD_UC1: mod->B3SOIDDuc1 = value->rValue; mod->B3SOIDDuc1Given = TRUE; break; case B3SOIDD_MOD_U0 : mod->B3SOIDDu0 = value->rValue; mod->B3SOIDDu0Given = TRUE; break; case B3SOIDD_MOD_UTE : mod->B3SOIDDute = value->rValue; mod->B3SOIDDuteGiven = TRUE; break; case B3SOIDD_MOD_VOFF: mod->B3SOIDDvoff = value->rValue; mod->B3SOIDDvoffGiven = TRUE; break; case B3SOIDD_MOD_DELTA : mod->B3SOIDDdelta = value->rValue; mod->B3SOIDDdeltaGiven = TRUE; break; case B3SOIDD_MOD_RDSW: mod->B3SOIDDrdsw = value->rValue; mod->B3SOIDDrdswGiven = TRUE; break; case B3SOIDD_MOD_PRWG: mod->B3SOIDDprwg = value->rValue; mod->B3SOIDDprwgGiven = TRUE; break; case B3SOIDD_MOD_PRWB: mod->B3SOIDDprwb = value->rValue; mod->B3SOIDDprwbGiven = TRUE; break; case B3SOIDD_MOD_PRT: mod->B3SOIDDprt = value->rValue; mod->B3SOIDDprtGiven = TRUE; break; case B3SOIDD_MOD_ETA0: mod->B3SOIDDeta0 = value->rValue; mod->B3SOIDDeta0Given = TRUE; break; case B3SOIDD_MOD_ETAB: mod->B3SOIDDetab = value->rValue; mod->B3SOIDDetabGiven = TRUE; break; case B3SOIDD_MOD_PCLM: mod->B3SOIDDpclm = value->rValue; mod->B3SOIDDpclmGiven = TRUE; break; case B3SOIDD_MOD_PDIBL1: mod->B3SOIDDpdibl1 = value->rValue; mod->B3SOIDDpdibl1Given = TRUE; break; case B3SOIDD_MOD_PDIBL2: mod->B3SOIDDpdibl2 = value->rValue; mod->B3SOIDDpdibl2Given = TRUE; break; case B3SOIDD_MOD_PDIBLB: mod->B3SOIDDpdiblb = value->rValue; mod->B3SOIDDpdiblbGiven = TRUE; break; case B3SOIDD_MOD_PVAG: mod->B3SOIDDpvag = value->rValue; mod->B3SOIDDpvagGiven = TRUE; break; case B3SOIDD_MOD_WR : mod->B3SOIDDwr = value->rValue; mod->B3SOIDDwrGiven = TRUE; break; case B3SOIDD_MOD_DWG : mod->B3SOIDDdwg = value->rValue; mod->B3SOIDDdwgGiven = TRUE; break; case B3SOIDD_MOD_DWB : mod->B3SOIDDdwb = value->rValue; mod->B3SOIDDdwbGiven = TRUE; break; case B3SOIDD_MOD_B0 : mod->B3SOIDDb0 = value->rValue; mod->B3SOIDDb0Given = TRUE; break; case B3SOIDD_MOD_B1 : mod->B3SOIDDb1 = value->rValue; mod->B3SOIDDb1Given = TRUE; break; case B3SOIDD_MOD_ALPHA0 : mod->B3SOIDDalpha0 = value->rValue; mod->B3SOIDDalpha0Given = TRUE; break; case B3SOIDD_MOD_ALPHA1 : mod->B3SOIDDalpha1 = value->rValue; mod->B3SOIDDalpha1Given = TRUE; break; case B3SOIDD_MOD_BETA0 : mod->B3SOIDDbeta0 = value->rValue; mod->B3SOIDDbeta0Given = TRUE; break; case B3SOIDD_MOD_CGSL : mod->B3SOIDDcgsl = value->rValue; mod->B3SOIDDcgslGiven = TRUE; break; case B3SOIDD_MOD_CGDL : mod->B3SOIDDcgdl = value->rValue; mod->B3SOIDDcgdlGiven = TRUE; break; case B3SOIDD_MOD_CKAPPA : mod->B3SOIDDckappa = value->rValue; mod->B3SOIDDckappaGiven = TRUE; break; case B3SOIDD_MOD_CF : mod->B3SOIDDcf = value->rValue; mod->B3SOIDDcfGiven = TRUE; break; case B3SOIDD_MOD_CLC : mod->B3SOIDDclc = value->rValue; mod->B3SOIDDclcGiven = TRUE; break; case B3SOIDD_MOD_CLE : mod->B3SOIDDcle = value->rValue; mod->B3SOIDDcleGiven = TRUE; break; case B3SOIDD_MOD_DWC : mod->B3SOIDDdwc = value->rValue; mod->B3SOIDDdwcGiven = TRUE; break; case B3SOIDD_MOD_DLC : mod->B3SOIDDdlc = value->rValue; mod->B3SOIDDdlcGiven = TRUE; break; case B3SOIDD_MOD_TBOX : mod->B3SOIDDtbox = value->rValue; mod->B3SOIDDtboxGiven = TRUE; break; case B3SOIDD_MOD_TSI : mod->B3SOIDDtsi = value->rValue; mod->B3SOIDDtsiGiven = TRUE; break; case B3SOIDD_MOD_XJ : mod->B3SOIDDxj = value->rValue; mod->B3SOIDDxjGiven = TRUE; break; case B3SOIDD_MOD_KB1 : mod->B3SOIDDkb1 = value->rValue; mod->B3SOIDDkb1Given = TRUE; break; case B3SOIDD_MOD_KB3 : mod->B3SOIDDkb3 = value->rValue; mod->B3SOIDDkb3Given = TRUE; break; case B3SOIDD_MOD_DVBD0 : mod->B3SOIDDdvbd0 = value->rValue; mod->B3SOIDDdvbd0Given = TRUE; break; case B3SOIDD_MOD_DVBD1 : mod->B3SOIDDdvbd1 = value->rValue; mod->B3SOIDDdvbd1Given = TRUE; break; case B3SOIDD_MOD_DELP : mod->B3SOIDDdelp = value->rValue; mod->B3SOIDDdelpGiven = TRUE; break; case B3SOIDD_MOD_VBSA : mod->B3SOIDDvbsa = value->rValue; mod->B3SOIDDvbsaGiven = TRUE; break; case B3SOIDD_MOD_RBODY : mod->B3SOIDDrbody = value->rValue; mod->B3SOIDDrbodyGiven = TRUE; break; case B3SOIDD_MOD_RBSH : mod->B3SOIDDrbsh = value->rValue; mod->B3SOIDDrbshGiven = TRUE; break; case B3SOIDD_MOD_ADICE0 : mod->B3SOIDDadice0 = value->rValue; mod->B3SOIDDadice0Given = TRUE; break; case B3SOIDD_MOD_ABP : mod->B3SOIDDabp = value->rValue; mod->B3SOIDDabpGiven = TRUE; break; case B3SOIDD_MOD_MXC : mod->B3SOIDDmxc = value->rValue; mod->B3SOIDDmxcGiven = TRUE; break; case B3SOIDD_MOD_RTH0 : mod->B3SOIDDrth0 = value->rValue; mod->B3SOIDDrth0Given = TRUE; break; case B3SOIDD_MOD_CTH0 : mod->B3SOIDDcth0 = value->rValue; mod->B3SOIDDcth0Given = TRUE; break; case B3SOIDD_MOD_AII : mod->B3SOIDDaii = value->rValue; mod->B3SOIDDaiiGiven = TRUE; break; case B3SOIDD_MOD_BII : mod->B3SOIDDbii = value->rValue; mod->B3SOIDDbiiGiven = TRUE; break; case B3SOIDD_MOD_CII : mod->B3SOIDDcii = value->rValue; mod->B3SOIDDciiGiven = TRUE; break; case B3SOIDD_MOD_DII : mod->B3SOIDDdii = value->rValue; mod->B3SOIDDdiiGiven = TRUE; break; case B3SOIDD_MOD_NGIDL : mod->B3SOIDDngidl = value->rValue; mod->B3SOIDDngidlGiven = TRUE; break; case B3SOIDD_MOD_AGIDL : mod->B3SOIDDagidl = value->rValue; mod->B3SOIDDagidlGiven = TRUE; break; case B3SOIDD_MOD_BGIDL : mod->B3SOIDDbgidl = value->rValue; mod->B3SOIDDbgidlGiven = TRUE; break; case B3SOIDD_MOD_NDIODE : mod->B3SOIDDndiode = value->rValue; mod->B3SOIDDndiodeGiven = TRUE; break; case B3SOIDD_MOD_NTUN : mod->B3SOIDDntun = value->rValue; mod->B3SOIDDntunGiven = TRUE; break; case B3SOIDD_MOD_ISBJT : mod->B3SOIDDisbjt = value->rValue; mod->B3SOIDDisbjtGiven = TRUE; break; case B3SOIDD_MOD_ISDIF : mod->B3SOIDDisdif = value->rValue; mod->B3SOIDDisdifGiven = TRUE; break; case B3SOIDD_MOD_ISREC : mod->B3SOIDDisrec = value->rValue; mod->B3SOIDDisrecGiven = TRUE; break; case B3SOIDD_MOD_ISTUN : mod->B3SOIDDistun = value->rValue; mod->B3SOIDDistunGiven = TRUE; break; case B3SOIDD_MOD_XBJT : mod->B3SOIDDxbjt = value->rValue; mod->B3SOIDDxbjtGiven = TRUE; break; case B3SOIDD_MOD_XREC : mod->B3SOIDDxrec = value->rValue; mod->B3SOIDDxrecGiven = TRUE; break; case B3SOIDD_MOD_XTUN : mod->B3SOIDDxtun = value->rValue; mod->B3SOIDDxtunGiven = TRUE; break; case B3SOIDD_MOD_EDL : mod->B3SOIDDedl = value->rValue; mod->B3SOIDDedlGiven = TRUE; break; case B3SOIDD_MOD_KBJT1 : mod->B3SOIDDkbjt1 = value->rValue; mod->B3SOIDDkbjt1Given = TRUE; break; case B3SOIDD_MOD_TT : mod->B3SOIDDtt = value->rValue; mod->B3SOIDDttGiven = TRUE; break; case B3SOIDD_MOD_VSDTH : mod->B3SOIDDvsdth = value->rValue; mod->B3SOIDDvsdthGiven = TRUE; break; case B3SOIDD_MOD_VSDFB : mod->B3SOIDDvsdfb = value->rValue; mod->B3SOIDDvsdfbGiven = TRUE; break; case B3SOIDD_MOD_CSDMIN : mod->B3SOIDDcsdmin = value->rValue; mod->B3SOIDDcsdminGiven = TRUE; break; case B3SOIDD_MOD_ASD : mod->B3SOIDDasd = value->rValue; mod->B3SOIDDasdGiven = TRUE; break; case B3SOIDD_MOD_TNOM : mod->B3SOIDDtnom = value->rValue + 273.15; mod->B3SOIDDtnomGiven = TRUE; break; case B3SOIDD_MOD_CGSO : mod->B3SOIDDcgso = value->rValue; mod->B3SOIDDcgsoGiven = TRUE; break; case B3SOIDD_MOD_CGDO : mod->B3SOIDDcgdo = value->rValue; mod->B3SOIDDcgdoGiven = TRUE; break; case B3SOIDD_MOD_CGEO : mod->B3SOIDDcgeo = value->rValue; mod->B3SOIDDcgeoGiven = TRUE; break; case B3SOIDD_MOD_XPART : mod->B3SOIDDxpart = value->rValue; mod->B3SOIDDxpartGiven = TRUE; break; case B3SOIDD_MOD_RSH : mod->B3SOIDDsheetResistance = value->rValue; mod->B3SOIDDsheetResistanceGiven = TRUE; break; case B3SOIDD_MOD_PBSWG : mod->B3SOIDDGatesidewallJctPotential = value->rValue; mod->B3SOIDDGatesidewallJctPotentialGiven = TRUE; break; case B3SOIDD_MOD_MJSWG : mod->B3SOIDDbodyJctGateSideGradingCoeff = value->rValue; mod->B3SOIDDbodyJctGateSideGradingCoeffGiven = TRUE; break; case B3SOIDD_MOD_CJSWG : mod->B3SOIDDunitLengthGateSidewallJctCap = value->rValue; mod->B3SOIDDunitLengthGateSidewallJctCapGiven = TRUE; break; case B3SOIDD_MOD_CSDESW : mod->B3SOIDDcsdesw = value->rValue; mod->B3SOIDDcsdeswGiven = TRUE; break; case B3SOIDD_MOD_LINT : mod->B3SOIDDLint = value->rValue; mod->B3SOIDDLintGiven = TRUE; break; case B3SOIDD_MOD_LL : mod->B3SOIDDLl = value->rValue; mod->B3SOIDDLlGiven = TRUE; break; case B3SOIDD_MOD_LLN : mod->B3SOIDDLln = value->rValue; mod->B3SOIDDLlnGiven = TRUE; break; case B3SOIDD_MOD_LW : mod->B3SOIDDLw = value->rValue; mod->B3SOIDDLwGiven = TRUE; break; case B3SOIDD_MOD_LWN : mod->B3SOIDDLwn = value->rValue; mod->B3SOIDDLwnGiven = TRUE; break; case B3SOIDD_MOD_LWL : mod->B3SOIDDLwl = value->rValue; mod->B3SOIDDLwlGiven = TRUE; break; case B3SOIDD_MOD_WINT : mod->B3SOIDDWint = value->rValue; mod->B3SOIDDWintGiven = TRUE; break; case B3SOIDD_MOD_WL : mod->B3SOIDDWl = value->rValue; mod->B3SOIDDWlGiven = TRUE; break; case B3SOIDD_MOD_WLN : mod->B3SOIDDWln = value->rValue; mod->B3SOIDDWlnGiven = TRUE; break; case B3SOIDD_MOD_WW : mod->B3SOIDDWw = value->rValue; mod->B3SOIDDWwGiven = TRUE; break; case B3SOIDD_MOD_WWN : mod->B3SOIDDWwn = value->rValue; mod->B3SOIDDWwnGiven = TRUE; break; case B3SOIDD_MOD_WWL : mod->B3SOIDDWwl = value->rValue; mod->B3SOIDDWwlGiven = TRUE; break; case B3SOIDD_MOD_NOIA : mod->B3SOIDDoxideTrapDensityA = value->rValue; mod->B3SOIDDoxideTrapDensityAGiven = TRUE; break; case B3SOIDD_MOD_NOIB : mod->B3SOIDDoxideTrapDensityB = value->rValue; mod->B3SOIDDoxideTrapDensityBGiven = TRUE; break; case B3SOIDD_MOD_NOIC : mod->B3SOIDDoxideTrapDensityC = value->rValue; mod->B3SOIDDoxideTrapDensityCGiven = TRUE; break; case B3SOIDD_MOD_NOIF : mod->B3SOIDDnoif = value->rValue; mod->B3SOIDDnoifGiven = TRUE; break; case B3SOIDD_MOD_EM : mod->B3SOIDDem = value->rValue; mod->B3SOIDDemGiven = TRUE; break; case B3SOIDD_MOD_EF : mod->B3SOIDDef = value->rValue; mod->B3SOIDDefGiven = TRUE; break; case B3SOIDD_MOD_AF : mod->B3SOIDDaf = value->rValue; mod->B3SOIDDafGiven = TRUE; break; case B3SOIDD_MOD_KF : mod->B3SOIDDkf = value->rValue; mod->B3SOIDDkfGiven = TRUE; break; /* Added for binning - START */ /* Length Dependence */ case B3SOIDD_MOD_LNPEAK: mod->B3SOIDDlnpeak = value->rValue; mod->B3SOIDDlnpeakGiven = TRUE; break; case B3SOIDD_MOD_LNSUB: mod->B3SOIDDlnsub = value->rValue; mod->B3SOIDDlnsubGiven = TRUE; break; case B3SOIDD_MOD_LNGATE: mod->B3SOIDDlngate = value->rValue; mod->B3SOIDDlngateGiven = TRUE; break; case B3SOIDD_MOD_LVTH0: mod->B3SOIDDlvth0 = value->rValue; mod->B3SOIDDlvth0Given = TRUE; break; case B3SOIDD_MOD_LK1: mod->B3SOIDDlk1 = value->rValue; mod->B3SOIDDlk1Given = TRUE; break; case B3SOIDD_MOD_LK2: mod->B3SOIDDlk2 = value->rValue; mod->B3SOIDDlk2Given = TRUE; break; case B3SOIDD_MOD_LK3: mod->B3SOIDDlk3 = value->rValue; mod->B3SOIDDlk3Given = TRUE; break; case B3SOIDD_MOD_LK3B: mod->B3SOIDDlk3b = value->rValue; mod->B3SOIDDlk3bGiven = TRUE; break; case B3SOIDD_MOD_LVBSA: mod->B3SOIDDlvbsa = value->rValue; mod->B3SOIDDlvbsaGiven = TRUE; break; case B3SOIDD_MOD_LDELP: mod->B3SOIDDldelp = value->rValue; mod->B3SOIDDldelpGiven = TRUE; break; case B3SOIDD_MOD_LKB1 : mod->B3SOIDDlkb1 = value->rValue; mod->B3SOIDDlkb1Given = TRUE; break; case B3SOIDD_MOD_LKB3 : mod->B3SOIDDlkb3 = value->rValue; mod->B3SOIDDlkb3Given = TRUE; break; case B3SOIDD_MOD_LDVBD0 : mod->B3SOIDDldvbd0 = value->rValue; mod->B3SOIDDldvbd0Given = TRUE; break; case B3SOIDD_MOD_LDVBD1 : mod->B3SOIDDldvbd1 = value->rValue; mod->B3SOIDDldvbd1Given = TRUE; break; case B3SOIDD_MOD_LW0: mod->B3SOIDDlw0 = value->rValue; mod->B3SOIDDlw0Given = TRUE; break; case B3SOIDD_MOD_LNLX: mod->B3SOIDDlnlx = value->rValue; mod->B3SOIDDlnlxGiven = TRUE; break; case B3SOIDD_MOD_LDVT0: mod->B3SOIDDldvt0 = value->rValue; mod->B3SOIDDldvt0Given = TRUE; break; case B3SOIDD_MOD_LDVT1: mod->B3SOIDDldvt1 = value->rValue; mod->B3SOIDDldvt1Given = TRUE; break; case B3SOIDD_MOD_LDVT2: mod->B3SOIDDldvt2 = value->rValue; mod->B3SOIDDldvt2Given = TRUE; break; case B3SOIDD_MOD_LDVT0W: mod->B3SOIDDldvt0w = value->rValue; mod->B3SOIDDldvt0wGiven = TRUE; break; case B3SOIDD_MOD_LDVT1W: mod->B3SOIDDldvt1w = value->rValue; mod->B3SOIDDldvt1wGiven = TRUE; break; case B3SOIDD_MOD_LDVT2W: mod->B3SOIDDldvt2w = value->rValue; mod->B3SOIDDldvt2wGiven = TRUE; break; case B3SOIDD_MOD_LU0 : mod->B3SOIDDlu0 = value->rValue; mod->B3SOIDDlu0Given = TRUE; break; case B3SOIDD_MOD_LUA: mod->B3SOIDDlua = value->rValue; mod->B3SOIDDluaGiven = TRUE; break; case B3SOIDD_MOD_LUB: mod->B3SOIDDlub = value->rValue; mod->B3SOIDDlubGiven = TRUE; break; case B3SOIDD_MOD_LUC: mod->B3SOIDDluc = value->rValue; mod->B3SOIDDlucGiven = TRUE; break; case B3SOIDD_MOD_LVSAT: mod->B3SOIDDlvsat = value->rValue; mod->B3SOIDDlvsatGiven = TRUE; break; case B3SOIDD_MOD_LA0: mod->B3SOIDDla0 = value->rValue; mod->B3SOIDDla0Given = TRUE; break; case B3SOIDD_MOD_LAGS: mod->B3SOIDDlags= value->rValue; mod->B3SOIDDlagsGiven = TRUE; break; case B3SOIDD_MOD_LB0 : mod->B3SOIDDlb0 = value->rValue; mod->B3SOIDDlb0Given = TRUE; break; case B3SOIDD_MOD_LB1 : mod->B3SOIDDlb1 = value->rValue; mod->B3SOIDDlb1Given = TRUE; break; case B3SOIDD_MOD_LKETA: mod->B3SOIDDlketa = value->rValue; mod->B3SOIDDlketaGiven = TRUE; break; case B3SOIDD_MOD_LABP: mod->B3SOIDDlabp = value->rValue; mod->B3SOIDDlabpGiven = TRUE; break; case B3SOIDD_MOD_LMXC: mod->B3SOIDDlmxc = value->rValue; mod->B3SOIDDlmxcGiven = TRUE; break; case B3SOIDD_MOD_LADICE0: mod->B3SOIDDladice0 = value->rValue; mod->B3SOIDDladice0Given = TRUE; break; case B3SOIDD_MOD_LA1: mod->B3SOIDDla1 = value->rValue; mod->B3SOIDDla1Given = TRUE; break; case B3SOIDD_MOD_LA2: mod->B3SOIDDla2 = value->rValue; mod->B3SOIDDla2Given = TRUE; break; case B3SOIDD_MOD_LRDSW: mod->B3SOIDDlrdsw = value->rValue; mod->B3SOIDDlrdswGiven = TRUE; break; case B3SOIDD_MOD_LPRWB: mod->B3SOIDDlprwb = value->rValue; mod->B3SOIDDlprwbGiven = TRUE; break; case B3SOIDD_MOD_LPRWG: mod->B3SOIDDlprwg = value->rValue; mod->B3SOIDDlprwgGiven = TRUE; break; case B3SOIDD_MOD_LWR : mod->B3SOIDDlwr = value->rValue; mod->B3SOIDDlwrGiven = TRUE; break; case B3SOIDD_MOD_LNFACTOR : mod->B3SOIDDlnfactor = value->rValue; mod->B3SOIDDlnfactorGiven = TRUE; break; case B3SOIDD_MOD_LDWG : mod->B3SOIDDldwg = value->rValue; mod->B3SOIDDldwgGiven = TRUE; break; case B3SOIDD_MOD_LDWB : mod->B3SOIDDldwb = value->rValue; mod->B3SOIDDldwbGiven = TRUE; break; case B3SOIDD_MOD_LVOFF: mod->B3SOIDDlvoff = value->rValue; mod->B3SOIDDlvoffGiven = TRUE; break; case B3SOIDD_MOD_LETA0: mod->B3SOIDDleta0 = value->rValue; mod->B3SOIDDleta0Given = TRUE; break; case B3SOIDD_MOD_LETAB: mod->B3SOIDDletab = value->rValue; mod->B3SOIDDletabGiven = TRUE; break; case B3SOIDD_MOD_LDSUB: mod->B3SOIDDldsub = value->rValue; mod->B3SOIDDldsubGiven = TRUE; break; case B3SOIDD_MOD_LCIT : mod->B3SOIDDlcit = value->rValue; mod->B3SOIDDlcitGiven = TRUE; break; case B3SOIDD_MOD_LCDSC : mod->B3SOIDDlcdsc = value->rValue; mod->B3SOIDDlcdscGiven = TRUE; break; case B3SOIDD_MOD_LCDSCB : mod->B3SOIDDlcdscb = value->rValue; mod->B3SOIDDlcdscbGiven = TRUE; break; case B3SOIDD_MOD_LCDSCD : mod->B3SOIDDlcdscd = value->rValue; mod->B3SOIDDlcdscdGiven = TRUE; break; case B3SOIDD_MOD_LPCLM: mod->B3SOIDDlpclm = value->rValue; mod->B3SOIDDlpclmGiven = TRUE; break; case B3SOIDD_MOD_LPDIBL1: mod->B3SOIDDlpdibl1 = value->rValue; mod->B3SOIDDlpdibl1Given = TRUE; break; case B3SOIDD_MOD_LPDIBL2: mod->B3SOIDDlpdibl2 = value->rValue; mod->B3SOIDDlpdibl2Given = TRUE; break; case B3SOIDD_MOD_LPDIBLB: mod->B3SOIDDlpdiblb = value->rValue; mod->B3SOIDDlpdiblbGiven = TRUE; break; case B3SOIDD_MOD_LDROUT: mod->B3SOIDDldrout = value->rValue; mod->B3SOIDDldroutGiven = TRUE; break; case B3SOIDD_MOD_LPVAG: mod->B3SOIDDlpvag = value->rValue; mod->B3SOIDDlpvagGiven = TRUE; break; case B3SOIDD_MOD_LDELTA : mod->B3SOIDDldelta = value->rValue; mod->B3SOIDDldeltaGiven = TRUE; break; case B3SOIDD_MOD_LAII : mod->B3SOIDDlaii = value->rValue; mod->B3SOIDDlaiiGiven = TRUE; break; case B3SOIDD_MOD_LBII : mod->B3SOIDDlbii = value->rValue; mod->B3SOIDDlbiiGiven = TRUE; break; case B3SOIDD_MOD_LCII : mod->B3SOIDDlcii = value->rValue; mod->B3SOIDDlciiGiven = TRUE; break; case B3SOIDD_MOD_LDII : mod->B3SOIDDldii = value->rValue; mod->B3SOIDDldiiGiven = TRUE; break; case B3SOIDD_MOD_LALPHA0 : mod->B3SOIDDlalpha0 = value->rValue; mod->B3SOIDDlalpha0Given = TRUE; break; case B3SOIDD_MOD_LALPHA1 : mod->B3SOIDDlalpha1 = value->rValue; mod->B3SOIDDlalpha1Given = TRUE; break; case B3SOIDD_MOD_LBETA0 : mod->B3SOIDDlbeta0 = value->rValue; mod->B3SOIDDlbeta0Given = TRUE; break; case B3SOIDD_MOD_LAGIDL : mod->B3SOIDDlagidl = value->rValue; mod->B3SOIDDlagidlGiven = TRUE; break; case B3SOIDD_MOD_LBGIDL : mod->B3SOIDDlbgidl = value->rValue; mod->B3SOIDDlbgidlGiven = TRUE; break; case B3SOIDD_MOD_LNGIDL : mod->B3SOIDDlngidl = value->rValue; mod->B3SOIDDlngidlGiven = TRUE; break; case B3SOIDD_MOD_LNTUN : mod->B3SOIDDlntun = value->rValue; mod->B3SOIDDlntunGiven = TRUE; break; case B3SOIDD_MOD_LNDIODE : mod->B3SOIDDlndiode = value->rValue; mod->B3SOIDDlndiodeGiven = TRUE; break; case B3SOIDD_MOD_LISBJT : mod->B3SOIDDlisbjt = value->rValue; mod->B3SOIDDlisbjtGiven = TRUE; break; case B3SOIDD_MOD_LISDIF : mod->B3SOIDDlisdif = value->rValue; mod->B3SOIDDlisdifGiven = TRUE; break; case B3SOIDD_MOD_LISREC : mod->B3SOIDDlisrec = value->rValue; mod->B3SOIDDlisrecGiven = TRUE; break; case B3SOIDD_MOD_LISTUN : mod->B3SOIDDlistun = value->rValue; mod->B3SOIDDlistunGiven = TRUE; break; case B3SOIDD_MOD_LEDL : mod->B3SOIDDledl = value->rValue; mod->B3SOIDDledlGiven = TRUE; break; case B3SOIDD_MOD_LKBJT1 : mod->B3SOIDDlkbjt1 = value->rValue; mod->B3SOIDDlkbjt1Given = TRUE; break; /* CV Model */ case B3SOIDD_MOD_LVSDFB : mod->B3SOIDDlvsdfb = value->rValue; mod->B3SOIDDlvsdfbGiven = TRUE; break; case B3SOIDD_MOD_LVSDTH : mod->B3SOIDDlvsdth = value->rValue; mod->B3SOIDDlvsdthGiven = TRUE; break; /* Width Dependence */ case B3SOIDD_MOD_WNPEAK: mod->B3SOIDDwnpeak = value->rValue; mod->B3SOIDDwnpeakGiven = TRUE; break; case B3SOIDD_MOD_WNSUB: mod->B3SOIDDwnsub = value->rValue; mod->B3SOIDDwnsubGiven = TRUE; break; case B3SOIDD_MOD_WNGATE: mod->B3SOIDDwngate = value->rValue; mod->B3SOIDDwngateGiven = TRUE; break; case B3SOIDD_MOD_WVTH0: mod->B3SOIDDwvth0 = value->rValue; mod->B3SOIDDwvth0Given = TRUE; break; case B3SOIDD_MOD_WK1: mod->B3SOIDDwk1 = value->rValue; mod->B3SOIDDwk1Given = TRUE; break; case B3SOIDD_MOD_WK2: mod->B3SOIDDwk2 = value->rValue; mod->B3SOIDDwk2Given = TRUE; break; case B3SOIDD_MOD_WK3: mod->B3SOIDDwk3 = value->rValue; mod->B3SOIDDwk3Given = TRUE; break; case B3SOIDD_MOD_WK3B: mod->B3SOIDDwk3b = value->rValue; mod->B3SOIDDwk3bGiven = TRUE; break; case B3SOIDD_MOD_WVBSA: mod->B3SOIDDwvbsa = value->rValue; mod->B3SOIDDwvbsaGiven = TRUE; break; case B3SOIDD_MOD_WDELP: mod->B3SOIDDwdelp = value->rValue; mod->B3SOIDDwdelpGiven = TRUE; break; case B3SOIDD_MOD_WKB1 : mod->B3SOIDDwkb1 = value->rValue; mod->B3SOIDDwkb1Given = TRUE; break; case B3SOIDD_MOD_WKB3 : mod->B3SOIDDwkb3 = value->rValue; mod->B3SOIDDwkb3Given = TRUE; break; case B3SOIDD_MOD_WDVBD0 : mod->B3SOIDDwdvbd0 = value->rValue; mod->B3SOIDDwdvbd0Given = TRUE; break; case B3SOIDD_MOD_WDVBD1 : mod->B3SOIDDwdvbd1 = value->rValue; mod->B3SOIDDwdvbd1Given = TRUE; break; case B3SOIDD_MOD_WW0: mod->B3SOIDDww0 = value->rValue; mod->B3SOIDDww0Given = TRUE; break; case B3SOIDD_MOD_WNLX: mod->B3SOIDDwnlx = value->rValue; mod->B3SOIDDwnlxGiven = TRUE; break; case B3SOIDD_MOD_WDVT0: mod->B3SOIDDwdvt0 = value->rValue; mod->B3SOIDDwdvt0Given = TRUE; break; case B3SOIDD_MOD_WDVT1: mod->B3SOIDDwdvt1 = value->rValue; mod->B3SOIDDwdvt1Given = TRUE; break; case B3SOIDD_MOD_WDVT2: mod->B3SOIDDwdvt2 = value->rValue; mod->B3SOIDDwdvt2Given = TRUE; break; case B3SOIDD_MOD_WDVT0W: mod->B3SOIDDwdvt0w = value->rValue; mod->B3SOIDDwdvt0wGiven = TRUE; break; case B3SOIDD_MOD_WDVT1W: mod->B3SOIDDwdvt1w = value->rValue; mod->B3SOIDDwdvt1wGiven = TRUE; break; case B3SOIDD_MOD_WDVT2W: mod->B3SOIDDwdvt2w = value->rValue; mod->B3SOIDDwdvt2wGiven = TRUE; break; case B3SOIDD_MOD_WU0 : mod->B3SOIDDwu0 = value->rValue; mod->B3SOIDDwu0Given = TRUE; break; case B3SOIDD_MOD_WUA: mod->B3SOIDDwua = value->rValue; mod->B3SOIDDwuaGiven = TRUE; break; case B3SOIDD_MOD_WUB: mod->B3SOIDDwub = value->rValue; mod->B3SOIDDwubGiven = TRUE; break; case B3SOIDD_MOD_WUC: mod->B3SOIDDwuc = value->rValue; mod->B3SOIDDwucGiven = TRUE; break; case B3SOIDD_MOD_WVSAT: mod->B3SOIDDwvsat = value->rValue; mod->B3SOIDDwvsatGiven = TRUE; break; case B3SOIDD_MOD_WA0: mod->B3SOIDDwa0 = value->rValue; mod->B3SOIDDwa0Given = TRUE; break; case B3SOIDD_MOD_WAGS: mod->B3SOIDDwags= value->rValue; mod->B3SOIDDwagsGiven = TRUE; break; case B3SOIDD_MOD_WB0 : mod->B3SOIDDwb0 = value->rValue; mod->B3SOIDDwb0Given = TRUE; break; case B3SOIDD_MOD_WB1 : mod->B3SOIDDwb1 = value->rValue; mod->B3SOIDDwb1Given = TRUE; break; case B3SOIDD_MOD_WKETA: mod->B3SOIDDwketa = value->rValue; mod->B3SOIDDwketaGiven = TRUE; break; case B3SOIDD_MOD_WABP: mod->B3SOIDDwabp = value->rValue; mod->B3SOIDDwabpGiven = TRUE; break; case B3SOIDD_MOD_WMXC: mod->B3SOIDDwmxc = value->rValue; mod->B3SOIDDwmxcGiven = TRUE; break; case B3SOIDD_MOD_WADICE0: mod->B3SOIDDwadice0 = value->rValue; mod->B3SOIDDwadice0Given = TRUE; break; case B3SOIDD_MOD_WA1: mod->B3SOIDDwa1 = value->rValue; mod->B3SOIDDwa1Given = TRUE; break; case B3SOIDD_MOD_WA2: mod->B3SOIDDwa2 = value->rValue; mod->B3SOIDDwa2Given = TRUE; break; case B3SOIDD_MOD_WRDSW: mod->B3SOIDDwrdsw = value->rValue; mod->B3SOIDDwrdswGiven = TRUE; break; case B3SOIDD_MOD_WPRWB: mod->B3SOIDDwprwb = value->rValue; mod->B3SOIDDwprwbGiven = TRUE; break; case B3SOIDD_MOD_WPRWG: mod->B3SOIDDwprwg = value->rValue; mod->B3SOIDDwprwgGiven = TRUE; break; case B3SOIDD_MOD_WWR : mod->B3SOIDDwwr = value->rValue; mod->B3SOIDDwwrGiven = TRUE; break; case B3SOIDD_MOD_WNFACTOR : mod->B3SOIDDwnfactor = value->rValue; mod->B3SOIDDwnfactorGiven = TRUE; break; case B3SOIDD_MOD_WDWG : mod->B3SOIDDwdwg = value->rValue; mod->B3SOIDDwdwgGiven = TRUE; break; case B3SOIDD_MOD_WDWB : mod->B3SOIDDwdwb = value->rValue; mod->B3SOIDDwdwbGiven = TRUE; break; case B3SOIDD_MOD_WVOFF: mod->B3SOIDDwvoff = value->rValue; mod->B3SOIDDwvoffGiven = TRUE; break; case B3SOIDD_MOD_WETA0: mod->B3SOIDDweta0 = value->rValue; mod->B3SOIDDweta0Given = TRUE; break; case B3SOIDD_MOD_WETAB: mod->B3SOIDDwetab = value->rValue; mod->B3SOIDDwetabGiven = TRUE; break; case B3SOIDD_MOD_WDSUB: mod->B3SOIDDwdsub = value->rValue; mod->B3SOIDDwdsubGiven = TRUE; break; case B3SOIDD_MOD_WCIT : mod->B3SOIDDwcit = value->rValue; mod->B3SOIDDwcitGiven = TRUE; break; case B3SOIDD_MOD_WCDSC : mod->B3SOIDDwcdsc = value->rValue; mod->B3SOIDDwcdscGiven = TRUE; break; case B3SOIDD_MOD_WCDSCB : mod->B3SOIDDwcdscb = value->rValue; mod->B3SOIDDwcdscbGiven = TRUE; break; case B3SOIDD_MOD_WCDSCD : mod->B3SOIDDwcdscd = value->rValue; mod->B3SOIDDwcdscdGiven = TRUE; break; case B3SOIDD_MOD_WPCLM: mod->B3SOIDDwpclm = value->rValue; mod->B3SOIDDwpclmGiven = TRUE; break; case B3SOIDD_MOD_WPDIBL1: mod->B3SOIDDwpdibl1 = value->rValue; mod->B3SOIDDwpdibl1Given = TRUE; break; case B3SOIDD_MOD_WPDIBL2: mod->B3SOIDDwpdibl2 = value->rValue; mod->B3SOIDDwpdibl2Given = TRUE; break; case B3SOIDD_MOD_WPDIBLB: mod->B3SOIDDwpdiblb = value->rValue; mod->B3SOIDDwpdiblbGiven = TRUE; break; case B3SOIDD_MOD_WDROUT: mod->B3SOIDDwdrout = value->rValue; mod->B3SOIDDwdroutGiven = TRUE; break; case B3SOIDD_MOD_WPVAG: mod->B3SOIDDwpvag = value->rValue; mod->B3SOIDDwpvagGiven = TRUE; break; case B3SOIDD_MOD_WDELTA : mod->B3SOIDDwdelta = value->rValue; mod->B3SOIDDwdeltaGiven = TRUE; break; case B3SOIDD_MOD_WAII : mod->B3SOIDDwaii = value->rValue; mod->B3SOIDDwaiiGiven = TRUE; break; case B3SOIDD_MOD_WBII : mod->B3SOIDDwbii = value->rValue; mod->B3SOIDDwbiiGiven = TRUE; break; case B3SOIDD_MOD_WCII : mod->B3SOIDDwcii = value->rValue; mod->B3SOIDDwciiGiven = TRUE; break; case B3SOIDD_MOD_WDII : mod->B3SOIDDwdii = value->rValue; mod->B3SOIDDwdiiGiven = TRUE; break; case B3SOIDD_MOD_WALPHA0 : mod->B3SOIDDwalpha0 = value->rValue; mod->B3SOIDDwalpha0Given = TRUE; break; case B3SOIDD_MOD_WALPHA1 : mod->B3SOIDDwalpha1 = value->rValue; mod->B3SOIDDwalpha1Given = TRUE; break; case B3SOIDD_MOD_WBETA0 : mod->B3SOIDDwbeta0 = value->rValue; mod->B3SOIDDwbeta0Given = TRUE; break; case B3SOIDD_MOD_WAGIDL : mod->B3SOIDDwagidl = value->rValue; mod->B3SOIDDwagidlGiven = TRUE; break; case B3SOIDD_MOD_WBGIDL : mod->B3SOIDDwbgidl = value->rValue; mod->B3SOIDDwbgidlGiven = TRUE; break; case B3SOIDD_MOD_WNGIDL : mod->B3SOIDDwngidl = value->rValue; mod->B3SOIDDwngidlGiven = TRUE; break; case B3SOIDD_MOD_WNTUN : mod->B3SOIDDwntun = value->rValue; mod->B3SOIDDwntunGiven = TRUE; break; case B3SOIDD_MOD_WNDIODE : mod->B3SOIDDwndiode = value->rValue; mod->B3SOIDDwndiodeGiven = TRUE; break; case B3SOIDD_MOD_WISBJT : mod->B3SOIDDwisbjt = value->rValue; mod->B3SOIDDwisbjtGiven = TRUE; break; case B3SOIDD_MOD_WISDIF : mod->B3SOIDDwisdif = value->rValue; mod->B3SOIDDwisdifGiven = TRUE; break; case B3SOIDD_MOD_WISREC : mod->B3SOIDDwisrec = value->rValue; mod->B3SOIDDwisrecGiven = TRUE; break; case B3SOIDD_MOD_WISTUN : mod->B3SOIDDwistun = value->rValue; mod->B3SOIDDwistunGiven = TRUE; break; case B3SOIDD_MOD_WEDL : mod->B3SOIDDwedl = value->rValue; mod->B3SOIDDwedlGiven = TRUE; break; case B3SOIDD_MOD_WKBJT1 : mod->B3SOIDDwkbjt1 = value->rValue; mod->B3SOIDDwkbjt1Given = TRUE; break; /* CV Model */ case B3SOIDD_MOD_WVSDFB : mod->B3SOIDDwvsdfb = value->rValue; mod->B3SOIDDwvsdfbGiven = TRUE; break; case B3SOIDD_MOD_WVSDTH : mod->B3SOIDDwvsdth = value->rValue; mod->B3SOIDDwvsdthGiven = TRUE; break; /* Cross-term Dependence */ case B3SOIDD_MOD_PNPEAK: mod->B3SOIDDpnpeak = value->rValue; mod->B3SOIDDpnpeakGiven = TRUE; break; case B3SOIDD_MOD_PNSUB: mod->B3SOIDDpnsub = value->rValue; mod->B3SOIDDpnsubGiven = TRUE; break; case B3SOIDD_MOD_PNGATE: mod->B3SOIDDpngate = value->rValue; mod->B3SOIDDpngateGiven = TRUE; break; case B3SOIDD_MOD_PVTH0: mod->B3SOIDDpvth0 = value->rValue; mod->B3SOIDDpvth0Given = TRUE; break; case B3SOIDD_MOD_PK1: mod->B3SOIDDpk1 = value->rValue; mod->B3SOIDDpk1Given = TRUE; break; case B3SOIDD_MOD_PK2: mod->B3SOIDDpk2 = value->rValue; mod->B3SOIDDpk2Given = TRUE; break; case B3SOIDD_MOD_PK3: mod->B3SOIDDpk3 = value->rValue; mod->B3SOIDDpk3Given = TRUE; break; case B3SOIDD_MOD_PK3B: mod->B3SOIDDpk3b = value->rValue; mod->B3SOIDDpk3bGiven = TRUE; break; case B3SOIDD_MOD_PVBSA: mod->B3SOIDDpvbsa = value->rValue; mod->B3SOIDDpvbsaGiven = TRUE; break; case B3SOIDD_MOD_PDELP: mod->B3SOIDDpdelp = value->rValue; mod->B3SOIDDpdelpGiven = TRUE; break; case B3SOIDD_MOD_PKB1 : mod->B3SOIDDpkb1 = value->rValue; mod->B3SOIDDpkb1Given = TRUE; break; case B3SOIDD_MOD_PKB3 : mod->B3SOIDDpkb3 = value->rValue; mod->B3SOIDDpkb3Given = TRUE; break; case B3SOIDD_MOD_PDVBD0 : mod->B3SOIDDpdvbd0 = value->rValue; mod->B3SOIDDpdvbd0Given = TRUE; break; case B3SOIDD_MOD_PDVBD1 : mod->B3SOIDDpdvbd1 = value->rValue; mod->B3SOIDDpdvbd1Given = TRUE; break; case B3SOIDD_MOD_PW0: mod->B3SOIDDpw0 = value->rValue; mod->B3SOIDDpw0Given = TRUE; break; case B3SOIDD_MOD_PNLX: mod->B3SOIDDpnlx = value->rValue; mod->B3SOIDDpnlxGiven = TRUE; break; case B3SOIDD_MOD_PDVT0: mod->B3SOIDDpdvt0 = value->rValue; mod->B3SOIDDpdvt0Given = TRUE; break; case B3SOIDD_MOD_PDVT1: mod->B3SOIDDpdvt1 = value->rValue; mod->B3SOIDDpdvt1Given = TRUE; break; case B3SOIDD_MOD_PDVT2: mod->B3SOIDDpdvt2 = value->rValue; mod->B3SOIDDpdvt2Given = TRUE; break; case B3SOIDD_MOD_PDVT0W: mod->B3SOIDDpdvt0w = value->rValue; mod->B3SOIDDpdvt0wGiven = TRUE; break; case B3SOIDD_MOD_PDVT1W: mod->B3SOIDDpdvt1w = value->rValue; mod->B3SOIDDpdvt1wGiven = TRUE; break; case B3SOIDD_MOD_PDVT2W: mod->B3SOIDDpdvt2w = value->rValue; mod->B3SOIDDpdvt2wGiven = TRUE; break; case B3SOIDD_MOD_PU0 : mod->B3SOIDDpu0 = value->rValue; mod->B3SOIDDpu0Given = TRUE; break; case B3SOIDD_MOD_PUA: mod->B3SOIDDpua = value->rValue; mod->B3SOIDDpuaGiven = TRUE; break; case B3SOIDD_MOD_PUB: mod->B3SOIDDpub = value->rValue; mod->B3SOIDDpubGiven = TRUE; break; case B3SOIDD_MOD_PUC: mod->B3SOIDDpuc = value->rValue; mod->B3SOIDDpucGiven = TRUE; break; case B3SOIDD_MOD_PVSAT: mod->B3SOIDDpvsat = value->rValue; mod->B3SOIDDpvsatGiven = TRUE; break; case B3SOIDD_MOD_PA0: mod->B3SOIDDpa0 = value->rValue; mod->B3SOIDDpa0Given = TRUE; break; case B3SOIDD_MOD_PAGS: mod->B3SOIDDpags= value->rValue; mod->B3SOIDDpagsGiven = TRUE; break; case B3SOIDD_MOD_PB0 : mod->B3SOIDDpb0 = value->rValue; mod->B3SOIDDpb0Given = TRUE; break; case B3SOIDD_MOD_PB1 : mod->B3SOIDDpb1 = value->rValue; mod->B3SOIDDpb1Given = TRUE; break; case B3SOIDD_MOD_PKETA: mod->B3SOIDDpketa = value->rValue; mod->B3SOIDDpketaGiven = TRUE; break; case B3SOIDD_MOD_PABP: mod->B3SOIDDpabp = value->rValue; mod->B3SOIDDpabpGiven = TRUE; break; case B3SOIDD_MOD_PMXC: mod->B3SOIDDpmxc = value->rValue; mod->B3SOIDDpmxcGiven = TRUE; break; case B3SOIDD_MOD_PADICE0: mod->B3SOIDDpadice0 = value->rValue; mod->B3SOIDDpadice0Given = TRUE; break; case B3SOIDD_MOD_PA1: mod->B3SOIDDpa1 = value->rValue; mod->B3SOIDDpa1Given = TRUE; break; case B3SOIDD_MOD_PA2: mod->B3SOIDDpa2 = value->rValue; mod->B3SOIDDpa2Given = TRUE; break; case B3SOIDD_MOD_PRDSW: mod->B3SOIDDprdsw = value->rValue; mod->B3SOIDDprdswGiven = TRUE; break; case B3SOIDD_MOD_PPRWB: mod->B3SOIDDpprwb = value->rValue; mod->B3SOIDDpprwbGiven = TRUE; break; case B3SOIDD_MOD_PPRWG: mod->B3SOIDDpprwg = value->rValue; mod->B3SOIDDpprwgGiven = TRUE; break; case B3SOIDD_MOD_PWR : mod->B3SOIDDpwr = value->rValue; mod->B3SOIDDpwrGiven = TRUE; break; case B3SOIDD_MOD_PNFACTOR : mod->B3SOIDDpnfactor = value->rValue; mod->B3SOIDDpnfactorGiven = TRUE; break; case B3SOIDD_MOD_PDWG : mod->B3SOIDDpdwg = value->rValue; mod->B3SOIDDpdwgGiven = TRUE; break; case B3SOIDD_MOD_PDWB : mod->B3SOIDDpdwb = value->rValue; mod->B3SOIDDpdwbGiven = TRUE; break; case B3SOIDD_MOD_PVOFF: mod->B3SOIDDpvoff = value->rValue; mod->B3SOIDDpvoffGiven = TRUE; break; case B3SOIDD_MOD_PETA0: mod->B3SOIDDpeta0 = value->rValue; mod->B3SOIDDpeta0Given = TRUE; break; case B3SOIDD_MOD_PETAB: mod->B3SOIDDpetab = value->rValue; mod->B3SOIDDpetabGiven = TRUE; break; case B3SOIDD_MOD_PDSUB: mod->B3SOIDDpdsub = value->rValue; mod->B3SOIDDpdsubGiven = TRUE; break; case B3SOIDD_MOD_PCIT : mod->B3SOIDDpcit = value->rValue; mod->B3SOIDDpcitGiven = TRUE; break; case B3SOIDD_MOD_PCDSC : mod->B3SOIDDpcdsc = value->rValue; mod->B3SOIDDpcdscGiven = TRUE; break; case B3SOIDD_MOD_PCDSCB : mod->B3SOIDDpcdscb = value->rValue; mod->B3SOIDDpcdscbGiven = TRUE; break; case B3SOIDD_MOD_PCDSCD : mod->B3SOIDDpcdscd = value->rValue; mod->B3SOIDDpcdscdGiven = TRUE; break; case B3SOIDD_MOD_PPCLM: mod->B3SOIDDppclm = value->rValue; mod->B3SOIDDppclmGiven = TRUE; break; case B3SOIDD_MOD_PPDIBL1: mod->B3SOIDDppdibl1 = value->rValue; mod->B3SOIDDppdibl1Given = TRUE; break; case B3SOIDD_MOD_PPDIBL2: mod->B3SOIDDppdibl2 = value->rValue; mod->B3SOIDDppdibl2Given = TRUE; break; case B3SOIDD_MOD_PPDIBLB: mod->B3SOIDDppdiblb = value->rValue; mod->B3SOIDDppdiblbGiven = TRUE; break; case B3SOIDD_MOD_PDROUT: mod->B3SOIDDpdrout = value->rValue; mod->B3SOIDDpdroutGiven = TRUE; break; case B3SOIDD_MOD_PPVAG: mod->B3SOIDDppvag = value->rValue; mod->B3SOIDDppvagGiven = TRUE; break; case B3SOIDD_MOD_PDELTA : mod->B3SOIDDpdelta = value->rValue; mod->B3SOIDDpdeltaGiven = TRUE; break; case B3SOIDD_MOD_PAII : mod->B3SOIDDpaii = value->rValue; mod->B3SOIDDpaiiGiven = TRUE; break; case B3SOIDD_MOD_PBII : mod->B3SOIDDpbii = value->rValue; mod->B3SOIDDpbiiGiven = TRUE; break; case B3SOIDD_MOD_PCII : mod->B3SOIDDpcii = value->rValue; mod->B3SOIDDpciiGiven = TRUE; break; case B3SOIDD_MOD_PDII : mod->B3SOIDDpdii = value->rValue; mod->B3SOIDDpdiiGiven = TRUE; break; case B3SOIDD_MOD_PALPHA0 : mod->B3SOIDDpalpha0 = value->rValue; mod->B3SOIDDpalpha0Given = TRUE; break; case B3SOIDD_MOD_PALPHA1 : mod->B3SOIDDpalpha1 = value->rValue; mod->B3SOIDDpalpha1Given = TRUE; break; case B3SOIDD_MOD_PBETA0 : mod->B3SOIDDpbeta0 = value->rValue; mod->B3SOIDDpbeta0Given = TRUE; break; case B3SOIDD_MOD_PAGIDL : mod->B3SOIDDpagidl = value->rValue; mod->B3SOIDDpagidlGiven = TRUE; break; case B3SOIDD_MOD_PBGIDL : mod->B3SOIDDpbgidl = value->rValue; mod->B3SOIDDpbgidlGiven = TRUE; break; case B3SOIDD_MOD_PNGIDL : mod->B3SOIDDpngidl = value->rValue; mod->B3SOIDDpngidlGiven = TRUE; break; case B3SOIDD_MOD_PNTUN : mod->B3SOIDDpntun = value->rValue; mod->B3SOIDDpntunGiven = TRUE; break; case B3SOIDD_MOD_PNDIODE : mod->B3SOIDDpndiode = value->rValue; mod->B3SOIDDpndiodeGiven = TRUE; break; case B3SOIDD_MOD_PISBJT : mod->B3SOIDDpisbjt = value->rValue; mod->B3SOIDDpisbjtGiven = TRUE; break; case B3SOIDD_MOD_PISDIF : mod->B3SOIDDpisdif = value->rValue; mod->B3SOIDDpisdifGiven = TRUE; break; case B3SOIDD_MOD_PISREC : mod->B3SOIDDpisrec = value->rValue; mod->B3SOIDDpisrecGiven = TRUE; break; case B3SOIDD_MOD_PISTUN : mod->B3SOIDDpistun = value->rValue; mod->B3SOIDDpistunGiven = TRUE; break; case B3SOIDD_MOD_PEDL : mod->B3SOIDDpedl = value->rValue; mod->B3SOIDDpedlGiven = TRUE; break; case B3SOIDD_MOD_PKBJT1 : mod->B3SOIDDpkbjt1 = value->rValue; mod->B3SOIDDpkbjt1Given = TRUE; break; /* CV Model */ case B3SOIDD_MOD_PVSDFB : mod->B3SOIDDpvsdfb = value->rValue; mod->B3SOIDDpvsdfbGiven = TRUE; break; case B3SOIDD_MOD_PVSDTH : mod->B3SOIDDpvsdth = value->rValue; mod->B3SOIDDpvsdthGiven = TRUE; break; /* Added for binning - END */ case B3SOIDD_MOD_NMOS : if(value->iValue) { mod->B3SOIDDtype = 1; mod->B3SOIDDtypeGiven = TRUE; } break; case B3SOIDD_MOD_PMOS : if(value->iValue) { mod->B3SOIDDtype = - 1; mod->B3SOIDDtypeGiven = TRUE; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_dd/b3soiddcheck.c0000644000175000017500000004271413546075722024063 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soiddcheck.c 98/5/01 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMDD2.1 release */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b3soidddef.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" int B3SOIDDcheckModel(B3SOIDDmodel *model, B3SOIDDinstance *here, CKTcircuit *ckt) { struct b3soiddSizeDependParam *pParam; int Fatal_Flag = 0; FILE *fplog; NG_IGNORE(ckt); if ((fplog = fopen("b3soiddv2check.log", "w")) != NULL) { pParam = here->pParam; fprintf(fplog, "B3SOI(DD)V2.1 Parameter Check\n"); fprintf(fplog, "Model = %s\n", model->B3SOIDDmodName); fprintf(fplog, "W = %g, L = %g\n, M = %g\n", here->B3SOIDDw, here->B3SOIDDl, here->B3SOIDDm); if (pParam->B3SOIDDnlx < -pParam->B3SOIDDleff) { fprintf(fplog, "Fatal: Nlx = %g is less than -Leff.\n", pParam->B3SOIDDnlx); printf("Fatal: Nlx = %g is less than -Leff.\n", pParam->B3SOIDDnlx); Fatal_Flag = 1; } if (model->B3SOIDDtox <= 0.0) { fprintf(fplog, "Fatal: Tox = %g is not positive.\n", model->B3SOIDDtox); printf("Fatal: Tox = %g is not positive.\n", model->B3SOIDDtox); Fatal_Flag = 1; } if (model->B3SOIDDtbox <= 0.0) { fprintf(fplog, "Fatal: Tbox = %g is not positive.\n", model->B3SOIDDtbox); printf("Fatal: Tbox = %g is not positive.\n", model->B3SOIDDtbox); Fatal_Flag = 1; } if (pParam->B3SOIDDnpeak <= 0.0) { fprintf(fplog, "Fatal: Nch = %g is not positive.\n", pParam->B3SOIDDnpeak); printf("Fatal: Nch = %g is not positive.\n", pParam->B3SOIDDnpeak); Fatal_Flag = 1; } if (pParam->B3SOIDDngate < 0.0) { fprintf(fplog, "Fatal: Ngate = %g is not positive.\n", pParam->B3SOIDDngate); printf("Fatal: Ngate = %g Ngate is not positive.\n", pParam->B3SOIDDngate); Fatal_Flag = 1; } if (pParam->B3SOIDDngate > 1.e25) { fprintf(fplog, "Fatal: Ngate = %g is too high.\n", pParam->B3SOIDDngate); printf("Fatal: Ngate = %g Ngate is too high\n", pParam->B3SOIDDngate); Fatal_Flag = 1; } if (model->B3SOIDDdvbd1 < 0.0) { fprintf(fplog, "Fatal: Dvbd1 = %g is negative.\n", model->B3SOIDDdvbd1); printf("Fatal: Dvbd1 = %g is negative.\n", model->B3SOIDDdvbd1); Fatal_Flag = 1; } if (pParam->B3SOIDDdvt1 < 0.0) { fprintf(fplog, "Fatal: Dvt1 = %g is negative.\n", pParam->B3SOIDDdvt1); printf("Fatal: Dvt1 = %g is negative.\n", pParam->B3SOIDDdvt1); Fatal_Flag = 1; } if (pParam->B3SOIDDdvt1w < 0.0) { fprintf(fplog, "Fatal: Dvt1w = %g is negative.\n", pParam->B3SOIDDdvt1w); printf("Fatal: Dvt1w = %g is negative.\n", pParam->B3SOIDDdvt1w); Fatal_Flag = 1; } if (pParam->B3SOIDDw0 == -pParam->B3SOIDDweff) { fprintf(fplog, "Fatal: (W0 + Weff) = 0 cauing divided-by-zero.\n"); printf("Fatal: (W0 + Weff) = 0 cauing divided-by-zero.\n"); Fatal_Flag = 1; } if (pParam->B3SOIDDdsub < 0.0) { fprintf(fplog, "Fatal: Dsub = %g is negative.\n", pParam->B3SOIDDdsub); printf("Fatal: Dsub = %g is negative.\n", pParam->B3SOIDDdsub); Fatal_Flag = 1; } if (pParam->B3SOIDDb1 == -pParam->B3SOIDDweff) { fprintf(fplog, "Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); printf("Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); Fatal_Flag = 1; } if (pParam->B3SOIDDu0temp <= 0.0) { fprintf(fplog, "Fatal: u0 at current temperature = %g is not positive.\n", pParam->B3SOIDDu0temp); printf("Fatal: u0 at current temperature = %g is not positive.\n", pParam->B3SOIDDu0temp); Fatal_Flag = 1; } /* Check delta parameter */ if (pParam->B3SOIDDdelta < 0.0) { fprintf(fplog, "Fatal: Delta = %g is less than zero.\n", pParam->B3SOIDDdelta); printf("Fatal: Delta = %g is less than zero.\n", pParam->B3SOIDDdelta); Fatal_Flag = 1; } if (pParam->B3SOIDDvsattemp <= 0.0) { fprintf(fplog, "Fatal: Vsat at current temperature = %g is not positive.\n", pParam->B3SOIDDvsattemp); printf("Fatal: Vsat at current temperature = %g is not positive.\n", pParam->B3SOIDDvsattemp); Fatal_Flag = 1; } /* Check Rout parameters */ if (pParam->B3SOIDDpclm <= 0.0) { fprintf(fplog, "Fatal: Pclm = %g is not positive.\n", pParam->B3SOIDDpclm); printf("Fatal: Pclm = %g is not positive.\n", pParam->B3SOIDDpclm); Fatal_Flag = 1; } if (pParam->B3SOIDDdrout < 0.0) { fprintf(fplog, "Fatal: Drout = %g is negative.\n", pParam->B3SOIDDdrout); printf("Fatal: Drout = %g is negative.\n", pParam->B3SOIDDdrout); Fatal_Flag = 1; } if ( model->B3SOIDDunitLengthGateSidewallJctCap > 0.0) { if (here->B3SOIDDdrainPerimeter < pParam->B3SOIDDweff) { fprintf(fplog, "Warning: Pd = %g is less than W.\n", here->B3SOIDDdrainPerimeter); printf("Warning: Pd = %g is less than W.\n", here->B3SOIDDdrainPerimeter); here->B3SOIDDdrainPerimeter =pParam->B3SOIDDweff; } if (here->B3SOIDDsourcePerimeter < pParam->B3SOIDDweff) { fprintf(fplog, "Warning: Ps = %g is less than W.\n", here->B3SOIDDsourcePerimeter); printf("Warning: Ps = %g is less than W.\n", here->B3SOIDDsourcePerimeter); here->B3SOIDDsourcePerimeter =pParam->B3SOIDDweff; } } /* Check capacitance parameters */ if (pParam->B3SOIDDclc < 0.0) { fprintf(fplog, "Fatal: Clc = %g is negative.\n", pParam->B3SOIDDclc); printf("Fatal: Clc = %g is negative.\n", pParam->B3SOIDDclc); Fatal_Flag = 1; } if (model->B3SOIDDparamChk ==1) { /* Check L and W parameters */ if (pParam->B3SOIDDleff <= 5.0e-8) { fprintf(fplog, "Warning: Leff = %g may be too small.\n", pParam->B3SOIDDleff); printf("Warning: Leff = %g may be too small.\n", pParam->B3SOIDDleff); } if (pParam->B3SOIDDleffCV <= 5.0e-8) { fprintf(fplog, "Warning: Leff for CV = %g may be too small.\n", pParam->B3SOIDDleffCV); printf("Warning: Leff for CV = %g may be too small.\n", pParam->B3SOIDDleffCV); } if (pParam->B3SOIDDweff <= 1.0e-7) { fprintf(fplog, "Warning: Weff = %g may be too small.\n", pParam->B3SOIDDweff); printf("Warning: Weff = %g may be too small.\n", pParam->B3SOIDDweff); } if (pParam->B3SOIDDweffCV <= 1.0e-7) { fprintf(fplog, "Warning: Weff for CV = %g may be too small.\n", pParam->B3SOIDDweffCV); printf("Warning: Weff for CV = %g may be too small.\n", pParam->B3SOIDDweffCV); } /* Check threshold voltage parameters */ if (pParam->B3SOIDDnlx < 0.0) { fprintf(fplog, "Warning: Nlx = %g is negative.\n", pParam->B3SOIDDnlx); printf("Warning: Nlx = %g is negative.\n", pParam->B3SOIDDnlx); } if (model->B3SOIDDtox < 1.0e-9) { fprintf(fplog, "Warning: Tox = %g is less than 10A.\n", model->B3SOIDDtox); printf("Warning: Tox = %g is less than 10A.\n", model->B3SOIDDtox); } if (pParam->B3SOIDDnpeak <= 1.0e15) { fprintf(fplog, "Warning: Nch = %g may be too small.\n", pParam->B3SOIDDnpeak); printf("Warning: Nch = %g may be too small.\n", pParam->B3SOIDDnpeak); } else if (pParam->B3SOIDDnpeak >= 1.0e21) { fprintf(fplog, "Warning: Nch = %g may be too large.\n", pParam->B3SOIDDnpeak); printf("Warning: Nch = %g may be too large.\n", pParam->B3SOIDDnpeak); } if (fabs(pParam->B3SOIDDnsub) >= 1.0e21) { fprintf(fplog, "Warning: Nsub = %g may be too large.\n", pParam->B3SOIDDnsub); printf("Warning: Nsub = %g may be too large.\n", pParam->B3SOIDDnsub); } if ((pParam->B3SOIDDngate > 0.0) && (pParam->B3SOIDDngate <= 1.e18)) { fprintf(fplog, "Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->B3SOIDDngate); printf("Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->B3SOIDDngate); } if (model->B3SOIDDdvbd0 < 0.0) { fprintf(fplog, "Warning: Dvbd0 = %g is negative.\n", model->B3SOIDDdvbd0); printf("Warning: Dvbd0 = %g is negative.\n", model->B3SOIDDdvbd0); } if (pParam->B3SOIDDdvt0 < 0.0) { fprintf(fplog, "Warning: Dvt0 = %g is negative.\n", pParam->B3SOIDDdvt0); printf("Warning: Dvt0 = %g is negative.\n", pParam->B3SOIDDdvt0); } if (fabs(1.0e-6 / (pParam->B3SOIDDw0 + pParam->B3SOIDDweff)) > 10.0) { fprintf(fplog, "Warning: (W0 + Weff) may be too small.\n"); printf("Warning: (W0 + Weff) may be too small.\n"); } /* Check subthreshold parameters */ if (pParam->B3SOIDDnfactor < 0.0) { fprintf(fplog, "Warning: Nfactor = %g is negative.\n", pParam->B3SOIDDnfactor); printf("Warning: Nfactor = %g is negative.\n", pParam->B3SOIDDnfactor); } if (model->B3SOIDDkb3 < 0.0) { fprintf(fplog, "Warning: Kb3 = %g is negative.\n", model->B3SOIDDkb3); printf("Warning: Kb3 = %g is negative.\n", model->B3SOIDDkb3); } if (pParam->B3SOIDDcdsc < 0.0) { fprintf(fplog, "Warning: Cdsc = %g is negative.\n", pParam->B3SOIDDcdsc); printf("Warning: Cdsc = %g is negative.\n", pParam->B3SOIDDcdsc); } if (pParam->B3SOIDDcdscd < 0.0) { fprintf(fplog, "Warning: Cdscd = %g is negative.\n", pParam->B3SOIDDcdscd); printf("Warning: Cdscd = %g is negative.\n", pParam->B3SOIDDcdscd); } /* Check DIBL parameters */ if (pParam->B3SOIDDeta0 < 0.0) { fprintf(fplog, "Warning: Eta0 = %g is negative.\n", pParam->B3SOIDDeta0); printf("Warning: Eta0 = %g is negative.\n", pParam->B3SOIDDeta0); } /* Check Abulk parameters */ if (fabs(1.0e-6 / (pParam->B3SOIDDb1 + pParam->B3SOIDDweff)) > 10.0) { fprintf(fplog, "Warning: (B1 + Weff) may be too small.\n"); printf("Warning: (B1 + Weff) may be too small.\n"); } if (model->B3SOIDDadice0 > 1.0) { fprintf(fplog, "Warning: Adice0 = %g should be smaller than 1.\n", model->B3SOIDDadice0); printf("Warning: Adice0 = %g should be smaller than 1.\n", model->B3SOIDDadice0); } if (model->B3SOIDDabp < 0.2) { fprintf(fplog, "Warning: Abp = %g is too small.\n", model->B3SOIDDabp); printf("Warning: Abp = %g is too small.\n", model->B3SOIDDabp); } if ((model->B3SOIDDmxc < -1.0) || (model->B3SOIDDmxc > 1.0)) { fprintf(fplog, "Warning: Mxc = %g should be within (-1, 1).\n", model->B3SOIDDmxc); printf("Warning: Mxc = %g should be within (-1, 1).\n", model->B3SOIDDmxc); } /* Check Saturation parameters */ if (pParam->B3SOIDDa2 < 0.01) { fprintf(fplog, "Warning: A2 = %g is too small. Set to 0.01.\n", pParam->B3SOIDDa2); printf("Warning: A2 = %g is too small. Set to 0.01.\n", pParam->B3SOIDDa2); pParam->B3SOIDDa2 = 0.01; } else if (pParam->B3SOIDDa2 > 1.0) { fprintf(fplog, "Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->B3SOIDDa2); printf("Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->B3SOIDDa2); pParam->B3SOIDDa2 = 1.0; pParam->B3SOIDDa1 = 0.0; } if (pParam->B3SOIDDrdsw < 0.0) { fprintf(fplog, "Warning: Rdsw = %g is negative. Set to zero.\n", pParam->B3SOIDDrdsw); printf("Warning: Rdsw = %g is negative. Set to zero.\n", pParam->B3SOIDDrdsw); pParam->B3SOIDDrdsw = 0.0; pParam->B3SOIDDrds0 = 0.0; } else if ((pParam->B3SOIDDrds0 > 0.0) && (pParam->B3SOIDDrds0 < 0.001)) { fprintf(fplog, "Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n", pParam->B3SOIDDrds0); printf("Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n", pParam->B3SOIDDrds0); pParam->B3SOIDDrds0 = 0.0; } if (pParam->B3SOIDDvsattemp < 1.0e3) { fprintf(fplog, "Warning: Vsat at current temperature = %g may be too small.\n", pParam->B3SOIDDvsattemp); printf("Warning: Vsat at current temperature = %g may be too small.\n", pParam->B3SOIDDvsattemp); } if (pParam->B3SOIDDpdibl1 < 0.0) { fprintf(fplog, "Warning: Pdibl1 = %g is negative.\n", pParam->B3SOIDDpdibl1); printf("Warning: Pdibl1 = %g is negative.\n", pParam->B3SOIDDpdibl1); } if (pParam->B3SOIDDpdibl2 < 0.0) { fprintf(fplog, "Warning: Pdibl2 = %g is negative.\n", pParam->B3SOIDDpdibl2); printf("Warning: Pdibl2 = %g is negative.\n", pParam->B3SOIDDpdibl2); } /* Check overlap capacitance parameters */ if (model->B3SOIDDcgdo < 0.0) { fprintf(fplog, "Warning: cgdo = %g is negative. Set to zero.\n", model->B3SOIDDcgdo); printf("Warning: cgdo = %g is negative. Set to zero.\n", model->B3SOIDDcgdo); model->B3SOIDDcgdo = 0.0; } if (model->B3SOIDDcgso < 0.0) { fprintf(fplog, "Warning: cgso = %g is negative. Set to zero.\n", model->B3SOIDDcgso); printf("Warning: cgso = %g is negative. Set to zero.\n", model->B3SOIDDcgso); model->B3SOIDDcgso = 0.0; } if (model->B3SOIDDcgeo < 0.0) { fprintf(fplog, "Warning: cgeo = %g is negative. Set to zero.\n", model->B3SOIDDcgeo); printf("Warning: cgeo = %g is negative. Set to zero.\n", model->B3SOIDDcgeo); model->B3SOIDDcgeo = 0.0; } if (model->B3SOIDDntun < 0.0) { fprintf(fplog, "Warning: Ntun = %g is negative.\n", model->B3SOIDDntun); printf("Warning: Ntun = %g is negative.\n", model->B3SOIDDntun); } if (model->B3SOIDDndiode < 0.0) { fprintf(fplog, "Warning: Ndiode = %g is negative.\n", model->B3SOIDDndiode); printf("Warning: Ndiode = %g is negative.\n", model->B3SOIDDndiode); } if (model->B3SOIDDisbjt < 0.0) { fprintf(fplog, "Warning: Isbjt = %g is negative.\n", model->B3SOIDDisbjt); printf("Warning: Isbjt = %g is negative.\n", model->B3SOIDDisbjt); } if (model->B3SOIDDisdif < 0.0) { fprintf(fplog, "Warning: Isdif = %g is negative.\n", model->B3SOIDDisdif); printf("Warning: Isdif = %g is negative.\n", model->B3SOIDDisdif); } if (model->B3SOIDDisrec < 0.0) { fprintf(fplog, "Warning: Isrec = %g is negative.\n", model->B3SOIDDisrec); printf("Warning: Isrec = %g is negative.\n", model->B3SOIDDisrec); } if (model->B3SOIDDistun < 0.0) { fprintf(fplog, "Warning: Istun = %g is negative.\n", model->B3SOIDDistun); printf("Warning: Istun = %g is negative.\n", model->B3SOIDDistun); } if (model->B3SOIDDedl < 0.0) { fprintf(fplog, "Warning: Edl = %g is negative.\n", model->B3SOIDDedl); printf("Warning: Edl = %g is negative.\n", model->B3SOIDDedl); } if (model->B3SOIDDkbjt1 < 0.0) { fprintf(fplog, "Warning: Kbjt1 = %g is negative.\n", model->B3SOIDDkbjt1); printf("Warning: kbjt1 = %g is negative.\n", model->B3SOIDDkbjt1); } if (model->B3SOIDDtt < 0.0) { fprintf(fplog, "Warning: Tt = %g is negative.\n", model->B3SOIDDtt); printf("Warning: Tt = %g is negative.\n", model->B3SOIDDtt); } if (model->B3SOIDDcsdmin < 0.0) { fprintf(fplog, "Warning: Csdmin = %g is negative.\n", model->B3SOIDDcsdmin); printf("Warning: Csdmin = %g is negative.\n", model->B3SOIDDcsdmin); } if (model->B3SOIDDcsdesw < 0.0) { fprintf(fplog, "Warning: Csdesw = %g is negative.\n", model->B3SOIDDcsdesw); printf("Warning: Csdesw = %g is negative.\n", model->B3SOIDDcsdesw); } if ((model->B3SOIDDasd < 0.0) || (model->B3SOIDDmxc > 1.0)) { fprintf(fplog, "Warning: Asd = %g should be within (0, 1).\n", model->B3SOIDDasd); printf("Warning: Asd = %g should be within (0, 1).\n", model->B3SOIDDasd); } if (model->B3SOIDDrth0 < 0.0) { fprintf(fplog, "Warning: Rth0 = %g is negative.\n", model->B3SOIDDrth0); printf("Warning: Rth0 = %g is negative.\n", model->B3SOIDDrth0); } if (model->B3SOIDDcth0 < 0.0) { fprintf(fplog, "Warning: Cth0 = %g is negative.\n", model->B3SOIDDcth0); printf("Warning: Cth0 = %g is negative.\n", model->B3SOIDDcth0); } if (model->B3SOIDDrbody < 0.0) { fprintf(fplog, "Warning: Rbody = %g is negative.\n", model->B3SOIDDrbody); printf("Warning: Rbody = %g is negative.\n", model->B3SOIDDrbody); } if (model->B3SOIDDrbsh < 0.0) { fprintf(fplog, "Warning: Rbsh = %g is negative.\n", model->B3SOIDDrbsh); printf("Warning: Rbsh = %g is negative.\n", model->B3SOIDDrbsh); } if (model->B3SOIDDxj > model->B3SOIDDtsi) { fprintf(fplog, "Warning: Xj = %g is thicker than Tsi = %g.\n", model->B3SOIDDxj, model->B3SOIDDtsi); printf("Warning: Xj = %g is thicker than Tsi = %g.\n", model->B3SOIDDxj, model->B3SOIDDtsi); } if (model->B3SOIDDcapMod < 2) { fprintf(fplog, "Warning: capMod < 2 is not supported by BSIM3SOI.\n"); printf("Warning: Warning: capMod < 2 is not supported by BSIM3SOI.\n"); } if (model->B3SOIDDcii > 2.0) { fprintf(fplog, "Warning: Cii = %g is larger than 2.0.\n", model->B3SOIDDcii); printf("Warning: Cii = %g is larger than 2.0.\n", model->B3SOIDDcii); } if (model->B3SOIDDdii > 1.5) { fprintf(fplog, "Warning: Dii = %g is larger than 1.5.\n", model->B3SOIDDcii); printf("Warning: Dii = %g is too larger than 1.5.\n", model->B3SOIDDcii); } }/* loop for the parameter check for warning messages */ fclose(fplog); } else { fprintf(stderr, "Warning: Can't open log file. Parameter checking skipped.\n"); } return(Fatal_Flag); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_dd/b3soiddtemp.c0000644000175000017500000012725013546075722023752 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: Weidong Liu and Pin Su Feb 1999 Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang Modified by Pin Su, Wei Jin 99/9/27 File: b3soiddtemp.c 98/5/01 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMDD2.1 release */ /* Lmin, Lmax, Wmin, Wmax */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "b3soidddef.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define Kb 1.3806226e-23 #define KboQ 8.617087e-5 /* Kb / q where q = 1.60219e-19 */ #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define PI 3.141592654 #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define Charge_q 1.60219e-19 /* ARGSUSED */ int B3SOIDDtemp(GENmodel *inModel, CKTcircuit *ckt) { B3SOIDDmodel *model = (B3SOIDDmodel*) inModel; B3SOIDDinstance *here; struct b3soiddSizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam=NULL; double tmp, tmp1, tmp2, Eg, Eg0, ni, T0, T1, T2, T3, T4, T5, T6, Ldrn, Wdrn; double Temp, TRatio, Inv_L, Inv_W, Inv_LW, Vtm0, Tnom; double SDphi, SDgamma; int Size_Not_Found; /* loop through all the B3SOIDD device models */ for (; model != NULL; model = B3SOIDDnextModel(model)) { Temp = ckt->CKTtemp; if (model->B3SOIDDGatesidewallJctPotential < 0.1) model->B3SOIDDGatesidewallJctPotential = 0.1; struct b3soiddSizeDependParam *p = model->pSizeDependParamKnot; while (p) { struct b3soiddSizeDependParam *next_p = p->pNext; FREE(p); p = next_p; } model->pSizeDependParamKnot = NULL; pLastKnot = NULL; Tnom = model->B3SOIDDtnom; TRatio = Temp / Tnom; model->B3SOIDDvcrit = CONSTvt0 * log(CONSTvt0 / (CONSTroot2 * 1.0e-14)); model->B3SOIDDfactor1 = sqrt(EPSSI / EPSOX * model->B3SOIDDtox); Vtm0 = KboQ * Tnom; Eg0 = 1.16 - 7.02e-4 * Tnom * Tnom / (Tnom + 1108.0); model->B3SOIDDeg0 = Eg0; model->B3SOIDDvtm = KboQ * Temp; Eg = 1.16 - 7.02e-4 * Temp * Temp / (Temp + 1108.0); /* ni is in cm^-3 */ ni = 1.45e10 * (Temp / 300.15) * sqrt(Temp / 300.15) * exp(21.5565981 - Eg / (2.0 * model->B3SOIDDvtm)); /* loop through all the instances of the model */ /* MCJ: Length and Width not initialized */ for (here = B3SOIDDinstances(model); here != NULL; here = B3SOIDDnextInstance(here)) { here->B3SOIDDrbodyext = here->B3SOIDDbodySquares * model->B3SOIDDrbsh; pSizeDependParamKnot = model->pSizeDependParamKnot; Size_Not_Found = 1; while ((pSizeDependParamKnot != NULL) && Size_Not_Found) { if ((here->B3SOIDDl == pSizeDependParamKnot->Length) && (here->B3SOIDDw == pSizeDependParamKnot->Width) && (here->B3SOIDDrth0 == pSizeDependParamKnot->Rth0) && (here->B3SOIDDcth0 == pSizeDependParamKnot->Cth0)) { Size_Not_Found = 0; here->pParam = pSizeDependParamKnot; } else { pLastKnot = pSizeDependParamKnot; pSizeDependParamKnot = pSizeDependParamKnot->pNext; } } if (Size_Not_Found) { pParam = TMALLOC(struct b3soiddSizeDependParam, 1); if (pLastKnot == NULL) model->pSizeDependParamKnot = pParam; else pLastKnot->pNext = pParam; pParam->pNext = NULL; here->pParam = pParam; Ldrn = here->B3SOIDDl; Wdrn = here->B3SOIDDw; pParam->Length = Ldrn; pParam->Width = Wdrn; pParam->Rth0 = here->B3SOIDDrth0; pParam->Cth0 = here->B3SOIDDcth0; T0 = pow(Ldrn, model->B3SOIDDLln); T1 = pow(Wdrn, model->B3SOIDDLwn); tmp1 = model->B3SOIDDLl / T0 + model->B3SOIDDLw / T1 + model->B3SOIDDLwl / (T0 * T1); pParam->B3SOIDDdl = model->B3SOIDDLint + tmp1; pParam->B3SOIDDdlc = model->B3SOIDDdlc + tmp1; T2 = pow(Ldrn, model->B3SOIDDWln); T3 = pow(Wdrn, model->B3SOIDDWwn); tmp2 = model->B3SOIDDWl / T2 + model->B3SOIDDWw / T3 + model->B3SOIDDWwl / (T2 * T3); pParam->B3SOIDDdw = model->B3SOIDDWint + tmp2; pParam->B3SOIDDdwc = model->B3SOIDDdwc + tmp2; pParam->B3SOIDDleff = here->B3SOIDDl - 2.0 * pParam->B3SOIDDdl; if (pParam->B3SOIDDleff <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "B3SOIDD: mosfet %s, model %s: Effective channel length <= 0", model->B3SOIDDmodName, here->B3SOIDDname); return(E_BADPARM); } pParam->B3SOIDDweff = here->B3SOIDDw - 2.0 * pParam->B3SOIDDdw; if (pParam->B3SOIDDweff <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "B3SOIDD: mosfet %s, model %s: Effective channel width <= 0", model->B3SOIDDmodName, here->B3SOIDDname); return(E_BADPARM); } pParam->B3SOIDDleffCV = here->B3SOIDDl - 2.0 * pParam->B3SOIDDdlc; if (pParam->B3SOIDDleffCV <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "B3SOIDD: mosfet %s, model %s: Effective channel length for C-V <= 0", model->B3SOIDDmodName, here->B3SOIDDname); return(E_BADPARM); } pParam->B3SOIDDweffCV = here->B3SOIDDw - 2.0 * pParam->B3SOIDDdwc; if (pParam->B3SOIDDweffCV <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "B3SOIDD: mosfet %s, model %s: Effective channel width for C-V <= 0", model->B3SOIDDmodName, here->B3SOIDDname); return(E_BADPARM); } /* Not binned - START */ pParam->B3SOIDDat = model->B3SOIDDat; pParam->B3SOIDDgamma1 = model->B3SOIDDgamma1; pParam->B3SOIDDgamma2 = model->B3SOIDDgamma2; pParam->B3SOIDDvbx = model->B3SOIDDvbx; pParam->B3SOIDDvbm = model->B3SOIDDvbm; pParam->B3SOIDDxt = model->B3SOIDDxt; pParam->B3SOIDDkt1 = model->B3SOIDDkt1; pParam->B3SOIDDkt1l = model->B3SOIDDkt1l; pParam->B3SOIDDkt2 = model->B3SOIDDkt2; pParam->B3SOIDDua1 = model->B3SOIDDua1; pParam->B3SOIDDub1 = model->B3SOIDDub1; pParam->B3SOIDDuc1 = model->B3SOIDDuc1; pParam->B3SOIDDute = model->B3SOIDDute; pParam->B3SOIDDprt = model->B3SOIDDprt; /* Not binned - END */ /* CV model */ pParam->B3SOIDDcgsl = model->B3SOIDDcgsl; pParam->B3SOIDDcgdl = model->B3SOIDDcgdl; pParam->B3SOIDDckappa = model->B3SOIDDckappa; pParam->B3SOIDDcf = model->B3SOIDDcf; pParam->B3SOIDDclc = model->B3SOIDDclc; pParam->B3SOIDDcle = model->B3SOIDDcle; pParam->B3SOIDDabulkCVfactor = pow(1.0+(pParam->B3SOIDDclc / pParam->B3SOIDDleff), pParam->B3SOIDDcle); /* Added for binning - START */ if (model->B3SOIDDbinUnit == 1) { Inv_L = 1.0e-6 / pParam->B3SOIDDleff; Inv_W = 1.0e-6 / pParam->B3SOIDDweff; Inv_LW = 1.0e-12 / (pParam->B3SOIDDleff * pParam->B3SOIDDweff); } else { Inv_L = 1.0 / pParam->B3SOIDDleff; Inv_W = 1.0 / pParam->B3SOIDDweff; Inv_LW = 1.0 / (pParam->B3SOIDDleff * pParam->B3SOIDDweff); } pParam->B3SOIDDnpeak = model->B3SOIDDnpeak + model->B3SOIDDlnpeak * Inv_L + model->B3SOIDDwnpeak * Inv_W + model->B3SOIDDpnpeak * Inv_LW; pParam->B3SOIDDnsub = model->B3SOIDDnsub + model->B3SOIDDlnsub * Inv_L + model->B3SOIDDwnsub * Inv_W + model->B3SOIDDpnsub * Inv_LW; pParam->B3SOIDDngate = model->B3SOIDDngate + model->B3SOIDDlngate * Inv_L + model->B3SOIDDwngate * Inv_W + model->B3SOIDDpngate * Inv_LW; pParam->B3SOIDDvth0 = model->B3SOIDDvth0 + model->B3SOIDDlvth0 * Inv_L + model->B3SOIDDwvth0 * Inv_W + model->B3SOIDDpvth0 * Inv_LW; pParam->B3SOIDDk1 = model->B3SOIDDk1 + model->B3SOIDDlk1 * Inv_L + model->B3SOIDDwk1 * Inv_W + model->B3SOIDDpk1 * Inv_LW; pParam->B3SOIDDk2 = model->B3SOIDDk2 + model->B3SOIDDlk2 * Inv_L + model->B3SOIDDwk2 * Inv_W + model->B3SOIDDpk2 * Inv_LW; pParam->B3SOIDDk3 = model->B3SOIDDk3 + model->B3SOIDDlk3 * Inv_L + model->B3SOIDDwk3 * Inv_W + model->B3SOIDDpk3 * Inv_LW; pParam->B3SOIDDk3b = model->B3SOIDDk3b + model->B3SOIDDlk3b * Inv_L + model->B3SOIDDwk3b * Inv_W + model->B3SOIDDpk3b * Inv_LW; pParam->B3SOIDDvbsa = model->B3SOIDDvbsa + model->B3SOIDDlvbsa * Inv_L + model->B3SOIDDwvbsa * Inv_W + model->B3SOIDDpvbsa * Inv_LW; pParam->B3SOIDDdelp = model->B3SOIDDdelp + model->B3SOIDDldelp * Inv_L + model->B3SOIDDwdelp * Inv_W + model->B3SOIDDpdelp * Inv_LW; pParam->B3SOIDDkb1 = model->B3SOIDDkb1 + model->B3SOIDDlkb1 * Inv_L + model->B3SOIDDwkb1 * Inv_W + model->B3SOIDDpkb1 * Inv_LW; pParam->B3SOIDDkb3 = model->B3SOIDDkb3 + model->B3SOIDDlkb3 * Inv_L + model->B3SOIDDwkb3 * Inv_W + model->B3SOIDDpkb3 * Inv_LW; pParam->B3SOIDDdvbd0 = model->B3SOIDDdvbd0 + model->B3SOIDDldvbd0 * Inv_L + model->B3SOIDDwdvbd0 * Inv_W + model->B3SOIDDpdvbd0 * Inv_LW; pParam->B3SOIDDdvbd1 = model->B3SOIDDdvbd1 + model->B3SOIDDldvbd1 * Inv_L + model->B3SOIDDwdvbd1 * Inv_W + model->B3SOIDDpdvbd1 * Inv_LW; pParam->B3SOIDDw0 = model->B3SOIDDw0 + model->B3SOIDDlw0 * Inv_L + model->B3SOIDDww0 * Inv_W + model->B3SOIDDpw0 * Inv_LW; pParam->B3SOIDDnlx = model->B3SOIDDnlx + model->B3SOIDDlnlx * Inv_L + model->B3SOIDDwnlx * Inv_W + model->B3SOIDDpnlx * Inv_LW; pParam->B3SOIDDdvt0 = model->B3SOIDDdvt0 + model->B3SOIDDldvt0 * Inv_L + model->B3SOIDDwdvt0 * Inv_W + model->B3SOIDDpdvt0 * Inv_LW; pParam->B3SOIDDdvt1 = model->B3SOIDDdvt1 + model->B3SOIDDldvt1 * Inv_L + model->B3SOIDDwdvt1 * Inv_W + model->B3SOIDDpdvt1 * Inv_LW; pParam->B3SOIDDdvt2 = model->B3SOIDDdvt2 + model->B3SOIDDldvt2 * Inv_L + model->B3SOIDDwdvt2 * Inv_W + model->B3SOIDDpdvt2 * Inv_LW; pParam->B3SOIDDdvt0w = model->B3SOIDDdvt0w + model->B3SOIDDldvt0w * Inv_L + model->B3SOIDDwdvt0w * Inv_W + model->B3SOIDDpdvt0w * Inv_LW; pParam->B3SOIDDdvt1w = model->B3SOIDDdvt1w + model->B3SOIDDldvt1w * Inv_L + model->B3SOIDDwdvt1w * Inv_W + model->B3SOIDDpdvt1w * Inv_LW; pParam->B3SOIDDdvt2w = model->B3SOIDDdvt2w + model->B3SOIDDldvt2w * Inv_L + model->B3SOIDDwdvt2w * Inv_W + model->B3SOIDDpdvt2w * Inv_LW; pParam->B3SOIDDu0 = model->B3SOIDDu0 + model->B3SOIDDlu0 * Inv_L + model->B3SOIDDwu0 * Inv_W + model->B3SOIDDpu0 * Inv_LW; pParam->B3SOIDDua = model->B3SOIDDua + model->B3SOIDDlua * Inv_L + model->B3SOIDDwua * Inv_W + model->B3SOIDDpua * Inv_LW; pParam->B3SOIDDub = model->B3SOIDDub + model->B3SOIDDlub * Inv_L + model->B3SOIDDwub * Inv_W + model->B3SOIDDpub * Inv_LW; pParam->B3SOIDDuc = model->B3SOIDDuc + model->B3SOIDDluc * Inv_L + model->B3SOIDDwuc * Inv_W + model->B3SOIDDpuc * Inv_LW; pParam->B3SOIDDvsat = model->B3SOIDDvsat + model->B3SOIDDlvsat * Inv_L + model->B3SOIDDwvsat * Inv_W + model->B3SOIDDpvsat * Inv_LW; pParam->B3SOIDDa0 = model->B3SOIDDa0 + model->B3SOIDDla0 * Inv_L + model->B3SOIDDwa0 * Inv_W + model->B3SOIDDpa0 * Inv_LW; pParam->B3SOIDDags = model->B3SOIDDags + model->B3SOIDDlags * Inv_L + model->B3SOIDDwags * Inv_W + model->B3SOIDDpags * Inv_LW; pParam->B3SOIDDb0 = model->B3SOIDDb0 + model->B3SOIDDlb0 * Inv_L + model->B3SOIDDwb0 * Inv_W + model->B3SOIDDpb0 * Inv_LW; pParam->B3SOIDDb1 = model->B3SOIDDb1 + model->B3SOIDDlb1 * Inv_L + model->B3SOIDDwb1 * Inv_W + model->B3SOIDDpb1 * Inv_LW; pParam->B3SOIDDketa = model->B3SOIDDketa + model->B3SOIDDlketa * Inv_L + model->B3SOIDDwketa * Inv_W + model->B3SOIDDpketa * Inv_LW; pParam->B3SOIDDabp = model->B3SOIDDabp + model->B3SOIDDlabp * Inv_L + model->B3SOIDDwabp * Inv_W + model->B3SOIDDpabp * Inv_LW; pParam->B3SOIDDmxc = model->B3SOIDDmxc + model->B3SOIDDlmxc * Inv_L + model->B3SOIDDwmxc * Inv_W + model->B3SOIDDpmxc * Inv_LW; pParam->B3SOIDDadice0 = model->B3SOIDDadice0 + model->B3SOIDDladice0 * Inv_L + model->B3SOIDDwadice0 * Inv_W + model->B3SOIDDpadice0 * Inv_LW; pParam->B3SOIDDa1 = model->B3SOIDDa1 + model->B3SOIDDla1 * Inv_L + model->B3SOIDDwa1 * Inv_W + model->B3SOIDDpa1 * Inv_LW; pParam->B3SOIDDa2 = model->B3SOIDDa2 + model->B3SOIDDla2 * Inv_L + model->B3SOIDDwa2 * Inv_W + model->B3SOIDDpa2 * Inv_LW; pParam->B3SOIDDrdsw = model->B3SOIDDrdsw + model->B3SOIDDlrdsw * Inv_L + model->B3SOIDDwrdsw * Inv_W + model->B3SOIDDprdsw * Inv_LW; pParam->B3SOIDDprwb = model->B3SOIDDprwb + model->B3SOIDDlprwb * Inv_L + model->B3SOIDDwprwb * Inv_W + model->B3SOIDDpprwb * Inv_LW; pParam->B3SOIDDprwg = model->B3SOIDDprwg + model->B3SOIDDlprwg * Inv_L + model->B3SOIDDwprwg * Inv_W + model->B3SOIDDpprwg * Inv_LW; pParam->B3SOIDDwr = model->B3SOIDDwr + model->B3SOIDDlwr * Inv_L + model->B3SOIDDwwr * Inv_W + model->B3SOIDDpwr * Inv_LW; pParam->B3SOIDDnfactor = model->B3SOIDDnfactor + model->B3SOIDDlnfactor * Inv_L + model->B3SOIDDwnfactor * Inv_W + model->B3SOIDDpnfactor * Inv_LW; pParam->B3SOIDDdwg = model->B3SOIDDdwg + model->B3SOIDDldwg * Inv_L + model->B3SOIDDwdwg * Inv_W + model->B3SOIDDpdwg * Inv_LW; pParam->B3SOIDDdwb = model->B3SOIDDdwb + model->B3SOIDDldwb * Inv_L + model->B3SOIDDwdwb * Inv_W + model->B3SOIDDpdwb * Inv_LW; pParam->B3SOIDDvoff = model->B3SOIDDvoff + model->B3SOIDDlvoff * Inv_L + model->B3SOIDDwvoff * Inv_W + model->B3SOIDDpvoff * Inv_LW; pParam->B3SOIDDeta0 = model->B3SOIDDeta0 + model->B3SOIDDleta0 * Inv_L + model->B3SOIDDweta0 * Inv_W + model->B3SOIDDpeta0 * Inv_LW; pParam->B3SOIDDetab = model->B3SOIDDetab + model->B3SOIDDletab * Inv_L + model->B3SOIDDwetab * Inv_W + model->B3SOIDDpetab * Inv_LW; pParam->B3SOIDDdsub = model->B3SOIDDdsub + model->B3SOIDDldsub * Inv_L + model->B3SOIDDwdsub * Inv_W + model->B3SOIDDpdsub * Inv_LW; pParam->B3SOIDDcit = model->B3SOIDDcit + model->B3SOIDDlcit * Inv_L + model->B3SOIDDwcit * Inv_W + model->B3SOIDDpcit * Inv_LW; pParam->B3SOIDDcdsc = model->B3SOIDDcdsc + model->B3SOIDDlcdsc * Inv_L + model->B3SOIDDwcdsc * Inv_W + model->B3SOIDDpcdsc * Inv_LW; pParam->B3SOIDDcdscb = model->B3SOIDDcdscb + model->B3SOIDDlcdscb * Inv_L + model->B3SOIDDwcdscb * Inv_W + model->B3SOIDDpcdscb * Inv_LW; pParam->B3SOIDDcdscd = model->B3SOIDDcdscd + model->B3SOIDDlcdscd * Inv_L + model->B3SOIDDwcdscd * Inv_W + model->B3SOIDDpcdscd * Inv_LW; pParam->B3SOIDDpclm = model->B3SOIDDpclm + model->B3SOIDDlpclm * Inv_L + model->B3SOIDDwpclm * Inv_W + model->B3SOIDDppclm * Inv_LW; pParam->B3SOIDDpdibl1 = model->B3SOIDDpdibl1 + model->B3SOIDDlpdibl1 * Inv_L + model->B3SOIDDwpdibl1 * Inv_W + model->B3SOIDDppdibl1 * Inv_LW; pParam->B3SOIDDpdibl2 = model->B3SOIDDpdibl2 + model->B3SOIDDlpdibl2 * Inv_L + model->B3SOIDDwpdibl2 * Inv_W + model->B3SOIDDppdibl2 * Inv_LW; pParam->B3SOIDDpdiblb = model->B3SOIDDpdiblb + model->B3SOIDDlpdiblb * Inv_L + model->B3SOIDDwpdiblb * Inv_W + model->B3SOIDDppdiblb * Inv_LW; pParam->B3SOIDDdrout = model->B3SOIDDdrout + model->B3SOIDDldrout * Inv_L + model->B3SOIDDwdrout * Inv_W + model->B3SOIDDpdrout * Inv_LW; pParam->B3SOIDDpvag = model->B3SOIDDpvag + model->B3SOIDDlpvag * Inv_L + model->B3SOIDDwpvag * Inv_W + model->B3SOIDDppvag * Inv_LW; pParam->B3SOIDDdelta = model->B3SOIDDdelta + model->B3SOIDDldelta * Inv_L + model->B3SOIDDwdelta * Inv_W + model->B3SOIDDpdelta * Inv_LW; pParam->B3SOIDDaii = model->B3SOIDDaii + model->B3SOIDDlaii * Inv_L + model->B3SOIDDwaii * Inv_W + model->B3SOIDDpaii * Inv_LW; pParam->B3SOIDDbii = model->B3SOIDDbii + model->B3SOIDDlbii * Inv_L + model->B3SOIDDwbii * Inv_W + model->B3SOIDDpbii * Inv_LW; pParam->B3SOIDDcii = model->B3SOIDDcii + model->B3SOIDDlcii * Inv_L + model->B3SOIDDwcii * Inv_W + model->B3SOIDDpcii * Inv_LW; pParam->B3SOIDDdii = model->B3SOIDDdii + model->B3SOIDDldii * Inv_L + model->B3SOIDDwdii * Inv_W + model->B3SOIDDpdii * Inv_LW; pParam->B3SOIDDalpha0 = model->B3SOIDDalpha0 + model->B3SOIDDlalpha0 * Inv_L + model->B3SOIDDwalpha0 * Inv_W + model->B3SOIDDpalpha0 * Inv_LW; pParam->B3SOIDDalpha1 = model->B3SOIDDalpha1 + model->B3SOIDDlalpha1 * Inv_L + model->B3SOIDDwalpha1 * Inv_W + model->B3SOIDDpalpha1 * Inv_LW; pParam->B3SOIDDbeta0 = model->B3SOIDDbeta0 + model->B3SOIDDlbeta0 * Inv_L + model->B3SOIDDwbeta0 * Inv_W + model->B3SOIDDpbeta0 * Inv_LW; pParam->B3SOIDDagidl = model->B3SOIDDagidl + model->B3SOIDDlagidl * Inv_L + model->B3SOIDDwagidl * Inv_W + model->B3SOIDDpagidl * Inv_LW; pParam->B3SOIDDbgidl = model->B3SOIDDbgidl + model->B3SOIDDlbgidl * Inv_L + model->B3SOIDDwbgidl * Inv_W + model->B3SOIDDpbgidl * Inv_LW; pParam->B3SOIDDngidl = model->B3SOIDDngidl + model->B3SOIDDlngidl * Inv_L + model->B3SOIDDwngidl * Inv_W + model->B3SOIDDpngidl * Inv_LW; pParam->B3SOIDDntun = model->B3SOIDDntun + model->B3SOIDDlntun * Inv_L + model->B3SOIDDwntun * Inv_W + model->B3SOIDDpntun * Inv_LW; pParam->B3SOIDDndiode = model->B3SOIDDndiode + model->B3SOIDDlndiode * Inv_L + model->B3SOIDDwndiode * Inv_W + model->B3SOIDDpndiode * Inv_LW; pParam->B3SOIDDisbjt = model->B3SOIDDisbjt + model->B3SOIDDlisbjt * Inv_L + model->B3SOIDDwisbjt * Inv_W + model->B3SOIDDpisbjt * Inv_LW; pParam->B3SOIDDisdif = model->B3SOIDDisdif + model->B3SOIDDlisdif * Inv_L + model->B3SOIDDwisdif * Inv_W + model->B3SOIDDpisdif * Inv_LW; pParam->B3SOIDDisrec = model->B3SOIDDisrec + model->B3SOIDDlisrec * Inv_L + model->B3SOIDDwisrec * Inv_W + model->B3SOIDDpisrec * Inv_LW; pParam->B3SOIDDistun = model->B3SOIDDistun + model->B3SOIDDlistun * Inv_L + model->B3SOIDDwistun * Inv_W + model->B3SOIDDpistun * Inv_LW; pParam->B3SOIDDedl = model->B3SOIDDedl + model->B3SOIDDledl * Inv_L + model->B3SOIDDwedl * Inv_W + model->B3SOIDDpedl * Inv_LW; pParam->B3SOIDDkbjt1 = model->B3SOIDDkbjt1 + model->B3SOIDDlkbjt1 * Inv_L + model->B3SOIDDwkbjt1 * Inv_W + model->B3SOIDDpkbjt1 * Inv_LW; /* CV model */ pParam->B3SOIDDvsdfb = model->B3SOIDDvsdfb + model->B3SOIDDlvsdfb * Inv_L + model->B3SOIDDwvsdfb * Inv_W + model->B3SOIDDpvsdfb * Inv_LW; pParam->B3SOIDDvsdth = model->B3SOIDDvsdth + model->B3SOIDDlvsdth * Inv_L + model->B3SOIDDwvsdth * Inv_W + model->B3SOIDDpvsdth * Inv_LW; /* Added for binning - END */ T0 = (TRatio - 1.0); pParam->B3SOIDDuatemp = pParam->B3SOIDDua; /* save ua, ub, and uc for b3soiddld.c */ pParam->B3SOIDDubtemp = pParam->B3SOIDDub; pParam->B3SOIDDuctemp = pParam->B3SOIDDuc; pParam->B3SOIDDrds0denom = pow(pParam->B3SOIDDweff * 1E6, pParam->B3SOIDDwr); pParam->B3SOIDDrth = here->B3SOIDDrth0 * sqrt(model->B3SOIDDtbox / model->B3SOIDDtsi) / pParam->B3SOIDDweff; pParam->B3SOIDDcth = here->B3SOIDDcth0 * model->B3SOIDDtsi; pParam->B3SOIDDrbody = model->B3SOIDDrbody * pParam->B3SOIDDweff / pParam->B3SOIDDleff; pParam->B3SOIDDua = pParam->B3SOIDDua + pParam->B3SOIDDua1 * T0; pParam->B3SOIDDub = pParam->B3SOIDDub + pParam->B3SOIDDub1 * T0; pParam->B3SOIDDuc = pParam->B3SOIDDuc + pParam->B3SOIDDuc1 * T0; if (pParam->B3SOIDDu0 > 1.0) pParam->B3SOIDDu0 = pParam->B3SOIDDu0 / 1.0e4; pParam->B3SOIDDu0temp = pParam->B3SOIDDu0 * pow(TRatio, pParam->B3SOIDDute); pParam->B3SOIDDvsattemp = pParam->B3SOIDDvsat - pParam->B3SOIDDat * T0; pParam->B3SOIDDrds0 = (pParam->B3SOIDDrdsw + pParam->B3SOIDDprt * T0) / pow(pParam->B3SOIDDweff * 1E6, pParam->B3SOIDDwr); if (B3SOIDDcheckModel(model, here, ckt)) { SPfrontEnd->IFerrorf (ERR_FATAL, "Fatal error(s) detected during B3SOIDDV3 parameter checking for %s in model %s", model->B3SOIDDmodName, here->B3SOIDDname); return(E_BADPARM); } pParam->B3SOIDDcgdo = (model->B3SOIDDcgdo + pParam->B3SOIDDcf) * pParam->B3SOIDDweffCV; pParam->B3SOIDDcgso = (model->B3SOIDDcgso + pParam->B3SOIDDcf) * pParam->B3SOIDDweffCV; pParam->B3SOIDDcgeo = model->B3SOIDDcgeo * pParam->B3SOIDDleffCV; if (!model->B3SOIDDnpeakGiven && model->B3SOIDDgamma1Given) { T0 = pParam->B3SOIDDgamma1 * model->B3SOIDDcox; pParam->B3SOIDDnpeak = 3.021E22 * T0 * T0; } T0 = pow(TRatio, model->B3SOIDDxbjt / pParam->B3SOIDDndiode); T1 = pow(TRatio, model->B3SOIDDxdif / pParam->B3SOIDDndiode); T2 = pow(TRatio, model->B3SOIDDxrec / pParam->B3SOIDDndiode / 2); T4 = -Eg0 / pParam->B3SOIDDndiode / model->B3SOIDDvtm * (1 - TRatio); T5 = exp(T4); T6 = sqrt(T5); pParam->B3SOIDDjbjt = pParam->B3SOIDDisbjt * T0 * T5; pParam->B3SOIDDjdif = pParam->B3SOIDDisdif * T1 * T5; pParam->B3SOIDDjrec = pParam->B3SOIDDisrec * T2 * T6; T0 = pow(TRatio, model->B3SOIDDxtun / pParam->B3SOIDDntun); pParam->B3SOIDDjtun = pParam->B3SOIDDistun * T0 ; if (pParam->B3SOIDDnsub > 0) pParam->B3SOIDDvfbb = -model->B3SOIDDtype * model->B3SOIDDvtm * log(pParam->B3SOIDDnpeak/ pParam->B3SOIDDnsub); else pParam->B3SOIDDvfbb = -model->B3SOIDDtype * model->B3SOIDDvtm * log(-pParam->B3SOIDDnpeak* pParam->B3SOIDDnsub/ni/ni); if (!model->B3SOIDDvsdfbGiven) { if (pParam->B3SOIDDnsub > 0) pParam->B3SOIDDvsdfb = -model->B3SOIDDtype * (model->B3SOIDDvtm*log(1e20 * pParam->B3SOIDDnsub / ni /ni) - 0.3); else if (pParam->B3SOIDDnsub < 0) pParam->B3SOIDDvsdfb = -model->B3SOIDDtype * (model->B3SOIDDvtm*log(-1e20 / pParam->B3SOIDDnsub) + 0.3); } /* Phi & Gamma */ SDphi = 2.0*model->B3SOIDDvtm*log(fabs(pParam->B3SOIDDnsub) / ni); SDgamma = 5.753e-12 * sqrt(fabs(pParam->B3SOIDDnsub)) / model->B3SOIDDcbox; if (!model->B3SOIDDvsdthGiven) { if ( ((pParam->B3SOIDDnsub > 0) && (model->B3SOIDDtype > 0)) || ((pParam->B3SOIDDnsub < 0) && (model->B3SOIDDtype < 0)) ) pParam->B3SOIDDvsdth = pParam->B3SOIDDvsdfb + SDphi + SDgamma * sqrt(SDphi); else pParam->B3SOIDDvsdth = pParam->B3SOIDDvsdfb - SDphi - SDgamma * sqrt(SDphi); } if (!model->B3SOIDDcsdminGiven) { /* Cdmin */ tmp = sqrt(2.0 * EPSSI * SDphi / (Charge_q * fabs(pParam->B3SOIDDnsub) * 1.0e6)); tmp1 = EPSSI / tmp; model->B3SOIDDcsdmin = tmp1 * model->B3SOIDDcbox / (tmp1 + model->B3SOIDDcbox); } T0 = model->B3SOIDDcsdesw * log(1 + model->B3SOIDDtsi / model->B3SOIDDtbox); T1 = here->B3SOIDDsourcePerimeter - pParam->B3SOIDDweff; if (T1 > 0.0) pParam->B3SOIDDcsesw = T0 * T1; else pParam->B3SOIDDcsesw = 0.0; T1 = here->B3SOIDDdrainPerimeter - pParam->B3SOIDDweff; if (T1 > 0.0) pParam->B3SOIDDcdesw = T0 * T1; else pParam->B3SOIDDcdesw = 0.0; pParam->B3SOIDDphi = 2.0 * model->B3SOIDDvtm * log(pParam->B3SOIDDnpeak / ni); pParam->B3SOIDDsqrtPhi = sqrt(pParam->B3SOIDDphi); pParam->B3SOIDDphis3 = pParam->B3SOIDDsqrtPhi * pParam->B3SOIDDphi; pParam->B3SOIDDXdep0 = sqrt(2.0 * EPSSI / (Charge_q * pParam->B3SOIDDnpeak * 1.0e6)) * pParam->B3SOIDDsqrtPhi; pParam->B3SOIDDsqrtXdep0 = sqrt(pParam->B3SOIDDXdep0); pParam->B3SOIDDlitl = sqrt(3.0 * model->B3SOIDDxj * model->B3SOIDDtox); pParam->B3SOIDDvbi = model->B3SOIDDvtm * log(1.0e20 * pParam->B3SOIDDnpeak / (ni * ni)); pParam->B3SOIDDcdep0 = sqrt(Charge_q * EPSSI * pParam->B3SOIDDnpeak * 1.0e6 / 2.0 / pParam->B3SOIDDphi); if (model->B3SOIDDk1Given || model->B3SOIDDk2Given) { if (!model->B3SOIDDk1Given) { fprintf(stdout, "Warning: k1 should be specified with k2.\n"); pParam->B3SOIDDk1 = 0.53; } if (!model->B3SOIDDk2Given) { fprintf(stdout, "Warning: k2 should be specified with k1.\n"); pParam->B3SOIDDk2 = -0.0186; } if (model->B3SOIDDxtGiven) fprintf(stdout, "Warning: xt is ignored because k1 or k2 is given.\n"); if (model->B3SOIDDvbxGiven) fprintf(stdout, "Warning: vbx is ignored because k1 or k2 is given.\n"); if (model->B3SOIDDvbmGiven) fprintf(stdout, "Warning: vbm is ignored because k1 or k2 is given.\n"); if (model->B3SOIDDgamma1Given) fprintf(stdout, "Warning: gamma1 is ignored because k1 or k2 is given.\n"); if (model->B3SOIDDgamma2Given) fprintf(stdout, "Warning: gamma2 is ignored because k1 or k2 is given.\n"); } else { if (!model->B3SOIDDvbxGiven) pParam->B3SOIDDvbx = pParam->B3SOIDDphi - 7.7348e-4 * pParam->B3SOIDDnpeak * pParam->B3SOIDDxt * pParam->B3SOIDDxt; if (pParam->B3SOIDDvbx > 0.0) pParam->B3SOIDDvbx = -pParam->B3SOIDDvbx; if (pParam->B3SOIDDvbm > 0.0) pParam->B3SOIDDvbm = -pParam->B3SOIDDvbm; if (!model->B3SOIDDgamma1Given) pParam->B3SOIDDgamma1 = 5.753e-12 * sqrt(pParam->B3SOIDDnpeak) / model->B3SOIDDcox; if (!model->B3SOIDDgamma2Given) pParam->B3SOIDDgamma2 = 5.753e-12 * sqrt(pParam->B3SOIDDnsub) / model->B3SOIDDcox; T0 = pParam->B3SOIDDgamma1 - pParam->B3SOIDDgamma2; T1 = sqrt(pParam->B3SOIDDphi - pParam->B3SOIDDvbx) - pParam->B3SOIDDsqrtPhi; T2 = sqrt(pParam->B3SOIDDphi * (pParam->B3SOIDDphi - pParam->B3SOIDDvbm)) - pParam->B3SOIDDphi; pParam->B3SOIDDk2 = T0 * T1 / (2.0 * T2 + pParam->B3SOIDDvbm); pParam->B3SOIDDk1 = pParam->B3SOIDDgamma2 - 2.0 * pParam->B3SOIDDk2 * sqrt(pParam->B3SOIDDphi - pParam->B3SOIDDvbm); } if (pParam->B3SOIDDk2 < 0.0) { T0 = 0.5 * pParam->B3SOIDDk1 / pParam->B3SOIDDk2; pParam->B3SOIDDvbsc = 0.9 * (pParam->B3SOIDDphi - T0 * T0); if (pParam->B3SOIDDvbsc > -3.0) pParam->B3SOIDDvbsc = -3.0; else if (pParam->B3SOIDDvbsc < -30.0) pParam->B3SOIDDvbsc = -30.0; } else { pParam->B3SOIDDvbsc = -30.0; } if (pParam->B3SOIDDvbsc > pParam->B3SOIDDvbm) pParam->B3SOIDDvbsc = pParam->B3SOIDDvbm; if (model->B3SOIDDvth0Given) { pParam->B3SOIDDvfb = model->B3SOIDDtype * pParam->B3SOIDDvth0 - pParam->B3SOIDDphi - pParam->B3SOIDDk1 * pParam->B3SOIDDsqrtPhi; } else { pParam->B3SOIDDvfb = -1.0; pParam->B3SOIDDvth0 = model->B3SOIDDtype * (pParam->B3SOIDDvfb + pParam->B3SOIDDphi + pParam->B3SOIDDk1 * pParam->B3SOIDDsqrtPhi); } T1 = sqrt(EPSSI / EPSOX * model->B3SOIDDtox * pParam->B3SOIDDXdep0); T0 = exp(-0.5 * pParam->B3SOIDDdsub * pParam->B3SOIDDleff / T1); pParam->B3SOIDDtheta0vb0 = (T0 + 2.0 * T0 * T0); T0 = exp(-0.5 * pParam->B3SOIDDdrout * pParam->B3SOIDDleff / T1); T2 = (T0 + 2.0 * T0 * T0); pParam->B3SOIDDthetaRout = pParam->B3SOIDDpdibl1 * T2 + pParam->B3SOIDDpdibl2; here->B3SOIDDminIsub = 5.0e-2 * pParam->B3SOIDDweff * model->B3SOIDDtsi * MAX(pParam->B3SOIDDisdif, pParam->B3SOIDDisrec); } here->B3SOIDDcsbox = model->B3SOIDDcbox*here->B3SOIDDsourceArea; here->B3SOIDDcsmin = model->B3SOIDDcsdmin*here->B3SOIDDsourceArea; here->B3SOIDDcdbox = model->B3SOIDDcbox*here->B3SOIDDdrainArea; here->B3SOIDDcdmin = model->B3SOIDDcsdmin*here->B3SOIDDdrainArea; if ( ((pParam->B3SOIDDnsub > 0) && (model->B3SOIDDtype > 0)) || ((pParam->B3SOIDDnsub < 0) && (model->B3SOIDDtype < 0)) ) { T0 = pParam->B3SOIDDvsdth - pParam->B3SOIDDvsdfb; pParam->B3SOIDDsdt1 = pParam->B3SOIDDvsdfb + model->B3SOIDDasd * T0; T1 = here->B3SOIDDcsbox - here->B3SOIDDcsmin; T2 = T1 / T0 / T0; pParam->B3SOIDDst2 = T2 / model->B3SOIDDasd; pParam->B3SOIDDst3 = T2 /( 1 - model->B3SOIDDasd); here->B3SOIDDst4 = T0 * T1 * (1 + model->B3SOIDDasd) / 3 - here->B3SOIDDcsmin * pParam->B3SOIDDvsdfb; T1 = here->B3SOIDDcdbox - here->B3SOIDDcdmin; T2 = T1 / T0 / T0; pParam->B3SOIDDdt2 = T2 / model->B3SOIDDasd; pParam->B3SOIDDdt3 = T2 /( 1 - model->B3SOIDDasd); here->B3SOIDDdt4 = T0 * T1 * (1 + model->B3SOIDDasd) / 3 - here->B3SOIDDcdmin * pParam->B3SOIDDvsdfb; } else { T0 = pParam->B3SOIDDvsdfb - pParam->B3SOIDDvsdth; pParam->B3SOIDDsdt1 = pParam->B3SOIDDvsdth + model->B3SOIDDasd * T0; T1 = here->B3SOIDDcsmin - here->B3SOIDDcsbox; T2 = T1 / T0 / T0; pParam->B3SOIDDst2 = T2 / model->B3SOIDDasd; pParam->B3SOIDDst3 = T2 /( 1 - model->B3SOIDDasd); here->B3SOIDDst4 = T0 * T1 * (1 + model->B3SOIDDasd) / 3 - here->B3SOIDDcsbox * pParam->B3SOIDDvsdth; T1 = here->B3SOIDDcdmin - here->B3SOIDDcdbox; T2 = T1 / T0 / T0; pParam->B3SOIDDdt2 = T2 / model->B3SOIDDasd; pParam->B3SOIDDdt3 = T2 /( 1 - model->B3SOIDDasd); here->B3SOIDDdt4 = T0 * T1 * (1 + model->B3SOIDDasd) / 3 - here->B3SOIDDcdbox * pParam->B3SOIDDvsdth; } here->B3SOIDDphi = pParam->B3SOIDDphi; /* process source/drain series resistance */ here->B3SOIDDdrainConductance = model->B3SOIDDsheetResistance * here->B3SOIDDdrainSquares; if (here->B3SOIDDdrainConductance > 0.0) here->B3SOIDDdrainConductance = 1.0 / here->B3SOIDDdrainConductance; else here->B3SOIDDdrainConductance = 0.0; here->B3SOIDDsourceConductance = model->B3SOIDDsheetResistance * here->B3SOIDDsourceSquares; if (here->B3SOIDDsourceConductance > 0.0) here->B3SOIDDsourceConductance = 1.0 / here->B3SOIDDsourceConductance; else here->B3SOIDDsourceConductance = 0.0; here->B3SOIDDcgso = pParam->B3SOIDDcgso; here->B3SOIDDcgdo = pParam->B3SOIDDcgdo; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_dd/b3soiddinit.h0000644000175000017500000000042313546075722023745 0ustar carstencarsten#ifndef _B3SOIDDINIT_H #define _B3SOIDDINIT_H extern IFparm B3SOIDDpTable[]; extern IFparm B3SOIDDmPTable[]; extern char *B3SOIDDnames[]; extern int B3SOIDDpTSize; extern int B3SOIDDmPTSize; extern int B3SOIDDnSize; extern int B3SOIDDiSize; extern int B3SOIDDmSize; #endif tmpk8ny_4pz/src/spicelib/devices/bsim3soi_dd/b3soiddtrunc.c0000644000175000017500000000240113546075722024126 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soiddtrunc.c 98/5/01 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMDD2.1 release */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b3soidddef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIDDtrunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { B3SOIDDmodel *model = (B3SOIDDmodel*)inModel; B3SOIDDinstance *here; #ifdef STEPDEBUG double debugtemp; #endif /* STEPDEBUG */ for (; model != NULL; model = B3SOIDDnextModel(model)) { for (here = B3SOIDDinstances(model); here != NULL; here = B3SOIDDnextInstance(here)) { #ifdef STEPDEBUG debugtemp = *timeStep; #endif /* STEPDEBUG */ CKTterr(here->B3SOIDDqb,ckt,timeStep); CKTterr(here->B3SOIDDqg,ckt,timeStep); CKTterr(here->B3SOIDDqd,ckt,timeStep); #ifdef STEPDEBUG if(debugtemp != *timeStep) { printf("device %s reduces step from %g to %g\n", here->B3SOIDDname,debugtemp,*timeStep); } #endif /* STEPDEBUG */ } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_dd/b3soiddgetic.c0000644000175000017500000000311013546075722024064 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soiddgetic.c 98/5/01 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMDD2.1 release */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b3soidddef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIDDgetic(GENmodel *inModel, CKTcircuit *ckt) { B3SOIDDmodel *model = (B3SOIDDmodel*)inModel; B3SOIDDinstance *here; for (; model ; model = B3SOIDDnextModel(model)) { for (here = B3SOIDDinstances(model); here; here = B3SOIDDnextInstance(here)) { if(!here->B3SOIDDicVBSGiven) { here->B3SOIDDicVBS = *(ckt->CKTrhs + here->B3SOIDDbNode) - *(ckt->CKTrhs + here->B3SOIDDsNode); } if (!here->B3SOIDDicVDSGiven) { here->B3SOIDDicVDS = *(ckt->CKTrhs + here->B3SOIDDdNode) - *(ckt->CKTrhs + here->B3SOIDDsNode); } if (!here->B3SOIDDicVGSGiven) { here->B3SOIDDicVGS = *(ckt->CKTrhs + here->B3SOIDDgNode) - *(ckt->CKTrhs + here->B3SOIDDsNode); } if (!here->B3SOIDDicVESGiven) { here->B3SOIDDicVES = *(ckt->CKTrhs + here->B3SOIDDeNode) - *(ckt->CKTrhs + here->B3SOIDDsNode); } if (!here->B3SOIDDicVPSGiven) { here->B3SOIDDicVPS = *(ckt->CKTrhs + here->B3SOIDDpNode) - *(ckt->CKTrhs + here->B3SOIDDsNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_dd/b3soiddmask.c0000644000175000017500000012075713546075722023745 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: Weidong Liu and Pin Su Feb 1999 Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang Modified by Wei Jin 99/9/27 File: b3soiddmask.c 98/5/01 Modified by Paolo Nenzi 2002 **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "b3soidddef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIDDmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { B3SOIDDmodel *model = (B3SOIDDmodel *)inst; NG_IGNORE(ckt); switch(which) { case B3SOIDD_MOD_MOBMOD: value->iValue = model->B3SOIDDmobMod; return(OK); case B3SOIDD_MOD_PARAMCHK: value->iValue = model->B3SOIDDparamChk; return(OK); case B3SOIDD_MOD_BINUNIT: value->iValue = model->B3SOIDDbinUnit; return(OK); case B3SOIDD_MOD_CAPMOD: value->iValue = model->B3SOIDDcapMod; return(OK); case B3SOIDD_MOD_SHMOD: value->iValue = model->B3SOIDDshMod; return(OK); case B3SOIDD_MOD_NOIMOD: value->iValue = model->B3SOIDDnoiMod; return(OK); case B3SOIDD_MOD_VERSION : value->rValue = model->B3SOIDDversion; return(OK); case B3SOIDD_MOD_TOX : value->rValue = model->B3SOIDDtox; return(OK); case B3SOIDD_MOD_CDSC : value->rValue = model->B3SOIDDcdsc; return(OK); case B3SOIDD_MOD_CDSCB : value->rValue = model->B3SOIDDcdscb; return(OK); case B3SOIDD_MOD_CDSCD : value->rValue = model->B3SOIDDcdscd; return(OK); case B3SOIDD_MOD_CIT : value->rValue = model->B3SOIDDcit; return(OK); case B3SOIDD_MOD_NFACTOR : value->rValue = model->B3SOIDDnfactor; return(OK); case B3SOIDD_MOD_VSAT: value->rValue = model->B3SOIDDvsat; return(OK); case B3SOIDD_MOD_AT: value->rValue = model->B3SOIDDat; return(OK); case B3SOIDD_MOD_A0: value->rValue = model->B3SOIDDa0; return(OK); case B3SOIDD_MOD_AGS: value->rValue = model->B3SOIDDags; return(OK); case B3SOIDD_MOD_A1: value->rValue = model->B3SOIDDa1; return(OK); case B3SOIDD_MOD_A2: value->rValue = model->B3SOIDDa2; return(OK); case B3SOIDD_MOD_KETA: value->rValue = model->B3SOIDDketa; return(OK); case B3SOIDD_MOD_NSUB: value->rValue = model->B3SOIDDnsub; return(OK); case B3SOIDD_MOD_NPEAK: value->rValue = model->B3SOIDDnpeak; return(OK); case B3SOIDD_MOD_NGATE: value->rValue = model->B3SOIDDngate; return(OK); case B3SOIDD_MOD_GAMMA1: value->rValue = model->B3SOIDDgamma1; return(OK); case B3SOIDD_MOD_GAMMA2: value->rValue = model->B3SOIDDgamma2; return(OK); case B3SOIDD_MOD_VBX: value->rValue = model->B3SOIDDvbx; return(OK); case B3SOIDD_MOD_VBM: value->rValue = model->B3SOIDDvbm; return(OK); case B3SOIDD_MOD_XT: value->rValue = model->B3SOIDDxt; return(OK); case B3SOIDD_MOD_K1: value->rValue = model->B3SOIDDk1; return(OK); case B3SOIDD_MOD_KT1: value->rValue = model->B3SOIDDkt1; return(OK); case B3SOIDD_MOD_KT1L: value->rValue = model->B3SOIDDkt1l; return(OK); case B3SOIDD_MOD_KT2 : value->rValue = model->B3SOIDDkt2; return(OK); case B3SOIDD_MOD_K2 : value->rValue = model->B3SOIDDk2; return(OK); case B3SOIDD_MOD_K3: value->rValue = model->B3SOIDDk3; return(OK); case B3SOIDD_MOD_K3B: value->rValue = model->B3SOIDDk3b; return(OK); case B3SOIDD_MOD_W0: value->rValue = model->B3SOIDDw0; return(OK); case B3SOIDD_MOD_NLX: value->rValue = model->B3SOIDDnlx; return(OK); case B3SOIDD_MOD_DVT0 : value->rValue = model->B3SOIDDdvt0; return(OK); case B3SOIDD_MOD_DVT1 : value->rValue = model->B3SOIDDdvt1; return(OK); case B3SOIDD_MOD_DVT2 : value->rValue = model->B3SOIDDdvt2; return(OK); case B3SOIDD_MOD_DVT0W : value->rValue = model->B3SOIDDdvt0w; return(OK); case B3SOIDD_MOD_DVT1W : value->rValue = model->B3SOIDDdvt1w; return(OK); case B3SOIDD_MOD_DVT2W : value->rValue = model->B3SOIDDdvt2w; return(OK); case B3SOIDD_MOD_DROUT : value->rValue = model->B3SOIDDdrout; return(OK); case B3SOIDD_MOD_DSUB : value->rValue = model->B3SOIDDdsub; return(OK); case B3SOIDD_MOD_VTH0: value->rValue = model->B3SOIDDvth0; return(OK); case B3SOIDD_MOD_UA: value->rValue = model->B3SOIDDua; return(OK); case B3SOIDD_MOD_UA1: value->rValue = model->B3SOIDDua1; return(OK); case B3SOIDD_MOD_UB: value->rValue = model->B3SOIDDub; return(OK); case B3SOIDD_MOD_UB1: value->rValue = model->B3SOIDDub1; return(OK); case B3SOIDD_MOD_UC: value->rValue = model->B3SOIDDuc; return(OK); case B3SOIDD_MOD_UC1: value->rValue = model->B3SOIDDuc1; return(OK); case B3SOIDD_MOD_U0: value->rValue = model->B3SOIDDu0; return(OK); case B3SOIDD_MOD_UTE: value->rValue = model->B3SOIDDute; return(OK); case B3SOIDD_MOD_VOFF: value->rValue = model->B3SOIDDvoff; return(OK); case B3SOIDD_MOD_DELTA: value->rValue = model->B3SOIDDdelta; return(OK); case B3SOIDD_MOD_RDSW: value->rValue = model->B3SOIDDrdsw; return(OK); case B3SOIDD_MOD_PRWG: value->rValue = model->B3SOIDDprwg; return(OK); case B3SOIDD_MOD_PRWB: value->rValue = model->B3SOIDDprwb; return(OK); case B3SOIDD_MOD_PRT: value->rValue = model->B3SOIDDprt; return(OK); case B3SOIDD_MOD_ETA0: value->rValue = model->B3SOIDDeta0; return(OK); case B3SOIDD_MOD_ETAB: value->rValue = model->B3SOIDDetab; return(OK); case B3SOIDD_MOD_PCLM: value->rValue = model->B3SOIDDpclm; return(OK); case B3SOIDD_MOD_PDIBL1: value->rValue = model->B3SOIDDpdibl1; return(OK); case B3SOIDD_MOD_PDIBL2: value->rValue = model->B3SOIDDpdibl2; return(OK); case B3SOIDD_MOD_PDIBLB: value->rValue = model->B3SOIDDpdiblb; return(OK); case B3SOIDD_MOD_PVAG: value->rValue = model->B3SOIDDpvag; return(OK); case B3SOIDD_MOD_WR: value->rValue = model->B3SOIDDwr; return(OK); case B3SOIDD_MOD_DWG: value->rValue = model->B3SOIDDdwg; return(OK); case B3SOIDD_MOD_DWB: value->rValue = model->B3SOIDDdwb; return(OK); case B3SOIDD_MOD_B0: value->rValue = model->B3SOIDDb0; return(OK); case B3SOIDD_MOD_B1: value->rValue = model->B3SOIDDb1; return(OK); case B3SOIDD_MOD_ALPHA0: value->rValue = model->B3SOIDDalpha0; return(OK); case B3SOIDD_MOD_ALPHA1: value->rValue = model->B3SOIDDalpha1; return(OK); case B3SOIDD_MOD_BETA0: value->rValue = model->B3SOIDDbeta0; return(OK); case B3SOIDD_MOD_CGSL: value->rValue = model->B3SOIDDcgsl; return(OK); case B3SOIDD_MOD_CGDL: value->rValue = model->B3SOIDDcgdl; return(OK); case B3SOIDD_MOD_CKAPPA: value->rValue = model->B3SOIDDckappa; return(OK); case B3SOIDD_MOD_CF: value->rValue = model->B3SOIDDcf; return(OK); case B3SOIDD_MOD_CLC: value->rValue = model->B3SOIDDclc; return(OK); case B3SOIDD_MOD_CLE: value->rValue = model->B3SOIDDcle; return(OK); case B3SOIDD_MOD_DWC: value->rValue = model->B3SOIDDdwc; return(OK); case B3SOIDD_MOD_DLC: value->rValue = model->B3SOIDDdlc; return(OK); case B3SOIDD_MOD_TBOX: value->rValue = model->B3SOIDDtbox; return(OK); case B3SOIDD_MOD_TSI: value->rValue = model->B3SOIDDtsi; return(OK); case B3SOIDD_MOD_KB1: value->rValue = model->B3SOIDDkb1; return(OK); case B3SOIDD_MOD_KB3: value->rValue = model->B3SOIDDkb3; return(OK); case B3SOIDD_MOD_DVBD0: value->rValue = model->B3SOIDDdvbd0; return(OK); case B3SOIDD_MOD_DVBD1: value->rValue = model->B3SOIDDdvbd1; return(OK); case B3SOIDD_MOD_DELP: value->rValue = model->B3SOIDDdelp; return(OK); case B3SOIDD_MOD_VBSA: value->rValue = model->B3SOIDDvbsa; return(OK); case B3SOIDD_MOD_RBODY: value->rValue = model->B3SOIDDrbody; return(OK); case B3SOIDD_MOD_RBSH: value->rValue = model->B3SOIDDrbsh; return(OK); case B3SOIDD_MOD_ADICE0: value->rValue = model->B3SOIDDadice0; return(OK); case B3SOIDD_MOD_ABP: value->rValue = model->B3SOIDDabp; return(OK); case B3SOIDD_MOD_MXC: value->rValue = model->B3SOIDDmxc; return(OK); case B3SOIDD_MOD_RTH0: value->rValue = model->B3SOIDDrth0; return(OK); case B3SOIDD_MOD_CTH0: value->rValue = model->B3SOIDDcth0; return(OK); case B3SOIDD_MOD_AII: value->rValue = model->B3SOIDDaii; return(OK); case B3SOIDD_MOD_BII: value->rValue = model->B3SOIDDbii; return(OK); case B3SOIDD_MOD_CII: value->rValue = model->B3SOIDDcii; return(OK); case B3SOIDD_MOD_DII: value->rValue = model->B3SOIDDdii; return(OK); case B3SOIDD_MOD_NDIODE: value->rValue = model->B3SOIDDndiode; return(OK); case B3SOIDD_MOD_NTUN: value->rValue = model->B3SOIDDntun; return(OK); case B3SOIDD_MOD_ISBJT: value->rValue = model->B3SOIDDisbjt; return(OK); case B3SOIDD_MOD_ISDIF: value->rValue = model->B3SOIDDisdif; return(OK); case B3SOIDD_MOD_ISREC: value->rValue = model->B3SOIDDisrec; return(OK); case B3SOIDD_MOD_ISTUN: value->rValue = model->B3SOIDDistun; return(OK); case B3SOIDD_MOD_XBJT: value->rValue = model->B3SOIDDxbjt; return(OK); case B3SOIDD_MOD_XREC: value->rValue = model->B3SOIDDxrec; return(OK); case B3SOIDD_MOD_XTUN: value->rValue = model->B3SOIDDxtun; return(OK); case B3SOIDD_MOD_EDL: value->rValue = model->B3SOIDDedl; return(OK); case B3SOIDD_MOD_KBJT1: value->rValue = model->B3SOIDDkbjt1; return(OK); case B3SOIDD_MOD_TT: value->rValue = model->B3SOIDDtt; return(OK); case B3SOIDD_MOD_VSDTH: value->rValue = model->B3SOIDDvsdth; return(OK); case B3SOIDD_MOD_VSDFB: value->rValue = model->B3SOIDDvsdfb; return(OK); case B3SOIDD_MOD_CSDMIN: value->rValue = model->B3SOIDDcsdmin; return(OK); case B3SOIDD_MOD_ASD: value->rValue = model->B3SOIDDasd; return(OK); case B3SOIDD_MOD_TNOM : value->rValue = model->B3SOIDDtnom; return(OK); case B3SOIDD_MOD_CGSO: value->rValue = model->B3SOIDDcgso; return(OK); case B3SOIDD_MOD_CGDO: value->rValue = model->B3SOIDDcgdo; return(OK); case B3SOIDD_MOD_CGEO: value->rValue = model->B3SOIDDcgeo; return(OK); case B3SOIDD_MOD_XPART: value->rValue = model->B3SOIDDxpart; return(OK); case B3SOIDD_MOD_RSH: value->rValue = model->B3SOIDDsheetResistance; return(OK); case B3SOIDD_MOD_PBSWG: value->rValue = model->B3SOIDDGatesidewallJctPotential; return(OK); case B3SOIDD_MOD_MJSWG: value->rValue = model->B3SOIDDbodyJctGateSideGradingCoeff; return(OK); case B3SOIDD_MOD_CJSWG: value->rValue = model->B3SOIDDunitLengthGateSidewallJctCap; return(OK); case B3SOIDD_MOD_CSDESW: value->rValue = model->B3SOIDDcsdesw; return(OK); case B3SOIDD_MOD_LINT: value->rValue = model->B3SOIDDLint; return(OK); case B3SOIDD_MOD_LL: value->rValue = model->B3SOIDDLl; return(OK); case B3SOIDD_MOD_LLN: value->rValue = model->B3SOIDDLln; return(OK); case B3SOIDD_MOD_LW: value->rValue = model->B3SOIDDLw; return(OK); case B3SOIDD_MOD_LWN: value->rValue = model->B3SOIDDLwn; return(OK); case B3SOIDD_MOD_LWL: value->rValue = model->B3SOIDDLwl; return(OK); case B3SOIDD_MOD_WINT: value->rValue = model->B3SOIDDWint; return(OK); case B3SOIDD_MOD_WL: value->rValue = model->B3SOIDDWl; return(OK); case B3SOIDD_MOD_WLN: value->rValue = model->B3SOIDDWln; return(OK); case B3SOIDD_MOD_WW: value->rValue = model->B3SOIDDWw; return(OK); case B3SOIDD_MOD_WWN: value->rValue = model->B3SOIDDWwn; return(OK); case B3SOIDD_MOD_WWL: value->rValue = model->B3SOIDDWwl; return(OK); case B3SOIDD_MOD_NOIA: value->rValue = model->B3SOIDDoxideTrapDensityA; return(OK); case B3SOIDD_MOD_NOIB: value->rValue = model->B3SOIDDoxideTrapDensityB; return(OK); case B3SOIDD_MOD_NOIC: value->rValue = model->B3SOIDDoxideTrapDensityC; return(OK); case B3SOIDD_MOD_NOIF: value->rValue = model->B3SOIDDnoif; return(OK); case B3SOIDD_MOD_EM: value->rValue = model->B3SOIDDem; return(OK); case B3SOIDD_MOD_EF: value->rValue = model->B3SOIDDef; return(OK); case B3SOIDD_MOD_AF: value->rValue = model->B3SOIDDaf; return(OK); case B3SOIDD_MOD_KF: value->rValue = model->B3SOIDDkf; return(OK); /* Added for binning - START */ /* Length Dependence */ case B3SOIDD_MOD_LNPEAK: value->rValue = model->B3SOIDDlnpeak; return(OK); case B3SOIDD_MOD_LNSUB: value->rValue = model->B3SOIDDlnsub; return(OK); case B3SOIDD_MOD_LNGATE: value->rValue = model->B3SOIDDlngate; return(OK); case B3SOIDD_MOD_LVTH0: value->rValue = model->B3SOIDDlvth0; return(OK); case B3SOIDD_MOD_LK1: value->rValue = model->B3SOIDDlk1; return(OK); case B3SOIDD_MOD_LK2: value->rValue = model->B3SOIDDlk2; return(OK); case B3SOIDD_MOD_LK3: value->rValue = model->B3SOIDDlk3; return(OK); case B3SOIDD_MOD_LK3B: value->rValue = model->B3SOIDDlk3b; return(OK); case B3SOIDD_MOD_LVBSA: value->rValue = model->B3SOIDDlvbsa; return(OK); case B3SOIDD_MOD_LDELP: value->rValue = model->B3SOIDDldelp; return(OK); case B3SOIDD_MOD_LKB1: value->rValue = model->B3SOIDDlkb1; return(OK); case B3SOIDD_MOD_LKB3: value->rValue = model->B3SOIDDlkb3; return(OK); case B3SOIDD_MOD_LDVBD0: value->rValue = model->B3SOIDDdvbd0; return(OK); case B3SOIDD_MOD_LDVBD1: value->rValue = model->B3SOIDDdvbd1; return(OK); case B3SOIDD_MOD_LW0: value->rValue = model->B3SOIDDlw0; return(OK); case B3SOIDD_MOD_LNLX: value->rValue = model->B3SOIDDlnlx; return(OK); case B3SOIDD_MOD_LDVT0 : value->rValue = model->B3SOIDDldvt0; return(OK); case B3SOIDD_MOD_LDVT1 : value->rValue = model->B3SOIDDldvt1; return(OK); case B3SOIDD_MOD_LDVT2 : value->rValue = model->B3SOIDDldvt2; return(OK); case B3SOIDD_MOD_LDVT0W : value->rValue = model->B3SOIDDldvt0w; return(OK); case B3SOIDD_MOD_LDVT1W : value->rValue = model->B3SOIDDldvt1w; return(OK); case B3SOIDD_MOD_LDVT2W : value->rValue = model->B3SOIDDldvt2w; return(OK); case B3SOIDD_MOD_LU0: value->rValue = model->B3SOIDDlu0; return(OK); case B3SOIDD_MOD_LUA: value->rValue = model->B3SOIDDlua; return(OK); case B3SOIDD_MOD_LUB: value->rValue = model->B3SOIDDlub; return(OK); case B3SOIDD_MOD_LUC: value->rValue = model->B3SOIDDluc; return(OK); case B3SOIDD_MOD_LVSAT: value->rValue = model->B3SOIDDlvsat; return(OK); case B3SOIDD_MOD_LA0: value->rValue = model->B3SOIDDla0; return(OK); case B3SOIDD_MOD_LAGS: value->rValue = model->B3SOIDDlags; return(OK); case B3SOIDD_MOD_LB0: value->rValue = model->B3SOIDDlb0; return(OK); case B3SOIDD_MOD_LB1: value->rValue = model->B3SOIDDlb1; return(OK); case B3SOIDD_MOD_LKETA: value->rValue = model->B3SOIDDlketa; return(OK); case B3SOIDD_MOD_LABP: value->rValue = model->B3SOIDDlabp; return(OK); case B3SOIDD_MOD_LMXC: value->rValue = model->B3SOIDDlmxc; return(OK); case B3SOIDD_MOD_LADICE0: value->rValue = model->B3SOIDDladice0; return(OK); case B3SOIDD_MOD_LA1: value->rValue = model->B3SOIDDla1; return(OK); case B3SOIDD_MOD_LA2: value->rValue = model->B3SOIDDla2; return(OK); case B3SOIDD_MOD_LRDSW: value->rValue = model->B3SOIDDlrdsw; return(OK); case B3SOIDD_MOD_LPRWB: value->rValue = model->B3SOIDDlprwb; return(OK); case B3SOIDD_MOD_LPRWG: value->rValue = model->B3SOIDDlprwg; return(OK); case B3SOIDD_MOD_LWR: value->rValue = model->B3SOIDDlwr; return(OK); case B3SOIDD_MOD_LNFACTOR : value->rValue = model->B3SOIDDlnfactor; return(OK); case B3SOIDD_MOD_LDWG: value->rValue = model->B3SOIDDldwg; return(OK); case B3SOIDD_MOD_LDWB: value->rValue = model->B3SOIDDldwb; return(OK); case B3SOIDD_MOD_LVOFF: value->rValue = model->B3SOIDDlvoff; return(OK); case B3SOIDD_MOD_LETA0: value->rValue = model->B3SOIDDleta0; return(OK); case B3SOIDD_MOD_LETAB: value->rValue = model->B3SOIDDletab; return(OK); case B3SOIDD_MOD_LDSUB : value->rValue = model->B3SOIDDldsub; return(OK); case B3SOIDD_MOD_LCIT : value->rValue = model->B3SOIDDlcit; return(OK); case B3SOIDD_MOD_LCDSC : value->rValue = model->B3SOIDDlcdsc; return(OK); case B3SOIDD_MOD_LCDSCB : value->rValue = model->B3SOIDDlcdscb; return(OK); case B3SOIDD_MOD_LCDSCD : value->rValue = model->B3SOIDDlcdscd; return(OK); case B3SOIDD_MOD_LPCLM: value->rValue = model->B3SOIDDlpclm; return(OK); case B3SOIDD_MOD_LPDIBL1: value->rValue = model->B3SOIDDlpdibl1; return(OK); case B3SOIDD_MOD_LPDIBL2: value->rValue = model->B3SOIDDlpdibl2; return(OK); case B3SOIDD_MOD_LPDIBLB: value->rValue = model->B3SOIDDlpdiblb; return(OK); case B3SOIDD_MOD_LDROUT : value->rValue = model->B3SOIDDldrout; return(OK); case B3SOIDD_MOD_LPVAG: value->rValue = model->B3SOIDDlpvag; return(OK); case B3SOIDD_MOD_LDELTA: value->rValue = model->B3SOIDDldelta; return(OK); case B3SOIDD_MOD_LAII: value->rValue = model->B3SOIDDlaii; return(OK); case B3SOIDD_MOD_LBII: value->rValue = model->B3SOIDDlbii; return(OK); case B3SOIDD_MOD_LCII: value->rValue = model->B3SOIDDlcii; return(OK); case B3SOIDD_MOD_LDII: value->rValue = model->B3SOIDDldii; return(OK); case B3SOIDD_MOD_LALPHA0: value->rValue = model->B3SOIDDlalpha0; return(OK); case B3SOIDD_MOD_LALPHA1: value->rValue = model->B3SOIDDlalpha1; return(OK); case B3SOIDD_MOD_LBETA0: value->rValue = model->B3SOIDDlbeta0; return(OK); case B3SOIDD_MOD_LAGIDL: value->rValue = model->B3SOIDDlagidl; return(OK); case B3SOIDD_MOD_LBGIDL: value->rValue = model->B3SOIDDlbgidl; return(OK); case B3SOIDD_MOD_LNGIDL: value->rValue = model->B3SOIDDlngidl; return(OK); case B3SOIDD_MOD_LNTUN: value->rValue = model->B3SOIDDlntun; return(OK); case B3SOIDD_MOD_LNDIODE: value->rValue = model->B3SOIDDlndiode; return(OK); case B3SOIDD_MOD_LISBJT: value->rValue = model->B3SOIDDlisbjt; return(OK); case B3SOIDD_MOD_LISDIF: value->rValue = model->B3SOIDDlisdif; return(OK); case B3SOIDD_MOD_LISREC: value->rValue = model->B3SOIDDlisrec; return(OK); case B3SOIDD_MOD_LISTUN: value->rValue = model->B3SOIDDlistun; return(OK); case B3SOIDD_MOD_LEDL: value->rValue = model->B3SOIDDledl; return(OK); case B3SOIDD_MOD_LKBJT1: value->rValue = model->B3SOIDDlkbjt1; return(OK); /* CV Model */ case B3SOIDD_MOD_LVSDFB: value->rValue = model->B3SOIDDlvsdfb; return(OK); case B3SOIDD_MOD_LVSDTH: value->rValue = model->B3SOIDDlvsdth; return(OK); /* Width Dependence */ case B3SOIDD_MOD_WNPEAK: value->rValue = model->B3SOIDDwnpeak; return(OK); case B3SOIDD_MOD_WNSUB: value->rValue = model->B3SOIDDwnsub; return(OK); case B3SOIDD_MOD_WNGATE: value->rValue = model->B3SOIDDwngate; return(OK); case B3SOIDD_MOD_WVTH0: value->rValue = model->B3SOIDDwvth0; return(OK); case B3SOIDD_MOD_WK1: value->rValue = model->B3SOIDDwk1; return(OK); case B3SOIDD_MOD_WK2: value->rValue = model->B3SOIDDwk2; return(OK); case B3SOIDD_MOD_WK3: value->rValue = model->B3SOIDDwk3; return(OK); case B3SOIDD_MOD_WK3B: value->rValue = model->B3SOIDDwk3b; return(OK); case B3SOIDD_MOD_WVBSA: value->rValue = model->B3SOIDDwvbsa; return(OK); case B3SOIDD_MOD_WDELP: value->rValue = model->B3SOIDDwdelp; return(OK); case B3SOIDD_MOD_WKB1: value->rValue = model->B3SOIDDwkb1; return(OK); case B3SOIDD_MOD_WKB3: value->rValue = model->B3SOIDDwkb3; return(OK); case B3SOIDD_MOD_WDVBD0: value->rValue = model->B3SOIDDdvbd0; return(OK); case B3SOIDD_MOD_WDVBD1: value->rValue = model->B3SOIDDdvbd1; return(OK); case B3SOIDD_MOD_WW0: value->rValue = model->B3SOIDDww0; return(OK); case B3SOIDD_MOD_WNLX: value->rValue = model->B3SOIDDwnlx; return(OK); case B3SOIDD_MOD_WDVT0 : value->rValue = model->B3SOIDDwdvt0; return(OK); case B3SOIDD_MOD_WDVT1 : value->rValue = model->B3SOIDDwdvt1; return(OK); case B3SOIDD_MOD_WDVT2 : value->rValue = model->B3SOIDDwdvt2; return(OK); case B3SOIDD_MOD_WDVT0W : value->rValue = model->B3SOIDDwdvt0w; return(OK); case B3SOIDD_MOD_WDVT1W : value->rValue = model->B3SOIDDwdvt1w; return(OK); case B3SOIDD_MOD_WDVT2W : value->rValue = model->B3SOIDDwdvt2w; return(OK); case B3SOIDD_MOD_WU0: value->rValue = model->B3SOIDDwu0; return(OK); case B3SOIDD_MOD_WUA: value->rValue = model->B3SOIDDwua; return(OK); case B3SOIDD_MOD_WUB: value->rValue = model->B3SOIDDwub; return(OK); case B3SOIDD_MOD_WUC: value->rValue = model->B3SOIDDwuc; return(OK); case B3SOIDD_MOD_WVSAT: value->rValue = model->B3SOIDDwvsat; return(OK); case B3SOIDD_MOD_WA0: value->rValue = model->B3SOIDDwa0; return(OK); case B3SOIDD_MOD_WAGS: value->rValue = model->B3SOIDDwags; return(OK); case B3SOIDD_MOD_WB0: value->rValue = model->B3SOIDDwb0; return(OK); case B3SOIDD_MOD_WB1: value->rValue = model->B3SOIDDwb1; return(OK); case B3SOIDD_MOD_WKETA: value->rValue = model->B3SOIDDwketa; return(OK); case B3SOIDD_MOD_WABP: value->rValue = model->B3SOIDDwabp; return(OK); case B3SOIDD_MOD_WMXC: value->rValue = model->B3SOIDDwmxc; return(OK); case B3SOIDD_MOD_WADICE0: value->rValue = model->B3SOIDDwadice0; return(OK); case B3SOIDD_MOD_WA1: value->rValue = model->B3SOIDDwa1; return(OK); case B3SOIDD_MOD_WA2: value->rValue = model->B3SOIDDwa2; return(OK); case B3SOIDD_MOD_WRDSW: value->rValue = model->B3SOIDDwrdsw; return(OK); case B3SOIDD_MOD_WPRWB: value->rValue = model->B3SOIDDwprwb; return(OK); case B3SOIDD_MOD_WPRWG: value->rValue = model->B3SOIDDwprwg; return(OK); case B3SOIDD_MOD_WWR: value->rValue = model->B3SOIDDwwr; return(OK); case B3SOIDD_MOD_WNFACTOR : value->rValue = model->B3SOIDDwnfactor; return(OK); case B3SOIDD_MOD_WDWG: value->rValue = model->B3SOIDDwdwg; return(OK); case B3SOIDD_MOD_WDWB: value->rValue = model->B3SOIDDwdwb; return(OK); case B3SOIDD_MOD_WVOFF: value->rValue = model->B3SOIDDwvoff; return(OK); case B3SOIDD_MOD_WETA0: value->rValue = model->B3SOIDDweta0; return(OK); case B3SOIDD_MOD_WETAB: value->rValue = model->B3SOIDDwetab; return(OK); case B3SOIDD_MOD_WDSUB : value->rValue = model->B3SOIDDwdsub; return(OK); case B3SOIDD_MOD_WCIT : value->rValue = model->B3SOIDDwcit; return(OK); case B3SOIDD_MOD_WCDSC : value->rValue = model->B3SOIDDwcdsc; return(OK); case B3SOIDD_MOD_WCDSCB : value->rValue = model->B3SOIDDwcdscb; return(OK); case B3SOIDD_MOD_WCDSCD : value->rValue = model->B3SOIDDwcdscd; return(OK); case B3SOIDD_MOD_WPCLM: value->rValue = model->B3SOIDDwpclm; return(OK); case B3SOIDD_MOD_WPDIBL1: value->rValue = model->B3SOIDDwpdibl1; return(OK); case B3SOIDD_MOD_WPDIBL2: value->rValue = model->B3SOIDDwpdibl2; return(OK); case B3SOIDD_MOD_WPDIBLB: value->rValue = model->B3SOIDDwpdiblb; return(OK); case B3SOIDD_MOD_WDROUT : value->rValue = model->B3SOIDDwdrout; return(OK); case B3SOIDD_MOD_WPVAG: value->rValue = model->B3SOIDDwpvag; return(OK); case B3SOIDD_MOD_WDELTA: value->rValue = model->B3SOIDDwdelta; return(OK); case B3SOIDD_MOD_WAII: value->rValue = model->B3SOIDDwaii; return(OK); case B3SOIDD_MOD_WBII: value->rValue = model->B3SOIDDwbii; return(OK); case B3SOIDD_MOD_WCII: value->rValue = model->B3SOIDDwcii; return(OK); case B3SOIDD_MOD_WDII: value->rValue = model->B3SOIDDwdii; return(OK); case B3SOIDD_MOD_WALPHA0: value->rValue = model->B3SOIDDwalpha0; return(OK); case B3SOIDD_MOD_WALPHA1: value->rValue = model->B3SOIDDwalpha1; return(OK); case B3SOIDD_MOD_WBETA0: value->rValue = model->B3SOIDDwbeta0; return(OK); case B3SOIDD_MOD_WAGIDL: value->rValue = model->B3SOIDDwagidl; return(OK); case B3SOIDD_MOD_WBGIDL: value->rValue = model->B3SOIDDwbgidl; return(OK); case B3SOIDD_MOD_WNGIDL: value->rValue = model->B3SOIDDwngidl; return(OK); case B3SOIDD_MOD_WNTUN: value->rValue = model->B3SOIDDwntun; return(OK); case B3SOIDD_MOD_WNDIODE: value->rValue = model->B3SOIDDwndiode; return(OK); case B3SOIDD_MOD_WISBJT: value->rValue = model->B3SOIDDwisbjt; return(OK); case B3SOIDD_MOD_WISDIF: value->rValue = model->B3SOIDDwisdif; return(OK); case B3SOIDD_MOD_WISREC: value->rValue = model->B3SOIDDwisrec; return(OK); case B3SOIDD_MOD_WISTUN: value->rValue = model->B3SOIDDwistun; return(OK); case B3SOIDD_MOD_WEDL: value->rValue = model->B3SOIDDwedl; return(OK); case B3SOIDD_MOD_WKBJT1: value->rValue = model->B3SOIDDwkbjt1; return(OK); /* CV Model */ case B3SOIDD_MOD_WVSDFB: value->rValue = model->B3SOIDDwvsdfb; return(OK); case B3SOIDD_MOD_WVSDTH: value->rValue = model->B3SOIDDwvsdth; return(OK); /* Cross-term Dependence */ case B3SOIDD_MOD_PNPEAK: value->rValue = model->B3SOIDDpnpeak; return(OK); case B3SOIDD_MOD_PNSUB: value->rValue = model->B3SOIDDpnsub; return(OK); case B3SOIDD_MOD_PNGATE: value->rValue = model->B3SOIDDpngate; return(OK); case B3SOIDD_MOD_PVTH0: value->rValue = model->B3SOIDDpvth0; return(OK); case B3SOIDD_MOD_PK1: value->rValue = model->B3SOIDDpk1; return(OK); case B3SOIDD_MOD_PK2: value->rValue = model->B3SOIDDpk2; return(OK); case B3SOIDD_MOD_PK3: value->rValue = model->B3SOIDDpk3; return(OK); case B3SOIDD_MOD_PK3B: value->rValue = model->B3SOIDDpk3b; return(OK); case B3SOIDD_MOD_PVBSA: value->rValue = model->B3SOIDDpvbsa; return(OK); case B3SOIDD_MOD_PDELP: value->rValue = model->B3SOIDDpdelp; return(OK); case B3SOIDD_MOD_PKB1: value->rValue = model->B3SOIDDpkb1; return(OK); case B3SOIDD_MOD_PKB3: value->rValue = model->B3SOIDDpkb3; return(OK); case B3SOIDD_MOD_PDVBD0: value->rValue = model->B3SOIDDdvbd0; return(OK); case B3SOIDD_MOD_PDVBD1: value->rValue = model->B3SOIDDdvbd1; return(OK); case B3SOIDD_MOD_PW0: value->rValue = model->B3SOIDDpw0; return(OK); case B3SOIDD_MOD_PNLX: value->rValue = model->B3SOIDDpnlx; return(OK); case B3SOIDD_MOD_PDVT0 : value->rValue = model->B3SOIDDpdvt0; return(OK); case B3SOIDD_MOD_PDVT1 : value->rValue = model->B3SOIDDpdvt1; return(OK); case B3SOIDD_MOD_PDVT2 : value->rValue = model->B3SOIDDpdvt2; return(OK); case B3SOIDD_MOD_PDVT0W : value->rValue = model->B3SOIDDpdvt0w; return(OK); case B3SOIDD_MOD_PDVT1W : value->rValue = model->B3SOIDDpdvt1w; return(OK); case B3SOIDD_MOD_PDVT2W : value->rValue = model->B3SOIDDpdvt2w; return(OK); case B3SOIDD_MOD_PU0: value->rValue = model->B3SOIDDpu0; return(OK); case B3SOIDD_MOD_PUA: value->rValue = model->B3SOIDDpua; return(OK); case B3SOIDD_MOD_PUB: value->rValue = model->B3SOIDDpub; return(OK); case B3SOIDD_MOD_PUC: value->rValue = model->B3SOIDDpuc; return(OK); case B3SOIDD_MOD_PVSAT: value->rValue = model->B3SOIDDpvsat; return(OK); case B3SOIDD_MOD_PA0: value->rValue = model->B3SOIDDpa0; return(OK); case B3SOIDD_MOD_PAGS: value->rValue = model->B3SOIDDpags; return(OK); case B3SOIDD_MOD_PB0: value->rValue = model->B3SOIDDpb0; return(OK); case B3SOIDD_MOD_PB1: value->rValue = model->B3SOIDDpb1; return(OK); case B3SOIDD_MOD_PKETA: value->rValue = model->B3SOIDDpketa; return(OK); case B3SOIDD_MOD_PABP: value->rValue = model->B3SOIDDpabp; return(OK); case B3SOIDD_MOD_PMXC: value->rValue = model->B3SOIDDpmxc; return(OK); case B3SOIDD_MOD_PADICE0: value->rValue = model->B3SOIDDpadice0; return(OK); case B3SOIDD_MOD_PA1: value->rValue = model->B3SOIDDpa1; return(OK); case B3SOIDD_MOD_PA2: value->rValue = model->B3SOIDDpa2; return(OK); case B3SOIDD_MOD_PRDSW: value->rValue = model->B3SOIDDprdsw; return(OK); case B3SOIDD_MOD_PPRWB: value->rValue = model->B3SOIDDpprwb; return(OK); case B3SOIDD_MOD_PPRWG: value->rValue = model->B3SOIDDpprwg; return(OK); case B3SOIDD_MOD_PWR: value->rValue = model->B3SOIDDpwr; return(OK); case B3SOIDD_MOD_PNFACTOR : value->rValue = model->B3SOIDDpnfactor; return(OK); case B3SOIDD_MOD_PDWG: value->rValue = model->B3SOIDDpdwg; return(OK); case B3SOIDD_MOD_PDWB: value->rValue = model->B3SOIDDpdwb; return(OK); case B3SOIDD_MOD_PVOFF: value->rValue = model->B3SOIDDpvoff; return(OK); case B3SOIDD_MOD_PETA0: value->rValue = model->B3SOIDDpeta0; return(OK); case B3SOIDD_MOD_PETAB: value->rValue = model->B3SOIDDpetab; return(OK); case B3SOIDD_MOD_PDSUB : value->rValue = model->B3SOIDDpdsub; return(OK); case B3SOIDD_MOD_PCIT : value->rValue = model->B3SOIDDpcit; return(OK); case B3SOIDD_MOD_PCDSC : value->rValue = model->B3SOIDDpcdsc; return(OK); case B3SOIDD_MOD_PCDSCB : value->rValue = model->B3SOIDDpcdscb; return(OK); case B3SOIDD_MOD_PCDSCD : value->rValue = model->B3SOIDDpcdscd; return(OK); case B3SOIDD_MOD_PPCLM: value->rValue = model->B3SOIDDppclm; return(OK); case B3SOIDD_MOD_PPDIBL1: value->rValue = model->B3SOIDDppdibl1; return(OK); case B3SOIDD_MOD_PPDIBL2: value->rValue = model->B3SOIDDppdibl2; return(OK); case B3SOIDD_MOD_PPDIBLB: value->rValue = model->B3SOIDDppdiblb; return(OK); case B3SOIDD_MOD_PDROUT : value->rValue = model->B3SOIDDpdrout; return(OK); case B3SOIDD_MOD_PPVAG: value->rValue = model->B3SOIDDppvag; return(OK); case B3SOIDD_MOD_PDELTA: value->rValue = model->B3SOIDDpdelta; return(OK); case B3SOIDD_MOD_PAII: value->rValue = model->B3SOIDDpaii; return(OK); case B3SOIDD_MOD_PBII: value->rValue = model->B3SOIDDpbii; return(OK); case B3SOIDD_MOD_PCII: value->rValue = model->B3SOIDDpcii; return(OK); case B3SOIDD_MOD_PDII: value->rValue = model->B3SOIDDpdii; return(OK); case B3SOIDD_MOD_PALPHA0: value->rValue = model->B3SOIDDpalpha0; return(OK); case B3SOIDD_MOD_PALPHA1: value->rValue = model->B3SOIDDpalpha1; return(OK); case B3SOIDD_MOD_PBETA0: value->rValue = model->B3SOIDDpbeta0; return(OK); case B3SOIDD_MOD_PAGIDL: value->rValue = model->B3SOIDDpagidl; return(OK); case B3SOIDD_MOD_PBGIDL: value->rValue = model->B3SOIDDpbgidl; return(OK); case B3SOIDD_MOD_PNGIDL: value->rValue = model->B3SOIDDpngidl; return(OK); case B3SOIDD_MOD_PNTUN: value->rValue = model->B3SOIDDpntun; return(OK); case B3SOIDD_MOD_PNDIODE: value->rValue = model->B3SOIDDpndiode; return(OK); case B3SOIDD_MOD_PISBJT: value->rValue = model->B3SOIDDpisbjt; return(OK); case B3SOIDD_MOD_PISDIF: value->rValue = model->B3SOIDDpisdif; return(OK); case B3SOIDD_MOD_PISREC: value->rValue = model->B3SOIDDpisrec; return(OK); case B3SOIDD_MOD_PISTUN: value->rValue = model->B3SOIDDpistun; return(OK); case B3SOIDD_MOD_PEDL: value->rValue = model->B3SOIDDpedl; return(OK); case B3SOIDD_MOD_PKBJT1: value->rValue = model->B3SOIDDpkbjt1; return(OK); /* CV Model */ case B3SOIDD_MOD_PVSDFB: value->rValue = model->B3SOIDDpvsdfb; return(OK); case B3SOIDD_MOD_PVSDTH: value->rValue = model->B3SOIDDpvsdth; return(OK); /* Added for binning - END */ default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_dd/b3soiddcvtest.c0000644000175000017500000000612513546075722024312 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soiddcvtest.c 98/5/01 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMDD2.1 release */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "b3soidddef.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIDDconvTest(GENmodel *inModel, CKTcircuit *ckt) { B3SOIDDmodel *model = (B3SOIDDmodel*)inModel; B3SOIDDinstance *here; double delvbd, delvbs, delvds, delvgd, delvgs, vbd, vbs, vds; double cbd, cbhat, cbs, cd, cdhat, tol, vgd, vgdo, vgs; /* loop through all the B3SOIDD device models */ for (; model != NULL; model = B3SOIDDnextModel(model)) { /* loop through all the instances of the model */ for (here = B3SOIDDinstances(model); here != NULL ; here=B3SOIDDnextInstance(here)) { vbs = model->B3SOIDDtype * (*(ckt->CKTrhsOld+here->B3SOIDDbNode) - *(ckt->CKTrhsOld+here->B3SOIDDsNodePrime)); vgs = model->B3SOIDDtype * (*(ckt->CKTrhsOld+here->B3SOIDDgNode) - *(ckt->CKTrhsOld+here->B3SOIDDsNodePrime)); vds = model->B3SOIDDtype * (*(ckt->CKTrhsOld+here->B3SOIDDdNodePrime) - *(ckt->CKTrhsOld+here->B3SOIDDsNodePrime)); vbd = vbs - vds; vgd = vgs - vds; vgdo = *(ckt->CKTstate0 + here->B3SOIDDvgs) - *(ckt->CKTstate0 + here->B3SOIDDvds); delvbs = vbs - *(ckt->CKTstate0 + here->B3SOIDDvbs); delvbd = vbd - *(ckt->CKTstate0 + here->B3SOIDDvbd); delvgs = vgs - *(ckt->CKTstate0 + here->B3SOIDDvgs); delvds = vds - *(ckt->CKTstate0 + here->B3SOIDDvds); delvgd = vgd-vgdo; cd = here->B3SOIDDcd; if (here->B3SOIDDmode >= 0) { cdhat = cd - here->B3SOIDDgjdb * delvbd + here->B3SOIDDgmbs * delvbs + here->B3SOIDDgm * delvgs + here->B3SOIDDgds * delvds; } else { cdhat = cd - (here->B3SOIDDgjdb - here->B3SOIDDgmbs) * delvbd - here->B3SOIDDgm * delvgd + here->B3SOIDDgds * delvds; } /* * check convergence */ if ((here->B3SOIDDoff == 0) || (!(ckt->CKTmode & MODEINITFIX))) { tol = ckt->CKTreltol * MAX(fabs(cdhat), fabs(cd)) + ckt->CKTabstol; if (fabs(cdhat - cd) >= tol) { ckt->CKTnoncon++; return(OK); } cbs = here->B3SOIDDcjs; cbd = here->B3SOIDDcjd; cbhat = cbs + cbd + here->B3SOIDDgjdb * delvbd + here->B3SOIDDgjsb * delvbs; tol = ckt->CKTreltol * MAX(fabs(cbhat), fabs(cbs + cbd)) + ckt->CKTabstol; if (fabs(cbhat - (cbs + cbd)) > tol) { ckt->CKTnoncon++; return(OK); } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_dd/b3soidditf.h0000644000175000017500000000040013546075722023557 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung File: b3soidditf.h **********/ #ifndef DEV_B3SOIDD #define DEV_B3SOIDD #include "b3soiddext.h" SPICEdev *get_b3soidd_info (void); #endif tmpk8ny_4pz/src/spicelib/devices/bsim3soi_dd/b3soiddset.c0000644000175000017500000017162113546075722023601 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: Weidong Liu and Pin Su Feb 1999 Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang Modified by Pin Su, Wei Jin 99/9/27 File: b3soiddset.c 98/5/01 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMDD2.1 release */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "b3soidddef.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define SMOOTHFACTOR 0.1 #define EPSOX 3.453133e-11 #define EPSSI 1.03594e-10 #define PI 3.141592654 #define Charge_q 1.60219e-19 #define Meter2Micron 1.0e6 int B3SOIDDsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { B3SOIDDmodel *model = (B3SOIDDmodel*)inModel; B3SOIDDinstance *here; int error; CKTnode *tmp; double tmp1, tmp2; double nfb0, Cboxt; CKTnode *tmpNode; IFuid tmpName; /* loop through all the B3SOIDD device models */ for( ; model != NULL; model = B3SOIDDnextModel(model)) { /* Default value Processing for B3SOIDD MOSFET Models */ if (!model->B3SOIDDtypeGiven) model->B3SOIDDtype = NMOS; if (!model->B3SOIDDmobModGiven) model->B3SOIDDmobMod = 1; if (!model->B3SOIDDbinUnitGiven) model->B3SOIDDbinUnit = 1; if (!model->B3SOIDDparamChkGiven) model->B3SOIDDparamChk = 0; if (!model->B3SOIDDcapModGiven) model->B3SOIDDcapMod = 2; if (!model->B3SOIDDnoiModGiven) model->B3SOIDDnoiMod = 1; if (!model->B3SOIDDshModGiven) model->B3SOIDDshMod = 0; if (!model->B3SOIDDversionGiven) model->B3SOIDDversion = 2.0; if (!model->B3SOIDDtoxGiven) model->B3SOIDDtox = 100.0e-10; model->B3SOIDDcox = 3.453133e-11 / model->B3SOIDDtox; if (!model->B3SOIDDcdscGiven) model->B3SOIDDcdsc = 2.4e-4; /* unit Q/V/m^2 */ if (!model->B3SOIDDcdscbGiven) model->B3SOIDDcdscb = 0.0; /* unit Q/V/m^2 */ if (!model->B3SOIDDcdscdGiven) model->B3SOIDDcdscd = 0.0; /* unit Q/V/m^2 */ if (!model->B3SOIDDcitGiven) model->B3SOIDDcit = 0.0; /* unit Q/V/m^2 */ if (!model->B3SOIDDnfactorGiven) model->B3SOIDDnfactor = 1; if (!model->B3SOIDDvsatGiven) model->B3SOIDDvsat = 8.0e4; /* unit m/s */ if (!model->B3SOIDDatGiven) model->B3SOIDDat = 3.3e4; /* unit m/s */ if (!model->B3SOIDDa0Given) model->B3SOIDDa0 = 1.0; if (!model->B3SOIDDagsGiven) model->B3SOIDDags = 0.0; if (!model->B3SOIDDa1Given) model->B3SOIDDa1 = 0.0; if (!model->B3SOIDDa2Given) model->B3SOIDDa2 = 1.0; if (!model->B3SOIDDketaGiven) model->B3SOIDDketa = -0.6; /* unit / V */ if (!model->B3SOIDDnsubGiven) model->B3SOIDDnsub = 6.0e16; /* unit 1/cm3 */ if (!model->B3SOIDDnpeakGiven) model->B3SOIDDnpeak = 1.7e17; /* unit 1/cm3 */ if (!model->B3SOIDDngateGiven) model->B3SOIDDngate = 0; /* unit 1/cm3 */ if (!model->B3SOIDDvbmGiven) model->B3SOIDDvbm = -3.0; if (!model->B3SOIDDxtGiven) model->B3SOIDDxt = 1.55e-7; if (!model->B3SOIDDkt1Given) model->B3SOIDDkt1 = -0.11; /* unit V */ if (!model->B3SOIDDkt1lGiven) model->B3SOIDDkt1l = 0.0; /* unit V*m */ if (!model->B3SOIDDkt2Given) model->B3SOIDDkt2 = 0.022; /* No unit */ if (!model->B3SOIDDk3Given) model->B3SOIDDk3 = 0.0; if (!model->B3SOIDDk3bGiven) model->B3SOIDDk3b = 0.0; if (!model->B3SOIDDw0Given) model->B3SOIDDw0 = 2.5e-6; if (!model->B3SOIDDnlxGiven) model->B3SOIDDnlx = 1.74e-7; if (!model->B3SOIDDdvt0Given) model->B3SOIDDdvt0 = 2.2; if (!model->B3SOIDDdvt1Given) model->B3SOIDDdvt1 = 0.53; if (!model->B3SOIDDdvt2Given) model->B3SOIDDdvt2 = -0.032; /* unit 1 / V */ if (!model->B3SOIDDdvt0wGiven) model->B3SOIDDdvt0w = 0.0; if (!model->B3SOIDDdvt1wGiven) model->B3SOIDDdvt1w = 5.3e6; if (!model->B3SOIDDdvt2wGiven) model->B3SOIDDdvt2w = -0.032; if (!model->B3SOIDDdroutGiven) model->B3SOIDDdrout = 0.56; if (!model->B3SOIDDdsubGiven) model->B3SOIDDdsub = model->B3SOIDDdrout; if (!model->B3SOIDDvth0Given) model->B3SOIDDvth0 = (model->B3SOIDDtype == NMOS) ? 0.7 : -0.7; if (!model->B3SOIDDuaGiven) model->B3SOIDDua = 2.25e-9; /* unit m/V */ if (!model->B3SOIDDua1Given) model->B3SOIDDua1 = 4.31e-9; /* unit m/V */ if (!model->B3SOIDDubGiven) model->B3SOIDDub = 5.87e-19; /* unit (m/V)**2 */ if (!model->B3SOIDDub1Given) model->B3SOIDDub1 = -7.61e-18; /* unit (m/V)**2 */ if (!model->B3SOIDDucGiven) model->B3SOIDDuc = (model->B3SOIDDmobMod == 3) ? -0.0465 : -0.0465e-9; if (!model->B3SOIDDuc1Given) model->B3SOIDDuc1 = (model->B3SOIDDmobMod == 3) ? -0.056 : -0.056e-9; if (!model->B3SOIDDu0Given) model->B3SOIDDu0 = (model->B3SOIDDtype == NMOS) ? 0.067 : 0.025; if (!model->B3SOIDDuteGiven) model->B3SOIDDute = -1.5; if (!model->B3SOIDDvoffGiven) model->B3SOIDDvoff = -0.08; if (!model->B3SOIDDdeltaGiven) model->B3SOIDDdelta = 0.01; if (!model->B3SOIDDrdswGiven) model->B3SOIDDrdsw = 100; if (!model->B3SOIDDprwgGiven) model->B3SOIDDprwg = 0.0; /* unit 1/V */ if (!model->B3SOIDDprwbGiven) model->B3SOIDDprwb = 0.0; if (!model->B3SOIDDprtGiven) model->B3SOIDDprt = 0.0; if (!model->B3SOIDDeta0Given) model->B3SOIDDeta0 = 0.08; /* no unit */ if (!model->B3SOIDDetabGiven) model->B3SOIDDetab = -0.07; /* unit 1/V */ if (!model->B3SOIDDpclmGiven) model->B3SOIDDpclm = 1.3; /* no unit */ if (!model->B3SOIDDpdibl1Given) model->B3SOIDDpdibl1 = .39; /* no unit */ if (!model->B3SOIDDpdibl2Given) model->B3SOIDDpdibl2 = 0.0086; /* no unit */ if (!model->B3SOIDDpdiblbGiven) model->B3SOIDDpdiblb = 0.0; /* 1/V */ if (!model->B3SOIDDpvagGiven) model->B3SOIDDpvag = 0.0; if (!model->B3SOIDDwrGiven) model->B3SOIDDwr = 1.0; if (!model->B3SOIDDdwgGiven) model->B3SOIDDdwg = 0.0; if (!model->B3SOIDDdwbGiven) model->B3SOIDDdwb = 0.0; if (!model->B3SOIDDb0Given) model->B3SOIDDb0 = 0.0; if (!model->B3SOIDDb1Given) model->B3SOIDDb1 = 0.0; if (!model->B3SOIDDalpha0Given) model->B3SOIDDalpha0 = 0.0; if (!model->B3SOIDDalpha1Given) model->B3SOIDDalpha1 = 1.0; if (!model->B3SOIDDbeta0Given) model->B3SOIDDbeta0 = 30.0; if (!model->B3SOIDDcgslGiven) model->B3SOIDDcgsl = 0.0; if (!model->B3SOIDDcgdlGiven) model->B3SOIDDcgdl = 0.0; if (!model->B3SOIDDckappaGiven) model->B3SOIDDckappa = 0.6; if (!model->B3SOIDDclcGiven) model->B3SOIDDclc = 0.1e-7; if (!model->B3SOIDDcleGiven) model->B3SOIDDcle = 0.0; if (!model->B3SOIDDtboxGiven) model->B3SOIDDtbox = 3e-7; if (!model->B3SOIDDtsiGiven) model->B3SOIDDtsi = 1e-7; if (!model->B3SOIDDxjGiven) model->B3SOIDDxj = model->B3SOIDDtsi; if (!model->B3SOIDDkb1Given) model->B3SOIDDkb1 = 1; if (!model->B3SOIDDkb3Given) model->B3SOIDDkb3 = 1; if (!model->B3SOIDDdvbd0Given) model->B3SOIDDdvbd0 = 0.0; if (!model->B3SOIDDdvbd1Given) model->B3SOIDDdvbd1 = 0.0; if (!model->B3SOIDDvbsaGiven) model->B3SOIDDvbsa = 0.0; if (!model->B3SOIDDdelpGiven) model->B3SOIDDdelp = 0.02; if (!model->B3SOIDDrbodyGiven) model->B3SOIDDrbody = 0.0; if (!model->B3SOIDDrbshGiven) model->B3SOIDDrbsh = 0.0; if (!model->B3SOIDDadice0Given) model->B3SOIDDadice0 = 1; if (!model->B3SOIDDabpGiven) model->B3SOIDDabp = 1; if (!model->B3SOIDDmxcGiven) model->B3SOIDDmxc = -0.9; if (!model->B3SOIDDrth0Given) model->B3SOIDDrth0 = 0; if (!model->B3SOIDDcth0Given) model->B3SOIDDcth0 = 0; if (!model->B3SOIDDaiiGiven) model->B3SOIDDaii = 0.0; if (!model->B3SOIDDbiiGiven) model->B3SOIDDbii = 0.0; if (!model->B3SOIDDciiGiven) model->B3SOIDDcii = 0.0; if (!model->B3SOIDDdiiGiven) model->B3SOIDDdii = -1.0; if (!model->B3SOIDDagidlGiven) model->B3SOIDDagidl = 0.0; if (!model->B3SOIDDbgidlGiven) model->B3SOIDDbgidl = 0.0; if (!model->B3SOIDDngidlGiven) model->B3SOIDDngidl = 1.2; if (!model->B3SOIDDndiodeGiven) model->B3SOIDDndiode = 1.0; if (!model->B3SOIDDntunGiven) model->B3SOIDDntun = 10.0; if (!model->B3SOIDDisbjtGiven) model->B3SOIDDisbjt = 1e-6; if (!model->B3SOIDDisdifGiven) model->B3SOIDDisdif = 0.0; if (!model->B3SOIDDisrecGiven) model->B3SOIDDisrec = 1e-5; if (!model->B3SOIDDistunGiven) model->B3SOIDDistun = 0.0; if (!model->B3SOIDDxbjtGiven) model->B3SOIDDxbjt = 2; if (!model->B3SOIDDxdifGiven) model->B3SOIDDxdif = 2; if (!model->B3SOIDDxrecGiven) model->B3SOIDDxrec = 20; if (!model->B3SOIDDxtunGiven) model->B3SOIDDxtun = 0; if (!model->B3SOIDDedlGiven) model->B3SOIDDedl = 2e-6; if (!model->B3SOIDDkbjt1Given) model->B3SOIDDkbjt1 = 0; if (!model->B3SOIDDttGiven) model->B3SOIDDtt = 1e-12; if (!model->B3SOIDDasdGiven) model->B3SOIDDasd = 0.3; /* unit degree celcius */ if (!model->B3SOIDDtnomGiven) model->B3SOIDDtnom = ckt->CKTnomTemp; if (!model->B3SOIDDLintGiven) model->B3SOIDDLint = 0.0; if (!model->B3SOIDDLlGiven) model->B3SOIDDLl = 0.0; if (!model->B3SOIDDLlnGiven) model->B3SOIDDLln = 1.0; if (!model->B3SOIDDLwGiven) model->B3SOIDDLw = 0.0; if (!model->B3SOIDDLwnGiven) model->B3SOIDDLwn = 1.0; if (!model->B3SOIDDLwlGiven) model->B3SOIDDLwl = 0.0; if (!model->B3SOIDDLminGiven) model->B3SOIDDLmin = 0.0; if (!model->B3SOIDDLmaxGiven) model->B3SOIDDLmax = 1.0; if (!model->B3SOIDDWintGiven) model->B3SOIDDWint = 0.0; if (!model->B3SOIDDWlGiven) model->B3SOIDDWl = 0.0; if (!model->B3SOIDDWlnGiven) model->B3SOIDDWln = 1.0; if (!model->B3SOIDDWwGiven) model->B3SOIDDWw = 0.0; if (!model->B3SOIDDWwnGiven) model->B3SOIDDWwn = 1.0; if (!model->B3SOIDDWwlGiven) model->B3SOIDDWwl = 0.0; if (!model->B3SOIDDWminGiven) model->B3SOIDDWmin = 0.0; if (!model->B3SOIDDWmaxGiven) model->B3SOIDDWmax = 1.0; if (!model->B3SOIDDdwcGiven) model->B3SOIDDdwc = model->B3SOIDDWint; if (!model->B3SOIDDdlcGiven) model->B3SOIDDdlc = model->B3SOIDDLint; /* Added for binning - START */ /* Length dependence */ if (!model->B3SOIDDlnpeakGiven) model->B3SOIDDlnpeak = 0.0; if (!model->B3SOIDDlnsubGiven) model->B3SOIDDlnsub = 0.0; if (!model->B3SOIDDlngateGiven) model->B3SOIDDlngate = 0.0; if (!model->B3SOIDDlvth0Given) model->B3SOIDDlvth0 = 0.0; if (!model->B3SOIDDlk1Given) model->B3SOIDDlk1 = 0.0; if (!model->B3SOIDDlk2Given) model->B3SOIDDlk2 = 0.0; if (!model->B3SOIDDlk3Given) model->B3SOIDDlk3 = 0.0; if (!model->B3SOIDDlk3bGiven) model->B3SOIDDlk3b = 0.0; if (!model->B3SOIDDlvbsaGiven) model->B3SOIDDlvbsa = 0.0; if (!model->B3SOIDDldelpGiven) model->B3SOIDDldelp = 0.0; if (!model->B3SOIDDlkb1Given) model->B3SOIDDlkb1 = 0.0; if (!model->B3SOIDDlkb3Given) model->B3SOIDDlkb3 = 1.0; if (!model->B3SOIDDldvbd0Given) model->B3SOIDDldvbd0 = 1.0; if (!model->B3SOIDDldvbd1Given) model->B3SOIDDldvbd1 = 1.0; if (!model->B3SOIDDlw0Given) model->B3SOIDDlw0 = 0.0; if (!model->B3SOIDDlnlxGiven) model->B3SOIDDlnlx = 0.0; if (!model->B3SOIDDldvt0Given) model->B3SOIDDldvt0 = 0.0; if (!model->B3SOIDDldvt1Given) model->B3SOIDDldvt1 = 0.0; if (!model->B3SOIDDldvt2Given) model->B3SOIDDldvt2 = 0.0; if (!model->B3SOIDDldvt0wGiven) model->B3SOIDDldvt0w = 0.0; if (!model->B3SOIDDldvt1wGiven) model->B3SOIDDldvt1w = 0.0; if (!model->B3SOIDDldvt2wGiven) model->B3SOIDDldvt2w = 0.0; if (!model->B3SOIDDlu0Given) model->B3SOIDDlu0 = 0.0; if (!model->B3SOIDDluaGiven) model->B3SOIDDlua = 0.0; if (!model->B3SOIDDlubGiven) model->B3SOIDDlub = 0.0; if (!model->B3SOIDDlucGiven) model->B3SOIDDluc = 0.0; if (!model->B3SOIDDlvsatGiven) model->B3SOIDDlvsat = 0.0; if (!model->B3SOIDDla0Given) model->B3SOIDDla0 = 0.0; if (!model->B3SOIDDlagsGiven) model->B3SOIDDlags = 0.0; if (!model->B3SOIDDlb0Given) model->B3SOIDDlb0 = 0.0; if (!model->B3SOIDDlb1Given) model->B3SOIDDlb1 = 0.0; if (!model->B3SOIDDlketaGiven) model->B3SOIDDlketa = 0.0; if (!model->B3SOIDDlabpGiven) model->B3SOIDDlabp = 0.0; if (!model->B3SOIDDlmxcGiven) model->B3SOIDDlmxc = 0.0; if (!model->B3SOIDDladice0Given) model->B3SOIDDladice0 = 0.0; if (!model->B3SOIDDla1Given) model->B3SOIDDla1 = 0.0; if (!model->B3SOIDDla2Given) model->B3SOIDDla2 = 0.0; if (!model->B3SOIDDlrdswGiven) model->B3SOIDDlrdsw = 0.0; if (!model->B3SOIDDlprwbGiven) model->B3SOIDDlprwb = 0.0; if (!model->B3SOIDDlprwgGiven) model->B3SOIDDlprwg = 0.0; if (!model->B3SOIDDlwrGiven) model->B3SOIDDlwr = 0.0; if (!model->B3SOIDDlnfactorGiven) model->B3SOIDDlnfactor = 0.0; if (!model->B3SOIDDldwgGiven) model->B3SOIDDldwg = 0.0; if (!model->B3SOIDDldwbGiven) model->B3SOIDDldwb = 0.0; if (!model->B3SOIDDlvoffGiven) model->B3SOIDDlvoff = 0.0; if (!model->B3SOIDDleta0Given) model->B3SOIDDleta0 = 0.0; if (!model->B3SOIDDletabGiven) model->B3SOIDDletab = 0.0; if (!model->B3SOIDDldsubGiven) model->B3SOIDDldsub = 0.0; if (!model->B3SOIDDlcitGiven) model->B3SOIDDlcit = 0.0; if (!model->B3SOIDDlcdscGiven) model->B3SOIDDlcdsc = 0.0; if (!model->B3SOIDDlcdscbGiven) model->B3SOIDDlcdscb = 0.0; if (!model->B3SOIDDlcdscdGiven) model->B3SOIDDlcdscd = 0.0; if (!model->B3SOIDDlpclmGiven) model->B3SOIDDlpclm = 0.0; if (!model->B3SOIDDlpdibl1Given) model->B3SOIDDlpdibl1 = 0.0; if (!model->B3SOIDDlpdibl2Given) model->B3SOIDDlpdibl2 = 0.0; if (!model->B3SOIDDlpdiblbGiven) model->B3SOIDDlpdiblb = 0.0; if (!model->B3SOIDDldroutGiven) model->B3SOIDDldrout = 0.0; if (!model->B3SOIDDlpvagGiven) model->B3SOIDDlpvag = 0.0; if (!model->B3SOIDDldeltaGiven) model->B3SOIDDldelta = 0.0; if (!model->B3SOIDDlaiiGiven) model->B3SOIDDlaii = 0.0; if (!model->B3SOIDDlbiiGiven) model->B3SOIDDlbii = 0.0; if (!model->B3SOIDDlciiGiven) model->B3SOIDDlcii = 0.0; if (!model->B3SOIDDldiiGiven) model->B3SOIDDldii = 0.0; if (!model->B3SOIDDlalpha0Given) model->B3SOIDDlalpha0 = 0.0; if (!model->B3SOIDDlalpha1Given) model->B3SOIDDlalpha1 = 0.0; if (!model->B3SOIDDlbeta0Given) model->B3SOIDDlbeta0 = 0.0; if (!model->B3SOIDDlagidlGiven) model->B3SOIDDlagidl = 0.0; if (!model->B3SOIDDlbgidlGiven) model->B3SOIDDlbgidl = 0.0; if (!model->B3SOIDDlngidlGiven) model->B3SOIDDlngidl = 0.0; if (!model->B3SOIDDlntunGiven) model->B3SOIDDlntun = 0.0; if (!model->B3SOIDDlndiodeGiven) model->B3SOIDDlndiode = 0.0; if (!model->B3SOIDDlisbjtGiven) model->B3SOIDDlisbjt = 0.0; if (!model->B3SOIDDlisdifGiven) model->B3SOIDDlisdif = 0.0; if (!model->B3SOIDDlisrecGiven) model->B3SOIDDlisrec = 0.0; if (!model->B3SOIDDlistunGiven) model->B3SOIDDlistun = 0.0; if (!model->B3SOIDDledlGiven) model->B3SOIDDledl = 0.0; if (!model->B3SOIDDlkbjt1Given) model->B3SOIDDlkbjt1 = 0.0; /* CV Model */ if (!model->B3SOIDDlvsdfbGiven) model->B3SOIDDlvsdfb = 0.0; if (!model->B3SOIDDlvsdthGiven) model->B3SOIDDlvsdth = 0.0; /* Width dependence */ if (!model->B3SOIDDwnpeakGiven) model->B3SOIDDwnpeak = 0.0; if (!model->B3SOIDDwnsubGiven) model->B3SOIDDwnsub = 0.0; if (!model->B3SOIDDwngateGiven) model->B3SOIDDwngate = 0.0; if (!model->B3SOIDDwvth0Given) model->B3SOIDDwvth0 = 0.0; if (!model->B3SOIDDwk1Given) model->B3SOIDDwk1 = 0.0; if (!model->B3SOIDDwk2Given) model->B3SOIDDwk2 = 0.0; if (!model->B3SOIDDwk3Given) model->B3SOIDDwk3 = 0.0; if (!model->B3SOIDDwk3bGiven) model->B3SOIDDwk3b = 0.0; if (!model->B3SOIDDwvbsaGiven) model->B3SOIDDwvbsa = 0.0; if (!model->B3SOIDDwdelpGiven) model->B3SOIDDwdelp = 0.0; if (!model->B3SOIDDwkb1Given) model->B3SOIDDwkb1 = 0.0; if (!model->B3SOIDDwkb3Given) model->B3SOIDDwkb3 = 1.0; if (!model->B3SOIDDwdvbd0Given) model->B3SOIDDwdvbd0 = 1.0; if (!model->B3SOIDDwdvbd1Given) model->B3SOIDDwdvbd1 = 1.0; if (!model->B3SOIDDww0Given) model->B3SOIDDww0 = 0.0; if (!model->B3SOIDDwnlxGiven) model->B3SOIDDwnlx = 0.0; if (!model->B3SOIDDwdvt0Given) model->B3SOIDDwdvt0 = 0.0; if (!model->B3SOIDDwdvt1Given) model->B3SOIDDwdvt1 = 0.0; if (!model->B3SOIDDwdvt2Given) model->B3SOIDDwdvt2 = 0.0; if (!model->B3SOIDDwdvt0wGiven) model->B3SOIDDwdvt0w = 0.0; if (!model->B3SOIDDwdvt1wGiven) model->B3SOIDDwdvt1w = 0.0; if (!model->B3SOIDDwdvt2wGiven) model->B3SOIDDwdvt2w = 0.0; if (!model->B3SOIDDwu0Given) model->B3SOIDDwu0 = 0.0; if (!model->B3SOIDDwuaGiven) model->B3SOIDDwua = 0.0; if (!model->B3SOIDDwubGiven) model->B3SOIDDwub = 0.0; if (!model->B3SOIDDwucGiven) model->B3SOIDDwuc = 0.0; if (!model->B3SOIDDwvsatGiven) model->B3SOIDDwvsat = 0.0; if (!model->B3SOIDDwa0Given) model->B3SOIDDwa0 = 0.0; if (!model->B3SOIDDwagsGiven) model->B3SOIDDwags = 0.0; if (!model->B3SOIDDwb0Given) model->B3SOIDDwb0 = 0.0; if (!model->B3SOIDDwb1Given) model->B3SOIDDwb1 = 0.0; if (!model->B3SOIDDwketaGiven) model->B3SOIDDwketa = 0.0; if (!model->B3SOIDDwabpGiven) model->B3SOIDDwabp = 0.0; if (!model->B3SOIDDwmxcGiven) model->B3SOIDDwmxc = 0.0; if (!model->B3SOIDDwadice0Given) model->B3SOIDDwadice0 = 0.0; if (!model->B3SOIDDwa1Given) model->B3SOIDDwa1 = 0.0; if (!model->B3SOIDDwa2Given) model->B3SOIDDwa2 = 0.0; if (!model->B3SOIDDwrdswGiven) model->B3SOIDDwrdsw = 0.0; if (!model->B3SOIDDwprwbGiven) model->B3SOIDDwprwb = 0.0; if (!model->B3SOIDDwprwgGiven) model->B3SOIDDwprwg = 0.0; if (!model->B3SOIDDwwrGiven) model->B3SOIDDwwr = 0.0; if (!model->B3SOIDDwnfactorGiven) model->B3SOIDDwnfactor = 0.0; if (!model->B3SOIDDwdwgGiven) model->B3SOIDDwdwg = 0.0; if (!model->B3SOIDDwdwbGiven) model->B3SOIDDwdwb = 0.0; if (!model->B3SOIDDwvoffGiven) model->B3SOIDDwvoff = 0.0; if (!model->B3SOIDDweta0Given) model->B3SOIDDweta0 = 0.0; if (!model->B3SOIDDwetabGiven) model->B3SOIDDwetab = 0.0; if (!model->B3SOIDDwdsubGiven) model->B3SOIDDwdsub = 0.0; if (!model->B3SOIDDwcitGiven) model->B3SOIDDwcit = 0.0; if (!model->B3SOIDDwcdscGiven) model->B3SOIDDwcdsc = 0.0; if (!model->B3SOIDDwcdscbGiven) model->B3SOIDDwcdscb = 0.0; if (!model->B3SOIDDwcdscdGiven) model->B3SOIDDwcdscd = 0.0; if (!model->B3SOIDDwpclmGiven) model->B3SOIDDwpclm = 0.0; if (!model->B3SOIDDwpdibl1Given) model->B3SOIDDwpdibl1 = 0.0; if (!model->B3SOIDDwpdibl2Given) model->B3SOIDDwpdibl2 = 0.0; if (!model->B3SOIDDwpdiblbGiven) model->B3SOIDDwpdiblb = 0.0; if (!model->B3SOIDDwdroutGiven) model->B3SOIDDwdrout = 0.0; if (!model->B3SOIDDwpvagGiven) model->B3SOIDDwpvag = 0.0; if (!model->B3SOIDDwdeltaGiven) model->B3SOIDDwdelta = 0.0; if (!model->B3SOIDDwaiiGiven) model->B3SOIDDwaii = 0.0; if (!model->B3SOIDDwbiiGiven) model->B3SOIDDwbii = 0.0; if (!model->B3SOIDDwciiGiven) model->B3SOIDDwcii = 0.0; if (!model->B3SOIDDwdiiGiven) model->B3SOIDDwdii = 0.0; if (!model->B3SOIDDwalpha0Given) model->B3SOIDDwalpha0 = 0.0; if (!model->B3SOIDDwalpha1Given) model->B3SOIDDwalpha1 = 0.0; if (!model->B3SOIDDwbeta0Given) model->B3SOIDDwbeta0 = 0.0; if (!model->B3SOIDDwagidlGiven) model->B3SOIDDwagidl = 0.0; if (!model->B3SOIDDwbgidlGiven) model->B3SOIDDwbgidl = 0.0; if (!model->B3SOIDDwngidlGiven) model->B3SOIDDwngidl = 0.0; if (!model->B3SOIDDwntunGiven) model->B3SOIDDwntun = 0.0; if (!model->B3SOIDDwndiodeGiven) model->B3SOIDDwndiode = 0.0; if (!model->B3SOIDDwisbjtGiven) model->B3SOIDDwisbjt = 0.0; if (!model->B3SOIDDwisdifGiven) model->B3SOIDDwisdif = 0.0; if (!model->B3SOIDDwisrecGiven) model->B3SOIDDwisrec = 0.0; if (!model->B3SOIDDwistunGiven) model->B3SOIDDwistun = 0.0; if (!model->B3SOIDDwedlGiven) model->B3SOIDDwedl = 0.0; if (!model->B3SOIDDwkbjt1Given) model->B3SOIDDwkbjt1 = 0.0; /* CV Model */ if (!model->B3SOIDDwvsdfbGiven) model->B3SOIDDwvsdfb = 0.0; if (!model->B3SOIDDwvsdthGiven) model->B3SOIDDwvsdth = 0.0; /* Cross-term dependence */ if (!model->B3SOIDDpnpeakGiven) model->B3SOIDDpnpeak = 0.0; if (!model->B3SOIDDpnsubGiven) model->B3SOIDDpnsub = 0.0; if (!model->B3SOIDDpngateGiven) model->B3SOIDDpngate = 0.0; if (!model->B3SOIDDpvth0Given) model->B3SOIDDpvth0 = 0.0; if (!model->B3SOIDDpk1Given) model->B3SOIDDpk1 = 0.0; if (!model->B3SOIDDpk2Given) model->B3SOIDDpk2 = 0.0; if (!model->B3SOIDDpk3Given) model->B3SOIDDpk3 = 0.0; if (!model->B3SOIDDpk3bGiven) model->B3SOIDDpk3b = 0.0; if (!model->B3SOIDDpvbsaGiven) model->B3SOIDDpvbsa = 0.0; if (!model->B3SOIDDpdelpGiven) model->B3SOIDDpdelp = 0.0; if (!model->B3SOIDDpkb1Given) model->B3SOIDDpkb1 = 0.0; if (!model->B3SOIDDpkb3Given) model->B3SOIDDpkb3 = 1.0; if (!model->B3SOIDDpdvbd0Given) model->B3SOIDDpdvbd0 = 1.0; if (!model->B3SOIDDpdvbd1Given) model->B3SOIDDpdvbd1 = 1.0; if (!model->B3SOIDDpw0Given) model->B3SOIDDpw0 = 0.0; if (!model->B3SOIDDpnlxGiven) model->B3SOIDDpnlx = 0.0; if (!model->B3SOIDDpdvt0Given) model->B3SOIDDpdvt0 = 0.0; if (!model->B3SOIDDpdvt1Given) model->B3SOIDDpdvt1 = 0.0; if (!model->B3SOIDDpdvt2Given) model->B3SOIDDpdvt2 = 0.0; if (!model->B3SOIDDpdvt0wGiven) model->B3SOIDDpdvt0w = 0.0; if (!model->B3SOIDDpdvt1wGiven) model->B3SOIDDpdvt1w = 0.0; if (!model->B3SOIDDpdvt2wGiven) model->B3SOIDDpdvt2w = 0.0; if (!model->B3SOIDDpu0Given) model->B3SOIDDpu0 = 0.0; if (!model->B3SOIDDpuaGiven) model->B3SOIDDpua = 0.0; if (!model->B3SOIDDpubGiven) model->B3SOIDDpub = 0.0; if (!model->B3SOIDDpucGiven) model->B3SOIDDpuc = 0.0; if (!model->B3SOIDDpvsatGiven) model->B3SOIDDpvsat = 0.0; if (!model->B3SOIDDpa0Given) model->B3SOIDDpa0 = 0.0; if (!model->B3SOIDDpagsGiven) model->B3SOIDDpags = 0.0; if (!model->B3SOIDDpb0Given) model->B3SOIDDpb0 = 0.0; if (!model->B3SOIDDpb1Given) model->B3SOIDDpb1 = 0.0; if (!model->B3SOIDDpketaGiven) model->B3SOIDDpketa = 0.0; if (!model->B3SOIDDpabpGiven) model->B3SOIDDpabp = 0.0; if (!model->B3SOIDDpmxcGiven) model->B3SOIDDpmxc = 0.0; if (!model->B3SOIDDpadice0Given) model->B3SOIDDpadice0 = 0.0; if (!model->B3SOIDDpa1Given) model->B3SOIDDpa1 = 0.0; if (!model->B3SOIDDpa2Given) model->B3SOIDDpa2 = 0.0; if (!model->B3SOIDDprdswGiven) model->B3SOIDDprdsw = 0.0; if (!model->B3SOIDDpprwbGiven) model->B3SOIDDpprwb = 0.0; if (!model->B3SOIDDpprwgGiven) model->B3SOIDDpprwg = 0.0; if (!model->B3SOIDDpwrGiven) model->B3SOIDDpwr = 0.0; if (!model->B3SOIDDpnfactorGiven) model->B3SOIDDpnfactor = 0.0; if (!model->B3SOIDDpdwgGiven) model->B3SOIDDpdwg = 0.0; if (!model->B3SOIDDpdwbGiven) model->B3SOIDDpdwb = 0.0; if (!model->B3SOIDDpvoffGiven) model->B3SOIDDpvoff = 0.0; if (!model->B3SOIDDpeta0Given) model->B3SOIDDpeta0 = 0.0; if (!model->B3SOIDDpetabGiven) model->B3SOIDDpetab = 0.0; if (!model->B3SOIDDpdsubGiven) model->B3SOIDDpdsub = 0.0; if (!model->B3SOIDDpcitGiven) model->B3SOIDDpcit = 0.0; if (!model->B3SOIDDpcdscGiven) model->B3SOIDDpcdsc = 0.0; if (!model->B3SOIDDpcdscbGiven) model->B3SOIDDpcdscb = 0.0; if (!model->B3SOIDDpcdscdGiven) model->B3SOIDDpcdscd = 0.0; if (!model->B3SOIDDppclmGiven) model->B3SOIDDppclm = 0.0; if (!model->B3SOIDDppdibl1Given) model->B3SOIDDppdibl1 = 0.0; if (!model->B3SOIDDppdibl2Given) model->B3SOIDDppdibl2 = 0.0; if (!model->B3SOIDDppdiblbGiven) model->B3SOIDDppdiblb = 0.0; if (!model->B3SOIDDpdroutGiven) model->B3SOIDDpdrout = 0.0; if (!model->B3SOIDDppvagGiven) model->B3SOIDDppvag = 0.0; if (!model->B3SOIDDpdeltaGiven) model->B3SOIDDpdelta = 0.0; if (!model->B3SOIDDpaiiGiven) model->B3SOIDDpaii = 0.0; if (!model->B3SOIDDpbiiGiven) model->B3SOIDDpbii = 0.0; if (!model->B3SOIDDpciiGiven) model->B3SOIDDpcii = 0.0; if (!model->B3SOIDDpdiiGiven) model->B3SOIDDpdii = 0.0; if (!model->B3SOIDDpalpha0Given) model->B3SOIDDpalpha0 = 0.0; if (!model->B3SOIDDpalpha1Given) model->B3SOIDDpalpha1 = 0.0; if (!model->B3SOIDDpbeta0Given) model->B3SOIDDpbeta0 = 0.0; if (!model->B3SOIDDpagidlGiven) model->B3SOIDDpagidl = 0.0; if (!model->B3SOIDDpbgidlGiven) model->B3SOIDDpbgidl = 0.0; if (!model->B3SOIDDpngidlGiven) model->B3SOIDDpngidl = 0.0; if (!model->B3SOIDDpntunGiven) model->B3SOIDDpntun = 0.0; if (!model->B3SOIDDpndiodeGiven) model->B3SOIDDpndiode = 0.0; if (!model->B3SOIDDpisbjtGiven) model->B3SOIDDpisbjt = 0.0; if (!model->B3SOIDDpisdifGiven) model->B3SOIDDpisdif = 0.0; if (!model->B3SOIDDpisrecGiven) model->B3SOIDDpisrec = 0.0; if (!model->B3SOIDDpistunGiven) model->B3SOIDDpistun = 0.0; if (!model->B3SOIDDpedlGiven) model->B3SOIDDpedl = 0.0; if (!model->B3SOIDDpkbjt1Given) model->B3SOIDDpkbjt1 = 0.0; /* CV Model */ if (!model->B3SOIDDpvsdfbGiven) model->B3SOIDDpvsdfb = 0.0; if (!model->B3SOIDDpvsdthGiven) model->B3SOIDDpvsdth = 0.0; /* Added for binning - END */ if (!model->B3SOIDDcfGiven) model->B3SOIDDcf = 2.0 * EPSOX / PI * log(1.0 + 0.4e-6 / model->B3SOIDDtox); if (!model->B3SOIDDcgdoGiven) { if (model->B3SOIDDdlcGiven && (model->B3SOIDDdlc > 0.0)) { model->B3SOIDDcgdo = model->B3SOIDDdlc * model->B3SOIDDcox - model->B3SOIDDcgdl ; } else model->B3SOIDDcgdo = 0.6 * model->B3SOIDDxj * model->B3SOIDDcox; } if (!model->B3SOIDDcgsoGiven) { if (model->B3SOIDDdlcGiven && (model->B3SOIDDdlc > 0.0)) { model->B3SOIDDcgso = model->B3SOIDDdlc * model->B3SOIDDcox - model->B3SOIDDcgsl ; } else model->B3SOIDDcgso = 0.6 * model->B3SOIDDxj * model->B3SOIDDcox; } if (!model->B3SOIDDcgeoGiven) { model->B3SOIDDcgeo = 0.0; } if (!model->B3SOIDDxpartGiven) model->B3SOIDDxpart = 0.0; if (!model->B3SOIDDsheetResistanceGiven) model->B3SOIDDsheetResistance = 0.0; if (!model->B3SOIDDcsdeswGiven) model->B3SOIDDcsdesw = 0.0; if (!model->B3SOIDDunitLengthGateSidewallJctCapGiven) model->B3SOIDDunitLengthGateSidewallJctCap = 1e-10; if (!model->B3SOIDDGatesidewallJctPotentialGiven) model->B3SOIDDGatesidewallJctPotential = 0.7; if (!model->B3SOIDDbodyJctGateSideGradingCoeffGiven) model->B3SOIDDbodyJctGateSideGradingCoeff = 0.5; if (!model->B3SOIDDoxideTrapDensityAGiven) { if (model->B3SOIDDtype == NMOS) model->B3SOIDDoxideTrapDensityA = 1e20; else model->B3SOIDDoxideTrapDensityA=9.9e18; } if (!model->B3SOIDDoxideTrapDensityBGiven) { if (model->B3SOIDDtype == NMOS) model->B3SOIDDoxideTrapDensityB = 5e4; else model->B3SOIDDoxideTrapDensityB = 2.4e3; } if (!model->B3SOIDDoxideTrapDensityCGiven) { if (model->B3SOIDDtype == NMOS) model->B3SOIDDoxideTrapDensityC = -1.4e-12; else model->B3SOIDDoxideTrapDensityC = 1.4e-12; } if (!model->B3SOIDDemGiven) model->B3SOIDDem = 4.1e7; /* V/m */ if (!model->B3SOIDDefGiven) model->B3SOIDDef = 1.0; if (!model->B3SOIDDafGiven) model->B3SOIDDaf = 1.0; if (!model->B3SOIDDkfGiven) model->B3SOIDDkf = 0.0; if (!model->B3SOIDDnoifGiven) model->B3SOIDDnoif = 1.0; /* loop through all the instances of the model */ for (here = B3SOIDDinstances(model); here != NULL ; here=B3SOIDDnextInstance(here)) { /* allocate a chunk of the state vector */ here->B3SOIDDstates = *states; *states += B3SOIDDnumStates; /* perform the parameter defaulting */ if (!here->B3SOIDDdrainAreaGiven) here->B3SOIDDdrainArea = 0.0; if (!here->B3SOIDDdrainPerimeterGiven) here->B3SOIDDdrainPerimeter = 0.0; if (!here->B3SOIDDdrainSquaresGiven) here->B3SOIDDdrainSquares = 1.0; if (!here->B3SOIDDicVBSGiven) here->B3SOIDDicVBS = 0; if (!here->B3SOIDDicVDSGiven) here->B3SOIDDicVDS = 0; if (!here->B3SOIDDicVGSGiven) here->B3SOIDDicVGS = 0; if (!here->B3SOIDDicVESGiven) here->B3SOIDDicVES = 0; if (!here->B3SOIDDicVPSGiven) here->B3SOIDDicVPS = 0; if (!here->B3SOIDDbjtoffGiven) here->B3SOIDDbjtoff = 0; if (!here->B3SOIDDdebugModGiven) here->B3SOIDDdebugMod = 0; if (!here->B3SOIDDrth0Given) here->B3SOIDDrth0 = model->B3SOIDDrth0; if (!here->B3SOIDDcth0Given) here->B3SOIDDcth0 = model->B3SOIDDcth0; if (!here->B3SOIDDbodySquaresGiven) here->B3SOIDDbodySquares = 1.0; if (!here->B3SOIDDlGiven) here->B3SOIDDl = 5e-6; if (!here->B3SOIDDsourceAreaGiven) here->B3SOIDDsourceArea = 0; if (!here->B3SOIDDsourcePerimeterGiven) here->B3SOIDDsourcePerimeter = 0; if (!here->B3SOIDDsourceSquaresGiven) here->B3SOIDDsourceSquares = 1; if (!here->B3SOIDDwGiven) here->B3SOIDDw = 5e-6; if (!here->B3SOIDDmGiven) here->B3SOIDDm = 1; if (!here->B3SOIDDoffGiven) here->B3SOIDDoff = 0; /* process drain series resistance */ if ((model->B3SOIDDsheetResistance > 0.0) && (here->B3SOIDDdrainSquares > 0.0 ) && (here->B3SOIDDdNodePrime == 0)) { error = CKTmkVolt(ckt,&tmp,here->B3SOIDDname,"drain"); if(error) return(error); here->B3SOIDDdNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } else { here->B3SOIDDdNodePrime = here->B3SOIDDdNode; } /* process source series resistance */ if ((model->B3SOIDDsheetResistance > 0.0) && (here->B3SOIDDsourceSquares > 0.0 ) && (here->B3SOIDDsNodePrime == 0)) { error = CKTmkVolt(ckt,&tmp,here->B3SOIDDname,"source"); if(error) return(error); here->B3SOIDDsNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } else { here->B3SOIDDsNodePrime = here->B3SOIDDsNode; } /* process effective silicon film thickness */ model->B3SOIDDcbox = 3.453133e-11 / model->B3SOIDDtbox; model->B3SOIDDcsi = 1.03594e-10 / model->B3SOIDDtsi; Cboxt = model->B3SOIDDcbox * model->B3SOIDDcsi / (model->B3SOIDDcbox + model->B3SOIDDcsi); model->B3SOIDDqsi = Charge_q*model->B3SOIDDnpeak*1e6*model->B3SOIDDtsi; /* Tsieff */ tmp1 = 2.0 * EPSSI * model->B3SOIDDvbsa / Charge_q / (1e6*model->B3SOIDDnpeak); tmp2 = model->B3SOIDDtsi * model->B3SOIDDtsi; if (tmp2 < tmp1) { fprintf(stderr, "vbsa = %.3f is too large for this tsi = %.3e and is automatically set to zero\n", model->B3SOIDDvbsa, model->B3SOIDDtsi); model->B3SOIDDcsieff = model->B3SOIDDcsi; model->B3SOIDDqsieff = model->B3SOIDDqsi; } else { tmp1 = sqrt(model->B3SOIDDtsi * model->B3SOIDDtsi - 2.0 * EPSSI * model->B3SOIDDvbsa / Charge_q / (1e6*model->B3SOIDDnpeak)); model->B3SOIDDcsieff = 1.03594e-10 / tmp1; model->B3SOIDDqsieff = Charge_q*model->B3SOIDDnpeak*1e6*tmp1; } model->B3SOIDDcsit = 1/(1/model->B3SOIDDcox + 1/model->B3SOIDDcsieff); model->B3SOIDDcboxt = 1/(1/model->B3SOIDDcbox + 1/model->B3SOIDDcsieff); nfb0 = 1/(1 + model->B3SOIDDcbox / model->B3SOIDDcsit); model->B3SOIDDnfb = model->B3SOIDDkb3 * nfb0; model->B3SOIDDadice = model->B3SOIDDadice0 / ( 1 + Cboxt / model->B3SOIDDcox); here->B3SOIDDfloat = 0; here->B3SOIDDpNode = here->B3SOIDDpNodeExt; here->B3SOIDDbNode = here->B3SOIDDbNodeExt; here->B3SOIDDtempNode = here->B3SOIDDtempNodeExt; if (here->B3SOIDDbNode == -1) /* no body contact but bNode to be created for SPICE iteration */ { error = CKTmkVolt(ckt,&tmp,here->B3SOIDDname,"Body"); if(error) return(error); here->B3SOIDDbNode = tmp->number; here->B3SOIDDpNode = 0; here->B3SOIDDfloat = 1; here->B3SOIDDbodyMod = 0; } else /* if body tied */ { /* ideal body tie */ if ((model->B3SOIDDrbody == 0.0) && (model->B3SOIDDrbsh == 0.0)) { here->B3SOIDDbodyMod = 2; /* pNode is not used in this case */ } else { error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Body"); if(error) return(error); here->B3SOIDDbodyMod = 1; here->B3SOIDDpNode = here->B3SOIDDbNode; here->B3SOIDDbNode = tmp->number; } } if ((model->B3SOIDDshMod == 1) && (here->B3SOIDDrth0!=0)) { error = CKTmkVolt(ckt,&tmp,here->B3SOIDDname,"Temp"); if(error) return(error); here->B3SOIDDtempNode = tmp->number; } else { here->B3SOIDDtempNode = 0; } /* here for debugging purpose only */ if ((here->B3SOIDDdebugMod > 1) || (here->B3SOIDDdebugMod == -1)) { /* The real Vbs value */ error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Vbs"); if(error) return(error); here->B3SOIDDvbsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Ids"); if(error) return(error); here->B3SOIDDidsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Ic"); if(error) return(error); here->B3SOIDDicNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Ibs"); if(error) return(error); here->B3SOIDDibsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Ibd"); if(error) return(error); here->B3SOIDDibdNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Iii"); if(error) return(error); here->B3SOIDDiiiNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Igidl"); if(error) return(error); here->B3SOIDDigidlNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Itun"); if(error) return(error); here->B3SOIDDitunNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Ibp"); if(error) return(error); here->B3SOIDDibpNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Abeff"); if(error) return(error); here->B3SOIDDabeffNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Vbs0eff"); if(error) return(error); here->B3SOIDDvbs0effNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Vbseff"); if(error) return(error); here->B3SOIDDvbseffNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Xc"); if(error) return(error); here->B3SOIDDxcNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Cbb"); if(error) return(error); here->B3SOIDDcbbNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Cbd"); if(error) return(error); here->B3SOIDDcbdNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Cbg"); if(error) return(error); here->B3SOIDDcbgNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Qbody"); if(error) return(error); here->B3SOIDDqbNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Qbf"); if(error) return(error); here->B3SOIDDqbfNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Qjs"); if(error) return(error); here->B3SOIDDqjsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Qjd"); if(error) return(error); here->B3SOIDDqjdNode = tmp->number; /* clean up last */ error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Gm"); if(error) return(error); here->B3SOIDDgmNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Gmbs"); if(error) return(error); here->B3SOIDDgmbsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Gds"); if(error) return(error); here->B3SOIDDgdsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Gme"); if(error) return(error); here->B3SOIDDgmeNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Vbs0teff"); if(error) return(error); here->B3SOIDDvbs0teffNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Vth"); if(error) return(error); here->B3SOIDDvthNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Vgsteff"); if(error) return(error); here->B3SOIDDvgsteffNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Xcsat"); if(error) return(error); here->B3SOIDDxcsatNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Qac0"); if(error) return(error); here->B3SOIDDqaccNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Qsub0"); if(error) return(error); here->B3SOIDDqsub0Node = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Qsubs1"); if(error) return(error); here->B3SOIDDqsubs1Node = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Qsubs2"); if(error) return(error); here->B3SOIDDqsubs2Node = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Qsub"); if(error) return(error); here->B3SOIDDqeNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Qdrn"); if(error) return(error); here->B3SOIDDqdNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Qgate"); if(error) return(error); here->B3SOIDDqgNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Vdscv"); if(error) return(error); here->B3SOIDDvdscvNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Vcscv"); if(error) return(error); here->B3SOIDDvcscvNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Cbe"); if(error) return(error); here->B3SOIDDcbeNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Dum1"); if(error) return(error); here->B3SOIDDdum1Node = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Dum2"); if(error) return(error); here->B3SOIDDdum2Node = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Dum3"); if(error) return(error); here->B3SOIDDdum3Node = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Dum4"); if(error) return(error); here->B3SOIDDdum4Node = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIDDname, "Dum5"); if(error) return(error); here->B3SOIDDdum5Node = tmp->number; } /* set Sparse Matrix Pointers */ /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) if ((model->B3SOIDDshMod == 1) && (here->B3SOIDDrth0!=0.0)) { TSTALLOC(B3SOIDDTemptempPtr, B3SOIDDtempNode, B3SOIDDtempNode); TSTALLOC(B3SOIDDTempdpPtr, B3SOIDDtempNode, B3SOIDDdNodePrime); TSTALLOC(B3SOIDDTempspPtr, B3SOIDDtempNode, B3SOIDDsNodePrime); TSTALLOC(B3SOIDDTempgPtr, B3SOIDDtempNode, B3SOIDDgNode); TSTALLOC(B3SOIDDTempbPtr, B3SOIDDtempNode, B3SOIDDbNode); TSTALLOC(B3SOIDDTempePtr, B3SOIDDtempNode, B3SOIDDeNode); TSTALLOC(B3SOIDDGtempPtr, B3SOIDDgNode, B3SOIDDtempNode); TSTALLOC(B3SOIDDDPtempPtr, B3SOIDDdNodePrime, B3SOIDDtempNode); TSTALLOC(B3SOIDDSPtempPtr, B3SOIDDsNodePrime, B3SOIDDtempNode); TSTALLOC(B3SOIDDEtempPtr, B3SOIDDeNode, B3SOIDDtempNode); TSTALLOC(B3SOIDDBtempPtr, B3SOIDDbNode, B3SOIDDtempNode); if (here->B3SOIDDbodyMod == 1) { TSTALLOC(B3SOIDDPtempPtr, B3SOIDDpNode, B3SOIDDtempNode); } } if (here->B3SOIDDbodyMod == 2) { /* Don't create any Jacobian entry for pNode */ } else if (here->B3SOIDDbodyMod == 1) { TSTALLOC(B3SOIDDBpPtr, B3SOIDDbNode, B3SOIDDpNode); TSTALLOC(B3SOIDDPbPtr, B3SOIDDpNode, B3SOIDDbNode); TSTALLOC(B3SOIDDPpPtr, B3SOIDDpNode, B3SOIDDpNode); TSTALLOC(B3SOIDDPgPtr, B3SOIDDpNode, B3SOIDDgNode); TSTALLOC(B3SOIDDPdpPtr, B3SOIDDpNode, B3SOIDDdNodePrime); TSTALLOC(B3SOIDDPspPtr, B3SOIDDpNode, B3SOIDDsNodePrime); TSTALLOC(B3SOIDDPePtr, B3SOIDDpNode, B3SOIDDeNode); } TSTALLOC(B3SOIDDEgPtr, B3SOIDDeNode, B3SOIDDgNode); TSTALLOC(B3SOIDDEdpPtr, B3SOIDDeNode, B3SOIDDdNodePrime); TSTALLOC(B3SOIDDEspPtr, B3SOIDDeNode, B3SOIDDsNodePrime); TSTALLOC(B3SOIDDGePtr, B3SOIDDgNode, B3SOIDDeNode); TSTALLOC(B3SOIDDDPePtr, B3SOIDDdNodePrime, B3SOIDDeNode); TSTALLOC(B3SOIDDSPePtr, B3SOIDDsNodePrime, B3SOIDDeNode); TSTALLOC(B3SOIDDEbPtr, B3SOIDDeNode, B3SOIDDbNode); TSTALLOC(B3SOIDDGbPtr, B3SOIDDgNode, B3SOIDDbNode); TSTALLOC(B3SOIDDDPbPtr, B3SOIDDdNodePrime, B3SOIDDbNode); TSTALLOC(B3SOIDDSPbPtr, B3SOIDDsNodePrime, B3SOIDDbNode); TSTALLOC(B3SOIDDBePtr, B3SOIDDbNode, B3SOIDDeNode); TSTALLOC(B3SOIDDBgPtr, B3SOIDDbNode, B3SOIDDgNode); TSTALLOC(B3SOIDDBdpPtr, B3SOIDDbNode, B3SOIDDdNodePrime); TSTALLOC(B3SOIDDBspPtr, B3SOIDDbNode, B3SOIDDsNodePrime); TSTALLOC(B3SOIDDBbPtr, B3SOIDDbNode, B3SOIDDbNode); TSTALLOC(B3SOIDDEePtr, B3SOIDDeNode, B3SOIDDeNode); TSTALLOC(B3SOIDDGgPtr, B3SOIDDgNode, B3SOIDDgNode); TSTALLOC(B3SOIDDGdpPtr, B3SOIDDgNode, B3SOIDDdNodePrime); TSTALLOC(B3SOIDDGspPtr, B3SOIDDgNode, B3SOIDDsNodePrime); TSTALLOC(B3SOIDDDPgPtr, B3SOIDDdNodePrime, B3SOIDDgNode); TSTALLOC(B3SOIDDDPdpPtr, B3SOIDDdNodePrime, B3SOIDDdNodePrime); TSTALLOC(B3SOIDDDPspPtr, B3SOIDDdNodePrime, B3SOIDDsNodePrime); TSTALLOC(B3SOIDDDPdPtr, B3SOIDDdNodePrime, B3SOIDDdNode); TSTALLOC(B3SOIDDSPgPtr, B3SOIDDsNodePrime, B3SOIDDgNode); TSTALLOC(B3SOIDDSPdpPtr, B3SOIDDsNodePrime, B3SOIDDdNodePrime); TSTALLOC(B3SOIDDSPspPtr, B3SOIDDsNodePrime, B3SOIDDsNodePrime); TSTALLOC(B3SOIDDSPsPtr, B3SOIDDsNodePrime, B3SOIDDsNode); TSTALLOC(B3SOIDDDdPtr, B3SOIDDdNode, B3SOIDDdNode); TSTALLOC(B3SOIDDDdpPtr, B3SOIDDdNode, B3SOIDDdNodePrime); TSTALLOC(B3SOIDDSsPtr, B3SOIDDsNode, B3SOIDDsNode); TSTALLOC(B3SOIDDSspPtr, B3SOIDDsNode, B3SOIDDsNodePrime); /* here for debugging purpose only */ if ((here->B3SOIDDdebugMod > 1) || (here->B3SOIDDdebugMod == -1)) { TSTALLOC(B3SOIDDVbsPtr, B3SOIDDvbsNode, B3SOIDDvbsNode) ; TSTALLOC(B3SOIDDIdsPtr, B3SOIDDidsNode, B3SOIDDidsNode); TSTALLOC(B3SOIDDIcPtr, B3SOIDDicNode, B3SOIDDicNode); TSTALLOC(B3SOIDDIbsPtr, B3SOIDDibsNode, B3SOIDDibsNode); TSTALLOC(B3SOIDDIbdPtr, B3SOIDDibdNode, B3SOIDDibdNode); TSTALLOC(B3SOIDDIiiPtr, B3SOIDDiiiNode, B3SOIDDiiiNode); TSTALLOC(B3SOIDDIgidlPtr, B3SOIDDigidlNode, B3SOIDDigidlNode); TSTALLOC(B3SOIDDItunPtr, B3SOIDDitunNode, B3SOIDDitunNode); TSTALLOC(B3SOIDDIbpPtr, B3SOIDDibpNode, B3SOIDDibpNode); TSTALLOC(B3SOIDDAbeffPtr, B3SOIDDabeffNode, B3SOIDDabeffNode); TSTALLOC(B3SOIDDVbs0effPtr, B3SOIDDvbs0effNode, B3SOIDDvbs0effNode); TSTALLOC(B3SOIDDVbseffPtr, B3SOIDDvbseffNode, B3SOIDDvbseffNode); TSTALLOC(B3SOIDDXcPtr, B3SOIDDxcNode, B3SOIDDxcNode); TSTALLOC(B3SOIDDCbbPtr, B3SOIDDcbbNode, B3SOIDDcbbNode); TSTALLOC(B3SOIDDCbdPtr, B3SOIDDcbdNode, B3SOIDDcbdNode); TSTALLOC(B3SOIDDCbgPtr, B3SOIDDcbgNode, B3SOIDDcbgNode); TSTALLOC(B3SOIDDqbPtr, B3SOIDDqbNode, B3SOIDDqbNode); TSTALLOC(B3SOIDDQbfPtr, B3SOIDDqbfNode, B3SOIDDqbfNode); TSTALLOC(B3SOIDDQjsPtr, B3SOIDDqjsNode, B3SOIDDqjsNode); TSTALLOC(B3SOIDDQjdPtr, B3SOIDDqjdNode, B3SOIDDqjdNode); /* clean up last */ TSTALLOC(B3SOIDDGmPtr, B3SOIDDgmNode, B3SOIDDgmNode); TSTALLOC(B3SOIDDGmbsPtr, B3SOIDDgmbsNode, B3SOIDDgmbsNode); TSTALLOC(B3SOIDDGdsPtr, B3SOIDDgdsNode, B3SOIDDgdsNode); TSTALLOC(B3SOIDDGmePtr, B3SOIDDgmeNode, B3SOIDDgmeNode); TSTALLOC(B3SOIDDVbs0teffPtr, B3SOIDDvbs0teffNode, B3SOIDDvbs0teffNode); TSTALLOC(B3SOIDDVthPtr, B3SOIDDvthNode, B3SOIDDvthNode); TSTALLOC(B3SOIDDVgsteffPtr, B3SOIDDvgsteffNode, B3SOIDDvgsteffNode); TSTALLOC(B3SOIDDXcsatPtr, B3SOIDDxcsatNode, B3SOIDDxcsatNode); TSTALLOC(B3SOIDDVcscvPtr, B3SOIDDvcscvNode, B3SOIDDvcscvNode); TSTALLOC(B3SOIDDVdscvPtr, B3SOIDDvdscvNode, B3SOIDDvdscvNode); TSTALLOC(B3SOIDDCbePtr, B3SOIDDcbeNode, B3SOIDDcbeNode); TSTALLOC(B3SOIDDDum1Ptr, B3SOIDDdum1Node, B3SOIDDdum1Node); TSTALLOC(B3SOIDDDum2Ptr, B3SOIDDdum2Node, B3SOIDDdum2Node); TSTALLOC(B3SOIDDDum3Ptr, B3SOIDDdum3Node, B3SOIDDdum3Node); TSTALLOC(B3SOIDDDum4Ptr, B3SOIDDdum4Node, B3SOIDDdum4Node); TSTALLOC(B3SOIDDDum5Ptr, B3SOIDDdum5Node, B3SOIDDdum5Node); TSTALLOC(B3SOIDDQaccPtr, B3SOIDDqaccNode, B3SOIDDqaccNode); TSTALLOC(B3SOIDDQsub0Ptr, B3SOIDDqsub0Node, B3SOIDDqsub0Node); TSTALLOC(B3SOIDDQsubs1Ptr, B3SOIDDqsubs1Node, B3SOIDDqsubs1Node); TSTALLOC(B3SOIDDQsubs2Ptr, B3SOIDDqsubs2Node, B3SOIDDqsubs2Node); TSTALLOC(B3SOIDDqePtr, B3SOIDDqeNode, B3SOIDDqeNode); TSTALLOC(B3SOIDDqdPtr, B3SOIDDqdNode, B3SOIDDqdNode); TSTALLOC(B3SOIDDqgPtr, B3SOIDDqgNode, B3SOIDDqgNode); } } } return(OK); } int B3SOIDDunsetup(GENmodel *inModel, CKTcircuit *ckt) { B3SOIDDmodel *model; B3SOIDDinstance *here; for (model = (B3SOIDDmodel *)inModel; model != NULL; model = B3SOIDDnextModel(model)) { for (here = B3SOIDDinstances(model); here != NULL; here=B3SOIDDnextInstance(here)) { /* here for debugging purpose only */ if (here->B3SOIDDdum5Node > 0) CKTdltNNum(ckt, here->B3SOIDDdum5Node); here->B3SOIDDdum5Node = 0; if (here->B3SOIDDdum4Node > 0) CKTdltNNum(ckt, here->B3SOIDDdum4Node); here->B3SOIDDdum4Node = 0; if (here->B3SOIDDdum3Node > 0) CKTdltNNum(ckt, here->B3SOIDDdum3Node); here->B3SOIDDdum3Node = 0; if (here->B3SOIDDdum2Node > 0) CKTdltNNum(ckt, here->B3SOIDDdum2Node); here->B3SOIDDdum2Node = 0; if (here->B3SOIDDdum1Node > 0) CKTdltNNum(ckt, here->B3SOIDDdum1Node); here->B3SOIDDdum1Node = 0; if (here->B3SOIDDcbeNode > 0) CKTdltNNum(ckt, here->B3SOIDDcbeNode); here->B3SOIDDcbeNode = 0; if (here->B3SOIDDvcscvNode > 0) CKTdltNNum(ckt, here->B3SOIDDvcscvNode); here->B3SOIDDvcscvNode = 0; if (here->B3SOIDDvdscvNode > 0) CKTdltNNum(ckt, here->B3SOIDDvdscvNode); here->B3SOIDDvdscvNode = 0; if (here->B3SOIDDqgNode > 0) CKTdltNNum(ckt, here->B3SOIDDqgNode); here->B3SOIDDqgNode = 0; if (here->B3SOIDDqdNode > 0) CKTdltNNum(ckt, here->B3SOIDDqdNode); here->B3SOIDDqdNode = 0; if (here->B3SOIDDqeNode > 0) CKTdltNNum(ckt, here->B3SOIDDqeNode); here->B3SOIDDqeNode = 0; if (here->B3SOIDDqsubs2Node > 0) CKTdltNNum(ckt, here->B3SOIDDqsubs2Node); here->B3SOIDDqsubs2Node = 0; if (here->B3SOIDDqsubs1Node > 0) CKTdltNNum(ckt, here->B3SOIDDqsubs1Node); here->B3SOIDDqsubs1Node = 0; if (here->B3SOIDDqsub0Node > 0) CKTdltNNum(ckt, here->B3SOIDDqsub0Node); here->B3SOIDDqsub0Node = 0; if (here->B3SOIDDqaccNode > 0) CKTdltNNum(ckt, here->B3SOIDDqaccNode); here->B3SOIDDqaccNode = 0; if (here->B3SOIDDxcsatNode > 0) CKTdltNNum(ckt, here->B3SOIDDxcsatNode); here->B3SOIDDxcsatNode = 0; if (here->B3SOIDDvgsteffNode > 0) CKTdltNNum(ckt, here->B3SOIDDvgsteffNode); here->B3SOIDDvgsteffNode = 0; if (here->B3SOIDDvthNode > 0) CKTdltNNum(ckt, here->B3SOIDDvthNode); here->B3SOIDDvthNode = 0; if (here->B3SOIDDvbs0teffNode > 0) CKTdltNNum(ckt, here->B3SOIDDvbs0teffNode); here->B3SOIDDvbs0teffNode = 0; if (here->B3SOIDDgmeNode > 0) CKTdltNNum(ckt, here->B3SOIDDgmeNode); here->B3SOIDDgmeNode = 0; if (here->B3SOIDDgdsNode > 0) CKTdltNNum(ckt, here->B3SOIDDgdsNode); here->B3SOIDDgdsNode = 0; if (here->B3SOIDDgmbsNode > 0) CKTdltNNum(ckt, here->B3SOIDDgmbsNode); here->B3SOIDDgmbsNode = 0; if (here->B3SOIDDgmNode > 0) CKTdltNNum(ckt, here->B3SOIDDgmNode); here->B3SOIDDgmNode = 0; if (here->B3SOIDDqjdNode > 0) CKTdltNNum(ckt, here->B3SOIDDqjdNode); here->B3SOIDDqjdNode = 0; if (here->B3SOIDDqjsNode > 0) CKTdltNNum(ckt, here->B3SOIDDqjsNode); here->B3SOIDDqjsNode = 0; if (here->B3SOIDDqbfNode > 0) CKTdltNNum(ckt, here->B3SOIDDqbfNode); here->B3SOIDDqbfNode = 0; if (here->B3SOIDDqbNode > 0) CKTdltNNum(ckt, here->B3SOIDDqbNode); here->B3SOIDDqbNode = 0; if (here->B3SOIDDcbgNode > 0) CKTdltNNum(ckt, here->B3SOIDDcbgNode); here->B3SOIDDcbgNode = 0; if (here->B3SOIDDcbdNode > 0) CKTdltNNum(ckt, here->B3SOIDDcbdNode); here->B3SOIDDcbdNode = 0; if (here->B3SOIDDcbbNode > 0) CKTdltNNum(ckt, here->B3SOIDDcbbNode); here->B3SOIDDcbbNode = 0; if (here->B3SOIDDxcNode > 0) CKTdltNNum(ckt, here->B3SOIDDxcNode); here->B3SOIDDxcNode = 0; if (here->B3SOIDDvbseffNode > 0) CKTdltNNum(ckt, here->B3SOIDDvbseffNode); here->B3SOIDDvbseffNode = 0; if (here->B3SOIDDvbs0effNode > 0) CKTdltNNum(ckt, here->B3SOIDDvbs0effNode); here->B3SOIDDvbs0effNode = 0; if (here->B3SOIDDabeffNode > 0) CKTdltNNum(ckt, here->B3SOIDDabeffNode); here->B3SOIDDabeffNode = 0; if (here->B3SOIDDibpNode > 0) CKTdltNNum(ckt, here->B3SOIDDibpNode); here->B3SOIDDibpNode = 0; if (here->B3SOIDDitunNode > 0) CKTdltNNum(ckt, here->B3SOIDDitunNode); here->B3SOIDDitunNode = 0; if (here->B3SOIDDigidlNode > 0) CKTdltNNum(ckt, here->B3SOIDDigidlNode); here->B3SOIDDigidlNode = 0; if (here->B3SOIDDiiiNode > 0) CKTdltNNum(ckt, here->B3SOIDDiiiNode); here->B3SOIDDiiiNode = 0; if (here->B3SOIDDibdNode > 0) CKTdltNNum(ckt, here->B3SOIDDibdNode); here->B3SOIDDibdNode = 0; if (here->B3SOIDDibsNode > 0) CKTdltNNum(ckt, here->B3SOIDDibsNode); here->B3SOIDDibsNode = 0; if (here->B3SOIDDicNode > 0) CKTdltNNum(ckt, here->B3SOIDDicNode); here->B3SOIDDicNode = 0; if (here->B3SOIDDidsNode > 0) CKTdltNNum(ckt, here->B3SOIDDidsNode); here->B3SOIDDidsNode = 0; if (here->B3SOIDDvbsNode > 0) CKTdltNNum(ckt, here->B3SOIDDvbsNode); here->B3SOIDDvbsNode = 0; if (here->B3SOIDDtempNode > 0 && here->B3SOIDDtempNode != here->B3SOIDDtempNodeExt && here->B3SOIDDtempNode != here->B3SOIDDbNodeExt && here->B3SOIDDtempNode != here->B3SOIDDpNodeExt) CKTdltNNum(ckt, here->B3SOIDDtempNode); here->B3SOIDDtempNode = 0; if (here->B3SOIDDbNode > 0 && here->B3SOIDDbNode != here->B3SOIDDbNodeExt && here->B3SOIDDbNode != here->B3SOIDDpNodeExt) CKTdltNNum(ckt, here->B3SOIDDbNode); here->B3SOIDDbNode = 0; here->B3SOIDDpNode = 0; if (here->B3SOIDDsNodePrime > 0 && here->B3SOIDDsNodePrime != here->B3SOIDDsNode) CKTdltNNum(ckt, here->B3SOIDDsNodePrime); here->B3SOIDDsNodePrime = 0; if (here->B3SOIDDdNodePrime > 0 && here->B3SOIDDdNodePrime != here->B3SOIDDdNode) CKTdltNNum(ckt, here->B3SOIDDdNodePrime); here->B3SOIDDdNodePrime = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_dd/b3soiddpar.c0000644000175000017500000001037013546075722023561 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soiddpar.c 98/5/01 Modified by Paolo Nenzi 2002 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMDD2.1 release */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "b3soidddef.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int B3SOIDDparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { B3SOIDDinstance *here = (B3SOIDDinstance*)inst; NG_IGNORE(select); switch(param) { case B3SOIDD_W: here->B3SOIDDw = value->rValue; here->B3SOIDDwGiven = TRUE; break; case B3SOIDD_L: here->B3SOIDDl = value->rValue; here->B3SOIDDlGiven = TRUE; break; case B3SOIDD_M: here->B3SOIDDm = value->rValue; here->B3SOIDDmGiven = TRUE; break; case B3SOIDD_AS: here->B3SOIDDsourceArea = value->rValue; here->B3SOIDDsourceAreaGiven = TRUE; break; case B3SOIDD_AD: here->B3SOIDDdrainArea = value->rValue; here->B3SOIDDdrainAreaGiven = TRUE; break; case B3SOIDD_PS: here->B3SOIDDsourcePerimeter = value->rValue; here->B3SOIDDsourcePerimeterGiven = TRUE; break; case B3SOIDD_PD: here->B3SOIDDdrainPerimeter = value->rValue; here->B3SOIDDdrainPerimeterGiven = TRUE; break; case B3SOIDD_NRS: here->B3SOIDDsourceSquares = value->rValue; here->B3SOIDDsourceSquaresGiven = TRUE; break; case B3SOIDD_NRD: here->B3SOIDDdrainSquares = value->rValue; here->B3SOIDDdrainSquaresGiven = TRUE; break; case B3SOIDD_OFF: here->B3SOIDDoff = value->iValue; break; case B3SOIDD_IC_VBS: here->B3SOIDDicVBS = value->rValue; here->B3SOIDDicVBSGiven = TRUE; break; case B3SOIDD_IC_VDS: here->B3SOIDDicVDS = value->rValue; here->B3SOIDDicVDSGiven = TRUE; break; case B3SOIDD_IC_VGS: here->B3SOIDDicVGS = value->rValue; here->B3SOIDDicVGSGiven = TRUE; break; case B3SOIDD_IC_VES: here->B3SOIDDicVES = value->rValue; here->B3SOIDDicVESGiven = TRUE; break; case B3SOIDD_IC_VPS: here->B3SOIDDicVPS = value->rValue; here->B3SOIDDicVPSGiven = TRUE; break; case B3SOIDD_BJTOFF: here->B3SOIDDbjtoff = value->iValue; here->B3SOIDDbjtoffGiven= TRUE; break; case B3SOIDD_DEBUG: here->B3SOIDDdebugMod = value->iValue; here->B3SOIDDdebugModGiven= TRUE; break; case B3SOIDD_RTH0: here->B3SOIDDrth0= value->rValue; here->B3SOIDDrth0Given = TRUE; break; case B3SOIDD_CTH0: here->B3SOIDDcth0= value->rValue; here->B3SOIDDcth0Given = TRUE; break; case B3SOIDD_NRB: here->B3SOIDDbodySquares = value->rValue; here->B3SOIDDbodySquaresGiven = TRUE; break; case B3SOIDD_IC: switch(value->v.numValue){ case 5: here->B3SOIDDicVPS = *(value->v.vec.rVec+4); here->B3SOIDDicVPSGiven = TRUE; case 4: here->B3SOIDDicVES = *(value->v.vec.rVec+3); here->B3SOIDDicVESGiven = TRUE; case 3: here->B3SOIDDicVBS = *(value->v.vec.rVec+2); here->B3SOIDDicVBSGiven = TRUE; case 2: here->B3SOIDDicVGS = *(value->v.vec.rVec+1); here->B3SOIDDicVGSGiven = TRUE; case 1: here->B3SOIDDicVDS = *(value->v.vec.rVec); here->B3SOIDDicVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim3soi_dd/b3soiddnoi.c0000644000175000017500000003007013546075722023563 0ustar carstencarsten/********** Copyright 1999 Regents of the University of California. All rights reserved. Author: Weidong Liu and Pin Su Feb 1999 Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang File: b3soiddnoi.c 98/5/01 Modofied by Paolo Nenzi 2002 **********/ /* * Revision 2.1 99/9/27 Pin Su * BSIMDD2.1 release */ #include "ngspice/ngspice.h" #include "b3soidddef.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" #include "ngspice/const.h" /* jwan */ /* * B3SOIDDnoise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with MOSFET's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the MOSFET's is summed with the variable "OnDens". */ /* Channel thermal and flicker noises are calculated based on the value of model->B3SOIDDnoiMod. If model->B3SOIDDnoiMod = 1, Channel thermal noise = SPICE2 model Flicker noise = SPICE2 model If model->B3SOIDDnoiMod = 2, Channel thermal noise = B3SOIDD model Flicker noise = B3SOIDD model If model->B3SOIDDnoiMod = 3, Channel thermal noise = SPICE2 model Flicker noise = B3SOIDD model If model->B3SOIDDnoiMod = 4, Channel thermal noise = B3SOIDD model Flicker noise = SPICE2 model */ static double B3SOIDDStrongInversionNoiseEval(double vgs, double vds, B3SOIDDmodel *model, B3SOIDDinstance *here, double freq, double temp) { struct b3soiddSizeDependParam *pParam; double cd, esat, DelClm, EffFreq, N0, Nl, Vgst; double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi; pParam = here->pParam; cd = fabs(here->B3SOIDDcd) * here->B3SOIDDm; if (vds > here->B3SOIDDvdsat) { esat = 2.0 * pParam->B3SOIDDvsattemp / here->B3SOIDDueff; T0 = ((((vds - here->B3SOIDDvdsat) / pParam->B3SOIDDlitl) + model->B3SOIDDem) / esat); DelClm = pParam->B3SOIDDlitl * log (MAX(T0, N_MINLOG)); } else DelClm = 0.0; EffFreq = pow(freq, model->B3SOIDDef); T1 = CHARGE * CHARGE * 8.62e-5 * cd * temp * here->B3SOIDDueff; T2 = 1.0e8 * EffFreq * model->B3SOIDDcox * pParam->B3SOIDDleff * pParam->B3SOIDDleff; Vgst = vgs - here->B3SOIDDvon; N0 = model->B3SOIDDcox * Vgst / CHARGE; if (N0 < 0.0) N0 = 0.0; Nl = model->B3SOIDDcox * (Vgst - MIN(vds, here->B3SOIDDvdsat)) / CHARGE; if (Nl < 0.0) Nl = 0.0; T3 = model->B3SOIDDoxideTrapDensityA * log(MAX(((N0 + 2.0e14) / (Nl + 2.0e14)), N_MINLOG)); T4 = model->B3SOIDDoxideTrapDensityB * (N0 - Nl); T5 = model->B3SOIDDoxideTrapDensityC * 0.5 * (N0 * N0 - Nl * Nl); T6 = 8.62e-5 * temp * cd * cd; T7 = 1.0e8 * EffFreq * pParam->B3SOIDDleff * pParam->B3SOIDDleff * pParam->B3SOIDDweff * here->B3SOIDDm; T8 = model->B3SOIDDoxideTrapDensityA + model->B3SOIDDoxideTrapDensityB * Nl + model->B3SOIDDoxideTrapDensityC * Nl * Nl; T9 = (Nl + 2.0e14) * (Nl + 2.0e14); Ssi = T1 / T2 * (T3 + T4 + T5) + T6 / T7 * DelClm * T8 / T9; return Ssi; } int B3SOIDDnoise (int mode, int operation, GENmodel *inModel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; B3SOIDDmodel *model = (B3SOIDDmodel *)inModel; B3SOIDDinstance *here; struct b3soiddSizeDependParam *pParam; double tempOnoise; double tempInoise; double noizDens[B3SOIDDNSRCS]; double lnNdens[B3SOIDDNSRCS]; double vgs, vds, Slimit; double T1, T10, T11; double Ssi, Swi; int i; /* define the names of the noise sources */ static char *B3SOIDDnNames[B3SOIDDNSRCS] = { /* Note that we have to keep the order */ ".rd", /* noise due to rd */ /* consistent with the index definitions */ ".rs", /* noise due to rs */ /* in B3SOIDDdefs.h */ ".id", /* noise due to id */ ".1overf", /* flicker (1/f) noise */ ".fb", /* noise due to floating body */ "" /* total transistor noise */ }; for (; model != NULL; model = B3SOIDDnextModel(model)) { for (here = B3SOIDDinstances(model); here != NULL; here = B3SOIDDnextInstance(here)) { pParam = here->pParam; switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i = 0; i < B3SOIDDNSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise.%s%s", here->B3SOIDDname, B3SOIDDnNames[i]); } break; case INT_NOIZ: for (i = 0; i < B3SOIDDNSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total.%s%s", here->B3SOIDDname, B3SOIDDnNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total.%s%s", here->B3SOIDDname, B3SOIDDnNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: NevalSrc(&noizDens[B3SOIDDRDNOIZ], &lnNdens[B3SOIDDRDNOIZ], ckt, THERMNOISE, here->B3SOIDDdNodePrime, here->B3SOIDDdNode, here->B3SOIDDdrainConductance * here->B3SOIDDm); NevalSrc(&noizDens[B3SOIDDRSNOIZ], &lnNdens[B3SOIDDRSNOIZ], ckt, THERMNOISE, here->B3SOIDDsNodePrime, here->B3SOIDDsNode, here->B3SOIDDsourceConductance * here->B3SOIDDm); switch( model->B3SOIDDnoiMod ) { case 1: case 3: NevalSrc(&noizDens[B3SOIDDIDNOIZ], &lnNdens[B3SOIDDIDNOIZ], ckt, THERMNOISE, here->B3SOIDDdNodePrime, here->B3SOIDDsNodePrime, (2.0 / 3.0 * fabs(here->B3SOIDDm * (here->B3SOIDDgm + here->B3SOIDDgds + here->B3SOIDDgmbs)))); break; case 2: case 4: NevalSrc(&noizDens[B3SOIDDIDNOIZ], &lnNdens[B3SOIDDIDNOIZ], ckt, THERMNOISE, here->B3SOIDDdNodePrime, here->B3SOIDDsNodePrime, (here->B3SOIDDueff * fabs((here->B3SOIDDqinv * here->B3SOIDDm) / (pParam->B3SOIDDleff * pParam->B3SOIDDleff)))); break; } NevalSrc(&noizDens[B3SOIDDFLNOIZ], NULL, ckt, N_GAIN, here->B3SOIDDdNodePrime, here->B3SOIDDsNodePrime, (double) 0.0); switch( model->B3SOIDDnoiMod ) { case 1: case 4: noizDens[B3SOIDDFLNOIZ] *= model->B3SOIDDkf * exp(model->B3SOIDDaf * log(MAX(fabs(here->B3SOIDDcd * here->B3SOIDDm), N_MINLOG))) / (pow(data->freq, model->B3SOIDDef) * pParam->B3SOIDDleff * pParam->B3SOIDDleff * model->B3SOIDDcox); break; case 2: case 3: vgs = *(ckt->CKTstates[0] + here->B3SOIDDvgs); vds = *(ckt->CKTstates[0] + here->B3SOIDDvds); if (vds < 0.0) { vds = -vds; vgs = vgs + vds; } if (vgs >= here->B3SOIDDvon + 0.1) { Ssi = B3SOIDDStrongInversionNoiseEval(vgs, vds, model, here, data->freq, ckt->CKTtemp); noizDens[B3SOIDDFLNOIZ] *= Ssi; } else { pParam = here->pParam; T10 = model->B3SOIDDoxideTrapDensityA * 8.62e-5 * ckt->CKTtemp; T11 = pParam->B3SOIDDweff * here->B3SOIDDm * pParam->B3SOIDDleff * pow(data->freq, model->B3SOIDDef) * 4.0e36; Swi = T10 / T11 * here->B3SOIDDcd * here->B3SOIDDm * here->B3SOIDDcd * here->B3SOIDDm; Slimit = B3SOIDDStrongInversionNoiseEval( here->B3SOIDDvon + 0.1, vds, model, here, data->freq, ckt->CKTtemp); T1 = Swi + Slimit; if (T1 > 0.0) noizDens[B3SOIDDFLNOIZ] *= (Slimit * Swi) / T1; else noizDens[B3SOIDDFLNOIZ] *= 0.0; } break; } lnNdens[B3SOIDDFLNOIZ] = log(MAX(noizDens[B3SOIDDFLNOIZ], N_MINLOG)); /* Low frequency excess noise due to FBE */ NevalSrc(&noizDens[B3SOIDDFBNOIZ], &lnNdens[B3SOIDDFBNOIZ], ckt, SHOTNOISE, here->B3SOIDDsNodePrime, here->B3SOIDDbNode, 2.0 * model->B3SOIDDnoif * here->B3SOIDDibs * here->B3SOIDDm); noizDens[B3SOIDDTOTNOIZ] = noizDens[B3SOIDDRDNOIZ] + noizDens[B3SOIDDRSNOIZ] + noizDens[B3SOIDDIDNOIZ] + noizDens[B3SOIDDFLNOIZ] + noizDens[B3SOIDDFBNOIZ]; lnNdens[B3SOIDDTOTNOIZ] = log(MAX(noizDens[B3SOIDDTOTNOIZ], N_MINLOG)); *OnDens += noizDens[B3SOIDDTOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to initialize our "history" variables. */ for (i = 0; i < B3SOIDDNSRCS; i++) { here->B3SOIDDnVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i = 0; i < B3SOIDDNSRCS; i++) { here->B3SOIDDnVar[OUTNOIZ][i] = 0.0; here->B3SOIDDnVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0, we have to integrate. */ for (i = 0; i < B3SOIDDNSRCS; i++) { if (i != B3SOIDDTOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], here->B3SOIDDnVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv, lnNdens[i] + data->lnGainInv, here->B3SOIDDnVar[LNLSTDENS][i] + data->lnGainInv, data); here->B3SOIDDnVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { here->B3SOIDDnVar[OUTNOIZ][i] += tempOnoise; here->B3SOIDDnVar[OUTNOIZ][B3SOIDDTOTNOIZ] += tempOnoise; here->B3SOIDDnVar[INNOIZ][i] += tempInoise; here->B3SOIDDnVar[INNOIZ][B3SOIDDTOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i = 0; i < B3SOIDDNSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i = 0; i < B3SOIDDNSRCS; i++) { data->outpVector[data->outNumber++] = here->B3SOIDDnVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = here->B3SOIDDnVar[INNOIZ][i]; } } break; } break; case N_CLOSE: /* do nothing, the main calling routine will close */ return (OK); break; /* the plots */ } /* switch (operation) */ } /* for here */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/cktfinddev.c0000644000175000017500000000057013546075722021452 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/config.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "string.h" GENinstance * CKTfndDev(CKTcircuit *ckt, IFuid name) { return nghash_find(ckt->DEVnameHash, name); } tmpk8ny_4pz/src/spicelib/devices/hfet2/0000755000175000017500000000000013546075722020173 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/hfet2/hfet2trunc.c0000644000175000017500000000107113546075722022422 0ustar carstencarsten#include "ngspice/ngspice.h" #include #include "ngspice/cktdefs.h" #include "hfet2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HFET2trunc( GENmodel *inModel, CKTcircuit *ckt, double *tiHFET2tep) { HFET2model *model = (HFET2model*)inModel; HFET2instance *here; for( ; model != NULL; model = HFET2nextModel(model)) { for(here=HFET2instances(model);here!=NULL; here = HFET2nextInstance(here)){ CKTterr(here->HFET2qgs,ckt,tiHFET2tep); CKTterr(here->HFET2qgd,ckt,tiHFET2tep); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hfet2/Makefile.am0000644000175000017500000000074213546075722022232 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libhfet2.la libhfet2_la_SOURCES = \ hfet2.c \ hfet2acl.c \ hfet2ask.c \ hfet2defs.h \ hfet2ext.h \ hfet2getic.c \ hfet2init.c \ hfet2init.h \ hfet2itf.h \ hfet2load.c \ hfet2mask.c \ hfet2mpar.c \ hfet2param.c \ hfet2pzl.c \ hfet2setup.c \ hfet2temp.c \ hfet2trunc.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/hfet2/hfet2ask.c0000644000175000017500000001226413546075722022053 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ /* Imported into HFET2 source: Paolo Nenzi 2001 */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "hfet2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int HFET2ask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { HFET2instance *here = (HFET2instance*)inst; static char *msg = "Current and power not available in ac analysis"; NG_IGNORE(select); switch(which) { case HFET2_LENGTH: value->rValue = here->HFET2length; return (OK); case HFET2_WIDTH: value->rValue = here->HFET2width; value->rValue *= here->HFET2m; return (OK); case HFET2_IC_VDS: value->rValue = here->HFET2icVDS; return (OK); case HFET2_IC_VGS: value->rValue = here->HFET2icVGS; return (OK); case HFET2_OFF: value->iValue = here->HFET2off; return (OK); case HFET2_DRAINNODE: value->iValue = here->HFET2drainNode; return (OK); case HFET2_GATENODE: value->iValue = here->HFET2gateNode; return (OK); case HFET2_SOURCENODE: value->iValue = here->HFET2sourceNode; return (OK); case HFET2_DRAINPRIMENODE: value->iValue = here->HFET2drainPrimeNode; return (OK); case HFET2_SOURCEPRIMENODE: value->iValue = here->HFET2sourcePrimeNode; return (OK); case HFET2_TEMP: value->rValue = here->HFET2temp - CONSTCtoK; return (OK); case HFET2_DTEMP: value->rValue = here->HFET2dtemp; return (OK); case HFET2_VGS: value->rValue = *(ckt->CKTstate0 + here->HFET2vgs); return (OK); case HFET2_VGD: value->rValue = *(ckt->CKTstate0 + here->HFET2vgd); return (OK); case HFET2_CG: value->rValue = *(ckt->CKTstate0 + here->HFET2cg); value->rValue *= here->HFET2m; return (OK); case HFET2_CD: value->rValue = *(ckt->CKTstate0 + here->HFET2cd); value->rValue *= here->HFET2m; return (OK); case HFET2_CGD: value->rValue = *(ckt->CKTstate0 + here->HFET2cgd); value->rValue *= here->HFET2m; return (OK); case HFET2_GM: value->rValue = *(ckt->CKTstate0 + here->HFET2gm); value->rValue *= here->HFET2m; return (OK); case HFET2_GDS: value->rValue = *(ckt->CKTstate0 + here->HFET2gds); value->rValue *= here->HFET2m; return (OK); case HFET2_GGS: value->rValue = *(ckt->CKTstate0 + here->HFET2ggs); value->rValue *= here->HFET2m; return (OK); case HFET2_GGD: value->rValue = *(ckt->CKTstate0 + here->HFET2ggd); value->rValue *= here->HFET2m; return (OK); case HFET2_QGS: value->rValue = *(ckt->CKTstate0 + here->HFET2qgs); value->rValue *= here->HFET2m; return (OK); case HFET2_CQGS: value->rValue = *(ckt->CKTstate0 + here->HFET2cqgs); value->rValue *= here->HFET2m; return (OK); case HFET2_QGD: value->rValue = *(ckt->CKTstate0 + here->HFET2qgd); value->rValue *= here->HFET2m; return (OK); case HFET2_CQGD: value->rValue = *(ckt->CKTstate0 + here->HFET2cqgd); value->rValue *= here->HFET2m; return (OK); case HFET2_CS : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "HFET2ask"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = -*(ckt->CKTstate0 + here->HFET2cd); value->rValue -= *(ckt->CKTstate0 + here->HFET2cg); value->rValue *= here->HFET2m; } return(OK); case HFET2_POWER : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "HFET2ask"; strcpy(errMsg,msg); return(E_ASKPOWER); } else { value->rValue = *(ckt->CKTstate0 + here->HFET2cd) * *(ckt->CKTrhsOld + here->HFET2drainNode); value->rValue += *(ckt->CKTstate0 + here->HFET2cg) * *(ckt->CKTrhsOld + here->HFET2gateNode); value->rValue -= (*(ckt->CKTstate0+here->HFET2cd) + *(ckt->CKTstate0 + here->HFET2cg)) * *(ckt->CKTrhsOld + here->HFET2sourceNode); value->rValue *= here->HFET2m; } return(OK); default: return (E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/hfet2/hfet2param.c0000644000175000017500000000312513546075722022371 0ustar carstencarsten/********** Imported from MacSpice3f4 - Antony Wilson Modified: Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "hfet2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HFET2param(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { HFET2instance *here = (HFET2instance*)inst; NG_IGNORE(select); switch(param) { case HFET2_LENGTH: L = value->rValue; here->HFET2lengthGiven = TRUE; break; case HFET2_IC_VDS: here->HFET2icVDS = value->rValue; here->HFET2icVDSGiven = TRUE; break; case HFET2_IC_VGS: here->HFET2icVGS = value->rValue; here->HFET2icVGSGiven = TRUE; break; case HFET2_OFF: here->HFET2off = value->iValue; break; case HFET2_IC: switch(value->v.numValue) { case 2: here->HFET2icVGS = *(value->v.vec.rVec+1); here->HFET2icVGSGiven = TRUE; case 1: here->HFET2icVDS = *(value->v.vec.rVec); here->HFET2icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; case HFET2_TEMP: TEMP = value->rValue + CONSTCtoK; here->HFET2tempGiven = TRUE; break; case HFET2_DTEMP: here->HFET2dtemp = value->rValue; here->HFET2dtempGiven = TRUE; break; case HFET2_WIDTH: W = value->rValue; here->HFET2widthGiven = TRUE; break; case HFET2_M: here->HFET2m = value->rValue; here->HFET2mGiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hfet2/hfet2mpar.c0000644000175000017500000001022713546075722022231 0ustar carstencarsten/********** Imported from MacSpice3f4 - Antony Wilson Modified: Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "hfet2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HFET2mParam(int param, IFvalue *value, GENmodel *inModel) { HFET2model *model = (HFET2model*)inModel; switch(param) { case HFET2_MOD_CF: model->HFET2cfGiven = TRUE; CF = value->rValue; break; case HFET2_MOD_D1: model->HFET2d1Given = TRUE; D1 = value->rValue; break; case HFET2_MOD_D2: model->HFET2d2Given = TRUE; D2 = value->rValue; break; case HFET2_MOD_DEL: model->HFET2delGiven = TRUE; DEL = value->rValue; break; case HFET2_MOD_DELTA: model->HFET2deltaGiven = TRUE; DELTA = value->rValue; break; case HFET2_MOD_DELTAD: model->HFET2deltadGiven = TRUE; DELTAD = value->rValue; break; case HFET2_MOD_DI: model->HFET2diGiven = TRUE; DI = value->rValue; break; case HFET2_MOD_EPSI: model->HFET2epsiGiven = TRUE; EPSI = value->rValue; break; case HFET2_MOD_ETA: model->HFET2etaGiven = TRUE; ETA = value->rValue; break; case HFET2_MOD_ETA1: model->HFET2eta1Given = TRUE; ETA1 = value->rValue; break; case HFET2_MOD_ETA2: model->HFET2eta2Given = TRUE; ETA2 = value->rValue; break; case HFET2_MOD_GAMMA: model->HFET2gammaGiven = TRUE; GAMMA = value->rValue; break; case HFET2_MOD_GGR: model->HFET2ggrGiven = TRUE; GGR = value->rValue; break; case HFET2_MOD_JS: model->HFET2jsGiven = TRUE; JS = value->rValue; break; case HFET2_MOD_KLAMBDA: model->HFET2klambdaGiven = TRUE; KLAMBDA = value->rValue; break; case HFET2_MOD_KMU: model->HFET2kmuGiven = TRUE; KMU = value->rValue; break; case HFET2_MOD_KNMAX: model->HFET2knmaxGiven = TRUE; KNMAX = value->rValue; break; case HFET2_MOD_KVTO: model->HFET2kvtoGiven = TRUE; KVTO = value->rValue; break; case HFET2_MOD_LAMBDA: model->HFET2lambdaGiven = TRUE; LAMBDA = value->rValue; break; case HFET2_MOD_M: model->HFET2mGiven = TRUE; M = value->rValue; break; case HFET2_MOD_MC: model->HFET2mcGiven = TRUE; MC = value->rValue; break; case HFET2_MOD_MU: model->HFET2muGiven = TRUE; MU = value->rValue; break; case HFET2_MOD_N: model->HFET2nGiven = TRUE; N = value->rValue; break; case HFET2_MOD_NMAX: model->HFET2nmaxGiven = TRUE; NMAX = value->rValue; break; case HFET2_MOD_P: model->HFET2pGiven = TRUE; PP = value->rValue; break; case HFET2_MOD_RD: model->HFET2rdGiven = TRUE; RD = value->rValue; break; case HFET2_MOD_RDI: model->HFET2rdiGiven = TRUE; RDI = value->rValue; break; case HFET2_MOD_RS: model->HFET2rsGiven = TRUE; RS = value->rValue; break; case HFET2_MOD_RSI: model->HFET2rsiGiven = TRUE; RSI = value->rValue; break; case HFET2_MOD_SIGMA0: model->HFET2sigma0Given = TRUE; SIGMA0 = value->rValue; break; case HFET2_MOD_VS: model->HFET2vsGiven = TRUE; VS = value->rValue; break; case HFET2_MOD_VSIGMA: model->HFET2vsigmaGiven = TRUE; VSIGMA = value->rValue; break; case HFET2_MOD_VSIGMAT: model->HFET2vsigmatGiven = TRUE; VSIGMAT = value->rValue; break; case HFET2_MOD_VT1: model->HFET2vt1Given = TRUE; HFET2_VT1 = value->rValue; break; case HFET2_MOD_VT2: model->HFET2vt2Given = TRUE; VT2 = value->rValue; break; case HFET2_MOD_VTO: model->HFET2vtoGiven = TRUE; VTO = value->rValue; break; case HFET2_MOD_NHFET: if(value->iValue) { TYPE = NHFET; } break; case HFET2_MOD_PHFET: if(value->iValue) { TYPE = PHFET; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hfet2/hfet2mask.c0000644000175000017500000001132513546075722022225 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ /* Imported into HFET2 model: Paolo Nenzi 2001 */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "hfet2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int HFET2mAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { HFET2model *here = (HFET2model*)inst; NG_IGNORE(ckt); switch(which) { case HFET2_MOD_VTO: value->rValue = here->HFET2vto; return (OK); case HFET2_MOD_LAMBDA: value->rValue = here->HFET2lambda; return (OK); case HFET2_MOD_RD: value->rValue = here->HFET2rd; return (OK); case HFET2_MOD_RS: value->rValue = here->HFET2rs; return (OK); case HFET2_MOD_RDI: value->rValue = here->HFET2rdi; return (OK); case HFET2_MOD_RSI: value->rValue = here->HFET2rsi; return (OK); case HFET2_MOD_ETA: value->rValue = here->HFET2eta; return (OK); case HFET2_MOD_M: value->rValue = here->HFET2m; return (OK); case HFET2_MOD_MC: value->rValue = here->HFET2mc; return (OK); case HFET2_MOD_GAMMA: value->rValue = here->HFET2gamma; return (OK); case HFET2_MOD_SIGMA0: value->rValue = here->HFET2sigma0; return (OK); case HFET2_MOD_VSIGMAT: value->rValue = here->HFET2vsigmat; return (OK); case HFET2_MOD_VSIGMA: value->rValue = here->HFET2vsigma; return (OK); case HFET2_MOD_MU: value->rValue = here->HFET2mu; return (OK); case HFET2_MOD_DI: value->rValue = here->HFET2di; return (OK); case HFET2_MOD_DELTA: value->rValue = here->HFET2delta; return (OK); case HFET2_MOD_VS: value->rValue = here->HFET2vs; return (OK); case HFET2_MOD_NMAX: value->rValue = here->HFET2nmax; return (OK); case HFET2_MOD_DELTAD: value->rValue = here->HFET2deltad; return (OK); case HFET2_MOD_P: value->rValue = here->HFET2p; return (OK); case HFET2_MOD_JS: value->rValue = here->HFET2js; return (OK); case HFET2_MOD_ETA1: value->rValue = here->HFET2eta1; return (OK); case HFET2_MOD_D1: value->rValue = here->HFET2d1; return (OK); case HFET2_MOD_VT1: value->rValue = here->HFET2vt1; return (OK); case HFET2_MOD_ETA2: value->rValue = here->HFET2eta2; return (OK); case HFET2_MOD_D2: value->rValue = here->HFET2d2; return (OK); case HFET2_MOD_VT2: value->rValue = here->HFET2vt2; return (OK); case HFET2_MOD_GGR: value->rValue = here->HFET2ggr; return (OK); case HFET2_MOD_DEL: value->rValue = here->HFET2del; return (OK); case HFET2_MOD_KLAMBDA: value->rValue = here->HFET2klambda; return (OK); case HFET2_MOD_KMU: value->rValue = here->HFET2kmu; return (OK); case HFET2_MOD_KVTO: value->rValue = here->HFET2kvto; return (OK); case HFET2_MOD_EPSI: value->rValue = here->HFET2epsi; return (OK); case HFET2_MOD_KNMAX: value->rValue = here->HFET2knmax; return (OK); case HFET2_MOD_N: value->rValue = here->HFET2n; return (OK); case HFET2_MOD_CF: value->rValue = here->HFET2cf; return (OK); case HFET2_MOD_DRAINCONDUCT: value->rValue = here->HFET2drainConduct; return (OK); case HFET2_MOD_SOURCECONDUCT: value->rValue = here->HFET2sourceConduct; return (OK); /* case HFET2_MOD_DEPLETIONCAP: value->rValue = here->HFET2???; return(OK); */ /* case HFET2_MOD_VCRIT: value->rValue = here->HFET2vcrit; return (OK); */ case HFET2_MOD_TYPE: if (here->HFET2type == NHFET) value->sValue = "nhfet"; else value->sValue = "phfet"; return (OK); default: return (E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/hfet2/hfet2getic.c0000644000175000017500000000154113546075722022364 0ustar carstencarsten/********** Imported from MacSpice3f4 - Antony Wilson Modified: Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "hfet2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HFET2getic(GENmodel *inModel, CKTcircuit *ckt) { HFET2model *model = (HFET2model*)inModel; HFET2instance *here; for( ; model ; model = HFET2nextModel(model)) { for(here = HFET2instances(model); here ; here = HFET2nextInstance(here)) { if(!here->HFET2icVDSGiven) { here->HFET2icVDS = *(ckt->CKTrhs + here->HFET2drainNode) - *(ckt->CKTrhs + here->HFET2sourceNode); } if(!here->HFET2icVGSGiven) { here->HFET2icVGS = *(ckt->CKTrhs + here->HFET2gateNode) - *(ckt->CKTrhs + here->HFET2sourceNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hfet2/hfet2setup.c0000644000175000017500000001505713546075722022440 0ustar carstencarsten/********** Imported from MacSpice3f4 - Antony Wilson Modified: Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "hfet2defs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HFET2setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { HFET2model *model = (HFET2model*)inModel; HFET2instance *here; int error; CKTnode *tmp; for( ; model != NULL; model = HFET2nextModel(model)) { if((TYPE != NHFET) && (TYPE != PHFET) ) TYPE = NHFET; if(!model->HFET2cfGiven) CF = 0; if(!model->HFET2d1Given) D1 = 0.03e-6; if(!model->HFET2d2Given) D2 = 0.2e-6; if(!model->HFET2delGiven) DEL = 0.04; if(!model->HFET2deltaGiven) DELTA = 3.0; if(!model->HFET2deltadGiven) DELTAD = 4.5e-9; if(!model->HFET2diGiven) DI = 0.04e-6; if(!model->HFET2epsiGiven) EPSI = 12.244*8.85418e-12; if(!model->HFET2etaGiven) { if(TYPE == NHFET) ETA = 1.28; else ETA = 1.4; } if(!model->HFET2eta1Given) ETA1 = 2; if(!model->HFET2eta2Given) ETA2 = 2; if(!model->HFET2gammaGiven) GAMMA = 3.0; if(!model->HFET2ggrGiven) GGR = 0; if(!model->HFET2jsGiven) JS = 0; if(!model->HFET2klambdaGiven) KLAMBDA = 0; if(!model->HFET2kmuGiven) KMU = 0; if(!model->HFET2knmaxGiven) KNMAX = 0; if(!model->HFET2kvtoGiven) KVTO = 0; if(!model->HFET2lambdaGiven) LAMBDA = 0.15; if(!model->HFET2mGiven) M = 3.0; if(!model->HFET2mcGiven) MC = 3.0; if(!model->HFET2muGiven) { if(TYPE == NHFET) MU = 0.4; else MU = 0.03; } if(!model->HFET2nGiven) N = 5.0; if(!model->HFET2nmaxGiven) NMAX = 2e16; if(!model->HFET2pGiven) PP = 1; if(!model->HFET2rdGiven) RD = 0; if(!model->HFET2rdiGiven) RDI = 0; if(!model->HFET2rsGiven) RS = 0; if(!model->HFET2rsiGiven) RSI = 0; if(!model->HFET2sigma0Given) SIGMA0 = 0.057; if(!model->HFET2vsGiven) { if(TYPE == NHFET) VS = 1.5e5; else VS = 0.8e5; } if(!model->HFET2vsigmaGiven) VSIGMA = 0.1; if(!model->HFET2vsigmatGiven) VSIGMAT = 0.3; if(!model->HFET2vt1Given) /* initialized in HFET2temp */ HFET2_VT1 = 0; if(!model->HFET2vt2Given) /* initialized in HFET2temp */ VT2 = 0; if(!model->HFET2vtoGiven) { if(model->HFET2type == NHFET) VTO = 0.15; else VTO = -0.15; } /* loop through all the instances of the model */ for (here = HFET2instances(model); here != NULL; here=HFET2nextInstance(here)) { CKTnode *tmpNode; IFuid tmpName; here->HFET2state = *states; *states += HFET2numStates; if(!here->HFET2lengthGiven) L = 1e-6; if(!here->HFET2widthGiven) W = 20e-6; if(!here->HFET2mGiven) here->HFET2m = 1.0; if(model->HFET2rs != 0) { if(here->HFET2sourcePrimeNode == 0) { error = CKTmkVolt(ckt,&tmp,here->HFET2name,"source"); if(error) return(error); here->HFET2sourcePrimeNode = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->HFET2sourcePrimeNode = here->HFET2sourceNode; } if(model->HFET2rd != 0) { if(here->HFET2drainPrimeNode == 0) { error = CKTmkVolt(ckt,&tmp,here->HFET2name,"drain"); if(error) return(error); here->HFET2drainPrimeNode = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->HFET2drainPrimeNode = here->HFET2drainNode; } /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(HFET2drainDrainPrimePtr,HFET2drainNode,HFET2drainPrimeNode); TSTALLOC(HFET2gateDrainPrimePtr,HFET2gateNode,HFET2drainPrimeNode); TSTALLOC(HFET2gateSourcePrimePtr,HFET2gateNode,HFET2sourcePrimeNode); TSTALLOC(HFET2sourceSourcePrimePtr,HFET2sourceNode,HFET2sourcePrimeNode); TSTALLOC(HFET2drainPrimeDrainPtr,HFET2drainPrimeNode,HFET2drainNode); TSTALLOC(HFET2drainPrimeGatePtr,HFET2drainPrimeNode,HFET2gateNode); TSTALLOC(HFET2drainPriHFET2ourcePrimePtr,HFET2drainPrimeNode,HFET2sourcePrimeNode); TSTALLOC(HFET2sourcePrimeGatePtr,HFET2sourcePrimeNode,HFET2gateNode); TSTALLOC(HFET2sourcePriHFET2ourcePtr,HFET2sourcePrimeNode,HFET2sourceNode); TSTALLOC(HFET2sourcePrimeDrainPrimePtr,HFET2sourcePrimeNode,HFET2drainPrimeNode); TSTALLOC(HFET2drainDrainPtr,HFET2drainNode,HFET2drainNode); TSTALLOC(HFET2gateGatePtr,HFET2gateNode,HFET2gateNode); TSTALLOC(HFET2sourceSourcePtr,HFET2sourceNode,HFET2sourceNode); TSTALLOC(HFET2drainPrimeDrainPrimePtr,HFET2drainPrimeNode,HFET2drainPrimeNode); TSTALLOC(HFET2sourcePriHFET2ourcePrimePtr,HFET2sourcePrimeNode,HFET2sourcePrimeNode); } } return(OK); } int HFET2unsetup(GENmodel *inModel, CKTcircuit *ckt) { HFET2model *model; HFET2instance *here; for (model = (HFET2model *)inModel; model != NULL; model = HFET2nextModel(model)) { for (here = HFET2instances(model); here != NULL; here=HFET2nextInstance(here)) { if (here->HFET2drainPrimeNode > 0 && here->HFET2drainPrimeNode != here->HFET2drainNode) CKTdltNNum(ckt, here->HFET2drainPrimeNode); here->HFET2drainPrimeNode = 0; if (here->HFET2sourcePrimeNode > 0 && here->HFET2sourcePrimeNode != here->HFET2sourceNode) CKTdltNNum(ckt, here->HFET2sourcePrimeNode); here->HFET2sourcePrimeNode = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/hfet2/hfet2init.c0000644000175000017500000000316213546075722022235 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "hfet2itf.h" #include "hfet2ext.h" #include "hfet2init.h" SPICEdev HFET2info = { .DEVpublic = { .name = "HFET2", .description = "HFET2 Model", .terms = &HFET2nSize, .numNames = &HFET2nSize, .termNames = HFET2names, .numInstanceParms = &HFET2pTSize, .instanceParms = HFET2pTable, .numModelParms = &HFET2mPTSize, .modelParms = HFET2mPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = HFET2param, .DEVmodParam = HFET2mParam, .DEVload = HFET2load, .DEVsetup = HFET2setup, .DEVunsetup = HFET2unsetup, .DEVpzSetup = HFET2setup, .DEVtemperature = HFET2temp, .DEVtrunc = HFET2trunc, .DEVfindBranch = NULL, .DEVacLoad = HFET2acLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = HFET2getic, .DEVask = HFET2ask, .DEVmodAsk = HFET2mAsk, .DEVpzLoad = HFET2pzLoad, .DEVconvTest = NULL, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &HFET2iSize, .DEVmodSize = &HFET2mSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_hfet2_info(void) { return &HFET2info; } tmpk8ny_4pz/src/spicelib/devices/hfet2/hfet2ext.h0000644000175000017500000000142313546075722022075 0ustar carstencarsten/********** Copyright 1993: T. Ytterdal, K. Lee, M. Shur and T. A. Fjeldly. All rights reserved. Author: Trond Ytterdal **********/ extern int HFET2acLoad(GENmodel*,CKTcircuit*); extern int HFET2ask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int HFET2getic(GENmodel*,CKTcircuit*); extern int HFET2load(GENmodel*,CKTcircuit*); extern int HFET2mAsk(CKTcircuit*,GENmodel*,int,IFvalue*); extern int HFET2mParam(int,IFvalue*,GENmodel*); extern int HFET2param(int,IFvalue*,GENinstance*,IFvalue*); extern int HFET2pzLoad(GENmodel*, CKTcircuit*, SPcomplex*); extern int HFET2setup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int HFET2temp(GENmodel*,CKTcircuit*); extern int HFET2trunc(GENmodel*,CKTcircuit*,double*); extern int HFET2unsetup( GENmodel*,CKTcircuit*); tmpk8ny_4pz/src/spicelib/devices/hfet2/hfet2itf.h0000644000175000017500000000011613546075722022055 0ustar carstencarsten#ifndef DEV_HFET2 #define DEV_HFET2 SPICEdev *get_hfet2_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/hfet2/hfet2acl.c0000644000175000017500000000500313546075722022025 0ustar carstencarsten/********** Imported from MacSpice3f4 - Antony Wilson Modified: Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "hfet2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HFET2acLoad(GENmodel *inModel, CKTcircuit *ckt) { HFET2model *model = (HFET2model*)inModel; HFET2instance *here; double gdpr; double gspr; double gm; double gds; double ggs; double xgs; double ggd; double xgd; double m; for( ; model != NULL; model = HFET2nextModel(model)) { for( here = HFET2instances(model); here != NULL; here = HFET2nextInstance(here)) { m = here->HFET2m; gdpr=model->HFET2drainConduct; gspr=model->HFET2sourceConduct; gm= *(ckt->CKTstate0 + here->HFET2gm) ; gds= *(ckt->CKTstate0 + here->HFET2gds) ; ggs= *(ckt->CKTstate0 + here->HFET2ggs) ; xgs= *(ckt->CKTstate0 + here->HFET2qgs) * ckt->CKTomega ; ggd= *(ckt->CKTstate0 + here->HFET2ggd) ; xgd= *(ckt->CKTstate0 + here->HFET2qgd) * ckt->CKTomega ; *(here->HFET2drainDrainPtr ) += m * (gdpr); *(here->HFET2gateGatePtr ) += m * (ggd+ggs); *(here->HFET2gateGatePtr +1) += m * (xgd+xgs); *(here->HFET2sourceSourcePtr ) += m * (gspr); *(here->HFET2drainPrimeDrainPrimePtr ) += m * (gdpr+gds+ggd); *(here->HFET2drainPrimeDrainPrimePtr +1) += m * (xgd); *(here->HFET2sourcePriHFET2ourcePrimePtr ) += m * (gspr+gds+gm+ggs); *(here->HFET2sourcePriHFET2ourcePrimePtr +1) += m * (xgs); *(here->HFET2drainDrainPrimePtr ) -= m * (gdpr); *(here->HFET2gateDrainPrimePtr ) -= m * (ggd); *(here->HFET2gateDrainPrimePtr +1) -= m * (xgd); *(here->HFET2gateSourcePrimePtr ) -= m * (ggs); *(here->HFET2gateSourcePrimePtr +1) -= m * (xgs); *(here->HFET2sourceSourcePrimePtr ) -= m * (gspr); *(here->HFET2drainPrimeDrainPtr ) -= m * (gdpr); *(here->HFET2drainPrimeGatePtr ) += m * (-ggd+gm); *(here->HFET2drainPrimeGatePtr +1) -= m * (xgd); *(here->HFET2drainPriHFET2ourcePrimePtr ) += m * (-gds-gm); *(here->HFET2sourcePrimeGatePtr ) += m * (-ggs-gm); *(here->HFET2sourcePrimeGatePtr +1) -= m * (xgs); *(here->HFET2sourcePriHFET2ourcePtr ) -= m * (gspr); *(here->HFET2sourcePrimeDrainPrimePtr ) -= m * (gds); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hfet2/hfet2init.h0000644000175000017500000000040213546075722022234 0ustar carstencarsten#ifndef _HFET2INIT_H #define _HFET2INIT_H extern IFparm HFET2pTable[ ]; extern IFparm HFET2mPTable[ ]; extern char *HFET2names[ ]; extern int HFET2pTSize; extern int HFET2mPTSize; extern int HFET2nSize; extern int HFET2iSize; extern int HFET2mSize; #endif tmpk8ny_4pz/src/spicelib/devices/hfet2/hfet2.c0000644000175000017500000001201213546075722021343 0ustar carstencarsten/********** Imported from MacSpice3f4 - Antony Wilson Modified: Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/devdefs.h" #include "hfet2defs.h" #include "ngspice/suffix.h" IFparm HFET2pTable[] = { /* parameters */ OP("off", HFET2_OFF, IF_FLAG ,"Device initialli OFF"), IOP("l", HFET2_LENGTH, IF_REAL ,"Length of device"), IOP("w", HFET2_WIDTH, IF_REAL ,"Width of device"), IOP("m", HFET2_M, IF_REAL ,"Parallel Multiplier"), IOP("icvds", HFET2_IC_VDS, IF_REAL ,"Initial D-S voltage"), IOP("icvgs", HFET2_IC_VGS, IF_REAL ,"Initial G-S voltage"), IOP("temp", HFET2_TEMP, IF_REAL ,"Instance temperature"), IOP("dtemp", HFET2_DTEMP, IF_REAL ,"Instance temperature difference"), OP("dnode", HFET2_DRAINNODE, IF_INTEGER ,"Number of drain node"), OP("gnode", HFET2_GATENODE, IF_INTEGER ,"Number of gate node"), OP("snode", HFET2_SOURCENODE, IF_INTEGER ,"Number of source node"), OP("dprimenode",HFET2_DRAINPRIMENODE, IF_INTEGER ,"Number of internal drain node"), OP("sprimenode",HFET2_SOURCEPRIMENODE,IF_INTEGER ,"Number of internal source node"), OP("vgs", HFET2_VGS, IF_REAL ,"Gate-Source voltage"), OP("vgd", HFET2_VGD, IF_REAL ,"Gate-Drain voltage"), OP("cg", HFET2_CG, IF_REAL ,"Gate capacitance"), OP("cd", HFET2_CD, IF_REAL ,"Drain capacitance"), OP("cgd", HFET2_CGD, IF_REAL ,"Gate_Drain capacitance"), OP("gm", HFET2_GM, IF_REAL ,"Transconductance"), OP("gds", HFET2_GDS, IF_REAL ,"Drain-Source conductance"), OP("ggs", HFET2_GGS, IF_REAL ,"Gate-Source conductance"), OP("ggd", HFET2_GGD, IF_REAL ,"Gate-Drain conductance"), OP("qgs", HFET2_QGS, IF_REAL ,"Gate-Source charge storage"), OP("cqgs", HFET2_CQGS, IF_REAL ,"Capacitance due to gate-source charge storage"), OP("qgd", HFET2_QGD, IF_REAL ,"Gate-Drain charge storage"), OP("cqgd", HFET2_CQGD, IF_REAL ,"Capacitance due to gate-drain charge storage"), OP("cs", HFET2_CS, IF_REAL ,"Source current"), OP("p", HFET2_POWER, IF_REAL ,"Power dissipated by the mesfet") }; IFparm HFET2mPTable[] = { /* model parameters */ OP( "type", HFET2_MOD_TYPE, IF_STRING,"NHFET or PHFET"), IOP( "nhfet", HFET2_MOD_NHFET, IF_FLAG,"N type HFET model"), IOP( "phfet", HFET2_MOD_PHFET, IF_FLAG,"P type HFET model"), IOP( "cf", HFET2_MOD_CF, IF_REAL,""), IOP( "d1", HFET2_MOD_D1, IF_REAL,""), IOP( "d2", HFET2_MOD_D2, IF_REAL,""), IOP( "del", HFET2_MOD_DEL, IF_REAL,""), IOP( "delta", HFET2_MOD_DELTA, IF_REAL,""), IOP( "deltad", HFET2_MOD_DELTAD, IF_REAL,"Thickness correction"), IOP( "di", HFET2_MOD_DI, IF_REAL,"Depth of device"), IOP( "epsi", HFET2_MOD_EPSI, IF_REAL,""), IOP( "eta", HFET2_MOD_ETA, IF_REAL,"Subthreshold ideality factor"), IOP( "eta1", HFET2_MOD_ETA1, IF_REAL,""), IOP( "eta2", HFET2_MOD_ETA2, IF_REAL,""), IOP( "gamma", HFET2_MOD_GAMMA, IF_REAL,"Knee shape parameter"), IOP( "ggr", HFET2_MOD_GGR, IF_REAL,""), IOP( "js", HFET2_MOD_JS, IF_REAL,""), IOP( "klambda", HFET2_MOD_KLAMBDA, IF_REAL,""), IOP( "kmu", HFET2_MOD_KMU, IF_REAL,""), IOP( "knmax", HFET2_MOD_KNMAX, IF_REAL,""), IOP( "kvto", HFET2_MOD_KVTO, IF_REAL,""), IOP( "lambda", HFET2_MOD_LAMBDA, IF_REAL,"Output conductance parameter"), IOP( "m", HFET2_MOD_M, IF_REAL,"Knee shape parameter"), IOP( "mc", HFET2_MOD_MC, IF_REAL,"Knee shape parameter"), IOP( "mu", HFET2_MOD_MU, IF_REAL,"Moblity"), IOP( "n", HFET2_MOD_N, IF_REAL,""), IOP( "nmax", HFET2_MOD_NMAX, IF_REAL,""), IOP( "p", HFET2_MOD_P, IF_REAL,""), IOP( "rd", HFET2_MOD_RD, IF_REAL,"Drain ohmic resistance"), IOP( "rdi", HFET2_MOD_RDI, IF_REAL,"Drain ohmic resistance"), IOP( "rs", HFET2_MOD_RS, IF_REAL,"Source ohmic resistance"), IOP( "rsi", HFET2_MOD_RSI, IF_REAL,"Source ohmic resistance"), IOP( "sigma0", HFET2_MOD_SIGMA0, IF_REAL,"DIBL parameter"), IOP( "vs", HFET2_MOD_VS, IF_REAL,"Saturation velocity"), IOP( "vsigma", HFET2_MOD_VSIGMA, IF_REAL,""), IOP( "vsigmat", HFET2_MOD_VSIGMAT, IF_REAL,""), IOP( "vt0", HFET2_MOD_VTO, IF_REAL,"Pinch-off voltage"), IOPR("vto", HFET2_MOD_VTO, IF_REAL,"Pinch-off voltage"), IOP( "vt1", HFET2_MOD_VT1, IF_REAL,""), IOP( "vt2", HFET2_MOD_VT2, IF_REAL,"") }; char *HFET2names[] = { "Drain", "Gate", "Source" }; int HFET2nSize = NUMELEMS(HFET2names); int HFET2pTSize = NUMELEMS(HFET2pTable); int HFET2mPTSize = NUMELEMS(HFET2mPTable); int HFET2iSize = sizeof(HFET2instance); int HFET2mSize = sizeof(HFET2model); tmpk8ny_4pz/src/spicelib/devices/hfet2/hfet2temp.c0000644000175000017500000000330313546075722022234 0ustar carstencarsten/********** Imported from MacSpice3f4 - Antony Wilson Modified: Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "hfet2defs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HFET2temp( GENmodel *inModel, CKTcircuit *ckt) { HFET2instance *here; HFET2model *model = (HFET2model*)inModel; double vt; double tdiff; for( ; model != NULL; model = HFET2nextModel(model)) { if(model->HFET2rd != 0) model->HFET2drainConduct = 1/model->HFET2rd; else model->HFET2drainConduct = 0; if(model->HFET2rs != 0) model->HFET2sourceConduct = 1/model->HFET2rs; else model->HFET2sourceConduct = 0; if(!model->HFET2vt1Given) HFET2_VT1 = VTO+CHARGE*NMAX*DI/EPSI; if(!model->HFET2vt2Given) VT2 = VTO; DELTA2 = DELTA*DELTA; for (here = HFET2instances(model); here != NULL; here=HFET2nextInstance(here)) { if(!here->HFET2dtempGiven) here->HFET2dtemp = 0.0; if(!here->HFET2tempGiven) TEMP = ckt->CKTtemp + here->HFET2dtemp; vt = CONSTKoverQ*TEMP; tdiff = TEMP - ckt->CKTnomTemp; TLAMBDA = LAMBDA + KLAMBDA*tdiff; TMU = MU - KMU*tdiff; TNMAX = NMAX - KNMAX*tdiff; TVTO = TYPE*VTO - KVTO*tdiff; JSLW = JS*L*W/2; GGRLW = GGR*L*W/2; N0 = EPSI*ETA*vt/2/CHARGE/(DI+DELTAD); N01 = EPSI*ETA1*vt/2/CHARGE/D1; if(model->HFET2eta2Given) N02 = EPSI*ETA2*vt/2/CHARGE/D2; else N02 = 0.0; GCHI0 = CHARGE*W*TMU/L; IMAX = CHARGE*TNMAX*VS*W; VCRIT = vt*log(vt/(CONSTroot2 * 1e-11)); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/hfet2/hfet2defs.h0000644000175000017500000002002213546075722022212 0ustar carstencarsten#ifndef HFET2 #define HFET2 #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" typedef struct sHFET2instance { struct GENinstance gen; #define HFET2modPtr(inst) ((struct sHFET2model *)((inst)->gen.GENmodPtr)) #define HFET2nextInstance(inst) ((struct sHFET2instance *)((inst)->gen.GENnextInstance)) #define HFET2name gen.GENname #define HFET2state gen.GENstate int HFET2drainNode; int HFET2gateNode; int HFET2sourceNode; int HFET2drainPrimeNode; int HFET2sourcePrimeNode; double HFET2length; double HFET2width; double HFET2m; double HFET2temp; double HFET2dtemp; double HFET2tLambda; double HFET2tMu; double HFET2tNmax; double HFET2tVto; double HFET2icVDS; double HFET2icVGS; double *HFET2drainDrainPrimePtr; double *HFET2gateDrainPrimePtr; double *HFET2gateSourcePrimePtr; double *HFET2sourceSourcePrimePtr; double *HFET2drainPrimeDrainPtr; double *HFET2drainPrimeGatePtr; double *HFET2drainPriHFET2ourcePrimePtr; double *HFET2sourcePrimeGatePtr; double *HFET2sourcePriHFET2ourcePtr; double *HFET2sourcePrimeDrainPrimePtr; double *HFET2drainDrainPtr; double *HFET2gateGatePtr; double *HFET2sourceSourcePtr; double *HFET2drainPrimeDrainPrimePtr; double *HFET2sourcePriHFET2ourcePrimePtr; #define HFET2vgs HFET2state #define HFET2vgd HFET2state+1 #define HFET2cg HFET2state+2 #define HFET2cd HFET2state+3 #define HFET2cgd HFET2state+4 #define HFET2gm HFET2state+5 #define HFET2gds HFET2state+6 #define HFET2ggs HFET2state+7 #define HFET2ggd HFET2state+8 #define HFET2qgs HFET2state+9 #define HFET2cqgs HFET2state+10 #define HFET2qgd HFET2state+11 #define HFET2cqgd HFET2state+12 #define HFET2numStates 13 int HFET2mode; int HFET2off; unsigned HFET2icVDSGiven : 1; unsigned HFET2icVGSGiven : 1; unsigned HFET2lengthGiven : 1; unsigned HFET2widthGiven : 1; unsigned HFET2mGiven : 1; unsigned HFET2tempGiven : 1; unsigned HFET2dtempGiven : 1; double HFET2n0; double HFET2n01; double HFET2n02; double HFET2gchi0; double HFET2imax; double HFET2vcrit; double HFET2ggrlw; double HFET2jslw; } HFET2instance ; typedef struct sHFET2model { struct GENmodel gen; #define HFET2modType gen.GENmodType #define HFET2nextModel(inst) ((struct sHFET2model *)((inst)->gen.GENnextModel)) #define HFET2instances(inst) ((HFET2instance *)((inst)->gen.GENinstances)) #define HFET2modName gen.GENmodName int HFET2type; double HFET2cf; double HFET2d1; double HFET2d2; double HFET2del; double HFET2delta; double HFET2deltad; double HFET2di; double HFET2epsi; double HFET2eta; double HFET2eta1; double HFET2eta2; double HFET2gamma; double HFET2ggr; double HFET2js; double HFET2klambda; double HFET2kmu; double HFET2knmax; double HFET2kvto; double HFET2lambda; double HFET2m; double HFET2mc; double HFET2mu; double HFET2n; double HFET2nmax; double HFET2p; double HFET2rd; double HFET2rdi; double HFET2rs; double HFET2rsi; double HFET2sigma0; double HFET2vs; double HFET2vsigma; double HFET2vsigmat; double HFET2vt1; double HFET2vt2; double HFET2vto; double HFET2drainConduct; double HFET2sourceConduct; double HFET2deltaSqr; unsigned HFET2cfGiven : 1; unsigned HFET2d1Given : 1; unsigned HFET2d2Given : 1; unsigned HFET2delGiven : 1; unsigned HFET2deltaGiven : 1; unsigned HFET2deltadGiven : 1; unsigned HFET2diGiven : 1; unsigned HFET2epsiGiven : 1; unsigned HFET2etaGiven : 1; unsigned HFET2eta1Given : 1; unsigned HFET2eta2Given : 1; unsigned HFET2gammaGiven : 1; unsigned HFET2ggrGiven : 1; unsigned HFET2jsGiven : 1; unsigned HFET2klambdaGiven : 1; unsigned HFET2kmuGiven : 1; unsigned HFET2knmaxGiven : 1; unsigned HFET2kvtoGiven : 1; unsigned HFET2lambdaGiven : 1; unsigned HFET2mGiven : 1; unsigned HFET2mcGiven : 1; unsigned HFET2muGiven : 1; unsigned HFET2nGiven : 1; unsigned HFET2nmaxGiven : 1; unsigned HFET2pGiven : 1; unsigned HFET2rdGiven : 1; unsigned HFET2rdiGiven : 1; unsigned HFET2rsGiven : 1; unsigned HFET2rsiGiven : 1; unsigned HFET2sigma0Given : 1; unsigned HFET2vsGiven : 1; unsigned HFET2vsigmaGiven : 1; unsigned HFET2vsigmatGiven : 1; unsigned HFET2vt1Given : 1; unsigned HFET2vt2Given : 1; unsigned HFET2vtoGiven : 1; } HFET2model; #ifndef NHFET #define NHFET 1 #define PHFET -1 #endif /*NMF*/ /* device parameters */ enum { HFET2_LENGTH = 1, HFET2_WIDTH, HFET2_IC_VDS, HFET2_IC_VGS, HFET2_IC, HFET2_OFF, HFET2_CS, HFET2_POWER, HFET2_TEMP, HFET2_DTEMP, HFET2_M, }; /* model parameters */ enum { HFET2_MOD_NHFET = 101, HFET2_MOD_PHFET, HFET2_MOD_CF, HFET2_MOD_D1, HFET2_MOD_D2, HFET2_MOD_DEL, HFET2_MOD_DELTA, HFET2_MOD_DELTAD, HFET2_MOD_DI, HFET2_MOD_EPSI, HFET2_MOD_ETA, HFET2_MOD_ETA1, HFET2_MOD_ETA2, HFET2_MOD_GAMMA, HFET2_MOD_GGR, HFET2_MOD_JS, HFET2_MOD_KLAMBDA, HFET2_MOD_KMU, HFET2_MOD_KNMAX, HFET2_MOD_KVTO, HFET2_MOD_LAMBDA, HFET2_MOD_M, HFET2_MOD_MC, HFET2_MOD_MU, HFET2_MOD_N, HFET2_MOD_NMAX, HFET2_MOD_P, HFET2_MOD_RD, HFET2_MOD_RDI, HFET2_MOD_RS, HFET2_MOD_RSI, HFET2_MOD_SIGMA0, HFET2_MOD_VS, HFET2_MOD_VSIGMA, HFET2_MOD_VSIGMAT, HFET2_MOD_VT1, HFET2_MOD_VT2, HFET2_MOD_VTO, HFET2_MOD_TYPE, }; /* device questions */ enum { HFET2_DRAINNODE = 201, HFET2_GATENODE, HFET2_SOURCENODE, HFET2_DRAINPRIMENODE, HFET2_SOURCEPRIMENODE, HFET2_VGS, HFET2_VGD, HFET2_CG, HFET2_CD, HFET2_CGD, HFET2_GM, HFET2_GDS, HFET2_GGS, HFET2_GGD, HFET2_QGS, HFET2_CQGS, HFET2_QGD, HFET2_CQGD, }; /* model questions */ enum { HFET2_MOD_DRAINCONDUCT = 301, HFET2_MOD_SOURCECONDUCT, HFET2_MOD_DEPLETIONCAP, HFET2_MOD_VCRIT, }; #define CF (model->HFET2cf) #define D1 (model->HFET2d1) #define D2 (model->HFET2d2) #define DEL (model->HFET2del) #define DELTA (model->HFET2delta) #define DELTAD (model->HFET2deltad) #define DI (model->HFET2di) #define EPSI (model->HFET2epsi) #define ETA (model->HFET2eta) #define ETA1 (model->HFET2eta1) #define ETA2 (model->HFET2eta2) #define GAMMA (model->HFET2gamma) #define GGR (model->HFET2ggr) #define JS (model->HFET2js) #define KLAMBDA (model->HFET2klambda) #define KMU (model->HFET2kmu) #define KNMAX (model->HFET2knmax) #define KVTO (model->HFET2kvto) #define LAMBDA (model->HFET2lambda) #define M (model->HFET2m) #define MC (model->HFET2mc) #define MU (model->HFET2mu) #define N (model->HFET2n) #define NMAX (model->HFET2nmax) #define PP (model->HFET2p) #define RD (model->HFET2rd) #define RDI (model->HFET2rdi) #define RS (model->HFET2rs) #define RSI (model->HFET2rsi) #define SIGMA0 (model->HFET2sigma0) #define TYPE (model->HFET2type) #define VS (model->HFET2vs) #define VSIGMA (model->HFET2vsigma) #define VSIGMAT (model->HFET2vsigmat) #define HFET2_VT1 (model->HFET2vt1) /* Fix a redefinition in include files */ #define VT2 (model->HFET2vt2) #define VTO (model->HFET2vto) #define DELTA2 (model->HFET2deltaSqr) #define GCHI0 (here->HFET2gchi0) #define GGRLW (here->HFET2ggrlw) #define JSLW (here->HFET2jslw) #define IMAX (here->HFET2imax) #define L (here->HFET2length) #define N0 (here->HFET2n0) #define N01 (here->HFET2n01) #define N02 (here->HFET2n02) #define TEMP (here->HFET2temp) #define TLAMBDA (here->HFET2tLambda) #define TMU (here->HFET2tMu) #define TNMAX (here->HFET2tNmax) #define TVTO (here->HFET2tVto) #define VCRIT (here->HFET2vcrit) #define W (here->HFET2width) #include "hfet2ext.h" #endif /*HFET2*/ tmpk8ny_4pz/src/spicelib/devices/hfet2/hfet2load.c0000644000175000017500000003607113546075722022216 0ustar carstencarsten/********** Imported from MacSpice3f4 - Antony Wilson Modified: Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/cktdefs.h" #include "hfet2defs.h" #include "ngspice/const.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" void Pause(void); static void hfeta2(HFET2model *model, HFET2instance *here, CKTcircuit *ckt, double vgs, double vds, double *cdrain, double *gm, double *gds, double *capgs, double *capgd); int HFET2load(GENmodel *inModel, CKTcircuit *ckt) { HFET2model *model = (HFET2model*)inModel; HFET2instance *here; double capgd; double capgs; double cd; double cdhat = 0.0; double cdrain; double cdreq; double ceq; double ceqgd; double ceqgs; double cg; double cgd; double cghat = 0.0; double delvds; double delvgd; double delvgs; double gdpr; double gds; double geq; double ggd; double ggs; double gm; double gspr; double vcrit; double vds; double vgd; double vgd1; double vgs; double vgs1; double vt; double vto; #ifndef PREDICTOR double xfact; #endif int icheck; int ichk1; int error; int inverse; double m; for( ; model != NULL; model = HFET2nextModel(model)) { for(here = HFET2instances(model); here != NULL; here=HFET2nextInstance(here)) { gdpr = model->HFET2drainConduct; gspr = model->HFET2sourceConduct; vcrit = VCRIT; vto = TVTO; vt = CONSTKoverQ*TEMP; icheck = 1; if( ckt->CKTmode & MODEINITSMSIG) { vgs = *(ckt->CKTstate0 + here->HFET2vgs); vgd = *(ckt->CKTstate0 + here->HFET2vgd); } else if(ckt->CKTmode & MODEINITTRAN) { vgs = *(ckt->CKTstate1 + here->HFET2vgs); vgd = *(ckt->CKTstate1 + here->HFET2vgd); } else if((ckt->CKTmode & MODEINITJCT) && (ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC) ) { vds = model->HFET2type*here->HFET2icVDS; vgs = model->HFET2type*here->HFET2icVGS; vgd = vgs-vds; } else if ( (ckt->CKTmode & MODEINITJCT) && (here->HFET2off == 0) ) { vgs = -1; vgd = -1; } else if((ckt->CKTmode & MODEINITJCT) || ((ckt->CKTmode & MODEINITFIX) && (here->HFET2off))) { vgs = 0; vgd = 0; } else { #ifndef PREDICTOR if(ckt->CKTmode & MODEINITPRED) { xfact = ckt->CKTdelta/ckt->CKTdeltaOld[2]; *(ckt->CKTstate0 + here->HFET2vgs) = *(ckt->CKTstate1 + here->HFET2vgs); vgs = (1+xfact) * *(ckt->CKTstate1 + here->HFET2vgs) - xfact * *(ckt->CKTstate2 + here->HFET2vgs); *(ckt->CKTstate0 + here->HFET2vgd) = *(ckt->CKTstate1 + here->HFET2vgd); vgd = (1+xfact)* *(ckt->CKTstate1 + here->HFET2vgd) - xfact * *(ckt->CKTstate2 + here->HFET2vgd); *(ckt->CKTstate0 + here->HFET2cg) = *(ckt->CKTstate1 + here->HFET2cg); *(ckt->CKTstate0 + here->HFET2cd) = *(ckt->CKTstate1 + here->HFET2cd); *(ckt->CKTstate0 + here->HFET2cgd) = *(ckt->CKTstate1 + here->HFET2cgd); *(ckt->CKTstate0 + here->HFET2gm) = *(ckt->CKTstate1 + here->HFET2gm); *(ckt->CKTstate0 + here->HFET2gds) = *(ckt->CKTstate1 + here->HFET2gds); *(ckt->CKTstate0 + here->HFET2ggs) = *(ckt->CKTstate1 + here->HFET2ggs); *(ckt->CKTstate0 + here->HFET2ggd) = *(ckt->CKTstate1 + here->HFET2ggd); } else { #endif /* PREDICTOR */ vgs = model->HFET2type* (*(ckt->CKTrhsOld+ here->HFET2gateNode)- *(ckt->CKTrhsOld+ here->HFET2sourcePrimeNode)); vgd = model->HFET2type* (*(ckt->CKTrhsOld+here->HFET2gateNode)- *(ckt->CKTrhsOld+ here->HFET2drainPrimeNode)); #ifndef PREDICTOR } #endif /* PREDICTOR */ delvgs=vgs - *(ckt->CKTstate0 + here->HFET2vgs); delvgd=vgd - *(ckt->CKTstate0 + here->HFET2vgd); delvds=delvgs - delvgd; cghat= *(ckt->CKTstate0 + here->HFET2cg) + *(ckt->CKTstate0 + here->HFET2ggd)*delvgd + *(ckt->CKTstate0 + here->HFET2ggs)*delvgs; cdhat= *(ckt->CKTstate0 + here->HFET2cd) + *(ckt->CKTstate0 + here->HFET2gm)*delvgs + *(ckt->CKTstate0 + here->HFET2gds)*delvds - *(ckt->CKTstate0 + here->HFET2ggd)*delvgd; /* bypass if solution has not changed */ if((ckt->CKTbypass) && (!(ckt->CKTmode & MODEINITPRED)) && (fabs(delvgs) < ckt->CKTreltol*MAX(fabs(vgs), fabs(*(ckt->CKTstate0 + here->HFET2vgs)))+ ckt->CKTvoltTol) ) if ( (fabs(delvgd) < ckt->CKTreltol*MAX(fabs(vgd), fabs(*(ckt->CKTstate0 + here->HFET2vgd)))+ ckt->CKTvoltTol)) if ( (fabs(cghat-*(ckt->CKTstate0 + here->HFET2cg)) < ckt->CKTreltol*MAX(fabs(cghat), fabs(*(ckt->CKTstate0 + here->HFET2cg)))+ ckt->CKTabstol) ) if ( /* hack - expression too big */ (fabs(cdhat-*(ckt->CKTstate0 + here->HFET2cd)) < ckt->CKTreltol*MAX(fabs(cdhat), fabs(*(ckt->CKTstate0 + here->HFET2cd)))+ ckt->CKTabstol) ) { /* we can do a bypass */ vgs= *(ckt->CKTstate0 + here->HFET2vgs); vgd= *(ckt->CKTstate0 + here->HFET2vgd); vds= vgs-vgd; cg= *(ckt->CKTstate0 + here->HFET2cg); cd= *(ckt->CKTstate0 + here->HFET2cd); cgd= *(ckt->CKTstate0 + here->HFET2cgd); gm= *(ckt->CKTstate0 + here->HFET2gm); gds= *(ckt->CKTstate0 + here->HFET2gds); ggs= *(ckt->CKTstate0 + here->HFET2ggs); ggd= *(ckt->CKTstate0 + here->HFET2ggd); goto load; } /* limit nonlinear branch voltages */ ichk1=1; vgs = DEVpnjlim(vgs,*(ckt->CKTstate0 + here->HFET2vgs),CONSTvt0,vcrit, &icheck); vgd = DEVpnjlim(vgd,*(ckt->CKTstate0 + here->HFET2vgd),CONSTvt0,vcrit,&ichk1); if(ichk1 == 1) { icheck=1; } vgs = DEVfetlim(vgs,*(ckt->CKTstate0 + here->HFET2vgs),TVTO); vgd = DEVfetlim(vgd,*(ckt->CKTstate0 + here->HFET2vgd),TVTO); } cg = 0; cgd = 0; ggd = 0; ggs = 0; vds = vgs-vgd; { double arg = -vgs*DEL/vt; double earg = exp(arg); double vtn = N*vt; double expe = exp(vgs/vtn); ggs = JSLW*expe/vtn+GGRLW*earg*(1-arg); cg = JSLW*(expe-1)+GGRLW*vgs*earg; arg = -vgd*DEL/vt; earg = exp(arg); expe = exp(vgd/vtn); ggd = JSLW*expe/vtn+GGRLW*earg*(1-arg); cgd = JSLW*(expe-1)+GGRLW*vgd*earg; cg += cgd; } if(vds < 0) { vds = -vds; inverse = 1; } else inverse = 0; hfeta2(model,here,ckt,vds>0?vgs:vgd,vds,&cdrain,&gm,&gds,&capgs,&capgd); if(inverse) { double temp; cdrain = -cdrain; vds = -vds; temp = capgs; capgs = capgd; capgd = temp; } cd = cdrain - cgd; if((ckt->CKTmode & (MODETRAN|MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) ){ /* charge storage elements */ vgs1 = *(ckt->CKTstate1 + here->HFET2vgs); vgd1 = *(ckt->CKTstate1 + here->HFET2vgd); if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->HFET2qgs) = capgs*vgs; *(ckt->CKTstate1 + here->HFET2qgd) = capgd*vgd; } *(ckt->CKTstate0+here->HFET2qgs) = *(ckt->CKTstate1+here->HFET2qgs) + capgs*(vgs-vgs1); *(ckt->CKTstate0+here->HFET2qgd) = *(ckt->CKTstate1+here->HFET2qgd) + capgd*(vgd-vgd1); /* store small-signal parameters */ if( (!(ckt->CKTmode & MODETRANOP)) || (!(ckt->CKTmode & MODEUIC)) ) { if(ckt->CKTmode & MODEINITSMSIG) { *(ckt->CKTstate0 + here->HFET2qgs) = capgs; *(ckt->CKTstate0 + here->HFET2qgd) = capgd; continue; /*go to 1000*/ } /* transient analysis */ if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->HFET2qgs) = *(ckt->CKTstate0 + here->HFET2qgs); *(ckt->CKTstate1 + here->HFET2qgd) = *(ckt->CKTstate0 + here->HFET2qgd); } error = NIintegrate(ckt,&geq,&ceq,capgs,here->HFET2qgs); if(error) return(error); ggs = ggs + geq; cg = cg + *(ckt->CKTstate0 + here->HFET2cqgs); error = NIintegrate(ckt,&geq,&ceq,capgd,here->HFET2qgd); if(error) return(error); ggd = ggd + geq; cg = cg + *(ckt->CKTstate0 + here->HFET2cqgd); cd = cd - *(ckt->CKTstate0 + here->HFET2cqgd); cgd = cgd + *(ckt->CKTstate0 + here->HFET2cqgd); if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->HFET2cqgs) = *(ckt->CKTstate0 + here->HFET2cqgs); *(ckt->CKTstate1 + here->HFET2cqgd) = *(ckt->CKTstate0 + here->HFET2cqgd); } } } /* check convergence */ if( (!(ckt->CKTmode & MODEINITFIX)) | (!(ckt->CKTmode & MODEUIC))) { if((icheck == 1) || (fabs(cghat-cg) >= ckt->CKTreltol* MAX(fabs(cghat),fabs(cg))+ckt->CKTabstol) || (fabs(cdhat-cd) > ckt->CKTreltol* MAX(fabs(cdhat),fabs(cd))+ckt->CKTabstol) ) { ckt->CKTnoncon++; } } *(ckt->CKTstate0 + here->HFET2vgs) = vgs; *(ckt->CKTstate0 + here->HFET2vgd) = vgd; *(ckt->CKTstate0 + here->HFET2cg) = cg; *(ckt->CKTstate0 + here->HFET2cd) = cd; *(ckt->CKTstate0 + here->HFET2cgd) = cgd; *(ckt->CKTstate0 + here->HFET2gm) = gm; *(ckt->CKTstate0 + here->HFET2gds) = gds; *(ckt->CKTstate0 + here->HFET2ggs) = ggs; *(ckt->CKTstate0 + here->HFET2ggd) = ggd; /* load current vector */ load: m = here->HFET2m; ceqgd=model->HFET2type*(cgd-ggd*vgd); ceqgs=model->HFET2type*((cg-cgd)-ggs*vgs); cdreq=model->HFET2type*((cd+cgd)-gds*vds-gm*vgs); *(ckt->CKTrhs + here->HFET2gateNode) += m * (-ceqgs-ceqgd); *(ckt->CKTrhs + here->HFET2drainPrimeNode) += m * (-cdreq+ceqgd); *(ckt->CKTrhs + here->HFET2sourcePrimeNode) += m * (cdreq+ceqgs); /* load y matrix */ *(here->HFET2drainDrainPrimePtr) += m * (-gdpr); *(here->HFET2gateDrainPrimePtr) += m * (-ggd); *(here->HFET2gateSourcePrimePtr) += m * (-ggs); *(here->HFET2sourceSourcePrimePtr) += m * (-gspr); *(here->HFET2drainPrimeDrainPtr) += m * (-gdpr); *(here->HFET2drainPrimeGatePtr) += m * (gm-ggd); *(here->HFET2drainPriHFET2ourcePrimePtr) += m * (-gds-gm); *(here->HFET2sourcePrimeGatePtr) += m * (-ggs-gm); *(here->HFET2sourcePriHFET2ourcePtr) += m * (-gspr); *(here->HFET2sourcePrimeDrainPrimePtr) += m * (-gds); *(here->HFET2drainDrainPtr) += m * (gdpr); *(here->HFET2gateGatePtr) += m * (ggd+ggs); *(here->HFET2sourceSourcePtr) += m * (gspr); *(here->HFET2drainPrimeDrainPrimePtr) += m * (gdpr+gds+ggd); *(here->HFET2sourcePriHFET2ourcePrimePtr) += m * (gspr+gds+gm+ggs); } } return(OK); } static void hfeta2(HFET2model *model, HFET2instance *here, CKTcircuit *ckt, double vgs, double vds, double *cdrain, double *gm, double *gds, double *capgs, double *capgd) { double vt; double vgt; double vgt0; double sigma; double vgte; double isat; double isatm; double ns; double nsm; double a; double b; double c; double d; double e; double g; double h; double p; double q; double s; double t; double u; double nsc = 0.0; double nsn = 0.0; double temp; double etavth; double gch; double gchi; double gchim; double vsate; double vdse; double cg1; double cgc; double rt; double vl; double delidgch; double delgchgchi; double delgchins; double delnsnsm; double delnsmvgt; double delvgtevgt; double delidvsate; double delvsateisat; double delisatisatm; double delisatmvgte; double delisatmgchim; double delvsategch; double delidvds; double delvgtvgs; double delvsatevgt; NG_IGNORE(ckt); vt = CONSTKoverQ*TEMP; etavth = ETA*vt; vl = VS/TMU*L; rt = RSI+RDI; vgt0 = vgs - TVTO; s = exp((vgt0-VSIGMAT)/VSIGMA); sigma = SIGMA0/(1+s); vgt = vgt0+sigma*vds; u = 0.5*vgt/vt-1; t = sqrt(DELTA2+u*u); vgte = vt*(2+u+t); b = exp(vgt/etavth); if(model->HFET2eta2Given && model->HFET2d2Given) { nsc = N02*exp((vgt+TVTO-VT2)/(ETA2*vt)); nsn = 2*N0*log(1+0.5*b); nsm = nsn*nsc/(nsn+nsc); } else { nsm = 2*N0*log(1+0.5*b); } if(nsm < 1.0e-38) { *cdrain = 0; *gm = 0.0; *gds = 0.0; *capgs = CF; *capgd = CF; return; } c = pow(nsm/TNMAX,GAMMA); q = pow(1+c,1.0/GAMMA); ns = nsm/q; gchi = GCHI0*ns; gch = gchi/(1+gchi*rt); gchim = GCHI0*nsm; h = sqrt(1+2*gchim*RSI + vgte*vgte/(vl*vl)); p = 1+gchim*RSI+h; isatm = gchim*vgte/p; g = pow(isatm/IMAX,GAMMA); isat = isatm/pow(1+g,1/GAMMA); vsate = isat/gch; d = pow(vds/vsate,M); e = pow(1+d,1.0/M); delidgch = vds*(1+TLAMBDA*vds)/e; *cdrain = gch*delidgch; delidvsate = (*cdrain)*d/vsate/(1+d); delidvds = gch*(1+2*TLAMBDA*vds)/e-(*cdrain)* pow(vds/vsate,M-1)/(vsate*(1+d)); a = 1+gchi*rt; delgchgchi = 1.0/(a*a); delgchins = GCHI0; delnsnsm = ns/nsm*(1-c/(1+c)); delvgtevgt = 0.5*(1+u/t); delnsmvgt = N0/etavth/(1.0/b + 0.5); if(model->HFET2eta2Given && model->HFET2d2Given) delnsmvgt = nsc*(nsc*delnsmvgt+nsn*nsn/(ETA2*vt))/((nsc+nsn)*(nsc+nsn)); delvsateisat = 1.0/gch; delisatisatm = isat/isatm*(1-g/(1+g)); delisatmvgte = gchim*(p - vgte*vgte/(vl*vl*h))/(p*p); delvsategch = -vsate/gch; delisatmgchim = vgte*(p - gchim*RSI*(1+1.0/h))/(p*p); delvgtvgs = 1-vds*SIGMA0/VSIGMA*s/((1+s)*(1+s)); p = delgchgchi*delgchins*delnsnsm*delnsmvgt; delvsatevgt = (delvsateisat*delisatisatm*(delisatmvgte*delvgtevgt + delisatmgchim*GCHI0*delnsmvgt)+delvsategch*p); g = delidgch*p + delidvsate*delvsatevgt; *gm = g*delvgtvgs; *gds = delidvds + g*sigma; /* Capacitance calculations */ temp = ETA1*vt; cg1 = 1/(D1/EPSI+temp*exp(-(vgs-HFET2_VT1)/temp)); cgc = W*L*(CHARGE*delnsnsm*delnsmvgt*delvgtvgs+cg1); vdse = vds*pow(1+pow(vds/vsate,MC),-1.0/MC); a = (vsate-vdse)/(2*vsate-vdse); a = a*a; temp = 2.0/3.0; p = PP + (1-PP)*exp(-vds/vsate); *capgs = CF+2*temp*cgc*(1-a)/(1+p); a = vsate/(2*vsate-vdse); a = a*a; *capgd = CF+2*p*temp*cgc*(1-a)/(1+p); } tmpk8ny_4pz/src/spicelib/devices/hfet2/hfet2pzl.c0000644000175000017500000000606513546075722022104 0ustar carstencarsten/********** Author: 2003 Paolo Nenzi **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "hfet2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HFET2pzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { HFET2model *model = (HFET2model*)inModel; HFET2instance *here; double gdpr; double gspr; double gm; double gds; double ggs; double xgs; double ggd; double xgd; double m; for( ; model != NULL; model = HFET2nextModel(model)) { for( here = HFET2instances(model); here != NULL; here = HFET2nextInstance(here)) { m = here->HFET2m; gdpr=model->HFET2drainConduct; gspr=model->HFET2sourceConduct; gm= *(ckt->CKTstate0 + here->HFET2gm) ; gds= *(ckt->CKTstate0 + here->HFET2gds) ; ggs= *(ckt->CKTstate0 + here->HFET2ggs) ; xgs= *(ckt->CKTstate0 + here->HFET2qgs) ; ggd= *(ckt->CKTstate0 + here->HFET2ggd) ; xgd= *(ckt->CKTstate0 + here->HFET2qgd) ; *(here->HFET2drainDrainPtr ) += m * (gdpr); *(here->HFET2gateGatePtr ) += m * (ggd+ggs); *(here->HFET2gateGatePtr) += m * ((xgd+xgs) * s->real); *(here->HFET2gateGatePtr +1) += m * ((xgd+xgs) * s->imag); *(here->HFET2sourceSourcePtr ) += m * (gspr); *(here->HFET2drainPrimeDrainPrimePtr ) += m * (gdpr+gds+ggd); *(here->HFET2drainPrimeDrainPrimePtr) += m * (xgd * s->real); *(here->HFET2drainPrimeDrainPrimePtr +1) += m * (xgd * s->imag); *(here->HFET2sourcePriHFET2ourcePrimePtr ) += m * (gspr+gds+gm+ggs); *(here->HFET2sourcePriHFET2ourcePrimePtr) += m * (xgs * s->real); *(here->HFET2sourcePriHFET2ourcePrimePtr +1) += m * (xgs * s->imag); *(here->HFET2drainDrainPrimePtr ) -= m * (gdpr); *(here->HFET2gateDrainPrimePtr ) -= m * (ggd); *(here->HFET2gateDrainPrimePtr) -= m * (xgd * s->real); *(here->HFET2gateDrainPrimePtr +1) -= m * (xgd * s->imag); *(here->HFET2gateSourcePrimePtr ) -= m * (ggs); *(here->HFET2gateSourcePrimePtr) -= m * (xgs * s->real); *(here->HFET2gateSourcePrimePtr +1) -= m * (xgs * s->imag); *(here->HFET2sourceSourcePrimePtr ) -= m * (gspr); *(here->HFET2drainPrimeDrainPtr ) -= m * (gdpr); *(here->HFET2drainPrimeGatePtr ) += m * (-ggd+gm); *(here->HFET2drainPrimeGatePtr) -= m * (xgd * s->real); *(here->HFET2drainPrimeGatePtr +1) -= m * (xgd * s->imag); *(here->HFET2drainPriHFET2ourcePrimePtr ) += m * (-gds-gm); *(here->HFET2sourcePrimeGatePtr ) += m * (-ggs-gm); *(here->HFET2sourcePrimeGatePtr) -= m * (xgs * s->real); *(here->HFET2sourcePrimeGatePtr +1) -= m * (xgs * s->imag); *(here->HFET2sourcePriHFET2ourcePtr ) -= m * (gspr); *(here->HFET2sourcePrimeDrainPrimePtr ) -= m * (gds); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v6/0000755000175000017500000000000013546075722020455 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/bsim4v6/b4v6ld.c0000644000175000017500000071633413546075722021740 0ustar carstencarsten/**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008****/ /**** BSIM4.6.5 Update ngspice 09/22/2009 ****/ /**** OpenMP support ngspice 06/28/2010 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4ld.c of BSIM4.6.2. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Authors: 2008- Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. * Modified by Mohan Dunga, 12/13/2006. * Modified by Mohan Dunga, Wenwei Yang, 05/18/2007. * Modified by Wenwei Yang, 07/31/2008. **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4v6def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" /* #define MAX_EXP 2.688117142e+43 #define MIN_EXP 3.720075976e-44 #define EXP_THRESHOLD 100.0 */ #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define EPS0 8.85418e-12 #define EPSSI 1.03594e-10 #define Charge_q 1.60219e-19 #define DELTA_1 0.02 #define DELTA_2 0.02 #define DELTA_3 0.02 #define DELTA_4 0.02 #define MM 3 /* smooth coeff */ #define DEXP(A,B,C) { \ if (A > EXP_THRESHOLD) { \ B = MAX_EXP*(1.0+(A)-EXP_THRESHOLD); \ C = MAX_EXP; \ } else if (A < -EXP_THRESHOLD) { \ B = MIN_EXP; \ C = 0; \ } else { \ B = exp(A); \ C = B; \ } \ } #ifdef USE_OMP int BSIM4v6LoadOMP(BSIM4v6instance *here, CKTcircuit *ckt); void BSIM4v6LoadRhsMat(GENmodel *inModel, CKTcircuit *ckt); #endif int BSIM4v6polyDepletion(double phi, double ngate,double epsgate, double coxe, double Vgs, double *Vgs_eff, double *dVgs_eff_dVg); int BSIM4v6load( GENmodel *inModel, CKTcircuit *ckt) { #ifdef USE_OMP int idx; BSIM4v6model *model = (BSIM4v6model*)inModel; int error = 0; BSIM4v6instance **InstArray; InstArray = model->BSIM4v6InstanceArray; #pragma omp parallel for for (idx = 0; idx < model->BSIM4v6InstCount; idx++) { BSIM4v6instance *here = InstArray[idx]; int local_error = BSIM4v6LoadOMP(here, ckt); if (local_error) error = local_error; } BSIM4v6LoadRhsMat(inModel, ckt); return error; } int BSIM4v6LoadOMP(BSIM4v6instance *here, CKTcircuit *ckt) { BSIM4v6model *model = BSIM4v6modPtr(here); #else BSIM4v6model *model = (BSIM4v6model*)inModel; BSIM4v6instance *here; #endif double ceqgstot, dgstot_dvd, dgstot_dvg, dgstot_dvs, dgstot_dvb; double ceqgdtot, dgdtot_dvd, dgdtot_dvg, dgdtot_dvs, dgdtot_dvb; double gstot, gstotd, gstotg, gstots, gstotb, gspr, Rs, Rd; double gdtot, gdtotd, gdtotg, gdtots, gdtotb, gdpr; double vgs_eff, vgd_eff, dvgs_eff_dvg, dvgd_eff_dvg; double dRs_dvg, dRd_dvg, dRs_dvb, dRd_dvb; double dT0_dvg, dT1_dvb, dT3_dvg, dT3_dvb; double vses, vdes, vdedo, delvses, delvded, delvdes; double Isestot=0.0, cseshat=0.0, Idedtot=0.0, cdedhat=0.0; #ifndef NEWCONV double tol0, tol1, tol2, tol3, tol4, tol5, tol6; #endif double geltd, gcrg, gcrgg, gcrgd, gcrgs, gcrgb, ceqgcrg; double vges, vgms, vgedo, vgmdo, vged, vgmd, delvged, delvgmd; double delvges, delvgms, vgmb; double gcgmgmb=0.0, gcgmdb=0.0, gcgmsb=0.0, gcdgmb, gcsgmb; double gcgmbb=0.0, gcbgmb, qgmb, qgmid=0.0, ceqqgmid; double vbd, vbs, vds, vgb, vgd, vgs, vgdo; #ifndef PREDICTOR double xfact; #endif double vdbs, vdbd, vsbs, vsbdo, vsbd; double delvdbs, delvdbd, delvsbs; double delvbd_jct, delvbs_jct, vbs_jct, vbd_jct; double SourceSatCurrent, DrainSatCurrent; double ag0, qgb, von, cbhat=0.0, VgstNVt, ExpVgst; double ceqqb, ceqqd, ceqqg, ceqqjd=0.0, ceqqjs=0.0, ceq, geq; double cdrain, cdhat=0.0, ceqdrn, ceqbd, ceqbs, ceqjd, ceqjs, gjbd, gjbs; double czbd, czbdsw, czbdswg, czbs, czbssw, czbsswg, evbd, evbs, arg, sarg; double delvbd, delvbs, delvds, delvgd, delvgs; double Vfbeff, dVfbeff_dVg, dVfbeff_dVb, V3, V4; double gcbdb, gcbgb, gcbsb, gcddb, gcdgb, gcdsb, gcgdb, gcggb, gcgsb, gcsdb; double gcgbb, gcdbb, gcsbb, gcbbb; double gcdbdb, gcsbsb; double gcsgb, gcssb, MJD, MJSWD, MJSWGD, MJS, MJSWS, MJSWGS; double qgate=0.0, qbulk=0.0, qdrn=0.0, qsrc, cqgate, cqbody, cqdrn; double Vdb, Vds, Vgs, Vbs, Gmbs, FwdSum, RevSum; double Igidl, Ggidld, Ggidlg, Ggidlb; double Voxacc=0.0, dVoxacc_dVg=0.0, dVoxacc_dVb=0.0; double Voxdepinv=0.0, dVoxdepinv_dVg=0.0, dVoxdepinv_dVd=0.0, dVoxdepinv_dVb=0.0; double VxNVt=0.0, ExpVxNVt, Vaux=0.0, dVaux_dVg=0.0, dVaux_dVd=0.0, dVaux_dVb=0.0; double Igc, dIgc_dVg, dIgc_dVd, dIgc_dVb; double Igcs, dIgcs_dVg, dIgcs_dVd, dIgcs_dVb; double Igcd, dIgcd_dVg, dIgcd_dVd, dIgcd_dVb; double Igs, dIgs_dVg, dIgs_dVs, Igd, dIgd_dVg, dIgd_dVd; double Igbacc, dIgbacc_dVg, dIgbacc_dVb; double Igbinv, dIgbinv_dVg, dIgbinv_dVd, dIgbinv_dVb; double Pigcd, dPigcd_dVg, dPigcd_dVd, dPigcd_dVb; double Istoteq, gIstotg, gIstotd, gIstots, gIstotb; double Idtoteq, gIdtotg, gIdtotd, gIdtots, gIdtotb; double Ibtoteq, gIbtotg, gIbtotd, gIbtots, gIbtotb; double Igtoteq, gIgtotg, gIgtotd, gIgtots, gIgtotb; double Igstot=0.0, cgshat=0.0, Igdtot=0.0, cgdhat=0.0, Igbtot=0.0, cgbhat=0.0; double Vgs_eff, Vfb=0.0, Vth_NarrowW; double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth, dVth_dVb, dVth_dVd; double Vgst, dVgst_dVg, dVgst_dVb, dVgs_eff_dVg, Nvtms, Nvtmd; double Vtm, Vtm0; double n, dn_dVb, dn_dVd, voffcv, noff, dnoff_dVd, dnoff_dVb; double V0, CoxWLcen, QovCox, LINK; double DeltaPhi, dDeltaPhi_dVg, VgDP, dVgDP_dVg; double Cox, Tox, Tcen, dTcen_dVg, dTcen_dVd, dTcen_dVb; double Ccen, Coxeff, dCoxeff_dVd, dCoxeff_dVg, dCoxeff_dVb; double Denomi, dDenomi_dVg, dDenomi_dVd, dDenomi_dVb; double ueff, dueff_dVg, dueff_dVd, dueff_dVb; double Esat, Vdsat; double EsatL, dEsatL_dVg, dEsatL_dVd, dEsatL_dVb; double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, Vasat, dAlphaz_dVg, dAlphaz_dVb; double dVasat_dVg, dVasat_dVb, dVasat_dVd, Va, dVa_dVd, dVa_dVg, dVa_dVb; double Vbseff, dVbseff_dVb, VbseffCV, dVbseffCV_dVb; double VgsteffVth, dT11_dVg; double Arg1, One_Third_CoxWL, Two_Third_CoxWL, Alphaz, CoxWL; double T0=0.0, dT0_dVg, dT0_dVd, dT0_dVb; double T1, dT1_dVg, dT1_dVd, dT1_dVb; double T2, dT2_dVg, dT2_dVd, dT2_dVb; double T3, dT3_dVg, dT3_dVd, dT3_dVb; double T4, dT4_dVd, dT4_dVb; double T5, dT5_dVg, dT5_dVd, dT5_dVb; double T6, dT6_dVg, dT6_dVd, dT6_dVb; double T7, dT7_dVg, dT7_dVd, dT7_dVb; double T8, dT8_dVg, dT8_dVd, dT8_dVb; double T9, dT9_dVg, dT9_dVd, dT9_dVb; double T10, dT10_dVg, dT10_dVb, dT10_dVd; double T11, T12, T13, T14; double tmp, Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVb; double Cclm, dCclm_dVg, dCclm_dVd, dCclm_dVb; double FP, dFP_dVg, PvagTerm, dPvagTerm_dVg, dPvagTerm_dVd, dPvagTerm_dVb; double VADITS, dVADITS_dVg, dVADITS_dVd; double Lpe_Vb, dDITS_Sft_dVb, dDITS_Sft_dVd; double VACLM, dVACLM_dVg, dVACLM_dVd, dVACLM_dVb; double VADIBL, dVADIBL_dVg, dVADIBL_dVd, dVADIBL_dVb; double Xdep, dXdep_dVb, lt1, dlt1_dVb, ltw, dltw_dVb, Delt_vth, dDelt_vth_dVb; double Theta0, dTheta0_dVb; double TempRatio, tmp1, tmp2, tmp3, tmp4; double DIBL_Sft, dDIBL_Sft_dVd, Lambda, dLambda_dVg; double Idtot, Ibtot, a1, ScalingFactor; double Vgsteff, dVgsteff_dVg, dVgsteff_dVd, dVgsteff_dVb; double Vdseff, dVdseff_dVg, dVdseff_dVd, dVdseff_dVb; double VdseffCV, dVdseffCV_dVg, dVdseffCV_dVd, dVdseffCV_dVb; double diffVds, dAbulk_dVg; double beta, dbeta_dVg, dbeta_dVd, dbeta_dVb; double gche, dgche_dVg, dgche_dVd, dgche_dVb; double fgche1, dfgche1_dVg, dfgche1_dVd, dfgche1_dVb; double fgche2, dfgche2_dVg, dfgche2_dVd, dfgche2_dVb; double Idl, dIdl_dVg, dIdl_dVd, dIdl_dVb; double Idsa, dIdsa_dVg, dIdsa_dVd, dIdsa_dVb; double Ids, Gm, Gds, Gmb, devbs_dvb, devbd_dvb; double Isub, Gbd, Gbg, Gbb; double VASCBE, dVASCBE_dVg, dVASCBE_dVd, dVASCBE_dVb; double CoxeffWovL; double Rds, dRds_dVg, dRds_dVb, WVCox, WVCoxRds; double Vgst2Vtm, VdsatCV; double Leff, Weff, dWeff_dVg, dWeff_dVb; double AbulkCV, dAbulkCV_dVb; double qcheq, qdef, gqdef=0.0, cqdef=0.0, cqcheq=0.0; double gcqdb=0.0, gcqsb=0.0, gcqgb=0.0, gcqbb=0.0; double dxpart, sxpart, ggtg, ggtd, ggts, ggtb; double ddxpart_dVd, ddxpart_dVg, ddxpart_dVb, ddxpart_dVs; double dsxpart_dVd, dsxpart_dVg, dsxpart_dVb, dsxpart_dVs; double gbspsp, gbbdp, gbbsp, gbspg, gbspb, gbspdp; double gbdpdp, gbdpg, gbdpb, gbdpsp; double qgdo, qgso, cgdo, cgso; double Cgg, Cgd, Cgb, Cdg, Cdd, Cds; double Csg, Csd, Css, Csb, Cbg, Cbd, Cbb; double Cgg1, Cgb1, Cgd1, Cbg1, Cbb1, Cbd1, Qac0, Qsub0; double dQac0_dVg, dQac0_dVb, dQsub0_dVg, dQsub0_dVd, dQsub0_dVb; double ggidld, ggidlg, ggidlb, ggislg, ggislb, ggisls; double Igisl, Ggislg, Ggislb, Ggisls; double Nvtmrss, Nvtmrssws, Nvtmrsswgs; double Nvtmrsd, Nvtmrsswd, Nvtmrsswgd; double vs, Fsevl, dvs_dVg, dvs_dVd, dvs_dVb, dFsevl_dVg, dFsevl_dVd, dFsevl_dVb; double vgdx, vgsx, epssub, toxe, epsrox; struct bsim4v6SizeDependParam *pParam; int ByPass, ChargeComputationNeeded, error, Check, Check1, Check2; double m; ScalingFactor = 1.0e-9; ChargeComputationNeeded = ((ckt->CKTmode & (MODEAC | MODETRAN | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) ? 1 : 0; #ifndef USE_OMP for (; model != NULL; model = BSIM4v6nextModel(model)) { for (here = BSIM4v6instances(model); here != NULL; here = BSIM4v6nextInstance(here)) { #endif Check = Check1 = Check2 = 1; ByPass = 0; pParam = here->pParam; if ((ckt->CKTmode & MODEINITSMSIG)) { vds = *(ckt->CKTstate0 + here->BSIM4v6vds); vgs = *(ckt->CKTstate0 + here->BSIM4v6vgs); vbs = *(ckt->CKTstate0 + here->BSIM4v6vbs); vges = *(ckt->CKTstate0 + here->BSIM4v6vges); vgms = *(ckt->CKTstate0 + here->BSIM4v6vgms); vdbs = *(ckt->CKTstate0 + here->BSIM4v6vdbs); vsbs = *(ckt->CKTstate0 + here->BSIM4v6vsbs); vses = *(ckt->CKTstate0 + here->BSIM4v6vses); vdes = *(ckt->CKTstate0 + here->BSIM4v6vdes); qdef = *(ckt->CKTstate0 + here->BSIM4v6qdef); } else if ((ckt->CKTmode & MODEINITTRAN)) { vds = *(ckt->CKTstate1 + here->BSIM4v6vds); vgs = *(ckt->CKTstate1 + here->BSIM4v6vgs); vbs = *(ckt->CKTstate1 + here->BSIM4v6vbs); vges = *(ckt->CKTstate1 + here->BSIM4v6vges); vgms = *(ckt->CKTstate1 + here->BSIM4v6vgms); vdbs = *(ckt->CKTstate1 + here->BSIM4v6vdbs); vsbs = *(ckt->CKTstate1 + here->BSIM4v6vsbs); vses = *(ckt->CKTstate1 + here->BSIM4v6vses); vdes = *(ckt->CKTstate1 + here->BSIM4v6vdes); qdef = *(ckt->CKTstate1 + here->BSIM4v6qdef); } else if ((ckt->CKTmode & MODEINITJCT) && !here->BSIM4v6off) { vds = model->BSIM4v6type * here->BSIM4v6icVDS; vgs = vges = vgms = model->BSIM4v6type * here->BSIM4v6icVGS; vbs = vdbs = vsbs = model->BSIM4v6type * here->BSIM4v6icVBS; if (vds > 0.0) { vdes = vds + 0.01; vses = -0.01; } else if (vds < 0.0) { vdes = vds - 0.01; vses = 0.01; } else vdes = vses = 0.0; qdef = 0.0; if ((vds == 0.0) && (vgs == 0.0) && (vbs == 0.0) && ((ckt->CKTmode & (MODETRAN | MODEAC|MODEDCOP | MODEDCTRANCURVE)) || (!(ckt->CKTmode & MODEUIC)))) { vds = 0.1; vdes = 0.11; vses = -0.01; vgs = vges = vgms = model->BSIM4v6type * here->BSIM4v6vth0 + 0.1; vbs = vdbs = vsbs = 0.0; } } else if ((ckt->CKTmode & (MODEINITJCT | MODEINITFIX)) && (here->BSIM4v6off)) { vds = vgs = vbs = vges = vgms = 0.0; vdbs = vsbs = vdes = vses = qdef = 0.0; } else { #ifndef PREDICTOR if ((ckt->CKTmode & MODEINITPRED)) { xfact = ckt->CKTdelta / ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->BSIM4v6vds) = *(ckt->CKTstate1 + here->BSIM4v6vds); vds = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v6vds)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v6vds))); *(ckt->CKTstate0 + here->BSIM4v6vgs) = *(ckt->CKTstate1 + here->BSIM4v6vgs); vgs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v6vgs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v6vgs))); *(ckt->CKTstate0 + here->BSIM4v6vges) = *(ckt->CKTstate1 + here->BSIM4v6vges); vges = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v6vges)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v6vges))); *(ckt->CKTstate0 + here->BSIM4v6vgms) = *(ckt->CKTstate1 + here->BSIM4v6vgms); vgms = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v6vgms)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v6vgms))); *(ckt->CKTstate0 + here->BSIM4v6vbs) = *(ckt->CKTstate1 + here->BSIM4v6vbs); vbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v6vbs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v6vbs))); *(ckt->CKTstate0 + here->BSIM4v6vbd) = *(ckt->CKTstate0 + here->BSIM4v6vbs) - *(ckt->CKTstate0 + here->BSIM4v6vds); *(ckt->CKTstate0 + here->BSIM4v6vdbs) = *(ckt->CKTstate1 + here->BSIM4v6vdbs); vdbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v6vdbs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v6vdbs))); *(ckt->CKTstate0 + here->BSIM4v6vdbd) = *(ckt->CKTstate0 + here->BSIM4v6vdbs) - *(ckt->CKTstate0 + here->BSIM4v6vds); *(ckt->CKTstate0 + here->BSIM4v6vsbs) = *(ckt->CKTstate1 + here->BSIM4v6vsbs); vsbs = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v6vsbs)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v6vsbs))); *(ckt->CKTstate0 + here->BSIM4v6vses) = *(ckt->CKTstate1 + here->BSIM4v6vses); vses = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v6vses)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v6vses))); *(ckt->CKTstate0 + here->BSIM4v6vdes) = *(ckt->CKTstate1 + here->BSIM4v6vdes); vdes = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v6vdes)) - (xfact * (*(ckt->CKTstate2 + here->BSIM4v6vdes))); *(ckt->CKTstate0 + here->BSIM4v6qdef) = *(ckt->CKTstate1 + here->BSIM4v6qdef); qdef = (1.0 + xfact)* (*(ckt->CKTstate1 + here->BSIM4v6qdef)) -(xfact * (*(ckt->CKTstate2 + here->BSIM4v6qdef))); } else { #endif /* PREDICTOR */ vds = model->BSIM4v6type * (*(ckt->CKTrhsOld + here->BSIM4v6dNodePrime) - *(ckt->CKTrhsOld + here->BSIM4v6sNodePrime)); vgs = model->BSIM4v6type * (*(ckt->CKTrhsOld + here->BSIM4v6gNodePrime) - *(ckt->CKTrhsOld + here->BSIM4v6sNodePrime)); vbs = model->BSIM4v6type * (*(ckt->CKTrhsOld + here->BSIM4v6bNodePrime) - *(ckt->CKTrhsOld + here->BSIM4v6sNodePrime)); vges = model->BSIM4v6type * (*(ckt->CKTrhsOld + here->BSIM4v6gNodeExt) - *(ckt->CKTrhsOld + here->BSIM4v6sNodePrime)); vgms = model->BSIM4v6type * (*(ckt->CKTrhsOld + here->BSIM4v6gNodeMid) - *(ckt->CKTrhsOld + here->BSIM4v6sNodePrime)); vdbs = model->BSIM4v6type * (*(ckt->CKTrhsOld + here->BSIM4v6dbNode) - *(ckt->CKTrhsOld + here->BSIM4v6sNodePrime)); vsbs = model->BSIM4v6type * (*(ckt->CKTrhsOld + here->BSIM4v6sbNode) - *(ckt->CKTrhsOld + here->BSIM4v6sNodePrime)); vses = model->BSIM4v6type * (*(ckt->CKTrhsOld + here->BSIM4v6sNode) - *(ckt->CKTrhsOld + here->BSIM4v6sNodePrime)); vdes = model->BSIM4v6type * (*(ckt->CKTrhsOld + here->BSIM4v6dNode) - *(ckt->CKTrhsOld + here->BSIM4v6sNodePrime)); qdef = model->BSIM4v6type * (*(ckt->CKTrhsOld + here->BSIM4v6qNode)); #ifndef PREDICTOR } #endif /* PREDICTOR */ vgdo = *(ckt->CKTstate0 + here->BSIM4v6vgs) - *(ckt->CKTstate0 + here->BSIM4v6vds); vgedo = *(ckt->CKTstate0 + here->BSIM4v6vges) - *(ckt->CKTstate0 + here->BSIM4v6vds); vgmdo = *(ckt->CKTstate0 + here->BSIM4v6vgms) - *(ckt->CKTstate0 + here->BSIM4v6vds); vbd = vbs - vds; vdbd = vdbs - vds; vgd = vgs - vds; vged = vges - vds; vgmd = vgms - vds; delvbd = vbd - *(ckt->CKTstate0 + here->BSIM4v6vbd); delvdbd = vdbd - *(ckt->CKTstate0 + here->BSIM4v6vdbd); delvgd = vgd - vgdo; delvged = vged - vgedo; delvgmd = vgmd - vgmdo; delvds = vds - *(ckt->CKTstate0 + here->BSIM4v6vds); delvgs = vgs - *(ckt->CKTstate0 + here->BSIM4v6vgs); delvges = vges - *(ckt->CKTstate0 + here->BSIM4v6vges); delvgms = vgms - *(ckt->CKTstate0 + here->BSIM4v6vgms); delvbs = vbs - *(ckt->CKTstate0 + here->BSIM4v6vbs); delvdbs = vdbs - *(ckt->CKTstate0 + here->BSIM4v6vdbs); delvsbs = vsbs - *(ckt->CKTstate0 + here->BSIM4v6vsbs); delvses = vses - (*(ckt->CKTstate0 + here->BSIM4v6vses)); vdedo = *(ckt->CKTstate0 + here->BSIM4v6vdes) - *(ckt->CKTstate0 + here->BSIM4v6vds); delvdes = vdes - *(ckt->CKTstate0 + here->BSIM4v6vdes); delvded = vdes - vds - vdedo; delvbd_jct = (!here->BSIM4v6rbodyMod) ? delvbd : delvdbd; delvbs_jct = (!here->BSIM4v6rbodyMod) ? delvbs : delvsbs; if (here->BSIM4v6mode >= 0) { Idtot = here->BSIM4v6cd + here->BSIM4v6csub - here->BSIM4v6cbd + here->BSIM4v6Igidl; cdhat = Idtot - here->BSIM4v6gbd * delvbd_jct + (here->BSIM4v6gmbs + here->BSIM4v6gbbs + here->BSIM4v6ggidlb) * delvbs + (here->BSIM4v6gm + here->BSIM4v6gbgs + here->BSIM4v6ggidlg) * delvgs + (here->BSIM4v6gds + here->BSIM4v6gbds + here->BSIM4v6ggidld) * delvds; Ibtot = here->BSIM4v6cbs + here->BSIM4v6cbd - here->BSIM4v6Igidl - here->BSIM4v6Igisl - here->BSIM4v6csub; cbhat = Ibtot + here->BSIM4v6gbd * delvbd_jct + here->BSIM4v6gbs * delvbs_jct - (here->BSIM4v6gbbs + here->BSIM4v6ggidlb) * delvbs - (here->BSIM4v6gbgs + here->BSIM4v6ggidlg) * delvgs - (here->BSIM4v6gbds + here->BSIM4v6ggidld - here->BSIM4v6ggisls) * delvds - here->BSIM4v6ggislg * delvgd - here->BSIM4v6ggislb* delvbd; Igstot = here->BSIM4v6Igs + here->BSIM4v6Igcs; cgshat = Igstot + (here->BSIM4v6gIgsg + here->BSIM4v6gIgcsg) * delvgs + here->BSIM4v6gIgcsd * delvds + here->BSIM4v6gIgcsb * delvbs; Igdtot = here->BSIM4v6Igd + here->BSIM4v6Igcd; cgdhat = Igdtot + here->BSIM4v6gIgdg * delvgd + here->BSIM4v6gIgcdg * delvgs + here->BSIM4v6gIgcdd * delvds + here->BSIM4v6gIgcdb * delvbs; Igbtot = here->BSIM4v6Igb; cgbhat = here->BSIM4v6Igb + here->BSIM4v6gIgbg * delvgs + here->BSIM4v6gIgbd * delvds + here->BSIM4v6gIgbb * delvbs; } else { Idtot = here->BSIM4v6cd + here->BSIM4v6cbd - here->BSIM4v6Igidl; /* bugfix */ cdhat = Idtot + here->BSIM4v6gbd * delvbd_jct + here->BSIM4v6gmbs * delvbd + here->BSIM4v6gm * delvgd - (here->BSIM4v6gds + here->BSIM4v6ggidls) * delvds - here->BSIM4v6ggidlg * delvgs - here->BSIM4v6ggidlb * delvbs; Ibtot = here->BSIM4v6cbs + here->BSIM4v6cbd - here->BSIM4v6Igidl - here->BSIM4v6Igisl - here->BSIM4v6csub; cbhat = Ibtot + here->BSIM4v6gbs * delvbs_jct + here->BSIM4v6gbd * delvbd_jct - (here->BSIM4v6gbbs + here->BSIM4v6ggislb) * delvbd - (here->BSIM4v6gbgs + here->BSIM4v6ggislg) * delvgd + (here->BSIM4v6gbds + here->BSIM4v6ggisld - here->BSIM4v6ggidls) * delvds - here->BSIM4v6ggidlg * delvgs - here->BSIM4v6ggidlb * delvbs; Igstot = here->BSIM4v6Igs + here->BSIM4v6Igcd; cgshat = Igstot + here->BSIM4v6gIgsg * delvgs + here->BSIM4v6gIgcdg * delvgd - here->BSIM4v6gIgcdd * delvds + here->BSIM4v6gIgcdb * delvbd; Igdtot = here->BSIM4v6Igd + here->BSIM4v6Igcs; cgdhat = Igdtot + (here->BSIM4v6gIgdg + here->BSIM4v6gIgcsg) * delvgd - here->BSIM4v6gIgcsd * delvds + here->BSIM4v6gIgcsb * delvbd; Igbtot = here->BSIM4v6Igb; cgbhat = here->BSIM4v6Igb + here->BSIM4v6gIgbg * delvgd - here->BSIM4v6gIgbd * delvds + here->BSIM4v6gIgbb * delvbd; } Isestot = here->BSIM4v6gstot * (*(ckt->CKTstate0 + here->BSIM4v6vses)); cseshat = Isestot + here->BSIM4v6gstot * delvses + here->BSIM4v6gstotd * delvds + here->BSIM4v6gstotg * delvgs + here->BSIM4v6gstotb * delvbs; Idedtot = here->BSIM4v6gdtot * vdedo; cdedhat = Idedtot + here->BSIM4v6gdtot * delvded + here->BSIM4v6gdtotd * delvds + here->BSIM4v6gdtotg * delvgs + here->BSIM4v6gdtotb * delvbs; #ifndef NOBYPASS /* Following should be one IF statement, but some C compilers * can't handle that all at once, so we split it into several * successive IF's */ if ((!(ckt->CKTmode & MODEINITPRED)) && (ckt->CKTbypass)) if ((fabs(delvds) < (ckt->CKTreltol * MAX(fabs(vds), fabs(*(ckt->CKTstate0 + here->BSIM4v6vds))) + ckt->CKTvoltTol))) if ((fabs(delvgs) < (ckt->CKTreltol * MAX(fabs(vgs), fabs(*(ckt->CKTstate0 + here->BSIM4v6vgs))) + ckt->CKTvoltTol))) if ((fabs(delvbs) < (ckt->CKTreltol * MAX(fabs(vbs), fabs(*(ckt->CKTstate0 + here->BSIM4v6vbs))) + ckt->CKTvoltTol))) if ((fabs(delvbd) < (ckt->CKTreltol * MAX(fabs(vbd), fabs(*(ckt->CKTstate0 + here->BSIM4v6vbd))) + ckt->CKTvoltTol))) if ((here->BSIM4v6rgateMod == 0) || (here->BSIM4v6rgateMod == 1) || (fabs(delvges) < (ckt->CKTreltol * MAX(fabs(vges), fabs(*(ckt->CKTstate0 + here->BSIM4v6vges))) + ckt->CKTvoltTol))) if ((here->BSIM4v6rgateMod != 3) || (fabs(delvgms) < (ckt->CKTreltol * MAX(fabs(vgms), fabs(*(ckt->CKTstate0 + here->BSIM4v6vgms))) + ckt->CKTvoltTol))) if ((!here->BSIM4v6rbodyMod) || (fabs(delvdbs) < (ckt->CKTreltol * MAX(fabs(vdbs), fabs(*(ckt->CKTstate0 + here->BSIM4v6vdbs))) + ckt->CKTvoltTol))) if ((!here->BSIM4v6rbodyMod) || (fabs(delvdbd) < (ckt->CKTreltol * MAX(fabs(vdbd), fabs(*(ckt->CKTstate0 + here->BSIM4v6vdbd))) + ckt->CKTvoltTol))) if ((!here->BSIM4v6rbodyMod) || (fabs(delvsbs) < (ckt->CKTreltol * MAX(fabs(vsbs), fabs(*(ckt->CKTstate0 + here->BSIM4v6vsbs))) + ckt->CKTvoltTol))) if ((!model->BSIM4v6rdsMod) || (fabs(delvses) < (ckt->CKTreltol * MAX(fabs(vses), fabs(*(ckt->CKTstate0 + here->BSIM4v6vses))) + ckt->CKTvoltTol))) if ((!model->BSIM4v6rdsMod) || (fabs(delvdes) < (ckt->CKTreltol * MAX(fabs(vdes), fabs(*(ckt->CKTstate0 + here->BSIM4v6vdes))) + ckt->CKTvoltTol))) if ((fabs(cdhat - Idtot) < ckt->CKTreltol * MAX(fabs(cdhat), fabs(Idtot)) + ckt->CKTabstol)) if ((fabs(cbhat - Ibtot) < ckt->CKTreltol * MAX(fabs(cbhat), fabs(Ibtot)) + ckt->CKTabstol)) if ((!model->BSIM4v6igcMod) || ((fabs(cgshat - Igstot) < ckt->CKTreltol * MAX(fabs(cgshat), fabs(Igstot)) + ckt->CKTabstol))) if ((!model->BSIM4v6igcMod) || ((fabs(cgdhat - Igdtot) < ckt->CKTreltol * MAX(fabs(cgdhat), fabs(Igdtot)) + ckt->CKTabstol))) if ((!model->BSIM4v6igbMod) || ((fabs(cgbhat - Igbtot) < ckt->CKTreltol * MAX(fabs(cgbhat), fabs(Igbtot)) + ckt->CKTabstol))) if ((!model->BSIM4v6rdsMod) || ((fabs(cseshat - Isestot) < ckt->CKTreltol * MAX(fabs(cseshat), fabs(Isestot)) + ckt->CKTabstol))) if ((!model->BSIM4v6rdsMod) || ((fabs(cdedhat - Idedtot) < ckt->CKTreltol * MAX(fabs(cdedhat), fabs(Idedtot)) + ckt->CKTabstol))) { vds = *(ckt->CKTstate0 + here->BSIM4v6vds); vgs = *(ckt->CKTstate0 + here->BSIM4v6vgs); vbs = *(ckt->CKTstate0 + here->BSIM4v6vbs); vges = *(ckt->CKTstate0 + here->BSIM4v6vges); vgms = *(ckt->CKTstate0 + here->BSIM4v6vgms); vbd = *(ckt->CKTstate0 + here->BSIM4v6vbd); vdbs = *(ckt->CKTstate0 + here->BSIM4v6vdbs); vdbd = *(ckt->CKTstate0 + here->BSIM4v6vdbd); vsbs = *(ckt->CKTstate0 + here->BSIM4v6vsbs); vses = *(ckt->CKTstate0 + here->BSIM4v6vses); vdes = *(ckt->CKTstate0 + here->BSIM4v6vdes); vgd = vgs - vds; vgb = vgs - vbs; vged = vges - vds; vgmd = vgms - vds; vgmb = vgms - vbs; vbs_jct = (!here->BSIM4v6rbodyMod) ? vbs : vsbs; vbd_jct = (!here->BSIM4v6rbodyMod) ? vbd : vdbd; /*** qdef should not be kept fixed even if vgs, vds & vbs has converged **** qdef = *(ckt->CKTstate0 + here->BSIM4v6qdef); ***/ cdrain = here->BSIM4v6cd; if ((ckt->CKTmode & (MODETRAN | MODEAC)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) { ByPass = 1; qgate = here->BSIM4v6qgate; qbulk = here->BSIM4v6qbulk; qdrn = here->BSIM4v6qdrn; cgdo = here->BSIM4v6cgdo; qgdo = here->BSIM4v6qgdo; cgso = here->BSIM4v6cgso; qgso = here->BSIM4v6qgso; goto line755; } else goto line850; } #endif /*NOBYPASS*/ von = here->BSIM4v6von; if (*(ckt->CKTstate0 + here->BSIM4v6vds) >= 0.0) { vgs = DEVfetlim(vgs, *(ckt->CKTstate0 + here->BSIM4v6vgs), von); vds = vgs - vgd; vds = DEVlimvds(vds, *(ckt->CKTstate0 + here->BSIM4v6vds)); vgd = vgs - vds; if (here->BSIM4v6rgateMod == 3) { vges = DEVfetlim(vges, *(ckt->CKTstate0 + here->BSIM4v6vges), von); vgms = DEVfetlim(vgms, *(ckt->CKTstate0 + here->BSIM4v6vgms), von); vged = vges - vds; vgmd = vgms - vds; } else if ((here->BSIM4v6rgateMod == 1) || (here->BSIM4v6rgateMod == 2)) { vges = DEVfetlim(vges, *(ckt->CKTstate0 + here->BSIM4v6vges), von); vged = vges - vds; } if (model->BSIM4v6rdsMod) { vdes = DEVlimvds(vdes, *(ckt->CKTstate0 + here->BSIM4v6vdes)); vses = -DEVlimvds(-vses, -(*(ckt->CKTstate0 + here->BSIM4v6vses))); } } else { vgd = DEVfetlim(vgd, vgdo, von); vds = vgs - vgd; vds = -DEVlimvds(-vds, -(*(ckt->CKTstate0 + here->BSIM4v6vds))); vgs = vgd + vds; if (here->BSIM4v6rgateMod == 3) { vged = DEVfetlim(vged, vgedo, von); vges = vged + vds; vgmd = DEVfetlim(vgmd, vgmdo, von); vgms = vgmd + vds; } if ((here->BSIM4v6rgateMod == 1) || (here->BSIM4v6rgateMod == 2)) { vged = DEVfetlim(vged, vgedo, von); vges = vged + vds; } if (model->BSIM4v6rdsMod) { vdes = -DEVlimvds(-vdes, -(*(ckt->CKTstate0 + here->BSIM4v6vdes))); vses = DEVlimvds(vses, *(ckt->CKTstate0 + here->BSIM4v6vses)); } } if (vds >= 0.0) { vbs = DEVpnjlim(vbs, *(ckt->CKTstate0 + here->BSIM4v6vbs), CONSTvt0, model->BSIM4v6vcrit, &Check); vbd = vbs - vds; if (here->BSIM4v6rbodyMod) { vdbs = DEVpnjlim(vdbs, *(ckt->CKTstate0 + here->BSIM4v6vdbs), CONSTvt0, model->BSIM4v6vcrit, &Check1); vdbd = vdbs - vds; vsbs = DEVpnjlim(vsbs, *(ckt->CKTstate0 + here->BSIM4v6vsbs), CONSTvt0, model->BSIM4v6vcrit, &Check2); if ((Check1 == 0) && (Check2 == 0)) Check = 0; else Check = 1; } } else { vbd = DEVpnjlim(vbd, *(ckt->CKTstate0 + here->BSIM4v6vbd), CONSTvt0, model->BSIM4v6vcrit, &Check); vbs = vbd + vds; if (here->BSIM4v6rbodyMod) { vdbd = DEVpnjlim(vdbd, *(ckt->CKTstate0 + here->BSIM4v6vdbd), CONSTvt0, model->BSIM4v6vcrit, &Check1); vdbs = vdbd + vds; vsbdo = *(ckt->CKTstate0 + here->BSIM4v6vsbs) - *(ckt->CKTstate0 + here->BSIM4v6vds); vsbd = vsbs - vds; vsbd = DEVpnjlim(vsbd, vsbdo, CONSTvt0, model->BSIM4v6vcrit, &Check2); vsbs = vsbd + vds; if ((Check1 == 0) && (Check2 == 0)) Check = 0; else Check = 1; } } } /* Calculate DC currents and their derivatives */ vbd = vbs - vds; vgd = vgs - vds; vgb = vgs - vbs; vged = vges - vds; vgmd = vgms - vds; vgmb = vgms - vbs; vdbd = vdbs - vds; vbs_jct = (!here->BSIM4v6rbodyMod) ? vbs : vsbs; vbd_jct = (!here->BSIM4v6rbodyMod) ? vbd : vdbd; /* Source/drain junction diode DC model begins */ Nvtms = model->BSIM4v6vtm * model->BSIM4v6SjctEmissionCoeff; if ((here->BSIM4v6Aseff <= 0.0) && (here->BSIM4v6Pseff <= 0.0)) { SourceSatCurrent = 0.0; } else { SourceSatCurrent = here->BSIM4v6Aseff * model->BSIM4v6SjctTempSatCurDensity + here->BSIM4v6Pseff * model->BSIM4v6SjctSidewallTempSatCurDensity + pParam->BSIM4v6weffCJ * here->BSIM4v6nf * model->BSIM4v6SjctGateSidewallTempSatCurDensity; } if (SourceSatCurrent <= 0.0) { here->BSIM4v6gbs = ckt->CKTgmin; here->BSIM4v6cbs = here->BSIM4v6gbs * vbs_jct; } else { switch(model->BSIM4v6dioMod) { case 0: evbs = exp(vbs_jct / Nvtms); T1 = model->BSIM4v6xjbvs * exp(-(model->BSIM4v6bvs + vbs_jct) / Nvtms); /* WDLiu: Magic T1 in this form; different from BSIM4v6 beta. */ here->BSIM4v6gbs = SourceSatCurrent * (evbs + T1) / Nvtms + ckt->CKTgmin; here->BSIM4v6cbs = SourceSatCurrent * (evbs + here->BSIM4v6XExpBVS - T1 - 1.0) + ckt->CKTgmin * vbs_jct; break; case 1: T2 = vbs_jct / Nvtms; if (T2 < -EXP_THRESHOLD) { here->BSIM4v6gbs = ckt->CKTgmin; here->BSIM4v6cbs = SourceSatCurrent * (MIN_EXP - 1.0) + ckt->CKTgmin * vbs_jct; } else if (vbs_jct <= here->BSIM4v6vjsmFwd) { evbs = exp(T2); here->BSIM4v6gbs = SourceSatCurrent * evbs / Nvtms + ckt->CKTgmin; here->BSIM4v6cbs = SourceSatCurrent * (evbs - 1.0) + ckt->CKTgmin * vbs_jct; } else { T0 = here->BSIM4v6IVjsmFwd / Nvtms; here->BSIM4v6gbs = T0 + ckt->CKTgmin; here->BSIM4v6cbs = here->BSIM4v6IVjsmFwd - SourceSatCurrent + T0 * (vbs_jct - here->BSIM4v6vjsmFwd) + ckt->CKTgmin * vbs_jct; } break; case 2: if (vbs_jct < here->BSIM4v6vjsmRev) { T0 = vbs_jct / Nvtms; if (T0 < -EXP_THRESHOLD) { evbs = MIN_EXP; devbs_dvb = 0.0; } else { evbs = exp(T0); devbs_dvb = evbs / Nvtms; } T1 = evbs - 1.0; T2 = here->BSIM4v6IVjsmRev + here->BSIM4v6SslpRev * (vbs_jct - here->BSIM4v6vjsmRev); here->BSIM4v6gbs = devbs_dvb * T2 + T1 * here->BSIM4v6SslpRev + ckt->CKTgmin; here->BSIM4v6cbs = T1 * T2 + ckt->CKTgmin * vbs_jct; } else if (vbs_jct <= here->BSIM4v6vjsmFwd) { T0 = vbs_jct / Nvtms; if (T0 < -EXP_THRESHOLD) { evbs = MIN_EXP; devbs_dvb = 0.0; } else { evbs = exp(T0); devbs_dvb = evbs / Nvtms; } T1 = (model->BSIM4v6bvs + vbs_jct) / Nvtms; if (T1 > EXP_THRESHOLD) { T2 = MIN_EXP; T3 = 0.0; } else { T2 = exp(-T1); T3 = -T2 /Nvtms; } here->BSIM4v6gbs = SourceSatCurrent * (devbs_dvb - model->BSIM4v6xjbvs * T3) + ckt->CKTgmin; here->BSIM4v6cbs = SourceSatCurrent * (evbs + here->BSIM4v6XExpBVS - 1.0 - model->BSIM4v6xjbvs * T2) + ckt->CKTgmin * vbs_jct; } else { here->BSIM4v6gbs = here->BSIM4v6SslpFwd + ckt->CKTgmin; here->BSIM4v6cbs = here->BSIM4v6IVjsmFwd + here->BSIM4v6SslpFwd * (vbs_jct - here->BSIM4v6vjsmFwd) + ckt->CKTgmin * vbs_jct; } break; default: break; } } Nvtmd = model->BSIM4v6vtm * model->BSIM4v6DjctEmissionCoeff; if ((here->BSIM4v6Adeff <= 0.0) && (here->BSIM4v6Pdeff <= 0.0)) { DrainSatCurrent = 0.0; } else { DrainSatCurrent = here->BSIM4v6Adeff * model->BSIM4v6DjctTempSatCurDensity + here->BSIM4v6Pdeff * model->BSIM4v6DjctSidewallTempSatCurDensity + pParam->BSIM4v6weffCJ * here->BSIM4v6nf * model->BSIM4v6DjctGateSidewallTempSatCurDensity; } if (DrainSatCurrent <= 0.0) { here->BSIM4v6gbd = ckt->CKTgmin; here->BSIM4v6cbd = here->BSIM4v6gbd * vbd_jct; } else { switch(model->BSIM4v6dioMod) { case 0: evbd = exp(vbd_jct / Nvtmd); T1 = model->BSIM4v6xjbvd * exp(-(model->BSIM4v6bvd + vbd_jct) / Nvtmd); /* WDLiu: Magic T1 in this form; different from BSIM4v6 beta. */ here->BSIM4v6gbd = DrainSatCurrent * (evbd + T1) / Nvtmd + ckt->CKTgmin; here->BSIM4v6cbd = DrainSatCurrent * (evbd + here->BSIM4v6XExpBVD - T1 - 1.0) + ckt->CKTgmin * vbd_jct; break; case 1: T2 = vbd_jct / Nvtmd; if (T2 < -EXP_THRESHOLD) { here->BSIM4v6gbd = ckt->CKTgmin; here->BSIM4v6cbd = DrainSatCurrent * (MIN_EXP - 1.0) + ckt->CKTgmin * vbd_jct; } else if (vbd_jct <= here->BSIM4v6vjdmFwd) { evbd = exp(T2); here->BSIM4v6gbd = DrainSatCurrent * evbd / Nvtmd + ckt->CKTgmin; here->BSIM4v6cbd = DrainSatCurrent * (evbd - 1.0) + ckt->CKTgmin * vbd_jct; } else { T0 = here->BSIM4v6IVjdmFwd / Nvtmd; here->BSIM4v6gbd = T0 + ckt->CKTgmin; here->BSIM4v6cbd = here->BSIM4v6IVjdmFwd - DrainSatCurrent + T0 * (vbd_jct - here->BSIM4v6vjdmFwd) + ckt->CKTgmin * vbd_jct; } break; case 2: if (vbd_jct < here->BSIM4v6vjdmRev) { T0 = vbd_jct / Nvtmd; if (T0 < -EXP_THRESHOLD) { evbd = MIN_EXP; devbd_dvb = 0.0; } else { evbd = exp(T0); devbd_dvb = evbd / Nvtmd; } T1 = evbd - 1.0; T2 = here->BSIM4v6IVjdmRev + here->BSIM4v6DslpRev * (vbd_jct - here->BSIM4v6vjdmRev); here->BSIM4v6gbd = devbd_dvb * T2 + T1 * here->BSIM4v6DslpRev + ckt->CKTgmin; here->BSIM4v6cbd = T1 * T2 + ckt->CKTgmin * vbd_jct; } else if (vbd_jct <= here->BSIM4v6vjdmFwd) { T0 = vbd_jct / Nvtmd; if (T0 < -EXP_THRESHOLD) { evbd = MIN_EXP; devbd_dvb = 0.0; } else { evbd = exp(T0); devbd_dvb = evbd / Nvtmd; } T1 = (model->BSIM4v6bvd + vbd_jct) / Nvtmd; if (T1 > EXP_THRESHOLD) { T2 = MIN_EXP; T3 = 0.0; } else { T2 = exp(-T1); T3 = -T2 /Nvtmd; } here->BSIM4v6gbd = DrainSatCurrent * (devbd_dvb - model->BSIM4v6xjbvd * T3) + ckt->CKTgmin; here->BSIM4v6cbd = DrainSatCurrent * (evbd + here->BSIM4v6XExpBVD - 1.0 - model->BSIM4v6xjbvd * T2) + ckt->CKTgmin * vbd_jct; } else { here->BSIM4v6gbd = here->BSIM4v6DslpFwd + ckt->CKTgmin; here->BSIM4v6cbd = here->BSIM4v6IVjdmFwd + here->BSIM4v6DslpFwd * (vbd_jct - here->BSIM4v6vjdmFwd) + ckt->CKTgmin * vbd_jct; } break; default: break; } } /* trap-assisted tunneling and recombination current for reverse bias */ Nvtmrssws = model->BSIM4v6vtm0 * model->BSIM4v6njtsswstemp; Nvtmrsswgs = model->BSIM4v6vtm0 * model->BSIM4v6njtsswgstemp; Nvtmrss = model->BSIM4v6vtm0 * model->BSIM4v6njtsstemp; Nvtmrsswd = model->BSIM4v6vtm0 * model->BSIM4v6njtsswdtemp; Nvtmrsswgd = model->BSIM4v6vtm0 * model->BSIM4v6njtsswgdtemp; Nvtmrsd = model->BSIM4v6vtm0 * model->BSIM4v6njtsdtemp; if ((model->BSIM4v6vtss - vbs_jct) < (model->BSIM4v6vtss * 1e-3)) { T9 = 1.0e3; T0 = - vbs_jct / Nvtmrss * T9; DEXP(T0, T1, T10); dT1_dVb = T10 / Nvtmrss * T9; } else { T9 = 1.0 / (model->BSIM4v6vtss - vbs_jct); T0 = -vbs_jct / Nvtmrss * model->BSIM4v6vtss * T9; dT0_dVb = model->BSIM4v6vtss / Nvtmrss * (T9 + vbs_jct * T9 * T9) ; DEXP(T0, T1, T10); dT1_dVb = T10 * dT0_dVb; } if ((model->BSIM4v6vtsd - vbd_jct) < (model->BSIM4v6vtsd * 1e-3) ) { T9 = 1.0e3; T0 = -vbd_jct / Nvtmrsd * T9; DEXP(T0, T2, T10); dT2_dVb = T10 / Nvtmrsd * T9; } else { T9 = 1.0 / (model->BSIM4v6vtsd - vbd_jct); T0 = -vbd_jct / Nvtmrsd * model->BSIM4v6vtsd * T9; dT0_dVb = model->BSIM4v6vtsd / Nvtmrsd * (T9 + vbd_jct * T9 * T9) ; DEXP(T0, T2, T10); dT2_dVb = T10 * dT0_dVb; } if ((model->BSIM4v6vtssws - vbs_jct) < (model->BSIM4v6vtssws * 1e-3) ) { T9 = 1.0e3; T0 = -vbs_jct / Nvtmrssws * T9; DEXP(T0, T3, T10); dT3_dVb = T10 / Nvtmrssws * T9; } else { T9 = 1.0 / (model->BSIM4v6vtssws - vbs_jct); T0 = -vbs_jct / Nvtmrssws * model->BSIM4v6vtssws * T9; dT0_dVb = model->BSIM4v6vtssws / Nvtmrssws * (T9 + vbs_jct * T9 * T9) ; DEXP(T0, T3, T10); dT3_dVb = T10 * dT0_dVb; } if ((model->BSIM4v6vtsswd - vbd_jct) < (model->BSIM4v6vtsswd * 1e-3) ) { T9 = 1.0e3; T0 = -vbd_jct / Nvtmrsswd * T9; DEXP(T0, T4, T10); dT4_dVb = T10 / Nvtmrsswd * T9; } else { T9 = 1.0 / (model->BSIM4v6vtsswd - vbd_jct); T0 = -vbd_jct / Nvtmrsswd * model->BSIM4v6vtsswd * T9; dT0_dVb = model->BSIM4v6vtsswd / Nvtmrsswd * (T9 + vbd_jct * T9 * T9) ; DEXP(T0, T4, T10); dT4_dVb = T10 * dT0_dVb; } if ((model->BSIM4v6vtsswgs - vbs_jct) < (model->BSIM4v6vtsswgs * 1e-3) ) { T9 = 1.0e3; T0 = -vbs_jct / Nvtmrsswgs * T9; DEXP(T0, T5, T10); dT5_dVb = T10 / Nvtmrsswgs * T9; } else { T9 = 1.0 / (model->BSIM4v6vtsswgs - vbs_jct); T0 = -vbs_jct / Nvtmrsswgs * model->BSIM4v6vtsswgs * T9; dT0_dVb = model->BSIM4v6vtsswgs / Nvtmrsswgs * (T9 + vbs_jct * T9 * T9) ; DEXP(T0, T5, T10); dT5_dVb = T10 * dT0_dVb; } if ((model->BSIM4v6vtsswgd - vbd_jct) < (model->BSIM4v6vtsswgd * 1e-3) ) { T9 = 1.0e3; T0 = -vbd_jct / Nvtmrsswgd * T9; DEXP(T0, T6, T10); dT6_dVb = T10 / Nvtmrsswgd * T9; } else { T9 = 1.0 / (model->BSIM4v6vtsswgd - vbd_jct); T0 = -vbd_jct / Nvtmrsswgd * model->BSIM4v6vtsswgd * T9; dT0_dVb = model->BSIM4v6vtsswgd / Nvtmrsswgd * (T9 + vbd_jct * T9 * T9) ; DEXP(T0, T6, T10); dT6_dVb = T10 * dT0_dVb; } here->BSIM4v6gbs += here->BSIM4v6SjctTempRevSatCur * dT1_dVb + here->BSIM4v6SswTempRevSatCur * dT3_dVb + here->BSIM4v6SswgTempRevSatCur * dT5_dVb; here->BSIM4v6cbs -= here->BSIM4v6SjctTempRevSatCur * (T1 - 1.0) + here->BSIM4v6SswTempRevSatCur * (T3 - 1.0) + here->BSIM4v6SswgTempRevSatCur * (T5 - 1.0); here->BSIM4v6gbd += here->BSIM4v6DjctTempRevSatCur * dT2_dVb + here->BSIM4v6DswTempRevSatCur * dT4_dVb + here->BSIM4v6DswgTempRevSatCur * dT6_dVb; here->BSIM4v6cbd -= here->BSIM4v6DjctTempRevSatCur * (T2 - 1.0) + here->BSIM4v6DswTempRevSatCur * (T4 - 1.0) + here->BSIM4v6DswgTempRevSatCur * (T6 - 1.0); /* End of diode DC model */ if (vds >= 0.0) { here->BSIM4v6mode = 1; Vds = vds; Vgs = vgs; Vbs = vbs; Vdb = vds - vbs; /* WDLiu: for GIDL */ } else { here->BSIM4v6mode = -1; Vds = -vds; Vgs = vgd; Vbs = vbd; Vdb = -vbs; } /* dunga */ if(model->BSIM4v6mtrlMod) { epsrox = 3.9; toxe = model->BSIM4v6eot; epssub = EPS0 * model->BSIM4v6epsrsub; } else { epsrox = model->BSIM4v6epsrox; toxe = model->BSIM4v6toxe; epssub = EPSSI; } T0 = Vbs - here->BSIM4v6vbsc - 0.001; T1 = sqrt(T0 * T0 - 0.004 * here->BSIM4v6vbsc); if (T0 >= 0.0) { Vbseff = here->BSIM4v6vbsc + 0.5 * (T0 + T1); dVbseff_dVb = 0.5 * (1.0 + T0 / T1); } else { T2 = -0.002 / (T1 - T0); Vbseff = here->BSIM4v6vbsc * (1.0 + T2); dVbseff_dVb = T2 * here->BSIM4v6vbsc / T1; } /* JX: Correction to forward body bias */ T9 = 0.95 * pParam->BSIM4v6phi; T0 = T9 - Vbseff - 0.001; T1 = sqrt(T0 * T0 + 0.004 * T9); Vbseff = T9 - 0.5 * (T0 + T1); dVbseff_dVb *= 0.5 * (1.0 + T0 / T1); Phis = pParam->BSIM4v6phi - Vbseff; dPhis_dVb = -1.0; sqrtPhis = sqrt(Phis); dsqrtPhis_dVb = -0.5 / sqrtPhis; Xdep = pParam->BSIM4v6Xdep0 * sqrtPhis / pParam->BSIM4v6sqrtPhi; dXdep_dVb = (pParam->BSIM4v6Xdep0 / pParam->BSIM4v6sqrtPhi) * dsqrtPhis_dVb; Leff = pParam->BSIM4v6leff; Vtm = model->BSIM4v6vtm; Vtm0 = model->BSIM4v6vtm0; /* Vth Calculation */ T3 = sqrt(Xdep); V0 = pParam->BSIM4v6vbi - pParam->BSIM4v6phi; T0 = pParam->BSIM4v6dvt2 * Vbseff; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->BSIM4v6dvt2; } else { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->BSIM4v6dvt2 * T4 * T4; } lt1 = model->BSIM4v6factor1 * T3 * T1; dlt1_dVb = model->BSIM4v6factor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * T2); T0 = pParam->BSIM4v6dvt2w * Vbseff; if (T0 >= - 0.5) { T1 = 1.0 + T0; T2 = pParam->BSIM4v6dvt2w; } else { T4 = 1.0 / (3.0 + 8.0 * T0); T1 = (1.0 + 3.0 * T0) * T4; T2 = pParam->BSIM4v6dvt2w * T4 * T4; } ltw = model->BSIM4v6factor1 * T3 * T1; dltw_dVb = model->BSIM4v6factor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * T2); T0 = pParam->BSIM4v6dvt1 * Leff / lt1; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; Theta0 = T1 / T4; dT1_dVb = -T0 * T1 * dlt1_dVb / lt1; dTheta0_dVb = dT1_dVb * (T4 - 2.0 * T1 * (T2 + MIN_EXP)) / T4 / T4; } else { Theta0 = 1.0 / (MAX_EXP - 2.0); /* 3.0 * MIN_EXP omitted */ dTheta0_dVb = 0.0; } here->BSIM4v6thetavth = pParam->BSIM4v6dvt0 * Theta0; Delt_vth = here->BSIM4v6thetavth * V0; dDelt_vth_dVb = pParam->BSIM4v6dvt0 * dTheta0_dVb * V0; T0 = pParam->BSIM4v6dvt1w * pParam->BSIM4v6weff * Leff / ltw; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; T5 = T1 / T4; dT1_dVb = -T0 * T1 * dltw_dVb / ltw; dT5_dVb = dT1_dVb * (T4 - 2.0 * T1 * (T2 + MIN_EXP)) / T4 / T4; } else { T5 = 1.0 / (MAX_EXP - 2.0); /* 3.0 * MIN_EXP omitted */ dT5_dVb = 0.0; } T0 = pParam->BSIM4v6dvt0w * T5; T2 = T0 * V0; dT2_dVb = pParam->BSIM4v6dvt0w * dT5_dVb * V0; TempRatio = ckt->CKTtemp / model->BSIM4v6tnom - 1.0; T0 = sqrt(1.0 + pParam->BSIM4v6lpe0 / Leff); T1 = pParam->BSIM4v6k1ox * (T0 - 1.0) * pParam->BSIM4v6sqrtPhi + (pParam->BSIM4v6kt1 + pParam->BSIM4v6kt1l / Leff + pParam->BSIM4v6kt2 * Vbseff) * TempRatio; Vth_NarrowW = toxe * pParam->BSIM4v6phi / (pParam->BSIM4v6weff + pParam->BSIM4v6w0); T3 = here->BSIM4v6eta0 + pParam->BSIM4v6etab * Vbseff; if (T3 < 1.0e-4) { T9 = 1.0 / (3.0 - 2.0e4 * T3); T3 = (2.0e-4 - T3) * T9; T4 = T9 * T9; } else { T4 = 1.0; } dDIBL_Sft_dVd = T3 * pParam->BSIM4v6theta0vb0; DIBL_Sft = dDIBL_Sft_dVd * Vds; Lpe_Vb = sqrt(1.0 + pParam->BSIM4v6lpeb / Leff); Vth = model->BSIM4v6type * here->BSIM4v6vth0 + (pParam->BSIM4v6k1ox * sqrtPhis - pParam->BSIM4v6k1 * pParam->BSIM4v6sqrtPhi) * Lpe_Vb - here->BSIM4v6k2ox * Vbseff - Delt_vth - T2 + (pParam->BSIM4v6k3 + pParam->BSIM4v6k3b * Vbseff) * Vth_NarrowW + T1 - DIBL_Sft; dVth_dVb = Lpe_Vb * pParam->BSIM4v6k1ox * dsqrtPhis_dVb - here->BSIM4v6k2ox - dDelt_vth_dVb - dT2_dVb + pParam->BSIM4v6k3b * Vth_NarrowW - pParam->BSIM4v6etab * Vds * pParam->BSIM4v6theta0vb0 * T4 + pParam->BSIM4v6kt2 * TempRatio; dVth_dVd = -dDIBL_Sft_dVd; /* Calculate n */ tmp1 = epssub / Xdep; here->BSIM4v6nstar = model->BSIM4v6vtm / Charge_q * (model->BSIM4v6coxe + tmp1 + pParam->BSIM4v6cit); tmp2 = pParam->BSIM4v6nfactor * tmp1; tmp3 = pParam->BSIM4v6cdsc + pParam->BSIM4v6cdscb * Vbseff + pParam->BSIM4v6cdscd * Vds; tmp4 = (tmp2 + tmp3 * Theta0 + pParam->BSIM4v6cit) / model->BSIM4v6coxe; if (tmp4 >= -0.5) { n = 1.0 + tmp4; dn_dVb = (-tmp2 / Xdep * dXdep_dVb + tmp3 * dTheta0_dVb + pParam->BSIM4v6cdscb * Theta0) / model->BSIM4v6coxe; dn_dVd = pParam->BSIM4v6cdscd * Theta0 / model->BSIM4v6coxe; } else { T0 = 1.0 / (3.0 + 8.0 * tmp4); n = (1.0 + 3.0 * tmp4) * T0; T0 *= T0; dn_dVb = (-tmp2 / Xdep * dXdep_dVb + tmp3 * dTheta0_dVb + pParam->BSIM4v6cdscb * Theta0) / model->BSIM4v6coxe * T0; dn_dVd = pParam->BSIM4v6cdscd * Theta0 / model->BSIM4v6coxe * T0; } /* Vth correction for Pocket implant */ if (pParam->BSIM4v6dvtp0 > 0.0) { T0 = -pParam->BSIM4v6dvtp1 * Vds; if (T0 < -EXP_THRESHOLD) { T2 = MIN_EXP; dT2_dVd = 0.0; } else { T2 = exp(T0); dT2_dVd = -pParam->BSIM4v6dvtp1 * T2; } T3 = Leff + pParam->BSIM4v6dvtp0 * (1.0 + T2); dT3_dVd = pParam->BSIM4v6dvtp0 * dT2_dVd; if (model->BSIM4v6tempMod < 2) { T4 = Vtm * log(Leff / T3); dT4_dVd = -Vtm * dT3_dVd / T3; } else { T4 = model->BSIM4v6vtm0 * log(Leff / T3); dT4_dVd = -model->BSIM4v6vtm0 * dT3_dVd / T3; } dDITS_Sft_dVd = dn_dVd * T4 + n * dT4_dVd; dDITS_Sft_dVb = T4 * dn_dVb; Vth -= n * T4; dVth_dVd -= dDITS_Sft_dVd; dVth_dVb -= dDITS_Sft_dVb; } here->BSIM4v6von = Vth; /* Poly Gate Si Depletion Effect */ T0 = here->BSIM4v6vfb + pParam->BSIM4v6phi; if(model->BSIM4v6mtrlMod == 0) T1 = EPSSI; else T1 = model->BSIM4v6epsrgate * EPS0; BSIM4v6polyDepletion(T0, pParam->BSIM4v6ngate, T1, model->BSIM4v6coxe, vgs, &vgs_eff, &dvgs_eff_dvg); BSIM4v6polyDepletion(T0, pParam->BSIM4v6ngate, T1, model->BSIM4v6coxe, vgd, &vgd_eff, &dvgd_eff_dvg); if(here->BSIM4v6mode>0) { Vgs_eff = vgs_eff; dVgs_eff_dVg = dvgs_eff_dvg; } else { Vgs_eff = vgd_eff; dVgs_eff_dVg = dvgd_eff_dvg; } here->BSIM4v6vgs_eff = vgs_eff; here->BSIM4v6vgd_eff = vgd_eff; here->BSIM4v6dvgs_eff_dvg = dvgs_eff_dvg; here->BSIM4v6dvgd_eff_dvg = dvgd_eff_dvg; Vgst = Vgs_eff - Vth; /* Calculate Vgsteff */ T0 = n * Vtm; T1 = pParam->BSIM4v6mstar * Vgst; T2 = T1 / T0; if (T2 > EXP_THRESHOLD) { T10 = T1; dT10_dVg = pParam->BSIM4v6mstar * dVgs_eff_dVg; dT10_dVd = -dVth_dVd * pParam->BSIM4v6mstar; dT10_dVb = -dVth_dVb * pParam->BSIM4v6mstar; } else if (T2 < -EXP_THRESHOLD) { T10 = Vtm * log(1.0 + MIN_EXP); dT10_dVg = 0.0; dT10_dVd = T10 * dn_dVd; dT10_dVb = T10 * dn_dVb; T10 *= n; } else { ExpVgst = exp(T2); T3 = Vtm * log(1.0 + ExpVgst); T10 = n * T3; dT10_dVg = pParam->BSIM4v6mstar * ExpVgst / (1.0 + ExpVgst); dT10_dVb = T3 * dn_dVb - dT10_dVg * (dVth_dVb + Vgst * dn_dVb / n); dT10_dVd = T3 * dn_dVd - dT10_dVg * (dVth_dVd + Vgst * dn_dVd / n); dT10_dVg *= dVgs_eff_dVg; } T1 = pParam->BSIM4v6voffcbn - (1.0 - pParam->BSIM4v6mstar) * Vgst; T2 = T1 / T0; if (T2 < -EXP_THRESHOLD) { T3 = model->BSIM4v6coxe * MIN_EXP / pParam->BSIM4v6cdep0; T9 = pParam->BSIM4v6mstar + T3 * n; dT9_dVg = 0.0; dT9_dVd = dn_dVd * T3; dT9_dVb = dn_dVb * T3; } else if (T2 > EXP_THRESHOLD) { T3 = model->BSIM4v6coxe * MAX_EXP / pParam->BSIM4v6cdep0; T9 = pParam->BSIM4v6mstar + T3 * n; dT9_dVg = 0.0; dT9_dVd = dn_dVd * T3; dT9_dVb = dn_dVb * T3; } else { ExpVgst = exp(T2); T3 = model->BSIM4v6coxe / pParam->BSIM4v6cdep0; T4 = T3 * ExpVgst; T5 = T1 * T4 / T0; T9 = pParam->BSIM4v6mstar + n * T4; dT9_dVg = T3 * (pParam->BSIM4v6mstar - 1.0) * ExpVgst / Vtm; dT9_dVb = T4 * dn_dVb - dT9_dVg * dVth_dVb - T5 * dn_dVb; dT9_dVd = T4 * dn_dVd - dT9_dVg * dVth_dVd - T5 * dn_dVd; dT9_dVg *= dVgs_eff_dVg; } here->BSIM4v6Vgsteff = Vgsteff = T10 / T9; T11 = T9 * T9; dVgsteff_dVg = (T9 * dT10_dVg - T10 * dT9_dVg) / T11; dVgsteff_dVd = (T9 * dT10_dVd - T10 * dT9_dVd) / T11; dVgsteff_dVb = (T9 * dT10_dVb - T10 * dT9_dVb) / T11; /* Calculate Effective Channel Geometry */ T9 = sqrtPhis - pParam->BSIM4v6sqrtPhi; Weff = pParam->BSIM4v6weff - 2.0 * (pParam->BSIM4v6dwg * Vgsteff + pParam->BSIM4v6dwb * T9); dWeff_dVg = -2.0 * pParam->BSIM4v6dwg; dWeff_dVb = -2.0 * pParam->BSIM4v6dwb * dsqrtPhis_dVb; if (Weff < 2.0e-8) /* to avoid the discontinuity problem due to Weff*/ { T0 = 1.0 / (6.0e-8 - 2.0 * Weff); Weff = 2.0e-8 * (4.0e-8 - Weff) * T0; T0 *= T0 * 4.0e-16; dWeff_dVg *= T0; dWeff_dVb *= T0; } if (model->BSIM4v6rdsMod == 1) Rds = dRds_dVg = dRds_dVb = 0.0; else { T0 = 1.0 + pParam->BSIM4v6prwg * Vgsteff; dT0_dVg = -pParam->BSIM4v6prwg / T0 / T0; T1 = pParam->BSIM4v6prwb * T9; dT1_dVb = pParam->BSIM4v6prwb * dsqrtPhis_dVb; T2 = 1.0 / T0 + T1; T3 = T2 + sqrt(T2 * T2 + 0.01); /* 0.01 = 4.0 * 0.05 * 0.05 */ dT3_dVg = 1.0 + T2 / (T3 - T2); dT3_dVb = dT3_dVg * dT1_dVb; dT3_dVg *= dT0_dVg; T4 = pParam->BSIM4v6rds0 * 0.5; Rds = pParam->BSIM4v6rdswmin + T3 * T4; dRds_dVg = T4 * dT3_dVg; dRds_dVb = T4 * dT3_dVb; if (Rds > 0.0) here->BSIM4v6grdsw = 1.0 / Rds* here->BSIM4v6nf; /*4.6.2*/ else here->BSIM4v6grdsw = 0.0; } /* Calculate Abulk */ T9 = 0.5 * pParam->BSIM4v6k1ox * Lpe_Vb / sqrtPhis; T1 = T9 + here->BSIM4v6k2ox - pParam->BSIM4v6k3b * Vth_NarrowW; dT1_dVb = -T9 / sqrtPhis * dsqrtPhis_dVb; T9 = sqrt(pParam->BSIM4v6xj * Xdep); tmp1 = Leff + 2.0 * T9; T5 = Leff / tmp1; tmp2 = pParam->BSIM4v6a0 * T5; tmp3 = pParam->BSIM4v6weff + pParam->BSIM4v6b1; tmp4 = pParam->BSIM4v6b0 / tmp3; T2 = tmp2 + tmp4; dT2_dVb = -T9 / tmp1 / Xdep * dXdep_dVb; T6 = T5 * T5; T7 = T5 * T6; Abulk0 = 1.0 + T1 * T2; dAbulk0_dVb = T1 * tmp2 * dT2_dVb + T2 * dT1_dVb; T8 = pParam->BSIM4v6ags * pParam->BSIM4v6a0 * T7; dAbulk_dVg = -T1 * T8; Abulk = Abulk0 + dAbulk_dVg * Vgsteff; dAbulk_dVb = dAbulk0_dVb - T8 * Vgsteff * (dT1_dVb + 3.0 * T1 * dT2_dVb); if (Abulk0 < 0.1) /* added to avoid the problems caused by Abulk0 */ { T9 = 1.0 / (3.0 - 20.0 * Abulk0); Abulk0 = (0.2 - Abulk0) * T9; dAbulk0_dVb *= T9 * T9; } if (Abulk < 0.1) { T9 = 1.0 / (3.0 - 20.0 * Abulk); Abulk = (0.2 - Abulk) * T9; T10 = T9 * T9; dAbulk_dVb *= T10; dAbulk_dVg *= T10; } here->BSIM4v6Abulk = Abulk; T2 = pParam->BSIM4v6keta * Vbseff; if (T2 >= -0.9) { T0 = 1.0 / (1.0 + T2); dT0_dVb = -pParam->BSIM4v6keta * T0 * T0; } else { T1 = 1.0 / (0.8 + T2); T0 = (17.0 + 20.0 * T2) * T1; dT0_dVb = -pParam->BSIM4v6keta * T1 * T1; } dAbulk_dVg *= T0; dAbulk_dVb = dAbulk_dVb * T0 + Abulk * dT0_dVb; dAbulk0_dVb = dAbulk0_dVb * T0 + Abulk0 * dT0_dVb; Abulk *= T0; Abulk0 *= T0; /* Mobility calculation */ if (model->BSIM4v6mtrlMod) T14 = 2.0 * model->BSIM4v6type *(model->BSIM4v6phig - model->BSIM4v6easub - 0.5*model->BSIM4v6Eg0 + 0.45); else T14 = 0.0; if (model->BSIM4v6mobMod == 0) { T0 = Vgsteff + Vth + Vth - T14; T2 = pParam->BSIM4v6ua + pParam->BSIM4v6uc * Vbseff; T3 = T0 / toxe; T12 = sqrt(Vth * Vth + 0.0001); T9 = 1.0/(Vgsteff + 2*T12); T10 = T9*toxe; T8 = pParam->BSIM4v6ud * T10 * T10 * Vth; T6 = T8 * Vth; T5 = T3 * (T2 + pParam->BSIM4v6ub * T3) + T6; T7 = - 2.0 * T6 * T9; T11 = T7 * Vth/T12; dDenomi_dVg = (T2 + 2.0 * pParam->BSIM4v6ub * T3) / toxe; T13 = 2.0 * (dDenomi_dVg + T11 + T8); dDenomi_dVd = T13 * dVth_dVd; dDenomi_dVb = T13 * dVth_dVb + pParam->BSIM4v6uc * T3; dDenomi_dVg+= T7; } else if (model->BSIM4v6mobMod == 1) { T0 = Vgsteff + Vth + Vth - T14; T2 = 1.0 + pParam->BSIM4v6uc * Vbseff; T3 = T0 / toxe; T4 = T3 * (pParam->BSIM4v6ua + pParam->BSIM4v6ub * T3); T12 = sqrt(Vth * Vth + 0.0001); T9 = 1.0/(Vgsteff + 2*T12); T10 = T9*toxe; T8 = pParam->BSIM4v6ud * T10 * T10 * Vth; T6 = T8 * Vth; T5 = T4 * T2 + T6; T7 = - 2.0 * T6 * T9; T11 = T7 * Vth/T12; dDenomi_dVg = (pParam->BSIM4v6ua + 2.0 * pParam->BSIM4v6ub * T3) * T2 / toxe; T13 = 2.0 * (dDenomi_dVg + T11 + T8); dDenomi_dVd = T13 * dVth_dVd; dDenomi_dVb = T13 * dVth_dVb + pParam->BSIM4v6uc * T4; dDenomi_dVg+= T7; } else if (model->BSIM4v6mobMod == 2) { T0 = (Vgsteff + here->BSIM4v6vtfbphi1) / toxe; T1 = exp(pParam->BSIM4v6eu * log(T0)); dT1_dVg = T1 * pParam->BSIM4v6eu / T0 / toxe; T2 = pParam->BSIM4v6ua + pParam->BSIM4v6uc * Vbseff; T3 = T0 / toxe; /*Do we need it?*/ T12 = sqrt(Vth * Vth + 0.0001); T9 = 1.0/(Vgsteff + 2*T12); T10 = T9*toxe; T8 = pParam->BSIM4v6ud * T10 * T10 * Vth; T6 = T8 * Vth; T5 = T1 * T2 + T6; T7 = - 2.0 * T6 * T9; T11 = T7 * Vth/T12; dDenomi_dVg = T2 * dT1_dVg + T7; T13 = 2.0 * (T11 + T8); dDenomi_dVd = T13 * dVth_dVd; dDenomi_dVb = T13 * dVth_dVb + T1 * pParam->BSIM4v6uc; } /*high K mobility*/ else { /*univsersal mobility*/ T0 = (Vgsteff + here->BSIM4v6vtfbphi1)* 1.0e-8 / toxe/6.0; T1 = exp(pParam->BSIM4v6eu * log(T0)); dT1_dVg = T1 * pParam->BSIM4v6eu * 1.0e-8/ T0 / toxe/6.0; T2 = pParam->BSIM4v6ua + pParam->BSIM4v6uc * Vbseff; /*Coulombic*/ VgsteffVth = pParam->BSIM4v6VgsteffVth; T10 = exp(pParam->BSIM4v6ucs * log(0.5 + 0.5 * Vgsteff/VgsteffVth)); T11 = pParam->BSIM4v6ud/T10; dT11_dVg = - 0.5 * pParam->BSIM4v6ucs * T11 /(0.5 + 0.5*Vgsteff/VgsteffVth)/VgsteffVth; dDenomi_dVg = T2 * dT1_dVg + dT11_dVg; dDenomi_dVd = 0.0; dDenomi_dVb = T1 * pParam->BSIM4v6uc; T5 = T1 * T2 + T11; } if (T5 >= -0.8) { Denomi = 1.0 + T5; } else { T9 = 1.0 / (7.0 + 10.0 * T5); Denomi = (0.6 + T5) * T9; T9 *= T9; dDenomi_dVg *= T9; dDenomi_dVd *= T9; dDenomi_dVb *= T9; } here->BSIM4v6ueff = ueff = here->BSIM4v6u0temp / Denomi; T9 = -ueff / Denomi; dueff_dVg = T9 * dDenomi_dVg; dueff_dVd = T9 * dDenomi_dVd; dueff_dVb = T9 * dDenomi_dVb; /* Saturation Drain Voltage Vdsat */ WVCox = Weff * here->BSIM4v6vsattemp * model->BSIM4v6coxe; WVCoxRds = WVCox * Rds; Esat = 2.0 * here->BSIM4v6vsattemp / ueff; here->BSIM4v6EsatL = EsatL = Esat * Leff; T0 = -EsatL /ueff; dEsatL_dVg = T0 * dueff_dVg; dEsatL_dVd = T0 * dueff_dVd; dEsatL_dVb = T0 * dueff_dVb; /* Sqrt() */ a1 = pParam->BSIM4v6a1; if (a1 == 0.0) { Lambda = pParam->BSIM4v6a2; dLambda_dVg = 0.0; } else if (a1 > 0.0) { T0 = 1.0 - pParam->BSIM4v6a2; T1 = T0 - pParam->BSIM4v6a1 * Vgsteff - 0.0001; T2 = sqrt(T1 * T1 + 0.0004 * T0); Lambda = pParam->BSIM4v6a2 + T0 - 0.5 * (T1 + T2); dLambda_dVg = 0.5 * pParam->BSIM4v6a1 * (1.0 + T1 / T2); } else { T1 = pParam->BSIM4v6a2 + pParam->BSIM4v6a1 * Vgsteff - 0.0001; T2 = sqrt(T1 * T1 + 0.0004 * pParam->BSIM4v6a2); Lambda = 0.5 * (T1 + T2); dLambda_dVg = 0.5 * pParam->BSIM4v6a1 * (1.0 + T1 / T2); } Vgst2Vtm = Vgsteff + 2.0 * Vtm; if (Rds > 0) { tmp2 = dRds_dVg / Rds + dWeff_dVg / Weff; tmp3 = dRds_dVb / Rds + dWeff_dVb / Weff; } else { tmp2 = dWeff_dVg / Weff; tmp3 = dWeff_dVb / Weff; } if ((Rds == 0.0) && (Lambda == 1.0)) { T0 = 1.0 / (Abulk * EsatL + Vgst2Vtm); tmp1 = 0.0; T1 = T0 * T0; T2 = Vgst2Vtm * T0; T3 = EsatL * Vgst2Vtm; Vdsat = T3 * T0; dT0_dVg = -(Abulk * dEsatL_dVg + EsatL * dAbulk_dVg + 1.0) * T1; dT0_dVd = -(Abulk * dEsatL_dVd) * T1; dT0_dVb = -(Abulk * dEsatL_dVb + dAbulk_dVb * EsatL) * T1; dVdsat_dVg = T3 * dT0_dVg + T2 * dEsatL_dVg + EsatL * T0; dVdsat_dVd = T3 * dT0_dVd + T2 * dEsatL_dVd; dVdsat_dVb = T3 * dT0_dVb + T2 * dEsatL_dVb; } else { tmp1 = dLambda_dVg / (Lambda * Lambda); T9 = Abulk * WVCoxRds; T8 = Abulk * T9; T7 = Vgst2Vtm * T9; T6 = Vgst2Vtm * WVCoxRds; T0 = 2.0 * Abulk * (T9 - 1.0 + 1.0 / Lambda); dT0_dVg = 2.0 * (T8 * tmp2 - Abulk * tmp1 + (2.0 * T9 + 1.0 / Lambda - 1.0) * dAbulk_dVg); dT0_dVb = 2.0 * (T8 * (2.0 / Abulk * dAbulk_dVb + tmp3) + (1.0 / Lambda - 1.0) * dAbulk_dVb); dT0_dVd = 0.0; T1 = Vgst2Vtm * (2.0 / Lambda - 1.0) + Abulk * EsatL + 3.0 * T7; dT1_dVg = (2.0 / Lambda - 1.0) - 2.0 * Vgst2Vtm * tmp1 + Abulk * dEsatL_dVg + EsatL * dAbulk_dVg + 3.0 * (T9 + T7 * tmp2 + T6 * dAbulk_dVg); dT1_dVb = Abulk * dEsatL_dVb + EsatL * dAbulk_dVb + 3.0 * (T6 * dAbulk_dVb + T7 * tmp3); dT1_dVd = Abulk * dEsatL_dVd; T2 = Vgst2Vtm * (EsatL + 2.0 * T6); dT2_dVg = EsatL + Vgst2Vtm * dEsatL_dVg + T6 * (4.0 + 2.0 * Vgst2Vtm * tmp2); dT2_dVb = Vgst2Vtm * (dEsatL_dVb + 2.0 * T6 * tmp3); dT2_dVd = Vgst2Vtm * dEsatL_dVd; T3 = sqrt(T1 * T1 - 2.0 * T0 * T2); Vdsat = (T1 - T3) / T0; dT3_dVg = (T1 * dT1_dVg - 2.0 * (T0 * dT2_dVg + T2 * dT0_dVg)) / T3; dT3_dVd = (T1 * dT1_dVd - 2.0 * (T0 * dT2_dVd + T2 * dT0_dVd)) / T3; dT3_dVb = (T1 * dT1_dVb - 2.0 * (T0 * dT2_dVb + T2 * dT0_dVb)) / T3; dVdsat_dVg = (dT1_dVg - (T1 * dT1_dVg - dT0_dVg * T2 - T0 * dT2_dVg) / T3 - Vdsat * dT0_dVg) / T0; dVdsat_dVb = (dT1_dVb - (T1 * dT1_dVb - dT0_dVb * T2 - T0 * dT2_dVb) / T3 - Vdsat * dT0_dVb) / T0; dVdsat_dVd = (dT1_dVd - (T1 * dT1_dVd - T0 * dT2_dVd) / T3) / T0; } here->BSIM4v6vdsat = Vdsat; /* Calculate Vdseff */ T1 = Vdsat - Vds - pParam->BSIM4v6delta; dT1_dVg = dVdsat_dVg; dT1_dVd = dVdsat_dVd - 1.0; dT1_dVb = dVdsat_dVb; T2 = sqrt(T1 * T1 + 4.0 * pParam->BSIM4v6delta * Vdsat); T0 = T1 / T2; T9 = 2.0 * pParam->BSIM4v6delta; T3 = T9 / T2; dT2_dVg = T0 * dT1_dVg + T3 * dVdsat_dVg; dT2_dVd = T0 * dT1_dVd + T3 * dVdsat_dVd; dT2_dVb = T0 * dT1_dVb + T3 * dVdsat_dVb; if (T1 >= 0.0) { Vdseff = Vdsat - 0.5 * (T1 + T2); dVdseff_dVg = dVdsat_dVg - 0.5 * (dT1_dVg + dT2_dVg); dVdseff_dVd = dVdsat_dVd - 0.5 * (dT1_dVd + dT2_dVd); dVdseff_dVb = dVdsat_dVb - 0.5 * (dT1_dVb + dT2_dVb); } else { T4 = T9 / (T2 - T1); T5 = 1.0 - T4; T6 = Vdsat * T4 / (T2 - T1); Vdseff = Vdsat * T5; dVdseff_dVg = dVdsat_dVg * T5 + T6 * (dT2_dVg - dT1_dVg); dVdseff_dVd = dVdsat_dVd * T5 + T6 * (dT2_dVd - dT1_dVd); dVdseff_dVb = dVdsat_dVb * T5 + T6 * (dT2_dVb - dT1_dVb); } if (Vds == 0.0) { Vdseff = 0.0; dVdseff_dVg = 0.0; dVdseff_dVb = 0.0; } if (Vdseff > Vds) Vdseff = Vds; diffVds = Vds - Vdseff; here->BSIM4v6Vdseff = Vdseff; /* Velocity Overshoot */ if((model->BSIM4v6lambdaGiven) && (model->BSIM4v6lambda > 0.0) ) { T1 = Leff * ueff; T2 = pParam->BSIM4v6lambda / T1; T3 = -T2 / T1 * Leff; dT2_dVd = T3 * dueff_dVd; dT2_dVg = T3 * dueff_dVg; dT2_dVb = T3 * dueff_dVb; T5 = 1.0 / (Esat * pParam->BSIM4v6litl); T4 = -T5 / EsatL; dT5_dVg = dEsatL_dVg * T4; dT5_dVd = dEsatL_dVd * T4; dT5_dVb = dEsatL_dVb * T4; T6 = 1.0 + diffVds * T5; dT6_dVg = dT5_dVg * diffVds - dVdseff_dVg * T5; dT6_dVd = dT5_dVd * diffVds + (1.0 - dVdseff_dVd) * T5; dT6_dVb = dT5_dVb * diffVds - dVdseff_dVb * T5; T7 = 2.0 / (T6 * T6 + 1.0); T8 = 1.0 - T7; T9 = T6 * T7 * T7; dT8_dVg = T9 * dT6_dVg; dT8_dVd = T9 * dT6_dVd; dT8_dVb = T9 * dT6_dVb; T10 = 1.0 + T2 * T8; dT10_dVg = dT2_dVg * T8 + T2 * dT8_dVg; dT10_dVd = dT2_dVd * T8 + T2 * dT8_dVd; dT10_dVb = dT2_dVb * T8 + T2 * dT8_dVb; if(T10 == 1.0) dT10_dVg = dT10_dVd = dT10_dVb = 0.0; dEsatL_dVg *= T10; dEsatL_dVg += EsatL * dT10_dVg; dEsatL_dVd *= T10; dEsatL_dVd += EsatL * dT10_dVd; dEsatL_dVb *= T10; dEsatL_dVb += EsatL * dT10_dVb; EsatL *= T10; Esat = EsatL / Leff; /* bugfix by Wenwei Yang (4.6.4) */ here->BSIM4v6EsatL = EsatL; } /* Calculate Vasat */ tmp4 = 1.0 - 0.5 * Abulk * Vdsat / Vgst2Vtm; T9 = WVCoxRds * Vgsteff; T8 = T9 / Vgst2Vtm; T0 = EsatL + Vdsat + 2.0 * T9 * tmp4; T7 = 2.0 * WVCoxRds * tmp4; dT0_dVg = dEsatL_dVg + dVdsat_dVg + T7 * (1.0 + tmp2 * Vgsteff) - T8 * (Abulk * dVdsat_dVg - Abulk * Vdsat / Vgst2Vtm + Vdsat * dAbulk_dVg); dT0_dVb = dEsatL_dVb + dVdsat_dVb + T7 * tmp3 * Vgsteff - T8 * (dAbulk_dVb * Vdsat + Abulk * dVdsat_dVb); dT0_dVd = dEsatL_dVd + dVdsat_dVd - T8 * Abulk * dVdsat_dVd; T9 = WVCoxRds * Abulk; T1 = 2.0 / Lambda - 1.0 + T9; dT1_dVg = -2.0 * tmp1 + WVCoxRds * (Abulk * tmp2 + dAbulk_dVg); dT1_dVb = dAbulk_dVb * WVCoxRds + T9 * tmp3; Vasat = T0 / T1; dVasat_dVg = (dT0_dVg - Vasat * dT1_dVg) / T1; dVasat_dVb = (dT0_dVb - Vasat * dT1_dVb) / T1; dVasat_dVd = dT0_dVd / T1; /* Calculate Idl first */ tmp1 = here->BSIM4v6vtfbphi2; tmp2 = 2.0e8 * model->BSIM4v6toxp; dT0_dVg = 1.0 / tmp2; T0 = (Vgsteff + tmp1) * dT0_dVg; tmp3 = exp(model->BSIM4v6bdos * 0.7 * log(T0)); T1 = 1.0 + tmp3; T2 = model->BSIM4v6bdos * 0.7 * tmp3 / T0; Tcen = model->BSIM4v6ados * 1.9e-9 / T1; dTcen_dVg = -Tcen * T2 * dT0_dVg / T1; Coxeff = epssub * model->BSIM4v6coxp / (epssub + model->BSIM4v6coxp * Tcen); dCoxeff_dVg = -Coxeff * Coxeff * dTcen_dVg / epssub; CoxeffWovL = Coxeff * Weff / Leff; beta = ueff * CoxeffWovL; T3 = ueff / Leff; dbeta_dVg = CoxeffWovL * dueff_dVg + T3 * (Weff * dCoxeff_dVg + Coxeff * dWeff_dVg); dbeta_dVd = CoxeffWovL * dueff_dVd; dbeta_dVb = CoxeffWovL * dueff_dVb + T3 * Coxeff * dWeff_dVb; here->BSIM4v6AbovVgst2Vtm = Abulk / Vgst2Vtm; T0 = 1.0 - 0.5 * Vdseff * here->BSIM4v6AbovVgst2Vtm; dT0_dVg = -0.5 * (Abulk * dVdseff_dVg - Abulk * Vdseff / Vgst2Vtm + Vdseff * dAbulk_dVg) / Vgst2Vtm; dT0_dVd = -0.5 * Abulk * dVdseff_dVd / Vgst2Vtm; dT0_dVb = -0.5 * (Abulk * dVdseff_dVb + dAbulk_dVb * Vdseff) / Vgst2Vtm; fgche1 = Vgsteff * T0; dfgche1_dVg = Vgsteff * dT0_dVg + T0; dfgche1_dVd = Vgsteff * dT0_dVd; dfgche1_dVb = Vgsteff * dT0_dVb; T9 = Vdseff / EsatL; fgche2 = 1.0 + T9; dfgche2_dVg = (dVdseff_dVg - T9 * dEsatL_dVg) / EsatL; dfgche2_dVd = (dVdseff_dVd - T9 * dEsatL_dVd) / EsatL; dfgche2_dVb = (dVdseff_dVb - T9 * dEsatL_dVb) / EsatL; gche = beta * fgche1 / fgche2; dgche_dVg = (beta * dfgche1_dVg + fgche1 * dbeta_dVg - gche * dfgche2_dVg) / fgche2; dgche_dVd = (beta * dfgche1_dVd + fgche1 * dbeta_dVd - gche * dfgche2_dVd) / fgche2; dgche_dVb = (beta * dfgche1_dVb + fgche1 * dbeta_dVb - gche * dfgche2_dVb) / fgche2; T0 = 1.0 + gche * Rds; Idl = gche / T0; T1 = (1.0 - Idl * Rds) / T0; T2 = Idl * Idl; dIdl_dVg = T1 * dgche_dVg - T2 * dRds_dVg; dIdl_dVd = T1 * dgche_dVd; dIdl_dVb = T1 * dgche_dVb - T2 * dRds_dVb; /* Calculate degradation factor due to pocket implant */ if (pParam->BSIM4v6fprout <= 0.0) { FP = 1.0; dFP_dVg = 0.0; } else { T9 = pParam->BSIM4v6fprout * sqrt(Leff) / Vgst2Vtm; FP = 1.0 / (1.0 + T9); dFP_dVg = FP * FP * T9 / Vgst2Vtm; } /* Calculate VACLM */ T8 = pParam->BSIM4v6pvag / EsatL; T9 = T8 * Vgsteff; if (T9 > -0.9) { PvagTerm = 1.0 + T9; dPvagTerm_dVg = T8 * (1.0 - Vgsteff * dEsatL_dVg / EsatL); dPvagTerm_dVb = -T9 * dEsatL_dVb / EsatL; dPvagTerm_dVd = -T9 * dEsatL_dVd / EsatL; } else { T4 = 1.0 / (17.0 + 20.0 * T9); PvagTerm = (0.8 + T9) * T4; T4 *= T4; dPvagTerm_dVg = T8 * (1.0 - Vgsteff * dEsatL_dVg / EsatL) * T4; T9 *= T4 / EsatL; dPvagTerm_dVb = -T9 * dEsatL_dVb; dPvagTerm_dVd = -T9 * dEsatL_dVd; } if ((pParam->BSIM4v6pclm > MIN_EXP) && (diffVds > 1.0e-10)) { T0 = 1.0 + Rds * Idl; dT0_dVg = dRds_dVg * Idl + Rds * dIdl_dVg; dT0_dVd = Rds * dIdl_dVd; dT0_dVb = dRds_dVb * Idl + Rds * dIdl_dVb; T2 = Vdsat / Esat; T1 = Leff + T2; dT1_dVg = (dVdsat_dVg - T2 * dEsatL_dVg / Leff) / Esat; dT1_dVd = (dVdsat_dVd - T2 * dEsatL_dVd / Leff) / Esat; dT1_dVb = (dVdsat_dVb - T2 * dEsatL_dVb / Leff) / Esat; Cclm = FP * PvagTerm * T0 * T1 / (pParam->BSIM4v6pclm * pParam->BSIM4v6litl); dCclm_dVg = Cclm * (dFP_dVg / FP + dPvagTerm_dVg / PvagTerm + dT0_dVg / T0 + dT1_dVg / T1); dCclm_dVb = Cclm * (dPvagTerm_dVb / PvagTerm + dT0_dVb / T0 + dT1_dVb / T1); dCclm_dVd = Cclm * (dPvagTerm_dVd / PvagTerm + dT0_dVd / T0 + dT1_dVd / T1); VACLM = Cclm * diffVds; dVACLM_dVg = dCclm_dVg * diffVds - dVdseff_dVg * Cclm; dVACLM_dVb = dCclm_dVb * diffVds - dVdseff_dVb * Cclm; dVACLM_dVd = dCclm_dVd * diffVds + (1.0 - dVdseff_dVd) * Cclm; } else { VACLM = Cclm = MAX_EXP; dVACLM_dVd = dVACLM_dVg = dVACLM_dVb = 0.0; dCclm_dVd = dCclm_dVg = dCclm_dVb = 0.0; } /* Calculate VADIBL */ if (pParam->BSIM4v6thetaRout > MIN_EXP) { T8 = Abulk * Vdsat; T0 = Vgst2Vtm * T8; dT0_dVg = Vgst2Vtm * Abulk * dVdsat_dVg + T8 + Vgst2Vtm * Vdsat * dAbulk_dVg; dT0_dVb = Vgst2Vtm * (dAbulk_dVb * Vdsat + Abulk * dVdsat_dVb); dT0_dVd = Vgst2Vtm * Abulk * dVdsat_dVd; T1 = Vgst2Vtm + T8; dT1_dVg = 1.0 + Abulk * dVdsat_dVg + Vdsat * dAbulk_dVg; dT1_dVb = Abulk * dVdsat_dVb + dAbulk_dVb * Vdsat; dT1_dVd = Abulk * dVdsat_dVd; T9 = T1 * T1; T2 = pParam->BSIM4v6thetaRout; VADIBL = (Vgst2Vtm - T0 / T1) / T2; dVADIBL_dVg = (1.0 - dT0_dVg / T1 + T0 * dT1_dVg / T9) / T2; dVADIBL_dVb = (-dT0_dVb / T1 + T0 * dT1_dVb / T9) / T2; dVADIBL_dVd = (-dT0_dVd / T1 + T0 * dT1_dVd / T9) / T2; T7 = pParam->BSIM4v6pdiblb * Vbseff; if (T7 >= -0.9) { T3 = 1.0 / (1.0 + T7); VADIBL *= T3; dVADIBL_dVg *= T3; dVADIBL_dVb = (dVADIBL_dVb - VADIBL * pParam->BSIM4v6pdiblb) * T3; dVADIBL_dVd *= T3; } else { T4 = 1.0 / (0.8 + T7); T3 = (17.0 + 20.0 * T7) * T4; dVADIBL_dVg *= T3; dVADIBL_dVb = dVADIBL_dVb * T3 - VADIBL * pParam->BSIM4v6pdiblb * T4 * T4; dVADIBL_dVd *= T3; VADIBL *= T3; } dVADIBL_dVg = dVADIBL_dVg * PvagTerm + VADIBL * dPvagTerm_dVg; dVADIBL_dVb = dVADIBL_dVb * PvagTerm + VADIBL * dPvagTerm_dVb; dVADIBL_dVd = dVADIBL_dVd * PvagTerm + VADIBL * dPvagTerm_dVd; VADIBL *= PvagTerm; } else { VADIBL = MAX_EXP; dVADIBL_dVd = dVADIBL_dVg = dVADIBL_dVb = 0.0; } /* Calculate Va */ Va = Vasat + VACLM; dVa_dVg = dVasat_dVg + dVACLM_dVg; dVa_dVb = dVasat_dVb + dVACLM_dVb; dVa_dVd = dVasat_dVd + dVACLM_dVd; /* Calculate VADITS */ T0 = pParam->BSIM4v6pditsd * Vds; if (T0 > EXP_THRESHOLD) { T1 = MAX_EXP; dT1_dVd = 0; } else { T1 = exp(T0); dT1_dVd = T1 * pParam->BSIM4v6pditsd; } if (pParam->BSIM4v6pdits > MIN_EXP) { T2 = 1.0 + model->BSIM4v6pditsl * Leff; VADITS = (1.0 + T2 * T1) / pParam->BSIM4v6pdits; dVADITS_dVg = VADITS * dFP_dVg; dVADITS_dVd = FP * T2 * dT1_dVd / pParam->BSIM4v6pdits; VADITS *= FP; } else { VADITS = MAX_EXP; dVADITS_dVg = dVADITS_dVd = 0; } /* Calculate VASCBE */ if ((pParam->BSIM4v6pscbe2 > 0.0)&&(pParam->BSIM4v6pscbe1>=0.0)) /*4.6.2*/ { if (diffVds > pParam->BSIM4v6pscbe1 * pParam->BSIM4v6litl / EXP_THRESHOLD) { T0 = pParam->BSIM4v6pscbe1 * pParam->BSIM4v6litl / diffVds; VASCBE = Leff * exp(T0) / pParam->BSIM4v6pscbe2; T1 = T0 * VASCBE / diffVds; dVASCBE_dVg = T1 * dVdseff_dVg; dVASCBE_dVd = -T1 * (1.0 - dVdseff_dVd); dVASCBE_dVb = T1 * dVdseff_dVb; } else { VASCBE = MAX_EXP * Leff/pParam->BSIM4v6pscbe2; dVASCBE_dVg = dVASCBE_dVd = dVASCBE_dVb = 0.0; } } else { VASCBE = MAX_EXP; dVASCBE_dVg = dVASCBE_dVd = dVASCBE_dVb = 0.0; } /* Add DIBL to Ids */ T9 = diffVds / VADIBL; T0 = 1.0 + T9; Idsa = Idl * T0; dIdsa_dVg = T0 * dIdl_dVg - Idl * (dVdseff_dVg + T9 * dVADIBL_dVg) / VADIBL; dIdsa_dVd = T0 * dIdl_dVd + Idl * (1.0 - dVdseff_dVd - T9 * dVADIBL_dVd) / VADIBL; dIdsa_dVb = T0 * dIdl_dVb - Idl * (dVdseff_dVb + T9 * dVADIBL_dVb) / VADIBL; /* Add DITS to Ids */ T9 = diffVds / VADITS; T0 = 1.0 + T9; dIdsa_dVg = T0 * dIdsa_dVg - Idsa * (dVdseff_dVg + T9 * dVADITS_dVg) / VADITS; dIdsa_dVd = T0 * dIdsa_dVd + Idsa * (1.0 - dVdseff_dVd - T9 * dVADITS_dVd) / VADITS; dIdsa_dVb = T0 * dIdsa_dVb - Idsa * dVdseff_dVb / VADITS; Idsa *= T0; /* Add CLM to Ids */ T0 = log(Va / Vasat); dT0_dVg = dVa_dVg / Va - dVasat_dVg / Vasat; dT0_dVb = dVa_dVb / Va - dVasat_dVb / Vasat; dT0_dVd = dVa_dVd / Va - dVasat_dVd / Vasat; T1 = T0 / Cclm; T9 = 1.0 + T1; dT9_dVg = (dT0_dVg - T1 * dCclm_dVg) / Cclm; dT9_dVb = (dT0_dVb - T1 * dCclm_dVb) / Cclm; dT9_dVd = (dT0_dVd - T1 * dCclm_dVd) / Cclm; dIdsa_dVg = dIdsa_dVg * T9 + Idsa * dT9_dVg; dIdsa_dVb = dIdsa_dVb * T9 + Idsa * dT9_dVb; dIdsa_dVd = dIdsa_dVd * T9 + Idsa * dT9_dVd; Idsa *= T9; /* Substrate current begins */ tmp = pParam->BSIM4v6alpha0 + pParam->BSIM4v6alpha1 * Leff; if ((tmp <= 0.0) || (pParam->BSIM4v6beta0 <= 0.0)) { Isub = Gbd = Gbb = Gbg = 0.0; } else { T2 = tmp / Leff; if (diffVds > pParam->BSIM4v6beta0 / EXP_THRESHOLD) { T0 = -pParam->BSIM4v6beta0 / diffVds; T1 = T2 * diffVds * exp(T0); T3 = T1 / diffVds * (T0 - 1.0); dT1_dVg = T3 * dVdseff_dVg; dT1_dVd = T3 * (dVdseff_dVd - 1.0); dT1_dVb = T3 * dVdseff_dVb; } else { T3 = T2 * MIN_EXP; T1 = T3 * diffVds; dT1_dVg = -T3 * dVdseff_dVg; dT1_dVd = T3 * (1.0 - dVdseff_dVd); dT1_dVb = -T3 * dVdseff_dVb; } T4 = Idsa * Vdseff; Isub = T1 * T4; Gbg = T1 * (dIdsa_dVg * Vdseff + Idsa * dVdseff_dVg) + T4 * dT1_dVg; Gbd = T1 * (dIdsa_dVd * Vdseff + Idsa * dVdseff_dVd) + T4 * dT1_dVd; Gbb = T1 * (dIdsa_dVb * Vdseff + Idsa * dVdseff_dVb) + T4 * dT1_dVb; Gbd += Gbg * dVgsteff_dVd; Gbb += Gbg * dVgsteff_dVb; Gbg *= dVgsteff_dVg; Gbb *= dVbseff_dVb; } here->BSIM4v6csub = Isub; here->BSIM4v6gbbs = Gbb; here->BSIM4v6gbgs = Gbg; here->BSIM4v6gbds = Gbd; /* Add SCBE to Ids */ T9 = diffVds / VASCBE; T0 = 1.0 + T9; Ids = Idsa * T0; Gm = T0 * dIdsa_dVg - Idsa * (dVdseff_dVg + T9 * dVASCBE_dVg) / VASCBE; Gds = T0 * dIdsa_dVd + Idsa * (1.0 - dVdseff_dVd - T9 * dVASCBE_dVd) / VASCBE; Gmb = T0 * dIdsa_dVb - Idsa * (dVdseff_dVb + T9 * dVASCBE_dVb) / VASCBE; tmp1 = Gds + Gm * dVgsteff_dVd; tmp2 = Gmb + Gm * dVgsteff_dVb; tmp3 = Gm; Gm = (Ids * dVdseff_dVg + Vdseff * tmp3) * dVgsteff_dVg; Gds = Ids * (dVdseff_dVd + dVdseff_dVg * dVgsteff_dVd) + Vdseff * tmp1; Gmb = (Ids * (dVdseff_dVb + dVdseff_dVg * dVgsteff_dVb) + Vdseff * tmp2) * dVbseff_dVb; cdrain = Ids * Vdseff; /* Source End Velocity Limit */ if((model->BSIM4v6vtlGiven) && (model->BSIM4v6vtl > 0.0) ) { T12 = 1.0 / Leff / CoxeffWovL; T11 = T12 / Vgsteff; T10 = -T11 / Vgsteff; vs = cdrain * T11; /* vs */ dvs_dVg = Gm * T11 + cdrain * T10 * dVgsteff_dVg; dvs_dVd = Gds * T11 + cdrain * T10 * dVgsteff_dVd; dvs_dVb = Gmb * T11 + cdrain * T10 * dVgsteff_dVb; T0 = 2 * MM; T1 = vs / (pParam->BSIM4v6vtl * pParam->BSIM4v6tfactor); if(T1 > 0.0) { T2 = 1.0 + exp(T0 * log(T1)); T3 = (T2 - 1.0) * T0 / vs; Fsevl = 1.0 / exp(log(T2)/ T0); dT2_dVg = T3 * dvs_dVg; dT2_dVd = T3 * dvs_dVd; dT2_dVb = T3 * dvs_dVb; T4 = -1.0 / T0 * Fsevl / T2; dFsevl_dVg = T4 * dT2_dVg; dFsevl_dVd = T4 * dT2_dVd; dFsevl_dVb = T4 * dT2_dVb; } else { Fsevl = 1.0; dFsevl_dVg = 0.0; dFsevl_dVd = 0.0; dFsevl_dVb = 0.0; } Gm *=Fsevl; Gm += cdrain * dFsevl_dVg; Gmb *=Fsevl; Gmb += cdrain * dFsevl_dVb; Gds *=Fsevl; Gds += cdrain * dFsevl_dVd; cdrain *= Fsevl; } here->BSIM4v6gds = Gds; here->BSIM4v6gm = Gm; here->BSIM4v6gmbs = Gmb; here->BSIM4v6IdovVds = Ids; if( here->BSIM4v6IdovVds <= 1.0e-9) here->BSIM4v6IdovVds = 1.0e-9; /* Calculate Rg */ if ((here->BSIM4v6rgateMod > 1) || (here->BSIM4v6trnqsMod != 0) || (here->BSIM4v6acnqsMod != 0)) { T9 = pParam->BSIM4v6xrcrg2 * model->BSIM4v6vtm; T0 = T9 * beta; dT0_dVd = (dbeta_dVd + dbeta_dVg * dVgsteff_dVd) * T9; dT0_dVb = (dbeta_dVb + dbeta_dVg * dVgsteff_dVb) * T9; dT0_dVg = dbeta_dVg * T9; here->BSIM4v6gcrg = pParam->BSIM4v6xrcrg1 * ( T0 + Ids); here->BSIM4v6gcrgd = pParam->BSIM4v6xrcrg1 * (dT0_dVd + tmp1); here->BSIM4v6gcrgb = pParam->BSIM4v6xrcrg1 * (dT0_dVb + tmp2) * dVbseff_dVb; here->BSIM4v6gcrgg = pParam->BSIM4v6xrcrg1 * (dT0_dVg + tmp3) * dVgsteff_dVg; if (here->BSIM4v6nf != 1.0) { here->BSIM4v6gcrg *= here->BSIM4v6nf; here->BSIM4v6gcrgg *= here->BSIM4v6nf; here->BSIM4v6gcrgd *= here->BSIM4v6nf; here->BSIM4v6gcrgb *= here->BSIM4v6nf; } if (here->BSIM4v6rgateMod == 2) { T10 = here->BSIM4v6grgeltd * here->BSIM4v6grgeltd; T11 = here->BSIM4v6grgeltd + here->BSIM4v6gcrg; here->BSIM4v6gcrg = here->BSIM4v6grgeltd * here->BSIM4v6gcrg / T11; T12 = T10 / T11 / T11; here->BSIM4v6gcrgg *= T12; here->BSIM4v6gcrgd *= T12; here->BSIM4v6gcrgb *= T12; } here->BSIM4v6gcrgs = -(here->BSIM4v6gcrgg + here->BSIM4v6gcrgd + here->BSIM4v6gcrgb); } /* Calculate bias-dependent external S/D resistance */ if (model->BSIM4v6rdsMod) { /* Rs(V) */ T0 = vgs - pParam->BSIM4v6vfbsd; T1 = sqrt(T0 * T0 + 1.0e-4); vgs_eff = 0.5 * (T0 + T1); dvgs_eff_dvg = vgs_eff / T1; T0 = 1.0 + pParam->BSIM4v6prwg * vgs_eff; dT0_dvg = -pParam->BSIM4v6prwg / T0 / T0 * dvgs_eff_dvg; T1 = -pParam->BSIM4v6prwb * vbs; dT1_dvb = -pParam->BSIM4v6prwb; T2 = 1.0 / T0 + T1; T3 = T2 + sqrt(T2 * T2 + 0.01); dT3_dvg = T3 / (T3 - T2); dT3_dvb = dT3_dvg * dT1_dvb; dT3_dvg *= dT0_dvg; T4 = pParam->BSIM4v6rs0 * 0.5; Rs = pParam->BSIM4v6rswmin + T3 * T4; dRs_dvg = T4 * dT3_dvg; dRs_dvb = T4 * dT3_dvb; T0 = 1.0 + here->BSIM4v6sourceConductance * Rs; here->BSIM4v6gstot = here->BSIM4v6sourceConductance / T0; T0 = -here->BSIM4v6gstot * here->BSIM4v6gstot; dgstot_dvd = 0.0; /* place holder */ dgstot_dvg = T0 * dRs_dvg; dgstot_dvb = T0 * dRs_dvb; dgstot_dvs = -(dgstot_dvg + dgstot_dvb + dgstot_dvd); /* Rd(V) */ T0 = vgd - pParam->BSIM4v6vfbsd; T1 = sqrt(T0 * T0 + 1.0e-4); vgd_eff = 0.5 * (T0 + T1); dvgd_eff_dvg = vgd_eff / T1; T0 = 1.0 + pParam->BSIM4v6prwg * vgd_eff; dT0_dvg = -pParam->BSIM4v6prwg / T0 / T0 * dvgd_eff_dvg; T1 = -pParam->BSIM4v6prwb * vbd; dT1_dvb = -pParam->BSIM4v6prwb; T2 = 1.0 / T0 + T1; T3 = T2 + sqrt(T2 * T2 + 0.01); dT3_dvg = T3 / (T3 - T2); dT3_dvb = dT3_dvg * dT1_dvb; dT3_dvg *= dT0_dvg; T4 = pParam->BSIM4v6rd0 * 0.5; Rd = pParam->BSIM4v6rdwmin + T3 * T4; dRd_dvg = T4 * dT3_dvg; dRd_dvb = T4 * dT3_dvb; T0 = 1.0 + here->BSIM4v6drainConductance * Rd; here->BSIM4v6gdtot = here->BSIM4v6drainConductance / T0; T0 = -here->BSIM4v6gdtot * here->BSIM4v6gdtot; dgdtot_dvs = 0.0; dgdtot_dvg = T0 * dRd_dvg; dgdtot_dvb = T0 * dRd_dvb; dgdtot_dvd = -(dgdtot_dvg + dgdtot_dvb + dgdtot_dvs); here->BSIM4v6gstotd = vses * dgstot_dvd; here->BSIM4v6gstotg = vses * dgstot_dvg; here->BSIM4v6gstots = vses * dgstot_dvs; here->BSIM4v6gstotb = vses * dgstot_dvb; T2 = vdes - vds; here->BSIM4v6gdtotd = T2 * dgdtot_dvd; here->BSIM4v6gdtotg = T2 * dgdtot_dvg; here->BSIM4v6gdtots = T2 * dgdtot_dvs; here->BSIM4v6gdtotb = T2 * dgdtot_dvb; } else /* WDLiu: for bypass */ { here->BSIM4v6gstot = here->BSIM4v6gstotd = here->BSIM4v6gstotg = 0.0; here->BSIM4v6gstots = here->BSIM4v6gstotb = 0.0; here->BSIM4v6gdtot = here->BSIM4v6gdtotd = here->BSIM4v6gdtotg = 0.0; here->BSIM4v6gdtots = here->BSIM4v6gdtotb = 0.0; } /* Calculate GIDL current */ vgs_eff = here->BSIM4v6vgs_eff; dvgs_eff_dvg = here->BSIM4v6dvgs_eff_dvg; if(model->BSIM4v6mtrlMod == 0) T0 = 3.0 * toxe; else T0 = model->BSIM4v6epsrsub * toxe / epsrox; if(model->BSIM4v6mtrlMod ==0) T1 = (vds - vgs_eff - pParam->BSIM4v6egidl ) / T0; else T1 = (vds - vgs_eff - pParam->BSIM4v6egidl + pParam->BSIM4v6vfbsd) / T0; if ((pParam->BSIM4v6agidl <= 0.0) || (pParam->BSIM4v6bgidl <= 0.0) || (T1 <= 0.0) || (pParam->BSIM4v6cgidl <= 0.0) || (vbd > 0.0)) Igidl = Ggidld = Ggidlg = Ggidlb = 0.0; else { dT1_dVd = 1.0 / T0; dT1_dVg = -dvgs_eff_dvg * dT1_dVd; T2 = pParam->BSIM4v6bgidl / T1; if (T2 < 100.0) { Igidl = pParam->BSIM4v6agidl * pParam->BSIM4v6weffCJ * T1 * exp(-T2); T3 = Igidl * (1.0 + T2) / T1; Ggidld = T3 * dT1_dVd; Ggidlg = T3 * dT1_dVg; } else { Igidl = pParam->BSIM4v6agidl * pParam->BSIM4v6weffCJ * 3.720075976e-44; Ggidld = Igidl * dT1_dVd; Ggidlg = Igidl * dT1_dVg; Igidl *= T1; } T4 = vbd * vbd; T5 = -vbd * T4; T6 = pParam->BSIM4v6cgidl + T5; T7 = T5 / T6; T8 = 3.0 * pParam->BSIM4v6cgidl * T4 / T6 / T6; Ggidld = Ggidld * T7 + Igidl * T8; Ggidlg = Ggidlg * T7; Ggidlb = -Igidl * T8; Igidl *= T7; } here->BSIM4v6Igidl = Igidl; here->BSIM4v6ggidld = Ggidld; here->BSIM4v6ggidlg = Ggidlg; here->BSIM4v6ggidlb = Ggidlb; /* Calculate GISL current */ vgd_eff = here->BSIM4v6vgd_eff; dvgd_eff_dvg = here->BSIM4v6dvgd_eff_dvg; if(model->BSIM4v6mtrlMod ==0) T1 = (-vds - vgd_eff - pParam->BSIM4v6egisl ) / T0; else T1 = (-vds - vgd_eff - pParam->BSIM4v6egisl + pParam->BSIM4v6vfbsd ) / T0; if ((pParam->BSIM4v6agisl <= 0.0) || (pParam->BSIM4v6bgisl <= 0.0) || (T1 <= 0.0) || (pParam->BSIM4v6cgisl <= 0.0) || (vbs > 0.0)) Igisl = Ggisls = Ggislg = Ggislb = 0.0; else { dT1_dVd = 1.0 / T0; dT1_dVg = -dvgd_eff_dvg * dT1_dVd; T2 = pParam->BSIM4v6bgisl / T1; if (T2 < 100.0) { Igisl = pParam->BSIM4v6agisl * pParam->BSIM4v6weffCJ * T1 * exp(-T2); T3 = Igisl * (1.0 + T2) / T1; Ggisls = T3 * dT1_dVd; Ggislg = T3 * dT1_dVg; } else { Igisl = pParam->BSIM4v6agisl * pParam->BSIM4v6weffCJ * 3.720075976e-44; Ggisls = Igisl * dT1_dVd; Ggislg = Igisl * dT1_dVg; Igisl *= T1; } T4 = vbs * vbs; T5 = -vbs * T4; T6 = pParam->BSIM4v6cgisl + T5; T7 = T5 / T6; T8 = 3.0 * pParam->BSIM4v6cgisl * T4 / T6 / T6; Ggisls = Ggisls * T7 + Igisl * T8; Ggislg = Ggislg * T7; Ggislb = -Igisl * T8; Igisl *= T7; } here->BSIM4v6Igisl = Igisl; here->BSIM4v6ggisls = Ggisls; here->BSIM4v6ggislg = Ggislg; here->BSIM4v6ggislb = Ggislb; /* Calculate gate tunneling current */ if ((model->BSIM4v6igcMod != 0) || (model->BSIM4v6igbMod != 0)) { Vfb = here->BSIM4v6vfbzb; V3 = Vfb - Vgs_eff + Vbseff - DELTA_3; if (Vfb <= 0.0) T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * Vfb); else T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * Vfb); T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = Vfb - 0.5 * (V3 + T0); dVfbeff_dVg = T1 * dVgs_eff_dVg; dVfbeff_dVb = -T1; /* WDLiu: -No surprise? No. -Good! */ Voxacc = Vfb - Vfbeff; dVoxacc_dVg = -dVfbeff_dVg; dVoxacc_dVb = -dVfbeff_dVb; if (Voxacc < 0.0) /* WDLiu: Avoiding numerical instability. */ Voxacc = dVoxacc_dVg = dVoxacc_dVb = 0.0; T0 = 0.5 * pParam->BSIM4v6k1ox; T3 = Vgs_eff - Vfbeff - Vbseff - Vgsteff; if (pParam->BSIM4v6k1ox == 0.0) Voxdepinv = dVoxdepinv_dVg = dVoxdepinv_dVd = dVoxdepinv_dVb = 0.0; else if (T3 < 0.0) { Voxdepinv = -T3; dVoxdepinv_dVg = -dVgs_eff_dVg + dVfbeff_dVg + dVgsteff_dVg; dVoxdepinv_dVd = dVgsteff_dVd; dVoxdepinv_dVb = dVfbeff_dVb + 1.0 + dVgsteff_dVb; } else { T1 = sqrt(T0 * T0 + T3); T2 = T0 / T1; Voxdepinv = pParam->BSIM4v6k1ox * (T1 - T0); dVoxdepinv_dVg = T2 * (dVgs_eff_dVg - dVfbeff_dVg - dVgsteff_dVg); dVoxdepinv_dVd = -T2 * dVgsteff_dVd; dVoxdepinv_dVb = -T2 * (dVfbeff_dVb + 1.0 + dVgsteff_dVb); } Voxdepinv += Vgsteff; dVoxdepinv_dVg += dVgsteff_dVg; dVoxdepinv_dVd += dVgsteff_dVd; dVoxdepinv_dVb += dVgsteff_dVb; } if(model->BSIM4v6tempMod < 2) tmp = Vtm; else /* model->BSIM4v6tempMod = 2 , 3*/ tmp = Vtm0; if (model->BSIM4v6igcMod) { T0 = tmp * pParam->BSIM4v6nigc; if(model->BSIM4v6igcMod == 1) { VxNVt = (Vgs_eff - model->BSIM4v6type * here->BSIM4v6vth0) / T0; if (VxNVt > EXP_THRESHOLD) { Vaux = Vgs_eff - model->BSIM4v6type * here->BSIM4v6vth0; dVaux_dVg = dVgs_eff_dVg; dVaux_dVd = 0.0; dVaux_dVb = 0.0; } } else if (model->BSIM4v6igcMod == 2) { VxNVt = (Vgs_eff - here->BSIM4v6von) / T0; if (VxNVt > EXP_THRESHOLD) { Vaux = Vgs_eff - here->BSIM4v6von; dVaux_dVg = dVgs_eff_dVg; dVaux_dVd = -dVth_dVd; dVaux_dVb = -dVth_dVb; } } if (VxNVt < -EXP_THRESHOLD) { Vaux = T0 * log(1.0 + MIN_EXP); dVaux_dVg = dVaux_dVd = dVaux_dVb = 0.0; } else if ((VxNVt >= -EXP_THRESHOLD) && (VxNVt <= EXP_THRESHOLD)) { ExpVxNVt = exp(VxNVt); Vaux = T0 * log(1.0 + ExpVxNVt); dVaux_dVg = ExpVxNVt / (1.0 + ExpVxNVt); if(model->BSIM4v6igcMod == 1) { dVaux_dVd = 0.0; dVaux_dVb = 0.0; } else if (model->BSIM4v6igcMod == 2) { dVaux_dVd = -dVgs_eff_dVg * dVth_dVd; dVaux_dVb = -dVgs_eff_dVg * dVth_dVb; } dVaux_dVg *= dVgs_eff_dVg; } T2 = Vgs_eff * Vaux; dT2_dVg = dVgs_eff_dVg * Vaux + Vgs_eff * dVaux_dVg; dT2_dVd = Vgs_eff * dVaux_dVd; dT2_dVb = Vgs_eff * dVaux_dVb; T11 = pParam->BSIM4v6Aechvb; T12 = pParam->BSIM4v6Bechvb; T3 = pParam->BSIM4v6aigc * pParam->BSIM4v6cigc - pParam->BSIM4v6bigc; T4 = pParam->BSIM4v6bigc * pParam->BSIM4v6cigc; T5 = T12 * (pParam->BSIM4v6aigc + T3 * Voxdepinv - T4 * Voxdepinv * Voxdepinv); if (T5 > EXP_THRESHOLD) { T6 = MAX_EXP; dT6_dVg = dT6_dVd = dT6_dVb = 0.0; } else if (T5 < -EXP_THRESHOLD) { T6 = MIN_EXP; dT6_dVg = dT6_dVd = dT6_dVb = 0.0; } else { T6 = exp(T5); dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * Voxdepinv); dT6_dVd = dT6_dVg * dVoxdepinv_dVd; dT6_dVb = dT6_dVg * dVoxdepinv_dVb; dT6_dVg *= dVoxdepinv_dVg; } Igc = T11 * T2 * T6; dIgc_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg); dIgc_dVd = T11 * (T2 * dT6_dVd + T6 * dT2_dVd); dIgc_dVb = T11 * (T2 * dT6_dVb + T6 * dT2_dVb); if (model->BSIM4v6pigcdGiven) { Pigcd = pParam->BSIM4v6pigcd; dPigcd_dVg = dPigcd_dVd = dPigcd_dVb = 0.0; } else { T11 = pParam->BSIM4v6Bechvb * toxe; T12 = Vgsteff + 1.0e-20; T13 = T11 / T12 / T12; T14 = -T13 / T12; Pigcd = T13 * (1.0 - 0.5 * Vdseff / T12); dPigcd_dVg = T14 * (2.0 + 0.5 * (dVdseff_dVg - 3.0 * Vdseff / T12)); dPigcd_dVd = 0.5 * T14 * dVdseff_dVd; dPigcd_dVb = 0.5 * T14 * dVdseff_dVb; } T7 = -Pigcd * Vdseff; /* bugfix */ dT7_dVg = -Vdseff * dPigcd_dVg - Pigcd * dVdseff_dVg; dT7_dVd = -Vdseff * dPigcd_dVd - Pigcd * dVdseff_dVd + dT7_dVg * dVgsteff_dVd; dT7_dVb = -Vdseff * dPigcd_dVb - Pigcd * dVdseff_dVb + dT7_dVg * dVgsteff_dVb; dT7_dVg *= dVgsteff_dVg; dT7_dVb *= dVbseff_dVb; T8 = T7 * T7 + 2.0e-4; dT8_dVg = 2.0 * T7; dT8_dVd = dT8_dVg * dT7_dVd; dT8_dVb = dT8_dVg * dT7_dVb; dT8_dVg *= dT7_dVg; if (T7 > EXP_THRESHOLD) { T9 = MAX_EXP; dT9_dVg = dT9_dVd = dT9_dVb = 0.0; } else if (T7 < -EXP_THRESHOLD) { T9 = MIN_EXP; dT9_dVg = dT9_dVd = dT9_dVb = 0.0; } else { T9 = exp(T7); dT9_dVg = T9 * dT7_dVg; dT9_dVd = T9 * dT7_dVd; dT9_dVb = T9 * dT7_dVb; } T0 = T8 * T8; T1 = T9 - 1.0 + 1.0e-4; T10 = (T1 - T7) / T8; dT10_dVg = (dT9_dVg - dT7_dVg - T10 * dT8_dVg) / T8; dT10_dVd = (dT9_dVd - dT7_dVd - T10 * dT8_dVd) / T8; dT10_dVb = (dT9_dVb - dT7_dVb - T10 * dT8_dVb) / T8; Igcs = Igc * T10; dIgcs_dVg = dIgc_dVg * T10 + Igc * dT10_dVg; dIgcs_dVd = dIgc_dVd * T10 + Igc * dT10_dVd; dIgcs_dVb = dIgc_dVb * T10 + Igc * dT10_dVb; T1 = T9 - 1.0 - 1.0e-4; T10 = (T7 * T9 - T1) / T8; dT10_dVg = (dT7_dVg * T9 + (T7 - 1.0) * dT9_dVg - T10 * dT8_dVg) / T8; dT10_dVd = (dT7_dVd * T9 + (T7 - 1.0) * dT9_dVd - T10 * dT8_dVd) / T8; dT10_dVb = (dT7_dVb * T9 + (T7 - 1.0) * dT9_dVb - T10 * dT8_dVb) / T8; Igcd = Igc * T10; dIgcd_dVg = dIgc_dVg * T10 + Igc * dT10_dVg; dIgcd_dVd = dIgc_dVd * T10 + Igc * dT10_dVd; dIgcd_dVb = dIgc_dVb * T10 + Igc * dT10_dVb; here->BSIM4v6Igcs = Igcs; here->BSIM4v6gIgcsg = dIgcs_dVg; here->BSIM4v6gIgcsd = dIgcs_dVd; here->BSIM4v6gIgcsb = dIgcs_dVb * dVbseff_dVb; here->BSIM4v6Igcd = Igcd; here->BSIM4v6gIgcdg = dIgcd_dVg; here->BSIM4v6gIgcdd = dIgcd_dVd; here->BSIM4v6gIgcdb = dIgcd_dVb * dVbseff_dVb; T0 = vgs - (pParam->BSIM4v6vfbsd + pParam->BSIM4v6vfbsdoff); vgs_eff = sqrt(T0 * T0 + 1.0e-4); dvgs_eff_dvg = T0 / vgs_eff; T2 = vgs * vgs_eff; dT2_dVg = vgs * dvgs_eff_dvg + vgs_eff; T11 = pParam->BSIM4v6AechvbEdgeS; T12 = pParam->BSIM4v6BechvbEdge; T3 = pParam->BSIM4v6aigs * pParam->BSIM4v6cigs - pParam->BSIM4v6bigs; T4 = pParam->BSIM4v6bigs * pParam->BSIM4v6cigs; T5 = T12 * (pParam->BSIM4v6aigs + T3 * vgs_eff - T4 * vgs_eff * vgs_eff); if (T5 > EXP_THRESHOLD) { T6 = MAX_EXP; dT6_dVg = 0.0; } else if (T5 < -EXP_THRESHOLD) { T6 = MIN_EXP; dT6_dVg = 0.0; } else { T6 = exp(T5); dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * vgs_eff) * dvgs_eff_dvg; } Igs = T11 * T2 * T6; dIgs_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg); dIgs_dVs = -dIgs_dVg; T0 = vgd - (pParam->BSIM4v6vfbsd + pParam->BSIM4v6vfbsdoff); vgd_eff = sqrt(T0 * T0 + 1.0e-4); dvgd_eff_dvg = T0 / vgd_eff; T2 = vgd * vgd_eff; dT2_dVg = vgd * dvgd_eff_dvg + vgd_eff; T11 = pParam->BSIM4v6AechvbEdgeD; T3 = pParam->BSIM4v6aigd * pParam->BSIM4v6cigd - pParam->BSIM4v6bigd; T4 = pParam->BSIM4v6bigd * pParam->BSIM4v6cigd; T5 = T12 * (pParam->BSIM4v6aigd + T3 * vgd_eff - T4 * vgd_eff * vgd_eff); if (T5 > EXP_THRESHOLD) { T6 = MAX_EXP; dT6_dVg = 0.0; } else if (T5 < -EXP_THRESHOLD) { T6 = MIN_EXP; dT6_dVg = 0.0; } else { T6 = exp(T5); dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * vgd_eff) * dvgd_eff_dvg; } Igd = T11 * T2 * T6; dIgd_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg); dIgd_dVd = -dIgd_dVg; here->BSIM4v6Igs = Igs; here->BSIM4v6gIgsg = dIgs_dVg; here->BSIM4v6gIgss = dIgs_dVs; here->BSIM4v6Igd = Igd; here->BSIM4v6gIgdg = dIgd_dVg; here->BSIM4v6gIgdd = dIgd_dVd; } else { here->BSIM4v6Igcs = here->BSIM4v6gIgcsg = here->BSIM4v6gIgcsd = here->BSIM4v6gIgcsb = 0.0; here->BSIM4v6Igcd = here->BSIM4v6gIgcdg = here->BSIM4v6gIgcdd = here->BSIM4v6gIgcdb = 0.0; here->BSIM4v6Igs = here->BSIM4v6gIgsg = here->BSIM4v6gIgss = 0.0; here->BSIM4v6Igd = here->BSIM4v6gIgdg = here->BSIM4v6gIgdd = 0.0; } if (model->BSIM4v6igbMod) { T0 = tmp * pParam->BSIM4v6nigbacc; T1 = -Vgs_eff + Vbseff + Vfb; VxNVt = T1 / T0; if (VxNVt > EXP_THRESHOLD) { Vaux = T1; dVaux_dVg = -dVgs_eff_dVg; dVaux_dVb = 1.0; } else if (VxNVt < -EXP_THRESHOLD) { Vaux = T0 * log(1.0 + MIN_EXP); dVaux_dVg = dVaux_dVb = 0.0; } else { ExpVxNVt = exp(VxNVt); Vaux = T0 * log(1.0 + ExpVxNVt); dVaux_dVb = ExpVxNVt / (1.0 + ExpVxNVt); dVaux_dVg = -dVaux_dVb * dVgs_eff_dVg; } T2 = (Vgs_eff - Vbseff) * Vaux; dT2_dVg = dVgs_eff_dVg * Vaux + (Vgs_eff - Vbseff) * dVaux_dVg; dT2_dVb = -Vaux + (Vgs_eff - Vbseff) * dVaux_dVb; T11 = 4.97232e-7 * pParam->BSIM4v6weff * pParam->BSIM4v6leff * pParam->BSIM4v6ToxRatio; T12 = -7.45669e11 * toxe; T3 = pParam->BSIM4v6aigbacc * pParam->BSIM4v6cigbacc - pParam->BSIM4v6bigbacc; T4 = pParam->BSIM4v6bigbacc * pParam->BSIM4v6cigbacc; T5 = T12 * (pParam->BSIM4v6aigbacc + T3 * Voxacc - T4 * Voxacc * Voxacc); if (T5 > EXP_THRESHOLD) { T6 = MAX_EXP; dT6_dVg = dT6_dVb = 0.0; } else if (T5 < -EXP_THRESHOLD) { T6 = MIN_EXP; dT6_dVg = dT6_dVb = 0.0; } else { T6 = exp(T5); dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * Voxacc); dT6_dVb = dT6_dVg * dVoxacc_dVb; dT6_dVg *= dVoxacc_dVg; } Igbacc = T11 * T2 * T6; dIgbacc_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg); dIgbacc_dVb = T11 * (T2 * dT6_dVb + T6 * dT2_dVb); T0 = tmp * pParam->BSIM4v6nigbinv; T1 = Voxdepinv - pParam->BSIM4v6eigbinv; VxNVt = T1 / T0; if (VxNVt > EXP_THRESHOLD) { Vaux = T1; dVaux_dVg = dVoxdepinv_dVg; dVaux_dVd = dVoxdepinv_dVd; dVaux_dVb = dVoxdepinv_dVb; } else if (VxNVt < -EXP_THRESHOLD) { Vaux = T0 * log(1.0 + MIN_EXP); dVaux_dVg = dVaux_dVd = dVaux_dVb = 0.0; } else { ExpVxNVt = exp(VxNVt); Vaux = T0 * log(1.0 + ExpVxNVt); dVaux_dVg = ExpVxNVt / (1.0 + ExpVxNVt); dVaux_dVd = dVaux_dVg * dVoxdepinv_dVd; dVaux_dVb = dVaux_dVg * dVoxdepinv_dVb; dVaux_dVg *= dVoxdepinv_dVg; } T2 = (Vgs_eff - Vbseff) * Vaux; dT2_dVg = dVgs_eff_dVg * Vaux + (Vgs_eff - Vbseff) * dVaux_dVg; dT2_dVd = (Vgs_eff - Vbseff) * dVaux_dVd; dT2_dVb = -Vaux + (Vgs_eff - Vbseff) * dVaux_dVb; T11 *= 0.75610; T12 *= 1.31724; T3 = pParam->BSIM4v6aigbinv * pParam->BSIM4v6cigbinv - pParam->BSIM4v6bigbinv; T4 = pParam->BSIM4v6bigbinv * pParam->BSIM4v6cigbinv; T5 = T12 * (pParam->BSIM4v6aigbinv + T3 * Voxdepinv - T4 * Voxdepinv * Voxdepinv); if (T5 > EXP_THRESHOLD) { T6 = MAX_EXP; dT6_dVg = dT6_dVd = dT6_dVb = 0.0; } else if (T5 < -EXP_THRESHOLD) { T6 = MIN_EXP; dT6_dVg = dT6_dVd = dT6_dVb = 0.0; } else { T6 = exp(T5); dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * Voxdepinv); dT6_dVd = dT6_dVg * dVoxdepinv_dVd; dT6_dVb = dT6_dVg * dVoxdepinv_dVb; dT6_dVg *= dVoxdepinv_dVg; } Igbinv = T11 * T2 * T6; dIgbinv_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg); dIgbinv_dVd = T11 * (T2 * dT6_dVd + T6 * dT2_dVd); dIgbinv_dVb = T11 * (T2 * dT6_dVb + T6 * dT2_dVb); here->BSIM4v6Igb = Igbinv + Igbacc; here->BSIM4v6gIgbg = dIgbinv_dVg + dIgbacc_dVg; here->BSIM4v6gIgbd = dIgbinv_dVd; here->BSIM4v6gIgbb = (dIgbinv_dVb + dIgbacc_dVb) * dVbseff_dVb; } else { here->BSIM4v6Igb = here->BSIM4v6gIgbg = here->BSIM4v6gIgbd = here->BSIM4v6gIgbs = here->BSIM4v6gIgbb = 0.0; } /* End of Gate current */ if (here->BSIM4v6nf != 1.0) { cdrain *= here->BSIM4v6nf; here->BSIM4v6gds *= here->BSIM4v6nf; here->BSIM4v6gm *= here->BSIM4v6nf; here->BSIM4v6gmbs *= here->BSIM4v6nf; here->BSIM4v6IdovVds *= here->BSIM4v6nf; here->BSIM4v6gbbs *= here->BSIM4v6nf; here->BSIM4v6gbgs *= here->BSIM4v6nf; here->BSIM4v6gbds *= here->BSIM4v6nf; here->BSIM4v6csub *= here->BSIM4v6nf; here->BSIM4v6Igidl *= here->BSIM4v6nf; here->BSIM4v6ggidld *= here->BSIM4v6nf; here->BSIM4v6ggidlg *= here->BSIM4v6nf; here->BSIM4v6ggidlb *= here->BSIM4v6nf; here->BSIM4v6Igisl *= here->BSIM4v6nf; here->BSIM4v6ggisls *= here->BSIM4v6nf; here->BSIM4v6ggislg *= here->BSIM4v6nf; here->BSIM4v6ggislb *= here->BSIM4v6nf; here->BSIM4v6Igcs *= here->BSIM4v6nf; here->BSIM4v6gIgcsg *= here->BSIM4v6nf; here->BSIM4v6gIgcsd *= here->BSIM4v6nf; here->BSIM4v6gIgcsb *= here->BSIM4v6nf; here->BSIM4v6Igcd *= here->BSIM4v6nf; here->BSIM4v6gIgcdg *= here->BSIM4v6nf; here->BSIM4v6gIgcdd *= here->BSIM4v6nf; here->BSIM4v6gIgcdb *= here->BSIM4v6nf; here->BSIM4v6Igs *= here->BSIM4v6nf; here->BSIM4v6gIgsg *= here->BSIM4v6nf; here->BSIM4v6gIgss *= here->BSIM4v6nf; here->BSIM4v6Igd *= here->BSIM4v6nf; here->BSIM4v6gIgdg *= here->BSIM4v6nf; here->BSIM4v6gIgdd *= here->BSIM4v6nf; here->BSIM4v6Igb *= here->BSIM4v6nf; here->BSIM4v6gIgbg *= here->BSIM4v6nf; here->BSIM4v6gIgbd *= here->BSIM4v6nf; here->BSIM4v6gIgbb *= here->BSIM4v6nf; } here->BSIM4v6ggidls = -(here->BSIM4v6ggidld + here->BSIM4v6ggidlg + here->BSIM4v6ggidlb); here->BSIM4v6ggisld = -(here->BSIM4v6ggisls + here->BSIM4v6ggislg + here->BSIM4v6ggislb); here->BSIM4v6gIgbs = -(here->BSIM4v6gIgbg + here->BSIM4v6gIgbd + here->BSIM4v6gIgbb); here->BSIM4v6gIgcss = -(here->BSIM4v6gIgcsg + here->BSIM4v6gIgcsd + here->BSIM4v6gIgcsb); here->BSIM4v6gIgcds = -(here->BSIM4v6gIgcdg + here->BSIM4v6gIgcdd + here->BSIM4v6gIgcdb); here->BSIM4v6cd = cdrain; if (model->BSIM4v6tnoiMod == 0) { Abulk = Abulk0 * pParam->BSIM4v6abulkCVfactor; Vdsat = Vgsteff / Abulk; T0 = Vdsat - Vds - DELTA_4; T1 = sqrt(T0 * T0 + 4.0 * DELTA_4 * Vdsat); if (T0 >= 0.0) Vdseff = Vdsat - 0.5 * (T0 + T1); else { T3 = (DELTA_4 + DELTA_4) / (T1 - T0); T4 = 1.0 - T3; T5 = Vdsat * T3 / (T1 - T0); Vdseff = Vdsat * T4; } if (Vds == 0.0) Vdseff = 0.0; T0 = Abulk * Vdseff; T1 = 12.0 * (Vgsteff - 0.5 * T0 + 1.0e-20); T2 = Vdseff / T1; T3 = T0 * T2; here->BSIM4v6qinv = Coxeff * pParam->BSIM4v6weffCV * here->BSIM4v6nf * pParam->BSIM4v6leffCV * (Vgsteff - 0.5 * T0 + Abulk * T3); } /* * BSIM4v6 C-V begins */ if ((model->BSIM4v6xpart < 0) || (!ChargeComputationNeeded)) { qgate = qdrn = qsrc = qbulk = 0.0; here->BSIM4v6cggb = here->BSIM4v6cgsb = here->BSIM4v6cgdb = 0.0; here->BSIM4v6cdgb = here->BSIM4v6cdsb = here->BSIM4v6cddb = 0.0; here->BSIM4v6cbgb = here->BSIM4v6cbsb = here->BSIM4v6cbdb = 0.0; here->BSIM4v6csgb = here->BSIM4v6cssb = here->BSIM4v6csdb = 0.0; here->BSIM4v6cgbb = here->BSIM4v6csbb = here->BSIM4v6cdbb = here->BSIM4v6cbbb = 0.0; here->BSIM4v6cqdb = here->BSIM4v6cqsb = here->BSIM4v6cqgb = here->BSIM4v6cqbb = 0.0; here->BSIM4v6gtau = 0.0; goto finished; } else if (model->BSIM4v6capMod == 0) { if (Vbseff < 0.0) { VbseffCV = Vbs; /*4.6.2*/ dVbseffCV_dVb = 1.0; } else { VbseffCV = pParam->BSIM4v6phi - Phis; dVbseffCV_dVb = -dPhis_dVb * dVbseff_dVb; /*4.6.2*/ } Vfb = pParam->BSIM4v6vfbcv; Vth = Vfb + pParam->BSIM4v6phi + pParam->BSIM4v6k1ox * sqrtPhis; Vgst = Vgs_eff - Vth; dVth_dVb = pParam->BSIM4v6k1ox * dsqrtPhis_dVb *dVbseff_dVb; /*4.6.2*/ dVgst_dVb = -dVth_dVb; dVgst_dVg = dVgs_eff_dVg; CoxWL = model->BSIM4v6coxe * pParam->BSIM4v6weffCV * pParam->BSIM4v6leffCV * here->BSIM4v6nf; Arg1 = Vgs_eff - VbseffCV - Vfb; if (Arg1 <= 0.0) { qgate = CoxWL * Arg1; qbulk = -qgate; qdrn = 0.0; here->BSIM4v6cggb = CoxWL * dVgs_eff_dVg; here->BSIM4v6cgdb = 0.0; here->BSIM4v6cgsb = CoxWL * (dVbseffCV_dVb - dVgs_eff_dVg); here->BSIM4v6cdgb = 0.0; here->BSIM4v6cddb = 0.0; here->BSIM4v6cdsb = 0.0; here->BSIM4v6cbgb = -CoxWL * dVgs_eff_dVg; here->BSIM4v6cbdb = 0.0; here->BSIM4v6cbsb = -here->BSIM4v6cgsb; } /* Arg1 <= 0.0, end of accumulation */ else if (Vgst <= 0.0) { T1 = 0.5 * pParam->BSIM4v6k1ox; T2 = sqrt(T1 * T1 + Arg1); qgate = CoxWL * pParam->BSIM4v6k1ox * (T2 - T1); qbulk = -qgate; qdrn = 0.0; T0 = CoxWL * T1 / T2; here->BSIM4v6cggb = T0 * dVgs_eff_dVg; here->BSIM4v6cgdb = 0.0; here->BSIM4v6cgsb = T0 * (dVbseffCV_dVb - dVgs_eff_dVg); here->BSIM4v6cdgb = 0.0; here->BSIM4v6cddb = 0.0; here->BSIM4v6cdsb = 0.0; here->BSIM4v6cbgb = -here->BSIM4v6cggb; here->BSIM4v6cbdb = 0.0; here->BSIM4v6cbsb = -here->BSIM4v6cgsb; } /* Vgst <= 0.0, end of depletion */ else { One_Third_CoxWL = CoxWL / 3.0; Two_Third_CoxWL = 2.0 * One_Third_CoxWL; AbulkCV = Abulk0 * pParam->BSIM4v6abulkCVfactor; dAbulkCV_dVb = pParam->BSIM4v6abulkCVfactor * dAbulk0_dVb*dVbseff_dVb; dVdsat_dVg = 1.0 / AbulkCV; /*4.6.2*/ Vdsat = Vgst * dVdsat_dVg; dVdsat_dVb = - (Vdsat * dAbulkCV_dVb + dVth_dVb)* dVdsat_dVg; if (model->BSIM4v6xpart > 0.5) { /* 0/100 Charge partition model */ if (Vdsat <= Vds) { /* saturation region */ T1 = Vdsat / 3.0; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4v6phi - T1); T2 = -Two_Third_CoxWL * Vgst; qbulk = -(qgate + T2); qdrn = 0.0; here->BSIM4v6cggb = One_Third_CoxWL * (3.0 - dVdsat_dVg) * dVgs_eff_dVg; T2 = -One_Third_CoxWL * dVdsat_dVb; here->BSIM4v6cgsb = -(here->BSIM4v6cggb + T2); here->BSIM4v6cgdb = 0.0; here->BSIM4v6cdgb = 0.0; here->BSIM4v6cddb = 0.0; here->BSIM4v6cdsb = 0.0; here->BSIM4v6cbgb = -(here->BSIM4v6cggb - Two_Third_CoxWL * dVgs_eff_dVg); T3 = -(T2 + Two_Third_CoxWL * dVth_dVb); here->BSIM4v6cbsb = -(here->BSIM4v6cbgb + T3); here->BSIM4v6cbdb = 0.0; } else { /* linear region */ Alphaz = Vgst / Vdsat; T1 = 2.0 * Vdsat - Vds; T2 = Vds / (3.0 * T1); T3 = T2 * Vds; T9 = 0.25 * CoxWL; T4 = T9 * Alphaz; T7 = 2.0 * Vds - T1 - 3.0 * T3; T8 = T3 - T1 - 2.0 * Vds; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4v6phi - 0.5 * (Vds - T3)); T10 = T4 * T8; qdrn = T4 * T7; qbulk = -(qgate + qdrn + T10); T5 = T3 / T1; here->BSIM4v6cggb = CoxWL * (1.0 - T5 * dVdsat_dVg) * dVgs_eff_dVg; T11 = -CoxWL * T5 * dVdsat_dVb; here->BSIM4v6cgdb = CoxWL * (T2 - 0.5 + 0.5 * T5); here->BSIM4v6cgsb = -(here->BSIM4v6cggb + T11 + here->BSIM4v6cgdb); T6 = 1.0 / Vdsat; dAlphaz_dVg = T6 * (1.0 - Alphaz * dVdsat_dVg); dAlphaz_dVb = -T6 * (dVth_dVb + Alphaz * dVdsat_dVb); T7 = T9 * T7; T8 = T9 * T8; T9 = 2.0 * T4 * (1.0 - 3.0 * T5); here->BSIM4v6cdgb = (T7 * dAlphaz_dVg - T9 * dVdsat_dVg) * dVgs_eff_dVg; T12 = T7 * dAlphaz_dVb - T9 * dVdsat_dVb; here->BSIM4v6cddb = T4 * (3.0 - 6.0 * T2 - 3.0 * T5); here->BSIM4v6cdsb = -(here->BSIM4v6cdgb + T12 + here->BSIM4v6cddb); T9 = 2.0 * T4 * (1.0 + T5); T10 = (T8 * dAlphaz_dVg - T9 * dVdsat_dVg) * dVgs_eff_dVg; T11 = T8 * dAlphaz_dVb - T9 * dVdsat_dVb; T12 = T4 * (2.0 * T2 + T5 - 1.0); T0 = -(T10 + T11 + T12); here->BSIM4v6cbgb = -(here->BSIM4v6cggb + here->BSIM4v6cdgb + T10); here->BSIM4v6cbdb = -(here->BSIM4v6cgdb + here->BSIM4v6cddb + T12); here->BSIM4v6cbsb = -(here->BSIM4v6cgsb + here->BSIM4v6cdsb + T0); } } else if (model->BSIM4v6xpart < 0.5) { /* 40/60 Charge partition model */ if (Vds >= Vdsat) { /* saturation region */ T1 = Vdsat / 3.0; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4v6phi - T1); T2 = -Two_Third_CoxWL * Vgst; qbulk = -(qgate + T2); qdrn = 0.4 * T2; here->BSIM4v6cggb = One_Third_CoxWL * (3.0 - dVdsat_dVg) * dVgs_eff_dVg; T2 = -One_Third_CoxWL * dVdsat_dVb; here->BSIM4v6cgsb = -(here->BSIM4v6cggb + T2); here->BSIM4v6cgdb = 0.0; T3 = 0.4 * Two_Third_CoxWL; here->BSIM4v6cdgb = -T3 * dVgs_eff_dVg; here->BSIM4v6cddb = 0.0; T4 = T3 * dVth_dVb; here->BSIM4v6cdsb = -(T4 + here->BSIM4v6cdgb); here->BSIM4v6cbgb = -(here->BSIM4v6cggb - Two_Third_CoxWL * dVgs_eff_dVg); T3 = -(T2 + Two_Third_CoxWL * dVth_dVb); here->BSIM4v6cbsb = -(here->BSIM4v6cbgb + T3); here->BSIM4v6cbdb = 0.0; } else { /* linear region */ Alphaz = Vgst / Vdsat; T1 = 2.0 * Vdsat - Vds; T2 = Vds / (3.0 * T1); T3 = T2 * Vds; T9 = 0.25 * CoxWL; T4 = T9 * Alphaz; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4v6phi - 0.5 * (Vds - T3)); T5 = T3 / T1; here->BSIM4v6cggb = CoxWL * (1.0 - T5 * dVdsat_dVg) * dVgs_eff_dVg; tmp = -CoxWL * T5 * dVdsat_dVb; here->BSIM4v6cgdb = CoxWL * (T2 - 0.5 + 0.5 * T5); here->BSIM4v6cgsb = -(here->BSIM4v6cggb + here->BSIM4v6cgdb + tmp); T6 = 1.0 / Vdsat; dAlphaz_dVg = T6 * (1.0 - Alphaz * dVdsat_dVg); dAlphaz_dVb = -T6 * (dVth_dVb + Alphaz * dVdsat_dVb); T6 = 8.0 * Vdsat * Vdsat - 6.0 * Vdsat * Vds + 1.2 * Vds * Vds; T8 = T2 / T1; T7 = Vds - T1 - T8 * T6; qdrn = T4 * T7; T7 *= T9; tmp = T8 / T1; tmp1 = T4 * (2.0 - 4.0 * tmp * T6 + T8 * (16.0 * Vdsat - 6.0 * Vds)); here->BSIM4v6cdgb = (T7 * dAlphaz_dVg - tmp1 * dVdsat_dVg) * dVgs_eff_dVg; T10 = T7 * dAlphaz_dVb - tmp1 * dVdsat_dVb; here->BSIM4v6cddb = T4 * (2.0 - (1.0 / (3.0 * T1 * T1) + 2.0 * tmp) * T6 + T8 * (6.0 * Vdsat - 2.4 * Vds)); here->BSIM4v6cdsb = -(here->BSIM4v6cdgb + T10 + here->BSIM4v6cddb); T7 = 2.0 * (T1 + T3); qbulk = -(qgate - T4 * T7); T7 *= T9; T0 = 4.0 * T4 * (1.0 - T5); T12 = (-T7 * dAlphaz_dVg - T0 * dVdsat_dVg) * dVgs_eff_dVg - here->BSIM4v6cdgb; /*4.6.2*/ T11 = -T7 * dAlphaz_dVb - T10 - T0 * dVdsat_dVb; T10 = -4.0 * T4 * (T2 - 0.5 + 0.5 * T5) - here->BSIM4v6cddb; tmp = -(T10 + T11 + T12); here->BSIM4v6cbgb = -(here->BSIM4v6cggb + here->BSIM4v6cdgb + T12); here->BSIM4v6cbdb = -(here->BSIM4v6cgdb + here->BSIM4v6cddb + T10); here->BSIM4v6cbsb = -(here->BSIM4v6cgsb + here->BSIM4v6cdsb + tmp); } } else { /* 50/50 partitioning */ if (Vds >= Vdsat) { /* saturation region */ T1 = Vdsat / 3.0; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4v6phi - T1); T2 = -Two_Third_CoxWL * Vgst; qbulk = -(qgate + T2); qdrn = 0.5 * T2; here->BSIM4v6cggb = One_Third_CoxWL * (3.0 - dVdsat_dVg) * dVgs_eff_dVg; T2 = -One_Third_CoxWL * dVdsat_dVb; here->BSIM4v6cgsb = -(here->BSIM4v6cggb + T2); here->BSIM4v6cgdb = 0.0; here->BSIM4v6cdgb = -One_Third_CoxWL * dVgs_eff_dVg; here->BSIM4v6cddb = 0.0; T4 = One_Third_CoxWL * dVth_dVb; here->BSIM4v6cdsb = -(T4 + here->BSIM4v6cdgb); here->BSIM4v6cbgb = -(here->BSIM4v6cggb - Two_Third_CoxWL * dVgs_eff_dVg); T3 = -(T2 + Two_Third_CoxWL * dVth_dVb); here->BSIM4v6cbsb = -(here->BSIM4v6cbgb + T3); here->BSIM4v6cbdb = 0.0; } else { /* linear region */ Alphaz = Vgst / Vdsat; T1 = 2.0 * Vdsat - Vds; T2 = Vds / (3.0 * T1); T3 = T2 * Vds; T9 = 0.25 * CoxWL; T4 = T9 * Alphaz; qgate = CoxWL * (Vgs_eff - Vfb - pParam->BSIM4v6phi - 0.5 * (Vds - T3)); T5 = T3 / T1; here->BSIM4v6cggb = CoxWL * (1.0 - T5 * dVdsat_dVg) * dVgs_eff_dVg; tmp = -CoxWL * T5 * dVdsat_dVb; here->BSIM4v6cgdb = CoxWL * (T2 - 0.5 + 0.5 * T5); here->BSIM4v6cgsb = -(here->BSIM4v6cggb + here->BSIM4v6cgdb + tmp); T6 = 1.0 / Vdsat; dAlphaz_dVg = T6 * (1.0 - Alphaz * dVdsat_dVg); dAlphaz_dVb = -T6 * (dVth_dVb + Alphaz * dVdsat_dVb); T7 = T1 + T3; qdrn = -T4 * T7; qbulk = - (qgate + qdrn + qdrn); T7 *= T9; T0 = T4 * (2.0 * T5 - 2.0); here->BSIM4v6cdgb = (T0 * dVdsat_dVg - T7 * dAlphaz_dVg) * dVgs_eff_dVg; T12 = T0 * dVdsat_dVb - T7 * dAlphaz_dVb; here->BSIM4v6cddb = T4 * (1.0 - 2.0 * T2 - T5); here->BSIM4v6cdsb = -(here->BSIM4v6cdgb + T12 + here->BSIM4v6cddb); here->BSIM4v6cbgb = -(here->BSIM4v6cggb + 2.0 * here->BSIM4v6cdgb); here->BSIM4v6cbdb = -(here->BSIM4v6cgdb + 2.0 * here->BSIM4v6cddb); here->BSIM4v6cbsb = -(here->BSIM4v6cgsb + 2.0 * here->BSIM4v6cdsb); } /* end of linear region */ } /* end of 50/50 partition */ } /* end of inversion */ } /* end of capMod=0 */ else { if (Vbseff < 0.0) { VbseffCV = Vbseff; dVbseffCV_dVb = 1.0; } else { VbseffCV = pParam->BSIM4v6phi - Phis; dVbseffCV_dVb = -dPhis_dVb; } CoxWL = model->BSIM4v6coxe * pParam->BSIM4v6weffCV * pParam->BSIM4v6leffCV * here->BSIM4v6nf; if(model->BSIM4v6cvchargeMod == 0) { /* Seperate VgsteffCV with noff and voffcv */ noff = n * pParam->BSIM4v6noff; dnoff_dVd = pParam->BSIM4v6noff * dn_dVd; dnoff_dVb = pParam->BSIM4v6noff * dn_dVb; T0 = Vtm * noff; voffcv = pParam->BSIM4v6voffcv; VgstNVt = (Vgst - voffcv) / T0; if (VgstNVt > EXP_THRESHOLD) { Vgsteff = Vgst - voffcv; dVgsteff_dVg = dVgs_eff_dVg; dVgsteff_dVd = -dVth_dVd; dVgsteff_dVb = -dVth_dVb; } else if (VgstNVt < -EXP_THRESHOLD) { Vgsteff = T0 * log(1.0 + MIN_EXP); dVgsteff_dVg = 0.0; dVgsteff_dVd = Vgsteff / noff; dVgsteff_dVb = dVgsteff_dVd * dnoff_dVb; dVgsteff_dVd *= dnoff_dVd; } else { ExpVgst = exp(VgstNVt); Vgsteff = T0 * log(1.0 + ExpVgst); dVgsteff_dVg = ExpVgst / (1.0 + ExpVgst); dVgsteff_dVd = -dVgsteff_dVg * (dVth_dVd + (Vgst - voffcv) / noff * dnoff_dVd) + Vgsteff / noff * dnoff_dVd; dVgsteff_dVb = -dVgsteff_dVg * (dVth_dVb + (Vgst - voffcv) / noff * dnoff_dVb) + Vgsteff / noff * dnoff_dVb; dVgsteff_dVg *= dVgs_eff_dVg; } /* End of VgsteffCV for cvchargeMod = 0 */ } else { T0 = n * Vtm; T1 = pParam->BSIM4v6mstarcv * Vgst; T2 = T1 / T0; if (T2 > EXP_THRESHOLD) { T10 = T1; dT10_dVg = pParam->BSIM4v6mstarcv * dVgs_eff_dVg; dT10_dVd = -dVth_dVd * pParam->BSIM4v6mstarcv; dT10_dVb = -dVth_dVb * pParam->BSIM4v6mstarcv; } else if (T2 < -EXP_THRESHOLD) { T10 = Vtm * log(1.0 + MIN_EXP); dT10_dVg = 0.0; dT10_dVd = T10 * dn_dVd; dT10_dVb = T10 * dn_dVb; T10 *= n; } else { ExpVgst = exp(T2); T3 = Vtm * log(1.0 + ExpVgst); T10 = n * T3; dT10_dVg = pParam->BSIM4v6mstarcv * ExpVgst / (1.0 + ExpVgst); dT10_dVb = T3 * dn_dVb - dT10_dVg * (dVth_dVb + Vgst * dn_dVb / n); dT10_dVd = T3 * dn_dVd - dT10_dVg * (dVth_dVd + Vgst * dn_dVd / n); dT10_dVg *= dVgs_eff_dVg; } T1 = pParam->BSIM4v6voffcbncv - (1.0 - pParam->BSIM4v6mstarcv) * Vgst; T2 = T1 / T0; if (T2 < -EXP_THRESHOLD) { T3 = model->BSIM4v6coxe * MIN_EXP / pParam->BSIM4v6cdep0; T9 = pParam->BSIM4v6mstarcv + T3 * n; dT9_dVg = 0.0; dT9_dVd = dn_dVd * T3; dT9_dVb = dn_dVb * T3; } else if (T2 > EXP_THRESHOLD) { T3 = model->BSIM4v6coxe * MAX_EXP / pParam->BSIM4v6cdep0; T9 = pParam->BSIM4v6mstarcv + T3 * n; dT9_dVg = 0.0; dT9_dVd = dn_dVd * T3; dT9_dVb = dn_dVb * T3; } else { ExpVgst = exp(T2); T3 = model->BSIM4v6coxe / pParam->BSIM4v6cdep0; T4 = T3 * ExpVgst; T5 = T1 * T4 / T0; T9 = pParam->BSIM4v6mstarcv + n * T4; dT9_dVg = T3 * (pParam->BSIM4v6mstarcv - 1.0) * ExpVgst / Vtm; dT9_dVb = T4 * dn_dVb - dT9_dVg * dVth_dVb - T5 * dn_dVb; dT9_dVd = T4 * dn_dVd - dT9_dVg * dVth_dVd - T5 * dn_dVd; dT9_dVg *= dVgs_eff_dVg; } Vgsteff = T10 / T9; T11 = T9 * T9; dVgsteff_dVg = (T9 * dT10_dVg - T10 * dT9_dVg) / T11; dVgsteff_dVd = (T9 * dT10_dVd - T10 * dT9_dVd) / T11; dVgsteff_dVb = (T9 * dT10_dVb - T10 * dT9_dVb) / T11; /* End of VgsteffCV for cvchargeMod = 1 */ } if (model->BSIM4v6capMod == 1) { Vfb = here->BSIM4v6vfbzb; V3 = Vfb - Vgs_eff + VbseffCV - DELTA_3; if (Vfb <= 0.0) T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * Vfb); else T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * Vfb); T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = Vfb - 0.5 * (V3 + T0); dVfbeff_dVg = T1 * dVgs_eff_dVg; dVfbeff_dVb = -T1 * dVbseffCV_dVb; Qac0 = CoxWL * (Vfbeff - Vfb); dQac0_dVg = CoxWL * dVfbeff_dVg; dQac0_dVb = CoxWL * dVfbeff_dVb; T0 = 0.5 * pParam->BSIM4v6k1ox; T3 = Vgs_eff - Vfbeff - VbseffCV - Vgsteff; if (pParam->BSIM4v6k1ox == 0.0) { T1 = 0.0; T2 = 0.0; } else if (T3 < 0.0) { T1 = T0 + T3 / pParam->BSIM4v6k1ox; T2 = CoxWL; } else { T1 = sqrt(T0 * T0 + T3); T2 = CoxWL * T0 / T1; } Qsub0 = CoxWL * pParam->BSIM4v6k1ox * (T1 - T0); dQsub0_dVg = T2 * (dVgs_eff_dVg - dVfbeff_dVg - dVgsteff_dVg); dQsub0_dVd = -T2 * dVgsteff_dVd; dQsub0_dVb = -T2 * (dVfbeff_dVb + dVbseffCV_dVb + dVgsteff_dVb); AbulkCV = Abulk0 * pParam->BSIM4v6abulkCVfactor; dAbulkCV_dVb = pParam->BSIM4v6abulkCVfactor * dAbulk0_dVb; VdsatCV = Vgsteff / AbulkCV; T0 = VdsatCV - Vds - DELTA_4; dT0_dVg = 1.0 / AbulkCV; dT0_dVb = -VdsatCV * dAbulkCV_dVb / AbulkCV; T1 = sqrt(T0 * T0 + 4.0 * DELTA_4 * VdsatCV); dT1_dVg = (T0 + DELTA_4 + DELTA_4) / T1; dT1_dVd = -T0 / T1; dT1_dVb = dT1_dVg * dT0_dVb; dT1_dVg *= dT0_dVg; if (T0 >= 0.0) { VdseffCV = VdsatCV - 0.5 * (T0 + T1); dVdseffCV_dVg = 0.5 * (dT0_dVg - dT1_dVg); dVdseffCV_dVd = 0.5 * (1.0 - dT1_dVd); dVdseffCV_dVb = 0.5 * (dT0_dVb - dT1_dVb); } else { T3 = (DELTA_4 + DELTA_4) / (T1 - T0); T4 = 1.0 - T3; T5 = VdsatCV * T3 / (T1 - T0); VdseffCV = VdsatCV * T4; dVdseffCV_dVg = dT0_dVg * T4 + T5 * (dT1_dVg - dT0_dVg); dVdseffCV_dVd = T5 * (dT1_dVd + 1.0); dVdseffCV_dVb = dT0_dVb * (T4 - T5) + T5 * dT1_dVb; } if (Vds == 0.0) { VdseffCV = 0.0; dVdseffCV_dVg = 0.0; dVdseffCV_dVb = 0.0; } T0 = AbulkCV * VdseffCV; T1 = 12.0 * (Vgsteff - 0.5 * T0 + 1.0e-20); T2 = VdseffCV / T1; T3 = T0 * T2; T4 = (1.0 - 12.0 * T2 * T2 * AbulkCV); T5 = (6.0 * T0 * (4.0 * Vgsteff - T0) / (T1 * T1) - 0.5); T6 = 12.0 * T2 * T2 * Vgsteff; qgate = CoxWL * (Vgsteff - 0.5 * VdseffCV + T3); Cgg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); Cgd1 = CoxWL * T5 * dVdseffCV_dVd + Cgg1 * dVgsteff_dVd; Cgb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Cgg1 * dVgsteff_dVb; Cgg1 *= dVgsteff_dVg; T7 = 1.0 - AbulkCV; qbulk = CoxWL * T7 * (0.5 * VdseffCV - T3); T4 = -T7 * (T4 - 1.0); T5 = -T7 * T5; T6 = -(T7 * T6 + (0.5 * VdseffCV - T3)); Cbg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg); Cbd1 = CoxWL * T5 * dVdseffCV_dVd + Cbg1 * dVgsteff_dVd; Cbb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Cbg1 * dVgsteff_dVb; Cbg1 *= dVgsteff_dVg; if (model->BSIM4v6xpart > 0.5) { /* 0/100 Charge petition model */ T1 = T1 + T1; qsrc = -CoxWL * (0.5 * Vgsteff + 0.25 * T0 - T0 * T0 / T1); T7 = (4.0 * Vgsteff - T0) / (T1 * T1); T4 = -(0.5 + 24.0 * T0 * T0 / (T1 * T1)); T5 = -(0.25 * AbulkCV - 12.0 * AbulkCV * T0 * T7); T6 = -(0.25 * VdseffCV - 12.0 * T0 * VdseffCV * T7); Csg = CoxWL * (T4 + T5 * dVdseffCV_dVg); Csd = CoxWL * T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd; Csb = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Csg * dVgsteff_dVb; Csg *= dVgsteff_dVg; } else if (model->BSIM4v6xpart < 0.5) { /* 40/60 Charge petition model */ T1 = T1 / 12.0; T2 = 0.5 * CoxWL / (T1 * T1); T3 = Vgsteff * (2.0 * T0 * T0 / 3.0 + Vgsteff * (Vgsteff - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T2 * T3; T7 = 4.0 / 3.0 * Vgsteff * (Vgsteff - T0) + 0.4 * T0 * T0; T4 = -2.0 * qsrc / T1 - T2 * (Vgsteff * (3.0 * Vgsteff - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0); T5 = (qsrc / T1 + T2 * T7) * AbulkCV; T6 = (qsrc / T1 * VdseffCV + T2 * T7 * VdseffCV); Csg = (T4 + T5 * dVdseffCV_dVg); Csd = T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd; Csb = (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Csg * dVgsteff_dVb; Csg *= dVgsteff_dVg; } else { /* 50/50 Charge petition model */ qsrc = -0.5 * (qgate + qbulk); Csg = -0.5 * (Cgg1 + Cbg1); Csb = -0.5 * (Cgb1 + Cbb1); Csd = -0.5 * (Cgd1 + Cbd1); } qgate += Qac0 + Qsub0; qbulk -= (Qac0 + Qsub0); qdrn = -(qgate + qbulk + qsrc); Cgg = dQac0_dVg + dQsub0_dVg + Cgg1; Cgd = dQsub0_dVd + Cgd1; Cgb = dQac0_dVb + dQsub0_dVb + Cgb1; Cbg = Cbg1 - dQac0_dVg - dQsub0_dVg; Cbd = Cbd1 - dQsub0_dVd; Cbb = Cbb1 - dQac0_dVb - dQsub0_dVb; Cgb *= dVbseff_dVb; Cbb *= dVbseff_dVb; Csb *= dVbseff_dVb; here->BSIM4v6cggb = Cgg; here->BSIM4v6cgsb = -(Cgg + Cgd + Cgb); here->BSIM4v6cgdb = Cgd; here->BSIM4v6cdgb = -(Cgg + Cbg + Csg); here->BSIM4v6cdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb + Csg + Csd + Csb); here->BSIM4v6cddb = -(Cgd + Cbd + Csd); here->BSIM4v6cbgb = Cbg; here->BSIM4v6cbsb = -(Cbg + Cbd + Cbb); here->BSIM4v6cbdb = Cbd; } /* Charge-Thickness capMod (CTM) begins */ else if (model->BSIM4v6capMod == 2) { V3 = here->BSIM4v6vfbzb - Vgs_eff + VbseffCV - DELTA_3; if (here->BSIM4v6vfbzb <= 0.0) T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * here->BSIM4v6vfbzb); else T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * here->BSIM4v6vfbzb); T1 = 0.5 * (1.0 + V3 / T0); Vfbeff = here->BSIM4v6vfbzb - 0.5 * (V3 + T0); dVfbeff_dVg = T1 * dVgs_eff_dVg; dVfbeff_dVb = -T1 * dVbseffCV_dVb; Cox = model->BSIM4v6coxp; Tox = 1.0e8 * model->BSIM4v6toxp; T0 = (Vgs_eff - VbseffCV - here->BSIM4v6vfbzb) / Tox; dT0_dVg = dVgs_eff_dVg / Tox; dT0_dVb = -dVbseffCV_dVb / Tox; tmp = T0 * pParam->BSIM4v6acde; if ((-EXP_THRESHOLD < tmp) && (tmp < EXP_THRESHOLD)) { Tcen = pParam->BSIM4v6ldeb * exp(tmp); dTcen_dVg = pParam->BSIM4v6acde * Tcen; dTcen_dVb = dTcen_dVg * dT0_dVb; dTcen_dVg *= dT0_dVg; } else if (tmp <= -EXP_THRESHOLD) { Tcen = pParam->BSIM4v6ldeb * MIN_EXP; dTcen_dVg = dTcen_dVb = 0.0; } else { Tcen = pParam->BSIM4v6ldeb * MAX_EXP; dTcen_dVg = dTcen_dVb = 0.0; } LINK = 1.0e-3 * model->BSIM4v6toxp; V3 = pParam->BSIM4v6ldeb - Tcen - LINK; V4 = sqrt(V3 * V3 + 4.0 * LINK * pParam->BSIM4v6ldeb); Tcen = pParam->BSIM4v6ldeb - 0.5 * (V3 + V4); T1 = 0.5 * (1.0 + V3 / V4); dTcen_dVg *= T1; dTcen_dVb *= T1; Ccen = epssub / Tcen; T2 = Cox / (Cox + Ccen); Coxeff = T2 * Ccen; T3 = -Ccen / Tcen; dCoxeff_dVg = T2 * T2 * T3; dCoxeff_dVb = dCoxeff_dVg * dTcen_dVb; dCoxeff_dVg *= dTcen_dVg; CoxWLcen = CoxWL * Coxeff / model->BSIM4v6coxe; Qac0 = CoxWLcen * (Vfbeff - here->BSIM4v6vfbzb); QovCox = Qac0 / Coxeff; dQac0_dVg = CoxWLcen * dVfbeff_dVg + QovCox * dCoxeff_dVg; dQac0_dVb = CoxWLcen * dVfbeff_dVb + QovCox * dCoxeff_dVb; T0 = 0.5 * pParam->BSIM4v6k1ox; T3 = Vgs_eff - Vfbeff - VbseffCV - Vgsteff; if (pParam->BSIM4v6k1ox == 0.0) { T1 = 0.0; T2 = 0.0; } else if (T3 < 0.0) { T1 = T0 + T3 / pParam->BSIM4v6k1ox; T2 = CoxWLcen; } else { T1 = sqrt(T0 * T0 + T3); T2 = CoxWLcen * T0 / T1; } Qsub0 = CoxWLcen * pParam->BSIM4v6k1ox * (T1 - T0); QovCox = Qsub0 / Coxeff; dQsub0_dVg = T2 * (dVgs_eff_dVg - dVfbeff_dVg - dVgsteff_dVg) + QovCox * dCoxeff_dVg; dQsub0_dVd = -T2 * dVgsteff_dVd; dQsub0_dVb = -T2 * (dVfbeff_dVb + dVbseffCV_dVb + dVgsteff_dVb) + QovCox * dCoxeff_dVb; /* Gate-bias dependent delta Phis begins */ if (pParam->BSIM4v6k1ox <= 0.0) { Denomi = 0.25 * pParam->BSIM4v6moin * Vtm; T0 = 0.5 * pParam->BSIM4v6sqrtPhi; } else { Denomi = pParam->BSIM4v6moin * Vtm * pParam->BSIM4v6k1ox * pParam->BSIM4v6k1ox; T0 = pParam->BSIM4v6k1ox * pParam->BSIM4v6sqrtPhi; } T1 = 2.0 * T0 + Vgsteff; DeltaPhi = Vtm * log(1.0 + T1 * Vgsteff / Denomi); dDeltaPhi_dVg = 2.0 * Vtm * (T1 -T0) / (Denomi + T1 * Vgsteff); /* End of delta Phis */ /* VgDP = Vgsteff - DeltaPhi */ T0 = Vgsteff - DeltaPhi - 0.001; dT0_dVg = 1.0 - dDeltaPhi_dVg; T1 = sqrt(T0 * T0 + Vgsteff * 0.004); VgDP = 0.5 * (T0 + T1); dVgDP_dVg = 0.5 * (dT0_dVg + (T0 * dT0_dVg + 0.002) / T1); Tox += Tox; /* WDLiu: Tcen reevaluated below due to different Vgsteff */ T0 = (Vgsteff + here->BSIM4v6vtfbphi2) / Tox; tmp = exp(model->BSIM4v6bdos * 0.7 * log(T0)); T1 = 1.0 + tmp; T2 = model->BSIM4v6bdos * 0.7 * tmp / (T0 * Tox); Tcen = model->BSIM4v6ados * 1.9e-9 / T1; dTcen_dVg = -Tcen * T2 / T1; dTcen_dVd = dTcen_dVg * dVgsteff_dVd; dTcen_dVb = dTcen_dVg * dVgsteff_dVb; dTcen_dVg *= dVgsteff_dVg; Ccen = epssub / Tcen; T0 = Cox / (Cox + Ccen); Coxeff = T0 * Ccen; T1 = -Ccen / Tcen; dCoxeff_dVg = T0 * T0 * T1; dCoxeff_dVd = dCoxeff_dVg * dTcen_dVd; dCoxeff_dVb = dCoxeff_dVg * dTcen_dVb; dCoxeff_dVg *= dTcen_dVg; CoxWLcen = CoxWL * Coxeff / model->BSIM4v6coxe; AbulkCV = Abulk0 * pParam->BSIM4v6abulkCVfactor; dAbulkCV_dVb = pParam->BSIM4v6abulkCVfactor * dAbulk0_dVb; VdsatCV = VgDP / AbulkCV; T0 = VdsatCV - Vds - DELTA_4; dT0_dVg = dVgDP_dVg / AbulkCV; dT0_dVb = -VdsatCV * dAbulkCV_dVb / AbulkCV; T1 = sqrt(T0 * T0 + 4.0 * DELTA_4 * VdsatCV); dT1_dVg = (T0 + DELTA_4 + DELTA_4) / T1; dT1_dVd = -T0 / T1; dT1_dVb = dT1_dVg * dT0_dVb; dT1_dVg *= dT0_dVg; if (T0 >= 0.0) { VdseffCV = VdsatCV - 0.5 * (T0 + T1); dVdseffCV_dVg = 0.5 * (dT0_dVg - dT1_dVg); dVdseffCV_dVd = 0.5 * (1.0 - dT1_dVd); dVdseffCV_dVb = 0.5 * (dT0_dVb - dT1_dVb); } else { T3 = (DELTA_4 + DELTA_4) / (T1 - T0); T4 = 1.0 - T3; T5 = VdsatCV * T3 / (T1 - T0); VdseffCV = VdsatCV * T4; dVdseffCV_dVg = dT0_dVg * T4 + T5 * (dT1_dVg - dT0_dVg); dVdseffCV_dVd = T5 * (dT1_dVd + 1.0); dVdseffCV_dVb = dT0_dVb * (T4 - T5) + T5 * dT1_dVb; } if (Vds == 0.0) { VdseffCV = 0.0; dVdseffCV_dVg = 0.0; dVdseffCV_dVb = 0.0; } T0 = AbulkCV * VdseffCV; T1 = VgDP; T2 = 12.0 * (T1 - 0.5 * T0 + 1.0e-20); T3 = T0 / T2; T4 = 1.0 - 12.0 * T3 * T3; T5 = AbulkCV * (6.0 * T0 * (4.0 * T1 - T0) / (T2 * T2) - 0.5); T6 = T5 * VdseffCV / AbulkCV; qgate = CoxWLcen * (T1 - T0 * (0.5 - T3)); QovCox = qgate / Coxeff; Cgg1 = CoxWLcen * (T4 * dVgDP_dVg + T5 * dVdseffCV_dVg); Cgd1 = CoxWLcen * T5 * dVdseffCV_dVd + Cgg1 * dVgsteff_dVd + QovCox * dCoxeff_dVd; Cgb1 = CoxWLcen * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Cgg1 * dVgsteff_dVb + QovCox * dCoxeff_dVb; Cgg1 = Cgg1 * dVgsteff_dVg + QovCox * dCoxeff_dVg; T7 = 1.0 - AbulkCV; T8 = T2 * T2; T9 = 12.0 * T7 * T0 * T0 / (T8 * AbulkCV); T10 = T9 * dVgDP_dVg; T11 = -T7 * T5 / AbulkCV; T12 = -(T9 * T1 / AbulkCV + VdseffCV * (0.5 - T0 / T2)); qbulk = CoxWLcen * T7 * (0.5 * VdseffCV - T0 * VdseffCV / T2); QovCox = qbulk / Coxeff; Cbg1 = CoxWLcen * (T10 + T11 * dVdseffCV_dVg); Cbd1 = CoxWLcen * T11 * dVdseffCV_dVd + Cbg1 * dVgsteff_dVd + QovCox * dCoxeff_dVd; Cbb1 = CoxWLcen * (T11 * dVdseffCV_dVb + T12 * dAbulkCV_dVb) + Cbg1 * dVgsteff_dVb + QovCox * dCoxeff_dVb; Cbg1 = Cbg1 * dVgsteff_dVg + QovCox * dCoxeff_dVg; if (model->BSIM4v6xpart > 0.5) { /* 0/100 partition */ qsrc = -CoxWLcen * (T1 / 2.0 + T0 / 4.0 - 0.5 * T0 * T0 / T2); QovCox = qsrc / Coxeff; T2 += T2; T3 = T2 * T2; T7 = -(0.25 - 12.0 * T0 * (4.0 * T1 - T0) / T3); T4 = -(0.5 + 24.0 * T0 * T0 / T3) * dVgDP_dVg; T5 = T7 * AbulkCV; T6 = T7 * VdseffCV; Csg = CoxWLcen * (T4 + T5 * dVdseffCV_dVg); Csd = CoxWLcen * T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd + QovCox * dCoxeff_dVd; Csb = CoxWLcen * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb) + Csg * dVgsteff_dVb + QovCox * dCoxeff_dVb; Csg = Csg * dVgsteff_dVg + QovCox * dCoxeff_dVg; } else if (model->BSIM4v6xpart < 0.5) { /* 40/60 partition */ T2 = T2 / 12.0; T3 = 0.5 * CoxWLcen / (T2 * T2); T4 = T1 * (2.0 * T0 * T0 / 3.0 + T1 * (T1 - 4.0 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0; qsrc = -T3 * T4; QovCox = qsrc / Coxeff; T8 = 4.0 / 3.0 * T1 * (T1 - T0) + 0.4 * T0 * T0; T5 = -2.0 * qsrc / T2 - T3 * (T1 * (3.0 * T1 - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0); T6 = AbulkCV * (qsrc / T2 + T3 * T8); T7 = T6 * VdseffCV / AbulkCV; Csg = T5 * dVgDP_dVg + T6 * dVdseffCV_dVg; Csd = Csg * dVgsteff_dVd + T6 * dVdseffCV_dVd + QovCox * dCoxeff_dVd; Csb = Csg * dVgsteff_dVb + T6 * dVdseffCV_dVb + T7 * dAbulkCV_dVb + QovCox * dCoxeff_dVb; Csg = Csg * dVgsteff_dVg + QovCox * dCoxeff_dVg; } else { /* 50/50 partition */ qsrc = -0.5 * qgate; Csg = -0.5 * Cgg1; Csd = -0.5 * Cgd1; Csb = -0.5 * Cgb1; } qgate += Qac0 + Qsub0 - qbulk; qbulk -= (Qac0 + Qsub0); qdrn = -(qgate + qbulk + qsrc); Cbg = Cbg1 - dQac0_dVg - dQsub0_dVg; Cbd = Cbd1 - dQsub0_dVd; Cbb = Cbb1 - dQac0_dVb - dQsub0_dVb; Cgg = Cgg1 - Cbg; Cgd = Cgd1 - Cbd; Cgb = Cgb1 - Cbb; Cgb *= dVbseff_dVb; Cbb *= dVbseff_dVb; Csb *= dVbseff_dVb; here->BSIM4v6cggb = Cgg; here->BSIM4v6cgsb = -(Cgg + Cgd + Cgb); here->BSIM4v6cgdb = Cgd; here->BSIM4v6cdgb = -(Cgg + Cbg + Csg); here->BSIM4v6cdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb + Csg + Csd + Csb); here->BSIM4v6cddb = -(Cgd + Cbd + Csd); here->BSIM4v6cbgb = Cbg; here->BSIM4v6cbsb = -(Cbg + Cbd + Cbb); here->BSIM4v6cbdb = Cbd; } /* End of CTM */ } here->BSIM4v6csgb = - here->BSIM4v6cggb - here->BSIM4v6cdgb - here->BSIM4v6cbgb; here->BSIM4v6csdb = - here->BSIM4v6cgdb - here->BSIM4v6cddb - here->BSIM4v6cbdb; here->BSIM4v6cssb = - here->BSIM4v6cgsb - here->BSIM4v6cdsb - here->BSIM4v6cbsb; here->BSIM4v6cgbb = - here->BSIM4v6cgdb - here->BSIM4v6cggb - here->BSIM4v6cgsb; here->BSIM4v6cdbb = - here->BSIM4v6cddb - here->BSIM4v6cdgb - here->BSIM4v6cdsb; here->BSIM4v6cbbb = - here->BSIM4v6cbgb - here->BSIM4v6cbdb - here->BSIM4v6cbsb; here->BSIM4v6csbb = - here->BSIM4v6cgbb - here->BSIM4v6cdbb - here->BSIM4v6cbbb; here->BSIM4v6qgate = qgate; here->BSIM4v6qbulk = qbulk; here->BSIM4v6qdrn = qdrn; here->BSIM4v6qsrc = -(qgate + qbulk + qdrn); /* NQS begins */ if ((here->BSIM4v6trnqsMod) || (here->BSIM4v6acnqsMod)) { here->BSIM4v6qchqs = qcheq = -(qbulk + qgate); here->BSIM4v6cqgb = -(here->BSIM4v6cggb + here->BSIM4v6cbgb); here->BSIM4v6cqdb = -(here->BSIM4v6cgdb + here->BSIM4v6cbdb); here->BSIM4v6cqsb = -(here->BSIM4v6cgsb + here->BSIM4v6cbsb); here->BSIM4v6cqbb = -(here->BSIM4v6cqgb + here->BSIM4v6cqdb + here->BSIM4v6cqsb); CoxWL = model->BSIM4v6coxe * pParam->BSIM4v6weffCV * here->BSIM4v6nf * pParam->BSIM4v6leffCV; T1 = here->BSIM4v6gcrg / CoxWL; /* 1 / tau */ here->BSIM4v6gtau = T1 * ScalingFactor; if (here->BSIM4v6acnqsMod) here->BSIM4v6taunet = 1.0 / T1; *(ckt->CKTstate0 + here->BSIM4v6qcheq) = qcheq; if (ckt->CKTmode & MODEINITTRAN) *(ckt->CKTstate1 + here->BSIM4v6qcheq) = *(ckt->CKTstate0 + here->BSIM4v6qcheq); if (here->BSIM4v6trnqsMod) { error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v6qcheq); if (error) return(error); } } finished: /* Calculate junction C-V */ if (ChargeComputationNeeded) { czbd = model->BSIM4v6DunitAreaTempJctCap * here->BSIM4v6Adeff; /* bug fix */ czbs = model->BSIM4v6SunitAreaTempJctCap * here->BSIM4v6Aseff; czbdsw = model->BSIM4v6DunitLengthSidewallTempJctCap * here->BSIM4v6Pdeff; czbdswg = model->BSIM4v6DunitLengthGateSidewallTempJctCap * pParam->BSIM4v6weffCJ * here->BSIM4v6nf; czbssw = model->BSIM4v6SunitLengthSidewallTempJctCap * here->BSIM4v6Pseff; czbsswg = model->BSIM4v6SunitLengthGateSidewallTempJctCap * pParam->BSIM4v6weffCJ * here->BSIM4v6nf; MJS = model->BSIM4v6SbulkJctBotGradingCoeff; MJSWS = model->BSIM4v6SbulkJctSideGradingCoeff; MJSWGS = model->BSIM4v6SbulkJctGateSideGradingCoeff; MJD = model->BSIM4v6DbulkJctBotGradingCoeff; MJSWD = model->BSIM4v6DbulkJctSideGradingCoeff; MJSWGD = model->BSIM4v6DbulkJctGateSideGradingCoeff; /* Source Bulk Junction */ if (vbs_jct == 0.0) { *(ckt->CKTstate0 + here->BSIM4v6qbs) = 0.0; here->BSIM4v6capbs = czbs + czbssw + czbsswg; } else if (vbs_jct < 0.0) { if (czbs > 0.0) { arg = 1.0 - vbs_jct / model->BSIM4v6PhiBS; if (MJS == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJS * log(arg)); *(ckt->CKTstate0 + here->BSIM4v6qbs) = model->BSIM4v6PhiBS * czbs * (1.0 - arg * sarg) / (1.0 - MJS); here->BSIM4v6capbs = czbs * sarg; } else { *(ckt->CKTstate0 + here->BSIM4v6qbs) = 0.0; here->BSIM4v6capbs = 0.0; } if (czbssw > 0.0) { arg = 1.0 - vbs_jct / model->BSIM4v6PhiBSWS; if (MJSWS == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSWS * log(arg)); *(ckt->CKTstate0 + here->BSIM4v6qbs) += model->BSIM4v6PhiBSWS * czbssw * (1.0 - arg * sarg) / (1.0 - MJSWS); here->BSIM4v6capbs += czbssw * sarg; } if (czbsswg > 0.0) { arg = 1.0 - vbs_jct / model->BSIM4v6PhiBSWGS; if (MJSWGS == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSWGS * log(arg)); *(ckt->CKTstate0 + here->BSIM4v6qbs) += model->BSIM4v6PhiBSWGS * czbsswg * (1.0 - arg * sarg) / (1.0 - MJSWGS); here->BSIM4v6capbs += czbsswg * sarg; } } else { T0 = czbs + czbssw + czbsswg; T1 = vbs_jct * (czbs * MJS / model->BSIM4v6PhiBS + czbssw * MJSWS / model->BSIM4v6PhiBSWS + czbsswg * MJSWGS / model->BSIM4v6PhiBSWGS); *(ckt->CKTstate0 + here->BSIM4v6qbs) = vbs_jct * (T0 + 0.5 * T1); here->BSIM4v6capbs = T0 + T1; } /* Drain Bulk Junction */ if (vbd_jct == 0.0) { *(ckt->CKTstate0 + here->BSIM4v6qbd) = 0.0; here->BSIM4v6capbd = czbd + czbdsw + czbdswg; } else if (vbd_jct < 0.0) { if (czbd > 0.0) { arg = 1.0 - vbd_jct / model->BSIM4v6PhiBD; if (MJD == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJD * log(arg)); *(ckt->CKTstate0 + here->BSIM4v6qbd) = model->BSIM4v6PhiBD* czbd * (1.0 - arg * sarg) / (1.0 - MJD); here->BSIM4v6capbd = czbd * sarg; } else { *(ckt->CKTstate0 + here->BSIM4v6qbd) = 0.0; here->BSIM4v6capbd = 0.0; } if (czbdsw > 0.0) { arg = 1.0 - vbd_jct / model->BSIM4v6PhiBSWD; if (MJSWD == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSWD * log(arg)); *(ckt->CKTstate0 + here->BSIM4v6qbd) += model->BSIM4v6PhiBSWD * czbdsw * (1.0 - arg * sarg) / (1.0 - MJSWD); here->BSIM4v6capbd += czbdsw * sarg; } if (czbdswg > 0.0) { arg = 1.0 - vbd_jct / model->BSIM4v6PhiBSWGD; if (MJSWGD == 0.5) sarg = 1.0 / sqrt(arg); else sarg = exp(-MJSWGD * log(arg)); *(ckt->CKTstate0 + here->BSIM4v6qbd) += model->BSIM4v6PhiBSWGD * czbdswg * (1.0 - arg * sarg) / (1.0 - MJSWGD); here->BSIM4v6capbd += czbdswg * sarg; } } else { T0 = czbd + czbdsw + czbdswg; T1 = vbd_jct * (czbd * MJD / model->BSIM4v6PhiBD + czbdsw * MJSWD / model->BSIM4v6PhiBSWD + czbdswg * MJSWGD / model->BSIM4v6PhiBSWGD); *(ckt->CKTstate0 + here->BSIM4v6qbd) = vbd_jct * (T0 + 0.5 * T1); here->BSIM4v6capbd = T0 + T1; } } /* * check convergence */ if ((here->BSIM4v6off == 0) || (!(ckt->CKTmode & MODEINITFIX))) { if (Check == 1) { ckt->CKTnoncon++; #ifndef NEWCONV } else { if (here->BSIM4v6mode >= 0) { Idtot = here->BSIM4v6cd + here->BSIM4v6csub + here->BSIM4v6Igidl - here->BSIM4v6cbd; } else { Idtot = here->BSIM4v6cd + here->BSIM4v6cbd - here->BSIM4v6Igidl; /* bugfix */ } tol0 = ckt->CKTreltol * MAX(fabs(cdhat), fabs(Idtot)) + ckt->CKTabstol; tol1 = ckt->CKTreltol * MAX(fabs(cseshat), fabs(Isestot)) + ckt->CKTabstol; tol2 = ckt->CKTreltol * MAX(fabs(cdedhat), fabs(Idedtot)) + ckt->CKTabstol; tol3 = ckt->CKTreltol * MAX(fabs(cgshat), fabs(Igstot)) + ckt->CKTabstol; tol4 = ckt->CKTreltol * MAX(fabs(cgdhat), fabs(Igdtot)) + ckt->CKTabstol; tol5 = ckt->CKTreltol * MAX(fabs(cgbhat), fabs(Igbtot)) + ckt->CKTabstol; if ((fabs(cdhat - Idtot) >= tol0) || (fabs(cseshat - Isestot) >= tol1) || (fabs(cdedhat - Idedtot) >= tol2)) { ckt->CKTnoncon++; } else if ((fabs(cgshat - Igstot) >= tol3) || (fabs(cgdhat - Igdtot) >= tol4) || (fabs(cgbhat - Igbtot) >= tol5)) { ckt->CKTnoncon++; } else { Ibtot = here->BSIM4v6cbs + here->BSIM4v6cbd - here->BSIM4v6Igidl - here->BSIM4v6Igisl - here->BSIM4v6csub; tol6 = ckt->CKTreltol * MAX(fabs(cbhat), fabs(Ibtot)) + ckt->CKTabstol; if (fabs(cbhat - Ibtot) > tol6) { ckt->CKTnoncon++; } } #endif /* NEWCONV */ } } *(ckt->CKTstate0 + here->BSIM4v6vds) = vds; *(ckt->CKTstate0 + here->BSIM4v6vgs) = vgs; *(ckt->CKTstate0 + here->BSIM4v6vbs) = vbs; *(ckt->CKTstate0 + here->BSIM4v6vbd) = vbd; *(ckt->CKTstate0 + here->BSIM4v6vges) = vges; *(ckt->CKTstate0 + here->BSIM4v6vgms) = vgms; *(ckt->CKTstate0 + here->BSIM4v6vdbs) = vdbs; *(ckt->CKTstate0 + here->BSIM4v6vdbd) = vdbd; *(ckt->CKTstate0 + here->BSIM4v6vsbs) = vsbs; *(ckt->CKTstate0 + here->BSIM4v6vses) = vses; *(ckt->CKTstate0 + here->BSIM4v6vdes) = vdes; *(ckt->CKTstate0 + here->BSIM4v6qdef) = qdef; if (!ChargeComputationNeeded) goto line850; if (here->BSIM4v6rgateMod == 3) { vgdx = vgmd; vgsx = vgms; } else /* For rgateMod == 0, 1 and 2 */ { vgdx = vgd; vgsx = vgs; } if (model->BSIM4v6capMod == 0) { cgdo = pParam->BSIM4v6cgdo; qgdo = pParam->BSIM4v6cgdo * vgdx; cgso = pParam->BSIM4v6cgso; qgso = pParam->BSIM4v6cgso * vgsx; } else /* For both capMod == 1 and 2 */ { T0 = vgdx + DELTA_1; T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); T3 = pParam->BSIM4v6weffCV * pParam->BSIM4v6cgdl; T4 = sqrt(1.0 - 4.0 * T2 / pParam->BSIM4v6ckappad); cgdo = pParam->BSIM4v6cgdo + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgdo = (pParam->BSIM4v6cgdo + T3) * vgdx - T3 * (T2 + 0.5 * pParam->BSIM4v6ckappad * (T4 - 1.0)); T0 = vgsx + DELTA_1; T1 = sqrt(T0 * T0 + 4.0 * DELTA_1); T2 = 0.5 * (T0 - T1); T3 = pParam->BSIM4v6weffCV * pParam->BSIM4v6cgsl; T4 = sqrt(1.0 - 4.0 * T2 / pParam->BSIM4v6ckappas); cgso = pParam->BSIM4v6cgso + T3 - T3 * (1.0 - 1.0 / T4) * (0.5 - 0.5 * T0 / T1); qgso = (pParam->BSIM4v6cgso + T3) * vgsx - T3 * (T2 + 0.5 * pParam->BSIM4v6ckappas * (T4 - 1.0)); } if (here->BSIM4v6nf != 1.0) { cgdo *= here->BSIM4v6nf; cgso *= here->BSIM4v6nf; qgdo *= here->BSIM4v6nf; qgso *= here->BSIM4v6nf; } here->BSIM4v6cgdo = cgdo; here->BSIM4v6qgdo = qgdo; here->BSIM4v6cgso = cgso; here->BSIM4v6qgso = qgso; #ifndef NOBYPASS line755: #endif ag0 = ckt->CKTag[0]; if (here->BSIM4v6mode > 0) { if (here->BSIM4v6trnqsMod == 0) { qdrn -= qgdo; if (here->BSIM4v6rgateMod == 3) { gcgmgmb = (cgdo + cgso + pParam->BSIM4v6cgbo) * ag0; gcgmdb = -cgdo * ag0; gcgmsb = -cgso * ag0; gcgmbb = -pParam->BSIM4v6cgbo * ag0; gcdgmb = gcgmdb; gcsgmb = gcgmsb; gcbgmb = gcgmbb; gcggb = here->BSIM4v6cggb * ag0; gcgdb = here->BSIM4v6cgdb * ag0; gcgsb = here->BSIM4v6cgsb * ag0; gcgbb = -(gcggb + gcgdb + gcgsb); gcdgb = here->BSIM4v6cdgb * ag0; gcsgb = -(here->BSIM4v6cggb + here->BSIM4v6cbgb + here->BSIM4v6cdgb) * ag0; gcbgb = here->BSIM4v6cbgb * ag0; qgmb = pParam->BSIM4v6cgbo * vgmb; qgmid = qgdo + qgso + qgmb; qbulk -= qgmb; qsrc = -(qgate + qgmid + qbulk + qdrn); } else { gcggb = (here->BSIM4v6cggb + cgdo + cgso + pParam->BSIM4v6cgbo ) * ag0; gcgdb = (here->BSIM4v6cgdb - cgdo) * ag0; gcgsb = (here->BSIM4v6cgsb - cgso) * ag0; gcgbb = -(gcggb + gcgdb + gcgsb); gcdgb = (here->BSIM4v6cdgb - cgdo) * ag0; gcsgb = -(here->BSIM4v6cggb + here->BSIM4v6cbgb + here->BSIM4v6cdgb + cgso) * ag0; gcbgb = (here->BSIM4v6cbgb - pParam->BSIM4v6cgbo) * ag0; gcdgmb = gcsgmb = gcbgmb = 0.0; qgb = pParam->BSIM4v6cgbo * vgb; qgate += qgdo + qgso + qgb; qbulk -= qgb; qsrc = -(qgate + qbulk + qdrn); } gcddb = (here->BSIM4v6cddb + here->BSIM4v6capbd + cgdo) * ag0; gcdsb = here->BSIM4v6cdsb * ag0; gcsdb = -(here->BSIM4v6cgdb + here->BSIM4v6cbdb + here->BSIM4v6cddb) * ag0; gcssb = (here->BSIM4v6capbs + cgso - (here->BSIM4v6cgsb + here->BSIM4v6cbsb + here->BSIM4v6cdsb)) * ag0; if (!here->BSIM4v6rbodyMod) { gcdbb = -(gcdgb + gcddb + gcdsb + gcdgmb); gcsbb = -(gcsgb + gcsdb + gcssb + gcsgmb); gcbdb = (here->BSIM4v6cbdb - here->BSIM4v6capbd) * ag0; gcbsb = (here->BSIM4v6cbsb - here->BSIM4v6capbs) * ag0; gcdbdb = 0.0; gcsbsb = 0.0; } else { gcdbb = -(here->BSIM4v6cddb + here->BSIM4v6cdgb + here->BSIM4v6cdsb) * ag0; gcsbb = -(gcsgb + gcsdb + gcssb + gcsgmb) + here->BSIM4v6capbs * ag0; gcbdb = here->BSIM4v6cbdb * ag0; gcbsb = here->BSIM4v6cbsb * ag0; gcdbdb = -here->BSIM4v6capbd * ag0; gcsbsb = -here->BSIM4v6capbs * ag0; } gcbbb = -(gcbdb + gcbgb + gcbsb + gcbgmb); ggtg = ggtd = ggtb = ggts = 0.0; sxpart = 0.6; dxpart = 0.4; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { qcheq = here->BSIM4v6qchqs; CoxWL = model->BSIM4v6coxe * pParam->BSIM4v6weffCV * here->BSIM4v6nf * pParam->BSIM4v6leffCV; T0 = qdef * ScalingFactor / CoxWL; ggtg = here->BSIM4v6gtg = T0 * here->BSIM4v6gcrgg; ggtd = here->BSIM4v6gtd = T0 * here->BSIM4v6gcrgd; ggts = here->BSIM4v6gts = T0 * here->BSIM4v6gcrgs; ggtb = here->BSIM4v6gtb = T0 * here->BSIM4v6gcrgb; gqdef = ScalingFactor * ag0; gcqgb = here->BSIM4v6cqgb * ag0; gcqdb = here->BSIM4v6cqdb * ag0; gcqsb = here->BSIM4v6cqsb * ag0; gcqbb = here->BSIM4v6cqbb * ag0; if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM4v6xpart < 0.5) { dxpart = 0.4; } else if (model->BSIM4v6xpart > 0.5) { dxpart = 0.0; } else { dxpart = 0.5; } ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; } else { dxpart = qdrn / qcheq; Cdd = here->BSIM4v6cddb; Csd = -(here->BSIM4v6cgdb + here->BSIM4v6cddb + here->BSIM4v6cbdb); ddxpart_dVd = (Cdd - dxpart * (Cdd + Csd)) / qcheq; Cdg = here->BSIM4v6cdgb; Csg = -(here->BSIM4v6cggb + here->BSIM4v6cdgb + here->BSIM4v6cbgb); ddxpart_dVg = (Cdg - dxpart * (Cdg + Csg)) / qcheq; Cds = here->BSIM4v6cdsb; Css = -(here->BSIM4v6cgsb + here->BSIM4v6cdsb + here->BSIM4v6cbsb); ddxpart_dVs = (Cds - dxpart * (Cds + Css)) / qcheq; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); } sxpart = 1.0 - dxpart; dsxpart_dVd = -ddxpart_dVd; dsxpart_dVg = -ddxpart_dVg; dsxpart_dVs = -ddxpart_dVs; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); if (here->BSIM4v6rgateMod == 3) { gcgmgmb = (cgdo + cgso + pParam->BSIM4v6cgbo) * ag0; gcgmdb = -cgdo * ag0; gcgmsb = -cgso * ag0; gcgmbb = -pParam->BSIM4v6cgbo * ag0; gcdgmb = gcgmdb; gcsgmb = gcgmsb; gcbgmb = gcgmbb; gcdgb = gcsgb = gcbgb = 0.0; gcggb = gcgdb = gcgsb = gcgbb = 0.0; qgmb = pParam->BSIM4v6cgbo * vgmb; qgmid = qgdo + qgso + qgmb; qgate = 0.0; qbulk = -qgmb; qdrn = -qgdo; qsrc = -(qgmid + qbulk + qdrn); } else { gcggb = (cgdo + cgso + pParam->BSIM4v6cgbo ) * ag0; gcgdb = -cgdo * ag0; gcgsb = -cgso * ag0; gcgbb = -pParam->BSIM4v6cgbo * ag0; gcdgb = gcgdb; gcsgb = gcgsb; gcbgb = gcgbb; gcdgmb = gcsgmb = gcbgmb = 0.0; qgb = pParam->BSIM4v6cgbo * vgb; qgate = qgdo + qgso + qgb; qbulk = -qgb; qdrn = -qgdo; qsrc = -(qgate + qbulk + qdrn); } gcddb = (here->BSIM4v6capbd + cgdo) * ag0; gcdsb = gcsdb = 0.0; gcssb = (here->BSIM4v6capbs + cgso) * ag0; if (!here->BSIM4v6rbodyMod) { gcdbb = -(gcdgb + gcddb + gcdgmb); gcsbb = -(gcsgb + gcssb + gcsgmb); gcbdb = -here->BSIM4v6capbd * ag0; gcbsb = -here->BSIM4v6capbs * ag0; gcdbdb = 0.0; gcsbsb = 0.0; } else { gcdbb = gcsbb = gcbdb = gcbsb = 0.0; gcdbdb = -here->BSIM4v6capbd * ag0; gcsbsb = -here->BSIM4v6capbs * ag0; } gcbbb = -(gcbdb + gcbgb + gcbsb + gcbgmb); } } else { if (here->BSIM4v6trnqsMod == 0) { qsrc = qdrn - qgso; if (here->BSIM4v6rgateMod == 3) { gcgmgmb = (cgdo + cgso + pParam->BSIM4v6cgbo) * ag0; gcgmdb = -cgdo * ag0; gcgmsb = -cgso * ag0; gcgmbb = -pParam->BSIM4v6cgbo * ag0; gcdgmb = gcgmdb; gcsgmb = gcgmsb; gcbgmb = gcgmbb; gcggb = here->BSIM4v6cggb * ag0; gcgdb = here->BSIM4v6cgsb * ag0; gcgsb = here->BSIM4v6cgdb * ag0; gcgbb = -(gcggb + gcgdb + gcgsb); gcdgb = -(here->BSIM4v6cggb + here->BSIM4v6cbgb + here->BSIM4v6cdgb) * ag0; gcsgb = here->BSIM4v6cdgb * ag0; gcbgb = here->BSIM4v6cbgb * ag0; qgmb = pParam->BSIM4v6cgbo * vgmb; qgmid = qgdo + qgso + qgmb; qbulk -= qgmb; qdrn = -(qgate + qgmid + qbulk + qsrc); } else { gcggb = (here->BSIM4v6cggb + cgdo + cgso + pParam->BSIM4v6cgbo ) * ag0; gcgdb = (here->BSIM4v6cgsb - cgdo) * ag0; gcgsb = (here->BSIM4v6cgdb - cgso) * ag0; gcgbb = -(gcggb + gcgdb + gcgsb); gcdgb = -(here->BSIM4v6cggb + here->BSIM4v6cbgb + here->BSIM4v6cdgb + cgdo) * ag0; gcsgb = (here->BSIM4v6cdgb - cgso) * ag0; gcbgb = (here->BSIM4v6cbgb - pParam->BSIM4v6cgbo) * ag0; gcdgmb = gcsgmb = gcbgmb = 0.0; qgb = pParam->BSIM4v6cgbo * vgb; qgate += qgdo + qgso + qgb; qbulk -= qgb; qdrn = -(qgate + qbulk + qsrc); } gcddb = (here->BSIM4v6capbd + cgdo - (here->BSIM4v6cgsb + here->BSIM4v6cbsb + here->BSIM4v6cdsb)) * ag0; gcdsb = -(here->BSIM4v6cgdb + here->BSIM4v6cbdb + here->BSIM4v6cddb) * ag0; gcsdb = here->BSIM4v6cdsb * ag0; gcssb = (here->BSIM4v6cddb + here->BSIM4v6capbs + cgso) * ag0; if (!here->BSIM4v6rbodyMod) { gcdbb = -(gcdgb + gcddb + gcdsb + gcdgmb); gcsbb = -(gcsgb + gcsdb + gcssb + gcsgmb); gcbdb = (here->BSIM4v6cbsb - here->BSIM4v6capbd) * ag0; gcbsb = (here->BSIM4v6cbdb - here->BSIM4v6capbs) * ag0; gcdbdb = 0.0; gcsbsb = 0.0; } else { gcdbb = -(gcdgb + gcddb + gcdsb + gcdgmb) + here->BSIM4v6capbd * ag0; gcsbb = -(here->BSIM4v6cddb + here->BSIM4v6cdgb + here->BSIM4v6cdsb) * ag0; gcbdb = here->BSIM4v6cbsb * ag0; gcbsb = here->BSIM4v6cbdb * ag0; gcdbdb = -here->BSIM4v6capbd * ag0; gcsbsb = -here->BSIM4v6capbs * ag0; } gcbbb = -(gcbgb + gcbdb + gcbsb + gcbgmb); ggtg = ggtd = ggtb = ggts = 0.0; sxpart = 0.4; dxpart = 0.6; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { qcheq = here->BSIM4v6qchqs; CoxWL = model->BSIM4v6coxe * pParam->BSIM4v6weffCV * here->BSIM4v6nf * pParam->BSIM4v6leffCV; T0 = qdef * ScalingFactor / CoxWL; ggtg = here->BSIM4v6gtg = T0 * here->BSIM4v6gcrgg; ggts = here->BSIM4v6gts = T0 * here->BSIM4v6gcrgd; ggtd = here->BSIM4v6gtd = T0 * here->BSIM4v6gcrgs; ggtb = here->BSIM4v6gtb = T0 * here->BSIM4v6gcrgb; gqdef = ScalingFactor * ag0; gcqgb = here->BSIM4v6cqgb * ag0; gcqdb = here->BSIM4v6cqsb * ag0; gcqsb = here->BSIM4v6cqdb * ag0; gcqbb = here->BSIM4v6cqbb * ag0; if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM4v6xpart < 0.5) { sxpart = 0.4; } else if (model->BSIM4v6xpart > 0.5) { sxpart = 0.0; } else { sxpart = 0.5; } dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { sxpart = qdrn / qcheq; Css = here->BSIM4v6cddb; Cds = -(here->BSIM4v6cgdb + here->BSIM4v6cddb + here->BSIM4v6cbdb); dsxpart_dVs = (Css - sxpart * (Css + Cds)) / qcheq; Csg = here->BSIM4v6cdgb; Cdg = -(here->BSIM4v6cggb + here->BSIM4v6cdgb + here->BSIM4v6cbgb); dsxpart_dVg = (Csg - sxpart * (Csg + Cdg)) / qcheq; Csd = here->BSIM4v6cdsb; Cdd = -(here->BSIM4v6cgsb + here->BSIM4v6cdsb + here->BSIM4v6cbsb); dsxpart_dVd = (Csd - sxpart * (Csd + Cdd)) / qcheq; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); } dxpart = 1.0 - sxpart; ddxpart_dVd = -dsxpart_dVd; ddxpart_dVg = -dsxpart_dVg; ddxpart_dVs = -dsxpart_dVs; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); if (here->BSIM4v6rgateMod == 3) { gcgmgmb = (cgdo + cgso + pParam->BSIM4v6cgbo) * ag0; gcgmdb = -cgdo * ag0; gcgmsb = -cgso * ag0; gcgmbb = -pParam->BSIM4v6cgbo * ag0; gcdgmb = gcgmdb; gcsgmb = gcgmsb; gcbgmb = gcgmbb; gcdgb = gcsgb = gcbgb = 0.0; gcggb = gcgdb = gcgsb = gcgbb = 0.0; qgmb = pParam->BSIM4v6cgbo * vgmb; qgmid = qgdo + qgso + qgmb; qgate = 0.0; qbulk = -qgmb; qdrn = -qgdo; qsrc = -qgso; } else { gcggb = (cgdo + cgso + pParam->BSIM4v6cgbo ) * ag0; gcgdb = -cgdo * ag0; gcgsb = -cgso * ag0; gcgbb = -pParam->BSIM4v6cgbo * ag0; gcdgb = gcgdb; gcsgb = gcgsb; gcbgb = gcgbb; gcdgmb = gcsgmb = gcbgmb = 0.0; qgb = pParam->BSIM4v6cgbo * vgb; qgate = qgdo + qgso + qgb; qbulk = -qgb; qdrn = -qgdo; qsrc = -qgso; } gcddb = (here->BSIM4v6capbd + cgdo) * ag0; gcdsb = gcsdb = 0.0; gcssb = (here->BSIM4v6capbs + cgso) * ag0; if (!here->BSIM4v6rbodyMod) { gcdbb = -(gcdgb + gcddb + gcdgmb); gcsbb = -(gcsgb + gcssb + gcsgmb); gcbdb = -here->BSIM4v6capbd * ag0; gcbsb = -here->BSIM4v6capbs * ag0; gcdbdb = 0.0; gcsbsb = 0.0; } else { gcdbb = gcsbb = gcbdb = gcbsb = 0.0; gcdbdb = -here->BSIM4v6capbd * ag0; gcsbsb = -here->BSIM4v6capbs * ag0; } gcbbb = -(gcbdb + gcbgb + gcbsb + gcbgmb); } } if (here->BSIM4v6trnqsMod) { *(ckt->CKTstate0 + here->BSIM4v6qcdump) = qdef * ScalingFactor; if (ckt->CKTmode & MODEINITTRAN) *(ckt->CKTstate1 + here->BSIM4v6qcdump) = *(ckt->CKTstate0 + here->BSIM4v6qcdump); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v6qcdump); if (error) return(error); } if (ByPass) goto line860; *(ckt->CKTstate0 + here->BSIM4v6qg) = qgate; *(ckt->CKTstate0 + here->BSIM4v6qd) = qdrn - *(ckt->CKTstate0 + here->BSIM4v6qbd); *(ckt->CKTstate0 + here->BSIM4v6qs) = qsrc - *(ckt->CKTstate0 + here->BSIM4v6qbs); if (here->BSIM4v6rgateMod == 3) *(ckt->CKTstate0 + here->BSIM4v6qgmid) = qgmid; if (!here->BSIM4v6rbodyMod) { *(ckt->CKTstate0 + here->BSIM4v6qb) = qbulk + *(ckt->CKTstate0 + here->BSIM4v6qbd) + *(ckt->CKTstate0 + here->BSIM4v6qbs); } else *(ckt->CKTstate0 + here->BSIM4v6qb) = qbulk; /* Store small signal parameters */ if (ckt->CKTmode & MODEINITSMSIG) { goto line1000; } if (!ChargeComputationNeeded) goto line850; if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->BSIM4v6qb) = *(ckt->CKTstate0 + here->BSIM4v6qb); *(ckt->CKTstate1 + here->BSIM4v6qg) = *(ckt->CKTstate0 + here->BSIM4v6qg); *(ckt->CKTstate1 + here->BSIM4v6qd) = *(ckt->CKTstate0 + here->BSIM4v6qd); if (here->BSIM4v6rgateMod == 3) *(ckt->CKTstate1 + here->BSIM4v6qgmid) = *(ckt->CKTstate0 + here->BSIM4v6qgmid); if (here->BSIM4v6rbodyMod) { *(ckt->CKTstate1 + here->BSIM4v6qbs) = *(ckt->CKTstate0 + here->BSIM4v6qbs); *(ckt->CKTstate1 + here->BSIM4v6qbd) = *(ckt->CKTstate0 + here->BSIM4v6qbd); } } error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v6qb); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v6qg); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v6qd); if (error) return(error); if (here->BSIM4v6rgateMod == 3) { error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v6qgmid); if (error) return(error); } if (here->BSIM4v6rbodyMod) { error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v6qbs); if (error) return(error); error = NIintegrate(ckt, &geq, &ceq, 0.0, here->BSIM4v6qbd); if (error) return(error); } goto line860; line850: /* Zero gcap and ceqcap if (!ChargeComputationNeeded) */ ceqqg = ceqqb = ceqqd = 0.0; ceqqjd = ceqqjs = 0.0; cqcheq = cqdef = 0.0; gcdgb = gcddb = gcdsb = gcdbb = 0.0; gcsgb = gcsdb = gcssb = gcsbb = 0.0; gcggb = gcgdb = gcgsb = gcgbb = 0.0; gcbdb = gcbgb = gcbsb = gcbbb = 0.0; gcgmgmb = gcgmdb = gcgmsb = gcgmbb = 0.0; gcdgmb = gcsgmb = gcbgmb = ceqqgmid = 0.0; gcdbdb = gcsbsb = 0.0; gqdef = gcqgb = gcqdb = gcqsb = gcqbb = 0.0; ggtg = ggtd = ggtb = ggts = 0.0; sxpart = (1.0 - (dxpart = (here->BSIM4v6mode > 0) ? 0.4 : 0.6)); ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; if (here->BSIM4v6trnqsMod) { CoxWL = model->BSIM4v6coxe * pParam->BSIM4v6weffCV * here->BSIM4v6nf * pParam->BSIM4v6leffCV; T1 = here->BSIM4v6gcrg / CoxWL; here->BSIM4v6gtau = T1 * ScalingFactor; } else here->BSIM4v6gtau = 0.0; goto line900; line860: /* Calculate equivalent charge current */ cqgate = *(ckt->CKTstate0 + here->BSIM4v6cqg); cqbody = *(ckt->CKTstate0 + here->BSIM4v6cqb); cqdrn = *(ckt->CKTstate0 + here->BSIM4v6cqd); ceqqg = cqgate - gcggb * vgb + gcgdb * vbd + gcgsb * vbs; ceqqd = cqdrn - gcdgb * vgb - gcdgmb * vgmb + (gcddb + gcdbdb) * vbd - gcdbdb * vbd_jct + gcdsb * vbs; ceqqb = cqbody - gcbgb * vgb - gcbgmb * vgmb + gcbdb * vbd + gcbsb * vbs; if (here->BSIM4v6rgateMod == 3) ceqqgmid = *(ckt->CKTstate0 + here->BSIM4v6cqgmid) + gcgmdb * vbd + gcgmsb * vbs - gcgmgmb * vgmb; else ceqqgmid = 0.0; if (here->BSIM4v6rbodyMod) { ceqqjs = *(ckt->CKTstate0 + here->BSIM4v6cqbs) + gcsbsb * vbs_jct; ceqqjd = *(ckt->CKTstate0 + here->BSIM4v6cqbd) + gcdbdb * vbd_jct; } if (here->BSIM4v6trnqsMod) { T0 = ggtg * vgb - ggtd * vbd - ggts * vbs; ceqqg += T0; T1 = qdef * here->BSIM4v6gtau; ceqqd -= dxpart * T0 + T1 * (ddxpart_dVg * vgb - ddxpart_dVd * vbd - ddxpart_dVs * vbs); cqdef = *(ckt->CKTstate0 + here->BSIM4v6cqcdump) - gqdef * qdef; cqcheq = *(ckt->CKTstate0 + here->BSIM4v6cqcheq) - (gcqgb * vgb - gcqdb * vbd - gcqsb * vbs) + T0; } if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->BSIM4v6cqb) = *(ckt->CKTstate0 + here->BSIM4v6cqb); *(ckt->CKTstate1 + here->BSIM4v6cqg) = *(ckt->CKTstate0 + here->BSIM4v6cqg); *(ckt->CKTstate1 + here->BSIM4v6cqd) = *(ckt->CKTstate0 + here->BSIM4v6cqd); if (here->BSIM4v6rgateMod == 3) *(ckt->CKTstate1 + here->BSIM4v6cqgmid) = *(ckt->CKTstate0 + here->BSIM4v6cqgmid); if (here->BSIM4v6rbodyMod) { *(ckt->CKTstate1 + here->BSIM4v6cqbs) = *(ckt->CKTstate0 + here->BSIM4v6cqbs); *(ckt->CKTstate1 + here->BSIM4v6cqbd) = *(ckt->CKTstate0 + here->BSIM4v6cqbd); } } /* * Load current vector */ line900: if (here->BSIM4v6mode >= 0) { Gm = here->BSIM4v6gm; Gmbs = here->BSIM4v6gmbs; FwdSum = Gm + Gmbs; RevSum = 0.0; ceqdrn = model->BSIM4v6type * (cdrain - here->BSIM4v6gds * vds - Gm * vgs - Gmbs * vbs); ceqbd = model->BSIM4v6type * (here->BSIM4v6csub + here->BSIM4v6Igidl - (here->BSIM4v6gbds + here->BSIM4v6ggidld) * vds - (here->BSIM4v6gbgs + here->BSIM4v6ggidlg) * vgs - (here->BSIM4v6gbbs + here->BSIM4v6ggidlb) * vbs); ceqbs = model->BSIM4v6type * (here->BSIM4v6Igisl + here->BSIM4v6ggisls * vds - here->BSIM4v6ggislg * vgd - here->BSIM4v6ggislb * vbd); gbbdp = -(here->BSIM4v6gbds); gbbsp = here->BSIM4v6gbds + here->BSIM4v6gbgs + here->BSIM4v6gbbs; gbdpg = here->BSIM4v6gbgs; gbdpdp = here->BSIM4v6gbds; gbdpb = here->BSIM4v6gbbs; gbdpsp = -(gbdpg + gbdpdp + gbdpb); gbspg = 0.0; gbspdp = 0.0; gbspb = 0.0; gbspsp = 0.0; if (model->BSIM4v6igcMod) { gIstotg = here->BSIM4v6gIgsg + here->BSIM4v6gIgcsg; gIstotd = here->BSIM4v6gIgcsd; gIstots = here->BSIM4v6gIgss + here->BSIM4v6gIgcss; gIstotb = here->BSIM4v6gIgcsb; Istoteq = model->BSIM4v6type * (here->BSIM4v6Igs + here->BSIM4v6Igcs - gIstotg * vgs - here->BSIM4v6gIgcsd * vds - here->BSIM4v6gIgcsb * vbs); gIdtotg = here->BSIM4v6gIgdg + here->BSIM4v6gIgcdg; gIdtotd = here->BSIM4v6gIgdd + here->BSIM4v6gIgcdd; gIdtots = here->BSIM4v6gIgcds; gIdtotb = here->BSIM4v6gIgcdb; Idtoteq = model->BSIM4v6type * (here->BSIM4v6Igd + here->BSIM4v6Igcd - here->BSIM4v6gIgdg * vgd - here->BSIM4v6gIgcdg * vgs - here->BSIM4v6gIgcdd * vds - here->BSIM4v6gIgcdb * vbs); } else { gIstotg = gIstotd = gIstots = gIstotb = Istoteq = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = Idtoteq = 0.0; } if (model->BSIM4v6igbMod) { gIbtotg = here->BSIM4v6gIgbg; gIbtotd = here->BSIM4v6gIgbd; gIbtots = here->BSIM4v6gIgbs; gIbtotb = here->BSIM4v6gIgbb; Ibtoteq = model->BSIM4v6type * (here->BSIM4v6Igb - here->BSIM4v6gIgbg * vgs - here->BSIM4v6gIgbd * vds - here->BSIM4v6gIgbb * vbs); } else gIbtotg = gIbtotd = gIbtots = gIbtotb = Ibtoteq = 0.0; if ((model->BSIM4v6igcMod != 0) || (model->BSIM4v6igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; Igtoteq = Istoteq + Idtoteq + Ibtoteq; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = Igtoteq = 0.0; if (here->BSIM4v6rgateMod == 2) T0 = vges - vgs; else if (here->BSIM4v6rgateMod == 3) T0 = vgms - vgs; if (here->BSIM4v6rgateMod > 1) { gcrgd = here->BSIM4v6gcrgd * T0; gcrgg = here->BSIM4v6gcrgg * T0; gcrgs = here->BSIM4v6gcrgs * T0; gcrgb = here->BSIM4v6gcrgb * T0; ceqgcrg = -(gcrgd * vds + gcrgg * vgs + gcrgb * vbs); gcrgg -= here->BSIM4v6gcrg; gcrg = here->BSIM4v6gcrg; } else ceqgcrg = gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; } else { Gm = -here->BSIM4v6gm; Gmbs = -here->BSIM4v6gmbs; FwdSum = 0.0; RevSum = -(Gm + Gmbs); ceqdrn = -model->BSIM4v6type * (cdrain + here->BSIM4v6gds * vds + Gm * vgd + Gmbs * vbd); ceqbs = model->BSIM4v6type * (here->BSIM4v6csub + here->BSIM4v6Igisl + (here->BSIM4v6gbds + here->BSIM4v6ggisls) * vds - (here->BSIM4v6gbgs + here->BSIM4v6ggislg) * vgd - (here->BSIM4v6gbbs + here->BSIM4v6ggislb) * vbd); ceqbd = model->BSIM4v6type * (here->BSIM4v6Igidl - here->BSIM4v6ggidld * vds - here->BSIM4v6ggidlg * vgs - here->BSIM4v6ggidlb * vbs); gbbsp = -(here->BSIM4v6gbds); gbbdp = here->BSIM4v6gbds + here->BSIM4v6gbgs + here->BSIM4v6gbbs; gbdpg = 0.0; gbdpsp = 0.0; gbdpb = 0.0; gbdpdp = 0.0; gbspg = here->BSIM4v6gbgs; gbspsp = here->BSIM4v6gbds; gbspb = here->BSIM4v6gbbs; gbspdp = -(gbspg + gbspsp + gbspb); if (model->BSIM4v6igcMod) { gIstotg = here->BSIM4v6gIgsg + here->BSIM4v6gIgcdg; gIstotd = here->BSIM4v6gIgcds; gIstots = here->BSIM4v6gIgss + here->BSIM4v6gIgcdd; gIstotb = here->BSIM4v6gIgcdb; Istoteq = model->BSIM4v6type * (here->BSIM4v6Igs + here->BSIM4v6Igcd - here->BSIM4v6gIgsg * vgs - here->BSIM4v6gIgcdg * vgd + here->BSIM4v6gIgcdd * vds - here->BSIM4v6gIgcdb * vbd); gIdtotg = here->BSIM4v6gIgdg + here->BSIM4v6gIgcsg; gIdtotd = here->BSIM4v6gIgdd + here->BSIM4v6gIgcss; gIdtots = here->BSIM4v6gIgcsd; gIdtotb = here->BSIM4v6gIgcsb; Idtoteq = model->BSIM4v6type * (here->BSIM4v6Igd + here->BSIM4v6Igcs - (here->BSIM4v6gIgdg + here->BSIM4v6gIgcsg) * vgd + here->BSIM4v6gIgcsd * vds - here->BSIM4v6gIgcsb * vbd); } else { gIstotg = gIstotd = gIstots = gIstotb = Istoteq = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = Idtoteq = 0.0; } if (model->BSIM4v6igbMod) { gIbtotg = here->BSIM4v6gIgbg; gIbtotd = here->BSIM4v6gIgbs; gIbtots = here->BSIM4v6gIgbd; gIbtotb = here->BSIM4v6gIgbb; Ibtoteq = model->BSIM4v6type * (here->BSIM4v6Igb - here->BSIM4v6gIgbg * vgd + here->BSIM4v6gIgbd * vds - here->BSIM4v6gIgbb * vbd); } else gIbtotg = gIbtotd = gIbtots = gIbtotb = Ibtoteq = 0.0; if ((model->BSIM4v6igcMod != 0) || (model->BSIM4v6igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; Igtoteq = Istoteq + Idtoteq + Ibtoteq; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = Igtoteq = 0.0; if (here->BSIM4v6rgateMod == 2) T0 = vges - vgs; else if (here->BSIM4v6rgateMod == 3) T0 = vgms - vgs; if (here->BSIM4v6rgateMod > 1) { gcrgd = here->BSIM4v6gcrgs * T0; gcrgg = here->BSIM4v6gcrgg * T0; gcrgs = here->BSIM4v6gcrgd * T0; gcrgb = here->BSIM4v6gcrgb * T0; ceqgcrg = -(gcrgg * vgd - gcrgs * vds + gcrgb * vbd); gcrgg -= here->BSIM4v6gcrg; gcrg = here->BSIM4v6gcrg; } else ceqgcrg = gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; } if (model->BSIM4v6rdsMod == 1) { ceqgstot = model->BSIM4v6type * (here->BSIM4v6gstotd * vds + here->BSIM4v6gstotg * vgs + here->BSIM4v6gstotb * vbs); /* WDLiu: ceqgstot flowing away from sNodePrime */ gstot = here->BSIM4v6gstot; gstotd = here->BSIM4v6gstotd; gstotg = here->BSIM4v6gstotg; gstots = here->BSIM4v6gstots - gstot; gstotb = here->BSIM4v6gstotb; ceqgdtot = -model->BSIM4v6type * (here->BSIM4v6gdtotd * vds + here->BSIM4v6gdtotg * vgs + here->BSIM4v6gdtotb * vbs); /* WDLiu: ceqgdtot defined as flowing into dNodePrime */ gdtot = here->BSIM4v6gdtot; gdtotd = here->BSIM4v6gdtotd - gdtot; gdtotg = here->BSIM4v6gdtotg; gdtots = here->BSIM4v6gdtots; gdtotb = here->BSIM4v6gdtotb; } else { gstot = gstotd = gstotg = gstots = gstotb = ceqgstot = 0.0; gdtot = gdtotd = gdtotg = gdtots = gdtotb = ceqgdtot = 0.0; } if (model->BSIM4v6type > 0) { ceqjs = (here->BSIM4v6cbs - here->BSIM4v6gbs * vbs_jct); ceqjd = (here->BSIM4v6cbd - here->BSIM4v6gbd * vbd_jct); } else { ceqjs = -(here->BSIM4v6cbs - here->BSIM4v6gbs * vbs_jct); ceqjd = -(here->BSIM4v6cbd - here->BSIM4v6gbd * vbd_jct); ceqqg = -ceqqg; ceqqd = -ceqqd; ceqqb = -ceqqb; ceqgcrg = -ceqgcrg; if (here->BSIM4v6trnqsMod) { cqdef = -cqdef; cqcheq = -cqcheq; } if (here->BSIM4v6rbodyMod) { ceqqjs = -ceqqjs; ceqqjd = -ceqqjd; } if (here->BSIM4v6rgateMod == 3) ceqqgmid = -ceqqgmid; } /* * Loading RHS */ m = here->BSIM4v6m; #ifdef USE_OMP here->BSIM4v6rhsdPrime = m * (ceqjd - ceqbd + ceqgdtot - ceqdrn - ceqqd + Idtoteq); here->BSIM4v6rhsgPrime = m * (ceqqg - ceqgcrg + Igtoteq); if (here->BSIM4v6rgateMod == 2) here->BSIM4v6rhsgExt = m * ceqgcrg; else if (here->BSIM4v6rgateMod == 3) here->BSIM4v6grhsMid = m * (ceqqgmid + ceqgcrg); if (!here->BSIM4v6rbodyMod) { here->BSIM4v6rhsbPrime = m * (ceqbd + ceqbs - ceqjd - ceqjs - ceqqb + Ibtoteq); here->BSIM4v6rhssPrime = m * (ceqdrn - ceqbs + ceqjs + ceqqg + ceqqb + ceqqd + ceqqgmid - ceqgstot + Istoteq); } else { here->BSIM4v6rhsdb = m * (ceqjd + ceqqjd); here->BSIM4v6rhsbPrime = m * (ceqbd + ceqbs - ceqqb + Ibtoteq); here->BSIM4v6rhssb = m * (ceqjs + ceqqjs); here->BSIM4v6rhssPrime = m * (ceqdrn - ceqbs + ceqjs + ceqqd + ceqqg + ceqqb + ceqqjd + ceqqjs + ceqqgmid - ceqgstot + Istoteq); } if (model->BSIM4v6rdsMod) { here->BSIM4v6rhsd = m * ceqgdtot; here->BSIM4v6rhss = m * ceqgstot; } if (here->BSIM4v6trnqsMod) here->BSIM4v6rhsq = m * (cqcheq - cqdef); #else (*(ckt->CKTrhs + here->BSIM4v6dNodePrime) += m * (ceqjd - ceqbd + ceqgdtot - ceqdrn - ceqqd + Idtoteq)); (*(ckt->CKTrhs + here->BSIM4v6gNodePrime) -= m * (ceqqg - ceqgcrg + Igtoteq)); if (here->BSIM4v6rgateMod == 2) (*(ckt->CKTrhs + here->BSIM4v6gNodeExt) -= m * ceqgcrg); else if (here->BSIM4v6rgateMod == 3) (*(ckt->CKTrhs + here->BSIM4v6gNodeMid) -= m * (ceqqgmid + ceqgcrg)); if (!here->BSIM4v6rbodyMod) { (*(ckt->CKTrhs + here->BSIM4v6bNodePrime) += m * (ceqbd + ceqbs - ceqjd - ceqjs - ceqqb + Ibtoteq)); (*(ckt->CKTrhs + here->BSIM4v6sNodePrime) += m * (ceqdrn - ceqbs + ceqjs + ceqqg + ceqqb + ceqqd + ceqqgmid - ceqgstot + Istoteq)); } else { (*(ckt->CKTrhs + here->BSIM4v6dbNode) -= m * (ceqjd + ceqqjd)); (*(ckt->CKTrhs + here->BSIM4v6bNodePrime) += m * (ceqbd + ceqbs - ceqqb + Ibtoteq)); (*(ckt->CKTrhs + here->BSIM4v6sbNode) -= m * (ceqjs + ceqqjs)); (*(ckt->CKTrhs + here->BSIM4v6sNodePrime) += m * (ceqdrn - ceqbs + ceqjs + ceqqd + ceqqg + ceqqb + ceqqjd + ceqqjs + ceqqgmid - ceqgstot + Istoteq)); } if (model->BSIM4v6rdsMod) { (*(ckt->CKTrhs + here->BSIM4v6dNode) -= m * ceqgdtot); (*(ckt->CKTrhs + here->BSIM4v6sNode) += m * ceqgstot); } if (here->BSIM4v6trnqsMod) *(ckt->CKTrhs + here->BSIM4v6qNode) += m * (cqcheq - cqdef); #endif /* * Loading matrix */ if (!here->BSIM4v6rbodyMod) { gjbd = here->BSIM4v6gbd; gjbs = here->BSIM4v6gbs; } else gjbd = gjbs = 0.0; if (!model->BSIM4v6rdsMod) { gdpr = here->BSIM4v6drainConductance; gspr = here->BSIM4v6sourceConductance; } else gdpr = gspr = 0.0; geltd = here->BSIM4v6grgeltd; T1 = qdef * here->BSIM4v6gtau; #ifdef USE_OMP if (here->BSIM4v6rgateMod == 1) { here->BSIM4v6_1 = m * geltd; here->BSIM4v6_2 = m * geltd; here->BSIM4v6_3 = m * geltd; here->BSIM4v6_4 = m * (gcggb + geltd - ggtg + gIgtotg); here->BSIM4v6_5 = m * (gcgdb - ggtd + gIgtotd); here->BSIM4v6_6 = m * (gcgsb - ggts + gIgtots); here->BSIM4v6_7 = m * (gcgbb - ggtb + gIgtotb); } /* WDLiu: gcrg already subtracted from all gcrgg below */ else if (here->BSIM4v6rgateMod == 2) { here->BSIM4v6_8 = m * gcrg; here->BSIM4v6_9 = m * gcrgg; here->BSIM4v6_10 = m * gcrgd; here->BSIM4v6_11 = m * gcrgs; here->BSIM4v6_12 = m * gcrgb; here->BSIM4v6_13 = m * gcrg; here->BSIM4v6_14 = m * (gcggb - gcrgg - ggtg + gIgtotg); here->BSIM4v6_15 = m * (gcgdb - gcrgd - ggtd + gIgtotd); here->BSIM4v6_16 = m * (gcgsb - gcrgs - ggts + gIgtots); here->BSIM4v6_17 = m * (gcgbb - gcrgb - ggtb + gIgtotb); } else if (here->BSIM4v6rgateMod == 3) { here->BSIM4v6_18 = m * geltd; here->BSIM4v6_19 = m * geltd; here->BSIM4v6_20 = m * geltd; here->BSIM4v6_21 = m * (geltd + gcrg + gcgmgmb); here->BSIM4v6_22 = m * (gcrgd + gcgmdb); here->BSIM4v6_23 = m * gcrgg; here->BSIM4v6_24 = m * (gcrgs + gcgmsb); here->BSIM4v6_25 = m * (gcrgb + gcgmbb); here->BSIM4v6_26 = m * gcdgmb; here->BSIM4v6_27 = m * gcrg; here->BSIM4v6_28 = m * gcsgmb; here->BSIM4v6_29 = m * gcbgmb; here->BSIM4v6_30 = m * (gcggb - gcrgg - ggtg + gIgtotg); here->BSIM4v6_31 = m * (gcgdb - gcrgd - ggtd + gIgtotd); here->BSIM4v6_32 = m * (gcgsb - gcrgs - ggts + gIgtots); here->BSIM4v6_33 = m * (gcgbb - gcrgb - ggtb + gIgtotb); } else { here->BSIM4v6_34 = m * (gcggb - ggtg + gIgtotg); here->BSIM4v6_35 = m * (gcgdb - ggtd + gIgtotd); here->BSIM4v6_36 = m * (gcgsb - ggts + gIgtots); here->BSIM4v6_37 = m * (gcgbb - ggtb + gIgtotb); } if (model->BSIM4v6rdsMod) { here->BSIM4v6_38 = m * gdtotg; here->BSIM4v6_39 = m * gdtots; here->BSIM4v6_40 = m * gdtotb; here->BSIM4v6_41 = m * gstotd; here->BSIM4v6_42 = m * gstotg; here->BSIM4v6_43 = m * gstotb; } here->BSIM4v6_44 = m * (gdpr + here->BSIM4v6gds + here->BSIM4v6gbd + T1 * ddxpart_dVd - gdtotd + RevSum + gcddb + gbdpdp + dxpart * ggtd - gIdtotd); here->BSIM4v6_45 = m * (gdpr + gdtot); here->BSIM4v6_46 = m * (Gm + gcdgb - gdtotg + gbdpg - gIdtotg + dxpart * ggtg + T1 * ddxpart_dVg); here->BSIM4v6_47 = m * (here->BSIM4v6gds + gdtots - dxpart * ggts + gIdtots - T1 * ddxpart_dVs + FwdSum - gcdsb - gbdpsp); here->BSIM4v6_48 = m * (gjbd + gdtotb - Gmbs - gcdbb - gbdpb + gIdtotb - T1 * ddxpart_dVb - dxpart * ggtb); here->BSIM4v6_49 = m * (gdpr - gdtotd); here->BSIM4v6_50 = m * (gdpr + gdtot); here->BSIM4v6_51 = m * (here->BSIM4v6gds + gstotd + RevSum - gcsdb - gbspdp - T1 * dsxpart_dVd - sxpart * ggtd + gIstotd); here->BSIM4v6_52 = m * (gcsgb - Gm - gstotg + gbspg + sxpart * ggtg + T1 * dsxpart_dVg - gIstotg); here->BSIM4v6_53 = m * (gspr + here->BSIM4v6gds + here->BSIM4v6gbs + T1 * dsxpart_dVs - gstots + FwdSum + gcssb + gbspsp + sxpart * ggts - gIstots); here->BSIM4v6_54 = m * (gspr + gstot); here->BSIM4v6_55 = m * (gjbs + gstotb + Gmbs - gcsbb - gbspb - sxpart * ggtb - T1 * dsxpart_dVb + gIstotb); here->BSIM4v6_56 = m * (gspr - gstots); here->BSIM4v6_57 = m * (gspr + gstot); here->BSIM4v6_58 = m * (gcbdb - gjbd + gbbdp - gIbtotd); here->BSIM4v6_59 = m * (gcbgb - here->BSIM4v6gbgs - gIbtotg); here->BSIM4v6_60 = m * (gcbsb - gjbs + gbbsp - gIbtots); here->BSIM4v6_61 = m * (gjbd + gjbs + gcbbb - here->BSIM4v6gbbs - gIbtotb); ggidld = here->BSIM4v6ggidld; ggidlg = here->BSIM4v6ggidlg; ggidlb = here->BSIM4v6ggidlb; ggislg = here->BSIM4v6ggislg; ggisls = here->BSIM4v6ggisls; ggislb = here->BSIM4v6ggislb; /* stamp gidl */ here->BSIM4v6_62 = m * ggidld; here->BSIM4v6_63 = m * ggidlg; here->BSIM4v6_64 = m * (ggidlg + ggidld + ggidlb); here->BSIM4v6_65 = m * ggidlb; here->BSIM4v6_66 = m * ggidld; here->BSIM4v6_67 = m * ggidlg; here->BSIM4v6_68 = m * (ggidlg + ggidld + ggidlb); here->BSIM4v6_69 = m * ggidlb; /* stamp gisl */ here->BSIM4v6_70 = m * (ggisls + ggislg + ggislb); here->BSIM4v6_71 = m * ggislg; here->BSIM4v6_72 = m * ggisls; here->BSIM4v6_73 = m * ggislb; here->BSIM4v6_74 = m * (ggislg + ggisls + ggislb); here->BSIM4v6_75 = m * ggislg; here->BSIM4v6_76 = m * ggisls; here->BSIM4v6_77 = m * ggislb; if (here->BSIM4v6rbodyMod) { here->BSIM4v6_78 = m * (gcdbdb - here->BSIM4v6gbd); here->BSIM4v6_79 = m * (here->BSIM4v6gbs - gcsbsb); here->BSIM4v6_80 = m * (gcdbdb - here->BSIM4v6gbd); here->BSIM4v6_81 = m * (here->BSIM4v6gbd - gcdbdb + here->BSIM4v6grbpd + here->BSIM4v6grbdb); here->BSIM4v6_82 = m * here->BSIM4v6grbpd; here->BSIM4v6_83 = m * here->BSIM4v6grbdb; here->BSIM4v6_84 = m * here->BSIM4v6grbpd; here->BSIM4v6_85 = m * here->BSIM4v6grbpb; here->BSIM4v6_86 = m * here->BSIM4v6grbps; here->BSIM4v6_87 = m * (here->BSIM4v6grbpd + here->BSIM4v6grbps + here->BSIM4v6grbpb); /* WDLiu: (gcbbb - here->BSIM4v6gbbs) already added to BPbpPtr */ here->BSIM4v6_88 = m * (gcsbsb - here->BSIM4v6gbs); here->BSIM4v6_89 = m * here->BSIM4v6grbps; here->BSIM4v6_90 = m * here->BSIM4v6grbsb; here->BSIM4v6_91 = m * (here->BSIM4v6gbs - gcsbsb + here->BSIM4v6grbps + here->BSIM4v6grbsb); here->BSIM4v6_92 = m * here->BSIM4v6grbdb; here->BSIM4v6_93 = m * here->BSIM4v6grbpb; here->BSIM4v6_94 = m * here->BSIM4v6grbsb; here->BSIM4v6_95 = m * (here->BSIM4v6grbsb + here->BSIM4v6grbdb + here->BSIM4v6grbpb); } if (here->BSIM4v6trnqsMod) { here->BSIM4v6_96 = m * (gqdef + here->BSIM4v6gtau); here->BSIM4v6_97 = m * (ggtg - gcqgb); here->BSIM4v6_98 = m * (ggtd - gcqdb); here->BSIM4v6_99 = m * (ggts - gcqsb); here->BSIM4v6_100 = m * (ggtb - gcqbb); here->BSIM4v6_101 = m * dxpart * here->BSIM4v6gtau; here->BSIM4v6_102 = m * sxpart * here->BSIM4v6gtau; here->BSIM4v6_103 = m * here->BSIM4v6gtau; } #else if (here->BSIM4v6rgateMod == 1) { (*(here->BSIM4v6GEgePtr) += m * geltd); (*(here->BSIM4v6GPgePtr) -= m * geltd); (*(here->BSIM4v6GEgpPtr) -= m * geltd); (*(here->BSIM4v6GPgpPtr) += m * (gcggb + geltd - ggtg + gIgtotg)); (*(here->BSIM4v6GPdpPtr) += m * (gcgdb - ggtd + gIgtotd)); (*(here->BSIM4v6GPspPtr) += m * (gcgsb - ggts + gIgtots)); (*(here->BSIM4v6GPbpPtr) += m * (gcgbb - ggtb + gIgtotb)); } /* WDLiu: gcrg already subtracted from all gcrgg below */ else if (here->BSIM4v6rgateMod == 2) { (*(here->BSIM4v6GEgePtr) += m * gcrg); (*(here->BSIM4v6GEgpPtr) += m * gcrgg); (*(here->BSIM4v6GEdpPtr) += m * gcrgd); (*(here->BSIM4v6GEspPtr) += m * gcrgs); (*(here->BSIM4v6GEbpPtr) += m * gcrgb); (*(here->BSIM4v6GPgePtr) -= m * gcrg); (*(here->BSIM4v6GPgpPtr) += m * (gcggb - gcrgg - ggtg + gIgtotg)); (*(here->BSIM4v6GPdpPtr) += m * (gcgdb - gcrgd - ggtd + gIgtotd)); (*(here->BSIM4v6GPspPtr) += m * (gcgsb - gcrgs - ggts + gIgtots)); (*(here->BSIM4v6GPbpPtr) += m * (gcgbb - gcrgb - ggtb + gIgtotb)); } else if (here->BSIM4v6rgateMod == 3) { (*(here->BSIM4v6GEgePtr) += m * geltd); (*(here->BSIM4v6GEgmPtr) -= m * geltd); (*(here->BSIM4v6GMgePtr) -= m * geltd); (*(here->BSIM4v6GMgmPtr) += m * (geltd + gcrg + gcgmgmb)); (*(here->BSIM4v6GMdpPtr) += m * (gcrgd + gcgmdb)); (*(here->BSIM4v6GMgpPtr) += m * gcrgg); (*(here->BSIM4v6GMspPtr) += m * (gcrgs + gcgmsb)); (*(here->BSIM4v6GMbpPtr) += m * (gcrgb + gcgmbb)); (*(here->BSIM4v6DPgmPtr) += m * gcdgmb); (*(here->BSIM4v6GPgmPtr) -= m * gcrg); (*(here->BSIM4v6SPgmPtr) += m * gcsgmb); (*(here->BSIM4v6BPgmPtr) += m * gcbgmb); (*(here->BSIM4v6GPgpPtr) += m * (gcggb - gcrgg - ggtg + gIgtotg)); (*(here->BSIM4v6GPdpPtr) += m * (gcgdb - gcrgd - ggtd + gIgtotd)); (*(here->BSIM4v6GPspPtr) += m * (gcgsb - gcrgs - ggts + gIgtots)); (*(here->BSIM4v6GPbpPtr) += m * (gcgbb - gcrgb - ggtb + gIgtotb)); } else { (*(here->BSIM4v6GPgpPtr) += m * (gcggb - ggtg + gIgtotg)); (*(here->BSIM4v6GPdpPtr) += m * (gcgdb - ggtd + gIgtotd)); (*(here->BSIM4v6GPspPtr) += m * (gcgsb - ggts + gIgtots)); (*(here->BSIM4v6GPbpPtr) += m * (gcgbb - ggtb + gIgtotb)); } if (model->BSIM4v6rdsMod) { (*(here->BSIM4v6DgpPtr) += m * gdtotg); (*(here->BSIM4v6DspPtr) += m * gdtots); (*(here->BSIM4v6DbpPtr) += m * gdtotb); (*(here->BSIM4v6SdpPtr) += m * gstotd); (*(here->BSIM4v6SgpPtr) += m * gstotg); (*(here->BSIM4v6SbpPtr) += m * gstotb); } (*(here->BSIM4v6DPdpPtr) += m * (gdpr + here->BSIM4v6gds + here->BSIM4v6gbd + T1 * ddxpart_dVd - gdtotd + RevSum + gcddb + gbdpdp + dxpart * ggtd - gIdtotd)); (*(here->BSIM4v6DPdPtr) -= m * (gdpr + gdtot)); (*(here->BSIM4v6DPgpPtr) += m * (Gm + gcdgb - gdtotg + gbdpg - gIdtotg + dxpart * ggtg + T1 * ddxpart_dVg)); (*(here->BSIM4v6DPspPtr) -= m * (here->BSIM4v6gds + gdtots - dxpart * ggts + gIdtots - T1 * ddxpart_dVs + FwdSum - gcdsb - gbdpsp)); (*(here->BSIM4v6DPbpPtr) -= m * (gjbd + gdtotb - Gmbs - gcdbb - gbdpb + gIdtotb - T1 * ddxpart_dVb - dxpart * ggtb)); (*(here->BSIM4v6DdpPtr) -= m * (gdpr - gdtotd)); (*(here->BSIM4v6DdPtr) += m * (gdpr + gdtot)); (*(here->BSIM4v6SPdpPtr) -= m * (here->BSIM4v6gds + gstotd + RevSum - gcsdb - gbspdp - T1 * dsxpart_dVd - sxpart * ggtd + gIstotd)); (*(here->BSIM4v6SPgpPtr) += m * (gcsgb - Gm - gstotg + gbspg + sxpart * ggtg + T1 * dsxpart_dVg - gIstotg)); (*(here->BSIM4v6SPspPtr) += m * (gspr + here->BSIM4v6gds + here->BSIM4v6gbs + T1 * dsxpart_dVs - gstots + FwdSum + gcssb + gbspsp + sxpart * ggts - gIstots)); (*(here->BSIM4v6SPsPtr) -= m * (gspr + gstot)); (*(here->BSIM4v6SPbpPtr) -= m * (gjbs + gstotb + Gmbs - gcsbb - gbspb - sxpart * ggtb - T1 * dsxpart_dVb + gIstotb)); (*(here->BSIM4v6SspPtr) -= m * (gspr - gstots)); (*(here->BSIM4v6SsPtr) += m * (gspr + gstot)); (*(here->BSIM4v6BPdpPtr) += m * (gcbdb - gjbd + gbbdp - gIbtotd)); (*(here->BSIM4v6BPgpPtr) += m * (gcbgb - here->BSIM4v6gbgs - gIbtotg)); (*(here->BSIM4v6BPspPtr) += m * (gcbsb - gjbs + gbbsp - gIbtots)); (*(here->BSIM4v6BPbpPtr) += m * (gjbd + gjbs + gcbbb - here->BSIM4v6gbbs - gIbtotb)); ggidld = here->BSIM4v6ggidld; ggidlg = here->BSIM4v6ggidlg; ggidlb = here->BSIM4v6ggidlb; ggislg = here->BSIM4v6ggislg; ggisls = here->BSIM4v6ggisls; ggislb = here->BSIM4v6ggislb; /* stamp gidl */ (*(here->BSIM4v6DPdpPtr) += m * ggidld); (*(here->BSIM4v6DPgpPtr) += m * ggidlg); (*(here->BSIM4v6DPspPtr) -= m * (ggidlg + ggidld + ggidlb)); (*(here->BSIM4v6DPbpPtr) += m * ggidlb); (*(here->BSIM4v6BPdpPtr) -= m * ggidld); (*(here->BSIM4v6BPgpPtr) -= m * ggidlg); (*(here->BSIM4v6BPspPtr) += m * (ggidlg + ggidld + ggidlb)); (*(here->BSIM4v6BPbpPtr) -= m * ggidlb); /* stamp gisl */ (*(here->BSIM4v6SPdpPtr) -= m * (ggisls + ggislg + ggislb)); (*(here->BSIM4v6SPgpPtr) += m * ggislg); (*(here->BSIM4v6SPspPtr) += m * ggisls); (*(here->BSIM4v6SPbpPtr) += m * ggislb); (*(here->BSIM4v6BPdpPtr) += m * (ggislg + ggisls + ggislb)); (*(here->BSIM4v6BPgpPtr) -= m * ggislg); (*(here->BSIM4v6BPspPtr) -= m * ggisls); (*(here->BSIM4v6BPbpPtr) -= m * ggislb); if (here->BSIM4v6rbodyMod) { (*(here->BSIM4v6DPdbPtr) += m * (gcdbdb - here->BSIM4v6gbd)); (*(here->BSIM4v6SPsbPtr) -= m * (here->BSIM4v6gbs - gcsbsb)); (*(here->BSIM4v6DBdpPtr) += m * (gcdbdb - here->BSIM4v6gbd)); (*(here->BSIM4v6DBdbPtr) += m * (here->BSIM4v6gbd - gcdbdb + here->BSIM4v6grbpd + here->BSIM4v6grbdb)); (*(here->BSIM4v6DBbpPtr) -= m * here->BSIM4v6grbpd); (*(here->BSIM4v6DBbPtr) -= m * here->BSIM4v6grbdb); (*(here->BSIM4v6BPdbPtr) -= m * here->BSIM4v6grbpd); (*(here->BSIM4v6BPbPtr) -= m * here->BSIM4v6grbpb); (*(here->BSIM4v6BPsbPtr) -= m * here->BSIM4v6grbps); (*(here->BSIM4v6BPbpPtr) += m * (here->BSIM4v6grbpd + here->BSIM4v6grbps + here->BSIM4v6grbpb)); /* WDLiu: (gcbbb - here->BSIM4v6gbbs) already added to BPbpPtr */ (*(here->BSIM4v6SBspPtr) += m * (gcsbsb - here->BSIM4v6gbs)); (*(here->BSIM4v6SBbpPtr) -= m * here->BSIM4v6grbps); (*(here->BSIM4v6SBbPtr) -= m * here->BSIM4v6grbsb); (*(here->BSIM4v6SBsbPtr) += m * (here->BSIM4v6gbs - gcsbsb + here->BSIM4v6grbps + here->BSIM4v6grbsb)); (*(here->BSIM4v6BdbPtr) -= m * here->BSIM4v6grbdb); (*(here->BSIM4v6BbpPtr) -= m * here->BSIM4v6grbpb); (*(here->BSIM4v6BsbPtr) -= m * here->BSIM4v6grbsb); (*(here->BSIM4v6BbPtr) += m * (here->BSIM4v6grbsb + here->BSIM4v6grbdb + here->BSIM4v6grbpb)); } if (here->BSIM4v6trnqsMod) { (*(here->BSIM4v6QqPtr) += m * (gqdef + here->BSIM4v6gtau)); (*(here->BSIM4v6QgpPtr) += m * (ggtg - gcqgb)); (*(here->BSIM4v6QdpPtr) += m * (ggtd - gcqdb)); (*(here->BSIM4v6QspPtr) += m * (ggts - gcqsb)); (*(here->BSIM4v6QbpPtr) += m * (ggtb - gcqbb)); (*(here->BSIM4v6DPqPtr) += m * dxpart * here->BSIM4v6gtau); (*(here->BSIM4v6SPqPtr) += m * sxpart * here->BSIM4v6gtau); (*(here->BSIM4v6GPqPtr) -= m * here->BSIM4v6gtau); } #endif line1000: ; #ifndef USE_OMP } /* End of MOSFET Instance */ } /* End of Model Instance */ #endif return(OK); } /* function to compute poly depletion effect */ int BSIM4v6polyDepletion( double phi, double ngate, double epsgate, double coxe, double Vgs, double *Vgs_eff, double *dVgs_eff_dVg) { double T1, T2, T3, T4, T5, T6, T7, T8; /* Poly Gate Si Depletion Effect */ if ((ngate > 1.0e18) && (ngate < 1.0e25) && (Vgs > phi) && (epsgate!=0) ){ T1 = 1.0e6 * CHARGE * epsgate * ngate / (coxe * coxe); T8 = Vgs - phi; T4 = sqrt(1.0 + 2.0 * T8 / T1); T2 = 2.0 * T8 / (T4 + 1.0); T3 = 0.5 * T2 * T2 / T1; /* T3 = Vpoly */ T7 = 1.12 - T3 - 0.05; T6 = sqrt(T7 * T7 + 0.224); T5 = 1.12 - 0.5 * (T7 + T6); *Vgs_eff = Vgs - T5; *dVgs_eff_dVg = 1.0 - (0.5 - 0.5 / T4) * (1.0 + T7 / T6); } else { *Vgs_eff = Vgs; *dVgs_eff_dVg = 1.0; } return(0); } #ifdef USE_OMP void BSIM4v6LoadRhsMat(GENmodel *inModel, CKTcircuit *ckt) { int InstCount, idx; BSIM4v6instance **InstArray; BSIM4v6instance *here; BSIM4v6model *model = (BSIM4v6model*)inModel; InstArray = model->BSIM4v6InstanceArray; InstCount = model->BSIM4v6InstCount; for(idx = 0; idx < InstCount; idx++) { here = InstArray[idx]; model = BSIM4v6modPtr(here); /* Update b for Ax = b */ (*(ckt->CKTrhs + here->BSIM4v6dNodePrime) += here->BSIM4v6rhsdPrime); (*(ckt->CKTrhs + here->BSIM4v6gNodePrime) -= here->BSIM4v6rhsgPrime); if (here->BSIM4v6rgateMod == 2) (*(ckt->CKTrhs + here->BSIM4v6gNodeExt) -= here->BSIM4v6rhsgExt); else if (here->BSIM4v6rgateMod == 3) (*(ckt->CKTrhs + here->BSIM4v6gNodeMid) -= here->BSIM4v6grhsMid); if (!here->BSIM4v6rbodyMod) { (*(ckt->CKTrhs + here->BSIM4v6bNodePrime) += here->BSIM4v6rhsbPrime); (*(ckt->CKTrhs + here->BSIM4v6sNodePrime) += here->BSIM4v6rhssPrime); } else { (*(ckt->CKTrhs + here->BSIM4v6dbNode) -= here->BSIM4v6rhsdb); (*(ckt->CKTrhs + here->BSIM4v6bNodePrime) += here->BSIM4v6rhsbPrime); (*(ckt->CKTrhs + here->BSIM4v6sbNode) -= here->BSIM4v6rhssb); (*(ckt->CKTrhs + here->BSIM4v6sNodePrime) += here->BSIM4v6rhssPrime); } if (model->BSIM4v6rdsMod) { (*(ckt->CKTrhs + here->BSIM4v6dNode) -= here->BSIM4v6rhsd); (*(ckt->CKTrhs + here->BSIM4v6sNode) += here->BSIM4v6rhss); } if (here->BSIM4v6trnqsMod) *(ckt->CKTrhs + here->BSIM4v6qNode) += here->BSIM4v6rhsq; /* Update A for Ax = b */ if (here->BSIM4v6rgateMod == 1) { (*(here->BSIM4v6GEgePtr) += here->BSIM4v6_1); (*(here->BSIM4v6GPgePtr) -= here->BSIM4v6_2); (*(here->BSIM4v6GEgpPtr) -= here->BSIM4v6_3); (*(here->BSIM4v6GPgpPtr) += here->BSIM4v6_4); (*(here->BSIM4v6GPdpPtr) += here->BSIM4v6_5); (*(here->BSIM4v6GPspPtr) += here->BSIM4v6_6); (*(here->BSIM4v6GPbpPtr) += here->BSIM4v6_7); } else if (here->BSIM4v6rgateMod == 2) { (*(here->BSIM4v6GEgePtr) += here->BSIM4v6_8); (*(here->BSIM4v6GEgpPtr) += here->BSIM4v6_9); (*(here->BSIM4v6GEdpPtr) += here->BSIM4v6_10); (*(here->BSIM4v6GEspPtr) += here->BSIM4v6_11); (*(here->BSIM4v6GEbpPtr) += here->BSIM4v6_12); (*(here->BSIM4v6GPgePtr) -= here->BSIM4v6_13); (*(here->BSIM4v6GPgpPtr) += here->BSIM4v6_14); (*(here->BSIM4v6GPdpPtr) += here->BSIM4v6_15); (*(here->BSIM4v6GPspPtr) += here->BSIM4v6_16); (*(here->BSIM4v6GPbpPtr) += here->BSIM4v6_17); } else if (here->BSIM4v6rgateMod == 3) { (*(here->BSIM4v6GEgePtr) += here->BSIM4v6_18); (*(here->BSIM4v6GEgmPtr) -= here->BSIM4v6_19); (*(here->BSIM4v6GMgePtr) -= here->BSIM4v6_20); (*(here->BSIM4v6GMgmPtr) += here->BSIM4v6_21); (*(here->BSIM4v6GMdpPtr) += here->BSIM4v6_22); (*(here->BSIM4v6GMgpPtr) += here->BSIM4v6_23); (*(here->BSIM4v6GMspPtr) += here->BSIM4v6_24); (*(here->BSIM4v6GMbpPtr) += here->BSIM4v6_25); (*(here->BSIM4v6DPgmPtr) += here->BSIM4v6_26); (*(here->BSIM4v6GPgmPtr) -= here->BSIM4v6_27); (*(here->BSIM4v6SPgmPtr) += here->BSIM4v6_28); (*(here->BSIM4v6BPgmPtr) += here->BSIM4v6_29); (*(here->BSIM4v6GPgpPtr) += here->BSIM4v6_30); (*(here->BSIM4v6GPdpPtr) += here->BSIM4v6_31); (*(here->BSIM4v6GPspPtr) += here->BSIM4v6_32); (*(here->BSIM4v6GPbpPtr) += here->BSIM4v6_33); } else { (*(here->BSIM4v6GPgpPtr) += here->BSIM4v6_34); (*(here->BSIM4v6GPdpPtr) += here->BSIM4v6_35); (*(here->BSIM4v6GPspPtr) += here->BSIM4v6_36); (*(here->BSIM4v6GPbpPtr) += here->BSIM4v6_37); } if (model->BSIM4v6rdsMod) { (*(here->BSIM4v6DgpPtr) += here->BSIM4v6_38); (*(here->BSIM4v6DspPtr) += here->BSIM4v6_39); (*(here->BSIM4v6DbpPtr) += here->BSIM4v6_40); (*(here->BSIM4v6SdpPtr) += here->BSIM4v6_41); (*(here->BSIM4v6SgpPtr) += here->BSIM4v6_42); (*(here->BSIM4v6SbpPtr) += here->BSIM4v6_43); } (*(here->BSIM4v6DPdpPtr) += here->BSIM4v6_44); (*(here->BSIM4v6DPdPtr) -= here->BSIM4v6_45); (*(here->BSIM4v6DPgpPtr) += here->BSIM4v6_46); (*(here->BSIM4v6DPspPtr) -= here->BSIM4v6_47); (*(here->BSIM4v6DPbpPtr) -= here->BSIM4v6_48); (*(here->BSIM4v6DdpPtr) -= here->BSIM4v6_49); (*(here->BSIM4v6DdPtr) += here->BSIM4v6_50); (*(here->BSIM4v6SPdpPtr) -= here->BSIM4v6_51); (*(here->BSIM4v6SPgpPtr) += here->BSIM4v6_52); (*(here->BSIM4v6SPspPtr) += here->BSIM4v6_53); (*(here->BSIM4v6SPsPtr) -= here->BSIM4v6_54); (*(here->BSIM4v6SPbpPtr) -= here->BSIM4v6_55); (*(here->BSIM4v6SspPtr) -= here->BSIM4v6_56); (*(here->BSIM4v6SsPtr) += here->BSIM4v6_57); (*(here->BSIM4v6BPdpPtr) += here->BSIM4v6_58); (*(here->BSIM4v6BPgpPtr) += here->BSIM4v6_59); (*(here->BSIM4v6BPspPtr) += here->BSIM4v6_60); (*(here->BSIM4v6BPbpPtr) += here->BSIM4v6_61); /* stamp gidl */ (*(here->BSIM4v6DPdpPtr) += here->BSIM4v6_62); (*(here->BSIM4v6DPgpPtr) += here->BSIM4v6_63); (*(here->BSIM4v6DPspPtr) -= here->BSIM4v6_64); (*(here->BSIM4v6DPbpPtr) += here->BSIM4v6_65); (*(here->BSIM4v6BPdpPtr) -= here->BSIM4v6_66); (*(here->BSIM4v6BPgpPtr) -= here->BSIM4v6_67); (*(here->BSIM4v6BPspPtr) += here->BSIM4v6_68); (*(here->BSIM4v6BPbpPtr) -= here->BSIM4v6_69); /* stamp gisl */ (*(here->BSIM4v6SPdpPtr) -= here->BSIM4v6_70); (*(here->BSIM4v6SPgpPtr) += here->BSIM4v6_71); (*(here->BSIM4v6SPspPtr) += here->BSIM4v6_72); (*(here->BSIM4v6SPbpPtr) += here->BSIM4v6_73); (*(here->BSIM4v6BPdpPtr) += here->BSIM4v6_74); (*(here->BSIM4v6BPgpPtr) -= here->BSIM4v6_75); (*(here->BSIM4v6BPspPtr) -= here->BSIM4v6_76); (*(here->BSIM4v6BPbpPtr) -= here->BSIM4v6_77); if (here->BSIM4v6rbodyMod) { (*(here->BSIM4v6DPdbPtr) += here->BSIM4v6_78); (*(here->BSIM4v6SPsbPtr) -= here->BSIM4v6_79); (*(here->BSIM4v6DBdpPtr) += here->BSIM4v6_80); (*(here->BSIM4v6DBdbPtr) += here->BSIM4v6_81); (*(here->BSIM4v6DBbpPtr) -= here->BSIM4v6_82); (*(here->BSIM4v6DBbPtr) -= here->BSIM4v6_83); (*(here->BSIM4v6BPdbPtr) -= here->BSIM4v6_84); (*(here->BSIM4v6BPbPtr) -= here->BSIM4v6_85); (*(here->BSIM4v6BPsbPtr) -= here->BSIM4v6_86); (*(here->BSIM4v6BPbpPtr) += here->BSIM4v6_87); (*(here->BSIM4v6SBspPtr) += here->BSIM4v6_88); (*(here->BSIM4v6SBbpPtr) -= here->BSIM4v6_89); (*(here->BSIM4v6SBbPtr) -= here->BSIM4v6_90); (*(here->BSIM4v6SBsbPtr) += here->BSIM4v6_91); (*(here->BSIM4v6BdbPtr) -= here->BSIM4v6_92); (*(here->BSIM4v6BbpPtr) -= here->BSIM4v6_93); (*(here->BSIM4v6BsbPtr) -= here->BSIM4v6_94); (*(here->BSIM4v6BbPtr) += here->BSIM4v6_95); } if (here->BSIM4v6trnqsMod) { (*(here->BSIM4v6QqPtr) += here->BSIM4v6_96); (*(here->BSIM4v6QgpPtr) += here->BSIM4v6_97); (*(here->BSIM4v6QdpPtr) += here->BSIM4v6_98); (*(here->BSIM4v6QspPtr) += here->BSIM4v6_99); (*(here->BSIM4v6QbpPtr) += here->BSIM4v6_100); (*(here->BSIM4v6DPqPtr) += here->BSIM4v6_101); (*(here->BSIM4v6SPqPtr) += here->BSIM4v6_102); (*(here->BSIM4v6GPqPtr) -= here->BSIM4v6_103); } } } #endif tmpk8ny_4pz/src/spicelib/devices/bsim4v6/Makefile.am0000644000175000017500000000113213546075722022506 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libbsim4v6.la libbsim4v6_la_SOURCES = \ b4v6.c \ b4v6acld.c \ b4v6ask.c \ b4v6check.c \ b4v6cvtest.c \ b4v6geo.c \ b4v6getic.c \ b4v6ld.c \ b4v6mask.c \ b4v6mdel.c \ b4v6mpar.c \ b4v6noi.c \ b4v6par.c \ b4v6pzld.c \ b4v6set.c \ b4v6soachk.c \ b4v6temp.c \ b4v6trunc.c \ bsim4v6def.h \ bsim4v6ext.h \ bsim4v6init.c \ bsim4v6init.h \ bsim4v6itf.h AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in EXTRA_DIST = B4TERMS_OF_USE tmpk8ny_4pz/src/spicelib/devices/bsim4v6/b4v6mpar.c0000644000175000017500000036112713546075722022274 0ustar carstencarsten/**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4mpar.c of BSIM4.6.1. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Authors: 2008- Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. * Modified by Mohan Dunga, 12/13/2006 * Modified by Mohan Dunga, Wenwei Yang, 05/18/2007. * Modified by Wenwei Yang, 07/31/2008. **********/ #include "ngspice/ngspice.h" #include "bsim4v6def.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/const.h" int BSIM4v6mParam( int param, IFvalue *value, GENmodel *inMod) { BSIM4v6model *mod = (BSIM4v6model*)inMod; switch(param) { case BSIM4v6_MOD_MOBMOD : mod->BSIM4v6mobMod = value->iValue; mod->BSIM4v6mobModGiven = TRUE; break; case BSIM4v6_MOD_BINUNIT : mod->BSIM4v6binUnit = value->iValue; mod->BSIM4v6binUnitGiven = TRUE; break; case BSIM4v6_MOD_PARAMCHK : mod->BSIM4v6paramChk = value->iValue; mod->BSIM4v6paramChkGiven = TRUE; break; case BSIM4v6_MOD_CVCHARGEMOD : mod->BSIM4v6cvchargeMod = value->iValue; mod->BSIM4v6cvchargeModGiven = TRUE; break; case BSIM4v6_MOD_CAPMOD : mod->BSIM4v6capMod = value->iValue; mod->BSIM4v6capModGiven = TRUE; break; case BSIM4v6_MOD_DIOMOD : mod->BSIM4v6dioMod = value->iValue; mod->BSIM4v6dioModGiven = TRUE; break; case BSIM4v6_MOD_RDSMOD : mod->BSIM4v6rdsMod = value->iValue; mod->BSIM4v6rdsModGiven = TRUE; break; case BSIM4v6_MOD_TRNQSMOD : mod->BSIM4v6trnqsMod = value->iValue; mod->BSIM4v6trnqsModGiven = TRUE; break; case BSIM4v6_MOD_ACNQSMOD : mod->BSIM4v6acnqsMod = value->iValue; mod->BSIM4v6acnqsModGiven = TRUE; break; case BSIM4v6_MOD_RBODYMOD : mod->BSIM4v6rbodyMod = value->iValue; mod->BSIM4v6rbodyModGiven = TRUE; break; case BSIM4v6_MOD_RGATEMOD : mod->BSIM4v6rgateMod = value->iValue; mod->BSIM4v6rgateModGiven = TRUE; break; case BSIM4v6_MOD_PERMOD : mod->BSIM4v6perMod = value->iValue; mod->BSIM4v6perModGiven = TRUE; break; case BSIM4v6_MOD_GEOMOD : mod->BSIM4v6geoMod = value->iValue; mod->BSIM4v6geoModGiven = TRUE; break; case BSIM4v6_MOD_RGEOMOD : mod->BSIM4v6rgeoMod = value->iValue; mod->BSIM4v6rgeoModGiven = TRUE; break; case BSIM4v6_MOD_FNOIMOD : mod->BSIM4v6fnoiMod = value->iValue; mod->BSIM4v6fnoiModGiven = TRUE; break; case BSIM4v6_MOD_TNOIMOD : mod->BSIM4v6tnoiMod = value->iValue; mod->BSIM4v6tnoiModGiven = TRUE; break; case BSIM4v6_MOD_MTRLMOD : mod->BSIM4v6mtrlMod = value->iValue; mod->BSIM4v6mtrlModGiven = TRUE; break; case BSIM4v6_MOD_IGCMOD : mod->BSIM4v6igcMod = value->iValue; mod->BSIM4v6igcModGiven = TRUE; break; case BSIM4v6_MOD_IGBMOD : mod->BSIM4v6igbMod = value->iValue; mod->BSIM4v6igbModGiven = TRUE; break; case BSIM4v6_MOD_TEMPMOD : mod->BSIM4v6tempMod = value->iValue; mod->BSIM4v6tempModGiven = TRUE; break; case BSIM4v6_MOD_VERSION : mod->BSIM4v6version = value->sValue; mod->BSIM4v6versionGiven = TRUE; break; case BSIM4v6_MOD_TOXREF : mod->BSIM4v6toxref = value->rValue; mod->BSIM4v6toxrefGiven = TRUE; break; case BSIM4v6_MOD_EOT : mod->BSIM4v6eot = value->rValue; mod->BSIM4v6eotGiven = TRUE; break; case BSIM4v6_MOD_VDDEOT : mod->BSIM4v6vddeot = value->rValue; mod->BSIM4v6vddeotGiven = TRUE; break; case BSIM4v6_MOD_TEMPEOT : mod->BSIM4v6tempeot = value->rValue; mod->BSIM4v6tempeotGiven = TRUE; break; case BSIM4v6_MOD_LEFFEOT : mod->BSIM4v6leffeot = value->rValue; mod->BSIM4v6leffeotGiven = TRUE; break; case BSIM4v6_MOD_WEFFEOT : mod->BSIM4v6weffeot = value->rValue; mod->BSIM4v6weffeotGiven = TRUE; break; case BSIM4v6_MOD_ADOS : mod->BSIM4v6ados = value->rValue; mod->BSIM4v6adosGiven = TRUE; break; case BSIM4v6_MOD_BDOS : mod->BSIM4v6bdos = value->rValue; mod->BSIM4v6bdosGiven = TRUE; break; case BSIM4v6_MOD_TOXE : mod->BSIM4v6toxe = value->rValue; mod->BSIM4v6toxeGiven = TRUE; break; case BSIM4v6_MOD_TOXP : mod->BSIM4v6toxp = value->rValue; mod->BSIM4v6toxpGiven = TRUE; break; case BSIM4v6_MOD_TOXM : mod->BSIM4v6toxm = value->rValue; mod->BSIM4v6toxmGiven = TRUE; break; case BSIM4v6_MOD_DTOX : mod->BSIM4v6dtox = value->rValue; mod->BSIM4v6dtoxGiven = TRUE; break; case BSIM4v6_MOD_EPSROX : mod->BSIM4v6epsrox = value->rValue; mod->BSIM4v6epsroxGiven = TRUE; break; case BSIM4v6_MOD_CDSC : mod->BSIM4v6cdsc = value->rValue; mod->BSIM4v6cdscGiven = TRUE; break; case BSIM4v6_MOD_CDSCB : mod->BSIM4v6cdscb = value->rValue; mod->BSIM4v6cdscbGiven = TRUE; break; case BSIM4v6_MOD_CDSCD : mod->BSIM4v6cdscd = value->rValue; mod->BSIM4v6cdscdGiven = TRUE; break; case BSIM4v6_MOD_CIT : mod->BSIM4v6cit = value->rValue; mod->BSIM4v6citGiven = TRUE; break; case BSIM4v6_MOD_NFACTOR : mod->BSIM4v6nfactor = value->rValue; mod->BSIM4v6nfactorGiven = TRUE; break; case BSIM4v6_MOD_XJ: mod->BSIM4v6xj = value->rValue; mod->BSIM4v6xjGiven = TRUE; break; case BSIM4v6_MOD_VSAT: mod->BSIM4v6vsat = value->rValue; mod->BSIM4v6vsatGiven = TRUE; break; case BSIM4v6_MOD_A0: mod->BSIM4v6a0 = value->rValue; mod->BSIM4v6a0Given = TRUE; break; case BSIM4v6_MOD_AGS: mod->BSIM4v6ags= value->rValue; mod->BSIM4v6agsGiven = TRUE; break; case BSIM4v6_MOD_A1: mod->BSIM4v6a1 = value->rValue; mod->BSIM4v6a1Given = TRUE; break; case BSIM4v6_MOD_A2: mod->BSIM4v6a2 = value->rValue; mod->BSIM4v6a2Given = TRUE; break; case BSIM4v6_MOD_AT: mod->BSIM4v6at = value->rValue; mod->BSIM4v6atGiven = TRUE; break; case BSIM4v6_MOD_KETA: mod->BSIM4v6keta = value->rValue; mod->BSIM4v6ketaGiven = TRUE; break; case BSIM4v6_MOD_NSUB: mod->BSIM4v6nsub = value->rValue; mod->BSIM4v6nsubGiven = TRUE; break; case BSIM4v6_MOD_PHIG: mod->BSIM4v6phig = value->rValue; mod->BSIM4v6phigGiven = TRUE; break; case BSIM4v6_MOD_EPSRGATE: mod->BSIM4v6epsrgate = value->rValue; mod->BSIM4v6epsrgateGiven = TRUE; break; case BSIM4v6_MOD_EASUB: mod->BSIM4v6easub = value->rValue; mod->BSIM4v6easubGiven = TRUE; break; case BSIM4v6_MOD_EPSRSUB: mod->BSIM4v6epsrsub = value->rValue; mod->BSIM4v6epsrsubGiven = TRUE; break; case BSIM4v6_MOD_NI0SUB: mod->BSIM4v6ni0sub = value->rValue; mod->BSIM4v6ni0subGiven = TRUE; break; case BSIM4v6_MOD_BG0SUB: mod->BSIM4v6bg0sub = value->rValue; mod->BSIM4v6bg0subGiven = TRUE; break; case BSIM4v6_MOD_TBGASUB: mod->BSIM4v6tbgasub = value->rValue; mod->BSIM4v6tbgasubGiven = TRUE; break; case BSIM4v6_MOD_TBGBSUB: mod->BSIM4v6tbgbsub = value->rValue; mod->BSIM4v6tbgbsubGiven = TRUE; break; case BSIM4v6_MOD_NDEP: mod->BSIM4v6ndep = value->rValue; mod->BSIM4v6ndepGiven = TRUE; if (mod->BSIM4v6ndep > 1.0e20) mod->BSIM4v6ndep *= 1.0e-6; break; case BSIM4v6_MOD_NSD: mod->BSIM4v6nsd = value->rValue; mod->BSIM4v6nsdGiven = TRUE; if (mod->BSIM4v6nsd > 1.0e23) mod->BSIM4v6nsd *= 1.0e-6; break; case BSIM4v6_MOD_NGATE: mod->BSIM4v6ngate = value->rValue; mod->BSIM4v6ngateGiven = TRUE; if (mod->BSIM4v6ngate > 1.0e23) mod->BSIM4v6ngate *= 1.0e-6; break; case BSIM4v6_MOD_GAMMA1: mod->BSIM4v6gamma1 = value->rValue; mod->BSIM4v6gamma1Given = TRUE; break; case BSIM4v6_MOD_GAMMA2: mod->BSIM4v6gamma2 = value->rValue; mod->BSIM4v6gamma2Given = TRUE; break; case BSIM4v6_MOD_VBX: mod->BSIM4v6vbx = value->rValue; mod->BSIM4v6vbxGiven = TRUE; break; case BSIM4v6_MOD_VBM: mod->BSIM4v6vbm = value->rValue; mod->BSIM4v6vbmGiven = TRUE; break; case BSIM4v6_MOD_XT: mod->BSIM4v6xt = value->rValue; mod->BSIM4v6xtGiven = TRUE; break; case BSIM4v6_MOD_K1: mod->BSIM4v6k1 = value->rValue; mod->BSIM4v6k1Given = TRUE; break; case BSIM4v6_MOD_KT1: mod->BSIM4v6kt1 = value->rValue; mod->BSIM4v6kt1Given = TRUE; break; case BSIM4v6_MOD_KT1L: mod->BSIM4v6kt1l = value->rValue; mod->BSIM4v6kt1lGiven = TRUE; break; case BSIM4v6_MOD_KT2: mod->BSIM4v6kt2 = value->rValue; mod->BSIM4v6kt2Given = TRUE; break; case BSIM4v6_MOD_K2: mod->BSIM4v6k2 = value->rValue; mod->BSIM4v6k2Given = TRUE; break; case BSIM4v6_MOD_K3: mod->BSIM4v6k3 = value->rValue; mod->BSIM4v6k3Given = TRUE; break; case BSIM4v6_MOD_K3B: mod->BSIM4v6k3b = value->rValue; mod->BSIM4v6k3bGiven = TRUE; break; case BSIM4v6_MOD_LPE0: mod->BSIM4v6lpe0 = value->rValue; mod->BSIM4v6lpe0Given = TRUE; break; case BSIM4v6_MOD_LPEB: mod->BSIM4v6lpeb = value->rValue; mod->BSIM4v6lpebGiven = TRUE; break; case BSIM4v6_MOD_DVTP0: mod->BSIM4v6dvtp0 = value->rValue; mod->BSIM4v6dvtp0Given = TRUE; break; case BSIM4v6_MOD_DVTP1: mod->BSIM4v6dvtp1 = value->rValue; mod->BSIM4v6dvtp1Given = TRUE; break; case BSIM4v6_MOD_W0: mod->BSIM4v6w0 = value->rValue; mod->BSIM4v6w0Given = TRUE; break; case BSIM4v6_MOD_DVT0: mod->BSIM4v6dvt0 = value->rValue; mod->BSIM4v6dvt0Given = TRUE; break; case BSIM4v6_MOD_DVT1: mod->BSIM4v6dvt1 = value->rValue; mod->BSIM4v6dvt1Given = TRUE; break; case BSIM4v6_MOD_DVT2: mod->BSIM4v6dvt2 = value->rValue; mod->BSIM4v6dvt2Given = TRUE; break; case BSIM4v6_MOD_DVT0W: mod->BSIM4v6dvt0w = value->rValue; mod->BSIM4v6dvt0wGiven = TRUE; break; case BSIM4v6_MOD_DVT1W: mod->BSIM4v6dvt1w = value->rValue; mod->BSIM4v6dvt1wGiven = TRUE; break; case BSIM4v6_MOD_DVT2W: mod->BSIM4v6dvt2w = value->rValue; mod->BSIM4v6dvt2wGiven = TRUE; break; case BSIM4v6_MOD_DROUT: mod->BSIM4v6drout = value->rValue; mod->BSIM4v6droutGiven = TRUE; break; case BSIM4v6_MOD_DSUB: mod->BSIM4v6dsub = value->rValue; mod->BSIM4v6dsubGiven = TRUE; break; case BSIM4v6_MOD_VTH0: mod->BSIM4v6vth0 = value->rValue; mod->BSIM4v6vth0Given = TRUE; break; case BSIM4v6_MOD_EU: mod->BSIM4v6eu = value->rValue; mod->BSIM4v6euGiven = TRUE; break; case BSIM4v6_MOD_UCS: mod->BSIM4v6ucs = value->rValue; mod->BSIM4v6ucsGiven = TRUE; break; case BSIM4v6_MOD_UA: mod->BSIM4v6ua = value->rValue; mod->BSIM4v6uaGiven = TRUE; break; case BSIM4v6_MOD_UA1: mod->BSIM4v6ua1 = value->rValue; mod->BSIM4v6ua1Given = TRUE; break; case BSIM4v6_MOD_UB: mod->BSIM4v6ub = value->rValue; mod->BSIM4v6ubGiven = TRUE; break; case BSIM4v6_MOD_UB1: mod->BSIM4v6ub1 = value->rValue; mod->BSIM4v6ub1Given = TRUE; break; case BSIM4v6_MOD_UC: mod->BSIM4v6uc = value->rValue; mod->BSIM4v6ucGiven = TRUE; break; case BSIM4v6_MOD_UC1: mod->BSIM4v6uc1 = value->rValue; mod->BSIM4v6uc1Given = TRUE; break; case BSIM4v6_MOD_U0 : mod->BSIM4v6u0 = value->rValue; mod->BSIM4v6u0Given = TRUE; break; case BSIM4v6_MOD_UTE : mod->BSIM4v6ute = value->rValue; mod->BSIM4v6uteGiven = TRUE; break; case BSIM4v6_MOD_UCSTE : mod->BSIM4v6ucste = value->rValue; mod->BSIM4v6ucsteGiven = TRUE; break; case BSIM4v6_MOD_UD: mod->BSIM4v6ud = value->rValue; mod->BSIM4v6udGiven = TRUE; break; case BSIM4v6_MOD_UD1: mod->BSIM4v6ud1 = value->rValue; mod->BSIM4v6ud1Given = TRUE; break; case BSIM4v6_MOD_UP: mod->BSIM4v6up = value->rValue; mod->BSIM4v6upGiven = TRUE; break; case BSIM4v6_MOD_LP: mod->BSIM4v6lp = value->rValue; mod->BSIM4v6lpGiven = TRUE; break; case BSIM4v6_MOD_LUD: mod->BSIM4v6lud = value->rValue; mod->BSIM4v6ludGiven = TRUE; break; case BSIM4v6_MOD_LUD1: mod->BSIM4v6lud1 = value->rValue; mod->BSIM4v6lud1Given = TRUE; break; case BSIM4v6_MOD_LUP: mod->BSIM4v6lup = value->rValue; mod->BSIM4v6lupGiven = TRUE; break; case BSIM4v6_MOD_LLP: mod->BSIM4v6llp = value->rValue; mod->BSIM4v6llpGiven = TRUE; break; case BSIM4v6_MOD_WUD: mod->BSIM4v6wud = value->rValue; mod->BSIM4v6wudGiven = TRUE; break; case BSIM4v6_MOD_WUD1: mod->BSIM4v6wud1 = value->rValue; mod->BSIM4v6wud1Given = TRUE; break; case BSIM4v6_MOD_WUP: mod->BSIM4v6wup = value->rValue; mod->BSIM4v6wupGiven = TRUE; break; case BSIM4v6_MOD_WLP: mod->BSIM4v6wlp = value->rValue; mod->BSIM4v6wlpGiven = TRUE; break; case BSIM4v6_MOD_PUD: mod->BSIM4v6pud = value->rValue; mod->BSIM4v6pudGiven = TRUE; break; case BSIM4v6_MOD_PUD1: mod->BSIM4v6pud1 = value->rValue; mod->BSIM4v6pud1Given = TRUE; break; case BSIM4v6_MOD_PUP: mod->BSIM4v6pup = value->rValue; mod->BSIM4v6pupGiven = TRUE; break; case BSIM4v6_MOD_PLP: mod->BSIM4v6plp = value->rValue; mod->BSIM4v6plpGiven = TRUE; break; case BSIM4v6_MOD_VOFF: mod->BSIM4v6voff = value->rValue; mod->BSIM4v6voffGiven = TRUE; break; case BSIM4v6_MOD_TVOFF: mod->BSIM4v6tvoff = value->rValue; mod->BSIM4v6tvoffGiven = TRUE; break; case BSIM4v6_MOD_VOFFL: mod->BSIM4v6voffl = value->rValue; mod->BSIM4v6vofflGiven = TRUE; break; case BSIM4v6_MOD_VOFFCVL: mod->BSIM4v6voffcvl = value->rValue; mod->BSIM4v6voffcvlGiven = TRUE; break; case BSIM4v6_MOD_MINV: mod->BSIM4v6minv = value->rValue; mod->BSIM4v6minvGiven = TRUE; break; case BSIM4v6_MOD_MINVCV: mod->BSIM4v6minvcv = value->rValue; mod->BSIM4v6minvcvGiven = TRUE; break; case BSIM4v6_MOD_FPROUT: mod->BSIM4v6fprout = value->rValue; mod->BSIM4v6fproutGiven = TRUE; break; case BSIM4v6_MOD_PDITS: mod->BSIM4v6pdits = value->rValue; mod->BSIM4v6pditsGiven = TRUE; break; case BSIM4v6_MOD_PDITSD: mod->BSIM4v6pditsd = value->rValue; mod->BSIM4v6pditsdGiven = TRUE; break; case BSIM4v6_MOD_PDITSL: mod->BSIM4v6pditsl = value->rValue; mod->BSIM4v6pditslGiven = TRUE; break; case BSIM4v6_MOD_DELTA : mod->BSIM4v6delta = value->rValue; mod->BSIM4v6deltaGiven = TRUE; break; case BSIM4v6_MOD_RDSW: mod->BSIM4v6rdsw = value->rValue; mod->BSIM4v6rdswGiven = TRUE; break; case BSIM4v6_MOD_RDSWMIN: mod->BSIM4v6rdswmin = value->rValue; mod->BSIM4v6rdswminGiven = TRUE; break; case BSIM4v6_MOD_RDWMIN: mod->BSIM4v6rdwmin = value->rValue; mod->BSIM4v6rdwminGiven = TRUE; break; case BSIM4v6_MOD_RSWMIN: mod->BSIM4v6rswmin = value->rValue; mod->BSIM4v6rswminGiven = TRUE; break; case BSIM4v6_MOD_RDW: mod->BSIM4v6rdw = value->rValue; mod->BSIM4v6rdwGiven = TRUE; break; case BSIM4v6_MOD_RSW: mod->BSIM4v6rsw = value->rValue; mod->BSIM4v6rswGiven = TRUE; break; case BSIM4v6_MOD_PRWG: mod->BSIM4v6prwg = value->rValue; mod->BSIM4v6prwgGiven = TRUE; break; case BSIM4v6_MOD_PRWB: mod->BSIM4v6prwb = value->rValue; mod->BSIM4v6prwbGiven = TRUE; break; case BSIM4v6_MOD_PRT: mod->BSIM4v6prt = value->rValue; mod->BSIM4v6prtGiven = TRUE; break; case BSIM4v6_MOD_ETA0: mod->BSIM4v6eta0 = value->rValue; mod->BSIM4v6eta0Given = TRUE; break; case BSIM4v6_MOD_ETAB: mod->BSIM4v6etab = value->rValue; mod->BSIM4v6etabGiven = TRUE; break; case BSIM4v6_MOD_PCLM: mod->BSIM4v6pclm = value->rValue; mod->BSIM4v6pclmGiven = TRUE; break; case BSIM4v6_MOD_PDIBL1: mod->BSIM4v6pdibl1 = value->rValue; mod->BSIM4v6pdibl1Given = TRUE; break; case BSIM4v6_MOD_PDIBL2: mod->BSIM4v6pdibl2 = value->rValue; mod->BSIM4v6pdibl2Given = TRUE; break; case BSIM4v6_MOD_PDIBLB: mod->BSIM4v6pdiblb = value->rValue; mod->BSIM4v6pdiblbGiven = TRUE; break; case BSIM4v6_MOD_PSCBE1: mod->BSIM4v6pscbe1 = value->rValue; mod->BSIM4v6pscbe1Given = TRUE; break; case BSIM4v6_MOD_PSCBE2: mod->BSIM4v6pscbe2 = value->rValue; mod->BSIM4v6pscbe2Given = TRUE; break; case BSIM4v6_MOD_PVAG: mod->BSIM4v6pvag = value->rValue; mod->BSIM4v6pvagGiven = TRUE; break; case BSIM4v6_MOD_WR : mod->BSIM4v6wr = value->rValue; mod->BSIM4v6wrGiven = TRUE; break; case BSIM4v6_MOD_DWG : mod->BSIM4v6dwg = value->rValue; mod->BSIM4v6dwgGiven = TRUE; break; case BSIM4v6_MOD_DWB : mod->BSIM4v6dwb = value->rValue; mod->BSIM4v6dwbGiven = TRUE; break; case BSIM4v6_MOD_B0 : mod->BSIM4v6b0 = value->rValue; mod->BSIM4v6b0Given = TRUE; break; case BSIM4v6_MOD_B1 : mod->BSIM4v6b1 = value->rValue; mod->BSIM4v6b1Given = TRUE; break; case BSIM4v6_MOD_ALPHA0 : mod->BSIM4v6alpha0 = value->rValue; mod->BSIM4v6alpha0Given = TRUE; break; case BSIM4v6_MOD_ALPHA1 : mod->BSIM4v6alpha1 = value->rValue; mod->BSIM4v6alpha1Given = TRUE; break; case BSIM4v6_MOD_PHIN : mod->BSIM4v6phin = value->rValue; mod->BSIM4v6phinGiven = TRUE; break; case BSIM4v6_MOD_AGIDL : mod->BSIM4v6agidl = value->rValue; mod->BSIM4v6agidlGiven = TRUE; break; case BSIM4v6_MOD_BGIDL : mod->BSIM4v6bgidl = value->rValue; mod->BSIM4v6bgidlGiven = TRUE; break; case BSIM4v6_MOD_CGIDL : mod->BSIM4v6cgidl = value->rValue; mod->BSIM4v6cgidlGiven = TRUE; break; case BSIM4v6_MOD_EGIDL : mod->BSIM4v6egidl = value->rValue; mod->BSIM4v6egidlGiven = TRUE; break; case BSIM4v6_MOD_AGISL : mod->BSIM4v6agisl = value->rValue; mod->BSIM4v6agislGiven = TRUE; break; case BSIM4v6_MOD_BGISL : mod->BSIM4v6bgisl = value->rValue; mod->BSIM4v6bgislGiven = TRUE; break; case BSIM4v6_MOD_CGISL : mod->BSIM4v6cgisl = value->rValue; mod->BSIM4v6cgislGiven = TRUE; break; case BSIM4v6_MOD_EGISL : mod->BSIM4v6egisl = value->rValue; mod->BSIM4v6egislGiven = TRUE; break; case BSIM4v6_MOD_AIGC : mod->BSIM4v6aigc = value->rValue; mod->BSIM4v6aigcGiven = TRUE; break; case BSIM4v6_MOD_BIGC : mod->BSIM4v6bigc = value->rValue; mod->BSIM4v6bigcGiven = TRUE; break; case BSIM4v6_MOD_CIGC : mod->BSIM4v6cigc = value->rValue; mod->BSIM4v6cigcGiven = TRUE; break; case BSIM4v6_MOD_AIGSD : mod->BSIM4v6aigsd = value->rValue; mod->BSIM4v6aigsdGiven = TRUE; break; case BSIM4v6_MOD_BIGSD : mod->BSIM4v6bigsd = value->rValue; mod->BSIM4v6bigsdGiven = TRUE; break; case BSIM4v6_MOD_CIGSD : mod->BSIM4v6cigsd = value->rValue; mod->BSIM4v6cigsdGiven = TRUE; break; case BSIM4v6_MOD_AIGS : mod->BSIM4v6aigs = value->rValue; mod->BSIM4v6aigsGiven = TRUE; break; case BSIM4v6_MOD_BIGS : mod->BSIM4v6bigs = value->rValue; mod->BSIM4v6bigsGiven = TRUE; break; case BSIM4v6_MOD_CIGS : mod->BSIM4v6cigs = value->rValue; mod->BSIM4v6cigsGiven = TRUE; break; case BSIM4v6_MOD_AIGD : mod->BSIM4v6aigd = value->rValue; mod->BSIM4v6aigdGiven = TRUE; break; case BSIM4v6_MOD_BIGD : mod->BSIM4v6bigd = value->rValue; mod->BSIM4v6bigdGiven = TRUE; break; case BSIM4v6_MOD_CIGD : mod->BSIM4v6cigd = value->rValue; mod->BSIM4v6cigdGiven = TRUE; break; case BSIM4v6_MOD_AIGBACC : mod->BSIM4v6aigbacc = value->rValue; mod->BSIM4v6aigbaccGiven = TRUE; break; case BSIM4v6_MOD_BIGBACC : mod->BSIM4v6bigbacc = value->rValue; mod->BSIM4v6bigbaccGiven = TRUE; break; case BSIM4v6_MOD_CIGBACC : mod->BSIM4v6cigbacc = value->rValue; mod->BSIM4v6cigbaccGiven = TRUE; break; case BSIM4v6_MOD_AIGBINV : mod->BSIM4v6aigbinv = value->rValue; mod->BSIM4v6aigbinvGiven = TRUE; break; case BSIM4v6_MOD_BIGBINV : mod->BSIM4v6bigbinv = value->rValue; mod->BSIM4v6bigbinvGiven = TRUE; break; case BSIM4v6_MOD_CIGBINV : mod->BSIM4v6cigbinv = value->rValue; mod->BSIM4v6cigbinvGiven = TRUE; break; case BSIM4v6_MOD_NIGC : mod->BSIM4v6nigc = value->rValue; mod->BSIM4v6nigcGiven = TRUE; break; case BSIM4v6_MOD_NIGBINV : mod->BSIM4v6nigbinv = value->rValue; mod->BSIM4v6nigbinvGiven = TRUE; break; case BSIM4v6_MOD_NIGBACC : mod->BSIM4v6nigbacc = value->rValue; mod->BSIM4v6nigbaccGiven = TRUE; break; case BSIM4v6_MOD_NTOX : mod->BSIM4v6ntox = value->rValue; mod->BSIM4v6ntoxGiven = TRUE; break; case BSIM4v6_MOD_EIGBINV : mod->BSIM4v6eigbinv = value->rValue; mod->BSIM4v6eigbinvGiven = TRUE; break; case BSIM4v6_MOD_PIGCD : mod->BSIM4v6pigcd = value->rValue; mod->BSIM4v6pigcdGiven = TRUE; break; case BSIM4v6_MOD_POXEDGE : mod->BSIM4v6poxedge = value->rValue; mod->BSIM4v6poxedgeGiven = TRUE; break; case BSIM4v6_MOD_XRCRG1 : mod->BSIM4v6xrcrg1 = value->rValue; mod->BSIM4v6xrcrg1Given = TRUE; break; case BSIM4v6_MOD_XRCRG2 : mod->BSIM4v6xrcrg2 = value->rValue; mod->BSIM4v6xrcrg2Given = TRUE; break; case BSIM4v6_MOD_LAMBDA : mod->BSIM4v6lambda = value->rValue; mod->BSIM4v6lambdaGiven = TRUE; break; case BSIM4v6_MOD_VTL : mod->BSIM4v6vtl = value->rValue; mod->BSIM4v6vtlGiven = TRUE; break; case BSIM4v6_MOD_XN: mod->BSIM4v6xn = value->rValue; mod->BSIM4v6xnGiven = TRUE; break; case BSIM4v6_MOD_LC: mod->BSIM4v6lc = value->rValue; mod->BSIM4v6lcGiven = TRUE; break; case BSIM4v6_MOD_TNOIA : mod->BSIM4v6tnoia = value->rValue; mod->BSIM4v6tnoiaGiven = TRUE; break; case BSIM4v6_MOD_TNOIB : mod->BSIM4v6tnoib = value->rValue; mod->BSIM4v6tnoibGiven = TRUE; break; case BSIM4v6_MOD_RNOIA : mod->BSIM4v6rnoia = value->rValue; mod->BSIM4v6rnoiaGiven = TRUE; break; case BSIM4v6_MOD_RNOIB : mod->BSIM4v6rnoib = value->rValue; mod->BSIM4v6rnoibGiven = TRUE; break; case BSIM4v6_MOD_NTNOI : mod->BSIM4v6ntnoi = value->rValue; mod->BSIM4v6ntnoiGiven = TRUE; break; case BSIM4v6_MOD_VFBSDOFF: mod->BSIM4v6vfbsdoff = value->rValue; mod->BSIM4v6vfbsdoffGiven = TRUE; break; case BSIM4v6_MOD_TVFBSDOFF: mod->BSIM4v6tvfbsdoff = value->rValue; mod->BSIM4v6tvfbsdoffGiven = TRUE; break; case BSIM4v6_MOD_LINTNOI: mod->BSIM4v6lintnoi = value->rValue; mod->BSIM4v6lintnoiGiven = TRUE; break; /* stress effect */ case BSIM4v6_MOD_SAREF : mod->BSIM4v6saref = value->rValue; mod->BSIM4v6sarefGiven = TRUE; break; case BSIM4v6_MOD_SBREF : mod->BSIM4v6sbref = value->rValue; mod->BSIM4v6sbrefGiven = TRUE; break; case BSIM4v6_MOD_WLOD : mod->BSIM4v6wlod = value->rValue; mod->BSIM4v6wlodGiven = TRUE; break; case BSIM4v6_MOD_KU0 : mod->BSIM4v6ku0 = value->rValue; mod->BSIM4v6ku0Given = TRUE; break; case BSIM4v6_MOD_KVSAT : mod->BSIM4v6kvsat = value->rValue; mod->BSIM4v6kvsatGiven = TRUE; break; case BSIM4v6_MOD_KVTH0 : mod->BSIM4v6kvth0 = value->rValue; mod->BSIM4v6kvth0Given = TRUE; break; case BSIM4v6_MOD_TKU0 : mod->BSIM4v6tku0 = value->rValue; mod->BSIM4v6tku0Given = TRUE; break; case BSIM4v6_MOD_LLODKU0 : mod->BSIM4v6llodku0 = value->rValue; mod->BSIM4v6llodku0Given = TRUE; break; case BSIM4v6_MOD_WLODKU0 : mod->BSIM4v6wlodku0 = value->rValue; mod->BSIM4v6wlodku0Given = TRUE; break; case BSIM4v6_MOD_LLODVTH : mod->BSIM4v6llodvth = value->rValue; mod->BSIM4v6llodvthGiven = TRUE; break; case BSIM4v6_MOD_WLODVTH : mod->BSIM4v6wlodvth = value->rValue; mod->BSIM4v6wlodvthGiven = TRUE; break; case BSIM4v6_MOD_LKU0 : mod->BSIM4v6lku0 = value->rValue; mod->BSIM4v6lku0Given = TRUE; break; case BSIM4v6_MOD_WKU0 : mod->BSIM4v6wku0 = value->rValue; mod->BSIM4v6wku0Given = TRUE; break; case BSIM4v6_MOD_PKU0 : mod->BSIM4v6pku0 = value->rValue; mod->BSIM4v6pku0Given = TRUE; break; case BSIM4v6_MOD_LKVTH0 : mod->BSIM4v6lkvth0 = value->rValue; mod->BSIM4v6lkvth0Given = TRUE; break; case BSIM4v6_MOD_WKVTH0 : mod->BSIM4v6wkvth0 = value->rValue; mod->BSIM4v6wkvth0Given = TRUE; break; case BSIM4v6_MOD_PKVTH0 : mod->BSIM4v6pkvth0 = value->rValue; mod->BSIM4v6pkvth0Given = TRUE; break; case BSIM4v6_MOD_STK2 : mod->BSIM4v6stk2 = value->rValue; mod->BSIM4v6stk2Given = TRUE; break; case BSIM4v6_MOD_LODK2 : mod->BSIM4v6lodk2 = value->rValue; mod->BSIM4v6lodk2Given = TRUE; break; case BSIM4v6_MOD_STETA0 : mod->BSIM4v6steta0 = value->rValue; mod->BSIM4v6steta0Given = TRUE; break; case BSIM4v6_MOD_LODETA0 : mod->BSIM4v6lodeta0 = value->rValue; mod->BSIM4v6lodeta0Given = TRUE; break; case BSIM4v6_MOD_WEB : mod->BSIM4v6web = value->rValue; mod->BSIM4v6webGiven = TRUE; break; case BSIM4v6_MOD_WEC : mod->BSIM4v6wec = value->rValue; mod->BSIM4v6wecGiven = TRUE; break; case BSIM4v6_MOD_KVTH0WE : mod->BSIM4v6kvth0we = value->rValue; mod->BSIM4v6kvth0weGiven = TRUE; break; case BSIM4v6_MOD_K2WE : mod->BSIM4v6k2we = value->rValue; mod->BSIM4v6k2weGiven = TRUE; break; case BSIM4v6_MOD_KU0WE : mod->BSIM4v6ku0we = value->rValue; mod->BSIM4v6ku0weGiven = TRUE; break; case BSIM4v6_MOD_SCREF : mod->BSIM4v6scref = value->rValue; mod->BSIM4v6screfGiven = TRUE; break; case BSIM4v6_MOD_WPEMOD : mod->BSIM4v6wpemod = value->rValue; mod->BSIM4v6wpemodGiven = TRUE; break; case BSIM4v6_MOD_LKVTH0WE : mod->BSIM4v6lkvth0we = value->rValue; mod->BSIM4v6lkvth0weGiven = TRUE; break; case BSIM4v6_MOD_LK2WE : mod->BSIM4v6lk2we = value->rValue; mod->BSIM4v6lk2weGiven = TRUE; break; case BSIM4v6_MOD_LKU0WE : mod->BSIM4v6lku0we = value->rValue; mod->BSIM4v6lku0weGiven = TRUE; break; case BSIM4v6_MOD_WKVTH0WE : mod->BSIM4v6wkvth0we = value->rValue; mod->BSIM4v6wkvth0weGiven = TRUE; break; case BSIM4v6_MOD_WK2WE : mod->BSIM4v6wk2we = value->rValue; mod->BSIM4v6wk2weGiven = TRUE; break; case BSIM4v6_MOD_WKU0WE : mod->BSIM4v6wku0we = value->rValue; mod->BSIM4v6wku0weGiven = TRUE; break; case BSIM4v6_MOD_PKVTH0WE : mod->BSIM4v6pkvth0we = value->rValue; mod->BSIM4v6pkvth0weGiven = TRUE; break; case BSIM4v6_MOD_PK2WE : mod->BSIM4v6pk2we = value->rValue; mod->BSIM4v6pk2weGiven = TRUE; break; case BSIM4v6_MOD_PKU0WE : mod->BSIM4v6pku0we = value->rValue; mod->BSIM4v6pku0weGiven = TRUE; break; case BSIM4v6_MOD_BETA0 : mod->BSIM4v6beta0 = value->rValue; mod->BSIM4v6beta0Given = TRUE; break; case BSIM4v6_MOD_IJTHDFWD : mod->BSIM4v6ijthdfwd = value->rValue; mod->BSIM4v6ijthdfwdGiven = TRUE; break; case BSIM4v6_MOD_IJTHSFWD : mod->BSIM4v6ijthsfwd = value->rValue; mod->BSIM4v6ijthsfwdGiven = TRUE; break; case BSIM4v6_MOD_IJTHDREV : mod->BSIM4v6ijthdrev = value->rValue; mod->BSIM4v6ijthdrevGiven = TRUE; break; case BSIM4v6_MOD_IJTHSREV : mod->BSIM4v6ijthsrev = value->rValue; mod->BSIM4v6ijthsrevGiven = TRUE; break; case BSIM4v6_MOD_XJBVD : mod->BSIM4v6xjbvd = value->rValue; mod->BSIM4v6xjbvdGiven = TRUE; break; case BSIM4v6_MOD_XJBVS : mod->BSIM4v6xjbvs = value->rValue; mod->BSIM4v6xjbvsGiven = TRUE; break; case BSIM4v6_MOD_BVD : mod->BSIM4v6bvd = value->rValue; mod->BSIM4v6bvdGiven = TRUE; break; case BSIM4v6_MOD_BVS : mod->BSIM4v6bvs = value->rValue; mod->BSIM4v6bvsGiven = TRUE; break; /* reverse diode */ case BSIM4v6_MOD_JTSS : mod->BSIM4v6jtss = value->rValue; mod->BSIM4v6jtssGiven = TRUE; break; case BSIM4v6_MOD_JTSD : mod->BSIM4v6jtsd = value->rValue; mod->BSIM4v6jtsdGiven = TRUE; break; case BSIM4v6_MOD_JTSSWS : mod->BSIM4v6jtssws = value->rValue; mod->BSIM4v6jtsswsGiven = TRUE; break; case BSIM4v6_MOD_JTSSWD : mod->BSIM4v6jtsswd = value->rValue; mod->BSIM4v6jtsswdGiven = TRUE; break; case BSIM4v6_MOD_JTSSWGS : mod->BSIM4v6jtsswgs = value->rValue; mod->BSIM4v6jtsswgsGiven = TRUE; break; case BSIM4v6_MOD_JTSSWGD : mod->BSIM4v6jtsswgd = value->rValue; mod->BSIM4v6jtsswgdGiven = TRUE; break; case BSIM4v6_MOD_JTWEFF : mod->BSIM4v6jtweff = value->rValue; mod->BSIM4v6jtweffGiven = TRUE; break; case BSIM4v6_MOD_NJTS : mod->BSIM4v6njts = value->rValue; mod->BSIM4v6njtsGiven = TRUE; break; case BSIM4v6_MOD_NJTSSW : mod->BSIM4v6njtssw = value->rValue; mod->BSIM4v6njtsswGiven = TRUE; break; case BSIM4v6_MOD_NJTSSWG : mod->BSIM4v6njtsswg = value->rValue; mod->BSIM4v6njtsswgGiven = TRUE; break; case BSIM4v6_MOD_NJTSD : mod->BSIM4v6njtsd = value->rValue; mod->BSIM4v6njtsdGiven = TRUE; break; case BSIM4v6_MOD_NJTSSWD : mod->BSIM4v6njtsswd = value->rValue; mod->BSIM4v6njtsswdGiven = TRUE; break; case BSIM4v6_MOD_NJTSSWGD : mod->BSIM4v6njtsswgd = value->rValue; mod->BSIM4v6njtsswgdGiven = TRUE; break; case BSIM4v6_MOD_XTSS : mod->BSIM4v6xtss = value->rValue; mod->BSIM4v6xtssGiven = TRUE; break; case BSIM4v6_MOD_XTSD : mod->BSIM4v6xtsd = value->rValue; mod->BSIM4v6xtsdGiven = TRUE; break; case BSIM4v6_MOD_XTSSWS : mod->BSIM4v6xtssws = value->rValue; mod->BSIM4v6xtsswsGiven = TRUE; break; case BSIM4v6_MOD_XTSSWD : mod->BSIM4v6xtsswd = value->rValue; mod->BSIM4v6xtsswdGiven = TRUE; break; case BSIM4v6_MOD_XTSSWGS : mod->BSIM4v6xtsswgs = value->rValue; mod->BSIM4v6xtsswgsGiven = TRUE; break; case BSIM4v6_MOD_XTSSWGD : mod->BSIM4v6xtsswgd = value->rValue; mod->BSIM4v6xtsswgdGiven = TRUE; break; case BSIM4v6_MOD_TNJTS : mod->BSIM4v6tnjts = value->rValue; mod->BSIM4v6tnjtsGiven = TRUE; break; case BSIM4v6_MOD_TNJTSSW : mod->BSIM4v6tnjtssw = value->rValue; mod->BSIM4v6tnjtsswGiven = TRUE; break; case BSIM4v6_MOD_TNJTSSWG : mod->BSIM4v6tnjtsswg = value->rValue; mod->BSIM4v6tnjtsswgGiven = TRUE; break; case BSIM4v6_MOD_TNJTSD : mod->BSIM4v6tnjtsd = value->rValue; mod->BSIM4v6tnjtsdGiven = TRUE; break; case BSIM4v6_MOD_TNJTSSWD : mod->BSIM4v6tnjtsswd = value->rValue; mod->BSIM4v6tnjtsswdGiven = TRUE; break; case BSIM4v6_MOD_TNJTSSWGD : mod->BSIM4v6tnjtsswgd = value->rValue; mod->BSIM4v6tnjtsswgdGiven = TRUE; break; case BSIM4v6_MOD_VTSS : mod->BSIM4v6vtss = value->rValue; mod->BSIM4v6vtssGiven = TRUE; break; case BSIM4v6_MOD_VTSD : mod->BSIM4v6vtsd = value->rValue; mod->BSIM4v6vtsdGiven = TRUE; break; case BSIM4v6_MOD_VTSSWS : mod->BSIM4v6vtssws = value->rValue; mod->BSIM4v6vtsswsGiven = TRUE; break; case BSIM4v6_MOD_VTSSWD : mod->BSIM4v6vtsswd = value->rValue; mod->BSIM4v6vtsswdGiven = TRUE; break; case BSIM4v6_MOD_VTSSWGS : mod->BSIM4v6vtsswgs = value->rValue; mod->BSIM4v6vtsswgsGiven = TRUE; break; case BSIM4v6_MOD_VTSSWGD : mod->BSIM4v6vtsswgd = value->rValue; mod->BSIM4v6vtsswgdGiven = TRUE; break; case BSIM4v6_MOD_VFB : mod->BSIM4v6vfb = value->rValue; mod->BSIM4v6vfbGiven = TRUE; break; case BSIM4v6_MOD_GBMIN : mod->BSIM4v6gbmin = value->rValue; mod->BSIM4v6gbminGiven = TRUE; break; case BSIM4v6_MOD_RBDB : mod->BSIM4v6rbdb = value->rValue; mod->BSIM4v6rbdbGiven = TRUE; break; case BSIM4v6_MOD_RBPB : mod->BSIM4v6rbpb = value->rValue; mod->BSIM4v6rbpbGiven = TRUE; break; case BSIM4v6_MOD_RBSB : mod->BSIM4v6rbsb = value->rValue; mod->BSIM4v6rbsbGiven = TRUE; break; case BSIM4v6_MOD_RBPS : mod->BSIM4v6rbps = value->rValue; mod->BSIM4v6rbpsGiven = TRUE; break; case BSIM4v6_MOD_RBPD : mod->BSIM4v6rbpd = value->rValue; mod->BSIM4v6rbpdGiven = TRUE; break; case BSIM4v6_MOD_RBPS0 : mod->BSIM4v6rbps0 = value->rValue; mod->BSIM4v6rbps0Given = TRUE; break; case BSIM4v6_MOD_RBPSL : mod->BSIM4v6rbpsl = value->rValue; mod->BSIM4v6rbpslGiven = TRUE; break; case BSIM4v6_MOD_RBPSW : mod->BSIM4v6rbpsw = value->rValue; mod->BSIM4v6rbpswGiven = TRUE; break; case BSIM4v6_MOD_RBPSNF : mod->BSIM4v6rbpsnf = value->rValue; mod->BSIM4v6rbpsnfGiven = TRUE; break; case BSIM4v6_MOD_RBPD0 : mod->BSIM4v6rbpd0 = value->rValue; mod->BSIM4v6rbpd0Given = TRUE; break; case BSIM4v6_MOD_RBPDL : mod->BSIM4v6rbpdl = value->rValue; mod->BSIM4v6rbpdlGiven = TRUE; break; case BSIM4v6_MOD_RBPDW : mod->BSIM4v6rbpdw = value->rValue; mod->BSIM4v6rbpdwGiven = TRUE; break; case BSIM4v6_MOD_RBPDNF : mod->BSIM4v6rbpdnf = value->rValue; mod->BSIM4v6rbpdnfGiven = TRUE; break; case BSIM4v6_MOD_RBPBX0 : mod->BSIM4v6rbpbx0 = value->rValue; mod->BSIM4v6rbpbx0Given = TRUE; break; case BSIM4v6_MOD_RBPBXL : mod->BSIM4v6rbpbxl = value->rValue; mod->BSIM4v6rbpbxlGiven = TRUE; break; case BSIM4v6_MOD_RBPBXW : mod->BSIM4v6rbpbxw = value->rValue; mod->BSIM4v6rbpbxwGiven = TRUE; break; case BSIM4v6_MOD_RBPBXNF : mod->BSIM4v6rbpbxnf = value->rValue; mod->BSIM4v6rbpbxnfGiven = TRUE; break; case BSIM4v6_MOD_RBPBY0 : mod->BSIM4v6rbpby0 = value->rValue; mod->BSIM4v6rbpby0Given = TRUE; break; case BSIM4v6_MOD_RBPBYL : mod->BSIM4v6rbpbyl = value->rValue; mod->BSIM4v6rbpbylGiven = TRUE; break; case BSIM4v6_MOD_RBPBYW : mod->BSIM4v6rbpbyw = value->rValue; mod->BSIM4v6rbpbywGiven = TRUE; break; case BSIM4v6_MOD_RBPBYNF : mod->BSIM4v6rbpbynf = value->rValue; mod->BSIM4v6rbpbynfGiven = TRUE; break; case BSIM4v6_MOD_RBSBX0 : mod->BSIM4v6rbsbx0 = value->rValue; mod->BSIM4v6rbsbx0Given = TRUE; break; case BSIM4v6_MOD_RBSBY0 : mod->BSIM4v6rbsby0 = value->rValue; mod->BSIM4v6rbsby0Given = TRUE; break; case BSIM4v6_MOD_RBDBX0 : mod->BSIM4v6rbdbx0 = value->rValue; mod->BSIM4v6rbdbx0Given = TRUE; break; case BSIM4v6_MOD_RBDBY0 : mod->BSIM4v6rbdby0 = value->rValue; mod->BSIM4v6rbdby0Given = TRUE; break; case BSIM4v6_MOD_RBSDBXL : mod->BSIM4v6rbsdbxl = value->rValue; mod->BSIM4v6rbsdbxlGiven = TRUE; break; case BSIM4v6_MOD_RBSDBXW : mod->BSIM4v6rbsdbxw = value->rValue; mod->BSIM4v6rbsdbxwGiven = TRUE; break; case BSIM4v6_MOD_RBSDBXNF : mod->BSIM4v6rbsdbxnf = value->rValue; mod->BSIM4v6rbsdbxnfGiven = TRUE; break; case BSIM4v6_MOD_RBSDBYL : mod->BSIM4v6rbsdbyl = value->rValue; mod->BSIM4v6rbsdbylGiven = TRUE; break; case BSIM4v6_MOD_RBSDBYW : mod->BSIM4v6rbsdbyw = value->rValue; mod->BSIM4v6rbsdbywGiven = TRUE; break; case BSIM4v6_MOD_RBSDBYNF : mod->BSIM4v6rbsdbynf = value->rValue; mod->BSIM4v6rbsdbynfGiven = TRUE; break; case BSIM4v6_MOD_CGSL : mod->BSIM4v6cgsl = value->rValue; mod->BSIM4v6cgslGiven = TRUE; break; case BSIM4v6_MOD_CGDL : mod->BSIM4v6cgdl = value->rValue; mod->BSIM4v6cgdlGiven = TRUE; break; case BSIM4v6_MOD_CKAPPAS : mod->BSIM4v6ckappas = value->rValue; mod->BSIM4v6ckappasGiven = TRUE; break; case BSIM4v6_MOD_CKAPPAD : mod->BSIM4v6ckappad = value->rValue; mod->BSIM4v6ckappadGiven = TRUE; break; case BSIM4v6_MOD_CF : mod->BSIM4v6cf = value->rValue; mod->BSIM4v6cfGiven = TRUE; break; case BSIM4v6_MOD_CLC : mod->BSIM4v6clc = value->rValue; mod->BSIM4v6clcGiven = TRUE; break; case BSIM4v6_MOD_CLE : mod->BSIM4v6cle = value->rValue; mod->BSIM4v6cleGiven = TRUE; break; case BSIM4v6_MOD_DWC : mod->BSIM4v6dwc = value->rValue; mod->BSIM4v6dwcGiven = TRUE; break; case BSIM4v6_MOD_DLC : mod->BSIM4v6dlc = value->rValue; mod->BSIM4v6dlcGiven = TRUE; break; case BSIM4v6_MOD_XW : mod->BSIM4v6xw = value->rValue; mod->BSIM4v6xwGiven = TRUE; break; case BSIM4v6_MOD_XL : mod->BSIM4v6xl = value->rValue; mod->BSIM4v6xlGiven = TRUE; break; case BSIM4v6_MOD_DLCIG : mod->BSIM4v6dlcig = value->rValue; mod->BSIM4v6dlcigGiven = TRUE; break; case BSIM4v6_MOD_DLCIGD : mod->BSIM4v6dlcigd = value->rValue; mod->BSIM4v6dlcigdGiven = TRUE; break; case BSIM4v6_MOD_DWJ : mod->BSIM4v6dwj = value->rValue; mod->BSIM4v6dwjGiven = TRUE; break; case BSIM4v6_MOD_VFBCV : mod->BSIM4v6vfbcv = value->rValue; mod->BSIM4v6vfbcvGiven = TRUE; break; case BSIM4v6_MOD_ACDE : mod->BSIM4v6acde = value->rValue; mod->BSIM4v6acdeGiven = TRUE; break; case BSIM4v6_MOD_MOIN : mod->BSIM4v6moin = value->rValue; mod->BSIM4v6moinGiven = TRUE; break; case BSIM4v6_MOD_NOFF : mod->BSIM4v6noff = value->rValue; mod->BSIM4v6noffGiven = TRUE; break; case BSIM4v6_MOD_VOFFCV : mod->BSIM4v6voffcv = value->rValue; mod->BSIM4v6voffcvGiven = TRUE; break; case BSIM4v6_MOD_DMCG : mod->BSIM4v6dmcg = value->rValue; mod->BSIM4v6dmcgGiven = TRUE; break; case BSIM4v6_MOD_DMCI : mod->BSIM4v6dmci = value->rValue; mod->BSIM4v6dmciGiven = TRUE; break; case BSIM4v6_MOD_DMDG : mod->BSIM4v6dmdg = value->rValue; mod->BSIM4v6dmdgGiven = TRUE; break; case BSIM4v6_MOD_DMCGT : mod->BSIM4v6dmcgt = value->rValue; mod->BSIM4v6dmcgtGiven = TRUE; break; case BSIM4v6_MOD_XGW : mod->BSIM4v6xgw = value->rValue; mod->BSIM4v6xgwGiven = TRUE; break; case BSIM4v6_MOD_XGL : mod->BSIM4v6xgl = value->rValue; mod->BSIM4v6xglGiven = TRUE; break; case BSIM4v6_MOD_RSHG : mod->BSIM4v6rshg = value->rValue; mod->BSIM4v6rshgGiven = TRUE; break; case BSIM4v6_MOD_NGCON : mod->BSIM4v6ngcon = value->rValue; mod->BSIM4v6ngconGiven = TRUE; break; case BSIM4v6_MOD_TCJ : mod->BSIM4v6tcj = value->rValue; mod->BSIM4v6tcjGiven = TRUE; break; case BSIM4v6_MOD_TPB : mod->BSIM4v6tpb = value->rValue; mod->BSIM4v6tpbGiven = TRUE; break; case BSIM4v6_MOD_TCJSW : mod->BSIM4v6tcjsw = value->rValue; mod->BSIM4v6tcjswGiven = TRUE; break; case BSIM4v6_MOD_TPBSW : mod->BSIM4v6tpbsw = value->rValue; mod->BSIM4v6tpbswGiven = TRUE; break; case BSIM4v6_MOD_TCJSWG : mod->BSIM4v6tcjswg = value->rValue; mod->BSIM4v6tcjswgGiven = TRUE; break; case BSIM4v6_MOD_TPBSWG : mod->BSIM4v6tpbswg = value->rValue; mod->BSIM4v6tpbswgGiven = TRUE; break; /* Length dependence */ case BSIM4v6_MOD_LCDSC : mod->BSIM4v6lcdsc = value->rValue; mod->BSIM4v6lcdscGiven = TRUE; break; case BSIM4v6_MOD_LCDSCB : mod->BSIM4v6lcdscb = value->rValue; mod->BSIM4v6lcdscbGiven = TRUE; break; case BSIM4v6_MOD_LCDSCD : mod->BSIM4v6lcdscd = value->rValue; mod->BSIM4v6lcdscdGiven = TRUE; break; case BSIM4v6_MOD_LCIT : mod->BSIM4v6lcit = value->rValue; mod->BSIM4v6lcitGiven = TRUE; break; case BSIM4v6_MOD_LNFACTOR : mod->BSIM4v6lnfactor = value->rValue; mod->BSIM4v6lnfactorGiven = TRUE; break; case BSIM4v6_MOD_LXJ: mod->BSIM4v6lxj = value->rValue; mod->BSIM4v6lxjGiven = TRUE; break; case BSIM4v6_MOD_LVSAT: mod->BSIM4v6lvsat = value->rValue; mod->BSIM4v6lvsatGiven = TRUE; break; case BSIM4v6_MOD_LA0: mod->BSIM4v6la0 = value->rValue; mod->BSIM4v6la0Given = TRUE; break; case BSIM4v6_MOD_LAGS: mod->BSIM4v6lags = value->rValue; mod->BSIM4v6lagsGiven = TRUE; break; case BSIM4v6_MOD_LA1: mod->BSIM4v6la1 = value->rValue; mod->BSIM4v6la1Given = TRUE; break; case BSIM4v6_MOD_LA2: mod->BSIM4v6la2 = value->rValue; mod->BSIM4v6la2Given = TRUE; break; case BSIM4v6_MOD_LAT: mod->BSIM4v6lat = value->rValue; mod->BSIM4v6latGiven = TRUE; break; case BSIM4v6_MOD_LKETA: mod->BSIM4v6lketa = value->rValue; mod->BSIM4v6lketaGiven = TRUE; break; case BSIM4v6_MOD_LNSUB: mod->BSIM4v6lnsub = value->rValue; mod->BSIM4v6lnsubGiven = TRUE; break; case BSIM4v6_MOD_LNDEP: mod->BSIM4v6lndep = value->rValue; mod->BSIM4v6lndepGiven = TRUE; if (mod->BSIM4v6lndep > 1.0e20) mod->BSIM4v6lndep *= 1.0e-6; break; case BSIM4v6_MOD_LNSD: mod->BSIM4v6lnsd = value->rValue; mod->BSIM4v6lnsdGiven = TRUE; if (mod->BSIM4v6lnsd > 1.0e23) mod->BSIM4v6lnsd *= 1.0e-6; break; case BSIM4v6_MOD_LNGATE: mod->BSIM4v6lngate = value->rValue; mod->BSIM4v6lngateGiven = TRUE; if (mod->BSIM4v6lngate > 1.0e23) mod->BSIM4v6lngate *= 1.0e-6; break; case BSIM4v6_MOD_LGAMMA1: mod->BSIM4v6lgamma1 = value->rValue; mod->BSIM4v6lgamma1Given = TRUE; break; case BSIM4v6_MOD_LGAMMA2: mod->BSIM4v6lgamma2 = value->rValue; mod->BSIM4v6lgamma2Given = TRUE; break; case BSIM4v6_MOD_LVBX: mod->BSIM4v6lvbx = value->rValue; mod->BSIM4v6lvbxGiven = TRUE; break; case BSIM4v6_MOD_LVBM: mod->BSIM4v6lvbm = value->rValue; mod->BSIM4v6lvbmGiven = TRUE; break; case BSIM4v6_MOD_LXT: mod->BSIM4v6lxt = value->rValue; mod->BSIM4v6lxtGiven = TRUE; break; case BSIM4v6_MOD_LK1: mod->BSIM4v6lk1 = value->rValue; mod->BSIM4v6lk1Given = TRUE; break; case BSIM4v6_MOD_LKT1: mod->BSIM4v6lkt1 = value->rValue; mod->BSIM4v6lkt1Given = TRUE; break; case BSIM4v6_MOD_LKT1L: mod->BSIM4v6lkt1l = value->rValue; mod->BSIM4v6lkt1lGiven = TRUE; break; case BSIM4v6_MOD_LKT2: mod->BSIM4v6lkt2 = value->rValue; mod->BSIM4v6lkt2Given = TRUE; break; case BSIM4v6_MOD_LK2: mod->BSIM4v6lk2 = value->rValue; mod->BSIM4v6lk2Given = TRUE; break; case BSIM4v6_MOD_LK3: mod->BSIM4v6lk3 = value->rValue; mod->BSIM4v6lk3Given = TRUE; break; case BSIM4v6_MOD_LK3B: mod->BSIM4v6lk3b = value->rValue; mod->BSIM4v6lk3bGiven = TRUE; break; case BSIM4v6_MOD_LLPE0: mod->BSIM4v6llpe0 = value->rValue; mod->BSIM4v6llpe0Given = TRUE; break; case BSIM4v6_MOD_LLPEB: mod->BSIM4v6llpeb = value->rValue; mod->BSIM4v6llpebGiven = TRUE; break; case BSIM4v6_MOD_LDVTP0: mod->BSIM4v6ldvtp0 = value->rValue; mod->BSIM4v6ldvtp0Given = TRUE; break; case BSIM4v6_MOD_LDVTP1: mod->BSIM4v6ldvtp1 = value->rValue; mod->BSIM4v6ldvtp1Given = TRUE; break; case BSIM4v6_MOD_LW0: mod->BSIM4v6lw0 = value->rValue; mod->BSIM4v6lw0Given = TRUE; break; case BSIM4v6_MOD_LDVT0: mod->BSIM4v6ldvt0 = value->rValue; mod->BSIM4v6ldvt0Given = TRUE; break; case BSIM4v6_MOD_LDVT1: mod->BSIM4v6ldvt1 = value->rValue; mod->BSIM4v6ldvt1Given = TRUE; break; case BSIM4v6_MOD_LDVT2: mod->BSIM4v6ldvt2 = value->rValue; mod->BSIM4v6ldvt2Given = TRUE; break; case BSIM4v6_MOD_LDVT0W: mod->BSIM4v6ldvt0w = value->rValue; mod->BSIM4v6ldvt0wGiven = TRUE; break; case BSIM4v6_MOD_LDVT1W: mod->BSIM4v6ldvt1w = value->rValue; mod->BSIM4v6ldvt1wGiven = TRUE; break; case BSIM4v6_MOD_LDVT2W: mod->BSIM4v6ldvt2w = value->rValue; mod->BSIM4v6ldvt2wGiven = TRUE; break; case BSIM4v6_MOD_LDROUT: mod->BSIM4v6ldrout = value->rValue; mod->BSIM4v6ldroutGiven = TRUE; break; case BSIM4v6_MOD_LDSUB: mod->BSIM4v6ldsub = value->rValue; mod->BSIM4v6ldsubGiven = TRUE; break; case BSIM4v6_MOD_LVTH0: mod->BSIM4v6lvth0 = value->rValue; mod->BSIM4v6lvth0Given = TRUE; break; case BSIM4v6_MOD_LUA: mod->BSIM4v6lua = value->rValue; mod->BSIM4v6luaGiven = TRUE; break; case BSIM4v6_MOD_LUA1: mod->BSIM4v6lua1 = value->rValue; mod->BSIM4v6lua1Given = TRUE; break; case BSIM4v6_MOD_LUB: mod->BSIM4v6lub = value->rValue; mod->BSIM4v6lubGiven = TRUE; break; case BSIM4v6_MOD_LUB1: mod->BSIM4v6lub1 = value->rValue; mod->BSIM4v6lub1Given = TRUE; break; case BSIM4v6_MOD_LUC: mod->BSIM4v6luc = value->rValue; mod->BSIM4v6lucGiven = TRUE; break; case BSIM4v6_MOD_LUC1: mod->BSIM4v6luc1 = value->rValue; mod->BSIM4v6luc1Given = TRUE; break; case BSIM4v6_MOD_LU0 : mod->BSIM4v6lu0 = value->rValue; mod->BSIM4v6lu0Given = TRUE; break; case BSIM4v6_MOD_LUTE : mod->BSIM4v6lute = value->rValue; mod->BSIM4v6luteGiven = TRUE; break; case BSIM4v6_MOD_LUCSTE : mod->BSIM4v6lucste = value->rValue; mod->BSIM4v6lucsteGiven = TRUE; break; case BSIM4v6_MOD_LVOFF: mod->BSIM4v6lvoff = value->rValue; mod->BSIM4v6lvoffGiven = TRUE; break; case BSIM4v6_MOD_LTVOFF: mod->BSIM4v6ltvoff = value->rValue; mod->BSIM4v6ltvoffGiven = TRUE; break; case BSIM4v6_MOD_LMINV: mod->BSIM4v6lminv = value->rValue; mod->BSIM4v6lminvGiven = TRUE; break; case BSIM4v6_MOD_LMINVCV: mod->BSIM4v6lminvcv = value->rValue; mod->BSIM4v6lminvcvGiven = TRUE; break; case BSIM4v6_MOD_LFPROUT: mod->BSIM4v6lfprout = value->rValue; mod->BSIM4v6lfproutGiven = TRUE; break; case BSIM4v6_MOD_LPDITS: mod->BSIM4v6lpdits = value->rValue; mod->BSIM4v6lpditsGiven = TRUE; break; case BSIM4v6_MOD_LPDITSD: mod->BSIM4v6lpditsd = value->rValue; mod->BSIM4v6lpditsdGiven = TRUE; break; case BSIM4v6_MOD_LDELTA : mod->BSIM4v6ldelta = value->rValue; mod->BSIM4v6ldeltaGiven = TRUE; break; case BSIM4v6_MOD_LRDSW: mod->BSIM4v6lrdsw = value->rValue; mod->BSIM4v6lrdswGiven = TRUE; break; case BSIM4v6_MOD_LRDW: mod->BSIM4v6lrdw = value->rValue; mod->BSIM4v6lrdwGiven = TRUE; break; case BSIM4v6_MOD_LRSW: mod->BSIM4v6lrsw = value->rValue; mod->BSIM4v6lrswGiven = TRUE; break; case BSIM4v6_MOD_LPRWB: mod->BSIM4v6lprwb = value->rValue; mod->BSIM4v6lprwbGiven = TRUE; break; case BSIM4v6_MOD_LPRWG: mod->BSIM4v6lprwg = value->rValue; mod->BSIM4v6lprwgGiven = TRUE; break; case BSIM4v6_MOD_LPRT: mod->BSIM4v6lprt = value->rValue; mod->BSIM4v6lprtGiven = TRUE; break; case BSIM4v6_MOD_LETA0: mod->BSIM4v6leta0 = value->rValue; mod->BSIM4v6leta0Given = TRUE; break; case BSIM4v6_MOD_LETAB: mod->BSIM4v6letab = value->rValue; mod->BSIM4v6letabGiven = TRUE; break; case BSIM4v6_MOD_LPCLM: mod->BSIM4v6lpclm = value->rValue; mod->BSIM4v6lpclmGiven = TRUE; break; case BSIM4v6_MOD_LPDIBL1: mod->BSIM4v6lpdibl1 = value->rValue; mod->BSIM4v6lpdibl1Given = TRUE; break; case BSIM4v6_MOD_LPDIBL2: mod->BSIM4v6lpdibl2 = value->rValue; mod->BSIM4v6lpdibl2Given = TRUE; break; case BSIM4v6_MOD_LPDIBLB: mod->BSIM4v6lpdiblb = value->rValue; mod->BSIM4v6lpdiblbGiven = TRUE; break; case BSIM4v6_MOD_LPSCBE1: mod->BSIM4v6lpscbe1 = value->rValue; mod->BSIM4v6lpscbe1Given = TRUE; break; case BSIM4v6_MOD_LPSCBE2: mod->BSIM4v6lpscbe2 = value->rValue; mod->BSIM4v6lpscbe2Given = TRUE; break; case BSIM4v6_MOD_LPVAG: mod->BSIM4v6lpvag = value->rValue; mod->BSIM4v6lpvagGiven = TRUE; break; case BSIM4v6_MOD_LWR : mod->BSIM4v6lwr = value->rValue; mod->BSIM4v6lwrGiven = TRUE; break; case BSIM4v6_MOD_LDWG : mod->BSIM4v6ldwg = value->rValue; mod->BSIM4v6ldwgGiven = TRUE; break; case BSIM4v6_MOD_LDWB : mod->BSIM4v6ldwb = value->rValue; mod->BSIM4v6ldwbGiven = TRUE; break; case BSIM4v6_MOD_LB0 : mod->BSIM4v6lb0 = value->rValue; mod->BSIM4v6lb0Given = TRUE; break; case BSIM4v6_MOD_LB1 : mod->BSIM4v6lb1 = value->rValue; mod->BSIM4v6lb1Given = TRUE; break; case BSIM4v6_MOD_LALPHA0 : mod->BSIM4v6lalpha0 = value->rValue; mod->BSIM4v6lalpha0Given = TRUE; break; case BSIM4v6_MOD_LALPHA1 : mod->BSIM4v6lalpha1 = value->rValue; mod->BSIM4v6lalpha1Given = TRUE; break; case BSIM4v6_MOD_LBETA0 : mod->BSIM4v6lbeta0 = value->rValue; mod->BSIM4v6lbeta0Given = TRUE; break; case BSIM4v6_MOD_LPHIN : mod->BSIM4v6lphin = value->rValue; mod->BSIM4v6lphinGiven = TRUE; break; case BSIM4v6_MOD_LAGIDL : mod->BSIM4v6lagidl = value->rValue; mod->BSIM4v6lagidlGiven = TRUE; break; case BSIM4v6_MOD_LBGIDL : mod->BSIM4v6lbgidl = value->rValue; mod->BSIM4v6lbgidlGiven = TRUE; break; case BSIM4v6_MOD_LCGIDL : mod->BSIM4v6lcgidl = value->rValue; mod->BSIM4v6lcgidlGiven = TRUE; break; case BSIM4v6_MOD_LEGIDL : mod->BSIM4v6legidl = value->rValue; mod->BSIM4v6legidlGiven = TRUE; break; case BSIM4v6_MOD_LAGISL : mod->BSIM4v6lagisl = value->rValue; mod->BSIM4v6lagislGiven = TRUE; break; case BSIM4v6_MOD_LBGISL : mod->BSIM4v6lbgisl = value->rValue; mod->BSIM4v6lbgislGiven = TRUE; break; case BSIM4v6_MOD_LCGISL : mod->BSIM4v6lcgisl = value->rValue; mod->BSIM4v6lcgislGiven = TRUE; break; case BSIM4v6_MOD_LEGISL : mod->BSIM4v6legisl = value->rValue; mod->BSIM4v6legislGiven = TRUE; break; case BSIM4v6_MOD_LAIGC : mod->BSIM4v6laigc = value->rValue; mod->BSIM4v6laigcGiven = TRUE; break; case BSIM4v6_MOD_LBIGC : mod->BSIM4v6lbigc = value->rValue; mod->BSIM4v6lbigcGiven = TRUE; break; case BSIM4v6_MOD_LCIGC : mod->BSIM4v6lcigc = value->rValue; mod->BSIM4v6lcigcGiven = TRUE; break; case BSIM4v6_MOD_LAIGSD : mod->BSIM4v6laigsd = value->rValue; mod->BSIM4v6laigsdGiven = TRUE; break; case BSIM4v6_MOD_LBIGSD : mod->BSIM4v6lbigsd = value->rValue; mod->BSIM4v6lbigsdGiven = TRUE; break; case BSIM4v6_MOD_LCIGSD : mod->BSIM4v6lcigsd = value->rValue; mod->BSIM4v6lcigsdGiven = TRUE; break; case BSIM4v6_MOD_LAIGS : mod->BSIM4v6laigs = value->rValue; mod->BSIM4v6laigsGiven = TRUE; break; case BSIM4v6_MOD_LBIGS : mod->BSIM4v6lbigs = value->rValue; mod->BSIM4v6lbigsGiven = TRUE; break; case BSIM4v6_MOD_LCIGS : mod->BSIM4v6lcigs = value->rValue; mod->BSIM4v6lcigsGiven = TRUE; break; case BSIM4v6_MOD_LAIGD : mod->BSIM4v6laigd = value->rValue; mod->BSIM4v6laigdGiven = TRUE; break; case BSIM4v6_MOD_LBIGD : mod->BSIM4v6lbigd = value->rValue; mod->BSIM4v6lbigdGiven = TRUE; break; case BSIM4v6_MOD_LCIGD : mod->BSIM4v6lcigd = value->rValue; mod->BSIM4v6lcigdGiven = TRUE; break; case BSIM4v6_MOD_LAIGBACC : mod->BSIM4v6laigbacc = value->rValue; mod->BSIM4v6laigbaccGiven = TRUE; break; case BSIM4v6_MOD_LBIGBACC : mod->BSIM4v6lbigbacc = value->rValue; mod->BSIM4v6lbigbaccGiven = TRUE; break; case BSIM4v6_MOD_LCIGBACC : mod->BSIM4v6lcigbacc = value->rValue; mod->BSIM4v6lcigbaccGiven = TRUE; break; case BSIM4v6_MOD_LAIGBINV : mod->BSIM4v6laigbinv = value->rValue; mod->BSIM4v6laigbinvGiven = TRUE; break; case BSIM4v6_MOD_LBIGBINV : mod->BSIM4v6lbigbinv = value->rValue; mod->BSIM4v6lbigbinvGiven = TRUE; break; case BSIM4v6_MOD_LCIGBINV : mod->BSIM4v6lcigbinv = value->rValue; mod->BSIM4v6lcigbinvGiven = TRUE; break; case BSIM4v6_MOD_LNIGC : mod->BSIM4v6lnigc = value->rValue; mod->BSIM4v6lnigcGiven = TRUE; break; case BSIM4v6_MOD_LNIGBINV : mod->BSIM4v6lnigbinv = value->rValue; mod->BSIM4v6lnigbinvGiven = TRUE; break; case BSIM4v6_MOD_LNIGBACC : mod->BSIM4v6lnigbacc = value->rValue; mod->BSIM4v6lnigbaccGiven = TRUE; break; case BSIM4v6_MOD_LNTOX : mod->BSIM4v6lntox = value->rValue; mod->BSIM4v6lntoxGiven = TRUE; break; case BSIM4v6_MOD_LEIGBINV : mod->BSIM4v6leigbinv = value->rValue; mod->BSIM4v6leigbinvGiven = TRUE; break; case BSIM4v6_MOD_LPIGCD : mod->BSIM4v6lpigcd = value->rValue; mod->BSIM4v6lpigcdGiven = TRUE; break; case BSIM4v6_MOD_LPOXEDGE : mod->BSIM4v6lpoxedge = value->rValue; mod->BSIM4v6lpoxedgeGiven = TRUE; break; case BSIM4v6_MOD_LXRCRG1 : mod->BSIM4v6lxrcrg1 = value->rValue; mod->BSIM4v6lxrcrg1Given = TRUE; break; case BSIM4v6_MOD_LXRCRG2 : mod->BSIM4v6lxrcrg2 = value->rValue; mod->BSIM4v6lxrcrg2Given = TRUE; break; case BSIM4v6_MOD_LLAMBDA : mod->BSIM4v6llambda = value->rValue; mod->BSIM4v6llambdaGiven = TRUE; break; case BSIM4v6_MOD_LVTL : mod->BSIM4v6lvtl = value->rValue; mod->BSIM4v6lvtlGiven = TRUE; break; case BSIM4v6_MOD_LXN: mod->BSIM4v6lxn = value->rValue; mod->BSIM4v6lxnGiven = TRUE; break; case BSIM4v6_MOD_LVFBSDOFF: mod->BSIM4v6lvfbsdoff = value->rValue; mod->BSIM4v6lvfbsdoffGiven = TRUE; break; case BSIM4v6_MOD_LTVFBSDOFF: mod->BSIM4v6ltvfbsdoff = value->rValue; mod->BSIM4v6ltvfbsdoffGiven = TRUE; break; case BSIM4v6_MOD_LEU : mod->BSIM4v6leu = value->rValue; mod->BSIM4v6leuGiven = TRUE; break; case BSIM4v6_MOD_LUCS : mod->BSIM4v6lucs = value->rValue; mod->BSIM4v6lucsGiven = TRUE; break; case BSIM4v6_MOD_LVFB : mod->BSIM4v6lvfb = value->rValue; mod->BSIM4v6lvfbGiven = TRUE; break; case BSIM4v6_MOD_LCGSL : mod->BSIM4v6lcgsl = value->rValue; mod->BSIM4v6lcgslGiven = TRUE; break; case BSIM4v6_MOD_LCGDL : mod->BSIM4v6lcgdl = value->rValue; mod->BSIM4v6lcgdlGiven = TRUE; break; case BSIM4v6_MOD_LCKAPPAS : mod->BSIM4v6lckappas = value->rValue; mod->BSIM4v6lckappasGiven = TRUE; break; case BSIM4v6_MOD_LCKAPPAD : mod->BSIM4v6lckappad = value->rValue; mod->BSIM4v6lckappadGiven = TRUE; break; case BSIM4v6_MOD_LCF : mod->BSIM4v6lcf = value->rValue; mod->BSIM4v6lcfGiven = TRUE; break; case BSIM4v6_MOD_LCLC : mod->BSIM4v6lclc = value->rValue; mod->BSIM4v6lclcGiven = TRUE; break; case BSIM4v6_MOD_LCLE : mod->BSIM4v6lcle = value->rValue; mod->BSIM4v6lcleGiven = TRUE; break; case BSIM4v6_MOD_LVFBCV : mod->BSIM4v6lvfbcv = value->rValue; mod->BSIM4v6lvfbcvGiven = TRUE; break; case BSIM4v6_MOD_LACDE : mod->BSIM4v6lacde = value->rValue; mod->BSIM4v6lacdeGiven = TRUE; break; case BSIM4v6_MOD_LMOIN : mod->BSIM4v6lmoin = value->rValue; mod->BSIM4v6lmoinGiven = TRUE; break; case BSIM4v6_MOD_LNOFF : mod->BSIM4v6lnoff = value->rValue; mod->BSIM4v6lnoffGiven = TRUE; break; case BSIM4v6_MOD_LVOFFCV : mod->BSIM4v6lvoffcv = value->rValue; mod->BSIM4v6lvoffcvGiven = TRUE; break; /* Width dependence */ case BSIM4v6_MOD_WCDSC : mod->BSIM4v6wcdsc = value->rValue; mod->BSIM4v6wcdscGiven = TRUE; break; case BSIM4v6_MOD_WCDSCB : mod->BSIM4v6wcdscb = value->rValue; mod->BSIM4v6wcdscbGiven = TRUE; break; case BSIM4v6_MOD_WCDSCD : mod->BSIM4v6wcdscd = value->rValue; mod->BSIM4v6wcdscdGiven = TRUE; break; case BSIM4v6_MOD_WCIT : mod->BSIM4v6wcit = value->rValue; mod->BSIM4v6wcitGiven = TRUE; break; case BSIM4v6_MOD_WNFACTOR : mod->BSIM4v6wnfactor = value->rValue; mod->BSIM4v6wnfactorGiven = TRUE; break; case BSIM4v6_MOD_WXJ: mod->BSIM4v6wxj = value->rValue; mod->BSIM4v6wxjGiven = TRUE; break; case BSIM4v6_MOD_WVSAT: mod->BSIM4v6wvsat = value->rValue; mod->BSIM4v6wvsatGiven = TRUE; break; case BSIM4v6_MOD_WA0: mod->BSIM4v6wa0 = value->rValue; mod->BSIM4v6wa0Given = TRUE; break; case BSIM4v6_MOD_WAGS: mod->BSIM4v6wags = value->rValue; mod->BSIM4v6wagsGiven = TRUE; break; case BSIM4v6_MOD_WA1: mod->BSIM4v6wa1 = value->rValue; mod->BSIM4v6wa1Given = TRUE; break; case BSIM4v6_MOD_WA2: mod->BSIM4v6wa2 = value->rValue; mod->BSIM4v6wa2Given = TRUE; break; case BSIM4v6_MOD_WAT: mod->BSIM4v6wat = value->rValue; mod->BSIM4v6watGiven = TRUE; break; case BSIM4v6_MOD_WKETA: mod->BSIM4v6wketa = value->rValue; mod->BSIM4v6wketaGiven = TRUE; break; case BSIM4v6_MOD_WNSUB: mod->BSIM4v6wnsub = value->rValue; mod->BSIM4v6wnsubGiven = TRUE; break; case BSIM4v6_MOD_WNDEP: mod->BSIM4v6wndep = value->rValue; mod->BSIM4v6wndepGiven = TRUE; if (mod->BSIM4v6wndep > 1.0e20) mod->BSIM4v6wndep *= 1.0e-6; break; case BSIM4v6_MOD_WNSD: mod->BSIM4v6wnsd = value->rValue; mod->BSIM4v6wnsdGiven = TRUE; if (mod->BSIM4v6wnsd > 1.0e23) mod->BSIM4v6wnsd *= 1.0e-6; break; case BSIM4v6_MOD_WNGATE: mod->BSIM4v6wngate = value->rValue; mod->BSIM4v6wngateGiven = TRUE; if (mod->BSIM4v6wngate > 1.0e23) mod->BSIM4v6wngate *= 1.0e-6; break; case BSIM4v6_MOD_WGAMMA1: mod->BSIM4v6wgamma1 = value->rValue; mod->BSIM4v6wgamma1Given = TRUE; break; case BSIM4v6_MOD_WGAMMA2: mod->BSIM4v6wgamma2 = value->rValue; mod->BSIM4v6wgamma2Given = TRUE; break; case BSIM4v6_MOD_WVBX: mod->BSIM4v6wvbx = value->rValue; mod->BSIM4v6wvbxGiven = TRUE; break; case BSIM4v6_MOD_WVBM: mod->BSIM4v6wvbm = value->rValue; mod->BSIM4v6wvbmGiven = TRUE; break; case BSIM4v6_MOD_WXT: mod->BSIM4v6wxt = value->rValue; mod->BSIM4v6wxtGiven = TRUE; break; case BSIM4v6_MOD_WK1: mod->BSIM4v6wk1 = value->rValue; mod->BSIM4v6wk1Given = TRUE; break; case BSIM4v6_MOD_WKT1: mod->BSIM4v6wkt1 = value->rValue; mod->BSIM4v6wkt1Given = TRUE; break; case BSIM4v6_MOD_WKT1L: mod->BSIM4v6wkt1l = value->rValue; mod->BSIM4v6wkt1lGiven = TRUE; break; case BSIM4v6_MOD_WKT2: mod->BSIM4v6wkt2 = value->rValue; mod->BSIM4v6wkt2Given = TRUE; break; case BSIM4v6_MOD_WK2: mod->BSIM4v6wk2 = value->rValue; mod->BSIM4v6wk2Given = TRUE; break; case BSIM4v6_MOD_WK3: mod->BSIM4v6wk3 = value->rValue; mod->BSIM4v6wk3Given = TRUE; break; case BSIM4v6_MOD_WK3B: mod->BSIM4v6wk3b = value->rValue; mod->BSIM4v6wk3bGiven = TRUE; break; case BSIM4v6_MOD_WLPE0: mod->BSIM4v6wlpe0 = value->rValue; mod->BSIM4v6wlpe0Given = TRUE; break; case BSIM4v6_MOD_WLPEB: mod->BSIM4v6wlpeb = value->rValue; mod->BSIM4v6wlpebGiven = TRUE; break; case BSIM4v6_MOD_WDVTP0: mod->BSIM4v6wdvtp0 = value->rValue; mod->BSIM4v6wdvtp0Given = TRUE; break; case BSIM4v6_MOD_WDVTP1: mod->BSIM4v6wdvtp1 = value->rValue; mod->BSIM4v6wdvtp1Given = TRUE; break; case BSIM4v6_MOD_WW0: mod->BSIM4v6ww0 = value->rValue; mod->BSIM4v6ww0Given = TRUE; break; case BSIM4v6_MOD_WDVT0: mod->BSIM4v6wdvt0 = value->rValue; mod->BSIM4v6wdvt0Given = TRUE; break; case BSIM4v6_MOD_WDVT1: mod->BSIM4v6wdvt1 = value->rValue; mod->BSIM4v6wdvt1Given = TRUE; break; case BSIM4v6_MOD_WDVT2: mod->BSIM4v6wdvt2 = value->rValue; mod->BSIM4v6wdvt2Given = TRUE; break; case BSIM4v6_MOD_WDVT0W: mod->BSIM4v6wdvt0w = value->rValue; mod->BSIM4v6wdvt0wGiven = TRUE; break; case BSIM4v6_MOD_WDVT1W: mod->BSIM4v6wdvt1w = value->rValue; mod->BSIM4v6wdvt1wGiven = TRUE; break; case BSIM4v6_MOD_WDVT2W: mod->BSIM4v6wdvt2w = value->rValue; mod->BSIM4v6wdvt2wGiven = TRUE; break; case BSIM4v6_MOD_WDROUT: mod->BSIM4v6wdrout = value->rValue; mod->BSIM4v6wdroutGiven = TRUE; break; case BSIM4v6_MOD_WDSUB: mod->BSIM4v6wdsub = value->rValue; mod->BSIM4v6wdsubGiven = TRUE; break; case BSIM4v6_MOD_WVTH0: mod->BSIM4v6wvth0 = value->rValue; mod->BSIM4v6wvth0Given = TRUE; break; case BSIM4v6_MOD_WUA: mod->BSIM4v6wua = value->rValue; mod->BSIM4v6wuaGiven = TRUE; break; case BSIM4v6_MOD_WUA1: mod->BSIM4v6wua1 = value->rValue; mod->BSIM4v6wua1Given = TRUE; break; case BSIM4v6_MOD_WUB: mod->BSIM4v6wub = value->rValue; mod->BSIM4v6wubGiven = TRUE; break; case BSIM4v6_MOD_WUB1: mod->BSIM4v6wub1 = value->rValue; mod->BSIM4v6wub1Given = TRUE; break; case BSIM4v6_MOD_WUC: mod->BSIM4v6wuc = value->rValue; mod->BSIM4v6wucGiven = TRUE; break; case BSIM4v6_MOD_WUC1: mod->BSIM4v6wuc1 = value->rValue; mod->BSIM4v6wuc1Given = TRUE; break; case BSIM4v6_MOD_WU0 : mod->BSIM4v6wu0 = value->rValue; mod->BSIM4v6wu0Given = TRUE; break; case BSIM4v6_MOD_WUTE : mod->BSIM4v6wute = value->rValue; mod->BSIM4v6wuteGiven = TRUE; break; case BSIM4v6_MOD_WUCSTE : mod->BSIM4v6wucste = value->rValue; mod->BSIM4v6wucsteGiven = TRUE; break; case BSIM4v6_MOD_WVOFF: mod->BSIM4v6wvoff = value->rValue; mod->BSIM4v6wvoffGiven = TRUE; break; case BSIM4v6_MOD_WTVOFF: mod->BSIM4v6wtvoff = value->rValue; mod->BSIM4v6wtvoffGiven = TRUE; break; case BSIM4v6_MOD_WMINV: mod->BSIM4v6wminv = value->rValue; mod->BSIM4v6wminvGiven = TRUE; break; case BSIM4v6_MOD_WMINVCV: mod->BSIM4v6wminvcv = value->rValue; mod->BSIM4v6wminvcvGiven = TRUE; break; case BSIM4v6_MOD_WFPROUT: mod->BSIM4v6wfprout = value->rValue; mod->BSIM4v6wfproutGiven = TRUE; break; case BSIM4v6_MOD_WPDITS: mod->BSIM4v6wpdits = value->rValue; mod->BSIM4v6wpditsGiven = TRUE; break; case BSIM4v6_MOD_WPDITSD: mod->BSIM4v6wpditsd = value->rValue; mod->BSIM4v6wpditsdGiven = TRUE; break; case BSIM4v6_MOD_WDELTA : mod->BSIM4v6wdelta = value->rValue; mod->BSIM4v6wdeltaGiven = TRUE; break; case BSIM4v6_MOD_WRDSW: mod->BSIM4v6wrdsw = value->rValue; mod->BSIM4v6wrdswGiven = TRUE; break; case BSIM4v6_MOD_WRDW: mod->BSIM4v6wrdw = value->rValue; mod->BSIM4v6wrdwGiven = TRUE; break; case BSIM4v6_MOD_WRSW: mod->BSIM4v6wrsw = value->rValue; mod->BSIM4v6wrswGiven = TRUE; break; case BSIM4v6_MOD_WPRWB: mod->BSIM4v6wprwb = value->rValue; mod->BSIM4v6wprwbGiven = TRUE; break; case BSIM4v6_MOD_WPRWG: mod->BSIM4v6wprwg = value->rValue; mod->BSIM4v6wprwgGiven = TRUE; break; case BSIM4v6_MOD_WPRT: mod->BSIM4v6wprt = value->rValue; mod->BSIM4v6wprtGiven = TRUE; break; case BSIM4v6_MOD_WETA0: mod->BSIM4v6weta0 = value->rValue; mod->BSIM4v6weta0Given = TRUE; break; case BSIM4v6_MOD_WETAB: mod->BSIM4v6wetab = value->rValue; mod->BSIM4v6wetabGiven = TRUE; break; case BSIM4v6_MOD_WPCLM: mod->BSIM4v6wpclm = value->rValue; mod->BSIM4v6wpclmGiven = TRUE; break; case BSIM4v6_MOD_WPDIBL1: mod->BSIM4v6wpdibl1 = value->rValue; mod->BSIM4v6wpdibl1Given = TRUE; break; case BSIM4v6_MOD_WPDIBL2: mod->BSIM4v6wpdibl2 = value->rValue; mod->BSIM4v6wpdibl2Given = TRUE; break; case BSIM4v6_MOD_WPDIBLB: mod->BSIM4v6wpdiblb = value->rValue; mod->BSIM4v6wpdiblbGiven = TRUE; break; case BSIM4v6_MOD_WPSCBE1: mod->BSIM4v6wpscbe1 = value->rValue; mod->BSIM4v6wpscbe1Given = TRUE; break; case BSIM4v6_MOD_WPSCBE2: mod->BSIM4v6wpscbe2 = value->rValue; mod->BSIM4v6wpscbe2Given = TRUE; break; case BSIM4v6_MOD_WPVAG: mod->BSIM4v6wpvag = value->rValue; mod->BSIM4v6wpvagGiven = TRUE; break; case BSIM4v6_MOD_WWR : mod->BSIM4v6wwr = value->rValue; mod->BSIM4v6wwrGiven = TRUE; break; case BSIM4v6_MOD_WDWG : mod->BSIM4v6wdwg = value->rValue; mod->BSIM4v6wdwgGiven = TRUE; break; case BSIM4v6_MOD_WDWB : mod->BSIM4v6wdwb = value->rValue; mod->BSIM4v6wdwbGiven = TRUE; break; case BSIM4v6_MOD_WB0 : mod->BSIM4v6wb0 = value->rValue; mod->BSIM4v6wb0Given = TRUE; break; case BSIM4v6_MOD_WB1 : mod->BSIM4v6wb1 = value->rValue; mod->BSIM4v6wb1Given = TRUE; break; case BSIM4v6_MOD_WALPHA0 : mod->BSIM4v6walpha0 = value->rValue; mod->BSIM4v6walpha0Given = TRUE; break; case BSIM4v6_MOD_WALPHA1 : mod->BSIM4v6walpha1 = value->rValue; mod->BSIM4v6walpha1Given = TRUE; break; case BSIM4v6_MOD_WBETA0 : mod->BSIM4v6wbeta0 = value->rValue; mod->BSIM4v6wbeta0Given = TRUE; break; case BSIM4v6_MOD_WPHIN : mod->BSIM4v6wphin = value->rValue; mod->BSIM4v6wphinGiven = TRUE; break; case BSIM4v6_MOD_WAGIDL : mod->BSIM4v6wagidl = value->rValue; mod->BSIM4v6wagidlGiven = TRUE; break; case BSIM4v6_MOD_WBGIDL : mod->BSIM4v6wbgidl = value->rValue; mod->BSIM4v6wbgidlGiven = TRUE; break; case BSIM4v6_MOD_WCGIDL : mod->BSIM4v6wcgidl = value->rValue; mod->BSIM4v6wcgidlGiven = TRUE; break; case BSIM4v6_MOD_WEGIDL : mod->BSIM4v6wegidl = value->rValue; mod->BSIM4v6wegidlGiven = TRUE; break; case BSIM4v6_MOD_WAGISL : mod->BSIM4v6wagisl = value->rValue; mod->BSIM4v6wagislGiven = TRUE; break; case BSIM4v6_MOD_WBGISL : mod->BSIM4v6wbgisl = value->rValue; mod->BSIM4v6wbgislGiven = TRUE; break; case BSIM4v6_MOD_WCGISL : mod->BSIM4v6wcgisl = value->rValue; mod->BSIM4v6wcgislGiven = TRUE; break; case BSIM4v6_MOD_WEGISL : mod->BSIM4v6wegisl = value->rValue; mod->BSIM4v6wegislGiven = TRUE; break; case BSIM4v6_MOD_WAIGC : mod->BSIM4v6waigc = value->rValue; mod->BSIM4v6waigcGiven = TRUE; break; case BSIM4v6_MOD_WBIGC : mod->BSIM4v6wbigc = value->rValue; mod->BSIM4v6wbigcGiven = TRUE; break; case BSIM4v6_MOD_WCIGC : mod->BSIM4v6wcigc = value->rValue; mod->BSIM4v6wcigcGiven = TRUE; break; case BSIM4v6_MOD_WAIGSD : mod->BSIM4v6waigsd = value->rValue; mod->BSIM4v6waigsdGiven = TRUE; break; case BSIM4v6_MOD_WBIGSD : mod->BSIM4v6wbigsd = value->rValue; mod->BSIM4v6wbigsdGiven = TRUE; break; case BSIM4v6_MOD_WCIGSD : mod->BSIM4v6wcigsd = value->rValue; mod->BSIM4v6wcigsdGiven = TRUE; break; case BSIM4v6_MOD_WAIGS : mod->BSIM4v6waigs = value->rValue; mod->BSIM4v6waigsGiven = TRUE; break; case BSIM4v6_MOD_WBIGS : mod->BSIM4v6wbigs = value->rValue; mod->BSIM4v6wbigsGiven = TRUE; break; case BSIM4v6_MOD_WCIGS : mod->BSIM4v6wcigs = value->rValue; mod->BSIM4v6wcigsGiven = TRUE; break; case BSIM4v6_MOD_WAIGD : mod->BSIM4v6waigd = value->rValue; mod->BSIM4v6waigdGiven = TRUE; break; case BSIM4v6_MOD_WBIGD : mod->BSIM4v6wbigd = value->rValue; mod->BSIM4v6wbigdGiven = TRUE; break; case BSIM4v6_MOD_WCIGD : mod->BSIM4v6wcigd = value->rValue; mod->BSIM4v6wcigdGiven = TRUE; break; case BSIM4v6_MOD_WAIGBACC : mod->BSIM4v6waigbacc = value->rValue; mod->BSIM4v6waigbaccGiven = TRUE; break; case BSIM4v6_MOD_WBIGBACC : mod->BSIM4v6wbigbacc = value->rValue; mod->BSIM4v6wbigbaccGiven = TRUE; break; case BSIM4v6_MOD_WCIGBACC : mod->BSIM4v6wcigbacc = value->rValue; mod->BSIM4v6wcigbaccGiven = TRUE; break; case BSIM4v6_MOD_WAIGBINV : mod->BSIM4v6waigbinv = value->rValue; mod->BSIM4v6waigbinvGiven = TRUE; break; case BSIM4v6_MOD_WBIGBINV : mod->BSIM4v6wbigbinv = value->rValue; mod->BSIM4v6wbigbinvGiven = TRUE; break; case BSIM4v6_MOD_WCIGBINV : mod->BSIM4v6wcigbinv = value->rValue; mod->BSIM4v6wcigbinvGiven = TRUE; break; case BSIM4v6_MOD_WNIGC : mod->BSIM4v6wnigc = value->rValue; mod->BSIM4v6wnigcGiven = TRUE; break; case BSIM4v6_MOD_WNIGBINV : mod->BSIM4v6wnigbinv = value->rValue; mod->BSIM4v6wnigbinvGiven = TRUE; break; case BSIM4v6_MOD_WNIGBACC : mod->BSIM4v6wnigbacc = value->rValue; mod->BSIM4v6wnigbaccGiven = TRUE; break; case BSIM4v6_MOD_WNTOX : mod->BSIM4v6wntox = value->rValue; mod->BSIM4v6wntoxGiven = TRUE; break; case BSIM4v6_MOD_WEIGBINV : mod->BSIM4v6weigbinv = value->rValue; mod->BSIM4v6weigbinvGiven = TRUE; break; case BSIM4v6_MOD_WPIGCD : mod->BSIM4v6wpigcd = value->rValue; mod->BSIM4v6wpigcdGiven = TRUE; break; case BSIM4v6_MOD_WPOXEDGE : mod->BSIM4v6wpoxedge = value->rValue; mod->BSIM4v6wpoxedgeGiven = TRUE; break; case BSIM4v6_MOD_WXRCRG1 : mod->BSIM4v6wxrcrg1 = value->rValue; mod->BSIM4v6wxrcrg1Given = TRUE; break; case BSIM4v6_MOD_WXRCRG2 : mod->BSIM4v6wxrcrg2 = value->rValue; mod->BSIM4v6wxrcrg2Given = TRUE; break; case BSIM4v6_MOD_WLAMBDA : mod->BSIM4v6wlambda = value->rValue; mod->BSIM4v6wlambdaGiven = TRUE; break; case BSIM4v6_MOD_WVTL : mod->BSIM4v6wvtl = value->rValue; mod->BSIM4v6wvtlGiven = TRUE; break; case BSIM4v6_MOD_WXN: mod->BSIM4v6wxn = value->rValue; mod->BSIM4v6wxnGiven = TRUE; break; case BSIM4v6_MOD_WVFBSDOFF: mod->BSIM4v6wvfbsdoff = value->rValue; mod->BSIM4v6wvfbsdoffGiven = TRUE; break; case BSIM4v6_MOD_WTVFBSDOFF: mod->BSIM4v6wtvfbsdoff = value->rValue; mod->BSIM4v6wtvfbsdoffGiven = TRUE; break; case BSIM4v6_MOD_WEU : mod->BSIM4v6weu = value->rValue; mod->BSIM4v6weuGiven = TRUE; break; case BSIM4v6_MOD_WUCS : mod->BSIM4v6wucs = value->rValue; mod->BSIM4v6wucsGiven = TRUE; break; case BSIM4v6_MOD_WVFB : mod->BSIM4v6wvfb = value->rValue; mod->BSIM4v6wvfbGiven = TRUE; break; case BSIM4v6_MOD_WCGSL : mod->BSIM4v6wcgsl = value->rValue; mod->BSIM4v6wcgslGiven = TRUE; break; case BSIM4v6_MOD_WCGDL : mod->BSIM4v6wcgdl = value->rValue; mod->BSIM4v6wcgdlGiven = TRUE; break; case BSIM4v6_MOD_WCKAPPAS : mod->BSIM4v6wckappas = value->rValue; mod->BSIM4v6wckappasGiven = TRUE; break; case BSIM4v6_MOD_WCKAPPAD : mod->BSIM4v6wckappad = value->rValue; mod->BSIM4v6wckappadGiven = TRUE; break; case BSIM4v6_MOD_WCF : mod->BSIM4v6wcf = value->rValue; mod->BSIM4v6wcfGiven = TRUE; break; case BSIM4v6_MOD_WCLC : mod->BSIM4v6wclc = value->rValue; mod->BSIM4v6wclcGiven = TRUE; break; case BSIM4v6_MOD_WCLE : mod->BSIM4v6wcle = value->rValue; mod->BSIM4v6wcleGiven = TRUE; break; case BSIM4v6_MOD_WVFBCV : mod->BSIM4v6wvfbcv = value->rValue; mod->BSIM4v6wvfbcvGiven = TRUE; break; case BSIM4v6_MOD_WACDE : mod->BSIM4v6wacde = value->rValue; mod->BSIM4v6wacdeGiven = TRUE; break; case BSIM4v6_MOD_WMOIN : mod->BSIM4v6wmoin = value->rValue; mod->BSIM4v6wmoinGiven = TRUE; break; case BSIM4v6_MOD_WNOFF : mod->BSIM4v6wnoff = value->rValue; mod->BSIM4v6wnoffGiven = TRUE; break; case BSIM4v6_MOD_WVOFFCV : mod->BSIM4v6wvoffcv = value->rValue; mod->BSIM4v6wvoffcvGiven = TRUE; break; /* Cross-term dependence */ case BSIM4v6_MOD_PCDSC : mod->BSIM4v6pcdsc = value->rValue; mod->BSIM4v6pcdscGiven = TRUE; break; case BSIM4v6_MOD_PCDSCB : mod->BSIM4v6pcdscb = value->rValue; mod->BSIM4v6pcdscbGiven = TRUE; break; case BSIM4v6_MOD_PCDSCD : mod->BSIM4v6pcdscd = value->rValue; mod->BSIM4v6pcdscdGiven = TRUE; break; case BSIM4v6_MOD_PCIT : mod->BSIM4v6pcit = value->rValue; mod->BSIM4v6pcitGiven = TRUE; break; case BSIM4v6_MOD_PNFACTOR : mod->BSIM4v6pnfactor = value->rValue; mod->BSIM4v6pnfactorGiven = TRUE; break; case BSIM4v6_MOD_PXJ: mod->BSIM4v6pxj = value->rValue; mod->BSIM4v6pxjGiven = TRUE; break; case BSIM4v6_MOD_PVSAT: mod->BSIM4v6pvsat = value->rValue; mod->BSIM4v6pvsatGiven = TRUE; break; case BSIM4v6_MOD_PA0: mod->BSIM4v6pa0 = value->rValue; mod->BSIM4v6pa0Given = TRUE; break; case BSIM4v6_MOD_PAGS: mod->BSIM4v6pags = value->rValue; mod->BSIM4v6pagsGiven = TRUE; break; case BSIM4v6_MOD_PA1: mod->BSIM4v6pa1 = value->rValue; mod->BSIM4v6pa1Given = TRUE; break; case BSIM4v6_MOD_PA2: mod->BSIM4v6pa2 = value->rValue; mod->BSIM4v6pa2Given = TRUE; break; case BSIM4v6_MOD_PAT: mod->BSIM4v6pat = value->rValue; mod->BSIM4v6patGiven = TRUE; break; case BSIM4v6_MOD_PKETA: mod->BSIM4v6pketa = value->rValue; mod->BSIM4v6pketaGiven = TRUE; break; case BSIM4v6_MOD_PNSUB: mod->BSIM4v6pnsub = value->rValue; mod->BSIM4v6pnsubGiven = TRUE; break; case BSIM4v6_MOD_PNDEP: mod->BSIM4v6pndep = value->rValue; mod->BSIM4v6pndepGiven = TRUE; if (mod->BSIM4v6pndep > 1.0e20) mod->BSIM4v6pndep *= 1.0e-6; break; case BSIM4v6_MOD_PNSD: mod->BSIM4v6pnsd = value->rValue; mod->BSIM4v6pnsdGiven = TRUE; if (mod->BSIM4v6pnsd > 1.0e23) mod->BSIM4v6pnsd *= 1.0e-6; break; case BSIM4v6_MOD_PNGATE: mod->BSIM4v6pngate = value->rValue; mod->BSIM4v6pngateGiven = TRUE; if (mod->BSIM4v6pngate > 1.0e23) mod->BSIM4v6pngate *= 1.0e-6; break; case BSIM4v6_MOD_PGAMMA1: mod->BSIM4v6pgamma1 = value->rValue; mod->BSIM4v6pgamma1Given = TRUE; break; case BSIM4v6_MOD_PGAMMA2: mod->BSIM4v6pgamma2 = value->rValue; mod->BSIM4v6pgamma2Given = TRUE; break; case BSIM4v6_MOD_PVBX: mod->BSIM4v6pvbx = value->rValue; mod->BSIM4v6pvbxGiven = TRUE; break; case BSIM4v6_MOD_PVBM: mod->BSIM4v6pvbm = value->rValue; mod->BSIM4v6pvbmGiven = TRUE; break; case BSIM4v6_MOD_PXT: mod->BSIM4v6pxt = value->rValue; mod->BSIM4v6pxtGiven = TRUE; break; case BSIM4v6_MOD_PK1: mod->BSIM4v6pk1 = value->rValue; mod->BSIM4v6pk1Given = TRUE; break; case BSIM4v6_MOD_PKT1: mod->BSIM4v6pkt1 = value->rValue; mod->BSIM4v6pkt1Given = TRUE; break; case BSIM4v6_MOD_PKT1L: mod->BSIM4v6pkt1l = value->rValue; mod->BSIM4v6pkt1lGiven = TRUE; break; case BSIM4v6_MOD_PKT2: mod->BSIM4v6pkt2 = value->rValue; mod->BSIM4v6pkt2Given = TRUE; break; case BSIM4v6_MOD_PK2: mod->BSIM4v6pk2 = value->rValue; mod->BSIM4v6pk2Given = TRUE; break; case BSIM4v6_MOD_PK3: mod->BSIM4v6pk3 = value->rValue; mod->BSIM4v6pk3Given = TRUE; break; case BSIM4v6_MOD_PK3B: mod->BSIM4v6pk3b = value->rValue; mod->BSIM4v6pk3bGiven = TRUE; break; case BSIM4v6_MOD_PLPE0: mod->BSIM4v6plpe0 = value->rValue; mod->BSIM4v6plpe0Given = TRUE; break; case BSIM4v6_MOD_PLPEB: mod->BSIM4v6plpeb = value->rValue; mod->BSIM4v6plpebGiven = TRUE; break; case BSIM4v6_MOD_PDVTP0: mod->BSIM4v6pdvtp0 = value->rValue; mod->BSIM4v6pdvtp0Given = TRUE; break; case BSIM4v6_MOD_PDVTP1: mod->BSIM4v6pdvtp1 = value->rValue; mod->BSIM4v6pdvtp1Given = TRUE; break; case BSIM4v6_MOD_PW0: mod->BSIM4v6pw0 = value->rValue; mod->BSIM4v6pw0Given = TRUE; break; case BSIM4v6_MOD_PDVT0: mod->BSIM4v6pdvt0 = value->rValue; mod->BSIM4v6pdvt0Given = TRUE; break; case BSIM4v6_MOD_PDVT1: mod->BSIM4v6pdvt1 = value->rValue; mod->BSIM4v6pdvt1Given = TRUE; break; case BSIM4v6_MOD_PDVT2: mod->BSIM4v6pdvt2 = value->rValue; mod->BSIM4v6pdvt2Given = TRUE; break; case BSIM4v6_MOD_PDVT0W: mod->BSIM4v6pdvt0w = value->rValue; mod->BSIM4v6pdvt0wGiven = TRUE; break; case BSIM4v6_MOD_PDVT1W: mod->BSIM4v6pdvt1w = value->rValue; mod->BSIM4v6pdvt1wGiven = TRUE; break; case BSIM4v6_MOD_PDVT2W: mod->BSIM4v6pdvt2w = value->rValue; mod->BSIM4v6pdvt2wGiven = TRUE; break; case BSIM4v6_MOD_PDROUT: mod->BSIM4v6pdrout = value->rValue; mod->BSIM4v6pdroutGiven = TRUE; break; case BSIM4v6_MOD_PDSUB: mod->BSIM4v6pdsub = value->rValue; mod->BSIM4v6pdsubGiven = TRUE; break; case BSIM4v6_MOD_PVTH0: mod->BSIM4v6pvth0 = value->rValue; mod->BSIM4v6pvth0Given = TRUE; break; case BSIM4v6_MOD_PUA: mod->BSIM4v6pua = value->rValue; mod->BSIM4v6puaGiven = TRUE; break; case BSIM4v6_MOD_PUA1: mod->BSIM4v6pua1 = value->rValue; mod->BSIM4v6pua1Given = TRUE; break; case BSIM4v6_MOD_PUB: mod->BSIM4v6pub = value->rValue; mod->BSIM4v6pubGiven = TRUE; break; case BSIM4v6_MOD_PUB1: mod->BSIM4v6pub1 = value->rValue; mod->BSIM4v6pub1Given = TRUE; break; case BSIM4v6_MOD_PUC: mod->BSIM4v6puc = value->rValue; mod->BSIM4v6pucGiven = TRUE; break; case BSIM4v6_MOD_PUC1: mod->BSIM4v6puc1 = value->rValue; mod->BSIM4v6puc1Given = TRUE; break; case BSIM4v6_MOD_PU0 : mod->BSIM4v6pu0 = value->rValue; mod->BSIM4v6pu0Given = TRUE; break; case BSIM4v6_MOD_PUTE : mod->BSIM4v6pute = value->rValue; mod->BSIM4v6puteGiven = TRUE; break; case BSIM4v6_MOD_PUCSTE : mod->BSIM4v6pucste = value->rValue; mod->BSIM4v6pucsteGiven = TRUE; break; case BSIM4v6_MOD_PVOFF: mod->BSIM4v6pvoff = value->rValue; mod->BSIM4v6pvoffGiven = TRUE; break; case BSIM4v6_MOD_PTVOFF: mod->BSIM4v6ptvoff = value->rValue; mod->BSIM4v6ptvoffGiven = TRUE; break; case BSIM4v6_MOD_PMINV: mod->BSIM4v6pminv = value->rValue; mod->BSIM4v6pminvGiven = TRUE; break; case BSIM4v6_MOD_PMINVCV: mod->BSIM4v6pminvcv = value->rValue; mod->BSIM4v6pminvcvGiven = TRUE; break; case BSIM4v6_MOD_PFPROUT: mod->BSIM4v6pfprout = value->rValue; mod->BSIM4v6pfproutGiven = TRUE; break; case BSIM4v6_MOD_PPDITS: mod->BSIM4v6ppdits = value->rValue; mod->BSIM4v6ppditsGiven = TRUE; break; case BSIM4v6_MOD_PPDITSD: mod->BSIM4v6ppditsd = value->rValue; mod->BSIM4v6ppditsdGiven = TRUE; break; case BSIM4v6_MOD_PDELTA : mod->BSIM4v6pdelta = value->rValue; mod->BSIM4v6pdeltaGiven = TRUE; break; case BSIM4v6_MOD_PRDSW: mod->BSIM4v6prdsw = value->rValue; mod->BSIM4v6prdswGiven = TRUE; break; case BSIM4v6_MOD_PRDW: mod->BSIM4v6prdw = value->rValue; mod->BSIM4v6prdwGiven = TRUE; break; case BSIM4v6_MOD_PRSW: mod->BSIM4v6prsw = value->rValue; mod->BSIM4v6prswGiven = TRUE; break; case BSIM4v6_MOD_PPRWB: mod->BSIM4v6pprwb = value->rValue; mod->BSIM4v6pprwbGiven = TRUE; break; case BSIM4v6_MOD_PPRWG: mod->BSIM4v6pprwg = value->rValue; mod->BSIM4v6pprwgGiven = TRUE; break; case BSIM4v6_MOD_PPRT: mod->BSIM4v6pprt = value->rValue; mod->BSIM4v6pprtGiven = TRUE; break; case BSIM4v6_MOD_PETA0: mod->BSIM4v6peta0 = value->rValue; mod->BSIM4v6peta0Given = TRUE; break; case BSIM4v6_MOD_PETAB: mod->BSIM4v6petab = value->rValue; mod->BSIM4v6petabGiven = TRUE; break; case BSIM4v6_MOD_PPCLM: mod->BSIM4v6ppclm = value->rValue; mod->BSIM4v6ppclmGiven = TRUE; break; case BSIM4v6_MOD_PPDIBL1: mod->BSIM4v6ppdibl1 = value->rValue; mod->BSIM4v6ppdibl1Given = TRUE; break; case BSIM4v6_MOD_PPDIBL2: mod->BSIM4v6ppdibl2 = value->rValue; mod->BSIM4v6ppdibl2Given = TRUE; break; case BSIM4v6_MOD_PPDIBLB: mod->BSIM4v6ppdiblb = value->rValue; mod->BSIM4v6ppdiblbGiven = TRUE; break; case BSIM4v6_MOD_PPSCBE1: mod->BSIM4v6ppscbe1 = value->rValue; mod->BSIM4v6ppscbe1Given = TRUE; break; case BSIM4v6_MOD_PPSCBE2: mod->BSIM4v6ppscbe2 = value->rValue; mod->BSIM4v6ppscbe2Given = TRUE; break; case BSIM4v6_MOD_PPVAG: mod->BSIM4v6ppvag = value->rValue; mod->BSIM4v6ppvagGiven = TRUE; break; case BSIM4v6_MOD_PWR : mod->BSIM4v6pwr = value->rValue; mod->BSIM4v6pwrGiven = TRUE; break; case BSIM4v6_MOD_PDWG : mod->BSIM4v6pdwg = value->rValue; mod->BSIM4v6pdwgGiven = TRUE; break; case BSIM4v6_MOD_PDWB : mod->BSIM4v6pdwb = value->rValue; mod->BSIM4v6pdwbGiven = TRUE; break; case BSIM4v6_MOD_PB0 : mod->BSIM4v6pb0 = value->rValue; mod->BSIM4v6pb0Given = TRUE; break; case BSIM4v6_MOD_PB1 : mod->BSIM4v6pb1 = value->rValue; mod->BSIM4v6pb1Given = TRUE; break; case BSIM4v6_MOD_PALPHA0 : mod->BSIM4v6palpha0 = value->rValue; mod->BSIM4v6palpha0Given = TRUE; break; case BSIM4v6_MOD_PALPHA1 : mod->BSIM4v6palpha1 = value->rValue; mod->BSIM4v6palpha1Given = TRUE; break; case BSIM4v6_MOD_PBETA0 : mod->BSIM4v6pbeta0 = value->rValue; mod->BSIM4v6pbeta0Given = TRUE; break; case BSIM4v6_MOD_PPHIN : mod->BSIM4v6pphin = value->rValue; mod->BSIM4v6pphinGiven = TRUE; break; case BSIM4v6_MOD_PAGIDL : mod->BSIM4v6pagidl = value->rValue; mod->BSIM4v6pagidlGiven = TRUE; break; case BSIM4v6_MOD_PBGIDL : mod->BSIM4v6pbgidl = value->rValue; mod->BSIM4v6pbgidlGiven = TRUE; break; case BSIM4v6_MOD_PCGIDL : mod->BSIM4v6pcgidl = value->rValue; mod->BSIM4v6pcgidlGiven = TRUE; break; case BSIM4v6_MOD_PEGIDL : mod->BSIM4v6pegidl = value->rValue; mod->BSIM4v6pegidlGiven = TRUE; break; case BSIM4v6_MOD_PAGISL : mod->BSIM4v6pagisl = value->rValue; mod->BSIM4v6pagislGiven = TRUE; break; case BSIM4v6_MOD_PBGISL : mod->BSIM4v6pbgisl = value->rValue; mod->BSIM4v6pbgislGiven = TRUE; break; case BSIM4v6_MOD_PCGISL : mod->BSIM4v6pcgisl = value->rValue; mod->BSIM4v6pcgislGiven = TRUE; break; case BSIM4v6_MOD_PEGISL : mod->BSIM4v6pegisl = value->rValue; mod->BSIM4v6pegislGiven = TRUE; break; case BSIM4v6_MOD_PAIGC : mod->BSIM4v6paigc = value->rValue; mod->BSIM4v6paigcGiven = TRUE; break; case BSIM4v6_MOD_PBIGC : mod->BSIM4v6pbigc = value->rValue; mod->BSIM4v6pbigcGiven = TRUE; break; case BSIM4v6_MOD_PCIGC : mod->BSIM4v6pcigc = value->rValue; mod->BSIM4v6pcigcGiven = TRUE; break; case BSIM4v6_MOD_PAIGSD : mod->BSIM4v6paigsd = value->rValue; mod->BSIM4v6paigsdGiven = TRUE; break; case BSIM4v6_MOD_PBIGSD : mod->BSIM4v6pbigsd = value->rValue; mod->BSIM4v6pbigsdGiven = TRUE; break; case BSIM4v6_MOD_PCIGSD : mod->BSIM4v6pcigsd = value->rValue; mod->BSIM4v6pcigsdGiven = TRUE; break; case BSIM4v6_MOD_PAIGS : mod->BSIM4v6paigs = value->rValue; mod->BSIM4v6paigsGiven = TRUE; break; case BSIM4v6_MOD_PBIGS : mod->BSIM4v6pbigs = value->rValue; mod->BSIM4v6pbigsGiven = TRUE; break; case BSIM4v6_MOD_PCIGS : mod->BSIM4v6pcigs = value->rValue; mod->BSIM4v6pcigsGiven = TRUE; break; case BSIM4v6_MOD_PAIGD : mod->BSIM4v6paigd = value->rValue; mod->BSIM4v6paigdGiven = TRUE; break; case BSIM4v6_MOD_PBIGD : mod->BSIM4v6pbigd = value->rValue; mod->BSIM4v6pbigdGiven = TRUE; break; case BSIM4v6_MOD_PCIGD : mod->BSIM4v6pcigd = value->rValue; mod->BSIM4v6pcigdGiven = TRUE; break; case BSIM4v6_MOD_PAIGBACC : mod->BSIM4v6paigbacc = value->rValue; mod->BSIM4v6paigbaccGiven = TRUE; break; case BSIM4v6_MOD_PBIGBACC : mod->BSIM4v6pbigbacc = value->rValue; mod->BSIM4v6pbigbaccGiven = TRUE; break; case BSIM4v6_MOD_PCIGBACC : mod->BSIM4v6pcigbacc = value->rValue; mod->BSIM4v6pcigbaccGiven = TRUE; break; case BSIM4v6_MOD_PAIGBINV : mod->BSIM4v6paigbinv = value->rValue; mod->BSIM4v6paigbinvGiven = TRUE; break; case BSIM4v6_MOD_PBIGBINV : mod->BSIM4v6pbigbinv = value->rValue; mod->BSIM4v6pbigbinvGiven = TRUE; break; case BSIM4v6_MOD_PCIGBINV : mod->BSIM4v6pcigbinv = value->rValue; mod->BSIM4v6pcigbinvGiven = TRUE; break; case BSIM4v6_MOD_PNIGC : mod->BSIM4v6pnigc = value->rValue; mod->BSIM4v6pnigcGiven = TRUE; break; case BSIM4v6_MOD_PNIGBINV : mod->BSIM4v6pnigbinv = value->rValue; mod->BSIM4v6pnigbinvGiven = TRUE; break; case BSIM4v6_MOD_PNIGBACC : mod->BSIM4v6pnigbacc = value->rValue; mod->BSIM4v6pnigbaccGiven = TRUE; break; case BSIM4v6_MOD_PNTOX : mod->BSIM4v6pntox = value->rValue; mod->BSIM4v6pntoxGiven = TRUE; break; case BSIM4v6_MOD_PEIGBINV : mod->BSIM4v6peigbinv = value->rValue; mod->BSIM4v6peigbinvGiven = TRUE; break; case BSIM4v6_MOD_PPIGCD : mod->BSIM4v6ppigcd = value->rValue; mod->BSIM4v6ppigcdGiven = TRUE; break; case BSIM4v6_MOD_PPOXEDGE : mod->BSIM4v6ppoxedge = value->rValue; mod->BSIM4v6ppoxedgeGiven = TRUE; break; case BSIM4v6_MOD_PXRCRG1 : mod->BSIM4v6pxrcrg1 = value->rValue; mod->BSIM4v6pxrcrg1Given = TRUE; break; case BSIM4v6_MOD_PXRCRG2 : mod->BSIM4v6pxrcrg2 = value->rValue; mod->BSIM4v6pxrcrg2Given = TRUE; break; case BSIM4v6_MOD_PLAMBDA : mod->BSIM4v6plambda = value->rValue; mod->BSIM4v6plambdaGiven = TRUE; break; case BSIM4v6_MOD_PVTL : mod->BSIM4v6pvtl = value->rValue; mod->BSIM4v6pvtlGiven = TRUE; break; case BSIM4v6_MOD_PXN: mod->BSIM4v6pxn = value->rValue; mod->BSIM4v6pxnGiven = TRUE; break; case BSIM4v6_MOD_PVFBSDOFF: mod->BSIM4v6pvfbsdoff = value->rValue; mod->BSIM4v6pvfbsdoffGiven = TRUE; break; case BSIM4v6_MOD_PTVFBSDOFF: mod->BSIM4v6ptvfbsdoff = value->rValue; mod->BSIM4v6ptvfbsdoffGiven = TRUE; break; case BSIM4v6_MOD_PEU : mod->BSIM4v6peu = value->rValue; mod->BSIM4v6peuGiven = TRUE; break; case BSIM4v6_MOD_PUCS : mod->BSIM4v6pucs = value->rValue; mod->BSIM4v6pucsGiven = TRUE; break; case BSIM4v6_MOD_PVFB : mod->BSIM4v6pvfb = value->rValue; mod->BSIM4v6pvfbGiven = TRUE; break; case BSIM4v6_MOD_PCGSL : mod->BSIM4v6pcgsl = value->rValue; mod->BSIM4v6pcgslGiven = TRUE; break; case BSIM4v6_MOD_PCGDL : mod->BSIM4v6pcgdl = value->rValue; mod->BSIM4v6pcgdlGiven = TRUE; break; case BSIM4v6_MOD_PCKAPPAS : mod->BSIM4v6pckappas = value->rValue; mod->BSIM4v6pckappasGiven = TRUE; break; case BSIM4v6_MOD_PCKAPPAD : mod->BSIM4v6pckappad = value->rValue; mod->BSIM4v6pckappadGiven = TRUE; break; case BSIM4v6_MOD_PCF : mod->BSIM4v6pcf = value->rValue; mod->BSIM4v6pcfGiven = TRUE; break; case BSIM4v6_MOD_PCLC : mod->BSIM4v6pclc = value->rValue; mod->BSIM4v6pclcGiven = TRUE; break; case BSIM4v6_MOD_PCLE : mod->BSIM4v6pcle = value->rValue; mod->BSIM4v6pcleGiven = TRUE; break; case BSIM4v6_MOD_PVFBCV : mod->BSIM4v6pvfbcv = value->rValue; mod->BSIM4v6pvfbcvGiven = TRUE; break; case BSIM4v6_MOD_PACDE : mod->BSIM4v6pacde = value->rValue; mod->BSIM4v6pacdeGiven = TRUE; break; case BSIM4v6_MOD_PMOIN : mod->BSIM4v6pmoin = value->rValue; mod->BSIM4v6pmoinGiven = TRUE; break; case BSIM4v6_MOD_PNOFF : mod->BSIM4v6pnoff = value->rValue; mod->BSIM4v6pnoffGiven = TRUE; break; case BSIM4v6_MOD_PVOFFCV : mod->BSIM4v6pvoffcv = value->rValue; mod->BSIM4v6pvoffcvGiven = TRUE; break; case BSIM4v6_MOD_TNOM : mod->BSIM4v6tnom = value->rValue + CONSTCtoK; mod->BSIM4v6tnomGiven = TRUE; break; case BSIM4v6_MOD_CGSO : mod->BSIM4v6cgso = value->rValue; mod->BSIM4v6cgsoGiven = TRUE; break; case BSIM4v6_MOD_CGDO : mod->BSIM4v6cgdo = value->rValue; mod->BSIM4v6cgdoGiven = TRUE; break; case BSIM4v6_MOD_CGBO : mod->BSIM4v6cgbo = value->rValue; mod->BSIM4v6cgboGiven = TRUE; break; case BSIM4v6_MOD_XPART : mod->BSIM4v6xpart = value->rValue; mod->BSIM4v6xpartGiven = TRUE; break; case BSIM4v6_MOD_RSH : mod->BSIM4v6sheetResistance = value->rValue; mod->BSIM4v6sheetResistanceGiven = TRUE; break; case BSIM4v6_MOD_JSS : mod->BSIM4v6SjctSatCurDensity = value->rValue; mod->BSIM4v6SjctSatCurDensityGiven = TRUE; break; case BSIM4v6_MOD_JSWS : mod->BSIM4v6SjctSidewallSatCurDensity = value->rValue; mod->BSIM4v6SjctSidewallSatCurDensityGiven = TRUE; break; case BSIM4v6_MOD_JSWGS : mod->BSIM4v6SjctGateSidewallSatCurDensity = value->rValue; mod->BSIM4v6SjctGateSidewallSatCurDensityGiven = TRUE; break; case BSIM4v6_MOD_PBS : mod->BSIM4v6SbulkJctPotential = value->rValue; mod->BSIM4v6SbulkJctPotentialGiven = TRUE; break; case BSIM4v6_MOD_MJS : mod->BSIM4v6SbulkJctBotGradingCoeff = value->rValue; mod->BSIM4v6SbulkJctBotGradingCoeffGiven = TRUE; break; case BSIM4v6_MOD_PBSWS : mod->BSIM4v6SsidewallJctPotential = value->rValue; mod->BSIM4v6SsidewallJctPotentialGiven = TRUE; break; case BSIM4v6_MOD_MJSWS : mod->BSIM4v6SbulkJctSideGradingCoeff = value->rValue; mod->BSIM4v6SbulkJctSideGradingCoeffGiven = TRUE; break; case BSIM4v6_MOD_CJS : mod->BSIM4v6SunitAreaJctCap = value->rValue; mod->BSIM4v6SunitAreaJctCapGiven = TRUE; break; case BSIM4v6_MOD_CJSWS : mod->BSIM4v6SunitLengthSidewallJctCap = value->rValue; mod->BSIM4v6SunitLengthSidewallJctCapGiven = TRUE; break; case BSIM4v6_MOD_NJS : mod->BSIM4v6SjctEmissionCoeff = value->rValue; mod->BSIM4v6SjctEmissionCoeffGiven = TRUE; break; case BSIM4v6_MOD_PBSWGS : mod->BSIM4v6SGatesidewallJctPotential = value->rValue; mod->BSIM4v6SGatesidewallJctPotentialGiven = TRUE; break; case BSIM4v6_MOD_MJSWGS : mod->BSIM4v6SbulkJctGateSideGradingCoeff = value->rValue; mod->BSIM4v6SbulkJctGateSideGradingCoeffGiven = TRUE; break; case BSIM4v6_MOD_CJSWGS : mod->BSIM4v6SunitLengthGateSidewallJctCap = value->rValue; mod->BSIM4v6SunitLengthGateSidewallJctCapGiven = TRUE; break; case BSIM4v6_MOD_XTIS : mod->BSIM4v6SjctTempExponent = value->rValue; mod->BSIM4v6SjctTempExponentGiven = TRUE; break; case BSIM4v6_MOD_JSD : mod->BSIM4v6DjctSatCurDensity = value->rValue; mod->BSIM4v6DjctSatCurDensityGiven = TRUE; break; case BSIM4v6_MOD_JSWD : mod->BSIM4v6DjctSidewallSatCurDensity = value->rValue; mod->BSIM4v6DjctSidewallSatCurDensityGiven = TRUE; break; case BSIM4v6_MOD_JSWGD : mod->BSIM4v6DjctGateSidewallSatCurDensity = value->rValue; mod->BSIM4v6DjctGateSidewallSatCurDensityGiven = TRUE; break; case BSIM4v6_MOD_PBD : mod->BSIM4v6DbulkJctPotential = value->rValue; mod->BSIM4v6DbulkJctPotentialGiven = TRUE; break; case BSIM4v6_MOD_MJD : mod->BSIM4v6DbulkJctBotGradingCoeff = value->rValue; mod->BSIM4v6DbulkJctBotGradingCoeffGiven = TRUE; break; case BSIM4v6_MOD_PBSWD : mod->BSIM4v6DsidewallJctPotential = value->rValue; mod->BSIM4v6DsidewallJctPotentialGiven = TRUE; break; case BSIM4v6_MOD_MJSWD : mod->BSIM4v6DbulkJctSideGradingCoeff = value->rValue; mod->BSIM4v6DbulkJctSideGradingCoeffGiven = TRUE; break; case BSIM4v6_MOD_CJD : mod->BSIM4v6DunitAreaJctCap = value->rValue; mod->BSIM4v6DunitAreaJctCapGiven = TRUE; break; case BSIM4v6_MOD_CJSWD : mod->BSIM4v6DunitLengthSidewallJctCap = value->rValue; mod->BSIM4v6DunitLengthSidewallJctCapGiven = TRUE; break; case BSIM4v6_MOD_NJD : mod->BSIM4v6DjctEmissionCoeff = value->rValue; mod->BSIM4v6DjctEmissionCoeffGiven = TRUE; break; case BSIM4v6_MOD_PBSWGD : mod->BSIM4v6DGatesidewallJctPotential = value->rValue; mod->BSIM4v6DGatesidewallJctPotentialGiven = TRUE; break; case BSIM4v6_MOD_MJSWGD : mod->BSIM4v6DbulkJctGateSideGradingCoeff = value->rValue; mod->BSIM4v6DbulkJctGateSideGradingCoeffGiven = TRUE; break; case BSIM4v6_MOD_CJSWGD : mod->BSIM4v6DunitLengthGateSidewallJctCap = value->rValue; mod->BSIM4v6DunitLengthGateSidewallJctCapGiven = TRUE; break; case BSIM4v6_MOD_XTID : mod->BSIM4v6DjctTempExponent = value->rValue; mod->BSIM4v6DjctTempExponentGiven = TRUE; break; case BSIM4v6_MOD_LINT : mod->BSIM4v6Lint = value->rValue; mod->BSIM4v6LintGiven = TRUE; break; case BSIM4v6_MOD_LL : mod->BSIM4v6Ll = value->rValue; mod->BSIM4v6LlGiven = TRUE; break; case BSIM4v6_MOD_LLC : mod->BSIM4v6Llc = value->rValue; mod->BSIM4v6LlcGiven = TRUE; break; case BSIM4v6_MOD_LLN : mod->BSIM4v6Lln = value->rValue; mod->BSIM4v6LlnGiven = TRUE; break; case BSIM4v6_MOD_LW : mod->BSIM4v6Lw = value->rValue; mod->BSIM4v6LwGiven = TRUE; break; case BSIM4v6_MOD_LWC : mod->BSIM4v6Lwc = value->rValue; mod->BSIM4v6LwcGiven = TRUE; break; case BSIM4v6_MOD_LWN : mod->BSIM4v6Lwn = value->rValue; mod->BSIM4v6LwnGiven = TRUE; break; case BSIM4v6_MOD_LWL : mod->BSIM4v6Lwl = value->rValue; mod->BSIM4v6LwlGiven = TRUE; break; case BSIM4v6_MOD_LWLC : mod->BSIM4v6Lwlc = value->rValue; mod->BSIM4v6LwlcGiven = TRUE; break; case BSIM4v6_MOD_LMIN : mod->BSIM4v6Lmin = value->rValue; mod->BSIM4v6LminGiven = TRUE; break; case BSIM4v6_MOD_LMAX : mod->BSIM4v6Lmax = value->rValue; mod->BSIM4v6LmaxGiven = TRUE; break; case BSIM4v6_MOD_WINT : mod->BSIM4v6Wint = value->rValue; mod->BSIM4v6WintGiven = TRUE; break; case BSIM4v6_MOD_WL : mod->BSIM4v6Wl = value->rValue; mod->BSIM4v6WlGiven = TRUE; break; case BSIM4v6_MOD_WLC : mod->BSIM4v6Wlc = value->rValue; mod->BSIM4v6WlcGiven = TRUE; break; case BSIM4v6_MOD_WLN : mod->BSIM4v6Wln = value->rValue; mod->BSIM4v6WlnGiven = TRUE; break; case BSIM4v6_MOD_WW : mod->BSIM4v6Ww = value->rValue; mod->BSIM4v6WwGiven = TRUE; break; case BSIM4v6_MOD_WWC : mod->BSIM4v6Wwc = value->rValue; mod->BSIM4v6WwcGiven = TRUE; break; case BSIM4v6_MOD_WWN : mod->BSIM4v6Wwn = value->rValue; mod->BSIM4v6WwnGiven = TRUE; break; case BSIM4v6_MOD_WWL : mod->BSIM4v6Wwl = value->rValue; mod->BSIM4v6WwlGiven = TRUE; break; case BSIM4v6_MOD_WWLC : mod->BSIM4v6Wwlc = value->rValue; mod->BSIM4v6WwlcGiven = TRUE; break; case BSIM4v6_MOD_WMIN : mod->BSIM4v6Wmin = value->rValue; mod->BSIM4v6WminGiven = TRUE; break; case BSIM4v6_MOD_WMAX : mod->BSIM4v6Wmax = value->rValue; mod->BSIM4v6WmaxGiven = TRUE; break; case BSIM4v6_MOD_NOIA : mod->BSIM4v6oxideTrapDensityA = value->rValue; mod->BSIM4v6oxideTrapDensityAGiven = TRUE; break; case BSIM4v6_MOD_NOIB : mod->BSIM4v6oxideTrapDensityB = value->rValue; mod->BSIM4v6oxideTrapDensityBGiven = TRUE; break; case BSIM4v6_MOD_NOIC : mod->BSIM4v6oxideTrapDensityC = value->rValue; mod->BSIM4v6oxideTrapDensityCGiven = TRUE; break; case BSIM4v6_MOD_EM : mod->BSIM4v6em = value->rValue; mod->BSIM4v6emGiven = TRUE; break; case BSIM4v6_MOD_EF : mod->BSIM4v6ef = value->rValue; mod->BSIM4v6efGiven = TRUE; break; case BSIM4v6_MOD_AF : mod->BSIM4v6af = value->rValue; mod->BSIM4v6afGiven = TRUE; break; case BSIM4v6_MOD_KF : mod->BSIM4v6kf = value->rValue; mod->BSIM4v6kfGiven = TRUE; break; case BSIM4v6_MOD_VGS_MAX: mod->BSIM4v6vgsMax = value->rValue; mod->BSIM4v6vgsMaxGiven = TRUE; break; case BSIM4v6_MOD_VGD_MAX: mod->BSIM4v6vgdMax = value->rValue; mod->BSIM4v6vgdMaxGiven = TRUE; break; case BSIM4v6_MOD_VGB_MAX: mod->BSIM4v6vgbMax = value->rValue; mod->BSIM4v6vgbMaxGiven = TRUE; break; case BSIM4v6_MOD_VDS_MAX: mod->BSIM4v6vdsMax = value->rValue; mod->BSIM4v6vdsMaxGiven = TRUE; break; case BSIM4v6_MOD_VBS_MAX: mod->BSIM4v6vbsMax = value->rValue; mod->BSIM4v6vbsMaxGiven = TRUE; break; case BSIM4v6_MOD_VBD_MAX: mod->BSIM4v6vbdMax = value->rValue; mod->BSIM4v6vbdMaxGiven = TRUE; break; case BSIM4v6_MOD_VGSR_MAX: mod->BSIM4v6vgsrMax = value->rValue; mod->BSIM4v6vgsrMaxGiven = TRUE; break; case BSIM4v6_MOD_VGDR_MAX: mod->BSIM4v6vgdrMax = value->rValue; mod->BSIM4v6vgdrMaxGiven = TRUE; break; case BSIM4v6_MOD_VGBR_MAX: mod->BSIM4v6vgbrMax = value->rValue; mod->BSIM4v6vgbrMaxGiven = TRUE; break; case BSIM4v6_MOD_VBSR_MAX: mod->BSIM4v6vbsrMax = value->rValue; mod->BSIM4v6vbsrMaxGiven = TRUE; break; case BSIM4v6_MOD_VBDR_MAX: mod->BSIM4v6vbdrMax = value->rValue; mod->BSIM4v6vbdrMaxGiven = TRUE; break; case BSIM4v6_MOD_NMOS : if(value->iValue) { mod->BSIM4v6type = 1; mod->BSIM4v6typeGiven = TRUE; } break; case BSIM4v6_MOD_PMOS : if(value->iValue) { mod->BSIM4v6type = - 1; mod->BSIM4v6typeGiven = TRUE; } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v6/b4v6acld.c0000644000175000017500000007177013546075722022242 0ustar carstencarsten/**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4acld.c of BSIM4.6.2. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 10/05/2001. **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4v6def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4v6acLoad( GENmodel *inModel, CKTcircuit *ckt) { BSIM4v6model *model = (BSIM4v6model*)inModel; BSIM4v6instance *here; double gjbd, gjbs, geltd, gcrg, gcrgg, gcrgd, gcrgs, gcrgb; double xcbgb, xcbdb, xcbsb, xcbbb; double xcggbr, xcgdbr, xcgsbr, xcgbbr, xcggbi, xcgdbi, xcgsbi, xcgbbi; double Cggr, Cgdr, Cgsr, Cgbr, Cggi, Cgdi, Cgsi, Cgbi; double xcddbr, xcdgbr, xcdsbr, xcdbbr, xcsdbr, xcsgbr, xcssbr, xcsbbr; double xcddbi, xcdgbi, xcdsbi, xcdbbi, xcsdbi, xcsgbi, xcssbi, xcsbbi; double xcdbdb, xcsbsb=0.0, xcgmgmb=0.0, xcgmdb=0.0, xcgmsb=0.0, xcdgmb, xcsgmb; double xcgmbb=0.0, xcbgmb; double capbd, capbs, omega; double gstot, gstotd, gstotg, gstots, gstotb, gspr; double gdtot, gdtotd, gdtotg, gdtots, gdtotb, gdpr; double gIstotg, gIstotd, gIstots, gIstotb; double gIdtotg, gIdtotd, gIdtots, gIdtotb; double gIbtotg, gIbtotd, gIbtots, gIbtotb; double gIgtotg, gIgtotd, gIgtots, gIgtotb; double cgso, cgdo, cgbo; double gbspsp, gbbdp, gbbsp, gbspg, gbspb; double gbspdp, gbdpdp, gbdpg, gbdpb, gbdpsp; double T0=0.0, T1, T2, T3; double Csg, Csd, Css; double Cdgr, Cddr, Cdsr, Cdbr, Csgr, Csdr, Cssr, Csbr; double Cdgi, Cddi, Cdsi, Cdbi, Csgi, Csdi, Cssi, Csbi; double gmr, gmi, gmbsr, gmbsi, gdsr, gdsi; double FwdSumr, RevSumr, Gmr, Gmbsr; double FwdSumi, RevSumi, Gmi, Gmbsi; struct bsim4v6SizeDependParam *pParam; double ggidld, ggidlg, ggidlb, ggislg, ggislb, ggisls; double m; omega = ckt->CKTomega; for (; model != NULL; model = BSIM4v6nextModel(model)) { for (here = BSIM4v6instances(model); here!= NULL; here = BSIM4v6nextInstance(here)) { pParam = here->pParam; capbd = here->BSIM4v6capbd; capbs = here->BSIM4v6capbs; cgso = here->BSIM4v6cgso; cgdo = here->BSIM4v6cgdo; cgbo = pParam->BSIM4v6cgbo; Csd = -(here->BSIM4v6cddb + here->BSIM4v6cgdb + here->BSIM4v6cbdb); Csg = -(here->BSIM4v6cdgb + here->BSIM4v6cggb + here->BSIM4v6cbgb); Css = -(here->BSIM4v6cdsb + here->BSIM4v6cgsb + here->BSIM4v6cbsb); if (here->BSIM4v6acnqsMod) { T0 = omega * here->BSIM4v6taunet; T1 = T0 * T0; T2 = 1.0 / (1.0 + T1); T3 = T0 * T2; gmr = here->BSIM4v6gm * T2; gmbsr = here->BSIM4v6gmbs * T2; gdsr = here->BSIM4v6gds * T2; gmi = -here->BSIM4v6gm * T3; gmbsi = -here->BSIM4v6gmbs * T3; gdsi = -here->BSIM4v6gds * T3; Cddr = here->BSIM4v6cddb * T2; Cdgr = here->BSIM4v6cdgb * T2; Cdsr = here->BSIM4v6cdsb * T2; Cdbr = -(Cddr + Cdgr + Cdsr); /* WDLiu: Cxyi mulitplied by jomega below, and actually to be of conductance */ Cddi = here->BSIM4v6cddb * T3 * omega; Cdgi = here->BSIM4v6cdgb * T3 * omega; Cdsi = here->BSIM4v6cdsb * T3 * omega; Cdbi = -(Cddi + Cdgi + Cdsi); Csdr = Csd * T2; Csgr = Csg * T2; Cssr = Css * T2; Csbr = -(Csdr + Csgr + Cssr); Csdi = Csd * T3 * omega; Csgi = Csg * T3 * omega; Cssi = Css * T3 * omega; Csbi = -(Csdi + Csgi + Cssi); Cgdr = -(Cddr + Csdr + here->BSIM4v6cbdb); Cggr = -(Cdgr + Csgr + here->BSIM4v6cbgb); Cgsr = -(Cdsr + Cssr + here->BSIM4v6cbsb); Cgbr = -(Cgdr + Cggr + Cgsr); Cgdi = -(Cddi + Csdi); Cggi = -(Cdgi + Csgi); Cgsi = -(Cdsi + Cssi); Cgbi = -(Cgdi + Cggi + Cgsi); } else /* QS */ { gmr = here->BSIM4v6gm; gmbsr = here->BSIM4v6gmbs; gdsr = here->BSIM4v6gds; gmi = gmbsi = gdsi = 0.0; Cddr = here->BSIM4v6cddb; Cdgr = here->BSIM4v6cdgb; Cdsr = here->BSIM4v6cdsb; Cdbr = -(Cddr + Cdgr + Cdsr); Cddi = Cdgi = Cdsi = Cdbi = 0.0; Csdr = Csd; Csgr = Csg; Cssr = Css; Csbr = -(Csdr + Csgr + Cssr); Csdi = Csgi = Cssi = Csbi = 0.0; Cgdr = here->BSIM4v6cgdb; Cggr = here->BSIM4v6cggb; Cgsr = here->BSIM4v6cgsb; Cgbr = -(Cgdr + Cggr + Cgsr); Cgdi = Cggi = Cgsi = Cgbi = 0.0; } if (here->BSIM4v6mode >= 0) { Gmr = gmr; Gmbsr = gmbsr; FwdSumr = Gmr + Gmbsr; RevSumr = 0.0; Gmi = gmi; Gmbsi = gmbsi; FwdSumi = Gmi + Gmbsi; RevSumi = 0.0; gbbdp = -(here->BSIM4v6gbds); gbbsp = here->BSIM4v6gbds + here->BSIM4v6gbgs + here->BSIM4v6gbbs; gbdpg = here->BSIM4v6gbgs; gbdpdp = here->BSIM4v6gbds; gbdpb = here->BSIM4v6gbbs; gbdpsp = -(gbdpg + gbdpdp + gbdpb); gbspdp = 0.0; gbspg = 0.0; gbspb = 0.0; gbspsp = 0.0; if (model->BSIM4v6igcMod) { gIstotg = here->BSIM4v6gIgsg + here->BSIM4v6gIgcsg; gIstotd = here->BSIM4v6gIgcsd; gIstots = here->BSIM4v6gIgss + here->BSIM4v6gIgcss; gIstotb = here->BSIM4v6gIgcsb; gIdtotg = here->BSIM4v6gIgdg + here->BSIM4v6gIgcdg; gIdtotd = here->BSIM4v6gIgdd + here->BSIM4v6gIgcdd; gIdtots = here->BSIM4v6gIgcds; gIdtotb = here->BSIM4v6gIgcdb; } else { gIstotg = gIstotd = gIstots = gIstotb = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = 0.0; } if (model->BSIM4v6igbMod) { gIbtotg = here->BSIM4v6gIgbg; gIbtotd = here->BSIM4v6gIgbd; gIbtots = here->BSIM4v6gIgbs; gIbtotb = here->BSIM4v6gIgbb; } else gIbtotg = gIbtotd = gIbtots = gIbtotb = 0.0; if ((model->BSIM4v6igcMod != 0) || (model->BSIM4v6igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = 0.0; if (here->BSIM4v6rgateMod == 2) T0 = *(ckt->CKTstates[0] + here->BSIM4v6vges) - *(ckt->CKTstates[0] + here->BSIM4v6vgs); else if (here->BSIM4v6rgateMod == 3) T0 = *(ckt->CKTstates[0] + here->BSIM4v6vgms) - *(ckt->CKTstates[0] + here->BSIM4v6vgs); if (here->BSIM4v6rgateMod > 1) { gcrgd = here->BSIM4v6gcrgd * T0; gcrgg = here->BSIM4v6gcrgg * T0; gcrgs = here->BSIM4v6gcrgs * T0; gcrgb = here->BSIM4v6gcrgb * T0; gcrgg -= here->BSIM4v6gcrg; gcrg = here->BSIM4v6gcrg; } else gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; if (here->BSIM4v6rgateMod == 3) { xcgmgmb = (cgdo + cgso + pParam->BSIM4v6cgbo) * omega; xcgmdb = -cgdo * omega; xcgmsb = -cgso * omega; xcgmbb = -pParam->BSIM4v6cgbo * omega; xcdgmb = xcgmdb; xcsgmb = xcgmsb; xcbgmb = xcgmbb; xcggbr = Cggr * omega; xcgdbr = Cgdr * omega; xcgsbr = Cgsr * omega; xcgbbr = -(xcggbr + xcgdbr + xcgsbr); xcdgbr = Cdgr * omega; xcsgbr = Csgr * omega; xcbgb = here->BSIM4v6cbgb * omega; } else { xcggbr = (Cggr + cgdo + cgso + pParam->BSIM4v6cgbo ) * omega; xcgdbr = (Cgdr - cgdo) * omega; xcgsbr = (Cgsr - cgso) * omega; xcgbbr = -(xcggbr + xcgdbr + xcgsbr); xcdgbr = (Cdgr - cgdo) * omega; xcsgbr = (Csgr - cgso) * omega; xcbgb = (here->BSIM4v6cbgb - pParam->BSIM4v6cgbo) * omega; xcdgmb = xcsgmb = xcbgmb = 0.0; } xcddbr = (Cddr + here->BSIM4v6capbd + cgdo) * omega; xcdsbr = Cdsr * omega; xcsdbr = Csdr * omega; xcssbr = (here->BSIM4v6capbs + cgso + Cssr) * omega; if (!here->BSIM4v6rbodyMod) { xcdbbr = -(xcdgbr + xcddbr + xcdsbr + xcdgmb); xcsbbr = -(xcsgbr + xcsdbr + xcssbr + xcsgmb); xcbdb = (here->BSIM4v6cbdb - here->BSIM4v6capbd) * omega; xcbsb = (here->BSIM4v6cbsb - here->BSIM4v6capbs) * omega; xcdbdb = 0.0; } else { xcdbbr = Cdbr * omega; xcsbbr = -(xcsgbr + xcsdbr + xcssbr + xcsgmb) + here->BSIM4v6capbs * omega; xcbdb = here->BSIM4v6cbdb * omega; xcbsb = here->BSIM4v6cbsb * omega; xcdbdb = -here->BSIM4v6capbd * omega; xcsbsb = -here->BSIM4v6capbs * omega; } xcbbb = -(xcbdb + xcbgb + xcbsb + xcbgmb); xcdgbi = Cdgi; xcsgbi = Csgi; xcddbi = Cddi; xcdsbi = Cdsi; xcsdbi = Csdi; xcssbi = Cssi; xcdbbi = Cdbi; xcsbbi = Csbi; xcggbi = Cggi; xcgdbi = Cgdi; xcgsbi = Cgsi; xcgbbi = Cgbi; } else /* Reverse mode */ { Gmr = -gmr; Gmbsr = -gmbsr; FwdSumr = 0.0; RevSumr = -(Gmr + Gmbsr); Gmi = -gmi; Gmbsi = -gmbsi; FwdSumi = 0.0; RevSumi = -(Gmi + Gmbsi); gbbsp = -(here->BSIM4v6gbds); gbbdp = here->BSIM4v6gbds + here->BSIM4v6gbgs + here->BSIM4v6gbbs; gbdpg = 0.0; gbdpsp = 0.0; gbdpb = 0.0; gbdpdp = 0.0; gbspg = here->BSIM4v6gbgs; gbspsp = here->BSIM4v6gbds; gbspb = here->BSIM4v6gbbs; gbspdp = -(gbspg + gbspsp + gbspb); if (model->BSIM4v6igcMod) { gIstotg = here->BSIM4v6gIgsg + here->BSIM4v6gIgcdg; gIstotd = here->BSIM4v6gIgcds; gIstots = here->BSIM4v6gIgss + here->BSIM4v6gIgcdd; gIstotb = here->BSIM4v6gIgcdb; gIdtotg = here->BSIM4v6gIgdg + here->BSIM4v6gIgcsg; gIdtotd = here->BSIM4v6gIgdd + here->BSIM4v6gIgcss; gIdtots = here->BSIM4v6gIgcsd; gIdtotb = here->BSIM4v6gIgcsb; } else { gIstotg = gIstotd = gIstots = gIstotb = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = 0.0; } if (model->BSIM4v6igbMod) { gIbtotg = here->BSIM4v6gIgbg; gIbtotd = here->BSIM4v6gIgbs; gIbtots = here->BSIM4v6gIgbd; gIbtotb = here->BSIM4v6gIgbb; } else gIbtotg = gIbtotd = gIbtots = gIbtotb = 0.0; if ((model->BSIM4v6igcMod != 0) || (model->BSIM4v6igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = 0.0; if (here->BSIM4v6rgateMod == 2) T0 = *(ckt->CKTstates[0] + here->BSIM4v6vges) - *(ckt->CKTstates[0] + here->BSIM4v6vgs); else if (here->BSIM4v6rgateMod == 3) T0 = *(ckt->CKTstates[0] + here->BSIM4v6vgms) - *(ckt->CKTstates[0] + here->BSIM4v6vgs); if (here->BSIM4v6rgateMod > 1) { gcrgd = here->BSIM4v6gcrgs * T0; gcrgg = here->BSIM4v6gcrgg * T0; gcrgs = here->BSIM4v6gcrgd * T0; gcrgb = here->BSIM4v6gcrgb * T0; gcrgg -= here->BSIM4v6gcrg; gcrg = here->BSIM4v6gcrg; } else gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; if (here->BSIM4v6rgateMod == 3) { xcgmgmb = (cgdo + cgso + pParam->BSIM4v6cgbo) * omega; xcgmdb = -cgdo * omega; xcgmsb = -cgso * omega; xcgmbb = -pParam->BSIM4v6cgbo * omega; xcdgmb = xcgmdb; xcsgmb = xcgmsb; xcbgmb = xcgmbb; xcggbr = Cggr * omega; xcgdbr = Cgsr * omega; xcgsbr = Cgdr * omega; xcgbbr = -(xcggbr + xcgdbr + xcgsbr); xcdgbr = Csgr * omega; xcsgbr = Cdgr * omega; xcbgb = here->BSIM4v6cbgb * omega; } else { xcggbr = (Cggr + cgdo + cgso + pParam->BSIM4v6cgbo ) * omega; xcgdbr = (Cgsr - cgdo) * omega; xcgsbr = (Cgdr - cgso) * omega; xcgbbr = -(xcggbr + xcgdbr + xcgsbr); xcdgbr = (Csgr - cgdo) * omega; xcsgbr = (Cdgr - cgso) * omega; xcbgb = (here->BSIM4v6cbgb - pParam->BSIM4v6cgbo) * omega; xcdgmb = xcsgmb = xcbgmb = 0.0; } xcddbr = (here->BSIM4v6capbd + cgdo + Cssr) * omega; xcdsbr = Csdr * omega; xcsdbr = Cdsr * omega; xcssbr = (Cddr + here->BSIM4v6capbs + cgso) * omega; if (!here->BSIM4v6rbodyMod) { xcdbbr = -(xcdgbr + xcddbr + xcdsbr + xcdgmb); xcsbbr = -(xcsgbr + xcsdbr + xcssbr + xcsgmb); xcbdb = (here->BSIM4v6cbsb - here->BSIM4v6capbd) * omega; xcbsb = (here->BSIM4v6cbdb - here->BSIM4v6capbs) * omega; xcdbdb = 0.0; } else { xcdbbr = -(xcdgbr + xcddbr + xcdsbr + xcdgmb) + here->BSIM4v6capbd * omega; xcsbbr = Cdbr * omega; xcbdb = here->BSIM4v6cbsb * omega; xcbsb = here->BSIM4v6cbdb * omega; xcdbdb = -here->BSIM4v6capbd * omega; xcsbsb = -here->BSIM4v6capbs * omega; } xcbbb = -(xcbgb + xcbdb + xcbsb + xcbgmb); xcdgbi = Csgi; xcsgbi = Cdgi; xcddbi = Cssi; xcdsbi = Csdi; xcsdbi = Cdsi; xcssbi = Cddi; xcdbbi = Csbi; xcsbbi = Cdbi; xcggbi = Cggi; xcgdbi = Cgsi; xcgsbi = Cgdi; xcgbbi = Cgbi; } if (model->BSIM4v6rdsMod == 1) { gstot = here->BSIM4v6gstot; gstotd = here->BSIM4v6gstotd; gstotg = here->BSIM4v6gstotg; gstots = here->BSIM4v6gstots - gstot; gstotb = here->BSIM4v6gstotb; gdtot = here->BSIM4v6gdtot; gdtotd = here->BSIM4v6gdtotd - gdtot; gdtotg = here->BSIM4v6gdtotg; gdtots = here->BSIM4v6gdtots; gdtotb = here->BSIM4v6gdtotb; } else { gstot = gstotd = gstotg = gstots = gstotb = 0.0; gdtot = gdtotd = gdtotg = gdtots = gdtotb = 0.0; } /* * Loading AC matrix */ m = here->BSIM4v6m; if (!model->BSIM4v6rdsMod) { gdpr = here->BSIM4v6drainConductance; gspr = here->BSIM4v6sourceConductance; } else gdpr = gspr = 0.0; if (!here->BSIM4v6rbodyMod) { gjbd = here->BSIM4v6gbd; gjbs = here->BSIM4v6gbs; } else gjbd = gjbs = 0.0; geltd = here->BSIM4v6grgeltd; if (here->BSIM4v6rgateMod == 1) { *(here->BSIM4v6GEgePtr) += m * geltd; *(here->BSIM4v6GPgePtr) -= m * geltd; *(here->BSIM4v6GEgpPtr) -= m * geltd; *(here->BSIM4v6GPgpPtr +1) += m * xcggbr; *(here->BSIM4v6GPgpPtr) += m * (geltd + xcggbi + gIgtotg); *(here->BSIM4v6GPdpPtr +1) += m * xcgdbr; *(here->BSIM4v6GPdpPtr) += m * (xcgdbi + gIgtotd); *(here->BSIM4v6GPspPtr +1) += m * xcgsbr; *(here->BSIM4v6GPspPtr) += m * (xcgsbi + gIgtots); *(here->BSIM4v6GPbpPtr +1) += m * xcgbbr; *(here->BSIM4v6GPbpPtr) += m * (xcgbbi + gIgtotb); } /* WDLiu: gcrg already subtracted from all gcrgg below */ else if (here->BSIM4v6rgateMod == 2) { *(here->BSIM4v6GEgePtr) += m * gcrg; *(here->BSIM4v6GEgpPtr) += m * gcrgg; *(here->BSIM4v6GEdpPtr) += m * gcrgd; *(here->BSIM4v6GEspPtr) += m * gcrgs; *(here->BSIM4v6GEbpPtr) += m * gcrgb; *(here->BSIM4v6GPgePtr) -= m * gcrg; *(here->BSIM4v6GPgpPtr +1) += m * xcggbr; *(here->BSIM4v6GPgpPtr) -= m * (gcrgg - xcggbi - gIgtotg); *(here->BSIM4v6GPdpPtr +1) += m * xcgdbr; *(here->BSIM4v6GPdpPtr) -= m * (gcrgd - xcgdbi - gIgtotd); *(here->BSIM4v6GPspPtr +1) += m * xcgsbr; *(here->BSIM4v6GPspPtr) -= m * (gcrgs - xcgsbi - gIgtots); *(here->BSIM4v6GPbpPtr +1) += m * xcgbbr; *(here->BSIM4v6GPbpPtr) -= m * (gcrgb - xcgbbi - gIgtotb); } else if (here->BSIM4v6rgateMod == 3) { *(here->BSIM4v6GEgePtr) += m * geltd; *(here->BSIM4v6GEgmPtr) -= m * geltd; *(here->BSIM4v6GMgePtr) -= m * geltd; *(here->BSIM4v6GMgmPtr) += m * (geltd + gcrg); *(here->BSIM4v6GMgmPtr +1) += m * xcgmgmb; *(here->BSIM4v6GMdpPtr) += m * gcrgd; *(here->BSIM4v6GMdpPtr +1) += m * xcgmdb; *(here->BSIM4v6GMgpPtr) += m * gcrgg; *(here->BSIM4v6GMspPtr) += m * gcrgs; *(here->BSIM4v6GMspPtr +1) += m * xcgmsb; *(here->BSIM4v6GMbpPtr) += m * gcrgb; *(here->BSIM4v6GMbpPtr +1) += m * xcgmbb; *(here->BSIM4v6DPgmPtr +1) += m * xcdgmb; *(here->BSIM4v6GPgmPtr) -= m * gcrg; *(here->BSIM4v6SPgmPtr +1) += m * xcsgmb; *(here->BSIM4v6BPgmPtr +1) += m * xcbgmb; *(here->BSIM4v6GPgpPtr) -= m * (gcrgg - xcggbi - gIgtotg); *(here->BSIM4v6GPgpPtr +1) += m * xcggbr; *(here->BSIM4v6GPdpPtr) -= m * (gcrgd - xcgdbi - gIgtotd); *(here->BSIM4v6GPdpPtr +1) += m * xcgdbr; *(here->BSIM4v6GPspPtr) -= m * (gcrgs - xcgsbi - gIgtots); *(here->BSIM4v6GPspPtr +1) += m * xcgsbr; *(here->BSIM4v6GPbpPtr) -= m * (gcrgb - xcgbbi - gIgtotb); *(here->BSIM4v6GPbpPtr +1) += m * xcgbbr; } else { *(here->BSIM4v6GPgpPtr +1) += m * xcggbr; *(here->BSIM4v6GPgpPtr) += m * (xcggbi + gIgtotg); *(here->BSIM4v6GPdpPtr +1) += m * xcgdbr; *(here->BSIM4v6GPdpPtr) += m * (xcgdbi + gIgtotd); *(here->BSIM4v6GPspPtr +1) += m * xcgsbr; *(here->BSIM4v6GPspPtr) += m * (xcgsbi + gIgtots); *(here->BSIM4v6GPbpPtr +1) += m * xcgbbr; *(here->BSIM4v6GPbpPtr) += m * (xcgbbi + gIgtotb); } if (model->BSIM4v6rdsMod) { (*(here->BSIM4v6DgpPtr) += m * gdtotg); (*(here->BSIM4v6DspPtr) += m * gdtots); (*(here->BSIM4v6DbpPtr) += m * gdtotb); (*(here->BSIM4v6SdpPtr) += m * gstotd); (*(here->BSIM4v6SgpPtr) += m * gstotg); (*(here->BSIM4v6SbpPtr) += m * gstotb); } *(here->BSIM4v6DPdpPtr +1) += m * (xcddbr + gdsi + RevSumi); *(here->BSIM4v6DPdpPtr) += m * (gdpr + xcddbi + gdsr + here->BSIM4v6gbd - gdtotd + RevSumr + gbdpdp - gIdtotd); *(here->BSIM4v6DPdPtr) -= m * (gdpr + gdtot); *(here->BSIM4v6DPgpPtr +1) += m * (xcdgbr + Gmi); *(here->BSIM4v6DPgpPtr) += m * (Gmr + xcdgbi - gdtotg + gbdpg - gIdtotg); *(here->BSIM4v6DPspPtr +1) += m * (xcdsbr - gdsi - FwdSumi); *(here->BSIM4v6DPspPtr) -= m * (gdsr - xcdsbi + FwdSumr + gdtots - gbdpsp + gIdtots); *(here->BSIM4v6DPbpPtr +1) += m * (xcdbbr + Gmbsi); *(here->BSIM4v6DPbpPtr) -= m * (gjbd + gdtotb - xcdbbi - Gmbsr - gbdpb + gIdtotb); *(here->BSIM4v6DdpPtr) -= m * (gdpr - gdtotd); *(here->BSIM4v6DdPtr) += m * (gdpr + gdtot); *(here->BSIM4v6SPdpPtr +1) += m * (xcsdbr - gdsi - RevSumi); *(here->BSIM4v6SPdpPtr) -= m * (gdsr - xcsdbi + gstotd + RevSumr - gbspdp + gIstotd); *(here->BSIM4v6SPgpPtr +1) += m * (xcsgbr - Gmi); *(here->BSIM4v6SPgpPtr) -= m * (Gmr - xcsgbi + gstotg - gbspg + gIstotg); *(here->BSIM4v6SPspPtr +1) += m * (xcssbr + gdsi + FwdSumi); *(here->BSIM4v6SPspPtr) += m * (gspr + xcssbi + gdsr + here->BSIM4v6gbs - gstots + FwdSumr + gbspsp - gIstots); *(here->BSIM4v6SPsPtr) -= m * (gspr + gstot); *(here->BSIM4v6SPbpPtr +1) += m * (xcsbbr - Gmbsi); *(here->BSIM4v6SPbpPtr) -= m * (gjbs + gstotb - xcsbbi + Gmbsr - gbspb + gIstotb); *(here->BSIM4v6SspPtr) -= m * (gspr - gstots); *(here->BSIM4v6SsPtr) += m * (gspr + gstot); *(here->BSIM4v6BPdpPtr +1) += m * xcbdb; *(here->BSIM4v6BPdpPtr) -= m * (gjbd - gbbdp + gIbtotd); *(here->BSIM4v6BPgpPtr +1) += m * xcbgb; *(here->BSIM4v6BPgpPtr) -= m * (here->BSIM4v6gbgs + gIbtotg); *(here->BSIM4v6BPspPtr +1) += m * xcbsb; *(here->BSIM4v6BPspPtr) -= m * (gjbs - gbbsp + gIbtots); *(here->BSIM4v6BPbpPtr +1) += m * xcbbb; *(here->BSIM4v6BPbpPtr) += m * (gjbd + gjbs - here->BSIM4v6gbbs - gIbtotb); ggidld = here->BSIM4v6ggidld; ggidlg = here->BSIM4v6ggidlg; ggidlb = here->BSIM4v6ggidlb; ggislg = here->BSIM4v6ggislg; ggisls = here->BSIM4v6ggisls; ggislb = here->BSIM4v6ggislb; /* stamp gidl */ (*(here->BSIM4v6DPdpPtr) += m * ggidld); (*(here->BSIM4v6DPgpPtr) += m * ggidlg); (*(here->BSIM4v6DPspPtr) -= m * ((ggidlg + ggidld) + ggidlb)); (*(here->BSIM4v6DPbpPtr) += m * ggidlb); (*(here->BSIM4v6BPdpPtr) -= m * ggidld); (*(here->BSIM4v6BPgpPtr) -= m * ggidlg); (*(here->BSIM4v6BPspPtr) += m * ((ggidlg + ggidld) + ggidlb)); (*(here->BSIM4v6BPbpPtr) -= m * ggidlb); /* stamp gisl */ (*(here->BSIM4v6SPdpPtr) -= m * ((ggisls + ggislg) + ggislb)); (*(here->BSIM4v6SPgpPtr) += m * ggislg); (*(here->BSIM4v6SPspPtr) += m * ggisls); (*(here->BSIM4v6SPbpPtr) += m * ggislb); (*(here->BSIM4v6BPdpPtr) += m * ((ggislg + ggisls) + ggislb)); (*(here->BSIM4v6BPgpPtr) -= m * ggislg); (*(here->BSIM4v6BPspPtr) -= m * ggisls); (*(here->BSIM4v6BPbpPtr) -= m * ggislb); if (here->BSIM4v6rbodyMod) { (*(here->BSIM4v6DPdbPtr +1) += m * xcdbdb); (*(here->BSIM4v6DPdbPtr) -= m * here->BSIM4v6gbd); (*(here->BSIM4v6SPsbPtr +1) += m * xcsbsb); (*(here->BSIM4v6SPsbPtr) -= m * here->BSIM4v6gbs); (*(here->BSIM4v6DBdpPtr +1) += m * xcdbdb); (*(here->BSIM4v6DBdpPtr) -= m * here->BSIM4v6gbd); (*(here->BSIM4v6DBdbPtr +1) -= m * xcdbdb); (*(here->BSIM4v6DBdbPtr) += m * (here->BSIM4v6gbd + here->BSIM4v6grbpd + here->BSIM4v6grbdb)); (*(here->BSIM4v6DBbpPtr) -= m * here->BSIM4v6grbpd); (*(here->BSIM4v6DBbPtr) -= m * here->BSIM4v6grbdb); (*(here->BSIM4v6BPdbPtr) -= m * here->BSIM4v6grbpd); (*(here->BSIM4v6BPbPtr) -= m * here->BSIM4v6grbpb); (*(here->BSIM4v6BPsbPtr) -= m * here->BSIM4v6grbps); (*(here->BSIM4v6BPbpPtr) += m * (here->BSIM4v6grbpd + here->BSIM4v6grbps + here->BSIM4v6grbpb)); /* WDLiu: (-here->BSIM4v6gbbs) already added to BPbpPtr */ (*(here->BSIM4v6SBspPtr +1) += m * xcsbsb); (*(here->BSIM4v6SBspPtr) -= m * here->BSIM4v6gbs); (*(here->BSIM4v6SBbpPtr) -= m * here->BSIM4v6grbps); (*(here->BSIM4v6SBbPtr) -= m * here->BSIM4v6grbsb); (*(here->BSIM4v6SBsbPtr +1) -= m * xcsbsb); (*(here->BSIM4v6SBsbPtr) += m * (here->BSIM4v6gbs + here->BSIM4v6grbps + here->BSIM4v6grbsb)); (*(here->BSIM4v6BdbPtr) -= m * here->BSIM4v6grbdb); (*(here->BSIM4v6BbpPtr) -= m * here->BSIM4v6grbpb); (*(here->BSIM4v6BsbPtr) -= m * here->BSIM4v6grbsb); (*(here->BSIM4v6BbPtr) += m * (here->BSIM4v6grbsb + here->BSIM4v6grbdb + here->BSIM4v6grbpb)); } /* * WDLiu: The internal charge node generated for transient NQS is not needed for * AC NQS. The following is not doing a real job, but we have to keep it; * otherwise a singular AC NQS matrix may occur if the transient NQS is on. * The charge node is isolated from the instance. */ if (here->BSIM4v6trnqsMod) { (*(here->BSIM4v6QqPtr) += m * 1.0); (*(here->BSIM4v6QgpPtr) += 0.0); (*(here->BSIM4v6QdpPtr) += 0.0); (*(here->BSIM4v6QspPtr) += 0.0); (*(here->BSIM4v6QbpPtr) += 0.0); (*(here->BSIM4v6DPqPtr) += 0.0); (*(here->BSIM4v6SPqPtr) += 0.0); (*(here->BSIM4v6GPqPtr) += 0.0); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v6/bsim4v6init.c0000644000175000017500000000335513546075722023005 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "bsim4v6itf.h" #include "bsim4v6ext.h" #include "bsim4v6init.h" SPICEdev BSIM4v6info = { .DEVpublic = { .name = "BSIM4v6", .description = "Berkeley Short Channel IGFET Model-4", .terms = &BSIM4v6nSize, .numNames = &BSIM4v6nSize, .termNames = BSIM4v6names, .numInstanceParms = &BSIM4v6pTSize, .instanceParms = BSIM4v6pTable, .numModelParms = &BSIM4v6mPTSize, .modelParms = BSIM4v6mPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = BSIM4v6param, .DEVmodParam = BSIM4v6mParam, .DEVload = BSIM4v6load, .DEVsetup = BSIM4v6setup, .DEVunsetup = BSIM4v6unsetup, .DEVpzSetup = BSIM4v6setup, .DEVtemperature = BSIM4v6temp, .DEVtrunc = BSIM4v6trunc, .DEVfindBranch = NULL, .DEVacLoad = BSIM4v6acLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = BSIM4v6mDelete, .DEVdelete = NULL, .DEVsetic = BSIM4v6getic, .DEVask = BSIM4v6ask, .DEVmodAsk = BSIM4v6mAsk, .DEVpzLoad = BSIM4v6pzLoad, .DEVconvTest = BSIM4v6convTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = BSIM4v6noise, .DEVsoaCheck = BSIM4v6soaCheck, .DEVinstSize = &BSIM4v6iSize, .DEVmodSize = &BSIM4v6mSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_bsim4v6_info(void) { return &BSIM4v6info; } tmpk8ny_4pz/src/spicelib/devices/bsim4v6/b4v6check.c0000644000175000017500000011003213546075722022375 0ustar carstencarsten/**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008 ****/ /**** BSIM4.6.5 Update ngspice 09/22/2009 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4check.c of BSIM4.6.1. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, 07/29/2005. * Modified by Mohan Dunga, 12/13/2006 * Modified by Mohan Dunga, Wenwei Yang, 05/18/2007. * Modified by Wenwei Yang, 07/31/2008 . **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4v6def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" int BSIM4v6checkModel( BSIM4v6model *model, BSIM4v6instance *here, CKTcircuit *ckt) { struct bsim4v6SizeDependParam *pParam; int Fatal_Flag = 0; FILE *fplog; if ((fplog = fopen("bsim4v6.out", "w")) != NULL) { pParam = here->pParam; fprintf(fplog, "BSIM4v6: Berkeley Short Channel IGFET Model-4\n"); fprintf(fplog, "Developed by Xuemei (Jane) Xi, Mohan Dunga, Prof. Ali Niknejad and Prof. Chenming Hu in 2003.\n"); fprintf(fplog, "\n"); fprintf(fplog, "++++++++++ BSIM4v6 PARAMETER CHECKING BELOW ++++++++++\n"); if (strcmp(model->BSIM4v6version, "4.6.5") != 0) { fprintf(fplog, "Warning: This model is BSIM4.6.5; you specified a wrong version number.\n"); printf("Warning: This model is BSIM4.6.5; you specified a wrong version number.\n"); } fprintf(fplog, "Model = %s\n", model->BSIM4v6modName); if ((here->BSIM4v6rgateMod == 2) || (here->BSIM4v6rgateMod == 3)) { if ((here->BSIM4v6trnqsMod == 1) || (here->BSIM4v6acnqsMod == 1)) { fprintf(fplog, "Warning: You've selected both Rg and charge deficit NQS; select one only.\n"); printf("Warning: You've selected both Rg and charge deficit NQS; select one only.\n"); } } if (model->BSIM4v6toxe <= 0.0) { fprintf(fplog, "Fatal: Toxe = %g is not positive.\n", model->BSIM4v6toxe); printf("Fatal: Toxe = %g is not positive.\n", model->BSIM4v6toxe); Fatal_Flag = 1; } if (model->BSIM4v6toxp <= 0.0) { fprintf(fplog, "Fatal: Toxp = %g is not positive.\n", model->BSIM4v6toxp); printf("Fatal: Toxp = %g is not positive.\n", model->BSIM4v6toxp); Fatal_Flag = 1; } if (model->BSIM4v6eot <= 0.0) { fprintf(fplog, "Fatal: EOT = %g is not positive.\n", model->BSIM4v6eot); printf("Fatal: EOT = %g is not positive.\n", model->BSIM4v6eot); Fatal_Flag = 1; } if (model->BSIM4v6epsrgate < 0.0) { fprintf(fplog, "Fatal: Epsrgate = %g is not positive.\n", model->BSIM4v6epsrgate); printf("Fatal: Epsrgate = %g is not positive.\n", model->BSIM4v6epsrgate); Fatal_Flag = 1; } if (model->BSIM4v6epsrsub < 0.0) { fprintf(fplog, "Fatal: Epsrsub = %g is not positive.\n", model->BSIM4v6epsrsub); printf("Fatal: Epsrsub = %g is not positive.\n", model->BSIM4v6epsrsub); Fatal_Flag = 1; } if (model->BSIM4v6easub < 0.0) { fprintf(fplog, "Fatal: Easub = %g is not positive.\n", model->BSIM4v6easub); printf("Fatal: Easub = %g is not positive.\n", model->BSIM4v6easub); Fatal_Flag = 1; } if (model->BSIM4v6ni0sub <= 0.0) { fprintf(fplog, "Fatal: Ni0sub = %g is not positive.\n", model->BSIM4v6ni0sub); printf("Fatal: Easub = %g is not positive.\n", model->BSIM4v6ni0sub); Fatal_Flag = 1; } if (model->BSIM4v6toxm <= 0.0) { fprintf(fplog, "Fatal: Toxm = %g is not positive.\n", model->BSIM4v6toxm); printf("Fatal: Toxm = %g is not positive.\n", model->BSIM4v6toxm); Fatal_Flag = 1; } if (model->BSIM4v6toxref <= 0.0) { fprintf(fplog, "Fatal: Toxref = %g is not positive.\n", model->BSIM4v6toxref); printf("Fatal: Toxref = %g is not positive.\n", model->BSIM4v6toxref); Fatal_Flag = 1; } if (pParam->BSIM4v6lpe0 < -pParam->BSIM4v6leff) { fprintf(fplog, "Fatal: Lpe0 = %g is less than -Leff.\n", pParam->BSIM4v6lpe0); printf("Fatal: Lpe0 = %g is less than -Leff.\n", pParam->BSIM4v6lpe0); Fatal_Flag = 1; } if (model->BSIM4v6lintnoi > pParam->BSIM4v6leff/2) { fprintf(fplog, "Fatal: Lintnoi = %g is too large - Leff for noise is negative.\n", model->BSIM4v6lintnoi); printf("Fatal: Lintnoi = %g is too large - Leff for noise is negative.\n", model->BSIM4v6lintnoi); Fatal_Flag = 1; } if (pParam->BSIM4v6lpeb < -pParam->BSIM4v6leff) { fprintf(fplog, "Fatal: Lpeb = %g is less than -Leff.\n", pParam->BSIM4v6lpeb); printf("Fatal: Lpeb = %g is less than -Leff.\n", pParam->BSIM4v6lpeb); Fatal_Flag = 1; } if (pParam->BSIM4v6ndep <= 0.0) { fprintf(fplog, "Fatal: Ndep = %g is not positive.\n", pParam->BSIM4v6ndep); printf("Fatal: Ndep = %g is not positive.\n", pParam->BSIM4v6ndep); Fatal_Flag = 1; } if (pParam->BSIM4v6phi <= 0.0) { fprintf(fplog, "Fatal: Phi = %g is not positive. Please check Phin and Ndep\n", pParam->BSIM4v6phi); fprintf(fplog, " Phin = %g Ndep = %g \n", pParam->BSIM4v6phin, pParam->BSIM4v6ndep); printf("Fatal: Phi = %g is not positive. Please check Phin and Ndep\n", pParam->BSIM4v6phi); printf(" Phin = %g Ndep = %g \n", pParam->BSIM4v6phin, pParam->BSIM4v6ndep); Fatal_Flag = 1; } if (pParam->BSIM4v6nsub <= 0.0) { fprintf(fplog, "Fatal: Nsub = %g is not positive.\n", pParam->BSIM4v6nsub); printf("Fatal: Nsub = %g is not positive.\n", pParam->BSIM4v6nsub); Fatal_Flag = 1; } if (pParam->BSIM4v6ngate < 0.0) { fprintf(fplog, "Fatal: Ngate = %g is not positive.\n", pParam->BSIM4v6ngate); printf("Fatal: Ngate = %g Ngate is not positive.\n", pParam->BSIM4v6ngate); Fatal_Flag = 1; } if (pParam->BSIM4v6ngate > 1.e25) { fprintf(fplog, "Fatal: Ngate = %g is too high.\n", pParam->BSIM4v6ngate); printf("Fatal: Ngate = %g Ngate is too high\n", pParam->BSIM4v6ngate); Fatal_Flag = 1; } if (pParam->BSIM4v6xj <= 0.0) { fprintf(fplog, "Fatal: Xj = %g is not positive.\n", pParam->BSIM4v6xj); printf("Fatal: Xj = %g is not positive.\n", pParam->BSIM4v6xj); Fatal_Flag = 1; } if (pParam->BSIM4v6dvt1 < 0.0) { fprintf(fplog, "Fatal: Dvt1 = %g is negative.\n", pParam->BSIM4v6dvt1); printf("Fatal: Dvt1 = %g is negative.\n", pParam->BSIM4v6dvt1); Fatal_Flag = 1; } if (pParam->BSIM4v6dvt1w < 0.0) { fprintf(fplog, "Fatal: Dvt1w = %g is negative.\n", pParam->BSIM4v6dvt1w); printf("Fatal: Dvt1w = %g is negative.\n", pParam->BSIM4v6dvt1w); Fatal_Flag = 1; } if (pParam->BSIM4v6w0 == -pParam->BSIM4v6weff) { fprintf(fplog, "Fatal: (W0 + Weff) = 0 causing divided-by-zero.\n"); printf("Fatal: (W0 + Weff) = 0 causing divided-by-zero.\n"); Fatal_Flag = 1; } if (pParam->BSIM4v6dsub < 0.0) { fprintf(fplog, "Fatal: Dsub = %g is negative.\n", pParam->BSIM4v6dsub); printf("Fatal: Dsub = %g is negative.\n", pParam->BSIM4v6dsub); Fatal_Flag = 1; } if (pParam->BSIM4v6b1 == -pParam->BSIM4v6weff) { fprintf(fplog, "Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); printf("Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); Fatal_Flag = 1; } if (here->BSIM4v6u0temp <= 0.0) { fprintf(fplog, "Fatal: u0 at current temperature = %g is not positive.\n", here->BSIM4v6u0temp); printf("Fatal: u0 at current temperature = %g is not positive.\n", here->BSIM4v6u0temp); Fatal_Flag = 1; } if (pParam->BSIM4v6delta < 0.0) { fprintf(fplog, "Fatal: Delta = %g is less than zero.\n", pParam->BSIM4v6delta); printf("Fatal: Delta = %g is less than zero.\n", pParam->BSIM4v6delta); Fatal_Flag = 1; } if (here->BSIM4v6vsattemp <= 0.0) { fprintf(fplog, "Fatal: Vsat at current temperature = %g is not positive.\n", here->BSIM4v6vsattemp); printf("Fatal: Vsat at current temperature = %g is not positive.\n", here->BSIM4v6vsattemp); Fatal_Flag = 1; } if (pParam->BSIM4v6pclm <= 0.0) { fprintf(fplog, "Fatal: Pclm = %g is not positive.\n", pParam->BSIM4v6pclm); printf("Fatal: Pclm = %g is not positive.\n", pParam->BSIM4v6pclm); Fatal_Flag = 1; } if (pParam->BSIM4v6drout < 0.0) { fprintf(fplog, "Fatal: Drout = %g is negative.\n", pParam->BSIM4v6drout); printf("Fatal: Drout = %g is negative.\n", pParam->BSIM4v6drout); Fatal_Flag = 1; } if (here->BSIM4v6m < 1.0) { fprintf(fplog, "Fatal: Number of multiplier = %g is smaller than one.\n", here->BSIM4v6m); printf("Fatal: Number of multiplier = %g is smaller than one.\n", here->BSIM4v6m); Fatal_Flag = 1; } if (here->BSIM4v6nf < 1.0) { fprintf(fplog, "Fatal: Number of finger = %g is smaller than one.\n", here->BSIM4v6nf); printf("Fatal: Number of finger = %g is smaller than one.\n", here->BSIM4v6nf); Fatal_Flag = 1; } if((here->BSIM4v6sa > 0.0) && (here->BSIM4v6sb > 0.0) && ((here->BSIM4v6nf == 1.0) || ((here->BSIM4v6nf > 1.0) && (here->BSIM4v6sd > 0.0))) ) { if (model->BSIM4v6saref <= 0.0) { fprintf(fplog, "Fatal: SAref = %g is not positive.\n",model->BSIM4v6saref); printf("Fatal: SAref = %g is not positive.\n",model->BSIM4v6saref); Fatal_Flag = 1; } if (model->BSIM4v6sbref <= 0.0) { fprintf(fplog, "Fatal: SBref = %g is not positive.\n",model->BSIM4v6sbref); printf("Fatal: SBref = %g is not positive.\n",model->BSIM4v6sbref); Fatal_Flag = 1; } } if ((here->BSIM4v6l + model->BSIM4v6xl) <= model->BSIM4v6xgl) { fprintf(fplog, "Fatal: The parameter xgl must be smaller than Ldrawn+XL.\n"); printf("Fatal: The parameter xgl must be smaller than Ldrawn+XL.\n"); Fatal_Flag = 1; } if (here->BSIM4v6ngcon < 1.0) { fprintf(fplog, "Fatal: The parameter ngcon cannot be smaller than one.\n"); printf("Fatal: The parameter ngcon cannot be smaller than one.\n"); Fatal_Flag = 1; } if ((here->BSIM4v6ngcon != 1.0) && (here->BSIM4v6ngcon != 2.0)) { here->BSIM4v6ngcon = 1.0; fprintf(fplog, "Warning: Ngcon must be equal to one or two; reset to 1.0.\n"); printf("Warning: Ngcon must be equal to one or two; reset to 1.0.\n"); } if (model->BSIM4v6gbmin < 1.0e-20) { fprintf(fplog, "Warning: Gbmin = %g is too small.\n", model->BSIM4v6gbmin); printf("Warning: Gbmin = %g is too small.\n", model->BSIM4v6gbmin); } /* Check saturation parameters */ if (pParam->BSIM4v6fprout < 0.0) { fprintf(fplog, "Fatal: fprout = %g is negative.\n", pParam->BSIM4v6fprout); printf("Fatal: fprout = %g is negative.\n", pParam->BSIM4v6fprout); Fatal_Flag = 1; } if (pParam->BSIM4v6pdits < 0.0) { fprintf(fplog, "Fatal: pdits = %g is negative.\n", pParam->BSIM4v6pdits); printf("Fatal: pdits = %g is negative.\n", pParam->BSIM4v6pdits); Fatal_Flag = 1; } if (model->BSIM4v6pditsl < 0.0) { fprintf(fplog, "Fatal: pditsl = %g is negative.\n", model->BSIM4v6pditsl); printf("Fatal: pditsl = %g is negative.\n", model->BSIM4v6pditsl); Fatal_Flag = 1; } /* Check gate current parameters */ if (model->BSIM4v6igbMod) { if (pParam->BSIM4v6nigbinv <= 0.0) { fprintf(fplog, "Fatal: nigbinv = %g is non-positive.\n", pParam->BSIM4v6nigbinv); printf("Fatal: nigbinv = %g is non-positive.\n", pParam->BSIM4v6nigbinv); Fatal_Flag = 1; } if (pParam->BSIM4v6nigbacc <= 0.0) { fprintf(fplog, "Fatal: nigbacc = %g is non-positive.\n", pParam->BSIM4v6nigbacc); printf("Fatal: nigbacc = %g is non-positive.\n", pParam->BSIM4v6nigbacc); Fatal_Flag = 1; } } if (model->BSIM4v6igcMod) { if (pParam->BSIM4v6nigc <= 0.0) { fprintf(fplog, "Fatal: nigc = %g is non-positive.\n", pParam->BSIM4v6nigc); printf("Fatal: nigc = %g is non-positive.\n", pParam->BSIM4v6nigc); Fatal_Flag = 1; } if (pParam->BSIM4v6poxedge <= 0.0) { fprintf(fplog, "Fatal: poxedge = %g is non-positive.\n", pParam->BSIM4v6poxedge); printf("Fatal: poxedge = %g is non-positive.\n", pParam->BSIM4v6poxedge); Fatal_Flag = 1; } if (pParam->BSIM4v6pigcd <= 0.0) { fprintf(fplog, "Fatal: pigcd = %g is non-positive.\n", pParam->BSIM4v6pigcd); printf("Fatal: pigcd = %g is non-positive.\n", pParam->BSIM4v6pigcd); Fatal_Flag = 1; } } /* Check capacitance parameters */ if (pParam->BSIM4v6clc < 0.0) { fprintf(fplog, "Fatal: Clc = %g is negative.\n", pParam->BSIM4v6clc); printf("Fatal: Clc = %g is negative.\n", pParam->BSIM4v6clc); Fatal_Flag = 1; } /* Check overlap capacitance parameters */ if (pParam->BSIM4v6ckappas < 0.02) { fprintf(fplog, "Warning: ckappas = %g is too small. Set to 0.02\n", pParam->BSIM4v6ckappas); printf("Warning: ckappas = %g is too small.\n", pParam->BSIM4v6ckappas); pParam->BSIM4v6ckappas = 0.02; } if (pParam->BSIM4v6ckappad < 0.02) { fprintf(fplog, "Warning: ckappad = %g is too small. Set to 0.02\n", pParam->BSIM4v6ckappad); printf("Warning: ckappad = %g is too small.\n", pParam->BSIM4v6ckappad); pParam->BSIM4v6ckappad = 0.02; } if (model->BSIM4v6vtss < 0.0) { fprintf(fplog, "Fatal: Vtss = %g is negative.\n", model->BSIM4v6vtss); printf("Fatal: Vtss = %g is negative.\n", model->BSIM4v6vtss); Fatal_Flag = 1; } if (model->BSIM4v6vtsd < 0.0) { fprintf(fplog, "Fatal: Vtsd = %g is negative.\n", model->BSIM4v6vtsd); printf("Fatal: Vtsd = %g is negative.\n", model->BSIM4v6vtsd); Fatal_Flag = 1; } if (model->BSIM4v6vtssws < 0.0) { fprintf(fplog, "Fatal: Vtssws = %g is negative.\n", model->BSIM4v6vtssws); printf("Fatal: Vtssws = %g is negative.\n", model->BSIM4v6vtssws); Fatal_Flag = 1; } if (model->BSIM4v6vtsswd < 0.0) { fprintf(fplog, "Fatal: Vtsswd = %g is negative.\n", model->BSIM4v6vtsswd); printf("Fatal: Vtsswd = %g is negative.\n", model->BSIM4v6vtsswd); Fatal_Flag = 1; } if (model->BSIM4v6vtsswgs < 0.0) { fprintf(fplog, "Fatal: Vtsswgs = %g is negative.\n", model->BSIM4v6vtsswgs); printf("Fatal: Vtsswgs = %g is negative.\n", model->BSIM4v6vtsswgs); Fatal_Flag = 1; } if (model->BSIM4v6vtsswgd < 0.0) { fprintf(fplog, "Fatal: Vtsswgd = %g is negative.\n", model->BSIM4v6vtsswgd); printf("Fatal: Vtsswgd = %g is negative.\n", model->BSIM4v6vtsswgd); Fatal_Flag = 1; } if (model->BSIM4v6paramChk ==1) { /* Check L and W parameters */ if (pParam->BSIM4v6leff <= 1.0e-9) { fprintf(fplog, "Warning: Leff = %g <= 1.0e-9. Recommended Leff >= 1e-8 \n", pParam->BSIM4v6leff); printf("Warning: Leff = %g <= 1.0e-9. Recommended Leff >= 1e-8 \n", pParam->BSIM4v6leff); } if (pParam->BSIM4v6leffCV <= 1.0e-9) { fprintf(fplog, "Warning: Leff for CV = %g <= 1.0e-9. Recommended LeffCV >=1e-8 \n", pParam->BSIM4v6leffCV); printf("Warning: Leff for CV = %g <= 1.0e-9. Recommended LeffCV >=1e-8 \n", pParam->BSIM4v6leffCV); } if (pParam->BSIM4v6weff <= 1.0e-9) { fprintf(fplog, "Warning: Weff = %g <= 1.0e-9. Recommended Weff >=1e-7 \n", pParam->BSIM4v6weff); printf("Warning: Weff = %g <= 1.0e-9. Recommended Weff >=1e-7 \n", pParam->BSIM4v6weff); } if (pParam->BSIM4v6weffCV <= 1.0e-9) { fprintf(fplog, "Warning: Weff for CV = %g <= 1.0e-9. Recommended WeffCV >= 1e-7 \n", pParam->BSIM4v6weffCV); printf("Warning: Weff for CV = %g <= 1.0e-9. Recommended WeffCV >= 1e-7 \n", pParam->BSIM4v6weffCV); } /* Check threshold voltage parameters */ if (model->BSIM4v6toxe < 1.0e-10) { fprintf(fplog, "Warning: Toxe = %g is less than 1A. Recommended Toxe >= 5A\n", model->BSIM4v6toxe); printf("Warning: Toxe = %g is less than 1A. Recommended Toxe >= 5A\n", model->BSIM4v6toxe); } if (model->BSIM4v6toxp < 1.0e-10) { fprintf(fplog, "Warning: Toxp = %g is less than 1A. Recommended Toxp >= 5A\n", model->BSIM4v6toxp); printf("Warning: Toxp = %g is less than 1A. Recommended Toxp >= 5A\n", model->BSIM4v6toxp); } if (model->BSIM4v6toxm < 1.0e-10) { fprintf(fplog, "Warning: Toxm = %g is less than 1A. Recommended Toxm >= 5A\n", model->BSIM4v6toxm); printf("Warning: Toxm = %g is less than 1A. Recommended Toxm >= 5A\n", model->BSIM4v6toxm); } if (pParam->BSIM4v6ndep <= 1.0e12) { fprintf(fplog, "Warning: Ndep = %g may be too small.\n", pParam->BSIM4v6ndep); printf("Warning: Ndep = %g may be too small.\n", pParam->BSIM4v6ndep); } else if (pParam->BSIM4v6ndep >= 1.0e21) { fprintf(fplog, "Warning: Ndep = %g may be too large.\n", pParam->BSIM4v6ndep); printf("Warning: Ndep = %g may be too large.\n", pParam->BSIM4v6ndep); } if (pParam->BSIM4v6nsub <= 1.0e14) { fprintf(fplog, "Warning: Nsub = %g may be too small.\n", pParam->BSIM4v6nsub); printf("Warning: Nsub = %g may be too small.\n", pParam->BSIM4v6nsub); } else if (pParam->BSIM4v6nsub >= 1.0e21) { fprintf(fplog, "Warning: Nsub = %g may be too large.\n", pParam->BSIM4v6nsub); printf("Warning: Nsub = %g may be too large.\n", pParam->BSIM4v6nsub); } if ((pParam->BSIM4v6ngate > 0.0) && (pParam->BSIM4v6ngate <= 1.e18)) { fprintf(fplog, "Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->BSIM4v6ngate); printf("Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->BSIM4v6ngate); } if (pParam->BSIM4v6dvt0 < 0.0) { fprintf(fplog, "Warning: Dvt0 = %g is negative.\n", pParam->BSIM4v6dvt0); printf("Warning: Dvt0 = %g is negative.\n", pParam->BSIM4v6dvt0); } if (fabs(1.0e-8 / (pParam->BSIM4v6w0 + pParam->BSIM4v6weff)) > 10.0) { fprintf(fplog, "Warning: (W0 + Weff) may be too small.\n"); printf("Warning: (W0 + Weff) may be too small.\n"); } /* Check subthreshold parameters */ if (pParam->BSIM4v6nfactor < 0.0) { fprintf(fplog, "Warning: Nfactor = %g is negative.\n", pParam->BSIM4v6nfactor); printf("Warning: Nfactor = %g is negative.\n", pParam->BSIM4v6nfactor); } if (pParam->BSIM4v6cdsc < 0.0) { fprintf(fplog, "Warning: Cdsc = %g is negative.\n", pParam->BSIM4v6cdsc); printf("Warning: Cdsc = %g is negative.\n", pParam->BSIM4v6cdsc); } if (pParam->BSIM4v6cdscd < 0.0) { fprintf(fplog, "Warning: Cdscd = %g is negative.\n", pParam->BSIM4v6cdscd); printf("Warning: Cdscd = %g is negative.\n", pParam->BSIM4v6cdscd); } /* Check DIBL parameters */ if (here->BSIM4v6eta0 < 0.0) { fprintf(fplog, "Warning: Eta0 = %g is negative.\n", here->BSIM4v6eta0); printf("Warning: Eta0 = %g is negative.\n", here->BSIM4v6eta0); } /* Check Abulk parameters */ if (fabs(1.0e-8 / (pParam->BSIM4v6b1 + pParam->BSIM4v6weff)) > 10.0) { fprintf(fplog, "Warning: (B1 + Weff) may be too small.\n"); printf("Warning: (B1 + Weff) may be too small.\n"); } /* Check Saturation parameters */ if (pParam->BSIM4v6a2 < 0.01) { fprintf(fplog, "Warning: A2 = %g is too small. Set to 0.01.\n", pParam->BSIM4v6a2); printf("Warning: A2 = %g is too small. Set to 0.01.\n", pParam->BSIM4v6a2); pParam->BSIM4v6a2 = 0.01; } else if (pParam->BSIM4v6a2 > 1.0) { fprintf(fplog, "Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->BSIM4v6a2); printf("Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", pParam->BSIM4v6a2); pParam->BSIM4v6a2 = 1.0; pParam->BSIM4v6a1 = 0.0; } if (pParam->BSIM4v6prwg < 0.0) { fprintf(fplog, "Warning: Prwg = %g is negative. Set to zero.\n", pParam->BSIM4v6prwg); printf("Warning: Prwg = %g is negative. Set to zero.\n", pParam->BSIM4v6prwg); pParam->BSIM4v6prwg = 0.0; } if (pParam->BSIM4v6rdsw < 0.0) { fprintf(fplog, "Warning: Rdsw = %g is negative. Set to zero.\n", pParam->BSIM4v6rdsw); printf("Warning: Rdsw = %g is negative. Set to zero.\n", pParam->BSIM4v6rdsw); pParam->BSIM4v6rdsw = 0.0; pParam->BSIM4v6rds0 = 0.0; } if (pParam->BSIM4v6rds0 < 0.0) { fprintf(fplog, "Warning: Rds at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4v6rds0); printf("Warning: Rds at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4v6rds0); pParam->BSIM4v6rds0 = 0.0; } if (pParam->BSIM4v6rdswmin < 0.0) { fprintf(fplog, "Warning: Rdswmin at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4v6rdswmin); printf("Warning: Rdswmin at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4v6rdswmin); pParam->BSIM4v6rdswmin = 0.0; } if (pParam->BSIM4v6pscbe2 <= 0.0) { fprintf(fplog, "Warning: Pscbe2 = %g is not positive.\n", pParam->BSIM4v6pscbe2); printf("Warning: Pscbe2 = %g is not positive.\n", pParam->BSIM4v6pscbe2); } if (pParam->BSIM4v6vsattemp < 1.0e3) { fprintf(fplog, "Warning: Vsat at current temperature = %g may be too small.\n", pParam->BSIM4v6vsattemp); printf("Warning: Vsat at current temperature = %g may be too small.\n", pParam->BSIM4v6vsattemp); } if((model->BSIM4v6lambdaGiven) && (pParam->BSIM4v6lambda > 0.0) ) { if (pParam->BSIM4v6lambda > 1.0e-9) { fprintf(fplog, "Warning: Lambda = %g may be too large.\n", pParam->BSIM4v6lambda); printf("Warning: Lambda = %g may be too large.\n", pParam->BSIM4v6lambda); } } if((model->BSIM4v6vtlGiven) && (pParam->BSIM4v6vtl > 0.0) ) { if (pParam->BSIM4v6vtl < 6.0e4) { fprintf(fplog, "Warning: Thermal velocity vtl = %g may be too small.\n", pParam->BSIM4v6vtl); printf("Warning: Thermal velocity vtl = %g may be too small.\n", pParam->BSIM4v6vtl); } if (pParam->BSIM4v6xn < 3.0) { fprintf(fplog, "Warning: back scattering coeff xn = %g is too small.\n", pParam->BSIM4v6xn); printf("Warning: back scattering coeff xn = %g is too small. Reset to 3.0 \n", pParam->BSIM4v6xn); pParam->BSIM4v6xn = 3.0; } if (model->BSIM4v6lc < 0.0) { fprintf(fplog, "Warning: back scattering coeff lc = %g is too small.\n", model->BSIM4v6lc); printf("Warning: back scattering coeff lc = %g is too small. Reset to 0.0\n", model->BSIM4v6lc); pParam->BSIM4v6lc = 0.0; } } if (pParam->BSIM4v6pdibl1 < 0.0) { fprintf(fplog, "Warning: Pdibl1 = %g is negative.\n", pParam->BSIM4v6pdibl1); printf("Warning: Pdibl1 = %g is negative.\n", pParam->BSIM4v6pdibl1); } if (pParam->BSIM4v6pdibl2 < 0.0) { fprintf(fplog, "Warning: Pdibl2 = %g is negative.\n", pParam->BSIM4v6pdibl2); printf("Warning: Pdibl2 = %g is negative.\n", pParam->BSIM4v6pdibl2); } /* Check stress effect parameters */ if((here->BSIM4v6sa > 0.0) && (here->BSIM4v6sb > 0.0) && ((here->BSIM4v6nf == 1.0) || ((here->BSIM4v6nf > 1.0) && (here->BSIM4v6sd > 0.0))) ) { if (model->BSIM4v6lodk2 <= 0.0) { fprintf(fplog, "Warning: LODK2 = %g is not positive.\n",model->BSIM4v6lodk2); printf("Warning: LODK2 = %g is not positive.\n",model->BSIM4v6lodk2); } if (model->BSIM4v6lodeta0 <= 0.0) { fprintf(fplog, "Warning: LODETA0 = %g is not positive.\n",model->BSIM4v6lodeta0); printf("Warning: LODETA0 = %g is not positive.\n",model->BSIM4v6lodeta0); } } /* Check gate resistance parameters */ if (here->BSIM4v6rgateMod == 1) { if (model->BSIM4v6rshg <= 0.0) printf("Warning: rshg should be positive for rgateMod = 1.\n"); } else if (here->BSIM4v6rgateMod == 2) { if (model->BSIM4v6rshg <= 0.0) printf("Warning: rshg <= 0.0 for rgateMod = 2.\n"); else if (pParam->BSIM4v6xrcrg1 <= 0.0) printf("Warning: xrcrg1 <= 0.0 for rgateMod = 2.\n"); } if (here->BSIM4v6rgateMod == 3) { if (model->BSIM4v6rshg <= 0.0) printf("Warning: rshg should be positive for rgateMod = 3.\n"); else if (pParam->BSIM4v6xrcrg1 <= 0.0) printf("Warning: xrcrg1 should be positive for rgateMod = 3.\n"); } /* Check capacitance parameters */ if (pParam->BSIM4v6noff < 0.1) { fprintf(fplog, "Warning: Noff = %g is too small.\n", pParam->BSIM4v6noff); printf("Warning: Noff = %g is too small.\n", pParam->BSIM4v6noff); } if (pParam->BSIM4v6voffcv < -0.5) { fprintf(fplog, "Warning: Voffcv = %g is too small.\n", pParam->BSIM4v6voffcv); printf("Warning: Voffcv = %g is too small.\n", pParam->BSIM4v6voffcv); } if (pParam->BSIM4v6moin < 5.0) { fprintf(fplog, "Warning: Moin = %g is too small.\n", pParam->BSIM4v6moin); printf("Warning: Moin = %g is too small.\n", pParam->BSIM4v6moin); } if (pParam->BSIM4v6moin > 25.0) { fprintf(fplog, "Warning: Moin = %g is too large.\n", pParam->BSIM4v6moin); printf("Warning: Moin = %g is too large.\n", pParam->BSIM4v6moin); } if(model->BSIM4v6capMod ==2) { if (pParam->BSIM4v6acde < 0.1) { fprintf(fplog, "Warning: Acde = %g is too small.\n", pParam->BSIM4v6acde); printf("Warning: Acde = %g is too small.\n", pParam->BSIM4v6acde); } if (pParam->BSIM4v6acde > 1.6) { fprintf(fplog, "Warning: Acde = %g is too large.\n", pParam->BSIM4v6acde); printf("Warning: Acde = %g is too large.\n", pParam->BSIM4v6acde); } } /* Check overlap capacitance parameters */ if (model->BSIM4v6cgdo < 0.0) { fprintf(fplog, "Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM4v6cgdo); printf("Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM4v6cgdo); model->BSIM4v6cgdo = 0.0; } if (model->BSIM4v6cgso < 0.0) { fprintf(fplog, "Warning: cgso = %g is negative. Set to zero.\n", model->BSIM4v6cgso); printf("Warning: cgso = %g is negative. Set to zero.\n", model->BSIM4v6cgso); model->BSIM4v6cgso = 0.0; } if (model->BSIM4v6cgbo < 0.0) { fprintf(fplog, "Warning: cgbo = %g is negative. Set to zero.\n", model->BSIM4v6cgbo); printf("Warning: cgbo = %g is negative. Set to zero.\n", model->BSIM4v6cgbo); model->BSIM4v6cgbo = 0.0; } if (model->BSIM4v6tnoiMod == 1) { if (model->BSIM4v6tnoia < 0.0) { fprintf(fplog, "Warning: tnoia = %g is negative. Set to zero.\n", model->BSIM4v6tnoia); printf("Warning: tnoia = %g is negative. Set to zero.\n", model->BSIM4v6tnoia); model->BSIM4v6tnoia = 0.0; } if (model->BSIM4v6tnoib < 0.0) { fprintf(fplog, "Warning: tnoib = %g is negative. Set to zero.\n", model->BSIM4v6tnoib); printf("Warning: tnoib = %g is negative. Set to zero.\n", model->BSIM4v6tnoib); model->BSIM4v6tnoib = 0.0; } if (model->BSIM4v6rnoia < 0.0) { fprintf(fplog, "Warning: rnoia = %g is negative. Set to zero.\n", model->BSIM4v6rnoia); printf("Warning: rnoia = %g is negative. Set to zero.\n", model->BSIM4v6rnoia); model->BSIM4v6rnoia = 0.0; } if (model->BSIM4v6rnoib < 0.0) { fprintf(fplog, "Warning: rnoib = %g is negative. Set to zero.\n", model->BSIM4v6rnoib); printf("Warning: rnoib = %g is negative. Set to zero.\n", model->BSIM4v6rnoib); model->BSIM4v6rnoib = 0.0; } } if (model->BSIM4v6SjctEmissionCoeff < 0.0) { fprintf(fplog, "Warning: Njs = %g is negative.\n", model->BSIM4v6SjctEmissionCoeff); printf("Warning: Njs = %g is negative.\n", model->BSIM4v6SjctEmissionCoeff); } if (model->BSIM4v6DjctEmissionCoeff < 0.0) { fprintf(fplog, "Warning: Njd = %g is negative.\n", model->BSIM4v6DjctEmissionCoeff); printf("Warning: Njd = %g is negative.\n", model->BSIM4v6DjctEmissionCoeff); } if (model->BSIM4v6njtsstemp < 0.0) { fprintf(fplog, "Warning: Njts = %g is negative at temperature = %g.\n", model->BSIM4v6njtsstemp, ckt->CKTtemp); printf("Warning: Njts = %g is negative at temperature = %g.\n", model->BSIM4v6njtsstemp, ckt->CKTtemp); } if (model->BSIM4v6njtsswstemp < 0.0) { fprintf(fplog, "Warning: Njtssw = %g is negative at temperature = %g.\n", model->BSIM4v6njtsswstemp, ckt->CKTtemp); printf("Warning: Njtssw = %g is negative at temperature = %g.\n", model->BSIM4v6njtsswstemp, ckt->CKTtemp); } if (model->BSIM4v6njtsswgstemp < 0.0) { fprintf(fplog, "Warning: Njtsswg = %g is negative at temperature = %g.\n", model->BSIM4v6njtsswgstemp, ckt->CKTtemp); printf("Warning: Njtsswg = %g is negative at temperature = %g.\n", model->BSIM4v6njtsswgstemp, ckt->CKTtemp); } if (model->BSIM4v6njtsdGiven && model->BSIM4v6njtsdtemp < 0.0) { fprintf(fplog, "Warning: Njtsd = %g is negative at temperature = %g.\n", model->BSIM4v6njtsdtemp, ckt->CKTtemp); printf("Warning: Njtsd = %g is negative at temperature = %g.\n", model->BSIM4v6njtsdtemp, ckt->CKTtemp); } if (model->BSIM4v6njtsswdGiven && model->BSIM4v6njtsswdtemp < 0.0) { fprintf(fplog, "Warning: Njtsswd = %g is negative at temperature = %g.\n", model->BSIM4v6njtsswdtemp, ckt->CKTtemp); printf("Warning: Njtsswd = %g is negative at temperature = %g.\n", model->BSIM4v6njtsswdtemp, ckt->CKTtemp); } if (model->BSIM4v6njtsswgdGiven && model->BSIM4v6njtsswgdtemp < 0.0) { fprintf(fplog, "Warning: Njtsswgd = %g is negative at temperature = %g.\n", model->BSIM4v6njtsswgdtemp, ckt->CKTtemp); printf("Warning: Njtsswgd = %g is negative at temperature = %g.\n", model->BSIM4v6njtsswgdtemp, ckt->CKTtemp); } if (model->BSIM4v6ntnoi < 0.0) { fprintf(fplog, "Warning: ntnoi = %g is negative. Set to zero.\n", model->BSIM4v6ntnoi); printf("Warning: ntnoi = %g is negative. Set to zero.\n", model->BSIM4v6ntnoi); model->BSIM4v6ntnoi = 0.0; } /* diode model */ if (model->BSIM4v6SbulkJctBotGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJS = %g is too big. Set to 0.99.\n", model->BSIM4v6SbulkJctBotGradingCoeff); printf("Warning: MJS = %g is too big. Set to 0.99.\n", model->BSIM4v6SbulkJctBotGradingCoeff); model->BSIM4v6SbulkJctBotGradingCoeff = 0.99; } if (model->BSIM4v6SbulkJctSideGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJSWS = %g is too big. Set to 0.99.\n", model->BSIM4v6SbulkJctSideGradingCoeff); printf("Warning: MJSWS = %g is too big. Set to 0.99.\n", model->BSIM4v6SbulkJctSideGradingCoeff); model->BSIM4v6SbulkJctSideGradingCoeff = 0.99; } if (model->BSIM4v6SbulkJctGateSideGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJSWGS = %g is too big. Set to 0.99.\n", model->BSIM4v6SbulkJctGateSideGradingCoeff); printf("Warning: MJSWGS = %g is too big. Set to 0.99.\n", model->BSIM4v6SbulkJctGateSideGradingCoeff); model->BSIM4v6SbulkJctGateSideGradingCoeff = 0.99; } if (model->BSIM4v6DbulkJctBotGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJD = %g is too big. Set to 0.99.\n", model->BSIM4v6DbulkJctBotGradingCoeff); printf("Warning: MJD = %g is too big. Set to 0.99.\n", model->BSIM4v6DbulkJctBotGradingCoeff); model->BSIM4v6DbulkJctBotGradingCoeff = 0.99; } if (model->BSIM4v6DbulkJctSideGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJSWD = %g is too big. Set to 0.99.\n", model->BSIM4v6DbulkJctSideGradingCoeff); printf("Warning: MJSWD = %g is too big. Set to 0.99.\n", model->BSIM4v6DbulkJctSideGradingCoeff); model->BSIM4v6DbulkJctSideGradingCoeff = 0.99; } if (model->BSIM4v6DbulkJctGateSideGradingCoeff >= 0.99) { fprintf(fplog, "Warning: MJSWGD = %g is too big. Set to 0.99.\n", model->BSIM4v6DbulkJctGateSideGradingCoeff); printf("Warning: MJSWGD = %g is too big. Set to 0.99.\n", model->BSIM4v6DbulkJctGateSideGradingCoeff); model->BSIM4v6DbulkJctGateSideGradingCoeff = 0.99; } if (model->BSIM4v6wpemod == 1) { if (model->BSIM4v6scref <= 0.0) { fprintf(fplog, "Warning: SCREF = %g is not positive. Set to 1e-6.\n", model->BSIM4v6scref); printf("Warning: SCREF = %g is not positive. Set to 1e-6.\n", model->BSIM4v6scref); model->BSIM4v6scref = 1e-6; } /*Move these checks to temp.c for sceff calculation*/ /* if (here->BSIM4v6sca < 0.0) { fprintf(fplog, "Warning: SCA = %g is negative. Set to 0.0.\n", here->BSIM4v6sca); printf("Warning: SCA = %g is negative. Set to 0.0.\n", here->BSIM4v6sca); here->BSIM4v6sca = 0.0; } if (here->BSIM4v6scb < 0.0) { fprintf(fplog, "Warning: SCB = %g is negative. Set to 0.0.\n", here->BSIM4v6scb); printf("Warning: SCB = %g is negative. Set to 0.0.\n", here->BSIM4v6scb); here->BSIM4v6scb = 0.0; } if (here->BSIM4v6scc < 0.0) { fprintf(fplog, "Warning: SCC = %g is negative. Set to 0.0.\n", here->BSIM4v6scc); printf("Warning: SCC = %g is negative. Set to 0.0.\n", here->BSIM4v6scc); here->BSIM4v6scc = 0.0; } if (here->BSIM4v6sc < 0.0) { fprintf(fplog, "Warning: SC = %g is negative. Set to 0.0.\n", here->BSIM4v6sc); printf("Warning: SC = %g is negative. Set to 0.0.\n", here->BSIM4v6sc); here->BSIM4v6sc = 0.0; } */ } }/* loop for the parameter check for warning messages */ fclose(fplog); } else { fprintf(stderr, "Warning: Can't open log file. Parameter checking skipped.\n"); } return(Fatal_Flag); } tmpk8ny_4pz/src/spicelib/devices/bsim4v6/b4v6geo.c0000644000175000017500000003101713546075722022077 0ustar carstencarsten/**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4geo.c of BSIM4.6.2. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. **********/ #include "ngspice/ngspice.h" #include "bsim4v6def.h" /* * WDLiu: * This subrutine is a special module to process the geometry dependent * parasitics for BSIM4v6, which calculates Ps, Pd, As, Ad, and Rs and Rd * for multi-fingers and varous GEO and RGEO options. */ int BSIM4v6RdsEndIso(double, double, double, double, double, double, int, int, double *); int BSIM4v6RdsEndSha(double, double, double, double, double, double, int, int, double *); static int BSIM4v6NumFingerDiff(double nf, int minSD, double *nuIntD, double *nuEndD, double *nuIntS, double *nuEndS) { int NF; NF = (int)nf; if ((NF%2) != 0) { *nuEndD = *nuEndS = 1.0; *nuIntD = *nuIntS = 2.0 * MAX((nf - 1.0) / 2.0, 0.0); } else { if (minSD == 1) /* minimize # of source */ { *nuEndD = 2.0; *nuIntD = 2.0 * MAX((nf / 2.0 - 1.0), 0.0); *nuEndS = 0.0; *nuIntS = nf; } else { *nuEndD = 0.0; *nuIntD = nf; *nuEndS = 2.0; *nuIntS = 2.0 * MAX((nf / 2.0 - 1.0), 0.0); } } return 0; } int BSIM4v6PAeffGeo(double nf, int geo, int minSD, double Weffcj, double DMCG, double DMCI, double DMDG, double *Ps, double *Pd, double *As, double *Ad) { double T0, T1, T2; double ADiso, ADsha, ADmer, ASiso, ASsha, ASmer; double PDiso, PDsha, PDmer, PSiso, PSsha, PSmer; double nuIntD = 0.0, nuEndD = 0.0, nuIntS = 0.0, nuEndS = 0.0; if (geo < 9) /* For geo = 9 and 10, the numbers of S/D diffusions already known */ BSIM4v6NumFingerDiff(nf, minSD, &nuIntD, &nuEndD, &nuIntS, &nuEndS); T0 = DMCG + DMCI; T1 = DMCG + DMCG; T2 = DMDG + DMDG; PSiso = PDiso = T0 + T0 + Weffcj; PSsha = PDsha = T1; PSmer = PDmer = T2; ASiso = ADiso = T0 * Weffcj; ASsha = ADsha = DMCG * Weffcj; ASmer = ADmer = DMDG * Weffcj; switch(geo) { case 0: *Ps = nuEndS * PSiso + nuIntS * PSsha; *Pd = nuEndD * PDiso + nuIntD * PDsha; *As = nuEndS * ASiso + nuIntS * ASsha; *Ad = nuEndD * ADiso + nuIntD * ADsha; break; case 1: *Ps = nuEndS * PSiso + nuIntS * PSsha; *Pd = (nuEndD + nuIntD) * PDsha; *As = nuEndS * ASiso + nuIntS * ASsha; *Ad = (nuEndD + nuIntD) * ADsha; break; case 2: *Ps = (nuEndS + nuIntS) * PSsha; *Pd = nuEndD * PDiso + nuIntD * PDsha; *As = (nuEndS + nuIntS) * ASsha; *Ad = nuEndD * ADiso + nuIntD * ADsha; break; case 3: *Ps = (nuEndS + nuIntS) * PSsha; *Pd = (nuEndD + nuIntD) * PDsha; *As = (nuEndS + nuIntS) * ASsha; *Ad = (nuEndD + nuIntD) * ADsha; break; case 4: *Ps = nuEndS * PSiso + nuIntS * PSsha; *Pd = nuEndD * PDmer + nuIntD * PDsha; *As = nuEndS * ASiso + nuIntS * ASsha; *Ad = nuEndD * ADmer + nuIntD * ADsha; break; case 5: *Ps = (nuEndS + nuIntS) * PSsha; *Pd = nuEndD * PDmer + nuIntD * PDsha; *As = (nuEndS + nuIntS) * ASsha; *Ad = nuEndD * ADmer + nuIntD * ADsha; break; case 6: *Ps = nuEndS * PSmer + nuIntS * PSsha; *Pd = nuEndD * PDiso + nuIntD * PDsha; *As = nuEndS * ASmer + nuIntS * ASsha; *Ad = nuEndD * ADiso + nuIntD * ADsha; break; case 7: *Ps = nuEndS * PSmer + nuIntS * PSsha; *Pd = (nuEndD + nuIntD) * PDsha; *As = nuEndS * ASmer + nuIntS * ASsha; *Ad = (nuEndD + nuIntD) * ADsha; break; case 8: *Ps = nuEndS * PSmer + nuIntS * PSsha; *Pd = nuEndD * PDmer + nuIntD * PDsha; *As = nuEndS * ASmer + nuIntS * ASsha; *Ad = nuEndD * ADmer + nuIntD * ADsha; break; case 9: /* geo = 9 and 10 happen only when nf = even */ *Ps = PSiso + (nf - 1.0) * PSsha; *Pd = nf * PDsha; *As = ASiso + (nf - 1.0) * ASsha; *Ad = nf * ADsha; break; case 10: *Ps = nf * PSsha; *Pd = PDiso + (nf - 1.0) * PDsha; *As = nf * ASsha; *Ad = ADiso + (nf - 1.0) * ADsha; break; default: printf("Warning: Specified GEO = %d not matched\n", geo); } return 0; } int BSIM4v6RdseffGeo(double nf, int geo, int rgeo, int minSD, double Weffcj, double Rsh, double DMCG, double DMCI, double DMDG, int Type, double *Rtot) { double Rint = 0.0, Rend = 0.0; double nuIntD = 0.0, nuEndD = 0.0, nuIntS = 0.0, nuEndS = 0.0; if (geo < 9) /* since geo = 9 and 10 only happen when nf = even */ { BSIM4v6NumFingerDiff(nf, minSD, &nuIntD, &nuEndD, &nuIntS, &nuEndS); /* Internal S/D resistance -- assume shared S or D and all wide contacts */ if (Type == 1) { if (nuIntS == 0.0) Rint = 0.0; else Rint = Rsh * DMCG / ( Weffcj * nuIntS); } else { if (nuIntD == 0.0) Rint = 0.0; else Rint = Rsh * DMCG / ( Weffcj * nuIntD); } } /* End S/D resistance -- geo dependent */ switch(geo) { case 0: if (Type == 1) BSIM4v6RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else BSIM4v6RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 1: if (Type == 1) BSIM4v6RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else BSIM4v6RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 2: if (Type == 1) BSIM4v6RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else BSIM4v6RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 3: if (Type == 1) BSIM4v6RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else BSIM4v6RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 4: if (Type == 1) BSIM4v6RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else Rend = Rsh * DMDG / Weffcj; break; case 5: if (Type == 1) BSIM4v6RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, rgeo, 1, &Rend); else Rend = Rsh * DMDG / (Weffcj * nuEndD); break; case 6: if (Type == 1) Rend = Rsh * DMDG / Weffcj; else BSIM4v6RdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 7: if (Type == 1) Rend = Rsh * DMDG / (Weffcj * nuEndS); else BSIM4v6RdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, rgeo, 0, &Rend); break; case 8: Rend = Rsh * DMDG / Weffcj; break; case 9: /* all wide contacts assumed for geo = 9 and 10 */ if (Type == 1) { Rend = 0.5 * Rsh * DMCG / Weffcj; if (nf == 2.0) Rint = 0.0; else Rint = Rsh * DMCG / (Weffcj * (nf - 2.0)); } else { Rend = 0.0; Rint = Rsh * DMCG / (Weffcj * nf); } break; case 10: if (Type == 1) { Rend = 0.0; Rint = Rsh * DMCG / (Weffcj * nf); } else { Rend = 0.5 * Rsh * DMCG / Weffcj;; if (nf == 2.0) Rint = 0.0; else Rint = Rsh * DMCG / (Weffcj * (nf - 2.0)); } break; default: printf("Warning: Specified GEO = %d not matched\n", geo); } if (Rint <= 0.0) *Rtot = Rend; else if (Rend <= 0.0) *Rtot = Rint; else *Rtot = Rint * Rend / (Rint + Rend); if(*Rtot==0.0) printf("Warning: Zero resistance returned from RdseffGeo\n"); return 0; } int BSIM4v6RdsEndIso(double Weffcj, double Rsh, double DMCG, double DMCI, double DMDG, double nuEnd, int rgeo, int Type, double *Rend) { NG_IGNORE(DMDG); if (Type == 1) { switch(rgeo) { case 1: case 2: case 5: if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * DMCG / (Weffcj * nuEnd); break; case 3: case 4: case 6: if ((DMCG + DMCI) == 0.0) printf("(DMCG + DMCI) can not be equal to zero\n"); if ((nuEnd == 0.0)||((DMCG+DMCI)==0.0)) *Rend = 0.0; else *Rend = Rsh * Weffcj / (3.0 * nuEnd * (DMCG + DMCI)); break; default: printf("Warning: Specified RGEO = %d not matched\n", rgeo); } } else { switch(rgeo) { case 1: case 3: case 7: if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * DMCG / (Weffcj * nuEnd); break; case 2: case 4: case 8: if ((DMCG + DMCI) == 0.0) printf("(DMCG + DMCI) can not be equal to zero\n"); if ((nuEnd == 0.0)||((DMCG + DMCI)==0.0)) *Rend = 0.0; else *Rend = Rsh * Weffcj / (3.0 * nuEnd * (DMCG + DMCI)); break; default: printf("Warning: Specified RGEO = %d not matched\n", rgeo); } } return 0; } int BSIM4v6RdsEndSha(double Weffcj, double Rsh, double DMCG, double DMCI, double DMDG, double nuEnd, int rgeo, int Type, double *Rend) { NG_IGNORE(DMCI); NG_IGNORE(DMDG); if (Type == 1) { switch(rgeo) { case 1: case 2: case 5: if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * DMCG / (Weffcj * nuEnd); break; case 3: case 4: case 6: if (DMCG == 0.0) printf("DMCG can not be equal to zero\n"); if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * Weffcj / (6.0 * nuEnd * DMCG); break; default: printf("Warning: Specified RGEO = %d not matched\n", rgeo); } } else { switch(rgeo) { case 1: case 3: case 7: if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * DMCG / (Weffcj * nuEnd); break; case 2: case 4: case 8: if (DMCG == 0.0) printf("DMCG can not be equal to zero\n"); if (nuEnd == 0.0) *Rend = 0.0; else *Rend = Rsh * Weffcj / (6.0 * nuEnd * DMCG); break; default: printf("Warning: Specified RGEO = %d not matched\n", rgeo); } } return 0; } tmpk8ny_4pz/src/spicelib/devices/bsim4v6/b4v6cvtest.c0000644000175000017500000002216213546075722022636 0ustar carstencarsten/**** BSIM4.6.2 Released by Wenwei Yang 04/05/2008 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4cvtest.c of BSIM4.6.2. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 05/09/2003. **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4v6def.h" #include "ngspice/trandefs.h" #include "ngspice/const.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4v6convTest( GENmodel *inModel, CKTcircuit *ckt) { BSIM4v6model *model = (BSIM4v6model*)inModel; BSIM4v6instance *here; double delvbd, delvbs, delvds, delvgd, delvgs; double delvdbd, delvsbs; double delvbd_jct, delvbs_jct; double vds, vgs, vgd, vgdo, vbs, vbd; double vdbd, vdbs, vsbs; double cbhat, cdhat, Idtot, Ibtot; double vses, vdes, vdedo, delvses, delvded, delvdes; double Isestot, cseshat, Idedtot, cdedhat; double Igstot, cgshat, Igdtot, cgdhat, Igbtot, cgbhat; double tol0, tol1, tol2, tol3, tol4, tol5, tol6; for (; model != NULL; model = BSIM4v6nextModel(model)) { for (here = BSIM4v6instances(model); here != NULL ; here=BSIM4v6nextInstance(here)) { vds = model->BSIM4v6type * (*(ckt->CKTrhsOld + here->BSIM4v6dNodePrime) - *(ckt->CKTrhsOld + here->BSIM4v6sNodePrime)); vgs = model->BSIM4v6type * (*(ckt->CKTrhsOld + here->BSIM4v6gNodePrime) - *(ckt->CKTrhsOld + here->BSIM4v6sNodePrime)); vbs = model->BSIM4v6type * (*(ckt->CKTrhsOld + here->BSIM4v6bNodePrime) - *(ckt->CKTrhsOld + here->BSIM4v6sNodePrime)); vdbs = model->BSIM4v6type * (*(ckt->CKTrhsOld + here->BSIM4v6dbNode) - *(ckt->CKTrhsOld + here->BSIM4v6sNodePrime)); vsbs = model->BSIM4v6type * (*(ckt->CKTrhsOld + here->BSIM4v6sbNode) - *(ckt->CKTrhsOld + here->BSIM4v6sNodePrime)); vses = model->BSIM4v6type * (*(ckt->CKTrhsOld + here->BSIM4v6sNode) - *(ckt->CKTrhsOld + here->BSIM4v6sNodePrime)); vdes = model->BSIM4v6type * (*(ckt->CKTrhsOld + here->BSIM4v6dNode) - *(ckt->CKTrhsOld + here->BSIM4v6sNodePrime)); vgdo = *(ckt->CKTstate0 + here->BSIM4v6vgs) - *(ckt->CKTstate0 + here->BSIM4v6vds); vbd = vbs - vds; vdbd = vdbs - vds; vgd = vgs - vds; delvbd = vbd - *(ckt->CKTstate0 + here->BSIM4v6vbd); delvdbd = vdbd - *(ckt->CKTstate0 + here->BSIM4v6vdbd); delvgd = vgd - vgdo; delvds = vds - *(ckt->CKTstate0 + here->BSIM4v6vds); delvgs = vgs - *(ckt->CKTstate0 + here->BSIM4v6vgs); delvbs = vbs - *(ckt->CKTstate0 + here->BSIM4v6vbs); delvsbs = vsbs - *(ckt->CKTstate0 + here->BSIM4v6vsbs); delvses = vses - (*(ckt->CKTstate0 + here->BSIM4v6vses)); vdedo = *(ckt->CKTstate0 + here->BSIM4v6vdes) - *(ckt->CKTstate0 + here->BSIM4v6vds); delvdes = vdes - *(ckt->CKTstate0 + here->BSIM4v6vdes); delvded = vdes - vds - vdedo; delvbd_jct = (!here->BSIM4v6rbodyMod) ? delvbd : delvdbd; delvbs_jct = (!here->BSIM4v6rbodyMod) ? delvbs : delvsbs; if (here->BSIM4v6mode >= 0) { Idtot = here->BSIM4v6cd + here->BSIM4v6csub - here->BSIM4v6cbd + here->BSIM4v6Igidl; cdhat = Idtot - here->BSIM4v6gbd * delvbd_jct + (here->BSIM4v6gmbs + here->BSIM4v6gbbs + here->BSIM4v6ggidlb) * delvbs + (here->BSIM4v6gm + here->BSIM4v6gbgs + here->BSIM4v6ggidlg) * delvgs + (here->BSIM4v6gds + here->BSIM4v6gbds + here->BSIM4v6ggidld) * delvds; Igstot = here->BSIM4v6Igs + here->BSIM4v6Igcs; cgshat = Igstot + (here->BSIM4v6gIgsg + here->BSIM4v6gIgcsg) * delvgs + here->BSIM4v6gIgcsd * delvds + here->BSIM4v6gIgcsb * delvbs; Igdtot = here->BSIM4v6Igd + here->BSIM4v6Igcd; cgdhat = Igdtot + here->BSIM4v6gIgdg * delvgd + here->BSIM4v6gIgcdg * delvgs + here->BSIM4v6gIgcdd * delvds + here->BSIM4v6gIgcdb * delvbs; Igbtot = here->BSIM4v6Igb; cgbhat = here->BSIM4v6Igb + here->BSIM4v6gIgbg * delvgs + here->BSIM4v6gIgbd * delvds + here->BSIM4v6gIgbb * delvbs; } else { Idtot = here->BSIM4v6cd + here->BSIM4v6cbd - here->BSIM4v6Igidl; /* bugfix */ cdhat = Idtot + here->BSIM4v6gbd * delvbd_jct + here->BSIM4v6gmbs * delvbd + here->BSIM4v6gm * delvgd - (here->BSIM4v6gds + here->BSIM4v6ggidls) * delvds - here->BSIM4v6ggidlg * delvgs - here->BSIM4v6ggidlb * delvbs; Igstot = here->BSIM4v6Igs + here->BSIM4v6Igcd; cgshat = Igstot + here->BSIM4v6gIgsg * delvgs + here->BSIM4v6gIgcdg * delvgd - here->BSIM4v6gIgcdd * delvds + here->BSIM4v6gIgcdb * delvbd; Igdtot = here->BSIM4v6Igd + here->BSIM4v6Igcs; cgdhat = Igdtot + (here->BSIM4v6gIgdg + here->BSIM4v6gIgcsg) * delvgd - here->BSIM4v6gIgcsd * delvds + here->BSIM4v6gIgcsb * delvbd; Igbtot = here->BSIM4v6Igb; cgbhat = here->BSIM4v6Igb + here->BSIM4v6gIgbg * delvgd - here->BSIM4v6gIgbd * delvds + here->BSIM4v6gIgbb * delvbd; } Isestot = here->BSIM4v6gstot * (*(ckt->CKTstate0 + here->BSIM4v6vses)); cseshat = Isestot + here->BSIM4v6gstot * delvses + here->BSIM4v6gstotd * delvds + here->BSIM4v6gstotg * delvgs + here->BSIM4v6gstotb * delvbs; Idedtot = here->BSIM4v6gdtot * vdedo; cdedhat = Idedtot + here->BSIM4v6gdtot * delvded + here->BSIM4v6gdtotd * delvds + here->BSIM4v6gdtotg * delvgs + here->BSIM4v6gdtotb * delvbs; /* * Check convergence */ if ((here->BSIM4v6off == 0) || (!(ckt->CKTmode & MODEINITFIX))) { tol0 = ckt->CKTreltol * MAX(fabs(cdhat), fabs(Idtot)) + ckt->CKTabstol; tol1 = ckt->CKTreltol * MAX(fabs(cseshat), fabs(Isestot)) + ckt->CKTabstol; tol2 = ckt->CKTreltol * MAX(fabs(cdedhat), fabs(Idedtot)) + ckt->CKTabstol; tol3 = ckt->CKTreltol * MAX(fabs(cgshat), fabs(Igstot)) + ckt->CKTabstol; tol4 = ckt->CKTreltol * MAX(fabs(cgdhat), fabs(Igdtot)) + ckt->CKTabstol; tol5 = ckt->CKTreltol * MAX(fabs(cgbhat), fabs(Igbtot)) + ckt->CKTabstol; if ((fabs(cdhat - Idtot) >= tol0) || (fabs(cseshat - Isestot) >= tol1) || (fabs(cdedhat - Idedtot) >= tol2)) { ckt->CKTnoncon++; return(OK); } if ((fabs(cgshat - Igstot) >= tol3) || (fabs(cgdhat - Igdtot) >= tol4) || (fabs(cgbhat - Igbtot) >= tol5)) { ckt->CKTnoncon++; return(OK); } Ibtot = here->BSIM4v6cbs + here->BSIM4v6cbd - here->BSIM4v6Igidl - here->BSIM4v6Igisl - here->BSIM4v6csub; if (here->BSIM4v6mode >= 0) { cbhat = Ibtot + here->BSIM4v6gbd * delvbd_jct + here->BSIM4v6gbs * delvbs_jct - (here->BSIM4v6gbbs + here->BSIM4v6ggidlb) * delvbs - (here->BSIM4v6gbgs + here->BSIM4v6ggidlg) * delvgs - (here->BSIM4v6gbds + here->BSIM4v6ggidld) * delvds - here->BSIM4v6ggislg * delvgd - here->BSIM4v6ggislb* delvbd + here->BSIM4v6ggisls * delvds ; } else { cbhat = Ibtot + here->BSIM4v6gbs * delvbs_jct + here->BSIM4v6gbd * delvbd_jct - (here->BSIM4v6gbbs + here->BSIM4v6ggislb) * delvbd - (here->BSIM4v6gbgs + here->BSIM4v6ggislg) * delvgd + (here->BSIM4v6gbds + here->BSIM4v6ggisld - here->BSIM4v6ggidls) * delvds - here->BSIM4v6ggidlg * delvgs - here->BSIM4v6ggidlb * delvbs; } tol6 = ckt->CKTreltol * MAX(fabs(cbhat), fabs(Ibtot)) + ckt->CKTabstol; if (fabs(cbhat - Ibtot) > tol6) { ckt->CKTnoncon++; return(OK); } } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v6/b4v6pzld.c0000644000175000017500000010432113546075722022275 0ustar carstencarsten/**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4pzld.c of BSIM4.6.2. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 10/05/2001. **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "bsim4v6def.h" #include "ngspice/suffix.h" int BSIM4v6pzLoad( GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { BSIM4v6model *model = (BSIM4v6model*)inModel; BSIM4v6instance *here; double gjbd, gjbs, geltd, gcrg, gcrgg, gcrgd, gcrgs, gcrgb; double xcggb, xcgdb, xcgsb, xcgbb, xcbgb, xcbdb, xcbsb, xcbbb; double xcdgb, xcddb, xcdsb, xcdbb, xcsgb, xcsdb, xcssb, xcsbb; double gds, capbd, capbs, FwdSum, RevSum, Gm, Gmbs; double gstot, gstotd, gstotg, gstots, gstotb, gspr; double gdtot, gdtotd, gdtotg, gdtots, gdtotb, gdpr; double gIstotg, gIstotd, gIstots, gIstotb; double gIdtotg, gIdtotd, gIdtots, gIdtotb; double gIbtotg, gIbtotd, gIbtots, gIbtotb; double gIgtotg, gIgtotd, gIgtots, gIgtotb; double cgso, cgdo, cgbo; double xcdbdb=0.0, xcsbsb=0.0, xcgmgmb=0.0, xcgmdb=0.0, xcgmsb=0.0, xcdgmb=0.0, xcsgmb=0.0; double xcgmbb=0.0, xcbgmb=0.0; double dxpart, sxpart, xgtg, xgtd, xgts, xgtb, xcqgb=0.0, xcqdb=0.0, xcqsb=0.0, xcqbb=0.0; double gbspsp, gbbdp, gbbsp, gbspg, gbspb; double gbspdp, gbdpdp, gbdpg, gbdpb, gbdpsp; double ddxpart_dVd, ddxpart_dVg, ddxpart_dVb, ddxpart_dVs; double dsxpart_dVd, dsxpart_dVg, dsxpart_dVb, dsxpart_dVs; double T0=0.0, T1, CoxWL, qcheq, Cdg, Cdd, Cds, Csg, Csd, Css; double ScalingFactor = 1.0e-9; struct bsim4v6SizeDependParam *pParam; double ggidld, ggidlg, ggidlb, ggislg, ggislb, ggisls; double m; for (; model != NULL; model = BSIM4v6nextModel(model)) { for (here = BSIM4v6instances(model); here!= NULL; here = BSIM4v6nextInstance(here)) { pParam = here->pParam; capbd = here->BSIM4v6capbd; capbs = here->BSIM4v6capbs; cgso = here->BSIM4v6cgso; cgdo = here->BSIM4v6cgdo; cgbo = pParam->BSIM4v6cgbo; if (here->BSIM4v6mode >= 0) { Gm = here->BSIM4v6gm; Gmbs = here->BSIM4v6gmbs; FwdSum = Gm + Gmbs; RevSum = 0.0; gbbdp = -(here->BSIM4v6gbds); gbbsp = here->BSIM4v6gbds + here->BSIM4v6gbgs + here->BSIM4v6gbbs; gbdpg = here->BSIM4v6gbgs; gbdpdp = here->BSIM4v6gbds; gbdpb = here->BSIM4v6gbbs; gbdpsp = -(gbdpg + gbdpdp + gbdpb); gbspdp = 0.0; gbspg = 0.0; gbspb = 0.0; gbspsp = 0.0; if (model->BSIM4v6igcMod) { gIstotg = here->BSIM4v6gIgsg + here->BSIM4v6gIgcsg; gIstotd = here->BSIM4v6gIgcsd; gIstots = here->BSIM4v6gIgss + here->BSIM4v6gIgcss; gIstotb = here->BSIM4v6gIgcsb; gIdtotg = here->BSIM4v6gIgdg + here->BSIM4v6gIgcdg; gIdtotd = here->BSIM4v6gIgdd + here->BSIM4v6gIgcdd; gIdtots = here->BSIM4v6gIgcds; gIdtotb = here->BSIM4v6gIgcdb; } else { gIstotg = gIstotd = gIstots = gIstotb = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = 0.0; } if (model->BSIM4v6igbMod) { gIbtotg = here->BSIM4v6gIgbg; gIbtotd = here->BSIM4v6gIgbd; gIbtots = here->BSIM4v6gIgbs; gIbtotb = here->BSIM4v6gIgbb; } else gIbtotg = gIbtotd = gIbtots = gIbtotb = 0.0; if ((model->BSIM4v6igcMod != 0) || (model->BSIM4v6igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = 0.0; if (here->BSIM4v6rgateMod == 2) T0 = *(ckt->CKTstates[0] + here->BSIM4v6vges) - *(ckt->CKTstates[0] + here->BSIM4v6vgs); else if (here->BSIM4v6rgateMod == 3) T0 = *(ckt->CKTstates[0] + here->BSIM4v6vgms) - *(ckt->CKTstates[0] + here->BSIM4v6vgs); if (here->BSIM4v6rgateMod > 1) { gcrgd = here->BSIM4v6gcrgd * T0; gcrgg = here->BSIM4v6gcrgg * T0; gcrgs = here->BSIM4v6gcrgs * T0; gcrgb = here->BSIM4v6gcrgb * T0; gcrgg -= here->BSIM4v6gcrg; gcrg = here->BSIM4v6gcrg; } else gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; if (here->BSIM4v6acnqsMod == 0) { if (here->BSIM4v6rgateMod == 3) { xcgmgmb = cgdo + cgso + pParam->BSIM4v6cgbo; xcgmdb = -cgdo; xcgmsb = -cgso; xcgmbb = -pParam->BSIM4v6cgbo; xcdgmb = xcgmdb; xcsgmb = xcgmsb; xcbgmb = xcgmbb; xcggb = here->BSIM4v6cggb; xcgdb = here->BSIM4v6cgdb; xcgsb = here->BSIM4v6cgsb; xcgbb = -(xcggb + xcgdb + xcgsb); xcdgb = here->BSIM4v6cdgb; xcsgb = -(here->BSIM4v6cggb + here->BSIM4v6cbgb + here->BSIM4v6cdgb); xcbgb = here->BSIM4v6cbgb; } else { xcggb = here->BSIM4v6cggb + cgdo + cgso + pParam->BSIM4v6cgbo; xcgdb = here->BSIM4v6cgdb - cgdo; xcgsb = here->BSIM4v6cgsb - cgso; xcgbb = -(xcggb + xcgdb + xcgsb); xcdgb = here->BSIM4v6cdgb - cgdo; xcsgb = -(here->BSIM4v6cggb + here->BSIM4v6cbgb + here->BSIM4v6cdgb + cgso); xcbgb = here->BSIM4v6cbgb - pParam->BSIM4v6cgbo; xcdgmb = xcsgmb = xcbgmb = 0.0; } xcddb = here->BSIM4v6cddb + here->BSIM4v6capbd + cgdo; xcdsb = here->BSIM4v6cdsb; xcsdb = -(here->BSIM4v6cgdb + here->BSIM4v6cbdb + here->BSIM4v6cddb); xcssb = here->BSIM4v6capbs + cgso - (here->BSIM4v6cgsb + here->BSIM4v6cbsb + here->BSIM4v6cdsb); if (!here->BSIM4v6rbodyMod) { xcdbb = -(xcdgb + xcddb + xcdsb + xcdgmb); xcsbb = -(xcsgb + xcsdb + xcssb + xcsgmb); xcbdb = here->BSIM4v6cbdb - here->BSIM4v6capbd; xcbsb = here->BSIM4v6cbsb - here->BSIM4v6capbs; xcdbdb = 0.0; } else { xcdbb = -(here->BSIM4v6cddb + here->BSIM4v6cdgb + here->BSIM4v6cdsb); xcsbb = -(xcsgb + xcsdb + xcssb + xcsgmb) + here->BSIM4v6capbs; xcbdb = here->BSIM4v6cbdb; xcbsb = here->BSIM4v6cbsb; xcdbdb = -here->BSIM4v6capbd; xcsbsb = -here->BSIM4v6capbs; } xcbbb = -(xcbdb + xcbgb + xcbsb + xcbgmb); xgtg = xgtd = xgts = xgtb = 0.0; sxpart = 0.6; dxpart = 0.4; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { xcggb = xcgdb = xcgsb = xcgbb = 0.0; xcbgb = xcbdb = xcbsb = xcbbb = 0.0; xcdgb = xcddb = xcdsb = xcdbb = 0.0; xcsgb = xcsdb = xcssb = xcsbb = 0.0; xgtg = here->BSIM4v6gtg; xgtd = here->BSIM4v6gtd; xgts = here->BSIM4v6gts; xgtb = here->BSIM4v6gtb; xcqgb = here->BSIM4v6cqgb; xcqdb = here->BSIM4v6cqdb; xcqsb = here->BSIM4v6cqsb; xcqbb = here->BSIM4v6cqbb; CoxWL = model->BSIM4v6coxe * here->pParam->BSIM4v6weffCV * here->BSIM4v6nf * here->pParam->BSIM4v6leffCV; qcheq = -(here->BSIM4v6qgate + here->BSIM4v6qbulk); if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM4v6xpart < 0.5) { dxpart = 0.4; } else if (model->BSIM4v6xpart > 0.5) { dxpart = 0.0; } else { dxpart = 0.5; } ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; } else { dxpart = here->BSIM4v6qdrn / qcheq; Cdd = here->BSIM4v6cddb; Csd = -(here->BSIM4v6cgdb + here->BSIM4v6cddb + here->BSIM4v6cbdb); ddxpart_dVd = (Cdd - dxpart * (Cdd + Csd)) / qcheq; Cdg = here->BSIM4v6cdgb; Csg = -(here->BSIM4v6cggb + here->BSIM4v6cdgb + here->BSIM4v6cbgb); ddxpart_dVg = (Cdg - dxpart * (Cdg + Csg)) / qcheq; Cds = here->BSIM4v6cdsb; Css = -(here->BSIM4v6cgsb + here->BSIM4v6cdsb + here->BSIM4v6cbsb); ddxpart_dVs = (Cds - dxpart * (Cds + Css)) / qcheq; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); } sxpart = 1.0 - dxpart; dsxpart_dVd = -ddxpart_dVd; dsxpart_dVg = -ddxpart_dVg; dsxpart_dVs = -ddxpart_dVs; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); } } else { Gm = -here->BSIM4v6gm; Gmbs = -here->BSIM4v6gmbs; FwdSum = 0.0; RevSum = -(Gm + Gmbs); gbbsp = -(here->BSIM4v6gbds); gbbdp = here->BSIM4v6gbds + here->BSIM4v6gbgs + here->BSIM4v6gbbs; gbdpg = 0.0; gbdpsp = 0.0; gbdpb = 0.0; gbdpdp = 0.0; gbspg = here->BSIM4v6gbgs; gbspsp = here->BSIM4v6gbds; gbspb = here->BSIM4v6gbbs; gbspdp = -(gbspg + gbspsp + gbspb); if (model->BSIM4v6igcMod) { gIstotg = here->BSIM4v6gIgsg + here->BSIM4v6gIgcdg; gIstotd = here->BSIM4v6gIgcds; gIstots = here->BSIM4v6gIgss + here->BSIM4v6gIgcdd; gIstotb = here->BSIM4v6gIgcdb; gIdtotg = here->BSIM4v6gIgdg + here->BSIM4v6gIgcsg; gIdtotd = here->BSIM4v6gIgdd + here->BSIM4v6gIgcss; gIdtots = here->BSIM4v6gIgcsd; gIdtotb = here->BSIM4v6gIgcsb; } else { gIstotg = gIstotd = gIstots = gIstotb = 0.0; gIdtotg = gIdtotd = gIdtots = gIdtotb = 0.0; } if (model->BSIM4v6igbMod) { gIbtotg = here->BSIM4v6gIgbg; gIbtotd = here->BSIM4v6gIgbs; gIbtots = here->BSIM4v6gIgbd; gIbtotb = here->BSIM4v6gIgbb; } else gIbtotg = gIbtotd = gIbtots = gIbtotb = 0.0; if ((model->BSIM4v6igcMod != 0) || (model->BSIM4v6igbMod != 0)) { gIgtotg = gIstotg + gIdtotg + gIbtotg; gIgtotd = gIstotd + gIdtotd + gIbtotd ; gIgtots = gIstots + gIdtots + gIbtots; gIgtotb = gIstotb + gIdtotb + gIbtotb; } else gIgtotg = gIgtotd = gIgtots = gIgtotb = 0.0; if (here->BSIM4v6rgateMod == 2) T0 = *(ckt->CKTstates[0] + here->BSIM4v6vges) - *(ckt->CKTstates[0] + here->BSIM4v6vgs); else if (here->BSIM4v6rgateMod == 3) T0 = *(ckt->CKTstates[0] + here->BSIM4v6vgms) - *(ckt->CKTstates[0] + here->BSIM4v6vgs); if (here->BSIM4v6rgateMod > 1) { gcrgd = here->BSIM4v6gcrgs * T0; gcrgg = here->BSIM4v6gcrgg * T0; gcrgs = here->BSIM4v6gcrgd * T0; gcrgb = here->BSIM4v6gcrgb * T0; gcrgg -= here->BSIM4v6gcrg; gcrg = here->BSIM4v6gcrg; } else gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0; if (here->BSIM4v6acnqsMod == 0) { if (here->BSIM4v6rgateMod == 3) { xcgmgmb = cgdo + cgso + pParam->BSIM4v6cgbo; xcgmdb = -cgdo; xcgmsb = -cgso; xcgmbb = -pParam->BSIM4v6cgbo; xcdgmb = xcgmdb; xcsgmb = xcgmsb; xcbgmb = xcgmbb; xcggb = here->BSIM4v6cggb; xcgdb = here->BSIM4v6cgsb; xcgsb = here->BSIM4v6cgdb; xcgbb = -(xcggb + xcgdb + xcgsb); xcdgb = -(here->BSIM4v6cggb + here->BSIM4v6cbgb + here->BSIM4v6cdgb); xcsgb = here->BSIM4v6cdgb; xcbgb = here->BSIM4v6cbgb; } else { xcggb = here->BSIM4v6cggb + cgdo + cgso + pParam->BSIM4v6cgbo; xcgdb = here->BSIM4v6cgsb - cgdo; xcgsb = here->BSIM4v6cgdb - cgso; xcgbb = -(xcggb + xcgdb + xcgsb); xcdgb = -(here->BSIM4v6cggb + here->BSIM4v6cbgb + here->BSIM4v6cdgb + cgdo); xcsgb = here->BSIM4v6cdgb - cgso; xcbgb = here->BSIM4v6cbgb - pParam->BSIM4v6cgbo; xcdgmb = xcsgmb = xcbgmb = 0.0; } xcddb = here->BSIM4v6capbd + cgdo - (here->BSIM4v6cgsb + here->BSIM4v6cbsb + here->BSIM4v6cdsb); xcdsb = -(here->BSIM4v6cgdb + here->BSIM4v6cbdb + here->BSIM4v6cddb); xcsdb = here->BSIM4v6cdsb; xcssb = here->BSIM4v6cddb + here->BSIM4v6capbs + cgso; if (!here->BSIM4v6rbodyMod) { xcdbb = -(xcdgb + xcddb + xcdsb + xcdgmb); xcsbb = -(xcsgb + xcsdb + xcssb + xcsgmb); xcbdb = here->BSIM4v6cbsb - here->BSIM4v6capbd; xcbsb = here->BSIM4v6cbdb - here->BSIM4v6capbs; xcdbdb = 0.0; } else { xcdbb = -(xcdgb + xcddb + xcdsb + xcdgmb) + here->BSIM4v6capbd; xcsbb = -(here->BSIM4v6cddb + here->BSIM4v6cdgb + here->BSIM4v6cdsb); xcbdb = here->BSIM4v6cbsb; xcbsb = here->BSIM4v6cbdb; xcdbdb = -here->BSIM4v6capbd; xcsbsb = -here->BSIM4v6capbs; } xcbbb = -(xcbgb + xcbdb + xcbsb + xcbgmb); xgtg = xgtd = xgts = xgtb = 0.0; sxpart = 0.4; dxpart = 0.6; ddxpart_dVd = ddxpart_dVg = ddxpart_dVb = ddxpart_dVs = 0.0; dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { xcggb = xcgdb = xcgsb = xcgbb = 0.0; xcbgb = xcbdb = xcbsb = xcbbb = 0.0; xcdgb = xcddb = xcdsb = xcdbb = 0.0; xcsgb = xcsdb = xcssb = xcsbb = 0.0; xgtg = here->BSIM4v6gtg; xgtd = here->BSIM4v6gts; xgts = here->BSIM4v6gtd; xgtb = here->BSIM4v6gtb; xcqgb = here->BSIM4v6cqgb; xcqdb = here->BSIM4v6cqsb; xcqsb = here->BSIM4v6cqdb; xcqbb = here->BSIM4v6cqbb; CoxWL = model->BSIM4v6coxe * here->pParam->BSIM4v6weffCV * here->BSIM4v6nf * here->pParam->BSIM4v6leffCV; qcheq = -(here->BSIM4v6qgate + here->BSIM4v6qbulk); if (fabs(qcheq) <= 1.0e-5 * CoxWL) { if (model->BSIM4v6xpart < 0.5) { sxpart = 0.4; } else if (model->BSIM4v6xpart > 0.5) { sxpart = 0.0; } else { sxpart = 0.5; } dsxpart_dVd = dsxpart_dVg = dsxpart_dVb = dsxpart_dVs = 0.0; } else { sxpart = here->BSIM4v6qdrn / qcheq; Css = here->BSIM4v6cddb; Cds = -(here->BSIM4v6cgdb + here->BSIM4v6cddb + here->BSIM4v6cbdb); dsxpart_dVs = (Css - sxpart * (Css + Cds)) / qcheq; Csg = here->BSIM4v6cdgb; Cdg = -(here->BSIM4v6cggb + here->BSIM4v6cdgb + here->BSIM4v6cbgb); dsxpart_dVg = (Csg - sxpart * (Csg + Cdg)) / qcheq; Csd = here->BSIM4v6cdsb; Cdd = -(here->BSIM4v6cgsb + here->BSIM4v6cdsb + here->BSIM4v6cbsb); dsxpart_dVd = (Csd - sxpart * (Csd + Cdd)) / qcheq; dsxpart_dVb = -(dsxpart_dVd + dsxpart_dVg + dsxpart_dVs); } dxpart = 1.0 - sxpart; ddxpart_dVd = -dsxpart_dVd; ddxpart_dVg = -dsxpart_dVg; ddxpart_dVs = -dsxpart_dVs; ddxpart_dVb = -(ddxpart_dVd + ddxpart_dVg + ddxpart_dVs); } } if (model->BSIM4v6rdsMod == 1) { gstot = here->BSIM4v6gstot; gstotd = here->BSIM4v6gstotd; gstotg = here->BSIM4v6gstotg; gstots = here->BSIM4v6gstots - gstot; gstotb = here->BSIM4v6gstotb; gdtot = here->BSIM4v6gdtot; gdtotd = here->BSIM4v6gdtotd - gdtot; gdtotg = here->BSIM4v6gdtotg; gdtots = here->BSIM4v6gdtots; gdtotb = here->BSIM4v6gdtotb; } else { gstot = gstotd = gstotg = gstots = gstotb = 0.0; gdtot = gdtotd = gdtotg = gdtots = gdtotb = 0.0; } T1 = *(ckt->CKTstate0 + here->BSIM4v6qdef) * here->BSIM4v6gtau; gds = here->BSIM4v6gds; /* * Loading PZ matrix */ m = here->BSIM4v6m; if (!model->BSIM4v6rdsMod) { gdpr = here->BSIM4v6drainConductance; gspr = here->BSIM4v6sourceConductance; } else gdpr = gspr = 0.0; if (!here->BSIM4v6rbodyMod) { gjbd = here->BSIM4v6gbd; gjbs = here->BSIM4v6gbs; } else gjbd = gjbs = 0.0; geltd = here->BSIM4v6grgeltd; if (here->BSIM4v6rgateMod == 1) { *(here->BSIM4v6GEgePtr) += m * geltd; *(here->BSIM4v6GPgePtr) -= m * geltd; *(here->BSIM4v6GEgpPtr) -= m * geltd; *(here->BSIM4v6GPgpPtr ) += m * xcggb * s->real; *(here->BSIM4v6GPgpPtr +1) += m * xcggb * s->imag; *(here->BSIM4v6GPgpPtr) += m * (geltd - xgtg + gIgtotg); *(here->BSIM4v6GPdpPtr ) += m * xcgdb * s->real; *(here->BSIM4v6GPdpPtr +1) += m * xcgdb * s->imag; *(here->BSIM4v6GPdpPtr) -= m * (xgtd - gIgtotd); *(here->BSIM4v6GPspPtr ) += m * xcgsb * s->real; *(here->BSIM4v6GPspPtr +1) += m * xcgsb * s->imag; *(here->BSIM4v6GPspPtr) -= m * (xgts - gIgtots); *(here->BSIM4v6GPbpPtr ) += m * xcgbb * s->real; *(here->BSIM4v6GPbpPtr +1) += m * xcgbb * s->imag; *(here->BSIM4v6GPbpPtr) -= m * (xgtb - gIgtotb); } else if (here->BSIM4v6rgateMod == 2) { *(here->BSIM4v6GEgePtr) += m * gcrg; *(here->BSIM4v6GEgpPtr) += m * gcrgg; *(here->BSIM4v6GEdpPtr) += m * gcrgd; *(here->BSIM4v6GEspPtr) += m * gcrgs; *(here->BSIM4v6GEbpPtr) += m * gcrgb; *(here->BSIM4v6GPgePtr) -= m * gcrg; *(here->BSIM4v6GPgpPtr ) += m * xcggb * s->real; *(here->BSIM4v6GPgpPtr +1) += m * xcggb * s->imag; *(here->BSIM4v6GPgpPtr) -= m * (gcrgg + xgtg - gIgtotg); *(here->BSIM4v6GPdpPtr ) += m * xcgdb * s->real; *(here->BSIM4v6GPdpPtr +1) += m * xcgdb * s->imag; *(here->BSIM4v6GPdpPtr) -= m * (gcrgd + xgtd - gIgtotd); *(here->BSIM4v6GPspPtr ) += m * xcgsb * s->real; *(here->BSIM4v6GPspPtr +1) += m * xcgsb * s->imag; *(here->BSIM4v6GPspPtr) -= m * (gcrgs + xgts - gIgtots); *(here->BSIM4v6GPbpPtr ) += m * xcgbb * s->real; *(here->BSIM4v6GPbpPtr +1) += m * xcgbb * s->imag; *(here->BSIM4v6GPbpPtr) -= m * (gcrgb + xgtb - gIgtotb); } else if (here->BSIM4v6rgateMod == 3) { *(here->BSIM4v6GEgePtr) += m * geltd; *(here->BSIM4v6GEgmPtr) -= m * geltd; *(here->BSIM4v6GMgePtr) -= m * geltd; *(here->BSIM4v6GMgmPtr) += m * (geltd + gcrg); *(here->BSIM4v6GMgmPtr ) += m * xcgmgmb * s->real; *(here->BSIM4v6GMgmPtr +1) += m * xcgmgmb * s->imag; *(here->BSIM4v6GMdpPtr) += m * gcrgd; *(here->BSIM4v6GMdpPtr ) += m * xcgmdb * s->real; *(here->BSIM4v6GMdpPtr +1) += m * xcgmdb * s->imag; *(here->BSIM4v6GMgpPtr) += m * gcrgg; *(here->BSIM4v6GMspPtr) += m * gcrgs; *(here->BSIM4v6GMspPtr ) += m * xcgmsb * s->real; *(here->BSIM4v6GMspPtr +1) += m * xcgmsb * s->imag; *(here->BSIM4v6GMbpPtr) += m * gcrgb; *(here->BSIM4v6GMbpPtr ) += m * xcgmbb * s->real; *(here->BSIM4v6GMbpPtr +1) += m * xcgmbb * s->imag; *(here->BSIM4v6DPgmPtr ) += m * xcdgmb * s->real; *(here->BSIM4v6DPgmPtr +1) += m * xcdgmb * s->imag; *(here->BSIM4v6GPgmPtr) -= m * gcrg; *(here->BSIM4v6SPgmPtr ) += m * xcsgmb * s->real; *(here->BSIM4v6SPgmPtr +1) += m * xcsgmb * s->imag; *(here->BSIM4v6BPgmPtr ) += m * xcbgmb * s->real; *(here->BSIM4v6BPgmPtr +1) += m * xcbgmb * s->imag; *(here->BSIM4v6GPgpPtr) -= m * (gcrgg + xgtg - gIgtotg); *(here->BSIM4v6GPgpPtr ) += m * xcggb * s->real; *(here->BSIM4v6GPgpPtr +1) += m * xcggb * s->imag; *(here->BSIM4v6GPdpPtr) -= m * (gcrgd + xgtd - gIgtotd); *(here->BSIM4v6GPdpPtr ) += m * xcgdb * s->real; *(here->BSIM4v6GPdpPtr +1) += m * xcgdb * s->imag; *(here->BSIM4v6GPspPtr) -= m * (gcrgs + xgts - gIgtots); *(here->BSIM4v6GPspPtr ) += m * xcgsb * s->real; *(here->BSIM4v6GPspPtr +1) += m * xcgsb * s->imag; *(here->BSIM4v6GPbpPtr) -= m * (gcrgb + xgtb - gIgtotb); *(here->BSIM4v6GPbpPtr ) += m * xcgbb * s->real; *(here->BSIM4v6GPbpPtr +1) += m * xcgbb * s->imag; } else { *(here->BSIM4v6GPdpPtr ) += m * xcgdb * s->real; *(here->BSIM4v6GPdpPtr +1) += m * xcgdb * s->imag; *(here->BSIM4v6GPdpPtr) -= m * (xgtd - gIgtotd); *(here->BSIM4v6GPgpPtr ) += m * xcggb * s->real; *(here->BSIM4v6GPgpPtr +1) += m * xcggb * s->imag; *(here->BSIM4v6GPgpPtr) -= m * (xgtg - gIgtotg); *(here->BSIM4v6GPspPtr ) += m * xcgsb * s->real; *(here->BSIM4v6GPspPtr +1) += m * xcgsb * s->imag; *(here->BSIM4v6GPspPtr) -= m * (xgts - gIgtots); *(here->BSIM4v6GPbpPtr ) += m * xcgbb * s->real; *(here->BSIM4v6GPbpPtr +1) += m * xcgbb * s->imag; *(here->BSIM4v6GPbpPtr) -= m * (xgtb - gIgtotb); } if (model->BSIM4v6rdsMod) { (*(here->BSIM4v6DgpPtr) += m * gdtotg); (*(here->BSIM4v6DspPtr) += m * gdtots); (*(here->BSIM4v6DbpPtr) += m * gdtotb); (*(here->BSIM4v6SdpPtr) += m * gstotd); (*(here->BSIM4v6SgpPtr) += m * gstotg); (*(here->BSIM4v6SbpPtr) += m * gstotb); } *(here->BSIM4v6DPdpPtr ) += m * xcddb * s->real; *(here->BSIM4v6DPdpPtr +1) += m * xcddb * s->imag; *(here->BSIM4v6DPdpPtr) += m * (gdpr + gds + here->BSIM4v6gbd - gdtotd + RevSum + gbdpdp - gIdtotd + dxpart * xgtd + T1 * ddxpart_dVd); *(here->BSIM4v6DPdPtr) -= m * (gdpr + gdtot); *(here->BSIM4v6DPgpPtr ) += m * xcdgb * s->real; *(here->BSIM4v6DPgpPtr +1) += m * xcdgb * s->imag; *(here->BSIM4v6DPgpPtr) += m * (Gm - gdtotg + gbdpg - gIdtotg + T1 * ddxpart_dVg + dxpart * xgtg); *(here->BSIM4v6DPspPtr ) += m * xcdsb * s->real; *(here->BSIM4v6DPspPtr +1) += m * xcdsb * s->imag; *(here->BSIM4v6DPspPtr) -= m * (gds + FwdSum + gdtots - gbdpsp + gIdtots - T1 * ddxpart_dVs - dxpart * xgts); *(here->BSIM4v6DPbpPtr ) += m * xcdbb * s->real; *(here->BSIM4v6DPbpPtr +1) += m * xcdbb * s->imag; *(here->BSIM4v6DPbpPtr) -= m * (gjbd + gdtotb - Gmbs - gbdpb + gIdtotb - T1 * ddxpart_dVb - dxpart * xgtb); *(here->BSIM4v6DdpPtr) -= m * (gdpr - gdtotd); *(here->BSIM4v6DdPtr) += m * (gdpr + gdtot); *(here->BSIM4v6SPdpPtr ) += m * xcsdb * s->real; *(here->BSIM4v6SPdpPtr +1) += m * xcsdb * s->imag; *(here->BSIM4v6SPdpPtr) -= m * (gds + gstotd + RevSum - gbspdp + gIstotd - T1 * dsxpart_dVd - sxpart * xgtd); *(here->BSIM4v6SPgpPtr ) += m * xcsgb * s->real; *(here->BSIM4v6SPgpPtr +1) += m * xcsgb * s->imag; *(here->BSIM4v6SPgpPtr) -= m * (Gm + gstotg - gbspg + gIstotg - T1 * dsxpart_dVg - sxpart * xgtg); *(here->BSIM4v6SPspPtr ) += m * xcssb * s->real; *(here->BSIM4v6SPspPtr +1) += m * xcssb * s->imag; *(here->BSIM4v6SPspPtr) += m * (gspr + gds + here->BSIM4v6gbs - gIstots - gstots + FwdSum + gbspsp + sxpart * xgts + T1 * dsxpart_dVs); *(here->BSIM4v6SPsPtr) -= m * (gspr + gstot); *(here->BSIM4v6SPbpPtr ) += m * xcsbb * s->real; *(here->BSIM4v6SPbpPtr +1) += m * xcsbb * s->imag; *(here->BSIM4v6SPbpPtr) -= m * (gjbs + gstotb + Gmbs - gbspb + gIstotb - T1 * dsxpart_dVb - sxpart * xgtb); *(here->BSIM4v6SspPtr) -= m * (gspr - gstots); *(here->BSIM4v6SsPtr) += m * (gspr + gstot); *(here->BSIM4v6BPdpPtr ) += m * xcbdb * s->real; *(here->BSIM4v6BPdpPtr +1) += m * xcbdb * s->imag; *(here->BSIM4v6BPdpPtr) -= m * (gjbd - gbbdp + gIbtotd); *(here->BSIM4v6BPgpPtr ) += m * xcbgb * s->real; *(here->BSIM4v6BPgpPtr +1) += m * xcbgb * s->imag; *(here->BSIM4v6BPgpPtr) -= m * (here->BSIM4v6gbgs + gIbtotg); *(here->BSIM4v6BPspPtr ) += m * xcbsb * s->real; *(here->BSIM4v6BPspPtr +1) += m * xcbsb * s->imag; *(here->BSIM4v6BPspPtr) -= m * (gjbs - gbbsp + gIbtots); *(here->BSIM4v6BPbpPtr ) += m * xcbbb * s->real; *(here->BSIM4v6BPbpPtr +1) += m * xcbbb * s->imag; *(here->BSIM4v6BPbpPtr) += m * (gjbd + gjbs - here->BSIM4v6gbbs - gIbtotb); ggidld = here->BSIM4v6ggidld; ggidlg = here->BSIM4v6ggidlg; ggidlb = here->BSIM4v6ggidlb; ggislg = here->BSIM4v6ggislg; ggisls = here->BSIM4v6ggisls; ggislb = here->BSIM4v6ggislb; /* stamp gidl */ (*(here->BSIM4v6DPdpPtr) += m * ggidld); (*(here->BSIM4v6DPgpPtr) += m * ggidlg); (*(here->BSIM4v6DPspPtr) -= m * ((ggidlg + ggidld) + ggidlb)); (*(here->BSIM4v6DPbpPtr) += m * ggidlb); (*(here->BSIM4v6BPdpPtr) -= m * ggidld); (*(here->BSIM4v6BPgpPtr) -= m * ggidlg); (*(here->BSIM4v6BPspPtr) += m * ((ggidlg + ggidld) + ggidlb)); (*(here->BSIM4v6BPbpPtr) -= m * ggidlb); /* stamp gisl */ (*(here->BSIM4v6SPdpPtr) -= m * ((ggisls + ggislg) + ggislb)); (*(here->BSIM4v6SPgpPtr) += m * ggislg); (*(here->BSIM4v6SPspPtr) += m * ggisls); (*(here->BSIM4v6SPbpPtr) += m * ggislb); (*(here->BSIM4v6BPdpPtr) += m * ((ggislg + ggisls) + ggislb)); (*(here->BSIM4v6BPgpPtr) -= m * ggislg); (*(here->BSIM4v6BPspPtr) -= m * ggisls); (*(here->BSIM4v6BPbpPtr) -= m * ggislb); if (here->BSIM4v6rbodyMod) { (*(here->BSIM4v6DPdbPtr ) += m * xcdbdb * s->real); (*(here->BSIM4v6DPdbPtr +1) += m * xcdbdb * s->imag); (*(here->BSIM4v6DPdbPtr) -= m * here->BSIM4v6gbd); (*(here->BSIM4v6SPsbPtr ) += m * xcsbsb * s->real); (*(here->BSIM4v6SPsbPtr +1) += m * xcsbsb * s->imag); (*(here->BSIM4v6SPsbPtr) -= m * here->BSIM4v6gbs); (*(here->BSIM4v6DBdpPtr ) += m * xcdbdb * s->real); (*(here->BSIM4v6DBdpPtr +1) += m * xcdbdb * s->imag); (*(here->BSIM4v6DBdpPtr) -= m * here->BSIM4v6gbd); (*(here->BSIM4v6DBdbPtr ) -= m * xcdbdb * s->real); (*(here->BSIM4v6DBdbPtr +1) -= m * xcdbdb * s->imag); (*(here->BSIM4v6DBdbPtr) += m * (here->BSIM4v6gbd + here->BSIM4v6grbpd + here->BSIM4v6grbdb)); (*(here->BSIM4v6DBbpPtr) -= m * here->BSIM4v6grbpd); (*(here->BSIM4v6DBbPtr) -= m * here->BSIM4v6grbdb); (*(here->BSIM4v6BPdbPtr) -= m * here->BSIM4v6grbpd); (*(here->BSIM4v6BPbPtr) -= m * here->BSIM4v6grbpb); (*(here->BSIM4v6BPsbPtr) -= m * here->BSIM4v6grbps); (*(here->BSIM4v6BPbpPtr) += m * (here->BSIM4v6grbpd + here->BSIM4v6grbps + here->BSIM4v6grbpb)); /* WDL: (-here->BSIM4v6gbbs) already added to BPbpPtr */ (*(here->BSIM4v6SBspPtr ) += m * xcsbsb * s->real); (*(here->BSIM4v6SBspPtr +1) += m * xcsbsb * s->imag); (*(here->BSIM4v6SBspPtr) -= m * here->BSIM4v6gbs); (*(here->BSIM4v6SBbpPtr) -= m * here->BSIM4v6grbps); (*(here->BSIM4v6SBbPtr) -= m * here->BSIM4v6grbsb); (*(here->BSIM4v6SBsbPtr ) -= m * xcsbsb * s->real); (*(here->BSIM4v6SBsbPtr +1) -= m * xcsbsb * s->imag); (*(here->BSIM4v6SBsbPtr) += m * (here->BSIM4v6gbs + here->BSIM4v6grbps + here->BSIM4v6grbsb)); (*(here->BSIM4v6BdbPtr) -= m * here->BSIM4v6grbdb); (*(here->BSIM4v6BbpPtr) -= m * here->BSIM4v6grbpb); (*(here->BSIM4v6BsbPtr) -= m * here->BSIM4v6grbsb); (*(here->BSIM4v6BbPtr) += m * (here->BSIM4v6grbsb + here->BSIM4v6grbdb + here->BSIM4v6grbpb)); } if (here->BSIM4v6acnqsMod) { *(here->BSIM4v6QqPtr ) += m * s->real * ScalingFactor; *(here->BSIM4v6QqPtr +1) += m * s->imag * ScalingFactor; *(here->BSIM4v6QgpPtr ) -= m * xcqgb * s->real; *(here->BSIM4v6QgpPtr +1) -= m * xcqgb * s->imag; *(here->BSIM4v6QdpPtr ) -= m * xcqdb * s->real; *(here->BSIM4v6QdpPtr +1) -= m * xcqdb * s->imag; *(here->BSIM4v6QbpPtr ) -= m * xcqbb * s->real; *(here->BSIM4v6QbpPtr +1) -= m * xcqbb * s->imag; *(here->BSIM4v6QspPtr ) -= m * xcqsb * s->real; *(here->BSIM4v6QspPtr +1) -= m * xcqsb * s->imag; *(here->BSIM4v6GPqPtr) -= m * here->BSIM4v6gtau; *(here->BSIM4v6DPqPtr) += m * dxpart * here->BSIM4v6gtau; *(here->BSIM4v6SPqPtr) += m * sxpart * here->BSIM4v6gtau; *(here->BSIM4v6QqPtr) += m * here->BSIM4v6gtau; *(here->BSIM4v6QgpPtr) += m * xgtg; *(here->BSIM4v6QdpPtr) += m * xgtd; *(here->BSIM4v6QbpPtr) += m * xgtb; *(here->BSIM4v6QspPtr) += m * xgts; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v6/bsim4v6init.h0000644000175000017500000000042613546075722023006 0ustar carstencarsten#ifndef _BSIM4v6INIT_H #define _BSIM4v6INIT_H extern IFparm BSIM4v6pTable[ ]; extern IFparm BSIM4v6mPTable[ ]; extern char *BSIM4v6names[ ]; extern int BSIM4v6pTSize; extern int BSIM4v6mPTSize; extern int BSIM4v6nSize; extern int BSIM4v6iSize; extern int BSIM4v6mSize; #endif tmpk8ny_4pz/src/spicelib/devices/bsim4v6/b4v6mdel.c0000644000175000017500000000171013546075722022243 0ustar carstencarsten/**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4mdel.c of BSIM4.6.2. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. **********/ #include "ngspice/ngspice.h" #include "bsim4v6def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4v6mDelete(GENmodel *gen_model) { BSIM4v6model *model = (BSIM4v6model *) gen_model; #ifdef USE_OMP FREE(model->BSIM4v6InstanceArray); #endif struct bsim4v6SizeDependParam *p = model->pSizeDependParamKnot; while (p) { struct bsim4v6SizeDependParam *next_p = p->pNext; FREE(p); p = next_p; } FREE(model->BSIM4v6version); return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim4v6/b4v6par.c0000644000175000017500000001511713546075722022112 0ustar carstencarsten/**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4par.c of BSIM4.6.2. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "bsim4v6def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/fteext.h" int BSIM4v6param( int param, IFvalue *value, GENinstance *inst, IFvalue *select) { double scale; BSIM4v6instance *here = (BSIM4v6instance*)inst; NG_IGNORE(select); if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; switch(param) { case BSIM4v6_W: here->BSIM4v6w = value->rValue*scale; here->BSIM4v6wGiven = TRUE; break; case BSIM4v6_L: here->BSIM4v6l = value->rValue*scale; here->BSIM4v6lGiven = TRUE; break; case BSIM4v6_M: here->BSIM4v6m = value->rValue; here->BSIM4v6mGiven = TRUE; break; case BSIM4v6_NF: here->BSIM4v6nf = value->rValue; here->BSIM4v6nfGiven = TRUE; break; case BSIM4v6_MIN: here->BSIM4v6min = value->iValue; here->BSIM4v6minGiven = TRUE; break; case BSIM4v6_AS: here->BSIM4v6sourceArea = value->rValue*scale*scale; here->BSIM4v6sourceAreaGiven = TRUE; break; case BSIM4v6_AD: here->BSIM4v6drainArea = value->rValue*scale*scale; here->BSIM4v6drainAreaGiven = TRUE; break; case BSIM4v6_PS: here->BSIM4v6sourcePerimeter = value->rValue*scale; here->BSIM4v6sourcePerimeterGiven = TRUE; break; case BSIM4v6_PD: here->BSIM4v6drainPerimeter = value->rValue*scale; here->BSIM4v6drainPerimeterGiven = TRUE; break; case BSIM4v6_NRS: here->BSIM4v6sourceSquares = value->rValue; here->BSIM4v6sourceSquaresGiven = TRUE; break; case BSIM4v6_NRD: here->BSIM4v6drainSquares = value->rValue; here->BSIM4v6drainSquaresGiven = TRUE; break; case BSIM4v6_OFF: here->BSIM4v6off = value->iValue; break; case BSIM4v6_SA: here->BSIM4v6sa = value->rValue; here->BSIM4v6saGiven = TRUE; break; case BSIM4v6_SB: here->BSIM4v6sb = value->rValue; here->BSIM4v6sbGiven = TRUE; break; case BSIM4v6_SD: here->BSIM4v6sd = value->rValue; here->BSIM4v6sdGiven = TRUE; break; case BSIM4v6_SCA: here->BSIM4v6sca = value->rValue; here->BSIM4v6scaGiven = TRUE; break; case BSIM4v6_SCB: here->BSIM4v6scb = value->rValue; here->BSIM4v6scbGiven = TRUE; break; case BSIM4v6_SCC: here->BSIM4v6scc = value->rValue; here->BSIM4v6sccGiven = TRUE; break; case BSIM4v6_SC: here->BSIM4v6sc = value->rValue; here->BSIM4v6scGiven = TRUE; break; case BSIM4v6_RBSB: here->BSIM4v6rbsb = value->rValue; here->BSIM4v6rbsbGiven = TRUE; break; case BSIM4v6_RBDB: here->BSIM4v6rbdb = value->rValue; here->BSIM4v6rbdbGiven = TRUE; break; case BSIM4v6_RBPB: here->BSIM4v6rbpb = value->rValue; here->BSIM4v6rbpbGiven = TRUE; break; case BSIM4v6_RBPS: here->BSIM4v6rbps = value->rValue; here->BSIM4v6rbpsGiven = TRUE; break; case BSIM4v6_RBPD: here->BSIM4v6rbpd = value->rValue; here->BSIM4v6rbpdGiven = TRUE; break; case BSIM4v6_DELVTO: here->BSIM4v6delvto = value->rValue; here->BSIM4v6delvtoGiven = TRUE; break; case BSIM4v6_XGW: here->BSIM4v6xgw = value->rValue; here->BSIM4v6xgwGiven = TRUE; break; case BSIM4v6_NGCON: here->BSIM4v6ngcon = value->rValue; here->BSIM4v6ngconGiven = TRUE; break; case BSIM4v6_TRNQSMOD: here->BSIM4v6trnqsMod = value->iValue; here->BSIM4v6trnqsModGiven = TRUE; break; case BSIM4v6_ACNQSMOD: here->BSIM4v6acnqsMod = value->iValue; here->BSIM4v6acnqsModGiven = TRUE; break; case BSIM4v6_RBODYMOD: here->BSIM4v6rbodyMod = value->iValue; here->BSIM4v6rbodyModGiven = TRUE; break; case BSIM4v6_RGATEMOD: here->BSIM4v6rgateMod = value->iValue; here->BSIM4v6rgateModGiven = TRUE; break; case BSIM4v6_GEOMOD: here->BSIM4v6geoMod = value->iValue; here->BSIM4v6geoModGiven = TRUE; break; case BSIM4v6_RGEOMOD: here->BSIM4v6rgeoMod = value->iValue; here->BSIM4v6rgeoModGiven = TRUE; break; case BSIM4v6_IC_VDS: here->BSIM4v6icVDS = value->rValue; here->BSIM4v6icVDSGiven = TRUE; break; case BSIM4v6_IC_VGS: here->BSIM4v6icVGS = value->rValue; here->BSIM4v6icVGSGiven = TRUE; break; case BSIM4v6_IC_VBS: here->BSIM4v6icVBS = value->rValue; here->BSIM4v6icVBSGiven = TRUE; break; case BSIM4v6_IC: switch(value->v.numValue) { case 3: here->BSIM4v6icVBS = *(value->v.vec.rVec+2); here->BSIM4v6icVBSGiven = TRUE; case 2: here->BSIM4v6icVGS = *(value->v.vec.rVec+1); here->BSIM4v6icVGSGiven = TRUE; case 1: here->BSIM4v6icVDS = *(value->v.vec.rVec); here->BSIM4v6icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v6/b4v6temp.c0000644000175000017500000034670313546075722022305 0ustar carstencarsten/**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008 ****/ /**** BSIM4.6.5 Update ngspice 09/22/2009 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4temp.c of BSIM4.6.3. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Authors: 2008- Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. * Modified by Mohan Dunga, 12/13/2006. * Modified by Mohan Dunga, Wenwei Yang, 05/18/2007. * Modified by Wenwei Yang, 07/31/2008. **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "bsim4v6def.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define Kb 1.3806226e-23 #define KboQ 8.617087e-5 #define EPS0 8.85418e-12 #define EPSSI 1.03594e-10 #define PI 3.141592654 #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define Charge_q 1.60219e-19 #define DELTA 1.0E-9 #define DEXP(A,B) { \ if (A > EXP_THRESHOLD) { \ B = MAX_EXP*(1.0+(A)-EXP_THRESHOLD); \ } else if (A < -EXP_THRESHOLD) { \ B = MIN_EXP; \ } else { \ B = exp(A); \ } \ } static int BSIM4v6DioIjthVjmEval(double Nvtm, double Ijth, double Isb, double XExpBV, double *Vjm) { double Tb, Tc, EVjmovNv; Tc = XExpBV; Tb = 1.0 + Ijth / Isb - Tc; EVjmovNv = 0.5 * (Tb + sqrt(Tb * Tb + 4.0 * Tc)); *Vjm = Nvtm * log(EVjmovNv); return 0; } int BSIM4v6temp( GENmodel *inModel, CKTcircuit *ckt) { BSIM4v6model *model = (BSIM4v6model*) inModel; BSIM4v6instance *here; struct bsim4v6SizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam=NULL; double tmp, tmp1, tmp2, tmp3, Eg, Eg0, ni, epssub; double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Lnew=0.0, Wnew; double delTemp, Temp, TRatio, Inv_L, Inv_W, Inv_LW, Vtm0, Tnom; double dumPs, dumPd, dumAs, dumAd, PowWeffWr; double DMCGeff, DMCIeff, DMDGeff; double Nvtms, Nvtmd, SourceSatCurrent, DrainSatCurrent; double T10, T11; double Inv_saref, Inv_sbref, Inv_sa, Inv_sb, rho, Ldrn, dvth0_lod; double W_tmp, Inv_ODeff, OD_offset, dk2_lod, deta0_lod; double lnl, lnw, lnnf, rbpbx, rbpby, rbsbx, rbsby, rbdbx, rbdby,bodymode; double kvsat, wlod, sceff, Wdrn; double V0, lt1, ltw, Theta0, Delt_vth, Vth_NarrowW, Lpe_Vb, Vth; double n, n0, Vgsteff, Vgs_eff, niter, toxpf, toxpi, Tcen, toxe, epsrox, vddeot; double vtfbphi2eot, phieot, TempRatioeot, Vtm0eot, Vtmeot,vbieot; int Size_Not_Found, i; /* loop through all the BSIM4v6 device models */ for (; model != NULL; model = BSIM4v6nextModel(model)) { Temp = ckt->CKTtemp; if (model->BSIM4v6SbulkJctPotential < 0.1) { model->BSIM4v6SbulkJctPotential = 0.1; fprintf(stderr, "Given pbs is less than 0.1. Pbs is set to 0.1.\n"); } if (model->BSIM4v6SsidewallJctPotential < 0.1) { model->BSIM4v6SsidewallJctPotential = 0.1; fprintf(stderr, "Given pbsws is less than 0.1. Pbsws is set to 0.1.\n"); } if (model->BSIM4v6SGatesidewallJctPotential < 0.1) { model->BSIM4v6SGatesidewallJctPotential = 0.1; fprintf(stderr, "Given pbswgs is less than 0.1. Pbswgs is set to 0.1.\n"); } if (model->BSIM4v6DbulkJctPotential < 0.1) { model->BSIM4v6DbulkJctPotential = 0.1; fprintf(stderr, "Given pbd is less than 0.1. Pbd is set to 0.1.\n"); } if (model->BSIM4v6DsidewallJctPotential < 0.1) { model->BSIM4v6DsidewallJctPotential = 0.1; fprintf(stderr, "Given pbswd is less than 0.1. Pbswd is set to 0.1.\n"); } if (model->BSIM4v6DGatesidewallJctPotential < 0.1) { model->BSIM4v6DGatesidewallJctPotential = 0.1; fprintf(stderr, "Given pbswgd is less than 0.1. Pbswgd is set to 0.1.\n"); } if(model->BSIM4v6mtrlMod == 0) { if ((model->BSIM4v6toxeGiven) && (model->BSIM4v6toxpGiven) && (model->BSIM4v6dtoxGiven) && (model->BSIM4v6toxe != (model->BSIM4v6toxp + model->BSIM4v6dtox))) printf("Warning: toxe, toxp and dtox all given and toxe != toxp + dtox; dtox ignored.\n"); else if ((model->BSIM4v6toxeGiven) && (!model->BSIM4v6toxpGiven)) model->BSIM4v6toxp = model->BSIM4v6toxe - model->BSIM4v6dtox; else if ((!model->BSIM4v6toxeGiven) && (model->BSIM4v6toxpGiven)) model->BSIM4v6toxe = model->BSIM4v6toxp + model->BSIM4v6dtox; } if(model->BSIM4v6mtrlMod) { epsrox = 3.9; toxe = model->BSIM4v6eot; epssub = EPS0 * model->BSIM4v6epsrsub; } else { epsrox = model->BSIM4v6epsrox; toxe = model->BSIM4v6toxe; epssub = EPSSI; } model->BSIM4v6coxe = epsrox * EPS0 / toxe; if(model->BSIM4v6mtrlMod == 0) model->BSIM4v6coxp = model->BSIM4v6epsrox * EPS0 / model->BSIM4v6toxp; if (!model->BSIM4v6cgdoGiven) { if (model->BSIM4v6dlcGiven && (model->BSIM4v6dlc > 0.0)) model->BSIM4v6cgdo = model->BSIM4v6dlc * model->BSIM4v6coxe - model->BSIM4v6cgdl ; else model->BSIM4v6cgdo = 0.6 * model->BSIM4v6xj * model->BSIM4v6coxe; } if (!model->BSIM4v6cgsoGiven) { if (model->BSIM4v6dlcGiven && (model->BSIM4v6dlc > 0.0)) model->BSIM4v6cgso = model->BSIM4v6dlc * model->BSIM4v6coxe - model->BSIM4v6cgsl ; else model->BSIM4v6cgso = 0.6 * model->BSIM4v6xj * model->BSIM4v6coxe; } if (!model->BSIM4v6cgboGiven) model->BSIM4v6cgbo = 2.0 * model->BSIM4v6dwc * model->BSIM4v6coxe; struct bsim4v6SizeDependParam *p = model->pSizeDependParamKnot; while (p) { struct bsim4v6SizeDependParam *next_p = p->pNext; FREE(p); p = next_p; } model->pSizeDependParamKnot = NULL; pLastKnot = NULL; Tnom = model->BSIM4v6tnom; TRatio = Temp / Tnom; model->BSIM4v6vcrit = CONSTvt0 * log(CONSTvt0 / (CONSTroot2 * 1.0e-14)); model->BSIM4v6factor1 = sqrt(epssub / (epsrox * EPS0)* toxe); Vtm0 = model->BSIM4v6vtm0 = KboQ * Tnom; if(model->BSIM4v6mtrlMod==0) { Eg0 = 1.16 - 7.02e-4 * Tnom * Tnom / (Tnom + 1108.0); ni = 1.45e10 * (Tnom / 300.15) * sqrt(Tnom / 300.15) * exp(21.5565981 - Eg0 / (2.0 * Vtm0)); } else { Eg0 = model->BSIM4v6bg0sub - model->BSIM4v6tbgasub * Tnom * Tnom / (Tnom + model->BSIM4v6tbgbsub); T0 = model->BSIM4v6bg0sub - model->BSIM4v6tbgasub * 90090.0225 / (300.15 + model->BSIM4v6tbgbsub); ni = model->BSIM4v6ni0sub * (Tnom / 300.15) * sqrt(Tnom / 300.15) * exp((T0 - Eg0) / (2.0 * Vtm0)); } model->BSIM4v6Eg0 = Eg0; model->BSIM4v6vtm = KboQ * Temp; if(model->BSIM4v6mtrlMod == 0) Eg = 1.16 - 7.02e-4 * Temp * Temp / (Temp + 1108.0); else Eg = model->BSIM4v6bg0sub - model->BSIM4v6tbgasub * Temp * Temp / (Temp + model->BSIM4v6tbgbsub); if (Temp != Tnom) { T0 = Eg0 / Vtm0 - Eg / model->BSIM4v6vtm; T1 = log(Temp / Tnom); T2 = T0 + model->BSIM4v6SjctTempExponent * T1; T3 = exp(T2 / model->BSIM4v6SjctEmissionCoeff); model->BSIM4v6SjctTempSatCurDensity = model->BSIM4v6SjctSatCurDensity * T3; model->BSIM4v6SjctSidewallTempSatCurDensity = model->BSIM4v6SjctSidewallSatCurDensity * T3; model->BSIM4v6SjctGateSidewallTempSatCurDensity = model->BSIM4v6SjctGateSidewallSatCurDensity * T3; T2 = T0 + model->BSIM4v6DjctTempExponent * T1; T3 = exp(T2 / model->BSIM4v6DjctEmissionCoeff); model->BSIM4v6DjctTempSatCurDensity = model->BSIM4v6DjctSatCurDensity * T3; model->BSIM4v6DjctSidewallTempSatCurDensity = model->BSIM4v6DjctSidewallSatCurDensity * T3; model->BSIM4v6DjctGateSidewallTempSatCurDensity = model->BSIM4v6DjctGateSidewallSatCurDensity * T3; } else { model->BSIM4v6SjctTempSatCurDensity = model->BSIM4v6SjctSatCurDensity; model->BSIM4v6SjctSidewallTempSatCurDensity = model->BSIM4v6SjctSidewallSatCurDensity; model->BSIM4v6SjctGateSidewallTempSatCurDensity = model->BSIM4v6SjctGateSidewallSatCurDensity; model->BSIM4v6DjctTempSatCurDensity = model->BSIM4v6DjctSatCurDensity; model->BSIM4v6DjctSidewallTempSatCurDensity = model->BSIM4v6DjctSidewallSatCurDensity; model->BSIM4v6DjctGateSidewallTempSatCurDensity = model->BSIM4v6DjctGateSidewallSatCurDensity; } if (model->BSIM4v6SjctTempSatCurDensity < 0.0) model->BSIM4v6SjctTempSatCurDensity = 0.0; if (model->BSIM4v6SjctSidewallTempSatCurDensity < 0.0) model->BSIM4v6SjctSidewallTempSatCurDensity = 0.0; if (model->BSIM4v6SjctGateSidewallTempSatCurDensity < 0.0) model->BSIM4v6SjctGateSidewallTempSatCurDensity = 0.0; if (model->BSIM4v6DjctTempSatCurDensity < 0.0) model->BSIM4v6DjctTempSatCurDensity = 0.0; if (model->BSIM4v6DjctSidewallTempSatCurDensity < 0.0) model->BSIM4v6DjctSidewallTempSatCurDensity = 0.0; if (model->BSIM4v6DjctGateSidewallTempSatCurDensity < 0.0) model->BSIM4v6DjctGateSidewallTempSatCurDensity = 0.0; /* Temperature dependence of D/B and S/B diode capacitance begins */ delTemp = ckt->CKTtemp - model->BSIM4v6tnom; T0 = model->BSIM4v6tcj * delTemp; if (T0 >= -1.0) { model->BSIM4v6SunitAreaTempJctCap = model->BSIM4v6SunitAreaJctCap *(1.0 + T0); /*bug_fix -JX */ model->BSIM4v6DunitAreaTempJctCap = model->BSIM4v6DunitAreaJctCap *(1.0 + T0); } else { if (model->BSIM4v6SunitAreaJctCap > 0.0) { model->BSIM4v6SunitAreaTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjs to be negative. Cjs is clamped to zero.\n"); } if (model->BSIM4v6DunitAreaJctCap > 0.0) { model->BSIM4v6DunitAreaTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjd to be negative. Cjd is clamped to zero.\n"); } } T0 = model->BSIM4v6tcjsw * delTemp; if (model->BSIM4v6SunitLengthSidewallJctCap < 0.0)/*4.6.2*/ {model->BSIM4v6SunitLengthSidewallJctCap = 0.0; fprintf(stderr, "CJSWS is negative. Cjsws is clamped to zero.\n");} if (model->BSIM4v6DunitLengthSidewallJctCap < 0.0) {model->BSIM4v6DunitLengthSidewallJctCap = 0.0; fprintf(stderr, "CJSWD is negative. Cjswd is clamped to zero.\n");} if (T0 >= -1.0) { model->BSIM4v6SunitLengthSidewallTempJctCap = model->BSIM4v6SunitLengthSidewallJctCap *(1.0 + T0); model->BSIM4v6DunitLengthSidewallTempJctCap = model->BSIM4v6DunitLengthSidewallJctCap *(1.0 + T0); } else { if (model->BSIM4v6SunitLengthSidewallJctCap > 0.0) { model->BSIM4v6SunitLengthSidewallTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjsws to be negative. Cjsws is clamped to zero.\n"); } if (model->BSIM4v6DunitLengthSidewallJctCap > 0.0) { model->BSIM4v6DunitLengthSidewallTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjswd to be negative. Cjswd is clamped to zero.\n"); } } T0 = model->BSIM4v6tcjswg * delTemp; if (T0 >= -1.0) { model->BSIM4v6SunitLengthGateSidewallTempJctCap = model->BSIM4v6SunitLengthGateSidewallJctCap *(1.0 + T0); model->BSIM4v6DunitLengthGateSidewallTempJctCap = model->BSIM4v6DunitLengthGateSidewallJctCap *(1.0 + T0); } else { if (model->BSIM4v6SunitLengthGateSidewallJctCap > 0.0) { model->BSIM4v6SunitLengthGateSidewallTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjswgs to be negative. Cjswgs is clamped to zero.\n"); } if (model->BSIM4v6DunitLengthGateSidewallJctCap > 0.0) { model->BSIM4v6DunitLengthGateSidewallTempJctCap = 0.0; fprintf(stderr, "Temperature effect has caused cjswgd to be negative. Cjswgd is clamped to zero.\n"); } } model->BSIM4v6PhiBS = model->BSIM4v6SbulkJctPotential - model->BSIM4v6tpb * delTemp; if (model->BSIM4v6PhiBS < 0.01) { model->BSIM4v6PhiBS = 0.01; fprintf(stderr, "Temperature effect has caused pbs to be less than 0.01. Pbs is clamped to 0.01.\n"); } model->BSIM4v6PhiBD = model->BSIM4v6DbulkJctPotential - model->BSIM4v6tpb * delTemp; if (model->BSIM4v6PhiBD < 0.01) { model->BSIM4v6PhiBD = 0.01; fprintf(stderr, "Temperature effect has caused pbd to be less than 0.01. Pbd is clamped to 0.01.\n"); } model->BSIM4v6PhiBSWS = model->BSIM4v6SsidewallJctPotential - model->BSIM4v6tpbsw * delTemp; if (model->BSIM4v6PhiBSWS <= 0.01) { model->BSIM4v6PhiBSWS = 0.01; fprintf(stderr, "Temperature effect has caused pbsws to be less than 0.01. Pbsws is clamped to 0.01.\n"); } model->BSIM4v6PhiBSWD = model->BSIM4v6DsidewallJctPotential - model->BSIM4v6tpbsw * delTemp; if (model->BSIM4v6PhiBSWD <= 0.01) { model->BSIM4v6PhiBSWD = 0.01; fprintf(stderr, "Temperature effect has caused pbswd to be less than 0.01. Pbswd is clamped to 0.01.\n"); } model->BSIM4v6PhiBSWGS = model->BSIM4v6SGatesidewallJctPotential - model->BSIM4v6tpbswg * delTemp; if (model->BSIM4v6PhiBSWGS <= 0.01) { model->BSIM4v6PhiBSWGS = 0.01; fprintf(stderr, "Temperature effect has caused pbswgs to be less than 0.01. Pbswgs is clamped to 0.01.\n"); } model->BSIM4v6PhiBSWGD = model->BSIM4v6DGatesidewallJctPotential - model->BSIM4v6tpbswg * delTemp; if (model->BSIM4v6PhiBSWGD <= 0.01) { model->BSIM4v6PhiBSWGD = 0.01; fprintf(stderr, "Temperature effect has caused pbswgd to be less than 0.01. Pbswgd is clamped to 0.01.\n"); } /* End of junction capacitance */ if (model->BSIM4v6ijthdfwd <= 0.0) { model->BSIM4v6ijthdfwd = 0.0; fprintf(stderr, "Ijthdfwd reset to %g.\n", model->BSIM4v6ijthdfwd); } if (model->BSIM4v6ijthsfwd <= 0.0) { model->BSIM4v6ijthsfwd = 0.0; fprintf(stderr, "Ijthsfwd reset to %g.\n", model->BSIM4v6ijthsfwd); } if (model->BSIM4v6ijthdrev <= 0.0) { model->BSIM4v6ijthdrev = 0.0; fprintf(stderr, "Ijthdrev reset to %g.\n", model->BSIM4v6ijthdrev); } if (model->BSIM4v6ijthsrev <= 0.0) { model->BSIM4v6ijthsrev = 0.0; fprintf(stderr, "Ijthsrev reset to %g.\n", model->BSIM4v6ijthsrev); } if ((model->BSIM4v6xjbvd <= 0.0) && (model->BSIM4v6dioMod == 2)) { model->BSIM4v6xjbvd = 0.0; fprintf(stderr, "Xjbvd reset to %g.\n", model->BSIM4v6xjbvd); } else if ((model->BSIM4v6xjbvd < 0.0) && (model->BSIM4v6dioMod == 0)) { model->BSIM4v6xjbvd = 0.0; fprintf(stderr, "Xjbvd reset to %g.\n", model->BSIM4v6xjbvd); } if (model->BSIM4v6bvd <= 0.0) /*4.6.2*/ { model->BSIM4v6bvd = 0.0; fprintf(stderr, "BVD reset to %g.\n", model->BSIM4v6bvd); } if ((model->BSIM4v6xjbvs <= 0.0) && (model->BSIM4v6dioMod == 2)) { model->BSIM4v6xjbvs = 0.0; fprintf(stderr, "Xjbvs reset to %g.\n", model->BSIM4v6xjbvs); } else if ((model->BSIM4v6xjbvs < 0.0) && (model->BSIM4v6dioMod == 0)) { model->BSIM4v6xjbvs = 0.0; fprintf(stderr, "Xjbvs reset to %g.\n", model->BSIM4v6xjbvs); } if (model->BSIM4v6bvs <= 0.0) { model->BSIM4v6bvs = 0.0; fprintf(stderr, "BVS reset to %g.\n", model->BSIM4v6bvs); } /* loop through all the instances of the model */ for (here = BSIM4v6instances(model); here != NULL; here = BSIM4v6nextInstance(here)) { pSizeDependParamKnot = model->pSizeDependParamKnot; Size_Not_Found = 1; while ((pSizeDependParamKnot != NULL) && Size_Not_Found) { if ((here->BSIM4v6l == pSizeDependParamKnot->Length) && (here->BSIM4v6w == pSizeDependParamKnot->Width) && (here->BSIM4v6nf == pSizeDependParamKnot->NFinger)) { Size_Not_Found = 0; here->pParam = pSizeDependParamKnot; pParam = here->pParam; /*bug-fix */ } else { pLastKnot = pSizeDependParamKnot; pSizeDependParamKnot = pSizeDependParamKnot->pNext; } } /* stress effect */ Ldrn = here->BSIM4v6l; Wdrn = here->BSIM4v6w / here->BSIM4v6nf; if (Size_Not_Found) { pParam = TMALLOC(struct bsim4v6SizeDependParam, 1); if (pLastKnot == NULL) model->pSizeDependParamKnot = pParam; else pLastKnot->pNext = pParam; pParam->pNext = NULL; here->pParam = pParam; pParam->Length = here->BSIM4v6l; pParam->Width = here->BSIM4v6w; pParam->NFinger = here->BSIM4v6nf; Lnew = here->BSIM4v6l + model->BSIM4v6xl ; Wnew = here->BSIM4v6w / here->BSIM4v6nf + model->BSIM4v6xw; T0 = pow(Lnew, model->BSIM4v6Lln); T1 = pow(Wnew, model->BSIM4v6Lwn); tmp1 = model->BSIM4v6Ll / T0 + model->BSIM4v6Lw / T1 + model->BSIM4v6Lwl / (T0 * T1); pParam->BSIM4v6dl = model->BSIM4v6Lint + tmp1; tmp2 = model->BSIM4v6Llc / T0 + model->BSIM4v6Lwc / T1 + model->BSIM4v6Lwlc / (T0 * T1); pParam->BSIM4v6dlc = model->BSIM4v6dlc + tmp2; T2 = pow(Lnew, model->BSIM4v6Wln); T3 = pow(Wnew, model->BSIM4v6Wwn); tmp1 = model->BSIM4v6Wl / T2 + model->BSIM4v6Ww / T3 + model->BSIM4v6Wwl / (T2 * T3); pParam->BSIM4v6dw = model->BSIM4v6Wint + tmp1; tmp2 = model->BSIM4v6Wlc / T2 + model->BSIM4v6Wwc / T3 + model->BSIM4v6Wwlc / (T2 * T3); pParam->BSIM4v6dwc = model->BSIM4v6dwc + tmp2; pParam->BSIM4v6dwj = model->BSIM4v6dwj + tmp2; pParam->BSIM4v6leff = Lnew - 2.0 * pParam->BSIM4v6dl; if (pParam->BSIM4v6leff <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM4v6: mosfet %s, model %s: Effective channel length <= 0", model->BSIM4v6modName, here->BSIM4v6name); return(E_BADPARM); } pParam->BSIM4v6weff = Wnew - 2.0 * pParam->BSIM4v6dw; if (pParam->BSIM4v6weff <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM4v6: mosfet %s, model %s: Effective channel width <= 0", model->BSIM4v6modName, here->BSIM4v6name); return(E_BADPARM); } pParam->BSIM4v6leffCV = Lnew - 2.0 * pParam->BSIM4v6dlc; if (pParam->BSIM4v6leffCV <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM4v6: mosfet %s, model %s: Effective channel length for C-V <= 0", model->BSIM4v6modName, here->BSIM4v6name); return(E_BADPARM); } pParam->BSIM4v6weffCV = Wnew - 2.0 * pParam->BSIM4v6dwc; if (pParam->BSIM4v6weffCV <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM4v6: mosfet %s, model %s: Effective channel width for C-V <= 0", model->BSIM4v6modName, here->BSIM4v6name); return(E_BADPARM); } pParam->BSIM4v6weffCJ = Wnew - 2.0 * pParam->BSIM4v6dwj; if (pParam->BSIM4v6weffCJ <= 0.0) { SPfrontEnd->IFerrorf (ERR_FATAL, "BSIM4v6: mosfet %s, model %s: Effective channel width for S/D junctions <= 0", model->BSIM4v6modName, here->BSIM4v6name); return(E_BADPARM); } if (model->BSIM4v6binUnit == 1) { Inv_L = 1.0e-6 / pParam->BSIM4v6leff; Inv_W = 1.0e-6 / pParam->BSIM4v6weff; Inv_LW = 1.0e-12 / (pParam->BSIM4v6leff * pParam->BSIM4v6weff); } else { Inv_L = 1.0 / pParam->BSIM4v6leff; Inv_W = 1.0 / pParam->BSIM4v6weff; Inv_LW = 1.0 / (pParam->BSIM4v6leff * pParam->BSIM4v6weff); } pParam->BSIM4v6cdsc = model->BSIM4v6cdsc + model->BSIM4v6lcdsc * Inv_L + model->BSIM4v6wcdsc * Inv_W + model->BSIM4v6pcdsc * Inv_LW; pParam->BSIM4v6cdscb = model->BSIM4v6cdscb + model->BSIM4v6lcdscb * Inv_L + model->BSIM4v6wcdscb * Inv_W + model->BSIM4v6pcdscb * Inv_LW; pParam->BSIM4v6cdscd = model->BSIM4v6cdscd + model->BSIM4v6lcdscd * Inv_L + model->BSIM4v6wcdscd * Inv_W + model->BSIM4v6pcdscd * Inv_LW; pParam->BSIM4v6cit = model->BSIM4v6cit + model->BSIM4v6lcit * Inv_L + model->BSIM4v6wcit * Inv_W + model->BSIM4v6pcit * Inv_LW; pParam->BSIM4v6nfactor = model->BSIM4v6nfactor + model->BSIM4v6lnfactor * Inv_L + model->BSIM4v6wnfactor * Inv_W + model->BSIM4v6pnfactor * Inv_LW; pParam->BSIM4v6xj = model->BSIM4v6xj + model->BSIM4v6lxj * Inv_L + model->BSIM4v6wxj * Inv_W + model->BSIM4v6pxj * Inv_LW; pParam->BSIM4v6vsat = model->BSIM4v6vsat + model->BSIM4v6lvsat * Inv_L + model->BSIM4v6wvsat * Inv_W + model->BSIM4v6pvsat * Inv_LW; pParam->BSIM4v6at = model->BSIM4v6at + model->BSIM4v6lat * Inv_L + model->BSIM4v6wat * Inv_W + model->BSIM4v6pat * Inv_LW; pParam->BSIM4v6a0 = model->BSIM4v6a0 + model->BSIM4v6la0 * Inv_L + model->BSIM4v6wa0 * Inv_W + model->BSIM4v6pa0 * Inv_LW; pParam->BSIM4v6ags = model->BSIM4v6ags + model->BSIM4v6lags * Inv_L + model->BSIM4v6wags * Inv_W + model->BSIM4v6pags * Inv_LW; pParam->BSIM4v6a1 = model->BSIM4v6a1 + model->BSIM4v6la1 * Inv_L + model->BSIM4v6wa1 * Inv_W + model->BSIM4v6pa1 * Inv_LW; pParam->BSIM4v6a2 = model->BSIM4v6a2 + model->BSIM4v6la2 * Inv_L + model->BSIM4v6wa2 * Inv_W + model->BSIM4v6pa2 * Inv_LW; pParam->BSIM4v6keta = model->BSIM4v6keta + model->BSIM4v6lketa * Inv_L + model->BSIM4v6wketa * Inv_W + model->BSIM4v6pketa * Inv_LW; pParam->BSIM4v6nsub = model->BSIM4v6nsub + model->BSIM4v6lnsub * Inv_L + model->BSIM4v6wnsub * Inv_W + model->BSIM4v6pnsub * Inv_LW; pParam->BSIM4v6ndep = model->BSIM4v6ndep + model->BSIM4v6lndep * Inv_L + model->BSIM4v6wndep * Inv_W + model->BSIM4v6pndep * Inv_LW; pParam->BSIM4v6nsd = model->BSIM4v6nsd + model->BSIM4v6lnsd * Inv_L + model->BSIM4v6wnsd * Inv_W + model->BSIM4v6pnsd * Inv_LW; pParam->BSIM4v6phin = model->BSIM4v6phin + model->BSIM4v6lphin * Inv_L + model->BSIM4v6wphin * Inv_W + model->BSIM4v6pphin * Inv_LW; pParam->BSIM4v6ngate = model->BSIM4v6ngate + model->BSIM4v6lngate * Inv_L + model->BSIM4v6wngate * Inv_W + model->BSIM4v6pngate * Inv_LW; pParam->BSIM4v6gamma1 = model->BSIM4v6gamma1 + model->BSIM4v6lgamma1 * Inv_L + model->BSIM4v6wgamma1 * Inv_W + model->BSIM4v6pgamma1 * Inv_LW; pParam->BSIM4v6gamma2 = model->BSIM4v6gamma2 + model->BSIM4v6lgamma2 * Inv_L + model->BSIM4v6wgamma2 * Inv_W + model->BSIM4v6pgamma2 * Inv_LW; pParam->BSIM4v6vbx = model->BSIM4v6vbx + model->BSIM4v6lvbx * Inv_L + model->BSIM4v6wvbx * Inv_W + model->BSIM4v6pvbx * Inv_LW; pParam->BSIM4v6vbm = model->BSIM4v6vbm + model->BSIM4v6lvbm * Inv_L + model->BSIM4v6wvbm * Inv_W + model->BSIM4v6pvbm * Inv_LW; pParam->BSIM4v6xt = model->BSIM4v6xt + model->BSIM4v6lxt * Inv_L + model->BSIM4v6wxt * Inv_W + model->BSIM4v6pxt * Inv_LW; pParam->BSIM4v6vfb = model->BSIM4v6vfb + model->BSIM4v6lvfb * Inv_L + model->BSIM4v6wvfb * Inv_W + model->BSIM4v6pvfb * Inv_LW; pParam->BSIM4v6k1 = model->BSIM4v6k1 + model->BSIM4v6lk1 * Inv_L + model->BSIM4v6wk1 * Inv_W + model->BSIM4v6pk1 * Inv_LW; pParam->BSIM4v6kt1 = model->BSIM4v6kt1 + model->BSIM4v6lkt1 * Inv_L + model->BSIM4v6wkt1 * Inv_W + model->BSIM4v6pkt1 * Inv_LW; pParam->BSIM4v6kt1l = model->BSIM4v6kt1l + model->BSIM4v6lkt1l * Inv_L + model->BSIM4v6wkt1l * Inv_W + model->BSIM4v6pkt1l * Inv_LW; pParam->BSIM4v6k2 = model->BSIM4v6k2 + model->BSIM4v6lk2 * Inv_L + model->BSIM4v6wk2 * Inv_W + model->BSIM4v6pk2 * Inv_LW; pParam->BSIM4v6kt2 = model->BSIM4v6kt2 + model->BSIM4v6lkt2 * Inv_L + model->BSIM4v6wkt2 * Inv_W + model->BSIM4v6pkt2 * Inv_LW; pParam->BSIM4v6k3 = model->BSIM4v6k3 + model->BSIM4v6lk3 * Inv_L + model->BSIM4v6wk3 * Inv_W + model->BSIM4v6pk3 * Inv_LW; pParam->BSIM4v6k3b = model->BSIM4v6k3b + model->BSIM4v6lk3b * Inv_L + model->BSIM4v6wk3b * Inv_W + model->BSIM4v6pk3b * Inv_LW; pParam->BSIM4v6w0 = model->BSIM4v6w0 + model->BSIM4v6lw0 * Inv_L + model->BSIM4v6ww0 * Inv_W + model->BSIM4v6pw0 * Inv_LW; pParam->BSIM4v6lpe0 = model->BSIM4v6lpe0 + model->BSIM4v6llpe0 * Inv_L + model->BSIM4v6wlpe0 * Inv_W + model->BSIM4v6plpe0 * Inv_LW; pParam->BSIM4v6lpeb = model->BSIM4v6lpeb + model->BSIM4v6llpeb * Inv_L + model->BSIM4v6wlpeb * Inv_W + model->BSIM4v6plpeb * Inv_LW; pParam->BSIM4v6dvtp0 = model->BSIM4v6dvtp0 + model->BSIM4v6ldvtp0 * Inv_L + model->BSIM4v6wdvtp0 * Inv_W + model->BSIM4v6pdvtp0 * Inv_LW; pParam->BSIM4v6dvtp1 = model->BSIM4v6dvtp1 + model->BSIM4v6ldvtp1 * Inv_L + model->BSIM4v6wdvtp1 * Inv_W + model->BSIM4v6pdvtp1 * Inv_LW; pParam->BSIM4v6dvt0 = model->BSIM4v6dvt0 + model->BSIM4v6ldvt0 * Inv_L + model->BSIM4v6wdvt0 * Inv_W + model->BSIM4v6pdvt0 * Inv_LW; pParam->BSIM4v6dvt1 = model->BSIM4v6dvt1 + model->BSIM4v6ldvt1 * Inv_L + model->BSIM4v6wdvt1 * Inv_W + model->BSIM4v6pdvt1 * Inv_LW; pParam->BSIM4v6dvt2 = model->BSIM4v6dvt2 + model->BSIM4v6ldvt2 * Inv_L + model->BSIM4v6wdvt2 * Inv_W + model->BSIM4v6pdvt2 * Inv_LW; pParam->BSIM4v6dvt0w = model->BSIM4v6dvt0w + model->BSIM4v6ldvt0w * Inv_L + model->BSIM4v6wdvt0w * Inv_W + model->BSIM4v6pdvt0w * Inv_LW; pParam->BSIM4v6dvt1w = model->BSIM4v6dvt1w + model->BSIM4v6ldvt1w * Inv_L + model->BSIM4v6wdvt1w * Inv_W + model->BSIM4v6pdvt1w * Inv_LW; pParam->BSIM4v6dvt2w = model->BSIM4v6dvt2w + model->BSIM4v6ldvt2w * Inv_L + model->BSIM4v6wdvt2w * Inv_W + model->BSIM4v6pdvt2w * Inv_LW; pParam->BSIM4v6drout = model->BSIM4v6drout + model->BSIM4v6ldrout * Inv_L + model->BSIM4v6wdrout * Inv_W + model->BSIM4v6pdrout * Inv_LW; pParam->BSIM4v6dsub = model->BSIM4v6dsub + model->BSIM4v6ldsub * Inv_L + model->BSIM4v6wdsub * Inv_W + model->BSIM4v6pdsub * Inv_LW; pParam->BSIM4v6vth0 = model->BSIM4v6vth0 + model->BSIM4v6lvth0 * Inv_L + model->BSIM4v6wvth0 * Inv_W + model->BSIM4v6pvth0 * Inv_LW; pParam->BSIM4v6ua = model->BSIM4v6ua + model->BSIM4v6lua * Inv_L + model->BSIM4v6wua * Inv_W + model->BSIM4v6pua * Inv_LW; pParam->BSIM4v6ua1 = model->BSIM4v6ua1 + model->BSIM4v6lua1 * Inv_L + model->BSIM4v6wua1 * Inv_W + model->BSIM4v6pua1 * Inv_LW; pParam->BSIM4v6ub = model->BSIM4v6ub + model->BSIM4v6lub * Inv_L + model->BSIM4v6wub * Inv_W + model->BSIM4v6pub * Inv_LW; pParam->BSIM4v6ub1 = model->BSIM4v6ub1 + model->BSIM4v6lub1 * Inv_L + model->BSIM4v6wub1 * Inv_W + model->BSIM4v6pub1 * Inv_LW; pParam->BSIM4v6uc = model->BSIM4v6uc + model->BSIM4v6luc * Inv_L + model->BSIM4v6wuc * Inv_W + model->BSIM4v6puc * Inv_LW; pParam->BSIM4v6uc1 = model->BSIM4v6uc1 + model->BSIM4v6luc1 * Inv_L + model->BSIM4v6wuc1 * Inv_W + model->BSIM4v6puc1 * Inv_LW; pParam->BSIM4v6ud = model->BSIM4v6ud + model->BSIM4v6lud * Inv_L + model->BSIM4v6wud * Inv_W + model->BSIM4v6pud * Inv_LW; pParam->BSIM4v6ud1 = model->BSIM4v6ud1 + model->BSIM4v6lud1 * Inv_L + model->BSIM4v6wud1 * Inv_W + model->BSIM4v6pud1 * Inv_LW; pParam->BSIM4v6up = model->BSIM4v6up + model->BSIM4v6lup * Inv_L + model->BSIM4v6wup * Inv_W + model->BSIM4v6pup * Inv_LW; pParam->BSIM4v6lp = model->BSIM4v6lp + model->BSIM4v6llp * Inv_L + model->BSIM4v6wlp * Inv_W + model->BSIM4v6plp * Inv_LW; pParam->BSIM4v6eu = model->BSIM4v6eu + model->BSIM4v6leu * Inv_L + model->BSIM4v6weu * Inv_W + model->BSIM4v6peu * Inv_LW; pParam->BSIM4v6u0 = model->BSIM4v6u0 + model->BSIM4v6lu0 * Inv_L + model->BSIM4v6wu0 * Inv_W + model->BSIM4v6pu0 * Inv_LW; pParam->BSIM4v6ute = model->BSIM4v6ute + model->BSIM4v6lute * Inv_L + model->BSIM4v6wute * Inv_W + model->BSIM4v6pute * Inv_LW; /*high k mobility*/ pParam->BSIM4v6ucs = model->BSIM4v6ucs + model->BSIM4v6lucs * Inv_L + model->BSIM4v6wucs * Inv_W + model->BSIM4v6pucs * Inv_LW; pParam->BSIM4v6ucste = model->BSIM4v6ucste + model->BSIM4v6lucste * Inv_L + model->BSIM4v6wucste * Inv_W + model->BSIM4v6pucste * Inv_LW; pParam->BSIM4v6voff = model->BSIM4v6voff + model->BSIM4v6lvoff * Inv_L + model->BSIM4v6wvoff * Inv_W + model->BSIM4v6pvoff * Inv_LW; pParam->BSIM4v6tvoff = model->BSIM4v6tvoff + model->BSIM4v6ltvoff * Inv_L + model->BSIM4v6wtvoff * Inv_W + model->BSIM4v6ptvoff * Inv_LW; pParam->BSIM4v6minv = model->BSIM4v6minv + model->BSIM4v6lminv * Inv_L + model->BSIM4v6wminv * Inv_W + model->BSIM4v6pminv * Inv_LW; pParam->BSIM4v6minvcv = model->BSIM4v6minvcv + model->BSIM4v6lminvcv * Inv_L + model->BSIM4v6wminvcv * Inv_W + model->BSIM4v6pminvcv * Inv_LW; pParam->BSIM4v6fprout = model->BSIM4v6fprout + model->BSIM4v6lfprout * Inv_L + model->BSIM4v6wfprout * Inv_W + model->BSIM4v6pfprout * Inv_LW; pParam->BSIM4v6pdits = model->BSIM4v6pdits + model->BSIM4v6lpdits * Inv_L + model->BSIM4v6wpdits * Inv_W + model->BSIM4v6ppdits * Inv_LW; pParam->BSIM4v6pditsd = model->BSIM4v6pditsd + model->BSIM4v6lpditsd * Inv_L + model->BSIM4v6wpditsd * Inv_W + model->BSIM4v6ppditsd * Inv_LW; pParam->BSIM4v6delta = model->BSIM4v6delta + model->BSIM4v6ldelta * Inv_L + model->BSIM4v6wdelta * Inv_W + model->BSIM4v6pdelta * Inv_LW; pParam->BSIM4v6rdsw = model->BSIM4v6rdsw + model->BSIM4v6lrdsw * Inv_L + model->BSIM4v6wrdsw * Inv_W + model->BSIM4v6prdsw * Inv_LW; pParam->BSIM4v6rdw = model->BSIM4v6rdw + model->BSIM4v6lrdw * Inv_L + model->BSIM4v6wrdw * Inv_W + model->BSIM4v6prdw * Inv_LW; pParam->BSIM4v6rsw = model->BSIM4v6rsw + model->BSIM4v6lrsw * Inv_L + model->BSIM4v6wrsw * Inv_W + model->BSIM4v6prsw * Inv_LW; pParam->BSIM4v6prwg = model->BSIM4v6prwg + model->BSIM4v6lprwg * Inv_L + model->BSIM4v6wprwg * Inv_W + model->BSIM4v6pprwg * Inv_LW; pParam->BSIM4v6prwb = model->BSIM4v6prwb + model->BSIM4v6lprwb * Inv_L + model->BSIM4v6wprwb * Inv_W + model->BSIM4v6pprwb * Inv_LW; pParam->BSIM4v6prt = model->BSIM4v6prt + model->BSIM4v6lprt * Inv_L + model->BSIM4v6wprt * Inv_W + model->BSIM4v6pprt * Inv_LW; pParam->BSIM4v6eta0 = model->BSIM4v6eta0 + model->BSIM4v6leta0 * Inv_L + model->BSIM4v6weta0 * Inv_W + model->BSIM4v6peta0 * Inv_LW; pParam->BSIM4v6etab = model->BSIM4v6etab + model->BSIM4v6letab * Inv_L + model->BSIM4v6wetab * Inv_W + model->BSIM4v6petab * Inv_LW; pParam->BSIM4v6pclm = model->BSIM4v6pclm + model->BSIM4v6lpclm * Inv_L + model->BSIM4v6wpclm * Inv_W + model->BSIM4v6ppclm * Inv_LW; pParam->BSIM4v6pdibl1 = model->BSIM4v6pdibl1 + model->BSIM4v6lpdibl1 * Inv_L + model->BSIM4v6wpdibl1 * Inv_W + model->BSIM4v6ppdibl1 * Inv_LW; pParam->BSIM4v6pdibl2 = model->BSIM4v6pdibl2 + model->BSIM4v6lpdibl2 * Inv_L + model->BSIM4v6wpdibl2 * Inv_W + model->BSIM4v6ppdibl2 * Inv_LW; pParam->BSIM4v6pdiblb = model->BSIM4v6pdiblb + model->BSIM4v6lpdiblb * Inv_L + model->BSIM4v6wpdiblb * Inv_W + model->BSIM4v6ppdiblb * Inv_LW; pParam->BSIM4v6pscbe1 = model->BSIM4v6pscbe1 + model->BSIM4v6lpscbe1 * Inv_L + model->BSIM4v6wpscbe1 * Inv_W + model->BSIM4v6ppscbe1 * Inv_LW; pParam->BSIM4v6pscbe2 = model->BSIM4v6pscbe2 + model->BSIM4v6lpscbe2 * Inv_L + model->BSIM4v6wpscbe2 * Inv_W + model->BSIM4v6ppscbe2 * Inv_LW; pParam->BSIM4v6pvag = model->BSIM4v6pvag + model->BSIM4v6lpvag * Inv_L + model->BSIM4v6wpvag * Inv_W + model->BSIM4v6ppvag * Inv_LW; pParam->BSIM4v6wr = model->BSIM4v6wr + model->BSIM4v6lwr * Inv_L + model->BSIM4v6wwr * Inv_W + model->BSIM4v6pwr * Inv_LW; pParam->BSIM4v6dwg = model->BSIM4v6dwg + model->BSIM4v6ldwg * Inv_L + model->BSIM4v6wdwg * Inv_W + model->BSIM4v6pdwg * Inv_LW; pParam->BSIM4v6dwb = model->BSIM4v6dwb + model->BSIM4v6ldwb * Inv_L + model->BSIM4v6wdwb * Inv_W + model->BSIM4v6pdwb * Inv_LW; pParam->BSIM4v6b0 = model->BSIM4v6b0 + model->BSIM4v6lb0 * Inv_L + model->BSIM4v6wb0 * Inv_W + model->BSIM4v6pb0 * Inv_LW; pParam->BSIM4v6b1 = model->BSIM4v6b1 + model->BSIM4v6lb1 * Inv_L + model->BSIM4v6wb1 * Inv_W + model->BSIM4v6pb1 * Inv_LW; pParam->BSIM4v6alpha0 = model->BSIM4v6alpha0 + model->BSIM4v6lalpha0 * Inv_L + model->BSIM4v6walpha0 * Inv_W + model->BSIM4v6palpha0 * Inv_LW; pParam->BSIM4v6alpha1 = model->BSIM4v6alpha1 + model->BSIM4v6lalpha1 * Inv_L + model->BSIM4v6walpha1 * Inv_W + model->BSIM4v6palpha1 * Inv_LW; pParam->BSIM4v6beta0 = model->BSIM4v6beta0 + model->BSIM4v6lbeta0 * Inv_L + model->BSIM4v6wbeta0 * Inv_W + model->BSIM4v6pbeta0 * Inv_LW; pParam->BSIM4v6agidl = model->BSIM4v6agidl + model->BSIM4v6lagidl * Inv_L + model->BSIM4v6wagidl * Inv_W + model->BSIM4v6pagidl * Inv_LW; pParam->BSIM4v6bgidl = model->BSIM4v6bgidl + model->BSIM4v6lbgidl * Inv_L + model->BSIM4v6wbgidl * Inv_W + model->BSIM4v6pbgidl * Inv_LW; pParam->BSIM4v6cgidl = model->BSIM4v6cgidl + model->BSIM4v6lcgidl * Inv_L + model->BSIM4v6wcgidl * Inv_W + model->BSIM4v6pcgidl * Inv_LW; pParam->BSIM4v6egidl = model->BSIM4v6egidl + model->BSIM4v6legidl * Inv_L + model->BSIM4v6wegidl * Inv_W + model->BSIM4v6pegidl * Inv_LW; pParam->BSIM4v6agisl = model->BSIM4v6agisl + model->BSIM4v6lagisl * Inv_L + model->BSIM4v6wagisl * Inv_W + model->BSIM4v6pagisl * Inv_LW; pParam->BSIM4v6bgisl = model->BSIM4v6bgisl + model->BSIM4v6lbgisl * Inv_L + model->BSIM4v6wbgisl * Inv_W + model->BSIM4v6pbgisl * Inv_LW; pParam->BSIM4v6cgisl = model->BSIM4v6cgisl + model->BSIM4v6lcgisl * Inv_L + model->BSIM4v6wcgisl * Inv_W + model->BSIM4v6pcgisl * Inv_LW; pParam->BSIM4v6egisl = model->BSIM4v6egisl + model->BSIM4v6legisl * Inv_L + model->BSIM4v6wegisl * Inv_W + model->BSIM4v6pegisl * Inv_LW; pParam->BSIM4v6aigc = model->BSIM4v6aigc + model->BSIM4v6laigc * Inv_L + model->BSIM4v6waigc * Inv_W + model->BSIM4v6paigc * Inv_LW; pParam->BSIM4v6bigc = model->BSIM4v6bigc + model->BSIM4v6lbigc * Inv_L + model->BSIM4v6wbigc * Inv_W + model->BSIM4v6pbigc * Inv_LW; pParam->BSIM4v6cigc = model->BSIM4v6cigc + model->BSIM4v6lcigc * Inv_L + model->BSIM4v6wcigc * Inv_W + model->BSIM4v6pcigc * Inv_LW; pParam->BSIM4v6aigs = model->BSIM4v6aigs + model->BSIM4v6laigs * Inv_L + model->BSIM4v6waigs * Inv_W + model->BSIM4v6paigs * Inv_LW; pParam->BSIM4v6bigs = model->BSIM4v6bigs + model->BSIM4v6lbigs * Inv_L + model->BSIM4v6wbigs * Inv_W + model->BSIM4v6pbigs * Inv_LW; pParam->BSIM4v6cigs = model->BSIM4v6cigs + model->BSIM4v6lcigs * Inv_L + model->BSIM4v6wcigs * Inv_W + model->BSIM4v6pcigs * Inv_LW; pParam->BSIM4v6aigd = model->BSIM4v6aigd + model->BSIM4v6laigd * Inv_L + model->BSIM4v6waigd * Inv_W + model->BSIM4v6paigd * Inv_LW; pParam->BSIM4v6bigd = model->BSIM4v6bigd + model->BSIM4v6lbigd * Inv_L + model->BSIM4v6wbigd * Inv_W + model->BSIM4v6pbigd * Inv_LW; pParam->BSIM4v6cigd = model->BSIM4v6cigd + model->BSIM4v6lcigd * Inv_L + model->BSIM4v6wcigd * Inv_W + model->BSIM4v6pcigd * Inv_LW; pParam->BSIM4v6aigbacc = model->BSIM4v6aigbacc + model->BSIM4v6laigbacc * Inv_L + model->BSIM4v6waigbacc * Inv_W + model->BSIM4v6paigbacc * Inv_LW; pParam->BSIM4v6bigbacc = model->BSIM4v6bigbacc + model->BSIM4v6lbigbacc * Inv_L + model->BSIM4v6wbigbacc * Inv_W + model->BSIM4v6pbigbacc * Inv_LW; pParam->BSIM4v6cigbacc = model->BSIM4v6cigbacc + model->BSIM4v6lcigbacc * Inv_L + model->BSIM4v6wcigbacc * Inv_W + model->BSIM4v6pcigbacc * Inv_LW; pParam->BSIM4v6aigbinv = model->BSIM4v6aigbinv + model->BSIM4v6laigbinv * Inv_L + model->BSIM4v6waigbinv * Inv_W + model->BSIM4v6paigbinv * Inv_LW; pParam->BSIM4v6bigbinv = model->BSIM4v6bigbinv + model->BSIM4v6lbigbinv * Inv_L + model->BSIM4v6wbigbinv * Inv_W + model->BSIM4v6pbigbinv * Inv_LW; pParam->BSIM4v6cigbinv = model->BSIM4v6cigbinv + model->BSIM4v6lcigbinv * Inv_L + model->BSIM4v6wcigbinv * Inv_W + model->BSIM4v6pcigbinv * Inv_LW; pParam->BSIM4v6nigc = model->BSIM4v6nigc + model->BSIM4v6lnigc * Inv_L + model->BSIM4v6wnigc * Inv_W + model->BSIM4v6pnigc * Inv_LW; pParam->BSIM4v6nigbacc = model->BSIM4v6nigbacc + model->BSIM4v6lnigbacc * Inv_L + model->BSIM4v6wnigbacc * Inv_W + model->BSIM4v6pnigbacc * Inv_LW; pParam->BSIM4v6nigbinv = model->BSIM4v6nigbinv + model->BSIM4v6lnigbinv * Inv_L + model->BSIM4v6wnigbinv * Inv_W + model->BSIM4v6pnigbinv * Inv_LW; pParam->BSIM4v6ntox = model->BSIM4v6ntox + model->BSIM4v6lntox * Inv_L + model->BSIM4v6wntox * Inv_W + model->BSIM4v6pntox * Inv_LW; pParam->BSIM4v6eigbinv = model->BSIM4v6eigbinv + model->BSIM4v6leigbinv * Inv_L + model->BSIM4v6weigbinv * Inv_W + model->BSIM4v6peigbinv * Inv_LW; pParam->BSIM4v6pigcd = model->BSIM4v6pigcd + model->BSIM4v6lpigcd * Inv_L + model->BSIM4v6wpigcd * Inv_W + model->BSIM4v6ppigcd * Inv_LW; pParam->BSIM4v6poxedge = model->BSIM4v6poxedge + model->BSIM4v6lpoxedge * Inv_L + model->BSIM4v6wpoxedge * Inv_W + model->BSIM4v6ppoxedge * Inv_LW; pParam->BSIM4v6xrcrg1 = model->BSIM4v6xrcrg1 + model->BSIM4v6lxrcrg1 * Inv_L + model->BSIM4v6wxrcrg1 * Inv_W + model->BSIM4v6pxrcrg1 * Inv_LW; pParam->BSIM4v6xrcrg2 = model->BSIM4v6xrcrg2 + model->BSIM4v6lxrcrg2 * Inv_L + model->BSIM4v6wxrcrg2 * Inv_W + model->BSIM4v6pxrcrg2 * Inv_LW; pParam->BSIM4v6lambda = model->BSIM4v6lambda + model->BSIM4v6llambda * Inv_L + model->BSIM4v6wlambda * Inv_W + model->BSIM4v6plambda * Inv_LW; pParam->BSIM4v6vtl = model->BSIM4v6vtl + model->BSIM4v6lvtl * Inv_L + model->BSIM4v6wvtl * Inv_W + model->BSIM4v6pvtl * Inv_LW; pParam->BSIM4v6xn = model->BSIM4v6xn + model->BSIM4v6lxn * Inv_L + model->BSIM4v6wxn * Inv_W + model->BSIM4v6pxn * Inv_LW; pParam->BSIM4v6vfbsdoff = model->BSIM4v6vfbsdoff + model->BSIM4v6lvfbsdoff * Inv_L + model->BSIM4v6wvfbsdoff * Inv_W + model->BSIM4v6pvfbsdoff * Inv_LW; pParam->BSIM4v6tvfbsdoff = model->BSIM4v6tvfbsdoff + model->BSIM4v6ltvfbsdoff * Inv_L + model->BSIM4v6wtvfbsdoff * Inv_W + model->BSIM4v6ptvfbsdoff * Inv_LW; pParam->BSIM4v6cgsl = model->BSIM4v6cgsl + model->BSIM4v6lcgsl * Inv_L + model->BSIM4v6wcgsl * Inv_W + model->BSIM4v6pcgsl * Inv_LW; pParam->BSIM4v6cgdl = model->BSIM4v6cgdl + model->BSIM4v6lcgdl * Inv_L + model->BSIM4v6wcgdl * Inv_W + model->BSIM4v6pcgdl * Inv_LW; pParam->BSIM4v6ckappas = model->BSIM4v6ckappas + model->BSIM4v6lckappas * Inv_L + model->BSIM4v6wckappas * Inv_W + model->BSIM4v6pckappas * Inv_LW; pParam->BSIM4v6ckappad = model->BSIM4v6ckappad + model->BSIM4v6lckappad * Inv_L + model->BSIM4v6wckappad * Inv_W + model->BSIM4v6pckappad * Inv_LW; pParam->BSIM4v6cf = model->BSIM4v6cf + model->BSIM4v6lcf * Inv_L + model->BSIM4v6wcf * Inv_W + model->BSIM4v6pcf * Inv_LW; pParam->BSIM4v6clc = model->BSIM4v6clc + model->BSIM4v6lclc * Inv_L + model->BSIM4v6wclc * Inv_W + model->BSIM4v6pclc * Inv_LW; pParam->BSIM4v6cle = model->BSIM4v6cle + model->BSIM4v6lcle * Inv_L + model->BSIM4v6wcle * Inv_W + model->BSIM4v6pcle * Inv_LW; pParam->BSIM4v6vfbcv = model->BSIM4v6vfbcv + model->BSIM4v6lvfbcv * Inv_L + model->BSIM4v6wvfbcv * Inv_W + model->BSIM4v6pvfbcv * Inv_LW; pParam->BSIM4v6acde = model->BSIM4v6acde + model->BSIM4v6lacde * Inv_L + model->BSIM4v6wacde * Inv_W + model->BSIM4v6pacde * Inv_LW; pParam->BSIM4v6moin = model->BSIM4v6moin + model->BSIM4v6lmoin * Inv_L + model->BSIM4v6wmoin * Inv_W + model->BSIM4v6pmoin * Inv_LW; pParam->BSIM4v6noff = model->BSIM4v6noff + model->BSIM4v6lnoff * Inv_L + model->BSIM4v6wnoff * Inv_W + model->BSIM4v6pnoff * Inv_LW; pParam->BSIM4v6voffcv = model->BSIM4v6voffcv + model->BSIM4v6lvoffcv * Inv_L + model->BSIM4v6wvoffcv * Inv_W + model->BSIM4v6pvoffcv * Inv_LW; pParam->BSIM4v6kvth0we = model->BSIM4v6kvth0we + model->BSIM4v6lkvth0we * Inv_L + model->BSIM4v6wkvth0we * Inv_W + model->BSIM4v6pkvth0we * Inv_LW; pParam->BSIM4v6k2we = model->BSIM4v6k2we + model->BSIM4v6lk2we * Inv_L + model->BSIM4v6wk2we * Inv_W + model->BSIM4v6pk2we * Inv_LW; pParam->BSIM4v6ku0we = model->BSIM4v6ku0we + model->BSIM4v6lku0we * Inv_L + model->BSIM4v6wku0we * Inv_W + model->BSIM4v6pku0we * Inv_LW; pParam->BSIM4v6abulkCVfactor = 1.0 + pow((pParam->BSIM4v6clc / pParam->BSIM4v6leffCV), pParam->BSIM4v6cle); T0 = (TRatio - 1.0); PowWeffWr = pow(pParam->BSIM4v6weffCJ * 1.0e6, pParam->BSIM4v6wr) * here->BSIM4v6nf; T1 = T2 = T3 = T4 = 0.0; pParam->BSIM4v6ucs = pParam->BSIM4v6ucs * pow(TRatio, pParam->BSIM4v6ucste); if(model->BSIM4v6tempMod == 0) { pParam->BSIM4v6ua = pParam->BSIM4v6ua + pParam->BSIM4v6ua1 * T0; pParam->BSIM4v6ub = pParam->BSIM4v6ub + pParam->BSIM4v6ub1 * T0; pParam->BSIM4v6uc = pParam->BSIM4v6uc + pParam->BSIM4v6uc1 * T0; pParam->BSIM4v6ud = pParam->BSIM4v6ud + pParam->BSIM4v6ud1 * T0; pParam->BSIM4v6vsattemp = pParam->BSIM4v6vsat - pParam->BSIM4v6at * T0; T10 = pParam->BSIM4v6prt * T0; if(model->BSIM4v6rdsMod) { /* External Rd(V) */ T1 = pParam->BSIM4v6rdw + T10; T2 = model->BSIM4v6rdwmin + T10; /* External Rs(V) */ T3 = pParam->BSIM4v6rsw + T10; T4 = model->BSIM4v6rswmin + T10; } /* Internal Rds(V) in IV */ pParam->BSIM4v6rds0 = (pParam->BSIM4v6rdsw + T10) * here->BSIM4v6nf / PowWeffWr; pParam->BSIM4v6rdswmin = (model->BSIM4v6rdswmin + T10) * here->BSIM4v6nf / PowWeffWr; } else { if (model->BSIM4v6tempMod == 3) {pParam->BSIM4v6ua = pParam->BSIM4v6ua * pow(TRatio, pParam->BSIM4v6ua1) ; pParam->BSIM4v6ub = pParam->BSIM4v6ub * pow(TRatio, pParam->BSIM4v6ub1); pParam->BSIM4v6uc = pParam->BSIM4v6uc * pow(TRatio, pParam->BSIM4v6uc1); pParam->BSIM4v6ud = pParam->BSIM4v6ud * pow(TRatio, pParam->BSIM4v6ud1); } else{ /* tempMod = 1, 2 */ pParam->BSIM4v6ua = pParam->BSIM4v6ua * (1.0 + pParam->BSIM4v6ua1 * delTemp) ; pParam->BSIM4v6ub = pParam->BSIM4v6ub * (1.0 + pParam->BSIM4v6ub1 * delTemp); pParam->BSIM4v6uc = pParam->BSIM4v6uc * (1.0 + pParam->BSIM4v6uc1 * delTemp); pParam->BSIM4v6ud = pParam->BSIM4v6ud * (1.0 + pParam->BSIM4v6ud1 * delTemp); } pParam->BSIM4v6vsattemp = pParam->BSIM4v6vsat * (1.0 - pParam->BSIM4v6at * delTemp); T10 = 1.0 + pParam->BSIM4v6prt * delTemp; if(model->BSIM4v6rdsMod) { /* External Rd(V) */ T1 = pParam->BSIM4v6rdw * T10; T2 = model->BSIM4v6rdwmin * T10; /* External Rs(V) */ T3 = pParam->BSIM4v6rsw * T10; T4 = model->BSIM4v6rswmin * T10; } /* Internal Rds(V) in IV */ pParam->BSIM4v6rds0 = pParam->BSIM4v6rdsw * T10 * here->BSIM4v6nf / PowWeffWr; pParam->BSIM4v6rdswmin = model->BSIM4v6rdswmin * T10 * here->BSIM4v6nf / PowWeffWr; } if (T1 < 0.0) { T1 = 0.0; printf("Warning: Rdw at current temperature is negative; set to 0.\n"); } if (T2 < 0.0) { T2 = 0.0; printf("Warning: Rdwmin at current temperature is negative; set to 0.\n"); } pParam->BSIM4v6rd0 = T1 / PowWeffWr; pParam->BSIM4v6rdwmin = T2 / PowWeffWr; if (T3 < 0.0) { T3 = 0.0; printf("Warning: Rsw at current temperature is negative; set to 0.\n"); } if (T4 < 0.0) { T4 = 0.0; printf("Warning: Rswmin at current temperature is negative; set to 0.\n"); } pParam->BSIM4v6rs0 = T3 / PowWeffWr; pParam->BSIM4v6rswmin = T4 / PowWeffWr; if (pParam->BSIM4v6u0 > 1.0) pParam->BSIM4v6u0 = pParam->BSIM4v6u0 / 1.0e4; /* mobility channel length dependence */ T5 = 1.0 - pParam->BSIM4v6up * exp( - pParam->BSIM4v6leff / pParam->BSIM4v6lp); pParam->BSIM4v6u0temp = pParam->BSIM4v6u0 * T5 * pow(TRatio, pParam->BSIM4v6ute); if (pParam->BSIM4v6eu < 0.0) { pParam->BSIM4v6eu = 0.0; printf("Warning: eu has been negative; reset to 0.0.\n"); } if (pParam->BSIM4v6ucs < 0.0) { pParam->BSIM4v6ucs = 0.0; printf("Warning: ucs has been negative; reset to 0.0.\n"); } pParam->BSIM4v6vfbsdoff = pParam->BSIM4v6vfbsdoff * (1.0 + pParam->BSIM4v6tvfbsdoff * delTemp); pParam->BSIM4v6voff = pParam->BSIM4v6voff * (1.0 + pParam->BSIM4v6tvoff * delTemp); /* Source End Velocity Limit */ if((model->BSIM4v6vtlGiven) && (model->BSIM4v6vtl > 0.0) ) { if(model->BSIM4v6lc < 0.0) pParam->BSIM4v6lc = 0.0; else pParam->BSIM4v6lc = model->BSIM4v6lc ; T0 = pParam->BSIM4v6leff / (pParam->BSIM4v6xn * pParam->BSIM4v6leff + pParam->BSIM4v6lc); pParam->BSIM4v6tfactor = (1.0 - T0) / (1.0 + T0 ); } pParam->BSIM4v6cgdo = (model->BSIM4v6cgdo + pParam->BSIM4v6cf) * pParam->BSIM4v6weffCV; pParam->BSIM4v6cgso = (model->BSIM4v6cgso + pParam->BSIM4v6cf) * pParam->BSIM4v6weffCV; pParam->BSIM4v6cgbo = model->BSIM4v6cgbo * pParam->BSIM4v6leffCV * here->BSIM4v6nf; if (!model->BSIM4v6ndepGiven && model->BSIM4v6gamma1Given) { T0 = pParam->BSIM4v6gamma1 * model->BSIM4v6coxe; pParam->BSIM4v6ndep = 3.01248e22 * T0 * T0; } pParam->BSIM4v6phi = Vtm0 * log(pParam->BSIM4v6ndep / ni) + pParam->BSIM4v6phin + 0.4; pParam->BSIM4v6sqrtPhi = sqrt(pParam->BSIM4v6phi); pParam->BSIM4v6phis3 = pParam->BSIM4v6sqrtPhi * pParam->BSIM4v6phi; pParam->BSIM4v6Xdep0 = sqrt(2.0 * epssub / (Charge_q * pParam->BSIM4v6ndep * 1.0e6)) * pParam->BSIM4v6sqrtPhi; pParam->BSIM4v6sqrtXdep0 = sqrt(pParam->BSIM4v6Xdep0); if(model->BSIM4v6mtrlMod == 0) pParam->BSIM4v6litl = sqrt(3.0 * 3.9 / epsrox * pParam->BSIM4v6xj * toxe); else pParam->BSIM4v6litl = sqrt(model->BSIM4v6epsrsub/epsrox * pParam->BSIM4v6xj * toxe); pParam->BSIM4v6vbi = Vtm0 * log(pParam->BSIM4v6nsd * pParam->BSIM4v6ndep / (ni * ni)); if (model->BSIM4v6mtrlMod == 0) { if (pParam->BSIM4v6ngate > 0.0) { pParam->BSIM4v6vfbsd = Vtm0 * log(pParam->BSIM4v6ngate / pParam->BSIM4v6nsd); } else pParam->BSIM4v6vfbsd = 0.0; } else { T0 = Vtm0 * log(pParam->BSIM4v6nsd/ni); T1 = 0.5 * Eg0; if(T0 > T1) T0 = T1; T2 = model->BSIM4v6easub + T1 - model->BSIM4v6type * T0; pParam->BSIM4v6vfbsd = model->BSIM4v6phig - T2; } pParam->BSIM4v6cdep0 = sqrt(Charge_q * epssub * pParam->BSIM4v6ndep * 1.0e6 / 2.0 / pParam->BSIM4v6phi); pParam->BSIM4v6ToxRatio = exp(pParam->BSIM4v6ntox * log(model->BSIM4v6toxref / toxe)) / toxe / toxe; pParam->BSIM4v6ToxRatioEdge = exp(pParam->BSIM4v6ntox * log(model->BSIM4v6toxref / (toxe * pParam->BSIM4v6poxedge))) / toxe / toxe / pParam->BSIM4v6poxedge / pParam->BSIM4v6poxedge; pParam->BSIM4v6Aechvb = (model->BSIM4v6type == NMOS) ? 4.97232e-7 : 3.42537e-7; pParam->BSIM4v6Bechvb = (model->BSIM4v6type == NMOS) ? 7.45669e11 : 1.16645e12; pParam->BSIM4v6AechvbEdgeS = pParam->BSIM4v6Aechvb * pParam->BSIM4v6weff * model->BSIM4v6dlcig * pParam->BSIM4v6ToxRatioEdge; pParam->BSIM4v6AechvbEdgeD = pParam->BSIM4v6Aechvb * pParam->BSIM4v6weff * model->BSIM4v6dlcigd * pParam->BSIM4v6ToxRatioEdge; pParam->BSIM4v6BechvbEdge = -pParam->BSIM4v6Bechvb * toxe * pParam->BSIM4v6poxedge; pParam->BSIM4v6Aechvb *= pParam->BSIM4v6weff * pParam->BSIM4v6leff * pParam->BSIM4v6ToxRatio; pParam->BSIM4v6Bechvb *= -toxe; pParam->BSIM4v6mstar = 0.5 + atan(pParam->BSIM4v6minv) / PI; pParam->BSIM4v6mstarcv = 0.5 + atan(pParam->BSIM4v6minvcv) / PI; pParam->BSIM4v6voffcbn = pParam->BSIM4v6voff + model->BSIM4v6voffl / pParam->BSIM4v6leff; pParam->BSIM4v6voffcbncv = pParam->BSIM4v6voffcv + model->BSIM4v6voffcvl / pParam->BSIM4v6leff; pParam->BSIM4v6ldeb = sqrt(epssub * Vtm0 / (Charge_q * pParam->BSIM4v6ndep * 1.0e6)) / 3.0; pParam->BSIM4v6acde *= pow((pParam->BSIM4v6ndep / 2.0e16), -0.25); if (model->BSIM4v6k1Given || model->BSIM4v6k2Given) { if (!model->BSIM4v6k1Given) { if ((!ckt->CKTcurJob) || (ckt->CKTcurJob->JOBtype < 9)) /* don't print in sensitivity */ fprintf(stdout, "Warning: k1 should be specified with k2.\n"); pParam->BSIM4v6k1 = 0.53; } if (!model->BSIM4v6k2Given) { if ((!ckt->CKTcurJob) || (ckt->CKTcurJob->JOBtype < 9)) /* don't print in sensitivity */ fprintf(stdout, "Warning: k2 should be specified with k1.\n"); pParam->BSIM4v6k2 = -0.0186; } if ((!ckt->CKTcurJob) || (ckt->CKTcurJob->JOBtype < 9)) { /* don't print in sensitivity */ if (model->BSIM4v6nsubGiven) fprintf(stdout, "Warning: nsub is ignored because k1 or k2 is given.\n"); if (model->BSIM4v6xtGiven) fprintf(stdout, "Warning: xt is ignored because k1 or k2 is given.\n"); if (model->BSIM4v6vbxGiven) fprintf(stdout, "Warning: vbx is ignored because k1 or k2 is given.\n"); if (model->BSIM4v6gamma1Given) fprintf(stdout, "Warning: gamma1 is ignored because k1 or k2 is given.\n"); if (model->BSIM4v6gamma2Given) fprintf(stdout, "Warning: gamma2 is ignored because k1 or k2 is given.\n"); } } else { if (!model->BSIM4v6vbxGiven) pParam->BSIM4v6vbx = pParam->BSIM4v6phi - 7.7348e-4 * pParam->BSIM4v6ndep * pParam->BSIM4v6xt * pParam->BSIM4v6xt; if (pParam->BSIM4v6vbx > 0.0) pParam->BSIM4v6vbx = -pParam->BSIM4v6vbx; if (pParam->BSIM4v6vbm > 0.0) pParam->BSIM4v6vbm = -pParam->BSIM4v6vbm; if (!model->BSIM4v6gamma1Given) pParam->BSIM4v6gamma1 = 5.753e-12 * sqrt(pParam->BSIM4v6ndep) / model->BSIM4v6coxe; if (!model->BSIM4v6gamma2Given) pParam->BSIM4v6gamma2 = 5.753e-12 * sqrt(pParam->BSIM4v6nsub) / model->BSIM4v6coxe; T0 = pParam->BSIM4v6gamma1 - pParam->BSIM4v6gamma2; T1 = sqrt(pParam->BSIM4v6phi - pParam->BSIM4v6vbx) - pParam->BSIM4v6sqrtPhi; T2 = sqrt(pParam->BSIM4v6phi * (pParam->BSIM4v6phi - pParam->BSIM4v6vbm)) - pParam->BSIM4v6phi; pParam->BSIM4v6k2 = T0 * T1 / (2.0 * T2 + pParam->BSIM4v6vbm); pParam->BSIM4v6k1 = pParam->BSIM4v6gamma2 - 2.0 * pParam->BSIM4v6k2 * sqrt(pParam->BSIM4v6phi - pParam->BSIM4v6vbm); } if (!model->BSIM4v6vfbGiven) { if (model->BSIM4v6vth0Given) { pParam->BSIM4v6vfb = model->BSIM4v6type * pParam->BSIM4v6vth0 - pParam->BSIM4v6phi - pParam->BSIM4v6k1 * pParam->BSIM4v6sqrtPhi; } else { if ((model->BSIM4v6mtrlMod) && (model->BSIM4v6phigGiven) && (model->BSIM4v6nsubGiven)) { T0 = Vtm0 * log(pParam->BSIM4v6nsub/ni); T1 = 0.5 * Eg0; if(T0 > T1) T0 = T1; T2 = model->BSIM4v6easub + T1 + model->BSIM4v6type * T0; pParam->BSIM4v6vfb = model->BSIM4v6phig - T2; } else { pParam->BSIM4v6vfb = -1.0; } } } if (!model->BSIM4v6vth0Given) { pParam->BSIM4v6vth0 = model->BSIM4v6type * (pParam->BSIM4v6vfb + pParam->BSIM4v6phi + pParam->BSIM4v6k1 * pParam->BSIM4v6sqrtPhi); } pParam->BSIM4v6k1ox = pParam->BSIM4v6k1 * toxe / model->BSIM4v6toxm; tmp = sqrt(epssub / (epsrox * EPS0) * toxe * pParam->BSIM4v6Xdep0); T0 = pParam->BSIM4v6dsub * pParam->BSIM4v6leff / tmp; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; pParam->BSIM4v6theta0vb0 = T1 / T4; } else pParam->BSIM4v6theta0vb0 = 1.0 / (MAX_EXP - 2.0); T0 = pParam->BSIM4v6drout * pParam->BSIM4v6leff / tmp; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; T5 = T1 / T4; } else T5 = 1.0 / (MAX_EXP - 2.0); /* 3.0 * MIN_EXP omitted */ pParam->BSIM4v6thetaRout = pParam->BSIM4v6pdibl1 * T5 + pParam->BSIM4v6pdibl2; tmp = sqrt(pParam->BSIM4v6Xdep0); tmp1 = pParam->BSIM4v6vbi - pParam->BSIM4v6phi; tmp2 = model->BSIM4v6factor1 * tmp; T0 = pParam->BSIM4v6dvt1w * pParam->BSIM4v6weff * pParam->BSIM4v6leff / tmp2; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; T8 = T1 / T4; } else T8 = 1.0 / (MAX_EXP - 2.0); T0 = pParam->BSIM4v6dvt0w * T8; T8 = T0 * tmp1; T0 = pParam->BSIM4v6dvt1 * pParam->BSIM4v6leff / tmp2; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; T9 = T1 / T4; } else T9 = 1.0 / (MAX_EXP - 2.0); T9 = pParam->BSIM4v6dvt0 * T9 * tmp1; T4 = toxe * pParam->BSIM4v6phi / (pParam->BSIM4v6weff + pParam->BSIM4v6w0); T0 = sqrt(1.0 + pParam->BSIM4v6lpe0 / pParam->BSIM4v6leff); if((model->BSIM4v6tempMod == 1) || (model->BSIM4v6tempMod == 0)) T3 = (pParam->BSIM4v6kt1 + pParam->BSIM4v6kt1l / pParam->BSIM4v6leff) * (TRatio - 1.0); if((model->BSIM4v6tempMod == 2)||(model->BSIM4v6tempMod == 3)) T3 = - pParam->BSIM4v6kt1 * (TRatio - 1.0); T5 = pParam->BSIM4v6k1ox * (T0 - 1.0) * pParam->BSIM4v6sqrtPhi + T3; pParam->BSIM4v6vfbzbfactor = - T8 - T9 + pParam->BSIM4v6k3 * T4 + T5 - pParam->BSIM4v6phi - pParam->BSIM4v6k1 * pParam->BSIM4v6sqrtPhi; /* stress effect */ wlod = model->BSIM4v6wlod; if (model->BSIM4v6wlod < 0.0) { fprintf(stderr, "Warning: WLOD = %g is less than 0. 0.0 is used\n",model->BSIM4v6wlod); wlod = 0.0; } T0 = pow(Lnew, model->BSIM4v6llodku0); W_tmp = Wnew + wlod; T1 = pow(W_tmp, model->BSIM4v6wlodku0); tmp1 = model->BSIM4v6lku0 / T0 + model->BSIM4v6wku0 / T1 + model->BSIM4v6pku0 / (T0 * T1); pParam->BSIM4v6ku0 = 1.0 + tmp1; T0 = pow(Lnew, model->BSIM4v6llodvth); T1 = pow(W_tmp, model->BSIM4v6wlodvth); tmp1 = model->BSIM4v6lkvth0 / T0 + model->BSIM4v6wkvth0 / T1 + model->BSIM4v6pkvth0 / (T0 * T1); pParam->BSIM4v6kvth0 = 1.0 + tmp1; pParam->BSIM4v6kvth0 = sqrt(pParam->BSIM4v6kvth0*pParam->BSIM4v6kvth0 + DELTA); T0 = (TRatio - 1.0); pParam->BSIM4v6ku0temp = pParam->BSIM4v6ku0 * (1.0 + model->BSIM4v6tku0 *T0) + DELTA; Inv_saref = 1.0/(model->BSIM4v6saref + 0.5*Ldrn); Inv_sbref = 1.0/(model->BSIM4v6sbref + 0.5*Ldrn); pParam->BSIM4v6inv_od_ref = Inv_saref + Inv_sbref; pParam->BSIM4v6rho_ref = model->BSIM4v6ku0 / pParam->BSIM4v6ku0temp * pParam->BSIM4v6inv_od_ref; } /* End of SizeNotFound */ /* stress effect */ if( (here->BSIM4v6sa > 0.0) && (here->BSIM4v6sb > 0.0) && ((here->BSIM4v6nf == 1.0) || ((here->BSIM4v6nf > 1.0) && (here->BSIM4v6sd > 0.0))) ) { Inv_sa = 0; Inv_sb = 0; kvsat = model->BSIM4v6kvsat; if (model->BSIM4v6kvsat < -1.0 ) { fprintf(stderr, "Warning: KVSAT = %g is too small; -1.0 is used.\n",model->BSIM4v6kvsat); kvsat = -1.0; } if (model->BSIM4v6kvsat > 1.0) { fprintf(stderr, "Warning: KVSAT = %g is too big; 1.0 is used.\n",model->BSIM4v6kvsat); kvsat = 1.0; } for(i = 0; i < here->BSIM4v6nf; i++){ T0 = 1.0 / here->BSIM4v6nf / (here->BSIM4v6sa + 0.5*Ldrn + i * (here->BSIM4v6sd +Ldrn)); T1 = 1.0 / here->BSIM4v6nf / (here->BSIM4v6sb + 0.5*Ldrn + i * (here->BSIM4v6sd +Ldrn)); Inv_sa += T0; Inv_sb += T1; } Inv_ODeff = Inv_sa + Inv_sb; rho = model->BSIM4v6ku0 / pParam->BSIM4v6ku0temp * Inv_ODeff; T0 = (1.0 + rho)/(1.0 + pParam->BSIM4v6rho_ref); here->BSIM4v6u0temp = pParam->BSIM4v6u0temp * T0; T1 = (1.0 + kvsat * rho)/(1.0 + kvsat * pParam->BSIM4v6rho_ref); here->BSIM4v6vsattemp = pParam->BSIM4v6vsattemp * T1; OD_offset = Inv_ODeff - pParam->BSIM4v6inv_od_ref; dvth0_lod = model->BSIM4v6kvth0 / pParam->BSIM4v6kvth0 * OD_offset; dk2_lod = model->BSIM4v6stk2 / pow(pParam->BSIM4v6kvth0, model->BSIM4v6lodk2) * OD_offset; deta0_lod = model->BSIM4v6steta0 / pow(pParam->BSIM4v6kvth0, model->BSIM4v6lodeta0) * OD_offset; here->BSIM4v6vth0 = pParam->BSIM4v6vth0 + dvth0_lod; here->BSIM4v6eta0 = pParam->BSIM4v6eta0 + deta0_lod; here->BSIM4v6k2 = pParam->BSIM4v6k2 + dk2_lod; } else { here->BSIM4v6u0temp = pParam->BSIM4v6u0temp; here->BSIM4v6vth0 = pParam->BSIM4v6vth0; here->BSIM4v6vsattemp = pParam->BSIM4v6vsattemp; here->BSIM4v6eta0 = pParam->BSIM4v6eta0; here->BSIM4v6k2 = pParam->BSIM4v6k2; } /* Well Proximity Effect */ if (model->BSIM4v6wpemod) { if( (!here->BSIM4v6scaGiven) && (!here->BSIM4v6scbGiven) && (!here->BSIM4v6sccGiven) ) { if((here->BSIM4v6scGiven) && (here->BSIM4v6sc > 0.0) ) { T1 = here->BSIM4v6sc + Wdrn; T2 = 1.0 / model->BSIM4v6scref; here->BSIM4v6sca = model->BSIM4v6scref * model->BSIM4v6scref / (here->BSIM4v6sc * T1); here->BSIM4v6scb = ( (0.1 * here->BSIM4v6sc + 0.01 * model->BSIM4v6scref) * exp(-10.0 * here->BSIM4v6sc * T2) - (0.1 * T1 + 0.01 * model->BSIM4v6scref) * exp(-10.0 * T1 * T2) ) / Wdrn; here->BSIM4v6scc = ( (0.05 * here->BSIM4v6sc + 0.0025 * model->BSIM4v6scref) * exp(-20.0 * here->BSIM4v6sc * T2) - (0.05 * T1 + 0.0025 * model->BSIM4v6scref) * exp(-20.0 * T1 * T2) ) / Wdrn; } else { fprintf(stderr, "Warning: No WPE as none of SCA, SCB, SCC, SC is given and/or SC not positive.\n"); } } if (here->BSIM4v6sca < 0.0) { printf("Warning: SCA = %g is negative. Set to 0.0.\n", here->BSIM4v6sca); here->BSIM4v6sca = 0.0; } if (here->BSIM4v6scb < 0.0) { printf("Warning: SCB = %g is negative. Set to 0.0.\n", here->BSIM4v6scb); here->BSIM4v6scb = 0.0; } if (here->BSIM4v6scc < 0.0) { printf("Warning: SCC = %g is negative. Set to 0.0.\n", here->BSIM4v6scc); here->BSIM4v6scc = 0.0; } if (here->BSIM4v6sc < 0.0) { printf("Warning: SC = %g is negative. Set to 0.0.\n", here->BSIM4v6sc); here->BSIM4v6sc = 0.0; } /*4.6.2*/ sceff = here->BSIM4v6sca + model->BSIM4v6web * here->BSIM4v6scb + model->BSIM4v6wec * here->BSIM4v6scc; here->BSIM4v6vth0 += pParam->BSIM4v6kvth0we * sceff; here->BSIM4v6k2 += pParam->BSIM4v6k2we * sceff; T3 = 1.0 + pParam->BSIM4v6ku0we * sceff; if (T3 <= 0.0) { T3 = 0.0; fprintf(stderr, "Warning: ku0we = %g is negatively too high. Negative mobility! \n", pParam->BSIM4v6ku0we); } here->BSIM4v6u0temp *= T3; } /* adding delvto */ here->BSIM4v6vth0 += here->BSIM4v6delvto; here->BSIM4v6vfb = pParam->BSIM4v6vfb + model->BSIM4v6type * here->BSIM4v6delvto; /* Instance variables calculation */ T3 = model->BSIM4v6type * here->BSIM4v6vth0 - here->BSIM4v6vfb - pParam->BSIM4v6phi; T4 = T3 + T3; T5 = 2.5 * T3; here->BSIM4v6vtfbphi1 = (model->BSIM4v6type == NMOS) ? T4 : T5; if (here->BSIM4v6vtfbphi1 < 0.0) here->BSIM4v6vtfbphi1 = 0.0; here->BSIM4v6vtfbphi2 = 4.0 * T3; if (here->BSIM4v6vtfbphi2 < 0.0) here->BSIM4v6vtfbphi2 = 0.0; if (here->BSIM4v6k2 < 0.0) { T0 = 0.5 * pParam->BSIM4v6k1 / here->BSIM4v6k2; here->BSIM4v6vbsc = 0.9 * (pParam->BSIM4v6phi - T0 * T0); if (here->BSIM4v6vbsc > -3.0) here->BSIM4v6vbsc = -3.0; else if (here->BSIM4v6vbsc < -30.0) here->BSIM4v6vbsc = -30.0; } else here->BSIM4v6vbsc = -30.0; if (here->BSIM4v6vbsc > pParam->BSIM4v6vbm) here->BSIM4v6vbsc = pParam->BSIM4v6vbm; here->BSIM4v6k2ox = here->BSIM4v6k2 * toxe / model->BSIM4v6toxm; here->BSIM4v6vfbzb = pParam->BSIM4v6vfbzbfactor + model->BSIM4v6type * here->BSIM4v6vth0 ; here->BSIM4v6cgso = pParam->BSIM4v6cgso; here->BSIM4v6cgdo = pParam->BSIM4v6cgdo; lnl = log(pParam->BSIM4v6leff * 1.0e6); lnw = log(pParam->BSIM4v6weff * 1.0e6); lnnf = log(here->BSIM4v6nf); bodymode = 5; if( ( !model->BSIM4v6rbps0Given) || ( !model->BSIM4v6rbpd0Given) ) bodymode = 1; else if( (!model->BSIM4v6rbsbx0Given && !model->BSIM4v6rbsby0Given) || (!model->BSIM4v6rbdbx0Given && !model->BSIM4v6rbdby0Given) ) bodymode = 3; if(here->BSIM4v6rbodyMod == 2) { if (bodymode == 5) { rbsbx = exp( log(model->BSIM4v6rbsbx0) + model->BSIM4v6rbsdbxl * lnl + model->BSIM4v6rbsdbxw * lnw + model->BSIM4v6rbsdbxnf * lnnf ); rbsby = exp( log(model->BSIM4v6rbsby0) + model->BSIM4v6rbsdbyl * lnl + model->BSIM4v6rbsdbyw * lnw + model->BSIM4v6rbsdbynf * lnnf ); here->BSIM4v6rbsb = rbsbx * rbsby / (rbsbx + rbsby); rbdbx = exp( log(model->BSIM4v6rbdbx0) + model->BSIM4v6rbsdbxl * lnl + model->BSIM4v6rbsdbxw * lnw + model->BSIM4v6rbsdbxnf * lnnf ); rbdby = exp( log(model->BSIM4v6rbdby0) + model->BSIM4v6rbsdbyl * lnl + model->BSIM4v6rbsdbyw * lnw + model->BSIM4v6rbsdbynf * lnnf ); here->BSIM4v6rbdb = rbdbx * rbdby / (rbdbx + rbdby); } if ((bodymode == 3)|| (bodymode == 5)) { here->BSIM4v6rbps = exp( log(model->BSIM4v6rbps0) + model->BSIM4v6rbpsl * lnl + model->BSIM4v6rbpsw * lnw + model->BSIM4v6rbpsnf * lnnf ); here->BSIM4v6rbpd = exp( log(model->BSIM4v6rbpd0) + model->BSIM4v6rbpdl * lnl + model->BSIM4v6rbpdw * lnw + model->BSIM4v6rbpdnf * lnnf ); } rbpbx = exp( log(model->BSIM4v6rbpbx0) + model->BSIM4v6rbpbxl * lnl + model->BSIM4v6rbpbxw * lnw + model->BSIM4v6rbpbxnf * lnnf ); rbpby = exp( log(model->BSIM4v6rbpby0) + model->BSIM4v6rbpbyl * lnl + model->BSIM4v6rbpbyw * lnw + model->BSIM4v6rbpbynf * lnnf ); here->BSIM4v6rbpb = rbpbx*rbpby/(rbpbx + rbpby); } if ((here->BSIM4v6rbodyMod == 1 ) || ((here->BSIM4v6rbodyMod == 2 ) && (bodymode == 5)) ) { if (here->BSIM4v6rbdb < 1.0e-3) here->BSIM4v6grbdb = 1.0e3; /* in mho */ else here->BSIM4v6grbdb = model->BSIM4v6gbmin + 1.0 / here->BSIM4v6rbdb; if (here->BSIM4v6rbpb < 1.0e-3) here->BSIM4v6grbpb = 1.0e3; else here->BSIM4v6grbpb = model->BSIM4v6gbmin + 1.0 / here->BSIM4v6rbpb; if (here->BSIM4v6rbps < 1.0e-3) here->BSIM4v6grbps = 1.0e3; else here->BSIM4v6grbps = model->BSIM4v6gbmin + 1.0 / here->BSIM4v6rbps; if (here->BSIM4v6rbsb < 1.0e-3) here->BSIM4v6grbsb = 1.0e3; else here->BSIM4v6grbsb = model->BSIM4v6gbmin + 1.0 / here->BSIM4v6rbsb; if (here->BSIM4v6rbpd < 1.0e-3) here->BSIM4v6grbpd = 1.0e3; else here->BSIM4v6grbpd = model->BSIM4v6gbmin + 1.0 / here->BSIM4v6rbpd; } if((here->BSIM4v6rbodyMod == 2) && (bodymode == 3)) { here->BSIM4v6grbdb = here->BSIM4v6grbsb = model->BSIM4v6gbmin; if (here->BSIM4v6rbpb < 1.0e-3) here->BSIM4v6grbpb = 1.0e3; else here->BSIM4v6grbpb = model->BSIM4v6gbmin + 1.0 / here->BSIM4v6rbpb; if (here->BSIM4v6rbps < 1.0e-3) here->BSIM4v6grbps = 1.0e3; else here->BSIM4v6grbps = model->BSIM4v6gbmin + 1.0 / here->BSIM4v6rbps; if (here->BSIM4v6rbpd < 1.0e-3) here->BSIM4v6grbpd = 1.0e3; else here->BSIM4v6grbpd = model->BSIM4v6gbmin + 1.0 / here->BSIM4v6rbpd; } if((here->BSIM4v6rbodyMod == 2) && (bodymode == 1)) { here->BSIM4v6grbdb = here->BSIM4v6grbsb = model->BSIM4v6gbmin; here->BSIM4v6grbps = here->BSIM4v6grbpd = 1.0e3; if (here->BSIM4v6rbpb < 1.0e-3) here->BSIM4v6grbpb = 1.0e3; else here->BSIM4v6grbpb = model->BSIM4v6gbmin + 1.0 / here->BSIM4v6rbpb; } /* * Process geomertry dependent parasitics */ here->BSIM4v6grgeltd = model->BSIM4v6rshg * (here->BSIM4v6xgw + pParam->BSIM4v6weffCJ / 3.0 / here->BSIM4v6ngcon) / (here->BSIM4v6ngcon * here->BSIM4v6nf * (Lnew - model->BSIM4v6xgl)); if (here->BSIM4v6grgeltd > 0.0) here->BSIM4v6grgeltd = 1.0 / here->BSIM4v6grgeltd; else { here->BSIM4v6grgeltd = 1.0e3; /* mho */ if (here->BSIM4v6rgateMod != 0) printf("Warning: The gate conductance reset to 1.0e3 mho.\n"); } DMCGeff = model->BSIM4v6dmcg - model->BSIM4v6dmcgt; DMCIeff = model->BSIM4v6dmci; DMDGeff = model->BSIM4v6dmdg - model->BSIM4v6dmcgt; if (here->BSIM4v6sourcePerimeterGiven) { if(here->BSIM4v6sourcePerimeter == 0.0) here->BSIM4v6Pseff = 0.0; else if (here->BSIM4v6sourcePerimeter < 0.0) { printf("Warning: Source Perimeter is specified as negative, it is set to zero.\n"); here->BSIM4v6Pseff = 0.0; } else { if (model->BSIM4v6perMod == 0) here->BSIM4v6Pseff = here->BSIM4v6sourcePerimeter; else here->BSIM4v6Pseff = here->BSIM4v6sourcePerimeter - pParam->BSIM4v6weffCJ * here->BSIM4v6nf; } } else BSIM4v6PAeffGeo(here->BSIM4v6nf, here->BSIM4v6geoMod, here->BSIM4v6min, pParam->BSIM4v6weffCJ, DMCGeff, DMCIeff, DMDGeff, &(here->BSIM4v6Pseff), &dumPd, &dumAs, &dumAd); if (here->BSIM4v6Pseff < 0.0) /*4.6.2*/ here->BSIM4v6Pseff = 0.0; if (here->BSIM4v6drainPerimeterGiven) { if(here->BSIM4v6drainPerimeter == 0.0) here->BSIM4v6Pdeff = 0.0; else if (here->BSIM4v6drainPerimeter < 0.0) { printf("Warning: Drain Perimeter is specified as negative, it is set to zero\n"); here->BSIM4v6Pdeff = 0.0; } else { if (model->BSIM4v6perMod == 0) here->BSIM4v6Pdeff = here->BSIM4v6drainPerimeter; else here->BSIM4v6Pdeff = here->BSIM4v6drainPerimeter - pParam->BSIM4v6weffCJ * here->BSIM4v6nf; } } else BSIM4v6PAeffGeo(here->BSIM4v6nf, here->BSIM4v6geoMod, here->BSIM4v6min, pParam->BSIM4v6weffCJ, DMCGeff, DMCIeff, DMDGeff, &dumPs, &(here->BSIM4v6Pdeff), &dumAs, &dumAd); if (here->BSIM4v6Pdeff < 0.0) /*4.6.2*/ here->BSIM4v6Pdeff = 0.0; if (here->BSIM4v6sourceAreaGiven) here->BSIM4v6Aseff = here->BSIM4v6sourceArea; else BSIM4v6PAeffGeo(here->BSIM4v6nf, here->BSIM4v6geoMod, here->BSIM4v6min, pParam->BSIM4v6weffCJ, DMCGeff, DMCIeff, DMDGeff, &dumPs, &dumPd, &(here->BSIM4v6Aseff), &dumAd); if (here->BSIM4v6drainAreaGiven) here->BSIM4v6Adeff = here->BSIM4v6drainArea; else BSIM4v6PAeffGeo(here->BSIM4v6nf, here->BSIM4v6geoMod, here->BSIM4v6min, pParam->BSIM4v6weffCJ, DMCGeff, DMCIeff, DMDGeff, &dumPs, &dumPd, &dumAs, &(here->BSIM4v6Adeff)); /* Processing S/D resistance and conductance below */ if(here->BSIM4v6sNodePrime != here->BSIM4v6sNode) { here->BSIM4v6sourceConductance = 0.0; if(here->BSIM4v6sourceSquaresGiven) { here->BSIM4v6sourceConductance = model->BSIM4v6sheetResistance * here->BSIM4v6sourceSquares; } else if (here->BSIM4v6rgeoMod > 0) { BSIM4v6RdseffGeo(here->BSIM4v6nf, here->BSIM4v6geoMod, here->BSIM4v6rgeoMod, here->BSIM4v6min, pParam->BSIM4v6weffCJ, model->BSIM4v6sheetResistance, DMCGeff, DMCIeff, DMDGeff, 1, &(here->BSIM4v6sourceConductance)); } else { here->BSIM4v6sourceConductance = 0.0; } if (here->BSIM4v6sourceConductance > 0.0) here->BSIM4v6sourceConductance = 1.0 / here->BSIM4v6sourceConductance; else { here->BSIM4v6sourceConductance = 1.0e3; /* mho */ printf ("Warning: Source conductance reset to 1.0e3 mho.\n"); } } else { here->BSIM4v6sourceConductance = 0.0; } if(here->BSIM4v6dNodePrime != here->BSIM4v6dNode) { here->BSIM4v6drainConductance = 0.0; if(here->BSIM4v6drainSquaresGiven) { here->BSIM4v6drainConductance = model->BSIM4v6sheetResistance * here->BSIM4v6drainSquares; } else if (here->BSIM4v6rgeoMod > 0) { BSIM4v6RdseffGeo(here->BSIM4v6nf, here->BSIM4v6geoMod, here->BSIM4v6rgeoMod, here->BSIM4v6min, pParam->BSIM4v6weffCJ, model->BSIM4v6sheetResistance, DMCGeff, DMCIeff, DMDGeff, 0, &(here->BSIM4v6drainConductance)); } else { here->BSIM4v6drainConductance = 0.0; } if (here->BSIM4v6drainConductance > 0.0) here->BSIM4v6drainConductance = 1.0 / here->BSIM4v6drainConductance; else { here->BSIM4v6drainConductance = 1.0e3; /* mho */ printf ("Warning: Drain conductance reset to 1.0e3 mho.\n"); } } else { here->BSIM4v6drainConductance = 0.0; } /* End of Rsd processing */ Nvtms = model->BSIM4v6vtm * model->BSIM4v6SjctEmissionCoeff; if ((here->BSIM4v6Aseff <= 0.0) && (here->BSIM4v6Pseff <= 0.0)) { SourceSatCurrent = 0.0; } else { SourceSatCurrent = here->BSIM4v6Aseff * model->BSIM4v6SjctTempSatCurDensity + here->BSIM4v6Pseff * model->BSIM4v6SjctSidewallTempSatCurDensity + pParam->BSIM4v6weffCJ * here->BSIM4v6nf * model->BSIM4v6SjctGateSidewallTempSatCurDensity; } if (SourceSatCurrent > 0.0) { switch(model->BSIM4v6dioMod) { case 0: if ((model->BSIM4v6bvs / Nvtms) > EXP_THRESHOLD) here->BSIM4v6XExpBVS = model->BSIM4v6xjbvs * MIN_EXP; else here->BSIM4v6XExpBVS = model->BSIM4v6xjbvs * exp(-model->BSIM4v6bvs / Nvtms); break; case 1: BSIM4v6DioIjthVjmEval(Nvtms, model->BSIM4v6ijthsfwd, SourceSatCurrent, 0.0, &(here->BSIM4v6vjsmFwd)); here->BSIM4v6IVjsmFwd = SourceSatCurrent * exp(here->BSIM4v6vjsmFwd / Nvtms); break; case 2: if ((model->BSIM4v6bvs / Nvtms) > EXP_THRESHOLD) { here->BSIM4v6XExpBVS = model->BSIM4v6xjbvs * MIN_EXP; tmp = MIN_EXP; } else { here->BSIM4v6XExpBVS = exp(-model->BSIM4v6bvs / Nvtms); tmp = here->BSIM4v6XExpBVS; here->BSIM4v6XExpBVS *= model->BSIM4v6xjbvs; } BSIM4v6DioIjthVjmEval(Nvtms, model->BSIM4v6ijthsfwd, SourceSatCurrent, here->BSIM4v6XExpBVS, &(here->BSIM4v6vjsmFwd)); T0 = exp(here->BSIM4v6vjsmFwd / Nvtms); here->BSIM4v6IVjsmFwd = SourceSatCurrent * (T0 - here->BSIM4v6XExpBVS / T0 + here->BSIM4v6XExpBVS - 1.0); here->BSIM4v6SslpFwd = SourceSatCurrent * (T0 + here->BSIM4v6XExpBVS / T0) / Nvtms; T2 = model->BSIM4v6ijthsrev / SourceSatCurrent; if (T2 < 1.0) { T2 = 10.0; fprintf(stderr, "Warning: ijthsrev too small and set to 10 times IsbSat.\n"); } here->BSIM4v6vjsmRev = -model->BSIM4v6bvs - Nvtms * log((T2 - 1.0) / model->BSIM4v6xjbvs); T1 = model->BSIM4v6xjbvs * exp(-(model->BSIM4v6bvs + here->BSIM4v6vjsmRev) / Nvtms); here->BSIM4v6IVjsmRev = SourceSatCurrent * (1.0 + T1); here->BSIM4v6SslpRev = -SourceSatCurrent * T1 / Nvtms; break; default: printf("Specified dioMod = %d not matched\n", model->BSIM4v6dioMod); } } Nvtmd = model->BSIM4v6vtm * model->BSIM4v6DjctEmissionCoeff; if ((here->BSIM4v6Adeff <= 0.0) && (here->BSIM4v6Pdeff <= 0.0)) { DrainSatCurrent = 0.0; } else { DrainSatCurrent = here->BSIM4v6Adeff * model->BSIM4v6DjctTempSatCurDensity + here->BSIM4v6Pdeff * model->BSIM4v6DjctSidewallTempSatCurDensity + pParam->BSIM4v6weffCJ * here->BSIM4v6nf * model->BSIM4v6DjctGateSidewallTempSatCurDensity; } if (DrainSatCurrent > 0.0) { switch(model->BSIM4v6dioMod) { case 0: if ((model->BSIM4v6bvd / Nvtmd) > EXP_THRESHOLD) here->BSIM4v6XExpBVD = model->BSIM4v6xjbvd * MIN_EXP; else here->BSIM4v6XExpBVD = model->BSIM4v6xjbvd * exp(-model->BSIM4v6bvd / Nvtmd); break; case 1: BSIM4v6DioIjthVjmEval(Nvtmd, model->BSIM4v6ijthdfwd, DrainSatCurrent, 0.0, &(here->BSIM4v6vjdmFwd)); here->BSIM4v6IVjdmFwd = DrainSatCurrent * exp(here->BSIM4v6vjdmFwd / Nvtmd); break; case 2: if ((model->BSIM4v6bvd / Nvtmd) > EXP_THRESHOLD) { here->BSIM4v6XExpBVD = model->BSIM4v6xjbvd * MIN_EXP; tmp = MIN_EXP; } else { here->BSIM4v6XExpBVD = exp(-model->BSIM4v6bvd / Nvtmd); tmp = here->BSIM4v6XExpBVD; here->BSIM4v6XExpBVD *= model->BSIM4v6xjbvd; } BSIM4v6DioIjthVjmEval(Nvtmd, model->BSIM4v6ijthdfwd, DrainSatCurrent, here->BSIM4v6XExpBVD, &(here->BSIM4v6vjdmFwd)); T0 = exp(here->BSIM4v6vjdmFwd / Nvtmd); here->BSIM4v6IVjdmFwd = DrainSatCurrent * (T0 - here->BSIM4v6XExpBVD / T0 + here->BSIM4v6XExpBVD - 1.0); here->BSIM4v6DslpFwd = DrainSatCurrent * (T0 + here->BSIM4v6XExpBVD / T0) / Nvtmd; T2 = model->BSIM4v6ijthdrev / DrainSatCurrent; if (T2 < 1.0) { T2 = 10.0; fprintf(stderr, "Warning: ijthdrev too small and set to 10 times IdbSat.\n"); } here->BSIM4v6vjdmRev = -model->BSIM4v6bvd - Nvtmd * log((T2 - 1.0) / model->BSIM4v6xjbvd); /* bugfix */ T1 = model->BSIM4v6xjbvd * exp(-(model->BSIM4v6bvd + here->BSIM4v6vjdmRev) / Nvtmd); here->BSIM4v6IVjdmRev = DrainSatCurrent * (1.0 + T1); here->BSIM4v6DslpRev = -DrainSatCurrent * T1 / Nvtmd; break; default: printf("Specified dioMod = %d not matched\n", model->BSIM4v6dioMod); } } /* GEDL current reverse bias */ T0 = (TRatio - 1.0); model->BSIM4v6njtsstemp = model->BSIM4v6njts * (1.0 + model->BSIM4v6tnjts * T0); model->BSIM4v6njtsswstemp = model->BSIM4v6njtssw * (1.0 + model->BSIM4v6tnjtssw * T0); model->BSIM4v6njtsswgstemp = model->BSIM4v6njtsswg * (1.0 + model->BSIM4v6tnjtsswg * T0); model->BSIM4v6njtsdtemp = model->BSIM4v6njtsd * (1.0 + model->BSIM4v6tnjtsd * T0); model->BSIM4v6njtsswdtemp = model->BSIM4v6njtsswd * (1.0 + model->BSIM4v6tnjtsswd * T0); model->BSIM4v6njtsswgdtemp = model->BSIM4v6njtsswgd * (1.0 + model->BSIM4v6tnjtsswgd * T0); T7 = Eg0 / model->BSIM4v6vtm * T0; T9 = model->BSIM4v6xtss * T7; DEXP(T9, T1); T9 = model->BSIM4v6xtsd * T7; DEXP(T9, T2); T9 = model->BSIM4v6xtssws * T7; DEXP(T9, T3); T9 = model->BSIM4v6xtsswd * T7; DEXP(T9, T4); T9 = model->BSIM4v6xtsswgs * T7; DEXP(T9, T5); T9 = model->BSIM4v6xtsswgd * T7; DEXP(T9, T6); /*IBM TAT*/ if(model->BSIM4v6jtweff < 0.0) { model->BSIM4v6jtweff = 0.0; fprintf(stderr, "TAT width dependence effect is negative. Jtweff is clamped to zero.\n"); } T11 = sqrt(model->BSIM4v6jtweff / pParam->BSIM4v6weffCJ) + 1.0; T10 = pParam->BSIM4v6weffCJ * here->BSIM4v6nf; here->BSIM4v6SjctTempRevSatCur = T1 * here->BSIM4v6Aseff * model->BSIM4v6jtss; here->BSIM4v6DjctTempRevSatCur = T2 * here->BSIM4v6Adeff * model->BSIM4v6jtsd; here->BSIM4v6SswTempRevSatCur = T3 * here->BSIM4v6Pseff * model->BSIM4v6jtssws; here->BSIM4v6DswTempRevSatCur = T4 * here->BSIM4v6Pdeff * model->BSIM4v6jtsswd; here->BSIM4v6SswgTempRevSatCur = T5 * T10 * T11 * model->BSIM4v6jtsswgs; here->BSIM4v6DswgTempRevSatCur = T6 * T10 * T11 * model->BSIM4v6jtsswgd; /*high k*/ /*Calculate VgsteffVth for mobMod=3*/ if(model->BSIM4v6mobMod==3) { /*Calculate n @ Vbs=Vds=0*/ V0 = pParam->BSIM4v6vbi - pParam->BSIM4v6phi; lt1 = model->BSIM4v6factor1* pParam->BSIM4v6sqrtXdep0; ltw = lt1; T0 = pParam->BSIM4v6dvt1 * pParam->BSIM4v6leff / lt1; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; Theta0 = T1 / T4; } else Theta0 = 1.0 / (MAX_EXP - 2.0); tmp1 = epssub / pParam->BSIM4v6Xdep0; here->BSIM4v6nstar = model->BSIM4v6vtm / Charge_q * (model->BSIM4v6coxe + tmp1 + pParam->BSIM4v6cit); tmp2 = pParam->BSIM4v6nfactor * tmp1; tmp3 = (tmp2 + pParam->BSIM4v6cdsc * Theta0 + pParam->BSIM4v6cit) / model->BSIM4v6coxe; if (tmp3 >= -0.5) n0 = 1.0 + tmp3; else { T0 = 1.0 / (3.0 + 8.0 * tmp3); n0 = (1.0 + 3.0 * tmp3) * T0; } T0 = n0 * model->BSIM4v6vtm; T1 = pParam->BSIM4v6voffcbn; T2 = T1/T0; if (T2 < -EXP_THRESHOLD) { T3 = model->BSIM4v6coxe * MIN_EXP / pParam->BSIM4v6cdep0; T4 = pParam->BSIM4v6mstar + T3 * n0; } else if (T2 > EXP_THRESHOLD) { T3 = model->BSIM4v6coxe * MAX_EXP / pParam->BSIM4v6cdep0; T4 = pParam->BSIM4v6mstar + T3 * n0; } else { T3 = exp(T2)* model->BSIM4v6coxe / pParam->BSIM4v6cdep0; T4 = pParam->BSIM4v6mstar + T3 * n0; } pParam->BSIM4v6VgsteffVth = T0 * log(2.0)/T4; } if(model->BSIM4v6mtrlMod) { /* Calculate TOXP from EOT */ /* Calculate Vgs_eff @ Vgs = VDD with Poly Depletion Effect */ Vtm0eot = KboQ * model->BSIM4v6tempeot; Vtmeot = Vtm0eot; vbieot = Vtm0eot * log(pParam->BSIM4v6nsd * pParam->BSIM4v6ndep / (ni * ni)); phieot = Vtm0eot * log(pParam->BSIM4v6ndep / ni) + pParam->BSIM4v6phin + 0.4; tmp2 = here->BSIM4v6vfb + phieot; vddeot = model->BSIM4v6type * model->BSIM4v6vddeot; T0 = model->BSIM4v6epsrgate * EPS0; if ((pParam->BSIM4v6ngate > 1.0e18) && (pParam->BSIM4v6ngate < 1.0e25) && (vddeot > tmp2) && (T0!=0)) { T1 = 1.0e6 * CHARGE * T0 * pParam->BSIM4v6ngate / (model->BSIM4v6coxe * model->BSIM4v6coxe); T8 = vddeot - tmp2; T4 = sqrt(1.0 + 2.0 * T8 / T1); T2 = 2.0 * T8 / (T4 + 1.0); T3 = 0.5 * T2 * T2 / T1; T7 = 1.12 - T3 - 0.05; T6 = sqrt(T7 * T7 + 0.224); T5 = 1.12 - 0.5 * (T7 + T6); Vgs_eff = vddeot - T5; } else Vgs_eff = vddeot; /* Calculate Vth @ Vds=Vbs=0 */ V0 = vbieot - phieot; lt1 = model->BSIM4v6factor1* pParam->BSIM4v6sqrtXdep0; ltw = lt1; T0 = pParam->BSIM4v6dvt1 * model->BSIM4v6leffeot / lt1; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; Theta0 = T1 / T4; } else Theta0 = 1.0 / (MAX_EXP - 2.0); Delt_vth = pParam->BSIM4v6dvt0 * Theta0 * V0; T0 = pParam->BSIM4v6dvt1w * model->BSIM4v6weffeot * model->BSIM4v6leffeot / ltw; if (T0 < EXP_THRESHOLD) { T1 = exp(T0); T2 = T1 - 1.0; T3 = T2 * T2; T4 = T3 + 2.0 * T1 * MIN_EXP; T5 = T1 / T4; } else T5 = 1.0 / (MAX_EXP - 2.0); /* 3.0 * MIN_EXP omitted */ T2 = pParam->BSIM4v6dvt0w * T5 * V0; TempRatioeot = model->BSIM4v6tempeot / model->BSIM4v6tnom - 1.0; T0 = sqrt(1.0 + pParam->BSIM4v6lpe0 / model->BSIM4v6leffeot); T1 = pParam->BSIM4v6k1ox * (T0 - 1.0) * sqrt(phieot) + (pParam->BSIM4v6kt1 + pParam->BSIM4v6kt1l / model->BSIM4v6leffeot) * TempRatioeot; Vth_NarrowW = toxe * phieot / (model->BSIM4v6weffeot + pParam->BSIM4v6w0); Lpe_Vb = sqrt(1.0 + pParam->BSIM4v6lpeb / model->BSIM4v6leffeot); Vth = model->BSIM4v6type * here->BSIM4v6vth0 + (pParam->BSIM4v6k1ox - pParam->BSIM4v6k1)*sqrt(phieot)*Lpe_Vb - Delt_vth - T2 + pParam->BSIM4v6k3 * Vth_NarrowW + T1; /* Calculate n */ tmp1 = epssub / pParam->BSIM4v6Xdep0; here->BSIM4v6nstar = Vtmeot / Charge_q * (model->BSIM4v6coxe + tmp1 + pParam->BSIM4v6cit); tmp2 = pParam->BSIM4v6nfactor * tmp1; tmp3 = (tmp2 + pParam->BSIM4v6cdsc * Theta0 + pParam->BSIM4v6cit) / model->BSIM4v6coxe; if (tmp3 >= -0.5) n = 1.0 + tmp3; else { T0 = 1.0 / (3.0 + 8.0 * tmp3); n = (1.0 + 3.0 * tmp3) * T0; } /* Vth correction for Pocket implant */ if (pParam->BSIM4v6dvtp0 > 0.0) { T3 = model->BSIM4v6leffeot + pParam->BSIM4v6dvtp0 * 2.0; if (model->BSIM4v6tempMod < 2) T4 = Vtmeot * log(model->BSIM4v6leffeot / T3); else T4 = Vtm0eot * log(model->BSIM4v6leffeot / T3); Vth -= n * T4; } Vgsteff = Vgs_eff-Vth; /* calculating Toxp */ T3 = model->BSIM4v6type * here->BSIM4v6vth0 - here->BSIM4v6vfb - phieot; T4 = T3 + T3; T5 = 2.5 * T3; vtfbphi2eot = 4.0 * T3; if (vtfbphi2eot < 0.0) vtfbphi2eot = 0.0; niter = 0; toxpf = toxe; do { toxpi = toxpf; tmp2 = 2.0e8 * toxpf; T0 = (Vgsteff + vtfbphi2eot) / tmp2; T1 = 1.0 + exp(model->BSIM4v6bdos * 0.7 * log(T0)); Tcen = model->BSIM4v6ados * 1.9e-9 / T1; toxpf = toxe - epsrox/model->BSIM4v6epsrsub * Tcen; niter++; } while ((niter<=4)&&(ABS(toxpf-toxpi)>1e-12)); model->BSIM4v6toxp = toxpf; model->BSIM4v6coxp = epsrox * EPS0 / model->BSIM4v6toxp; } if (BSIM4v6checkModel(model, here, ckt)) { SPfrontEnd->IFerrorf (ERR_FATAL, "Fatal error(s) detected during BSIM4.6.4 parameter checking for %s in model %s", model->BSIM4v6modName, here->BSIM4v6name); return(E_BADPARM); } } /* End instance */ } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v6/b4v6.c0000644000175000017500000021561613546075722021415 0ustar carstencarsten/**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4.c of BSIM4.6.2. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Authors: 2008- Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. * Modified by Mohan Dunga, 12/13/2006. * Modified by Mohan Dunga, Wenwei Yang, 05/18/2007. * Modified by Wenwei Yang, 07/31/2008. **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "bsim4v6def.h" #include "ngspice/suffix.h" IFparm BSIM4v6pTable[] = { /* parameters */ IOP( "l", BSIM4v6_L, IF_REAL , "Length"), IOP( "w", BSIM4v6_W, IF_REAL , "Width"), IOP( "m", BSIM4v6_M, IF_REAL , "Separate Parallel multiplier"), IOP( "nf", BSIM4v6_NF, IF_REAL , "Number of fingers"), IOP( "sa", BSIM4v6_SA, IF_REAL , "distance between OD edge to poly of one side "), IOP( "sb", BSIM4v6_SB, IF_REAL , "distance between OD edge to poly of the other side"), IOP( "sd", BSIM4v6_SD, IF_REAL , "distance between neighbour fingers"), IOP( "sca", BSIM4v6_SCA, IF_REAL , "Integral of the first distribution function for scattered well dopant"), IOP( "scb", BSIM4v6_SCB, IF_REAL , "Integral of the second distribution function for scattered well dopant"), IOP( "scc", BSIM4v6_SCC, IF_REAL , "Integral of the third distribution function for scattered well dopant"), IOP( "sc", BSIM4v6_SC, IF_REAL , "Distance to a single well edge "), IOP( "min", BSIM4v6_MIN, IF_INTEGER , "Minimize either D or S"), IOP( "ad", BSIM4v6_AD, IF_REAL , "Drain area"), IOP( "as", BSIM4v6_AS, IF_REAL , "Source area"), IOP( "pd", BSIM4v6_PD, IF_REAL , "Drain perimeter"), IOP( "ps", BSIM4v6_PS, IF_REAL , "Source perimeter"), IOP( "nrd", BSIM4v6_NRD, IF_REAL , "Number of squares in drain"), IOP( "nrs", BSIM4v6_NRS, IF_REAL , "Number of squares in source"), IOP( "off", BSIM4v6_OFF, IF_FLAG , "Device is initially off"), IOP( "rbdb", BSIM4v6_RBDB, IF_REAL , "Body resistance"), IOP( "rbsb", BSIM4v6_RBSB, IF_REAL , "Body resistance"), IOP( "rbpb", BSIM4v6_RBPB, IF_REAL , "Body resistance"), IOP( "rbps", BSIM4v6_RBPS, IF_REAL , "Body resistance"), IOP( "rbpd", BSIM4v6_RBPD, IF_REAL , "Body resistance"), IOP( "delvto", BSIM4v6_DELVTO, IF_REAL , "Zero bias threshold voltage variation"), IOPR( "delvt0", BSIM4v6_DELVTO, IF_REAL , "Zero bias threshold voltage variation"), IOP( "xgw", BSIM4v6_XGW, IF_REAL, "Distance from gate contact center to device edge"), IOP( "ngcon", BSIM4v6_NGCON, IF_REAL, "Number of gate contacts"), IOP( "trnqsmod", BSIM4v6_TRNQSMOD, IF_INTEGER, "Transient NQS model selector"), IOP( "acnqsmod", BSIM4v6_ACNQSMOD, IF_INTEGER, "AC NQS model selector"), IOP( "rbodymod", BSIM4v6_RBODYMOD, IF_INTEGER, "Distributed body R model selector"), IOP( "rgatemod", BSIM4v6_RGATEMOD, IF_INTEGER, "Gate resistance model selector"), IOP( "geomod", BSIM4v6_GEOMOD, IF_INTEGER, "Geometry dependent parasitics model selector"), IOP( "rgeomod", BSIM4v6_RGEOMOD, IF_INTEGER, "S/D resistance and contact model selector"), IP( "ic", BSIM4v6_IC, IF_REALVEC , "Vector of DS,GS,BS initial voltages"), OP( "gmbs", BSIM4v6_GMBS, IF_REAL, "Gmb"), OP( "gm", BSIM4v6_GM, IF_REAL, "Gm"), OP( "gds", BSIM4v6_GDS, IF_REAL, "Gds"), OP( "vdsat", BSIM4v6_VDSAT, IF_REAL, "Vdsat"), OP( "vth", BSIM4v6_VON, IF_REAL, "Vth"), OP( "id", BSIM4v6_CD, IF_REAL, "Ids"), OP( "ibd", BSIM4v6_CBD, IF_REAL, "Ibd"), OP( "ibs", BSIM4v6_CBS, IF_REAL, "Ibs"), OP( "gbd", BSIM4v6_GBD, IF_REAL, "gbd"), OP( "gbs", BSIM4v6_GBS, IF_REAL, "gbs"), OP( "isub", BSIM4v6_CSUB, IF_REAL, "Isub"), OP( "igidl", BSIM4v6_IGIDL, IF_REAL, "Igidl"), OP( "igisl", BSIM4v6_IGISL, IF_REAL, "Igisl"), OP( "igs", BSIM4v6_IGS, IF_REAL, "Igs"), OP( "igd", BSIM4v6_IGD, IF_REAL, "Igd"), OP( "igb", BSIM4v6_IGB, IF_REAL, "Igb"), OP( "igcs", BSIM4v6_IGCS, IF_REAL, "Igcs"), OP( "igcd", BSIM4v6_IGCD, IF_REAL, "Igcd"), OP( "vbs", BSIM4v6_VBS, IF_REAL, "Vbs"), OP( "vgs", BSIM4v6_VGS, IF_REAL, "Vgs"), OP( "vds", BSIM4v6_VDS, IF_REAL, "Vds"), OP( "cgg", BSIM4v6_CGGB, IF_REAL, "Cggb"), OP( "cgs", BSIM4v6_CGSB, IF_REAL, "Cgsb"), OP( "cgd", BSIM4v6_CGDB, IF_REAL, "Cgdb"), OP( "cbg", BSIM4v6_CBGB, IF_REAL, "Cbgb"), OP( "cbd", BSIM4v6_CBDB, IF_REAL, "Cbdb"), OP( "cbs", BSIM4v6_CBSB, IF_REAL, "Cbsb"), OP( "cdg", BSIM4v6_CDGB, IF_REAL, "Cdgb"), OP( "cdd", BSIM4v6_CDDB, IF_REAL, "Cddb"), OP( "cds", BSIM4v6_CDSB, IF_REAL, "Cdsb"), OP( "csg", BSIM4v6_CSGB, IF_REAL, "Csgb"), OP( "csd", BSIM4v6_CSDB, IF_REAL, "Csdb"), OP( "css", BSIM4v6_CSSB, IF_REAL, "Cssb"), OP( "cgb", BSIM4v6_CGBB, IF_REAL, "Cgbb"), OP( "cdb", BSIM4v6_CDBB, IF_REAL, "Cdbb"), OP( "csb", BSIM4v6_CSBB, IF_REAL, "Csbb"), OP( "cbb", BSIM4v6_CBBB, IF_REAL, "Cbbb"), OP( "capbd", BSIM4v6_CAPBD, IF_REAL, "Capbd"), OP( "capbs", BSIM4v6_CAPBS, IF_REAL, "Capbs"), OP( "qg", BSIM4v6_QG, IF_REAL, "Qgate"), OP( "qb", BSIM4v6_QB, IF_REAL, "Qbulk"), OP( "qd", BSIM4v6_QD, IF_REAL, "Qdrain"), OP( "qs", BSIM4v6_QS, IF_REAL, "Qsource"), OP( "qinv", BSIM4v6_QINV, IF_REAL, "Qinversion"), OP( "qdef", BSIM4v6_QDEF, IF_REAL, "Qdef"), OP( "gcrg", BSIM4v6_GCRG, IF_REAL, "Gcrg"), OP( "gtau", BSIM4v6_GTAU, IF_REAL, "Gtau"), }; IFparm BSIM4v6mPTable[] = { /* model parameters */ IOP( "cvchargemod", BSIM4v6_MOD_CVCHARGEMOD, IF_INTEGER, "Capacitance Charge model selector"), IOP( "capmod", BSIM4v6_MOD_CAPMOD, IF_INTEGER, "Capacitance model selector"), IOP( "diomod", BSIM4v6_MOD_DIOMOD, IF_INTEGER, "Diode IV model selector"), IOP( "rdsmod", BSIM4v6_MOD_RDSMOD, IF_INTEGER, "Bias-dependent S/D resistance model selector"), IOP( "trnqsmod", BSIM4v6_MOD_TRNQSMOD, IF_INTEGER, "Transient NQS model selector"), IOP( "acnqsmod", BSIM4v6_MOD_ACNQSMOD, IF_INTEGER, "AC NQS model selector"), IOP( "mobmod", BSIM4v6_MOD_MOBMOD, IF_INTEGER, "Mobility model selector"), IOP( "rbodymod", BSIM4v6_MOD_RBODYMOD, IF_INTEGER, "Distributed body R model selector"), IOP( "rgatemod", BSIM4v6_MOD_RGATEMOD, IF_INTEGER, "Gate R model selector"), IOP( "permod", BSIM4v6_MOD_PERMOD, IF_INTEGER, "Pd and Ps model selector"), IOP( "geomod", BSIM4v6_MOD_GEOMOD, IF_INTEGER, "Geometry dependent parasitics model selector"), IOP( "rgeomod", BSIM4v6_MOD_RGEOMOD, IF_INTEGER, "S/D resistance and contact model selector"), IOP( "fnoimod", BSIM4v6_MOD_FNOIMOD, IF_INTEGER, "Flicker noise model selector"), IOP( "tnoimod", BSIM4v6_MOD_TNOIMOD, IF_INTEGER, "Thermal noise model selector"), IOP( "mtrlmod", BSIM4v6_MOD_MTRLMOD, IF_INTEGER, "parameter for non-silicon substrate or metal gate selector"), IOP( "igcmod", BSIM4v6_MOD_IGCMOD, IF_INTEGER, "Gate-to-channel Ig model selector"), IOP( "igbmod", BSIM4v6_MOD_IGBMOD, IF_INTEGER, "Gate-to-body Ig model selector"), IOP( "tempmod", BSIM4v6_MOD_TEMPMOD, IF_INTEGER, "Temperature model selector"), IOP( "paramchk", BSIM4v6_MOD_PARAMCHK, IF_INTEGER, "Model parameter checking selector"), IOP( "binunit", BSIM4v6_MOD_BINUNIT, IF_INTEGER, "Bin unit selector"), IOP( "version", BSIM4v6_MOD_VERSION, IF_STRING, "parameter for model version"), IOP( "eot", BSIM4v6_MOD_EOT, IF_REAL, "Equivalent gate oxide thickness in meters"), IOP( "vddeot", BSIM4v6_MOD_VDDEOT, IF_REAL, "Voltage for extraction of Equivalent gate oxide thickness"), IOP( "tempeot", BSIM4v6_MOD_TEMPEOT, IF_REAL, " Temperature for extraction of EOT"), IOP( "leffeot", BSIM4v6_MOD_LEFFEOT, IF_REAL, " Effective length for extraction of EOT"), IOP( "weffeot", BSIM4v6_MOD_WEFFEOT, IF_REAL, "Effective width for extraction of EOT"), IOP( "ados", BSIM4v6_MOD_ADOS, IF_REAL, "Charge centroid parameter"), IOP( "bdos", BSIM4v6_MOD_BDOS, IF_REAL, "Charge centroid parameter"), IOP( "toxe", BSIM4v6_MOD_TOXE, IF_REAL, "Electrical gate oxide thickness in meters"), IOP( "toxp", BSIM4v6_MOD_TOXP, IF_REAL, "Physical gate oxide thickness in meters"), IOP( "toxm", BSIM4v6_MOD_TOXM, IF_REAL, "Gate oxide thickness at which parameters are extracted"), IOP( "toxref", BSIM4v6_MOD_TOXREF, IF_REAL, "Target tox value"), IOP( "dtox", BSIM4v6_MOD_DTOX, IF_REAL, "Defined as (toxe - toxp) "), IOP( "epsrox", BSIM4v6_MOD_EPSROX, IF_REAL, "Dielectric constant of the gate oxide relative to vacuum"), IOP( "cdsc", BSIM4v6_MOD_CDSC, IF_REAL, "Drain/Source and channel coupling capacitance"), IOP( "cdscb", BSIM4v6_MOD_CDSCB, IF_REAL, "Body-bias dependence of cdsc"), IOP( "cdscd", BSIM4v6_MOD_CDSCD, IF_REAL, "Drain-bias dependence of cdsc"), IOP( "cit", BSIM4v6_MOD_CIT, IF_REAL, "Interface state capacitance"), IOP( "nfactor", BSIM4v6_MOD_NFACTOR, IF_REAL, "Subthreshold swing Coefficient"), IOP( "xj", BSIM4v6_MOD_XJ, IF_REAL, "Junction depth in meters"), IOP( "vsat", BSIM4v6_MOD_VSAT, IF_REAL, "Saturation velocity at tnom"), IOP( "at", BSIM4v6_MOD_AT, IF_REAL, "Temperature coefficient of vsat"), IOP( "a0", BSIM4v6_MOD_A0, IF_REAL, "Non-uniform depletion width effect coefficient."), IOP( "ags", BSIM4v6_MOD_AGS, IF_REAL, "Gate bias coefficient of Abulk."), IOP( "a1", BSIM4v6_MOD_A1, IF_REAL, "Non-saturation effect coefficient"), IOP( "a2", BSIM4v6_MOD_A2, IF_REAL, "Non-saturation effect coefficient"), IOP( "keta", BSIM4v6_MOD_KETA, IF_REAL, "Body-bias coefficient of non-uniform depletion width effect."), IOP( "phig", BSIM4v6_MOD_PHIG, IF_REAL, "Work function of gate"), IOP( "epsrgate", BSIM4v6_MOD_EPSRGATE, IF_REAL, "Dielectric constant of gate relative to vacuum"), IOP( "easub",BSIM4v6_MOD_EASUB, IF_REAL, "Electron affinity of substrate"), IOP( "epsrsub", BSIM4v6_MOD_EPSRSUB, IF_REAL, "Dielectric constant of substrate relative to vacuum"), IOP( "ni0sub", BSIM4v6_MOD_NI0SUB, IF_REAL, "Intrinsic carrier concentration of substrate at 300.15K"), IOP( "bg0sub", BSIM4v6_MOD_BG0SUB, IF_REAL, "Band-gap of substrate at T=0K"), IOP( "tbgasub", BSIM4v6_MOD_TBGASUB, IF_REAL, "First parameter of band-gap change due to temperature"), IOP( "tbgbsub", BSIM4v6_MOD_TBGBSUB, IF_REAL, "Second parameter of band-gap change due to temperature"), IOP( "nsub", BSIM4v6_MOD_NSUB, IF_REAL, "Substrate doping concentration"), IOP( "ndep", BSIM4v6_MOD_NDEP, IF_REAL, "Channel doping concentration at the depletion edge"), IOP( "nsd", BSIM4v6_MOD_NSD, IF_REAL, "S/D doping concentration"), IOP( "phin", BSIM4v6_MOD_PHIN, IF_REAL, "Adjusting parameter for surface potential due to non-uniform vertical doping"), IOP( "ngate", BSIM4v6_MOD_NGATE, IF_REAL, "Poly-gate doping concentration"), IOP( "gamma1", BSIM4v6_MOD_GAMMA1, IF_REAL, "Vth body coefficient"), IOP( "gamma2", BSIM4v6_MOD_GAMMA2, IF_REAL, "Vth body coefficient"), IOP( "vbx", BSIM4v6_MOD_VBX, IF_REAL, "Vth transition body Voltage"), IOP( "vbm", BSIM4v6_MOD_VBM, IF_REAL, "Maximum body voltage"), IOP( "xt", BSIM4v6_MOD_XT, IF_REAL, "Doping depth"), IOP( "k1", BSIM4v6_MOD_K1, IF_REAL, "Bulk effect coefficient 1"), IOP( "kt1", BSIM4v6_MOD_KT1, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt1l", BSIM4v6_MOD_KT1L, IF_REAL, "Temperature coefficient of Vth"), IOP( "kt2", BSIM4v6_MOD_KT2, IF_REAL, "Body-coefficient of kt1"), IOP( "k2", BSIM4v6_MOD_K2, IF_REAL, "Bulk effect coefficient 2"), IOP( "k3", BSIM4v6_MOD_K3, IF_REAL, "Narrow width effect coefficient"), IOP( "k3b", BSIM4v6_MOD_K3B, IF_REAL, "Body effect coefficient of k3"), IOP( "w0", BSIM4v6_MOD_W0, IF_REAL, "Narrow width effect parameter"), IOP( "dvtp0", BSIM4v6_MOD_DVTP0, IF_REAL, "First parameter for Vth shift due to pocket"), IOP( "dvtp1", BSIM4v6_MOD_DVTP1, IF_REAL, "Second parameter for Vth shift due to pocket"), IOP( "lpe0", BSIM4v6_MOD_LPE0, IF_REAL, "Equivalent length of pocket region at zero bias"), IOP( "lpeb", BSIM4v6_MOD_LPEB, IF_REAL, "Equivalent length of pocket region accounting for body bias"), IOP( "dvt0", BSIM4v6_MOD_DVT0, IF_REAL, "Short channel effect coeff. 0"), IOP( "dvt1", BSIM4v6_MOD_DVT1, IF_REAL, "Short channel effect coeff. 1"), IOP( "dvt2", BSIM4v6_MOD_DVT2, IF_REAL, "Short channel effect coeff. 2"), IOP( "dvt0w", BSIM4v6_MOD_DVT0W, IF_REAL, "Narrow Width coeff. 0"), IOP( "dvt1w", BSIM4v6_MOD_DVT1W, IF_REAL, "Narrow Width effect coeff. 1"), IOP( "dvt2w", BSIM4v6_MOD_DVT2W, IF_REAL, "Narrow Width effect coeff. 2"), IOP( "drout", BSIM4v6_MOD_DROUT, IF_REAL, "DIBL coefficient of output resistance"), IOP( "dsub", BSIM4v6_MOD_DSUB, IF_REAL, "DIBL coefficient in the subthreshold region"), IOP( "vth0", BSIM4v6_MOD_VTH0, IF_REAL,"Threshold voltage"), IOPR("vtho", BSIM4v6_MOD_VTH0, IF_REAL,"Threshold voltage"), IOP( "ua", BSIM4v6_MOD_UA, IF_REAL, "Linear gate dependence of mobility"), IOP( "ua1", BSIM4v6_MOD_UA1, IF_REAL, "Temperature coefficient of ua"), IOP( "ub", BSIM4v6_MOD_UB, IF_REAL, "Quadratic gate dependence of mobility"), IOP( "ub1", BSIM4v6_MOD_UB1, IF_REAL, "Temperature coefficient of ub"), IOP( "uc", BSIM4v6_MOD_UC, IF_REAL, "Body-bias dependence of mobility"), IOP( "uc1", BSIM4v6_MOD_UC1, IF_REAL, "Temperature coefficient of uc"), IOP( "ud", BSIM4v6_MOD_UD, IF_REAL, "Coulomb scattering factor of mobility"), IOP( "ud1", BSIM4v6_MOD_UD1, IF_REAL, "Temperature coefficient of ud"), IOP( "up", BSIM4v6_MOD_UP, IF_REAL, "Channel length linear factor of mobility"), IOP( "lp", BSIM4v6_MOD_LP, IF_REAL, "Channel length exponential factor of mobility"), IOP( "u0", BSIM4v6_MOD_U0, IF_REAL, "Low-field mobility at Tnom"), IOP( "eu", BSIM4v6_MOD_EU, IF_REAL, "Mobility exponent"), IOP( "ucs", BSIM4v6_MOD_UCS, IF_REAL, "Colombic scattering exponent"), IOP( "ute", BSIM4v6_MOD_UTE, IF_REAL, "Temperature coefficient of mobility"), IOP( "ucste", BSIM4v6_MOD_UCSTE, IF_REAL,"Temperature coefficient of colombic mobility"), IOP( "voff", BSIM4v6_MOD_VOFF, IF_REAL, "Threshold voltage offset"), IOP( "minv", BSIM4v6_MOD_MINV, IF_REAL, "Fitting parameter for moderate inversion in Vgsteff"), IOP( "minvcv", BSIM4v6_MOD_MINVCV, IF_REAL, "Fitting parameter for moderate inversion in Vgsteffcv"), IOP( "voffl", BSIM4v6_MOD_VOFFL, IF_REAL, "Length dependence parameter for Vth offset"), IOP( "voffcvl", BSIM4v6_MOD_VOFFCVL, IF_REAL, "Length dependence parameter for Vth offset in CV"), IOP( "tnom", BSIM4v6_MOD_TNOM, IF_REAL, "Parameter measurement temperature"), IOP( "cgso", BSIM4v6_MOD_CGSO, IF_REAL, "Gate-source overlap capacitance per width"), IOP( "cgdo", BSIM4v6_MOD_CGDO, IF_REAL, "Gate-drain overlap capacitance per width"), IOP( "cgbo", BSIM4v6_MOD_CGBO, IF_REAL, "Gate-bulk overlap capacitance per length"), IOP( "xpart", BSIM4v6_MOD_XPART, IF_REAL, "Channel charge partitioning"), IOP( "delta", BSIM4v6_MOD_DELTA, IF_REAL, "Effective Vds parameter"), IOP( "rsh", BSIM4v6_MOD_RSH, IF_REAL, "Source-drain sheet resistance"), IOP( "rdsw", BSIM4v6_MOD_RDSW, IF_REAL, "Source-drain resistance per width"), IOP( "rdswmin", BSIM4v6_MOD_RDSWMIN, IF_REAL, "Source-drain resistance per width at high Vg"), IOP( "rsw", BSIM4v6_MOD_RSW, IF_REAL, "Source resistance per width"), IOP( "rdw", BSIM4v6_MOD_RDW, IF_REAL, "Drain resistance per width"), IOP( "rdwmin", BSIM4v6_MOD_RDWMIN, IF_REAL, "Drain resistance per width at high Vg"), IOP( "rswmin", BSIM4v6_MOD_RSWMIN, IF_REAL, "Source resistance per width at high Vg"), IOP( "prwg", BSIM4v6_MOD_PRWG, IF_REAL, "Gate-bias effect on parasitic resistance "), IOP( "prwb", BSIM4v6_MOD_PRWB, IF_REAL, "Body-effect on parasitic resistance "), IOP( "prt", BSIM4v6_MOD_PRT, IF_REAL, "Temperature coefficient of parasitic resistance "), IOP( "eta0", BSIM4v6_MOD_ETA0, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "etab", BSIM4v6_MOD_ETAB, IF_REAL, "Subthreshold region DIBL coefficient"), IOP( "pclm", BSIM4v6_MOD_PCLM, IF_REAL, "Channel length modulation Coefficient"), IOP( "pdiblc1", BSIM4v6_MOD_PDIBL1, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblc2", BSIM4v6_MOD_PDIBL2, IF_REAL, "Drain-induced barrier lowering coefficient"), IOP( "pdiblcb", BSIM4v6_MOD_PDIBLB, IF_REAL, "Body-effect on drain-induced barrier lowering"), IOP( "fprout", BSIM4v6_MOD_FPROUT, IF_REAL, "Rout degradation coefficient for pocket devices"), IOP( "pdits", BSIM4v6_MOD_PDITS, IF_REAL, "Coefficient for drain-induced Vth shifts"), IOP( "pditsl", BSIM4v6_MOD_PDITSL, IF_REAL, "Length dependence of drain-induced Vth shifts"), IOP( "pditsd", BSIM4v6_MOD_PDITSD, IF_REAL, "Vds dependence of drain-induced Vth shifts"), IOP( "pscbe1", BSIM4v6_MOD_PSCBE1, IF_REAL, "Substrate current body-effect coefficient"), IOP( "pscbe2", BSIM4v6_MOD_PSCBE2, IF_REAL, "Substrate current body-effect coefficient"), IOP( "pvag", BSIM4v6_MOD_PVAG, IF_REAL, "Gate dependence of output resistance parameter"), IOP( "jss", BSIM4v6_MOD_JSS, IF_REAL, "Bottom source junction reverse saturation current density"), IOP( "jsws", BSIM4v6_MOD_JSWS, IF_REAL, "Isolation edge sidewall source junction reverse saturation current density"), IOP( "jswgs", BSIM4v6_MOD_JSWGS, IF_REAL, "Gate edge source junction reverse saturation current density"), IOP( "pbs", BSIM4v6_MOD_PBS, IF_REAL, "Source junction built-in potential"), IOP( "njs", BSIM4v6_MOD_NJS, IF_REAL, "Source junction emission coefficient"), IOP( "xtis", BSIM4v6_MOD_XTIS, IF_REAL, "Source junction current temperature exponent"), IOP( "mjs", BSIM4v6_MOD_MJS, IF_REAL, "Source bottom junction capacitance grading coefficient"), IOP( "pbsws", BSIM4v6_MOD_PBSWS, IF_REAL, "Source sidewall junction capacitance built in potential"), IOP( "mjsws", BSIM4v6_MOD_MJSWS, IF_REAL, "Source sidewall junction capacitance grading coefficient"), IOP( "pbswgs", BSIM4v6_MOD_PBSWGS, IF_REAL, "Source (gate side) sidewall junction capacitance built in potential"), IOP( "mjswgs", BSIM4v6_MOD_MJSWGS, IF_REAL, "Source (gate side) sidewall junction capacitance grading coefficient"), IOP( "cjs", BSIM4v6_MOD_CJS, IF_REAL, "Source bottom junction capacitance per unit area"), IOP( "cjsws", BSIM4v6_MOD_CJSWS, IF_REAL, "Source sidewall junction capacitance per unit periphery"), IOP( "cjswgs", BSIM4v6_MOD_CJSWGS, IF_REAL, "Source (gate side) sidewall junction capacitance per unit width"), IOP( "jsd", BSIM4v6_MOD_JSD, IF_REAL, "Bottom drain junction reverse saturation current density"), IOP( "jswd", BSIM4v6_MOD_JSWD, IF_REAL, "Isolation edge sidewall drain junction reverse saturation current density"), IOP( "jswgd", BSIM4v6_MOD_JSWGD, IF_REAL, "Gate edge drain junction reverse saturation current density"), IOP( "pbd", BSIM4v6_MOD_PBD, IF_REAL, "Drain junction built-in potential"), IOP( "njd", BSIM4v6_MOD_NJD, IF_REAL, "Drain junction emission coefficient"), IOP( "xtid", BSIM4v6_MOD_XTID, IF_REAL, "Drainjunction current temperature exponent"), IOP( "mjd", BSIM4v6_MOD_MJD, IF_REAL, "Drain bottom junction capacitance grading coefficient"), IOP( "pbswd", BSIM4v6_MOD_PBSWD, IF_REAL, "Drain sidewall junction capacitance built in potential"), IOP( "mjswd", BSIM4v6_MOD_MJSWD, IF_REAL, "Drain sidewall junction capacitance grading coefficient"), IOP( "pbswgd", BSIM4v6_MOD_PBSWGD, IF_REAL, "Drain (gate side) sidewall junction capacitance built in potential"), IOP( "mjswgd", BSIM4v6_MOD_MJSWGD, IF_REAL, "Drain (gate side) sidewall junction capacitance grading coefficient"), IOP( "cjd", BSIM4v6_MOD_CJD, IF_REAL, "Drain bottom junction capacitance per unit area"), IOP( "cjswd", BSIM4v6_MOD_CJSWD, IF_REAL, "Drain sidewall junction capacitance per unit periphery"), IOP( "cjswgd", BSIM4v6_MOD_CJSWGD, IF_REAL, "Drain (gate side) sidewall junction capacitance per unit width"), IOP( "vfbcv", BSIM4v6_MOD_VFBCV, IF_REAL, "Flat Band Voltage parameter for capmod=0 only"), IOP( "vfb", BSIM4v6_MOD_VFB, IF_REAL, "Flat Band Voltage"), IOP( "tpb", BSIM4v6_MOD_TPB, IF_REAL, "Temperature coefficient of pb"), IOP( "tcj", BSIM4v6_MOD_TCJ, IF_REAL, "Temperature coefficient of cj"), IOP( "tpbsw", BSIM4v6_MOD_TPBSW, IF_REAL, "Temperature coefficient of pbsw"), IOP( "tcjsw", BSIM4v6_MOD_TCJSW, IF_REAL, "Temperature coefficient of cjsw"), IOP( "tpbswg", BSIM4v6_MOD_TPBSWG, IF_REAL, "Temperature coefficient of pbswg"), IOP( "tcjswg", BSIM4v6_MOD_TCJSWG, IF_REAL, "Temperature coefficient of cjswg"), IOP( "acde", BSIM4v6_MOD_ACDE, IF_REAL, "Exponential coefficient for finite charge thickness"), IOP( "moin", BSIM4v6_MOD_MOIN, IF_REAL, "Coefficient for gate-bias dependent surface potential"), IOP( "noff", BSIM4v6_MOD_NOFF, IF_REAL, "C-V turn-on/off parameter"), IOP( "voffcv", BSIM4v6_MOD_VOFFCV, IF_REAL, "C-V lateral-shift parameter"), IOP( "dmcg", BSIM4v6_MOD_DMCG, IF_REAL, "Distance of Mid-Contact to Gate edge"), IOP( "dmci", BSIM4v6_MOD_DMCI, IF_REAL, "Distance of Mid-Contact to Isolation"), IOP( "dmdg", BSIM4v6_MOD_DMDG, IF_REAL, "Distance of Mid-Diffusion to Gate edge"), IOP( "dmcgt", BSIM4v6_MOD_DMCGT, IF_REAL, "Distance of Mid-Contact to Gate edge in Test structures"), IOP( "xgw", BSIM4v6_MOD_XGW, IF_REAL, "Distance from gate contact center to device edge"), IOP( "xgl", BSIM4v6_MOD_XGL, IF_REAL, "Variation in Ldrawn"), IOP( "rshg", BSIM4v6_MOD_RSHG, IF_REAL, "Gate sheet resistance"), IOP( "ngcon", BSIM4v6_MOD_NGCON, IF_REAL, "Number of gate contacts"), IOP( "xrcrg1", BSIM4v6_MOD_XRCRG1, IF_REAL, "First fitting parameter the bias-dependent Rg"), IOP( "xrcrg2", BSIM4v6_MOD_XRCRG2, IF_REAL, "Second fitting parameter the bias-dependent Rg"), IOP( "lambda", BSIM4v6_MOD_LAMBDA, IF_REAL, " Velocity overshoot parameter"), IOP( "vtl", BSIM4v6_MOD_VTL, IF_REAL, " thermal velocity"), IOP( "lc", BSIM4v6_MOD_LC, IF_REAL, " back scattering parameter"), IOP( "xn", BSIM4v6_MOD_XN, IF_REAL, " back scattering parameter"), IOP( "vfbsdoff", BSIM4v6_MOD_VFBSDOFF, IF_REAL, "S/D flatband voltage offset"), IOP( "tvfbsdoff", BSIM4v6_MOD_TVFBSDOFF, IF_REAL, "Temperature parameter for vfbsdoff"), IOP( "tvoff", BSIM4v6_MOD_TVOFF, IF_REAL, "Temperature parameter for voff"), IOP( "lintnoi", BSIM4v6_MOD_LINTNOI, IF_REAL, "lint offset for noise calculation"), IOP( "lint", BSIM4v6_MOD_LINT, IF_REAL, "Length reduction parameter"), IOP( "ll", BSIM4v6_MOD_LL, IF_REAL, "Length reduction parameter"), IOP( "llc", BSIM4v6_MOD_LLC, IF_REAL, "Length reduction parameter for CV"), IOP( "lln", BSIM4v6_MOD_LLN, IF_REAL, "Length reduction parameter"), IOP( "lw", BSIM4v6_MOD_LW, IF_REAL, "Length reduction parameter"), IOP( "lwc", BSIM4v6_MOD_LWC, IF_REAL, "Length reduction parameter for CV"), IOP( "lwn", BSIM4v6_MOD_LWN, IF_REAL, "Length reduction parameter"), IOP( "lwl", BSIM4v6_MOD_LWL, IF_REAL, "Length reduction parameter"), IOP( "lwlc", BSIM4v6_MOD_LWLC, IF_REAL, "Length reduction parameter for CV"), IOP( "lmin", BSIM4v6_MOD_LMIN, IF_REAL, "Minimum length for the model"), IOP( "lmax", BSIM4v6_MOD_LMAX, IF_REAL, "Maximum length for the model"), IOP( "wr", BSIM4v6_MOD_WR, IF_REAL, "Width dependence of rds"), IOP( "wint", BSIM4v6_MOD_WINT, IF_REAL, "Width reduction parameter"), IOP( "dwg", BSIM4v6_MOD_DWG, IF_REAL, "Width reduction parameter"), IOP( "dwb", BSIM4v6_MOD_DWB, IF_REAL, "Width reduction parameter"), IOP( "wl", BSIM4v6_MOD_WL, IF_REAL, "Width reduction parameter"), IOP( "wlc", BSIM4v6_MOD_WLC, IF_REAL, "Width reduction parameter for CV"), IOP( "wln", BSIM4v6_MOD_WLN, IF_REAL, "Width reduction parameter"), IOP( "ww", BSIM4v6_MOD_WW, IF_REAL, "Width reduction parameter"), IOP( "wwc", BSIM4v6_MOD_WWC, IF_REAL, "Width reduction parameter for CV"), IOP( "wwn", BSIM4v6_MOD_WWN, IF_REAL, "Width reduction parameter"), IOP( "wwl", BSIM4v6_MOD_WWL, IF_REAL, "Width reduction parameter"), IOP( "wwlc", BSIM4v6_MOD_WWLC, IF_REAL, "Width reduction parameter for CV"), IOP( "wmin", BSIM4v6_MOD_WMIN, IF_REAL, "Minimum width for the model"), IOP( "wmax", BSIM4v6_MOD_WMAX, IF_REAL, "Maximum width for the model"), IOP( "b0", BSIM4v6_MOD_B0, IF_REAL, "Abulk narrow width parameter"), IOP( "b1", BSIM4v6_MOD_B1, IF_REAL, "Abulk narrow width parameter"), IOP( "cgsl", BSIM4v6_MOD_CGSL, IF_REAL, "New C-V model parameter"), IOP( "cgdl", BSIM4v6_MOD_CGDL, IF_REAL, "New C-V model parameter"), IOP( "ckappas", BSIM4v6_MOD_CKAPPAS, IF_REAL, "S/G overlap C-V parameter "), IOP( "ckappad", BSIM4v6_MOD_CKAPPAD, IF_REAL, "D/G overlap C-V parameter"), IOP( "cf", BSIM4v6_MOD_CF, IF_REAL, "Fringe capacitance parameter"), IOP( "clc", BSIM4v6_MOD_CLC, IF_REAL, "Vdsat parameter for C-V model"), IOP( "cle", BSIM4v6_MOD_CLE, IF_REAL, "Vdsat parameter for C-V model"), IOP( "dwc", BSIM4v6_MOD_DWC, IF_REAL, "Delta W for C-V model"), IOP( "dlc", BSIM4v6_MOD_DLC, IF_REAL, "Delta L for C-V model"), IOP( "xw", BSIM4v6_MOD_XW, IF_REAL, "W offset for channel width due to mask/etch effect"), IOP( "xl", BSIM4v6_MOD_XL, IF_REAL, "L offset for channel length due to mask/etch effect"), IOP( "dlcig", BSIM4v6_MOD_DLCIG, IF_REAL, "Delta L for Ig model"), IOP( "dlcigd", BSIM4v6_MOD_DLCIGD, IF_REAL, "Delta L for Ig model drain side"), IOP( "dwj", BSIM4v6_MOD_DWJ, IF_REAL, "Delta W for S/D junctions"), IOP( "alpha0", BSIM4v6_MOD_ALPHA0, IF_REAL, "substrate current model parameter"), IOP( "alpha1", BSIM4v6_MOD_ALPHA1, IF_REAL, "substrate current model parameter"), IOP( "beta0", BSIM4v6_MOD_BETA0, IF_REAL, "substrate current model parameter"), IOP( "agidl", BSIM4v6_MOD_AGIDL, IF_REAL, "Pre-exponential constant for GIDL"), IOP( "bgidl", BSIM4v6_MOD_BGIDL, IF_REAL, "Exponential constant for GIDL"), IOP( "cgidl", BSIM4v6_MOD_CGIDL, IF_REAL, "Parameter for body-bias dependence of GIDL"), IOP( "egidl", BSIM4v6_MOD_EGIDL, IF_REAL, "Fitting parameter for Bandbending"), IOP( "agisl", BSIM4v6_MOD_AGISL, IF_REAL, "Pre-exponential constant for GISL"), IOP( "bgisl", BSIM4v6_MOD_BGISL, IF_REAL, "Exponential constant for GISL"), IOP( "cgisl", BSIM4v6_MOD_CGISL, IF_REAL, "Parameter for body-bias dependence of GISL"), IOP( "egisl", BSIM4v6_MOD_EGISL, IF_REAL, "Fitting parameter for Bandbending"), IOP( "aigc", BSIM4v6_MOD_AIGC, IF_REAL, "Parameter for Igc"), IOP( "bigc", BSIM4v6_MOD_BIGC, IF_REAL, "Parameter for Igc"), IOP( "cigc", BSIM4v6_MOD_CIGC, IF_REAL, "Parameter for Igc"), IOP( "aigsd", BSIM4v6_MOD_AIGSD, IF_REAL, "Parameter for Igs,d"), IOP( "bigsd", BSIM4v6_MOD_BIGSD, IF_REAL, "Parameter for Igs,d"), IOP( "cigsd", BSIM4v6_MOD_CIGSD, IF_REAL, "Parameter for Igs,d"), IOP( "aigs", BSIM4v6_MOD_AIGS, IF_REAL, "Parameter for Igs"), IOP( "bigs", BSIM4v6_MOD_BIGS, IF_REAL, "Parameter for Igs"), IOP( "cigs", BSIM4v6_MOD_CIGS, IF_REAL, "Parameter for Igs"), IOP( "aigd", BSIM4v6_MOD_AIGD, IF_REAL, "Parameter for Igd"), IOP( "bigd", BSIM4v6_MOD_BIGD, IF_REAL, "Parameter for Igd"), IOP( "cigd", BSIM4v6_MOD_CIGD, IF_REAL, "Parameter for Igd"), IOP( "aigbacc", BSIM4v6_MOD_AIGBACC, IF_REAL, "Parameter for Igb"), IOP( "bigbacc", BSIM4v6_MOD_BIGBACC, IF_REAL, "Parameter for Igb"), IOP( "cigbacc", BSIM4v6_MOD_CIGBACC, IF_REAL, "Parameter for Igb"), IOP( "aigbinv", BSIM4v6_MOD_AIGBINV, IF_REAL, "Parameter for Igb"), IOP( "bigbinv", BSIM4v6_MOD_BIGBINV, IF_REAL, "Parameter for Igb"), IOP( "cigbinv", BSIM4v6_MOD_CIGBINV, IF_REAL, "Parameter for Igb"), IOP( "nigc", BSIM4v6_MOD_NIGC, IF_REAL, "Parameter for Igc slope"), IOP( "nigbinv", BSIM4v6_MOD_NIGBINV, IF_REAL, "Parameter for Igbinv slope"), IOP( "nigbacc", BSIM4v6_MOD_NIGBACC, IF_REAL, "Parameter for Igbacc slope"), IOP( "ntox", BSIM4v6_MOD_NTOX, IF_REAL, "Exponent for Tox ratio"), IOP( "eigbinv", BSIM4v6_MOD_EIGBINV, IF_REAL, "Parameter for the Si bandgap for Igbinv"), IOP( "pigcd", BSIM4v6_MOD_PIGCD, IF_REAL, "Parameter for Igc partition"), IOP( "poxedge", BSIM4v6_MOD_POXEDGE, IF_REAL, "Factor for the gate edge Tox"), IOP( "ijthdfwd", BSIM4v6_MOD_IJTHDFWD, IF_REAL, "Forward drain diode forward limiting current"), IOP( "ijthsfwd", BSIM4v6_MOD_IJTHSFWD, IF_REAL, "Forward source diode forward limiting current"), IOP( "ijthdrev", BSIM4v6_MOD_IJTHDREV, IF_REAL, "Reverse drain diode forward limiting current"), IOP( "ijthsrev", BSIM4v6_MOD_IJTHSREV, IF_REAL, "Reverse source diode forward limiting current"), IOP( "xjbvd", BSIM4v6_MOD_XJBVD, IF_REAL, "Fitting parameter for drain diode breakdown current"), IOP( "xjbvs", BSIM4v6_MOD_XJBVS, IF_REAL, "Fitting parameter for source diode breakdown current"), IOP( "bvd", BSIM4v6_MOD_BVD, IF_REAL, "Drain diode breakdown voltage"), IOP( "bvs", BSIM4v6_MOD_BVS, IF_REAL, "Source diode breakdown voltage"), IOP( "jtss", BSIM4v6_MOD_JTSS, IF_REAL, "Source bottom trap-assisted saturation current density"), IOP( "jtsd", BSIM4v6_MOD_JTSD, IF_REAL, "Drain bottom trap-assisted saturation current density"), IOP( "jtssws", BSIM4v6_MOD_JTSSWS, IF_REAL, "Source STI sidewall trap-assisted saturation current density"), IOP( "jtsswd", BSIM4v6_MOD_JTSSWD, IF_REAL, "Drain STI sidewall trap-assisted saturation current density"), IOP( "jtsswgs", BSIM4v6_MOD_JTSSWGS, IF_REAL, "Source gate-edge sidewall trap-assisted saturation current density"), IOP( "jtsswgd", BSIM4v6_MOD_JTSSWGD, IF_REAL, "Drain gate-edge sidewall trap-assisted saturation current density"), IOP( "jtweff", BSIM4v6_MOD_JTWEFF, IF_REAL, "TAT current width dependence"), IOP( "njts", BSIM4v6_MOD_NJTS, IF_REAL, "Non-ideality factor for bottom junction"), IOP( "njtssw", BSIM4v6_MOD_NJTSSW, IF_REAL, "Non-ideality factor for STI sidewall junction"), IOP( "njtsswg", BSIM4v6_MOD_NJTSSWG, IF_REAL, "Non-ideality factor for gate-edge sidewall junction"), IOP( "njtsd", BSIM4v6_MOD_NJTSD, IF_REAL, "Non-ideality factor for bottom junction drain side"), IOP( "njtsswd", BSIM4v6_MOD_NJTSSWD, IF_REAL, "Non-ideality factor for STI sidewall junction drain side"), IOP( "njtsswgd", BSIM4v6_MOD_NJTSSWGD, IF_REAL, "Non-ideality factor for gate-edge sidewall junction drain side"), IOP( "xtss", BSIM4v6_MOD_XTSS, IF_REAL, "Power dependence of JTSS on temperature"), IOP( "xtsd", BSIM4v6_MOD_XTSD, IF_REAL, "Power dependence of JTSD on temperature"), IOP( "xtssws", BSIM4v6_MOD_XTSSWS, IF_REAL, "Power dependence of JTSSWS on temperature"), IOP( "xtsswd", BSIM4v6_MOD_XTSSWD, IF_REAL, "Power dependence of JTSSWD on temperature"), IOP( "xtsswgs", BSIM4v6_MOD_XTSSWGS, IF_REAL, "Power dependence of JTSSWGS on temperature"), IOP( "xtsswgd", BSIM4v6_MOD_XTSSWGD, IF_REAL, "Power dependence of JTSSWGD on temperature"), IOP( "tnjts", BSIM4v6_MOD_TNJTS, IF_REAL, "Temperature coefficient for NJTS"), IOP( "tnjtssw", BSIM4v6_MOD_TNJTSSW, IF_REAL, "Temperature coefficient for NJTSSW"), IOP( "tnjtsswg", BSIM4v6_MOD_TNJTSSWG, IF_REAL, "Temperature coefficient for NJTSSWG"), IOP( "tnjtsd", BSIM4v6_MOD_TNJTSD, IF_REAL, "Temperature coefficient for NJTSD"), IOP( "tnjtsswd", BSIM4v6_MOD_TNJTSSWD, IF_REAL, "Temperature coefficient for NJTSSWD"), IOP( "tnjtsswgd", BSIM4v6_MOD_TNJTSSWGD, IF_REAL, "Temperature coefficient for NJTSSWGD"), IOP( "vtss", BSIM4v6_MOD_VTSS, IF_REAL, "Source bottom trap-assisted voltage dependent parameter"), IOP( "vtsd", BSIM4v6_MOD_VTSD, IF_REAL, "Drain bottom trap-assisted voltage dependent parameter"), IOP( "vtssws", BSIM4v6_MOD_VTSSWS, IF_REAL, "Source STI sidewall trap-assisted voltage dependent parameter"), IOP( "vtsswd", BSIM4v6_MOD_VTSSWD, IF_REAL, "Drain STI sidewall trap-assisted voltage dependent parameter"), IOP( "vtsswgs", BSIM4v6_MOD_VTSSWGS, IF_REAL, "Source gate-edge sidewall trap-assisted voltage dependent parameter"), IOP( "vtsswgd", BSIM4v6_MOD_VTSSWGD, IF_REAL, "Drain gate-edge sidewall trap-assisted voltage dependent parameter"), IOP( "gbmin", BSIM4v6_MOD_GBMIN, IF_REAL, "Minimum body conductance"), IOP( "rbdb", BSIM4v6_MOD_RBDB, IF_REAL, "Resistance between bNode and dbNode"), IOP( "rbpb", BSIM4v6_MOD_RBPB, IF_REAL, "Resistance between bNodePrime and bNode"), IOP( "rbsb", BSIM4v6_MOD_RBSB, IF_REAL, "Resistance between bNode and sbNode"), IOP( "rbps", BSIM4v6_MOD_RBPS, IF_REAL, "Resistance between bNodePrime and sbNode"), IOP( "rbpd", BSIM4v6_MOD_RBPD, IF_REAL, "Resistance between bNodePrime and bNode"), IOP( "rbps0", BSIM4v6_MOD_RBPS0, IF_REAL , "Body resistance RBPS scaling"), IOP( "rbpsl", BSIM4v6_MOD_RBPSL, IF_REAL , "Body resistance RBPS L scaling"), IOP( "rbpsw", BSIM4v6_MOD_RBPSW, IF_REAL , "Body resistance RBPS W scaling"), IOP( "rbpsnf", BSIM4v6_MOD_RBPSNF, IF_REAL , "Body resistance RBPS NF scaling"), IOP( "rbpd0", BSIM4v6_MOD_RBPD0, IF_REAL , "Body resistance RBPD scaling"), IOP( "rbpdl", BSIM4v6_MOD_RBPDL, IF_REAL , "Body resistance RBPD L scaling"), IOP( "rbpdw", BSIM4v6_MOD_RBPDW, IF_REAL , "Body resistance RBPD W scaling"), IOP( "rbpdnf", BSIM4v6_MOD_RBPDNF, IF_REAL , "Body resistance RBPD NF scaling"), IOP( "rbpbx0", BSIM4v6_MOD_RBPBX0, IF_REAL , "Body resistance RBPBX scaling"), IOP( "rbpbxl", BSIM4v6_MOD_RBPBXL, IF_REAL , "Body resistance RBPBX L scaling"), IOP( "rbpbxw", BSIM4v6_MOD_RBPBXW, IF_REAL , "Body resistance RBPBX W scaling"), IOP( "rbpbxnf", BSIM4v6_MOD_RBPBXNF, IF_REAL , "Body resistance RBPBX NF scaling"), IOP( "rbpby0", BSIM4v6_MOD_RBPBY0, IF_REAL , "Body resistance RBPBY scaling"), IOP( "rbpbyl", BSIM4v6_MOD_RBPBYL, IF_REAL , "Body resistance RBPBY L scaling"), IOP( "rbpbyw", BSIM4v6_MOD_RBPBYW, IF_REAL , "Body resistance RBPBY W scaling"), IOP( "rbpbynf", BSIM4v6_MOD_RBPBYNF, IF_REAL , "Body resistance RBPBY NF scaling"), IOP( "rbsbx0", BSIM4v6_MOD_RBSBX0, IF_REAL , "Body resistance RBSBX scaling"), IOP( "rbsby0", BSIM4v6_MOD_RBSBY0, IF_REAL , "Body resistance RBSBY scaling"), IOP( "rbdbx0", BSIM4v6_MOD_RBDBX0, IF_REAL , "Body resistance RBDBX scaling"), IOP( "rbdby0", BSIM4v6_MOD_RBDBY0, IF_REAL , "Body resistance RBDBY scaling"), IOP( "rbsdbxl", BSIM4v6_MOD_RBSDBXL, IF_REAL , "Body resistance RBSDBX L scaling"), IOP( "rbsdbxw", BSIM4v6_MOD_RBSDBXW, IF_REAL , "Body resistance RBSDBX W scaling"), IOP( "rbsdbxnf", BSIM4v6_MOD_RBSDBXNF, IF_REAL , "Body resistance RBSDBX NF scaling"), IOP( "rbsdbyl", BSIM4v6_MOD_RBSDBYL, IF_REAL , "Body resistance RBSDBY L scaling"), IOP( "rbsdbyw", BSIM4v6_MOD_RBSDBYW, IF_REAL , "Body resistance RBSDBY W scaling"), IOP( "rbsdbynf", BSIM4v6_MOD_RBSDBYNF, IF_REAL , "Body resistance RBSDBY NF scaling"), IOP( "lcdsc", BSIM4v6_MOD_LCDSC, IF_REAL, "Length dependence of cdsc"), IOP( "lcdscb", BSIM4v6_MOD_LCDSCB, IF_REAL, "Length dependence of cdscb"), IOP( "lcdscd", BSIM4v6_MOD_LCDSCD, IF_REAL, "Length dependence of cdscd"), IOP( "lcit", BSIM4v6_MOD_LCIT, IF_REAL, "Length dependence of cit"), IOP( "lnfactor", BSIM4v6_MOD_LNFACTOR, IF_REAL, "Length dependence of nfactor"), IOP( "lxj", BSIM4v6_MOD_LXJ, IF_REAL, "Length dependence of xj"), IOP( "lvsat", BSIM4v6_MOD_LVSAT, IF_REAL, "Length dependence of vsat"), IOP( "lat", BSIM4v6_MOD_LAT, IF_REAL, "Length dependence of at"), IOP( "la0", BSIM4v6_MOD_LA0, IF_REAL, "Length dependence of a0"), IOP( "lags", BSIM4v6_MOD_LAGS, IF_REAL, "Length dependence of ags"), IOP( "la1", BSIM4v6_MOD_LA1, IF_REAL, "Length dependence of a1"), IOP( "la2", BSIM4v6_MOD_LA2, IF_REAL, "Length dependence of a2"), IOP( "lketa", BSIM4v6_MOD_LKETA, IF_REAL, "Length dependence of keta"), IOP( "lnsub", BSIM4v6_MOD_LNSUB, IF_REAL, "Length dependence of nsub"), IOP( "lndep", BSIM4v6_MOD_LNDEP, IF_REAL, "Length dependence of ndep"), IOP( "lnsd", BSIM4v6_MOD_LNSD, IF_REAL, "Length dependence of nsd"), IOP( "lphin", BSIM4v6_MOD_LPHIN, IF_REAL, "Length dependence of phin"), IOP( "lngate", BSIM4v6_MOD_LNGATE, IF_REAL, "Length dependence of ngate"), IOP( "lgamma1", BSIM4v6_MOD_LGAMMA1, IF_REAL, "Length dependence of gamma1"), IOP( "lgamma2", BSIM4v6_MOD_LGAMMA2, IF_REAL, "Length dependence of gamma2"), IOP( "lvbx", BSIM4v6_MOD_LVBX, IF_REAL, "Length dependence of vbx"), IOP( "lvbm", BSIM4v6_MOD_LVBM, IF_REAL, "Length dependence of vbm"), IOP( "lxt", BSIM4v6_MOD_LXT, IF_REAL, "Length dependence of xt"), IOP( "lk1", BSIM4v6_MOD_LK1, IF_REAL, "Length dependence of k1"), IOP( "lkt1", BSIM4v6_MOD_LKT1, IF_REAL, "Length dependence of kt1"), IOP( "lkt1l", BSIM4v6_MOD_LKT1L, IF_REAL, "Length dependence of kt1l"), IOP( "lkt2", BSIM4v6_MOD_LKT2, IF_REAL, "Length dependence of kt2"), IOP( "lk2", BSIM4v6_MOD_LK2, IF_REAL, "Length dependence of k2"), IOP( "lk3", BSIM4v6_MOD_LK3, IF_REAL, "Length dependence of k3"), IOP( "lk3b", BSIM4v6_MOD_LK3B, IF_REAL, "Length dependence of k3b"), IOP( "lw0", BSIM4v6_MOD_LW0, IF_REAL, "Length dependence of w0"), IOP( "ldvtp0", BSIM4v6_MOD_LDVTP0, IF_REAL, "Length dependence of dvtp0"), IOP( "ldvtp1", BSIM4v6_MOD_LDVTP1, IF_REAL, "Length dependence of dvtp1"), IOP( "llpe0", BSIM4v6_MOD_LLPE0, IF_REAL, "Length dependence of lpe0"), IOP( "llpeb", BSIM4v6_MOD_LLPEB, IF_REAL, "Length dependence of lpeb"), IOP( "ldvt0", BSIM4v6_MOD_LDVT0, IF_REAL, "Length dependence of dvt0"), IOP( "ldvt1", BSIM4v6_MOD_LDVT1, IF_REAL, "Length dependence of dvt1"), IOP( "ldvt2", BSIM4v6_MOD_LDVT2, IF_REAL, "Length dependence of dvt2"), IOP( "ldvt0w", BSIM4v6_MOD_LDVT0W, IF_REAL, "Length dependence of dvt0w"), IOP( "ldvt1w", BSIM4v6_MOD_LDVT1W, IF_REAL, "Length dependence of dvt1w"), IOP( "ldvt2w", BSIM4v6_MOD_LDVT2W, IF_REAL, "Length dependence of dvt2w"), IOP( "ldrout", BSIM4v6_MOD_LDROUT, IF_REAL, "Length dependence of drout"), IOP( "ldsub", BSIM4v6_MOD_LDSUB, IF_REAL, "Length dependence of dsub"), IOP( "lvth0", BSIM4v6_MOD_LVTH0, IF_REAL,"Length dependence of vth0"), IOPR("lvtho", BSIM4v6_MOD_LVTH0, IF_REAL,"Length dependence of vtho"), IOP( "lua", BSIM4v6_MOD_LUA, IF_REAL, "Length dependence of ua"), IOP( "lua1", BSIM4v6_MOD_LUA1, IF_REAL, "Length dependence of ua1"), IOP( "lub", BSIM4v6_MOD_LUB, IF_REAL, "Length dependence of ub"), IOP( "lub1", BSIM4v6_MOD_LUB1, IF_REAL, "Length dependence of ub1"), IOP( "luc", BSIM4v6_MOD_LUC, IF_REAL, "Length dependence of uc"), IOP( "luc1", BSIM4v6_MOD_LUC1, IF_REAL, "Length dependence of uc1"), IOP( "lud", BSIM4v6_MOD_LUD, IF_REAL, "Length dependence of ud"), IOP( "lud1", BSIM4v6_MOD_LUD1, IF_REAL, "Length dependence of ud1"), IOP( "lup", BSIM4v6_MOD_LUP, IF_REAL, "Length dependence of up"), IOP( "llp", BSIM4v6_MOD_LLP, IF_REAL, "Length dependence of lp"), IOP( "lu0", BSIM4v6_MOD_LU0, IF_REAL, "Length dependence of u0"), IOP( "lute", BSIM4v6_MOD_LUTE, IF_REAL, "Length dependence of ute"), IOP( "lucste", BSIM4v6_MOD_LUCSTE, IF_REAL, "Length dependence of ucste"), IOP( "lvoff", BSIM4v6_MOD_LVOFF, IF_REAL, "Length dependence of voff"), IOP( "lminv", BSIM4v6_MOD_LMINV, IF_REAL, "Length dependence of minv"), IOP( "lminvcv", BSIM4v6_MOD_LMINVCV, IF_REAL, "Length dependence of minvcv"), IOP( "ldelta", BSIM4v6_MOD_LDELTA, IF_REAL, "Length dependence of delta"), IOP( "lrdsw", BSIM4v6_MOD_LRDSW, IF_REAL, "Length dependence of rdsw "), IOP( "lrsw", BSIM4v6_MOD_LRSW, IF_REAL, "Length dependence of rsw"), IOP( "lrdw", BSIM4v6_MOD_LRDW, IF_REAL, "Length dependence of rdw"), IOP( "lprwg", BSIM4v6_MOD_LPRWG, IF_REAL, "Length dependence of prwg "), IOP( "lprwb", BSIM4v6_MOD_LPRWB, IF_REAL, "Length dependence of prwb "), IOP( "lprt", BSIM4v6_MOD_LPRT, IF_REAL, "Length dependence of prt "), IOP( "leta0", BSIM4v6_MOD_LETA0, IF_REAL, "Length dependence of eta0"), IOP( "letab", BSIM4v6_MOD_LETAB, IF_REAL, "Length dependence of etab"), IOP( "lpclm", BSIM4v6_MOD_LPCLM, IF_REAL, "Length dependence of pclm"), IOP( "lpdiblc1", BSIM4v6_MOD_LPDIBL1, IF_REAL, "Length dependence of pdiblc1"), IOP( "lpdiblc2", BSIM4v6_MOD_LPDIBL2, IF_REAL, "Length dependence of pdiblc2"), IOP( "lpdiblcb", BSIM4v6_MOD_LPDIBLB, IF_REAL, "Length dependence of pdiblcb"), IOP( "lfprout", BSIM4v6_MOD_LFPROUT, IF_REAL, "Length dependence of pdiblcb"), IOP( "lpdits", BSIM4v6_MOD_LPDITS, IF_REAL, "Length dependence of pdits"), IOP( "lpditsd", BSIM4v6_MOD_LPDITSD, IF_REAL, "Length dependence of pditsd"), IOP( "lpscbe1", BSIM4v6_MOD_LPSCBE1, IF_REAL, "Length dependence of pscbe1"), IOP( "lpscbe2", BSIM4v6_MOD_LPSCBE2, IF_REAL, "Length dependence of pscbe2"), IOP( "lpvag", BSIM4v6_MOD_LPVAG, IF_REAL, "Length dependence of pvag"), IOP( "lwr", BSIM4v6_MOD_LWR, IF_REAL, "Length dependence of wr"), IOP( "ldwg", BSIM4v6_MOD_LDWG, IF_REAL, "Length dependence of dwg"), IOP( "ldwb", BSIM4v6_MOD_LDWB, IF_REAL, "Length dependence of dwb"), IOP( "lb0", BSIM4v6_MOD_LB0, IF_REAL, "Length dependence of b0"), IOP( "lb1", BSIM4v6_MOD_LB1, IF_REAL, "Length dependence of b1"), IOP( "lcgsl", BSIM4v6_MOD_LCGSL, IF_REAL, "Length dependence of cgsl"), IOP( "lcgdl", BSIM4v6_MOD_LCGDL, IF_REAL, "Length dependence of cgdl"), IOP( "lckappas", BSIM4v6_MOD_LCKAPPAS, IF_REAL, "Length dependence of ckappas"), IOP( "lckappad", BSIM4v6_MOD_LCKAPPAD, IF_REAL, "Length dependence of ckappad"), IOP( "lcf", BSIM4v6_MOD_LCF, IF_REAL, "Length dependence of cf"), IOP( "lclc", BSIM4v6_MOD_LCLC, IF_REAL, "Length dependence of clc"), IOP( "lcle", BSIM4v6_MOD_LCLE, IF_REAL, "Length dependence of cle"), IOP( "lalpha0", BSIM4v6_MOD_LALPHA0, IF_REAL, "Length dependence of alpha0"), IOP( "lalpha1", BSIM4v6_MOD_LALPHA1, IF_REAL, "Length dependence of alpha1"), IOP( "lbeta0", BSIM4v6_MOD_LBETA0, IF_REAL, "Length dependence of beta0"), IOP( "lagidl", BSIM4v6_MOD_LAGIDL, IF_REAL, "Length dependence of agidl"), IOP( "lbgidl", BSIM4v6_MOD_LBGIDL, IF_REAL, "Length dependence of bgidl"), IOP( "lcgidl", BSIM4v6_MOD_LCGIDL, IF_REAL, "Length dependence of cgidl"), IOP( "legidl", BSIM4v6_MOD_LEGIDL, IF_REAL, "Length dependence of egidl"), IOP( "lagisl", BSIM4v6_MOD_LAGISL, IF_REAL, "Length dependence of agisl"), IOP( "lbgisl", BSIM4v6_MOD_LBGISL, IF_REAL, "Length dependence of bgisl"), IOP( "lcgisl", BSIM4v6_MOD_LCGISL, IF_REAL, "Length dependence of cgisl"), IOP( "legisl", BSIM4v6_MOD_LEGISL, IF_REAL, "Length dependence of egisl"), IOP( "laigc", BSIM4v6_MOD_LAIGC, IF_REAL, "Length dependence of aigc"), IOP( "lbigc", BSIM4v6_MOD_LBIGC, IF_REAL, "Length dependence of bigc"), IOP( "lcigc", BSIM4v6_MOD_LCIGC, IF_REAL, "Length dependence of cigc"), IOP( "laigsd", BSIM4v6_MOD_LAIGSD, IF_REAL, "Length dependence of aigsd"), IOP( "lbigsd", BSIM4v6_MOD_LBIGSD, IF_REAL, "Length dependence of bigsd"), IOP( "lcigsd", BSIM4v6_MOD_LCIGSD, IF_REAL, "Length dependence of cigsd"), IOP( "laigs", BSIM4v6_MOD_LAIGS, IF_REAL, "Length dependence of aigs"), IOP( "lbigs", BSIM4v6_MOD_LBIGS, IF_REAL, "Length dependence of bigs"), IOP( "lcigs", BSIM4v6_MOD_LCIGS, IF_REAL, "Length dependence of cigs"), IOP( "laigd", BSIM4v6_MOD_LAIGD, IF_REAL, "Length dependence of aigd"), IOP( "lbigd", BSIM4v6_MOD_LBIGD, IF_REAL, "Length dependence of bigd"), IOP( "lcigd", BSIM4v6_MOD_LCIGD, IF_REAL, "Length dependence of cigd"), IOP( "laigbacc", BSIM4v6_MOD_LAIGBACC, IF_REAL, "Length dependence of aigbacc"), IOP( "lbigbacc", BSIM4v6_MOD_LBIGBACC, IF_REAL, "Length dependence of bigbacc"), IOP( "lcigbacc", BSIM4v6_MOD_LCIGBACC, IF_REAL, "Length dependence of cigbacc"), IOP( "laigbinv", BSIM4v6_MOD_LAIGBINV, IF_REAL, "Length dependence of aigbinv"), IOP( "lbigbinv", BSIM4v6_MOD_LBIGBINV, IF_REAL, "Length dependence of bigbinv"), IOP( "lcigbinv", BSIM4v6_MOD_LCIGBINV, IF_REAL, "Length dependence of cigbinv"), IOP( "lnigc", BSIM4v6_MOD_LNIGC, IF_REAL, "Length dependence of nigc"), IOP( "lnigbinv", BSIM4v6_MOD_LNIGBINV, IF_REAL, "Length dependence of nigbinv"), IOP( "lnigbacc", BSIM4v6_MOD_LNIGBACC, IF_REAL, "Length dependence of nigbacc"), IOP( "lntox", BSIM4v6_MOD_LNTOX, IF_REAL, "Length dependence of ntox"), IOP( "leigbinv", BSIM4v6_MOD_LEIGBINV, IF_REAL, "Length dependence for eigbinv"), IOP( "lpigcd", BSIM4v6_MOD_LPIGCD, IF_REAL, "Length dependence for pigcd"), IOP( "lpoxedge", BSIM4v6_MOD_LPOXEDGE, IF_REAL, "Length dependence for poxedge"), IOP( "lvfbcv", BSIM4v6_MOD_LVFBCV, IF_REAL, "Length dependence of vfbcv"), IOP( "lvfb", BSIM4v6_MOD_LVFB, IF_REAL, "Length dependence of vfb"), IOP( "lacde", BSIM4v6_MOD_LACDE, IF_REAL, "Length dependence of acde"), IOP( "lmoin", BSIM4v6_MOD_LMOIN, IF_REAL, "Length dependence of moin"), IOP( "lnoff", BSIM4v6_MOD_LNOFF, IF_REAL, "Length dependence of noff"), IOP( "lvoffcv", BSIM4v6_MOD_LVOFFCV, IF_REAL, "Length dependence of voffcv"), IOP( "lxrcrg1", BSIM4v6_MOD_LXRCRG1, IF_REAL, "Length dependence of xrcrg1"), IOP( "lxrcrg2", BSIM4v6_MOD_LXRCRG2, IF_REAL, "Length dependence of xrcrg2"), IOP( "llambda", BSIM4v6_MOD_LLAMBDA, IF_REAL, "Length dependence of lambda"), IOP( "lvtl", BSIM4v6_MOD_LVTL, IF_REAL, " Length dependence of vtl"), IOP( "lxn", BSIM4v6_MOD_LXN, IF_REAL, " Length dependence of xn"), IOP( "leu", BSIM4v6_MOD_LEU, IF_REAL, " Length dependence of eu"), IOP( "lucs", BSIM4v6_MOD_LUCS, IF_REAL, "Length dependence of lucs"), IOP( "lvfbsdoff", BSIM4v6_MOD_LVFBSDOFF, IF_REAL, "Length dependence of vfbsdoff"), IOP( "ltvfbsdoff", BSIM4v6_MOD_LTVFBSDOFF, IF_REAL, "Length dependence of tvfbsdoff"), IOP( "ltvoff", BSIM4v6_MOD_LTVOFF, IF_REAL, "Length dependence of tvoff"), IOP( "wcdsc", BSIM4v6_MOD_WCDSC, IF_REAL, "Width dependence of cdsc"), IOP( "wcdscb", BSIM4v6_MOD_WCDSCB, IF_REAL, "Width dependence of cdscb"), IOP( "wcdscd", BSIM4v6_MOD_WCDSCD, IF_REAL, "Width dependence of cdscd"), IOP( "wcit", BSIM4v6_MOD_WCIT, IF_REAL, "Width dependence of cit"), IOP( "wnfactor", BSIM4v6_MOD_WNFACTOR, IF_REAL, "Width dependence of nfactor"), IOP( "wxj", BSIM4v6_MOD_WXJ, IF_REAL, "Width dependence of xj"), IOP( "wvsat", BSIM4v6_MOD_WVSAT, IF_REAL, "Width dependence of vsat"), IOP( "wat", BSIM4v6_MOD_WAT, IF_REAL, "Width dependence of at"), IOP( "wa0", BSIM4v6_MOD_WA0, IF_REAL, "Width dependence of a0"), IOP( "wags", BSIM4v6_MOD_WAGS, IF_REAL, "Width dependence of ags"), IOP( "wa1", BSIM4v6_MOD_WA1, IF_REAL, "Width dependence of a1"), IOP( "wa2", BSIM4v6_MOD_WA2, IF_REAL, "Width dependence of a2"), IOP( "wketa", BSIM4v6_MOD_WKETA, IF_REAL, "Width dependence of keta"), IOP( "wnsub", BSIM4v6_MOD_WNSUB, IF_REAL, "Width dependence of nsub"), IOP( "wndep", BSIM4v6_MOD_WNDEP, IF_REAL, "Width dependence of ndep"), IOP( "wnsd", BSIM4v6_MOD_WNSD, IF_REAL, "Width dependence of nsd"), IOP( "wphin", BSIM4v6_MOD_WPHIN, IF_REAL, "Width dependence of phin"), IOP( "wngate", BSIM4v6_MOD_WNGATE, IF_REAL, "Width dependence of ngate"), IOP( "wgamma1", BSIM4v6_MOD_WGAMMA1, IF_REAL, "Width dependence of gamma1"), IOP( "wgamma2", BSIM4v6_MOD_WGAMMA2, IF_REAL, "Width dependence of gamma2"), IOP( "wvbx", BSIM4v6_MOD_WVBX, IF_REAL, "Width dependence of vbx"), IOP( "wvbm", BSIM4v6_MOD_WVBM, IF_REAL, "Width dependence of vbm"), IOP( "wxt", BSIM4v6_MOD_WXT, IF_REAL, "Width dependence of xt"), IOP( "wk1", BSIM4v6_MOD_WK1, IF_REAL, "Width dependence of k1"), IOP( "wkt1", BSIM4v6_MOD_WKT1, IF_REAL, "Width dependence of kt1"), IOP( "wkt1l", BSIM4v6_MOD_WKT1L, IF_REAL, "Width dependence of kt1l"), IOP( "wkt2", BSIM4v6_MOD_WKT2, IF_REAL, "Width dependence of kt2"), IOP( "wk2", BSIM4v6_MOD_WK2, IF_REAL, "Width dependence of k2"), IOP( "wk3", BSIM4v6_MOD_WK3, IF_REAL, "Width dependence of k3"), IOP( "wk3b", BSIM4v6_MOD_WK3B, IF_REAL, "Width dependence of k3b"), IOP( "ww0", BSIM4v6_MOD_WW0, IF_REAL, "Width dependence of w0"), IOP( "wdvtp0", BSIM4v6_MOD_WDVTP0, IF_REAL, "Width dependence of dvtp0"), IOP( "wdvtp1", BSIM4v6_MOD_WDVTP1, IF_REAL, "Width dependence of dvtp1"), IOP( "wlpe0", BSIM4v6_MOD_WLPE0, IF_REAL, "Width dependence of lpe0"), IOP( "wlpeb", BSIM4v6_MOD_WLPEB, IF_REAL, "Width dependence of lpeb"), IOP( "wdvt0", BSIM4v6_MOD_WDVT0, IF_REAL, "Width dependence of dvt0"), IOP( "wdvt1", BSIM4v6_MOD_WDVT1, IF_REAL, "Width dependence of dvt1"), IOP( "wdvt2", BSIM4v6_MOD_WDVT2, IF_REAL, "Width dependence of dvt2"), IOP( "wdvt0w", BSIM4v6_MOD_WDVT0W, IF_REAL, "Width dependence of dvt0w"), IOP( "wdvt1w", BSIM4v6_MOD_WDVT1W, IF_REAL, "Width dependence of dvt1w"), IOP( "wdvt2w", BSIM4v6_MOD_WDVT2W, IF_REAL, "Width dependence of dvt2w"), IOP( "wdrout", BSIM4v6_MOD_WDROUT, IF_REAL, "Width dependence of drout"), IOP( "wdsub", BSIM4v6_MOD_WDSUB, IF_REAL, "Width dependence of dsub"), IOP( "wvth0", BSIM4v6_MOD_WVTH0, IF_REAL,"Width dependence of vth0"), IOPR("wvtho", BSIM4v6_MOD_WVTH0, IF_REAL,"Width dependence of vtho"), IOP( "wua", BSIM4v6_MOD_WUA, IF_REAL, "Width dependence of ua"), IOP( "wua1", BSIM4v6_MOD_WUA1, IF_REAL, "Width dependence of ua1"), IOP( "wub", BSIM4v6_MOD_WUB, IF_REAL, "Width dependence of ub"), IOP( "wub1", BSIM4v6_MOD_WUB1, IF_REAL, "Width dependence of ub1"), IOP( "wuc", BSIM4v6_MOD_WUC, IF_REAL, "Width dependence of uc"), IOP( "wuc1", BSIM4v6_MOD_WUC1, IF_REAL, "Width dependence of uc1"), IOP( "wud", BSIM4v6_MOD_WUD, IF_REAL, "Width dependence of ud"), IOP( "wud1", BSIM4v6_MOD_WUD1, IF_REAL, "Width dependence of ud1"), IOP( "wup", BSIM4v6_MOD_WUP, IF_REAL, "Width dependence of up"), IOP( "wlp", BSIM4v6_MOD_WLP, IF_REAL, "Width dependence of lp"), IOP( "wu0", BSIM4v6_MOD_WU0, IF_REAL, "Width dependence of u0"), IOP( "wute", BSIM4v6_MOD_WUTE, IF_REAL, "Width dependence of ute"), IOP( "wucste", BSIM4v6_MOD_WUCSTE, IF_REAL, "Width dependence of ucste"), IOP( "wvoff", BSIM4v6_MOD_WVOFF, IF_REAL, "Width dependence of voff"), IOP( "wminv", BSIM4v6_MOD_WMINV, IF_REAL, "Width dependence of minv"), IOP( "wminvcv", BSIM4v6_MOD_WMINVCV, IF_REAL, "Width dependence of minvcv"), IOP( "wdelta", BSIM4v6_MOD_WDELTA, IF_REAL, "Width dependence of delta"), IOP( "wrdsw", BSIM4v6_MOD_WRDSW, IF_REAL, "Width dependence of rdsw "), IOP( "wrsw", BSIM4v6_MOD_WRSW, IF_REAL, "Width dependence of rsw"), IOP( "wrdw", BSIM4v6_MOD_WRDW, IF_REAL, "Width dependence of rdw"), IOP( "wprwg", BSIM4v6_MOD_WPRWG, IF_REAL, "Width dependence of prwg "), IOP( "wprwb", BSIM4v6_MOD_WPRWB, IF_REAL, "Width dependence of prwb "), IOP( "wprt", BSIM4v6_MOD_WPRT, IF_REAL, "Width dependence of prt"), IOP( "weta0", BSIM4v6_MOD_WETA0, IF_REAL, "Width dependence of eta0"), IOP( "wetab", BSIM4v6_MOD_WETAB, IF_REAL, "Width dependence of etab"), IOP( "wpclm", BSIM4v6_MOD_WPCLM, IF_REAL, "Width dependence of pclm"), IOP( "wpdiblc1", BSIM4v6_MOD_WPDIBL1, IF_REAL, "Width dependence of pdiblc1"), IOP( "wpdiblc2", BSIM4v6_MOD_WPDIBL2, IF_REAL, "Width dependence of pdiblc2"), IOP( "wpdiblcb", BSIM4v6_MOD_WPDIBLB, IF_REAL, "Width dependence of pdiblcb"), IOP( "wfprout", BSIM4v6_MOD_WFPROUT, IF_REAL, "Width dependence of pdiblcb"), IOP( "wpdits", BSIM4v6_MOD_WPDITS, IF_REAL, "Width dependence of pdits"), IOP( "wpditsd", BSIM4v6_MOD_WPDITSD, IF_REAL, "Width dependence of pditsd"), IOP( "wpscbe1", BSIM4v6_MOD_WPSCBE1, IF_REAL, "Width dependence of pscbe1"), IOP( "wpscbe2", BSIM4v6_MOD_WPSCBE2, IF_REAL, "Width dependence of pscbe2"), IOP( "wpvag", BSIM4v6_MOD_WPVAG, IF_REAL, "Width dependence of pvag"), IOP( "wwr", BSIM4v6_MOD_WWR, IF_REAL, "Width dependence of wr"), IOP( "wdwg", BSIM4v6_MOD_WDWG, IF_REAL, "Width dependence of dwg"), IOP( "wdwb", BSIM4v6_MOD_WDWB, IF_REAL, "Width dependence of dwb"), IOP( "wb0", BSIM4v6_MOD_WB0, IF_REAL, "Width dependence of b0"), IOP( "wb1", BSIM4v6_MOD_WB1, IF_REAL, "Width dependence of b1"), IOP( "wcgsl", BSIM4v6_MOD_WCGSL, IF_REAL, "Width dependence of cgsl"), IOP( "wcgdl", BSIM4v6_MOD_WCGDL, IF_REAL, "Width dependence of cgdl"), IOP( "wckappas", BSIM4v6_MOD_WCKAPPAS, IF_REAL, "Width dependence of ckappas"), IOP( "wckappad", BSIM4v6_MOD_WCKAPPAD, IF_REAL, "Width dependence of ckappad"), IOP( "wcf", BSIM4v6_MOD_WCF, IF_REAL, "Width dependence of cf"), IOP( "wclc", BSIM4v6_MOD_WCLC, IF_REAL, "Width dependence of clc"), IOP( "wcle", BSIM4v6_MOD_WCLE, IF_REAL, "Width dependence of cle"), IOP( "walpha0", BSIM4v6_MOD_WALPHA0, IF_REAL, "Width dependence of alpha0"), IOP( "walpha1", BSIM4v6_MOD_WALPHA1, IF_REAL, "Width dependence of alpha1"), IOP( "wbeta0", BSIM4v6_MOD_WBETA0, IF_REAL, "Width dependence of beta0"), IOP( "wagidl", BSIM4v6_MOD_WAGIDL, IF_REAL, "Width dependence of agidl"), IOP( "wbgidl", BSIM4v6_MOD_WBGIDL, IF_REAL, "Width dependence of bgidl"), IOP( "wcgidl", BSIM4v6_MOD_WCGIDL, IF_REAL, "Width dependence of cgidl"), IOP( "wegidl", BSIM4v6_MOD_WEGIDL, IF_REAL, "Width dependence of egidl"), IOP( "wagisl", BSIM4v6_MOD_WAGISL, IF_REAL, "Width dependence of agisl"), IOP( "wbgisl", BSIM4v6_MOD_WBGISL, IF_REAL, "Width dependence of bgisl"), IOP( "wcgisl", BSIM4v6_MOD_WCGISL, IF_REAL, "Width dependence of cgisl"), IOP( "wegisl", BSIM4v6_MOD_WEGISL, IF_REAL, "Width dependence of egisl"), IOP( "waigc", BSIM4v6_MOD_WAIGC, IF_REAL, "Width dependence of aigc"), IOP( "wbigc", BSIM4v6_MOD_WBIGC, IF_REAL, "Width dependence of bigc"), IOP( "wcigc", BSIM4v6_MOD_WCIGC, IF_REAL, "Width dependence of cigc"), IOP( "waigsd", BSIM4v6_MOD_WAIGSD, IF_REAL, "Width dependence of aigsd"), IOP( "wbigsd", BSIM4v6_MOD_WBIGSD, IF_REAL, "Width dependence of bigsd"), IOP( "wcigsd", BSIM4v6_MOD_WCIGSD, IF_REAL, "Width dependence of cigsd"), IOP( "waigs", BSIM4v6_MOD_WAIGS, IF_REAL, "Width dependence of aigs"), IOP( "wbigs", BSIM4v6_MOD_WBIGS, IF_REAL, "Width dependence of bigs"), IOP( "wcigs", BSIM4v6_MOD_WCIGS, IF_REAL, "Width dependence of cigs"), IOP( "waigd", BSIM4v6_MOD_WAIGD, IF_REAL, "Width dependence of aigd"), IOP( "wbigd", BSIM4v6_MOD_WBIGD, IF_REAL, "Width dependence of bigd"), IOP( "wcigd", BSIM4v6_MOD_WCIGD, IF_REAL, "Width dependence of cigd"), IOP( "waigbacc", BSIM4v6_MOD_WAIGBACC, IF_REAL, "Width dependence of aigbacc"), IOP( "wbigbacc", BSIM4v6_MOD_WBIGBACC, IF_REAL, "Width dependence of bigbacc"), IOP( "wcigbacc", BSIM4v6_MOD_WCIGBACC, IF_REAL, "Width dependence of cigbacc"), IOP( "waigbinv", BSIM4v6_MOD_WAIGBINV, IF_REAL, "Width dependence of aigbinv"), IOP( "wbigbinv", BSIM4v6_MOD_WBIGBINV, IF_REAL, "Width dependence of bigbinv"), IOP( "wcigbinv", BSIM4v6_MOD_WCIGBINV, IF_REAL, "Width dependence of cigbinv"), IOP( "wnigc", BSIM4v6_MOD_WNIGC, IF_REAL, "Width dependence of nigc"), IOP( "wnigbinv", BSIM4v6_MOD_WNIGBINV, IF_REAL, "Width dependence of nigbinv"), IOP( "wnigbacc", BSIM4v6_MOD_WNIGBACC, IF_REAL, "Width dependence of nigbacc"), IOP( "wntox", BSIM4v6_MOD_WNTOX, IF_REAL, "Width dependence of ntox"), IOP( "weigbinv", BSIM4v6_MOD_WEIGBINV, IF_REAL, "Width dependence for eigbinv"), IOP( "wpigcd", BSIM4v6_MOD_WPIGCD, IF_REAL, "Width dependence for pigcd"), IOP( "wpoxedge", BSIM4v6_MOD_WPOXEDGE, IF_REAL, "Width dependence for poxedge"), IOP( "wvfbcv", BSIM4v6_MOD_WVFBCV, IF_REAL, "Width dependence of vfbcv"), IOP( "wvfb", BSIM4v6_MOD_WVFB, IF_REAL, "Width dependence of vfb"), IOP( "wacde", BSIM4v6_MOD_WACDE, IF_REAL, "Width dependence of acde"), IOP( "wmoin", BSIM4v6_MOD_WMOIN, IF_REAL, "Width dependence of moin"), IOP( "wnoff", BSIM4v6_MOD_WNOFF, IF_REAL, "Width dependence of noff"), IOP( "wvoffcv", BSIM4v6_MOD_WVOFFCV, IF_REAL, "Width dependence of voffcv"), IOP( "wxrcrg1", BSIM4v6_MOD_WXRCRG1, IF_REAL, "Width dependence of xrcrg1"), IOP( "wxrcrg2", BSIM4v6_MOD_WXRCRG2, IF_REAL, "Width dependence of xrcrg2"), IOP( "wlambda", BSIM4v6_MOD_WLAMBDA, IF_REAL, "Width dependence of lambda"), IOP( "wvtl", BSIM4v6_MOD_WVTL, IF_REAL, "Width dependence of vtl"), IOP( "wxn", BSIM4v6_MOD_WXN, IF_REAL, "Width dependence of xn"), IOP( "weu", BSIM4v6_MOD_WEU, IF_REAL, "Width dependence of eu"), IOP( "wucs", BSIM4v6_MOD_WUCS, IF_REAL, "Width dependence of ucs"), IOP( "wvfbsdoff", BSIM4v6_MOD_WVFBSDOFF, IF_REAL, "Width dependence of vfbsdoff"), IOP( "wtvfbsdoff", BSIM4v6_MOD_WTVFBSDOFF, IF_REAL, "Width dependence of tvfbsdoff"), IOP( "wtvoff", BSIM4v6_MOD_WTVOFF, IF_REAL, "Width dependence of tvoff"), IOP( "pcdsc", BSIM4v6_MOD_PCDSC, IF_REAL, "Cross-term dependence of cdsc"), IOP( "pcdscb", BSIM4v6_MOD_PCDSCB, IF_REAL, "Cross-term dependence of cdscb"), IOP( "pcdscd", BSIM4v6_MOD_PCDSCD, IF_REAL, "Cross-term dependence of cdscd"), IOP( "pcit", BSIM4v6_MOD_PCIT, IF_REAL, "Cross-term dependence of cit"), IOP( "pnfactor", BSIM4v6_MOD_PNFACTOR, IF_REAL, "Cross-term dependence of nfactor"), IOP( "pxj", BSIM4v6_MOD_PXJ, IF_REAL, "Cross-term dependence of xj"), IOP( "pvsat", BSIM4v6_MOD_PVSAT, IF_REAL, "Cross-term dependence of vsat"), IOP( "pat", BSIM4v6_MOD_PAT, IF_REAL, "Cross-term dependence of at"), IOP( "pa0", BSIM4v6_MOD_PA0, IF_REAL, "Cross-term dependence of a0"), IOP( "pags", BSIM4v6_MOD_PAGS, IF_REAL, "Cross-term dependence of ags"), IOP( "pa1", BSIM4v6_MOD_PA1, IF_REAL, "Cross-term dependence of a1"), IOP( "pa2", BSIM4v6_MOD_PA2, IF_REAL, "Cross-term dependence of a2"), IOP( "pketa", BSIM4v6_MOD_PKETA, IF_REAL, "Cross-term dependence of keta"), IOP( "pnsub", BSIM4v6_MOD_PNSUB, IF_REAL, "Cross-term dependence of nsub"), IOP( "pndep", BSIM4v6_MOD_PNDEP, IF_REAL, "Cross-term dependence of ndep"), IOP( "pnsd", BSIM4v6_MOD_PNSD, IF_REAL, "Cross-term dependence of nsd"), IOP( "pphin", BSIM4v6_MOD_PPHIN, IF_REAL, "Cross-term dependence of phin"), IOP( "pngate", BSIM4v6_MOD_PNGATE, IF_REAL, "Cross-term dependence of ngate"), IOP( "pgamma1", BSIM4v6_MOD_PGAMMA1, IF_REAL, "Cross-term dependence of gamma1"), IOP( "pgamma2", BSIM4v6_MOD_PGAMMA2, IF_REAL, "Cross-term dependence of gamma2"), IOP( "pvbx", BSIM4v6_MOD_PVBX, IF_REAL, "Cross-term dependence of vbx"), IOP( "pvbm", BSIM4v6_MOD_PVBM, IF_REAL, "Cross-term dependence of vbm"), IOP( "pxt", BSIM4v6_MOD_PXT, IF_REAL, "Cross-term dependence of xt"), IOP( "pk1", BSIM4v6_MOD_PK1, IF_REAL, "Cross-term dependence of k1"), IOP( "pkt1", BSIM4v6_MOD_PKT1, IF_REAL, "Cross-term dependence of kt1"), IOP( "pkt1l", BSIM4v6_MOD_PKT1L, IF_REAL, "Cross-term dependence of kt1l"), IOP( "pkt2", BSIM4v6_MOD_PKT2, IF_REAL, "Cross-term dependence of kt2"), IOP( "pk2", BSIM4v6_MOD_PK2, IF_REAL, "Cross-term dependence of k2"), IOP( "pk3", BSIM4v6_MOD_PK3, IF_REAL, "Cross-term dependence of k3"), IOP( "pk3b", BSIM4v6_MOD_PK3B, IF_REAL, "Cross-term dependence of k3b"), IOP( "pw0", BSIM4v6_MOD_PW0, IF_REAL, "Cross-term dependence of w0"), IOP( "pdvtp0", BSIM4v6_MOD_PDVTP0, IF_REAL, "Cross-term dependence of dvtp0"), IOP( "pdvtp1", BSIM4v6_MOD_PDVTP1, IF_REAL, "Cross-term dependence of dvtp1"), IOP( "plpe0", BSIM4v6_MOD_PLPE0, IF_REAL, "Cross-term dependence of lpe0"), IOP( "plpeb", BSIM4v6_MOD_PLPEB, IF_REAL, "Cross-term dependence of lpeb"), IOP( "pdvt0", BSIM4v6_MOD_PDVT0, IF_REAL, "Cross-term dependence of dvt0"), IOP( "pdvt1", BSIM4v6_MOD_PDVT1, IF_REAL, "Cross-term dependence of dvt1"), IOP( "pdvt2", BSIM4v6_MOD_PDVT2, IF_REAL, "Cross-term dependence of dvt2"), IOP( "pdvt0w", BSIM4v6_MOD_PDVT0W, IF_REAL, "Cross-term dependence of dvt0w"), IOP( "pdvt1w", BSIM4v6_MOD_PDVT1W, IF_REAL, "Cross-term dependence of dvt1w"), IOP( "pdvt2w", BSIM4v6_MOD_PDVT2W, IF_REAL, "Cross-term dependence of dvt2w"), IOP( "pdrout", BSIM4v6_MOD_PDROUT, IF_REAL, "Cross-term dependence of drout"), IOP( "pdsub", BSIM4v6_MOD_PDSUB, IF_REAL, "Cross-term dependence of dsub"), IOP( "pvth0", BSIM4v6_MOD_PVTH0, IF_REAL,"Cross-term dependence of vth0"), IOPR("pvtho", BSIM4v6_MOD_PVTH0, IF_REAL,"Cross-term dependence of vtho"), IOP( "pua", BSIM4v6_MOD_PUA, IF_REAL, "Cross-term dependence of ua"), IOP( "pua1", BSIM4v6_MOD_PUA1, IF_REAL, "Cross-term dependence of ua1"), IOP( "pub", BSIM4v6_MOD_PUB, IF_REAL, "Cross-term dependence of ub"), IOP( "pub1", BSIM4v6_MOD_PUB1, IF_REAL, "Cross-term dependence of ub1"), IOP( "puc", BSIM4v6_MOD_PUC, IF_REAL, "Cross-term dependence of uc"), IOP( "puc1", BSIM4v6_MOD_PUC1, IF_REAL, "Cross-term dependence of uc1"), IOP( "pud", BSIM4v6_MOD_PUD, IF_REAL, "Cross-term dependence of ud"), IOP( "pud1", BSIM4v6_MOD_PUD1, IF_REAL, "Cross-term dependence of ud1"), IOP( "pup", BSIM4v6_MOD_PUP, IF_REAL, "Cross-term dependence of up"), IOP( "plp", BSIM4v6_MOD_PLP, IF_REAL, "Cross-term dependence of lp"), IOP( "pu0", BSIM4v6_MOD_PU0, IF_REAL, "Cross-term dependence of u0"), IOP( "pute", BSIM4v6_MOD_PUTE, IF_REAL, "Cross-term dependence of ute"), IOP( "pucste", BSIM4v6_MOD_PUCSTE, IF_REAL, "Cross-term dependence of ucste"), IOP( "pvoff", BSIM4v6_MOD_PVOFF, IF_REAL, "Cross-term dependence of voff"), IOP( "pminv", BSIM4v6_MOD_PMINV, IF_REAL, "Cross-term dependence of minv"), IOP( "pminvcv", BSIM4v6_MOD_PMINVCV, IF_REAL, "Cross-term dependence of minvcv"), IOP( "pdelta", BSIM4v6_MOD_PDELTA, IF_REAL, "Cross-term dependence of delta"), IOP( "prdsw", BSIM4v6_MOD_PRDSW, IF_REAL, "Cross-term dependence of rdsw "), IOP( "prsw", BSIM4v6_MOD_PRSW, IF_REAL, "Cross-term dependence of rsw"), IOP( "prdw", BSIM4v6_MOD_PRDW, IF_REAL, "Cross-term dependence of rdw"), IOP( "pprwg", BSIM4v6_MOD_PPRWG, IF_REAL, "Cross-term dependence of prwg "), IOP( "pprwb", BSIM4v6_MOD_PPRWB, IF_REAL, "Cross-term dependence of prwb "), IOP( "pprt", BSIM4v6_MOD_PPRT, IF_REAL, "Cross-term dependence of prt "), IOP( "peta0", BSIM4v6_MOD_PETA0, IF_REAL, "Cross-term dependence of eta0"), IOP( "petab", BSIM4v6_MOD_PETAB, IF_REAL, "Cross-term dependence of etab"), IOP( "ppclm", BSIM4v6_MOD_PPCLM, IF_REAL, "Cross-term dependence of pclm"), IOP( "ppdiblc1", BSIM4v6_MOD_PPDIBL1, IF_REAL, "Cross-term dependence of pdiblc1"), IOP( "ppdiblc2", BSIM4v6_MOD_PPDIBL2, IF_REAL, "Cross-term dependence of pdiblc2"), IOP( "ppdiblcb", BSIM4v6_MOD_PPDIBLB, IF_REAL, "Cross-term dependence of pdiblcb"), IOP( "pfprout", BSIM4v6_MOD_PFPROUT, IF_REAL, "Cross-term dependence of pdiblcb"), IOP( "ppdits", BSIM4v6_MOD_PPDITS, IF_REAL, "Cross-term dependence of pdits"), IOP( "ppditsd", BSIM4v6_MOD_PPDITSD, IF_REAL, "Cross-term dependence of pditsd"), IOP( "ppscbe1", BSIM4v6_MOD_PPSCBE1, IF_REAL, "Cross-term dependence of pscbe1"), IOP( "ppscbe2", BSIM4v6_MOD_PPSCBE2, IF_REAL, "Cross-term dependence of pscbe2"), IOP( "ppvag", BSIM4v6_MOD_PPVAG, IF_REAL, "Cross-term dependence of pvag"), IOP( "pwr", BSIM4v6_MOD_PWR, IF_REAL, "Cross-term dependence of wr"), IOP( "pdwg", BSIM4v6_MOD_PDWG, IF_REAL, "Cross-term dependence of dwg"), IOP( "pdwb", BSIM4v6_MOD_PDWB, IF_REAL, "Cross-term dependence of dwb"), IOP( "pb0", BSIM4v6_MOD_PB0, IF_REAL, "Cross-term dependence of b0"), IOP( "pb1", BSIM4v6_MOD_PB1, IF_REAL, "Cross-term dependence of b1"), IOP( "pcgsl", BSIM4v6_MOD_PCGSL, IF_REAL, "Cross-term dependence of cgsl"), IOP( "pcgdl", BSIM4v6_MOD_PCGDL, IF_REAL, "Cross-term dependence of cgdl"), IOP( "pckappas", BSIM4v6_MOD_PCKAPPAS, IF_REAL, "Cross-term dependence of ckappas"), IOP( "pckappad", BSIM4v6_MOD_PCKAPPAD, IF_REAL, "Cross-term dependence of ckappad"), IOP( "pcf", BSIM4v6_MOD_PCF, IF_REAL, "Cross-term dependence of cf"), IOP( "pclc", BSIM4v6_MOD_PCLC, IF_REAL, "Cross-term dependence of clc"), IOP( "pcle", BSIM4v6_MOD_PCLE, IF_REAL, "Cross-term dependence of cle"), IOP( "palpha0", BSIM4v6_MOD_PALPHA0, IF_REAL, "Cross-term dependence of alpha0"), IOP( "palpha1", BSIM4v6_MOD_PALPHA1, IF_REAL, "Cross-term dependence of alpha1"), IOP( "pbeta0", BSIM4v6_MOD_PBETA0, IF_REAL, "Cross-term dependence of beta0"), IOP( "pagidl", BSIM4v6_MOD_PAGIDL, IF_REAL, "Cross-term dependence of agidl"), IOP( "pbgidl", BSIM4v6_MOD_PBGIDL, IF_REAL, "Cross-term dependence of bgidl"), IOP( "pcgidl", BSIM4v6_MOD_PCGIDL, IF_REAL, "Cross-term dependence of cgidl"), IOP( "pegidl", BSIM4v6_MOD_PEGIDL, IF_REAL, "Cross-term dependence of egidl"), IOP( "pagisl", BSIM4v6_MOD_PAGISL, IF_REAL, "Cross-term dependence of agisl"), IOP( "pbgisl", BSIM4v6_MOD_PBGISL, IF_REAL, "Cross-term dependence of bgisl"), IOP( "pcgisl", BSIM4v6_MOD_PCGISL, IF_REAL, "Cross-term dependence of cgisl"), IOP( "pegisl", BSIM4v6_MOD_PEGISL, IF_REAL, "Cross-term dependence of egisl"), IOP( "paigc", BSIM4v6_MOD_PAIGC, IF_REAL, "Cross-term dependence of aigc"), IOP( "pbigc", BSIM4v6_MOD_PBIGC, IF_REAL, "Cross-term dependence of bigc"), IOP( "pcigc", BSIM4v6_MOD_PCIGC, IF_REAL, "Cross-term dependence of cigc"), IOP( "paigsd", BSIM4v6_MOD_PAIGSD, IF_REAL, "Cross-term dependence of aigsd"), IOP( "pbigsd", BSIM4v6_MOD_PBIGSD, IF_REAL, "Cross-term dependence of bigsd"), IOP( "pcigsd", BSIM4v6_MOD_PCIGSD, IF_REAL, "Cross-term dependence of cigsd"), IOP( "paigs", BSIM4v6_MOD_PAIGS, IF_REAL, "Cross-term dependence of aigs"), IOP( "pbigs", BSIM4v6_MOD_PBIGS, IF_REAL, "Cross-term dependence of bigs"), IOP( "pcigs", BSIM4v6_MOD_PCIGS, IF_REAL, "Cross-term dependence of cigs"), IOP( "paigd", BSIM4v6_MOD_PAIGD, IF_REAL, "Cross-term dependence of aigd"), IOP( "pbigd", BSIM4v6_MOD_PBIGD, IF_REAL, "Cross-term dependence of bigd"), IOP( "pcigd", BSIM4v6_MOD_PCIGD, IF_REAL, "Cross-term dependence of cigd"), IOP( "paigbacc", BSIM4v6_MOD_PAIGBACC, IF_REAL, "Cross-term dependence of aigbacc"), IOP( "pbigbacc", BSIM4v6_MOD_PBIGBACC, IF_REAL, "Cross-term dependence of bigbacc"), IOP( "pcigbacc", BSIM4v6_MOD_PCIGBACC, IF_REAL, "Cross-term dependence of cigbacc"), IOP( "paigbinv", BSIM4v6_MOD_PAIGBINV, IF_REAL, "Cross-term dependence of aigbinv"), IOP( "pbigbinv", BSIM4v6_MOD_PBIGBINV, IF_REAL, "Cross-term dependence of bigbinv"), IOP( "pcigbinv", BSIM4v6_MOD_PCIGBINV, IF_REAL, "Cross-term dependence of cigbinv"), IOP( "pnigc", BSIM4v6_MOD_PNIGC, IF_REAL, "Cross-term dependence of nigc"), IOP( "pnigbinv", BSIM4v6_MOD_PNIGBINV, IF_REAL, "Cross-term dependence of nigbinv"), IOP( "pnigbacc", BSIM4v6_MOD_PNIGBACC, IF_REAL, "Cross-term dependence of nigbacc"), IOP( "pntox", BSIM4v6_MOD_PNTOX, IF_REAL, "Cross-term dependence of ntox"), IOP( "peigbinv", BSIM4v6_MOD_PEIGBINV, IF_REAL, "Cross-term dependence for eigbinv"), IOP( "ppigcd", BSIM4v6_MOD_PPIGCD, IF_REAL, "Cross-term dependence for pigcd"), IOP( "ppoxedge", BSIM4v6_MOD_PPOXEDGE, IF_REAL, "Cross-term dependence for poxedge"), IOP( "pvfbcv", BSIM4v6_MOD_PVFBCV, IF_REAL, "Cross-term dependence of vfbcv"), IOP( "pvfb", BSIM4v6_MOD_PVFB, IF_REAL, "Cross-term dependence of vfb"), IOP( "pacde", BSIM4v6_MOD_PACDE, IF_REAL, "Cross-term dependence of acde"), IOP( "pmoin", BSIM4v6_MOD_PMOIN, IF_REAL, "Cross-term dependence of moin"), IOP( "pnoff", BSIM4v6_MOD_PNOFF, IF_REAL, "Cross-term dependence of noff"), IOP( "pvoffcv", BSIM4v6_MOD_PVOFFCV, IF_REAL, "Cross-term dependence of voffcv"), IOP( "pxrcrg1", BSIM4v6_MOD_PXRCRG1, IF_REAL, "Cross-term dependence of xrcrg1"), IOP( "pxrcrg2", BSIM4v6_MOD_PXRCRG2, IF_REAL, "Cross-term dependence of xrcrg2"), IOP( "plambda", BSIM4v6_MOD_PLAMBDA, IF_REAL, "Cross-term dependence of lambda"), IOP( "pvtl", BSIM4v6_MOD_PVTL, IF_REAL, "Cross-term dependence of vtl"), IOP( "pxn", BSIM4v6_MOD_PXN, IF_REAL, "Cross-term dependence of xn"), IOP( "peu", BSIM4v6_MOD_PEU, IF_REAL, "Cross-term dependence of eu"), IOP( "pucs", BSIM4v6_MOD_PUCS, IF_REAL, "Cross-term dependence of ucs"), IOP( "pvfbsdoff", BSIM4v6_MOD_PVFBSDOFF, IF_REAL, "Cross-term dependence of vfbsdoff"), IOP( "ptvfbsdoff", BSIM4v6_MOD_PTVFBSDOFF, IF_REAL, "Cross-term dependence of tvfbsdoff"), IOP( "ptvoff", BSIM4v6_MOD_PTVOFF, IF_REAL, "Cross-term dependence of tvoff"), /* stress effect*/ IOP( "saref", BSIM4v6_MOD_SAREF, IF_REAL, "Reference distance between OD edge to poly of one side"), IOP( "sbref", BSIM4v6_MOD_SBREF, IF_REAL, "Reference distance between OD edge to poly of the other side"), IOP( "wlod", BSIM4v6_MOD_WLOD, IF_REAL, "Width parameter for stress effect"), IOP( "ku0", BSIM4v6_MOD_KU0, IF_REAL, "Mobility degradation/enhancement coefficient for LOD"), IOP( "kvsat", BSIM4v6_MOD_KVSAT, IF_REAL, "Saturation velocity degradation/enhancement parameter for LOD"), IOP( "kvth0", BSIM4v6_MOD_KVTH0, IF_REAL, "Threshold degradation/enhancement parameter for LOD"), IOP( "tku0", BSIM4v6_MOD_TKU0, IF_REAL, "Temperature coefficient of KU0"), IOP( "llodku0", BSIM4v6_MOD_LLODKU0, IF_REAL, "Length parameter for u0 LOD effect"), IOP( "wlodku0", BSIM4v6_MOD_WLODKU0, IF_REAL, "Width parameter for u0 LOD effect"), IOP( "llodvth", BSIM4v6_MOD_LLODVTH, IF_REAL, "Length parameter for vth LOD effect"), IOP( "wlodvth", BSIM4v6_MOD_WLODVTH, IF_REAL, "Width parameter for vth LOD effect"), IOP( "lku0", BSIM4v6_MOD_LKU0, IF_REAL, "Length dependence of ku0"), IOP( "wku0", BSIM4v6_MOD_WKU0, IF_REAL, "Width dependence of ku0"), IOP( "pku0", BSIM4v6_MOD_PKU0, IF_REAL, "Cross-term dependence of ku0"), IOP( "lkvth0", BSIM4v6_MOD_LKVTH0, IF_REAL, "Length dependence of kvth0"), IOP( "wkvth0", BSIM4v6_MOD_WKVTH0, IF_REAL, "Width dependence of kvth0"), IOP( "pkvth0", BSIM4v6_MOD_PKVTH0, IF_REAL, "Cross-term dependence of kvth0"), IOP( "stk2", BSIM4v6_MOD_STK2, IF_REAL, "K2 shift factor related to stress effect on vth"), IOP( "lodk2", BSIM4v6_MOD_LODK2, IF_REAL, "K2 shift modification factor for stress effect"), IOP( "steta0", BSIM4v6_MOD_STETA0, IF_REAL, "eta0 shift factor related to stress effect on vth"), IOP( "lodeta0", BSIM4v6_MOD_LODETA0, IF_REAL, "eta0 shift modification factor for stress effect"), /* Well Proximity Effect */ IOP( "web", BSIM4v6_MOD_WEB, IF_REAL, "Coefficient for SCB"), IOP( "wec", BSIM4v6_MOD_WEC, IF_REAL, "Coefficient for SCC"), IOP( "kvth0we", BSIM4v6_MOD_KVTH0WE, IF_REAL, "Threshold shift factor for well proximity effect"), IOP( "k2we", BSIM4v6_MOD_K2WE, IF_REAL, " K2 shift factor for well proximity effect "), IOP( "ku0we", BSIM4v6_MOD_KU0WE, IF_REAL, " Mobility degradation factor for well proximity effect "), IOP( "scref", BSIM4v6_MOD_SCREF, IF_REAL, " Reference distance to calculate SCA, SCB and SCC"), IOP( "wpemod", BSIM4v6_MOD_WPEMOD, IF_REAL, " Flag for WPE model (WPEMOD=1 to activate this model) "), IOP( "lkvth0we", BSIM4v6_MOD_LKVTH0WE, IF_REAL, "Length dependence of kvth0we"), IOP( "lk2we", BSIM4v6_MOD_LK2WE, IF_REAL, " Length dependence of k2we "), IOP( "lku0we", BSIM4v6_MOD_LKU0WE, IF_REAL, " Length dependence of ku0we "), IOP( "wkvth0we", BSIM4v6_MOD_WKVTH0WE, IF_REAL, "Width dependence of kvth0we"), IOP( "wk2we", BSIM4v6_MOD_WK2WE, IF_REAL, " Width dependence of k2we "), IOP( "wku0we", BSIM4v6_MOD_WKU0WE, IF_REAL, " Width dependence of ku0we "), IOP( "pkvth0we", BSIM4v6_MOD_PKVTH0WE, IF_REAL, "Cross-term dependence of kvth0we"), IOP( "pk2we", BSIM4v6_MOD_PK2WE, IF_REAL, " Cross-term dependence of k2we "), IOP( "pku0we", BSIM4v6_MOD_PKU0WE, IF_REAL, " Cross-term dependence of ku0we "), IOP( "noia", BSIM4v6_MOD_NOIA, IF_REAL, "Flicker noise parameter"), IOP( "noib", BSIM4v6_MOD_NOIB, IF_REAL, "Flicker noise parameter"), IOP( "noic", BSIM4v6_MOD_NOIC, IF_REAL, "Flicker noise parameter"), IOP( "tnoia", BSIM4v6_MOD_TNOIA, IF_REAL, "Thermal noise parameter"), IOP( "tnoib", BSIM4v6_MOD_TNOIB, IF_REAL, "Thermal noise parameter"), IOP( "rnoia", BSIM4v6_MOD_RNOIA, IF_REAL, "Thermal noise coefficient"), IOP( "rnoib", BSIM4v6_MOD_RNOIB, IF_REAL, "Thermal noise coefficient"), IOP( "ntnoi", BSIM4v6_MOD_NTNOI, IF_REAL, "Thermal noise parameter"), IOP( "em", BSIM4v6_MOD_EM, IF_REAL, "Flicker noise parameter"), IOP( "ef", BSIM4v6_MOD_EF, IF_REAL, "Flicker noise frequency exponent"), IOP( "af", BSIM4v6_MOD_AF, IF_REAL, "Flicker noise exponent"), IOP( "kf", BSIM4v6_MOD_KF, IF_REAL, "Flicker noise coefficient"), IOP("vgs_max", BSIM4v6_MOD_VGS_MAX, IF_REAL, "maximum voltage G-S branch"), IOP("vgd_max", BSIM4v6_MOD_VGD_MAX, IF_REAL, "maximum voltage G-D branch"), IOP("vgb_max", BSIM4v6_MOD_VGB_MAX, IF_REAL, "maximum voltage G-B branch"), IOP("vds_max", BSIM4v6_MOD_VDS_MAX, IF_REAL, "maximum voltage D-S branch"), IOP("vbs_max", BSIM4v6_MOD_VBS_MAX, IF_REAL, "maximum voltage B-S branch"), IOP("vbd_max", BSIM4v6_MOD_VBD_MAX, IF_REAL, "maximum voltage B-D branch"), IOP("vgsr_max", BSIM4v6_MOD_VGSR_MAX, IF_REAL, "maximum voltage G-S branch"), IOP("vgdr_max", BSIM4v6_MOD_VGDR_MAX, IF_REAL, "maximum voltage G-D branch"), IOP("vgbr_max", BSIM4v6_MOD_VGBR_MAX, IF_REAL, "maximum voltage G-B branch"), IOP("vbsr_max", BSIM4v6_MOD_VBSR_MAX, IF_REAL, "maximum voltage B-S branch"), IOP("vbdr_max", BSIM4v6_MOD_VBDR_MAX, IF_REAL, "maximum voltage B-D branch"), IP( "nmos", BSIM4v6_MOD_NMOS, IF_FLAG, "Flag to indicate NMOS"), IP( "pmos", BSIM4v6_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"), }; char *BSIM4v6names[] = { "Drain", "Gate", "Source", "Bulk", "Charge" }; int BSIM4v6nSize = NUMELEMS(BSIM4v6names); int BSIM4v6pTSize = NUMELEMS(BSIM4v6pTable); int BSIM4v6mPTSize = NUMELEMS(BSIM4v6mPTable); int BSIM4v6iSize = sizeof(BSIM4v6instance); int BSIM4v6mSize = sizeof(BSIM4v6model); tmpk8ny_4pz/src/spicelib/devices/bsim4v6/b4v6trunc.c0000644000175000017500000000337213546075722022463 0ustar carstencarsten/**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4trunc.c of BSIM4.6.2. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4v6def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4v6trunc( GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { BSIM4v6model *model = (BSIM4v6model*)inModel; BSIM4v6instance *here; #ifdef STEPDEBUG double debugtemp; #endif /* STEPDEBUG */ for (; model != NULL; model = BSIM4v6nextModel(model)) { for (here = BSIM4v6instances(model); here != NULL; here = BSIM4v6nextInstance(here)) { #ifdef STEPDEBUG debugtemp = *timeStep; #endif /* STEPDEBUG */ CKTterr(here->BSIM4v6qb,ckt,timeStep); CKTterr(here->BSIM4v6qg,ckt,timeStep); CKTterr(here->BSIM4v6qd,ckt,timeStep); if (here->BSIM4v6trnqsMod) CKTterr(here->BSIM4v6qcdump,ckt,timeStep); if (here->BSIM4v6rbodyMod) { CKTterr(here->BSIM4v6qbs,ckt,timeStep); CKTterr(here->BSIM4v6qbd,ckt,timeStep); } if (here->BSIM4v6rgateMod == 3) CKTterr(here->BSIM4v6qgmid,ckt,timeStep); #ifdef STEPDEBUG if(debugtemp != *timeStep) { printf("device %s reduces step from %g to %g\n", here->BSIM4v6name,debugtemp,*timeStep); } #endif /* STEPDEBUG */ } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v6/bsim4v6def.h0000644000175000017500000034510213546075722022604 0ustar carstencarsten/**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008 ****/ /**** OpenMP support for ngspice by Holger Vogt 06/28/2010 ****/ /********** Copyright 2006 Regents of the University of California. All rights reserved. File: bsim4v6def.h Author: 2000 Weidong Liu. Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu Authors: 2008- Wenwei Yang, Ali Niknejad, Chenming Hu Modified by Xuemei Xi, 11/15/2002. Modified by Xuemei Xi, 05/09/2003. Modified by Xuemei Xi, 03/04/2004. Modified by Xuemei Xi, Mohan Dunga, 09/24/2004. Modified by Xuemei Xi, 07/29/2005. Modified by Mohan Dunga, 12/13/2006 Modified by Mohan Dunga, Wenwei Yang, 05/18/2007. Modified by Wenwei Yang, 07/31/2008. **********/ #ifndef BSIM4v6 #define BSIM4v6 #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" typedef struct sBSIM4v6instance { struct GENinstance gen; #define BSIM4v6modPtr(inst) ((struct sBSIM4v6model *)((inst)->gen.GENmodPtr)) #define BSIM4v6nextInstance(inst) ((struct sBSIM4v6instance *)((inst)->gen.GENnextInstance)) #define BSIM4v6name gen.GENname #define BSIM4v6states gen.GENstate const int BSIM4v6dNode; const int BSIM4v6gNodeExt; const int BSIM4v6sNode; const int BSIM4v6bNode; int BSIM4v6dNodePrime; int BSIM4v6gNodePrime; int BSIM4v6gNodeMid; int BSIM4v6sNodePrime; int BSIM4v6bNodePrime; int BSIM4v6dbNode; int BSIM4v6sbNode; int BSIM4v6qNode; double BSIM4v6ueff; double BSIM4v6thetavth; double BSIM4v6von; double BSIM4v6vdsat; double BSIM4v6cgdo; double BSIM4v6qgdo; double BSIM4v6cgso; double BSIM4v6qgso; double BSIM4v6grbsb; double BSIM4v6grbdb; double BSIM4v6grbpb; double BSIM4v6grbps; double BSIM4v6grbpd; double BSIM4v6vjsmFwd; double BSIM4v6vjsmRev; double BSIM4v6vjdmFwd; double BSIM4v6vjdmRev; double BSIM4v6XExpBVS; double BSIM4v6XExpBVD; double BSIM4v6SslpFwd; double BSIM4v6SslpRev; double BSIM4v6DslpFwd; double BSIM4v6DslpRev; double BSIM4v6IVjsmFwd; double BSIM4v6IVjsmRev; double BSIM4v6IVjdmFwd; double BSIM4v6IVjdmRev; double BSIM4v6grgeltd; double BSIM4v6Pseff; double BSIM4v6Pdeff; double BSIM4v6Aseff; double BSIM4v6Adeff; double BSIM4v6l; double BSIM4v6w; double BSIM4v6drainArea; double BSIM4v6sourceArea; double BSIM4v6drainSquares; double BSIM4v6sourceSquares; double BSIM4v6drainPerimeter; double BSIM4v6sourcePerimeter; double BSIM4v6sourceConductance; double BSIM4v6drainConductance; /* stress effect instance param */ double BSIM4v6sa; double BSIM4v6sb; double BSIM4v6sd; double BSIM4v6sca; double BSIM4v6scb; double BSIM4v6scc; double BSIM4v6sc; double BSIM4v6rbdb; double BSIM4v6rbsb; double BSIM4v6rbpb; double BSIM4v6rbps; double BSIM4v6rbpd; double BSIM4v6delvto; double BSIM4v6xgw; double BSIM4v6ngcon; /* added here to account stress effect instance dependence */ double BSIM4v6u0temp; double BSIM4v6vsattemp; double BSIM4v6vth0; double BSIM4v6vfb; double BSIM4v6vfbzb; double BSIM4v6vtfbphi1; double BSIM4v6vtfbphi2; double BSIM4v6k2; double BSIM4v6vbsc; double BSIM4v6k2ox; double BSIM4v6eta0; double BSIM4v6icVDS; double BSIM4v6icVGS; double BSIM4v6icVBS; double BSIM4v6m; double BSIM4v6nf; int BSIM4v6off; int BSIM4v6mode; int BSIM4v6trnqsMod; int BSIM4v6acnqsMod; int BSIM4v6rbodyMod; int BSIM4v6rgateMod; int BSIM4v6geoMod; int BSIM4v6rgeoMod; int BSIM4v6min; /* OP point */ double BSIM4v6Vgsteff; double BSIM4v6vgs_eff; double BSIM4v6vgd_eff; double BSIM4v6dvgs_eff_dvg; double BSIM4v6dvgd_eff_dvg; double BSIM4v6Vdseff; double BSIM4v6nstar; double BSIM4v6Abulk; double BSIM4v6EsatL; double BSIM4v6AbovVgst2Vtm; double BSIM4v6qinv; double BSIM4v6cd; double BSIM4v6cbs; double BSIM4v6cbd; double BSIM4v6csub; double BSIM4v6Igidl; double BSIM4v6Igisl; double BSIM4v6gm; double BSIM4v6gds; double BSIM4v6gmbs; double BSIM4v6gbd; double BSIM4v6gbs; double BSIM4v6gbbs; double BSIM4v6gbgs; double BSIM4v6gbds; double BSIM4v6ggidld; double BSIM4v6ggidlg; double BSIM4v6ggidls; double BSIM4v6ggidlb; double BSIM4v6ggisld; double BSIM4v6ggislg; double BSIM4v6ggisls; double BSIM4v6ggislb; double BSIM4v6Igcs; double BSIM4v6gIgcsg; double BSIM4v6gIgcsd; double BSIM4v6gIgcss; double BSIM4v6gIgcsb; double BSIM4v6Igcd; double BSIM4v6gIgcdg; double BSIM4v6gIgcdd; double BSIM4v6gIgcds; double BSIM4v6gIgcdb; double BSIM4v6Igs; double BSIM4v6gIgsg; double BSIM4v6gIgss; double BSIM4v6Igd; double BSIM4v6gIgdg; double BSIM4v6gIgdd; double BSIM4v6Igb; double BSIM4v6gIgbg; double BSIM4v6gIgbd; double BSIM4v6gIgbs; double BSIM4v6gIgbb; double BSIM4v6grdsw; double BSIM4v6IdovVds; double BSIM4v6gcrg; double BSIM4v6gcrgd; double BSIM4v6gcrgg; double BSIM4v6gcrgs; double BSIM4v6gcrgb; double BSIM4v6gstot; double BSIM4v6gstotd; double BSIM4v6gstotg; double BSIM4v6gstots; double BSIM4v6gstotb; double BSIM4v6gdtot; double BSIM4v6gdtotd; double BSIM4v6gdtotg; double BSIM4v6gdtots; double BSIM4v6gdtotb; double BSIM4v6cggb; double BSIM4v6cgdb; double BSIM4v6cgsb; double BSIM4v6cbgb; double BSIM4v6cbdb; double BSIM4v6cbsb; double BSIM4v6cdgb; double BSIM4v6cddb; double BSIM4v6cdsb; double BSIM4v6csgb; double BSIM4v6csdb; double BSIM4v6cssb; double BSIM4v6cgbb; double BSIM4v6cdbb; double BSIM4v6csbb; double BSIM4v6cbbb; double BSIM4v6capbd; double BSIM4v6capbs; double BSIM4v6cqgb; double BSIM4v6cqdb; double BSIM4v6cqsb; double BSIM4v6cqbb; double BSIM4v6qgate; double BSIM4v6qbulk; double BSIM4v6qdrn; double BSIM4v6qsrc; double BSIM4v6qdef; double BSIM4v6qchqs; double BSIM4v6taunet; double BSIM4v6gtau; double BSIM4v6gtg; double BSIM4v6gtd; double BSIM4v6gts; double BSIM4v6gtb; double BSIM4v6SjctTempRevSatCur; double BSIM4v6DjctTempRevSatCur; double BSIM4v6SswTempRevSatCur; double BSIM4v6DswTempRevSatCur; double BSIM4v6SswgTempRevSatCur; double BSIM4v6DswgTempRevSatCur; struct bsim4v6SizeDependParam *pParam; unsigned BSIM4v6lGiven :1; unsigned BSIM4v6wGiven :1; unsigned BSIM4v6mGiven :1; unsigned BSIM4v6nfGiven :1; unsigned BSIM4v6minGiven :1; unsigned BSIM4v6drainAreaGiven :1; unsigned BSIM4v6sourceAreaGiven :1; unsigned BSIM4v6drainSquaresGiven :1; unsigned BSIM4v6sourceSquaresGiven :1; unsigned BSIM4v6drainPerimeterGiven :1; unsigned BSIM4v6sourcePerimeterGiven :1; unsigned BSIM4v6saGiven :1; unsigned BSIM4v6sbGiven :1; unsigned BSIM4v6sdGiven :1; unsigned BSIM4v6scaGiven :1; unsigned BSIM4v6scbGiven :1; unsigned BSIM4v6sccGiven :1; unsigned BSIM4v6scGiven :1; unsigned BSIM4v6rbdbGiven :1; unsigned BSIM4v6rbsbGiven :1; unsigned BSIM4v6rbpbGiven :1; unsigned BSIM4v6rbpdGiven :1; unsigned BSIM4v6rbpsGiven :1; unsigned BSIM4v6delvtoGiven :1; unsigned BSIM4v6xgwGiven :1; unsigned BSIM4v6ngconGiven :1; unsigned BSIM4v6icVDSGiven :1; unsigned BSIM4v6icVGSGiven :1; unsigned BSIM4v6icVBSGiven :1; unsigned BSIM4v6trnqsModGiven :1; unsigned BSIM4v6acnqsModGiven :1; unsigned BSIM4v6rbodyModGiven :1; unsigned BSIM4v6rgateModGiven :1; unsigned BSIM4v6geoModGiven :1; unsigned BSIM4v6rgeoModGiven :1; double *BSIM4v6DPdPtr; double *BSIM4v6DPdpPtr; double *BSIM4v6DPgpPtr; double *BSIM4v6DPgmPtr; double *BSIM4v6DPspPtr; double *BSIM4v6DPbpPtr; double *BSIM4v6DPdbPtr; double *BSIM4v6DdPtr; double *BSIM4v6DdpPtr; double *BSIM4v6GPdpPtr; double *BSIM4v6GPgpPtr; double *BSIM4v6GPgmPtr; double *BSIM4v6GPgePtr; double *BSIM4v6GPspPtr; double *BSIM4v6GPbpPtr; double *BSIM4v6GMdpPtr; double *BSIM4v6GMgpPtr; double *BSIM4v6GMgmPtr; double *BSIM4v6GMgePtr; double *BSIM4v6GMspPtr; double *BSIM4v6GMbpPtr; double *BSIM4v6GEdpPtr; double *BSIM4v6GEgpPtr; double *BSIM4v6GEgmPtr; double *BSIM4v6GEgePtr; double *BSIM4v6GEspPtr; double *BSIM4v6GEbpPtr; double *BSIM4v6SPdpPtr; double *BSIM4v6SPgpPtr; double *BSIM4v6SPgmPtr; double *BSIM4v6SPsPtr; double *BSIM4v6SPspPtr; double *BSIM4v6SPbpPtr; double *BSIM4v6SPsbPtr; double *BSIM4v6SspPtr; double *BSIM4v6SsPtr; double *BSIM4v6BPdpPtr; double *BSIM4v6BPgpPtr; double *BSIM4v6BPgmPtr; double *BSIM4v6BPspPtr; double *BSIM4v6BPdbPtr; double *BSIM4v6BPbPtr; double *BSIM4v6BPsbPtr; double *BSIM4v6BPbpPtr; double *BSIM4v6DBdpPtr; double *BSIM4v6DBdbPtr; double *BSIM4v6DBbpPtr; double *BSIM4v6DBbPtr; double *BSIM4v6SBspPtr; double *BSIM4v6SBbpPtr; double *BSIM4v6SBbPtr; double *BSIM4v6SBsbPtr; double *BSIM4v6BdbPtr; double *BSIM4v6BbpPtr; double *BSIM4v6BsbPtr; double *BSIM4v6BbPtr; double *BSIM4v6DgpPtr; double *BSIM4v6DspPtr; double *BSIM4v6DbpPtr; double *BSIM4v6SdpPtr; double *BSIM4v6SgpPtr; double *BSIM4v6SbpPtr; double *BSIM4v6QdpPtr; double *BSIM4v6QgpPtr; double *BSIM4v6QspPtr; double *BSIM4v6QbpPtr; double *BSIM4v6QqPtr; double *BSIM4v6DPqPtr; double *BSIM4v6GPqPtr; double *BSIM4v6SPqPtr; #ifdef USE_OMP /* per instance storage of results, to update matrix at a later stge */ double BSIM4v6rhsdPrime; double BSIM4v6rhsgPrime; double BSIM4v6rhsgExt; double BSIM4v6grhsMid; double BSIM4v6rhsbPrime; double BSIM4v6rhssPrime; double BSIM4v6rhsdb; double BSIM4v6rhssb; double BSIM4v6rhsd; double BSIM4v6rhss; double BSIM4v6rhsq; double BSIM4v6_1; double BSIM4v6_2; double BSIM4v6_3; double BSIM4v6_4; double BSIM4v6_5; double BSIM4v6_6; double BSIM4v6_7; double BSIM4v6_8; double BSIM4v6_9; double BSIM4v6_10; double BSIM4v6_11; double BSIM4v6_12; double BSIM4v6_13; double BSIM4v6_14; double BSIM4v6_15; double BSIM4v6_16; double BSIM4v6_17; double BSIM4v6_18; double BSIM4v6_19; double BSIM4v6_20; double BSIM4v6_21; double BSIM4v6_22; double BSIM4v6_23; double BSIM4v6_24; double BSIM4v6_25; double BSIM4v6_26; double BSIM4v6_27; double BSIM4v6_28; double BSIM4v6_29; double BSIM4v6_30; double BSIM4v6_31; double BSIM4v6_32; double BSIM4v6_33; double BSIM4v6_34; double BSIM4v6_35; double BSIM4v6_36; double BSIM4v6_37; double BSIM4v6_38; double BSIM4v6_39; double BSIM4v6_40; double BSIM4v6_41; double BSIM4v6_42; double BSIM4v6_43; double BSIM4v6_44; double BSIM4v6_45; double BSIM4v6_46; double BSIM4v6_47; double BSIM4v6_48; double BSIM4v6_49; double BSIM4v6_50; double BSIM4v6_51; double BSIM4v6_52; double BSIM4v6_53; double BSIM4v6_54; double BSIM4v6_55; double BSIM4v6_56; double BSIM4v6_57; double BSIM4v6_58; double BSIM4v6_59; double BSIM4v6_60; double BSIM4v6_61; double BSIM4v6_62; double BSIM4v6_63; double BSIM4v6_64; double BSIM4v6_65; double BSIM4v6_66; double BSIM4v6_67; double BSIM4v6_68; double BSIM4v6_69; double BSIM4v6_70; double BSIM4v6_71; double BSIM4v6_72; double BSIM4v6_73; double BSIM4v6_74; double BSIM4v6_75; double BSIM4v6_76; double BSIM4v6_77; double BSIM4v6_78; double BSIM4v6_79; double BSIM4v6_80; double BSIM4v6_81; double BSIM4v6_82; double BSIM4v6_83; double BSIM4v6_84; double BSIM4v6_85; double BSIM4v6_86; double BSIM4v6_87; double BSIM4v6_88; double BSIM4v6_89; double BSIM4v6_90; double BSIM4v6_91; double BSIM4v6_92; double BSIM4v6_93; double BSIM4v6_94; double BSIM4v6_95; double BSIM4v6_96; double BSIM4v6_97; double BSIM4v6_98; double BSIM4v6_99; double BSIM4v6_100; double BSIM4v6_101; double BSIM4v6_102; double BSIM4v6_103; #endif #define BSIM4v6vbd BSIM4v6states+ 0 #define BSIM4v6vbs BSIM4v6states+ 1 #define BSIM4v6vgs BSIM4v6states+ 2 #define BSIM4v6vds BSIM4v6states+ 3 #define BSIM4v6vdbs BSIM4v6states+ 4 #define BSIM4v6vdbd BSIM4v6states+ 5 #define BSIM4v6vsbs BSIM4v6states+ 6 #define BSIM4v6vges BSIM4v6states+ 7 #define BSIM4v6vgms BSIM4v6states+ 8 #define BSIM4v6vses BSIM4v6states+ 9 #define BSIM4v6vdes BSIM4v6states+ 10 #define BSIM4v6qb BSIM4v6states+ 11 #define BSIM4v6cqb BSIM4v6states+ 12 #define BSIM4v6qg BSIM4v6states+ 13 #define BSIM4v6cqg BSIM4v6states+ 14 #define BSIM4v6qd BSIM4v6states+ 15 #define BSIM4v6cqd BSIM4v6states+ 16 #define BSIM4v6qgmid BSIM4v6states+ 17 #define BSIM4v6cqgmid BSIM4v6states+ 18 #define BSIM4v6qbs BSIM4v6states+ 19 #define BSIM4v6cqbs BSIM4v6states+ 20 #define BSIM4v6qbd BSIM4v6states+ 21 #define BSIM4v6cqbd BSIM4v6states+ 22 #define BSIM4v6qcheq BSIM4v6states+ 23 #define BSIM4v6cqcheq BSIM4v6states+ 24 #define BSIM4v6qcdump BSIM4v6states+ 25 #define BSIM4v6cqcdump BSIM4v6states+ 26 #define BSIM4v6qdef BSIM4v6states+ 27 #define BSIM4v6qs BSIM4v6states+ 28 #define BSIM4v6numStates 29 /* indices to the array of BSIM4v6 NOISE SOURCES */ #define BSIM4v6RDNOIZ 0 #define BSIM4v6RSNOIZ 1 #define BSIM4v6RGNOIZ 2 #define BSIM4v6RBPSNOIZ 3 #define BSIM4v6RBPDNOIZ 4 #define BSIM4v6RBPBNOIZ 5 #define BSIM4v6RBSBNOIZ 6 #define BSIM4v6RBDBNOIZ 7 #define BSIM4v6IDNOIZ 8 #define BSIM4v6FLNOIZ 9 #define BSIM4v6IGSNOIZ 10 #define BSIM4v6IGDNOIZ 11 #define BSIM4v6IGBNOIZ 12 #define BSIM4v6TOTNOIZ 13 #define BSIM4v6NSRCS 14 /* Number of BSIM4v6 noise sources */ #ifndef NONOISE double BSIM4v6nVar[NSTATVARS][BSIM4v6NSRCS]; #else /* NONOISE */ double **BSIM4v6nVar; #endif /* NONOISE */ } BSIM4v6instance ; struct bsim4v6SizeDependParam { double Width; double Length; double NFinger; double BSIM4v6cdsc; double BSIM4v6cdscb; double BSIM4v6cdscd; double BSIM4v6cit; double BSIM4v6nfactor; double BSIM4v6xj; double BSIM4v6vsat; double BSIM4v6at; double BSIM4v6a0; double BSIM4v6ags; double BSIM4v6a1; double BSIM4v6a2; double BSIM4v6keta; double BSIM4v6nsub; double BSIM4v6ndep; double BSIM4v6nsd; double BSIM4v6phin; double BSIM4v6ngate; double BSIM4v6gamma1; double BSIM4v6gamma2; double BSIM4v6vbx; double BSIM4v6vbi; double BSIM4v6vbm; double BSIM4v6xt; double BSIM4v6phi; double BSIM4v6litl; double BSIM4v6k1; double BSIM4v6kt1; double BSIM4v6kt1l; double BSIM4v6kt2; double BSIM4v6k2; double BSIM4v6k3; double BSIM4v6k3b; double BSIM4v6w0; double BSIM4v6dvtp0; double BSIM4v6dvtp1; double BSIM4v6lpe0; double BSIM4v6lpeb; double BSIM4v6dvt0; double BSIM4v6dvt1; double BSIM4v6dvt2; double BSIM4v6dvt0w; double BSIM4v6dvt1w; double BSIM4v6dvt2w; double BSIM4v6drout; double BSIM4v6dsub; double BSIM4v6vth0; double BSIM4v6ua; double BSIM4v6ua1; double BSIM4v6ub; double BSIM4v6ub1; double BSIM4v6uc; double BSIM4v6uc1; double BSIM4v6ud; double BSIM4v6ud1; double BSIM4v6up; double BSIM4v6lp; double BSIM4v6u0; double BSIM4v6eu; double BSIM4v6ucs; double BSIM4v6ute; double BSIM4v6ucste; double BSIM4v6voff; double BSIM4v6tvoff; double BSIM4v6minv; double BSIM4v6minvcv; double BSIM4v6vfb; double BSIM4v6delta; double BSIM4v6rdsw; double BSIM4v6rds0; double BSIM4v6rs0; double BSIM4v6rd0; double BSIM4v6rsw; double BSIM4v6rdw; double BSIM4v6prwg; double BSIM4v6prwb; double BSIM4v6prt; double BSIM4v6eta0; double BSIM4v6etab; double BSIM4v6pclm; double BSIM4v6pdibl1; double BSIM4v6pdibl2; double BSIM4v6pdiblb; double BSIM4v6fprout; double BSIM4v6pdits; double BSIM4v6pditsd; double BSIM4v6pscbe1; double BSIM4v6pscbe2; double BSIM4v6pvag; double BSIM4v6wr; double BSIM4v6dwg; double BSIM4v6dwb; double BSIM4v6b0; double BSIM4v6b1; double BSIM4v6alpha0; double BSIM4v6alpha1; double BSIM4v6beta0; double BSIM4v6agidl; double BSIM4v6bgidl; double BSIM4v6cgidl; double BSIM4v6egidl; double BSIM4v6agisl; double BSIM4v6bgisl; double BSIM4v6cgisl; double BSIM4v6egisl; double BSIM4v6aigc; double BSIM4v6bigc; double BSIM4v6cigc; double BSIM4v6aigs; double BSIM4v6bigs; double BSIM4v6cigs; double BSIM4v6aigd; double BSIM4v6bigd; double BSIM4v6cigd; double BSIM4v6aigbacc; double BSIM4v6bigbacc; double BSIM4v6cigbacc; double BSIM4v6aigbinv; double BSIM4v6bigbinv; double BSIM4v6cigbinv; double BSIM4v6nigc; double BSIM4v6nigbacc; double BSIM4v6nigbinv; double BSIM4v6ntox; double BSIM4v6eigbinv; double BSIM4v6pigcd; double BSIM4v6poxedge; double BSIM4v6xrcrg1; double BSIM4v6xrcrg2; double BSIM4v6lambda; /* overshoot */ double BSIM4v6vtl; /* thermal velocity limit */ double BSIM4v6xn; /* back scattering parameter */ double BSIM4v6lc; /* back scattering parameter */ double BSIM4v6tfactor; /* ballistic transportation factor */ double BSIM4v6vfbsdoff; /* S/D flatband offset voltage */ double BSIM4v6tvfbsdoff; /* added for stress effect */ double BSIM4v6ku0; double BSIM4v6kvth0; double BSIM4v6ku0temp; double BSIM4v6rho_ref; double BSIM4v6inv_od_ref; /* added for well proximity effect */ double BSIM4v6kvth0we; double BSIM4v6k2we; double BSIM4v6ku0we; /* CV model */ double BSIM4v6cgsl; double BSIM4v6cgdl; double BSIM4v6ckappas; double BSIM4v6ckappad; double BSIM4v6cf; double BSIM4v6clc; double BSIM4v6cle; double BSIM4v6vfbcv; double BSIM4v6noff; double BSIM4v6voffcv; double BSIM4v6acde; double BSIM4v6moin; /* Pre-calculated constants */ double BSIM4v6dw; double BSIM4v6dl; double BSIM4v6leff; double BSIM4v6weff; double BSIM4v6dwc; double BSIM4v6dlc; double BSIM4v6dwj; double BSIM4v6leffCV; double BSIM4v6weffCV; double BSIM4v6weffCJ; double BSIM4v6abulkCVfactor; double BSIM4v6cgso; double BSIM4v6cgdo; double BSIM4v6cgbo; double BSIM4v6u0temp; double BSIM4v6vsattemp; double BSIM4v6sqrtPhi; double BSIM4v6phis3; double BSIM4v6Xdep0; double BSIM4v6sqrtXdep0; double BSIM4v6theta0vb0; double BSIM4v6thetaRout; double BSIM4v6mstar; double BSIM4v6VgsteffVth; double BSIM4v6mstarcv; double BSIM4v6voffcbn; double BSIM4v6voffcbncv; double BSIM4v6rdswmin; double BSIM4v6rdwmin; double BSIM4v6rswmin; double BSIM4v6vfbsd; double BSIM4v6cof1; double BSIM4v6cof2; double BSIM4v6cof3; double BSIM4v6cof4; double BSIM4v6cdep0; double BSIM4v6ToxRatio; double BSIM4v6Aechvb; double BSIM4v6Bechvb; double BSIM4v6ToxRatioEdge; double BSIM4v6AechvbEdgeS; double BSIM4v6AechvbEdgeD; double BSIM4v6BechvbEdge; double BSIM4v6ldeb; double BSIM4v6k1ox; double BSIM4v6k2ox; double BSIM4v6vfbzbfactor; struct bsim4v6SizeDependParam *pNext; }; typedef struct sBSIM4v6model { struct GENmodel gen; #define BSIM4v6modType gen.GENmodType #define BSIM4v6nextModel(inst) ((struct sBSIM4v6model *)((inst)->gen.GENnextModel)) #define BSIM4v6instances(inst) ((BSIM4v6instance *)((inst)->gen.GENinstances)) #define BSIM4v6modName gen.GENmodName int BSIM4v6type; int BSIM4v6mobMod; int BSIM4v6cvchargeMod; int BSIM4v6capMod; int BSIM4v6dioMod; int BSIM4v6trnqsMod; int BSIM4v6acnqsMod; int BSIM4v6fnoiMod; int BSIM4v6tnoiMod; int BSIM4v6rdsMod; int BSIM4v6rbodyMod; int BSIM4v6rgateMod; int BSIM4v6perMod; int BSIM4v6geoMod; int BSIM4v6rgeoMod; int BSIM4v6mtrlMod; int BSIM4v6igcMod; int BSIM4v6igbMod; int BSIM4v6tempMod; int BSIM4v6binUnit; int BSIM4v6paramChk; char *BSIM4v6version; double BSIM4v6eot; double BSIM4v6vddeot; double BSIM4v6tempeot; double BSIM4v6leffeot; double BSIM4v6weffeot; double BSIM4v6ados; double BSIM4v6bdos; double BSIM4v6toxe; double BSIM4v6toxp; double BSIM4v6toxm; double BSIM4v6dtox; double BSIM4v6epsrox; double BSIM4v6cdsc; double BSIM4v6cdscb; double BSIM4v6cdscd; double BSIM4v6cit; double BSIM4v6nfactor; double BSIM4v6xj; double BSIM4v6vsat; double BSIM4v6at; double BSIM4v6a0; double BSIM4v6ags; double BSIM4v6a1; double BSIM4v6a2; double BSIM4v6keta; double BSIM4v6nsub; double BSIM4v6phig; double BSIM4v6epsrgate; double BSIM4v6easub; double BSIM4v6epsrsub; double BSIM4v6ni0sub; double BSIM4v6bg0sub; double BSIM4v6tbgasub; double BSIM4v6tbgbsub; double BSIM4v6ndep; double BSIM4v6nsd; double BSIM4v6phin; double BSIM4v6ngate; double BSIM4v6gamma1; double BSIM4v6gamma2; double BSIM4v6vbx; double BSIM4v6vbm; double BSIM4v6xt; double BSIM4v6k1; double BSIM4v6kt1; double BSIM4v6kt1l; double BSIM4v6kt2; double BSIM4v6k2; double BSIM4v6k3; double BSIM4v6k3b; double BSIM4v6w0; double BSIM4v6dvtp0; double BSIM4v6dvtp1; double BSIM4v6lpe0; double BSIM4v6lpeb; double BSIM4v6dvt0; double BSIM4v6dvt1; double BSIM4v6dvt2; double BSIM4v6dvt0w; double BSIM4v6dvt1w; double BSIM4v6dvt2w; double BSIM4v6drout; double BSIM4v6dsub; double BSIM4v6vth0; double BSIM4v6eu; double BSIM4v6ucs; double BSIM4v6ua; double BSIM4v6ua1; double BSIM4v6ub; double BSIM4v6ub1; double BSIM4v6uc; double BSIM4v6uc1; double BSIM4v6ud; double BSIM4v6ud1; double BSIM4v6up; double BSIM4v6lp; double BSIM4v6u0; double BSIM4v6ute; double BSIM4v6ucste; double BSIM4v6voff; double BSIM4v6tvoff; double BSIM4v6minv; double BSIM4v6minvcv; double BSIM4v6voffl; double BSIM4v6voffcvl; double BSIM4v6delta; double BSIM4v6rdsw; double BSIM4v6rdswmin; double BSIM4v6rdwmin; double BSIM4v6rswmin; double BSIM4v6rsw; double BSIM4v6rdw; double BSIM4v6prwg; double BSIM4v6prwb; double BSIM4v6prt; double BSIM4v6eta0; double BSIM4v6etab; double BSIM4v6pclm; double BSIM4v6pdibl1; double BSIM4v6pdibl2; double BSIM4v6pdiblb; double BSIM4v6fprout; double BSIM4v6pdits; double BSIM4v6pditsd; double BSIM4v6pditsl; double BSIM4v6pscbe1; double BSIM4v6pscbe2; double BSIM4v6pvag; double BSIM4v6wr; double BSIM4v6dwg; double BSIM4v6dwb; double BSIM4v6b0; double BSIM4v6b1; double BSIM4v6alpha0; double BSIM4v6alpha1; double BSIM4v6beta0; double BSIM4v6agidl; double BSIM4v6bgidl; double BSIM4v6cgidl; double BSIM4v6egidl; double BSIM4v6agisl; double BSIM4v6bgisl; double BSIM4v6cgisl; double BSIM4v6egisl; double BSIM4v6aigc; double BSIM4v6bigc; double BSIM4v6cigc; double BSIM4v6aigsd; double BSIM4v6bigsd; double BSIM4v6cigsd; double BSIM4v6aigs; double BSIM4v6bigs; double BSIM4v6cigs; double BSIM4v6aigd; double BSIM4v6bigd; double BSIM4v6cigd; double BSIM4v6aigbacc; double BSIM4v6bigbacc; double BSIM4v6cigbacc; double BSIM4v6aigbinv; double BSIM4v6bigbinv; double BSIM4v6cigbinv; double BSIM4v6nigc; double BSIM4v6nigbacc; double BSIM4v6nigbinv; double BSIM4v6ntox; double BSIM4v6eigbinv; double BSIM4v6pigcd; double BSIM4v6poxedge; double BSIM4v6toxref; double BSIM4v6ijthdfwd; double BSIM4v6ijthsfwd; double BSIM4v6ijthdrev; double BSIM4v6ijthsrev; double BSIM4v6xjbvd; double BSIM4v6xjbvs; double BSIM4v6bvd; double BSIM4v6bvs; double BSIM4v6jtss; double BSIM4v6jtsd; double BSIM4v6jtssws; double BSIM4v6jtsswd; double BSIM4v6jtsswgs; double BSIM4v6jtsswgd; double BSIM4v6jtweff; double BSIM4v6njts; double BSIM4v6njtssw; double BSIM4v6njtsswg; double BSIM4v6njtsd; double BSIM4v6njtsswd; double BSIM4v6njtsswgd; double BSIM4v6xtss; double BSIM4v6xtsd; double BSIM4v6xtssws; double BSIM4v6xtsswd; double BSIM4v6xtsswgs; double BSIM4v6xtsswgd; double BSIM4v6tnjts; double BSIM4v6tnjtssw; double BSIM4v6tnjtsswg; double BSIM4v6tnjtsd; double BSIM4v6tnjtsswd; double BSIM4v6tnjtsswgd; double BSIM4v6vtss; double BSIM4v6vtsd; double BSIM4v6vtssws; double BSIM4v6vtsswd; double BSIM4v6vtsswgs; double BSIM4v6vtsswgd; double BSIM4v6xrcrg1; double BSIM4v6xrcrg2; double BSIM4v6lambda; double BSIM4v6vtl; double BSIM4v6lc; double BSIM4v6xn; double BSIM4v6vfbsdoff; /* S/D flatband offset voltage */ double BSIM4v6lintnoi; /* lint offset for noise calculation */ double BSIM4v6tvfbsdoff; double BSIM4v6vfb; double BSIM4v6gbmin; double BSIM4v6rbdb; double BSIM4v6rbsb; double BSIM4v6rbpb; double BSIM4v6rbps; double BSIM4v6rbpd; double BSIM4v6rbps0; double BSIM4v6rbpsl; double BSIM4v6rbpsw; double BSIM4v6rbpsnf; double BSIM4v6rbpd0; double BSIM4v6rbpdl; double BSIM4v6rbpdw; double BSIM4v6rbpdnf; double BSIM4v6rbpbx0; double BSIM4v6rbpbxl; double BSIM4v6rbpbxw; double BSIM4v6rbpbxnf; double BSIM4v6rbpby0; double BSIM4v6rbpbyl; double BSIM4v6rbpbyw; double BSIM4v6rbpbynf; double BSIM4v6rbsbx0; double BSIM4v6rbsby0; double BSIM4v6rbdbx0; double BSIM4v6rbdby0; double BSIM4v6rbsdbxl; double BSIM4v6rbsdbxw; double BSIM4v6rbsdbxnf; double BSIM4v6rbsdbyl; double BSIM4v6rbsdbyw; double BSIM4v6rbsdbynf; double BSIM4v6tnoia; double BSIM4v6tnoib; double BSIM4v6rnoia; double BSIM4v6rnoib; double BSIM4v6ntnoi; /* CV model and Parasitics */ double BSIM4v6cgsl; double BSIM4v6cgdl; double BSIM4v6ckappas; double BSIM4v6ckappad; double BSIM4v6cf; double BSIM4v6vfbcv; double BSIM4v6clc; double BSIM4v6cle; double BSIM4v6dwc; double BSIM4v6dlc; double BSIM4v6xw; double BSIM4v6xl; double BSIM4v6dlcig; double BSIM4v6dlcigd; double BSIM4v6dwj; double BSIM4v6noff; double BSIM4v6voffcv; double BSIM4v6acde; double BSIM4v6moin; double BSIM4v6tcj; double BSIM4v6tcjsw; double BSIM4v6tcjswg; double BSIM4v6tpb; double BSIM4v6tpbsw; double BSIM4v6tpbswg; double BSIM4v6dmcg; double BSIM4v6dmci; double BSIM4v6dmdg; double BSIM4v6dmcgt; double BSIM4v6xgw; double BSIM4v6xgl; double BSIM4v6rshg; double BSIM4v6ngcon; /* Length Dependence */ double BSIM4v6lcdsc; double BSIM4v6lcdscb; double BSIM4v6lcdscd; double BSIM4v6lcit; double BSIM4v6lnfactor; double BSIM4v6lxj; double BSIM4v6lvsat; double BSIM4v6lat; double BSIM4v6la0; double BSIM4v6lags; double BSIM4v6la1; double BSIM4v6la2; double BSIM4v6lketa; double BSIM4v6lnsub; double BSIM4v6lndep; double BSIM4v6lnsd; double BSIM4v6lphin; double BSIM4v6lngate; double BSIM4v6lgamma1; double BSIM4v6lgamma2; double BSIM4v6lvbx; double BSIM4v6lvbm; double BSIM4v6lxt; double BSIM4v6lk1; double BSIM4v6lkt1; double BSIM4v6lkt1l; double BSIM4v6lkt2; double BSIM4v6lk2; double BSIM4v6lk3; double BSIM4v6lk3b; double BSIM4v6lw0; double BSIM4v6ldvtp0; double BSIM4v6ldvtp1; double BSIM4v6llpe0; double BSIM4v6llpeb; double BSIM4v6ldvt0; double BSIM4v6ldvt1; double BSIM4v6ldvt2; double BSIM4v6ldvt0w; double BSIM4v6ldvt1w; double BSIM4v6ldvt2w; double BSIM4v6ldrout; double BSIM4v6ldsub; double BSIM4v6lvth0; double BSIM4v6lua; double BSIM4v6lua1; double BSIM4v6lub; double BSIM4v6lub1; double BSIM4v6luc; double BSIM4v6luc1; double BSIM4v6lud; double BSIM4v6lud1; double BSIM4v6lup; double BSIM4v6llp; double BSIM4v6lu0; double BSIM4v6leu; double BSIM4v6lucs; double BSIM4v6lute; double BSIM4v6lucste; double BSIM4v6lvoff; double BSIM4v6ltvoff; double BSIM4v6lminv; double BSIM4v6lminvcv; double BSIM4v6ldelta; double BSIM4v6lrdsw; double BSIM4v6lrsw; double BSIM4v6lrdw; double BSIM4v6lprwg; double BSIM4v6lprwb; double BSIM4v6lprt; double BSIM4v6leta0; double BSIM4v6letab; double BSIM4v6lpclm; double BSIM4v6lpdibl1; double BSIM4v6lpdibl2; double BSIM4v6lpdiblb; double BSIM4v6lfprout; double BSIM4v6lpdits; double BSIM4v6lpditsd; double BSIM4v6lpscbe1; double BSIM4v6lpscbe2; double BSIM4v6lpvag; double BSIM4v6lwr; double BSIM4v6ldwg; double BSIM4v6ldwb; double BSIM4v6lb0; double BSIM4v6lb1; double BSIM4v6lalpha0; double BSIM4v6lalpha1; double BSIM4v6lbeta0; double BSIM4v6lvfb; double BSIM4v6lagidl; double BSIM4v6lbgidl; double BSIM4v6lcgidl; double BSIM4v6legidl; double BSIM4v6lagisl; double BSIM4v6lbgisl; double BSIM4v6lcgisl; double BSIM4v6legisl; double BSIM4v6laigc; double BSIM4v6lbigc; double BSIM4v6lcigc; double BSIM4v6laigsd; double BSIM4v6lbigsd; double BSIM4v6lcigsd; double BSIM4v6laigs; double BSIM4v6lbigs; double BSIM4v6lcigs; double BSIM4v6laigd; double BSIM4v6lbigd; double BSIM4v6lcigd; double BSIM4v6laigbacc; double BSIM4v6lbigbacc; double BSIM4v6lcigbacc; double BSIM4v6laigbinv; double BSIM4v6lbigbinv; double BSIM4v6lcigbinv; double BSIM4v6lnigc; double BSIM4v6lnigbacc; double BSIM4v6lnigbinv; double BSIM4v6lntox; double BSIM4v6leigbinv; double BSIM4v6lpigcd; double BSIM4v6lpoxedge; double BSIM4v6lxrcrg1; double BSIM4v6lxrcrg2; double BSIM4v6llambda; double BSIM4v6lvtl; double BSIM4v6lxn; double BSIM4v6lvfbsdoff; double BSIM4v6ltvfbsdoff; /* CV model */ double BSIM4v6lcgsl; double BSIM4v6lcgdl; double BSIM4v6lckappas; double BSIM4v6lckappad; double BSIM4v6lcf; double BSIM4v6lclc; double BSIM4v6lcle; double BSIM4v6lvfbcv; double BSIM4v6lnoff; double BSIM4v6lvoffcv; double BSIM4v6lacde; double BSIM4v6lmoin; /* Width Dependence */ double BSIM4v6wcdsc; double BSIM4v6wcdscb; double BSIM4v6wcdscd; double BSIM4v6wcit; double BSIM4v6wnfactor; double BSIM4v6wxj; double BSIM4v6wvsat; double BSIM4v6wat; double BSIM4v6wa0; double BSIM4v6wags; double BSIM4v6wa1; double BSIM4v6wa2; double BSIM4v6wketa; double BSIM4v6wnsub; double BSIM4v6wndep; double BSIM4v6wnsd; double BSIM4v6wphin; double BSIM4v6wngate; double BSIM4v6wgamma1; double BSIM4v6wgamma2; double BSIM4v6wvbx; double BSIM4v6wvbm; double BSIM4v6wxt; double BSIM4v6wk1; double BSIM4v6wkt1; double BSIM4v6wkt1l; double BSIM4v6wkt2; double BSIM4v6wk2; double BSIM4v6wk3; double BSIM4v6wk3b; double BSIM4v6ww0; double BSIM4v6wdvtp0; double BSIM4v6wdvtp1; double BSIM4v6wlpe0; double BSIM4v6wlpeb; double BSIM4v6wdvt0; double BSIM4v6wdvt1; double BSIM4v6wdvt2; double BSIM4v6wdvt0w; double BSIM4v6wdvt1w; double BSIM4v6wdvt2w; double BSIM4v6wdrout; double BSIM4v6wdsub; double BSIM4v6wvth0; double BSIM4v6wua; double BSIM4v6wua1; double BSIM4v6wub; double BSIM4v6wub1; double BSIM4v6wuc; double BSIM4v6wuc1; double BSIM4v6wud; double BSIM4v6wud1; double BSIM4v6wup; double BSIM4v6wlp; double BSIM4v6wu0; double BSIM4v6weu; double BSIM4v6wucs; double BSIM4v6wute; double BSIM4v6wucste; double BSIM4v6wvoff; double BSIM4v6wtvoff; double BSIM4v6wminv; double BSIM4v6wminvcv; double BSIM4v6wdelta; double BSIM4v6wrdsw; double BSIM4v6wrsw; double BSIM4v6wrdw; double BSIM4v6wprwg; double BSIM4v6wprwb; double BSIM4v6wprt; double BSIM4v6weta0; double BSIM4v6wetab; double BSIM4v6wpclm; double BSIM4v6wpdibl1; double BSIM4v6wpdibl2; double BSIM4v6wpdiblb; double BSIM4v6wfprout; double BSIM4v6wpdits; double BSIM4v6wpditsd; double BSIM4v6wpscbe1; double BSIM4v6wpscbe2; double BSIM4v6wpvag; double BSIM4v6wwr; double BSIM4v6wdwg; double BSIM4v6wdwb; double BSIM4v6wb0; double BSIM4v6wb1; double BSIM4v6walpha0; double BSIM4v6walpha1; double BSIM4v6wbeta0; double BSIM4v6wvfb; double BSIM4v6wagidl; double BSIM4v6wbgidl; double BSIM4v6wcgidl; double BSIM4v6wegidl; double BSIM4v6wagisl; double BSIM4v6wbgisl; double BSIM4v6wcgisl; double BSIM4v6wegisl; double BSIM4v6waigc; double BSIM4v6wbigc; double BSIM4v6wcigc; double BSIM4v6waigsd; double BSIM4v6wbigsd; double BSIM4v6wcigsd; double BSIM4v6waigs; double BSIM4v6wbigs; double BSIM4v6wcigs; double BSIM4v6waigd; double BSIM4v6wbigd; double BSIM4v6wcigd; double BSIM4v6waigbacc; double BSIM4v6wbigbacc; double BSIM4v6wcigbacc; double BSIM4v6waigbinv; double BSIM4v6wbigbinv; double BSIM4v6wcigbinv; double BSIM4v6wnigc; double BSIM4v6wnigbacc; double BSIM4v6wnigbinv; double BSIM4v6wntox; double BSIM4v6weigbinv; double BSIM4v6wpigcd; double BSIM4v6wpoxedge; double BSIM4v6wxrcrg1; double BSIM4v6wxrcrg2; double BSIM4v6wlambda; double BSIM4v6wvtl; double BSIM4v6wxn; double BSIM4v6wvfbsdoff; double BSIM4v6wtvfbsdoff; /* CV model */ double BSIM4v6wcgsl; double BSIM4v6wcgdl; double BSIM4v6wckappas; double BSIM4v6wckappad; double BSIM4v6wcf; double BSIM4v6wclc; double BSIM4v6wcle; double BSIM4v6wvfbcv; double BSIM4v6wnoff; double BSIM4v6wvoffcv; double BSIM4v6wacde; double BSIM4v6wmoin; /* Cross-term Dependence */ double BSIM4v6pcdsc; double BSIM4v6pcdscb; double BSIM4v6pcdscd; double BSIM4v6pcit; double BSIM4v6pnfactor; double BSIM4v6pxj; double BSIM4v6pvsat; double BSIM4v6pat; double BSIM4v6pa0; double BSIM4v6pags; double BSIM4v6pa1; double BSIM4v6pa2; double BSIM4v6pketa; double BSIM4v6pnsub; double BSIM4v6pndep; double BSIM4v6pnsd; double BSIM4v6pphin; double BSIM4v6pngate; double BSIM4v6pgamma1; double BSIM4v6pgamma2; double BSIM4v6pvbx; double BSIM4v6pvbm; double BSIM4v6pxt; double BSIM4v6pk1; double BSIM4v6pkt1; double BSIM4v6pkt1l; double BSIM4v6pkt2; double BSIM4v6pk2; double BSIM4v6pk3; double BSIM4v6pk3b; double BSIM4v6pw0; double BSIM4v6pdvtp0; double BSIM4v6pdvtp1; double BSIM4v6plpe0; double BSIM4v6plpeb; double BSIM4v6pdvt0; double BSIM4v6pdvt1; double BSIM4v6pdvt2; double BSIM4v6pdvt0w; double BSIM4v6pdvt1w; double BSIM4v6pdvt2w; double BSIM4v6pdrout; double BSIM4v6pdsub; double BSIM4v6pvth0; double BSIM4v6pua; double BSIM4v6pua1; double BSIM4v6pub; double BSIM4v6pub1; double BSIM4v6puc; double BSIM4v6puc1; double BSIM4v6pud; double BSIM4v6pud1; double BSIM4v6pup; double BSIM4v6plp; double BSIM4v6pu0; double BSIM4v6peu; double BSIM4v6pucs; double BSIM4v6pute; double BSIM4v6pucste; double BSIM4v6pvoff; double BSIM4v6ptvoff; double BSIM4v6pminv; double BSIM4v6pminvcv; double BSIM4v6pdelta; double BSIM4v6prdsw; double BSIM4v6prsw; double BSIM4v6prdw; double BSIM4v6pprwg; double BSIM4v6pprwb; double BSIM4v6pprt; double BSIM4v6peta0; double BSIM4v6petab; double BSIM4v6ppclm; double BSIM4v6ppdibl1; double BSIM4v6ppdibl2; double BSIM4v6ppdiblb; double BSIM4v6pfprout; double BSIM4v6ppdits; double BSIM4v6ppditsd; double BSIM4v6ppscbe1; double BSIM4v6ppscbe2; double BSIM4v6ppvag; double BSIM4v6pwr; double BSIM4v6pdwg; double BSIM4v6pdwb; double BSIM4v6pb0; double BSIM4v6pb1; double BSIM4v6palpha0; double BSIM4v6palpha1; double BSIM4v6pbeta0; double BSIM4v6pvfb; double BSIM4v6pagidl; double BSIM4v6pbgidl; double BSIM4v6pcgidl; double BSIM4v6pegidl; double BSIM4v6pagisl; double BSIM4v6pbgisl; double BSIM4v6pcgisl; double BSIM4v6pegisl; double BSIM4v6paigc; double BSIM4v6pbigc; double BSIM4v6pcigc; double BSIM4v6paigsd; double BSIM4v6pbigsd; double BSIM4v6pcigsd; double BSIM4v6paigs; double BSIM4v6pbigs; double BSIM4v6pcigs; double BSIM4v6paigd; double BSIM4v6pbigd; double BSIM4v6pcigd; double BSIM4v6paigbacc; double BSIM4v6pbigbacc; double BSIM4v6pcigbacc; double BSIM4v6paigbinv; double BSIM4v6pbigbinv; double BSIM4v6pcigbinv; double BSIM4v6pnigc; double BSIM4v6pnigbacc; double BSIM4v6pnigbinv; double BSIM4v6pntox; double BSIM4v6peigbinv; double BSIM4v6ppigcd; double BSIM4v6ppoxedge; double BSIM4v6pxrcrg1; double BSIM4v6pxrcrg2; double BSIM4v6plambda; double BSIM4v6pvtl; double BSIM4v6pxn; double BSIM4v6pvfbsdoff; double BSIM4v6ptvfbsdoff; /* CV model */ double BSIM4v6pcgsl; double BSIM4v6pcgdl; double BSIM4v6pckappas; double BSIM4v6pckappad; double BSIM4v6pcf; double BSIM4v6pclc; double BSIM4v6pcle; double BSIM4v6pvfbcv; double BSIM4v6pnoff; double BSIM4v6pvoffcv; double BSIM4v6pacde; double BSIM4v6pmoin; double BSIM4v6tnom; double BSIM4v6cgso; double BSIM4v6cgdo; double BSIM4v6cgbo; double BSIM4v6xpart; double BSIM4v6cFringOut; double BSIM4v6cFringMax; double BSIM4v6sheetResistance; double BSIM4v6SjctSatCurDensity; double BSIM4v6DjctSatCurDensity; double BSIM4v6SjctSidewallSatCurDensity; double BSIM4v6DjctSidewallSatCurDensity; double BSIM4v6SjctGateSidewallSatCurDensity; double BSIM4v6DjctGateSidewallSatCurDensity; double BSIM4v6SbulkJctPotential; double BSIM4v6DbulkJctPotential; double BSIM4v6SbulkJctBotGradingCoeff; double BSIM4v6DbulkJctBotGradingCoeff; double BSIM4v6SbulkJctSideGradingCoeff; double BSIM4v6DbulkJctSideGradingCoeff; double BSIM4v6SbulkJctGateSideGradingCoeff; double BSIM4v6DbulkJctGateSideGradingCoeff; double BSIM4v6SsidewallJctPotential; double BSIM4v6DsidewallJctPotential; double BSIM4v6SGatesidewallJctPotential; double BSIM4v6DGatesidewallJctPotential; double BSIM4v6SunitAreaJctCap; double BSIM4v6DunitAreaJctCap; double BSIM4v6SunitLengthSidewallJctCap; double BSIM4v6DunitLengthSidewallJctCap; double BSIM4v6SunitLengthGateSidewallJctCap; double BSIM4v6DunitLengthGateSidewallJctCap; double BSIM4v6SjctEmissionCoeff; double BSIM4v6DjctEmissionCoeff; double BSIM4v6SjctTempExponent; double BSIM4v6DjctTempExponent; double BSIM4v6njtsstemp; double BSIM4v6njtsswstemp; double BSIM4v6njtsswgstemp; double BSIM4v6njtsdtemp; double BSIM4v6njtsswdtemp; double BSIM4v6njtsswgdtemp; double BSIM4v6Lint; double BSIM4v6Ll; double BSIM4v6Llc; double BSIM4v6Lln; double BSIM4v6Lw; double BSIM4v6Lwc; double BSIM4v6Lwn; double BSIM4v6Lwl; double BSIM4v6Lwlc; double BSIM4v6Lmin; double BSIM4v6Lmax; double BSIM4v6Wint; double BSIM4v6Wl; double BSIM4v6Wlc; double BSIM4v6Wln; double BSIM4v6Ww; double BSIM4v6Wwc; double BSIM4v6Wwn; double BSIM4v6Wwl; double BSIM4v6Wwlc; double BSIM4v6Wmin; double BSIM4v6Wmax; /* added for stress effect */ double BSIM4v6saref; double BSIM4v6sbref; double BSIM4v6wlod; double BSIM4v6ku0; double BSIM4v6kvsat; double BSIM4v6kvth0; double BSIM4v6tku0; double BSIM4v6llodku0; double BSIM4v6wlodku0; double BSIM4v6llodvth; double BSIM4v6wlodvth; double BSIM4v6lku0; double BSIM4v6wku0; double BSIM4v6pku0; double BSIM4v6lkvth0; double BSIM4v6wkvth0; double BSIM4v6pkvth0; double BSIM4v6stk2; double BSIM4v6lodk2; double BSIM4v6steta0; double BSIM4v6lodeta0; double BSIM4v6web; double BSIM4v6wec; double BSIM4v6kvth0we; double BSIM4v6k2we; double BSIM4v6ku0we; double BSIM4v6scref; double BSIM4v6wpemod; double BSIM4v6lkvth0we; double BSIM4v6lk2we; double BSIM4v6lku0we; double BSIM4v6wkvth0we; double BSIM4v6wk2we; double BSIM4v6wku0we; double BSIM4v6pkvth0we; double BSIM4v6pk2we; double BSIM4v6pku0we; /* Pre-calculated constants * move to size-dependent param */ double BSIM4v6Eg0; double BSIM4v6vtm; double BSIM4v6vtm0; double BSIM4v6coxe; double BSIM4v6coxp; double BSIM4v6cof1; double BSIM4v6cof2; double BSIM4v6cof3; double BSIM4v6cof4; double BSIM4v6vcrit; double BSIM4v6factor1; double BSIM4v6PhiBS; double BSIM4v6PhiBSWS; double BSIM4v6PhiBSWGS; double BSIM4v6SjctTempSatCurDensity; double BSIM4v6SjctSidewallTempSatCurDensity; double BSIM4v6SjctGateSidewallTempSatCurDensity; double BSIM4v6PhiBD; double BSIM4v6PhiBSWD; double BSIM4v6PhiBSWGD; double BSIM4v6DjctTempSatCurDensity; double BSIM4v6DjctSidewallTempSatCurDensity; double BSIM4v6DjctGateSidewallTempSatCurDensity; double BSIM4v6SunitAreaTempJctCap; double BSIM4v6DunitAreaTempJctCap; double BSIM4v6SunitLengthSidewallTempJctCap; double BSIM4v6DunitLengthSidewallTempJctCap; double BSIM4v6SunitLengthGateSidewallTempJctCap; double BSIM4v6DunitLengthGateSidewallTempJctCap; double BSIM4v6oxideTrapDensityA; double BSIM4v6oxideTrapDensityB; double BSIM4v6oxideTrapDensityC; double BSIM4v6em; double BSIM4v6ef; double BSIM4v6af; double BSIM4v6kf; double BSIM4v6vgsMax; double BSIM4v6vgdMax; double BSIM4v6vgbMax; double BSIM4v6vdsMax; double BSIM4v6vbsMax; double BSIM4v6vbdMax; double BSIM4v6vgsrMax; double BSIM4v6vgdrMax; double BSIM4v6vgbrMax; double BSIM4v6vbsrMax; double BSIM4v6vbdrMax; struct bsim4v6SizeDependParam *pSizeDependParamKnot; #ifdef USE_OMP int BSIM4v6InstCount; struct sBSIM4v6instance **BSIM4v6InstanceArray; #endif /* Flags */ unsigned BSIM4v6mobModGiven :1; unsigned BSIM4v6binUnitGiven :1; unsigned BSIM4v6cvchargeModGiven :1; unsigned BSIM4v6capModGiven :1; unsigned BSIM4v6dioModGiven :1; unsigned BSIM4v6rdsModGiven :1; unsigned BSIM4v6rbodyModGiven :1; unsigned BSIM4v6rgateModGiven :1; unsigned BSIM4v6perModGiven :1; unsigned BSIM4v6geoModGiven :1; unsigned BSIM4v6rgeoModGiven :1; unsigned BSIM4v6paramChkGiven :1; unsigned BSIM4v6trnqsModGiven :1; unsigned BSIM4v6acnqsModGiven :1; unsigned BSIM4v6fnoiModGiven :1; unsigned BSIM4v6tnoiModGiven :1; unsigned BSIM4v6mtrlModGiven :1; unsigned BSIM4v6igcModGiven :1; unsigned BSIM4v6igbModGiven :1; unsigned BSIM4v6tempModGiven :1; unsigned BSIM4v6typeGiven :1; unsigned BSIM4v6toxrefGiven :1; unsigned BSIM4v6eotGiven :1; unsigned BSIM4v6vddeotGiven :1; unsigned BSIM4v6tempeotGiven :1; unsigned BSIM4v6leffeotGiven :1; unsigned BSIM4v6weffeotGiven :1; unsigned BSIM4v6adosGiven :1; unsigned BSIM4v6bdosGiven :1; unsigned BSIM4v6toxeGiven :1; unsigned BSIM4v6toxpGiven :1; unsigned BSIM4v6toxmGiven :1; unsigned BSIM4v6dtoxGiven :1; unsigned BSIM4v6epsroxGiven :1; unsigned BSIM4v6versionGiven :1; unsigned BSIM4v6cdscGiven :1; unsigned BSIM4v6cdscbGiven :1; unsigned BSIM4v6cdscdGiven :1; unsigned BSIM4v6citGiven :1; unsigned BSIM4v6nfactorGiven :1; unsigned BSIM4v6xjGiven :1; unsigned BSIM4v6vsatGiven :1; unsigned BSIM4v6atGiven :1; unsigned BSIM4v6a0Given :1; unsigned BSIM4v6agsGiven :1; unsigned BSIM4v6a1Given :1; unsigned BSIM4v6a2Given :1; unsigned BSIM4v6ketaGiven :1; unsigned BSIM4v6nsubGiven :1; unsigned BSIM4v6phigGiven :1; unsigned BSIM4v6epsrgateGiven :1; unsigned BSIM4v6easubGiven :1; unsigned BSIM4v6epsrsubGiven :1; unsigned BSIM4v6ni0subGiven :1; unsigned BSIM4v6bg0subGiven :1; unsigned BSIM4v6tbgasubGiven :1; unsigned BSIM4v6tbgbsubGiven :1; unsigned BSIM4v6ndepGiven :1; unsigned BSIM4v6nsdGiven :1; unsigned BSIM4v6phinGiven :1; unsigned BSIM4v6ngateGiven :1; unsigned BSIM4v6gamma1Given :1; unsigned BSIM4v6gamma2Given :1; unsigned BSIM4v6vbxGiven :1; unsigned BSIM4v6vbmGiven :1; unsigned BSIM4v6xtGiven :1; unsigned BSIM4v6k1Given :1; unsigned BSIM4v6kt1Given :1; unsigned BSIM4v6kt1lGiven :1; unsigned BSIM4v6kt2Given :1; unsigned BSIM4v6k2Given :1; unsigned BSIM4v6k3Given :1; unsigned BSIM4v6k3bGiven :1; unsigned BSIM4v6w0Given :1; unsigned BSIM4v6dvtp0Given :1; unsigned BSIM4v6dvtp1Given :1; unsigned BSIM4v6lpe0Given :1; unsigned BSIM4v6lpebGiven :1; unsigned BSIM4v6dvt0Given :1; unsigned BSIM4v6dvt1Given :1; unsigned BSIM4v6dvt2Given :1; unsigned BSIM4v6dvt0wGiven :1; unsigned BSIM4v6dvt1wGiven :1; unsigned BSIM4v6dvt2wGiven :1; unsigned BSIM4v6droutGiven :1; unsigned BSIM4v6dsubGiven :1; unsigned BSIM4v6vth0Given :1; unsigned BSIM4v6euGiven :1; unsigned BSIM4v6ucsGiven :1; unsigned BSIM4v6uaGiven :1; unsigned BSIM4v6ua1Given :1; unsigned BSIM4v6ubGiven :1; unsigned BSIM4v6ub1Given :1; unsigned BSIM4v6ucGiven :1; unsigned BSIM4v6uc1Given :1; unsigned BSIM4v6udGiven :1; unsigned BSIM4v6ud1Given :1; unsigned BSIM4v6upGiven :1; unsigned BSIM4v6lpGiven :1; unsigned BSIM4v6u0Given :1; unsigned BSIM4v6uteGiven :1; unsigned BSIM4v6ucsteGiven :1; unsigned BSIM4v6voffGiven :1; unsigned BSIM4v6tvoffGiven :1; unsigned BSIM4v6vofflGiven :1; unsigned BSIM4v6voffcvlGiven :1; unsigned BSIM4v6minvGiven :1; unsigned BSIM4v6minvcvGiven :1; unsigned BSIM4v6rdswGiven :1; unsigned BSIM4v6rdswminGiven :1; unsigned BSIM4v6rdwminGiven :1; unsigned BSIM4v6rswminGiven :1; unsigned BSIM4v6rswGiven :1; unsigned BSIM4v6rdwGiven :1; unsigned BSIM4v6prwgGiven :1; unsigned BSIM4v6prwbGiven :1; unsigned BSIM4v6prtGiven :1; unsigned BSIM4v6eta0Given :1; unsigned BSIM4v6etabGiven :1; unsigned BSIM4v6pclmGiven :1; unsigned BSIM4v6pdibl1Given :1; unsigned BSIM4v6pdibl2Given :1; unsigned BSIM4v6pdiblbGiven :1; unsigned BSIM4v6fproutGiven :1; unsigned BSIM4v6pditsGiven :1; unsigned BSIM4v6pditsdGiven :1; unsigned BSIM4v6pditslGiven :1; unsigned BSIM4v6pscbe1Given :1; unsigned BSIM4v6pscbe2Given :1; unsigned BSIM4v6pvagGiven :1; unsigned BSIM4v6deltaGiven :1; unsigned BSIM4v6wrGiven :1; unsigned BSIM4v6dwgGiven :1; unsigned BSIM4v6dwbGiven :1; unsigned BSIM4v6b0Given :1; unsigned BSIM4v6b1Given :1; unsigned BSIM4v6alpha0Given :1; unsigned BSIM4v6alpha1Given :1; unsigned BSIM4v6beta0Given :1; unsigned BSIM4v6agidlGiven :1; unsigned BSIM4v6bgidlGiven :1; unsigned BSIM4v6cgidlGiven :1; unsigned BSIM4v6egidlGiven :1; unsigned BSIM4v6agislGiven :1; unsigned BSIM4v6bgislGiven :1; unsigned BSIM4v6cgislGiven :1; unsigned BSIM4v6egislGiven :1; unsigned BSIM4v6aigcGiven :1; unsigned BSIM4v6bigcGiven :1; unsigned BSIM4v6cigcGiven :1; unsigned BSIM4v6aigsdGiven :1; unsigned BSIM4v6bigsdGiven :1; unsigned BSIM4v6cigsdGiven :1; unsigned BSIM4v6aigsGiven :1; unsigned BSIM4v6bigsGiven :1; unsigned BSIM4v6cigsGiven :1; unsigned BSIM4v6aigdGiven :1; unsigned BSIM4v6bigdGiven :1; unsigned BSIM4v6cigdGiven :1; unsigned BSIM4v6aigbaccGiven :1; unsigned BSIM4v6bigbaccGiven :1; unsigned BSIM4v6cigbaccGiven :1; unsigned BSIM4v6aigbinvGiven :1; unsigned BSIM4v6bigbinvGiven :1; unsigned BSIM4v6cigbinvGiven :1; unsigned BSIM4v6nigcGiven :1; unsigned BSIM4v6nigbinvGiven :1; unsigned BSIM4v6nigbaccGiven :1; unsigned BSIM4v6ntoxGiven :1; unsigned BSIM4v6eigbinvGiven :1; unsigned BSIM4v6pigcdGiven :1; unsigned BSIM4v6poxedgeGiven :1; unsigned BSIM4v6ijthdfwdGiven :1; unsigned BSIM4v6ijthsfwdGiven :1; unsigned BSIM4v6ijthdrevGiven :1; unsigned BSIM4v6ijthsrevGiven :1; unsigned BSIM4v6xjbvdGiven :1; unsigned BSIM4v6xjbvsGiven :1; unsigned BSIM4v6bvdGiven :1; unsigned BSIM4v6bvsGiven :1; unsigned BSIM4v6jtssGiven :1; unsigned BSIM4v6jtsdGiven :1; unsigned BSIM4v6jtsswsGiven :1; unsigned BSIM4v6jtsswdGiven :1; unsigned BSIM4v6jtsswgsGiven :1; unsigned BSIM4v6jtsswgdGiven :1; unsigned BSIM4v6jtweffGiven :1; unsigned BSIM4v6njtsGiven :1; unsigned BSIM4v6njtsswGiven :1; unsigned BSIM4v6njtsswgGiven :1; unsigned BSIM4v6njtsdGiven :1; unsigned BSIM4v6njtsswdGiven :1; unsigned BSIM4v6njtsswgdGiven :1; unsigned BSIM4v6xtssGiven :1; unsigned BSIM4v6xtsdGiven :1; unsigned BSIM4v6xtsswsGiven :1; unsigned BSIM4v6xtsswdGiven :1; unsigned BSIM4v6xtsswgsGiven :1; unsigned BSIM4v6xtsswgdGiven :1; unsigned BSIM4v6tnjtsGiven :1; unsigned BSIM4v6tnjtsswGiven :1; unsigned BSIM4v6tnjtsswgGiven :1; unsigned BSIM4v6tnjtsdGiven :1; unsigned BSIM4v6tnjtsswdGiven :1; unsigned BSIM4v6tnjtsswgdGiven :1; unsigned BSIM4v6vtssGiven :1; unsigned BSIM4v6vtsdGiven :1; unsigned BSIM4v6vtsswsGiven :1; unsigned BSIM4v6vtsswdGiven :1; unsigned BSIM4v6vtsswgsGiven :1; unsigned BSIM4v6vtsswgdGiven :1; unsigned BSIM4v6vfbGiven :1; unsigned BSIM4v6gbminGiven :1; unsigned BSIM4v6rbdbGiven :1; unsigned BSIM4v6rbsbGiven :1; unsigned BSIM4v6rbpsGiven :1; unsigned BSIM4v6rbpdGiven :1; unsigned BSIM4v6rbpbGiven :1; unsigned BSIM4v6rbps0Given :1; unsigned BSIM4v6rbpslGiven :1; unsigned BSIM4v6rbpswGiven :1; unsigned BSIM4v6rbpsnfGiven :1; unsigned BSIM4v6rbpd0Given :1; unsigned BSIM4v6rbpdlGiven :1; unsigned BSIM4v6rbpdwGiven :1; unsigned BSIM4v6rbpdnfGiven :1; unsigned BSIM4v6rbpbx0Given :1; unsigned BSIM4v6rbpbxlGiven :1; unsigned BSIM4v6rbpbxwGiven :1; unsigned BSIM4v6rbpbxnfGiven :1; unsigned BSIM4v6rbpby0Given :1; unsigned BSIM4v6rbpbylGiven :1; unsigned BSIM4v6rbpbywGiven :1; unsigned BSIM4v6rbpbynfGiven :1; unsigned BSIM4v6rbsbx0Given :1; unsigned BSIM4v6rbsby0Given :1; unsigned BSIM4v6rbdbx0Given :1; unsigned BSIM4v6rbdby0Given :1; unsigned BSIM4v6rbsdbxlGiven :1; unsigned BSIM4v6rbsdbxwGiven :1; unsigned BSIM4v6rbsdbxnfGiven :1; unsigned BSIM4v6rbsdbylGiven :1; unsigned BSIM4v6rbsdbywGiven :1; unsigned BSIM4v6rbsdbynfGiven :1; unsigned BSIM4v6xrcrg1Given :1; unsigned BSIM4v6xrcrg2Given :1; unsigned BSIM4v6tnoiaGiven :1; unsigned BSIM4v6tnoibGiven :1; unsigned BSIM4v6rnoiaGiven :1; unsigned BSIM4v6rnoibGiven :1; unsigned BSIM4v6ntnoiGiven :1; unsigned BSIM4v6lambdaGiven :1; unsigned BSIM4v6vtlGiven :1; unsigned BSIM4v6lcGiven :1; unsigned BSIM4v6xnGiven :1; unsigned BSIM4v6vfbsdoffGiven :1; unsigned BSIM4v6lintnoiGiven :1; unsigned BSIM4v6tvfbsdoffGiven :1; /* CV model and parasitics */ unsigned BSIM4v6cgslGiven :1; unsigned BSIM4v6cgdlGiven :1; unsigned BSIM4v6ckappasGiven :1; unsigned BSIM4v6ckappadGiven :1; unsigned BSIM4v6cfGiven :1; unsigned BSIM4v6vfbcvGiven :1; unsigned BSIM4v6clcGiven :1; unsigned BSIM4v6cleGiven :1; unsigned BSIM4v6dwcGiven :1; unsigned BSIM4v6dlcGiven :1; unsigned BSIM4v6xwGiven :1; unsigned BSIM4v6xlGiven :1; unsigned BSIM4v6dlcigGiven :1; unsigned BSIM4v6dlcigdGiven :1; unsigned BSIM4v6dwjGiven :1; unsigned BSIM4v6noffGiven :1; unsigned BSIM4v6voffcvGiven :1; unsigned BSIM4v6acdeGiven :1; unsigned BSIM4v6moinGiven :1; unsigned BSIM4v6tcjGiven :1; unsigned BSIM4v6tcjswGiven :1; unsigned BSIM4v6tcjswgGiven :1; unsigned BSIM4v6tpbGiven :1; unsigned BSIM4v6tpbswGiven :1; unsigned BSIM4v6tpbswgGiven :1; unsigned BSIM4v6dmcgGiven :1; unsigned BSIM4v6dmciGiven :1; unsigned BSIM4v6dmdgGiven :1; unsigned BSIM4v6dmcgtGiven :1; unsigned BSIM4v6xgwGiven :1; unsigned BSIM4v6xglGiven :1; unsigned BSIM4v6rshgGiven :1; unsigned BSIM4v6ngconGiven :1; /* Length dependence */ unsigned BSIM4v6lcdscGiven :1; unsigned BSIM4v6lcdscbGiven :1; unsigned BSIM4v6lcdscdGiven :1; unsigned BSIM4v6lcitGiven :1; unsigned BSIM4v6lnfactorGiven :1; unsigned BSIM4v6lxjGiven :1; unsigned BSIM4v6lvsatGiven :1; unsigned BSIM4v6latGiven :1; unsigned BSIM4v6la0Given :1; unsigned BSIM4v6lagsGiven :1; unsigned BSIM4v6la1Given :1; unsigned BSIM4v6la2Given :1; unsigned BSIM4v6lketaGiven :1; unsigned BSIM4v6lnsubGiven :1; unsigned BSIM4v6lndepGiven :1; unsigned BSIM4v6lnsdGiven :1; unsigned BSIM4v6lphinGiven :1; unsigned BSIM4v6lngateGiven :1; unsigned BSIM4v6lgamma1Given :1; unsigned BSIM4v6lgamma2Given :1; unsigned BSIM4v6lvbxGiven :1; unsigned BSIM4v6lvbmGiven :1; unsigned BSIM4v6lxtGiven :1; unsigned BSIM4v6lk1Given :1; unsigned BSIM4v6lkt1Given :1; unsigned BSIM4v6lkt1lGiven :1; unsigned BSIM4v6lkt2Given :1; unsigned BSIM4v6lk2Given :1; unsigned BSIM4v6lk3Given :1; unsigned BSIM4v6lk3bGiven :1; unsigned BSIM4v6lw0Given :1; unsigned BSIM4v6ldvtp0Given :1; unsigned BSIM4v6ldvtp1Given :1; unsigned BSIM4v6llpe0Given :1; unsigned BSIM4v6llpebGiven :1; unsigned BSIM4v6ldvt0Given :1; unsigned BSIM4v6ldvt1Given :1; unsigned BSIM4v6ldvt2Given :1; unsigned BSIM4v6ldvt0wGiven :1; unsigned BSIM4v6ldvt1wGiven :1; unsigned BSIM4v6ldvt2wGiven :1; unsigned BSIM4v6ldroutGiven :1; unsigned BSIM4v6ldsubGiven :1; unsigned BSIM4v6lvth0Given :1; unsigned BSIM4v6luaGiven :1; unsigned BSIM4v6lua1Given :1; unsigned BSIM4v6lubGiven :1; unsigned BSIM4v6lub1Given :1; unsigned BSIM4v6lucGiven :1; unsigned BSIM4v6luc1Given :1; unsigned BSIM4v6ludGiven :1; unsigned BSIM4v6lud1Given :1; unsigned BSIM4v6lupGiven :1; unsigned BSIM4v6llpGiven :1; unsigned BSIM4v6lu0Given :1; unsigned BSIM4v6leuGiven :1; unsigned BSIM4v6lucsGiven :1; unsigned BSIM4v6luteGiven :1; unsigned BSIM4v6lucsteGiven :1; unsigned BSIM4v6lvoffGiven :1; unsigned BSIM4v6ltvoffGiven :1; unsigned BSIM4v6lminvGiven :1; unsigned BSIM4v6lminvcvGiven :1; unsigned BSIM4v6lrdswGiven :1; unsigned BSIM4v6lrswGiven :1; unsigned BSIM4v6lrdwGiven :1; unsigned BSIM4v6lprwgGiven :1; unsigned BSIM4v6lprwbGiven :1; unsigned BSIM4v6lprtGiven :1; unsigned BSIM4v6leta0Given :1; unsigned BSIM4v6letabGiven :1; unsigned BSIM4v6lpclmGiven :1; unsigned BSIM4v6lpdibl1Given :1; unsigned BSIM4v6lpdibl2Given :1; unsigned BSIM4v6lpdiblbGiven :1; unsigned BSIM4v6lfproutGiven :1; unsigned BSIM4v6lpditsGiven :1; unsigned BSIM4v6lpditsdGiven :1; unsigned BSIM4v6lpscbe1Given :1; unsigned BSIM4v6lpscbe2Given :1; unsigned BSIM4v6lpvagGiven :1; unsigned BSIM4v6ldeltaGiven :1; unsigned BSIM4v6lwrGiven :1; unsigned BSIM4v6ldwgGiven :1; unsigned BSIM4v6ldwbGiven :1; unsigned BSIM4v6lb0Given :1; unsigned BSIM4v6lb1Given :1; unsigned BSIM4v6lalpha0Given :1; unsigned BSIM4v6lalpha1Given :1; unsigned BSIM4v6lbeta0Given :1; unsigned BSIM4v6lvfbGiven :1; unsigned BSIM4v6lagidlGiven :1; unsigned BSIM4v6lbgidlGiven :1; unsigned BSIM4v6lcgidlGiven :1; unsigned BSIM4v6legidlGiven :1; unsigned BSIM4v6lagislGiven :1; unsigned BSIM4v6lbgislGiven :1; unsigned BSIM4v6lcgislGiven :1; unsigned BSIM4v6legislGiven :1; unsigned BSIM4v6laigcGiven :1; unsigned BSIM4v6lbigcGiven :1; unsigned BSIM4v6lcigcGiven :1; unsigned BSIM4v6laigsdGiven :1; unsigned BSIM4v6lbigsdGiven :1; unsigned BSIM4v6lcigsdGiven :1; unsigned BSIM4v6laigsGiven :1; unsigned BSIM4v6lbigsGiven :1; unsigned BSIM4v6lcigsGiven :1; unsigned BSIM4v6laigdGiven :1; unsigned BSIM4v6lbigdGiven :1; unsigned BSIM4v6lcigdGiven :1; unsigned BSIM4v6laigbaccGiven :1; unsigned BSIM4v6lbigbaccGiven :1; unsigned BSIM4v6lcigbaccGiven :1; unsigned BSIM4v6laigbinvGiven :1; unsigned BSIM4v6lbigbinvGiven :1; unsigned BSIM4v6lcigbinvGiven :1; unsigned BSIM4v6lnigcGiven :1; unsigned BSIM4v6lnigbinvGiven :1; unsigned BSIM4v6lnigbaccGiven :1; unsigned BSIM4v6lntoxGiven :1; unsigned BSIM4v6leigbinvGiven :1; unsigned BSIM4v6lpigcdGiven :1; unsigned BSIM4v6lpoxedgeGiven :1; unsigned BSIM4v6lxrcrg1Given :1; unsigned BSIM4v6lxrcrg2Given :1; unsigned BSIM4v6llambdaGiven :1; unsigned BSIM4v6lvtlGiven :1; unsigned BSIM4v6lxnGiven :1; unsigned BSIM4v6lvfbsdoffGiven :1; unsigned BSIM4v6ltvfbsdoffGiven :1; /* CV model */ unsigned BSIM4v6lcgslGiven :1; unsigned BSIM4v6lcgdlGiven :1; unsigned BSIM4v6lckappasGiven :1; unsigned BSIM4v6lckappadGiven :1; unsigned BSIM4v6lcfGiven :1; unsigned BSIM4v6lclcGiven :1; unsigned BSIM4v6lcleGiven :1; unsigned BSIM4v6lvfbcvGiven :1; unsigned BSIM4v6lnoffGiven :1; unsigned BSIM4v6lvoffcvGiven :1; unsigned BSIM4v6lacdeGiven :1; unsigned BSIM4v6lmoinGiven :1; /* Width dependence */ unsigned BSIM4v6wcdscGiven :1; unsigned BSIM4v6wcdscbGiven :1; unsigned BSIM4v6wcdscdGiven :1; unsigned BSIM4v6wcitGiven :1; unsigned BSIM4v6wnfactorGiven :1; unsigned BSIM4v6wxjGiven :1; unsigned BSIM4v6wvsatGiven :1; unsigned BSIM4v6watGiven :1; unsigned BSIM4v6wa0Given :1; unsigned BSIM4v6wagsGiven :1; unsigned BSIM4v6wa1Given :1; unsigned BSIM4v6wa2Given :1; unsigned BSIM4v6wketaGiven :1; unsigned BSIM4v6wnsubGiven :1; unsigned BSIM4v6wndepGiven :1; unsigned BSIM4v6wnsdGiven :1; unsigned BSIM4v6wphinGiven :1; unsigned BSIM4v6wngateGiven :1; unsigned BSIM4v6wgamma1Given :1; unsigned BSIM4v6wgamma2Given :1; unsigned BSIM4v6wvbxGiven :1; unsigned BSIM4v6wvbmGiven :1; unsigned BSIM4v6wxtGiven :1; unsigned BSIM4v6wk1Given :1; unsigned BSIM4v6wkt1Given :1; unsigned BSIM4v6wkt1lGiven :1; unsigned BSIM4v6wkt2Given :1; unsigned BSIM4v6wk2Given :1; unsigned BSIM4v6wk3Given :1; unsigned BSIM4v6wk3bGiven :1; unsigned BSIM4v6ww0Given :1; unsigned BSIM4v6wdvtp0Given :1; unsigned BSIM4v6wdvtp1Given :1; unsigned BSIM4v6wlpe0Given :1; unsigned BSIM4v6wlpebGiven :1; unsigned BSIM4v6wdvt0Given :1; unsigned BSIM4v6wdvt1Given :1; unsigned BSIM4v6wdvt2Given :1; unsigned BSIM4v6wdvt0wGiven :1; unsigned BSIM4v6wdvt1wGiven :1; unsigned BSIM4v6wdvt2wGiven :1; unsigned BSIM4v6wdroutGiven :1; unsigned BSIM4v6wdsubGiven :1; unsigned BSIM4v6wvth0Given :1; unsigned BSIM4v6wuaGiven :1; unsigned BSIM4v6wua1Given :1; unsigned BSIM4v6wubGiven :1; unsigned BSIM4v6wub1Given :1; unsigned BSIM4v6wucGiven :1; unsigned BSIM4v6wuc1Given :1; unsigned BSIM4v6wudGiven :1; unsigned BSIM4v6wud1Given :1; unsigned BSIM4v6wupGiven :1; unsigned BSIM4v6wlpGiven :1; unsigned BSIM4v6wu0Given :1; unsigned BSIM4v6weuGiven :1; unsigned BSIM4v6wucsGiven :1; unsigned BSIM4v6wuteGiven :1; unsigned BSIM4v6wucsteGiven :1; unsigned BSIM4v6wvoffGiven :1; unsigned BSIM4v6wtvoffGiven :1; unsigned BSIM4v6wminvGiven :1; unsigned BSIM4v6wminvcvGiven :1; unsigned BSIM4v6wrdswGiven :1; unsigned BSIM4v6wrswGiven :1; unsigned BSIM4v6wrdwGiven :1; unsigned BSIM4v6wprwgGiven :1; unsigned BSIM4v6wprwbGiven :1; unsigned BSIM4v6wprtGiven :1; unsigned BSIM4v6weta0Given :1; unsigned BSIM4v6wetabGiven :1; unsigned BSIM4v6wpclmGiven :1; unsigned BSIM4v6wpdibl1Given :1; unsigned BSIM4v6wpdibl2Given :1; unsigned BSIM4v6wpdiblbGiven :1; unsigned BSIM4v6wfproutGiven :1; unsigned BSIM4v6wpditsGiven :1; unsigned BSIM4v6wpditsdGiven :1; unsigned BSIM4v6wpscbe1Given :1; unsigned BSIM4v6wpscbe2Given :1; unsigned BSIM4v6wpvagGiven :1; unsigned BSIM4v6wdeltaGiven :1; unsigned BSIM4v6wwrGiven :1; unsigned BSIM4v6wdwgGiven :1; unsigned BSIM4v6wdwbGiven :1; unsigned BSIM4v6wb0Given :1; unsigned BSIM4v6wb1Given :1; unsigned BSIM4v6walpha0Given :1; unsigned BSIM4v6walpha1Given :1; unsigned BSIM4v6wbeta0Given :1; unsigned BSIM4v6wvfbGiven :1; unsigned BSIM4v6wagidlGiven :1; unsigned BSIM4v6wbgidlGiven :1; unsigned BSIM4v6wcgidlGiven :1; unsigned BSIM4v6wegidlGiven :1; unsigned BSIM4v6wagislGiven :1; unsigned BSIM4v6wbgislGiven :1; unsigned BSIM4v6wcgislGiven :1; unsigned BSIM4v6wegislGiven :1; unsigned BSIM4v6waigcGiven :1; unsigned BSIM4v6wbigcGiven :1; unsigned BSIM4v6wcigcGiven :1; unsigned BSIM4v6waigsdGiven :1; unsigned BSIM4v6wbigsdGiven :1; unsigned BSIM4v6wcigsdGiven :1; unsigned BSIM4v6waigsGiven :1; unsigned BSIM4v6wbigsGiven :1; unsigned BSIM4v6wcigsGiven :1; unsigned BSIM4v6waigdGiven :1; unsigned BSIM4v6wbigdGiven :1; unsigned BSIM4v6wcigdGiven :1; unsigned BSIM4v6waigbaccGiven :1; unsigned BSIM4v6wbigbaccGiven :1; unsigned BSIM4v6wcigbaccGiven :1; unsigned BSIM4v6waigbinvGiven :1; unsigned BSIM4v6wbigbinvGiven :1; unsigned BSIM4v6wcigbinvGiven :1; unsigned BSIM4v6wnigcGiven :1; unsigned BSIM4v6wnigbinvGiven :1; unsigned BSIM4v6wnigbaccGiven :1; unsigned BSIM4v6wntoxGiven :1; unsigned BSIM4v6weigbinvGiven :1; unsigned BSIM4v6wpigcdGiven :1; unsigned BSIM4v6wpoxedgeGiven :1; unsigned BSIM4v6wxrcrg1Given :1; unsigned BSIM4v6wxrcrg2Given :1; unsigned BSIM4v6wlambdaGiven :1; unsigned BSIM4v6wvtlGiven :1; unsigned BSIM4v6wxnGiven :1; unsigned BSIM4v6wvfbsdoffGiven :1; unsigned BSIM4v6wtvfbsdoffGiven :1; /* CV model */ unsigned BSIM4v6wcgslGiven :1; unsigned BSIM4v6wcgdlGiven :1; unsigned BSIM4v6wckappasGiven :1; unsigned BSIM4v6wckappadGiven :1; unsigned BSIM4v6wcfGiven :1; unsigned BSIM4v6wclcGiven :1; unsigned BSIM4v6wcleGiven :1; unsigned BSIM4v6wvfbcvGiven :1; unsigned BSIM4v6wnoffGiven :1; unsigned BSIM4v6wvoffcvGiven :1; unsigned BSIM4v6wacdeGiven :1; unsigned BSIM4v6wmoinGiven :1; /* Cross-term dependence */ unsigned BSIM4v6pcdscGiven :1; unsigned BSIM4v6pcdscbGiven :1; unsigned BSIM4v6pcdscdGiven :1; unsigned BSIM4v6pcitGiven :1; unsigned BSIM4v6pnfactorGiven :1; unsigned BSIM4v6pxjGiven :1; unsigned BSIM4v6pvsatGiven :1; unsigned BSIM4v6patGiven :1; unsigned BSIM4v6pa0Given :1; unsigned BSIM4v6pagsGiven :1; unsigned BSIM4v6pa1Given :1; unsigned BSIM4v6pa2Given :1; unsigned BSIM4v6pketaGiven :1; unsigned BSIM4v6pnsubGiven :1; unsigned BSIM4v6pndepGiven :1; unsigned BSIM4v6pnsdGiven :1; unsigned BSIM4v6pphinGiven :1; unsigned BSIM4v6pngateGiven :1; unsigned BSIM4v6pgamma1Given :1; unsigned BSIM4v6pgamma2Given :1; unsigned BSIM4v6pvbxGiven :1; unsigned BSIM4v6pvbmGiven :1; unsigned BSIM4v6pxtGiven :1; unsigned BSIM4v6pk1Given :1; unsigned BSIM4v6pkt1Given :1; unsigned BSIM4v6pkt1lGiven :1; unsigned BSIM4v6pkt2Given :1; unsigned BSIM4v6pk2Given :1; unsigned BSIM4v6pk3Given :1; unsigned BSIM4v6pk3bGiven :1; unsigned BSIM4v6pw0Given :1; unsigned BSIM4v6pdvtp0Given :1; unsigned BSIM4v6pdvtp1Given :1; unsigned BSIM4v6plpe0Given :1; unsigned BSIM4v6plpebGiven :1; unsigned BSIM4v6pdvt0Given :1; unsigned BSIM4v6pdvt1Given :1; unsigned BSIM4v6pdvt2Given :1; unsigned BSIM4v6pdvt0wGiven :1; unsigned BSIM4v6pdvt1wGiven :1; unsigned BSIM4v6pdvt2wGiven :1; unsigned BSIM4v6pdroutGiven :1; unsigned BSIM4v6pdsubGiven :1; unsigned BSIM4v6pvth0Given :1; unsigned BSIM4v6puaGiven :1; unsigned BSIM4v6pua1Given :1; unsigned BSIM4v6pubGiven :1; unsigned BSIM4v6pub1Given :1; unsigned BSIM4v6pucGiven :1; unsigned BSIM4v6puc1Given :1; unsigned BSIM4v6pudGiven :1; unsigned BSIM4v6pud1Given :1; unsigned BSIM4v6pupGiven :1; unsigned BSIM4v6plpGiven :1; unsigned BSIM4v6pu0Given :1; unsigned BSIM4v6peuGiven :1; unsigned BSIM4v6pucsGiven :1; unsigned BSIM4v6puteGiven :1; unsigned BSIM4v6pucsteGiven :1; unsigned BSIM4v6pvoffGiven :1; unsigned BSIM4v6ptvoffGiven :1; unsigned BSIM4v6pminvGiven :1; unsigned BSIM4v6pminvcvGiven :1; unsigned BSIM4v6prdswGiven :1; unsigned BSIM4v6prswGiven :1; unsigned BSIM4v6prdwGiven :1; unsigned BSIM4v6pprwgGiven :1; unsigned BSIM4v6pprwbGiven :1; unsigned BSIM4v6pprtGiven :1; unsigned BSIM4v6peta0Given :1; unsigned BSIM4v6petabGiven :1; unsigned BSIM4v6ppclmGiven :1; unsigned BSIM4v6ppdibl1Given :1; unsigned BSIM4v6ppdibl2Given :1; unsigned BSIM4v6ppdiblbGiven :1; unsigned BSIM4v6pfproutGiven :1; unsigned BSIM4v6ppditsGiven :1; unsigned BSIM4v6ppditsdGiven :1; unsigned BSIM4v6ppscbe1Given :1; unsigned BSIM4v6ppscbe2Given :1; unsigned BSIM4v6ppvagGiven :1; unsigned BSIM4v6pdeltaGiven :1; unsigned BSIM4v6pwrGiven :1; unsigned BSIM4v6pdwgGiven :1; unsigned BSIM4v6pdwbGiven :1; unsigned BSIM4v6pb0Given :1; unsigned BSIM4v6pb1Given :1; unsigned BSIM4v6palpha0Given :1; unsigned BSIM4v6palpha1Given :1; unsigned BSIM4v6pbeta0Given :1; unsigned BSIM4v6pvfbGiven :1; unsigned BSIM4v6pagidlGiven :1; unsigned BSIM4v6pbgidlGiven :1; unsigned BSIM4v6pcgidlGiven :1; unsigned BSIM4v6pegidlGiven :1; unsigned BSIM4v6pagislGiven :1; unsigned BSIM4v6pbgislGiven :1; unsigned BSIM4v6pcgislGiven :1; unsigned BSIM4v6pegislGiven :1; unsigned BSIM4v6paigcGiven :1; unsigned BSIM4v6pbigcGiven :1; unsigned BSIM4v6pcigcGiven :1; unsigned BSIM4v6paigsdGiven :1; unsigned BSIM4v6pbigsdGiven :1; unsigned BSIM4v6pcigsdGiven :1; unsigned BSIM4v6paigsGiven :1; unsigned BSIM4v6pbigsGiven :1; unsigned BSIM4v6pcigsGiven :1; unsigned BSIM4v6paigdGiven :1; unsigned BSIM4v6pbigdGiven :1; unsigned BSIM4v6pcigdGiven :1; unsigned BSIM4v6paigbaccGiven :1; unsigned BSIM4v6pbigbaccGiven :1; unsigned BSIM4v6pcigbaccGiven :1; unsigned BSIM4v6paigbinvGiven :1; unsigned BSIM4v6pbigbinvGiven :1; unsigned BSIM4v6pcigbinvGiven :1; unsigned BSIM4v6pnigcGiven :1; unsigned BSIM4v6pnigbinvGiven :1; unsigned BSIM4v6pnigbaccGiven :1; unsigned BSIM4v6pntoxGiven :1; unsigned BSIM4v6peigbinvGiven :1; unsigned BSIM4v6ppigcdGiven :1; unsigned BSIM4v6ppoxedgeGiven :1; unsigned BSIM4v6pxrcrg1Given :1; unsigned BSIM4v6pxrcrg2Given :1; unsigned BSIM4v6plambdaGiven :1; unsigned BSIM4v6pvtlGiven :1; unsigned BSIM4v6pxnGiven :1; unsigned BSIM4v6pvfbsdoffGiven :1; unsigned BSIM4v6ptvfbsdoffGiven :1; /* CV model */ unsigned BSIM4v6pcgslGiven :1; unsigned BSIM4v6pcgdlGiven :1; unsigned BSIM4v6pckappasGiven :1; unsigned BSIM4v6pckappadGiven :1; unsigned BSIM4v6pcfGiven :1; unsigned BSIM4v6pclcGiven :1; unsigned BSIM4v6pcleGiven :1; unsigned BSIM4v6pvfbcvGiven :1; unsigned BSIM4v6pnoffGiven :1; unsigned BSIM4v6pvoffcvGiven :1; unsigned BSIM4v6pacdeGiven :1; unsigned BSIM4v6pmoinGiven :1; unsigned BSIM4v6useFringeGiven :1; unsigned BSIM4v6tnomGiven :1; unsigned BSIM4v6cgsoGiven :1; unsigned BSIM4v6cgdoGiven :1; unsigned BSIM4v6cgboGiven :1; unsigned BSIM4v6xpartGiven :1; unsigned BSIM4v6sheetResistanceGiven :1; unsigned BSIM4v6SjctSatCurDensityGiven :1; unsigned BSIM4v6SjctSidewallSatCurDensityGiven :1; unsigned BSIM4v6SjctGateSidewallSatCurDensityGiven :1; unsigned BSIM4v6SbulkJctPotentialGiven :1; unsigned BSIM4v6SbulkJctBotGradingCoeffGiven :1; unsigned BSIM4v6SsidewallJctPotentialGiven :1; unsigned BSIM4v6SGatesidewallJctPotentialGiven :1; unsigned BSIM4v6SbulkJctSideGradingCoeffGiven :1; unsigned BSIM4v6SunitAreaJctCapGiven :1; unsigned BSIM4v6SunitLengthSidewallJctCapGiven :1; unsigned BSIM4v6SbulkJctGateSideGradingCoeffGiven :1; unsigned BSIM4v6SunitLengthGateSidewallJctCapGiven :1; unsigned BSIM4v6SjctEmissionCoeffGiven :1; unsigned BSIM4v6SjctTempExponentGiven :1; unsigned BSIM4v6DjctSatCurDensityGiven :1; unsigned BSIM4v6DjctSidewallSatCurDensityGiven :1; unsigned BSIM4v6DjctGateSidewallSatCurDensityGiven :1; unsigned BSIM4v6DbulkJctPotentialGiven :1; unsigned BSIM4v6DbulkJctBotGradingCoeffGiven :1; unsigned BSIM4v6DsidewallJctPotentialGiven :1; unsigned BSIM4v6DGatesidewallJctPotentialGiven :1; unsigned BSIM4v6DbulkJctSideGradingCoeffGiven :1; unsigned BSIM4v6DunitAreaJctCapGiven :1; unsigned BSIM4v6DunitLengthSidewallJctCapGiven :1; unsigned BSIM4v6DbulkJctGateSideGradingCoeffGiven :1; unsigned BSIM4v6DunitLengthGateSidewallJctCapGiven :1; unsigned BSIM4v6DjctEmissionCoeffGiven :1; unsigned BSIM4v6DjctTempExponentGiven :1; unsigned BSIM4v6oxideTrapDensityAGiven :1; unsigned BSIM4v6oxideTrapDensityBGiven :1; unsigned BSIM4v6oxideTrapDensityCGiven :1; unsigned BSIM4v6emGiven :1; unsigned BSIM4v6efGiven :1; unsigned BSIM4v6afGiven :1; unsigned BSIM4v6kfGiven :1; unsigned BSIM4v6vgsMaxGiven :1; unsigned BSIM4v6vgdMaxGiven :1; unsigned BSIM4v6vgbMaxGiven :1; unsigned BSIM4v6vdsMaxGiven :1; unsigned BSIM4v6vbsMaxGiven :1; unsigned BSIM4v6vbdMaxGiven :1; unsigned BSIM4v6vgsrMaxGiven :1; unsigned BSIM4v6vgdrMaxGiven :1; unsigned BSIM4v6vgbrMaxGiven :1; unsigned BSIM4v6vbsrMaxGiven :1; unsigned BSIM4v6vbdrMaxGiven :1; unsigned BSIM4v6LintGiven :1; unsigned BSIM4v6LlGiven :1; unsigned BSIM4v6LlcGiven :1; unsigned BSIM4v6LlnGiven :1; unsigned BSIM4v6LwGiven :1; unsigned BSIM4v6LwcGiven :1; unsigned BSIM4v6LwnGiven :1; unsigned BSIM4v6LwlGiven :1; unsigned BSIM4v6LwlcGiven :1; unsigned BSIM4v6LminGiven :1; unsigned BSIM4v6LmaxGiven :1; unsigned BSIM4v6WintGiven :1; unsigned BSIM4v6WlGiven :1; unsigned BSIM4v6WlcGiven :1; unsigned BSIM4v6WlnGiven :1; unsigned BSIM4v6WwGiven :1; unsigned BSIM4v6WwcGiven :1; unsigned BSIM4v6WwnGiven :1; unsigned BSIM4v6WwlGiven :1; unsigned BSIM4v6WwlcGiven :1; unsigned BSIM4v6WminGiven :1; unsigned BSIM4v6WmaxGiven :1; /* added for stress effect */ unsigned BSIM4v6sarefGiven :1; unsigned BSIM4v6sbrefGiven :1; unsigned BSIM4v6wlodGiven :1; unsigned BSIM4v6ku0Given :1; unsigned BSIM4v6kvsatGiven :1; unsigned BSIM4v6kvth0Given :1; unsigned BSIM4v6tku0Given :1; unsigned BSIM4v6llodku0Given :1; unsigned BSIM4v6wlodku0Given :1; unsigned BSIM4v6llodvthGiven :1; unsigned BSIM4v6wlodvthGiven :1; unsigned BSIM4v6lku0Given :1; unsigned BSIM4v6wku0Given :1; unsigned BSIM4v6pku0Given :1; unsigned BSIM4v6lkvth0Given :1; unsigned BSIM4v6wkvth0Given :1; unsigned BSIM4v6pkvth0Given :1; unsigned BSIM4v6stk2Given :1; unsigned BSIM4v6lodk2Given :1; unsigned BSIM4v6steta0Given :1; unsigned BSIM4v6lodeta0Given :1; unsigned BSIM4v6webGiven :1; unsigned BSIM4v6wecGiven :1; unsigned BSIM4v6kvth0weGiven :1; unsigned BSIM4v6k2weGiven :1; unsigned BSIM4v6ku0weGiven :1; unsigned BSIM4v6screfGiven :1; unsigned BSIM4v6wpemodGiven :1; unsigned BSIM4v6lkvth0weGiven :1; unsigned BSIM4v6lk2weGiven :1; unsigned BSIM4v6lku0weGiven :1; unsigned BSIM4v6wkvth0weGiven :1; unsigned BSIM4v6wk2weGiven :1; unsigned BSIM4v6wku0weGiven :1; unsigned BSIM4v6pkvth0weGiven :1; unsigned BSIM4v6pk2weGiven :1; unsigned BSIM4v6pku0weGiven :1; } BSIM4v6model; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ /* Instance parameters */ #define BSIM4v6_W 1 #define BSIM4v6_L 2 #define BSIM4v6_AS 3 #define BSIM4v6_AD 4 #define BSIM4v6_PS 5 #define BSIM4v6_PD 6 #define BSIM4v6_NRS 7 #define BSIM4v6_NRD 8 #define BSIM4v6_OFF 9 #define BSIM4v6_IC 10 #define BSIM4v6_IC_VDS 11 #define BSIM4v6_IC_VGS 12 #define BSIM4v6_IC_VBS 13 #define BSIM4v6_TRNQSMOD 14 #define BSIM4v6_RBODYMOD 15 #define BSIM4v6_RGATEMOD 16 #define BSIM4v6_GEOMOD 17 #define BSIM4v6_RGEOMOD 18 #define BSIM4v6_NF 19 #define BSIM4v6_MIN 20 #define BSIM4v6_ACNQSMOD 22 #define BSIM4v6_RBDB 23 #define BSIM4v6_RBSB 24 #define BSIM4v6_RBPB 25 #define BSIM4v6_RBPS 26 #define BSIM4v6_RBPD 27 #define BSIM4v6_SA 28 #define BSIM4v6_SB 29 #define BSIM4v6_SD 30 #define BSIM4v6_DELVTO 31 #define BSIM4v6_XGW 32 #define BSIM4v6_NGCON 33 #define BSIM4v6_SCA 34 #define BSIM4v6_SCB 35 #define BSIM4v6_SCC 36 #define BSIM4v6_SC 37 #define BSIM4v6_M 38 /* Global parameters */ #define BSIM4v6_MOD_TEMPEOT 65 #define BSIM4v6_MOD_LEFFEOT 66 #define BSIM4v6_MOD_WEFFEOT 67 #define BSIM4v6_MOD_UCSTE 68 #define BSIM4v6_MOD_LUCSTE 69 #define BSIM4v6_MOD_WUCSTE 70 #define BSIM4v6_MOD_PUCSTE 71 #define BSIM4v6_MOD_UCS 72 #define BSIM4v6_MOD_LUCS 73 #define BSIM4v6_MOD_WUCS 74 #define BSIM4v6_MOD_PUCS 75 #define BSIM4v6_MOD_CVCHARGEMOD 76 #define BSIM4v6_MOD_ADOS 77 #define BSIM4v6_MOD_BDOS 78 #define BSIM4v6_MOD_TEMPMOD 79 #define BSIM4v6_MOD_MTRLMOD 80 #define BSIM4v6_MOD_IGCMOD 81 #define BSIM4v6_MOD_IGBMOD 82 #define BSIM4v6_MOD_ACNQSMOD 83 #define BSIM4v6_MOD_FNOIMOD 84 #define BSIM4v6_MOD_RDSMOD 85 #define BSIM4v6_MOD_DIOMOD 86 #define BSIM4v6_MOD_PERMOD 87 #define BSIM4v6_MOD_GEOMOD 88 #define BSIM4v6_MOD_RGEOMOD 89 #define BSIM4v6_MOD_RGATEMOD 90 #define BSIM4v6_MOD_RBODYMOD 91 #define BSIM4v6_MOD_CAPMOD 92 #define BSIM4v6_MOD_TRNQSMOD 93 #define BSIM4v6_MOD_MOBMOD 94 #define BSIM4v6_MOD_TNOIMOD 95 #define BSIM4v6_MOD_EOT 96 #define BSIM4v6_MOD_VDDEOT 97 #define BSIM4v6_MOD_TOXE 98 #define BSIM4v6_MOD_CDSC 99 #define BSIM4v6_MOD_CDSCB 100 #define BSIM4v6_MOD_CIT 101 #define BSIM4v6_MOD_NFACTOR 102 #define BSIM4v6_MOD_XJ 103 #define BSIM4v6_MOD_VSAT 104 #define BSIM4v6_MOD_AT 105 #define BSIM4v6_MOD_A0 106 #define BSIM4v6_MOD_A1 107 #define BSIM4v6_MOD_A2 108 #define BSIM4v6_MOD_KETA 109 #define BSIM4v6_MOD_NSUB 110 #define BSIM4v6_MOD_PHIG 111 #define BSIM4v6_MOD_EPSRGATE 112 #define BSIM4v6_MOD_EASUB 113 #define BSIM4v6_MOD_EPSRSUB 114 #define BSIM4v6_MOD_NI0SUB 115 #define BSIM4v6_MOD_BG0SUB 116 #define BSIM4v6_MOD_TBGASUB 117 #define BSIM4v6_MOD_TBGBSUB 118 #define BSIM4v6_MOD_NDEP 119 #define BSIM4v6_MOD_NGATE 120 #define BSIM4v6_MOD_GAMMA1 121 #define BSIM4v6_MOD_GAMMA2 122 #define BSIM4v6_MOD_VBX 123 #define BSIM4v6_MOD_BINUNIT 124 #define BSIM4v6_MOD_VBM 125 #define BSIM4v6_MOD_XT 126 #define BSIM4v6_MOD_K1 129 #define BSIM4v6_MOD_KT1 130 #define BSIM4v6_MOD_KT1L 131 #define BSIM4v6_MOD_K2 132 #define BSIM4v6_MOD_KT2 133 #define BSIM4v6_MOD_K3 134 #define BSIM4v6_MOD_K3B 135 #define BSIM4v6_MOD_W0 136 #define BSIM4v6_MOD_LPE0 137 #define BSIM4v6_MOD_DVT0 138 #define BSIM4v6_MOD_DVT1 139 #define BSIM4v6_MOD_DVT2 140 #define BSIM4v6_MOD_DVT0W 141 #define BSIM4v6_MOD_DVT1W 142 #define BSIM4v6_MOD_DVT2W 143 #define BSIM4v6_MOD_DROUT 144 #define BSIM4v6_MOD_DSUB 145 #define BSIM4v6_MOD_VTH0 146 #define BSIM4v6_MOD_UA 147 #define BSIM4v6_MOD_UA1 148 #define BSIM4v6_MOD_UB 149 #define BSIM4v6_MOD_UB1 150 #define BSIM4v6_MOD_UC 151 #define BSIM4v6_MOD_UC1 152 #define BSIM4v6_MOD_U0 153 #define BSIM4v6_MOD_UTE 154 #define BSIM4v6_MOD_VOFF 155 #define BSIM4v6_MOD_DELTA 156 #define BSIM4v6_MOD_RDSW 157 #define BSIM4v6_MOD_PRT 158 #define BSIM4v6_MOD_LDD 159 #define BSIM4v6_MOD_ETA 160 #define BSIM4v6_MOD_ETA0 161 #define BSIM4v6_MOD_ETAB 162 #define BSIM4v6_MOD_PCLM 163 #define BSIM4v6_MOD_PDIBL1 164 #define BSIM4v6_MOD_PDIBL2 165 #define BSIM4v6_MOD_PSCBE1 166 #define BSIM4v6_MOD_PSCBE2 167 #define BSIM4v6_MOD_PVAG 168 #define BSIM4v6_MOD_WR 169 #define BSIM4v6_MOD_DWG 170 #define BSIM4v6_MOD_DWB 171 #define BSIM4v6_MOD_B0 172 #define BSIM4v6_MOD_B1 173 #define BSIM4v6_MOD_ALPHA0 174 #define BSIM4v6_MOD_BETA0 175 #define BSIM4v6_MOD_PDIBLB 178 #define BSIM4v6_MOD_PRWG 179 #define BSIM4v6_MOD_PRWB 180 #define BSIM4v6_MOD_CDSCD 181 #define BSIM4v6_MOD_AGS 182 #define BSIM4v6_MOD_FRINGE 184 #define BSIM4v6_MOD_CGSL 186 #define BSIM4v6_MOD_CGDL 187 #define BSIM4v6_MOD_CKAPPAS 188 #define BSIM4v6_MOD_CF 189 #define BSIM4v6_MOD_CLC 190 #define BSIM4v6_MOD_CLE 191 #define BSIM4v6_MOD_PARAMCHK 192 #define BSIM4v6_MOD_VERSION 193 #define BSIM4v6_MOD_VFBCV 194 #define BSIM4v6_MOD_ACDE 195 #define BSIM4v6_MOD_MOIN 196 #define BSIM4v6_MOD_NOFF 197 #define BSIM4v6_MOD_IJTHDFWD 198 #define BSIM4v6_MOD_ALPHA1 199 #define BSIM4v6_MOD_VFB 200 #define BSIM4v6_MOD_TOXM 201 #define BSIM4v6_MOD_TCJ 202 #define BSIM4v6_MOD_TCJSW 203 #define BSIM4v6_MOD_TCJSWG 204 #define BSIM4v6_MOD_TPB 205 #define BSIM4v6_MOD_TPBSW 206 #define BSIM4v6_MOD_TPBSWG 207 #define BSIM4v6_MOD_VOFFCV 208 #define BSIM4v6_MOD_GBMIN 209 #define BSIM4v6_MOD_RBDB 210 #define BSIM4v6_MOD_RBSB 211 #define BSIM4v6_MOD_RBPB 212 #define BSIM4v6_MOD_RBPS 213 #define BSIM4v6_MOD_RBPD 214 #define BSIM4v6_MOD_DMCG 215 #define BSIM4v6_MOD_DMCI 216 #define BSIM4v6_MOD_DMDG 217 #define BSIM4v6_MOD_XGW 218 #define BSIM4v6_MOD_XGL 219 #define BSIM4v6_MOD_RSHG 220 #define BSIM4v6_MOD_NGCON 221 #define BSIM4v6_MOD_AGIDL 222 #define BSIM4v6_MOD_BGIDL 223 #define BSIM4v6_MOD_EGIDL 224 #define BSIM4v6_MOD_IJTHSFWD 225 #define BSIM4v6_MOD_XJBVD 226 #define BSIM4v6_MOD_XJBVS 227 #define BSIM4v6_MOD_BVD 228 #define BSIM4v6_MOD_BVS 229 #define BSIM4v6_MOD_TOXP 230 #define BSIM4v6_MOD_DTOX 231 #define BSIM4v6_MOD_XRCRG1 232 #define BSIM4v6_MOD_XRCRG2 233 #define BSIM4v6_MOD_EU 234 #define BSIM4v6_MOD_IJTHSREV 235 #define BSIM4v6_MOD_IJTHDREV 236 #define BSIM4v6_MOD_MINV 237 #define BSIM4v6_MOD_VOFFL 238 #define BSIM4v6_MOD_PDITS 239 #define BSIM4v6_MOD_PDITSD 240 #define BSIM4v6_MOD_PDITSL 241 #define BSIM4v6_MOD_TNOIA 242 #define BSIM4v6_MOD_TNOIB 243 #define BSIM4v6_MOD_NTNOI 244 #define BSIM4v6_MOD_FPROUT 245 #define BSIM4v6_MOD_LPEB 246 #define BSIM4v6_MOD_DVTP0 247 #define BSIM4v6_MOD_DVTP1 248 #define BSIM4v6_MOD_CGIDL 249 #define BSIM4v6_MOD_PHIN 250 #define BSIM4v6_MOD_RDSWMIN 251 #define BSIM4v6_MOD_RSW 252 #define BSIM4v6_MOD_RDW 253 #define BSIM4v6_MOD_RDWMIN 254 #define BSIM4v6_MOD_RSWMIN 255 #define BSIM4v6_MOD_NSD 256 #define BSIM4v6_MOD_CKAPPAD 257 #define BSIM4v6_MOD_DMCGT 258 #define BSIM4v6_MOD_AIGC 259 #define BSIM4v6_MOD_BIGC 260 #define BSIM4v6_MOD_CIGC 261 #define BSIM4v6_MOD_AIGBACC 262 #define BSIM4v6_MOD_BIGBACC 263 #define BSIM4v6_MOD_CIGBACC 264 #define BSIM4v6_MOD_AIGBINV 265 #define BSIM4v6_MOD_BIGBINV 266 #define BSIM4v6_MOD_CIGBINV 267 #define BSIM4v6_MOD_NIGC 268 #define BSIM4v6_MOD_NIGBACC 269 #define BSIM4v6_MOD_NIGBINV 270 #define BSIM4v6_MOD_NTOX 271 #define BSIM4v6_MOD_TOXREF 272 #define BSIM4v6_MOD_EIGBINV 273 #define BSIM4v6_MOD_PIGCD 274 #define BSIM4v6_MOD_POXEDGE 275 #define BSIM4v6_MOD_EPSROX 276 #define BSIM4v6_MOD_AIGSD 277 #define BSIM4v6_MOD_BIGSD 278 #define BSIM4v6_MOD_CIGSD 279 #define BSIM4v6_MOD_JSWGS 280 #define BSIM4v6_MOD_JSWGD 281 #define BSIM4v6_MOD_LAMBDA 282 #define BSIM4v6_MOD_VTL 283 #define BSIM4v6_MOD_LC 284 #define BSIM4v6_MOD_XN 285 #define BSIM4v6_MOD_RNOIA 286 #define BSIM4v6_MOD_RNOIB 287 #define BSIM4v6_MOD_VFBSDOFF 288 #define BSIM4v6_MOD_LINTNOI 289 #define BSIM4v6_MOD_UD 290 #define BSIM4v6_MOD_UD1 291 #define BSIM4v6_MOD_UP 292 #define BSIM4v6_MOD_LP 293 #define BSIM4v6_MOD_TVOFF 294 #define BSIM4v6_MOD_TVFBSDOFF 295 #define BSIM4v6_MOD_MINVCV 296 #define BSIM4v6_MOD_VOFFCVL 297 /* Length dependence */ #define BSIM4v6_MOD_LCDSC 301 #define BSIM4v6_MOD_LCDSCB 302 #define BSIM4v6_MOD_LCIT 303 #define BSIM4v6_MOD_LNFACTOR 304 #define BSIM4v6_MOD_LXJ 305 #define BSIM4v6_MOD_LVSAT 306 #define BSIM4v6_MOD_LAT 307 #define BSIM4v6_MOD_LA0 308 #define BSIM4v6_MOD_LA1 309 #define BSIM4v6_MOD_LA2 310 #define BSIM4v6_MOD_LKETA 311 #define BSIM4v6_MOD_LNSUB 312 #define BSIM4v6_MOD_LNDEP 313 #define BSIM4v6_MOD_LNGATE 315 #define BSIM4v6_MOD_LGAMMA1 316 #define BSIM4v6_MOD_LGAMMA2 317 #define BSIM4v6_MOD_LVBX 318 #define BSIM4v6_MOD_LVBM 320 #define BSIM4v6_MOD_LXT 322 #define BSIM4v6_MOD_LK1 325 #define BSIM4v6_MOD_LKT1 326 #define BSIM4v6_MOD_LKT1L 327 #define BSIM4v6_MOD_LK2 328 #define BSIM4v6_MOD_LKT2 329 #define BSIM4v6_MOD_LK3 330 #define BSIM4v6_MOD_LK3B 331 #define BSIM4v6_MOD_LW0 332 #define BSIM4v6_MOD_LLPE0 333 #define BSIM4v6_MOD_LDVT0 334 #define BSIM4v6_MOD_LDVT1 335 #define BSIM4v6_MOD_LDVT2 336 #define BSIM4v6_MOD_LDVT0W 337 #define BSIM4v6_MOD_LDVT1W 338 #define BSIM4v6_MOD_LDVT2W 339 #define BSIM4v6_MOD_LDROUT 340 #define BSIM4v6_MOD_LDSUB 341 #define BSIM4v6_MOD_LVTH0 342 #define BSIM4v6_MOD_LUA 343 #define BSIM4v6_MOD_LUA1 344 #define BSIM4v6_MOD_LUB 345 #define BSIM4v6_MOD_LUB1 346 #define BSIM4v6_MOD_LUC 347 #define BSIM4v6_MOD_LUC1 348 #define BSIM4v6_MOD_LU0 349 #define BSIM4v6_MOD_LUTE 350 #define BSIM4v6_MOD_LVOFF 351 #define BSIM4v6_MOD_LDELTA 352 #define BSIM4v6_MOD_LRDSW 353 #define BSIM4v6_MOD_LPRT 354 #define BSIM4v6_MOD_LLDD 355 #define BSIM4v6_MOD_LETA 356 #define BSIM4v6_MOD_LETA0 357 #define BSIM4v6_MOD_LETAB 358 #define BSIM4v6_MOD_LPCLM 359 #define BSIM4v6_MOD_LPDIBL1 360 #define BSIM4v6_MOD_LPDIBL2 361 #define BSIM4v6_MOD_LPSCBE1 362 #define BSIM4v6_MOD_LPSCBE2 363 #define BSIM4v6_MOD_LPVAG 364 #define BSIM4v6_MOD_LWR 365 #define BSIM4v6_MOD_LDWG 366 #define BSIM4v6_MOD_LDWB 367 #define BSIM4v6_MOD_LB0 368 #define BSIM4v6_MOD_LB1 369 #define BSIM4v6_MOD_LALPHA0 370 #define BSIM4v6_MOD_LBETA0 371 #define BSIM4v6_MOD_LPDIBLB 374 #define BSIM4v6_MOD_LPRWG 375 #define BSIM4v6_MOD_LPRWB 376 #define BSIM4v6_MOD_LCDSCD 377 #define BSIM4v6_MOD_LAGS 378 #define BSIM4v6_MOD_LFRINGE 381 #define BSIM4v6_MOD_LCGSL 383 #define BSIM4v6_MOD_LCGDL 384 #define BSIM4v6_MOD_LCKAPPAS 385 #define BSIM4v6_MOD_LCF 386 #define BSIM4v6_MOD_LCLC 387 #define BSIM4v6_MOD_LCLE 388 #define BSIM4v6_MOD_LVFBCV 389 #define BSIM4v6_MOD_LACDE 390 #define BSIM4v6_MOD_LMOIN 391 #define BSIM4v6_MOD_LNOFF 392 #define BSIM4v6_MOD_LALPHA1 394 #define BSIM4v6_MOD_LVFB 395 #define BSIM4v6_MOD_LVOFFCV 396 #define BSIM4v6_MOD_LAGIDL 397 #define BSIM4v6_MOD_LBGIDL 398 #define BSIM4v6_MOD_LEGIDL 399 #define BSIM4v6_MOD_LXRCRG1 400 #define BSIM4v6_MOD_LXRCRG2 401 #define BSIM4v6_MOD_LEU 402 #define BSIM4v6_MOD_LMINV 403 #define BSIM4v6_MOD_LPDITS 404 #define BSIM4v6_MOD_LPDITSD 405 #define BSIM4v6_MOD_LFPROUT 406 #define BSIM4v6_MOD_LLPEB 407 #define BSIM4v6_MOD_LDVTP0 408 #define BSIM4v6_MOD_LDVTP1 409 #define BSIM4v6_MOD_LCGIDL 410 #define BSIM4v6_MOD_LPHIN 411 #define BSIM4v6_MOD_LRSW 412 #define BSIM4v6_MOD_LRDW 413 #define BSIM4v6_MOD_LNSD 414 #define BSIM4v6_MOD_LCKAPPAD 415 #define BSIM4v6_MOD_LAIGC 416 #define BSIM4v6_MOD_LBIGC 417 #define BSIM4v6_MOD_LCIGC 418 #define BSIM4v6_MOD_LAIGBACC 419 #define BSIM4v6_MOD_LBIGBACC 420 #define BSIM4v6_MOD_LCIGBACC 421 #define BSIM4v6_MOD_LAIGBINV 422 #define BSIM4v6_MOD_LBIGBINV 423 #define BSIM4v6_MOD_LCIGBINV 424 #define BSIM4v6_MOD_LNIGC 425 #define BSIM4v6_MOD_LNIGBACC 426 #define BSIM4v6_MOD_LNIGBINV 427 #define BSIM4v6_MOD_LNTOX 428 #define BSIM4v6_MOD_LEIGBINV 429 #define BSIM4v6_MOD_LPIGCD 430 #define BSIM4v6_MOD_LPOXEDGE 431 #define BSIM4v6_MOD_LAIGSD 432 #define BSIM4v6_MOD_LBIGSD 433 #define BSIM4v6_MOD_LCIGSD 434 #define BSIM4v6_MOD_LLAMBDA 435 #define BSIM4v6_MOD_LVTL 436 #define BSIM4v6_MOD_LXN 437 #define BSIM4v6_MOD_LVFBSDOFF 438 #define BSIM4v6_MOD_LUD 439 #define BSIM4v6_MOD_LUD1 440 #define BSIM4v6_MOD_LUP 441 #define BSIM4v6_MOD_LLP 442 #define BSIM4v6_MOD_LMINVCV 443 /* Width dependence */ #define BSIM4v6_MOD_WCDSC 481 #define BSIM4v6_MOD_WCDSCB 482 #define BSIM4v6_MOD_WCIT 483 #define BSIM4v6_MOD_WNFACTOR 484 #define BSIM4v6_MOD_WXJ 485 #define BSIM4v6_MOD_WVSAT 486 #define BSIM4v6_MOD_WAT 487 #define BSIM4v6_MOD_WA0 488 #define BSIM4v6_MOD_WA1 489 #define BSIM4v6_MOD_WA2 490 #define BSIM4v6_MOD_WKETA 491 #define BSIM4v6_MOD_WNSUB 492 #define BSIM4v6_MOD_WNDEP 493 #define BSIM4v6_MOD_WNGATE 495 #define BSIM4v6_MOD_WGAMMA1 496 #define BSIM4v6_MOD_WGAMMA2 497 #define BSIM4v6_MOD_WVBX 498 #define BSIM4v6_MOD_WVBM 500 #define BSIM4v6_MOD_WXT 502 #define BSIM4v6_MOD_WK1 505 #define BSIM4v6_MOD_WKT1 506 #define BSIM4v6_MOD_WKT1L 507 #define BSIM4v6_MOD_WK2 508 #define BSIM4v6_MOD_WKT2 509 #define BSIM4v6_MOD_WK3 510 #define BSIM4v6_MOD_WK3B 511 #define BSIM4v6_MOD_WW0 512 #define BSIM4v6_MOD_WLPE0 513 #define BSIM4v6_MOD_WDVT0 514 #define BSIM4v6_MOD_WDVT1 515 #define BSIM4v6_MOD_WDVT2 516 #define BSIM4v6_MOD_WDVT0W 517 #define BSIM4v6_MOD_WDVT1W 518 #define BSIM4v6_MOD_WDVT2W 519 #define BSIM4v6_MOD_WDROUT 520 #define BSIM4v6_MOD_WDSUB 521 #define BSIM4v6_MOD_WVTH0 522 #define BSIM4v6_MOD_WUA 523 #define BSIM4v6_MOD_WUA1 524 #define BSIM4v6_MOD_WUB 525 #define BSIM4v6_MOD_WUB1 526 #define BSIM4v6_MOD_WUC 527 #define BSIM4v6_MOD_WUC1 528 #define BSIM4v6_MOD_WU0 529 #define BSIM4v6_MOD_WUTE 530 #define BSIM4v6_MOD_WVOFF 531 #define BSIM4v6_MOD_WDELTA 532 #define BSIM4v6_MOD_WRDSW 533 #define BSIM4v6_MOD_WPRT 534 #define BSIM4v6_MOD_WLDD 535 #define BSIM4v6_MOD_WETA 536 #define BSIM4v6_MOD_WETA0 537 #define BSIM4v6_MOD_WETAB 538 #define BSIM4v6_MOD_WPCLM 539 #define BSIM4v6_MOD_WPDIBL1 540 #define BSIM4v6_MOD_WPDIBL2 541 #define BSIM4v6_MOD_WPSCBE1 542 #define BSIM4v6_MOD_WPSCBE2 543 #define BSIM4v6_MOD_WPVAG 544 #define BSIM4v6_MOD_WWR 545 #define BSIM4v6_MOD_WDWG 546 #define BSIM4v6_MOD_WDWB 547 #define BSIM4v6_MOD_WB0 548 #define BSIM4v6_MOD_WB1 549 #define BSIM4v6_MOD_WALPHA0 550 #define BSIM4v6_MOD_WBETA0 551 #define BSIM4v6_MOD_WPDIBLB 554 #define BSIM4v6_MOD_WPRWG 555 #define BSIM4v6_MOD_WPRWB 556 #define BSIM4v6_MOD_WCDSCD 557 #define BSIM4v6_MOD_WAGS 558 #define BSIM4v6_MOD_WFRINGE 561 #define BSIM4v6_MOD_WCGSL 563 #define BSIM4v6_MOD_WCGDL 564 #define BSIM4v6_MOD_WCKAPPAS 565 #define BSIM4v6_MOD_WCF 566 #define BSIM4v6_MOD_WCLC 567 #define BSIM4v6_MOD_WCLE 568 #define BSIM4v6_MOD_WVFBCV 569 #define BSIM4v6_MOD_WACDE 570 #define BSIM4v6_MOD_WMOIN 571 #define BSIM4v6_MOD_WNOFF 572 #define BSIM4v6_MOD_WALPHA1 574 #define BSIM4v6_MOD_WVFB 575 #define BSIM4v6_MOD_WVOFFCV 576 #define BSIM4v6_MOD_WAGIDL 577 #define BSIM4v6_MOD_WBGIDL 578 #define BSIM4v6_MOD_WEGIDL 579 #define BSIM4v6_MOD_WXRCRG1 580 #define BSIM4v6_MOD_WXRCRG2 581 #define BSIM4v6_MOD_WEU 582 #define BSIM4v6_MOD_WMINV 583 #define BSIM4v6_MOD_WPDITS 584 #define BSIM4v6_MOD_WPDITSD 585 #define BSIM4v6_MOD_WFPROUT 586 #define BSIM4v6_MOD_WLPEB 587 #define BSIM4v6_MOD_WDVTP0 588 #define BSIM4v6_MOD_WDVTP1 589 #define BSIM4v6_MOD_WCGIDL 590 #define BSIM4v6_MOD_WPHIN 591 #define BSIM4v6_MOD_WRSW 592 #define BSIM4v6_MOD_WRDW 593 #define BSIM4v6_MOD_WNSD 594 #define BSIM4v6_MOD_WCKAPPAD 595 #define BSIM4v6_MOD_WAIGC 596 #define BSIM4v6_MOD_WBIGC 597 #define BSIM4v6_MOD_WCIGC 598 #define BSIM4v6_MOD_WAIGBACC 599 #define BSIM4v6_MOD_WBIGBACC 600 #define BSIM4v6_MOD_WCIGBACC 601 #define BSIM4v6_MOD_WAIGBINV 602 #define BSIM4v6_MOD_WBIGBINV 603 #define BSIM4v6_MOD_WCIGBINV 604 #define BSIM4v6_MOD_WNIGC 605 #define BSIM4v6_MOD_WNIGBACC 606 #define BSIM4v6_MOD_WNIGBINV 607 #define BSIM4v6_MOD_WNTOX 608 #define BSIM4v6_MOD_WEIGBINV 609 #define BSIM4v6_MOD_WPIGCD 610 #define BSIM4v6_MOD_WPOXEDGE 611 #define BSIM4v6_MOD_WAIGSD 612 #define BSIM4v6_MOD_WBIGSD 613 #define BSIM4v6_MOD_WCIGSD 614 #define BSIM4v6_MOD_WLAMBDA 615 #define BSIM4v6_MOD_WVTL 616 #define BSIM4v6_MOD_WXN 617 #define BSIM4v6_MOD_WVFBSDOFF 618 #define BSIM4v6_MOD_WUD 619 #define BSIM4v6_MOD_WUD1 620 #define BSIM4v6_MOD_WUP 621 #define BSIM4v6_MOD_WLP 622 #define BSIM4v6_MOD_WMINVCV 623 /* Cross-term dependence */ #define BSIM4v6_MOD_PCDSC 661 #define BSIM4v6_MOD_PCDSCB 662 #define BSIM4v6_MOD_PCIT 663 #define BSIM4v6_MOD_PNFACTOR 664 #define BSIM4v6_MOD_PXJ 665 #define BSIM4v6_MOD_PVSAT 666 #define BSIM4v6_MOD_PAT 667 #define BSIM4v6_MOD_PA0 668 #define BSIM4v6_MOD_PA1 669 #define BSIM4v6_MOD_PA2 670 #define BSIM4v6_MOD_PKETA 671 #define BSIM4v6_MOD_PNSUB 672 #define BSIM4v6_MOD_PNDEP 673 #define BSIM4v6_MOD_PNGATE 675 #define BSIM4v6_MOD_PGAMMA1 676 #define BSIM4v6_MOD_PGAMMA2 677 #define BSIM4v6_MOD_PVBX 678 #define BSIM4v6_MOD_PVBM 680 #define BSIM4v6_MOD_PXT 682 #define BSIM4v6_MOD_PK1 685 #define BSIM4v6_MOD_PKT1 686 #define BSIM4v6_MOD_PKT1L 687 #define BSIM4v6_MOD_PK2 688 #define BSIM4v6_MOD_PKT2 689 #define BSIM4v6_MOD_PK3 690 #define BSIM4v6_MOD_PK3B 691 #define BSIM4v6_MOD_PW0 692 #define BSIM4v6_MOD_PLPE0 693 #define BSIM4v6_MOD_PDVT0 694 #define BSIM4v6_MOD_PDVT1 695 #define BSIM4v6_MOD_PDVT2 696 #define BSIM4v6_MOD_PDVT0W 697 #define BSIM4v6_MOD_PDVT1W 698 #define BSIM4v6_MOD_PDVT2W 699 #define BSIM4v6_MOD_PDROUT 700 #define BSIM4v6_MOD_PDSUB 701 #define BSIM4v6_MOD_PVTH0 702 #define BSIM4v6_MOD_PUA 703 #define BSIM4v6_MOD_PUA1 704 #define BSIM4v6_MOD_PUB 705 #define BSIM4v6_MOD_PUB1 706 #define BSIM4v6_MOD_PUC 707 #define BSIM4v6_MOD_PUC1 708 #define BSIM4v6_MOD_PU0 709 #define BSIM4v6_MOD_PUTE 710 #define BSIM4v6_MOD_PVOFF 711 #define BSIM4v6_MOD_PDELTA 712 #define BSIM4v6_MOD_PRDSW 713 #define BSIM4v6_MOD_PPRT 714 #define BSIM4v6_MOD_PLDD 715 #define BSIM4v6_MOD_PETA 716 #define BSIM4v6_MOD_PETA0 717 #define BSIM4v6_MOD_PETAB 718 #define BSIM4v6_MOD_PPCLM 719 #define BSIM4v6_MOD_PPDIBL1 720 #define BSIM4v6_MOD_PPDIBL2 721 #define BSIM4v6_MOD_PPSCBE1 722 #define BSIM4v6_MOD_PPSCBE2 723 #define BSIM4v6_MOD_PPVAG 724 #define BSIM4v6_MOD_PWR 725 #define BSIM4v6_MOD_PDWG 726 #define BSIM4v6_MOD_PDWB 727 #define BSIM4v6_MOD_PB0 728 #define BSIM4v6_MOD_PB1 729 #define BSIM4v6_MOD_PALPHA0 730 #define BSIM4v6_MOD_PBETA0 731 #define BSIM4v6_MOD_PPDIBLB 734 #define BSIM4v6_MOD_PPRWG 735 #define BSIM4v6_MOD_PPRWB 736 #define BSIM4v6_MOD_PCDSCD 737 #define BSIM4v6_MOD_PAGS 738 #define BSIM4v6_MOD_PFRINGE 741 #define BSIM4v6_MOD_PCGSL 743 #define BSIM4v6_MOD_PCGDL 744 #define BSIM4v6_MOD_PCKAPPAS 745 #define BSIM4v6_MOD_PCF 746 #define BSIM4v6_MOD_PCLC 747 #define BSIM4v6_MOD_PCLE 748 #define BSIM4v6_MOD_PVFBCV 749 #define BSIM4v6_MOD_PACDE 750 #define BSIM4v6_MOD_PMOIN 751 #define BSIM4v6_MOD_PNOFF 752 #define BSIM4v6_MOD_PALPHA1 754 #define BSIM4v6_MOD_PVFB 755 #define BSIM4v6_MOD_PVOFFCV 756 #define BSIM4v6_MOD_PAGIDL 757 #define BSIM4v6_MOD_PBGIDL 758 #define BSIM4v6_MOD_PEGIDL 759 #define BSIM4v6_MOD_PXRCRG1 760 #define BSIM4v6_MOD_PXRCRG2 761 #define BSIM4v6_MOD_PEU 762 #define BSIM4v6_MOD_PMINV 763 #define BSIM4v6_MOD_PPDITS 764 #define BSIM4v6_MOD_PPDITSD 765 #define BSIM4v6_MOD_PFPROUT 766 #define BSIM4v6_MOD_PLPEB 767 #define BSIM4v6_MOD_PDVTP0 768 #define BSIM4v6_MOD_PDVTP1 769 #define BSIM4v6_MOD_PCGIDL 770 #define BSIM4v6_MOD_PPHIN 771 #define BSIM4v6_MOD_PRSW 772 #define BSIM4v6_MOD_PRDW 773 #define BSIM4v6_MOD_PNSD 774 #define BSIM4v6_MOD_PCKAPPAD 775 #define BSIM4v6_MOD_PAIGC 776 #define BSIM4v6_MOD_PBIGC 777 #define BSIM4v6_MOD_PCIGC 778 #define BSIM4v6_MOD_PAIGBACC 779 #define BSIM4v6_MOD_PBIGBACC 780 #define BSIM4v6_MOD_PCIGBACC 781 #define BSIM4v6_MOD_PAIGBINV 782 #define BSIM4v6_MOD_PBIGBINV 783 #define BSIM4v6_MOD_PCIGBINV 784 #define BSIM4v6_MOD_PNIGC 785 #define BSIM4v6_MOD_PNIGBACC 786 #define BSIM4v6_MOD_PNIGBINV 787 #define BSIM4v6_MOD_PNTOX 788 #define BSIM4v6_MOD_PEIGBINV 789 #define BSIM4v6_MOD_PPIGCD 790 #define BSIM4v6_MOD_PPOXEDGE 791 #define BSIM4v6_MOD_PAIGSD 792 #define BSIM4v6_MOD_PBIGSD 793 #define BSIM4v6_MOD_PCIGSD 794 #define BSIM4v6_MOD_SAREF 795 #define BSIM4v6_MOD_SBREF 796 #define BSIM4v6_MOD_KU0 797 #define BSIM4v6_MOD_KVSAT 798 #define BSIM4v6_MOD_TKU0 799 #define BSIM4v6_MOD_LLODKU0 800 #define BSIM4v6_MOD_WLODKU0 801 #define BSIM4v6_MOD_LLODVTH 802 #define BSIM4v6_MOD_WLODVTH 803 #define BSIM4v6_MOD_LKU0 804 #define BSIM4v6_MOD_WKU0 805 #define BSIM4v6_MOD_PKU0 806 #define BSIM4v6_MOD_KVTH0 807 #define BSIM4v6_MOD_LKVTH0 808 #define BSIM4v6_MOD_WKVTH0 809 #define BSIM4v6_MOD_PKVTH0 810 #define BSIM4v6_MOD_WLOD 811 #define BSIM4v6_MOD_STK2 812 #define BSIM4v6_MOD_LODK2 813 #define BSIM4v6_MOD_STETA0 814 #define BSIM4v6_MOD_LODETA0 815 #define BSIM4v6_MOD_WEB 816 #define BSIM4v6_MOD_WEC 817 #define BSIM4v6_MOD_KVTH0WE 818 #define BSIM4v6_MOD_K2WE 819 #define BSIM4v6_MOD_KU0WE 820 #define BSIM4v6_MOD_SCREF 821 #define BSIM4v6_MOD_WPEMOD 822 #define BSIM4v6_MOD_PMINVCV 823 #define BSIM4v6_MOD_PLAMBDA 825 #define BSIM4v6_MOD_PVTL 826 #define BSIM4v6_MOD_PXN 827 #define BSIM4v6_MOD_PVFBSDOFF 828 #define BSIM4v6_MOD_TNOM 831 #define BSIM4v6_MOD_CGSO 832 #define BSIM4v6_MOD_CGDO 833 #define BSIM4v6_MOD_CGBO 834 #define BSIM4v6_MOD_XPART 835 #define BSIM4v6_MOD_RSH 836 #define BSIM4v6_MOD_JSS 837 #define BSIM4v6_MOD_PBS 838 #define BSIM4v6_MOD_MJS 839 #define BSIM4v6_MOD_PBSWS 840 #define BSIM4v6_MOD_MJSWS 841 #define BSIM4v6_MOD_CJS 842 #define BSIM4v6_MOD_CJSWS 843 #define BSIM4v6_MOD_NMOS 844 #define BSIM4v6_MOD_PMOS 845 #define BSIM4v6_MOD_NOIA 846 #define BSIM4v6_MOD_NOIB 847 #define BSIM4v6_MOD_NOIC 848 #define BSIM4v6_MOD_LINT 849 #define BSIM4v6_MOD_LL 850 #define BSIM4v6_MOD_LLN 851 #define BSIM4v6_MOD_LW 852 #define BSIM4v6_MOD_LWN 853 #define BSIM4v6_MOD_LWL 854 #define BSIM4v6_MOD_LMIN 855 #define BSIM4v6_MOD_LMAX 856 #define BSIM4v6_MOD_WINT 857 #define BSIM4v6_MOD_WL 858 #define BSIM4v6_MOD_WLN 859 #define BSIM4v6_MOD_WW 860 #define BSIM4v6_MOD_WWN 861 #define BSIM4v6_MOD_WWL 862 #define BSIM4v6_MOD_WMIN 863 #define BSIM4v6_MOD_WMAX 864 #define BSIM4v6_MOD_DWC 865 #define BSIM4v6_MOD_DLC 866 #define BSIM4v6_MOD_XL 867 #define BSIM4v6_MOD_XW 868 #define BSIM4v6_MOD_EM 869 #define BSIM4v6_MOD_EF 870 #define BSIM4v6_MOD_AF 871 #define BSIM4v6_MOD_KF 872 #define BSIM4v6_MOD_NJS 873 #define BSIM4v6_MOD_XTIS 874 #define BSIM4v6_MOD_PBSWGS 875 #define BSIM4v6_MOD_MJSWGS 876 #define BSIM4v6_MOD_CJSWGS 877 #define BSIM4v6_MOD_JSWS 878 #define BSIM4v6_MOD_LLC 879 #define BSIM4v6_MOD_LWC 880 #define BSIM4v6_MOD_LWLC 881 #define BSIM4v6_MOD_WLC 882 #define BSIM4v6_MOD_WWC 883 #define BSIM4v6_MOD_WWLC 884 #define BSIM4v6_MOD_DWJ 885 #define BSIM4v6_MOD_JSD 886 #define BSIM4v6_MOD_PBD 887 #define BSIM4v6_MOD_MJD 888 #define BSIM4v6_MOD_PBSWD 889 #define BSIM4v6_MOD_MJSWD 890 #define BSIM4v6_MOD_CJD 891 #define BSIM4v6_MOD_CJSWD 892 #define BSIM4v6_MOD_NJD 893 #define BSIM4v6_MOD_XTID 894 #define BSIM4v6_MOD_PBSWGD 895 #define BSIM4v6_MOD_MJSWGD 896 #define BSIM4v6_MOD_CJSWGD 897 #define BSIM4v6_MOD_JSWD 898 #define BSIM4v6_MOD_DLCIG 899 /* trap-assisted tunneling */ #define BSIM4v6_MOD_JTSS 900 #define BSIM4v6_MOD_JTSD 901 #define BSIM4v6_MOD_JTSSWS 902 #define BSIM4v6_MOD_JTSSWD 903 #define BSIM4v6_MOD_JTSSWGS 904 #define BSIM4v6_MOD_JTSSWGD 905 #define BSIM4v6_MOD_NJTS 906 #define BSIM4v6_MOD_NJTSSW 907 #define BSIM4v6_MOD_NJTSSWG 908 #define BSIM4v6_MOD_XTSS 909 #define BSIM4v6_MOD_XTSD 910 #define BSIM4v6_MOD_XTSSWS 911 #define BSIM4v6_MOD_XTSSWD 912 #define BSIM4v6_MOD_XTSSWGS 913 #define BSIM4v6_MOD_XTSSWGD 914 #define BSIM4v6_MOD_TNJTS 915 #define BSIM4v6_MOD_TNJTSSW 916 #define BSIM4v6_MOD_TNJTSSWG 917 #define BSIM4v6_MOD_VTSS 918 #define BSIM4v6_MOD_VTSD 919 #define BSIM4v6_MOD_VTSSWS 920 #define BSIM4v6_MOD_VTSSWD 921 #define BSIM4v6_MOD_VTSSWGS 922 #define BSIM4v6_MOD_VTSSWGD 923 #define BSIM4v6_MOD_PUD 924 #define BSIM4v6_MOD_PUD1 925 #define BSIM4v6_MOD_PUP 926 #define BSIM4v6_MOD_PLP 927 #define BSIM4v6_MOD_JTWEFF 928 /* device questions */ #define BSIM4v6_DNODE 945 #define BSIM4v6_GNODEEXT 946 #define BSIM4v6_SNODE 947 #define BSIM4v6_BNODE 948 #define BSIM4v6_DNODEPRIME 949 #define BSIM4v6_GNODEPRIME 950 #define BSIM4v6_GNODEMIDE 951 #define BSIM4v6_GNODEMID 952 #define BSIM4v6_SNODEPRIME 953 #define BSIM4v6_BNODEPRIME 954 #define BSIM4v6_DBNODE 955 #define BSIM4v6_SBNODE 956 #define BSIM4v6_VBD 957 #define BSIM4v6_VBS 958 #define BSIM4v6_VGS 959 #define BSIM4v6_VDS 960 #define BSIM4v6_CD 961 #define BSIM4v6_CBS 962 #define BSIM4v6_CBD 963 #define BSIM4v6_GM 964 #define BSIM4v6_GDS 965 #define BSIM4v6_GMBS 966 #define BSIM4v6_GBD 967 #define BSIM4v6_GBS 968 #define BSIM4v6_QB 969 #define BSIM4v6_CQB 970 #define BSIM4v6_QG 971 #define BSIM4v6_CQG 972 #define BSIM4v6_QD 973 #define BSIM4v6_CQD 974 #define BSIM4v6_CGGB 975 #define BSIM4v6_CGDB 976 #define BSIM4v6_CGSB 977 #define BSIM4v6_CBGB 978 #define BSIM4v6_CAPBD 979 #define BSIM4v6_CQBD 980 #define BSIM4v6_CAPBS 981 #define BSIM4v6_CQBS 982 #define BSIM4v6_CDGB 983 #define BSIM4v6_CDDB 984 #define BSIM4v6_CDSB 985 #define BSIM4v6_VON 986 #define BSIM4v6_VDSAT 987 #define BSIM4v6_QBS 988 #define BSIM4v6_QBD 989 #define BSIM4v6_SOURCECONDUCT 990 #define BSIM4v6_DRAINCONDUCT 991 #define BSIM4v6_CBDB 992 #define BSIM4v6_CBSB 993 #define BSIM4v6_CSUB 994 #define BSIM4v6_QINV 995 #define BSIM4v6_IGIDL 996 #define BSIM4v6_CSGB 997 #define BSIM4v6_CSDB 998 #define BSIM4v6_CSSB 999 #define BSIM4v6_CGBB 1000 #define BSIM4v6_CDBB 1001 #define BSIM4v6_CSBB 1002 #define BSIM4v6_CBBB 1003 #define BSIM4v6_QS 1004 #define BSIM4v6_IGISL 1005 #define BSIM4v6_IGS 1006 #define BSIM4v6_IGD 1007 #define BSIM4v6_IGB 1008 #define BSIM4v6_IGCS 1009 #define BSIM4v6_IGCD 1010 #define BSIM4v6_QDEF 1011 #define BSIM4v6_DELVT0 1012 #define BSIM4v6_GCRG 1013 #define BSIM4v6_GTAU 1014 #define BSIM4v6_MOD_LTVOFF 1051 #define BSIM4v6_MOD_LTVFBSDOFF 1052 #define BSIM4v6_MOD_WTVOFF 1053 #define BSIM4v6_MOD_WTVFBSDOFF 1054 #define BSIM4v6_MOD_PTVOFF 1055 #define BSIM4v6_MOD_PTVFBSDOFF 1056 #define BSIM4v6_MOD_LKVTH0WE 1061 #define BSIM4v6_MOD_LK2WE 1062 #define BSIM4v6_MOD_LKU0WE 1063 #define BSIM4v6_MOD_WKVTH0WE 1064 #define BSIM4v6_MOD_WK2WE 1065 #define BSIM4v6_MOD_WKU0WE 1066 #define BSIM4v6_MOD_PKVTH0WE 1067 #define BSIM4v6_MOD_PK2WE 1068 #define BSIM4v6_MOD_PKU0WE 1069 #define BSIM4v6_MOD_RBPS0 1101 #define BSIM4v6_MOD_RBPSL 1102 #define BSIM4v6_MOD_RBPSW 1103 #define BSIM4v6_MOD_RBPSNF 1104 #define BSIM4v6_MOD_RBPD0 1105 #define BSIM4v6_MOD_RBPDL 1106 #define BSIM4v6_MOD_RBPDW 1107 #define BSIM4v6_MOD_RBPDNF 1108 #define BSIM4v6_MOD_RBPBX0 1109 #define BSIM4v6_MOD_RBPBXL 1110 #define BSIM4v6_MOD_RBPBXW 1111 #define BSIM4v6_MOD_RBPBXNF 1112 #define BSIM4v6_MOD_RBPBY0 1113 #define BSIM4v6_MOD_RBPBYL 1114 #define BSIM4v6_MOD_RBPBYW 1115 #define BSIM4v6_MOD_RBPBYNF 1116 #define BSIM4v6_MOD_RBSBX0 1117 #define BSIM4v6_MOD_RBSBY0 1118 #define BSIM4v6_MOD_RBDBX0 1119 #define BSIM4v6_MOD_RBDBY0 1120 #define BSIM4v6_MOD_RBSDBXL 1121 #define BSIM4v6_MOD_RBSDBXW 1122 #define BSIM4v6_MOD_RBSDBXNF 1123 #define BSIM4v6_MOD_RBSDBYL 1124 #define BSIM4v6_MOD_RBSDBYW 1125 #define BSIM4v6_MOD_RBSDBYNF 1126 #define BSIM4v6_MOD_AGISL 1200 #define BSIM4v6_MOD_BGISL 1201 #define BSIM4v6_MOD_EGISL 1202 #define BSIM4v6_MOD_CGISL 1203 #define BSIM4v6_MOD_LAGISL 1204 #define BSIM4v6_MOD_LBGISL 1205 #define BSIM4v6_MOD_LEGISL 1206 #define BSIM4v6_MOD_LCGISL 1207 #define BSIM4v6_MOD_WAGISL 1208 #define BSIM4v6_MOD_WBGISL 1209 #define BSIM4v6_MOD_WEGISL 1210 #define BSIM4v6_MOD_WCGISL 1211 #define BSIM4v6_MOD_PAGISL 1212 #define BSIM4v6_MOD_PBGISL 1213 #define BSIM4v6_MOD_PEGISL 1214 #define BSIM4v6_MOD_PCGISL 1215 #define BSIM4v6_MOD_AIGS 1220 #define BSIM4v6_MOD_BIGS 1221 #define BSIM4v6_MOD_CIGS 1222 #define BSIM4v6_MOD_LAIGS 1223 #define BSIM4v6_MOD_LBIGS 1224 #define BSIM4v6_MOD_LCIGS 1225 #define BSIM4v6_MOD_WAIGS 1226 #define BSIM4v6_MOD_WBIGS 1227 #define BSIM4v6_MOD_WCIGS 1228 #define BSIM4v6_MOD_PAIGS 1229 #define BSIM4v6_MOD_PBIGS 1230 #define BSIM4v6_MOD_PCIGS 1231 #define BSIM4v6_MOD_AIGD 1232 #define BSIM4v6_MOD_BIGD 1233 #define BSIM4v6_MOD_CIGD 1234 #define BSIM4v6_MOD_LAIGD 1235 #define BSIM4v6_MOD_LBIGD 1236 #define BSIM4v6_MOD_LCIGD 1237 #define BSIM4v6_MOD_WAIGD 1238 #define BSIM4v6_MOD_WBIGD 1239 #define BSIM4v6_MOD_WCIGD 1240 #define BSIM4v6_MOD_PAIGD 1241 #define BSIM4v6_MOD_PBIGD 1242 #define BSIM4v6_MOD_PCIGD 1243 #define BSIM4v6_MOD_DLCIGD 1244 #define BSIM4v6_MOD_NJTSD 1250 #define BSIM4v6_MOD_NJTSSWD 1251 #define BSIM4v6_MOD_NJTSSWGD 1252 #define BSIM4v6_MOD_TNJTSD 1253 #define BSIM4v6_MOD_TNJTSSWD 1254 #define BSIM4v6_MOD_TNJTSSWGD 1255 #define BSIM4v6_MOD_VGS_MAX 1301 #define BSIM4v6_MOD_VGD_MAX 1302 #define BSIM4v6_MOD_VGB_MAX 1303 #define BSIM4v6_MOD_VDS_MAX 1304 #define BSIM4v6_MOD_VBS_MAX 1305 #define BSIM4v6_MOD_VBD_MAX 1306 #define BSIM4v6_MOD_VGSR_MAX 1307 #define BSIM4v6_MOD_VGDR_MAX 1308 #define BSIM4v6_MOD_VGBR_MAX 1309 #define BSIM4v6_MOD_VBSR_MAX 1310 #define BSIM4v6_MOD_VBDR_MAX 1311 #include "bsim4v6ext.h" extern void BSIM4v6evaluate(double,double,double,BSIM4v6instance*,BSIM4v6model*, double*,double*,double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, CKTcircuit*); extern int BSIM4v6debug(BSIM4v6model*, BSIM4v6instance*, CKTcircuit*, int); extern int BSIM4v6checkModel(BSIM4v6model*, BSIM4v6instance*, CKTcircuit*); extern int BSIM4v6PAeffGeo(double, int, int, double, double, double, double, double *, double *, double *, double *); extern int BSIM4v6RdseffGeo(double, int, int, int, double, double, double, double, double, int, double *); #endif /*BSIM4v6*/ tmpk8ny_4pz/src/spicelib/devices/bsim4v6/b4v6noi.c0000644000175000017500000006744613546075722022131 0ustar carstencarsten/**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008 ****/ /**** BSIM4.6.4 Update ngspice 08/22/2009 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4noi.c of BSIM4.6.2. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Authors: 2008- Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, 07/29/2005. * Modified by Mohan Dunga, 12/13/2006 * Modified by Wenwei Yang, 07/31/2008. **********/ #include "ngspice/ngspice.h" #include "bsim4v6def.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" #include "ngspice/const.h" /* * WDL: 1/f noise model has been smoothed out and enhanced with * bulk charge effect as well as physical N* equ. and necessary * conversion into the SI unit system. */ static double Eval1ovFNoise(double Vds, BSIM4v6model *model, BSIM4v6instance *here, double freq, double temp) { struct bsim4v6SizeDependParam *pParam; double cd, esat, DelClm, EffFreq, N0, Nl, Leff, Leffsq; double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi; pParam = here->pParam; cd = fabs(here->BSIM4v6cd); Leff = pParam->BSIM4v6leff - 2.0 * model->BSIM4v6lintnoi; Leffsq = Leff * Leff; esat = 2.0 * here->BSIM4v6vsattemp / here->BSIM4v6ueff; if(model->BSIM4v6em<=0.0) DelClm = 0.0; /* flicker noise modified -JX */ else { T0 = ((((Vds - here->BSIM4v6Vdseff) / pParam->BSIM4v6litl) + model->BSIM4v6em) / esat); DelClm = pParam->BSIM4v6litl * log (MAX(T0, N_MINLOG)); if (DelClm < 0.0) DelClm = 0.0; /* bugfix */ } EffFreq = pow(freq, model->BSIM4v6ef); T1 = CHARGE * CHARGE * CONSTboltz * cd * temp * here->BSIM4v6ueff; T2 = 1.0e10 * EffFreq * here->BSIM4v6Abulk * model->BSIM4v6coxe * Leffsq; N0 = model->BSIM4v6coxe * here->BSIM4v6Vgsteff / CHARGE; Nl = model->BSIM4v6coxe * here->BSIM4v6Vgsteff * (1.0 - here->BSIM4v6AbovVgst2Vtm * here->BSIM4v6Vdseff) / CHARGE; T3 = model->BSIM4v6oxideTrapDensityA * log(MAX(((N0 + here->BSIM4v6nstar) / (Nl + here->BSIM4v6nstar)), N_MINLOG)); T4 = model->BSIM4v6oxideTrapDensityB * (N0 - Nl); T5 = model->BSIM4v6oxideTrapDensityC * 0.5 * (N0 * N0 - Nl * Nl); T6 = CONSTboltz * temp * cd * cd; T7 = 1.0e10 * EffFreq * Leffsq * pParam->BSIM4v6weff * here->BSIM4v6nf; T8 = model->BSIM4v6oxideTrapDensityA + model->BSIM4v6oxideTrapDensityB * Nl + model->BSIM4v6oxideTrapDensityC * Nl * Nl; T9 = (Nl + here->BSIM4v6nstar) * (Nl + here->BSIM4v6nstar); Ssi = T1 / T2 * (T3 + T4 + T5) + T6 / T7 * DelClm * T8 / T9; return Ssi; } int BSIM4v6noise( int mode, int operation, GENmodel *inModel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; BSIM4v6model *model = (BSIM4v6model *)inModel; BSIM4v6instance *here; struct bsim4v6SizeDependParam *pParam; double tempOnoise; double tempInoise; double noizDens[BSIM4v6NSRCS]; double lnNdens[BSIM4v6NSRCS]; double T0, T1, T2, T5, T10, T11; double Vds, Ssi, Swi; double tmp=0.0, gdpr, gspr, npart_theta=0.0, npart_beta=0.0, igsquare, bodymode; double m; int i; /* define the names of the noise sources */ static char *BSIM4v6nNames[BSIM4v6NSRCS] = { /* Note that we have to keep the order */ ".rd", /* noise due to rd */ ".rs", /* noise due to rs */ ".rg", /* noise due to rgeltd */ ".rbps", /* noise due to rbps */ ".rbpd", /* noise due to rbpd */ ".rbpb", /* noise due to rbpb */ ".rbsb", /* noise due to rbsb */ ".rbdb", /* noise due to rbdb */ ".id", /* noise due to id */ ".1overf", /* flicker (1/f) noise */ ".igs", /* shot noise due to IGS */ ".igd", /* shot noise due to IGD */ ".igb", /* shot noise due to IGB */ "" /* total transistor noise */ }; for (; model != NULL; model = BSIM4v6nextModel(model)) { for (here = BSIM4v6instances(model); here != NULL; here = BSIM4v6nextInstance(here)) { pParam = here->pParam; switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i = 0; i < BSIM4v6NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise.%s%s", here->BSIM4v6name, BSIM4v6nNames[i]); } break; case INT_NOIZ: for (i = 0; i < BSIM4v6NSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total.%s%s", here->BSIM4v6name, BSIM4v6nNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total.%s%s", here->BSIM4v6name, BSIM4v6nNames[i]); } break; } } break; case N_CALC: m = here->BSIM4v6m; switch (mode) { case N_DENS: if (model->BSIM4v6tnoiMod == 0) { if (model->BSIM4v6rdsMod == 0) { gspr = here->BSIM4v6sourceConductance; gdpr = here->BSIM4v6drainConductance; if (here->BSIM4v6grdsw > 0.0) tmp = 1.0 / here->BSIM4v6grdsw; /* tmp used below */ else tmp = 0.0; } else { gspr = here->BSIM4v6gstot; gdpr = here->BSIM4v6gdtot; tmp = 0.0; } } else { T5 = here->BSIM4v6Vgsteff / here->BSIM4v6EsatL; T5 *= T5; npart_beta = model->BSIM4v6rnoia * (1.0 + T5 * model->BSIM4v6tnoia * pParam->BSIM4v6leff); npart_theta = model->BSIM4v6rnoib * (1.0 + T5 * model->BSIM4v6tnoib * pParam->BSIM4v6leff); if(npart_theta > 0.9) npart_theta = 0.9; if(npart_theta > 0.9 * npart_beta) npart_theta = 0.9 * npart_beta; //4.6.2 if (model->BSIM4v6rdsMod == 0) { gspr = here->BSIM4v6sourceConductance; gdpr = here->BSIM4v6drainConductance; } else { gspr = here->BSIM4v6gstot; gdpr = here->BSIM4v6gdtot; } if ((*(ckt->CKTstates[0] + here->BSIM4v6vds)) >= 0.0) gspr = gspr * (1.0 + npart_theta * npart_theta * gspr / here->BSIM4v6IdovVds); /* bugfix */ else gdpr = gdpr * (1.0 + npart_theta * npart_theta * gdpr / here->BSIM4v6IdovVds); } NevalSrc(&noizDens[BSIM4v6RDNOIZ], &lnNdens[BSIM4v6RDNOIZ], ckt, THERMNOISE, here->BSIM4v6dNodePrime, here->BSIM4v6dNode, gdpr * m); NevalSrc(&noizDens[BSIM4v6RSNOIZ], &lnNdens[BSIM4v6RSNOIZ], ckt, THERMNOISE, here->BSIM4v6sNodePrime, here->BSIM4v6sNode, gspr * m); if (here->BSIM4v6rgateMod == 1) { NevalSrc(&noizDens[BSIM4v6RGNOIZ], &lnNdens[BSIM4v6RGNOIZ], ckt, THERMNOISE, here->BSIM4v6gNodePrime, here->BSIM4v6gNodeExt, here->BSIM4v6grgeltd * m); } else if (here->BSIM4v6rgateMod == 2) { T0 = 1.0 + here->BSIM4v6grgeltd/here->BSIM4v6gcrg; T1 = T0 * T0; NevalSrc(&noizDens[BSIM4v6RGNOIZ], &lnNdens[BSIM4v6RGNOIZ], ckt, THERMNOISE, here->BSIM4v6gNodePrime, here->BSIM4v6gNodeExt, here->BSIM4v6grgeltd * m / T1); } else if (here->BSIM4v6rgateMod == 3) { NevalSrc(&noizDens[BSIM4v6RGNOIZ], &lnNdens[BSIM4v6RGNOIZ], ckt, THERMNOISE, here->BSIM4v6gNodeMid, here->BSIM4v6gNodeExt, here->BSIM4v6grgeltd * m); } else { noizDens[BSIM4v6RGNOIZ] = 0.0; lnNdens[BSIM4v6RGNOIZ] = log(MAX(noizDens[BSIM4v6RGNOIZ], N_MINLOG)); } bodymode = 5; if (here->BSIM4v6rbodyMod == 2) { if( ( !model->BSIM4v6rbps0Given) || ( !model->BSIM4v6rbpd0Given) ) bodymode = 1; else if( (!model->BSIM4v6rbsbx0Given && !model->BSIM4v6rbsby0Given) || (!model->BSIM4v6rbdbx0Given && !model->BSIM4v6rbdby0Given) ) bodymode = 3; } if (here->BSIM4v6rbodyMod) { if(bodymode == 5) { NevalSrc(&noizDens[BSIM4v6RBPSNOIZ], &lnNdens[BSIM4v6RBPSNOIZ], ckt, THERMNOISE, here->BSIM4v6bNodePrime, here->BSIM4v6sbNode, here->BSIM4v6grbps * m); NevalSrc(&noizDens[BSIM4v6RBPDNOIZ], &lnNdens[BSIM4v6RBPDNOIZ], ckt, THERMNOISE, here->BSIM4v6bNodePrime, here->BSIM4v6dbNode, here->BSIM4v6grbpd * m); NevalSrc(&noizDens[BSIM4v6RBPBNOIZ], &lnNdens[BSIM4v6RBPBNOIZ], ckt, THERMNOISE, here->BSIM4v6bNodePrime, here->BSIM4v6bNode, here->BSIM4v6grbpb * m); NevalSrc(&noizDens[BSIM4v6RBSBNOIZ], &lnNdens[BSIM4v6RBSBNOIZ], ckt, THERMNOISE, here->BSIM4v6bNode, here->BSIM4v6sbNode, here->BSIM4v6grbsb * m); NevalSrc(&noizDens[BSIM4v6RBDBNOIZ], &lnNdens[BSIM4v6RBDBNOIZ], ckt, THERMNOISE, here->BSIM4v6bNode, here->BSIM4v6dbNode, here->BSIM4v6grbdb * m); } if(bodymode == 3) { NevalSrc(&noizDens[BSIM4v6RBPSNOIZ], &lnNdens[BSIM4v6RBPSNOIZ], ckt, THERMNOISE, here->BSIM4v6bNodePrime, here->BSIM4v6sbNode, here->BSIM4v6grbps * m); NevalSrc(&noizDens[BSIM4v6RBPDNOIZ], &lnNdens[BSIM4v6RBPDNOIZ], ckt, THERMNOISE, here->BSIM4v6bNodePrime, here->BSIM4v6dbNode, here->BSIM4v6grbpd * m); NevalSrc(&noizDens[BSIM4v6RBPBNOIZ], &lnNdens[BSIM4v6RBPBNOIZ], ckt, THERMNOISE, here->BSIM4v6bNodePrime, here->BSIM4v6bNode, here->BSIM4v6grbpb * m); noizDens[BSIM4v6RBSBNOIZ] = noizDens[BSIM4v6RBDBNOIZ] = 0.0; lnNdens[BSIM4v6RBSBNOIZ] = log(MAX(noizDens[BSIM4v6RBSBNOIZ], N_MINLOG)); lnNdens[BSIM4v6RBDBNOIZ] = log(MAX(noizDens[BSIM4v6RBDBNOIZ], N_MINLOG)); } if(bodymode == 1) { NevalSrc(&noizDens[BSIM4v6RBPBNOIZ], &lnNdens[BSIM4v6RBPBNOIZ], ckt, THERMNOISE, here->BSIM4v6bNodePrime, here->BSIM4v6bNode, here->BSIM4v6grbpb * m); noizDens[BSIM4v6RBPSNOIZ] = noizDens[BSIM4v6RBPDNOIZ] = 0.0; noizDens[BSIM4v6RBSBNOIZ] = noizDens[BSIM4v6RBDBNOIZ] = 0.0; lnNdens[BSIM4v6RBPSNOIZ] = log(MAX(noizDens[BSIM4v6RBPSNOIZ], N_MINLOG)); lnNdens[BSIM4v6RBPDNOIZ] = log(MAX(noizDens[BSIM4v6RBPDNOIZ], N_MINLOG)); lnNdens[BSIM4v6RBSBNOIZ] = log(MAX(noizDens[BSIM4v6RBSBNOIZ], N_MINLOG)); lnNdens[BSIM4v6RBDBNOIZ] = log(MAX(noizDens[BSIM4v6RBDBNOIZ], N_MINLOG)); } } else { noizDens[BSIM4v6RBPSNOIZ] = noizDens[BSIM4v6RBPDNOIZ] = 0.0; noizDens[BSIM4v6RBPBNOIZ] = 0.0; noizDens[BSIM4v6RBSBNOIZ] = noizDens[BSIM4v6RBDBNOIZ] = 0.0; lnNdens[BSIM4v6RBPSNOIZ] = log(MAX(noizDens[BSIM4v6RBPSNOIZ], N_MINLOG)); lnNdens[BSIM4v6RBPDNOIZ] = log(MAX(noizDens[BSIM4v6RBPDNOIZ], N_MINLOG)); lnNdens[BSIM4v6RBPBNOIZ] = log(MAX(noizDens[BSIM4v6RBPBNOIZ], N_MINLOG)); lnNdens[BSIM4v6RBSBNOIZ] = log(MAX(noizDens[BSIM4v6RBSBNOIZ], N_MINLOG)); lnNdens[BSIM4v6RBDBNOIZ] = log(MAX(noizDens[BSIM4v6RBDBNOIZ], N_MINLOG)); } switch(model->BSIM4v6tnoiMod) { case 0: T0 = here->BSIM4v6ueff * fabs(here->BSIM4v6qinv); T1 = T0 * tmp + pParam->BSIM4v6leff * pParam->BSIM4v6leff; NevalSrc(&noizDens[BSIM4v6IDNOIZ], &lnNdens[BSIM4v6IDNOIZ], ckt, THERMNOISE, here->BSIM4v6dNodePrime, here->BSIM4v6sNodePrime, m * (T0 / T1) * model->BSIM4v6ntnoi); break; case 1: T0 = here->BSIM4v6gm + here->BSIM4v6gmbs + here->BSIM4v6gds; T0 *= T0; igsquare = npart_theta * npart_theta * T0 / here->BSIM4v6IdovVds; T1 = npart_beta * (here->BSIM4v6gm + here->BSIM4v6gmbs) + here->BSIM4v6gds; T2 = T1 * T1 / here->BSIM4v6IdovVds; NevalSrc(&noizDens[BSIM4v6IDNOIZ], &lnNdens[BSIM4v6IDNOIZ], ckt, THERMNOISE, here->BSIM4v6dNodePrime, here->BSIM4v6sNodePrime, m * (T2 - igsquare)); break; } NevalSrc(&noizDens[BSIM4v6FLNOIZ], NULL, ckt, N_GAIN, here->BSIM4v6dNodePrime, here->BSIM4v6sNodePrime, (double) 0.0); switch(model->BSIM4v6fnoiMod) { case 0: noizDens[BSIM4v6FLNOIZ] *= m * model->BSIM4v6kf * exp(model->BSIM4v6af * log(MAX(fabs(here->BSIM4v6cd), N_MINLOG))) / (pow(data->freq, model->BSIM4v6ef) * pParam->BSIM4v6leff * pParam->BSIM4v6leff * model->BSIM4v6coxe); break; case 1: Vds = *(ckt->CKTstates[0] + here->BSIM4v6vds); if (Vds < 0.0) Vds = -Vds; Ssi = Eval1ovFNoise(Vds, model, here, data->freq, ckt->CKTtemp); T10 = model->BSIM4v6oxideTrapDensityA * CONSTboltz * ckt->CKTtemp; T11 = pParam->BSIM4v6weff * here->BSIM4v6nf * pParam->BSIM4v6leff * pow(data->freq, model->BSIM4v6ef) * 1.0e10 * here->BSIM4v6nstar * here->BSIM4v6nstar; Swi = T10 / T11 * here->BSIM4v6cd * here->BSIM4v6cd; T1 = Swi + Ssi; if (T1 > 0.0) noizDens[BSIM4v6FLNOIZ] *= m * (Ssi * Swi) / T1; else noizDens[BSIM4v6FLNOIZ] *= 0.0; break; } lnNdens[BSIM4v6FLNOIZ] = log(MAX(noizDens[BSIM4v6FLNOIZ], N_MINLOG)); if(here->BSIM4v6mode >= 0) { /* bugfix */ NevalSrc(&noizDens[BSIM4v6IGSNOIZ], &lnNdens[BSIM4v6IGSNOIZ], ckt, SHOTNOISE, here->BSIM4v6gNodePrime, here->BSIM4v6sNodePrime, m * (here->BSIM4v6Igs + here->BSIM4v6Igcs)); NevalSrc(&noizDens[BSIM4v6IGDNOIZ], &lnNdens[BSIM4v6IGDNOIZ], ckt, SHOTNOISE, here->BSIM4v6gNodePrime, here->BSIM4v6dNodePrime, m * (here->BSIM4v6Igd + here->BSIM4v6Igcd)); } else { NevalSrc(&noizDens[BSIM4v6IGSNOIZ], &lnNdens[BSIM4v6IGSNOIZ], ckt, SHOTNOISE, here->BSIM4v6gNodePrime, here->BSIM4v6sNodePrime, m * (here->BSIM4v6Igs + here->BSIM4v6Igcd)); NevalSrc(&noizDens[BSIM4v6IGDNOIZ], &lnNdens[BSIM4v6IGDNOIZ], ckt, SHOTNOISE, here->BSIM4v6gNodePrime, here->BSIM4v6dNodePrime, m * (here->BSIM4v6Igd + here->BSIM4v6Igcs)); } NevalSrc(&noizDens[BSIM4v6IGBNOIZ], &lnNdens[BSIM4v6IGBNOIZ], ckt, SHOTNOISE, here->BSIM4v6gNodePrime, here->BSIM4v6bNodePrime, m * here->BSIM4v6Igb); noizDens[BSIM4v6TOTNOIZ] = noizDens[BSIM4v6RDNOIZ] + noizDens[BSIM4v6RSNOIZ] + noizDens[BSIM4v6RGNOIZ] + noizDens[BSIM4v6RBPSNOIZ] + noizDens[BSIM4v6RBPDNOIZ] + noizDens[BSIM4v6RBPBNOIZ] + noizDens[BSIM4v6RBSBNOIZ] + noizDens[BSIM4v6RBDBNOIZ] + noizDens[BSIM4v6IDNOIZ] + noizDens[BSIM4v6FLNOIZ] + noizDens[BSIM4v6IGSNOIZ] + noizDens[BSIM4v6IGDNOIZ] + noizDens[BSIM4v6IGBNOIZ]; lnNdens[BSIM4v6TOTNOIZ] = log(MAX(noizDens[BSIM4v6TOTNOIZ], N_MINLOG)); *OnDens += noizDens[BSIM4v6TOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to initialize our "history" variables. */ for (i = 0; i < BSIM4v6NSRCS; i++) { here->BSIM4v6nVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i = 0; i < BSIM4v6NSRCS; i++) { here->BSIM4v6nVar[OUTNOIZ][i] = 0.0; here->BSIM4v6nVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0, we have to integrate. */ for (i = 0; i < BSIM4v6NSRCS; i++) { if (i != BSIM4v6TOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], here->BSIM4v6nVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv, lnNdens[i] + data->lnGainInv, here->BSIM4v6nVar[LNLSTDENS][i] + data->lnGainInv, data); here->BSIM4v6nVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { here->BSIM4v6nVar[OUTNOIZ][i] += tempOnoise; here->BSIM4v6nVar[OUTNOIZ][BSIM4v6TOTNOIZ] += tempOnoise; here->BSIM4v6nVar[INNOIZ][i] += tempInoise; here->BSIM4v6nVar[INNOIZ][BSIM4v6TOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i = 0; i < BSIM4v6NSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i = 0; i < BSIM4v6NSRCS; i++) { data->outpVector[data->outNumber++] = here->BSIM4v6nVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = here->BSIM4v6nVar[INNOIZ][i]; } } break; } break; case N_CLOSE: /* do nothing, the main calling routine will close */ return (OK); break; /* the plots */ } /* switch (operation) */ } /* for here */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v6/b4v6soachk.c0000644000175000017500000003647113546075722022606 0ustar carstencarsten/********** Copyright 2013 Dietmar Warning. All rights reserved. Author: 2013 Dietmar Warning **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4v6def.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/cpdefs.h" int BSIM4v6soaCheck(CKTcircuit *ckt, GENmodel *inModel) { BSIM4v6model *model = (BSIM4v6model *) inModel; BSIM4v6instance *here; double vgs, vgd, vgb, vds, vbs, vbd; /* actual mos voltages */ int maxwarns; static int warns_vgs = 0, warns_vgd = 0, warns_vgb = 0, warns_vds = 0, warns_vbs = 0, warns_vbd = 0; if (!ckt) { warns_vgs = 0; warns_vgd = 0; warns_vgb = 0; warns_vds = 0; warns_vbs = 0; warns_vbd = 0; return OK; } maxwarns = ckt->CKTsoaMaxWarns; for (; model; model = BSIM4v6nextModel(model)) { for (here = BSIM4v6instances(model); here; here = BSIM4v6nextInstance(here)) { vgs = ckt->CKTrhsOld [here->BSIM4v6gNodePrime] - ckt->CKTrhsOld [here->BSIM4v6sNodePrime]; vgd = ckt->CKTrhsOld [here->BSIM4v6gNodePrime] - ckt->CKTrhsOld [here->BSIM4v6dNodePrime]; vgb = ckt->CKTrhsOld [here->BSIM4v6gNodePrime] - ckt->CKTrhsOld [here->BSIM4v6bNodePrime]; vds = ckt->CKTrhsOld [here->BSIM4v6dNodePrime] - ckt->CKTrhsOld [here->BSIM4v6sNodePrime]; vbs = ckt->CKTrhsOld [here->BSIM4v6bNodePrime] - ckt->CKTrhsOld [here->BSIM4v6sNodePrime]; vbd = ckt->CKTrhsOld [here->BSIM4v6bNodePrime] - ckt->CKTrhsOld [here->BSIM4v6dNodePrime]; if (!model->BSIM4v6vgsrMaxGiven) { if (fabs(vgs) > model->BSIM4v6vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->BSIM4v6vgsMax); warns_vgs++; } if (!model->BSIM4v6vgbMaxGiven) { if (fabs(vgb) > model->BSIM4v6vgsMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgs_max=%g\n", vgb, model->BSIM4v6vgsMax); warns_vgb++; } } else { if (fabs(vgb) > model->BSIM4v6vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM4v6vgbMax); warns_vgb++; } } } else { if (model->BSIM4v6type > 0) { if (vgs > model->BSIM4v6vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->BSIM4v6vgsMax); warns_vgs++; } if (-1*vgs > model->BSIM4v6vgsrMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgsr_max=%g\n", vgs, model->BSIM4v6vgsrMax); warns_vgs++; } } else { if (vgs > model->BSIM4v6vgsrMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgsr_max=%g\n", vgs, model->BSIM4v6vgsrMax); warns_vgs++; } if (-1*vgs > model->BSIM4v6vgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->BSIM4v6vgsMax); warns_vgs++; } } } if (!model->BSIM4v6vgdrMaxGiven) { if (fabs(vgd) > model->BSIM4v6vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->BSIM4v6vgdMax); warns_vgd++; } } else { if (model->BSIM4v6type > 0) { if (vgd > model->BSIM4v6vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->BSIM4v6vgdMax); warns_vgd++; } if (-1*vgd > model->BSIM4v6vgdrMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgdr_max=%g\n", vgd, model->BSIM4v6vgdrMax); warns_vgd++; } } else { if (vgd > model->BSIM4v6vgdrMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgdr_max=%g\n", vgd, model->BSIM4v6vgdrMax); warns_vgd++; } if (-1*vgd > model->BSIM4v6vgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->BSIM4v6vgdMax); warns_vgd++; } } } if (fabs(vds) > model->BSIM4v6vdsMax) if (warns_vds < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vds=%g has exceeded Vds_max=%g\n", vds, model->BSIM4v6vdsMax); warns_vds++; } if (!model->BSIM4v6vgbrMaxGiven) { if (fabs(vgb) > model->BSIM4v6vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM4v6vgbMax); warns_vgb++; } } else { if (model->BSIM4v6type > 0) { if (vgb > model->BSIM4v6vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM4v6vgbMax); warns_vgb++; } if (-1*vgb > model->BSIM4v6vgbrMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgbr_max=%g\n", vgb, model->BSIM4v6vgbrMax); warns_vgb++; } } else { if (vgb > model->BSIM4v6vgbrMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgbr_max=%g\n", vgb, model->BSIM4v6vgbrMax); warns_vgb++; } if (-1*vgb > model->BSIM4v6vgbMax) if (warns_vgb < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgb=%g has exceeded Vgb_max=%g\n", vgb, model->BSIM4v6vgbMax); warns_vgb++; } } } if (!model->BSIM4v6vbsrMaxGiven) { if (!model->BSIM4v6vbsMaxGiven) { if (fabs(vbs) > model->BSIM4v6vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->BSIM4v6vbdMax); warns_vbs++; } } else { if (fabs(vbs) > model->BSIM4v6vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->BSIM4v6vbsMax); warns_vbs++; } } } else { if (!model->BSIM4v6vbsMaxGiven) { if (model->BSIM4v6type > 0) { if (vbs > model->BSIM4v6vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->BSIM4v6vbdMax); warns_vbs++; } if (-1*vbs > model->BSIM4v6vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM4v6vbsrMax); warns_vbs++; } } else { if (vbs > model->BSIM4v6vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM4v6vbsrMax); warns_vbs++; } if (-1*vbs > model->BSIM4v6vbdMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbd_max=%g\n", vbs, model->BSIM4v6vbdMax); warns_vbs++; } } } else { if (model->BSIM4v6type > 0) { if (vbs > model->BSIM4v6vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->BSIM4v6vbsMax); warns_vbs++; } if (-1*vbs > model->BSIM4v6vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM4v6vbsrMax); warns_vbs++; } } else { if (vbs > model->BSIM4v6vbsrMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbsr_max=%g\n", vbs, model->BSIM4v6vbsrMax); warns_vbs++; } if (-1*vbs > model->BSIM4v6vbsMax) if (warns_vbs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbs=%g has exceeded Vbs_max=%g\n", vbs, model->BSIM4v6vbsMax); warns_vbs++; } } } } if (!model->BSIM4v6vbdrMaxGiven) { if (fabs(vbd) > model->BSIM4v6vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->BSIM4v6vbdMax); warns_vbd++; } } else { if (model->BSIM4v6type > 0) { if (vbd > model->BSIM4v6vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->BSIM4v6vbdMax); warns_vbd++; } if (-1*vbd > model->BSIM4v6vbdrMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbdr_max=%g\n", vbd, model->BSIM4v6vbdrMax); warns_vbd++; } } else { if (vbd > model->BSIM4v6vbdrMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbdr_max=%g\n", vbd, model->BSIM4v6vbdrMax); warns_vbd++; } if (-1*vbd > model->BSIM4v6vbdMax) if (warns_vbd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vbd=%g has exceeded Vbd_max=%g\n", vbd, model->BSIM4v6vbdMax); warns_vbd++; } } } } } return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim4v6/b4v6set.c0000644000175000017500000030600613546075722022123 0ustar carstencarsten/**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008 ****/ /**** BSIM4.6.4 Update ngspice 08/22/2009 ****/ /**** OpenMP support ngspice 06/28/2010 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4set.c of BSIM4.6.2. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Authors: 2008- Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, 03/04/2004. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. * Modified by Mohan Dunga, 12/13/2006 * Modified by Mohan Dunga, Wenwei Yang, 05/18/2007. * Modified by Wenwei Yang, 07/31/2008. **********/ #include "ngspice/ngspice.h" #include "ngspice/jobdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "bsim4v6def.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #ifdef USE_OMP #include "ngspice/cpextern.h" #endif #define MAX_EXP 5.834617425e14 #define MIN_EXP 1.713908431e-15 #define EXP_THRESHOLD 34.0 #define EPS0 8.85418e-12 #define EPSSI 1.03594e-10 #define PI 3.141592654 #define Charge_q 1.60219e-19 int BSIM4v6setup( SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { BSIM4v6model *model = (BSIM4v6model*)inModel; BSIM4v6instance *here; int error; CKTnode *tmp; int noiseAnalGiven = 0, createNode; /* Criteria for new node creation */ double Rtot, DMCGeff, DMCIeff, DMDGeff; JOB *job; #ifdef USE_OMP int idx, InstCount; BSIM4v6instance **InstArray; #endif /* Search for a noise analysis request */ for (job = ft_curckt->ci_curTask->jobs; job; job = job->JOBnextJob) { if(strcmp(job->JOBname,"Noise Analysis")==0) { noiseAnalGiven = 1; break; } } /* loop through all the BSIM4v6 device models */ for( ; model != NULL; model = BSIM4v6nextModel(model)) { /* process defaults of model parameters */ if (!model->BSIM4v6typeGiven) model->BSIM4v6type = NMOS; if (!model->BSIM4v6mobModGiven) model->BSIM4v6mobMod = 0; else if ((model->BSIM4v6mobMod != 0) && (model->BSIM4v6mobMod != 1) && (model->BSIM4v6mobMod != 2) && (model->BSIM4v6mobMod != 3)) { model->BSIM4v6mobMod = 0; printf("Warning: mobMod has been set to its default value: 0.\n"); } if (!model->BSIM4v6binUnitGiven) model->BSIM4v6binUnit = 1; if (!model->BSIM4v6paramChkGiven) model->BSIM4v6paramChk = 1; if (!model->BSIM4v6dioModGiven) model->BSIM4v6dioMod = 1; else if ((model->BSIM4v6dioMod != 0) && (model->BSIM4v6dioMod != 1) && (model->BSIM4v6dioMod != 2)) { model->BSIM4v6dioMod = 1; printf("Warning: dioMod has been set to its default value: 1.\n"); } if (!model->BSIM4v6cvchargeModGiven) model->BSIM4v6cvchargeMod = 0; if (!model->BSIM4v6capModGiven) model->BSIM4v6capMod = 2; else if ((model->BSIM4v6capMod != 0) && (model->BSIM4v6capMod != 1) && (model->BSIM4v6capMod != 2)) { model->BSIM4v6capMod = 2; printf("Warning: capMod has been set to its default value: 2.\n"); } if (!model->BSIM4v6rdsModGiven) model->BSIM4v6rdsMod = 0; else if ((model->BSIM4v6rdsMod != 0) && (model->BSIM4v6rdsMod != 1)) { model->BSIM4v6rdsMod = 0; printf("Warning: rdsMod has been set to its default value: 0.\n"); } if (!model->BSIM4v6rbodyModGiven) model->BSIM4v6rbodyMod = 0; else if ((model->BSIM4v6rbodyMod != 0) && (model->BSIM4v6rbodyMod != 1) && (model->BSIM4v6rbodyMod != 2)) { model->BSIM4v6rbodyMod = 0; printf("Warning: rbodyMod has been set to its default value: 0.\n"); } if (!model->BSIM4v6rgateModGiven) model->BSIM4v6rgateMod = 0; else if ((model->BSIM4v6rgateMod != 0) && (model->BSIM4v6rgateMod != 1) && (model->BSIM4v6rgateMod != 2) && (model->BSIM4v6rgateMod != 3)) { model->BSIM4v6rgateMod = 0; printf("Warning: rgateMod has been set to its default value: 0.\n"); } if (!model->BSIM4v6perModGiven) model->BSIM4v6perMod = 1; else if ((model->BSIM4v6perMod != 0) && (model->BSIM4v6perMod != 1)) { model->BSIM4v6perMod = 1; printf("Warning: perMod has been set to its default value: 1.\n"); } if (!model->BSIM4v6geoModGiven) model->BSIM4v6geoMod = 0; if (!model->BSIM4v6rgeoModGiven) model->BSIM4v6rgeoMod = 0; else if ((model->BSIM4v6rgeoMod != 0) && (model->BSIM4v6rgeoMod != 1)) { model->BSIM4v6rgeoMod = 1; printf("Warning: rgeoMod has been set to its default value: 1.\n"); } if (!model->BSIM4v6fnoiModGiven) model->BSIM4v6fnoiMod = 1; else if ((model->BSIM4v6fnoiMod != 0) && (model->BSIM4v6fnoiMod != 1)) { model->BSIM4v6fnoiMod = 1; printf("Warning: fnoiMod has been set to its default value: 1.\n"); } if (!model->BSIM4v6tnoiModGiven) model->BSIM4v6tnoiMod = 0; /* WDLiu: tnoiMod=1 needs to set internal S/D nodes */ else if ((model->BSIM4v6tnoiMod != 0) && (model->BSIM4v6tnoiMod != 1)) { model->BSIM4v6tnoiMod = 0; printf("Warning: tnoiMod has been set to its default value: 0.\n"); } if (!model->BSIM4v6trnqsModGiven) model->BSIM4v6trnqsMod = 0; else if ((model->BSIM4v6trnqsMod != 0) && (model->BSIM4v6trnqsMod != 1)) { model->BSIM4v6trnqsMod = 0; printf("Warning: trnqsMod has been set to its default value: 0.\n"); } if (!model->BSIM4v6acnqsModGiven) model->BSIM4v6acnqsMod = 0; else if ((model->BSIM4v6acnqsMod != 0) && (model->BSIM4v6acnqsMod != 1)) { model->BSIM4v6acnqsMod = 0; printf("Warning: acnqsMod has been set to its default value: 0.\n"); } if (!model->BSIM4v6mtrlModGiven) model->BSIM4v6mtrlMod = 0; if (!model->BSIM4v6igcModGiven) model->BSIM4v6igcMod = 0; else if ((model->BSIM4v6igcMod != 0) && (model->BSIM4v6igcMod != 1) && (model->BSIM4v6igcMod != 2)) { model->BSIM4v6igcMod = 0; printf("Warning: igcMod has been set to its default value: 0.\n"); } if (!model->BSIM4v6igbModGiven) model->BSIM4v6igbMod = 0; else if ((model->BSIM4v6igbMod != 0) && (model->BSIM4v6igbMod != 1)) { model->BSIM4v6igbMod = 0; printf("Warning: igbMod has been set to its default value: 0.\n"); } if (!model->BSIM4v6tempModGiven) model->BSIM4v6tempMod = 0; else if ((model->BSIM4v6tempMod != 0) && (model->BSIM4v6tempMod != 1) && (model->BSIM4v6tempMod != 2) && (model->BSIM4v6tempMod != 3)) { model->BSIM4v6tempMod = 0; printf("Warning: tempMod has been set to its default value: 0.\n"); } if (!model->BSIM4v6versionGiven) model->BSIM4v6version = "4.6.4"; if (!model->BSIM4v6toxrefGiven) model->BSIM4v6toxref = 30.0e-10; if (!model->BSIM4v6eotGiven) model->BSIM4v6eot = 15.0e-10; if (!model->BSIM4v6vddeotGiven) model->BSIM4v6vddeot = (model->BSIM4v6type == NMOS) ? 1.5 : -1.5; if (!model->BSIM4v6tempeotGiven) model->BSIM4v6tempeot = 300.15; if (!model->BSIM4v6leffeotGiven) model->BSIM4v6leffeot = 1; if (!model->BSIM4v6weffeotGiven) model->BSIM4v6weffeot = 10; if (!model->BSIM4v6adosGiven) model->BSIM4v6ados = 1.0; if (!model->BSIM4v6bdosGiven) model->BSIM4v6bdos = 1.0; if (!model->BSIM4v6toxeGiven) model->BSIM4v6toxe = 30.0e-10; if (!model->BSIM4v6toxpGiven) model->BSIM4v6toxp = model->BSIM4v6toxe; if (!model->BSIM4v6toxmGiven) model->BSIM4v6toxm = model->BSIM4v6toxe; if (!model->BSIM4v6dtoxGiven) model->BSIM4v6dtox = 0.0; if (!model->BSIM4v6epsroxGiven) model->BSIM4v6epsrox = 3.9; if (!model->BSIM4v6cdscGiven) model->BSIM4v6cdsc = 2.4e-4; /* unit Q/V/m^2 */ if (!model->BSIM4v6cdscbGiven) model->BSIM4v6cdscb = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM4v6cdscdGiven) model->BSIM4v6cdscd = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM4v6citGiven) model->BSIM4v6cit = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM4v6nfactorGiven) model->BSIM4v6nfactor = 1.0; if (!model->BSIM4v6xjGiven) model->BSIM4v6xj = .15e-6; if (!model->BSIM4v6vsatGiven) model->BSIM4v6vsat = 8.0e4; /* unit m/s */ if (!model->BSIM4v6atGiven) model->BSIM4v6at = 3.3e4; /* unit m/s */ if (!model->BSIM4v6a0Given) model->BSIM4v6a0 = 1.0; if (!model->BSIM4v6agsGiven) model->BSIM4v6ags = 0.0; if (!model->BSIM4v6a1Given) model->BSIM4v6a1 = 0.0; if (!model->BSIM4v6a2Given) model->BSIM4v6a2 = 1.0; if (!model->BSIM4v6ketaGiven) model->BSIM4v6keta = -0.047; /* unit / V */ if (!model->BSIM4v6nsubGiven) model->BSIM4v6nsub = 6.0e16; /* unit 1/cm3 */ if (!model->BSIM4v6phigGiven) model->BSIM4v6phig = 4.05; if (!model->BSIM4v6epsrgateGiven) model->BSIM4v6epsrgate = 11.7; if (!model->BSIM4v6easubGiven) model->BSIM4v6easub = 4.05; if (!model->BSIM4v6epsrsubGiven) model->BSIM4v6epsrsub = 11.7; if (!model->BSIM4v6ni0subGiven) model->BSIM4v6ni0sub = 1.45e10; /* unit 1/cm3 */ if (!model->BSIM4v6bg0subGiven) model->BSIM4v6bg0sub = 1.16; /* unit eV */ if (!model->BSIM4v6tbgasubGiven) model->BSIM4v6tbgasub = 7.02e-4; if (!model->BSIM4v6tbgbsubGiven) model->BSIM4v6tbgbsub = 1108.0; if (!model->BSIM4v6ndepGiven) model->BSIM4v6ndep = 1.7e17; /* unit 1/cm3 */ if (!model->BSIM4v6nsdGiven) model->BSIM4v6nsd = 1.0e20; /* unit 1/cm3 */ if (!model->BSIM4v6phinGiven) model->BSIM4v6phin = 0.0; /* unit V */ if (!model->BSIM4v6ngateGiven) model->BSIM4v6ngate = 0; /* unit 1/cm3 */ if (!model->BSIM4v6vbmGiven) model->BSIM4v6vbm = -3.0; if (!model->BSIM4v6xtGiven) model->BSIM4v6xt = 1.55e-7; if (!model->BSIM4v6kt1Given) model->BSIM4v6kt1 = -0.11; /* unit V */ if (!model->BSIM4v6kt1lGiven) model->BSIM4v6kt1l = 0.0; /* unit V*m */ if (!model->BSIM4v6kt2Given) model->BSIM4v6kt2 = 0.022; /* No unit */ if (!model->BSIM4v6k3Given) model->BSIM4v6k3 = 80.0; if (!model->BSIM4v6k3bGiven) model->BSIM4v6k3b = 0.0; if (!model->BSIM4v6w0Given) model->BSIM4v6w0 = 2.5e-6; if (!model->BSIM4v6lpe0Given) model->BSIM4v6lpe0 = 1.74e-7; if (!model->BSIM4v6lpebGiven) model->BSIM4v6lpeb = 0.0; if (!model->BSIM4v6dvtp0Given) model->BSIM4v6dvtp0 = 0.0; if (!model->BSIM4v6dvtp1Given) model->BSIM4v6dvtp1 = 0.0; if (!model->BSIM4v6dvt0Given) model->BSIM4v6dvt0 = 2.2; if (!model->BSIM4v6dvt1Given) model->BSIM4v6dvt1 = 0.53; if (!model->BSIM4v6dvt2Given) model->BSIM4v6dvt2 = -0.032; /* unit 1 / V */ if (!model->BSIM4v6dvt0wGiven) model->BSIM4v6dvt0w = 0.0; if (!model->BSIM4v6dvt1wGiven) model->BSIM4v6dvt1w = 5.3e6; if (!model->BSIM4v6dvt2wGiven) model->BSIM4v6dvt2w = -0.032; if (!model->BSIM4v6droutGiven) model->BSIM4v6drout = 0.56; if (!model->BSIM4v6dsubGiven) model->BSIM4v6dsub = model->BSIM4v6drout; if (!model->BSIM4v6vth0Given) model->BSIM4v6vth0 = (model->BSIM4v6type == NMOS) ? 0.7 : -0.7; if (!model->BSIM4v6vfbGiven) model->BSIM4v6vfb = -1.0; if (!model->BSIM4v6euGiven) model->BSIM4v6eu = (model->BSIM4v6type == NMOS) ? 1.67 : 1.0; if (!model->BSIM4v6ucsGiven) model->BSIM4v6ucs = (model->BSIM4v6type == NMOS) ? 1.67 : 1.0; if (!model->BSIM4v6uaGiven) model->BSIM4v6ua = ((model->BSIM4v6mobMod == 2)) ? 1.0e-15 : 1.0e-9; /* unit m/V */ if (!model->BSIM4v6ua1Given) model->BSIM4v6ua1 = 1.0e-9; /* unit m/V */ if (!model->BSIM4v6ubGiven) model->BSIM4v6ub = 1.0e-19; /* unit (m/V)**2 */ if (!model->BSIM4v6ub1Given) model->BSIM4v6ub1 = -1.0e-18; /* unit (m/V)**2 */ if (!model->BSIM4v6ucGiven) model->BSIM4v6uc = (model->BSIM4v6mobMod == 1) ? -0.0465 : -0.0465e-9; if (!model->BSIM4v6uc1Given) model->BSIM4v6uc1 = (model->BSIM4v6mobMod == 1) ? -0.056 : -0.056e-9; if (!model->BSIM4v6udGiven) model->BSIM4v6ud = 0.0; /* unit m**(-2) */ if (!model->BSIM4v6ud1Given) model->BSIM4v6ud1 = 0.0; if (!model->BSIM4v6upGiven) model->BSIM4v6up = 0.0; if (!model->BSIM4v6lpGiven) model->BSIM4v6lp = 1.0e-8; if (!model->BSIM4v6u0Given) model->BSIM4v6u0 = (model->BSIM4v6type == NMOS) ? 0.067 : 0.025; if (!model->BSIM4v6uteGiven) model->BSIM4v6ute = -1.5; if (!model->BSIM4v6ucsteGiven) model->BSIM4v6ucste = -4.775e-3; if (!model->BSIM4v6voffGiven) model->BSIM4v6voff = -0.08; if (!model->BSIM4v6vofflGiven) model->BSIM4v6voffl = 0.0; if (!model->BSIM4v6voffcvlGiven) model->BSIM4v6voffcvl = 0.0; if (!model->BSIM4v6minvGiven) model->BSIM4v6minv = 0.0; if (!model->BSIM4v6minvcvGiven) model->BSIM4v6minvcv = 0.0; if (!model->BSIM4v6fproutGiven) model->BSIM4v6fprout = 0.0; if (!model->BSIM4v6pditsGiven) model->BSIM4v6pdits = 0.0; if (!model->BSIM4v6pditsdGiven) model->BSIM4v6pditsd = 0.0; if (!model->BSIM4v6pditslGiven) model->BSIM4v6pditsl = 0.0; if (!model->BSIM4v6deltaGiven) model->BSIM4v6delta = 0.01; if (!model->BSIM4v6rdswminGiven) model->BSIM4v6rdswmin = 0.0; if (!model->BSIM4v6rdwminGiven) model->BSIM4v6rdwmin = 0.0; if (!model->BSIM4v6rswminGiven) model->BSIM4v6rswmin = 0.0; if (!model->BSIM4v6rdswGiven) model->BSIM4v6rdsw = 200.0; /* in ohm*um */ if (!model->BSIM4v6rdwGiven) model->BSIM4v6rdw = 100.0; if (!model->BSIM4v6rswGiven) model->BSIM4v6rsw = 100.0; if (!model->BSIM4v6prwgGiven) model->BSIM4v6prwg = 1.0; /* in 1/V */ if (!model->BSIM4v6prwbGiven) model->BSIM4v6prwb = 0.0; if (!model->BSIM4v6prtGiven) model->BSIM4v6prt = 0.0; if (!model->BSIM4v6eta0Given) model->BSIM4v6eta0 = 0.08; /* no unit */ if (!model->BSIM4v6etabGiven) model->BSIM4v6etab = -0.07; /* unit 1/V */ if (!model->BSIM4v6pclmGiven) model->BSIM4v6pclm = 1.3; /* no unit */ if (!model->BSIM4v6pdibl1Given) model->BSIM4v6pdibl1 = 0.39; /* no unit */ if (!model->BSIM4v6pdibl2Given) model->BSIM4v6pdibl2 = 0.0086; /* no unit */ if (!model->BSIM4v6pdiblbGiven) model->BSIM4v6pdiblb = 0.0; /* 1/V */ if (!model->BSIM4v6pscbe1Given) model->BSIM4v6pscbe1 = 4.24e8; if (!model->BSIM4v6pscbe2Given) model->BSIM4v6pscbe2 = 1.0e-5; if (!model->BSIM4v6pvagGiven) model->BSIM4v6pvag = 0.0; if (!model->BSIM4v6wrGiven) model->BSIM4v6wr = 1.0; if (!model->BSIM4v6dwgGiven) model->BSIM4v6dwg = 0.0; if (!model->BSIM4v6dwbGiven) model->BSIM4v6dwb = 0.0; if (!model->BSIM4v6b0Given) model->BSIM4v6b0 = 0.0; if (!model->BSIM4v6b1Given) model->BSIM4v6b1 = 0.0; if (!model->BSIM4v6alpha0Given) model->BSIM4v6alpha0 = 0.0; if (!model->BSIM4v6alpha1Given) model->BSIM4v6alpha1 = 0.0; if (!model->BSIM4v6beta0Given) model->BSIM4v6beta0 = 0.0; if (!model->BSIM4v6agidlGiven) model->BSIM4v6agidl = 0.0; if (!model->BSIM4v6bgidlGiven) model->BSIM4v6bgidl = 2.3e9; /* V/m */ if (!model->BSIM4v6cgidlGiven) model->BSIM4v6cgidl = 0.5; /* V^3 */ if (!model->BSIM4v6egidlGiven) model->BSIM4v6egidl = 0.8; /* V */ if (!model->BSIM4v6agislGiven) { if (model->BSIM4v6agidlGiven) model->BSIM4v6agisl = model->BSIM4v6agidl; else model->BSIM4v6agisl = 0.0; } if (!model->BSIM4v6bgislGiven) { if (model->BSIM4v6bgidlGiven) model->BSIM4v6bgisl = model->BSIM4v6bgidl; else model->BSIM4v6bgisl = 2.3e9; /* V/m */ } if (!model->BSIM4v6cgislGiven) { if (model->BSIM4v6cgidlGiven) model->BSIM4v6cgisl = model->BSIM4v6cgidl; else model->BSIM4v6cgisl = 0.5; /* V^3 */ } if (!model->BSIM4v6egislGiven) { if (model->BSIM4v6egidlGiven) model->BSIM4v6egisl = model->BSIM4v6egidl; else model->BSIM4v6egisl = 0.8; /* V */ } if (!model->BSIM4v6aigcGiven) model->BSIM4v6aigc = (model->BSIM4v6type == NMOS) ? 1.36e-2 : 9.80e-3; if (!model->BSIM4v6bigcGiven) model->BSIM4v6bigc = (model->BSIM4v6type == NMOS) ? 1.71e-3 : 7.59e-4; if (!model->BSIM4v6cigcGiven) model->BSIM4v6cigc = (model->BSIM4v6type == NMOS) ? 0.075 : 0.03; if (model->BSIM4v6aigsdGiven) { model->BSIM4v6aigs = model->BSIM4v6aigd = model->BSIM4v6aigsd; } else { model->BSIM4v6aigsd = (model->BSIM4v6type == NMOS) ? 1.36e-2 : 9.80e-3; if (!model->BSIM4v6aigsGiven) model->BSIM4v6aigs = (model->BSIM4v6type == NMOS) ? 1.36e-2 : 9.80e-3; if (!model->BSIM4v6aigdGiven) model->BSIM4v6aigd = (model->BSIM4v6type == NMOS) ? 1.36e-2 : 9.80e-3; } if (model->BSIM4v6bigsdGiven) { model->BSIM4v6bigs = model->BSIM4v6bigd = model->BSIM4v6bigsd; } else { model->BSIM4v6bigsd = (model->BSIM4v6type == NMOS) ? 1.71e-3 : 7.59e-4; if (!model->BSIM4v6bigsGiven) model->BSIM4v6bigs = (model->BSIM4v6type == NMOS) ? 1.71e-3 : 7.59e-4; if (!model->BSIM4v6bigdGiven) model->BSIM4v6bigd = (model->BSIM4v6type == NMOS) ? 1.71e-3 : 7.59e-4; } if (model->BSIM4v6cigsdGiven) { model->BSIM4v6cigs = model->BSIM4v6cigd = model->BSIM4v6cigsd; } else { model->BSIM4v6cigsd = (model->BSIM4v6type == NMOS) ? 0.075 : 0.03; if (!model->BSIM4v6cigsGiven) model->BSIM4v6cigs = (model->BSIM4v6type == NMOS) ? 0.075 : 0.03; if (!model->BSIM4v6cigdGiven) model->BSIM4v6cigd = (model->BSIM4v6type == NMOS) ? 0.075 : 0.03; } if (!model->BSIM4v6aigbaccGiven) model->BSIM4v6aigbacc = 1.36e-2; if (!model->BSIM4v6bigbaccGiven) model->BSIM4v6bigbacc = 1.71e-3; if (!model->BSIM4v6cigbaccGiven) model->BSIM4v6cigbacc = 0.075; if (!model->BSIM4v6aigbinvGiven) model->BSIM4v6aigbinv = 1.11e-2; if (!model->BSIM4v6bigbinvGiven) model->BSIM4v6bigbinv = 9.49e-4; if (!model->BSIM4v6cigbinvGiven) model->BSIM4v6cigbinv = 0.006; if (!model->BSIM4v6nigcGiven) model->BSIM4v6nigc = 1.0; if (!model->BSIM4v6nigbinvGiven) model->BSIM4v6nigbinv = 3.0; if (!model->BSIM4v6nigbaccGiven) model->BSIM4v6nigbacc = 1.0; if (!model->BSIM4v6ntoxGiven) model->BSIM4v6ntox = 1.0; if (!model->BSIM4v6eigbinvGiven) model->BSIM4v6eigbinv = 1.1; if (!model->BSIM4v6pigcdGiven) model->BSIM4v6pigcd = 1.0; if (!model->BSIM4v6poxedgeGiven) model->BSIM4v6poxedge = 1.0; if (!model->BSIM4v6xrcrg1Given) model->BSIM4v6xrcrg1 = 12.0; if (!model->BSIM4v6xrcrg2Given) model->BSIM4v6xrcrg2 = 1.0; if (!model->BSIM4v6ijthsfwdGiven) model->BSIM4v6ijthsfwd = 0.1; /* unit A */ if (!model->BSIM4v6ijthdfwdGiven) model->BSIM4v6ijthdfwd = model->BSIM4v6ijthsfwd; if (!model->BSIM4v6ijthsrevGiven) model->BSIM4v6ijthsrev = 0.1; /* unit A */ if (!model->BSIM4v6ijthdrevGiven) model->BSIM4v6ijthdrev = model->BSIM4v6ijthsrev; if (!model->BSIM4v6tnoiaGiven) model->BSIM4v6tnoia = 1.5; if (!model->BSIM4v6tnoibGiven) model->BSIM4v6tnoib = 3.5; if (!model->BSIM4v6rnoiaGiven) model->BSIM4v6rnoia = 0.577; if (!model->BSIM4v6rnoibGiven) model->BSIM4v6rnoib = 0.5164; if (!model->BSIM4v6ntnoiGiven) model->BSIM4v6ntnoi = 1.0; if (!model->BSIM4v6lambdaGiven) model->BSIM4v6lambda = 0.0; if (!model->BSIM4v6vtlGiven) model->BSIM4v6vtl = 2.0e5; /* unit m/s */ if (!model->BSIM4v6xnGiven) model->BSIM4v6xn = 3.0; if (!model->BSIM4v6lcGiven) model->BSIM4v6lc = 5.0e-9; if (!model->BSIM4v6vfbsdoffGiven) model->BSIM4v6vfbsdoff = 0.0; /* unit v */ if (!model->BSIM4v6tvfbsdoffGiven) model->BSIM4v6tvfbsdoff = 0.0; if (!model->BSIM4v6tvoffGiven) model->BSIM4v6tvoff = 0.0; if (!model->BSIM4v6lintnoiGiven) model->BSIM4v6lintnoi = 0.0; /* unit m */ if (!model->BSIM4v6xjbvsGiven) model->BSIM4v6xjbvs = 1.0; /* no unit */ if (!model->BSIM4v6xjbvdGiven) model->BSIM4v6xjbvd = model->BSIM4v6xjbvs; if (!model->BSIM4v6bvsGiven) model->BSIM4v6bvs = 10.0; /* V */ if (!model->BSIM4v6bvdGiven) model->BSIM4v6bvd = model->BSIM4v6bvs; if (!model->BSIM4v6gbminGiven) model->BSIM4v6gbmin = 1.0e-12; /* in mho */ if (!model->BSIM4v6rbdbGiven) model->BSIM4v6rbdb = 50.0; /* in ohm */ if (!model->BSIM4v6rbpbGiven) model->BSIM4v6rbpb = 50.0; if (!model->BSIM4v6rbsbGiven) model->BSIM4v6rbsb = 50.0; if (!model->BSIM4v6rbpsGiven) model->BSIM4v6rbps = 50.0; if (!model->BSIM4v6rbpdGiven) model->BSIM4v6rbpd = 50.0; if (!model->BSIM4v6rbps0Given) model->BSIM4v6rbps0 = 50.0; if (!model->BSIM4v6rbpslGiven) model->BSIM4v6rbpsl = 0.0; if (!model->BSIM4v6rbpswGiven) model->BSIM4v6rbpsw = 0.0; if (!model->BSIM4v6rbpsnfGiven) model->BSIM4v6rbpsnf = 0.0; if (!model->BSIM4v6rbpd0Given) model->BSIM4v6rbpd0 = 50.0; if (!model->BSIM4v6rbpdlGiven) model->BSIM4v6rbpdl = 0.0; if (!model->BSIM4v6rbpdwGiven) model->BSIM4v6rbpdw = 0.0; if (!model->BSIM4v6rbpdnfGiven) model->BSIM4v6rbpdnf = 0.0; if (!model->BSIM4v6rbpbx0Given) model->BSIM4v6rbpbx0 = 100.0; if (!model->BSIM4v6rbpbxlGiven) model->BSIM4v6rbpbxl = 0.0; if (!model->BSIM4v6rbpbxwGiven) model->BSIM4v6rbpbxw = 0.0; if (!model->BSIM4v6rbpbxnfGiven) model->BSIM4v6rbpbxnf = 0.0; if (!model->BSIM4v6rbpby0Given) model->BSIM4v6rbpby0 = 100.0; if (!model->BSIM4v6rbpbylGiven) model->BSIM4v6rbpbyl = 0.0; if (!model->BSIM4v6rbpbywGiven) model->BSIM4v6rbpbyw = 0.0; if (!model->BSIM4v6rbpbynfGiven) model->BSIM4v6rbpbynf = 0.0; if (!model->BSIM4v6rbsbx0Given) model->BSIM4v6rbsbx0 = 100.0; if (!model->BSIM4v6rbsby0Given) model->BSIM4v6rbsby0 = 100.0; if (!model->BSIM4v6rbdbx0Given) model->BSIM4v6rbdbx0 = 100.0; if (!model->BSIM4v6rbdby0Given) model->BSIM4v6rbdby0 = 100.0; if (!model->BSIM4v6rbsdbxlGiven) model->BSIM4v6rbsdbxl = 0.0; if (!model->BSIM4v6rbsdbxwGiven) model->BSIM4v6rbsdbxw = 0.0; if (!model->BSIM4v6rbsdbxnfGiven) model->BSIM4v6rbsdbxnf = 0.0; if (!model->BSIM4v6rbsdbylGiven) model->BSIM4v6rbsdbyl = 0.0; if (!model->BSIM4v6rbsdbywGiven) model->BSIM4v6rbsdbyw = 0.0; if (!model->BSIM4v6rbsdbynfGiven) model->BSIM4v6rbsdbynf = 0.0; if (!model->BSIM4v6cgslGiven) model->BSIM4v6cgsl = 0.0; if (!model->BSIM4v6cgdlGiven) model->BSIM4v6cgdl = 0.0; if (!model->BSIM4v6ckappasGiven) model->BSIM4v6ckappas = 0.6; if (!model->BSIM4v6ckappadGiven) model->BSIM4v6ckappad = model->BSIM4v6ckappas; if (!model->BSIM4v6clcGiven) model->BSIM4v6clc = 0.1e-6; if (!model->BSIM4v6cleGiven) model->BSIM4v6cle = 0.6; if (!model->BSIM4v6vfbcvGiven) model->BSIM4v6vfbcv = -1.0; if (!model->BSIM4v6acdeGiven) model->BSIM4v6acde = 1.0; if (!model->BSIM4v6moinGiven) model->BSIM4v6moin = 15.0; if (!model->BSIM4v6noffGiven) model->BSIM4v6noff = 1.0; if (!model->BSIM4v6voffcvGiven) model->BSIM4v6voffcv = 0.0; if (!model->BSIM4v6dmcgGiven) model->BSIM4v6dmcg = 0.0; if (!model->BSIM4v6dmciGiven) model->BSIM4v6dmci = model->BSIM4v6dmcg; if (!model->BSIM4v6dmdgGiven) model->BSIM4v6dmdg = 0.0; if (!model->BSIM4v6dmcgtGiven) model->BSIM4v6dmcgt = 0.0; if (!model->BSIM4v6xgwGiven) model->BSIM4v6xgw = 0.0; if (!model->BSIM4v6xglGiven) model->BSIM4v6xgl = 0.0; if (!model->BSIM4v6rshgGiven) model->BSIM4v6rshg = 0.1; if (!model->BSIM4v6ngconGiven) model->BSIM4v6ngcon = 1.0; if (!model->BSIM4v6tcjGiven) model->BSIM4v6tcj = 0.0; if (!model->BSIM4v6tpbGiven) model->BSIM4v6tpb = 0.0; if (!model->BSIM4v6tcjswGiven) model->BSIM4v6tcjsw = 0.0; if (!model->BSIM4v6tpbswGiven) model->BSIM4v6tpbsw = 0.0; if (!model->BSIM4v6tcjswgGiven) model->BSIM4v6tcjswg = 0.0; if (!model->BSIM4v6tpbswgGiven) model->BSIM4v6tpbswg = 0.0; /* Length dependence */ if (!model->BSIM4v6lcdscGiven) model->BSIM4v6lcdsc = 0.0; if (!model->BSIM4v6lcdscbGiven) model->BSIM4v6lcdscb = 0.0; if (!model->BSIM4v6lcdscdGiven) model->BSIM4v6lcdscd = 0.0; if (!model->BSIM4v6lcitGiven) model->BSIM4v6lcit = 0.0; if (!model->BSIM4v6lnfactorGiven) model->BSIM4v6lnfactor = 0.0; if (!model->BSIM4v6lxjGiven) model->BSIM4v6lxj = 0.0; if (!model->BSIM4v6lvsatGiven) model->BSIM4v6lvsat = 0.0; if (!model->BSIM4v6latGiven) model->BSIM4v6lat = 0.0; if (!model->BSIM4v6la0Given) model->BSIM4v6la0 = 0.0; if (!model->BSIM4v6lagsGiven) model->BSIM4v6lags = 0.0; if (!model->BSIM4v6la1Given) model->BSIM4v6la1 = 0.0; if (!model->BSIM4v6la2Given) model->BSIM4v6la2 = 0.0; if (!model->BSIM4v6lketaGiven) model->BSIM4v6lketa = 0.0; if (!model->BSIM4v6lnsubGiven) model->BSIM4v6lnsub = 0.0; if (!model->BSIM4v6lndepGiven) model->BSIM4v6lndep = 0.0; if (!model->BSIM4v6lnsdGiven) model->BSIM4v6lnsd = 0.0; if (!model->BSIM4v6lphinGiven) model->BSIM4v6lphin = 0.0; if (!model->BSIM4v6lngateGiven) model->BSIM4v6lngate = 0.0; if (!model->BSIM4v6lvbmGiven) model->BSIM4v6lvbm = 0.0; if (!model->BSIM4v6lxtGiven) model->BSIM4v6lxt = 0.0; if (!model->BSIM4v6lkt1Given) model->BSIM4v6lkt1 = 0.0; if (!model->BSIM4v6lkt1lGiven) model->BSIM4v6lkt1l = 0.0; if (!model->BSIM4v6lkt2Given) model->BSIM4v6lkt2 = 0.0; if (!model->BSIM4v6lk3Given) model->BSIM4v6lk3 = 0.0; if (!model->BSIM4v6lk3bGiven) model->BSIM4v6lk3b = 0.0; if (!model->BSIM4v6lw0Given) model->BSIM4v6lw0 = 0.0; if (!model->BSIM4v6llpe0Given) model->BSIM4v6llpe0 = 0.0; if (!model->BSIM4v6llpebGiven) model->BSIM4v6llpeb = 0.0; if (!model->BSIM4v6ldvtp0Given) model->BSIM4v6ldvtp0 = 0.0; if (!model->BSIM4v6ldvtp1Given) model->BSIM4v6ldvtp1 = 0.0; if (!model->BSIM4v6ldvt0Given) model->BSIM4v6ldvt0 = 0.0; if (!model->BSIM4v6ldvt1Given) model->BSIM4v6ldvt1 = 0.0; if (!model->BSIM4v6ldvt2Given) model->BSIM4v6ldvt2 = 0.0; if (!model->BSIM4v6ldvt0wGiven) model->BSIM4v6ldvt0w = 0.0; if (!model->BSIM4v6ldvt1wGiven) model->BSIM4v6ldvt1w = 0.0; if (!model->BSIM4v6ldvt2wGiven) model->BSIM4v6ldvt2w = 0.0; if (!model->BSIM4v6ldroutGiven) model->BSIM4v6ldrout = 0.0; if (!model->BSIM4v6ldsubGiven) model->BSIM4v6ldsub = 0.0; if (!model->BSIM4v6lvth0Given) model->BSIM4v6lvth0 = 0.0; if (!model->BSIM4v6luaGiven) model->BSIM4v6lua = 0.0; if (!model->BSIM4v6lua1Given) model->BSIM4v6lua1 = 0.0; if (!model->BSIM4v6lubGiven) model->BSIM4v6lub = 0.0; if (!model->BSIM4v6lub1Given) model->BSIM4v6lub1 = 0.0; if (!model->BSIM4v6lucGiven) model->BSIM4v6luc = 0.0; if (!model->BSIM4v6luc1Given) model->BSIM4v6luc1 = 0.0; if (!model->BSIM4v6ludGiven) model->BSIM4v6lud = 0.0; if (!model->BSIM4v6lud1Given) model->BSIM4v6lud1 = 0.0; if (!model->BSIM4v6lupGiven) model->BSIM4v6lup = 0.0; if (!model->BSIM4v6llpGiven) model->BSIM4v6llp = 0.0; if (!model->BSIM4v6lu0Given) model->BSIM4v6lu0 = 0.0; if (!model->BSIM4v6luteGiven) model->BSIM4v6lute = 0.0; if (!model->BSIM4v6lucsteGiven) model->BSIM4v6lucste = 0.0; if (!model->BSIM4v6lvoffGiven) model->BSIM4v6lvoff = 0.0; if (!model->BSIM4v6lminvGiven) model->BSIM4v6lminv = 0.0; if (!model->BSIM4v6lminvcvGiven) model->BSIM4v6lminvcv = 0.0; if (!model->BSIM4v6lfproutGiven) model->BSIM4v6lfprout = 0.0; if (!model->BSIM4v6lpditsGiven) model->BSIM4v6lpdits = 0.0; if (!model->BSIM4v6lpditsdGiven) model->BSIM4v6lpditsd = 0.0; if (!model->BSIM4v6ldeltaGiven) model->BSIM4v6ldelta = 0.0; if (!model->BSIM4v6lrdswGiven) model->BSIM4v6lrdsw = 0.0; if (!model->BSIM4v6lrdwGiven) model->BSIM4v6lrdw = 0.0; if (!model->BSIM4v6lrswGiven) model->BSIM4v6lrsw = 0.0; if (!model->BSIM4v6lprwbGiven) model->BSIM4v6lprwb = 0.0; if (!model->BSIM4v6lprwgGiven) model->BSIM4v6lprwg = 0.0; if (!model->BSIM4v6lprtGiven) model->BSIM4v6lprt = 0.0; if (!model->BSIM4v6leta0Given) model->BSIM4v6leta0 = 0.0; if (!model->BSIM4v6letabGiven) model->BSIM4v6letab = -0.0; if (!model->BSIM4v6lpclmGiven) model->BSIM4v6lpclm = 0.0; if (!model->BSIM4v6lpdibl1Given) model->BSIM4v6lpdibl1 = 0.0; if (!model->BSIM4v6lpdibl2Given) model->BSIM4v6lpdibl2 = 0.0; if (!model->BSIM4v6lpdiblbGiven) model->BSIM4v6lpdiblb = 0.0; if (!model->BSIM4v6lpscbe1Given) model->BSIM4v6lpscbe1 = 0.0; if (!model->BSIM4v6lpscbe2Given) model->BSIM4v6lpscbe2 = 0.0; if (!model->BSIM4v6lpvagGiven) model->BSIM4v6lpvag = 0.0; if (!model->BSIM4v6lwrGiven) model->BSIM4v6lwr = 0.0; if (!model->BSIM4v6ldwgGiven) model->BSIM4v6ldwg = 0.0; if (!model->BSIM4v6ldwbGiven) model->BSIM4v6ldwb = 0.0; if (!model->BSIM4v6lb0Given) model->BSIM4v6lb0 = 0.0; if (!model->BSIM4v6lb1Given) model->BSIM4v6lb1 = 0.0; if (!model->BSIM4v6lalpha0Given) model->BSIM4v6lalpha0 = 0.0; if (!model->BSIM4v6lalpha1Given) model->BSIM4v6lalpha1 = 0.0; if (!model->BSIM4v6lbeta0Given) model->BSIM4v6lbeta0 = 0.0; if (!model->BSIM4v6lagidlGiven) model->BSIM4v6lagidl = 0.0; if (!model->BSIM4v6lbgidlGiven) model->BSIM4v6lbgidl = 0.0; if (!model->BSIM4v6lcgidlGiven) model->BSIM4v6lcgidl = 0.0; if (!model->BSIM4v6legidlGiven) model->BSIM4v6legidl = 0.0; if (!model->BSIM4v6lagislGiven) { if (model->BSIM4v6lagidlGiven) model->BSIM4v6lagisl = model->BSIM4v6lagidl; else model->BSIM4v6lagisl = 0.0; } if (!model->BSIM4v6lbgislGiven) { if (model->BSIM4v6lbgidlGiven) model->BSIM4v6lbgisl = model->BSIM4v6lbgidl; else model->BSIM4v6lbgisl = 0.0; } if (!model->BSIM4v6lcgislGiven) { if (model->BSIM4v6lcgidlGiven) model->BSIM4v6lcgisl = model->BSIM4v6lcgidl; else model->BSIM4v6lcgisl = 0.0; } if (!model->BSIM4v6legislGiven) { if (model->BSIM4v6legidlGiven) model->BSIM4v6legisl = model->BSIM4v6legidl; else model->BSIM4v6legisl = 0.0; } if (!model->BSIM4v6laigcGiven) model->BSIM4v6laigc = 0.0; if (!model->BSIM4v6lbigcGiven) model->BSIM4v6lbigc = 0.0; if (!model->BSIM4v6lcigcGiven) model->BSIM4v6lcigc = 0.0; if (!model->BSIM4v6aigsdGiven && (model->BSIM4v6aigsGiven || model->BSIM4v6aigdGiven)) { if (!model->BSIM4v6laigsGiven) model->BSIM4v6laigs = 0.0; if (!model->BSIM4v6laigdGiven) model->BSIM4v6laigd = 0.0; } else { if (!model->BSIM4v6laigsdGiven) model->BSIM4v6laigsd = 0.0; model->BSIM4v6laigs = model->BSIM4v6laigd = model->BSIM4v6laigsd; } if (!model->BSIM4v6bigsdGiven && (model->BSIM4v6bigsGiven || model->BSIM4v6bigdGiven)) { if (!model->BSIM4v6lbigsGiven) model->BSIM4v6lbigs = 0.0; if (!model->BSIM4v6lbigdGiven) model->BSIM4v6lbigd = 0.0; } else { if (!model->BSIM4v6lbigsdGiven) model->BSIM4v6lbigsd = 0.0; model->BSIM4v6lbigs = model->BSIM4v6lbigd = model->BSIM4v6lbigsd; } if (!model->BSIM4v6cigsdGiven && (model->BSIM4v6cigsGiven || model->BSIM4v6cigdGiven)) { if (!model->BSIM4v6lcigsGiven) model->BSIM4v6lcigs = 0.0; if (!model->BSIM4v6lcigdGiven) model->BSIM4v6lcigd = 0.0; } else { if (!model->BSIM4v6lcigsdGiven) model->BSIM4v6lcigsd = 0.0; model->BSIM4v6lcigs = model->BSIM4v6lcigd = model->BSIM4v6lcigsd; } if (!model->BSIM4v6laigbaccGiven) model->BSIM4v6laigbacc = 0.0; if (!model->BSIM4v6lbigbaccGiven) model->BSIM4v6lbigbacc = 0.0; if (!model->BSIM4v6lcigbaccGiven) model->BSIM4v6lcigbacc = 0.0; if (!model->BSIM4v6laigbinvGiven) model->BSIM4v6laigbinv = 0.0; if (!model->BSIM4v6lbigbinvGiven) model->BSIM4v6lbigbinv = 0.0; if (!model->BSIM4v6lcigbinvGiven) model->BSIM4v6lcigbinv = 0.0; if (!model->BSIM4v6lnigcGiven) model->BSIM4v6lnigc = 0.0; if (!model->BSIM4v6lnigbinvGiven) model->BSIM4v6lnigbinv = 0.0; if (!model->BSIM4v6lnigbaccGiven) model->BSIM4v6lnigbacc = 0.0; if (!model->BSIM4v6lntoxGiven) model->BSIM4v6lntox = 0.0; if (!model->BSIM4v6leigbinvGiven) model->BSIM4v6leigbinv = 0.0; if (!model->BSIM4v6lpigcdGiven) model->BSIM4v6lpigcd = 0.0; if (!model->BSIM4v6lpoxedgeGiven) model->BSIM4v6lpoxedge = 0.0; if (!model->BSIM4v6lxrcrg1Given) model->BSIM4v6lxrcrg1 = 0.0; if (!model->BSIM4v6lxrcrg2Given) model->BSIM4v6lxrcrg2 = 0.0; if (!model->BSIM4v6leuGiven) model->BSIM4v6leu = 0.0; if (!model->BSIM4v6lucsGiven) model->BSIM4v6lucs = 0.0; if (!model->BSIM4v6lvfbGiven) model->BSIM4v6lvfb = 0.0; if (!model->BSIM4v6llambdaGiven) model->BSIM4v6llambda = 0.0; if (!model->BSIM4v6lvtlGiven) model->BSIM4v6lvtl = 0.0; if (!model->BSIM4v6lxnGiven) model->BSIM4v6lxn = 0.0; if (!model->BSIM4v6lvfbsdoffGiven) model->BSIM4v6lvfbsdoff = 0.0; if (!model->BSIM4v6ltvfbsdoffGiven) model->BSIM4v6ltvfbsdoff = 0.0; if (!model->BSIM4v6ltvoffGiven) model->BSIM4v6ltvoff = 0.0; if (!model->BSIM4v6lcgslGiven) model->BSIM4v6lcgsl = 0.0; if (!model->BSIM4v6lcgdlGiven) model->BSIM4v6lcgdl = 0.0; if (!model->BSIM4v6lckappasGiven) model->BSIM4v6lckappas = 0.0; if (!model->BSIM4v6lckappadGiven) model->BSIM4v6lckappad = 0.0; if (!model->BSIM4v6lclcGiven) model->BSIM4v6lclc = 0.0; if (!model->BSIM4v6lcleGiven) model->BSIM4v6lcle = 0.0; if (!model->BSIM4v6lcfGiven) model->BSIM4v6lcf = 0.0; if (!model->BSIM4v6lvfbcvGiven) model->BSIM4v6lvfbcv = 0.0; if (!model->BSIM4v6lacdeGiven) model->BSIM4v6lacde = 0.0; if (!model->BSIM4v6lmoinGiven) model->BSIM4v6lmoin = 0.0; if (!model->BSIM4v6lnoffGiven) model->BSIM4v6lnoff = 0.0; if (!model->BSIM4v6lvoffcvGiven) model->BSIM4v6lvoffcv = 0.0; /* Width dependence */ if (!model->BSIM4v6wcdscGiven) model->BSIM4v6wcdsc = 0.0; if (!model->BSIM4v6wcdscbGiven) model->BSIM4v6wcdscb = 0.0; if (!model->BSIM4v6wcdscdGiven) model->BSIM4v6wcdscd = 0.0; if (!model->BSIM4v6wcitGiven) model->BSIM4v6wcit = 0.0; if (!model->BSIM4v6wnfactorGiven) model->BSIM4v6wnfactor = 0.0; if (!model->BSIM4v6wxjGiven) model->BSIM4v6wxj = 0.0; if (!model->BSIM4v6wvsatGiven) model->BSIM4v6wvsat = 0.0; if (!model->BSIM4v6watGiven) model->BSIM4v6wat = 0.0; if (!model->BSIM4v6wa0Given) model->BSIM4v6wa0 = 0.0; if (!model->BSIM4v6wagsGiven) model->BSIM4v6wags = 0.0; if (!model->BSIM4v6wa1Given) model->BSIM4v6wa1 = 0.0; if (!model->BSIM4v6wa2Given) model->BSIM4v6wa2 = 0.0; if (!model->BSIM4v6wketaGiven) model->BSIM4v6wketa = 0.0; if (!model->BSIM4v6wnsubGiven) model->BSIM4v6wnsub = 0.0; if (!model->BSIM4v6wndepGiven) model->BSIM4v6wndep = 0.0; if (!model->BSIM4v6wnsdGiven) model->BSIM4v6wnsd = 0.0; if (!model->BSIM4v6wphinGiven) model->BSIM4v6wphin = 0.0; if (!model->BSIM4v6wngateGiven) model->BSIM4v6wngate = 0.0; if (!model->BSIM4v6wvbmGiven) model->BSIM4v6wvbm = 0.0; if (!model->BSIM4v6wxtGiven) model->BSIM4v6wxt = 0.0; if (!model->BSIM4v6wkt1Given) model->BSIM4v6wkt1 = 0.0; if (!model->BSIM4v6wkt1lGiven) model->BSIM4v6wkt1l = 0.0; if (!model->BSIM4v6wkt2Given) model->BSIM4v6wkt2 = 0.0; if (!model->BSIM4v6wk3Given) model->BSIM4v6wk3 = 0.0; if (!model->BSIM4v6wk3bGiven) model->BSIM4v6wk3b = 0.0; if (!model->BSIM4v6ww0Given) model->BSIM4v6ww0 = 0.0; if (!model->BSIM4v6wlpe0Given) model->BSIM4v6wlpe0 = 0.0; if (!model->BSIM4v6wlpebGiven) model->BSIM4v6wlpeb = 0.0; if (!model->BSIM4v6wdvtp0Given) model->BSIM4v6wdvtp0 = 0.0; if (!model->BSIM4v6wdvtp1Given) model->BSIM4v6wdvtp1 = 0.0; if (!model->BSIM4v6wdvt0Given) model->BSIM4v6wdvt0 = 0.0; if (!model->BSIM4v6wdvt1Given) model->BSIM4v6wdvt1 = 0.0; if (!model->BSIM4v6wdvt2Given) model->BSIM4v6wdvt2 = 0.0; if (!model->BSIM4v6wdvt0wGiven) model->BSIM4v6wdvt0w = 0.0; if (!model->BSIM4v6wdvt1wGiven) model->BSIM4v6wdvt1w = 0.0; if (!model->BSIM4v6wdvt2wGiven) model->BSIM4v6wdvt2w = 0.0; if (!model->BSIM4v6wdroutGiven) model->BSIM4v6wdrout = 0.0; if (!model->BSIM4v6wdsubGiven) model->BSIM4v6wdsub = 0.0; if (!model->BSIM4v6wvth0Given) model->BSIM4v6wvth0 = 0.0; if (!model->BSIM4v6wuaGiven) model->BSIM4v6wua = 0.0; if (!model->BSIM4v6wua1Given) model->BSIM4v6wua1 = 0.0; if (!model->BSIM4v6wubGiven) model->BSIM4v6wub = 0.0; if (!model->BSIM4v6wub1Given) model->BSIM4v6wub1 = 0.0; if (!model->BSIM4v6wucGiven) model->BSIM4v6wuc = 0.0; if (!model->BSIM4v6wuc1Given) model->BSIM4v6wuc1 = 0.0; if (!model->BSIM4v6wudGiven) model->BSIM4v6wud = 0.0; if (!model->BSIM4v6wud1Given) model->BSIM4v6wud1 = 0.0; if (!model->BSIM4v6wupGiven) model->BSIM4v6wup = 0.0; if (!model->BSIM4v6wlpGiven) model->BSIM4v6wlp = 0.0; if (!model->BSIM4v6wu0Given) model->BSIM4v6wu0 = 0.0; if (!model->BSIM4v6wuteGiven) model->BSIM4v6wute = 0.0; if (!model->BSIM4v6wucsteGiven) model->BSIM4v6wucste = 0.0; if (!model->BSIM4v6wvoffGiven) model->BSIM4v6wvoff = 0.0; if (!model->BSIM4v6wminvGiven) model->BSIM4v6wminv = 0.0; if (!model->BSIM4v6wminvcvGiven) model->BSIM4v6wminvcv = 0.0; if (!model->BSIM4v6wfproutGiven) model->BSIM4v6wfprout = 0.0; if (!model->BSIM4v6wpditsGiven) model->BSIM4v6wpdits = 0.0; if (!model->BSIM4v6wpditsdGiven) model->BSIM4v6wpditsd = 0.0; if (!model->BSIM4v6wdeltaGiven) model->BSIM4v6wdelta = 0.0; if (!model->BSIM4v6wrdswGiven) model->BSIM4v6wrdsw = 0.0; if (!model->BSIM4v6wrdwGiven) model->BSIM4v6wrdw = 0.0; if (!model->BSIM4v6wrswGiven) model->BSIM4v6wrsw = 0.0; if (!model->BSIM4v6wprwbGiven) model->BSIM4v6wprwb = 0.0; if (!model->BSIM4v6wprwgGiven) model->BSIM4v6wprwg = 0.0; if (!model->BSIM4v6wprtGiven) model->BSIM4v6wprt = 0.0; if (!model->BSIM4v6weta0Given) model->BSIM4v6weta0 = 0.0; if (!model->BSIM4v6wetabGiven) model->BSIM4v6wetab = 0.0; if (!model->BSIM4v6wpclmGiven) model->BSIM4v6wpclm = 0.0; if (!model->BSIM4v6wpdibl1Given) model->BSIM4v6wpdibl1 = 0.0; if (!model->BSIM4v6wpdibl2Given) model->BSIM4v6wpdibl2 = 0.0; if (!model->BSIM4v6wpdiblbGiven) model->BSIM4v6wpdiblb = 0.0; if (!model->BSIM4v6wpscbe1Given) model->BSIM4v6wpscbe1 = 0.0; if (!model->BSIM4v6wpscbe2Given) model->BSIM4v6wpscbe2 = 0.0; if (!model->BSIM4v6wpvagGiven) model->BSIM4v6wpvag = 0.0; if (!model->BSIM4v6wwrGiven) model->BSIM4v6wwr = 0.0; if (!model->BSIM4v6wdwgGiven) model->BSIM4v6wdwg = 0.0; if (!model->BSIM4v6wdwbGiven) model->BSIM4v6wdwb = 0.0; if (!model->BSIM4v6wb0Given) model->BSIM4v6wb0 = 0.0; if (!model->BSIM4v6wb1Given) model->BSIM4v6wb1 = 0.0; if (!model->BSIM4v6walpha0Given) model->BSIM4v6walpha0 = 0.0; if (!model->BSIM4v6walpha1Given) model->BSIM4v6walpha1 = 0.0; if (!model->BSIM4v6wbeta0Given) model->BSIM4v6wbeta0 = 0.0; if (!model->BSIM4v6wagidlGiven) model->BSIM4v6wagidl = 0.0; if (!model->BSIM4v6wbgidlGiven) model->BSIM4v6wbgidl = 0.0; if (!model->BSIM4v6wcgidlGiven) model->BSIM4v6wcgidl = 0.0; if (!model->BSIM4v6wegidlGiven) model->BSIM4v6wegidl = 0.0; if (!model->BSIM4v6wagislGiven) { if (model->BSIM4v6wagidlGiven) model->BSIM4v6wagisl = model->BSIM4v6wagidl; else model->BSIM4v6wagisl = 0.0; } if (!model->BSIM4v6wbgislGiven) { if (model->BSIM4v6wbgidlGiven) model->BSIM4v6wbgisl = model->BSIM4v6wbgidl; else model->BSIM4v6wbgisl = 0.0; } if (!model->BSIM4v6wcgislGiven) { if (model->BSIM4v6wcgidlGiven) model->BSIM4v6wcgisl = model->BSIM4v6wcgidl; else model->BSIM4v6wcgisl = 0.0; } if (!model->BSIM4v6wegislGiven) { if (model->BSIM4v6wegidlGiven) model->BSIM4v6wegisl = model->BSIM4v6wegidl; else model->BSIM4v6wegisl = 0.0; } if (!model->BSIM4v6waigcGiven) model->BSIM4v6waigc = 0.0; if (!model->BSIM4v6wbigcGiven) model->BSIM4v6wbigc = 0.0; if (!model->BSIM4v6wcigcGiven) model->BSIM4v6wcigc = 0.0; if (!model->BSIM4v6aigsdGiven && (model->BSIM4v6aigsGiven || model->BSIM4v6aigdGiven)) { if (!model->BSIM4v6waigsGiven) model->BSIM4v6waigs = 0.0; if (!model->BSIM4v6waigdGiven) model->BSIM4v6waigd = 0.0; } else { if (!model->BSIM4v6waigsdGiven) model->BSIM4v6waigsd = 0.0; model->BSIM4v6waigs = model->BSIM4v6waigd = model->BSIM4v6waigsd; } if (!model->BSIM4v6bigsdGiven && (model->BSIM4v6bigsGiven || model->BSIM4v6bigdGiven)) { if (!model->BSIM4v6wbigsGiven) model->BSIM4v6wbigs = 0.0; if (!model->BSIM4v6wbigdGiven) model->BSIM4v6wbigd = 0.0; } else { if (!model->BSIM4v6wbigsdGiven) model->BSIM4v6wbigsd = 0.0; model->BSIM4v6wbigs = model->BSIM4v6wbigd = model->BSIM4v6wbigsd; } if (!model->BSIM4v6cigsdGiven && (model->BSIM4v6cigsGiven || model->BSIM4v6cigdGiven)) { if (!model->BSIM4v6wcigsGiven) model->BSIM4v6wcigs = 0.0; if (!model->BSIM4v6wcigdGiven) model->BSIM4v6wcigd = 0.0; } else { if (!model->BSIM4v6wcigsdGiven) model->BSIM4v6wcigsd = 0.0; model->BSIM4v6wcigs = model->BSIM4v6wcigd = model->BSIM4v6wcigsd; } if (!model->BSIM4v6waigbaccGiven) model->BSIM4v6waigbacc = 0.0; if (!model->BSIM4v6wbigbaccGiven) model->BSIM4v6wbigbacc = 0.0; if (!model->BSIM4v6wcigbaccGiven) model->BSIM4v6wcigbacc = 0.0; if (!model->BSIM4v6waigbinvGiven) model->BSIM4v6waigbinv = 0.0; if (!model->BSIM4v6wbigbinvGiven) model->BSIM4v6wbigbinv = 0.0; if (!model->BSIM4v6wcigbinvGiven) model->BSIM4v6wcigbinv = 0.0; if (!model->BSIM4v6wnigcGiven) model->BSIM4v6wnigc = 0.0; if (!model->BSIM4v6wnigbinvGiven) model->BSIM4v6wnigbinv = 0.0; if (!model->BSIM4v6wnigbaccGiven) model->BSIM4v6wnigbacc = 0.0; if (!model->BSIM4v6wntoxGiven) model->BSIM4v6wntox = 0.0; if (!model->BSIM4v6weigbinvGiven) model->BSIM4v6weigbinv = 0.0; if (!model->BSIM4v6wpigcdGiven) model->BSIM4v6wpigcd = 0.0; if (!model->BSIM4v6wpoxedgeGiven) model->BSIM4v6wpoxedge = 0.0; if (!model->BSIM4v6wxrcrg1Given) model->BSIM4v6wxrcrg1 = 0.0; if (!model->BSIM4v6wxrcrg2Given) model->BSIM4v6wxrcrg2 = 0.0; if (!model->BSIM4v6weuGiven) model->BSIM4v6weu = 0.0; if (!model->BSIM4v6wucsGiven) model->BSIM4v6wucs = 0.0; if (!model->BSIM4v6wvfbGiven) model->BSIM4v6wvfb = 0.0; if (!model->BSIM4v6wlambdaGiven) model->BSIM4v6wlambda = 0.0; if (!model->BSIM4v6wvtlGiven) model->BSIM4v6wvtl = 0.0; if (!model->BSIM4v6wxnGiven) model->BSIM4v6wxn = 0.0; if (!model->BSIM4v6wvfbsdoffGiven) model->BSIM4v6wvfbsdoff = 0.0; if (!model->BSIM4v6wtvfbsdoffGiven) model->BSIM4v6wtvfbsdoff = 0.0; if (!model->BSIM4v6wtvoffGiven) model->BSIM4v6wtvoff = 0.0; if (!model->BSIM4v6wcgslGiven) model->BSIM4v6wcgsl = 0.0; if (!model->BSIM4v6wcgdlGiven) model->BSIM4v6wcgdl = 0.0; if (!model->BSIM4v6wckappasGiven) model->BSIM4v6wckappas = 0.0; if (!model->BSIM4v6wckappadGiven) model->BSIM4v6wckappad = 0.0; if (!model->BSIM4v6wcfGiven) model->BSIM4v6wcf = 0.0; if (!model->BSIM4v6wclcGiven) model->BSIM4v6wclc = 0.0; if (!model->BSIM4v6wcleGiven) model->BSIM4v6wcle = 0.0; if (!model->BSIM4v6wvfbcvGiven) model->BSIM4v6wvfbcv = 0.0; if (!model->BSIM4v6wacdeGiven) model->BSIM4v6wacde = 0.0; if (!model->BSIM4v6wmoinGiven) model->BSIM4v6wmoin = 0.0; if (!model->BSIM4v6wnoffGiven) model->BSIM4v6wnoff = 0.0; if (!model->BSIM4v6wvoffcvGiven) model->BSIM4v6wvoffcv = 0.0; /* Cross-term dependence */ if (!model->BSIM4v6pcdscGiven) model->BSIM4v6pcdsc = 0.0; if (!model->BSIM4v6pcdscbGiven) model->BSIM4v6pcdscb = 0.0; if (!model->BSIM4v6pcdscdGiven) model->BSIM4v6pcdscd = 0.0; if (!model->BSIM4v6pcitGiven) model->BSIM4v6pcit = 0.0; if (!model->BSIM4v6pnfactorGiven) model->BSIM4v6pnfactor = 0.0; if (!model->BSIM4v6pxjGiven) model->BSIM4v6pxj = 0.0; if (!model->BSIM4v6pvsatGiven) model->BSIM4v6pvsat = 0.0; if (!model->BSIM4v6patGiven) model->BSIM4v6pat = 0.0; if (!model->BSIM4v6pa0Given) model->BSIM4v6pa0 = 0.0; if (!model->BSIM4v6pagsGiven) model->BSIM4v6pags = 0.0; if (!model->BSIM4v6pa1Given) model->BSIM4v6pa1 = 0.0; if (!model->BSIM4v6pa2Given) model->BSIM4v6pa2 = 0.0; if (!model->BSIM4v6pketaGiven) model->BSIM4v6pketa = 0.0; if (!model->BSIM4v6pnsubGiven) model->BSIM4v6pnsub = 0.0; if (!model->BSIM4v6pndepGiven) model->BSIM4v6pndep = 0.0; if (!model->BSIM4v6pnsdGiven) model->BSIM4v6pnsd = 0.0; if (!model->BSIM4v6pphinGiven) model->BSIM4v6pphin = 0.0; if (!model->BSIM4v6pngateGiven) model->BSIM4v6pngate = 0.0; if (!model->BSIM4v6pvbmGiven) model->BSIM4v6pvbm = 0.0; if (!model->BSIM4v6pxtGiven) model->BSIM4v6pxt = 0.0; if (!model->BSIM4v6pkt1Given) model->BSIM4v6pkt1 = 0.0; if (!model->BSIM4v6pkt1lGiven) model->BSIM4v6pkt1l = 0.0; if (!model->BSIM4v6pkt2Given) model->BSIM4v6pkt2 = 0.0; if (!model->BSIM4v6pk3Given) model->BSIM4v6pk3 = 0.0; if (!model->BSIM4v6pk3bGiven) model->BSIM4v6pk3b = 0.0; if (!model->BSIM4v6pw0Given) model->BSIM4v6pw0 = 0.0; if (!model->BSIM4v6plpe0Given) model->BSIM4v6plpe0 = 0.0; if (!model->BSIM4v6plpebGiven) model->BSIM4v6plpeb = 0.0; if (!model->BSIM4v6pdvtp0Given) model->BSIM4v6pdvtp0 = 0.0; if (!model->BSIM4v6pdvtp1Given) model->BSIM4v6pdvtp1 = 0.0; if (!model->BSIM4v6pdvt0Given) model->BSIM4v6pdvt0 = 0.0; if (!model->BSIM4v6pdvt1Given) model->BSIM4v6pdvt1 = 0.0; if (!model->BSIM4v6pdvt2Given) model->BSIM4v6pdvt2 = 0.0; if (!model->BSIM4v6pdvt0wGiven) model->BSIM4v6pdvt0w = 0.0; if (!model->BSIM4v6pdvt1wGiven) model->BSIM4v6pdvt1w = 0.0; if (!model->BSIM4v6pdvt2wGiven) model->BSIM4v6pdvt2w = 0.0; if (!model->BSIM4v6pdroutGiven) model->BSIM4v6pdrout = 0.0; if (!model->BSIM4v6pdsubGiven) model->BSIM4v6pdsub = 0.0; if (!model->BSIM4v6pvth0Given) model->BSIM4v6pvth0 = 0.0; if (!model->BSIM4v6puaGiven) model->BSIM4v6pua = 0.0; if (!model->BSIM4v6pua1Given) model->BSIM4v6pua1 = 0.0; if (!model->BSIM4v6pubGiven) model->BSIM4v6pub = 0.0; if (!model->BSIM4v6pub1Given) model->BSIM4v6pub1 = 0.0; if (!model->BSIM4v6pucGiven) model->BSIM4v6puc = 0.0; if (!model->BSIM4v6puc1Given) model->BSIM4v6puc1 = 0.0; if (!model->BSIM4v6pudGiven) model->BSIM4v6pud = 0.0; if (!model->BSIM4v6pud1Given) model->BSIM4v6pud1 = 0.0; if (!model->BSIM4v6pupGiven) model->BSIM4v6pup = 0.0; if (!model->BSIM4v6plpGiven) model->BSIM4v6plp = 0.0; if (!model->BSIM4v6pu0Given) model->BSIM4v6pu0 = 0.0; if (!model->BSIM4v6puteGiven) model->BSIM4v6pute = 0.0; if (!model->BSIM4v6pucsteGiven) model->BSIM4v6pucste = 0.0; if (!model->BSIM4v6pvoffGiven) model->BSIM4v6pvoff = 0.0; if (!model->BSIM4v6pminvGiven) model->BSIM4v6pminv = 0.0; if (!model->BSIM4v6pminvcvGiven) model->BSIM4v6pminvcv = 0.0; if (!model->BSIM4v6pfproutGiven) model->BSIM4v6pfprout = 0.0; if (!model->BSIM4v6ppditsGiven) model->BSIM4v6ppdits = 0.0; if (!model->BSIM4v6ppditsdGiven) model->BSIM4v6ppditsd = 0.0; if (!model->BSIM4v6pdeltaGiven) model->BSIM4v6pdelta = 0.0; if (!model->BSIM4v6prdswGiven) model->BSIM4v6prdsw = 0.0; if (!model->BSIM4v6prdwGiven) model->BSIM4v6prdw = 0.0; if (!model->BSIM4v6prswGiven) model->BSIM4v6prsw = 0.0; if (!model->BSIM4v6pprwbGiven) model->BSIM4v6pprwb = 0.0; if (!model->BSIM4v6pprwgGiven) model->BSIM4v6pprwg = 0.0; if (!model->BSIM4v6pprtGiven) model->BSIM4v6pprt = 0.0; if (!model->BSIM4v6peta0Given) model->BSIM4v6peta0 = 0.0; if (!model->BSIM4v6petabGiven) model->BSIM4v6petab = 0.0; if (!model->BSIM4v6ppclmGiven) model->BSIM4v6ppclm = 0.0; if (!model->BSIM4v6ppdibl1Given) model->BSIM4v6ppdibl1 = 0.0; if (!model->BSIM4v6ppdibl2Given) model->BSIM4v6ppdibl2 = 0.0; if (!model->BSIM4v6ppdiblbGiven) model->BSIM4v6ppdiblb = 0.0; if (!model->BSIM4v6ppscbe1Given) model->BSIM4v6ppscbe1 = 0.0; if (!model->BSIM4v6ppscbe2Given) model->BSIM4v6ppscbe2 = 0.0; if (!model->BSIM4v6ppvagGiven) model->BSIM4v6ppvag = 0.0; if (!model->BSIM4v6pwrGiven) model->BSIM4v6pwr = 0.0; if (!model->BSIM4v6pdwgGiven) model->BSIM4v6pdwg = 0.0; if (!model->BSIM4v6pdwbGiven) model->BSIM4v6pdwb = 0.0; if (!model->BSIM4v6pb0Given) model->BSIM4v6pb0 = 0.0; if (!model->BSIM4v6pb1Given) model->BSIM4v6pb1 = 0.0; if (!model->BSIM4v6palpha0Given) model->BSIM4v6palpha0 = 0.0; if (!model->BSIM4v6palpha1Given) model->BSIM4v6palpha1 = 0.0; if (!model->BSIM4v6pbeta0Given) model->BSIM4v6pbeta0 = 0.0; if (!model->BSIM4v6pagidlGiven) model->BSIM4v6pagidl = 0.0; if (!model->BSIM4v6pbgidlGiven) model->BSIM4v6pbgidl = 0.0; if (!model->BSIM4v6pcgidlGiven) model->BSIM4v6pcgidl = 0.0; if (!model->BSIM4v6pegidlGiven) model->BSIM4v6pegidl = 0.0; if (!model->BSIM4v6pagislGiven) { if (model->BSIM4v6pagidlGiven) model->BSIM4v6pagisl = model->BSIM4v6pagidl; else model->BSIM4v6pagisl = 0.0; } if (!model->BSIM4v6pbgislGiven) { if (model->BSIM4v6pbgidlGiven) model->BSIM4v6pbgisl = model->BSIM4v6pbgidl; else model->BSIM4v6pbgisl = 0.0; } if (!model->BSIM4v6pcgislGiven) { if (model->BSIM4v6pcgidlGiven) model->BSIM4v6pcgisl = model->BSIM4v6pcgidl; else model->BSIM4v6pcgisl = 0.0; } if (!model->BSIM4v6pegislGiven) { if (model->BSIM4v6pegidlGiven) model->BSIM4v6pegisl = model->BSIM4v6pegidl; else model->BSIM4v6pegisl = 0.0; } if (!model->BSIM4v6paigcGiven) model->BSIM4v6paigc = 0.0; if (!model->BSIM4v6pbigcGiven) model->BSIM4v6pbigc = 0.0; if (!model->BSIM4v6pcigcGiven) model->BSIM4v6pcigc = 0.0; if (!model->BSIM4v6aigsdGiven && (model->BSIM4v6aigsGiven || model->BSIM4v6aigdGiven)) { if (!model->BSIM4v6paigsGiven) model->BSIM4v6paigs = 0.0; if (!model->BSIM4v6paigdGiven) model->BSIM4v6paigd = 0.0; } else { if (!model->BSIM4v6paigsdGiven) model->BSIM4v6paigsd = 0.0; model->BSIM4v6paigs = model->BSIM4v6paigd = model->BSIM4v6paigsd; } if (!model->BSIM4v6bigsdGiven && (model->BSIM4v6bigsGiven || model->BSIM4v6bigdGiven)) { if (!model->BSIM4v6pbigsGiven) model->BSIM4v6pbigs = 0.0; if (!model->BSIM4v6pbigdGiven) model->BSIM4v6pbigd = 0.0; } else { if (!model->BSIM4v6pbigsdGiven) model->BSIM4v6pbigsd = 0.0; model->BSIM4v6pbigs = model->BSIM4v6pbigd = model->BSIM4v6pbigsd; } if (!model->BSIM4v6cigsdGiven && (model->BSIM4v6cigsGiven || model->BSIM4v6cigdGiven)) { if (!model->BSIM4v6pcigsGiven) model->BSIM4v6pcigs = 0.0; if (!model->BSIM4v6pcigdGiven) model->BSIM4v6pcigd = 0.0; } else { if (!model->BSIM4v6pcigsdGiven) model->BSIM4v6pcigsd = 0.0; model->BSIM4v6pcigs = model->BSIM4v6pcigd = model->BSIM4v6pcigsd; } if (!model->BSIM4v6paigbaccGiven) model->BSIM4v6paigbacc = 0.0; if (!model->BSIM4v6pbigbaccGiven) model->BSIM4v6pbigbacc = 0.0; if (!model->BSIM4v6pcigbaccGiven) model->BSIM4v6pcigbacc = 0.0; if (!model->BSIM4v6paigbinvGiven) model->BSIM4v6paigbinv = 0.0; if (!model->BSIM4v6pbigbinvGiven) model->BSIM4v6pbigbinv = 0.0; if (!model->BSIM4v6pcigbinvGiven) model->BSIM4v6pcigbinv = 0.0; if (!model->BSIM4v6pnigcGiven) model->BSIM4v6pnigc = 0.0; if (!model->BSIM4v6pnigbinvGiven) model->BSIM4v6pnigbinv = 0.0; if (!model->BSIM4v6pnigbaccGiven) model->BSIM4v6pnigbacc = 0.0; if (!model->BSIM4v6pntoxGiven) model->BSIM4v6pntox = 0.0; if (!model->BSIM4v6peigbinvGiven) model->BSIM4v6peigbinv = 0.0; if (!model->BSIM4v6ppigcdGiven) model->BSIM4v6ppigcd = 0.0; if (!model->BSIM4v6ppoxedgeGiven) model->BSIM4v6ppoxedge = 0.0; if (!model->BSIM4v6pxrcrg1Given) model->BSIM4v6pxrcrg1 = 0.0; if (!model->BSIM4v6pxrcrg2Given) model->BSIM4v6pxrcrg2 = 0.0; if (!model->BSIM4v6peuGiven) model->BSIM4v6peu = 0.0; if (!model->BSIM4v6pucsGiven) model->BSIM4v6pucs = 0.0; if (!model->BSIM4v6pvfbGiven) model->BSIM4v6pvfb = 0.0; if (!model->BSIM4v6plambdaGiven) model->BSIM4v6plambda = 0.0; if (!model->BSIM4v6pvtlGiven) model->BSIM4v6pvtl = 0.0; if (!model->BSIM4v6pxnGiven) model->BSIM4v6pxn = 0.0; if (!model->BSIM4v6pvfbsdoffGiven) model->BSIM4v6pvfbsdoff = 0.0; if (!model->BSIM4v6ptvfbsdoffGiven) model->BSIM4v6ptvfbsdoff = 0.0; if (!model->BSIM4v6ptvoffGiven) model->BSIM4v6ptvoff = 0.0; if (!model->BSIM4v6pcgslGiven) model->BSIM4v6pcgsl = 0.0; if (!model->BSIM4v6pcgdlGiven) model->BSIM4v6pcgdl = 0.0; if (!model->BSIM4v6pckappasGiven) model->BSIM4v6pckappas = 0.0; if (!model->BSIM4v6pckappadGiven) model->BSIM4v6pckappad = 0.0; if (!model->BSIM4v6pcfGiven) model->BSIM4v6pcf = 0.0; if (!model->BSIM4v6pclcGiven) model->BSIM4v6pclc = 0.0; if (!model->BSIM4v6pcleGiven) model->BSIM4v6pcle = 0.0; if (!model->BSIM4v6pvfbcvGiven) model->BSIM4v6pvfbcv = 0.0; if (!model->BSIM4v6pacdeGiven) model->BSIM4v6pacde = 0.0; if (!model->BSIM4v6pmoinGiven) model->BSIM4v6pmoin = 0.0; if (!model->BSIM4v6pnoffGiven) model->BSIM4v6pnoff = 0.0; if (!model->BSIM4v6pvoffcvGiven) model->BSIM4v6pvoffcv = 0.0; if (!model->BSIM4v6gamma1Given) model->BSIM4v6gamma1 = 0.0; if (!model->BSIM4v6lgamma1Given) model->BSIM4v6lgamma1 = 0.0; if (!model->BSIM4v6wgamma1Given) model->BSIM4v6wgamma1 = 0.0; if (!model->BSIM4v6pgamma1Given) model->BSIM4v6pgamma1 = 0.0; if (!model->BSIM4v6gamma2Given) model->BSIM4v6gamma2 = 0.0; if (!model->BSIM4v6lgamma2Given) model->BSIM4v6lgamma2 = 0.0; if (!model->BSIM4v6wgamma2Given) model->BSIM4v6wgamma2 = 0.0; if (!model->BSIM4v6pgamma2Given) model->BSIM4v6pgamma2 = 0.0; if (!model->BSIM4v6vbxGiven) model->BSIM4v6vbx = 0.0; if (!model->BSIM4v6lvbxGiven) model->BSIM4v6lvbx = 0.0; if (!model->BSIM4v6wvbxGiven) model->BSIM4v6wvbx = 0.0; if (!model->BSIM4v6pvbxGiven) model->BSIM4v6pvbx = 0.0; /* unit degree celcius */ if (!model->BSIM4v6tnomGiven) model->BSIM4v6tnom = ckt->CKTnomTemp; if (!model->BSIM4v6LintGiven) model->BSIM4v6Lint = 0.0; if (!model->BSIM4v6LlGiven) model->BSIM4v6Ll = 0.0; if (!model->BSIM4v6LlcGiven) model->BSIM4v6Llc = model->BSIM4v6Ll; if (!model->BSIM4v6LlnGiven) model->BSIM4v6Lln = 1.0; if (!model->BSIM4v6LwGiven) model->BSIM4v6Lw = 0.0; if (!model->BSIM4v6LwcGiven) model->BSIM4v6Lwc = model->BSIM4v6Lw; if (!model->BSIM4v6LwnGiven) model->BSIM4v6Lwn = 1.0; if (!model->BSIM4v6LwlGiven) model->BSIM4v6Lwl = 0.0; if (!model->BSIM4v6LwlcGiven) model->BSIM4v6Lwlc = model->BSIM4v6Lwl; if (!model->BSIM4v6LminGiven) model->BSIM4v6Lmin = 0.0; if (!model->BSIM4v6LmaxGiven) model->BSIM4v6Lmax = 1.0; if (!model->BSIM4v6WintGiven) model->BSIM4v6Wint = 0.0; if (!model->BSIM4v6WlGiven) model->BSIM4v6Wl = 0.0; if (!model->BSIM4v6WlcGiven) model->BSIM4v6Wlc = model->BSIM4v6Wl; if (!model->BSIM4v6WlnGiven) model->BSIM4v6Wln = 1.0; if (!model->BSIM4v6WwGiven) model->BSIM4v6Ww = 0.0; if (!model->BSIM4v6WwcGiven) model->BSIM4v6Wwc = model->BSIM4v6Ww; if (!model->BSIM4v6WwnGiven) model->BSIM4v6Wwn = 1.0; if (!model->BSIM4v6WwlGiven) model->BSIM4v6Wwl = 0.0; if (!model->BSIM4v6WwlcGiven) model->BSIM4v6Wwlc = model->BSIM4v6Wwl; if (!model->BSIM4v6WminGiven) model->BSIM4v6Wmin = 0.0; if (!model->BSIM4v6WmaxGiven) model->BSIM4v6Wmax = 1.0; if (!model->BSIM4v6dwcGiven) model->BSIM4v6dwc = model->BSIM4v6Wint; if (!model->BSIM4v6dlcGiven) model->BSIM4v6dlc = model->BSIM4v6Lint; if (!model->BSIM4v6xlGiven) model->BSIM4v6xl = 0.0; if (!model->BSIM4v6xwGiven) model->BSIM4v6xw = 0.0; if (!model->BSIM4v6dlcigGiven) model->BSIM4v6dlcig = model->BSIM4v6Lint; if (!model->BSIM4v6dlcigdGiven) { if (model->BSIM4v6dlcigGiven) model->BSIM4v6dlcigd = model->BSIM4v6dlcig; else model->BSIM4v6dlcigd = model->BSIM4v6Lint; } if (!model->BSIM4v6dwjGiven) model->BSIM4v6dwj = model->BSIM4v6dwc; if (!model->BSIM4v6cfGiven) model->BSIM4v6cf = 2.0 * model->BSIM4v6epsrox * EPS0 / PI * log(1.0 + 0.4e-6 / model->BSIM4v6toxe); if (!model->BSIM4v6xpartGiven) model->BSIM4v6xpart = 0.0; if (!model->BSIM4v6sheetResistanceGiven) model->BSIM4v6sheetResistance = 0.0; if (!model->BSIM4v6SunitAreaJctCapGiven) model->BSIM4v6SunitAreaJctCap = 5.0E-4; if (!model->BSIM4v6DunitAreaJctCapGiven) model->BSIM4v6DunitAreaJctCap = model->BSIM4v6SunitAreaJctCap; if (!model->BSIM4v6SunitLengthSidewallJctCapGiven) model->BSIM4v6SunitLengthSidewallJctCap = 5.0E-10; if (!model->BSIM4v6DunitLengthSidewallJctCapGiven) model->BSIM4v6DunitLengthSidewallJctCap = model->BSIM4v6SunitLengthSidewallJctCap; if (!model->BSIM4v6SunitLengthGateSidewallJctCapGiven) model->BSIM4v6SunitLengthGateSidewallJctCap = model->BSIM4v6SunitLengthSidewallJctCap ; if (!model->BSIM4v6DunitLengthGateSidewallJctCapGiven) model->BSIM4v6DunitLengthGateSidewallJctCap = model->BSIM4v6SunitLengthGateSidewallJctCap; if (!model->BSIM4v6SjctSatCurDensityGiven) model->BSIM4v6SjctSatCurDensity = 1.0E-4; if (!model->BSIM4v6DjctSatCurDensityGiven) model->BSIM4v6DjctSatCurDensity = model->BSIM4v6SjctSatCurDensity; if (!model->BSIM4v6SjctSidewallSatCurDensityGiven) model->BSIM4v6SjctSidewallSatCurDensity = 0.0; if (!model->BSIM4v6DjctSidewallSatCurDensityGiven) model->BSIM4v6DjctSidewallSatCurDensity = model->BSIM4v6SjctSidewallSatCurDensity; if (!model->BSIM4v6SjctGateSidewallSatCurDensityGiven) model->BSIM4v6SjctGateSidewallSatCurDensity = 0.0; if (!model->BSIM4v6DjctGateSidewallSatCurDensityGiven) model->BSIM4v6DjctGateSidewallSatCurDensity = model->BSIM4v6SjctGateSidewallSatCurDensity; if (!model->BSIM4v6SbulkJctPotentialGiven) model->BSIM4v6SbulkJctPotential = 1.0; if (!model->BSIM4v6DbulkJctPotentialGiven) model->BSIM4v6DbulkJctPotential = model->BSIM4v6SbulkJctPotential; if (!model->BSIM4v6SsidewallJctPotentialGiven) model->BSIM4v6SsidewallJctPotential = 1.0; if (!model->BSIM4v6DsidewallJctPotentialGiven) model->BSIM4v6DsidewallJctPotential = model->BSIM4v6SsidewallJctPotential; if (!model->BSIM4v6SGatesidewallJctPotentialGiven) model->BSIM4v6SGatesidewallJctPotential = model->BSIM4v6SsidewallJctPotential; if (!model->BSIM4v6DGatesidewallJctPotentialGiven) model->BSIM4v6DGatesidewallJctPotential = model->BSIM4v6SGatesidewallJctPotential; if (!model->BSIM4v6SbulkJctBotGradingCoeffGiven) model->BSIM4v6SbulkJctBotGradingCoeff = 0.5; if (!model->BSIM4v6DbulkJctBotGradingCoeffGiven) model->BSIM4v6DbulkJctBotGradingCoeff = model->BSIM4v6SbulkJctBotGradingCoeff; if (!model->BSIM4v6SbulkJctSideGradingCoeffGiven) model->BSIM4v6SbulkJctSideGradingCoeff = 0.33; if (!model->BSIM4v6DbulkJctSideGradingCoeffGiven) model->BSIM4v6DbulkJctSideGradingCoeff = model->BSIM4v6SbulkJctSideGradingCoeff; if (!model->BSIM4v6SbulkJctGateSideGradingCoeffGiven) model->BSIM4v6SbulkJctGateSideGradingCoeff = model->BSIM4v6SbulkJctSideGradingCoeff; if (!model->BSIM4v6DbulkJctGateSideGradingCoeffGiven) model->BSIM4v6DbulkJctGateSideGradingCoeff = model->BSIM4v6SbulkJctGateSideGradingCoeff; if (!model->BSIM4v6SjctEmissionCoeffGiven) model->BSIM4v6SjctEmissionCoeff = 1.0; if (!model->BSIM4v6DjctEmissionCoeffGiven) model->BSIM4v6DjctEmissionCoeff = model->BSIM4v6SjctEmissionCoeff; if (!model->BSIM4v6SjctTempExponentGiven) model->BSIM4v6SjctTempExponent = 3.0; if (!model->BSIM4v6DjctTempExponentGiven) model->BSIM4v6DjctTempExponent = model->BSIM4v6SjctTempExponent; if (!model->BSIM4v6jtssGiven) model->BSIM4v6jtss = 0.0; if (!model->BSIM4v6jtsdGiven) model->BSIM4v6jtsd = model->BSIM4v6jtss; if (!model->BSIM4v6jtsswsGiven) model->BSIM4v6jtssws = 0.0; if (!model->BSIM4v6jtsswdGiven) model->BSIM4v6jtsswd = model->BSIM4v6jtssws; if (!model->BSIM4v6jtsswgsGiven) model->BSIM4v6jtsswgs = 0.0; if (!model->BSIM4v6jtsswgdGiven) model->BSIM4v6jtsswgd = model->BSIM4v6jtsswgs; if (!model->BSIM4v6jtweffGiven) model->BSIM4v6jtweff = 0.0; if (!model->BSIM4v6njtsGiven) model->BSIM4v6njts = 20.0; if (!model->BSIM4v6njtsswGiven) model->BSIM4v6njtssw = 20.0; if (!model->BSIM4v6njtsswgGiven) model->BSIM4v6njtsswg = 20.0; if (!model->BSIM4v6njtsdGiven) { if (model->BSIM4v6njtsGiven) model->BSIM4v6njtsd = model->BSIM4v6njts; else model->BSIM4v6njtsd = 20.0; } if (!model->BSIM4v6njtsswdGiven) { if (model->BSIM4v6njtsswGiven) model->BSIM4v6njtsswd = model->BSIM4v6njtssw; else model->BSIM4v6njtsswd = 20.0; } if (!model->BSIM4v6njtsswgdGiven) { if (model->BSIM4v6njtsswgGiven) model->BSIM4v6njtsswgd = model->BSIM4v6njtsswg; else model->BSIM4v6njtsswgd = 20.0; } if (!model->BSIM4v6xtssGiven) model->BSIM4v6xtss = 0.02; if (!model->BSIM4v6xtsdGiven) model->BSIM4v6xtsd = model->BSIM4v6xtss; if (!model->BSIM4v6xtsswsGiven) model->BSIM4v6xtssws = 0.02; if (!model->BSIM4v6xtsswdGiven) model->BSIM4v6xtsswd = model->BSIM4v6xtssws; if (!model->BSIM4v6xtsswgsGiven) model->BSIM4v6xtsswgs = 0.02; if (!model->BSIM4v6xtsswgdGiven) model->BSIM4v6xtsswgd = model->BSIM4v6xtsswgs; if (!model->BSIM4v6tnjtsGiven) model->BSIM4v6tnjts = 0.0; if (!model->BSIM4v6tnjtsswGiven) model->BSIM4v6tnjtssw = 0.0; if (!model->BSIM4v6tnjtsswgGiven) model->BSIM4v6tnjtsswg = 0.0; if (!model->BSIM4v6tnjtsdGiven) { if (model->BSIM4v6tnjtsGiven) model->BSIM4v6tnjtsd = model->BSIM4v6tnjts; else model->BSIM4v6tnjtsd = 0.0; } if (!model->BSIM4v6tnjtsswdGiven) { if (model->BSIM4v6tnjtsswGiven) model->BSIM4v6tnjtsswd = model->BSIM4v6tnjtssw; else model->BSIM4v6tnjtsswd = 0.0; } if (!model->BSIM4v6tnjtsswgdGiven) { if (model->BSIM4v6tnjtsswgGiven) model->BSIM4v6tnjtsswgd = model->BSIM4v6tnjtsswg; else model->BSIM4v6tnjtsswgd = 0.0; } if (!model->BSIM4v6vtssGiven) model->BSIM4v6vtss = 10.0; if (!model->BSIM4v6vtsdGiven) model->BSIM4v6vtsd = model->BSIM4v6vtss; if (!model->BSIM4v6vtsswsGiven) model->BSIM4v6vtssws = 10.0; if (!model->BSIM4v6vtsswdGiven) model->BSIM4v6vtsswd = model->BSIM4v6vtssws; if (!model->BSIM4v6vtsswgsGiven) model->BSIM4v6vtsswgs = 10.0; if (!model->BSIM4v6vtsswgdGiven) model->BSIM4v6vtsswgd = model->BSIM4v6vtsswgs; if (!model->BSIM4v6oxideTrapDensityAGiven) { if (model->BSIM4v6type == NMOS) model->BSIM4v6oxideTrapDensityA = 6.25e41; else model->BSIM4v6oxideTrapDensityA= 6.188e40; } if (!model->BSIM4v6oxideTrapDensityBGiven) { if (model->BSIM4v6type == NMOS) model->BSIM4v6oxideTrapDensityB = 3.125e26; else model->BSIM4v6oxideTrapDensityB = 1.5e25; } if (!model->BSIM4v6oxideTrapDensityCGiven) model->BSIM4v6oxideTrapDensityC = 8.75e9; if (!model->BSIM4v6emGiven) model->BSIM4v6em = 4.1e7; /* V/m */ if (!model->BSIM4v6efGiven) model->BSIM4v6ef = 1.0; if (!model->BSIM4v6afGiven) model->BSIM4v6af = 1.0; if (!model->BSIM4v6kfGiven) model->BSIM4v6kf = 0.0; if (!model->BSIM4v6vgsMaxGiven) model->BSIM4v6vgsMax = 1e99; if (!model->BSIM4v6vgdMaxGiven) model->BSIM4v6vgdMax = 1e99; if (!model->BSIM4v6vgbMaxGiven) model->BSIM4v6vgbMax = 1e99; if (!model->BSIM4v6vdsMaxGiven) model->BSIM4v6vdsMax = 1e99; if (!model->BSIM4v6vbsMaxGiven) model->BSIM4v6vbsMax = 1e99; if (!model->BSIM4v6vbdMaxGiven) model->BSIM4v6vbdMax = 1e99; if (!model->BSIM4v6vgsrMaxGiven) model->BSIM4v6vgsrMax = 1e99; if (!model->BSIM4v6vgdrMaxGiven) model->BSIM4v6vgdrMax = 1e99; if (!model->BSIM4v6vgbrMaxGiven) model->BSIM4v6vgbrMax = 1e99; if (!model->BSIM4v6vbsrMaxGiven) model->BSIM4v6vbsrMax = 1e99; if (!model->BSIM4v6vbdrMaxGiven) model->BSIM4v6vbdrMax = 1e99; /* stress effect */ if (!model->BSIM4v6sarefGiven) model->BSIM4v6saref = 1e-6; /* m */ if (!model->BSIM4v6sbrefGiven) model->BSIM4v6sbref = 1e-6; /* m */ if (!model->BSIM4v6wlodGiven) model->BSIM4v6wlod = 0; /* m */ if (!model->BSIM4v6ku0Given) model->BSIM4v6ku0 = 0; /* 1/m */ if (!model->BSIM4v6kvsatGiven) model->BSIM4v6kvsat = 0; if (!model->BSIM4v6kvth0Given) /* m */ model->BSIM4v6kvth0 = 0; if (!model->BSIM4v6tku0Given) model->BSIM4v6tku0 = 0; if (!model->BSIM4v6llodku0Given) model->BSIM4v6llodku0 = 0; if (!model->BSIM4v6wlodku0Given) model->BSIM4v6wlodku0 = 0; if (!model->BSIM4v6llodvthGiven) model->BSIM4v6llodvth = 0; if (!model->BSIM4v6wlodvthGiven) model->BSIM4v6wlodvth = 0; if (!model->BSIM4v6lku0Given) model->BSIM4v6lku0 = 0; if (!model->BSIM4v6wku0Given) model->BSIM4v6wku0 = 0; if (!model->BSIM4v6pku0Given) model->BSIM4v6pku0 = 0; if (!model->BSIM4v6lkvth0Given) model->BSIM4v6lkvth0 = 0; if (!model->BSIM4v6wkvth0Given) model->BSIM4v6wkvth0 = 0; if (!model->BSIM4v6pkvth0Given) model->BSIM4v6pkvth0 = 0; if (!model->BSIM4v6stk2Given) model->BSIM4v6stk2 = 0; if (!model->BSIM4v6lodk2Given) model->BSIM4v6lodk2 = 1.0; if (!model->BSIM4v6steta0Given) model->BSIM4v6steta0 = 0; if (!model->BSIM4v6lodeta0Given) model->BSIM4v6lodeta0 = 1.0; /* Well Proximity Effect */ if (!model->BSIM4v6webGiven) model->BSIM4v6web = 0.0; if (!model->BSIM4v6wecGiven) model->BSIM4v6wec = 0.0; if (!model->BSIM4v6kvth0weGiven) model->BSIM4v6kvth0we = 0.0; if (!model->BSIM4v6k2weGiven) model->BSIM4v6k2we = 0.0; if (!model->BSIM4v6ku0weGiven) model->BSIM4v6ku0we = 0.0; if (!model->BSIM4v6screfGiven) model->BSIM4v6scref = 1.0E-6; /* m */ if (!model->BSIM4v6wpemodGiven) model->BSIM4v6wpemod = 0; else if ((model->BSIM4v6wpemod != 0) && (model->BSIM4v6wpemod != 1)) { model->BSIM4v6wpemod = 0; printf("Warning: wpemod has been set to its default value: 0.\n"); } if (!model->BSIM4v6lkvth0weGiven) model->BSIM4v6lkvth0we = 0; if (!model->BSIM4v6lk2weGiven) model->BSIM4v6lk2we = 0; if (!model->BSIM4v6lku0weGiven) model->BSIM4v6lku0we = 0; if (!model->BSIM4v6wkvth0weGiven) model->BSIM4v6wkvth0we = 0; if (!model->BSIM4v6wk2weGiven) model->BSIM4v6wk2we = 0; if (!model->BSIM4v6wku0weGiven) model->BSIM4v6wku0we = 0; if (!model->BSIM4v6pkvth0weGiven) model->BSIM4v6pkvth0we = 0; if (!model->BSIM4v6pk2weGiven) model->BSIM4v6pk2we = 0; if (!model->BSIM4v6pku0weGiven) model->BSIM4v6pku0we = 0; DMCGeff = model->BSIM4v6dmcg - model->BSIM4v6dmcgt; DMCIeff = model->BSIM4v6dmci; DMDGeff = model->BSIM4v6dmdg - model->BSIM4v6dmcgt; /* * End processing models and begin to loop * through all the instances of the model */ for (here = BSIM4v6instances(model); here != NULL ; here=BSIM4v6nextInstance(here)) { /* allocate a chunk of the state vector */ here->BSIM4v6states = *states; *states += BSIM4v6numStates; /* perform the parameter defaulting */ if (!here->BSIM4v6lGiven) here->BSIM4v6l = 5.0e-6; if (!here->BSIM4v6wGiven) here->BSIM4v6w = 5.0e-6; if (!here->BSIM4v6mGiven) here->BSIM4v6m = 1.0; if (!here->BSIM4v6nfGiven) here->BSIM4v6nf = 1.0; if (!here->BSIM4v6minGiven) here->BSIM4v6min = 0; /* integer */ if (!here->BSIM4v6icVDSGiven) here->BSIM4v6icVDS = 0.0; if (!here->BSIM4v6icVGSGiven) here->BSIM4v6icVGS = 0.0; if (!here->BSIM4v6icVBSGiven) here->BSIM4v6icVBS = 0.0; if (!here->BSIM4v6drainAreaGiven) here->BSIM4v6drainArea = 0.0; if (!here->BSIM4v6drainPerimeterGiven) here->BSIM4v6drainPerimeter = 0.0; if (!here->BSIM4v6drainSquaresGiven) here->BSIM4v6drainSquares = 1.0; if (!here->BSIM4v6sourceAreaGiven) here->BSIM4v6sourceArea = 0.0; if (!here->BSIM4v6sourcePerimeterGiven) here->BSIM4v6sourcePerimeter = 0.0; if (!here->BSIM4v6sourceSquaresGiven) here->BSIM4v6sourceSquares = 1.0; if (!here->BSIM4v6rbdbGiven) here->BSIM4v6rbdb = model->BSIM4v6rbdb; /* in ohm */ if (!here->BSIM4v6rbsbGiven) here->BSIM4v6rbsb = model->BSIM4v6rbsb; if (!here->BSIM4v6rbpbGiven) here->BSIM4v6rbpb = model->BSIM4v6rbpb; if (!here->BSIM4v6rbpsGiven) here->BSIM4v6rbps = model->BSIM4v6rbps; if (!here->BSIM4v6rbpdGiven) here->BSIM4v6rbpd = model->BSIM4v6rbpd; if (!here->BSIM4v6delvtoGiven) here->BSIM4v6delvto = 0.0; if (!here->BSIM4v6xgwGiven) here->BSIM4v6xgw = model->BSIM4v6xgw; if (!here->BSIM4v6ngconGiven) here->BSIM4v6ngcon = model->BSIM4v6ngcon; /* Process instance model selectors, some * may override their global counterparts */ if (!here->BSIM4v6rbodyModGiven) here->BSIM4v6rbodyMod = model->BSIM4v6rbodyMod; else if ((here->BSIM4v6rbodyMod != 0) && (here->BSIM4v6rbodyMod != 1) && (here->BSIM4v6rbodyMod != 2)) { here->BSIM4v6rbodyMod = model->BSIM4v6rbodyMod; printf("Warning: rbodyMod has been set to its global value %d.\n", model->BSIM4v6rbodyMod); } if (!here->BSIM4v6rgateModGiven) here->BSIM4v6rgateMod = model->BSIM4v6rgateMod; else if ((here->BSIM4v6rgateMod != 0) && (here->BSIM4v6rgateMod != 1) && (here->BSIM4v6rgateMod != 2) && (here->BSIM4v6rgateMod != 3)) { here->BSIM4v6rgateMod = model->BSIM4v6rgateMod; printf("Warning: rgateMod has been set to its global value %d.\n", model->BSIM4v6rgateMod); } if (!here->BSIM4v6geoModGiven) here->BSIM4v6geoMod = model->BSIM4v6geoMod; if (!here->BSIM4v6rgeoModGiven) here->BSIM4v6rgeoMod = model->BSIM4v6rgeoMod; else if ((here->BSIM4v6rgeoMod != 0) && (here->BSIM4v6rgeoMod != 1)) { here->BSIM4v6rgeoMod = model->BSIM4v6rgeoMod; printf("Warning: rgeoMod has been set to its global value %d.\n", model->BSIM4v6rgeoMod); } if (!here->BSIM4v6trnqsModGiven) here->BSIM4v6trnqsMod = model->BSIM4v6trnqsMod; else if ((here->BSIM4v6trnqsMod != 0) && (here->BSIM4v6trnqsMod != 1)) { here->BSIM4v6trnqsMod = model->BSIM4v6trnqsMod; printf("Warning: trnqsMod has been set to its global value %d.\n", model->BSIM4v6trnqsMod); } if (!here->BSIM4v6acnqsModGiven) here->BSIM4v6acnqsMod = model->BSIM4v6acnqsMod; else if ((here->BSIM4v6acnqsMod != 0) && (here->BSIM4v6acnqsMod != 1)) { here->BSIM4v6acnqsMod = model->BSIM4v6acnqsMod; printf("Warning: acnqsMod has been set to its global value %d.\n", model->BSIM4v6acnqsMod); } /* stress effect */ if (!here->BSIM4v6saGiven) here->BSIM4v6sa = 0.0; if (!here->BSIM4v6sbGiven) here->BSIM4v6sb = 0.0; if (!here->BSIM4v6sdGiven) here->BSIM4v6sd = 2 * model->BSIM4v6dmcg; /* Well Proximity Effect */ if (!here->BSIM4v6scaGiven) here->BSIM4v6sca = 0.0; if (!here->BSIM4v6scbGiven) here->BSIM4v6scb = 0.0; if (!here->BSIM4v6sccGiven) here->BSIM4v6scc = 0.0; if (!here->BSIM4v6scGiven) here->BSIM4v6sc = 0.0; /* m */ /* process drain series resistance */ createNode = 0; if ( (model->BSIM4v6rdsMod != 0) || (model->BSIM4v6tnoiMod != 0 && noiseAnalGiven)) { createNode = 1; } else if (model->BSIM4v6sheetResistance > 0) { if (here->BSIM4v6drainSquaresGiven && here->BSIM4v6drainSquares > 0) { createNode = 1; } else if (!here->BSIM4v6drainSquaresGiven && (here->BSIM4v6rgeoMod != 0)) { BSIM4v6RdseffGeo(here->BSIM4v6nf*here->BSIM4v6m, here->BSIM4v6geoMod, here->BSIM4v6rgeoMod, here->BSIM4v6min, here->BSIM4v6w, model->BSIM4v6sheetResistance, DMCGeff, DMCIeff, DMDGeff, 0, &Rtot); if(Rtot > 0) createNode = 1; } } if ( createNode != 0 ) { if (here->BSIM4v6dNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v6name,"drain"); if(error) return(error); here->BSIM4v6dNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->BSIM4v6dNodePrime = here->BSIM4v6dNode; } /* process source series resistance */ createNode = 0; if ( (model->BSIM4v6rdsMod != 0) || (model->BSIM4v6tnoiMod != 0 && noiseAnalGiven)) { createNode = 1; } else if (model->BSIM4v6sheetResistance > 0) { if (here->BSIM4v6sourceSquaresGiven && here->BSIM4v6sourceSquares > 0) { createNode = 1; } else if (!here->BSIM4v6sourceSquaresGiven && (here->BSIM4v6rgeoMod != 0)) { BSIM4v6RdseffGeo(here->BSIM4v6nf*here->BSIM4v6m, here->BSIM4v6geoMod, here->BSIM4v6rgeoMod, here->BSIM4v6min, here->BSIM4v6w, model->BSIM4v6sheetResistance, DMCGeff, DMCIeff, DMDGeff, 1, &Rtot); if(Rtot > 0) createNode = 1; } } if ( createNode != 0 ) { if (here->BSIM4v6sNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v6name,"source"); if(error) return(error); here->BSIM4v6sNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else here->BSIM4v6sNodePrime = here->BSIM4v6sNode; if (here->BSIM4v6rgateMod > 0) { if (here->BSIM4v6gNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v6name,"gate"); if(error) return(error); here->BSIM4v6gNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,2,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else here->BSIM4v6gNodePrime = here->BSIM4v6gNodeExt; if (here->BSIM4v6rgateMod == 3) { if (here->BSIM4v6gNodeMid == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v6name,"midgate"); if(error) return(error); here->BSIM4v6gNodeMid = tmp->number; } } else here->BSIM4v6gNodeMid = here->BSIM4v6gNodeExt; /* internal body nodes for body resistance model */ if ((here->BSIM4v6rbodyMod ==1) || (here->BSIM4v6rbodyMod ==2)) { if (here->BSIM4v6dbNode == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v6name,"dbody"); if(error) return(error); here->BSIM4v6dbNode = tmp->number; } if (here->BSIM4v6bNodePrime == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v6name,"body"); if(error) return(error); here->BSIM4v6bNodePrime = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,4,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } if (here->BSIM4v6sbNode == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v6name,"sbody"); if(error) return(error); here->BSIM4v6sbNode = tmp->number; } } else here->BSIM4v6dbNode = here->BSIM4v6bNodePrime = here->BSIM4v6sbNode = here->BSIM4v6bNode; /* NQS node */ if (here->BSIM4v6trnqsMod) { if (here->BSIM4v6qNode == 0) { error = CKTmkVolt(ckt,&tmp,here->BSIM4v6name,"charge"); if(error) return(error); here->BSIM4v6qNode = tmp->number; } } else here->BSIM4v6qNode = 0; /* set Sparse Matrix Pointers * macro to make elements with built-in out-of-memory test */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(BSIM4v6DPbpPtr, BSIM4v6dNodePrime, BSIM4v6bNodePrime); TSTALLOC(BSIM4v6GPbpPtr, BSIM4v6gNodePrime, BSIM4v6bNodePrime); TSTALLOC(BSIM4v6SPbpPtr, BSIM4v6sNodePrime, BSIM4v6bNodePrime); TSTALLOC(BSIM4v6BPdpPtr, BSIM4v6bNodePrime, BSIM4v6dNodePrime); TSTALLOC(BSIM4v6BPgpPtr, BSIM4v6bNodePrime, BSIM4v6gNodePrime); TSTALLOC(BSIM4v6BPspPtr, BSIM4v6bNodePrime, BSIM4v6sNodePrime); TSTALLOC(BSIM4v6BPbpPtr, BSIM4v6bNodePrime, BSIM4v6bNodePrime); TSTALLOC(BSIM4v6DdPtr, BSIM4v6dNode, BSIM4v6dNode); TSTALLOC(BSIM4v6GPgpPtr, BSIM4v6gNodePrime, BSIM4v6gNodePrime); TSTALLOC(BSIM4v6SsPtr, BSIM4v6sNode, BSIM4v6sNode); TSTALLOC(BSIM4v6DPdpPtr, BSIM4v6dNodePrime, BSIM4v6dNodePrime); TSTALLOC(BSIM4v6SPspPtr, BSIM4v6sNodePrime, BSIM4v6sNodePrime); TSTALLOC(BSIM4v6DdpPtr, BSIM4v6dNode, BSIM4v6dNodePrime); TSTALLOC(BSIM4v6GPdpPtr, BSIM4v6gNodePrime, BSIM4v6dNodePrime); TSTALLOC(BSIM4v6GPspPtr, BSIM4v6gNodePrime, BSIM4v6sNodePrime); TSTALLOC(BSIM4v6SspPtr, BSIM4v6sNode, BSIM4v6sNodePrime); TSTALLOC(BSIM4v6DPspPtr, BSIM4v6dNodePrime, BSIM4v6sNodePrime); TSTALLOC(BSIM4v6DPdPtr, BSIM4v6dNodePrime, BSIM4v6dNode); TSTALLOC(BSIM4v6DPgpPtr, BSIM4v6dNodePrime, BSIM4v6gNodePrime); TSTALLOC(BSIM4v6SPgpPtr, BSIM4v6sNodePrime, BSIM4v6gNodePrime); TSTALLOC(BSIM4v6SPsPtr, BSIM4v6sNodePrime, BSIM4v6sNode); TSTALLOC(BSIM4v6SPdpPtr, BSIM4v6sNodePrime, BSIM4v6dNodePrime); TSTALLOC(BSIM4v6QqPtr, BSIM4v6qNode, BSIM4v6qNode); TSTALLOC(BSIM4v6QbpPtr, BSIM4v6qNode, BSIM4v6bNodePrime) ; TSTALLOC(BSIM4v6QdpPtr, BSIM4v6qNode, BSIM4v6dNodePrime); TSTALLOC(BSIM4v6QspPtr, BSIM4v6qNode, BSIM4v6sNodePrime); TSTALLOC(BSIM4v6QgpPtr, BSIM4v6qNode, BSIM4v6gNodePrime); TSTALLOC(BSIM4v6DPqPtr, BSIM4v6dNodePrime, BSIM4v6qNode); TSTALLOC(BSIM4v6SPqPtr, BSIM4v6sNodePrime, BSIM4v6qNode); TSTALLOC(BSIM4v6GPqPtr, BSIM4v6gNodePrime, BSIM4v6qNode); if (here->BSIM4v6rgateMod != 0) { TSTALLOC(BSIM4v6GEgePtr, BSIM4v6gNodeExt, BSIM4v6gNodeExt); TSTALLOC(BSIM4v6GEgpPtr, BSIM4v6gNodeExt, BSIM4v6gNodePrime); TSTALLOC(BSIM4v6GPgePtr, BSIM4v6gNodePrime, BSIM4v6gNodeExt); TSTALLOC(BSIM4v6GEdpPtr, BSIM4v6gNodeExt, BSIM4v6dNodePrime); TSTALLOC(BSIM4v6GEspPtr, BSIM4v6gNodeExt, BSIM4v6sNodePrime); TSTALLOC(BSIM4v6GEbpPtr, BSIM4v6gNodeExt, BSIM4v6bNodePrime); TSTALLOC(BSIM4v6GMdpPtr, BSIM4v6gNodeMid, BSIM4v6dNodePrime); TSTALLOC(BSIM4v6GMgpPtr, BSIM4v6gNodeMid, BSIM4v6gNodePrime); TSTALLOC(BSIM4v6GMgmPtr, BSIM4v6gNodeMid, BSIM4v6gNodeMid); TSTALLOC(BSIM4v6GMgePtr, BSIM4v6gNodeMid, BSIM4v6gNodeExt); TSTALLOC(BSIM4v6GMspPtr, BSIM4v6gNodeMid, BSIM4v6sNodePrime); TSTALLOC(BSIM4v6GMbpPtr, BSIM4v6gNodeMid, BSIM4v6bNodePrime); TSTALLOC(BSIM4v6DPgmPtr, BSIM4v6dNodePrime, BSIM4v6gNodeMid); TSTALLOC(BSIM4v6GPgmPtr, BSIM4v6gNodePrime, BSIM4v6gNodeMid); TSTALLOC(BSIM4v6GEgmPtr, BSIM4v6gNodeExt, BSIM4v6gNodeMid); TSTALLOC(BSIM4v6SPgmPtr, BSIM4v6sNodePrime, BSIM4v6gNodeMid); TSTALLOC(BSIM4v6BPgmPtr, BSIM4v6bNodePrime, BSIM4v6gNodeMid); } if ((here->BSIM4v6rbodyMod ==1) || (here->BSIM4v6rbodyMod ==2)) { TSTALLOC(BSIM4v6DPdbPtr, BSIM4v6dNodePrime, BSIM4v6dbNode); TSTALLOC(BSIM4v6SPsbPtr, BSIM4v6sNodePrime, BSIM4v6sbNode); TSTALLOC(BSIM4v6DBdpPtr, BSIM4v6dbNode, BSIM4v6dNodePrime); TSTALLOC(BSIM4v6DBdbPtr, BSIM4v6dbNode, BSIM4v6dbNode); TSTALLOC(BSIM4v6DBbpPtr, BSIM4v6dbNode, BSIM4v6bNodePrime); TSTALLOC(BSIM4v6DBbPtr, BSIM4v6dbNode, BSIM4v6bNode); TSTALLOC(BSIM4v6BPdbPtr, BSIM4v6bNodePrime, BSIM4v6dbNode); TSTALLOC(BSIM4v6BPbPtr, BSIM4v6bNodePrime, BSIM4v6bNode); TSTALLOC(BSIM4v6BPsbPtr, BSIM4v6bNodePrime, BSIM4v6sbNode); TSTALLOC(BSIM4v6SBspPtr, BSIM4v6sbNode, BSIM4v6sNodePrime); TSTALLOC(BSIM4v6SBbpPtr, BSIM4v6sbNode, BSIM4v6bNodePrime); TSTALLOC(BSIM4v6SBbPtr, BSIM4v6sbNode, BSIM4v6bNode); TSTALLOC(BSIM4v6SBsbPtr, BSIM4v6sbNode, BSIM4v6sbNode); TSTALLOC(BSIM4v6BdbPtr, BSIM4v6bNode, BSIM4v6dbNode); TSTALLOC(BSIM4v6BbpPtr, BSIM4v6bNode, BSIM4v6bNodePrime); TSTALLOC(BSIM4v6BsbPtr, BSIM4v6bNode, BSIM4v6sbNode); TSTALLOC(BSIM4v6BbPtr, BSIM4v6bNode, BSIM4v6bNode); } if (model->BSIM4v6rdsMod) { TSTALLOC(BSIM4v6DgpPtr, BSIM4v6dNode, BSIM4v6gNodePrime); TSTALLOC(BSIM4v6DspPtr, BSIM4v6dNode, BSIM4v6sNodePrime); TSTALLOC(BSIM4v6DbpPtr, BSIM4v6dNode, BSIM4v6bNodePrime); TSTALLOC(BSIM4v6SdpPtr, BSIM4v6sNode, BSIM4v6dNodePrime); TSTALLOC(BSIM4v6SgpPtr, BSIM4v6sNode, BSIM4v6gNodePrime); TSTALLOC(BSIM4v6SbpPtr, BSIM4v6sNode, BSIM4v6bNodePrime); } } } /* end of loop through all the BSIM4v6 device models */ #ifdef USE_OMP InstCount = 0; model = (BSIM4v6model*)inModel; /* loop through all the BSIM4v6 device models to count the number of instances */ for( ; model != NULL; model = BSIM4v6nextModel(model)) { /* loop through all the instances of the model */ for (here = BSIM4v6instances(model); here != NULL ; here=BSIM4v6nextInstance(here)) { InstCount++; } model->BSIM4v6InstCount = 0; model->BSIM4v6InstanceArray = NULL; } InstArray = TMALLOC(BSIM4v6instance*, InstCount); model = (BSIM4v6model*)inModel; /* store this in the first model only */ model->BSIM4v6InstCount = InstCount; model->BSIM4v6InstanceArray = InstArray; idx = 0; for( ; model != NULL; model = BSIM4v6nextModel(model)) { /* loop through all the instances of the model */ for (here = BSIM4v6instances(model); here != NULL ; here=BSIM4v6nextInstance(here)) { InstArray[idx] = here; idx++; } } #endif return(OK); } int BSIM4v6unsetup(GENmodel *inModel, CKTcircuit *ckt) { #ifndef HAS_BATCHSIM BSIM4v6model *model; BSIM4v6instance *here; #ifdef USE_OMP model = (BSIM4v6model*)inModel; tfree(model->BSIM4v6InstanceArray); #endif for (model = (BSIM4v6model *)inModel; model != NULL; model = BSIM4v6nextModel(model)) { for (here = BSIM4v6instances(model); here != NULL; here=BSIM4v6nextInstance(here)) { if (here->BSIM4v6qNode > 0) CKTdltNNum(ckt, here->BSIM4v6qNode); here->BSIM4v6qNode = 0; if (here->BSIM4v6sbNode > 0 && here->BSIM4v6sbNode != here->BSIM4v6bNode) CKTdltNNum(ckt, here->BSIM4v6sbNode); here->BSIM4v6sbNode = 0; if (here->BSIM4v6bNodePrime > 0 && here->BSIM4v6bNodePrime != here->BSIM4v6bNode) CKTdltNNum(ckt, here->BSIM4v6bNodePrime); here->BSIM4v6bNodePrime = 0; if (here->BSIM4v6dbNode > 0 && here->BSIM4v6dbNode != here->BSIM4v6bNode) CKTdltNNum(ckt, here->BSIM4v6dbNode); here->BSIM4v6dbNode = 0; if (here->BSIM4v6gNodeMid > 0 && here->BSIM4v6gNodeMid != here->BSIM4v6gNodeExt) CKTdltNNum(ckt, here->BSIM4v6gNodeMid); here->BSIM4v6gNodeMid = 0; if (here->BSIM4v6gNodePrime > 0 && here->BSIM4v6gNodePrime != here->BSIM4v6gNodeExt) CKTdltNNum(ckt, here->BSIM4v6gNodePrime); here->BSIM4v6gNodePrime = 0; if (here->BSIM4v6sNodePrime > 0 && here->BSIM4v6sNodePrime != here->BSIM4v6sNode) CKTdltNNum(ckt, here->BSIM4v6sNodePrime); here->BSIM4v6sNodePrime = 0; if (here->BSIM4v6dNodePrime > 0 && here->BSIM4v6dNodePrime != here->BSIM4v6dNode) CKTdltNNum(ckt, here->BSIM4v6dNodePrime); here->BSIM4v6dNodePrime = 0; } } #endif return OK; } tmpk8ny_4pz/src/spicelib/devices/bsim4v6/bsim4v6ext.h0000644000175000017500000000260613546075722022645 0ustar carstencarsten/********** Copyright 2004 Regents of the University of California. All rights reserved. Author: 2000 Weidong Liu Author: 2001- Xuemei Xi File: bsim4v6ext.h **********/ extern int BSIM4v6acLoad(GENmodel *,CKTcircuit*); extern int BSIM4v6ask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*); extern int BSIM4v6convTest(GENmodel *,CKTcircuit*); extern int BSIM4v6getic(GENmodel*,CKTcircuit*); extern int BSIM4v6load(GENmodel*,CKTcircuit*); extern int BSIM4v6mAsk(CKTcircuit*,GENmodel *,int, IFvalue*); extern int BSIM4v6mDelete(GENmodel*); extern int BSIM4v6mParam(int,IFvalue*,GENmodel*); extern void BSIM4v6mosCap(CKTcircuit*, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*, double*); extern int BSIM4v6param(int,IFvalue*,GENinstance*,IFvalue*); extern int BSIM4v6pzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int BSIM4v6setup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int BSIM4v6temp(GENmodel*,CKTcircuit*); extern int BSIM4v6trunc(GENmodel*,CKTcircuit*,double*); extern int BSIM4v6noise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int BSIM4v6unsetup(GENmodel*,CKTcircuit*); extern int BSIM4v6soaCheck(CKTcircuit *, GENmodel *); tmpk8ny_4pz/src/spicelib/devices/bsim4v6/B4TERMS_OF_USE0000644000175000017500000000254413546075722022565 0ustar carstencarsten The terms under which the software is provided are as the following. Software is distributed as is, completely without warranty or service support. The University of California and its employees are not liable for the condition or performance of the software. The University owns the copyright but shall not be liable for any infringement of copyright or other proprietary rights brought by third parties against the users of the software. The University of California hereby disclaims all implied warranties. The University of California grants the users the right to modify, copy, and redistribute the software and documentation, both within the user's organization and externally, subject to the following restrictions: 1. The users agree not to charge for the University of California code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge the UC Berkeley BSIM Research Group that developed the software. This acknowledgment shall appear in the product documentation. 3. The users agree to obey all U.S. Government restrictions governing redistribution or export of the software. 4. The users agree to reproduce any copyright notice which appears on the software on any copy or modification of such made available to others. Chenming Hu, and Weidong Liu Mar. 2000 tmpk8ny_4pz/src/spicelib/devices/bsim4v6/bsim4v6itf.h0000644000175000017500000000037713546075722022632 0ustar carstencarsten/********** Copyright 2004 Regents of the University of California. All rights reserved. Author: 2000 Weidong Liu. Author: 2001- Xuemei Xi File: bsim4v6itf.h **********/ #ifndef DEV_BSIM4v6 #define DEV_BSIM4v6 SPICEdev *get_bsim4v6_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/bsim4v6/b4v6getic.c0000644000175000017500000000267313546075722022426 0ustar carstencarsten/**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4getic.c of BSIM4.6.2. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "bsim4v6def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4v6getic( GENmodel *inModel, CKTcircuit *ckt) { BSIM4v6model *model = (BSIM4v6model*)inModel; BSIM4v6instance *here; for (; model ; model = BSIM4v6nextModel(model)) { for (here = BSIM4v6instances(model); here; here = BSIM4v6nextInstance(here)) { if (!here->BSIM4v6icVDSGiven) { here->BSIM4v6icVDS = *(ckt->CKTrhs + here->BSIM4v6dNode) - *(ckt->CKTrhs + here->BSIM4v6sNode); } if (!here->BSIM4v6icVGSGiven) { here->BSIM4v6icVGS = *(ckt->CKTrhs + here->BSIM4v6gNodeExt) - *(ckt->CKTrhs + here->BSIM4v6sNode); } if(!here->BSIM4v6icVBSGiven) { here->BSIM4v6icVBS = *(ckt->CKTrhs + here->BSIM4v6bNode) - *(ckt->CKTrhs + here->BSIM4v6sNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/bsim4v6/b4v6mask.c0000644000175000017500000025633413546075722022273 0ustar carstencarsten/**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4mask.c of BSIM4.6.2. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 11/15/2002. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. * Modified by Mohan Dunga, 12/13/2006 * Modified by Mohan Dunga, Wenwei Yang, 07/31/2008. **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "bsim4v6def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4v6mAsk( CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { BSIM4v6model *model = (BSIM4v6model *)inst; NG_IGNORE(ckt); switch(which) { case BSIM4v6_MOD_MOBMOD : value->iValue = model->BSIM4v6mobMod; return(OK); case BSIM4v6_MOD_PARAMCHK : value->iValue = model->BSIM4v6paramChk; return(OK); case BSIM4v6_MOD_BINUNIT : value->iValue = model->BSIM4v6binUnit; return(OK); case BSIM4v6_MOD_CVCHARGEMOD : value->iValue = model->BSIM4v6cvchargeMod; return(OK); case BSIM4v6_MOD_CAPMOD : value->iValue = model->BSIM4v6capMod; return(OK); case BSIM4v6_MOD_DIOMOD : value->iValue = model->BSIM4v6dioMod; return(OK); case BSIM4v6_MOD_TRNQSMOD : value->iValue = model->BSIM4v6trnqsMod; return(OK); case BSIM4v6_MOD_ACNQSMOD : value->iValue = model->BSIM4v6acnqsMod; return(OK); case BSIM4v6_MOD_FNOIMOD : value->iValue = model->BSIM4v6fnoiMod; return(OK); case BSIM4v6_MOD_TNOIMOD : value->iValue = model->BSIM4v6tnoiMod; return(OK); case BSIM4v6_MOD_RDSMOD : value->iValue = model->BSIM4v6rdsMod; return(OK); case BSIM4v6_MOD_RBODYMOD : value->iValue = model->BSIM4v6rbodyMod; return(OK); case BSIM4v6_MOD_RGATEMOD : value->iValue = model->BSIM4v6rgateMod; return(OK); case BSIM4v6_MOD_PERMOD : value->iValue = model->BSIM4v6perMod; return(OK); case BSIM4v6_MOD_GEOMOD : value->iValue = model->BSIM4v6geoMod; return(OK); case BSIM4v6_MOD_RGEOMOD : value->iValue = model->BSIM4v6rgeoMod; return(OK); case BSIM4v6_MOD_MTRLMOD : value->iValue = model->BSIM4v6mtrlMod; return(OK); case BSIM4v6_MOD_IGCMOD : value->iValue = model->BSIM4v6igcMod; return(OK); case BSIM4v6_MOD_IGBMOD : value->iValue = model->BSIM4v6igbMod; return(OK); case BSIM4v6_MOD_TEMPMOD : value->iValue = model->BSIM4v6tempMod; return(OK); case BSIM4v6_MOD_VERSION : value->sValue = model->BSIM4v6version; return(OK); case BSIM4v6_MOD_TOXREF : value->rValue = model->BSIM4v6toxref; return(OK); case BSIM4v6_MOD_EOT : value->rValue = model->BSIM4v6eot; return(OK); case BSIM4v6_MOD_VDDEOT : value->rValue = model->BSIM4v6vddeot; return(OK); case BSIM4v6_MOD_TEMPEOT : value->rValue = model->BSIM4v6tempeot; return(OK); case BSIM4v6_MOD_LEFFEOT : value->rValue = model->BSIM4v6leffeot; return(OK); case BSIM4v6_MOD_WEFFEOT : value->rValue = model->BSIM4v6weffeot; return(OK); case BSIM4v6_MOD_ADOS : value->rValue = model->BSIM4v6ados; return(OK); case BSIM4v6_MOD_BDOS : value->rValue = model->BSIM4v6bdos; return(OK); case BSIM4v6_MOD_TOXE : value->rValue = model->BSIM4v6toxe; return(OK); case BSIM4v6_MOD_TOXP : value->rValue = model->BSIM4v6toxp; return(OK); case BSIM4v6_MOD_TOXM : value->rValue = model->BSIM4v6toxm; return(OK); case BSIM4v6_MOD_DTOX : value->rValue = model->BSIM4v6dtox; return(OK); case BSIM4v6_MOD_EPSROX : value->rValue = model->BSIM4v6epsrox; return(OK); case BSIM4v6_MOD_CDSC : value->rValue = model->BSIM4v6cdsc; return(OK); case BSIM4v6_MOD_CDSCB : value->rValue = model->BSIM4v6cdscb; return(OK); case BSIM4v6_MOD_CDSCD : value->rValue = model->BSIM4v6cdscd; return(OK); case BSIM4v6_MOD_CIT : value->rValue = model->BSIM4v6cit; return(OK); case BSIM4v6_MOD_NFACTOR : value->rValue = model->BSIM4v6nfactor; return(OK); case BSIM4v6_MOD_XJ: value->rValue = model->BSIM4v6xj; return(OK); case BSIM4v6_MOD_VSAT: value->rValue = model->BSIM4v6vsat; return(OK); case BSIM4v6_MOD_VTL: value->rValue = model->BSIM4v6vtl; return(OK); case BSIM4v6_MOD_XN: value->rValue = model->BSIM4v6xn; return(OK); case BSIM4v6_MOD_LC: value->rValue = model->BSIM4v6lc; return(OK); case BSIM4v6_MOD_LAMBDA: value->rValue = model->BSIM4v6lambda; return(OK); case BSIM4v6_MOD_AT: value->rValue = model->BSIM4v6at; return(OK); case BSIM4v6_MOD_A0: value->rValue = model->BSIM4v6a0; return(OK); case BSIM4v6_MOD_AGS: value->rValue = model->BSIM4v6ags; return(OK); case BSIM4v6_MOD_A1: value->rValue = model->BSIM4v6a1; return(OK); case BSIM4v6_MOD_A2: value->rValue = model->BSIM4v6a2; return(OK); case BSIM4v6_MOD_KETA: value->rValue = model->BSIM4v6keta; return(OK); case BSIM4v6_MOD_NSUB: value->rValue = model->BSIM4v6nsub; return(OK); case BSIM4v6_MOD_PHIG: value->rValue = model->BSIM4v6phig; return(OK); case BSIM4v6_MOD_EPSRGATE: value->rValue = model->BSIM4v6epsrgate; return(OK); case BSIM4v6_MOD_EASUB: value->rValue = model->BSIM4v6easub; return(OK); case BSIM4v6_MOD_EPSRSUB: value->rValue = model->BSIM4v6epsrsub; return(OK); case BSIM4v6_MOD_NI0SUB: value->rValue = model->BSIM4v6ni0sub; return(OK); case BSIM4v6_MOD_BG0SUB: value->rValue = model->BSIM4v6bg0sub; return(OK); case BSIM4v6_MOD_TBGASUB: value->rValue = model->BSIM4v6tbgasub; return(OK); case BSIM4v6_MOD_TBGBSUB: value->rValue = model->BSIM4v6tbgbsub; return(OK); case BSIM4v6_MOD_NDEP: value->rValue = model->BSIM4v6ndep; return(OK); case BSIM4v6_MOD_NSD: value->rValue = model->BSIM4v6nsd; return(OK); case BSIM4v6_MOD_NGATE: value->rValue = model->BSIM4v6ngate; return(OK); case BSIM4v6_MOD_GAMMA1: value->rValue = model->BSIM4v6gamma1; return(OK); case BSIM4v6_MOD_GAMMA2: value->rValue = model->BSIM4v6gamma2; return(OK); case BSIM4v6_MOD_VBX: value->rValue = model->BSIM4v6vbx; return(OK); case BSIM4v6_MOD_VBM: value->rValue = model->BSIM4v6vbm; return(OK); case BSIM4v6_MOD_XT: value->rValue = model->BSIM4v6xt; return(OK); case BSIM4v6_MOD_K1: value->rValue = model->BSIM4v6k1; return(OK); case BSIM4v6_MOD_KT1: value->rValue = model->BSIM4v6kt1; return(OK); case BSIM4v6_MOD_KT1L: value->rValue = model->BSIM4v6kt1l; return(OK); case BSIM4v6_MOD_KT2 : value->rValue = model->BSIM4v6kt2; return(OK); case BSIM4v6_MOD_K2 : value->rValue = model->BSIM4v6k2; return(OK); case BSIM4v6_MOD_K3: value->rValue = model->BSIM4v6k3; return(OK); case BSIM4v6_MOD_K3B: value->rValue = model->BSIM4v6k3b; return(OK); case BSIM4v6_MOD_W0: value->rValue = model->BSIM4v6w0; return(OK); case BSIM4v6_MOD_LPE0: value->rValue = model->BSIM4v6lpe0; return(OK); case BSIM4v6_MOD_LPEB: value->rValue = model->BSIM4v6lpeb; return(OK); case BSIM4v6_MOD_DVTP0: value->rValue = model->BSIM4v6dvtp0; return(OK); case BSIM4v6_MOD_DVTP1: value->rValue = model->BSIM4v6dvtp1; return(OK); case BSIM4v6_MOD_DVT0 : value->rValue = model->BSIM4v6dvt0; return(OK); case BSIM4v6_MOD_DVT1 : value->rValue = model->BSIM4v6dvt1; return(OK); case BSIM4v6_MOD_DVT2 : value->rValue = model->BSIM4v6dvt2; return(OK); case BSIM4v6_MOD_DVT0W : value->rValue = model->BSIM4v6dvt0w; return(OK); case BSIM4v6_MOD_DVT1W : value->rValue = model->BSIM4v6dvt1w; return(OK); case BSIM4v6_MOD_DVT2W : value->rValue = model->BSIM4v6dvt2w; return(OK); case BSIM4v6_MOD_DROUT : value->rValue = model->BSIM4v6drout; return(OK); case BSIM4v6_MOD_DSUB : value->rValue = model->BSIM4v6dsub; return(OK); case BSIM4v6_MOD_VTH0: value->rValue = model->BSIM4v6vth0; return(OK); case BSIM4v6_MOD_EU: value->rValue = model->BSIM4v6eu; return(OK); case BSIM4v6_MOD_UCS: value->rValue = model->BSIM4v6ucs; return(OK); case BSIM4v6_MOD_UA: value->rValue = model->BSIM4v6ua; return(OK); case BSIM4v6_MOD_UA1: value->rValue = model->BSIM4v6ua1; return(OK); case BSIM4v6_MOD_UB: value->rValue = model->BSIM4v6ub; return(OK); case BSIM4v6_MOD_UB1: value->rValue = model->BSIM4v6ub1; return(OK); case BSIM4v6_MOD_UC: value->rValue = model->BSIM4v6uc; return(OK); case BSIM4v6_MOD_UC1: value->rValue = model->BSIM4v6uc1; return(OK); case BSIM4v6_MOD_UD: value->rValue = model->BSIM4v6ud; return(OK); case BSIM4v6_MOD_UD1: value->rValue = model->BSIM4v6ud1; return(OK); case BSIM4v6_MOD_UP: value->rValue = model->BSIM4v6up; return(OK); case BSIM4v6_MOD_LP: value->rValue = model->BSIM4v6lp; return(OK); case BSIM4v6_MOD_U0: value->rValue = model->BSIM4v6u0; return(OK); case BSIM4v6_MOD_UTE: value->rValue = model->BSIM4v6ute; return(OK); case BSIM4v6_MOD_UCSTE: value->rValue = model->BSIM4v6ucste; return(OK); case BSIM4v6_MOD_VOFF: value->rValue = model->BSIM4v6voff; return(OK); case BSIM4v6_MOD_TVOFF: value->rValue = model->BSIM4v6tvoff; return(OK); case BSIM4v6_MOD_VFBSDOFF: value->rValue = model->BSIM4v6vfbsdoff; return(OK); case BSIM4v6_MOD_TVFBSDOFF: value->rValue = model->BSIM4v6tvfbsdoff; return(OK); case BSIM4v6_MOD_VOFFL: value->rValue = model->BSIM4v6voffl; return(OK); case BSIM4v6_MOD_VOFFCVL: value->rValue = model->BSIM4v6voffcvl; return(OK); case BSIM4v6_MOD_MINV: value->rValue = model->BSIM4v6minv; return(OK); case BSIM4v6_MOD_MINVCV: value->rValue = model->BSIM4v6minvcv; return(OK); case BSIM4v6_MOD_FPROUT: value->rValue = model->BSIM4v6fprout; return(OK); case BSIM4v6_MOD_PDITS: value->rValue = model->BSIM4v6pdits; return(OK); case BSIM4v6_MOD_PDITSD: value->rValue = model->BSIM4v6pditsd; return(OK); case BSIM4v6_MOD_PDITSL: value->rValue = model->BSIM4v6pditsl; return(OK); case BSIM4v6_MOD_DELTA: value->rValue = model->BSIM4v6delta; return(OK); case BSIM4v6_MOD_RDSW: value->rValue = model->BSIM4v6rdsw; return(OK); case BSIM4v6_MOD_RDSWMIN: value->rValue = model->BSIM4v6rdswmin; return(OK); case BSIM4v6_MOD_RDWMIN: value->rValue = model->BSIM4v6rdwmin; return(OK); case BSIM4v6_MOD_RSWMIN: value->rValue = model->BSIM4v6rswmin; return(OK); case BSIM4v6_MOD_RDW: value->rValue = model->BSIM4v6rdw; return(OK); case BSIM4v6_MOD_RSW: value->rValue = model->BSIM4v6rsw; return(OK); case BSIM4v6_MOD_PRWG: value->rValue = model->BSIM4v6prwg; return(OK); case BSIM4v6_MOD_PRWB: value->rValue = model->BSIM4v6prwb; return(OK); case BSIM4v6_MOD_PRT: value->rValue = model->BSIM4v6prt; return(OK); case BSIM4v6_MOD_ETA0: value->rValue = model->BSIM4v6eta0; return(OK); case BSIM4v6_MOD_ETAB: value->rValue = model->BSIM4v6etab; return(OK); case BSIM4v6_MOD_PCLM: value->rValue = model->BSIM4v6pclm; return(OK); case BSIM4v6_MOD_PDIBL1: value->rValue = model->BSIM4v6pdibl1; return(OK); case BSIM4v6_MOD_PDIBL2: value->rValue = model->BSIM4v6pdibl2; return(OK); case BSIM4v6_MOD_PDIBLB: value->rValue = model->BSIM4v6pdiblb; return(OK); case BSIM4v6_MOD_PSCBE1: value->rValue = model->BSIM4v6pscbe1; return(OK); case BSIM4v6_MOD_PSCBE2: value->rValue = model->BSIM4v6pscbe2; return(OK); case BSIM4v6_MOD_PVAG: value->rValue = model->BSIM4v6pvag; return(OK); case BSIM4v6_MOD_WR: value->rValue = model->BSIM4v6wr; return(OK); case BSIM4v6_MOD_DWG: value->rValue = model->BSIM4v6dwg; return(OK); case BSIM4v6_MOD_DWB: value->rValue = model->BSIM4v6dwb; return(OK); case BSIM4v6_MOD_B0: value->rValue = model->BSIM4v6b0; return(OK); case BSIM4v6_MOD_B1: value->rValue = model->BSIM4v6b1; return(OK); case BSIM4v6_MOD_ALPHA0: value->rValue = model->BSIM4v6alpha0; return(OK); case BSIM4v6_MOD_ALPHA1: value->rValue = model->BSIM4v6alpha1; return(OK); case BSIM4v6_MOD_BETA0: value->rValue = model->BSIM4v6beta0; return(OK); case BSIM4v6_MOD_AGIDL: value->rValue = model->BSIM4v6agidl; return(OK); case BSIM4v6_MOD_BGIDL: value->rValue = model->BSIM4v6bgidl; return(OK); case BSIM4v6_MOD_CGIDL: value->rValue = model->BSIM4v6cgidl; return(OK); case BSIM4v6_MOD_EGIDL: value->rValue = model->BSIM4v6egidl; return(OK); case BSIM4v6_MOD_AGISL: value->rValue = model->BSIM4v6agisl; return(OK); case BSIM4v6_MOD_BGISL: value->rValue = model->BSIM4v6bgisl; return(OK); case BSIM4v6_MOD_CGISL: value->rValue = model->BSIM4v6cgisl; return(OK); case BSIM4v6_MOD_EGISL: value->rValue = model->BSIM4v6egisl; return(OK); case BSIM4v6_MOD_AIGC: value->rValue = model->BSIM4v6aigc; return(OK); case BSIM4v6_MOD_BIGC: value->rValue = model->BSIM4v6bigc; return(OK); case BSIM4v6_MOD_CIGC: value->rValue = model->BSIM4v6cigc; return(OK); case BSIM4v6_MOD_AIGSD: value->rValue = model->BSIM4v6aigsd; return(OK); case BSIM4v6_MOD_BIGSD: value->rValue = model->BSIM4v6bigsd; return(OK); case BSIM4v6_MOD_CIGSD: value->rValue = model->BSIM4v6cigsd; return(OK); case BSIM4v6_MOD_AIGS: value->rValue = model->BSIM4v6aigs; return(OK); case BSIM4v6_MOD_BIGS: value->rValue = model->BSIM4v6bigs; return(OK); case BSIM4v6_MOD_CIGS: value->rValue = model->BSIM4v6cigs; return(OK); case BSIM4v6_MOD_AIGD: value->rValue = model->BSIM4v6aigd; return(OK); case BSIM4v6_MOD_BIGD: value->rValue = model->BSIM4v6bigd; return(OK); case BSIM4v6_MOD_CIGD: value->rValue = model->BSIM4v6cigd; return(OK); case BSIM4v6_MOD_AIGBACC: value->rValue = model->BSIM4v6aigbacc; return(OK); case BSIM4v6_MOD_BIGBACC: value->rValue = model->BSIM4v6bigbacc; return(OK); case BSIM4v6_MOD_CIGBACC: value->rValue = model->BSIM4v6cigbacc; return(OK); case BSIM4v6_MOD_AIGBINV: value->rValue = model->BSIM4v6aigbinv; return(OK); case BSIM4v6_MOD_BIGBINV: value->rValue = model->BSIM4v6bigbinv; return(OK); case BSIM4v6_MOD_CIGBINV: value->rValue = model->BSIM4v6cigbinv; return(OK); case BSIM4v6_MOD_NIGC: value->rValue = model->BSIM4v6nigc; return(OK); case BSIM4v6_MOD_NIGBACC: value->rValue = model->BSIM4v6nigbacc; return(OK); case BSIM4v6_MOD_NIGBINV: value->rValue = model->BSIM4v6nigbinv; return(OK); case BSIM4v6_MOD_NTOX: value->rValue = model->BSIM4v6ntox; return(OK); case BSIM4v6_MOD_EIGBINV: value->rValue = model->BSIM4v6eigbinv; return(OK); case BSIM4v6_MOD_PIGCD: value->rValue = model->BSIM4v6pigcd; return(OK); case BSIM4v6_MOD_POXEDGE: value->rValue = model->BSIM4v6poxedge; return(OK); case BSIM4v6_MOD_PHIN: value->rValue = model->BSIM4v6phin; return(OK); case BSIM4v6_MOD_XRCRG1: value->rValue = model->BSIM4v6xrcrg1; return(OK); case BSIM4v6_MOD_XRCRG2: value->rValue = model->BSIM4v6xrcrg2; return(OK); case BSIM4v6_MOD_TNOIA: value->rValue = model->BSIM4v6tnoia; return(OK); case BSIM4v6_MOD_TNOIB: value->rValue = model->BSIM4v6tnoib; return(OK); case BSIM4v6_MOD_RNOIA: value->rValue = model->BSIM4v6rnoia; return(OK); case BSIM4v6_MOD_RNOIB: value->rValue = model->BSIM4v6rnoib; return(OK); case BSIM4v6_MOD_NTNOI: value->rValue = model->BSIM4v6ntnoi; return(OK); case BSIM4v6_MOD_IJTHDFWD: value->rValue = model->BSIM4v6ijthdfwd; return(OK); case BSIM4v6_MOD_IJTHSFWD: value->rValue = model->BSIM4v6ijthsfwd; return(OK); case BSIM4v6_MOD_IJTHDREV: value->rValue = model->BSIM4v6ijthdrev; return(OK); case BSIM4v6_MOD_IJTHSREV: value->rValue = model->BSIM4v6ijthsrev; return(OK); case BSIM4v6_MOD_XJBVD: value->rValue = model->BSIM4v6xjbvd; return(OK); case BSIM4v6_MOD_XJBVS: value->rValue = model->BSIM4v6xjbvs; return(OK); case BSIM4v6_MOD_BVD: value->rValue = model->BSIM4v6bvd; return(OK); case BSIM4v6_MOD_BVS: value->rValue = model->BSIM4v6bvs; return(OK); case BSIM4v6_MOD_VFB: value->rValue = model->BSIM4v6vfb; return(OK); case BSIM4v6_MOD_JTSS: value->rValue = model->BSIM4v6jtss; return(OK); case BSIM4v6_MOD_JTSD: value->rValue = model->BSIM4v6jtsd; return(OK); case BSIM4v6_MOD_JTSSWS: value->rValue = model->BSIM4v6jtssws; return(OK); case BSIM4v6_MOD_JTSSWD: value->rValue = model->BSIM4v6jtsswd; return(OK); case BSIM4v6_MOD_JTSSWGS: value->rValue = model->BSIM4v6jtsswgs; return(OK); case BSIM4v6_MOD_JTSSWGD: value->rValue = model->BSIM4v6jtsswgd; return(OK); case BSIM4v6_MOD_JTWEFF: value->rValue = model->BSIM4v6jtweff; return(OK); case BSIM4v6_MOD_NJTS: value->rValue = model->BSIM4v6njts; return(OK); case BSIM4v6_MOD_NJTSSW: value->rValue = model->BSIM4v6njtssw; return(OK); case BSIM4v6_MOD_NJTSSWG: value->rValue = model->BSIM4v6njtsswg; return(OK); case BSIM4v6_MOD_NJTSD: value->rValue = model->BSIM4v6njtsd; return(OK); case BSIM4v6_MOD_NJTSSWD: value->rValue = model->BSIM4v6njtsswd; return(OK); case BSIM4v6_MOD_NJTSSWGD: value->rValue = model->BSIM4v6njtsswgd; return(OK); case BSIM4v6_MOD_XTSS: value->rValue = model->BSIM4v6xtss; return(OK); case BSIM4v6_MOD_XTSD: value->rValue = model->BSIM4v6xtsd; return(OK); case BSIM4v6_MOD_XTSSWS: value->rValue = model->BSIM4v6xtssws; return(OK); case BSIM4v6_MOD_XTSSWD: value->rValue = model->BSIM4v6xtsswd; return(OK); case BSIM4v6_MOD_XTSSWGS: value->rValue = model->BSIM4v6xtsswgs; return(OK); case BSIM4v6_MOD_XTSSWGD: value->rValue = model->BSIM4v6xtsswgd; return(OK); case BSIM4v6_MOD_TNJTS: value->rValue = model->BSIM4v6tnjts; return(OK); case BSIM4v6_MOD_TNJTSSW: value->rValue = model->BSIM4v6tnjtssw; return(OK); case BSIM4v6_MOD_TNJTSSWG: value->rValue = model->BSIM4v6tnjtsswg; return(OK); case BSIM4v6_MOD_TNJTSD: value->rValue = model->BSIM4v6tnjtsd; return(OK); case BSIM4v6_MOD_TNJTSSWD: value->rValue = model->BSIM4v6tnjtsswd; return(OK); case BSIM4v6_MOD_TNJTSSWGD: value->rValue = model->BSIM4v6tnjtsswgd; return(OK); case BSIM4v6_MOD_VTSS: value->rValue = model->BSIM4v6vtss; return(OK); case BSIM4v6_MOD_VTSD: value->rValue = model->BSIM4v6vtsd; return(OK); case BSIM4v6_MOD_VTSSWS: value->rValue = model->BSIM4v6vtssws; return(OK); case BSIM4v6_MOD_VTSSWD: value->rValue = model->BSIM4v6vtsswd; return(OK); case BSIM4v6_MOD_VTSSWGS: value->rValue = model->BSIM4v6vtsswgs; return(OK); case BSIM4v6_MOD_VTSSWGD: value->rValue = model->BSIM4v6vtsswgd; return(OK); case BSIM4v6_MOD_GBMIN: value->rValue = model->BSIM4v6gbmin; return(OK); case BSIM4v6_MOD_RBDB: value->rValue = model->BSIM4v6rbdb; return(OK); case BSIM4v6_MOD_RBPB: value->rValue = model->BSIM4v6rbpb; return(OK); case BSIM4v6_MOD_RBSB: value->rValue = model->BSIM4v6rbsb; return(OK); case BSIM4v6_MOD_RBPS: value->rValue = model->BSIM4v6rbps; return(OK); case BSIM4v6_MOD_RBPD: value->rValue = model->BSIM4v6rbpd; return(OK); case BSIM4v6_MOD_RBPS0: value->rValue = model->BSIM4v6rbps0; return(OK); case BSIM4v6_MOD_RBPSL: value->rValue = model->BSIM4v6rbpsl; return(OK); case BSIM4v6_MOD_RBPSW: value->rValue = model->BSIM4v6rbpsw; return(OK); case BSIM4v6_MOD_RBPSNF: value->rValue = model->BSIM4v6rbpsnf; return(OK); case BSIM4v6_MOD_RBPD0: value->rValue = model->BSIM4v6rbpd0; return(OK); case BSIM4v6_MOD_RBPDL: value->rValue = model->BSIM4v6rbpdl; return(OK); case BSIM4v6_MOD_RBPDW: value->rValue = model->BSIM4v6rbpdw; return(OK); case BSIM4v6_MOD_RBPDNF: value->rValue = model->BSIM4v6rbpdnf; return(OK); case BSIM4v6_MOD_RBPBX0: value->rValue = model->BSIM4v6rbpbx0; return(OK); case BSIM4v6_MOD_RBPBXL: value->rValue = model->BSIM4v6rbpbxl; return(OK); case BSIM4v6_MOD_RBPBXW: value->rValue = model->BSIM4v6rbpbxw; return(OK); case BSIM4v6_MOD_RBPBXNF: value->rValue = model->BSIM4v6rbpbxnf; return(OK); case BSIM4v6_MOD_RBPBY0: value->rValue = model->BSIM4v6rbpby0; return(OK); case BSIM4v6_MOD_RBPBYL: value->rValue = model->BSIM4v6rbpbyl; return(OK); case BSIM4v6_MOD_RBPBYW: value->rValue = model->BSIM4v6rbpbyw; return(OK); case BSIM4v6_MOD_RBPBYNF: value->rValue = model->BSIM4v6rbpbynf; return(OK); case BSIM4v6_MOD_RBSBX0: value->rValue = model->BSIM4v6rbsbx0; return(OK); case BSIM4v6_MOD_RBSBY0: value->rValue = model->BSIM4v6rbsby0; return(OK); case BSIM4v6_MOD_RBDBX0: value->rValue = model->BSIM4v6rbdbx0; return(OK); case BSIM4v6_MOD_RBDBY0: value->rValue = model->BSIM4v6rbdby0; return(OK); case BSIM4v6_MOD_RBSDBXL: value->rValue = model->BSIM4v6rbsdbxl; return(OK); case BSIM4v6_MOD_RBSDBXW: value->rValue = model->BSIM4v6rbsdbxw; return(OK); case BSIM4v6_MOD_RBSDBXNF: value->rValue = model->BSIM4v6rbsdbxnf; return(OK); case BSIM4v6_MOD_RBSDBYL: value->rValue = model->BSIM4v6rbsdbyl; return(OK); case BSIM4v6_MOD_RBSDBYW: value->rValue = model->BSIM4v6rbsdbyw; return(OK); case BSIM4v6_MOD_RBSDBYNF: value->rValue = model->BSIM4v6rbsdbynf; return(OK); case BSIM4v6_MOD_CGSL: value->rValue = model->BSIM4v6cgsl; return(OK); case BSIM4v6_MOD_CGDL: value->rValue = model->BSIM4v6cgdl; return(OK); case BSIM4v6_MOD_CKAPPAS: value->rValue = model->BSIM4v6ckappas; return(OK); case BSIM4v6_MOD_CKAPPAD: value->rValue = model->BSIM4v6ckappad; return(OK); case BSIM4v6_MOD_CF: value->rValue = model->BSIM4v6cf; return(OK); case BSIM4v6_MOD_CLC: value->rValue = model->BSIM4v6clc; return(OK); case BSIM4v6_MOD_CLE: value->rValue = model->BSIM4v6cle; return(OK); case BSIM4v6_MOD_DWC: value->rValue = model->BSIM4v6dwc; return(OK); case BSIM4v6_MOD_DLC: value->rValue = model->BSIM4v6dlc; return(OK); case BSIM4v6_MOD_XW: value->rValue = model->BSIM4v6xw; return(OK); case BSIM4v6_MOD_XL: value->rValue = model->BSIM4v6xl; return(OK); case BSIM4v6_MOD_DLCIG: value->rValue = model->BSIM4v6dlcig; return(OK); case BSIM4v6_MOD_DLCIGD: value->rValue = model->BSIM4v6dlcigd; return(OK); case BSIM4v6_MOD_DWJ: value->rValue = model->BSIM4v6dwj; return(OK); case BSIM4v6_MOD_VFBCV: value->rValue = model->BSIM4v6vfbcv; return(OK); case BSIM4v6_MOD_ACDE: value->rValue = model->BSIM4v6acde; return(OK); case BSIM4v6_MOD_MOIN: value->rValue = model->BSIM4v6moin; return(OK); case BSIM4v6_MOD_NOFF: value->rValue = model->BSIM4v6noff; return(OK); case BSIM4v6_MOD_VOFFCV: value->rValue = model->BSIM4v6voffcv; return(OK); case BSIM4v6_MOD_DMCG: value->rValue = model->BSIM4v6dmcg; return(OK); case BSIM4v6_MOD_DMCI: value->rValue = model->BSIM4v6dmci; return(OK); case BSIM4v6_MOD_DMDG: value->rValue = model->BSIM4v6dmdg; return(OK); case BSIM4v6_MOD_DMCGT: value->rValue = model->BSIM4v6dmcgt; return(OK); case BSIM4v6_MOD_XGW: value->rValue = model->BSIM4v6xgw; return(OK); case BSIM4v6_MOD_XGL: value->rValue = model->BSIM4v6xgl; return(OK); case BSIM4v6_MOD_RSHG: value->rValue = model->BSIM4v6rshg; return(OK); case BSIM4v6_MOD_TCJ: value->rValue = model->BSIM4v6tcj; return(OK); case BSIM4v6_MOD_TPB: value->rValue = model->BSIM4v6tpb; return(OK); case BSIM4v6_MOD_TCJSW: value->rValue = model->BSIM4v6tcjsw; return(OK); case BSIM4v6_MOD_TPBSW: value->rValue = model->BSIM4v6tpbsw; return(OK); case BSIM4v6_MOD_TCJSWG: value->rValue = model->BSIM4v6tcjswg; return(OK); case BSIM4v6_MOD_TPBSWG: value->rValue = model->BSIM4v6tpbswg; return(OK); /* Length dependence */ case BSIM4v6_MOD_LCDSC : value->rValue = model->BSIM4v6lcdsc; return(OK); case BSIM4v6_MOD_LCDSCB : value->rValue = model->BSIM4v6lcdscb; return(OK); case BSIM4v6_MOD_LCDSCD : value->rValue = model->BSIM4v6lcdscd; return(OK); case BSIM4v6_MOD_LCIT : value->rValue = model->BSIM4v6lcit; return(OK); case BSIM4v6_MOD_LNFACTOR : value->rValue = model->BSIM4v6lnfactor; return(OK); case BSIM4v6_MOD_LXJ: value->rValue = model->BSIM4v6lxj; return(OK); case BSIM4v6_MOD_LVSAT: value->rValue = model->BSIM4v6lvsat; return(OK); case BSIM4v6_MOD_LAT: value->rValue = model->BSIM4v6lat; return(OK); case BSIM4v6_MOD_LA0: value->rValue = model->BSIM4v6la0; return(OK); case BSIM4v6_MOD_LAGS: value->rValue = model->BSIM4v6lags; return(OK); case BSIM4v6_MOD_LA1: value->rValue = model->BSIM4v6la1; return(OK); case BSIM4v6_MOD_LA2: value->rValue = model->BSIM4v6la2; return(OK); case BSIM4v6_MOD_LKETA: value->rValue = model->BSIM4v6lketa; return(OK); case BSIM4v6_MOD_LNSUB: value->rValue = model->BSIM4v6lnsub; return(OK); case BSIM4v6_MOD_LNDEP: value->rValue = model->BSIM4v6lndep; return(OK); case BSIM4v6_MOD_LNSD: value->rValue = model->BSIM4v6lnsd; return(OK); case BSIM4v6_MOD_LNGATE: value->rValue = model->BSIM4v6lngate; return(OK); case BSIM4v6_MOD_LGAMMA1: value->rValue = model->BSIM4v6lgamma1; return(OK); case BSIM4v6_MOD_LGAMMA2: value->rValue = model->BSIM4v6lgamma2; return(OK); case BSIM4v6_MOD_LVBX: value->rValue = model->BSIM4v6lvbx; return(OK); case BSIM4v6_MOD_LVBM: value->rValue = model->BSIM4v6lvbm; return(OK); case BSIM4v6_MOD_LXT: value->rValue = model->BSIM4v6lxt; return(OK); case BSIM4v6_MOD_LK1: value->rValue = model->BSIM4v6lk1; return(OK); case BSIM4v6_MOD_LKT1: value->rValue = model->BSIM4v6lkt1; return(OK); case BSIM4v6_MOD_LKT1L: value->rValue = model->BSIM4v6lkt1l; return(OK); case BSIM4v6_MOD_LKT2 : value->rValue = model->BSIM4v6lkt2; return(OK); case BSIM4v6_MOD_LK2 : value->rValue = model->BSIM4v6lk2; return(OK); case BSIM4v6_MOD_LK3: value->rValue = model->BSIM4v6lk3; return(OK); case BSIM4v6_MOD_LK3B: value->rValue = model->BSIM4v6lk3b; return(OK); case BSIM4v6_MOD_LW0: value->rValue = model->BSIM4v6lw0; return(OK); case BSIM4v6_MOD_LLPE0: value->rValue = model->BSIM4v6llpe0; return(OK); case BSIM4v6_MOD_LLPEB: value->rValue = model->BSIM4v6llpeb; return(OK); case BSIM4v6_MOD_LDVTP0: value->rValue = model->BSIM4v6ldvtp0; return(OK); case BSIM4v6_MOD_LDVTP1: value->rValue = model->BSIM4v6ldvtp1; return(OK); case BSIM4v6_MOD_LDVT0: value->rValue = model->BSIM4v6ldvt0; return(OK); case BSIM4v6_MOD_LDVT1 : value->rValue = model->BSIM4v6ldvt1; return(OK); case BSIM4v6_MOD_LDVT2 : value->rValue = model->BSIM4v6ldvt2; return(OK); case BSIM4v6_MOD_LDVT0W : value->rValue = model->BSIM4v6ldvt0w; return(OK); case BSIM4v6_MOD_LDVT1W : value->rValue = model->BSIM4v6ldvt1w; return(OK); case BSIM4v6_MOD_LDVT2W : value->rValue = model->BSIM4v6ldvt2w; return(OK); case BSIM4v6_MOD_LDROUT : value->rValue = model->BSIM4v6ldrout; return(OK); case BSIM4v6_MOD_LDSUB : value->rValue = model->BSIM4v6ldsub; return(OK); case BSIM4v6_MOD_LVTH0: value->rValue = model->BSIM4v6lvth0; return(OK); case BSIM4v6_MOD_LUA: value->rValue = model->BSIM4v6lua; return(OK); case BSIM4v6_MOD_LUA1: value->rValue = model->BSIM4v6lua1; return(OK); case BSIM4v6_MOD_LUB: value->rValue = model->BSIM4v6lub; return(OK); case BSIM4v6_MOD_LUB1: value->rValue = model->BSIM4v6lub1; return(OK); case BSIM4v6_MOD_LUC: value->rValue = model->BSIM4v6luc; return(OK); case BSIM4v6_MOD_LUC1: value->rValue = model->BSIM4v6luc1; return(OK); case BSIM4v6_MOD_LUD: value->rValue = model->BSIM4v6lud; return(OK); case BSIM4v6_MOD_LUD1: value->rValue = model->BSIM4v6lud1; return(OK); case BSIM4v6_MOD_LUP: value->rValue = model->BSIM4v6lup; return(OK); case BSIM4v6_MOD_LLP: value->rValue = model->BSIM4v6llp; return(OK); case BSIM4v6_MOD_LU0: value->rValue = model->BSIM4v6lu0; return(OK); case BSIM4v6_MOD_LUTE: value->rValue = model->BSIM4v6lute; return(OK); case BSIM4v6_MOD_LUCSTE: value->rValue = model->BSIM4v6lucste; return(OK); case BSIM4v6_MOD_LVOFF: value->rValue = model->BSIM4v6lvoff; return(OK); case BSIM4v6_MOD_LTVOFF: value->rValue = model->BSIM4v6ltvoff; return(OK); case BSIM4v6_MOD_LMINV: value->rValue = model->BSIM4v6lminv; return(OK); case BSIM4v6_MOD_LMINVCV: value->rValue = model->BSIM4v6lminvcv; return(OK); case BSIM4v6_MOD_LFPROUT: value->rValue = model->BSIM4v6lfprout; return(OK); case BSIM4v6_MOD_LPDITS: value->rValue = model->BSIM4v6lpdits; return(OK); case BSIM4v6_MOD_LPDITSD: value->rValue = model->BSIM4v6lpditsd; return(OK); case BSIM4v6_MOD_LDELTA: value->rValue = model->BSIM4v6ldelta; return(OK); case BSIM4v6_MOD_LRDSW: value->rValue = model->BSIM4v6lrdsw; return(OK); case BSIM4v6_MOD_LRDW: value->rValue = model->BSIM4v6lrdw; return(OK); case BSIM4v6_MOD_LRSW: value->rValue = model->BSIM4v6lrsw; return(OK); case BSIM4v6_MOD_LPRWB: value->rValue = model->BSIM4v6lprwb; return(OK); case BSIM4v6_MOD_LPRWG: value->rValue = model->BSIM4v6lprwg; return(OK); case BSIM4v6_MOD_LPRT: value->rValue = model->BSIM4v6lprt; return(OK); case BSIM4v6_MOD_LETA0: value->rValue = model->BSIM4v6leta0; return(OK); case BSIM4v6_MOD_LETAB: value->rValue = model->BSIM4v6letab; return(OK); case BSIM4v6_MOD_LPCLM: value->rValue = model->BSIM4v6lpclm; return(OK); case BSIM4v6_MOD_LPDIBL1: value->rValue = model->BSIM4v6lpdibl1; return(OK); case BSIM4v6_MOD_LPDIBL2: value->rValue = model->BSIM4v6lpdibl2; return(OK); case BSIM4v6_MOD_LPDIBLB: value->rValue = model->BSIM4v6lpdiblb; return(OK); case BSIM4v6_MOD_LPSCBE1: value->rValue = model->BSIM4v6lpscbe1; return(OK); case BSIM4v6_MOD_LPSCBE2: value->rValue = model->BSIM4v6lpscbe2; return(OK); case BSIM4v6_MOD_LPVAG: value->rValue = model->BSIM4v6lpvag; return(OK); case BSIM4v6_MOD_LWR: value->rValue = model->BSIM4v6lwr; return(OK); case BSIM4v6_MOD_LDWG: value->rValue = model->BSIM4v6ldwg; return(OK); case BSIM4v6_MOD_LDWB: value->rValue = model->BSIM4v6ldwb; return(OK); case BSIM4v6_MOD_LB0: value->rValue = model->BSIM4v6lb0; return(OK); case BSIM4v6_MOD_LB1: value->rValue = model->BSIM4v6lb1; return(OK); case BSIM4v6_MOD_LALPHA0: value->rValue = model->BSIM4v6lalpha0; return(OK); case BSIM4v6_MOD_LALPHA1: value->rValue = model->BSIM4v6lalpha1; return(OK); case BSIM4v6_MOD_LBETA0: value->rValue = model->BSIM4v6lbeta0; return(OK); case BSIM4v6_MOD_LAGIDL: value->rValue = model->BSIM4v6lagidl; return(OK); case BSIM4v6_MOD_LBGIDL: value->rValue = model->BSIM4v6lbgidl; return(OK); case BSIM4v6_MOD_LCGIDL: value->rValue = model->BSIM4v6lcgidl; return(OK); case BSIM4v6_MOD_LEGIDL: value->rValue = model->BSIM4v6legidl; return(OK); case BSIM4v6_MOD_LAGISL: value->rValue = model->BSIM4v6lagisl; return(OK); case BSIM4v6_MOD_LBGISL: value->rValue = model->BSIM4v6lbgisl; return(OK); case BSIM4v6_MOD_LCGISL: value->rValue = model->BSIM4v6lcgisl; return(OK); case BSIM4v6_MOD_LEGISL: value->rValue = model->BSIM4v6legisl; return(OK); case BSIM4v6_MOD_LAIGC: value->rValue = model->BSIM4v6laigc; return(OK); case BSIM4v6_MOD_LBIGC: value->rValue = model->BSIM4v6lbigc; return(OK); case BSIM4v6_MOD_LCIGC: value->rValue = model->BSIM4v6lcigc; return(OK); case BSIM4v6_MOD_LAIGSD: value->rValue = model->BSIM4v6laigsd; return(OK); case BSIM4v6_MOD_LBIGSD: value->rValue = model->BSIM4v6lbigsd; return(OK); case BSIM4v6_MOD_LCIGSD: value->rValue = model->BSIM4v6lcigsd; return(OK); case BSIM4v6_MOD_LAIGS: value->rValue = model->BSIM4v6laigs; return(OK); case BSIM4v6_MOD_LBIGS: value->rValue = model->BSIM4v6lbigs; return(OK); case BSIM4v6_MOD_LCIGS: value->rValue = model->BSIM4v6lcigs; return(OK); case BSIM4v6_MOD_LAIGD: value->rValue = model->BSIM4v6laigd; return(OK); case BSIM4v6_MOD_LBIGD: value->rValue = model->BSIM4v6lbigd; return(OK); case BSIM4v6_MOD_LCIGD: value->rValue = model->BSIM4v6lcigd; return(OK); case BSIM4v6_MOD_LAIGBACC: value->rValue = model->BSIM4v6laigbacc; return(OK); case BSIM4v6_MOD_LBIGBACC: value->rValue = model->BSIM4v6lbigbacc; return(OK); case BSIM4v6_MOD_LCIGBACC: value->rValue = model->BSIM4v6lcigbacc; return(OK); case BSIM4v6_MOD_LAIGBINV: value->rValue = model->BSIM4v6laigbinv; return(OK); case BSIM4v6_MOD_LBIGBINV: value->rValue = model->BSIM4v6lbigbinv; return(OK); case BSIM4v6_MOD_LCIGBINV: value->rValue = model->BSIM4v6lcigbinv; return(OK); case BSIM4v6_MOD_LNIGC: value->rValue = model->BSIM4v6lnigc; return(OK); case BSIM4v6_MOD_LNIGBACC: value->rValue = model->BSIM4v6lnigbacc; return(OK); case BSIM4v6_MOD_LNIGBINV: value->rValue = model->BSIM4v6lnigbinv; return(OK); case BSIM4v6_MOD_LNTOX: value->rValue = model->BSIM4v6lntox; return(OK); case BSIM4v6_MOD_LEIGBINV: value->rValue = model->BSIM4v6leigbinv; return(OK); case BSIM4v6_MOD_LPIGCD: value->rValue = model->BSIM4v6lpigcd; return(OK); case BSIM4v6_MOD_LPOXEDGE: value->rValue = model->BSIM4v6lpoxedge; return(OK); case BSIM4v6_MOD_LPHIN: value->rValue = model->BSIM4v6lphin; return(OK); case BSIM4v6_MOD_LXRCRG1: value->rValue = model->BSIM4v6lxrcrg1; return(OK); case BSIM4v6_MOD_LXRCRG2: value->rValue = model->BSIM4v6lxrcrg2; return(OK); case BSIM4v6_MOD_LEU: value->rValue = model->BSIM4v6leu; return(OK); case BSIM4v6_MOD_LUCS: value->rValue = model->BSIM4v6lucs; return(OK); case BSIM4v6_MOD_LVFB: value->rValue = model->BSIM4v6lvfb; return(OK); case BSIM4v6_MOD_LCGSL: value->rValue = model->BSIM4v6lcgsl; return(OK); case BSIM4v6_MOD_LCGDL: value->rValue = model->BSIM4v6lcgdl; return(OK); case BSIM4v6_MOD_LCKAPPAS: value->rValue = model->BSIM4v6lckappas; return(OK); case BSIM4v6_MOD_LCKAPPAD: value->rValue = model->BSIM4v6lckappad; return(OK); case BSIM4v6_MOD_LCF: value->rValue = model->BSIM4v6lcf; return(OK); case BSIM4v6_MOD_LCLC: value->rValue = model->BSIM4v6lclc; return(OK); case BSIM4v6_MOD_LCLE: value->rValue = model->BSIM4v6lcle; return(OK); case BSIM4v6_MOD_LVFBCV: value->rValue = model->BSIM4v6lvfbcv; return(OK); case BSIM4v6_MOD_LACDE: value->rValue = model->BSIM4v6lacde; return(OK); case BSIM4v6_MOD_LMOIN: value->rValue = model->BSIM4v6lmoin; return(OK); case BSIM4v6_MOD_LNOFF: value->rValue = model->BSIM4v6lnoff; return(OK); case BSIM4v6_MOD_LVOFFCV: value->rValue = model->BSIM4v6lvoffcv; return(OK); case BSIM4v6_MOD_LVFBSDOFF: value->rValue = model->BSIM4v6lvfbsdoff; return(OK); case BSIM4v6_MOD_LTVFBSDOFF: value->rValue = model->BSIM4v6ltvfbsdoff; return(OK); /* Width dependence */ case BSIM4v6_MOD_WCDSC : value->rValue = model->BSIM4v6wcdsc; return(OK); case BSIM4v6_MOD_WCDSCB : value->rValue = model->BSIM4v6wcdscb; return(OK); case BSIM4v6_MOD_WCDSCD : value->rValue = model->BSIM4v6wcdscd; return(OK); case BSIM4v6_MOD_WCIT : value->rValue = model->BSIM4v6wcit; return(OK); case BSIM4v6_MOD_WNFACTOR : value->rValue = model->BSIM4v6wnfactor; return(OK); case BSIM4v6_MOD_WXJ: value->rValue = model->BSIM4v6wxj; return(OK); case BSIM4v6_MOD_WVSAT: value->rValue = model->BSIM4v6wvsat; return(OK); case BSIM4v6_MOD_WAT: value->rValue = model->BSIM4v6wat; return(OK); case BSIM4v6_MOD_WA0: value->rValue = model->BSIM4v6wa0; return(OK); case BSIM4v6_MOD_WAGS: value->rValue = model->BSIM4v6wags; return(OK); case BSIM4v6_MOD_WA1: value->rValue = model->BSIM4v6wa1; return(OK); case BSIM4v6_MOD_WA2: value->rValue = model->BSIM4v6wa2; return(OK); case BSIM4v6_MOD_WKETA: value->rValue = model->BSIM4v6wketa; return(OK); case BSIM4v6_MOD_WNSUB: value->rValue = model->BSIM4v6wnsub; return(OK); case BSIM4v6_MOD_WNDEP: value->rValue = model->BSIM4v6wndep; return(OK); case BSIM4v6_MOD_WNSD: value->rValue = model->BSIM4v6wnsd; return(OK); case BSIM4v6_MOD_WNGATE: value->rValue = model->BSIM4v6wngate; return(OK); case BSIM4v6_MOD_WGAMMA1: value->rValue = model->BSIM4v6wgamma1; return(OK); case BSIM4v6_MOD_WGAMMA2: value->rValue = model->BSIM4v6wgamma2; return(OK); case BSIM4v6_MOD_WVBX: value->rValue = model->BSIM4v6wvbx; return(OK); case BSIM4v6_MOD_WVBM: value->rValue = model->BSIM4v6wvbm; return(OK); case BSIM4v6_MOD_WXT: value->rValue = model->BSIM4v6wxt; return(OK); case BSIM4v6_MOD_WK1: value->rValue = model->BSIM4v6wk1; return(OK); case BSIM4v6_MOD_WKT1: value->rValue = model->BSIM4v6wkt1; return(OK); case BSIM4v6_MOD_WKT1L: value->rValue = model->BSIM4v6wkt1l; return(OK); case BSIM4v6_MOD_WKT2 : value->rValue = model->BSIM4v6wkt2; return(OK); case BSIM4v6_MOD_WK2 : value->rValue = model->BSIM4v6wk2; return(OK); case BSIM4v6_MOD_WK3: value->rValue = model->BSIM4v6wk3; return(OK); case BSIM4v6_MOD_WK3B: value->rValue = model->BSIM4v6wk3b; return(OK); case BSIM4v6_MOD_WW0: value->rValue = model->BSIM4v6ww0; return(OK); case BSIM4v6_MOD_WLPE0: value->rValue = model->BSIM4v6wlpe0; return(OK); case BSIM4v6_MOD_WDVTP0: value->rValue = model->BSIM4v6wdvtp0; return(OK); case BSIM4v6_MOD_WDVTP1: value->rValue = model->BSIM4v6wdvtp1; return(OK); case BSIM4v6_MOD_WLPEB: value->rValue = model->BSIM4v6wlpeb; return(OK); case BSIM4v6_MOD_WDVT0: value->rValue = model->BSIM4v6wdvt0; return(OK); case BSIM4v6_MOD_WDVT1 : value->rValue = model->BSIM4v6wdvt1; return(OK); case BSIM4v6_MOD_WDVT2 : value->rValue = model->BSIM4v6wdvt2; return(OK); case BSIM4v6_MOD_WDVT0W : value->rValue = model->BSIM4v6wdvt0w; return(OK); case BSIM4v6_MOD_WDVT1W : value->rValue = model->BSIM4v6wdvt1w; return(OK); case BSIM4v6_MOD_WDVT2W : value->rValue = model->BSIM4v6wdvt2w; return(OK); case BSIM4v6_MOD_WDROUT : value->rValue = model->BSIM4v6wdrout; return(OK); case BSIM4v6_MOD_WDSUB : value->rValue = model->BSIM4v6wdsub; return(OK); case BSIM4v6_MOD_WVTH0: value->rValue = model->BSIM4v6wvth0; return(OK); case BSIM4v6_MOD_WUA: value->rValue = model->BSIM4v6wua; return(OK); case BSIM4v6_MOD_WUA1: value->rValue = model->BSIM4v6wua1; return(OK); case BSIM4v6_MOD_WUB: value->rValue = model->BSIM4v6wub; return(OK); case BSIM4v6_MOD_WUB1: value->rValue = model->BSIM4v6wub1; return(OK); case BSIM4v6_MOD_WUC: value->rValue = model->BSIM4v6wuc; return(OK); case BSIM4v6_MOD_WUC1: value->rValue = model->BSIM4v6wuc1; return(OK); case BSIM4v6_MOD_WUD: value->rValue = model->BSIM4v6wud; return(OK); case BSIM4v6_MOD_WUD1: value->rValue = model->BSIM4v6wud1; return(OK); case BSIM4v6_MOD_WUP: value->rValue = model->BSIM4v6wup; return(OK); case BSIM4v6_MOD_WLP: value->rValue = model->BSIM4v6wlp; return(OK); case BSIM4v6_MOD_WU0: value->rValue = model->BSIM4v6wu0; return(OK); case BSIM4v6_MOD_WUTE: value->rValue = model->BSIM4v6wute; return(OK); case BSIM4v6_MOD_WUCSTE: value->rValue = model->BSIM4v6wucste; return(OK); case BSIM4v6_MOD_WVOFF: value->rValue = model->BSIM4v6wvoff; return(OK); case BSIM4v6_MOD_WTVOFF: value->rValue = model->BSIM4v6wtvoff; return(OK); case BSIM4v6_MOD_WMINV: value->rValue = model->BSIM4v6wminv; return(OK); case BSIM4v6_MOD_WMINVCV: value->rValue = model->BSIM4v6wminvcv; return(OK); case BSIM4v6_MOD_WFPROUT: value->rValue = model->BSIM4v6wfprout; return(OK); case BSIM4v6_MOD_WPDITS: value->rValue = model->BSIM4v6wpdits; return(OK); case BSIM4v6_MOD_WPDITSD: value->rValue = model->BSIM4v6wpditsd; return(OK); case BSIM4v6_MOD_WDELTA: value->rValue = model->BSIM4v6wdelta; return(OK); case BSIM4v6_MOD_WRDSW: value->rValue = model->BSIM4v6wrdsw; return(OK); case BSIM4v6_MOD_WRDW: value->rValue = model->BSIM4v6wrdw; return(OK); case BSIM4v6_MOD_WRSW: value->rValue = model->BSIM4v6wrsw; return(OK); case BSIM4v6_MOD_WPRWB: value->rValue = model->BSIM4v6wprwb; return(OK); case BSIM4v6_MOD_WPRWG: value->rValue = model->BSIM4v6wprwg; return(OK); case BSIM4v6_MOD_WPRT: value->rValue = model->BSIM4v6wprt; return(OK); case BSIM4v6_MOD_WETA0: value->rValue = model->BSIM4v6weta0; return(OK); case BSIM4v6_MOD_WETAB: value->rValue = model->BSIM4v6wetab; return(OK); case BSIM4v6_MOD_WPCLM: value->rValue = model->BSIM4v6wpclm; return(OK); case BSIM4v6_MOD_WPDIBL1: value->rValue = model->BSIM4v6wpdibl1; return(OK); case BSIM4v6_MOD_WPDIBL2: value->rValue = model->BSIM4v6wpdibl2; return(OK); case BSIM4v6_MOD_WPDIBLB: value->rValue = model->BSIM4v6wpdiblb; return(OK); case BSIM4v6_MOD_WPSCBE1: value->rValue = model->BSIM4v6wpscbe1; return(OK); case BSIM4v6_MOD_WPSCBE2: value->rValue = model->BSIM4v6wpscbe2; return(OK); case BSIM4v6_MOD_WPVAG: value->rValue = model->BSIM4v6wpvag; return(OK); case BSIM4v6_MOD_WWR: value->rValue = model->BSIM4v6wwr; return(OK); case BSIM4v6_MOD_WDWG: value->rValue = model->BSIM4v6wdwg; return(OK); case BSIM4v6_MOD_WDWB: value->rValue = model->BSIM4v6wdwb; return(OK); case BSIM4v6_MOD_WB0: value->rValue = model->BSIM4v6wb0; return(OK); case BSIM4v6_MOD_WB1: value->rValue = model->BSIM4v6wb1; return(OK); case BSIM4v6_MOD_WALPHA0: value->rValue = model->BSIM4v6walpha0; return(OK); case BSIM4v6_MOD_WALPHA1: value->rValue = model->BSIM4v6walpha1; return(OK); case BSIM4v6_MOD_WBETA0: value->rValue = model->BSIM4v6wbeta0; return(OK); case BSIM4v6_MOD_WAGIDL: value->rValue = model->BSIM4v6wagidl; return(OK); case BSIM4v6_MOD_WBGIDL: value->rValue = model->BSIM4v6wbgidl; return(OK); case BSIM4v6_MOD_WCGIDL: value->rValue = model->BSIM4v6wcgidl; return(OK); case BSIM4v6_MOD_WEGIDL: value->rValue = model->BSIM4v6wegidl; return(OK); case BSIM4v6_MOD_WAGISL: value->rValue = model->BSIM4v6wagisl; return(OK); case BSIM4v6_MOD_WBGISL: value->rValue = model->BSIM4v6wbgisl; return(OK); case BSIM4v6_MOD_WCGISL: value->rValue = model->BSIM4v6wcgisl; return(OK); case BSIM4v6_MOD_WEGISL: value->rValue = model->BSIM4v6wegisl; return(OK); case BSIM4v6_MOD_WAIGC: value->rValue = model->BSIM4v6waigc; return(OK); case BSIM4v6_MOD_WBIGC: value->rValue = model->BSIM4v6wbigc; return(OK); case BSIM4v6_MOD_WCIGC: value->rValue = model->BSIM4v6wcigc; return(OK); case BSIM4v6_MOD_WAIGSD: value->rValue = model->BSIM4v6waigsd; return(OK); case BSIM4v6_MOD_WBIGSD: value->rValue = model->BSIM4v6wbigsd; return(OK); case BSIM4v6_MOD_WCIGSD: value->rValue = model->BSIM4v6wcigsd; return(OK); case BSIM4v6_MOD_WAIGS: value->rValue = model->BSIM4v6waigs; return(OK); case BSIM4v6_MOD_WBIGS: value->rValue = model->BSIM4v6wbigs; return(OK); case BSIM4v6_MOD_WCIGS: value->rValue = model->BSIM4v6wcigs; return(OK); case BSIM4v6_MOD_WAIGD: value->rValue = model->BSIM4v6waigd; return(OK); case BSIM4v6_MOD_WBIGD: value->rValue = model->BSIM4v6wbigd; return(OK); case BSIM4v6_MOD_WCIGD: value->rValue = model->BSIM4v6wcigd; return(OK); case BSIM4v6_MOD_WAIGBACC: value->rValue = model->BSIM4v6waigbacc; return(OK); case BSIM4v6_MOD_WBIGBACC: value->rValue = model->BSIM4v6wbigbacc; return(OK); case BSIM4v6_MOD_WCIGBACC: value->rValue = model->BSIM4v6wcigbacc; return(OK); case BSIM4v6_MOD_WAIGBINV: value->rValue = model->BSIM4v6waigbinv; return(OK); case BSIM4v6_MOD_WBIGBINV: value->rValue = model->BSIM4v6wbigbinv; return(OK); case BSIM4v6_MOD_WCIGBINV: value->rValue = model->BSIM4v6wcigbinv; return(OK); case BSIM4v6_MOD_WNIGC: value->rValue = model->BSIM4v6wnigc; return(OK); case BSIM4v6_MOD_WNIGBACC: value->rValue = model->BSIM4v6wnigbacc; return(OK); case BSIM4v6_MOD_WNIGBINV: value->rValue = model->BSIM4v6wnigbinv; return(OK); case BSIM4v6_MOD_WNTOX: value->rValue = model->BSIM4v6wntox; return(OK); case BSIM4v6_MOD_WEIGBINV: value->rValue = model->BSIM4v6weigbinv; return(OK); case BSIM4v6_MOD_WPIGCD: value->rValue = model->BSIM4v6wpigcd; return(OK); case BSIM4v6_MOD_WPOXEDGE: value->rValue = model->BSIM4v6wpoxedge; return(OK); case BSIM4v6_MOD_WPHIN: value->rValue = model->BSIM4v6wphin; return(OK); case BSIM4v6_MOD_WXRCRG1: value->rValue = model->BSIM4v6wxrcrg1; return(OK); case BSIM4v6_MOD_WXRCRG2: value->rValue = model->BSIM4v6wxrcrg2; return(OK); case BSIM4v6_MOD_WEU: value->rValue = model->BSIM4v6weu; return(OK); case BSIM4v6_MOD_WUCS: value->rValue = model->BSIM4v6wucs; return(OK); case BSIM4v6_MOD_WVFB: value->rValue = model->BSIM4v6wvfb; return(OK); case BSIM4v6_MOD_WCGSL: value->rValue = model->BSIM4v6wcgsl; return(OK); case BSIM4v6_MOD_WCGDL: value->rValue = model->BSIM4v6wcgdl; return(OK); case BSIM4v6_MOD_WCKAPPAS: value->rValue = model->BSIM4v6wckappas; return(OK); case BSIM4v6_MOD_WCKAPPAD: value->rValue = model->BSIM4v6wckappad; return(OK); case BSIM4v6_MOD_WCF: value->rValue = model->BSIM4v6wcf; return(OK); case BSIM4v6_MOD_WCLC: value->rValue = model->BSIM4v6wclc; return(OK); case BSIM4v6_MOD_WCLE: value->rValue = model->BSIM4v6wcle; return(OK); case BSIM4v6_MOD_WVFBCV: value->rValue = model->BSIM4v6wvfbcv; return(OK); case BSIM4v6_MOD_WACDE: value->rValue = model->BSIM4v6wacde; return(OK); case BSIM4v6_MOD_WMOIN: value->rValue = model->BSIM4v6wmoin; return(OK); case BSIM4v6_MOD_WNOFF: value->rValue = model->BSIM4v6wnoff; return(OK); case BSIM4v6_MOD_WVOFFCV: value->rValue = model->BSIM4v6wvoffcv; return(OK); case BSIM4v6_MOD_WVFBSDOFF: value->rValue = model->BSIM4v6wvfbsdoff; return(OK); case BSIM4v6_MOD_WTVFBSDOFF: value->rValue = model->BSIM4v6wtvfbsdoff; return(OK); /* Cross-term dependence */ case BSIM4v6_MOD_PCDSC : value->rValue = model->BSIM4v6pcdsc; return(OK); case BSIM4v6_MOD_PCDSCB : value->rValue = model->BSIM4v6pcdscb; return(OK); case BSIM4v6_MOD_PCDSCD : value->rValue = model->BSIM4v6pcdscd; return(OK); case BSIM4v6_MOD_PCIT : value->rValue = model->BSIM4v6pcit; return(OK); case BSIM4v6_MOD_PNFACTOR : value->rValue = model->BSIM4v6pnfactor; return(OK); case BSIM4v6_MOD_PXJ: value->rValue = model->BSIM4v6pxj; return(OK); case BSIM4v6_MOD_PVSAT: value->rValue = model->BSIM4v6pvsat; return(OK); case BSIM4v6_MOD_PAT: value->rValue = model->BSIM4v6pat; return(OK); case BSIM4v6_MOD_PA0: value->rValue = model->BSIM4v6pa0; return(OK); case BSIM4v6_MOD_PAGS: value->rValue = model->BSIM4v6pags; return(OK); case BSIM4v6_MOD_PA1: value->rValue = model->BSIM4v6pa1; return(OK); case BSIM4v6_MOD_PA2: value->rValue = model->BSIM4v6pa2; return(OK); case BSIM4v6_MOD_PKETA: value->rValue = model->BSIM4v6pketa; return(OK); case BSIM4v6_MOD_PNSUB: value->rValue = model->BSIM4v6pnsub; return(OK); case BSIM4v6_MOD_PNDEP: value->rValue = model->BSIM4v6pndep; return(OK); case BSIM4v6_MOD_PNSD: value->rValue = model->BSIM4v6pnsd; return(OK); case BSIM4v6_MOD_PNGATE: value->rValue = model->BSIM4v6pngate; return(OK); case BSIM4v6_MOD_PGAMMA1: value->rValue = model->BSIM4v6pgamma1; return(OK); case BSIM4v6_MOD_PGAMMA2: value->rValue = model->BSIM4v6pgamma2; return(OK); case BSIM4v6_MOD_PVBX: value->rValue = model->BSIM4v6pvbx; return(OK); case BSIM4v6_MOD_PVBM: value->rValue = model->BSIM4v6pvbm; return(OK); case BSIM4v6_MOD_PXT: value->rValue = model->BSIM4v6pxt; return(OK); case BSIM4v6_MOD_PK1: value->rValue = model->BSIM4v6pk1; return(OK); case BSIM4v6_MOD_PKT1: value->rValue = model->BSIM4v6pkt1; return(OK); case BSIM4v6_MOD_PKT1L: value->rValue = model->BSIM4v6pkt1l; return(OK); case BSIM4v6_MOD_PKT2 : value->rValue = model->BSIM4v6pkt2; return(OK); case BSIM4v6_MOD_PK2 : value->rValue = model->BSIM4v6pk2; return(OK); case BSIM4v6_MOD_PK3: value->rValue = model->BSIM4v6pk3; return(OK); case BSIM4v6_MOD_PK3B: value->rValue = model->BSIM4v6pk3b; return(OK); case BSIM4v6_MOD_PW0: value->rValue = model->BSIM4v6pw0; return(OK); case BSIM4v6_MOD_PLPE0: value->rValue = model->BSIM4v6plpe0; return(OK); case BSIM4v6_MOD_PLPEB: value->rValue = model->BSIM4v6plpeb; return(OK); case BSIM4v6_MOD_PDVTP0: value->rValue = model->BSIM4v6pdvtp0; return(OK); case BSIM4v6_MOD_PDVTP1: value->rValue = model->BSIM4v6pdvtp1; return(OK); case BSIM4v6_MOD_PDVT0 : value->rValue = model->BSIM4v6pdvt0; return(OK); case BSIM4v6_MOD_PDVT1 : value->rValue = model->BSIM4v6pdvt1; return(OK); case BSIM4v6_MOD_PDVT2 : value->rValue = model->BSIM4v6pdvt2; return(OK); case BSIM4v6_MOD_PDVT0W : value->rValue = model->BSIM4v6pdvt0w; return(OK); case BSIM4v6_MOD_PDVT1W : value->rValue = model->BSIM4v6pdvt1w; return(OK); case BSIM4v6_MOD_PDVT2W : value->rValue = model->BSIM4v6pdvt2w; return(OK); case BSIM4v6_MOD_PDROUT : value->rValue = model->BSIM4v6pdrout; return(OK); case BSIM4v6_MOD_PDSUB : value->rValue = model->BSIM4v6pdsub; return(OK); case BSIM4v6_MOD_PVTH0: value->rValue = model->BSIM4v6pvth0; return(OK); case BSIM4v6_MOD_PUA: value->rValue = model->BSIM4v6pua; return(OK); case BSIM4v6_MOD_PUA1: value->rValue = model->BSIM4v6pua1; return(OK); case BSIM4v6_MOD_PUB: value->rValue = model->BSIM4v6pub; return(OK); case BSIM4v6_MOD_PUB1: value->rValue = model->BSIM4v6pub1; return(OK); case BSIM4v6_MOD_PUC: value->rValue = model->BSIM4v6puc; return(OK); case BSIM4v6_MOD_PUC1: value->rValue = model->BSIM4v6puc1; return(OK); case BSIM4v6_MOD_PUD: value->rValue = model->BSIM4v6pud; return(OK); case BSIM4v6_MOD_PUD1: value->rValue = model->BSIM4v6pud1; return(OK); case BSIM4v6_MOD_PUP: value->rValue = model->BSIM4v6pup; return(OK); case BSIM4v6_MOD_PLP: value->rValue = model->BSIM4v6plp; return(OK); case BSIM4v6_MOD_PU0: value->rValue = model->BSIM4v6pu0; return(OK); case BSIM4v6_MOD_PUTE: value->rValue = model->BSIM4v6pute; return(OK); case BSIM4v6_MOD_PUCSTE: value->rValue = model->BSIM4v6pucste; return(OK); case BSIM4v6_MOD_PVOFF: value->rValue = model->BSIM4v6pvoff; return(OK); case BSIM4v6_MOD_PTVOFF: value->rValue = model->BSIM4v6ptvoff; return(OK); case BSIM4v6_MOD_PMINV: value->rValue = model->BSIM4v6pminv; return(OK); case BSIM4v6_MOD_PMINVCV: value->rValue = model->BSIM4v6pminvcv; return(OK); case BSIM4v6_MOD_PFPROUT: value->rValue = model->BSIM4v6pfprout; return(OK); case BSIM4v6_MOD_PPDITS: value->rValue = model->BSIM4v6ppdits; return(OK); case BSIM4v6_MOD_PPDITSD: value->rValue = model->BSIM4v6ppditsd; return(OK); case BSIM4v6_MOD_PDELTA: value->rValue = model->BSIM4v6pdelta; return(OK); case BSIM4v6_MOD_PRDSW: value->rValue = model->BSIM4v6prdsw; return(OK); case BSIM4v6_MOD_PRDW: value->rValue = model->BSIM4v6prdw; return(OK); case BSIM4v6_MOD_PRSW: value->rValue = model->BSIM4v6prsw; return(OK); case BSIM4v6_MOD_PPRWB: value->rValue = model->BSIM4v6pprwb; return(OK); case BSIM4v6_MOD_PPRWG: value->rValue = model->BSIM4v6pprwg; return(OK); case BSIM4v6_MOD_PPRT: value->rValue = model->BSIM4v6pprt; return(OK); case BSIM4v6_MOD_PETA0: value->rValue = model->BSIM4v6peta0; return(OK); case BSIM4v6_MOD_PETAB: value->rValue = model->BSIM4v6petab; return(OK); case BSIM4v6_MOD_PPCLM: value->rValue = model->BSIM4v6ppclm; return(OK); case BSIM4v6_MOD_PPDIBL1: value->rValue = model->BSIM4v6ppdibl1; return(OK); case BSIM4v6_MOD_PPDIBL2: value->rValue = model->BSIM4v6ppdibl2; return(OK); case BSIM4v6_MOD_PPDIBLB: value->rValue = model->BSIM4v6ppdiblb; return(OK); case BSIM4v6_MOD_PPSCBE1: value->rValue = model->BSIM4v6ppscbe1; return(OK); case BSIM4v6_MOD_PPSCBE2: value->rValue = model->BSIM4v6ppscbe2; return(OK); case BSIM4v6_MOD_PPVAG: value->rValue = model->BSIM4v6ppvag; return(OK); case BSIM4v6_MOD_PWR: value->rValue = model->BSIM4v6pwr; return(OK); case BSIM4v6_MOD_PDWG: value->rValue = model->BSIM4v6pdwg; return(OK); case BSIM4v6_MOD_PDWB: value->rValue = model->BSIM4v6pdwb; return(OK); case BSIM4v6_MOD_PB0: value->rValue = model->BSIM4v6pb0; return(OK); case BSIM4v6_MOD_PB1: value->rValue = model->BSIM4v6pb1; return(OK); case BSIM4v6_MOD_PALPHA0: value->rValue = model->BSIM4v6palpha0; return(OK); case BSIM4v6_MOD_PALPHA1: value->rValue = model->BSIM4v6palpha1; return(OK); case BSIM4v6_MOD_PBETA0: value->rValue = model->BSIM4v6pbeta0; return(OK); case BSIM4v6_MOD_PAGIDL: value->rValue = model->BSIM4v6pagidl; return(OK); case BSIM4v6_MOD_PBGIDL: value->rValue = model->BSIM4v6pbgidl; return(OK); case BSIM4v6_MOD_PCGIDL: value->rValue = model->BSIM4v6pcgidl; return(OK); case BSIM4v6_MOD_PEGIDL: value->rValue = model->BSIM4v6pegidl; return(OK); case BSIM4v6_MOD_PAGISL: value->rValue = model->BSIM4v6pagisl; return(OK); case BSIM4v6_MOD_PBGISL: value->rValue = model->BSIM4v6pbgisl; return(OK); case BSIM4v6_MOD_PCGISL: value->rValue = model->BSIM4v6pcgisl; return(OK); case BSIM4v6_MOD_PEGISL: value->rValue = model->BSIM4v6pegisl; return(OK); case BSIM4v6_MOD_PAIGC: value->rValue = model->BSIM4v6paigc; return(OK); case BSIM4v6_MOD_PBIGC: value->rValue = model->BSIM4v6pbigc; return(OK); case BSIM4v6_MOD_PCIGC: value->rValue = model->BSIM4v6pcigc; return(OK); case BSIM4v6_MOD_PAIGSD: value->rValue = model->BSIM4v6paigsd; return(OK); case BSIM4v6_MOD_PBIGSD: value->rValue = model->BSIM4v6pbigsd; return(OK); case BSIM4v6_MOD_PCIGSD: value->rValue = model->BSIM4v6pcigsd; return(OK); case BSIM4v6_MOD_PAIGS: value->rValue = model->BSIM4v6paigs; return(OK); case BSIM4v6_MOD_PBIGS: value->rValue = model->BSIM4v6pbigs; return(OK); case BSIM4v6_MOD_PCIGS: value->rValue = model->BSIM4v6pcigs; return(OK); case BSIM4v6_MOD_PAIGD: value->rValue = model->BSIM4v6paigd; return(OK); case BSIM4v6_MOD_PBIGD: value->rValue = model->BSIM4v6pbigd; return(OK); case BSIM4v6_MOD_PCIGD: value->rValue = model->BSIM4v6pcigd; return(OK); case BSIM4v6_MOD_PAIGBACC: value->rValue = model->BSIM4v6paigbacc; return(OK); case BSIM4v6_MOD_PBIGBACC: value->rValue = model->BSIM4v6pbigbacc; return(OK); case BSIM4v6_MOD_PCIGBACC: value->rValue = model->BSIM4v6pcigbacc; return(OK); case BSIM4v6_MOD_PAIGBINV: value->rValue = model->BSIM4v6paigbinv; return(OK); case BSIM4v6_MOD_PBIGBINV: value->rValue = model->BSIM4v6pbigbinv; return(OK); case BSIM4v6_MOD_PCIGBINV: value->rValue = model->BSIM4v6pcigbinv; return(OK); case BSIM4v6_MOD_PNIGC: value->rValue = model->BSIM4v6pnigc; return(OK); case BSIM4v6_MOD_PNIGBACC: value->rValue = model->BSIM4v6pnigbacc; return(OK); case BSIM4v6_MOD_PNIGBINV: value->rValue = model->BSIM4v6pnigbinv; return(OK); case BSIM4v6_MOD_PNTOX: value->rValue = model->BSIM4v6pntox; return(OK); case BSIM4v6_MOD_PEIGBINV: value->rValue = model->BSIM4v6peigbinv; return(OK); case BSIM4v6_MOD_PPIGCD: value->rValue = model->BSIM4v6ppigcd; return(OK); case BSIM4v6_MOD_PPOXEDGE: value->rValue = model->BSIM4v6ppoxedge; return(OK); case BSIM4v6_MOD_PPHIN: value->rValue = model->BSIM4v6pphin; return(OK); case BSIM4v6_MOD_PXRCRG1: value->rValue = model->BSIM4v6pxrcrg1; return(OK); case BSIM4v6_MOD_PXRCRG2: value->rValue = model->BSIM4v6pxrcrg2; return(OK); case BSIM4v6_MOD_PEU: value->rValue = model->BSIM4v6peu; return(OK); case BSIM4v6_MOD_PUCS: value->rValue = model->BSIM4v6pucs; return(OK); case BSIM4v6_MOD_PVFB: value->rValue = model->BSIM4v6pvfb; return(OK); case BSIM4v6_MOD_PCGSL: value->rValue = model->BSIM4v6pcgsl; return(OK); case BSIM4v6_MOD_PCGDL: value->rValue = model->BSIM4v6pcgdl; return(OK); case BSIM4v6_MOD_PCKAPPAS: value->rValue = model->BSIM4v6pckappas; return(OK); case BSIM4v6_MOD_PCKAPPAD: value->rValue = model->BSIM4v6pckappad; return(OK); case BSIM4v6_MOD_PCF: value->rValue = model->BSIM4v6pcf; return(OK); case BSIM4v6_MOD_PCLC: value->rValue = model->BSIM4v6pclc; return(OK); case BSIM4v6_MOD_PCLE: value->rValue = model->BSIM4v6pcle; return(OK); case BSIM4v6_MOD_PVFBCV: value->rValue = model->BSIM4v6pvfbcv; return(OK); case BSIM4v6_MOD_PACDE: value->rValue = model->BSIM4v6pacde; return(OK); case BSIM4v6_MOD_PMOIN: value->rValue = model->BSIM4v6pmoin; return(OK); case BSIM4v6_MOD_PNOFF: value->rValue = model->BSIM4v6pnoff; return(OK); case BSIM4v6_MOD_PVOFFCV: value->rValue = model->BSIM4v6pvoffcv; return(OK); case BSIM4v6_MOD_PVFBSDOFF: value->rValue = model->BSIM4v6pvfbsdoff; return(OK); case BSIM4v6_MOD_PTVFBSDOFF: value->rValue = model->BSIM4v6ptvfbsdoff; return(OK); case BSIM4v6_MOD_TNOM : value->rValue = model->BSIM4v6tnom; return(OK); case BSIM4v6_MOD_CGSO: value->rValue = model->BSIM4v6cgso; return(OK); case BSIM4v6_MOD_CGDO: value->rValue = model->BSIM4v6cgdo; return(OK); case BSIM4v6_MOD_CGBO: value->rValue = model->BSIM4v6cgbo; return(OK); case BSIM4v6_MOD_XPART: value->rValue = model->BSIM4v6xpart; return(OK); case BSIM4v6_MOD_RSH: value->rValue = model->BSIM4v6sheetResistance; return(OK); case BSIM4v6_MOD_JSS: value->rValue = model->BSIM4v6SjctSatCurDensity; return(OK); case BSIM4v6_MOD_JSWS: value->rValue = model->BSIM4v6SjctSidewallSatCurDensity; return(OK); case BSIM4v6_MOD_JSWGS: value->rValue = model->BSIM4v6SjctGateSidewallSatCurDensity; return(OK); case BSIM4v6_MOD_PBS: value->rValue = model->BSIM4v6SbulkJctPotential; return(OK); case BSIM4v6_MOD_MJS: value->rValue = model->BSIM4v6SbulkJctBotGradingCoeff; return(OK); case BSIM4v6_MOD_PBSWS: value->rValue = model->BSIM4v6SsidewallJctPotential; return(OK); case BSIM4v6_MOD_MJSWS: value->rValue = model->BSIM4v6SbulkJctSideGradingCoeff; return(OK); case BSIM4v6_MOD_CJS: value->rValue = model->BSIM4v6SunitAreaJctCap; return(OK); case BSIM4v6_MOD_CJSWS: value->rValue = model->BSIM4v6SunitLengthSidewallJctCap; return(OK); case BSIM4v6_MOD_PBSWGS: value->rValue = model->BSIM4v6SGatesidewallJctPotential; return(OK); case BSIM4v6_MOD_MJSWGS: value->rValue = model->BSIM4v6SbulkJctGateSideGradingCoeff; return(OK); case BSIM4v6_MOD_CJSWGS: value->rValue = model->BSIM4v6SunitLengthGateSidewallJctCap; return(OK); case BSIM4v6_MOD_NJS: value->rValue = model->BSIM4v6SjctEmissionCoeff; return(OK); case BSIM4v6_MOD_XTIS: value->rValue = model->BSIM4v6SjctTempExponent; return(OK); case BSIM4v6_MOD_JSD: value->rValue = model->BSIM4v6DjctSatCurDensity; return(OK); case BSIM4v6_MOD_JSWD: value->rValue = model->BSIM4v6DjctSidewallSatCurDensity; return(OK); case BSIM4v6_MOD_JSWGD: value->rValue = model->BSIM4v6DjctGateSidewallSatCurDensity; return(OK); case BSIM4v6_MOD_PBD: value->rValue = model->BSIM4v6DbulkJctPotential; return(OK); case BSIM4v6_MOD_MJD: value->rValue = model->BSIM4v6DbulkJctBotGradingCoeff; return(OK); case BSIM4v6_MOD_PBSWD: value->rValue = model->BSIM4v6DsidewallJctPotential; return(OK); case BSIM4v6_MOD_MJSWD: value->rValue = model->BSIM4v6DbulkJctSideGradingCoeff; return(OK); case BSIM4v6_MOD_CJD: value->rValue = model->BSIM4v6DunitAreaJctCap; return(OK); case BSIM4v6_MOD_CJSWD: value->rValue = model->BSIM4v6DunitLengthSidewallJctCap; return(OK); case BSIM4v6_MOD_PBSWGD: value->rValue = model->BSIM4v6DGatesidewallJctPotential; return(OK); case BSIM4v6_MOD_MJSWGD: value->rValue = model->BSIM4v6DbulkJctGateSideGradingCoeff; return(OK); case BSIM4v6_MOD_CJSWGD: value->rValue = model->BSIM4v6DunitLengthGateSidewallJctCap; return(OK); case BSIM4v6_MOD_NJD: value->rValue = model->BSIM4v6DjctEmissionCoeff; return(OK); case BSIM4v6_MOD_XTID: value->rValue = model->BSIM4v6DjctTempExponent; return(OK); case BSIM4v6_MOD_LINT: value->rValue = model->BSIM4v6Lint; return(OK); case BSIM4v6_MOD_LL: value->rValue = model->BSIM4v6Ll; return(OK); case BSIM4v6_MOD_LLC: value->rValue = model->BSIM4v6Llc; return(OK); case BSIM4v6_MOD_LLN: value->rValue = model->BSIM4v6Lln; return(OK); case BSIM4v6_MOD_LW: value->rValue = model->BSIM4v6Lw; return(OK); case BSIM4v6_MOD_LWC: value->rValue = model->BSIM4v6Lwc; return(OK); case BSIM4v6_MOD_LWN: value->rValue = model->BSIM4v6Lwn; return(OK); case BSIM4v6_MOD_LWL: value->rValue = model->BSIM4v6Lwl; return(OK); case BSIM4v6_MOD_LWLC: value->rValue = model->BSIM4v6Lwlc; return(OK); case BSIM4v6_MOD_LMIN: value->rValue = model->BSIM4v6Lmin; return(OK); case BSIM4v6_MOD_LMAX: value->rValue = model->BSIM4v6Lmax; return(OK); case BSIM4v6_MOD_WINT: value->rValue = model->BSIM4v6Wint; return(OK); case BSIM4v6_MOD_WL: value->rValue = model->BSIM4v6Wl; return(OK); case BSIM4v6_MOD_WLC: value->rValue = model->BSIM4v6Wlc; return(OK); case BSIM4v6_MOD_WLN: value->rValue = model->BSIM4v6Wln; return(OK); case BSIM4v6_MOD_WW: value->rValue = model->BSIM4v6Ww; return(OK); case BSIM4v6_MOD_WWC: value->rValue = model->BSIM4v6Wwc; return(OK); case BSIM4v6_MOD_WWN: value->rValue = model->BSIM4v6Wwn; return(OK); case BSIM4v6_MOD_WWL: value->rValue = model->BSIM4v6Wwl; return(OK); case BSIM4v6_MOD_WWLC: value->rValue = model->BSIM4v6Wwlc; return(OK); case BSIM4v6_MOD_WMIN: value->rValue = model->BSIM4v6Wmin; return(OK); case BSIM4v6_MOD_WMAX: value->rValue = model->BSIM4v6Wmax; return(OK); /* stress effect */ case BSIM4v6_MOD_SAREF: value->rValue = model->BSIM4v6saref; return(OK); case BSIM4v6_MOD_SBREF: value->rValue = model->BSIM4v6sbref; return(OK); case BSIM4v6_MOD_WLOD: value->rValue = model->BSIM4v6wlod; return(OK); case BSIM4v6_MOD_KU0: value->rValue = model->BSIM4v6ku0; return(OK); case BSIM4v6_MOD_KVSAT: value->rValue = model->BSIM4v6kvsat; return(OK); case BSIM4v6_MOD_KVTH0: value->rValue = model->BSIM4v6kvth0; return(OK); case BSIM4v6_MOD_TKU0: value->rValue = model->BSIM4v6tku0; return(OK); case BSIM4v6_MOD_LLODKU0: value->rValue = model->BSIM4v6llodku0; return(OK); case BSIM4v6_MOD_WLODKU0: value->rValue = model->BSIM4v6wlodku0; return(OK); case BSIM4v6_MOD_LLODVTH: value->rValue = model->BSIM4v6llodvth; return(OK); case BSIM4v6_MOD_WLODVTH: value->rValue = model->BSIM4v6wlodvth; return(OK); case BSIM4v6_MOD_LKU0: value->rValue = model->BSIM4v6lku0; return(OK); case BSIM4v6_MOD_WKU0: value->rValue = model->BSIM4v6wku0; return(OK); case BSIM4v6_MOD_PKU0: value->rValue = model->BSIM4v6pku0; return(OK); case BSIM4v6_MOD_LKVTH0: value->rValue = model->BSIM4v6lkvth0; return(OK); case BSIM4v6_MOD_WKVTH0: value->rValue = model->BSIM4v6wkvth0; return(OK); case BSIM4v6_MOD_PKVTH0: value->rValue = model->BSIM4v6pkvth0; return(OK); case BSIM4v6_MOD_STK2: value->rValue = model->BSIM4v6stk2; return(OK); case BSIM4v6_MOD_LODK2: value->rValue = model->BSIM4v6lodk2; return(OK); case BSIM4v6_MOD_STETA0: value->rValue = model->BSIM4v6steta0; return(OK); case BSIM4v6_MOD_LODETA0: value->rValue = model->BSIM4v6lodeta0; return(OK); /* Well Proximity Effect */ case BSIM4v6_MOD_WEB: value->rValue = model->BSIM4v6web; return(OK); case BSIM4v6_MOD_WEC: value->rValue = model->BSIM4v6wec; return(OK); case BSIM4v6_MOD_KVTH0WE: value->rValue = model->BSIM4v6kvth0we; return(OK); case BSIM4v6_MOD_K2WE: value->rValue = model->BSIM4v6k2we; return(OK); case BSIM4v6_MOD_KU0WE: value->rValue = model->BSIM4v6ku0we; return(OK); case BSIM4v6_MOD_SCREF: value->rValue = model->BSIM4v6scref; return(OK); case BSIM4v6_MOD_WPEMOD: value->rValue = model->BSIM4v6wpemod; return(OK); case BSIM4v6_MOD_LKVTH0WE: value->rValue = model->BSIM4v6lkvth0we; return(OK); case BSIM4v6_MOD_LK2WE: value->rValue = model->BSIM4v6lk2we; return(OK); case BSIM4v6_MOD_LKU0WE: value->rValue = model->BSIM4v6lku0we; return(OK); case BSIM4v6_MOD_WKVTH0WE: value->rValue = model->BSIM4v6wkvth0we; return(OK); case BSIM4v6_MOD_WK2WE: value->rValue = model->BSIM4v6wk2we; return(OK); case BSIM4v6_MOD_WKU0WE: value->rValue = model->BSIM4v6wku0we; return(OK); case BSIM4v6_MOD_PKVTH0WE: value->rValue = model->BSIM4v6pkvth0we; return(OK); case BSIM4v6_MOD_PK2WE: value->rValue = model->BSIM4v6pk2we; return(OK); case BSIM4v6_MOD_PKU0WE: value->rValue = model->BSIM4v6pku0we; return(OK); case BSIM4v6_MOD_NOIA: value->rValue = model->BSIM4v6oxideTrapDensityA; return(OK); case BSIM4v6_MOD_NOIB: value->rValue = model->BSIM4v6oxideTrapDensityB; return(OK); case BSIM4v6_MOD_NOIC: value->rValue = model->BSIM4v6oxideTrapDensityC; return(OK); case BSIM4v6_MOD_EM: value->rValue = model->BSIM4v6em; return(OK); case BSIM4v6_MOD_EF: value->rValue = model->BSIM4v6ef; return(OK); case BSIM4v6_MOD_AF: value->rValue = model->BSIM4v6af; return(OK); case BSIM4v6_MOD_KF: value->rValue = model->BSIM4v6kf; return(OK); case BSIM4v6_MOD_VGS_MAX: value->rValue = model->BSIM4v6vgsMax; return(OK); case BSIM4v6_MOD_VGD_MAX: value->rValue = model->BSIM4v6vgdMax; return(OK); case BSIM4v6_MOD_VGB_MAX: value->rValue = model->BSIM4v6vgbMax; return(OK); case BSIM4v6_MOD_VDS_MAX: value->rValue = model->BSIM4v6vdsMax; return(OK); case BSIM4v6_MOD_VBS_MAX: value->rValue = model->BSIM4v6vbsMax; return(OK); case BSIM4v6_MOD_VBD_MAX: value->rValue = model->BSIM4v6vbdMax; return(OK); case BSIM4v6_MOD_VGSR_MAX: value->rValue = model->BSIM4v6vgsrMax; return(OK); case BSIM4v6_MOD_VGDR_MAX: value->rValue = model->BSIM4v6vgdrMax; return(OK); case BSIM4v6_MOD_VGBR_MAX: value->rValue = model->BSIM4v6vgbrMax; return(OK); case BSIM4v6_MOD_VBSR_MAX: value->rValue = model->BSIM4v6vbsrMax; return(OK); case BSIM4v6_MOD_VBDR_MAX: value->rValue = model->BSIM4v6vbdrMax; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/bsim4v6/b4v6ask.c0000644000175000017500000003275013546075722022110 0ustar carstencarsten/**** BSIM4.6.2 Released by Wenwei Yang 07/31/2008 ****/ /********** * Copyright 2006 Regents of the University of California. All rights reserved. * File: b4ask.c of BSIM4.6.2. * Author: 2000 Weidong Liu * Authors: 2001- Xuemei Xi, Mohan Dunga, Ali Niknejad, Chenming Hu. * Authors: 2006- Mohan Dunga, Ali Niknejad, Chenming Hu * Authors: 2007- Mohan Dunga, Wenwei Yang, Ali Niknejad, Chenming Hu * Project Director: Prof. Chenming Hu. * Modified by Xuemei Xi, 04/06/2001. * Modified by Xuemei Xi, 10/05/2001. * Modified by Xuemei Xi, 05/09/2003. * Modified by Xuemei Xi, Mohan Dunga, 07/29/2005. **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "bsim4v6def.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int BSIM4v6ask( CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { BSIM4v6instance *here = (BSIM4v6instance*)inst; NG_IGNORE(select); switch(which) { case BSIM4v6_L: value->rValue = here->BSIM4v6l; return(OK); case BSIM4v6_W: value->rValue = here->BSIM4v6w; return(OK); case BSIM4v6_M: value->rValue = here->BSIM4v6m; return(OK); case BSIM4v6_NF: value->rValue = here->BSIM4v6nf; return(OK); case BSIM4v6_MIN: value->iValue = here->BSIM4v6min; return(OK); case BSIM4v6_AS: value->rValue = here->BSIM4v6sourceArea; return(OK); case BSIM4v6_AD: value->rValue = here->BSIM4v6drainArea; return(OK); case BSIM4v6_PS: value->rValue = here->BSIM4v6sourcePerimeter; return(OK); case BSIM4v6_PD: value->rValue = here->BSIM4v6drainPerimeter; return(OK); case BSIM4v6_NRS: value->rValue = here->BSIM4v6sourceSquares; return(OK); case BSIM4v6_NRD: value->rValue = here->BSIM4v6drainSquares; return(OK); case BSIM4v6_OFF: value->rValue = here->BSIM4v6off; return(OK); case BSIM4v6_SA: value->rValue = here->BSIM4v6sa ; return(OK); case BSIM4v6_SB: value->rValue = here->BSIM4v6sb ; return(OK); case BSIM4v6_SD: value->rValue = here->BSIM4v6sd ; return(OK); case BSIM4v6_SCA: value->rValue = here->BSIM4v6sca ; return(OK); case BSIM4v6_SCB: value->rValue = here->BSIM4v6scb ; return(OK); case BSIM4v6_SCC: value->rValue = here->BSIM4v6scc ; return(OK); case BSIM4v6_SC: value->rValue = here->BSIM4v6sc ; return(OK); case BSIM4v6_RBSB: value->rValue = here->BSIM4v6rbsb; return(OK); case BSIM4v6_RBDB: value->rValue = here->BSIM4v6rbdb; return(OK); case BSIM4v6_RBPB: value->rValue = here->BSIM4v6rbpb; return(OK); case BSIM4v6_RBPS: value->rValue = here->BSIM4v6rbps; return(OK); case BSIM4v6_RBPD: value->rValue = here->BSIM4v6rbpd; return(OK); case BSIM4v6_DELVTO: value->rValue = here->BSIM4v6delvto; return(OK); case BSIM4v6_XGW: value->rValue = here->BSIM4v6xgw; return(OK); case BSIM4v6_NGCON: value->rValue = here->BSIM4v6ngcon; return(OK); case BSIM4v6_TRNQSMOD: value->iValue = here->BSIM4v6trnqsMod; return(OK); case BSIM4v6_ACNQSMOD: value->iValue = here->BSIM4v6acnqsMod; return(OK); case BSIM4v6_RBODYMOD: value->iValue = here->BSIM4v6rbodyMod; return(OK); case BSIM4v6_RGATEMOD: value->iValue = here->BSIM4v6rgateMod; return(OK); case BSIM4v6_GEOMOD: value->iValue = here->BSIM4v6geoMod; return(OK); case BSIM4v6_RGEOMOD: value->iValue = here->BSIM4v6rgeoMod; return(OK); case BSIM4v6_IC_VDS: value->rValue = here->BSIM4v6icVDS; return(OK); case BSIM4v6_IC_VGS: value->rValue = here->BSIM4v6icVGS; return(OK); case BSIM4v6_IC_VBS: value->rValue = here->BSIM4v6icVBS; return(OK); case BSIM4v6_DNODE: value->iValue = here->BSIM4v6dNode; return(OK); case BSIM4v6_GNODEEXT: value->iValue = here->BSIM4v6gNodeExt; return(OK); case BSIM4v6_SNODE: value->iValue = here->BSIM4v6sNode; return(OK); case BSIM4v6_BNODE: value->iValue = here->BSIM4v6bNode; return(OK); case BSIM4v6_DNODEPRIME: value->iValue = here->BSIM4v6dNodePrime; return(OK); case BSIM4v6_GNODEPRIME: value->iValue = here->BSIM4v6gNodePrime; return(OK); case BSIM4v6_GNODEMID: value->iValue = here->BSIM4v6gNodeMid; return(OK); case BSIM4v6_SNODEPRIME: value->iValue = here->BSIM4v6sNodePrime; return(OK); case BSIM4v6_DBNODE: value->iValue = here->BSIM4v6dbNode; return(OK); case BSIM4v6_BNODEPRIME: value->iValue = here->BSIM4v6bNodePrime; return(OK); case BSIM4v6_SBNODE: value->iValue = here->BSIM4v6sbNode; return(OK); case BSIM4v6_SOURCECONDUCT: value->rValue = here->BSIM4v6sourceConductance; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_DRAINCONDUCT: value->rValue = here->BSIM4v6drainConductance; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_VBD: value->rValue = *(ckt->CKTstate0 + here->BSIM4v6vbd); return(OK); case BSIM4v6_VBS: value->rValue = *(ckt->CKTstate0 + here->BSIM4v6vbs); return(OK); case BSIM4v6_VGS: value->rValue = *(ckt->CKTstate0 + here->BSIM4v6vgs); return(OK); case BSIM4v6_VDS: value->rValue = *(ckt->CKTstate0 + here->BSIM4v6vds); return(OK); case BSIM4v6_CD: value->rValue = here->BSIM4v6cd; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_CBS: value->rValue = here->BSIM4v6cbs; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_CBD: value->rValue = here->BSIM4v6cbd; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_CSUB: value->rValue = here->BSIM4v6csub; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_QINV: value->rValue = here-> BSIM4v6qinv; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_IGIDL: value->rValue = here->BSIM4v6Igidl; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_IGISL: value->rValue = here->BSIM4v6Igisl; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_IGS: value->rValue = here->BSIM4v6Igs; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_IGD: value->rValue = here->BSIM4v6Igd; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_IGB: value->rValue = here->BSIM4v6Igb; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_IGCS: value->rValue = here->BSIM4v6Igcs; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_IGCD: value->rValue = here->BSIM4v6Igcd; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_GM: value->rValue = here->BSIM4v6gm; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_GDS: value->rValue = here->BSIM4v6gds; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_GMBS: value->rValue = here->BSIM4v6gmbs; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_GBD: value->rValue = here->BSIM4v6gbd; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_GBS: value->rValue = here->BSIM4v6gbs; value->rValue *= here->BSIM4v6m; return(OK); /* case BSIM4v6_QB: value->rValue = *(ckt->CKTstate0 + here->BSIM4v6qb); return(OK); */ case BSIM4v6_CQB: value->rValue = *(ckt->CKTstate0 + here->BSIM4v6cqb); return(OK); /* case BSIM4v6_QG: value->rValue = *(ckt->CKTstate0 + here->BSIM4v6qg); return(OK); */ case BSIM4v6_CQG: value->rValue = *(ckt->CKTstate0 + here->BSIM4v6cqg); return(OK); /* case BSIM4v6_QD: value->rValue = *(ckt->CKTstate0 + here->BSIM4v6qd); return(OK); */ case BSIM4v6_CQD: value->rValue = *(ckt->CKTstate0 + here->BSIM4v6cqd); return(OK); /* case BSIM4v6_QS: value->rValue = *(ckt->CKTstate0 + here->BSIM4v6qs); return(OK); */ case BSIM4v6_QB: value->rValue = here->BSIM4v6qbulk; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_QG: value->rValue = here->BSIM4v6qgate; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_QS: value->rValue = here->BSIM4v6qsrc; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_QD: value->rValue = here->BSIM4v6qdrn; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_QDEF: value->rValue = *(ckt->CKTstate0 + here->BSIM4v6qdef); return(OK); case BSIM4v6_GCRG: value->rValue = here->BSIM4v6gcrg; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_GTAU: value->rValue = here->BSIM4v6gtau; return(OK); case BSIM4v6_CGGB: value->rValue = here->BSIM4v6cggb; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_CGDB: value->rValue = here->BSIM4v6cgdb; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_CGSB: value->rValue = here->BSIM4v6cgsb; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_CDGB: value->rValue = here->BSIM4v6cdgb; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_CDDB: value->rValue = here->BSIM4v6cddb; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_CDSB: value->rValue = here->BSIM4v6cdsb; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_CBGB: value->rValue = here->BSIM4v6cbgb; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_CBDB: value->rValue = here->BSIM4v6cbdb; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_CBSB: value->rValue = here->BSIM4v6cbsb; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_CSGB: value->rValue = here->BSIM4v6csgb; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_CSDB: value->rValue = here->BSIM4v6csdb; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_CSSB: value->rValue = here->BSIM4v6cssb; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_CGBB: value->rValue = here->BSIM4v6cgbb; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_CDBB: value->rValue = here->BSIM4v6cdbb; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_CSBB: value->rValue = here->BSIM4v6csbb; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_CBBB: value->rValue = here->BSIM4v6cbbb; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_CAPBD: value->rValue = here->BSIM4v6capbd; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_CAPBS: value->rValue = here->BSIM4v6capbs; value->rValue *= here->BSIM4v6m; return(OK); case BSIM4v6_VON: value->rValue = here->BSIM4v6von; return(OK); case BSIM4v6_VDSAT: value->rValue = here->BSIM4v6vdsat; return(OK); case BSIM4v6_QBS: value->rValue = *(ckt->CKTstate0 + here->BSIM4v6qbs); return(OK); case BSIM4v6_QBD: value->rValue = *(ckt->CKTstate0 + here->BSIM4v6qbd); return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/devsup.c0000644000175000017500000005522313546075722020644 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* support routines for device models */ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/suffix.h" #include /* * Limit the per-iteration change of VDS */ double DEVlimvds(double vnew, double vold) { if(vold >= 3.5) { if(vnew > vold) { vnew = MIN(vnew,(3 * vold) +2); } else { if (vnew < 3.5) { vnew = MAX(vnew,2); } } } else { if(vnew > vold) { vnew = MIN(vnew,4); } else { vnew = MAX(vnew,-.5); } } return(vnew); } /* * Limit the per-iteration change of PN junction voltages * * This code has been fixed by Alan Gillespie adding limiting * for negative voltages. */ double DEVpnjlim(double vnew, double vold, double vt, double vcrit, int *icheck) { double arg; if((vnew > vcrit) && (fabs(vnew - vold) > (vt + vt))) { if(vold > 0) { arg = (vnew - vold) / vt; if(arg > 0) { vnew = vold + vt * (2+log(arg-2)); } else { vnew = vold - vt * (2+log(2-arg)); } } else { vnew = vt *log(vnew/vt); } *icheck = 1; } else { if (vnew < 0) { if (vold > 0) { arg = -1*vold-1; } else { arg = 2*vold-1; } if (vnew < arg) { vnew = arg; *icheck = 1; } else { *icheck = 0; } } else { *icheck = 0; } } return(vnew); } /* * Limit the per-iteration change of FET voltages * * This code has been fixed by Alan Gillespie: a new * definition for vtstlo. */ double DEVfetlim(double vnew, double vold, double vto) { double vtsthi; double vtstlo; double vtox; double delv; double vtemp; vtsthi = fabs(2*(vold-vto))+2; vtstlo = fabs(vold-vto)+1; vtox = vto + 3.5; delv = vnew-vold; if (vold >= vto) { if(vold >= vtox) { if(delv <= 0) { /* going off */ if(vnew >= vtox) { if(-delv >vtstlo) { vnew = vold - vtstlo; } } else { vnew = MAX(vnew,vto+2); } } else { /* staying on */ if(delv >= vtsthi) { vnew = vold + vtsthi; } } } else { /* middle region */ if(delv <= 0) { /* decreasing */ vnew = MAX(vnew,vto-.5); } else { /* increasing */ vnew = MIN(vnew,vto+4); } } } else { /* off */ if(delv <= 0) { if(-delv >vtsthi) { vnew = vold - vtsthi; } } else { vtemp = vto + .5; if(vnew <= vtemp) { if(delv >vtstlo) { vnew = vold + vtstlo; } } else { vnew = vtemp; } } } return(vnew); } int ACM_SourceDrainResistances( int ACM, double LD, double LDIF, double HDIF, double WMLT, double w, double XW, double RSH, int drainSquaresGiven, double RD, double RDC, double drainSquares, int sourceSquaresGiven, double RS, double RSC, double sourceSquares, double *drainResistance, double *sourceResistance ) { switch (ACM) { case 1: case 11: *drainResistance = (LD + LDIF)/(w * WMLT + XW)*RD + RSH*drainSquares + RDC; *sourceResistance = (LD + LDIF)/(w * WMLT + XW)*RS + RSH*sourceSquares + RSC; break; case 2: case 12: case 3: case 13: if (drainSquaresGiven) *drainResistance = (LD + LDIF)/(w * WMLT + XW)*RD + RSH*drainSquares + RDC; else *drainResistance = ((LD + LDIF)*RD + (HDIF * WMLT)*RSH)/(w * WMLT + XW) + RDC; if (sourceSquaresGiven) *sourceResistance = (LD + LDIF)/(w * WMLT + XW)*RS + RSH*sourceSquares + RSC; else *sourceResistance = ((LD + LDIF)*RS + (HDIF * WMLT)*RSH)/(w * WMLT + XW) + RSC; break; default: break; } return 0; } /* Area Calculation Method (ACM) for MOS models */ int ACM_saturationCurrents( int ACM, int CALCACM, int GEO, double HDIF, double WMLT, double w, double XW, double jctTempSatCurDensity, double jctSidewallTempSatCurDensity, int drainAreaGiven, double drainArea, int drainPerimeterGiven, double drainPerimeter, int sourceAreaGiven, double sourceArea, int sourcePerimeterGiven, double sourcePerimeter, double *DrainSatCurrent, double *SourceSatCurrent ) { switch (ACM) { case 1: case 11: drainArea = (w * WMLT + XW) * WMLT; drainPerimeter = (w * WMLT + XW); *DrainSatCurrent = drainArea * jctTempSatCurDensity + drainPerimeter * jctSidewallTempSatCurDensity; if (*DrainSatCurrent <= 0.0) *DrainSatCurrent = 1.0e-14; sourceArea = (w * WMLT + XW) * WMLT; sourcePerimeter = (w * WMLT + XW); *SourceSatCurrent = sourceArea * jctTempSatCurDensity + sourcePerimeter * jctSidewallTempSatCurDensity; if (*SourceSatCurrent <= 0.0) *SourceSatCurrent = 1.0e-14; break; case 2: case 12: if ((ACM == 2) || ((ACM == 12) && (CALCACM == 1))) { if (!drainAreaGiven) drainArea = 2.0 * (HDIF * WMLT) * (w * WMLT + XW); else drainArea = drainArea * WMLT * WMLT; if (!drainPerimeterGiven) drainPerimeter = 4.0 * (HDIF * WMLT) + 2.0 * (w * WMLT + XW); else drainPerimeter = drainPerimeter * WMLT; } *DrainSatCurrent = drainArea * jctTempSatCurDensity + drainPerimeter * jctSidewallTempSatCurDensity; if (*DrainSatCurrent <= 0.0) *DrainSatCurrent = 1.0e-14; if ((ACM == 2) || ((ACM == 12) && (CALCACM == 1))) { if (!sourceAreaGiven) sourceArea = 2.0 * (HDIF * WMLT) * (w * WMLT + XW); else sourceArea = sourceArea * WMLT * WMLT; if (!sourcePerimeterGiven) sourcePerimeter = 4.0 * (HDIF * WMLT) + 2.0 * (w * WMLT + XW); else sourcePerimeter = sourcePerimeter * WMLT; } *SourceSatCurrent = sourceArea * jctTempSatCurDensity + sourcePerimeter * jctSidewallTempSatCurDensity; if (*SourceSatCurrent <= 0.0) *SourceSatCurrent = 1.0e-14; break; case 3: case 13: if (!drainAreaGiven) if ((GEO == 0) || (GEO == 2)) drainArea = 2.0 * (HDIF * WMLT) * (w * WMLT + XW); else drainArea = (HDIF * WMLT) * (w * WMLT + XW); else drainArea = drainArea * WMLT * WMLT; if (!drainPerimeterGiven) if ((GEO == 0) || (GEO == 2)) drainPerimeter = 4.0 * (HDIF * WMLT) + (w * WMLT + XW); else drainPerimeter = 2.0 * (HDIF * WMLT); else drainPerimeter = drainPerimeter * WMLT; *DrainSatCurrent = drainArea * jctTempSatCurDensity + drainPerimeter * jctSidewallTempSatCurDensity; if (*DrainSatCurrent <= 0.0) *DrainSatCurrent = 1.0e-14; if (!sourceAreaGiven) if ((GEO == 0) || (GEO == 1)) sourceArea = 2.0 * (HDIF * WMLT) * (w * WMLT + XW); else sourceArea = (HDIF * WMLT) * (w * WMLT + XW); else sourceArea = sourceArea * WMLT * WMLT; if (!sourcePerimeterGiven) if ((GEO == 0) || (GEO == 1)) sourcePerimeter = 4.0 * (HDIF * WMLT) + (w * WMLT + XW); else sourcePerimeter = 2.0 * (HDIF * WMLT); else sourcePerimeter = sourcePerimeter * WMLT; *SourceSatCurrent = sourceArea * jctTempSatCurDensity + sourcePerimeter * jctSidewallTempSatCurDensity; if (*SourceSatCurrent <= 0.0) *SourceSatCurrent = 1.0e-14; break; default: break; } return 0; } int ACM_junctionCapacitances( int ACM, int CALCACM, int GEO, double HDIF, double WMLT, double w, double XW, int drainAreaGiven, double drainArea, int drainPerimeterGiven, double drainPerimeter, int sourceAreaGiven, double sourceArea, int sourcePerimeterGiven, double sourcePerimeter, double CJ, double CJSW, double CJGATE, double *areaDrainBulkCapacitance, double *periDrainBulkCapacitance, double *gateDrainBulkCapacitance, double *areaSourceBulkCapacitance, double *periSourceBulkCapacitance, double *gateSourceBulkCapacitance ) { switch (ACM) { case 1: drainArea = (w * WMLT + XW) * WMLT; drainPerimeter = (w * WMLT + XW); *areaDrainBulkCapacitance = drainArea * CJ; *periDrainBulkCapacitance = drainPerimeter * CJSW; *gateDrainBulkCapacitance = 0.0; sourceArea = (w * WMLT + XW) * WMLT; sourcePerimeter = (w * WMLT + XW); *areaSourceBulkCapacitance = sourceArea * CJ; *periSourceBulkCapacitance = sourcePerimeter * CJSW; *gateSourceBulkCapacitance = 0.0; break; case 2: if (!drainAreaGiven) drainArea = 2.0 * (HDIF * WMLT) * (w * WMLT + XW); else drainArea = drainArea * WMLT * WMLT; if (!drainPerimeterGiven) drainPerimeter = 4.0 * (HDIF * WMLT) + 2.0 * (w * WMLT + XW); else drainPerimeter = drainPerimeter * WMLT; *areaDrainBulkCapacitance = drainArea * CJ; if (drainPerimeter > (w * WMLT + XW)) { *periDrainBulkCapacitance = (drainPerimeter - (w * WMLT + XW)) * CJSW; *gateDrainBulkCapacitance = (w * WMLT + XW) * CJGATE; } else { *periDrainBulkCapacitance = drainPerimeter * CJGATE; *gateDrainBulkCapacitance = 0.0; } if (!sourceAreaGiven) sourceArea = 2.0 * (HDIF * WMLT) * (w * WMLT + XW); else sourceArea = sourceArea * WMLT * WMLT; if (!sourcePerimeterGiven) sourcePerimeter = 4.0 * (HDIF * WMLT) + 2.0 * (w * WMLT + XW); else sourcePerimeter = sourcePerimeter * WMLT; *areaSourceBulkCapacitance = sourceArea * CJ; if (sourcePerimeter > (w * WMLT + XW)) { *periSourceBulkCapacitance = (sourcePerimeter - (w * WMLT + XW)) * CJSW; *gateSourceBulkCapacitance = (w * WMLT + XW) * CJGATE; } else { *periSourceBulkCapacitance = sourcePerimeter * CJGATE; *gateSourceBulkCapacitance = 0.0; } break; case 3: if (!drainAreaGiven) if ((GEO == 0) || (GEO == 2)) drainArea = 2.0 * (HDIF * WMLT) * (w * WMLT + XW); else drainArea = (HDIF * WMLT) * (w * WMLT + XW); else drainArea = drainArea * WMLT * WMLT; if (!drainPerimeterGiven) if ((GEO == 0) || (GEO == 2)) drainPerimeter = 4.0 * (HDIF * WMLT) + (w * WMLT + XW); else drainPerimeter = 2.0 * (HDIF * WMLT); else drainPerimeter = drainPerimeter * WMLT; *areaDrainBulkCapacitance = drainArea * CJ; *periDrainBulkCapacitance = drainPerimeter * CJSW ; *gateDrainBulkCapacitance = (w * WMLT + XW) * CJGATE; if (!sourceAreaGiven) if ((GEO == 0) || (GEO == 1)) sourceArea = 2.0 * (HDIF * WMLT) * (w * WMLT + XW); else sourceArea = (HDIF * WMLT) * (w * WMLT + XW); else sourceArea = sourceArea * WMLT * WMLT; if (!sourcePerimeterGiven) if ((GEO == 0) || (GEO == 1)) sourcePerimeter = 4.0 * (HDIF * WMLT) + (w * WMLT + XW); else sourcePerimeter = 2.0 * (HDIF * WMLT); else sourcePerimeter = sourcePerimeter * WMLT; *areaSourceBulkCapacitance = sourceArea * CJ; *periSourceBulkCapacitance = sourcePerimeter * CJSW; *gateSourceBulkCapacitance = (w * WMLT + XW) * CJGATE; break; case 11: drainArea = (w * WMLT + XW) * WMLT; drainPerimeter = (w * WMLT + XW); *areaDrainBulkCapacitance = drainArea * CJ; *periDrainBulkCapacitance = drainPerimeter * CJSW; *gateDrainBulkCapacitance = 0.0; sourceArea = (w * WMLT + XW) * WMLT; sourcePerimeter = (w * WMLT + XW); *areaSourceBulkCapacitance = sourceArea * CJ; *periSourceBulkCapacitance = sourcePerimeter * CJSW; *gateSourceBulkCapacitance = 0.0; break; case 12: if (CALCACM == 1) { if (!drainAreaGiven) drainArea = 2.0 * (HDIF * WMLT) * (w * WMLT + XW); else drainArea = drainArea * WMLT * WMLT; if (!drainPerimeterGiven) drainPerimeter = 4.0 * (HDIF * WMLT) + 2.0 * (w * WMLT + XW); else drainPerimeter = drainPerimeter * WMLT; } *areaDrainBulkCapacitance = drainArea * CJ; if (drainPerimeter > (w * WMLT + XW)) { *periDrainBulkCapacitance = (drainPerimeter - (w * WMLT + XW)) * CJSW; *gateDrainBulkCapacitance = (w * WMLT + XW) * CJGATE; } else { *periDrainBulkCapacitance = 0.0; *gateDrainBulkCapacitance = drainPerimeter * CJGATE; } if (CALCACM == 1) { if (!sourceAreaGiven) sourceArea = 2.0 * (HDIF * WMLT) * (w * WMLT + XW); else sourceArea = sourceArea * WMLT * WMLT; if (!sourcePerimeterGiven) sourcePerimeter = 4.0 * (HDIF * WMLT) + 2.0 * (w * WMLT + XW); else sourcePerimeter = sourcePerimeter * WMLT; } *areaSourceBulkCapacitance = sourceArea * CJ; if (sourcePerimeter > (w * WMLT + XW)) { *periSourceBulkCapacitance = (sourcePerimeter - (w * WMLT + XW)) * CJSW; *gateSourceBulkCapacitance = (w * WMLT + XW) * CJGATE; } else { *periSourceBulkCapacitance = 0.0; *gateSourceBulkCapacitance = sourcePerimeter * CJGATE; } break; case 13: drainArea = drainArea * WMLT * WMLT; drainPerimeter = drainPerimeter * WMLT; *areaDrainBulkCapacitance = drainArea * CJ; if (drainPerimeter > (w * WMLT + XW)) { *periDrainBulkCapacitance = (drainPerimeter - (w * WMLT + XW)) * CJSW; *gateDrainBulkCapacitance = (w * WMLT + XW) * CJGATE; } else { *periDrainBulkCapacitance = 0.0; *gateDrainBulkCapacitance = drainPerimeter * CJGATE; } sourceArea = sourceArea * WMLT * WMLT; sourcePerimeter = sourcePerimeter * WMLT; *areaSourceBulkCapacitance = sourceArea * CJ; if (sourcePerimeter > (w * WMLT + XW)) { *periSourceBulkCapacitance = (sourcePerimeter - (w * WMLT + XW)) * CJSW; *gateSourceBulkCapacitance = (w * WMLT + XW) * CJGATE; } else { *periSourceBulkCapacitance = 0.0; *gateSourceBulkCapacitance = sourcePerimeter * CJGATE; } break; default: break; } return 0; } /* Compute the MOS overlap capacitances as functions of the device * terminal voltages * * PN 2002: As of ngspice this code is not used by any device. */ void DEVcmeyer(double vgs0, /* initial voltage gate-source */ double vgd0, /* initial voltage gate-drain */ double vgb0, /* initial voltage gate-bulk */ double von0, double vdsat0, double vgs1, /* final voltage gate-source */ double vgd1, /* final voltage gate-drain */ double vgb1, /* final voltage gate-bulk */ double covlgs, /* overlap capacitance gate-source */ double covlgd, /* overlap capacitance gate-drain */ double covlgb, /* overlap capacitance gate-bulk */ double *cgs, double *cgd, double *cgb, double phi, double cox, double von, double vdsat) { double vdb; double vdbsat; double vddif; double vddif1; double vddif2; double vgbt; *cgs = 0; *cgd = 0; *cgb = 0; vgbt = vgs1-von; if (vgbt <= -phi) { *cgb = cox; } else if (vgbt <= -phi/2) { *cgb = -vgbt*cox/phi; } else if (vgbt <= 0) { *cgb = -vgbt*cox/phi; *cgs = cox/(7.5e-1*phi)*vgbt+cox/1.5; } else { vdbsat = vdsat-(vgs1-vgb1); vdb = vgb1-vgd1; if (vdbsat <= vdb) { *cgs = cox/1.5; } else { vddif = 2.0*vdbsat-vdb; vddif1 = vdbsat-vdb-1.0e-12; vddif2 = vddif*vddif; *cgd = cox*(1.0-vdbsat*vdbsat/vddif2)/1.5; *cgs = cox*(1.0-vddif1*vddif1/vddif2)/1.5; } } vgbt = vgs0-von0; if (vgbt <= -phi) { *cgb += cox; } else if (vgbt <= -phi/2) { *cgb += -vgbt*cox/phi; } else if (vgbt <= 0) { *cgb += -vgbt*cox/phi; *cgs += cox/(7.5e-1*phi)*vgbt+cox/1.5; } else { vdbsat = vdsat0-(vgs0-vgb0); vdb = vgb0-vgd0; if (vdbsat <= vdb) { *cgs += cox/1.5; } else { vddif = 2.0*vdbsat-vdb; vddif1 = vdbsat-vdb-1.0e-12; vddif2 = vddif*vddif; *cgd += cox*(1.0-vdbsat*vdbsat/vddif2)/1.5; *cgs += cox*(1.0-vddif1*vddif1/vddif2)/1.5; } } *cgs = *cgs *.5 + covlgs; *cgd = *cgd *.5 + covlgd; *cgb = *cgb *.5 + covlgb; } /* model according to http://ltwiki.org/index.php5?title=Undocumented_LTspice#VDMOS:_Breakdown_and_Sub-threshold_Enhancements */ void DevCapVDMOS(double vgd, double cgdmin, double cgdmax, double a, double cgs, double *capgs, double *capgd, double *capgb) { double s = (cgdmax - cgdmin) / (1 + M_PI / 2); double y = cgdmax - s; if (vgd > 0) *capgd = 0.5 * (s * tanh(a * vgd) + y); else *capgd = 0.5 * (s * atan(a * vgd) + y); *capgs = 0.5 * cgs; *capgb = 0; } /* Compute the MOS overlap capacitances as functions of the device * terminal voltages * * PN 2002: This is the Meyer model used by MOS1 MOS2 MOS3 MOS6 and MOS9 * device models. */ void DEVqmeyer(double vgs, /* initial voltage gate-source */ double vgd, /* initial voltage gate-drain */ double vgb, /* initial voltage gate-bulk */ double von, double vdsat, double *capgs, /* non-constant portion of g-s overlap capacitance */ double *capgd, /* non-constant portion of g-d overlap capacitance */ double *capgb, /* non-constant portion of g-b overlap capacitance */ double phi, double cox) /* oxide capactiance */ { double vds; double vddif; double vddif1; double vddif2; double vgst; NG_IGNORE(vgb); #define MAGIC_VDS 0.025 vgst = vgs-von; vdsat = MAX(vdsat, MAGIC_VDS); if (vgst <= -phi) { *capgb = cox/2; *capgs = 0; *capgd = 0; } else if (vgst <= -phi/2) { *capgb = -vgst*cox/(2*phi); *capgs = 0; *capgd = 0; } else if (vgst <= 0) { *capgb = -vgst*cox/(2*phi); *capgs = vgst*cox/(1.5*phi)+cox/3; vds = vgs-vgd; if (vds>=vdsat) { *capgd = 0; } else { vddif = 2.0*vdsat-vds; vddif1 = vdsat-vds/*-1.0e-12*/; vddif2 = vddif*vddif; *capgd = *capgs*(1.0-vdsat*vdsat/vddif2); *capgs = *capgs*(1.0-vddif1*vddif1/vddif2); } } else { vds = vgs-vgd; vdsat = MAX(vdsat, MAGIC_VDS); if (vdsat <= vds) { *capgs = cox/3; *capgd = 0; *capgb = 0; } else { vddif = 2.0*vdsat-vds; vddif1 = vdsat-vds/*-1.0e-12*/; vddif2 = vddif*vddif; *capgd = cox*(1.0-vdsat*vdsat/vddif2)/3; *capgs = cox*(1.0-vddif1*vddif1/vddif2)/3; *capgb = 0; } } } #ifdef notdef /* XXX This is no longer used, apparently * PN 2002: This is industrial archaelology */ void DEVcap(CKTcircuit *ckt, double vgd, double vgs, double vgb, double covlgd, double covlgs, double covlgb, double capbd, double capbs, double cggb, double cgdb, double cgsb, double cbgb, double cbdb, double cbsb, double *gcggb, double *gcgdb, double *gcgsb, double *gcbgb, double *gcbdb, double *gcbsb, double *gcdgb, double *gcddb, double *gcdsb, double *gcsgb, double *gcsdb, double *gcssb, double qgate, double qchan, double qbulk, double *qdrn, double *qsrc, double xqc) /* * compute equivalent conductances * divide up the channel charge (1-xqc)/xqc to source and drain */ { double gcd; double gcdxd; double gcdxs; double gcg; double gcgxd; double gcgxs; double gcs; double gcsxd; double gcsxs; double qgb; double qgd; double qgs; gcg = (cggb+cbgb)*ckt->CKTag[1]; gcd = (cgdb+cbdb)*ckt->CKTag[1]; gcs = (cgsb+cbsb)*ckt->CKTag[1]; gcgxd = -xqc*gcg; gcgxs = -(1-xqc)*gcg; gcdxd = -xqc*gcd; gcdxs = -(1-xqc)*gcd; gcsxd = -xqc*gcs; gcsxs = -(1-xqc)*gcs; *gcdgb = gcgxd-covlgd*ckt->CKTag[1]; *gcddb = gcdxd+(capbd+covlgd)*ckt->CKTag[1]; *gcdsb = gcsxd; *gcsgb = gcgxs-covlgs*ckt->CKTag[1]; *gcsdb = gcdxs; *gcssb = gcsxs+(capbs+covlgs)*ckt->CKTag[1]; *gcggb = (cggb+covlgd+covlgs+covlgb)*ckt->CKTag[1]; *gcgdb = (cgdb-covlgd)*ckt->CKTag[1]; *gcgsb = (cgsb-covlgs)*ckt->CKTag[1]; *gcbgb = (cbgb-covlgb)*ckt->CKTag[1]; *gcbdb = (cbdb-capbd)*ckt->CKTag[1]; *gcbsb = (cbsb-capbs)*ckt->CKTag[1]; /* * compute total terminal charges */ qgd = covlgd*vgd; qgs = covlgs*vgs; qgb = covlgb*vgb; qgate = qgate+qgd+qgs+qgb; qbulk = qbulk-qgb; *qdrn = xqc*qchan-qgd; *qsrc = (1-xqc)*qchan-qgs; /* * finished */ } #endif /* Predict a value for the capacitor at loct by extrapolating from * previous values */ double DEVpred(CKTcircuit *ckt, int loct) { #ifndef NEWTRUNC double xfact; xfact = ckt->CKTdelta/ckt->CKTdeltaOld[1]; return( ( (1+xfact) * *(ckt->CKTstate1+loct) ) - ( xfact * *(ckt->CKTstate2+loct) ) ); #endif /* NEWTRUNC */ } /* SOA check printout used in DEVsoaCheck functions */ extern FILE *slogp; /* soa log file ('--soa-log file' command line option) */ void soa_printf(CKTcircuit *ckt, GENinstance *instance, const char *fmt, ...) { FILE *fp = slogp ? slogp : stdout; va_list ap; va_start(ap, fmt); if (ckt->CKTmode & MODETRAN) fprintf(fp, "Instance: %s Model: %s Time: %g ", instance->GENname, instance->GENmodPtr->GENmodName, ckt->CKTtime); else fprintf(fp, "Instance: %s Model: %s ", instance->GENname, instance->GENmodPtr->GENmodName); vfprintf(fp, fmt, ap); va_end(ap); } tmpk8ny_4pz/src/spicelib/devices/cktsoachk.c0000644000175000017500000000212313546075722021277 0ustar carstencarsten/********** Copyright 2013 Dietmar Warning. All rights reserved. Author: 2013 Dietmar Warning **********/ /* * This is a driver program to iterate through all the various SOA check * functions provided for the circuit elements in the given circuit */ #include "ngspice/config.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/ifsim.h" #include "ngspice/devdefs.h" #include "dev.h" int CKTsoaInit(void) { int i; SPICEdev **devs = devices(); for (i = 0; i < DEVmaxnum; i++) if (devs[i] && devs[i]->DEVsoaCheck) devs[i]->DEVsoaCheck (NULL, NULL); return OK; } int CKTsoaCheck(CKTcircuit *ckt) { int i, error; if (ckt->CKTmode & (MODEDC | MODEDCOP | MODEDCTRANCURVE | MODETRAN | MODETRANOP)) { SPICEdev **devs = devices(); for (i = 0; i < DEVmaxnum; i++) { if (devs[i] && devs[i]->DEVsoaCheck && ckt->CKThead[i]) { error = devs[i]->DEVsoaCheck (ckt, ckt->CKThead[i]); if (error) return error; } } } return OK; } tmpk8ny_4pz/src/spicelib/devices/tra/0000755000175000017500000000000013546075722017751 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/tra/Makefile.am0000644000175000017500000000062513546075722022010 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libtra.la libtra_la_SOURCES = \ tra.c \ traacct.c \ traacld.c \ traask.c \ tradefs.h \ traext.h \ trainit.c \ trainit.h \ traitf.h \ traload.c \ traparam.c \ trasetup.c \ tratemp.c \ tratrunc.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/tra/traload.c0000644000175000017500000001533513546075722021552 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "tradefs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int TRAload(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current values into the * sparse matrix previously provided */ { TRAmodel *model = (TRAmodel *)inModel; TRAinstance *here; double t1,t2,t3; double f1,f2,f3; int i; /* loop through all the transmission line models */ for( ; model != NULL; model = TRAnextModel(model)) { /* loop through all the instances of the model */ for (here = TRAinstances(model); here != NULL ; here=TRAnextInstance(here)) { *(here->TRApos1Pos1Ptr) += here->TRAconduct; *(here->TRApos1Int1Ptr) -= here->TRAconduct; *(here->TRAneg1Ibr1Ptr) -= 1; *(here->TRApos2Pos2Ptr) += here->TRAconduct; *(here->TRAneg2Ibr2Ptr) -= 1; *(here->TRAint1Pos1Ptr) -= here->TRAconduct; *(here->TRAint1Int1Ptr) += here->TRAconduct; *(here->TRAint1Ibr1Ptr) += 1; *(here->TRAint2Int2Ptr) += here->TRAconduct; *(here->TRAint2Ibr2Ptr) += 1; *(here->TRAibr1Neg1Ptr) -= 1; *(here->TRAibr1Int1Ptr) += 1; *(here->TRAibr2Neg2Ptr) -= 1; *(here->TRAibr2Int2Ptr) += 1; *(here->TRApos2Int2Ptr) -= here->TRAconduct; *(here->TRAint2Pos2Ptr) -= here->TRAconduct; if(ckt->CKTmode & MODEDC) { *(here->TRAibr1Pos2Ptr) -= 1; *(here->TRAibr1Neg2Ptr) += 1; *(here->TRAibr1Ibr2Ptr) -= (1-ckt->CKTgmin)*here->TRAimped; *(here->TRAibr2Pos1Ptr) -= 1; *(here->TRAibr2Neg1Ptr) += 1; *(here->TRAibr2Ibr1Ptr) -= (1-ckt->CKTgmin)*here->TRAimped; } else { if (ckt->CKTmode & MODEINITTRAN) { if(ckt->CKTmode & MODEUIC) { here->TRAinput1 = here->TRAinitVolt2 + here->TRAinitCur2 * here->TRAimped; here->TRAinput2 = here->TRAinitVolt1 + here->TRAinitCur1 * here->TRAimped; } else { here->TRAinput1 = ( *(ckt->CKTrhsOld+here->TRAposNode2) - *(ckt->CKTrhsOld+here->TRAnegNode2) ) + ( *(ckt->CKTrhsOld+here->TRAbrEq2) *here->TRAimped); here->TRAinput2 = ( *(ckt->CKTrhsOld+here->TRAposNode1) - *(ckt->CKTrhsOld+here->TRAnegNode1) ) + ( *(ckt->CKTrhsOld+here->TRAbrEq1) *here->TRAimped); } *(here->TRAdelays ) = -2*here->TRAtd; *(here->TRAdelays+3) = -here->TRAtd; *(here->TRAdelays+6) = 0; *(here->TRAdelays+1) = *(here->TRAdelays +4) = *(here->TRAdelays+7) = here->TRAinput1; *(here->TRAdelays+2) = *(here->TRAdelays +5) = *(here->TRAdelays+8) = here->TRAinput2; here->TRAsizeDelay = 2; } else { if(ckt->CKTmode & MODEINITPRED) { for(i=2;(iTRAsizeDelay) && (*(here->TRAdelays +3*i) <= (ckt->CKTtime-here->TRAtd));i++) {;/*loop does it*/} t1 = *(here->TRAdelays + (3*(i-2))); t2 = *(here->TRAdelays + (3*(i-1))); t3 = *(here->TRAdelays + (3*(i ))); if( (t2-t1)==0 || (t3-t2) == 0) continue; f1 = (ckt->CKTtime - here->TRAtd - t2) * (ckt->CKTtime - here->TRAtd - t3) ; f2 = (ckt->CKTtime - here->TRAtd - t1) * (ckt->CKTtime - here->TRAtd - t3) ; f3 = (ckt->CKTtime - here->TRAtd - t1) * (ckt->CKTtime - here->TRAtd - t2) ; if((t2-t1)==0) { /* should never happen, but don't want * to divide by zero, EVER... */ f1=0; f2=0; } else { f1 /= (t1-t2); f2 /= (t2-t1); } if((t3-t2)==0) { /* should never happen, but don't want * to divide by zero, EVER... */ f2=0; f3=0; } else { f2 /= (t2-t3); f3 /= (t2-t3); } if((t3-t1)==0) { /* should never happen, but don't want * to divide by zero, EVER... */ f1=0; f2=0; } else { f1 /= (t1-t3); f3 /= (t1-t3); } /*printf("at time %g, using %g, %g, %g\n",ckt->CKTtime, t1,t2,t3); printf("values %g, %g, %g \n", *(here->TRAdelays + (3*(i-2))+1), *(here->TRAdelays + (3*(i-1))+1), *(here->TRAdelays + (3*(i ))+1) ); printf("and %g, %g, %g \n", *(here->TRAdelays + (3*(i-2))+2), *(here->TRAdelays + (3*(i-1))+2), *(here->TRAdelays + (3*(i ))+2) );*/ here->TRAinput1 = f1 * *(here->TRAdelays + (3*(i-2))+1) + f2 * *(here->TRAdelays + (3*(i-1))+1) + f3 * *(here->TRAdelays + (3*(i ))+1); here->TRAinput2 = f1 * *(here->TRAdelays + (3*(i-2))+2) + f2 * *(here->TRAdelays + (3*(i-1))+2) + f3 * *(here->TRAdelays + (3*(i ))+2); } } *(ckt->CKTrhs + here->TRAbrEq1) += here->TRAinput1; *(ckt->CKTrhs + here->TRAbrEq2) += here->TRAinput2; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/tra/trasetup.c0000644000175000017500000001133413546075722021766 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "tradefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int TRAsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *state) /* load the transmission line structure with those pointers needed later * for fast matrix loading */ { TRAmodel *model = (TRAmodel *)inModel; TRAinstance *here; int error; CKTnode *tmp; NG_IGNORE(state); /* loop through all the transmission line models */ for( ; model != NULL; model = TRAnextModel(model)) { /* loop through all the instances of the model */ for (here = TRAinstances(model); here != NULL ; here=TRAnextInstance(here)) { if(here->TRAbrEq1==0) { error = CKTmkVolt(ckt,&tmp,here->TRAname,"i1"); if(error) return(error); here->TRAbrEq1 = tmp->number; } if(here->TRAbrEq2==0) { error = CKTmkVolt(ckt,&tmp,here->TRAname,"i2"); if(error) return(error); here->TRAbrEq2 = tmp->number; } if(here->TRAintNode1==0) { error = CKTmkVolt(ckt,&tmp,here->TRAname,"int1"); if(error) return(error); here->TRAintNode1 = tmp->number; } if(here->TRAintNode2==0) { error = CKTmkVolt(ckt,&tmp,here->TRAname,"int2"); if(error) return(error); here->TRAintNode2 = tmp->number; } /* allocate the delay table */ here->TRAdelays = TMALLOC(double, 15); here->TRAallocDelay = 4; /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(TRAibr1Ibr2Ptr, TRAbrEq1, TRAbrEq2); TSTALLOC(TRAibr1Int1Ptr, TRAbrEq1, TRAintNode1); TSTALLOC(TRAibr1Neg1Ptr, TRAbrEq1, TRAnegNode1); TSTALLOC(TRAibr1Neg2Ptr, TRAbrEq1, TRAnegNode2); TSTALLOC(TRAibr1Pos2Ptr, TRAbrEq1, TRAposNode2); TSTALLOC(TRAibr2Ibr1Ptr, TRAbrEq2, TRAbrEq1); TSTALLOC(TRAibr2Int2Ptr, TRAbrEq2, TRAintNode2); TSTALLOC(TRAibr2Neg1Ptr, TRAbrEq2, TRAnegNode1); TSTALLOC(TRAibr2Neg2Ptr, TRAbrEq2, TRAnegNode2); TSTALLOC(TRAibr2Pos1Ptr, TRAbrEq2, TRAposNode1); TSTALLOC(TRAint1Ibr1Ptr, TRAintNode1, TRAbrEq1); TSTALLOC(TRAint1Int1Ptr, TRAintNode1, TRAintNode1); TSTALLOC(TRAint1Pos1Ptr, TRAintNode1, TRAposNode1); TSTALLOC(TRAint2Ibr2Ptr, TRAintNode2, TRAbrEq2); TSTALLOC(TRAint2Int2Ptr, TRAintNode2, TRAintNode2); TSTALLOC(TRAint2Pos2Ptr, TRAintNode2, TRAposNode2); TSTALLOC(TRAneg1Ibr1Ptr, TRAnegNode1, TRAbrEq1); TSTALLOC(TRAneg2Ibr2Ptr, TRAnegNode2, TRAbrEq2); TSTALLOC(TRApos1Int1Ptr, TRAposNode1, TRAintNode1); TSTALLOC(TRApos1Pos1Ptr, TRAposNode1, TRAposNode1); TSTALLOC(TRApos2Int2Ptr, TRAposNode2, TRAintNode2); TSTALLOC(TRApos2Pos2Ptr, TRAposNode2, TRAposNode2); if(!here->TRAnlGiven) { here->TRAnl = .25; } if(!here->TRAfGiven) { here->TRAf = 1e9; } if(!here->TRAreltolGiven) { here->TRAreltol = 1; } if(!here->TRAabstolGiven) { here->TRAabstol = 1; } if(!here->TRAimpedGiven) { SPfrontEnd->IFerrorf (ERR_FATAL, "%s: transmission line z0 must be given", here->TRAname); return(E_BADPARM); } } } return(OK); } int TRAunsetup(GENmodel *inModel, CKTcircuit *ckt) { TRAmodel *model; TRAinstance *here; for (model = (TRAmodel *)inModel; model != NULL; model = TRAnextModel(model)) { for (here = TRAinstances(model); here != NULL; here=TRAnextInstance(here)) { if (here->TRAintNode2 > 0) CKTdltNNum(ckt, here->TRAintNode2); here->TRAintNode2= 0; if (here->TRAintNode1 > 0) CKTdltNNum(ckt, here->TRAintNode1); here->TRAintNode1= 0; if (here->TRAbrEq2 > 0) CKTdltNNum(ckt, here->TRAbrEq2); here->TRAbrEq2= 0; if (here->TRAbrEq1 > 0) CKTdltNNum(ckt, here->TRAbrEq1); here->TRAbrEq1= 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/tra/tratrunc.c0000644000175000017500000000570513546075722021766 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "tradefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int TRAtrunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { TRAmodel *model = (TRAmodel *)inModel; TRAinstance *here; double v1,v2,v3,v4; double v5,v6,d1,d2,d3,d4; double tmp; /* loop through all the transmission line models */ for( ; model != NULL; model = TRAnextModel(model)) { /* loop through all the instances of the model */ for (here = TRAinstances(model); here != NULL ; here=TRAnextInstance(here)) { v1 = ( *(ckt->CKTrhsOld + here->TRAposNode2) - *(ckt->CKTrhsOld + here->TRAnegNode2)) + *(ckt->CKTrhsOld + here->TRAbrEq2) * here->TRAimped; v2 = *(here->TRAdelays+1+3*(here->TRAsizeDelay)); v3 = *(here->TRAdelays+1+3*(here->TRAsizeDelay-1)); v4 = ( *(ckt->CKTrhsOld + here->TRAposNode1) - *(ckt->CKTrhsOld + here->TRAnegNode1)) + *(ckt->CKTrhsOld + here->TRAbrEq1) * here->TRAimped; v5 = *(here->TRAdelays+2+3*(here->TRAsizeDelay)); v6 = *(here->TRAdelays+2+3*(here->TRAsizeDelay-1)); d1 = (v1-v2)/ckt->CKTdeltaOld[1]; d2 = (v2-v3)/ckt->CKTdeltaOld[2]; d3 = (v4-v5)/ckt->CKTdeltaOld[1]; d4 = (v5-v6)/ckt->CKTdeltaOld[2]; /*printf("%s: at %g derivs are %g, %g and %g, %g\n", here->TRAname,ckt->CKTtime,d1,d2,d3,d4);*/ if( (fabs(d1-d2) >= here->TRAreltol*MAX(fabs(d1),fabs(d2))+ here->TRAabstol) || (fabs(d3-d4) >= here->TRAreltol*MAX(fabs(d3),fabs(d4))+ here->TRAabstol) ) { /* derivitive changing - need to schedule after delay */ /*printf("%s: at %g set for %g\n",here->TRAname, ckt->CKTtime, *(here->TRAdelays+3*here->TRAsizeDelay-3)+here->TRAtd );*/ /*printf("%g, %g, %g -> %g, %g \n",v1,v2,v3,d1,d2);*/ /*printf("%g, %g, %g -> %g, %g \n",v4,v5,v6,d3,d4);*/ /* also set for break after PREVIOUS point */ /*printf("setting break\n");*/ /* will need to set a breakpoint at *(here->TRAdelays+3*(here->TRAsizeDelay)) + here->TRAtd so we need to make sure we don't step past it */ /* the previous timepoint plus the delay */ tmp = *(here->TRAdelays+3*here->TRAsizeDelay) + here->TRAtd; /* minus current time */ tmp -= ckt->CKTtime; *timeStep = MIN(*timeStep,tmp); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/tra/tratemp.c0000644000175000017500000000175713546075722021603 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "tradefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int TRAtemp(GENmodel *inModel, CKTcircuit *ckt) /* * pre-process parameters for later use */ { TRAmodel *model = (TRAmodel *)inModel; TRAinstance *here; NG_IGNORE(ckt); /* loop through all the transmission line models */ for( ; model != NULL; model = TRAnextModel(model)) { /* loop through all the instances of the model */ for (here = TRAinstances(model); here != NULL ; here=TRAnextInstance(here)) { if(!here->TRAtdGiven) { here->TRAtd = here->TRAnl/here->TRAf; } here->TRAconduct = 1/here->TRAimped; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/tra/traparam.c0000644000175000017500000000440713546075722021731 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "tradefs.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int TRAparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { TRAinstance *here = (TRAinstance *)inst; NG_IGNORE(select); switch(param) { case TRA_RELTOL: here->TRAreltol = value->rValue; here->TRAreltolGiven = TRUE; break; case TRA_ABSTOL: here->TRAabstol = value->rValue; here->TRAabstolGiven = TRUE; break; case TRA_Z0: here->TRAimped = value->rValue; here->TRAimpedGiven = TRUE; break; case TRA_TD: here->TRAtd = value->rValue; here->TRAtdGiven = TRUE; break; case TRA_NL: here->TRAnl= value->rValue; here->TRAnlGiven = TRUE; break; case TRA_FREQ: here->TRAf= value->rValue; here->TRAfGiven = TRUE; break; case TRA_V1: here->TRAinitVolt1 = value->rValue; here->TRAicV1Given = TRUE; break; case TRA_I1: here->TRAinitCur1 = value->rValue; here->TRAicC1Given = TRUE; break; case TRA_V2: here->TRAinitVolt2 = value->rValue; here->TRAicV2Given = TRUE; break; case TRA_I2: here->TRAinitCur2 = value->rValue; here->TRAicC2Given = TRUE; break; case TRA_IC: switch(value->v.numValue){ case 4: here->TRAinitCur2 = *(value->v.vec.rVec+3); case 3: here->TRAinitVolt2 = *(value->v.vec.rVec+2); case 2: here->TRAinitCur1 = *(value->v.vec.rVec+1); case 1: here->TRAinitVolt1 = *(value->v.vec.rVec); break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/tra/trainit.c0000644000175000017500000000305113546075722021566 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "traitf.h" #include "traext.h" #include "trainit.h" SPICEdev TRAinfo = { .DEVpublic = { .name = "Tranline", .description = "Lossless transmission line", .terms = &TRAnSize, .numNames = &TRAnSize, .termNames = TRAnames, .numInstanceParms = &TRApTSize, .instanceParms = TRApTable, .numModelParms = NULL, .modelParms = NULL, .flags = 0, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = TRAparam, .DEVmodParam = NULL, .DEVload = TRAload, .DEVsetup = TRAsetup, .DEVunsetup = TRAunsetup, .DEVpzSetup = TRAsetup, .DEVtemperature = TRAtemp, .DEVtrunc = TRAtrunc, .DEVfindBranch = NULL, .DEVacLoad = TRAacLoad, .DEVaccept = TRAaccept, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = NULL, .DEVask = TRAask, .DEVmodAsk = NULL, .DEVpzLoad = NULL, .DEVconvTest = NULL, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &TRAiSize, .DEVmodSize = &TRAmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_tra_info(void) { return &TRAinfo; } tmpk8ny_4pz/src/spicelib/devices/tra/traask.c0000644000175000017500000000527613546075722021414 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ /* */ /* * This routine gives access to the internal device parameter * of TRAnsmission lines */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "tradefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int TRAask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { TRAinstance *here = (TRAinstance *)inst; int temp; double *v, *w; NG_IGNORE(select); NG_IGNORE(ckt); switch(which) { case TRA_POS_NODE1: value->iValue = here->TRAposNode1; return (OK); case TRA_NEG_NODE1: value->iValue = here->TRAnegNode1; return (OK); case TRA_POS_NODE2: value->iValue = here->TRAposNode2; return (OK); case TRA_NEG_NODE2: value->iValue = here->TRAnegNode2; return (OK); case TRA_INT_NODE1: value->iValue = here->TRAintNode1; return (OK); case TRA_INT_NODE2: value->iValue = here->TRAintNode2; return (OK); case TRA_Z0: value->rValue = here->TRAimped; return (OK); case TRA_TD: value->rValue = here->TRAtd; return (OK); case TRA_NL: value->rValue = here->TRAnl; return (OK); case TRA_FREQ: value->rValue = here->TRAf; return (OK); case TRA_V1: value->rValue = here->TRAinitVolt1; return (OK); case TRA_I1: value->rValue = here->TRAinitCur1; return (OK); case TRA_V2: value->rValue = here->TRAinitVolt2; return (OK); case TRA_I2: value->rValue = here->TRAinitCur2; return (OK); case TRA_RELTOL: value->rValue = here->TRAreltol; return (OK); case TRA_ABSTOL: value->rValue = here->TRAabstol; return (OK); case TRA_BR_EQ1: value->rValue = here->TRAbrEq1; return (OK); case TRA_BR_EQ2: value->rValue = here->TRAbrEq2; return (OK); case TRA_DELAY: value->v.vec.rVec = TMALLOC(double, here->TRAsizeDelay); value->v.numValue = temp = here->TRAsizeDelay; v = value->v.vec.rVec; w = here->TRAdelays; while (temp--) *v++ = *w++; return (OK); default: return (E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/tra/tradefs.h0000644000175000017500000001235013546075722021553 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #ifndef TRA #define TRA #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" /* definitions used to describe transmission liness */ /* information used to describe a single instance */ typedef struct sTRAinstance { struct GENinstance gen; #define TRAmodPtr(inst) ((struct sTRAmodel *)((inst)->gen.GENmodPtr)) #define TRAnextInstance(inst) ((struct sTRAinstance *)((inst)->gen.GENnextInstance)) #define TRAname gen.GENname #define TRAstate gen.GENstate const int TRAposNode1; /* number of positive node of end 1 of t. line */ const int TRAnegNode1; /* number of negative node of end 1 of t. line */ const int TRAposNode2; /* number of positive node of end 2 of t. line */ const int TRAnegNode2; /* number of negative node of end 2 of t. line */ int TRAintNode1; /* number of internal node of end 1 of t. line */ int TRAintNode2; /* number of internal node of end 2 of t. line */ double TRAimped; /* impedance - input */ double TRAconduct; /* conductance - calculated */ double TRAtd; /* propagation delay */ double TRAnl; /* normalized length */ double TRAf; /* frequency at which nl is measured */ double TRAinput1; /* accumulated excitation for port 1 */ double TRAinput2; /* accumulated excitation for port 2 */ double TRAinitVolt1; /* initial condition: voltage on port 1 */ double TRAinitCur1; /* initial condition: current at port 1 */ double TRAinitVolt2; /* initial condition: voltage on port 2 */ double TRAinitCur2; /* initial condition: current at port 2 */ double TRAreltol; /* relative deriv. tol. for breakpoint setting */ double TRAabstol; /* absolute deriv. tol. for breakpoint setting */ double *TRAdelays; /* delayed values of excitation */ int TRAsizeDelay; /* size of active delayed table */ int TRAallocDelay; /* allocated size of delayed table */ int TRAbrEq1; /* number of branch equation for end 1 of t. line */ int TRAbrEq2; /* number of branch equation for end 2 of t. line */ double *TRAibr1Ibr2Ptr; /* pointer to sparse matrix */ double *TRAibr1Int1Ptr; /* pointer to sparse matrix */ double *TRAibr1Neg1Ptr; /* pointer to sparse matrix */ double *TRAibr1Neg2Ptr; /* pointer to sparse matrix */ double *TRAibr1Pos2Ptr; /* pointer to sparse matrix */ double *TRAibr2Ibr1Ptr; /* pointer to sparse matrix */ double *TRAibr2Int2Ptr; /* pointer to sparse matrix */ double *TRAibr2Neg1Ptr; /* pointer to sparse matrix */ double *TRAibr2Neg2Ptr; /* pointer to sparse matrix */ double *TRAibr2Pos1Ptr; /* pointer to sparse matrix */ double *TRAint1Ibr1Ptr; /* pointer to sparse matrix */ double *TRAint1Int1Ptr; /* pointer to sparse matrix */ double *TRAint1Pos1Ptr; /* pointer to sparse matrix */ double *TRAint2Ibr2Ptr; /* pointer to sparse matrix */ double *TRAint2Int2Ptr; /* pointer to sparse matrix */ double *TRAint2Pos2Ptr; /* pointer to sparse matrix */ double *TRAneg1Ibr1Ptr; /* pointer to sparse matrix */ double *TRAneg2Ibr2Ptr; /* pointer to sparse matrix */ double *TRApos1Int1Ptr; /* pointer to sparse matrix */ double *TRApos1Pos1Ptr; /* pointer to sparse matrix */ double *TRApos2Int2Ptr; /* pointer to sparse matrix */ double *TRApos2Pos2Ptr; /* pointer to sparse matrix */ unsigned TRAimpedGiven : 1; /* flag to indicate impedence was specified */ unsigned TRAtdGiven : 1; /* flag to indicate delay was specified */ unsigned TRAnlGiven : 1; /* flag to indicate norm length was specified */ unsigned TRAfGiven : 1; /* flag to indicate freq was specified */ unsigned TRAicV1Given : 1; /* flag to ind. init. voltage at port 1 given */ unsigned TRAicC1Given : 1; /* flag to ind. init. current at port 1 given */ unsigned TRAicV2Given : 1; /* flag to ind. init. voltage at port 2 given */ unsigned TRAicC2Given : 1; /* flag to ind. init. current at port 2 given */ unsigned TRAreltolGiven:1; /* flag to ind. relative deriv. tol. given */ unsigned TRAabstolGiven:1; /* flag to ind. absolute deriv. tol. given */ } TRAinstance ; /* per model data */ typedef struct sTRAmodel { /* model structure for a transmission lines */ struct GENmodel gen; #define TRAmodType gen.GENmodType #define TRAnextModel(inst) ((struct sTRAmodel *)((inst)->gen.GENnextModel)) #define TRAinstances(inst) ((TRAinstance *)((inst)->gen.GENinstances)) #define TRAmodName gen.GENmodName } TRAmodel; /* device parameters */ enum { TRA_Z0 = 1, TRA_TD, TRA_NL, TRA_FREQ, TRA_V1, TRA_I1, TRA_V2, TRA_I2, TRA_IC, TRA_RELTOL, TRA_ABSTOL, TRA_POS_NODE1, TRA_NEG_NODE1, TRA_POS_NODE2, TRA_NEG_NODE2, TRA_INPUT1, TRA_INPUT2, TRA_DELAY, TRA_BR_EQ1, TRA_BR_EQ2, TRA_INT_NODE1, TRA_INT_NODE2, }; /* model parameters */ /* device questions */ /* model questions */ #include "traext.h" #endif /*TRA*/ tmpk8ny_4pz/src/spicelib/devices/tra/trainit.h0000644000175000017500000000027213546075722021575 0ustar carstencarsten#ifndef _TRAINIT_H #define _TRAINIT_H extern IFparm TRApTable[ ]; extern char *TRAnames[ ]; extern int TRApTSize; extern int TRAnSize; extern int TRAiSize; extern int TRAmSize; #endif tmpk8ny_4pz/src/spicelib/devices/tra/traext.h0000644000175000017500000000121013546075722021423 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ extern int TRAacLoad(GENmodel*,CKTcircuit*); extern int TRAaccept(CKTcircuit*,GENmodel*); extern int TRAask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int TRAload(GENmodel*,CKTcircuit*); extern int TRAmAsk(CKTcircuit*,GENmodel*,int,IFvalue*); extern int TRAparam(int,IFvalue*,GENinstance*,IFvalue*); extern int TRAsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int TRAunsetup(GENmodel*,CKTcircuit*); extern int TRAtemp(GENmodel*,CKTcircuit*); extern int TRAtrunc(GENmodel*,CKTcircuit*,double*); tmpk8ny_4pz/src/spicelib/devices/tra/traitf.h0000644000175000017500000000025513546075722021415 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_TRA #define DEV_TRA SPICEdev *get_tra_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/tra/traacct.c0000644000175000017500000001310313546075722021534 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "tradefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int TRAaccept(CKTcircuit *ckt, GENmodel *inModel) { TRAmodel *model = (TRAmodel *)inModel; TRAinstance *here; int i=0,j; double v1,v2,v3,v4; double v5,v6,d1,d2,d3,d4; double *from,*to; int error; /* loop through all the transmission line models */ for( ; model != NULL; model = TRAnextModel(model)) { /* loop through all the instances of the model */ for (here = TRAinstances(model); here != NULL ; here=TRAnextInstance(here)) { if( (ckt->CKTtime - here->TRAtd) > *(here->TRAdelays+6)) { /* shift! */ for(i=2;iTRAsizeDelay && (ckt->CKTtime - here->TRAtd > *(here->TRAdelays+3*i));i++) { /* loop does it all */ ; } i -= 2; for(j=i;j<=here->TRAsizeDelay;j++) { from = here->TRAdelays + 3*j; to = here->TRAdelays + 3*(j-i); *(to) = *(from); *(to+1) = *(from+1); *(to+2) = *(from+2); } here->TRAsizeDelay -= i; } if(ckt->CKTtime - *(here->TRAdelays+3*here->TRAsizeDelay) > ckt->CKTminBreak) { if(here->TRAallocDelay <= here->TRAsizeDelay) { /* need to grab some more space */ here->TRAallocDelay += 5; here->TRAdelays = TREALLOC(double, here->TRAdelays, (here->TRAallocDelay + 1) * 3); } here->TRAsizeDelay ++; to = (here->TRAdelays +3*here->TRAsizeDelay); *to = ckt->CKTtime; to = (here->TRAdelays+1+3*here->TRAsizeDelay); *to = ( *(ckt->CKTrhsOld + here->TRAposNode2) -*(ckt->CKTrhsOld + here->TRAnegNode2)) + *(ckt->CKTrhsOld + here->TRAbrEq2)* here->TRAimped; *(here->TRAdelays+2+3*here->TRAsizeDelay) = ( *(ckt->CKTrhsOld + here->TRAposNode1) -*(ckt->CKTrhsOld + here->TRAnegNode1)) + *(ckt->CKTrhsOld + here->TRAbrEq1)* here->TRAimped; #ifdef NOTDEF v1 = *(here->TRAdelays+1+3*here->TRAsizeDelay); v2 = *(here->TRAdelays+1+3*(here->TRAsizeDelay-1)); v3 = *(here->TRAdelays+2+3*here->TRAsizeDelay); v4 = *(here->TRAdelays+2+3*(here->TRAsizeDelay-1)); if( (fabs(v1-v2) >= 50*ckt->CKTreltol* MAX(fabs(v1),fabs(v2))+50*ckt->CKTvoltTol) || (fabs(v3-v4) >= 50*ckt->CKTreltol* MAX(fabs(v3),fabs(v4))+50*ckt->CKTvoltTol) ) { /* changing - need to schedule after delay */ /*printf("%s: at %g set for %g and %g\n",here->TRAname, ckt->CKTtime, ckt->CKTtime+here->TRAtd, *(here->TRAdelays+3*here->TRAsizeDelay-3)+ here->TRAtd);*/ error = CKTsetBreak(ckt,ckt->CKTtime+here->TRAtd); if(error) return(error); /* also set for break after PREVIOUS point */ error = CKTsetBreak(ckt, *(here->TRAdelays+3*here->TRAsizeDelay -3) + here->TRAtd); CKTbreakDump(ckt); if(error) return(error); } #else v1 = *(here->TRAdelays+1+3*here->TRAsizeDelay); v2 = *(here->TRAdelays+1+3*(here->TRAsizeDelay-1)); v3 = *(here->TRAdelays+1+3*(here->TRAsizeDelay-2)); v4 = *(here->TRAdelays+2+3*here->TRAsizeDelay); v5 = *(here->TRAdelays+2+3*(here->TRAsizeDelay-1)); v6 = *(here->TRAdelays+2+3*(here->TRAsizeDelay-2)); d1 = (v1-v2)/ckt->CKTdeltaOld[0]; d2 = (v2-v3)/ckt->CKTdeltaOld[1]; d3 = (v4-v5)/ckt->CKTdeltaOld[0]; d4 = (v5-v6)/ckt->CKTdeltaOld[1]; /*printf("%s: at %g derivs are %g, %g and %g, %g\n", here->TRAname,ckt->CKTtime,d1,d2,d3,d4);*/ if( (fabs(d1-d2) >= here->TRAreltol*MAX(fabs(d1),fabs(d2))+ here->TRAabstol) || (fabs(d3-d4) >= here->TRAreltol*MAX(fabs(d3),fabs(d4))+ here->TRAabstol) ) { /* derivitive changing - need to schedule after delay */ /*printf("%s: at %g set for %g\n",here->TRAname, ckt->CKTtime, *(here->TRAdelays+3*here->TRAsizeDelay-3)+here->TRAtd );*/ /*printf("%g, %g, %g -> %g, %g \n",v1,v2,v3,d1,d2);*/ /*printf("%g, %g, %g -> %g, %g \n",v4,v5,v6,d3,d4);*/ /* also set for break after PREVIOUS point */ /*printf("setting break\n");*/ error = CKTsetBreak(ckt, *(here->TRAdelays+3*here->TRAsizeDelay -3) + here->TRAtd); if(error) return(error); } #endif /*NOTDEF*/ } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/tra/traacld.c0000644000175000017500000000452413546075722021534 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "tradefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int TRAacLoad(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current values into the * sparse matrix previously provided */ { TRAmodel *model = (TRAmodel *)inModel; TRAinstance *here; double real; double imag; /* loop through all the transmission line models */ for( ; model != NULL; model = TRAnextModel(model)) { /* loop through all the instances of the model */ for (here = TRAinstances(model); here != NULL ; here=TRAnextInstance(here)) { real = cos(-ckt->CKTomega*here->TRAtd); imag = sin(-ckt->CKTomega*here->TRAtd); *(here->TRApos1Pos1Ptr) += here->TRAconduct; *(here->TRApos1Int1Ptr) -= here->TRAconduct; *(here->TRAneg1Ibr1Ptr) -= 1; *(here->TRApos2Pos2Ptr) += here->TRAconduct; *(here->TRAneg2Ibr2Ptr) -= 1; *(here->TRAint1Pos1Ptr) -= here->TRAconduct; *(here->TRAint1Int1Ptr) += here->TRAconduct; *(here->TRAint1Ibr1Ptr) += 1; *(here->TRAint2Int2Ptr) += here->TRAconduct; *(here->TRAint2Ibr2Ptr) += 1; *(here->TRAibr1Neg1Ptr) -= 1; *(here->TRAibr1Pos2Ptr+0) -= real; *(here->TRAibr1Pos2Ptr+1) -= imag; *(here->TRAibr1Neg2Ptr+0) += real; *(here->TRAibr1Neg2Ptr+1) += imag; *(here->TRAibr1Int1Ptr) += 1; *(here->TRAibr1Ibr2Ptr+0) -= real * here->TRAimped; *(here->TRAibr1Ibr2Ptr+1) -= imag * here->TRAimped; *(here->TRAibr2Pos1Ptr+0) -= real; *(here->TRAibr2Pos1Ptr+1) -= imag; *(here->TRAibr2Neg1Ptr+0) += real; *(here->TRAibr2Neg1Ptr+1) += imag; *(here->TRAibr2Neg2Ptr) -= 1; *(here->TRAibr2Int2Ptr) += 1; *(here->TRAibr2Ibr1Ptr+0) -= real * here->TRAimped; *(here->TRAibr2Ibr1Ptr+1) -= imag * here->TRAimped; *(here->TRApos2Int2Ptr) -= here->TRAconduct; *(here->TRAint2Pos2Ptr) -= here->TRAconduct; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/tra/tra.c0000644000175000017500000000331313546075722020703 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "tradefs.h" #include "ngspice/suffix.h" IFparm TRApTable[] = { /* parameters */ IOPU( "z0", TRA_Z0, IF_REAL , "Characteristic impedance"), IOPUR( "zo", TRA_Z0, IF_REAL , "Characteristic impedance"), IOPAU( "f", TRA_FREQ, IF_REAL , "Frequency"), IOPAU( "td", TRA_TD, IF_REAL , "Transmission delay"), IOPAU( "nl", TRA_NL, IF_REAL , "Normalized length at frequency given"), IOPAU( "v1", TRA_V1, IF_REAL , "Initial voltage at end 1"), IOPAU( "v2", TRA_V2, IF_REAL , "Initial voltage at end 2"), IOPAU( "i1", TRA_I1, IF_REAL , "Initial current at end 1"), IOPAU( "i2", TRA_I2, IF_REAL , "Initial current at end 2"), IP("ic", TRA_IC, IF_REALVEC,"Initial condition vector:v1,i1,v2,i2"), OP("rel", TRA_RELTOL, IF_REAL , "Rel. rate of change of deriv. for bkpt"), OP("abs", TRA_ABSTOL, IF_REAL , "Abs. rate of change of deriv. for bkpt"), OPU( "pos_node1",TRA_POS_NODE1,IF_INTEGER,"Positive node of end 1 of t. line"), OPU( "neg_node1",TRA_NEG_NODE1,IF_INTEGER,"Negative node of end 1 of t. line"), OPU( "pos_node2",TRA_POS_NODE2,IF_INTEGER,"Positive node of end 2 of t. line"), OPU( "neg_node2",TRA_NEG_NODE2,IF_INTEGER,"Negative node of end 2 of t. line"), OPU( "delays",TRA_DELAY, IF_REALVEC, "Delayed values of excitation") }; char *TRAnames[] = { "P1+", "P1-", "P2+", "P2-" }; int TRAnSize = NUMELEMS(TRAnames); int TRApTSize = NUMELEMS(TRApTable); int TRAmPTSize = 0; int TRAiSize = sizeof(TRAinstance); int TRAmSize = sizeof(TRAmodel); tmpk8ny_4pz/src/spicelib/devices/txl/0000755000175000017500000000000013546075722017772 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/txl/txlask.c0000644000175000017500000000160713546075722021450 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 Charles Hough **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "txldefs.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int TXLask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { TXLinstance *fast = (TXLinstance *)inst; NG_IGNORE(select); NG_IGNORE(ckt); switch(which) { case TXL_OUT_NODE: value->iValue = fast->TXLnegNode; return(OK); case TXL_IN_NODE: value->iValue = fast->TXLposNode; return(OK); case TXL_LENGTH: value->rValue = fast->TXLlength; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/txl/Makefile.am0000644000175000017500000000064513546075722022033 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libtxl.la libtxl_la_SOURCES = \ txl.c \ txlacct.c \ txlask.c \ txldefs.h \ txlext.h \ txlfbr.c \ txlinit.h \ txlitf.h \ txlload.c \ txlparam.c \ txlmask.c \ txlmpar.c \ txlsetup.c \ txlinit.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/txl/txlitf.h0000644000175000017500000000031113546075722021450 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 Charles Hough **********/ #ifndef DEV_TXL #define DEV_TXL SPICEdev *get_txl_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/txl/txlinit.h0000644000175000017500000000055713546075722021645 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 Charles Hough **********/ #ifndef _TXLINIT_H #define _TXLINIT_H extern IFparm TXLpTable[ ]; extern IFparm TXLmPTable[ ]; extern int TXLmPTSize; extern int TXLpTSize; extern char *TXLnames[ ]; extern int TXLiSize; extern int TXLmSize; extern int TXLnSize; #endif tmpk8ny_4pz/src/spicelib/devices/txl/txlload.c0000644000175000017500000004050213546075722021606 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 Charles Hough **********/ #include "ngspice/ngspice.h" #include "txldefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" static double ratio[MAX_CP_TX_LINES]; static int update_cnv_txl(TXLine*, double); static VI_list_txl *new_vi_txl(void); static void free_vi_txl(VI_list_txl*); static int add_new_vi_txl(TXLinstance*, CKTcircuit*, int); static int get_pvs_vi_txl(int, int, TXLine*, double*, double*, double*, double*, double*, double*, double*, double*); static int right_consts_txl(TXLine*, int, int, double, double, int, int, CKTcircuit*); static int update_delayed_cnv_txl(TXLine*, double); static int multC(double, double, double, double, double*, double*); static int expC(double, double, double, double*, double*); static void copy_tx(TXLine *, TXLine *); /*ARGSUSED*/ int TXLload(GENmodel *inModel, CKTcircuit *ckt) { TXLmodel *model = (TXLmodel *)inModel; TXLinstance *here; TXLine *tx, *tx2; int k, l; int time, time2; double h, h1, f; int hint; double hf; NODE *nd; double v, v1, g; int cond1; CKTnode *node; VI_list_txl *vi, *vi_before; int i, before, delta; double gmin; /* dc solution */ /* debug printf("before txlload\n"); SMPprint(ckt->CKTmatrix, NULL); */ h = ckt->CKTdelta; h1 = 0.5 * h; time2 = (int) (ckt->CKTtime * 1e12); hint = (int)(h * 1e12); hf = h * 1e12; time = (int) ((ckt->CKTtime - ckt->CKTdelta) * 1e12); cond1= ckt->CKTmode & MODEDC; gmin = 0.1 * ckt->CKTgmin; /* dc solution */ for( ; model != NULL; model = TXLnextModel(model)) { for (here = TXLinstances(model); here != NULL ; here=TXLnextInstance(here)) { tx = here->txline; *here->TXLposPosPtr += gmin; /* dc solution */ *here->TXLnegNegPtr += gmin; *here->TXLnegPosPtr += gmin; *here->TXLposNegPtr += gmin; if (cond1 || tx->vi_head == NULL) continue; if (time < tx->vi_tail->time) { time = tx->vi_tail->time; hint = time2 - time; } vi_before = tx->vi_tail; before = tx->vi_tail->time; if (time > tx->vi_tail->time) { copy_tx(tx, here->txline2); add_new_vi_txl(here, ckt, time); delta = time - before; nd = tx->in_node; v = vi_before->v_i; nd->V = tx->vi_tail->v_i; v1 = nd->V; nd->dv = (v1 - v) / delta; nd = tx->out_node; v = vi_before->v_o; v1 = nd->V = tx->vi_tail->v_o; nd->dv = (v1 - v) / delta; if (tx->lsl) continue; update_cnv_txl(tx, delta); if (tx->ext) update_delayed_cnv_txl(tx, delta); } } } model = (TXLmodel *)inModel; for( ; model != NULL; model = TXLnextModel(model)) { for (here = TXLinstances(model); here != NULL ; here=TXLnextInstance(here)) { tx = here->txline; tx2 = here->txline2; if (!tx->lsl && hf > tx->taul) { fprintf(stderr, "your time step is too large for TXL tau.\n"); /* fprintf(stderr, "please decrease max time step in .tran card.\n"); fprintf(stderr, ".tran tstep tstop tstart tmax.\n"); fprintf(stderr, "make tmax smaller than %e and try again.\n", tx->taul * 1e-12); return (1111); */ fprintf(stderr, "tmax is now set to %e.\n", 0.9 * tx->taul * 1e-12); ckt->CKTmaxStep = 0.9 * tx->taul * 1e-12; } if (cond1) { if (here->TXLlengthgiven) g = model->R * here->TXLlength; else g = model->R * TXLmodPtr(here)->length; *(here->TXLposIbr1Ptr) += 1.0; *(here->TXLnegIbr2Ptr) += 1.0; *(here->TXLibr1Ibr1Ptr) += 1.0; *(here->TXLibr1Ibr2Ptr) += 1.0; *(here->TXLibr2PosPtr) += 1.0; *(here->TXLibr2NegPtr) -= 1.0; *(here->TXLibr2Ibr1Ptr) -= g; continue; } /* dc setup */ if (here->TXLdcGiven == 0 && !cond1) { nd = tx->in_node; for (node = ckt->CKTnodes;node; node = node->next) { if (strcmp(nd->name->id, node->name) == 0) { tx->dc1 = tx2->dc1 = ckt->CKTrhsOld[node->number]; nd->V = tx->dc1; break; } } nd = tx->out_node; for (node = ckt->CKTnodes;node; node = node->next) { if (strcmp(nd->name->id, node->name) == 0) { tx->dc2 = tx2->dc2 = ckt->CKTrhsOld[node->number]; nd->V = tx->dc2; break; } } here->TXLdcGiven = 1; vi = new_vi_txl(); vi->time = 0; vi->i_i = *(ckt->CKTrhsOld + here->TXLibr1); vi->i_o = *(ckt->CKTrhsOld + here->TXLibr2); vi->v_i = tx->dc1; vi->v_o = tx->dc2; for (i = 0; i < 3; i++) { tx->h1_term[i].cnv_i = - tx->dc1 * tx->h1_term[i].c / tx->h1_term[i].x; tx->h1_term[i].cnv_o = - tx->dc2 * tx->h1_term[i].c / tx->h1_term[i].x; } for (i = 0; i < 3; i++) { tx->h2_term[i].cnv_i = 0.0; tx->h2_term[i].cnv_o = 0.0; } for (i = 0; i < 6; i++) { tx->h3_term[i].cnv_i = - tx->dc1 * tx->h3_term[i].c / tx->h3_term[i].x; tx->h3_term[i].cnv_o = - tx->dc2 * tx->h3_term[i].c / tx->h3_term[i].x; } vi->next = NULL; tx->vi_tail = vi; tx->vi_head = vi; here->txline2->vi_tail = vi; here->txline2->vi_head = vi; } /* change 6,6 1/18/93 *(here->TXLibr1Ibr1Ptr) -= 1.0; *(here->TXLibr2Ibr2Ptr) -= 1.0; *(here->TXLposIbr1Ptr) += 1.0; *(here->TXLnegIbr2Ptr) += 1.0; *(here->TXLibr1PosPtr) += tx->sqtCdL + h1 * tx->h1C; *(here->TXLibr2NegPtr) += tx->sqtCdL + h1 * tx->h1C; */ *(here->TXLibr1Ibr1Ptr) = -1.0; *(here->TXLibr2Ibr2Ptr) = -1.0; *(here->TXLposIbr1Ptr) = 1.0; *(here->TXLnegIbr2Ptr) = 1.0; *(here->TXLibr1PosPtr) = tx->sqtCdL + h1 * tx->h1C; *(here->TXLibr2NegPtr) = tx->sqtCdL + h1 * tx->h1C; k = here->TXLibr1; l = here->TXLibr2; copy_tx(tx2, tx); if (right_consts_txl(tx2, time, time2, h, h1, k, l, ckt)) { if (tx->lsl) { f = ratio[0] * tx->h3_aten; *(here->TXLibr1NegPtr) = -f; *(here->TXLibr2PosPtr) = -f; f = ratio[0] * tx->h2_aten; *(here->TXLibr1Ibr2Ptr) = -f; *(here->TXLibr2Ibr1Ptr) = -f; } else { tx->ext = 1; tx->ratio = ratio[0]; if (ratio[0] > 0.0) { f = ratio[0] * (h1 * (tx->h3_term[0].c + tx->h3_term[1].c + tx->h3_term[2].c + tx->h3_term[3].c + tx->h3_term[4].c + tx->h3_term[5].c ) + tx->h3_aten); *(here->TXLibr1NegPtr) = -f; *(here->TXLibr2PosPtr) = -f; f = ratio[0] * (h1 * ( tx->h2_term[0].c + tx->h2_term[1].c + tx->h2_term[2].c ) + tx->h2_aten); *(here->TXLibr1Ibr2Ptr) = -f; *(here->TXLibr2Ibr1Ptr) = -f; } } } else tx->ext = 0; } } if (cond1) return (OK); /* debug printf("after txlload\n"); SMPprint(ckt->CKTmatrix, NULL); */ return(OK); } static void copy_tx(TXLine *new, TXLine *old) { int i; VI_list_txl *temp; new->lsl = old->lsl; new->ext = old->ext; new->ratio = old->ratio; new->taul = old->taul; new->sqtCdL = old->sqtCdL; new->h2_aten = old->h2_aten; new->h3_aten = old->h3_aten; new->h1C = old->h1C; for (i= 0; i < 3; i++) { new->h1e[i] = old->h1e[i]; new->h1_term[i].c = old->h1_term[i].c; new->h1_term[i].x = old->h1_term[i].x; new->h1_term[i].cnv_i = old->h1_term[i].cnv_i; new->h1_term[i].cnv_o = old->h1_term[i].cnv_o; new->h2_term[i].c = old->h2_term[i].c; new->h2_term[i].x = old->h2_term[i].x; new->h2_term[i].cnv_i = old->h2_term[i].cnv_i; new->h2_term[i].cnv_o = old->h2_term[i].cnv_o; } for (i= 0; i < 6; i++) { new->h3_term[i].c = old->h3_term[i].c; new->h3_term[i].x = old->h3_term[i].x; new->h3_term[i].cnv_i = old->h3_term[i].cnv_i; new->h3_term[i].cnv_o = old->h3_term[i].cnv_o; } new->ifImg = old->ifImg; if (new->vi_tail != old->vi_tail) { /* someting wrong */ controlled_exit(0); } while (new->vi_head->time < old->vi_head->time) { temp = new->vi_head; new->vi_head = new->vi_head->next; free_vi_txl(temp); } } static int update_cnv_txl(TXLine *tx, double h) { int i; double ai, bi, ao, bo; double e, t; ai = tx->in_node->V; ao = tx->out_node->V; bi = tx->in_node->dv; bo = tx->out_node->dv; for (i = 0; i < 3; i++) { TERM *tm; tm = &(tx->h1_term[i]); e = tx->h1e[i]; t = tm->c / tm->x; bi *= t; bo *= t; tm->cnv_i = (tm->cnv_i - bi*h) * e + (e - 1.0)*(ai*t + 1.0e+12*bi/tm->x); tm->cnv_o = (tm->cnv_o - bo*h) * e + (e - 1.0)*(ao*t + 1.0e+12*bo/tm->x); } return (1); } static VI_list_txl *new_vi_txl(void) { VI_list_txl *q; if (pool_vi_txl) { q = pool_vi_txl; pool_vi_txl = pool_vi_txl->pool; return(q); } else return(TMALLOC(VI_list_txl, 1)); } static void free_vi_txl(VI_list_txl *q) { q->pool = pool_vi_txl; pool_vi_txl = q; } static int add_new_vi_txl(TXLinstance *here, CKTcircuit *ckt, int time) { VI_list_txl *vi; TXLine *tx, *tx2; tx = here->txline; tx2 = here->txline2; vi = new_vi_txl(); vi->time = time; tx->vi_tail->next = vi; tx2->vi_tail->next = vi; vi->next = NULL; tx->vi_tail = vi; tx2->vi_tail = vi; vi->v_i = *(ckt->CKTrhsOld + here->TXLposNode); vi->v_o = *(ckt->CKTrhsOld + here->TXLnegNode); vi->i_i = *(ckt->CKTrhsOld + here->TXLibr1); vi->i_o = *(ckt->CKTrhsOld + here->TXLibr2); return(1); } static int get_pvs_vi_txl(int t1, int t2, TXLine *tx, double *v1_i, double *v2_i, double *i1_i, double *i2_i, double *v1_o, double *v2_o, double *i1_o, double *i2_o) { double ta, tb; VI_list_txl *vi, *vi1; double f; int ext = 0; ta = t1 - tx->taul; tb = t2 - tx->taul; if (tb <= 0) { *v1_i = *v2_i = tx->dc1; *v2_o = *v1_o = tx->dc2; *i1_i = *i2_i = *i1_o = *i2_o = 0; return(ext); } if (ta <= 0) { *i1_i = *i1_o = 0.0; *v1_i = tx->dc1; *v1_o = tx->dc2; vi1 = tx->vi_head; vi = vi1->next; } else { vi1 = tx->vi_head; for (vi = vi1->next; vi->time < ta; vi = vi->next) { /* free_vi_txl(vi1); */ vi1 = vi; } f = (ta - vi1->time) / (vi->time - vi1->time); *v1_i = vi1->v_i + f * (vi->v_i - vi1->v_i); *v1_o = vi1->v_o + f * (vi->v_o - vi1->v_o); *i1_i = vi1->i_i + f * (vi->i_i - vi1->i_i); *i1_o = vi1->i_o + f * (vi->i_o - vi1->i_o); tx->vi_head = vi1; } if (tb > t1) { /* fprintf(stderr, "pvs: time = %d\n", t2); */ ext = 1; /* f = tb - t1; *v2_i = tx->in_node->V + tx->in_node->dv * f; *v2_o = tx->out_node->V + tx->out_node->dv * f; if (vi) { for (; vi->time != t1; vi = vi->next) vi1 = vi; f /= (double) (t1 - vi1->time); *i2_i = vi->i_i + f * (vi->i_i - vi1->i_i); *i2_o = vi->i_o + f * (vi->i_o - vi1->i_o); } else { *i2_i = vi1->i_i; *i2_o = vi1->i_o; } */ ratio[0] = f = (tb - t1) / (t2 - t1); if (vi) for (; vi->time != t1; vi = vi->next) ; else vi = vi1; f = 1 - f; *v2_i = vi->v_i * f; *v2_o = vi->v_o * f; *i2_i = vi->i_i * f; *i2_o = vi->i_o * f; } else { for (; vi->time < tb; vi = vi->next) vi1 = vi; f = (tb - vi1->time) / (vi->time - vi1->time); *v2_i = vi1->v_i + f * (vi->v_i - vi1->v_i); *v2_o = vi1->v_o + f * (vi->v_o - vi1->v_o); *i2_i = vi1->i_i + f * (vi->i_i - vi1->i_i); *i2_o = vi1->i_o + f * (vi->i_o - vi1->i_o); } return(ext); } static int right_consts_txl(TXLine *tx, int t, int time, double h, double h1, int l1, int l2, CKTcircuit *ckt) /*** h1 = 0.5 * h ***/ { int i; double ff=0.0, gg=0.0, e; double v1_i, v2_i, i1_i, i2_i; double v1_o, v2_o, i1_o, i2_o; int ext; if (! tx->lsl) { double ff1=0.0; for (i = 0; i < 3; i++) { tx->h1e[i] = e = exp(tx->h1_term[i].x * h); ff1 -= tx->h1_term[i].c * e; ff -= tx->h1_term[i].cnv_i * e; gg -= tx->h1_term[i].cnv_o * e; } ff += ff1 * h1 * tx->in_node->V; gg += ff1 * h1 * tx->out_node->V; } ext = get_pvs_vi_txl(t, time, tx, &v1_i, &v2_i, &i1_i, &i2_i, &v1_o, &v2_o, &i1_o, &i2_o); if (tx->lsl) { ff = tx->h3_aten * v2_o + tx->h2_aten * i2_o; gg = tx->h3_aten * v2_i + tx->h2_aten * i2_i; } else { if (tx->ifImg) { double a, b, er, ei, a1, b1, a2, b2; for (i = 0; i < 4; i++) { TERM *tm; tm = &(tx->h3_term[i]); e = exp(tm->x * h); tm->cnv_i = tm->cnv_i * e + h1 * tm->c * (v1_i * e + v2_i); tm->cnv_o = tm->cnv_o * e + h1 * tm->c * (v1_o * e + v2_o); } expC(tx->h3_term[4].x, tx->h3_term[5].x, h, &er, &ei); a2 = h1 * tx->h3_term[4].c; b2 = h1 * tx->h3_term[5].c; a = tx->h3_term[4].cnv_i; b = tx->h3_term[5].cnv_i; multC(a, b, er, ei, &a, &b); multC(a2, b2, v1_i * er + v2_i, v1_i * ei, &a1, &b1); tx->h3_term[4].cnv_i = a + a1; tx->h3_term[5].cnv_i = b + b1; a = tx->h3_term[4].cnv_o; b = tx->h3_term[5].cnv_o; multC(a, b, er, ei, &a, &b); multC(a2, b2, v1_o * er + v2_o, v1_o * ei, &a1, &b1); tx->h3_term[4].cnv_o = a + a1; tx->h3_term[5].cnv_o = b + b1; ff += tx->h3_aten * v2_o; gg += tx->h3_aten * v2_i; for (i = 0; i < 5; i++) { ff += tx->h3_term[i].cnv_o; gg += tx->h3_term[i].cnv_i; } ff += tx->h3_term[4].cnv_o; gg += tx->h3_term[4].cnv_i; { TERM *tm; tm = &(tx->h2_term[0]); e = exp(tm->x * h); tm->cnv_i = tm->cnv_i * e + h1 * tm->c * (i1_i * e + i2_i); tm->cnv_o = tm->cnv_o * e + h1 * tm->c * (i1_o * e + i2_o); } expC(tx->h2_term[1].x, tx->h2_term[2].x, h, &er, &ei); a2 = h1 * tx->h2_term[1].c; b2 = h1 * tx->h2_term[2].c; a = tx->h2_term[1].cnv_i; b = tx->h2_term[2].cnv_i; multC(a, b, er, ei, &a, &b); multC(a2, b2, i1_i * er + i2_i, i1_i * ei, &a1, &b1); tx->h2_term[1].cnv_i = a + a1; tx->h2_term[2].cnv_i = b + b1; a = tx->h2_term[1].cnv_o; b = tx->h2_term[2].cnv_o; multC(a, b, er, ei, &a, &b); multC(a2, b2, i1_o * er + i2_o, i1_o * ei, &a1, &b1); tx->h2_term[1].cnv_o = a + a1; tx->h2_term[2].cnv_o = b + b1; ff += tx->h2_aten * i2_o + tx->h2_term[0].cnv_o + 2.0 * tx->h2_term[1].cnv_o; gg += tx->h2_aten * i2_i + tx->h2_term[0].cnv_i + 2.0 * tx->h2_term[1].cnv_i; } else { for (i = 0; i < 6; i++) { TERM *tm; tm = &(tx->h3_term[i]); e = exp(tm->x * h); tm->cnv_i = tm->cnv_i * e + h1 * tm->c * (v1_i * e + v2_i); tm->cnv_o = tm->cnv_o * e + h1 * tm->c * (v1_o * e + v2_o); } ff += tx->h3_aten * v2_o; gg += tx->h3_aten * v2_i; for (i = 0; i < 6; i++) { ff += tx->h3_term[i].cnv_o; gg += tx->h3_term[i].cnv_i; } for (i = 0; i < 3; i++) { TERM *tm; tm = &(tx->h2_term[i]); e = exp(tm->x * h); tm->cnv_i = tm->cnv_i * e + h1 * tm->c * (i1_i * e + i2_i); tm->cnv_o = tm->cnv_o * e + h1 * tm->c * (i1_o * e + i2_o); } ff += tx->h2_aten * i2_o; gg += tx->h2_aten * i2_i; for (i = 0; i < 3; i++) { ff += tx->h2_term[i].cnv_o; gg += tx->h2_term[i].cnv_i; } } } *(ckt->CKTrhs + l1) = ff; *(ckt->CKTrhs + l2) = gg; return(ext); } static int update_delayed_cnv_txl(TXLine *tx, double h) { double ratio; double f; VI_list_txl *vi; TERM *tms; h *= 0.5e-12; ratio = tx->ratio; vi = tx->vi_tail; if (ratio > 0.0) { tms = tx->h3_term; f = h * ratio * vi->v_i; tms[0].cnv_i += f * tms[0].c; tms[1].cnv_i += f * tms[1].c; tms[2].cnv_i += f * tms[2].c; tms[3].cnv_i += f * tms[3].c; tms[4].cnv_i += f * tms[4].c; tms[5].cnv_i += f * tms[5].c; f = h * ratio * vi->v_o; tms[0].cnv_o += f * tms[0].c; tms[1].cnv_o += f * tms[1].c; tms[2].cnv_o += f * tms[2].c; tms[3].cnv_o += f * tms[3].c; tms[4].cnv_o += f * tms[4].c; tms[5].cnv_o += f * tms[5].c; tms = tx->h2_term; f = h * ratio * vi->i_i; tms[0].cnv_i += f * tms[0].c; tms[1].cnv_i += f * tms[1].c; tms[2].cnv_i += f * tms[2].c; f = h * ratio * vi->i_o; tms[0].cnv_o += f * tms[0].c; tms[1].cnv_o += f * tms[1].c; tms[2].cnv_o += f * tms[2].c; } return(1); } static int expC(double ar, double ai, double h, double *cr, double *ci) { double e, cs, si; e = exp(ar * h); cs = cos(ai * h); si = sin(ai * h); *cr = e * cs; *ci = e * si; return(1); } static int multC(double ar, double ai, double br, double bi, double *cr, double *ci) { register double tp; tp = ar*br - ai*bi; *ci = ar*bi + ai*br; *cr = tp; return (1); } tmpk8ny_4pz/src/spicelib/devices/txl/txlfbr.c0000644000175000017500000000166513546075722021447 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 Charles Hough **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "txldefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int TXLfindBr(CKTcircuit *ckt, GENmodel *inModel, IFuid name) { TXLmodel *model = (TXLmodel *)inModel; TXLinstance *here; int error; CKTnode *tmp; for( ; model != NULL; model = TXLnextModel(model)) { for (here = TXLinstances(model); here != NULL; here = TXLnextInstance(here)) { if(here->TXLname == name) { if(here->TXLbranch == 0) { error = CKTmkCur(ckt,&tmp,here->TXLname,"branch"); if(error) return(error); here->TXLbranch = tmp->number; } return(here->TXLbranch); } } } return(0); } tmpk8ny_4pz/src/spicelib/devices/txl/txlmpar.c0000644000175000017500000000211213546075722021621 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 Charles Hough **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "txldefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int TXLmParam(int param, IFvalue *value, GENmodel *inModel) { register TXLmodel *model = (TXLmodel *)inModel; switch(param) { case TXL_R: model->R = value->rValue; model->Rgiven = TRUE; break; case TXL_L: model->L = value->rValue; model->Lgiven = TRUE; break; case TXL_G: model->G = value->rValue; model->Ggiven = TRUE; break; case TXL_C: model->C = value->rValue; model->Cgiven = TRUE; break; case TXL_length: model->length = value->rValue; model->lengthgiven = TRUE; break; case TXL_MOD_R: break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/txl/txldefs.h0000644000175000017500000000447513546075722021626 0ustar carstencarsten#ifndef TXL #define TXL #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" #include "ngspice/swec.h" /* information used to describe a single instance */ typedef struct sTXLinstance { struct GENinstance gen; #define TXLmodPtr(inst) ((struct sTXLmodel *)((inst)->gen.GENmodPtr)) #define TXLnextInstance(inst) ((struct sTXLinstance *)((inst)->gen.GENnextInstance)) #define TXLname gen.GENname #define TXLstates gen.GENstate int TXLposNode; int TXLnegNode; double TXLlength; int TXLibr1; int TXLibr2; TXLine *txline; /* pointer to SWEC txline type */ TXLine *txline2; /* pointer to SWEC txline type. temporary storage */ char *in_node_name; char *out_node_name; int TXLbranch; /* unused */ double *TXLposPosPtr; double *TXLposNegPtr; double *TXLnegPosPtr; double *TXLnegNegPtr; double *TXLibr1PosPtr; double *TXLibr2NegPtr; double *TXLposIbr1Ptr; double *TXLnegIbr2Ptr; double *TXLibr1NegPtr; double *TXLibr2PosPtr; double *TXLibr1Ibr1Ptr; double *TXLibr2Ibr2Ptr; double *TXLibr1Ibr2Ptr; double *TXLibr2Ibr1Ptr; unsigned TXLibr1Given : 1; unsigned TXLibr2Given : 1; unsigned TXLdcGiven : 1; unsigned TXLlengthgiven : 1; /* flag to indicate that instance parameter len is specified */ } TXLinstance ; /* per model data */ typedef struct sTXLmodel { /* model structure for a txl */ struct GENmodel gen; #define TXLmodType gen.GENmodType #define TXLnextModel(inst) ((struct sTXLmodel *)((inst)->gen.GENnextModel)) #define TXLinstances(inst) ((TXLinstance *)((inst)->gen.GENinstances)) #define TXLmodName gen.GENmodName double R; double L; double G; double C; double length; unsigned Rgiven : 1; /* flag to indicate R was specified */ unsigned Lgiven : 1; /* flag to indicate L was specified */ unsigned Ggiven : 1; /* flag to indicate G was specified */ unsigned Cgiven : 1; /* flag to indicate C was specified */ unsigned lengthgiven : 1; /* flag to indicate length was specified */ } TXLmodel; /* instance parameters */ enum { TXL_IN_NODE = 1, TXL_OUT_NODE, TXL_LENGTH, }; /* model parameters */ enum { TXL_R = 101, TXL_C, TXL_G, TXL_L, TXL_length, TXL_MOD_R, }; #include "txlext.h" extern VI_list_txl *pool_vi_txl; #endif /*TXL*/ tmpk8ny_4pz/src/spicelib/devices/txl/txlacct.c0000644000175000017500000000316513546075722021605 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 Charles Hough **********/ #include "ngspice/ngspice.h" #include "ngspice/fteext.h" #include "ngspice/cktdefs.h" #include "txldefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int TXLaccept(CKTcircuit *ckt, GENmodel *inModel) /* set up the breakpoint table. */ { TXLmodel *model = (TXLmodel *)inModel; TXLinstance *here; int hint; double h, v, v1; NODE *nd; TXLine *tx; /* loop through all the voltage source models */ for( ; model != NULL; model = TXLnextModel(model)) { /* loop through all the instances of the model */ for (here = TXLinstances(model); here != NULL ; here=TXLnextInstance(here)) { h = ckt->CKTdelta; hint = (int) (h * 1e12); if (hint != 0) { tx = here->txline; nd = tx->in_node; if (nd->dvtag == 0) { v = nd->V; v1 = nd->V = *(ckt->CKTrhs + here->TXLposNode); nd->dv = (v1 - v) / hint; nd->dvtag = 1; } nd = tx->out_node; if (nd->dvtag == 0) { v = nd->V; v1 = nd->V = *(ckt->CKTrhs + here->TXLnegNode); nd->dv = (v1 - v) / hint; nd->dvtag = 1; } } else { /* can't happen. */ printf("zero h detected\n"); controlled_exit(1); } } } model = (TXLmodel *)inModel; for( ; model != NULL; model = TXLnextModel(model)) { for (here = TXLinstances(model); here != NULL ; here=TXLnextInstance(here)) { nd = here->txline->in_node; nd->dvtag = 0; nd = here->txline->out_node; nd->dvtag = 0; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/txl/txlsetup.c0000644000175000017500000006472213546075722022041 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 Charles Hough **********/ #include "ngspice/ngspice.h" #include "ngspice/fteext.h" #include "ngspice/smpdefs.h" #include "txldefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" static int ReadTxL(TXLinstance*, CKTcircuit*); /*static int multC();*/ static int main_pade(double, double, double, double, double, TXLine*); static int mac(double, double, double*, double*, double*, double*, double*); /*static int divC();*/ static int div_C(double, double, double, double, double*, double*); static int div3(double, double, double, double, double*, double*); /*static double approx1();*/ /*static double approx2();*/ static int find_roots(double, double, double, double*, double*, double*); /*static double f3();*/ /*static double f2();*/ /*static int expC();*/ /*static double exp_approx1();*/ /*static double exp_approx2();*/ static int exp_pade(double, double, double, double, double, TXLine*); /*static int exp_div3();*/ static int exp_find_roots(double, double, double, double*, double*, double* ); static double eval2(double, double, double, double); static int get_c(double, double, double, double, double, double, double, double*, double*); static int get_h3(TXLine*); static int Gaussian_Elimination2(int); static int Gaussian_Elimination1(int); static int pade(double); static int update_h1C_c(TXLine *); static void y_pade(double, double, double, double, TXLine*); static double root3(double, double, double, double); static NDnamePt insert_ND(char*, NDnamePt*); static NODE *insert_node(char*); static NODE *NEW_node(void); /*static VI_list_txl *new_vi_txl();*/ NODE *node_tab = NULL; NDnamePt ndn_btree = NULL; VI_list_txl *pool_vi_txl = NULL; /* pade.c */ /** static double xx1, xx2, xx3, xx4, xx5, xx6; static double cc1, cc2, cc3, cc4, cc5, cc6; **/ /* y.c */ static double sqtCdL; static double b1, b2, b3, b4, b5; static double p1, p2, p3, q1, q2, q3; static double c1, c2, c3, x1, x2, x3; static double A[3][4]; /* exp.c */ static double RG, tau, RC, GL; static double a0, a1, a2, a3, a4, a5; static double ep1, ep2, ep3, eq1, eq2, eq3; static double ec1, ec2, ec3, ex1, ex2, ex3; static int ifImg; static double AA[3][4]; #define epsi 1.0e-16 #define epsi2 1.0e-28 /* ARGSUSED */ int TXLsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit*ckt, int *state) { TXLmodel *model = (TXLmodel *)inModel; TXLinstance *here; CKTnode *tmp; int error; NG_IGNORE(state); /* loop through all the models */ for( ; model != NULL; model = TXLnextModel(model)) { if (!model->Rgiven) { SPfrontEnd->IFerrorf (ERR_FATAL, "model %s: lossy line series resistance not given", model->TXLmodName); return(E_BADPARM); } if (!model->Ggiven) { SPfrontEnd->IFerrorf (ERR_FATAL, "model %s: lossy line parallel conductance not given", model->TXLmodName); return(E_BADPARM); } if (!model->Lgiven) { SPfrontEnd->IFerrorf (ERR_FATAL, "model %s: lossy line series inductance not given", model->TXLmodName); return (E_BADPARM); } if (!model->Cgiven) { SPfrontEnd->IFerrorf (ERR_FATAL, "model %s: lossy line parallel capacitance not given", model->TXLmodName); return (E_BADPARM); } if (!model->lengthgiven) { SPfrontEnd->IFerrorf (ERR_FATAL, "model %s: lossy line length must be given", model->TXLmodName); return (E_BADPARM); } /* loop through all the instances of the model */ for (here = TXLinstances(model); here != NULL ; here=TXLnextInstance(here)) { /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) if (! here->TXLibr1Given) { error = CKTmkCur(ckt, &tmp, here->TXLname, "branch1"); if (error) return (error); here->TXLibr1 = tmp->number; } if (! here->TXLibr2Given) { error = CKTmkCur(ckt, &tmp, here->TXLname, "branch2"); if (error) return (error); here->TXLibr2 = tmp->number; } TSTALLOC(TXLposPosPtr, TXLposNode, TXLposNode); TSTALLOC(TXLposNegPtr, TXLposNode, TXLnegNode); TSTALLOC(TXLnegPosPtr, TXLnegNode, TXLposNode); TSTALLOC(TXLnegNegPtr, TXLnegNode, TXLnegNode); TSTALLOC(TXLibr1PosPtr, TXLibr1, TXLposNode); TSTALLOC(TXLibr2NegPtr, TXLibr2, TXLnegNode); TSTALLOC(TXLnegIbr2Ptr, TXLnegNode, TXLibr2); TSTALLOC(TXLposIbr1Ptr, TXLposNode, TXLibr1); TSTALLOC(TXLibr1Ibr1Ptr, TXLibr1, TXLibr1); TSTALLOC(TXLibr2Ibr2Ptr, TXLibr2, TXLibr2); TSTALLOC(TXLibr1NegPtr, TXLibr1, TXLnegNode); TSTALLOC(TXLibr2PosPtr, TXLibr2, TXLposNode); TSTALLOC(TXLibr1Ibr2Ptr, TXLibr1, TXLibr2); TSTALLOC(TXLibr2Ibr1Ptr, TXLibr2, TXLibr1); here->in_node_name = CKTnodName(ckt,here->TXLposNode); here->out_node_name = CKTnodName(ckt,here->TXLnegNode); ReadTxL(here, ckt); } } return(OK); } int TXLunsetup(GENmodel *inModel, CKTcircuit *ckt) { TXLmodel *model; TXLinstance *here; for (model = (TXLmodel *) inModel; model != NULL; model = TXLnextModel(model)) { for (here = TXLinstances(model); here != NULL; here = TXLnextInstance(here)) { if (here->TXLibr2) { CKTdltNNum(ckt, here->TXLibr2); here->TXLibr2 = 0; } if (here->TXLibr1) { CKTdltNNum(ckt, here->TXLibr1); here->TXLibr1 = 0; } here->TXLdcGiven=0; } } return OK; } /*** static VI_list_txl *new_vi_txl(void) { VI_list_txl *q; if (pool_vi_txl) { q = pool_vi_txl; pool_vi_txl = pool_vi_txl->pool; return(q); } else return(TMALLOC(VI_list_txl, 1)); } ***/ static int ReadTxL(TXLinstance *tx, CKTcircuit *ckt) { double R, L, G, C, l; char *p, *n; NODE *nd; ETXLine *et; TXLine *t, *t2; RLINE *line; ERLINE *er; double LL = 1e-12; NG_IGNORE(ckt); p = tx->in_node_name; n = tx->out_node_name; line = TMALLOC(RLINE, 1); er = TMALLOC(ERLINE, 1); et = TMALLOC(ETXLine, 1); t = TMALLOC(TXLine, 1); t2 = TMALLOC(TXLine, 1); tx->txline = t; tx->txline2 = t2; t->newtp = 0; t2->newtp = 0; t->vi_head = t->vi_tail = NULL; nd = insert_node(p); et->link = nd->tptr; nd->tptr = et; et->line = t; t->in_node = nd; t2->in_node = nd; er->link = nd->rlptr; nd->rlptr = er; er->rl = line; line->in_node = nd; et = TMALLOC(ETXLine, 1); nd = insert_node(n); et->link = nd->tptr; nd->tptr = et; et->line = t; t->out_node = nd; t2->out_node = nd; er = TMALLOC(ERLINE, 1); er->link = nd->rlptr; nd->rlptr = er; er->rl = line; line->out_node = nd; t->dc1 = t->dc2 = 0.0; t2->dc1 = t2->dc2 = 0.0; t->lsl = 0; t2->lsl = 0; l = 0.0; R = TXLmodPtr(tx)->R; L = TXLmodPtr(tx)->L; L = MAX(L, LL); C = TXLmodPtr(tx)->C; G = TXLmodPtr(tx)->G; if (tx->TXLlengthgiven == TRUE) l = tx->TXLlength; else l = TXLmodPtr(tx)->length; if (l == 0.0) { fprintf(stderr, "(Error) transmission line of zero length\n"); controlled_exit(EXIT_FAILURE); } else { if (R / L < 5.0e+5) { line->g = 1.0e+2; if (G < 1.0e-2) { t->lsl = 1; /* lossless line */ t->taul = sqrt(C * L) * l * 1.0e12; t->h3_aten = t->sqtCdL = sqrt(C / L); t->h2_aten = 1.0; t->h1C = 0.0; } } else line->g = 1.0 / (R * l); } if (! t->lsl) main_pade(R, L, G, C, l, t); return(1); } /**************************************************************** pade.c : Calculate the Pade Approxximation of Y(s) ****************************************************************/ static int main_pade(double R, double L, double G, double C, double l, TXLine *h) { y_pade(R, L, G, C, h); h->ifImg = exp_pade(R, L, G, C, l, h); get_h3(h); h->taul *= 1.0e12; update_h1C_c(h); return(1); } static int div_C(double ar, double ai, double br, double bi, double *cr, double *ci) { *cr = ar * br + ai * bi; *ci = - ar * bi + ai * br; *cr = *cr / (br * br + bi * bi); *ci = *ci / (br * br + bi * bi); return (1); } /*** static int expC(ar, ai, h, cr, ci) double ar, ai, *cr, *ci; float h; { double e, cs, si; e = exp((double) ar * h); cs = cos((double) ai * h); si = sin((double) ai * h); *cr = e * cs; *ci = e * si; return(1); } ***/ /*** static int multC(ar, ai, br, bi, cr, ci) double ar, ai, br, bi; double *cr, *ci; { *cr = ar*br - ai*bi; *ci = ar*bi + ai*br; return(1); } ***/ /*** static int divC(ar, ai, br, bi, cr, ci) double ar, ai, br, bi; double *cr, *ci; { double t; t = br*br + bi*bi; *cr = (ar*br + ai*bi) / t; *ci = (ai*br - ar*bi) / t; return(1); } ***/ static int get_h3(TXLine *h) { double cc1, cc2, cc3, cc4, cc5, cc6; double xx1, xx2, xx3, xx4, xx5, xx6; h->h3_aten = h->h2_aten * h->sqtCdL; h->h3_term[0].x = xx1 = h->h1_term[0].x; h->h3_term[1].x = xx2 = h->h1_term[1].x; h->h3_term[2].x = xx3 = h->h1_term[2].x; h->h3_term[3].x = xx4 = h->h2_term[0].x; h->h3_term[4].x = xx5 = h->h2_term[1].x; h->h3_term[5].x = xx6 = h->h2_term[2].x; cc1 = h->h1_term[0].c; cc2 = h->h1_term[1].c; cc3 = h->h1_term[2].c; cc4 = h->h2_term[0].c; cc5 = h->h2_term[1].c; cc6 = h->h2_term[2].c; if (h->ifImg) { double r, i; h->h3_term[0].c = cc1 + cc1 * (cc4/(xx1-xx4) + 2.0*(cc5*xx1-xx6*cc6-xx5*cc5)/(xx1*xx1-2.0*xx5*xx1+xx5*xx5+xx6*xx6)); h->h3_term[1].c = cc2 + cc2 * (cc4/(xx2-xx4) + 2.0*(cc5*xx2-xx6*cc6-xx5*cc5)/(xx2*xx2-2.0*xx5*xx2+xx5*xx5+xx6*xx6)); h->h3_term[2].c = cc3 + cc3 * (cc4/(xx3-xx4) + 2.0*(cc5*xx3-xx6*cc6-xx5*cc5)/(xx3*xx3-2.0*xx5*xx3+xx5*xx5+xx6*xx6)); h->h3_term[3].c = cc4 + cc4 * (cc1/(xx4-xx1) + cc2/(xx4-xx2) + cc3/(xx4-xx3)); h->h3_term[4].c = cc5; h->h3_term[5].c = cc6; div_C(cc5, cc6, xx5-xx1, xx6, &r, &i); h->h3_term[4].c += r * cc1; h->h3_term[5].c += i * cc1; div_C(cc5, cc6, xx5-xx2, xx6, &r, &i); h->h3_term[4].c += r * cc2; h->h3_term[5].c += i * cc2; div_C(cc5, cc6, xx5-xx3, xx6, &r, &i); h->h3_term[4].c += r * cc3; h->h3_term[5].c += i * cc3; } else { h->h3_term[0].c = cc1 + cc1 * (cc4/(xx1-xx4) + cc5/(xx1-xx5) + cc6/(xx1-xx6)); h->h3_term[1].c = cc2 + cc2 * (cc4/(xx2-xx4) + cc5/(xx2-xx5) + cc6/(xx2-xx6)); h->h3_term[2].c = cc3 + cc3 * (cc4/(xx3-xx4) + cc5/(xx3-xx5) + cc6/(xx3-xx6)); h->h3_term[3].c = cc4 + cc4 * (cc1/(xx4-xx1) + cc2/(xx4-xx2) + cc3/(xx4-xx3)); h->h3_term[4].c = cc5 + cc5 * (cc1/(xx5-xx1) + cc2/(xx5-xx2) + cc3/(xx5-xx3)); h->h3_term[5].c = cc6 + cc6 * (cc1/(xx6-xx1) + cc2/(xx6-xx2) + cc3/(xx6-xx3)); } return(1); } static int update_h1C_c(TXLine *h) { int i; double d = 0; for (i = 0; i < 3; i++) { h->h1_term[i].c *= h->sqtCdL; d += h->h1_term[i].c; } h->h1C = d; for (i = 0; i < 3; i++) h->h2_term[i].c *= h->h2_aten; for (i = 0; i < 6; i++) h->h3_term[i].c *= h->h3_aten; return(1); } /**************************************************************** y.c : Calculate the Pade Approximation of Y(s) ****************************************************************/ static double eval2(double a, double b, double c, double x) { return(a*x*x + b*x + c); } /*** static double approx1(st) double st; { double s3, s2, s1; s1 = st; s2 = s1 * s1; s3 = s2 * s1; return((s3 + q1*s2 + q2*s1 + q3) / (s3 + p1*s2 + p2*s1 + p3)); } ***/ /*** static double approx2(st) double st; { return(1.0 + c1/(st - x1) + c2/(st - x2) + c3/(st - x3)); } ***/ static void y_pade(double R, double L, double G, double C, TXLine *h) { /* float RdL, GdC; */ double RdL, GdC; sqtCdL = sqrt(C / L); RdL = R / L; GdC = G / C; mac(GdC, RdL, &b1, &b2, &b3, &b4, &b5); A[0][0] = 1.0 - sqrt(GdC / RdL); A[0][1] = b1; A[0][2] = b2; A[0][3] = -b3; A[1][0] = b1; A[1][1] = b2; A[1][2] = b3; A[1][3] = -b4; A[2][0] = b2; A[2][1] = b3; A[2][2] = b4; A[2][3] = -b5; Gaussian_Elimination1(3); p3 = A[0][3]; p2 = A[1][3]; p1 = A[2][3]; q1 = p1 + b1; q2 = b1 * p1 + p2 + b2; q3 = p3 * sqrt(GdC / RdL); find_roots(p1, p2, p3, &x1, &x2, &x3); c1 = eval2(q1 - p1, q2 - p2, q3 - p3, x1) / eval2(3.0, 2.0 * p1, p2, x1); c2 = eval2(q1 - p1, q2 - p2, q3 - p3, x2) / eval2(3.0, 2.0 * p1, p2, x2); c3 = eval2(q1 - p1, q2 - p2, q3 - p3, x3) / eval2(3.0, 2.0 * p1, p2, x3); h->sqtCdL = sqtCdL; h->h1_term[0].c = c1; h->h1_term[1].c = c2; h->h1_term[2].c = c3; h->h1_term[0].x = x1; h->h1_term[1].x = x2; h->h1_term[2].x = x3; } static int Gaussian_Elimination1(int dims) { int i, j, k, dim; double f; int imax; double max; dim = dims; for (i = 0; i < dim; i++) { imax = i; max = ABS(A[i][i]); for (j = i+1; j < dim; j++) if (ABS(A[j][i]) > max) { imax = j; max = ABS(A[j][i]); } if (max < epsi) { fprintf(stderr, " can not choose a pivot \n"); controlled_exit(EXIT_FAILURE); } if (imax != i) for (k = i; k <= dim; k++) { SWAP(double, A[i][k], A[imax][k]); } f = 1.0 / A[i][i]; A[i][i] = 1.0; for (j = i+1; j <= dim; j++) A[i][j] *= f; for (j = 0; j < dim ; j++) { if (i == j) continue; f = A[j][i]; A[j][i] = 0.0; for (k = i+1; k <= dim; k++) A[j][k] -= f * A[i][k]; } } return(1); } static double root3(double a1, double a2, double a3, double x) { double t1, t2; t1 = x*x*x + a1*x*x + a2*x + a3; t2 = 3.0*x*x + 2.0*a1*x + a2; return(x - t1 / t2); } static int div3(double a1, double a2, double a3, double x, double *p1, double *p2) { NG_IGNORE(a2); *p1 = a1 + x; *p2 = - a3 / x; return(1); } /**************************************************************** Calculate the Maclaurin series of F(z) F(z) = sqrt((1+az) / (1+bz)) = 1 + b1 z + b2 z^2 + b3 z^3 + b4 z^4 + b5 z^5 ****************************************************************/ /*** static double f3(double a, double b, double z) { double t4, t3, t2, t1; double t14, t13, t12, t11; double sqt11; t1 = 1 / (1.0 + b * z); t2 = t1 * t1; t3 = t2 * t1; t4 = t3 * t1; t11 = (1.0 + a * z) * t1; t12 = (1.0 + a * z) * t2; t13 = (1.0 + a * z) * t3; t14 = (1.0 + a * z) * t4; sqt11 = sqrt(t11); return( -0.5 * (-2.0*a*b*t2 + 2.0*b*b*t13) * (a*t1 - b*t12) / (t11*sqt11) +3.0/8.0 * (a*t1-b*t12)*(a*t1-b*t12)*(a*t1-b*t12) / (t11*t11*sqt11) +0.5 * (4.0*a*b*b*t3 + 2.0*a*b*b*t3 - 6.0*b*b*b*t14) / sqt11 -0.25 * (-2.0*a*b*t2 + 2.0*b*b*t13) * (a*t1-b*(1.0+a*z)) / (t11*sqt11) ); } ***/ /*** static double f2(a, b, z) double a, b, z; { double t3, t2, t1; double t13, t12, t11; double sqt11; t1 = 1 / (1.0 + b * z); t2 = t1 * t1; t3 = t2 * t1; t11 = (1.0 + a * z) * t1; t12 = (1.0 + a * z) * t2; t13 = (1.0 + a * z) * t3; sqt11 = sqrt(t11); return( -0.25 * (a*t1-b*t12) * (a*t1-b*t12) / (t11*sqt11) +0.5 * (-2.0*a*b*t2 + 2.0*b*b*t13) / sqt11 ); } ***/ static int mac(double at, double bt, double *b1, double *b2, double *b3, double *b4, double *b5) /* float at, bt; */ { double a, b; double y1, y2, y3, y4, y5; a = at; b = bt; y1 = *b1 = 0.5 * (a - b); y2 = 0.5 * (3.0 * b * b - 2.0 * a * b - a * a) * y1 / (a - b); y3 = ((3.0 * b * b + a * a) * y1 * y1 + 0.5 * (3.0 * b * b - 2.0 * a * b - a * a) * y2) / (a - b); y4 = ((3.0 * b * b - 3.0 * a * a) * y1 * y1 * y1 + (9.0 * b * b + 3.0 * a * a) * y1 * y2 + 0.5 * (3.0 * b * b - 2.0 * a * b - a * a) * y3) / (a - b); y5 = (12.0 * a * a * y1 * y1 * y1 * y1 + y1 * y1 * y2 * ( 18.0 * b * b - 18.0 * a * a) + (9.0 * b * b + 3.0 * a * a) * (y2 * y2 + y1 * y3) + (3.0 * b * b + a * a) * y1 * y3 + 0.5 * (3.0 * b * b - 2.0 * a * b - a * a) * y4) / (a - b); *b2 = y2 / 2.0; *b3 = y3 / 6.0; *b4 = y4 / 24.0; *b5 = y5 / 120.0; return(1); } /**************************************************** exp.c ****************************************************/ /*** static double exp_approx1(double st) { double s3, s2, s1; s1 = st; s2 = s1 * s1; s3 = s2 * s1; return(exp((double) - st * tau - a0) * (s3 + eq1*s2 + eq2*s1 + eq3) / (s3 + ep1*s2 + ep2*s1 + ep3)); } ***/ static int get_c(double eq1, double eq2, double eq3, double ep1, double ep2, double a, double b, double *cr, double *ci) { double d, n; d = (3.0*(a*a-b*b)+2.0*ep1*a+ep2)*(3.0*(a*a-b*b)+2.0*ep1*a+ep2); d += (6.0*a*b+2.0*ep1*b)*(6.0*a*b+2.0*ep1*b); n = -(eq1*(a*a-b*b)+eq2*a+eq3)*(6.0*a*b+2.0*ep1*b); n += (2.0*eq1*a*b+eq2*b)*(3.0*(a*a-b*b)+2.0*ep1*a+ep2); *ci = n/d; n = (3.0*(a*a-b*b)+2.0*ep1*a+ep2)*(eq1*(a*a-b*b)+eq2*a+eq3); n += (6.0*a*b+2.0*ep1*b)*(2.0*eq1*a*b+eq2*b); *cr = n/d; return(1); } /*** static double exp_approx2(double st) { if (ifImg) return(1.0 + ec1/(st - ex1) + 2.0*(ec2*(st-ex2)-ec3*ex3) / ((st-ex2)*(st-ex2) + ex3*ex3)); else return(1.0 + ec1/(st - ex1) + ec2/(st - ex2) + ec3/(st - ex3)); } ***/ static int exp_pade(double R, double L, double G, double C, double l, TXLine *h) { double RdL, GdC; tau = sqrt(L*C); RdL = R / L; GdC = G / C; RG = R * G; RC = R * C; GL = G * L; { double a, b, t; double y1, y2, y3, y4, y5, y6; a = RdL; b = GdC; t = tau; /* y1 = 0.5 * (a + b); y2 = a * b - y1 * y1; y3 = - a * b * y1 - 2.0 * y1 * y2 + y1 * y1 * y1; y4 = 2.0 * a * b * y1 * y1 - a * b * y2 - 2.0 * y2 * y2 - 2.0 * y1 * y3 + 5.0 * y1 * y1 * y2 - 2.0 * y1 * y1 * y1 * y1; y5 = 6.0 * a * b * (y1 * y2 - y1 * y1 * y1) - a * b * y3 - 2.0 * y1 * y4 - 6.0 * y2 * y3 + 12.0 * y2 * y2 * y1 + 7.0 * y1 * y1 * y3 -10.0 * y1 * y1 * y1 * y2 - 8.0 * y1 * y1 * y1 * y2 + 6.0 * y1 * y1 * y1 * y1 * y1; y6 = 24.0 * a * b * y1 * y1 * y1 * y1 - 36.0 * a * b * y1 * y1 * y2 + 6.0 * a * b * y2 * y2 + 8.0 * a * b * y1 * y3 - 2.0 * y2 * y4 - 2.0 * y1 * y5 + 2.0 * y1 * y1 * y4 - a * b * y4 -6.0 * y3 * y3 + 44.0 * y1 * y2 * y3 + 60.0 * y1 * y1 * y1 * y1 * y2 -24.0 * y1 * y1 * y1 * y1 * y1 * y1 + 12.0 * y2 * y2 * y2 -54.0 * y1 * y1 * y2 * y2 + 7.0 * y1 * y1 * y4 -24.0 * y1 * y1 * y1 * y3 - 24.0 * y1 * y1 * y2 * y2 -8.0 * y1 * y1 * y1 * y3 + 24.0 * y1 * y1 * y1 * y1 * y2 - 6.0 * y2 * y4; */ y1 = 0.5 * (a + b); y2 = a * b - y1 * y1; y3 = -3.0 * y1 * y2; y4 = -3.0 * y2 * y2 - 4.0 * y1 * y3; y5 = - 5.0 * y1 * y4 -10.0 * y2 * y3; y6 = -10.0 * y3 * y3 - 15.0 * y2 * y4 - 6.0 * y1 * y5; a0 = y1 * t; a1 = y2 * t * t / 2.0; a2 = y3 * t * t * t / 6.0; a3 = y4 * t * t * t * t / 24.0; a4 = y5 * t * t * t * t * t / 120.0; a5 = y6 * t * t * t * t * t * t / 720.0; } a0 *= l; a1 *= l; a2 *= l; a3 *= l; a4 *= l; a5 *= l; pade(l); h->taul = tau * l; h->h2_aten = exp(- a0); h->h2_term[0].c = ec1; h->h2_term[1].c = ec2; h->h2_term[2].c = ec3; h->h2_term[0].x = ex1; h->h2_term[1].x = ex2; h->h2_term[2].x = ex3; return(ifImg); } static int pade(double l) { int i, j; double a[6]; double b[6]; a[1] = -a1; a[2] = -a2; a[3] = -a3; a[4] = -a4; a[5] = -a5; b[0] = 1.0; b[1] = a[1]; for (i = 2; i <= 5; i++) { b[i] = 0.0; for (j = 1; j <= i; j++) b[i] += j * a[j] * b[i-j]; b[i] = b[i] / (double) i; } AA[0][0] = 1.0 - exp(a0 - l * sqrt(RG)); AA[0][1] = b[1]; AA[0][2] = b[2]; AA[0][3] = -b[3]; AA[1][0] = b[1]; AA[1][1] = b[2]; AA[1][2] = b[3]; AA[1][3] = -b[4]; AA[2][0] = b[2]; AA[2][1] = b[3]; AA[2][2] = b[4]; AA[2][3] = -b[5]; Gaussian_Elimination2(3); ep3 = AA[0][3]; ep2 = AA[1][3]; ep1 = AA[2][3]; eq1 = ep1 + b[1]; eq2 = b[1] * ep1 + ep2 + b[2]; eq3 = ep3 * exp(a0 - l * sqrt(RG)); ep3 = ep3 / (tau*tau*tau); ep2 = ep2 / (tau*tau); ep1 = ep1 / tau; eq3 = eq3 / (tau*tau*tau); eq2 = eq2 / (tau*tau); eq1 = eq1 / tau; /* printf("factor = %e\n", exp(-a0)); printf("ep1 = %e ep2 = %e ep3 = %e\n", ep1, ep2, ep3); */ exp_find_roots(ep1, ep2, ep3, &ex1, &ex2, &ex3); /* printf("roots are %e %e %e \n", ex1, ex2, ex3); */ ec1 = eval2(eq1 - ep1, eq2 - ep2, eq3 - ep3, ex1) / eval2(3.0, 2.0 * ep1, ep2, ex1); if (ifImg) get_c(eq1 - ep1, eq2 - ep2, eq3 - ep3, ep1, ep2, ex2, ex3, &ec2, &ec3); else { ec2 = eval2(eq1 - ep1, eq2 - ep2, eq3 - ep3, ex2) / eval2(3.0, 2.0 * ep1, ep2, ex2); ec3 = eval2(eq1 - ep1, eq2 - ep2, eq3 - ep3, ex3) / eval2(3.0, 2.0 * ep1, ep2, ex3); } return (1); } static int Gaussian_Elimination2(int dims) { int i, j, k, dim; double f; double max; int imax; dim = dims; for (i = 0; i < dim; i++) { imax = i; max = ABS(AA[i][i]); for (j = i+1; j < dim; j++) if (ABS(AA[j][i]) > max) { imax = j; max = ABS(AA[j][i]); } if (max < epsi2) { fprintf(stderr, " can not choose a pivot \n"); controlled_exit(EXIT_FAILURE); } if (imax != i) for (k = i; k <= dim; k++) { SWAP(double, AA[i][k], AA[imax][k]); } f = 1.0 / AA[i][i]; AA[i][i] = 1.0; for (j = i+1; j <= dim; j++) AA[i][j] *= f; for (j = 0; j < dim ; j++) { if (i == j) continue; f = AA[j][i]; AA[j][i] = 0.0; for (k = i+1; k <= dim; k++) AA[j][k] -= f * AA[i][k]; } } return(1); } /*** static int exp_div3(double a1, double a2, double a3, double x, double *p1, double *p2) { *p1 = a1 + x; *p2 = - a3 / x; return(1); } ***/ /*** ***/ static int exp_find_roots(double a1, double a2, double a3, double *ex1, double *ex2, double *ex3) { double x, t; double p, q; q = (a1*a1-3.0*a2) / 9.0; p = (2.0*a1*a1*a1-9.0*a1*a2+27.0*a3) / 54.0; t = q*q*q - p*p; if (t >= 0.0) { t = acos(p /(q * sqrt(q))); x = -2.0*sqrt(q)*cos(t / 3.0) - a1/3.0; } else { if (p > 0.0) { t = pow(sqrt(-t)+p, 1.0 / 3.0); x = -(t + q / t) - a1/3.0; } else if (p == 0.0) { x = -a1/3.0; } else { t = pow(sqrt(-t)-p, 1.0 / 3.0); x = (t + q / t) - a1/3.0; } } { double ex1; int i = 0; ex1 = x; for (t = root3(a1, a2, a3, x); ABS(t-x) > 5.0e-4; t = root3(a1, a2, a3, x)) if (++i == 32) { x = ex1; break; } else x = t; } /*** x = a1; for (t = root3(a1, a2, a3, x); ABS(t-x) > epsi2; t = root3(a1, a2, a3, x)) { x = t; i++; if (i > 1000) { x = 0.5 * (x + root3(a1, a2, a3, x)); j++; if (j == 3) break; i = 0; } } ***/ *ex1 = x; div3(a1, a2, a3, x, &a1, &a2); t = a1 * a1 - 4.0 * a2; if (t < 0) { ifImg = 1; printf("***** Two Imaginary Roots.\n"); *ex3 = 0.5 * sqrt(-t); *ex2 = -0.5 * a1; } else { ifImg = 0; t *= 1.0e-16; t = sqrt(t)*1.0e8; if (a1 >= 0.0) *ex2 = t = -0.5 * (a1 + t); else *ex2 = t = -0.5 * (a1 - t); *ex3 = a2 / t; /* *ex2 = 0.5 * (-a1 + t); *ex3 = 0.5 * (-a1 - t); */ } return(1); } static NDnamePt insert_ND(char *name, NDnamePt *ndn) { int cmp; NDnamePt p; if (*ndn == NULL) { p = *ndn = TMALLOC(NDname, 1); p->nd = NULL; p->right = p->left = NULL; strcpy(p->id, name); return(p); } cmp = strcmp((*ndn)->id, name); if (cmp == 0) return(*ndn); else { if (cmp < 0) return(insert_ND(name, &((*ndn)->left))); else return(insert_ND(name, &((*ndn)->right))); } } static NODE *insert_node(char *name) { NDnamePt n; NODE *p; n = insert_ND(name, &ndn_btree); if (n->nd == NULL) { p = NEW_node(); p->name = n; n->nd = p; p->next = node_tab; node_tab = p; return(p); } else return(n->nd); } static NODE *NEW_node(void) { NODE *n; n = TMALLOC(NODE, 1); n->mptr = NULL; n->gptr = NULL; n->cptr = NULL; n->rptr = NULL; n->tptr = NULL; n->cplptr = NULL; n->rlptr = NULL; n->ddptr = NULL; n->cvccsptr = NULL; n->vccsptr = NULL; n->CL = 0.0; n->V = n->dv = 0.0; n->gsum = n->cgsum = 0; n->is = 0; n->tag = 0; n->flag = 0; n->region = NULL; n->ofile = NULL; n->dvtag = 0; return(n); } static int find_roots(double a1, double a2, double a3, double *x1, double *x2, double *x3) { double x, t; double p, q; q = (a1*a1-3.0*a2) / 9.0; p = (2.0*a1*a1*a1-9.0*a1*a2+27.0*a3) / 54.0; t = q*q*q - p*p; if (t >= 0.0) { t = acos(p /(q * sqrt(q))); x = -2.0*sqrt(q)*cos(t / 3.0) - a1/3.0; } else { if (p > 0.0) { t = pow(sqrt(-t)+p, 1.0 / 3.0); x = -(t + q / t) - a1/3.0; } else if (p == 0.0) { x = -a1/3.0; } else { t = pow(sqrt(-t)-p, 1.0 / 3.0); x = (t + q / t) - a1/3.0; } } { double x_backup = x; int i = 0; for (t = root3(a1, a2, a3, x); ABS(t-x) > 5.0e-4; t = root3(a1, a2, a3, x)) if (++i == 32) { x = x_backup; break; } else x = t; } /* x = a1; i = 0; j = 0; for (t = root3(a1, a2, a3, x); ABS(t-x) > epsi; t = root3(a1, a2, a3, x)) { x = t; i++; if (i > 1000) { x = 0.5 * (x + root3(a1, a2, a3, x)); j++; if (j == 3) break; i = 0; } } */ *x1 = x; div3(a1, a2, a3, x, &a1, &a2); t = a1 * a1 - 4.0 * a2; if (t < 0) { printf("***** Two Imaginary Roots in Characteristic Admittance.\n"); controlled_exit(EXIT_FAILURE); } t *= 1.0e-18; t = sqrt(t) * 1.0e9; if (a1 >= 0.0) *x2 = t = -0.5 * (a1 + t); else *x2 = t = -0.5 * (a1 - t); *x3 = a2 / t; /* *x2 = 0.5 * (-a1 + t); *x3 = 0.5 * (-a1 - t); */ return(1); } tmpk8ny_4pz/src/spicelib/devices/txl/txlparam.c0000644000175000017500000000147413546075722021774 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 Charles Hough **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "txldefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int TXLparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { TXLinstance *here = (TXLinstance *)inst; NG_IGNORE(select); switch(param) { case TXL_IN_NODE: here->TXLposNode = value->iValue; break; case TXL_OUT_NODE: here->TXLnegNode = value->iValue; break; case TXL_LENGTH: here->TXLlength = value->rValue; here->TXLlengthgiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/txl/txlinit.c0000644000175000017500000000307313546075722021634 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 Charles Hough **********/ #include "ngspice/config.h" #include "ngspice/devdefs.h" #include "txlitf.h" #include "txlext.h" #include "txlinit.h" SPICEdev TXLinfo = { .DEVpublic = { .name = "TransLine", .description = "Simple Lossy Transmission Line", .terms = &TXLnSize, .numNames = &TXLnSize, .termNames = TXLnames, .numInstanceParms = &TXLpTSize, .instanceParms = TXLpTable, .numModelParms = &TXLmPTSize, .modelParms = TXLmPTable, .flags = 0, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = TXLparam, .DEVmodParam = TXLmParam, .DEVload = TXLload, .DEVsetup = TXLsetup, .DEVunsetup = TXLunsetup, .DEVpzSetup = NULL, .DEVtemperature = NULL, .DEVtrunc = NULL, .DEVfindBranch = NULL, .DEVacLoad = TXLload, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = NULL, .DEVask = TXLask, .DEVmodAsk = TXLmodAsk, .DEVpzLoad = NULL, .DEVconvTest = NULL, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &TXLiSize, .DEVmodSize = &TXLmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_txl_info(void) { return &TXLinfo; } tmpk8ny_4pz/src/spicelib/devices/txl/txlmask.c0000644000175000017500000000201313546075722021615 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 Charles Hough **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "txldefs.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" #include "ngspice/swec.h" /* ARGSUSED */ int TXLmodAsk(CKTcircuit *ckt, GENmodel *inModel, int which, IFvalue *value) { TXLmodel *model = (TXLmodel *)inModel; NG_IGNORE(ckt); switch(which) { case TXL_R: value->rValue = model->R; return(OK); case TXL_C: value->rValue = model->C; return(OK); case TXL_G: value->rValue = model->G; return(OK); case TXL_L: value->rValue = model->L; return(OK); case TXL_length: value->rValue = model->length; return(OK); default: return(E_BADPARM); } } tmpk8ny_4pz/src/spicelib/devices/txl/txlext.h0000644000175000017500000000074413546075722021500 0ustar carstencarsten extern int TXLaccept(CKTcircuit*,GENmodel*); extern int TXLask(CKTcircuit*, GENinstance*, int, IFvalue*, IFvalue*); extern int TXLfindBr(CKTcircuit*, GENmodel*, IFuid); extern int TXLload(GENmodel*,CKTcircuit*); extern int TXLmodAsk(CKTcircuit*, GENmodel*, int, IFvalue*); extern int TXLmParam(int,IFvalue*,GENmodel*); extern int TXLparam(int,IFvalue*,GENinstance*,IFvalue*); extern int TXLsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int TXLunsetup(GENmodel*, CKTcircuit*); tmpk8ny_4pz/src/spicelib/devices/txl/txl.c0000644000175000017500000000222613546075722020747 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 Charles Hough **********/ #include "ngspice/ngspice.h" #include "txldefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "ngspice/suffix.h" IFparm TXLpTable[] = { IP("pos_node", TXL_IN_NODE, IF_INTEGER,"Positive node of txl"), IP("neg_node", TXL_OUT_NODE, IF_INTEGER,"Negative node of txl"), IOP("length", TXL_LENGTH, IF_REAL,"length of line"), }; IFparm TXLmPTable[] = { /* model parameters */ IOP( "r", TXL_R, IF_REAL,"resistance per length"), IOP( "l", TXL_L, IF_REAL,"inductance per length"), IOP( "c", TXL_C, IF_REAL,"capacitance per length"), IOP( "g", TXL_G, IF_REAL,"conductance per length"), IOP( "length", TXL_length, IF_REAL,"length"), IP( "txl", TXL_MOD_R, IF_FLAG,"Device is a txl model"), }; char *TXLnames[] = { "Y+", "Y-" }; int TXLnSize = NUMELEMS(TXLnames); int TXLiSize = sizeof(TXLinstance); int TXLmSize = sizeof(TXLmodel); int TXLmPTSize = NUMELEMS(TXLmPTable); int TXLpTSize = NUMELEMS(TXLpTable); tmpk8ny_4pz/src/spicelib/devices/cap/0000755000175000017500000000000013546075722017726 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/cap/capdefs.h0000644000175000017500000001467113546075722021515 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: September 2003 Paolo Nenzi **********/ #ifndef CAP #define CAP #include "ngspice/ifsim.h" #include "ngspice/complex.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" /* structures used to describe capacitors */ /* information to describe each instance */ typedef struct sCAPinstance { struct GENinstance gen; #define CAPmodPtr(inst) ((struct sCAPmodel *)((inst)->gen.GENmodPtr)) #define CAPnextInstance(inst) ((struct sCAPinstance *)((inst)->gen.GENnextInstance)) #define CAPname gen.GENname #define CAPstate gen.GENstate const int CAPposNode; /* number of positive node of capacitor */ const int CAPnegNode; /* number of negative node of capacitor */ double CAPtemp; /* temperature at which this capacitor operates */ double CAPdtemp; /* delta-temperature of this instance */ double CAPcapac; /* capacitance */ double CAPinitCond; /* initial capacitor voltage if specified */ double CAPwidth; /* width of the capacitor */ double CAPlength; /* length of the capacitor */ double CAPscale; /* scale factor */ double CAPm; /* parallel multiplier */ double CAPtc1; /* first temperature coefficient of capacitors */ double CAPtc2; /* second temperature coefficient of capacitors */ double CAPbv_max; /* Maximum capacitor voltage */ double *CAPposPosPtr; /* pointer to sparse matrix diagonal at * (positive,positive) */ double *CAPnegNegPtr; /* pointer to sparse matrix diagonal at * (negative,negative) */ double *CAPposNegPtr; /* pointer to sparse matrix offdiagonal at * (positive,negative) */ double *CAPnegPosPtr; /* pointer to sparse matrix offdiagonal at * (negative,positive) */ unsigned CAPcapGiven : 1; /* flag to indicate capacitance was specified */ unsigned CAPicGiven : 1; /* flag to indicate init. cond. was specified */ unsigned CAPwidthGiven : 1; /* flag to indicate capacitor width given */ unsigned CAPlengthGiven : 1; /* flag to indicate capacitor length given*/ unsigned CAPtempGiven : 1; /* flag to indicate operating temp given */ unsigned CAPdtempGiven : 1; /* flag to indicate delta temp given */ unsigned CAPscaleGiven : 1; /* flag to indicate scale factor given */ unsigned CAPmGiven : 1; /* flag to indicate parallel multiplier given */ unsigned CAPtc1Given : 1; /* flag indicates tc1 was specified */ unsigned CAPtc2Given : 1; /* flag indicates tc2 was specified */ unsigned CAPbv_maxGiven : 1; /* flags indicates maximum voltage is given */ int CAPsenParmNo; /* parameter # for sensitivity use; set equal to 0 if not a design parameter*/ } CAPinstance ; #define CAPqcap CAPstate /* charge on the capacitor */ #define CAPccap CAPstate+1 /* current through the capacitor */ #define CAPnumStates 2 #define CAPsensxp CAPstate+2 /* charge sensitivities and their derivatives. * +3 for the derivatives - pointer to the * beginning of the array */ #define CAPnumSenStates 2 /* data per model */ typedef struct sCAPmodel { /* model structure for a capacitor */ struct GENmodel gen; #define CAPmodType gen.GENmodType #define CAPnextModel(inst) ((struct sCAPmodel *)((inst)->gen.GENnextModel)) #define CAPinstances(inst) ((CAPinstance *)((inst)->gen.GENinstances)) #define CAPmodName gen.GENmodName double CAPtnom; /* temperature at which capacitance measured */ double CAPtempCoeff1; /* linear temperature coefficient */ double CAPtempCoeff2; /* quadratic temperature coefficient */ double CAPmCap; /* Model default capacitance */ double CAPcj; /* Unit Area Capacitance ( F/ M**2 ) */ double CAPcjsw; /* Unit Length Sidewall Capacitance ( F / M ) */ double CAPdefWidth; /* the default width of a capacitor */ double CAPdefLength; /* the default length of a capacitor */ double CAPnarrow; /* amount by which width are less than drawn */ double CAPshort; /* amount by which length are less than drawn */ double CAPdel; /* amount by which length and width are less than drawn */ double CAPdi; /* Relative dielectric constant */ double CAPthick; /* Insulator thickness */ double CAPbv_max; /* Maximum capacitor voltage */ unsigned CAPmCapGiven : 1; /* flag indicates default capacitance given */ unsigned CAPcjGiven : 1; /* Unit Area Capacitance ( F/ M**2 ) */ unsigned CAPcjswGiven : 1; /* Unit Length Sidewall Capacitance( F/M )*/ unsigned CAPdefWidthGiven : 1; /* flag indicates default width given*/ unsigned CAPdefLengthGiven : 1; /* flag indicates deafult lenght given */ unsigned CAPnarrowGiven : 1; /* flag indicates narrowing factor given */ unsigned CAPshortGiven : 1; /* flag indicates shortening factor given */ unsigned CAPdelGiven : 1; /* flag indicates del factor given */ unsigned CAPtnomGiven : 1; /* flag indicates nominal temp. given */ unsigned CAPtc1Given : 1; /* flag indicates tc1 was specified */ unsigned CAPtc2Given : 1; /* flag indicates tc2 was specified */ unsigned CAPdiGiven : 1; /* flag indicates epsilon-ins given */ unsigned CAPthickGiven : 1; /* flags indicates insulator thickness given */ unsigned CAPbv_maxGiven : 1; /* flags indicates maximum voltage is given */ } CAPmodel; /* device parameters */ enum { CAP_CAP = 1, CAP_IC, CAP_WIDTH, CAP_LENGTH, CAP_CAP_SENS, CAP_CURRENT, CAP_POWER, CAP_TEMP, CAP_DTEMP, CAP_SCALE, CAP_M, CAP_TC1, CAP_TC2, CAP_BV_MAX, }; /* model parameters */ enum { CAP_MOD_CJ = 101, CAP_MOD_CJSW, CAP_MOD_DEFWIDTH, CAP_MOD_C, CAP_MOD_NARROW, CAP_MOD_SHORT, CAP_MOD_DEL, CAP_MOD_TC1, CAP_MOD_TC2, CAP_MOD_TNOM, CAP_MOD_DI, CAP_MOD_THICK, CAP_MOD_CAP, CAP_MOD_DEFLENGTH, CAP_MOD_BV_MAX, }; /* device questions */ enum { CAP_QUEST_SENS_REAL = 201, CAP_QUEST_SENS_IMAG, CAP_QUEST_SENS_MAG, CAP_QUEST_SENS_PH, CAP_QUEST_SENS_CPLX, CAP_QUEST_SENS_DC, }; #include "capext.h" #endif /*CAP*/ tmpk8ny_4pz/src/spicelib/devices/cap/capgetic.c0000644000175000017500000000165313546075722021656 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: September 2003 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "capdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CAPgetic(GENmodel *inModel, CKTcircuit *ckt) { CAPmodel *model = (CAPmodel*)inModel; CAPinstance *here; /* * grab initial conditions out of rhs array. User specified, so use * external nodes to get values */ for( ; model ; model = CAPnextModel(model)) { for(here = CAPinstances(model); here ; here = CAPnextInstance(here)) { if(!here->CAPicGiven) { here->CAPinitCond = *(ckt->CKTrhs + here->CAPposNode) - *(ckt->CKTrhs + here->CAPnegNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/cap/Makefile.am0000644000175000017500000000102013546075722021753 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libcap.la libcap_la_SOURCES = \ cap.c \ capacld.c \ capask.c \ capdefs.h \ capext.h \ capgetic.c \ capinit.c \ capinit.h \ capitf.h \ capload.c \ capmask.c \ capmpar.c \ capparam.c \ cappzld.c \ capsacl.c \ capsetup.c \ capsload.c \ capsoachk.c \ capsprt.c \ capsset.c \ capsupd.c \ captemp.c \ captrunc.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/cap/capsupd.c0000644000175000017500000000461413546075722021536 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: September 2003 Paolo Nenzi **********/ /* */ /* update the charge sensitivities and their derivatives */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "capdefs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CAPsUpdate(GENmodel *inModel, CKTcircuit *ckt) { CAPmodel *model = (CAPmodel*)inModel; CAPinstance *here; int iparmno; double s1; double s2; double sxp; double vcap; double dummy1; double dummy2; SENstruct *info; info = ckt->CKTsenInfo; if((info->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)) return(OK); #ifdef SENSDEBUG printf("CAPsenUpdate\n"); printf("CKTtime = %.5e\n",ckt->CKTtime); #endif /* SENSDEBUG */ /* loop through all the capacitor models */ for( ; model != NULL; model = CAPnextModel(model)) { /* loop through all the instances of the model */ for (here = CAPinstances(model); here != NULL ; here=CAPnextInstance(here)) { vcap = *(ckt->CKTrhsOld+here->CAPposNode) - *(ckt->CKTrhsOld+here->CAPnegNode) ; for(iparmno=1;iparmno<=info->SENparms;iparmno++){ s1 = *(info->SEN_Sap[here->CAPposNode] + iparmno); s2 = *(info->SEN_Sap[here->CAPnegNode] + iparmno); sxp = here->CAPcapac * (s1 - s2); if(iparmno == here->CAPsenParmNo) sxp += vcap; *(ckt->CKTstate0 + here->CAPsensxp + 2*(iparmno - 1)) = sxp; if(ckt->CKTtime == 0){ *(ckt->CKTstate0 + here->CAPsensxp + 2*(iparmno - 1) + 1)=0; } else{ NIintegrate(ckt,&dummy1,&dummy2,here->CAPcapac, (here->CAPsensxp + 2 * (iparmno -1 ))); } #ifdef SENSDEBUG printf("after loading\n"); printf("iparmno = %d\n",iparmno); printf("s1 = %.7e,s2 = %.7e\n",s1,s2); printf("sxp = %.7e,sdotxp = %.7e\n", sxp,*(ckt->CKTstate0 + here->CAPsensxp + 2*(iparmno - 1) + 1)); printf("\n"); #endif /* SENSDEBUG */ } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/cap/capinit.c0000644000175000017500000000312313546075722021520 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "capitf.h" #include "capext.h" #include "capinit.h" SPICEdev CAPinfo = { .DEVpublic = { .name = "Capacitor", .description = "Fixed capacitor", .terms = &CAPnSize, .numNames = &CAPnSize, .termNames = CAPnames, .numInstanceParms = &CAPpTSize, .instanceParms = CAPpTable, .numModelParms = &CAPmPTSize, .modelParms = CAPmPTable, .flags = 0, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = CAPparam, .DEVmodParam = CAPmParam, .DEVload = CAPload, .DEVsetup = CAPsetup, .DEVunsetup = NULL, .DEVpzSetup = CAPsetup, .DEVtemperature = CAPtemp, .DEVtrunc = CAPtrunc, .DEVfindBranch = NULL, .DEVacLoad = CAPacLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = CAPgetic, .DEVask = CAPask, .DEVmodAsk = CAPmAsk, .DEVpzLoad = CAPpzLoad, .DEVconvTest = NULL, .DEVsenSetup = CAPsSetup, .DEVsenLoad = CAPsLoad, .DEVsenUpdate = CAPsUpdate, .DEVsenAcLoad = CAPsAcLoad, .DEVsenPrint = CAPsPrint, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = CAPsoaCheck, .DEVinstSize = &CAPiSize, .DEVmodSize = &CAPmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_cap_info(void) { return &CAPinfo; } tmpk8ny_4pz/src/spicelib/devices/cap/capacld.c0000644000175000017500000000165113546075722021464 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: September 2003 Paolo Nenzi **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "capdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CAPacLoad(GENmodel *inModel, CKTcircuit *ckt) { CAPmodel *model = (CAPmodel*)inModel; double val; double m; CAPinstance *here; for( ; model != NULL; model = CAPnextModel(model)) { for( here = CAPinstances(model); here != NULL; here = CAPnextInstance(here)) { m = here->CAPm; val = ckt->CKTomega * here->CAPcapac; *(here->CAPposPosPtr +1) += m * val; *(here->CAPnegNegPtr +1) += m * val; *(here->CAPposNegPtr +1) -= m * val; *(here->CAPnegPosPtr +1) -= m * val; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/cap/capsetup.c0000644000175000017500000000706513546075722021726 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: September 2003 Paolo Nenzi **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "capdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int CAPsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* load the capacitor structure with those pointers needed later * for fast matrix loading */ { CAPmodel *model = (CAPmodel*)inModel; CAPinstance *here; /* loop through all the capacitor models */ for( ; model != NULL; model = CAPnextModel(model)) { /*Default Value Processing for Model Parameters */ if (!model->CAPmCapGiven) { model->CAPmCap = 0.0; } if (!model->CAPcjswGiven){ model->CAPcjsw = 0.0; } if (!model->CAPdefWidthGiven) { model->CAPdefWidth = 10.e-6; } if (!model->CAPdefLengthGiven) { model->CAPdefLength = 0.0; } if (!model->CAPnarrowGiven) { model->CAPnarrow = 0.0; } if (!model->CAPshortGiven) { model->CAPshort = 0.0; } if (!model->CAPdelGiven) { model->CAPdel = 0.0; } if (!model->CAPtc1Given) { model->CAPtempCoeff1 = 0.0; } if (!model->CAPtc2Given) { model->CAPtempCoeff2 = 0.0; } if (!model->CAPtnomGiven) { model->CAPtnom = ckt->CKTnomTemp; } if (!model->CAPdiGiven) { model->CAPdi = 0.0; } if (!model->CAPthickGiven) { model->CAPthick = 0.0; } if (!model->CAPbv_maxGiven) { model->CAPbv_max = 1e99; } if (!model->CAPcjGiven) { if((model->CAPthickGiven) && (model->CAPthick > 0.0)) { if (model->CAPdiGiven) model->CAPcj = (model->CAPdi * CONSTepsZero) / model->CAPthick; else model->CAPcj = CONSTepsSiO2 / model->CAPthick; } else { model->CAPcj = 0.0; } } if (model->CAPdelGiven) { if (!model->CAPnarrowGiven) model->CAPnarrow = 2 * model->CAPdel; if (!model->CAPshortGiven) model->CAPshort = 2 * model->CAPdel; } /* loop through all the instances of the model */ for (here = CAPinstances(model); here != NULL ; here=CAPnextInstance(here)) { /* Default Value Processing for Capacitor Instance */ if (!here->CAPlengthGiven) { here->CAPlength = 0; } if (!here->CAPbv_maxGiven) { here->CAPbv_max = model->CAPbv_max; } here->CAPqcap = *states; *states += CAPnumStates; if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN) ){ *states += CAPnumSenStates * (ckt->CKTsenInfo->SENparms); } /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(CAPposPosPtr,CAPposNode,CAPposNode); TSTALLOC(CAPnegNegPtr,CAPnegNode,CAPnegNode); TSTALLOC(CAPposNegPtr,CAPposNode,CAPnegNode); TSTALLOC(CAPnegPosPtr,CAPnegNode,CAPposNode); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/cap/capsprt.c0000644000175000017500000000257613546075722021560 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: September 2003 Paolo Nenzi This function is obsolete (was used by an old sensitivity analysis) **********/ /* */ /* Pretty print the sensitivity info for all * the capacitors in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "capdefs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" void CAPsPrint(GENmodel *inModel, CKTcircuit *ckt) { CAPmodel *model = (CAPmodel*)inModel; CAPinstance *here; printf("CAPACITORS-----------------\n"); /* loop through all the capacitor models */ for( ; model != NULL; model = CAPnextModel(model)) { printf("Model name:%s\n",model->CAPmodName); /* loop through all the instances of the model */ for (here = CAPinstances(model); here != NULL ; here=CAPnextInstance(here)) { printf(" Instance name:%s\n",here->CAPname); printf(" Positive, negative nodes: %s, %s\n", CKTnodName(ckt,here->CAPposNode),CKTnodName(ckt,here->CAPnegNode)); printf(" Capacitance: %e",here->CAPcapac); printf(here->CAPcapGiven ? "(specified)\n" : "(default)\n"); printf(" CAPsenParmNo:%d\n",here->CAPsenParmNo); } } } tmpk8ny_4pz/src/spicelib/devices/cap/capload.c0000644000175000017500000000612513546075722021501 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: September 2003 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "capdefs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CAPload(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current capacitance value into the * sparse matrix previously provided */ { CAPmodel *model = (CAPmodel*)inModel; CAPinstance *here; int cond1; double vcap; double geq; double ceq; int error; double m; /* check if capacitors are in the circuit or are open circuited */ if(ckt->CKTmode & (MODETRAN|MODEAC|MODETRANOP) ) { /* evaluate device independent analysis conditions */ cond1= ( ( (ckt->CKTmode & MODEDC) && (ckt->CKTmode & MODEINITJCT) ) || ( ( ckt->CKTmode & MODEUIC) && ( ckt->CKTmode & MODEINITTRAN) ) ) ; /* loop through all the capacitor models */ for( ; model != NULL; model = CAPnextModel(model)) { /* loop through all the instances of the model */ for (here = CAPinstances(model); here != NULL ; here=CAPnextInstance(here)) { m = here->CAPm; if(cond1) { vcap = here->CAPinitCond; } else { vcap = *(ckt->CKTrhsOld+here->CAPposNode) - *(ckt->CKTrhsOld+here->CAPnegNode) ; } if(ckt->CKTmode & (MODETRAN | MODEAC)) { #ifndef PREDICTOR if(ckt->CKTmode & MODEINITPRED) { *(ckt->CKTstate0+here->CAPqcap) = *(ckt->CKTstate1+here->CAPqcap); } else { /* only const caps - no poly's */ #endif /* PREDICTOR */ *(ckt->CKTstate0+here->CAPqcap) = here->CAPcapac * vcap; if((ckt->CKTmode & MODEINITTRAN)) { *(ckt->CKTstate1+here->CAPqcap) = *(ckt->CKTstate0+here->CAPqcap); } #ifndef PREDICTOR } #endif /* PREDICTOR */ error = NIintegrate(ckt,&geq,&ceq,here->CAPcapac, here->CAPqcap); if(error) return(error); if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1+here->CAPccap) = *(ckt->CKTstate0+here->CAPccap); } *(here->CAPposPosPtr) += m * geq; *(here->CAPnegNegPtr) += m * geq; *(here->CAPposNegPtr) -= m * geq; *(here->CAPnegPosPtr) -= m * geq; *(ckt->CKTrhs+here->CAPposNode) -= m * ceq; *(ckt->CKTrhs+here->CAPnegNode) += m * ceq; } else *(ckt->CKTstate0+here->CAPqcap) = here->CAPcapac * vcap; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/cap/captemp.c0000644000175000017500000000552413546075722021531 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: September 2003 Paolo Nenzi **********/ /* */ /* load the capacitor structure with those pointers needed later * for fast matrix loading */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "capdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int CAPtemp(GENmodel *inModel, CKTcircuit *ckt) { CAPmodel *model = (CAPmodel*)inModel; CAPinstance *here; double difference; double factor; double tc1, tc2; /* loop through all the capacitor models */ for( ; model != NULL; model = CAPnextModel(model)) { /* loop through all the instances of the model */ for (here = CAPinstances(model); here != NULL ; here=CAPnextInstance(here)) { /* Default Value Processing for Capacitor Instance */ if(!here->CAPtempGiven) { here->CAPtemp = ckt->CKTtemp; if(!here->CAPdtempGiven) here->CAPdtemp = 0.0; } else { /* CAPtempGiven */ here->CAPdtemp = 0.0; if (here->CAPdtempGiven) printf("%s: Instance temperature specified, dtemp ignored\n", here->CAPname); } if (!here->CAPwidthGiven) { here->CAPwidth = model->CAPdefWidth; } if (!here->CAPscaleGiven) here->CAPscale = 1.0; if (!here->CAPmGiven) here->CAPm = 1.0; if (!here->CAPcapGiven) { /* No instance capacitance given */ if (!model->CAPmCapGiven) { /* No model capacitange given */ here->CAPcapac = model->CAPcj * (here->CAPwidth - model->CAPnarrow) * (here->CAPlength - model->CAPshort) + model->CAPcjsw * 2 * ( (here->CAPlength - model->CAPshort) + (here->CAPwidth - model->CAPnarrow) ); } else { here->CAPcapac = model->CAPmCap; } } difference = (here->CAPtemp + here->CAPdtemp) - model->CAPtnom; /* instance parameters tc1 and tc2 will override model parameters tc1 and tc2 */ if (here->CAPtc1Given) tc1 = here->CAPtc1; /* instance */ else tc1 = model->CAPtempCoeff1; /* model */ if (here->CAPtc2Given) tc2 = here->CAPtc2; else tc2 = model->CAPtempCoeff2; factor = 1.0 + tc1*difference + tc2*difference*difference; here->CAPcapac = here->CAPcapac * factor * here->CAPscale; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/cap/capitf.h0000644000175000017500000000025513546075722021347 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_CAP #define DEV_CAP SPICEdev *get_cap_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/cap/capparam.c0000644000175000017500000000376713546075722021673 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: September 2003 Paolo Nenzi **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "capdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/fteext.h" /* ARGSUSED */ int CAPparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { double scale; CAPinstance *here = (CAPinstance*)inst; NG_IGNORE(select); if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; switch(param) { case CAP_CAP: here->CAPcapac = value->rValue; if (!here->CAPmGiven) here->CAPm = 1.0; here->CAPcapGiven = TRUE; break; case CAP_IC: here->CAPinitCond = value->rValue; here->CAPicGiven = TRUE; break; case CAP_TEMP: here->CAPtemp = value->rValue + CONSTCtoK; here->CAPtempGiven = TRUE; break; case CAP_DTEMP: here->CAPdtemp = value->rValue; here->CAPdtempGiven = TRUE; break; case CAP_WIDTH: here->CAPwidth = value->rValue * scale; here->CAPwidthGiven = TRUE; break; case CAP_LENGTH: here->CAPlength = value->rValue * scale; here->CAPlengthGiven = TRUE; break; case CAP_M: here->CAPm = value->rValue; here->CAPmGiven = TRUE; break; case CAP_SCALE: here->CAPscale = value->rValue; here->CAPscaleGiven = TRUE; break; case CAP_CAP_SENS: here->CAPsenParmNo = value->iValue; break; case CAP_TC1: here->CAPtc1 = value->rValue; here->CAPtc1Given = TRUE; break; case CAP_TC2: here->CAPtc2 = value->rValue; here->CAPtc2Given = TRUE; break; case CAP_BV_MAX: here->CAPbv_max = value->rValue; here->CAPbv_maxGiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/cap/capinit.h0000644000175000017500000000035613546075722021532 0ustar carstencarsten#ifndef _CAPINIT_H #define _CAPINIT_H extern IFparm CAPpTable[ ]; extern IFparm CAPmPTable[ ]; extern char *CAPnames[ ]; extern int CAPpTSize; extern int CAPmPTSize; extern int CAPnSize; extern int CAPiSize; extern int CAPmSize; #endif tmpk8ny_4pz/src/spicelib/devices/cap/capmask.c0000644000175000017500000000336013546075722021513 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: September 2003 Paolo Nenzi **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "capdefs.h" #include "ngspice/sperror.h" #include "ngspice/ifsim.h" #include "ngspice/suffix.h" /* ARGSUSED */ int CAPmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { CAPmodel *here = (CAPmodel*)inst; NG_IGNORE(ckt); switch(which) { case CAP_MOD_TNOM: value->rValue = here->CAPtnom-CONSTCtoK; return(OK); case CAP_MOD_TC1: value->rValue = here->CAPtempCoeff1; return(OK); case CAP_MOD_TC2: value->rValue = here->CAPtempCoeff2; return(OK); case CAP_MOD_CAP: value->rValue = here->CAPmCap; return(OK); case CAP_MOD_CJ: value->rValue = here->CAPcj; return(OK); case CAP_MOD_CJSW: value->rValue = here->CAPcjsw; return(OK); case CAP_MOD_DEFWIDTH: value->rValue = here->CAPdefWidth; return(OK); case CAP_MOD_DEFLENGTH: value->rValue = here->CAPdefLength; return(OK); case CAP_MOD_NARROW: value->rValue = here->CAPnarrow; return(OK); case CAP_MOD_SHORT: value->rValue = here->CAPshort; return(OK); case CAP_MOD_DEL: value->rValue = here->CAPdel; return(OK); case CAP_MOD_DI: value->rValue = here->CAPdi; return(OK); case CAP_MOD_THICK: value->rValue = here->CAPthick; return(OK); case CAP_MOD_BV_MAX: value->rValue = here->CAPbv_max; return(OK); default: return(E_BADPARM); } } tmpk8ny_4pz/src/spicelib/devices/cap/capsload.c0000644000175000017500000000543113546075722021663 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: September 2003 Paolo Nenzi This function is obsolete (was used by an old sensitivity analysis) **********/ /* */ /* actually load the current sensitivity * information into the array previously provided */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "capdefs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CAPsLoad(GENmodel *inModel, CKTcircuit *ckt) { CAPmodel *model = (CAPmodel*)inModel; CAPinstance *here; int iparmno; double vcap; double Osxp; double tag0; double tag1; SENstruct *info; info = ckt->CKTsenInfo; if((info->SENmode == DCSEN) || (ckt->CKTmode&MODETRANOP)) return( OK ); if((info->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)) return(OK); #ifdef SENSDEBUG printf("CKTtime = %.5e\n",ckt->CKTtime); printf("CAPsenload \n"); #endif /* SENSDEBUG */ tag0 = ckt->CKTag[0]; tag1 = ckt->CKTag[1]; if(ckt->CKTorder == 1){ /* Euler Method */ tag1 = 0; /* we treat tag1 as beta */ } /* loop through all the capacitor models */ for( ; model != NULL; model = CAPnextModel(model)) { /* loop through all the instances of the model */ for (here = CAPinstances(model); here != NULL ; here=CAPnextInstance(here)) { #ifdef SENSDEBUG printf("senload instance name %s\n",here->CAPname); printf("pos = %d , neg = %d \n",here->CAPposNode ,here->CAPnegNode); #endif /* SENSDEBUG */ vcap = *(ckt->CKTrhsOld+here->CAPposNode) - *(ckt->CKTrhsOld+here->CAPnegNode) ; for(iparmno=1;iparmno<=info->SENparms;iparmno++){ Osxp = tag0 * *(ckt->CKTstate1 + here->CAPsensxp + 2*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->CAPsensxp + 2*(iparmno - 1) + 1); #ifdef SENSDEBUG printf("iparmno = %d\n",iparmno); printf("sxp = %.5e\n" ,*(ckt->CKTstate1 + here->CAPsensxp + 2*(iparmno-1))); printf("sdotxp = %.5e\n", *(ckt->CKTstate1 + here->CAPsensxp + 2*(iparmno-1)+1)); printf("Osxp = %.5e\n",Osxp); #endif /* SENSDEBUG */ if(iparmno == here->CAPsenParmNo) Osxp = Osxp - tag0 * vcap; #ifdef SENSDEBUG printf("Osxp = %.5e\n",Osxp); #endif /* SENSDEBUG */ *(info->SEN_RHS[here->CAPposNode] + iparmno) += Osxp; *(info->SEN_RHS[here->CAPnegNode] + iparmno) -= Osxp; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/cap/capask.c0000644000175000017500000001351113546075722021335 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: September 2003 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "capdefs.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int CAPask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { CAPinstance *here = (CAPinstance *)inst; double vr; double vi; double sr; double si; double vm; static char *msg = "Current and power not available for ac analysis"; switch(which) { case CAP_TEMP: value->rValue = here->CAPtemp - CONSTCtoK; return(OK); case CAP_DTEMP: value->rValue = here->CAPdtemp; return(OK); case CAP_CAP: value->rValue=here->CAPcapac; value->rValue *= here->CAPm; return(OK); case CAP_IC: value->rValue = here->CAPinitCond; return(OK); case CAP_WIDTH: value->rValue = here->CAPwidth; return(OK); case CAP_LENGTH: value->rValue = here->CAPlength; return(OK); case CAP_SCALE: value->rValue = here->CAPscale; return(OK); case CAP_BV_MAX: value->rValue = here->CAPbv_max; return(OK); case CAP_M: value->rValue = here->CAPm; return(OK); case CAP_TC1: value->rValue = here->CAPtc1; return(OK); case CAP_TC2: value->rValue = here->CAPtc2; return(OK); case CAP_CURRENT: if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "CAPask"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else if (ckt->CKTcurrentAnalysis & (DOING_DCOP | DOING_TRCV)) { value->rValue = 0; } else if (ckt->CKTcurrentAnalysis & DOING_TRAN) { if (ckt->CKTmode & MODETRANOP) { value->rValue = 0; } else { value->rValue = *(ckt->CKTstate0 + here->CAPccap); } } else value->rValue = *(ckt->CKTstate0 + here->CAPccap); value->rValue *= here->CAPm; return(OK); case CAP_POWER: if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "CAPask"; strcpy(errMsg,msg); return(E_ASKPOWER); } else if (ckt->CKTcurrentAnalysis & (DOING_DCOP | DOING_TRCV)) { value->rValue = 0; } else if (ckt->CKTcurrentAnalysis & DOING_TRAN) { if (ckt->CKTmode & MODETRANOP) { value->rValue = 0; } else { value->rValue = *(ckt->CKTstate0 + here->CAPccap) * (*(ckt->CKTrhsOld + here->CAPposNode) - *(ckt->CKTrhsOld + here->CAPnegNode)); } } else value->rValue = *(ckt->CKTstate0 + here->CAPccap) * (*(ckt->CKTrhsOld + here->CAPposNode) - *(ckt->CKTrhsOld + here->CAPnegNode)); value->rValue *= here->CAPm; return(OK); case CAP_QUEST_SENS_DC: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_Sap[select->iValue + 1]+ here->CAPsenParmNo); } return(OK); case CAP_QUEST_SENS_REAL: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->CAPsenParmNo); } return(OK); case CAP_QUEST_SENS_IMAG: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->CAPsenParmNo); } return(OK); case CAP_QUEST_SENS_MAG: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = sqrt(vr*vr + vi*vi); if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->CAPsenParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->CAPsenParmNo); value->rValue = (vr * sr + vi * si)/vm; } return(OK); case CAP_QUEST_SENS_PH: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = vr*vr + vi*vi; if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->CAPsenParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->CAPsenParmNo); value->rValue = (vr * si - vi * sr)/vm; } return(OK); case CAP_QUEST_SENS_CPLX: if(ckt->CKTsenInfo){ value->cValue.real= *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->CAPsenParmNo); value->cValue.imag= *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->CAPsenParmNo); } return(OK); default: return(E_BADPARM); } } tmpk8ny_4pz/src/spicelib/devices/cap/capsset.c0000644000175000017500000000201013546075722021525 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: September 2003 Paolo Nenzi This function is obsolete (was used by an old sensitivity analysis) **********/ /* */ /* loop through all the devices and * allocate parameter #s to design parameters */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "capdefs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CAPsSetup(SENstruct *info, GENmodel *inModel) { CAPmodel *model = (CAPmodel*)inModel; CAPinstance *here; /* loop through all the capacitor models */ for( ; model != NULL; model = CAPnextModel(model)) { /* loop through all the instances of the model */ for (here = CAPinstances(model); here != NULL ; here=CAPnextInstance(here)) { if(here->CAPsenParmNo){ here->CAPsenParmNo = ++(info->SENparms); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/cap/cap.c0000644000175000017500000000747713546075722020654 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: September 2003 - Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "capdefs.h" #include "ngspice/suffix.h" IFparm CAPpTable[] = { /* parameters */ IOPAP("capacitance", CAP_CAP, IF_REAL, "Device capacitance"), IOPAPR("cap", CAP_CAP, IF_REAL, "Device capacitance"), IOPAPR("c", CAP_CAP, IF_REAL, "Device capacitance"), IOPAU("ic", CAP_IC, IF_REAL, "Initial capacitor voltage"), IOPZU("temp", CAP_TEMP, IF_REAL, "Instance operating temperature"), IOPZ( "dtemp", CAP_DTEMP, IF_REAL, "Instance temperature difference from the rest of the circuit"), IOPAU("w", CAP_WIDTH, IF_REAL, "Device width"), IOPAU("l", CAP_LENGTH, IF_REAL, "Device length"), IOPU( "m", CAP_M, IF_REAL, "Parallel multiplier"), IOPU( "tc1", CAP_TC1, IF_REAL, "First order temp. coefficient"), IOPU( "tc2", CAP_TC2, IF_REAL, "Second order temp. coefficient"), IOP( "bv_max", CAP_BV_MAX, IF_REAL, "maximum voltage over capacitance"), IOPU( "scale", CAP_SCALE, IF_REAL, "Scale factor"), IP( "sens_cap", CAP_CAP_SENS, IF_FLAG, "flag to request sens. WRT cap."), OP( "i", CAP_CURRENT, IF_REAL, "Device current"), OP( "p", CAP_POWER, IF_REAL, "Instantaneous device power"), OPU( "sens_dc", CAP_QUEST_SENS_DC, IF_REAL, "dc sensitivity "), OPU( "sens_real", CAP_QUEST_SENS_REAL, IF_REAL, "real part of ac sensitivity"), OPU( "sens_imag", CAP_QUEST_SENS_IMAG, IF_REAL, "dc sens. & imag part of ac sens."), OPU( "sens_mag", CAP_QUEST_SENS_MAG, IF_REAL, "sensitivity of ac magnitude"), OPU( "sens_ph", CAP_QUEST_SENS_PH, IF_REAL, "sensitivity of ac phase"), OPU( "sens_cplx", CAP_QUEST_SENS_CPLX, IF_COMPLEX, "ac sensitivity") }; IFparm CAPmPTable[] = { /* names of model parameters */ IOPA( "cap", CAP_MOD_CAP, IF_REAL, "Model capacitance"), IOPA( "cj", CAP_MOD_CJ, IF_REAL, "Bottom Capacitance per area"), IOPAR( "cox", CAP_MOD_CJ, IF_REAL, "Bottom Capacitance per area"), IOPA( "cjsw", CAP_MOD_CJSW, IF_REAL, "Sidewall capacitance per meter"), IOPAR( "capsw", CAP_MOD_CJSW, IF_REAL, "Sidewall capacitance per meter"), IOPX( "defw", CAP_MOD_DEFWIDTH, IF_REAL, "Default width"), IOPXR( "w", CAP_MOD_DEFWIDTH, IF_REAL, "Default width"), IOPX( "defl", CAP_MOD_DEFLENGTH,IF_REAL, "Default length"), IOPXR( "l", CAP_MOD_DEFLENGTH,IF_REAL, "Default length"), IOPA( "narrow", CAP_MOD_NARROW, IF_REAL, "width correction factor"), IOPA( "short", CAP_MOD_SHORT, IF_REAL, "length correction factor"), IOPA( "del", CAP_MOD_DEL, IF_REAL, "length and width correction factor"), IOPA( "tc1", CAP_MOD_TC1, IF_REAL, "First order temp. coefficient"), IOPA( "tc2", CAP_MOD_TC2, IF_REAL, "Second order temp. coefficient"), IOPXU("tnom", CAP_MOD_TNOM, IF_REAL, "Parameter measurement temperature"), IOPA( "di", CAP_MOD_DI, IF_REAL, "Relative dielectric constant"), IOPA( "thick", CAP_MOD_THICK, IF_REAL, "Insulator thickness"), IOP( "bv_max", CAP_MOD_BV_MAX, IF_REAL, "maximum voltage over capacitance"), IP( "c", CAP_MOD_C, IF_FLAG, "Capacitor model") }; char *CAPnames[] = { "C+", "C-" }; int CAPnSize = NUMELEMS(CAPnames); int CAPpTSize = NUMELEMS(CAPpTable); int CAPmPTSize = NUMELEMS(CAPmPTable); int CAPiSize = sizeof(CAPinstance); int CAPmSize = sizeof(CAPmodel); tmpk8ny_4pz/src/spicelib/devices/cap/cappzld.c0000644000175000017500000000237513546075722021536 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: September 2003 Paolo Nenzi **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "capdefs.h" #include "ngspice/suffix.h" /* ARGSUSED */ int CAPpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { CAPmodel *model = (CAPmodel*)inModel; double val; double m; CAPinstance *here; NG_IGNORE(ckt); for( ; model != NULL; model = CAPnextModel(model)) { for( here = CAPinstances(model);here != NULL; here = CAPnextInstance(here)) { val = here->CAPcapac; m = here->CAPm; *(here->CAPposPosPtr ) += m * val * s->real; *(here->CAPposPosPtr +1) += m * val * s->imag; *(here->CAPnegNegPtr ) += m * val * s->real; *(here->CAPnegNegPtr +1) += m * val * s->imag; *(here->CAPposNegPtr ) -= m * val * s->real; *(here->CAPposNegPtr +1) -= m * val * s->imag; *(here->CAPnegPosPtr ) -= m * val * s->real; *(here->CAPnegPosPtr +1) -= m * val * s->imag; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/cap/captrunc.c0000644000175000017500000000126613546075722021716 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: September 2003 Paolo Nenzi **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "capdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CAPtrunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { CAPmodel *model = (CAPmodel*)inModel; CAPinstance *here; for( ; model!= NULL; model = CAPnextModel(model)) { for(here = CAPinstances(model); here != NULL ; here = CAPnextInstance(here)) { CKTterr(here->CAPqcap,ckt,timeStep); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/cap/capmpar.c0000644000175000017500000000425013546075722021516 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: September 2003 Paolo Nenzi **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "capdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CAPmParam(int param, IFvalue *value, GENmodel *inModel) { CAPmodel *mod = (CAPmodel*)inModel; switch(param) { case CAP_MOD_TNOM: mod->CAPtnom = value->rValue+CONSTCtoK; mod->CAPtnomGiven = TRUE; break; case CAP_MOD_TC1: mod->CAPtempCoeff1 = value->rValue; mod->CAPtc1Given = TRUE; break; case CAP_MOD_TC2: mod->CAPtempCoeff2 = value->rValue; mod->CAPtc2Given = TRUE; break; case CAP_MOD_CAP: mod->CAPmCap = value->rValue; mod->CAPmCapGiven = TRUE; break; case CAP_MOD_CJ : mod->CAPcj = value->rValue; mod->CAPcjGiven = TRUE; break; case CAP_MOD_CJSW : mod->CAPcjsw = value->rValue; mod->CAPcjswGiven = TRUE; break; case CAP_MOD_DEFWIDTH: mod->CAPdefWidth = value->rValue; mod->CAPdefWidthGiven = TRUE; break; case CAP_MOD_DEFLENGTH: mod->CAPdefLength = value->rValue; mod->CAPdefLengthGiven = TRUE; break; case CAP_MOD_NARROW: mod->CAPnarrow = value->rValue; mod->CAPnarrowGiven = TRUE; break; case CAP_MOD_SHORT: mod->CAPshort = value->rValue; mod->CAPshortGiven = TRUE; break; case CAP_MOD_DEL: mod->CAPdel = value->rValue; mod->CAPdelGiven = TRUE; break; case CAP_MOD_DI: mod->CAPdi = value->rValue; mod->CAPdiGiven = TRUE; break; case CAP_MOD_THICK: mod->CAPthick = value->rValue; mod->CAPthickGiven = TRUE; break; case CAP_MOD_BV_MAX: mod->CAPbv_max = value->rValue; mod->CAPbv_maxGiven = TRUE; break; case CAP_MOD_C: /* just being reassured by the user that we are a capacitor */ /* no-op */ break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/cap/capext.h0000644000175000017500000000172513546075722021370 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ extern int CAPacLoad(GENmodel*,CKTcircuit*); extern int CAPask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int CAPgetic(GENmodel*,CKTcircuit*); extern int CAPload(GENmodel*,CKTcircuit*); extern int CAPmAsk(CKTcircuit*,GENmodel*,int,IFvalue*); extern int CAPmParam(int,IFvalue*,GENmodel*); extern int CAPparam(int,IFvalue*,GENinstance*,IFvalue*); extern int CAPpzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int CAPsAcLoad(GENmodel*,CKTcircuit*); extern int CAPsLoad(GENmodel*,CKTcircuit*); extern void CAPsPrint(GENmodel*,CKTcircuit*); extern int CAPsSetup(SENstruct *,GENmodel*); extern int CAPsUpdate(GENmodel*,CKTcircuit*); extern int CAPsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int CAPtemp(GENmodel*,CKTcircuit*); extern int CAPtrunc(GENmodel*,CKTcircuit*,double*); extern int CAPsoaCheck(CKTcircuit *, GENmodel *); tmpk8ny_4pz/src/spicelib/devices/cap/capsoachk.c0000644000175000017500000000227613546075722022035 0ustar carstencarsten/********** Copyright 2013 Dietmar Warning. All rights reserved. Author: 2013 Dietmar Warning **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "capdefs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/cpdefs.h" int CAPsoaCheck(CKTcircuit *ckt, GENmodel *inModel) { CAPmodel *model = (CAPmodel *) inModel; CAPinstance *here; double vc; /* current capacitor voltage */ int maxwarns; static int warns_bv = 0; if (!ckt) { warns_bv = 0; return OK; } maxwarns = ckt->CKTsoaMaxWarns; for (; model; model = CAPnextModel(model)) { for (here = CAPinstances(model); here; here = CAPnextInstance(here)) { vc = fabs(ckt->CKTrhsOld [here->CAPposNode] - ckt->CKTrhsOld [here->CAPnegNode]); if (vc > here->CAPbv_max) if (warns_bv < maxwarns) { soa_printf(ckt, (GENinstance*) here, "|Vc|=%g has exceeded Bv_max=%g\n", vc, here->CAPbv_max); warns_bv++; } } } return OK; } tmpk8ny_4pz/src/spicelib/devices/cap/capsacl.c0000644000175000017500000000355713546075722021512 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: September 2003 Paolo Nenzi This function is obsolete (was used by an old sensitivity analysis) **********/ /* */ /* actually load the current ac sensitivity * information into the array previously provided */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "capdefs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CAPsAcLoad(GENmodel *inModel, CKTcircuit *ckt) { CAPmodel *model = (CAPmodel*)inModel; CAPinstance *here; double vcap; double ivcap; double val; double ival; /* loop through all the capacitor models */ for( ; model != NULL; model = CAPnextModel(model)) { /* loop through all the instances of the model */ for (here = CAPinstances(model); here != NULL ; here=CAPnextInstance(here)) { if(here->CAPsenParmNo){ vcap = *(ckt->CKTrhsOld+here->CAPposNode) - *(ckt->CKTrhsOld+here->CAPnegNode); ivcap = *(ckt->CKTirhsOld+here->CAPposNode) - *(ckt->CKTirhsOld+here->CAPnegNode); val = ckt->CKTomega * ivcap; ival = ckt->CKTomega * vcap; /* load the RHS matrix */ *(ckt->CKTsenInfo->SEN_RHS[here->CAPposNode] + here->CAPsenParmNo) += val; *(ckt->CKTsenInfo->SEN_iRHS[here->CAPposNode] + here->CAPsenParmNo) -= ival; *(ckt->CKTsenInfo->SEN_RHS[here->CAPnegNode] + here->CAPsenParmNo) -= val; *(ckt->CKTsenInfo->SEN_iRHS[here->CAPnegNode] + here->CAPsenParmNo) += ival; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/dev.c0000644000175000017500000003036213546075722020111 0ustar carstencarsten/* NG-SPICE -- An electrical circuit simulator * * Copyright (c) 1990 University of California * Copyright (c) 2000 Arno W. Peters * * Permission to use, copy, modify, and distribute this software and * its documentation without fee, and without a written agreement is * hereby granted, provided that the above copyright notice, this * paragraph and the following three paragraphs appear in all copies. * * This software program and documentation are copyrighted by their * authors. The software program and documentation are supplied "as * is", without any accompanying services from the authors. The * authors do not warrant that the operation of the program will be * uninterrupted or error-free. The end-user understands that the * program was developed for research purposes and is advised not to * rely exclusively on the program for any reason. * * IN NO EVENT SHALL THE AUTHORS BE LIABLE TO ANY PARTY FOR DIRECT, * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING * LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS * DOCUMENTATION, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. THE AUTHORS SPECIFICALLY DISCLAIMS ANY * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE * SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHORS * HAVE NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, * ENHANCEMENTS, OR MODIFICATIONS. */ #include "ngspice/ngspice.h" #include "assert.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "dev.h" #include "ngspice/memory.h" /* to alloc, realloc devices*/ #ifdef XSPICE /*saj headers for xspice*/ #include /* for strcpy, strcat*/ #if (!defined HAS_WINGUI) && (!defined __MINGW32__) && (!defined _MSC_VER) #include /* to load libraries*/ typedef void * funptr_t; #else /* ifdef HAS_WINGUI */ #undef BOOLEAN #include typedef FARPROC funptr_t; void *dlopen (const char *, int); funptr_t dlsym (void *, const char *); int dlclose (void *); char *dlerror (void); #define RTLD_LAZY 1 /* lazy function call binding */ #define RTLD_NOW 2 /* immediate function call binding */ #define RTLD_GLOBAL 4 /* symbols in this dlopen'ed obj are visible to other dlopen'ed objs */ static char errstr[128]; #endif /* ifndef HAS_WINGUI */ #include "ngspice/dllitf.h" /* the coreInfo Structure*/ #include "ngspice/evtudn.h" /*Use defined nodes */ Evt_Udn_Info_t **g_evt_udn_info = NULL; int g_evt_num_udn_types = 0; /*The digital node type */ extern Evt_Udn_Info_t idn_digital_info; int add_device(int n, SPICEdev **devs, int flag); int add_udn(int,Evt_Udn_Info_t **); /*saj*/ #endif #include "asrc/asrcitf.h" #include "bjt/bjtitf.h" #include "bsim1/bsim1itf.h" #include "bsim2/bsim2itf.h" #include "bsim3/bsim3itf.h" #include "bsim3v0/bsim3v0itf.h" #include "bsim3v1/bsim3v1itf.h" #include "bsim3v32/bsim3v32itf.h" #include "bsim4/bsim4itf.h" #include "bsim4v5/bsim4v5itf.h" #include "bsim4v6/bsim4v6itf.h" #include "bsim4v7/bsim4v7itf.h" #include "bsim3soi_pd/b3soipditf.h" #include "bsim3soi_fd/b3soifditf.h" #include "bsim3soi_dd/b3soidditf.h" #include "bsimsoi/b4soiitf.h" #include "cap/capitf.h" #include "cccs/cccsitf.h" #include "ccvs/ccvsitf.h" #include "csw/cswitf.h" #include "dio/dioitf.h" #include "hfet1/hfetitf.h" #include "hfet2/hfet2itf.h" #include "hisim2/hsm2itf.h" #include "hisimhv1/hsmhvitf.h" #include "hisimhv2/hsmhv2itf.h" #include "ind/inditf.h" #include "isrc/isrcitf.h" #include "jfet/jfetitf.h" #include "jfet2/jfet2itf.h" #include "ltra/ltraitf.h" #include "mes/mesitf.h" #include "mesa/mesaitf.h" #include "mos1/mos1itf.h" #include "mos2/mos2itf.h" #include "mos3/mos3itf.h" #include "mos6/mos6itf.h" #include "mos9/mos9itf.h" #include "cpl/cplitf.h" #include "res/resitf.h" #include "soi3/soi3itf.h" #include "sw/switf.h" #include "tra/traitf.h" #include "txl/txlitf.h" #include "urc/urcitf.h" #include "vbic/vbicitf.h" #include "vccs/vccsitf.h" #include "vcvs/vcvsitf.h" #include "vsrc/vsrcitf.h" #include "vdmos/vdmositf.h" #ifdef ADMS #include "adms/hicum0/hicum0itf.h" #include "adms/hicum2/hicum2itf.h" #include "adms/mextram/bjt504titf.h" #include "adms/ekv/ekvitf.h" #include "adms/psp102/psp102itf.h" #endif #ifdef CIDER /* Numerical devices (Cider integration) */ #include "nbjt/nbjtitf.h" #include "nbjt2/nbjt2itf.h" #include "numd/numditf.h" #include "numd2/numd2itf.h" #include "numos/numositf.h" #endif #ifdef NDEV #include "ndev/ndevitf.h" #endif static SPICEdev *(*static_devices[])(void) = { /* URC device MUST precede both resistors and capacitors */ get_urc_info, get_asrc_info, get_bjt_info, get_bsim1_info, get_bsim2_info, get_bsim3_info, get_bsim3v0_info, get_bsim3v1_info, get_bsim3v32_info, get_b4soi_info, get_bsim4_info, get_bsim4v5_info, get_bsim4v6_info, get_bsim4v7_info, get_b3soipd_info, get_b3soifd_info, get_b3soidd_info, get_cap_info, get_cccs_info, get_ccvs_info, get_cpl_info, get_csw_info, get_dio_info, get_hfeta_info, get_hfet2_info, get_hsm2_info, get_hsmhv_info, get_hsmhv2_info, get_ind_info, get_mut_info, get_isrc_info, get_jfet_info, get_jfet2_info, get_ltra_info, get_mes_info, get_mesa_info, get_mos1_info, get_mos2_info, get_mos3_info, get_mos6_info, get_mos9_info, get_res_info, get_soi3_info, get_sw_info, get_tra_info, get_txl_info, get_vbic_info, get_vccs_info, get_vcvs_info, get_vsrc_info, get_vdmos_info, #ifdef CIDER get_nbjt_info, get_nbjt2_info, get_numd_info, get_numd2_info, get_numos_info, #endif #ifdef ADMS (SPICEdev *(*)(void)) get_hicum0_info, (SPICEdev *(*)(void)) get_hicum2_info, (SPICEdev *(*)(void)) get_bjt504t_info, (SPICEdev *(*)(void)) get_ekv_info, (SPICEdev *(*)(void)) get_psp102_info, #endif #ifdef NDEV get_ndev_info, #endif }; static int DEVNUM = NUMELEMS(static_devices); /*Make this dynamic for later attempt to make all devices dynamic*/ SPICEdev **DEVices=NULL; /*Flag to indicate that device type it is, *0 = normal spice device *1 = xspice device */ #ifdef XSPICE int *DEVicesfl=NULL; int DEVflag(int type){ if(type < DEVNUM && type >= 0) return DEVicesfl[type]; else return -1; } #endif void spice_destroy_devices(void) { #ifdef XSPICE tfree(g_evt_udn_info); tfree(DEVicesfl); #endif tfree(DEVices); DEVNUM = 0; } void spice_init_devices(void) { int i; /* Safeguard against double initialization */ DEVNUM = NUMELEMS(static_devices); #ifdef XSPICE /* Initialize the structs and add digital node type */ g_evt_udn_info = TMALLOC(Evt_Udn_Info_t *, 1); g_evt_num_udn_types = 1; g_evt_udn_info[0] = &idn_digital_info; DEVicesfl = TMALLOC(int, DEVNUM); /* tmalloc should automatically zero the array! */ #endif DEVices = TMALLOC(SPICEdev *, DEVNUM); for (i = 0; i < DEVNUM; i++) DEVices[i] = static_devices[i](); } int num_devices(void) { return DEVNUM; } IFdevice ** devices_ptr(void) { return (IFdevice **) DEVices; } SPICEdev ** devices(void) { return DEVices; } #ifdef DEVLIB /*not yet usable*/ #ifdef ADMS #define DEVICES_USED {"asrc", "bjt", "vbic", "bsim1", "bsim2", "bsim3", "bsim3v32", "bsim3v2", "bsim3v1", "bsim4", "bsim4v5", "bsim4v6", "bsim4v7", \ "bsim4soi", "bsim3soipd", "bsim3soifd", "bsim3soidd", "hisim2", "hisimhv1", "hisimhv2", \ "cap", "cccs", "ccvs", "csw", "dio", "hfet", "hfet2", "ind", "isrc", "jfet", "ltra", "mes", "mesa" ,"mos1", "mos2", "mos3", \ "mos6", "mos9", "res", "soi3", "sw", "tra", "urc", "vccs", "vcvs", "vsrc", "hicum0", "hicum2", "bjt504t", "ekv", "psp102"} #else #define DEVICES_USED {"asrc", "bjt", "vbic", "bsim1", "bsim2", "bsim3", "bsim3v32", "bsim3v2", "bsim3v1", "bsim4", "bsim4v5", "bsim4v6", "bsim4v7", \ "bsim4soi", "bsim3soipd", "bsim3soifd", "bsim3soidd", "hisim2", "hisimhv1", "hisimhv2", \ "cap", "cccs", "ccvs", "csw", "dio", "hfet", "hfet2", "ind", "isrc", "jfet", "ltra", "mes", "mesa" ,"mos1", "mos2", "mos3", \ "mos6", "mos9", "res", "soi3", "sw", "tra", "urc", "vccs", "vcvs", "vsrc"} #endif int load_dev(char *name) { char *msg; char libname[50]; void *lib; funptr_t fetch; SPICEdev *device; strcpy(libname, "lib"); strcat(libname,name); strcat(libname,".so"); lib = dlopen(libname,RTLD_NOW); if(!lib){ msg = dlerror(); printf("%s\n", msg); return 1; } strcpy(libname, "get_"); strcat(libname,name); strcat(libname,"_info"); fetch = dlsym(lib,libname); if(!fetch){ msg = dlerror(); printf("%s\n", msg); return 1; } device = ((SPICEdev * (*)(void)) fetch) (); add_device(1,&device,0); return 0; } void load_alldevs(void){ char *devs[] = DEVICES_USED; int num = NUMELEMS(devs); int i; for(i=0; i< num;i++) load_dev(devs[i]); return; } #endif /*-------------------- XSPICE additions below ----------------------*/ #ifdef XSPICE #include "ngspice/mif.h" #include "ngspice/cm.h" #include "ngspice/cpextern.h" #include "ngspice/fteext.h" /* for ft_sim */ #include "ngspice/cktdefs.h" /* for DEVmaxnum */ static void relink(void) { /* * This replacement done by SDB on 6.11.2003 * * ft_sim->numDevices = num_devices(); * DEVmaxnum = num_devices(); */ ft_sim->numDevices = DEVNUM; DEVmaxnum = DEVNUM; ft_sim->devices = devices_ptr(); return; } int add_device(int n, SPICEdev **devs, int flag){ int i; DEVices = TREALLOC(SPICEdev *, DEVices, DEVNUM + n); DEVicesfl = TREALLOC(int, DEVicesfl, DEVNUM + n); for(i = 0; i < n;i++){ #ifdef TRACE printf("Added device: %s\n",devs[i]->DEVpublic.name); #endif DEVices[DEVNUM+i] = devs[i]; DEVices[DEVNUM+i]->DEVinstSize = &MIFiSize; DEVices[DEVNUM+i]->DEVmodSize = &MIFmSize; DEVicesfl[DEVNUM+i] = flag; } DEVNUM += n; relink(); return 0; } int add_udn(int n,Evt_Udn_Info_t **udns){ int i; g_evt_udn_info = TREALLOC(Evt_Udn_Info_t *, g_evt_udn_info, g_evt_num_udn_types + n); for(i = 0; i < n;i++){ #ifdef TRACE printf("Added udn: %s\n",udns[i]->name); #endif g_evt_udn_info[g_evt_num_udn_types+i] = udns[i]; } g_evt_num_udn_types += n; return 0; } extern struct coreInfo_t coreInfo; int load_opus(char *name){ void *lib; const char *msg; int *num=NULL; struct coreInfo_t **core; SPICEdev **devs; Evt_Udn_Info_t **udns; funptr_t fetch; lib = dlopen(name,RTLD_NOW); if(!lib){ msg = dlerror(); printf("%s\n", msg); return 1; } fetch = dlsym(lib,"CMdevNum"); if(fetch){ num = ((int * (*)(void)) fetch) (); #ifdef TRACE printf("Got %u devices.\n",*num); #endif }else{ msg = dlerror(); printf("%s\n", msg); return 1; } fetch = dlsym(lib,"CMdevs"); if(fetch){ devs = ((SPICEdev ** (*)(void)) fetch) (); }else{ msg = dlerror(); printf("%s\n", msg); return 1; } fetch = dlsym(lib,"CMgetCoreItfPtr"); if(fetch){ core = ((struct coreInfo_t ** (*)(void)) fetch) (); *core = &coreInfo; }else{ msg = dlerror(); printf("%s\n", msg); return 1; } add_device(*num,devs,1); fetch = dlsym(lib,"CMudnNum"); if(fetch){ num = ((int * (*)(void)) fetch) (); #ifdef TRACE printf("Got %u udns.\n",*num); #endif }else{ msg = dlerror(); printf("%s\n", msg); return 1; } fetch = dlsym(lib,"CMudns"); if(fetch){ udns = ((Evt_Udn_Info_t ** (*)(void)) fetch) (); }else{ msg = dlerror(); printf("%s\n", msg); return 1; } add_udn(*num,udns); return 0; } #if defined(__MINGW32__) || defined(HAS_WINGUI) || defined(_MSC_VER) void *dlopen(const char *name,int type) { NG_IGNORE(type); return LoadLibrary(name); } funptr_t dlsym(void *hDll, const char *funcname) { return GetProcAddress(hDll, funcname); } char *dlerror(void) { LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); strcpy(errstr,lpMsgBuf); LocalFree(lpMsgBuf); return errstr; } #endif #endif /*-------------------- end of XSPICE additions ----------------------*/ tmpk8ny_4pz/src/spicelib/devices/jfet/0000755000175000017500000000000013546075722020113 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/jfet/jfetinit.c0000644000175000017500000000316413546075722022077 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "jfetitf.h" #include "jfetext.h" #include "jfetinit.h" SPICEdev JFETinfo = { .DEVpublic = { .name = "JFET", .description = "Junction Field effect transistor", .terms = &JFETnSize, .numNames = &JFETnSize, .termNames = JFETnames, .numInstanceParms = &JFETpTSize, .instanceParms = JFETpTable, .numModelParms = &JFETmPTSize, .modelParms = JFETmPTable, .flags = DEV_DEFAULT, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = JFETparam, .DEVmodParam = JFETmParam, .DEVload = JFETload, .DEVsetup = JFETsetup, .DEVunsetup = JFETunsetup, .DEVpzSetup = JFETsetup, .DEVtemperature = JFETtemp, .DEVtrunc = JFETtrunc, .DEVfindBranch = NULL, .DEVacLoad = JFETacLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = JFETgetic, .DEVask = JFETask, .DEVmodAsk = JFETmAsk, .DEVpzLoad = JFETpzLoad, .DEVconvTest = NULL, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = JFETdisto, .DEVnoise = JFETnoise, .DEVsoaCheck = NULL, .DEVinstSize = &JFETiSize, .DEVmodSize = &JFETmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_jfet_info(void) { return &JFETinfo; } tmpk8ny_4pz/src/spicelib/devices/jfet/jfet.c0000644000175000017500000001111613546075722021207 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Sydney University mods Copyright(c) 1989 Anthony E. Parker, David J. Skellern Laboratory for Communication Science Engineering Sydney University Department of Electrical Engineering, Australia **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/devdefs.h" #include "jfetdefs.h" #include "ngspice/suffix.h" IFparm JFETpTable[] = { /* device parameters */ IOPU("off", JFET_OFF, IF_FLAG, "Device initially off"), IOPAU("ic", JFET_IC, IF_REALVEC,"Initial VDS,VGS vector"), IOPU("area", JFET_AREA, IF_REAL, "Area factor"), IOPU("m", JFET_M, IF_REAL, "Parallel multiplier"), IOPAU("ic-vds", JFET_IC_VDS, IF_REAL, "Initial D-S voltage"), IOPAU("ic-vgs", JFET_IC_VGS, IF_REAL, "Initial G-S volrage"), IOPU("temp", JFET_TEMP, IF_REAL, "Instance temperature"), IOPU("dtemp", JFET_DTEMP, IF_REAL, "Instance temperature difference"), OPU("drain-node", JFET_DRAINNODE, IF_INTEGER,"Number of drain node"), OPU("gate-node", JFET_GATENODE, IF_INTEGER,"Number of gate node"), OPU("source-node", JFET_SOURCENODE, IF_INTEGER,"Number of source node"), OPU("drain-prime-node", JFET_DRAINPRIMENODE, IF_INTEGER,"Internal drain node"), OPU("source-prime-node",JFET_SOURCEPRIMENODE,IF_INTEGER, "Internal source node"), OP("vgs", JFET_VGS, IF_REAL, "Voltage G-S"), OP("vgd", JFET_VGD, IF_REAL, "Voltage G-D"), OP("ig", JFET_CG, IF_REAL, "Current at gate node"), OP("id", JFET_CD, IF_REAL, "Current at drain node"), OP("is", JFET_CS, IF_REAL, "Source current"), OP("igd", JFET_CGD, IF_REAL, "Current G-D"), OP("gm", JFET_GM, IF_REAL, "Transconductance"), OP("gds", JFET_GDS, IF_REAL, "Conductance D-S"), OP("ggs", JFET_GGS, IF_REAL, "Conductance G-S"), OP("ggd", JFET_GGD, IF_REAL, "Conductance G-D"), OPU("qgs", JFET_QGS, IF_REAL,"Charge storage G-S junction"), OPU("qgd", JFET_QGD, IF_REAL,"Charge storage G-D junction"), OPU("cqgs",JFET_CQGS, IF_REAL, "Capacitance due to charge storage G-S junction"), OPU("cqgd",JFET_CQGD, IF_REAL, "Capacitance due to charge storage G-D junction"), OPU("p", JFET_POWER,IF_REAL,"Power dissipated by the JFET"), }; IFparm JFETmPTable[] = { /* model parameters */ OP("type", JFET_MOD_TYPE, IF_STRING, "N-type or P-type JFET model"), IP("njf", JFET_MOD_NJF, IF_FLAG,"N type JFET model"), IP("pjf", JFET_MOD_PJF, IF_FLAG,"P type JFET model"), IOP("vt0", JFET_MOD_VTO, IF_REAL,"Threshold voltage"), IOPR("vto", JFET_MOD_VTO, IF_REAL,"Threshold voltage"), IOP("beta", JFET_MOD_BETA, IF_REAL,"Transconductance parameter"), IOP("lambda", JFET_MOD_LAMBDA, IF_REAL,"Channel length modulation param."), IOP("rd", JFET_MOD_RD, IF_REAL,"Drain ohmic resistance"), OPU("gd", JFET_MOD_DRAINCONDUCT, IF_REAL,"Drain conductance"), IOP("rs", JFET_MOD_RS, IF_REAL,"Source ohmic resistance"), OPU("gs",JFET_MOD_SOURCECONDUCT,IF_REAL,"Source conductance"), IOPA("cgs", JFET_MOD_CGS, IF_REAL,"G-S junction capactance"), IOPA("cgd", JFET_MOD_CGD, IF_REAL,"G-D junction cap"), IOP("pb", JFET_MOD_PB, IF_REAL,"Gate junction potential"), IOP("is", JFET_MOD_IS, IF_REAL,"Gate junction saturation current"), IOP("fc", JFET_MOD_FC, IF_REAL,"Forward bias junction fit parm."), /* Modification for Sydney University JFET model */ IOP("b", JFET_MOD_B, IF_REAL,"Doping tail parameter"), /* end Sydney University mod. */ IOPU("tnom", JFET_MOD_TNOM, IF_REAL,"parameter measurement temperature"), IOP("kf", JFET_MOD_KF, IF_REAL, "Flicker Noise Coefficient"), IOP("af", JFET_MOD_AF, IF_REAL, "Flicker Noise Exponent"), IOP("tcv", JFET_MOD_TCV, IF_REAL, "Threshold voltage temperature coefficient"), IOP("bex", JFET_MOD_BEX, IF_REAL, "Mobility temperature exponent"), IOP("nlev",JFET_MOD_NLEV, IF_INTEGER, "Noise equation selector"), IOP("gdsnoi", JFET_MOD_GDSNOI, IF_REAL, "Channel noise coefficient") }; char *JFETnames[] = { "Drain", "Gate", "Source" }; int JFETnSize = NUMELEMS(JFETnames); int JFETpTSize = NUMELEMS(JFETpTable); int JFETmPTSize = NUMELEMS(JFETmPTable); int JFETiSize = sizeof(JFETinstance); int JFETmSize = sizeof(JFETmodel); tmpk8ny_4pz/src/spicelib/devices/jfet/Makefile.am0000644000175000017500000000076213546075722022154 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libjfet.la libjfet_la_SOURCES = \ jfet.c \ jfetacld.c \ jfetask.c \ jfetdefs.h \ jfetdist.c \ jfetdset.c \ jfetext.h \ jfetic.c \ jfetinit.c \ jfetinit.h \ jfetitf.h \ jfetload.c \ jfetmask.c \ jfetmpar.c \ jfetnoi.c \ jfetpar.c \ jfetpzld.c \ jfetset.c \ jfettemp.c \ jfettrun.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/jfet/jfetdefs.h0000644000175000017500000002265213546075722022065 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Sydney University mods Copyright(c) 1989 Anthony E. Parker, David J. Skellern Laboratory for Communication Science Engineering Sydney University Department of Electrical Engineering, Australia **********/ #ifndef JFET #define JFET #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/noisedef.h" /* structures used to describe Junction Field Effect Transistors */ /* indices to an array of JFET noise sources */ enum { JFETRDNOIZ = 0, JFETRSNOIZ, JFETIDNOIZ, JFETFLNOIZ, JFETTOTNOIZ, /* finally, the number of noise sources */ JFETNSRCS }; /* information used to describe a single instance */ typedef struct sJFETinstance { struct GENinstance gen; #define JFETmodPtr(inst) ((struct sJFETmodel *)((inst)->gen.GENmodPtr)) #define JFETnextInstance(inst) ((struct sJFETinstance *)((inst)->gen.GENnextInstance)) #define JFETname gen.GENname #define JFETstate gen.GENstate const int JFETdrainNode; /* number of drain node of jfet */ const int JFETgateNode; /* number of gate node of jfet */ const int JFETsourceNode; /* number of source node of jfet */ int JFETdrainPrimeNode; /* number of internal drain node of jfet */ int JFETsourcePrimeNode; /* number of internal source node of jfet */ double *JFETdrainDrainPrimePtr; /* pointer to sparse matrix at * (drain,drain prime) */ double *JFETgateDrainPrimePtr; /* pointer to sparse matrix at * (gate,drain prime) */ double *JFETgateSourcePrimePtr; /* pointer to sparse matrix at * (gate,source prime) */ double *JFETsourceSourcePrimePtr; /* pointer to sparse matrix at * (source,source prime) */ double *JFETdrainPrimeDrainPtr; /* pointer to sparse matrix at * (drain prime,drain) */ double *JFETdrainPrimeGatePtr; /* pointer to sparse matrix at * (drain prime,gate) */ double *JFETdrainPrimeSourcePrimePtr; /* pointer to sparse matrix * (drain prime,source prime) */ double *JFETsourcePrimeGatePtr; /* pointer to sparse matrix at * (source prime,gate) */ double *JFETsourcePrimeSourcePtr; /* pointer to sparse matrix at * (source prime,source) */ double *JFETsourcePrimeDrainPrimePtr; /* pointer to sparse matrix * (source prime,drain prime) */ double *JFETdrainDrainPtr; /* pointer to sparse matrix at * (drain,drain) */ double *JFETgateGatePtr; /* pointer to sparse matrix at * (gate,gate) */ double *JFETsourceSourcePtr; /* pointer to sparse matrix at * (source,source) */ double *JFETdrainPrimeDrainPrimePtr; /* pointer to sparse matrix * (drain prime,drain prime) */ double *JFETsourcePrimeSourcePrimePtr; /* pointer to sparse matrix * (source prime,source prime) */ int JFETmode; /* distortion analysis Taylor coeffs. */ /* * naming convention: * x = vgs * y = vds * cdr = cdrain */ #define JFETNDCOEFFS 21 #ifndef NODISTO double JFETdCoeffs[JFETNDCOEFFS]; #else /* NODISTO */ double *JFETdCoeffs; #endif /* NODISTO */ #ifndef CONFIG #define cdr_x JFETdCoeffs[0] #define cdr_y JFETdCoeffs[1] #define cdr_x2 JFETdCoeffs[2] #define cdr_y2 JFETdCoeffs[3] #define cdr_xy JFETdCoeffs[4] #define cdr_x3 JFETdCoeffs[5] #define cdr_y3 JFETdCoeffs[6] #define cdr_x2y JFETdCoeffs[7] #define cdr_xy2 JFETdCoeffs[8] #define ggs1 JFETdCoeffs[9] #define ggd1 JFETdCoeffs[10] #define ggs2 JFETdCoeffs[11] #define ggd2 JFETdCoeffs[12] #define ggs3 JFETdCoeffs[13] #define ggd3 JFETdCoeffs[14] #define capgs1 JFETdCoeffs[15] #define capgd1 JFETdCoeffs[16] #define capgs2 JFETdCoeffs[17] #define capgd2 JFETdCoeffs[18] #define capgs3 JFETdCoeffs[19] #define capgd3 JFETdCoeffs[20] #endif #ifndef NONOISE double JFETnVar[NSTATVARS][JFETNSRCS]; #else /* NONOISE */ double **JFETnVar; #endif /* NONOISE */ unsigned JFEToff :1; /* 'off' flag for jfet */ unsigned JFETareaGiven : 1; /* flag to indicate area was specified */ unsigned JFETmGiven : 1; /* flag to indicate parallel multiplier given */ unsigned JFETicVDSGiven : 1; /* initial condition given flag for V D-S*/ unsigned JFETicVGSGiven : 1; /* initial condition given flag for V G-S*/ unsigned JFETtempGiven : 1; /* flag to indicate instance temp given */ unsigned JFETdtempGiven : 1; /* flag to indicate instance dtemp given */ double JFETarea; /* area factor for the jfet */ double JFETm; /* Parallel multiplier */ double JFETicVDS; /* initial condition voltage D-S*/ double JFETicVGS; /* initial condition voltage G-S*/ double JFETtemp; /* operating temperature */ double JFETdtemp; /* instance temperature difference */ double JFETtSatCur; /* temperature adjusted saturation current */ double JFETtGatePot; /* temperature adjusted gate potential */ double JFETtCGS; /* temperature corrected G-S capacitance */ double JFETtCGD; /* temperature corrected G-D capacitance */ double JFETcorDepCap; /* joining point of the fwd bias dep. cap eq.s */ double JFETvcrit; /* critical voltage for the instance */ double JFETf1; /* coefficient of capacitance polynomial exp */ double JFETtThreshold; /* temperature adjusted threshold voltage */ double JFETtBeta; /* temperature adjusted beta */ } JFETinstance ; #define JFETvgs JFETstate #define JFETvgd JFETstate+1 #define JFETcg JFETstate+2 #define JFETcd JFETstate+3 #define JFETcgd JFETstate+4 #define JFETgm JFETstate+5 #define JFETgds JFETstate+6 #define JFETggs JFETstate+7 #define JFETggd JFETstate+8 #define JFETqgs JFETstate+9 #define JFETcqgs JFETstate+10 #define JFETqgd JFETstate+11 #define JFETcqgd JFETstate+12 #define JFETnumStates 13 /* per model data */ typedef struct sJFETmodel { /* model structure for a jfet */ struct GENmodel gen; #define JFETmodType gen.GENmodType #define JFETnextModel(inst) ((struct sJFETmodel *)((inst)->gen.GENnextModel)) #define JFETinstances(inst) ((JFETinstance *)((inst)->gen.GENinstances)) #define JFETmodName gen.GENmodName int JFETtype; double JFETthreshold; double JFETbeta; double JFETlModulation; double JFETdrainResist; double JFETsourceResist; double JFETcapGS; double JFETcapGD; double JFETgatePotential; double JFETgateSatCurrent; double JFETdepletionCapCoeff; double JFETfNcoef; double JFETfNexp; int JFETnlev; double JFETgdsnoi; double JFETdrainConduct; double JFETsourceConduct; double JFETf2; double JFETf3; /* Modification for Sydney University JFET model */ double JFETb; /* doping profile parameter */ double JFETbFac; /* internal derived doping profile parameter */ /* end Sydney University mod */ double JFETtnom; /* temperature at which parameters were measured */ double JFETtcv; double JFETbex; unsigned JFETthresholdGiven : 1; unsigned JFETbetaGiven : 1; unsigned JFETlModulationGiven : 1; unsigned JFETdrainResistGiven : 1; unsigned JFETsourceResistGiven : 1; unsigned JFETcapGSGiven : 1; unsigned JFETcapGDGiven : 1; unsigned JFETgatePotentialGiven : 1; unsigned JFETgateSatCurrentGiven : 1; unsigned JFETdepletionCapCoeffGiven : 1; /* Modification for Sydney University JFET model */ unsigned JFETbGiven : 1; /* end Sydney University mod */ unsigned JFETtnomGiven : 1; /* user specified Tnom for model */ unsigned JFETfNcoefGiven : 1; unsigned JFETfNexpGiven : 1; unsigned JFETnlevGiven : 1; unsigned JFETgdsnoiGiven : 1; unsigned JFETtcvGiven : 1; unsigned JFETbexGiven : 1; } JFETmodel; #ifndef NJF #define NJF 1 #define PJF -1 #endif /*NJF*/ /* device parameters */ enum { JFET_AREA = 1, JFET_IC_VDS, JFET_IC_VGS, JFET_IC, JFET_OFF, JFET_TEMP, JFET_DTEMP, JFET_M, }; /* model parameters */ enum { JFET_MOD_VTO = 101, JFET_MOD_BETA, JFET_MOD_LAMBDA, JFET_MOD_RD, JFET_MOD_RS, JFET_MOD_CGS, JFET_MOD_CGD, JFET_MOD_PB, JFET_MOD_IS, JFET_MOD_FC, JFET_MOD_NJF, JFET_MOD_PJF, JFET_MOD_TNOM, JFET_MOD_KF, JFET_MOD_AF, JFET_MOD_B, /* Modification for Sydney University JFET model */ JFET_MOD_TCV, JFET_MOD_BEX, JFET_MOD_NLEV, JFET_MOD_GDSNOI, }; /* device questions */ enum { JFET_DRAINNODE = 301, JFET_GATENODE, JFET_SOURCENODE, JFET_DRAINPRIMENODE, JFET_SOURCEPRIMENODE, JFET_VGS, JFET_VGD, JFET_CG, JFET_CD, JFET_CGD, JFET_GM, JFET_GDS, JFET_GGS, JFET_GGD, JFET_QGS, JFET_CQGS, JFET_QGD, JFET_CQGD, JFET_CS, JFET_POWER, }; /* model questions */ enum { JFET_MOD_DRAINCONDUCT = 301, JFET_MOD_SOURCECONDUCT, JFET_MOD_DEPLETIONCAP, JFET_MOD_VCRIT, JFET_MOD_TYPE, }; /* function definitions */ #include "jfetext.h" #endif /*JFET*/ tmpk8ny_4pz/src/spicelib/devices/jfet/jfettemp.c0000644000175000017500000001063113546075722022076 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Sydney University mods Copyright(c) 1989 Anthony E. Parker, David J. Skellern Laboratory for Communication Science Engineering Sydney University Department of Electrical Engineering, Australia **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "jfetdefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int JFETtemp(GENmodel *inModel, CKTcircuit *ckt) /* Pre-process the model parameters after a possible change */ { JFETmodel *model = (JFETmodel*)inModel; JFETinstance *here; double xfc; double vt; double vtnom; double kt,kt1; double arg,arg1; double fact1,fact2; double egfet,egfet1; double pbfact,pbfact1; double gmanew,gmaold; double ratio1; double pbo; double cjfact,cjfact1; /* loop through all the diode models */ for( ; model != NULL; model = JFETnextModel(model)) { if(!(model->JFETtnomGiven)) { model->JFETtnom = ckt->CKTnomTemp; } vtnom = CONSTKoverQ * model->JFETtnom; fact1 = model->JFETtnom/REFTEMP; kt1 = CONSTboltz * model->JFETtnom; egfet1 = 1.16-(7.02e-4*model->JFETtnom*model->JFETtnom)/ (model->JFETtnom+1108); arg1 = -egfet1/(kt1+kt1)+1.1150877/(CONSTboltz*(REFTEMP+REFTEMP)); pbfact1 = -2*vtnom * (1.5*log(fact1)+CHARGE*arg1); pbo = (model->JFETgatePotential-pbfact1)/fact1; gmaold = (model->JFETgatePotential-pbo)/pbo; cjfact = 1/(1+.5*(4e-4*(model->JFETtnom-REFTEMP)-gmaold)); if(model->JFETdrainResist != 0) { model->JFETdrainConduct = 1/model->JFETdrainResist; } else { model->JFETdrainConduct = 0; } if(model->JFETsourceResist != 0) { model->JFETsourceConduct = 1/model->JFETsourceResist; } else { model->JFETsourceConduct = 0; } if(model->JFETdepletionCapCoeff >.95) { SPfrontEnd->IFerrorf (ERR_WARNING, "%s: Depletion cap. coefficient too large, limited to .95", model->JFETmodName); model->JFETdepletionCapCoeff = .95; } xfc = log(1 - model->JFETdepletionCapCoeff); model->JFETf2 = exp((1+.5)*xfc); model->JFETf3 = 1 - model->JFETdepletionCapCoeff * (1 + .5); /* Modification for Sydney University JFET model */ model->JFETbFac = (1 - model->JFETb) / (model->JFETgatePotential - model->JFETthreshold); /* end Sydney University mod */ /* loop through all the instances of the model */ for (here = JFETinstances(model); here != NULL ; here=JFETnextInstance(here)) { if(!(here->JFETdtempGiven)) { here->JFETdtemp = 0.0; } if(!(here->JFETtempGiven)) { here->JFETtemp = ckt->CKTtemp + here->JFETdtemp; } vt = here->JFETtemp * CONSTKoverQ; fact2 = here->JFETtemp/REFTEMP; ratio1 = here->JFETtemp/model->JFETtnom -1; here->JFETtSatCur = model->JFETgateSatCurrent * exp(ratio1*1.11/vt); here->JFETtCGS = model->JFETcapGS * cjfact; here->JFETtCGD = model->JFETcapGD * cjfact; kt = CONSTboltz*here->JFETtemp; egfet = 1.16-(7.02e-4*here->JFETtemp*here->JFETtemp)/ (here->JFETtemp+1108); arg = -egfet/(kt+kt) + 1.1150877/(CONSTboltz*(REFTEMP+REFTEMP)); pbfact = -2 * vt * (1.5*log(fact2)+CHARGE*arg); here->JFETtGatePot = fact2 * pbo + pbfact; gmanew = (here->JFETtGatePot-pbo)/pbo; cjfact1 = 1+.5*(4e-4*(here->JFETtemp-REFTEMP)-gmanew); here->JFETtCGS *= cjfact1; here->JFETtCGD *= cjfact1; here->JFETcorDepCap = model->JFETdepletionCapCoeff * here->JFETtGatePot; here->JFETf1 = here->JFETtGatePot * (1 - exp((1-.5)*xfc))/(1-.5); here->JFETvcrit = vt * log(vt/(CONSTroot2 * here->JFETtSatCur)); here->JFETtThreshold = model->JFETthreshold - model->JFETtcv*(here->JFETtemp-model->JFETtnom); here->JFETtBeta = model->JFETbeta * pow(here->JFETtemp/model->JFETtnom,model->JFETbex); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/jfet/jfetpar.c0000644000175000017500000000353213546075722021715 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "jfetdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int JFETparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { JFETinstance *here = (JFETinstance *)inst; NG_IGNORE(select); switch(param) { case JFET_TEMP: here->JFETtemp = value->rValue+CONSTCtoK; here->JFETtempGiven = TRUE; break; case JFET_DTEMP: here->JFETdtemp = value->rValue; here->JFETdtempGiven = TRUE; break; case JFET_AREA: here->JFETarea = value->rValue; here->JFETareaGiven = TRUE; break; case JFET_M: here->JFETm = value->rValue; here->JFETmGiven = TRUE; break; case JFET_IC_VDS: here->JFETicVDS = value->rValue; here->JFETicVDSGiven = TRUE; break; case JFET_IC_VGS: here->JFETicVGS = value->rValue; here->JFETicVGSGiven = TRUE; break; case JFET_OFF: here->JFEToff = (value->iValue != 0); break; case JFET_IC: switch(value->v.numValue) { case 2: here->JFETicVGS = *(value->v.vec.rVec+1); here->JFETicVGSGiven = TRUE; case 1: here->JFETicVDS = *(value->v.vec.rVec); here->JFETicVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/jfet/jfetdist.c0000644000175000017500000005273713546075722022111 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "jfetdefs.h" #include "ngspice/sperror.h" #include "ngspice/distodef.h" #include "ngspice/suffix.h" int JFETdisto(int mode, GENmodel *genmodel, CKTcircuit *ckt) /* assuming here that ckt->CKTomega has been initialised to * the correct value */ { JFETmodel *model = (JFETmodel *) genmodel; DISTOAN* job = (DISTOAN*) ckt->CKTcurJob; DpassStr pass; double r1h1x,i1h1x; double r1h1y,i1h1y; double r1h2x, i1h2x; double r1h2y, i1h2y; double r1hm2x,i1hm2x; double r1hm2y,i1hm2y; double r2h11x,i2h11x; double r2h11y,i2h11y; double r2h1m2x,i2h1m2x; double r2h1m2y,i2h1m2y; double temp, itemp; JFETinstance *here; if (mode == D_SETUP) return(JFETdSetup(genmodel,ckt)); /* another hack from similar structures */ if ((mode == D_TWOF1) || (mode == D_THRF1) || (mode == D_F1PF2) || (mode == D_F1MF2) || (mode == D_2F1MF2)) { /* loop through all the JFET models */ for( ; model != NULL; model = JFETnextModel(model)) { /* loop through all the instances of the model */ for (here = JFETinstances(model); here != NULL ; here=JFETnextInstance(here)) { /* loading starts here */ switch (mode) { case D_TWOF1: /* x = vgs, y = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->JFETgateNode)) - *(job->r1H1ptr + (here->JFETsourcePrimeNode)); i1h1x = *(job->i1H1ptr + (here->JFETgateNode)) - *(job->i1H1ptr + (here->JFETsourcePrimeNode)); r1h1y = *(job->r1H1ptr + (here->JFETdrainPrimeNode)) - *(job->r1H1ptr + (here->JFETsourcePrimeNode)); i1h1y = *(job->i1H1ptr + (here->JFETdrainPrimeNode)) - *(job->i1H1ptr + (here->JFETsourcePrimeNode)); /* loading starts here */ /* loading cdrain term */ temp = DFn2F1(here->cdr_x2, here->cdr_y2, 0.0, here->cdr_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0); itemp = DFi2F1(here->cdr_x2, here->cdr_y2, 0.0, here->cdr_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0); *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) -= temp; *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) -= itemp; *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp; /* cdrain term over */ /* loading ggs term */ temp = D1n2F1(here->ggs2, r1h1x, i1h1x); itemp = D1i2F1(here->ggs2, r1h1x, i1h1x); *(ckt->CKTrhs + (here->JFETgateNode)) -= temp; *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp; *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp; /* ggs over */ /* loading ggd term */ temp = D1n2F1(here->ggd2, r1h1x - r1h1y, i1h1x - i1h1y); itemp = D1i2F1(here->ggd2, r1h1x - r1h1y, i1h1x - i1h1y); *(ckt->CKTrhs + (here->JFETgateNode)) -= temp; *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp; *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) += itemp; /* ggd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1i2F1(here->capgs2, r1h1x, i1h1x); itemp = ckt->CKTomega * D1n2F1(here->capgs2, r1h1x, i1h1x); *(ckt->CKTrhs + (here->JFETgateNode)) -= temp; *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp; *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1i2F1(here->capgd2, r1h1x - r1h1y, i1h1x - i1h1y); itemp = ckt->CKTomega * D1n2F1(here->capgd2, r1h1x - r1h1y, i1h1x - i1h1y); *(ckt->CKTrhs + (here->JFETgateNode)) -= temp; *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp; *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) += itemp; /* capgd over */ /* all done */ break; case D_THRF1: /* x = vgs, y = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->JFETgateNode)) - *(job->r1H1ptr + (here->JFETsourcePrimeNode)); i1h1x = *(job->i1H1ptr + (here->JFETgateNode)) - *(job->i1H1ptr + (here->JFETsourcePrimeNode)); r1h1y = *(job->r1H1ptr + (here->JFETdrainPrimeNode)) - *(job->r1H1ptr + (here->JFETsourcePrimeNode)); i1h1y = *(job->i1H1ptr + (here->JFETdrainPrimeNode)) - *(job->i1H1ptr + (here->JFETsourcePrimeNode)); r2h11x = *(job->r2H11ptr + (here->JFETgateNode)) - *(job->r2H11ptr + (here->JFETsourcePrimeNode)); i2h11x = *(job->i2H11ptr + (here->JFETgateNode)) - *(job->i2H11ptr + (here->JFETsourcePrimeNode)); r2h11y = *(job->r2H11ptr + (here->JFETdrainPrimeNode)) - *(job->r2H11ptr + (here->JFETsourcePrimeNode)); i2h11y = *(job->i2H11ptr + (here->JFETdrainPrimeNode)) - *(job->i2H11ptr + (here->JFETsourcePrimeNode)); /* loading starts here */ /* loading cdrain term */ temp = DFn3F1(here->cdr_x2, here->cdr_y2, 0.0, here->cdr_xy, 0.0, 0.0, here->cdr_x3, here->cdr_y3, 0.0, here->cdr_x2y, 0.0, here->cdr_xy2, 0.0, 0.0, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r2h11x, i2h11x, r2h11y, i2h11y, 0.0, 0.0); itemp = DFi3F1(here->cdr_x2, here->cdr_y2, 0.0, here->cdr_xy, 0.0, 0.0, here->cdr_x3, here->cdr_y3, 0.0, here->cdr_x2y, 0.0, here->cdr_xy2, 0.0, 0.0, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r2h11x, i2h11x, r2h11y, i2h11y, 0.0, 0.0); *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) -= temp; *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) -= itemp; *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp; /* cdrain term over */ /* loading ggs term */ temp = D1n3F1(here->ggs2, here->ggs3, r1h1x, i1h1x, r2h11x, i2h11x); itemp = D1i3F1(here->ggs2, here->ggs3, r1h1x, i1h1x, r2h11x, i2h11x); *(ckt->CKTrhs + (here->JFETgateNode)) -= temp; *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp; *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp; /* ggs over */ /* loading ggd term */ temp = D1n3F1(here->ggd2, here->ggd3, r1h1x - r1h1y, i1h1x - i1h1y, r2h11x - r2h11y, i2h11x - i2h11y); itemp = D1i3F1(here->ggd2, here->ggd3, r1h1x - r1h1y, i1h1x - i1h1y, r2h11x - r2h11y, i2h11x - i2h11y); *(ckt->CKTrhs + (here->JFETgateNode)) -= temp; *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp; *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) += itemp; /* ggd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1i3F1(here->capgs2, here->capgs3, r1h1x, i1h1x, r2h11x, i2h11x); itemp = ckt->CKTomega * D1n3F1(here->capgs2, here->capgs3, r1h1x, i1h1x, r2h11x, i2h11x); *(ckt->CKTrhs + (here->JFETgateNode)) -= temp; *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp; *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1i3F1(here->capgd2, here->capgd3, r1h1x - r1h1y, i1h1x - i1h1y, r2h11x - r2h11y, i2h11x - i2h11y); itemp = ckt->CKTomega * D1n3F1(here->capgd2, here->capgd3, r1h1x - r1h1y, i1h1x - i1h1y, r2h11x - r2h11y, i2h11x - i2h11y); *(ckt->CKTrhs + (here->JFETgateNode)) -= temp; *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp; *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) += itemp; /* capgd over */ /* all done */ break; case D_F1PF2: /* x = vgs, y = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->JFETgateNode)) - *(job->r1H1ptr + (here->JFETsourcePrimeNode)); i1h1x = *(job->i1H1ptr + (here->JFETgateNode)) - *(job->i1H1ptr + (here->JFETsourcePrimeNode)); r1h1y = *(job->r1H1ptr + (here->JFETdrainPrimeNode)) - *(job->r1H1ptr + (here->JFETsourcePrimeNode)); i1h1y = *(job->i1H1ptr + (here->JFETdrainPrimeNode)) - *(job->i1H1ptr + (here->JFETsourcePrimeNode)); r1h2x = *(job->r1H2ptr + (here->JFETgateNode)) - *(job->r1H2ptr + (here->JFETsourcePrimeNode)); i1h2x = *(job->i1H2ptr + (here->JFETgateNode)) - *(job->i1H2ptr + (here->JFETsourcePrimeNode)); r1h2y = *(job->r1H2ptr + (here->JFETdrainPrimeNode)) - *(job->r1H2ptr + (here->JFETsourcePrimeNode)); i1h2y = *(job->i1H2ptr + (here->JFETdrainPrimeNode)) - *(job->i1H2ptr + (here->JFETsourcePrimeNode)); /* loading starts here */ /* loading cdrain term */ temp = DFnF12(here->cdr_x2, here->cdr_y2, 0.0, here->cdr_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r1h2x, i1h2x, r1h2y, i1h2y, 0.0, 0.0); itemp = DFiF12(here->cdr_x2, here->cdr_y2, 0.0, here->cdr_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r1h2x, i1h2x, r1h2y, i1h2y, 0.0, 0.0); *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) -= temp; *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) -= itemp; *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp; /* cdrain term over */ /* loading ggs term */ temp = D1nF12(here->ggs2, r1h1x, i1h1x, r1h2x, i1h2x); itemp = D1iF12(here->ggs2, r1h1x, i1h1x, r1h2x, i1h2x); *(ckt->CKTrhs + (here->JFETgateNode)) -= temp; *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp; *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp; /* ggs over */ /* loading ggd term */ temp = D1nF12(here->ggd2, r1h1x - r1h1y, i1h1x - i1h1y, r1h2x - r1h2y, i1h2x - i1h2y); itemp = D1iF12(here->ggd2, r1h1x - r1h1y, i1h1x - i1h1y, r1h2x - r1h2y, i1h2x - i1h2y); *(ckt->CKTrhs + (here->JFETgateNode)) -= temp; *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp; *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) += itemp; /* ggd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1iF12(here->capgs2, r1h1x, i1h1x, r1h2x, i1h2x); itemp = ckt->CKTomega * D1nF12(here->capgs2, r1h1x, i1h1x, r1h2x, i1h2x); *(ckt->CKTrhs + (here->JFETgateNode)) -= temp; *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp; *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1iF12(here->capgd2, r1h1x - r1h1y, i1h1x - i1h1y, r1h2x - r1h2y, i1h2x - i1h2y); itemp = ckt->CKTomega * D1nF12(here->capgd2, r1h1x - r1h1y, i1h1x - i1h1y, r1h2x - r1h2y, i1h2x - i1h2y); *(ckt->CKTrhs + (here->JFETgateNode)) -= temp; *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp; *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) += itemp; /* capgd over */ /* all done */ break; case D_F1MF2: /* x = vgs, y = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->JFETgateNode)) - *(job->r1H1ptr + (here->JFETsourcePrimeNode)); i1h1x = *(job->i1H1ptr + (here->JFETgateNode)) - *(job->i1H1ptr + (here->JFETsourcePrimeNode)); r1h1y = *(job->r1H1ptr + (here->JFETdrainPrimeNode)) - *(job->r1H1ptr + (here->JFETsourcePrimeNode)); i1h1y = *(job->i1H1ptr + (here->JFETdrainPrimeNode)) - *(job->i1H1ptr + (here->JFETsourcePrimeNode)); r1hm2x = *(job->r1H2ptr + (here->JFETgateNode)) - *(job->r1H2ptr + (here->JFETsourcePrimeNode)); i1hm2x = -(*(job->i1H2ptr + (here->JFETgateNode)) - *(job->i1H2ptr + (here->JFETsourcePrimeNode))); r1hm2y = *(job->r1H2ptr + (here->JFETdrainPrimeNode)) - *(job->r1H2ptr + (here->JFETsourcePrimeNode)); i1hm2y = -(*(job->i1H2ptr + (here->JFETdrainPrimeNode)) - *(job->i1H2ptr + (here->JFETsourcePrimeNode))); /* loading starts here */ /* loading cdrain term */ temp = DFnF12(here->cdr_x2, here->cdr_y2, 0.0, here->cdr_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r1hm2x, i1hm2x, r1hm2y, i1hm2y, 0.0, 0.0); itemp = DFiF12(here->cdr_x2, here->cdr_y2, 0.0, here->cdr_xy, 0.0, 0.0, r1h1x, i1h1x, r1h1y, i1h1y, 0.0, 0.0, r1hm2x, i1hm2x, r1hm2y, i1hm2y, 0.0, 0.0); *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) -= temp; *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) -= itemp; *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp; /* cdrain term over */ /* loading ggs term */ temp = D1nF12(here->ggs2, r1h1x, i1h1x, r1hm2x, i1hm2x); itemp = D1iF12(here->ggs2, r1h1x, i1h1x, r1hm2x, i1hm2x); *(ckt->CKTrhs + (here->JFETgateNode)) -= temp; *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp; *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp; /* ggs over */ /* loading ggd term */ temp = D1nF12(here->ggd2, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y); itemp = D1iF12(here->ggd2, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y); *(ckt->CKTrhs + (here->JFETgateNode)) -= temp; *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp; *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) += itemp; /* ggd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1iF12(here->capgs2, r1h1x, i1h1x, r1hm2x, i1hm2x); itemp = ckt->CKTomega * D1nF12(here->capgs2, r1h1x, i1h1x, r1hm2x, i1hm2x); *(ckt->CKTrhs + (here->JFETgateNode)) -= temp; *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp; *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1iF12(here->capgd2, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y); itemp = ckt->CKTomega * D1nF12(here->capgd2, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y); *(ckt->CKTrhs + (here->JFETgateNode)) -= temp; *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp; *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) += itemp; /* capgd over */ /* all done */ break; case D_2F1MF2: /* x = vgs, y = vds */ /* getting first order (linear) Volterra kernel */ r1h1x = *(job->r1H1ptr + (here->JFETgateNode)) - *(job->r1H1ptr + (here->JFETsourcePrimeNode)); i1h1x = *(job->i1H1ptr + (here->JFETgateNode)) - *(job->i1H1ptr + (here->JFETsourcePrimeNode)); r1h1y = *(job->r1H1ptr + (here->JFETdrainPrimeNode)) - *(job->r1H1ptr + (here->JFETsourcePrimeNode)); i1h1y = *(job->i1H1ptr + (here->JFETdrainPrimeNode)) - *(job->i1H1ptr + (here->JFETsourcePrimeNode)); r2h11x = *(job->r2H11ptr + (here->JFETgateNode)) - *(job->r2H11ptr + (here->JFETsourcePrimeNode)); i2h11x = *(job->i2H11ptr + (here->JFETgateNode)) - *(job->i2H11ptr + (here->JFETsourcePrimeNode)); r2h11y = *(job->r2H11ptr + (here->JFETdrainPrimeNode)) - *(job->r2H11ptr + (here->JFETsourcePrimeNode)); i2h11y = *(job->i2H11ptr + (here->JFETdrainPrimeNode)) - *(job->i2H11ptr + (here->JFETsourcePrimeNode)); r1hm2x = *(job->r1H2ptr + (here->JFETgateNode)) - *(job->r1H2ptr + (here->JFETsourcePrimeNode)); i1hm2x = -(*(job->i1H2ptr + (here->JFETgateNode)) - *(job->i1H2ptr + (here->JFETsourcePrimeNode))); r1hm2y = *(job->r1H2ptr + (here->JFETdrainPrimeNode)) - *(job->r1H2ptr + (here->JFETsourcePrimeNode)); i1hm2y = -(*(job->i1H2ptr + (here->JFETdrainPrimeNode)) - *(job->i1H2ptr + (here->JFETsourcePrimeNode))); r2h1m2x = *(job->r2H1m2ptr + (here->JFETgateNode)) - *(job->r2H1m2ptr + (here->JFETsourcePrimeNode)); i2h1m2x = *(job->i2H1m2ptr + (here->JFETgateNode)) - *(job->i2H1m2ptr + (here->JFETsourcePrimeNode)); r2h1m2y = *(job->r2H1m2ptr + (here->JFETdrainPrimeNode)) - *(job->r2H1m2ptr + (here->JFETsourcePrimeNode)); i2h1m2y = *(job->i2H1m2ptr + (here->JFETdrainPrimeNode)) - *(job->i2H1m2ptr + (here->JFETsourcePrimeNode)); /* loading starts here */ /* loading cdrain term */ pass.cxx = here->cdr_x2; pass.cyy = here->cdr_y2; pass.czz = 0.0; pass.cxy = here->cdr_xy; pass.cyz = 0.0; pass.cxz = 0.0; pass.cxxx = here->cdr_x3; pass.cyyy = here->cdr_y3; pass.czzz = 0.0; pass.cxxy = here->cdr_x2y; pass.cxxz = 0.0; pass.cxyy = here->cdr_xy2; pass.cyyz = 0.0; pass.cxzz = 0.0; pass.cyzz = 0.0; pass.cxyz = 0.0; pass.r1h1x = r1h1x; pass.i1h1x = i1h1x; pass.r1h1y = r1h1y; pass.i1h1y = i1h1y; pass.r1h1z = 0.0; pass.i1h1z = 0.0; pass.r1h2x = r1hm2x; pass.i1h2x = i1hm2x; pass.r1h2y = r1hm2y; pass.i1h2y = i1hm2y; pass.r1h2z = 0.0; pass.i1h2z = 0.0; pass.r2h11x = r2h11x; pass.i2h11x = i2h11x; pass.r2h11y = r2h11y; pass.i2h11y = i2h11y; pass.r2h11z = 0.0; pass.i2h11z = 0.0; pass.h2f1f2x = r2h1m2x; pass.ih2f1f2x = i2h1m2x; pass.h2f1f2y = r2h1m2y; pass.ih2f1f2y = i2h1m2y; pass.h2f1f2z = 0.0; pass.ih2f1f2z = 0.0; temp = DFn2F12(&pass); itemp = DFi2F12(&pass); *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) -= temp; *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) -= itemp; *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp; /* cdrain term over */ /* loading ggs term */ temp = D1n2F12(here->ggs2, here->ggs3, r1h1x, i1h1x, r1hm2x, i1hm2x, r2h11x, i2h11x, r2h1m2x, i2h1m2x); itemp = D1i2F12(here->ggs2, here->ggs3, r1h1x, i1h1x, r1hm2x, i1hm2x, r2h11x, i2h11x, r2h1m2x, i2h1m2x); *(ckt->CKTrhs + (here->JFETgateNode)) -= temp; *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp; *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp; /* ggs over */ /* loading ggd term */ temp = D1n2F12(here->ggd2, here->ggd3, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y, r2h11x - r2h11y, i2h11x - i2h11y, r2h1m2x - r2h1m2y, i2h1m2x - i2h1m2y); itemp = D1i2F12(here->ggd2, here->ggd3, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y, r2h11x - r2h11y, i2h11x - i2h11y, r2h1m2x - r2h1m2y, i2h1m2x - i2h1m2y); *(ckt->CKTrhs + (here->JFETgateNode)) -= temp; *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp; *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) += itemp; /* ggd over */ /* loading capgs term */ temp = -ckt->CKTomega * D1i2F12(here->capgs2, here->capgs3, r1h1x, i1h1x, r1hm2x, i1hm2x, r2h11x, i2h11x, r2h1m2x, i2h1m2x); itemp = ckt->CKTomega * D1n2F12(here->capgs2, here->capgs3, r1h1x, i1h1x, r1hm2x, i1hm2x, r2h11x, i2h11x, r2h1m2x, i2h1m2x); *(ckt->CKTrhs + (here->JFETgateNode)) -= temp; *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp; *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp; /* capgs over */ /* loading capgd term */ temp = -ckt->CKTomega * D1i2F12(here->capgd2, here->capgd3, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y, r2h11x - r2h11y, i2h11x - i2h11y, r2h1m2x - r2h1m2y, i2h1m2x - i2h1m2y); itemp = ckt->CKTomega * D1n2F12(here->capgd2, here->capgd3, r1h1x - r1h1y, i1h1x - i1h1y, r1hm2x - r1hm2y, i1hm2x - i1hm2y, r2h11x - r2h11y, i2h11x - i2h11y, r2h1m2x - r2h1m2y, i2h1m2x - i2h1m2y); *(ckt->CKTrhs + (here->JFETgateNode)) -= temp; *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp; *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) += temp; *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) += itemp; /* capgd over */ /* all done */ break; default: ; } } } return(OK); } else return(E_BADPARM); } tmpk8ny_4pz/src/spicelib/devices/jfet/jfetmask.c0000644000175000017500000000612313546075722022065 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Mathew Lew and Thomas L. Quarles Sydney University mods Copyright(c) 1989 Anthony E. Parker, David J. Skellern Laboratory for Communication Science Engineering Sydney University Department of Electrical Engineering, Australia **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "jfetdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int JFETmAsk(CKTcircuit *ckt, GENmodel *inModel, int which, IFvalue *value) { JFETmodel *model = (JFETmodel*)inModel; NG_IGNORE(ckt); switch(which) { case JFET_MOD_TNOM: value->rValue = model->JFETtnom-CONSTCtoK; return(OK); case JFET_MOD_VTO: value->rValue = model->JFETthreshold; return(OK); case JFET_MOD_BETA: value->rValue = model->JFETbeta; return(OK); case JFET_MOD_LAMBDA: value->rValue = model->JFETlModulation; return(OK); /* Modification for Sydney University JFET model */ case JFET_MOD_B: value->rValue = model->JFETb; return(OK); /* end Sydney University mod */ case JFET_MOD_RD: value->rValue = model->JFETdrainResist; return(OK); case JFET_MOD_RS: value->rValue = model->JFETsourceResist; return(OK); case JFET_MOD_CGS: value->rValue = model->JFETcapGS; return(OK); case JFET_MOD_CGD: value->rValue = model->JFETcapGD; return(OK); case JFET_MOD_PB: value->rValue = model->JFETgatePotential; return(OK); case JFET_MOD_IS: value->rValue = model->JFETgateSatCurrent; return(OK); case JFET_MOD_FC: value->rValue = model->JFETdepletionCapCoeff; return(OK); case JFET_MOD_DRAINCONDUCT: value->rValue = model->JFETdrainConduct; return(OK); case JFET_MOD_SOURCECONDUCT: value->rValue = model->JFETsourceConduct; return(OK); case JFET_MOD_KF: value->rValue = model->JFETfNcoef; return(OK); case JFET_MOD_AF: value->rValue = model->JFETfNexp; return(OK); case JFET_MOD_TCV: value->rValue = model->JFETtcv; return(OK); case JFET_MOD_BEX: value->rValue = model->JFETbex; return(OK); case JFET_MOD_TYPE: if (model->JFETtype == NJF) value->sValue = "njf"; else value->sValue = "pjf"; return(OK); case JFET_MOD_NLEV: value->iValue = model->JFETnlev; return(OK); case JFET_MOD_GDSNOI: value->rValue = model->JFETgdsnoi; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/jfet/jfetext.h0000644000175000017500000000166613546075722021746 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ extern int JFETacLoad(GENmodel*,CKTcircuit*); extern int JFETask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int JFETgetic(GENmodel*,CKTcircuit*); extern int JFETload(GENmodel*,CKTcircuit*); extern int JFETmAsk(CKTcircuit*,GENmodel*,int,IFvalue*); extern int JFETmParam(int,IFvalue*,GENmodel*); extern int JFETparam(int,IFvalue*,GENinstance*,IFvalue*); extern int JFETpzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int JFETsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int JFETunsetup(GENmodel*,CKTcircuit*); extern int JFETtemp(GENmodel*,CKTcircuit*); extern int JFETtrunc(GENmodel*,CKTcircuit*,double*); extern int JFETdisto(int,GENmodel*,CKTcircuit*); extern int JFETnoise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int JFETdSetup(GENmodel*,CKTcircuit*); tmpk8ny_4pz/src/spicelib/devices/jfet/jfetpzld.c0000644000175000017500000000654513546075722022113 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "jfetdefs.h" #include "ngspice/suffix.h" int JFETpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { JFETmodel *model = (JFETmodel*)inModel; JFETinstance *here; double gdpr; double gspr; double gm; double gds; double ggs; double xgs; double ggd; double xgd; double m; for( ; model != NULL; model = JFETnextModel(model)) { for( here = JFETinstances(model); here != NULL; here = JFETnextInstance(here)) { m = here->JFETm; gdpr=model->JFETdrainConduct * here->JFETarea; gspr=model->JFETsourceConduct * here->JFETarea; gm= *(ckt->CKTstate0 + here->JFETgm) ; gds= *(ckt->CKTstate0 + here->JFETgds) ; ggs= *(ckt->CKTstate0 + here->JFETggs) ; xgs= *(ckt->CKTstate0 + here->JFETqgs) ; ggd= *(ckt->CKTstate0 + here->JFETggd) ; xgd= *(ckt->CKTstate0 + here->JFETqgd) ; *(here->JFETdrainDrainPtr ) += m * gdpr; *(here->JFETgateGatePtr ) += m * (ggd+ggs); *(here->JFETgateGatePtr ) += m * ((xgd+xgs) * s->real); *(here->JFETgateGatePtr +1) += m * ((xgd+xgs) * s->imag); *(here->JFETsourceSourcePtr ) += m * (gspr); *(here->JFETdrainPrimeDrainPrimePtr ) += m * (gdpr+gds+ggd); *(here->JFETdrainPrimeDrainPrimePtr ) += m * (xgd * s->real); *(here->JFETdrainPrimeDrainPrimePtr +1) += m * (xgd * s->imag); *(here->JFETsourcePrimeSourcePrimePtr ) += m * (gspr+gds+gm+ggs); *(here->JFETsourcePrimeSourcePrimePtr ) += m * (xgs * s->real); *(here->JFETsourcePrimeSourcePrimePtr +1) += m * (xgs * s->imag); *(here->JFETdrainDrainPrimePtr ) -= m * (gdpr); *(here->JFETgateDrainPrimePtr ) -= m * (ggd); *(here->JFETgateDrainPrimePtr ) -= m * (xgd * s->real); *(here->JFETgateDrainPrimePtr +1) -= m * (xgd * s->imag); *(here->JFETgateSourcePrimePtr ) -= m * (ggs); *(here->JFETgateSourcePrimePtr ) -= m * (xgs * s->real); *(here->JFETgateSourcePrimePtr +1) -= m * (xgs * s->imag); *(here->JFETsourceSourcePrimePtr ) -= m * (gspr); *(here->JFETdrainPrimeDrainPtr ) -= m * (gdpr); *(here->JFETdrainPrimeGatePtr ) += m * (-ggd+gm); *(here->JFETdrainPrimeGatePtr ) -= m * (xgd * s->real); *(here->JFETdrainPrimeGatePtr +1) -= m * (xgd * s->imag); *(here->JFETdrainPrimeSourcePrimePtr ) += m * (-gds-gm); *(here->JFETsourcePrimeGatePtr ) += m * (-ggs-gm); *(here->JFETsourcePrimeGatePtr ) -= m * (xgs * s->real); *(here->JFETsourcePrimeGatePtr +1) -= m * (xgs * s->imag); *(here->JFETsourcePrimeSourcePtr ) -= m * (gspr); *(here->JFETsourcePrimeDrainPrimePtr ) -= m * (gds); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/jfet/jfetset.c0000644000175000017500000001635613546075722021736 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes Sydney University mods Copyright(c) 1989 Anthony E. Parker, David J. Skellern Laboratory for Communication Science Engineering Sydney University Department of Electrical Engineering, Australia **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "jfetdefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int JFETsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* load the diode structure with those pointers needed later * for fast matrix loading */ { JFETmodel *model = (JFETmodel*)inModel; JFETinstance *here; int error; CKTnode *tmp; /* loop through all the diode models */ for( ; model != NULL; model = JFETnextModel(model)) { if( (model->JFETtype != NJF) && (model->JFETtype != PJF) ) { model->JFETtype = NJF; } if(!model->JFETthresholdGiven) { model->JFETthreshold = -2; } if(!model->JFETbetaGiven) { model->JFETbeta = 1e-4; } if(!model->JFETlModulationGiven) { model->JFETlModulation = 0; } if(!model->JFETdrainResistGiven) { model->JFETdrainResist = 0; } if(!model->JFETsourceResistGiven) { model->JFETsourceResist = 0; } if(!model->JFETcapGSGiven) { model->JFETcapGS = 0; } if(!model->JFETcapGDGiven) { model->JFETcapGD = 0; } if(!model->JFETgatePotentialGiven) { model->JFETgatePotential = 1; } if(!model->JFETgateSatCurrentGiven) { model->JFETgateSatCurrent = 1e-14; } if(!model->JFETdepletionCapCoeffGiven) { model->JFETdepletionCapCoeff = .5; } if(!model->JFETfNcoefGiven) { model->JFETfNcoef = 0; } if(!model->JFETfNexpGiven) { model->JFETfNexp = 1; } /* Modification for Sydney University JFET model */ if(!model->JFETbGiven) { model->JFETb = 1.0; } /* end Sydney University mod */ if(!model->JFETtcvGiven) { model->JFETtcv = 0.0; } if(!model->JFETbexGiven) { model->JFETbex = 0.0; } if(!model->JFETnlevGiven) { model->JFETnlev = 2; } if(!model->JFETgdsnoiGiven) { model->JFETgdsnoi = 1.0; } if(model->JFETdrainResist != 0) { model->JFETdrainConduct = 1/model->JFETdrainResist; } else { model->JFETdrainConduct = 0; } if(model->JFETsourceResist != 0) { model->JFETsourceConduct = 1/model->JFETsourceResist; } else { model->JFETsourceConduct = 0; } /* loop through all the instances of the model */ for (here = JFETinstances(model); here != NULL ; here=JFETnextInstance(here)) { if(!here->JFETareaGiven) { here->JFETarea = 1; } if(!here->JFETmGiven) { here->JFETm = 1; } here->JFETstate = *states; *states += JFETnumStates; if(model->JFETsourceResist != 0) { if(here->JFETsourcePrimeNode == 0) { error = CKTmkVolt(ckt,&tmp,here->JFETname,"source"); if(error) return(error); here->JFETsourcePrimeNode = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->JFETsourcePrimeNode = here->JFETsourceNode; } if(model->JFETdrainResist != 0) { if(here->JFETdrainPrimeNode == 0) { error = CKTmkVolt(ckt,&tmp,here->JFETname,"drain"); if(error) return(error); here->JFETdrainPrimeNode = tmp->number; if (ckt->CKTcopyNodesets) { CKTnode *tmpNode; IFuid tmpName; if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } } else { here->JFETdrainPrimeNode = here->JFETdrainNode; } /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(JFETdrainDrainPrimePtr,JFETdrainNode,JFETdrainPrimeNode); TSTALLOC(JFETgateDrainPrimePtr,JFETgateNode,JFETdrainPrimeNode); TSTALLOC(JFETgateSourcePrimePtr,JFETgateNode,JFETsourcePrimeNode); TSTALLOC(JFETsourceSourcePrimePtr,JFETsourceNode,JFETsourcePrimeNode); TSTALLOC(JFETdrainPrimeDrainPtr,JFETdrainPrimeNode,JFETdrainNode); TSTALLOC(JFETdrainPrimeGatePtr,JFETdrainPrimeNode,JFETgateNode); TSTALLOC(JFETdrainPrimeSourcePrimePtr,JFETdrainPrimeNode,JFETsourcePrimeNode); TSTALLOC(JFETsourcePrimeGatePtr,JFETsourcePrimeNode,JFETgateNode); TSTALLOC(JFETsourcePrimeSourcePtr,JFETsourcePrimeNode,JFETsourceNode); TSTALLOC(JFETsourcePrimeDrainPrimePtr,JFETsourcePrimeNode,JFETdrainPrimeNode); TSTALLOC(JFETdrainDrainPtr,JFETdrainNode,JFETdrainNode); TSTALLOC(JFETgateGatePtr,JFETgateNode,JFETgateNode); TSTALLOC(JFETsourceSourcePtr,JFETsourceNode,JFETsourceNode); TSTALLOC(JFETdrainPrimeDrainPrimePtr,JFETdrainPrimeNode,JFETdrainPrimeNode); TSTALLOC(JFETsourcePrimeSourcePrimePtr,JFETsourcePrimeNode,JFETsourcePrimeNode); } } return(OK); } int JFETunsetup(GENmodel *inModel, CKTcircuit *ckt) { JFETmodel *model; JFETinstance *here; for (model = (JFETmodel *)inModel; model != NULL; model = JFETnextModel(model)) { for (here = JFETinstances(model); here != NULL; here=JFETnextInstance(here)) { if (here->JFETdrainPrimeNode > 0 && here->JFETdrainPrimeNode != here->JFETdrainNode) CKTdltNNum(ckt, here->JFETdrainPrimeNode); here->JFETdrainPrimeNode = 0; if (here->JFETsourcePrimeNode > 0 && here->JFETsourcePrimeNode != here->JFETsourceNode) CKTdltNNum(ckt, here->JFETsourcePrimeNode); here->JFETsourcePrimeNode = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/jfet/jfetnoi.c0000644000175000017500000002122513546075722021717 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Gary W. Ng **********/ #include "ngspice/ngspice.h" #include "jfetdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" /* * JFETnoise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with JFET's. It starts with the model *firstModel and * traverses all of its insts. It then proceeds to any other models * on the linked list. The total output noise density generated by * all of the JFET's is summed with the variable "OnDens". */ int JFETnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; JFETmodel *firstModel = (JFETmodel *) genmodel; JFETmodel *model; JFETinstance *inst; double tempOnoise; double tempInoise; double noizDens[JFETNSRCS]; double lnNdens[JFETNSRCS]; int i; double vgs, vds, vgst, alpha, beta; /* define the names of the noise sources */ static char *JFETnNames[JFETNSRCS] = { /* Note that we have to keep the order */ "_rd", /* noise due to rd */ /* consistent with thestrchr definitions */ "_rs", /* noise due to rs */ /* in JFETdefs.h */ "_id", /* noise due to id */ "_1overf", /* flicker (1/f) noise */ "" /* total transistor noise */ }; for (model=firstModel; model != NULL; model=JFETnextModel(model)) { for (inst=JFETinstances(model); inst != NULL; inst=JFETnextInstance(inst)) { switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name all the noise generators */ if (job->NStpsSm != 0) { switch (mode) { case N_DENS: for (i=0; i < JFETNSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_%s%s", inst->JFETname, JFETnNames[i]); } break; case INT_NOIZ: for (i=0; i < JFETNSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total_%s%s", inst->JFETname, JFETnNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total_%s%s", inst->JFETname, JFETnNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: NevalSrc(&noizDens[JFETRDNOIZ],&lnNdens[JFETRDNOIZ], ckt,THERMNOISE,inst->JFETdrainPrimeNode,inst->JFETdrainNode, model->JFETdrainConduct * inst->JFETarea * inst->JFETm); NevalSrc(&noizDens[JFETRSNOIZ],&lnNdens[JFETRSNOIZ], ckt,THERMNOISE,inst->JFETsourcePrimeNode, inst->JFETsourceNode,model->JFETsourceConduct * inst->JFETarea * inst->JFETm); if (model->JFETnlev < 3) { NevalSrc(&noizDens[JFETIDNOIZ],&lnNdens[JFETIDNOIZ], ckt,THERMNOISE,inst->JFETdrainPrimeNode, inst->JFETsourcePrimeNode, (2.0/3.0 * inst->JFETm * fabs(*(ckt->CKTstate0 + inst->JFETgm)))); } else { vgs = *(ckt->CKTstate0 + inst->JFETvgs); vds = vgs - *(ckt->CKTstate0 + inst->JFETvgd); vgst = vgs - inst->JFETtThreshold; if (vgst >= vds) alpha = 1 - vds/vgst; /* linear region */ else alpha = 0; /* saturation region */ beta = inst->JFETtBeta * inst->JFETarea * inst->JFETm; NevalSrc(&noizDens[JFETIDNOIZ],&lnNdens[JFETIDNOIZ], ckt,THERMNOISE,inst->JFETdrainPrimeNode, inst->JFETsourcePrimeNode, (2.0/3.0 * beta*vgst*(1+alpha+alpha*alpha)/(1+alpha)*model->JFETgdsnoi)); } NevalSrc(&noizDens[JFETFLNOIZ], NULL, ckt, N_GAIN,inst->JFETdrainPrimeNode, inst->JFETsourcePrimeNode, (double)0.0); noizDens[JFETFLNOIZ] *= inst->JFETm * model->JFETfNcoef * exp(model->JFETfNexp * log(MAX(fabs(*(ckt->CKTstate0 + inst->JFETcd)),N_MINLOG))) / data->freq; lnNdens[JFETFLNOIZ] = log(MAX(noizDens[JFETFLNOIZ],N_MINLOG)); noizDens[JFETTOTNOIZ] = noizDens[JFETRDNOIZ] + noizDens[JFETRSNOIZ] + noizDens[JFETIDNOIZ] + noizDens[JFETFLNOIZ]; lnNdens[JFETTOTNOIZ] = log(MAX(noizDens[JFETTOTNOIZ], N_MINLOG)); *OnDens += noizDens[JFETTOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to */ /* initialize our "history" variables */ for (i=0; i < JFETNSRCS; i++) { inst->JFETnVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i=0; i < JFETNSRCS; i++) { inst->JFETnVar[OUTNOIZ][i] = 0.0; inst->JFETnVar[INNOIZ][i] = 0.0; } } } else { /* data->delFreq != 0.0 (we have to integrate) */ for (i=0; i < JFETNSRCS; i++) { if (i != JFETTOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], inst->JFETnVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv , lnNdens[i] + data->lnGainInv, inst->JFETnVar[LNLSTDENS][i] + data->lnGainInv, data); inst->JFETnVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { inst->JFETnVar[OUTNOIZ][i] += tempOnoise; inst->JFETnVar[OUTNOIZ][JFETTOTNOIZ] += tempOnoise; inst->JFETnVar[INNOIZ][i] += tempInoise; inst->JFETnVar[INNOIZ][JFETTOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i=0; i < JFETNSRCS; i++) { /* print a summary report */ data->outpVector[data->outNumber++] = noizDens[i]; } } break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { for (i=0; i < JFETNSRCS; i++) { data->outpVector[data->outNumber++] = inst->JFETnVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = inst->JFETnVar[INNOIZ][i]; } } /* if */ break; } /* switch (mode) */ break; case N_CLOSE: return (OK); /* do nothing, the main calling routine will close */ break; /* the plots */ } /* switch (operation) */ } /* for inst */ } /* for model */ return(OK); } tmpk8ny_4pz/src/spicelib/devices/jfet/jfetic.c0000644000175000017500000000214413546075722021524 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "jfetdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int JFETgetic(GENmodel *inModel, CKTcircuit *ckt) { JFETmodel *model = (JFETmodel*)inModel; JFETinstance *here; /* * grab initial conditions out of rhs array. User specified, so use * external nodes to get values */ for( ; model ; model = JFETnextModel(model)) { for(here = JFETinstances(model); here ; here = JFETnextInstance(here)) { if(!here->JFETicVDSGiven) { here->JFETicVDS = *(ckt->CKTrhs + here->JFETdrainNode) - *(ckt->CKTrhs + here->JFETsourceNode); } if(!here->JFETicVGSGiven) { here->JFETicVGS = *(ckt->CKTrhs + here->JFETgateNode) - *(ckt->CKTrhs + here->JFETsourceNode); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/jfet/jfettrun.c0000644000175000017500000000126313546075722022122 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "jfetdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int JFETtrunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { JFETmodel *model = (JFETmodel*)inModel; JFETinstance *here; for( ; model != NULL; model = JFETnextModel(model)) { for(here=JFETinstances(model);here!=NULL;here = JFETnextInstance(here)){ CKTterr(here->JFETqgs,ckt,timeStep); CKTterr(here->JFETqgd,ckt,timeStep); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/jfet/jfetitf.h0000644000175000017500000000026013546075722021715 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_JFET #define DEV_JFET SPICEdev *get_jfet_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/jfet/jfetacld.c0000644000175000017500000000537013546075722022040 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "jfetdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int JFETacLoad(GENmodel *inModel, CKTcircuit *ckt) { JFETmodel *model = (JFETmodel*)inModel; JFETinstance *here; double gdpr; double gspr; double gm; double gds; double ggs; double xgs; double ggd; double xgd; double m; for( ; model != NULL; model = JFETnextModel(model)) { for( here = JFETinstances(model); here != NULL; here = JFETnextInstance(here)) { gdpr=model->JFETdrainConduct * here->JFETarea; gspr=model->JFETsourceConduct * here->JFETarea; gm= *(ckt->CKTstate0 + here->JFETgm) ; gds= *(ckt->CKTstate0 + here->JFETgds) ; ggs= *(ckt->CKTstate0 + here->JFETggs) ; xgs= *(ckt->CKTstate0 + here->JFETqgs) * ckt->CKTomega ; ggd= *(ckt->CKTstate0 + here->JFETggd) ; xgd= *(ckt->CKTstate0 + here->JFETqgd) * ckt->CKTomega ; m = here->JFETm; *(here->JFETdrainDrainPtr ) += m * (gdpr); *(here->JFETgateGatePtr ) += m * (ggd+ggs); *(here->JFETgateGatePtr +1) += m * (xgd+xgs); *(here->JFETsourceSourcePtr ) += m * (gspr); *(here->JFETdrainPrimeDrainPrimePtr ) += m * (gdpr+gds+ggd); *(here->JFETdrainPrimeDrainPrimePtr +1) += m * (xgd); *(here->JFETsourcePrimeSourcePrimePtr ) += m * (gspr+gds+gm+ggs); *(here->JFETsourcePrimeSourcePrimePtr +1) += m * (xgs); *(here->JFETdrainDrainPrimePtr ) -= m * (gdpr); *(here->JFETgateDrainPrimePtr ) -= m * (ggd); *(here->JFETgateDrainPrimePtr +1) -= m * (xgd); *(here->JFETgateSourcePrimePtr ) -= m * (ggs); *(here->JFETgateSourcePrimePtr +1) -= m * (xgs); *(here->JFETsourceSourcePrimePtr ) -= m * (gspr); *(here->JFETdrainPrimeDrainPtr ) -= m * (gdpr); *(here->JFETdrainPrimeGatePtr ) += m * (-ggd+gm); *(here->JFETdrainPrimeGatePtr +1) -= m * (xgd); *(here->JFETdrainPrimeSourcePrimePtr ) += m * (-gds-gm); *(here->JFETsourcePrimeGatePtr ) += m * (-ggs-gm); *(here->JFETsourcePrimeGatePtr +1) -= m * (xgs); *(here->JFETsourcePrimeSourcePtr ) -= m * (gspr); *(here->JFETsourcePrimeDrainPrimePtr ) -= m * (gds); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/jfet/jfetinit.h0000644000175000017500000000037013546075722022100 0ustar carstencarsten#ifndef _JFETINIT_H #define _JFETINIT_H extern IFparm JFETpTable[ ]; extern IFparm JFETmPTable[ ]; extern char *JFETnames[ ]; extern int JFETpTSize; extern int JFETmPTSize; extern int JFETnSize; extern int JFETiSize; extern int JFETmSize; #endif tmpk8ny_4pz/src/spicelib/devices/jfet/jfetmpar.c0000644000175000017500000000646513546075722022102 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "jfetdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int JFETmParam(int param, IFvalue *value, GENmodel *inModels) { JFETmodel *model = (JFETmodel*)inModels; switch(param) { case JFET_MOD_TNOM: model->JFETtnomGiven = TRUE; model->JFETtnom = value->rValue+CONSTCtoK; break; case JFET_MOD_VTO: model->JFETthresholdGiven = TRUE; model->JFETthreshold = value->rValue; break; case JFET_MOD_BETA: model->JFETbetaGiven = TRUE; model->JFETbeta = value->rValue; break; case JFET_MOD_LAMBDA: model->JFETlModulationGiven = TRUE; model->JFETlModulation = value->rValue; break; case JFET_MOD_RD: model->JFETdrainResistGiven = TRUE; model->JFETdrainResist = value->rValue; break; case JFET_MOD_RS: model->JFETsourceResistGiven = TRUE; model->JFETsourceResist = value->rValue; break; case JFET_MOD_CGS: model->JFETcapGSGiven = TRUE; model->JFETcapGS = value->rValue; break; case JFET_MOD_CGD: model->JFETcapGDGiven = TRUE; model->JFETcapGD = value->rValue; break; case JFET_MOD_PB: model->JFETgatePotentialGiven = TRUE; model->JFETgatePotential = value->rValue; break; case JFET_MOD_IS: model->JFETgateSatCurrentGiven = TRUE; model->JFETgateSatCurrent = value->rValue; break; case JFET_MOD_FC: model->JFETdepletionCapCoeffGiven = TRUE; model->JFETdepletionCapCoeff = value->rValue; break; case JFET_MOD_NJF: if(value->iValue) { model->JFETtype = NJF; } break; case JFET_MOD_PJF: if(value->iValue) { model->JFETtype = PJF; } break; case JFET_MOD_KF: model->JFETfNcoefGiven = TRUE; model->JFETfNcoef = value->rValue; break; case JFET_MOD_AF: model->JFETfNexpGiven = TRUE; model->JFETfNexp = value->rValue; break; /* Modification for Sydney University JFET model */ case JFET_MOD_B: model->JFETbGiven = TRUE; model->JFETb = value->rValue; return(OK); /* end Sydney University mod */ case JFET_MOD_TCV: model->JFETtcvGiven = TRUE; model->JFETtcv = value->rValue; break; case JFET_MOD_BEX: model->JFETbexGiven = TRUE; model->JFETbex = value->rValue; break; case JFET_MOD_NLEV: model->JFETnlevGiven = TRUE; model->JFETnlev = value->iValue; break; case JFET_MOD_GDSNOI: model->JFETgdsnoiGiven = TRUE; model->JFETgdsnoi = value->rValue; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/jfet/jfetask.c0000644000175000017500000001202413546075722021705 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Mathew Lew and Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "jfetdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int JFETask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { JFETinstance *here = (JFETinstance*)inst; static char *msg = "Current and power not available for ac analysis"; NG_IGNORE(select); switch(which) { case JFET_TEMP: value->rValue = here->JFETtemp-CONSTCtoK; return(OK); case JFET_DTEMP: value->rValue = here->JFETdtemp; return(OK); case JFET_AREA: value->rValue = here->JFETarea; value->rValue *= here->JFETm; return(OK); case JFET_M: value->rValue = here->JFETm; return(OK); case JFET_IC_VDS: value->rValue = here->JFETicVDS; return(OK); case JFET_IC_VGS: value->rValue = here->JFETicVGS; return(OK); case JFET_OFF: value->iValue = here->JFEToff; return(OK); case JFET_DRAINNODE: value->iValue = here->JFETdrainNode; return(OK); case JFET_GATENODE: value->iValue = here->JFETgateNode; return(OK); case JFET_SOURCENODE: value->iValue = here->JFETsourceNode; return(OK); case JFET_DRAINPRIMENODE: value->iValue = here->JFETdrainPrimeNode; return(OK); case JFET_SOURCEPRIMENODE: value->iValue = here->JFETsourcePrimeNode; return(OK); case JFET_VGS: value->rValue = *(ckt->CKTstate0 + here->JFETvgs); return(OK); case JFET_VGD: value->rValue = *(ckt->CKTstate0 + here->JFETvgd); return(OK); case JFET_CG: value->rValue = *(ckt->CKTstate0 + here->JFETcg); value->rValue *= here->JFETm; return(OK); case JFET_CD: value->rValue = *(ckt->CKTstate0 + here->JFETcd); value->rValue *= here->JFETm; return(OK); case JFET_CGD: value->rValue = *(ckt->CKTstate0 + here->JFETcgd); value->rValue *= here->JFETm; return(OK); case JFET_GM: value->rValue = *(ckt->CKTstate0 + here->JFETgm); value->rValue *= here->JFETm; return(OK); case JFET_GDS: value->rValue = *(ckt->CKTstate0 + here->JFETgds); value->rValue *= here->JFETm; return(OK); case JFET_GGS: value->rValue = *(ckt->CKTstate0 + here->JFETggs); value->rValue *= here->JFETm; return(OK); case JFET_GGD: value->rValue = *(ckt->CKTstate0 + here->JFETggd); value->rValue *= here->JFETm; return(OK); case JFET_QGS: value->rValue = *(ckt->CKTstate0 + here->JFETqgs); value->rValue *= here->JFETm; return(OK); case JFET_CQGS: value->rValue = *(ckt->CKTstate0 + here->JFETcqgs); value->rValue *= here->JFETm; return(OK); case JFET_QGD: value->rValue = *(ckt->CKTstate0 + here->JFETqgd); value->rValue *= here->JFETm; return(OK); case JFET_CQGD: value->rValue = *(ckt->CKTstate0 + here->JFETcqgd); value->rValue *= here->JFETm; return(OK); case JFET_CS : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "JFETask"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = -*(ckt->CKTstate0 + here->JFETcd); value->rValue -= *(ckt->CKTstate0 + here->JFETcg); value->rValue *= here->JFETm; } return(OK); case JFET_POWER : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "JFETask"; strcpy(errMsg,msg); return(E_ASKPOWER); } else { value->rValue = *(ckt->CKTstate0 + here->JFETcd) * *(ckt->CKTrhsOld + here->JFETdrainNode); value->rValue += *(ckt->CKTstate0 + here->JFETcg) * *(ckt->CKTrhsOld + here->JFETgateNode); value->rValue -= (*(ckt->CKTstate0 + here->JFETcd) + *(ckt->CKTstate0 + here->JFETcg)) * *(ckt->CKTrhsOld + here->JFETsourceNode); value->rValue *= here->JFETm; } return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/jfet/jfetdset.c0000644000175000017500000002064613546075722022077 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury **********/ #include "ngspice/ngspice.h" #include "ngspice/distodef.h" #include "ngspice/cktdefs.h" #include "jfetdefs.h" #include "ngspice/const.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" int JFETdSetup(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current resistance value into the * sparse matrix previously provided */ { JFETmodel *model = (JFETmodel*)inModel; JFETinstance *here; double beta; double betap; double lcapgd1; double lcapgd2; double lcapgd3; double lcapgs2; double lcapgs3; double lcapgs1; double cd; double cdrain; double cg; double cgd; double csat; double czgd; double czgdf2; double czgs; double czgsf2; double evgd; double evgs; double fcpb2; double gdpr; double gds1; double gds2; double gds3; double lggd1; double lggd2; double lggd3; double lggs1; double lggs2; double lggs3; double gm1; double gm2; double gm3; double gmds; double gm2ds; double gmds2; double gspr; double sarg; double twob; double twop; double vds; double vgd; double vgs; double vgst; /* loop through all the models */ for( ; model != NULL; model = JFETnextModel(model)) { /* loop through all the instances of the model */ for (here = JFETinstances(model); here != NULL ; here=JFETnextInstance(here)) { /* * dc model parameters */ beta = here->JFETtBeta * here->JFETarea * here->JFETm; gdpr=model->JFETdrainConduct*here->JFETarea * here->JFETm; gspr=model->JFETsourceConduct*here->JFETarea * here-> JFETm; csat=here->JFETtSatCur*here->JFETarea * here-> JFETm; /* * initialization */ vgs= model->JFETtype*(*(ckt->CKTrhsOld + here->JFETgateNode) - *(ckt->CKTrhsOld + here->JFETsourcePrimeNode)); vgd= model->JFETtype*(*(ckt->CKTrhsOld + here->JFETgateNode) - *(ckt->CKTrhsOld + here->JFETdrainPrimeNode)); /* * determine dc current and derivatives */ vds=vgs-vgd; if (vds < 0.0) { vds = -vds; SWAP(double, vgs, vgd); /* so now these have become the local variables */ here->JFETmode = -1; } else { here->JFETmode = 1; } if (vgs <= -5*here->JFETtemp*CONSTKoverQ) { lggs1 = -csat/vgs+ckt->CKTgmin; lggs2=lggs3=0; cg = lggs1*vgs; } else { evgs = exp(vgs/(here->JFETtemp*CONSTKoverQ)); lggs1 = csat*evgs/(here->JFETtemp*CONSTKoverQ)+ckt->CKTgmin; lggs2 = (lggs1-ckt->CKTgmin)/((here->JFETtemp*CONSTKoverQ)*2); lggs3 = lggs2/(3*(here->JFETtemp*CONSTKoverQ)); cg = csat*(evgs-1)+ckt->CKTgmin*vgs; } if (vgd <= -5*(here->JFETtemp*CONSTKoverQ)) { lggd1 = -csat/vgd+ckt->CKTgmin; lggd2=lggd3=0; cgd = lggd1*vgd; } else { evgd = exp(vgd/(here->JFETtemp*CONSTKoverQ)); lggd1 = csat*evgd/(here->JFETtemp*CONSTKoverQ)+ckt->CKTgmin; lggd2 = (lggd1-ckt->CKTgmin)/((here->JFETtemp*CONSTKoverQ)*2); lggd3 = lggd2/(3*(here->JFETtemp*CONSTKoverQ)); cgd = csat*(evgd-1)+ckt->CKTgmin*vgd; } cg = cg+cgd; /* * compute drain current and derivatives */ vgst=vgs-here->JFETtThreshold; /* * cutoff region */ if (vgst <= 0) { cdrain=0; gm1=gm2=gm3=0; gds1=gds2=gds3=0; gmds=gm2ds=gmds2=0; } else { betap=beta*(1+model->JFETlModulation*vds); twob=betap+betap; if (vgst <= vds) { /* * normal mode, saturation region */ /* note - for cdrain, all the g's refer to the * derivatives which have not been divided to * become Taylor coeffs. A notational * inconsistency but simplifies processing later. */ cdrain=betap*vgst*vgst; gm1=twob*vgst; gm2=twob; gm3=0; gds1=model->JFETlModulation*beta*vgst*vgst; gds2=gds3=gmds2=0; gm2ds=2*model->JFETlModulation*beta; gmds=gm2ds*vgst; } else { /* * normal mode, linear region */ cdrain=betap*vds*(vgst+vgst-vds); gm1=twob*vds; gm2=0; gm3=0; gmds=(beta+beta)*(1+2*model->JFETlModulation*vds); gm2ds=0; gds2=2*beta*(2*model->JFETlModulation*vgst - 1 - 3*model->JFETlModulation*vds); gds1=beta*(2*(vgst-vds) + 4*vgst*vds* model->JFETlModulation - 3*model->JFETlModulation*vds*vds); gmds2=4*beta*model->JFETlModulation; gds3= -6*beta*model->JFETlModulation; } } /* * compute equivalent drain current source */ cd=cdrain-cgd; /* * charge storage elements */ czgs=here->JFETtCGS*here->JFETarea * here->JFETm; czgd=here->JFETtCGD*here->JFETarea * here->JFETm; twop=here->JFETtGatePot+here->JFETtGatePot; fcpb2=here->JFETcorDepCap*here->JFETcorDepCap; czgsf2=czgs/model->JFETf2; czgdf2=czgd/model->JFETf2; if (vgs < here->JFETcorDepCap) { sarg=sqrt(1-vgs/here->JFETtGatePot); lcapgs1=czgs/sarg; lcapgs2=lcapgs1/(here->JFETtGatePot*4*sarg*sarg); lcapgs3=lcapgs2/(here->JFETtGatePot*2*sarg*sarg); } else { lcapgs1=czgsf2*(model->JFETf3+vgs/twop); lcapgs2=czgsf2/twop*0.5; lcapgs3=0; } if (vgd < here->JFETcorDepCap) { sarg=sqrt(1-vgd/here->JFETtGatePot); lcapgd1=czgd/sarg; lcapgd2=lcapgd1/(here->JFETtGatePot*4*sarg*sarg); lcapgd3=lcapgd2/(here->JFETtGatePot*2*sarg*sarg); } else { lcapgd1=czgdf2*(model->JFETf3+vgd/twop); lcapgd2=czgdf2/twop*0.5; lcapgd3=0; } /* * process to get Taylor coefficients, taking into * account type and mode. */ if (here->JFETmode == 1) { /* normal mode - no source-drain interchange */ here->cdr_x = gm1; here->cdr_y = gds1; here->cdr_x2 = gm2; here->cdr_y2 = gds2; here->cdr_xy = gmds; here->cdr_x3 = gm3; here->cdr_y3 = gds3; here->cdr_x2y = gm2ds; here->cdr_xy2 = gmds2; here->ggs1 = lggs1; here->ggd1 = lggd1; here->ggs2 = lggs2; here->ggd2 = lggd2; here->ggs3 = lggs3; here->ggd3 = lggd3; here->capgs1 = lcapgs1; here->capgd1 = lcapgd1; here->capgs2 = lcapgs2; here->capgd2 = lcapgd2; here->capgs3 = lcapgs3; here->capgd3 = lcapgd3; } else { /* * inverse mode - source and drain interchanged */ here->cdr_x = -gm1; here->cdr_y = gm1 + gds1; here->cdr_x2 = -gm2; here->cdr_y2 = -(gm2 + gds2 + 2*gmds); here->cdr_xy = gm2 + gmds; here->cdr_x3 = -gm3; here->cdr_y3 = gm3 + gds3 + 3*(gm2ds + gmds2 ) ; here->cdr_x2y = gm3 + gm2ds; here->cdr_xy2 = -(gm3 + 2*gm2ds + gmds2); here->ggs1 = lggd1; here->ggd1 = lggs1; here->ggs2 = lggd2; here->ggd2 = lggs2; here->ggs3 = lggd3; here->ggd3 = lggs3; here->capgs1 = lcapgd1; here->capgd1 = lcapgs1; here->capgs2 = lcapgd2; here->capgd2 = lcapgs2; here->capgs3 = lcapgd3; here->capgd3 = lcapgs3; } /* now to adjust for type and multiply by factors to convert to Taylor coeffs. */ here->cdr_x2 = 0.5*model->JFETtype*here->cdr_x2; here->cdr_y2 = 0.5*model->JFETtype*here->cdr_y2; here->cdr_xy = model->JFETtype*here->cdr_xy; here->cdr_x3 = here->cdr_x3/6.; here->cdr_y3 = here->cdr_y3/6.; here->cdr_x2y = 0.5*here->cdr_x2y; here->cdr_xy2 = 0.5*here->cdr_xy2; here->ggs2 = model->JFETtype*lggs2; here->ggd2 = model->JFETtype*lggd2; here->capgs2 = model->JFETtype*lcapgs2; here->capgd2 = model->JFETtype*lcapgd2; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/jfet/jfetload.c0000644000175000017500000005243013546075722022053 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes Sydney University mods Copyright(c) 1989 Anthony E. Parker, David J. Skellern Laboratory for Communication Science Engineering Sydney University Department of Electrical Engineering, Australia **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "jfetdefs.h" #include "ngspice/const.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" int JFETload(GENmodel *inModel, CKTcircuit *ckt) /* actually load the current resistance value into the * sparse matrix previously provided */ { JFETmodel *model = (JFETmodel*)inModel; JFETinstance *here; double beta; double betap; double capgd; double capgs; double cd; double cdhat = 0.0; double cdrain; double cdreq; double ceq; double ceqgd; double ceqgs; double cg; double cgd; double cghat = 0.0; double csat; double czgd; double czgdf2; double czgs; double czgsf2; double delvds; double delvgd; double delvgs; double evgd; double evgs; double fcpb2; double gdpr; double gds; double geq; double ggd; double ggs; double gm; double gspr; double sarg; double twop; double vds; double vgd; double vgdt; double vgs; double vgst; #ifndef PREDICTOR double xfact; #endif /* Modification for Sydney University JFET model */ double vto; double apart,cpart; double Bfac; /* end Sydney University mod. */ int icheck; int ichk1; int error; double arg, vt_temp; double m; /* loop through all the models */ for( ; model != NULL; model = JFETnextModel(model)) { /* loop through all the instances of the model */ for (here = JFETinstances(model); here != NULL ; here=JFETnextInstance(here)) { /* * dc model parameters */ beta = here->JFETtBeta * here->JFETarea; gdpr=model->JFETdrainConduct*here->JFETarea; gspr=model->JFETsourceConduct*here->JFETarea; csat=here->JFETtSatCur*here->JFETarea; /* * initialization */ icheck=1; if( ckt->CKTmode & MODEINITSMSIG) { vgs= *(ckt->CKTstate0 + here->JFETvgs); vgd= *(ckt->CKTstate0 + here->JFETvgd); } else if (ckt->CKTmode & MODEINITTRAN) { vgs= *(ckt->CKTstate1 + here->JFETvgs); vgd= *(ckt->CKTstate1 + here->JFETvgd); } else if ( (ckt->CKTmode & MODEINITJCT) && (ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC) ) { vds=model->JFETtype*here->JFETicVDS; vgs=model->JFETtype*here->JFETicVGS; vgd=vgs-vds; } else if ( (ckt->CKTmode & MODEINITJCT) && (here->JFEToff == 0) ) { vgs = -1; vgd = -1; } else if( (ckt->CKTmode & MODEINITJCT) || ((ckt->CKTmode & MODEINITFIX) && (here->JFEToff))) { vgs = 0; vgd = 0; } else { #ifndef PREDICTOR if(ckt->CKTmode & MODEINITPRED) { xfact=ckt->CKTdelta/ckt->CKTdeltaOld[1]; *(ckt->CKTstate0 + here->JFETvgs)= *(ckt->CKTstate1 + here->JFETvgs); vgs=(1+xfact)* *(ckt->CKTstate1 + here->JFETvgs)-xfact* *(ckt->CKTstate2 + here->JFETvgs); *(ckt->CKTstate0 + here->JFETvgd)= *(ckt->CKTstate1 + here->JFETvgd); vgd=(1+xfact)* *(ckt->CKTstate1 + here->JFETvgd)-xfact* *(ckt->CKTstate2 + here->JFETvgd); *(ckt->CKTstate0 + here->JFETcg)= *(ckt->CKTstate1 + here->JFETcg); *(ckt->CKTstate0 + here->JFETcd)= *(ckt->CKTstate1 + here->JFETcd); *(ckt->CKTstate0 + here->JFETcgd)= *(ckt->CKTstate1 + here->JFETcgd); *(ckt->CKTstate0 + here->JFETgm)= *(ckt->CKTstate1 + here->JFETgm); *(ckt->CKTstate0 + here->JFETgds)= *(ckt->CKTstate1 + here->JFETgds); *(ckt->CKTstate0 + here->JFETggs)= *(ckt->CKTstate1 + here->JFETggs); *(ckt->CKTstate0 + here->JFETggd)= *(ckt->CKTstate1 + here->JFETggd); } else { #endif /*PREDICTOR*/ /* * compute new nonlinear branch voltages */ vgs=model->JFETtype* (*(ckt->CKTrhsOld+ here->JFETgateNode)- *(ckt->CKTrhsOld+ here->JFETsourcePrimeNode)); vgd=model->JFETtype* (*(ckt->CKTrhsOld+here->JFETgateNode)- *(ckt->CKTrhsOld+ here->JFETdrainPrimeNode)); #ifndef PREDICTOR } #endif /*PREDICTOR*/ delvgs=vgs- *(ckt->CKTstate0 + here->JFETvgs); delvgd=vgd- *(ckt->CKTstate0 + here->JFETvgd); delvds=delvgs-delvgd; cghat= *(ckt->CKTstate0 + here->JFETcg)+ *(ckt->CKTstate0 + here->JFETggd)*delvgd+ *(ckt->CKTstate0 + here->JFETggs)*delvgs; cdhat= *(ckt->CKTstate0 + here->JFETcd)+ *(ckt->CKTstate0 + here->JFETgm)*delvgs+ *(ckt->CKTstate0 + here->JFETgds)*delvds- *(ckt->CKTstate0 + here->JFETggd)*delvgd; /* * bypass if solution has not changed */ if((ckt->CKTbypass) && (!(ckt->CKTmode & MODEINITPRED)) && (fabs(delvgs) < ckt->CKTreltol*MAX(fabs(vgs), fabs(*(ckt->CKTstate0 + here->JFETvgs)))+ ckt->CKTvoltTol) ) if ( (fabs(delvgd) < ckt->CKTreltol*MAX(fabs(vgd), fabs(*(ckt->CKTstate0 + here->JFETvgd)))+ ckt->CKTvoltTol)) if ( (fabs(cghat-*(ckt->CKTstate0 + here->JFETcg)) < ckt->CKTreltol*MAX(fabs(cghat), fabs(*(ckt->CKTstate0 + here->JFETcg)))+ ckt->CKTabstol) ) if ( /* hack - expression too big */ (fabs(cdhat-*(ckt->CKTstate0 + here->JFETcd)) < ckt->CKTreltol*MAX(fabs(cdhat), fabs(*(ckt->CKTstate0 + here->JFETcd)))+ ckt->CKTabstol) ) { /* we can do a bypass */ vgs= *(ckt->CKTstate0 + here->JFETvgs); vgd= *(ckt->CKTstate0 + here->JFETvgd); vds= vgs-vgd; cg= *(ckt->CKTstate0 + here->JFETcg); cd= *(ckt->CKTstate0 + here->JFETcd); cgd= *(ckt->CKTstate0 + here->JFETcgd); gm= *(ckt->CKTstate0 + here->JFETgm); gds= *(ckt->CKTstate0 + here->JFETgds); ggs= *(ckt->CKTstate0 + here->JFETggs); ggd= *(ckt->CKTstate0 + here->JFETggd); goto load; } /* * limit nonlinear branch voltages */ ichk1=1; vgs = DEVpnjlim(vgs,*(ckt->CKTstate0 + here->JFETvgs), (here->JFETtemp*CONSTKoverQ), here->JFETvcrit, &icheck); vgd = DEVpnjlim(vgd,*(ckt->CKTstate0 + here->JFETvgd), (here->JFETtemp*CONSTKoverQ), here->JFETvcrit,&ichk1); if (ichk1 == 1) { icheck=1; } vgs = DEVfetlim(vgs,*(ckt->CKTstate0 + here->JFETvgs), here->JFETtThreshold); vgd = DEVfetlim(vgd,*(ckt->CKTstate0 + here->JFETvgd), here->JFETtThreshold); } /* * determine dc current and derivatives */ vds=vgs-vgd; vt_temp=here->JFETtemp*CONSTKoverQ; if (vgs < -3*vt_temp) { arg=3*vt_temp/(vgs*CONSTe); arg = arg * arg * arg; cg = -csat*(1+arg)+ckt->CKTgmin*vgs; ggs = csat*3*arg/vgs+ckt->CKTgmin; } else { evgs = exp(vgs/vt_temp); ggs = csat*evgs/vt_temp+ckt->CKTgmin; cg = csat*(evgs-1)+ckt->CKTgmin*vgs; } if (vgd < -3*vt_temp) { arg=3*vt_temp/(vgd*CONSTe); arg = arg * arg * arg; cgd = -csat*(1+arg)+ckt->CKTgmin*vgd; ggd = csat*3*arg/vgd+ckt->CKTgmin; } else { evgd = exp(vgd/vt_temp); ggd = csat*evgd/vt_temp+ckt->CKTgmin; cgd = csat*(evgd-1)+ckt->CKTgmin*vgd; } cg = cg+cgd; /* Modification for Sydney University JFET model */ vto = here->JFETtThreshold; if (vds >= 0) { vgst = vgs - vto; /* * compute drain current and derivatives for normal mode */ if (vgst <= 0) { /* * normal mode, cutoff region */ cdrain = 0; gm = 0; gds = 0; } else { betap = beta*(1 + model->JFETlModulation*vds); Bfac = model->JFETbFac; if (vgst >= vds) { /* * normal mode, linear region */ apart = 2*model->JFETb + 3*Bfac*(vgst - vds); cpart = vds*(vds*(Bfac*vds - model->JFETb)+vgst*apart); cdrain = betap*cpart; gm = betap*vds*(apart + 3*Bfac*vgst); gds = betap*(vgst - vds)*apart + beta*model->JFETlModulation*cpart; } else { Bfac = vgst*Bfac; gm = betap*vgst*(2*model->JFETb+3*Bfac); /* * normal mode, saturation region */ cpart=vgst*vgst*(model->JFETb+Bfac); cdrain = betap*cpart; gds = model->JFETlModulation*beta*cpart; } } } else { vgdt = vgd - vto; /* * compute drain current and derivatives for inverse mode */ if (vgdt <= 0) { /* * inverse mode, cutoff region */ cdrain = 0; gm = 0; gds = 0; } else { betap = beta*(1 - model->JFETlModulation*vds); Bfac = model->JFETbFac; if (vgdt + vds >= 0) { /* * inverse mode, linear region */ apart = 2*model->JFETb + 3*Bfac*(vgdt + vds); cpart = vds*(-vds*(-Bfac*vds-model->JFETb)+vgdt*apart); cdrain = betap*cpart; gm = betap*vds*(apart + 3*Bfac*vgdt); gds = betap*(vgdt + vds)*apart - beta*model->JFETlModulation*cpart - gm; } else { Bfac = vgdt*Bfac; gm = -betap*vgdt*(2*model->JFETb+3*Bfac); /* * inverse mode, saturation region */ cpart=vgdt*vgdt*(model->JFETb+Bfac); cdrain = - betap*cpart; gds = model->JFETlModulation*beta*cpart-gm; } } } #ifdef notdef /* The original section is now commented out */ /* end Sydney University mod */ /* * compute drain current and derivitives for normal mode */ if (vds >= 0) { vgst=vgs-here->JFETtThreshold; /* * normal mode, cutoff region */ if (vgst <= 0) { cdrain=0; gm=0; gds=0; } else { betap=beta*(1+model->JFETlModulation*vds); twob=betap+betap; if (vgst <= vds) { /* * normal mode, saturation region */ cdrain=betap*vgst*vgst; gm=twob*vgst; gds=model->JFETlModulation*beta*vgst*vgst; } else { /* * normal mode, linear region */ cdrain=betap*vds*(vgst+vgst-vds); gm=twob*vds; gds=twob*(vgst-vds)+model->JFETlModulation*beta* vds*(vgst+vgst-vds); } } } else { /* * compute drain current and derivitives for inverse mode */ vgdt=vgd-here->JFETtThreshold; if (vgdt <= 0) { /* * inverse mode, cutoff region */ cdrain=0; gm=0; gds=0; } else { /* * inverse mode, saturation region */ betap=beta*(1-model->JFETlModulation*vds); twob=betap+betap; if (vgdt <= -vds) { cdrain = -betap*vgdt*vgdt; gm = -twob*vgdt; gds = model->JFETlModulation*beta*vgdt*vgdt-gm; } else { /* * inverse mode, linear region */ cdrain=betap*vds*(vgdt+vgdt+vds); gm=twob*vds; gds=twob*vgdt-model->JFETlModulation*beta*vds* (vgdt+vgdt+vds); } } } /* end of original section, now deleted (replaced w/SU mod */ #endif /* * compute equivalent drain current source */ cd=cdrain-cgd; if ( (ckt->CKTmode & (MODEDCTRANCURVE | MODETRAN | MODEAC | MODEINITSMSIG) ) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) ){ /* * charge storage elements */ czgs=here->JFETtCGS*here->JFETarea; czgd=here->JFETtCGD*here->JFETarea; twop=here->JFETtGatePot+here->JFETtGatePot; fcpb2=here->JFETcorDepCap*here->JFETcorDepCap; czgsf2=czgs/model->JFETf2; czgdf2=czgd/model->JFETf2; if (vgs < here->JFETcorDepCap) { sarg=sqrt(1-vgs/here->JFETtGatePot); *(ckt->CKTstate0 + here->JFETqgs) = twop*czgs*(1-sarg); capgs=czgs/sarg; } else { *(ckt->CKTstate0 + here->JFETqgs) = czgs*here->JFETf1 + czgsf2*(model->JFETf3 *(vgs- here->JFETcorDepCap)+(vgs*vgs-fcpb2)/ (twop+twop)); capgs=czgsf2*(model->JFETf3+vgs/twop); } if (vgd < here->JFETcorDepCap) { sarg=sqrt(1-vgd/here->JFETtGatePot); *(ckt->CKTstate0 + here->JFETqgd) = twop*czgd*(1-sarg); capgd=czgd/sarg; } else { *(ckt->CKTstate0 + here->JFETqgd) = czgd*here->JFETf1+ czgdf2*(model->JFETf3* (vgd- here->JFETcorDepCap)+(vgd*vgd-fcpb2)/ (twop+twop)); capgd=czgdf2*(model->JFETf3+vgd/twop); } /* * store small-signal parameters */ if( (!(ckt->CKTmode & MODETRANOP)) || (!(ckt->CKTmode & MODEUIC)) ) { if(ckt->CKTmode & MODEINITSMSIG) { *(ckt->CKTstate0 + here->JFETqgs) = capgs; *(ckt->CKTstate0 + here->JFETqgd) = capgd; continue; /*go to 1000*/ } /* * transient analysis */ if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->JFETqgs) = *(ckt->CKTstate0 + here->JFETqgs); *(ckt->CKTstate1 + here->JFETqgd) = *(ckt->CKTstate0 + here->JFETqgd); } error = NIintegrate(ckt,&geq,&ceq,capgs,here->JFETqgs); if(error) return(error); ggs = ggs + geq; cg = cg + *(ckt->CKTstate0 + here->JFETcqgs); error = NIintegrate(ckt,&geq,&ceq,capgd,here->JFETqgd); if(error) return(error); ggd = ggd + geq; cg = cg + *(ckt->CKTstate0 + here->JFETcqgd); cd = cd - *(ckt->CKTstate0 + here->JFETcqgd); cgd = cgd + *(ckt->CKTstate0 + here->JFETcqgd); if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->JFETcqgs) = *(ckt->CKTstate0 + here->JFETcqgs); *(ckt->CKTstate1 + here->JFETcqgd) = *(ckt->CKTstate0 + here->JFETcqgd); } } } /* * check convergence */ if( (!(ckt->CKTmode & MODEINITFIX)) | (!(ckt->CKTmode & MODEUIC))) { if((icheck == 1) || (fabs(cghat-cg) >= ckt->CKTreltol * MAX(fabs(cghat), fabs(cg)) + ckt->CKTabstol) || (fabs(cdhat-cd) > ckt->CKTreltol * MAX(fabs(cdhat), fabs(cd)) + ckt->CKTabstol)) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; } } *(ckt->CKTstate0 + here->JFETvgs) = vgs; *(ckt->CKTstate0 + here->JFETvgd) = vgd; *(ckt->CKTstate0 + here->JFETcg) = cg; *(ckt->CKTstate0 + here->JFETcd) = cd; *(ckt->CKTstate0 + here->JFETcgd) = cgd; *(ckt->CKTstate0 + here->JFETgm) = gm; *(ckt->CKTstate0 + here->JFETgds) = gds; *(ckt->CKTstate0 + here->JFETggs) = ggs; *(ckt->CKTstate0 + here->JFETggd) = ggd; /* * load current vector */ load: m = here->JFETm; ceqgd=model->JFETtype*(cgd-ggd*vgd); ceqgs=model->JFETtype*((cg-cgd)-ggs*vgs); cdreq=model->JFETtype*((cd+cgd)-gds*vds-gm*vgs); *(ckt->CKTrhs + here->JFETgateNode) += m * (-ceqgs-ceqgd); *(ckt->CKTrhs + here->JFETdrainPrimeNode) += m * (-cdreq+ceqgd); *(ckt->CKTrhs + here->JFETsourcePrimeNode) += m * (cdreq+ceqgs); /* * load y matrix */ *(here->JFETdrainDrainPrimePtr) += m * (-gdpr); *(here->JFETgateDrainPrimePtr) += m * (-ggd); *(here->JFETgateSourcePrimePtr) += m * (-ggs); *(here->JFETsourceSourcePrimePtr) += m * (-gspr); *(here->JFETdrainPrimeDrainPtr) += m * (-gdpr); *(here->JFETdrainPrimeGatePtr) += m * (gm-ggd); *(here->JFETdrainPrimeSourcePrimePtr) += m * (-gds-gm); *(here->JFETsourcePrimeGatePtr) += m * (-ggs-gm); *(here->JFETsourcePrimeSourcePtr) += m * (-gspr); *(here->JFETsourcePrimeDrainPrimePtr) += m * (-gds); *(here->JFETdrainDrainPtr) += m * (gdpr); *(here->JFETgateGatePtr) += m * (ggd+ggs); *(here->JFETsourceSourcePtr) += m * (gspr); *(here->JFETdrainPrimeDrainPrimePtr) += m * (gdpr+gds+ggd); *(here->JFETsourcePrimeSourcePrimePtr) += m * (gspr+gds+gm+ggs); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/csw/0000755000175000017500000000000013546075722017757 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/csw/cswitf.h0000644000175000017500000000026413546075722021431 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_CSW #define DEV_CSW extern SPICEdev *get_csw_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/csw/csw.c0000644000175000017500000000274113546075722020723 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/devdefs.h" #include "cswdefs.h" #include "ngspice/suffix.h" IFparm CSWpTable[] = { /* parameters */ IOP("control", CSW_CONTROL, IF_INSTANCE, "Name of controlling source"), IP("on", CSW_IC_ON, IF_FLAG, "Initially closed"), IP("off", CSW_IC_OFF, IF_FLAG, "Initially open"), OPU("pos_node", CSW_POS_NODE, IF_INTEGER, "Positive node of switch"), OPU("neg_node", CSW_NEG_NODE, IF_INTEGER, "Negative node of switch"), OP("i", CSW_CURRENT, IF_REAL, "Switch current"), OP("p", CSW_POWER, IF_REAL, "Instantaneous power") }; IFparm CSWmPTable[] = { /* model parameters */ IOPU("csw", CSW_CSW, IF_FLAG, "Current controlled switch model"), IOPU("it", CSW_ITH, IF_REAL, "Threshold current"), IOPU("ih", CSW_IHYS, IF_REAL, "Hysterisis current"), IOPU("ron", CSW_RON, IF_REAL, "Closed resistance"), IOPU("roff", CSW_ROFF, IF_REAL, "Open resistance"), OPU("gon", CSW_GON, IF_REAL, "Closed conductance"), OPU("goff", CSW_GOFF, IF_REAL, "Open conductance") }; char *CSWnames[] = { "W+", "W-" }; int CSWnSize = NUMELEMS(CSWnames); int CSWpTSize = NUMELEMS(CSWpTable); int CSWmPTSize = NUMELEMS(CSWmPTable); int CSWiSize = sizeof(CSWinstance); int CSWmSize = sizeof(CSWmodel); tmpk8ny_4pz/src/spicelib/devices/csw/Makefile.am0000644000175000017500000000066113546075722022016 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libcsw.la libcsw_la_SOURCES = \ csw.c \ cswacld.c \ cswask.c \ cswdefs.h \ cswext.h \ cswinit.c \ cswinit.h \ cswitf.h \ cswload.c \ cswmask.c \ cswmpar.c \ cswnoise.c \ cswparam.c \ cswpzld.c \ cswsetup.c \ cswtrunc.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/csw/cswmask.c0000644000175000017500000000215613546075722021577 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ /* * This routine gives access to the internal model parameters * of Current controlled SWitch */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "cswdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CSWmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { CSWmodel *here = (CSWmodel *) inst; NG_IGNORE(ckt); switch (which) { case CSW_RON: value->rValue = here->CSWonResistance; return OK; case CSW_ROFF: value->rValue = here->CSWoffResistance; return OK; case CSW_ITH: value->rValue = here->CSWiThreshold; return OK; case CSW_IHYS: value->rValue = here->CSWiHysteresis; return OK; case CSW_GON: value->rValue = here->CSWonConduct; return OK; case CSW_GOFF: value->rValue = here->CSWoffConduct; return OK; default: return E_BADPARM; } } tmpk8ny_4pz/src/spicelib/devices/csw/cswacld.c0000644000175000017500000000162213546075722021544 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Gordon Jacobs **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "cswdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CSWacLoad(GENmodel *inModel, CKTcircuit *ckt) { CSWmodel *model = (CSWmodel *) inModel; CSWinstance *here; double g_now; int current_state; for (; model; model = CSWnextModel(model)) for (here = CSWinstances(model); here; here = CSWnextInstance(here)) { current_state = (int) ckt->CKTstate0[here->CSWswitchstate]; g_now = current_state ? model->CSWonConduct : model->CSWoffConduct; *(here->CSWposPosPtr) += g_now; *(here->CSWposNegPtr) -= g_now; *(here->CSWnegPosPtr) -= g_now; *(here->CSWnegNegPtr) += g_now; } return OK; } tmpk8ny_4pz/src/spicelib/devices/csw/cswext.h0000644000175000017500000000137413546075722021452 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Gordon M. Jacobs Modified: 2000 AlansFixes **********/ extern int CSWask(CKTcircuit *, GENinstance *, int, IFvalue *, IFvalue *); extern int CSWacLoad(GENmodel *, CKTcircuit *); extern int CSWload(GENmodel *, CKTcircuit *); extern int CSWmAsk(CKTcircuit *, GENmodel *, int, IFvalue *); extern int CSWmParam(int, IFvalue *, GENmodel *); extern int CSWparam(int, IFvalue *, GENinstance *, IFvalue *); extern int CSWpzLoad(GENmodel *, CKTcircuit *, SPcomplex *); extern int CSWsetup(SMPmatrix *, GENmodel *, CKTcircuit *, int *); extern int CSWnoise(int, int, GENmodel *, CKTcircuit *, Ndata *, double *); extern int CSWtrunc(GENmodel *, CKTcircuit *, double *); tmpk8ny_4pz/src/spicelib/devices/csw/cswinit.c0000644000175000017500000000313613546075722021606 0ustar carstencarsten/* Modified: 2000 AlansFixes */ #include "ngspice/config.h" #include "ngspice/devdefs.h" #include "cswitf.h" #include "cswext.h" #include "cswinit.h" SPICEdev CSWinfo = { .DEVpublic = { .name = "CSwitch", .description = "Current controlled ideal switch", .terms = &CSWnSize, .numNames = &CSWnSize, .termNames = CSWnames, .numInstanceParms = &CSWpTSize, .instanceParms = CSWpTable, .numModelParms = &CSWmPTSize, .modelParms = CSWmPTable, .flags = 0, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = CSWparam, .DEVmodParam = CSWmParam, .DEVload = CSWload, .DEVsetup = CSWsetup, .DEVunsetup = NULL, .DEVpzSetup = CSWsetup, .DEVtemperature = NULL, .DEVtrunc = CSWtrunc, .DEVfindBranch = NULL, .DEVacLoad = CSWacLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = NULL, .DEVask = CSWask, .DEVmodAsk = CSWmAsk, .DEVpzLoad = CSWpzLoad, .DEVconvTest = NULL, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = CSWnoise, .DEVsoaCheck = NULL, .DEVinstSize = &CSWiSize, .DEVmodSize = &CSWmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_csw_info(void) { return &CSWinfo; } tmpk8ny_4pz/src/spicelib/devices/csw/cswtrunc.c0000644000175000017500000000343113546075722021774 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "cswdefs.h" int CSWtrunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { CSWmodel *model = (CSWmodel *) inModel; CSWinstance *here; double lastChange, maxChange, maxStep, ref; for (; model; model = CSWnextModel(model)) for (here = CSWinstances(model); here; here = CSWnextInstance(here)) { lastChange = ckt->CKTstate0[here->CSWctrlvalue] - ckt->CKTstate1[here->CSWctrlvalue]; if (ckt->CKTstate0[here->CSWswitchstate] == 0) { ref = model->CSWiThreshold + model->CSWiHysteresis; if (ckt->CKTstate0[here->CSWctrlvalue] < ref && lastChange > 0) { maxChange = (ref - ckt->CKTstate0[here->CSWctrlvalue]) * 0.75 + 0.00005; maxStep = maxChange / lastChange * ckt->CKTdeltaOld[0]; if (*timeStep > maxStep) *timeStep = maxStep; } } else { ref = model->CSWiThreshold - model->CSWiHysteresis; if (ckt->CKTstate0[here->CSWctrlvalue] > ref && lastChange < 0) { maxChange = (ref - ckt->CKTstate0[here->CSWctrlvalue]) * 0.75 - 0.00005; maxStep = maxChange / lastChange * ckt->CKTdeltaOld[0]; if (*timeStep > maxStep) *timeStep = maxStep; } } } return OK; } tmpk8ny_4pz/src/spicelib/devices/csw/cswparam.c0000644000175000017500000000143413546075722021742 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Gordon Jacobs **********/ #include "ngspice/ngspice.h" #include "cswdefs.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CSWparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { CSWinstance *here = (CSWinstance *) inst; NG_IGNORE(select); switch (param) { case CSW_CONTROL: here->CSWcontName = value->uValue; break; case CSW_IC_ON: if (value->iValue) here->CSWzero_stateGiven = TRUE; break; case CSW_IC_OFF: if (value->iValue) here->CSWzero_stateGiven = FALSE; break; default: return E_BADPARM; } return OK; } tmpk8ny_4pz/src/spicelib/devices/csw/cswpzld.c0000644000175000017500000000172013546075722021611 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Gordon Jacobs **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "cswdefs.h" #include "ngspice/sperror.h" #include "ngspice/complex.h" #include "ngspice/suffix.h" int CSWpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { CSWmodel *model = (CSWmodel *) inModel; CSWinstance *here; double g_now; int current_state; NG_IGNORE(s); for (; model; model = CSWnextModel(model)) for (here = CSWinstances(model); here; here = CSWnextInstance(here)) { current_state = (int) ckt->CKTstate0[here->CSWswitchstate]; g_now = current_state ? model->CSWonConduct : model->CSWoffConduct; *(here->CSWposPosPtr) += g_now; *(here->CSWposNegPtr) -= g_now; *(here->CSWnegPosPtr) -= g_now; *(here->CSWnegNegPtr) += g_now; } return OK; } tmpk8ny_4pz/src/spicelib/devices/csw/cswdefs.h0000644000175000017500000000655613546075722021602 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Gordon M. Jacobs Modified: 2000 AlansFixes **********/ #ifndef CSW #define CSW #include "ngspice/ifsim.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" #include "ngspice/noisedef.h" #include "ngspice/complex.h" /* structures used to describe current controlled switches */ /* information to describe each instance */ typedef struct sCSWinstance { struct GENinstance gen; #define CSWmodPtr(inst) ((struct sCSWmodel *)((inst)->gen.GENmodPtr)) #define CSWnextInstance(inst) ((struct sCSWinstance *)((inst)->gen.GENnextInstance)) #define CSWname gen.GENname #define CSWstate gen.GENstate const int CSWposNode; /* number of positive node of switch */ const int CSWnegNode; /* number of negative node of switch */ int CSWcontBranch; /* number of branch of controlling current */ IFuid CSWcontName; /* name of controlling source */ double *CSWposPosPtr; /* pointer to sparse matrix diagonal at (positive,positive) for switch conductance */ double *CSWnegPosPtr; /* pointer to sparse matrix offdiagonal at (neagtive,positive) for switch conductance */ double *CSWposNegPtr; /* pointer to sparse matrix offdiagonal at (positive,neagtive) for switch conductance */ double *CSWnegNegPtr; /* pointer to sparse matrix diagonal at (neagtive,neagtive) for switch conductance */ double CSWcond; /* current conductance of switch */ unsigned CSWzero_stateGiven : 1; /* flag to indicate initial state */ #ifndef NONOISE double CSWnVar[NSTATVARS]; #else double *CSWnVar; #endif } CSWinstance; /* data per model */ #define CSW_ON_CONDUCTANCE 1.0 /* default on conductance = 1 mho */ #define CSW_OFF_CONDUCTANCE ckt->CKTgmin /* default off conductance */ #define CSW_NUM_STATES 2 #define CSWswitchstate CSWstate+0 #define CSWctrlvalue CSWstate+1 typedef struct sCSWmodel { /* model structure for a switch */ struct GENmodel gen; #define CSWmodType gen.GENmodType #define CSWnextModel(inst) ((struct sCSWmodel *)((inst)->gen.GENnextModel)) #define CSWinstances(inst) ((CSWinstance *) ((inst)->gen.GENinstances)) #define CSWmodName gen.GENmodName double CSWonResistance; /* switch "on" resistance */ double CSWoffResistance; /* switch "off" resistance */ double CSWiThreshold; /* switching threshold current */ double CSWiHysteresis; /* switching hysteresis current */ double CSWonConduct; /* switch "on" conductance */ double CSWoffConduct; /* switch "off" conductance */ unsigned CSWonGiven : 1; /* flag to indicate on-resistance was specified */ unsigned CSWoffGiven : 1; /* flag to indicate off-resistance was " */ unsigned CSWthreshGiven : 1; /* flag to indicate threshold volt was given */ unsigned CSWhystGiven : 1; /* flag to indicate hysteresis volt was given */ } CSWmodel; /* device parameters */ enum { CSW_CONTROL = 1, CSW_IC_ON, CSW_IC_OFF, CSW_POS_NODE, CSW_NEG_NODE, CSW_CURRENT, CSW_POWER, }; /* model parameters */ enum { CSW_CSW = 101, CSW_RON, CSW_ROFF, CSW_ITH, CSW_IHYS, CSW_GON, CSW_GOFF, }; /* device questions */ /* model questions */ #include "cswext.h" #endif tmpk8ny_4pz/src/spicelib/devices/csw/cswask.c0000644000175000017500000000364113546075722021422 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles **********/ /* * This routine gives access to the internal device parameters * of Current controlled SWitch */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "cswdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CSWask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { CSWinstance *here = (CSWinstance *) inst; static char *msg = "Current and power not available in ac analysis"; NG_IGNORE(select); switch (which) { case CSW_CONTROL: value->uValue = here->CSWcontName; return OK; case CSW_POS_NODE: value->iValue = here->CSWposNode; return OK; case CSW_NEG_NODE: value->iValue = here->CSWnegNode; return OK; case CSW_CURRENT: if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "CSWask"; strcpy(errMsg, msg); return E_ASKCURRENT; } else { value->rValue = (ckt->CKTrhsOld[here->CSWposNode] - ckt->CKTrhsOld[here->CSWnegNode]) * here->CSWcond; } return OK; case CSW_POWER: if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "CSWask"; strcpy(errMsg, msg); return E_ASKPOWER; } else { value->rValue = (ckt->CKTrhsOld[here->CSWposNode] - ckt->CKTrhsOld[here->CSWnegNode]) * (ckt->CKTrhsOld[here->CSWposNode] - ckt->CKTrhsOld[here->CSWnegNode]) * here->CSWcond; } return OK; default: return E_BADPARM; } } tmpk8ny_4pz/src/spicelib/devices/csw/cswload.c0000644000175000017500000001420513546075722021561 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Gordon Jacobs Modified: 2001 Jon Engelbert **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "cswdefs.h" #include "ngspice/fteext.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CSWload(GENmodel *inModel, CKTcircuit *ckt) { CSWmodel *model = (CSWmodel *) inModel; CSWinstance *here; double g_now; double i_ctrl; double previous_state = -1; double current_state = -1, old_current_state = -1; double REALLY_OFF = 0, REALLY_ON = 1; /* switch is on or off, not in hysteresis region. */ double HYST_OFF = 2, HYST_ON = 3; /* switch is on or off while control value is in hysteresis region. */ for (; model; model = CSWnextModel(model)) for (here = CSWinstances(model); here; here = CSWnextInstance(here)) { old_current_state = ckt->CKTstate0[here->CSWswitchstate]; previous_state = ckt->CKTstate1[here->CSWswitchstate]; i_ctrl = ckt->CKTrhsOld[here->CSWcontBranch]; /* decide the state of the switch */ if (ckt->CKTmode & (MODEINITFIX | MODEINITJCT)) { if (here->CSWzero_stateGiven) { /* switch specified "on" */ if (model->CSWiHysteresis >= 0 && i_ctrl > model->CSWiThreshold + model->CSWiHysteresis) current_state = REALLY_ON; else if (model->CSWiHysteresis < 0 && i_ctrl > model->CSWiThreshold - model->CSWiHysteresis) current_state = REALLY_ON; else current_state = HYST_ON; } else { if (model->CSWiHysteresis >= 0 && i_ctrl < model->CSWiThreshold - model->CSWiHysteresis) current_state = REALLY_OFF; else if (model->CSWiHysteresis < 0 && i_ctrl < model->CSWiThreshold + model->CSWiHysteresis) current_state = REALLY_OFF; else current_state = HYST_OFF; } } else if (ckt->CKTmode & (MODEINITSMSIG)) { current_state = previous_state; } else if (ckt->CKTmode & (MODEINITFLOAT)) { /* use state0 since INITTRAN or INITPRED already called */ if (model->CSWiHysteresis > 0) { if (i_ctrl > (model->CSWiThreshold + model->CSWiHysteresis)) current_state = REALLY_ON; else if (i_ctrl < (model->CSWiThreshold - model->CSWiHysteresis)) current_state = REALLY_OFF; else current_state = previous_state; } else { if (i_ctrl > (model->CSWiThreshold - model->CSWiHysteresis)) current_state = REALLY_ON; else if (i_ctrl < (model->CSWiThreshold + model->CSWiHysteresis)) current_state = REALLY_OFF; else { /* in hysteresis... change value if going from low to hysteresis, * or from hi to hysteresis. */ /* if previous state was in hysteresis, then don't change the state.. */ if (previous_state == HYST_OFF || previous_state == HYST_ON) current_state = previous_state; else if (previous_state == REALLY_ON) current_state = HYST_OFF; else if (previous_state == REALLY_OFF) current_state = HYST_ON; else internalerror("bad value for previous region in swload"); } } if (current_state != old_current_state) { ckt->CKTnoncon++; /* ensure one more iteration */ ckt->CKTtroubleElt = (GENinstance *) here; } } else if (ckt->CKTmode & (MODEINITTRAN | MODEINITPRED)) { if (model->CSWiHysteresis > 0) { if (i_ctrl > (model->CSWiThreshold + model->CSWiHysteresis)) current_state = REALLY_ON; else if (i_ctrl < (model->CSWiThreshold - model->CSWiHysteresis)) current_state = REALLY_OFF; else current_state = previous_state; } else { if (i_ctrl > (model->CSWiThreshold - model->CSWiHysteresis)) current_state = REALLY_ON; else if (i_ctrl < (model->CSWiThreshold + model->CSWiHysteresis)) current_state = REALLY_OFF; else { /* in hysteresis... change value if going from low to hysteresis, * or from hi to hysteresis. */ /* if previous state was in hysteresis, then don't change the state.. */ if (previous_state == HYST_OFF || previous_state == HYST_ON) current_state = previous_state; else if (previous_state == REALLY_ON) current_state = HYST_OFF; else if (previous_state == REALLY_OFF) current_state = HYST_ON; else internalerror("bad value for previous region in cswload"); } } } ckt->CKTstate0[here->CSWswitchstate] = current_state; ckt->CKTstate1[here->CSWswitchstate] = previous_state; if (current_state == REALLY_ON || current_state == HYST_ON) g_now = model->CSWonConduct; else g_now = model->CSWoffConduct; here->CSWcond = g_now; *(here->CSWposPosPtr) += g_now; *(here->CSWposNegPtr) -= g_now; *(here->CSWnegPosPtr) -= g_now; *(here->CSWnegNegPtr) += g_now; } return OK; } tmpk8ny_4pz/src/spicelib/devices/csw/cswinit.h0000644000175000017500000000035313546075722021611 0ustar carstencarsten#ifndef _CSWINIT_H #define _CSWINIT_H extern IFparm CSWpTable[]; extern IFparm CSWmPTable[]; extern char *CSWnames[]; extern int CSWpTSize; extern int CSWmPTSize; extern int CSWnSize; extern int CSWiSize; extern int CSWmSize; #endif tmpk8ny_4pz/src/spicelib/devices/csw/cswsetup.c0000644000175000017500000000413013546075722021776 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Gordon Jacobs **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "cswdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define TSTALLOC(ptr, first, second) \ do { \ if (!(here->ptr = SMPmakeElt(matrix, here->first, here->second))) \ return E_NOMEM; \ } while (0) int CSWsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { CSWmodel *model = (CSWmodel *) inModel; CSWinstance *here; for (; model; model = CSWnextModel(model)) { /* Default Value Processing for Switch Model */ if (!model->CSWthreshGiven) model->CSWiThreshold = 0; if (!model->CSWhystGiven) model->CSWiHysteresis = 0; if (!model->CSWonGiven) { model->CSWonConduct = CSW_ON_CONDUCTANCE; model->CSWonResistance = 1.0 / model->CSWonConduct; } if (!model->CSWoffGiven) { model->CSWoffConduct = CSW_OFF_CONDUCTANCE; model->CSWoffResistance = 1.0 / model->CSWoffConduct; } for (here = CSWinstances(model); here; here = CSWnextInstance(here)) { /* Default Value Processing for Switch Instance */ here->CSWstate = *states; *states += CSW_NUM_STATES; here->CSWcontBranch = CKTfndBranch(ckt, here->CSWcontName); if (here->CSWcontBranch == 0) { SPfrontEnd->IFerrorf(ERR_FATAL, "%s: unknown controlling source %s", here->CSWname, here->CSWcontName); return E_BADPARM; } TSTALLOC(CSWposPosPtr, CSWposNode, CSWposNode); TSTALLOC(CSWposNegPtr, CSWposNode, CSWnegNode); TSTALLOC(CSWnegPosPtr, CSWnegNode, CSWposNode); TSTALLOC(CSWnegNegPtr, CSWnegNode, CSWnegNode); } } return OK; } tmpk8ny_4pz/src/spicelib/devices/csw/cswnoise.c0000644000175000017500000001054013546075722021755 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Gary W. Ng **********/ #include "ngspice/ngspice.h" #include "cswdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" /* * CSWnoise (mode, operation, firstModel, ckt, data, OnDens) * This routine names and evaluates all of the noise sources * associated with current- controlled switches. It starts with the * model *firstModel and traverses all of its instances. It then * proceeds to any other models on the linked list. The total output * noise density generated by the CSW's is summed in the variable * "OnDens". */ int CSWnoise(int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; CSWmodel *firstModel = (CSWmodel *) genmodel; CSWmodel *model; CSWinstance *inst; double tempOutNoise; double tempInNoise; double noizDens; double lnNdens; int current_state; for (model = firstModel; model; model = CSWnextModel(model)) for (inst = CSWinstances(model); inst; inst = CSWnextInstance(inst)) { switch (operation) { case N_OPEN: /* see if we have to to produce a summary report */ /* if so, name the noise generator */ if (job->NStpsSm != 0) switch (mode) { case N_DENS: NOISE_ADD_OUTVAR(ckt, data, "onoise_%s%s", inst->CSWname, ""); break; case INT_NOIZ: NOISE_ADD_OUTVAR(ckt, data, "onoise_total_%s%s", inst->CSWname, ""); NOISE_ADD_OUTVAR(ckt, data, "inoise_total_%s%s", inst->CSWname, ""); break; } break; case N_CALC: switch (mode) { case N_DENS: current_state = (int) ckt->CKTstate0[inst->CSWswitchstate]; NevalSrc(&noizDens, &lnNdens, ckt, THERMNOISE, inst->CSWposNode, inst->CSWnegNode, current_state ? model->CSWonConduct : model->CSWoffConduct); *OnDens += noizDens; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to */ /* initialize our "history" variables */ inst->CSWnVar[LNLSTDENS] = lnNdens; /* clear out our integration variable if it's the first pass */ if (data->freq == job->NstartFreq) inst->CSWnVar[OUTNOIZ] = 0.0; } else { /* data->delFreq != 0.0 (we have to integrate) */ tempOutNoise = Nintegrate(noizDens, lnNdens, inst->CSWnVar[LNLSTDENS], data); tempInNoise = Nintegrate(noizDens * data->GainSqInv, lnNdens + data->lnGainInv, inst->CSWnVar[LNLSTDENS] + data->lnGainInv, data); inst->CSWnVar[OUTNOIZ] += tempOutNoise; inst->CSWnVar[INNOIZ] += tempInNoise; data->outNoiz += tempOutNoise; data->inNoise += tempInNoise; inst->CSWnVar[LNLSTDENS] = lnNdens; } if (data->prtSummary) data->outpVector[data->outNumber++] = noizDens; break; case INT_NOIZ: /* already calculated, just output */ if (job->NStpsSm != 0) { data->outpVector[data->outNumber++] = inst->CSWnVar[OUTNOIZ]; data->outpVector[data->outNumber++] = inst->CSWnVar[INNOIZ]; } break; } break; case N_CLOSE: return OK; /* do nothing, the main calling routine will close */ break; /* the plots */ } } return OK; } tmpk8ny_4pz/src/spicelib/devices/csw/cswmpar.c0000644000175000017500000000234213546075722021600 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Gordon Jacobs Modified: 2001 Jon Englebert **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "cswdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CSWmParam(int param, IFvalue *value, GENmodel *inModel) { CSWmodel *model = (CSWmodel *) inModel; switch (param) { case CSW_CSW: /* just says that this is a switch */ break; case CSW_RON: model->CSWonResistance = value->rValue; model->CSWonConduct = 1.0 / value->rValue; model->CSWonGiven = TRUE; break; case CSW_ROFF: model->CSWoffResistance = value->rValue; model->CSWoffConduct = 1.0 / value->rValue; model->CSWoffGiven = TRUE; break; case CSW_ITH: model->CSWiThreshold = value->rValue; model->CSWthreshGiven = TRUE; break; case CSW_IHYS: /* take absolute value of hysteresis voltage */ /* model->CSWiHysteresis = fabs(value->rValue); */ model->CSWiHysteresis = value->rValue; model->CSWhystGiven = TRUE; break; default: return E_BADPARM; } return OK; } tmpk8ny_4pz/src/spicelib/devices/ind/0000755000175000017500000000000013546075722017735 5ustar carstencarstentmpk8ny_4pz/src/spicelib/devices/ind/Makefile.am0000644000175000017500000000113313546075722021767 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libind.la libind_la_SOURCES = \ ind.c \ indacld.c \ indask.c \ inddefs.h \ indext.h \ indinit.c \ indinit.h \ inditf.h \ indload.c \ indmask.c \ indmpar.c \ indparam.c \ indpzld.c \ indsacl.c \ indsetup.c \ indsload.c \ indsprt.c \ indsset.c \ indsupd.c \ indtemp.c \ indtrunc.c \ mutacld.c \ mutask.c \ mutparam.c \ mutpzld.c \ mutsetup.c \ mutsprt.c \ mutsset.c \ muttemp.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/devices/ind/indpzld.c0000644000175000017500000000177413546075722021556 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "inddefs.h" #include "ngspice/suffix.h" /* ARGSUSED */ int INDpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { INDmodel *model = (INDmodel*)inModel; double val; INDinstance *here; NG_IGNORE(ckt); for( ; model != NULL; model = INDnextModel(model)) { for( here = INDinstances(model);here != NULL; here = INDnextInstance(here)) { val = here->INDinduct / here->INDm; *(here->INDposIbrPtr) += 1; *(here->INDnegIbrPtr) -= 1; *(here->INDibrPosPtr) += 1; *(here->INDibrNegPtr) -= 1; *(here->INDibrIbrPtr ) -= val * s->real; *(here->INDibrIbrPtr +1) -= val * s->imag; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ind/indsprt.c0000644000175000017500000000262613546075722021572 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ /* Pretty print the sensitivity info for all * the inductors in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "inddefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" void INDsPrint(GENmodel *inModel, CKTcircuit *ckt) { INDmodel *model = (INDmodel*)inModel; INDinstance *here; printf("INDUCTORS----------\n"); /* loop through all the inductor models */ for( ; model != NULL; model = INDnextModel(model)) { printf("Model name:%s\n",model->INDmodName); /* loop through all the instances of the model */ for (here = INDinstances(model); here != NULL ; here=INDnextInstance(here)) { printf(" Instance name:%s\n",here->INDname); printf(" Positive, negative nodes: %s, %s\n", CKTnodName(ckt,here->INDposNode),CKTnodName(ckt,here->INDnegNode)); printf(" Branch Equation: %s\n",CKTnodName(ckt,here->INDbrEq)); printf(" Inductance: %g ",here->INDinduct); printf(here->INDindGiven ? "(specified)\n" : "(default)\n"); printf(" INDsenParmNo:%d\n",here->INDsenParmNo); } } } tmpk8ny_4pz/src/spicelib/devices/ind/indask.c0000644000175000017500000001154713546075722021362 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "inddefs.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int INDask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { INDinstance *here = (INDinstance*)inst; double vr; double vi; double sr; double si; double vm; static char *msg = "Current and power not available for ac analysis"; switch(which) { case IND_FLUX: value->rValue = *(ckt->CKTstate0+here->INDflux); return(OK); case IND_VOLT: value->rValue = *(ckt->CKTstate0+here->INDvolt); return(OK); case IND_IND: value->rValue = here->INDinduct; return(OK); case IND_IC: value->rValue = here->INDinitCond; return(OK); case IND_TEMP: value->rValue = here->INDtemp - CONSTCtoK; return(OK); case IND_DTEMP: value->rValue = here->INDdtemp; return(OK); case IND_M: value->rValue = here->INDm; return(OK); case IND_TC1: value->rValue = here->INDtc1; return(OK); case IND_TC2: value->rValue = here->INDtc2; return(OK); case IND_SCALE: value->rValue = here->INDscale; return(OK); case IND_NT: value->rValue = here->INDnt; return(OK); case IND_CURRENT : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "INDask"; strcpy(errMsg,msg); return(E_ASKCURRENT); } else { value->rValue = *(ckt->CKTrhsOld + here->INDbrEq); } return(OK); case IND_POWER : if (ckt->CKTcurrentAnalysis & DOING_AC) { errMsg = TMALLOC(char, strlen(msg) + 1); errRtn = "INDask"; strcpy(errMsg,msg); return(E_ASKPOWER); } else { value->rValue = *(ckt->CKTrhsOld + here->INDbrEq) * *(ckt->CKTstate0+here->INDvolt); } return(OK); case IND_QUEST_SENS_DC: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_Sap[select->iValue + 1]+ here->INDsenParmNo); } return(OK); case IND_QUEST_SENS_REAL: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->INDsenParmNo); } return(OK); case IND_QUEST_SENS_IMAG: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->INDsenParmNo); } return(OK); case IND_QUEST_SENS_MAG: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = sqrt(vr*vr + vi*vi); if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->INDsenParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->INDsenParmNo); value->rValue = (vr * sr + vi * si)/vm; } return(OK); case IND_QUEST_SENS_PH: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = vr*vr + vi*vi; if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->INDsenParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->INDsenParmNo); value->rValue = (vr * si - vi * sr)/vm; } return(OK); case IND_QUEST_SENS_CPLX: if(ckt->CKTsenInfo){ value->cValue.real= *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->INDsenParmNo); value->cValue.imag= *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->INDsenParmNo); } return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/ind/muttemp.c0000644000175000017500000001761713546075722021610 0ustar carstencarsten/********** Copyright 2003 Paolo Nenzi Author: 2003 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "inddefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" static int cholesky(double *a, int n) { #define A(r,c) a[n*r + c] int i, j, k; for (i = 0; i < n; i++) for (j = 0; j <= i; j++) { double Summe = A(i, j); for (k = 0; k < j; k++) Summe -= A(i, k) * A(j, k); if (i > j) A(i, j) = Summe / A(j, j); else if (Summe > 0) A(i, i) = sqrt(Summe); else return 0; } return 1; #undef A } int MUTtemp(GENmodel *inModel, CKTcircuit *ckt) { MUTmodel *model = (MUTmodel*) inModel; MUTinstance *here; struct INDsystem *first_system = NULL; NG_IGNORE(ckt); for (; model; model = MUTnextModel(model)) for (here = MUTinstances(model); here; here = MUTnextInstance(here)) { /* Value Processing for mutual inductors */ double ind1 = here->MUTind1->INDinduct; double ind2 = here->MUTind2->INDinduct; /* _______ * M = k * \/L1 * L2 */ here->MUTfactor = here->MUTcoupling * sqrt(fabs(ind1 * ind2)); if (ckt->CKTindverbosity > 0) { struct INDsystem *system; if (!here->MUTind1->system && !here->MUTind2->system) { system = TMALLOC (struct INDsystem, 1); system->size = 2; system->next_system = first_system; first_system = system; system->first_ind = here->MUTind1; here->MUTind1->system_next_ind = here->MUTind2; here->MUTind2->system_next_ind = NULL; here->MUTind1->system = system; here->MUTind2->system = system; system->first_mut = here; here->system_next_mut = NULL; } else if (here->MUTind1->system && !here->MUTind2->system) { system = here->MUTind1->system; system->size++; here->MUTind2->system_next_ind = system->first_ind; system->first_ind = here->MUTind2; here->system_next_mut = system->first_mut; system->first_mut = here; here->MUTind2->system = system; } else if (!here->MUTind1->system && here->MUTind2->system) { system = here->MUTind2->system; system->size++; here->MUTind1->system_next_ind = system->first_ind; system->first_ind = here->MUTind1; here->system_next_mut = system->first_mut; system->first_mut = here; here->MUTind1->system = system; } else if (here->MUTind1->system == here->MUTind2->system) { system = here->MUTind2->system; here->system_next_mut = system->first_mut; system->first_mut = here; } else { struct INDsystem *s1 = here->MUTind1->system; struct INDsystem *s2 = here->MUTind2->system; MUTinstance *mut; INDinstance *ind; /* append s2 to s1, leave a consumed s2 behind */ s1->size += s2->size; s2->size = 0; for (ind = s2->first_ind; ind; ind = ind->system_next_ind) { ind->system = s1; if (!ind->system_next_ind) break; } ind->system_next_ind = s1->first_ind; s1->first_ind = s2->first_ind; s2->first_ind = NULL; for (mut = s2->first_mut; mut; mut = mut->system_next_mut) if (!mut->system_next_mut) break; mut->system_next_mut = s1->first_mut; here->system_next_mut = s2->first_mut; s1->first_mut = here; s2->first_mut = NULL; } } } if (first_system) { struct INDsystem *system; int sz = 0; for (system = first_system; system; system = system->next_system) if (sz < system->size) sz = system->size; char *pop = TMALLOC(char, sz * sz); double *INDmatrix = TMALLOC(double, sz * sz); for (system = first_system; system; system = system->next_system) { if (!system->size) continue; int positive, i; sz = system->size; memset(pop, 0, (size_t)(sz*sz)); memset(INDmatrix, 0, (size_t)(sz*sz) * sizeof(double)); INDinstance *ind = system->first_ind; for (i = 0; ind; ind = ind->system_next_ind) { INDmatrix [i * sz + i] = ind->INDinduct; ind->system_idx = i++; } MUTinstance *mut = system->first_mut; int expect = (sz*sz - sz) / 2; int repetitions = 0; for (; mut; mut = mut->system_next_mut) { int j = mut->MUTind1->system_idx; int k = mut->MUTind2->system_idx; if (j < k) SWAP(int, j, k); if (pop[j*sz + k]) { repetitions ++; } else { pop[j*sz + k] = 1; expect --; } INDmatrix [j * sz + k] = INDmatrix [k * sz + j] = mut->MUTfactor; } positive = cholesky(INDmatrix, sz); if (!positive) { positive = 1; /* ignore check if all |K| == 1 and all L >= 0 */ for (mut = system->first_mut; mut; mut = mut->system_next_mut) if (fabs(mut->MUTcoupling) != 1.0) { positive = 0; break; } for (ind = system->first_ind; ind; ind = ind->system_next_ind) if (ind->INDinduct < 0) { positive = 0; break; } } if (!positive || repetitions || (expect && ckt->CKTindverbosity > 1)) { fprintf(stderr, "The Inductive System consisting of\n"); for (ind = system->first_ind; ind; ind = ind->system_next_ind) fprintf(stderr, " %s", ind->INDname); fprintf(stderr, "\n"); for (mut = system->first_mut; mut; mut = mut->system_next_mut) fprintf(stderr, " %s", mut->MUTname); fprintf(stderr, "\n"); if (!positive) fprintf(stderr, "is not positive definite\n"); for (mut = system->first_mut; mut; mut = mut->system_next_mut) if (fabs(mut->MUTcoupling) > 1.0) fprintf(stderr, " |%s| > 1\n", mut->MUTname); for (ind = system->first_ind; ind; ind = ind->system_next_ind) if (ind->INDinduct < 0) fprintf(stderr, " %s < 0\n", ind->INDname); if (repetitions) fprintf(stderr, "has duplicate K instances\n"); if (expect && ckt->CKTindverbosity > 1) fprintf(stderr, "has an incomplete set of K couplings, (missing ones are implicitly 0)\n"); fprintf(stderr, "\n"); } } tfree(pop); tfree(INDmatrix); for (system = first_system; system;) { struct INDsystem *next_system = system->next_system; tfree(system); system = next_system; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ind/indsset.c0000644000175000017500000000173513546075722021560 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ /* loop through all the devices and * allocate parameter #s to design parameters */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "inddefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int INDsSetup(SENstruct *info, GENmodel *inModel) { INDmodel *model = (INDmodel*)inModel; INDinstance *here; /* loop through all the inductor models */ for( ; model != NULL; model = INDnextModel(model)) { /* loop through all the instances of the model */ for (here = INDinstances(model); here != NULL ; here=INDnextInstance(here)) { if(here->INDsenParmNo){ here->INDsenParmNo = ++(info->SENparms); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ind/indsupd.c0000644000175000017500000001156713546075722021561 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ /* update the charge sensitivities and their derivatives */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "inddefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int INDsUpdate(GENmodel *inModel, CKTcircuit *ckt) { INDmodel *model = (INDmodel*)inModel; INDinstance *here; double cind; double sxp; double s1; double s2; double s; int iparmno; double dummy1; double dummy2; SENstruct *info; MUTinstance *muthere; MUTmodel *mutmodel; double sxp1; double sxp2; double cind1,cind2; double rootl1,rootl2; int ktype; int itype; info = ckt->CKTsenInfo; if(ckt->CKTmode & MODEINITTRAN) return(OK); /* loop through all the inductor models */ for( ; model != NULL; model = INDnextModel(model)) { /* loop through all the instances of the model */ for (here = INDinstances(model); here != NULL ; here=INDnextInstance(here)) { for(iparmno = 1;iparmno<=info->SENparms;iparmno++){ cind = *(ckt->CKTrhsOld + here->INDbrEq); s = *(info->SEN_Sap[here->INDbrEq] + iparmno); sxp = here->INDinduct * s; #ifdef SENSDEBUG printf("iparmno = %d,s=%.5e,cind = %.5e\n",iparmno,s,cind); printf("sxp(before mut) = %.5e\n",sxp); #endif /* SENSDEBUG */ if(iparmno == here->INDsenParmNo) sxp += cind; *(ckt->CKTstate0 + here->INDsensxp + 2 * (iparmno - 1)) = sxp; } } } ktype = CKTtypelook("mutual"); mutmodel = (MUTmodel *)(ckt->CKThead[ktype]); /* loop through all the mutual inductor models */ for( ; mutmodel != NULL; mutmodel = MUTnextModel(mutmodel)) { /* loop through all the instances of the model */ for (muthere = MUTinstances(mutmodel); muthere != NULL ; muthere=MUTnextInstance(muthere)) { cind1 = *(ckt->CKTrhsOld + muthere->MUTind1->INDbrEq); cind2 = *(ckt->CKTrhsOld + muthere->MUTind2->INDbrEq); rootl1 = sqrt( muthere->MUTind1->INDinduct ); rootl2 = sqrt( muthere->MUTind2->INDinduct ); for(iparmno = 1;iparmno<=info->SENparms;iparmno++){ s1 = *(info->SEN_Sap[muthere->MUTind1->INDbrEq] + iparmno); s2 = *(info->SEN_Sap[muthere->MUTind2->INDbrEq] + iparmno); sxp2 = muthere->MUTcoupling*rootl1*rootl2 * s1; sxp1 = muthere->MUTcoupling*rootl1*rootl2 * s2; if(iparmno == muthere->MUTsenParmNo){ sxp1 += cind2 * rootl1 * rootl2; sxp2 += cind1 * rootl1 * rootl2; } if(iparmno == muthere->MUTind1->INDsenParmNo){ sxp1 += cind2 * muthere->MUTcoupling * rootl2 /(2 * rootl1); sxp2 += cind1 * muthere->MUTcoupling * rootl2 /(2 * rootl1); } if(iparmno == muthere->MUTind2->INDsenParmNo){ sxp1 += cind2 * muthere->MUTcoupling * rootl1 /(2 * rootl2); sxp2 += cind1 * muthere->MUTcoupling * rootl1 /(2 * rootl2); } *(ckt->CKTstate0 + muthere->MUTind1->INDsensxp + 2 * (iparmno - 1)) += sxp1; *(ckt->CKTstate0 + muthere->MUTind2->INDsensxp + 2 * (iparmno - 1)) += sxp2; #ifdef SENSDEBUG printf("iparmno = %d\n",iparmno); printf("sxp1 = %.5e,sxp2 = %.5e\n",sxp1,sxp2); #endif /* SENSDEBUG */ } } } itype = CKTtypelook("Inductor"); model = (INDmodel *)(ckt->CKThead[itype]); /* loop through all the inductor models */ for( ; model != NULL; model = INDnextModel(model)) { /* loop through all the instances of the model */ for (here = INDinstances(model); here != NULL ; here=INDnextInstance(here)) { for(iparmno = 1;iparmno<=info->SENparms;iparmno++){ if(ckt->CKTmode&MODETRANOP){ *(ckt->CKTstate0 + here->INDsensxp + 2 * (iparmno - 1) + 1) = 0; } else{ NIintegrate(ckt,&dummy1,&dummy2,here->INDinduct, (here->INDsensxp + 2*(iparmno - 1))); } #ifdef SENSDEBUG printf("sxp = %.5e,sdotxp = %.5e\n", *(ckt->CKTstate0 + here->INDsensxp + 2 * (iparmno - 1)), *(ckt->CKTstate0 + here->INDsensxp + 2 * (iparmno - 1) + 1)); #endif /* SENSDEBUG */ } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ind/ind.c0000644000175000017500000001000313546075722020645 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "inddefs.h" #include "ngspice/suffix.h" IFparm INDpTable[] = { /* parameters */ IOPAP("inductance",IND_IND, IF_REAL, "Inductance of inductor"), IOPAU("ic", IND_IC, IF_REAL, "Initial current through inductor"), IP( "sens_ind", IND_IND_SENS, IF_FLAG, "flag to request sensitivity WRT inductance"), IOPZU("temp", IND_TEMP, IF_REAL, "Instance operating temperature"), IOPZ( "dtemp", IND_DTEMP, IF_REAL, "Instance temperature difference with the rest of the circuit"), IOPU( "m", IND_M, IF_REAL, "Multiplication Factor"), IOPU( "tc1", IND_TC1, IF_REAL, "First order temp. coefficient"), IOPU( "tc2", IND_TC2, IF_REAL, "Second order temp. coefficient"), IOPU( "scale", IND_SCALE, IF_REAL, "Scale factor"), IOP( "nt", IND_NT, IF_REAL, "Number of turns"), OP( "flux", IND_FLUX, IF_REAL, "Flux through inductor"), OP( "v", IND_VOLT, IF_REAL, "Terminal voltage of inductor"), OPR( "volt", IND_VOLT, IF_REAL, ""), OP( "i", IND_CURRENT, IF_REAL, "Current through the inductor"), OPR( "current", IND_CURRENT, IF_REAL, ""), OP( "p", IND_POWER, IF_REAL, "instantaneous power dissipated by the inductor"), OPU( "sens_dc", IND_QUEST_SENS_DC, IF_REAL, "dc sensitivity sensitivity"), OPU( "sens_real", IND_QUEST_SENS_REAL, IF_REAL, "real part of ac sensitivity"), OPU( "sens_imag", IND_QUEST_SENS_IMAG, IF_REAL, "dc sensitivity and imag part of ac sensitivty"), OPU( "sens_mag", IND_QUEST_SENS_MAG, IF_REAL, "sensitivity of AC magnitude"), OPU( "sens_ph", IND_QUEST_SENS_PH, IF_REAL, "sensitivity of AC phase"), OPU( "sens_cplx", IND_QUEST_SENS_CPLX, IF_COMPLEX, "ac sensitivity") }; IFparm INDmPTable[] = { /* model parameters */ IOPA( "ind", IND_MOD_IND, IF_REAL,"Model inductance"), IOPA( "tc1", IND_MOD_TC1, IF_REAL,"First order temp. coefficient"), IOPA( "tc2", IND_MOD_TC2, IF_REAL,"Second order temp. coefficient"), IOPXU( "tnom", IND_MOD_TNOM, IF_REAL,"Parameter measurement temperature"), IOPA( "csect", IND_MOD_CSECT, IF_REAL,"Inductor cross section"), IOPA( "length", IND_MOD_LENGTH, IF_REAL,"Inductor length"), IOPA( "nt", IND_MOD_NT, IF_REAL,"Model number of turns"), IOPA( "mu", IND_MOD_MU, IF_REAL,"Relative magnetic permeability"), IP( "l", IND_MOD_L, IF_FLAG,"Inductor model") }; char *INDnames[] = { "L+", "L-" }; int INDnSize = NUMELEMS(INDnames); int INDpTSize = NUMELEMS(INDpTable); int INDmPTSize = NUMELEMS(INDmPTable); int INDiSize = sizeof(INDinstance); int INDmSize = sizeof(INDmodel); IFparm MUTpTable[] = { /* parameters */ IOPAP( "k", MUT_COEFF, IF_REAL , "Mutual inductance"), IOPAPR( "coefficient", MUT_COEFF, IF_REAL, ""), IOP( "inductor1", MUT_IND1, IF_INSTANCE, "First coupled inductor"), IOP( "inductor2", MUT_IND2, IF_INSTANCE, "Second coupled inductor"), IP( "sens_coeff", MUT_COEFF_SENS, IF_FLAG, "flag to request sensitivity WRT coupling factor"), OPU( "sens_dc", MUT_QUEST_SENS_DC, IF_REAL, "dc sensitivity "), OPU( "sens_real", MUT_QUEST_SENS_REAL, IF_REAL, "real part of ac sensitivity"), OPU( "sens_imag", MUT_QUEST_SENS_IMAG, IF_REAL, "dc sensitivity and imag part of ac sensitivty"), OPU( "sens_mag", MUT_QUEST_SENS_MAG, IF_REAL, "sensitivity of AC magnitude"), OPU( "sens_ph", MUT_QUEST_SENS_PH, IF_REAL, "sensitivity of AC phase"), OPU( "sens_cplx", MUT_QUEST_SENS_CPLX, IF_COMPLEX, "ac sensitivity") }; int MUTnSize = NUMELEMS(INDnames); int MUTpTSize = NUMELEMS(MUTpTable); int MUTmPTSize = 0; int MUTiSize = sizeof(INDinstance); int MUTmSize = sizeof(INDmodel); tmpk8ny_4pz/src/spicelib/devices/ind/mutparam.c0000644000175000017500000000163513546075722021734 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "inddefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int MUTparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { MUTinstance *here = (MUTinstance*)inst; NG_IGNORE(select); switch(param) { case MUT_COEFF: here->MUTcoupling = value->rValue; here->MUTindGiven = TRUE; break; case MUT_IND1: here->MUTindName1 = value->uValue; break; case MUT_IND2: here->MUTindName2 = value->uValue; break; case MUT_COEFF_SENS: here->MUTsenParmNo = value->iValue; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ind/indext.h0000644000175000017500000000260413546075722021403 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #ifndef _INDEXT_H #define _INDEXT_H extern int INDacLoad(GENmodel*,CKTcircuit*); extern int INDask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int INDmAsk(CKTcircuit*, GENmodel*, int, IFvalue*); extern int INDload(GENmodel*,CKTcircuit*); extern int INDmParam(int, IFvalue*, GENmodel*); extern int INDparam(int,IFvalue*,GENinstance*,IFvalue*); extern int INDpzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern int INDsAcLoad(GENmodel*,CKTcircuit*); extern int INDsLoad(GENmodel*,CKTcircuit*); extern void INDsPrint(GENmodel*,CKTcircuit*); extern int INDsSetup(SENstruct*,GENmodel*); extern int INDsUpdate(GENmodel*,CKTcircuit*); extern int INDsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int INDunsetup(GENmodel*,CKTcircuit*); extern int INDtemp(GENmodel*, CKTcircuit*); extern int INDtrunc(GENmodel*,CKTcircuit*,double*); extern int MUTacLoad(GENmodel*,CKTcircuit*); extern int MUTask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); extern int MUTparam(int,IFvalue*,GENinstance*,IFvalue*); extern int MUTpzLoad(GENmodel*,CKTcircuit*,SPcomplex*); extern void MUTsPrint(GENmodel*,CKTcircuit*); extern int MUTsSetup(SENstruct*,GENmodel*); extern int MUTsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int MUTtemp(GENmodel *inModel, CKTcircuit *ckt); #endif tmpk8ny_4pz/src/spicelib/devices/ind/indsload.c0000644000175000017500000001137013546075722021700 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ /* actually load the current ac sensitivity * information into the array previously provided */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "inddefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int INDsLoad(GENmodel *inModel, CKTcircuit *ckt) { INDmodel *model = (INDmodel*)inModel; INDinstance *here; int iparmno; double cind; double Osxp; double tag0; double tag1; SENstruct *info; MUTinstance *muthere; MUTmodel *mutmodel; double cind1; double cind2; double rootl1; double rootl2; int ktype; int itype; int IND1_brEq; int IND2_brEq; info = ckt->CKTsenInfo; if((info->SENmode == DCSEN)||(ckt->CKTmode&MODETRANOP)) return( OK ); if((info->SENmode == TRANSEN) && (ckt->CKTmode & MODEINITTRAN)) return(OK); #ifdef SENSDEBUG fprintf(stdout,"INDsenLoad\n"); fprintf(stdout,"time = %.5e\n",ckt->CKTtime); #endif /* SENSDEBUG */ tag0 = ckt->CKTag[0]; tag1 = ckt->CKTag[1]; if(ckt->CKTorder == 1){ tag1 = 0; } /* loop through all the inductor models */ for( ; model != NULL; model = INDnextModel(model)) { /* loop through all the instances of the model */ for (here = INDinstances(model); here != NULL ; here=INDnextInstance(here)) { } } ktype = CKTtypelook("mutual"); mutmodel = (MUTmodel *)(ckt->CKThead[ktype]); /* loop through all the mutual inductor models */ for( ; mutmodel != NULL; mutmodel = MUTnextModel(mutmodel)) { /* loop through all the instances of the model */ for (muthere = MUTinstances(mutmodel); muthere != NULL ; muthere=MUTnextInstance(muthere)) { if(muthere->MUTsenParmNo || muthere->MUTind1->INDsenParmNo || muthere->MUTind2->INDsenParmNo){ IND1_brEq = muthere->MUTind1->INDbrEq; IND2_brEq = muthere->MUTind2->INDbrEq; cind1 = *(ckt->CKTrhsOld + IND1_brEq); cind2 = *(ckt->CKTrhsOld + IND2_brEq); rootl1 = sqrt( muthere->MUTind1->INDinduct ); rootl2 = sqrt( muthere->MUTind2->INDinduct ); if(muthere->MUTsenParmNo){ *(info->SEN_RHS[IND1_brEq] + muthere->MUTsenParmNo) += tag0*cind2*rootl2*rootl1; *(info->SEN_RHS[IND2_brEq] + muthere->MUTsenParmNo) += tag0*cind1*rootl2*rootl1; } if(muthere->MUTind1->INDsenParmNo){ *(info->SEN_RHS[IND1_brEq] + muthere->MUTind1->INDsenParmNo) += tag0*cind2*muthere->MUTcoupling*rootl2 / (2*rootl1); *(info->SEN_RHS[IND2_brEq] + muthere->MUTind1->INDsenParmNo) += tag0*cind1*muthere->MUTcoupling*rootl2 / (2*rootl1); } if(muthere->MUTind2->INDsenParmNo){ *(info->SEN_RHS[IND1_brEq] + muthere->MUTind2->INDsenParmNo) += tag0*cind2*muthere->MUTcoupling*rootl1 / (2*rootl2); *(info->SEN_RHS[IND2_brEq] + muthere->MUTind2->INDsenParmNo) += tag0*cind1*muthere->MUTcoupling*rootl1 / (2*rootl2); } } #ifdef SENSDEBUG fprintf(stdout,"cind1 = %.5e,cind2 = %.5e\n",cind1,cind2); #endif /* SENSDEBUG */ } } itype = CKTtypelook("Inductor"); model = (INDmodel *)(ckt->CKThead[itype]); /* loop through all the inductor models */ for( ; model != NULL; model = INDnextModel(model)) { /* loop through all the instances of the model */ for (here = INDinstances(model); here != NULL ; here=INDnextInstance(here)) { cind = *(ckt->CKTrhsOld + here->INDbrEq); #ifdef SENSDEBUG fprintf(stdout,"\n cind=%.5e\n",cind); fprintf(stdout,"\n tag0=%.5e,tag1=%.5e\n",tag0,tag1); #endif /* SENSDEBUG */ for(iparmno = 1;iparmno<=info->SENparms;iparmno++){ Osxp = tag0 * *(ckt->CKTstate1 + here->INDsensxp + 2*(iparmno - 1)) + tag1 * *(ckt->CKTstate1 + here->INDsensxp + 2*(iparmno - 1) + 1); if(iparmno == here->INDsenParmNo) Osxp = Osxp - tag0 * cind; #ifdef SENSDEBUG fprintf(stdout,"\n Osxp=%.5e\n",Osxp); #endif /* SENSDEBUG */ *(info->SEN_RHS[here->INDbrEq] + iparmno) -= Osxp; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ind/indtrunc.c0000644000175000017500000000122013546075722021722 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "inddefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int INDtrunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { INDmodel *model = (INDmodel*)inModel; INDinstance *here; for( ; model!= NULL; model = INDnextModel(model)) { for(here = INDinstances(model); here != NULL ; here = INDnextInstance(here)) { CKTterr(here->INDflux,ckt,timeStep); } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ind/inditf.h0000644000175000017500000000031313546075722021360 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef DEV_IND #define DEV_IND SPICEdev *get_ind_info(void); SPICEdev *get_mut_info(void); #endif tmpk8ny_4pz/src/spicelib/devices/ind/mutsprt.c0000644000175000017500000000271213546075722021621 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ /* Pretty print the sensitivity info for all * the mutual inductors in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "inddefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ void MUTsPrint(GENmodel *inModel, CKTcircuit* ckt) { MUTmodel *model = (MUTmodel*)inModel; MUTinstance *here; NG_IGNORE(ckt); printf("MUTUAL INDUCTORS-----------------\n"); /* loop through all the inductor models */ for( ; model != NULL; model = MUTnextModel(model)) { printf("Model name:%s\n",model->MUTmodName); /* loop through all the instances of the model */ for (here = MUTinstances(model); here != NULL ; here=MUTnextInstance(here)) { printf(" Instance name:%s\n",here->MUTname); printf(" Mutual Inductance: %g ",here->MUTcoupling); printf(here->MUTindGiven ? "(specified)\n" : "(default)\n"); printf(" coupling factor: %g \n",here->MUTfactor); printf(" inductor 1 name: %s \n",here->MUTindName1); printf(" inductor 2 name: %s \n",here->MUTindName2); printf(" MUTsenParmNo:%d\n",here->MUTsenParmNo); } } } tmpk8ny_4pz/src/spicelib/devices/ind/indacld.c0000644000175000017500000000164113546075722021501 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "inddefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int INDacLoad(GENmodel *inModel, CKTcircuit *ckt) { INDmodel *model = (INDmodel*)inModel; double val; double m; INDinstance *here; for( ; model != NULL; model = INDnextModel(model)) { for( here = INDinstances(model);here != NULL; here = INDnextInstance(here)) { m = (here->INDm); val = ckt->CKTomega * here->INDinduct / m; *(here->INDposIbrPtr) += 1; *(here->INDnegIbrPtr) -= 1; *(here->INDibrPosPtr) += 1; *(here->INDibrNegPtr) -= 1; *(here->INDibrIbrPtr +1) -= val; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ind/indinit.c0000644000175000017500000000574013546075722021545 0ustar carstencarsten#include "ngspice/config.h" #include "ngspice/devdefs.h" #include "inditf.h" #include "indext.h" #include "indinit.h" SPICEdev INDinfo = { .DEVpublic = { .name = "Inductor", .description = "Fixed inductor", .terms = &INDnSize, .numNames = &INDnSize, .termNames = INDnames, .numInstanceParms = &INDpTSize, .instanceParms = INDpTable, .numModelParms = &INDmPTSize, .modelParms = INDmPTable, .flags = 0, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = INDparam, .DEVmodParam = INDmParam, .DEVload = INDload, .DEVsetup = INDsetup, .DEVunsetup = INDunsetup, .DEVpzSetup = INDsetup, .DEVtemperature = INDtemp, .DEVtrunc = INDtrunc, .DEVfindBranch = NULL, .DEVacLoad = INDacLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = NULL, .DEVask = INDask, .DEVmodAsk = INDmAsk, .DEVpzLoad = INDpzLoad, .DEVconvTest = NULL, .DEVsenSetup = INDsSetup, .DEVsenLoad = INDsLoad, .DEVsenUpdate = INDsUpdate, .DEVsenAcLoad = INDsAcLoad, .DEVsenPrint = INDsPrint, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &INDiSize, .DEVmodSize = &INDmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev MUTinfo = { .DEVpublic = { .name = "mutual", .description = "Mutual inductors", .terms = NULL, .numNames = NULL, .termNames = NULL, .numInstanceParms = &MUTpTSize, .instanceParms = MUTpTable, .numModelParms = NULL, .modelParms = NULL, .flags = 0, #ifdef XSPICE .cm_func = NULL, .num_conn = 0, .conn = NULL, .num_param = 0, .param = NULL, .num_inst_var = 0, .inst_var = NULL, #endif }, .DEVparam = MUTparam, .DEVmodParam = NULL, .DEVload = NULL, .DEVsetup = MUTsetup, .DEVunsetup = NULL, .DEVpzSetup = MUTsetup, .DEVtemperature = MUTtemp, .DEVtrunc = NULL, .DEVfindBranch = NULL, .DEVacLoad = MUTacLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, .DEVdelete = NULL, .DEVsetic = NULL, .DEVask = MUTask, .DEVmodAsk = NULL, .DEVpzLoad = MUTpzLoad, .DEVconvTest = NULL, .DEVsenSetup = MUTsSetup, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = MUTsPrint, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = NULL, .DEVsoaCheck = NULL, .DEVinstSize = &MUTiSize, .DEVmodSize = &MUTmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_ind_info(void) { return &INDinfo; } SPICEdev * get_mut_info(void) { return &MUTinfo; } tmpk8ny_4pz/src/spicelib/devices/ind/mutsset.c0000644000175000017500000000200213546075722021577 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ /* loop through all the devices and * allocate parameter #s to design parameters */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "inddefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int MUTsSetup(SENstruct *info, GENmodel *inModel) { MUTmodel *model = (MUTmodel*)inModel; MUTinstance *here; /* loop through all the inductor models */ for( ; model != NULL; model = MUTnextModel(model)) { /* loop through all the instances of the model */ for (here = MUTinstances(model); here != NULL ; here=MUTnextInstance(here)) { if(here->MUTsenParmNo){ here->MUTsenParmNo = ++(info->SENparms); } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ind/indtemp.c0000644000175000017500000000435213546075722021545 0ustar carstencarsten/********** Copyright 2003 Paolo Nenzi Author: 2003 Paolo Nenzi **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "inddefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int INDtemp(GENmodel *inModel, CKTcircuit *ckt) { INDmodel *model = (INDmodel*)inModel; INDinstance *here; double difference; double factor; double tc1, tc2; /* loop through all the inductor models */ for( ; model != NULL; model = INDnextModel(model)) { /* loop through all the instances of the model */ for (here = INDinstances(model); here != NULL ; here=INDnextInstance(here)) { /* Default Value Processing for Inductor Instance */ if(!here->INDtempGiven) { here->INDtemp = ckt->CKTtemp; if(!here->INDdtempGiven) here->INDdtemp = 0.0; } else { /* INDtempGiven */ here->INDdtemp = 0.0; if (here->INDdtempGiven) printf("%s: Instance temperature specified, dtemp ignored\n", here->INDname); } if (!here->INDscaleGiven) here->INDscale = 1.0; if (!here->INDmGiven) here->INDm = 1.0; if (!here->INDntGiven) here->INDnt = 0.0; if (!here->INDindGiven) { /* No instance inductance given */ if (here->INDntGiven) here->INDinduct = model->INDspecInd * here->INDnt * here->INDnt; else here->INDinduct = model->INDmInd; } difference = (here->INDtemp + here->INDdtemp) - model->INDtnom; /* instance parameters tc1 and tc2 will override model parameters tc1 and tc2 */ if (here->INDtc1Given) tc1 = here->INDtc1; /* instance */ else tc1 = model->INDtempCoeff1; /* model */ if (here->INDtc2Given) tc2 = here->INDtc2; else tc2 = model->INDtempCoeff2; factor = 1.0 + tc1*difference + tc2*difference*difference; here->INDinduct = here->INDinduct * factor * here->INDscale; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ind/indsetup.c0000644000175000017500000000711513546075722021740 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "inddefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int INDsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* load the inductor structure with those pointers needed later * for fast matrix loading */ { INDmodel *model = (INDmodel*)inModel; INDinstance *here; int error; CKTnode *tmp; /* loop through all the inductor models */ for( ; model != NULL; model = INDnextModel(model)) { /* Default Value Processing for Model Parameters */ if (!model->INDmIndGiven) { model->INDmInd = 0.0; } if (!model->INDtnomGiven) { model->INDtnom = ckt->CKTnomTemp; } if (!model->INDtc1Given) { model->INDtempCoeff1 = 0.0; } if (!model->INDtc2Given) { model->INDtempCoeff2 = 0.0; } if (!model->INDcsectGiven){ model->INDcsect = 0.0; } if (!model->INDlengthGiven) { model->INDlength = 0.0; } if (!model->INDmodNtGiven) { model->INDmodNt = 0.0; } if (!model->INDmuGiven) { model->INDmu = 0.0; } /* precompute specific inductance (one turn) */ if((model->INDlengthGiven) && (model->INDlength > 0.0)) { if (model->INDmuGiven) model->INDspecInd = (model->INDmu * CONSTmuZero * model->INDcsect * model->INDcsect) / model->INDlength; else model->INDspecInd = (CONSTmuZero * model->INDcsect * model->INDcsect ) / model->INDlength; } else { model->INDspecInd = 0.0; } if (!model->INDmIndGiven) model->INDmInd = model->INDmodNt * model->INDmodNt * model->INDspecInd; /* loop through all the instances of the model */ for (here = INDinstances(model); here != NULL ; here=INDnextInstance(here)) { here->INDflux = *states; *states += INDnumStates ; if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN) ){ *states += INDnumSenStates * (ckt->CKTsenInfo->SENparms); } if(here->INDbrEq == 0) { error = CKTmkCur(ckt,&tmp,here->INDname,"branch"); if(error) return(error); here->INDbrEq = tmp->number; } here->system = NULL; here->system_next_ind = NULL; /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ return(E_NOMEM);\ } } while(0) TSTALLOC(INDposIbrPtr,INDposNode,INDbrEq); TSTALLOC(INDnegIbrPtr,INDnegNode,INDbrEq); TSTALLOC(INDibrNegPtr,INDbrEq,INDnegNode); TSTALLOC(INDibrPosPtr,INDbrEq,INDposNode); TSTALLOC(INDibrIbrPtr,INDbrEq,INDbrEq); } } return(OK); } int INDunsetup(GENmodel *inModel, CKTcircuit *ckt) { INDmodel *model; INDinstance *here; for (model = (INDmodel *)inModel; model != NULL; model = INDnextModel(model)) { for (here = INDinstances(model); here != NULL; here=INDnextInstance(here)) { if (here->INDbrEq > 0) CKTdltNNum(ckt, here->INDbrEq); here->INDbrEq = 0; } } return OK; } tmpk8ny_4pz/src/spicelib/devices/ind/indload.c0000644000175000017500000001005713546075722021516 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* actually load the current inductance value into the * sparse matrix previously provided */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "inddefs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int INDload(GENmodel *inModel, CKTcircuit *ckt) { INDmodel *model = (INDmodel*)inModel; INDinstance *here; double veq; double req; double m; int error; MUTinstance *muthere; MUTmodel *mutmodel; int ktype; int itype; /* loop through all the inductor models */ for( ; model != NULL; model = INDnextModel(model)) { /* loop through all the instances of the model */ for (here = INDinstances(model); here != NULL ; here=INDnextInstance(here)) { m = (here->INDm); if(!(ckt->CKTmode & (MODEDC|MODEINITPRED))) { if(ckt->CKTmode & MODEUIC && ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate0 + here->INDflux) = here->INDinduct / m * here->INDinitCond; } else { *(ckt->CKTstate0 + here->INDflux) = here->INDinduct / m * *(ckt->CKTrhsOld + here->INDbrEq); } } } } ktype = CKTtypelook("mutual"); mutmodel = (MUTmodel *)(ckt->CKThead[ktype]); /* loop through all the mutual inductor models */ for( ; mutmodel != NULL; mutmodel = MUTnextModel(mutmodel)) { /* loop through all the instances of the model */ for (muthere = MUTinstances(mutmodel); muthere != NULL ; muthere=MUTnextInstance(muthere)) { if(!(ckt->CKTmode& (MODEDC|MODEINITPRED))) { *(ckt->CKTstate0 + muthere->MUTind1->INDflux) += muthere->MUTfactor * *(ckt->CKTrhsOld + muthere->MUTind2->INDbrEq); *(ckt->CKTstate0 + muthere->MUTind2->INDflux) += muthere->MUTfactor * *(ckt->CKTrhsOld + muthere->MUTind1->INDbrEq); } *(muthere->MUTbr1br2Ptr) -= muthere->MUTfactor*ckt->CKTag[0]; *(muthere->MUTbr2br1Ptr) -= muthere->MUTfactor*ckt->CKTag[0]; } } itype = CKTtypelook("Inductor"); model = (INDmodel *)(ckt->CKThead[itype]); /* loop through all the inductor models */ for( ; model != NULL; model = INDnextModel(model)) { /* loop through all the instances of the model */ for (here = INDinstances(model); here != NULL ; here=INDnextInstance(here)) { if(ckt->CKTmode & MODEDC) { req = 0.0; veq = 0.0; } else { double newmind; #ifndef PREDICTOR if(ckt->CKTmode & MODEINITPRED) { *(ckt->CKTstate0 + here->INDflux) = *(ckt->CKTstate1 + here->INDflux); } else { #endif /*PREDICTOR*/ if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->INDflux) = *(ckt->CKTstate0 + here->INDflux); } #ifndef PREDICTOR } #endif /*PREDICTOR*/ m = (here->INDm); newmind = here->INDinduct/m; error=NIintegrate(ckt,&req,&veq,newmind,here->INDflux); if(error) return(error); } *(ckt->CKTrhs+here->INDbrEq) += veq; if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1+here->INDvolt) = *(ckt->CKTstate0+here->INDvolt); } *(here->INDposIbrPtr) += 1; *(here->INDnegIbrPtr) -= 1; *(here->INDibrPosPtr) += 1; *(here->INDibrNegPtr) -= 1; *(here->INDibrIbrPtr) -= req; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ind/indmpar.c0000644000175000017500000000263313546075722021537 0ustar carstencarsten/********** Copyright 2003 Paolo Nenzi Author: 2003 Paolo Nenzi **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "inddefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int INDmParam(int param, IFvalue *value, GENmodel *inModel) { INDmodel *mod = (INDmodel*)inModel; switch(param) { case IND_MOD_IND: mod->INDmInd = value->rValue; mod->INDmIndGiven = TRUE; break; case IND_MOD_TNOM: mod->INDtnom = value->rValue+CONSTCtoK; mod->INDtnomGiven = TRUE; break; case IND_MOD_TC1: mod->INDtempCoeff1 = value->rValue; mod->INDtc1Given = TRUE; break; case IND_MOD_TC2: mod->INDtempCoeff2 = value->rValue; mod->INDtc2Given = TRUE; break; case IND_MOD_CSECT: mod->INDcsect = value->rValue; mod->INDcsectGiven = TRUE; break; case IND_MOD_LENGTH : mod->INDlength = value->rValue; mod->INDlengthGiven = TRUE; break; case IND_MOD_NT : mod->INDmodNt = value->rValue; mod->INDmodNtGiven = TRUE; break; case IND_MOD_MU: mod->INDmu = value->rValue; mod->INDmuGiven = TRUE; break; case IND_MOD_L: /* just being reassured by the user that we are an inductor */ /* no-op */ break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ind/mutpzld.c0000644000175000017500000000166013546075722021603 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/complex.h" #include "ngspice/sperror.h" #include "inddefs.h" #include "ngspice/suffix.h" /* ARGSUSED */ int MUTpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { MUTmodel *model = (MUTmodel*)inModel; double val; MUTinstance *here; NG_IGNORE(ckt); for( ; model != NULL; model = MUTnextModel(model)) { for( here = MUTinstances(model);here != NULL; here = MUTnextInstance(here)) { val = here->MUTfactor; *(here->MUTbr1br2Ptr ) -= val * s->real; *(here->MUTbr1br2Ptr +1) -= val * s->imag; *(here->MUTbr2br1Ptr ) -= val * s->real; *(here->MUTbr2br1Ptr +1) -= val * s->imag; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ind/indsacl.c0000644000175000017500000001416713546075722021527 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles This function is obsolete (was used by an old sensitivity analysis) **********/ /* actually load the current ac sensitivity * information into the array previously provided */ #include "ngspice/ngspice.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "inddefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int INDsAcLoad(GENmodel *inModel, CKTcircuit *ckt) { INDmodel *model = (INDmodel*)inModel; INDinstance *here; double cind,icind,val,ival; MUTinstance *muthere; MUTmodel *mutmodel; double cind1; double icind1; double cind2; double icind2; double val11; double ival11; double val12; double ival12; double val13; double ival13; double val21; double ival21; double val22; double ival22; double val23; double ival23; double rootl1; double rootl2; double w; double k1; double k2; int ktype; int itype; SENstruct *info; info = ckt->CKTsenInfo; /* loop through all the inductor models */ for( ; model != NULL; model = INDnextModel(model)) { /* loop through all the instances of the model */ for (here = INDinstances(model); here != NULL ; here=INDnextInstance(here)) { } } ktype = CKTtypelook("mutual"); mutmodel = (MUTmodel *)(ckt->CKThead[ktype]); /* loop through all the mutual inductor models */ for( ; mutmodel != NULL; mutmodel = MUTnextModel(mutmodel)) { /* loop through all the instances of the model */ for (muthere = MUTinstances(mutmodel); muthere != NULL ; muthere=MUTnextInstance(muthere)) { if(muthere->MUTsenParmNo || muthere->MUTind1->INDsenParmNo || muthere->MUTind2->INDsenParmNo){ cind1 = *(ckt->CKTrhsOld + muthere->MUTind1->INDbrEq); icind1 = *(ckt->CKTirhsOld + muthere->MUTind1->INDbrEq); cind2 = *(ckt->CKTrhsOld + muthere->MUTind2->INDbrEq); icind2 = *(ckt->CKTirhsOld + muthere->MUTind2->INDbrEq); rootl1 = sqrt(muthere->MUTind1->INDinduct) ; rootl2 = sqrt(muthere->MUTind2->INDinduct) ; k1 = 0.5 * muthere->MUTcoupling * rootl2 / rootl1 ; k2 = 0.5 * muthere->MUTcoupling * rootl1 / rootl2 ; w = ckt->CKTomega ; /* load the RHS matrix */ if(muthere->MUTind1->INDsenParmNo){ val11 = - (w * (k1 * icind2)); ival11 = w * (k1 * cind2); val21 = - ( w * k1 * icind1) ; ival21 = w * k1 * cind1 ; *(info->SEN_RHS[muthere->MUTind1->INDbrEq] + muthere->MUTind1->INDsenParmNo) += val11; *(info->SEN_iRHS[muthere->MUTind1->INDbrEq] + muthere->MUTind1->INDsenParmNo) += ival11; *(info->SEN_RHS[muthere->MUTind2->INDbrEq] + muthere->MUTind1->INDsenParmNo) += val21; *(info->SEN_iRHS[muthere->MUTind2->INDbrEq] + muthere->MUTind1->INDsenParmNo) += ival21; } if(muthere->MUTind2->INDsenParmNo){ val12 = -( w * k2 * icind2) ; ival12 = w * k2 * cind2 ; val22 = - (w * ( k2 * icind1)); ival22 = w * ( k2 * cind1); *(info->SEN_RHS[muthere->MUTind1->INDbrEq] + muthere->MUTind2->INDsenParmNo) += val12; *(info->SEN_iRHS[muthere->MUTind1->INDbrEq] + muthere->MUTind2->INDsenParmNo) += ival12; *(info->SEN_RHS[muthere->MUTind2->INDbrEq] + muthere->MUTind2->INDsenParmNo) += val22; *(info->SEN_iRHS[muthere->MUTind2->INDbrEq] + muthere->MUTind2->INDsenParmNo) += ival22; } if(muthere->MUTsenParmNo){ val13 = - w * rootl1 * rootl2 * icind2; ival13 = w * rootl1 * rootl2 * cind2; val23 = - (w * rootl1 * rootl2 * icind1); ival23 = w * rootl1 * rootl2 * cind1; *(info->SEN_RHS[muthere->MUTind1->INDbrEq] + muthere->MUTsenParmNo) += val13; *(info->SEN_iRHS[muthere->MUTind1->INDbrEq] + muthere->MUTsenParmNo) += ival13; *(info->SEN_RHS[muthere->MUTind2->INDbrEq] + muthere->MUTsenParmNo) += val23; *(info->SEN_iRHS[muthere->MUTind2->INDbrEq] + muthere->MUTsenParmNo) += ival23; } } } } itype = CKTtypelook("Inductor"); model = (INDmodel *)(ckt->CKThead[itype]); /* loop through all the inductor models */ for( ; model != NULL; model = INDnextModel(model)) { /* loop through all the instances of the model */ for (here = INDinstances(model); here != NULL ; here=INDnextInstance(here)) { if(here->INDsenParmNo){ cind = *(ckt->CKTrhsOld + here->INDbrEq); icind = *(ckt->CKTirhsOld + here->INDbrEq); val = icind * ckt->CKTomega ; ival = cind * ckt->CKTomega ; #ifdef SENSDEBUG fprintf(stdout,"cind = %.5e,icind = %.5e\n",cind,icind); fprintf(stdout,"val = %.5e,ival = %.5e\n",val,ival); fprintf(stdout,"brEq = %.5e,senparmno = %.5e\n", here->INDbrEq,here->INDsenParmNo); #endif /* SENSDEBUG */ /* load the RHS matrix */ *(info->SEN_RHS[here->INDbrEq] + here->INDsenParmNo) -= val; *(info->SEN_iRHS[here->INDbrEq] + here->INDsenParmNo) += ival; } } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ind/indparam.c0000644000175000017500000000314113546075722021673 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "inddefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int INDparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { INDinstance *here = (INDinstance*)inst; NG_IGNORE(select); switch(param) { case IND_IND: here->INDinduct = value->rValue; if (!here->INDmGiven) here->INDm =1.0; here->INDindGiven = TRUE; break; case IND_TEMP: here->INDtemp = value->rValue + CONSTCtoK; here->INDtempGiven = TRUE; break; case IND_DTEMP: here->INDdtemp = value->rValue; here->INDdtempGiven = TRUE; break; case IND_M: here->INDm = value->rValue; here->INDmGiven = TRUE; break; case IND_TC1: here->INDtc1 = value->rValue; here->INDtc1Given = TRUE; break; case IND_TC2: here->INDtc2 = value->rValue; here->INDtc2Given = TRUE; break; case IND_SCALE: here->INDscale = value->rValue; here->INDscaleGiven = TRUE; break; case IND_NT: here->INDnt = value->rValue; here->INDntGiven = TRUE; break; case IND_IC: here->INDinitCond = value->rValue; here->INDicGiven = TRUE; break; case IND_IND_SENS: here->INDsenParmNo = value->iValue; break; default: return(E_BADPARM); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ind/indmask.c0000644000175000017500000000230613546075722021530 0ustar carstencarsten/********** Copyright 2003 Paolo Nenzi Author: 2003 Paolo Nenzi **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "inddefs.h" #include "ngspice/sperror.h" #include "ngspice/ifsim.h" #include "ngspice/suffix.h" /* ARGSUSED */ int INDmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) { INDmodel *here = (INDmodel*)inst; NG_IGNORE(ckt); switch(which) { case IND_MOD_IND: value->rValue = here->INDmInd; return(OK); case IND_MOD_TNOM: value->rValue = here->INDtnom-CONSTCtoK; return(OK); case IND_MOD_TC1: value->rValue = here->INDtempCoeff1; return(OK); case IND_MOD_TC2: value->rValue = here->INDtempCoeff2; return(OK); case IND_MOD_CSECT: value->rValue = here->INDcsect; return(OK); case IND_MOD_LENGTH: value->rValue = here->INDlength; return(OK); case IND_MOD_NT: value->rValue = here->INDmodNt; return(OK); case IND_MOD_MU: value->rValue = here->INDmu; return(OK); default: return(E_BADPARM); } } tmpk8ny_4pz/src/spicelib/devices/ind/inddefs.h0000644000175000017500000001651413546075722021531 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #ifndef IND #define IND #include "ngspice/ifsim.h" #include "ngspice/complex.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" typedef struct sINDinstance INDinstance; typedef struct sINDmodel INDmodel; typedef struct sMUTinstance MUTinstance; typedef struct sMUTmodel MUTmodel; /* structures used to descrive inductors */ /* information needed for each instance */ struct sINDinstance { struct GENinstance gen; #define INDmodPtr(inst) ((INDmodel *)((inst)->gen.GENmodPtr)) #define INDnextInstance(inst) ((INDinstance *)((inst)->gen.GENnextInstance)) #define INDname gen.GENname #define INDstate gen.GENstate const int INDposNode; /* number of positive node of inductor */ const int INDnegNode; /* number of negative node of inductor */ int INDbrEq; /* number of the branch equation added for current */ double INDinduct; /* inductance */ double INDm; /* Parallel multiplier */ double INDtc1; /* first temperature coefficient of resistors */ double INDtc2; /* second temperature coefficient of resistors */ double INDtemp; /* Instance operating temperature */ double INDdtemp; /* Delta temp. of instance */ double INDscale; /* Scale factor */ double INDnt; /* Number of turns */ double INDinitCond; /* initial inductor voltage if specified */ double *INDposIbrPtr; /* pointer to sparse matrix diagonal at * (positive,branch eq) */ double *INDnegIbrPtr; /* pointer to sparse matrix diagonal at * (negative,branch eq) */ double *INDibrNegPtr; /* pointer to sparse matrix offdiagonal at * (branch eq,negative) */ double *INDibrPosPtr; /* pointer to sparse matrix offdiagonal at * (branch eq,positive) */ double *INDibrIbrPtr; /* pointer to sparse matrix offdiagonal at * (branch eq,branch eq) */ unsigned INDindGiven : 1; /* flag to indicate inductance was specified */ unsigned INDicGiven : 1; /* flag to indicate init. cond. was specified */ unsigned INDmGiven : 1; /* flag to indicate multiplier given */ unsigned INDtc1Given : 1; /* indicates tc1 parameter specified */ unsigned INDtc2Given : 1; /* indicates tc2 parameter specified */ unsigned INDtempGiven : 1; /* flag to indicate operating temp. given */ unsigned INDdtempGiven : 1; /* flag to indicate delta temp. given */ unsigned INDscaleGiven : 1; /* flag to indicate scale factor given */ unsigned INDntGiven : 1; /* flag to indicate number of turns given */ int INDsenParmNo; /* parameter # for sensitivity use; * set equal to 0 if not a design parameter */ struct INDsystem *system; INDinstance *system_next_ind; int system_idx; }; #define INDflux INDstate /* flux in the inductor */ #define INDvolt INDstate+1 /* voltage - save an entry in table */ #define INDnumStates 2 #define INDsensxp INDstate+2 /* charge sensitivities and their derivatives. * +3 for the derivatives - pointer to the * beginning of the array */ #define INDnumSenStates 2 /* per model data */ struct sINDmodel { /* model structure for an inductor */ struct GENmodel gen; #define INDmodType gen.GENmodType #define INDnextModel(inst) ((INDmodel *)((inst)->gen.GENnextModel)) #define INDinstances(inst) ((INDinstance *)((inst)->gen.GENinstances)) #define INDmodName gen.GENmodName double INDmInd; /* Model inductance */ double INDtnom; /* temperature at which inductance measured */ double INDtempCoeff1; /* first temperature coefficient */ double INDtempCoeff2; /* second temperature coefficient */ double INDcsect; /* Cross section of inductor */ double INDlength; /* Mean length of magnetic path */ double INDmodNt; /* Model number of turns */ double INDmu; /* Relative magnetic permeability */ unsigned INDtnomGiven : 1; /* flag to indicate nominal temp was given */ unsigned INDtc1Given : 1; /* flag to indicate tc1 was specified */ unsigned INDtc2Given : 1; /* flag to indicate tc2 was specified */ unsigned INDcsectGiven : 1; /* flag to indicate cross section given */ unsigned INDlengthGiven: 1; /* flag to indicate length given */ unsigned INDmodNtGiven : 1; /* flag to indicate mod. n. of turns given */ unsigned INDmuGiven : 1; /* flag to indicate mu_r given */ unsigned INDmIndGiven : 1; /* flag to indicate model inductance given */ double INDspecInd; /* Specific (one turn) inductance */ }; /* structures used to describe mutual inductors */ /* information needed for each instance */ struct sMUTinstance { struct GENinstance gen; #define MUTmodPtr(inst) ((MUTmodel *)((inst)->gen.GENmodPtr)) #define MUTnextInstance(inst) ((MUTinstance *)((inst)->gen.GENnextInstance)) #define MUTname gen.GENname #define MUTstates gen.GENstate double MUTcoupling; /* mutual inductance input by user */ double MUTfactor; /* mutual inductance scaled for internal use */ IFuid MUTindName1; /* name of coupled inductor 1 */ IFuid MUTindName2; /* name of coupled inductor 2 */ INDinstance *MUTind1; /* pointer to coupled inductor 1 */ INDinstance *MUTind2; /* pointer to coupled inductor 2 */ double *MUTbr1br2Ptr; /* pointers to off-diagonal intersections of */ double *MUTbr2br1Ptr; /* current branch equations in matrix */ unsigned MUTindGiven : 1; /* flag to indicate inductance was specified */ int MUTsenParmNo; /* parameter # for sensitivity use; * set equal to 0 if not a design parameter */ MUTinstance *system_next_mut; }; /* per model data */ struct sMUTmodel { /* model structure for a mutual inductor */ struct GENmodel gen; #define MUTmodType gen.GENmodType #define MUTnextModel(inst) ((MUTmodel *)((inst)->gen.GENnextModel)) #define MUTinstances(inst) ((MUTinstance *)((inst)->gen.GENinstances)) #define MUTmodName gen.GENmodName }; struct INDsystem { int size; INDinstance *first_ind; MUTinstance *first_mut; struct INDsystem *next_system; }; /* device parameters */ enum { IND_IND = 1, IND_IC, IND_FLUX, IND_VOLT, IND_IND_SENS, IND_CURRENT, IND_POWER, IND_M, IND_TEMP, IND_DTEMP, IND_SCALE, IND_NT, IND_TC1, IND_TC2, }; /* model parameters */ enum { IND_MOD_IND = 100, IND_MOD_TC1, IND_MOD_TC2, IND_MOD_TNOM, IND_MOD_CSECT, IND_MOD_LENGTH, IND_MOD_NT, IND_MOD_MU, IND_MOD_L, }; /* device questions */ enum { IND_QUEST_SENS_REAL = 201, IND_QUEST_SENS_IMAG, IND_QUEST_SENS_MAG, IND_QUEST_SENS_PH, IND_QUEST_SENS_CPLX, IND_QUEST_SENS_DC, }; /* device parameters */ enum { MUT_COEFF = 401, MUT_IND1, MUT_IND2, MUT_COEFF_SENS, }; /* model parameters */ /* device questions */ enum { MUT_QUEST_SENS_REAL = 601, MUT_QUEST_SENS_IMAG, MUT_QUEST_SENS_MAG, MUT_QUEST_SENS_PH, MUT_QUEST_SENS_CPLX, MUT_QUEST_SENS_DC, }; #include "indext.h" #endif /*IND*/ tmpk8ny_4pz/src/spicelib/devices/ind/indinit.h0000644000175000017500000000051413546075722021544 0ustar carstencarsten#ifndef _INDINIT_H #define _INDINIT_H extern IFparm INDpTable[ ]; extern IFparm INDmPTable[ ]; extern char *INDnames[ ]; extern int INDpTSize; extern int INDmPTSize; extern int INDnSize; extern int INDiSize; extern int INDmSize; extern IFparm MUTpTable[ ]; extern int MUTpTSize; extern int MUTiSize; extern int MUTmSize; #endif tmpk8ny_4pz/src/spicelib/devices/ind/mutacld.c0000644000175000017500000000136213546075722021534 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "inddefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int MUTacLoad(GENmodel *inModel, CKTcircuit *ckt) { MUTmodel *model = (MUTmodel*)inModel; double val; MUTinstance *here; for( ; model != NULL; model = MUTnextModel(model)) { for( here = MUTinstances(model);here != NULL; here = MUTnextInstance(here)) { val = ckt->CKTomega * here->MUTfactor; *(here->MUTbr1br2Ptr +1) -= val; *(here->MUTbr2br1Ptr +1) -= val; } } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ind/mutsetup.c0000644000175000017500000000456113546075722021775 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* load the inductor structure with those pointers needed later * for fast matrix loading */ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "inddefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define TSTALLOC(ptr, first, second) \ do { \ if ((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL) { \ return(E_NOMEM); \ } \ } while(0) int MUTsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { MUTmodel *model = (MUTmodel*) inModel; MUTinstance *here; NG_IGNORE(states); for (; model; model = MUTnextModel(model)) for (here = MUTinstances(model); here; here = MUTnextInstance(here)) { int ktype = CKTtypelook("Inductor"); if (ktype <= 0) { SPfrontEnd->IFerrorf (ERR_PANIC, "mutual inductor, but inductors not available!"); return(E_INTERN); } if (!here->MUTind1) here->MUTind1 = (INDinstance *) CKTfndDev(ckt, here->MUTindName1); if (!here->MUTind1) { SPfrontEnd->IFerrorf (ERR_FATAL, "%s: coupling to non-existant inductor %s.", here->MUTname, here->MUTindName1); return(E_INTERN); /* We have to leave, or TSTALLOC will segfault */ } if (!here->MUTind2) here->MUTind2 = (INDinstance *) CKTfndDev(ckt, here->MUTindName2); if (!here->MUTind2) { SPfrontEnd->IFerrorf (ERR_FATAL, "%s: coupling to non-existant inductor %s.", here->MUTname, here->MUTindName2); return(E_INTERN); } TSTALLOC(MUTbr1br2Ptr, MUTind1->INDbrEq, MUTind2->INDbrEq); TSTALLOC(MUTbr2br1Ptr, MUTind2->INDbrEq, MUTind1->INDbrEq); } return(OK); } tmpk8ny_4pz/src/spicelib/devices/ind/mutask.c0000644000175000017500000000643113546075722021411 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "inddefs.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int MUTask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) { MUTinstance *here = (MUTinstance*)inst; double vr; double vi; double sr; double si; double vm; switch(which) { case MUT_COEFF: value->rValue = here->MUTfactor; return(OK); case MUT_IND1: value->uValue = here->MUTindName1; return(OK); case MUT_IND2: value->uValue = here->MUTindName2; return(OK); case MUT_QUEST_SENS_DC: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_Sap[select->iValue + 1]+ here->MUTsenParmNo); } return(OK); case MUT_QUEST_SENS_REAL: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MUTsenParmNo); } return(OK); case MUT_QUEST_SENS_IMAG: if(ckt->CKTsenInfo){ value->rValue = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MUTsenParmNo); } return(OK); case MUT_QUEST_SENS_MAG: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = sqrt(vr*vr + vi*vi); if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MUTsenParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MUTsenParmNo); value->rValue = (vr * sr + vi * si)/vm; } return(OK); case MUT_QUEST_SENS_PH: if(ckt->CKTsenInfo){ vr = *(ckt->CKTrhsOld + select->iValue + 1); vi = *(ckt->CKTirhsOld + select->iValue + 1); vm = vr*vr + vi*vi; if(vm == 0){ value->rValue = 0; return(OK); } sr = *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MUTsenParmNo); si = *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MUTsenParmNo); value->rValue = (vr * si - vi * sr)/vm; } return(OK); case MUT_QUEST_SENS_CPLX: if(ckt->CKTsenInfo){ value->cValue.real= *(ckt->CKTsenInfo->SEN_RHS[select->iValue + 1]+ here->MUTsenParmNo); value->cValue.imag= *(ckt->CKTsenInfo->SEN_iRHS[select->iValue + 1]+ here->MUTsenParmNo); } return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmpk8ny_4pz/src/spicelib/devices/cktaccept.h0000644000175000017500000000006313546075722021274 0ustar carstencarsten#ifndef _CKTACCEPT_H #define _CKTACCEPT_H #endif tmpk8ny_4pz/src/spicelib/parser/0000755000175000017500000000000013546075722017035 5ustar carstencarstentmpk8ny_4pz/src/spicelib/parser/inp2t.c0000644000175000017500000000452313546075722020241 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" void INP2T(CKTcircuit *ckt, INPtables * tab, struct card *current) { /* Tname [TD=] * [F= [NL=]][IC=,,,] */ int type; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *name; /* the resistor's name */ char *nname1; /* the first node's name */ char *nname2; /* the second node's name */ char *nname3; /* the third node's name */ char *nname4; /* the fourth node's name */ CKTnode *node1; /* the first node's node pointer */ CKTnode *node2; /* the second node's node pointer */ CKTnode *node3; /* the third node's node pointer */ CKTnode *node4; /* the fourth node's node pointer */ int error; /* error code temporary */ GENinstance *fast; /* pointer to the actual instance */ int waslead; /* flag to indicate that funny unlabeled number was found */ double leadval; /* actual value of unlabeled number */ IFuid uid; /* uid for default model */ type = INPtypelook("Tranline"); if (type < 0) { LITERR("Device type Tranline not supported by this binary\n"); return; } line = current->line; INPgetNetTok(&line, &name, 1); INPinsert(&name, tab); INPgetNetTok(&line, &nname1, 1); INPtermInsert(ckt, &nname1, tab, &node1); INPgetNetTok(&line, &nname2, 1); INPtermInsert(ckt, &nname2, tab, &node2); INPgetNetTok(&line, &nname3, 1); INPtermInsert(ckt, &nname3, tab, &node3); INPgetNetTok(&line, &nname4, 1); INPtermInsert(ckt, &nname4, tab, &node4); if (!tab->defTmod) { /* create deafult T model */ IFnewUid(ckt, &uid, NULL, "T", UID_MODEL, NULL); IFC(newModel, (ckt, type, &(tab->defTmod), uid)); } IFC(newInstance, (ckt, tab->defTmod, &fast, name)); IFC(bindNode, (ckt, fast, 1, node1)); IFC(bindNode, (ckt, fast, 2, node2)); IFC(bindNode, (ckt, fast, 3, node3)); IFC(bindNode, (ckt, fast, 4, node4)); PARSECALL((&line, ckt, type, fast, &leadval, &waslead, tab)); } tmpk8ny_4pz/src/spicelib/parser/inpxx.h0000644000175000017500000000574313546075722020365 0ustar carstencarsten/************* * Header file for inpxx.c * 1999 E. Rouat ************/ #ifndef ngspice_INPXX_H #define ngspice_INPXX_H /* inp2xx.c */ void INP2B(CKTcircuit *ckt, INPtables *tab, struct card *current); void INP2C(CKTcircuit *ckt, INPtables *tab, struct card *current); void INP2D(CKTcircuit *ckt, INPtables *tab, struct card *current); void INP2E(CKTcircuit *ckt, INPtables *tab, struct card *current); void INP2F(CKTcircuit *ckt, INPtables *tab, struct card *current); void INP2G(CKTcircuit *ckt, INPtables *tab, struct card *current); void INP2H(CKTcircuit *ckt, INPtables *tab, struct card *current); void INP2I(CKTcircuit *ckt, INPtables *tab, struct card *current); void INP2J(CKTcircuit *ckt, INPtables *tab, struct card *current); void INP2K(CKTcircuit *ckt, INPtables *tab, struct card *current); void INP2L(CKTcircuit *ckt, INPtables *tab, struct card *current); void INP2M(CKTcircuit *ckt, INPtables *tab, struct card *current); void INP2N(CKTcircuit *ckt, INPtables *tab, struct card *current); void INP2O(CKTcircuit *ckt, INPtables *tab, struct card *current); void INP2P(CKTcircuit *ckt, INPtables *tab, struct card *current); void INP2Q(CKTcircuit *ckt, INPtables *tab, struct card *current, CKTnode *gnode); void INP2R(CKTcircuit *ckt, INPtables *tab, struct card *current); void INP2S(CKTcircuit *ckt, INPtables *tab, struct card *current); void INP2T(CKTcircuit *ckt, INPtables *tab, struct card *current); void INP2U(CKTcircuit *ckt, INPtables *tab, struct card *current); void INP2V(CKTcircuit *ckt, INPtables *tab, struct card *current); void INP2W(CKTcircuit *ckt, INPtables *tab, struct card *current); void INP2Y(CKTcircuit *ckt, INPtables *tab, struct card *current); void INP2Z(CKTcircuit *ckt, INPtables *tab, struct card *current); /* ptfuncs.c */ double PTabs(double arg); double PTsgn(double arg); double PTplus(double arg1, double arg2); double PTminus(double arg1, double arg2); double PTtimes(double arg1, double arg2); double PTdivide(double arg1, double arg2); double PTpower(double arg1, double arg2); double PTpwr(double arg1, double arg2); double PTacos(double arg); double PTacosh(double arg); double PTasin(double arg); double PTasinh(double arg); double PTatan(double arg); double PTatanh(double arg); double PTustep(double arg); double PTuramp(double arg); double PTcos(double arg); double PTcosh(double arg); double PTexp(double arg); double PTlog(double arg); double PTlog10(double arg); double PTsin(double arg); double PTsinh(double arg); double PTsqrt(double arg); double PTtan(double arg); double PTtanh(double arg); double PTuminus(double arg); double PTustep2(double arg); double PTpwl(double arg, void *data); double PTpwl_derivative(double arg, void *data); double PTmin(double arg1, double arg2); double PTmax(double arg1, double arg2); double PTeq0(double arg); double PTne0(double arg); double PTgt0(double arg); double PTlt0(double arg); double PTge0(double arg); double PTle0(double arg); double PTceil(double arg); double PTfloor(double arg); double PTnint(double arg); #endif tmpk8ny_4pz/src/spicelib/parser/inp2dot.c0000644000175000017500000006566613546075722020603 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" #include "ngspice/cpdefs.h" #include "ngspice/tskdefs.h" static int dot_noise(char *line, CKTcircuit *ckt, INPtables *tab, struct card *current, TSKtask *task, CKTnode *gnode, JOB *foo) { int which; /* which analysis we are performing */ int error; /* error code temporary */ char *name; /* the resistor's name */ char *nname1; /* the first node's name */ char *nname2; /* the second node's name */ CKTnode *node1; /* the first node's node pointer */ CKTnode *node2; /* the second node's node pointer */ IFvalue ptemp; /* a value structure to package resistance into */ IFvalue *parm; /* a pointer to a value struct for function returns */ char *steptype; /* ac analysis, type of stepping function */ int found; char *point; /* .noise V(OUTPUT,REF) SRC {DEC OCT LIN} NP FSTART FSTOP */ which = ft_find_analysis("NOISE"); if (which == -1) { LITERR("Noise analysis unsupported.\n"); return (0); } IFC(newAnalysis, (ckt, which, "Noise Analysis", &foo, task)); INPgetTok(&line, &name, 1); /* Make sure the ".noise" command is followed by V(xxxx). If it is, extract 'xxxx'. If not, report an error. */ if (name != NULL) { if ((*name == 'V' || *name == 'v') && !name[1]) { INPgetNetTok(&line, &nname1, 0); INPtermInsert(ckt, &nname1, tab, &node1); ptemp.nValue = node1; GCA(INPapName, (ckt, which, foo, "output", &ptemp)); if (*line != ')') { INPgetNetTok(&line, &nname2, 1); INPtermInsert(ckt, &nname2, tab, &node2); ptemp.nValue = node2; } else { ptemp.nValue = gnode; } GCA(INPapName, (ckt, which, foo, "outputref", &ptemp)); tfree(name); INPgetTok(&line, &name, 1); INPinsert(&name, tab); ptemp.uValue = name; GCA(INPapName, (ckt, which, foo, "input", &ptemp)); INPgetTok(&line, &steptype, 1); ptemp.iValue = 1; error = INPapName(ckt, which, foo, steptype, &ptemp); tfree(steptype); if (error) current->error = INPerrCat(current->error, INPerror(error)); parm = INPgetValue(ckt, &line, IF_INTEGER, tab); error = INPapName(ckt, which, foo, "numsteps", parm); if (error) current->error = INPerrCat(current->error, INPerror(error)); parm = INPgetValue(ckt, &line, IF_REAL, tab); error = INPapName(ckt, which, foo, "start", parm); if (error) current->error = INPerrCat(current->error, INPerror(error)); parm = INPgetValue(ckt, &line, IF_REAL, tab); error = INPapName(ckt, which, foo, "stop", parm); if (error) current->error = INPerrCat(current->error, INPerror(error)); /* now see if "ptspersum" has been specified by the user */ for (found = 0, point = line; (!found) && (*point != '\0'); found = ((*point != ' ') && (*(point++) != '\t'))) ; if (found) { parm = INPgetValue(ckt, &line, IF_INTEGER, tab); error = INPapName(ckt, which, foo, "ptspersum", parm); if (error) current->error = INPerrCat(current->error, INPerror(error)); } else { ptemp.iValue = 0; error = INPapName(ckt, which, foo, "ptspersum", &ptemp); if (error) current->error = INPerrCat(current->error, INPerror(error)); } } else LITERR("bad syntax " "[.noise v(OUT) SRC {DEC OCT LIN} " "NP FSTART FSTOP ]\n"); } else { LITERR("bad syntax " "[.noise v(OUT) SRC {DEC OCT LIN} " "NP FSTART FSTOP ]\n"); } return 0; } static int dot_op(char *line, CKTcircuit *ckt, INPtables *tab, struct card *current, TSKtask *task, CKTnode *gnode, JOB *foo) { int which; /* which analysis we are performing */ int error; /* error code temporary */ NG_IGNORE(line); NG_IGNORE(tab); NG_IGNORE(gnode); /* .op */ which = ft_find_analysis("OP"); if (which == -1) { LITERR("DC operating point analysis unsupported\n"); return (0); } IFC(newAnalysis, (ckt, which, "Operating Point", &foo, task)); return (0); } static int dot_disto(char *line, CKTcircuit *ckt, INPtables *tab, struct card *current, TSKtask *task, CKTnode *gnode, JOB *foo) { int which; /* which analysis we are performing */ int error; /* error code temporary */ IFvalue ptemp; /* a value structure to package resistance into */ IFvalue *parm; /* a pointer to a value struct for function returns */ char *steptype; /* ac analysis, type of stepping function */ NG_IGNORE(gnode); /* .disto {DEC OCT LIN} NP FSTART FSTOP */ which = ft_find_analysis("DISTO"); if (which == -1) { LITERR("Small signal distortion analysis unsupported.\n"); return (0); } IFC(newAnalysis, (ckt, which, "Distortion Analysis", &foo, task)); INPgetTok(&line, &steptype, 1); /* get DEC, OCT, or LIN */ ptemp.iValue = 1; GCA(INPapName, (ckt, which, foo, steptype, &ptemp)); parm = INPgetValue(ckt, &line, IF_INTEGER, tab); /* number of points */ GCA(INPapName, (ckt, which, foo, "numsteps", parm)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* fstart */ GCA(INPapName, (ckt, which, foo, "start", parm)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* fstop */ GCA(INPapName, (ckt, which, foo, "stop", parm)); if (*line) { parm = INPgetValue(ckt, &line, IF_REAL, tab); /* f1phase */ GCA(INPapName, (ckt, which, foo, "f2overf1", parm)); } return (0); } static int dot_ac(char *line, CKTcircuit *ckt, INPtables *tab, struct card *current, TSKtask *task, CKTnode *gnode, JOB *foo) { int error; /* error code temporary */ IFvalue ptemp; /* a value structure to package resistance into */ IFvalue *parm; /* a pointer to a value struct for function returns */ int which; /* which analysis we are performing */ char *steptype; /* ac analysis, type of stepping function */ NG_IGNORE(gnode); /* .ac {DEC OCT LIN} NP FSTART FSTOP */ which = ft_find_analysis("AC"); if (which == -1) { LITERR("AC small signal analysis unsupported.\n"); return (0); } IFC(newAnalysis, (ckt, which, "AC Analysis", &foo, task)); INPgetTok(&line, &steptype, 1); /* get DEC, OCT, or LIN */ ptemp.iValue = 1; GCA(INPapName, (ckt, which, foo, steptype, &ptemp)); tfree(steptype); parm = INPgetValue(ckt, &line, IF_INTEGER, tab); /* number of points */ GCA(INPapName, (ckt, which, foo, "numsteps", parm)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* fstart */ GCA(INPapName, (ckt, which, foo, "start", parm)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* fstop */ GCA(INPapName, (ckt, which, foo, "stop", parm)); return (0); } static int dot_pz(char *line, CKTcircuit *ckt, INPtables *tab, struct card *current, TSKtask *task, CKTnode *gnode, JOB *foo) { int error; /* error code temporary */ IFvalue ptemp; /* a value structure to package resistance into */ IFvalue *parm; /* a pointer to a value struct for function returns */ int which; /* which analysis we are performing */ char *steptype; /* ac analysis, type of stepping function */ NG_IGNORE(gnode); /* .pz nodeI nodeG nodeJ nodeK {V I} {POL ZER PZ} */ which = ft_find_analysis("PZ"); if (which == -1) { LITERR("Pole-zero analysis unsupported.\n"); return (0); } IFC(newAnalysis, (ckt, which, "Pole-Zero Analysis", &foo, task)); parm = INPgetValue(ckt, &line, IF_NODE, tab); GCA(INPapName, (ckt, which, foo, "nodei", parm)); parm = INPgetValue(ckt, &line, IF_NODE, tab); GCA(INPapName, (ckt, which, foo, "nodeg", parm)); parm = INPgetValue(ckt, &line, IF_NODE, tab); GCA(INPapName, (ckt, which, foo, "nodej", parm)); parm = INPgetValue(ckt, &line, IF_NODE, tab); GCA(INPapName, (ckt, which, foo, "nodek", parm)); INPgetTok(&line, &steptype, 1); /* get V or I */ ptemp.iValue = 1; GCA(INPapName, (ckt, which, foo, steptype, &ptemp)); INPgetTok(&line, &steptype, 1); /* get POL, ZER, or PZ */ ptemp.iValue = 1; GCA(INPapName, (ckt, which, foo, steptype, &ptemp)); return (0); } static int dot_dc(char *line, CKTcircuit *ckt, INPtables *tab, struct card *current, TSKtask *task, CKTnode *gnode, JOB *foo) { char *name; /* the resistor's name */ int error; /* error code temporary */ IFvalue ptemp; /* a value structure to package resistance into */ IFvalue *parm; /* a pointer to a value struct for function returns */ int which; /* which analysis we are performing */ NG_IGNORE(gnode); /* .dc SRC1NAME Vstart1 Vstop1 Vinc1 [SRC2NAME Vstart2 */ /* Vstop2 Vinc2 */ which = ft_find_analysis("DC"); if (which == -1) { LITERR("DC transfer curve analysis unsupported\n"); return (0); } IFC(newAnalysis, (ckt, which, "DC transfer characteristic", &foo, task)); INPgetTok(&line, &name, 1); INPinsert(&name, tab); ptemp.uValue = name; GCA(INPapName, (ckt, which, foo, "name1", &ptemp)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vstart1 */ GCA(INPapName, (ckt, which, foo, "start1", parm)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vstop1 */ GCA(INPapName, (ckt, which, foo, "stop1", parm)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vinc1 */ GCA(INPapName, (ckt, which, foo, "step1", parm)); if (*line) { INPgetTok(&line, &name, 1); INPinsert(&name, tab); ptemp.uValue = name; GCA(INPapName, (ckt, which, foo, "name2", &ptemp)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vstart2 */ GCA(INPapName, (ckt, which, foo, "start2", parm)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vstop2 */ GCA(INPapName, (ckt, which, foo, "stop2", parm)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vinc2 */ GCA(INPapName, (ckt, which, foo, "step2", parm)); } return 0; } static int dot_tf(char *line, CKTcircuit *ckt, INPtables *tab, struct card *current, TSKtask *task, CKTnode *gnode, JOB *foo) { char *name; /* the resistor's name */ int error; /* error code temporary */ IFvalue ptemp; /* a value structure to package resistance into */ int which; /* which analysis we are performing */ char *nname1; /* the first node's name */ char *nname2; /* the second node's name */ CKTnode *node1; /* the first node's node pointer */ CKTnode *node2; /* the second node's node pointer */ /* .tf v( node1, node2 ) src */ /* .tf vsrc2 src */ which = ft_find_analysis("TF"); if (which == -1) { LITERR("Transfer Function analysis unsupported.\n"); return (0); } IFC(newAnalysis, (ckt, which, "Transfer Function", &foo, task)); INPgetTok(&line, &name, 0); /* name is now either V or I or a serious error */ if (*name == 'v' && strlen(name) == 1) { if (*line != '(' ) { /* error, bad input format */ } INPgetNetTok(&line, &nname1, 0); INPtermInsert(ckt, &nname1, tab, &node1); ptemp.nValue = node1; GCA(INPapName, (ckt, which, foo, "outpos", &ptemp)); if (*line != ')') { INPgetNetTok(&line, &nname2, 1); INPtermInsert(ckt, &nname2, tab, &node2); ptemp.nValue = node2; GCA(INPapName, (ckt, which, foo, "outneg", &ptemp)); ptemp.sValue = tprintf("V(%s,%s)", nname1, nname2); GCA(INPapName, (ckt, which, foo, "outname", &ptemp)); } else { ptemp.nValue = gnode; GCA(INPapName, (ckt, which, foo, "outneg", &ptemp)); ptemp.sValue = tprintf("V(%s)", nname1); GCA(INPapName, (ckt, which, foo, "outname", &ptemp)); } } else if (*name == 'i' && strlen(name) == 1) { INPgetTok(&line, &name, 1); INPinsert(&name, tab); ptemp.uValue = name; GCA(INPapName, (ckt, which, foo, "outsrc", &ptemp)); } else { LITERR("Syntax error: voltage or current expected.\n"); return 0; } INPgetTok(&line, &name, 1); INPinsert(&name, tab); ptemp.uValue = name; GCA(INPapName, (ckt, which, foo, "insrc", &ptemp)); return (0); } static int dot_tran(char *line, CKTcircuit *ckt, INPtables *tab, struct card *current, TSKtask *task, CKTnode *gnode, JOB *foo) { int error; /* error code temporary */ IFvalue ptemp; /* a value structure to package resistance into */ IFvalue *parm; /* a pointer to a value struct for function returns */ int which; /* which analysis we are performing */ double dtemp; /* random double precision temporary */ char *word; /* something to stick a word of input into */ NG_IGNORE(gnode); /* .tran Tstep Tstop > */ which = ft_find_analysis("TRAN"); if (which == -1) { LITERR("Transient analysis unsupported.\n"); return (0); } IFC(newAnalysis, (ckt, which, "Transient Analysis", &foo, task)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* Tstep */ GCA(INPapName, (ckt, which, foo, "tstep", parm)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* Tstop */ GCA(INPapName, (ckt, which, foo, "tstop", parm)); if (*line) { dtemp = INPevaluate(&line, &error, 1); /* tstart? */ if (error == 0) { ptemp.rValue = dtemp; GCA(INPapName, (ckt, which, foo, "tstart", &ptemp)); dtemp = INPevaluate(&line, &error, 1); /* tmax? */ if (error == 0) { ptemp.rValue = dtemp; GCA(INPapName, (ckt, which, foo, "tmax", &ptemp)); } } } if (*line) { INPgetTok(&line, &word, 1); /* uic? */ if (strcmp(word, "uic") == 0) { ptemp.iValue = 1; GCA(INPapName, (ckt, which, foo, "uic", &ptemp)); } else { LITERR(" Error: unknown parameter on .tran - ignored\n"); } tfree(word); } return (0); } static int dot_sens(char *line, CKTcircuit *ckt, INPtables *tab, struct card *current, TSKtask *task, CKTnode *gnode, JOB *foo) { char *name; /* the resistor's name */ int error; /* error code temporary */ IFvalue ptemp; /* a value structure to package resistance into */ IFvalue *parm; /* a pointer to a value struct for function returns */ int which; /* which analysis we are performing */ char *nname1; /* the first node's name */ char *nname2; /* the second node's name */ CKTnode *node1; /* the first node's node pointer */ CKTnode *node2; /* the second node's node pointer */ char *steptype; /* ac analysis, type of stepping function */ which = ft_find_analysis("SENS"); if (which == -1) { LITERR("Sensitivity unsupported.\n"); return (0); } IFC(newAnalysis, (ckt, which, "Sensitivity Analysis", &foo, task)); /* Format is: * .sens * + [ac [dec|lin|oct] | dc ] */ /* Get the output voltage or current */ INPgetTok(&line, &name, 0); /* name is now either V or I or a serious error */ if (*name == 'v' && strlen(name) == 1) { if (*line != '(') { LITERR("Syntax error: '(' expected after 'v'\n"); return 0; } INPgetNetTok(&line, &nname1, 0); INPtermInsert(ckt, &nname1, tab, &node1); ptemp.nValue = node1; GCA(INPapName, (ckt, which, foo, "outpos", &ptemp)); if (*line != ')') { INPgetNetTok(&line, &nname2, 1); INPtermInsert(ckt, &nname2, tab, &node2); ptemp.nValue = node2; GCA(INPapName, (ckt, which, foo, "outneg", &ptemp)); ptemp.sValue = tprintf("V(%s,%s)", nname1, nname2); GCA(INPapName, (ckt, which, foo, "outname", &ptemp)); } else { ptemp.nValue = gnode; GCA(INPapName, (ckt, which, foo, "outneg", &ptemp)); ptemp.sValue = tprintf("V(%s)", nname1); GCA(INPapName, (ckt, which, foo, "outname", &ptemp)); } } else if (*name == 'i' && strlen(name) == 1) { INPgetTok(&line, &name, 1); INPinsert(&name, tab); ptemp.uValue = name; GCA(INPapName, (ckt, which, foo, "outsrc", &ptemp)); } else { LITERR("Syntax error: voltage or current expected.\n"); return 0; } INPgetTok(&line, &name, 1); if (name && !strcmp(name, "pct")) { ptemp.iValue = 1; GCA(INPapName, (ckt, which, foo, "pct", &ptemp)); INPgetTok(&line, &name, 1); } if (name && !strcmp(name, "ac")) { INPgetTok(&line, &steptype, 1); /* get DEC, OCT, or LIN */ ptemp.iValue = 1; GCA(INPapName, (ckt, which, foo, steptype, &ptemp)); parm = INPgetValue(ckt, &line, IF_INTEGER, tab); /* number of points */ GCA(INPapName, (ckt, which, foo, "numsteps", parm)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* fstart */ GCA(INPapName, (ckt, which, foo, "start", parm)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* fstop */ GCA(INPapName, (ckt, which, foo, "stop", parm)); return (0); } else if (name && *name && strcmp(name, "dc")) { /* Bad flag */ LITERR("Syntax error: 'ac' or 'dc' expected.\n"); return 0; } return (0); } #ifdef WANT_SENSE2 static int dot_sens2(char *line, CKTcircuit *ckt, INPtables *tab, struct card *current, TSKtask *task, CKTnode *gnode, JOB *foo) { int error; /* error code temporary */ IFvalue ptemp; /* a value structure to package resistance into */ IFvalue *parm; /* a pointer to a value struct for function returns */ int which; /* which analysis we are performing */ char *token; /* a token from the line */ NG_IGNORE(gnode); /* .sens {AC} {DC} {TRAN} [dev=nnn parm=nnn]* */ which = ft_find_analysis("SENS2"); if (which == -1) { LITERR("Sensitivity-2 analysis unsupported\n"); return (0); } IFC(newAnalysis, (ckt, which, "Sensitivity-2 Analysis", &foo, task)); while (*line) { IFparm *if_parm; /* read the entire line */ INPgetTok(&line, &token, 1); if_parm = ft_find_analysis_parm(which, token); if (!if_parm) { /* didn't find it! */ LITERR(" Error: unknown parameter on .sens-ignored \n"); continue; } /* found it, analysis which, parameter i */ if (if_parm->dataType & IF_FLAG) { /* one of the keywords! */ ptemp.iValue = 1; error = ft_sim->setAnalysisParm (ckt, foo, if_parm->id, &ptemp, NULL); if (error) current->error = INPerrCat(current->error, INPerror(error)); } else { parm = INPgetValue(ckt, &line, if_parm->dataType, tab); error = ft_sim->setAnalysisParm (ckt, foo, if_parm->id, parm, NULL); if (error) current->error = INPerrCat(current->error, INPerror(error)); } } return (0); } #endif #ifdef WITH_PSS /*SP: Steady State Analyis */ static int dot_pss(char *line, void *ckt, INPtables *tab, struct card *current, void *task, void *gnode, JOB *foo) { int error; /* error code temporary */ IFvalue ptemp; /* a value structure to package resistance into */ IFvalue *parm; /* a pointer to a value struct for function returns */ char *nname; /* the oscNode name */ CKTnode *nnode; /* the oscNode node */ int which; /* which analysis we are performing */ char *word; /* something to stick a word of input into */ NG_IGNORE(gnode); /* .pss Fguess StabTime OscNode */ which = ft_find_analysis("PSS"); if (which == -1) { LITERR("Periodic steady state analysis unsupported.\n"); return (0); } IFC(newAnalysis, (ckt, which, "Periodic Steady State Analysis", &foo, task)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* Fguess */ GCA(INPapName, (ckt, which, foo, "fguess", parm)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* StabTime */ GCA(INPapName, (ckt, which, foo, "stabtime", parm)); INPgetNetTok(&line, &nname, 0); INPtermInsert(ckt, &nname, tab, &nnode); ptemp.nValue = nnode; GCA(INPapName, (ckt, which, foo, "oscnode", &ptemp)); /* OscNode given as string */ parm = INPgetValue(ckt, &line, IF_INTEGER, tab); /* PSS points */ GCA(INPapName, (ckt, which, foo, "points", parm)); parm = INPgetValue(ckt, &line, IF_INTEGER, tab); /* PSS harmonics */ GCA(INPapName, (ckt, which, foo, "harmonics", parm)); parm = INPgetValue(ckt, &line, IF_INTEGER, tab); /* SC iterations */ GCA(INPapName, (ckt, which, foo, "sc_iter", parm)); parm = INPgetValue(ckt, &line, IF_REAL, tab); /* Steady coefficient */ GCA(INPapName, (ckt, which, foo, "steady_coeff", parm)); if (*line) { INPgetTok(&line, &word, 1); /* uic? */ if (strcmp(word, "uic") == 0) { ptemp.iValue = 1; GCA(INPapName, (ckt, which, foo, "uic", &ptemp)); } else { fprintf(stderr,"Error: unknown parameter %s on .pss - ignored\n", word); } } return (0); } /* SP */ #endif static int dot_options(char *line, CKTcircuit *ckt, INPtables *tab, struct card *current, TSKtask *task, CKTnode *gnode, JOB *foo) { NG_IGNORE(line); NG_IGNORE(gnode); NG_IGNORE(foo); /* .option - specify program options - rather complicated */ /* use a subroutine to handle all of them to keep this */ /* subroutine managable. */ INPdoOpts(ckt, &(task->taskOptions), current, tab); return (0); } int INP2dot(CKTcircuit *ckt, INPtables *tab, struct card *current, TSKtask *task, CKTnode *gnode) { /* . Many possibilities */ char *token; /* a token from the line, tmalloc'ed */ JOB *foo = NULL; /* pointer to analysis */ /* the part of the current line left to parse */ char *line = current->line; int rtn = 0; INPgetTok(&line, &token, 1); if (strcmp(token, ".model") == 0) { /* don't have to do anything, since models were all done in * pass 1 */ goto quit; } else if ((strcmp(token, ".width") == 0) || strcmp(token, ".print") == 0 || strcmp(token, ".plot") == 0) { /* obsolete - ignore */ LITERR(" Warning: obsolete control card - ignored \n"); goto quit; } else if ((strcmp(token, ".temp") == 0)) { /* .temp temp1 temp2 temp3 temp4 ..... */ /* not yet implemented - warn & ignore */ /* LITERR(" Warning: .TEMP card obsolete - use .options TEMP and TNOM\n"); */ goto quit; } else if ((strcmp(token, ".op") == 0)) { rtn = dot_op(line, ckt, tab, current, task, gnode, foo); goto quit; } else if ((strcmp(token, ".nodeset") == 0)) { goto quit; } else if ((strcmp(token, ".disto") == 0)) { rtn = dot_disto(line, ckt, tab, current, task, gnode, foo); goto quit; } else if ((strcmp(token, ".noise") == 0)) { rtn = dot_noise(line, ckt, tab, current, task, gnode, foo); goto quit; } else if ((strcmp(token, ".four") == 0) || (strcmp(token, ".fourier") == 0)) { /* .four */ /* not implemented - warn & ignore */ LITERR("Use fourier command to obtain fourier analysis\n"); goto quit; } else if ((strcmp(token, ".ic") == 0)) { goto quit; } else if ((strcmp(token, ".ac") == 0)) { rtn = dot_ac(line, ckt, tab, current, task, gnode, foo); goto quit; } else if ((strcmp(token, ".pz") == 0)) { rtn = dot_pz(line, ckt, tab, current, task, gnode, foo); goto quit; } else if ((strcmp(token, ".dc") == 0)) { rtn = dot_dc(line, ckt, tab, current, task, gnode, foo); goto quit; } else if ((strcmp(token, ".tf") == 0)) { rtn = dot_tf(line, ckt, tab, current, task, gnode, foo); goto quit; } else if ((strcmp(token, ".tran") == 0)) { rtn = dot_tran(line, ckt, tab, current, task, gnode, foo); goto quit; #ifdef WITH_PSS /* SP: Steady State Analysis */ } else if ((strcmp(token, ".pss") == 0)) { rtn = dot_pss(line, ckt, tab, current, task, gnode, foo); goto quit; /* SP */ #endif } else if ((strcmp(token, ".subckt") == 0) || (strcmp(token, ".ends") == 0)) { /* not yet implemented - warn & ignore */ LITERR(" Warning: Subcircuits not yet implemented - ignored \n"); goto quit; } else if ((strcmp(token, ".end") == 0)) { /* .end - end of input */ /* not allowed to pay attention to additional input - return */ rtn = 1; goto quit; } else if (strcmp(token, ".sens") == 0) { rtn = dot_sens(line, ckt, tab, current, task, gnode, foo); goto quit; } #ifdef WANT_SENSE2 else if ((strcmp(token, ".sens2") == 0)) { rtn = dot_sens2(line, ckt, tab, current, task, gnode, foo); goto quit; } #endif else if ((strcmp(token, ".probe") == 0)) { /* Maybe generate a "probe" format file in the future. */ goto quit; } else if ((strcmp(token, ".options") == 0)|| (strcmp(token,".option")==0) || (strcmp(token,".opt")==0)) { rtn = dot_options(line, ckt, tab, current, task, gnode, foo); goto quit; } /* Added by H.Tanaka to find .global option */ else if (strcmp(token, ".global") == 0) { rtn = 0; LITERR(" Warning: .global not yet implemented - ignored \n"); goto quit; } /* ignore .meas statements -- these will be handled after analysis */ /* also ignore .param statements */ /* ignore .prot, .unprot */ else if (strcmp(token, ".meas") == 0 || ciprefix(".para", token) || strcmp(token, ".measure") == 0 || strcmp(token, ".prot") == 0 || strcmp(token, ".unprot") == 0) { rtn = 0; goto quit; } LITERR(" unimplemented control card - error \n"); quit: tfree(token); return rtn; } tmpk8ny_4pz/src/spicelib/parser/inppas2.h0000644000175000017500000000013413546075722020560 0ustar carstencarsten#ifndef ngspice_INPPAS2_H #define ngspice_INPPAS2_H #include "ngspice/inpdefs.h" #endif tmpk8ny_4pz/src/spicelib/parser/inpaname.c0000644000175000017500000000462213546075722020775 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* * INPaName() * * Take a parameter by Name and ask for the specified value * *dev is -1 if type unknown, otherwise, device type * **fast is a device, and will be set if possible. */ #include "ngspice/ngspice.h" #include #include "ngspice/cpdefs.h" #include "ngspice/fteext.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "inpxx.h" int INPaName(char *parm, IFvalue * val, CKTcircuit *ckt, int *dev, char *devnam, GENinstance **fast, IFsimulator * sim, int *dataType, IFvalue * selector) /* the name of the parameter to set */ /* the parameter union containing the value to set */ /* the circuit this device is a member of */ /* the device type code to the device being parsed */ /* the name of the device */ /* direct pointer to device being parsed */ /* the simulator data structure */ /* the datatype of the returned value structure */ /* data sub-selector for questions */ { int error; /* int to store evaluate error return codes in */ int i; /* find the instance - don't know about model, so use null there, * otherwise pass on as much info as we have about the device * (name, type, direct pointer) - the type and direct pointer * WILL be set on return unless error is not OK */ if (*fast == NULL) *fast = sim->findInstance (ckt, devnam); if (*fast == NULL) return (E_NODEV); *dev = (*fast)->GENmodPtr->GENmodType; /* now find the parameter - hunt through the parameter tables for * this device type and look for a name match of an 'ask'able * parameter. */ for (i = 0; i < *(sim->devices[*dev]->numInstanceParms); i++) { if (strcmp(parm, sim->devices[*dev]->instanceParms[i].keyword) == 0 && (sim->devices[*dev]->instanceParms[i].dataType & IF_ASK)) { /* found it, so we ask the question using the device info we got * above and put the results in the IFvalue structure our caller * gave us originally */ error = sim->askInstanceQuest (ckt, *fast, sim->devices[*dev]->instanceParms[i].id, val, selector); if (dataType) *dataType = sim->devices[*dev]->instanceParms[i].dataType; return (error); } } return (E_BADPARM); } tmpk8ny_4pz/src/spicelib/parser/sperror.c0000644000175000017500000000451713546075722020704 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* * provide the error message appropriate for the given error code */ #include "ngspice/ngspice.h" #include #include "ngspice/fteext.h" #include "ngspice/sperror.h" #include "ngspice/cktdefs.h" #include "ngspice/ifsim.h" #include "inpxx.h" const char *SPerror(int type) { char *msg; switch (type) { case E_PAUSE: msg = "pause requested"; break; case E_INTERN: msg = "impossible error - can't occur"; break; case E_EXISTS: msg = "device already exists, existing one being used"; break; case E_NODEV: msg = "no such device"; break; case E_NOMOD: msg = "no such model"; break; case E_NOTERM: msg = "no such terminal on this device"; break; case E_BADPARM: msg = "no such parameter on this device"; break; case E_NOMEM: msg = "out of memory"; break; case E_NODECON: msg = "node already connected; connection replaced"; break; case E_UNSUPP: msg = "operation not supported"; break; case E_PARMVAL: msg = "parameter value out of range or the wrong type"; break; case E_BADMATRIX: msg = "matrix can't be decomposed as is"; break; case E_SINGULAR: msg = "matrix is singular"; break; case E_ITERLIM: msg = "iteration limit reached"; break; case E_ORDER: msg = "unsupported integration order"; break; case E_METHOD: msg = "unsupported integration method"; break; case E_TIMESTEP: msg = "timestep too small"; break; case E_XMISSIONLINE: msg = "transmission lines not supported by pole-zero"; break; case E_MAGEXCEEDED: msg = "magnitude overflow"; break; case E_SHORT: msg = "input or output shorted"; break; case E_INISOUT: msg = "transfer function is 1"; break; case E_NODISTO: msg = "distortion analysis not present"; break; case E_NONOISE: msg = "noise analysis not present"; break; case E_NOANAL: msg = "no such analysis type"; break; case E_NOCHANGE: msg = "unsupported action; no change made"; break; case E_NOTFOUND: msg = "not found"; break; case E_NOACINPUT: msg = "ac input not found"; break; case E_NOF2SRC: msg = "no F2 source for IM disto analysis"; break; case OK: return (NULL); default: msg = "Unknown error code"; } return msg; } tmpk8ny_4pz/src/spicelib/parser/inpfindl.c0000644000175000017500000000410113546075722021000 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 1999 Paolo Nenzi - Now we can use a two digits level code - **********/ /* INPfindLev(line,level) * find the 'level' parameter on the given line and return its * value (1,2,..,99 for now, 1 default) * */ #include "ngspice/ngspice.h" #include "ngspice/inpdefs.h" #include "inpxx.h" char *INPfindLev(char *line, int *level) { char *where; int error1; /* *where = line; */ where = strstr(line, "level"); if (where != NULL) { /* found a level keyword on the line */ where += 5; /* skip the level keyword */ while ((*where == ' ') || (*where == '\t') || (*where == '=') || (*where == ',') || (*where == '(') || (*where == ')') || (*where == '+')) { /* legal white space - ignore */ where++; } /* now the magic number, allow scientific notation of level, e.g. 4.900e1, offers only limited error checking. */ *level = (int)(INPevaluate(&where, &error1, 0) + 0.5); if (*level < 0) { *level = 1; fprintf(stderr,"Illegal value for level.\n"); fprintf(stderr,"Level must be >0 (Setting level to 1)\n"); return (INPmkTemp (" illegal (negative) argument to level parameter - level=1 assumed")); } if (*level > 99) { /* Limit to change in the future */ *level = 1; fprintf(stderr,"Illegal value for level.\n"); fprintf(stderr,"Level must be < 99 (Setting Level to 1)\n"); return (INPmkTemp (" illegal (too high) argument to level parameter - level=1 assumed")); } return (NULL); } else { /* no level on the line => default */ *level = 1; #ifdef TRACE /* this is annoying for bjt's */ fprintf(stderr,"Warning -- Level not specified on line \"%s\"\nUsing level 1.\n", line); #endif return (NULL); } } tmpk8ny_4pz/src/spicelib/parser/inp2p.c0000644000175000017500000001017113546075722020231 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 Charles Hough **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" void INP2P( CKTcircuit *ckt, INPtables *tab, struct card *current) { int mytype; /* the type we determine cpls are */ int type; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *name, *tempname; /* the cpl's name */ char *model; /* the name of the cpl's model */ char **nname1; /* the first node's name */ char **nname2; /* the second node's name */ char *ground; CKTnode **node1; /* the first node's node pointer */ CKTnode **node2; /* the second node's node pointer */ CKTnode *groundnode; int error; /* error code temporary */ int error1=0; /* secondary error code temporary */ INPmodel *thismodel; /* pointer to model structure describing our model */ GENmodel *mdfast; /* pointer to the actual model */ GENinstance *fast; /* pointer to the actual instance */ IFvalue ptemp; /* a value structure to package cpl into */ IFuid uid; /* uid for default model */ double lenval = 0; int lenvalgiven = 0; int num, i; mytype = INPtypelook("CplLines"); if(mytype < 0 ) { LITERR("Device type CplLines not supported by this binary\n"); return; } line = current->line; INPgetNetTok(&line,&name,1); INPinsert(&name,tab); /* num = (int) INPevaluate(&line,&error1,1); */ num = 0; /* first pass to determine the dimension */ while (*line != '\0') { INPgetTok(&line, &tempname,1); if ((strcmp(tempname, "length") == 0) || (strcmp(tempname, "len") == 0)) break; num ++; } num = (num - 2) / 2; line = current->line; INPgetTok(&line,&name,1); nname1 = TMALLOC(char *, num); nname2 = TMALLOC(char *, num); node1 = TMALLOC(CKTnode *, num); node2 = TMALLOC(CKTnode *, num); for (i = 0; i < num; i++) { INPgetNetTok(&line,&(nname1[i]),1); INPtermInsert(ckt,&(nname1[i]),tab,&(node1[i])); } INPgetTok(&line,&ground,1); INPtermInsert(ckt,&ground,tab,&groundnode); for (i = 0; i < num; i++) { INPgetNetTok(&line,&(nname2[i]),1); INPtermInsert(ckt,&(nname2[i]),tab,&(node2[i])); } INPgetTok(&line,&ground,1); INPtermInsert(ckt,&ground,tab,&groundnode); INPgetNetTok(&line, &model, 1); if(*model) { /* token isn't null */ INPinsert(&model,tab); current->error = INPgetMod(ckt,model,&thismodel,tab); if(thismodel != NULL) { if(mytype != thismodel->INPmodType) { LITERR("incorrect model type"); return; } mdfast = thismodel->INPmodfast; type = thismodel->INPmodType; } else { type = mytype; if(!tab->defPmod) { /* create default P model */ IFnewUid(ckt, &uid, NULL, "P", UID_MODEL, NULL); IFC(newModel, (ckt,type,&(tab->defPmod),uid)); } mdfast = tab->defPmod; } IFC(newInstance,(ckt,mdfast,&fast,name)); INPgetTok(&line,&model,1); if ((strcmp(model, "length") == 0) || (strcmp(model, "len") == 0)) { lenval = INPevaluate(&line,&error1,1); lenvalgiven = 1; } } else { LITERR("model name is not found"); return; } /* IFC(bindNode,(ckt,fast,1,fakename)); */ ptemp.iValue = num; GCA(INPpName,("dimension", &ptemp,ckt,type,fast)); ptemp.v.vec.sVec = nname1; GCA(INPpName,("pos_nodes", &ptemp,ckt,type,fast)); ptemp.v.vec.sVec = nname2; GCA(INPpName,("neg_nodes", &ptemp,ckt,type,fast)); if (error1 == 0 && lenvalgiven) { ptemp.rValue = lenval; GCA(INPpName,("length",&ptemp,ckt,type,fast)); } return; } tmpk8ny_4pz/src/spicelib/parser/inppname.c0000644000175000017500000000237613546075722021020 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* * INPpName() * * Take a parameter by Name and set it on the specified device */ #include "ngspice/ngspice.h" #include #include "ngspice/cpdefs.h" #include "ngspice/fteext.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "inpxx.h" int INPpName(char *parm, IFvalue * val, CKTcircuit *ckt, int dev, GENinstance *fast) /* the name of the parameter to set */ /* the parameter union containing the value to set */ /* the circuit this device is a member of */ /* the device type code to the device being parsed */ /* direct pointer to device being parsed */ { int error; /* int to store evaluate error return codes in */ int i; for (i = 0; i < *(ft_sim->devices[dev]->numInstanceParms); i++) { if (strcmp(parm, ft_sim->devices[dev]->instanceParms[i].keyword) == 0) { error = ft_sim->setInstanceParm (ckt, fast, ft_sim->devices[dev]->instanceParms[i].id, val, NULL); if (error) return (error); break; } } if (i == *(ft_sim->devices[dev]->numInstanceParms)) { return (E_BADPARM); } return (OK); } tmpk8ny_4pz/src/spicelib/parser/Makefile.am0000644000175000017500000000226313546075722021074 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libinp.la BUILT_SOURCES = inpptree-parser.h EXTRA_DIST = inpptree-parser-y.h libinp_la_SOURCES = \ ifeval.c \ ifnewuid.c \ inp2b.c \ inp2c.c \ inp2d.c \ inp2dot.c \ inp2e.c \ inp2f.c \ inp2g.c \ inp2h.c \ inp2i.c \ inp2j.c \ inp2k.c \ inp2l.c \ inp2m.c \ inp2n.c \ inp2o.c \ inp2p.c \ inp2q.c \ inp2r.c \ inp2s.c \ inp2t.c \ inp2u.c \ inp2v.c \ inp2w.c \ inp2y.c \ inp2z.c \ inpaname.c \ inpapnam.c \ inpcfix.c \ inpdomod.c \ inpdoopt.c \ inpdpar.c \ inperrc.c \ inperror.c \ inpeval.c \ inpfindl.c \ inpfindv.c \ inpgmod.c \ inpgstr.c \ inpgtitl.c \ inpgtok.c \ inpgval.c \ inpkmods.c \ inplist.c \ inplkmod.c \ inpmkmod.c \ inpmktmp.c \ inppas1.c \ inppas1.h \ inppas2.c \ inppas2.h \ inppas3.c \ inppas3.h \ inppname.c \ inpptree.c \ inpptree-parser.y \ inpsymt.c \ inptyplk.c \ ptfuncs.c \ sperror.c \ inpxx.h AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include -I$(top_srcdir)/src/frontend AM_CFLAGS = $(STATIC) AM_YFLAGS = -d MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/spicelib/parser/inpgmod.c0000644000175000017500000004005013546075722020635 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles, 1991 David A. Gates Modified: 2001 Paolo Nenzi (Cider Integration) **********/ #include "ngspice/ngspice.h" #include "ngspice/inpdefs.h" #include "ngspice/ifsim.h" #include "ngspice/cpstd.h" #include "ngspice/fteext.h" #include "inpxx.h" #include #ifdef CIDER #include "ngspice/numcards.h" #include "ngspice/carddefs.h" #include "ngspice/numgen.h" #include "ngspice/suffix.h" #define E_MISSING -1 #define E_AMBIGUOUS -2 extern IFcardInfo *INPcardTab[]; extern int INPnumCards; static int INPparseNumMod(CKTcircuit *ckt, INPmodel *model, INPtables *tab, char **errMessage); static int INPfindCard(char *name, IFcardInfo *table[], int numCards); static int INPfindParm(char *name, IFparm *table, int numParms); #endif extern INPmodel *modtab; static IFparm * find_model_parameter(const char *name, IFdevice *device) { IFparm *p = device->modelParms; IFparm *p_end = p + *(device->numModelParms); for (; p < p_end; p++) if (strcmp(name, p->keyword) == 0) return p; return NULL; } static IFparm * find_instance_parameter(const char *name, IFdevice *device) { IFparm *p = device->instanceParms; IFparm *p_end = p + *(device->numInstanceParms); for (; p < p_end; p++) if (strcmp(name, p->keyword) == 0) return p; return NULL; } /* * code moved from INPgetMod */ static int create_model(CKTcircuit *ckt, INPmodel *modtmp, INPtables *tab) { char *err = NULL, *line, *parm, *endptr; int error; /* not already defined, so create & give parameters */ error = ft_sim->newModel(ckt, modtmp->INPmodType, &(modtmp->INPmodfast), modtmp->INPmodName); if (error) return error; #ifdef CIDER /* Handle Numerical Models Differently */ if (modtmp->INPmodType == INPtypelook("NUMD") || modtmp->INPmodType == INPtypelook("NBJT") || modtmp->INPmodType == INPtypelook("NUMD2") || modtmp->INPmodType == INPtypelook("NBJT2") || modtmp->INPmodType == INPtypelook("NUMOS")) { error = INPparseNumMod(ckt, modtmp, tab, &err); if (error) return error; modtmp->INPmodLine->error = err; return 0; } #endif IFdevice *device = ft_sim->devices[modtmp->INPmodType]; /* parameter isolation, identification, binding */ line = modtmp->INPmodLine->line; #ifdef TRACE printf("In INPgetMod, inserting new model into table. line = %s ...\n", line); #endif INPgetTok(&line, &parm, 1); /* throw away '.model' */ tfree(parm); INPgetNetTok(&line, &parm, 1); /* throw away 'modname' */ tfree(parm); while (*line) { INPgetTok(&line, &parm, 1); if (!*parm) { FREE(parm); continue; } IFparm *p = find_model_parameter(parm, device); if (p) { IFvalue *val = INPgetValue(ckt, &line, p->dataType, tab); error = ft_sim->setModelParm(ckt, modtmp->INPmodfast, p->id, val, NULL); if (error) return error; } else if (strcmp(parm, "level") == 0) { /* just grab the level number and throw away */ /* since we already have that info from pass1 */ INPgetValue(ckt, &line, IF_REAL, tab); } else { p = find_instance_parameter(parm, device); if (p) { char *value; INPgetTok(&line, &value, 1); modtmp->INPmodfast->defaults = wl_cons(copy(parm), wl_cons(value, modtmp->INPmodfast->defaults)); } else { double dval; /* want only the parameter names in output - not the values */ errno = 0; /* To distinguish success/failure after call */ dval = strtod(parm, &endptr); /* Check for various possible errors */ if ((errno == ERANGE && dval == HUGE_VAL) || errno != 0) { perror("strtod"); controlled_exit(EXIT_FAILURE); } if (endptr == parm) /* it was no number - it is really a string */ err = INPerrCat(err, tprintf("unrecognized parameter (%s) - ignored", parm)); } } FREE(parm); } modtmp->INPmodLine->error = err; return 0; } static bool parse_line(char *line, char *tokens[], int num_tokens, double values[], bool found[]) { int get_index = -1; int i; for (i = 0; i < num_tokens; i++) found[i] = FALSE; while (*line) { if (get_index != -1) { int error; values[get_index] = INPevaluate(&line, &error, 1); found[get_index] = TRUE; get_index = -1; continue; } char *token = NULL; INPgetNetTok(&line, &token, 1); for (i = 0; i < num_tokens; i++) if (strcmp(tokens[i], token) == 0) get_index = i; txfree(token); } for (i = 0; i < num_tokens; i++) if (!found[i]) return FALSE; return TRUE; } static bool is_equal(double result, double expectedResult) { return fabs(result - expectedResult) < 1e-15; } static bool in_range(double value, double min, double max) { /* the standard binning rule is: min <= value < max */ return is_equal(value, min) || (min < value && value < max); } char * INPgetModBin(CKTcircuit *ckt, char *name, INPmodel **model, INPtables *tab, char *line) { INPmodel *modtmp; double l, w, lmin, lmax, wmin, wmax; double parse_values[4]; bool parse_found[4]; static char *instance_tokens[] = { "l", "w" }; static char *model_tokens[] = { "lmin", "lmax", "wmin", "wmax" }; double scale; if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; *model = NULL; if (!parse_line(line, instance_tokens, 2, parse_values, parse_found)) return NULL; l = parse_values[0] * scale; w = parse_values[1] * scale; for (modtmp = modtab; modtmp; modtmp = modtmp->INPnextModel) { if (model_name_match(name, modtmp->INPmodName) < 2) continue; /* skip if not binnable */ if (modtmp->INPmodType != INPtypelook("BSIM3") && modtmp->INPmodType != INPtypelook("BSIM3v32") && modtmp->INPmodType != INPtypelook("BSIM3v0") && modtmp->INPmodType != INPtypelook("BSIM3v1") && modtmp->INPmodType != INPtypelook("BSIM4") && modtmp->INPmodType != INPtypelook("BSIM4v5") && modtmp->INPmodType != INPtypelook("BSIM4v6") && modtmp->INPmodType != INPtypelook("BSIM4v7") && modtmp->INPmodType != INPtypelook("HiSIM2") && modtmp->INPmodType != INPtypelook("HiSIMHV1") && modtmp->INPmodType != INPtypelook("HiSIMHV2")) { continue; } /* if illegal device type */ if (modtmp->INPmodType < 0) { *model = NULL; return tprintf("Unknown device type for model %s\n", name); } if (!parse_line(modtmp->INPmodLine->line, model_tokens, 4, parse_values, parse_found)) continue; lmin = parse_values[0]; lmax = parse_values[1]; wmin = parse_values[2]; wmax = parse_values[3]; if (in_range(l, lmin, lmax) && in_range(w, wmin, wmax)) { /* create unless model is already defined */ if (!modtmp->INPmodfast) { int error = create_model(ckt, modtmp, tab); if (error) return NULL; } *model = modtmp; return NULL; } } return NULL; } char * INPgetMod(CKTcircuit *ckt, char *name, INPmodel **model, INPtables *tab) { INPmodel *modtmp; #ifdef TRACE printf("In INPgetMod, examining model %s ...\n", name); #endif for (modtmp = modtab; modtmp; modtmp = modtmp->INPnextModel) { #ifdef TRACE printf("In INPgetMod, comparing %s against stored model %s ...\n", name, modtmp->INPmodName); #endif if (strcmp(modtmp->INPmodName, name) == 0) { /* found the model in question - now instantiate if necessary */ /* and return an appropriate pointer to it */ /* if illegal device type */ if (modtmp->INPmodType < 0) { #ifdef TRACE printf("In INPgetMod, illegal device type for model %s ...\n", name); #endif *model = NULL; return tprintf("Unknown device type for model %s\n", name); } /* create unless model is already defined */ if (!modtmp->INPmodfast) { int error = create_model(ckt, modtmp, tab); if (error) { *model = NULL; return INPerror(error); } } *model = modtmp; return NULL; } } #ifdef TRACE printf("In INPgetMod, didn't find model for %s, using default ...\n", name); #endif *model = NULL; return tprintf("Unable to find definition of model %s - default assumed\n", name); } #ifdef CIDER /* * Parse a numerical model by running through the list of original * input cards which make up the model * Given: * 1. First card looks like: .model modname modtype * 2. Other cards look like: +? where ? tells us what * to do with the next card: * '#$*' = comment card * '+' = continue previous card * other = new card */ static int INPparseNumMod(CKTcircuit *ckt, INPmodel *model, INPtables *tab, char **errMessage) { struct card *txtCard; /* Text description of a card */ GENcard *tmpCard; /* Processed description of a card */ IFcardInfo *info = NULL; /* Info about the type of card located */ char *cardName = NULL; /* name of a card */ int cardNum = 0; /* number of this card in the overall line */ char *err = NULL; /* Strings for error messages */ int error; /* Chase down to the top of the list of actual cards */ txtCard = model->INPmodLine->actualLine; /* Skip the first card if it exists since there's nothing interesting */ /* txtCard will be empty if the numerical model is empty */ if (txtCard) txtCard = txtCard->nextcard; /* Now parse each remaining card */ for (; txtCard; txtCard = txtCard->nextcard) { char *line = txtCard->line; cardNum++; /* Skip the initial '+' and any whitespace. */ line++; while (*line == ' ' || *line == '\t') line++; switch (*line) { case '*': case '$': case '#': case '\0': case '\n': /* comment or empty cards */ info = NULL; continue; case '+': /* continuation card */ if (!info) { err = INPerrCat(err, tprintf("Error on card %d : illegal continuation \'+\' - ignored", cardNum)); continue; } /* Skip leading '+'s */ while (*line == '+') line++; break; default: info = NULL; break; } if (!info) { /* new command card */ if (cardName) /* get rid of old card name */ FREE(cardName); INPgetTok(&line, &cardName, 1); /* get new card name */ if (*cardName) { /* Found a name? */ int lastType = INPfindCard(cardName, INPcardTab, INPnumCards); if (lastType >= 0) { /* Add card structure to model */ info = INPcardTab[lastType]; error = info->newCard(&tmpCard, model->INPmodfast); if (error) return error; /* Handle parameter-less cards */ } else if (cinprefix(cardName, "title", 3)) { /* Do nothing */ } else if (cinprefix(cardName, "comment", 3)) { /* Do nothing */ } else if (cinprefix(cardName, "end", 3)) { /* Terminate parsing */ *errMessage = err; return 0; } else { /* Error */ err = INPerrCat(err, tprintf("Error on card %d : unrecognized name (%s) - ignored", cardNum, cardName)); } } } if (!info) continue; /* parse the rest of this line */ while (*line) { int invert = FALSE; /* Strip leading carat from booleans */ if (*line == '^') { invert = TRUE; line++; } char *parm; /* name of a parameter */ INPgetTok(&line, &parm, 1); if (!*parm) break; int idx = INPfindParm(parm, info->cardParms, info->numParms); if (idx == E_MISSING) { /* parm not found */ err = INPerrCat(err, tprintf("Error on card %d : unrecognized parameter (%s) - ignored", cardNum, parm)); } else if (idx == E_AMBIGUOUS) { /* parm ambiguous */ err = INPerrCat(err, tprintf("Error on card %d : ambiguous parameter (%s) - ignored", cardNum, parm)); } else { IFvalue *value = INPgetValue(ckt, &line, info->cardParms[idx].dataType, tab); /* invert if this is a boolean entry */ if (invert) { if ((info->cardParms[idx].dataType & IF_VARTYPES) == IF_FLAG) value->iValue = 0; else err = INPerrCat(err, tprintf("Error on card %d : non-boolean parameter (%s) - \'^\' ignored", cardNum, parm)); } error = info->setCardParm(info->cardParms[idx].id, value, tmpCard); if (error) return error; } FREE(parm); } } *errMessage = err; return 0; } /* * Locate the best match to a card name in an IFcardInfo table */ static int INPfindCard(char *name, IFcardInfo *table[], int numCards) { int length = (int) strlen(name); int best = E_MISSING; int bestMatch = 0; int test; /* compare all the names in the card table to this name */ for (test = 0; test < numCards; test++) { int match = cimatch(name, table[test]->name); if ((match > 0) && (match == bestMatch)) { best = E_AMBIGUOUS; } else if ((match > bestMatch) && (match == length)) { best = test; bestMatch = match; } } return best; } /* * Locate the best match to a parameter name in an IFparm table */ static int INPfindParm(char *name, IFparm *table, int numParms) { int length = (int) strlen(name); int best = E_MISSING; int bestMatch = 0; int bestId = -1; int test; /* compare all the names in the parameter table to this name */ for (test = 0; test < numParms; test++) { int match = cimatch(name, table[test].keyword); if ((match == length) && (match == (int) strlen(table[test].keyword))) { /* exact match */ return test; } int id = table[test].id; if ((match > 0) && (match == bestMatch) && (id != bestId)) { best = E_AMBIGUOUS; } else if ((match > bestMatch) && (match == length)) { bestMatch = match; bestId = id; best = test; } } return best; } #endif /* CIDER */ tmpk8ny_4pz/src/spicelib/parser/inp2i.c0000644000175000017500000000412513546075722020224 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" void INP2I(CKTcircuit *ckt, INPtables * tab, struct card *current) { /* Iname [ [DC] ] [AC [ [ ] ] ] * [] */ static int type = -1; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *name; /* the resistor's name */ char *nname1; /* the first node's name */ char *nname2; /* the second node's name */ CKTnode *node1; /* the first node's node pointer */ CKTnode *node2; /* the second node's node pointer */ int error; /* error code temporary */ GENinstance *fast; /* pointer to the actual instance */ IFvalue ptemp; /* a value structure to package resistance into */ int waslead; /* flag to indicate that funny unlabeled number was found */ double leadval; /* actual value of unlabeled number */ IFuid uid; /* uid for default model */ if (type < 0) { if ((type = INPtypelook("Isource")) < 0) { LITERR("Device type Isource not supported by this binary\n"); return; } } line = current->line; INPgetNetTok(&line, &name, 1); INPinsert(&name, tab); INPgetNetTok(&line, &nname1, 1); INPtermInsert(ckt, &nname1, tab, &node1); INPgetNetTok(&line, &nname2, 1); INPtermInsert(ckt, &nname2, tab, &node2); if (!tab->defImod) { /* create default I model */ IFnewUid(ckt, &uid, NULL, "I", UID_MODEL, NULL); IFC(newModel, (ckt, type, &(tab->defImod), uid)); } IFC(newInstance, (ckt, tab->defImod, &fast, name)); IFC(bindNode, (ckt, fast, 1, node1)); IFC(bindNode, (ckt, fast, 2, node2)); PARSECALL((&line, ckt, type, fast, &leadval, &waslead, tab)); if (waslead) { ptemp.rValue = leadval; GCA(INPpName, ("dc", &ptemp, ckt, type, fast)); } } tmpk8ny_4pz/src/spicelib/parser/inpfindv.c0000644000175000017500000000200013546075722021006 0ustar carstencarsten/* INPfindVer(line,version) * find the 'version' parameter on the given line and return its * return 'default' as version if not found * */ #include "ngspice/ngspice.h" #include #include #include "ngspice/inpdefs.h" #include "inpxx.h" char *INPfindVer(char *line, char *version) { char *where; where = strstr(line, "version"); if (where != NULL) { /* found a version keyword on the line */ where += 7; /* skip the version keyword */ while ((*where == ' ') || (*where == '\t') || (*where == '=') || (*where == ',') || (*where == '(') || (*where == ')') || (*where == '+')) { /* legal white space - ignore */ where++; } /* now the magic string */ sscanf(where, "%s", version); /* We get the version number */ return (NULL); } else { /* no level on the line => default */ sprintf( version, "default" ); printf("Warning -- Version not specified on line \"%s\"\nSetting version to 'default'.\n", line); return (NULL); } } tmpk8ny_4pz/src/spicelib/parser/inppas3.c0000644000175000017500000001233413546075722020561 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: AlansFixes **********/ #include "ngspice/ngspice.h" #include "ngspice/iferrmsg.h" #include "ngspice/ifsim.h" #include "ngspice/inpmacs.h" #include "ngspice/cktdefs.h" #include "inppas3.h" extern IFsimulator *ft_sim; /* pass 3 - Read all nodeset and IC lines. All circuit nodes will have * been created by now, (except for internal device nodes), so any * nodeset or IC nodes which have to be created are flagged with a * warning. */ void INPpas3(CKTcircuit *ckt, struct card *data, INPtables *tab, TSKtask *task, IFparm *nodeParms, int numNodeParms) { struct card *current; int error; /* used by the macros defined above */ char *line; /* the part of the current line left to parse */ char *token=NULL; /* a token from the line */ IFparm *prm; /* pointer to parameter to search through array */ IFvalue ptemp; /* a value structure to package resistance into */ int which; /* which analysis we are performing */ CKTnode *node1; /* the first node's node pointer */ NG_IGNORE(task); #ifdef TRACE /* SDB debug statement */ printf("In INPpas3 . . . \n"); #endif for(current = data; current != NULL; current = current->nextcard) { line = current->line; FREE(token); INPgetTok(&line,&token,1); if (strcmp(token,".nodeset")==0) { which = -1; for(prm = nodeParms; prm < nodeParms + numNodeParms; prm++) { if(strcmp(prm->keyword,"nodeset")==0) { which = prm->id; break; } } if(which == -1) { LITERR("nodeset unknown to simulator. \n"); goto quit; } for(;;) { char *name; /* the node's name */ /* loop until we run out of data */ INPgetTok(&line,&name,1); if( *name == '\0') { FREE(name); break; /* end of line */ } /* If we have 'all = value' , then set all voltage nodes to 'value', except for ground node at node->number 0 */ if ( cieq(name, "all")) { ptemp.rValue = INPevaluate(&line,&error,1); for (node1 = ckt->CKTnodes; node1 != NULL; node1 = node1->next) { if ((node1->type == SP_VOLTAGE) && (node1->number > 0)) IFC(setNodeParm, (ckt, node1, which, &ptemp, NULL)); } FREE(name); break; } /* check to see if in the form V(xxx) and grab the xxx */ if( (*name == 'V' || *name == 'v') && !name[1] ) { /* looks like V - must be V(xx) - get xx now*/ char *nodename; INPgetNetTok(&line,&nodename,1); if (INPtermInsert(ckt,&nodename,tab,&node1)!=E_EXISTS) fprintf(stderr, "Warning : Nodeset on non-existant node - %s\n", nodename); ptemp.rValue = INPevaluate(&line,&error,1); IFC(setNodeParm, (ckt, node1, which, &ptemp, NULL)); FREE(name); continue; } LITERR(" Error: .nodeset syntax error.\n"); FREE(name); break; } } else if ((strcmp(token,".ic") == 0)) { /* .ic */ which = -1; for(prm = nodeParms; prm < nodeParms + numNodeParms; prm++) { if(strcmp(prm->keyword,"ic")==0) { which = prm->id; break; } } if(which==-1) { LITERR("ic unknown to simulator. \n"); goto quit; } for(;;) { char *name; /* the node's name */ /* loop until we run out of data */ INPgetTok(&line,&name,1); /* check to see if in the form V(xxx) and grab the xxx */ if( *name == '\0') { FREE(name); break; /* end of line */ } if( (*name == 'V' || *name == 'v') && !name[1] ) { /* looks like V - must be V(xx) - get xx now*/ char *nodename; INPgetNetTok(&line,&nodename,1); if (INPtermInsert(ckt,&nodename,tab,&node1)!=E_EXISTS) fprintf(stderr, "Warning : IC on non-existant node - %s\n", nodename); ptemp.rValue = INPevaluate(&line,&error,1); IFC(setNodeParm, (ckt, node1, which, &ptemp, NULL)); FREE(name); continue; } LITERR(" Error: .ic syntax error.\n"); FREE(name); break; } } } quit: FREE(token); return; } tmpk8ny_4pz/src/spicelib/parser/inpdpar.c0000644000175000017500000000725113546075722020643 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* * INPdevParse() * * parse a given input according to the standard rules - look * for the parameters given in the parmlists, In addition, * an optional leading numeric parameter is handled. */ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/cpdefs.h" #include "ngspice/fteext.h" #include "inpxx.h" static IFparm * find_instance_parameter(char *name, IFdevice *device) { IFparm *p = device->instanceParms; IFparm *p_end = p + *(device->numInstanceParms); for (; p < p_end; p++) if (strcmp(name, p->keyword) == 0) return p; return NULL; } char * INPdevParse(char **line, CKTcircuit *ckt, int dev, GENinstance *fast, double *leading, int *waslead, INPtables *tab) /* the line to parse */ /* the circuit this device is a member of */ /* the device type code to the device being parsed */ /* direct pointer to device being parsed */ /* the optional leading numeric parameter */ /* flag - 1 if leading double given, 0 otherwise */ { IFdevice *device = ft_sim->devices[dev]; int error; /* int to store evaluate error return codes in */ char *parm = NULL; char *errbuf; IFvalue *val; char *rtn = NULL; /* check for leading value */ *waslead = 0; *leading = INPevaluate(line, &error, 1); if (error == 0) /* found a good leading number */ *waslead = 1; else *leading = 0.0; wordlist *x = fast->GENmodPtr->defaults; for (; x; x = x->wl_next->wl_next) { char *parameter = x->wl_word; char *value = x->wl_next->wl_word; IFparm *p = find_instance_parameter(parameter, device); if (!p) { errbuf = tprintf(" unknown parameter (%s) \n", parameter); rtn = errbuf; goto quit; } val = INPgetValue(ckt, &value, p->dataType, tab); if (!val) { rtn = INPerror(E_PARMVAL); goto quit; } error = ft_sim->setInstanceParm (ckt, fast, p->id, val, NULL); if (error) { rtn = INPerror(error); goto quit; } /* delete the union val */ switch (p->dataType & IF_VARTYPES) { case IF_REALVEC: tfree(val->v.vec.rVec); break; case IF_INTVEC: tfree(val->v.vec.iVec); break; default: break; } } while (**line != '\0') { error = INPgetTok(line, &parm, 1); if (!*parm) { FREE(parm); continue; } if (error) { rtn = INPerror(error); goto quit; } IFparm *p = find_instance_parameter(parm, device); if (!p) { errbuf = tprintf(" unknown parameter (%s) \n", parm); rtn = errbuf; goto quit; } val = INPgetValue(ckt, line, p->dataType, tab); if (!val) { rtn = INPerror(E_PARMVAL); goto quit; } error = ft_sim->setInstanceParm (ckt, fast, p->id, val, NULL); if (error) { rtn = INPerror(error); goto quit; } /* delete the union val */ switch (p->dataType & IF_VARTYPES) { case IF_REALVEC: tfree(val->v.vec.rVec); break; case IF_INTVEC: tfree(val->v.vec.iVec); break; default: break; } FREE(parm); } quit: FREE(parm); return rtn; } tmpk8ny_4pz/src/spicelib/parser/inp2z.c0000644000175000017500000000655613546075722020257 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles **********/ /* Added code from macspice3f4 HFET1&2 and MESA model Original note: Added device calls for Mesfet models and HFET models provided by Trond Ytterdal as of Nov 98 */ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" void INP2Z(CKTcircuit *ckt, INPtables * tab, struct card *current) { /* Zname [] [OFF] [IC=,] */ int type; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *name; /* the resistor's name */ char *nname1; /* the first node's name */ char *nname2; /* the second node's name */ char *nname3; /* the third node's name */ CKTnode *node1; /* the first node's node pointer */ CKTnode *node2; /* the second node's node pointer */ CKTnode *node3; /* the third node's node pointer */ int error; /* error code temporary */ GENinstance *fast; /* pointer to the actual instance */ IFvalue ptemp; /* a value structure to package resistance into */ int waslead; /* flag to indicate that funny unlabeled number was found */ double leadval; /* actual value of unlabeled number */ char *model; /* the name of the model */ INPmodel *thismodel; /* pointer to model description for user's model */ GENmodel *mdfast; /* pointer to the actual model */ IFuid uid; /* uid for default model */ line = current->line; INPgetNetTok(&line, &name, 1); INPinsert(&name, tab); INPgetNetTok(&line, &nname1, 1); INPtermInsert(ckt, &nname1, tab, &node1); INPgetNetTok(&line, &nname2, 1); INPtermInsert(ckt, &nname2, tab, &node2); INPgetNetTok(&line, &nname3, 1); INPtermInsert(ckt, &nname3, tab, &node3); INPgetNetTok(&line, &model, 1); INPinsert(&model, tab); current->error = INPgetMod(ckt, model, &thismodel, tab); if (thismodel != NULL) { if ( thismodel->INPmodType != INPtypelook("MES") && thismodel->INPmodType != INPtypelook("MESA") && thismodel->INPmodType != INPtypelook("HFET1") && thismodel->INPmodType != INPtypelook("HFET2")) { LITERR("incorrect model type"); return; } type = thismodel->INPmodType; mdfast = (thismodel->INPmodfast); } else { type = INPtypelook("MES"); if (type < 0 ) { LITERR("Device type MES not supported by this binary\n"); return; } if (!tab->defZmod) { /* create default Z model */ IFnewUid(ckt, &uid, NULL, "Z", UID_MODEL, NULL); IFC(newModel, (ckt, type, &(tab->defZmod), uid)); } mdfast = tab->defZmod; } IFC(newInstance, (ckt, mdfast, &fast, name)); IFC(bindNode, (ckt, fast, 1, node1)); IFC(bindNode, (ckt, fast, 2, node2)); IFC(bindNode, (ckt, fast, 3, node3)); PARSECALL((&line, ckt, type, fast, &leadval, &waslead, tab)); /* use type - not thismodel->INPmodType as it might not exist! */ /* FIXME: Why do we need checking for type here? */ if ( (waslead) && ( type /*thismodel->INPmodType*/ != INPtypelook("MES") ) ) { ptemp.rValue = leadval; GCA(INPpName, ("area", &ptemp, ckt, type, fast)); } } tmpk8ny_4pz/src/spicelib/parser/inp2g.c0000644000175000017500000000467313546075722020232 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" void INP2G(CKTcircuit *ckt, INPtables * tab, struct card *current) { /* Gname */ int type; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *name; /* the resistor's name */ char *nname1; /* the first node's name */ char *nname2; /* the second node's name */ char *nname3; /* the third node's name */ char *nname4; /* the fourth node's name */ CKTnode *node1; /* the first node's node pointer */ CKTnode *node2; /* the second node's node pointer */ CKTnode *node3; /* the third node's node pointer */ CKTnode *node4; /* the fourth node's node pointer */ int error; /* error code temporary */ GENinstance *fast; /* pointer to the actual instance */ IFvalue ptemp; /* a value structure to package resistance into */ int waslead; /* flag to indicate that funny unlabeled number was found */ double leadval; /* actual value of unlabeled number */ IFuid uid; /* uid of default model to be created */ type = INPtypelook("VCCS"); if (type < 0) { LITERR("Device type VCCS not supported by this binary\n"); return; } line = current->line; INPgetNetTok(&line, &name, 1); INPinsert(&name, tab); INPgetNetTok(&line, &nname1, 1); INPtermInsert(ckt, &nname1, tab, &node1); INPgetNetTok(&line, &nname2, 1); INPtermInsert(ckt, &nname2, tab, &node2); INPgetNetTok(&line, &nname3, 1); INPtermInsert(ckt, &nname3, tab, &node3); INPgetNetTok(&line, &nname4, 1); INPtermInsert(ckt, &nname4, tab, &node4); if (!tab->defGmod) { /* create default G model */ IFnewUid(ckt, &uid, NULL, "G", UID_MODEL, NULL); IFC(newModel, (ckt, type, &(tab->defGmod), uid)); } IFC(newInstance, (ckt, tab->defGmod, &fast, name)); IFC(bindNode, (ckt, fast, 1, node1)); IFC(bindNode, (ckt, fast, 2, node2)); IFC(bindNode, (ckt, fast, 3, node3)); IFC(bindNode, (ckt, fast, 4, node4)); PARSECALL((&line, ckt, type, fast, &leadval, &waslead, tab)); if (waslead) { ptemp.rValue = leadval; GCA(INPpName, ("gain", &ptemp, ckt, type, fast)); } } tmpk8ny_4pz/src/spicelib/parser/inpdomod.c0000644000175000017500000004362113546075722021020 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/iferrmsg.h" #include "ngspice/inpdefs.h" #include "inpxx.h" /*-------------------------------------------------------------- * This fcn takes the model card & examines it. Depending upon * model type, it parses the model line, and then calls * INPmakeMod to stick the model name into the model list. * Note that multi-line models are handled in the calling fcn * (INPpas1). *-------------------------------------------------------------*/ char *INPdomodel(CKTcircuit *ckt, struct card *image, INPtables * tab) { char *modname; int type = -1; int lev, error1=0; char ver[100]; char *type_name; char *err = NULL; char *line; char *val; double rval=0, lval=0; NG_IGNORE(ckt); line = image->line; #ifdef TRACE printf("In INPdomodel, examining line %s . . . \n", line); #endif INPgetTok(&line, &modname, 1); /* throw away '.model' */ tfree(modname); INPgetNetTok(&line, &modname, 1); /* get model name */ INPinsert(&modname, tab); /* stick model name into table */ INPgetTok(&line, &type_name, 1); /* get model type */ /* ----- Check if model is a BJT --------- */ if (strcmp(type_name, "npn") == 0 || strcmp(type_name, "pnp") == 0) { err = INPfindLev(line,&lev); switch(lev) { case 0: case 1: case 2: type = INPtypelook("BJT"); if (type < 0) { err = INPmkTemp( "Device type BJT not available in this binary\n"); } break; case 4: case 9: type = INPtypelook("VBIC"); if(type < 0) { err = INPmkTemp( "Device type VBIC not available in this binary\n"); } break; #ifdef ADMS case 6: type = INPtypelook("bjt504t"); if(type < 0) { err = INPmkTemp( "Device type MEXTRAM not available in this binary\n"); } break; case 7: type = INPtypelook("hicum0"); if(type < 0) { err = INPmkTemp( "Device type HICUM0 not available in this binary\n"); } break; case 8: type = INPtypelook("hicum2"); if(type < 0) { err = INPmkTemp( "Device type HICUM2 not available in this binary\n"); } break; #endif default: /* placeholder; use level 4 for the next model */ #ifdef ADMS err = INPmkTemp( "Only BJT levels 1-2, 4,6-9 are supported in this binary\n"); #else err = INPmkTemp( "Only BJT levels 1-2, 4, 9 are supported in this binary\n"); #endif break; } INPmakeMod(modname, type, image); } /* end if ((strcmp(typename, "npn") == 0) || (strcmp(typename, "pnp") == 0)) */ /* -------- Check if model is a diode --------- */ else if (strcmp(type_name, "d") == 0) { type = INPtypelook("Diode"); if (type < 0) { err = INPmkTemp ("Device type Diode not available in this binary\n"); } INPmakeMod(modname, type, image); } /* else if (strcmp(typename, "d") == 0) { */ /* -------- Check if model is a jfet --------- */ else if (strcmp(type_name, "njf") == 0 || strcmp(type_name, "pjf") == 0) { err = INPfindLev(line, &lev); switch (lev) { case 0: case 1: type = INPtypelook("JFET"); if (type < 0) { err = INPmkTemp ("Device type JFET not available in this binary\n"); } break; case 2: type = INPtypelook("JFET2"); if (type < 0) { err = INPmkTemp ("Device type JFET2 not available in this binary\n"); } break; default: /* placeholder; use level 3 for the next model */ err = INPmkTemp ("Only JFET device levels 1-2 are supported in this binary\n"); break; } INPmakeMod(modname, type, image); } /* end else if ((strcmp(typename, "njf") == 0) */ /* -------- Check if model is a MES or an HFET --------- */ else if (strcmp(type_name, "nmf") == 0 || strcmp(type_name, "pmf") == 0 || strcmp(type_name, "nhfet") == 0 || strcmp(type_name, "phfet") == 0) { err = INPfindLev( line, &lev ); switch ( lev ) { case 0: case 1: type = INPtypelook("MES"); if (type < 0) { err = INPmkTemp("Device type MES not available\n"); } break; case 2: type = INPtypelook("MESA"); if (type < 0) { err = INPmkTemp("Device type MESA not available\n"); } break; case 3: type = INPtypelook("MESA"); if (type < 0) { err = INPmkTemp("Device type MESA not available\n"); } break; case 4: type = INPtypelook("MESA"); if ( type < 0) { err = INPmkTemp(" Device type MESA not available\n"); } break; case 5: type = INPtypelook("HFET1"); if ( type < 0) { err = INPmkTemp(" Device type HFET1 not available\n"); } break; case 6: type = INPtypelook("HFET2"); if ( type < 0) { err = INPmkTemp(" Device type HFET2 not available in this binary\n"); } break; default: err = INPmkTemp("only mesfet device level 1-4 and hfet level 5-6 supported\n"); break; } INPmakeMod(modname, type, image); } /* -------- Check if model is a Uniform Distrib. RC line --------- */ else if (strcmp(type_name, "urc") == 0) { type = INPtypelook("URC"); if (type < 0) { err = INPmkTemp ("Device type URC not available in this binary\n"); } INPmakeMod(modname, type, image); } /* ------ Check if model is a VDMOS FET ------- */ else if ((strcmp(type_name, "vdmos") == 0) || (strcmp(type_name, "vdmosn") == 0) || (strcmp(type_name, "vdmosp") == 0)) { type = INPtypelook("VDMOS"); if (type < 0) { err = INPmkTemp ("Device type VDMOS not available in this binary\n"); } INPmakeMod(modname, type, image); } /* -------- Check if model is a MOSFET --------- */ else if ((strcmp(type_name, "nmos") == 0) || (strcmp(type_name, "pmos") == 0) || (strcmp(type_name, "nsoi") == 0) || (strcmp(type_name, "psoi") == 0)) { err = INPfindLev(line, &lev); switch (lev) { case 0: case 1: type = INPtypelook("Mos1"); if (type < 0) { err = INPmkTemp ("Device type MOS1 not available in this binary\n"); } break; case 2: type = INPtypelook("Mos2"); if (type < 0) { err = INPmkTemp ("Device type MOS2 not available in this binary\n"); } break; case 3: type = INPtypelook("Mos3"); if (type < 0) { err = INPmkTemp ("Device type MOS3 not available in this binary\n"); } break; case 4: type = INPtypelook("BSIM1"); if (type < 0) { err = INPmkTemp ("Device type BSIM1 not available in this binary\n"); } break; case 5: type = INPtypelook("BSIM2"); if (type < 0) { err = INPmkTemp ("Device type BSIM2 not available in this binary\n"); } break; case 6: type = INPtypelook("Mos6"); if (type < 0) { err = INPmkTemp ("Device type MOS6 not available in this binary\n"); } break; case 7: type = INPtypelook("MOS7"); if (type < 0) { err = INPmkTemp ("Device type MOS7 not available in this binary\n"); } break; case 8: case 49: err = INPfindVer(line, ver); if (prefix("3.0", ver)) { type = INPtypelook("BSIM3v0"); } if (prefix("3.1", ver)) { type = INPtypelook("BSIM3v1"); } if (prefix("3.2", ver)) { /* version string ver has to start with 3.2 */ type = INPtypelook("BSIM3v32"); } if ( (strstr(ver, "default")) || (prefix("3.3", ver)) ) { type = INPtypelook("BSIM3"); } if (type < 0) { err = tprintf("Device type BSIM3 version %s not available in this binary\n", ver); } break; case 9: type = INPtypelook("Mos9"); if(type < 0) { err = INPmkTemp ("Device type MOS9 not available in this binary\n"); } break; case 14: case 54: err = INPfindVer(line, ver); /* mapping of minor versions >= 4.2.1 are included */ if ((prefix("4.0", ver)) || (prefix("4.1", ver)) || (prefix("4.2", ver)) || (prefix("4.3", ver)) || (prefix("4.4", ver)) || (prefix("4.5", ver))) { type = INPtypelook("BSIM4v5"); } if (prefix("4.6", ver)) { type = INPtypelook("BSIM4v6"); } if (prefix("4.7", ver)) { type = INPtypelook("BSIM4v7"); } if ( (strstr(ver, "default")) || (prefix("4.8", ver)) ) { type = INPtypelook("BSIM4"); } if (type < 0) { err = tprintf("Device type BSIM4 version %s not available in this binary\n", ver); } break; case 15: type = INPtypelook("BSIM5"); if (type < 0) { err = INPmkTemp ("Device type BSIM5 not available in this binary\n"); } break; #ifdef ADMS case 16: type = INPtypelook("BSIM6"); if (type < 0) { err = INPmkTemp ("Device type BSIM6 not available in this binary\n");} break; case 44: type = INPtypelook("ekv"); if (type < 0) { err = INPmkTemp ("Device type EKV not available in this binary\n"); } break; case 45: type = INPtypelook("psp102"); if (type < 0) { err = INPmkTemp ("Device type PSP102 not available in this binary\n"); } break; #endif case 55: type = INPtypelook("B3SOIFD"); if (type < 0) { err = INPmkTemp ("Device type B3SOIFD not available in this binary\n"); } break; case 56: type = INPtypelook("B3SOIDD"); if (type < 0) { err = INPmkTemp ("Device type B3SOIDD not available in this binary\n"); } break; case 57: type = INPtypelook("B3SOIPD"); if (type < 0) { err = INPmkTemp ("Device type B3SOIPD not available in this binary\n"); } break; case 10: case 58: type = INPtypelook("B4SOI"); if (type < 0) { err = INPmkTemp ("Device type B4SOI V4.0 not available in this binary\n"); } break; case 60: type = INPtypelook("SOI3"); if (type < 0) { err = INPmkTemp ("Device type SOI3 not available in this binary (STAG release)\n"); } break; case 68: type = INPtypelook("HiSIM2"); if (type < 0) { err = INPmkTemp ("Device type HiSIM2 not available in this binary\n"); } break; case 73: err = INPfindVer(line, ver); /* mapping of minor versions >= 1.1 are included */ if ((prefix("1.1", ver)) || (prefix("1.2", ver))) { type = INPtypelook("HiSIMHV1"); } if ( (strstr(ver, "default")) || (prefix("2.0", ver)) || (prefix("2.1", ver)) || (prefix("2.2", ver)) ) { type = INPtypelook("HiSIMHV2"); } if (type < 0) { err = tprintf("Device type HiSIMHV version %s not available in this binary\n", ver); } break; default: /* placeholder; use level xxx for the next model */ #ifdef ADMS err = INPmkTemp ("Only MOS device levels 1-6,8-10,14,44,45,49,54-58,60,68,73 are supported in this binary\n"); #else err = INPmkTemp ("Only MOS device levels 1-6,8-10,14,49,54-58,60,68,73 are supported in this binary\n"); #endif break; } INPmakeMod(modname, type, image); } #ifdef NDEV /* -------- Check if model is a numerical device --------- */ else if (strcmp(type_name, "ndev") == 0) { type = INPtypelook("NDEV"); if (type < 0) { err = INPmkTemp ("Device type NDEV not available in this binary\n"); } INPmakeMod(modname, type, image); } #endif /* -------- Check if model is a resistor --------- */ else if (strcmp(type_name, "r") == 0) { type = INPtypelook("Resistor"); if (type < 0) { err = INPmkTemp ("Device type Resistor not available in this binary\n"); } INPmakeMod(modname, type, image); } /* -------- Check if model is a PSPICE resistor --------- */ else if (strcmp(type_name, "res") == 0) { type = INPtypelook("Resistor"); if (type < 0) { err = INPmkTemp ("Device type Resistor not available in this binary\n"); } INPmakeMod(modname, type, image); } /* -------- Check if model is a transmission line of some sort --------- */ else if(strcmp(type_name,"txl") == 0) { INPgetTok(&line,&val,1); while (*line != '\0') { if (*val == 'R' || *val == 'r') { INPgetTok(&line,&val,1); rval = INPevaluate(&val, &error1, 1); } if ((strcmp(val,"L") == 0) || (strcmp(val,"l") == 0)) { INPgetTok(&line,&val,1); lval = INPevaluate(&val, &error1, 1); } INPgetTok(&line,&val,1); } if(lval) rval = rval/lval; if (rval > 1.6e10) { type = INPtypelook("TransLine"); INPmakeMod(modname,type,image); } if (rval > 1.6e9) { type = INPtypelook("CplLines"); INPmakeMod(modname,type,image); } else { type = INPtypelook("TransLine"); INPmakeMod(modname,type,image); } if(type < 0) { err = INPmkTemp( "Device type TransLine not available in this binary\n"); } } /* -------- Check if model is a coupled transmission line --------- */ else if(strcmp(type_name,"cpl") == 0) { type = INPtypelook("CplLines"); if(type < 0) { err = INPmkTemp( "Device type CplLines not available in this binary\n"); } INPmakeMod(modname,type,image); } /* -------- Check if model is a cap --------- */ else if (strcmp(type_name, "c") == 0) { type = INPtypelook("Capacitor"); if (type < 0) { err = INPmkTemp ("Device type Capacitor not available in this binary\n"); } INPmakeMod(modname, type, image); } /* -------- Check if model is an ind --------- */ else if (strcmp(type_name, "l") == 0) { type = INPtypelook("Inductor"); if (type < 0) { err = INPmkTemp ("Device type Inductor not available in this binary\n"); } INPmakeMod(modname, type, image); } /* -------- Check if model is a switch --------- */ else if (strcmp(type_name, "sw") == 0) { type = INPtypelook("Switch"); if (type < 0) { err = INPmkTemp ("Device type Switch not available in this binary\n"); } INPmakeMod(modname, type, image); } /* -------- Check if model is a Current Controlled Switch --------- */ else if (strcmp(type_name, "csw") == 0) { type = INPtypelook("CSwitch"); if (type < 0) { err = INPmkTemp ("Device type CSwitch not available in this binary\n"); } INPmakeMod(modname, type, image); } /* -------- Check if model is a Lossy TransLine --------- */ else if (strcmp(type_name, "ltra") == 0) { type = INPtypelook("LTRA"); if (type < 0) { err = INPmkTemp ("Device type LTRA not available in this binary\n"); } INPmakeMod(modname, type, image); } #ifdef CIDER else if(strcmp(type_name,"numd") == 0) { err = INPfindLev(line,&lev); switch( lev ) { case 1: default: type = INPtypelook("NUMD"); if(type < 0) { err = INPmkTemp ("Device type NUMD not available in this binary\n"); } break; case 2: type = INPtypelook("NUMD2"); if(type < 0) { err = INPmkTemp ("Device type NUMD2 not available in this binary\n"); } break; } INPmakeMod(modname,type,image); } else if(strcmp(type_name,"nbjt") == 0) { err = INPfindLev(line,&lev); switch( lev ) { case 1: default: type = INPtypelook("NBJT"); if(type < 0) { err = INPmkTemp ("Device type NBJT not available in this binary\n"); } break; case 2: type = INPtypelook("NBJT2"); if(type < 0) { err = INPmkTemp ("Device type NBJT2 not available in this binary\n"); } break; } INPmakeMod(modname,type,image); } else if(strcmp(type_name,"numos") == 0) { type = INPtypelook("NUMOS"); if(type < 0) { err = INPmkTemp ("Device type NUMOS not available in this binary\n"); } INPmakeMod(modname,type,image); } #endif /* CIDER */ /* type poly added by SDB . . . */ #ifdef XSPICE /* -------- Check if model is a poly (specific to xspice) --------- */ else if ( strcmp(type_name, "poly") == 0 || strcmp(type_name, "POLY") == 0 ) { type = INPtypelook("POLY"); if (type < 0) { err = INPmkTemp ("Device type POLY not available in this binary\n"); } INPmakeMod(modname, type, image); } #endif /* -------- Default action --------- */ else { #ifndef XSPICE type = -1; err = tprintf("unknown model type %s - ignored\n", type_name); #else /* gtri - modify - wbk - 10/23/90 - modify to look for code models */ #ifdef TRACE printf("In INPdomodel, found unknown model type, typename = %s . . .\n", type_name); #endif /* look for this model type and put it in the table of models */ type = INPtypelook(type_name); if(type < 0) { err = tprintf("Unknown model type %s - ignored\n", type_name); #ifdef TRACE printf("In INPdomodel, ignoring unknown model typ typename = %s . . .\n", type_name); #endif } else { #ifdef TRACE printf("In INPdomodel, adding unknown model typename = %s to model list. . .\n", type_name); #endif INPmakeMod(modname,type,image); } /* gtri - end - wbk - 10/23/90 */ #endif } tfree(type_name); return (err); } tmpk8ny_4pz/src/spicelib/parser/inp2k.c0000644000175000017500000000347713546075722020237 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" void INP2K(CKTcircuit *ckt, INPtables * tab, struct card *current) { /* Kname Lname Lname */ int type; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *name; /* the resistor's name */ int error; /* error code temporary */ GENinstance *fast; /* pointer to the actual instance */ IFvalue ptemp; /* a value structure to package resistance into */ IFvalue *parm; /* ptr to a value structure for function return values */ int waslead; /* flag to indicate that funny unlabeled number was found */ double leadval; /* actual value of unlabeled number */ IFuid uid; /* uid for default model */ line = current->line; type = INPtypelook("mutual"); if (type < 0) { LITERR("Device type mutual not supported by this binary\n"); return; } INPgetNetTok(&line, &name, 1); INPinsert(&name, tab); if (!tab->defKmod) { /* create deafult K model */ IFnewUid(ckt, &uid, NULL, "K", UID_MODEL, NULL); IFC(newModel, (ckt, type, &(tab->defKmod), uid)); } IFC(newInstance, (ckt, tab->defKmod, &fast, name)); parm = INPgetValue(ckt, &line, IF_INSTANCE, tab); GCA(INPpName, ("inductor1", parm, ckt, type, fast)); parm = INPgetValue(ckt, &line, IF_INSTANCE, tab); GCA(INPpName, ("inductor2", parm, ckt, type, fast)); PARSECALL((&line, ckt, type, fast, &leadval, &waslead, tab)); if (waslead) { ptemp.rValue = leadval; GCA(INPpName, ("coefficient", &ptemp, ckt, type, fast)); } } tmpk8ny_4pz/src/spicelib/parser/inp2v.c0000644000175000017500000000412513546075722020241 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" void INP2V(CKTcircuit *ckt, INPtables * tab, struct card *current) { /* Vname [ [DC] ] [AC [ [ ] ] ] * [] */ static int type = -1; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *name; /* the resistor's name */ char *nname1; /* the first node's name */ char *nname2; /* the second node's name */ CKTnode *node1; /* the first node's node pointer */ CKTnode *node2; /* the second node's node pointer */ int error; /* error code temporary */ GENinstance *fast; /* pointer to the actual instance */ IFvalue ptemp; /* a value structure to package resistance into */ int waslead; /* flag to indicate that funny unlabeled number was found */ double leadval; /* actual value of unlabeled number */ IFuid uid; /* uid for default model */ if (type < 0) { if ((type = INPtypelook("Vsource")) < 0) { LITERR("Device type Vsource not supported by this binary\n"); return; } } line = current->line; INPgetNetTok(&line, &name, 1); INPinsert(&name, tab); INPgetNetTok(&line, &nname1, 1); INPtermInsert(ckt, &nname1, tab, &node1); INPgetNetTok(&line, &nname2, 1); INPtermInsert(ckt, &nname2, tab, &node2); if (!tab->defVmod) { /* create default V model */ IFnewUid(ckt, &uid, NULL, "V", UID_MODEL, NULL); IFC(newModel, (ckt, type, &(tab->defVmod), uid)); } IFC(newInstance, (ckt, tab->defVmod, &fast, name)); IFC(bindNode, (ckt, fast, 1, node1)); IFC(bindNode, (ckt, fast, 2, node2)); PARSECALL((&line, ckt, type, fast, &leadval, &waslead, tab)); if (waslead) { ptemp.rValue = leadval; GCA(INPpName, ("dc", &ptemp, ckt, type, fast)); } } tmpk8ny_4pz/src/spicelib/parser/inpgtok.c0000644000175000017500000002113213546075722020653 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* get input token from 'line', * and return a pointer to it in 'token' */ /* INPgetTok: node names INPgetUTok: numbers and other elements in expressions (called from INPevaluate) */ #include "ngspice/ngspice.h" #include "ngspice/iferrmsg.h" #include "ngspice/inpdefs.h" #include "inpxx.h" /*------------------------------------------------------------------- * INPgetTok -- this fcn extracts a generic input token from * 'line' and returns a pointer to it in 'token'. *------------------------------------------------------------------*/ int INPgetTok(char **line, char **token, int gobble) /* gobble: eat non-whitespace trash AFTER token? */ { char *point; int signstate; /* scan along throwing away garbage characters until end of line or a separation char is found */ for (point = *line; *point != '\0'; point++) { if (*point == ' ') continue; if (*point == '\t') continue; if (*point == '\r') continue; if (*point == '=') continue; if (*point == '(') continue; if (*point == ')') continue; if (*point == ',') continue; break; } /* mark beginning of token */ *line = point; /* now find all good characters up to next occurance of a separation character. */ signstate = 0; for (point = *line; *point != '\0'; point++) { if (*point == ' ') break; if (*point == '\t') break; if (*point == '\r') break; if (*point == '=') break; if (*point == '(') break; if (*point == ')') break; if (*point == ',') break; /* This is not complex enough to catch all errors, but it will get the "good" parses */ if ((*point == '+') || (*point == '-')) { /* Treat '+' signs same as '-' signs */ if (signstate == 1 || signstate == 3) break; signstate += 1; continue; } if (*point == '*') break; if (*point == '/') break; if (*point == '^') break; if (isdigit_c(*point) || *point == '.') { if (signstate > 1) signstate = 3; else signstate = 1; } else if (tolower_c(*point) == 'e' && signstate == 1) signstate = 2; else signstate = 3; } if (point == *line && *point) /* Weird items, 1 char */ point++; *token = copy_substring(*line, point); if (!*token) return (E_NOMEM); *line = point; /* gobble garbage to next token */ for (; **line != '\0'; (*line)++) { if (**line == ' ') continue; if (**line == '\t') continue; if (**line == '\r') continue; if ((**line == '=') && gobble) continue; if ((**line == ',') && gobble) continue; break; } #ifdef TRACE /* SDB debug statement */ /* printf("found generic token (%s) and rest of line (%s)\n", *token, *line); */ #endif return (OK); } /*------------------------------------------------------------------- * INPgetNetTok -- this fcn extracts an input netname token from * 'line' and returns a pointer to it in 'token'. * This fcn cloned from INPgetTok by SDB to enable * complex netnames (e.g. netnames like '+VCC' and 'IN-'). * mailto:sdb@cloud9.net -- 4.7.2003 *------------------------------------------------------------------*/ int INPgetNetTok(char **line, char **token, int gobble) /* gobble: eat non-whitespace trash AFTER token? */ { char *point; /* scan along throwing away garbage characters until end of line or a separation char is found */ for (point = *line; *point != '\0'; point++) { if (*point == ' ') continue; if (*point == '\t') continue; if (*point == '=') continue; if (*point == '(') continue; if (*point == ')') continue; if (*point == ',') continue; break; } /* mark beginning of token */ *line = point; /* now find all good characters up to next occurance of a separation character. INPgetNetTok is very liberal about what it accepts. */ for (point = *line; *point != '\0'; point++) { if (*point == ' ') break; if (*point == '\t') break; if (*point == '\r') break; if (*point == '=') break; if (*point == ',') break; if (*point == ')') break; } if (point == *line && *point) /* Weird items, 1 char */ point++; *token = copy_substring(*line, point); if (!*token) return (E_NOMEM); *line = point; /* gobble garbage to next token */ for (; **line != '\0'; (*line)++) { if (**line == ' ') continue; if (**line == '\t') continue; if (**line == '\r') continue; if ((**line == '=') && gobble) continue; if ((**line == ',') && gobble) continue; break; } #ifdef TRACE /* SDB debug statement */ /* printf("found netname token (%s) and rest of line (%s)\n", *token, *line); */ #endif return (OK); } /*------------------------------------------------------------------- * INPgetUTok -- this fcn extracts an input refdes token from * 'line' and returns a pointer to it in 'token'. *------------------------------------------------------------------*/ int INPgetUTok(char **line, char **token, int gobble) /* gobble: eat non-whitespace trash AFTER token? */ { char *point, separator; int signstate; /* scan along throwing away garbage characters */ for (point = *line; *point != '\0'; point++) { if (*point == ' ') continue; if (*point == '\t') continue; if (*point == '=') continue; if (*point == '(') continue; if (*point == ')') continue; if (*point == ',') continue; break; } if (*point == '"') { separator = '"'; point++; } else if (*point == '\'') { separator = '\''; point++; } else separator = '\0'; /* mark beginning of token */ *line = point; /* now find all good characters */ signstate = 0; for (point = *line; *point != '\0'; point++) { if (separator) { if (*point == separator) break; else continue; } if (*point == ' ') break; if (*point == '\t') break; if (*point == '=') break; if (*point == '(') break; if (*point == ')') break; if (*point == ',') break; /* This is not complex enough to catch all errors, but it will get the "good" parses */ if (*point == '+' || *point == '-') { if (signstate == 1 || signstate == 3) break; signstate += 1; continue; } if (*point == '*') break; if (*point == '/') break; if (*point == '^') break; if (isdigit_c(*point) || *point == '.') { if (signstate > 1) signstate = 3; else signstate = 1; } else if (tolower_c(*point) == 'e' && signstate == 1) signstate = 2; else signstate = 3; } if (separator && *point == separator) point--; if (point == *line && *point) /* Weird items, 1 char */ point++; *token = copy_substring(*line, point); if (!*token) return (E_NOMEM); /* gobble garbage to next token */ for (; *point != '\0'; point++) { if (*point == separator) continue; if (*point == ' ') continue; if (*point == '\t') continue; if ((*point == '=') && gobble) continue; if ((*point == ',') && gobble) continue; break; } *line = point; #ifdef TRACE /* SDB debug statement */ /* printf("found refdes token (%s) and rest of line (%s)\n",*token,*line); */ #endif return (OK); } tmpk8ny_4pz/src/spicelib/parser/inppas1.h0000644000175000017500000000013313546075722020556 0ustar carstencarsten#ifndef ngspice_INPPAS1_H #define ngspice_INPPAS1_H #include "ngspice/inpdefs.h" #endif tmpk8ny_4pz/src/spicelib/parser/inp2q.c0000644000175000017500000000755013546075722020241 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles Modified: 2001 Paolo Nenzi (Cider Integration) **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" static int model_numnodes(int type) { #ifdef ADMS if (type == INPtypelook("hicum0") || type == INPtypelook("hicum2") || type == INPtypelook("bjt504t")) return 5; #else if (type == INPtypelook("VBIC")) return 5; #endif return 4; } void INP2Q(CKTcircuit *ckt, INPtables * tab, struct card *current, CKTnode *gnode) { /* Qname [] [] [OFF] * [IC=,] */ int type; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *name; /* the resistor's name */ const int max_i = 5; CKTnode *node[5]; int error; /* error code temporary */ int numnodes; /* flag indicating 4 or 5 nodes */ GENinstance *fast; /* pointer to the actual instance */ IFvalue ptemp; /* a value structure to package resistance into */ int waslead; /* flag to indicate that funny unlabeled number was found */ double leadval; /* actual value of unlabeled number */ INPmodel *thismodel; /* pointer to model description for user's model */ GENmodel *mdfast; /* pointer to the actual model */ int i; #ifdef TRACE printf("INP2Q: Parsing '%s'\n", current->line); #endif line = current->line; INPgetNetTok(&line, &name, 1); INPinsert(&name, tab); for (i = 0; ; i++) { char *token; INPgetNetTok(&line, &token, 1); if (i >= 3 && INPlookMod(token)) { INPinsert(&token, tab); txfree(INPgetMod(ckt, token, &thismodel, tab)); if (!thismodel) { LITERR ("Unable to find definition of given model"); return; } break; } if (i >= max_i) { LITERR ("could not find a valid modelname"); return; } INPtermInsert(ckt, &token, tab, &node[i]); } int model_numnodes_ = model_numnodes(thismodel->INPmodType); if (i > model_numnodes_) { LITERR("Too many nodes for this model type"); return; } /* tie missing ports to ground, (substrate and thermal node) */ while (i < model_numnodes_) node[i++] = gnode; numnodes = i; #ifdef TRACE printf("INP2Q: Looking up model\n"); #endif if (thismodel->INPmodType != INPtypelook("BJT") && #ifdef CIDER thismodel->INPmodType != INPtypelook("NBJT") && thismodel->INPmodType != INPtypelook("NBJT2") && #endif #ifdef ADMS thismodel->INPmodType != INPtypelook("hicum0") && thismodel->INPmodType != INPtypelook("hicum2") && thismodel->INPmodType != INPtypelook("bjt504t") && #endif thismodel->INPmodType != INPtypelook("VBIC")) { LITERR("incorrect model type"); return; } type = thismodel->INPmodType; mdfast = thismodel->INPmodfast; #ifdef TRACE printf("INP2Q: Type: %d numnodes: %d instancename: %s\n", type, numnodes, name); #endif IFC(newInstance, (ckt, mdfast, &fast, name)); for (i = 0; i < numnodes; i++) IFC(bindNode, (ckt, fast, i + 1, node[i])); PARSECALL((&line, ckt, type, fast, &leadval, &waslead, tab)); if (waslead) { #ifdef CIDER if (type == INPtypelook("NBJT2")) { LITERR(" error: no unlabeled parameter permitted on NBJT2\n"); return; } #endif ptemp.rValue = leadval; GCA(INPpName, ("area", &ptemp, ckt, type, fast)); } } tmpk8ny_4pz/src/spicelib/parser/inpsymt.c0000644000175000017500000001545713546075722020720 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Stuff for the terminal and node symbol tables. * Defined: INPtabInit, INPinsert, INPtermInsert, INPtabEnd */ /* MW. Special INPinsertNofree for routines from spiceif.c and outif.c */ #include "ngspice/ngspice.h" #include /* Take this out soon. */ #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/inpdefs.h" #include "ngspice/cpstd.h" #include "ngspice/fteext.h" #include "inpxx.h" static int hash(char *name, int tsize); /* Initialize the symbol tables. */ INPtables *INPtabInit(int numlines) { INPtables *tab; tab = TMALLOC(INPtables, 1); tab->INPsymtab = TMALLOC(struct INPtab *, numlines / 4 + 1); ZERO(tab->INPsymtab, (numlines / 4 + 1) * sizeof(struct INPtab *)); tab->INPtermsymtab = TMALLOC(struct INPnTab *, numlines); ZERO(tab->INPtermsymtab, numlines * sizeof(struct INPnTab *)); tab->INPsize = numlines / 4 + 1; tab->INPtermsize = numlines; return (tab); } /* insert 'token' into the terminal symbol table */ /* create a NEW NODE and return a pointer to it in *node */ int INPtermInsert(CKTcircuit *ckt, char **token, INPtables * tab, CKTnode **node) { int key; int error; struct INPnTab *t; key = hash(*token, tab->INPtermsize); for (t = tab->INPtermsymtab[key]; t; t = t->t_next) { if (!strcmp(*token, t->t_ent)) { FREE(*token); *token = t->t_ent; if (node) *node = t->t_node; return (E_EXISTS); } } t = TMALLOC(struct INPnTab, 1); if (t == NULL) return (E_NOMEM); ZERO(t, struct INPnTab); error = ft_sim->newNode (ckt, &(t->t_node), *token); if (error) return (error); if (node) *node = t->t_node; t->t_ent = *token; t->t_next = tab->INPtermsymtab[key]; tab->INPtermsymtab[key] = t; return (OK); } /* insert 'token' into the terminal symbol table */ /* USE node as the node pointer */ int INPmkTerm(CKTcircuit *ckt, char **token, INPtables * tab, CKTnode **node) { int key; struct INPnTab *t; NG_IGNORE(ckt); key = hash(*token, tab->INPtermsize); for (t = tab->INPtermsymtab[key]; t; t = t->t_next) { if (!strcmp(*token, t->t_ent)) { FREE(*token); *token = t->t_ent; if (node) *node = t->t_node; return (E_EXISTS); } } t = TMALLOC(struct INPnTab, 1); if (t == NULL) return (E_NOMEM); ZERO(t, struct INPnTab); t->t_node = *node; t->t_ent = *token; t->t_next = tab->INPtermsymtab[key]; tab->INPtermsymtab[key] = t; return (OK); } /* insert 'token' into the terminal symbol table as a name for ground*/ int INPgndInsert(CKTcircuit *ckt, char **token, INPtables * tab, CKTnode **node) { int key; int error; struct INPnTab *t; key = hash(*token, tab->INPtermsize); for (t = tab->INPtermsymtab[key]; t; t = t->t_next) { if (!strcmp(*token, t->t_ent)) { FREE(*token); *token = t->t_ent; if (node) *node = t->t_node; return (E_EXISTS); } } t = TMALLOC(struct INPnTab, 1); if (t == NULL) return (E_NOMEM); ZERO(t, struct INPnTab); error = ft_sim->groundNode (ckt, &(t->t_node), *token); if (error) return (error); if (node) *node = t->t_node; t->t_ent = *token; t->t_next = tab->INPtermsymtab[key]; tab->INPtermsymtab[key] = t; return (OK); } /* retrieve 'token' from the symbol table */ int INPretrieve(char **token, INPtables * tab) { struct INPtab *t; int key; key = hash(*token, tab->INPsize); for (t = tab->INPsymtab[key]; t; t = t->t_next) if (!strcmp(*token, t->t_ent)) { *token = t->t_ent; return (OK); } return (E_BADPARM); } /* insert 'token' into the symbol table */ int INPinsert(char **token, INPtables * tab) { struct INPtab *t; int key; key = hash(*token, tab->INPsize); for (t = tab->INPsymtab[key]; t; t = t->t_next) if (!strcmp(*token, t->t_ent)) { FREE(*token); *token = t->t_ent; return (E_EXISTS); } t = TMALLOC(struct INPtab, 1); if (t == NULL) return (E_NOMEM); ZERO(t, struct INPtab); t->t_ent = *token; t->t_next = tab->INPsymtab[key]; tab->INPsymtab[key] = t; return (OK); } /* MW. insert 'token' into the symbol table but no free() token pointer. * Calling routine should take care for this */ int INPinsertNofree(char **token, INPtables * tab) { struct INPtab *t; int key; key = hash(*token, tab->INPsize); for (t = tab->INPsymtab[key]; t; t = t->t_next) if (!strcmp(*token, t->t_ent)) { /* MW. We can't touch memory pointed by token now */ *token = t->t_ent; return (E_EXISTS); } t = TMALLOC(struct INPtab, 1); if (t == NULL) return (E_NOMEM); ZERO(t, struct INPtab); t->t_ent = *token; t->t_next = tab->INPsymtab[key]; tab->INPsymtab[key] = t; return (OK); } /* remove 'token' from the symbol table */ int INPremove(char *token, INPtables * tab) { struct INPtab *t, **prevp; int key; key = hash(token, tab->INPsize); prevp = &tab->INPsymtab[key]; for (t = *prevp; t && token != t->t_ent; t = t->t_next) prevp = &t->t_next; if (!t) return OK; *prevp = t->t_next; tfree(t->t_ent); tfree(t); return OK; } /* remove 'token' from the symbol table */ int INPremTerm(char *token, INPtables * tab) { struct INPnTab *t, **prevp; int key; key = hash(token, tab->INPtermsize); prevp = &tab->INPtermsymtab[key]; for (t = *prevp; t && token != t->t_ent; t = t->t_next) prevp = &t->t_next; if (!t) return OK; *prevp = t->t_next; tfree(t->t_ent); tfree(t); return OK; } /* Free the space used by the symbol tables. */ void INPtabEnd(INPtables * tab) { struct INPtab *t, *lt; struct INPnTab *n, *ln; int i; for (i = 0; i < tab->INPsize; i++) for (t = tab->INPsymtab[i]; t; t = lt) { lt = t->t_next; FREE(t->t_ent); FREE(t); } FREE(tab->INPsymtab); for (i = 0; i < tab->INPtermsize; i++) for (n = tab->INPtermsymtab[i]; n; n = ln) { ln = n->t_next; FREE(n->t_ent); FREE(n); /* But not t_node ! */ } FREE(tab->INPtermsymtab); FREE(tab); return; } static int hash(char *name, int tsize) { unsigned int hash = 5381; char c; while ((c = *name++) != '\0') hash = (hash * 33) ^ (unsigned) c; return (int) (hash % (unsigned) tsize); } tmpk8ny_4pz/src/spicelib/parser/inptyplk.c0000644000175000017500000000255513546075722021062 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* look up the 'type' in the device description struct and return the * appropriate strchr for the device found, or -1 for not found */ #include "ngspice/ngspice.h" #include "ngspice/inpdefs.h" #include "ngspice/cpdefs.h" #include "ngspice/fteext.h" #include "ngspice/ifsim.h" #include "inpxx.h" int INPtypelook(char *type) { int i; #ifdef TRACE /* SDB debug statement */ printf("In INPtypelook, examining model type = %s . . .\n", type); #endif for (i = 0; i < ft_sim->numDevices; i++) { #ifdef TRACE /* SDB debug statement */ if ((ft_sim->devices[i]) == NULL) printf("In INPtypelook, checking model type = %s against existing model = %s, . . .\n", type, "NULL"); else printf("In INPtypelook, checking model type = %s against existing model = %s, . . .\n", type, ft_sim->devices[i]->name); #endif if (ft_sim->devices[i] && strcmp(type, ft_sim->devices[i]->name) == 0) { /* found the device - return it */ #ifdef TRACE /* SDB debug statement */ printf("In INPtypelook, found the device -- returning it!!!\n"); #endif return i; } } #ifdef TRACE /* SDB debug statement */ printf("In INPtypelook, device not found!\n"); #endif return -1; } tmpk8ny_4pz/src/spicelib/parser/inpdoopt.c0000644000175000017500000000404513546075722021040 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* INPdoOpts(ckt,option card) * parse the options off of the given option card and add them to * the given circuit */ #include "ngspice/ngspice.h" #include #include "ngspice/inpdefs.h" #include "ngspice/ifsim.h" #include "ngspice/cpdefs.h" #include "ngspice/fteext.h" void INPdoOpts( CKTcircuit *ckt, JOB *anal, struct card *optCard, INPtables *tab) { char *line; char *token; char *errmsg; IFvalue *val; int error; int which; which = ft_find_analysis("options"); if(which == -1) { optCard->error = INPerrCat(optCard->error,INPmkTemp( "error: analysis options table not found\n")); return; } line = optCard->line; INPgetTok(&line,&token,1); /* throw away '.option' */ while (*line) { IFparm *if_parm; INPgetTok(&line,&token,1); if_parm = ft_find_analysis_parm(which, token); if(if_parm && !(if_parm->dataType & IF_UNIMP_MASK)) { errmsg = tprintf(" Warning: %s not yet implemented - ignored \n", token); optCard->error = INPerrCat(optCard->error,errmsg); val = INPgetValue(ckt,&line, if_parm->dataType, tab); continue; } if(if_parm && (if_parm->dataType & IF_SET)) { val = INPgetValue(ckt,&line, if_parm->dataType&IF_VARTYPES, tab); error = ft_sim->setAnalysisParm (ckt, anal, if_parm->id, val, NULL); if(error) { errmsg = tprintf("Warning: can't set option %s\n", token); optCard->error = INPerrCat(optCard->error, errmsg); } continue; } errmsg = TMALLOC(char, 100); (void) strcpy(errmsg," Error: unknown option - ignored\n"); optCard->error = INPerrCat(optCard->error,errmsg); fprintf(stderr, "%s\n", optCard->error); } } tmpk8ny_4pz/src/spicelib/parser/inperrc.c0000644000175000017500000000434413546075722020650 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* Concatenate two strings, which have to be defined on the heap. If either is NULL, the other is returned. If both are defined, a new string is malloced, they are combined, both input strings are freed, and the new string is returned. */ #include #include #include "ngspice/ngspice.h" #include "ngspice/inpdefs.h" #include "inpxx.h" static char *INPcat(size_t n_a, const char *a, char sep_char, size_t n_b, const char *b); /* This function returns the non-null string a or b if only one of them * is not null. Otherwise it returns NULL if both are null or * '\n' if both are non-null. */ char *INPerrCat(char *a, char *b) { return INPstrCat(a, '\n', b); } /* end of function INPerrCat */ /* This function returns the non-null string a or b if only one of them * is not null. Otherwise it returns NULL if both are null or * if both are non-null. */ char *INPstrCat(char *a, char sepchar, char *b) { if (a != NULL) { if (b == NULL) { /* a valid, b null, return a */ return a; } else { /* both valid - hard work... */ char *a_ch_b = INPcat(strlen(a), a, sepchar, strlen(b), b); txfree(a); txfree(b); return a_ch_b; } } else { /* a null, so return b */ return b; } } /* end of function INPstrCat */ /* This function concatenates strings a and b with sep_char added * between them. Strings a and b need not be null-terminated. */ static char *INPcat(size_t n_a, const char *a, char sepchar, size_t n_b, const char *b) { char *a_ch_b = TMALLOC(char, n_a + n_b + 2); /* Build string. Check not really requied since program exits * if allocation in TMALLOC fails but would be if this behavior * is changed. */ if (a_ch_b != (char *) NULL) { char *p_cur = a_ch_b; (void) memcpy(p_cur, a, n_a); p_cur += n_a; *p_cur++ = sepchar; (void) memcpy(p_cur, b, n_b); p_cur += n_b; *p_cur = '\0'; } return a_ch_b; } /* end of function INPcat */ tmpk8ny_4pz/src/spicelib/parser/inpgval.c0000644000175000017500000000655213546075722020651 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpptree.h" #include "inpxx.h" extern bool ft_ngdebug; IFvalue * INPgetValue(CKTcircuit *ckt, char **line, int type, INPtables *tab) { double *list; int *ilist; double tmp; char *word; int error; static IFvalue temp; INPparseTree *pt; char *compline = *line; /* make sure we get rid of extra bits in type */ type &= IF_VARTYPES; if (type == IF_INTEGER) { tmp = INPevaluate(line, &error, 1); temp.iValue = (int) floor(0.5 + tmp); /* printf(" returning integer value %d\n",temp.iValue); */ } else if (type == IF_REAL) { temp.rValue = INPevaluate(line, &error, 1); /* printf(" returning real value %e\n",temp.rValue); */ } else if (type == IF_REALVEC) { /* read until error occurs. If first token is already in error, return NULL */ temp.v.numValue = 0; list = TMALLOC(double, 1); tmp = INPevaluate(line, &error, 1); if (error) { tfree(list); return NULL; } while (error == 0) { /* printf(" returning vector value %g\n",tmp); */ temp.v.numValue++; list = TREALLOC(double, list, temp.v.numValue); list[temp.v.numValue - 1] = tmp; tmp = INPevaluate(line, &error, 1); } if (error && ft_ngdebug && !eq(*line, "") && !eq(*line, ")")) /* in rare cases false warnings may occur */ fprintf(stderr, "Warning: Could not read parameter from %s at %s\n", compline, *line); temp.v.vec.rVec = list; } else if (type == IF_INTVEC) { /* read until error occurs. If first token is already in error, return NULL */ temp.v.numValue = 0; ilist = TMALLOC(int, 1); tmp = INPevaluate(line, &error, 1); if (error) { tfree(ilist); return NULL; } while (error == 0) { /* printf(" returning vector value %g\n",tmp); */ temp.v.numValue++; ilist = TREALLOC(int, ilist, temp.v.numValue); ilist[temp.v.numValue - 1] = (int) floor(0.5 + tmp); tmp = INPevaluate(line, &error, 1); } if (error && ft_ngdebug && !eq(*line, "") && !eq(*line, ")")) fprintf(stderr, "Warning: Could not read parameter from %s at %s\n", compline, *line); temp.v.vec.iVec = ilist; } else if (type == IF_FLAG) { temp.iValue = 1; } else if (type == IF_NODE) { INPgetNetTok(line, &word, 1); INPtermInsert(ckt, &word, tab, &(temp.nValue)); } else if (type == IF_INSTANCE) { INPgetTok(line, &word, 1); INPinsert(&word, tab); temp.uValue = word; } else if (type == IF_STRING) { INPgetStr(line, &word, 1); temp.sValue = word; } else if (type == IF_PARSETREE) { INPgetTree(line, &pt, ckt, tab); if (!pt) return NULL; temp.tValue = (IFparseTree *) pt; /* INPptPrint("Parse tree is: ", temp.tValue); */ } else { /* don't know what type of parameter caller is talking about! */ return NULL; } return &temp; } tmpk8ny_4pz/src/spicelib/parser/inp2d.c0000644000175000017500000000575013546075722020224 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles Modified: 2001 Paolo Nenzi (Cider Integration) **********/ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" void INP2D(CKTcircuit *ckt, INPtables * tab, struct card *current) { /* Dname [] [OFF] [IC=] */ int mytype; /* the type we looked up */ int type; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *name; /* the resistor's name */ char *nname1; /* the first node's name */ char *nname2; /* the second node's name */ CKTnode *node1; /* the first node's node pointer */ CKTnode *node2; /* the second node's node pointer */ int error; /* error code temporary */ GENinstance *fast; /* pointer to the actual instance */ IFvalue ptemp; /* a value structure to package resistance into */ int waslead; /* flag to indicate that funny unlabeled number was found */ double leadval; /* actual value of unlabeled number */ char *model; /* the name of the model */ INPmodel *thismodel; /* pointer to model description for user's model */ GENmodel *mdfast; /* pointer to the actual model */ IFuid uid; /* uid of default model */ mytype = INPtypelook("Diode"); if (mytype < 0) { LITERR("Device type Diode not supported by this binary\n"); return; } line = current->line; INPgetNetTok(&line, &name, 1); INPinsert(&name, tab); INPgetNetTok(&line, &nname1, 1); INPtermInsert(ckt, &nname1, tab, &node1); INPgetNetTok(&line, &nname2, 1); INPtermInsert(ckt, &nname2, tab, &node2); INPgetNetTok(&line, &model, 1); INPinsert(&model, tab); current->error = INPgetMod(ckt, model, &thismodel, tab); if (thismodel != NULL) { if ((mytype != thismodel->INPmodType) #ifdef CIDER && (thismodel->INPmodType != INPtypelook("NUMD")) && (thismodel->INPmodType != INPtypelook("NUMD2")) #endif ){ LITERR("incorrect model type"); return; } type = thismodel->INPmodType; /*HT 050903*/ mdfast = (thismodel->INPmodfast); } else { type = mytype; if (!tab->defDmod) { /* create default D model */ IFnewUid(ckt, &uid, NULL, "D", UID_MODEL, NULL); IFC(newModel, (ckt, type, &(tab->defDmod), uid)); } mdfast = tab->defDmod; } IFC(newInstance, (ckt, mdfast, &fast, name)); IFC(bindNode, (ckt, fast, 1, node1)); IFC(bindNode, (ckt, fast, 2, node2)); PARSECALL((&line, ckt, type, fast, &leadval, &waslead, tab)); if (waslead) { #ifdef CIDER if( type == INPtypelook("NUMD2") ) { LITERR(" error: no unlabelled parameter permitted on NUMD2\n"); } else { #endif ptemp.rValue = leadval; GCA(INPpName, ("area", &ptemp, ckt, type, fast)); } #ifdef CIDER } #endif } tmpk8ny_4pz/src/spicelib/parser/inpgtitl.c0000644000175000017500000000121413546075722021031 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* INPgetTitle(ckt,data) * get the title card from the specified data deck and pass * it through to SPICE-3. */ #include "ngspice/ngspice.h" #include #include "ngspice/inpdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/cpstd.h" #include "ngspice/fteext.h" #include "inpxx.h" int INPgetTitle(CKTcircuit **ckt, struct card ** data) { int error; error = ft_sim->newCircuit (ckt); if (error) return (error); *data = (*data)->nextcard; return (OK); } tmpk8ny_4pz/src/spicelib/parser/inppas1.c0000644000175000017500000000230413546075722020553 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "inppas1.h" /* * The first pass of the circuit parser just looks for '.model' lines */ void INPpas1(CKTcircuit *ckt, struct card *deck, INPtables * tab) { struct card *current; char *temp, *thisline; for (current = deck; current != NULL; current = current->nextcard) { /* SPICE-2 keys off of the first character of the line */ thisline = current->line; while (*thisline && ((*thisline == ' ') || (*thisline == '\t'))) thisline++; if (*thisline == '.') { if (strncmp(thisline, ".model", 6) == 0) { /* First check to see if model is multi-line. If so, read in all lines & stick them into tab. */ #ifdef TRACE /* SDB debug statement */ printf("In INPpas1, handling line = %s \n", thisline); #endif /* Now invoke INPdomodel to stick model into model table. */ temp = INPdomodel(ckt, current, tab); current->error = INPerrCat(current->error, temp); } } /* for now, we do nothing with the other cards - just * keep them in the list for pass 2 */ } } tmpk8ny_4pz/src/spicelib/parser/inp2n.c0000644000175000017500000000701213546075722020227 0ustar carstencarsten/********** Permit to use it as your wish. Author: 2007 Gong Ding, gdiso@ustc.edu University of Science and Technology of China **********/ #include "ngspice/ngspice.h" #ifdef NDEV #include #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "../devices/ndev/ndevdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" void INP2N(CKTcircuit *ckt, INPtables * tab, struct card *current) { /* parse a numerical device card */ /* Nname [ ...] [] */ /* The NUMD should have a private .model card */ int mytype; /* the type we determine NDEV are */ int type = 0; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *saveline; /* ... just in case we need to go back... */ char *name; /* the NDEV's name */ char *model; /* the name of the NDEV's model */ int term; /* the number of node */ char *nnamex; /* serve as a temporary name */ char *nname[7]; /* the array of CKT node's name */ char *bname[7]; /* the array of NDEV electrode's name */ CKTnode *node[7]; /* the array of CKT node's node pointer */ int error; /* error code temporary */ int i; INPmodel *thismodel; /* pointer to model structure describing our model */ GENmodel *mdfast = NULL; /* pointer to the actual model */ GENinstance *fast; /* pointer to the actual instance */ NDEVinstance *pinst; int waslead; /* flag to indicate that funny unlabeled number was found */ double leadval; /* actual value of unlabeled number */ mytype = INPtypelook("NDEV"); if (mytype < 0) { LITERR("Device type NDEV not supported by this binary\n"); return; } line = current->line; INPgetTok(&line, &name, 1); INPinsert(&name, tab); /* get the node number here */ saveline=line; term = 0; do { INPgetNetTok(&line, &nnamex, 1); term++; }while(*nnamex); line=saveline; term=(term-2)/2; if (term > 7) { LITERR("Numerical device has too many nodes, the limitation is 7\n"); return; } for(i=0;ierror = INPgetMod(ckt, model, &thismodel, tab); if (thismodel != NULL) { if (mytype != thismodel->INPmodType) { LITERR("incorrect model type"); return; } mdfast = thismodel->INPmodfast; type = thismodel->INPmodType; } } else { LITERR("Numerical device should always have a model card\n"); return; } IFC(newInstance, (ckt, mdfast, &fast, name)); } else { LITERR("Numerical device should always have a model card\n"); return; } for(i=0;iterm = term; for(i=0;ibname[i]=bname[i]; pinst->node[i]=node[i]; } PARSECALL((&line, ckt, type, fast, &leadval, &waslead, tab)); if (waslead) { LITERR("The numerical device was lead berfor.\n"); return; } return; } #else int Dummy1; #endif tmpk8ny_4pz/src/spicelib/parser/inp2e.c0000644000175000017500000000465613546075722020231 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" void INP2E(CKTcircuit *ckt, INPtables * tab, struct card *current) { /* Ename */ int type; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *name; /* the resistor's name */ char *nname1; /* the first node's name */ char *nname2; /* the second node's name */ char *nname3; /* the third node's name */ char *nname4; /* the fourth node's name */ CKTnode *node1; /* the first node's node pointer */ CKTnode *node2; /* the second node's node pointer */ CKTnode *node3; /* the third node's node pointer */ CKTnode *node4; /* the fourth node's node pointer */ int error; /* error code temporary */ GENinstance *fast; /* pointer to the actual instance */ IFvalue ptemp; /* a value structure to package resistance into */ int waslead; /* flag to indicate that funny unlabeled number was found */ double leadval; /* actual value of unlabeled number */ IFuid uid; /* uid for default model */ type = INPtypelook("VCVS"); if (type < 0) { LITERR("Device type VCVS not supported by this binary\n"); return; } line = current->line; INPgetNetTok(&line, &name, 1); INPinsert(&name, tab); INPgetNetTok(&line, &nname1, 1); INPtermInsert(ckt, &nname1, tab, &node1); INPgetNetTok(&line, &nname2, 1); INPtermInsert(ckt, &nname2, tab, &node2); INPgetNetTok(&line, &nname3, 1); INPtermInsert(ckt, &nname3, tab, &node3); INPgetNetTok(&line, &nname4, 1); INPtermInsert(ckt, &nname4, tab, &node4); if (!tab->defEmod) { /* create default E model */ IFnewUid(ckt, &uid, NULL, "E", UID_MODEL, NULL); IFC(newModel, (ckt, type, &(tab->defEmod), uid)); } IFC(newInstance, (ckt, tab->defEmod, &fast, name)); IFC(bindNode, (ckt, fast, 1, node1)); IFC(bindNode, (ckt, fast, 2, node2)); IFC(bindNode, (ckt, fast, 3, node3)); IFC(bindNode, (ckt, fast, 4, node4)); PARSECALL((&line, ckt, type, fast, &leadval, &waslead, tab)); if (waslead) { ptemp.rValue = leadval; GCA(INPpName, ("gain", &ptemp, ckt, type, fast)); } } tmpk8ny_4pz/src/spicelib/parser/inp2m.c0000644000175000017500000001232413546075722020230 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles Modified: 2001 Paolo Nenzi (Cider Integration) **********/ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" static int model_numnodes(int type) { if (type == INPtypelook("B4SOI") || /* 7 ; B4SOInames */ type == INPtypelook("B3SOIPD") || /* 7 ; B3SOIPDnames */ type == INPtypelook("B3SOIFD") || /* 7 ; B3SOIFDnames */ type == INPtypelook("B3SOIDD")) /* 7 ; B3SOIDDnames */ { return 7; } if (type == INPtypelook("HiSIMHV1") || /* 6 ; HSMHVnames */ type == INPtypelook("HiSIMHV2") || /* 6 ; HSMHV2names */ type == INPtypelook("SOI3")) /* 6 ; SOI3names */ { return 6; } if (type == INPtypelook("VDMOS")) /* 3 ; VDMOSnames */ { return 3; } return 4; } void INP2M(CKTcircuit *ckt, INPtables *tab, struct card *current) { /* Mname [L=] * [W=] [AD=] [AS=] [PD=] * [PS=] [NRD=] [NRS=] [OFF] * [IC=,,] */ int type; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *name; /* the resistor's name */ const int max_i = 7; CKTnode *node[7]; int error; /* error code temporary */ int numnodes; /* flag indicating 4 or 5 (or 6 or 7) nodes */ GENinstance *fast; /* pointer to the actual instance */ int waslead; /* flag to indicate that funny unlabeled number was found */ double leadval; /* actual value of unlabeled number */ INPmodel *thismodel; /* pointer to model description for user's model */ GENmodel *mdfast; /* pointer to the actual model */ int i; #ifdef TRACE printf("INP2M: Parsing '%s'\n", current->line); #endif line = current->line; INPgetNetTok(&line, &name, 1); INPinsert(&name, tab); for (i = 0; ; i++) { char *token; INPgetNetTok(&line, &token, 1); if (i >= 3) { txfree(INPgetMod(ckt, token, &thismodel, tab)); /* check if using model binning -- pass in line since need 'l' and 'w' */ if (!thismodel) txfree(INPgetModBin(ckt, token, &thismodel, tab, line)); if (thismodel) { INPinsert(&token, tab); break; } } if (i >= max_i) { LITERR ("could not find a valid modelname"); return; } INPtermInsert(ckt, &token, tab, &node[i]); } int model_numnodes_ = model_numnodes(thismodel->INPmodType); if (i > model_numnodes_) { LITERR ("too many nodes connected to instance"); return; } numnodes = i; if (thismodel->INPmodType != INPtypelook("Mos1") && thismodel->INPmodType != INPtypelook("Mos2") && thismodel->INPmodType != INPtypelook("Mos3") && thismodel->INPmodType != INPtypelook("Mos5") && thismodel->INPmodType != INPtypelook("Mos6") && thismodel->INPmodType != INPtypelook("Mos8") && thismodel->INPmodType != INPtypelook("Mos9") && thismodel->INPmodType != INPtypelook("BSIM1") && thismodel->INPmodType != INPtypelook("BSIM2") && thismodel->INPmodType != INPtypelook("BSIM3") && thismodel->INPmodType != INPtypelook("BSIM3v32") && thismodel->INPmodType != INPtypelook("B4SOI") && thismodel->INPmodType != INPtypelook("B3SOIPD") && thismodel->INPmodType != INPtypelook("B3SOIFD") && thismodel->INPmodType != INPtypelook("B3SOIDD") && thismodel->INPmodType != INPtypelook("BSIM4") && thismodel->INPmodType != INPtypelook("BSIM4v5") && thismodel->INPmodType != INPtypelook("BSIM4v6") && thismodel->INPmodType != INPtypelook("BSIM4v7") && thismodel->INPmodType != INPtypelook("BSIM3v0") && thismodel->INPmodType != INPtypelook("BSIM3v1") && thismodel->INPmodType != INPtypelook("SOI3") && #ifdef CIDER thismodel->INPmodType != INPtypelook("NUMOS") && #endif #ifdef ADMS thismodel->INPmodType != INPtypelook("ekv") && thismodel->INPmodType != INPtypelook("psp102") && #endif thismodel->INPmodType != INPtypelook("HiSIM2") && thismodel->INPmodType != INPtypelook("HiSIMHV1") && thismodel->INPmodType != INPtypelook("HiSIMHV2") && thismodel->INPmodType != INPtypelook("VDMOS")) { LITERR ("incorrect model type"); return; } type = thismodel->INPmodType; mdfast = thismodel->INPmodfast; IFC (newInstance, (ckt, mdfast, &fast, name)); for (i = 0; i < model_numnodes_; i++) if (i < numnodes) IFC (bindNode, (ckt, fast, i + 1, node[i])); else GENnode(fast)[i] = -1; PARSECALL ((&line, ckt, type, fast, &leadval, &waslead, tab)); if (waslead) LITERR (" error: no unlabeled parameter permitted on mosfet\n"); } tmpk8ny_4pz/src/spicelib/parser/inpgstr.c0000644000175000017500000000342113546075722020667 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* * Get string input token from 'line', and return a pointer to it in 'token' */ #include "ngspice/ngspice.h" #include #include "ngspice/iferrmsg.h" #include "ngspice/inpdefs.h" #include "inpxx.h" int INPgetStr(char **line, char **token, int gobble) /* eat non-whitespace trash AFTER token? */ { char *point; char separator = '\0'; /* Scan along throwing away garbage characters. */ for (point = *line; *point != '\0'; point++) { if ((*point == ' ') || (*point == '\t') || (*point == '=') || (*point == '(') || (*point == ')') || (*point == ',')) continue; break; } if (*point == '"') { separator = '"'; point++; } else if (*point == '\'') { separator = '\''; point++; } /* mark beginning of token */ *line = point; /* now find all good characters */ for (point = *line; *point != '\0'; point++) { if ((*point == ' ') || (*point == '\t') || (*point == '=') || (*point == '(') || (*point == ')') || (*point == ',') || (*point == separator)) break; } /* Create token */ *token = TMALLOC(char, 1 + point - *line); if (!*token) return (E_NOMEM); (void) strncpy(*token, *line, (size_t) (point - *line)); *(*token + (point - *line)) = '\0'; *line = point; /* Gobble garbage to next token. */ if (separator && **line == separator) { (*line)++; /* Skip one closing separator */ } for (; **line != '\0'; (*line)++) { if (**line == ' ') continue; if (**line == '\t') continue; if ((**line == '=') && gobble) continue; if ((**line == ',') && gobble) continue; break; } return (OK); } tmpk8ny_4pz/src/spicelib/parser/inp2o.c0000644000175000017500000000577113546075722020242 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1990 Jaijeet S. Roychowdhury **********/ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" void INP2O(CKTcircuit *ckt, INPtables * tab, struct card *current) { /* Oname [IC=,,,] */ int type; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *name; /* the resistor's name */ char *nname1; /* the first node's name */ char *nname2; /* the second node's name */ char *nname3; /* the third node's name */ char *nname4; /* the fourth node's name */ CKTnode *node1; /* the first node's node pointer */ CKTnode *node2; /* the second node's node pointer */ CKTnode *node3; /* the third node's node pointer */ CKTnode *node4; /* the fourth node's node pointer */ int error; /* error code temporary */ GENinstance *fast; /* pointer to the actual instance */ int waslead; /* flag to indicate that funny unlabeled number was found */ double leadval; /* actual value of unlabeled number */ char *model; /* the name of the model */ INPmodel *thismodel; /* pointer to model description for user's model */ GENmodel *mdfast; /* pointer to the actual model */ IFuid uid; /* uid for default model */ type = INPtypelook("LTRA"); if (type < 0) { LITERR("Device type LossyXmissionLine not supported by this binary\n"); return; } line = current->line; INPgetNetTok(&line, &name, 1); INPinsert(&name, tab); INPgetNetTok(&line, &nname1, 1); INPtermInsert(ckt, &nname1, tab, &node1); INPgetNetTok(&line, &nname2, 1); INPtermInsert(ckt, &nname2, tab, &node2); INPgetNetTok(&line, &nname3, 1); INPtermInsert(ckt, &nname3, tab, &node3); INPgetNetTok(&line, &nname4, 1); INPtermInsert(ckt, &nname4, tab, &node4); INPgetNetTok(&line, &model, 1); if (INPlookMod(model)) { /* do nothing for now */ /* no action required */ } else { /* nname4 = model; INPtermInsert(ckt,&nname4,tab,&node4); INPgetNetTok(&line, &model, 1); */ } INPinsert(&model, tab); current->error = INPgetMod(ckt, model, &thismodel, tab); if (thismodel != NULL) { if (type != thismodel->INPmodType) { LITERR("incorrect model type"); return; } mdfast = (thismodel->INPmodfast); } else { if (!tab->defOmod) { /* create default O model */ IFnewUid(ckt, &uid, NULL, "O", UID_MODEL, NULL); IFC(newModel, (ckt, type, &(tab->defOmod), uid)); } mdfast = tab->defOmod; } IFC(newInstance, (ckt, mdfast, &fast, name)); IFC(bindNode, (ckt, fast, 1, node1)); IFC(bindNode, (ckt, fast, 2, node2)); IFC(bindNode, (ckt, fast, 3, node3)); IFC(bindNode, (ckt, fast, 4, node4)); PARSECALL((&line, ckt, type, fast, &leadval, &waslead, tab)); } tmpk8ny_4pz/src/spicelib/parser/ChangeLog0000644000175000017500000001051513546075722020611 0ustar carstencarsten2003.4.10 Stuart Brorson * Cloned INPgetNetTok from INPgetTok in inpgtok.c * Modified inpg2*.c to use INPgetNetTok for all netnames. * Added explanatory comments to many files. 2000-10-12 Arno W. Peters * inpeval.c: Bugfix for subcircuits contributed by Michael Widlok. 2000-09-09 Arno W. Peters * inp2dot.c: Removed unused static functions dot_ic and dot_nodeset. * inppas2.c: Added back parsing for dotlines. 2000-09-02 Paolo Nenzi * Patched with code sent by Alan Gillespie. See more on top level ChangeLog. 2000-07-07 Arno W. Peters * circuit/inp2b.c, circuit/inp2c.c, circuit/inp2d.c, circuit/inp2dot.c, circuit/inp2e.c, circuit/inp2f.c, circuit/inp2g.c, circuit/inp2h.c, circuit/inp2i.c, circuit/inp2j.c, circuit/inp2k.c, circuit/inp2l.c, circuit/inp2m.c, circuit/inp2o.c, circuit/inp2q.c, circuit/inp2r.c, circuit/inp2s.c, circuit/inp2t.c, circuit/inp2u.c, circuit/inp2v.c, circuit/inp2w.c, circuit/inp2z.c: Added ; after macros. 2000-05-22 Paolo Nenzi * inp2dot.c: Applied Widlok patch. * inpdoopt.c: Applied Widolok patch:commented the entire function, seems obsolete. * inpptree.c, ptfuncs.c: Applied Widlok patch. Now there is a new step function called u2. 2000-04-04 Paolo Nenzi * inpfindl.c: Modified the file for BSIM4 and future extensions to BSIM5 and BSIM6. I have merged the inpfindl.c coming with the BSIM4 distribution. * inp2r.c: Added acval=val to initialize the acval parameter to a significative value. Hope does not brak anything. * inp2m.c: Added BSIM4 support. * inpdomod.c: Added support for BSIM4 device model. 2000-03-28 Paolo Nenzi * ptfuncs.c: I have applied a couple of patches by GLAO Dezay. He noted that PTln, PTlog and PTsqrt returned non consistent values if the argument was out of domain. If arg <0 they returned f(-arg). The patch is masked by #ifdef EXPERIMENTAL_CODE. You have to remove these lines or #define it to compile Dezai's patched code. 2000-03-11 Paolo Nenzi * inp2dot.c: Applied Glao Dezai patch, adding which = -1 in the .sens code. 2000-01-17 Paolo Nenzi * inp2m.c, inpdomod.c: Inserted code to dupport BSIM3V1 model as level 49. 2000-01-16 Paolo Nenzi * inp2r.c: Modified resistor code. Added instance parameter ac , from Serban Popescu contributed sources. 2000-01-15 Paolo Nenzi * inp2m.c, inpdomod.c: Inserted code to support BSIM3V2 model as level 50. 1999-12-20 Paolo Nenzi * inpgtok.c, inpptree.c: Bug Fix Bug: Scale factors (eg. m, k, meg, etc.) for constants in arbitrary source (b devices) are not recognized. Fix: Changes to inpgtok.c and inpptree.c, as supplied by Berkeley. NOTE: These changes were orignally supplied to me as a patch to 3e2 by Beorn Johnson who was maintaining Spice a while back. They were supposed to have been incorporated in Spice 3f2 at that time, but are missing from the 3f5 version that I recently got from Berkeley. I don't know if they were removed in ignorance or because of a conflict with some other requirement, but they appear to work in 3f5. ALSO, the fix for 3e2 had many more changes, all of which remain in 3f5, so don't try these alone on 3e2. 1999-09-07 Arno * inpsymt.c: removed unused function prototype for local_remove(). * sperror.c: removed unused variable `notempty' 1999-09-05 Emmanuel Rouat * inpptree.c (PTdifferentiate): removed superfluous argument to 2 occurences of function mkf * *.c: put all function prototypes in inp.h 1999-08-28 Emmanuel Rouat * Removed all #includes of misc.h and util.h (now in spice.h) 1999-08-24 Paolo Nenzi * inpdomod.c: added level check for ps model, jfet level 2 * inp2j.c: added code for ps model, jfet level 2 1999-08-08 Emmanuel Rouat * inp2dot.c (INP2dot):changed HAS_SENSE2 in WANT_SENSE2 1999-08-03 Emmanuel Rouat * ptfuncs.c: changed HAS_ATRIGH to HAVE_ACOSH,HAVE_ASINH and HAVE_ATANH provided in config.h tmpk8ny_4pz/src/spicelib/parser/inpcfix.c0000644000175000017500000000063713546075722020647 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include #include "ngspice/fteext.h" #include "ngspice/inpdefs.h" #include "inpxx.h" void INPcaseFix(register char *string) { while (*string) { if (isupper_c(*string)) { *string = tolower_c(*string); } string++; } } tmpk8ny_4pz/src/spicelib/parser/inp2f.c0000644000175000017500000000472513546075722020227 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" void INP2F(CKTcircuit *ckt, INPtables * tab, struct card *current) { /* Fname */ int type; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *name; /* the resistor's name */ char *nname1; /* the first node's name */ char *nname2; /* the second node's name */ CKTnode *node1; /* the first node's node pointer */ CKTnode *node2; /* the second node's node pointer */ int error; /* error code temporary */ GENinstance *fast; /* pointer to the actual instance */ IFvalue ptemp; /* a value structure to package resistance into */ IFvalue *parm; /* pointer to a value structure for functions which return one */ int waslead; /* flag to indicate that funny unlabeled number was found */ double leadval; /* actual value of unlabeled number */ IFuid uid; /* uid of default model to be created */ type = INPtypelook("CCCS"); if (type < 0) { LITERR("Device type CCCS not supported by this binary\n"); return; } line = current->line; INPgetNetTok(&line, &name, 1); INPinsert(&name, tab); INPgetNetTok(&line, &nname1, 1); INPtermInsert(ckt, &nname1, tab, &node1); INPgetNetTok(&line, &nname2, 1); INPtermInsert(ckt, &nname2, tab, &node2); if (!tab->defFmod) { /* create default F model */ IFnewUid(ckt, &uid, NULL, "F", UID_MODEL, NULL); IFC(newModel, (ckt, type, &(tab->defFmod), uid)); } /* call newInstance with macro IFC */ IFC(newInstance, (ckt, tab->defFmod, &fast, name)); /* call bindNode with macro IFC */ IFC(bindNode, (ckt, fast, 1, node1)); /* call bindNode with macro IFC */ IFC(bindNode, (ckt, fast, 2, node2)); parm = INPgetValue(ckt, &line, IF_INSTANCE, tab); /* call INPpName with macro GCA */ GCA(INPpName, ("control", parm, ckt, type, fast)); /* call INPdevParse with macro PARSECALL */ PARSECALL((&line, ckt, type, fast, &leadval, &waslead, tab)); if (waslead) { ptemp.rValue = leadval; /* call INPpName with macro GCA */ GCA(INPpName, ("gain", &ptemp, ckt, type, fast)); } } tmpk8ny_4pz/src/spicelib/parser/inp2b.c0000644000175000017500000000410113546075722020207 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" #include "ngspice/cktdefs.h" void INP2B(CKTcircuit *ckt, INPtables * tab, struct card *current) { /* Bname [V=expr] [I=expr] */ int type; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *name; /* the resistor's name */ char *nname1; /* the first node's name */ char *nname2; /* the second node's name */ CKTnode *node1; /* the first node's node pointer */ CKTnode *node2; /* the second node's node pointer */ int error; /* error code temporary */ GENinstance *fast; /* pointer to the actual instance */ int waslead; /* flag to indicate that funny unlabeled number was found */ double leadval; /* actual value of unlabeled number */ IFuid uid; /* uid for default model name */ /* Arbitrary source. */ type = INPtypelook("ASRC"); if (type < 0) { LITERR("Device type Asource not supported by this binary\n"); return; } /* if we find 'hertz' variable, set flag to actual circuit */ if(strstr(current->line, "hertz")) ckt->CKTvarHertz = 1; line = current->line; INPgetNetTok(&line, &name, 1); INPinsert(&name, tab); INPgetNetTok(&line, &nname1, 1); error = INPtermInsert(ckt, &nname1, tab, &node1); INPgetNetTok(&line, &nname2, 1); error = INPtermInsert(ckt, &nname2, tab, &node2); if (!tab->defBmod) { /* create default B model */ IFnewUid(ckt, &uid, NULL, "B", UID_MODEL, NULL); IFC(newModel, (ckt, type, &(tab->defBmod), uid)); } IFC(newInstance, (ckt, tab->defBmod, &fast, name)); IFC(bindNode, (ckt, fast, 1, node1)); IFC(bindNode, (ckt, fast, 2, node2)); PARSECALL((&line, ckt, type, fast, &leadval, &waslead, tab)); } tmpk8ny_4pz/src/spicelib/parser/inpeval.c0000644000175000017500000001132113546075722020635 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include #include #include "ngspice/inpdefs.h" #include "inpxx.h" double INPevaluate(char **line, int *error, int gobble) /* gobble: non-zero to gobble rest of token, zero to leave it alone */ { char *token; char *here; double mantis; int expo1; int expo2; int sign; int expsgn; char *tmpline; /* setup */ tmpline = *line; if (gobble) { /* MW. INPgetUTok should be called with gobble=0 or it make * errors in v(1,2) exp */ *error = INPgetUTok(line, &token, 0); if (*error) return (0.0); } else { token = *line; *error = 0; } mantis = 0; expo1 = 0; expo2 = 0; sign = 1; expsgn = 1; /* loop through all of the input token */ here = token; if (*here == '+') here++; /* plus, so do nothing except skip it */ else if (*here == '-') { /* minus, so skip it, and change sign */ here++; sign = -1; } if ((*here == '\0') || ((!(isdigit_c(*here))) && (*here != '.'))) { /* number looks like just a sign! */ *error = 1; if (gobble) { FREE(token); /* back out the 'gettok' operation */ *line = tmpline; } return (0); } while (isdigit_c(*here)) { /* digit, so accumulate it. */ mantis = 10 * mantis + *here - '0'; here++; } if (*here == '\0') { /* reached the end of token - done. */ if (gobble) { FREE(token); } else { *line = here; } return ((double) mantis * sign); } if (*here == ':') { /* ':' is no longer used for subcircuit node numbering but is part of ternary function a?b:c FIXME : subcircuit models still use ':' for model numbering Will this hurt somewhere? */ if (gobble) { FREE(token); } else { *line = here; } return ((double) mantis * sign); } /* after decimal point! */ if (*here == '.') { /* found a decimal point! */ here++; /* skip to next character */ if (*here == '\0') { /* number ends in the decimal point */ if (gobble) { FREE(token); } else { *line = here; } return ((double) mantis * sign); } while (isdigit_c(*here)) { /* digit, so accumulate it. */ mantis = 10 * mantis + *here - '0'; expo1 = expo1 - 1; here++; } } /* now look for "E","e",etc to indicate an exponent */ if ((*here == 'E') || (*here == 'e') || (*here == 'D') || (*here == 'd')) { /* have an exponent, so skip the e */ here++; /* now look for exponent sign */ if (*here == '+') here++; /* just skip + */ else if (*here == '-') { here++; /* skip over minus sign */ expsgn = -1; /* and make a negative exponent */ /* now look for the digits of the exponent */ } while (isdigit_c(*here)) { expo2 = 10 * expo2 + *here - '0'; here++; } } /* now we have all of the numeric part of the number, time to * look for the scale factor (alphabetic) */ switch (*here) { case 't': case 'T': expo1 = expo1 + 12; break; case 'g': case 'G': expo1 = expo1 + 9; break; case 'k': case 'K': expo1 = expo1 + 3; break; case 'u': case 'U': expo1 = expo1 - 6; break; case 'n': case 'N': expo1 = expo1 - 9; break; case 'p': case 'P': expo1 = expo1 - 12; break; case 'f': case 'F': expo1 = expo1 - 15; break; case 'm': case 'M': if (((here[1] == 'E') || (here[1] == 'e')) && ((here[2] == 'G') || (here[2] == 'g'))) { expo1 = expo1 + 6; /* Meg */ } else if (((here[1] == 'I') || (here[1] == 'i')) && ((here[2] == 'L') || (here[2] == 'l'))) { expo1 = expo1 - 6; mantis *= 25.4; /* Mil */ } else { expo1 = expo1 - 3; /* m, milli */ } break; default: break; } if (gobble) { FREE(token); } else { *line = here; } return (sign * mantis * pow(10.0, (double) (expo1 + expsgn * expo2))); } tmpk8ny_4pz/src/spicelib/parser/inppas2.c0000644000175000017500000001404713546075722020563 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/iferrmsg.h" #include "ngspice/inpmacs.h" #include "inppas2.h" #include "inpxx.h" #ifdef XSPICE /* gtri - add - wbk - 11/9/90 - include function prototypes */ #include "ngspice/mifproto.h" /* gtri - end - wbk - 11/9/90 */ #endif /* uncomment to trace in this file */ /*#define TRACE*/ /* pass 2 - Scan through the lines. ".model" cards have processed in * pass1 and are ignored here. */ void INPpas2(CKTcircuit *ckt, struct card *data, INPtables * tab, TSKtask *task) { struct card *current; char c; char *groundname = "0"; char *gname; CKTnode *gnode; int error; /* used by the macros defined above */ #ifdef HAS_PROGREP int linecount = 0, actcount = 0; #endif #ifdef TRACE /* SDB debug statement */ printf("Entered INPpas2 . . . .\n"); #endif #ifdef XSPICE if (!ckt->CKTadevFlag) ckt->CKTadevFlag = 0; #endif error = INPgetTok(&groundname, &gname, 1); if (error) data->error = INPerrCat(data->error, INPmkTemp ("can't read internal ground node name!\n")); error = INPgndInsert(ckt, &gname, tab, &gnode); if (error && error != E_EXISTS) data->error = INPerrCat(data->error, INPmkTemp ("can't insert internal ground node in symbol table!\n")); #ifdef TRACE printf("Examining this deck:\n"); for (current = data; current != NULL; current = current->nextcard) { printf("%s\n", current->line); } printf("\n"); #endif #ifdef HAS_PROGREP for (current = data; current != NULL; current = current->nextcard) linecount++; #endif for (current = data; current != NULL; current = current->nextcard) { #ifdef TRACE /* SDB debug statement */ printf("In INPpas2, examining card %s . . .\n", current->line); #endif #ifdef HAS_PROGREP if (linecount > 0) { SetAnalyse( "Circuit2", (int) (1000.*actcount/linecount)); actcount++; } #endif c = *(current->line); if(islower_c(c)) c = toupper_c(c); switch (c) { case ' ': /* blank line (space leading) */ case '\t': /* blank line (tab leading) */ break; #ifdef XSPICE /* gtri - add - wbk - 10/23/90 - add case for 'A' devices */ case 'A': /* Aname */ MIF_INP2A(ckt, tab, current); ckt->CKTadevFlag = 1; /* an 'A' device is requested */ break; /* gtri - end - wbk - 10/23/90 */ #endif case 'R': /* Rname [][][w=][l=] */ INP2R(ckt, tab, current); break; case 'C': /* Cname [IC=] */ INP2C(ckt, tab, current); break; case 'L': /* Lname [IC=] */ INP2L(ckt, tab, current); break; case 'G': /* Gname */ INP2G(ckt, tab, current); break; case 'E': /* Ename */ INP2E(ckt, tab, current); break; case 'F': /* Fname */ INP2F(ckt, tab, current); break; case 'H': /* Hname */ INP2H(ckt, tab, current); break; case 'D': /* Dname [] [OFF] [IC=] */ INP2D(ckt, tab, current); break; case 'J': /* Jname [] [OFF] [IC=,] */ INP2J(ckt, tab, current); break; case 'Z': /* Zname [] [OFF] [IC=,] */ INP2Z(ckt, tab, current); break; case 'M': /* Mname [L=] [W=] [AD=] [AS=] [PD=] [PS=] [NRD=] [NRS=] [OFF] [IC=,,] */ INP2M(ckt, tab, current); break; #ifdef NDEV case 'N': /* Nname [...] [] */ INP2N(ckt, tab, current); break; #endif case 'O': /* Oname [IC=,,,] */ INP2O(ckt, tab, current); break; case 'V': /* Vname [ [DC] ] [AC [ [ ] ] ] [] */ INP2V(ckt, tab, current); break; case 'I': /* Iname [ [DC] ] [AC [ [ ] ] ] [] */ INP2I(ckt, tab, current); break; case 'Q': /* Qname [] [] [OFF] [IC=,] */ INP2Q(ckt, tab, current, gnode); break; case 'T': /* Tname [TD=] [F= [NL=]][IC=,,,] */ INP2T(ckt, tab, current); break; case 'S': /* Sname [] [IC] */ INP2S(ckt, tab, current); break; case 'W': /* Wname [] [IC] */ /* CURRENT CONTROLLED SWITCH */ INP2W(ckt, tab, current); break; case 'U': /* Uname [l=] [n=] */ INP2U(ckt, tab, current); break; /* Kspice addition - saj */ case 'P': /* Pname ... ... [] */ /* R= L= G= C= len= */ INP2P(ckt, tab, current); break; case 'Y': /* Yname R= L= G= C= len= */ INP2Y(ckt, tab, current); break; /* end Kspice */ case 'K': /* Kname Lname Lname */ INP2K(ckt, tab, current); break; case '*': case '$': /* * - a comment - ignore */ break; case 'B': /* Bname [V=expr] [I=expr] */ /* Arbitrary source. */ INP2B(ckt, tab, current); break; case '.': /* . Many possibilities */ if (INP2dot(ckt,tab,current,task,gnode)) return; break; case '\0': break; default: /* the un-implemented device */ LITERR(" unknown device type - error \n"); break; } } return; } tmpk8ny_4pz/src/spicelib/parser/inpmktmp.c0000644000175000017500000000066713546075722021051 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include #include "ngspice/inpdefs.h" #include "inpxx.h" char *INPmkTemp(char *string) { size_t len; char *temp; len = strlen(string); temp = TMALLOC(char, len + 1); if (temp != NULL) (void) strcpy(temp, string); return (temp); } tmpk8ny_4pz/src/spicelib/parser/ptfuncs.c0000644000175000017500000001165113546075722020667 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * All the functions used in the parse tree. These functions return HUGE * if their argument is out of range. */ #include "ngspice/ngspice.h" #include #include "ngspice/fteext.h" #include "ngspice/ifsim.h" #include "ngspice/inpptree.h" #include "inpxx.h" #include "ngspice/compatmode.h" /* XXX These should be in math.h */ double PTfudge_factor; #define MODULUS(NUM,LIMIT) ((NUM) - ((int) ((NUM) / (LIMIT))) * (LIMIT)) double PTabs(double arg) { return fabs(arg); } double PTsgn(double arg) { return arg > 0.0 ? 1.0 : arg < 0.0 ? -1.0 : 0.0; } double PTplus(double arg1, double arg2) { return (arg1 + arg2); } double PTminus(double arg1, double arg2) { return (arg1 - arg2); } double PTtimes(double arg1, double arg2) { return (arg1 * arg2); } double PTdivide(double arg1, double arg2) { if (arg2 >= 0.0) arg2 += PTfudge_factor; else arg2 -= PTfudge_factor; if (arg2 == 0.0) return (HUGE); return (arg1 / arg2); } double PTpower(double arg1, double arg2) { return pow(fabs(arg1), arg2); } double PTpwr(double arg1, double arg2) { /* if PSPICE device is evaluated */ if (arg1 == 0.0 && arg2 < 0.0 && (inp_compat_mode == COMPATMODE_PS || inp_compat_mode == COMPATMODE_PSA || inp_compat_mode == COMPATMODE_LTPS || inp_compat_mode == COMPATMODE_LTPSA)) arg1 += PTfudge_factor; if (arg1 < 0.0) return (-pow(-arg1, arg2)); else return (pow(arg1, arg2)); } double PTmin(double arg1, double arg2) { return arg1 > arg2 ? arg2 : arg1; } double PTmax(double arg1, double arg2) { return arg1 > arg2 ? arg1 : arg2; } double PTacos(double arg) { return (acos(arg)); } double PTacosh(double arg) { return (acosh(arg)); } double PTasin(double arg) { return (asin(arg)); } double PTasinh(double arg) { return (asinh(arg)); } double PTatan(double arg) { return (atan(arg)); } double PTatanh(double arg) { return (atanh(arg)); } double PTustep(double arg) { if (arg < 0.0) return 0.0; else if (arg > 0.0) return 1.0; else return 0.5; /* Ick! */ } /* MW. PTcif is like "C" if - 0 for (arg<=0), 1 elsewhere */ double PTustep2(double arg) { if (arg <= 0.0) return 0.0; else if (arg <= 1.0) return arg; else /* if (arg > 1.0) */ return 1.0; } double PTeq0(double arg) { return (arg == 0.0) ? 1.0 : 0.0; } double PTne0(double arg) { return (arg != 0.0) ? 1.0 : 0.0; } double PTgt0(double arg) { return (arg > 0.0) ? 1.0 : 0.0; } double PTlt0(double arg) { return (arg < 0.0) ? 1.0 : 0.0; } double PTge0(double arg) { return (arg >= 0.0) ? 1.0 : 0.0; } double PTle0(double arg) { return (arg <= 0.0) ? 1.0 : 0.0; } double PTuramp(double arg) { if (arg < 0.0) return 0.0; else return arg; } double PTcos(double arg) { return (cos(MODULUS(arg, 2 * M_PI))); } double PTcosh(double arg) { return (cosh(arg)); } double PTexp(double arg) { return (exp(arg)); } double PTlog(double arg) { if (arg < 0.0) return (HUGE); return (log(arg)); } double PTlog10(double arg) { if (arg < 0.0) return (HUGE); return (log10(arg)); } double PTsin(double arg) { return (sin(MODULUS(arg, 2 * M_PI))); } double PTsinh(double arg) { return (sinh(arg)); } double PTsqrt(double arg) { if (arg < 0.0) return (HUGE); return (sqrt(arg)); } double PTtan(double arg) { return (tan(MODULUS(arg, M_PI))); } double PTtanh(double arg) { return (tanh(arg)); } double PTuminus(double arg) { return (- arg); } double PTpwl(double arg, void *data) { struct pwldata { int n; double *vals; } *thing = (struct pwldata *) data; double y; int k0 = 0; int k1 = thing->n/2 - 1; while(k1-k0 > 1) { int k = (k0+k1)/2; if(thing->vals[2*k] > arg) k1 = k; else k0 = k; } y = thing->vals[2*k0+1] + (thing->vals[2*k1+1] - thing->vals[2*k0+1]) * (arg - thing->vals[2*k0]) / (thing->vals[2*k1] - thing->vals[2*k0]); return y; } double PTpwl_derivative(double arg, void *data) { struct pwldata { int n; double *vals; } *thing = (struct pwldata *) data; double y; int k0 = 0; int k1 = thing->n/2 - 1; while(k1-k0 > 1) { int k = (k0+k1)/2; if(thing->vals[2*k] > arg) k1 = k; else k0 = k; } y = (thing->vals[2*k1+1] - thing->vals[2*k0+1]) / (thing->vals[2*k1] - thing->vals[2*k0]); return y; } double PTceil(double arg1) { return (ceil(arg1)); } double PTfloor(double arg1) { return (floor(arg1)); } double PTnint(double arg1) { /* round to "nearest integer", * round half-integers to the nearest even integer * rely on default rounding mode of IEEE 754 to do so */ return nearbyint(arg1); } tmpk8ny_4pz/src/spicelib/parser/inp2u.c0000644000175000017500000000514613546075722020244 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" void INP2U(CKTcircuit *ckt, INPtables * tab, struct card *current) { /* Uname [l=] [n=] */ int mytype; /* the type my lookup says URC is */ int type; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *name; /* the resistor's name */ char *nname1; /* the first node's name */ char *nname2; /* the second node's name */ char *nname3; /* the third node's name */ CKTnode *node1; /* the first node's node pointer */ CKTnode *node2; /* the second node's node pointer */ CKTnode *node3; /* the third node's node pointer */ int error; /* error code temporary */ GENinstance *fast; /* pointer to the actual instance */ int waslead; /* flag to indicate that funny unlabeled number was found */ double leadval; /* actual value of unlabeled number */ char *model; /* name of the model */ INPmodel *thismodel; /* pointer to our model descriptor */ GENmodel *mdfast; /* pointer to the actual model */ IFuid uid; /* uid for default model */ mytype = INPtypelook("URC"); if (mytype < 0) { LITERR("Device type URC not supported by this binary\n"); return; } line = current->line; INPgetNetTok(&line, &name, 1); INPinsert(&name, tab); INPgetNetTok(&line, &nname1, 1); INPtermInsert(ckt, &nname1, tab, &node1); INPgetNetTok(&line, &nname2, 1); INPtermInsert(ckt, &nname2, tab, &node2); INPgetNetTok(&line, &nname3, 1); INPtermInsert(ckt, &nname3, tab, &node3); INPgetNetTok(&line, &model, 1); INPinsert(&model, tab); current->error = INPgetMod(ckt, model, &thismodel, tab); if (thismodel != NULL) { if (mytype != thismodel->INPmodType) { LITERR("incorrect model type"); return; } type = mytype; mdfast = (thismodel->INPmodfast); } else { type = mytype; if (!tab->defUmod) { /* create deafult U model */ IFnewUid(ckt, &uid, NULL, "U", UID_MODEL, NULL); IFC(newModel, (ckt, type, &(tab->defUmod), uid)); } mdfast = tab->defUmod; } IFC(newInstance, (ckt, mdfast, &fast, name)); IFC(bindNode, (ckt, fast, 1, node1)); IFC(bindNode, (ckt, fast, 2, node2)); IFC(bindNode, (ckt, fast, 3, node3)); PARSECALL((&line, ckt, type, fast, &leadval, &waslead, tab)); } tmpk8ny_4pz/src/spicelib/parser/inperror.c0000644000175000017500000000154613546075722021047 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* * provide the error message appropriate for the given error code */ #include "ngspice/ngspice.h" #include "ngspice/fteext.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/sperror.h" #include "inpxx.h" char *INPerror(int type) { char *val; char *ebuf; /*CDHW Lots of things set errMsg but it is never used so let's hack it in CDHW*/ if ( errMsg ) { val = errMsg; errMsg = NULL; } else /*CDHW end of hack CDHW*/ val = copy(SPerror(type)); if (!val) return NULL; if (errRtn) ebuf = tprintf("%s detected in routine \"%s\"\n", val, errRtn); else ebuf = tprintf("%s\n", val); tfree(val); return ebuf; } tmpk8ny_4pz/src/spicelib/parser/inpptree-parser-y.h0000644000175000017500000000075313546075722022601 0ustar carstencarstenstruct PTltype { char *start, *stop; }; extern int PTlex(YYSTYPE *lvalp, struct PTltype *llocp, char **line); extern INPparseNode *PT_mkbnode(const char *opstr, INPparseNode *arg1, INPparseNode *arg2); extern INPparseNode *PT_mkfnode(const char *fname, INPparseNode *arg); extern INPparseNode *PT_mknnode(double number); extern INPparseNode *PT_mksnode(const char *string, void *ckt); #if defined (_MSC_VER) # define __func__ __FUNCTION__ /* __func__ is C99, but MSC can't */ #endif tmpk8ny_4pz/src/spicelib/parser/inpptree.c0000644000175000017500000012604013546075722021032 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ //#define TRACE #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/inpdefs.h" #include "ngspice/inpptree.h" #include "inpxx.h" #include "inpptree-parser.h" #include "inpptree-parser-y.h" #ifdef OLD_BISON int PTparse(char **line, INPparseNode **p, CKTcircuit *ckt); #endif static INPparseNode *mkcon(double value); static INPparseNode *mkb(int type, INPparseNode * left, INPparseNode * right); static INPparseNode *mkf(int type, INPparseNode * arg); static int PTcheck(INPparseNode * p); static INPparseNode *mkvnode(char *name); static INPparseNode *mkinode(char *name); static INPparseNode *PTdifferentiate(INPparseNode * p, int varnum); static void free_tree(INPparseNode *); static void printTree(INPparseNode *); /* * LAW for INPparseNode* generator and consumer functions: * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Newly allocated structs shall be initialized with `usecnt' = 0 * When filling INPparseNode * slots of newly initialized structs * their `usecnt' shall be incremented * Generators pass the responsibility `to free' return values * on to their invokers. * Functions generally process args with exactly one of: * - inc_usage(arg) if they insert an argument into a struct * - release_tree(arg) if they don't make any use of it * - pass it on to another function() * Functions use the the result of a function invocations with one of: * - inc_usage(result) if they insert the result into a struct * - release_tree(result) if they don't make any use of it * - pass it on to another function() * - simply return the result * * mkfirst(first, second) * is used to safely release its second argument, * and return its first * */ static inline INPparseNode * inc_usage(INPparseNode *p) { if(p) p->usecnt ++; return p; } static void dec_usage(INPparseNode *p) { if(p && --p->usecnt <= 0) free_tree(p); } static void release_tree(INPparseNode *p) { if(p && p->usecnt <= 0) free_tree(p); } static INPparseNode * mkfirst(INPparseNode *fst, INPparseNode *snd) { if(fst) { fst->usecnt ++; release_tree(snd); fst->usecnt --; } else { release_tree(snd); } return fst; } static IFvalue *values = NULL; static int *types; static int numvalues; static CKTcircuit *circuit; static INPtables *tables; extern IFsimulator *ft_sim; /* XXX */ /* Some tables that the parser uses. */ static struct op { int number; char *name; void (*funcptr)(void); } ops[] = { { PT_COMMA, ",", NULL}, { PT_PLUS, "+", (void(*)(void)) PTplus}, { PT_MINUS, "-", (void(*)(void)) PTminus}, { PT_TIMES, "*", (void(*)(void)) PTtimes}, { PT_DIVIDE, "/", (void(*)(void)) PTdivide}, { PT_POWER, "^", (void(*)(void)) PTpower} }; #define NUM_OPS (int)NUMELEMS(ops) static struct func { char *name; int number; void (*funcptr)(void); } funcs[] = { { "abs", PTF_ABS, (void(*)(void)) PTabs } , { "acos", PTF_ACOS, (void(*)(void)) PTacos } , { "acosh", PTF_ACOSH, (void(*)(void)) PTacosh } , { "asin", PTF_ASIN, (void(*)(void)) PTasin } , { "asinh", PTF_ASINH, (void(*)(void)) PTasinh } , { "atan", PTF_ATAN, (void(*)(void)) PTatan } , { "atanh", PTF_ATANH, (void(*)(void)) PTatanh } , { "cos", PTF_COS, (void(*)(void)) PTcos } , { "cosh", PTF_COSH, (void(*)(void)) PTcosh } , { "exp", PTF_EXP, (void(*)(void)) PTexp } , { "ln", PTF_LOG, (void(*)(void)) PTlog } , { "log", PTF_LOG, (void(*)(void)) PTlog } , { "log10", PTF_LOG10, (void(*)(void)) PTlog10 } , { "sgn", PTF_SGN, (void(*)(void)) PTsgn } , { "sin", PTF_SIN, (void(*)(void)) PTsin } , { "sinh", PTF_SINH, (void(*)(void)) PTsinh } , { "sqrt", PTF_SQRT, (void(*)(void)) PTsqrt } , { "tan", PTF_TAN, (void(*)(void)) PTtan } , { "tanh", PTF_TANH, (void(*)(void)) PTtanh } , { "u", PTF_USTEP, (void(*)(void)) PTustep } , { "uramp", PTF_URAMP, (void(*)(void)) PTuramp } , { "ceil", PTF_CEIL, (void(*)(void)) PTceil } , { "floor", PTF_FLOOR, (void(*)(void)) PTfloor } , { "nint", PTF_NINT, (void(*)(void)) PTnint } , { "-", PTF_UMINUS, (void(*)(void)) PTuminus }, /* MW. cif function added */ { "u2", PTF_USTEP2, (void(*)(void)) PTustep2}, { "pwl", PTF_PWL, (void(*)(void)) PTpwl}, { "pwl_derivative", PTF_PWL_DERIVATIVE, (void(*)(void)) PTpwl_derivative}, { "eq0", PTF_EQ0, (void(*)(void)) PTeq0}, { "ne0", PTF_NE0, (void(*)(void)) PTne0}, { "gt0", PTF_GT0, (void(*)(void)) PTgt0}, { "lt0", PTF_LT0, (void(*)(void)) PTlt0}, { "ge0", PTF_GE0, (void(*)(void)) PTge0}, { "le0", PTF_LE0, (void(*)(void)) PTle0}, { "pow", PTF_POW, (void(*)(void)) PTpower}, { "pwr", PTF_PWR, (void(*)(void)) PTpwr}, { "min", PTF_MIN, (void(*)(void)) PTmin}, { "max", PTF_MAX, (void(*)(void)) PTmax}, } ; #define NUM_FUNCS (int)NUMELEMS(funcs) /* These are all the constants any sane person needs. */ static struct constant { char *name; double value; } constants[] = { { "e", M_E}, { "pi", M_PI} }; #define NUM_CONSTANTS (int)NUMELEMS(constants) /* Parse the expression in *line as far as possible, and return the parse * tree obtained. If there is an error, *pt will be set to NULL and an error * message will be printed. */ void INPgetTree(char **line, INPparseTree ** pt, CKTcircuit *ckt, INPtables * tab) { INPparseNode *p = NULL; int i, rv; values = NULL; types = NULL; numvalues = 0; circuit = ckt; tables = tab; #ifdef TRACE fprintf(stderr,"%s, line = \"%s\"\n", __func__, *line); #endif rv = PTparse(line, &p, ckt); if (rv || !p || !PTcheck(p)) { *pt = NULL; release_tree(p); } else { (*pt) = TMALLOC(INPparseTree, 1); (*pt)->p.numVars = numvalues; (*pt)->p.varTypes = types; (*pt)->p.vars = values; (*pt)->p.IFeval = IFeval; (*pt)->tree = inc_usage(p); (*pt)->derivs = TMALLOC(INPparseNode *, numvalues); for (i = 0; i < numvalues; i++) (*pt)->derivs[i] = inc_usage(PTdifferentiate(p, i)); } values = NULL; types = NULL; numvalues = 0; circuit = NULL; tables = NULL; } /* This routine takes the partial derivative of the parse tree with respect to * the i'th variable. We try to do optimizations like getting rid of 0-valued * terms. * *** Note that in the interests of simplicity we share some subtrees between *** the function and its derivatives. This means that you can't free the *** trees. */ static INPparseNode *PTdifferentiate(INPparseNode * p, int varnum) { INPparseNode *arg1 = NULL, *arg2 = NULL, *newp = NULL; switch (p->type) { case PT_TIME: case PT_TEMPERATURE: case PT_FREQUENCY: case PT_CONSTANT: newp = mkcon(0.0); break; case PT_VAR: /* Is this the variable we're differentiating wrt? */ if (p->valueIndex == varnum) newp = mkcon(1.0); else newp = mkcon(0.0); break; case PT_PLUS: case PT_MINUS: arg1 = PTdifferentiate(p->left, varnum); arg2 = PTdifferentiate(p->right, varnum); newp = mkb(p->type, arg1, arg2); break; case PT_TIMES: /* d(a * b) = d(a) * b + d(b) * a */ arg1 = PTdifferentiate(p->left, varnum); arg2 = PTdifferentiate(p->right, varnum); newp = mkb(PT_PLUS, mkb(PT_TIMES, arg1, p->right), mkb(PT_TIMES, p->left, arg2)); break; case PT_DIVIDE: /* d(a / b) = (d(a) * b - d(b) * a) / b^2 */ arg1 = PTdifferentiate(p->left, varnum); arg2 = PTdifferentiate(p->right, varnum); newp = mkb(PT_DIVIDE, mkb(PT_MINUS, mkb(PT_TIMES, arg1, p->right), mkb(PT_TIMES, p->left, arg2)), mkb(PT_POWER, p->right, mkcon(2.0))); break; case PT_POWER: /* * ^ : a^b -> |a| math^ b * * D(pow(a,b)) * = D(exp(b*log(abs(a)))) * = exp(b*log(abs(a))) * D(b*log(abs(a))) * = pow(a,b) * (D(b)*log(abs(a)) + b*D(abs(a))/abs(a)) * = pow(a,b) * (D(b)*log(abs(a)) + b*sgn(a)*D(a)/abs(a)) * = pow(a,b) * (D(b)*log(abs(a)) + b*D(a)/a) * * when D(b) == 0, then * * D(pow(a,b)) * = pow(a,b) * (D(b)*log(abs(a)) + b*D(a)/a) * = pow(a,b) * b * D(a)/a * = pow(a,b) * b * D(a)/(signum(a) * abs(a)) * = pow(a, b-1) * b * D(a) / signum(a) * = pwr(a, b-1) * b * D(a) */ #define a p->left #define b p->right if (b->type == PT_CONSTANT) { arg1 = PTdifferentiate(a, varnum); newp = mkb(PT_TIMES, mkb(PT_TIMES, mkcon(b->constant), mkf(PTF_PWR, mkb(PT_COMMA, a, mkcon(b->constant - 1.0)))), arg1); } else { arg1 = PTdifferentiate(a, varnum); arg2 = PTdifferentiate(b, varnum); newp = mkb(PT_TIMES, mkf(PTF_POW, mkb(PT_COMMA, a, b)), mkb(PT_PLUS, mkb(PT_TIMES, b, mkb(PT_DIVIDE, arg1, a)), mkb(PT_TIMES, arg2, mkf(PTF_LOG, mkf(PTF_ABS, a))))); } #undef b #undef a break; case PT_TERN: /* ternary_fcn(cond,exp1,exp2) */ // naive: // d/d ternary_fcn(cond,exp1,exp2) --> ternary_fcn(cond, d/d exp1, d/d exp2) { // extern void printTree(INPparseNode *); // // printf("debug: %s, PT_TERN: ", __func__); // printTree(p); // printf("\n"); newp = mkb(PT_TERN, p->left, mkb(PT_COMMA, PTdifferentiate(p->right->left, varnum), PTdifferentiate(p->right->right, varnum))); // printf("debug, %s, returns; ", __func__); // printTree(newp); // printf("\n"); return mkfirst(newp, p); } case PT_FUNCTION: /* Many cases. Set arg1 to the derivative of the function, * and arg2 to the derivative of the argument. */ switch (p->funcnum) { case PTF_ABS: /* sgn(u) */ arg1 = mkf(PTF_SGN, p->left); break; case PTF_SGN: arg1 = mkcon(0.0); break; case PTF_ACOS: /* - 1 / sqrt(1 - u^2) */ arg1 = mkb(PT_DIVIDE, mkcon(-1.0), mkf(PTF_SQRT, mkb(PT_MINUS, mkcon(1.0), mkb(PT_POWER, p->left, mkcon(2.0))))); break; case PTF_ACOSH: /* 1 / sqrt(u^2 - 1) */ arg1 = mkb(PT_DIVIDE, mkcon(1.0), mkf(PTF_SQRT, mkb(PT_MINUS, mkb(PT_POWER, p->left, mkcon(2.0)), mkcon(1.0)))); break; case PTF_ASIN: /* 1 / sqrt(1 - u^2) */ arg1 = mkb(PT_DIVIDE, mkcon(1.0), mkf(PTF_SQRT, mkb(PT_MINUS, mkcon(1.0), mkb(PT_POWER, p->left, mkcon(2.0))))); break; case PTF_ASINH: /* 1 / sqrt(u^2 + 1) */ arg1 = mkb(PT_DIVIDE, mkcon(1.0), mkf(PTF_SQRT, mkb(PT_PLUS, mkb(PT_POWER, p->left, mkcon(2.0)), mkcon(1.0)))); break; case PTF_ATAN: /* 1 / (1 + u^2) */ arg1 = mkb(PT_DIVIDE, mkcon(1.0), mkb(PT_PLUS, mkb(PT_POWER, p->left, mkcon(2.0)), mkcon(1.0))); break; case PTF_ATANH: /* 1 / (1 - u^2) */ arg1 = mkb(PT_DIVIDE, mkcon(1.0), mkb(PT_MINUS, mkcon(1.0), mkb(PT_POWER, p->left, mkcon(2.0)))); break; case PTF_COS: /* - sin(u) */ arg1 = mkf(PTF_UMINUS, mkf(PTF_SIN, p->left)); break; case PTF_COSH: /* sinh(u) */ arg1 = mkf(PTF_SINH, p->left); break; case PTF_EXP: /* exp(u) */ arg1 = mkf(PTF_EXP, p->left); break; case PTF_LOG: /* 1 / u */ arg1 = mkb(PT_DIVIDE, mkcon(1.0), p->left); break; case PTF_LOG10: /* log(e) / u */ arg1 = mkb(PT_DIVIDE, mkcon(M_LOG10E), p->left); break; case PTF_SIN: /* cos(u) */ arg1 = mkf(PTF_COS, p->left); break; case PTF_SINH: /* cosh(u) */ arg1 = mkf(PTF_COSH, p->left); break; case PTF_SQRT: /* 1 / (2 * sqrt(u)) */ arg1 = mkb(PT_DIVIDE, mkcon(1.0), mkb(PT_TIMES, mkcon(2.0), mkf(PTF_SQRT, p->left))); break; case PTF_TAN: /* 1 + (tan(u) ^ 2) */ arg1 = mkb(PT_PLUS, mkcon(1.0), mkb(PT_POWER, mkf(PTF_TAN, p->left), mkcon(2.0))); break; case PTF_TANH: /* 1 - (tanh(u) ^ 2) */ arg1 = mkb(PT_MINUS, mkcon(1.0), mkb(PT_POWER, mkf(PTF_TANH, p->left), mkcon(2.0))); break; case PTF_USTEP: case PTF_EQ0: case PTF_NE0: case PTF_GT0: case PTF_LT0: case PTF_GE0: case PTF_LE0: arg1 = mkcon(0.0); break; case PTF_URAMP: arg1 = mkf(PTF_USTEP, p->left); break; case PTF_FLOOR: /* naive: D(floor(u)) = 0 */ arg1 = mkcon(0.0); break; case PTF_CEIL: /* naive: D(ceil(u)) = 0 */ arg1 = mkcon(0.0); break; case PTF_NINT: /* naive: D(nint(u)) = 0 */ arg1 = mkcon(0.0); break; /* MW. PTF_CIF for new cif function */ case PTF_USTEP2: /* ustep2=uramp(x)-uramp(x-1) ustep2'=ustep(x)-ustep(x-1) */ arg1 = mkb(PT_MINUS, mkf(PTF_USTEP, p->left), mkf(PTF_USTEP, mkb(PT_MINUS, p->left, mkcon(1.0)))); break; case PTF_UMINUS: /* - 1 ; like a constant (was 0 !) */ arg1 = mkcon(-1.0); break; case PTF_PWL: /* PWL(var, x1, y1, x2, y2, ... a const list) */ arg1 = mkf(PTF_PWL_DERIVATIVE, p->left); arg1->data = p->data; break; case PTF_PWL_DERIVATIVE: /* d/dvar PWL(var, ...) */ arg1 = mkcon(0.0); break; case PTF_MIN: case PTF_MAX: /* min(a,b) --> (a ((a-b) < 0) ? a : b */ { INPparseNode *a = p->left->left; INPparseNode *b = p->left->right; int comparison = (p->funcnum == PTF_MIN) ? PTF_LT0 : PTF_GT0; #ifdef TRACE printf("debug: %s, PTF_MIN: ", __func__); printTree(p); printf("\n"); printf("debug: %s, PTF_MIN, a: ", __func__); printTree(a); printf("\n"); printf("debug: %s, PTF_MIN, b: ", __func__); printTree(b); printf("\n"); #endif newp = mkb(PT_TERN, mkf(comparison, mkb(PT_MINUS, a, b)), mkb(PT_COMMA, PTdifferentiate(a, varnum), PTdifferentiate(b, varnum))); #ifdef TRACE printf("debug, %s, returns; ", __func__); printTree(newp); printf("\n"); #endif return mkfirst(newp, p); } break; case PTF_POW: /* * pow : pow(a,b) -> |a| math^ b * * D(pow(a,b)) * = D(exp(b*log(abs(a)))) * = exp(b*log(abs(a))) * D(b*log(abs(a))) * = pow(a,b) * (D(b)*log(abs(a)) + b*D(abs(a))/abs(a)) * = pow(a,b) * (D(b)*log(abs(a)) + b*sgn(a)*D(a)/abs(a)) * = pow(a,b) * (D(b)*log(abs(a)) + b*D(a)/a) * * when D(b) == 0, then * * D(pow(a,b)) * = pow(a,b) * (D(b)*log(abs(a)) + b*D(a)/a) * = pow(a,b) * b * D(a)/a * = pow(a,b) * b * D(a)/(signum(a) * abs(a)) * = pow(a, b-1) * b * D(a) / signum(a) * = pwr(a, b-1) * b * D(a) */ { /* pow(a,b) p->left: ',' p->left->left: a p->left->right: b */ #define a p->left->left #define b p->left->right if (b->type == PT_CONSTANT) { arg1 = PTdifferentiate(a, varnum); newp = mkb(PT_TIMES, mkb(PT_TIMES, mkcon(b->constant), mkf(PTF_PWR, mkb(PT_COMMA, a, mkcon(b->constant - 1)))), arg1); #ifdef TRACE printf("pow, %s, returns; ", __func__); printTree(newp); printf("\n"); #endif } else { arg1 = PTdifferentiate(a, varnum); arg2 = PTdifferentiate(b, varnum); newp = mkb(PT_TIMES, mkf(PTF_POW, mkb(PT_COMMA, a, b)), mkb(PT_PLUS, mkb(PT_TIMES, b, mkb(PT_DIVIDE, arg1, a)), mkb(PT_TIMES, arg2, mkf(PTF_LOG, mkf(PTF_ABS, a))))); } return mkfirst(newp, p); #undef b #undef a } break; case PTF_PWR: /* * pwr : pwr(a,b) -> signum(a) * (|a| math^ b) * -> signum(a) * pow(a, b) * * Note: * D(pow(a,b)) = pow(a,b) * (D(b)*log(abs(a)) + b*D(a)/a) * * D(pwr(a,b)) * = D(signum(a) * pow(a,b)) * = D(signum(a)) * pow(a,b) + signum(a) * D(pow(a,b)) * = 0 + signum(a) * pow(a,b) * (D(b)*log(abs(a)) + b*D(a)/a) * = pwr(a,b) * (D(b)*log(abs(a)) + b*D(a)/a) * * with D(b) == 0 * * D(pwr(a,b)) * = pwr(a,b) * b * D(a)/a * = signum(a) * pow(a,b) * b * D(a)/(signum(a) * abs(a)) * = pow(a, b-1) * b * D(a) */ { /* pwr(a,b) p->left: ',' p->left->left: a p->left->right: b */ #define a p->left->left #define b p->left->right if (b->type == PT_CONSTANT) { arg1 = PTdifferentiate(a, varnum); newp = mkb(PT_TIMES, mkb(PT_TIMES, mkcon(b->constant), mkf(PTF_POW, mkb(PT_COMMA, a, mkcon(b->constant - 1.0)))), arg1); #ifdef TRACE printf("pwr, %s, returns; ", __func__); printTree(newp); printf("\n"); #endif } else { arg1 = PTdifferentiate(a, varnum); arg2 = PTdifferentiate(b, varnum); newp = mkb(PT_TIMES, mkf(PTF_PWR, mkb(PT_COMMA, a, b)), mkb(PT_PLUS, mkb(PT_TIMES, b, mkb(PT_DIVIDE, arg1, a)), mkb(PT_TIMES, arg2, mkf(PTF_LOG, mkf(PTF_ABS, a))))); } return mkfirst(newp, p); #undef b #undef a } default: fprintf(stderr, "Internal Error: bad function # %d\n", p->funcnum); return mkfirst(NULL, p); } arg2 = PTdifferentiate(p->left, varnum); newp = mkb(PT_TIMES, arg1, arg2); break; default: fprintf(stderr, "Internal error: bad node type %d\n", p->type); newp = NULL; break; } return mkfirst(newp, p); } static INPparseNode *mkcon(double value) { INPparseNode *p = TMALLOC(INPparseNode, 1); p->type = PT_CONSTANT; p->constant = value; p->usecnt = 0; return (p); } static INPparseNode *mkb(int type, INPparseNode * left, INPparseNode * right) { INPparseNode *p; int i; if ((right->type == PT_CONSTANT) && (left->type == PT_CONSTANT)) { double value; switch (type) { case PT_TIMES: value = left->constant * right->constant; return mkfirst(mkcon(value), mkfirst(left, right)); case PT_DIVIDE: value = left->constant / right->constant; return mkfirst(mkcon(value), mkfirst(left, right)); case PT_PLUS: value = left->constant + right->constant; return mkfirst(mkcon(value), mkfirst(left, right)); case PT_MINUS: value = left->constant - right->constant; return mkfirst(mkcon(value), mkfirst(left, right)); case PT_POWER: value = pow(left->constant, right->constant); return mkfirst(mkcon(value), mkfirst(left, right)); } } switch (type) { case PT_TIMES: if ((left->type == PT_CONSTANT) && (left->constant == 0)) return mkfirst(left, right); else if ((right->type == PT_CONSTANT) && (right->constant == 0)) return mkfirst(right, left); else if ((left->type == PT_CONSTANT) && (left->constant == 1)) return mkfirst(right, left); else if ((right->type == PT_CONSTANT) && (right->constant == 1)) return mkfirst(left, right); break; case PT_DIVIDE: if ((left->type == PT_CONSTANT) && (left->constant == 0)) return mkfirst(left, right); else if ((right->type == PT_CONSTANT) && (right->constant == 1)) return mkfirst(left, right); break; case PT_PLUS: if ((left->type == PT_CONSTANT) && (left->constant == 0)) return mkfirst(right, left); else if ((right->type == PT_CONSTANT) && (right->constant == 0)) return mkfirst(left, right); break; case PT_MINUS: if ((right->type == PT_CONSTANT) && (right->constant == 0)) return mkfirst(left, right); else if ((left->type == PT_CONSTANT) && (left->constant == 0)) return mkfirst(mkf(PTF_UMINUS, right), left); break; case PT_POWER: if (right->type == PT_CONSTANT) { if (right->constant == 0) return mkfirst(mkcon(1.0), mkfirst(left, right)); else if (right->constant == 1) return mkfirst(left, right); } break; case PT_TERN: if (left->type == PT_CONSTANT) { /*FIXME > 0.0, >= 0.5, != 0.0 or what ? */ p = (left->constant != 0.0) ? right->left : right->right; return mkfirst(p, mkfirst(right, left)); } if((right->left->type == PT_CONSTANT) && (right->right->type == PT_CONSTANT) && (right->left->constant == right->right->constant)) return mkfirst(right->left, mkfirst(right, left)); break; } p = TMALLOC(INPparseNode, 1); p->type = type; p->usecnt = 0; p->left = inc_usage(left); p->right = inc_usage(right); if(type == PT_TERN) { p->function = NULL; p->funcname = NULL; return (p); } for (i = 0; i < NUM_OPS; i++) if (ops[i].number == type) break; if (i == NUM_OPS) { fprintf(stderr, "Internal Error: bad type %d\n", type); return (NULL); } p->function = ops[i].funcptr; p->funcname = ops[i].name; return (p); } static INPparseNode *mkf(int type, INPparseNode * arg) { INPparseNode *p; int i; for (i = 0; i < NUM_FUNCS; i++) if (funcs[i].number == type) break; if (i == NUM_FUNCS) { fprintf(stderr, "Internal Error: bad type %d\n", type); return (NULL); } if (arg->type == PT_CONSTANT) { double constval = PTunary(funcs[i].funcptr) (arg->constant); return mkfirst(mkcon(constval), arg); } p = TMALLOC(INPparseNode, 1); p->type = PT_FUNCTION; p->usecnt = 0; p->left = inc_usage(arg); p->funcnum = funcs[i].number; p->function = funcs[i].funcptr; p->funcname = funcs[i].name; p->data = NULL; return (p); } /* Check for remaining PT_PLACEHOLDERs in the parse tree. Returns 1 if ok. */ static int PTcheck(INPparseNode * p) { switch (p->type) { case PT_PLACEHOLDER: return (0); case PT_TIME: case PT_TEMPERATURE: case PT_FREQUENCY: case PT_CONSTANT: case PT_VAR: return (1); case PT_FUNCTION: return (PTcheck(p->left)); case PT_PLUS: case PT_MINUS: case PT_TIMES: case PT_DIVIDE: case PT_POWER: case PT_COMMA: return (PTcheck(p->left) && PTcheck(p->right)); case PT_TERN: return (PTcheck(p->left) && PTcheck(p->right->left) && PTcheck(p->right->right)); default: fprintf(stderr, "Internal error: bad node type %d\n", p->type); return (0); } } /* Binop node. */ INPparseNode *PT_mkbnode(const char *opstr, INPparseNode * arg1, INPparseNode * arg2) { INPparseNode *p; int i; for (i = 0; i < NUM_OPS; i++) if (!strcmp(ops[i].name, opstr)) break; if (i == NUM_OPS) { fprintf(stderr, "Internal Error: no such op num %s\n", opstr); return mkfirst(NULL, mkfirst(arg1, arg2)); } p = TMALLOC(INPparseNode, 1); p->type = ops[i].number; p->usecnt = 0; p->funcname = ops[i].name; p->function = ops[i].funcptr; p->left = inc_usage(arg1); p->right = inc_usage(arg2); return (p); } /* * prepare_PTF_PWL() * for the PWL(expr, points...) function * collect the given points, which are expected to be given * literal constant * strip them from the INPparseNode * and pass them as an opaque struct alongside the * INPparseNode for the PWL(expr) function call * * Note: * the functionINPgetTree() is missing a recursive decending simplifier * as a consequence we can meet a PTF_UMINUS->PTF_CONSTANT * instead of a plain PTF_CONSTANT here * of course this can get arbitrarily more complex * for example PTF_TIMES -> PTF_CONSTANT, PTF_CONSTANT * etc. * currently we support only PFT_CONST and PTF_UMINUS->PTF_CONST */ #define Breakpoint do { __asm__ __volatile__ ("int $03"); } while(0) static INPparseNode *prepare_PTF_PWL(INPparseNode *p) { INPparseNode *w; struct pwldata { int n; double *vals; } *data; int i; if (p->funcnum != PTF_PWL) { fprintf(stderr, "PWL-INFO: %s, very unexpected\n", __func__); controlled_exit(1); } #ifdef TRACE fprintf(stderr, "PWL-INFO: %s building a PTF_PWL\n", __func__); #endif i = 0; for(w = p->left; w->type == PT_COMMA; w = w->left) i++; if (i<2 || (i%1)) { fprintf(stderr, "Error: PWL(expr, points...) needs an even and >=2 number of constant args\n"); return mkfirst(NULL, p); } data = TMALLOC(struct pwldata, 1); data->vals = TMALLOC(double, i); data->n = i; p->data = (void *) data; for (w = p->left ; --i >= 0 ; w = w->left) if (w->right->type == PT_CONSTANT) { data->vals[i] = w->right->constant; } else if (w->right->type == PT_FUNCTION && w->right->funcnum == PTF_UMINUS && w->right->left->type == PT_CONSTANT) { data->vals[i] = - w->right->left->constant; } else { fprintf(stderr, "PWL-ERROR: %s, not a constant\n", __func__); fprintf(stderr, " type = %d\n", w->right->type); //Breakpoint; fprintf(stderr, "Error: PWL(expr, points...) only *literal* points are supported\n"); return mkfirst(NULL, p); } #ifdef TRACE for (i = 0 ; i < data->n ; i += 2) fprintf(stderr, " (%lf %lf)\n", data->vals[i], data->vals[i+1]); #endif for (i = 2 ; i < data->n ; i += 2) if(data->vals[i-2] >= data->vals[i]) { fprintf(stderr, "Error: PWL(expr, points...) the abscissa of points must be ascending\n"); return mkfirst(NULL, p); } /* strip all but the first arg, * and attach the rest as opaque data to the INPparseNode */ w = inc_usage(w); dec_usage(p->left); p->left = w; return (p); } INPparseNode *PT_mkfnode(const char *fname, INPparseNode * arg) { int i; INPparseNode *p; char buf[128]; /* Make sure the case is ok. */ (void) strcpy(buf, fname); strtolower(buf); if(!strcmp("ternary_fcn", buf)) { if(arg->type == PT_COMMA && arg->left->type == PT_COMMA) { INPparseNode *arg1 = arg->left->left; INPparseNode *arg2 = arg->left->right; INPparseNode *arg3 = arg->right; p = TMALLOC(INPparseNode, 1); p->type = PT_TERN; p->usecnt = 0; p->left = inc_usage(arg1); p->right = inc_usage(mkb(PT_COMMA, arg2, arg3)); return mkfirst(p, arg); } fprintf(stderr, "Error: bogus ternary_fcn form\n"); return mkfirst(NULL, arg); } for (i = 0; i < NUM_FUNCS; i++) if (!strcmp(funcs[i].name, buf)) break; if (i == NUM_FUNCS) { fprintf(stderr, "Error: no such function '%s'\n", buf); return mkfirst(NULL, arg); } p = TMALLOC(INPparseNode, 1); p->type = PT_FUNCTION; p->usecnt = 0; p->left = inc_usage(arg); p->funcname = funcs[i].name; p->funcnum = funcs[i].number; p->function = funcs[i].funcptr; p->data = NULL; if(p->funcnum == PTF_PWL) p = prepare_PTF_PWL(p); return (p); } static INPparseNode *mkvnode(char *name) { INPparseNode *p = TMALLOC(INPparseNode, 1); int i; CKTnode *temp; INPtermInsert(circuit, &name, tables, &temp); for (i = 0; i < numvalues; i++) if ((types[i] == IF_NODE) && (values[i].nValue == temp)) break; if (i == numvalues) { if (numvalues) { values = TREALLOC(IFvalue, values, numvalues + 1); types = TREALLOC(int, types, numvalues + 1); } else { values = TMALLOC(IFvalue, 1); types = TMALLOC(int, 1); } values[i].nValue = temp; types[i] = IF_NODE; numvalues++; } p->valueIndex = i; p->type = PT_VAR; p->usecnt = 0; return (p); } static INPparseNode *mkinode(char *name) { INPparseNode *p = TMALLOC(INPparseNode, 1); int i; INPinsert(&name, tables); for (i = 0; i < numvalues; i++) if ((types[i] == IF_INSTANCE) && (values[i].uValue == name)) break; if (i == numvalues) { if (numvalues) { values = TREALLOC(IFvalue, values, numvalues + 1); types = TREALLOC(int, types, numvalues + 1); } else { values = TMALLOC(IFvalue, 1); types = TMALLOC(int, 1); } values[i].uValue = name; types[i] = IF_INSTANCE; numvalues++; } p->valueIndex = i; p->type = PT_VAR; p->usecnt = 0; return (p); } /* Number node. */ INPparseNode *PT_mknnode(double number) { struct INPparseNode *p; p = TMALLOC(INPparseNode, 1); p->type = PT_CONSTANT; p->usecnt = 0; p->constant = number; return (p); } /* String node. */ INPparseNode *PT_mksnode(const char *string, void *ckt) { int i, j; char buf[128]; INPparseNode *p; /* Make sure the case is ok. */ (void) strcpy(buf, string); strtolower(buf); p = TMALLOC(INPparseNode, 1); p->usecnt = 0; if(!strcmp("time", buf)) { p->type = PT_TIME; p->data = ckt; return p; } if(!strcmp("temper", buf)) { p->type = PT_TEMPERATURE; p->data = ckt; return p; } if(!strcmp("hertz", buf)) { p->type = PT_FREQUENCY; p->data = ckt; return p; } /* First see if it's something special. */ for (i = 0; i < ft_sim->numSpecSigs; i++) if (!strcmp(ft_sim->specSigs[i], buf)) break; if (i < ft_sim->numSpecSigs) { for (j = 0; j < numvalues; j++) if ((types[j] == IF_STRING) && !strcmp(buf, values[i].sValue)) break; if (j == numvalues) { if (numvalues) { values = TREALLOC(IFvalue, values, numvalues + 1); types = TREALLOC(int, types, numvalues + 1); } else { values = TMALLOC(IFvalue, 1); types = TMALLOC(int, 1); } values[i].sValue = TMALLOC(char, strlen(buf) + 1); strcpy(values[i].sValue, buf); types[i] = IF_STRING; numvalues++; } p->valueIndex = i; p->type = PT_VAR; return (p); } for (i = 0; i < NUM_CONSTANTS; i++) if (!strcmp(constants[i].name, buf)) break; if (i == NUM_CONSTANTS) { /* We'd better save this in case it's part of i(something). */ p->type = PT_PLACEHOLDER; p->funcname = copy(string); } else { p->type = PT_CONSTANT; p->constant = constants[i].value; } return (p); } /* The lexical analysis routine. */ int PTlex (YYSTYPE *lvalp, struct PTltype *llocp, char **line) { double td; int err; static char *specials = " \t()^+-*/,"; char *sbuf, *s; int token; sbuf = *line; #ifdef TRACE // printf("entering lexer, sbuf = '%s', lastoken = %d, lasttype = %d\n", // sbuf, lasttoken, lasttype); #endif while ((*sbuf == ' ') || (*sbuf == '\t')) sbuf++; llocp->start = sbuf; switch (*sbuf) { case '\0': token = 0; break; case '?': case ':': case ',': case '-': case '+': case '/': case '^': case '(': case ')': token = *sbuf++; break; case '*': if(sbuf[1] == '*') { sbuf += 2; token = '^'; /* `**' is exponentiation */ break; } else { token = *sbuf++; break; } case '&': if(sbuf[1] == '&') { sbuf += 2; token = TOK_AND; break; } else { token = *sbuf++; break; } case '|': if(sbuf[1] == '|') { sbuf += 2; token = TOK_OR; break; } else { token = *sbuf++; break; } case '=': if(sbuf[1] == '=') { sbuf += 2; token = TOK_EQ; break; } else { token = *sbuf++; break; } case '!': if(sbuf[1] == '=') { sbuf += 2; token = TOK_NE; break; } else { token = *sbuf++; break; } case '>': if(sbuf[1] == '=') { sbuf += 2; token = TOK_GE; break; } else { sbuf += 1; token = TOK_GT; break; } case '<': if(sbuf[1] == '>') { sbuf += 2; token = TOK_NE; break; } else if(sbuf[1] == '=') { sbuf += 2; token = TOK_LE; break; } else { sbuf += 1; token = TOK_LT; break; } default: { int n1 = -1; int n2 = -1; int n3 = -1; int n4 = -1; int n = -1; sscanf(sbuf, "%*1[vV] ( %n%*[^ \t,()]%n , %n%*[^ \t,()]%n )%n", &n1, &n2, &n3, &n4, &n); if(n != -1) { token = TOK_pnode; lvalp->pnode = mkb(PT_MINUS, mkvnode(copy_substring(sbuf+n1, sbuf+n2)), mkvnode(copy_substring(sbuf+n3, sbuf+n4))); sbuf += n; break; } } { int n1 = -1; int n2 = -1; int n = -1; sscanf(sbuf, "%*1[vV] ( %n%*[^ \t,()]%n )%n", &n1, &n2, &n); if(n != -1) { token = TOK_pnode; lvalp->pnode = mkvnode(copy_substring(sbuf+n1, sbuf+n2)); sbuf += n; break; } } { int n1 = -1; int n2 = -1; int n = -1; sscanf(sbuf, "%*1[iI] ( %n%*[^ \t,()]%n )%n", &n1, &n2, &n); if(n != -1) { token = TOK_pnode; lvalp->pnode = mkinode(copy_substring(sbuf+n1, sbuf+n2)); sbuf += n; break; } } td = INPevaluate(&sbuf, &err, 1); if (err == OK) { token = TOK_NUM; lvalp->num = td; } else { char *tmp; token = TOK_STR; for (s = sbuf; *s; s++) if (strchr(specials, *s)) break; tmp = TMALLOC(char, s - sbuf + 1); strncpy(tmp, sbuf, (size_t) (s - sbuf)); tmp[s - sbuf] = '\0'; lvalp->str = tmp; sbuf = s; } } *line = sbuf; #ifdef TRACE // printf("PTlexer: token = %d, type = %d, left = '%s'\n", // el.token, el.type, sbuf); */ #endif llocp->stop = sbuf; return (token); } void INPfreeTree(IFparseTree *ptree) { INPparseTree *pt = (INPparseTree *) ptree; int i; if (!pt) return; for (i = 0; i < pt->p.numVars; i++) dec_usage(pt->derivs[i]); dec_usage(pt->tree); txfree(pt->derivs); txfree(pt->p.varTypes); txfree(pt->p.vars); txfree(pt); } void free_tree(INPparseNode *pt) { if(!pt) return; if(pt->usecnt) { fprintf(stderr, "ERROR: fatal internal error, %s\n", __func__); controlled_exit(1); } switch (pt->type) { case PT_TIME: case PT_TEMPERATURE: case PT_FREQUENCY: case PT_CONSTANT: case PT_VAR: break; case PT_PLUS: case PT_MINUS: case PT_TIMES: case PT_DIVIDE: case PT_POWER: case PT_COMMA: case PT_TERN: dec_usage(pt->right); case PT_FUNCTION: dec_usage(pt->left); break; default: printf("oops"); break; } if(pt->type == PT_FUNCTION && pt->funcnum == PTF_PWL) { struct pwldata { int n; double *vals; } *data = (struct pwldata*)(pt->data); if(data) { txfree(data->vals); txfree(data); } } txfree(pt); } /* Debugging stuff. */ void INPptPrint(char *str, IFparseTree * ptree) { int i; printf("%s\n\t", str); printTree(((INPparseTree *) ptree)->tree); printf("\n"); for (i = 0; i < ptree->numVars; i++) { printf("d / d v%d : ", i); printTree(((INPparseTree *) ptree)->derivs[i]); printf("\n"); } return; } void printTree(INPparseNode * pt) { switch (pt->type) { case PT_TIME: printf("time(ckt = %p)", pt->data); break; case PT_TEMPERATURE: printf("temperature(ckt = %p)", pt->data); break; case PT_FREQUENCY: printf("frequency(ckt = %p)", pt->data); break; case PT_CONSTANT: printf("%g", pt->constant); break; case PT_VAR: printf("v%d", pt->valueIndex); break; case PT_PLUS: printf("("); printTree(pt->left); printf(") + ("); printTree(pt->right); printf(")"); break; case PT_MINUS: printf("("); printTree(pt->left); printf(") - ("); printTree(pt->right); printf(")"); break; case PT_TIMES: printf("("); printTree(pt->left); printf(") * ("); printTree(pt->right); printf(")"); break; case PT_DIVIDE: printf("("); printTree(pt->left); printf(") / ("); printTree(pt->right); printf(")"); break; case PT_POWER: printf("("); printTree(pt->left); printf(") ^ ("); printTree(pt->right); printf(")"); break; case PT_COMMA: printf("("); printTree(pt->left); printf(") , ("); printTree(pt->right); printf(")"); break; case PT_FUNCTION: printf("%s (", pt->funcname); printTree(pt->left); printf(")"); break; case PT_TERN: printf("ternary_fcn ("); printTree(pt->left); printf(") , ("); printTree(pt->right); printf(")"); break; default: printf("oops"); break; } return; } tmpk8ny_4pz/src/spicelib/parser/inpapnam.c0000644000175000017500000000132313546075722021003 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/cpdefs.h" #include "ngspice/fteext.h" #include "inpxx.h" int INPapName(CKTcircuit *ckt, int type, JOB *analPtr, char *parmname, IFvalue * value) { IFparm *if_parm; if (!parmname) return (E_BADPARM); if (!ft_sim->analyses[type]) return (E_BADPARM); if_parm = ft_find_analysis_parm(type, parmname); if (!if_parm) return (E_BADPARM); return ft_sim->setAnalysisParm (ckt, analPtr, if_parm->id, value, NULL); } tmpk8ny_4pz/src/spicelib/parser/inplist.c0000644000175000017500000000261413546075722020666 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ /* INPlist(file,deck,type) * provide an input listing on the specified file of the given * card deck. The listing should be of either PHYSICAL or LOGICAL * lines as specified by the type parameter. */ #include "ngspice/ngspice.h" #include #include "ngspice/inpdefs.h" #include "inpxx.h" extern void INPlist(FILE *file, struct card *deck, int type); /* nowhere used function */ void INPlist(FILE * file, struct card *deck, int type) { struct card *here; struct card *there; if (type == LOGICAL) { for (here = deck; here != NULL; here = here->nextcard) { fprintf(file, "%6d : %s\n", here->linenum, here->line); if (here->error != NULL) { fprintf(file, "%s", here->error); } } } else if (type == PHYSICAL) { for (here = deck; here != NULL; here = here->nextcard) { if (here->actualLine == NULL) { fprintf(file, "%6d : %s\n", here->linenum, here->line); if (here->error != NULL) { fprintf(file, "%s", here->error); } } else { for (there = here->actualLine; there != NULL; there = there->nextcard) { fprintf(file, "%6d : %s\n", there->linenum, there->line); if (there->error != NULL) { fprintf(file, "%s", there->error); } } } } } } tmpk8ny_4pz/src/spicelib/parser/inpptree-parser.y0000644000175000017500000001105113546075722022345 0ustar carstencarsten%{ /* * (compile (concat "bison -ydo inpptree-parser.c " (file-relative-name buffer-file-name))) */ #include "ngspice/ngspice.h" #include "ngspice/inpptree.h" #include #include # define YYLTYPE struct PTltype #include "inpptree-parser.h" #include "inpptree-parser-y.h" # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (N) { \ (Current).start = YYRHSLOC(Rhs, 1).start; \ (Current).stop = YYRHSLOC(Rhs, N).stop; \ } else { \ (Current).start = (Current).stop = YYRHSLOC(Rhs, 0).stop; \ } \ while (0) static void PTerror (YYLTYPE *locp, char **line, struct INPparseNode **retval, void *ckt, char const *); %} %name-prefix "PT" %defines %pure-parser %parse-param {char **line} %lex-param {char **line} %parse-param {struct INPparseNode **retval} %parse-param {CKTcircuit *ckt} %union { double num; const char *str; struct INPparseNode *pnode; } %token TOK_NUM %token TOK_STR %token TOK_pnode %token TOK_LE TOK_LT TOK_GE TOK_GT TOK_EQ TOK_NE %type exp nonempty_arglist // Operator Precedence %left ',' %right '?' ':' %left TOK_OR %left TOK_AND %left TOK_EQ TOK_NE %left TOK_LE TOK_LT TOK_GE TOK_GT %left '-' '+' %left '*' '/' %left NEG '!' /* negation--unary minus, and boolean not */ %left '^' /* exponentiation */ %initial-action /* initialize yylval */ { $$.num = 0.0; yylloc.start = yylloc.stop = NULL; }; %% expression: exp { *retval = $1; *line = @1.stop; YYACCEPT; } exp: TOK_NUM { $$ = PT_mknnode($1); } | TOK_STR { $$ = PT_mksnode($1, ckt); txfree($1); } | exp '+' exp { $$ = PT_mkbnode("+", $1, $3); } | exp '-' exp { $$ = PT_mkbnode("-", $1, $3); } | exp '*' exp { $$ = PT_mkbnode("*", $1, $3); } | exp '/' exp { $$ = PT_mkbnode("/", $1, $3); } | exp '^' exp { $$ = PT_mkbnode("^", $1, $3); } | '(' exp ')' { $$ = $2; } | '-' exp %prec NEG { $$ = PT_mkfnode("-",$2); } | '+' exp %prec NEG { $$ = $2; } | TOK_STR '(' nonempty_arglist ')' { $$ = PT_mkfnode($1, $3); if (!$$) YYERROR; txfree($1); } | TOK_pnode | exp '?' exp ':' exp { $$ = PT_mkfnode("ternary_fcn", PT_mkbnode(",", PT_mkbnode(",", $1, $3), $5)); } | exp TOK_EQ exp { $$ = PT_mkfnode("eq0", PT_mkbnode("-",$1,$3)); } | exp TOK_NE exp { $$ = PT_mkfnode("ne0", PT_mkbnode("-",$1,$3)); } | exp TOK_GT exp { $$ = PT_mkfnode("gt0", PT_mkbnode("-",$1,$3)); } | exp TOK_LT exp { $$ = PT_mkfnode("lt0", PT_mkbnode("-",$1,$3)); } | exp TOK_GE exp { $$ = PT_mkfnode("ge0", PT_mkbnode("-",$1,$3)); } | exp TOK_LE exp { $$ = PT_mkfnode("le0", PT_mkbnode("-",$1,$3)); } | exp TOK_OR exp { $$ = PT_mkfnode("ne0", PT_mkbnode("+", PT_mkfnode("ne0", $1), PT_mkfnode("ne0", $3))); } | exp TOK_AND exp { $$ = PT_mkfnode("eq0", PT_mkbnode("+", PT_mkfnode("eq0", $1), PT_mkfnode("eq0", $3))); } | '!' exp { $$ = PT_mkfnode("eq0", $2); } ; nonempty_arglist: exp | nonempty_arglist ',' exp { $$ = PT_mkbnode(",", $1, $3); } %% /* Called by yyparse on error. */ static void PTerror (YYLTYPE *locp, char **line, struct INPparseNode **retval, void *ckt, char const *s) { NG_IGNORE(locp); NG_IGNORE(line); NG_IGNORE(retval); NG_IGNORE(ckt); fprintf (stderr, "%s: %s\n", __func__, s); } tmpk8ny_4pz/src/spicelib/parser/inp2y.c0000644000175000017500000002674413546075722020257 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 Charles Hough **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" void INP2Y( CKTcircuit *ckt, INPtables *tab, struct card *current) { /* parse a txl card */ /* Yxxxx node1 gnode node2 gnode name */ int mytype; /* the type to determine txl */ int mytype2; /* the type to determine cpl */ int type; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *name; /* the resistor's name */ char *buf; /* temporary buffer for parsing */ char *model; /* the name of the resistor's model */ char *nname1; /* the first node's name */ char *nname2; /* the second node's name */ char *rname1, *rname2, *rname3; char *cname1, *cname2, *cname3, *cname4; char *internal1, *internal2; char *ground1, *ground2; CKTnode *node1; /* the first node's node pointer */ CKTnode *node2; /* the second node's node pointer */ CKTnode *gnode1, *gnode2, *inode1, *inode2; int error; /* error code temporary */ int error1=0; /* secondary error code temporary */ INPmodel *thismodel; /* pointer to model structure describing our model */ GENmodel *mdfast; /* pointer to the actual model */ GENinstance *fast; /* pointer to the actual instance */ GENmodel *mdfast2, *mdfast3, *mdfast4, *mdfast5, *mdfast6; GENinstance *fast2, *fast3, *fast4, *fast5, *fast6; IFuid uid; /* uid for default model */ GENinstance *txl; IFvalue ptemp; /* a value structure to package into */ double lval=0, rval=0, cval=0, lenval=0; int lenvalgiven = 0; mytype = INPtypelook("TransLine"); mytype2 = INPtypelook("CplLines"); if(mytype < 0 ) { LITERR("Device type TransLine not supported by this binary\n"); return; } line = current->line; INPgetNetTok(&line,&name,1); INPinsert(&name,tab); INPgetNetTok(&line,&nname1,1); INPtermInsert(ckt,&nname1,tab,&node1); INPgetNetTok(&line,&ground1,1); INPtermInsert(ckt,&ground1,tab,&gnode1); INPgetNetTok(&line,&nname2,1); INPtermInsert(ckt,&nname2,tab,&node2); INPgetNetTok(&line,&ground2,1); INPtermInsert(ckt,&ground2,tab,&gnode2); INPgetNetTok(&line, &model, 1); if(*model) { /* token isn't null */ INPinsert(&model,tab); current->error = INPgetMod(ckt,model,&thismodel,tab); INPgetTok(&line,&model,1); if (strcmp(model, "len") == 0) { lenval = INPevaluate(&line,&error1,1); lenvalgiven = 1; } if(thismodel != NULL) { if (thismodel->INPmodType == mytype2) { INP2P(ckt,tab,current); return; } else if (mytype != thismodel->INPmodType) { LITERR("incorrect model type"); return; } line = thismodel->INPmodLine->line; INPgetTok(&line,&buf,1); /* throw out .model */ INPgetTok(&line,&buf,1); /* throw out model name */ INPgetTok(&line,&buf,1); /* throw out txl */ INPgetTok(&line,&buf,1); while (*line != '\0') { if (*buf == 'R' || *buf == 'r') { INPgetTok(&line,&buf,1); rval = INPevaluate(&buf, &error1, 1); } if ((strcmp(buf,"L") == 0) || (strcmp(buf,"l") == 0)) { INPgetTok(&line,&buf,1); lval = INPevaluate(&buf, &error1, 1); } if ((strcmp(buf,"C") == 0) || (strcmp(buf,"c") == 0)) { INPgetTok(&line,&buf,1); cval = INPevaluate(&buf, &error1, 1); } if (lenvalgiven == 0) { if (strcmp(buf,"length")== 0) { INPgetTok(&line,&buf,1); lenval = INPevaluate(&buf, &error1, 1); } } INPgetTok(&line,&buf,1); } if (lenval && rval && lval && rval/lval > 1.6e10) { /* use 3-pi model for high resistance as fall back */ rval = 3.0 / (rval * lenval); cval = cval * lenval / 6.0; type = INPtypelook("Resistor"); /* resistor between node1 and internal1 */ internal1 = TMALLOC(char, 10 + strlen(name)); strcpy(internal1, "txlnd1"); strcat(internal1, name); INPtermInsert(ckt, &internal1, tab, &inode1); if(!tab->defRmod) { /* create default R model */ IFnewUid(ckt, &uid, NULL, "R", UID_MODEL, NULL); IFC(newModel, (ckt,type,&(tab->defRmod),uid)); } mdfast = tab->defRmod; rname1 = TMALLOC(char, 10 + strlen(name)); strcpy(rname1, "txlres1"); strcat(rname1, name); INPinsert(&rname1, tab); IFC(newInstance,(ckt,mdfast,&fast,rname1)); IFC(bindNode,(ckt,fast,1,node1)); IFC(bindNode,(ckt,fast,2,inode1)); ptemp.rValue = rval; GCA(INPpName,("resistance",&ptemp,ckt,type,fast)); /* resistor between internal1 and internal2 */ internal2 = TMALLOC(char, 10 + strlen(name)); strcpy(internal2, "txlnd2"); strcat(internal2, name); INPtermInsert(ckt, &internal2, tab, &inode2); rname2 = TMALLOC(char, 10 + strlen(name)); strcpy(rname2, "txlres2"); strcat(rname2, name); INPinsert(&rname2, tab); mdfast2 = tab->defRmod; IFC(newInstance,(ckt,mdfast2,&fast2,rname2)); IFC(bindNode,(ckt,fast2,1,inode1)); IFC(bindNode,(ckt,fast2,2,inode2)); ptemp.rValue = rval; GCA(INPpName,("resistance",&ptemp,ckt,type,fast2)); /* resistor between internal2 and node2 */ rname3 = TMALLOC(char, 10 + strlen(name)); strcpy(rname3, "txlres3"); strcat(rname3, name); INPinsert(&rname3, tab); mdfast3 = tab->defRmod; IFC(newInstance,(ckt,mdfast3,&fast3,rname3)); IFC(bindNode,(ckt,fast3,1,inode2)); IFC(bindNode,(ckt,fast3,2,node2)); ptemp.rValue = rval; GCA(INPpName,("resistance",&ptemp,ckt,type,fast3)); /* capacitor on node1 */ type = INPtypelook("Capacitor"); if(!tab->defCmod) { IFnewUid(ckt, &uid, NULL, "C", UID_MODEL, NULL); IFC(newModel,(ckt,type,&(tab->defCmod),uid)); } mdfast4 = tab->defCmod; cname1 = TMALLOC(char, 10 + strlen(name)); strcpy(cname1, "txlcap1"); strcat(cname1, name); INPinsert(&cname1, tab); IFC(newInstance,(ckt,mdfast4,&fast4,cname1)); IFC(bindNode,(ckt,fast4,1,node1)); IFC(bindNode,(ckt,fast4,2,gnode1)); ptemp.rValue = cval; GCA(INPpName,("capacitance",&ptemp,ckt,type,fast4)); /* capacitor on internal1 */ cname2 = TMALLOC(char, 10 + strlen(name)); strcpy(cname2, "txlcap2"); strcat(cname2, name); INPinsert(&cname2, tab); mdfast4 = tab->defCmod; IFC(newInstance,(ckt,mdfast4,&fast4,cname2)); IFC(bindNode,(ckt,fast4,1,inode1)); IFC(bindNode,(ckt,fast4,2,gnode1)); ptemp.rValue = cval * 2; GCA(INPpName,("capacitance",&ptemp,ckt,type,fast4)); /* capacitor on internal2 */ cname3 = TMALLOC(char, 10 + strlen(name)); strcpy(cname3, "txlcap3"); strcat(cname3, name); INPinsert(&cname3, tab); mdfast5 = tab->defCmod; IFC(newInstance,(ckt,mdfast5,&fast5,cname3)); IFC(bindNode,(ckt,fast5,1,inode2)); IFC(bindNode,(ckt,fast5,2,gnode1)); ptemp.rValue = cval * 2; GCA(INPpName,("capacitance",&ptemp,ckt,type,fast5)); /* capacitor on node2 */ cname4 = TMALLOC(char, 10 + strlen(name)); strcpy(cname4, "txlcap4"); strcat(cname4, name); INPinsert(&cname4, tab); mdfast6 = tab->defCmod; IFC(newInstance,(ckt,mdfast6,&fast6,cname4)); IFC(bindNode,(ckt,fast6,1,node2)); IFC(bindNode,(ckt,fast6,2,gnode1)); ptemp.rValue = cval; GCA(INPpName,("capacitance",&ptemp,ckt,type,fast6)); return; } /* use regular txl model */ mdfast = thismodel->INPmodfast; type = thismodel->INPmodType; } else { type = mytype; if(!tab->defYmod) { /* create default Y model */ IFnewUid(ckt, &uid, NULL, "Y", UID_MODEL, NULL); IFC(newModel, (ckt,type,&(tab->defYmod),uid)); } mdfast = tab->defYmod; } IFC(newInstance,(ckt,mdfast,&fast,name)); } else { LITERR("model name is not found"); return; } if (error1 == 0 && lenvalgiven) { ptemp.rValue = lenval; GCA(INPpName,("length",&ptemp,ckt,type,fast)); } IFC(bindNode,(ckt,fast,1,node1)); IFC(bindNode,(ckt,fast,2,node2)); txl = /*fixme*/ fast; return; } tmpk8ny_4pz/src/spicelib/parser/inp2h.c0000644000175000017500000000425513546075722020227 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" void INP2H(CKTcircuit *ckt, INPtables * tab, struct card *current) { /* Hname */ int type; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *name; /* the resistor's name */ char *nname1; /* the first node's name */ char *nname2; /* the second node's name */ CKTnode *node1; /* the first node's node pointer */ CKTnode *node2; /* the second node's node pointer */ int error; /* error code temporary */ GENinstance *fast; /* pointer to the actual instance */ IFvalue ptemp; /* a value structure to package resistance into */ IFvalue *parm; /* pointer to a value structure for functions which return one */ int waslead; /* flag to indicate that funny unlabeled number was found */ double leadval; /* actual value of unlabeled number */ IFuid uid; /* uid for default model to be created */ type = INPtypelook("CCVS"); if (type < 0) { LITERR("Device type CCVS not supported by this binary\n"); return; } line = current->line; INPgetNetTok(&line, &name, 1); INPinsert(&name, tab); INPgetNetTok(&line, &nname1, 1); INPtermInsert(ckt, &nname1, tab, &node1); INPgetNetTok(&line, &nname2, 1); INPtermInsert(ckt, &nname2, tab, &node2); if (!tab->defHmod) { /* create default H model */ IFnewUid(ckt, &uid, NULL, "H", UID_MODEL, NULL); IFC(newModel, (ckt, type, &(tab->defHmod), uid)); } IFC(newInstance, (ckt, tab->defHmod, &fast, name)); IFC(bindNode, (ckt, fast, 1, node1)); IFC(bindNode, (ckt, fast, 2, node2)); parm = INPgetValue(ckt, &line, IF_INSTANCE, tab); GCA(INPpName, ("control", parm, ckt, type, fast)); PARSECALL((&line, ckt, type, fast, &leadval, &waslead, tab)); if (waslead) { ptemp.rValue = leadval; GCA(INPpName, ("gain", &ptemp, ckt, type, fast)); } } tmpk8ny_4pz/src/spicelib/parser/ifeval.c0000644000175000017500000001137713546075722020460 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "ngspice/iferrmsg.h" #include "ngspice/inpptree.h" #include "inpxx.h" #include "ngspice/cktdefs.h" /* Uncomment to allow tracing */ /*#define TRACE*/ extern double PTfudge_factor; static int PTeval(INPparseNode * tree, double gmin, double *res, double *vals); int IFeval(IFparseTree * tree, double gmin, double *result, double *vals, double *derivs) { int i, err; INPparseTree *myTree = (INPparseTree *) tree; #ifdef TRACE INPptPrint("calling PTeval, tree = ", tree); printf("values:"); for (i = 0; i < myTree->p.numVars; i++) printf("\tvar%d = %lg\n", i, vals[i]); #endif if ((err = PTeval(myTree->tree, gmin, result, vals)) != OK) { if (ft_ngdebug) { INPptPrint("calling PTeval, tree = ", tree); printf("values:"); for (i = 0; i < myTree->p.numVars; i++) printf("\tvar%d = %lg\n", i, vals[i]); } if (ft_stricterror) controlled_exit(EXIT_BAD); return err; } for (i = 0; i < myTree->p.numVars; i++) if ((err = PTeval(myTree->derivs[i], gmin, &derivs[i], vals)) != OK) { if (ft_ngdebug) { INPptPrint("calling PTeval, tree = ", tree); printf("results: function = %lg\n", *result); for (i = 0; i < myTree->p.numVars; i++) printf("\td / d var%d = %lg\n", i, derivs[i]); } if (ft_stricterror) controlled_exit(EXIT_BAD); return err; } #ifdef TRACE printf("results: function = %lg\n", *result); for (i = 0; i < myTree->p.numVars; i++) printf("\td / d var%d = %lg\n", i, derivs[i]); #endif return (OK); } static int PTeval(INPparseNode * tree, double gmin, double *res, double *vals) { double r1, r2; int err; PTfudge_factor = gmin * 1.0e-20; /* defaults to 1e-32, should be small enough */ switch (tree->type) { case PT_CONSTANT: *res = tree->constant; break; case PT_VAR: *res = vals[tree->valueIndex]; break; case PT_FUNCTION: switch(tree->funcnum) { case PTF_POW: case PTF_PWR: case PTF_MIN: case PTF_MAX: err = PTeval(tree->left->left, gmin, &r1, vals); if (err != OK) return (err); err = PTeval(tree->left->right, gmin, &r2, vals); if (err != OK) return (err); *res = PTbinary(tree -> function) (r1, r2); if (*res == HUGE) { fprintf(stderr, "Error: %g, %g out of range for %s\n", r1, r2, tree->funcname); return (E_PARMVAL); } break; /* fcns with single argument */ default: err = PTeval(tree->left, gmin, &r1, vals); if (err != OK) return (err); if(tree->data == NULL) *res = PTunary(tree -> function) (r1); else *res = PTunary_with_private(tree -> function) (r1, tree->data); if (*res == HUGE) { fprintf(stderr, "Error: %g out of range for %s\n", r1, tree->funcname); return (E_PARMVAL); } break; } break; case PT_TERN: { INPparseNode *arg1 = tree->left; INPparseNode *arg2 = tree->right->left; INPparseNode *arg3 = tree->right->right; err = PTeval(arg1, gmin, &r1, vals); if (err != OK) return (err); /*FIXME > 0.0, >= 0.5, != 0.0 or what ? */ err = PTeval((r1 != 0.0) ? arg2 : arg3, gmin, &r2, vals); if (err != OK) return (err); *res = r2; break; } case PT_PLUS: case PT_MINUS: case PT_TIMES: case PT_DIVIDE: case PT_POWER: err = PTeval(tree->left, gmin, &r1, vals); if (err != OK) return (err); err = PTeval(tree->right, gmin, &r2, vals); if (err != OK) return (err); *res = PTbinary(tree -> function) (r1, r2); if (*res == HUGE) { fprintf(stderr, "Error: %g, %g out of range for %s\n", r1, r2, tree->funcname); return (E_PARMVAL); } break; case PT_TIME: *res = ((CKTcircuit*) tree->data) -> CKTtime; break; case PT_TEMPERATURE: *res = ((CKTcircuit*) tree->data) -> CKTtemp - CONSTCtoK; break; case PT_FREQUENCY: *res = (((CKTcircuit*) tree->data) -> CKTomega)/2./M_PI; break; default: fprintf(stderr, "Internal Error: bad node type %d\n", tree->type); return (E_PANIC); } return (OK); } tmpk8ny_4pz/src/spicelib/parser/inpkmods.c0000644000175000017500000000107713546075722021032 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #include "ngspice/ngspice.h" #include #include "ngspice/inpdefs.h" #include "ngspice/ftedefs.h" #include "inpxx.h" extern INPmodel *modtab; void INPkillMods(void) { INPmodel *modtmp; INPmodel *prev = NULL; for (modtmp = modtab; modtmp != NULL; modtmp = modtmp->INPnextModel) { if (prev) FREE(prev); prev = modtmp; } if (prev) FREE(prev); modtab = NULL; ft_curckt->ci_modtab = NULL; } tmpk8ny_4pz/src/spicelib/parser/inp2s.c0000644000175000017500000000571713546075722020246 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" void INP2S(CKTcircuit *ckt, INPtables * tab, struct card *current) { /* Sname [] [IC] */ /* VOLTAGE CONTROLLED SWITCH */ int mytype; /* the type we determine resistors are */ int type; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *name; /* the resistor's name */ char *model; /* the name of the resistor's model */ char *nname1; /* the first node's name */ char *nname2; /* the second node's name */ char *nname3; /* the third node's name */ char *nname4; /* the fourth node's name */ CKTnode *node1; /* the first node's node pointer */ CKTnode *node2; /* the second node's node pointer */ CKTnode *node3; /* the third node's node pointer */ CKTnode *node4; /* the fourth node's node pointer */ int error; /* error code temporary */ INPmodel *thismodel; /* pointer to model structure describing our model */ GENmodel *mdfast; /* pointer to the actual model */ GENinstance *fast; /* pointer to the actual instance */ int waslead; /* flag to indicate that funny unlabeled number was found */ double leadval; /* actual value of unlabeled number */ IFuid uid; /* uid of default model */ mytype = INPtypelook("Switch"); if (mytype < 0) { LITERR("Device type Switch not supported by this binary\n"); return; } line = current->line; INPgetNetTok(&line, &name, 1); INPinsert(&name, tab); INPgetNetTok(&line, &nname1, 1); INPtermInsert(ckt, &nname1, tab, &node1); INPgetNetTok(&line, &nname2, 1); INPtermInsert(ckt, &nname2, tab, &node2); INPgetNetTok(&line, &nname3, 1); INPtermInsert(ckt, &nname3, tab, &node3); INPgetNetTok(&line, &nname4, 1); INPtermInsert(ckt, &nname4, tab, &node4); INPgetNetTok(&line, &model, 1); INPinsert(&model, tab); current->error = INPgetMod(ckt, model, &thismodel, tab); if (thismodel != NULL) { if (mytype != thismodel->INPmodType) { LITERR("incorrect model type"); return; } type = mytype; mdfast = (thismodel->INPmodfast); } else { type = mytype; if (!tab->defSmod) { /* create deafult S model */ IFnewUid(ckt, &uid, NULL, "S", UID_MODEL, NULL); IFC(newModel, (ckt, type, &(tab->defSmod), uid)); } mdfast = tab->defSmod; } IFC(newInstance, (ckt, mdfast, &fast, name)); IFC(bindNode, (ckt, fast, 1, node1)); IFC(bindNode, (ckt, fast, 2, node2)); IFC(bindNode, (ckt, fast, 3, node3)); IFC(bindNode, (ckt, fast, 4, node4)); PARSECALL((&line, ckt, type, fast, &leadval, &waslead, tab)); if (waslead) { /* ignore a number */ } } tmpk8ny_4pz/src/spicelib/parser/inplkmod.c0000644000175000017500000000125213546075722021016 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/inpdefs.h" #include extern INPmodel *modtab; /*----------------------------------------------------------------- * This fcn accepts a pointer to the model name, and returns * the INPmodel * if it exist in the model table. *----------------------------------------------------------------*/ INPmodel * INPlookMod(const char *name) { INPmodel *i; for (i = modtab; i; i = i->INPnextModel) if (strcmp(i->INPmodName, name) == 0) return i; return NULL; } tmpk8ny_4pz/src/spicelib/parser/inppas3.h0000644000175000017500000000015513546075722020564 0ustar carstencarsten/* AlansFixes */ #ifndef ngspice_INPPAS3_H #define ngspice_INPPAS3_H #include "ngspice/inpdefs.h" #endif tmpk8ny_4pz/src/spicelib/parser/inp2r.c0000644000175000017500000001546113546075722020242 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles Modified: Paolo Nenzi 2000 Remarks: This code is based on a version written by Serban Popescu which accepted an optional parameter ac. I have adapted his code to conform to INP standard. (PN) **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" #include "ngspice/stringskip.h" /* undefine to add tracing to this file */ /* #define TRACE */ void INP2R(CKTcircuit *ckt, INPtables * tab, struct card *current) { /* parse a resistor card */ /* Rname [][][w=][l=][ac=] */ static int mytype = -1; /* the type we determine resistors are */ int type = 0; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *saveline; /* ... just in case we need to go back... */ char *name; /* the resistor's name */ char *model; /* the name of the resistor's model */ char *nname1; /* the first node's name */ char *nname2; /* the second node's name */ CKTnode *node1; /* the first node's node pointer */ CKTnode *node2; /* the second node's node pointer */ double val; /* temp to held resistance */ int error; /* error code temporary */ int error1; /* secondary error code temporary */ INPmodel *thismodel; /* pointer to model structure describing our model */ GENmodel *mdfast = NULL; /* pointer to the actual model */ GENinstance *fast; /* pointer to the actual instance */ IFvalue ptemp; /* a value structure to package resistance into */ int waslead; /* flag to indicate that funny unlabeled number was found */ double leadval; /* actual value of unlabeled number */ IFuid uid; /* uid for default model */ char *s; /* Temporary buffer and pointer for translation */ #ifdef TRACE printf("In INP2R, Current line: %s\n", current->line); #endif if (mytype < 0) { if ((mytype = INPtypelook("Resistor")) < 0) { LITERR("Device type Resistor not supported by this binary\n"); return; } } line = current->line; INPgetNetTok(&line, &name, 1); /* Rname */ INPinsert(&name, tab); INPgetNetTok(&line, &nname1, 1); /* */ INPtermInsert(ckt, &nname1, tab, &node1); INPgetNetTok(&line, &nname2, 1); /* */ INPtermInsert(ckt, &nname2, tab, &node2); val = INPevaluate(&line, &error1, 1); /* [] */ /* either not a number -> model, or * follows a number, so must be a model name * -> MUST be a model name (or null) */ #ifdef TRACE printf("Begining tc=xxx yyyy search and translation in '%s'\n", line); #endif /* TRACE */ /* This routine translates "tc=xxx yyy" to "tc=xxx tc2=yyy". This is a re-write of the routine originally proposed by Hitoshi Tanaka. In my version we simply look for the first occurence of 'tc' followed by '=' followed by two numbers. If we find it then we splice in "tc2=". sjb - 2005-05-09 */ for(s = line; NULL != (s = strstr(s, "tc")); ) { char *p; size_t left_length; s = skip_ws(s + 2); /* reject if not '=' */ if(*s != '=') continue; s = skip_ws(s + 1); /* if we now have +, - or a decimal digit then assume we have a number, otherwise reject */ if((*s != '+') && (*s != '-') && !isdigit_c(*s)) continue; /* look for next white space or null */ s = skip_non_ws(s); left_length = (size_t) (s - current->line); /* skip any additional white space */ s = skip_ws(s); /* if we now have +, - or a decimal digit then assume we have the second number, otherwise reject */ if((*s != '+') && (*s != '-') && !isdigit_c(*s)) continue; /* if we get this far we have met all are criterea, so now we splice in a "tc2=" at the location remembered above. */ p = TMALLOC(char, left_length + 5 + strlen(s) + 1); /* failed to allocate memory so we recover rather crudely by rejecting the translation */ if(!p) break; strncpy(p, current->line, left_length); strcpy(p + left_length, " tc2="); strcpy(p + left_length + 5, s); line = p + (line - current->line); s = p + (s - current->line); /* replace old line with new */ tfree(current->line); current->line = p; } #ifdef TRACE printf("(Translated) Resistor line: %s\n", current->line); #endif saveline = line; /* save then old pointer */ INPgetNetTok(&line, &model, 1); if (*model && (strcmp(model, "r") != 0)) { /* token isn't null */ if (INPlookMod(model)) { /* If this is a valid model connect it */ #ifdef TRACE printf("In INP2R, Valid R Model: %s\n", model); #endif INPinsert(&model, tab); current->error = INPgetMod(ckt, model, &thismodel, tab); if (thismodel != NULL) { if (mytype != thismodel->INPmodType) { LITERR("incorrect model type for resistor"); return; } mdfast = thismodel->INPmodfast; type = thismodel->INPmodType; } } else { tfree(model); /* It is not a model */ line = saveline; /* go back */ type = mytype; if (!tab->defRmod) { /* create default R model */ IFnewUid(ckt, &uid, NULL, "R", UID_MODEL, NULL); IFC(newModel, (ckt, type, &(tab->defRmod), uid)); } mdfast = tab->defRmod; } IFC(newInstance, (ckt, mdfast, &fast, name)); } else { tfree(model); /* The token is null or we have r=val - a default model will be created */ type = mytype; if (!tab->defRmod) { /* create default R model */ IFnewUid(ckt, &uid, NULL, "R", UID_MODEL, NULL); IFC(newModel, (ckt, type, &(tab->defRmod), uid)); } IFC(newInstance, (ckt, tab->defRmod, &fast, name)); if (error1 == 1) { /* was a r=val construction */ val = INPevaluate(&line, &error1, 1); /* [] */ #ifdef TRACE printf ("In INP2R, R=val construction: val=%g\n", val); #endif } } if (error1 == 0) { /* got a resistance above */ ptemp.rValue = val; GCA(INPpName, ("resistance", &ptemp, ckt, type, fast)); } IFC(bindNode, (ckt, fast, 1, node1)); IFC(bindNode, (ckt, fast, 2, node2)); PARSECALL((&line, ckt, type, fast, &leadval, &waslead, tab)); if (waslead) { ptemp.rValue = leadval; GCA(INPpName, ("resistance", &ptemp, ckt, type, fast)); } return; } tmpk8ny_4pz/src/spicelib/parser/inp2w.c0000644000175000017500000000544713546075722020252 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" void INP2W(CKTcircuit *ckt, INPtables * tab, struct card *current) { /* Wname [] [IC] */ /* CURRENT CONTROLLED SWITCH */ int mytype; /* the type we determine resistors are */ int type; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *name; /* the resistor's name */ char *model; /* the name of the resistor's model */ char *nname1; /* the first node's name */ char *nname2; /* the second node's name */ CKTnode *node1; /* the first node's node pointer */ CKTnode *node2; /* the second node's node pointer */ int error; /* error code temporary */ INPmodel *thismodel; /* pointer to model structure describing our model */ GENmodel *mdfast; /* pointer to the actual model */ GENinstance *fast; /* pointer to the actual instance */ IFvalue ptemp; /* a value structure to package resistance into */ IFvalue *parm; /* pointer to a value structure for functions to return */ int waslead; /* flag to indicate that funny unlabeled number was found */ double leadval; /* actual value of unlabeled number */ IFuid uid; /* uid for default model */ mytype = INPtypelook("CSwitch"); if (mytype < 0) { LITERR("Device type CSwitch not supported by this binary\n"); return; } line = current->line; INPgetNetTok(&line, &name, 1); INPinsert(&name, tab); INPgetNetTok(&line, &nname1, 1); INPtermInsert(ckt, &nname1, tab, &node1); INPgetNetTok(&line, &nname2, 1); INPtermInsert(ckt, &nname2, tab, &node2); parm = INPgetValue(ckt, &line, IF_INSTANCE, tab); ptemp.uValue = parm->uValue; INPgetNetTok(&line, &model, 1); INPinsert(&model, tab); current->error = INPgetMod(ckt, model, &thismodel, tab); if (thismodel != NULL) { if (mytype != thismodel->INPmodType) { LITERR("incorrect model type"); return; } type = mytype; mdfast = (thismodel->INPmodfast); } else { type = mytype; if (!tab->defWmod) { /* create deafult W model */ IFnewUid(ckt, &uid, NULL, "W", UID_MODEL, NULL); IFC(newModel, (ckt, type, &(tab->defWmod), uid)); } mdfast = tab->defWmod; } IFC(newInstance, (ckt, mdfast, &fast, name)); GCA(INPpName, ("control", &ptemp, ckt, type, fast)); IFC(bindNode, (ckt, fast, 1, node1)); IFC(bindNode, (ckt, fast, 2, node2)); PARSECALL((&line, ckt, type, fast, &leadval, &waslead, tab)); if (waslead) { /* ignore a number */ } } tmpk8ny_4pz/src/spicelib/parser/inp2j.c0000644000175000017500000000550413546075722020227 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" void INP2J(CKTcircuit *ckt, INPtables * tab, struct card *current) { /* Jname [] [OFF] [IC=,] */ int type; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *name; /* the resistor's name */ char *nname1; /* the first node's name */ char *nname2; /* the second node's name */ char *nname3; /* the third node's name */ CKTnode *node1; /* the first node's node pointer */ CKTnode *node2; /* the second node's node pointer */ CKTnode *node3; /* the third node's node pointer */ int error; /* error code temporary */ GENinstance *fast; /* pointer to the actual instance */ IFvalue ptemp; /* a value structure to package resistance into */ int waslead; /* flag to indicate that funny unlabeled number was found */ double leadval; /* actual value of unlabeled number */ char *model; /* the name of the model */ INPmodel *thismodel; /* pointer to model description for user's model */ GENmodel *mdfast; /* pointer to the actual model */ IFuid uid; /* uid of default model */ line = current->line; INPgetNetTok(&line, &name, 1); INPinsert(&name, tab); INPgetNetTok(&line, &nname1, 1); INPtermInsert(ckt, &nname1, tab, &node1); INPgetNetTok(&line, &nname2, 1); INPtermInsert(ckt, &nname2, tab, &node2); INPgetNetTok(&line, &nname3, 1); INPtermInsert(ckt, &nname3, tab, &node3); INPgetNetTok(&line, &model, 1); INPinsert(&model, tab); current->error = INPgetMod(ckt, model, &thismodel, tab); if (thismodel != NULL) { if (thismodel->INPmodType != INPtypelook("JFET") && thismodel->INPmodType != INPtypelook("JFET2") ) { LITERR("incorrect model type"); return; } type = thismodel->INPmodType; mdfast = (thismodel->INPmodfast); } else { type = INPtypelook("JFET"); if (type < 0) { LITERR("Device type JFET not supported by this binary\n"); return; } if (!tab->defJmod) { /* create default J model */ IFnewUid(ckt, &uid, NULL, "J", UID_MODEL, NULL); IFC(newModel, (ckt, type, &(tab->defJmod), uid)); } mdfast = tab->defJmod; } IFC(newInstance, (ckt, mdfast, &fast, name)); IFC(bindNode, (ckt, fast, 1, node1)); IFC(bindNode, (ckt, fast, 2, node2)); IFC(bindNode, (ckt, fast, 3, node3)); PARSECALL((&line, ckt, type, fast, &leadval, &waslead, tab)); if (waslead) { ptemp.rValue = leadval; GCA(INPpName, ("area", &ptemp, ckt, type, fast)); } } tmpk8ny_4pz/src/spicelib/parser/inpmkmod.c0000644000175000017500000000314613546075722021023 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include #include "ngspice/inpdefs.h" #include "ngspice/iferrmsg.h" #include "inpxx.h" /* global input model table. */ INPmodel *modtab = NULL; /*-------------------------------------------------------------- * This fcn takes the model name and looks to see if it is already * in the model table. If it is, then just return. Otherwise, * stick the model into the model table. * Note that the model table INPmodel *--------------------------------------------------------------*/ int INPmakeMod(char *token, int type, struct card *line) { register INPmodel **i; /* First cycle through model table and see if model name already exists in there. If it does, just return. */ for (i = &modtab; *i != NULL; i = &((*i)->INPnextModel)) { if (strcmp((*i)->INPmodName, token) == 0) { return (OK); } } /* Model name was not already in model table. Therefore stick it in the model table. Then return. */ #ifdef TRACE /* debug statement */ printf("In INPmakeMod, about to insert new model name = %s . . .\n", token); #endif *i = TMALLOC(INPmodel, 1); if (*i == NULL) return (E_NOMEM); (*i)->INPmodName = token; /* model name */ (*i)->INPmodType = type; /* model type */ (*i)->INPnextModel = NULL; /* pointer to next model (end of list) */ (*i)->INPmodLine = line; /* model line */ (*i)->INPmodfast = NULL; return (OK); } tmpk8ny_4pz/src/spicelib/parser/ifnewuid.c0000644000175000017500000000331713546075722021017 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/wordlist.h" #include "ngspice/bool.h" #include "ngspice/inpdefs.h" #include #include "ngspice/cpdefs.h" #include "ngspice/ifsim.h" #include "ngspice/iferrmsg.h" #include "ngspice/fteext.h" #include "inpxx.h" /* va: we should use tmalloc, whith also makes failure test */ int IFnewUid(CKTcircuit *ckt, IFuid * newuid, IFuid olduid, char *suffix, int type, CKTnode **nodedata) { char *newname; int error; if (olduid) newname = tprintf("%s#%s", olduid, suffix); else newname = tprintf("%s", suffix); switch (type) { case UID_ANALYSIS: case UID_TASK: case UID_INSTANCE: case UID_OTHER: case UID_MODEL: error = INPinsert(&newname, ft_curckt->ci_symtab); if (error && error != E_EXISTS) return (error); *newuid = newname; break; case UID_SIGNAL: error = INPmkTerm(ckt, &newname, ft_curckt->ci_symtab, nodedata); if (error && error != E_EXISTS) return (error); *newuid = newname; break; default: return (E_BADPARM); } return (OK); } int IFdelUid(CKTcircuit *ckt, IFuid uid, int type) { int error; NG_IGNORE(ckt); switch (type) { case UID_ANALYSIS: case UID_TASK: case UID_INSTANCE: case UID_OTHER: case UID_MODEL: error = INPremove(uid, ft_curckt->ci_symtab); if (error && error != E_EXISTS) return (error); break; case UID_SIGNAL: error = INPremTerm(uid, ft_curckt->ci_symtab); if (error && error != E_EXISTS) return (error); break; default: return (E_BADPARM); } return (OK); } tmpk8ny_4pz/src/spicelib/parser/inp2c.c0000644000175000017500000001036713546075722020223 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" void INP2C(CKTcircuit *ckt, INPtables * tab, struct card *current) { /* parse a capacitor card */ /* Cname [] [] [IC=] */ static int mytype = -1; /* the type we determine capacitors are */ int type = 0; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *saveline; /* ... just in case we need to go back... */ char *name; /* the resistor's name */ char *model; /* the name of the capacitor's model */ char *nname1; /* the first node's name */ char *nname2; /* the second node's name */ CKTnode *node1; /* the first node's node pointer */ CKTnode *node2; /* the second node's node pointer */ double val; /* temp to held resistance */ int error; /* error code temporary */ int error1; /* secondary error code temporary */ INPmodel *thismodel; /* pointer to model structure describing our model */ GENmodel *mdfast = NULL; /* pointer to the actual model */ GENinstance *fast; /* pointer to the actual instance */ IFvalue ptemp; /* a value structure to package resistance into */ int waslead; /* flag to indicate that funny unlabeled number was found */ double leadval; /* actual value of unlabeled number */ IFuid uid; /* uid for default cap model */ #ifdef TRACE printf("In INP2C, Current line: %s\n", current->line); #endif if (mytype < 0) { if ((mytype = INPtypelook("Capacitor")) < 0) { LITERR("Device type Capacitor not supported by this binary\n"); return; } } line = current->line; INPgetNetTok(&line, &name, 1); INPinsert(&name, tab); INPgetNetTok(&line, &nname1, 1); INPtermInsert(ckt, &nname1, tab, &node1); INPgetNetTok(&line, &nname2, 1); INPtermInsert(ckt, &nname2, tab, &node2); val = INPevaluate(&line, &error1, 1); saveline = line; INPgetNetTok(&line, &model, 1); if (*model && (strcmp(model, "c") != 0)) { /* token isn't null */ if (INPlookMod(model)) { /* If this is a valid model connect it */ INPinsert(&model, tab); current->error = INPgetMod(ckt, model, &thismodel, tab); if (thismodel != NULL) { if (mytype != thismodel->INPmodType) { LITERR("incorrect model type"); return; } mdfast = thismodel->INPmodfast; type = thismodel->INPmodType; } } else { tfree(model); /* It is not a model */ line = saveline; /* go back */ type = mytype; if (!tab->defCmod) { /* create default C model */ IFnewUid(ckt, &uid, NULL, "C", UID_MODEL, NULL); IFC(newModel, (ckt, type, &(tab->defCmod), uid)); } mdfast = tab->defCmod; } IFC(newInstance, (ckt, mdfast, &fast, name)); } else { tfree(model); /* The token is null and a default model will be created */ type = mytype; if (!tab->defCmod) { /* create default C model */ IFnewUid(ckt, &uid, NULL, "C", UID_MODEL, NULL); IFC(newModel, (ckt, type, &(tab->defCmod), uid)); } IFC(newInstance, (ckt, tab->defCmod, &fast, name)); if (error1 == 1) { /* was a c=val construction */ val = INPevaluate(&line, &error1, 1); /* [] */ #ifdef TRACE printf ("In INP2C, C=val construction: val=%g\n", val); #endif } } if (error1 == 0) { /* Looks like a number */ ptemp.rValue = val; GCA(INPpName, ("capacitance", &ptemp, ckt, type, fast)); } IFC(bindNode, (ckt, fast, 1, node1)); IFC(bindNode, (ckt, fast, 2, node2)); PARSECALL((&line, ckt, type, fast, &leadval, &waslead, tab)); if (waslead) { ptemp.rValue = leadval; GCA(INPpName, ("capacitance", &ptemp, ckt, type, fast)); } return; } tmpk8ny_4pz/src/spicelib/parser/inp2l.c0000644000175000017500000001040413546075722020224 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Thomas L. Quarles **********/ #include "ngspice/ngspice.h" #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "inpxx.h" void INP2L(CKTcircuit *ckt, INPtables * tab, struct card *current) { /* parse an inductor card */ /* Lname [] [] [IC=] */ int mytype = -1; /* the type we determine inductors are */ int type = 0; /* the type the model says it is */ char *line; /* the part of the current line left to parse */ char *saveline; /* ... just in case we need to go back... */ char *name; /* the resistor's name */ char *model; /* the name of the inductor's model */ char *nname1; /* the first node's name */ char *nname2; /* the second node's name */ CKTnode *node1; /* the first node's node pointer */ CKTnode *node2; /* the second node's node pointer */ double val; /* temp to held inductance */ int error; /* error code temporary */ int error1; /* secondary error code temporary */ INPmodel *thismodel; /* pointer to model structure describing our model */ GENmodel *mdfast = NULL; /* pointer to the actual model */ GENinstance *fast; /* pointer to the actual instance */ IFvalue ptemp; /* a value structure to package inductance into */ int waslead; /* flag to indicate that funny unlabeled number was found */ double leadval; /* actual value of unlabeled number */ IFuid uid; /* uid for default cap model */ #ifdef TRACE printf("In INP2L, Current line: %s\n", current->line); #endif if (mytype < 0) { if ((mytype = INPtypelook("Inductor")) < 0) { LITERR("Device type Inductor not supported by this binary\n"); return; } } line = current->line; INPgetNetTok(&line, &name, 1); INPinsert(&name, tab); INPgetNetTok(&line, &nname1, 1); INPtermInsert(ckt, &nname1, tab, &node1); INPgetNetTok(&line, &nname2, 1); INPtermInsert(ckt, &nname2, tab, &node2); val = INPevaluate(&line, &error1, 1); saveline = line; INPgetNetTok(&line, &model, 1); if (*model && (strcmp(model, "l") != 0)) { /* token isn't null */ if (INPlookMod(model)) { /* If this is a valid model connect it */ INPinsert(&model, tab); current->error = INPgetMod(ckt, model, &thismodel, tab); if (thismodel != NULL) { if (mytype != thismodel->INPmodType) { LITERR("incorrect model type"); return; } mdfast = thismodel->INPmodfast; type = thismodel->INPmodType; } } else { tfree(model); /* It is not a model */ line = saveline; /* go back */ type = mytype; if (!tab->defLmod) { /* create default L model */ IFnewUid(ckt, &uid, NULL, "L", UID_MODEL, NULL); IFC(newModel, (ckt, type, &(tab->defLmod), uid)); } mdfast = tab->defLmod; } IFC(newInstance, (ckt, mdfast, &fast, name)); } else { tfree(model); /* The token is null or we have l=val - a default model will be created */ type = mytype; if (!tab->defLmod) { /* create default L model */ IFnewUid(ckt, &uid, NULL, "L", UID_MODEL, NULL); IFC(newModel, (ckt, type, &(tab->defLmod), uid)); } IFC(newInstance, (ckt, tab->defLmod, &fast, name)); if (error1 == 1) { /* was a l=val construction */ val = INPevaluate(&line, &error1, 1); /* [] */ #ifdef TRACE printf ("In INP2L, L=val construction: val=%g\n", val); #endif } } if (error1 == 0) { /* Looks like a number */ ptemp.rValue = val; GCA(INPpName, ("inductance", &ptemp, ckt, type, fast)); } IFC(bindNode, (ckt, fast, 1, node1)); IFC(bindNode, (ckt, fast, 2, node2)); PARSECALL((&line, ckt, type, fast, &leadval, &waslead, tab)); if (waslead) { ptemp.rValue = leadval; GCA(INPpName, ("inductance", &ptemp, ckt, type, fast)); } return; } tmpk8ny_4pz/src/ngspice.c0000644000175000017500000000570213546075722015547 0ustar carstencarsten/* Configuration file for ngspice */ /********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #include "ngspice/ngspice.h" #define CONFIG #include "ngspice/devdefs.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" /* XXX Should be -1 ? There is always an extra null element at the end ? */ static char *specSigList[] = { "time" }; static IFparm nodeParms[] = { IP("nodeset", PARM_NS , IF_REAL, "suggested initial voltage"), IP("ic", PARM_IC , IF_REAL, "initial voltage"), IP("type", PARM_NODETYPE , IF_INTEGER, "output type of equation") }; IFsimulator SIMinfo = { "ngspice", /* my name */ "Circuit level simulation program", /* more about me */ Spice_Version, /* my version */ CKTinit, /* newCircuit function */ CKTdestroy, /* deleteCircuit function */ CKTnewNode, /* newNode function */ CKTground, /* groundNode function */ CKTbindNode, /* bindNode function */ CKTfndNode, /* findNode function */ (int(*)(CKTcircuit *,void *,int,void **,IFuid *)) /* va, type cast for CKTinst2Node */ CKTinst2Node, /* instToNode function */ CKTsetNodPm, /* setNodeParm function */ CKTaskNodQst, /* askNodeQuest function */ CKTdltNod, /* deleteNode function */ CKTcrtElt, /* newInstance function */ CKTparam, /* setInstanceParm function */ CKTask, /* askInstanceQuest function */ CKTfndDev, /* findInstance funciton */ CKTdltInst, /* deleteInstance function */ CKTmodCrt, /* newModel function */ CKTmodParam, /* setModelParm function */ CKTmodAsk, /* askModelQuest function */ CKTfndMod, /* findModel function */ CKTdltMod, /* deleteModel function */ CKTnewTask, /* newTask function */ CKTnewAnal, /* newAnalysis function */ CKTsetAnalPm, /* setAnalysisParm function */ CKTaskAnalQ, /* askAnalysisQuest function */ CKTfndAnal, /* findAnalysis function */ CKTfndTask, /* findTask function */ CKTdelTask, /* deleteTask function */ CKTdoJob, /* doAnalyses function */ CKTtrouble, /* non-convergence message function */ 0, /* Initialized in SIMinit() */ NULL, /* Initialized in SIMinit() */ 0, /* Initialized in SIMinit() */ NULL, /* Initialized in SIMinit() */ NUMELEMS(nodeParms), nodeParms, NUMELEMS(specSigList), specSigList, }; tmpk8ny_4pz/src/ciderlib/0000755000175000017500000000000013546075722015524 5ustar carstencarstentmpk8ny_4pz/src/ciderlib/Makefile.am0000644000175000017500000000017613546075722017564 0ustar carstencarsten## Process this file with automake EXTRA_DIST = notes SUBDIRS = input support oned twod MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/ciderlib/oned/0000755000175000017500000000000013546075722016451 5ustar carstencarstentmpk8ny_4pz/src/ciderlib/oned/onepoiss.c0000644000175000017500000001101413546075722020451 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/onemesh.h" #include "ngspice/onedev.h" #include "onedext.h" #include "oneddefs.h" #include "ngspice/spmatrix.h" /* Functions to setup and solve the 1D poisson equation. */ void ONEQjacBuild(ONEdevice *pDevice) { SMPmatrix *matrix = pDevice->matrix; ONEelem *pElem; ONEnode *pNode, *pNode1; int index; for (index = 1; index < pDevice->numNodes; index++) { pElem = pDevice->elemArray[index]; pNode = pElem->pLeftNode; pNode->fPsiPsi = spGetElement(matrix, pNode->poiEqn, pNode->poiEqn); pNode1 = pElem->pRightNode; pNode->fPsiPsiiP1 = spGetElement(matrix, pNode->poiEqn, pNode1->poiEqn); pNode = pElem->pRightNode; pNode->fPsiPsi = spGetElement(matrix, pNode->poiEqn, pNode->poiEqn); pNode1 = pElem->pLeftNode; pNode->fPsiPsiiM1 = spGetElement(matrix, pNode->poiEqn, pNode1->poiEqn); } } void ONEQsysLoad(ONEdevice *pDevice) { ONEelem *pElem; ONEnode *pNode; int index, i; double *pRhs = pDevice->rhs; double rDx, dPsi; double netConc, dNetConc; double fNd, fdNd, fNa, fdNa; ONEQcommonTerms(pDevice); /* zero the rhs vector */ for (index = 1; index <= pDevice->numEqns; index++) { pRhs[index] = 0.0; } /* zero the matrix */ spClear(pDevice->matrix); for (index = 1; index < pDevice->numNodes; index++) { pElem = pDevice->elemArray[index]; rDx = pElem->epsRel * pElem->rDx; for (i = 0; i <= 1; i++) { pNode = pElem->pNodes[i]; if (pNode->nodeType != CONTACT) { *(pNode->fPsiPsi) += rDx; pRhs[pNode->poiEqn] += pNode->qf; if (pElem->elemType == SEMICON) { netConc = pNode->netConc; dNetConc = 0.0; if (FreezeOut) { ONEQfreezeOut(pNode, &fNd, &fNa, &fdNd, &fdNa); netConc = pNode->nd * fNd - pNode->na * fNa; dNetConc = pNode->nd * fdNd - pNode->na * fdNa; } *(pNode->fPsiPsi) += 0.5 * pElem->dx * (pNode->nConc + pNode->pConc - dNetConc); pRhs[pNode->poiEqn] += 0.5 * pElem->dx * (netConc + pNode->pConc - pNode->nConc); } } } dPsi = pElem->pEdge->dPsi; pNode = pElem->pLeftNode; pRhs[pNode->poiEqn] += rDx * dPsi; *(pNode->fPsiPsiiP1) -= rDx; pNode = pElem->pRightNode; pRhs[pNode->poiEqn] -= rDx * dPsi; *(pNode->fPsiPsiiM1) -= rDx; } } void ONEQrhsLoad(ONEdevice *pDevice) { ONEelem *pElem; ONEnode *pNode; int index, i; double *pRhs = pDevice->rhs; double rDx, dPsi; double fNd, fNa, fdNd, fdNa; double netConc; ONEQcommonTerms(pDevice); /* zero the rhs vector */ for (index = 1; index <= pDevice->numEqns; index++) { pRhs[index] = 0.0; } for (index = 1; index < pDevice->numNodes; index++) { pElem = pDevice->elemArray[index]; rDx = pElem->epsRel * pElem->rDx; for (i = 0; i <= 1; i++) { pNode = pElem->pNodes[i]; if (pNode->nodeType != CONTACT) { pRhs[pNode->poiEqn] += pNode->qf; if (pElem->elemType == SEMICON) { netConc = pNode->netConc; if (FreezeOut) { ONEQfreezeOut(pNode, &fNd, &fNa, &fdNd, &fdNa); netConc = pNode->nd * fNd - pNode->na * fNa; } pRhs[pNode->poiEqn] += 0.5 * pElem->dx * (netConc + pNode->pConc - pNode->nConc); } } } dPsi = pElem->pEdge->dPsi; pNode = pElem->pLeftNode; pRhs[pNode->poiEqn] += rDx * dPsi; pNode = pElem->pRightNode; pRhs[pNode->poiEqn] -= rDx * dPsi; } } void ONEQcommonTerms(ONEdevice *pDevice) { ONEelem *pElem; ONEedge *pEdge; ONEnode *pNode; int i, index; double psi1, psi2, refPsi; for (index = 1; index < pDevice->numNodes; index++) { pElem = pDevice->elemArray[index]; refPsi = pElem->matlInfo->refPsi; for (i = 0; i <= 1; i++) { if (pElem->evalNodes[i]) { pNode = pElem->pNodes[i]; if (pNode->nodeType != CONTACT) { pNode->psi = pDevice->dcSolution[pNode->poiEqn]; if (pElem->elemType == SEMICON) { pNode->nConc = pNode->nie * exp(pNode->psi - refPsi); pNode->pConc = pNode->nie * exp(-pNode->psi + refPsi); } } } } pEdge = pElem->pEdge; pNode = pElem->pNodes[0]; if (pNode->nodeType != CONTACT) { psi1 = pDevice->dcSolution[pNode->poiEqn]; } else { psi1 = pNode->psi; } pNode = pElem->pNodes[1]; if (pNode->nodeType != CONTACT) { psi2 = pDevice->dcSolution[pNode->poiEqn]; } else { psi2 = pNode->psi; } pEdge->dPsi = psi2 - psi1; } } tmpk8ny_4pz/src/ciderlib/oned/onedopng.c0000644000175000017500000000721613546075722020434 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/onemesh.h" #include "ngspice/onedev.h" #include "ngspice/profile.h" #include "ngspice/macros.h" #include "onedext.h" #include "oneddefs.h" #include "ngspice/cidersupt.h" /* functions in this file are used to calculate the conc */ double ONEdopingValue(DOPprofile *pProfile, DOPtable *pTable, double x) { double argX, argP, value=0.0; /* Find the appropriate lookup table if necessary */ if (pProfile->type == LOOKUP) { while (pTable != NULL) { if (pTable->impId == pProfile->IMPID) { /* Found it */ break; } else { pTable = pTable->next; } } if (pTable == NULL) { fprintf(stderr, "Error: unknown impurity profile %d\n", ((int)pProfile->IMPID)); controlled_exit(1); } } /* Find distances */ if (pProfile->X_LOW > x) { argX = pProfile->X_LOW - x; } else if (x > pProfile->X_HIGH) { argX = x - pProfile->X_HIGH; } else { argX = 0.0; } argP = argX; /* Transform to coordinates of profile peak */ argP -= pProfile->LOCATION; argP /= pProfile->CHAR_LENGTH; switch (pProfile->type) { case UNIF: if (argP > 0.0) { value = 0.0; } else { value = pProfile->CONC; } break; case LIN: argP = ABS(argP); if (argP > 1.0) { value = 0.0; } else { value = pProfile->CONC * (1.0 - argP); } break; case GAUSS: argP *= argP; if (argP > 80.0) { value = 0.0; } else { value = pProfile->PEAK_CONC * exp(-argP); } case EXP: argP = ABS(argP); if (argP > 80.0) { value = 0.0; } else { value = pProfile->PEAK_CONC * exp(-argP); } break; case ERRFC: argP = ABS(argP); if (argP > 10.0) { value = 0.0; } else { value = pProfile->PEAK_CONC * erfc(argP); } break; case LOOKUP: argP = ABS(argP); value = lookup(pTable->dopData, argP); break; default: break; } return (value); } void ONEsetDoping(ONEdevice *pDevice, DOPprofile *pProfile, DOPtable *pTable) { ONEnode *pNode; ONEelem *pElem; DOPprofile *pP; double conc; int index, eIndex; BOOLEAN dopeMe; /* Clear doping info for all nodes. */ for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; for (index = 0; index <= 1; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; pNode->na = 0.0; pNode->nd = 0.0; pNode->netConc = 0.0; pNode->totalConc = 0.0; } } } /* Now compute the contribution to the total doping from each profile. */ for (pP = pProfile; pP != NULL; pP = pP->next) { for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; if (pElem->elemType == SEMICON) { if (pP->numDomains > 0) { dopeMe = FALSE; for (index = 0; index < pP->numDomains; index++) { if (pElem->domain == pP->domains[index]) { dopeMe = TRUE; break; } } } else { /* domains not given, so dope all */ dopeMe = TRUE; } if (dopeMe) { for (index = 0; index <= 1; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; conc = ONEdopingValue(pP, pTable, pNode->x); pNode->netConc += conc; if (conc < 0.0) { pNode->totalConc -= conc; pNode->na -= conc; } else { pNode->totalConc += conc; pNode->nd += conc; } } } } } } } } tmpk8ny_4pz/src/ciderlib/oned/oneddefs.h0000644000175000017500000000075713546075722020422 0ustar carstencarsten/* * 2001 Paolo Nenzi */ #ifndef ngspice_ONEDDEFS_H #define ngspice_ONEDDEFS_H /* Debug statements */ extern BOOLEAN ONEacDebug; extern BOOLEAN ONEdcDebug; extern BOOLEAN ONEtranDebug; extern BOOLEAN ONEjacDebug; /* Now some defines for the one dimensional simulator * library. * Theese defines were gathered from all the code in * oned directory. */ #define LEVEL_ALPHA_SI 3.1e-8 /* From de Graaf & Klaasen, pg. 12 */ #define MIN_DELV 1e-3 #define NORM_RED_MAXITERS 10 #endif tmpk8ny_4pz/src/ciderlib/oned/oneprint.c0000644000175000017500000003765513546075722020473 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1992 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numconst.h" #include "ngspice/numenum.h" #include "ngspice/onemesh.h" #include "ngspice/onedev.h" #include "ngspice/carddefs.h" #include "ngspice/spmatrix.h" #include "onedext.h" #include "oneddefs.h" #include void ONEprnSolution(FILE *file, ONEdevice *pDevice, OUTPcard *output) { int index, i; int numVars = 0; ONEnode **nodeArray=NULL; ONEnode *pNode; ONEelem *pElem, *pPrevElem; ONEmaterial *info=NULL; double data[50]; double eField, refPsi = 0.0, eGap, dGap; double mun, mup, jc, jd, jn, jp, jt; double coeff1, coeff2; if (output->OUTPnumVars == -1) { /* First pass. Need to count number of variables in output. */ numVars++; /* For the X scale */ if (output->OUTPdoping) { numVars++; } if (output->OUTPpsi) { numVars++; } if (output->OUTPequPsi) { numVars++; } if (output->OUTPvacPsi) { numVars++; } if (output->OUTPnConc) { numVars++; } if (output->OUTPpConc) { numVars++; } if (output->OUTPphin) { numVars++; } if (output->OUTPphip) { numVars++; } if (output->OUTPphic) { numVars++; } if (output->OUTPphiv) { numVars++; } if (output->OUTPeField) { numVars++; } if (output->OUTPjc) { numVars++; } if (output->OUTPjd) { numVars++; } if (output->OUTPjn) { numVars++; } if (output->OUTPjp) { numVars++; } if (output->OUTPjt) { numVars++; } if (output->OUTPuNet) { numVars++; } if (output->OUTPmun) { numVars++; } if (output->OUTPmup) { numVars++; } output->OUTPnumVars = numVars; } /* generate the work array for printing node info */ XCALLOC(nodeArray, ONEnode *, 1 + pDevice->numNodes); /* store the nodes in this work array and print out later */ for (index = 1; index < pDevice->numNodes; index++) { pElem = pDevice->elemArray[index]; if (refPsi == 0.0 && pElem->matlInfo->type == SEMICON) { refPsi = pElem->matlInfo->refPsi; } for (i = 0; i <= 1; i++) { if (pElem->evalNodes[i]) { pNode = pElem->pNodes[i]; nodeArray[pNode->nodeI] = pNode; } } } /* Initialize rawfile */ numVars = output->OUTPnumVars; fprintf(file, "Title: Device %s internal state\n", pDevice->name); fprintf(file, "Plotname: Device Cross Section\n"); fprintf(file, "Flags: real\n"); fprintf(file, "Command: deftype p xs cross\n"); fprintf(file, "Command: deftype v distance m\n"); fprintf(file, "Command: deftype v concentration cm^-3\n"); fprintf(file, "Command: deftype v electric_field V/cm\n"); fprintf(file, "Command: deftype v current_density A/cm^2\n"); fprintf(file, "Command: deftype v concentration/time cm^-3/s\n"); fprintf(file, "Command: deftype v mobility cm^2/Vs\n"); fprintf(file, "No. Variables: %d\n", numVars); fprintf(file, "No. Points: %d\n", pDevice->numNodes); numVars = 0; fprintf(file, "Variables:\n"); fprintf(file, "\t%d x distance\n", numVars++); if (output->OUTPpsi) { fprintf(file, "\t%d psi voltage\n", numVars++); } if (output->OUTPequPsi) { fprintf(file, "\t%d equ.psi voltage\n", numVars++); } if (output->OUTPvacPsi) { fprintf(file, "\t%d vac.psi voltage\n", numVars++); } if (output->OUTPphin) { fprintf(file, "\t%d phin voltage\n", numVars++); } if (output->OUTPphip) { fprintf(file, "\t%d phip voltage\n", numVars++); } if (output->OUTPphic) { fprintf(file, "\t%d phic voltage\n", numVars++); } if (output->OUTPphiv) { fprintf(file, "\t%d phiv voltage\n", numVars++); } if (output->OUTPdoping) { fprintf(file, "\t%d dop concentration\n", numVars++); } if (output->OUTPnConc) { fprintf(file, "\t%d n concentration\n", numVars++); } if (output->OUTPpConc) { fprintf(file, "\t%d p concentration\n", numVars++); } if (output->OUTPeField) { fprintf(file, "\t%d e electric_field\n", numVars++); } if (output->OUTPjc) { fprintf(file, "\t%d jc current_density\n", numVars++); } if (output->OUTPjd) { fprintf(file, "\t%d jd current_density\n", numVars++); } if (output->OUTPjn) { fprintf(file, "\t%d jn current_density\n", numVars++); } if (output->OUTPjp) { fprintf(file, "\t%d jp current_density\n", numVars++); } if (output->OUTPjt) { fprintf(file, "\t%d jt current_density\n", numVars++); } if (output->OUTPuNet) { fprintf(file, "\t%d unet concentration/time\n", numVars++); } if (output->OUTPmun) { fprintf(file, "\t%d mun mobility\n", numVars++); } if (output->OUTPmup) { fprintf(file, "\t%d mup mobility\n", numVars++); } fprintf(file, "Binary:\n"); for (index = 1; index <= pDevice->numNodes; index++) { pNode = nodeArray[index]; if ((index > 1) && (index < pDevice->numNodes)) { pElem = pNode->pRightElem; pPrevElem = pNode->pLeftElem; if (pElem->evalNodes[0]) { info = pElem->matlInfo; } else if (pPrevElem->evalNodes[1]) { info = pPrevElem->matlInfo; } coeff1 = pPrevElem->dx / (pPrevElem->dx + pElem->dx); coeff2 = pElem->dx / (pPrevElem->dx + pElem->dx); eField = -coeff1 * pElem->pEdge->dPsi * pElem->rDx - coeff2 * pPrevElem->pEdge->dPsi * pPrevElem->rDx; mun = coeff1 * pElem->pEdge->mun + coeff2 * pPrevElem->pEdge->mun; mup = coeff1 * pElem->pEdge->mup + coeff2 * pPrevElem->pEdge->mup; jn = coeff1 * pElem->pEdge->jn + coeff2 * pPrevElem->pEdge->jn; jp = coeff1 * pElem->pEdge->jp + coeff2 * pPrevElem->pEdge->jp; jd = coeff1 * pElem->pEdge->jd + coeff2 * pPrevElem->pEdge->jd; } else if (index == 1) { info = pNode->pRightElem->matlInfo; eField = 0.0; mun = pNode->pRightElem->pEdge->mun; mup = pNode->pRightElem->pEdge->mup; jn = pNode->pRightElem->pEdge->jn; jp = pNode->pRightElem->pEdge->jp; jd = pNode->pRightElem->pEdge->jd; } else { info = pNode->pLeftElem->matlInfo; eField = 0.0; mun = pNode->pLeftElem->pEdge->mun; mup = pNode->pLeftElem->pEdge->mup; jn = pNode->pLeftElem->pEdge->jn; jp = pNode->pLeftElem->pEdge->jp; jd = pNode->pLeftElem->pEdge->jd; } jc = jn + jp; jt = jc + jd; /* Crude hack to get around the fact that the base node wipes out 'eg' */ if (index == pDevice->baseIndex) { eGap = info->eg0; dGap = 0.0; } else { eGap = pNode->eg * VNorm; dGap = 0.5 * (info->eg0 - eGap); } /* Now fill in the data array */ numVars = 0; data[numVars++] = pNode->x * 1e-2; if (output->OUTPpsi) { data[numVars++] = (pNode->psi - refPsi) * VNorm; } if (output->OUTPequPsi) { data[numVars++] = (pNode->psi0 - refPsi) * VNorm; } if (output->OUTPvacPsi) { data[numVars++] = pNode->psi * VNorm; } if (output->OUTPphin) { if (info->type != INSULATOR) { data[numVars++] = (pNode->psi - refPsi - log(pNode->nConc / pNode->nie)) * VNorm; } else { data[numVars++] = 0.0; } } if (output->OUTPphip) { if (info->type != INSULATOR) { data[numVars++] = (pNode->psi - refPsi + log(pNode->pConc / pNode->nie)) * VNorm; } else { data[numVars++] = 0.0; } } if (output->OUTPphic) { data[numVars++] = (pNode->psi + pNode->eaff) * VNorm + dGap; } if (output->OUTPphiv) { data[numVars++] = (pNode->psi + pNode->eaff) * VNorm + dGap + eGap; } if (output->OUTPdoping) { data[numVars++] = pNode->netConc * NNorm; } if (output->OUTPnConc) { data[numVars++] = pNode->nConc * NNorm; } if (output->OUTPpConc) { data[numVars++] = pNode->pConc * NNorm; } if (output->OUTPeField) { data[numVars++] = eField * ENorm; } if (output->OUTPjc) { data[numVars++] = jc * JNorm; } if (output->OUTPjd) { data[numVars++] = jd * JNorm; } if (output->OUTPjn) { data[numVars++] = jn * JNorm; } if (output->OUTPjp) { data[numVars++] = jp * JNorm; } if (output->OUTPjt) { data[numVars++] = jt * JNorm; } if (output->OUTPuNet) { data[numVars++] = pNode->uNet * NNorm / TNorm; } if (output->OUTPmun) { data[numVars++] = mun; } if (output->OUTPmup) { data[numVars++] = mup; } fwrite(data, sizeof(double), (size_t) numVars, file); } FREE(nodeArray); } /* * XXX This is what the SPARSE element structure looks like. We can't take it * from its definition because the include file redefines all sorts of * things. Note that we are violating data encapsulation to find out the * size of this thing. */ struct MatrixElement { spREAL Real; spREAL Imag; int Row; int Col; struct MatrixElement *NextInRow; struct MatrixElement *NextInCol; }; void ONEmemStats(FILE *file, ONEdevice *pDevice) { const char memFormat[] = "%-20s" "%10d" "%10" PRIuPTR "\n"; /* static const char sumFormat[] = "%20s %-10d\n";*/ int size; size_t memory; ONEmaterial *pMaterial; ONEcontact *pContact; int numContactNodes; fprintf(file, "----------------------------------------\n"); fprintf(file, "Device %s Memory Usage:\n", pDevice->name); fprintf(file, "Item Count Bytes\n"); fprintf(file, "----------------------------------------\n"); size = 1; memory = (size_t) size * sizeof(ONEdevice); fprintf(file, memFormat, "Device", size, memory); size = pDevice->numNodes - 1; memory = (size_t) size * sizeof(ONEelem); fprintf(file, memFormat, "Elements", size, memory); size = pDevice->numNodes; memory = (size_t) size * sizeof(ONEnode); fprintf(file, memFormat, "Nodes", size, memory); size = pDevice->numNodes - 1; memory = (size_t) size * sizeof(ONEedge); fprintf(file, memFormat, "Edges", size, memory); size = pDevice->numNodes; memory = (size_t) size * sizeof(ONEelem *); size = 0; for (pMaterial = pDevice->pMaterials; pMaterial; pMaterial = pMaterial->next) size++; memory += (size_t) size * sizeof(ONEmaterial); size = numContactNodes = 0; for (pContact = pDevice->pFirstContact; pContact; pContact = pContact->next) { numContactNodes += pContact->numNodes; size++; } memory += (size_t) size * sizeof(ONEcontact); size = numContactNodes; memory += (size_t) size * sizeof(ONEnode *); size = 0; fprintf(file, "%-20s%10s%10" PRIuPTR "\n", "Misc Mesh", "n/a", memory); size = pDevice->numOrigEquil; memory = (size_t) size * sizeof(struct MatrixElement); fprintf(file, memFormat, "Equil Orig NZ", size, memory); size = pDevice->numFillEquil; memory = (size_t) size * sizeof(struct MatrixElement); fprintf(file, memFormat, "Equil Fill NZ", size, memory); size = pDevice->numOrigEquil + pDevice->numFillEquil; memory = (size_t) size * sizeof(struct MatrixElement); fprintf(file, memFormat, "Equil Tot NZ", size, memory); size = pDevice->dimEquil; memory = (size_t) size * 4 * sizeof(double); fprintf(file, memFormat, "Equil Vectors", size, memory); size = pDevice->numOrigBias; memory = (size_t) size * sizeof(struct MatrixElement); fprintf(file, memFormat, "Bias Orig NZ", size, memory); size = pDevice->numFillBias; memory = (size_t) size * sizeof(struct MatrixElement); fprintf(file, memFormat, "Bias Fill NZ", size, memory); size = pDevice->numOrigBias + pDevice->numFillBias; memory = (size_t) size * sizeof(struct MatrixElement); fprintf(file, memFormat, "Bias Tot NZ", size, memory); size = pDevice->dimBias; memory = (size_t) size * 5 * sizeof(double); fprintf(file, memFormat, "Bias Vectors", size, memory); size = (pDevice->numNodes - 1) * ONEnumEdgeStates + pDevice->numNodes * ONEnumNodeStates; memory = (size_t) size * sizeof(double); fprintf(file, memFormat, "State Vector", size, memory); } void ONEcpuStats(FILE *file, ONEdevice *pDevice) { static const char cpuFormat[] = "%-20s%10g%10g%10g%10g%10g\n"; ONEstats *pStats = pDevice->pStats; double total; int iTotal; fprintf(file, "----------------------------------------------------------------------\n"); fprintf(file, "Device %s Time Usage:\n", pDevice->name); fprintf(file, "Item SETUP DC TRAN AC TOTAL\n"); fprintf(file, "----------------------------------------------------------------------\n"); total = pStats->setupTime[STAT_SETUP] + pStats->setupTime[STAT_DC] + pStats->setupTime[STAT_TRAN] + pStats->setupTime[STAT_AC]; fprintf(file, cpuFormat, "Setup Time", pStats->setupTime[STAT_SETUP], pStats->setupTime[STAT_DC], pStats->setupTime[STAT_TRAN], pStats->setupTime[STAT_AC], total); total = pStats->loadTime[STAT_SETUP] + pStats->loadTime[STAT_DC] + pStats->loadTime[STAT_TRAN] + pStats->loadTime[STAT_AC]; fprintf(file, cpuFormat, "Load Time", pStats->loadTime[STAT_SETUP], pStats->loadTime[STAT_DC], pStats->loadTime[STAT_TRAN], pStats->loadTime[STAT_AC], total); total = pStats->orderTime[STAT_SETUP] + pStats->orderTime[STAT_DC] + pStats->orderTime[STAT_TRAN] + pStats->orderTime[STAT_AC]; fprintf(file, cpuFormat, "Order Time", pStats->orderTime[STAT_SETUP], pStats->orderTime[STAT_DC], pStats->orderTime[STAT_TRAN], pStats->orderTime[STAT_AC], total); total = pStats->factorTime[STAT_SETUP] + pStats->factorTime[STAT_DC] + pStats->factorTime[STAT_TRAN] + pStats->factorTime[STAT_AC]; fprintf(file, cpuFormat, "Factor Time", pStats->factorTime[STAT_SETUP], pStats->factorTime[STAT_DC], pStats->factorTime[STAT_TRAN], pStats->factorTime[STAT_AC], total); total = pStats->solveTime[STAT_SETUP] + pStats->solveTime[STAT_DC] + pStats->solveTime[STAT_TRAN] + pStats->solveTime[STAT_AC]; fprintf(file, cpuFormat, "Solve Time", pStats->solveTime[STAT_SETUP], pStats->solveTime[STAT_DC], pStats->solveTime[STAT_TRAN], pStats->solveTime[STAT_AC], total); total = pStats->updateTime[STAT_SETUP] + pStats->updateTime[STAT_DC] + pStats->updateTime[STAT_TRAN] + pStats->updateTime[STAT_AC]; fprintf(file, cpuFormat, "Update Time", pStats->updateTime[STAT_SETUP], pStats->updateTime[STAT_DC], pStats->updateTime[STAT_TRAN], pStats->updateTime[STAT_AC], total); total = pStats->checkTime[STAT_SETUP] + pStats->checkTime[STAT_DC] + pStats->checkTime[STAT_TRAN] + pStats->checkTime[STAT_AC]; fprintf(file, cpuFormat, "Check Time", pStats->checkTime[STAT_SETUP], pStats->checkTime[STAT_DC], pStats->checkTime[STAT_TRAN], pStats->checkTime[STAT_AC], total); total = pStats->setupTime[STAT_SETUP] + pStats->setupTime[STAT_DC] + pStats->setupTime[STAT_TRAN] + pStats->setupTime[STAT_AC]; fprintf(file, cpuFormat, "Misc Time", pStats->miscTime[STAT_SETUP], pStats->miscTime[STAT_DC], pStats->miscTime[STAT_TRAN], pStats->miscTime[STAT_AC], total); fprintf(file, "%-40s%10g%10s%10g\n", "LTE Time", pStats->lteTime, "", pStats->lteTime); total = pStats->totalTime[STAT_SETUP] + pStats->totalTime[STAT_DC] + pStats->totalTime[STAT_TRAN] + pStats->totalTime[STAT_AC]; fprintf(file, cpuFormat, "Total Time", pStats->totalTime[STAT_SETUP], pStats->totalTime[STAT_DC], pStats->totalTime[STAT_TRAN], pStats->totalTime[STAT_AC], total); iTotal = pStats->numIters[STAT_SETUP] + pStats->numIters[STAT_DC] + pStats->numIters[STAT_TRAN] + pStats->numIters[STAT_AC]; fprintf(file, "%-20s%10d%10d%10d%10d%10d\n", "Iterations", pStats->numIters[STAT_SETUP], pStats->numIters[STAT_DC], pStats->numIters[STAT_TRAN], pStats->numIters[STAT_AC], iTotal); } tmpk8ny_4pz/src/ciderlib/oned/Makefile.am0000644000175000017500000000075713546075722020516 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libcideroned.la libcideroned_la_SOURCES = \ oneadmit.c \ oneaval.c \ onecond.c \ onecont.c \ oneddefs.h \ onedest.c \ onedext.h \ onedopng.c \ onefreez.c \ onemesh.c \ onepoiss.c \ oneprint.c \ oneproj.c \ oneread.c \ onesetup.c \ onesolve.c EXTRA_DIST = notes readme AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/ciderlib/oned/onedext.h0000644000175000017500000001022313546075722020266 0ustar carstencarsten/* * 2001 Paolo Nenzi */ /* External symbols for ONE Dimensional simulator */ #ifndef ngspice_ONEDEXT_H #define ngspice_ONEDEXT_H #include "ngspice/profile.h" #include "ngspice/onemesh.h" #include "ngspice/onedev.h" #include "ngspice/carddefs.h" #include "ngspice/bool.h" #include "ngspice/complex.h" /* oneadmit.c */ extern int NUMDadmittance(ONEdevice *, double, SPcomplex *); extern int NBJTadmittance(ONEdevice *, double, SPcomplex *, SPcomplex *, SPcomplex *, SPcomplex *); extern BOOLEAN ONEsorSolve(ONEdevice *, double *, double *, double omega); extern void NUMDys(ONEdevice *, SPcomplex *, SPcomplex *); extern void NBJTys(ONEdevice *,SPcomplex *, SPcomplex *, SPcomplex *, SPcomplex *, SPcomplex *); extern SPcomplex *computeAdmittance(ONEnode *, BOOLEAN, double *xReal, double *,SPcomplex *); /* oneaval.c */ extern double ONEavalanche(BOOLEAN, ONEdevice *, ONEnode *); /* onecond.c */ extern void NUMDconductance(ONEdevice *, BOOLEAN, double *, double *); extern void NBJTconductance(ONEdevice *, BOOLEAN, double *, double *, double *, double *, double *); extern void NUMDcurrent(ONEdevice *, BOOLEAN, double *, double *); extern void NBJTcurrent(ONEdevice *, BOOLEAN, double *, double *, double *); /* onecont */ extern void ONE_jacBuild(ONEdevice *); extern void ONE_sysLoad(ONEdevice *, BOOLEAN, ONEtranInfo *); extern void ONE_jacLoad(ONEdevice *); extern void ONE_rhsLoad(ONEdevice *, BOOLEAN, ONEtranInfo *); extern void ONE_commonTerms(ONEdevice *, BOOLEAN, BOOLEAN, ONEtranInfo *); /* onedest */ extern void ONEdestroy(ONEdevice *); /* onedopng.c */ extern double ONEdopingValue(DOPprofile *, DOPtable *, double ); extern void ONEsetDoping(ONEdevice *, DOPprofile *, DOPtable *); /* onefreez.c */ extern void ONEQfreezeOut(ONEnode *, double *, double *, double *, double *); extern void ONE_freezeOut(ONEnode *, double, double, double *, double*, double *, double *); /* onemesh.c */ extern void ONEbuildMesh(ONEdevice *, ONEcoord *, ONEdomain *, ONEmaterial *); extern void ONEgetStatePointers(ONEdevice *, int *); extern void adjustBaseContact(ONEdevice *, int, int); extern void NBJTjunctions(ONEdevice *, int *, int *); extern void ONEprnMesh(ONEdevice *); /* onepoiss.c */ extern void ONEQjacBuild(ONEdevice *); extern void ONEQsysLoad(ONEdevice *); extern void ONEQrhsLoad(ONEdevice *); extern void ONEQcommonTerms(ONEdevice *); /*oneprint.c */ extern void ONEprnSolution(FILE *, ONEdevice *, OUTPcard *); extern void ONEmemStats(FILE *, ONEdevice *); extern void ONEcpuStats(FILE *f, ONEdevice *); /* oneproj.c */ extern void NUMDproject(ONEdevice *, double); extern void NBJTproject(ONEdevice *, double, double, double); extern void NUMDupdate(ONEdevice *,double, BOOLEAN); extern void NBJTupdate(ONEdevice *, double, double, double, BOOLEAN); extern void NUMDsetBCs(ONEdevice *, double); extern void NBJTsetBCs(ONEdevice *, double, double); /* oneread.c */ extern int ONEreadState(ONEdevice *, char *, int, double *, double *); /*onesetup.c */ extern void ONEsetup(ONEdevice *); extern void ONEsetBCparams(ONEdevice *, BDRYcard *, CONTcard *); extern void ONEnormalize(ONEdevice *); /* onesolve.c */ extern void ONEdcSolve(ONEdevice *, int, BOOLEAN, BOOLEAN, ONEtranInfo *); extern BOOLEAN ONEpsiDeltaConverged(ONEdevice *, int *); extern BOOLEAN ONEdeltaConverged(ONEdevice *); extern void ONEresetJacobian(ONEdevice *); extern void ONEstoreNeutralGuess(ONEdevice *); extern void ONEequilSolve(ONEdevice *); extern void ONEbiasSolve(ONEdevice *, int, BOOLEAN, ONEtranInfo *); extern void ONEstoreEquilibGuess(ONEdevice *); extern void ONEstoreInitialGuess(ONEdevice *); extern int ONEnewDelta(ONEdevice *, BOOLEAN, ONEtranInfo *); extern double ONEtrunc(ONEdevice *, ONEtranInfo *, double); extern void ONEsaveState(ONEdevice *); extern double ONEnuNorm(ONEdevice *); extern void ONEjacCheck(ONEdevice *, BOOLEAN, ONEtranInfo *); extern void ONEpredict(ONEdevice *, ONEtranInfo *); extern BOOLEAN ONEdeviceConverged(ONEdevice *); #endif tmpk8ny_4pz/src/ciderlib/oned/onesolve.c0000644000175000017500000007543113546075722020461 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ /* * Functions needed to calculate solutions for 1D devices. */ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/onedev.h" #include "ngspice/onemesh.h" #include "ngspice/spmatrix.h" #include "ngspice/bool.h" #include "ngspice/macros.h" #include "onedext.h" #include "oneddefs.h" #include "ngspice/cidersupt.h" #include "../../maths/misc/norm.h" #include "ngspice/ifsim.h" extern IFfrontEnd *SPfrontEnd; /* The iteration driving loop and convergence check */ void ONEdcSolve(ONEdevice *pDevice, int iterationLimit, BOOLEAN newSolver, BOOLEAN tranAnalysis, ONEtranInfo *info) { ONEnode *pNode; ONEelem *pElem; int index, eIndex, error; int timesConverged = 0, negConc = FALSE; int size = pDevice->numEqns; BOOLEAN quitLoop; BOOLEAN debug = FALSE; double *rhs = pDevice->rhs; /* double *intermediate = pDevice->copiedSolution; */ double *solution = pDevice->dcSolution; double *delta = pDevice->dcDeltaSolution; double poissNorm, contNorm; double startTime, totalStartTime; double totalTime, loadTime, factorTime, solveTime, updateTime, checkTime; double orderTime = 0.0; quitLoop = FALSE; debug = (!tranAnalysis && ONEdcDebug) ||(tranAnalysis && ONEtranDebug); pDevice->iterationNumber = 0; pDevice->converged = FALSE; totalTime = loadTime = factorTime = solveTime = updateTime = checkTime = 0.0; totalStartTime = SPfrontEnd->IFseconds(); if (debug) { if (pDevice->poissonOnly) { fprintf(stdout, "Equilibrium Solution:\n"); } else { fprintf(stdout, "Bias Solution:\n"); } fprintf(stdout, "Iteration RHS Norm\n"); } while (! (pDevice->converged || pDevice->iterationNumber > iterationLimit || quitLoop)) { pDevice->iterationNumber++; if ((!pDevice->poissonOnly) && (iterationLimit > 0) &&(!tranAnalysis)) { ONEjacCheck(pDevice, tranAnalysis, info); } /* LOAD */ startTime = SPfrontEnd->IFseconds(); if (pDevice->poissonOnly) { ONEQsysLoad(pDevice); } else { ONE_sysLoad(pDevice, tranAnalysis, info); } pDevice->rhsNorm = maxNorm(rhs, size); loadTime += SPfrontEnd->IFseconds() - startTime; if (debug) { fprintf(stdout, "%7d %11.4e%s\n", pDevice->iterationNumber - 1, pDevice->rhsNorm, negConc ? " negative conc encountered" : ""); negConc = FALSE; } /* FACTOR */ startTime = SPfrontEnd->IFseconds(); error = spFactor(pDevice->matrix); factorTime += SPfrontEnd->IFseconds() - startTime; if (newSolver) { if (pDevice->iterationNumber == 1) { orderTime = factorTime; } else if (pDevice->iterationNumber == 2) { orderTime -= factorTime - orderTime; factorTime -= orderTime; if (pDevice->poissonOnly) { pDevice->pStats->orderTime[STAT_SETUP] += orderTime; } else { pDevice->pStats->orderTime[STAT_DC] += orderTime; } newSolver = FALSE; } } if (foundError(error)) { if (error == spSINGULAR) { int badRow, badCol; spWhereSingular(pDevice->matrix, &badRow, &badCol); printf("***** singular at (%d,%d)\n", badRow, badCol); } /* Should probably try to recover now, but we'll punt instead. */ exit(-1); } /* SOLVE */ startTime = SPfrontEnd->IFseconds(); spSolve(pDevice->matrix, rhs, delta, NULL, NULL); solveTime += SPfrontEnd->IFseconds() - startTime; /* UPDATE */ startTime = SPfrontEnd->IFseconds(); /* * Use norm reducing Newton method only for DC bias solutions. Since norm * reducing can get trapped by numerical errors, turn it off when we are * somewhat close to the solution. */ if ((!pDevice->poissonOnly) && (iterationLimit > 0) && (!tranAnalysis) && (pDevice->rhsNorm > 1e-6)) { error = ONEnewDelta(pDevice, tranAnalysis, info); if (error) { pDevice->converged = FALSE; quitLoop = TRUE; updateTime += SPfrontEnd->IFseconds() - startTime; continue; } } for (index = 1; index <= size; index++) { solution[index] += delta[index]; } updateTime += SPfrontEnd->IFseconds() - startTime; /* CHECK CONVERGENCE */ startTime = SPfrontEnd->IFseconds(); /* Check if updates have gotten sufficiently small. */ if (pDevice->iterationNumber != 1) { /* * pDevice->converged = ONEdeltaConverged(pDevice); */ pDevice->converged = ONEpsiDeltaConverged(pDevice, &negConc); } /* Check if the rhs residual is smaller than abstol. */ if (pDevice->converged &&(!pDevice->poissonOnly) &&(!tranAnalysis)) { ONE_rhsLoad(pDevice, tranAnalysis, info); pDevice->rhsNorm = maxNorm(rhs, size); if (pDevice->rhsNorm > pDevice->abstol) { pDevice->converged = FALSE; } if ((++timesConverged >= 2) &&(pDevice->rhsNorm < 1e3 * pDevice->abstol)) { pDevice->converged = TRUE; } else if (timesConverged >= 5) { pDevice->converged = FALSE; quitLoop = TRUE; } } else if (pDevice->converged && pDevice->poissonOnly) { ONEQrhsLoad(pDevice); pDevice->rhsNorm = maxNorm(rhs, size); if (pDevice->rhsNorm > pDevice->abstol) { pDevice->converged = FALSE; } if (++timesConverged >= 5) { pDevice->converged = TRUE; } } /* Check if any of the carrier concentrations are negative. */ if (pDevice->converged &&(!pDevice->poissonOnly)) { /* Clear garbage entry since carrier-free elements reference it */ solution[0] = 0.0; for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; for (index = 0; index <= 1; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; if (solution[pNode->nEqn] < 0.0) { pDevice->converged = FALSE; negConc = TRUE; if (tranAnalysis) { quitLoop = TRUE; } else { solution[pNode->nEqn] = 0.0; } } if (solution[pNode->pEqn] < 0.0) { pDevice->converged = FALSE; negConc = TRUE; if (tranAnalysis) { quitLoop = TRUE; } else { solution[pNode->pEqn] = 0.0; } } } } } /* Set to a consistent state if negative conc was encountered. */ if (!pDevice->converged) { ONE_rhsLoad(pDevice, tranAnalysis, info); pDevice->rhsNorm = maxNorm(rhs, size); } } checkTime += SPfrontEnd->IFseconds() - startTime; } totalTime += SPfrontEnd->IFseconds() - totalStartTime; if (tranAnalysis) { pDevice->pStats->loadTime[STAT_TRAN] += loadTime; pDevice->pStats->factorTime[STAT_TRAN] += factorTime; pDevice->pStats->solveTime[STAT_TRAN] += solveTime; pDevice->pStats->updateTime[STAT_TRAN] += updateTime; pDevice->pStats->checkTime[STAT_TRAN] += checkTime; pDevice->pStats->numIters[STAT_TRAN] += pDevice->iterationNumber; } else if (pDevice->poissonOnly) { pDevice->pStats->loadTime[STAT_SETUP] += loadTime; pDevice->pStats->factorTime[STAT_SETUP] += factorTime; pDevice->pStats->solveTime[STAT_SETUP] += solveTime; pDevice->pStats->updateTime[STAT_SETUP] += updateTime; pDevice->pStats->checkTime[STAT_SETUP] += checkTime; pDevice->pStats->numIters[STAT_SETUP] += pDevice->iterationNumber; } else { pDevice->pStats->loadTime[STAT_DC] += loadTime; pDevice->pStats->factorTime[STAT_DC] += factorTime; pDevice->pStats->solveTime[STAT_DC] += solveTime; pDevice->pStats->updateTime[STAT_DC] += updateTime; pDevice->pStats->checkTime[STAT_DC] += checkTime; pDevice->pStats->numIters[STAT_DC] += pDevice->iterationNumber; } if (debug) { if (!tranAnalysis) { pDevice->rhsNorm = maxNorm(rhs, size); fprintf(stdout, "%7d %11.4e%s\n", pDevice->iterationNumber, pDevice->rhsNorm, negConc ? " negative conc in solution" : ""); } if (pDevice->converged) { if (!pDevice->poissonOnly) { rhs[0] = 0.0; poissNorm = contNorm = 0.0; for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; for (index = 0; index <= 1; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; poissNorm = MAX(poissNorm, ABS(rhs[pNode->psiEqn])); contNorm = MAX(contNorm, ABS(rhs[pNode->nEqn])); contNorm = MAX(contNorm, ABS(rhs[pNode->pEqn])); } } } fprintf(stdout, "Residual: %11.4e C/um^2 poisson, %11.4e A/um^2 continuity\n", poissNorm * EpsNorm * ENorm * 1e-8, contNorm * JNorm * 1e-8); } else { fprintf(stdout, "Residual: %11.4e C/um^2 poisson\n", pDevice->rhsNorm * EpsNorm * ENorm * 1e-8); } } } } /* * A function that checks convergence based on the convergence of the quasi * Fermi levels. In theory, this should work better than the one currently * being used since we are always looking at potentials: (psi, phin, phip). */ BOOLEAN ONEpsiDeltaConverged(ONEdevice *pDevice, int *pNegConc) { int index, nIndex, eIndex; ONEnode *pNode; ONEelem *pElem; double xOld, xNew, xDelta, tol; double psi, newPsi, nConc, pConc, newN, newP; double phiN, phiP, newPhiN, newPhiP; BOOLEAN converged = TRUE; /* Equilibrium solution. */ if (pDevice->poissonOnly) { for (index = 1; index <= pDevice->numEqns; index++) { xOld = pDevice->dcSolution[index]; xDelta = pDevice->dcDeltaSolution[index]; xNew = xOld + xDelta; tol = pDevice->abstol + pDevice->reltol * MAX(ABS(xOld), ABS(xNew)); if (ABS(xDelta) > tol) { converged = FALSE; goto done; } } return (converged); } /* Bias solution. Check convergence on psi, phin, phip. */ for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; for (nIndex = 0; nIndex <= 1; nIndex++) { if (pElem->evalNodes[nIndex]) { pNode = pElem->pNodes[nIndex]; if (pNode->nodeType != CONTACT) { /* check convergence on psi */ xOld = pDevice->dcSolution[pNode->psiEqn]; xDelta = pDevice->dcDeltaSolution[pNode->psiEqn]; xNew = xOld + xDelta; tol = pDevice->abstol + pDevice->reltol * MAX(ABS(xOld), ABS(xNew)); if (ABS(xDelta) > tol) { converged = FALSE; goto done; } } /* check convergence on phin and phip */ if (pElem->elemType == SEMICON && pNode->nodeType != CONTACT) { psi = pDevice->dcSolution[pNode->psiEqn]; nConc = pDevice->dcSolution[pNode->nEqn]; pConc = pDevice->dcSolution[pNode->pEqn]; newPsi = psi + pDevice->dcDeltaSolution[pNode->psiEqn]; newN = nConc + pDevice->dcDeltaSolution[pNode->nEqn]; newP = pConc + pDevice->dcDeltaSolution[pNode->pEqn]; if (newN <= 0.0 || newP <= 0.0) { *pNegConc = TRUE; converged = FALSE; goto done; } phiN = psi - log(nConc / pNode->nie); phiP = psi + log(pConc / pNode->nie); newPhiN = newPsi - log(newN / pNode->nie); newPhiP = newPsi + log(newP / pNode->nie); tol = pDevice->abstol + pDevice->reltol * MAX(ABS(phiN), ABS(newPhiN)); if (ABS(newPhiN - phiN) > tol) { converged = FALSE; goto done; } tol = pDevice->abstol + pDevice->reltol * MAX(ABS(phiP), ABS(newPhiP)); if (ABS(newPhiP - phiP) > tol) { converged = FALSE; goto done; } } } } } done: return (converged); } /* * See if the update to the solution is small enough. Returns TRUE if it is. */ BOOLEAN ONEdeltaConverged(ONEdevice *pDevice) { int index; BOOLEAN converged = TRUE; double *solution = pDevice->dcSolution; double *delta = pDevice->dcDeltaSolution; double xOld, xNew, tol; for (index = 1; index <= pDevice->numEqns; index++) { xOld = solution[index]; xNew = xOld + delta[index]; tol = pDevice->abstol + pDevice->reltol * MAX(ABS(xOld), ABS(xNew)); if (ABS(xOld - xNew) > tol) { converged = FALSE; break; } } return (converged); } /* * See if the update to the solution is small enough and the solution is * physically reasonable. Returns TRUE if it is. */ BOOLEAN ONEdeviceConverged(ONEdevice *pDevice) { int index, eIndex; BOOLEAN converged = TRUE; double *solution = pDevice->dcSolution; ONEnode *pNode; ONEelem *pElem; double startTime; /* * If the update is sufficently small, and the carrier concentrations are * all positive, then return TRUE, else return FALSE. */ /* CHECK CONVERGENCE */ startTime = SPfrontEnd->IFseconds(); if ((converged = ONEdeltaConverged(pDevice)) == TRUE) { for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; for (index = 0; index <= 1; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; if (pNode->nEqn != 0 && solution[pNode->nEqn] < 0.0) { converged = FALSE; solution[pNode->nEqn] = pNode->nConc = 0.0; } if (pNode->pEqn != 0 && solution[pNode->pEqn] < 0.0) { converged = FALSE; solution[pNode->pEqn] = pNode->pConc = 0.0; } } } } } pDevice->pStats->checkTime[STAT_TRAN] += SPfrontEnd->IFseconds() - startTime; return (converged); } /* * Load and factor the Jacobian so that it is consistent with the current * solution. */ void ONEresetJacobian(ONEdevice *pDevice) { int error; ONE_jacLoad(pDevice); error = spFactor(pDevice->matrix); if (foundError(error)) { exit(-1); } } /* * Compute the device state assuming charge neutrality exists everywhere in * the device. In insulators, where there is no charge, assign the potential * at half the insulator band gap (refPsi). */ void ONEstoreNeutralGuess(ONEdevice *pDevice) { int nIndex, eIndex; ONEelem *pElem; ONEnode *pNode; double nie, conc, absConc, refPsi, psi, ni, pi, sign; for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; refPsi = pElem->matlInfo->refPsi; if (pElem->elemType == INSULATOR) { for (nIndex = 0; nIndex <= 1; nIndex++) { if (pElem->evalNodes[nIndex]) { pNode = pElem->pNodes[nIndex]; if (pNode->nodeType == CONTACT) { /* * A metal contact to insulating domain, so use work function * difference as the value of psi. */ pNode->psi = RefPsi - pNode->eaff; } else { pNode->psi = refPsi; } } } } if (pElem->elemType == SEMICON) { for (nIndex = 0; nIndex <= 1; nIndex++) { if (pElem->evalNodes[nIndex]) { pNode = pElem->pNodes[nIndex]; nie = pNode->nie; conc = pNode->netConc / nie; psi = 0.0; ni = nie; pi = nie; sign = SGN(conc); absConc = ABS(conc); if (conc != 0.0) { psi = sign * log(0.5 * absConc + sqrt(1.0 + 0.25 * absConc * absConc)); ni = nie * exp(psi); pi = nie * exp(-psi); if (FreezeOut) { /* Use Newton's Method to solve for psi. */ int ctr, maxiter = 10; double rhs, deriv, fNa, fNd, fdNa, fdNd; for (ctr = 0; ctr < maxiter; ctr++) { pNode->nConc = ni; pNode->pConc = pi; ONEQfreezeOut(pNode, &fNd, &fNa, &fdNd, &fdNa); rhs = pi - ni + pNode->nd * fNd - pNode->na * fNa; deriv = pi + ni - pNode->nd * fdNd + pNode->na * fdNa; psi += rhs / deriv; ni = nie * exp(psi); pi = nie * exp(-psi); } } } pNode->psi = refPsi + psi; pNode->psi0 = pNode->psi; pNode->vbe = refPsi; pNode->nConc = ni; pNode->pConc = pi; /* Now store the initial guess in the dc solution vector. */ pDevice->dcSolution[pNode->poiEqn] = pNode->psi; } } } } } /* * Compute the device state at thermal equilibrium. This state is equal to * the solution of just Poisson's equation. The charge-neutral solution is * taken as an initial guess. */ void ONEequilSolve(ONEdevice *pDevice) { BOOLEAN newSolver = FALSE; int error; int nIndex, eIndex; ONEelem *pElem; ONEnode *pNode; double startTime, setupTime, miscTime; setupTime = miscTime = 0.0; /* SETUP */ startTime = SPfrontEnd->IFseconds(); switch (pDevice->solverType) { case SLV_SMSIG: case SLV_BIAS: /* free up memory allocated for the bias solution */ FREE(pDevice->dcSolution); FREE(pDevice->dcDeltaSolution); FREE(pDevice->copiedSolution); FREE(pDevice->rhs); FREE(pDevice->rhsImag); spDestroy(pDevice->matrix); /* FALLTHRU */ case SLV_NONE: pDevice->poissonOnly = TRUE; pDevice->numEqns = pDevice->dimEquil - 1; XCALLOC(pDevice->dcSolution, double, pDevice->dimEquil); XCALLOC(pDevice->dcDeltaSolution, double, pDevice->dimEquil); XCALLOC(pDevice->copiedSolution, double, pDevice->dimEquil); XCALLOC(pDevice->rhs, double, pDevice->dimEquil); pDevice->matrix = spCreate(pDevice->numEqns, 0, &error); if (error == spNO_MEMORY) { printf("ONEequilSolve: Out of Memory\n"); exit(-1); } newSolver = TRUE; spSetReal(pDevice->matrix); ONEQjacBuild(pDevice); pDevice->numOrigEquil = spElementCount(pDevice->matrix); pDevice->numFillEquil = 0; /* FALLTHRU */ case SLV_EQUIL: pDevice->solverType = SLV_EQUIL; break; default: fprintf(stderr, "Panic: Unknown solver type in equil solution.\n"); exit(-1); break; } ONEstoreNeutralGuess(pDevice); setupTime += SPfrontEnd->IFseconds() - startTime; /* SOLVE */ ONEdcSolve(pDevice, MaxIterations, newSolver, FALSE, NULL); /* MISCELLANEOUS */ startTime = SPfrontEnd->IFseconds(); if (newSolver) { pDevice->numFillEquil = spFillinCount(pDevice->matrix); } if (pDevice->converged) { ONEQcommonTerms(pDevice); /* Save equilibrium potential. */ for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; for (nIndex = 0; nIndex <= 1; nIndex++) { if (pElem->evalNodes[nIndex]) { pNode = pElem->pNodes[nIndex]; pNode->psi0 = pNode->psi; } } } } else { printf("ONEequilSolve: No Convergence\n"); } miscTime += SPfrontEnd->IFseconds() - startTime; pDevice->pStats->setupTime[STAT_SETUP] += setupTime; pDevice->pStats->miscTime[STAT_SETUP] += miscTime; } /* * Compute the device state under an applied bias. The equilibrium solution * is taken as an initial guess the first time this is called. */ void ONEbiasSolve(ONEdevice *pDevice, int iterationLimit, BOOLEAN tranAnalysis, ONEtranInfo *info) { BOOLEAN newSolver = FALSE; int error; int index, eIndex; double *solution; ONEelem *pElem; ONEnode *pNode; double startTime, setupTime, miscTime; setupTime = miscTime = 0.0; /* SETUP */ startTime = SPfrontEnd->IFseconds(); switch (pDevice->solverType) { case SLV_EQUIL: /* Free up the vectors allocated in the equilibrium solution. */ FREE(pDevice->dcSolution); FREE(pDevice->dcDeltaSolution); FREE(pDevice->copiedSolution); FREE(pDevice->rhs); spDestroy(pDevice->matrix); /* FALLTHRU */ case SLV_NONE: pDevice->poissonOnly = FALSE; pDevice->numEqns = pDevice->dimBias - 1; XCALLOC(pDevice->dcSolution, double, pDevice->dimBias); XCALLOC(pDevice->dcDeltaSolution, double, pDevice->dimBias); XCALLOC(pDevice->copiedSolution, double, pDevice->dimBias); XCALLOC(pDevice->rhs, double, pDevice->dimBias); XCALLOC(pDevice->rhsImag, double, pDevice->dimBias); pDevice->matrix = spCreate(pDevice->numEqns, 1, &error); if (error == spNO_MEMORY) { exit(-1); } newSolver = TRUE; ONE_jacBuild(pDevice); pDevice->numOrigBias = spElementCount(pDevice->matrix); pDevice->numFillBias = 0; ONEstoreInitialGuess(pDevice); /* FALLTHRU */ case SLV_SMSIG: spSetReal(pDevice->matrix); /* FALLTHRU */ case SLV_BIAS: pDevice->solverType = SLV_BIAS; break; default: fprintf(stderr, "Panic: Unknown solver type in bias solution.\n"); exit(-1); break; } setupTime += SPfrontEnd->IFseconds() - startTime; /* SOLVE */ ONEdcSolve(pDevice, iterationLimit, newSolver, tranAnalysis, info); /* MISCELLANEOUS */ startTime = SPfrontEnd->IFseconds(); if (newSolver) { pDevice->numFillBias = spFillinCount(pDevice->matrix); } solution = pDevice->dcSolution; if ((!pDevice->converged) && iterationLimit > 1) { } else if (pDevice->converged) { /* Update the nodal quantities. */ for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; for (index = 0; index <= 1; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; if (pNode->psiEqn != 0) { pNode->psi = solution[pNode->psiEqn]; } if (pNode->nEqn != 0) { pNode->nConc = solution[pNode->nEqn]; } if (pNode->pEqn != 0) { pNode->pConc = solution[pNode->pEqn]; } } } } /* Update the current terms. */ ONE_commonTerms(pDevice, FALSE, tranAnalysis, info); } else if (iterationLimit <= 1) { for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; for (index = 0; index <= 1; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; if (pNode->nodeType != CONTACT) { pNode->psi = solution[pNode->psiEqn]; pDevice->devState0 [pNode->nodePsi] = pNode->psi; if (pElem->elemType == SEMICON) { pNode->nConc = solution[pNode->nEqn]; pNode->pConc = solution[pNode->pEqn]; pDevice->devState0 [pNode->nodeN] = pNode->nConc; pDevice->devState0 [pNode->nodeP] = pNode->pConc; } } } } } } miscTime += SPfrontEnd->IFseconds() - startTime; if (tranAnalysis) { pDevice->pStats->setupTime[STAT_TRAN] += setupTime; pDevice->pStats->miscTime[STAT_TRAN] += miscTime; } else { pDevice->pStats->setupTime[STAT_DC] += setupTime; pDevice->pStats->miscTime[STAT_DC] += miscTime; } } /* Copy the device's equilibrium state into the solution vector. */ void ONEstoreEquilibGuess(ONEdevice *pDevice) { int nIndex, eIndex; double *solution = pDevice->dcSolution; double refPsi; ONEelem *pElem; ONEnode *pNode; for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; refPsi = pElem->matlInfo->refPsi; for (nIndex = 0; nIndex <= 1; nIndex++) { if (pElem->evalNodes[nIndex]) { pNode = pElem->pNodes[nIndex]; if (pNode->nodeType != CONTACT) { solution[pNode->psiEqn] = pNode->psi0; if (pElem->elemType == SEMICON) { solution[pNode->nEqn] = pNode->nie * exp(pNode->psi0 - refPsi); solution[pNode->pEqn] = pNode->nie * exp(-pNode->psi0 + refPsi); } } } } } } /* Copy the device's internal state into the solution vector. */ void ONEstoreInitialGuess(ONEdevice *pDevice) { int nIndex, eIndex; double *solution = pDevice->dcSolution; ONEelem *pElem; ONEnode *pNode; for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; for (nIndex = 0; nIndex <= 1; nIndex++) { if (pElem->evalNodes[nIndex]) { pNode = pElem->pNodes[nIndex]; if (pNode->nodeType != CONTACT) { solution[pNode->psiEqn] = pNode->psi; if (pElem->elemType == SEMICON) { solution[pNode->nEqn] = pNode->nConc; solution[pNode->pEqn] = pNode->pConc; } } } } } } int ONEnewDelta(ONEdevice *pDevice, BOOLEAN tranAnalysis, ONEtranInfo *info) { int index, iterNum; double newNorm, fib, lambda, fibn, fibp; BOOLEAN acceptable = FALSE, error = FALSE; iterNum = 0; lambda = 1.0; fibn = 1.0; fibp = 1.0; /* * Copy the contents of dcSolution into copiedSolution and modify * dcSolution by adding the deltaSolution. */ for (index = 1; index <= pDevice->numEqns; index++) { pDevice->copiedSolution[index] = pDevice->dcSolution[index]; pDevice->dcSolution[index] += pDevice->dcDeltaSolution[index]; } if (pDevice->poissonOnly) { ONEQrhsLoad(pDevice); } else { ONE_rhsLoad(pDevice, tranAnalysis, info); } newNorm = maxNorm(pDevice->rhs, pDevice->numEqns); if (pDevice->rhsNorm <= pDevice->abstol) { lambda = 0.0; newNorm = pDevice->rhsNorm; } else if (newNorm < pDevice->rhsNorm) { acceptable = TRUE; } else { /* chop the step size so that deltax is acceptable */ if (ONEdcDebug) { fprintf(stdout, " %11.4e %11.4e\n", newNorm, lambda); } while (!acceptable) { iterNum++; if (iterNum > NORM_RED_MAXITERS) { error = TRUE; lambda = 0.0; /* Don't break out until after we've reset the device. */ } fib = fibp; fibp = fibn; fibn += fib; lambda *= (fibp / fibn); for (index = 1; index <= pDevice->numEqns; index++) { pDevice->dcSolution[index] = pDevice->copiedSolution[index] + lambda * pDevice->dcDeltaSolution[index]; } if (pDevice->poissonOnly) { ONEQrhsLoad(pDevice); } else { ONE_rhsLoad(pDevice, tranAnalysis, info); } newNorm = maxNorm(pDevice->rhs, pDevice->numEqns); if (error) { break; } if (newNorm <= pDevice->rhsNorm) { acceptable = TRUE; } if (ONEdcDebug) { fprintf(stdout, " %11.4e %11.4e\n", newNorm, lambda); } } } /* Restore the previous dcSolution and store the new deltaSolution. */ pDevice->rhsNorm = newNorm; for (index = 1; index <= pDevice->numEqns; index++) { pDevice->dcSolution[index] = pDevice->copiedSolution[index]; pDevice->dcDeltaSolution[index] *= lambda; } return(error); } /* Predict the values of the internal variables at the next timepoint. */ /* Needed for Predictor-Corrector LTE estimation */ void ONEpredict(ONEdevice *pDevice, ONEtranInfo *info) { int nIndex, eIndex; ONEnode *pNode; ONEelem *pElem; double startTime, miscTime = 0.0; /* TRANSIENT MISC */ startTime = SPfrontEnd->IFseconds(); for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; for (nIndex = 0; nIndex <= 1; nIndex++) { if (pElem->evalNodes[nIndex]) { pNode = pElem->pNodes[nIndex]; pNode->psi = pDevice->devState1 [pNode->nodePsi]; if (pElem->elemType == SEMICON && pNode->nodeType != CONTACT) { pNode->nPred = predict(pDevice->devStates, info, pNode->nodeN); pNode->pPred = predict(pDevice->devStates, info, pNode->nodeP); pNode->nConc = pNode->nPred; pNode->pConc = pNode->pPred; } } } } miscTime += SPfrontEnd->IFseconds() - startTime; pDevice->pStats->miscTime[STAT_TRAN] += miscTime; } /* Estimate the device's overall truncation error. */ double ONEtrunc(ONEdevice *pDevice, ONEtranInfo *info, double delta) { int nIndex, eIndex; ONEelem *pElem; ONEnode *pNode; double tolN, tolP, lte, relError, temp; double lteCoeff = info->lteCoeff; double mult = 10.0; double reltol; double startTime, lteTime = 0.0; /* TRANSIENT LTE */ startTime = SPfrontEnd->IFseconds(); relError = 0.0; reltol = pDevice->reltol * mult; /* Need to get the predictor for the current order. */ /* The scheme currently used is very dumb. Need to fix later. */ /* XXX Why is the scheme dumb? Never understood this. */ computePredCoeff(info->method, info->order, info->predCoeff, info->delta); for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; for (nIndex = 0; nIndex <= 1; nIndex++) { if (pElem->evalNodes[nIndex]) { pNode = pElem->pNodes[nIndex]; if (pElem->elemType == SEMICON && pNode->nodeType != CONTACT) { tolN = pDevice->abstol + reltol * ABS(pNode->nConc); tolP = pDevice->abstol + reltol * ABS(pNode->pConc); pNode->nPred = predict(pDevice->devStates, info, pNode->nodeN); pNode->pPred = predict(pDevice->devStates, info, pNode->nodeP); lte = lteCoeff * (pNode->nConc - pNode->nPred); temp = lte / tolN; relError += temp * temp; lte = lteCoeff * (pNode->pConc - pNode->pPred); temp = lte / tolP; relError += temp * temp; } } } } /* Make sure error is non-zero. */ relError = MAX(pDevice->abstol, relError); /* The total relative error has been calculated norm-2 squared. */ relError = sqrt(relError / pDevice->numEqns); /* Use the order of the integration method to compute new delta. */ temp = delta / pow(relError, 1.0 / (info->order + 1)); lteTime += SPfrontEnd->IFseconds() - startTime; pDevice->pStats->lteTime += lteTime; return (temp); } /* Save info from state table into the internal state. */ void ONEsaveState(ONEdevice *pDevice) { int nIndex, eIndex; ONEnode *pNode; ONEelem *pElem; for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; for (nIndex = 0; nIndex <= 1; nIndex++) { if (pElem->evalNodes[nIndex]) { pNode = pElem->pNodes[nIndex]; pNode->psi = pDevice->devState1 [pNode->nodePsi]; if (pElem->elemType == SEMICON && pNode->nodeType != CONTACT) { pNode->nConc = pDevice->devState1 [pNode->nodeN]; pNode->pConc = pDevice->devState1 [pNode->nodeP]; } } } } } /* Function to compute Nu norm of the rhs vector. */ /* Nu-norm calculation based upon work done at Stanford. */ double ONEnuNorm(ONEdevice *pDevice) { /* The LU Decomposed matrix is available. Use it to calculate x. */ spSolve(pDevice->matrix, pDevice->rhs, pDevice->rhsImag, NULL, NULL); /* Compute L2-norm of the solution vector (stored in rhsImag) */ return (l2Norm(pDevice->rhsImag, pDevice->numEqns)); } /* * Check for numerical errors in the Jacobian. Useful debugging aid when new * models are being incorporated. */ void ONEjacCheck(ONEdevice *pDevice, BOOLEAN tranAnalysis, ONEtranInfo *info) { int index, rIndex; double del, diff, tol, *dptr; if (ONEjacDebug) { ONE_sysLoad(pDevice, tranAnalysis, info); /* * spPrint( pDevice->matrix, 0, 1, 1 ); */ pDevice->rhsNorm = maxNorm(pDevice->rhs, pDevice->numEqns); for (index = 1; index <= pDevice->numEqns; index++) { if (1e3 * ABS(pDevice->rhs[index]) > pDevice->rhsNorm) { fprintf(stderr, "eqn %d: res %11.4e, norm %11.4e\n", index, pDevice->rhs[index], pDevice->rhsNorm); } } for (index = 1; index <= pDevice->numEqns; index++) { pDevice->rhsImag[index] = pDevice->rhs[index]; } for (index = 1; index <= pDevice->numEqns; index++) { pDevice->copiedSolution[index] = pDevice->dcSolution[index]; del = 1e-4 * pDevice->abstol + 1e-6 * ABS(pDevice->dcSolution[index]); pDevice->dcSolution[index] += del; ONE_rhsLoad(pDevice, tranAnalysis, info); pDevice->dcSolution[index] = pDevice->copiedSolution[index]; for (rIndex = 1; rIndex <= pDevice->numEqns; rIndex++) { diff = (pDevice->rhsImag[rIndex] - pDevice->rhs[rIndex]) / del; dptr = spFindElement(pDevice->matrix, rIndex, index); /* * if ( dptr ISNOT NULL ) { fprintf( stderr, "[%d][%d]: FD = * %11.4e, AJ = %11.4e\n", rIndex, index, diff, *dptr ); } else { * fprintf( stderr, "[%d][%d]: FD = %11.4e, AJ = %11.4e\n", rIndex, * index, diff, 0.0 ); } */ if (dptr != NULL) { tol = (1e-4 * pDevice->abstol) + (1e-2 * MAX(ABS(diff), ABS(*dptr))); if ((diff != 0.0) && (ABS(diff - *dptr) > tol)) { fprintf(stderr, "Mismatch[%d][%d]: FD = %11.4e, AJ = %11.4e\n\t FD-AJ = %11.4e vs. %11.4e\n", rIndex, index, diff, *dptr, ABS(diff - *dptr), tol); } } else { if (diff != 0.0) { fprintf(stderr, "Missing [%d][%d]: FD = %11.4e, AJ = 0.0\n", rIndex, index, diff); } } } } } } tmpk8ny_4pz/src/ciderlib/oned/onecont.c0000644000175000017500000004560213546075722020271 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/onemesh.h" #include "ngspice/onedev.h" #include "ngspice/spmatrix.h" #include "ngspice/macros.h" #include "onedext.h" #include "oneddefs.h" #include "ngspice/cidersupt.h" #include "../../maths/misc/bernoull.h" /* functions to setup and solve the continuity equations */ /* Both continuity equations are solved */ void ONE_jacBuild(ONEdevice *pDevice) { SMPmatrix *matrix = pDevice->matrix; ONEelem *pElem; ONEnode *pNode; int index, eIndex; int psiEqn, nEqn, pEqn; /* scratch for deref'd eqn numbers */ int psiEqnL=0, nEqnL=0, pEqnL=0; int psiEqnR=0, nEqnR=0, pEqnR=0; for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; /* first the self terms */ for (index = 0; index <= 1; index++) { pNode = pElem->pNodes[index]; /* get poisson pointer */ psiEqn = pNode->psiEqn; pNode->fPsiPsi = spGetElement(matrix, psiEqn, psiEqn); if (pElem->elemType == SEMICON) { /* get continuity-coupling terms */ nEqn = pNode->nEqn; pEqn = pNode->pEqn; /* pointers for additional terms */ pNode->fPsiN = spGetElement(matrix, psiEqn, nEqn); pNode->fPsiP = spGetElement(matrix, psiEqn, pEqn); pNode->fNPsi = spGetElement(matrix, nEqn, psiEqn); pNode->fNN = spGetElement(matrix, nEqn, nEqn); pNode->fNP = spGetElement(matrix, nEqn, pEqn); pNode->fPPsi = spGetElement(matrix, pEqn, psiEqn); pNode->fPP = spGetElement(matrix, pEqn, pEqn); pNode->fPN = spGetElement(matrix, pEqn, nEqn); } else { nEqn = 0; pEqn = 0; } /* save indices */ if (index == 0) { /* left node */ psiEqnL = psiEqn; nEqnL = nEqn; pEqnL = pEqn; } else { psiEqnR = psiEqn; nEqnR = nEqn; pEqnR = pEqn; } } /* now terms to couple to adjacent nodes */ pNode = pElem->pLeftNode; pNode->fPsiPsiiP1 = spGetElement(matrix, psiEqnL, psiEqnR); if (pElem->elemType == SEMICON) { /* pointers for additional terms */ pNode->fNPsiiP1 = spGetElement(matrix, nEqnL, psiEqnR); pNode->fNNiP1 = spGetElement(matrix, nEqnL, nEqnR); pNode->fPPsiiP1 = spGetElement(matrix, pEqnL, psiEqnR); pNode->fPPiP1 = spGetElement(matrix, pEqnL, pEqnR); if (AvalancheGen) { pNode->fNPiP1 = spGetElement(matrix, nEqnL, pEqnR); pNode->fPNiP1 = spGetElement(matrix, pEqnL, nEqnR); } } pNode = pElem->pRightNode; pNode->fPsiPsiiM1 = spGetElement(matrix, psiEqnR, psiEqnL); if (pElem->elemType == SEMICON) { /* pointers for additional terms */ pNode->fNPsiiM1 = spGetElement(matrix, nEqnR, psiEqnL); pNode->fNNiM1 = spGetElement(matrix, nEqnR, nEqnL); pNode->fPPsiiM1 = spGetElement(matrix, pEqnR, psiEqnL); pNode->fPPiM1 = spGetElement(matrix, pEqnR, pEqnL); if (AvalancheGen) { pNode->fNPiM1 = spGetElement(matrix, nEqnR, pEqnL); pNode->fPNiM1 = spGetElement(matrix, pEqnR, nEqnL); } } } } void ONE_sysLoad(ONEdevice *pDevice, BOOLEAN tranAnalysis, ONEtranInfo *info) { ONEelem *pElem; ONEnode *pNode; ONEedge *pEdge; int index, eIndex; double *pRhs = pDevice->rhs; double dx, rDx, dPsi; double generation; double perTime = 0.0; double fNd, fNa, fdNd, fdNa; double netConc, dNd, dNa, psi, nConc, pConc; /* first compute the currents and their derivatives */ ONE_commonTerms(pDevice, FALSE, tranAnalysis, info); /* find reciprocal timestep */ if (tranAnalysis) { perTime = info->intCoeff[0]; } /* zero the rhs vector */ for (index = 1; index <= pDevice->numEqns; index++) { pRhs[index] = 0.0; } /* zero the matrix */ spClear(pDevice->matrix); for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; dx = 0.5 * pElem->dx; rDx = pElem->epsRel * pElem->rDx; /* load for all i */ for (index = 0; index <= 1; index++) { pNode = pElem->pNodes[index]; if (pNode->nodeType != CONTACT) { *(pNode->fPsiPsi) += rDx; pRhs[pNode->psiEqn] += pNode->qf; if (pElem->elemType == SEMICON) { pEdge = pElem->pEdge; netConc = pNode->netConc; dNd = 0.0; dNa = 0.0; psi = pDevice->devState0 [pNode->nodePsi]; nConc = pDevice->devState0 [pNode->nodeN]; pConc = pDevice->devState0 [pNode->nodeP]; if (FreezeOut) { ONE_freezeOut(pNode, nConc, pConc, &fNd, &fNa, &fdNd, &fdNa); netConc = pNode->nd * fNd - pNode->na * fNa; dNd = pNode->nd * fdNd; dNa = pNode->na * fdNa; } *(pNode->fPsiN) += dx * (1.0 - dNd); *(pNode->fPsiP) -= dx * (1.0 - dNa); *(pNode->fNPsi) -= pEdge->dJnDpsiP1; *(pNode->fPPsi) -= pEdge->dJpDpsiP1; pRhs[pNode->psiEqn] += dx * (netConc + pConc - nConc); /* Handle generation terms */ *(pNode->fNN) -= dx * pNode->dUdN; *(pNode->fNP) -= dx * pNode->dUdP; *(pNode->fPP) += dx * pNode->dUdP; *(pNode->fPN) += dx * pNode->dUdN; pRhs[pNode->nEqn] -= -dx * pNode->uNet; pRhs[pNode->pEqn] -= dx * pNode->uNet; /* Handle dXdT continuity terms */ if (tranAnalysis) { *(pNode->fNN) -= dx * perTime; *(pNode->fPP) += dx * perTime; pRhs[pNode->nEqn] += dx * pNode->dNdT; pRhs[pNode->pEqn] -= dx * pNode->dPdT; } /* Take care of base contact if necessary */ /* eg holds the base edge mu/dx */ if (pNode->baseType == N_TYPE) { pRhs[pNode->nEqn] += 0.5 * pNode->eg * nConc * (pNode->vbe - psi + log(nConc / pNode->nie)); *(pNode->fNPsi) += 0.5 * pNode->eg * nConc; *(pNode->fNN) -= 0.5 * pNode->eg * (pNode->vbe - psi + log(nConc / pNode->nie) + 1.0); } else if (pNode->baseType == P_TYPE) { pRhs[pNode->pEqn] += 0.5 * pNode->eg * pConc * (pNode->vbe - psi - log(pConc / pNode->nie)); *(pNode->fPPsi) += 0.5 * pNode->eg * pConc; *(pNode->fPP) -= 0.5 * pNode->eg * (pNode->vbe - psi - log(pConc / pNode->nie) - 1.0); } } } } pEdge = pElem->pEdge; dPsi = pEdge->dPsi; pNode = pElem->pLeftNode; if (pNode->nodeType != CONTACT) { pRhs[pNode->psiEqn] += rDx * dPsi; *(pNode->fPsiPsiiP1) -= rDx; if (pElem->elemType == SEMICON) { pRhs[pNode->nEqn] -= pEdge->jn; pRhs[pNode->pEqn] -= pEdge->jp; *(pNode->fNN) += pEdge->dJnDn; *(pNode->fPP) += pEdge->dJpDp; *(pNode->fNPsiiP1) += pEdge->dJnDpsiP1; *(pNode->fNNiP1) += pEdge->dJnDnP1; *(pNode->fPPsiiP1) += pEdge->dJpDpsiP1; *(pNode->fPPiP1) += pEdge->dJpDpP1; } } pNode = pElem->pRightNode; if (pNode->nodeType != CONTACT) { pRhs[pNode->psiEqn] -= rDx * dPsi; *(pNode->fPsiPsiiM1) -= rDx; if (pElem->elemType == SEMICON) { pRhs[pNode->nEqn] += pEdge->jn; pRhs[pNode->pEqn] += pEdge->jp; *(pNode->fNN) -= pEdge->dJnDnP1; *(pNode->fPP) -= pEdge->dJpDpP1; *(pNode->fNPsiiM1) += pEdge->dJnDpsiP1; *(pNode->fNNiM1) -= pEdge->dJnDn; *(pNode->fPPsiiM1) += pEdge->dJpDpsiP1; *(pNode->fPPiM1) -= pEdge->dJpDp; } } } if (AvalancheGen) { /* add the generation terms */ for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; for (index = 0; index <= 1; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; if ((pNode->nodeType != CONTACT) && (pElem->elemType == SEMICON)) { generation = ONEavalanche(FALSE, pDevice, pNode); pRhs[pNode->nEqn] -= generation; pRhs[pNode->pEqn] += generation; } } } } } } void ONE_jacLoad(ONEdevice *pDevice) { /* used only for ac analysis */ ONEelem *pElem; ONEnode *pNode, *pNode1; ONEedge *pEdge; int index, eIndex; double dx, rDx, dPsi; double generation; double fNd, fNa, fdNd, fdNa; double dNd, dNa, psi, nConc, pConc; /* first compute the currents and their derivatives */ ONE_commonTerms(pDevice, FALSE, FALSE, NULL); /* zero the matrix */ spClear(pDevice->matrix); for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; dx = 0.5 * pElem->dx; rDx = pElem->epsRel * pElem->rDx; /* load for all i */ for (index = 0; index <= 1; index++) { pNode = pElem->pNodes[index]; if (pNode->nodeType != CONTACT) { *(pNode->fPsiPsi) += rDx; if (pElem->elemType == SEMICON) { pEdge = pElem->pEdge; dNd = 0.0; dNa = 0.0; psi = pDevice->devState0 [pNode->nodePsi]; nConc = pDevice->devState0 [pNode->nodeN]; pConc = pDevice->devState0 [pNode->nodeP]; if (FreezeOut) { ONE_freezeOut(pNode, nConc, pConc, &fNd, &fNa, &fdNd, &fdNa); dNd = pNode->nd * fdNd; dNa = pNode->na * fdNa; } *(pNode->fPsiN) += dx * (1.0 - dNd); *(pNode->fPsiP) -= dx * (1.0 - dNa); *(pNode->fNPsi) -= pEdge->dJnDpsiP1; *(pNode->fPPsi) -= pEdge->dJpDpsiP1; if (pNode->baseType == N_TYPE) { *(pNode->fNPsi) += 0.5 * nConc * pNode->eg; *(pNode->fNN) -= 0.5 * pNode->eg * (pNode->vbe - psi + log(nConc / pNode->nie) + 1.0); } if (pNode->baseType == P_TYPE) { *(pNode->fPPsi) += 0.5 * pConc * pNode->eg; *(pNode->fPP) -= 0.5 * pNode->eg * (pNode->vbe - psi - log(pConc / pNode->nie) - 1.0); } } } } pNode = pElem->pLeftNode; if (pNode->nodeType != CONTACT) { pEdge = pElem->pEdge; dPsi = pEdge->dPsi; if (pElem->elemType == SEMICON) { *(pNode->fNN) += pEdge->dJnDn - dx * pNode->dUdN; *(pNode->fNP) -= dx * pNode->dUdP; *(pNode->fPP) += pEdge->dJpDp + dx * pNode->dUdP; *(pNode->fPN) += dx * pNode->dUdN; } pNode1 = pElem->pRightNode; if (pNode1->nodeType != CONTACT) { *(pNode->fPsiPsiiP1) -= rDx; if (pElem->elemType == SEMICON) { *(pNode->fNPsiiP1) += pEdge->dJnDpsiP1; *(pNode->fNNiP1) += pEdge->dJnDnP1; *(pNode->fPPsiiP1) += pEdge->dJpDpsiP1; *(pNode->fPPiP1) += pEdge->dJpDpP1; } } } pNode = pElem->pRightNode; if (pNode->nodeType != CONTACT) { pEdge = pElem->pEdge; dPsi = pEdge->dPsi; if (pElem->elemType == SEMICON) { *(pNode->fNN) += -pEdge->dJnDnP1 - dx * pNode->dUdN; *(pNode->fNP) -= dx * pNode->dUdP; *(pNode->fPP) += -pEdge->dJpDpP1 + dx * pNode->dUdP; *(pNode->fPN) += dx * pNode->dUdN; } pNode1 = pElem->pLeftNode; if (pNode1->nodeType != CONTACT) { *(pNode->fPsiPsiiM1) -= rDx; if (pElem->elemType == SEMICON) { *(pNode->fNPsiiM1) += pEdge->dJnDpsiP1; *(pNode->fNNiM1) -= pEdge->dJnDn; *(pNode->fPPsiiM1) += pEdge->dJpDpsiP1; *(pNode->fPPiM1) -= pEdge->dJpDp; } } } } if (AvalancheGen) { /* add the generation terms */ for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; for (index = 0; index <= 1; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; if ((pNode->nodeType != CONTACT) && (pElem->elemType == SEMICON)) { generation = ONEavalanche(FALSE, pDevice, pNode); } } } } } } void ONE_rhsLoad(ONEdevice *pDevice, BOOLEAN tranAnalysis, ONEtranInfo *info) { ONEelem *pElem; ONEnode *pNode; ONEedge *pEdge; int index, eIndex; double *pRhs = pDevice->rhs; double dx, rDx, dPsi; double generation; double perTime; double fNd, fNa, fdNd, fdNa; double netConc, dNd, dNa, psi, nConc, pConc; /* first compute the currents and their derivatives */ ONE_commonTerms(pDevice, FALSE, tranAnalysis, info); /* find reciprocal timestep */ if (tranAnalysis) { perTime = info->intCoeff[0]; } /* zero the rhs vector */ for (index = 1; index <= pDevice->numEqns; index++) { pRhs[index] = 0.0; } for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; dx = 0.5 * pElem->dx; rDx = pElem->epsRel * pElem->rDx; /* load for all i */ for (index = 0; index <= 1; index++) { pNode = pElem->pNodes[index]; if (pNode->nodeType != CONTACT) { pRhs[pNode->psiEqn] += pNode->qf; if (pElem->elemType == SEMICON) { pEdge = pElem->pEdge; netConc = pNode->netConc; dNd = 0.0; dNa = 0.0; psi = pDevice->devState0 [pNode->nodePsi]; nConc = pDevice->devState0 [pNode->nodeN]; pConc = pDevice->devState0 [pNode->nodeP]; if (FreezeOut) { ONE_freezeOut(pNode, nConc, pConc, &fNd, &fNa, &fdNd, &fdNa); netConc = pNode->nd * fNd - pNode->na * fNa; dNd = pNode->nd * fdNd; dNa = pNode->na * fdNa; } pRhs[pNode->psiEqn] += dx * (netConc + pConc - nConc); /* Handle generation terms */ pRhs[pNode->nEqn] -= -dx * pNode->uNet; pRhs[pNode->pEqn] -= dx * pNode->uNet; /* Handle dXdT continuity terms */ if (tranAnalysis) { pRhs[pNode->nEqn] += dx * pNode->dNdT; pRhs[pNode->pEqn] -= dx * pNode->dPdT; } /* Take care of base contact if necessary */ /* eg holds the base edge mu/dx */ if (pNode->baseType == N_TYPE) { pRhs[pNode->nEqn] += 0.5 * pNode->eg * nConc * (pNode->vbe - psi + log(nConc / pNode->nie)); } else if (pNode->baseType == P_TYPE) { pRhs[pNode->pEqn] += 0.5 * pNode->eg * pConc * (pNode->vbe - psi - log(pConc / pNode->nie)); } } } } pEdge = pElem->pEdge; dPsi = pEdge->dPsi; pNode = pElem->pLeftNode; if (pNode->nodeType != CONTACT) { pRhs[pNode->psiEqn] += rDx * dPsi; if (pElem->elemType == SEMICON) { pRhs[pNode->nEqn] -= pEdge->jn; pRhs[pNode->pEqn] -= pEdge->jp; } } pNode = pElem->pRightNode; if (pNode->nodeType != CONTACT) { pRhs[pNode->psiEqn] -= rDx * dPsi; if (pElem->elemType == SEMICON) { pRhs[pNode->nEqn] += pEdge->jn; pRhs[pNode->pEqn] += pEdge->jp; } } } if (AvalancheGen) { /* add the generation terms */ for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; for (index = 0; index <= 1; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; if ((pNode->nodeType != CONTACT) && (pElem->elemType == SEMICON)) { generation = ONEavalanche(TRUE, pDevice, pNode); pRhs[pNode->nEqn] -= generation; pRhs[pNode->pEqn] += generation; } } } } } } void ONE_commonTerms(ONEdevice *pDevice, BOOLEAN currentOnly, BOOLEAN tranAnalysis, ONEtranInfo *info) { ONEelem *pElem; ONEedge *pEdge; ONEnode *pNode; int index, eIndex; double psi1, psi2, psi, nConc=0.0, pConc=0.0, nC, pC, nP1, pP1; double dPsiN, dPsiP; double bPsiN, dbPsiN, bMPsiN, dbMPsiN; double bPsiP, dbPsiP, bMPsiP, dbMPsiP; double mun, dMun, mup, dMup; double conc1, conc2; double cnAug, cpAug; /* evaluate all node (including recombination) and edge quantities */ for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; cnAug = pElem->matlInfo->cAug[ELEC]; cpAug = pElem->matlInfo->cAug[HOLE]; for (index = 0; index <= 1; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; if (pNode->nodeType != CONTACT) { psi = pDevice->dcSolution[pNode->psiEqn]; if (pElem->elemType == SEMICON) { nConc = pDevice->dcSolution[pNode->nEqn]; pConc = pDevice->dcSolution[pNode->pEqn]; if (Srh) { recomb(nConc, pConc, pNode->tn, pNode->tp, cnAug, cpAug, pNode->nie, &pNode->uNet, &pNode->dUdN, &pNode->dUdP); } else { pNode->uNet = 0.0; pNode->dUdN = 0.0; pNode->dUdP = 0.0; } if (pNode->baseType == P_TYPE && pConc <= 0.0) { pConc = pNode->na; } else if (pNode->baseType == N_TYPE && nConc <= 0.0) { nConc = pNode->nd; } } } else { /* a contact node */ psi = pNode->psi; if (pElem->elemType == SEMICON) { nConc = pNode->nConc; pConc = pNode->pConc; } } /* store info in the state tables */ pDevice->devState0 [pNode->nodePsi] = psi; if (pElem->elemType == SEMICON) { pDevice->devState0 [pNode->nodeN] = nConc; pDevice->devState0 [pNode->nodeP] = pConc; if (tranAnalysis && pNode->nodeType != CONTACT) { pNode->dNdT = integrate(pDevice->devStates, info, pNode->nodeN); pNode->dPdT = integrate(pDevice->devStates, info, pNode->nodeP); } } } } pEdge = pElem->pEdge; pNode = pElem->pLeftNode; if (pNode->nodeType != CONTACT) { psi1 = pDevice->dcSolution[pNode->psiEqn]; } else { psi1 = pNode->psi; } pNode = pElem->pRightNode; if (pNode->nodeType != CONTACT) { psi2 = pDevice->dcSolution[pNode->psiEqn]; } else { psi2 = pNode->psi; } pEdge->dPsi = psi2 - psi1; pDevice->devState0 [pEdge->edgeDpsi] = pEdge->dPsi; } /* calculate the current densities and mobility values */ for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; pEdge = pElem->pEdge; if (pElem->elemType == SEMICON) { dPsiN = pEdge->dPsi + pEdge->dCBand; dPsiP = pEdge->dPsi - pEdge->dVBand; bernoulli(dPsiN, &bPsiN, &dbPsiN, &bMPsiN, &dbMPsiN, !currentOnly); bernoulli(dPsiP, &bPsiP, &dbPsiP, &bMPsiP, &dbMPsiP, !currentOnly); nC = pDevice->devState0 [pElem->pLeftNode->nodeN]; nP1 = pDevice->devState0 [pElem->pRightNode->nodeN]; pC = pDevice->devState0 [pElem->pLeftNode->nodeP]; pP1 = pDevice->devState0 [pElem->pRightNode->nodeP]; conc1 = pElem->pLeftNode->totalConc; conc2 = pElem->pRightNode->totalConc; pEdge->jn = (bPsiN * nP1 - bMPsiN * nC); pEdge->jp = (bPsiP * pC - bMPsiP * pP1); mun = pEdge->mun; dMun = 0.0; mup = pEdge->mup; dMup = 0.0; MOBfieldDep(pElem->matlInfo, ELEC, dPsiN * pElem->rDx, &mun, &dMun); MOBfieldDep(pElem->matlInfo, HOLE, dPsiP * pElem->rDx, &mup, &dMup); mun *= pElem->rDx; dMun *= pElem->rDx * pElem->rDx; mup *= pElem->rDx; dMup *= pElem->rDx * pElem->rDx; /* * The base continuity equation makes use of mu/dx in eg. The base * length has already been calculated and converted to normalized, * reciprocal form during setup. The name should be changed, but that's * a big hassle. */ for (index = 0; index <= 1; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; if (pNode->baseType == N_TYPE) { pNode->eg = pEdge->mun * pDevice->baseLength; } else if (pNode->baseType == P_TYPE) { pNode->eg = pEdge->mup * pDevice->baseLength; } } } pEdge->jn *= mun; pEdge->jp *= mup; if (!currentOnly) { if (dMun == 0.0) { pEdge->dJnDpsiP1 = mun * (dbPsiN * nP1 - dbMPsiN * nC); } else { pEdge->dJnDpsiP1 = dMun * (bPsiN * nP1 - bMPsiN * nC) + mun * (dbPsiN * nP1 - dbMPsiN * nC); } pEdge->dJnDn = -mun * bMPsiN; pEdge->dJnDnP1 = mun * bPsiN; if (dMup == 0.0) { pEdge->dJpDpsiP1 = mup * (dbPsiP * pC - dbMPsiP * pP1); } else { pEdge->dJpDpsiP1 = dMup * (bPsiP * pC - bMPsiP * pP1) + mup * (dbPsiP * pC - dbMPsiP * pP1); } pEdge->dJpDp = mup * bPsiP; pEdge->dJpDpP1 = -mup * bMPsiP; } } if (tranAnalysis) { pEdge->jd = -integrate(pDevice->devStates, info, pEdge->edgeDpsi) * pElem->rDx; } } } tmpk8ny_4pz/src/ciderlib/oned/onesetup.c0000644000175000017500000001445213546075722020465 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ /********** One-Dimensional Numerical Device Setup Routines **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numconst.h" #include "ngspice/numenum.h" #include "ngspice/onemesh.h" #include "ngspice/onedev.h" #include "ngspice/carddefs.h" /* XXX Not really modular if we need this. */ /* #include "material.h" */ #include "onedext.h" #include "oneddefs.h" #include "ngspice/cidersupt.h" /* compute node parameters */ void ONEsetup(ONEdevice *pDevice) { double temp1, deltaEg, avgConc, totalConc, absNetConc; double ncv0, dBand, dNie, psiBand[2]; int index, eIndex; ONEnode *pNode; ONEelem *pElem; ONEedge *pEdge; ONEmaterial *info; for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; info = pElem->matlInfo; pElem->dx = pElem->pRightNode->x - pElem->pLeftNode->x; pElem->epsRel = info->eps; if (pElem->elemType == INSULATOR) { for (index = 0; index <= 1; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; if (pNode->nodeType == CONTACT) { pNode->eaff = PHI_METAL; pNode->eg = 0.0; } else { pNode->eaff = info->affin; pNode->eg = info->eg0; } } } } else if (pElem->elemType == SEMICON) { ncv0 = sqrt(info->nc0) * sqrt(info->nv0); for (index = 0; index <= 1; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; /* Fixed Interface Charge */ pNode->qf = 0.0; /* Narrowing of Energy Band-Gap */ if (BandGapNarrowing) { absNetConc = ABS(pNode->netConc); if (pNode->netConc > 0.0) { temp1 = log(absNetConc / info->nrefBGN[ELEC]); deltaEg = -info->dEgDn[ELEC] * (temp1 + sqrt(temp1 * temp1 + 0.5)); pNode->eg = info->eg0 + deltaEg; } else if (pNode->netConc < 0.0) { temp1 = log(absNetConc / info->nrefBGN[HOLE]); deltaEg = -info->dEgDn[HOLE] * (temp1 + sqrt(temp1 * temp1 + 0.5)); pNode->eg = info->eg0 + deltaEg; } else { pNode->eg = info->eg0; } } else { pNode->eg = info->eg0; } pNode->nie = ncv0 * exp(-0.5 * pNode->eg / Vt); pNode->eaff = info->affin; /* Save band structure parameter. */ psiBand[index] = -info->refPsi; /* Ionized-Impurity-Scattering Reduction of Carrier Lifetime */ if (ConcDepLifetime) { totalConc = pNode->totalConc; temp1 = 1.0 / (1.0 + totalConc / info->nrefSRH[ELEC]); pNode->tn = info->tau0[ELEC] * temp1; temp1 = 1.0 / (1.0 + totalConc / info->nrefSRH[HOLE]); pNode->tp = info->tau0[HOLE] * temp1; } else { pNode->tn = info->tau0[ELEC]; pNode->tp = info->tau0[HOLE]; } } } pEdge = pElem->pEdge; /* Variable Band Built-In Potential */ dBand = psiBand[1] - psiBand[0]; dNie = log(pElem->pNodes[1]->nie / pElem->pNodes[0]->nie); pEdge->dCBand = dBand + dNie; pEdge->dVBand = -dBand + dNie; /* Evaluate conc.-dep. mobility. */ avgConc = 0.5 * (pElem->pRightNode->totalConc + pElem->pLeftNode->totalConc); MOBconcDep(info, avgConc, &pEdge->mun, &pEdge->mup); } } } /* Transfer BC info from bdry to nodes and edges. */ static void ONEcopyBCinfo(ONEdevice *pDevice, ONEelem *pElem, BDRYcard *bdry, int index) { ONEnode *pNode; ONEelem *pNElem; int eIndex; double length; NG_IGNORE(pDevice); /* First add fixed charge. */ pNode = pElem->pNodes[index]; pNode->qf += bdry->BDRYqf; /* Now add surface recombination. */ /* Compute semiconductor length around this node. */ length = 0.0; for (eIndex = 0; eIndex <= 1; eIndex++) { pNElem = pNode->pElems[eIndex]; if ((pNElem != NULL) && (pElem->elemType == SEMICON)) { length += 0.5 * pElem->dx; } } if (bdry->BDRYsnGiven) { pNode->tn = pNode->tn / (1.0 + ((bdry->BDRYsn * TNorm) * pNode->tn) / length); } if (bdry->BDRYspGiven) { pNode->tp = pNode->tp / (1.0 + ((bdry->BDRYsp * TNorm) * pNode->tp) / length); } /* Finally, surface layer is irrelevant for 1d devices. */ } /* Compute boundary condition parameters. */ void ONEsetBCparams(ONEdevice *pDevice, BDRYcard *bdryList, CONTcard *contList) { int index, xIndex; ONEelem *pElem, *pNElem; BDRYcard *bdry; CONTcard *cont; for (bdry = bdryList; bdry != NULL; bdry = bdry->BDRYnextCard) { for (xIndex = bdry->BDRYixLow; xIndex < bdry->BDRYixHigh; xIndex++) { pElem = pDevice->elemArray[xIndex]; if (pElem != NULL) { if (pElem->domain == bdry->BDRYdomain) { for (index = 0; index <= 1; index++) { if (pElem->evalNodes[index]) { pNElem = pElem->pElems[index]; if (bdry->BDRYneighborGiven) { if (pNElem && (pNElem->domain == bdry->BDRYneighbor)) { /* Found an interface node. */ ONEcopyBCinfo(pDevice, pElem, bdry, index); } } else { if ((!pNElem) || (pNElem->domain != pElem->domain)) { /* Found a boundary node. */ ONEcopyBCinfo(pDevice, pElem, bdry, index); } } } } } } } } for (cont = contList; cont != NULL; cont = cont->CONTnextCard) { if (!cont->CONTworkfunGiven) { cont->CONTworkfun = PHI_METAL; } /* * XXX This won't work right if someone tries to change the 1d BJT base * contact workfunction and doesn't want to change the emitter. But no * one will probably try to do that. */ if (cont->CONTnumber == 1) { pDevice->elemArray[1]->pNodes[0]->eaff = cont->CONTworkfun; } else if ((cont->CONTnumber == 2) || (cont->CONTnumber == 3)) { pDevice->elemArray[pDevice->numNodes - 1]->pNodes[1]->eaff = cont->CONTworkfun; } } } void ONEnormalize(ONEdevice *pDevice) { int index, eIndex; ONEelem *pElem; ONEnode *pNode; for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; pElem->dx /= LNorm; pElem->rDx = 1.0 / pElem->dx; pElem->epsRel /= EpsNorm; for (index = 0; index <= 1; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; pNode->netConc /= NNorm; pNode->nd /= NNorm; pNode->na /= NNorm; pNode->qf /= (NNorm * LNorm); pNode->nie /= NNorm; pNode->eg /= VNorm; pNode->eaff /= VNorm; } } } } tmpk8ny_4pz/src/ciderlib/oned/oneproj.c0000644000175000017500000002446313546075722020302 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/onemesh.h" #include "ngspice/onedev.h" #include "ngspice/macros.h" #include "ngspice/spmatrix.h" #include "ngspice/bool.h" #include "onedext.h" #include "oneddefs.h" #include "ngspice/cidersupt.h" /* * Functions for projecting the next solution point for modified two-level * newton scheme */ void NUMDproject(ONEdevice *pDevice, double delV) { ONEelem *pElem = pDevice->elemArray[pDevice->numNodes - 1]; ONEnode *pNode; ONEedge *pEdge; double delPsi, delN, delP, newN, newP; double *incVpn; int i, index; delV = - delV / VNorm; pElem->pRightNode->psi += delV; if (ABS(delV) < MIN_DELV) { ONEstoreInitialGuess(pDevice); return; } /* zero the rhs before loading in the new rhs */ for (index = 1; index <= pDevice->numEqns; index++) { pDevice->rhs[index] = 0.0; } /* compute incremental changes due to N contact */ pNode = pElem->pLeftNode; pDevice->rhs[pNode->psiEqn] = pElem->epsRel * pElem->rDx; if (pElem->elemType == SEMICON) { pEdge = pElem->pEdge; pDevice->rhs[pNode->nEqn] = -pEdge->dJnDpsiP1; pDevice->rhs[pNode->pEqn] = -pEdge->dJpDpsiP1; } incVpn = pDevice->dcDeltaSolution; spSolve(pDevice->matrix, pDevice->rhs, incVpn, NULL, NULL); for (index = 1; index < pDevice->numNodes; index++) { pElem = pDevice->elemArray[index]; for (i = 0; i <= 1; i++) { if (pElem->evalNodes[i]) { pNode = pElem->pNodes[i]; if (pNode->nodeType != CONTACT) { delPsi = incVpn[pNode->psiEqn] * delV; pDevice->dcSolution[pNode->psiEqn] = pNode->psi + delPsi; if (pElem->elemType == SEMICON) { delN = incVpn[pNode->nEqn] * delV; delP = incVpn[pNode->pEqn] * delV; newN = pNode->nConc + delN; newP = pNode->pConc + delP; /* if new conc less than 0.0 then use a fraction of the guess */ if (newN <= 0.0) { pDevice->dcSolution[pNode->nEqn] = guessNewConc(pNode->nConc, delN); } else { pDevice->dcSolution[pNode->nEqn] = newN; } if (newP <= 0.0) { pDevice->dcSolution[pNode->pEqn] = guessNewConc(pNode->pConc, delP); } else { pDevice->dcSolution[pNode->pEqn] = newP; } } } } } } } void NBJTproject(ONEdevice *pDevice, double delVce, double delVbe, double vbe) { ONEelem *pLastElem = pDevice->elemArray[pDevice->numNodes - 1]; ONEelem *pBaseElem = pDevice->elemArray[pDevice->baseIndex - 1]; ONEelem *pElem; ONEnode *pNode; ONEedge *pEdge; double delPsi, delN, delP, newN, newP, *incVce, *incVbe; double baseConc=0.0; int i, index; double nConc, pConc; /* normalize the voltages for calculations */ delVce = delVce / VNorm; delVbe = delVbe / VNorm; pLastElem->pRightNode->psi += delVce; pBaseElem->pRightNode->vbe = vbe / VNorm + pBaseElem->matlInfo->refPsi; pNode = pBaseElem->pRightNode; if (pNode->baseType == N_TYPE) { baseConc = pNode->nConc; } else if (pNode->baseType == P_TYPE) { baseConc = pNode->pConc; } if (ABS(delVce) > MIN_DELV) { /* zero the rhs before loading in the new rhs */ for (index = 1; index <= pDevice->numEqns; index++) { pDevice->rhs[index] = 0.0; } /* store the new rhs for computing the incremental quantities */ pNode = pLastElem->pLeftNode; pDevice->rhs[pNode->psiEqn] = pLastElem->epsRel * pLastElem->rDx; if (pLastElem->elemType == SEMICON) { pEdge = pLastElem->pEdge; pDevice->rhs[pNode->nEqn] = -pEdge->dJnDpsiP1; pDevice->rhs[pNode->pEqn] = -pEdge->dJpDpsiP1; } incVce = pDevice->dcDeltaSolution; spSolve(pDevice->matrix, pDevice->rhs, incVce, NULL, NULL); for (index = 1; index < pDevice->numNodes; index++) { pElem = pDevice->elemArray[index]; for (i = 0; i <= 1; i++) { if (pElem->evalNodes[i]) { pNode = pElem->pNodes[i]; if (pNode->nodeType != CONTACT) { delPsi = incVce[pNode->psiEqn] * delVce; pDevice->dcSolution[pNode->psiEqn] = pNode->psi + delPsi; if (pElem->elemType == SEMICON) { delN = incVce[pNode->nEqn] * delVce; delP = incVce[pNode->pEqn] * delVce; newN = pNode->nConc + delN; newP = pNode->pConc + delP; /* if new conc less than 0.0 then use a fraction of the guess */ if (newN <= 0.0) { pDevice->dcSolution[pNode->nEqn] = guessNewConc(pNode->nConc, delN); } else { pDevice->dcSolution[pNode->nEqn] = newN; } if (newP <= 0.0) { pDevice->dcSolution[pNode->pEqn] = guessNewConc(pNode->pConc, delP); } else { pDevice->dcSolution[pNode->pEqn] = newP; } } } } } } } else { ONEstoreInitialGuess(pDevice); } if (ABS(delVbe) > MIN_DELV) { /* zero the rhs before loading in the new rhs base contribution */ for (index = 1; index <= pDevice->numEqns; index++) { pDevice->rhs[index] = 0.0; } pNode = pBaseElem->pRightNode; if (pNode->baseType == N_TYPE) { pDevice->rhs[pNode->nEqn] = baseConc * pNode->eg; } else if (pNode->baseType == P_TYPE) { pDevice->rhs[pNode->pEqn] = baseConc * pNode->eg; } incVbe = pDevice->copiedSolution; spSolve(pDevice->matrix, pDevice->rhs, incVbe, NULL, NULL); for (index = 1; index < pDevice->numNodes; index++) { pElem = pDevice->elemArray[index]; for (i = 0; i <= 1; i++) { if (pElem->evalNodes[i]) { pNode = pElem->pNodes[i]; if (pNode->nodeType != CONTACT) { delPsi = incVbe[pNode->psiEqn] * delVbe; pDevice->dcSolution[pNode->psiEqn] += delPsi; if (pElem->elemType == SEMICON) { delN = incVbe[pNode->nEqn] * delVbe; delP = incVbe[pNode->pEqn] * delVbe; nConc = pDevice->dcSolution[pNode->nEqn]; pConc = pDevice->dcSolution[pNode->pEqn]; newN = nConc + delN; newP = pConc + delP; /* if new conc less than 0.0 then use a fraction of the guess */ if (newN <= 0.0) { pDevice->dcSolution[pNode->nEqn] = guessNewConc(nConc, delN); } else { pDevice->dcSolution[pNode->nEqn] = newN; } if (newP <= 0.0) { pDevice->dcSolution[pNode->pEqn] = guessNewConc(pConc, delP); } else { pDevice->dcSolution[pNode->pEqn] = newP; } } } } } } } } /* functions to update device states for full-LU algorithm */ void NUMDupdate(ONEdevice *pDevice, double delV, BOOLEAN updateBoundary) { ONEelem *pElem = pDevice->elemArray[pDevice->numNodes - 1]; ONEnode *pNode; double delPsi, delN, delP; int i, index; delV = - delV / VNorm; if (updateBoundary) { pElem->pRightNode->psi += delV; } for (index = 1; index < pDevice->numNodes; index++) { pElem = pDevice->elemArray[index]; for (i = 0; i <= 1; i++) { if (pElem->evalNodes[i]) { pNode = pElem->pNodes[i]; if (pNode->nodeType != CONTACT) { delPsi = pDevice->dcDeltaSolution[pNode->psiEqn] * delV; pDevice->dcSolution[pNode->psiEqn] = pNode->psi + delPsi; if (pElem->elemType == SEMICON) { delN = pDevice->dcDeltaSolution[pNode->nEqn] * delV; delP = pDevice->dcDeltaSolution[pNode->pEqn] * delV; pDevice->dcSolution[pNode->nEqn] = pNode->nConc + delN; pDevice->dcSolution[pNode->pEqn] = pNode->pConc + delP; } } } } } } void NBJTupdate(ONEdevice *pDevice, double delVce, double delVbe, double vbe, BOOLEAN updateBoundary) { ONEelem *pLastElem = pDevice->elemArray[pDevice->numNodes - 1]; ONEelem *pBaseElem = pDevice->elemArray[pDevice->baseIndex - 1]; ONEelem *pElem; ONEnode *pNode; double delPsi, delN, delP, *incVce, *incVbe; int i, index; /* normalize the voltages for calculations */ delVce = delVce / VNorm; delVbe = delVbe / VNorm; if (updateBoundary) { pLastElem->pRightNode->psi += delVce; pBaseElem->pRightNode->vbe = vbe / VNorm + pBaseElem->matlInfo->refPsi; } /* * The incremental quantities are available from NBJTconductance. incVce * (dcDeltaSolution) and incVbe (copiedSolution) are used to store the * incremental quantities associated with Vce and Vbe */ /* set incVce = dcDeltaSolution; incVbe = copiedSolution */ incVce = pDevice->dcDeltaSolution; incVbe = pDevice->copiedSolution; for (index = 1; index < pDevice->numNodes; index++) { pElem = pDevice->elemArray[index]; for (i = 0; i <= 1; i++) { if (pElem->evalNodes[i]) { pNode = pElem->pNodes[i]; if (pNode->nodeType != CONTACT) { delPsi = incVce[pNode->psiEqn] * delVce + incVbe[pNode->psiEqn] * delVbe; pDevice->dcSolution[pNode->psiEqn] = pNode->psi + delPsi; if (pElem->elemType == SEMICON) { delN = incVce[pNode->nEqn] * delVce + incVbe[pNode->nEqn] * delVbe; delP = incVce[pNode->pEqn] * delVce + incVbe[pNode->pEqn] * delVbe; pDevice->dcSolution[pNode->nEqn] = pNode->nConc + delN; pDevice->dcSolution[pNode->pEqn] = pNode->pConc + delP; } } } } } } void NUMDsetBCs(ONEdevice *pDevice, double vpn) { ONEelem *pElem = pDevice->elemArray[pDevice->numNodes - 1]; /* normalize the voltage */ vpn = - vpn / VNorm; /* set the boundary conditions */ pElem->pRightNode->psi = vpn + pElem->pRightNode->psi0; } void NBJTsetBCs(ONEdevice *pDevice, double vce, double vbe) { ONEelem *pLastElem = pDevice->elemArray[pDevice->numNodes - 1]; ONEelem *pBaseElem = pDevice->elemArray[pDevice->baseIndex - 1]; /* ONEnode *pNode; double psi, conc, sign, absConc; double nie, ni, pi; */ /* normalize the voltages */ vce = vce / VNorm; vbe = vbe / VNorm; /* set the boundary conditions */ pBaseElem->pRightNode->vbe = vbe + pBaseElem->matlInfo->refPsi; pLastElem->pRightNode->psi = vce + pLastElem->pRightNode->psi0; /* * if (pLastElem->elemType IS INSULATOR) { pNode->psi = RefPsi - * pNode->eaff; pNode->nConc = 0.0; pNode->pConc = 0.0; } else if * (pLastElem->elemType IS SEMICON) { nie = pNode->nie; conc = * pNode->netConc / pNode->nie; psi = 0.0; ni = nie; pi = nie; sign = SGN( * conc ); absConc = ABS( conc ); if ( conc ISNOT 0.0 ) { psi = sign * log( * 0.5 * absConc + sqrt( 1.0 + 0.25*absConc*absConc )); ni = nie * exp( psi * ); pi = nie * exp( -psi ); } pNode->psi = pLastElem->matlInfo->refPsi + * psi; pNode->nConc = ni; pNode->pConc = pi; } pNode->psi = pNode->psi0; * pNode->psi += vce; */ } tmpk8ny_4pz/src/ciderlib/oned/oneread.c0000644000175000017500000000472713546075722020244 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 David A. Gates, U. C. Berkeley CAD Group **********/ /* * Functions needed to read solutions for 1D devices. */ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/onedev.h" #include "ngspice/onemesh.h" #include "ngspice/plot.h" #include "onedext.h" #include "oneddefs.h" #include "ngspice/cidersupt.h" int ONEreadState(ONEdevice *pDevice, char *fileName, int numVolts, double *pV1, double *pV2 ) /* fileName | File containing raw data */ /* int numVolts | Number of voltage differences */ /* double *pV1, *pV2 | Pointer to return them in */ { int dataLength; int index, i; ONEnode **nodeArray=NULL; ONEnode *pNode; ONEelem *pElem; double refPsi = 0.0; double *psiData, *nData, *pData; double *vData[2]; struct plot *stateDB; struct plot *voltsDB; char voltName[80]; stateDB = DBread( fileName ); if (stateDB == NULL) return (-1); voltsDB = stateDB->pl_next; if (voltsDB == NULL) return (-1); for (i=0; i < numVolts; i++ ) { sprintf( voltName, "v%d%d", i+1, numVolts+1 ); vData[i] = DBgetData( voltsDB, voltName, 1 ); if (vData[i] == NULL) return (-1); } dataLength = pDevice->numNodes; psiData = DBgetData( stateDB, "psi", dataLength ); nData = DBgetData( stateDB, "n", dataLength ); pData = DBgetData( stateDB, "p", dataLength ); if (psiData == NULL || nData == NULL || pData == NULL) return (-1); if (pV1 != NULL) { *pV1 = vData[0][0]; FREE( vData[0] ); } if (pV2 != NULL) { *pV2 = vData[1][0]; FREE( vData[1] ); } /* generate the work array for copying node info */ XCALLOC(nodeArray, ONEnode *, 1 + pDevice->numNodes); /* store the nodes in this work array and print out later */ for (index = 1; index < pDevice->numNodes; index++) { pElem = pDevice->elemArray[index]; if (refPsi == 0.0 && pElem->matlInfo->type == SEMICON) { refPsi = pElem->matlInfo->refPsi; } for (i = 0; i <= 1; i++) { if (pElem->evalNodes[i]) { pNode = pElem->pNodes[i]; nodeArray[pNode->nodeI] = pNode; } } } for (index = 1; index <= pDevice->numNodes; index++) { pNode = nodeArray[index]; pNode->psi = psiData[index-1]/VNorm + refPsi; pNode->nConc = nData[index-1]/NNorm; pNode->pConc = pData[index-1]/NNorm; } FREE(nodeArray); FREE(psiData); FREE(nData); FREE(pData); return (0); } tmpk8ny_4pz/src/ciderlib/oned/onecond.c0000644000175000017500000001676413546075722020260 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* Functions to compute device conductances and currents */ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/onemesh.h" #include "ngspice/onedev.h" #include "ngspice/macros.h" #include "ngspice/spmatrix.h" #include "onedext.h" #include "oneddefs.h" void NUMDconductance(ONEdevice *pDevice, BOOLEAN tranAnalysis, double *intCoeff, double *gd) { ONEelem *pElem = pDevice->elemArray[pDevice->numNodes - 1]; ONEnode *pNode; ONEedge *pEdge; int index; double dPsiDv, dNDv, dPDv, *incVpn; *gd = 0.0; /* zero the rhs before loading in the new rhs */ for (index = 1; index <= pDevice->numEqns; index++) { pDevice->rhs[index] = 0.0; } /* compute incremental changes due to N contact */ pNode = pElem->pLeftNode; pDevice->rhs[pNode->psiEqn] = pElem->epsRel * pElem->rDx; if (pElem->elemType == SEMICON) { pEdge = pElem->pEdge; pDevice->rhs[pNode->nEqn] = -pEdge->dJnDpsiP1; pDevice->rhs[pNode->pEqn] = -pEdge->dJpDpsiP1; } incVpn = pDevice->dcDeltaSolution; spSolve(pDevice->matrix, pDevice->rhs, incVpn, NULL, NULL); pElem = pDevice->elemArray[1]; pNode = pElem->pRightNode; pEdge = pElem->pEdge; dPsiDv = incVpn[pNode->psiEqn]; if (pElem->elemType == SEMICON) { dNDv = incVpn[pNode->nEqn]; dPDv = incVpn[pNode->pEqn]; *gd += pEdge->dJnDpsiP1 * dPsiDv + pEdge->dJnDnP1 * dNDv + pEdge->dJpDpsiP1 * dPsiDv + pEdge->dJpDpP1 * dPDv; } /* For transient analysis, add the displacement term */ if (tranAnalysis) { *gd -= intCoeff[0] * pElem->epsRel * pElem->rDx * dPsiDv; } *gd *= -GNorm * pDevice->area; } void NBJTconductance(ONEdevice *pDevice, BOOLEAN tranAnalysis, double *intCoeff, double *dIeDVce, double *dIcDVce, double *dIeDVbe, double *dIcDVbe) { ONEelem *pLastElem = pDevice->elemArray[pDevice->numNodes - 1]; ONEelem *pBaseElem = pDevice->elemArray[pDevice->baseIndex - 1]; ONEelem *pElem; ONEnode *pNode; ONEedge *pEdge; int index; double dPsiDVce, dPsiDVbe, dNDVce, dNDVbe, dPDVce, dPDVbe; double *incVce, *incVbe; double nConc, pConc; double area = pDevice->area; *dIeDVce = 0.0; *dIcDVce = 0.0; *dIeDVbe = 0.0; *dIcDVbe = 0.0; /* zero the rhs before loading in the new rhs */ for (index = 1; index <= pDevice->numEqns; index++) { pDevice->rhs[index] = 0.0; } /* store the new rhs for computing CE incremental quantities */ pNode = pLastElem->pLeftNode; pDevice->rhs[pNode->psiEqn] = pLastElem->epsRel * pLastElem->rDx; if (pLastElem->elemType == SEMICON) { pEdge = pLastElem->pEdge; pDevice->rhs[pNode->nEqn] = -pEdge->dJnDpsiP1; pDevice->rhs[pNode->pEqn] = -pEdge->dJpDpsiP1; } incVce = pDevice->dcDeltaSolution; spSolve(pDevice->matrix, pDevice->rhs, incVce, NULL, NULL); /* zero the rhs before loading in the new rhs base contribution */ for (index = 1; index <= pDevice->numEqns; index++) { pDevice->rhs[index] = 0.0; } pNode = pBaseElem->pRightNode; if (pNode->baseType == N_TYPE) { nConc = pDevice->devState0 [pNode->nodeN]; pDevice->rhs[pNode->nEqn] = nConc * pNode->eg; } else if (pNode->baseType == P_TYPE) { pConc = pDevice->devState0 [pNode->nodeP]; pDevice->rhs[pNode->pEqn] = pConc * pNode->eg; } else { printf("NBJTconductance: unknown base type\n"); } incVbe = pDevice->copiedSolution; spSolve(pDevice->matrix, pDevice->rhs, incVbe, NULL, NULL); pElem = pDevice->elemArray[1];/* first element */ pEdge = pElem->pEdge; pNode = pElem->pRightNode; dPsiDVce = incVce[pNode->psiEqn]; dPsiDVbe = incVbe[pNode->psiEqn]; if (pElem->elemType == SEMICON) { dNDVce = incVce[pNode->nEqn]; dPDVce = incVce[pNode->pEqn]; dNDVbe = incVbe[pNode->nEqn]; dPDVbe = incVbe[pNode->pEqn]; *dIeDVce += pEdge->dJnDpsiP1 * dPsiDVce + pEdge->dJnDnP1 * dNDVce + pEdge->dJpDpsiP1 * dPsiDVce + pEdge->dJpDpP1 * dPDVce; *dIeDVbe += pEdge->dJnDpsiP1 * dPsiDVbe + pEdge->dJnDnP1 * dNDVbe + pEdge->dJpDpsiP1 * dPsiDVbe + pEdge->dJpDpP1 * dPDVbe; } /* For transient analysis add the displacement term */ if (tranAnalysis) { *dIeDVce -= intCoeff[0] * pElem->epsRel * dPsiDVce * pElem->rDx; *dIeDVbe -= intCoeff[0] * pElem->epsRel * dPsiDVbe * pElem->rDx; } pElem = pDevice->elemArray[pDevice->numNodes - 1]; /* last element */ pEdge = pElem->pEdge; pNode = pElem->pLeftNode; dPsiDVce = incVce[pNode->psiEqn]; dPsiDVbe = incVbe[pNode->psiEqn]; if (pElem->elemType == SEMICON) { dNDVce = incVce[pNode->nEqn]; dPDVce = incVce[pNode->pEqn]; dNDVbe = incVbe[pNode->nEqn]; dPDVbe = incVbe[pNode->pEqn]; *dIcDVce += -pEdge->dJnDpsiP1 * dPsiDVce + pEdge->dJnDn * dNDVce + -pEdge->dJpDpsiP1 * dPsiDVce + pEdge->dJpDp * dPDVce + /* add terms since adjacent to boundary */ pEdge->dJnDpsiP1 + pEdge->dJpDpsiP1; *dIcDVbe += -pEdge->dJnDpsiP1 * dPsiDVbe + pEdge->dJnDn * dNDVbe + -pEdge->dJpDpsiP1 * dPsiDVbe + pEdge->dJpDp * dPDVbe; } if (tranAnalysis) { *dIcDVce += intCoeff[0] * pElem->epsRel * (dPsiDVce - 1.0) * pElem->rDx; *dIcDVbe += intCoeff[0] * pElem->epsRel * dPsiDVbe * pElem->rDx; } *dIeDVce *= -GNorm * area; *dIcDVce *= -GNorm * area; *dIeDVbe *= -GNorm * area; *dIcDVbe *= -GNorm * area; } void NUMDcurrent(ONEdevice *pDevice, BOOLEAN tranAnalysis, double *intCoeff, double *id) { ONEnode *pNode; ONEelem *pElem; ONEedge *pEdge; double *delta = pDevice->dcDeltaSolution; double dPsi, dN, dP; *id = 0.0; pElem = pDevice->elemArray[1]; pNode = pElem->pRightNode; pEdge = pElem->pEdge; dPsi = delta[pNode->psiEqn]; *id = pEdge->jn + pEdge->jp + pElem->epsRel * pEdge->jd; if (pElem->elemType == SEMICON) { dN = delta[pNode->nEqn]; dP = delta[pNode->pEqn]; *id += pEdge->dJnDpsiP1 * dPsi + pEdge->dJnDnP1 * dN + pEdge->dJpDpsiP1 * dPsi + pEdge->dJpDpP1 * dP; } /* for transient analysis add the displacement term */ if (tranAnalysis) { *id -= intCoeff[0] * pElem->epsRel * pElem->rDx * dPsi; } *id *= JNorm * pDevice->area; } void NBJTcurrent(ONEdevice *pDevice, BOOLEAN tranAnalysis, double *intCoeff, double *ie, double *ic) { ONEnode *pNode; ONEelem *pElem; ONEedge *pEdge; double dPsi, dN, dP; double *solution; solution = pDevice->dcDeltaSolution; /* first edge for calculating ie */ pElem = pDevice->elemArray[1]; pNode = pElem->pRightNode; pEdge = pElem->pEdge; dPsi = solution[pNode->psiEqn]; *ie = pEdge->jn + pEdge->jp + pElem->epsRel * pEdge->jd; if (pElem->elemType == SEMICON) { dN = solution[pNode->nEqn]; dP = solution[pNode->pEqn]; *ie += pEdge->dJnDpsiP1 * dPsi + pEdge->dJnDnP1 * dN + pEdge->dJpDpsiP1 * dPsi + pEdge->dJpDpP1 * dP; } /* for transient analysis add the displacement term */ if (tranAnalysis) { *ie -= intCoeff[0] * pElem->epsRel * dPsi * pElem->rDx; } /* last edge for calculating ic */ pElem = pDevice->elemArray[pDevice->numNodes - 1]; pNode = pElem->pLeftNode; pEdge = pElem->pEdge; dPsi = solution[pNode->psiEqn]; *ic = pEdge->jn + pEdge->jp + pElem->epsRel * pEdge->jd; if (pElem->elemType == SEMICON) { dN = solution[pNode->nEqn]; dP = solution[pNode->pEqn]; *ic += -pEdge->dJnDpsiP1 * dPsi + pEdge->dJnDn * dN + -pEdge->dJpDpsiP1 * dPsi + pEdge->dJpDp * dP; } if (tranAnalysis) { *ic += intCoeff[0] * pElem->epsRel * dPsi * pElem->rDx; } *ic *= -JNorm * pDevice->area; *ie *= -JNorm * pDevice->area; } tmpk8ny_4pz/src/ciderlib/oned/notes0000644000175000017500000000226213546075722017526 0ustar carstencarstenSome comments on keeping track of where the solution is: There are 3 places that the internal state variables can be hiding: 1. In the (psi,n,p) triple of a node (pNode). 2. In the solution vectors (dcSolution, copiedSolution). 3. In the state tables (pDevice->devStates[]). To access node variables use: pNode->psi pNode->nConc pNode->pConc To access solution vectors use: solution[ pNode->psiEqn ] solution[ pNode->nEqn ] solution[ pNode->pEqn ] To access state vector X (0,1,etc.) use: *(pDevice->devStateX + pNode->nodePsi) *(pDevice->devStateX + pNode->nodeN) *(pDevice->devStateX + pNode->nodeP) There are several functions that copy from one form of these to another: storeInitialGuess: dcSolution <- nodevars biasSolve: nodevars <- dcSolution (DC) state0 <- nodevars <- dcSolution (Transient) saveState: nodevars <- state1 (Transient) In addition the main device-level Newton iteration copies during the computation of currents and derivatives: state0 <- dcSolution and the function predict() does a forward prediction step using the previous state: nodevars <- predict(state1) (Transient) tmpk8ny_4pz/src/ciderlib/oned/onemesh.c0000644000175000017500000002241013546075722020252 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/onemesh.h" #include "ngspice/onedev.h" #include "ngspice/macros.h" #include "onedext.h" #include "oneddefs.h" /* Forward Declarations */ /* static void ONEresetEvalFlag(ONEdevice *); sjb - not used */ void ONEbuildMesh(ONEdevice *pDevice, ONEcoord *pCoord, ONEdomain *pDomain, ONEmaterial *pMaterial) { int index, i; int elemType; double xPos; ONEcoord *pC; ONEnode *pNode; ONEdomain *pD; ONEelem *pElem; ONEmaterial *pM; int poiEqn, numEqn; ONEedge *pEdge; ONEnode **nodeArray=NULL; BOOLEAN error = FALSE; /* generate the work array for setting up nodes and elements */ XCALLOC(nodeArray, ONEnode *, 1 + pDevice->numNodes); for (pC = pCoord; pC != NULL; pC = pC->next) { xPos = pC->location; XCALLOC(pNode, ONEnode, 1); pNode->x = xPos; pNode->nodeI = pC->number; nodeArray[pNode->nodeI] = pNode; } /* mark the domain info on the nodes */ if (pDomain == NULL) { fprintf(stderr, "Error: domains not defined for device\n"); exit(-1); } for (pD = pDomain; pD != NULL; pD = pD->next) { for (pM = pMaterial; pM != NULL; pM = pM->next) { if (pD->material == pM->id) { break; } } elemType = pM->type; for (index = pD->ixLo; index <= pD->ixHi; index++) { pNode = nodeArray[index]; if (!pNode->nodeType) { pNode->nodeType = elemType; } } } /* * check to see if a domain has been defined for all nodes. if not flag an * error message */ for (index = 2; index < pDevice->numNodes; index++) { pNode = nodeArray[index]; if (!pNode->nodeType) { printf("Error: No domain defined for node %d\n", pNode->nodeI); error = TRUE; } } if (error) { /* nodes with undefined domains -- exit */ exit(-1); } /* mark the first and last nodes to be contact nodes */ nodeArray[1]->nodeType = CONTACT; nodeArray[pDevice->numNodes]->nodeType = CONTACT; /* generate the elements and the edges */ for (index = 1; index < pDevice->numNodes; index++) { XCALLOC(pElem, ONEelem, 1); XCALLOC(pEdge, ONEedge, 1); pElem->pEdge = pEdge; pElem->pLeftNode = nodeArray[index]; pElem->pRightNode = nodeArray[index + 1]; pDevice->elemArray[index] = pElem; } /* now setup the nodes to which an element belongs */ for (index = 1; index < pDevice->numNodes; index++) { pElem = pDevice->elemArray[index]; pElem->pLeftNode->pRightElem = pElem; pElem->pRightNode->pLeftElem = pElem; if (index > 1) { pElem->pLeftElem = pDevice->elemArray[index - 1]; } if (index < pDevice->numNodes - 1) { pElem->pRightElem = pDevice->elemArray[index + 1]; } } /* mark the domain info on the elements */ for (pD = pDomain; pD != NULL; pD = pD->next) { for (pM = pMaterial; pM != NULL; pM = pM->next) { if (pD->material == pM->id) { break; } } elemType = pM->type; for (index = pD->ixLo; index < pD->ixHi; index++) { pElem = pDevice->elemArray[index]; pElem->domain = pD->id; pElem->elemType = elemType; pElem->matlInfo = pM; } } /* identify the interface nodes */ for (index = 2; index < pDevice->numNodes; index++) { pNode = nodeArray[index]; if (pNode->pLeftElem->elemType != pNode->pRightElem->elemType) { /* an interface node */ pNode->nodeType = INTERFACE; } } /* now mark the nodes to be evaluated */ /* all interface nodes marked in silicon elements */ for (index = 1; index < pDevice->numNodes; index++) { pElem = pDevice->elemArray[index]; pElem->dx = pElem->pRightNode->x - pElem->pLeftNode->x; for (i = 0; i <= 1; i++) { pNode = pElem->pNodes[i]; pElem->evalNodes[i] = FALSE; if (pElem->elemType == INSULATOR) { if ((!pNode->evaluated) && (pNode->nodeType != INTERFACE)) { /* a non interface node in oxide domain */ pNode->evaluated = TRUE; pElem->evalNodes[i] = TRUE; } } if (pElem->elemType == SEMICON) { if (!pNode->evaluated) { pNode->evaluated = TRUE; pElem->evalNodes[i] = TRUE; } } } } /* set up the equation number for the nodes */ poiEqn = numEqn = 1; for (index = 1; index < pDevice->numNodes; index++) { pElem = pDevice->elemArray[index]; for (i = 0; i <= 1; i++) { if (pElem->evalNodes[i]) { pNode = pElem->pNodes[i]; if (pNode->nodeType != CONTACT) { pNode->poiEqn = poiEqn++; pNode->psiEqn = numEqn; if (pElem->elemType == INSULATOR) { numEqn += 1; /* only poisson's equation */ } else { pNode->nEqn = numEqn + 1; pNode->pEqn = numEqn + 2; numEqn += 3; } } else { /* this is a contact node */ pNode->poiEqn = 0; pNode->psiEqn = 0; pNode->nEqn = 0; pNode->pEqn = 0; } /* * fprintf(stdout,"NODE: %d %d\n",pNode->nodeI,pNode->poiEqn); */ } } } pDevice->dimEquil = poiEqn; pDevice->dimBias = numEqn; /* * ONEprnMesh( pDevice ); */ } /* * We have a separate function for this, so that the setup routines can reset * the state pointers without rebuilding the entire mesh. */ void ONEgetStatePointers(ONEdevice *pDevice, int *numStates) { int eIndex, nIndex; ONEelem *pElem; ONEnode *pNode; for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; for (nIndex = 0; nIndex <= 1; nIndex++) { if (pElem->evalNodes[nIndex]) { pNode = pElem->pNodes[nIndex]; pNode->nodeState = *numStates; *numStates += ONEnumNodeStates; } } pElem->pEdge->edgeState = *numStates; *numStates += ONEnumEdgeStates; } } /* adjust the base contact to be the position of maximum density */ /* index EB and BC are the indexes for the eb, bc junctions */ void adjustBaseContact(ONEdevice *pDevice, int indexEB, int indexBC) { int index, i, newBaseIndex, midPoint; double maxDensity; ONEnode *pNode; ONEelem *pElem; ONEnode *pBaseNode = pDevice->elemArray[pDevice->baseIndex]->pNodes[0]; /* Initialize the base contact to be the center of the two junctions */ /* This should take care of uniform dopings. */ midPoint = (indexEB + indexBC) / 2; newBaseIndex = midPoint; if (pBaseNode->baseType == P_TYPE) { maxDensity = pDevice->elemArray[midPoint]->pNodes[0]->pConc; for (index = indexEB; index < indexBC; index++) { pElem = pDevice->elemArray[index]; for (i = 0; i <= 1; i++) { pNode = pElem->pNodes[i]; if (pNode->pConc > maxDensity) { maxDensity = pNode->pConc; newBaseIndex = index; } } } } else if (pBaseNode->baseType == N_TYPE) { maxDensity = pDevice->elemArray[midPoint]->pNodes[0]->nConc; for (index = indexEB; index < indexBC; index++) { pElem = pDevice->elemArray[index]; for (i = 0; i <= 1; i++) { pNode = pElem->pNodes[i]; if (pNode->nConc > maxDensity) { maxDensity = pNode->nConc; newBaseIndex = index; } } } } else { printf("adjustBaseContact: unknown base type %d\n", pBaseNode->baseType); } /* at the conclusion of this loop have the point of max density */ if (pDevice->baseIndex != newBaseIndex) { /* so change the position */ pNode = pDevice->elemArray[newBaseIndex]->pNodes[0]; pNode->baseType = pBaseNode->baseType; pNode->vbe = pBaseNode->vbe; pBaseNode->baseType = FALSE; pBaseNode->vbe = 0.0; pDevice->baseIndex = newBaseIndex; } } void NBJTjunctions(ONEdevice *pDevice, int *indexEB, int *indexBC) { int index; double conc1, conc2; BOOLEAN findFirstJunction = TRUE; BOOLEAN notFound = TRUE; for (index = 1; (index < pDevice->numNodes) && (notFound); index++) { conc1 = pDevice->elemArray[index]->pNodes[0]->netConc; conc2 = pDevice->elemArray[index]->pNodes[1]->netConc; if ((conc1 * conc2 < 0.0) && (findFirstJunction)) { *indexEB = index; findFirstJunction = FALSE; } else if ((conc1 * conc2 < 0.0) && (!findFirstJunction)) { *indexBC = index; notFound = FALSE; } } if (notFound) { fprintf(stderr, "BJT: Device does not have two junctions!\n"); exit(-1); } } void ONEprnMesh(ONEdevice *pDevice) { int eIndex, index; ONEelem *pElem; ONEnode *pNode; char *name; for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; fprintf(stderr, "elem %5d:\n", eIndex); for (index = 0; index <= 1; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; switch (pNode->nodeType) { case SEMICON: name = "semiconductor"; break; case INSULATOR: name = "insulator"; break; case CONTACT: name = "contact"; break; case SCHOTTKY: name = "schottky"; break; case INTERFACE: name = "interface"; break; default: name = "unknown"; break; } fprintf(stderr, "node %5d: %s %5d\n", index, name, pNode->nodeI); } } } } /* sjb - not used static void ONEresetEvalFlag(ONEdevice *pDevice) { int index, eIndex; ONEelem *pElem; for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) { pElem = pDevice->elemArray[eIndex]; for (index = 0; index <= 1; index++) { pElem->pNodes[index]->evaluated = FALSE; } pElem->pEdge->evaluated = FALSE; } } */ tmpk8ny_4pz/src/ciderlib/oned/onedest.c0000644000175000017500000000325713546075722020265 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/onedev.h" #include "ngspice/onemesh.h" #include "ngspice/spmatrix.h" #include "onedext.h" #include "oneddefs.h" void ONEdestroy(ONEdevice *pDevice) { int index, eIndex; ONEelem *pElem; ONEnode *pNode; ONEedge *pEdge; if (!pDevice) return; switch (pDevice->solverType) { case SLV_SMSIG: case SLV_BIAS: /* free up memory allocated for the bias solution */ FREE(pDevice->dcSolution); FREE(pDevice->dcDeltaSolution); FREE(pDevice->copiedSolution); FREE(pDevice->rhs); FREE(pDevice->rhsImag); spDestroy(pDevice->matrix); break; case SLV_EQUIL: /* free up the vectors allocated in the equilibrium solution */ FREE(pDevice->dcSolution); FREE(pDevice->dcDeltaSolution); FREE(pDevice->copiedSolution); FREE(pDevice->rhs); spDestroy(pDevice->matrix); break; case SLV_NONE: break; default: fprintf(stderr, "Panic: Unknown solver type in ONEdestroy.\n"); exit(-1); break; } /* destroy the mesh */ if (pDevice->elemArray) { for (eIndex = 1; eIndex < pDevice->numNodes-1; eIndex++) { pElem = pDevice->elemArray[eIndex]; pEdge = pElem->pEdge; FREE(pEdge); for (index = 0; index <= 1; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; FREE(pNode); } } FREE(pElem); } FREE(pDevice->elemArray); } /* destroy any other lists */ /* NOT IMPLEMENTED */ FREE(pDevice); } tmpk8ny_4pz/src/ciderlib/oned/oneadmit.c0000644000175000017500000005730313546075722020425 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* Functions to compute small-signal parameters of 1D devices */ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/numconst.h" #include "ngspice/onedev.h" #include "ngspice/onemesh.h" #include "ngspice/complex.h" #include "ngspice/spmatrix.h" #include "ngspice/ifsim.h" #include "onedext.h" #include "oneddefs.h" #include "ngspice/cidersupt.h" extern IFfrontEnd *SPfrontEnd; /* * mmhhh this may cause troubles * Paolo Nenzi 2002 */ SPcomplex yAc; int NUMDadmittance(ONEdevice *pDevice, double omega, SPcomplex *yd) { ONEnode *pNode; ONEelem *pElem; ONEedge *pEdge; int index, i; double yReal, yImag; double *solutionReal, *solutionImag; SPcomplex yAc, cOmega; SPcomplex *y; BOOLEAN SORFailed; double startTime; /* Each time we call this counts as one AC iteration. */ pDevice->pStats->numIters[STAT_AC] += 1; /* * Change context names of solution vectors for ac analysis. * dcDeltaSolution stores the real part and copiedSolution stores the * imaginary part of the ac solution vector. */ solutionReal = pDevice->dcDeltaSolution; solutionImag = pDevice->copiedSolution; pDevice->solverType = SLV_SMSIG; /* use a normalized radian frequency */ omega *= TNorm; CMPLX_ASSIGN_VALUE(cOmega, 0.0, omega); yReal = 0.0; yImag = 0.0; if ((AcAnalysisMethod == SOR) || (AcAnalysisMethod == SOR_ONLY)) { /* LOAD */ startTime = SPfrontEnd->IFseconds(); /* zero the rhs before loading in the new rhs */ for (index = 1; index <= pDevice->numEqns; index++) { pDevice->rhs[index] = 0.0; pDevice->rhsImag[index] = 0.0; } /* store the new rhs vector */ pElem = pDevice->elemArray[pDevice->numNodes - 1]; pNode = pElem->pLeftNode; pDevice->rhs[pNode->psiEqn] = pElem->epsRel * pElem->rDx; if (pElem->elemType == SEMICON) { pEdge = pElem->pEdge; pDevice->rhs[pNode->nEqn] -= pEdge->dJnDpsiP1; pDevice->rhs[pNode->pEqn] -= pEdge->dJpDpsiP1; } pDevice->pStats->loadTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* SOLVE */ startTime = SPfrontEnd->IFseconds(); SORFailed = ONEsorSolve(pDevice, solutionReal, solutionImag, omega); pDevice->pStats->solveTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; if (SORFailed && AcAnalysisMethod == SOR) { AcAnalysisMethod = DIRECT; printf("SOR failed at %g Hz, switching to direct-method ac analysis.\n", omega / (2 * M_PI * TNorm) ); } else if (SORFailed) { /* Told to only do SOR, so give up. */ printf("SOR failed at %g Hz, returning null admittance.\n", omega / (2 * M_PI * TNorm) ); CMPLX_ASSIGN_VALUE(*yd, 0.0, 0.0); return (AcAnalysisMethod); } } if (AcAnalysisMethod == DIRECT) { /* LOAD */ startTime = SPfrontEnd->IFseconds(); /* solve the system of equations directly */ for (index = 1; index <= pDevice->numEqns; index++) { pDevice->rhs[index] = 0.0; pDevice->rhsImag[index] = 0.0; } pElem = pDevice->elemArray[pDevice->numNodes - 1]; pNode = pElem->pLeftNode; pDevice->rhs[pNode->psiEqn] = pElem->epsRel * pElem->rDx; if (pElem->elemType == SEMICON) { pEdge = pElem->pEdge; pDevice->rhs[pNode->nEqn] -= pEdge->dJnDpsiP1; pDevice->rhs[pNode->pEqn] -= pEdge->dJpDpsiP1; } ONE_jacLoad(pDevice); spSetComplex(pDevice->matrix); for (index = 1; index < pDevice->numNodes; index++) { pElem = pDevice->elemArray[index]; if (pElem->elemType == SEMICON) { for (i = 0; i <= 1; i++) { pNode = pElem->pNodes[i]; if (pNode->nodeType != CONTACT) { spADD_COMPLEX_ELEMENT(pNode->fNN, 0.0, -0.5 * pElem->dx * omega); spADD_COMPLEX_ELEMENT(pNode->fPP, 0.0, 0.5 * pElem->dx * omega); } } } } pDevice->pStats->loadTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* FACTOR */ startTime = SPfrontEnd->IFseconds(); spFactor(pDevice->matrix); pDevice->pStats->factorTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* SOLVE */ startTime = SPfrontEnd->IFseconds(); spSolve(pDevice->matrix, pDevice->rhs, solutionReal, pDevice->rhsImag, solutionImag); pDevice->pStats->solveTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; } /* MISC */ startTime = SPfrontEnd->IFseconds(); pNode = pDevice->elemArray[1]->pLeftNode; y = computeAdmittance(pNode, FALSE, solutionReal, solutionImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc, -y->real, -y->imag); CMPLX_ASSIGN(*yd, yAc); CMPLX_MULT_SELF_SCALAR(*yd, GNorm * pDevice->area); pDevice->pStats->miscTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; return (AcAnalysisMethod); } int NBJTadmittance(ONEdevice *pDevice, double omega, SPcomplex *yIeVce, SPcomplex *yIcVce, SPcomplex *yIeVbe, SPcomplex *yIcVbe) { ONEelem *pCollElem = pDevice->elemArray[pDevice->numNodes - 1]; ONEelem *pBaseElem = pDevice->elemArray[pDevice->baseIndex - 1]; ONEelem *pElem; ONEedge *pEdge; ONEnode *pNode; int index, i; double area = pDevice->area; double *solutionReal, *solutionImag; BOOLEAN SORFailed; SPcomplex *y; SPcomplex cOmega, pIeVce, pIcVce, pIeVbe, pIcVbe; double startTime; /* Each time we call this counts as one AC iteration. */ pDevice->pStats->numIters[STAT_AC] += 1; /* * change context names of solution vectors for ac analysis dcDeltaSolution * stores the real part and copiedSolution stores the imaginary part of the * ac solution vector */ solutionReal = pDevice->dcDeltaSolution; solutionImag = pDevice->copiedSolution; pDevice->solverType = SLV_SMSIG; /* use a normalized radian frequency */ omega *= TNorm; CMPLX_ASSIGN_VALUE(cOmega, 0.0, omega); CMPLX_ASSIGN_VALUE(pIeVce, NAN, NAN); CMPLX_ASSIGN_VALUE(pIcVce, NAN, NAN); if ((AcAnalysisMethod == SOR) || (AcAnalysisMethod == SOR_ONLY)) { /* LOAD */ startTime = SPfrontEnd->IFseconds(); /* zero the rhs before loading in the new rhs */ for (index = 1; index <= pDevice->numEqns; index++) { pDevice->rhs[index] = 0.0; pDevice->rhsImag[index] = 0.0; } /* store the new rhs vector */ pNode = pCollElem->pLeftNode; pDevice->rhs[pNode->psiEqn] = pCollElem->epsRel * pCollElem->rDx; if (pCollElem->elemType == SEMICON) { pEdge = pCollElem->pEdge; pDevice->rhs[pNode->nEqn] -= pEdge->dJnDpsiP1; pDevice->rhs[pNode->pEqn] -= pEdge->dJpDpsiP1; } pDevice->pStats->loadTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* SOLVE */ startTime = SPfrontEnd->IFseconds(); SORFailed = ONEsorSolve(pDevice, solutionReal, solutionImag, omega); pDevice->pStats->solveTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; if (SORFailed && (AcAnalysisMethod == SOR)) { AcAnalysisMethod = DIRECT; printf("SOR failed at %g Hz, switching to direct-method ac analysis.\n", omega / (2 * M_PI * TNorm) ); } else if (SORFailed) { /* Told to only do SOR, so give up. */ printf("SOR failed at %g Hz, returning null admittance.\n", omega / (2 * M_PI * TNorm) ); CMPLX_ASSIGN_VALUE(*yIeVce, 0.0, 0.0); CMPLX_ASSIGN_VALUE(*yIcVce, 0.0, 0.0); CMPLX_ASSIGN_VALUE(*yIeVbe, 0.0, 0.0); CMPLX_ASSIGN_VALUE(*yIcVbe, 0.0, 0.0); return (AcAnalysisMethod); } else { /* MISC */ startTime = SPfrontEnd->IFseconds(); pElem = pDevice->elemArray[1]; pNode = pElem->pLeftNode; y = computeAdmittance(pNode, FALSE, solutionReal, solutionImag, &cOmega); CMPLX_ASSIGN_VALUE(pIeVce, -y->real, -y->imag); pNode = pCollElem->pRightNode; y = computeAdmittance(pNode, TRUE, solutionReal, solutionImag, &cOmega); CMPLX_ASSIGN_VALUE(pIcVce, -y->real, -y->imag); pDevice->pStats->miscTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* LOAD */ startTime = SPfrontEnd->IFseconds(); /* load in the base contribution to the rhs */ for (index = 1; index <= pDevice->numEqns; index++) { pDevice->rhs[index] = 0.0; } pNode = pBaseElem->pRightNode; if (pNode->baseType == N_TYPE) { pDevice->rhs[pNode->nEqn] = pNode->nConc * pNode->eg; } else if (pNode->baseType == P_TYPE) { pDevice->rhs[pNode->pEqn] = pNode->pConc * pNode->eg; } else { printf("projectBJTsolution: unknown base type\n"); } pDevice->pStats->loadTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* SOLVE */ startTime = SPfrontEnd->IFseconds(); SORFailed = ONEsorSolve(pDevice, solutionReal, solutionImag, omega); pDevice->pStats->solveTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; if (SORFailed && (AcAnalysisMethod == SOR)) { AcAnalysisMethod = DIRECT; printf("SOR failed at %g Hz, switching to direct-method ac analysis.\n", omega / (2 * M_PI * TNorm) ); } else if (SORFailed) { /* Told to only do SOR, so give up. */ printf("SOR failed at %g Hz, returning null admittance.\n", omega / (2 * M_PI * TNorm) ); CMPLX_ASSIGN_VALUE(*yIeVce, 0.0, 0.0); CMPLX_ASSIGN_VALUE(*yIcVce, 0.0, 0.0); CMPLX_ASSIGN_VALUE(*yIeVbe, 0.0, 0.0); CMPLX_ASSIGN_VALUE(*yIcVbe, 0.0, 0.0); return (AcAnalysisMethod); } } } if (AcAnalysisMethod == DIRECT) { /* LOAD */ startTime = SPfrontEnd->IFseconds(); for (index = 1; index <= pDevice->numEqns; index++) { pDevice->rhs[index] = 0.0; pDevice->rhsImag[index] = 0.0; } /* solve the system of equations directly */ ONE_jacLoad(pDevice); pNode = pCollElem->pLeftNode; pDevice->rhs[pNode->psiEqn] = pCollElem->epsRel * pCollElem->rDx; if (pCollElem->elemType == SEMICON) { pEdge = pCollElem->pEdge; pDevice->rhs[pNode->nEqn] -= pEdge->dJnDpsiP1; pDevice->rhs[pNode->pEqn] -= pEdge->dJpDpsiP1; } spSetComplex(pDevice->matrix); for (index = 1; index < pDevice->numNodes; index++) { pElem = pDevice->elemArray[index]; if (pElem->elemType == SEMICON) { for (i = 0; i <= 1; i++) { pNode = pElem->pNodes[i]; if (pNode->nodeType != CONTACT) { spADD_COMPLEX_ELEMENT(pNode->fNN, 0.0, -0.5 * pElem->dx * omega); spADD_COMPLEX_ELEMENT(pNode->fPP, 0.0, 0.5 * pElem->dx * omega); } } } } pDevice->pStats->loadTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* FACTOR */ startTime = SPfrontEnd->IFseconds(); spFactor(pDevice->matrix); pDevice->pStats->factorTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* SOLVE */ startTime = SPfrontEnd->IFseconds(); spSolve(pDevice->matrix, pDevice->rhs, solutionReal, pDevice->rhsImag, solutionImag); pDevice->pStats->solveTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* MISC */ startTime = SPfrontEnd->IFseconds(); pElem = pDevice->elemArray[1]; pNode = pElem->pLeftNode; y = computeAdmittance(pNode, FALSE, solutionReal, solutionImag, &cOmega); CMPLX_ASSIGN_VALUE(pIeVce, -y->real, -y->imag); pNode = pCollElem->pRightNode; y = computeAdmittance(pNode, TRUE, solutionReal, solutionImag, &cOmega); CMPLX_ASSIGN_VALUE(pIcVce, -y->real, -y->imag); pDevice->pStats->miscTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* LOAD */ startTime = SPfrontEnd->IFseconds(); /* load in the base contribution in the rhs */ for (index = 1; index <= pDevice->numEqns; index++) { pDevice->rhs[index] = 0.0; } pNode = pBaseElem->pRightNode; if (pNode->baseType == N_TYPE) { pDevice->rhs[pNode->nEqn] = pNode->nConc * pNode->eg; } else if (pNode->baseType == P_TYPE) { pDevice->rhs[pNode->pEqn] = pNode->pConc * pNode->eg; } else { printf("\n BJTadmittance: unknown base type"); } pDevice->pStats->loadTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* FACTOR: already done, no need to repeat. */ /* SOLVE */ startTime = SPfrontEnd->IFseconds(); spSolve(pDevice->matrix, pDevice->rhs, solutionReal, pDevice->rhsImag, solutionImag); pDevice->pStats->solveTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; } /* MISC */ startTime = SPfrontEnd->IFseconds(); pElem = pDevice->elemArray[1]; pNode = pElem->pLeftNode; y = computeAdmittance(pNode, FALSE, solutionReal, solutionImag, &cOmega); CMPLX_ASSIGN_VALUE(pIeVbe, -y->real, -y->imag); pNode = pCollElem->pRightNode; y = computeAdmittance(pNode, FALSE, solutionReal, solutionImag, &cOmega); CMPLX_ASSIGN_VALUE(pIcVbe, -y->real, -y->imag); CMPLX_ASSIGN(*yIeVce, pIeVce); CMPLX_ASSIGN(*yIcVce, pIcVce); CMPLX_ASSIGN(*yIeVbe, pIeVbe); CMPLX_ASSIGN(*yIcVbe, pIcVbe); CMPLX_MULT_SELF_SCALAR(*yIeVce, GNorm * area); CMPLX_MULT_SELF_SCALAR(*yIeVbe, GNorm * area); CMPLX_MULT_SELF_SCALAR(*yIcVce, GNorm * area); CMPLX_MULT_SELF_SCALAR(*yIcVbe, GNorm * area); pDevice->pStats->miscTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; return (AcAnalysisMethod); } BOOLEAN ONEsorSolve(ONEdevice *pDevice, double *xReal, double *xImag, double omega) { ONEnode *pNode; ONEelem *pElem; double wRelax = 1.0; /* SOR relaxation parameter */ double *rhsSOR = pDevice->rhsImag; int numEqns = pDevice->numEqns; int numNodes = pDevice->numNodes; BOOLEAN SORConverged = FALSE; BOOLEAN SORFailed = FALSE; int i, index, indexN, indexP, iterationNum; double dx; /* clear xReal, xImag arrays */ for (index = 1; index <= numEqns; index++) { xReal[index] = 0.0; xImag[index] = 0.0; } iterationNum = 1; for (; (!SORConverged) &&(!SORFailed); iterationNum++) { /* first setup the rhs for the real part */ for (index = 1; index <= numEqns; index++) { rhsSOR[index] = 0.0; } for (index = 1; index < numNodes; index++) { pElem = pDevice->elemArray[index]; dx = 0.5 * pElem->dx; for (i = 0; i <= 1; i++) { pNode = pElem->pNodes[i]; if ((pNode->nodeType != CONTACT) && (pElem->elemType == SEMICON)) { indexN = pNode->nEqn; indexP = pNode->pEqn; rhsSOR[indexN] -= dx * omega * xImag[indexN]; rhsSOR[indexP] += dx * omega * xImag[indexP]; } } } /* now setup the rhs for the SOR equations */ for (index = 1; index <= numEqns; index++) { rhsSOR[index] += pDevice->rhs[index]; } /* compute xReal(k+1). solution stored in rhsSOR */ spSolve(pDevice->matrix, rhsSOR, rhsSOR, NULL, NULL); /* modify solution when wRelax is not 1 */ if (wRelax != 1) { for (index = 1; index <= numEqns; index++) { rhsSOR[index] = (1 - wRelax) * xReal[index] + wRelax * rhsSOR[index]; } } if (iterationNum > 1) { SORConverged = hasSORConverged(xReal, rhsSOR, numEqns); } /* copy real solution into xReal */ for (index = 1; index <= numEqns; index++) { xReal[index] = rhsSOR[index]; } /* now compute the imaginary part of the solution, xImag */ for (index = 1; index <= numEqns; index++) { rhsSOR[index] = 0.0; } for (index = 1; index < numNodes; index++) { pElem = pDevice->elemArray[index]; dx = 0.5 * pElem->dx; for (i = 0; i <= 1; i++) { pNode = pElem->pNodes[i]; if ((pNode->nodeType != CONTACT) && (pElem->elemType == SEMICON)) { indexN = pNode->nEqn; indexP = pNode->pEqn; rhsSOR[indexN] += dx * omega * xReal[indexN]; rhsSOR[indexP] -= dx * omega * xReal[indexP]; } } } /* compute xImag(k+1) */ spSolve(pDevice->matrix, rhsSOR, rhsSOR, NULL, NULL); /* modify solution when wRelax is not 1 */ if (wRelax != 1) { for (index = 1; index <= numEqns; index++) { rhsSOR[index] = (1 - wRelax) * xImag[index] + wRelax * rhsSOR[index]; } } if (iterationNum > 1) { SORConverged = SORConverged && hasSORConverged(xImag, rhsSOR, numEqns); } /* copy imag solution into xImag */ for (index = 1; index <= numEqns; index++) { xImag[index] = rhsSOR[index]; } if (ONEacDebug) printf("SOR iteration number = %d\n", iterationNum); if (iterationNum > 4) { SORFailed = TRUE; } } return (SORFailed); } void NUMDys(ONEdevice *pDevice, SPcomplex *s, SPcomplex *yd) { ONEnode *pNode; ONEelem *pElem; ONEedge *pEdge; int index, i; double *solutionReal, *solutionImag; SPcomplex temp, cOmega; SPcomplex *y; /* * change context names of solution vectors for ac analysis dcDeltaSolution * stores the real part and copiedSolution stores the imaginary part of the * ac solution vector */ solutionReal = pDevice->dcDeltaSolution; solutionImag = pDevice->copiedSolution; /* use a normalized radian frequency */ CMPLX_MULT_SCALAR(cOmega, *s, TNorm); /* solve the system of equations directly */ for (index = 1; index <= pDevice->numEqns; index++) { pDevice->rhs[index] = 0.0; pDevice->rhsImag[index] = 0.0; } ONE_jacLoad(pDevice); pElem = pDevice->elemArray[pDevice->numNodes - 1]; pNode = pElem->pLeftNode; pDevice->rhs[pNode->psiEqn] = pElem->epsRel * pElem->rDx; if (pElem->elemType == SEMICON) { pEdge = pElem->pEdge; pDevice->rhs[pNode->nEqn] -= pEdge->dJnDpsiP1; pDevice->rhs[pNode->pEqn] -= pEdge->dJpDpsiP1; } spSetComplex(pDevice->matrix); for (index = 1; index < pDevice->numNodes; index++) { pElem = pDevice->elemArray[index]; if (pElem->elemType == SEMICON) { for (i = 0; i <= 1; i++) { pNode = pElem->pNodes[i]; if (pNode->nodeType != CONTACT) { CMPLX_MULT_SCALAR(temp, cOmega, 0.5 * pElem->dx); spADD_COMPLEX_ELEMENT(pNode->fNN, -temp.real, -temp.imag); spADD_COMPLEX_ELEMENT(pNode->fPP, temp.real, temp.imag); } } } } spFactor(pDevice->matrix); spSolve(pDevice->matrix, pDevice->rhs, solutionReal, pDevice->rhsImag, solutionImag); pElem = pDevice->elemArray[1]; pNode = pElem->pLeftNode; y = computeAdmittance(pNode, FALSE, solutionReal, solutionImag, &cOmega); CMPLX_ASSIGN_VALUE(*yd, -y->real, -y->imag); CMPLX_MULT_SELF_SCALAR(*yd, GNorm * pDevice->area); } void NBJTys(ONEdevice *pDevice, SPcomplex *s, SPcomplex *yIeVce, SPcomplex *yIcVce, SPcomplex *yIeVbe, SPcomplex *yIcVbe) { ONEelem *pCollElem = pDevice->elemArray[pDevice->numNodes - 1]; ONEelem *pBaseElem = pDevice->elemArray[pDevice->baseIndex - 1]; ONEelem *pElem; ONEnode *pNode; ONEedge *pEdge; int index, i; SPcomplex *y; double area = pDevice->area; double *solutionReal, *solutionImag; SPcomplex temp, cOmega; SPcomplex pIeVce, pIcVce, pIeVbe, pIcVbe; /* * change context names of solution vectors for ac analysis dcDeltaSolution * stores the real part and copiedSolution stores the imaginary part of the * ac solution vector */ solutionReal = pDevice->dcDeltaSolution; solutionImag = pDevice->copiedSolution; /* use a normalized radian frequency */ CMPLX_MULT_SCALAR(cOmega, *s, TNorm); for (index = 1; index <= pDevice->numEqns; index++) { pDevice->rhs[index] = 0.0; pDevice->rhsImag[index] = 0.0; } /* solve the system of equations directly */ ONE_jacLoad(pDevice); pNode = pCollElem->pLeftNode; pDevice->rhs[pNode->psiEqn] = pCollElem->epsRel * pCollElem->rDx; if (pCollElem->elemType == SEMICON) { pEdge = pCollElem->pEdge; pDevice->rhs[pNode->nEqn] -= pEdge->dJnDpsiP1; pDevice->rhs[pNode->pEqn] -= pEdge->dJpDpsiP1; } spSetComplex(pDevice->matrix); for (index = 1; index < pDevice->numNodes; index++) { pElem = pDevice->elemArray[index]; if (pElem->elemType == SEMICON) { for (i = 0; i <= 1; i++) { pNode = pElem->pNodes[i]; if (pNode->nodeType != CONTACT) { CMPLX_MULT_SCALAR(temp, cOmega, 0.5 * pElem->dx); spADD_COMPLEX_ELEMENT(pNode->fNN, -temp.real, -temp.imag); spADD_COMPLEX_ELEMENT(pNode->fPP, temp.real, temp.imag); } } } } spFactor(pDevice->matrix); spSolve(pDevice->matrix, pDevice->rhs, solutionReal, pDevice->rhsImag, solutionImag); pElem = pDevice->elemArray[1]; pNode = pElem->pLeftNode; y = computeAdmittance(pNode, FALSE, solutionReal, solutionImag, &cOmega); CMPLX_ASSIGN_VALUE(pIeVce, -y->real, -y->imag); pNode = pCollElem->pRightNode; y = computeAdmittance(pNode, TRUE, solutionReal, solutionImag, &cOmega); CMPLX_ASSIGN_VALUE(pIcVce, -y->real, -y->imag); /* load in the base contribution in the rhs */ for (index = 1; index <= pDevice->numEqns; index++) { pDevice->rhs[index] = 0.0; } pNode = pBaseElem->pRightNode; if (pNode->baseType == N_TYPE) { pDevice->rhs[pNode->nEqn] = pNode->nConc * pNode->eg; } else if (pNode->baseType == P_TYPE) { pDevice->rhs[pNode->pEqn] = pNode->pConc * pNode->eg; } else { printf("\n BJTadmittance: unknown base type"); } /* don't need to LU factor the jacobian since it exists */ spSolve(pDevice->matrix, pDevice->rhs, solutionReal, pDevice->rhsImag, solutionImag); pElem = pDevice->elemArray[1]; pNode = pElem->pLeftNode; y = computeAdmittance(pNode, FALSE, solutionReal, solutionImag, &cOmega); CMPLX_ASSIGN_VALUE(pIeVbe, -y->real, -y->imag); pNode = pCollElem->pRightNode; y = computeAdmittance(pNode, FALSE, solutionReal, solutionImag, &cOmega); CMPLX_ASSIGN_VALUE(pIcVbe, -y->real, -y->imag); CMPLX_ASSIGN(*yIeVce, pIeVce); CMPLX_ASSIGN(*yIcVce, pIcVce); CMPLX_ASSIGN(*yIeVbe, pIeVbe); CMPLX_ASSIGN(*yIcVbe, pIcVbe); CMPLX_MULT_SELF_SCALAR(*yIeVce, GNorm * area); CMPLX_MULT_SELF_SCALAR(*yIeVbe, GNorm * area); CMPLX_MULT_SELF_SCALAR(*yIcVce, GNorm * area); CMPLX_MULT_SELF_SCALAR(*yIcVbe, GNorm * area); } /* function to compute the admittance of a one-D device */ /* cOmega is the complex frequency */ SPcomplex * computeAdmittance(ONEnode *pNode, BOOLEAN delVContact, double *xReal, double *xImag, SPcomplex *cOmega) { ONEnode *pHNode; ONEedge *pEdge; ONEelem *pElem; SPcomplex psi, n, p; SPcomplex sum, prod1, prod2; /* SPcomplex yAc; */ int i; CMPLX_ASSIGN_VALUE(yAc, 0.0, 0.0); for (i = 0; i <= 1; i++) { pElem = pNode->pElems[i]; if (pElem != NULL) { switch (i) { case 0: /* the right node of the element */ pHNode = pElem->pLeftNode; pEdge = pElem->pEdge; CMPLX_ASSIGN_VALUE(psi, xReal[pHNode->psiEqn], xImag[pHNode->psiEqn]); if (pElem->elemType == SEMICON) { CMPLX_ASSIGN_VALUE(n, xReal[pHNode->nEqn], xImag[pHNode->nEqn]); CMPLX_ASSIGN_VALUE(p, xReal[pHNode->pEqn], xImag[pHNode->pEqn]); CMPLX_MULT_SCALAR(prod1, psi, -pEdge->dJnDpsiP1); CMPLX_MULT_SCALAR(prod2, n, pEdge->dJnDn); CMPLX_ADD(yAc, prod1, prod2); CMPLX_MULT_SCALAR(prod1, psi, -pEdge->dJpDpsiP1); CMPLX_MULT_SCALAR(prod2, p, pEdge->dJpDp); CMPLX_ADD(sum, prod1, prod2); CMPLX_ADD_ASSIGN(yAc, sum); if (delVContact) { CMPLX_ADD_SELF_SCALAR(yAc, pEdge->dJnDpsiP1 + pEdge->dJpDpsiP1); } } CMPLX_MULT_SCALAR(prod1, *cOmega, pElem->epsRel * pElem->rDx); CMPLX_MULT(prod2, prod1, psi) CMPLX_ADD_ASSIGN(yAc, prod2); if (delVContact) { CMPLX_SUBT_ASSIGN(yAc, prod1); } break; case 1: /* the left node of the element */ pHNode = pElem->pRightNode; pEdge = pElem->pEdge; CMPLX_ASSIGN_VALUE(psi, xReal[pHNode->psiEqn], xImag[pHNode->psiEqn]); if (pElem->elemType == SEMICON) { CMPLX_ASSIGN_VALUE(n, xReal[pHNode->nEqn], xImag[pHNode->nEqn]); CMPLX_ASSIGN_VALUE(p, xReal[pHNode->pEqn], xImag[pHNode->pEqn]); CMPLX_MULT_SCALAR(prod1, psi, pEdge->dJnDpsiP1); CMPLX_MULT_SCALAR(prod2, n, pEdge->dJnDnP1); CMPLX_ADD(yAc, prod1, prod2); CMPLX_MULT_SCALAR(prod1, psi, pEdge->dJpDpsiP1); CMPLX_MULT_SCALAR(prod2, p, pEdge->dJpDpP1); CMPLX_ADD(sum, prod1, prod2); CMPLX_ADD_ASSIGN(yAc, sum); if (delVContact) { CMPLX_ADD_SELF_SCALAR(yAc, -(pEdge->dJnDpsiP1 + pEdge->dJpDpsiP1)); } } CMPLX_MULT_SCALAR(prod1, *cOmega, pElem->epsRel * pElem->rDx); CMPLX_MULT(prod2, prod1, psi); CMPLX_SUBT_ASSIGN(yAc, prod2); if (delVContact) { CMPLX_ADD_ASSIGN(yAc, prod1); } break; default: /* should never be here. Error */ printf("computeAdmittance: Error - unknown element\n"); } } } return (&yAc); } tmpk8ny_4pz/src/ciderlib/oned/oneaval.c0000644000175000017500000001244313546075722020246 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/onemesh.h" #include "ngspice/onedev.h" #include "ngspice/macros.h" #include "onedext.h" #include "oneddefs.h" double ONEavalanche(BOOLEAN rhsOnly, ONEdevice *pDevice, ONEnode *pNode) { ONEelem *pLElem, *pRElem; ONEedge *pLEdge, *pREdge; int numNodes = pDevice->numNodes; double dJnDpsiPrev, dJpDpsiPrev; double eField, temp, jn, jp; double signE, signN, signP, coeffR, coeffL, alphaN, alphaP; double generation = 0.0; double dAlphaNDpsiM1, dAlphaNDpsi, dAlphaNDpsiP1; double dAlphaPDpsiM1, dAlphaPDpsi, dAlphaPDpsiP1; ONEmaterial *info; pRElem = pNode->pRightElem; pLElem = pNode->pLeftElem; if (pRElem->evalNodes[0]) { info = pRElem->matlInfo; } else { info = pLElem->matlInfo; } pREdge = pRElem->pEdge; pLEdge = pLElem->pEdge; dJnDpsiPrev = pLEdge->dJnDpsiP1; dJpDpsiPrev = pLEdge->dJpDpsiP1; temp = pRElem->dx + pLElem->dx; coeffR = pLElem->dx / temp; coeffL = pRElem->dx / temp; eField = -(coeffR * pREdge->dPsi * pRElem->rDx + coeffL * pLEdge->dPsi * pLElem->rDx); jn = coeffR * pREdge->jn + coeffL * pLEdge->jn; jp = coeffR * pREdge->jp + coeffL * pLEdge->jp; signE = SGN(eField); eField = ABS(eField); if (eField == 0.0) { return (0.0); } signN = SGN(jn); if (signN * signE > 0.0) { /* field accelerates the carriers, hence avalanche */ if (info->bii[ELEC] / eField > 80.0) { alphaN = 0.0; } else { alphaN = info->aii[ELEC] * exp(-info->bii[ELEC] / eField); } } else { alphaN = 0.0; } signP = SGN(jp); if (signP * signE > 0.0) { /* field accelerates the carriers, hence avalanche */ if (info->bii[HOLE] / eField > 80.0) { alphaP = 0.0; } else { alphaP = info->aii[HOLE] * exp(-info->bii[HOLE] / eField); } } else { alphaP = 0.0; } if ((alphaN == 0.0) && (alphaP == 0.0)) { return (generation); } generation = (alphaN * ABS(jn) + alphaP * ABS(jp)) * 0.5 * (pRElem->dx + pLElem->dx); if (rhsOnly) { return (generation); } if (alphaN == 0.0) { dAlphaNDpsiM1 = 0.0; dAlphaNDpsiP1 = 0.0; dAlphaNDpsi = 0.0; } else { temp = alphaN * info->bii[ELEC] / (eField * eField); dAlphaNDpsiM1 = signE * temp * (coeffL * pLElem->rDx); dAlphaNDpsiP1 = -signE * temp * (coeffR * pRElem->rDx); dAlphaNDpsi = -(dAlphaNDpsiM1 + dAlphaNDpsiP1); } if (alphaP == 0.0) { dAlphaPDpsiM1 = 0.0; dAlphaPDpsiP1 = 0.0; dAlphaPDpsi = 0.0; } else { temp = alphaP * info->bii[HOLE] / (eField * eField); dAlphaPDpsiM1 = signE * temp * (coeffL * pLElem->rDx); dAlphaPDpsiP1 = -signE * temp * (coeffR * pRElem->rDx); dAlphaPDpsi = -(dAlphaPDpsiM1 + dAlphaPDpsiP1); } coeffR = 0.5 * pLElem->dx; coeffL = 0.5 * pRElem->dx; if (pNode->nodeI != 2) { *(pNode->fNPsiiM1) += signN * (-alphaN * coeffL * dJnDpsiPrev + coeffL * pLEdge->jn * dAlphaNDpsiM1) + signP * (-alphaP * coeffL * dJpDpsiPrev + coeffL * pLEdge->jp * dAlphaPDpsiM1); *(pNode->fNNiM1) += signN * alphaN * coeffL * pLEdge->dJnDn; *(pNode->fNPiM1) += signP * alphaP * coeffL * pLEdge->dJpDp; *(pNode->fPPsiiM1) -= signN * (-alphaN * coeffL * dJnDpsiPrev + coeffL * pLEdge->jn * dAlphaNDpsiM1) + signP * (-alphaP * coeffL * dJpDpsiPrev + coeffL * pLEdge->jp * dAlphaPDpsiM1); *(pNode->fPPiM1) -= signP * alphaP * coeffL * pLEdge->dJpDp; *(pNode->fPNiM1) -= signN * alphaN * coeffL * pLEdge->dJnDn; } if (pNode->nodeI != numNodes - 1) { *(pNode->fNPsiiP1) += signN * (alphaN * coeffR * pREdge->dJnDpsiP1 + coeffR * pREdge->jn * dAlphaNDpsiP1) + signP * (alphaP * coeffR * pREdge->dJpDpsiP1 + coeffR * pREdge->jp * dAlphaPDpsiP1); *(pNode->fNNiP1) += signN * alphaN * coeffR * pREdge->dJnDnP1; *(pNode->fNPiP1) += signP * alphaP * coeffR * pREdge->dJpDpP1; *(pNode->fPPsiiP1) -= signN * (alphaN * coeffR * pREdge->dJnDpsiP1 + coeffR * pREdge->jn * dAlphaNDpsiP1) + signP * (alphaP * coeffR * pREdge->dJpDpsiP1 + coeffR * pREdge->jp * dAlphaPDpsiP1); *(pNode->fPPiP1) -= signP * alphaP * coeffR * pREdge->dJpDpP1; *(pNode->fPNiP1) -= signN * alphaN * coeffR * pREdge->dJnDnP1; } *(pNode->fNPsi) += signN * (alphaN * (-coeffR * pREdge->dJnDpsiP1 + coeffL * dJnDpsiPrev) + (coeffR * pREdge->jn + coeffL * pLEdge->jn) * dAlphaNDpsi) + signP * (alphaP * (-coeffR * pREdge->dJpDpsiP1 + coeffL * dJpDpsiPrev) + (coeffR * pREdge->jp + coeffL * pLEdge->jp) * dAlphaPDpsi); *(pNode->fNN) += signN * alphaN * (coeffR * pREdge->dJnDn + coeffL * pLEdge->dJnDnP1); *(pNode->fNP) += signP * alphaP * (coeffR * pREdge->dJpDp + coeffL * pLEdge->dJpDpP1); *(pNode->fPPsi) -= signN * (alphaN * (-coeffR * pREdge->dJnDpsiP1 + coeffL * dJnDpsiPrev) + (coeffR * pREdge->jn + coeffL * pLEdge->jn) * dAlphaNDpsi) + signP * (alphaP * (-coeffR * pREdge->dJpDpsiP1 + coeffL * dJpDpsiPrev) + (coeffR * pREdge->jp + coeffL * pLEdge->jp) * dAlphaPDpsi); *(pNode->fPN) -= signN * alphaN * (coeffR * pREdge->dJnDn + coeffL * pLEdge->dJnDnP1); *(pNode->fPP) -= signP * alphaP * (coeffR * pREdge->dJpDp + coeffL * pLEdge->dJpDpP1); return (generation); } tmpk8ny_4pz/src/ciderlib/oned/readme0000644000175000017500000000140313546075722017627 0ustar carstencarstenDirectory: oned --------------- This directory contains the files that are primarily responsible for implementing the 1D device simulator. It also contains files that help interface the circuit simulator to the device simulator. Most functions that are common to all 1D device simulations start with the prefix ONE, e.g. ONEbiasSolve. The device-specific routines start with either NUMD or NBJT, e.g. NUMDadmittance or NBJTproject. The simulator contains both a Poisson Solver for equilibrium and a three-equation solver for bias solutions. An attempt has been made to keep the function names parallel in the two portions. Poisson routines are identified with a 'Q' (for charge only) after the ONE, and Full solver routines are identified with an underscore '_'. tmpk8ny_4pz/src/ciderlib/oned/onefreez.c0000644000175000017500000000553513546075722020442 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numconst.h" #include "ngspice/onemesh.h" #include "../../maths/misc/accuracy.h" #include "onedext.h" #include "oneddefs.h" void ONEQfreezeOut(ONEnode *pNode, double *ndFac, double *naFac, double *dNdFac, double *dNaFac) { double temp1, temp2; double eLev; ONEmaterial *info; if (pNode->pRightElem && pNode->pRightElem->evalNodes[0]) { info = pNode->pRightElem->matlInfo; } else { info = pNode->pLeftElem->matlInfo; } eLev = info->eDon; if (info->material != GAAS) { eLev -= LEVEL_ALPHA_SI * pow(pNode->nd * NNorm, 1.0 / 3.0); if (eLev < 0.0) eLev = 0.0; } if (eLev >= ExpLim) { *ndFac = 0.0; *dNdFac = 0.0; } else if (eLev <= -ExpLim) { *ndFac = 1.0; *dNdFac = 0.0; } else { temp1 = info->gDon * pNode->nConc * NNorm * exp(eLev) / info->nc0; temp2 = 1.0 / (1.0 + temp1); *ndFac = temp2; *dNdFac = -temp2 * temp2 * temp1; } eLev = info->eAcc; if (info->material != GAAS) { eLev -= LEVEL_ALPHA_SI * pow(pNode->na * NNorm, 1.0 / 3.0); if (eLev < 0.0) eLev = 0.0; } if (eLev >= ExpLim) { *naFac = 0.0; *dNaFac = 0.0; } else if (eLev <= -ExpLim) { *naFac = 1.0; *dNaFac = 0.0; } else { temp1 = info->gAcc * pNode->pConc * NNorm * exp(eLev) / info->nv0; temp2 = 1.0 / (1.0 + temp1); *naFac = temp2; *dNaFac = temp2 * temp2 * temp1; } } void ONE_freezeOut(ONEnode *pNode, double nConc, double pConc, double *ndFac, double *naFac, double *dNdFac, double *dNaFac) { double temp1, temp2; double eLev; ONEmaterial *info; if (pNode->pRightElem && pNode->pRightElem->evalNodes[0]) { info = pNode->pRightElem->matlInfo; } else { info = pNode->pLeftElem->matlInfo; } eLev = info->eDon; if (info->material != GAAS) { eLev -= LEVEL_ALPHA_SI * pow(pNode->nd * NNorm, 1.0 / 3.0); if (eLev < 0.0) eLev = 0.0; } if (eLev >= ExpLim) { *ndFac = 0.0; *dNdFac = 0.0; } else if (eLev <= -ExpLim) { *ndFac = 1.0; *dNdFac = 0.0; } else { temp1 = info->gDon * exp(eLev) * NNorm / info->nc0; temp2 = 1.0 / (1.0 + nConc * temp1); *ndFac = temp2; *dNdFac = -temp2 * temp2 * temp1; } eLev = info->eAcc; if (info->material != GAAS) { eLev -= LEVEL_ALPHA_SI * pow(pNode->na * NNorm, 1.0 / 3.0); if (eLev < 0.0) eLev = 0.0; } if (eLev >= ExpLim) { *naFac = 0.0; *dNaFac = 0.0; } else if (eLev <= -ExpLim) { *naFac = 1.0; *dNaFac = 0.0; } else { temp1 = info->gAcc * exp(eLev) * NNorm / info->nv0; temp2 = 1.0 / (1.0 + pConc * temp1); *naFac = temp2; *dNaFac = -temp2 * temp2 * temp1; } } tmpk8ny_4pz/src/ciderlib/input/0000755000175000017500000000000013546075722016663 5ustar carstencarstentmpk8ny_4pz/src/ciderlib/input/mobility.c0000644000175000017500000001347013546075722020664 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group Modified: 2001 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/numcards.h" #include "ngspice/numgen.h" #include "ngspice/numenum.h" #include "ngspice/mobdefs.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" extern int MOBnewCard(GENcard**,GENmodel*); extern int MOBparam(int,IFvalue*,GENcard*); IFparm MOBpTable[] = { IP("material",MOB_MATERIAL, IF_INTEGER, "Material index"), IP("electron",MOB_ELEC, IF_FLAG, "Electron mobility flag"), IP("hole", MOB_HOLE, IF_FLAG, "Hole mobility flag"), IP("majority",MOB_MAJOR, IF_FLAG, "Majority carrier flag"), IP("minority",MOB_MINOR, IF_FLAG, "Minority carrier flag"), IP("mumax", MOB_MUMAX, IF_REAL, "Maximum bulk mobility"), IP("mumin", MOB_MUMIN, IF_REAL, "Minimum bulk mobility"), IP("ntref", MOB_NTREF, IF_REAL, "Ionized impurity ref. conc."), IP("ntexp", MOB_NTEXP, IF_REAL, "Ionized impurity exponent"), IP("vsat", MOB_VSAT, IF_REAL, "Saturation velocity"), IP("vwarm", MOB_VWARM, IF_REAL, "Warm carrier ref. velocity"), IP("mus", MOB_MUS, IF_REAL, "Initial surface mobility"), IP("ec.a", MOB_EC_A, IF_REAL, "Surf. mobility critical field"), IP("ec.b", MOB_EC_B, IF_REAL, "Surf. mobility critical field #2"), IP("concmodel",MOB_CONC_MOD, IF_STRING, "Concentration dep. model"), IP("fieldmodel",MOB_FIELD_MOD,IF_STRING, "Driving field dep. model"), IP("init", MOB_INIT, IF_FLAG, "Initialize with defaults") }; IFcardInfo MOBinfo = { "mobility", "Specify parameters and types of mobility models", NUMELEMS(MOBpTable), MOBpTable, MOBnewCard, MOBparam, NULL }; int MOBnewCard(GENcard **inCard, GENmodel *inModel) { MOBcard *tmpCard, *newCard; GENnumModel *model = (GENnumModel *)inModel; newCard = TMALLOC(MOBcard, 1); if (!newCard) { *inCard = NULL; return(E_NOMEM); } newCard->MOBnextCard = NULL; *inCard = (GENcard *) newCard; tmpCard = model->GENmobility; if (!tmpCard) { /* First in list */ model->GENmobility = newCard; } else { /* Go to end of list */ while (tmpCard->MOBnextCard) tmpCard = tmpCard->MOBnextCard; /* And add new card */ tmpCard->MOBnextCard = newCard; } return(OK); } int MOBparam(int param, IFvalue *value, GENcard *inCard) { MOBcard *card = (MOBcard *)inCard; switch (param) { case MOB_MATERIAL: card->MOBmaterial = value->iValue; card->MOBmaterialGiven = TRUE; break; case MOB_ELEC: if ( value->iValue ) { card->MOBcarrier = ELEC; card->MOBcarrierGiven = TRUE; } else { if ( card->MOBcarrier == ELEC ) { card->MOBcarrier = -1; card->MOBcarrierGiven = FALSE; } } break; case MOB_HOLE: if ( value->iValue ) { card->MOBcarrier = HOLE; card->MOBcarrierGiven = TRUE; } else { if ( card->MOBcarrier == HOLE ) { card->MOBcarrier = -1; card->MOBcarrierGiven = FALSE; } } break; case MOB_MAJOR: if ( value->iValue ) { card->MOBcarrType = MAJOR; card->MOBcarrTypeGiven = TRUE; } else { if ( card->MOBcarrType == MAJOR ) { card->MOBcarrType = -1; card->MOBcarrTypeGiven = FALSE; } } break; case MOB_MINOR: if ( value->iValue ) { card->MOBcarrType = MINOR; card->MOBcarrTypeGiven = TRUE; } else { if ( card->MOBcarrType == MINOR ) { card->MOBcarrType = -1; card->MOBcarrTypeGiven = FALSE; } } break; case MOB_MUMAX: card->MOBmuMax = value->rValue; card->MOBmuMaxGiven = TRUE; break; case MOB_MUMIN: card->MOBmuMin = value->rValue; card->MOBmuMinGiven = TRUE; break; case MOB_NTREF: card->MOBntRef = value->rValue; card->MOBntRefGiven = TRUE; break; case MOB_NTEXP: card->MOBntExp = value->rValue; card->MOBntExpGiven = TRUE; break; case MOB_VSAT: card->MOBvSat = value->rValue; card->MOBvSatGiven = TRUE; break; case MOB_VWARM: card->MOBvWarm = value->rValue; card->MOBvWarmGiven = TRUE; break; case MOB_MUS: card->MOBmus = value->rValue; card->MOBmusGiven = TRUE; break; case MOB_EC_A: card->MOBecA = value->rValue; card->MOBecAGiven = TRUE; break; case MOB_EC_B: card->MOBecB = value->rValue; card->MOBecBGiven = TRUE; break; case MOB_CONC_MOD: if ( cinprefix( value->sValue, "ct", 1 ) ) { card->MOBconcModel = CT; card->MOBconcModelGiven = TRUE; } else if ( cinprefix( value->sValue, "ar", 1 ) ) { card->MOBconcModel = AR; card->MOBconcModelGiven = TRUE; } else if ( cinprefix( value->sValue, "uf", 1 ) ) { card->MOBconcModel = UF; card->MOBconcModelGiven = TRUE; } else if ( cinprefix( value->sValue, "sg", 1 ) ) { card->MOBconcModel = SG; card->MOBconcModelGiven = TRUE; } else if ( cinprefix( value->sValue, "ga", 1 ) ) { card->MOBconcModel = GA; card->MOBconcModelGiven = TRUE; } break; case MOB_FIELD_MOD: if ( cinprefix( value->sValue, "ct", 1 ) ) { card->MOBfieldModel = CT; card->MOBfieldModelGiven = TRUE; } else if ( cinprefix( value->sValue, "ar", 1 ) ) { card->MOBfieldModel = AR; card->MOBfieldModelGiven = TRUE; } else if ( cinprefix( value->sValue, "sg", 1 ) ) { card->MOBfieldModel = SG; card->MOBfieldModelGiven = TRUE; } else if ( cinprefix( value->sValue, "ga", 1 ) ) { card->MOBfieldModel = GA; card->MOBfieldModelGiven = TRUE; } break; case MOB_INIT: card->MOBinit = value->iValue; card->MOBinitGiven = TRUE; break; default: return(E_BADPARM); break; } return(OK); } tmpk8ny_4pz/src/ciderlib/input/Makefile.am0000644000175000017500000000110113546075722020710 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libciderinput.la libciderinput_la_SOURCES = \ bdryset.c \ boundary.c \ cards.c \ contact.c \ contset.c \ domain.c \ domnset.c \ doping.c \ dopset.c \ elctset.c \ electrod.c \ material.c \ matlset.c \ mesh.c \ meshset.c \ method.c \ mobility.c \ mobset.c \ models.c \ modlset.c \ optionsc.c \ outpset.c \ output.c EXTRA_DIST = readme AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/ciderlib/input/bdryset.c0000644000175000017500000001235713546075722020513 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group Modified: 2001 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/bdrydefs.h" #include "ngspice/meshext.h" #include "ngspice/gendev.h" #include "ngspice/sperror.h" extern int BDRYcheck( BDRYcard *, DOMNdomain * ); extern int BDRYsetup( BDRYcard *, MESHcoord *, MESHcoord *, DOMNdomain * ); /* * Name: BDRYcheck * Purpose: checks a list of BDRYcards for input errors * Formals: cardList: the list to check * Returns: OK/E_PRIVATE * Users: numerical device setup routines * Calls: error message handler */ int BDRYcheck(BDRYcard *cardList, DOMNdomain *domnList) { BDRYcard *card; DOMNdomain *domn; int cardNum = 0; int error = OK; for ( card = cardList; card != NULL; card = card->BDRYnextCard ) { cardNum++; if (card->BDRYxLowGiven && card->BDRYixLowGiven) { SPfrontEnd->IFerrorf( ERR_INFO, "boundary card %d uses both location and index - location ignored", cardNum ); card->BDRYxLowGiven = FALSE; } if (card->BDRYxHighGiven && card->BDRYixHighGiven) { SPfrontEnd->IFerrorf( ERR_INFO, "boundary card %d uses both location and index - location ignored", cardNum ); card->BDRYxHighGiven = FALSE; } if (card->BDRYyLowGiven && card->BDRYiyLowGiven) { SPfrontEnd->IFerrorf( ERR_INFO, "boundary card %d uses both location and index - location ignored", cardNum ); card->BDRYyLowGiven = FALSE; } if (card->BDRYyHighGiven && card->BDRYiyHighGiven) { SPfrontEnd->IFerrorf( ERR_INFO, "boundary card %d uses both location and index - location ignored", cardNum ); card->BDRYyHighGiven = FALSE; } if (!card->BDRYdomainGiven) { SPfrontEnd->IFerrorf( ERR_WARNING, "boundary card %d is missing a domain index", cardNum ); error = E_PRIVATE; } else { /* Make sure the domain exists */ for ( domn = domnList; domn != NULL; domn = domn->next ) { if ( card->BDRYdomain == domn->id ) { break; } } if (domn == NULL) { SPfrontEnd->IFerrorf( ERR_WARNING, "boundary card %d specifies a non-existent domain", cardNum ); error = E_PRIVATE; } } if (!card->BDRYneighborGiven) { card->BDRYneighbor = card->BDRYdomain; } else { /* Make sure the neighbor exists */ for ( domn = domnList; domn != NULL; domn = domn->next ) { if ( card->BDRYneighbor == domn->id ) { break; } } if (domn == NULL) { SPfrontEnd->IFerrorf( ERR_WARNING, "interface card %d specifies a non-existent domain", cardNum ); error = E_PRIVATE; } } if (!card->BDRYqfGiven) { card->BDRYqf = 0.0; } if (!card->BDRYsnGiven) { card->BDRYsn = 0.0; } if (!card->BDRYspGiven) { card->BDRYsp = 0.0; } if (!card->BDRYlayerGiven) { card->BDRYlayer = 0.0; } /* Return now if anything has failed */ if (error) return(error); } return(OK); } /* * Name: BDRYsetup * Purpose: Checks BDRY cards and then sets the indices * Formals: cardList: list of cards to setup, returns with indices set * xMeshList: list of coordinates in the x mesh * yMeshList: list of coordinates in the y mesh * Returns: OK/E_PRIVATE * Users: numerical devices * Calls: BDRYcheck */ int BDRYsetup(BDRYcard *cardList, MESHcoord *xMeshList, MESHcoord *yMeshList,DOMNdomain *domnList) { BDRYcard *card; int ixMin, ixMax, iyMin, iyMax; int cardNum = 0; int error; /* Check the card list */ if ((error = BDRYcheck( cardList, domnList )) != 0) return( error ); /* Find the limits on the indices */ MESHiBounds( xMeshList, &ixMin, &ixMax ); MESHiBounds( yMeshList, &iyMin, &iyMax ); error = OK; for ( card = cardList; card != NULL; card = card->BDRYnextCard ) { cardNum++; if (card->BDRYixLowGiven) { card->BDRYixLow = MAX(card->BDRYixLow, ixMin); } else if (card->BDRYxLowGiven) { card->BDRYixLow = MESHlocate( xMeshList, card->BDRYxLow ); } else { card->BDRYixLow = ixMin; } if (card->BDRYixHighGiven) { card->BDRYixHigh = MIN(card->BDRYixHigh, ixMax); } else if (card->BDRYxHighGiven) { card->BDRYixHigh = MESHlocate( xMeshList, card->BDRYxHigh ); } else { card->BDRYixHigh = ixMax; } if (card->BDRYixLow > card->BDRYixHigh) { SPfrontEnd->IFerrorf( ERR_WARNING, "boundary card %d has low x index (%d) > high x index (%d)", cardNum, card->BDRYixHigh, card->BDRYixLow ); error = E_PRIVATE; } if (card->BDRYiyLowGiven) { card->BDRYiyLow = MAX(card->BDRYiyLow, iyMin); } else if (card->BDRYyLowGiven) { card->BDRYiyLow = MESHlocate( yMeshList, card->BDRYyLow ); } else { card->BDRYiyLow = iyMin; } if (card->BDRYiyHighGiven) { card->BDRYiyHigh = MIN(card->BDRYiyHigh, iyMax); } else if (card->BDRYyHighGiven) { card->BDRYiyHigh = MESHlocate( yMeshList, card->BDRYyHigh ); } else { card->BDRYiyHigh = iyMax; } if (card->BDRYiyLow > card->BDRYiyHigh) { SPfrontEnd->IFerrorf( ERR_WARNING, "boundary card %d has low y index (%d) > high y index (%d)", cardNum, card->BDRYiyHigh, card->BDRYiyLow ); error = E_PRIVATE; } } return( error ); } tmpk8ny_4pz/src/ciderlib/input/elctset.c0000644000175000017500000001132313546075722020472 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group Modified: 2001 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/elctdefs.h" #include "ngspice/meshext.h" #include "ngspice/twomesh.h" #include "ngspice/gendev.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" extern int ELCTcheck( ELCTcard * ); extern int ELCTsetup( ELCTcard *, ELCTelectrode **, MESHcoord *, MESHcoord * ); /* * Name: ELCTcheck * Purpose: checks a list of ELCTcards for input errors * Formals: cardList: the list to check * Returns: OK/E_PRIVATE * Users: numerical device setup routines * Calls: error message handler */ int ELCTcheck(ELCTcard *cardList) { ELCTcard *card; int cardNum = 0; int error = OK; for ( card = cardList; card != NULL; card = card->ELCTnextCard ) { cardNum++; if (card->ELCTxLowGiven && card->ELCTixLowGiven) { SPfrontEnd->IFerrorf( ERR_INFO, "electrode card %d uses both location and index - location ignored", cardNum ); card->ELCTxLowGiven = FALSE; } if (card->ELCTxHighGiven && card->ELCTixHighGiven) { SPfrontEnd->IFerrorf( ERR_INFO, "electrode card %d uses both location and index - location ignored", cardNum ); card->ELCTxHighGiven = FALSE; } if (card->ELCTyLowGiven && card->ELCTiyLowGiven) { SPfrontEnd->IFerrorf( ERR_INFO, "electrode card %d uses both location and index - location ignored", cardNum ); card->ELCTyLowGiven = FALSE; } if (card->ELCTyHighGiven && card->ELCTiyHighGiven) { SPfrontEnd->IFerrorf( ERR_INFO, "electrode card %d uses both location and index - location ignored", cardNum ); card->ELCTyHighGiven = FALSE; } if (!card->ELCTnumberGiven) { card->ELCTnumber = -1; } /* Return now if anything has failed */ if (error) return(error); } return(OK); } /* * Name: ELCTsetup * Purpose: convert a list of ELCTcard's to ELCTelectrode's * Formals: cardList: list of cards to setup * electrodeList: returns the list of ELCTelectrode's * xMeshList: list of coordinates in the x mesh * yMeshList: list of coordinates in the y mesh * Returns: OK/E_PRIVATE * Users: numerical devices * Calls: ELCTcheck */ int ELCTsetup(ELCTcard *cardList, ELCTelectrode **electrodeList, MESHcoord *xMeshList, MESHcoord *yMeshList) { ELCTcard *card; ELCTelectrode *newElectrode = NULL; int ixMin, ixMax, iyMin, iyMax; int cardNum = 0; int error; /* Initialize list of electrodes */ *electrodeList = NULL; /* Check the card list */ if ((error = ELCTcheck( cardList )) != 0) return( error ); /* Find the limits on the indices */ MESHiBounds( xMeshList, &ixMin, &ixMax ); MESHiBounds( yMeshList, &iyMin, &iyMax ); error = OK; for ( card = cardList; card != NULL; card = card->ELCTnextCard ) { cardNum++; if (*electrodeList == NULL) { RALLOC( newElectrode, ELCTelectrode, 1 ); *electrodeList = newElectrode; } else { RALLOC( newElectrode->next, ELCTelectrode, 1 ); newElectrode = newElectrode->next; } newElectrode->next = NULL; newElectrode->id = card->ELCTnumber; newElectrode->workf = 4.10 /* electron volts */; if (card->ELCTixLowGiven) { newElectrode->ixLo = MAX(card->ELCTixLow, ixMin); } else if (card->ELCTxLowGiven) { newElectrode->ixLo = MESHlocate( xMeshList, card->ELCTxLow ); } else { newElectrode->ixLo = ixMin; } if (card->ELCTixHighGiven) { newElectrode->ixHi = MIN(card->ELCTixHigh, ixMax); } else if (card->ELCTxHighGiven) { newElectrode->ixHi = MESHlocate( xMeshList, card->ELCTxHigh ); } else { newElectrode->ixHi = ixMax; } if (newElectrode->ixLo > newElectrode->ixHi) { SPfrontEnd->IFerrorf( ERR_WARNING, "electrode card %d has low x index (%d) > high x index (%d)", cardNum, newElectrode->ixLo, newElectrode->ixHi ); error = E_PRIVATE; } if (card->ELCTiyLowGiven) { newElectrode->iyLo = MAX(card->ELCTiyLow, iyMin); } else if (card->ELCTyLowGiven) { newElectrode->iyLo = MESHlocate( yMeshList, card->ELCTyLow ); } else { newElectrode->iyLo = iyMin; } if (card->ELCTiyHighGiven) { newElectrode->iyHi = MIN(card->ELCTiyHigh, iyMax); } else if (card->ELCTyHighGiven) { newElectrode->iyHi = MESHlocate( yMeshList, card->ELCTyHigh ); } else { newElectrode->iyHi = iyMax; } if (newElectrode->iyLo > newElectrode->iyHi) { SPfrontEnd->IFerrorf( ERR_WARNING, "electrode card %d has low y index (%d) > high y index (%d)", cardNum, newElectrode->iyLo, newElectrode->iyHi ); error = E_PRIVATE; } } return( error ); } tmpk8ny_4pz/src/ciderlib/input/outpset.c0000644000175000017500000000636113546075722020540 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 David A. Gates, U. C. Berkeley CAD Group Modified: 2001 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/numenum.h" #include "ngspice/outpdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" extern int OUTPcheck( OUTPcard * ); extern int OUTPsetup( OUTPcard * ); /* * Name: OUTPcheck * Purpose: checks a list of OUTPcards for input errors, sets defaults * Formals: cardList: the list to check * Returns: OK/E_PRIVATE * Users: numerical device setup routines, output routines * Calls: error message handler */ int OUTPcheck(OUTPcard *cardList) { OUTPcard *card; int cardNum = 0; for ( card = cardList; card != NULL; card = card->OUTPnextCard ) { cardNum++; card->OUTPnumVars = -1; if ( !card->OUTPdcDebugGiven ) { card->OUTPdcDebug = FALSE; } if ( !card->OUTPtranDebugGiven ) { card->OUTPtranDebug = FALSE; } if ( !card->OUTPacDebugGiven ) { card->OUTPacDebug = FALSE; } if ( !card->OUTPgeomGiven ) { card->OUTPgeom = FALSE; } if ( !card->OUTPmeshGiven ) { card->OUTPmesh = FALSE; } if ( !card->OUTPmaterialGiven ) { card->OUTPmaterial = FALSE; } if ( !card->OUTPglobalsGiven ) { card->OUTPglobals = FALSE; } if ( !card->OUTPstatsGiven ) { card->OUTPstats = TRUE; } if ( !card->OUTProotFileGiven ) { card->OUTProotFile = copy(""); } if ( !card->OUTPfileTypeGiven ) { card->OUTPfileType = RAWFILE; } if ( !card->OUTPdopingGiven ) { card->OUTPdoping = TRUE; } if ( !card->OUTPpsiGiven ) { card->OUTPpsi = TRUE; } if ( !card->OUTPequPsiGiven ) { card->OUTPequPsi = FALSE; } if ( !card->OUTPvacPsiGiven ) { card->OUTPvacPsi = FALSE; } if ( !card->OUTPnConcGiven ) { card->OUTPnConc = TRUE; } if ( !card->OUTPpConcGiven ) { card->OUTPpConc = TRUE; } if ( !card->OUTPphinGiven ) { card->OUTPphin = FALSE; } if ( !card->OUTPphipGiven ) { card->OUTPphip = FALSE; } if ( !card->OUTPphicGiven ) { card->OUTPphic = FALSE; } if ( !card->OUTPphivGiven ) { card->OUTPphiv = FALSE; } if ( !card->OUTPeFieldGiven ) { card->OUTPeField = TRUE; } if ( !card->OUTPjcGiven ) { card->OUTPjc = FALSE; } if ( !card->OUTPjdGiven ) { card->OUTPjd = TRUE; } if ( !card->OUTPjnGiven ) { card->OUTPjn = TRUE; } if ( !card->OUTPjpGiven ) { card->OUTPjp = TRUE; } if ( !card->OUTPjtGiven ) { card->OUTPjt = FALSE; } if ( !card->OUTPuNetGiven ) { card->OUTPuNet = FALSE; } if ( !card->OUTPmunGiven ) { card->OUTPmun = FALSE; } if ( !card->OUTPmupGiven ) { card->OUTPmup = FALSE; } } return(OK); } /* * Name: OUTPsetup * Purpose: setup the output card * Formals: cardList: list of cards to setup * Returns: OK/E_PRIVATE * Users: numerical devices * Calls: OUTPcheck */ int OUTPsetup(OUTPcard *cardList) { int error; /* Check the card list */ if ((error = OUTPcheck( cardList )) != 0) return( error ); return( OK ); } tmpk8ny_4pz/src/ciderlib/input/doping.c0000644000175000017500000002104213546075722020306 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group Modified: 2001 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/numcards.h" #include "ngspice/numgen.h" #include "ngspice/dopdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define UM_TO_CM 1.0e-4 extern int DOPnewCard(GENcard**,GENmodel*); extern int DOPparam(int,IFvalue*,GENcard*); IFparm DOPpTable[] = { IP("domains", DOP_DOMAIN, IF_INTVEC, "Domain(s) to dope"), IP("uniform", DOP_UNIF, IF_FLAG, "Uniform doping"), IP("linear", DOP_LINEAR, IF_FLAG, "Linear graded doping"), IP("gaussian",DOP_GAUSS, IF_FLAG, "Gaussian doping"), IP("gdiff", DOP_GAUSS, IF_FLAG, "Gaussian diffusion"), IP("gimp", DOP_GAUSS, IF_FLAG, "Gaussian implantation"), IP("erfc", DOP_ERFC, IF_FLAG, "Error-function doping"), IP("errfc", DOP_ERFC, IF_FLAG, "Error-function doping"), IP("exponential",DOP_EXP, IF_FLAG, "Exponential doping"), IP("suprem3", DOP_SUPREM3, IF_FLAG, "Suprem3 doping"), IP("ascii", DOP_ASCII, IF_FLAG, "Ascii-input doping"), IP("infile", DOP_INFILE, IF_STRING, "Input-file name"), IP("lat.rotate",DOP_ROTATE_LAT,IF_FLAG, "Rotate principal profile"), IP("lat.unif",DOP_UNIF_LAT, IF_FLAG, "Uniform lateral falloff"), IP("lat.linf",DOP_LINEAR_LAT, IF_FLAG, "Linear lateral falloff"), IP("lat.gauss",DOP_GAUSS_LAT, IF_FLAG, "Gaussian lateral falloff"), IP("lat.erfc",DOP_ERFC_LAT, IF_FLAG, "Erfc lateral falloff"), IP("lat.exp", DOP_EXP_LAT, IF_FLAG, "Exponential lateral falloff"), IP("boron", DOP_BORON, IF_FLAG, "Boron impurities"), IP("phosphorus",DOP_PHOSP, IF_FLAG, "Phosphorus impurities"), IP("arsenic", DOP_ARSEN, IF_FLAG, "Arsenic impurities"), IP("antimony",DOP_ANTIM, IF_FLAG, "Antimony impurities"), IP("p.type", DOP_P_TYPE, IF_FLAG, "P-type impurities"), IP("acceptor",DOP_P_TYPE, IF_FLAG, "Acceptor impurities"), IP("n.type", DOP_N_TYPE, IF_FLAG, "N-type impurities"), IP("donor", DOP_N_TYPE, IF_FLAG, "Donor impurities"), IP("x.axis", DOP_X_AXIS, IF_FLAG, "X principal axis"), IP("y.axis", DOP_Y_AXIS, IF_FLAG, "Y principal axis"), IP("x.low", DOP_X_LOW, IF_REAL, "Low X edge"), IP("x.high", DOP_X_HIGH, IF_REAL, "High X edge"), IP("y.low", DOP_Y_LOW, IF_REAL, "Low Y edge"), IP("y.high", DOP_Y_HIGH, IF_REAL, "High Y edge"), IP("conc", DOP_CONC, IF_REAL, "Concentration"), IP("peak.conc",DOP_CONC, IF_REAL, "Peak concentration"), IP("location",DOP_LOCATION, IF_REAL, "Peak location"), IP("range", DOP_LOCATION, IF_REAL, "Peak location"), IP("char.length",DOP_CHAR_LEN,IF_REAL, "Characteristic length"), IP("ratio.lat",DOP_RATIO_LAT, IF_REAL, "Lateral ratio") }; IFcardInfo DOPinfo = { "doping", "Add dopant to domains of a device", NUMELEMS(DOPpTable), DOPpTable, DOPnewCard, DOPparam, NULL }; int DOPnewCard(GENcard **inCard, GENmodel *inModel) { DOPcard *tmpCard, *newCard; GENnumModel *model = (GENnumModel *)inModel; newCard = TMALLOC(DOPcard, 1); if (!newCard) { *inCard = NULL; return(E_NOMEM); } newCard->DOPnextCard = NULL; *inCard = (GENcard *) newCard; tmpCard = model->GENdopings; if (!tmpCard) { /* First in list */ model->GENdopings = newCard; } else { /* Go to end of list */ while (tmpCard->DOPnextCard) tmpCard = tmpCard->DOPnextCard; /* And add new card */ tmpCard->DOPnextCard = newCard; } return(OK); } int DOPparam(int param, IFvalue *value, GENcard *inCard) { int i; DOPcard *card = (DOPcard *)inCard; switch (param) { case DOP_DOMAIN: if ( !card->DOPdomainsGiven ) { card->DOPnumDomains = value->v.numValue; card->DOPdomains = TMALLOC(int, value->v.numValue); for ( i=0; i < card->DOPnumDomains; i++ ) { card->DOPdomains[i] = value->v.vec.iVec[i]; } card->DOPdomainsGiven = TRUE; } /* else: do nothing, can only define domains once */ break; case DOP_ROTATE_LAT: card->DOProtateLat = TRUE; card->DOProtateLatGiven = TRUE; break; case DOP_UNIF: if ( !card->DOPprofileTypeGiven ) { card->DOPprofileType = DOP_UNIF; card->DOPprofileTypeGiven = TRUE; } break; case DOP_UNIF_LAT: if ( !card->DOPlatProfileTypeGiven ) { card->DOPlatProfileType = DOP_UNIF; card->DOPlatProfileTypeGiven = TRUE; } break; case DOP_LINEAR: if ( !card->DOPprofileTypeGiven ) { card->DOPprofileType = DOP_LINEAR; card->DOPprofileTypeGiven = TRUE; } break; case DOP_LINEAR_LAT: if ( !card->DOPlatProfileTypeGiven ) { card->DOPlatProfileType = DOP_LINEAR_LAT; card->DOPlatProfileTypeGiven = TRUE; } break; case DOP_GAUSS: if ( !card->DOPprofileTypeGiven ) { card->DOPprofileType = DOP_GAUSS; card->DOPprofileTypeGiven = TRUE; } break; case DOP_GAUSS_LAT: if ( !card->DOPlatProfileTypeGiven ) { card->DOPlatProfileType = DOP_GAUSS; card->DOPlatProfileTypeGiven = TRUE; } break; case DOP_ERFC: if ( !card->DOPprofileTypeGiven ) { card->DOPprofileType = DOP_ERFC; card->DOPprofileTypeGiven = TRUE; } break; case DOP_ERFC_LAT: if ( !card->DOPlatProfileTypeGiven ) { card->DOPlatProfileType = DOP_ERFC; card->DOPlatProfileTypeGiven = TRUE; } break; case DOP_EXP: if ( !card->DOPprofileTypeGiven ) { card->DOPprofileType = DOP_EXP; card->DOPprofileTypeGiven = TRUE; } break; case DOP_EXP_LAT: if ( !card->DOPlatProfileTypeGiven ) { card->DOPlatProfileType = DOP_EXP; card->DOPlatProfileTypeGiven = TRUE; } break; case DOP_SUPREM3: if ( !card->DOPprofileTypeGiven ) { card->DOPprofileType = DOP_SUPREM3; card->DOPprofileTypeGiven = TRUE; } else if ( card->DOPprofileType == DOP_ASCII ) { card->DOPprofileType = DOP_SUPASCII; } break; case DOP_ASCII: if ( !card->DOPprofileTypeGiven ) { card->DOPprofileType = DOP_ASCII; card->DOPprofileTypeGiven = TRUE; } else if ( card->DOPprofileType == DOP_SUPREM3 ) { card->DOPprofileType = DOP_SUPASCII; } break; case DOP_BORON: if ( !card->DOPimpurityTypeGiven ) { card->DOPimpurityType = DOP_BORON; card->DOPimpurityTypeGiven = TRUE; } break; case DOP_PHOSP: if ( !card->DOPimpurityTypeGiven ) { card->DOPimpurityType = DOP_PHOSP; card->DOPimpurityTypeGiven = TRUE; } break; case DOP_ARSEN: if ( !card->DOPimpurityTypeGiven ) { card->DOPimpurityType = DOP_ARSEN; card->DOPimpurityTypeGiven = TRUE; } break; case DOP_ANTIM: if ( !card->DOPimpurityTypeGiven ) { card->DOPimpurityType = DOP_ANTIM; card->DOPimpurityTypeGiven = TRUE; } break; case DOP_P_TYPE: if ( !card->DOPimpurityTypeGiven ) { card->DOPimpurityType = DOP_P_TYPE; card->DOPimpurityTypeGiven = TRUE; } break; case DOP_N_TYPE: if ( !card->DOPimpurityTypeGiven ) { card->DOPimpurityType = DOP_N_TYPE; card->DOPimpurityTypeGiven = TRUE; } break; case DOP_X_AXIS: if ( !card->DOPaxisTypeGiven ) { card->DOPaxisType = DOP_X_AXIS; card->DOPaxisTypeGiven = TRUE; } break; case DOP_Y_AXIS: if ( !card->DOPaxisTypeGiven ) { card->DOPaxisType = DOP_Y_AXIS; card->DOPaxisTypeGiven = TRUE; } break; case DOP_INFILE: card->DOPinFile = value->sValue; card->DOPinFileGiven = TRUE; break; case DOP_X_LOW: card->DOPxLow = value->rValue * UM_TO_CM; card->DOPxLowGiven = TRUE; break; case DOP_X_HIGH: card->DOPxHigh = value->rValue * UM_TO_CM; card->DOPxHighGiven = TRUE; break; case DOP_Y_LOW: card->DOPyLow = value->rValue * UM_TO_CM; card->DOPyLowGiven = TRUE; break; case DOP_Y_HIGH: card->DOPyHigh = value->rValue * UM_TO_CM; card->DOPyHighGiven = TRUE; break; case DOP_CONC: card->DOPconc = fabs(value->rValue); card->DOPconcGiven = TRUE; break; case DOP_LOCATION: card->DOPlocation = value->rValue * UM_TO_CM; card->DOPlocationGiven = TRUE; break; case DOP_CHAR_LEN: card->DOPcharLen = value->rValue * UM_TO_CM; card->DOPcharLenGiven = TRUE; break; case DOP_RATIO_LAT: card->DOPratioLat = value->rValue; card->DOPratioLatGiven = TRUE; break; default: return(E_BADPARM); break; } return(OK); } tmpk8ny_4pz/src/ciderlib/input/models.c0000644000175000017500000000773213546075722020323 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group Modified: 2001 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/numcards.h" #include "ngspice/numgen.h" #include "ngspice/modldefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" extern int MODLnewCard(GENcard**,GENmodel*); extern int MODLparam(int,IFvalue*,GENcard*); IFparm MODLpTable[] = { IP("bgn", MODL_BGNW, IF_FLAG, "Bandgap narrowing"), IP("bgnw", MODL_BGNW, IF_FLAG, "Bandgap narrowing"), IP("tmpmob", MODL_TEMPMOB, IF_FLAG, "Temp-dependent mobility"), IP("tempmob", MODL_TEMPMOB, IF_FLAG, "Temp-dependent mobility"), IP("conmob", MODL_CONCMOB, IF_FLAG, "Conc-dependent mobility"), IP("concmob", MODL_CONCMOB, IF_FLAG, "Conc-dependent mobility"), IP("fldmob", MODL_FIELDMOB, IF_FLAG, "Lateral-field-dependent mobility"), IP("fieldmob",MODL_FIELDMOB, IF_FLAG, "Lateral-field-dependent mobility"), IP("trfmob",MODL_TRANSMOB, IF_FLAG, "Transverse-field-dependent surface mobility"), IP("transmob",MODL_TRANSMOB, IF_FLAG, "Transverse-field-dependent surface mobility"), IP("srfmob", MODL_SURFMOB, IF_FLAG, "Activate surface mobility"), IP("surfmob", MODL_SURFMOB, IF_FLAG, "Activate surface mobility"), IP("matchmob",MODL_MATCHMOB, IF_FLAG, "Matching low-field surface/bulk mobilities"), IP("srh", MODL_SRH, IF_FLAG, "SRH recombination"), IP("consrh", MODL_CONCTAU, IF_FLAG, "Conc-dependent SRH recomb"), IP("conctau", MODL_CONCTAU, IF_FLAG, "Conc-dependent SRH recomb"), IP("auger", MODL_AUGER, IF_FLAG, "Auger recombination"), IP("avalanche",MODL_AVAL, IF_FLAG, "Local avalanche generation") }; IFcardInfo MODLinfo = { "models", "Specify which physical models should be simulated", NUMELEMS(MODLpTable), MODLpTable, MODLnewCard, MODLparam, NULL }; int MODLnewCard(GENcard **inCard, GENmodel *inModel) { MODLcard *tmpCard, *newCard; GENnumModel *model = (GENnumModel *)inModel; tmpCard = model->GENmodels; if (!tmpCard) { /* First in list */ newCard = TMALLOC(MODLcard, 1); if (!newCard) { *inCard = NULL; return(E_NOMEM); } newCard->MODLnextCard = NULL; *inCard = (GENcard *) newCard; model->GENmodels = newCard; } else { /* Only one card of this type allowed */ *inCard = (GENcard *) tmpCard; } return(OK); } int MODLparam(int param, IFvalue *value, GENcard *inCard) { MODLcard *card = (MODLcard *)inCard; switch (param) { case MODL_BGNW: card->MODLbandGapNarrowing = value->iValue; card->MODLbandGapNarrowingGiven = TRUE; break; case MODL_TEMPMOB: card->MODLtempDepMobility = value->iValue; card->MODLtempDepMobilityGiven = TRUE; break; case MODL_CONCMOB: card->MODLconcDepMobility = value->iValue; card->MODLconcDepMobilityGiven = TRUE; break; case MODL_TRANSMOB: card->MODLtransDepMobility = value->iValue; card->MODLtransDepMobilityGiven = TRUE; break; case MODL_FIELDMOB: card->MODLfieldDepMobility = value->iValue; card->MODLfieldDepMobilityGiven = TRUE; break; case MODL_SURFMOB: card->MODLsurfaceMobility = value->iValue; card->MODLsurfaceMobilityGiven = TRUE; break; case MODL_MATCHMOB: card->MODLmatchingMobility = value->iValue; card->MODLmatchingMobilityGiven = TRUE; break; case MODL_SRH: card->MODLsrh = value->iValue; card->MODLsrhGiven = TRUE; break; case MODL_CONCTAU: card->MODLconcDepLifetime = value->iValue; card->MODLconcDepLifetimeGiven = TRUE; break; case MODL_AUGER: card->MODLauger = value->iValue; card->MODLaugerGiven = TRUE; break; case MODL_AVAL: card->MODLavalancheGen = value->iValue; card->MODLavalancheGenGiven = TRUE; break; default: return(E_BADPARM); break; } return(OK); } tmpk8ny_4pz/src/ciderlib/input/mesh.c0000644000175000017500000000716513546075722017774 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group Modified: 2001 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/numcards.h" #include "ngspice/numgen.h" #include "ngspice/meshdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" extern int XMSHnewCard(GENcard**,GENmodel*); extern int YMSHnewCard(GENcard**,GENmodel*); extern int MESHparam(int,IFvalue*,GENcard*); IFparm MESHpTable[] = { IP("location",MESH_LOCATION, IF_REAL, "Meshline location"), IP("width", MESH_WIDTH, IF_REAL, "Distance to next line"), IP("number", MESH_NUMBER, IF_INTEGER, "Meshline number"), IP("node", MESH_NUMBER, IF_INTEGER, "Meshline number"), IP("ratio", MESH_RATIO, IF_REAL, "Suggested spacing ratio"), IP("h.start", MESH_H_START, IF_REAL, "Spacing at start of interval"), IP("h1", MESH_H_START, IF_REAL, "Spacing at start of interVal"), IP("h.end", MESH_H_END, IF_REAL, "Spacing at end of interval"), IP("h2", MESH_H_END, IF_REAL, "Spacing at end of interval"), IP("h.max", MESH_H_MAX, IF_REAL, "Max spacing during interval"), IP("h3", MESH_H_MAX, IF_REAL, "Max spacing during interval") }; IFcardInfo XMSHinfo = { "x.mesh", "Location of mesh lines", NUMELEMS(MESHpTable), MESHpTable, XMSHnewCard, MESHparam, NULL }; IFcardInfo YMSHinfo = { "y.mesh", "Location of mesh lines", NUMELEMS(MESHpTable), MESHpTable, YMSHnewCard, MESHparam, NULL }; int XMSHnewCard(GENcard **inCard, GENmodel *inModel) { MESHcard *tmpCard, *newCard; GENnumModel *model = (GENnumModel *)inModel; newCard = TMALLOC(MESHcard, 1); if (!newCard) { *inCard = NULL; return(E_NOMEM); } newCard->MESHnextCard = NULL; *inCard = (GENcard *) newCard; tmpCard = model->GENxMeshes; if (!tmpCard) { /* First in list */ model->GENxMeshes = newCard; } else { /* Go to end of list */ while (tmpCard->MESHnextCard) tmpCard = tmpCard->MESHnextCard; /* And add new card */ tmpCard->MESHnextCard = newCard; } return(OK); } int YMSHnewCard(GENcard **inCard, GENmodel *inModel) { MESHcard *tmpCard, *newCard; GENnumModel *model = (GENnumModel *)inModel; newCard = TMALLOC(MESHcard, 1); if (!newCard) { *inCard = NULL; return(E_NOMEM); } newCard->MESHnextCard = NULL; *inCard = (GENcard *) newCard; tmpCard = model->GENyMeshes; if (!tmpCard) { /* First in list */ model->GENyMeshes = newCard; } else { /* Go to end of list */ while (tmpCard->MESHnextCard) tmpCard = tmpCard->MESHnextCard; /* And add new card */ tmpCard->MESHnextCard = newCard; } return(OK); } int MESHparam(int param, IFvalue *value, GENcard *inCard) { MESHcard *card = (MESHcard *)inCard; switch (param) { case MESH_LOCATION: card->MESHlocation = value->rValue; card->MESHlocationGiven = TRUE; break; case MESH_WIDTH: card->MESHwidth = value->rValue; card->MESHwidthGiven = TRUE; break; case MESH_H_START: card->MESHhStart = value->rValue; card->MESHhStartGiven = TRUE; break; case MESH_H_END: card->MESHhEnd = value->rValue; card->MESHhEndGiven = TRUE; break; case MESH_H_MAX: card->MESHhMax = value->rValue; card->MESHhMaxGiven = TRUE; break; case MESH_RATIO: card->MESHratio = value->rValue; card->MESHratioGiven = TRUE; break; case MESH_NUMBER: card->MESHnumber = value->iValue; card->MESHnumberGiven = TRUE; break; default: return(E_BADPARM); break; } return(OK); } tmpk8ny_4pz/src/ciderlib/input/meshset.c0000644000175000017500000010365413546075722020510 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group Modified: 2001 Paolo Nenzi **********/ /********** Mesh Setup & Query Routines. **********/ /* Imports */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/meshdefs.h" #include "ngspice/meshext.h" #include "ngspice/gendev.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* Local Constants */ #define CMP_TOL 1.0e-9 /* Tolerance on (double) comparisons */ #define RAT_TOL 1.0e-6 /* Error allowed in ratio calc's */ #define RAT_LIM 50 /* Maximum number of ratio iterations */ #define UM_TO_CM 1.0e-4 /* Micron to centimeter conversion */ /* Forward Declarations */ static int oneSideSpacing( double, double, double, double *, int * ); static int twoSideSpacing( double, double, double, double, double *, double *, int *, int * ); static int maxLimSpacing( double, double, double, double, double *, int *, int * ); static int oneSideRatio( double, double, double *, int ); static int twoSideRatio( double, double, double, double *, int, int ); static int MESHspacing( MESHcard *, double *, double *, int *, int *, int * ); /* END OF HEADER */ /* * Name: MESHmkArray * Purpose: Turn a coordinate list into a coordinate array. * Formals: < I > coordList: a sorted list of all the coordinates * < I > numCoords: the length of the listi, if 0 find it * Returns: a (double) array of those coordinates, with length in a[0] * Users: routines used to create the final mesh * Calls: (none) */ double * MESHmkArray(MESHcoord *coordList, int numCoords) { double *array = NULL; MESHcoord *coord; if ( numCoords <= 0 ) { numCoords = 0; for ( coord = coordList; coord != NULL; coord = coord->next ) { numCoords++; } } if ( numCoords != 0 ) { XALLOC( array, double, 1 + numCoords ); numCoords = 0; array[ 0 ] = (double) numCoords; numCoords = 1; for ( coord = coordList; coord != NULL; coord = coord->next ) { array[ numCoords++ ] = coord->location; } return array; } else { return NULL; } /* NOTREACHED */ } /* * Name: MESHiBounds * Purpose: Find the minimum and maximum indices in a mesh list. * Formals: < I > coordList: a sorted list of all the coordinates * < O > ixMin: the minimum index * < O > ixMax: the maximum index * Returns: (none) * Users: routines wanting to fine the ends of a mesh * Calls: (none) */ void MESHiBounds(MESHcoord *coordList, int *ixMin, int *ixMax) { MESHcoord *last; if (coordList) { *ixMin = coordList->number; for ( last = coordList; last->next != NULL; last = last->next ) ; *ixMax = last->number; } else { *ixMin = *ixMax = -1; } } /* * Name: MESHlBounds * Purpose: Find the minimum and maximum locations in a mesh list. * Formals: < I > coordList: a sorted list of all the coordinates * < O > lcMin: the minimum location * < O > lcMax: the maximum location * Returns: (none) * Users: routines wanting to find the ends of a mesh * Calls: (none) */ void MESHlBounds(MESHcoord *coordList, double *lcMin, double *lcMax) { MESHcoord *last; if (coordList) { *lcMin = coordList->location; for ( last = coordList; last->next != NULL; last = last->next ) ; *lcMax = last->location; } else { *lcMin = *lcMax = 0.0; } } /* * Name: MESHlocate * Purpose: Finds the index of the MESHcoord nearest to a location. * Formals: < I > coordList: a sorted list of all available coordinates * < I > location: the location to find * Returns: index / -1 (list empty) * Users: routines that convert distances to indices * Calls: (none) */ int MESHlocate(MESHcoord *coordList, double location) { MESHcoord *coord, *prevCoord = NULL; int index; /* Find the coordinates which flank the location. */ for ( coord = coordList; coord != NULL; coord = coord->next ) { if ( coord->location > location ) break; prevCoord = coord; } /* Get the index. */ if (prevCoord && coord) { if ( location <= (prevCoord->location + coord->location) / 2.0 ) { index = prevCoord->number; } else { index = coord->number; } } else if ( coord ) { index = coord->number; } else if ( prevCoord ) { index = prevCoord->number; } else { index = -1; } return( index ); } /* * Name: MESHcheck * Purpose: Checks a list of mesh cards for input errors. * Formals: cardList: pointer to head of linked list of MESHcard's * < I > dim: 'x', 'y' or 'z' dimension * Returns: OK / E_PRIVATE * Users: setup routines * Calls: error-message handler */ int MESHcheck(char dim, MESHcard *cardList) { MESHcard *card; int cardNum = 0; double locStart = 0.0, locEnd; double ratio; int error = OK; if ( cardList == NULL ) { SPfrontEnd->IFerrorf( ERR_FATAL, "%c.mesh card list is empty", dim ); locEnd = locStart; return( E_PRIVATE ); } for ( card = cardList; card != NULL; card = card->MESHnextCard ) { cardNum++; /* Am I trying to find number of nodes directly & indirectly? */ if (card->MESHnumberGiven && card->MESHratioGiven) { SPfrontEnd->IFerrorf( ERR_INFO, "%c.mesh card %d uses both number and ratio - number ignored", dim, cardNum ); card->MESHnumberGiven = FALSE; } /* Will I be able to locate endpoints? */ if (!card->MESHlocationGiven && !card->MESHwidthGiven) { SPfrontEnd->IFerrorf( ERR_FATAL, "%c.mesh card %d has no distances", dim, cardNum ); locEnd = locStart; error = E_PRIVATE; } else if (card->MESHlocationGiven && card->MESHwidthGiven) { SPfrontEnd->IFerrorf( ERR_INFO, "%c.mesh card %d uses both location and width - location ignored", dim, cardNum ); card->MESHlocationGiven = FALSE; locEnd = locStart + card->MESHwidth; } else if (card->MESHlocationGiven) { locEnd = card->MESHlocation; if (cardNum == 1) locStart = locEnd; } else { locEnd = locStart + card->MESHwidth; } /* Are the endpoints in the wrong order? */ if ( locEnd - locStart < - CMP_TOL ) { SPfrontEnd->IFerrorf( ERR_FATAL, "%c.mesh card %d uses negative width", dim, cardNum ); error = E_PRIVATE; } /* Are the endpoints too close together? */ else if ( (locEnd - locStart <= CMP_TOL) ) { if ( !(cardNum == 1 && locStart == locEnd) ) { SPfrontEnd->IFerrorf( ERR_INFO, "%c.mesh card %d has negligible width - ignored", dim, cardNum ); locStart = locEnd; } } /* Is the ratio out of the acceptable range? */ if (card->MESHratioGiven) { ratio = card->MESHratio; } else { ratio = 1.0; } if ((ratio < 1.0) || (ratio > 10.0)) { SPfrontEnd->IFerrorf( ERR_INFO, "%c.mesh card %d has ratio out of range - reset to 1.0", dim, cardNum ); ratio = 1.0; } /* Check sizes of h.start, h.end and h.max. */ if ((card->MESHhStartGiven && (card->MESHhStart <= 0.0)) || (card->MESHhEndGiven && (card->MESHhEnd <= 0.0)) || (card->MESHhMaxGiven && (card->MESHhMax <= 0.0))) { SPfrontEnd->IFerrorf( ERR_FATAL, "%c.mesh card %d wants to use a non-positive spacing", dim, cardNum ); error = E_PRIVATE; } /* Is the max spacing being used improperly? */ if (card->MESHhMaxGiven && ( ( card->MESHhStartGiven && card->MESHhEndGiven) || (!card->MESHhStartGiven && !card->MESHhEndGiven))) { SPfrontEnd->IFerrorf( ERR_FATAL, "%c.mesh card %d needs to use one of h.start or h.end with h.max", dim, cardNum ); error = E_PRIVATE; } else if (card->MESHhMaxGiven && card->MESHhStartGiven) { if (card->MESHhStart > card->MESHhMax) { SPfrontEnd->IFerrorf( ERR_FATAL, "%c.mesh card %d wants h.start > h.max", dim, cardNum ); error = E_PRIVATE; } else { card->MESHhEnd = card->MESHhMax; } } else if (card->MESHhMaxGiven && card->MESHhEndGiven) { if (card->MESHhEnd > card->MESHhMax) { SPfrontEnd->IFerrorf( ERR_FATAL, "%c.mesh card %d wants h.end > h.max", dim, cardNum ); error = E_PRIVATE; } else { card->MESHhStart = card->MESHhMax; } } /* Return now if anything has failed. */ if (error) return(error); /* Note: at this point we still aren't sure whether node numbers are OK. */ /* Fill-in newly computed information. */ card->MESHlocStart = locStart; card->MESHlocEnd = locEnd; card->MESHratio = ratio; /* Advance current location. */ locStart = locEnd; } return(OK); } /* * Name: geomSum * Purpose: Computes the sum of n terms of a geometric series. * Formals: < I > r: ratio of one term to the next * < I > n: number of terms to sum * Returns: sum / 0.0 * Users: spacing routines * Calls: pow */ static double geomSum(double r, double n) { double sum; if ((r < 0.0) || (n <= 0.0)) { sum = 0.0; } else if (r == 0.0) { sum = 1.0; } else { if (ABS(r - 1.0) < 1.0e-4) { sum = n * (1.0 + (n - 1.0)*(r - 1.0)/2.0); } else { sum = (1.0 - pow(r,n))/(1.0 - r); } } return( sum ); } /* * Name: addCoord * Purpose: add a new coordinate to the tail of a linked list * Formals: head: head of linked list * tail: tail of linked list * < I > number: node number of coordinate * < I > location: location of coordinate * Returns: OK / E_NOMEM * Users: MESHsetup * Calls: memory allocator */ static int addCoord(MESHcoord **head, MESHcoord **tail, int number, double location) { MESHcoord *newCoord; if (*head == NULL) { RALLOC( *tail, MESHcoord, 1 ); newCoord = *head = *tail; } else { RALLOC( (*tail)->next, MESHcoord, 1 ); newCoord = *tail = (*tail)->next; } newCoord->next = NULL; newCoord->number = number; newCoord->location = location * UM_TO_CM; return(OK); } /* * Name: MESHsetup * Purpose: Converts a list of input MESHcard's to a list of MESHcoord's. * Expansion is performed so that node numbers in the final list * increase by one from coordinate to coordinate. The list * will grow until the input ends or a bad card is found. * Formals: < I > dim: 'x', 'y', or 'z' dimension * cardList: the list of input cards * < O > coordList: the final list of coordinates * < O > numCoords: the number of coords in coordList * Returns: OK / E_PRIVATE * Users: numerical device setup routines * Calls: MESHcheck, MESHspacing, error-message handler */ int MESHsetup(char dim, MESHcard *cardList, MESHcoord **coordList, int *numCoords) { MESHcard *card; MESHcoord *endCoord; int cardNum = 0; int i, totCoords, numStart=1, numEnd = 0, nspStart, nspEnd, nspMax, nspLeft; double locStart, locEnd = 0.0, location, space; double hStart, hEnd, hMax, hBig; double ratStart, ratEnd; int error = OK; /* Initialize list of coordinates. */ *coordList = endCoord = NULL; *numCoords = totCoords = 0; /* Check the card list. */ if ((error = MESHcheck( dim, cardList )) != 0) return( error ); /* Print info header. */ #ifdef NOTDEF fprintf( stdout, " %c.Mesh Card Information\n", toupper_c(dim) ); fprintf( stdout, "-------------------------\n" ); fprintf( stdout, " %3s %3s %3s %9s %9s %9s %9s %9s %9s\n", "n.s", "n.m", "n.e", "l.e", "h.s", "h.e", "h.m", "r.s", "r.e" ); #endif for ( card = cardList; card != NULL; card = card->MESHnextCard ) { cardNum++; locStart = card->MESHlocStart; locEnd = card->MESHlocEnd; if (locEnd == locStart) { /* This card has no width. */ /* First update the node number. */ if (card->MESHnumberGiven) { if (card->MESHlocationGiven) { /* Absolute node number given */ numEnd = card->MESHnumber; if (cardNum == 1) numStart = numEnd; } else { /* Number of spaces instead */ numEnd = numStart + card->MESHnumber; } } /* Are node numbers in the wrong order? */ if ( numEnd < numStart ) { SPfrontEnd->IFerrorf( ERR_FATAL, "%c.mesh card %d has out-of-order node numbers ( %d > %d )", dim, cardNum, numStart, numEnd ); error = E_PRIVATE; } } else { /* This card has some width. */ /* First update the node number. */ if (card->MESHnumberGiven) { /* Uniform mesh */ if (card->MESHlocationGiven) { /* Absolute node number given */ numEnd = card->MESHnumber; if (cardNum == 1) numStart = numEnd; nspStart = numEnd - numStart; } else { /* Number of spaces instead */ nspStart = card->MESHnumber; numEnd = numStart + nspStart; } ratStart = 1.0; ratEnd = 0.0; nspEnd = 0; nspMax = 0; if ( nspStart > 0 ) { card->MESHhStart = (locEnd - locStart) / (double)nspStart; card->MESHhEnd = 0.0; } } else { /* Nonuniform mesh */ error = MESHspacing( card, &ratStart, &ratEnd, &nspStart, &nspMax, &nspEnd ); if (error) { SPfrontEnd->IFerrorf( ERR_FATAL, "%c.mesh card %d can't be spaced automatically", dim, cardNum ); return( error ); } else { numEnd = numStart + nspStart + nspMax + nspEnd; } } /* Are the node numbers properly ordered? */ if ( numEnd <= numStart ) { SPfrontEnd->IFerrorf( ERR_FATAL, "%c.mesh card %d results in out-of-order node numbers ( %d > %d )", dim, cardNum, numStart, numEnd ); error = E_PRIVATE; } else { /* Create the new MESHcoord's. */ hStart = card->MESHhStart; hEnd = card->MESHhEnd; hMax = card->MESHhMax; hBig = 0.0; /* Generate the first coord in this section */ location = locStart; error = addCoord( coordList, &endCoord, ++totCoords, location ); if (error) return(error); /* Generate new coords for the starting section. */ nspLeft = nspStart + nspMax + nspEnd; if ( nspStart != 0 ) { hBig = MAX( hBig, hStart*pow( ratStart, (double) (nspStart - 1) ) ); space = hStart; for ( i = 0; (i < nspStart)&&(nspLeft > 1); i++, nspLeft-- ) { location += space; space *= ratStart; error = addCoord( coordList, &endCoord, ++totCoords, location ); if (error) return(error); } } /* Generate new coords for the maximum section. */ if ( nspMax != 0 ) { hBig = MAX( hBig, hMax ); space = hMax; for ( i = 0; (i < nspMax)&&(nspLeft > 1); i++, nspLeft-- ) { location += space; error = addCoord( coordList, &endCoord, ++totCoords, location ); if (error) return(error); } } /* Generate new coords for the ending section. */ if ( nspEnd != 0 ) { hBig = MAX( hBig, hEnd*pow( ratEnd, (double) (nspEnd - 1) ) ); space = hEnd * pow( ratEnd, (double) (nspEnd - 1) ); for ( i = 0; (i < nspEnd)&&(nspLeft > 1); i++, nspLeft-- ) { location += space; space /= ratEnd; error = addCoord( coordList, &endCoord, ++totCoords, location ); if (error) return(error); } } #ifdef NOTDEF fprintf( stdout, " %9.5f\n", locStart ); fprintf( stdout, " %3d %3d %3d %9.5f %9.5f %9.5f %9.5f %9.5f\n", nspStart, nspMax, nspEnd, hStart, hEnd, hBig, ratStart, ratEnd ); #endif } } /* Return now if anything has failed. */ if (error) return(error); /* Advance the node number. */ numStart = numEnd; } /* * If the mesh is not empty, then the loop above has exited before * adding the final coord to the list. So we need to do that now. */ if (*coordList != NULL) { error = addCoord( coordList, &endCoord, ++totCoords, locEnd ); if (error) return(error); #ifdef NOTDEF fprintf( stdout, " %9.5f\n", locEnd ); #endif } #ifdef NOTDEF fprintf( stdout, "\n" ); #endif *numCoords = totCoords; return(OK); } /* * Name: MESHspacing * Purpose: Find ratios, spacings, and node numbers for a mesh span. * Formals: < I > card: the input card for this span * < O > rS: ratio found for spacings at start of span * < O > rE: ratio found for spacings at end of span * < O > nS: number of start spaces * < O > nM: number of max spaces * < O > nE: number of end spaces * Returns: OK / E_PRIVATE * Users: MESHsetup * Calls: oneSideSpacing, twoSideSpacing, maxLimSpacing */ static int MESHspacing(MESHcard *card, double *rS, double *rE, int *nS, int *nM, int *nE) { int error = OK; int hStartGiven = card->MESHhStartGiven; int hEndGiven = card->MESHhEndGiven; int hMaxGiven = card->MESHhMaxGiven; double hS = card->MESHhStart; double hE = card->MESHhEnd; double hM = card->MESHhMax; double rW = card->MESHratio; /* The ratio wanted */ double width; width = card->MESHlocEnd - card->MESHlocStart; /* Call subsidiary routine depending on how flags are set. */ if (!hStartGiven && hEndGiven && !hMaxGiven ) { /* End section only */ error = oneSideSpacing( width, hE, rW, rE, nE ); *nM = *nS = 0; *rS = 0.0; } else if ( hStartGiven && !hEndGiven && !hMaxGiven ) { /* Start section only */ error = oneSideSpacing( width, hS, rW, rS, nS ); *nM = *nE = 0; *rE = 0.0; } else if ( hStartGiven && hEndGiven && !hMaxGiven ) { /* Both a start and an end section */ error = twoSideSpacing( width, hS, hE, rW, rS, rE, nS, nE ); *nM = 0; } else if ( hStartGiven && !hEndGiven && hMaxGiven ) { /* Limited size in end section */ error = maxLimSpacing( width, hS, hM, rW, rS, nS, nM ); *nE = 0; *rE = 1.0; } else if (!hStartGiven && hEndGiven && hMaxGiven ) { /* Limited size in start section */ error = maxLimSpacing( width, hE, hM, rW, rE, nE, nM ); *nS = 0; *rS = 1.0; } else if ( hStartGiven && hEndGiven && hMaxGiven ) { /* Limited size somewhere in the middle */ /* NOT IMPLEMENTED */ /* error = midLimSpacing( width, hS, hE, hM, rW, rS, rE, nS, nE, nM ); */ error = E_PRIVATE; } else { /* Illegal situations */ error = E_PRIVATE; } return( error ); } /* * Name: stepsInSpan * Purpose: Finds the number of steps needed to go a given distance * while increasing each step by a given ratio. * Formals: < I > width: size of total distance * < I > spacing: size of initial step * < O > ratio: increase with each step * Returns: number of steps * Users: spacing routines * Calls: log */ static double stepsInSpan(double width, double spacing, double ratio) { double nSpaces; /* Handle ratios near 1.0 specially. */ if ( ABS(ratio - 1.0) < 1.0e-4 ) { nSpaces = (width/spacing); } else { nSpaces = (log(1.0-width*(1.0-ratio)/spacing)/log(ratio)); } return(nSpaces); } /* * Name: oneSideSpacing * Purpose: Find compatible number of spaces and ratio when the spacing * is constrained at one end of a span. * Formals: < I > width: width of the span * < I > spacing: spacing constraint * < I > rWanted: ideal ratio of one spacing to the next * < O > rFound: actual ratio discovered * < O > nFound: number of spaces found * Returns: OK / E_PRIVATE * Users: MESHspacing * Calls: oneSideRatio, stepsInSpan */ static int oneSideSpacing(double width, double spacing, double rWanted, double *rFound, int *nFound) { int nSpaces; /* Number of spaces */ double rTemp1, rTemp2; /* For temporarily calc'ed ratios */ /* Make sure we can take at least one step. */ if ( width < spacing ) { SPfrontEnd->IFerrorf( ERR_WARNING, "one-sided spacing can't find an acceptable solution\n"); *rFound = 0.0; *nFound = 0; return(E_PRIVATE); } nSpaces = (int)stepsInSpan( width, spacing, rWanted ); /* Check to see whether a flat span is acceptable. */ if ( ABS(nSpaces*spacing - width) < 1.0e-3*spacing ) { *rFound = 1.0; *nFound = nSpaces; return( OK ); } else if ( ABS((nSpaces+1)*spacing - width) < 1.0e-3*spacing ) { *rFound = 1.0; *nFound = nSpaces + 1; return( OK ); } /* Too much error involved in flat span means we have to ramp up. */ rTemp1 = rTemp2 = rWanted; oneSideRatio( width, spacing, &rTemp1, nSpaces ); oneSideRatio( width, spacing, &rTemp2, nSpaces+1 ); if ( (rTemp1 == 0.0) && (rTemp2 == 0.0) ) { SPfrontEnd->IFerrorf( ERR_WARNING, "one-sided spacing can't find an acceptable solution\n"); *rFound = 0.0; *nFound = 0; return(E_PRIVATE); } else if (rTemp1 == 0.0) { *rFound = rTemp2; *nFound = nSpaces + 1; } else if (rTemp2 == 0.0) { *rFound = rTemp1; *nFound = nSpaces; } else if (ABS(rWanted-rTemp2) < 4.0*ABS(rWanted-rTemp1)) { *rFound = rTemp2; *nFound = nSpaces + 1; } else { *rFound = rTemp1; *nFound = nSpaces; } return(OK); } /* * Name: oneSideRatio * Purpose: Compute the unique ratio 'r' which satisfies the following * constraint: w = hs*(1-r^ns)/(1-r) * Formals: < I > w : width of a span * < I > hs: step at one end of the span * argRatio: ratio found, contains initial guess at entry * < I > ns: number of spaces to use in the span * Returns: OK / E_PRIVATE * Users: oneSideSpacing, maxLimSpacing * Calls: error-message handler */ static int oneSideRatio(double w, double hs, double *argRatio, int ns) { double funcLow, funcUpp, func; double ratLow, ratUpp, ratio = *argRatio; double dns = (double)ns; int i; /* Get lower bound on solution. */ ratLow = 0.0; funcLow = hs - w; if ((funcLow > 0.0) || ((funcLow < 0.0)&&(ns <= 1))) { *argRatio = 0.0; return(E_PRIVATE); } /* Find upper bound on solution. */ ratUpp = ratio; do { ratUpp += 0.2; funcUpp = hs*geomSum(ratUpp, dns) - w; } while (funcUpp < 0.0); /* Do bisections to find new ratio. */ for ( i=0; i < RAT_LIM; i++ ) { ratio = ratLow + 0.5 * (ratUpp - ratLow); func = hs*geomSum(ratio, dns) - w; if ((func == 0.0) || (ratUpp - ratLow < RAT_TOL)) break; funcLow = hs*geomSum(ratLow, dns) - w; if (funcLow*func > 0.0) { ratLow = ratio; } else { ratUpp = ratio; } } if (i == RAT_LIM) { /* No solution found */ *argRatio = 0.0; return(E_PRIVATE); } else { *argRatio = ratio; return(OK); } } /* Name: quadRoots * Purpose: Find real roots of a quadratic equation if they exist. * Formals: < I > a, b, c: coefficients in ax^2+bx+c * < O > rp: the root using the positive sqrt value * < O > rn: the root using the negative sqrt value * Returns: TRUE / FALSE * Users: general * Calls: sqrt */ static int quadRoots(double a, double b, double c, double *rp, double *rn) { double d; /* Discriminant */ double f; /* Root factor */ if (a == 0.0) return(FALSE); if (b == 0.0) { d = -c/a; if (d >= 0.0) { *rn = - (*rp = sqrt(d)); } else { return(FALSE); } } else { d = 1.0 - 4*a*c/(b*b); if (d >= 0.0) { f = (1.0 + sqrt(d))/2.0; *rp = - (b*f)/a; *rn = - c/(b*f); } else { return(FALSE); } } return(TRUE); } /* * Name: twoSideSpacing * Purpose: Find a compatible set of ratios and node numbers when the * spacing is constrained at both ends of a span. * Formals: < I > width: size the span * < I > hStart: spacing at start of span * < I > hEnd: spacing at end of span * < I > rWanted: desired ratio of spacings * < O > rSfound: ratio found for start of span * < O > rEfound: ratio found for end of span * < O > nSfound: number of start spaces * < O > nEfound: number of end spaces * Returns: OK / E_PRIVATE * Users: MESHspacing * Calls: twoSideRatio, error-message handler */ static int twoSideSpacing(double width, double hStart, double hEnd, double rWanted, double *rSfound, double *rEfound, int *nSfound, int *nEfound) { int nSpaceS; /* Number of spaces at the start */ int nSpaceE; /* Number of spaces at the end */ int nSpaceT; /* Number of spaces total */ double dSpaceS; /* Exact value of nSpaceS */ double dSpaceE; /* Exact value of nSpaceE */ double dSpaceT; /* Exact value of nSpaceT */ double dDiff; /* Difference between dSpaceS & dSpaceE */ double remaining; /* Length of span between hs and he */ double rTempS, rTempE; /* For temporarily calc'ed ratios */ double hsLast, heLast; /* Used to ensure ratio is valid */ double rConnect; /* " */ double hMax, hMin; /* Max and min between hStart and hEnd */ double tmp; int i; /* Indices for searching for best ratio */ int solnFound; /* For partial search termination */ int solnError; /* For partial search termination */ int nSaveS = 0; /* Saves best solution so far */ int nSaveE = 0; /* " */ double rSaveS = 0.0; /* " */ double rSaveE = 0.0; /* " */ /* * It's an error if there isn't enough width to fit in both spaces. */ remaining = width - (hStart + hEnd); if (remaining < 0.0) { SPfrontEnd->IFerrorf( ERR_WARNING, "two-sided spacing can't find an acceptable solution\n"); *rSfound = *rEfound = 0.0; *nSfound = *nEfound = 0; return(E_PRIVATE); } /* Adjust ratio wanted to acceptable limits, and find number of extra spaces * needed to bring the smaller ratio up to the size of the bigger one. */ hMax = MAX( hStart, hEnd ); hMin = MIN( hStart, hEnd ); if ( hMax == hMin ) { dDiff = 0.0; } else { /* Does a solution exist if we allow the number of spaces to take on * a non-integral value? * If not, then adjust the ratio to lie within acceptable bounds. * Since the choice of whether or not to require a peak in the plot * of "spacing vs number" is arbitrary, both cases are checked, and * the one that gives the closest answer to the original ratio * is chosen. The function quadRoots is used to find limits for the * ratio in the peaked case. The unpeaked case can find a lower * bound more easily. */ if (quadRoots( hMax, hMax - width, remaining, &rTempS, &rTempE )) { rWanted = MIN(rWanted, rTempS); rTempS = 1.0 + (hMax - hMin)/(width - hMax); rWanted = MAX(rWanted, rTempS); if ((rWanted != rTempS) && (rTempE > rWanted)) { if (ABS(rWanted - rTempE) < 4.0*ABS(rWanted - rTempS)) { rWanted = rTempE; } else { rWanted = rTempS; } } } else { /* Complex roots */ rTempS = 1.0 + (hMax - hMin)/(width - hMax); rWanted = MAX(rWanted, rTempS); } dDiff = log(hMax/hMin)/log(rWanted); dDiff *= ( hStart < hEnd ) ? -1.0 : 1.0; } /* Find the number of spaces at the start and at the end. */ /* Handle ratio near 1.0 carefully. */ if ( ABS(rWanted - 1.0) < 1.0e-4 ) { dSpaceS = (width - dDiff*hEnd)/(hStart+hEnd); } else { tmp = (hStart+hEnd-width+width*rWanted)/ (hStart+hEnd*pow(rWanted,dDiff)); dSpaceS = log(tmp)/log(rWanted); } dSpaceE = dSpaceS + dDiff; dSpaceT = dSpaceS + dSpaceE; /* Search until an acceptable solution is found. Some * cases may be repeated, but no harm is done. */ for (i = 0; i <= 1; i++) { nSpaceT = (int)dSpaceT + i; /* Guess a starting point which is guaranteed to have a solution. */ nSpaceS = MIN( nSpaceT - 1, MAX( 4, (int) dSpaceS) ); nSpaceE = nSpaceT - nSpaceS; solnFound = solnError = FALSE; while ( !solnFound ) { /* Take care of special cases first. */ if ((nSpaceE <= 0) || (nSpaceS <= 0)) { solnError = TRUE; } else if (nSpaceT == 2) { /* Check for exact fit */ if (ABS(remaining) < 1.0e-3*hMax ) { rTempS = hEnd / hStart; rTempE = 1.0 / rTempS; nSpaceS = nSpaceE = 1; } else { solnError = TRUE; } } else if (nSpaceT == 3) { /* Trivial to solve */ if (remaining > 0.0) { rTempS = remaining / hStart; rTempE = remaining / hEnd; nSpaceS = 2; /* Always put middle space at start */ nSpaceE = 1; } else { solnError = TRUE; } } else { /* Finally, the general case */ if (remaining > 0.0) { rTempS = rWanted; twoSideRatio( width, hStart, hEnd, &rTempS, nSpaceS, nSpaceE ); rTempE = rTempS; } else { solnError = TRUE; } } if ( solnError ) break; /* while loop */ /* Check whether the ratio discovered is good or not. */ hsLast = hStart*pow(rTempS, (double)nSpaceS-1.0); heLast = hEnd*pow(rTempE, (double)nSpaceE-1.0); rConnect = heLast/hsLast; if ( rConnect < 1.0/rTempE - RAT_TOL ) { nSpaceS--; nSpaceE++; } else if ( rConnect > rTempS + RAT_TOL ) { nSpaceS++; nSpaceE--; } else { solnFound = TRUE; /* Save if this solution is better than the previous one. */ if (ABS(rWanted - rTempS) <= ABS(rWanted - rSaveS)) { rSaveS = rTempS; rSaveE = rTempE; nSaveS = nSpaceS; nSaveE = nSpaceE; } } } } /* Prepare return values. */ if (rSaveS == 0.0) { SPfrontEnd->IFerrorf( ERR_WARNING, "two-sided spacing can't find an acceptable solution\n"); *rSfound = *rEfound = 0.0; *nSfound = *nEfound = 0; return(E_PRIVATE); } else { *rSfound = rSaveS; *rEfound = rSaveE; *nSfound = nSaveS; *nEfound = nSaveE; return(OK); } } /* * Name: twoSideRatio * Purpose: Finds the unique ratio 'r' which satisfies the * constraint: * w = hs*(1-r^ns)/(1-r) + he*(1-r^ne)/(1-r) * Formals: < I > w: size of a span * < I > hs: spacing at start of span * < I > he: spacing at end of span * argRatio: returns r, contains initial guess for r * < I > ns: number of steps to take at start * < I > ne: number of steps to take at end * Returns: OK / E_PRIVATE * Users: twoSideSpacing * Calls: error-message handler */ static int twoSideRatio(double w, double hs, double he, double *argRatio, int ns, int ne) { double funcLow, funcUpp, func; double ratLow, ratUpp, ratio = *argRatio; double dns = (double)ns; double dne = (double)ne; int i; /* Get lower bound on solution. */ ratLow = 0.0; funcLow = hs + he - w; if ((funcLow > 0.0) || ((funcLow < 0.0) && (MAX(ns,ne) <= 1))) { *argRatio = 0.0; return(E_PRIVATE); } /* Find upper bound on solution. */ ratUpp = ratio; do { ratUpp += 0.2; funcUpp = hs*geomSum(ratUpp, dns) + he*geomSum(ratUpp, dne) - w; } while (funcUpp < 0.0); /* Do bisections to find new ratio. */ for ( i=0; i < RAT_LIM; i++ ) { ratio = ratLow + 0.5 * (ratUpp - ratLow); func = hs*geomSum(ratio, dns) + he*geomSum(ratio, dne) - w; if ((func == 0.0) || (ratUpp - ratLow < RAT_TOL)) break; funcLow = hs*geomSum(ratLow, dns) + he*geomSum(ratLow, dne) - w; if (funcLow*func > 0.0) { ratLow = ratio; } else { ratUpp = ratio; } } if (i == RAT_LIM) { /* No solution found */ *argRatio = 0.0; return(E_PRIVATE); } else { *argRatio = ratio; return(OK); } } /* * Name: maxLimSpacing * Purpose: Find compatible number of spaces and ratio when the spacing * is constrained at start of a span, and has to be smaller * than a user-specified maximum at the end. * Formals: < I > width: width of the span * < I > hStart: spacing constraint at one end * < I > hMax: maximum spacing allowable * < I > rWanted: ideal ratio of one spacing to the next * < O > rFound: actual ratio discovered * < O > nSfound: number of start spaces * < O > nMfound: number of maximum spaces * Returns: OK / E_PRIVATE * Users: MESHspacing * Calls: oneSideRatio, stepsInSpan */ static int maxLimSpacing(double width, double hStart, double hMax, double rWanted, double *rFound, int *nSfound, int *nMfound) { int nSpaceS; /* Number of spaces at the start */ int nSpaceM; /* Number of spaces with maximum size */ int nSpaceT; /* Total number of spaces */ double dSpaceS; /* Exact number of start spaces needed */ double dSpaceM; /* Exact number of max spaces needed */ double dSpaceT; /* Exact total number of spaces */ double rTempS; /* For temporarily calc'ed ratio */ double remaining; /* Width taken up by start spaces */ double rConnect, hBiggest = 0.0; /* Used to ensure ratio is valid */ double rSaveS = 0.0; /* Saves best solution so far */ int nSaveS = 0; /* " */ int nSaveM = 0; /* " */ int i; /* Searching indices */ int solnFound; /* For partial search termination */ int solnError; /* For partial search termination */ /* Compute the ratio needed to exactly go from hStart to hMax * in the given width. If hMax is really big, then we know * the spaces can't exceed it. */ if ( width > hMax ) { rTempS = 1.0 + (hMax - hStart)/(width - hMax); } else { rTempS = 1.0e6; /* an impossibly large value */ } if (rWanted <= rTempS) { /* Spacings stay below maximum allowed */ dSpaceS = stepsInSpan( width, hStart, rWanted ); dSpaceM = 0.0; } else { /* Find number of spaces needed to increase hStart to hMax. */ dSpaceS = log(hMax/hStart)/log(rWanted); remaining = hStart*geomSum(rWanted, dSpaceS); dSpaceM = (width - remaining)/hMax; } dSpaceT = dSpaceS + dSpaceM; /* Search until an acceptable solution is found. Some * cases may be repeated, but no harm is done. */ for (i = 0; i <= 1; i++) { nSpaceT = (int)dSpaceT + i; /* Guess a starting point which is guaranteed to have a solution. */ nSpaceS = MIN( nSpaceT, MAX( 3, (int) dSpaceS) ); nSpaceM = nSpaceT - nSpaceS; solnFound = solnError = FALSE; while ( !solnFound ) { remaining = width - hMax*nSpaceM; /* Test for the various special cases first. */ if ( nSpaceM < 0 || nSpaceS <= 0 ) { solnError = TRUE; } else if (nSpaceS == 1) { /* check for exact fit */ if ( ABS(remaining - hStart) < 1.0e-3*hStart ) { hBiggest = hStart; if (nSpaceM == 0) { rTempS = 1.0; } else { rTempS = hMax / hStart; } } else { solnError = TRUE; } } else if (nSpaceS == 2) { /* Easy to solve */ if (remaining > hStart) { hBiggest = remaining - hStart; rTempS = hBiggest / hStart; } else { solnError = TRUE; } } else { if (remaining > hStart) { rTempS = rWanted; oneSideRatio( remaining, hStart, &rTempS, nSpaceS ); hBiggest = hStart*pow(rTempS, (double)nSpaceS - 1.0); } else { solnError = TRUE; } } if ( solnError ) break; /* while loop */ rConnect = hMax / hBiggest; if ( rConnect < 1.0 - RAT_TOL ) { nSpaceS--; nSpaceM++; } else if ( (rConnect > rTempS + RAT_TOL) && nSpaceM != 0 ) { nSpaceS++; nSpaceM--; } else { solnFound = TRUE; /* Save solution if it's better. */ if ( (rTempS >= 1.0 - RAT_TOL) && ABS(rWanted - rTempS) <= ABS(rWanted - rSaveS)) { rSaveS = rTempS; nSaveS = nSpaceS; nSaveM = nSpaceM; } } } } /* Prepare return values. */ if (rSaveS == 0.0) { SPfrontEnd->IFerrorf( ERR_WARNING, "max-limited spacing can't find an acceptable solution\n"); *rFound = 0.0; *nSfound = *nMfound = 0; return(E_PRIVATE); } else { *rFound = rSaveS; *nSfound = nSaveS; *nMfound = nSaveM; return(OK); } } tmpk8ny_4pz/src/ciderlib/input/method.c0000644000175000017500000000624713546075722020320 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group Modified: 2001 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/numcards.h" #include "ngspice/numgen.h" #include "ngspice/numenum.h" #include "ngspice/methdefs.h" #include "ngspice/sperror.h" #include "ngspice/devdefs.h" #include "ngspice/suffix.h" extern int METHnewCard(GENcard**,GENmodel*); extern int METHparam(int,IFvalue*,GENcard*); IFparm METHpTable[] = { IP("devtol", METH_DABSTOL, IF_REAL, "Absolute tolerance on device equations"), IP("dabstol", METH_DABSTOL, IF_REAL, "Absolute tolerance on device equations"), IP("dreltol", METH_DRELTOL, IF_REAL, "Relative tolerance on device equations"), IP("onecarrier",METH_ONEC, IF_FLAG, "Solve for majority carriers only"), IP("ac.analysis",METH_ACANAL, IF_STRING, "AC solution technique"), IP("frequency",METH_OMEGA, IF_REAL, "AC default frequency"), IP("nomobderiv",METH_NOMOBDERIV,IF_FLAG, "Ignore mobility derivatives"), IP("itlim", METH_ITLIM, IF_INTEGER, "Iteration limit"), IP("voltpred",METH_VOLTPRED, IF_FLAG, "Perform DC voltage prediction") }; IFcardInfo METHinfo = { "method", "Specify parameters and types of simulation methods", NUMELEMS(METHpTable), METHpTable, METHnewCard, METHparam, NULL }; int METHnewCard(GENcard **inCard, GENmodel *inModel) { METHcard *tmpCard, *newCard; GENnumModel *model = (GENnumModel *)inModel; tmpCard = model->GENmethods; if (!tmpCard) { /* First in list */ newCard = TMALLOC(METHcard, 1); if (!newCard) { *inCard = NULL; return(E_NOMEM); } newCard->METHnextCard = NULL; *inCard = (GENcard *) newCard; model->GENmethods = newCard; } else { /* Only one card of this type allowed */ *inCard = (GENcard *)tmpCard; } return(OK); } int METHparam(int param, IFvalue *value, GENcard *inCard) { METHcard *card = (METHcard *)inCard; switch (param) { case METH_DABSTOL: card->METHdabstol = value->rValue; card->METHdabstolGiven = TRUE; break; case METH_DRELTOL: card->METHdreltol = value->rValue; card->METHdreltolGiven = TRUE; break; case METH_OMEGA: card->METHomega = 2.0 * M_PI * value->rValue; card->METHomegaGiven = TRUE; break; case METH_ONEC: card->METHoneCarrier = value->iValue; card->METHoneCarrierGiven = TRUE; break; case METH_NOMOBDERIV: card->METHmobDeriv = !(value->iValue); card->METHmobDerivGiven = TRUE; break; case METH_ACANAL: if ( cinprefix( value->sValue, "direct", 1 ) ) { card->METHacAnalysisMethod = DIRECT; card->METHacAnalysisMethodGiven = TRUE; } else if ( cinprefix( value->sValue, "sor", 1 ) ) { card->METHacAnalysisMethod = SOR; card->METHacAnalysisMethodGiven = TRUE; } break; case METH_ITLIM: card->METHitLim = value->iValue; card->METHitLimGiven = TRUE; break; case METH_VOLTPRED: card->METHvoltPred = value->iValue; card->METHvoltPredGiven = TRUE; break; default: return(E_BADPARM); break; } return(OK); } tmpk8ny_4pz/src/ciderlib/input/electrod.c0000644000175000017500000000576213546075722020642 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group Modified: 2001 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/numcards.h" #include "ngspice/numgen.h" #include "ngspice/elctdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define UM_TO_CM 1.0e-4 extern int ELCTnewCard(GENcard**,GENmodel*); extern int ELCTparam(int,IFvalue*,GENcard*); IFparm ELCTpTable[] = { IP("x.low", ELCT_X_LOW, IF_REAL, "Location of left edge"), IP("x.high", ELCT_X_HIGH, IF_REAL, "Location of right edge"), IP("y.low", ELCT_Y_LOW, IF_REAL, "Location of top edge"), IP("y.high", ELCT_Y_HIGH, IF_REAL, "Location of bottom edge"), IP("ix.low", ELCT_IX_LOW, IF_INTEGER, "Index of left edge"), IP("ix.high", ELCT_IX_HIGH, IF_INTEGER, "Index of right edge"), IP("iy.low", ELCT_IY_LOW, IF_INTEGER, "Index of top edge"), IP("iy.high", ELCT_IY_HIGH, IF_INTEGER, "Index of bottom edge"), IP("number", ELCT_NUMBER, IF_INTEGER, "Electrode ID number") }; IFcardInfo ELCTinfo = { "electrode", "Location of a contact to the device", NUMELEMS(ELCTpTable), ELCTpTable, ELCTnewCard, ELCTparam, NULL }; int ELCTnewCard(GENcard **inCard, GENmodel *inModel) { ELCTcard *tmpCard, *newCard; GENnumModel *model = (GENnumModel *)inModel; newCard = TMALLOC(ELCTcard, 1); if (!newCard) { *inCard = NULL; return(E_NOMEM); } newCard->ELCTnextCard = NULL; *inCard = (GENcard *) newCard; tmpCard = model->GENelectrodes; if (!tmpCard) { /* First in list */ model->GENelectrodes = newCard; } else { /* Go to end of list */ while (tmpCard->ELCTnextCard) tmpCard = tmpCard->ELCTnextCard; /* And add new card */ tmpCard->ELCTnextCard = newCard; } return(OK); } int ELCTparam(int param, IFvalue *value, GENcard *inCard) { ELCTcard *card = (ELCTcard *)inCard; switch (param) { case ELCT_X_LOW: card->ELCTxLow = value->rValue * UM_TO_CM; card->ELCTxLowGiven = TRUE; break; case ELCT_X_HIGH: card->ELCTxHigh = value->rValue * UM_TO_CM; card->ELCTxHighGiven = TRUE; break; case ELCT_Y_LOW: card->ELCTyLow = value->rValue * UM_TO_CM; card->ELCTyLowGiven = TRUE; break; case ELCT_Y_HIGH: card->ELCTyHigh = value->rValue * UM_TO_CM; card->ELCTyHighGiven = TRUE; break; case ELCT_IX_LOW: card->ELCTixLow = value->iValue; card->ELCTixLowGiven = TRUE; break; case ELCT_IX_HIGH: card->ELCTixHigh = value->iValue; card->ELCTixHighGiven = TRUE; break; case ELCT_IY_LOW: card->ELCTiyLow = value->iValue; card->ELCTiyLowGiven = TRUE; break; case ELCT_IY_HIGH: card->ELCTiyHigh = value->iValue; card->ELCTiyHighGiven = TRUE; break; case ELCT_NUMBER: card->ELCTnumber = value->iValue; card->ELCTnumberGiven = TRUE; break; default: return(E_BADPARM); break; } return(OK); } tmpk8ny_4pz/src/ciderlib/input/cards.c0000644000175000017500000000175113546075722020127 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group Modified: 2001 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/numcards.h" extern IFcardInfo CONTinfo; extern IFcardInfo DOPinfo; extern IFcardInfo ELCTinfo; extern IFcardInfo BDRYinfo; extern IFcardInfo INTFinfo; extern IFcardInfo XMSHinfo; extern IFcardInfo YMSHinfo; extern IFcardInfo METHinfo; extern IFcardInfo MOBinfo; extern IFcardInfo MODLinfo; extern IFcardInfo PHYSinfo; extern IFcardInfo MATLinfo; extern IFcardInfo DOMNinfo; extern IFcardInfo REGNinfo; extern IFcardInfo OPTNinfo; extern IFcardInfo OUTPinfo; IFcardInfo *INPcardTab[] = { &CONTinfo, &DOPinfo, &ELCTinfo, &BDRYinfo, &INTFinfo, &XMSHinfo, &YMSHinfo, &METHinfo, &MOBinfo, &MODLinfo, &PHYSinfo, &MATLinfo, &DOMNinfo, ®Ninfo, &OPTNinfo, &OUTPinfo }; int INPnumCards = NUMELEMS(INPcardTab); tmpk8ny_4pz/src/ciderlib/input/domain.c0000644000175000017500000000654313546075722020306 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group\ Modified: 2001 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/numcards.h" #include "ngspice/numgen.h" #include "ngspice/numenum.h" #include "ngspice/domndefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define UM_TO_CM 1.0e-4 extern int DOMNnewCard(GENcard**,GENmodel*); extern int DOMNparam(int,IFvalue*,GENcard*); IFparm DOMNpTable[] = { IP("x.low", DOMN_X_LOW, IF_REAL, "Location of left edge"), IP("x.high", DOMN_X_HIGH, IF_REAL, "Location of right edge"), IP("y.low", DOMN_Y_LOW, IF_REAL, "Location of top edge"), IP("y.high", DOMN_Y_HIGH, IF_REAL, "Location of bottom edge"), IP("ix.low", DOMN_IX_LOW, IF_INTEGER, "Index of left edge"), IP("ix.high", DOMN_IX_HIGH, IF_INTEGER, "Index of right edge"), IP("iy.low", DOMN_IY_LOW, IF_INTEGER, "Index of top edge"), IP("iy.high", DOMN_IY_HIGH, IF_INTEGER, "Index of bottom edge"), IP("number", DOMN_NUMBER, IF_INTEGER, "Domain ID number"), IP("material",DOMN_MATERIAL, IF_INTEGER, "Material ID number") }; IFcardInfo DOMNinfo = { "domain", "Identify material-type for portion of a device", NUMELEMS(DOMNpTable), DOMNpTable, DOMNnewCard, DOMNparam, NULL }; IFcardInfo REGNinfo = { "region", "Identify material-type for portion of a device", NUMELEMS(DOMNpTable), DOMNpTable, DOMNnewCard, DOMNparam, NULL }; int DOMNnewCard(GENcard **inCard, GENmodel *inModel) { DOMNcard *tmpCard, *newCard; GENnumModel *model = (GENnumModel *)inModel; newCard = TMALLOC(DOMNcard, 1); if (!newCard) { *inCard = NULL; return(E_NOMEM); } newCard->DOMNnextCard = NULL; *inCard = (GENcard *)newCard; tmpCard = model->GENdomains; if (!tmpCard) { /* First in list */ model->GENdomains = newCard; } else { /* Go to end of list */ while (tmpCard->DOMNnextCard) tmpCard = tmpCard->DOMNnextCard; /* And add new card */ tmpCard->DOMNnextCard = newCard; } return(OK); } int DOMNparam(int param, IFvalue *value, GENcard *inCard) { DOMNcard *card = (DOMNcard *)inCard; switch (param) { case DOMN_X_LOW: card->DOMNxLow = value->rValue * UM_TO_CM; card->DOMNxLowGiven = TRUE; break; case DOMN_X_HIGH: card->DOMNxHigh = value->rValue * UM_TO_CM; card->DOMNxHighGiven = TRUE; break; case DOMN_Y_LOW: card->DOMNyLow = value->rValue * UM_TO_CM; card->DOMNyLowGiven = TRUE; break; case DOMN_Y_HIGH: card->DOMNyHigh = value->rValue * UM_TO_CM; card->DOMNyHighGiven = TRUE; break; case DOMN_IX_LOW: card->DOMNixLow = value->iValue; card->DOMNixLowGiven = TRUE; break; case DOMN_IX_HIGH: card->DOMNixHigh = value->iValue; card->DOMNixHighGiven = TRUE; break; case DOMN_IY_LOW: card->DOMNiyLow = value->iValue; card->DOMNiyLowGiven = TRUE; break; case DOMN_IY_HIGH: card->DOMNiyHigh = value->iValue; card->DOMNiyHighGiven = TRUE; break; case DOMN_NUMBER: card->DOMNnumber = value->iValue; card->DOMNnumberGiven = TRUE; break; case DOMN_MATERIAL: card->DOMNmaterial = value->iValue; card->DOMNmaterialGiven = TRUE; break; default: return(E_BADPARM); break; } return(OK); } tmpk8ny_4pz/src/ciderlib/input/material.c0000644000175000017500000002257113546075722020634 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group Modified: 2001 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/numcards.h" #include "ngspice/numgen.h" #include "ngspice/numenum.h" #include "ngspice/matldefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" extern int MATLnewCard(GENcard**,GENmodel *); extern int MATLparam(int,IFvalue*,GENcard *); IFparm MATLpTable[] = { IP("number", MATL_NUMBER, IF_INTEGER, "Material ID number"), IP("insulator",MATL_INSULATOR,IF_FLAG, "Insulator"), IP("oxide", MATL_OXIDE, IF_FLAG, "Oxide"), IP("sio2", MATL_OXIDE, IF_FLAG, "Oxide"), IP("nitride", MATL_NITRIDE, IF_FLAG, "Nitride"), IP("si3n4", MATL_NITRIDE, IF_FLAG, "Nitride"), IP("semiconductor",MATL_SEMICON,IF_FLAG, "Semiconductor"), IP("silicon", MATL_SILICON, IF_FLAG, "Silicon"), IP("polysilicon",MATL_POLYSIL,IF_FLAG, "Polysilicon"), IP("gaas", MATL_GAAS, IF_FLAG, "Gallium-Arsenide"), IP("nc", MATL_NC0, IF_REAL, "Conduction band density"), IP("nc0", MATL_NC0, IF_REAL, "Conduction band density"), IP("nc300", MATL_NC0, IF_REAL, "Conduction band density"), IP("nv", MATL_NV0, IF_REAL, "Valence band density"), IP("nv0", MATL_NV0, IF_REAL, "Valence band density"), IP("nv300", MATL_NV0, IF_REAL, "Valence band density"), IP("eg", MATL_EG0, IF_REAL, "Energy gap"), IP("eg0", MATL_EG0, IF_REAL, "Energy gap"), IP("eg300", MATL_EG0, IF_REAL, "Energy gap"), IP("deg.dt", MATL_DEGDT, IF_REAL, "Bandgap narrowing w/ temp"), IP("egalpha", MATL_DEGDT, IF_REAL, "Bandgap narrowing w/ temp"), IP("eg.tref", MATL_TREF_EG, IF_REAL, "E-gap reference temperature"), IP("egbeta", MATL_TREF_EG, IF_REAL, "E-gap reference temperature"), IP("deg.dc", MATL_DEGDC, IF_REAL, "Bandgap narrowing w/ N&P doping"), IP("eg.cref", MATL_CREF_EG, IF_REAL, "E-gap reference conc (N&P type)"), IP("nbgn", MATL_CREF_EG, IF_REAL, "E-gap reference conc (N&P type)"), IP("deg.dn", MATL_DEGDN, IF_REAL, "Bandgap narrowing w/ N doping"), IP("eg.nref", MATL_NREF_EG, IF_REAL, "E-gap reference conc (N type)"), IP("nbgnn", MATL_NREF_EG, IF_REAL, "E-gap reference conc (N type)"), IP("deg.dp", MATL_DEGDP, IF_REAL, "Bandgap narrowing w/ P doping"), IP("eg.pref", MATL_PREF_EG, IF_REAL, "E-gap reference conc (P type)"), IP("nbgnp", MATL_PREF_EG, IF_REAL, "E-gap reference conc (P type)"), IP("affinity",MATL_AFFIN, IF_REAL, "Electron affinity"), IP("permittivity",MATL_PERMIT,IF_REAL, "Dielectric permittivity"), IP("epsilon", MATL_PERMIT, IF_REAL, "Dielectric permittivity"), IP("tn", MATL_TAUN0, IF_REAL, "SRH electron lifetime"), IP("tn0", MATL_TAUN0, IF_REAL, "SRH electron lifetime"), IP("taun0", MATL_TAUN0, IF_REAL, "SRH electron lifetime"), IP("tp", MATL_TAUP0, IF_REAL, "SRH hole lifetime"), IP("tp0", MATL_TAUP0, IF_REAL, "SRH hole lifetime"), IP("taup0", MATL_TAUP0, IF_REAL, "SRH hole lifetime"), IP("nsrhn", MATL_NSRHN, IF_REAL, "SRH reference conc (electrons)"), IP("srh.nref",MATL_NSRHN, IF_REAL, "SRH reference conc (electrons)"), IP("nsrhp", MATL_NSRHP, IF_REAL, "SRH reference conc (holes)"), IP("srh.pref",MATL_NSRHP, IF_REAL, "SRH reference conc (holes)"), IP("cn", MATL_CNAUG, IF_REAL, "Auger coefficient (electrons)"), IP("cnaug", MATL_CNAUG, IF_REAL, "Auger coefficient (electrons)"), IP("augn", MATL_CNAUG, IF_REAL, "Auger coefficient (electrons)"), IP("cp", MATL_CPAUG, IF_REAL, "Auger coefficient (holes)"), IP("cpaug", MATL_CPAUG, IF_REAL, "Auger coefficient (holes)"), IP("augp", MATL_CPAUG, IF_REAL, "Auger coefficient (holes)"), IP("arichn", MATL_ARICHN, IF_REAL, "Richardson constant (electrons)"), IP("arichp", MATL_ARICHP, IF_REAL, "Richardson constant (holes)") }; IFcardInfo MATLinfo = { "material", "Specify physical properties of a material", NUMELEMS(MATLpTable), MATLpTable, MATLnewCard, MATLparam, NULL }; IFcardInfo PHYSinfo = { "physics", "Specify physical properties of a material", NUMELEMS(MATLpTable), MATLpTable, MATLnewCard, MATLparam, NULL }; int MATLnewCard(GENcard **inCard, GENmodel *inModel) { MATLcard *tmpCard, *newCard; GENnumModel *model = (GENnumModel *)inModel; newCard = TMALLOC(MATLcard, 1); if (!newCard) { *inCard = NULL; return(E_NOMEM); } newCard->MATLnextCard = NULL; *inCard = (GENcard *) newCard; tmpCard = model->GENmaterials; if (!tmpCard) { /* First in list */ model->GENmaterials = newCard; } else { /* Go to end of list */ while (tmpCard->MATLnextCard) tmpCard = tmpCard->MATLnextCard; /* And add new card */ tmpCard->MATLnextCard = newCard; } return(OK); } int MATLparam(int param, IFvalue *value, GENcard *inCard) { MATLcard *card = (MATLcard *)inCard; switch (param) { case MATL_NUMBER: card->MATLnumber = value->iValue; card->MATLnumberGiven = TRUE; break; case MATL_NC0: card->MATLnc0 = value->rValue; card->MATLnc0Given = TRUE; break; case MATL_NV0: card->MATLnv0 = value->rValue; card->MATLnv0Given = TRUE; break; case MATL_EG0: card->MATLeg0 = value->rValue; card->MATLeg0Given = TRUE; break; case MATL_DEGDT: card->MATLdEgdT = value->rValue; card->MATLdEgdTGiven = TRUE; break; case MATL_TREF_EG: card->MATLtrefEg = value->rValue; card->MATLtrefEgGiven = TRUE; break; case MATL_DEGDC: card->MATLdEgdN = value->rValue; card->MATLdEgdNGiven = TRUE; card->MATLdEgdP = value->rValue; card->MATLdEgdPGiven = TRUE; break; case MATL_CREF_EG: card->MATLnrefEg = value->rValue; card->MATLnrefEgGiven = TRUE; card->MATLprefEg = value->rValue; card->MATLprefEgGiven = TRUE; break; case MATL_DEGDN: card->MATLdEgdN = value->rValue; card->MATLdEgdNGiven = TRUE; break; case MATL_NREF_EG: card->MATLnrefEg = value->rValue; card->MATLnrefEgGiven = TRUE; break; case MATL_DEGDP: card->MATLdEgdP = value->rValue; card->MATLdEgdPGiven = TRUE; break; case MATL_PREF_EG: card->MATLprefEg = value->rValue; card->MATLprefEgGiven = TRUE; break; case MATL_AFFIN: card->MATLaffinity = value->rValue; card->MATLaffinityGiven = TRUE; break; case MATL_PERMIT: card->MATLpermittivity = value->rValue; card->MATLpermittivityGiven = TRUE; break; case MATL_TAUN0: card->MATLtaun0 = value->rValue; card->MATLtaun0Given = TRUE; break; case MATL_TAUP0: card->MATLtaup0 = value->rValue; card->MATLtaup0Given = TRUE; break; case MATL_NSRHN: card->MATLnrefSRHn = value->rValue; card->MATLnrefSRHnGiven = TRUE; break; case MATL_NSRHP: card->MATLnrefSRHp = value->rValue; card->MATLnrefSRHpGiven = TRUE; break; case MATL_CNAUG: card->MATLcnAug = value->rValue; card->MATLcnAugGiven = TRUE; break; case MATL_CPAUG: card->MATLcpAug = value->rValue; card->MATLcpAugGiven = TRUE; break; case MATL_ARICHN: card->MATLaRichN = value->rValue; card->MATLaRichNGiven = TRUE; break; case MATL_ARICHP: card->MATLaRichP = value->rValue; card->MATLaRichPGiven = TRUE; break; case MATL_INSULATOR: if ( value->iValue ) { card->MATLmaterial = INSULATOR; card->MATLmaterialGiven = TRUE; } else { if ( card->MATLmaterial == INSULATOR ) { card->MATLmaterial = -1; card->MATLmaterialGiven = FALSE; } } break; case MATL_OXIDE: if ( value->iValue ) { card->MATLmaterial = OXIDE; card->MATLmaterialGiven = TRUE; } else { if ( card->MATLmaterial == OXIDE ) { card->MATLmaterial = -1; card->MATLmaterialGiven = FALSE; } } break; case MATL_NITRIDE: if ( value->iValue ) { card->MATLmaterial = NITRIDE; card->MATLmaterialGiven = TRUE; } else { if ( card->MATLmaterial == NITRIDE ) { card->MATLmaterial = -1; card->MATLmaterialGiven = FALSE; } } break; case MATL_SEMICON: if ( value->iValue ) { card->MATLmaterial = SEMICON; card->MATLmaterialGiven = TRUE; } else { if ( card->MATLmaterial == SEMICON ) { card->MATLmaterial = -1; card->MATLmaterialGiven = FALSE; } } break; case MATL_SILICON: if ( value->iValue ) { card->MATLmaterial = SILICON; card->MATLmaterialGiven = TRUE; } else { if ( card->MATLmaterial == SILICON ) { card->MATLmaterial = -1; card->MATLmaterialGiven = FALSE; } } break; case MATL_POLYSIL: if ( value->iValue ) { card->MATLmaterial = POLYSILICON; card->MATLmaterialGiven = TRUE; } else { if ( card->MATLmaterial == POLYSILICON ) { card->MATLmaterial = -1; card->MATLmaterialGiven = FALSE; } } break; case MATL_GAAS: if ( value->iValue ) { card->MATLmaterial = GAAS; card->MATLmaterialGiven = TRUE; } else { if ( card->MATLmaterial == GAAS ) { card->MATLmaterial = -1; card->MATLmaterialGiven = FALSE; } } break; default: return(E_BADPARM); break; } return(OK); } tmpk8ny_4pz/src/ciderlib/input/boundary.c0000644000175000017500000001037513546075722020660 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group Modified: 2001 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/numcards.h" #include "ngspice/numgen.h" #include "ngspice/bdrydefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define UM_TO_CM 1.0e-4 extern int BDRYnewCard(GENcard**,GENmodel*); extern int BDRYparam(int,IFvalue*,GENcard*); IFparm BDRYpTable[] = { IP("domain", BDRY_DOMAIN, IF_INTEGER, "Primary domain"), IP("neighbor",BDRY_NEIGHBOR, IF_INTEGER, "Neighboring domain"), IP("x.low", BDRY_X_LOW, IF_REAL, "Location of left edge"), IP("x.high", BDRY_X_HIGH, IF_REAL, "Location of right edge"), IP("y.low", BDRY_Y_LOW, IF_REAL, "Location of top edge"), IP("y.high", BDRY_Y_HIGH, IF_REAL, "Location of bottom edge"), IP("ix.low", BDRY_IX_LOW, IF_INTEGER, "Index of left edge"), IP("ix.high", BDRY_IX_HIGH, IF_INTEGER, "Index of right edge"), IP("iy.low", BDRY_IY_LOW, IF_INTEGER, "Index of top edge"), IP("iy.high", BDRY_IY_HIGH, IF_INTEGER, "Index of bottom edge"), IP("nss", BDRY_QF, IF_REAL, "Fixed charge"), IP("qss", BDRY_QF, IF_REAL, "Fixed charge"), IP("qf", BDRY_QF, IF_REAL, "Fixed charge"), IP("sn", BDRY_SN, IF_REAL, "Electron recomb velocity"), IP("srvn", BDRY_SN, IF_REAL, "Electron recomb velocity"), IP("vsrfn", BDRY_SN, IF_REAL, "Electron recomb velocity"), IP("sp", BDRY_SP, IF_REAL, "Hole recomb velocity"), IP("srvp", BDRY_SP, IF_REAL, "Hole recomb velocity"), IP("vsrfp", BDRY_SP, IF_REAL, "Hole recomb velocity"), IP("layer.width",BDRY_LAYER, IF_REAL, "Width of surface charge layer") }; IFcardInfo BDRYinfo = { "boundary", "Specify properties of a domain boundary", NUMELEMS(BDRYpTable), BDRYpTable, BDRYnewCard, BDRYparam, NULL }; IFcardInfo INTFinfo = { "interface", "Specify properties of an interface between two domains", NUMELEMS(BDRYpTable), BDRYpTable, BDRYnewCard, BDRYparam, NULL }; int BDRYnewCard(GENcard **inCard, GENmodel *inModel) { BDRYcard *tmpCard, *newCard; GENnumModel *model = (GENnumModel *)inModel; newCard = TMALLOC(BDRYcard, 1); if (!newCard) { *inCard = NULL; return(E_NOMEM); } newCard->BDRYnextCard = NULL; *inCard = (GENcard *) newCard; tmpCard = model->GENboundaries; if (!tmpCard) { /* First in list */ model->GENboundaries = newCard; } else { /* Go to end of list */ while (tmpCard->BDRYnextCard) tmpCard = tmpCard->BDRYnextCard; /* And add new card */ tmpCard->BDRYnextCard = newCard; } return(OK); } int BDRYparam(int param, IFvalue *value, GENcard *inCard) { BDRYcard *card = (BDRYcard *)inCard; switch (param) { case BDRY_DOMAIN: card->BDRYdomain = value->iValue; card->BDRYdomainGiven = TRUE; break; case BDRY_NEIGHBOR: card->BDRYneighbor = value->iValue; card->BDRYneighborGiven = TRUE; break; case BDRY_X_LOW: card->BDRYxLow = value->rValue * UM_TO_CM; card->BDRYxLowGiven = TRUE; break; case BDRY_X_HIGH: card->BDRYxHigh = value->rValue * UM_TO_CM; card->BDRYxHighGiven = TRUE; break; case BDRY_Y_LOW: card->BDRYyLow = value->rValue * UM_TO_CM; card->BDRYyLowGiven = TRUE; break; case BDRY_Y_HIGH: card->BDRYyHigh = value->rValue * UM_TO_CM; card->BDRYyHighGiven = TRUE; break; case BDRY_IX_LOW: card->BDRYixLow = value->iValue; card->BDRYixLowGiven = TRUE; break; case BDRY_IX_HIGH: card->BDRYixHigh = value->iValue; card->BDRYixHighGiven = TRUE; break; case BDRY_IY_LOW: card->BDRYiyLow = value->iValue; card->BDRYiyLowGiven = TRUE; break; case BDRY_IY_HIGH: card->BDRYiyHigh = value->iValue; card->BDRYiyHighGiven = TRUE; break; case BDRY_QF: card->BDRYqf = value->rValue; card->BDRYqfGiven = TRUE; break; case BDRY_SN: card->BDRYsn = value->rValue; card->BDRYsnGiven = TRUE; break; case BDRY_SP: card->BDRYsp = value->rValue; card->BDRYspGiven = TRUE; break; case BDRY_LAYER: card->BDRYlayer = value->rValue; card->BDRYlayerGiven = TRUE; break; default: return(E_BADPARM); break; } return(OK); } tmpk8ny_4pz/src/ciderlib/input/output.c0000644000175000017500000001733313546075722020376 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 David A. Gates, U. C. Berkeley CAD Group Modified: 2001 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/numcards.h" #include "ngspice/numgen.h" #include "ngspice/numenum.h" #include "ngspice/outpdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "../misc/tilde.h" extern int OUTPnewCard(GENcard**,GENmodel*); extern int OUTPparam(int,IFvalue*,GENcard*); IFparm OUTPpTable[] = { /* Debugging Flags */ IP("all.debug",OUTP_ALL_DEBUG,IF_FLAG, "Debug All Analyses"), IP("op.debug",OUTP_DC_DEBUG, IF_FLAG, "Debug DC/OP Analyses"), IP("dc.debug",OUTP_DC_DEBUG, IF_FLAG, "Debug DC/OP Analyses"), IP("tran.debug",OUTP_TRAN_DEBUG,IF_FLAG, "Debug TRAN Analysis"), IP("ac.debug",OUTP_AC_DEBUG, IF_FLAG, "Debug AC/PZ Analyses"), IP("pz.debug",OUTP_AC_DEBUG, IF_FLAG, "Debug AC/PZ Analyses"), /* General Information */ IP("geometry",OUTP_GEOM, IF_FLAG, "Geometric information"), IP("mesh", OUTP_MESH, IF_FLAG, "Mesh information"), IP("material",OUTP_MATERIAL, IF_FLAG, "Material information"), IP("globals", OUTP_GLOBALS, IF_FLAG, "Global information"), IP("statistics", OUTP_STATS, IF_FLAG, "Resource usage information"), IP("resources", OUTP_STATS, IF_FLAG, "Resource usage information"), /* Solution Information */ IP("rootfile", OUTP_ROOTFILE, IF_STRING, "Root of output file names"), IP("rawfile", OUTP_RAWFILE, IF_FLAG, "SPICE rawfile data format"), IP("hdf", OUTP_HDF, IF_FLAG, "HDF data format"), IP("doping", OUTP_DOPING, IF_FLAG, "Net doping"), IP("psi", OUTP_PSI, IF_FLAG, "Potential"), IP("equ.psi", OUTP_EQU_PSI, IF_FLAG, "Equilibrium potential"), IP("vac.psi", OUTP_VAC_PSI, IF_FLAG, "Vacuum potential"), IP("n.conc", OUTP_N_CONC, IF_FLAG, "Electron concentration"), IP("electrons", OUTP_N_CONC, IF_FLAG, "Electron concentration"), IP("p.conc", OUTP_P_CONC, IF_FLAG, "Hole concentration"), IP("holes", OUTP_P_CONC, IF_FLAG, "Hole concentration"), IP("phin", OUTP_PHIN, IF_FLAG, "Electron quasi-fermi potential"), IP("qfn", OUTP_PHIN, IF_FLAG, "Electron quasi-fermi potential"), IP("phip", OUTP_PHIP, IF_FLAG, "Hole quasi-fermi potential"), IP("qfp", OUTP_PHIP, IF_FLAG, "Hole quasi-fermi potential"), IP("phic", OUTP_PHIC, IF_FLAG, "Conduction band potential"), IP("band.con",OUTP_PHIC, IF_FLAG, "Conduction band potential"), IP("phiv", OUTP_PHIV, IF_FLAG, "Valence band potential"), IP("band.val",OUTP_PHIV, IF_FLAG, "Valence band potential"), IP("e.field", OUTP_E_FIELD, IF_FLAG, "Electric field"), IP("jc", OUTP_J_C, IF_FLAG, "Conduction current density"), IP("j.conduc",OUTP_J_C, IF_FLAG, "Conduction current density"), IP("jd", OUTP_J_D, IF_FLAG, "Displacement current density"), IP("j.disp", OUTP_J_D, IF_FLAG, "Displacement current density"), IP("jn", OUTP_J_N, IF_FLAG, "Electron current density"), IP("j.electr",OUTP_J_N, IF_FLAG, "Electron current density"), IP("jp", OUTP_J_P, IF_FLAG, "Hole current density"), IP("j.hole", OUTP_J_P, IF_FLAG, "Hole current density"), IP("jt", OUTP_J_T, IF_FLAG, "Total current density"), IP("j.total", OUTP_J_T, IF_FLAG, "Total current density"), IP("unet", OUTP_U_NET, IF_FLAG, "Net recombination"), IP("recomb", OUTP_U_NET, IF_FLAG, "Net recombination"), IP("mun", OUTP_MUN, IF_FLAG, "Elctron mobility"), IP("mob.elec",OUTP_MUN, IF_FLAG, "Electron mobility"), IP("mup", OUTP_MUP, IF_FLAG, "Hole mobility"), IP("mob.hole",OUTP_MUP, IF_FLAG, "Hole mobility") }; IFcardInfo OUTPinfo = { "output", "Identify information to be output to user", NUMELEMS(OUTPpTable), OUTPpTable, OUTPnewCard, OUTPparam, NULL }; int OUTPnewCard(GENcard **inCard, GENmodel *inModel) { OUTPcard *tmpCard, *newCard; GENnumModel *model = (GENnumModel *)inModel; tmpCard = model->GENoutputs; if (!tmpCard) { /* First in list */ newCard = TMALLOC(OUTPcard, 1); if (!newCard) { *inCard = NULL; return(E_NOMEM); } newCard->OUTPnextCard = NULL; *inCard = (GENcard *) newCard; model->GENoutputs = newCard; } else { /* Only one card of this type allowed */ *inCard = (GENcard *) tmpCard; } return(OK); } int OUTPparam(int param, IFvalue *value, GENcard *inCard) { OUTPcard *card = (OUTPcard *)inCard; switch (param) { case OUTP_ALL_DEBUG: card->OUTPdcDebug = value->iValue; card->OUTPdcDebugGiven = TRUE; card->OUTPtranDebug = value->iValue; card->OUTPtranDebugGiven = TRUE; card->OUTPacDebug = value->iValue; card->OUTPacDebugGiven = TRUE; break; case OUTP_DC_DEBUG: card->OUTPdcDebug = value->iValue; card->OUTPdcDebugGiven = TRUE; break; case OUTP_TRAN_DEBUG: card->OUTPtranDebug = value->iValue; card->OUTPtranDebugGiven = TRUE; break; case OUTP_AC_DEBUG: card->OUTPacDebug = value->iValue; card->OUTPacDebugGiven = TRUE; break; case OUTP_GEOM: card->OUTPgeom = value->iValue; card->OUTPgeomGiven = TRUE; break; case OUTP_MESH: card->OUTPmesh = value->iValue; card->OUTPmeshGiven = TRUE; break; case OUTP_MATERIAL: card->OUTPmaterial = value->iValue; card->OUTPmaterialGiven = TRUE; break; case OUTP_GLOBALS: card->OUTPglobals = value->iValue; card->OUTPglobalsGiven = TRUE; break; case OUTP_STATS: card->OUTPstats = value->iValue; card->OUTPstatsGiven = TRUE; break; case OUTP_ROOTFILE: card->OUTProotFile = tildexpand(value->sValue); /*xxx*/ card->OUTProotFileGiven = TRUE; break; case OUTP_RAWFILE: card->OUTPfileType = RAWFILE; card->OUTPfileTypeGiven = TRUE; break; case OUTP_HDF: return(E_UNSUPP); break; case OUTP_DOPING: card->OUTPdoping = value->iValue; card->OUTPdopingGiven = TRUE; break; case OUTP_PSI: card->OUTPpsi = value->iValue; card->OUTPpsiGiven = TRUE; break; case OUTP_EQU_PSI: card->OUTPequPsi = value->iValue; card->OUTPequPsiGiven = TRUE; break; case OUTP_VAC_PSI: card->OUTPvacPsi = value->iValue; card->OUTPvacPsiGiven = TRUE; break; case OUTP_N_CONC: card->OUTPnConc = value->iValue; card->OUTPnConcGiven = TRUE; break; case OUTP_P_CONC: card->OUTPpConc = value->iValue; card->OUTPpConcGiven = TRUE; break; case OUTP_PHIN: card->OUTPphin = value->iValue; card->OUTPphinGiven = TRUE; break; case OUTP_PHIP: card->OUTPphip = value->iValue; card->OUTPphipGiven = TRUE; break; case OUTP_PHIC: card->OUTPphic = value->iValue; card->OUTPphicGiven = TRUE; break; case OUTP_PHIV: card->OUTPphiv = value->iValue; card->OUTPphivGiven = TRUE; break; case OUTP_J_C: card->OUTPjc = value->iValue; card->OUTPjcGiven = TRUE; break; case OUTP_J_D: card->OUTPjd = value->iValue; card->OUTPjdGiven = TRUE; break; case OUTP_J_N: card->OUTPjn = value->iValue; card->OUTPjnGiven = TRUE; break; case OUTP_J_P: card->OUTPjp = value->iValue; card->OUTPjpGiven = TRUE; break; case OUTP_J_T: card->OUTPjt = value->iValue; card->OUTPjtGiven = TRUE; break; case OUTP_U_NET: card->OUTPuNet = value->iValue; card->OUTPuNetGiven = TRUE; break; case OUTP_MUN: card->OUTPmun = value->iValue; card->OUTPmunGiven = TRUE; break; case OUTP_MUP: card->OUTPmup = value->iValue; card->OUTPmupGiven = TRUE; break; default: return(E_BADPARM); break; } return(OK); } tmpk8ny_4pz/src/ciderlib/input/dopset.c0000644000175000017500000002300213546075722020322 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group Modifed: 2001 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/numenum.h" #include "ngspice/dopdefs.h" #include "ngspice/meshext.h" #include "ngspice/profile.h" #include "ngspice/gendev.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/cidersupt.h" #include "ngspice/carddefs.h" #include "ngspice/ciderinp.h" /* * Name: DOPcheck * Purpose: checks a list of DOPcards for input errors * Formals: cardList: the list to check * Returns: OK/E_PRIVATE * Users: numerical device setup routines * Calls: error message handler */ int DOPcheck(DOPcard *cardList, MESHcoord *xMeshList, MESHcoord *yMeshList) { DOPcard *card; int cardNum = 0; int error = OK; for ( card = cardList; card != NULL; card = card->DOPnextCard ) { cardNum++; if (!card->DOPdomainsGiven) { card->DOPnumDomains = 0; card->DOPdomains = NULL; } if (!card->DOPprofileTypeGiven) { SPfrontEnd->IFerrorf( ERR_WARNING, "doping card %d does not specify profile type", cardNum ); error = E_PRIVATE; } else switch (card->DOPprofileType) { case DOP_UNIF: if (!card->DOPconcGiven) { SPfrontEnd->IFerrorf( ERR_WARNING, "doping card %d needs conc of uniform distribution", cardNum ); error = E_PRIVATE; } break; case DOP_LINEAR: if (!card->DOPconcGiven) { SPfrontEnd->IFerrorf( ERR_WARNING, "doping card %d needs peak conc of linear distribution", cardNum ); error = E_PRIVATE; } break; case DOP_GAUSS: if (!card->DOPconcGiven) { SPfrontEnd->IFerrorf( ERR_WARNING, "doping card %d needs peak conc of gaussian distribution", cardNum ); error = E_PRIVATE; } break; case DOP_ERFC: if (!card->DOPconcGiven) { SPfrontEnd->IFerrorf( ERR_WARNING, "doping card %d needs peak conc of error-function distribution", cardNum ); error = E_PRIVATE; } break; case DOP_EXP: if (!card->DOPconcGiven) { SPfrontEnd->IFerrorf( ERR_WARNING, "doping card %d needs peak conc of exponential distribution", cardNum ); error = E_PRIVATE; } break; case DOP_SUPREM3: case DOP_SUPASCII: if (!card->DOPinFileGiven) { SPfrontEnd->IFerrorf( ERR_WARNING, "doping card %d needs input-file name of suprem3 data", cardNum ); error = E_PRIVATE; } break; case DOP_ASCII: if (!card->DOPinFileGiven) { SPfrontEnd->IFerrorf( ERR_WARNING, "doping card %d needs input-file name of ascii data", cardNum ); error = E_PRIVATE; } break; default: SPfrontEnd->IFerrorf( ERR_FATAL, "doping card %d has unrecognized profile type", cardNum ); error = E_NOTFOUND; break; } if (!card->DOProtateLatGiven) { card->DOProtateLat = FALSE; } if (!card->DOPlatProfileTypeGiven || card->DOProtateLat) { card->DOPlatProfileType = card->DOPprofileType; } if (!card->DOPratioLatGiven) { card->DOPratioLat = 1.0; } if (!card->DOPcharLenGiven) { card->DOPcharLen = 1.0e-4; /* 1um in centimeters */ } if (!card->DOPlocationGiven) { card->DOPlocation = 0.0; } if (!card->DOPimpurityTypeGiven) { card->DOPimpurityType = IMP_N_TYPE; } else switch (card->DOPimpurityType) { case DOP_BORON: card->DOPimpurityType = IMP_BORON; break; case DOP_PHOSP: card->DOPimpurityType = IMP_PHOSPHORUS; break; case DOP_ARSEN: card->DOPimpurityType = IMP_ARSENIC; break; case DOP_ANTIM: card->DOPimpurityType = IMP_ANTIMONY; break; case DOP_N_TYPE: card->DOPimpurityType = IMP_N_TYPE; break; case DOP_P_TYPE: card->DOPimpurityType = IMP_P_TYPE; break; default: break; } if (!card->DOPaxisTypeGiven) { if ( xMeshList && yMeshList ) { /* both lists are non-empty */ card->DOPaxisType = DOP_Y_AXIS; } else if ( xMeshList ) { /* x-mesh list is non-empty */ card->DOPaxisType = DOP_X_AXIS; } else if ( yMeshList ) { /* y-mesh list is non-empty */ card->DOPaxisType = DOP_Y_AXIS; } } /* Return now if anything has failed */ if (error) return(error); } return(OK); } /* * Name: DOPsetup * Purpose: convert a list of DOPcard's to DOPprofile's * Formals: cardList: list of cards to setup * profileList: returns the list of DOPprofile's * xMeshList: list of coordinates in the x mesh * yMeshList: list of coordinates in the y mesh * Returns: OK/E_PRIVATE * Users: numerical devices * Calls: DOPcheck */ int DOPsetup(DOPcard *cardList, DOPprofile **profileList, DOPtable **tableList, MESHcoord *xMeshList, MESHcoord *yMeshList) { DOPcard *card; DOPprofile *newProfile = NULL, *endProfile; int impurityId = 0; double xMin, xMax, yMin, yMax; double sign; int error, xProfUnif, yProfUnif; /* Initialize list of profiles */ *profileList = endProfile = NULL; /* Check the card list */ if ((error = DOPcheck( cardList, xMeshList, yMeshList )) != 0) return( error ); /* Find the limits on locations */ MESHlBounds( xMeshList, &xMin, &xMax ); MESHlBounds( yMeshList, &yMin, &yMax ); for ( card = cardList; card != NULL; card = card->DOPnextCard ) { if (*profileList == NULL) { RALLOC( newProfile, DOPprofile, 1 ); *profileList = newProfile; } else { RALLOC( newProfile->next, DOPprofile, 1 ); newProfile = newProfile->next; } newProfile->next = NULL; newProfile->numDomains = card->DOPnumDomains; if ( newProfile->numDomains > 0 ) { int i; RALLOC( newProfile->domains, int, newProfile->numDomains ); for ( i=0; i < newProfile->numDomains; i++ ) { newProfile->domains[i] = card->DOPdomains[i]; } } else { newProfile->domains = NULL; } if ( card->DOPimpurityType == IMP_P_TYPE ) { sign = -1.0; } else { sign = 1.0; } switch( card->DOPprofileType ) { case DOP_UNIF: newProfile->type = UNIF; newProfile->CONC = sign * card->DOPconc; break; case DOP_LINEAR: newProfile->type = LIN; newProfile->CONC = sign * card->DOPconc; break; case DOP_GAUSS: newProfile->type = GAUSS; newProfile->CONC = sign * card->DOPconc; break; case DOP_ERFC: newProfile->type = ERRFC; newProfile->CONC = sign * card->DOPconc; break; case DOP_EXP: newProfile->type = EXP; newProfile->CONC = sign * card->DOPconc; break; case DOP_SUPREM3: newProfile->type = LOOKUP; readSupremData( card->DOPinFile, 0, card->DOPimpurityType, tableList ); newProfile->IMPID = ++impurityId; break; case DOP_SUPASCII: newProfile->type = LOOKUP; readSupremData( card->DOPinFile, 1, card->DOPimpurityType, tableList ); newProfile->IMPID = ++impurityId; break; case DOP_ASCII: newProfile->type = LOOKUP; readAsciiData( card->DOPinFile, card->DOPimpurityType, tableList ); newProfile->IMPID = ++impurityId; break; default: break; } switch( card->DOPlatProfileType ) { case DOP_UNIF: newProfile->latType = UNIF; break; case DOP_LINEAR: newProfile->latType = LIN; break; case DOP_GAUSS: newProfile->latType = GAUSS; break; case DOP_ERFC: newProfile->latType = ERRFC; break; case DOP_EXP: newProfile->latType = EXP; break; case DOP_SUPREM3: case DOP_SUPASCII: newProfile->latType = LOOKUP; break; case DOP_ASCII: newProfile->latType = LOOKUP; break; default: break; } newProfile->rotate = card->DOProtateLat; newProfile->LOCATION = card->DOPlocation; newProfile->CHAR_LENGTH = card->DOPcharLen; newProfile->LAT_RATIO = card->DOPratioLat; xProfUnif = yProfUnif = FALSE; if (card->DOPaxisType == DOP_X_AXIS) { newProfile->DIRECTION = X; if (newProfile->type == UNIF) xProfUnif = TRUE; if (newProfile->latType == UNIF) yProfUnif = TRUE; } else { newProfile->DIRECTION = Y; if (newProfile->type == UNIF) yProfUnif = TRUE; if (newProfile->latType == UNIF) xProfUnif = TRUE; } /* Fill in x coordinates. Use defaults if necessary */ if (card->DOPxLowGiven && card->DOPxHighGiven) { newProfile->X_LOW = card->DOPxLow; newProfile->X_HIGH = card->DOPxHigh; } else if (card->DOPxLowGiven) { newProfile->X_LOW = card->DOPxLow; if (xProfUnif) { newProfile->X_HIGH = xMax; } else { newProfile->X_HIGH = newProfile->X_LOW; } } else if (card->DOPxHighGiven) { newProfile->X_HIGH = card->DOPxHigh; if (xProfUnif) { newProfile->X_LOW = xMin; } else { newProfile->X_LOW = newProfile->X_HIGH; } } else { if (xProfUnif) { newProfile->X_LOW = xMin; newProfile->X_HIGH = xMax; } else { newProfile->X_LOW = 0.5 * (xMin + xMax); newProfile->X_HIGH = 0.5 * (xMin + xMax); } } /* Fill in y coordinates. Use defaults if necessary */ if (card->DOPyLowGiven && card->DOPyHighGiven) { newProfile->Y_LOW = card->DOPyLow; newProfile->Y_HIGH = card->DOPyHigh; } else if (card->DOPyLowGiven) { newProfile->Y_LOW = card->DOPyLow; if (yProfUnif) { newProfile->Y_HIGH = yMax; } else { newProfile->Y_HIGH = newProfile->Y_LOW; } } else if (card->DOPyHighGiven) { newProfile->Y_HIGH = card->DOPyHigh; if (xProfUnif) { newProfile->Y_LOW = yMin; } else { newProfile->Y_LOW = newProfile->Y_HIGH; } } else { if (yProfUnif) { newProfile->Y_LOW = yMin; newProfile->Y_HIGH = yMax; } else { newProfile->Y_LOW = 0.5 * (yMin + yMax); newProfile->Y_HIGH = 0.5 * (yMin + yMax); } } } return( OK ); } tmpk8ny_4pz/src/ciderlib/input/domnset.c0000644000175000017500000001245513546075722020507 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group Modifed: 2001 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/numenum.h" #include "ngspice/domndefs.h" #include "ngspice/material.h" #include "ngspice/meshext.h" #include "ngspice/gendev.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" extern int DOMNcheck( DOMNcard *, MATLmaterial * ); extern int DOMNsetup( DOMNcard *, DOMNdomain **, MESHcoord *, MESHcoord *, MATLmaterial * ); /* * Name: DOMNcheck * Purpose: checks a list of DOMNcards for input errors * Formals: cardList: the list to check * Returns: OK/E_PRIVATE * Users: numerical device setup routines * Calls: error message handler */ int DOMNcheck(DOMNcard *cardList, MaterialInfo *matlList) { DOMNcard *card; MATLmaterial *matl; int cardNum = 0; int error = OK; for ( card = cardList; card != NULL; card = card->DOMNnextCard ) { cardNum++; if (card->DOMNxLowGiven && card->DOMNixLowGiven) { SPfrontEnd->IFerrorf( ERR_INFO, "domain card %d uses both location and index - location ignored", cardNum ); card->DOMNxLowGiven = FALSE; } if (card->DOMNxHighGiven && card->DOMNixHighGiven) { SPfrontEnd->IFerrorf( ERR_INFO, "domain card %d uses both location and index - location ignored", cardNum ); card->DOMNxHighGiven = FALSE; } if (card->DOMNyLowGiven && card->DOMNiyLowGiven) { SPfrontEnd->IFerrorf( ERR_INFO, "domain card %d uses both location and index - location ignored", cardNum ); card->DOMNyLowGiven = FALSE; } if (card->DOMNyHighGiven && card->DOMNiyHighGiven) { SPfrontEnd->IFerrorf( ERR_INFO, "domain card %d uses both location and index - location ignored", cardNum ); card->DOMNyHighGiven = FALSE; } if (!card->DOMNmaterialGiven) { SPfrontEnd->IFerrorf( ERR_WARNING, "domain card %d is missing a material index", cardNum ); error = E_PRIVATE; } else { /* Make sure the material exists */ for ( matl = matlList; matl != NULL; matl = matl->next ) { if ( card->DOMNmaterial == matl->id ) { break; } } if (matl == NULL) { SPfrontEnd->IFerrorf( ERR_WARNING, "domain card %d specifies a non-existent material", cardNum ); error = E_PRIVATE; } } if (!card->DOMNnumberGiven) { SPfrontEnd->IFerrorf( ERR_WARNING, "domain card %d is missing an ID number", cardNum ); error = E_PRIVATE; } /* Return now if anything has failed */ if (error) return(error); } return(OK); } /* * Name: DOMNsetup * Purpose: convert a list of DOMNcard's to DOMNdomain's * Formals: cardList: list of cards to setup * domainList: returns the list of DOMNdomain's * xMeshList: list of coordinates in the x mesh * yMeshList: list of coordinates in the y mesh * Returns: OK/E_PRIVATE * Users: numerical devices * Calls: DOMNcheck */ int DOMNsetup(DOMNcard *cardList, DOMNdomain **domainList, MESHcoord *xMeshList, MESHcoord *yMeshList, MaterialInfo *materialList) { DOMNcard *card; DOMNdomain *newDomain = NULL; int ixMin, ixMax, iyMin, iyMax; int cardNum = 0; int error; /* Initialize list of domains */ *domainList = NULL; /* Check the card list */ if ((error = DOMNcheck( cardList, materialList )) != 0) return( error ); /* Find the limits on the indices */ MESHiBounds( xMeshList, &ixMin, &ixMax ); MESHiBounds( yMeshList, &iyMin, &iyMax ); error = OK; for ( card = cardList; card != NULL; card = card->DOMNnextCard ) { cardNum++; if (*domainList == NULL) { RALLOC( newDomain, DOMNdomain, 1 ); *domainList = newDomain; } else { RALLOC( newDomain->next, DOMNdomain, 1 ); newDomain = newDomain->next; } newDomain->id = card->DOMNnumber; newDomain->material = card->DOMNmaterial; newDomain->next = NULL; if (card->DOMNixLowGiven) { newDomain->ixLo = MAX(card->DOMNixLow, ixMin); } else if (card->DOMNxLowGiven) { newDomain->ixLo = MESHlocate( xMeshList, card->DOMNxLow ); } else { newDomain->ixLo = ixMin; } if (card->DOMNixHighGiven) { newDomain->ixHi = MIN(card->DOMNixHigh, ixMax); } else if (card->DOMNxHighGiven) { newDomain->ixHi = MESHlocate( xMeshList, card->DOMNxHigh ); } else { newDomain->ixHi = ixMax; } if (newDomain->ixLo > newDomain->ixHi) { SPfrontEnd->IFerrorf( ERR_WARNING, "domain card %d has low x index (%d) > high x index (%d)", cardNum, newDomain->ixLo, newDomain->ixHi ); error = E_PRIVATE; } if (card->DOMNiyLowGiven) { newDomain->iyLo = MAX(card->DOMNiyLow, iyMin); } else if (card->DOMNyLowGiven) { newDomain->iyLo = MESHlocate( yMeshList, card->DOMNyLow ); } else { newDomain->iyLo = iyMin; } if (card->DOMNiyHighGiven) { newDomain->iyHi = MIN(card->DOMNiyHigh, iyMax); } else if (card->DOMNyHighGiven) { newDomain->iyHi = MESHlocate( yMeshList, card->DOMNyHigh ); } else { newDomain->iyHi = iyMax; } if (newDomain->iyLo > newDomain->iyHi) { SPfrontEnd->IFerrorf( ERR_WARNING, "domain card %d has low y index (%d) > high y index (%d)", cardNum, newDomain->iyLo, newDomain->iyHi ); error = E_PRIVATE; } } return( error ); } tmpk8ny_4pz/src/ciderlib/input/mobset.c0000644000175000017500000001001413546075722020314 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group Modified: 2001 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/numconst.h" #include "ngspice/numenum.h" #include "ngspice/mobdefs.h" #include "ngspice/material.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/cidersupt.h" extern int MOBcheck( MOBcard *, MaterialInfo * ); extern int MOBsetup( MOBcard *, MaterialInfo * ); /* * Name: MOBcheck * Purpose: checks a list of MOBcards for input errors * Formals: cardList: the list to check * Returns: OK/E_PRIVATE * Users: numerical device setup routines * Calls: error message handler */ int MOBcheck(MOBcard *cardList, MaterialInfo *matlList) { MOBcard *card; MATLmaterial *matl; int cardNum = 0; int error = OK; for ( card = cardList; card != NULL; card = card->MOBnextCard ) { cardNum++; if (!card->MOBmaterialGiven) { SPfrontEnd->IFerrorf( ERR_WARNING, "mobility card %d is missing a material index", cardNum ); error = E_PRIVATE; } else { /* Make sure the material exists */ for ( matl = matlList; matl != NULL; matl = matl->next ) { if ( card->MOBmaterial == matl->id ) { break; } } if (matl == NULL) { SPfrontEnd->IFerrorf( ERR_WARNING, "mobility card %d specifies a non-existent material", cardNum ); error = E_PRIVATE; } } if (!card->MOBcarrierGiven) { card->MOBcarrier = ELEC; } if (!card->MOBcarrTypeGiven) { card->MOBcarrType = MAJOR; } if (!card->MOBinitGiven) { card->MOBinit = FALSE; } /* Return now if anything has failed */ if (error) return(error); } return(OK); } /* * Name: MOBsetup * Purpose: setup the mobility model parameters * Formals: cardList: list of cards to setup * Returns: OK/E_PRIVATE * Users: numerical devices * Calls: MOBcheck */ int MOBsetup(MOBcard *cardList, MaterialInfo *materialList) { MOBcard *card; MATLmaterial *matl; int error; /* Check the card list */ if ((error = MOBcheck( cardList, materialList )) != 0) return( error ); for ( card = cardList; card != NULL; card = card->MOBnextCard ) { /* Find the right material */ for ( matl = materialList; matl != NULL; matl = matl->next ) { if ( card->MOBmaterial == matl->id ) { break; } } /* Default models depend on previous value */ if (!card->MOBconcModelGiven) { card->MOBconcModel = matl->concModel; } if (!card->MOBfieldModelGiven) { card->MOBfieldModel = matl->fieldModel; } /* Load in default values if desired */ if ( card->MOBinitGiven ) { MOBdefaults( matl, card->MOBcarrier, card->MOBcarrType, card->MOBconcModel, card->MOBfieldModel ); } /* Override defaults */ if ( card->MOBconcModelGiven ) { matl->concModel = card->MOBconcModel; } if ( card->MOBfieldModelGiven ) { matl->fieldModel = card->MOBfieldModel; } if ( card->MOBmuMaxGiven ) { matl->muMax[card->MOBcarrier][card->MOBcarrType] = card->MOBmuMax; } if ( card->MOBmuMinGiven ) { matl->muMin[card->MOBcarrier][card->MOBcarrType] = card->MOBmuMin; } if ( card->MOBntRefGiven ) { matl->ntRef[card->MOBcarrier][card->MOBcarrType] = card->MOBntRef; } if ( card->MOBntExpGiven ) { matl->ntExp[card->MOBcarrier][card->MOBcarrType] = card->MOBntExp; } if ( card->MOBvSatGiven ) { matl->vSat[card->MOBcarrier] = card->MOBvSat; } if ( card->MOBvWarmGiven ) { matl->vWarm[card->MOBcarrier] = card->MOBvWarm; } if ( card->MOBmusGiven ) { matl->mus[card->MOBcarrier] = card->MOBmus; } if ( card->MOBecAGiven ) { matl->thetaA[card->MOBcarrier] = 1.0 / MAX( card->MOBecA, 1e-20 ); } if ( card->MOBecBGiven ) { matl->thetaB[card->MOBcarrier] = 1.0 / MAX( ABS(card->MOBecB), 1e-20 ); matl->thetaB[card->MOBcarrier] *= matl->thetaB[card->MOBcarrier]; matl->thetaB[card->MOBcarrier] *= SGN( card->MOBecB ); } } return( OK ); } tmpk8ny_4pz/src/ciderlib/input/optionsc.c0000644000175000017500000001141513546075722020667 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group Modified: 2001 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/numcards.h" #include "ngspice/numgen.h" #include "ngspice/optndefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define M_TO_CM 1.0e2 #define M2_TO_CM2 (M_TO_CM * M_TO_CM) #define UM_TO_CM 1.0e-4 #define UM2_TO_CM2 (UM_TO_CM * UM_TO_CM) extern int OPTNnewCard(GENcard**,GENmodel*); extern int OPTNparam(int,IFvalue*,GENcard*); IFparm OPTNpTable[] = { /* Supported Types of Devices. Ideally should be automatically extracted */ IP("resistor",OPTN_RESISTOR, IF_FLAG, "Resistor"), IP("capacitor",OPTN_CAPACITOR, IF_FLAG, "Capacitor"), IP("diode", OPTN_DIODE, IF_FLAG, "Diode"), IP("bipolar", OPTN_BIPOLAR, IF_FLAG, "Bipolar Transistor"), IP("bjt", OPTN_BIPOLAR, IF_FLAG, "Bipolar Transistor"), IP("soibjt", OPTN_SOIBJT, IF_FLAG, "SOI Bipolar"), IP("moscap", OPTN_MOSCAP, IF_FLAG, "MOS Capacitor"), IP("mosfet", OPTN_MOSFET, IF_FLAG, "MOSFET"), IP("soimos", OPTN_SOIMOS, IF_FLAG, "SOI MOSFET"), IP("jfet", OPTN_JFET, IF_FLAG, "Junction FET"), IP("mesfet", OPTN_MESFET, IF_FLAG, "MESFET"), /* Various layout dimensions */ IP("defa", OPTN_DEFA, IF_REAL, "Default Mask Area"), IP("defw", OPTN_DEFW, IF_REAL, "Default Mask Width"), IP("defl", OPTN_DEFL, IF_REAL, "Default Mask Length"), IP("base.area",OPTN_BASE_AREA, IF_REAL, "1D BJT Base Area"), IP("base.length",OPTN_BASE_LENGTH,IF_REAL, "1D BJT Base Length"), IP("base.depth",OPTN_BASE_DEPTH, IF_REAL, "1D BJT Base Depth"), /* Values */ IP("tnom", OPTN_TNOM, IF_REAL, "Nominal Temperature"), /* Device Initial Condition File */ IP("ic.file", OPTN_IC_FILE, IF_STRING, "Initial condition file"), IP("unique", OPTN_UNIQUE, IF_FLAG, "Generate unique filename") }; IFcardInfo OPTNinfo = { "options", "Provide optional information and hints", NUMELEMS(OPTNpTable), OPTNpTable, OPTNnewCard, OPTNparam, NULL }; int OPTNnewCard(GENcard **inCard, GENmodel *inModel) { OPTNcard *tmpCard, *newCard; GENnumModel *model = (GENnumModel *)inModel; tmpCard = model->GENoptions; if (!tmpCard) { /* First in list */ newCard = TMALLOC(OPTNcard, 1); if (!newCard) { *inCard = NULL; return(E_NOMEM); } newCard->OPTNnextCard = NULL; *inCard = (GENcard *) newCard; model->GENoptions = newCard; } else { /* Only one card of this type allowed */ *inCard = (GENcard *) tmpCard; } return(OK); } int OPTNparam(int param, IFvalue *value, GENcard *inCard) { OPTNcard *card = (OPTNcard *)inCard; switch (param) { case OPTN_RESISTOR: card->OPTNdeviceType = OPTN_RESISTOR; card->OPTNdeviceTypeGiven = TRUE; break; case OPTN_CAPACITOR: card->OPTNdeviceType = OPTN_CAPACITOR; card->OPTNdeviceTypeGiven = TRUE; break; case OPTN_DIODE: card->OPTNdeviceType = OPTN_DIODE; card->OPTNdeviceTypeGiven = TRUE; break; case OPTN_MOSCAP: card->OPTNdeviceType = OPTN_MOSCAP; card->OPTNdeviceTypeGiven = TRUE; break; case OPTN_BIPOLAR: case OPTN_SOIBJT: /* XXX Treat SOI as normal */ card->OPTNdeviceType = OPTN_BIPOLAR; card->OPTNdeviceTypeGiven = TRUE; break; case OPTN_MOSFET: case OPTN_SOIMOS: /* XXX Treat SOI as normal */ card->OPTNdeviceType = OPTN_MOSFET; card->OPTNdeviceTypeGiven = TRUE; break; case OPTN_JFET: case OPTN_MESFET: /* XXX Treat MES as junction */ card->OPTNdeviceType = OPTN_JFET; card->OPTNdeviceTypeGiven = TRUE; break; case OPTN_DEFA: card->OPTNdefa = value->rValue * M2_TO_CM2; card->OPTNdefaGiven = TRUE; break; case OPTN_DEFW: card->OPTNdefw = value->rValue * M_TO_CM; card->OPTNdefwGiven = TRUE; break; case OPTN_DEFL: card->OPTNdefl = value->rValue * M_TO_CM; card->OPTNdeflGiven = TRUE; break; case OPTN_BASE_AREA: card->OPTNbaseArea = value->rValue; card->OPTNbaseAreaGiven = TRUE; break; case OPTN_BASE_LENGTH: card->OPTNbaseLength = value->rValue * UM_TO_CM; card->OPTNbaseLengthGiven = TRUE; break; case OPTN_BASE_DEPTH: card->OPTNbaseDepth = value->rValue * UM_TO_CM; card->OPTNbaseDepthGiven = TRUE; break; case OPTN_TNOM: card->OPTNtnom = value->rValue; card->OPTNtnomGiven = TRUE; break; case OPTN_IC_FILE: card->OPTNicFile = value->sValue; card->OPTNicFileGiven = TRUE; break; case OPTN_UNIQUE: card->OPTNunique = value->iValue; card->OPTNuniqueGiven = TRUE; break; default: return(E_BADPARM); break; } return(OK); } tmpk8ny_4pz/src/ciderlib/input/matlset.c0000644000175000017500000001122113546075722020475 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 David A. Gates, U. C. Berkeley CAD Group Modified: 2001 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/numconst.h" #include "ngspice/numenum.h" #include "ngspice/matldefs.h" #include "ngspice/material.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/cidersupt.h" extern int MATLcheck( MATLcard * ); extern int MATLsetup( MATLcard *, MaterialInfo ** ); /* * Name: MATLcheck * Purpose: checks a list of MATLcards for input errors * Formals: cardList: the list to check * Returns: OK/E_PRIVATE * Users: numerical device setup routines * Calls: error message handler */ int MATLcheck(MATLcard *cardList) { MATLcard *card, *card2; int cardNum = 0, cardNum2; int error = OK; for ( card = cardList; card != NULL; card = card->MATLnextCard ) { cardNum++; if( !card->MATLmaterialGiven ) { card->MATLmaterial = SILICON; } if (!card->MATLnumberGiven) { SPfrontEnd->IFerrorf( ERR_WARNING, "material card %d is missing an id number", cardNum ); error = E_PRIVATE; } /* Return now if anything has failed */ if (error) return(error); /* Make sure this id is different from all previous ones. */ cardNum2 = 0; for ( card2 = cardList; card2 != card; card2 = card2->MATLnextCard ) { cardNum2++; if (card2->MATLnumber == card->MATLnumber) { SPfrontEnd->IFerrorf( ERR_WARNING, "material cards %d and %d use same id %d", cardNum2, cardNum, card->MATLnumber ); error = E_PRIVATE; } } /* Return now if anything has failed */ if (error) return(error); } return(OK); } /* * Name: MATLsetup * Purpose: setup the physical model parameters * Formals: cardList: list of cards to setup * Returns: OK/E_PRIVATE * Users: numerical devices * Calls: MATLcheck */ int MATLsetup(MATLcard *cardList, MaterialInfo **materialList) { MATLcard *card; MATLmaterial *newMaterial = NULL; int error; /* Initialize list of electrodes */ *materialList = NULL; /* Check the card list */ if ((error = MATLcheck( cardList )) != 0) return( error ); for ( card = cardList; card != NULL; card = card->MATLnextCard ) { if (*materialList == NULL) { RALLOC( newMaterial, MATLmaterial, 1 ); *materialList = newMaterial; } else { RALLOC( newMaterial->next, MATLmaterial, 1 ); newMaterial = newMaterial->next; } newMaterial->next = NULL; newMaterial->id = card->MATLnumber; newMaterial->material = card->MATLmaterial; /* Fill in default values */ MATLdefaults( newMaterial ); /* Now override with parameters set on the card */ if ( card->MATLpermittivityGiven ) { newMaterial->eps = card->MATLpermittivity; /* Multiply by permittivity of free space if relative epsilon given. */ if (newMaterial->eps > 0.1) { newMaterial->eps *= EPS0; } } if ( card->MATLaffinityGiven ) { newMaterial->affin = card->MATLaffinity; } if ( card->MATLnc0Given ) { newMaterial->nc0 = card->MATLnc0; } if ( card->MATLnv0Given ) { newMaterial->nv0 = card->MATLnv0; } if ( card->MATLeg0Given ) { newMaterial->eg0 = card->MATLeg0; } if ( card->MATLdEgdTGiven ) { newMaterial->dEgDt = card->MATLdEgdT; } if ( card->MATLtrefEgGiven ) { newMaterial->trefBGN = card->MATLtrefEg; } if ( card->MATLdEgdNGiven ) { newMaterial->dEgDn[ELEC] = card->MATLdEgdN; } if ( card->MATLnrefEgGiven ) { newMaterial->nrefBGN[ELEC] = card->MATLnrefEg; } if ( card->MATLdEgdPGiven ) { newMaterial->dEgDn[HOLE] = card->MATLdEgdP; } if ( card->MATLprefEgGiven ) { newMaterial->nrefBGN[HOLE] = card->MATLprefEg; } if ( card->MATLtaup0Given ) { newMaterial->tau0[HOLE] = card->MATLtaup0; } if ( card->MATLtaun0Given ) { newMaterial->tau0[ELEC] = card->MATLtaun0; } if ( card->MATLtaup0Given ) { newMaterial->tau0[HOLE] = card->MATLtaup0; } if ( card->MATLnrefSRHnGiven ) { newMaterial->nrefSRH[ELEC] = card->MATLnrefSRHn; } if ( card->MATLnrefSRHpGiven ) { newMaterial->nrefSRH[HOLE] = card->MATLnrefSRHp; } if ( card->MATLcnAugGiven ) { newMaterial->cAug[ELEC] = card->MATLcnAug; } if ( card->MATLcpAugGiven ) { newMaterial->cAug[HOLE] = card->MATLcpAug; } if ( card->MATLaRichNGiven ) { newMaterial->aRich[ELEC] = card->MATLaRichN; } if ( card->MATLaRichPGiven ) { newMaterial->aRich[HOLE] = card->MATLaRichP; } } return( OK ); } tmpk8ny_4pz/src/ciderlib/input/contset.c0000644000175000017500000000402013546075722020502 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group Modified: 2001 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/contdefs.h" #include "ngspice/meshext.h" #include "ngspice/gendev.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" extern int CONTcheck( CONTcard * ); extern int CONTsetup( CONTcard *, ELCTelectrode * ); /* * Name: CONTcheck * Purpose: checks a list of CONTcards for input errors * Formals: cardList: the list to check * Returns: OK/E_PRIVATE * Users: numerical device setup routines * Calls: error message handler */ int CONTcheck(CONTcard *cardList) { CONTcard *card; int cardNum = 0; int error = OK; for ( card = cardList; card != NULL; card = card->CONTnextCard ) { cardNum++; if (!card->CONTnumberGiven) { SPfrontEnd->IFerrorf( ERR_WARNING, "contact card %d is missing an electrode index", cardNum ); error = E_PRIVATE; } /* Return now if anything has failed */ if (error) return(error); } return(OK); } /* * Name: CONTsetup * Purpose: copies information from list of CONTcard's to ELCTelectrode's * Formals: cardList: list of cards to setup * electrodeList: previously built list of ELCTelectrode's * Returns: OK/E_PRIVATE * Users: numerical devices * Calls: CONTcheck */ int CONTsetup(CONTcard *cardList, ELCTelectrode *electrodeList) { CONTcard *card; ELCTelectrode *electrode; int error; /* Check the card list */ if ((error = CONTcheck( cardList )) != 0) return( error ); for ( card = cardList; card != NULL; card = card->CONTnextCard ) { /* Copy workfunction to all matching electrodes */ for ( electrode = electrodeList; electrode != NULL; electrode = electrode->next ) { if ( card->CONTnumber == electrode->id ) { if ( card->CONTworkfunGiven ) { electrode->workf = card->CONTworkfun; } else { electrode->workf = 4.10 /* electron volts */; } } } } return( OK ); } tmpk8ny_4pz/src/ciderlib/input/readme0000644000175000017500000000041513546075722020043 0ustar carstencarstenDirectory: input ---------------- The files in this directory serve two purposes: 1. Serve as collection point for numerical model parameters. 2. Translate data structures containing raw input into a form usable by the one- and two-dimensional device simulators. tmpk8ny_4pz/src/ciderlib/input/contact.c0000644000175000017500000000620413546075722020464 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group Modified: 2001 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/numcards.h" #include "ngspice/numgen.h" #include "ngspice/contdefs.h" #include "ngspice/devdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" extern int CONTnewCard(GENcard**,GENmodel*); extern int CONTparam(int,IFvalue*,GENcard*); IFparm CONTpTable[] = { IP("neutral", CONT_NEUTRAL, IF_FLAG, "Charge neutral"), IP("aluminum", CONT_ALUMINUM, IF_FLAG, "Aluminum contact"), IP("p.polysilicon", CONT_P_POLY, IF_FLAG, "P poly contact"), IP("n.polysilicon", CONT_N_POLY, IF_FLAG, "N poly contact"), IP("workfunction", CONT_WORKFUN, IF_REAL, "Metal work function"), IP("number", CONT_NUMBER, IF_INTEGER, "Electrode ID number") }; IFcardInfo CONTinfo = { "contact", "Properties of a contact to the device", NUMELEMS(CONTpTable), CONTpTable, CONTnewCard, CONTparam, NULL }; int CONTnewCard(GENcard **inCard, GENmodel *inModel) { CONTcard *tmpCard, *newCard; GENnumModel *model = (GENnumModel *)inModel; newCard = TMALLOC(CONTcard, 1); if (!newCard) { *inCard = NULL; return(E_NOMEM); } newCard->CONTnextCard = NULL; *inCard = (GENcard *) newCard; tmpCard = model->GENcontacts; if (!tmpCard) { /* First in list */ model->GENcontacts = newCard; } else { /* Go to end of list */ while (tmpCard->CONTnextCard) tmpCard = tmpCard->CONTnextCard; /* And add new card */ tmpCard->CONTnextCard = newCard; } return(OK); } int CONTparam(int param, IFvalue *value, GENcard *inCard) { CONTcard *card = (CONTcard *)inCard; switch (param) { case CONT_NEUTRAL: if ( value->iValue ) { card->CONTtype = CONT_NEUTRAL; card->CONTtypeGiven = TRUE; } else { if ( card->CONTtype == CONT_NEUTRAL ) { card->CONTtype = -1; card->CONTtypeGiven = FALSE; } } break; case CONT_ALUMINUM: if ( value->iValue ) { card->CONTtype = CONT_ALUMINUM; card->CONTtypeGiven = TRUE; } else { if ( card->CONTtype == CONT_ALUMINUM ) { card->CONTtype = -1; card->CONTtypeGiven = FALSE; } } break; case CONT_P_POLY: if ( value->iValue ) { card->CONTtype = CONT_P_POLY; card->CONTtypeGiven = TRUE; } else { if ( card->CONTtype == CONT_P_POLY ) { card->CONTtype = -1; card->CONTtypeGiven = FALSE; } } break; case CONT_N_POLY: if ( value->iValue ) { card->CONTtype = CONT_N_POLY; card->CONTtypeGiven = TRUE; } else { if ( card->CONTtype == CONT_N_POLY ) { card->CONTtype = -1; card->CONTtypeGiven = FALSE; } } break; case CONT_WORKFUN: card->CONTtype = CONT_WORKFUN; card->CONTtypeGiven = TRUE; card->CONTworkfun = value->rValue; card->CONTworkfunGiven = TRUE; break; case CONT_NUMBER: card->CONTnumber = value->iValue; card->CONTnumberGiven = TRUE; break; default: return(E_BADPARM); break; } return(OK); } tmpk8ny_4pz/src/ciderlib/input/modlset.c0000644000175000017500000000417413546075722020504 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 David A. Gates, U. C. Berkeley CAD Group Modified: 2001 Paolo Nenzi **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/modldefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" extern int MODLcheck( MODLcard * ); extern int MODLsetup( MODLcard * ); /* * Name: MODLcheck * Purpose: checks a list of MODLcards for input errors, sets defaults * Formals: cardList: the list to check * Returns: OK/E_PRIVATE * Users: numerical device setup routines * Calls: error message handler */ int MODLcheck(MODLcard *cardList) { MODLcard *card; int cardNum = 0; for ( card = cardList; card != NULL; card = card->MODLnextCard ) { cardNum++; if ( !card->MODLbandGapNarrowingGiven ) { card->MODLbandGapNarrowing = FALSE; } if ( !card->MODLtempDepMobilityGiven ) { card->MODLtempDepMobility = FALSE; } if ( !card->MODLconcDepMobilityGiven ) { card->MODLconcDepMobility = FALSE; } if ( !card->MODLfieldDepMobilityGiven ) { card->MODLfieldDepMobility = FALSE; } if ( !card->MODLtransDepMobilityGiven ) { card->MODLtransDepMobility = FALSE; } if ( !card->MODLsurfaceMobilityGiven ) { card->MODLsurfaceMobility = FALSE; } if ( !card->MODLmatchingMobilityGiven ) { card->MODLmatchingMobility = FALSE; } if ( !card->MODLsrhGiven ) { card->MODLsrh = FALSE; } if ( !card->MODLconcDepLifetimeGiven ) { card->MODLconcDepLifetime = FALSE; } if ( !card->MODLaugerGiven ) { card->MODLauger = FALSE; } if ( !card->MODLavalancheGenGiven ) { card->MODLavalancheGen = FALSE; } } return(OK); } /* * Name: MODLsetup * Purpose: setup the physical models used * Formals: cardList: list of cards to setup * Returns: OK/E_PRIVATE * Users: numerical devices * Calls: MODLcheck */ int MODLsetup(MODLcard *cardList) { int error; /* Check the card list */ if ((error = MODLcheck( cardList )) != 0) return( error ); /* Nothing else to do. */ return( OK ); } tmpk8ny_4pz/src/ciderlib/support/0000755000175000017500000000000013546075722017240 5ustar carstencarstentmpk8ny_4pz/src/ciderlib/support/integuse.c0000644000175000017500000001645613546075722021243 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/gendev.h" #include "ngspice/cidersupt.h" /* function to compute the integrated variables discretization */ #define ccap qcap+1 double integrate(double **devStates, TranInfo *info, int qcap ) { double value; double *coeff = info->intCoeff; switch ( info->method ) { case BDF: switch( info->order ) { case 1: value = coeff[0] * devStates[0][qcap] + coeff[1] * devStates[1][qcap]; break; case 2: value = coeff[0] * devStates[0][qcap] + coeff[1] * devStates[1][qcap] + coeff[2] * devStates[2][qcap]; break; case 3: value = coeff[0] * devStates[0][qcap] + coeff[1] * devStates[1][qcap] + coeff[2] * devStates[2][qcap] + coeff[3] * devStates[3][qcap]; break; case 4: value = coeff[0] * devStates[0][qcap] + coeff[1] * devStates[1][qcap] + coeff[2] * devStates[2][qcap] + coeff[3] * devStates[3][qcap] + coeff[4] * devStates[4][qcap]; break; case 5: value = coeff[0] * devStates[0][qcap] + coeff[1] * devStates[1][qcap] + coeff[2] * devStates[2][qcap] + coeff[3] * devStates[3][qcap] + coeff[4] * devStates[4][qcap] + coeff[5] * devStates[5][qcap]; break; case 6: value = coeff[0] * devStates[0][qcap] + coeff[1] * devStates[1][qcap] + coeff[2] * devStates[2][qcap] + coeff[3] * devStates[3][qcap] + coeff[4] * devStates[4][qcap] + coeff[5] * devStates[5][qcap] + coeff[6] * devStates[6][qcap]; break; default: printf( "\n integration order %d !! STOP \n", info->order ); exit( 0 ); } break; case TRAPEZOIDAL: default: switch( info->order ) { case 1: value = coeff[0] * devStates[0][qcap] + coeff[1] * devStates[1][qcap]; devStates[0][ccap] = value; break; case 2: value = coeff[0] * devStates[0][qcap] + coeff[1] * devStates[1][qcap] + coeff[2] * devStates[1][ccap]; devStates[0][ccap] = value; break; default: printf( "\n integration order %d !! STOP \n", info->order ); exit( 0 ); } break; } return( value ); } /* function to predict the value of the variables */ double predict(double **devStates, TranInfo *info, int qcap ) { double value; double *coeff = info->predCoeff; switch ( info->method ) { case BDF: switch( info->order ) { case 1: value = coeff[0] * devStates[1][qcap] + coeff[1] * devStates[2][qcap]; break; case 2: value = coeff[0] * devStates[1][qcap] + coeff[1] * devStates[2][qcap] + coeff[2] * devStates[3][qcap]; break; case 3: value = coeff[0] * devStates[1][qcap] + coeff[1] * devStates[2][qcap] + coeff[2] * devStates[3][qcap] + coeff[3] * devStates[4][qcap]; break; case 4: value = coeff[0] * devStates[1][qcap] + coeff[1] * devStates[2][qcap] + coeff[2] * devStates[3][qcap] + coeff[3] * devStates[4][qcap] + coeff[4] * devStates[5][qcap]; break; case 5: value = coeff[0] * devStates[1][qcap] + coeff[1] * devStates[2][qcap] + coeff[2] * devStates[3][qcap] + coeff[3] * devStates[4][qcap] + coeff[4] * devStates[5][qcap] + coeff[5] * devStates[6][qcap]; break; case 6: value = coeff[0] * devStates[1][qcap] + coeff[1] * devStates[2][qcap] + coeff[2] * devStates[3][qcap] + coeff[3] * devStates[4][qcap] + coeff[4] * devStates[5][qcap] + coeff[5] * devStates[6][qcap] + coeff[6] * devStates[7][qcap]; break; default: printf( "\n prediction order %d !! STOP \n", info->order ); exit( 0 ); } break; case TRAPEZOIDAL: default: switch( info->order ) { case 1: value = coeff[0] * devStates[1][qcap] + coeff[1] * devStates[2][qcap]; break; case 2: value = coeff[0] * devStates[1][qcap] + coeff[1] * devStates[2][qcap] + coeff[2] * devStates[3][qcap]; /* value = coeff[0] * devStates[1][qcap] + coeff[1] * devStates[2][qcap] + coeff[2] * devStates[1][ccap]; */ break; default: printf( "\n prediction order %d !! STOP \n", info->order ); exit( 0 ); } break; } return( value ); } double computeLTECoeff( TranInfo *info ) { double *delta = info->delta; double temp, denom, lteCoeff; switch ( info->method ) { case BDF: switch( info->order ) { case 1: denom = delta[ 0 ] + delta[ 1 ]; break; case 2: denom = delta[ 0 ] + delta[ 1 ] + delta[ 2 ]; break; case 3: denom = delta[ 0 ] + delta[ 1 ] + delta[ 2 ] + delta[ 3 ]; break; case 4: denom = delta[ 0 ] + delta[ 1 ] + delta[ 2 ] + delta[ 3 ] + delta[ 4 ]; break; case 5: denom = delta[ 0 ] + delta[ 1 ] + delta[ 2 ] + delta[ 3 ] + delta[ 4 ] + delta[ 5 ]; break; case 6: denom = delta[ 0 ] + delta[ 1 ] + delta[ 2 ] + delta[ 3 ] + delta[ 4 ] + delta[ 5 ] + delta[ 6 ]; break; default: printf( "\n integration order %d !! STOP \n", info->order ); exit( 0 ); break; } break; case TRAPEZOIDAL: default: switch( info->order ) { case 1: denom = delta[ 0 ] + delta[ 1 ]; break; case 2: /* denom = delta[ 0 ] + delta[ 1 ]; */ temp = delta[ 0 ] + delta [ 1 ]; denom = 2.0 * temp * (temp + delta[ 2 ]) / delta[ 0 ]; break; default: printf( "\n integration order %d !! STOP \n", info->order ); exit( 0 ); break; } break; } lteCoeff = delta[ 0 ] / denom; return( lteCoeff ); } /* function to integrate a linear DAE */ double integrateLin(double **devStates, TranInfo *info, int qcap ) { double value; double *coeff = info->intCoeff; switch ( info->method ) { case BDF: switch( info->order ) { case 1: value = coeff[1] * devStates[1][qcap]; break; case 2: value = coeff[1] * devStates[1][qcap] + coeff[2] * devStates[2][qcap]; break; case 3: value = coeff[1] * devStates[1][qcap] + coeff[2] * devStates[2][qcap] + coeff[3] * devStates[3][qcap]; break; case 4: value = coeff[1] * devStates[1][qcap] + coeff[2] * devStates[2][qcap] + coeff[3] * devStates[3][qcap] + coeff[4] * devStates[4][qcap]; break; case 5: value = coeff[1] * devStates[1][qcap] + coeff[2] * devStates[2][qcap] + coeff[3] * devStates[3][qcap] + coeff[4] * devStates[4][qcap] + coeff[5] * devStates[5][qcap]; break; case 6: value = coeff[1] * devStates[1][qcap] + coeff[2] * devStates[2][qcap] + coeff[3] * devStates[3][qcap] + coeff[4] * devStates[4][qcap] + coeff[5] * devStates[5][qcap] + coeff[6] * devStates[6][qcap]; break; default: printf( "\n integration order %d !! STOP \n", info->order ); exit( 0 ); } break; case TRAPEZOIDAL: default: switch( info->order ) { case 1: value = coeff[1] * devStates[1][qcap]; break; case 2: value = coeff[1] * devStates[1][qcap] + coeff[2] * devStates[1][ccap]; break; default: printf( "\n integration order %d !! STOP \n", info->order ); exit( 0 ); } break; } return( value ); } tmpk8ny_4pz/src/ciderlib/support/recomb.c0000644000175000017500000000265613546075722020664 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/cidersupt.h" /* * function recomb calculates the recobination rates and the * derivatives with respect to n and p. SRH recombination is * always assumed. Auger recombination is specified by the flag * 'Auger' which by default is false. */ void recomb (double ni, double pi, double tn, double tp, double cn, double cp, double nie, double *pUnet, double *pDuDn, double *pDuDp) { double uSrh, uSrhNum, uSrhDen, perUdenSq, duSrhDn, duSrhDp; double cncp, uAug, duAugDn, duAugDp, uNet, duDn, duDp; uSrhNum = ni * pi - nie * nie; uSrhDen = tp * (ni + nie) + tn * (pi + nie); uSrh = uSrhNum / uSrhDen; perUdenSq = 1.0 / (uSrhDen * uSrhDen); duSrhDn = (pi * uSrhDen - uSrhNum * tp) * perUdenSq; duSrhDp = (ni * uSrhDen - uSrhNum * tn) * perUdenSq; if (Auger && uSrhNum >= 0.0) { /* XXX Auger Global */ cncp = cn * ni + cp * pi; uAug = cncp * uSrhNum; duAugDn = cn * uSrhNum + cncp * pi; duAugDp = cp * uSrhNum + cncp * ni; uNet = uSrh + uAug; duDn = duSrhDn + duAugDn; duDp = duSrhDp + duAugDp; } else { uNet = uSrh; duDn = duSrhDn; duDp = duSrhDp; } /* return uNet duDn duDp */ *pUnet = uNet; *pDuDn = duDn; *pDuDp = duDp; } tmpk8ny_4pz/src/ciderlib/support/globals.c0000644000175000017500000001064613546075722021036 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numconst.h" #include "ngspice/numenum.h" #include "ngspice/cidersupt.h" /* Global Variable Declarations char *LogFileName = "cider.log"; int BandGapNarrowing; int TempDepMobility, ConcDepMobility, FieldDepMobility, TransDepMobility; int SurfaceMobility, MatchingMobility, MobDeriv; int CCScattering; int Srh, Auger, ConcDepLifetime, AvalancheGen; int FreezeOut = FALSE; int OneCarrier; int MaxIterations = 100; int AcAnalysisMethod = DIRECT; double Temp, RelTemp, Vt, RefPsi; double EpsNorm, VNorm, NNorm, LNorm, TNorm, JNorm, GNorm, ENorm; RefPsi is the potential at Infinity */ /* * Compute global values for this device. */ void GLOBcomputeGlobals(GLOBvalues *pGlobals, double temp) /* GLOBvalues *pGlobals Global Parameter Data Structure */ /* double temp Instance Temperature */ { double tmp1; double mnSi, mpSi; /* electron and hole conduction mass */ double eg0; /* band gap */ double nc0, nv0; /* conduction/valence band states */ /* compute temp. dependent global parameters */ Temp = temp; RelTemp = Temp / 300.0; tmp1 = pow( RelTemp, 1.5 ); Vt = BOLTZMANN_CONSTANT * Temp / CHARGE; eg0 = EGAP300_SI + DGAPDT_SI * ( (300.0 * 300.0) / (300.0 + TREF_EG_SI) - (Temp * Temp) / (Temp + TREF_EG_SI) ); mnSi = 1.039 + 5.477e-4 * Temp - 2.326e-7 * Temp * Temp; mpSi = 0.262 * log( 0.259 * Temp ); nc0 = NCV_NOM * pow( mnSi, 1.5 ) * tmp1; nv0 = NCV_NOM * pow( mpSi, 1.5 ) * tmp1; RefPsi = 0.0; /* set up the normalization factors */ EpsNorm = EPS_SI; VNorm = Vt; NNorm = sqrt( nc0 ) * sqrt( nv0 ); /* this way no overflow */ LNorm = sqrt( ( VNorm * EpsNorm ) / ( CHARGE * NNorm ) ); TNorm = LNorm * LNorm / VNorm; JNorm = CHARGE * NNorm * VNorm / LNorm; GNorm = JNorm / VNorm; ENorm = VNorm / LNorm; RefPsi /= VNorm; /* Save Globals */ GLOBputGlobals( pGlobals ); /* * GLOBprnGlobals( stdout, pGlobals ); */ } void GLOBputGlobals(GLOBvalues *values) { if ( values == NULL ) { fprintf( stderr, "Error: tried to get from NIL GLOBvalues\n"); exit(-1); } /* Temperature-related globals */ values->Temp = Temp; values->RelTemp = RelTemp; values->Vt = Vt; values->RefPsi = RefPsi; /* Normalization Factors */ values->EpsNorm = EpsNorm; values->VNorm = VNorm; values->NNorm = NNorm; values->LNorm = LNorm; values->TNorm = TNorm; values->JNorm = JNorm; values->GNorm = GNorm; values->ENorm = ENorm; return; } /* * Reload all globals needed during DEV loading routines * and DEV output routines */ void GLOBgetGlobals(GLOBvalues *values) { if ( values == NULL ) { fprintf( stderr, "Error: tried to get from NIL GLOBvalues\n"); exit(-1); } /* Temperature-related globals */ Temp = values->Temp; RelTemp = values->RelTemp; Vt = values->Vt; RefPsi = values->RefPsi; /* Normalization Factors */ EpsNorm = values->EpsNorm; VNorm = values->VNorm; NNorm = values->NNorm; LNorm = values->LNorm; TNorm = values->TNorm; JNorm = values->JNorm; GNorm = values->GNorm; ENorm = values->ENorm; return; } void GLOBprnGlobals(FILE *file, GLOBvalues *values) { static const char tabformat[] = "%12s: % .4e %-12s\t"; static const char newformat[] = "%12s: % .4e %-12s\n"; if ( values == NULL ) { fprintf( stderr, "Error: tried to print NIL GLOBvalues\n"); exit(-1); } fprintf( file, "*** GLOBAL PARAMETERS AT %g deg K\n", values->Temp ); fprintf( file, "****** Temperature-Dependent Voltages\n" ); fprintf( file, tabformat, "Vt", values->Vt, "V" ); fprintf( file, newformat, "RefPsi", values->RefPsi * values->VNorm, "V" ); fprintf( file, "****** Normalization Factors\n" ); fprintf( file, newformat, "EpsNorm", values->EpsNorm, "F/cm" ); fprintf( file, newformat, "VNorm", values->VNorm, "V" ); fprintf( file, newformat, "NNorm", values->NNorm, "/cm^3" ); fprintf( file, newformat, "LNorm", values->LNorm, "cm" ); fprintf( file, newformat, "TNorm", values->TNorm, "s" ); fprintf( file, newformat, "JNorm", values->JNorm, "A/cm^2" ); fprintf( file, newformat, "GNorm", values->GNorm, "A/V" ); fprintf( file, newformat, "ENorm", values->ENorm, "V/cm" ); return; } tmpk8ny_4pz/src/ciderlib/support/suprmitf.c0000644000175000017500000002407313546075722021263 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ /* * Translated FORTRAN subroutine to read the SUPREM-3 binary file * the data is read and stored in two arrays x and conc */ #include "ngspice/ngspice.h" #include "ngspice/cidersupt.h" #define MAXMAT 10 #define MAXIMP 4 #define MAXLAYER 10 #define MAXGRID 500 #define GFREAD( fp, ptr, type, num ) if (num && (fread( ptr,\ sizeof(type), (unsigned)num, fp ) != (unsigned)num)) {\ return;\ } #define DEBUG if (0) void SUPbinRead(char *inFile, float *x, float *conc, int *impId, int *numNod) { int idata, recordMark; int ldata; int i, j; float rdata; char cdata[21]; int numLay, numImp, numGrid; int impTyp[4], matTyp[10], topNod[10], siIndex, offset; float xStart; float layerTh[10]; float con[500]; FILE *fpSuprem; /* Clear Concentration Array */ for ( i=0; i < MAXGRID; i++ ) { conc[i] = 0.0; } /* Open Input File */ if ((fpSuprem = fopen( inFile, "r" )) == NULL) { perror(inFile); return; } /* * The first record contains the number of layers (I4), the number of * impurities (I4), and the number of nodes (I4) present in the structure. */ GFREAD( fpSuprem, &recordMark, int, 1 ); GFREAD( fpSuprem, &numLay, int, 1 ); GFREAD( fpSuprem, &numImp, int, 1 ); GFREAD( fpSuprem, &numGrid, int, 1 ); DEBUG fprintf(stderr,"rec 1: %d %d %d\n", numLay, numImp, numGrid); GFREAD( fpSuprem, &recordMark, int, 1 ); /* * The second record contains, for each layer, the material type (I4), the * layer thickness (R4), and the pointer to the top node of the layer (I4). */ GFREAD( fpSuprem, &recordMark, int, 1 ); for ( i=0; i < numLay; i++ ) { GFREAD( fpSuprem, &matTyp[i], int, 1 ); GFREAD( fpSuprem, &layerTh[i], float, 1 ); GFREAD( fpSuprem, &topNod[i], int, 1 ); DEBUG fprintf(stderr,"rec 2: %d %f %d\n", matTyp[i], layerTh[i], topNod[i] ); } GFREAD( fpSuprem, &recordMark, int, 1 ); /* * The third record contains, for each layer, the material name (A20). */ /* Put a null at the end */ cdata[20] = '\0'; GFREAD( fpSuprem, &recordMark, int, 1 ); for ( i=0; i < numLay; i++ ) { GFREAD( fpSuprem, cdata, char, 20 ); DEBUG fprintf(stderr,"rec 3: %s\n", cdata ); } GFREAD( fpSuprem, &recordMark, int, 1 ); /* * The fourth record contains, for each layer, the crystalline orientation * (I4), and the poly-crystalline grain size in microns (R4). */ GFREAD( fpSuprem, &recordMark, int, 1 ); for ( i=0; i < numLay; i++ ) { GFREAD( fpSuprem, &idata, int, 1 ); GFREAD( fpSuprem, &rdata, float, 1 ); DEBUG fprintf(stderr,"rec 4: %d %f\n", idata, rdata ); } GFREAD( fpSuprem, &recordMark, int, 1 ); /* * The fifth record contains, for each impurity, the type of impurity (I4). */ GFREAD( fpSuprem, &recordMark, int, 1 ); for ( i=0; i < numImp; i++ ) { GFREAD( fpSuprem, &impTyp[i], int, 1 ); DEBUG fprintf(stderr,"rec 5: %d\n", impTyp[i] ); } GFREAD( fpSuprem, &recordMark, int, 1 ); /* * The sixth record contains, for each impurity, the impurity name (A20). */ GFREAD( fpSuprem, &recordMark, int, 1 ); for ( i=0; i < numImp; i++ ) { GFREAD( fpSuprem, cdata, char, 20 ); DEBUG fprintf(stderr,"rec 6: %s\n", cdata ); } GFREAD( fpSuprem, &recordMark, int, 1 ); /* * The seventh record contains, for each layer by each impurity, the * integrated dopant (R4), and the interior concentration of the * polysilicon grains (R4). */ GFREAD( fpSuprem, &recordMark, int, 1 ); for ( j=0; j < numLay; j++ ) { for ( i=0; i < numImp; i++ ) { GFREAD( fpSuprem, &rdata, float, 1 ); DEBUG fprintf(stderr,"rec 7: %e", rdata ); GFREAD( fpSuprem, &rdata, float, 1 ); DEBUG fprintf(stderr," %e\n", rdata ); } } GFREAD( fpSuprem, &recordMark, int, 1 ); /* * The eighth record contains, for each node in the structure, the distance * to the next deepest node (R4). */ GFREAD( fpSuprem, &recordMark, int, 1 ); for ( i=0; i < numGrid; i++ ) { GFREAD( fpSuprem, &rdata, float, 1 ); } DEBUG fprintf(stderr,"rec 8: %f\n", rdata ); GFREAD( fpSuprem, &recordMark, int, 1 ); /* * The ninth record contains, for each node in the structure, the distance * from the surface (R4). */ GFREAD( fpSuprem, &recordMark, int, 1 ); GFREAD( fpSuprem, &x[1], float, numGrid ); DEBUG fprintf(stderr,"rec 9: %f\n", x[1] ); GFREAD( fpSuprem, &recordMark, int, 1 ); /* * Next, for each impurity there is a record containing the impurity's * chemical concentration at each node (R4) and a record containing the * impurity's active concentration at each node (R4). */ for ( j=0; j < numImp; j++ ) { /* chemical concentration - not required */ GFREAD( fpSuprem, &recordMark, int, 1 ); GFREAD( fpSuprem, &con[1], float, numGrid ); DEBUG fprintf(stderr,"rec 10: %e\n", con[1] ); GFREAD( fpSuprem, &recordMark, int, 1 ); /* store active concentration */ GFREAD( fpSuprem, &recordMark, int, 1 ); GFREAD( fpSuprem, &con[1], float, numGrid ); DEBUG fprintf(stderr,"rec 11: %e\n", con[1] ); GFREAD( fpSuprem, &recordMark, int, 1 ); if (impTyp[j] == *impId) { /*...Boron...*/ if (impTyp[j] == 1) { for ( i=1; i <= numGrid; i++ ) conc[i] = - con[i]; } else { /*...All Other Impurities: P, As, Sb ...*/ for ( i=1; i <= numGrid; i++ ) conc[i] = con[i]; } } } /* * The last record in the file contains some random stuff that might be * useful to some people, the temperature in degrees Kelvin of the last * diffusion step (R4), the phosphorus implant dose (R4), the arsenic * implant flag (L4). */ GFREAD( fpSuprem, &recordMark, int, 1 ); GFREAD( fpSuprem, &rdata, float, 1 ); DEBUG fprintf(stderr,"rec 12: %f", rdata ); GFREAD( fpSuprem, &rdata, float, 1 ); DEBUG fprintf(stderr," %e", rdata ); GFREAD( fpSuprem, &ldata, int, 1 ); DEBUG fprintf(stderr," %d\n", ldata ); GFREAD( fpSuprem, &recordMark, int, 1 ); fclose( fpSuprem ); /* shift silicon layer to beginning of array */ for ( j=numLay; --j >= 0; ) if (matTyp[ j ] == 1) break; if(j < 0) { fprintf(stderr, "internal error in %s, bye !\n", __FUNCTION__); controlled_exit(1); } siIndex = j; offset = topNod[ siIndex ] - 1; numGrid -= offset; xStart = x[1 + offset]; for ( i=1; i <= numGrid; i++ ) { x[i] = x[i + offset] - xStart; conc[i] = conc[i + offset]; } /* Store number of valid nodes using pointer */ *numNod = numGrid; return; } void SUPascRead(char *inFile, float *x, float *conc, int *impId, int *numNod) { int idata; int i, j; float rdata; char cdata[21]; int numLay, numImp, numGrid; int impTyp[4], matTyp[10], topNod[10], siIndex, offset; float xStart; float layerTh[10]; float con[500]; FILE *fpSuprem; /* Clear Concentration Array */ for ( i=0; i < MAXGRID; i++ ) { conc[i] = 0.0; } /* Open Input File */ if ((fpSuprem = fopen( inFile, "r" )) == NULL) { perror(inFile); return; } /* * The first line contains the number of layers (I4), the number of * impurities (I4), and the number of nodes (I4) present in the structure. */ fscanf( fpSuprem, "%d %d %d\n", &numLay, &numImp, &numGrid ); DEBUG fprintf( stderr, "set 1: %d %d %d\n", numLay, numImp, numGrid); /* * The second set of lines contains, for each layer, the material name (A20), * the material type (I4), the layer thickness (R4), and the pointer to * the top node of the layer (I4), and an unknown int and unknown float. * The material type code: * 1 - Si * 2 - SiO2 * 3 - Poly * 4 - Si3N4 * 5 - Alum */ for ( i=0; i < numLay; i++ ) { fscanf( fpSuprem, "%s\n %d %e %d %d %e\n", cdata, &matTyp[i], &layerTh[i], &topNod[i], &idata, &rdata ); DEBUG fprintf(stderr,"set 2: %s: %d %f %d\n", cdata, matTyp[i], layerTh[i], topNod[i] ); } /* * The third set of lines contains, for each impurity, the name of the * impurity (A20) and the type of impurity (I4). */ for ( i=0; i < numImp; i++ ) { fscanf( fpSuprem, "%s\n %d\n", cdata, &impTyp[i] ); DEBUG fprintf(stderr,"set 3: %s: %d\n", cdata, impTyp[i] ); } /* * The fourth set of lines contains, for each layer by each impurity, the * integrated dopant (R4), and the interior concentration of the * polysilicon grains (R4). */ for ( j=0; j < numLay; j++ ) { for ( i=0; i < numImp; i++ ) { fscanf( fpSuprem, "%e", &rdata ); fscanf( fpSuprem, "%e", &rdata ); } } DEBUG fprintf(stderr,"set 4:\n" ); /* * The fifth set of lines contains, for each node in the structure, * the distance to the next deepest node (R4), the distance from the * surface (R4), and, for each impurity type, the impurity's * chemical concentration (R4) and the impurity's active concentration (R4). */ for ( i=1; i <= numGrid; i++ ) { fscanf( fpSuprem, "%e %e", &rdata, &x[i] ); for ( j=0; j < numImp; j++ ) { /* chemical concentration - not required */ fscanf( fpSuprem, "%e", &con[i] ); /* store active concentration */ fscanf( fpSuprem, "%e", &con[i] ); /* orient sign properly */ if (impTyp[j] == *impId) { /*...Boron...*/ if (impTyp[j] == 1) { conc[i] = - con[i]; } else { /*...All Other Impurities: P, As, Sb ...*/ conc[i] = con[i]; } } } } DEBUG fprintf( stderr, "set 5: %e %e\n", x[1], conc[1] ); /* * The last line in the file contains some random stuff that might be * useful to some people, the temperature in degrees Kelvin of the last * diffusion step (R4), the phosphorus implant dose (R4), the arsenic * implant flag (L4). However, we can just ignore that stuff. */ fclose( fpSuprem ); /* shift silicon layer to beginning of array */ for ( j=numLay; --j >= 0; ) if (matTyp[ j ] == 1) break; if(j < 0) { fprintf(stderr, "internal error in %s, bye !\n", __FUNCTION__); controlled_exit(1); } siIndex = j; offset = topNod[ siIndex ] - 1; numGrid -= offset; xStart = x[1 + offset]; for ( i=1; i <= numGrid; i++ ) { x[i] = x[i + offset] - xStart; conc[i] = conc[i + offset]; } /* Store number of valid nodes using pointer */ *numNod = numGrid; return; } tmpk8ny_4pz/src/ciderlib/support/Makefile.am0000644000175000017500000000067213546075722021301 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libcidersuprt.la libcidersuprt_la_SOURCES = \ database.c \ devprint.c \ geominfo.c \ globals.c \ integset.c \ integuse.c \ logfile.c \ mater.c \ misc.c \ mobil.c \ recomb.c \ suprem.c \ suprmitf.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in EXTRA_DIST = readme tmpk8ny_4pz/src/ciderlib/support/suprem.c0000644000175000017500000001233113546075722020717 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ /* Functions to read SUPREM (Binary or Ascii) & ASCII input files */ #include "ngspice/ngspice.h" #include "ngspice/profile.h" #include "ngspice/cidersupt.h" void readAsciiData( char *fileName, int impType, DOPtable **ppTable ) { FILE *fpAscii; int index; double x, y; int numPoints; DOPtable *tmpTable; double **profileData; double sign; /* Open Input File */ if ((fpAscii = fopen( fileName, "r" )) == NULL) { perror( fileName ); exit(-1); } /* Get sign of concentrations */ if (impType == IMP_P_TYPE) { sign = -1.0; } else { sign = 1.0; } /* read the number of points */ fscanf( fpAscii, "%d", &numPoints ); /* allocate 2-D array to read in data of x-coordinate and N(x) */ XCALLOC( profileData, double *, 2 ); for( index = 0; index <= 1; index++ ) { XCALLOC( profileData[ index ], double, 1 + numPoints ); } /* the number of points is stored as profileData[0][0] */ profileData[0][0] = numPoints; for( index = 1; index <= numPoints; index++ ) { fscanf( fpAscii, "%lf %lf ", &x, &y ); profileData[ 0 ][ index ] = x; profileData[ 1 ][ index ] = sign * ABS(y); } /* Now create a new lookup table */ XCALLOC( tmpTable, DOPtable, 1 ); if ( *ppTable == NULL ) { /* First Entry */ tmpTable->impId = 1; tmpTable->dopData = profileData; tmpTable->next = NULL; *ppTable = tmpTable; } else { tmpTable->impId = (*ppTable)->impId + 1; tmpTable->dopData = profileData; tmpTable->next = *ppTable; *ppTable = tmpTable; } /* for debugging print the data that has been just read */ /* for( index = 1; index <= numPoints; index++ ) { printf("\n %e %e", profileData[ 0 ][ index ], profileData[ 1 ][ index ]); } */ fclose(fpAscii); return; } /* interface routine based on notes provided by Steve Hansen of Stanford */ /* * The material types are: * 1 = single crystal silicon * 2 = silicon dioxide * 3 = poly-crystalline silicon * 4 = silicon nitride * 5 = aluminum * The impurity types are: * 1 = boron * 2 = phosphorus * 3 = arsenic * 4 = antimony * The crystalline orientations are: * 1 = <111> * 2 = <100> * 3 = <110> * The layer thinkness, poly-crystalline grain size, node spacing and * distance from the surface are all in microns. * The integrated dopant concentration and the phophorus implant dose are * in atoms per square centimeter. * The interior polycrystalline grain concentration and the impurity * concentrations at each node are in atoms per cubic centimeter. */ void readSupremData(char *fileName, int fileType, int impType, DOPtable **ppTable) { #define MAX_GRID 500 float x[ MAX_GRID ], conc[ MAX_GRID ]; int index; DOPtable *tmpTable; double **profileData; int numNodes; /* read the Suprem data file */ if ( fileType == 0 ) { /* BINARY FILE */ SUPbinRead( fileName, x, conc, &impType, &numNodes ); } else { SUPascRead( fileName, x, conc, &impType, &numNodes ); } /* allocate 2-D array to read in data of x-coordinate and N(x) */ XCALLOC( profileData, double *, 2 ); for( index = 0; index <= 1; index++ ) { XCALLOC( profileData[ index ], double, 1 + numNodes ); } /* the number of points is stored as profileData[0][0] */ profileData[0][0] = numNodes; for( index = 1; index <= numNodes; index++ ) { profileData[ 0 ][ index ] = x[ index ]; profileData[ 1 ][ index ] = conc[ index ]; } /* Now create a new lookup table */ XCALLOC( tmpTable, DOPtable, 1 ); if ( *ppTable == NULL ) { /* First Entry */ tmpTable->impId = 1; tmpTable->dopData = profileData; tmpTable->next = NULL; *ppTable = tmpTable; } else { tmpTable->impId = (*ppTable)->impId + 1; tmpTable->dopData = profileData; tmpTable->next = *ppTable; *ppTable = tmpTable; } /* for debugging print the data that has been just read */ /* for( index = 1; index <= numNodes; index++ ) { printf("%e %e\n", profileData[ 0 ][ index ], profileData[ 1 ][ index ]); } */ return; } /* main program to debug readSupremData */ /* main(ac, av) char **av; { void readSupremData(); DOPtable *supTable = NULL; double **supInput; int numPoints, index; char *impName; int impType; switch (ac) { case 1: printf( "Usage: %s suprem-file ...\n", av[0] ); exit(-1); break; default: break; } for ( index = 1; index < ac; index++ ) { for ( impType=1; impType <= 4; impType++ ) { readSupremData( av[index], 1, impType, &supTable ); } } for ( ; supTable ISNOT NULL; supTable = supTable->next ) { fprintf( stdout, "\"Impurity Number: %d\n", supTable->impId ); supInput = supTable->dopData; numPoints = supInput[0][0]; for( index = 1; index <= numPoints; index++ ) { printf("%e\t%e\n", supInput[ 0 ][ index ], ABS(supInput[ 1 ][ index ]) + 1e-20 ); } fprintf( stdout, "\n" ); } } */ tmpk8ny_4pz/src/ciderlib/support/database.c0000644000175000017500000000270513546075722021154 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/fteext.h" /* #include "ftedata.h" */ #include "ngspice/cidersupt.h" struct plot * DBread( char *fileName ) { struct plot *plot; plot = raw_read( fileName ); return(plot); } double * DBgetData(struct plot *plot, char *name, int lengthWanted) { struct dvec *v; double *data; int i; v = vec_fromplot(name,plot); if (!v) { fprintf( stderr, "Error: cannot locate variable '%s'\n", name ); return(NULL); } if (v->v_length != lengthWanted ) { fprintf( stderr, "Error: vector '%s' has incorrect length\n", name ); return(NULL); } data = TMALLOC(double, v->v_length); if (isreal(v)) { memcpy(data, v->v_realdata, sizeof (double) * (size_t) v->v_length); } else { for (i=0; i < v->v_length; i++) { data[i] = realpart(v->v_compdata[i]); } } return(data); } void DBfree(struct plot *plot) { struct dvec *v, *nextv; struct plot *pl, *nextpl; for (pl = plot; pl; pl = nextpl) { nextpl = pl->pl_next; tfree( pl->pl_title ); tfree( pl->pl_date ); tfree( pl->pl_name ); tfree( pl->pl_typename ); for (v = pl->pl_dvecs; v; v = nextv) { nextv = v->v_next; vec_free( v ); } wl_free( pl->pl_commands ); /* XXX Environment variables (pl->pl_env) will leak. */ } } tmpk8ny_4pz/src/ciderlib/support/mobil.c0000644000175000017500000002612613546075722020515 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1992 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numconst.h" #include "ngspice/numenum.h" #include "ngspice/macros.h" #include "ngspice/material.h" #include "ngspice/cidersupt.h" void MOBdefaults(MaterialInfo *info , int carrier, int type, int concmodel, int fieldmodel ) { switch (concmodel) { case CT: info->concModel = CT; if (carrier == ELEC) { info->muMax[ELEC][type] = CT_MUMAX_N; info->muMin[ELEC][type] = CT_MUMIN_N; info->ntRef[ELEC][type] = CT_NTREF_N; info->ntExp[ELEC][type] = CT_NTEXP_N; } else { info->muMax[HOLE][type] = CT_MUMAX_P; info->muMin[HOLE][type] = CT_MUMIN_P; info->ntRef[HOLE][type] = CT_NTREF_P; info->ntExp[HOLE][type] = CT_NTEXP_P; } break; case AR: info->concModel = AR; if (carrier == ELEC) { info->muMax[ELEC][type] = AR_MUMAX_N; info->muMin[ELEC][type] = AR_MUMIN_N; info->ntRef[ELEC][type] = AR_NTREF_N; info->ntExp[ELEC][type] = AR_NTEXP_N; } else { info->muMax[HOLE][type] = AR_MUMAX_P; info->muMin[HOLE][type] = AR_MUMIN_P; info->ntRef[HOLE][type] = AR_NTREF_P; info->ntExp[HOLE][type] = AR_NTEXP_P; } break; case UF: info->concModel = UF; if (carrier == ELEC) { info->muMax[ELEC][type] = UF_MUMAX_N; info->muMin[ELEC][type] = UF_MUMIN_N; info->ntRef[ELEC][type] = UF_NTREF_N; info->ntExp[ELEC][type] = UF_NTEXP_N; } else { info->muMax[HOLE][type] = UF_MUMAX_P; info->muMin[HOLE][type] = UF_MUMIN_P; info->ntRef[HOLE][type] = UF_NTREF_P; info->ntExp[HOLE][type] = UF_NTEXP_P; } break; case GA: info->concModel = GA; if (carrier == ELEC) { info->muMax[ELEC][type] = GA_MUMAX_N; info->muMin[ELEC][type] = GA_MUMIN_N; info->ntRef[ELEC][type] = GA_NTREF_N; info->ntExp[ELEC][type] = GA_NTEXP_N; } else { info->muMax[HOLE][type] = GA_MUMAX_P; info->muMin[HOLE][type] = GA_MUMIN_P; info->ntRef[HOLE][type] = GA_NTREF_P; info->ntExp[HOLE][type] = GA_NTEXP_P; } break; case SG: default: info->concModel = SG; if (carrier == ELEC) { info->muMax[ELEC][type] = SG_MUMAX_N; info->muMin[ELEC][type] = SG_MUMIN_N; info->ntRef[ELEC][type] = SG_NTREF_N; info->ntExp[ELEC][type] = SG_NTEXP_N; } else { info->muMax[HOLE][type] = SG_MUMAX_P; info->muMin[HOLE][type] = SG_MUMIN_P; info->ntRef[HOLE][type] = SG_NTREF_P; info->ntExp[HOLE][type] = SG_NTEXP_P; } break; } if (type == MAJOR) { switch (fieldmodel) { case CT: info->fieldModel = CT; if (carrier == ELEC) { info->vSat[ELEC] = CT_VSAT_N; } else { info->vSat[HOLE] = CT_VSAT_P; } break; case AR: case UF: info->fieldModel = AR; if (carrier == ELEC) { info->vSat[ELEC] = AR_VSAT_N; } else { info->vSat[HOLE] = AR_VSAT_P; } break; case GA: info->fieldModel = GA; if (carrier == ELEC) { info->vSat[ELEC] = GA_VSAT_N; info->vWarm[ELEC] = GA_VWARM_N; } else { info->vSat[HOLE] = GA_VSAT_P; info->vWarm[HOLE] = GA_VWARM_P; } break; case SG: default: info->fieldModel = SG; if (carrier == ELEC) { info->vSat[ELEC] = SG_VSAT_N; info->vWarm[ELEC] = SG_VWARM_N; } else { info->vSat[HOLE] = SG_VSAT_P; info->vWarm[HOLE] = SG_VWARM_P; } break; } } } void MOBtempDep (MaterialInfo *info, double temp) { double relTemp = temp / 300.0; double factor, muMin, mu0; /* Modify if necessary. */ if (TempDepMobility) { /* Do concentration dependence parameters */ muMin = info->muMin[ELEC][MAJOR]; mu0 = info->muMax[ELEC][MAJOR] - muMin; factor = pow(relTemp, TD_EXPMUMIN_N); muMin *= factor; factor = pow(relTemp, TD_EXPMUMAX_N); mu0 *= factor; info->muMin[ELEC][MAJOR] = muMin; info->muMax[ELEC][MAJOR] = mu0 + muMin; factor = pow(relTemp, TD_EXPNTREF_N); info->ntRef[ELEC][MAJOR] *= factor; factor = pow(relTemp, TD_EXPNTEXP_N); info->ntExp[ELEC][MAJOR] *= factor; muMin = info->muMin[ELEC][MINOR]; mu0 = info->muMax[ELEC][MINOR] - muMin; factor = pow(relTemp, TD_EXPMUMIN_N); muMin *= factor; factor = pow(relTemp, TD_EXPMUMAX_N); mu0 *= factor; info->muMin[ELEC][MINOR] = muMin; info->muMax[ELEC][MINOR] = mu0 + muMin; factor = pow(relTemp, TD_EXPNTREF_N); info->ntRef[ELEC][MINOR] *= factor; factor = pow(relTemp, TD_EXPNTEXP_N); info->ntExp[ELEC][MINOR] *= factor; muMin = info->muMin[HOLE][MAJOR]; mu0 = info->muMax[HOLE][MAJOR] - muMin; factor = pow(relTemp, TD_EXPMUMIN_P); muMin *= factor; factor = pow(relTemp, TD_EXPMUMAX_P); mu0 *= factor; info->muMin[HOLE][MAJOR] = muMin; info->muMax[HOLE][MAJOR] = mu0 + muMin; factor = pow(relTemp, TD_EXPNTREF_P); info->ntRef[HOLE][MAJOR] *= factor; factor = pow(relTemp, TD_EXPNTEXP_P); info->ntExp[HOLE][MAJOR] *= factor; muMin = info->muMin[HOLE][MINOR]; mu0 = info->muMax[HOLE][MINOR] - muMin; factor = pow(relTemp, TD_EXPMUMIN_P); muMin *= factor; factor = pow(relTemp, TD_EXPMUMAX_P); mu0 *= factor; info->muMin[HOLE][MINOR] = muMin; info->muMax[HOLE][MINOR] = mu0 + muMin; factor = pow(relTemp, TD_EXPNTREF_P); info->ntRef[HOLE][MINOR] *= factor; factor = pow(relTemp, TD_EXPNTEXP_P); info->ntExp[HOLE][MINOR] *= factor; /* Modify field dependence parameters */ /* Assume warm carrier reference velocity has same temperature dep. */ factor = sqrt( tanh( TD_TREFVS_N / Temp ) ); info->vSat[ELEC] *= factor; info->vWarm[ELEC] *= factor; factor = sqrt( tanh( TD_TREFVS_P / Temp ) ); info->vSat[HOLE] *= factor; info->vWarm[HOLE] *= factor; } } void MOBconcDep (MaterialInfo *info, double conc, double *pMun, double *pMup) { double s; /* We have to check sign of conc even when concentration dependence * is not used because it affects whether carriers are majority or * minority carriers. Ideally, the minority/majority carrier models * should agree at 0.0 concentration, but often they'll be inconsistent. */ if (conc >= 0.0) { /* N type */ if (ConcDepMobility) { switch (info->concModel) { case CT: case AR: case UF: case GA: *pMun = info->muMin[ELEC][MAJOR] + (info->muMax[ELEC][MAJOR] - info->muMin[ELEC][MAJOR]) / (1.0 + pow(conc / info->ntRef[ELEC][MAJOR], info->ntExp[ELEC][MAJOR])); *pMup = info->muMin[HOLE][MINOR] + (info->muMax[HOLE][MINOR] - info->muMin[HOLE][MINOR]) / (1.0 + pow(conc / info->ntRef[HOLE][MINOR], info->ntExp[HOLE][MINOR])); break; case SG: default: s = info->muMax[ELEC][MAJOR] / info->muMin[ELEC][MAJOR]; s = pow(s, 1.0 / info->ntExp[ELEC][MAJOR]) - 1; *pMun = info->muMax[ELEC][MAJOR] / pow(1.0 + conc / (conc / s + info->ntRef[ELEC][MAJOR]), info->ntExp[ELEC][MAJOR]); s = info->muMax[HOLE][MINOR] / info->muMin[HOLE][MINOR]; s = pow(s, 1.0 / info->ntExp[HOLE][MINOR]) - 1; *pMup = info->muMax[HOLE][MINOR] / pow(1.0 + conc / (conc / s + info->ntRef[HOLE][MINOR]), info->ntExp[HOLE][MINOR]); break; } } else { *pMun = info->muMax[ELEC][MAJOR]; *pMup = info->muMax[HOLE][MINOR]; } } else { /* P type */ if (ConcDepMobility) { conc = -conc; /* Take absolute value. */ switch (info->concModel) { case CT: case AR: case UF: case GA: *pMun = info->muMin[ELEC][MINOR] + (info->muMax[ELEC][MINOR] - info->muMin[ELEC][MINOR]) / (1.0 + pow(conc / info->ntRef[ELEC][MINOR], info->ntExp[ELEC][MINOR])); *pMup = info->muMin[HOLE][MAJOR] + (info->muMax[HOLE][MAJOR] - info->muMin[HOLE][MAJOR]) / (1.0 + pow(conc / info->ntRef[HOLE][MAJOR], info->ntExp[HOLE][MAJOR])); break; case SG: default: s = info->muMax[ELEC][MINOR] / info->muMin[ELEC][MINOR]; s = pow(s, 1.0 / info->ntExp[ELEC][MINOR]) - 1; *pMun = info->muMax[ELEC][MINOR] / pow(1.0 + conc / (conc / s + info->ntRef[ELEC][MINOR]), info->ntExp[ELEC][MINOR]); s = info->muMax[HOLE][MAJOR] / info->muMin[HOLE][MAJOR]; s = pow(s, 1.0 / info->ntExp[HOLE][MAJOR]) - 1; *pMup = info->muMax[HOLE][MAJOR] / pow(1.0 + conc / (conc / s + info->ntRef[HOLE][MAJOR]), info->ntExp[HOLE][MAJOR]); break; } } else { *pMun = info->muMax[ELEC][MINOR]; *pMup = info->muMax[HOLE][MAJOR]; } } return; } void MOBfieldDep (MaterialInfo *info, int carrier, double field, double *pMu, double *pDMu) { double eLateral, mu; double sgnL; double temp1, temp2, temp3, temp4, temp5, temp6; double dMuDEl; /* Lateral Field Derivative */ /* Quick check to make sure we really belong here. */ if (!FieldDepMobility) /* XXX Global */ return; sgnL = SGN (field); eLateral = ABS (field); mu = *pMu; /* Grab temp. and conc.-dep. mobility */ if (carrier == ELEC) { switch (info->fieldModel) { case CT: case AR: case UF: temp1 = mu / info->vSat[ELEC]; temp2 = temp1 * eLateral; temp3 = 1.0 / (1.0 + temp2 * temp2); mu *= sqrt(temp3); dMuDEl = -sgnL * mu * temp3 * temp2 * temp1; break; case GA: temp1 = info->vSat[ELEC] / info->vWarm[ELEC]; /* Vsat / Vwarm */ temp2 = mu / info->vWarm[ELEC]; temp3 = temp2 * eLateral; /* Vdrift / Vwarm */ temp4 = temp3 * temp3 * temp3; temp5 = 1.0 + temp1 * temp4; temp6 = 1.0 / (1.0 + temp3 * temp4); mu *= temp5 * temp6; dMuDEl = - sgnL * mu * temp2 * (4.0 * temp4 * temp6 - 3.0 * temp1 * temp3 * temp3 / temp5 ); /* dMuDEl = 0.0; */ break; case SG: default: temp1 = mu / info->vSat[ELEC]; temp2 = temp1 * eLateral;/* Vdrift / Vsat */ temp3 = mu / info->vWarm[ELEC]; temp4 = temp3 * eLateral;/* Vdrift / Vwarm */ temp5 = temp4 / (temp4 + SG_FIT_N); temp6 = 1.0 / (1.0 + temp4 * temp5 + temp2 * temp2); mu *= sqrt(temp6); dMuDEl = -sgnL * 0.5 * mu * temp6 * (temp5 * (2.0 - temp5) * temp3 + (2.0 * temp2 * temp1)); break; } } else { /* Hole Mobility */ switch (info->fieldModel) { case CT: case AR: case UF: temp1 = mu / info->vSat[HOLE]; temp2 = temp1 * eLateral; temp3 = 1.0 / (1.0 + temp2); mu *= temp3; dMuDEl = -sgnL * mu * temp3 * temp1; break; case GA: temp1 = info->vSat[HOLE] / info->vWarm[HOLE]; /* Vsat / Vwarm */ temp2 = mu / info->vWarm[HOLE]; temp3 = temp2 * eLateral; /* Vdrift / Vwarm */ temp4 = temp3 * temp3 * temp3; temp5 = 1.0 + temp1 * temp4; temp6 = 1.0 / (1.0 + temp3 * temp4); mu *= temp5 * temp6; dMuDEl = - sgnL * mu * temp2 * (4.0 * temp4 * temp6 - 3.0 * temp1 * temp3 * temp3 / temp5 ); /* dMuDEl = 0.0; */ break; case SG: default: temp1 = mu / info->vSat[HOLE]; temp2 = temp1 * eLateral;/* Vdrift / Vsat */ temp3 = mu / info->vWarm[HOLE]; temp4 = temp3 * eLateral;/* Vdrift / Vwarm */ temp5 = temp4 / (temp4 + SG_FIT_P); temp6 = 1.0 / (1.0 + temp4 * temp5 + temp2 * temp2); mu *= sqrt(temp6); dMuDEl = -sgnL * 0.5 * mu * temp6 * (temp5 * (2.0 - temp5) * temp3 + (2.0 * temp2 * temp1)); break; } } *pMu = mu; *pDMu = dMuDEl; return; } tmpk8ny_4pz/src/ciderlib/support/mater.c0000644000175000017500000003447013546075722020524 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numconst.h" #include "ngspice/numenum.h" #include "ngspice/material.h" #include "ngspice/cidersupt.h" /* * Set material info values to their defaults. */ void MATLdefaults(MaterialInfo *info) { if ((info->material == OXIDE) || (info->material == INSULATOR)) { info->type = INSULATOR; info->eps = EPS_OX; info->affin = AFFIN_OX; info->eg0 = EGAP300_OX; } else if (info->material == NITRIDE) { info->type = INSULATOR; info->eps = EPS_NI; info->affin = AFFIN_NI; info->eg0 = EGAP300_NI; } else if (info->material == POLYSILICON) { info->type = SEMICON; info->eps = EPS_SI; info->affin = AFFIN_SI; info->nc0 = 0.0; info->nv0 = 0.0; info->eg0 = EGAP300_SI; info->dEgDt = DGAPDT_SI; info->trefBGN = TREF_EG_SI; info->dEgDn[ELEC] = DGAPDN_N; info->dEgDn[HOLE] = DGAPDN_P; info->nrefBGN[ELEC] = NBGN_N; info->nrefBGN[HOLE] = NBGN_P; info->tau0[ELEC] = TAU0_N_SI; info->tau0[HOLE] = TAU0_P_SI; info->nrefSRH[ELEC] = NSRH_N_SI; info->nrefSRH[HOLE] = NSRH_P_SI; info->cAug[ELEC] = C_AUG_N_SI; info->cAug[HOLE] = C_AUG_P_SI; info->aRich[ELEC] = A_RICH_N_SI; info->aRich[HOLE] = A_RICH_P_SI; info->eDon = E_DON_SI; info->eAcc = E_ACC_SI; info->gDon = G_DON_SI; info->gAcc = G_ACC_SI; info->concModel = CT; info->muMax[ELEC][MAJOR] = 0.07 * AR_MUMAX_N; info->muMin[ELEC][MAJOR] = 0.07 * AR_MUMIN_N; info->ntRef[ELEC][MAJOR] = AR_NTREF_N; info->ntExp[ELEC][MAJOR] = AR_NTEXP_N; info->muMax[HOLE][MAJOR] = 0.07 * AR_MUMAX_P; info->muMin[HOLE][MAJOR] = 0.07 * AR_MUMIN_P; info->ntRef[HOLE][MAJOR] = AR_NTREF_P; info->ntExp[HOLE][MAJOR] = AR_NTEXP_P; info->muMax[ELEC][MINOR] = 0.07 * UF_MUMAX_N; info->muMin[ELEC][MINOR] = 0.07 * UF_MUMIN_N; info->ntRef[ELEC][MINOR] = UF_NTREF_N; info->ntExp[ELEC][MINOR] = UF_NTEXP_N; info->muMax[HOLE][MINOR] = 0.07 * UF_MUMAX_P; info->muMin[HOLE][MINOR] = 0.07 * UF_MUMIN_P; info->ntRef[HOLE][MINOR] = UF_NTREF_P; info->ntExp[HOLE][MINOR] = UF_NTEXP_P; info->fieldModel = CT; info->vSat[ELEC] = AR_VSAT_N; info->vSat[HOLE] = AR_VSAT_P; info->vWarm[ELEC] = SG_VWARM_N; info->vWarm[HOLE] = SG_VWARM_P; info->mus[ELEC] = 0.07 * MUS_N; info->thetaA[ELEC] = THETAA_N; info->thetaB[ELEC] = THETAB_N; info->mus[HOLE] = 0.07 * MUS_P; info->thetaA[HOLE] = THETAA_P; info->thetaB[HOLE] = THETAB_P; } else if ((info->material == SILICON) || (info->material == SEMICON)) { info->type = SEMICON; info->eps = EPS_SI; info->affin = AFFIN_SI; info->nc0 = 0.0; info->nv0 = 0.0; info->eg0 = EGAP300_SI; info->dEgDt = DGAPDT_SI; info->trefBGN = TREF_EG_SI; info->dEgDn[ELEC] = DGAPDN_N; info->dEgDn[HOLE] = DGAPDN_P; info->nrefBGN[ELEC] = NBGN_N; info->nrefBGN[HOLE] = NBGN_P; info->tau0[ELEC] = TAU0_N_SI; info->tau0[HOLE] = TAU0_P_SI; info->nrefSRH[ELEC] = NSRH_N_SI; info->nrefSRH[HOLE] = NSRH_P_SI; info->cAug[ELEC] = C_AUG_N_SI; info->cAug[HOLE] = C_AUG_P_SI; info->aRich[ELEC] = A_RICH_N_SI; info->aRich[HOLE] = A_RICH_P_SI; info->eDon = E_DON_SI; info->eAcc = E_ACC_SI; info->gDon = G_DON_SI; info->gAcc = G_ACC_SI; info->concModel = CT; info->muMax[ELEC][MAJOR] = AR_MUMAX_N; info->muMin[ELEC][MAJOR] = AR_MUMIN_N; info->ntRef[ELEC][MAJOR] = AR_NTREF_N; info->ntExp[ELEC][MAJOR] = AR_NTEXP_N; info->muMax[HOLE][MAJOR] = AR_MUMAX_P; info->muMin[HOLE][MAJOR] = AR_MUMIN_P; info->ntRef[HOLE][MAJOR] = AR_NTREF_P; info->ntExp[HOLE][MAJOR] = AR_NTEXP_P; info->muMax[ELEC][MINOR] = UF_MUMAX_N; info->muMin[ELEC][MINOR] = UF_MUMIN_N; info->ntRef[ELEC][MINOR] = UF_NTREF_N; info->ntExp[ELEC][MINOR] = UF_NTEXP_N; info->muMax[HOLE][MINOR] = UF_MUMAX_P; info->muMin[HOLE][MINOR] = UF_MUMIN_P; info->ntRef[HOLE][MINOR] = UF_NTREF_P; info->ntExp[HOLE][MINOR] = UF_NTEXP_P; info->fieldModel = CT; info->vSat[ELEC] = AR_VSAT_N; info->vSat[HOLE] = AR_VSAT_P; info->vWarm[ELEC] = SG_VWARM_N; info->vWarm[HOLE] = SG_VWARM_P; info->mus[ELEC] = MUS_N; info->thetaA[ELEC] = THETAA_N; info->thetaB[ELEC] = THETAB_N; info->mus[HOLE] = MUS_P; info->thetaA[HOLE] = THETAA_P; info->thetaB[HOLE] = THETAB_P; } else if (info->material == GAAS) { info->type = SEMICON; info->eps = EPS_GA; info->affin = AFFIN_GA; info->nc0 = NCV_NOM * pow(M_N_GA, 1.5); info->nv0 = NCV_NOM * pow(M_P_GA, 1.5); info->eg0 = EGAP300_GA; info->dEgDt = DGAPDT_GA; info->trefBGN = TREF_EG_GA; info->dEgDn[ELEC] = DGAPDN_N; info->dEgDn[HOLE] = DGAPDN_P; info->nrefBGN[ELEC] = NBGN_N; info->nrefBGN[HOLE] = NBGN_P; info->tau0[ELEC] = TAU0_N_GA; info->tau0[HOLE] = TAU0_P_GA; info->nrefSRH[ELEC] = NSRH_N_GA; info->nrefSRH[HOLE] = NSRH_P_GA; info->cAug[ELEC] = C_AUG_N_GA; info->cAug[HOLE] = C_AUG_P_GA; info->aRich[ELEC] = A_RICH_N_GA; info->aRich[HOLE] = A_RICH_P_GA; info->eDon = E_DON_GA; info->eAcc = E_ACC_GA; info->gDon = G_DON_GA; info->gAcc = G_ACC_GA; info->concModel = GA; info->muMax[ELEC][MAJOR] = GA_MUMAX_N; info->muMin[ELEC][MAJOR] = GA_MUMIN_N; info->ntRef[ELEC][MAJOR] = GA_NTREF_N; info->ntExp[ELEC][MAJOR] = GA_NTEXP_N; info->muMax[HOLE][MAJOR] = GA_MUMAX_P; info->muMin[HOLE][MAJOR] = GA_MUMIN_P; info->ntRef[HOLE][MAJOR] = GA_NTREF_P; info->ntExp[HOLE][MAJOR] = GA_NTEXP_P; info->muMax[ELEC][MINOR] = GA_MUMAX_N; info->muMin[ELEC][MINOR] = GA_MUMIN_N; info->ntRef[ELEC][MINOR] = GA_NTREF_N; info->ntExp[ELEC][MINOR] = GA_NTEXP_N; info->muMax[HOLE][MINOR] = GA_MUMAX_P; info->muMin[HOLE][MINOR] = GA_MUMIN_P; info->ntRef[HOLE][MINOR] = GA_NTREF_P; info->ntExp[HOLE][MINOR] = GA_NTEXP_P; info->fieldModel = GA; info->vSat[ELEC] = GA_VSAT_N; info->vSat[HOLE] = GA_VSAT_P; info->vWarm[ELEC] = GA_VWARM_N; info->vWarm[HOLE] = GA_VWARM_P; info->mus[ELEC] = MUS_N; info->thetaA[ELEC] = THETAA_N; info->thetaB[ELEC] = THETAB_N; info->mus[HOLE] = MUS_P; info->thetaA[HOLE] = THETAA_P; info->thetaB[HOLE] = THETAB_P; } } /* * Compute the temperature-dependent physical parameters of materials * Normalize physical constants Actual Instance Temperature is passed in thru * the global var 'Temp' */ void MATLtempDep(MaterialInfo *info, double tnom) /* double tnom Nominal Parameter Temperature */ { double tmp1; double relTemp, perRelTemp; double eg0; if (info->type == INSULATOR) { info->refPsi = RefPsi - (info->affin + 0.5 * info->eg0) / VNorm; } else if (info->type == SEMICON) { /* compute temperature dependent semiconductor parameters */ relTemp = Temp / tnom; perRelTemp = 1.0 / relTemp; tmp1 = pow(relTemp, 1.5); /* Bandgap and intrinsic concentration */ eg0 = info->eg0 + (info->dEgDt * tnom * tnom) / (tnom + info->trefBGN); info->eg0 = eg0 - (info->dEgDt * Temp * Temp) / (Temp + info->trefBGN); if (info->nc0 > 0.0) { info->mass[ELEC] = pow(info->nc0 / NCV_NOM / tmp1, 2.0 / 3.0); } else { info->mass[ELEC] = 1.039 + 5.477e-4 * Temp - 2.326e-7 * Temp * Temp; } if (info->nv0 > 0.0) { info->mass[HOLE] = pow(info->nv0 / NCV_NOM / tmp1, 2.0 / 3.0); } else { info->mass[HOLE] = 0.262 * log(0.259 * Temp); } info->nc0 = NCV_NOM * pow(info->mass[ELEC], 1.5) * tmp1; info->nv0 = NCV_NOM * pow(info->mass[HOLE], 1.5) * tmp1; info->ni0 = sqrt(info->nc0) * sqrt(info->nv0) * exp(-0.5 * info->eg0 / Vt); info->refPsi = RefPsi - (info->affin + 0.5 * (info->eg0 + Vt * log(info->nc0 / info->nv0))) / VNorm; /* Impurity energies */ info->eDon /= VNorm; info->eAcc /= VNorm; /* SRH lifetimes */ tmp1 = sqrt(perRelTemp) * exp(3.8667 * (perRelTemp - 1.0)); info->tau0[ELEC] *= tmp1 / TNorm; info->tau0[HOLE] *= tmp1 / TNorm; /* Auger recombination coefficients */ info->cAug[ELEC] *= pow(relTemp, 0.14) * NNorm * NNorm * TNorm; info->cAug[HOLE] *= pow(relTemp, 0.18) * NNorm * NNorm * TNorm; /* Avalanche generation parameters */ info->aii[ELEC] = AII_N * LNorm; info->bii[ELEC] = BII_N / ENorm; info->aii[HOLE] = AII_P * LNorm; info->bii[HOLE] = BII_P / ENorm; /* Effective recombination velocities */ info->vRich[ELEC] = info->aRich[ELEC] * Temp * Temp / (CHARGE * info->nc0 * ENorm); info->vRich[HOLE] = info->aRich[HOLE] * Temp * Temp / (CHARGE * info->nv0 * ENorm); /* Mobility Temperature Dependence */ MOBtempDep(info, Temp); /* Velocity Saturation Parameters */ info->vSat[ELEC] /= ENorm; info->vWarm[ELEC] /= ENorm; info->vSat[HOLE] /= ENorm; info->vWarm[HOLE] /= ENorm; /* Normal Field Mobility Degradation Parameters */ info->thetaA[ELEC] *= ENorm; info->thetaB[ELEC] *= ENorm * ENorm; info->thetaA[HOLE] *= ENorm; info->thetaB[HOLE] *= ENorm * ENorm; } } void printMaterialInfo(MaterialInfo *info) { static const char tabformat[] = "%12s: % .4e %-12s\t"; static const char newformat[] = "%12s: % .4e %-12s\n"; char *name; if (info == NULL) { fprintf(stderr, "Error: tried to print NIL MaterialInfo\n"); exit(-1); } /* Find material name. */ switch (info->material) { case OXIDE: name = "OXIDE"; break; case NITRIDE: name = "NITRIDE"; break; case INSULATOR: name = "INSULATOR"; break; case SILICON: name = "SILICON"; break; case POLYSILICON: name = "POLYSILICON"; break; case GAAS: name = "GAAS"; break; case SEMICON: name = "SEMICONDUCTOR"; break; default: name = "MATERIAL"; break; } if (info->type == INSULATOR) { fprintf(stdout, "***** %s PARAMETERS AT %g deg K\n", name, Temp); fprintf(stdout, "*** Poisson Equation Parameters -\n"); fprintf(stdout, tabformat, "Eps", info->eps, "F/cm"); fprintf(stdout, newformat, "Affin", info->affin, "eV"); fprintf(stdout, tabformat, "Egap", info->eg0, "eV"); fprintf(stdout, newformat, "PsiB", -info->refPsi * VNorm, "V"); } else if (info->type == SEMICON) { fprintf(stdout, "***** %s PARAMETERS AT %g deg K\n", name, Temp); fprintf(stdout, "*** Poisson Equation\n"); fprintf(stdout, tabformat, "Eps", info->eps, "F/cm"); fprintf(stdout, newformat, "Affin", info->affin, "eV"); fprintf(stdout, tabformat, "Vt", Vt, "V"); fprintf(stdout, newformat, "Ni", info->ni0, "/cm^3"); fprintf(stdout, tabformat, "Nc", info->nc0, "/cm^3"); fprintf(stdout, newformat, "Nv", info->nv0, "/cm^3"); fprintf(stdout, tabformat, "MnSi", info->mass[ELEC], "*m0 kg"); fprintf(stdout, newformat, "MpSi", info->mass[HOLE], "*m0 kg"); fprintf(stdout, tabformat, "Egap", info->eg0, "eV"); fprintf(stdout, newformat, "PsiB", -info->refPsi * VNorm, "V"); fprintf(stdout, tabformat, "dEg/dT", info->dEgDt, "eV"); fprintf(stdout, newformat, "Tref", info->trefBGN, "deg K"); fprintf(stdout, tabformat, "dEg/dN", info->dEgDn[ELEC], "eV"); fprintf(stdout, newformat, "Nref", info->nrefBGN[ELEC], "/cm^3"); fprintf(stdout, tabformat, "dEg/dP", info->dEgDn[HOLE], "eV"); fprintf(stdout, newformat, "Pref", info->nrefBGN[HOLE], "/cm^3"); fprintf(stdout, tabformat, "Edon", info->eDon * VNorm, "eV"); fprintf(stdout, newformat, "Eacc", info->eAcc * VNorm, "eV"); fprintf(stdout, tabformat, "Gdon", info->gDon, ""); fprintf(stdout, newformat, "Gacc", info->gAcc, ""); fprintf(stdout, "*** Generation - Recombination\n"); fprintf(stdout, tabformat, "Tn0", info->tau0[ELEC] * TNorm, "s"); fprintf(stdout, newformat, "Tp0", info->tau0[HOLE] * TNorm, "s"); fprintf(stdout, tabformat, "CnAug", info->cAug[ELEC] / (NNorm * NNorm * TNorm), "cm^6/s"); fprintf(stdout, newformat, "CpAug", info->cAug[HOLE] / (NNorm * NNorm * TNorm), "cm^6/s"); fprintf(stdout, tabformat, "Aiin", info->aii[ELEC] / LNorm, "/cm"); fprintf(stdout, newformat, "Aiip", info->aii[HOLE] / LNorm, "/cm"); fprintf(stdout, tabformat, "Biin", info->bii[ELEC] * ENorm, "V/cm"); fprintf(stdout, newformat, "Biip", info->bii[HOLE] * ENorm, "V/cm"); fprintf(stdout, "*** Thermionic Emission\n"); fprintf(stdout, tabformat, "Arichn", info->aRich[ELEC], "A/cm^2/oK^2"); fprintf(stdout, newformat, "Arichp", info->aRich[HOLE], "A/cm^2/oK^2"); fprintf(stdout, tabformat, "Vrichn", info->vRich[ELEC] * ENorm, "cm/s"); fprintf(stdout, newformat, "Vrichp", info->vRich[HOLE] * ENorm, "cm/s"); fprintf(stdout, "*** Majority Carrier Mobility\n"); fprintf(stdout, tabformat, "MunMax", info->muMax[ELEC][MAJOR], "cm^2/V-s"); fprintf(stdout, newformat, "MupMax", info->muMax[HOLE][MAJOR], "cm^2/V-s"); fprintf(stdout, tabformat, "MunMin", info->muMin[ELEC][MAJOR], "cm^2/V-s"); fprintf(stdout, newformat, "MupMin", info->muMin[HOLE][MAJOR], "cm^2/V-s"); fprintf(stdout, "*** Minority Carrier Mobility\n"); fprintf(stdout, tabformat, "MunMax", info->muMax[ELEC][MINOR], "cm^2/V-s"); fprintf(stdout, newformat, "MupMax", info->muMax[HOLE][MINOR], "cm^2/V-s"); fprintf(stdout, tabformat, "MunMin", info->muMin[ELEC][MINOR], "cm^2/V-s"); fprintf(stdout, newformat, "MupMin", info->muMin[HOLE][MINOR], "cm^2/V-s"); fprintf(stdout, "*** Surface Mobility\n"); fprintf(stdout, tabformat, "Muns", info->mus[ELEC], "cm^2/V-s"); fprintf(stdout, newformat, "Mups", info->mus[HOLE], "cm^2/V-s"); fprintf(stdout, tabformat, "ThetaAN", info->thetaA[ELEC] / ENorm, "cm/V"); fprintf(stdout, newformat, "ThetaAP", info->thetaA[HOLE] / ENorm, "cm/V"); fprintf(stdout, tabformat, "ThetaBN", info->thetaB[ELEC] / ENorm / ENorm, "cm^2/V^2"); fprintf(stdout, newformat, "ThetaBP", info->thetaB[HOLE] / ENorm / ENorm, "cm^2/V^2"); fprintf(stdout, "*** Velocity Saturation\n"); fprintf(stdout, tabformat, "VsatN", info->vSat[ELEC] * ENorm, "cm/s"); fprintf(stdout, newformat, "VsatP", info->vSat[HOLE] * ENorm, "cm/s"); if (info->fieldModel == SG || info->fieldModel == GA) { fprintf(stdout, tabformat, "VwarmN", info->vWarm[ELEC] * ENorm, "cm/s"); fprintf(stdout, newformat, "VwarmP", info->vWarm[HOLE] * ENorm, "cm/s"); } } return; } tmpk8ny_4pz/src/ciderlib/support/integset.c0000644000175000017500000000622513546075722021233 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numenum.h" #include "ngspice/cidersupt.h" /* compute the coefficient for the integration and predictor methods */ /* based on the Lagrange polynomial method in Liniger et. al. */ void computeIntegCoeff(int method, int order, double *intCoeff, double *delta) { int i, j, k; double sum, temp, preMult; double num, denom, prod; switch( method ) { case BDF: /* determine coeff[0] first */ sum = 0.0; temp = 0.0; for( j = 0 ; j < order; j++ ) { temp += delta[ j ]; sum += 1.0 / temp; } intCoeff[ 0 ] = sum; /* now compute the higher order coefficients */ for( j = 1; j <= order ; j++ ) { /* compute the pre multiplier */ temp = 0.0; for( i = 0; i < j; i++ ) { temp += delta[ i ]; } preMult = 1.0 / temp; prod = 1.0; /* now compute the product */ for( i = 1; i <= order; i++ ) { /* product loop */ if( i != j ) { num = 0.0; for( k = 0; k < i; k++ ) { /* first the numerator */ num += delta[ k ]; } if( i > j ) { /* denom is positive */ denom = 0.0; for( k = j; k < i; k++ ) { denom += delta[ k ]; } } else { /* i < j */ denom = 0.0; for( k = i; k < j; k++ ) { denom += delta[ k ]; } denom = -denom; } prod *= num / denom ; } } intCoeff[ j ] = -preMult * prod; } break; case TRAPEZOIDAL: default: switch( order ) { case 1: temp = 1.0 / delta[ 0 ]; intCoeff[ 0 ] = temp; intCoeff[ 1 ] = -temp; break; case 2: temp = 2.0 / delta[ 0 ]; intCoeff[ 0 ] = temp; intCoeff[ 1 ] = -temp; intCoeff[ 2 ] = -1.0; break; } break; } } void computePredCoeff(int method, int order, double *predCoeff, double *delta) { int i, j, k; double num, denom, prod; if( method == TRAPEZOIDAL && order > 2 ) { printf("\n computePredCoeff: order > 2 for trapezoidal"); exit( -1 ); } for( j = 1; j <= order+1 ; j++ ) { prod = 1.0; /* now compute the product */ for( i = 1; i <= order+1; i++ ) { /* product loop */ if( i != j ) { num = 0.0; for( k = 0; k < i; k++ ) { /* first the numerator */ num += delta[ k ]; } if( i > j ) { /* denom is positive */ denom = 0.0; for( k = j; k < i; k++ ) { denom += delta[ k ]; } } else { /* i < j */ denom = 0.0; for( k = i; k < j; k++ ) { denom += delta[ k ]; } denom = -denom; } prod *= num / denom ; } } predCoeff[ j - 1 ] = prod; } } /* main program to check the coefficients main() { double intCoeff[ 7 ], predCoeff[ 7 ]; double delta[ 7 ]; int order = 1; int i; for( i = 0; i <= 6; i++ ) { delta[ i ] = 1.0; } computeIntegCoeff(TRAPEZOIDAL, order, intCoeff, delta ); computePredCoeff(TRAPEZOIDAL, order, predCoeff, delta ); for(i = 0; i <= order; i++ ) { printf("\n IntCoeff[ %d ] = %e PredCoeff[ %d ] = %e ", i, intCoeff[ i ], i, predCoeff[ i ] ); } } */ tmpk8ny_4pz/src/ciderlib/support/logfile.c0000644000175000017500000000154113546075722021026 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/cidersupt.h" static char *LogFileName = "cider.log"; static int LogError = 0; void LOGmakeEntry(char *name, char *description) { int procStamp; FILE *fpLog; #ifdef HAS_GETPID procStamp = getpid(); #else procStamp = 0; #endif /* Want to make sure that multiple processes can access the log file * without stepping on each other. */ #ifdef ultrix if ((fpLog = fopen(LogFileName, "A")) == NULL) { #else if ((fpLog = fopen(LogFileName, "a")) == NULL) { #endif if (!LogError) perror(LogFileName); LogError = 1; } else { fprintf(fpLog, "<%05d> %s: %s\n", procStamp, name, description); fclose(fpLog); LogError = 0; } } tmpk8ny_4pz/src/ciderlib/support/misc.c0000644000175000017500000001034413546075722020341 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1992 David A. Gates, U. C. Berkeley CAD Group **********/ /* * Miscellaneous routines culled from the oned directory so that the twod * code will run without having to compile the oned code */ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/spmatrix.h" #include "ngspice/cidersupt.h" /* Used in Solution Projection Calculations */ double guessNewConc(double conc, double delta) { BOOLEAN acceptable = FALSE; double fib, newConc, lambda, fibn, fibp; lambda = 1.0; fibn = 1.0; fibp = 1.0; newConc = 0.0; for ( ; !acceptable ; ) { fib = fibp; fibp = fibn; fibn += fib; lambda *= fibp / fibn; newConc = conc + delta * lambda; if( newConc > 0.0 ) { acceptable = TRUE; } else { /* newConc is still negative but fibp and fibn are large */ if ( (fibp > 1e6) || (fibn > 1e6) ) { acceptable = TRUE; newConc = conc; } } } return( newConc ); } /* Used in Doping Calculation */ /* compute the concentration at x given an array of data. * The data is stored in a two-dimensional array x, N(x). * x is assumed to be in ascending order. given an x * a search is performed to determine the data points closest * to it and linear interpolation is performed to generate N(x) */ /* #define LOGSUPREM */ double lookup(double **dataTable, double x) { double conc=0.0, x0, x1, y0, y1; #ifdef LOGSUPREM double lnconc, lny0, lny1; #endif int index, numPoints; BOOLEAN done = FALSE; numPoints = (int)dataTable[ 0 ][ 0 ]; for( index = 2; index <= numPoints && (!done); index++ ) { x1 = dataTable[ 0 ][ index ]; /* check if x1 > x */ if( x1 >= x ) { /* found an x1 larger than x, so linear interpolate */ x0 = dataTable[ 0 ][ index - 1 ]; y0 = dataTable[ 1 ][ index - 1 ]; y1 = dataTable[ 1 ][ index ]; #ifdef LOGSUPREM /* Ignore concentrations below 1.0 */ if ( ABS(y0) < 1.0 ) lny0 = 0.0; else lny0 = SGN(y0) * log( ABS(y0) ); if ( ABS(y1) < 1.0 ) lny1 = 0.0; else lny1 = SGN(y0) * log( ABS(y0) ); lnconc = lny0 + (lny1 - lny0) * (x - x0) / (x1 - x0); conc = SGN(lnconc) * exp( ABS(lnconc) ); #else conc = y0 + (y1 - y0) * (x - x0) / (x1 - x0); #endif /* LOGSUPREM */ done = TRUE; } else { if( index == numPoints ) { /* set to concentration of last node - due to roundoff errors */ conc = dataTable[ 1 ][ numPoints ]; } } } return ( conc ); } /* Used in admittance calculations */ /* this function returns TRUE is SOR iteration converges otherwise FALSE */ BOOLEAN hasSORConverged(double *oldSolution, double *newSolution, int numEqns) { BOOLEAN converged = TRUE; int index; double xOld, xNew, tol; double absTol = 1e-12; double relTol = 1e-3; for( index = 1 ; index <= numEqns ; index++ ) { xOld = oldSolution[ index ]; xNew = newSolution[ index ]; tol = absTol + relTol * MAX( ABS( xOld ), ABS( xNew )); if( ABS( xOld - xNew ) > tol ) { converged = FALSE; printf("hasSORconverged failed\n"); break; } } return( converged ); } /* Used to Check Sparse Matrix Errors */ BOOLEAN foundError(int error) { BOOLEAN matrixError; switch( error ) { /* Removed for Spice3e1 Compatibility case spSMALL_PIVOT: printf( "Warning: LU Decomposition Problem - SMALL PIVOT\n" ); matrixError = FALSE; break; */ case spPANIC: printf( "Error: LU Decomposition Failed - PANIC\n" ); matrixError = TRUE; break; case spSINGULAR: printf( "Error: LU Decomposition Failed - SINGULAR\n" ); matrixError = TRUE; break; /* Removed for Spice3e1 Compatibility case spZERO_DIAG: printf( "Error: LU Decomposition Failed - ZERO PIVOT\n" ); matrixError = TRUE; break; */ case spNO_MEMORY: printf( "Error: LU Decomposition Failed - NO MEMORY\n" ); matrixError = TRUE; break; default: matrixError = FALSE; break; } return( matrixError ); } tmpk8ny_4pz/src/ciderlib/support/readme0000644000175000017500000000072413546075722020423 0ustar carstencarstenDirectory: support ------------------ This directory contains the files that support the device simulators and their interfaces to the circuit simulators. They fall into four basic areas: 1. Numerical algorithms: integration, accuracy limits, special functions 2. Semiconductor device physics: material properties, recombination, mobility 3. File access for input: doping profiles from SUPREMIII, saved states 4. Miscellaneous: diagnstic I/O, string routines tmpk8ny_4pz/src/ciderlib/support/geominfo.c0000644000175000017500000000636313546075722021217 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/gendev.h" #include "ngspice/macros.h" #include "ngspice/memory.h" #include "ngspice/cidersupt.h" void printCoordInfo(CoordInfo *pFirstCoord) { CoordInfo *pCoord; for ( pCoord = pFirstCoord; pCoord != NULL; pCoord = pCoord->next ) { fprintf(stderr, "mesh number=%4d location=%11.4e\n", pCoord->number, pCoord->location ); } } void killCoordInfo(CoordInfo *pFirstCoord) { CoordInfo *pCoord, *pKill; for ( pCoord = pFirstCoord; pCoord != NULL; ) { pKill = pCoord; pCoord = pCoord->next; FREE( pKill ); } } void ONEprintDomainInfo(DomainInfo *pFirstDomain) { DomainInfo *pDomain; for ( pDomain = pFirstDomain; pDomain != NULL; pDomain = pDomain->next ) { fprintf( stderr, "domain id=%4d mat=%4d ixLo=%4d ixHi=%4d\n", pDomain->id, pDomain->material, pDomain->ixLo, pDomain->ixHi ); } } void TWOprintDomainInfo(DomainInfo *pFirstDomain) { DomainInfo *pDomain; for ( pDomain = pFirstDomain; pDomain != NULL; pDomain = pDomain->next ) { fprintf( stderr, "domain id=%4d mat=%4d ixLo=%4d ixHi=%4d iyLo=%4d iyHi=%4d\n", pDomain->id, pDomain->material, pDomain->ixLo, pDomain->ixHi, pDomain->iyLo, pDomain->iyHi); } } void killDomainInfo(DomainInfo *pFirstDomain) { DomainInfo *pDomain, *pKill; for ( pDomain = pFirstDomain; pDomain != NULL; ) { pKill = pDomain; pDomain = pDomain->next; FREE( pKill ); } } void ONEprintBoundaryInfo(BoundaryInfo *pFirstBoundary) { BoundaryInfo *pBoundary; for ( pBoundary = pFirstBoundary; pBoundary != NULL; pBoundary = pBoundary->next ) { fprintf( stderr, "boundary dom=%4d nbr=%4d ixLo=%4d ixHi=%4d\n", pBoundary->domain, pBoundary->neighbor, pBoundary->ixLo, pBoundary->ixHi ); } } void TWOprintBoundaryInfo(BoundaryInfo *pFirstBoundary) { BoundaryInfo *pBoundary; for ( pBoundary = pFirstBoundary; pBoundary != NULL; pBoundary = pBoundary->next ) { fprintf( stderr, "boundary dom=%4d nbr=%4d ixLo=%4d ixHi=%4d iyLo=%4d iyHi=%4d\n", pBoundary->domain, pBoundary->neighbor, pBoundary->ixLo, pBoundary->ixHi, pBoundary->iyLo, pBoundary->iyHi); } } void killBoundaryInfo(BoundaryInfo *pFirstBoundary) { BoundaryInfo *pBoundary, *pKill; for ( pBoundary = pFirstBoundary; pBoundary != NULL; ) { pKill = pBoundary; pBoundary = pBoundary->next; FREE( pKill ); } } void TWOprintElectrodeInfo(ElectrodeInfo *pFirstElectrode) { ElectrodeInfo *pElectrode; for ( pElectrode = pFirstElectrode; pElectrode != NULL; pElectrode = pElectrode->next ) { fprintf( stderr, "electrode id=%4d ixLo=%4d ixHi=%4d iyLo=%4d iyHi=%4d\n", pElectrode->id, pElectrode->ixLo, pElectrode->ixHi, pElectrode->iyLo, pElectrode->iyHi ); } } void killElectrodeInfo(ElectrodeInfo *pFirstElectrode) { ElectrodeInfo *pElectrode, *pKill; for ( pElectrode = pFirstElectrode; pElectrode != NULL; ) { pKill = pElectrode; pElectrode = pElectrode->next; FREE( pKill ); } } tmpk8ny_4pz/src/ciderlib/support/devprint.c0000644000175000017500000000522713546075722021245 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 David A. Gates, U. C. Berkeley CAD Group **********/ /* Device-type Dependent Printing Routines */ #include "ngspice/ngspice.h" #include "ngspice/optndefs.h" #include "ngspice/cidersupt.h" void printVoltages(FILE *file, char *mName, char *iName, int devType, int numVolt, double v1, double delV1, double v2, double delV2, double v3, double delV3 ) /* FILE *file output filestream */ /* char *mName name of model */ /* char *iName name of instance */ { fprintf( file, "\n" ); switch ( devType ) { case OPTN_RESISTOR: fprintf( file, "RES %s:%s voltage:\n", mName, iName ); fprintf( file, " Vpn =% .4e delVpn =% .4e\n", v1, delV1 ); break; case OPTN_CAPACITOR: fprintf( file, "CAP %s:%s voltage:\n", mName, iName ); fprintf( file, " Vpn =% .4e delVpn =% .4e\n", v1, delV1 ); break; case OPTN_DIODE: fprintf( file, "DIO %s:%s voltage:\n", mName, iName ); fprintf( file, " Vpn =% .4e delVpn =% .4e\n", v1, delV1 ); break; case OPTN_MOSCAP: fprintf( file, "MOS %s:%s voltage:\n", mName, iName ); fprintf( file, " Vgb =% .4e delVgb =% .4e\n", v1, delV1 ); break; case OPTN_BIPOLAR: fprintf( file, "BJT %s:%s voltages:\n", mName, iName ); if ( numVolt == 3 ) { fprintf( file, " Vce =% .4e delVce =% .4e\n", v1 - v3, delV1 - delV3 ); fprintf( file, " Vbe =% .4e delVbe =% .4e\n", v2 - v3, delV2 - delV3 ); fprintf( file, " Vcs =% .4e delVcs =% .4e\n", v1, delV1 ); } else { fprintf( file, " Vce =% .4e delVce =% .4e\n", v1, delV1 ); fprintf( file, " Vbe =% .4e delVbe =% .4e\n", v2, delV2 ); } break; case OPTN_MOSFET: fprintf( file, "MOS %s:%s voltages:\n", mName, iName ); fprintf( file, " Vdb =% .4e delVdb =% .4e\n", v1, delV1 ); fprintf( file, " Vgb =% .4e delVgb =% .4e\n", v2, delV2 ); fprintf( file, " Vsb =% .4e delVsb =% .4e\n", v3, delV3 ); break; case OPTN_JFET: if ( numVolt == 3 ) { fprintf( file, "JFET %s:%s voltages:\n", mName, iName ); fprintf( file, " Vdb =% .4e delVdb =% .4e\n", v1, delV1 ); fprintf( file, " Vgb =% .4e delVgb =% .4e\n", v2, delV2 ); fprintf( file, " Vsb =% .4e delVsb =% .4e\n", v3, delV3 ); } else { fprintf( file, "JFET %s:%s voltages:\n", mName, iName ); fprintf( file, " Vds =% .4e delVds =% .4e\n", v1, delV1 ); fprintf( file, " Vgs =% .4e delVgs =% .4e\n", v2, delV2 ); } break; case OPTN_SOIBJT: case OPTN_SOIMOS: case OPTN_MESFET: default: break; } } tmpk8ny_4pz/src/ciderlib/notes0000644000175000017500000000075013546075722016601 0ustar carstencarsten1. Crucial Difference between Spice3f1 and Spice3e2: The 'states' field in the ***instance structured has been moved. Belongs below the node id's in Spice3e2. 2. Crucial Differences between Spice3f2 and Spice3f1: Addition of DEVunSetup call to ***itf.h files The 3f2 input parser can't handle arithmetic operators in strings. A special call has been added in spiceitf/inpgval.c to specially parse strings. Quotes (either "foobar" or 'foobar') are stripped from the string. tmpk8ny_4pz/src/ciderlib/twod/0000755000175000017500000000000013546075722016501 5ustar carstencarstentmpk8ny_4pz/src/ciderlib/twod/twocont.c0000644000175000017500000010651313546075722020350 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/twomesh.h" #include "ngspice/twodev.h" #include "ngspice/bool.h" #include "ngspice/spmatrix.h" #include "twoddefs.h" #include "twodext.h" #include "ngspice/cidersupt.h" #include "../../maths/misc/bernoull.h" /* * Functions to setup and solve the continuity equations. * Both continuity equations are solved. * Separate functions are used for one continuity equation. */ /* * setup matrix pointers to Jacobian values and * store direct pointers with the nodes */ void TWO_jacBuild(TWOdevice *pDevice) { SMPmatrix *matrix = pDevice->matrix; TWOelem *pElem; TWOnode *pNode; TWOchannel *pCh; int eIndex, nIndex; int nextIndex; /* index of node to find next element */ int psiEqn, nEqn, pEqn; /* scratch for deref'd eqn numbers */ int psiEqnTL = 0, nEqnTL = 0, pEqnTL = 0; int psiEqnTR = 0, nEqnTR = 0, pEqnTR = 0; int psiEqnBR = 0, nEqnBR = 0, pEqnBR = 0; int psiEqnBL = 0, nEqnBL = 0, pEqnBL = 0; int psiEqnInM = 0, psiEqnInP = 0; /* scratch for deref'd surface eqns */ int psiEqnOxM = 0, psiEqnOxP = 0; /* M= more negative, P= more positive */ for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; /* first the self terms */ for ( nIndex = 0; nIndex <= 3; nIndex++ ) { pNode = pElem->pNodes[ nIndex ]; /* get poisson-only pointer */ psiEqn = pNode->psiEqn; pNode->fPsiPsi = spGetElement( matrix, psiEqn, psiEqn ); if ( pElem->elemType == SEMICON ) { /* get continuity-coupling terms */ nEqn = pNode->nEqn; pEqn = pNode->pEqn; /* pointers for additional terms */ pNode->fPsiN = spGetElement( matrix, psiEqn, nEqn ); pNode->fPsiP = spGetElement( matrix, psiEqn, pEqn ); pNode->fNPsi = spGetElement( matrix, nEqn, psiEqn ); pNode->fNN = spGetElement( matrix, nEqn, nEqn ); pNode->fNP = spGetElement( matrix, nEqn, pEqn ); pNode->fPPsi = spGetElement( matrix, pEqn, psiEqn ); pNode->fPN = spGetElement( matrix, pEqn, nEqn ); pNode->fPP = spGetElement( matrix, pEqn, pEqn ); } else { nEqn = 0; pEqn = 0; } /* save equation indices */ switch ( nIndex ) { case 0: /* TL Node */ psiEqnTL = psiEqn; nEqnTL = nEqn; pEqnTL = pEqn; break; case 1: /* TR Node */ psiEqnTR = psiEqn; nEqnTR = nEqn; pEqnTR = pEqn; break; case 2: /* BR Node */ psiEqnBR = psiEqn; nEqnBR = nEqn; pEqnBR = pEqn; break; case 3: /* BL Node */ psiEqnBL = psiEqn; nEqnBL = nEqn; pEqnBL = pEqn; break; default: break; } } /* now terms to couple to adjacent nodes */ pNode = pElem->pTLNode; pNode->fPsiPsiiP1 = spGetElement(matrix, psiEqnTL, psiEqnTR ); pNode->fPsiPsijP1 = spGetElement(matrix, psiEqnTL, psiEqnBL ); if ( pElem->elemType == SEMICON ) { /* continuity equation pointers */ pNode->fNPsiiP1 = spGetElement( matrix, nEqnTL, psiEqnTR ); pNode->fNNiP1 = spGetElement( matrix, nEqnTL, nEqnTR ); pNode->fNPsijP1 = spGetElement( matrix, nEqnTL, psiEqnBL ); pNode->fNNjP1 = spGetElement( matrix, nEqnTL, nEqnBL ); pNode->fPPsiiP1 = spGetElement( matrix, pEqnTL, psiEqnTR ); pNode->fPPiP1 = spGetElement( matrix, pEqnTL, pEqnTR ); pNode->fPPsijP1 = spGetElement( matrix, pEqnTL, psiEqnBL ); pNode->fPPjP1 = spGetElement( matrix, pEqnTL, pEqnBL ); /* Surface Mobility Model depends on diagonal node values */ if ( MobDeriv && SurfaceMobility && pElem->channel ) { pNode->fNPsiiP1jP1 = spGetElement( matrix, nEqnTL, psiEqnBR ); pNode->fNNiP1jP1 = spGetElement( matrix, nEqnTL, nEqnBR ); pNode->fPPsiiP1jP1 = spGetElement( matrix, pEqnTL, psiEqnBR ); pNode->fPPiP1jP1 = spGetElement( matrix, pEqnTL, pEqnBR ); } } pNode = pElem->pTRNode; pNode->fPsiPsiiM1 = spGetElement(matrix, psiEqnTR, psiEqnTL ); pNode->fPsiPsijP1 = spGetElement(matrix, psiEqnTR, psiEqnBR ); if ( pElem->elemType == SEMICON ) { /* continuity equation pointers */ pNode->fNPsiiM1 = spGetElement( matrix, nEqnTR, psiEqnTL ); pNode->fNNiM1 = spGetElement( matrix, nEqnTR, nEqnTL ); pNode->fNPsijP1 = spGetElement( matrix, nEqnTR, psiEqnBR ); pNode->fNNjP1 = spGetElement( matrix, nEqnTR, nEqnBR ); pNode->fPPsiiM1 = spGetElement( matrix, pEqnTR, psiEqnTL ); pNode->fPPiM1 = spGetElement( matrix, pEqnTR, pEqnTL ); pNode->fPPsijP1 = spGetElement( matrix, pEqnTR, psiEqnBR ); pNode->fPPjP1 = spGetElement( matrix, pEqnTR, pEqnBR ); /* Surface Mobility Model depends on diagonal node values */ if ( MobDeriv && SurfaceMobility && pElem->channel ) { pNode->fNPsiiM1jP1 = spGetElement( matrix, nEqnTR, psiEqnBL ); pNode->fNNiM1jP1 = spGetElement( matrix, nEqnTR, nEqnBL ); pNode->fPPsiiM1jP1 = spGetElement( matrix, pEqnTR, psiEqnBL ); pNode->fPPiM1jP1 = spGetElement( matrix, pEqnTR, pEqnBL ); } } pNode = pElem->pBRNode; pNode->fPsiPsiiM1 = spGetElement(matrix, psiEqnBR, psiEqnBL ); pNode->fPsiPsijM1 = spGetElement(matrix, psiEqnBR, psiEqnTR ); if ( pElem->elemType == SEMICON ) { /* continuity equation pointers */ pNode->fNPsiiM1 = spGetElement( matrix, nEqnBR, psiEqnBL ); pNode->fNNiM1 = spGetElement( matrix, nEqnBR, nEqnBL ); pNode->fNPsijM1 = spGetElement( matrix, nEqnBR, psiEqnTR ); pNode->fNNjM1 = spGetElement( matrix, nEqnBR, nEqnTR ); pNode->fPPsiiM1 = spGetElement( matrix, pEqnBR, psiEqnBL ); pNode->fPPiM1 = spGetElement( matrix, pEqnBR, pEqnBL ); pNode->fPPsijM1 = spGetElement( matrix, pEqnBR, psiEqnTR ); pNode->fPPjM1 = spGetElement( matrix, pEqnBR, pEqnTR ); /* Surface Mobility Model depends on diagonal node values */ if ( MobDeriv && SurfaceMobility && pElem->channel ) { pNode->fNPsiiM1jM1 = spGetElement( matrix, nEqnBR, psiEqnTL ); pNode->fNNiM1jM1 = spGetElement( matrix, nEqnBR, nEqnTL ); pNode->fPPsiiM1jM1 = spGetElement( matrix, pEqnBR, psiEqnTL ); pNode->fPPiM1jM1 = spGetElement( matrix, pEqnBR, pEqnTL ); } } pNode = pElem->pBLNode; pNode->fPsiPsiiP1 = spGetElement(matrix, psiEqnBL, psiEqnBR ); pNode->fPsiPsijM1 = spGetElement(matrix, psiEqnBL, psiEqnTL ); if ( pElem->elemType == SEMICON ) { /* continuity equation pointers */ pNode->fNPsiiP1 = spGetElement( matrix, nEqnBL, psiEqnBR ); pNode->fNNiP1 = spGetElement( matrix, nEqnBL, nEqnBR ); pNode->fNPsijM1 = spGetElement( matrix, nEqnBL, psiEqnTL ); pNode->fNNjM1 = spGetElement( matrix, nEqnBL, nEqnTL ); pNode->fPPsiiP1 = spGetElement( matrix, pEqnBL, psiEqnBR ); pNode->fPPiP1 = spGetElement( matrix, pEqnBL, pEqnBR ); pNode->fPPsijM1 = spGetElement( matrix, pEqnBL, psiEqnTL ); pNode->fPPjM1 = spGetElement( matrix, pEqnBL, pEqnTL ); /* Surface Mobility Model depends on diagonal node values */ if ( MobDeriv && SurfaceMobility && pElem->channel ) { pNode->fNPsiiP1jM1 = spGetElement( matrix, nEqnBL, psiEqnTR ); pNode->fNNiP1jM1 = spGetElement( matrix, nEqnBL, nEqnTR ); pNode->fPPsiiP1jM1 = spGetElement( matrix, pEqnBL, psiEqnTR ); pNode->fPPiP1jM1 = spGetElement( matrix, pEqnBL, pEqnTR ); } } } /* * Add terms for surface-field of inversion-layer mobility model. * Elements MUST be made from silicon for this to work. * No empty elements are allowed. * Don't need these pointers if SurfaceMobility isn't set. */ if ( MobDeriv && SurfaceMobility ) { for ( pCh = pDevice->pChannel; pCh != NULL; pCh = pCh->next ) { pElem = pCh->pNElem; switch (pCh->type) { case 0: psiEqnInM = pElem->pBLNode->psiEqn; psiEqnInP = pElem->pBRNode->psiEqn; psiEqnOxM = pElem->pTLNode->psiEqn; psiEqnOxP = pElem->pTRNode->psiEqn; break; case 1: psiEqnInM = pElem->pTLNode->psiEqn; psiEqnInP = pElem->pBLNode->psiEqn; psiEqnOxM = pElem->pTRNode->psiEqn; psiEqnOxP = pElem->pBRNode->psiEqn; break; case 2: psiEqnInM = pElem->pTLNode->psiEqn; psiEqnInP = pElem->pTRNode->psiEqn; psiEqnOxM = pElem->pBLNode->psiEqn; psiEqnOxP = pElem->pBRNode->psiEqn; break; case 3: psiEqnInM = pElem->pTRNode->psiEqn; psiEqnInP = pElem->pBRNode->psiEqn; psiEqnOxM = pElem->pTLNode->psiEqn; psiEqnOxP = pElem->pBLNode->psiEqn; break; } pElem = pCh->pSeed; nextIndex = (pCh->type + 2)%4; while (pElem && pElem->channel == pCh->id) { for ( nIndex = 0; nIndex <= 3; nIndex++ ) { pNode = pElem->pNodes[ nIndex ]; psiEqn = pNode->psiEqn; nEqn = pNode->nEqn; pEqn = pNode->pEqn; if ( pCh->type % 2 == 0 ) { /* Vertical Slice */ if ( nIndex == 0 || nIndex == 3 ) { /* Left Side */ pNode->fNPsiIn = spGetElement( matrix, nEqn, psiEqnInM ); pNode->fNPsiInP1 = spGetElement( matrix, nEqn, psiEqnInP ); pNode->fNPsiOx = spGetElement( matrix, nEqn, psiEqnOxM ); pNode->fNPsiOxP1 = spGetElement( matrix, nEqn, psiEqnOxP ); pNode->fPPsiIn = spGetElement( matrix, pEqn, psiEqnInM ); pNode->fPPsiInP1 = spGetElement( matrix, pEqn, psiEqnInP ); pNode->fPPsiOx = spGetElement( matrix, pEqn, psiEqnOxM ); pNode->fPPsiOxP1 = spGetElement( matrix, pEqn, psiEqnOxP ); } else { /* Right Side */ pNode->fNPsiInM1 = spGetElement( matrix, nEqn, psiEqnInM ); pNode->fNPsiIn = spGetElement( matrix, nEqn, psiEqnInP ); pNode->fNPsiOxM1 = spGetElement( matrix, nEqn, psiEqnOxM ); pNode->fNPsiOx = spGetElement( matrix, nEqn, psiEqnOxP ); pNode->fPPsiInM1 = spGetElement( matrix, pEqn, psiEqnInM ); pNode->fPPsiIn = spGetElement( matrix, pEqn, psiEqnInP ); pNode->fPPsiOxM1 = spGetElement( matrix, pEqn, psiEqnOxM ); pNode->fPPsiOx = spGetElement( matrix, pEqn, psiEqnOxP ); } } else { /* Horizontal Slice */ if ( nIndex <= 1 ) { /* Top Side */ pNode->fNPsiIn = spGetElement( matrix, nEqn, psiEqnInM ); pNode->fNPsiInP1 = spGetElement( matrix, nEqn, psiEqnInP ); pNode->fNPsiOx = spGetElement( matrix, nEqn, psiEqnOxM ); pNode->fNPsiOxP1 = spGetElement( matrix, nEqn, psiEqnOxP ); pNode->fPPsiIn = spGetElement( matrix, pEqn, psiEqnInM ); pNode->fPPsiInP1 = spGetElement( matrix, pEqn, psiEqnInP ); pNode->fPPsiOx = spGetElement( matrix, pEqn, psiEqnOxM ); pNode->fPPsiOxP1 = spGetElement( matrix, pEqn, psiEqnOxP ); } else { /* Bottom Side */ pNode->fNPsiInM1 = spGetElement( matrix, nEqn, psiEqnInM ); pNode->fNPsiIn = spGetElement( matrix, nEqn, psiEqnInP ); pNode->fNPsiOxM1 = spGetElement( matrix, nEqn, psiEqnOxM ); pNode->fNPsiOx = spGetElement( matrix, nEqn, psiEqnOxP ); pNode->fPPsiInM1 = spGetElement( matrix, pEqn, psiEqnInM ); pNode->fPPsiIn = spGetElement( matrix, pEqn, psiEqnInP ); pNode->fPPsiOxM1 = spGetElement( matrix, pEqn, psiEqnOxM ); pNode->fPPsiOx = spGetElement( matrix, pEqn, psiEqnOxP ); } } } /* endfor nIndex */ pElem = pElem->pElems[ nextIndex ]; } /* endwhile pElem */ } /* endfor pCh */ } /* endif SurfaceMobility */ } /* * The Jacobian and Rhs are loaded by the following function. * Inputs are the transient analysis flag and the transient * information structure */ void TWO_sysLoad(TWOdevice *pDevice, BOOLEAN tranAnalysis, TWOtranInfo *info) { TWOelem *pElem; TWOnode *pNode; TWOedge *pHEdge, *pVEdge; TWOedge *pTEdge, *pBEdge, *pLEdge, *pREdge; TWOchannel *pCh; int index, eIndex; int nextIndex; /* index of node to find next element */ double *pRhs = pDevice->rhs; double dx, dy, dxdy, dyOverDx, dxOverDy; double ds; double dPsiT, dPsiB, dPsiL, dPsiR; double rhsN, rhsP; double generation; double nConc, pConc; double perTime = 0.0; /* first compute the currents and derivatives */ TWO_commonTerms( pDevice, FALSE, tranAnalysis, info ); /* find reciprocal timestep */ if ( tranAnalysis ) { perTime = info->intCoeff[0]; } /* zero the rhs vector */ for ( index = 1 ; index <= pDevice->numEqns ; index++ ) { pRhs[ index ] = 0.0; } /* zero the matrix */ spClear( pDevice->matrix ); for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; dx = 0.5 * pElem->dx; dy = 0.5 * pElem->dy; dxdy = dx * dy; dxOverDy = 0.5 * pElem->epsRel * pElem->dxOverDy; dyOverDx = 0.5 * pElem->epsRel * pElem->dyOverDx; pTEdge = pElem->pTopEdge; pBEdge = pElem->pBotEdge; pLEdge = pElem->pLeftEdge; pREdge = pElem->pRightEdge; dPsiT = pTEdge->dPsi; dPsiB = pBEdge->dPsi; dPsiL = pLEdge->dPsi; dPsiR = pREdge->dPsi; /* load for all i,j */ for ( index = 0; index <= 3; index++ ) { pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { *(pNode->fPsiPsi) += dyOverDx + dxOverDy; if ( index <= 1 ) { pHEdge = pTEdge; } else { pHEdge = pBEdge; } if ( index == 0 || index == 3 ) { pVEdge = pLEdge; } else { pVEdge = pREdge; } /* Add surface state charges. */ pRhs[ pNode->psiEqn ] += dx * pHEdge->qf; pRhs[ pNode->psiEqn ] += dy * pVEdge->qf; if ( pElem->elemType == SEMICON ) { *(pNode->fPsiN) += dxdy; *(pNode->fPsiP) -= dxdy; *(pNode->fNPsi) -= dy * pHEdge->dJnDpsiP1 + dx * pVEdge->dJnDpsiP1; *(pNode->fPPsi) -= dy * pHEdge->dJpDpsiP1 + dx * pVEdge->dJpDpsiP1; nConc = pDevice->devState0 [pNode->nodeN]; pConc = pDevice->devState0 [pNode->nodeP]; pRhs[ pNode->psiEqn ] += dxdy * (pNode->netConc + pConc - nConc); /* Handle generation terms */ *(pNode->fNN) -= dxdy * pNode->dUdN; *(pNode->fNP) -= dxdy * pNode->dUdP; *(pNode->fPP) += dxdy * pNode->dUdP; *(pNode->fPN) += dxdy * pNode->dUdN; rhsN = - dxdy * pNode->uNet; rhsP = dxdy * pNode->uNet; if ( AvalancheGen ) { generation = TWOavalanche( pElem, pNode ); rhsN += dxdy * generation; rhsP -= dxdy * generation; } pRhs[ pNode->nEqn ] -= rhsN; pRhs[ pNode->pEqn ] -= rhsP; /* Handle dXdT continuity terms */ if ( tranAnalysis ) { *(pNode->fNN) -= dxdy * perTime; *(pNode->fPP) += dxdy * perTime; pRhs[ pNode->nEqn ] += dxdy * pNode->dNdT; pRhs[ pNode->pEqn ] -= dxdy * pNode->dPdT; } } } } /* Handle neighbor and edge dependent terms */ pNode = pElem->pTLNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= -dyOverDx * dPsiT - dxOverDy * dPsiL; *(pNode->fPsiPsiiP1) -= dyOverDx; *(pNode->fPsiPsijP1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->nEqn ] -= dy * pTEdge->jn + dx * pLEdge->jn; pRhs[ pNode->pEqn ] -= dy * pTEdge->jp + dx * pLEdge->jp; *(pNode->fNN) += dy * pTEdge->dJnDn + dx * pLEdge->dJnDn; *(pNode->fPP) += dy * pTEdge->dJpDp + dx * pLEdge->dJpDp; *(pNode->fNPsiiP1) += dy * pTEdge->dJnDpsiP1; *(pNode->fNNiP1) += dy * pTEdge->dJnDnP1; *(pNode->fPPsiiP1) += dy * pTEdge->dJpDpsiP1; *(pNode->fPPiP1) += dy * pTEdge->dJpDpP1; *(pNode->fNPsijP1) += dx * pLEdge->dJnDpsiP1; *(pNode->fNNjP1) += dx * pLEdge->dJnDnP1; *(pNode->fPPsijP1) += dx * pLEdge->dJpDpsiP1; *(pNode->fPPjP1) += dx * pLEdge->dJpDpP1; } } pNode = pElem->pTRNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= dyOverDx * dPsiT - dxOverDy * dPsiR; *(pNode->fPsiPsiiM1) -= dyOverDx; *(pNode->fPsiPsijP1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->nEqn ] -= -dy * pTEdge->jn + dx * pREdge->jn; pRhs[ pNode->pEqn ] -= -dy * pTEdge->jp + dx * pREdge->jp; *(pNode->fNN) += -dy * pTEdge->dJnDnP1 + dx * pREdge->dJnDn; *(pNode->fPP) += -dy * pTEdge->dJpDpP1 + dx * pREdge->dJpDp; *(pNode->fNPsiiM1) += dy * pTEdge->dJnDpsiP1; *(pNode->fNNiM1) -= dy * pTEdge->dJnDn; *(pNode->fPPsiiM1) += dy * pTEdge->dJpDpsiP1; *(pNode->fPPiM1) -= dy * pTEdge->dJpDp; *(pNode->fNPsijP1) += dx * pREdge->dJnDpsiP1; *(pNode->fNNjP1) += dx * pREdge->dJnDnP1; *(pNode->fPPsijP1) += dx * pREdge->dJpDpsiP1; *(pNode->fPPjP1) += dx * pREdge->dJpDpP1; } } pNode = pElem->pBRNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= dyOverDx * dPsiB + dxOverDy * dPsiR; *(pNode->fPsiPsiiM1) -= dyOverDx; *(pNode->fPsiPsijM1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->nEqn ] -= -dy * pBEdge->jn - dx * pREdge->jn; pRhs[ pNode->pEqn ] -= -dy * pBEdge->jp - dx * pREdge->jp; *(pNode->fNN) += -dy * pBEdge->dJnDnP1 - dx * pREdge->dJnDnP1; *(pNode->fPP) += -dy * pBEdge->dJpDpP1 - dx * pREdge->dJpDpP1; *(pNode->fNPsiiM1) += dy * pBEdge->dJnDpsiP1; *(pNode->fNNiM1) -= dy * pBEdge->dJnDn; *(pNode->fPPsiiM1) += dy * pBEdge->dJpDpsiP1; *(pNode->fPPiM1) -= dy * pBEdge->dJpDp; *(pNode->fNPsijM1) += dx * pREdge->dJnDpsiP1; *(pNode->fNNjM1) -= dx * pREdge->dJnDn; *(pNode->fPPsijM1) += dx * pREdge->dJpDpsiP1; *(pNode->fPPjM1) -= dx * pREdge->dJpDp; } } pNode = pElem->pBLNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= -dyOverDx * dPsiB + dxOverDy * dPsiL; *(pNode->fPsiPsiiP1) -= dyOverDx; *(pNode->fPsiPsijM1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->nEqn ] -= dy * pBEdge->jn - dx * pLEdge->jn; pRhs[ pNode->pEqn ] -= dy * pBEdge->jp - dx * pLEdge->jp; *(pNode->fNN) += dy * pBEdge->dJnDn - dx * pLEdge->dJnDnP1; *(pNode->fPP) += dy * pBEdge->dJpDp - dx * pLEdge->dJpDpP1; *(pNode->fNPsiiP1) += dy * pBEdge->dJnDpsiP1; *(pNode->fNNiP1) += dy * pBEdge->dJnDnP1; *(pNode->fPPsiiP1) += dy * pBEdge->dJpDpsiP1; *(pNode->fPPiP1) += dy * pBEdge->dJpDpP1; *(pNode->fNPsijM1) += dx * pLEdge->dJnDpsiP1; *(pNode->fNNjM1) -= dx * pLEdge->dJnDn; *(pNode->fPPsijM1) += dx * pLEdge->dJpDpsiP1; *(pNode->fPPjM1) -= dx * pLEdge->dJpDp; } } } /* Calculate the Inversion-Layer Mobility Dependent Terms in Jac. */ if ( MobDeriv && SurfaceMobility ) { for ( pCh = pDevice->pChannel; pCh != NULL; pCh = pCh->next ) { /* Find effective height of oxide element at interface. */ if ( pCh->type%2 == 0 ) { /* Vertical slice */ ds = pCh->pNElem->dy / pCh->pNElem->epsRel; } else { /* Horizontal slice */ ds = pCh->pNElem->dx / pCh->pNElem->epsRel; } pElem = pCh->pSeed; nextIndex = (pCh->type + 2)%4; while (pElem && pElem->channel == pCh->id) { TWO_mobDeriv( pElem, pCh->type, ds ); pElem = pElem->pElems[ nextIndex ]; } } /* endfor pCh != NULL */ } /* endif MobDeriv and SurfaceMobility */ } /* this function used only for direct method ac analysis Used to load only the dc Jacobian matrix. Rhs is unaffected */ void TWO_jacLoad(TWOdevice *pDevice) { TWOelem *pElem; TWOnode *pNode; TWOedge *pHEdge, *pVEdge; TWOedge *pTEdge, *pBEdge, *pLEdge, *pREdge; TWOchannel *pCh; int index, eIndex; int nextIndex; /* index of node to find next element */ double dx, dy, dxdy, dyOverDx, dxOverDy; double ds; /* first compute the currents and derivatives */ TWO_commonTerms( pDevice, FALSE, FALSE, NULL ); /* zero the matrix */ spClear( pDevice->matrix ); for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; dx = 0.5 * pElem->dx; dy = 0.5 * pElem->dy; dxdy = dx * dy; dxOverDy = 0.5 * pElem->epsRel * pElem->dxOverDy; dyOverDx = 0.5 * pElem->epsRel * pElem->dyOverDx; pTEdge = pElem->pTopEdge; pBEdge = pElem->pBotEdge; pLEdge = pElem->pLeftEdge; pREdge = pElem->pRightEdge; /* load for all i,j */ for ( index = 0; index <= 3; index++ ) { pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { *(pNode->fPsiPsi) += dyOverDx + dxOverDy; if ( pElem->elemType == SEMICON ) { if ( index <= 1 ) { pHEdge = pTEdge; } else { pHEdge = pBEdge; } if ( index == 0 || index == 3 ) { pVEdge = pLEdge; } else { pVEdge = pREdge; } *(pNode->fPsiN) += dxdy; *(pNode->fPsiP) -= dxdy; *(pNode->fNPsi) -= dy * pHEdge->dJnDpsiP1 + dx * pVEdge->dJnDpsiP1; *(pNode->fPPsi) -= dy * pHEdge->dJpDpsiP1 + dx * pVEdge->dJpDpsiP1; /* Handle generation terms */ *(pNode->fNN) -= dxdy * pNode->dUdN; *(pNode->fNP) -= dxdy * pNode->dUdP; *(pNode->fPP) += dxdy * pNode->dUdP; *(pNode->fPN) += dxdy * pNode->dUdN; } } } /* Handle neighbor and edge dependent terms */ pNode = pElem->pTLNode; if ( pNode->nodeType != CONTACT ) { *(pNode->fPsiPsiiP1) -= dyOverDx; *(pNode->fPsiPsijP1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { *(pNode->fNN) += dy * pTEdge->dJnDn + dx * pLEdge->dJnDn; *(pNode->fPP) += dy * pTEdge->dJpDp + dx * pLEdge->dJpDp; *(pNode->fNPsiiP1) += dy * pTEdge->dJnDpsiP1; *(pNode->fNNiP1) += dy * pTEdge->dJnDnP1; *(pNode->fPPsiiP1) += dy * pTEdge->dJpDpsiP1; *(pNode->fPPiP1) += dy * pTEdge->dJpDpP1; *(pNode->fNPsijP1) += dx * pLEdge->dJnDpsiP1; *(pNode->fNNjP1) += dx * pLEdge->dJnDnP1; *(pNode->fPPsijP1) += dx * pLEdge->dJpDpsiP1; *(pNode->fPPjP1) += dx * pLEdge->dJpDpP1; } } pNode = pElem->pTRNode; if ( pNode->nodeType != CONTACT ) { *(pNode->fPsiPsiiM1) -= dyOverDx; *(pNode->fPsiPsijP1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { *(pNode->fNN) += -dy * pTEdge->dJnDnP1 + dx * pREdge->dJnDn; *(pNode->fPP) += -dy * pTEdge->dJpDpP1 + dx * pREdge->dJpDp; *(pNode->fNPsiiM1) += dy * pTEdge->dJnDpsiP1; *(pNode->fNNiM1) -= dy * pTEdge->dJnDn; *(pNode->fPPsiiM1) += dy * pTEdge->dJpDpsiP1; *(pNode->fPPiM1) -= dy * pTEdge->dJpDp; *(pNode->fNPsijP1) += dx * pREdge->dJnDpsiP1; *(pNode->fNNjP1) += dx * pREdge->dJnDnP1; *(pNode->fPPsijP1) += dx * pREdge->dJpDpsiP1; *(pNode->fPPjP1) += dx * pREdge->dJpDpP1; } } pNode = pElem->pBRNode; if ( pNode->nodeType != CONTACT ) { *(pNode->fPsiPsiiM1) -= dyOverDx; *(pNode->fPsiPsijM1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { *(pNode->fNN) += -dy * pBEdge->dJnDnP1 - dx * pREdge->dJnDnP1; *(pNode->fPP) += -dy * pBEdge->dJpDpP1 - dx * pREdge->dJpDpP1; *(pNode->fNPsiiM1) += dy * pBEdge->dJnDpsiP1; *(pNode->fNNiM1) -= dy * pBEdge->dJnDn; *(pNode->fPPsiiM1) += dy * pBEdge->dJpDpsiP1; *(pNode->fPPiM1) -= dy * pBEdge->dJpDp; *(pNode->fNPsijM1) += dx * pREdge->dJnDpsiP1; *(pNode->fNNjM1) -= dx * pREdge->dJnDn; *(pNode->fPPsijM1) += dx * pREdge->dJpDpsiP1; *(pNode->fPPjM1) -= dx * pREdge->dJpDp; } } pNode = pElem->pBLNode; if ( pNode->nodeType != CONTACT ) { *(pNode->fPsiPsiiP1) -= dyOverDx; *(pNode->fPsiPsijM1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { *(pNode->fNN) += dy * pBEdge->dJnDn - dx * pLEdge->dJnDnP1; *(pNode->fPP) += dy * pBEdge->dJpDp - dx * pLEdge->dJpDpP1; *(pNode->fNPsiiP1) += dy * pBEdge->dJnDpsiP1; *(pNode->fNNiP1) += dy * pBEdge->dJnDnP1; *(pNode->fPPsiiP1) += dy * pBEdge->dJpDpsiP1; *(pNode->fPPiP1) += dy * pBEdge->dJpDpP1; *(pNode->fNPsijM1) += dx * pLEdge->dJnDpsiP1; *(pNode->fNNjM1) -= dx * pLEdge->dJnDn; *(pNode->fPPsijM1) += dx * pLEdge->dJpDpsiP1; *(pNode->fPPjM1) -= dx * pLEdge->dJpDp; } } } /* Calculate the Inversion-Layer Mobility Dependent Terms in Jac. */ if ( MobDeriv && SurfaceMobility ) { for ( pCh = pDevice->pChannel; pCh != NULL; pCh = pCh->next ) { /* Find effective height of oxide element at interface. */ if ( pCh->type%2 == 0 ) { /* Vertical slice */ ds = pCh->pNElem->dy / pCh->pNElem->epsRel; } else { /* Horizontal slice */ ds = pCh->pNElem->dx / pCh->pNElem->epsRel; } pElem = pCh->pSeed; nextIndex = (pCh->type + 2)%4; while (pElem && pElem->channel == pCh->id) { TWO_mobDeriv( pElem, pCh->type, ds ); pElem = pElem->pElems[ nextIndex ]; } } /* endfor pCh != NULL */ } /* endif MobDeriv and SurfaceMobility */ } /* load only the Rhs vector */ void TWO_rhsLoad(TWOdevice *pDevice, BOOLEAN tranAnalysis, TWOtranInfo *info) { TWOelem *pElem; TWOnode *pNode; TWOedge *pHEdge, *pVEdge; TWOedge *pTEdge, *pBEdge, *pLEdge, *pREdge; int index, eIndex; double *pRhs = pDevice->rhs; double dx, dy, dxdy, dyOverDx, dxOverDy; double dPsiT, dPsiB, dPsiL, dPsiR; double rhsN, rhsP; double generation; double nConc, pConc; double perTime; /* first compute the currents */ TWO_commonTerms( pDevice, TRUE, tranAnalysis, info ); /* find reciprocal timestep */ if ( tranAnalysis ) { perTime = info->intCoeff[0]; } /* zero the rhs vector */ for ( index = 1 ; index <= pDevice->numEqns ; index++ ) { pRhs[ index ] = 0.0; } for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; dx = 0.5 * pElem->dx; dy = 0.5 * pElem->dy; dxdy = dx * dy; dxOverDy = 0.5 * pElem->epsRel * pElem->dxOverDy; dyOverDx = 0.5 * pElem->epsRel * pElem->dyOverDx; pTEdge = pElem->pTopEdge; pBEdge = pElem->pBotEdge; pLEdge = pElem->pLeftEdge; pREdge = pElem->pRightEdge; dPsiT = pTEdge->dPsi; dPsiB = pBEdge->dPsi; dPsiL = pLEdge->dPsi; dPsiR = pREdge->dPsi; /* load for all i,j */ for ( index = 0; index <= 3; index++ ) { pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { if ( index <= 1 ) { pHEdge = pTEdge; } else { pHEdge = pBEdge; } if ( index == 0 || index == 3 ) { pVEdge = pLEdge; } else { pVEdge = pREdge; } /* Add surface state charges. */ pRhs[ pNode->psiEqn ] += dx * pHEdge->qf; pRhs[ pNode->psiEqn ] += dy * pVEdge->qf; if ( pElem->elemType == SEMICON ) { nConc = pDevice->devState0 [pNode->nodeN]; pConc = pDevice->devState0 [pNode->nodeP]; pRhs[ pNode->psiEqn ] += dxdy * (pNode->netConc + pConc - nConc); /* Handle generation terms */ rhsN = - dxdy * pNode->uNet; rhsP = dxdy * pNode->uNet; if ( AvalancheGen ) { generation = TWOavalanche( pElem, pNode ); rhsN += dxdy * generation; rhsP -= dxdy * generation; } pRhs[ pNode->nEqn ] -= rhsN; pRhs[ pNode->pEqn ] -= rhsP; /* Handle dXdT continuity terms */ if ( tranAnalysis ) { pRhs[ pNode->nEqn ] += dxdy * pNode->dNdT; pRhs[ pNode->pEqn ] -= dxdy * pNode->dPdT; } } } } /* Handle neighbor and edge dependent terms */ pNode = pElem->pTLNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= -dyOverDx * dPsiT - dxOverDy * dPsiL; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->nEqn ] -= dy * pTEdge->jn + dx * pLEdge->jn; pRhs[ pNode->pEqn ] -= dy * pTEdge->jp + dx * pLEdge->jp; } } pNode = pElem->pTRNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= dyOverDx * dPsiT - dxOverDy * dPsiR; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->nEqn ] -= -dy * pTEdge->jn + dx * pREdge->jn; pRhs[ pNode->pEqn ] -= -dy * pTEdge->jp + dx * pREdge->jp; } } pNode = pElem->pBRNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= dyOverDx * dPsiB + dxOverDy * dPsiR; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->nEqn ] -= -dy * pBEdge->jn - dx * pREdge->jn; pRhs[ pNode->pEqn ] -= -dy * pBEdge->jp - dx * pREdge->jp; } } pNode = pElem->pBLNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= -dyOverDx * dPsiB + dxOverDy * dPsiL; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->nEqn ] -= dy * pBEdge->jn - dx * pLEdge->jn; pRhs[ pNode->pEqn ] -= dy * pBEdge->jp - dx * pLEdge->jp; } } } } /* * computation of current densities, recombination rates, * mobilities and their derivatives */ void TWO_commonTerms(TWOdevice *pDevice, BOOLEAN currentOnly, BOOLEAN tranAnalysis, TWOtranInfo *info) { TWOelem *pElem; TWOedge *pEdge; TWOnode *pNode; int index, eIndex; int nextIndex; /* index of node to find next element */ double psi1, psi2, nC, pC, nP1, pP1; double dPsiN, dPsiP; double bPsiN, dbPsiN, bMPsiN, dbMPsiN; double bPsiP, dbPsiP, bMPsiP, dbMPsiP; double muN, dMuN, muP, dMuP, rDx, rDy; double psi, nConc = 0.0, pConc = 0.0; double cnAug, cpAug; double eSurf = 0.0; /* For channel mobilities */ double qInt = 0.0; TWOchannel *pCh; /* evaluate all node (including recombination) and edge quantities */ for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; cnAug = pElem->matlInfo->cAug[ELEC]; cpAug = pElem->matlInfo->cAug[HOLE]; for ( index = 0; index <= 3; index++ ) { if ( pElem->evalNodes[ index ] ) { pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { psi = pDevice->dcSolution[ pNode->psiEqn ]; if ( pElem->elemType == SEMICON ) { nConc = pDevice->dcSolution[ pNode->nEqn ]; pConc = pDevice->dcSolution[ pNode->pEqn ]; if ( Srh ) { recomb(nConc, pConc, pNode->tn, pNode->tp, cnAug, cpAug, pNode->nie, &pNode->uNet, &pNode->dUdN, &pNode->dUdP); } else { pNode->uNet = 0.0; pNode->dUdN = 0.0; pNode->dUdP = 0.0; } } } else { /* a contact node */ psi = pNode->psi; if ( pElem->elemType == SEMICON ) { nConc = pNode->nConc; pConc = pNode->pConc; } } /* store info in the state tables */ pDevice->devState0 [pNode->nodePsi] = psi; if ( pElem->elemType == SEMICON ) { pDevice->devState0 [pNode->nodeN] = nConc; pDevice->devState0 [pNode->nodeP] = pConc; if ( tranAnalysis && (pNode->nodeType != CONTACT) ) { pNode->dNdT = integrate( pDevice->devStates, info, pNode->nodeN ); pNode->dPdT = integrate( pDevice->devStates, info, pNode->nodeP ); } } } } for ( index = 0; index <= 3; index++ ) { if ( pElem->evalEdges[ index ] ) { pEdge = pElem->pEdges[ index ]; pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { psi1 = pDevice->dcSolution[pNode->psiEqn]; } else { psi1 = pNode->psi; } pNode = pElem->pNodes[ (index + 1) % 4 ]; if ( pNode->nodeType != CONTACT ) { psi2 = pDevice->dcSolution[pNode->psiEqn]; } else { psi2 = pNode->psi; } if ( index <= 1 ) { pEdge->dPsi = psi2 - psi1; } else { pEdge->dPsi = psi1 - psi2; } pDevice->devState0 [pEdge->edgeDpsi] = pEdge->dPsi; if ( pElem->elemType == SEMICON ) { /* Calculate weighted driving forces - wdfn & wdfp for the edge */ dPsiN = pEdge->dPsi + pEdge->dCBand; dPsiP = pEdge->dPsi - pEdge->dVBand; bernoulli( dPsiN, &bPsiN, &dbPsiN, &bMPsiN, &dbMPsiN, !currentOnly ); bernoulli( dPsiP, &bPsiP, &dbPsiP, &bMPsiP, &dbMPsiP, !currentOnly); if ( index <= 1 ) { nC = *(pDevice->devState0 + pElem->pNodes[ index ]->nodeN); nP1 = *(pDevice->devState0 + pElem->pNodes[ index+1 ]->nodeN); pC = *(pDevice->devState0 + pElem->pNodes[ index ]->nodeP); pP1 = *(pDevice->devState0 + pElem->pNodes[ index+1 ]->nodeP); } else { nC = *(pDevice->devState0 + pElem->pNodes[(index+1)%4]->nodeN); nP1 = *(pDevice->devState0 + pElem->pNodes[ index ]->nodeN); pC = *(pDevice->devState0 + pElem->pNodes[(index+1)%4]->nodeP); pP1 = *(pDevice->devState0 + pElem->pNodes[ index ]->nodeP); } pEdge->wdfn = bPsiN * nP1 - bMPsiN * nC; pEdge->wdfp = bPsiP * pC - bMPsiP * pP1; pEdge->jn = 0.0; pEdge->jp = 0.0; if ( !currentOnly ) { pEdge->dWnDpsiP1 = dbPsiN * nP1 - dbMPsiN * nC; pEdge->dWnDn = - bMPsiN; pEdge->dWnDnP1 = bPsiN; pEdge->dWpDpsiP1 = dbPsiP * pC - dbMPsiP * pP1; pEdge->dWpDp = bPsiP; pEdge->dWpDpP1 = - bMPsiP; pEdge->dJnDpsiP1 = 0.0; pEdge->dJnDn = 0.0; pEdge->dJnDnP1 = 0.0; pEdge->dJpDpsiP1 = 0.0; pEdge->dJpDp = 0.0; pEdge->dJpDpP1 = 0.0; } } } } } /* DAG: calculate mobilities for channel elems */ if ( SurfaceMobility ) { for ( pCh = pDevice->pChannel; pCh != NULL; pCh = pCh->next ) { pElem = pCh->pNElem; switch (pCh->type) { case 0: eSurf = - 0.5 * (pElem->pLeftEdge->dPsi + pElem->pRightEdge->dPsi ) * pElem->epsRel / pElem->dy; qInt = 0.5 * pElem->pBotEdge->qf; break; case 1: eSurf = - 0.5 * (pElem->pTopEdge->dPsi + pElem->pBotEdge->dPsi ) * pElem->epsRel / pElem->dx; qInt = 0.5 * pElem->pLeftEdge->qf; break; case 2: eSurf = - 0.5 * (pElem->pLeftEdge->dPsi + pElem->pRightEdge->dPsi ) * pElem->epsRel / pElem->dy; qInt = 0.5 * pElem->pTopEdge->qf; break; case 3: eSurf = - 0.5 * (pElem->pTopEdge->dPsi + pElem->pBotEdge->dPsi ) * pElem->epsRel / pElem->dx; qInt = 0.5 * pElem->pRightEdge->qf; break; } eSurf += qInt; pElem = pCh->pSeed; nextIndex = (pCh->type + 2)%4; while (pElem && pElem->channel == pCh->id) { TWO_mobility( pElem, eSurf ); pElem = pElem->pElems[ nextIndex ]; } } /* endfor pCH != NULL */ } /* endif SurfaceMobility */ /* calculate the current densities assuming mobility value depend on Ex,Ey*/ for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; rDx = 1.0 / pElem->dx; rDy = 1.0 / pElem->dy; for ( index = 0; index <= 3; index++ ) { pEdge = pElem->pEdges[ index ]; /* calculate conductive currents */ if ( pElem->elemType == SEMICON ) { /* get mobility for this edge */ if ( !pElem->channel ) { /* Calculate mobility for non-channel elements */ muN = pElem->mun0; dMuN = 0.0; muP = pElem->mup0; dMuP = 0.0; dPsiN = pEdge->dPsi + pEdge->dCBand; dPsiP = pEdge->dPsi - pEdge->dVBand; if ( index%2 == 0 ) { MOBfieldDep( pElem->matlInfo, ELEC, - dPsiN * rDx, &muN, &dMuN ); MOBfieldDep( pElem->matlInfo, HOLE, - dPsiP * rDx, &muP, &dMuP ); } else { MOBfieldDep( pElem->matlInfo, ELEC, - dPsiN * rDy, &muN, &dMuN ); MOBfieldDep( pElem->matlInfo, HOLE, - dPsiP * rDy, &muP, &dMuP ); } } else { /* Retrieve previously calculated value. */ muN = pElem->mun; dMuN = 0.0; muP = pElem->mup; dMuP = 0.0; } switch ( index ) { case 0: muN *= pEdge->kPos * rDx; dMuN *= pEdge->kPos * rDx * rDx; muP *= pEdge->kPos * rDx; dMuP *= pEdge->kPos * rDx * rDx; break; case 1: muN *= pEdge->kNeg * rDy; dMuN *= pEdge->kNeg * rDy * rDy; muP *= pEdge->kNeg * rDy; dMuP *= pEdge->kNeg * rDy * rDy; break; case 2: muN *= pEdge->kNeg * rDx; dMuN *= pEdge->kNeg * rDx * rDx; muP *= pEdge->kNeg * rDx; dMuP *= pEdge->kNeg * rDx * rDx; break; case 3: muN *= pEdge->kPos * rDy; dMuN *= pEdge->kPos * rDy * rDy; muP *= pEdge->kPos * rDy; dMuP *= pEdge->kPos * rDy * rDy; break; } /* Now that the mobility for this edge is known, do current */ pEdge->jn += muN * pEdge->wdfn; pEdge->jp += muP * pEdge->wdfp; if ( !currentOnly ) { pEdge->dJnDpsiP1 += muN * pEdge->dWnDpsiP1; pEdge->dJnDn += muN * pEdge->dWnDn; pEdge->dJnDnP1 += muN * pEdge->dWnDnP1; pEdge->dJpDpsiP1 += muP * pEdge->dWpDpsiP1; pEdge->dJpDp += muP * pEdge->dWpDp; pEdge->dJpDpP1 += muP * pEdge->dWpDpP1; if ( MobDeriv && (!pElem->channel) ) { pEdge->dJnDpsiP1 -= dMuN * pEdge->wdfn; pEdge->dJpDpsiP1 -= dMuP * pEdge->wdfp; } } } /* calculate displacement current only once */ if ( pElem->evalEdges[ index ] ) { if ( tranAnalysis ) { if ( index == 0 || index == 2 ) { /* horizontal edges */ pEdge->jd = -integrate(pDevice->devStates, info, pEdge->edgeDpsi) * rDx; } else { /* vertical edges */ pEdge->jd = -integrate(pDevice->devStates, info, pEdge->edgeDpsi) * rDy; } } } } } } tmpk8ny_4pz/src/ciderlib/twod/twomesh.c0000644000175000017500000004037013546075722020337 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numconst.h" #include "ngspice/numenum.h" #include "ngspice/twomesh.h" #include "ngspice/twodev.h" #include "ngspice/bool.h" #include "twoddefs.h" #include "twodext.h" static void doMobCoeffs(TWOelem *, int); static void resetEvalFlag(TWOdevice *pDevice); void TWObuildMesh(TWOdevice *pDevice, TWOdomain *pDomain, TWOelectrode *pElectrode, TWOmaterial *pMaterial) { int xIndex, yIndex, eIndex, index; int elemType; TWOelem *pElem, *pElem1; TWOnode *pNode, *pNode1, *pNextHNode, *pNextVNode, *pNextDNode; TWOnode ***nodeArray = NULL; TWOedge *pEdge; TWOedge ***edgeArrayH = NULL, ***edgeArrayV = NULL; TWOdomain *pD; TWOelectrode *pE; TWOmaterial *pM; BOOLEAN interiorNode; int poiEqn, numEqn, numElem, numNodes, numEdges; int numXNodes = pDevice->numXNodes; int numYNodes = pDevice->numYNodes; double *xScale = pDevice->xScale; double *yScale = pDevice->yScale; #ifdef NOTDEF FILE *meshFile; #endif /* Generate work arrays. */ XCALLOC(nodeArray, TWOnode **, 1 + numXNodes); for (xIndex = 1; xIndex <= numXNodes; xIndex++) { XCALLOC(nodeArray[xIndex], TWOnode *, 1 + numYNodes); } /* Generate the nodes. */ for (xIndex = 1; xIndex <= numXNodes; xIndex++) { for (yIndex = 1; yIndex <= numYNodes; yIndex++) { XCALLOC(pNode, TWOnode, 1); pNode->nodeI = xIndex; pNode->nodeJ = yIndex; pNode->poiEqn = 0; nodeArray[xIndex][yIndex] = pNode; } } /* Mark the semiconductor/insulator domains. */ if (pDomain == NULL) { fprintf(stderr, "Error: domains not defined for device\n"); exit(-1); } for (pD = pDomain; pD != NULL; pD = pD->next) { for (pM = pMaterial; pM != NULL; pM = pM->next) { if (pD->material == pM->id) { break; } } elemType = pM->type; for (xIndex = pD->ixLo; xIndex <= pD->ixHi; xIndex++) { for (yIndex = pD->iyLo; yIndex <= pD->iyHi; yIndex++) { pNode = nodeArray[xIndex][yIndex]; pNode->nodeType = elemType; } } } /* Now mark all the metallic domains */ for (pE = pElectrode; pE != NULL; pE = pE->next) { for (xIndex = pE->ixLo; xIndex <= pE->ixHi; xIndex++) { for (yIndex = pE->iyLo; yIndex <= pE->iyHi; yIndex++) { pNode = nodeArray[xIndex][yIndex]; pNode->nodeType = CONTACT; } } } /* * Now mark as NULL any node in the interior of an electrode, i.e. none of * its neighbors is a different material. */ for (xIndex = 1; xIndex <= numXNodes; xIndex++) { for (yIndex = 1; yIndex <= numYNodes; yIndex++) { pNode = nodeArray[xIndex][yIndex]; if (pNode->nodeType == CONTACT) { interiorNode = TRUE; if (xIndex > 1) { pNode1 = nodeArray[xIndex - 1][yIndex]; if (pNode1->nodeType != 0 && pNode1->nodeType != CONTACT) { interiorNode = FALSE; } } if (interiorNode && xIndex < numXNodes) { pNode1 = nodeArray[xIndex + 1][yIndex]; if (pNode1->nodeType != 0 && pNode1->nodeType != CONTACT) { interiorNode = FALSE; } } if (interiorNode && yIndex > 1) { pNode1 = nodeArray[xIndex][yIndex - 1]; if (pNode1->nodeType != 0 && pNode1->nodeType != CONTACT) { interiorNode = FALSE; } } if (interiorNode && yIndex < numYNodes) { pNode1 = nodeArray[xIndex][yIndex + 1]; if (pNode1->nodeType != 0 && pNode1->nodeType != CONTACT) { interiorNode = FALSE; } } if (interiorNode) { pNode->nodeType = 0; } } } } /* Delete nodes that do not belong to any domain. */ numNodes = 0; for (yIndex = 1; yIndex <= numYNodes; yIndex++) { for (xIndex = 1; xIndex <= numXNodes; xIndex++) { pNode = nodeArray[xIndex][yIndex]; if (pNode->nodeType == 0) { /* This node doesn't belong to a domain so delete it. */ nodeArray[xIndex][yIndex] = NULL; FREE(pNode); } else { numNodes++; } } } pDevice->numNodes = numNodes; /* Now relabel any remaining nodes that are part of electrodes. */ setupContacts(pDevice, pElectrode, nodeArray); /* Done with the nodes. Now construct the elements and the edges. */ numEdges = 0; /* Generate the horizontal edges and store in a work array. */ XCALLOC(edgeArrayH, TWOedge **, numXNodes); for (xIndex = 1; xIndex < numXNodes; xIndex++) { XCALLOC(edgeArrayH[xIndex], TWOedge *, 1 + numYNodes); } for (yIndex = 1; yIndex <= numYNodes; yIndex++) { for (xIndex = 1; xIndex < numXNodes; xIndex++) { pNode = nodeArray[xIndex][yIndex]; pNextHNode = nodeArray[xIndex + 1][yIndex]; if (pNode != NULL && pNextHNode != NULL) { XCALLOC(pEdge, TWOedge, 1); numEdges++; edgeArrayH[xIndex][yIndex] = pEdge; } } } /* Generate the vertical edges and store in a work array. */ XCALLOC(edgeArrayV, TWOedge **, 1 + numXNodes); for (xIndex = 1; xIndex <= numXNodes; xIndex++) { XCALLOC(edgeArrayV[xIndex], TWOedge *, numYNodes); } for (xIndex = 1; xIndex <= numXNodes; xIndex++) { for (yIndex = 1; yIndex < numYNodes; yIndex++) { pNode = nodeArray[xIndex][yIndex]; pNextVNode = nodeArray[xIndex][yIndex + 1]; if (pNode != NULL && pNextVNode != NULL) { XCALLOC(pEdge, TWOedge, 1); numEdges++; edgeArrayV[xIndex][yIndex] = pEdge; } } } pDevice->numEdges = numEdges; /* Now construct and count the elements and store the node/edge pointers. */ numElem = 1; for (yIndex = 1; yIndex < numYNodes; yIndex++) { for (xIndex = 1; xIndex < numXNodes; xIndex++) { pNode = nodeArray[xIndex][yIndex]; pNextHNode = nodeArray[xIndex + 1][yIndex]; pNextVNode = nodeArray[xIndex][yIndex + 1]; pNextDNode = nodeArray[xIndex + 1][yIndex + 1]; if (pNode != NULL && pNextHNode != NULL && pNextVNode != NULL && pNextDNode != NULL) { numElem++; XCALLOC(pElem, TWOelem, 1); pElem->pTLNode = pNode; pElem->pTRNode = pNextHNode; pElem->pBLNode = pNextVNode; pElem->pBRNode = pNextDNode; pElem->pTopEdge = edgeArrayH[xIndex][yIndex]; pElem->pBotEdge = edgeArrayH[xIndex][yIndex + 1]; pElem->pLeftEdge = edgeArrayV[xIndex][yIndex]; pElem->pRightEdge = edgeArrayV[xIndex + 1][yIndex]; pDevice->elemArray[xIndex][yIndex] = pElem; } else { pDevice->elemArray[xIndex][yIndex] = NULL; } } } /* Create and pack the 1D element array. */ pDevice->numElems = numElem - 1; XCALLOC(pDevice->elements, TWOelem *, 1 + numElem); numElem = 1; for (yIndex = 1; yIndex < numYNodes; yIndex++) { for (xIndex = 1; xIndex < numXNodes; xIndex++) { pElem = pDevice->elemArray[xIndex][yIndex]; if (pElem != NULL) { pDevice->elements[numElem++] = pElem; } } } /* Now create back links from elements to nodes. */ for (yIndex = 1; yIndex < numYNodes; yIndex++) { for (xIndex = 1; xIndex < numXNodes; xIndex++) { pElem = pDevice->elemArray[xIndex][yIndex]; if (pElem != NULL) { pElem->pTLNode->pBRElem = pElem; pElem->pTRNode->pBLElem = pElem; pElem->pBLNode->pTRElem = pElem; pElem->pBRNode->pTLElem = pElem; if (xIndex > 1) { pElem->pLeftElem = pDevice->elemArray[xIndex-1][yIndex]; } if (xIndex < numXNodes - 1) { pElem->pRightElem = pDevice->elemArray[xIndex+1][yIndex]; } if (yIndex > 1) { pElem->pTopElem = pDevice->elemArray[xIndex][yIndex-1]; } if (yIndex < numYNodes - 1) { pElem->pBotElem = pDevice->elemArray[xIndex][yIndex+1]; } } } } /* Establish the element types using domain info. */ for (pD = pDomain; pD != NULL; pD = pD->next) { for (pM = pMaterial; pM != NULL; pM = pM->next) { if (pD->material == pM->id) { break; } } elemType = pM->type; for (yIndex = pD->iyLo; yIndex < pD->iyHi; yIndex++) { for (xIndex = pD->ixLo; xIndex < pD->ixHi; xIndex++) { pElem = pDevice->elemArray[xIndex][yIndex]; if (pElem != NULL) { pElem->domain = pD->id; pElem->elemType = elemType; pElem->matlInfo = pM; } } } } /* Establish the edge types. */ for (yIndex = 1; yIndex < numYNodes; yIndex++) { for (xIndex = 1; xIndex < numXNodes; xIndex++) { pElem = pDevice->elemArray[xIndex][yIndex]; if (pElem != NULL) { for (index = 0; index <= 3; index++) { pEdge = pElem->pEdges[index]; pNode = pElem->pNodes[index]; pNode1 = pElem->pNodes[(index + 1) % 4]; pElem1 = pNode1->pElems[index]; if (pNode->nodeType == CONTACT && pNode1->nodeType == CONTACT) { /* Contact edge */ pEdge->edgeType = CONTACT; } else if (pNode->nodeType == SCHOTTKY && pNode1->nodeType == SCHOTTKY) { /* Schottky edge */ pEdge->edgeType = SCHOTTKY; } else if (pElem1 == NULL) { /* Neumann edge */ pEdge->edgeType = pElem->elemType; } else if (pElem->elemType != pElem1->elemType) { /* Interface edge */ pEdge->edgeType = INTERFACE; } else { /* Ignore heterojnxns for now */ /* Heterojunction or Homojunction edge */ pEdge->edgeType = pElem->elemType; } } } } } resetEvalFlag(pDevice); /* Set evaluation flags on nodes and edges. */ /* Assign the dx and dy terms in the elements while we're at it. */ for (yIndex = 1; yIndex < numYNodes; yIndex++) { for (xIndex = 1; xIndex < numXNodes; xIndex++) { pElem = pDevice->elemArray[xIndex][yIndex]; if (pElem != NULL) { pElem->dx = xScale[xIndex + 1] - xScale[xIndex]; pElem->dy = yScale[yIndex + 1] - yScale[yIndex]; pElem->dxOverDy = pElem->dx / pElem->dy; pElem->dyOverDx = pElem->dy / pElem->dx; /* * Semiconductor elements take precedence over Insulator elements, so * set them up first. */ for (index = 0; index <= 3; index++) { if (pElem->elemType == SEMICON) { pNode = pElem->pNodes[index]; if (!pNode->evaluated) { pNode->evaluated = TRUE; pElem->evalNodes[index] = TRUE; } else { pElem->evalNodes[index] = FALSE; } pEdge = pElem->pEdges[index]; if (!pEdge->evaluated) { pEdge->evaluated = TRUE; pElem->evalEdges[index] = TRUE; } else { pElem->evalEdges[index] = FALSE; } } } } } } /* Do a second setup pass for Insulator elements */ /* Do mobility coefficients now, because we set up dx and dy * in the previous pass */ for (yIndex = 1; yIndex < numYNodes; yIndex++) { for (xIndex = 1; xIndex < numXNodes; xIndex++) { pElem = pDevice->elemArray[xIndex][yIndex]; if (pElem != NULL) { pElem->direction = 0; pElem->channel = 0; pElem->surface = FALSE; for (index = 0; index <= 3; index++) { if (pElem->elemType == SEMICON) { doMobCoeffs( pElem, index ); } else if (pElem->elemType == INSULATOR) { pNode = pElem->pNodes[index]; if (!pNode->evaluated) { pNode->evaluated = TRUE; pElem->evalNodes[index] = TRUE; } else { pElem->evalNodes[index] = FALSE; } pEdge = pElem->pEdges[index]; if (!pEdge->evaluated) { pEdge->evaluated = TRUE; pElem->evalEdges[index] = TRUE; } else { pElem->evalEdges[index] = FALSE; } } } } } } /* Set up the equation numbers for nodes. */ poiEqn = numEqn = 1; for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; for (index = 0; index <= 3; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; if (pNode->nodeType != CONTACT) { /* First assign potential equation numbers */ if (pNode->nodeType != SCHOTTKY) { pNode->poiEqn = poiEqn++; pNode->psiEqn = numEqn++; } /* Now assign carrier-concentration equation numbers */ if (pElem->elemType == INSULATOR) { pNode->nEqn = 0; pNode->pEqn = 0; } else { if (OneCarrier) { /* n and p get same number */ pNode->nEqn = numEqn; pNode->pEqn = numEqn++; } else { pNode->nEqn = numEqn++; pNode->pEqn = numEqn++; } } } else { /* This is a contact node. */ pNode->poiEqn = 0; pNode->psiEqn = 0; pNode->nEqn = 0; pNode->pEqn = 0; } } } } pDevice->dimEquil = poiEqn; pDevice->dimBias = numEqn; /* Open and Print Mesh Output File for Debugging */ /* Nuked from release version */ #ifdef NOTDEF if (!(meshFile = fopen("mesh.out", "w"))) { perror("mesh.out"); exit(-1); } for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; for (index = 0; index <= 3; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; fprintf(meshFile, "node: %5d %5d %5d %5d\n", pNode->nodeI, pNode->nodeJ, pNode->poiEqn, pNode->psiEqn); } } } fflush(meshFile); fclose(meshFile); #endif /* Delete work arrays. */ for (xIndex = 1; xIndex <= numXNodes; xIndex++) { FREE(nodeArray[xIndex]); FREE(edgeArrayV[xIndex]); } for (xIndex = 1; xIndex < numXNodes; xIndex++) { FREE(edgeArrayH[xIndex]); } FREE(nodeArray); FREE(edgeArrayV); FREE(edgeArrayH); /* * TWOprnMesh( pDevice ); */ } void TWOprnMesh(TWOdevice *pDevice) { int eIndex, index; TWOelem *pElem; TWOnode *pNode; TWOedge *pEdge; char *name; for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; fprintf(stderr, "elem %5d:\n", eIndex); for (index = 0; index <= 3; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; switch (pNode->nodeType) { case SEMICON: name = "semiconductor"; break; case INSULATOR: name = "insulator"; break; case CONTACT: name = "contact"; break; case SCHOTTKY: name = "schottky"; break; case INTERFACE: name = "interface"; break; default: name = "unknown"; break; } fprintf(stderr, "node %5d: %s %5d %5d\n", index, name, pNode->nodeI, pNode->nodeJ); } if (pElem->evalEdges[index]) { pEdge = pElem->pEdges[index]; switch (pEdge->edgeType) { case SEMICON: name = "semiconductor"; break; case INSULATOR: name = "insulator"; break; case CONTACT: name = "contact"; break; case SCHOTTKY: name = "schottky"; break; case INTERFACE: name = "interface"; break; default: name = "unknown"; break; } fprintf(stderr, "edge %5d: %s\n", index, name); } } } } /* * We have a separate function for this, so that the setup routines can * reset the state pointers without rebuilding the entire mesh. */ void TWOgetStatePointers(TWOdevice *pDevice, int *numStates) { int eIndex, index; TWOelem *pElem; TWOnode *pNode; TWOedge *pEdge; for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; for (index = 0; index <= 3; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; pNode->nodeState = *numStates; *numStates += TWOnumNodeStates; } if (pElem->evalEdges[index]) { pEdge = pElem->pEdges[index]; pEdge->edgeState = *numStates; *numStates += TWOnumEdgeStates; } } } } /* * This function computes the percentages of the total semiconductor * width of an edge on the negative and positive sides of the edge */ static void doMobCoeffs(TWOelem *pElem, int index) { TWOelem *pNElem; TWOedge *pEdge; double dl1 = 0.0, dl2 = 0.0; pNElem = pElem->pElems[ index ]; pEdge = pElem->pEdges[ index ]; /* If neighbor is not SEMICON, assign and return */ if ( (pNElem == NULL) || (pNElem->elemType == INSULATOR) ) { if ( index == 0 || index == 3 ) { pEdge->kNeg = 0.0; pEdge->kPos = 1.0; } else { pEdge->kNeg = 1.0; pEdge->kPos = 0.0; } return; } /* Find appropriate dimensions of the elements */ switch ( index ) { case 0: dl1 = pNElem->dy; dl2 = pElem->dy; break; case 1: dl1 = pElem->dx; dl2 = pNElem->dx; break; case 2: dl1 = pElem->dy; dl2 = pNElem->dy; break; case 3: dl1 = pNElem->dx; dl2 = pElem->dx; break; } /* Assign coefficients */ pEdge->kNeg = dl1 / (dl1 + dl2); pEdge->kPos = dl2 / (dl1 + dl2); } static void resetEvalFlag(TWOdevice *pDevice) { int index, eIndex; TWOelem *pElem; for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; for (index = 0; index <= 3; index++) { pElem->pNodes[index]->evaluated = FALSE; pElem->pEdges[index]->evaluated = FALSE; } } } tmpk8ny_4pz/src/ciderlib/twod/twodext.h0000644000175000017500000001506313546075722020355 0ustar carstencarsten/* * 2001 Paolo Nenzi */ /* External symbols for Two Dimensional simulator */ #ifndef ngspice_TWODEXT_H #define ngspice_TWODEXT_H #include "ngspice/profile.h" #include "ngspice/twomesh.h" #include "ngspice/twodev.h" #include "ngspice/carddefs.h" #include "ngspice/bool.h" #include "ngspice/complex.h" /* twoadmit.c */ extern int NUMD2admittance(TWOdevice *, double, SPcomplex *); extern int NBJT2admittance(TWOdevice *, double, SPcomplex *, SPcomplex *, SPcomplex *, SPcomplex *); extern int NUMOSadmittance(TWOdevice *, double, struct mosAdmittances *); extern BOOLEAN TWOsorSolve(TWOdevice *, double *, double *, double); extern SPcomplex *contactAdmittance(TWOdevice *, TWOcontact *, BOOLEAN, double *, double *, SPcomplex *); extern SPcomplex *oxideAdmittance(TWOdevice *, TWOcontact *,BOOLEAN, double *, double *, SPcomplex *); extern void NUMD2ys(TWOdevice *, SPcomplex *, SPcomplex *); extern void NBJT2ys(TWOdevice *,SPcomplex *, SPcomplex *, SPcomplex *, SPcomplex *, SPcomplex *); extern void NUMOSys(TWOdevice *, SPcomplex *, struct mosAdmittances *); /* twoaval.c */ extern double TWOavalanche(TWOelem *, TWOnode *); /* twocond.c */ extern void NUMD2conductance(TWOdevice *, BOOLEAN, double *, double *); extern void NBJT2conductance(TWOdevice *, BOOLEAN, double *, double *, double *, double *, double *); extern void NUMOSconductance(TWOdevice *, BOOLEAN, double *, struct mosConductances *); extern double contactCurrent(TWOdevice *, TWOcontact *); extern double oxideCurrent(TWOdevice *, TWOcontact *, BOOLEAN); extern double contactConductance(TWOdevice *, TWOcontact *, BOOLEAN, double *, BOOLEAN, double *); extern double oxideConductance(TWOdevice *, TWOcontact *, BOOLEAN, double *, BOOLEAN, double *); extern void NUMD2current(TWOdevice *, BOOLEAN, double *, double *); extern void NBJT2current(TWOdevice *, BOOLEAN, double *, double *, double *); extern void NUMOScurrent(TWOdevice *, BOOLEAN , double *, double *, double *, double *); /* twocont */ extern void TWO_jacBuild(TWOdevice *); extern void TWO_sysLoad(TWOdevice *, BOOLEAN, TWOtranInfo *); extern void TWO_jacLoad(TWOdevice *); extern void TWO_rhsLoad(TWOdevice *, BOOLEAN, TWOtranInfo *); extern void TWO_commonTerms(TWOdevice *, BOOLEAN, BOOLEAN, TWOtranInfo *); /* twocurr.c */ extern void nodeCurrents(TWOelem *, TWOnode *, double *, double *, double *, double *, double *, double *, double *, double *); /* twodest */ extern void TWOdestroy(TWOdevice *); /* twodopng.c */ extern double TWOdopingValue(DOPprofile *, DOPtable *, double, double); extern void TWOsetDoping(TWOdevice *, DOPprofile *, DOPtable *); /* twoelect.c */ extern int TWOcmpElectrode(TWOelectrode *, TWOelectrode *); extern void checkElectrodes(TWOelectrode *, int); extern void setupContacts(TWOdevice *, TWOelectrode *, TWOnode ***); /* twofield.c */ extern void nodeFields(TWOelem *, TWOnode *, double *, double *); /* twomesh.c */ extern void TWObuildMesh(TWOdevice *, TWOdomain *, TWOelectrode *, TWOmaterial *); extern void TWOprnMesh(TWOdevice *); extern void TWOgetStatePointers(TWOdevice *, int *); /* twomobdv.c */ extern void TWO_mobDeriv(TWOelem *, int, double); extern void TWONmobDeriv(TWOelem *, int, double); extern void TWOPmobDeriv(TWOelem *, int, double); /* twomobfn.c */ extern void MOBsurfElec(TWOmaterial *, TWOelem *, double, double, double, double, double, double); extern void MOBsurfHole(TWOmaterial *, TWOelem *, double, double, double, double, double, double); /* twomobil.c */ extern void TWO_mobility(TWOelem *, double); extern void TWONmobility(TWOelem *, double); extern void TWOPmobility(TWOelem *, double); /* twoncont.c */ extern void TWONjacBuild(TWOdevice *); extern void TWONsysLoad(TWOdevice *, BOOLEAN, TWOtranInfo *); extern void TWONjacLoad(TWOdevice *); extern void TWONrhsLoad(TWOdevice *, BOOLEAN, TWOtranInfo *); extern void TWONcommonTerms(TWOdevice *, BOOLEAN, BOOLEAN, TWOtranInfo *); /* twopcont.c */ extern void TWOPjacBuild(TWOdevice *); extern void TWOPsysLoad(TWOdevice *, BOOLEAN, TWOtranInfo *); extern void TWOPjacLoad(TWOdevice *); extern void TWOPrhsLoad(TWOdevice *, BOOLEAN, TWOtranInfo *); extern void TWOPcommonTerms(TWOdevice *, BOOLEAN, BOOLEAN, TWOtranInfo *); /* twopoiss.c */ extern void TWOQjacBuild(TWOdevice *); extern void TWOQsysLoad(TWOdevice *); extern void TWOQrhsLoad(TWOdevice *); extern void TWOQcommonTerms(TWOdevice *); /*twoprint.c */ extern void TWOprnSolution(FILE *, TWOdevice *, OUTPcard *); extern void TWOmemStats(FILE *, TWOdevice *); extern void TWOcpuStats(FILE *, TWOdevice *); /* twoproj.c */ extern void NUMD2project(TWOdevice *, double); extern void NBJT2project(TWOdevice *, double, double); extern void NUMOSproject(TWOdevice *, double, double, double); extern void NUMD2update(TWOdevice *,double, BOOLEAN); extern void NBJT2update(TWOdevice *, double, double, BOOLEAN); extern void NUMOSupdate(TWOdevice *, double, double, double, BOOLEAN); extern void storeNewRhs(TWOdevice *, TWOcontact *); /* tworead.c */ extern int TWOreadState(TWOdevice *, char *, int, double *, double *, double *); /*twosetbc.c */ extern void NUMD2setBCs(TWOdevice *, double); extern void NBJT2setBCs(TWOdevice *, double, double); extern void NUMOSsetBCs(TWOdevice *, double, double, double); /*twosetup.c */ extern void TWOsetup(TWOdevice *); extern void TWOsetBCparams(TWOdevice *, BDRYcard *); extern void TWOnormalize(TWOdevice *); /* twosolve.c */ extern void TWOdcSolve(TWOdevice *, int, BOOLEAN, BOOLEAN, TWOtranInfo *); extern BOOLEAN TWOdeltaConverged(TWOdevice *); extern BOOLEAN TWOdeviceConverged(TWOdevice *); extern void TWOresetJacobian(TWOdevice *); extern void TWOstoreNeutralGuess(TWOdevice *); extern void TWOequilSolve(TWOdevice *); extern void TWObiasSolve(TWOdevice *, int, BOOLEAN, TWOtranInfo *); extern void TWOstoreEquilibGuess(TWOdevice *); extern void TWOstoreInitialGuess(TWOdevice *); extern void oldTWOnewDelta(TWOdevice *, BOOLEAN, TWOtranInfo *); extern int TWOnewDelta(TWOdevice *, BOOLEAN, TWOtranInfo *); extern void TWOpredict(TWOdevice *, TWOtranInfo *); extern double TWOtrunc(TWOdevice *, TWOtranInfo *, double); extern void TWOsaveState(TWOdevice *); extern BOOLEAN TWOpsiDeltaConverged(TWOdevice *); extern double TWOnuNorm(TWOdevice *); extern void TWOjacCheck(TWOdevice *, BOOLEAN, TWOtranInfo *); #endif tmpk8ny_4pz/src/ciderlib/twod/twomobdv.c0000644000175000017500000014563313546075722020522 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/twomesh.h" #include "ngspice/bool.h" #include "twoddefs.h" #include "twodext.h" /* * Load the derivatives of the current with respect to changes in * the mobility, for all edges of a silicon element. * It is known a priori that the element is made of semiconductor. * These routines work for both channel and bulk elements. */ void TWO_mobDeriv( TWOelem* pElem, int chanType, double ds ) /* TWOelem *pElem: channel or bulk element */ /* int chanType: flag for direction of channel */ /* double ds: normalized hgt (len) of interface element */ { TWOnode *pNode; TWOedge *pTEdge, *pBEdge, *pLEdge, *pREdge; BOOLEAN channel = pElem->channel; double dx, dy, rDx, rDy; double coeffHx, coeffHy, coeffHs = 0.0; double coeffVx, coeffVy, coeffVs = 0.0; double dFnxDMun, dFnyDMun, dFnDEs = 0.0; double dFpxDMup, dFpyDMup, dFpDEs = 0.0; double dMnDEs, dMnDEx, dMnDEy, dMnDWx, dMnDWy; double dMpDEs, dMpDEx, dMpDEy, dMpDWx, dMpDWy; /* Initialize various quantities */ dx = pElem->dx; dy = pElem->dy; rDx = 1.0 / dx; rDy = 1.0 / dy; /* compute length-dependent parameters */ coeffHx = 0.25 * dy * rDx; /* For horizontal edges */ coeffHy = 0.25; coeffVx = 0.25; /* For vertical edges */ coeffVy = 0.25 * dx * rDy; switch ( chanType ) { case 0: case 3: coeffHs = 0.25 * dy / ds; coeffVs = 0.25 * dx / ds; break; case 1: case 2: coeffHs = - 0.25 * dy / ds; coeffVs = - 0.25 * dx / ds; break; } /* Get pointers to element's edges */ pTEdge = pElem->pTopEdge; pBEdge = pElem->pBotEdge; pLEdge = pElem->pLeftEdge; pREdge = pElem->pRightEdge; /* Get element mobility derivatives for fast access later */ dMnDEs = pElem->dMunDEs; dMnDEx = pElem->dMunDEx; dMnDEy = pElem->dMunDEy; dMnDWx = pElem->dMunDWx; dMnDWy = pElem->dMunDWy; dMpDEs = pElem->dMupDEs; dMpDEx = pElem->dMupDEx; dMpDEy = pElem->dMupDEy; dMpDWx = pElem->dMupDWx; dMpDWy = pElem->dMupDWy; /* Add mobility derivatives due to Top Edge */ /* First compute derivatives of cont. eqn's */ dFnxDMun = coeffHx * (pTEdge->wdfn * rDx); dFnyDMun = coeffHy * (pTEdge->wdfn * rDx); dFpxDMup = coeffHx * (pTEdge->wdfp * rDx); dFpyDMup = coeffHy * (pTEdge->wdfp * rDx); /* Do Top-Left (TL) Node of Element */ pNode = pElem->pTLNode; /* n continuity wrto potential derivatives */ *(pNode->fNPsi) += dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); *(pNode->fNPsiiP1) += - dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsiiP1jP1) += - dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsijP1) += dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); /* p continuity wrto potential derivatives */ *(pNode->fPPsi) += dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsiiP1) += - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiP1jP1) += - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsijP1) += dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* n continuity wrto n derivatives */ *(pNode->fNN) += dFnxDMun * ( dMnDWx * pTEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDn ); *(pNode->fNNiP1) += dFnxDMun * ( dMnDWx * pTEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDn ); *(pNode->fNNiP1jP1) += dFnxDMun * ( dMnDWx * pBEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDnP1 ); *(pNode->fNNjP1) += dFnxDMun * ( dMnDWx * pBEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDnP1 ); /* p continuity wrto p derivatives */ *(pNode->fPP) += dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPPiP1) += dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPPiP1jP1) += dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPPjP1) += dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { dFnDEs = coeffHs * (pTEdge->wdfn * rDx) * dMnDEs; dFpDEs = coeffHs * (pTEdge->wdfp * rDx) * dMpDEs; *(pNode->fNPsiIn) -= dFnDEs; *(pNode->fNPsiInP1) -= dFnDEs; *(pNode->fNPsiOx) += dFnDEs; *(pNode->fNPsiOxP1) += dFnDEs; *(pNode->fPPsiIn) -= dFpDEs; *(pNode->fPPsiInP1) -= dFpDEs; *(pNode->fPPsiOx) += dFpDEs; *(pNode->fPPsiOxP1) += dFpDEs; } /* Do Top-Right (TR) Node of Element */ pNode = pElem->pTRNode; /* n continuity wrto potential derivatives */ *(pNode->fNPsiiM1) -= dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); *(pNode->fNPsi) -= - dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsijP1) -= - dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsiiM1jP1) -= dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); /* p continuity wrto potential derivatives */ *(pNode->fPPsiiM1) -= dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsi) -= - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsijP1) -= - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiM1jP1) -= dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* n continuity wrto n derivatives */ *(pNode->fNNiM1) -= dFnxDMun * ( dMnDWx * pTEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDn ); *(pNode->fNN) -= dFnxDMun * ( dMnDWx * pTEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDn ); *(pNode->fNNjP1) -= dFnxDMun * ( dMnDWx * pBEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDnP1 ); *(pNode->fNNiM1jP1) -= dFnxDMun * ( dMnDWx * pBEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDnP1 ); /* p continuity wrto p derivatives */ *(pNode->fPPiM1) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPP) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPPjP1) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPPiM1jP1) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { *(pNode->fNPsiInM1) += dFnDEs; *(pNode->fNPsiIn) += dFnDEs; *(pNode->fNPsiOxM1) -= dFnDEs; *(pNode->fNPsiOx) -= dFnDEs; *(pNode->fPPsiInM1) += dFpDEs; *(pNode->fPPsiIn) += dFpDEs; *(pNode->fPPsiOxM1) -= dFpDEs; *(pNode->fPPsiOx) -= dFpDEs; } /* Add mobility derivatives due to Bottom Edge */ /* First compute derivatives of cont. eqn's */ dFnxDMun = coeffHx * (pBEdge->wdfn * rDx); dFnyDMun = coeffHy * (pBEdge->wdfn * rDx); dFpxDMup = coeffHx * (pBEdge->wdfp * rDx); dFpyDMup = coeffHy * (pBEdge->wdfp * rDx); /* Do Bottom-Left (BL) Node of Element */ pNode = pElem->pBLNode; /* n continuity wrto potential derivatives */ *(pNode->fNPsijM1) += dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); *(pNode->fNPsiiP1jM1) += - dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsiiP1) += - dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsi) += dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); /* p continuity wrto potential derivatives */ *(pNode->fPPsijM1) += dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsiiP1jM1) += - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiP1) += - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsi) += dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* n continuity wrto n derivatives */ *(pNode->fNNjM1) += dFnxDMun * ( dMnDWx * pTEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDn ); *(pNode->fNNiP1jM1) += dFnxDMun * ( dMnDWx * pTEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDn ); *(pNode->fNNiP1) += dFnxDMun * ( dMnDWx * pBEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDnP1 ); *(pNode->fNN) += dFnxDMun * ( dMnDWx * pBEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDnP1 ); /* p continuity wrto p derivatives */ *(pNode->fPPjM1) += dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPPiP1jM1) += dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPPiP1) += dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPP) += dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if (channel ) { dFnDEs = coeffHs * (pBEdge->wdfn * rDx) * dMnDEs; dFpDEs = coeffHs * (pBEdge->wdfp * rDx) * dMpDEs; *(pNode->fNPsiIn) -= dFnDEs; *(pNode->fNPsiInP1) -= dFnDEs; *(pNode->fNPsiOx) += dFnDEs; *(pNode->fNPsiOxP1) += dFnDEs; *(pNode->fPPsiIn) -= dFpDEs; *(pNode->fPPsiInP1) -= dFpDEs; *(pNode->fPPsiOx) += dFpDEs; *(pNode->fPPsiOxP1) += dFpDEs; } /* Do Bottom-Right (BR) Node of Element */ pNode = pElem->pBRNode; /* n continuity wrto potential derivatives */ *(pNode->fNPsiiM1jM1) -= dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); *(pNode->fNPsijM1) -= - dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsi) -= - dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsiiM1) -= dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); /* p continuity wrto potential derivatives */ *(pNode->fPPsiiM1jM1) -= dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsijM1) -= - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsi) -= - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiM1) -= dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* n continuity wrto n derivatives */ *(pNode->fNNiM1jM1) -= dFnxDMun * ( dMnDWx * pTEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDn ); *(pNode->fNNjM1) -= dFnxDMun * ( dMnDWx * pTEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDn ); *(pNode->fNN) -= dFnxDMun * ( dMnDWx * pBEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDnP1 ); *(pNode->fNNiM1) -= dFnxDMun * ( dMnDWx * pBEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDnP1 ); /* p continuity wrto p derivatives */ *(pNode->fPPiM1jM1) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPPjM1) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPP) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPPiM1) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { *(pNode->fNPsiInM1) += dFnDEs; *(pNode->fNPsiIn) += dFnDEs; *(pNode->fNPsiOxM1) -= dFnDEs; *(pNode->fNPsiOx) -= dFnDEs; *(pNode->fPPsiInM1) += dFpDEs; *(pNode->fPPsiIn) += dFpDEs; *(pNode->fPPsiOxM1) -= dFpDEs; *(pNode->fPPsiOx) -= dFpDEs; } /* Add mobility derivatives due to Left Edge */ /* First compute derivatives of cont. eqn's */ dFnxDMun = coeffVx * (pLEdge->wdfn * rDy); dFnyDMun = coeffVy * (pLEdge->wdfn * rDy); dFpxDMup = coeffVx * (pLEdge->wdfp * rDy); dFpyDMup = coeffVy * (pLEdge->wdfp * rDy); /* Do Top-Left (TL) Node of Element */ pNode = pElem->pTLNode; /* n continuity wrto potential derivatives */ *(pNode->fNPsi) += dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); *(pNode->fNPsiiP1) += - dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsiiP1jP1) += - dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsijP1) += dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); /* p continuity wrto potential derivatives */ *(pNode->fPPsi) += dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsiiP1) += - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiP1jP1) += - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsijP1) += dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* n continuity wrto n derivatives */ *(pNode->fNN) += dFnxDMun * ( dMnDWx * pTEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDn ); *(pNode->fNNiP1) += dFnxDMun * ( dMnDWx * pTEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDn ); *(pNode->fNNiP1jP1) += dFnxDMun * ( dMnDWx * pBEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDnP1 ); *(pNode->fNNjP1) += dFnxDMun * ( dMnDWx * pBEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDnP1 ); /* p continuity wrto p derivatives */ *(pNode->fPP) += dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPPiP1) += dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPPiP1jP1) += dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPPjP1) += dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { dFnDEs = coeffVs * (pLEdge->wdfn * rDy) * dMnDEs; dFpDEs = coeffVs * (pLEdge->wdfp * rDy) * dMpDEs; *(pNode->fNPsiIn) -= dFnDEs; *(pNode->fNPsiInP1) -= dFnDEs; *(pNode->fNPsiOx) += dFnDEs; *(pNode->fNPsiOxP1) += dFnDEs; *(pNode->fPPsiIn) -= dFpDEs; *(pNode->fPPsiInP1) -= dFpDEs; *(pNode->fPPsiOx) += dFpDEs; *(pNode->fPPsiOxP1) += dFpDEs; } /* Do Bottom-Left (BL) Node of Element */ pNode = pElem->pBLNode; /* n continuity wrto potential derivatives */ *(pNode->fNPsijM1) -= dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); *(pNode->fNPsiiP1jM1) -= - dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsiiP1) -= - dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsi) -= dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); /* p continuity wrto potential derivatives */ *(pNode->fPPsijM1) -= dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsiiP1jM1) -= - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiP1) -= - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsi) -= dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* n continuity wrto n derivatives */ *(pNode->fNNjM1) -= dFnxDMun * ( dMnDWx * pTEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDn ); *(pNode->fNNiP1jM1) -= dFnxDMun * ( dMnDWx * pTEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDn ); *(pNode->fNNiP1) -= dFnxDMun * ( dMnDWx * pBEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDnP1 ); *(pNode->fNN) -= dFnxDMun * ( dMnDWx * pBEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDnP1 ); /* p continuity wrto p derivatives */ *(pNode->fPPjM1) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPPiP1jM1) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPPiP1) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPP) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { *(pNode->fNPsiIn) += dFnDEs; *(pNode->fNPsiInP1) += dFnDEs; *(pNode->fNPsiOx) -= dFnDEs; *(pNode->fNPsiOxP1) -= dFnDEs; *(pNode->fPPsiIn) += dFpDEs; *(pNode->fPPsiInP1) += dFpDEs; *(pNode->fPPsiOx) -= dFpDEs; *(pNode->fPPsiOxP1) -= dFpDEs; } /* Add mobility derivatives due to Right Edge */ /* First compute derivatives of cont. eqn's */ dFnxDMun = coeffVx * (pREdge->wdfn * rDy); dFnyDMun = coeffVy * (pREdge->wdfn * rDy); dFpxDMup = coeffVx * (pREdge->wdfp * rDy); dFpyDMup = coeffVy * (pREdge->wdfp * rDy); /* Do Top-Right (TR) Node of Element */ pNode = pElem->pTRNode; /* n continuity wrto potential derivatives */ *(pNode->fNPsiiM1) += dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); *(pNode->fNPsi) += - dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsijP1) += - dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsiiM1jP1) += dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); /* p continuity wrto potential derivatives */ *(pNode->fPPsiiM1) += dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsi) += - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsijP1) += - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiM1jP1) += dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* n continuity wrto n derivatives */ *(pNode->fNNiM1) += dFnxDMun * ( dMnDWx * pTEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDn ); *(pNode->fNN) += dFnxDMun * ( dMnDWx * pTEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDn ); *(pNode->fNNjP1) += dFnxDMun * ( dMnDWx * pBEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDnP1 ); *(pNode->fNNiM1jP1) += dFnxDMun * ( dMnDWx * pBEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDnP1 ); /* p continuity wrto p derivatives */ *(pNode->fPPiM1) += dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPP) += dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPPjP1) += dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPPiM1jP1) += dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { dFnDEs = coeffVs * (pREdge->wdfn * rDy) * dMnDEs; dFpDEs = coeffVs * (pREdge->wdfp * rDy) * dMpDEs; *(pNode->fNPsiInM1) -= dFnDEs; *(pNode->fNPsiIn) -= dFnDEs; *(pNode->fNPsiOxM1) += dFnDEs; *(pNode->fNPsiOx) += dFnDEs; *(pNode->fPPsiInM1) -= dFpDEs; *(pNode->fPPsiIn) -= dFpDEs; *(pNode->fPPsiOxM1) += dFpDEs; *(pNode->fPPsiOx) += dFpDEs; } /* Do Bottom-Right (BR) Node of Element */ pNode = pElem->pBRNode; /* n continuity wrto potential derivatives */ *(pNode->fNPsiiM1jM1) -= dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); *(pNode->fNPsijM1) -= - dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsi) -= - dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsiiM1) -= dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); /* p continuity wrto potential derivatives */ *(pNode->fPPsiiM1jM1) -= dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsijM1) -= - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsi) -= - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiM1) -= dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* n continuity wrto n derivatives */ *(pNode->fNNiM1jM1) -= dFnxDMun * ( dMnDWx * pTEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDn ); *(pNode->fNNjM1) -= dFnxDMun * ( dMnDWx * pTEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDn ); *(pNode->fNN) -= dFnxDMun * ( dMnDWx * pBEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDnP1 ); *(pNode->fNNiM1) -= dFnxDMun * ( dMnDWx * pBEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDnP1 ); /* p continuity wrto p derivatives */ *(pNode->fPPiM1jM1) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPPjM1) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPP) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPPiM1) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { *(pNode->fNPsiInM1) += dFnDEs; *(pNode->fNPsiIn) += dFnDEs; *(pNode->fNPsiOxM1) -= dFnDEs; *(pNode->fNPsiOx) -= dFnDEs; *(pNode->fPPsiInM1) += dFpDEs; *(pNode->fPPsiIn) += dFpDEs; *(pNode->fPPsiOxM1) -= dFpDEs; *(pNode->fPPsiOx) -= dFpDEs; } return; } void TWONmobDeriv(TWOelem *pElem, int chanType, double ds) /* TWOelem *pElem: channel or bulk element */ /* int chanType: flag for direction of channel */ /* double ds: normalized hgt (len) of interface element */ { TWOnode *pNode; TWOedge *pTEdge, *pBEdge, *pLEdge, *pREdge; BOOLEAN channel = pElem->channel; double dx, dy, rDx, rDy; double coeffHx, coeffHy, coeffHs = 0.0; double coeffVx, coeffVy, coeffVs = 0.0; double dFnxDMun, dFnyDMun, dFnDEs = 0.0; double dMnDEs, dMnDEx, dMnDEy, dMnDWx, dMnDWy; /* Initialize various quantities */ dx = pElem->dx; dy = pElem->dy; rDx = 1.0 / dx; rDy = 1.0 / dy; /* compute length-dependent parameters */ coeffHx = 0.25 * dy * rDx; /* For horizontal edges */ coeffHy = 0.25; coeffVx = 0.25; /* For vertical edges */ coeffVy = 0.25 * dx * rDy; switch ( chanType ) { case 0: case 3: coeffHs = 0.25 * dy / ds; coeffVs = 0.25 * dx / ds; break; case 1: case 2: coeffHs = - 0.25 * dy / ds; coeffVs = - 0.25 * dx / ds; break; } /* Get pointers to element's edges */ pTEdge = pElem->pTopEdge; pBEdge = pElem->pBotEdge; pLEdge = pElem->pLeftEdge; pREdge = pElem->pRightEdge; /* Get element mobility derivatives for fast access later */ dMnDEs = pElem->dMunDEs; dMnDEx = pElem->dMunDEx; dMnDEy = pElem->dMunDEy; dMnDWx = pElem->dMunDWx; dMnDWy = pElem->dMunDWy; /* Add mobility derivatives due to Top Edge */ /* First compute derivatives of cont. eqn's */ dFnxDMun = coeffHx * (pTEdge->wdfn * rDx); dFnyDMun = coeffHy * (pTEdge->wdfn * rDx); /* Do Top-Left (TL) Node of Element */ pNode = pElem->pTLNode; /* n continuity wrto potential derivatives */ *(pNode->fNPsi) += dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); *(pNode->fNPsiiP1) += - dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsiiP1jP1) += - dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsijP1) += dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); /* n continuity wrto n derivatives */ *(pNode->fNN) += dFnxDMun * ( dMnDWx * pTEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDn ); *(pNode->fNNiP1) += dFnxDMun * ( dMnDWx * pTEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDn ); *(pNode->fNNiP1jP1) += dFnxDMun * ( dMnDWx * pBEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDnP1 ); *(pNode->fNNjP1) += dFnxDMun * ( dMnDWx * pBEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDnP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { dFnDEs = coeffHs * (pTEdge->wdfn * rDx) * dMnDEs; *(pNode->fNPsiIn) -= dFnDEs; *(pNode->fNPsiInP1) -= dFnDEs; *(pNode->fNPsiOx) += dFnDEs; *(pNode->fNPsiOxP1) += dFnDEs; } /* Do Top-Right (TR) Node of Element */ pNode = pElem->pTRNode; /* n continuity wrto potential derivatives */ *(pNode->fNPsiiM1) -= dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); *(pNode->fNPsi) -= - dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsijP1) -= - dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsiiM1jP1) -= dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); /* n continuity wrto n derivatives */ *(pNode->fNNiM1) -= dFnxDMun * ( dMnDWx * pTEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDn ); *(pNode->fNN) -= dFnxDMun * ( dMnDWx * pTEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDn ); *(pNode->fNNjP1) -= dFnxDMun * ( dMnDWx * pBEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDnP1 ); *(pNode->fNNiM1jP1) -= dFnxDMun * ( dMnDWx * pBEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDnP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { *(pNode->fNPsiInM1) += dFnDEs; *(pNode->fNPsiIn) += dFnDEs; *(pNode->fNPsiOxM1) -= dFnDEs; *(pNode->fNPsiOx) -= dFnDEs; } /* Add mobility derivatives due to Bottom Edge */ /* First compute derivatives of cont. eqn's */ dFnxDMun = coeffHx * (pBEdge->wdfn * rDx); dFnyDMun = coeffHy * (pBEdge->wdfn * rDx); /* Do Bottom-Left (BL) Node of Element */ pNode = pElem->pBLNode; /* n continuity wrto potential derivatives */ *(pNode->fNPsijM1) += dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); *(pNode->fNPsiiP1jM1) += - dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsiiP1) += - dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsi) += dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); /* n continuity wrto n derivatives */ *(pNode->fNNjM1) += dFnxDMun * ( dMnDWx * pTEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDn ); *(pNode->fNNiP1jM1) += dFnxDMun * ( dMnDWx * pTEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDn ); *(pNode->fNNiP1) += dFnxDMun * ( dMnDWx * pBEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDnP1 ); *(pNode->fNN) += dFnxDMun * ( dMnDWx * pBEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDnP1 ); /* both continuity wrto surface potential derivatives */ if (channel ) { dFnDEs = coeffHs * (pBEdge->wdfn * rDx) * dMnDEs; *(pNode->fNPsiIn) -= dFnDEs; *(pNode->fNPsiInP1) -= dFnDEs; *(pNode->fNPsiOx) += dFnDEs; *(pNode->fNPsiOxP1) += dFnDEs; } /* Do Bottom-Right (BR) Node of Element */ pNode = pElem->pBRNode; /* n continuity wrto potential derivatives */ *(pNode->fNPsiiM1jM1) -= dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); *(pNode->fNPsijM1) -= - dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsi) -= - dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsiiM1) -= dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); /* n continuity wrto n derivatives */ *(pNode->fNNiM1jM1) -= dFnxDMun * ( dMnDWx * pTEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDn ); *(pNode->fNNjM1) -= dFnxDMun * ( dMnDWx * pTEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDn ); *(pNode->fNN) -= dFnxDMun * ( dMnDWx * pBEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDnP1 ); *(pNode->fNNiM1) -= dFnxDMun * ( dMnDWx * pBEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDnP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { *(pNode->fNPsiInM1) += dFnDEs; *(pNode->fNPsiIn) += dFnDEs; *(pNode->fNPsiOxM1) -= dFnDEs; *(pNode->fNPsiOx) -= dFnDEs; } /* Add mobility derivatives due to Left Edge */ /* First compute derivatives of cont. eqn's */ dFnxDMun = coeffVx * (pLEdge->wdfn * rDy); dFnyDMun = coeffVy * (pLEdge->wdfn * rDy); /* Do Top-Left (TL) Node of Element */ pNode = pElem->pTLNode; /* n continuity wrto potential derivatives */ *(pNode->fNPsi) += dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); *(pNode->fNPsiiP1) += - dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsiiP1jP1) += - dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsijP1) += dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); /* n continuity wrto n derivatives */ *(pNode->fNN) += dFnxDMun * ( dMnDWx * pTEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDn ); *(pNode->fNNiP1) += dFnxDMun * ( dMnDWx * pTEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDn ); *(pNode->fNNiP1jP1) += dFnxDMun * ( dMnDWx * pBEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDnP1 ); *(pNode->fNNjP1) += dFnxDMun * ( dMnDWx * pBEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDnP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { dFnDEs = coeffVs * (pLEdge->wdfn * rDy) * dMnDEs; *(pNode->fNPsiIn) -= dFnDEs; *(pNode->fNPsiInP1) -= dFnDEs; *(pNode->fNPsiOx) += dFnDEs; *(pNode->fNPsiOxP1) += dFnDEs; } /* Do Bottom-Left (BL) Node of Element */ pNode = pElem->pBLNode; /* n continuity wrto potential derivatives */ *(pNode->fNPsijM1) -= dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); *(pNode->fNPsiiP1jM1) -= - dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsiiP1) -= - dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsi) -= dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); /* n continuity wrto n derivatives */ *(pNode->fNNjM1) -= dFnxDMun * ( dMnDWx * pTEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDn ); *(pNode->fNNiP1jM1) -= dFnxDMun * ( dMnDWx * pTEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDn ); *(pNode->fNNiP1) -= dFnxDMun * ( dMnDWx * pBEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDnP1 ); *(pNode->fNN) -= dFnxDMun * ( dMnDWx * pBEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDnP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { *(pNode->fNPsiIn) += dFnDEs; *(pNode->fNPsiInP1) += dFnDEs; *(pNode->fNPsiOx) -= dFnDEs; *(pNode->fNPsiOxP1) -= dFnDEs; } /* Add mobility derivatives due to Right Edge */ /* First compute derivatives of cont. eqn's */ dFnxDMun = coeffVx * (pREdge->wdfn * rDy); dFnyDMun = coeffVy * (pREdge->wdfn * rDy); /* Do Top-Right (TR) Node of Element */ pNode = pElem->pTRNode; /* n continuity wrto potential derivatives */ *(pNode->fNPsiiM1) += dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); *(pNode->fNPsi) += - dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsijP1) += - dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsiiM1jP1) += dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); /* n continuity wrto n derivatives */ *(pNode->fNNiM1) += dFnxDMun * ( dMnDWx * pTEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDn ); *(pNode->fNN) += dFnxDMun * ( dMnDWx * pTEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDn ); *(pNode->fNNjP1) += dFnxDMun * ( dMnDWx * pBEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDnP1 ); *(pNode->fNNiM1jP1) += dFnxDMun * ( dMnDWx * pBEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDnP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { dFnDEs = coeffVs * (pREdge->wdfn * rDy) * dMnDEs; *(pNode->fNPsiInM1) -= dFnDEs; *(pNode->fNPsiIn) -= dFnDEs; *(pNode->fNPsiOxM1) += dFnDEs; *(pNode->fNPsiOx) += dFnDEs; } /* Do Bottom-Right (BR) Node of Element */ pNode = pElem->pBRNode; /* n continuity wrto potential derivatives */ *(pNode->fNPsiiM1jM1) -= dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); *(pNode->fNPsijM1) -= - dFnxDMun * ( dMnDEx - dMnDWx * pTEdge->dWnDpsiP1 ) + dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsi) -= - dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pREdge->dWnDpsiP1 ); *(pNode->fNPsiiM1) -= dFnxDMun * ( dMnDEx - dMnDWx * pBEdge->dWnDpsiP1 ) - dFnyDMun * ( dMnDEy - dMnDWy * pLEdge->dWnDpsiP1 ); /* n continuity wrto n derivatives */ *(pNode->fNNiM1jM1) -= dFnxDMun * ( dMnDWx * pTEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDn ); *(pNode->fNNjM1) -= dFnxDMun * ( dMnDWx * pTEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDn ); *(pNode->fNN) -= dFnxDMun * ( dMnDWx * pBEdge->dWnDnP1 ) + dFnyDMun * ( dMnDWy * pREdge->dWnDnP1 ); *(pNode->fNNiM1) -= dFnxDMun * ( dMnDWx * pBEdge->dWnDn ) + dFnyDMun * ( dMnDWy * pLEdge->dWnDnP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { *(pNode->fNPsiInM1) += dFnDEs; *(pNode->fNPsiIn) += dFnDEs; *(pNode->fNPsiOxM1) -= dFnDEs; *(pNode->fNPsiOx) -= dFnDEs; } return; } void TWOPmobDeriv( TWOelem *pElem, int chanType, double ds ) /* TWOelem *pElem: channel or bulk element */ /*int chanType: flag for direction of channel */ /*double ds: normalized hgt (len) of interface element */ { TWOnode *pNode; TWOedge *pTEdge, *pBEdge, *pLEdge, *pREdge; BOOLEAN channel = pElem->channel; double dx, dy, rDx, rDy; double coeffHx, coeffHy, coeffHs = 0.0; double coeffVx, coeffVy, coeffVs = 0.0; double dFpxDMup, dFpyDMup, dFpDEs = 0.0; double dMpDEs, dMpDEx, dMpDEy, dMpDWx, dMpDWy; /* Initialize various quantities */ dx = pElem->dx; dy = pElem->dy; rDx = 1.0 / dx; rDy = 1.0 / dy; /* compute length-dependent parameters */ coeffHx = 0.25 * dy * rDx; /* For horizontal edges */ coeffHy = 0.25; coeffVx = 0.25; /* For vertical edges */ coeffVy = 0.25 * dx * rDy; switch ( chanType ) { case 0: case 3: coeffHs = 0.25 * dy / ds; coeffVs = 0.25 * dx / ds; break; case 1: case 2: coeffHs = - 0.25 * dy / ds; coeffVs = - 0.25 * dx / ds; break; } /* Get pointers to element's edges */ pTEdge = pElem->pTopEdge; pBEdge = pElem->pBotEdge; pLEdge = pElem->pLeftEdge; pREdge = pElem->pRightEdge; /* Get element mobility derivatives for fast access later */ dMpDEs = pElem->dMupDEs; dMpDEx = pElem->dMupDEx; dMpDEy = pElem->dMupDEy; dMpDWx = pElem->dMupDWx; dMpDWy = pElem->dMupDWy; /* Add mobility derivatives due to Top Edge */ /* First compute derivatives of cont. eqn's */ dFpxDMup = coeffHx * (pTEdge->wdfp * rDx); dFpyDMup = coeffHy * (pTEdge->wdfp * rDx); /* Do Top-Left (TL) Node of Element */ pNode = pElem->pTLNode; /* p continuity wrto potential derivatives */ *(pNode->fPPsi) += dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsiiP1) += - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiP1jP1) += - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsijP1) += dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* p continuity wrto p derivatives */ *(pNode->fPP) += dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPPiP1) += dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPPiP1jP1) += dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPPjP1) += dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { dFpDEs = coeffHs * (pTEdge->wdfp * rDx) * dMpDEs; *(pNode->fPPsiIn) -= dFpDEs; *(pNode->fPPsiInP1) -= dFpDEs; *(pNode->fPPsiOx) += dFpDEs; *(pNode->fPPsiOxP1) += dFpDEs; } /* Do Top-Right (TR) Node of Element */ pNode = pElem->pTRNode; /* p continuity wrto potential derivatives */ *(pNode->fPPsiiM1) -= dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsi) -= - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsijP1) -= - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiM1jP1) -= dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* p continuity wrto p derivatives */ *(pNode->fPPiM1) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPP) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPPjP1) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPPiM1jP1) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { *(pNode->fPPsiInM1) += dFpDEs; *(pNode->fPPsiIn) += dFpDEs; *(pNode->fPPsiOxM1) -= dFpDEs; *(pNode->fPPsiOx) -= dFpDEs; } /* Add mobility derivatives due to Bottom Edge */ /* First compute derivatives of cont. eqn's */ dFpxDMup = coeffHx * (pBEdge->wdfp * rDx); dFpyDMup = coeffHy * (pBEdge->wdfp * rDx); /* Do Bottom-Left (BL) Node of Element */ pNode = pElem->pBLNode; /* p continuity wrto potential derivatives */ *(pNode->fPPsijM1) += dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsiiP1jM1) += - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiP1) += - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsi) += dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* p continuity wrto p derivatives */ *(pNode->fPPjM1) += dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPPiP1jM1) += dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPPiP1) += dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPP) += dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if (channel ) { dFpDEs = coeffHs * (pBEdge->wdfp * rDx) * dMpDEs; *(pNode->fPPsiIn) -= dFpDEs; *(pNode->fPPsiInP1) -= dFpDEs; *(pNode->fPPsiOx) += dFpDEs; *(pNode->fPPsiOxP1) += dFpDEs; } /* Do Bottom-Right (BR) Node of Element */ pNode = pElem->pBRNode; /* p continuity wrto potential derivatives */ *(pNode->fPPsiiM1jM1) -= dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsijM1) -= - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsi) -= - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiM1) -= dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* p continuity wrto p derivatives */ *(pNode->fPPiM1jM1) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPPjM1) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPP) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPPiM1) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { *(pNode->fPPsiInM1) += dFpDEs; *(pNode->fPPsiIn) += dFpDEs; *(pNode->fPPsiOxM1) -= dFpDEs; *(pNode->fPPsiOx) -= dFpDEs; } /* Add mobility derivatives due to Left Edge */ /* First compute derivatives of cont. eqn's */ dFpxDMup = coeffVx * (pLEdge->wdfp * rDy); dFpyDMup = coeffVy * (pLEdge->wdfp * rDy); /* Do Top-Left (TL) Node of Element */ pNode = pElem->pTLNode; /* p continuity wrto potential derivatives */ *(pNode->fPPsi) += dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsiiP1) += - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiP1jP1) += - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsijP1) += dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* p continuity wrto p derivatives */ *(pNode->fPP) += dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPPiP1) += dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPPiP1jP1) += dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPPjP1) += dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { dFpDEs = coeffVs * (pLEdge->wdfp * rDy) * dMpDEs; *(pNode->fPPsiIn) -= dFpDEs; *(pNode->fPPsiInP1) -= dFpDEs; *(pNode->fPPsiOx) += dFpDEs; *(pNode->fPPsiOxP1) += dFpDEs; } /* Do Bottom-Left (BL) Node of Element */ pNode = pElem->pBLNode; /* p continuity wrto potential derivatives */ *(pNode->fPPsijM1) -= dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsiiP1jM1) -= - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiP1) -= - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsi) -= dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* p continuity wrto p derivatives */ *(pNode->fPPjM1) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPPiP1jM1) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPPiP1) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPP) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { *(pNode->fPPsiIn) += dFpDEs; *(pNode->fPPsiInP1) += dFpDEs; *(pNode->fPPsiOx) -= dFpDEs; *(pNode->fPPsiOxP1) -= dFpDEs; } /* Add mobility derivatives due to Right Edge */ /* First compute derivatives of cont. eqn's */ dFpxDMup = coeffVx * (pREdge->wdfp * rDy); dFpyDMup = coeffVy * (pREdge->wdfp * rDy); /* Do Top-Right (TR) Node of Element */ pNode = pElem->pTRNode; /* p continuity wrto potential derivatives */ *(pNode->fPPsiiM1) += dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsi) += - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsijP1) += - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiM1jP1) += dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* p continuity wrto p derivatives */ *(pNode->fPPiM1) += dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPP) += dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPPjP1) += dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPPiM1jP1) += dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { dFpDEs = coeffVs * (pREdge->wdfp * rDy) * dMpDEs; *(pNode->fPPsiInM1) -= dFpDEs; *(pNode->fPPsiIn) -= dFpDEs; *(pNode->fPPsiOxM1) += dFpDEs; *(pNode->fPPsiOx) += dFpDEs; } /* Do Bottom-Right (BR) Node of Element */ pNode = pElem->pBRNode; /* p continuity wrto potential derivatives */ *(pNode->fPPsiiM1jM1) -= dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsijM1) -= - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsi) -= - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiM1) -= dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* p continuity wrto p derivatives */ *(pNode->fPPiM1jM1) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPPjM1) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPP) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPPiM1) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { *(pNode->fPPsiInM1) += dFpDEs; *(pNode->fPPsiIn) += dFpDEs; *(pNode->fPPsiOxM1) -= dFpDEs; *(pNode->fPPsiOx) -= dFpDEs; } return; } tmpk8ny_4pz/src/ciderlib/twod/twomobil.c0000644000175000017500000001072113546075722020502 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1990 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/twomesh.h" #include "twoddefs.h" #include "twodext.h" /* * Compute the 2-D field-dependent mobility at the center of an element. * It is known a priori that the element belongs to a semiconductor domain. */ void TWO_mobility(TWOelem *pElem, double eSurf) { TWOedge *pTEdge, *pBEdge, *pLEdge, *pREdge; double dx, dy, rDx, rDy; double enx, eny, wnx, wny, concav; double epx, epy, wpx, wpy; /* Initialize various quantities */ dx = pElem->dx; dy = pElem->dy; rDx = 0.5 / dx; /* Includes averaging factor of 0.5 */ rDy = 0.5 / dy; /* Includes averaging factor of 0.5 */ /* Get pointers to element's edges */ pTEdge = pElem->pTopEdge; pBEdge = pElem->pBotEdge; pLEdge = pElem->pLeftEdge; pREdge = pElem->pRightEdge; /* Calculate electric field at element center */ enx = -rDx *(pTEdge->dPsi + pTEdge->dCBand + pBEdge->dPsi + pBEdge->dCBand); epx = -rDx *(pTEdge->dPsi - pTEdge->dVBand + pBEdge->dPsi - pBEdge->dVBand); eny = -rDy *(pLEdge->dPsi + pLEdge->dCBand + pREdge->dPsi + pREdge->dCBand); epy = -rDy *(pLEdge->dPsi - pLEdge->dVBand + pREdge->dPsi - pREdge->dVBand); /* Calculate weighted carrier driving force at element center */ wnx = rDx * (pTEdge->wdfn + pBEdge->wdfn); wpx = rDx * (pTEdge->wdfp + pBEdge->wdfp); wny = rDy * (pLEdge->wdfn + pREdge->wdfn); wpy = rDy * (pLEdge->wdfp + pREdge->wdfp); /* compute the mobility for the element */ /* Average concentrations at the four corners */ concav = 0.25 * ( pElem->pTLNode->totalConc + pElem->pTRNode->totalConc + pElem->pBLNode->totalConc + pElem->pBRNode->totalConc ); MOBsurfElec(pElem->matlInfo, pElem, enx, eny, eSurf, wnx, wny, concav); MOBsurfHole(pElem->matlInfo, pElem, epx, epy, eSurf, wpx, wpy, concav); return; } void TWONmobility(TWOelem *pElem, double eSurf) { TWOedge *pTEdge, *pBEdge, *pLEdge, *pREdge; double dx, dy, rDx, rDy; double enx, eny, wnx, wny, concav; /* Initialize various quantities */ dx = pElem->dx; dy = pElem->dy; rDx = 0.5 / dx; /* Includes averaging factor of 0.5 */ rDy = 0.5 / dy; /* Includes averaging factor of 0.5 */ /* Get pointers to element's edges */ pTEdge = pElem->pTopEdge; pBEdge = pElem->pBotEdge; pLEdge = pElem->pLeftEdge; pREdge = pElem->pRightEdge; /* Calculate electric field at element center */ enx = -rDx *(pTEdge->dPsi + pTEdge->dCBand + pBEdge->dPsi + pBEdge->dCBand); eny = -rDy *(pLEdge->dPsi + pLEdge->dCBand + pREdge->dPsi + pREdge->dCBand); /* Calculate weighted carrier driving force at element center */ wnx = rDx * (pTEdge->wdfn + pBEdge->wdfn); wny = rDy * (pLEdge->wdfn + pREdge->wdfn); /* compute the mobility for the element */ /* Average concentrations at the four corners */ concav = 0.25 * ( pElem->pTLNode->totalConc + pElem->pTRNode->totalConc + pElem->pBLNode->totalConc + pElem->pBRNode->totalConc ); MOBsurfElec(pElem->matlInfo, pElem, enx, eny, eSurf, wnx, wny, concav); return; } void TWOPmobility(TWOelem *pElem, double eSurf) { TWOedge *pTEdge, *pBEdge, *pLEdge, *pREdge; double dx, dy, rDx, rDy; double epx, epy, wpx, wpy, concav; /* Initialize various quantities */ dx = pElem->dx; dy = pElem->dy; rDx = 0.5 / dx; /* Includes averaging factor of 0.5 */ rDy = 0.5 / dy; /* Includes averaging factor of 0.5 */ /* Get pointers to element's edges */ pTEdge = pElem->pTopEdge; pBEdge = pElem->pBotEdge; pLEdge = pElem->pLeftEdge; pREdge = pElem->pRightEdge; /* Calculate electric field at element center */ epx = -rDx *(pTEdge->dPsi - pTEdge->dVBand + pBEdge->dPsi - pBEdge->dVBand); epy = -rDy *(pLEdge->dPsi - pLEdge->dVBand + pREdge->dPsi - pREdge->dVBand); /* Calculate weighted carrier driving force at element center */ wpx = rDx * (pTEdge->wdfp + pBEdge->wdfp); wpy = rDy * (pLEdge->wdfp + pREdge->wdfp); /* compute the mobility for the element */ /* Average concentrations at the four corners */ concav = 0.25 * ( pElem->pTLNode->totalConc + pElem->pTRNode->totalConc + pElem->pBLNode->totalConc + pElem->pBRNode->totalConc ); MOBsurfHole(pElem->matlInfo, pElem, epx, epy, eSurf, wpx, wpy, concav); return; } tmpk8ny_4pz/src/ciderlib/twod/Makefile.am0000644000175000017500000000114013546075722020531 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libcidertwod.la libcidertwod_la_SOURCES = \ twoadmit.c \ twoaval.c \ twocond.c \ twocont.c \ twocurr.c \ twoddefs.h \ twodest.c \ twodext.h \ twodopng.c \ twoelect.c \ twofield.c \ twomesh.c \ twomobdv.c \ twomobfn.c \ twomobil.c \ twoncont.c \ twopcont.c \ twopoiss.c \ twoprint.c \ twoproj.c \ tworead.c \ twosetbc.c \ twosetup.c \ twosolve.c EXTRA_DIST = readme AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/ciderlib/twod/twoprint.c0000644000175000017500000004122013546075722020532 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1992 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numconst.h" #include "ngspice/numenum.h" #include "ngspice/twomesh.h" #include "ngspice/twodev.h" #include "ngspice/carddefs.h" #include "ngspice/spmatrix.h" #include "ngspice/bool.h" #include "twoddefs.h" #include "twodext.h" #include void TWOprnSolution(FILE *file, TWOdevice *pDevice, OUTPcard *output) { int index, xIndex, yIndex; int numVars = 0; TWOnode ***nodeArray = NULL; TWOnode *pNode; TWOmaterial *info; double data[50]; double ex, ey, refPsi = 0.0, eGap, dGap; double mun, mup; double jcx, jdx, jnx, jpx, jtx; double jcy, jdy, jny, jpy, jty; double *xScale = pDevice->xScale; double *yScale = pDevice->yScale; if (output->OUTPnumVars == -1) { /* First pass. Need to count number of variables in output. */ numVars += 2; /* For the X & Y scales */ if (output->OUTPdoping) { numVars++; } if (output->OUTPpsi) { numVars++; } if (output->OUTPequPsi) { numVars++; } if (output->OUTPvacPsi) { numVars++; } if (output->OUTPnConc) { numVars++; } if (output->OUTPpConc) { numVars++; } if (output->OUTPphin) { numVars++; } if (output->OUTPphip) { numVars++; } if (output->OUTPphic) { numVars++; } if (output->OUTPphiv) { numVars++; } if (output->OUTPeField) { numVars += 2; } if (output->OUTPjc) { numVars += 2; } if (output->OUTPjd) { numVars += 2; } if (output->OUTPjn) { numVars += 2; } if (output->OUTPjp) { numVars += 2; } if (output->OUTPjt) { numVars += 2; } if (output->OUTPuNet) { numVars++; } if (output->OUTPmun) { numVars++; } if (output->OUTPmup) { numVars++; } output->OUTPnumVars = numVars; } /* generate the work array for printing node info */ XCALLOC(nodeArray, TWOnode **, 1 + pDevice->numXNodes); for (xIndex = 1; xIndex <= pDevice->numXNodes; xIndex++) { XCALLOC(nodeArray[xIndex], TWOnode *, 1 + pDevice->numYNodes); } /* store the nodes in this work array and print out later */ for (xIndex = 1; xIndex < pDevice->numXNodes; xIndex++) { for (yIndex = 1; yIndex < pDevice->numYNodes; yIndex++) { TWOelem *pElem = pDevice->elemArray[xIndex][yIndex]; if (pElem != NULL) { if (refPsi == 0.0 && pElem->matlInfo->type == SEMICON) { refPsi = pElem->matlInfo->refPsi; } for (index = 0; index < 4; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; nodeArray[pNode->nodeI][pNode->nodeJ] = pNode; } } } } } /* Initialize rawfile */ numVars = output->OUTPnumVars; fprintf(file, "Title: Device %s internal state\n", pDevice->name); fprintf(file, "Plotname: Device Cross Section\n"); fprintf(file, "Flags: real\n"); fprintf(file, "Command: deftype p xs cross\n"); fprintf(file, "Command: deftype v distance m\n"); fprintf(file, "Command: deftype v concentration cm^-3\n"); fprintf(file, "Command: deftype v electric_field V/cm\n"); fprintf(file, "Command: deftype v current_density A/cm^2\n"); fprintf(file, "Command: deftype v concentration/time cm^-3/s\n"); fprintf(file, "Command: deftype v mobility cm^2/Vs\n"); fprintf(file, "No. Variables: %d\n", numVars); fprintf(file, "No. Points: %d\n", pDevice->numXNodes * pDevice->numYNodes); fprintf(file, "Dimensions: %d,%d\n", pDevice->numXNodes, pDevice->numYNodes); numVars = 0; fprintf(file, "Variables:\n"); fprintf(file, "\t%d y distance\n", numVars++); fprintf(file, "\t%d x distance\n", numVars++); if (output->OUTPpsi) { fprintf(file, "\t%d psi voltage\n", numVars++); } if (output->OUTPequPsi) { fprintf(file, "\t%d equ.psi voltage\n", numVars++); } if (output->OUTPvacPsi) { fprintf(file, "\t%d vac.psi voltage\n", numVars++); } if (output->OUTPphin) { fprintf(file, "\t%d phin voltage\n", numVars++); } if (output->OUTPphip) { fprintf(file, "\t%d phip voltage\n", numVars++); } if (output->OUTPphic) { fprintf(file, "\t%d phic voltage\n", numVars++); } if (output->OUTPphiv) { fprintf(file, "\t%d phiv voltage\n", numVars++); } if (output->OUTPdoping) { fprintf(file, "\t%d dop concentration\n", numVars++); } if (output->OUTPnConc) { fprintf(file, "\t%d n concentration\n", numVars++); } if (output->OUTPpConc) { fprintf(file, "\t%d p concentration\n", numVars++); } if (output->OUTPeField) { fprintf(file, "\t%d ex electric_field\n", numVars++); fprintf(file, "\t%d ey electric_field\n", numVars++); } if (output->OUTPjc) { fprintf(file, "\t%d jcx current_density\n", numVars++); fprintf(file, "\t%d jcy current_density\n", numVars++); } if (output->OUTPjd) { fprintf(file, "\t%d jdx current_density\n", numVars++); fprintf(file, "\t%d jdy current_density\n", numVars++); } if (output->OUTPjn) { fprintf(file, "\t%d jnx current_density\n", numVars++); fprintf(file, "\t%d jny current_density\n", numVars++); } if (output->OUTPjp) { fprintf(file, "\t%d jpx current_density\n", numVars++); fprintf(file, "\t%d jpy current_density\n", numVars++); } if (output->OUTPjt) { fprintf(file, "\t%d jtx current_density\n", numVars++); fprintf(file, "\t%d jty current_density\n", numVars++); } if (output->OUTPuNet) { fprintf(file, "\t%d unet concentration/time\n", numVars++); } if (output->OUTPmun) { fprintf(file, "\t%d mun mobility\n", numVars++); } if (output->OUTPmup) { fprintf(file, "\t%d mup mobility\n", numVars++); } fprintf(file, "Binary:\n"); for (xIndex = 1; xIndex <= pDevice->numXNodes; xIndex++) { for (yIndex = 1; yIndex <= pDevice->numYNodes; yIndex++) { pNode = nodeArray[xIndex][yIndex]; if (pNode != NULL) { TWOelem *pElem = NULL; /* Find the element to which this node belongs. */ for (index = 0; index < 4; index++) { pElem = pNode->pElems[index]; if (pElem != NULL && pElem->evalNodes[(index + 2) % 4]) break; } nodeFields(pElem, pNode, &ex, &ey); nodeCurrents(pElem, pNode, &mun, &mup, &jnx, &jny, &jpx, &jpy, &jdx, &jdy); jcx = jnx + jpx; jcy = jny + jpy; jtx = jcx + jdx; jty = jcy + jdy; info = pElem->matlInfo; eGap = pNode->eg * VNorm; dGap = 0.5 * (info->eg0 - eGap); /* Now fill in the data array */ numVars = 0; data[numVars++] = yScale[yIndex] * 1e-2; data[numVars++] = xScale[xIndex] * 1e-2; if (output->OUTPpsi) { data[numVars++] = (pNode->psi - refPsi) * VNorm; } if (output->OUTPequPsi) { data[numVars++] = (pNode->psi0 - refPsi) * VNorm; } if (output->OUTPvacPsi) { data[numVars++] = pNode->psi * VNorm; } if (output->OUTPphin) { if (info->type != INSULATOR) { data[numVars++] = (pNode->psi - refPsi - log(pNode->nConc / pNode->nie)) * VNorm; } else { data[numVars++] = 0.0; } } if (output->OUTPphip) { if (info->type != INSULATOR) { data[numVars++] = (pNode->psi - refPsi + log(pNode->pConc / pNode->nie)) * VNorm; } else { data[numVars++] = 0.0; } } if (output->OUTPphic) { data[numVars++] = (pNode->psi + pNode->eaff) * VNorm + dGap; } if (output->OUTPphiv) { data[numVars++] = (pNode->psi + pNode->eaff) * VNorm + dGap + eGap; } if (output->OUTPdoping) { data[numVars++] = pNode->netConc * NNorm; } if (output->OUTPnConc) { data[numVars++] = pNode->nConc * NNorm; } if (output->OUTPpConc) { data[numVars++] = pNode->pConc * NNorm; } if (output->OUTPeField) { data[numVars++] = ex * ENorm; data[numVars++] = ey * ENorm; } if (output->OUTPjc) { data[numVars++] = jcx * JNorm; data[numVars++] = jcy * JNorm; } if (output->OUTPjd) { data[numVars++] = jdx * JNorm; data[numVars++] = jdy * JNorm; } if (output->OUTPjn) { data[numVars++] = jnx * JNorm; data[numVars++] = jny * JNorm; } if (output->OUTPjp) { data[numVars++] = jpx * JNorm; data[numVars++] = jpy * JNorm; } if (output->OUTPjt) { data[numVars++] = jtx * JNorm; data[numVars++] = jty * JNorm; } if (output->OUTPuNet) { data[numVars++] = pNode->uNet * NNorm / TNorm; } if (output->OUTPmun) { data[numVars++] = mun; } if (output->OUTPmup) { data[numVars++] = mup; } fwrite(data, sizeof(double), (size_t) numVars, file); } else { for (index = 0; index < output->OUTPnumVars; index++) { data[index] = 0.0; } data[0] = yScale[yIndex] * 1e-2; data[1] = xScale[xIndex] * 1e-2; fwrite(data, sizeof(double), (size_t) numVars, file); } } } /* Delete work array. */ for (xIndex = 1; xIndex <= pDevice->numXNodes; xIndex++) { FREE(nodeArray[xIndex]); } FREE(nodeArray); } /* XXX This is what the SPARSE element structure looks like. * We can't take it from its definition because the include * file redefines all sorts of things. Note that we are * violating data encapsulation to find out the size of this * thing. */ struct MatrixElement { spREAL Real; spREAL Imag; int Row; int Col; struct MatrixElement *NextInRow; struct MatrixElement *NextInCol; }; void TWOmemStats(FILE *file, TWOdevice *pDevice) { const char memFormat[] = "%-20s" "%10d" "%10" PRIuPTR "\n"; /* static const char sumFormat[] = "%20s %-10d\n"; */ int size; size_t memory; TWOmaterial *pMaterial; TWOcontact *pContact; TWOchannel *pChannel; int numContactNodes; fprintf(file, "----------------------------------------\n"); fprintf(file, "Device %s Memory Usage:\n", pDevice->name ); fprintf(file, "Item Count Bytes\n"); fprintf(file, "----------------------------------------\n"); size = 1; memory = (size_t) size * sizeof(TWOdevice); fprintf( file, memFormat, "Device", size, memory ); size = pDevice->numElems; memory = (size_t) size * sizeof(TWOelem); fprintf( file, memFormat, "Elements", size, memory ); size = pDevice->numNodes; memory = (size_t) size * sizeof(TWOnode); fprintf( file, memFormat, "Nodes", size, memory ); size = pDevice->numEdges; memory = (size_t) size * sizeof(TWOedge); fprintf( file, memFormat, "Edges", size, memory ); size = pDevice->numXNodes; memory = (size_t) size * sizeof(TWOelem **); size = (pDevice->numXNodes-1) * pDevice->numYNodes; memory += (size_t) size * sizeof(TWOelem *); size = pDevice->numElems + 1; memory += (size_t) size * sizeof(TWOelem *); size = pDevice->numXNodes + pDevice->numYNodes; memory += (size_t) size * sizeof(double); size = 0; for (pMaterial = pDevice->pMaterials; pMaterial; pMaterial = pMaterial->next) size++; memory += (size_t) size * sizeof(TWOmaterial); size = numContactNodes = 0; for (pContact = pDevice->pFirstContact; pContact; pContact = pContact->next) { numContactNodes += pContact->numNodes; size++; } memory += (size_t) size * sizeof(TWOcontact); size = numContactNodes; memory += (size_t) size * sizeof(TWOnode *); size = 0; for (pChannel = pDevice->pChannel; pChannel; pChannel = pChannel->next) size++; memory += (size_t) size * sizeof(TWOchannel); fprintf(file, "%-20s%10s%10" PRIuPTR "\n", "Misc Mesh", "n/a", memory); size = pDevice->numOrigEquil; memory = (size_t) size * sizeof(struct MatrixElement); fprintf( file, memFormat, "Equil Orig NZ", size, memory ); size = pDevice->numFillEquil; memory = (size_t) size * sizeof(struct MatrixElement); fprintf( file, memFormat, "Equil Fill NZ", size, memory ); size = pDevice->numOrigEquil + pDevice->numFillEquil; memory = (size_t) size * sizeof(struct MatrixElement); fprintf( file, memFormat, "Equil Tot NZ", size, memory ); size = pDevice->dimEquil; memory = (size_t) size * 4 * sizeof(double); fprintf( file, memFormat, "Equil Vectors", size, memory ); size = pDevice->numOrigBias; memory = (size_t) size * sizeof(struct MatrixElement); fprintf( file, memFormat, "Bias Orig NZ", size, memory ); size = pDevice->numFillBias; memory = (size_t) size * sizeof(struct MatrixElement); fprintf( file, memFormat, "Bias Fill NZ", size, memory ); size = pDevice->numOrigBias + pDevice->numFillBias; memory = (size_t) size * sizeof(struct MatrixElement); fprintf( file, memFormat, "Bias Tot NZ", size, memory ); size = pDevice->dimBias; memory = (size_t) size * 5 * sizeof(double); fprintf( file, memFormat, "Bias Vectors", size, memory ); size = pDevice->numEdges * TWOnumEdgeStates + pDevice->numNodes * TWOnumNodeStates; memory = (size_t) size * sizeof(double); fprintf( file, memFormat, "State Vector", size, memory ); } void TWOcpuStats(FILE *file, TWOdevice *pDevice) { static const char cpuFormat[] = "%-20s%10g%10g%10g%10g%10g\n"; TWOstats *pStats = pDevice->pStats; double total; int iTotal; fprintf(file, "----------------------------------------------------------------------\n"); fprintf(file, "Device %s Time Usage:\n", pDevice->name); fprintf(file, "Item SETUP DC TRAN AC TOTAL\n"); fprintf(file, "----------------------------------------------------------------------\n"); total = pStats->setupTime[STAT_SETUP] + pStats->setupTime[STAT_DC] + pStats->setupTime[STAT_TRAN] + pStats->setupTime[STAT_AC]; fprintf(file, cpuFormat, "Setup Time", pStats->setupTime[STAT_SETUP], pStats->setupTime[STAT_DC], pStats->setupTime[STAT_TRAN], pStats->setupTime[STAT_AC], total); total = pStats->loadTime[STAT_SETUP] + pStats->loadTime[STAT_DC] + pStats->loadTime[STAT_TRAN] + pStats->loadTime[STAT_AC]; fprintf(file, cpuFormat, "Load Time", pStats->loadTime[STAT_SETUP], pStats->loadTime[STAT_DC], pStats->loadTime[STAT_TRAN], pStats->loadTime[STAT_AC], total); total = pStats->orderTime[STAT_SETUP] + pStats->orderTime[STAT_DC] + pStats->orderTime[STAT_TRAN] + pStats->orderTime[STAT_AC]; fprintf(file, cpuFormat, "Order Time", pStats->orderTime[STAT_SETUP], pStats->orderTime[STAT_DC], pStats->orderTime[STAT_TRAN], pStats->orderTime[STAT_AC], total); total = pStats->factorTime[STAT_SETUP] + pStats->factorTime[STAT_DC] + pStats->factorTime[STAT_TRAN] + pStats->factorTime[STAT_AC]; fprintf(file, cpuFormat, "Factor Time", pStats->factorTime[STAT_SETUP], pStats->factorTime[STAT_DC], pStats->factorTime[STAT_TRAN], pStats->factorTime[STAT_AC], total); total = pStats->solveTime[STAT_SETUP] + pStats->solveTime[STAT_DC] + pStats->solveTime[STAT_TRAN] + pStats->solveTime[STAT_AC]; fprintf(file, cpuFormat, "Solve Time", pStats->solveTime[STAT_SETUP], pStats->solveTime[STAT_DC], pStats->solveTime[STAT_TRAN], pStats->solveTime[STAT_AC], total); total = pStats->updateTime[STAT_SETUP] + pStats->updateTime[STAT_DC] + pStats->updateTime[STAT_TRAN] + pStats->updateTime[STAT_AC]; fprintf(file, cpuFormat, "Update Time", pStats->updateTime[STAT_SETUP], pStats->updateTime[STAT_DC], pStats->updateTime[STAT_TRAN], pStats->updateTime[STAT_AC], total); total = pStats->checkTime[STAT_SETUP] + pStats->checkTime[STAT_DC] + pStats->checkTime[STAT_TRAN] + pStats->checkTime[STAT_AC]; fprintf(file, cpuFormat, "Check Time", pStats->checkTime[STAT_SETUP], pStats->checkTime[STAT_DC], pStats->checkTime[STAT_TRAN], pStats->checkTime[STAT_AC], total); total = pStats->setupTime[STAT_SETUP] + pStats->setupTime[STAT_DC] + pStats->setupTime[STAT_TRAN] + pStats->setupTime[STAT_AC]; fprintf(file, cpuFormat, "Misc Time", pStats->miscTime[STAT_SETUP], pStats->miscTime[STAT_DC], pStats->miscTime[STAT_TRAN], pStats->miscTime[STAT_AC], total); fprintf(file, "%-40s%10g%10s%10g\n", "LTE Time", pStats->lteTime, "", pStats->lteTime); total = pStats->totalTime[STAT_SETUP] + pStats->totalTime[STAT_DC] + pStats->totalTime[STAT_TRAN] + pStats->totalTime[STAT_AC]; fprintf(file, cpuFormat, "Total Time", pStats->totalTime[STAT_SETUP], pStats->totalTime[STAT_DC], pStats->totalTime[STAT_TRAN], pStats->totalTime[STAT_AC], total); iTotal = pStats->numIters[STAT_SETUP] + pStats->numIters[STAT_DC] + pStats->numIters[STAT_TRAN] + pStats->numIters[STAT_AC]; fprintf(file, "%-20s%10d%10d%10d%10d%10d\n", "Iterations", pStats->numIters[STAT_SETUP], pStats->numIters[STAT_DC], pStats->numIters[STAT_TRAN], pStats->numIters[STAT_AC], iTotal); } tmpk8ny_4pz/src/ciderlib/twod/twoaval.c0000644000175000017500000001345713546075722020334 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1990 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/twomesh.h" #include "twoddefs.h" #include "twodext.h" double TWOavalanche(TWOelem *pElem, TWOnode *pNode) { TWOelem *pElemTL, *pElemTR, *pElemBL, *pElemBR; TWOedge *pEdgeT, *pEdgeB, *pEdgeL, *pEdgeR; int materT = 0 , materB = 0, materL = 0 , materR = 0; double dxL = 0.0, dxR = 0.0, dyT = 0.0, dyB = 0.0; double ef1, ef2, coeff1, coeff2; double enx, eny, epx, epy, jnx, jny, jpx, jpy; double current, eField; double generation = 0.0; double eiip2 = 4.0e5 / ENorm; double aiip2 = 6.71e5 * LNorm; double biip2 = 1.693e6 / ENorm; TWOmaterial *info = pElem->matlInfo; /* Find all four neighboring elements */ pElemTL = pNode->pTLElem; pElemTR = pNode->pTRElem; pElemBL = pNode->pBLElem; pElemBR = pNode->pBRElem; /* Null edge pointers */ pEdgeT = pEdgeB = pEdgeL = pEdgeR = NULL; /* Find edges next to node */ if ( pElemTL != NULL ) { if (pElemTL->evalEdges[1]) { pEdgeT = pElemTL->pRightEdge; materT = pElemTL->elemType; dyT = pElemTL->dy; } if (pElemTL->evalEdges[2]) { pEdgeL = pElemTL->pBotEdge; materL = pElemTL->elemType; dxL = pElemTL->dx; } } if ( pElemTR != NULL ) { if (pElemTR->evalEdges[3]) { pEdgeT = pElemTR->pLeftEdge; materT = pElemTR->elemType; dyT = pElemTR->dy; } if (pElemTR->evalEdges[2]) { pEdgeR = pElemTR->pBotEdge; materR = pElemTR->elemType; dxR = pElemTR->dx; } } if ( pElemBR != NULL ) { if (pElemBR->evalEdges[3]) { pEdgeB = pElemBR->pLeftEdge; materB = pElemBR->elemType; dyB = pElemBR->dy; } if (pElemBR->evalEdges[0]) { pEdgeR = pElemBR->pTopEdge; materR = pElemBR->elemType; dxR = pElemBR->dx; } } if ( pElemBL != NULL ) { if (pElemBL->evalEdges[1]) { pEdgeB = pElemBL->pRightEdge; materB = pElemBL->elemType; dyB = pElemBL->dy; } if (pElemBL->evalEdges[0]) { pEdgeL = pElemBL->pTopEdge; materL = pElemBL->elemType; dxL = pElemBL->dx; } } /* compute horizontal vector components */ /* No more than one of Left Edge or Right Edge is absent */ /* If one is absent the other is guaranteed to be from silicon */ if (pEdgeL == NULL) { if ( pNode->nodeType == CONTACT ) { enx = -(pEdgeR->dPsi + pEdgeR->dCBand) / dxR; epx = -(pEdgeR->dPsi - pEdgeR->dVBand) / dxR; jnx = pEdgeR->jn; jpx = pEdgeR->jp; } else { enx = 0.0; epx = 0.0; jnx = 0.0; jpx = 0.0; } } else if (pEdgeR == NULL) { if ( pNode->nodeType == CONTACT ) { enx = -(pEdgeL->dPsi + pEdgeL->dCBand) / dxL; epx = -(pEdgeL->dPsi - pEdgeL->dVBand) / dxL; jnx = pEdgeL->jn; jpx = pEdgeL->jp; } else { enx = 0.0; epx = 0.0; jnx = 0.0; jpx = 0.0; } } else { /* Both edges are present */ coeff1 = dxL / (dxL + dxR); coeff2 = dxR / (dxL + dxR); ef1 = -(pEdgeL->dPsi + pEdgeL->dCBand) / dxL; ef2 = -(pEdgeR->dPsi + pEdgeR->dCBand) / dxR; enx = coeff2 * ef1 + coeff1 * ef2; ef1 = -(pEdgeL->dPsi - pEdgeL->dVBand) / dxL; ef2 = -(pEdgeR->dPsi - pEdgeR->dVBand) / dxR; epx = coeff2 * ef1 + coeff1 * ef2; if ( (materL == INSULATOR) || (materR == INSULATOR) ) { jnx = 0.0; jpx = 0.0; } else { jnx = coeff2 * pEdgeL->jn + coeff1 * pEdgeR->jn; jpx = coeff2 * pEdgeL->jp + coeff1 * pEdgeR->jp; } } /* compute vertical vector components */ /* No more than one of Top Edge or Bottom Edge is absent */ /* If one is absent the other is guaranteed to be from silicon */ if (pEdgeT == NULL) { if ( pNode->nodeType == CONTACT ) { eny = -(pEdgeB->dPsi + pEdgeB->dCBand) / dyB; epy = -(pEdgeB->dPsi - pEdgeB->dVBand) / dyB; jny = pEdgeB->jn; jpy = pEdgeB->jp; } else { eny = 0.0; epy = 0.0; jny = 0.0; jpy = 0.0; } } else if (pEdgeB == NULL) { if ( pNode->nodeType == CONTACT ) { eny = -(pEdgeT->dPsi + pEdgeT->dCBand) / dyT; epy = -(pEdgeT->dPsi - pEdgeT->dVBand) / dyT; jny = pEdgeT->jn; jpy = pEdgeT->jp; } else { eny = 0.0; epy = 0.0; jny = 0.0; jpy = 0.0; } } else { /* Both edges are present */ coeff1 = dyT / (dyT + dyB); coeff2 = dyB / (dyT + dyB); ef1 = -(pEdgeT->dPsi + pEdgeT->dCBand) / dyT; ef2 = -(pEdgeB->dPsi + pEdgeB->dCBand) / dyB; eny = coeff2 * ef1 + coeff1 * ef2; ef1 = -(pEdgeT->dPsi - pEdgeT->dVBand) / dyT; ef2 = -(pEdgeB->dPsi - pEdgeB->dVBand) / dyB; epy = coeff2 * ef1 + coeff1 * ef2; if ( (materT == INSULATOR) || (materB == INSULATOR) ) { jny = 0.0; jpy = 0.0; } else { jny = coeff2 * pEdgeT->jn + coeff1 * pEdgeB->jn; jpy = coeff2 * pEdgeT->jp + coeff1 * pEdgeB->jp; } } /* fprintf(stderr,"%% en = (%9.2e,%9.2e), jn = (%9.2e,%9.2e)\n", enx,eny,jnx,jny); fprintf(stderr,"%% ep = (%9.2e,%9.2e), jp = (%9.2e,%9.2e)\n", epx,epy,jpx,jpy); */ /* now calculate the avalanche generation rate */ current = hypot(jnx, jny); if ( current != 0.0 ) { eField = (enx * jnx + eny * jny) / current; if ( (eField > 0) && ( info->bii[ELEC] / eField <= 80.0) ) { generation += current * info->aii[ELEC] * exp( - info->bii[ELEC] / eField ); } } current = hypot(jpx, jpy); if ( current != 0.0 ) { eField = (epx * jpx + epy * jpy) / current; if ( eField > eiip2 ) { generation += current * aiip2 * exp( - biip2 / eField ); } else if ( (eField > 0) && ( info->bii[HOLE] / eField <= 80.0) ) { generation += current * info->aii[HOLE] * exp( - info->bii[HOLE] / eField ); } } return( generation ); } tmpk8ny_4pz/src/ciderlib/twod/twocond.c0000644000175000017500000004404713546075722020333 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* Functions to compute terminal conductances & currents. */ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/twomesh.h" #include "ngspice/twodev.h" #include "ngspice/bool.h" #include "ngspice/spmatrix.h" #include "twoddefs.h" #include "twodext.h" void NUMD2conductance(TWOdevice *pDevice, BOOLEAN tranAnalysis, double *intCoeff, double *gd) { TWOcontact *pContact = pDevice->pFirstContact; double *incVpn; BOOLEAN deltaVContact = FALSE; /* * store the new rhs for computing the incremental quantities * with the second to last node. solve the system of equations */ incVpn = pDevice->dcDeltaSolution; storeNewRhs( pDevice, pDevice->pLastContact ); spSolve( pDevice->matrix, pDevice->rhs, incVpn, NULL, NULL); incVpn = pDevice->dcDeltaSolution; *gd = contactConductance( pDevice, pContact, deltaVContact, incVpn, tranAnalysis, intCoeff ); *gd *= - GNorm * pDevice->width * LNorm; } void NBJT2conductance(TWOdevice *pDevice, BOOLEAN tranAnalysis, double *intCoeff, double *dIeDVce, double *dIcDVce, double *dIeDVbe, double *dIcDVbe) { TWOcontact *pEmitContact = pDevice->pLastContact; TWOcontact *pColContact = pDevice->pFirstContact; TWOcontact *pBaseContact = pDevice->pFirstContact->next; double width = pDevice->width; double *incVce, *incVbe; /* * store the new rhs for computing the incremental quantities * incVce (dcDeltaSolution) and incVbe (copiedSolution) are used to * store the incremental quantities associated with Vce and Vbe */ incVce = pDevice->dcDeltaSolution; incVbe = pDevice->copiedSolution; storeNewRhs( pDevice, pColContact ); spSolve( pDevice->matrix, pDevice->rhs, incVce, NULL, NULL); storeNewRhs( pDevice, pBaseContact ); spSolve( pDevice->matrix, pDevice->rhs, incVbe, NULL, NULL); *dIeDVce = contactConductance( pDevice, pEmitContact, FALSE, incVce, tranAnalysis, intCoeff ); *dIeDVbe = contactConductance( pDevice, pEmitContact, FALSE, incVbe, tranAnalysis, intCoeff ); *dIcDVce = contactConductance( pDevice, pColContact, TRUE, incVce, tranAnalysis, intCoeff ); *dIcDVbe = contactConductance( pDevice, pColContact, FALSE, incVbe, tranAnalysis, intCoeff ); *dIeDVce *= GNorm * width * LNorm; *dIcDVce *= GNorm * width * LNorm; *dIeDVbe *= GNorm * width * LNorm; *dIcDVbe *= GNorm * width * LNorm; } void NUMOSconductance(TWOdevice *pDevice, BOOLEAN tranAnalysis, double *intCoeff, struct mosConductances *dIdV) { TWOcontact *pDContact = pDevice->pFirstContact; TWOcontact *pGContact = pDevice->pFirstContact->next; TWOcontact *pSContact = pDevice->pFirstContact->next->next; double width = pDevice->width; double *incVdb, *incVsb, *incVgb; /* * store the new rhs for computing the incremental quantities * incVdb (dcDeltaSolution) */ incVdb = pDevice->dcDeltaSolution; incVsb = pDevice->copiedSolution; incVgb = pDevice->rhsImag; storeNewRhs( pDevice, pDContact ); spSolve( pDevice->matrix, pDevice->rhs, incVdb, NULL, NULL); storeNewRhs( pDevice, pSContact ); spSolve( pDevice->matrix, pDevice->rhs, incVsb, NULL, NULL); storeNewRhs( pDevice, pGContact ); spSolve( pDevice->matrix, pDevice->rhs, incVgb, NULL, NULL); dIdV->dIdDVdb = contactConductance( pDevice, pDContact, TRUE, incVdb, tranAnalysis, intCoeff ); dIdV->dIsDVdb = contactConductance( pDevice, pSContact, FALSE, incVdb, tranAnalysis, intCoeff ); dIdV->dIgDVdb = GateTypeConductance( pDevice, pGContact, FALSE, incVdb, tranAnalysis, intCoeff ); dIdV->dIdDVsb = contactConductance( pDevice, pDContact, FALSE, incVsb, tranAnalysis, intCoeff ); dIdV->dIsDVsb = contactConductance( pDevice, pSContact, TRUE, incVsb, tranAnalysis, intCoeff ); dIdV->dIgDVsb = GateTypeConductance( pDevice, pGContact, FALSE, incVsb, tranAnalysis, intCoeff ); dIdV->dIdDVgb = contactConductance( pDevice, pDContact, FALSE, incVgb, tranAnalysis, intCoeff ); dIdV->dIsDVgb = contactConductance( pDevice, pSContact, FALSE, incVgb, tranAnalysis, intCoeff ); dIdV->dIgDVgb = GateTypeConductance( pDevice, pGContact, TRUE, incVgb, tranAnalysis, intCoeff ); dIdV->dIdDVdb *= GNorm * width * LNorm; dIdV->dIdDVsb *= GNorm * width * LNorm; dIdV->dIdDVgb *= GNorm * width * LNorm; dIdV->dIsDVdb *= GNorm * width * LNorm; dIdV->dIsDVsb *= GNorm * width * LNorm; dIdV->dIsDVgb *= GNorm * width * LNorm; dIdV->dIgDVdb *= GNorm * width * LNorm; dIdV->dIgDVsb *= GNorm * width * LNorm; dIdV->dIgDVgb *= GNorm * width * LNorm; } double contactCurrent(TWOdevice *pDevice, TWOcontact *pContact) { /* computes the current through the contact given in pContact */ int index, i, numContactNodes; TWOnode *pNode; TWOelem *pElem; TWOedge *pHEdge, *pVEdge; double dx, dy; double jTotal = 0.0; numContactNodes = pContact->numNodes; for ( index = 0; index < numContactNodes; index++ ) { pNode = pContact->pNodes[ index ]; for ( i = 0; i <= 3; i++ ) { pElem = pNode->pElems[ i ]; if ( pElem != NULL ) { dx = 0.5 * pElem->dx; dy = 0.5 * pElem->dy; switch ( i ) { case 0: /* Bottom Right node */ pHEdge = pElem->pBotEdge; pVEdge = pElem->pRightEdge; jTotal += pElem->epsRel * ( -dy * pHEdge->jd - dx * pVEdge->jd ); if ( pElem->elemType == SEMICON ) { jTotal += -dy * (pHEdge->jn + pHEdge->jp) -dx * (pVEdge->jn + pVEdge->jp); } break; case 1: /* Bottom Left node */ pHEdge = pElem->pBotEdge; pVEdge = pElem->pLeftEdge; jTotal += pElem->epsRel * ( dy * pHEdge->jd - dx * pVEdge->jd ); if ( pElem->elemType == SEMICON ) { jTotal += dy * (pHEdge->jn + pHEdge->jp) -dx * (pVEdge->jn + pVEdge->jp); } break; case 2: /* Top Left node */ pHEdge = pElem->pTopEdge; pVEdge = pElem->pLeftEdge; jTotal += pElem->epsRel * ( dy * pHEdge->jd + dx * pVEdge->jd ); if ( pElem->elemType == SEMICON ) { jTotal += dy * (pHEdge->jn + pHEdge->jp) + dx * (pVEdge->jn + pVEdge->jp); } break; case 3: /* Top Right Node */ pHEdge = pElem->pTopEdge; pVEdge = pElem->pRightEdge; jTotal += pElem->epsRel * ( -dy * pHEdge->jd + dx * pVEdge->jd ); if ( pElem->elemType == SEMICON ) { jTotal += -dy * (pHEdge->jn + pHEdge->jp) + dx * (pVEdge->jn + pVEdge->jp); } break; } } } } return( jTotal * pDevice->width * LNorm * JNorm ); } double oxideCurrent(TWOdevice *pDevice, TWOcontact *pContact, BOOLEAN tranAnalysis) { /* computes the current through the contact given in pContact */ int index, i, numContactNodes; TWOnode *pNode; TWOelem *pElem; TWOedge *pHEdge, *pVEdge; double dx, dy; double jTotal = 0.0; if ( !tranAnalysis ) { return( jTotal ); } numContactNodes = pContact->numNodes; for ( index = 0; index < numContactNodes; index++ ) { pNode = pContact->pNodes[ index ]; for ( i = 0; i <= 3; i++ ) { pElem = pNode->pElems[ i ]; if ( pElem != NULL ) { dx = 0.5 * pElem->dx; dy = 0.5 * pElem->dy; switch ( i ) { case 0: /* Bottom Right node */ pHEdge = pElem->pBotEdge; pVEdge = pElem->pRightEdge; jTotal += pElem->epsRel * ( -dy * pHEdge->jd - dx * pVEdge->jd ); break; case 1: /* Bottom Left node */ pHEdge = pElem->pBotEdge; pVEdge = pElem->pLeftEdge; jTotal += pElem->epsRel * ( dy * pHEdge->jd - dx * pVEdge->jd ); break; case 2: /* Top Left node */ pHEdge = pElem->pTopEdge; pVEdge = pElem->pLeftEdge; jTotal += pElem->epsRel * ( dy * pHEdge->jd + dx * pVEdge->jd ); break; case 3: /* Top Right Node */ pHEdge = pElem->pTopEdge; pVEdge = pElem->pRightEdge; jTotal += pElem->epsRel * ( -dy * pHEdge->jd + dx * pVEdge->jd ); break; } } } } return( jTotal * pDevice->width * LNorm * JNorm ); } double contactConductance(TWOdevice *pDevice, TWOcontact *pContact, BOOLEAN delVContact, double *dxDv, BOOLEAN tranAnalysis, double *intCoeff) { /* computes the conductance of the contact given in pContact */ int index, i, numContactNodes; TWOnode *pNode, *pHNode = NULL, *pVNode = NULL; TWOelem *pElem; TWOedge *pHEdge = NULL, *pVEdge = NULL; double dPsiDv, dnDv, dpDv; double gTotal = 0.0; int nInc, pInc; NG_IGNORE(pDevice); /* for one carrier the rest of this code relies on appropriate current derivative term to be zero */ if ( !OneCarrier ) { nInc = 1; pInc = 2; } else { nInc = 1; pInc = 1; } numContactNodes = pContact->numNodes; for ( index = 0; index < numContactNodes; index++ ) { pNode = pContact->pNodes[ index ]; for ( i = 0; i <= 3; i++ ) { pElem = pNode->pElems[ i ]; if ( pElem != NULL ) { switch ( i ) { case 0: /* the TL element */ pHNode = pElem->pBLNode; pVNode = pElem->pTRNode; pHEdge = pElem->pBotEdge; pVEdge = pElem->pRightEdge; if ( pElem->elemType == SEMICON ) { /* compute the derivatives with n,p */ if ( pHNode->nodeType != CONTACT ) { dnDv = dxDv[ pHNode->nEqn ]; dpDv = dxDv[ pHNode->pEqn ]; gTotal -= 0.5 * pElem->dy * (pHEdge->dJnDn * dnDv + pHEdge->dJpDp * dpDv); } if ( pVNode->nodeType != CONTACT ) { dnDv = dxDv[ pVNode->nEqn ]; dpDv = dxDv[ pVNode->pEqn ]; gTotal -= 0.5 * pElem->dx * (pVEdge->dJnDn * dnDv + pVEdge->dJpDp * dpDv); } } break; case 1: /* the TR element */ pHNode = pElem->pBRNode; pVNode = pElem->pTLNode; pHEdge = pElem->pBotEdge; pVEdge = pElem->pLeftEdge; if ( pElem->elemType == SEMICON ) { /* compute the derivatives with n,p */ if ( pHNode->nodeType != CONTACT ) { dnDv = dxDv[ pHNode->nEqn ]; dpDv = dxDv[ pHNode->pEqn ]; gTotal += 0.5 * pElem->dy * (pHEdge->dJnDnP1 * dnDv + pHEdge->dJpDpP1 * dpDv); } if ( pVNode->nodeType != CONTACT ) { dnDv = dxDv[ pVNode->nEqn ]; dpDv = dxDv[ pVNode->pEqn ]; gTotal -= 0.5 * pElem->dx * (pVEdge->dJnDn * dnDv + pVEdge->dJpDp * dpDv); } } break; case 2: /* the BR element*/ pHNode = pElem->pTRNode; pVNode = pElem->pBLNode; pHEdge = pElem->pTopEdge; pVEdge = pElem->pLeftEdge; if ( pElem->elemType == SEMICON ) { /* compute the derivatives with n,p */ if ( pHNode->nodeType != CONTACT ) { dnDv = dxDv[ pHNode->nEqn ]; dpDv = dxDv[ pHNode->pEqn ]; gTotal += 0.5 * pElem->dy * (pHEdge->dJnDnP1 * dnDv + pHEdge->dJpDpP1 * dpDv); } if ( pVNode->nodeType != CONTACT ) { dnDv = dxDv[ pVNode->nEqn ]; dpDv = dxDv[ pVNode->pEqn ]; gTotal += 0.5 * pElem->dx * (pVEdge->dJnDnP1 * dnDv + pVEdge->dJpDpP1 * dpDv); } } break; case 3: /* the BL element */ pHNode = pElem->pTLNode; pVNode = pElem->pBRNode; pHEdge = pElem->pTopEdge; pVEdge = pElem->pRightEdge; if ( pElem->elemType == SEMICON ) { /* compute the derivatives with n,p */ if ( pHNode->nodeType != CONTACT ) { dnDv = dxDv[ pHNode->nEqn ]; dpDv = dxDv[ pHNode->pEqn ]; gTotal -= 0.5 * pElem->dy * (pHEdge->dJnDn * dnDv + pHEdge->dJpDp * dpDv); } if ( pVNode->nodeType != CONTACT ) { dnDv = dxDv[ pVNode->nEqn ]; dpDv = dxDv[ pVNode->pEqn ]; gTotal += 0.5 * pElem->dx * (pVEdge->dJnDnP1 * dnDv + pVEdge->dJpDpP1 * dpDv); } } break; } if ( pElem->elemType == SEMICON ) { if ( pHNode->nodeType != CONTACT ) { dPsiDv = dxDv[ pHNode->psiEqn ]; gTotal += 0.5 * pElem->dy * dPsiDv * (pHEdge->dJnDpsiP1 + pHEdge->dJpDpsiP1 ); if ( delVContact ) { gTotal -= 0.5 * pElem->dy * (pHEdge->dJnDpsiP1 + pHEdge->dJpDpsiP1 ); } } if ( pVNode->nodeType != CONTACT ) { dPsiDv = dxDv[ pVNode->psiEqn ]; gTotal += 0.5 * pElem->dx * dPsiDv * (pVEdge->dJnDpsiP1 + pVEdge->dJpDpsiP1 ); if ( delVContact ) { gTotal -= 0.5 * pElem->dx * (pVEdge->dJnDpsiP1 + pVEdge->dJpDpsiP1 ); } } } if ( tranAnalysis ) { /* add the displacement current terms */ if ( pHNode->nodeType != CONTACT ) { dPsiDv = dxDv[ pHNode->psiEqn ]; gTotal -= intCoeff[0] * pElem->epsRel * 0.5 * pElem->dyOverDx * dPsiDv; if ( delVContact ) { gTotal += intCoeff[0] * pElem->epsRel * 0.5 * pElem->dyOverDx; } } if ( pVNode->nodeType != CONTACT ) { dPsiDv = dxDv[ pVNode->psiEqn ]; gTotal -= intCoeff[0] * pElem->epsRel * 0.5 * pElem->dxOverDy * dPsiDv; if ( delVContact ) { gTotal += intCoeff[0] * pElem->epsRel * 0.5 * pElem->dxOverDy; } } } } } } return( gTotal ); } double oxideConductance(TWOdevice *pDevice, TWOcontact *pContact, BOOLEAN delVContact, double *dxDv, BOOLEAN tranAnalysis, double *intCoeff) { /* computes the conductance of the contact given in pContact */ int index, i, numContactNodes; TWOnode *pNode, *pHNode = NULL, *pVNode = NULL; TWOelem *pElem; double dPsiDv; double gTotal = 0.0; NG_IGNORE(pDevice); if ( !tranAnalysis ) { return( gTotal ); } numContactNodes = pContact->numNodes; for ( index = 0; index < numContactNodes; index++ ) { pNode = pContact->pNodes[ index ]; for ( i = 0; i <= 3; i++ ) { pElem = pNode->pElems[ i ]; if ( pElem != NULL ) { switch ( i ) { case 0: /* the TL element */ pHNode = pElem->pBLNode; pVNode = pElem->pTRNode; break; case 1: /* the TR element */ pHNode = pElem->pBRNode; pVNode = pElem->pTLNode; break; case 2: /* the BR element*/ pHNode = pElem->pTRNode; pVNode = pElem->pBLNode; break; case 3: /* the BL element */ pHNode = pElem->pTLNode; pVNode = pElem->pBRNode; break; } /* add the displacement current terms */ if ( pHNode->nodeType != CONTACT ) { dPsiDv = dxDv[ pHNode->psiEqn ]; gTotal -= intCoeff[0] * pElem->epsRel * 0.5 * pElem->dyOverDx * dPsiDv; if ( delVContact ) { gTotal += intCoeff[0] * pElem->epsRel * 0.5 * pElem->dyOverDx; } } if ( pVNode->nodeType != CONTACT ) { dPsiDv = dxDv[ pVNode->psiEqn ]; gTotal -= intCoeff[0] * pElem->epsRel * 0.5 * pElem->dxOverDy * dPsiDv; if ( delVContact ) { gTotal += intCoeff[0] * pElem->epsRel * 0.5 * pElem->dxOverDy; } } } } } return( gTotal ); } /* these functions are used for solving the complete system of * equations directly using LU decomposition 1/22/88 */ void NUMD2current(TWOdevice *pDevice, BOOLEAN tranAnalysis, double *intCoeff, double *id) { TWOcontact *pPContact = pDevice->pFirstContact; /* TWOcontact *pNContact = pDevice->pLastContact; */ double ip, ipPrime, *solution; /* double in;*/ BOOLEAN deltaVContact = FALSE; solution = pDevice->dcDeltaSolution; ip = contactCurrent( pDevice, pPContact ); /* in = contactCurrent( pDevice, pNContact ); fprintf(stdout, "DIO current: ( %11.4e error )\n", ip+in ); fprintf(stdout, " Ip = %11.4e In = %11.4e\n", ip, in ); */ /* * for the additional contribution to id will make use of * contactConductance. This function will be called * with the dcDeltaSolution vector instead of the incremental quantities */ ipPrime = contactConductance( pDevice, pPContact, deltaVContact, solution, tranAnalysis, intCoeff ); ipPrime *= JNorm * pDevice->width * LNorm; ip += ipPrime; *id = ip; } void NBJT2current(TWOdevice *pDevice, BOOLEAN tranAnalysis, double *intCoeff, double *ie, double *ic) { TWOcontact *pEmitContact = pDevice->pLastContact; TWOcontact *pColContact = pDevice->pFirstContact; /* TWOcontact *pBaseContact = pDevice->pFirstContact->next; */ double *solution, iePrime, icPrime; /* double ib; */ solution = pDevice->dcDeltaSolution; *ie = contactCurrent( pDevice, pEmitContact ); *ic = contactCurrent( pDevice, pColContact ); /* ib = contactCurrent( pDevice, pBaseContact ); fprintf(stdout, "BJT current: ( %11.4e error )\n", *ic+ib+*ie ); fprintf(stdout, " Ic = %11.4e Ib = %11.4e\n", *ic, ib ); fprintf(stdout, " Ie = %11.4e\n", *ie ); */ iePrime = contactConductance( pDevice, pEmitContact, FALSE, solution, tranAnalysis, intCoeff ); icPrime = contactConductance( pDevice, pColContact, FALSE, solution, tranAnalysis, intCoeff ); iePrime *= JNorm * pDevice->width * LNorm; icPrime *= JNorm * pDevice->width * LNorm; *ie += iePrime; *ic += icPrime; } void NUMOScurrent(TWOdevice *pDevice, BOOLEAN tranAnalysis, double *intCoeff, double *id, double *is, double *ig) { TWOcontact *pDContact = pDevice->pFirstContact; TWOcontact *pGContact = pDevice->pFirstContact->next; TWOcontact *pSContact = pDevice->pFirstContact->next->next; /* TWOcontact *pBContact = pDevice->pLastContact; */ double *solution, idPrime, isPrime, igPrime; /* double ib; */ solution = pDevice->dcDeltaSolution; *id = contactCurrent( pDevice, pDContact ); /* * This is a terrible hack */ #ifdef NORMAL_GATE *ig = GateTypeCurrent( pDevice, pGContact, tranAnalysis ); #else *ig = GateTypeCurrent( pDevice, pGContact); #endif *is = contactCurrent( pDevice, pSContact ); /* ib = contactCurrent( pDevice, pBContact ); fprintf(stdout, "MOS current: ( %11.4e error )\n", *id+*ig+*is+ib ); fprintf(stdout, " Id = %11.4e Is = %11.4e\n", *id, *is ); fprintf(stdout, " Ig = %11.4e Ib = %11.4e\n", *ig, ib ); */ idPrime = contactConductance( pDevice, pDContact, FALSE, solution, tranAnalysis, intCoeff ); isPrime = contactConductance( pDevice, pSContact, FALSE, solution, tranAnalysis, intCoeff ); igPrime = GateTypeConductance( pDevice, pGContact, FALSE, solution, tranAnalysis, intCoeff ); idPrime *= JNorm * pDevice->width * LNorm; isPrime *= JNorm * pDevice->width * LNorm; igPrime *= JNorm * pDevice->width * LNorm; *id += idPrime; *is += isPrime; *ig += igPrime; } tmpk8ny_4pz/src/ciderlib/twod/twoelect.c0000644000175000017500000001210513546075722020472 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numconst.h" #include "ngspice/numenum.h" #include "ngspice/twomesh.h" #include "ngspice/twodev.h" #include "ngspice/bool.h" #include "twoddefs.h" #include "twodext.h" /* Use list-sorting header file to create electrode sorter */ #define TYPE TWOelectrode #define NEXT next #define SORT TWOssortElectrodes #define SORT1 TWOsortElectrodes #include "ngspice/lsort.h" #define ARG_MIN(a,b,c) ((a) > (b) ? 1 : ((a) < (b) ? -1 : (c))) int TWOcmpElectrode(TWOelectrode *a, TWOelectrode *b) { return ARG_MIN(a->id, b->id, 0); } /* * checkElectrodes * debug list of electrodes for errors, exit on any error: * 1. list doesn't have only contiguous id's from 1 to idHigh * 2. electrodes with box shapes * 3. order of node numbers is correct */ void checkElectrodes(TWOelectrode *pElectrode, int idHigh) { TWOelectrode *pE; int id; BOOLEAN error = FALSE; /* * order the electrodes * assign electrode numbers to uninitialized electrodes ( id == -1 ) * uninit electrodes are in reverse order from order in input file * resort electrodes */ pElectrode = TWOsortElectrodes( pElectrode, TWOcmpElectrode ); id = 1; for (pE = pElectrode; pE != NULL; pE = pE->next) { if (pE->id == -1) pE->id = id++; } pElectrode = TWOsortElectrodes( pElectrode, TWOcmpElectrode ); for (pE = pElectrode, id = 1; pE != NULL; pE = pE->next) { /* Check id's */ if ( pE->id < 1 || pE->id > idHigh) { fprintf(stderr, "Error: electrode %d out of range\n",pE->id); error = TRUE; } else if ( pE->id != id ) { if ( pE->id != ++id ) { fprintf(stderr, "Error: electrode(s) %d to %d missing\n",id,pE->id-1); id = pE->id; error = TRUE; } } } /* Make sure total number of distinct electrodes is correct */ if ( id != idHigh ) { fprintf(stderr, "Error: %d electrode%s not equal to %d required\n", id, (id != 1) ? "s are" : " is", idHigh); error = TRUE; } if (error) { exit(-1); } } /* * setupContacts * go through each set of electrode segments, find its size and find nodes */ void setupContacts(TWOdevice *pDevice, TWOelectrode *pElectrode, TWOnode ***nodeArray) { TWOelectrode *pE; TWOcontact *pNew = NULL, *pTail; TWOnode *pNode; int xIndex, yIndex, nIndex = 0; int id = 0, electrodeSize[MAXTERMINALS], electrodeType; int error = FALSE; /* INITIALIZATION * 0. Assume ELCT_ID's are initialized to 0 before setup is called * 1. Add a node only once to only one electrode * 2. Compute number of nodes in each electrode * 3. Overwrite SEMICON or INSULATOR nodeType at electrodes */ for ( pE = pElectrode; pE != NULL; pE = pE->next ) { if (pE->id != id) { /* Found the next electrode */ id = pE->id; electrodeSize[id] = 0; electrodeType = 0; } for ( xIndex = pE->ixLo; xIndex <= pE->ixHi; xIndex++ ) { for ( yIndex = pE->iyLo; yIndex <= pE->iyHi; yIndex++ ) { pNode = nodeArray[ xIndex ][ yIndex ]; if ( pNode != NULL ) { pNode->nodeType = CONTACT; /* Assign each node to an electrode only once */ if (pNode->ELCT_ID == 0) { /* Is this a new node? */ pNode->ELCT_ID = id; /* Mark electrode ownership */ electrodeSize[id]++; /* Increase electrode size */ } else if (pNode->ELCT_ID != id) { /* Node already owned by another electrode */ fprintf(stderr, "Error: electrodes %d and %d overlap at (%d,%d)\n", pNode->ELCT_ID, id, xIndex, yIndex); error = TRUE; } } } } } if (error) { exit(-1); } /* ALLOCATION AND NODE GRABBING * 1. For each electrode, create a new contact structure for the electrode. * 2. Fill in entries of contact structure * 3. Update First and Last Contact pointers of device */ /* printElectrodes( pDevice->pFirstContact ); */ id = 0; pDevice->pFirstContact = pTail = NULL; for ( pE = pElectrode; pE != NULL; pE = pE->next ) { if (pE->id != id) { /* Found the next electrode */ if ( pDevice->pFirstContact == NULL ) { XCALLOC( pNew, TWOcontact, 1 ); pDevice->pFirstContact = pTail = pNew; } else { XCALLOC( pNew->next, TWOcontact, 1 ); pTail = pNew = pNew->next; } pNew->next = NULL; id = pNew->id = pE->id; pNew->workf = pE->workf; pNew->numNodes = electrodeSize[id]; nIndex = 0; XCALLOC( pNew->pNodes, TWOnode *, electrodeSize[id] ); } for ( xIndex = pE->ixLo; xIndex <= pE->ixHi; xIndex++ ) { for ( yIndex = pE->iyLo; yIndex <= pE->iyHi; yIndex++ ) { pNode = nodeArray[ xIndex ][ yIndex ]; if ( pNode != NULL ) { /* Make sure node belongs to this electrode, then * clear ELCT_ID so that it is not grabbed again. */ if (pNode->ELCT_ID == id) { pNew->pNodes[ nIndex++ ] = pNode; pNode->ELCT_ID = 0; } } } } } pDevice->pLastContact = pTail; } tmpk8ny_4pz/src/ciderlib/twod/twodopng.c0000644000175000017500000001227413546075722020514 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/twomesh.h" #include "ngspice/twodev.h" #include "ngspice/profile.h" #include "ngspice/macros.h" #include "ngspice/bool.h" #include "twoddefs.h" #include "twodext.h" #include "ngspice/cidersupt.h" /* functions in this file are used to calculate the conc */ double TWOdopingValue(DOPprofile *pProfile, DOPtable *pTable, double x, double y) { double argX, argY, argP, argL, value = 0.0; /* Find the appropriate lookup table if necessary */ if (pProfile->type == LOOKUP) { while ( pTable != NULL ) { if (pTable->impId == pProfile->IMPID) { /* Found it */ break; } else { pTable = pTable->next; } } if ( pTable == NULL ) { fprintf( stderr, "Error: unknown impurity profile %d\n", ((int)pProfile->IMPID) ); controlled_exit(1); } } /* Find distances */ if ( pProfile->Y_LOW > y ) { argY = pProfile->Y_LOW - y; } else if ( y > pProfile->Y_HIGH ) { argY = y - pProfile->Y_HIGH; } else { argY = 0.0; } if ( pProfile->X_LOW > x ) { argX = pProfile->X_LOW - x; } else if ( x > pProfile->X_HIGH ) { argX = x - pProfile->X_HIGH; } else { argX = 0.0; } if ( pProfile->DIRECTION == Y ) { argP = argY; argL = argX / pProfile->LAT_RATIO; } else { argP = argX; argL = argY / pProfile->LAT_RATIO; } if ( pProfile->rotate ) { argP = hypot(argP, argL); argL = 0.0; } /* Transform to coordinates of profile peak */ argP -= pProfile->LOCATION; argP /= pProfile->CHAR_LENGTH; argL -= pProfile->LOCATION; argL /= pProfile->CHAR_LENGTH; switch (pProfile->type) { case UNIF: if (argP > 0.0) { value = 0.0; } else { value = pProfile->CONC; } break; case LIN: argP = ABS(argP); if (argP > 1.0) { value = 0.0; } else { value = pProfile->CONC * ( 1.0 - argP ); } break; case GAUSS: argP *= argP; if ( argP > 80.0 ) { value = 0.0; } else { value = pProfile->PEAK_CONC * exp( -argP ); } case EXP: argP = ABS(argP); if ( argP > 80.0 ) { value = 0.0; } else { value = pProfile->PEAK_CONC * exp( -argP ); } break; case ERRFC: argP = ABS(argP); if ( argP > 10.0 ) { value = 0.0; } else { value = pProfile->PEAK_CONC * erfc( argP ); } break; case LOOKUP: argP = ABS(argP); value = lookup( pTable->dopData, argP ); break; default: break; } if (!pProfile->rotate) { /* Tensor product in lateral direction */ switch (pProfile->latType) { case UNIF: if (argL > 0.0) { value = 0.0; } break; case LIN: argL = ABS(argL); if (argL > 1.0) { value = 0.0; } else { value *= ( 1.0 - argL ); } break; case GAUSS: argL *= argL; if ( argL > 80.0 ) { value = 0.0; } else { value *= exp( -argL ); } case EXP: argL = ABS(argL); if ( argL > 80.0 ) { value = 0.0; } else { value *= exp( -argL ); } break; case ERRFC: argL = ABS(argL); if ( argP > 10.0 ) { value = 0.0; } else { value *= erfc( argL ); } break; case LOOKUP: argL = ABS(argL); value *= lookup( pTable->dopData, argL ) / lookup( pTable->dopData, 0.0 ); break; default: break; } } /* end: not rotated */ return( value ); } void TWOsetDoping(TWOdevice *pDevice, DOPprofile *pProfile, DOPtable *pTable) { TWOnode *pNode; TWOelem *pElem; DOPprofile *pP; double conc; int index, eIndex; BOOLEAN dopeMe; /* Clear doping info for all nodes. */ for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; for (index = 0; index <= 3; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; pNode->na = 0.0; pNode->nd = 0.0; pNode->netConc = 0.0; pNode->totalConc = 0.0; } } } /* Now compute the contribution to the total doping from each profile. */ for ( pP = pProfile; pP != NULL; pP = pP->next ) { for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; if ( pElem->elemType == SEMICON ) { if ( pP->numDomains > 0 ) { dopeMe = FALSE; for ( index = 0; index < pP->numDomains; index++ ) { if ( pElem->domain == pP->domains[ index ] ) { dopeMe = TRUE; break; } } } else { /* domains not given, so dope all */ dopeMe = TRUE; } if ( dopeMe ) { for ( index = 0; index <= 3; index++ ) { if ( pElem->evalNodes[ index ] ) { pNode = pElem->pNodes[ index ]; conc = TWOdopingValue( pP, pTable, pDevice->xScale[ pNode->nodeI ], pDevice->yScale[ pNode->nodeJ ] ); pNode->netConc += conc; if ( conc < 0.0 ) { pNode->totalConc -= conc; pNode->na -= conc; } else { pNode->totalConc += conc; pNode->nd += conc; } } } } } } } } tmpk8ny_4pz/src/ciderlib/twod/twodest.c0000644000175000017500000000346313546075722020344 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/twodev.h" #include "ngspice/twomesh.h" #include "ngspice/spmatrix.h" #include "twoddefs.h" #include "twodext.h" void TWOdestroy(TWOdevice *pDevice) { int index, eIndex; TWOelem *pElem; TWOnode *pNode; TWOedge *pEdge; if ( !pDevice ) return; switch ( pDevice->solverType ) { case SLV_SMSIG: case SLV_BIAS: /* free up memory allocated for the bias solution */ FREE( pDevice->dcSolution ); FREE( pDevice->dcDeltaSolution ); FREE( pDevice->copiedSolution ); FREE( pDevice->rhs ); FREE( pDevice->rhsImag ); spDestroy( pDevice->matrix ); break; case SLV_EQUIL: /* free up the vectors allocated in the equilibrium solution */ FREE( pDevice->dcSolution ); FREE( pDevice->dcDeltaSolution ); FREE( pDevice->copiedSolution ); FREE( pDevice->rhs ); spDestroy( pDevice->matrix ); break; case SLV_NONE: break; default: fprintf( stderr, "Panic: Unknown solver type in TWOdestroy.\n" ); exit( -1 ); break; } /* destroy the mesh */ if ( pDevice->elements ) { for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; for ( index = 0; index <= 3; index++ ) { if ( pElem->evalNodes[ index ] ) { pNode = pElem->pNodes[ index ]; FREE( pNode ); } if ( pElem->evalEdges[ index ] ) { pEdge = pElem->pEdges[ index ]; FREE( pEdge ); } } FREE( pElem ); } FREE( pDevice->elements ); FREE( pDevice->elemArray ); } /* destroy the contacts & channels */ /* NOT IMPLEMENTED */ FREE( pDevice ); } tmpk8ny_4pz/src/ciderlib/twod/twosolve.c0000644000175000017500000010705413546075722020536 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/twodev.h" #include "ngspice/twomesh.h" #include "ngspice/spmatrix.h" #include "ngspice/bool.h" #include "ngspice/macros.h" #include "twoddefs.h" #include "twodext.h" #include "ngspice/cidersupt.h" #include "../../maths/misc/norm.h" #include "ngspice/ifsim.h" extern IFfrontEnd *SPfrontEnd; /* functions to calculate the 2D solutions */ /* the iteration driving loop and convergence check */ void TWOdcSolve(TWOdevice *pDevice, int iterationLimit, BOOLEAN newSolver, BOOLEAN tranAnalysis, TWOtranInfo *info) { TWOnode *pNode; TWOelem *pElem; int size = pDevice->numEqns; int index, eIndex, error; int timesConverged = 0; BOOLEAN quitLoop; BOOLEAN debug; BOOLEAN negConc = FALSE; double *rhs = pDevice->rhs; double *solution = pDevice->dcSolution; double *delta = pDevice->dcDeltaSolution; double poissNorm, contNorm; double startTime, totalStartTime; double totalTime, loadTime, factorTime, solveTime, updateTime, checkTime; double orderTime = 0.0; totalTime = loadTime = factorTime = solveTime = updateTime = checkTime = 0.0; totalStartTime = SPfrontEnd->IFseconds(); quitLoop = FALSE; debug = (!tranAnalysis && TWOdcDebug) || (tranAnalysis && TWOtranDebug); pDevice->iterationNumber = 0; pDevice->converged = FALSE; if (debug) { if (pDevice->poissonOnly) { fprintf(stdout, "Equilibrium Solution:\n"); } else { fprintf(stdout, "Bias Solution:\n"); } fprintf(stdout, "Iteration RHS Norm\n"); } while (!(pDevice->converged || (pDevice->iterationNumber > iterationLimit) || quitLoop)) { pDevice->iterationNumber++; if ((!pDevice->poissonOnly) && (iterationLimit > 0) &&(!tranAnalysis)) { TWOjacCheck(pDevice, tranAnalysis, info); } /* LOAD */ startTime = SPfrontEnd->IFseconds(); if (pDevice->poissonOnly) { TWOQsysLoad(pDevice); } else if (!OneCarrier) { TWO_sysLoad(pDevice, tranAnalysis, info); } else if (OneCarrier == N_TYPE) { TWONsysLoad(pDevice, tranAnalysis, info); } else if (OneCarrier == P_TYPE) { TWOPsysLoad(pDevice, tranAnalysis, info); } pDevice->rhsNorm = maxNorm(rhs, size); loadTime += SPfrontEnd->IFseconds() - startTime; if (debug) { fprintf(stdout, "%7d %11.4e%s\n", pDevice->iterationNumber - 1, pDevice->rhsNorm, negConc ? " negative conc encountered" : ""); negConc = FALSE; } /* FACTOR */ startTime = SPfrontEnd->IFseconds(); error = spFactor(pDevice->matrix); factorTime += SPfrontEnd->IFseconds() - startTime; if (newSolver) { if (pDevice->iterationNumber == 1) { orderTime = factorTime; } else if (pDevice->iterationNumber == 2) { orderTime -= factorTime - orderTime; factorTime -= orderTime; if (pDevice->poissonOnly) { pDevice->pStats->orderTime[STAT_SETUP] += orderTime; } else { pDevice->pStats->orderTime[STAT_DC] += orderTime; } newSolver = FALSE; } } if (foundError(error)) { if (error == spSINGULAR) { int badRow, badCol; spWhereSingular(pDevice->matrix, &badRow, &badCol); printf("***** singular at (%d,%d)\n", badRow, badCol); } pDevice->converged = FALSE; quitLoop = TRUE; continue; } /* SOLVE */ startTime = SPfrontEnd->IFseconds(); spSolve(pDevice->matrix, rhs, delta, NULL, NULL); solveTime += SPfrontEnd->IFseconds() - startTime; /* UPDATE */ startTime = SPfrontEnd->IFseconds(); /* Use norm reducing Newton method for DC bias solutions only. */ if ((!pDevice->poissonOnly) && (iterationLimit > 0) && (!tranAnalysis) && (pDevice->rhsNorm > 1e-1)) { error = TWOnewDelta(pDevice, tranAnalysis, info); if (error) { pDevice->converged = FALSE; quitLoop = TRUE; updateTime += SPfrontEnd->IFseconds() - startTime; continue; } } for (index = 1; index <= size; index++) { solution[index] += delta[index]; } updateTime += SPfrontEnd->IFseconds() - startTime; /* CHECK CONVERGENCE */ startTime = SPfrontEnd->IFseconds(); /* Check if updates have gotten sufficiently small. */ if (pDevice->iterationNumber != 1) { pDevice->converged = TWOdeltaConverged(pDevice); } /* Check if the residual is smaller than abstol. */ if (pDevice->converged && (!pDevice->poissonOnly) && (!tranAnalysis)) { if (!OneCarrier) { TWO_rhsLoad(pDevice, tranAnalysis, info); } else if (OneCarrier == N_TYPE) { TWONrhsLoad(pDevice, tranAnalysis, info); } else if (OneCarrier == P_TYPE) { TWOPrhsLoad(pDevice, tranAnalysis, info); } pDevice->rhsNorm = maxNorm(rhs, size); if (pDevice->rhsNorm > pDevice->abstol) { pDevice->converged = FALSE; } if ((++timesConverged >= 2) && (pDevice->rhsNorm < 1e3 * pDevice->abstol)) { pDevice->converged = TRUE; } else if (timesConverged >= 5) { pDevice->converged = FALSE; quitLoop = TRUE; continue; } } else if (pDevice->converged && pDevice->poissonOnly) { TWOQrhsLoad(pDevice); pDevice->rhsNorm = maxNorm(rhs, size); if (pDevice->rhsNorm > pDevice->abstol) { pDevice->converged = FALSE; } if (++timesConverged >= 5) { pDevice->converged = TRUE; } } /* Check if the carrier concentrations are negative. */ if (pDevice->converged && (!pDevice->poissonOnly)) { /* Clear garbage entry since carrier-free elements reference it. */ solution[0] = 0.0; for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; for (index = 0; index <= 3; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; if (solution[pNode->nEqn] < 0.0) { pDevice->converged = FALSE; negConc = TRUE; if (tranAnalysis) { quitLoop = TRUE; } else { solution[pNode->nEqn] = 0.0; } } if (solution[pNode->pEqn] < 0.0) { pDevice->converged = FALSE; negConc = TRUE; if (tranAnalysis) { quitLoop = TRUE; } else { solution[pNode->pEqn] = 0.0; } } } } } if (!pDevice->converged) { if (!OneCarrier) { TWO_rhsLoad(pDevice, tranAnalysis, info); } else if (OneCarrier == N_TYPE) { TWONrhsLoad(pDevice, tranAnalysis, info); } else if (OneCarrier == P_TYPE) { TWOPrhsLoad(pDevice, tranAnalysis, info); } pDevice->rhsNorm = maxNorm(rhs, size); } } checkTime += SPfrontEnd->IFseconds() - startTime; } totalTime += SPfrontEnd->IFseconds() - totalStartTime; if (tranAnalysis) { pDevice->pStats->loadTime[STAT_TRAN] += loadTime; pDevice->pStats->factorTime[STAT_TRAN] += factorTime; pDevice->pStats->solveTime[STAT_TRAN] += solveTime; pDevice->pStats->updateTime[STAT_TRAN] += updateTime; pDevice->pStats->checkTime[STAT_TRAN] += checkTime; pDevice->pStats->numIters[STAT_TRAN] += pDevice->iterationNumber; } else if (pDevice->poissonOnly) { pDevice->pStats->loadTime[STAT_SETUP] += loadTime; pDevice->pStats->factorTime[STAT_SETUP] += factorTime; pDevice->pStats->solveTime[STAT_SETUP] += solveTime; pDevice->pStats->updateTime[STAT_SETUP] += updateTime; pDevice->pStats->checkTime[STAT_SETUP] += checkTime; pDevice->pStats->numIters[STAT_SETUP] += pDevice->iterationNumber; } else { pDevice->pStats->loadTime[STAT_DC] += loadTime; pDevice->pStats->factorTime[STAT_DC] += factorTime; pDevice->pStats->solveTime[STAT_DC] += solveTime; pDevice->pStats->updateTime[STAT_DC] += updateTime; pDevice->pStats->checkTime[STAT_DC] += checkTime; pDevice->pStats->numIters[STAT_DC] += pDevice->iterationNumber; } if (debug) { if (!tranAnalysis) { pDevice->rhsNorm = maxNorm(rhs, size); fprintf(stdout, "%7d %11.4e%s\n", pDevice->iterationNumber, pDevice->rhsNorm, negConc ? " negative conc in solution" : ""); } if (pDevice->converged) { if (!pDevice->poissonOnly) { poissNorm = contNorm = 0.0; rhs[0] = 0.0; /* Make sure garbage entry is clear. */ for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; for (index = 0; index <= 3; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; poissNorm = MAX(poissNorm,ABS(rhs[pNode->psiEqn])); contNorm = MAX(contNorm,ABS(rhs[pNode->nEqn])); contNorm = MAX(contNorm,ABS(rhs[pNode->pEqn])); } } } fprintf(stdout, "Residual: %11.4e C/um poisson, %11.4e A/um continuity\n", poissNorm * EpsNorm * VNorm * 1e-4, contNorm * JNorm * LNorm * 1e-4); } else { fprintf(stdout, "Residual: %11.4e C/um poisson\n", pDevice->rhsNorm * EpsNorm * VNorm * 1e-4); } } } } BOOLEAN TWOdeltaConverged(TWOdevice *pDevice) { /* This function returns a TRUE if converged else a FALSE. */ int index; BOOLEAN converged = TRUE; double xOld, xNew, tol; for (index = 1; index <= pDevice->numEqns; index++) { xOld = pDevice->dcSolution[index]; xNew = xOld + pDevice->dcDeltaSolution[index]; tol = pDevice->abstol + pDevice->reltol * MAX(ABS(xOld), ABS(xNew)); if (ABS(xOld - xNew) > tol) { converged = FALSE; break; } } return (converged); } BOOLEAN TWOdeviceConverged(TWOdevice *pDevice) { int index, eIndex; BOOLEAN converged = TRUE; double *solution = pDevice->dcSolution; TWOnode *pNode; TWOelem *pElem; double startTime; /* If the update is sufficiently small, and the carrier concentrations * are all positive, then return TRUE, else return FALSE. */ /* CHECK CONVERGENCE */ startTime = SPfrontEnd->IFseconds(); if ((converged = TWOdeltaConverged(pDevice)) == TRUE) { for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; for (index = 0; index <= 3; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; if (pNode->nEqn != 0 && solution[pNode->nEqn] < 0.0) { converged = FALSE; solution[pNode->nEqn] = pNode->nConc = 0.0; } if (pNode->pEqn != 0 && solution[pNode->pEqn] < 0.0) { converged = FALSE; solution[pNode->pEqn] = pNode->pConc = 0.0; } } } } } pDevice->pStats->checkTime[STAT_TRAN] += SPfrontEnd->IFseconds() - startTime; return (converged); } void TWOresetJacobian(TWOdevice *pDevice) { int error; if (!OneCarrier) { TWO_jacLoad(pDevice); } else if (OneCarrier == N_TYPE) { TWONjacLoad(pDevice); } else if (OneCarrier == P_TYPE) { TWOPjacLoad(pDevice); } else { printf("TWOresetJacobian: unknown carrier type\n"); exit(-1); } error = spFactor(pDevice->matrix); if (foundError(error)) { exit(-1); } } /* * Compute the device state assuming charge neutrality exists everywhere in * the device. In insulators, where there is no charge, assign the potential * at half the insulator band gap (refPsi). */ void TWOstoreNeutralGuess(TWOdevice *pDevice) { int nIndex, eIndex; TWOelem *pElem; TWOnode *pNode; double nie, conc, absConc, refPsi, psi, ni, pi, sign; /* assign the initial guess for Poisson's equation */ for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; refPsi = pElem->matlInfo->refPsi; if (pElem->elemType == INSULATOR) { for (nIndex = 0; nIndex <= 3; nIndex++) { if (pElem->evalNodes[nIndex]) { pNode = pElem->pNodes[nIndex]; if (pNode->nodeType == CONTACT) { /* * a metal contact to insulator domain so use work function * difference as the value of psi */ pNode->psi = RefPsi - pNode->eaff; } else { pNode->psi = refPsi; } } } } if (pElem->elemType == SEMICON) { for (nIndex = 0; nIndex <= 3; nIndex++) { if (pElem->evalNodes[nIndex]) { pNode = pElem->pNodes[nIndex]; /* silicon nodes */ nie = pNode->nie; conc = pNode->netConc / pNode->nie; psi = 0.0; ni = nie; pi = nie; sign = SGN(conc); absConc = ABS(conc); if (conc != 0.0) { psi = sign * log(0.5 * absConc + sqrt(1.0 + 0.25 * absConc * absConc)); ni = nie * exp(psi); pi = nie * exp(-psi); } pNode->psi = refPsi + psi; pNode->nConc = ni; pNode->pConc = pi; /* store the initial guess in the dc solution vector */ if (pNode->nodeType != CONTACT) { pDevice->dcSolution[pNode->poiEqn] = pNode->psi; } } } } } } /* computing the equilibrium solution; solution of Poisson's eqn */ /* the solution is used as an initial starting point for bias conditions */ void TWOequilSolve(TWOdevice *pDevice) { BOOLEAN newSolver = FALSE; int error; int nIndex, eIndex; TWOelem *pElem; TWOnode *pNode; double startTime, setupTime, miscTime; setupTime = miscTime = 0.0; /* SETUP */ startTime = SPfrontEnd->IFseconds(); switch (pDevice->solverType) { case SLV_SMSIG: case SLV_BIAS: /* free up memory allocated for the bias solution */ FREE(pDevice->dcSolution); FREE(pDevice->dcDeltaSolution); FREE(pDevice->copiedSolution); FREE(pDevice->rhs); FREE(pDevice->rhsImag); spDestroy(pDevice->matrix); case SLV_NONE: pDevice->poissonOnly = TRUE; pDevice->numEqns = pDevice->dimEquil - 1; XCALLOC(pDevice->dcSolution, double, pDevice->dimEquil); XCALLOC(pDevice->dcDeltaSolution, double, pDevice->dimEquil); XCALLOC(pDevice->copiedSolution, double, pDevice->dimEquil); XCALLOC(pDevice->rhs, double, pDevice->dimEquil); pDevice->matrix = spCreate(pDevice->numEqns, 0, &error); if (error == spNO_MEMORY) { printf("TWOequilSolve: Out of Memory\n"); exit(-1); } newSolver = TRUE; spSetReal(pDevice->matrix); TWOQjacBuild(pDevice); pDevice->numOrigEquil = spElementCount(pDevice->matrix); pDevice->numFillEquil = 0; case SLV_EQUIL: pDevice->solverType = SLV_EQUIL; break; default: fprintf(stderr, "Panic: Unknown solver type in equil solution.\n"); exit(-1); break; } TWOstoreNeutralGuess(pDevice); setupTime += SPfrontEnd->IFseconds() - startTime; /* SOLVE */ TWOdcSolve(pDevice, MaxIterations, newSolver, FALSE, NULL); /* MISCELLANEOUS */ startTime = SPfrontEnd->IFseconds(); if (newSolver) { pDevice->numFillEquil = spFillinCount(pDevice->matrix); } if (pDevice->converged) { TWOQcommonTerms(pDevice); /* save equilibrium potential */ for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; for (nIndex = 0; nIndex <= 3; nIndex++) { if (pElem->evalNodes[nIndex]) { pNode = pElem->pNodes[nIndex]; pNode->psi0 = pNode->psi; } } } } else { printf("TWOequilSolve: No Convergence\n"); } miscTime += SPfrontEnd->IFseconds() - startTime; pDevice->pStats->setupTime[STAT_SETUP] += setupTime; pDevice->pStats->miscTime[STAT_SETUP] += miscTime; } /* compute the solution under an applied bias */ /* the equilibrium solution is taken as an initial guess */ void TWObiasSolve(TWOdevice *pDevice, int iterationLimit, BOOLEAN tranAnalysis, TWOtranInfo *info) { BOOLEAN newSolver = FALSE; int error; int index, eIndex; TWOelem *pElem; TWOnode *pNode; double refPsi; double startTime, setupTime, miscTime; setupTime = miscTime = 0.0; /* SETUP */ startTime = SPfrontEnd->IFseconds(); switch (pDevice->solverType) { case SLV_EQUIL: /* free up the vectors allocated in the equilibrium solution */ FREE(pDevice->dcSolution); FREE(pDevice->dcDeltaSolution); FREE(pDevice->copiedSolution); FREE(pDevice->rhs); spDestroy(pDevice->matrix); case SLV_NONE: pDevice->poissonOnly = FALSE; pDevice->numEqns = pDevice->dimBias - 1; XCALLOC(pDevice->dcSolution, double, pDevice->dimBias); XCALLOC(pDevice->dcDeltaSolution, double, pDevice->dimBias); XCALLOC(pDevice->copiedSolution, double, pDevice->dimBias); XCALLOC(pDevice->rhs, double, pDevice->dimBias); XCALLOC(pDevice->rhsImag, double, pDevice->dimBias); pDevice->matrix = spCreate(pDevice->numEqns, 1, &error); if (error == spNO_MEMORY) { printf("TWObiasSolve: Out of Memory\n"); exit(-1); } newSolver = TRUE; if (!OneCarrier) { TWO_jacBuild(pDevice); } else if (OneCarrier == N_TYPE) { TWONjacBuild(pDevice); } else if (OneCarrier == P_TYPE) { TWOPjacBuild(pDevice); } pDevice->numOrigBias = spElementCount(pDevice->matrix); pDevice->numFillBias = 0; TWOstoreInitialGuess(pDevice); case SLV_SMSIG: spSetReal(pDevice->matrix); case SLV_BIAS: pDevice->solverType = SLV_BIAS; break; default: fprintf(stderr, "Panic: Unknown solver type in bias solution.\n"); exit(-1); break; } setupTime += SPfrontEnd->IFseconds() - startTime; /* SOLVE */ TWOdcSolve(pDevice, iterationLimit, newSolver, tranAnalysis, info); /* MISCELLANEOUS */ startTime = SPfrontEnd->IFseconds(); if (newSolver) { pDevice->numFillBias = spFillinCount(pDevice->matrix); } if ((!pDevice->converged) && iterationLimit > 1) { printf("TWObiasSolve: No Convergence\n"); } else if (pDevice->converged) { /* update the nodal quantities */ for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; refPsi = pElem->matlInfo->refPsi; for (index = 0; index <= 3; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; if (pNode->nodeType != CONTACT) { pNode->psi = pDevice->dcSolution[pNode->psiEqn]; if (pElem->elemType == SEMICON) { if (!OneCarrier) { pNode->nConc = pDevice->dcSolution[pNode->nEqn]; pNode->pConc = pDevice->dcSolution[pNode->pEqn]; } else if (OneCarrier == N_TYPE) { pNode->nConc = pDevice->dcSolution[pNode->nEqn]; pNode->pConc = pNode->nie * exp(-pNode->psi + refPsi); } else if (OneCarrier == P_TYPE) { pNode->pConc = pDevice->dcSolution[pNode->pEqn]; pNode->nConc = pNode->nie * exp(pNode->psi - refPsi); } } } } } } /* update the current terms */ if (!OneCarrier) { TWO_commonTerms(pDevice, FALSE, tranAnalysis, info); } else if (OneCarrier == N_TYPE) { TWONcommonTerms(pDevice, FALSE, tranAnalysis, info); } else if (OneCarrier == P_TYPE) { TWOPcommonTerms(pDevice, FALSE, tranAnalysis, info); } } else if (iterationLimit <= 1) { for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; refPsi = pElem->matlInfo->refPsi; for (index = 0; index <= 3; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; if (pNode->nodeType != CONTACT) { pNode->psi = pDevice->dcSolution[pNode->psiEqn]; pDevice->devState0 [pNode->nodePsi] = pNode->psi; if (pElem->elemType == SEMICON) { if (!OneCarrier) { pNode->nConc = pDevice->dcSolution[pNode->nEqn]; pNode->pConc = pDevice->dcSolution[pNode->pEqn]; } else if (OneCarrier == N_TYPE) { pNode->nConc = pDevice->dcSolution[pNode->nEqn]; pNode->pConc = pNode->nie * exp(-pNode->psi + refPsi); } else if (OneCarrier == P_TYPE) { pNode->pConc = pDevice->dcSolution[pNode->pEqn]; pNode->nConc = pNode->nie * exp(pNode->psi - refPsi); } pDevice->devState0 [pNode->nodeN] = pNode->nConc; pDevice->devState0 [pNode->nodeP] = pNode->pConc; } } } } } } miscTime += SPfrontEnd->IFseconds() - startTime; if (tranAnalysis) { pDevice->pStats->setupTime[STAT_TRAN] += setupTime; pDevice->pStats->miscTime[STAT_TRAN] += miscTime; } else { pDevice->pStats->setupTime[STAT_DC] += setupTime; pDevice->pStats->miscTime[STAT_DC] += miscTime; } } /* Copy the device's equilibrium state into the solution vector. */ void TWOstoreEquilibGuess(TWOdevice *pDevice) { int nIndex, eIndex; double *solution = pDevice->dcSolution; double refPsi; TWOelem *pElem; TWOnode *pNode; for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; refPsi = pElem->matlInfo->refPsi; for (nIndex = 0; nIndex <= 3; nIndex++) { if (pElem->evalNodes[nIndex]) { pNode = pElem->pNodes[nIndex]; if (pNode->nodeType != CONTACT) { pDevice->dcSolution[pNode->psiEqn] = pNode->psi0; if (pElem->elemType == SEMICON) { if (!OneCarrier) { solution[pNode->nEqn] = pNode->nie * exp(pNode->psi0 - refPsi); solution[pNode->pEqn] = pNode->nie * exp(-pNode->psi0 + refPsi); } else if (OneCarrier == N_TYPE) { solution[pNode->nEqn] = pNode->nie * exp(pNode->psi0 - refPsi); } else if (OneCarrier == P_TYPE) { solution[pNode->pEqn] = pNode->nie * exp(-pNode->psi0 + refPsi); } } } } } } } /* Copy the device's internal state into the solution vector. */ void TWOstoreInitialGuess(TWOdevice *pDevice) { int nIndex, eIndex; double *solution = pDevice->dcSolution; TWOelem *pElem; TWOnode *pNode; for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; for (nIndex = 0; nIndex <= 3; nIndex++) { if (pElem->evalNodes[nIndex]) { pNode = pElem->pNodes[nIndex]; if (pNode->nodeType != CONTACT) { solution[pNode->psiEqn] = pNode->psi; if (pElem->elemType == SEMICON) { if (!OneCarrier) { solution[pNode->nEqn] = pNode->nConc; solution[pNode->pEqn] = pNode->pConc; } else if (OneCarrier == N_TYPE) { solution[pNode->nEqn] = pNode->nConc; } else if (OneCarrier == P_TYPE) { solution[pNode->pEqn] = pNode->pConc; } } } } } } } /* * function computeNewDelta computes an acceptable delta */ void oldTWOnewDelta(TWOdevice *pDevice, BOOLEAN tranAnalysis, TWOtranInfo *info) { int index; double newNorm, fib, lambda, fibn, fibp; BOOLEAN acceptable = FALSE; lambda = 1.0; fibn = 1.0; fibp = 1.0; /* * copy the contents of dcSolution into copiedSolution and modify * dcSolution by adding the deltaSolution */ for (index = 1; index <= pDevice->numEqns; ++index) { pDevice->copiedSolution[index] = pDevice->dcSolution[index]; pDevice->dcSolution[index] += pDevice->dcDeltaSolution[index]; } /* compute L2 norm of the deltaX vector */ pDevice->rhsNorm = l2Norm(pDevice->dcDeltaSolution, pDevice->numEqns); if (pDevice->poissonOnly) { TWOQrhsLoad(pDevice); } else if (!OneCarrier) { TWO_rhsLoad(pDevice, tranAnalysis, info); } else if (OneCarrier == N_TYPE) { TWONrhsLoad(pDevice, tranAnalysis, info); } else if (OneCarrier == P_TYPE) { TWOPrhsLoad(pDevice, tranAnalysis, info); } newNorm = TWOnuNorm(pDevice); if (newNorm <= pDevice->rhsNorm) { acceptable = TRUE; } else { /* chop the step size so that deltax is acceptable */ for (; !acceptable;) { fib = fibp; fibp = fibn; fibn += fib; lambda *= (fibp / fibn); for (index = 1; index <= pDevice->numEqns; index++) { pDevice->dcSolution[index] = pDevice->copiedSolution[index] + lambda * pDevice->dcDeltaSolution[index]; } if (pDevice->poissonOnly) { TWOQrhsLoad(pDevice); } else if (!OneCarrier) { TWO_rhsLoad(pDevice, tranAnalysis, info); } else if (OneCarrier == N_TYPE) { TWONrhsLoad(pDevice, tranAnalysis, info); } else if (OneCarrier == P_TYPE) { TWOPrhsLoad(pDevice, tranAnalysis, info); } newNorm = TWOnuNorm(pDevice); if (newNorm <= pDevice->rhsNorm) { acceptable = TRUE; } } } /* restore the previous dcSolution and the new deltaSolution */ pDevice->rhsNorm = newNorm; for (index = 1; index <= pDevice->numEqns; index++) { pDevice->dcSolution[index] = pDevice->copiedSolution[index]; pDevice->dcDeltaSolution[index] *= lambda; } } int TWOnewDelta(TWOdevice *pDevice, BOOLEAN tranAnalysis, TWOtranInfo *info) { int index, iterNum = 0; double newNorm; double fib, lambda, fibn, fibp; BOOLEAN acceptable = FALSE, error = FALSE; lambda = 1.0; fibn = 1.0; fibp = 1.0; /* * copy the contents of dcSolution into copiedSolution and modify * dcSolution by adding the deltaSolution */ for (index = 1; index <= pDevice->numEqns; ++index) { pDevice->copiedSolution[index] = pDevice->dcSolution[index]; pDevice->dcSolution[index] += pDevice->dcDeltaSolution[index]; } if (pDevice->poissonOnly) { TWOQrhsLoad(pDevice); } else if (!OneCarrier) { TWO_rhsLoad(pDevice, tranAnalysis, info); } else if (OneCarrier == N_TYPE) { TWONrhsLoad(pDevice, tranAnalysis, info); } else if (OneCarrier == P_TYPE) { TWOPrhsLoad(pDevice, tranAnalysis, info); } newNorm = maxNorm(pDevice->rhs, pDevice->numEqns); if (pDevice->rhsNorm <= pDevice->abstol) { lambda = 0.0; newNorm = pDevice->rhsNorm; } else if (newNorm < pDevice->rhsNorm) { acceptable = TRUE; } else { /* chop the step size so that deltax is acceptable */ if (TWOdcDebug) { fprintf(stdout, " %11.4e %11.4e\n", newNorm, lambda); } while (!acceptable) { iterNum++; if (iterNum > NORM_RED_MAXITERS) { error = TRUE; lambda = 0.0; /* Don't break out until after we've reset the device. */ } fib = fibp; fibp = fibn; fibn += fib; lambda *= (fibp / fibn); for (index = 1; index <= pDevice->numEqns; index++) { pDevice->dcSolution[index] = pDevice->copiedSolution[index] + lambda * pDevice->dcDeltaSolution[index]; } if (pDevice->poissonOnly) { TWOQrhsLoad(pDevice); } else if (!OneCarrier) { TWO_rhsLoad(pDevice, tranAnalysis, info); } else if (OneCarrier == N_TYPE) { TWONrhsLoad(pDevice, tranAnalysis, info); } else if (OneCarrier == P_TYPE) { TWOPrhsLoad(pDevice, tranAnalysis, info); } newNorm = maxNorm(pDevice->rhs, pDevice->numEqns); if (error) { break; } if (newNorm <= pDevice->rhsNorm) { acceptable = TRUE; } if (TWOdcDebug) { fprintf(stdout, " %11.4e %11.4e\n", newNorm, lambda); } } } /* restore the previous dcSolution and the new deltaSolution */ pDevice->rhsNorm = newNorm; for (index = 1; index <= pDevice->numEqns; index++) { pDevice->dcSolution[index] = pDevice->copiedSolution[index]; pDevice->dcDeltaSolution[index] *= lambda; } return (error); } /* Predict the values of the internal variables at the next timepoint. */ /* Needed for Predictor-Corrector LTE estimation */ void TWOpredict(TWOdevice *pDevice, TWOtranInfo *info) { int nIndex, eIndex; TWOnode *pNode; TWOelem *pElem; double startTime, miscTime = 0.0; /* TRANSIENT MISC */ startTime = SPfrontEnd->IFseconds(); for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; for (nIndex = 0; nIndex <= 3; nIndex++) { if (pElem->evalNodes[nIndex]) { pNode = pElem->pNodes[nIndex]; pNode->psi = pDevice->devState1 [pNode->nodePsi]; if ((pElem->elemType == SEMICON) && (pNode->nodeType != CONTACT)) { if (!OneCarrier) { pNode->nPred = predict(pDevice->devStates, info, pNode->nodeN); pNode->pPred = predict(pDevice->devStates, info, pNode->nodeP); } else if (OneCarrier == N_TYPE) { pNode->nPred = predict(pDevice->devStates, info, pNode->nodeN); pNode->pPred = pDevice->devState1 [pNode->nodeP]; } else if (OneCarrier == P_TYPE) { pNode->pPred = predict(pDevice->devStates, info, pNode->nodeP); pNode->nPred = pDevice->devState1 [pNode->nodeN]; } pNode->nConc = pNode->nPred; pNode->pConc = pNode->pPred; } } } } miscTime += SPfrontEnd->IFseconds() - startTime; pDevice->pStats->miscTime[STAT_TRAN] += miscTime; } /* Estimate the device's overall truncation error. */ double TWOtrunc(TWOdevice *pDevice, TWOtranInfo *info, double delta) { int nIndex, eIndex; TWOelem *pElem; TWOnode *pNode; double tolN, tolP, lte, relError, temp; double lteCoeff = info->lteCoeff; double mult = 10.0; double reltol; double startTime, lteTime = 0.0; /* TRANSIENT LTE */ startTime = SPfrontEnd->IFseconds(); relError = 0.0; reltol = pDevice->reltol * mult; /* need to get the predictor for the current order */ /* the scheme currently used is very dumb. need to fix later */ computePredCoeff(info->method, info->order, info->predCoeff, info->delta); for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; for (nIndex = 0; nIndex <= 3; nIndex++) { if (pElem->evalNodes[nIndex]) { pNode = pElem->pNodes[nIndex]; if ((pElem->elemType == SEMICON) && (pNode->nodeType != CONTACT)) { if (!OneCarrier) { tolN = pDevice->abstol + reltol * ABS(pNode->nConc); tolP = pDevice->abstol + reltol * ABS(pNode->pConc); pNode->nPred = predict(pDevice->devStates, info, pNode->nodeN); pNode->pPred = predict(pDevice->devStates, info, pNode->nodeP); lte = lteCoeff * (pNode->nConc - pNode->nPred); temp = lte / tolN; relError += temp * temp; lte = lteCoeff * (pNode->pConc - pNode->pPred); temp = lte / tolP; relError += temp * temp; } else if (OneCarrier == N_TYPE) { tolN = pDevice->abstol + reltol * ABS(pNode->nConc); pNode->nPred = predict(pDevice->devStates, info, pNode->nodeN); lte = lteCoeff * (pNode->nConc - pNode->nPred); temp = lte / tolN; relError += temp * temp; } else if (OneCarrier == P_TYPE) { tolP = pDevice->abstol + reltol * ABS(pNode->pConc); pNode->pPred = predict(pDevice->devStates, info, pNode->nodeP); lte = lteCoeff * (pNode->pConc - pNode->pPred); temp = lte / tolP; relError += temp * temp; } } } } } relError = MAX(pDevice->abstol, relError); /* make sure it is non zero */ /* the total relative error has been calculated norm-2 squared */ relError = sqrt(relError / pDevice->numEqns); /* depending on the order of the integration method compute new delta */ temp = delta / pow(relError, 1.0 / (info->order + 1)); lteTime += SPfrontEnd->IFseconds() - startTime; pDevice->pStats->lteTime += lteTime; /* return the new delta (stored as temp) */ return (temp); } /* Save info from state table into the internal state. */ void TWOsaveState(TWOdevice *pDevice) { int nIndex, eIndex; TWOnode *pNode; TWOelem *pElem; for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; for (nIndex = 0; nIndex <= 3; nIndex++) { if (pElem->evalNodes[nIndex]) { pNode = pElem->pNodes[nIndex]; pNode->psi = pDevice->devState1 [pNode->nodePsi]; if ((pElem->elemType == SEMICON) && (pNode->nodeType != CONTACT)) { pNode->nConc = pDevice->devState1 [pNode->nodeN]; pNode->pConc = pDevice->devState1 [pNode->nodeP]; } } } } } /* * A function that checks convergence based on the convergence of the quasi * Fermi levels. This should be better since we are looking at potentials in * all (psi, phin, phip) */ BOOLEAN TWOpsiDeltaConverged(TWOdevice *pDevice) { int index, nIndex, eIndex; TWOnode *pNode; TWOelem *pElem; double xOld, xNew, xDelta, tol; double psi, newPsi, nConc, pConc, newN, newP; double phiN, phiP, newPhiN, newPhiP; BOOLEAN converged = TRUE; /* equilibrium solution */ if (pDevice->poissonOnly) { for (index = 1; index <= pDevice->numEqns; index++) { xOld = pDevice->dcSolution[index]; xDelta = pDevice->dcDeltaSolution[index]; xNew = xOld + xDelta; tol = pDevice->abstol + pDevice->reltol * MAX(ABS(xOld), ABS(xNew)); if (ABS(xDelta) > tol) { converged = FALSE; goto done; } } return (converged); } /* bias solution. check convergence on psi, phin, phip */ for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; for (nIndex = 0; nIndex <= 3; nIndex++) { if (pElem->evalNodes[nIndex]) { pNode = pElem->pNodes[nIndex]; if (pNode->nodeType != CONTACT) { /* check convergence on psi */ xOld = pDevice->dcSolution[pNode->psiEqn]; xDelta = pDevice->dcDeltaSolution[pNode->psiEqn]; xNew = xOld + xDelta; tol = pDevice->abstol + pDevice->reltol * MAX(ABS(xOld), ABS(xNew)); if (ABS(xDelta) > tol) { converged = FALSE; goto done; } } /* check convergence on phin and phip */ if ((pElem->elemType == SEMICON) && (pNode->nodeType != CONTACT)) { psi = pDevice->dcSolution[pNode->psiEqn]; nConc = pDevice->dcSolution[pNode->nEqn]; pConc = pDevice->dcSolution[pNode->pEqn]; newPsi = psi + pDevice->dcDeltaSolution[pNode->psiEqn]; newN = nConc + pDevice->dcDeltaSolution[pNode->nEqn]; newP = pConc + pDevice->dcDeltaSolution[pNode->pEqn]; phiN = psi - log(nConc / pNode->nie); phiP = psi + log(pConc / pNode->nie); newPhiN = newPsi - log(newN / pNode->nie); newPhiP = newPsi + log(newP / pNode->nie); tol = pDevice->abstol + pDevice->reltol * MAX(ABS(phiN), ABS(newPhiN)); if (ABS(newPhiN - phiN) > tol) { converged = FALSE; goto done; } tol = pDevice->abstol + pDevice->reltol * MAX(ABS(phiP), ABS(newPhiP)); if (ABS(newPhiP - phiP) > tol) { converged = FALSE; goto done; } } } } } done: return (converged); } /* Function to compute Nu norm of the rhs vector. */ /* nu-Norm calculation based upon work done at Stanford. */ double TWOnuNorm(TWOdevice *pDevice) { double norm = 0.0; double temp; int index; /* the LU Decomposed matrix is available. use it to calculate x */ spSolve(pDevice->matrix, pDevice->rhs, pDevice->rhsImag, NULL, NULL); /* the solution is in the rhsImag vector */ /* compute L2-norm of the rhsImag vector */ for (index = 1; index <= pDevice->numEqns; index++) { temp = pDevice->rhsImag[index]; norm += temp * temp; } norm = sqrt(norm); return (norm); } /* * Check for numerical errors in the Jacobian. Useful debugging aid when new * models are being incorporated. */ void TWOjacCheck(TWOdevice *pDevice, BOOLEAN tranAnalysis, TWOtranInfo *info) { int index, rIndex; double del, diff, tol, *dptr; if (TWOjacDebug) { if (!OneCarrier) { TWO_sysLoad(pDevice, tranAnalysis, info); } else if (OneCarrier == N_TYPE) { TWONsysLoad(pDevice, tranAnalysis, info); } else if (OneCarrier == P_TYPE) { TWOPsysLoad(pDevice, tranAnalysis, info); } /* * spPrint( pDevice->matrix, 0, 1, 1 ); */ pDevice->rhsNorm = maxNorm(pDevice->rhs, pDevice->numEqns); for (index = 1; index <= pDevice->numEqns; index++) { if (1e3 * ABS(pDevice->rhs[index]) > pDevice->rhsNorm) { fprintf(stderr, "eqn %d: res %11.4e, norm %11.4e\n", index, pDevice->rhs[index], pDevice->rhsNorm); } } for (index = 1; index <= pDevice->numEqns; index++) { pDevice->rhsImag[index] = pDevice->rhs[index]; } for (index = 1; index <= pDevice->numEqns; index++) { pDevice->copiedSolution[index] = pDevice->dcSolution[index]; del = 1e-4 * pDevice->abstol + 1e-6 * ABS(pDevice->dcSolution[index]); pDevice->dcSolution[index] += del; if (!OneCarrier) { TWO_rhsLoad(pDevice, tranAnalysis, info); } else if (OneCarrier == N_TYPE) { TWONrhsLoad(pDevice, tranAnalysis, info); } else if (OneCarrier == P_TYPE) { TWOPrhsLoad(pDevice, tranAnalysis, info); } pDevice->dcSolution[index] = pDevice->copiedSolution[index]; for (rIndex = 1; rIndex <= pDevice->numEqns; rIndex++) { diff = (pDevice->rhsImag[rIndex] - pDevice->rhs[rIndex]) / del; dptr = spFindElement(pDevice->matrix, rIndex, index); if (dptr != NULL) { tol = (1e-4 * pDevice->abstol) + (1e-2 * MAX(ABS(diff), ABS(*dptr))); if ((diff != 0.0) && (ABS(diff - *dptr) > tol)) { fprintf(stderr, "Mismatch[%d][%d]: FD = %11.4e, AJ = %11.4e\n\t FD-AJ = %11.4e vs. %11.4e\n", rIndex, index, diff, *dptr, ABS(diff - *dptr), tol); } } else { if (diff != 0.0) { fprintf(stderr, "Missing [%d][%d]: FD = %11.4e, AJ = 0.0\n", rIndex, index, diff); } } } } } } tmpk8ny_4pz/src/ciderlib/twod/twosetup.c0000644000175000017500000002247113546075722020545 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ /********** Two-Dimensional Numerical Device Setup Routines **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numconst.h" #include "ngspice/numenum.h" #include "ngspice/twomesh.h" #include "ngspice/twodev.h" #include "ngspice/carddefs.h" /* XXX Not really modular if we need this. */ #include "twoddefs.h" #include "twodext.h" #include "ngspice/cidersupt.h" /* compute node parameters */ void TWOsetup(TWOdevice *pDevice) { double temp1, deltaEg, avgConc, totalConc, absNetConc; double ncv0, dBand, dNie, psiBand[4]; double *xScale = pDevice->xScale; double *yScale = pDevice->yScale; int index, eIndex; int numContactNodes; TWOnode *pNode; TWOelem *pElem; TWOedge *pEdge; TWOcontact *pC; TWOmaterial *info; for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; info = pElem->matlInfo; pElem->dx = xScale[ pElem->pTRNode->nodeI ]-xScale[ pElem->pTLNode->nodeI ]; pElem->dy = yScale[ pElem->pBLNode->nodeJ ]-yScale[ pElem->pTLNode->nodeJ ]; pElem->epsRel = info->eps; if ( pElem->elemType == INSULATOR ) { for ( index = 0; index <= 3; index++ ) { if ( pElem->evalNodes[ index ] ) { pNode = pElem->pNodes[ index ]; if (pNode->nodeType == CONTACT) { pNode->eaff = PHI_METAL; pNode->eg = 0.0; } else { pNode->eaff = info->affin; pNode->eg = info->eg0; } } } } else if ( pElem->elemType == SEMICON ) { ncv0 = sqrt( info->nc0 ) * sqrt( info->nv0 ); for ( index = 0; index <= 3; index++ ) { if ( pElem->evalNodes[ index ] ) { pNode = pElem->pNodes[ index ]; /* Narrowing of Energy-Band Gap */ if (BandGapNarrowing) { absNetConc = ABS( pNode->netConc ); if ( pNode->netConc > 0.0 ) { temp1 = log( absNetConc / info->nrefBGN[ELEC] ); deltaEg = - info->dEgDn[ELEC] * (temp1 + sqrt(temp1*temp1 + 0.5)); pNode->eg = info->eg0 + deltaEg; } else if ( pNode->netConc < 0.0 ) { temp1 = log( absNetConc / info->nrefBGN[HOLE] ); deltaEg = - info->dEgDn[HOLE] * (temp1 + sqrt(temp1*temp1 + 0.5)); pNode->eg = info->eg0 + deltaEg; } else { pNode->eg = info->eg0; } } else { pNode->eg = info->eg0; } pNode->nie = ncv0 * exp ( -0.5 * pNode->eg / Vt ); pNode->eaff = info->affin; /* Save band structure parameter. */ psiBand[ index ] = - info->refPsi; /* Ionized-Impurity-Scattering Reduction of Carrier Lifetime */ if (ConcDepLifetime) { totalConc = pNode->totalConc; temp1 = 1.0 / ( 1.0 + totalConc / info->nrefSRH[ELEC] ); pNode->tn = info->tau0[ELEC] * temp1; temp1 = 1.0 / ( 1.0 + totalConc / info->nrefSRH[HOLE] ); pNode->tp = info->tau0[HOLE] * temp1; } else { pNode->tn = info->tau0[ELEC]; pNode->tp = info->tau0[HOLE]; } } } for ( index = 0; index <= 3; index++ ) { if ( pElem->evalEdges[ index ] ) { pEdge = pElem->pEdges[ index ]; /* Fixed Interface Charge */ pEdge->qf = 0.0; /* Variable Band Built-In Potential */ if ( index <= 1 ) { dBand = psiBand[index+1] - psiBand[index]; dNie = log( pElem->pNodes[index+1]->nie / pElem->pNodes[index]->nie ); pEdge->dCBand = dBand + dNie; pEdge->dVBand = - dBand + dNie; } else { dBand = psiBand[index] - psiBand[(index+1)%4]; dNie = log( pElem->pNodes[index]->nie / pElem->pNodes[(index+1)%4]->nie ); pEdge->dCBand = dBand + dNie; pEdge->dVBand = - dBand + dNie; } } } /* Evaluate conc.-dep. mobility. */ /* Average conc of all four nodes. */ avgConc = 0.25*(pElem->pTLNode->totalConc + pElem->pTRNode->totalConc + pElem->pBRNode->totalConc + pElem->pBLNode->totalConc); MOBconcDep( info, avgConc, &pElem->mun0, &pElem->mup0 ); } } for ( pC = pDevice->pFirstContact; pC != NULL; pC = pC->next ) { numContactNodes = pC->numNodes; for ( index = 0; index < numContactNodes; index++ ) { pNode = pC->pNodes[ index ]; pNode->eaff = pC->workf; /* Affinity aka work function */ } } } /* Transfer BC info from card to nodes and edges. */ static void TWOcopyBCinfo(TWOdevice *pDevice, TWOelem *pElem, BDRYcard *card, int index ) { TWOnode *pNode; TWOelem *pNElem; TWOedge *pEdge; TWOmaterial *info; TWOchannel *newChannel; int eIndex, nIndex; int direction = index%2; double length, area, width, layerWidth; double dop, na = 0.0, nd = 0.0; /* First add fixed charge. */ pEdge = pElem->pEdges[index]; pEdge->qf += card->BDRYqf; /* Now add surface recombination. */ if ( direction == 0 ) { /* Horizontal Edge */ length = 0.5 * pElem->dx; } else { length = 0.5 * pElem->dy; } for (nIndex = 0; nIndex <= 1; nIndex++) { pNode = pElem->pNodes[ (index+nIndex)%4 ]; /* Compute semiconductor area around this node. */ area = 0.0; for (eIndex = 0; eIndex <= 3; eIndex++) { pNElem = pNode->pElems[eIndex]; if (pNElem != NULL && pElem->elemType == SEMICON) { area += 0.25 * pElem->dx * pElem->dy; } } if (card->BDRYsnGiven) { pNode->tn = pNode->tn / (1.0 + ((card->BDRYsn * TNorm)*length*pNode->tn) / area); } if (card->BDRYspGiven) { pNode->tp = pNode->tp / (1.0 + ((card->BDRYsp * TNorm)*length*pNode->tp) / area); } /* Compute doping just in case we need it later. */ na += 0.5 * pNode->na; nd += 0.5 * pNode->nd; } /* Finally do surface layer. */ pNElem = pElem->pElems[index]; if (card->BDRYlayerGiven && SurfaceMobility && pElem->elemType == SEMICON && pElem->channel == 0 && pNElem && pNElem->elemType == INSULATOR && pElem->pNodes[index]->nodeType != CONTACT && pElem->pNodes[(index+1)%4]->nodeType != CONTACT ) { /* Find the layer width. */ layerWidth = card->BDRYlayer; if (card->BDRYlayer <= 0.0) { /* Need to compute extrinsic Debye length */ info = pElem->matlInfo; dop = MAX(MAX(na,nd),info->ni0); layerWidth = sqrt((Vt * info->eps) / (CHARGE * dop)); } /* Add a channel to the list of channels. */ XCALLOC( newChannel, TWOchannel, 1); newChannel->pSeed = pElem; newChannel->pNElem = pNElem; newChannel->type = index; if (pDevice->pChannel != NULL) { newChannel->id = pDevice->pChannel->id + 1; newChannel->next = pDevice->pChannel; } else { newChannel->id = 1; newChannel->next = NULL; } pDevice->pChannel = newChannel; /* Now add elements to channel until we're more than layerWidth away * from the interface. If we encounter a missing element or an * element that's already part of a different channel, quit. * The seed element is at the surface. */ width = 0.0; eIndex = (index+2)%4; pElem->surface = TRUE; while (width < layerWidth && pElem && pElem->channel == 0) { pElem->channel = newChannel->id; pElem->direction = direction; /* * Surface mobility is normally concentration-independent in * the default model. Overwrite concentration-dependent value * calculated earlier unless matching of low-field surface * and bulk mobilities is requested. */ if (!MatchingMobility) { pElem->mun0 = pElem->matlInfo->mus[ELEC]; pElem->mup0 = pElem->matlInfo->mus[HOLE]; } if ( direction == 0 ) { width += pElem->dy; } else { width += pElem->dx; } pElem = pElem->pElems[ eIndex ]; } } } /* Compute boundary condition parameters. */ void TWOsetBCparams(TWOdevice *pDevice, BDRYcard *cardList) { int index, xIndex, yIndex; /* Need to access in X/Y order. */ TWOelem *pElem, *pNElem; BDRYcard *card; for ( card = cardList; card != NULL; card = card->BDRYnextCard ) { for (xIndex = card->BDRYixLow; xIndex < card->BDRYixHigh; xIndex++) { for (yIndex = card->BDRYiyLow; yIndex < card->BDRYiyHigh; yIndex++) { pElem = pDevice->elemArray[ xIndex ][ yIndex ]; if (pElem != NULL) { if (pElem->domain == card->BDRYdomain) { for (index = 0; index <= 3; index++) { if (pElem->evalEdges[index]) { pNElem = pElem->pElems[index]; if (card->BDRYneighborGiven) { if (pNElem && pNElem->domain == card->BDRYneighbor) { /* Found an interface edge. */ TWOcopyBCinfo( pDevice, pElem, card, index ); } } else { if (!pNElem || pNElem->domain != pElem->domain) { /* Found a boundary edge. */ TWOcopyBCinfo( pDevice, pElem, card, index ); } } } } } } } } } } void TWOnormalize(TWOdevice *pDevice) { int index, eIndex; TWOelem *pElem; TWOnode *pNode; TWOedge *pEdge; for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; pElem->dx /= LNorm; pElem->dy /= LNorm; pElem->epsRel /= EpsNorm; for ( index = 0; index <= 3; index++ ) { if ( pElem->evalNodes[ index ] ) { pNode = pElem->pNodes[ index ]; pNode->netConc /= NNorm; pNode->nd /= NNorm; pNode->na /= NNorm; pNode->nie /= NNorm; pNode->eg /= VNorm; pNode->eaff /= VNorm; } if ( pElem->evalEdges[ index ] ) { pEdge = pElem->pEdges[ index ]; pEdge->qf /= NNorm*LNorm; } } } } tmpk8ny_4pz/src/ciderlib/twod/twocurr.c0000644000175000017500000001166313546075722020361 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/twomesh.h" #include "twoddefs.h" #include "twodext.h" void nodeCurrents(TWOelem *pElem, TWOnode *pNode, double *mun, double *mup, double *jnx, double *jny, double *jpx, double *jpy, double *jdx, double *jdy) { TWOelem *pElemTL, *pElemTR, *pElemBL, *pElemBR; TWOedge *pEdgeT, *pEdgeB, *pEdgeL, *pEdgeR; int materT = 0, materB = 0, materL = 0, materR = 0; int numFound = 0; double dxL = 0.0, dxR = 0.0, dyT = 0.0, dyB = 0.0; double epsL = 0.0, epsR = 0.0, epsT = 0.0, epsB = 0.0; double coeff1, coeff2; NG_IGNORE(pElem); /* Find all four neighboring elements */ pElemTL = pNode->pTLElem; pElemTR = pNode->pTRElem; pElemBL = pNode->pBLElem; pElemBR = pNode->pBRElem; /* Null edge pointers */ pEdgeT = pEdgeB = pEdgeL = pEdgeR = NULL; /* Zero mobilities */ *mun = *mup = 0.0; /* Find edges next to node */ if (pElemTL != NULL) { numFound++; *mun += pElemTL->mun0; *mup += pElemTL->mup0; if (pElemTL->evalEdges[1]) { pEdgeT = pElemTL->pRightEdge; materT = pElemTL->elemType; dyT = pElemTL->dy; epsT = pElemTL->epsRel; } if (pElemTL->evalEdges[2]) { pEdgeL = pElemTL->pBotEdge; materL = pElemTL->elemType; dxL = pElemTL->dx; epsL = pElemTL->epsRel; } } if (pElemTR != NULL) { numFound++; *mun += pElemTR->mun0; *mup += pElemTR->mup0; if (pElemTR->evalEdges[3]) { pEdgeT = pElemTR->pLeftEdge; materT = pElemTR->elemType; epsT = pElemTR->epsRel; } if (pElemTR->evalEdges[2]) { pEdgeR = pElemTR->pBotEdge; materR = pElemTR->elemType; dxR = pElemTR->dx; epsR = pElemTR->epsRel; } } if (pElemBR != NULL) { numFound++; *mun += pElemBR->mun0; *mup += pElemBR->mup0; if (pElemBR->evalEdges[3]) { pEdgeB = pElemBR->pLeftEdge; materB = pElemBR->elemType; dyB = pElemBR->dy; epsB = pElemBR->epsRel; } if (pElemBR->evalEdges[0]) { pEdgeR = pElemBR->pTopEdge; materR = pElemBR->elemType; dxR = pElemBR->dx; epsR = pElemBR->epsRel; } } if (pElemBL != NULL) { numFound++; *mun += pElemBL->mun0; *mup += pElemBL->mup0; if (pElemBL->evalEdges[1]) { pEdgeB = pElemBL->pRightEdge; materB = pElemBL->elemType; dyB = pElemBL->dy; epsB = pElemBL->epsRel; } if (pElemBL->evalEdges[0]) { pEdgeL = pElemBL->pTopEdge; materL = pElemBL->elemType; dxL = pElemBL->dx; epsL = pElemBL->epsRel; } } *mun /= (double) numFound; *mup /= (double) numFound; /* compute horizontal vector components */ /* No more than one of Left Edge or Right Edge is absent */ /* If one is absent the other is guaranteed to be from silicon */ if (pEdgeL == NULL) { if (pNode->nodeType == CONTACT) { *jnx = pEdgeR->jn; *jpx = pEdgeR->jp; *jdx = pEdgeR->jd; } else { *jnx = 0.0; *jpx = 0.0; *jdx = 0.0; } } else if (pEdgeR == NULL) { if (pNode->nodeType == CONTACT) { *jnx = pEdgeL->jn; *jpx = pEdgeL->jp; *jdx = pEdgeL->jd; } else { *jnx = 0.0; *jpx = 0.0; *jdx = 0.0; } } else { /* Both edges are present */ coeff1 = dxL / (dxL + dxR); coeff2 = dxR / (dxL + dxR); if ((materL == INSULATOR) || (materR == INSULATOR)) { *jnx = 0.0; *jpx = 0.0; *jdx = coeff2 * epsL * pEdgeL->jd + coeff1 * epsR * pEdgeR->jd; } else { *jnx = coeff2 * pEdgeL->jn + coeff1 * pEdgeR->jn; *jpx = coeff2 * pEdgeL->jp + coeff1 * pEdgeR->jp; *jdx = coeff2 * pEdgeL->jd + coeff1 * pEdgeR->jd; } } /* compute vertical vector components */ /* No more than one of Top Edge or Bottom Edge is absent */ /* If one is absent the other is guaranteed to be from silicon */ if (pEdgeT == NULL) { if (pNode->nodeType == CONTACT) { *jny = pEdgeB->jn; *jpy = pEdgeB->jp; *jdy = pEdgeB->jd; } else { *jny = 0.0; *jpy = 0.0; *jdy = 0.0; } } else if (pEdgeB == NULL) { if (pNode->nodeType == CONTACT) { *jny = pEdgeT->jn; *jpy = pEdgeT->jp; *jdy = pEdgeT->jd; } else { *jny = 0.0; *jpy = 0.0; *jdy = 0.0; } } else { /* Both edges are present */ coeff1 = dyT / (dyT + dyB); coeff2 = dyB / (dyT + dyB); if ((materT == INSULATOR) || (materB == INSULATOR)) { *jny = 0.0; *jpy = 0.0; *jdy = coeff2 * epsT * pEdgeT->jd + coeff1 * epsB * pEdgeB->jd; } else { *jny = coeff2 * pEdgeT->jn + coeff1 * pEdgeB->jn; *jpy = coeff2 * pEdgeT->jp + coeff1 * pEdgeB->jp; *jdy = coeff2 * pEdgeT->jd + coeff1 * pEdgeB->jd; } } } tmpk8ny_4pz/src/ciderlib/twod/tworead.c0000644000175000017500000000616013546075722020315 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Author: 1992 David A. Gates, U. C. Berkeley CAD Group **********/ /* * Functions needed to read solutions for 2D devices. */ #include "ngspice/ngspice.h" #include "ngspice/plot.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/twodev.h" #include "ngspice/twomesh.h" #include "twoddefs.h" #include "twodext.h" #include "ngspice/cidersupt.h" int TWOreadState(TWOdevice *pDevice, char *fileName, int numVolts, double *pV1, double *pV2, double *pV3) /* char *fileName: File containing raw data */ /* int numVolts: Number of voltage differences */ /* double *pV1, *pV2, *pV3: Pointer to return them in */ { int dataLength; int i, index, xIndex, yIndex; TWOnode ***nodeArray = NULL; TWOnode *pNode; TWOelem *pElem; double refPsi = 0.0; double *psiData, *nData, *pData; double *vData[3]; struct plot *stateDB; struct plot *voltsDB; char voltName[80]; stateDB = DBread( fileName ); if (stateDB == NULL) return (-1); voltsDB = stateDB->pl_next; if (voltsDB == NULL) return (-1); for (i=0; i < numVolts; i++ ) { sprintf( voltName, "v%d%d", i+1, numVolts+1 ); vData[i] = DBgetData( voltsDB, voltName, 1 ); if (vData[i] == NULL) return (-1); } dataLength = pDevice->numXNodes * pDevice->numYNodes; psiData = DBgetData( stateDB, "psi", dataLength ); nData = DBgetData( stateDB, "n", dataLength ); pData = DBgetData( stateDB, "p", dataLength ); if (psiData == NULL || nData == NULL || pData == NULL) return (-1); if (pV1 != NULL) { *pV1 = vData[0][0]; FREE( vData[0] ); } if (pV2 != NULL) { *pV2 = vData[1][0]; FREE( vData[1] ); } if (pV3 != NULL) { *pV3 = vData[2][0]; FREE( vData[2] ); } /* generate the work array for copying node info */ XCALLOC(nodeArray, TWOnode **, 1 + pDevice->numXNodes); for (xIndex = 1; xIndex <= pDevice->numXNodes; xIndex++) { XCALLOC(nodeArray[xIndex], TWOnode *, 1 + pDevice->numYNodes); } /* store the nodes in this work array and use later */ for (xIndex = 1; xIndex < pDevice->numXNodes; xIndex++) { for (yIndex = 1; yIndex < pDevice->numYNodes; yIndex++) { pElem = pDevice->elemArray[xIndex][yIndex]; if (pElem != NULL) { if (refPsi == 0.0 && pElem->matlInfo->type == SEMICON) { refPsi = pElem->matlInfo->refPsi; } for (index = 0; index <= 3; index++) { if (pElem->evalNodes[index]) { pNode = pElem->pNodes[index]; nodeArray[pNode->nodeI][pNode->nodeJ] = pNode; } } } } } index = 0; for (xIndex = 1; xIndex <= pDevice->numXNodes; xIndex++) { for (yIndex = 1; yIndex <= pDevice->numYNodes; yIndex++) { pNode = nodeArray[xIndex][yIndex]; index++; if (pNode != NULL) { pNode->psi = psiData[index-1]/VNorm + refPsi; pNode->nConc = nData[index-1]/NNorm; pNode->pConc = pData[index-1]/NNorm; } } } /* Delete work array. */ for (xIndex = 1; xIndex <= pDevice->numXNodes; xIndex++) { FREE(nodeArray[xIndex]); } FREE(nodeArray); FREE(psiData); FREE(nData); FREE(pData); return (0); } tmpk8ny_4pz/src/ciderlib/twod/twofield.c0000644000175000017500000000635313546075722020471 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/twomesh.h" #include "twoddefs.h" #include "twodext.h" void nodeFields(TWOelem *pElem, TWOnode *pNode, double *ex, double *ey) { TWOelem *pElemTL, *pElemTR, *pElemBL, *pElemBR; TWOedge *pEdgeT, *pEdgeB, *pEdgeL, *pEdgeR; int materT, materB, materL, materR; double dxL = 0.0, dxR = 0.0, dyT = 0.0, dyB = 0.0; double ef1, ef2, coeff1, coeff2; NG_IGNORE(pElem); /* Find all four neighboring elements */ pElemTL = pNode->pTLElem; pElemTR = pNode->pTRElem; pElemBL = pNode->pBLElem; pElemBR = pNode->pBRElem; /* Null edge pointers */ pEdgeT = pEdgeB = pEdgeL = pEdgeR = NULL; /* Find edges next to node */ if (pElemTL != NULL) { if (pElemTL->evalEdges[1]) { pEdgeT = pElemTL->pRightEdge; materT = pElemTL->elemType; dyT = pElemTL->dy; } if (pElemTL->evalEdges[2]) { pEdgeL = pElemTL->pBotEdge; materL = pElemTL->elemType; dxL = pElemTL->dx; } } if (pElemTR != NULL) { if (pElemTR->evalEdges[3]) { pEdgeT = pElemTR->pLeftEdge; materT = pElemTR->elemType; dyT = pElemTR->dy; } if (pElemTR->evalEdges[2]) { pEdgeR = pElemTR->pBotEdge; materR = pElemTR->elemType; dxR = pElemTR->dx; } } if (pElemBR != NULL) { if (pElemBR->evalEdges[3]) { pEdgeB = pElemBR->pLeftEdge; materB = pElemBR->elemType; dyB = pElemBR->dy; } if (pElemBR->evalEdges[0]) { pEdgeR = pElemBR->pTopEdge; materR = pElemBR->elemType; dxR = pElemBR->dx; } } if (pElemBL != NULL) { if (pElemBL->evalEdges[1]) { pEdgeB = pElemBL->pRightEdge; materB = pElemBL->elemType; dyB = pElemBL->dy; } if (pElemBL->evalEdges[0]) { pEdgeL = pElemBL->pTopEdge; materL = pElemBL->elemType; dxL = pElemBL->dx; } } /* compute horizontal vector components */ /* No more than one of Left Edge or Right Edge is absent */ if (pEdgeL == NULL) { if (pNode->nodeType == CONTACT) { *ex = -pEdgeR->dPsi / dxR; } else { *ex = 0.0; } } else if (pEdgeR == NULL) { if (pNode->nodeType == CONTACT) { *ex = -pEdgeL->dPsi / dxL; } else { *ex = 0.0; } } else { /* Both edges are present */ coeff1 = dxL / (dxL + dxR); coeff2 = dxR / (dxL + dxR); ef1 = -pEdgeL->dPsi / dxL; ef2 = -pEdgeR->dPsi / dxR; *ex = coeff2 * ef1 + coeff1 * ef2; } /* compute vertical vector components */ /* No more than one of Top Edge or Bottom Edge is absent */ if (pEdgeT == NULL) { if (pNode->nodeType == CONTACT) { *ey = -pEdgeB->dPsi / dyB; } else { *ey = 0.0; } } else if (pEdgeB == NULL) { if (pNode->nodeType == CONTACT) { *ey = -pEdgeT->dPsi / dyT; } else { *ey = 0.0; } } else { /* Both edges are present */ coeff1 = dyT / (dyT + dyB); coeff2 = dyB / (dyT + dyB); ef1 = -pEdgeT->dPsi / dyT; ef2 = -pEdgeB->dPsi / dyB; *ey = coeff2 * ef1 + coeff1 * ef2; } } tmpk8ny_4pz/src/ciderlib/twod/twoproj.c0000644000175000017500000004743413546075722020365 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ /* * Functions for projecting the next solution point for use with the modified * two-level Newton scheme */ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/twomesh.h" #include "ngspice/twodev.h" #include "ngspice/bool.h" #include "ngspice/spmatrix.h" #include "twoddefs.h" #include "twodext.h" #include "ngspice/cidersupt.h" /* Forward Declarations */ void NUMD2project(TWOdevice *pDevice, double delV) { TWOnode *pNode; TWOelem *pElem; int index, eIndex, numContactNodes; TWOcontact *pContact = pDevice->pLastContact; double *incVpn, *solution = pDevice->dcSolution; double delPsi, delN, delP, newN, newP; delV = -delV / VNorm; /* update the boundary condition for the last contact */ numContactNodes = pContact->numNodes; for ( index = 0; index < numContactNodes; index++ ) { pNode = pContact->pNodes[ index ]; pNode->psi += delV; } /* * store the new rhs for computing the incremental quantities * with the second to last node. solve the system of equations */ if ( ABS(delV) < MIN_DELV ) { TWOstoreInitialGuess( pDevice ); return; } incVpn = pDevice->dcDeltaSolution; storeNewRhs( pDevice, pContact ); spSolve( pDevice->matrix, pDevice->rhs, incVpn, NULL, NULL ); for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; for ( index = 0; index <= 3; index++ ) { if ( pElem->evalNodes[ index ] ) { pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { delPsi = incVpn[ pNode->psiEqn ] * delV; solution[ pNode->psiEqn ] = pNode->psi + delPsi; if ( pElem->elemType == SEMICON && (!OneCarrier || (OneCarrier == N_TYPE)) ) { delN = incVpn[ pNode->nEqn ] * delV; newN = pNode->nConc + delN; if ( newN <= 0.0 ) { solution[ pNode->nEqn ] = guessNewConc( pNode->nConc, delN ); } else { solution[ pNode->nEqn ] = newN; } } if ( pElem->elemType == SEMICON && (!OneCarrier || (OneCarrier == P_TYPE)) ) { delP = incVpn[ pNode->pEqn ] * delV; newP = pNode->pConc + delP; if ( newP <= 0.0 ) { solution[ pNode->pEqn ] = guessNewConc( pNode->pConc, delP ); } else { solution[ pNode->pEqn ] = newP; } } } } } } } void NBJT2project(TWOdevice *pDevice, double delVce, double delVbe) { TWOnode *pNode; TWOelem *pElem; int index, eIndex, numContactNodes; TWOcontact *pColContact = pDevice->pFirstContact; TWOcontact *pBaseContact = pDevice->pFirstContact->next; double *incVce, *incVbe, *solution = pDevice->dcSolution; double delPsi, delN, delP, newN, newP; double nConc, pConc; /* Normalize the voltages for calculations. */ if ( delVce != 0.0 ) { delVce = delVce / VNorm; numContactNodes = pColContact->numNodes; for ( index = 0; index < numContactNodes; index++ ) { pNode = pColContact->pNodes[ index ]; pNode->psi += delVce; } } if ( delVbe != 0.0 ) { delVbe = delVbe / VNorm; numContactNodes = pBaseContact->numNodes; for ( index = 0; index < numContactNodes; index++ ) { pNode = pBaseContact->pNodes[ index ]; pNode->psi += delVbe; } } /* * store the new rhs for computing the incremental quantities * incVce (dcDeltaSolution) and incVbe (copiedSolution) are used to * store the incremental quantities associated with Vce and Vbe */ /* set incVce = dcDeltaSolution; incVbe = copiedSolution */ if ( ABS( delVce ) > MIN_DELV ) { incVce = pDevice->dcDeltaSolution; storeNewRhs( pDevice, pColContact ); spSolve( pDevice->matrix, pDevice->rhs, incVce, NULL, NULL); for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; for ( index = 0; index <= 3; index++ ) { if ( pElem->evalNodes[ index ] ) { pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { delPsi = incVce[ pNode->psiEqn ] * delVce; solution[ pNode->psiEqn ] = pNode->psi + delPsi; if ( pElem->elemType == SEMICON && (!OneCarrier || (OneCarrier == N_TYPE)) ) { delN = incVce[ pNode->nEqn ] * delVce; newN = pNode->nConc + delN; if ( newN <= 0.0 ) { solution[ pNode->nEqn ] = guessNewConc( pNode->nConc, delN ); } else { solution[ pNode->nEqn ] = newN; } } if ( pElem->elemType == SEMICON && (!OneCarrier | (OneCarrier == P_TYPE)) ) { delP = incVce[ pNode->pEqn ] * delVce; newP = pNode->pConc + delP; if ( newP <= 0.0 ) { solution[ pNode->pEqn ] = guessNewConc( pNode->pConc, delP ); } else { solution[ pNode->pEqn ] = newP; } } } } } } } else { TWOstoreInitialGuess( pDevice ); } if ( ABS( delVbe ) > MIN_DELV ) { incVbe = pDevice->copiedSolution; storeNewRhs( pDevice, pBaseContact ); spSolve( pDevice->matrix, pDevice->rhs, incVbe, NULL, NULL); for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; for ( index = 0; index <= 3; index++ ) { if ( pElem->evalNodes[ index ] ) { pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { delPsi = incVbe[ pNode->psiEqn ] * delVbe; solution[ pNode->psiEqn ] += delPsi; if ( pElem->elemType == SEMICON && (!OneCarrier || (OneCarrier == N_TYPE)) ) { delN = incVbe[ pNode->nEqn ] * delVbe; nConc = solution[ pNode->nEqn ]; newN = nConc + delN; if ( newN <= 0.0 ) { solution[ pNode->nEqn ] = guessNewConc( nConc, delN ); } else { solution[ pNode->nEqn ] = newN; } } if ( pElem->elemType == SEMICON && (!OneCarrier || (OneCarrier == P_TYPE)) ) { delP = incVbe[ pNode->pEqn ] * delVbe; pConc = solution[ pNode->pEqn ]; newP = pConc + delP; if ( newP <= 0.0 ) { solution[ pNode->pEqn ] = guessNewConc( pConc, delP ); } else { solution[ pNode->pEqn ] = newP; } } } } } } } } void NUMOSproject(TWOdevice *pDevice, double delVdb, double delVsb, double delVgb) { TWOnode *pNode; TWOelem *pElem; int index, eIndex, numContactNodes; TWOcontact *pDContact = pDevice->pFirstContact; TWOcontact *pGContact = pDevice->pFirstContact->next; TWOcontact *pSContact = pDevice->pFirstContact->next->next; double *incVdb, *incVsb, *incVgb, *solution = pDevice->dcSolution; double delPsi, delN, delP, newN, newP; double nConc, pConc; /* normalize the voltages for calculations */ if ( delVdb != 0.0 ) { delVdb = delVdb / VNorm; numContactNodes = pDContact->numNodes; for ( index = 0; index < numContactNodes; index++ ) { pNode = pDContact->pNodes[ index ]; pNode->psi += delVdb; } } if ( delVsb != 0.0 ) { delVsb = delVsb / VNorm; numContactNodes = pSContact->numNodes; for ( index = 0; index < numContactNodes; index++ ) { pNode = pSContact->pNodes[ index ]; pNode->psi += delVsb; } } if ( delVgb != 0.0 ) { delVgb = delVgb / VNorm; numContactNodes = pGContact->numNodes; for ( index = 0; index < numContactNodes; index++ ) { pNode = pGContact->pNodes[ index ]; pNode->psi += delVgb; } } /* * store the new rhs for computing the incremental quantities * incVdb (dcDeltaSolution), incVsb, incVgb */ if ( ABS( delVdb ) > MIN_DELV ) { incVdb = pDevice->dcDeltaSolution; storeNewRhs( pDevice, pDContact ); spSolve( pDevice->matrix, pDevice->rhs, incVdb, NULL, NULL); for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; for ( index = 0; index <= 3; index++ ) { if ( pElem->evalNodes[ index ] ) { pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { delPsi = incVdb[ pNode->psiEqn ] * delVdb; solution[ pNode->psiEqn ] = pNode->psi + delPsi; if ( pElem->elemType == SEMICON && (!OneCarrier || (OneCarrier == N_TYPE)) ) { delN = incVdb[ pNode->nEqn ] * delVdb; newN = pNode->nConc + delN; if ( newN <= 0.0 ) { solution[ pNode->nEqn ] = guessNewConc( pNode->nConc, delN ); } else { solution[ pNode->nEqn ] = newN; } } if ( pElem->elemType == SEMICON && (!OneCarrier || (OneCarrier == P_TYPE)) ) { delP = incVdb[ pNode->pEqn ] * delVdb; newP = pNode->pConc + delP; if ( newP <= 0.0 ) { solution[ pNode->pEqn ] = guessNewConc( pNode->pConc, delP ); } else { solution[ pNode->pEqn ] = newP; } } } } } } } else { TWOstoreInitialGuess( pDevice ); } if ( ABS( delVsb ) > MIN_DELV ) { incVsb = pDevice->dcDeltaSolution; storeNewRhs( pDevice, pSContact ); spSolve( pDevice->matrix, pDevice->rhs, incVsb, NULL, NULL); for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; for ( index = 0; index <= 3; index++ ) { if ( pElem->evalNodes[ index ] ) { pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { delPsi = incVsb[ pNode->psiEqn ] * delVsb; solution[ pNode->psiEqn ] += delPsi; if ( pElem->elemType == SEMICON && (!OneCarrier || (OneCarrier == N_TYPE)) ) { delN = incVsb[ pNode->nEqn ] * delVsb; nConc = solution[ pNode->nEqn ]; newN = nConc + delN; if ( newN <= 0.0 ) { solution[ pNode->nEqn ] = guessNewConc( nConc, delN ); } else { solution[ pNode->nEqn ] = newN; } } if ( pElem->elemType == SEMICON && (!OneCarrier || (OneCarrier == P_TYPE)) ) { delP = incVsb[ pNode->pEqn ] * delVsb; pConc = solution[ pNode->pEqn ]; newP = pConc + delP; if ( newP <= 0.0 ) { solution[ pNode->pEqn ] = guessNewConc( pConc, delP ); } else { solution[ pNode->pEqn ] = newP; } } } } } } } if ( ABS( delVgb ) > MIN_DELV ) { incVgb = pDevice->dcDeltaSolution; storeNewRhs( pDevice, pGContact ); spSolve( pDevice->matrix, pDevice->rhs, incVgb, NULL, NULL); for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; for ( index = 0; index <= 3; index++ ) { if ( pElem->evalNodes[ index ] ) { pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { delPsi = incVgb[ pNode->psiEqn ] * delVgb; solution[ pNode->psiEqn ] += delPsi; if ( pElem->elemType == SEMICON && (!OneCarrier || (OneCarrier == N_TYPE)) ) { delN = incVgb[ pNode->nEqn ] * delVgb; nConc = solution[ pNode->nEqn ]; newN = nConc + delN; if ( newN <= 0.0 ) { solution[ pNode->nEqn ] = guessNewConc( nConc, delN ); } else { solution[ pNode->nEqn ] = newN; } } if ( pElem->elemType == SEMICON && (!OneCarrier || (OneCarrier == P_TYPE)) ) { delP = incVgb[ pNode->pEqn ] * delVgb; pConc = solution[ pNode->pEqn ]; newP = pConc + delP; if ( newP <= 0.0 ) { solution[ pNode->pEqn ] = guessNewConc( pConc, delP ); } else { solution[ pNode->pEqn ] = newP; } } } } } } } } /* functions to update the solution for the full-LU and modified two-level Newton methods */ void NUMD2update(TWOdevice *pDevice, double delV, BOOLEAN updateBoundary) { TWOnode *pNode; TWOelem *pElem; int index, eIndex, numContactNodes; TWOcontact *pContact = pDevice->pLastContact; double delPsi, delN, delP, *incVpn, *solution = pDevice->dcSolution; delV = -delV / VNorm; if ( updateBoundary ) { /* update the boundary condition for the last contact */ numContactNodes = pContact->numNodes; for ( index = 0; index < numContactNodes; index++ ) { pNode = pContact->pNodes[ index ]; pNode->psi += delV; } } /* the equations have been solved while computing the conductances */ /* solution is in dcDeltaSolution, so use it */ incVpn = pDevice->dcDeltaSolution; for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; for ( index = 0; index <= 3; index++ ) { if ( pElem->evalNodes[ index ] ) { pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { delPsi = incVpn[ pNode->psiEqn ] * delV; solution[ pNode->psiEqn ] = pNode->psi + delPsi; if ( pElem->elemType == SEMICON && (!OneCarrier || (OneCarrier == N_TYPE)) ) { delN = incVpn[ pNode->nEqn ] * delV; solution[ pNode->nEqn ] = pNode->nConc + delN; } if ( pElem->elemType == SEMICON && (!OneCarrier || (OneCarrier == P_TYPE)) ) { delP = incVpn[ pNode->pEqn ] * delV; solution[ pNode->pEqn ] = pNode->pConc + delP; } } } } } } void NBJT2update(TWOdevice *pDevice, double delVce, double delVbe, BOOLEAN updateBoundary) { TWOnode *pNode; TWOelem *pElem; int index, eIndex, numContactNodes; TWOcontact *pColContact = pDevice->pFirstContact; TWOcontact *pBaseContact = pDevice->pFirstContact->next; double delPsi, delN, delP, *incVce, *incVbe, *solution = pDevice->dcSolution; /* normalize the voltages for calculations */ if ( delVce != 0.0 ) { delVce = delVce / VNorm; if ( updateBoundary ) { numContactNodes = pColContact->numNodes; for ( index = 0; index < numContactNodes; index++ ) { pNode = pColContact->pNodes[ index ]; pNode->psi += delVce; } } } if ( delVbe != 0.0 ) { delVbe = delVbe / VNorm; if ( updateBoundary ) { numContactNodes = pBaseContact->numNodes; for ( index = 0; index < numContactNodes; index++ ) { pNode = pBaseContact->pNodes[ index ]; pNode->psi += delVbe; } } } /* use solution from computeConductance to do update */ /* set incVce = dcDeltaSolution; incVbe = copiedSolution */ incVce = pDevice->dcDeltaSolution; incVbe = pDevice->copiedSolution; for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; for ( index = 0; index <= 3; index++ ) { if ( pElem->evalNodes[ index ] ) { pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { delPsi = (incVce[ pNode->psiEqn ] * delVce + incVbe[ pNode->psiEqn ] * delVbe); solution[ pNode->psiEqn ] = pNode->psi + delPsi; if ( pElem->elemType == SEMICON && (!OneCarrier || (OneCarrier == N_TYPE)) ) { delN = (incVce[ pNode->nEqn ] * delVce + incVbe[ pNode->nEqn ] * delVbe); solution[ pNode->nEqn ] = pNode->nConc + delN; } if ( pElem->elemType == SEMICON && (!OneCarrier || (OneCarrier == P_TYPE)) ) { delP = (incVce[ pNode->pEqn ] * delVce + incVbe[ pNode->pEqn ] * delVbe); solution[ pNode->pEqn ] = pNode->pConc + delP; } } } } } } void NUMOSupdate(TWOdevice *pDevice, double delVdb, double delVsb, double delVgb, BOOLEAN updateBoundary) { TWOnode *pNode; TWOelem *pElem; int index, eIndex, numContactNodes; TWOcontact *pDContact = pDevice->pFirstContact; TWOcontact *pGContact = pDevice->pFirstContact->next; TWOcontact *pSContact = pDevice->pFirstContact->next->next; double delPsi, delN, delP; double *incVdb, *incVsb, *incVgb, *solution = pDevice->dcSolution; /* normalize the voltages for calculations */ if ( delVdb != 0.0 ) { delVdb = delVdb / VNorm; if ( updateBoundary ) { numContactNodes = pDContact->numNodes; for ( index = 0; index < numContactNodes; index++ ) { pNode = pDContact->pNodes[ index ]; pNode->psi += delVdb; } } } if ( delVsb != 0.0 ) { delVsb = delVsb / VNorm; if ( updateBoundary ) { numContactNodes = pSContact->numNodes; for ( index = 0; index < numContactNodes; index++ ) { pNode = pSContact->pNodes[ index ]; pNode->psi += delVsb; } } } if ( delVgb != 0.0 ) { delVgb = delVgb / VNorm; if ( updateBoundary ) { numContactNodes = pGContact->numNodes; for ( index = 0; index < numContactNodes; index++ ) { pNode = pGContact->pNodes[ index ]; pNode->psi += delVgb; } } } /* use solution from computeConductance to do update */ incVdb = pDevice->dcDeltaSolution; incVsb = pDevice->copiedSolution; incVgb = pDevice->rhsImag; for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; for ( index = 0; index <= 3; index++ ) { if ( pElem->evalNodes[ index ] ) { pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { delPsi = (incVdb[ pNode->psiEqn ] * delVdb + incVsb[ pNode->psiEqn ] * delVsb + incVgb[ pNode->psiEqn ] * delVgb); solution[ pNode->psiEqn ] = pNode->psi + delPsi; if ( pElem->elemType == SEMICON && (!OneCarrier || (OneCarrier == N_TYPE)) ) { delN = (incVdb[ pNode->nEqn ] * delVdb + incVsb[ pNode->nEqn ] * delVsb + incVgb[ pNode->nEqn ] * delVgb); solution[ pNode->nEqn ] = pNode->nConc + delN; } if ( pElem->elemType == SEMICON && (!OneCarrier || (OneCarrier == P_TYPE)) ) { delP = (incVdb[ pNode->pEqn ] * delVdb + incVsb[ pNode->pEqn ] * delVsb + incVgb[ pNode->pEqn ] * delVgb); solution[ pNode->pEqn ] = pNode->pConc + delP; } } } } } } void storeNewRhs(TWOdevice *pDevice, TWOcontact *pContact) { int index, i, numContactNodes; TWOelem *pElem; TWOnode *pNode, *pHNode = NULL, *pVNode = NULL; TWOedge *pHEdge = NULL, *pVEdge = NULL; double *rhs = pDevice->rhs; /* zero the rhs before loading in the new rhs */ for ( index = 1; index <= pDevice->numEqns ; index++ ) { rhs[ index ] = 0.0; } numContactNodes = pContact->numNodes; for ( index = 0; index < numContactNodes; index++ ) { pNode = pContact->pNodes[ index ]; for ( i = 0; i <= 3; i++ ) { pElem = pNode->pElems[ i ]; if ( pElem != NULL) { /* found an element to which this node belongs */ switch ( i ) { case 0: /* the TL element of this node */ pHNode = pElem->pBLNode; pVNode = pElem->pTRNode; pHEdge = pElem->pBotEdge; pVEdge = pElem->pRightEdge; break; case 1: /* the TR element */ pHNode = pElem->pBRNode; pVNode = pElem->pTLNode; pHEdge = pElem->pBotEdge; pVEdge = pElem->pLeftEdge; break; case 2: /* the BR element */ pHNode = pElem->pTRNode; pVNode = pElem->pBLNode; pHEdge = pElem->pTopEdge; pVEdge = pElem->pLeftEdge; break; case 3: /* the BL element */ pHNode = pElem->pTLNode; pVNode = pElem->pBRNode; pHEdge = pElem->pTopEdge; pVEdge = pElem->pRightEdge; break; default: printf( "storeNewRhs: shouldn't be here\n"); break; } if ( pHNode->nodeType != CONTACT ) { /* contribution to the x nodes */ rhs[ pHNode->psiEqn ] += pElem->epsRel * 0.5 * pElem->dyOverDx; if ( pElem->elemType == SEMICON ) { if ( !OneCarrier ) { rhs[ pHNode->nEqn ] -= 0.5 * pElem->dy * pHEdge->dJnDpsiP1; rhs[ pHNode->pEqn ] -= 0.5 * pElem->dy * pHEdge->dJpDpsiP1; } else if ( OneCarrier == N_TYPE ) { rhs[ pHNode->nEqn ] -= 0.5 * pElem->dy * pHEdge->dJnDpsiP1; } else if ( OneCarrier == P_TYPE ) { rhs[ pHNode->pEqn ] -= 0.5 * pElem->dy * pHEdge->dJpDpsiP1; } } } if ( pVNode->nodeType != CONTACT ) { /* contribution to the y nodes */ rhs[ pVNode->psiEqn ] += pElem->epsRel * 0.5 * pElem->dxOverDy; if ( pElem->elemType == SEMICON ) { if ( !OneCarrier ) { rhs[ pVNode->nEqn ] -= 0.5 * pElem->dx * pVEdge->dJnDpsiP1; rhs[ pVNode->pEqn ] -= 0.5 * pElem->dx * pVEdge->dJpDpsiP1; } else if ( OneCarrier == N_TYPE ) { rhs[ pVNode->nEqn ] -= 0.5 * pElem->dx * pVEdge->dJnDpsiP1; } else if ( OneCarrier == P_TYPE ) { rhs[ pVNode->pEqn ] -= 0.5 * pElem->dx * pVEdge->dJpDpsiP1; } } } } } } } tmpk8ny_4pz/src/ciderlib/twod/twopoiss.c0000644000175000017500000002111413546075722020533 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/twomesh.h" #include "ngspice/twodev.h" #include "ngspice/spmatrix.h" #include "twoddefs.h" #include "twodext.h" /* functions to setup and solve the 2D poisson equation */ void TWOQjacBuild(TWOdevice *pDevice) { SMPmatrix *matrix = pDevice->matrix; TWOelem *pElem; TWOnode *pNode, *pNode1; int eIndex, nIndex; /* set up matrix pointers */ /* establish main diagonal first */ for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; for ( nIndex = 0; nIndex <= 3; nIndex++ ) { if ( pElem->evalNodes[ nIndex ] ) { pNode = pElem->pNodes[ nIndex ]; pNode->fPsiPsi = spGetElement( matrix, pNode->poiEqn, pNode->poiEqn ); } } } for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; pNode = pElem->pTLNode; pNode1 = pElem->pTRNode; pNode->fPsiPsiiP1 = spGetElement(matrix, pNode->poiEqn, pNode1->poiEqn ); pNode1 = pElem->pBLNode; pNode->fPsiPsijP1 = spGetElement(matrix, pNode->poiEqn, pNode1->poiEqn ); pNode = pElem->pTRNode; pNode1 = pElem->pTLNode; pNode->fPsiPsiiM1 = spGetElement(matrix, pNode->poiEqn, pNode1->poiEqn ); pNode1 = pElem->pBRNode; pNode->fPsiPsijP1 = spGetElement(matrix, pNode->poiEqn, pNode1->poiEqn ); pNode = pElem->pBRNode; pNode1 = pElem->pBLNode; pNode->fPsiPsiiM1 = spGetElement(matrix, pNode->poiEqn, pNode1->poiEqn ); pNode1 = pElem->pTRNode; pNode->fPsiPsijM1 = spGetElement(matrix, pNode->poiEqn, pNode1->poiEqn ); pNode = pElem->pBLNode; pNode1 = pElem->pBRNode; pNode->fPsiPsiiP1 = spGetElement(matrix, pNode->poiEqn, pNode1->poiEqn ); pNode1 = pElem->pTLNode; pNode->fPsiPsijM1 = spGetElement(matrix, pNode->poiEqn, pNode1->poiEqn ); } /* for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; pNode = pElem->pTLNode; pNode->fPsiPsi = spGetElement( matrix, pNode->poiEqn, pNode->poiEqn ); pNode1 = pElem->pTRNode; pNode->fPsiPsiiP1 = spGetElement(matrix, pNode->poiEqn, pNode1->poiEqn ); pNode1 = pElem->pBLNode; pNode->fPsiPsijP1 = spGetElement(matrix, pNode->poiEqn, pNode1->poiEqn ); pNode = pElem->pTRNode; pNode->fPsiPsi = spGetElement( matrix, pNode->poiEqn, pNode->poiEqn ); pNode1 = pElem->pTLNode; pNode->fPsiPsiiM1 = spGetElement(matrix, pNode->poiEqn, pNode1->poiEqn ); pNode1 = pElem->pBRNode; pNode->fPsiPsijP1 = spGetElement(matrix, pNode->poiEqn, pNode1->poiEqn ); pNode = pElem->pBRNode; pNode->fPsiPsi = spGetElement( matrix, pNode->poiEqn, pNode->poiEqn ); pNode1 = pElem->pBLNode; pNode->fPsiPsiiM1 = spGetElement(matrix, pNode->poiEqn, pNode1->poiEqn ); pNode1 = pElem->pTRNode; pNode->fPsiPsijM1 = spGetElement(matrix, pNode->poiEqn, pNode1->poiEqn ); pNode = pElem->pBLNode; pNode->fPsiPsi = spGetElement( matrix, pNode->poiEqn, pNode->poiEqn ); pNode1 = pElem->pBRNode; pNode->fPsiPsiiP1 = spGetElement(matrix, pNode->poiEqn, pNode1->poiEqn ); pNode1 = pElem->pTLNode; pNode->fPsiPsijM1 = spGetElement(matrix, pNode->poiEqn, pNode1->poiEqn ); } */ } void TWOQsysLoad(TWOdevice *pDevice) { TWOelem *pElem; TWOnode *pNode; TWOedge *pHEdge, *pVEdge; int index, eIndex; double *pRhs = pDevice->rhs; double dyOverDx, dxOverDy, dPsiT, dPsiB, dPsiL, dPsiR; TWOQcommonTerms( pDevice ); /* zero the rhs vector */ for ( index = 1 ; index <= pDevice->numEqns ; index++ ) { pRhs[ index ] = 0.0; } /* zero the matrix */ spClear( pDevice->matrix ); for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; dxOverDy = 0.5 * pElem->epsRel * pElem->dxOverDy; dyOverDx = 0.5 * pElem->epsRel * pElem->dyOverDx; dPsiT = pElem->pTopEdge->dPsi; dPsiB = pElem->pBotEdge->dPsi; dPsiL = pElem->pLeftEdge->dPsi; dPsiR = pElem->pRightEdge->dPsi; /* load for all i,j */ for ( index = 0; index <= 3; index++ ) { pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { *(pNode->fPsiPsi) += dyOverDx + dxOverDy; if ( index <= 1 ) { pHEdge = pElem->pTopEdge; } else { pHEdge = pElem->pBotEdge; } if ( index == 0 || index == 3 ) { pVEdge = pElem->pLeftEdge; } else { pVEdge = pElem->pRightEdge; } /* add surface state charges */ pRhs[ pNode->poiEqn ] += 0.5 * pElem->dx * pHEdge->qf; pRhs[ pNode->poiEqn ] += 0.5 * pElem->dy * pVEdge->qf; if ( pElem->elemType == SEMICON ) { *(pNode->fPsiPsi) += 0.25 * pElem->dx * pElem->dy * (pNode->nConc + pNode->pConc); pRhs[ pNode->poiEqn ] += 0.25 * pElem->dx * pElem->dy * (pNode->netConc + pNode->pConc - pNode->nConc); } } } pNode = pElem->pTLNode; pRhs[ pNode->poiEqn ] -= -dyOverDx * dPsiT - dxOverDy * dPsiL; *(pNode->fPsiPsiiP1) -= dyOverDx; *(pNode->fPsiPsijP1) -= dxOverDy; pNode = pElem->pTRNode; pRhs[ pNode->poiEqn ] -= dyOverDx * dPsiT - dxOverDy * dPsiR; *(pNode->fPsiPsiiM1) -= dyOverDx; *(pNode->fPsiPsijP1) -= dxOverDy; pNode = pElem->pBRNode; pRhs[ pNode->poiEqn ] -= dyOverDx * dPsiB + dxOverDy * dPsiR; *(pNode->fPsiPsiiM1) -= dyOverDx; *(pNode->fPsiPsijM1) -= dxOverDy; pNode = pElem->pBLNode; pRhs[ pNode->poiEqn ] -= -dyOverDx * dPsiB + dxOverDy * dPsiL; *(pNode->fPsiPsiiP1) -= dyOverDx; *(pNode->fPsiPsijM1) -= dxOverDy; } } void TWOQrhsLoad(TWOdevice *pDevice) { TWOelem *pElem; TWOnode *pNode; TWOedge *pHEdge, *pVEdge; int index, eIndex; double *pRhs = pDevice->rhs; double dyOverDx, dxOverDy, dPsiT, dPsiB, dPsiL, dPsiR; TWOQcommonTerms( pDevice ); /* zero the rhs vector */ for ( index = 1 ; index <= pDevice->numEqns ; index++ ) { pRhs[ index ] = 0.0; } for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; dxOverDy = 0.5 * pElem->epsRel * pElem->dxOverDy; dyOverDx = 0.5 * pElem->epsRel * pElem->dyOverDx; dPsiT = pElem->pTopEdge->dPsi; dPsiB = pElem->pBotEdge->dPsi; dPsiL = pElem->pLeftEdge->dPsi; dPsiR = pElem->pRightEdge->dPsi; /* load nodal terms */ for ( index = 0; index <= 3; index++ ) { pNode = pElem->pNodes[ index ]; if ( (pNode->nodeType != CONTACT) && (pElem->elemType == SEMICON) ) { pRhs[ pNode->poiEqn ] += 0.25 * pElem->dx * pElem->dy * (pNode->netConc + pNode->pConc - pNode->nConc); } if ( index <= 1 ) { pHEdge = pElem->pTopEdge; } else { pHEdge = pElem->pBotEdge; } if ( index == 0 || index == 3 ) { pVEdge = pElem->pLeftEdge; } else { pVEdge = pElem->pRightEdge; } /* add surface state charges */ pRhs[ pNode->poiEqn ] += 0.5 * pElem->dx * pHEdge->qf; pRhs[ pNode->poiEqn ] += 0.5 * pElem->dy * pVEdge->qf; } /* load edge terms */ pNode = pElem->pTLNode; pRhs[ pNode->poiEqn ] -= -dyOverDx * dPsiT - dxOverDy * dPsiL; pNode = pElem->pTRNode; pRhs[ pNode->poiEqn ] -= dyOverDx * dPsiT - dxOverDy * dPsiR; pNode = pElem->pBRNode; pRhs[ pNode->poiEqn ] -= dyOverDx * dPsiB + dxOverDy * dPsiR; pNode = pElem->pBLNode; pRhs[ pNode->poiEqn ] -= -dyOverDx * dPsiB + dxOverDy * dPsiL; } } void TWOQcommonTerms(TWOdevice *pDevice) { TWOelem *pElem; TWOedge *pEdge; TWOnode *pNode; int index, eIndex; double psi1, psi2, refPsi; for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; refPsi = pElem->matlInfo->refPsi; for ( index = 0; index <= 3; index++ ) { if ( pElem->evalNodes[ index ] ) { pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { pNode->psi = pDevice->dcSolution[ pNode->poiEqn ]; if ( pElem->elemType == SEMICON ) { pNode->nConc = pNode->nie * exp( pNode->psi - refPsi ); pNode->pConc = pNode->nie * exp( - pNode->psi + refPsi ); } } } if ( pElem->evalEdges[ index ] ) { pEdge = pElem->pEdges[ index ]; pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { psi1 = pDevice->dcSolution[pNode->poiEqn]; } else { psi1 = pNode->psi; } pNode = pElem->pNodes[ (index + 1) % 4 ]; if ( pNode->nodeType != CONTACT ) { psi2 = pDevice->dcSolution[pNode->poiEqn]; } else { psi2 = pNode->psi; } if ( index <= 1 ) { pEdge->dPsi = psi2 - psi1; } else { pEdge->dPsi = psi1 - psi2; } } } } } tmpk8ny_4pz/src/ciderlib/twod/twoadmit.c0000644000175000017500000013074613546075722020510 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ /* Functions to compute the ac admittances of a device. */ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/numconst.h" #include "ngspice/twodev.h" #include "ngspice/twomesh.h" #include "ngspice/complex.h" #include "ngspice/spmatrix.h" #include "ngspice/bool.h" #include "ngspice/macros.h" #include "ngspice/ifsim.h" #include "twoddefs.h" #include "twodext.h" #include "ngspice/cidersupt.h" extern IFfrontEnd *SPfrontEnd; /* * mmhhh this may cause troubles * Paolo Nenzi 2002 */ SPcomplex yTotal; int NUMD2admittance(TWOdevice *pDevice, double omega, SPcomplex *yd) { TWOnode *pNode; TWOelem *pElem; int index, eIndex; double dxdy; double *solnReal, *solnImag; double *rhsReal, *rhsImag; SPcomplex yAc, cOmega, *y; BOOLEAN deltaVContact = FALSE; BOOLEAN SORFailed; double startTime; /* Each time we call this counts as one AC iteration. */ pDevice->pStats->numIters[STAT_AC] += 1; /* * change context names of solution vectors for ac analysis dcDeltaSolution * stores the real part and copiedSolution stores the imaginary part of the * ac solution vector */ pDevice->solverType = SLV_SMSIG; rhsReal = pDevice->rhs; rhsImag = pDevice->rhsImag; solnReal = pDevice->dcDeltaSolution; solnImag = pDevice->copiedSolution; /* use a normalized radian frequency */ omega *= TNorm; CMPLX_ASSIGN_VALUE(cOmega, 0.0, omega); if ((AcAnalysisMethod == SOR) || (AcAnalysisMethod == SOR_ONLY)) { /* LOAD */ startTime = SPfrontEnd->IFseconds(); /* zero the rhsImag */ for (index = 1; index <= pDevice->numEqns; index++) { rhsImag[index] = 0.0; } /* store the new rhs vector */ storeNewRhs(pDevice, pDevice->pLastContact); pDevice->pStats->loadTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* SOLVE */ startTime = SPfrontEnd->IFseconds(); SORFailed = TWOsorSolve(pDevice, solnReal, solnImag, omega); pDevice->pStats->solveTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; if (SORFailed && AcAnalysisMethod == SOR) { AcAnalysisMethod = DIRECT; printf("SOR failed at %g Hz, switching to direct-method ac analysis.\n", omega / (2 * M_PI * TNorm) ); } else if (SORFailed) { /* Told to only do SOR, so give up. */ printf("SOR failed at %g Hz, returning null admittance.\n", omega / (2 * M_PI * TNorm) ); CMPLX_ASSIGN_VALUE(*yd, 0.0, 0.0); return (AcAnalysisMethod); } } if (AcAnalysisMethod == DIRECT) { /* LOAD */ startTime = SPfrontEnd->IFseconds(); for (index = 1; index <= pDevice->numEqns; index++) { rhsImag[index] = 0.0; } /* solve the system of equations directly */ if (!OneCarrier) { TWO_jacLoad(pDevice); } else if (OneCarrier == N_TYPE) { TWONjacLoad(pDevice); } else if (OneCarrier == P_TYPE) { TWOPjacLoad(pDevice); } storeNewRhs(pDevice, pDevice->pLastContact); spSetComplex(pDevice->matrix); for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; if (pElem->elemType == SEMICON) { dxdy = 0.25 * pElem->dx * pElem->dy; for (index = 0; index <= 3; index++) { pNode = pElem->pNodes[index]; if (pNode->nodeType != CONTACT) { if (!OneCarrier) { spADD_COMPLEX_ELEMENT(pNode->fNN, 0.0, -dxdy * omega); spADD_COMPLEX_ELEMENT(pNode->fPP, 0.0, dxdy * omega); } else if (OneCarrier == N_TYPE) { spADD_COMPLEX_ELEMENT(pNode->fNN, 0.0, -dxdy * omega); } else if (OneCarrier == P_TYPE) { spADD_COMPLEX_ELEMENT(pNode->fPP, 0.0, dxdy * omega); } } } } } pDevice->pStats->loadTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* FACTOR */ startTime = SPfrontEnd->IFseconds(); spFactor(pDevice->matrix); pDevice->pStats->factorTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* SOLVE */ startTime = SPfrontEnd->IFseconds(); spSolve(pDevice->matrix, rhsReal, solnReal, rhsImag, solnImag); pDevice->pStats->solveTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; } /* MISC */ startTime = SPfrontEnd->IFseconds(); y = contactAdmittance(pDevice, pDevice->pFirstContact, deltaVContact, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc, -y->real, -y->imag); CMPLX_ASSIGN(*yd, yAc); CMPLX_MULT_SELF_SCALAR(*yd, GNorm * pDevice->width * LNorm); pDevice->pStats->miscTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; return (AcAnalysisMethod); } int NBJT2admittance(TWOdevice *pDevice, double omega, SPcomplex *yIeVce, SPcomplex *yIcVce, SPcomplex *yIeVbe, SPcomplex *yIcVbe) { TWOcontact *pEmitContact = pDevice->pLastContact; TWOcontact *pColContact = pDevice->pFirstContact; TWOcontact *pBaseContact = pDevice->pFirstContact->next; TWOnode *pNode; TWOelem *pElem; int index, eIndex; double width = pDevice->width; double dxdy; double *solnReal, *solnImag; double *rhsReal, *rhsImag; BOOLEAN SORFailed; SPcomplex *y; SPcomplex pIeVce, pIcVce, pIeVbe, pIcVbe; SPcomplex cOmega; double startTime; /* Each time we call this counts as one AC iteration. */ pDevice->pStats->numIters[STAT_AC] += 1; pDevice->solverType = SLV_SMSIG; rhsReal = pDevice->rhs; rhsImag = pDevice->rhsImag; solnReal = pDevice->dcDeltaSolution; solnImag = pDevice->copiedSolution; /* use a normalized radian frequency */ omega *= TNorm; CMPLX_ASSIGN_VALUE(cOmega, 0.0, omega); CMPLX_ASSIGN_VALUE(pIeVce, NAN, NAN); CMPLX_ASSIGN_VALUE(pIcVce, NAN, NAN); if ((AcAnalysisMethod == SOR) || (AcAnalysisMethod == SOR_ONLY)) { /* LOAD */ startTime = SPfrontEnd->IFseconds(); /* zero the rhs before loading in the new rhs */ for (index = 1; index <= pDevice->numEqns; index++) { rhsImag[index] = 0.0; } storeNewRhs(pDevice, pColContact); pDevice->pStats->loadTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* SOLVE */ startTime = SPfrontEnd->IFseconds(); SORFailed = TWOsorSolve(pDevice, solnReal, solnImag, omega); pDevice->pStats->solveTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; if (SORFailed && AcAnalysisMethod == SOR) { AcAnalysisMethod = DIRECT; printf("SOR failed at %g Hz, switching to direct-method ac analysis.\n", omega / (2 * M_PI * TNorm) ); } else if (SORFailed) { /* Told to only do SOR, so give up. */ printf("SOR failed at %g Hz, returning null admittance.\n", omega / (2 * M_PI * TNorm) ); CMPLX_ASSIGN_VALUE(*yIeVce, 0.0, 0.0); CMPLX_ASSIGN_VALUE(*yIcVce, 0.0, 0.0); CMPLX_ASSIGN_VALUE(*yIeVbe, 0.0, 0.0); CMPLX_ASSIGN_VALUE(*yIcVbe, 0.0, 0.0); return (AcAnalysisMethod); } else { /* MISC */ startTime = SPfrontEnd->IFseconds(); y = contactAdmittance(pDevice, pEmitContact, FALSE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(pIeVce, y->real, y->imag); y = contactAdmittance(pDevice, pColContact, TRUE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(pIcVce, y->real, y->imag); pDevice->pStats->miscTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* LOAD */ startTime = SPfrontEnd->IFseconds(); /* load in the base contribution to the rhs */ for (index = 1; index <= pDevice->numEqns; index++) { rhsImag[index] = 0.0; } storeNewRhs(pDevice, pBaseContact); pDevice->pStats->loadTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* SOLVE */ startTime = SPfrontEnd->IFseconds(); SORFailed = TWOsorSolve(pDevice, solnReal, solnImag, omega); pDevice->pStats->solveTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; if (SORFailed && AcAnalysisMethod == SOR) { AcAnalysisMethod = DIRECT; printf("SOR failed at %g Hz, switching to direct-method ac analysis.\n", omega / (2 * M_PI * TNorm) ); } else if (SORFailed) { /* Told to only do SOR, so give up. */ printf("SOR failed at %g Hz, returning null admittance.\n", omega / (2 * M_PI * TNorm) ); CMPLX_ASSIGN_VALUE(*yIeVce, 0.0, 0.0); CMPLX_ASSIGN_VALUE(*yIcVce, 0.0, 0.0); CMPLX_ASSIGN_VALUE(*yIeVbe, 0.0, 0.0); CMPLX_ASSIGN_VALUE(*yIcVbe, 0.0, 0.0); return (AcAnalysisMethod); } } } if (AcAnalysisMethod == DIRECT) { /* LOAD */ startTime = SPfrontEnd->IFseconds(); for (index = 1; index <= pDevice->numEqns; index++) { rhsImag[index] = 0.0; } /* solve the system of equations directly */ if (!OneCarrier) { TWO_jacLoad(pDevice); } else if (OneCarrier == N_TYPE) { TWONjacLoad(pDevice); } else if (OneCarrier == P_TYPE) { TWOPjacLoad(pDevice); } storeNewRhs(pDevice, pColContact); spSetComplex(pDevice->matrix); for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; if (pElem->elemType == SEMICON) { dxdy = 0.25 * pElem->dx * pElem->dy; for (index = 0; index <= 3; index++) { pNode = pElem->pNodes[index]; if (pNode->nodeType != CONTACT) { if (!OneCarrier) { spADD_COMPLEX_ELEMENT(pNode->fNN, 0.0, -dxdy * omega); spADD_COMPLEX_ELEMENT(pNode->fPP, 0.0, dxdy * omega); } else if (OneCarrier == N_TYPE) { spADD_COMPLEX_ELEMENT(pNode->fNN, 0.0, -dxdy * omega); } else if (OneCarrier == P_TYPE) { spADD_COMPLEX_ELEMENT(pNode->fPP, 0.0, dxdy * omega); } } } } } pDevice->pStats->loadTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* FACTOR */ startTime = SPfrontEnd->IFseconds(); spFactor(pDevice->matrix); pDevice->pStats->factorTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* SOLVE */ startTime = SPfrontEnd->IFseconds(); spSolve(pDevice->matrix, rhsReal, solnReal, rhsImag, solnImag); pDevice->pStats->solveTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* MISC */ startTime = SPfrontEnd->IFseconds(); y = contactAdmittance(pDevice, pEmitContact, FALSE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(pIeVce, y->real, y->imag); y = contactAdmittance(pDevice, pColContact, TRUE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(pIcVce, y->real, y->imag); pDevice->pStats->miscTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* LOAD */ startTime = SPfrontEnd->IFseconds(); for (index = 1; index <= pDevice->numEqns; index++) { rhsImag[index] = 0.0; } storeNewRhs(pDevice, pBaseContact); pDevice->pStats->loadTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* FACTOR: already done, no need to repeat. */ /* SOLVE */ startTime = SPfrontEnd->IFseconds(); spSolve(pDevice->matrix, rhsReal, solnReal, rhsImag, solnImag); pDevice->pStats->solveTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; } /* MISC */ startTime = SPfrontEnd->IFseconds(); y = contactAdmittance(pDevice, pEmitContact, FALSE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(pIeVbe, y->real, y->imag); y = contactAdmittance(pDevice, pColContact, FALSE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(pIcVbe, y->real, y->imag); CMPLX_ASSIGN(*yIeVce, pIeVce); CMPLX_ASSIGN(*yIeVbe, pIeVbe); CMPLX_ASSIGN(*yIcVce, pIcVce); CMPLX_ASSIGN(*yIcVbe, pIcVbe); CMPLX_MULT_SELF_SCALAR(*yIeVce, GNorm * width * LNorm); CMPLX_MULT_SELF_SCALAR(*yIeVbe, GNorm * width * LNorm); CMPLX_MULT_SELF_SCALAR(*yIcVce, GNorm * width * LNorm); CMPLX_MULT_SELF_SCALAR(*yIcVbe, GNorm * width * LNorm); pDevice->pStats->miscTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; return (AcAnalysisMethod); } int NUMOSadmittance(TWOdevice *pDevice, double omega, struct mosAdmittances *yAc) { TWOcontact *pDContact = pDevice->pFirstContact; TWOcontact *pGContact = pDevice->pFirstContact->next; TWOcontact *pSContact = pDevice->pFirstContact->next->next; /* TWOcontact *pBContact = pDevice->pLastContact; */ TWOnode *pNode; TWOelem *pElem; int index, eIndex; double width = pDevice->width; double dxdy; double *solnReal, *solnImag; double *rhsReal, *rhsImag; BOOLEAN SORFailed; SPcomplex *y, cOmega; double startTime; /* Each time we call this counts as one AC iteration. */ pDevice->pStats->numIters[STAT_AC] += 1; pDevice->solverType = SLV_SMSIG; rhsReal = pDevice->rhs; rhsImag = pDevice->rhsImag; solnReal = pDevice->dcDeltaSolution; solnImag = pDevice->copiedSolution; /* use a normalized radian frequency */ omega *= TNorm; CMPLX_ASSIGN_VALUE(cOmega, 0.0, omega); if ((AcAnalysisMethod == SOR) || (AcAnalysisMethod == SOR_ONLY)) { /* LOAD */ startTime = SPfrontEnd->IFseconds(); /* zero the rhs before loading in the new rhs */ for (index = 1; index <= pDevice->numEqns; index++) { rhsImag[index] = 0.0; } storeNewRhs(pDevice, pDContact); pDevice->pStats->loadTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* SOLVE */ startTime = SPfrontEnd->IFseconds(); SORFailed = TWOsorSolve(pDevice, solnReal, solnImag, omega); pDevice->pStats->solveTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; if (SORFailed && AcAnalysisMethod == SOR) { AcAnalysisMethod = DIRECT; printf("SOR failed at %g Hz, switching to direct-method ac analysis.\n", omega / (2 * M_PI * TNorm) ); } else if (SORFailed) { /* Told to only do SOR, so give up. */ printf("SOR failed at %g Hz, returning null admittance.\n", omega / (2 * M_PI * TNorm) ); CMPLX_ASSIGN_VALUE(yAc->yIdVdb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIdVsb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIdVgb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIsVdb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIsVsb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIsVgb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIgVdb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIgVsb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIgVgb, 0.0, 0.0); return (AcAnalysisMethod); } else { /* MISC */ startTime = SPfrontEnd->IFseconds(); y = contactAdmittance(pDevice, pDContact, TRUE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIdVdb, y->real, y->imag); y = contactAdmittance(pDevice, pSContact, FALSE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIsVdb, y->real, y->imag); y = GateTypeAdmittance(pDevice, pGContact, FALSE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIgVdb, y->real, y->imag); pDevice->pStats->miscTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* LOAD */ startTime = SPfrontEnd->IFseconds(); /* load in the source contribution to the rhs */ for (index = 1; index <= pDevice->numEqns; index++) { rhsImag[index] = 0.0; } storeNewRhs(pDevice, pSContact); pDevice->pStats->loadTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* SOLVE */ startTime = SPfrontEnd->IFseconds(); SORFailed = TWOsorSolve(pDevice, solnReal, solnImag, omega); pDevice->pStats->solveTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; if (SORFailed && AcAnalysisMethod == SOR) { AcAnalysisMethod = DIRECT; printf("SOR failed at %g Hz, switching to direct-method ac analysis.\n", omega / (2 * M_PI * TNorm) ); } else if (SORFailed) { /* Told to only do SOR, so give up. */ printf("SOR failed at %g Hz, returning null admittance.\n", omega / (2 * M_PI * TNorm) ); CMPLX_ASSIGN_VALUE(yAc->yIdVdb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIdVsb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIdVgb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIsVdb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIsVsb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIsVgb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIgVdb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIgVsb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIgVgb, 0.0, 0.0); return (AcAnalysisMethod); } else { /* MISC */ startTime = SPfrontEnd->IFseconds(); y = contactAdmittance(pDevice, pDContact, FALSE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIdVsb, y->real, y->imag); y = contactAdmittance(pDevice, pSContact, TRUE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIsVsb, y->real, y->imag); y = GateTypeAdmittance(pDevice, pGContact, FALSE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIgVsb, y->real, y->imag); pDevice->pStats->miscTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* LOAD */ startTime = SPfrontEnd->IFseconds(); /* load in the gate contribution to the rhs */ for (index = 1; index <= pDevice->numEqns; index++) { rhsImag[index] = 0.0; } storeNewRhs(pDevice, pGContact); pDevice->pStats->loadTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* SOLVE */ startTime = SPfrontEnd->IFseconds(); SORFailed = TWOsorSolve(pDevice, solnReal, solnImag, omega); pDevice->pStats->solveTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; if (SORFailed && AcAnalysisMethod == SOR) { AcAnalysisMethod = DIRECT; printf("SOR failed at %g Hz, switching to direct-method ac analysis.\n", omega / (2 * M_PI * TNorm) ); } else if (SORFailed) { /* Told to only do SOR, so give up. */ printf("SOR failed at %g Hz, returning null admittance.\n", omega / (2 * M_PI * TNorm) ); CMPLX_ASSIGN_VALUE(yAc->yIdVdb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIdVsb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIdVgb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIsVdb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIsVsb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIsVgb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIgVdb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIgVsb, 0.0, 0.0); CMPLX_ASSIGN_VALUE(yAc->yIgVgb, 0.0, 0.0); return (AcAnalysisMethod); } } } } if (AcAnalysisMethod == DIRECT) { /* solve the system of equations directly */ /* LOAD */ startTime = SPfrontEnd->IFseconds(); for (index = 1; index <= pDevice->numEqns; index++) { rhsImag[index] = 0.0; } storeNewRhs(pDevice, pDContact); /* Need to load & factor jacobian once. */ if (!OneCarrier) { TWO_jacLoad(pDevice); } else if (OneCarrier == N_TYPE) { TWONjacLoad(pDevice); } else if (OneCarrier == P_TYPE) { TWOPjacLoad(pDevice); } spSetComplex(pDevice->matrix); for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; if (pElem->elemType == SEMICON) { dxdy = 0.25 * pElem->dx * pElem->dy; for (index = 0; index <= 3; index++) { pNode = pElem->pNodes[index]; if (pNode->nodeType != CONTACT) { if (!OneCarrier) { spADD_COMPLEX_ELEMENT(pNode->fNN, 0.0, -dxdy * omega); spADD_COMPLEX_ELEMENT(pNode->fPP, 0.0, dxdy * omega); } else if (OneCarrier == N_TYPE) { spADD_COMPLEX_ELEMENT(pNode->fNN, 0.0, -dxdy * omega); } else if (OneCarrier == P_TYPE) { spADD_COMPLEX_ELEMENT(pNode->fPP, 0.0, dxdy * omega); } } } } } pDevice->pStats->loadTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* FACTOR */ startTime = SPfrontEnd->IFseconds(); spFactor(pDevice->matrix); pDevice->pStats->factorTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* SOLVE */ startTime = SPfrontEnd->IFseconds(); spSolve(pDevice->matrix, rhsReal, solnReal, rhsImag, solnImag); pDevice->pStats->solveTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* MISC */ startTime = SPfrontEnd->IFseconds(); y = contactAdmittance(pDevice, pDContact, TRUE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIdVdb, y->real, y->imag); y = contactAdmittance(pDevice, pSContact, FALSE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIsVdb, y->real, y->imag); y = GateTypeAdmittance(pDevice, pGContact, FALSE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIgVdb, y->real, y->imag); pDevice->pStats->miscTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* LOAD */ startTime = SPfrontEnd->IFseconds(); for (index = 1; index <= pDevice->numEqns; index++) { rhsImag[index] = 0.0; } storeNewRhs(pDevice, pSContact); pDevice->pStats->loadTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* FACTOR: already done, no need to repeat. */ /* SOLVE */ startTime = SPfrontEnd->IFseconds(); spSolve(pDevice->matrix, rhsReal, solnReal, rhsImag, solnImag); pDevice->pStats->solveTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* MISC */ startTime = SPfrontEnd->IFseconds(); y = contactAdmittance(pDevice, pDContact, FALSE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIdVsb, y->real, y->imag); y = contactAdmittance(pDevice, pSContact, TRUE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIsVsb, y->real, y->imag); y = GateTypeAdmittance(pDevice, pGContact, FALSE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIgVsb, y->real, y->imag); pDevice->pStats->miscTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* LOAD */ startTime = SPfrontEnd->IFseconds(); for (index = 1; index <= pDevice->numEqns; index++) { rhsImag[index] = 0.0; } storeNewRhs(pDevice, pGContact); pDevice->pStats->loadTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; /* FACTOR: already done, no need to repeat. */ /* SOLVE */ startTime = SPfrontEnd->IFseconds(); spSolve(pDevice->matrix, rhsReal, solnReal, rhsImag, solnImag); pDevice->pStats->solveTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; } /* MISC */ startTime = SPfrontEnd->IFseconds(); y = contactAdmittance(pDevice, pDContact, FALSE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIdVgb, y->real, y->imag); y = contactAdmittance(pDevice, pSContact, FALSE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIsVgb, y->real, y->imag); y = GateTypeAdmittance(pDevice, pGContact, TRUE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIgVgb, y->real, y->imag); CMPLX_MULT_SELF_SCALAR(yAc->yIdVdb, GNorm * width * LNorm); CMPLX_MULT_SELF_SCALAR(yAc->yIdVsb, GNorm * width * LNorm); CMPLX_MULT_SELF_SCALAR(yAc->yIdVgb, GNorm * width * LNorm); CMPLX_MULT_SELF_SCALAR(yAc->yIsVdb, GNorm * width * LNorm); CMPLX_MULT_SELF_SCALAR(yAc->yIsVsb, GNorm * width * LNorm); CMPLX_MULT_SELF_SCALAR(yAc->yIsVgb, GNorm * width * LNorm); CMPLX_MULT_SELF_SCALAR(yAc->yIgVdb, GNorm * width * LNorm); CMPLX_MULT_SELF_SCALAR(yAc->yIgVsb, GNorm * width * LNorm); CMPLX_MULT_SELF_SCALAR(yAc->yIgVgb, GNorm * width * LNorm); pDevice->pStats->miscTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; return (AcAnalysisMethod); } BOOLEAN TWOsorSolve(TWOdevice *pDevice, double *xReal, double *xImag, double omega) { double dxdy; double wRelax = 1.0; /* SOR relaxation parameter */ double *rhsReal = pDevice->rhs; double *rhsSOR = pDevice->rhsImag; BOOLEAN SORConverged = FALSE; BOOLEAN SORFailed = FALSE; int numEqns = pDevice->numEqns; int iterationNum; int indexN, indexP; int index, eIndex; TWOnode *pNode; TWOelem *pElem; /* clear xReal and xImag arrays */ for (index = 1; index <= numEqns; index++) { xReal[index] = 0.0; xImag[index] = 0.0; } iterationNum = 1; for (; (!SORConverged) &&(!SORFailed); iterationNum++) { for (index = 1; index <= numEqns; index++) { rhsSOR[index] = 0.0; } for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; dxdy = 0.25 * pElem->dx * pElem->dy; for (index = 0; index <= 3; index++) { pNode = pElem->pNodes[index]; if ((pNode->nodeType != CONTACT) && (pElem->elemType == SEMICON)) { if (!OneCarrier) { indexN = pNode->nEqn; indexP = pNode->pEqn; rhsSOR[indexN] -= dxdy * omega * xImag[indexN]; rhsSOR[indexP] += dxdy * omega * xImag[indexP]; } else if (OneCarrier == N_TYPE) { indexN = pNode->nEqn; rhsSOR[indexN] -= dxdy * omega * xImag[indexN]; } else if (OneCarrier == P_TYPE) { indexP = pNode->pEqn; rhsSOR[indexP] += dxdy * omega * xImag[indexP]; } } } } /* now add the terms from rhs to rhsImag */ for (index = 1; index <= numEqns; index++) { rhsSOR[index] += rhsReal[index]; } /* compute xReal(k+1). solution stored in rhsImag */ spSolve(pDevice->matrix, rhsSOR, rhsSOR, NULL, NULL); /* modify solution when wRelax is not 1 */ if (wRelax != 1) { for (index = 1; index <= numEqns; index++) { rhsSOR[index] = (1 - wRelax) * xReal[index] + wRelax * rhsSOR[index]; } } if (iterationNum > 1) { SORConverged = hasSORConverged(xReal, rhsSOR, numEqns); } /* copy real solution into xReal */ for (index = 1; index <= numEqns; index++) { xReal[index] = rhsSOR[index]; } /* now compute the imaginary part of the solution xImag */ for (index = 1; index <= numEqns; index++) { rhsSOR[index] = 0.0; } for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; dxdy = 0.25 * pElem->dx * pElem->dy; for (index = 0; index <= 3; index++) { pNode = pElem->pNodes[index]; if ((pNode->nodeType != CONTACT) && (pElem->elemType == SEMICON)) { if (!OneCarrier) { indexN = pNode->nEqn; indexP = pNode->pEqn; rhsSOR[indexN] += dxdy * omega * xReal[indexN]; rhsSOR[indexP] -= dxdy * omega * xReal[indexP]; } else if (OneCarrier == N_TYPE) { indexN = pNode->nEqn; rhsSOR[indexN] += dxdy * omega * xReal[indexN]; } else if (OneCarrier == P_TYPE) { indexP = pNode->pEqn; rhsSOR[indexP] -= dxdy * omega * xReal[indexP]; } } } } /* compute xImag(k+1) */ spSolve(pDevice->matrix, rhsSOR, rhsSOR, NULL, NULL); /* modify solution when wRelax is not 1 */ if (wRelax != 1) { for (index = 1; index <= numEqns; index++) { rhsSOR[index] = (1 - wRelax) * xImag[index] + wRelax * rhsSOR[index]; } } if (iterationNum > 1) { SORConverged = SORConverged && hasSORConverged(xImag, rhsSOR, numEqns); } /* copy imag solution into xImag */ for (index = 1; index <= numEqns; index++) { xImag[index] = rhsSOR[index]; } if ((iterationNum > 4) && !SORConverged) { SORFailed = TRUE; } if (TWOacDebug) printf("SOR iteration number = %d\n", iterationNum); } return (SORFailed); } SPcomplex * contactAdmittance(TWOdevice *pDevice, TWOcontact *pContact, BOOLEAN delVContact, double *xReal, double *xImag, SPcomplex *cOmega) { TWOnode *pNode, *pHNode = NULL, *pVNode = NULL; TWOedge *pHEdge = NULL, *pVEdge = NULL; int index, i, indexPsi, indexN, indexP, numContactNodes; TWOelem *pElem; SPcomplex psiAc, nAc, pAc; SPcomplex prod1, prod2, sum; double temp; NG_IGNORE(pDevice); CMPLX_ASSIGN_VALUE(yTotal, 0.0, 0.0); numContactNodes = pContact->numNodes; for (index = 0; index < numContactNodes; index++) { pNode = pContact->pNodes[index]; for (i = 0; i <= 3; i++) { pElem = pNode->pElems[i]; if (pElem != NULL) { switch (i) { case 0: /* the TL element */ pHNode = pElem->pBLNode; pVNode = pElem->pTRNode; pHEdge = pElem->pBotEdge; pVEdge = pElem->pRightEdge; if (pElem->elemType == SEMICON) { /* compute the derivatives with n,p */ if (pHNode->nodeType != CONTACT) { indexN = pHNode->nEqn; indexP = pHNode->pEqn; CMPLX_ASSIGN_VALUE(nAc, xReal[indexN], xImag[indexN]); CMPLX_ASSIGN_VALUE(pAc, xReal[indexP], xImag[indexP]); CMPLX_MULT_SCALAR(prod1, nAc, pHEdge->dJnDn); CMPLX_MULT_SCALAR(prod2, pAc, pHEdge->dJpDp); CMPLX_ADD(sum, prod1, prod2); CMPLX_MULT_SCALAR(prod1, sum, 0.5 * pElem->dy); CMPLX_SUBT_ASSIGN(yTotal, prod1); } if (pVNode->nodeType != CONTACT) { indexN = pVNode->nEqn; indexP = pVNode->pEqn; CMPLX_ASSIGN_VALUE(nAc, xReal[indexN], xImag[indexN]); CMPLX_ASSIGN_VALUE(pAc, xReal[indexP], xImag[indexP]); CMPLX_MULT_SCALAR(prod1, nAc, pVEdge->dJnDn); CMPLX_MULT_SCALAR(prod2, pAc, pVEdge->dJpDp); CMPLX_ADD(sum, prod1, prod2); CMPLX_MULT_SCALAR(prod1, sum, 0.5 * pElem->dx); CMPLX_SUBT_ASSIGN(yTotal, prod1); } } break; case 1: /* the TR element */ pHNode = pElem->pBRNode; pVNode = pElem->pTLNode; pHEdge = pElem->pBotEdge; pVEdge = pElem->pLeftEdge; if (pElem->elemType == SEMICON) { /* compute the derivatives with n,p */ if (pHNode->nodeType != CONTACT) { indexN = pHNode->nEqn; indexP = pHNode->pEqn; CMPLX_ASSIGN_VALUE(nAc, xReal[indexN], xImag[indexN]); CMPLX_ASSIGN_VALUE(pAc, xReal[indexP], xImag[indexP]); CMPLX_MULT_SCALAR(prod1, nAc, pHEdge->dJnDnP1); CMPLX_MULT_SCALAR(prod2, pAc, pHEdge->dJpDpP1); CMPLX_ADD(sum, prod1, prod2); CMPLX_MULT_SCALAR(prod1, sum, 0.5 * pElem->dy); CMPLX_ADD_ASSIGN(yTotal, prod1); } if (pVNode->nodeType != CONTACT) { indexN = pVNode->nEqn; indexP = pVNode->pEqn; CMPLX_ASSIGN_VALUE(nAc, xReal[indexN], xImag[indexN]); CMPLX_ASSIGN_VALUE(pAc, xReal[indexP], xImag[indexP]); CMPLX_MULT_SCALAR(prod1, nAc, pVEdge->dJnDn); CMPLX_MULT_SCALAR(prod2, pAc, pVEdge->dJpDp); CMPLX_ADD(sum, prod1, prod2); CMPLX_MULT_SCALAR(prod1, sum, 0.5 * pElem->dx); CMPLX_SUBT_ASSIGN(yTotal, prod1); } } break; case 2: /* the BR element */ pHNode = pElem->pTRNode; pVNode = pElem->pBLNode; pHEdge = pElem->pTopEdge; pVEdge = pElem->pLeftEdge; if (pElem->elemType == SEMICON) { /* compute the derivatives with n,p */ if (pHNode->nodeType != CONTACT) { indexN = pHNode->nEqn; indexP = pHNode->pEqn; CMPLX_ASSIGN_VALUE(nAc, xReal[indexN], xImag[indexN]); CMPLX_ASSIGN_VALUE(pAc, xReal[indexP], xImag[indexP]); CMPLX_MULT_SCALAR(prod1, nAc, pHEdge->dJnDnP1); CMPLX_MULT_SCALAR(prod2, pAc, pHEdge->dJpDpP1); CMPLX_ADD(sum, prod1, prod2); CMPLX_MULT_SCALAR(prod1, sum, 0.5 * pElem->dy); CMPLX_ADD_ASSIGN(yTotal, prod1); } if (pVNode->nodeType != CONTACT) { indexN = pVNode->nEqn; indexP = pVNode->pEqn; CMPLX_ASSIGN_VALUE(nAc, xReal[indexN], xImag[indexN]); CMPLX_ASSIGN_VALUE(pAc, xReal[indexP], xImag[indexP]); CMPLX_MULT_SCALAR(prod1, nAc, pVEdge->dJnDnP1); CMPLX_MULT_SCALAR(prod2, pAc, pVEdge->dJpDpP1); CMPLX_ADD(sum, prod1, prod2); CMPLX_MULT_SCALAR(prod1, sum, 0.5 * pElem->dx); CMPLX_ADD_ASSIGN(yTotal, prod1); } } break; case 3: /* the BL element */ pHNode = pElem->pTLNode; pVNode = pElem->pBRNode; pHEdge = pElem->pTopEdge; pVEdge = pElem->pRightEdge; if (pElem->elemType == SEMICON) { /* compute the derivatives with n,p */ if (pHNode->nodeType != CONTACT) { indexN = pHNode->nEqn; indexP = pHNode->pEqn; CMPLX_ASSIGN_VALUE(nAc, xReal[indexN], xImag[indexN]); CMPLX_ASSIGN_VALUE(pAc, xReal[indexP], xImag[indexP]); CMPLX_MULT_SCALAR(prod1, nAc, pHEdge->dJnDn); CMPLX_MULT_SCALAR(prod2, pAc, pHEdge->dJpDp); CMPLX_ADD(sum, prod1, prod2); CMPLX_MULT_SCALAR(prod1, sum, 0.5 * pElem->dy); CMPLX_SUBT_ASSIGN(yTotal, prod1); } if (pVNode->nodeType != CONTACT) { indexN = pVNode->nEqn; indexP = pVNode->pEqn; CMPLX_ASSIGN_VALUE(nAc, xReal[indexN], xImag[indexN]); CMPLX_ASSIGN_VALUE(pAc, xReal[indexP], xImag[indexP]); CMPLX_MULT_SCALAR(prod1, nAc, pVEdge->dJnDnP1); CMPLX_MULT_SCALAR(prod2, pAc, pVEdge->dJpDpP1); CMPLX_ADD(sum, prod1, prod2); CMPLX_MULT_SCALAR(prod1, sum, 0.5 * pElem->dx); CMPLX_ADD_ASSIGN(yTotal, prod1); } } break; } if (pElem->elemType == SEMICON) { if (pHNode->nodeType != CONTACT) { indexPsi = pHNode->psiEqn; CMPLX_ASSIGN_VALUE(psiAc, xReal[indexPsi], xImag[indexPsi]); temp = 0.5 * pElem->dy * (pHEdge->dJnDpsiP1 + pHEdge->dJpDpsiP1); CMPLX_MULT_SCALAR(prod1, psiAc, temp); CMPLX_ADD_ASSIGN(yTotal, prod1); if (delVContact) { CMPLX_ADD_SELF_SCALAR(yTotal, -temp); } } if (pVNode->nodeType != CONTACT) { indexPsi = pVNode->psiEqn; CMPLX_ASSIGN_VALUE(psiAc, xReal[indexPsi], xImag[indexPsi]); temp = 0.5 * pElem->dx * (pVEdge->dJnDpsiP1 + pVEdge->dJpDpsiP1); CMPLX_MULT_SCALAR(prod1, psiAc, temp); CMPLX_ADD_ASSIGN(yTotal, prod1); if (delVContact) { CMPLX_ADD_SELF_SCALAR(yTotal, -temp); } } } /* displacement current terms */ if (pHNode->nodeType != CONTACT) { indexPsi = pHNode->psiEqn; CMPLX_ASSIGN_VALUE(psiAc, xReal[indexPsi], xImag[indexPsi]); CMPLX_MULT_SCALAR(prod1, *cOmega, pElem->epsRel * 0.5 * pElem->dyOverDx); CMPLX_MULT(prod2, prod1, psiAc); CMPLX_SUBT_ASSIGN(yTotal, prod2); if (delVContact) { CMPLX_ADD_ASSIGN(yTotal, prod1); } } if (pVNode->nodeType != CONTACT) { indexPsi = pVNode->psiEqn; CMPLX_ASSIGN_VALUE(psiAc, xReal[indexPsi], xImag[indexPsi]); CMPLX_MULT_SCALAR(prod1, *cOmega, pElem->epsRel * 0.5 * pElem->dxOverDy); CMPLX_MULT(prod2, prod1, psiAc); CMPLX_SUBT_ASSIGN(yTotal, prod2); if (delVContact) { CMPLX_ADD_ASSIGN(yTotal, prod1); } } } } } return (&yTotal); /* XXX */ } SPcomplex * oxideAdmittance(TWOdevice *pDevice, TWOcontact *pContact, BOOLEAN delVContact, double *xReal, double *xImag, SPcomplex *cOmega) { TWOnode *pNode, *pHNode = NULL, *pVNode = NULL; TWOedge *pHEdge, *pVEdge; int index, i, indexPsi, numContactNodes; TWOelem *pElem; SPcomplex psiAc; SPcomplex prod1, prod2; NG_IGNORE(pDevice); CMPLX_ASSIGN_VALUE(yTotal, 0.0, 0.0); numContactNodes = pContact->numNodes; for (index = 0; index < numContactNodes; index++) { pNode = pContact->pNodes[index]; for (i = 0; i <= 3; i++) { pElem = pNode->pElems[i]; if (pElem != NULL) { switch (i) { case 0: /* the TL element */ pHNode = pElem->pBLNode; pVNode = pElem->pTRNode; pHEdge = pElem->pBotEdge; pVEdge = pElem->pRightEdge; break; case 1: /* the TR element */ pHNode = pElem->pBRNode; pVNode = pElem->pTLNode; pHEdge = pElem->pBotEdge; pVEdge = pElem->pLeftEdge; break; case 2: /* the BR element */ pHNode = pElem->pTRNode; pVNode = pElem->pBLNode; pHEdge = pElem->pTopEdge; pVEdge = pElem->pLeftEdge; break; case 3: /* the BL element */ pHNode = pElem->pTLNode; pVNode = pElem->pBRNode; pHEdge = pElem->pTopEdge; pVEdge = pElem->pRightEdge; break; } /* displacement current terms */ if (pHNode->nodeType != CONTACT) { indexPsi = pHNode->psiEqn; CMPLX_ASSIGN_VALUE(psiAc, xReal[indexPsi], xImag[indexPsi]); CMPLX_MULT_SCALAR(prod1, *cOmega, pElem->epsRel * 0.5 * pElem->dyOverDx); CMPLX_MULT(prod2, prod1, psiAc); CMPLX_SUBT_ASSIGN(yTotal, prod2); if (delVContact) { CMPLX_ADD_ASSIGN(yTotal, prod1); } } if (pVNode->nodeType != CONTACT) { indexPsi = pVNode->psiEqn; CMPLX_ASSIGN_VALUE(psiAc, xReal[indexPsi], xImag[indexPsi]); CMPLX_MULT_SCALAR(prod1, *cOmega, pElem->epsRel * 0.5 * pElem->dxOverDy); CMPLX_MULT(prod2, prod1, psiAc); CMPLX_SUBT_ASSIGN(yTotal, prod2); if (delVContact) { CMPLX_ADD_ASSIGN(yTotal, prod1); } } } } } return (&yTotal); } void NUMD2ys(TWOdevice *pDevice, SPcomplex *s, SPcomplex *yIn) { TWOnode *pNode; TWOelem *pElem; int index, eIndex; double dxdy; double *solnReal, *solnImag; double *rhsReal, *rhsImag; SPcomplex yAc, *y; BOOLEAN deltaVContact = FALSE; SPcomplex temp, cOmega; /* * change context names of solution vectors for ac analysis dcDeltaSolution * stores the real part and copiedSolution stores the imaginary part of the * ac solution vector */ pDevice->solverType = SLV_SMSIG; rhsReal = pDevice->rhs; rhsImag = pDevice->rhsImag; solnReal = pDevice->dcDeltaSolution; solnImag = pDevice->copiedSolution; /* use a normalized radian frequency */ CMPLX_MULT_SCALAR(cOmega, *s, TNorm); for (index = 1; index <= pDevice->numEqns; index++) { rhsImag[index] = 0.0; } /* solve the system of equations directly */ if (!OneCarrier) { TWO_jacLoad(pDevice); } else if (OneCarrier == N_TYPE) { TWONjacLoad(pDevice); } else if (OneCarrier == P_TYPE) { TWOPjacLoad(pDevice); } storeNewRhs(pDevice, pDevice->pLastContact); spSetComplex(pDevice->matrix); for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; if (pElem->elemType == SEMICON) { dxdy = 0.25 * pElem->dx * pElem->dy; for (index = 0; index <= 3; index++) { pNode = pElem->pNodes[index]; if (pNode->nodeType != CONTACT) { if (!OneCarrier) { CMPLX_MULT_SCALAR(temp, cOmega, dxdy); spADD_COMPLEX_ELEMENT(pNode->fNN, -temp.real, -temp.imag); spADD_COMPLEX_ELEMENT(pNode->fPP, temp.real, temp.imag); } else if (OneCarrier == N_TYPE) { CMPLX_MULT_SCALAR(temp, cOmega, dxdy); spADD_COMPLEX_ELEMENT(pNode->fNN, -temp.real, -temp.imag); } else if (OneCarrier == P_TYPE) { CMPLX_MULT_SCALAR(temp, cOmega, dxdy); spADD_COMPLEX_ELEMENT(pNode->fPP, temp.real, temp.imag); } } } } } spFactor(pDevice->matrix); spSolve(pDevice->matrix, rhsReal, solnReal, rhsImag, solnImag); y = contactAdmittance(pDevice, pDevice->pFirstContact, deltaVContact, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc, y->real, y->imag); CMPLX_ASSIGN(*yIn, yAc); CMPLX_NEGATE_SELF(*yIn); CMPLX_MULT_SELF_SCALAR(*yIn, GNorm * pDevice->width * LNorm); } void NBJT2ys(TWOdevice *pDevice, SPcomplex *s, SPcomplex *yIeVce, SPcomplex *yIcVce, SPcomplex *yIeVbe, SPcomplex *yIcVbe) { TWOcontact *pEmitContact = pDevice->pLastContact; TWOcontact *pColContact = pDevice->pFirstContact; TWOcontact *pBaseContact = pDevice->pFirstContact->next; TWOnode *pNode; TWOelem *pElem; int index, eIndex; double width = pDevice->width; double dxdy; double *solnReal, *solnImag; double *rhsReal, *rhsImag; SPcomplex *y; SPcomplex pIeVce, pIcVce, pIeVbe, pIcVbe; SPcomplex temp, cOmega; pDevice->solverType = SLV_SMSIG; rhsReal = pDevice->rhs; rhsImag = pDevice->rhsImag; solnReal = pDevice->dcDeltaSolution; solnImag = pDevice->copiedSolution; /* use a normalized radian frequency */ CMPLX_MULT_SCALAR(cOmega, *s, TNorm); for (index = 1; index <= pDevice->numEqns; index++) { rhsImag[index] = 0.0; } /* solve the system of equations directly */ if (!OneCarrier) { TWO_jacLoad(pDevice); } else if (OneCarrier == N_TYPE) { TWONjacLoad(pDevice); } else if (OneCarrier == P_TYPE) { TWOPjacLoad(pDevice); } storeNewRhs(pDevice, pColContact); spSetComplex(pDevice->matrix); for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; if (pElem->elemType == SEMICON) { dxdy = 0.25 * pElem->dx * pElem->dy; for (index = 0; index <= 3; index++) { pNode = pElem->pNodes[index]; if (pNode->nodeType != CONTACT) { if (!OneCarrier) { CMPLX_MULT_SCALAR(temp, cOmega, dxdy); spADD_COMPLEX_ELEMENT(pNode->fNN, -temp.real, -temp.imag); spADD_COMPLEX_ELEMENT(pNode->fPP, temp.real, temp.imag); } else if (OneCarrier == N_TYPE) { CMPLX_MULT_SCALAR(temp, cOmega, dxdy); spADD_COMPLEX_ELEMENT(pNode->fNN, -temp.real, -temp.imag); } else if (OneCarrier == P_TYPE) { CMPLX_MULT_SCALAR(temp, cOmega, dxdy); spADD_COMPLEX_ELEMENT(pNode->fPP, temp.real, temp.imag); } } } } } spFactor(pDevice->matrix); spSolve(pDevice->matrix, rhsReal, solnReal, rhsImag, solnImag); y = contactAdmittance(pDevice, pEmitContact, FALSE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(pIeVce, y->real, y->imag); y = contactAdmittance(pDevice, pColContact, TRUE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(pIcVce, y->real, y->imag); for (index = 1; index <= pDevice->numEqns; index++) { rhsImag[index] = 0.0; } storeNewRhs(pDevice, pBaseContact); /* don't need to LU factor the jacobian since it exists */ spSolve(pDevice->matrix, rhsReal, solnReal, rhsImag, solnImag); y = contactAdmittance(pDevice, pEmitContact, FALSE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(pIeVbe, y->real, y->imag); y = contactAdmittance(pDevice, pColContact, FALSE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(pIcVbe, y->real, y->imag); CMPLX_ASSIGN(*yIeVce, pIeVce); CMPLX_ASSIGN(*yIeVbe, pIeVbe); CMPLX_ASSIGN(*yIcVce, pIcVce); CMPLX_ASSIGN(*yIcVbe, pIcVbe); CMPLX_MULT_SELF_SCALAR(*yIeVce, GNorm * width * LNorm); CMPLX_MULT_SELF_SCALAR(*yIeVbe, GNorm * width * LNorm); CMPLX_MULT_SELF_SCALAR(*yIcVce, GNorm * width * LNorm); CMPLX_MULT_SELF_SCALAR(*yIcVbe, GNorm * width * LNorm); } void NUMOSys(TWOdevice *pDevice, SPcomplex *s, struct mosAdmittances *yAc) { TWOcontact *pDContact = pDevice->pFirstContact; TWOcontact *pGContact = pDevice->pFirstContact->next; TWOcontact *pSContact = pDevice->pFirstContact->next->next; /* TWOcontact *pBContact = pDevice->pLastContact; */ TWOnode *pNode; TWOelem *pElem; int index, eIndex; double width = pDevice->width; double dxdy; double *rhsReal, *rhsImag; double *solnReal, *solnImag; SPcomplex *y; SPcomplex temp, cOmega; pDevice->solverType = SLV_SMSIG; rhsReal = pDevice->rhs; rhsImag = pDevice->rhsImag; solnReal = pDevice->dcDeltaSolution; solnImag = pDevice->copiedSolution; /* use a normalized radian frequency */ CMPLX_MULT_SCALAR(cOmega, *s, TNorm); for (index = 1; index <= pDevice->numEqns; index++) { rhsImag[index] = 0.0; } /* solve the system of equations directly */ if (!OneCarrier) { TWO_jacLoad(pDevice); } else if (OneCarrier == N_TYPE) { TWONjacLoad(pDevice); } else if (OneCarrier == P_TYPE) { TWOPjacLoad(pDevice); } storeNewRhs(pDevice, pDContact); spSetComplex(pDevice->matrix); for (eIndex = 1; eIndex <= pDevice->numElems; eIndex++) { pElem = pDevice->elements[eIndex]; if (pElem->elemType == SEMICON) { dxdy = 0.25 * pElem->dx * pElem->dy; for (index = 0; index <= 3; index++) { pNode = pElem->pNodes[index]; if (pNode->nodeType != CONTACT) { if (!OneCarrier) { CMPLX_MULT_SCALAR(temp, cOmega, dxdy); spADD_COMPLEX_ELEMENT(pNode->fNN, -temp.real, -temp.imag); spADD_COMPLEX_ELEMENT(pNode->fPP, temp.real, temp.imag); } else if (OneCarrier == N_TYPE) { CMPLX_MULT_SCALAR(temp, cOmega, dxdy); spADD_COMPLEX_ELEMENT(pNode->fNN, -temp.real, -temp.imag); } else if (OneCarrier == P_TYPE) { CMPLX_MULT_SCALAR(temp, cOmega, dxdy); spADD_COMPLEX_ELEMENT(pNode->fPP, temp.real, temp.imag); } } } } } spFactor(pDevice->matrix); spSolve(pDevice->matrix, rhsReal, solnReal, rhsImag, solnImag); y = contactAdmittance(pDevice, pDContact, TRUE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIdVdb, y->real, y->imag); y = contactAdmittance(pDevice, pSContact, FALSE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIsVdb, y->real, y->imag); y = GateTypeAdmittance(pDevice, pGContact, FALSE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIgVdb, y->real, y->imag); for (index = 1; index <= pDevice->numEqns; index++) { rhsImag[index] = 0.0; } storeNewRhs(pDevice, pSContact); /* don't need to LU factor the jacobian since it exists */ spSolve(pDevice->matrix, rhsReal, solnReal, rhsImag, solnImag); y = contactAdmittance(pDevice, pDContact, FALSE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIdVsb, y->real, y->imag); y = contactAdmittance(pDevice, pSContact, TRUE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIsVsb, y->real, y->imag); y = GateTypeAdmittance(pDevice, pGContact, FALSE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIgVsb, y->real, y->imag); for (index = 1; index <= pDevice->numEqns; index++) { rhsImag[index] = 0.0; } storeNewRhs(pDevice, pGContact); spSolve(pDevice->matrix, rhsReal, solnReal, rhsImag, solnImag); y = contactAdmittance(pDevice, pDContact, FALSE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIdVgb, y->real, y->imag); y = contactAdmittance(pDevice, pSContact, FALSE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIsVgb, y->real, y->imag); y = GateTypeAdmittance(pDevice, pGContact, TRUE, solnReal, solnImag, &cOmega); CMPLX_ASSIGN_VALUE(yAc->yIgVgb, y->real, y->imag); CMPLX_MULT_SELF_SCALAR(yAc->yIdVdb, GNorm * width * LNorm); CMPLX_MULT_SELF_SCALAR(yAc->yIdVsb, GNorm * width * LNorm); CMPLX_MULT_SELF_SCALAR(yAc->yIdVgb, GNorm * width * LNorm); CMPLX_MULT_SELF_SCALAR(yAc->yIsVdb, GNorm * width * LNorm); CMPLX_MULT_SELF_SCALAR(yAc->yIsVsb, GNorm * width * LNorm); CMPLX_MULT_SELF_SCALAR(yAc->yIsVgb, GNorm * width * LNorm); CMPLX_MULT_SELF_SCALAR(yAc->yIgVdb, GNorm * width * LNorm); CMPLX_MULT_SELF_SCALAR(yAc->yIgVsb, GNorm * width * LNorm); CMPLX_MULT_SELF_SCALAR(yAc->yIgVgb, GNorm * width * LNorm); } tmpk8ny_4pz/src/ciderlib/twod/readme0000644000175000017500000000163313546075722017664 0ustar carstencarstenDirectory: twod --------------- This directory contains the files that are primarily responsible for implementing the 2D device simulator. It also contains files that help interface the circuit simulator to the device simulator. Most functions that are common to all 2D device simulations start with the prefix TWO, e.g. TWObiasSolve. The device-specific routines start with either NUMD2, NBJT2 or NUMOS, e.g. NUMD2admittance, NBJTproject or NUMOSconductance. The simulator contains a Poisson Solver for equilibrium, and a Two-carrier solver and One-carrier solvers for bias solutions. An attempt has been made to keep the function names parallel in the four portions. Poisson routines are identified with a 'Q' (for charge only) after the TWO, Full solver routines are identified with an underscore '_', Electron-current-only routines are identified with an 'N', and Hole-current-only routines are identified with a 'P'. tmpk8ny_4pz/src/ciderlib/twod/twosetbc.c0000644000175000017500000000454013546075722020502 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/twomesh.h" #include "ngspice/twodev.h" #include "twoddefs.h" #include "twodext.h" /* Forward declarations */ static void setDirichlet(TWOcontact *, double); void NUMD2setBCs(TWOdevice *pDevice, double vd) { TWOcontact *pContact = pDevice->pLastContact; setDirichlet( pContact, - vd ); } void NBJT2setBCs(TWOdevice *pDevice, double vce, double vbe) { TWOcontact *pCollContact = pDevice->pFirstContact; TWOcontact *pBaseContact = pDevice->pFirstContact->next; setDirichlet( pCollContact, vce ); setDirichlet( pBaseContact, vbe ); } void NUMOSsetBCs(TWOdevice *pDevice, double vdb, double vsb, double vgb) { TWOcontact *pDContact = pDevice->pFirstContact; TWOcontact *pGContact = pDevice->pFirstContact->next; TWOcontact *pSContact = pDevice->pFirstContact->next->next; setDirichlet( pDContact, vdb ); setDirichlet( pSContact, vsb ); setDirichlet( pGContact, vgb ); } static void setDirichlet(TWOcontact *pContact, double voltage) { int index, numContactNodes, i; TWOelem *pElem = NULL; TWOnode *pNode; double psi, ni, pi, nie; double conc, sign, absConc; voltage /= VNorm; numContactNodes = pContact->numNodes; for ( index = 0; index < numContactNodes; index++ ) { pNode = pContact->pNodes[ index ]; /* Find this node's owner element. */ for ( i = 0; i <= 3; i++ ) { pElem = pNode->pElems[ i ]; if ( pElem != NULL && pElem->evalNodes[ (i+2)%4 ] ) { break; /* got it */ } } if (pElem->elemType == INSULATOR) { pNode->psi = RefPsi - pNode->eaff; pNode->nConc = 0.0; pNode->pConc = 0.0; } else if (pElem->elemType == SEMICON) { nie = pNode->nie; conc = pNode->netConc / nie; sign = SGN( conc ); absConc = ABS( conc ); if ( conc != 0.0 ) { psi = sign * log( 0.5 * absConc + sqrt( 1.0 + 0.25*absConc*absConc )); ni = nie * exp( psi ); pi = nie * exp( - psi ); } else { psi = 0.0; ni = nie; pi = nie; } pNode->psi = pElem->matlInfo->refPsi + psi; pNode->nConc = ni; pNode->pConc = pi; } pNode->psi += voltage; } } tmpk8ny_4pz/src/ciderlib/twod/twoncont.c0000644000175000017500000006745113546075722020535 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/twomesh.h" #include "ngspice/twodev.h" #include "ngspice/bool.h" #include "ngspice/spmatrix.h" #include "twoddefs.h" #include "twodext.h" #include "ngspice/cidersupt.h" #include "../../maths/misc/bernoull.h" /* * Functions to setup and solve the continuity equations. * Both continuity equations are solved. * Separate functions are used for one continuity equation. */ /* * Setup matrix pointers to Jacobian entries and * store direct pointers with the nodes. */ void TWONjacBuild(TWOdevice *pDevice) { SMPmatrix *matrix = pDevice->matrix; TWOelem *pElem; TWOnode *pNode; TWOchannel *pCh; int eIndex, nIndex; int nextIndex; /* index of node to find next element */ int psiEqn, nEqn; /* scratch for deref'd eqn numbers */ int psiEqnTL = 0, nEqnTL = 0; int psiEqnTR = 0, nEqnTR = 0; int psiEqnBR = 0, nEqnBR = 0; int psiEqnBL = 0, nEqnBL = 0; int psiEqnInM = 0, psiEqnInP = 0; /* scratch for deref'd surface eqns */ int psiEqnOxM = 0, psiEqnOxP = 0; /* M= more negative, P= more positive */ for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; /* first the self terms */ for ( nIndex = 0; nIndex <= 3; nIndex++ ) { pNode = pElem->pNodes[ nIndex ]; /* get poisson-only pointer */ psiEqn = pNode->psiEqn; pNode->fPsiPsi = spGetElement( matrix, psiEqn, psiEqn ); if ( pElem->elemType == SEMICON ) { /* get continuity-coupling terms */ nEqn = pNode->nEqn; pNode->pEqn = 0; /* Throw pEqn number into garbage. */ /* pointers for additional terms */ pNode->fPsiN = spGetElement( matrix, psiEqn, nEqn ); pNode->fNPsi = spGetElement( matrix, nEqn, psiEqn ); pNode->fNN = spGetElement( matrix, nEqn, nEqn ); } else { nEqn = 0; } /* save equation indices */ switch ( nIndex ) { case 0: /* TL Node */ psiEqnTL = psiEqn; nEqnTL = nEqn; break; case 1: /* TR Node */ psiEqnTR = psiEqn; nEqnTR = nEqn; break; case 2: /* BR Node */ psiEqnBR = psiEqn; nEqnBR = nEqn; break; case 3: /* BL Node */ psiEqnBL = psiEqn; nEqnBL = nEqn; break; default: break; } } /* now terms to couple to adjacent nodes */ pNode = pElem->pTLNode; pNode->fPsiPsiiP1 = spGetElement(matrix, psiEqnTL, psiEqnTR ); pNode->fPsiPsijP1 = spGetElement(matrix, psiEqnTL, psiEqnBL ); if ( pElem->elemType == SEMICON ) { /* continuity equation pointers */ pNode->fNPsiiP1 = spGetElement( matrix, nEqnTL, psiEqnTR ); pNode->fNNiP1 = spGetElement( matrix, nEqnTL, nEqnTR ); pNode->fNPsijP1 = spGetElement( matrix, nEqnTL, psiEqnBL ); pNode->fNNjP1 = spGetElement( matrix, nEqnTL, nEqnBL ); /* Surface Mobility Model depends on diagonal node values */ if ( MobDeriv && SurfaceMobility && pElem->channel ) { pNode->fNPsiiP1jP1 = spGetElement( matrix, nEqnTL, psiEqnBR ); pNode->fNNiP1jP1 = spGetElement( matrix, nEqnTL, nEqnBR ); } } pNode = pElem->pTRNode; pNode->fPsiPsiiM1 = spGetElement(matrix, psiEqnTR, psiEqnTL ); pNode->fPsiPsijP1 = spGetElement(matrix, psiEqnTR, psiEqnBR ); if ( pElem->elemType == SEMICON ) { /* continuity equation pointers */ pNode->fNPsiiM1 = spGetElement( matrix, nEqnTR, psiEqnTL ); pNode->fNNiM1 = spGetElement( matrix, nEqnTR, nEqnTL ); pNode->fNPsijP1 = spGetElement( matrix, nEqnTR, psiEqnBR ); pNode->fNNjP1 = spGetElement( matrix, nEqnTR, nEqnBR ); /* Surface Mobility Model depends on diagonal node values */ if ( MobDeriv && SurfaceMobility && pElem->channel ) { pNode->fNPsiiM1jP1 = spGetElement( matrix, nEqnTR, psiEqnBL ); pNode->fNNiM1jP1 = spGetElement( matrix, nEqnTR, nEqnBL ); } } pNode = pElem->pBRNode; pNode->fPsiPsiiM1 = spGetElement(matrix, psiEqnBR, psiEqnBL ); pNode->fPsiPsijM1 = spGetElement(matrix, psiEqnBR, psiEqnTR ); if ( pElem->elemType == SEMICON ) { /* continuity equation pointers */ pNode->fNPsiiM1 = spGetElement( matrix, nEqnBR, psiEqnBL ); pNode->fNNiM1 = spGetElement( matrix, nEqnBR, nEqnBL ); pNode->fNPsijM1 = spGetElement( matrix, nEqnBR, psiEqnTR ); pNode->fNNjM1 = spGetElement( matrix, nEqnBR, nEqnTR ); /* Surface Mobility Model depends on diagonal node values */ if ( MobDeriv && SurfaceMobility && pElem->channel ) { pNode->fNPsiiM1jM1 = spGetElement( matrix, nEqnBR, psiEqnTL ); pNode->fNNiM1jM1 = spGetElement( matrix, nEqnBR, nEqnTL ); } } pNode = pElem->pBLNode; pNode->fPsiPsiiP1 = spGetElement(matrix, psiEqnBL, psiEqnBR ); pNode->fPsiPsijM1 = spGetElement(matrix, psiEqnBL, psiEqnTL ); if ( pElem->elemType == SEMICON ) { /* continuity equation pointers */ pNode->fNPsiiP1 = spGetElement( matrix, nEqnBL, psiEqnBR ); pNode->fNNiP1 = spGetElement( matrix, nEqnBL, nEqnBR ); pNode->fNPsijM1 = spGetElement( matrix, nEqnBL, psiEqnTL ); pNode->fNNjM1 = spGetElement( matrix, nEqnBL, nEqnTL ); /* Surface Mobility Model depends on diagonal node values */ if ( MobDeriv && SurfaceMobility && pElem->channel ) { pNode->fNPsiiP1jM1 = spGetElement( matrix, nEqnBL, psiEqnTR ); pNode->fNNiP1jM1 = spGetElement( matrix, nEqnBL, nEqnTR ); } } } /* * Add terms for surface-field of inversion-layer mobility model. * Elements MUST be made from silicon for this to work. * No empty elements are allowed. * Don't need these pointers if SurfaceMobility isn't set. */ if ( MobDeriv && SurfaceMobility ) { for ( pCh = pDevice->pChannel; pCh != NULL; pCh = pCh->next ) { pElem = pCh->pNElem; switch (pCh->type) { case 0: psiEqnInM = pElem->pBLNode->psiEqn; psiEqnInP = pElem->pBRNode->psiEqn; psiEqnOxM = pElem->pTLNode->psiEqn; psiEqnOxP = pElem->pTRNode->psiEqn; break; case 1: psiEqnInM = pElem->pTLNode->psiEqn; psiEqnInP = pElem->pBLNode->psiEqn; psiEqnOxM = pElem->pTRNode->psiEqn; psiEqnOxP = pElem->pBRNode->psiEqn; break; case 2: psiEqnInM = pElem->pTLNode->psiEqn; psiEqnInP = pElem->pTRNode->psiEqn; psiEqnOxM = pElem->pBLNode->psiEqn; psiEqnOxP = pElem->pBRNode->psiEqn; break; case 3: psiEqnInM = pElem->pTRNode->psiEqn; psiEqnInP = pElem->pBRNode->psiEqn; psiEqnOxM = pElem->pTLNode->psiEqn; psiEqnOxP = pElem->pBLNode->psiEqn; break; } pElem = pCh->pSeed; nextIndex = (pCh->type + 2)%4; while (pElem && pElem->channel == pCh->id) { for ( nIndex = 0; nIndex <= 3; nIndex++ ) { pNode = pElem->pNodes[ nIndex ]; psiEqn = pNode->psiEqn; nEqn = pNode->nEqn; if ( pCh->type % 2 == 0 ) { /* Vertical Slice */ if ( nIndex == 0 || nIndex == 3 ) { /* Left Side */ pNode->fNPsiIn = spGetElement( matrix, nEqn, psiEqnInM ); pNode->fNPsiInP1 = spGetElement( matrix, nEqn, psiEqnInP ); pNode->fNPsiOx = spGetElement( matrix, nEqn, psiEqnOxM ); pNode->fNPsiOxP1 = spGetElement( matrix, nEqn, psiEqnOxP ); } else { /* Right Side */ pNode->fNPsiInM1 = spGetElement( matrix, nEqn, psiEqnInM ); pNode->fNPsiIn = spGetElement( matrix, nEqn, psiEqnInP ); pNode->fNPsiOxM1 = spGetElement( matrix, nEqn, psiEqnOxM ); pNode->fNPsiOx = spGetElement( matrix, nEqn, psiEqnOxP ); } } else { /* Horizontal Slice */ if ( nIndex <= 1 ) { /* Top Side */ pNode->fNPsiIn = spGetElement( matrix, nEqn, psiEqnInM ); pNode->fNPsiInP1 = spGetElement( matrix, nEqn, psiEqnInP ); pNode->fNPsiOx = spGetElement( matrix, nEqn, psiEqnOxM ); pNode->fNPsiOxP1 = spGetElement( matrix, nEqn, psiEqnOxP ); } else { /* Bottom Side */ pNode->fNPsiInM1 = spGetElement( matrix, nEqn, psiEqnInM ); pNode->fNPsiIn = spGetElement( matrix, nEqn, psiEqnInP ); pNode->fNPsiOxM1 = spGetElement( matrix, nEqn, psiEqnOxM ); pNode->fNPsiOx = spGetElement( matrix, nEqn, psiEqnOxP ); } } } /* endfor nIndex */ pElem = pElem->pElems[ nextIndex ]; } /* endwhile pElem */ } /* endfor pCh */ } /* endif SurfaceMobility */ } /* * The Jacobian and Rhs are loaded by the following function. * Inputs are the transient analysis flag and the transient * information structure */ void TWONsysLoad(TWOdevice *pDevice, BOOLEAN tranAnalysis, TWOtranInfo *info) { TWOelem *pElem; TWOnode *pNode; TWOedge *pHEdge, *pVEdge; TWOedge *pTEdge, *pBEdge, *pLEdge, *pREdge; TWOchannel *pCh; int index, eIndex; int nextIndex; /* index of node to find next element */ double *pRhs = pDevice->rhs; double dx, dy, dxdy, dyOverDx, dxOverDy; double ds; double dPsiT, dPsiB, dPsiL, dPsiR; double rhsN; double nConc, pConc; double perTime = 0.0; /* first compute the currents and derivatives */ TWONcommonTerms( pDevice, FALSE, tranAnalysis, info ); /* find reciprocal timestep */ if ( tranAnalysis ) { perTime = info->intCoeff[0]; } /* zero the rhs vector */ for ( index = 1 ; index <= pDevice->numEqns ; index++ ) { pRhs[ index ] = 0.0; } /* zero the matrix */ spClear( pDevice->matrix ); for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; dx = 0.5 * pElem->dx; dy = 0.5 * pElem->dy; dxdy = dx * dy; dxOverDy = 0.5 * pElem->epsRel * pElem->dxOverDy; dyOverDx = 0.5 * pElem->epsRel * pElem->dyOverDx; pTEdge = pElem->pTopEdge; pBEdge = pElem->pBotEdge; pLEdge = pElem->pLeftEdge; pREdge = pElem->pRightEdge; dPsiT = pTEdge->dPsi; dPsiB = pBEdge->dPsi; dPsiL = pLEdge->dPsi; dPsiR = pREdge->dPsi; /* load for all i,j */ for ( index = 0; index <= 3; index++ ) { pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { *(pNode->fPsiPsi) += dyOverDx + dxOverDy; if ( index <= 1 ) { pHEdge = pTEdge; } else { pHEdge = pBEdge; } if ( index == 0 || index == 3 ) { pVEdge = pLEdge; } else { pVEdge = pREdge; } /* Add surface state charges. */ pRhs[ pNode->psiEqn ] += dx * pHEdge->qf; pRhs[ pNode->psiEqn ] += dy * pVEdge->qf; if ( pElem->elemType == SEMICON ) { nConc = pDevice->devState0 [pNode->nodeN]; pConc = pDevice->devState0 [pNode->nodeP]; *(pNode->fPsiN) += dxdy; *(pNode->fPsiPsi) += dxdy * pConc; *(pNode->fNPsi) -= dy * pHEdge->dJnDpsiP1 + dx * pVEdge->dJnDpsiP1; pRhs[ pNode->psiEqn ] += dxdy * (pNode->netConc + pConc - nConc); /* Handle generation terms */ *(pNode->fNN) -= dxdy * pNode->dUdN; *(pNode->fNPsi) += dxdy * pNode->dUdP * pConc; rhsN = - dxdy * pNode->uNet; pRhs[ pNode->nEqn ] -= rhsN; /* Handle dXdT continuity terms */ if ( tranAnalysis ) { *(pNode->fNN) -= dxdy * perTime; pRhs[ pNode->nEqn ] += dxdy * pNode->dNdT; } } } } /* Handle neighbor and edge dependent terms */ pNode = pElem->pTLNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= -dyOverDx * dPsiT - dxOverDy * dPsiL; *(pNode->fPsiPsiiP1) -= dyOverDx; *(pNode->fPsiPsijP1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->nEqn ] -= dy * pTEdge->jn + dx * pLEdge->jn; *(pNode->fNN) += dy * pTEdge->dJnDn + dx * pLEdge->dJnDn; *(pNode->fNPsiiP1) += dy * pTEdge->dJnDpsiP1; *(pNode->fNNiP1) += dy * pTEdge->dJnDnP1; *(pNode->fNPsijP1) += dx * pLEdge->dJnDpsiP1; *(pNode->fNNjP1) += dx * pLEdge->dJnDnP1; } } pNode = pElem->pTRNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= dyOverDx * dPsiT - dxOverDy * dPsiR; *(pNode->fPsiPsiiM1) -= dyOverDx; *(pNode->fPsiPsijP1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->nEqn ] -= -dy * pTEdge->jn + dx * pREdge->jn; *(pNode->fNN) += -dy * pTEdge->dJnDnP1 + dx * pREdge->dJnDn; *(pNode->fNPsiiM1) += dy * pTEdge->dJnDpsiP1; *(pNode->fNNiM1) -= dy * pTEdge->dJnDn; *(pNode->fNPsijP1) += dx * pREdge->dJnDpsiP1; *(pNode->fNNjP1) += dx * pREdge->dJnDnP1; } } pNode = pElem->pBRNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= dyOverDx * dPsiB + dxOverDy * dPsiR; *(pNode->fPsiPsiiM1) -= dyOverDx; *(pNode->fPsiPsijM1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->nEqn ] -= -dy * pBEdge->jn - dx * pREdge->jn; *(pNode->fNN) += -dy * pBEdge->dJnDnP1 - dx * pREdge->dJnDnP1; *(pNode->fNPsiiM1) += dy * pBEdge->dJnDpsiP1; *(pNode->fNNiM1) -= dy * pBEdge->dJnDn; *(pNode->fNPsijM1) += dx * pREdge->dJnDpsiP1; *(pNode->fNNjM1) -= dx * pREdge->dJnDn; } } pNode = pElem->pBLNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= -dyOverDx * dPsiB + dxOverDy * dPsiL; *(pNode->fPsiPsiiP1) -= dyOverDx; *(pNode->fPsiPsijM1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->nEqn ] -= dy * pBEdge->jn - dx * pLEdge->jn; *(pNode->fNN) += dy * pBEdge->dJnDn - dx * pLEdge->dJnDnP1; *(pNode->fNPsiiP1) += dy * pBEdge->dJnDpsiP1; *(pNode->fNNiP1) += dy * pBEdge->dJnDnP1; *(pNode->fNPsijM1) += dx * pLEdge->dJnDpsiP1; *(pNode->fNNjM1) -= dx * pLEdge->dJnDn; } } } /* Calculate the Inversion-Layer Mobility Dependent Terms in Jac. */ if ( MobDeriv && SurfaceMobility ) { for ( pCh = pDevice->pChannel; pCh != NULL; pCh = pCh->next ) { /* Find effective height of oxide element at interface. */ if ( pCh->type%2 == 0 ) { /* Vertical slice */ ds = pCh->pNElem->dy / pCh->pNElem->epsRel; } else { /* Horizontal slice */ ds = pCh->pNElem->dx / pCh->pNElem->epsRel; } pElem = pCh->pSeed; nextIndex = (pCh->type + 2)%4; while (pElem && pElem->channel == pCh->id) { TWONmobDeriv( pElem, pCh->type, ds ); pElem = pElem->pElems[ nextIndex ]; } } /* endfor pCh != NULL */ } /* endif MobDeriv and SurfaceMobility */ } /* * This function used only for direct method ac analysis. * Used to load only the dc Jacobian matrix. Rhs is unaffected */ void TWONjacLoad(TWOdevice *pDevice) { TWOelem *pElem; TWOnode *pNode; TWOedge *pHEdge, *pVEdge; TWOedge *pTEdge, *pBEdge, *pLEdge, *pREdge; TWOchannel *pCh; int index, eIndex; int nextIndex; /* index of node to find next element */ double dx, dy, dxdy, dyOverDx, dxOverDy; double ds; double pConc; /* first compute the currents and derivatives */ TWONcommonTerms( pDevice, FALSE, FALSE, NULL ); /* zero the matrix */ spClear( pDevice->matrix ); for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; dx = 0.5 * pElem->dx; dy = 0.5 * pElem->dy; dxdy = dx * dy; dxOverDy = 0.5 * pElem->epsRel * pElem->dxOverDy; dyOverDx = 0.5 * pElem->epsRel * pElem->dyOverDx; pTEdge = pElem->pTopEdge; pBEdge = pElem->pBotEdge; pLEdge = pElem->pLeftEdge; pREdge = pElem->pRightEdge; /* load for all i,j */ for ( index = 0; index <= 3; index++ ) { pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { *(pNode->fPsiPsi) += dyOverDx + dxOverDy; if ( pElem->elemType == SEMICON ) { if ( index <= 1 ) { pHEdge = pTEdge; } else { pHEdge = pBEdge; } if ( index == 0 || index == 3 ) { pVEdge = pLEdge; } else { pVEdge = pREdge; } pConc = pDevice->devState0 [pNode->nodeP]; *(pNode->fPsiN) += dxdy; *(pNode->fPsiPsi) += dxdy * pConc; *(pNode->fNPsi) -= dy * pHEdge->dJnDpsiP1 + dx * pVEdge->dJnDpsiP1; /* Handle generation terms */ *(pNode->fNN) -= dxdy * pNode->dUdN; *(pNode->fNPsi) += dxdy * pNode->dUdP * pConc; } } } /* Handle neighbor and edge dependent terms */ pNode = pElem->pTLNode; if ( pNode->nodeType != CONTACT ) { *(pNode->fPsiPsiiP1) -= dyOverDx; *(pNode->fPsiPsijP1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { *(pNode->fNN) += dy * pTEdge->dJnDn + dx * pLEdge->dJnDn; *(pNode->fNPsiiP1) += dy * pTEdge->dJnDpsiP1; *(pNode->fNNiP1) += dy * pTEdge->dJnDnP1; *(pNode->fNPsijP1) += dx * pLEdge->dJnDpsiP1; *(pNode->fNNjP1) += dx * pLEdge->dJnDnP1; } } pNode = pElem->pTRNode; if ( pNode->nodeType != CONTACT ) { *(pNode->fPsiPsiiM1) -= dyOverDx; *(pNode->fPsiPsijP1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { *(pNode->fNN) += -dy * pTEdge->dJnDnP1 + dx * pREdge->dJnDn; *(pNode->fNPsiiM1) += dy * pTEdge->dJnDpsiP1; *(pNode->fNNiM1) -= dy * pTEdge->dJnDn; *(pNode->fNPsijP1) += dx * pREdge->dJnDpsiP1; *(pNode->fNNjP1) += dx * pREdge->dJnDnP1; } } pNode = pElem->pBRNode; if ( pNode->nodeType != CONTACT ) { *(pNode->fPsiPsiiM1) -= dyOverDx; *(pNode->fPsiPsijM1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { *(pNode->fNN) += -dy * pBEdge->dJnDnP1 - dx * pREdge->dJnDnP1; *(pNode->fNPsiiM1) += dy * pBEdge->dJnDpsiP1; *(pNode->fNNiM1) -= dy * pBEdge->dJnDn; *(pNode->fNPsijM1) += dx * pREdge->dJnDpsiP1; *(pNode->fNNjM1) -= dx * pREdge->dJnDn; } } pNode = pElem->pBLNode; if ( pNode->nodeType != CONTACT ) { *(pNode->fPsiPsiiP1) -= dyOverDx; *(pNode->fPsiPsijM1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { *(pNode->fNN) += dy * pBEdge->dJnDn - dx * pLEdge->dJnDnP1; *(pNode->fNPsiiP1) += dy * pBEdge->dJnDpsiP1; *(pNode->fNNiP1) += dy * pBEdge->dJnDnP1; *(pNode->fNPsijM1) += dx * pLEdge->dJnDpsiP1; *(pNode->fNNjM1) -= dx * pLEdge->dJnDn; } } } /* Calculate the Inversion-Layer Mobility Dependent Terms in Jac. */ if ( MobDeriv && SurfaceMobility ) { for ( pCh = pDevice->pChannel; pCh != NULL; pCh = pCh->next ) { /* Find effective height of oxide element at interface. */ if ( pCh->type%2 == 0 ) { /* Vertical slice */ ds = pCh->pNElem->dy / pCh->pNElem->epsRel; } else { /* Horizontal slice */ ds = pCh->pNElem->dx / pCh->pNElem->epsRel; } pElem = pCh->pSeed; nextIndex = (pCh->type + 2)%4; while (pElem && pElem->channel == pCh->id) { TWONmobDeriv( pElem, pCh->type, ds ); pElem = pElem->pElems[ nextIndex ]; } } /* endfor pCh != NULL */ } /* endif MobDeriv and SurfaceMobility */ } /* load only the Rhs vector */ void TWONrhsLoad(TWOdevice *pDevice, BOOLEAN tranAnalysis, TWOtranInfo *info) { TWOelem *pElem; TWOnode *pNode; TWOedge *pHEdge, *pVEdge; TWOedge *pTEdge, *pBEdge, *pLEdge, *pREdge; int index, eIndex; double *pRhs = pDevice->rhs; double dx, dy, dxdy, dyOverDx, dxOverDy; double dPsiT, dPsiB, dPsiL, dPsiR; double rhsN; double nConc, pConc; double perTime; /* first compute the currents */ TWONcommonTerms( pDevice, TRUE, tranAnalysis, info ); /* find reciprocal timestep */ if ( tranAnalysis ) { perTime = info->intCoeff[0]; } /* zero the rhs vector */ for ( index = 1 ; index <= pDevice->numEqns ; index++ ) { pRhs[ index ] = 0.0; } for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; dx = 0.5 * pElem->dx; dy = 0.5 * pElem->dy; dxdy = dx * dy; dxOverDy = 0.5 * pElem->epsRel * pElem->dxOverDy; dyOverDx = 0.5 * pElem->epsRel * pElem->dyOverDx; pTEdge = pElem->pTopEdge; pBEdge = pElem->pBotEdge; pLEdge = pElem->pLeftEdge; pREdge = pElem->pRightEdge; dPsiT = pTEdge->dPsi; dPsiB = pBEdge->dPsi; dPsiL = pLEdge->dPsi; dPsiR = pREdge->dPsi; /* load for all i,j */ for ( index = 0; index <= 3; index++ ) { pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { if ( index <= 1 ) { pHEdge = pTEdge; } else { pHEdge = pBEdge; } if ( index == 0 || index == 3 ) { pVEdge = pLEdge; } else { pVEdge = pREdge; } /* Add surface state charges. */ pRhs[ pNode->psiEqn ] += dx * pHEdge->qf; pRhs[ pNode->psiEqn ] += dy * pVEdge->qf; if ( pElem->elemType == SEMICON ) { nConc = pDevice->devState0 [pNode->nodeN]; pConc = pDevice->devState0 [pNode->nodeP]; pRhs[ pNode->psiEqn ] += dxdy * (pNode->netConc + pConc - nConc); /* Handle generation terms */ rhsN = - dxdy * pNode->uNet; pRhs[ pNode->nEqn ] -= rhsN; /* Handle dXdT continuity terms */ if ( tranAnalysis ) { pRhs[ pNode->nEqn ] += dxdy * pNode->dNdT; } } } } /* Handle neighbor and edge dependent terms */ pNode = pElem->pTLNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= -dyOverDx * dPsiT - dxOverDy * dPsiL; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->nEqn ] -= dy * pTEdge->jn + dx * pLEdge->jn; } } pNode = pElem->pTRNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= dyOverDx * dPsiT - dxOverDy * dPsiR; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->nEqn ] -= -dy * pTEdge->jn + dx * pREdge->jn; } } pNode = pElem->pBRNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= dyOverDx * dPsiB + dxOverDy * dPsiR; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->nEqn ] -= -dy * pBEdge->jn - dx * pREdge->jn; } } pNode = pElem->pBLNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= -dyOverDx * dPsiB + dxOverDy * dPsiL; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->nEqn ] -= dy * pBEdge->jn - dx * pLEdge->jn; } } } } /* * computation of current densities, recombination rates, * mobilities and their derivatives */ void TWONcommonTerms(TWOdevice *pDevice, BOOLEAN currentOnly, BOOLEAN tranAnalysis, TWOtranInfo *info) { TWOelem *pElem; TWOedge *pEdge; TWOnode *pNode; int index, eIndex; int nextIndex; /* index of node to find next element */ double psi1, psi2, refPsi, nC, nP1; double dPsiN; double bPsiN, dbPsiN, bMPsiN, dbMPsiN; double muN, dMuN, rDx, rDy; double psi, nConc = 0.0, pConc = 0.0; double cnAug, cpAug; double eSurf = 0.0; /* For channel mobilities */ double qInt = 0.0; TWOchannel *pCh; /* evaluate all node (including recombination) and edge quantities */ for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; refPsi = pElem->matlInfo->refPsi; cnAug = pElem->matlInfo->cAug[ELEC]; cpAug = pElem->matlInfo->cAug[HOLE]; for ( index = 0; index <= 3; index++ ) { if ( pElem->evalNodes[ index ] ) { pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { psi = pDevice->dcSolution[ pNode->psiEqn ]; if ( pElem->elemType == SEMICON ) { nConc = pDevice->dcSolution[ pNode->nEqn ]; pConc = pNode->nie * exp( - psi + refPsi ); if ( Srh ) { recomb(nConc, pConc, pNode->tn, pNode->tp, cnAug, cpAug, pNode->nie, &pNode->uNet, &pNode->dUdN, &pNode->dUdP); } else { pNode->uNet = 0.0; pNode->dUdN = 0.0; pNode->dUdP = 0.0; } } } else { /* a contact node */ psi = pNode->psi; if ( pElem->elemType == SEMICON ) { nConc = pNode->nConc; pConc = pNode->pConc; } } /* store info in the state tables */ pDevice->devState0 [pNode->nodePsi] = psi; if ( pElem->elemType == SEMICON ) { pDevice->devState0 [pNode->nodeN] = nConc; pDevice->devState0 [pNode->nodeP] = pConc; if ( tranAnalysis && pNode->nodeType != CONTACT ) { pNode->dNdT = integrate( pDevice->devStates, info, pNode->nodeN ); } } } } for ( index = 0; index <= 3; index++ ) { if ( pElem->evalEdges[ index ] ) { pEdge = pElem->pEdges[ index ]; pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { psi1 = pDevice->dcSolution[pNode->psiEqn]; } else { psi1 = pNode->psi; } pNode = pElem->pNodes[ (index + 1) % 4 ]; if ( pNode->nodeType != CONTACT ) { psi2 = pDevice->dcSolution[pNode->psiEqn]; } else { psi2 = pNode->psi; } if ( index <= 1 ) { pEdge->dPsi = psi2 - psi1; } else { pEdge->dPsi = psi1 - psi2; } pDevice->devState0 [pEdge->edgeDpsi] = pEdge->dPsi; if ( pElem->elemType == SEMICON ) { /* Calculate weighted driving forces - wdfn & wdfp for the edge */ dPsiN = pEdge->dPsi + pEdge->dCBand; bernoulli( dPsiN, &bPsiN, &dbPsiN, &bMPsiN, &dbMPsiN, !currentOnly ); if ( index <= 1 ) { nC = *(pDevice->devState0 + pElem->pNodes[ index ]->nodeN); nP1 = *(pDevice->devState0 + pElem->pNodes[ index+1 ]->nodeN); } else { nC = *(pDevice->devState0 + pElem->pNodes[(index+1)%4]->nodeN); nP1 = *(pDevice->devState0 + pElem->pNodes[ index ]->nodeN); } pEdge->wdfn = bPsiN * nP1 - bMPsiN * nC; pEdge->jn = 0.0; if ( !currentOnly ) { pEdge->dWnDpsiP1 = dbPsiN * nP1 - dbMPsiN * nC; pEdge->dWnDn = - bMPsiN; pEdge->dWnDnP1 = bPsiN; pEdge->dJnDpsiP1 = 0.0; pEdge->dJnDn = 0.0; pEdge->dJnDnP1 = 0.0; } } } } } /* DAG: calculate mobilities for channel elems */ if ( SurfaceMobility ) { for ( pCh = pDevice->pChannel; pCh != NULL; pCh = pCh->next ) { pElem = pCh->pNElem; switch (pCh->type) { case 0: eSurf = - 0.5 * (pElem->pLeftEdge->dPsi + pElem->pRightEdge->dPsi ) * pElem->epsRel / pElem->dy; qInt = 0.5 * pElem->pBotEdge->qf; break; case 1: eSurf = - 0.5 * (pElem->pTopEdge->dPsi + pElem->pBotEdge->dPsi ) * pElem->epsRel / pElem->dx; qInt = 0.5 * pElem->pLeftEdge->qf; break; case 2: eSurf = - 0.5 * (pElem->pLeftEdge->dPsi + pElem->pRightEdge->dPsi ) * pElem->epsRel / pElem->dy; qInt = 0.5 * pElem->pTopEdge->qf; break; case 3: eSurf = - 0.5 * (pElem->pTopEdge->dPsi + pElem->pBotEdge->dPsi ) * pElem->epsRel / pElem->dx; qInt = 0.5 * pElem->pRightEdge->qf; break; } eSurf += qInt; pElem = pCh->pSeed; nextIndex = (pCh->type + 2)%4; while (pElem && pElem->channel == pCh->id) { TWONmobility( pElem, eSurf ); pElem = pElem->pElems[ nextIndex ]; } } /* endfor pCH != NULL */ } /* endif SurfaceMobility */ /* calculate the current densities assuming mobility value depend on Ex,Ey*/ for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; rDx = 1.0 / pElem->dx; rDy = 1.0 / pElem->dy; for ( index = 0; index <= 3; index++ ) { pEdge = pElem->pEdges[ index ]; /* calculate conductive currents */ if ( pElem->elemType == SEMICON ) { /* get mobility for this edge */ if ( !pElem->channel ) { /* Calculate mobility for non-channel elements */ muN = pElem->mun0; dMuN = 0.0; dPsiN = pEdge->dPsi + pEdge->dCBand; if ( index%2 == 0 ) { MOBfieldDep( pElem->matlInfo, ELEC, - dPsiN * rDx, &muN, &dMuN ); } else { MOBfieldDep( pElem->matlInfo, ELEC, - dPsiN * rDy, &muN, &dMuN ); } } else { /* Retrieve previously calculated value. */ muN = pElem->mun; dMuN = 0.0; } switch ( index ) { case 0: muN *= pEdge->kPos * rDx; dMuN *= pEdge->kPos * rDx * rDx; break; case 1: muN *= pEdge->kNeg * rDy; dMuN *= pEdge->kNeg * rDy * rDy; break; case 2: muN *= pEdge->kNeg * rDx; dMuN *= pEdge->kNeg * rDx * rDx; break; case 3: muN *= pEdge->kPos * rDy; dMuN *= pEdge->kPos * rDy * rDy; break; } /* Now that the mobility for this edge is known, do current */ pEdge->jn += muN * pEdge->wdfn; if ( !currentOnly ) { pEdge->dJnDpsiP1 += muN * pEdge->dWnDpsiP1; pEdge->dJnDn += muN * pEdge->dWnDn; pEdge->dJnDnP1 += muN * pEdge->dWnDnP1; if ( MobDeriv && (!pElem->channel) ) { pEdge->dJnDpsiP1 -= dMuN * pEdge->wdfn; } } } /* calculate displacement current only once */ if ( pElem->evalEdges[ index ] ) { if ( tranAnalysis ) { if ( index == 0 || index == 2 ) { /* horizontal edges */ pEdge->jd = -integrate(pDevice->devStates, info, pEdge->edgeDpsi) * rDx; } else { /* vertical edges */ pEdge->jd = -integrate(pDevice->devStates, info, pEdge->edgeDpsi) * rDy; } } } } } } tmpk8ny_4pz/src/ciderlib/twod/twopcont.c0000644000175000017500000006747513546075722020545 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numenum.h" #include "ngspice/twomesh.h" #include "ngspice/twodev.h" #include "ngspice/bool.h" #include "ngspice/spmatrix.h" #include "twoddefs.h" #include "twodext.h" #include "ngspice/cidersupt.h" #include "../../maths/misc/bernoull.h" /* * Functions to setup and solve the continuity equations. * Both continuity equations are solved. * Separate functions are used for one continuity equation. */ /* * setup matrix pointers to Jacobian values and * store direct pointers with the nodes */ void TWOPjacBuild(TWOdevice *pDevice) { SMPmatrix *matrix = pDevice->matrix; TWOelem *pElem; TWOnode *pNode; TWOchannel *pCh; int eIndex, nIndex; int nextIndex; /* index of node to find next element */ int psiEqn, pEqn; /* scratch for deref'd eqn numbers */ int psiEqnTL = 0, pEqnTL = 0; int psiEqnTR = 0, pEqnTR = 0; int psiEqnBR = 0, pEqnBR = 0; int psiEqnBL = 0, pEqnBL = 0; int psiEqnInM = 0, psiEqnInP = 0; /* scratch for deref'd surface eqns */ int psiEqnOxM = 0, psiEqnOxP = 0; /* M= more negative, P= more positive */ for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; /* first the self terms */ for ( nIndex = 0; nIndex <= 3; nIndex++ ) { pNode = pElem->pNodes[ nIndex ]; /* get poisson-only pointer */ psiEqn = pNode->psiEqn; pNode->fPsiPsi = spGetElement( matrix, psiEqn, psiEqn ); if ( pElem->elemType == SEMICON ) { /* get continuity-coupling terms */ pEqn = pNode->pEqn; pNode->nEqn = 0; /* pointers for additional terms */ pNode->fPsiP = spGetElement( matrix, psiEqn, pEqn ); pNode->fPPsi = spGetElement( matrix, pEqn, psiEqn ); pNode->fPP = spGetElement( matrix, pEqn, pEqn ); } else { pEqn = 0; } /* save equation indices */ switch ( nIndex ) { case 0: /* TL Node */ psiEqnTL = psiEqn; pEqnTL = pEqn; break; case 1: /* TR Node */ psiEqnTR = psiEqn; pEqnTR = pEqn; break; case 2: /* BR Node */ psiEqnBR = psiEqn; pEqnBR = pEqn; break; case 3: /* BL Node */ psiEqnBL = psiEqn; pEqnBL = pEqn; break; default: break; } } /* now terms to couple to adjacent nodes */ pNode = pElem->pTLNode; pNode->fPsiPsiiP1 = spGetElement(matrix, psiEqnTL, psiEqnTR ); pNode->fPsiPsijP1 = spGetElement(matrix, psiEqnTL, psiEqnBL ); if ( pElem->elemType == SEMICON ) { /* continuity equation pointers */ pNode->fPPsiiP1 = spGetElement( matrix, pEqnTL, psiEqnTR ); pNode->fPPiP1 = spGetElement( matrix, pEqnTL, pEqnTR ); pNode->fPPsijP1 = spGetElement( matrix, pEqnTL, psiEqnBL ); pNode->fPPjP1 = spGetElement( matrix, pEqnTL, pEqnBL ); /* Surface Mobility Model depends on diagonal node values */ if ( MobDeriv && SurfaceMobility && pElem->channel ) { pNode->fPPsiiP1jP1 = spGetElement( matrix, pEqnTL, psiEqnBR ); pNode->fPPiP1jP1 = spGetElement( matrix, pEqnTL, pEqnBR ); } } pNode = pElem->pTRNode; pNode->fPsiPsiiM1 = spGetElement(matrix, psiEqnTR, psiEqnTL ); pNode->fPsiPsijP1 = spGetElement(matrix, psiEqnTR, psiEqnBR ); if ( pElem->elemType == SEMICON ) { /* continuity equation pointers */ pNode->fPPsiiM1 = spGetElement( matrix, pEqnTR, psiEqnTL ); pNode->fPPiM1 = spGetElement( matrix, pEqnTR, pEqnTL ); pNode->fPPsijP1 = spGetElement( matrix, pEqnTR, psiEqnBR ); pNode->fPPjP1 = spGetElement( matrix, pEqnTR, pEqnBR ); /* Surface Mobility Model depends on diagonal node values */ if ( MobDeriv && SurfaceMobility && pElem->channel ) { pNode->fPPsiiM1jP1 = spGetElement( matrix, pEqnTR, psiEqnBL ); pNode->fPPiM1jP1 = spGetElement( matrix, pEqnTR, pEqnBL ); } } pNode = pElem->pBRNode; pNode->fPsiPsiiM1 = spGetElement(matrix, psiEqnBR, psiEqnBL ); pNode->fPsiPsijM1 = spGetElement(matrix, psiEqnBR, psiEqnTR ); if ( pElem->elemType == SEMICON ) { /* continuity equation pointers */ pNode->fPPsiiM1 = spGetElement( matrix, pEqnBR, psiEqnBL ); pNode->fPPiM1 = spGetElement( matrix, pEqnBR, pEqnBL ); pNode->fPPsijM1 = spGetElement( matrix, pEqnBR, psiEqnTR ); pNode->fPPjM1 = spGetElement( matrix, pEqnBR, pEqnTR ); /* Surface Mobility Model depends on diagonal node values */ if ( MobDeriv && SurfaceMobility && pElem->channel ) { pNode->fPPsiiM1jM1 = spGetElement( matrix, pEqnBR, psiEqnTL ); pNode->fPPiM1jM1 = spGetElement( matrix, pEqnBR, pEqnTL ); } } pNode = pElem->pBLNode; pNode->fPsiPsiiP1 = spGetElement(matrix, psiEqnBL, psiEqnBR ); pNode->fPsiPsijM1 = spGetElement(matrix, psiEqnBL, psiEqnTL ); if ( pElem->elemType == SEMICON ) { /* continuity equation pointers */ pNode->fPPsiiP1 = spGetElement( matrix, pEqnBL, psiEqnBR ); pNode->fPPiP1 = spGetElement( matrix, pEqnBL, pEqnBR ); pNode->fPPsijM1 = spGetElement( matrix, pEqnBL, psiEqnTL ); pNode->fPPjM1 = spGetElement( matrix, pEqnBL, pEqnTL ); /* Surface Mobility Model depends on diagonal node values */ if ( MobDeriv && SurfaceMobility && pElem->channel ) { pNode->fPPsiiP1jM1 = spGetElement( matrix, pEqnBL, psiEqnTR ); pNode->fPPiP1jM1 = spGetElement( matrix, pEqnBL, pEqnTR ); } } } /* * Add terms for surface-field of inversion-layer mobility model. * Elements MUST be made from silicon for this to work. * No empty elements are allowed. * Don't need these pointers if SurfaceMobility isn't set. */ if ( MobDeriv && SurfaceMobility ) { for ( pCh = pDevice->pChannel; pCh != NULL; pCh = pCh->next ) { pElem = pCh->pNElem; switch (pCh->type) { case 0: psiEqnInM = pElem->pBLNode->psiEqn; psiEqnInP = pElem->pBRNode->psiEqn; psiEqnOxM = pElem->pTLNode->psiEqn; psiEqnOxP = pElem->pTRNode->psiEqn; break; case 1: psiEqnInM = pElem->pTLNode->psiEqn; psiEqnInP = pElem->pBLNode->psiEqn; psiEqnOxM = pElem->pTRNode->psiEqn; psiEqnOxP = pElem->pBRNode->psiEqn; break; case 2: psiEqnInM = pElem->pTLNode->psiEqn; psiEqnInP = pElem->pTRNode->psiEqn; psiEqnOxM = pElem->pBLNode->psiEqn; psiEqnOxP = pElem->pBRNode->psiEqn; break; case 3: psiEqnInM = pElem->pTRNode->psiEqn; psiEqnInP = pElem->pBRNode->psiEqn; psiEqnOxM = pElem->pTLNode->psiEqn; psiEqnOxP = pElem->pBLNode->psiEqn; break; } pElem = pCh->pSeed; nextIndex = (pCh->type + 2)%4; while (pElem && pElem->channel == pCh->id) { for ( nIndex = 0; nIndex <= 3; nIndex++ ) { pNode = pElem->pNodes[ nIndex ]; psiEqn = pNode->psiEqn; pEqn = pNode->pEqn; if ( pCh->type % 2 == 0 ) { /* Vertical Slice */ if ( nIndex == 0 || nIndex == 3 ) { /* Left Side */ pNode->fPPsiIn = spGetElement( matrix, pEqn, psiEqnInM ); pNode->fPPsiInP1 = spGetElement( matrix, pEqn, psiEqnInP ); pNode->fPPsiOx = spGetElement( matrix, pEqn, psiEqnOxM ); pNode->fPPsiOxP1 = spGetElement( matrix, pEqn, psiEqnOxP ); } else { /* Right Side */ pNode->fPPsiInM1 = spGetElement( matrix, pEqn, psiEqnInM ); pNode->fPPsiIn = spGetElement( matrix, pEqn, psiEqnInP ); pNode->fPPsiOxM1 = spGetElement( matrix, pEqn, psiEqnOxM ); pNode->fPPsiOx = spGetElement( matrix, pEqn, psiEqnOxP ); } } else { /* Horizontal Slice */ if ( nIndex <= 1 ) { /* Top Side */ pNode->fPPsiIn = spGetElement( matrix, pEqn, psiEqnInM ); pNode->fPPsiInP1 = spGetElement( matrix, pEqn, psiEqnInP ); pNode->fPPsiOx = spGetElement( matrix, pEqn, psiEqnOxM ); pNode->fPPsiOxP1 = spGetElement( matrix, pEqn, psiEqnOxP ); } else { /* Bottom Side */ pNode->fPPsiInM1 = spGetElement( matrix, pEqn, psiEqnInM ); pNode->fPPsiIn = spGetElement( matrix, pEqn, psiEqnInP ); pNode->fPPsiOxM1 = spGetElement( matrix, pEqn, psiEqnOxM ); pNode->fPPsiOx = spGetElement( matrix, pEqn, psiEqnOxP ); } } } /* endfor nIndex */ pElem = pElem->pElems[ nextIndex ]; } /* endwhile pElem */ } /* endfor pCh */ } /* endif SurfaceMobility */ } /* * The Jacobian and Rhs are loaded by the following function. * Inputs are the transient analysis flag and the transient * information structure */ void TWOPsysLoad(TWOdevice *pDevice, BOOLEAN tranAnalysis, TWOtranInfo *info) { TWOelem *pElem; TWOnode *pNode; TWOedge *pHEdge, *pVEdge; TWOedge *pTEdge, *pBEdge, *pLEdge, *pREdge; TWOchannel *pCh; int index, eIndex; int nextIndex; /* index of node to find next element */ double *pRhs = pDevice->rhs; double dx, dy, dxdy, dyOverDx, dxOverDy; double ds; double dPsiT, dPsiB, dPsiL, dPsiR; double rhsP; double nConc, pConc; double perTime = 0.0; /* first compute the currents and derivatives */ TWOPcommonTerms( pDevice, FALSE, tranAnalysis, info ); /* find reciprocal timestep */ if ( tranAnalysis ) { perTime = info->intCoeff[0]; } /* zero the rhs vector */ for ( index = 1 ; index <= pDevice->numEqns ; index++ ) { pRhs[ index ] = 0.0; } /* zero the matrix */ spClear( pDevice->matrix ); for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; dx = 0.5 * pElem->dx; dy = 0.5 * pElem->dy; dxdy = dx * dy; dxOverDy = 0.5 * pElem->epsRel * pElem->dxOverDy; dyOverDx = 0.5 * pElem->epsRel * pElem->dyOverDx; pTEdge = pElem->pTopEdge; pBEdge = pElem->pBotEdge; pLEdge = pElem->pLeftEdge; pREdge = pElem->pRightEdge; dPsiT = pTEdge->dPsi; dPsiB = pBEdge->dPsi; dPsiL = pLEdge->dPsi; dPsiR = pREdge->dPsi; /* load for all i,j */ for ( index = 0; index <= 3; index++ ) { pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { if ( index <= 1 ) { pHEdge = pTEdge; } else { pHEdge = pBEdge; } if ( index == 0 || index == 3 ) { pVEdge = pLEdge; } else { pVEdge = pREdge; } /* Add surface state charges. */ pRhs[ pNode->psiEqn ] += dx * pHEdge->qf; pRhs[ pNode->psiEqn ] += dy * pVEdge->qf; *(pNode->fPsiPsi) += dyOverDx + dxOverDy; if ( pElem->elemType == SEMICON ) { nConc = pDevice->devState0 [pNode->nodeN]; pConc = pDevice->devState0 [pNode->nodeP]; *(pNode->fPsiPsi) += dxdy * nConc; *(pNode->fPsiP) -= dxdy; *(pNode->fPPsi) -= dy * pHEdge->dJpDpsiP1 + dx * pVEdge->dJpDpsiP1; pRhs[ pNode->psiEqn ] += dxdy * (pNode->netConc + pConc - nConc); /* Handle generation terms */ *(pNode->fPP) += dxdy * pNode->dUdP; *(pNode->fPPsi) += dxdy * pNode->dUdN * nConc; rhsP = dxdy * pNode->uNet; pRhs[ pNode->pEqn ] -= rhsP; /* Handle dXdT continuity terms */ if ( tranAnalysis ) { *(pNode->fPP) += dxdy * perTime; pRhs[ pNode->pEqn ] -= dxdy * pNode->dPdT; } } } } /* Handle neighbor and edge dependent terms */ pNode = pElem->pTLNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= -dyOverDx * dPsiT - dxOverDy * dPsiL; *(pNode->fPsiPsiiP1) -= dyOverDx; *(pNode->fPsiPsijP1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->pEqn ] -= dy * pTEdge->jp + dx * pLEdge->jp; *(pNode->fPP) += dy * pTEdge->dJpDp + dx * pLEdge->dJpDp; *(pNode->fPPsiiP1) += dy * pTEdge->dJpDpsiP1; *(pNode->fPPiP1) += dy * pTEdge->dJpDpP1; *(pNode->fPPsijP1) += dx * pLEdge->dJpDpsiP1; *(pNode->fPPjP1) += dx * pLEdge->dJpDpP1; } } pNode = pElem->pTRNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= dyOverDx * dPsiT - dxOverDy * dPsiR; *(pNode->fPsiPsiiM1) -= dyOverDx; *(pNode->fPsiPsijP1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->pEqn ] -= -dy * pTEdge->jp + dx * pREdge->jp; *(pNode->fPP) += -dy * pTEdge->dJpDpP1 + dx * pREdge->dJpDp; *(pNode->fPPsiiM1) += dy * pTEdge->dJpDpsiP1; *(pNode->fPPiM1) -= dy * pTEdge->dJpDp; *(pNode->fPPsijP1) += dx * pREdge->dJpDpsiP1; *(pNode->fPPjP1) += dx * pREdge->dJpDpP1; } } pNode = pElem->pBRNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= dyOverDx * dPsiB + dxOverDy * dPsiR; *(pNode->fPsiPsiiM1) -= dyOverDx; *(pNode->fPsiPsijM1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->pEqn ] -= -dy * pBEdge->jp - dx * pREdge->jp; *(pNode->fPP) += -dy * pBEdge->dJpDpP1 - dx * pREdge->dJpDpP1; *(pNode->fPPsiiM1) += dy * pBEdge->dJpDpsiP1; *(pNode->fPPiM1) -= dy * pBEdge->dJpDp; *(pNode->fPPsijM1) += dx * pREdge->dJpDpsiP1; *(pNode->fPPjM1) -= dx * pREdge->dJpDp; } } pNode = pElem->pBLNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= -dyOverDx * dPsiB + dxOverDy * dPsiL; *(pNode->fPsiPsiiP1) -= dyOverDx; *(pNode->fPsiPsijM1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->pEqn ] -= dy * pBEdge->jp - dx * pLEdge->jp; *(pNode->fPP) += dy * pBEdge->dJpDp - dx * pLEdge->dJpDpP1; *(pNode->fPPsiiP1) += dy * pBEdge->dJpDpsiP1; *(pNode->fPPiP1) += dy * pBEdge->dJpDpP1; *(pNode->fPPsijM1) += dx * pLEdge->dJpDpsiP1; *(pNode->fPPjM1) -= dx * pLEdge->dJpDp; } } } /* Calculate the Inversion-Layer Mobility Dependent Terms in Jac. */ if ( MobDeriv && SurfaceMobility ) { for ( pCh = pDevice->pChannel; pCh != NULL; pCh = pCh->next ) { /* Find effective height of oxide element at interface. */ if ( pCh->type%2 == 0 ) { /* Vertical slice */ ds = pCh->pNElem->dy / pCh->pNElem->epsRel; } else { /* Horizontal slice */ ds = pCh->pNElem->dx / pCh->pNElem->epsRel; } pElem = pCh->pSeed; nextIndex = (pCh->type + 2)%4; while (pElem && pElem->channel == pCh->id) { TWOPmobDeriv( pElem, pCh->type, ds ); pElem = pElem->pElems[ nextIndex ]; } } /* endfor pCh != NULL */ } /* endif MobDeriv and SurfaceMobility */ } /* this function used only for direct method ac analysis Used to load only the dc Jacobian matrix. Rhs is unaffected */ void TWOPjacLoad(TWOdevice *pDevice) { TWOelem *pElem; TWOnode *pNode; TWOedge *pHEdge, *pVEdge; TWOedge *pTEdge, *pBEdge, *pLEdge, *pREdge; TWOchannel *pCh; int index, eIndex; int nextIndex; /* index of node to find next element */ double dx, dy, dxdy, dyOverDx, dxOverDy; double ds; double nConc; /* first compute the currents and derivatives */ TWOPcommonTerms( pDevice, FALSE, FALSE, NULL ); /* zero the matrix */ spClear( pDevice->matrix ); for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; dx = 0.5 * pElem->dx; dy = 0.5 * pElem->dy; dxdy = dx * dy; dxOverDy = 0.5 * pElem->epsRel * pElem->dxOverDy; dyOverDx = 0.5 * pElem->epsRel * pElem->dyOverDx; pTEdge = pElem->pTopEdge; pBEdge = pElem->pBotEdge; pLEdge = pElem->pLeftEdge; pREdge = pElem->pRightEdge; /* load for all i,j */ for ( index = 0; index <= 3; index++ ) { pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { *(pNode->fPsiPsi) += dyOverDx + dxOverDy; if ( pElem->elemType == SEMICON ) { if ( index <= 1 ) { pHEdge = pTEdge; } else { pHEdge = pBEdge; } if ( index == 0 || index == 3 ) { pVEdge = pLEdge; } else { pVEdge = pREdge; } nConc = pDevice->devState0 [pNode->nodeN]; *(pNode->fPsiPsi) += dxdy * nConc; *(pNode->fPsiP) -= dxdy; *(pNode->fPPsi) -= dy * pHEdge->dJpDpsiP1 + dx * pVEdge->dJpDpsiP1; /* Handle generation terms */ *(pNode->fPP) += dxdy * pNode->dUdP; *(pNode->fPPsi) += dxdy * pNode->dUdN * nConc; } } } /* Handle neighbor and edge dependent terms */ pNode = pElem->pTLNode; if ( pNode->nodeType != CONTACT ) { *(pNode->fPsiPsiiP1) -= dyOverDx; *(pNode->fPsiPsijP1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { *(pNode->fPP) += dy * pTEdge->dJpDp + dx * pLEdge->dJpDp; *(pNode->fPPsiiP1) += dy * pTEdge->dJpDpsiP1; *(pNode->fPPiP1) += dy * pTEdge->dJpDpP1; *(pNode->fPPsijP1) += dx * pLEdge->dJpDpsiP1; *(pNode->fPPjP1) += dx * pLEdge->dJpDpP1; } } pNode = pElem->pTRNode; if ( pNode->nodeType != CONTACT ) { *(pNode->fPsiPsiiM1) -= dyOverDx; *(pNode->fPsiPsijP1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { *(pNode->fPP) += -dy * pTEdge->dJpDpP1 + dx * pREdge->dJpDp; *(pNode->fPPsiiM1) += dy * pTEdge->dJpDpsiP1; *(pNode->fPPiM1) -= dy * pTEdge->dJpDp; *(pNode->fPPsijP1) += dx * pREdge->dJpDpsiP1; *(pNode->fPPjP1) += dx * pREdge->dJpDpP1; } } pNode = pElem->pBRNode; if ( pNode->nodeType != CONTACT ) { *(pNode->fPsiPsiiM1) -= dyOverDx; *(pNode->fPsiPsijM1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { *(pNode->fPP) += -dy * pBEdge->dJpDpP1 - dx * pREdge->dJpDpP1; *(pNode->fPPsiiM1) += dy * pBEdge->dJpDpsiP1; *(pNode->fPPiM1) -= dy * pBEdge->dJpDp; *(pNode->fPPsijM1) += dx * pREdge->dJpDpsiP1; *(pNode->fPPjM1) -= dx * pREdge->dJpDp; } } pNode = pElem->pBLNode; if ( pNode->nodeType != CONTACT ) { *(pNode->fPsiPsiiP1) -= dyOverDx; *(pNode->fPsiPsijM1) -= dxOverDy; if ( pElem->elemType == SEMICON ) { *(pNode->fPP) += dy * pBEdge->dJpDp - dx * pLEdge->dJpDpP1; *(pNode->fPPsiiP1) += dy * pBEdge->dJpDpsiP1; *(pNode->fPPiP1) += dy * pBEdge->dJpDpP1; *(pNode->fPPsijM1) += dx * pLEdge->dJpDpsiP1; *(pNode->fPPjM1) -= dx * pLEdge->dJpDp; } } } /* Calculate the Inversion-Layer Mobility Dependent Terms in Jac. */ if ( MobDeriv && SurfaceMobility ) { for ( pCh = pDevice->pChannel; pCh != NULL; pCh = pCh->next ) { /* Find effective height of oxide element at interface. */ if ( pCh->type%2 == 0 ) { /* Vertical slice */ ds = pCh->pNElem->dy / pCh->pNElem->epsRel; } else { /* Horizontal slice */ ds = pCh->pNElem->dx / pCh->pNElem->epsRel; } pElem = pCh->pSeed; nextIndex = (pCh->type + 2)%4; while (pElem && pElem->channel == pCh->id) { TWOPmobDeriv( pElem, pCh->type, ds ); pElem = pElem->pElems[ nextIndex ]; } } /* endfor pCh != NULL */ } /* endif MobDeriv and SurfaceMobility */ } /* load only the Rhs vector */ void TWOPrhsLoad(TWOdevice *pDevice, BOOLEAN tranAnalysis, TWOtranInfo *info) { TWOelem *pElem; TWOnode *pNode; TWOedge *pHEdge, *pVEdge; TWOedge *pTEdge, *pBEdge, *pLEdge, *pREdge; int index, eIndex; double *pRhs = pDevice->rhs; double dx, dy, dxdy, dyOverDx, dxOverDy; double dPsiT, dPsiB, dPsiL, dPsiR; double rhsP; double nConc, pConc; double perTime; /* first compute the currents */ TWOPcommonTerms( pDevice, TRUE, tranAnalysis, info ); /* find reciprocal timestep */ if ( tranAnalysis ) { perTime = info->intCoeff[0]; } /* zero the rhs vector */ for ( index = 1 ; index <= pDevice->numEqns ; index++ ) { pRhs[ index ] = 0.0; } for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; dx = 0.5 * pElem->dx; dy = 0.5 * pElem->dy; dxdy = dx * dy; dxOverDy = 0.5 * pElem->epsRel * pElem->dxOverDy; dyOverDx = 0.5 * pElem->epsRel * pElem->dyOverDx; pTEdge = pElem->pTopEdge; pBEdge = pElem->pBotEdge; pLEdge = pElem->pLeftEdge; pREdge = pElem->pRightEdge; dPsiT = pTEdge->dPsi; dPsiB = pBEdge->dPsi; dPsiL = pLEdge->dPsi; dPsiR = pREdge->dPsi; /* load for all i,j */ for ( index = 0; index <= 3; index++ ) { pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { if ( index <= 1 ) { pHEdge = pTEdge; } else { pHEdge = pBEdge; } if ( index == 0 || index == 3 ) { pVEdge = pLEdge; } else { pVEdge = pREdge; } /* Add surface state charges. */ pRhs[ pNode->psiEqn ] += dx * pHEdge->qf; pRhs[ pNode->psiEqn ] += dy * pVEdge->qf; if ( pElem->elemType == SEMICON ) { nConc = pDevice->devState0 [pNode->nodeN]; pConc = pDevice->devState0 [pNode->nodeP]; pRhs[ pNode->psiEqn ] += dxdy * (pNode->netConc + pConc - nConc); /* Handle generation terms */ rhsP = dxdy * pNode->uNet; pRhs[ pNode->pEqn ] -= rhsP; /* Handle dXdT continuity terms */ if ( tranAnalysis ) { pRhs[ pNode->pEqn ] -= dxdy * pNode->dPdT; } } } } /* Handle neighbor and edge dependent terms */ pNode = pElem->pTLNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= -dyOverDx * dPsiT - dxOverDy * dPsiL; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->pEqn ] -= dy * pTEdge->jp + dx * pLEdge->jp; } } pNode = pElem->pTRNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= dyOverDx * dPsiT - dxOverDy * dPsiR; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->pEqn ] -= -dy * pTEdge->jp + dx * pREdge->jp; } } pNode = pElem->pBRNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= dyOverDx * dPsiB + dxOverDy * dPsiR; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->pEqn ] -= -dy * pBEdge->jp - dx * pREdge->jp; } } pNode = pElem->pBLNode; if ( pNode->nodeType != CONTACT ) { pRhs[ pNode->psiEqn ] -= -dyOverDx * dPsiB + dxOverDy * dPsiL; if ( pElem->elemType == SEMICON ) { pRhs[ pNode->pEqn ] -= dy * pBEdge->jp - dx * pLEdge->jp; } } } } /* * computation of current densities, recombination rates, * mobilities and their derivatives */ void TWOPcommonTerms(TWOdevice *pDevice, BOOLEAN currentOnly, BOOLEAN tranAnalysis, TWOtranInfo *info) { TWOelem *pElem; TWOedge *pEdge; TWOnode *pNode; int index, eIndex; int nextIndex; /* index of node to find next element */ double psi1, psi2, refPsi, pC, pP1; double dPsiP; double bPsiP, dbPsiP, bMPsiP, dbMPsiP; double muP, dMuP, rDx, rDy; double psi, nConc = 0.0, pConc = 0.0; double cnAug, cpAug; double eSurf = 0.0; /* For channel mobilities */ double qInt = 0.0; TWOchannel *pCh; /* evaluate all node (including recombination) and edge quantities */ for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; refPsi = pElem->matlInfo->refPsi; cnAug = pElem->matlInfo->cAug[ELEC]; cpAug = pElem->matlInfo->cAug[HOLE]; for ( index = 0; index <= 3; index++ ) { if ( pElem->evalNodes[ index ] ) { pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { psi = pDevice->dcSolution[ pNode->psiEqn ]; if ( pElem->elemType == SEMICON ) { nConc = pNode->nie * exp( psi - refPsi ); pConc = pDevice->dcSolution[ pNode->pEqn ]; if ( Srh ) { recomb(nConc, pConc, pNode->tn, pNode->tp, cnAug, cpAug, pNode->nie, &pNode->uNet, &pNode->dUdN, &pNode->dUdP); } else { pNode->uNet = 0.0; pNode->dUdN = 0.0; pNode->dUdP = 0.0; } } } else { /* a contact node */ psi = pNode->psi; if ( pElem->elemType == SEMICON ) { nConc = pNode->nConc; pConc = pNode->pConc; } } /* store info in the state tables */ pDevice->devState0 [pNode->nodePsi] = psi; if ( pElem->elemType == SEMICON ) { pDevice->devState0 [pNode->nodeN] = nConc; pDevice->devState0 [pNode->nodeP] = pConc; if ( tranAnalysis && pNode->nodeType != CONTACT ) { pNode->dNdT = integrate( pDevice->devStates, info, pNode->nodeN ); pNode->dPdT = integrate( pDevice->devStates, info, pNode->nodeP ); } } } } for ( index = 0; index <= 3; index++ ) { if ( pElem->evalEdges[ index ] ) { pEdge = pElem->pEdges[ index ]; pNode = pElem->pNodes[ index ]; if ( pNode->nodeType != CONTACT ) { psi1 = pDevice->dcSolution[pNode->psiEqn]; } else { psi1 = pNode->psi; } pNode = pElem->pNodes[ (index + 1) % 4 ]; if ( pNode->nodeType != CONTACT ) { psi2 = pDevice->dcSolution[pNode->psiEqn]; } else { psi2 = pNode->psi; } if ( index <= 1 ) { pEdge->dPsi = psi2 - psi1; } else { pEdge->dPsi = psi1 - psi2; } pDevice->devState0 [pEdge->edgeDpsi] = pEdge->dPsi; if ( pElem->elemType == SEMICON ) { /* Calculate weighted driving forces - wdfn & wdfp for the edge */ dPsiP = pEdge->dPsi - pEdge->dVBand; bernoulli( dPsiP, &bPsiP, &dbPsiP, &bMPsiP, &dbMPsiP, !currentOnly); if ( index <= 1 ) { pC = *(pDevice->devState0 + pElem->pNodes[ index ]->nodeP); pP1 = *(pDevice->devState0 + pElem->pNodes[ index+1 ]->nodeP); } else { pC = *(pDevice->devState0 + pElem->pNodes[(index+1)%4]->nodeP); pP1 = *(pDevice->devState0 + pElem->pNodes[ index ]->nodeP); } pEdge->wdfp = bPsiP * pC - bMPsiP * pP1; pEdge->jp = 0.0; if ( !currentOnly ) { pEdge->dWpDpsiP1 = dbPsiP * pC - dbMPsiP * pP1; pEdge->dWpDp = bPsiP; pEdge->dWpDpP1 = - bMPsiP; pEdge->dJpDpsiP1 = 0.0; pEdge->dJpDp = 0.0; pEdge->dJpDpP1 = 0.0; } } } } } /* DAG: calculate mobilities for channel elems */ if ( SurfaceMobility ) { for ( pCh = pDevice->pChannel; pCh != NULL; pCh = pCh->next ) { pElem = pCh->pNElem; switch (pCh->type) { case 0: eSurf = - 0.5 * (pElem->pLeftEdge->dPsi + pElem->pRightEdge->dPsi ) * pElem->epsRel / pElem->dy; qInt = 0.5 * pElem->pBotEdge->qf; break; case 1: eSurf = - 0.5 * (pElem->pTopEdge->dPsi + pElem->pBotEdge->dPsi ) * pElem->epsRel / pElem->dx; qInt = 0.5 * pElem->pLeftEdge->qf; break; case 2: eSurf = - 0.5 * (pElem->pLeftEdge->dPsi + pElem->pRightEdge->dPsi ) * pElem->epsRel / pElem->dy; qInt = 0.5 * pElem->pTopEdge->qf; break; case 3: eSurf = - 0.5 * (pElem->pTopEdge->dPsi + pElem->pBotEdge->dPsi ) * pElem->epsRel / pElem->dx; qInt = 0.5 * pElem->pRightEdge->qf; break; } eSurf += qInt; pElem = pCh->pSeed; nextIndex = (pCh->type + 2)%4; while (pElem && pElem->channel == pCh->id) { TWOPmobility( pElem, eSurf ); pElem = pElem->pElems[ nextIndex ]; } } /* endfor pCH != NULL */ } /* endif SurfaceMobility */ /* calculate the current densities assuming mobility value depend on Ex,Ey*/ for ( eIndex = 1; eIndex <= pDevice->numElems; eIndex++ ) { pElem = pDevice->elements[ eIndex ]; rDx = 1.0 / pElem->dx; rDy = 1.0 / pElem->dy; for ( index = 0; index <= 3; index++ ) { pEdge = pElem->pEdges[ index ]; /* calculate conductive currents */ if ( pElem->elemType == SEMICON ) { /* get mobility for this edge */ if ( !pElem->channel ) { /* Calculate mobility for non-channel elements */ muP = pElem->mup0; dMuP = 0.0; dPsiP = pEdge->dPsi - pEdge->dVBand; if ( index%2 == 0 ) { MOBfieldDep( pElem->matlInfo, HOLE, - dPsiP * rDx, &muP, &dMuP ); } else { MOBfieldDep( pElem->matlInfo, HOLE, - dPsiP * rDy, &muP, &dMuP ); } } else { /* Retrieve previously calculated value. */ muP = pElem->mup; dMuP = 0.0; } switch ( index ) { case 0: muP *= pEdge->kPos * rDx; dMuP *= pEdge->kPos * rDx * rDx; break; case 1: muP *= pEdge->kNeg * rDy; dMuP *= pEdge->kNeg * rDy * rDy; break; case 2: muP *= pEdge->kNeg * rDx; dMuP *= pEdge->kNeg * rDx * rDx; break; case 3: muP *= pEdge->kPos * rDy; dMuP *= pEdge->kPos * rDy * rDy; break; } /* Now that the mobility for this edge is known, do current */ pEdge->jp += muP * pEdge->wdfp; if ( !currentOnly ) { pEdge->dJpDpsiP1 += muP * pEdge->dWpDpsiP1; pEdge->dJpDp += muP * pEdge->dWpDp; pEdge->dJpDpP1 += muP * pEdge->dWpDpP1; if ( MobDeriv && (!pElem->channel) ) { pEdge->dJpDpsiP1 -= dMuP * pEdge->wdfp; } } } /* calculate displacement current only once */ if ( pElem->evalEdges[ index ] ) { if ( tranAnalysis ) { if ( index == 0 || index == 2 ) { /* horizontal edges */ pEdge->jd = -integrate(pDevice->devStates, info, pEdge->edgeDpsi) * rDx; } else { /* vertical edges */ pEdge->jd = -integrate(pDevice->devStates, info, pEdge->edgeDpsi) * rDy; } } } } } } tmpk8ny_4pz/src/ciderlib/twod/twomobfn.c0000644000175000017500000003046313546075722020506 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1990 David A. Gates, U. C. Berkeley CAD Group **********/ #include "ngspice/ngspice.h" #include "ngspice/numglobs.h" #include "ngspice/numconst.h" #include "ngspice/numenum.h" #include "ngspice/twomesh.h" #include "ngspice/material.h" #include "twoddefs.h" #include "twodext.h" /* * These functions calculate the variable-dependence * of the surface mobilities */ void MOBsurfElec(TWOmaterial *info, TWOelem *pElem, double ex, double ey, double es, double wx, double wy, double totalConc) { double thetaA = info->thetaA[ELEC]; double thetaB = info->thetaB[ELEC]; double eL, eN, eD, e0, mun; double temp1, temp2, temp3, temp4, temp5; double temp6, temp7, temp8, temp9; double sgnN, sgnL; double dMunDEs; /* Surface Field Derivative */ double dMunDEn; /* (Local) Normal Field Derivative */ double dMunDEl; /* Tangent Field Derivative */ double muHC, muSR, muLV; double dMuSRDEn; double d2MuSRDEn2; double dMuHCDEl; double dMuHCDMuSR; double d2MuHCDMuSR2; double d2MuHCDElDMuSR; double dEnDEx; /* Normal Derivative x Component */ double dEnDEy; /* Normal Derivative y Component */ double dEnDWx; /* Normal Derivative x Component */ double dEnDWy; /* Normal Derivative y Component */ double dElDEx; /* Lateral Derivative x Component */ double dElDEy; /* Lateral Derivative y Component */ double dElDWx; /* Lateral Derivative x Component */ double dElDWy; /* Lateral Derivative y Component */ NG_IGNORE(wx); NG_IGNORE(wy); NG_IGNORE(totalConc); if ( pElem->surface ) { /* replace one field component with surface field */ if ( pElem->direction == 0 ) { ey = es; } else { ex = es; } } e0 = 1.0 / ENorm; if ( pElem->direction == 0 ) { eN = ABS( SALPHA_N*ey + SBETA_N*es ); sgnN = SGN( SALPHA_N*ey + SBETA_N*es ); eD = SALPHA_N*( es - ey ); dEnDEx = 0.0; dEnDEy = 1.0; dEnDWx = 0.0; dEnDWy = 0.0; eL = ABS( ex ); sgnL = SGN( ex ); dElDEx = 1.0; dElDEy = 0.0; dElDWx = 0.0; dElDWy = 0.0; } else { /* pElem->direction == Y */ eN = ABS( SALPHA_N*ex + SBETA_N*es ); sgnN = SGN( SALPHA_N*ex + SBETA_N*es ); eD = SALPHA_N*( es - ex ); dEnDEx = 1.0; dEnDEy = 0.0; dEnDWx = 0.0; dEnDWy = 0.0; eL = ABS( ey ); sgnL = SGN( ey ); dElDEx = 0.0; dElDEy = 1.0; dElDWx = 0.0; dElDWy = 0.0; } /* fprintf(stderr,"En = %e, Ep = %e, Ey = %e, Es= %e\n",eN,eL,ey,es); */ muLV = pElem->mun0; if ( TransDepMobility ) { /* Compute various partial derivatives of muSR */ temp1 = 1.0 / ( 1.0 + thetaA*eN + thetaB*eN*eN ); temp2 = (thetaA + 2.0*thetaB*eN); muSR = muLV * temp1; dMuSRDEn = - muSR * temp1 * temp2; d2MuSRDEn2 = - 2.0 * (dMuSRDEn * temp1 * temp2 + muSR * temp1 * thetaB); if ( FieldDepMobility ) { /* Compute various partial derivatives of muHC */ switch ( info->fieldModel ) { case CT: case AR: case UF: temp1 = 1.0 / info->vSat[ELEC]; temp2 = muSR * temp1; temp3 = eL * temp1; temp4 = eL * temp2; temp5 = 1.0 / ( 1.0 + temp4 * temp4 ); temp6 = sqrt( temp5 ); muHC = muSR * temp6; dMuHCDMuSR = temp5 * temp6; temp7 = temp4 * dMuHCDMuSR; temp8 = - 3.0 * temp7 * temp5; dMuHCDEl = - muSR * temp7 * temp2; d2MuHCDMuSR2 = temp8 * temp3; d2MuHCDElDMuSR = temp8 * temp2; break; case SG: default: temp1 = 1.0 / info->vSat[ELEC]; temp2 = muSR * eL * temp1; /* Vdrift / Vsat */ temp3 = 1.0 / info->vWarm[ELEC]; temp4 = muSR * eL * temp3; /* Vdrift / Vwarm */ temp5 = temp4 / (temp4 + SG_FIT_N); temp6 = 1.0 / (1.0 + temp5*temp4 + temp2*temp2); temp7 = sqrt(temp6); muHC = muSR * temp7; temp7 *= temp6; temp8 = (2.0 - temp5)*temp5*temp3 + 2.0*temp2*temp1; dMuHCDEl = - 0.5*muSR*temp7*temp8 * muSR; temp9 = temp5*temp5; dMuHCDMuSR = (1.0 + 0.5*temp9*temp4) * temp7; temp9 = (1.5 - temp5)*temp9*temp3 * temp7; temp9 -= 1.5 * dMuHCDMuSR * temp6 * temp8; d2MuHCDMuSR2 = temp9 * eL; d2MuHCDElDMuSR = temp9 * muSR; break; } /* Now compute total derivatives */ temp1 = dMuHCDMuSR * dMuSRDEn * sgnN; temp2 = d2MuHCDMuSR2 * dMuSRDEn * dMuSRDEn + dMuHCDMuSR * d2MuSRDEn2; temp3 = temp1 - temp2 * eD; mun = muHC - temp1 * eD; dMunDEn = (temp3 + temp1) * SALPHA_N; dMunDEs = temp3 * SBETA_N - temp1 * SALPHA_N; dMunDEl = (dMuHCDEl - d2MuHCDElDMuSR * dMuSRDEn * sgnN * eD) * sgnL; } else { /* Now compute total derivatives */ temp1 = dMuSRDEn * sgnN; temp3 = temp1 - d2MuSRDEn2 * eD; mun = muSR - temp1 * eD; dMunDEn = (temp3 + temp1) * SALPHA_N; dMunDEs = temp3 * SBETA_N - temp1 * SALPHA_N; dMunDEl = 0.0; } } else { if ( FieldDepMobility ) { /* Compute various partial derivatives of muHC */ switch ( info->fieldModel ) { case CT: case AR: case UF: temp1 = muLV / info->vSat[ELEC]; temp2 = eL * temp1; temp3 = 1.0 / ( 1.0 + temp2 * temp2 ); temp4 = sqrt( temp3 ); muHC = muLV * temp4; dMuHCDEl = - muHC*temp2*temp3 * temp1; break; case SG: default: temp1 = 1.0 / info->vSat[ELEC]; temp2 = muLV * eL * temp1; /* Vdrift / Vsat */ temp3 = 1.0 / info->vWarm[ELEC]; temp4 = muLV * eL * temp3; /* Vdrift / Vwarm */ temp5 = temp4 / (temp4 + SG_FIT_N); temp6 = 1.0 / (1.0 + temp5*temp4 + temp2*temp2); temp7 = sqrt(temp6); muHC = muLV * temp7; temp8 = (2.0 - temp5)*temp5*temp3 + 2.0*temp2*temp1; dMuHCDEl = - 0.5*muHC*temp6*temp8 * muLV; break; } /* Now compute total derivatives */ mun = muHC; dMunDEn = 0.0; dMunDEs = 0.0; dMunDEl = dMuHCDEl * sgnL; } else { mun = muLV; dMunDEn = 0.0; dMunDEs = 0.0; dMunDEl = 0.0; } } pElem->mun = mun; pElem->dMunDEs = dMunDEs; pElem->dMunDEx = dMunDEn * dEnDEx + dMunDEl * dElDEx; pElem->dMunDEy = dMunDEn * dEnDEy + dMunDEl * dElDEy; pElem->dMunDWx = dMunDEn * dEnDWx + dMunDEl * dElDWx; pElem->dMunDWy = dMunDEn * dEnDWy + dMunDEl * dElDWy; if ( pElem->surface ) { /* replace one field component with surface field */ if ( pElem->direction == 0 ) { pElem->dMunDEs += pElem->dMunDEy; pElem->dMunDEy = 0.0; } else { pElem->dMunDEs += pElem->dMunDEx; pElem->dMunDEx = 0.0; } } return; } void MOBsurfHole(TWOmaterial *info, TWOelem *pElem, double ex, double ey, double es, double wx, double wy, double totalConc) { double thetaA = info->thetaA[HOLE]; double thetaB = info->thetaB[HOLE]; double eL, eN, eD, mup; double temp1, temp2, temp3, temp4, temp5; double temp6, temp7, temp8, temp9; double sgnN, sgnL; double dMupDEs; /* Surface Field Derivative */ double dMupDEn; /* (Local) Normal Field Derivative */ double dMupDEl; /* Tangent Field Derivative */ double muHC, muSR, muLV; double dMuSRDEn; double d2MuSRDEn2; double dMuHCDEl; double dMuHCDMuSR; double d2MuHCDMuSR2; double d2MuHCDElDMuSR; double dEnDEx; /* Normal Derivative x Component */ double dEnDEy; /* Normal Derivative y Component */ double dEnDWx; /* Normal Derivative x Component */ double dEnDWy; /* Normal Derivative y Component */ double dElDEx; /* Lateral Derivative x Component */ double dElDEy; /* Lateral Derivative y Component */ double dElDWx; /* Lateral Derivative x Component */ double dElDWy; /* Lateral Derivative y Component */ NG_IGNORE(wx); NG_IGNORE(wy); NG_IGNORE(totalConc); if ( pElem->surface ) { /* replace one field component with surface field */ if ( pElem->direction == 0 ) { ey = es; } else { ex = es; } } if ( pElem->direction == 0 ) { eN = ABS( SALPHA_P*ey + SBETA_P*es ); sgnN = SGN( SALPHA_P*ey + SBETA_P*es ); eD = SALPHA_P*( es - ey ); dEnDEx = 0.0; dEnDEy = 1.0; dEnDWx = 0.0; dEnDWy = 0.0; eL = ABS( ex ); sgnL = SGN( ex ); dElDEx = 1.0; dElDEy = 0.0; dElDWx = 0.0; dElDWy = 0.0; } else { /* pElem->direction == Y */ eN = ABS( SALPHA_P*ex + SBETA_P*es ); sgnN = SGN( SALPHA_P*ex + SBETA_P*es ); eD = SALPHA_P*( es - ex ); dEnDEx = 1.0; dEnDEy = 0.0; dEnDWx = 0.0; dEnDWy = 0.0; eL = ABS( ey ); sgnL = SGN( ey ); dElDEx = 0.0; dElDEy = 1.0; dElDWx = 0.0; dElDWy = 0.0; } muLV = pElem->mup0; if ( TransDepMobility ) { /* Compute various partial derivatives of muSR */ temp1 = 1.0 / ( 1.0 + thetaA*eN + thetaB*eN*eN ); temp2 = thetaA + 2.0*thetaB*eN; muSR = muLV * temp1; dMuSRDEn = - muSR * temp1 * temp2; d2MuSRDEn2 = - 2.0 * (dMuSRDEn * temp1 * temp2 + muSR * temp1 * thetaB); if ( FieldDepMobility ) { /* Compute various partial derivatives of muHC */ switch ( info->fieldModel ) { case CT: case AR: case UF: temp1 = 1.0 / info->vSat[HOLE]; temp2 = muSR * temp1; temp3 = eL * temp1; temp4 = eL * temp2; temp5 = 1.0 / ( 1.0 + temp4 ); muHC = muSR * temp5; dMuHCDMuSR = temp5 * temp5; dMuHCDEl = - muSR * dMuHCDMuSR * temp2; temp6 = - 2.0 * dMuHCDMuSR * temp5; d2MuHCDMuSR2 = temp6 * temp3; d2MuHCDElDMuSR = temp6 * temp2; break; case SG: default: temp1 = 1.0 / info->vSat[HOLE]; temp2 = muSR * eL * temp1; /* Vdrift / Vsat */ temp3 = 1.0 / info->vWarm[HOLE]; temp4 = muSR * eL * temp3; /* Vdrift / Vwarm */ temp5 = temp4 / (temp4 + SG_FIT_P); temp6 = 1.0 / (1.0 + temp5*temp4 + temp2*temp2); temp7 = sqrt(temp6); muHC = muSR * temp7; temp7 *= temp6; temp8 = (2.0 - temp5)*temp5*temp3 + 2.0*temp2*temp1; dMuHCDEl = - 0.5*muSR*temp7*temp8 * muSR; temp9 = temp5*temp5; dMuHCDMuSR = (1.0 + 0.5*temp9*temp4) * temp7; temp9 = (1.5 - temp5)*temp9*temp3 * temp7; temp9 -= 1.5 * dMuHCDMuSR * temp6 * temp8; d2MuHCDMuSR2 = temp9 * eL; d2MuHCDElDMuSR = temp9 * muSR; break; } /* Now compute total derivatives */ temp1 = dMuHCDMuSR * dMuSRDEn * sgnN; temp2 = d2MuHCDMuSR2 * dMuSRDEn * dMuSRDEn + dMuHCDMuSR * d2MuSRDEn2; temp3 = temp1 - temp2 * eD; mup = muHC - temp1 * eD; dMupDEn = (temp3 + temp1) * SALPHA_P; dMupDEs = temp3 * SBETA_P - temp1 * SALPHA_P; dMupDEl = (dMuHCDEl - d2MuHCDElDMuSR * dMuSRDEn * sgnN * eD ) * sgnL; } else { /* Now compute total derivatives */ temp1 = dMuSRDEn * sgnN; temp3 = temp1 - d2MuSRDEn2 * eD; mup = muSR - temp1 * eD; dMupDEn = (temp3 + temp1) * SALPHA_P; dMupDEs = temp3 * SBETA_P - temp1 * SALPHA_P; dMupDEl = 0.0; } } else { if ( FieldDepMobility ) { /* Compute various partial derivatives of muHC */ switch ( info->fieldModel ) { case CT: case AR: case UF: temp1 = muLV / info->vSat[HOLE]; temp2 = eL * temp1; temp3 = 1.0 / ( 1.0 + temp2 ); muHC = muLV * temp3; dMuHCDEl = - muHC * temp3 * temp1; break; case SG: default: temp1 = 1.0 / info->vSat[HOLE]; temp2 = muLV * eL * temp1; /* Vdrift / Vsat */ temp3 = 1.0 / info->vWarm[HOLE]; temp4 = muLV * eL * temp3; /* Vdrift / Vwarm */ temp5 = temp4 / (temp4 + SG_FIT_P); temp6 = 1.0 / (1.0 + temp5*temp4 + temp2*temp2); temp7 = sqrt(temp6); muHC = muLV * temp7; temp8 = (2.0 - temp5)*temp5*temp3 + 2.0*temp2*temp1; dMuHCDEl = - 0.5*muHC*temp6*temp8 * muLV; break; } /* Now compute total derivatives */ mup = muHC; dMupDEn = 0.0; dMupDEs = 0.0; dMupDEl = dMuHCDEl * sgnL; } else { mup = muLV; dMupDEn = 0.0; dMupDEs = 0.0; dMupDEl = 0.0; } } pElem->mup = mup; pElem->dMupDEs = dMupDEs; pElem->dMupDEx = dMupDEn * dEnDEx + dMupDEl * dElDEx; pElem->dMupDEy = dMupDEn * dEnDEy + dMupDEl * dElDEy; pElem->dMupDWx = dMupDEn * dEnDWx + dMupDEl * dElDWx; pElem->dMupDWy = dMupDEn * dEnDWy + dMupDEl * dElDWy; if ( pElem->surface ) { /* replace one field component with surface field */ if ( pElem->direction == 0 ) { pElem->dMupDEs += pElem->dMupDEy; pElem->dMupDEy = 0.0; } else { pElem->dMupDEs += pElem->dMupDEx; pElem->dMupDEx = 0.0; } } return; } tmpk8ny_4pz/src/ciderlib/twod/twoddefs.h0000644000175000017500000000236213546075722020474 0ustar carstencarsten/* * 2001 Paolo Nenzi */ #ifndef ngspice_TWODDEFS_H #define ngspice_TWODDEFS_H /* Debug statements */ extern BOOLEAN TWOacDebug; extern BOOLEAN TWOdcDebug; extern BOOLEAN TWOtranDebug; extern BOOLEAN TWOjacDebug; /* Now some defines for the two dimensional simulator * library. * Theese defines were gathered from all the code in * oned directory. */ /* Temporary hack to remove NUMOS gate special case */ #ifdef NORMAL_GATE #define GateTypeAdmittance oxideAdmittance #else #define GateTypeAdmittance contactAdmittance #endif /* NORMAL_GATE */ /* Temporary hack to remove NUMOS gate special case */ #ifdef NORMAL_GATE #define GateTypeConductance oxideConductance #define GateTypeCurrent oxideCurrent #else #define GateTypeConductance contactConductance #define GateTypeCurrent contactCurrent #endif /* NORMAL_GATE */ /* This structure was moved up from twoadmit.c */ struct mosAdmittances { SPcomplex yIdVdb; SPcomplex yIdVsb; SPcomplex yIdVgb; SPcomplex yIsVdb; SPcomplex yIsVsb; SPcomplex yIsVgb; SPcomplex yIgVdb; SPcomplex yIgVsb; SPcomplex yIgVgb; }; #define MAXTERMINALS 5 /* One more than max number of terminals */ #define ELCT_ID poiEqn #define MIN_DELV 1e-3 #define NORM_RED_MAXITERS 10 #endif tmpk8ny_4pz/src/nghelp.c0000644000175000017500000000436513546075722015400 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1986 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * The main routine for the help system in stand-alone mode. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/hlpdefs.h" #include "frontend/variable.h" #ifndef X_DISPLAY_MISSING Widget toplevel; #endif FILE *cp_in, *cp_out, *cp_err; /* dummy declaration so CP.a doesn't pull in lexical.o and other objects */ bool cp_interactive = FALSE; char *hlp_filelist[] = { "ngspice", 0 }; extern void ivars(char*); #ifdef HAS_WINGUI FILE *flogp; /* hvogt 15.12.2001 */ #endif /* HAS_WINGUI */ int #ifdef HAS_WINGUI xmain(int ac, char **av) #else main(int ac, char **av) #endif /* HAS_WINGUI */ { wordlist *wl = NULL; #ifndef X_DISPLAY_MISSING char *displayname; /* grrr, Xtk forced contortions */ char *argv[2]; int argc = 2; char buf[512]; #endif /* X_DISPLAY_MISSING */ ivars(NULL); cp_in = stdin; cp_out = stdout; cp_err = stderr; #ifndef X_DISPLAY_MISSING if (cp_getvar("display", CP_STRING, buf, sizeof(buf))) { displayname = buf; } else if (!(displayname = getenv("DISPLAY"))) { fprintf(stderr, "Can't open X display."); goto out; } argv[0] = "nutmeg"; argv[1] = displayname; /* initialize X toolkit */ toplevel = XtInitialize("nutmeg", "Nutmeg", NULL, 0, &argc, argv); out: #endif /* X_DISPLAY_MISSING */ if (ac > 1) wl = wl_build(av + 1); hlp_main(Help_Path, wl); #ifndef X_DISPLAY_MISSING if (hlp_usex) { printf("Hit control-C when done.\n"); /* sigh */ XtMainLoop(); } #endif /* X_DISPLAY_MISSING */ #ifdef HAS_WINGUI /* Keep window open untill a key is pressed */ printf("Press a key to quit\n"); while( getchar() == EOF) {} #endif /* HAS_WINGUI */ return EXIT_NORMAL; } /* void fatal(char *s) { fprintf(stderr, "fatal error: %s\n", s); exit(1); } There is a conflict with another cp_printword in cp/quote.c static void cp_printword(s) char *s; { printf("%s", s); return; } */ bool cp_getvar(char *n, enum cp_types type, void *r, size_t rs) { return (FALSE); } char * cp_tildexpand(char *s) { return tildexpand(s); } tmpk8ny_4pz/src/include/0000755000175000017500000000000013546075722015372 5ustar carstencarstentmpk8ny_4pz/src/include/ngspice/0000755000175000017500000000000013546075722017022 5ustar carstencarstentmpk8ny_4pz/src/include/ngspice/fteoptdefs.h0000644000175000017500000000126713546075722021344 0ustar carstencarsten/********** Author: 2010 Paolo Nenzi **********/ #ifndef ngspice_FTEOPTDEFS_H #define ngspice_FTEOPTDEFS_H /* Structure used to describe the frontend statistics to be collected */ /* This is similar to the STATististics in optdefs.h but collects */ /* statistics pertaining to ngspice frontend */ typedef struct sFTESTATistics { int FTESTATdeckNumLines; /* number of lines in spice deck */ double FTESTATnetLoadTime; /* total time required to load the spice deck */ double FTESTATnetParseTime; /* total time required to parse the netlist */ } FTESTATistics; enum { FTEOPT_NLDECK = 1, FTEOPT_NLT, FTEOPT_NPT, }; #endif tmpk8ny_4pz/src/include/ngspice/evtproto.h0000644000175000017500000000477713546075722021074 0ustar carstencarsten#ifndef ngspice_EVTPROTO_H #define ngspice_EVTPROTO_H /* =========================================================================== FILE EVTproto.h MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains ANSI C function prototypes for functions in the event-driven simulation algorithm package. INTERFACES None. REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ #include "ngspice/cktdefs.h" #include "ngspice/cpstd.h" #include "ngspice/evt.h" #include "ngspice/mifdefs.h" #include "ngspice/ipc.h" /* ******************* */ /* Function Prototypes */ /* ******************* */ int EVTinit(CKTcircuit *ckt); /*int EVTinit2(CKTcircuit *ckt);*/ void EVTtermInsert( CKTcircuit *ckt, MIFinstance *fast, char *node_name, char *type_name, int conn_num, int port_num, char **err_msg); int EVTsetup(CKTcircuit *ckt); int EVTdest(Evt_Ckt_Data_t *evt); int EVTiter(CKTcircuit *ckt); void EVTbackup(CKTcircuit *ckt, double new_time); double EVTnext_time(CKTcircuit *ckt); void EVTqueue_output( CKTcircuit *ckt, int output_index, int udn_index, Evt_Output_Event_t *new_event, double posted_time, double event_time); void EVTqueue_inst( CKTcircuit *ckt, int inst_index, double posted_time, double event_time); void EVTdequeue(CKTcircuit *ckt, double time); int EVTload(CKTcircuit *ckt, int inst_index); void EVTprint(wordlist *wl); void EVTprintvcd(wordlist *wl); void EVTdisplay(wordlist *wl); int EVTop( CKTcircuit *ckt, long firstmode, long continuemode, int max_iter, Mif_Boolean_t first_call); void EVTop_save( CKTcircuit *ckt, Mif_Boolean_t op, double step); void EVTnode_copy( CKTcircuit *ckt, int node_index, Evt_Node_t *from, Evt_Node_t **to); void EVTcall_hybrids(CKTcircuit *ckt); void EVTdump( CKTcircuit *ckt, Ipc_Anal_t mode, double step); void EVTaccept( CKTcircuit *ckt, /* main circuit struct */ double time); /* time at which analog soln was accepted */ struct dvec *EVTfindvec(char *node); #endif tmpk8ny_4pz/src/include/ngspice/dstring.h0000644000175000017500000000372713546075722020656 0ustar carstencarsten/* dstring.h */ #ifndef ngspice_DSTRING_H #define ngspice_DSTRING_H /* ----------------------------------------------------------------- * This structure is modified from Tcl. We do this to avoid a * conflict and later add a conditional compile to just use the Tcl * code if desired. ----------------------------------------------------------------- */ #define SPICE_DSTRING_STATIC_SIZE 200 typedef struct spice_dstring { char *string; /* Points to beginning of string: either * staticSpace below or a malloced array. */ int length ; /* Number of characters in the string excluding the * terminating NULL. */ int spaceAvl ; /* Total number of bytes available for the * string and its terminating NULL char. */ char staticSpace[SPICE_DSTRING_STATIC_SIZE] ; /* Space to use in common case where string * is small. */ } SPICE_DSTRING, *SPICE_DSTRINGPTR ; /* ----------------------------------------------------------------- * spice_dstring_xxxx routines. Used to manipulate dynamic strings. ----------------------------------------------------------------- */ extern void spice_dstring_init(SPICE_DSTRINGPTR dsPtr) ; extern char *spice_dstring_append(SPICE_DSTRINGPTR dsPtr,const char *string,int length) ; extern char *spice_dstring_append_lower(SPICE_DSTRINGPTR dsPtr,const char *string,int length) ; extern char *spice_dstring_append_char(SPICE_DSTRINGPTR dsPtr,char c) ; extern char *spice_dstring_print(SPICE_DSTRINGPTR dsPtr,const char *format, ... ) ; extern char *spice_dstring_setlength(SPICE_DSTRINGPTR dsPtr,int length) ; extern char *_spice_dstring_setlength(SPICE_DSTRINGPTR dsPtr,int length) ; extern void spice_dstring_free(SPICE_DSTRINGPTR dsPtr) ; #define spice_dstring_reinit(x_xz) spice_dstring_setlength(x_xz,0) ; #define spice_dstring_value(x_xz) ((x_xz)->string) #define spice_dstring_space(x_xz) ((x_xz)->spaceAvl) #define spice_dstring_length(x_xz) ((x_xz)->length) #endif tmpk8ny_4pz/src/include/ngspice/fteinp.h0000644000175000017500000000052213546075722020457 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ #ifndef ngspice_FTEINP_H #define ngspice_FTEINP_H #include "ngspice/inpdefs.h" /* Listing types. */ #define LS_LOGICAL 1 #define LS_PHYSICAL 2 #define LS_DECK 3 #endif tmpk8ny_4pz/src/include/ngspice/twodev.h0000644000175000017500000001064613546075722020512 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors: 1987 Karti Mayaram, 1991 David Gates **********/ /* Member of CIDER device simulator * Version: 1b1 */ /* * Two-Dimensional Numerical Device Data Structures */ #ifndef ngspice_TWODEV_H #define ngspice_TWODEV_H #include "ngspice/gendev.h" #include "ngspice/smpdefs.h" typedef struct sTWOdevice { double *dcSolution; /* solution vector for device */ double *dcDeltaSolution; /* delta solution vector */ double *copiedSolution; /* copy of the solution vector */ double *rhs; /* rhs vector */ double *rhsImag; /* imaginary part of rhs vector */ SMPmatrix *matrix; /* matrix for device equations */ int solverType; /* what is matrix set up to do */ int dimEquil; /* dimension in equilibrium */ int numOrigEquil; /* orig number of nz's in equilibrium */ int numFillEquil; /* fill number of nz's in equilibrium */ int dimBias; /* dimension under bias */ int numOrigBias; /* orig number of nz's under bias */ int numFillBias; /* fill number of nz's under bias */ int numEqns; /* number of equations */ int poissonOnly; /* flag for Poisson eqn solution */ struct sTWOelem **elements; /* 1D list of elements */ struct sTWOelem ***elemArray; /* 2D list of elements for printing */ double **devStates; /* device states */ double *xScale; /* array of X node locations */ double *yScale; /* array of Y node locations */ int numXNodes; /* number of X nodes */ int numYNodes; /* number of Y nodes */ int numNodes; /* total number of nodes */ int numEdges; /* total number of edges */ int numElems; /* total number of elements */ struct sTWOcontact *pFirstContact; /* first contact */ struct sTWOcontact *pLastContact; /* last contact */ struct sTWOchannel *pChannel; /* surface mobility channel */ struct sMaterialInfo *pMaterials; /* temp-dep material information */ struct sStatInfo *pStats; /* run-time statistics */ int converged; /* flag for device convergence */ int iterationNumber; /* device iteration counter */ double width; /* device width in CM */ double rhsNorm; /* norm of rhs vector */ double abstol; /* absolute tolerance for device */ double reltol; /* relative tolerance for device */ char *name; /* name of device */ } TWOdevice; #define devState0 devStates[0] #define devState1 devStates[1] #define devState2 devStates[2] #define devState3 devStates[3] #define devState4 devStates[4] #define devState5 devStates[5] #define devState6 devStates[6] #define devState7 devStates[7] typedef struct sTWOcontact { struct sTWOcontact *next; /* pointer to next contact */ struct sTWOnode **pNodes; /* pointer to the contact nodes */ int numNodes; /* number of nodes in contact */ int id; /* unique contact identifier */ double workf; /* metal work function */ } TWOcontact; /* Structure for channels. * A channel is divided into 'columns' that are perpendicular to the * channel's insulator/semiconductor interface. Each column begins * at its 'seed', the closest semiconductor element to the interface. * It is assumed that the current flows parallel to the interface. */ typedef struct sTWOchannel { struct sTWOchannel *next; /* pointer to next channel */ struct sTWOelem *pSeed; /* pointer to the seed element */ struct sTWOelem *pNElem; /* pointer to the insulator element */ int id; /* unique channel identifier */ int type; /* ID of direction to interface */ } TWOchannel; struct mosConductances { double dIdDVdb; double dIdDVsb; double dIdDVgb; double dIsDVdb; double dIsDVsb; double dIsDVgb; double dIgDVdb; double dIgDVsb; double dIgDVgb; }; #endif tmpk8ny_4pz/src/include/ngspice/opdefs.h0000644000175000017500000000072313546075722020455 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #ifndef ngspice_OPDEFS_H #define ngspice_OPDEFS_H #include "ngspice/cktdefs.h" #include "ngspice/jobdefs.h" #include "ngspice/tskdefs.h" /* * structures used to describe D.C. operationg point analyses to * be performed. */ typedef struct { int JOBtype; JOB *JOBnextJob; char *JOBname; } OP; #endif tmpk8ny_4pz/src/include/ngspice/cm.h0000644000175000017500000000370713546075722017601 0ustar carstencarsten#ifndef ngspice_CM_H #define ngspice_CM_H /* =========================================================================== FILE CM.h MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file is includes all include data in the CM package. INTERFACES None. REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ #include "ngspice/config.h" #include "ngspice/cmtypes.h" #include "ngspice/cmconstants.h" #include "ngspice/cmproto.h" #include "ngspice/mifcmdat.h" #include #if defined(_MSC_VER) #include #define fileno _fileno #else #include #endif #include "ngspice/const.h" #ifndef M_PI #define M_PI CONSTpi #endif #ifndef M_E #define M_E CONSTnap #endif #ifndef M_LOG2E #define M_LOG2E CONSTlog2e #endif #ifndef M_LOG10E #define M_LOG10E CONSTlog10e #endif #if !defined(NAN) #if defined(_MSC_VER) /* NAN is not defined in VS 2012 or older */ static const __int64 global_nan = 0x7ff8000000000000i64; #define NAN (*(const double *) &global_nan) #else #define NAN (0.0/0.0) #endif #endif /* * type safe variants of the functions for char arguments */ #if !defined(isalpha_c) inline static int char_to_int(char c) { return (unsigned char) c; } #define isalpha_c(x) isalpha(char_to_int(x)) #define islower_c(x) islower(char_to_int(x)) #define isdigit_c(x) isdigit(char_to_int(x)) #define isalnum_c(x) isalnum(char_to_int(x)) #define isprint_c(x) isprint(char_to_int(x)) #define isblank_c(x) isblank(char_to_int(x)) #define isspace_c(x) isspace(char_to_int(x)) #define isupper_c(x) isupper(char_to_int(x)) #define tolower_c(x) ((char) tolower(char_to_int(x))) #define toupper_c(x) ((char) toupper(char_to_int(x))) #endif #endif tmpk8ny_4pz/src/include/ngspice/dvec.h0000644000175000017500000000560113546075722020116 0ustar carstencarsten#ifndef ngspice_DVEC_H #define ngspice_DVEC_H #include "ngspice/complex.h" #include "ngspice/grid.h" #include "ngspice/sim.h" /* Dvec flags. */ enum dvec_flags { VF_REAL = (1 << 0), /* The data is real. */ VF_COMPLEX = (1 << 1), /* The data is complex. */ VF_ACCUM = (1 << 2), /* writedata should save this vector. */ VF_PLOT = (1 << 3), /* writedata should incrementally plot it. */ VF_PRINT = (1 << 4), /* writedata should print this vector. */ VF_MINGIVEN = (1 << 5), /* The v_minsignal value is valid. */ VF_MAXGIVEN = (1 << 6), /* The v_maxsignal value is valid. */ VF_PERMANENT = (1 << 7) /* Don't garbage collect this vector. */ }; /* Plot types. */ typedef enum { PLOT_LIN, PLOT_COMB, PLOT_POINT, PLOT_MONOLIN } PLOTTYPE; /* A (possibly multi-dimensional) data vector. The data is represented * internally by a 1-d array. The number of dimensions and the size * of each dimension is recorded, along with v_length, the total size of * the array. If the dimensionality is 0 or 1, v_length is significant * instead of v_numdims and v_dims, and the vector is handled in the old * manner. */ #define MAXDIMS 8 struct dvec { char *v_name; /* Same as so_vname. */ enum simulation_types v_type; /* Same as so_vtype. */ short v_flags; /* Flags (a combination of VF_*). */ double *v_realdata; /* Real data. */ ngcomplex_t *v_compdata; /* Complex data. */ double v_minsignal; /* Minimum value to plot. */ double v_maxsignal; /* Maximum value to plot. */ GRIDTYPE v_gridtype; /* One of GRID_*. */ PLOTTYPE v_plottype; /* One of PLOT_*. */ int v_length; /* Length of the vector. */ int v_alloc_length; /* How much has been actually allocated. */ int v_rlength; /* How much space we really have. Used as binary flag */ int v_outindex; /* Index if writedata is building the vector. */ int v_linestyle; /* What line style we are using. */ int v_color; /* What color we are using. */ char *v_defcolor; /* The name of a color to use. */ int v_numdims; /* How many dims -- 0 = scalar (len = 1). */ int v_dims[MAXDIMS]; /* The actual size in each dimension. */ struct plot *v_plot; /* The plot structure (if it has one). */ struct dvec *v_next; /* Link for list of plot vectors. */ struct dvec *v_link2; /* Extra link for things like print. */ struct dvec *v_scale; /* If this has a non-standard scale... */ } ; #define isreal(v) ((v)->v_flags & VF_REAL) #define iscomplex(v) ((v)->v_flags & VF_COMPLEX) /* list of data vectors being displayed */ struct dveclist { struct dvec *vector; struct dveclist *next; }; struct dvec *dvec_alloc(char *name, int type, short flags, int length, void *storage); void dvec_realloc(struct dvec *v, int length, void *storage); void dvec_extend(struct dvec *v, int length); void dvec_trunc(struct dvec *v, int length); void dvec_free(struct dvec *); #endif tmpk8ny_4pz/src/include/ngspice/meshdefs.h0000644000175000017500000000176113546075722020776 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David Gates **********/ /* Member of CIDER device simulator * Version: 1b1 */ #ifndef ngspice_MESHDEFS_H #define ngspice_MESHDEFS_H /* Data Structures and Definitions for Device Simulation Cards */ typedef struct sMESHcard { struct sMESHcard *MESHnextCard; double MESHlocation; double MESHwidth; double MESHlocStart; double MESHlocEnd; double MESHhStart; double MESHhEnd; double MESHhMax; double MESHratio; int MESHnumber; unsigned int MESHlocationGiven : 1; unsigned int MESHwidthGiven : 1; unsigned int MESHhStartGiven : 1; unsigned int MESHhEndGiven : 1; unsigned int MESHhMaxGiven : 1; unsigned int MESHratioGiven : 1; unsigned int MESHnumberGiven : 1; } MESHcard; /* MESH parameters */ enum { MESH_NUMBER = 1, MESH_LOCATION, MESH_WIDTH, MESH_H_START, MESH_H_END, MESH_H_MAX, MESH_RATIO, }; #endif tmpk8ny_4pz/src/include/ngspice/missing_math.h0000644000175000017500000000146713546075722021665 0ustar carstencarsten/********** Copyright 1999 Emmanuel Rouat **********/ /* Decl. for missing maths functions, if any */ #ifndef ngspice_MISSING_MATH_H #define ngspice_MISSING_MATH_H bool AlmostEqualUlps(double, double, int); #ifndef HAVE_LOGB extern double logb(double); #endif #ifndef HAVE_SCALB extern double scalb(double, double); #endif #ifndef HAVE_SCALBN extern double scalbn(double, int); #endif #if !HAVE_DECL_ISNAN #ifndef HAVE_ISNAN extern int isnan(double); #endif #endif #if !HAVE_DECL_ISINF #ifndef HAVE_ISINF #if defined(HAVE_FINITE) && (HAVE_DECL_ISNAN || defined (HAVE_ISNAN)) #define isinf(x) (!finite(x) && !isnan(x)) #define HAVE_ISINF #else #ifdef HAVE_IEEEFP_H extern int isinf(double); #endif #endif #else /* HAVE_ISINF */ extern int isinf(double); #endif /* HAVE_ISINF */ #endif /* HAVE_DECL_ISINF */ #endif tmpk8ny_4pz/src/include/ngspice/fteparse.h0000644000175000017500000000505713546075722021013 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * * Stuff for parsing -- used by the parser and in ft_evaluate(). */ #ifndef ngspice_FTEPARSE_H #define ngspice_FTEPARSE_H #include "ngspice/cpstd.h" #include "ngspice/dvec.h" #include "ngspice/plot.h" /* FIXME: Split this file and adjust all callers. */ #if 0 #warning "Please use a more specific header than fteparse.h" #endif #include "ngspice/pnode.h" /* Operations. These should really be considered functions. */ struct op { int op_num; /* From parser #defines. */ char *op_name; /* Printing name. */ char op_arity; /* One or two. */ union { void (*anonymous)(void); struct dvec *(*unary)(struct pnode *); struct dvec *(*binary)(struct pnode *, struct pnode *); } op_func; /* The function to do the work. */ } ; /* The functions that are available. */ struct func { /* The print name of the function. */ char *fu_name; /* The function. */ void *(*fu_func)(void *data, short int type, int length, int *newlength, short int *newtype); } ; /* User-definable functions. The idea of ud_name is that the args are * kept in strings after the name, all seperated by '\0's. There * will be ud_arity of them. */ struct udfunc { char *ud_name; /* The name. */ int ud_arity; /* The arity of the function. */ struct pnode *ud_text; /* The definition. */ struct udfunc *ud_next; /* Link pointer. */ } ; /* Parser elements. */ struct element { int e_token; /* One of the below. */ int e_type; /* If the token is VALUE. */ union { char *un_string; double un_double; struct pnode *un_pnode; } e_un; #define e_string e_un.un_string #define e_double e_un.un_double #define e_indices e_un.un_indices #define e_pnode e_un.un_pnode }; /* See the table in parse.c */ #define PT_OP_END 0 #define PT_OP_PLUS 1 #define PT_OP_MINUS 2 #define PT_OP_TIMES 3 #define PT_OP_MOD 4 #define PT_OP_DIVIDE 5 #define PT_OP_POWER 6 #define PT_OP_UMINUS 7 #define PT_OP_LPAREN 8 #define PT_OP_RPAREN 9 #define PT_OP_COMMA 10 #define PT_OP_VALUE 11 #define PT_OP_EQ 12 #define PT_OP_GT 13 #define PT_OP_LT 14 #define PT_OP_GE 15 #define PT_OP_LE 16 #define PT_OP_NE 17 #define PT_OP_AND 18 #define PT_OP_OR 19 #define PT_OP_NOT 20 #define PT_OP_INDX 21 #define PT_OP_RANGE 22 #define PT_OP_TERNARY 23 #endif tmpk8ny_4pz/src/include/ngspice/ipc.h0000644000175000017500000000532113546075722017747 0ustar carstencarsten/*============================================================================ FILE IPC.h MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Steve Tynor MODIFICATIONS SUMMARY Provides compatibility for the new SPICE simulator to both the MSPICE user interface and BCP (via ATESSE v.1 style AEGIS mailboxes) and the new ATESSE v.2 Simulator Interface and BCP (via Bsd Sockets). INTERFACES REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #ifndef ngspice_IPC_H #define ngspice_IPC_H #define IPC_MAX_LINE_LEN 80 #define IPC_MAX_PATH_LEN 2048 /* Known socket port for server and client to communicate: */ #define SOCKET_PORT 1064 /* Recognition character for Beginning Of Line of message: */ #define BOL_CHAR '\\' /* Length (in bytes) of a socket message header: */ #define SOCK_MSG_HDR_LEN 5 typedef int Ipc_Boolean_t; #define IPC_FALSE 0 #define IPC_TRUE 1 typedef struct { /* Don't change this type! It is cast elsewhere */ double real; double imag; } Ipc_Complex_t; /*---------------------------------------------------------------------------*/ typedef enum { IPC_STATUS_OK, IPC_STATUS_NO_DATA, IPC_STATUS_END_OF_DECK, IPC_STATUS_EOF, IPC_STATUS_ERROR, } Ipc_Status_t; #if 0 /*---------------------------------------------------------------------------*/ typedef void* Ipc_Connection_t; /* * A connection is an `opaque' type - the user has no access to the details of * the implementation. Indeed the details are different depending on whether * underlying transport mechanism is AEGIS Mailboxes or Bsd Sockets (or * something else...) */ #endif /*---------------------------------------------------------------------------*/ typedef enum { IPC_WAIT, IPC_NO_WAIT, } Ipc_Wait_t; /*---------------------------------------------------------------------------*/ typedef enum { IPC_PROTOCOL_V1, /* >DATAB records in ATESSE v.1 format * Handles v.1 style logfile name passing protocol */ IPC_PROTOCOL_V2, /* >DATAB records in ATESSE v.2 format */ } Ipc_Protocol_t; /*---------------------------------------------------------------------------*/ typedef enum { IPC_MODE_BATCH, IPC_MODE_INTERACTIVE, } Ipc_Mode_t; /*---------------------------------------------------------------------------*/ typedef enum { IPC_ANAL_DCOP, IPC_ANAL_DCTRCURVE, IPC_ANAL_AC, IPC_ANAL_TRAN, } Ipc_Anal_t; #endif tmpk8ny_4pz/src/include/ngspice/twomesh.h0000644000175000017500000001747213546075722020674 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors: 1987 Karti Mayaram, 1991 David Gates **********/ /* Member of CIDER device simulator * Version: 1b1 */ /* * Two-Dimensional Element-based Simulation-Mesh Data Structures */ #ifndef ngspice_TWOMESH_H #define ngspice_TWOMESH_H #include "ngspice/material.h" typedef struct sTWOelem { struct sTWOelem *pElems[4]; /* array to store the element neighbors */ struct sTWOnode *pNodes[4]; /* array to store the element nodes */ struct sTWOedge *pEdges[4]; /* array to store the edges */ double dx; /* the x length */ double dy; /* the y length */ double dxOverDy; /* dX / dY */ double dyOverDx; /* dY / dX */ int domain; /* device domain owning element */ int elemType; /* material type of element */ TWOmaterial *matlInfo; /* material information */ double epsRel; /* relative epsilon */ /* Values needed to calc. mobility and its derivatives at element center */ double mun0, mup0; /* temp. and doping-dep. mobilities */ double mun, mup; /* field and carrier-dep. mobilities */ double dMunDEs, dMupDEs; /* Mob Deriv surf EFIELD Comp */ double dMunDEx, dMupDEx; /* Mob Deriv x EFIELD Comp */ double dMunDEy, dMupDEy; /* Mob Deriv y EFIELD Comp */ double dMunDWx, dMupDWx; /* Mob Deriv x WDF Comp */ double dMunDWy, dMupDWy; /* Mob Deriv y WDF Comp */ double dMunDN, dMupDN; /* Mob Deriv nConc Comp */ double dMunDP, dMupDP; /* Mob Deriv pConc Comp */ unsigned surface : 1; /* flag to indicate surface elem */ int channel; /* id of channel elem is in, 0 is none */ int direction; /* direction of flow for channels */ int evalNodes[4]; /* nodes to be evaluated in elem */ int evalEdges[4]; /* edges to be evaluated in elem */ } TWOelem; #define pTopElem pElems[0] #define pRightElem pElems[1] #define pBotElem pElems[2] #define pLeftElem pElems[3] #define pTLNode pNodes[0] #define pTRNode pNodes[1] #define pBRNode pNodes[2] #define pBLNode pNodes[3] #define pTopEdge pEdges[0] #define pRightEdge pEdges[1] #define pBotEdge pEdges[2] #define pLeftEdge pEdges[3] typedef struct sTWOedge { int edgeType; /* boundary type of edge */ double dPsi; /* deltaPsi */ double jn; /* electron current */ double jp; /* hole current */ double jd; /* displacement current */ double dJnDpsiP1; /* dJn/dPsi(+1) */ double dJnDn; /* dJnx/dN */ double dJnDnP1; /* dJn/dN(+1) */ double dJpDpsiP1; /* dJpx/dPsi(+1) */ double dJpDp; /* dJpx/dP */ double dJpDpP1; /* dJpxDp(+1) */ double dCBand; /* effective delta conduction band */ double dVBand; /* effective delta valence band */ double qf; /* fixed charge density */ /* Terms to find weighted carrier driving force and its derivatives */ double wdfn; /* N weighted driving force */ double wdfp; /* P weighted driving force */ double dWnDpsiP1; /* dWn/dPsi(+1) */ double dWnDn; /* dWn/dN */ double dWnDnP1; /* dWn/dN(+1) */ double dWpDpsiP1; /* dWp/dPsi(+1) */ double dWpDp; /* dWp/dP */ double dWpDpP1; /* dWp/dP(+1) */ /* Coefficients for weighting mobility on sides of edges */ double kNeg; /* Spline for negative side of edge */ double kPos; /* Spline for positive side of edge */ int edgeState; /* pointer to state vector */ unsigned evaluated : 1; /* flag to indicated evaluated */ } TWOedge; typedef struct sTWOnode { int nodeType; /* type of node */ int nodeI; /* node x-index */ int nodeJ; /* node y-index */ int poiEqn; /* equation number for equilib poisson */ int psiEqn; /* equation number for bias poisson */ int nEqn; /* equation number for n continuity */ int pEqn; /* equation number for p continuity */ struct sTWOelem *pElems[4]; /* array of elements */ double psi0; /* equilibrium potential */ double psi; /* electrostatic potential */ double nConc; /* electron conc. */ double pConc; /* hole conc. */ double nie; /* effective intrinsic carrier conc. */ double eg; /* energy gap */ double eaff; /* electron affinity; work phi for metal*/ double tn; /* electron lifetime */ double tp; /* hole lifetime */ double netConc; /* net doping conc. */ double totalConc; /* total doping conc. */ double na; /* acceptor conc. */ double nd; /* donor conc. */ double nPred; /* predicted electron conc. */ double pPred; /* predicted hole conc. */ double uNet; /* net recombination rate */ double dUdN; /* dU / dN */ double dUdP; /* dU / dP */ double dNdT; /* dN / dT */ double dPdT; /* dP / dT */ int nodeState; /* pointer to the state vector */ unsigned evaluated : 1; /* flag to indicated evaluated */ /* sparse matrix pointers. pointers to doubles */ /* DAG: diagonal pointers fXXiX1jX1 */ double *fPsiPsiiM1; double *fPsiPsi; double *fPsiPsiiP1; double *fPsiPsijM1; double *fPsiPsijP1; double *fPsiN; double *fPsiP; double *fNPsiiM1; double *fNPsi; double *fNPsiiP1; double *fNPsijM1; double *fNPsijP1; double *fNPsiiM1jM1; double *fNPsiiM1jP1; double *fNPsiiP1jM1; double *fNPsiiP1jP1; double *fNNiM1; double *fNN; double *fNNiP1; double *fNNjM1; double *fNNjP1; double *fNNiM1jM1; double *fNNiM1jP1; double *fNNiP1jM1; double *fNNiP1jP1; double *fNP; double *fPPsiiM1; double *fPPsi; double *fPPsiiP1; double *fPPsijM1; double *fPPsijP1; double *fPPsiiM1jM1; double *fPPsiiM1jP1; double *fPPsiiP1jM1; double *fPPsiiP1jP1; double *fPPiM1; double *fPP; double *fPPiP1; double *fPPjM1; double *fPPjP1; double *fPPiM1jM1; double *fPPiM1jP1; double *fPPiP1jM1; double *fPPiP1jP1; double *fPN; /* DAG: Pointers for Surface-Field-Dependent Terms */ /* For Oxide/Insulator on Silicon/Semiconductor: Ox OxM1 + ----- + ----- + OxP1 OXIDE | | | | | | - InM1 + ----- + ----- + InP1 --- INTERFACE In */ double *fNPsiInM1; double *fNPsiIn; double *fNPsiInP1; double *fNPsiOxM1; double *fNPsiOx; double *fNPsiOxP1; double *fPPsiInM1; double *fPPsiIn; double *fPPsiInP1; double *fPPsiOxM1; double *fPPsiOx; double *fPPsiOxP1; } TWOnode; #define pTLElem pElems[0] #define pTRElem pElems[1] #define pBRElem pElems[2] #define pBLElem pElems[3] #define nodePsi nodeState #define nodeN nodeState+1 #define nodeP nodeState+3 #define edgeDpsi edgeState #define TWOnumNodeStates 5 #define TWOnumEdgeStates 2 #endif tmpk8ny_4pz/src/include/ngspice/noisedef.h0000644000175000017500000001243513546075722020774 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Gary W. Ng **********/ #ifndef ngspice_NOISEDEF_H #define ngspice_NOISEDEF_H #include "ngspice/jobdefs.h" /* structure used to describe an noise analysis */ typedef struct { int JOBtype; JOB *JOBnextJob; /* pointer to next thing to do */ char *JOBname; /* name of this job */ CKTnode *output; /* noise output summation node */ CKTnode *outputRef; /* noise output reference node */ IFuid input; /* name of the AC source used as input reference */ double NstartFreq; double NstopFreq; double NfreqDelta; /* multiplier for decade/octave stepping, */ /* step for linear steps. */ double NsavFstp; /* frequency step at which we stopped last time */ double NsavOnoise; /* integrated output noise when we left off last time */ double NsavInoise; /* integrated input noise when we left off last time */ int NstpType; /* values described below */ int NnumSteps; int NStpsSm; /* number of steps before we output a noise summary report */ } NOISEAN; /* structure used to carry information between subparts of the noise analysis code */ typedef struct { double freq; double lstFreq; double delFreq; double outNoiz; /* integrated output noise as of the last frequency point */ double inNoise; /* integrated input noise as of the last frequency point */ double GainSqInv; double lnGainInv; double lnFreq; double lnLastFreq; double delLnFreq; int outNumber; /* keeps track of the current output variable */ int numPlots; /* keeps track of the number of active plots so we can close them in */ /* a do loop. */ unsigned int prtSummary; double *outpVector; /* pointer to our array of noise outputs */ char *squared_value; runDesc *NplotPtr; /* the plot pointer */ IFuid *namelist; /* list of plot names */ unsigned squared : 1; } Ndata; /* codes for saving and retrieving integrated noise data */ #define LNLSTDENS 0 /* array location that the log of the last noise density is stored */ #define OUTNOIZ 1 /* array location that integrated output noise is stored */ #define INNOIZ 2 /* array location that integrated input noise is stored */ #define NSTATVARS 3 /* number of "state" variables that must be stored for each noise */ /* generator. in this case it is three: LNLSTDENS, OUTNOIZ */ /* and INNOIZ */ /* available step types: */ #define DECADE 1 #define OCTAVE 2 #define LINEAR 3 /* noise analysis parameters */ #define N_OUTPUT 1 #define N_OUTREF 2 #define N_INPUT 3 #define N_START 4 #define N_STOP 5 #define N_STEPS 6 #define N_PTSPERSUM 7 #define N_DEC 8 #define N_OCT 9 #define N_LIN 10 /* noise routine operations/modes */ #define N_DENS 1 #define INT_NOIZ 2 #define N_OPEN 1 #define N_CALC 2 #define N_CLOSE 3 #define SHOTNOISE 1 #define THERMNOISE 2 #define N_GAIN 3 /* tolerances and limits to make numerical analysis more robust */ #define N_MINLOG 1E-38 /* the smallest number we can take the log of */ #define N_MINGAIN 1E-20 /* the smallest input-output gain we can tolerate */ /* (to calculate input-referred noise we divide */ /* the output noise by the gain) */ #define N_INTFTHRESH 1E-10 /* the largest slope (of a log-log noise spectral */ /* density vs. freq plot) at which the noise */ /* spectum is still considered flat. (no need for */ /* log curve fitting) */ #define N_INTUSELOG 1E-10 /* decides which expression to use for the integral of */ /* x**k. If k is -1, then we must use a 'ln' form. */ /* Otherwise, we use a 'power' form. This */ /* parameter is the region around (k=) -1 for which */ /* use the 'ln' form. */ /* misc constants */ #define NOISE_ADD_OUTVAR(ckt, data, fmt, aname, bname) \ do { \ data->namelist = TREALLOC(IFuid, data->namelist, data->numPlots + 1); \ if (!data->namelist) \ return E_NOMEM; \ char *name = tprintf(fmt, aname, bname); \ if (!name) \ return E_NOMEM; \ SPfrontEnd->IFnewUid(ckt, &(data->namelist[data->numPlots++]), \ NULL, name, UID_OTHER, NULL); \ tfree(name); \ } while(0) void NevalSrc (double *noise, double *lnNoise, CKTcircuit *ckt, int type, int node1, int node2, double param); void NevalSrc2 (double *, double *, CKTcircuit *, int, int, int, double, int, int, double, double); void NevalSrcInstanceTemp (double *noise, double *lnNoise, CKTcircuit *ckt, int type, int node1, int node2, double param, double param2); double Nintegrate (double noizDens, double lnNdens, double lnNlstDens, Ndata *data); #endif tmpk8ny_4pz/src/include/ngspice/ipcproto.h0000644000175000017500000000517413546075722021041 0ustar carstencarsten#ifndef ngspice_IPCPROTO_H #define ngspice_IPCPROTO_H /* IPC.c */ Ipc_Boolean_t kw_match (char *keyword , char *str ); Ipc_Status_t ipc_initialize_server (char *server_name , Ipc_Mode_t m , Ipc_Protocol_t p ); Ipc_Status_t ipc_terminate_server (void ); Ipc_Status_t ipc_get_line (char *str , int *len , Ipc_Wait_t wait ); Ipc_Status_t ipc_flush (void ); Ipc_Status_t ipc_send_line_binary (char *str , int len ); Ipc_Status_t ipc_send_line (char *str ); Ipc_Status_t ipc_send_data_prefix (double time ); Ipc_Status_t ipc_send_dcop_prefix (void ); Ipc_Status_t ipc_send_data_suffix (void ); Ipc_Status_t ipc_send_dcop_suffix (void ); Ipc_Status_t ipc_send_errchk (void ); Ipc_Status_t ipc_send_end (void ); int stuff_binary_v1 (double d1 , double d2 , int n , char *buf , int pos ); Ipc_Status_t ipc_send_double (char *tag , double value ); Ipc_Status_t ipc_send_complex (char *tag , Ipc_Complex_t value ); Ipc_Status_t ipc_send_int (char *tag , int value ); Ipc_Status_t ipc_send_boolean (char *tag , Ipc_Boolean_t value ); Ipc_Status_t ipc_send_string (char *tag , char *value ); Ipc_Status_t ipc_send_int_array (char *tag , int array_len , int *value ); Ipc_Status_t ipc_send_double_array (char *tag , int array_len , double *value ); Ipc_Status_t ipc_send_complex_array (char *tag , int array_len , Ipc_Complex_t *value ); Ipc_Status_t ipc_send_boolean_array (char *tag , int array_len , Ipc_Boolean_t *value ); Ipc_Status_t ipc_send_string_array (char *tag , int array_len , char **value ); Ipc_Status_t ipc_send_evtdict_prefix (void ); Ipc_Status_t ipc_send_evtdict_suffix (void ); Ipc_Status_t ipc_send_evtdata_prefix (void ); Ipc_Status_t ipc_send_evtdata_suffix (void ); Ipc_Status_t ipc_send_event(int, double, double, char *, void *, int); /* IPCtiein.c */ void ipc_handle_stop (void ); void ipc_handle_returni (void ); void ipc_handle_mintime (double time ); void ipc_handle_vtrans (char *vsrc , char *dev ); void ipc_send_stdout (void ); void ipc_send_stderr (void ); Ipc_Status_t ipc_send_std_files (void ); Ipc_Boolean_t ipc_screen_name (char *name , char *mapped_name ); int ipc_get_devices (CKTcircuit *circuit , char *device , char ***names , double **modtypes ); void ipc_free_devices (int num_items , char **names , double *modtypes ); void ipc_check_pause_stop (void ); /* IPCaegis.c */ Ipc_Status_t ipc_transport_initialize_server (char *server_name , Ipc_Mode_t m , Ipc_Protocol_t p , char *batch_filename ); Ipc_Status_t extract_msg (char *str , int *len ); Ipc_Status_t ipc_transport_get_line (char *str , int *len , Ipc_Wait_t wait ); Ipc_Status_t ipc_transport_terminate_server (void ); Ipc_Status_t ipc_transport_send_line (char *str , int len ); #endif tmpk8ny_4pz/src/include/ngspice/tskdefs.h0000644000175000017500000000512513546075722020641 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ /* */ #ifndef ngspice_TSKDEFS_H #define ngspice_TSKDEFS_H #include "ngspice/typedefs.h" #include "ngspice/jobdefs.h" struct TSKtask { JOB taskOptions; /* job structure at the front to hold options */ JOB *jobs; char *TSKname; double TSKtemp; double TSKnomTemp; int TSKmaxOrder; /* maximum integration method order */ int TSKintegrateMethod; /* the integration method to be used */ double TSKxmu; /* for trapezoidal method */ int TSKindverbosity; /* control check of inductive systems */ int TSKcurrentAnalysis; /* the analysis in progress (if any) */ /* defines for the value of TSKcurrentAnalysis */ #define DOING_DCOP 1 #define DOING_TRCV 2 #define DOING_AC 4 #define DOING_TRAN 8 int TSKbypass; int TSKdcMaxIter; /* iteration limit for dc op. (itl1) */ int TSKdcTrcvMaxIter; /* iteration limit for dc tran. curv (itl2) */ int TSKtranMaxIter; /* iteration limit for each timepoint for tran*/ /* (itl4) */ int TSKnumSrcSteps; /* number of steps for source stepping */ int TSKnumGminSteps; /* number of steps for Gmin stepping */ double TSKgminFactor; /* factor for Gmin stepping */ double TSKminBreak; double TSKabstol; double TSKpivotAbsTol; double TSKpivotRelTol; double TSKreltol; double TSKchgtol; double TSKvoltTol; #ifdef NEWTRUNC double TSKlteReltol; double TSKlteAbstol; #endif /* NEWTRUNC */ double TSKgmin; double TSKgshunt; /* shunt conductance (CKTdiagGmin) */ double TSKdelmin; double TSKtrtol; double TSKdefaultMosM; double TSKdefaultMosL; double TSKdefaultMosW; double TSKdefaultMosAD; double TSKdefaultMosAS; unsigned int TSKfixLimit:1; unsigned int TSKnoOpIter:1; /* no OP iterating, go straight to gmin step */ unsigned int TSKtryToCompact:1; /* flag for LTRA lines */ unsigned int TSKbadMos3:1; /* flag for MOS3 models */ unsigned int TSKkeepOpInfo:1; /* flag for small signal analyses */ unsigned int TSKcopyNodesets:1; /* flag for nodeset copy */ unsigned int TSKnodeDamping:1; /* flag for node damping */ double TSKabsDv; /* abs limit for iter-iter voltage change */ double TSKrelDv; /* rel limit for iter-iter voltage change */ unsigned int TSKnoopac:1; /* flag for no OP calculation before AC */ double TSKepsmin; /* minimum value for log */ }; #endif tmpk8ny_4pz/src/include/ngspice/Makefile.am0000644000175000017500000000336013546075722021060 0ustar carstencarsten## Process this file with automake to produce Makefile.in nodist_pkginclude_HEADERS = \ config.h pkginclude_HEADERS = \ tclspice.h \ acdefs.h \ bdrydefs.h \ bool.h \ carddefs.h \ ciderinp.h \ cidersupt.h \ cktdefs.h \ cluster.h \ cmconstants.h \ cm.h \ cmproto.h \ cmtypes.h \ compatmode.h \ complex.h \ const.h \ contdefs.h \ cpdefs.h \ cpextern.h \ cpstd.h \ defines.h \ devdefs.h \ dgen.h \ distodef.h \ dllitf.h \ domndefs.h \ dopdefs.h \ dstring.h \ dvec.h \ elctdefs.h \ enh.h \ enhtypes.h \ evt.h \ evtproto.h \ evttypes.h \ evtshared.h \ evtudn.h \ ftedbgra.h \ ftedebug.h \ ftedefs.h \ fteoptdefs.h \ ftedev.h \ fteext.h \ fteinp.h \ fteinput.h \ fteparse.h \ gendefs.h \ gendev.h \ graph.h \ grid.h \ hash.h \ hlpdefs.h \ iferrmsg.h \ ifsim.h \ inpdefs.h \ inpmacs.h \ inpptree.h \ ipc.h \ ipcproto.h \ ipctiein.h \ jobdefs.h \ lsort.h \ macros.h \ material.h \ matldefs.h \ memory.h \ meshdefs.h \ meshext.h \ methdefs.h \ mifcmdat.h \ mifdefs.h \ mif.h \ mifparse.h \ mifproto.h \ miftypes.h \ missing_math.h \ mobdefs.h \ modldefs.h \ multi_line.h \ ngspice.h \ noisedef.h \ numcards.h \ numconst.h \ numenum.h \ numgen.h \ numglobs.h \ onedev.h \ onemesh.h \ opdefs.h \ optdefs.h \ optndefs.h \ outpdefs.h \ plot.h \ pnode.h \ profile.h \ pssdefs.h \ pzdefs.h \ randnumb.h \ sen2defs.h \ sensdefs.h \ sensgen.h \ sharedspice.h \ sim.h \ smpdefs.h \ sperror.h \ spmatrix.h \ stringskip.h \ stringutil.h \ suffix.h \ swec.h \ tfdefs.h \ trandefs.h \ trcvdefs.h \ tskdefs.h \ twodev.h \ twomesh.h \ typedefs.h \ wordlist.h \ 1-f-code.h \ FastNorm3.h \ fftext.h \ wallace.h \ wstdio.h MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/src/include/ngspice/memory.h0000644000175000017500000000400413546075722020501 0ustar carstencarsten#ifndef ngspice_MEMORY_H #define ngspice_MEMORY_H #include #define TMALLOC(t, n) (t*) tmalloc(sizeof(t) * (size_t)(n)) #define TREALLOC(t, p, n) (t*) trealloc(p, sizeof(t) * (size_t)(n)) #ifndef HAVE_LIBGC extern void *tmalloc(size_t num); extern void *trealloc(const void *str, size_t num); extern void txfree(const void *ptr); #define tfree(x) (txfree(x), (x) = 0) #else #include #define tmalloc(m) GC_malloc(m) #define trealloc(m, n) GC_realloc((m), (n)) #define tfree(m) #define txfree(m) #endif /* HAVE_LIBGC */ #include "ngspice/stringutil.h" #define FREE(x) do { if(x) { txfree(x); (x) = NULL; } } while(0) #define ZERO(PTR, TYPE) memset(PTR, 0, sizeof(TYPE)) #ifdef CIDER #define RALLOC(ptr, type, number) \ do { \ if ((number) && (ptr = (type *)calloc((size_t)(number), sizeof(type))) == NULL) \ return E_NOMEM; \ } while(0) #define XALLOC(ptr, type, number) \ do { \ if ((number) && (ptr = (type *)calloc((size_t)(number), sizeof(type))) == NULL) { \ SPfrontEnd->IFerrorf(E_PANIC, "Out of Memory"); \ controlled_exit(1); \ } \ } while(0) #define XCALLOC(ptr, type, number) \ do { \ if ((number) && (ptr = (type *)calloc((size_t)(number), sizeof(type))) == NULL) { \ fprintf(stderr, "Out of Memory\n"); \ controlled_exit(1); \ } \ } while(0) #endif /* CIDER */ #endif tmpk8ny_4pz/src/include/ngspice/iferrmsg.h0000644000175000017500000000523313546075722021014 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1986 Thomas L. Quarles **********/ /* */ #ifndef ngspice_IFERRMSG_H #define ngspice_IFERRMSG_H /* common error message descriptions */ #define E_PAUSE -1 /* pausing on demand */ #define OK 0 #define E_PANIC 1 /* vague internal error for "can't get here" cases */ #define E_EXISTS 2 /* warning/error - attempt to create duplicate */ /* instance or model. Old one reused instead */ #define E_NODEV 3 /* attempt to modify a non-existant instance */ #define E_NOMOD 4 /* attempt to modify a non-existant model */ #define E_NOANAL 5 /* attempt to modify a non-existant analysis */ #define E_NOTERM 6 /* attempt to bind to a non-existant terminal */ #define E_BADPARM 7 /* attempt to specify a non-existant parameter */ #define E_NOMEM 8 /* insufficient memory available - VERY FATAL */ #define E_NODECON 9 /* warning/error - node already connected, old */ /* connection replaced */ #define E_UNSUPP 10 /* the specified operation is unsupported by the */ /* simulator */ #define E_PARMVAL 11 /* the parameter value specified is illegal */ #define E_NOTEMPTY 12 /* deleted still referenced item. */ #define E_NOCHANGE 13 /* simulator can't tolerate any more topology changes */ #define E_NOTFOUND 14 /* simulator can't find something it was looking for */ #define E_BAD_DOMAIN 15 /* output interface begin/end domain calls mismatched */ #define E_PRIVATE 100 /* messages above this number are private to */ /* the simulator and MUST be accompanied by */ /* a proper setting of errMsg */ /* this constant should be added to all such messages */ /* to ensure error free operation if it must be */ /* changed in the future */ extern char *errMsg; /* descriptive message about what went wrong */ /* MUST be tmalloc()'d - front end will tfree() */ /* this should be a detailed message,and is assumed */ /* tmalloc()'d so that you will feel free to add */ /* lots of descriptive information with sprintf*/ extern char *errRtn; /* name of the routine declaring error */ /* should not be tmalloc()'d, will not be free()'d */ /* This should be a simple constant in your routine */ /* and thus can be set correctly even if we run out */ /* of memory */ #endif tmpk8ny_4pz/src/include/ngspice/mobdefs.h0000644000175000017500000000270213546075722020613 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors : 1991 David Gates **********/ /* Member of CIDER device simulator * Version: 1b1 */ #ifndef ngspice_MOBDEFS_H #define ngspice_MOBDEFS_H /* Data Structures and Definitions for Device Simulation Cards */ typedef struct sMOBcard { struct sMOBcard *MOBnextCard; int MOBmaterial; int MOBcarrier; int MOBcarrType; double MOBmuMax; double MOBmuMin; double MOBntRef; double MOBntExp; double MOBvSat; double MOBvWarm; double MOBmus; double MOBecA; double MOBecB; int MOBconcModel; int MOBfieldModel; int MOBinit; unsigned MOBmaterialGiven : 1; unsigned MOBcarrierGiven : 1; unsigned MOBcarrTypeGiven : 1; unsigned MOBmuMaxGiven : 1; unsigned MOBmuMinGiven : 1; unsigned MOBntRefGiven : 1; unsigned MOBntExpGiven : 1; unsigned MOBvSatGiven : 1; unsigned MOBvWarmGiven : 1; unsigned MOBmusGiven : 1; unsigned MOBecAGiven : 1; unsigned MOBecBGiven : 1; unsigned MOBconcModelGiven : 1; unsigned MOBfieldModelGiven : 1; unsigned MOBinitGiven : 1; } MOBcard; /* MOB parameters */ enum { MOB_ELEC = 1, MOB_HOLE, MOB_MAJOR, MOB_MINOR, MOB_MUMAX, MOB_MUMIN, MOB_NTREF, MOB_NTEXP, MOB_VSAT, MOB_VWARM, MOB_MUS, MOB_EC_A, MOB_EC_B, MOB_CONC_MOD, MOB_FIELD_MOD, MOB_MATERIAL, MOB_INIT, }; #endif tmpk8ny_4pz/src/include/ngspice/carddefs.h0000644000175000017500000000124213546075722020745 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors : 1991 David Gates **********/ /* Member of CIDER device simulator * Version: 1b1 */ #ifndef ngspice_CARDDEFS_H #define ngspice_CARDDEFS_H /* Data Structures and Definitions for Device Simulation Cards */ #include "ngspice/bdrydefs.h" #include "ngspice/contdefs.h" #include "ngspice/domndefs.h" #include "ngspice/dopdefs.h" #include "ngspice/elctdefs.h" #include "ngspice/meshdefs.h" #include "ngspice/methdefs.h" #include "ngspice/matldefs.h" #include "ngspice/mobdefs.h" #include "ngspice/modldefs.h" #include "ngspice/optndefs.h" #include "ngspice/outpdefs.h" #endif tmpk8ny_4pz/src/include/ngspice/stringutil.h0000644000175000017500000000252213546075722021400 0ustar carstencarsten/************* * Header file for string.c * 1999 E. Rouat ************/ #ifndef ngspice_STRINGUTIL_H #define ngspice_STRINGUTIL_H #include "ngspice/config.h" #include "ngspice/bool.h" #include int prefix(const char *p, const char *s); char * copy(const char *str); char * copy_substring(const char *str, const char *end); int substring(const char *sub, const char *str); void appendc(char *s, char c); int scannum(char *str); int cieq(const char *p, const char *s); int ciprefix(const char *p, const char *s); void strtolower(char *str); void strtoupper(char *str); char * stripWhiteSpacesInsideParens(const char *str); char * gettok(char **s); char * gettok_instance(char **); char * gettok_char(char **s, char p, bool inc_p, bool nested); int model_name_match(const char *token, const char *model_name); extern char *tvprintf(const char *fmt, va_list args); #ifdef __GNUC__ extern char *tprintf(const char *fmt, ...) __attribute__ ((format (__printf__, 1, 2))); #else extern char *tprintf(const char *fmt, ...); #endif #ifdef CIDER /* cider integration */ int cinprefix(register char *p, register char *s, register int n); int cimatch(register char *p, register char *s); #endif bool isquote(char ch); bool is_arith_char(char c); bool str_has_arith_char(char *s); int get_comma_separated_values( char *values[], char *str ); #endif tmpk8ny_4pz/src/include/ngspice/evttypes.h0000644000175000017500000000225113546075722021056 0ustar carstencarsten#ifndef ngspice_EVTTYPES_H #define ngspice_EVTTYPES_H typedef struct Evt_Output_Info Evt_Output_Info_t; typedef struct Evt_Port_Info Evt_Port_Info_t; typedef struct Evt_Inst_Index Evt_Inst_Index_t; typedef struct Evt_Node_Info Evt_Node_Info_t; typedef struct Evt_Inst_Info Evt_Inst_Info_t; typedef struct Evt_Info Evt_Info_t; typedef struct Evt_Inst_Event Evt_Inst_Event_t; typedef struct Evt_Inst_Queue Evt_Inst_Queue_t; typedef struct Evt_Node_Queue Evt_Node_Queue_t; typedef struct Evt_Output_Event Evt_Output_Event_t; typedef struct Evt_Output_Queue Evt_Output_Queue_t; typedef struct Evt_Queue Evt_Queue_t; typedef struct Evt_Node Evt_Node_t; typedef struct Evt_Node_Data Evt_Node_Data_t; typedef struct Evt_State Evt_State_t; typedef struct Evt_State_Desc Evt_State_Desc_t; typedef struct Evt_State_Data Evt_State_Data_t; typedef struct Evt_Msg Evt_Msg_t; typedef struct Evt_Msg_Data Evt_Msg_Data_t; typedef struct Evt_Statistic Evt_Statistic_t; typedef struct Evt_Data Evt_Data_t; typedef struct Evt_Count Evt_Count_t; typedef struct Evt_Limit Evt_Limit_t; typedef struct Evt_Job Evt_Job_t; typedef struct Evt_Option Evt_Option_t; typedef struct Evt_Ckt_Data Evt_Ckt_Data_t; #endif tmpk8ny_4pz/src/include/ngspice/miftypes.h0000644000175000017500000001044213546075722021034 0ustar carstencarsten#ifndef ngspice_MIFTYPES_H #define ngspice_MIFTYPES_H /* =========================================================================== FILE MIFtypes.h MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains typedefs shared by several header files in the MIF package. INTERFACES None. REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ /* ***************************************************************************** */ typedef int Mif_Boolean_t; #define MIF_FALSE 0 #define MIF_TRUE 1 typedef int Mif_Status_t; #define MIF_OK 0 #define MIF_ERROR 1 /* typedef enum { MIF_OK, MIF_ERROR, } Mif_Status_t; */ /* ***************************************************************************** */ /* * The type of call to a code model - analog or event-driven */ typedef enum { MIF_ANALOG, /* Analog call */ MIF_EVENT_DRIVEN, /* Event-driven call */ } Mif_Call_Type_t; /* * Analysis type enumerations */ typedef enum { MIF_DC, /* A DC or DCOP analysis */ MIF_AC, /* A swept AC analysis */ MIF_TRAN, /* A transient analysis */ } Mif_Analysis_t; /* * Port type enumerations */ typedef enum { MIF_VOLTAGE, /* v - Single-ended voltage */ MIF_DIFF_VOLTAGE, /* vd - Differential voltage */ MIF_CURRENT, /* i - Single-ended current */ MIF_DIFF_CURRENT, /* id - Differential current */ MIF_VSOURCE_CURRENT, /* vnam - Voltage source current */ MIF_CONDUCTANCE, /* g - Single-ended VCIS */ MIF_DIFF_CONDUCTANCE, /* gd - Differential VCIS */ MIF_RESISTANCE, /* h - Single-ended ICVS */ MIF_DIFF_RESISTANCE, /* hd - Differential ICVS */ MIF_DIGITAL, /* d - Digital */ MIF_USER_DEFINED, /* - Any user defined type */ } Mif_Port_Type_t; /* * The direction of a connector */ typedef enum { MIF_IN, /* Input only */ MIF_OUT, /* Output only */ MIF_INOUT, /* Input and output (e.g. g or h type) */ } Mif_Dir_t; /* * The type of a parameter */ typedef enum { MIF_BOOLEAN, MIF_INTEGER, MIF_REAL, MIF_COMPLEX, MIF_STRING, } Mif_Data_Type_t; /* * The type of a token */ typedef enum { MIF_LARRAY_TOK, MIF_RARRAY_TOK, MIF_LCOMPLEX_TOK, MIF_RCOMPLEX_TOK, MIF_PERCENT_TOK, MIF_TILDE_TOK, MIF_STRING_TOK, MIF_NULL_TOK, MIF_NO_TOK, } Mif_Token_Type_t; /* * Type of controlled source */ typedef enum { MIF_VCVS, MIF_VCIS, MIF_ICVS, MIF_ICIS, MIF_minus_one, } Mif_Cntl_Src_Type_t; /* * The "reason" for a callback invocation */ typedef enum { MIF_CB_DESTROY = 1, /* MIFdestroy has been invoked, its time to clean up */ } Mif_Callback_Reason_t; /* ***************************************************************************** */ /* * Complex numbers */ typedef struct { double real; double imag; } Mif_Complex_t; /* * Values of different types used by the load, ... routines */ typedef union { Mif_Boolean_t bvalue; /* For digital node value */ int ivalue; /* For integer parameters */ double rvalue; /* For spice node values and real parameters */ Mif_Complex_t cvalue; /* For complex parameters */ char *svalue; /* For string parameters */ void *pvalue; /* For user defined nodes */ } Mif_Value_t; /* types from mifparse.h */ typedef struct Mif_Parse_Value Mif_Parse_Value_t; typedef struct Mif_Conn_Info Mif_Conn_Info_t; typedef struct Mif_Param_Info Mif_Param_Info_t; typedef struct Mif_Inst_Var_Info Mif_Inst_Var_Info_t; /* types from mifcmdat.h */ typedef struct Mif_Private Mif_Private_t; /* types from mifdefs.h */ typedef struct MIFinstance MIFinstance; typedef struct MIFmodel MIFmodel; typedef void (* Mif_Callback_t)(Mif_Private_t *, Mif_Callback_Reason_t); #endif tmpk8ny_4pz/src/include/ngspice/cmtypes.h0000644000175000017500000000242413546075722020661 0ustar carstencarsten#ifndef ngspice_CMTYPES_H #define ngspice_CMTYPES_H /* =========================================================================== FILE CMtypes.h MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Jeff Murray, Bill Kuhn MODIFICATIONS SUMMARY This file contains type definitions used by code models. INTERFACES None. REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ #include "ngspice/miftypes.h" /***** Define Typedefs ********************************************/ typedef int Boolean_t; typedef Mif_Complex_t Complex_t; typedef enum { ZERO, /* Normally referenced as 0 */ ONE, /* Normally referenced as 1 */ UNKNOWN, /* Unknown */ } Digital_State_t; typedef enum { STRONG, /* strong */ RESISTIVE, /* resistive */ HI_IMPEDANCE, /* high impedance */ UNDETERMINED, /* unknown strength */ } Digital_Strength_t; typedef struct { Digital_State_t state; Digital_Strength_t strength; } Digital_t; #endif tmpk8ny_4pz/src/include/ngspice/trcvdefs.h0000644000175000017500000000330013546075722021007 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 1999 Paolo Nenzi **********/ /* */ #ifndef ngspice_TRCVDEFS_H #define ngspice_TRCVDEFS_H #include "ngspice/jobdefs.h" #include "ngspice/tskdefs.h" #include "ngspice/gendefs.h" /* * structures used to describe D.C. transfer curve analyses to * be performed. */ #define TRCVNESTLEVEL 2 /* depth of nesting of curves - 2 for spice2 */ /* PN: The following define is for temp sweep */ /* Courtesy of: Serban M. Popescu */ #ifndef TEMP_CODE #define TEMP_CODE 1023 #endif typedef struct { int JOBtype; JOB *JOBnextJob; char *JOBname; double TRCVvStart[TRCVNESTLEVEL]; /* starting voltage/current */ double TRCVvStop[TRCVNESTLEVEL]; /* ending voltage/current */ double TRCVvStep[TRCVNESTLEVEL]; /* voltage/current step */ double TRCVvSave[TRCVNESTLEVEL]; /* voltage of this source BEFORE * analysis-to restore when done */ int TRCVgSave[TRCVNESTLEVEL]; /* dcGiven flag; as with vSave */ IFuid TRCVvName[TRCVNESTLEVEL]; /* source being varied */ GENinstance *TRCVvElt[TRCVNESTLEVEL]; /* pointer to source */ int TRCVvType[TRCVNESTLEVEL]; /* type of element being varied */ int TRCVset[TRCVNESTLEVEL]; /* flag to indicate this nest level used */ int TRCVnestLevel; /* number of levels of nesting called for */ int TRCVnestState; /* iteration state during pause */ } TRCV; enum { DCT_START1 = 1, DCT_STOP1, DCT_STEP1, DCT_NAME1, DCT_TYPE1, DCT_START2, DCT_STOP2, DCT_STEP2, DCT_NAME2, DCT_TYPE2, }; #endif tmpk8ny_4pz/src/include/ngspice/gendev.h0000644000175000017500000001124313546075722020444 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Authors: 1992 David Gates **********/ /* Member of CIDER device simulator * Version: 1b1 */ #ifndef ngspice_GENDEV_H #define ngspice_GENDEV_H #include "ngspice/numenum.h" typedef struct sStatInfo { double setupTime[NUM_STATTYPES]; double loadTime[NUM_STATTYPES]; double orderTime[NUM_STATTYPES]; double factorTime[NUM_STATTYPES]; double solveTime[NUM_STATTYPES]; double updateTime[NUM_STATTYPES]; double checkTime[NUM_STATTYPES]; double miscTime[NUM_STATTYPES]; double totalTime[NUM_STATTYPES]; double lteTime; int numIters[NUM_STATTYPES]; } StatInfo; typedef struct sStatInfo ONEstats; typedef struct sStatInfo TWOstats; typedef struct sStatInfo STATstats; /* Transient analysis information transferred via this structure. */ typedef struct sTranInfo { int method; /* integration method */ int order; /* integration order */ int maxOrder; /* maximum order to be used */ double lteCoeff; /* coefficient for calculating LTE */ double intCoeff[7]; /* array of integration coefficients */ double predCoeff[7]; /* array of predicted coefficients */ double *delta; /* array of the time deltas */ } TranInfo; typedef struct sTranInfo ONEtranInfo; typedef struct sTranInfo TWOtranInfo; /* Mesh coordinates transferred via this structure */ typedef struct sCoordInfo { struct sCoordInfo *next; /* pointer to next mesh info */ int number; /* number/position in list of coordinates */ double location; /* location of node */ } CoordInfo; typedef struct sCoordInfo ONEcoord; typedef struct sCoordInfo TWOcoord; typedef struct sCoordInfo MESHcoord; /* Generic vertex structure */ typedef struct sVertexInfo { struct sVertexInfo *next; /* pointer to next vertex */ int ix; /* the x coordinate */ int iy; /* the y coordinate */ } VertexInfo; typedef struct sVertexInfo ONEvertex; typedef struct sVertexInfo TWOvertex; /* Generic box structure that other box-shaped things are derived from */ typedef struct sBoxInfo { struct sBoxInfo *next; /* pointer to next box */ int ixLo; /* the low x coordinate */ int iyLo; /* the low y coordinate */ int ixHi; /* the high x coordinate */ int iyHi; /* the high y coordinate */ } BoxInfo; typedef struct sBoxInfo ONEbox; typedef struct sBoxInfo TWObox; /* Structure for domains */ typedef struct sDomainInfo { struct sDomainInfo *next; /* pointer to next domain */ int ixLo; /* the low x coordinate */ int iyLo; /* the low y coordinate */ int ixHi; /* the high x coordinate */ int iyHi; /* the high y coordinate */ int id; /* ID number of domain */ int material; /* ID of material used by domain */ } DomainInfo; typedef struct sDomainInfo ONEdomain; typedef struct sDomainInfo TWOdomain; typedef struct sDomainInfo DOMNdomain; /* Structure used for electrodes */ typedef struct sElectrodeInfo { struct sElectrodeInfo *next; /* pointer to next electrode */ int ixLo; /* the low x coordinate */ int iyLo; /* the low y coordinate */ int ixHi; /* the high x coordinate */ int iyHi; /* the high y coordinate */ int id; /* ID number */ double workf; /* electrode work function */ } ElectrodeInfo; typedef struct sElectrodeInfo ONEelectrode; typedef struct sElectrodeInfo TWOelectrode; typedef struct sElectrodeInfo ELCTelectrode; /* Structure used for boundaries and interfaces */ typedef struct sBoundaryInfo { struct sBoundaryInfo *next; /* pointer to next boundary */ int ixLo; /* the low x coordinate */ int iyLo; /* the low y coordinate */ int ixHi; /* the high x coordinate */ int iyHi; /* the high y coordinate */ int domain; /* ID of primary domain */ int neighbor; /* ID of neighbor domain */ double qf; /* fixed charge density */ double sn; /* elec surface recomb velocity */ double sp; /* hole surface recomb velocity */ double layer; /* surface layer width */ } BoundaryInfo; typedef struct sBoundaryInfo ONEboundary; typedef struct sBoundaryInfo TWOboundary; typedef struct sBoundaryInfo BDRYboundary; #endif tmpk8ny_4pz/src/include/ngspice/multi_line.h0000644000175000017500000000176013546075722021340 0ustar carstencarsten/* * project.h * * Diagonalization by Successive Rotations Method * (The Jacobi Method) * * Date: October 4, 1991 * * Author: Shen Lin * * Copyright (C) University of California, Berkeley * */ /************************************************************ * * Defines * ************************************************************/ #define MAX_DIM 16 #define Title "Diagonalization of a Symmetric matrix A (A = S^-1 D S)\n" #define Left_deg 7 /* should be greater than or equal to 6 */ #define Right_deg 2 /************************************************************ * * Data Structure Definitions * ************************************************************/ typedef struct linked_list_of_max_entry{ struct linked_list_of_max_entry *next; int row, col; double value; } MAXE, *MAXE_PTR; typedef struct { double *Poly[MAX_DIM]; double C_0[MAX_DIM]; } Mult_Out; typedef struct { double *Poly; double C_0; } Single_Out; tmpk8ny_4pz/src/include/ngspice/dgen.h0000644000175000017500000000105513546075722020111 0ustar carstencarsten#ifndef ngspice_DGEN_H #define ngspice_DGEN_H typedef struct st_dgen dgen; struct st_dgen { CKTcircuit *ckt; wordlist *dev_list; int flags; int dev_type_no; int dev; GENinstance *instance; GENmodel *model; }; #define DGEN_ALL 0x00e #define DGEN_TYPE 0x002 #define DGEN_MODEL 0x004 #define DGEN_INSTANCE 0x008 #define DGEN_INIT 0x010 #define DGEN_DEFDEVS 0x020 #define DGEN_ALLDEVS 0x040 #define DGEN_DEFPARAMS 0x001 #define DGEN_ALLPARAMS 0x002 extern dgen *dgen_init(CKTcircuit *ckt, wordlist *wl, int nomix, int flag, int model); #endif tmpk8ny_4pz/src/include/ngspice/randnumb.h0000644000175000017500000000106513546075722021003 0ustar carstencarsten#ifndef ngspice_RANDNUMB_H #define ngspice_RANDNUMB_H #include "ngspice/wordlist.h" extern void com_sseed(wordlist *wl); extern void setseedinfo(void); /* initialize random number generators */ extern void initw(void); extern void checkseed(void); /* seed random or set by 'set rndseed=value'*/ extern double drand(void); extern double gauss0(void); extern double gauss1(void); extern int poisson(double); extern double exprand(double); extern void TausSeed(void); extern unsigned int CombLCGTausInt(void); extern unsigned int CombLCGTausInt2(void); #endif tmpk8ny_4pz/src/include/ngspice/complex.h0000644000175000017500000004361513546075722020653 0ustar carstencarsten/* * Copyright (c) 1985 Thomas L. Quarles * Modified: 1999 Paolo Nenzi, 2000 Arno W. Peters */ #ifndef ngspice_COMPLEX_H #define ngspice_COMPLEX_H /* Complex numbers. */ struct ngcomplex { double cx_real; double cx_imag; } ; typedef struct ngcomplex ngcomplex_t; #define realpart(cval) (cval).cx_real #define imagpart(cval) (cval).cx_imag #ifdef CIDER /* From Cider numcomplex.h pn:leave it here until I decide what to do about struct mosAdmittances { ngcomplex_t yIdVdb; ngcomplex_t yIdVsb; ngcomplex_t yIdVgb; ngcomplex_t yIsVdb; ngcomplex_t yIsVsb; ngcomplex_t yIsVgb; ngcomplex_t yIgVdb; ngcomplex_t yIgVsb; ngcomplex_t yIgVgb; }; */ #endif /* * Each expects two arguments for each complex number - a real and an * imaginary part. */ typedef struct { double real; double imag; } SPcomplex; /* * COMPLEX NUMBER DATA STRUCTURE * * >>> Structure fields: * real (realNumber) * The real portion of the number. real must be the first * field in this structure. * imag (realNumber) * The imaginary portion of the number. This field must follow * immediately after real. */ #define spREAL double #if 0 /* Can this be deleted? */ /* Begin `realNumber'. */ typedef spREAL realNumber, *realVector; /* Begin `ComplexNumber'. */ typedef struct { RealNumber Real; RealNumber Imag; } ComplexNumber, *ComplexVector; #endif /* Some defines used mainly in cmath.c. */ #define cph(c) (atan2(imagpart(c), (realpart(c)))) #define cmag(c) (hypot(realpart(c), imagpart(c))) #define radtodeg(c) (cx_degrees ? ((c) * (180 / M_PI)) : (c)) #define degtorad(c) (cx_degrees ? ((c) * (M_PI / 180)) : (c)) #define rcheck(cond, name) if (!(cond)) { \ fprintf(cp_err, "Error: argument out of range for %s\n", name); \ return (NULL); } #define cdiv(r1, i1, r2, i2, r3, i3) \ { \ double r, s; \ if (fabs(r2) > fabs(i2)) { \ r = (i2) / (r2); \ s = (r2) + r * (i2); \ (r3) = ((r1) + r * (i1)) / s; \ (i3) = ((i1) - r * (r1)) / s; \ } else { \ r = (r2) / (i2); \ s = (i2) + r * (r2); \ (r3) = (r * (r1) + (i1)) / s; \ (i3) = (r * (i1) - (r1)) / s; \ } \ } /* * Division among complex numbers */ #define DC_DIVEQ(a,b,c,d) { \ double r,s,x,y;\ if(fabs(c)>fabs(d)) { \ r=(d)/(c);\ s=(c)+r*(d);\ x=((*(a))+(*(b))*r)/s;\ y=((*(b))-(*(a))*r)/s;\ } else { \ r=(c)/(d);\ s=(d)+r*(c);\ x=((*(a))*r+(*(b)))/s;\ y=((*(b))*r-(*(a)))/s;\ }\ (*(a)) = x; \ (*(b)) = y; \ } /* * This is the standard multiplication among complex numbers: * (x+jy)=(a+jb)*(c+jd) * x = ac - bd and y = ad + bc */ #define DC_MULT(a,b,c,d,x,y) { \ *(x) = (a) * (c) - (b) * (d) ;\ *(y) = (a) * (d) + (b) * (c) ;\ } /* * Difference among complex numbers a+jb and c+jd * a = a - c amd b = b - d */ #define DC_MINUSEQ(a,b,c,d) { \ *(a) -= (c) ;\ *(b) -= (d) ;\ } /* * Square root among complex numbers * We need to treat all the cases because the sqrt() function * works only on real numbers. */ #define C_SQRT(A) { \ double _mag, _a; \ if ((A).imag == 0.0) { \ if ((A).real < 0.0) { \ (A).imag = sqrt(-(A).real); \ (A).real = 0.0; \ } else { \ (A).real = sqrt((A).real); \ (A).imag = 0.0; \ } \ } else { \ _mag = hypot((A).real, (A).imag); \ _a = (_mag - (A).real) / 2.0; \ if (_a <= 0.0) { \ (A).real = sqrt(_mag); \ (A).imag /= (2.0 * (A).real); /*XXX*/ \ } else { \ _a = sqrt(_a); \ (A).real = (A).imag / (2.0 * _a); \ (A).imag = _a; \ } \ } \ } /* * This macro calculates the squared modulus of the complex number * and return it as the real part of the same number: * a+jb -> a = (a*a) + (b*b) */ #define C_MAG2(A) (((A).real = (A).real * (A).real + (A).imag * (A).imag), \ (A).imag = 0.0) /* * Two macros to obtain the colpex conjugate of a number, * The first one replace the given complex with the conjugate, * the second sets A as the conjugate of B. */ #define C_CONJ(A) ((A).imag *= -1.0) #define C_CONJEQ(A,B) { \ (A).real = (B.real); \ (A).imag = - (B.imag); \ } /* * Simple assignement */ #define C_EQ(A,B) { \ (A).real = (B.real); \ (A).imag = (B.imag); \ } /* * Normalization ??? * */ #define C_NORM(A,B) { \ if ((A).real == 0.0 && (A).imag == 0.0) { \ (B) = 0; \ } else { \ while (fabs((A).real) > 1.0 || fabs((A).imag) > 1.0) { \ (B) += 1; \ (A).real /= 2.0; \ (A).imag /= 2.0; \ } \ while (fabs((A).real) <= 0.5 && fabs((A).imag) <= 0.5) { \ (B) -= 1; \ (A).real *= 2.0; \ (A).imag *= 2.0; \ } \ } \ } /* * The magnitude of the complex number */ #define C_ABS(A) (hypot((A).real, (A).imag)) /* * Standard arithmetic between complex numbers * */ #define C_MUL(A,B) { \ double TMP1, TMP2; \ TMP1 = (A.real); \ TMP2 = (B.real); \ (A).real = TMP1 * TMP2 - (A.imag) * (B.imag); \ (A).imag = TMP1 * (B.imag) + (A.imag) * TMP2; \ } #define C_MULEQ(A,B,C) { \ (A).real = (B.real) * (C.real) - (B.imag) * (C.imag); \ (A).imag = (B.real) * (C.imag) + (B.imag) * (C.real); \ } #define C_DIV(A,B) { \ double _tmp, _mag; \ _tmp = (A.real); \ (A).real = _tmp * (B.real) + (A).imag * (B.imag); \ (A).imag = - _tmp * (B.imag) + (A.imag) * (B.real); \ _mag = (B.real) * (B.real) + (B.imag) * (B.imag); \ (A).real /= _mag; \ (A).imag /= _mag; \ } #define C_DIVEQ(A,B,C) { \ double _mag; \ (A).real = (B.real) * (C.real) + (B.imag) * (C.imag); \ (A).imag = (B.imag) * (C.real) - (B.real) * (C.imag) ; \ _mag = (C.real) * (C.real) + (C.imag) * (C.imag); \ (A).real /= _mag; \ (A).imag /= _mag; \ } #define C_ADD(A,B) { \ (A).real += (B.real); \ (A).imag += (B.imag); \ } #define C_ADDEQ(A,B,C) { \ (A).real = (B.real) + (C.real); \ (A).imag = (B.imag) + (C.imag); \ } #define C_SUB(A,B) { \ (A).real -= (B.real); \ (A).imag -= (B.imag); \ } #define C_SUBEQ(A,B,C) { \ (A).real = (B.real) - (C.real); \ (A).imag = (B.imag) - (C.imag); \ } #ifndef ngspice_SPDEFS_H /* Macro function that returns the approx absolute value of a complex number. */ #define ELEMENT_MAG(ptr) (ABS((ptr)->real) + ABS((ptr)->imag)) #define CMPLX_ASSIGN_VALUE(cnum, vreal, vimag) \ { (cnum).real = vreal; \ (cnum).imag = vimag; \ } /* Complex assignment statements. */ #define CMPLX_ASSIGN(to,from) \ { (to).real = (from).real; \ (to).imag = (from).imag; \ } #define CMPLX_CONJ_ASSIGN(to,from) \ { (to).real = (from).real; \ (to).imag = -(from).imag; \ } #define CMPLX_NEGATE_ASSIGN(to,from) \ { (to).real = -(from).real; \ (to).imag = -(from).imag; \ } #define CMPLX_CONJ_NEGATE_ASSIGN(to,from) \ { (to).real = -(from).real; \ (to).imag = (from).imag; \ } #define CMPLX_CONJ(a) (a).imag = -(a).imag #define CONJUGATE(a) (a).imag = -(a).imag #define CMPLX_NEGATE(a) \ { (a).real = -(a).real; \ (a).imag = -(a).imag; \ } #define CMPLX_NEGATE_SELF(cnum) \ { (cnum).real = -(cnum).real; \ (cnum).imag = -(cnum).imag; \ } /* Macro that returns the approx magnitude (L-1 norm) of a complex number. */ #define CMPLX_1_NORM(a) (ABS((a).real) + ABS((a).imag)) /* Macro that returns the approx magnitude (L-infinity norm) of a complex. */ #define CMPLX_INF_NORM(a) (MAX (ABS((a).real),ABS((a).imag))) /* Macro function that returns the magnitude (L-2 norm) of a complex number. */ #define CMPLX_2_NORM(a) (hypot((a).real, (a).imag)) /* Macro function that performs complex addition. */ #define CMPLX_ADD(to,from_a,from_b) \ { (to).real = (from_a).real + (from_b).real; \ (to).imag = (from_a).imag + (from_b).imag; \ } /* Macro function that performs addition of a complex and a scalar. */ #define CMPLX_ADD_SELF_SCALAR(cnum, scalar) \ { (cnum).real += scalar; \ } /* Macro function that performs complex subtraction. */ #define CMPLX_SUBT(to,from_a,from_b) \ { (to).real = (from_a).real - (from_b).real; \ (to).imag = (from_a).imag - (from_b).imag; \ } /* Macro function that is equivalent to += operator for complex numbers. */ #define CMPLX_ADD_ASSIGN(to,from) \ { (to).real += (from).real; \ (to).imag += (from).imag; \ } /* Macro function that is equivalent to -= operator for complex numbers. */ #define CMPLX_SUBT_ASSIGN(to,from) \ { (to).real -= (from).real; \ (to).imag -= (from).imag; \ } /* Macro function that multiplies a complex number by a scalar. */ #define SCLR_MULT(to,sclr,cmplx) \ { (to).real = (sclr) * (cmplx).real; \ (to).imag = (sclr) * (cmplx).imag; \ } /* Macro function that multiply-assigns a complex number by a scalar. */ #define SCLR_MULT_ASSIGN(to,sclr) \ { (to).real *= (sclr); \ (to).imag *= (sclr); \ } /* Macro function that multiplies two complex numbers. */ #define CMPLX_MULT(to,from_a,from_b) \ { (to).real = (from_a).real * (from_b).real - \ (from_a).imag * (from_b).imag; \ (to).imag = (from_a).real * (from_b).imag + \ (from_a).imag * (from_b).real; \ } /* Macro function that multiplies a complex number and a scalar. */ #define CMPLX_MULT_SCALAR(to,from, scalar) \ { (to).real = (from).real * scalar; \ (to).imag = (from).imag * scalar; \ } /* Macro function that implements *= for a complex and a scalar number. */ #define CMPLX_MULT_SELF_SCALAR(cnum, scalar) \ { (cnum).real *= scalar; \ (cnum).imag *= scalar; \ } /* Macro function that multiply-assigns a complex number by a scalar. */ #define SCLR_MULT_ASSIGN(to,sclr) \ { (to).real *= (sclr); \ (to).imag *= (sclr); \ } /* Macro function that implements to *= from for complex numbers. */ #define CMPLX_MULT_ASSIGN(to,from) \ { realNumber to_real_ = (to).real; \ (to).real = to_real_ * (from).real - \ (to).imag * (from).imag; \ (to).imag = to_real_ * (from).imag + \ (to).imag * (from).real; \ } /* Macro function that multiplies two complex numbers, the first of which is * conjugated. */ #define CMPLX_CONJ_MULT(to,from_a,from_b) \ { (to).real = (from_a).real * (from_b).real + \ (from_a).imag * (from_b).imag; \ (to).imag = (from_a).real * (from_b).imag - \ (from_a).imag * (from_b).real; \ } /* Macro function that multiplies two complex numbers and then adds them * to another. to = add + mult_a * mult_b */ #define CMPLX_MULT_ADD(to,mult_a,mult_b,add) \ { (to).real = (mult_a).real * (mult_b).real - \ (mult_a).imag * (mult_b).imag + (add).real; \ (to).imag = (mult_a).real * (mult_b).imag + \ (mult_a).imag * (mult_b).real + (add).imag; \ } /* Macro function that subtracts the product of two complex numbers from * another. to = subt - mult_a * mult_b */ #define CMPLX_MULT_SUBT(to,mult_a,mult_b,subt) \ { (to).real = (subt).real - (mult_a).real * (mult_b).real + \ (mult_a).imag * (mult_b).imag; \ (to).imag = (subt).imag - (mult_a).real * (mult_b).imag - \ (mult_a).imag * (mult_b).real; \ } /* Macro function that multiplies two complex numbers and then adds them * to another. to = add + mult_a* * mult_b where mult_a* represents mult_a * conjugate. */ #define CMPLX_CONJ_MULT_ADD(to,mult_a,mult_b,add) \ { (to).real = (mult_a).real * (mult_b).real + \ (mult_a).imag * (mult_b).imag + (add).real; \ (to).imag = (mult_a).real * (mult_b).imag - \ (mult_a).imag * (mult_b).real + (add).imag; \ } /* Macro function that multiplies two complex numbers and then adds them * to another. to += mult_a * mult_b */ #define CMPLX_MULT_ADD_ASSIGN(to,from_a,from_b) \ { (to).real += (from_a).real * (from_b).real - \ (from_a).imag * (from_b).imag; \ (to).imag += (from_a).real * (from_b).imag + \ (from_a).imag * (from_b).real; \ } /* Macro function that multiplies two complex numbers and then subtracts them * from another. */ #define CMPLX_MULT_SUBT_ASSIGN(to,from_a,from_b) \ { (to).real -= (from_a).real * (from_b).real - \ (from_a).imag * (from_b).imag; \ (to).imag -= (from_a).real * (from_b).imag + \ (from_a).imag * (from_b).real; \ } /* Macro function that multiplies two complex numbers and then adds them * to the destination. to += from_a* * from_b where from_a* represents from_a * conjugate. */ #define CMPLX_CONJ_MULT_ADD_ASSIGN(to,from_a,from_b) \ { (to).real += (from_a).real * (from_b).real + \ (from_a).imag * (from_b).imag; \ (to).imag += (from_a).real * (from_b).imag - \ (from_a).imag * (from_b).real; \ } /* Macro function that multiplies two complex numbers and then subtracts them * from the destination. to -= from_a* * from_b where from_a* represents from_a * conjugate. */ #define CMPLX_CONJ_MULT_SUBT_ASSIGN(to,from_a,from_b) \ { (to).real -= (from_a).real * (from_b).real + \ (from_a).imag * (from_b).imag; \ (to).imag -= (from_a).real * (from_b).imag - \ (from_a).imag * (from_b).real; \ } /* * Macro functions that provide complex division. */ /* Complex division: to = num / den */ #define CMPLX_DIV(to,num,den) \ { realNumber r_, s_; \ if (((den).real >= (den).imag && (den).real > -(den).imag) || \ ((den).real < (den).imag && (den).real <= -(den).imag)) \ { r_ = (den).imag / (den).real; \ s_ = (den).real + r_*(den).imag; \ (to).real = ((num).real + r_*(num).imag)/s_; \ (to).imag = ((num).imag - r_*(num).real)/s_; \ } \ else \ { r_ = (den).real / (den).imag; \ s_ = (den).imag + r_*(den).real; \ (to).real = (r_*(num).real + (num).imag)/s_; \ (to).imag = (r_*(num).imag - (num).real)/s_; \ } \ } /* Complex division and assignment: num /= den */ #define CMPLX_DIV_ASSIGN(num,den) \ { realNumber r_, s_, t_; \ if (((den).real >= (den).imag && (den).real > -(den).imag) || \ ((den).real < (den).imag && (den).real <= -(den).imag)) \ { r_ = (den).imag / (den).real; \ s_ = (den).real + r_*(den).imag; \ t_ = ((num).real + r_*(num).imag)/s_; \ (num).imag = ((num).imag - r_*(num).real)/s_; \ (num).real = t_; \ } \ else \ { r_ = (den).real / (den).imag; \ s_ = (den).imag + r_*(den).real; \ t_ = (r_*(num).real + (num).imag)/s_; \ (num).imag = (r_*(num).imag - (num).real)/s_; \ (num).real = t_; \ } \ } /* Complex reciprocation: to = 1.0 / den */ #define CMPLX_RECIPROCAL(to,den) \ { realNumber r_; \ if (((den).real >= (den).imag && (den).real > -(den).imag) || \ ((den).real < (den).imag && (den).real <= -(den).imag)) \ { r_ = (den).imag / (den).real; \ (to).imag = -r_*((to).real = 1.0/((den).real + r_*(den).imag)); \ } \ else \ { r_ = (den).real / (den).imag; \ (to).real = -r_*((to).imag = -1.0/((den).imag + r_*(den).real));\ } \ } #endif /* ngspice_SPDEF_H */ #endif tmpk8ny_4pz/src/include/ngspice/lsort.h0000644000175000017500000000557213546075722020347 0ustar carstencarsten/* * 'Generic' linked-list sorting 'package' * * Use: * #define TYPE the linked-list type (usually a struct) * #define NEXT 'next' field name in the linked-list structure * #define SORT sorting routine (see below) * * Optional: * #define DECL_SORT 'static' or undefined * #define DECL_SORT1 'static' or undefined * #define SORT1 sorting routine (see below) * #define FIELD select a subfield of the structure for the * compare function (default is to pass * a pointer to the structure) * #include "lsort.h" * * This defines up to two routines: * SORT1(TYPE *list, int (*compare)(TYPE *x, TYPE *y)) * sort the linked list 'list' according to the compare function * 'compare' * * SORT(TYPE *list, int (*compare)(TYPE *x, TYPE *y), int length) * sort the linked list 'list' according to the compare function * 'compare'. length is the length of the linked list. * * Both routines gracefully handle length == 0 (in which case, list == 0 * is also allowed). * * By default, both routines are declared 'static'. This can be changed * using '#define DECL_SORT' or '#define DECL_SORT1'. * * If field is used, then a pointer to the particular field is passed * to the comparison function (rather than a TYPE *). */ /* This file was originally part of Cider 1b1 and has been moved to * the ngspice misc directory since macros will probably be converted * into real functions. * (Paolo Nenzi 2001) */ #ifndef DECL_SORT1 #define DECL_SORT1 static #endif #ifndef DECL_SORT #define DECL_SORT static #endif DECL_SORT TYPE *SORT(TYPE *list_in, int (*compare)(TYPE*, TYPE*), long cnt ); #ifdef SORT1 DECL_SORT1 TYPE *SORT1(TYPE *list_in, int (*compare)(TYPE*, TYPE*) ) { register long cnt; register TYPE *p; /* Find the length of the list */ for(p = list_in, cnt = 0; p != 0; p = p->NEXT, cnt++) ; return SORT(list_in, compare, cnt); } #endif DECL_SORT TYPE *SORT(TYPE *list_in, int (*compare)(TYPE*, TYPE*), long cnt ) { register TYPE *p, **plast, *list1, *list2; register long i; if (cnt > 1) { /* break the list in half */ for(p = list_in, i = cnt/2-1; i > 0; p = p->NEXT, i--) ; list1 = list_in; list2 = p->NEXT; p->NEXT = 0; /* Recursively sort the sub-lists (unless only 1 element) */ if ((i = cnt/2) > 1) { list1 = SORT(list1, compare, i); } if ((i = cnt - i) > 1) { list2 = SORT(list2, compare, i); } /* Merge the two sorted sub-lists */ plast = &list_in; for(;;) { #ifdef FIELD if ((*compare)(&list1->FIELD, &list2->FIELD) <= 0) { #else if ((*compare)(list1, list2) <= 0) { #endif *plast = list1; plast = &(list1->NEXT); if ((list1 = list1->NEXT) == 0) { *plast = list2; break; } } else { *plast = list2; plast = &(list2->NEXT); if ((list2 = list2->NEXT) == 0) { *plast = list1; break; } } } } return list_in; } tmpk8ny_4pz/src/include/ngspice/wstdio.h0000644000175000017500000000650313546075722020510 0ustar carstencarsten/* I/O Redirection for Spice 3F4 under Win32s * Autor: Wolfgang Muees * Stand: 21.05.95 */ #ifndef ngspice_WSTDIO_H #define ngspice_WSTDIO_H #include /* original definitions */ #undef getc /* old macros removed */ #undef putc #undef ungetc #undef getchar #undef putchar #undef feof #undef ferror /* ----------------------------------------------------------------- */ int win_x_fclose(FILE *stream); int win_x_fflush(FILE *stream); int win_x_fgetc(FILE *stream); int win_x_fgetpos(FILE *stream, fpos_t *pos); char *win_x_fgets(char *s, int n, FILE *stream); int win_x_fprintf(FILE *stream, const char *format, ...); int win_x_fputc(int c, FILE *stream); int win_x_fputs(const char *s, FILE *stream); size_t win_x_fread(void *ptr, size_t size, size_t n, FILE *stream); FILE *win_x_freopen(const char *path, const char *mode, FILE *stream); int win_x_fscanf(FILE *stream, const char *format, ...); int win_x_fseek(FILE *stream, long offset, int whence); int win_x_fsetpos(FILE *stream, const fpos_t*pos); long win_x_ftell(FILE *stream); size_t win_x_fwrite(const void *ptr, size_t size, size_t n, FILE *stream); char *win_x_gets(char *s); void win_x_perror(const char *s); int win_x_printf(const char *format, ...); int win_x_puts(const char *s); int win_x_scanf(const char *format, ...); int win_x_ungetc(int c, FILE *stream); int win_x_vfprintf(FILE *stream, const char *format, void *arglist); /* int win_x_vfscanf(FILE *stream, const char *format, void *arglist); */ int win_x_vprintf(const char *format, void *arglist); /* int win_x_vscanf(const char *format, void *arglist); */ int win_x_getc(FILE *fp); int win_x_getchar(void); int win_x_putchar(const int c); int win_x_putc(const int c, FILE *fp); int win_x_feof(FILE *fp); int win_x_ferror(FILE *fp); int win_x_fputchar(int c); /* --------------------------------------------------------------- */ #define fclose win_x_fclose #define fflush win_x_fflush #define fgetc win_x_fgetc #define fgetpos win_x_fgetpos #define fgets win_x_fgets #define fprintf win_x_fprintf #define fputc win_x_fputc #define fputs win_x_fputs #define fread win_x_fread /* #define freopen win_x_freopen hvogt 10.05.2000 */ #define fscanf win_x_fscanf #define fseek win_x_fseek #define fsetpos win_x_fsetpos #define ftell win_x_ftell #define fwrite win_x_fwrite #define gets win_x_gets #define perror win_x_perror #define printf win_x_printf #define puts win_x_puts #define scanf win_x_scanf #define ungetc win_x_ungetc #define vfprintf win_x_vfprintf /* #define vfscanf win_x_vfscanf */ #define vprintf win_x_vprintf /* #define vscanf win_x_vscanf */ #define read win_x_read #define getc win_x_getc #define getchar win_x_getchar #define putchar win_x_putchar #define putc win_x_putc #define feof win_x_feof #define ferror win_x_ferror #define fputchar win_x_fputchar /* --------------------------------------------------------------------------- */ #endif tmpk8ny_4pz/src/include/ngspice/optdefs.h0000644000175000017500000000740013546075722020640 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #ifndef ngspice_OPTDEFS_H #define ngspice_OPTDEFS_H /* 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; enum { OPT_GMIN = 1, OPT_RELTOL, OPT_ABSTOL, OPT_VNTOL, OPT_TRTOL, OPT_CHGTOL, OPT_PIVTOL, OPT_PIVREL, OPT_TNOM, OPT_ITL1, OPT_ITL2, OPT_ITL3, OPT_ITL4, OPT_ITL5, OPT_DEFL, OPT_DEFW, OPT_DEFAD, OPT_DEFAS, OPT_BYPASS, OPT_MAXORD, OPT_ITERS, OPT_TRANIT, OPT_TRANPTS, OPT_TRANACCPT, OPT_TRANRJCT, OPT_TOTANALTIME, OPT_TRANTIME, OPT_LOADTIME, OPT_DECOMP, OPT_SOLVE, OPT_TRANDECOMP, OPT_TRANSOLVE, OPT_TEMP, OPT_OLDLIMIT, OPT_TRANCURITER, OPT_SRCSTEPS, OPT_GMINSTEPS, OPT_MINBREAK, OPT_NOOPITER, OPT_EQNS, OPT_REORDTIME, OPT_METHOD, OPT_TRYTOCOMPACT, OPT_BADMOS3, OPT_KEEPOPINFO, OPT_TRANLOAD, OPT_TRANTRUNC, OPT_ACTIME, OPT_ACLOAD, OPT_ACDECOMP, OPT_ACSOLVE, OPT_ORIGNZ, OPT_FILLNZ, OPT_TOTALNZ, }; enum { OPT_SYNCTIME = 58, OPT_TRANSYNC, OPT_ACSYNC, OPT_GSHUNT, OPT_DEFM, OPT_GMINFACT, OPT_COPYNODESETS, OPT_NODEDAMPING, OPT_ABSDV, OPT_RELDV, OPT_NOOPAC, OPT_XMU, OPT_INDVERBOSITY, OPT_EPSMIN, }; #ifdef XSPICE /* gtri - begin - wbk - add new options */ enum { OPT_ENH_NOOPALTER = 100, OPT_ENH_RAMPTIME, OPT_EVT_MAX_EVT_PASSES, OPT_EVT_MAX_OP_ALTER, OPT_ENH_CONV_LIMIT, OPT_ENH_CONV_ABS_STEP, OPT_ENH_CONV_STEP, OPT_MIF_AUTO_PARTIAL, OPT_ENH_RSHUNT, }; /* gtri - end - wbk - add new options */ #endif #define OPT_TOTALDEV 200 /* Total devices in the netlist */ #endif tmpk8ny_4pz/src/include/ngspice/enh.h0000644000175000017500000000514613546075722017753 0ustar carstencarsten#ifndef ngspice_ENH_H #define ngspice_ENH_H /* =========================================================================== FILE ENH.h MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains typedefs used by the event-driven algorithm. INTERFACES None. REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ #include "ngspice/miftypes.h" #include "ngspice/enhtypes.h" #include "ngspice/fteinp.h" /* The following data is used in implementing various enhancements made to the simulator. The main struct is dynamically allocated in ckt so that incremental additions can be made more easily without the need to recompile multiple modules. Allocation and initialization is done in CKTinit.c which should be the only module needed to recompile after additions are made here. */ struct Enh_Bkpt { double current; /* The current dynamic breakpoint time */ double last; /* The last used dynamic breakpoint time */ }; struct Enh_Ramp { double ramptime; /* supply ramping time specified on .options */ }; struct Enh_Conv_Debug { Mif_Boolean_t last_NIiter_call; /* True if this is the last call to NIiter() */ Mif_Boolean_t report_conv_probs; /* True if conv test functions should send debug info */ }; struct Enh_Conv_Limit { Mif_Boolean_t enabled; /* True if convergence limiting enabled on code models */ double abs_step; /* Minimum limiting step size */ double step; /* Fractional step amount */ }; struct Enh_Rshunt { Mif_Boolean_t enabled; /* True if rshunt option used */ double gshunt; /* 1.0 / rshunt */ int num_nodes; /* Number of nodes in matrix */ double **diag; /* Pointers to matrix diagonals */ }; struct Enh_Ckt_Data { Enh_Bkpt_t breakpoint; /* Data used by dynamic breakpoints */ Enh_Ramp_t ramp; /* New options added to simulator */ Enh_Conv_Debug_t conv_debug; /* Convergence debug info dumping data */ Enh_Conv_Limit_t conv_limit; /* Convergence limiting info */ Enh_Rshunt_t rshunt_data; /* Shunt conductance from nodes to ground */ }; void ENHreport_conv_prob(Enh_Conv_Source_t type, char *name, char *msg); struct card *ENHtranslate_poly(struct card *deck); #endif tmpk8ny_4pz/src/include/ngspice/plot.h0000644000175000017500000000205113546075722020147 0ustar carstencarsten#ifndef ngspice_PLOT_H #define ngspice_PLOT_H #include "ngspice/wordlist.h" #include "ngspice/bool.h" #include "ngspice/dvec.h" #include "ngspice/hash.h" struct ccom; /* The information for a particular set of vectors that come from one * plot. */ struct plot { char *pl_title; /* The title card. */ char *pl_date; /* Date. */ char *pl_name; /* The plot name. */ char *pl_typename; /* Tran1, op2, etc. */ struct dvec *pl_dvecs; /* The data vectors in this plot. */ struct dvec *pl_scale; /* The "scale" for the rest of the vectors. */ struct plot *pl_next; /* List of plots. */ NGHASHPTR pl_lookup_table; /* for quick lookup of vectors */ wordlist *pl_commands; /* Commands to execute for this plot. */ struct variable *pl_env; /* The 'environment' for this plot. */ struct ccom *pl_ccom; /* The ccom struct for this plot. */ bool pl_written; /* Some or all of the vecs have been saved. */ bool pl_lookup_valid; /* vector lookup table valid */ int pl_ndims; /* Number of dimensions */ } ; #endif tmpk8ny_4pz/src/include/ngspice/mifparse.h0000644000175000017500000001101513546075722020777 0ustar carstencarsten#ifndef ngspice_MIFPARSE_H #define ngspice_MIFPARSE_H /* =========================================================================== FILE MIFparse.h MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the information structure definitions used by the code model parser to check for valid connections and parameters. Structures of these types are created by the code model preprocessor (cmpp) from the user created ifspec.ifs file. INTERFACES None. REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ #include "ngspice/miftypes.h" /* * Values of different types used by the parser. Note that this is a structure * instead of a union because we need to do initializations in the ifspec.c files for * the models and unions cannot be initialized in any useful way in C * */ struct Mif_Parse_Value { Mif_Boolean_t bvalue; /* For boolean values */ int ivalue; /* For integer values */ double rvalue; /* For real values */ Mif_Complex_t cvalue; /* For complex values */ char *svalue; /* For string values */ }; /* * Information about a connection used by the parser to error check input */ struct Mif_Conn_Info { char *name; /* Name of this connection */ char *description; /* Description of this connection */ Mif_Dir_t direction; /* Is this connection an input, output, or both? */ Mif_Port_Type_t default_port_type; /* The default port type */ char *default_type; /* The default type in string form */ int num_allowed_types; /* The size of the allowed type arrays */ Mif_Port_Type_t *allowed_type; /* The allowed types */ char **allowed_type_str; /* The allowed types in string form */ Mif_Boolean_t is_array; /* True if connection is an array */ Mif_Boolean_t has_lower_bound; /* True if there is an array size lower bound */ int lower_bound; /* Array size lower bound */ Mif_Boolean_t has_upper_bound; /* True if there is an array size upper bound */ int upper_bound; /* Array size upper bound */ Mif_Boolean_t null_allowed; /* True if null is allowed for this connection */ }; /* * Information about a parameter used by the parser to error check input */ struct Mif_Param_Info { char *name; /* Name of this parameter */ char *description; /* Description of this parameter */ Mif_Data_Type_t type; /* Is this a real, boolean, string, ... */ Mif_Boolean_t has_default; /* True if there is a default value */ Mif_Parse_Value_t default_value; /* The default value */ Mif_Boolean_t has_lower_limit; /* True if there is a lower limit */ Mif_Parse_Value_t lower_limit; /* The lower limit for this parameter */ Mif_Boolean_t has_upper_limit; /* True if there is a upper limit */ Mif_Parse_Value_t upper_limit; /* The upper limit for this parameter */ Mif_Boolean_t is_array; /* True if parameter is an array */ Mif_Boolean_t has_conn_ref; /* True if parameter is associated with a connector */ int conn_ref; /* The subscript of the associated connector */ Mif_Boolean_t has_lower_bound; /* True if there is an array size lower bound */ int lower_bound; /* Array size lower bound */ Mif_Boolean_t has_upper_bound; /* True if there is an array size upper bound */ int upper_bound; /* Array size upper bound */ Mif_Boolean_t null_allowed; /* True if null is allowed for this parameter */ }; /* * Information about an instance parameter used by the parser to error check input */ struct Mif_Inst_Var_Info { char *name; /* Name of this instance var */ char *description; /* Description of this instance var */ Mif_Data_Type_t type; /* Is this a real, boolean, string, ... */ Mif_Boolean_t is_array; /* True if instance var is an array */ }; #endif tmpk8ny_4pz/src/include/ngspice/tfdefs.h0000644000175000017500000000144613546075722020453 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #ifndef ngspice_TFDEFS_H #define ngspice_TFDEFS_H #include "ngspice/typedefs.h" #include "ngspice/jobdefs.h" #include "ngspice/tskdefs.h" #include "ngspice/cktdefs.h" /* TFdefs.h - defs for transfer function analyses */ struct TFan { int JOBtype; JOB *JOBnextJob; IFuid JOBname; CKTnode *TFoutPos; CKTnode *TFoutNeg; IFuid TFoutSrc; IFuid TFinSrc; char *TFoutName; /* a printable name for an output v(x,y) */ unsigned int TFoutIsV :1; unsigned int TFoutIsI :1; unsigned int TFinIsV :1; unsigned int TFinIsI :1; }; enum { TF_OUTPOS = 1, TF_OUTNEG, TF_OUTSRC, TF_INSRC, TF_OUTNAME, }; #endif tmpk8ny_4pz/src/include/ngspice/sharedspice.h0000644000175000017500000003503113546075722021467 0ustar carstencarsten/* header file for shared ngspice */ /* Copyright 2013 Holger Vogt */ /* Modified BSD license */ /* Interface between a calling program (caller) and ngspice.dll (ngspice.so) ** ngSpice_Init(SendChar*, SendStat*, ControlledExit*, SendData*, SendInitData*, BGThreadRunning*, void*) After caller has loaded ngspice.dll, the simulator has to be initialized by calling ngSpice_Init(). Address pointers of several callback functions defined in the caller are sent to ngspice.dll. Callback funtion typedefs SendChar typedef of callback function for reading printf, fprintf, fputs SendStat typedef of callback function for reading status string and precent value ControlledExit typedef of callback function for tranferring a signal upon ngspice controlled_exit to caller. May be used by caller to detach ngspice.dll. SendData typedef of callback function for sending an array of structs containing data values of all vectors in the current plot (simulation output) SendInitData typedef of callback function for sending an array of structs containing info on all vectors in the current plot (immediately before simulation starts) BGThreadRunning typedef of callback function for sending a boolean signal (true if thread is running) The void pointer may contain the object address of the calling function ('self' or 'this' pointer), so that the answer may be directed to a calling object. Callback functions are defined in the global section. ** ngSpice_Command(char*) Send a valid command (see the control or interactive commands) from caller to ngspice.dll. Will be executed immediately (as if in interactive mode). Some commands are rejected (e.g. 'plot', because there is no graphics interface). Command 'quit' will remove internal data, and then send a notice to caller via ngexit(). ** ngGet_Vec_Info(char*) receives the name of a vector (may be in the form 'vectorname' or .vectorname) and returns a pointer to a vector_info struct. The caller may then directly assess the vector data (but probably should not modify them). ***************** If XSPICE is enabled ************************************* ** ngGet_Evt_NodeInfo(char*) receives the name of a event node vector (may be in the form 'vectorname' or .vectorname) and returns a pointer to a evt_node_info struct. The caller may then directly assess the vector data. ** char** ngSpice_AllEvtNodes(void); returns to the caller a pointer to an array of all event node names. **************************************************************************** ** ngSpice_Circ(char**) sends an array of null-terminated char* to ngspice.dll. Each char* contains a single line of a circuit (each line like in an input file **.sp). The last entry to char** has to be NULL. Upon receiving the arry, ngspice.dll will immediately parse the input and set up the circuit structure (as if received the circuit from a file by the 'source' command. ** char* ngSpice_CurPlot(); returns to the caller a pointer to the name of the current plot ** char** ngSpice_AllPlots() returns to the caller a pointer to an array of all plots (by their typename) ** char** ngSpice_AllVecs(char*); returns to the caller a pointer to an array of vector names in the plot named by the string in the argument. ** Additional basics: No memory mallocing and freeing across the interface: Memory allocated in ngspice.dll has to be freed in ngspice.dll. Memory allocated in the calling program has to be freed only there. ngspice.dll should never call exit() directly, but handle either the 'quit' request to the caller or an request for exiting upon error, done by callback function ngexit(). */ #ifndef NGSPICE_DLL_H #define NGSPICE_DLL_H #ifdef __cplusplus extern "C" { #endif #if defined(__MINGW32__) || defined(_MSC_VER) || defined(__CYGWIN__) #ifdef SHARED_MODULE #define IMPEXP __declspec(dllexport) #else #define IMPEXP __declspec(dllimport) #endif #else /* use with gcc flag -fvisibility=hidden */ #if __GNUC__ >= 4 #define IMPEXP __attribute__ ((visibility ("default"))) #define IMPEXPLOCAL __attribute__ ((visibility ("hidden"))) #else #define IMPEXP #define IMPEXP_LOCAL #endif #endif /* required only if header is used by the caller, is already defined in ngspice.dll */ #ifndef ngspice_NGSPICE_H /* Complex numbers. */ struct ngcomplex { double cx_real; double cx_imag; } ; typedef struct ngcomplex ngcomplex_t; #endif /* vector info obtained from any vector in ngspice.dll. Allows direct access to the ngspice internal vector structure, as defined in include/ngspice/devc.h . */ typedef struct vector_info { char *v_name; /* Same as so_vname. */ int v_type; /* Same as so_vtype. */ short v_flags; /* Flags (a combination of VF_*). */ double *v_realdata; /* Real data. */ ngcomplex_t *v_compdata; /* Complex data. */ int v_length; /* Length of the vector. */ } vector_info, *pvector_info; typedef struct vecvalues { char* name; /* name of a specific vector */ double creal; /* actual data value */ double cimag; /* actual data value */ bool is_scale; /* if 'name' is the scale vector */ bool is_complex; /* if the data are complex numbers */ } vecvalues, *pvecvalues; typedef struct vecvaluesall { int veccount; /* number of vectors in plot */ int vecindex; /* index of actual set of vectors. i.e. the number of accepted data points */ pvecvalues *vecsa; /* values of actual set of vectors, indexed from 0 to veccount - 1 */ } vecvaluesall, *pvecvaluesall; /* info for a specific vector */ typedef struct vecinfo { int number; /* number of vector, as postion in the linked list of vectors, starts with 0 */ char *vecname; /* name of the actual vector */ bool is_real; /* TRUE if the actual vector has real data */ void *pdvec; /* a void pointer to struct dvec *d, the actual vector */ void *pdvecscale; /* a void pointer to struct dvec *ds, the scale vector */ } vecinfo, *pvecinfo; /* info for the current plot */ typedef struct vecinfoall { /* the plot */ char *name; char *title; char *date; char *type; int veccount; /* the data as an array of vecinfo with length equal to the number of vectors in the plot */ pvecinfo *vecs; } vecinfoall, *pvecinfoall; /* to be used by ngGet_Evt_NodeInfo, returns all data of a specific node after simulation */ #ifdef XSPICE /* a single data point */ typedef struct evt_data { int dcop; /* t.b.d. */ double step; /* simulation time */ char *node_value; /* one of 0s, 1s, Us, 0r, 1r, Ur, 0z, 1z, Uz, 0u, 1u, Uu */ } evt_data, *pevt_data; /* a list of all data points of the node selected by the char* argument to ngGet_Evt_NodeInfo */ typedef struct evt_shared_data { pevt_data *evt_dect; /* array of data */ int num_steps; /* length of the array */ } evt_shared_data, *pevt_shared_data; #endif /* callback functions addresses received from caller with ngSpice_Init() function */ /* sending output from stdout, stderr to caller */ typedef int (SendChar)(char*, int, void*); /* char* string to be sent to caller output int identification number of calling ngspice shared lib void* return pointer received from caller, e.g. pointer to object having sent the request */ /* sending simulation status to caller */ typedef int (SendStat)(char*, int, void*); /* char* simulation status and value (in percent) to be sent to caller int identification number of calling ngspice shared lib void* return pointer received from caller */ /* asking for controlled exit */ typedef int (ControlledExit)(int, bool, bool, int, void*); /* int exit status bool if true: immediate unloading dll, if false: just set flag, unload is done when function has returned bool if true: exit upon 'quit', if false: exit due to ngspice.dll error int identification number of calling ngspice shared lib void* return pointer received from caller */ /* send back actual vector data */ typedef int (SendData)(pvecvaluesall, int, int, void*); /* vecvaluesall* pointer to array of structs containing actual values from all vectors int number of structs (one per vector) int identification number of calling ngspice shared lib void* return pointer received from caller */ /* send back initailization vector data */ typedef int (SendInitData)(pvecinfoall, int, void*); /* vecinfoall* pointer to array of structs containing data from all vectors right after initialization int identification number of calling ngspice shared lib void* return pointer received from caller */ /* indicate if background thread is running */ typedef int (BGThreadRunning)(bool, int, void*); /* bool true if background thread is running int identification number of calling ngspice shared lib void* return pointer received from caller */ /* callback functions addresses received from caller with ngSpice_Init_Sync() function */ /* ask for VSRC EXTERNAL value */ typedef int (GetVSRCData)(double*, double, char*, int, void*); /* double* return voltage value double actual time char* node name int identification number of calling ngspice shared lib void* return pointer received from caller */ /* ask for ISRC EXTERNAL value */ typedef int (GetISRCData)(double*, double, char*, int, void*); /* double* return current value double actual time char* node name int identification number of calling ngspice shared lib void* return pointer received from caller */ /* ask for new delta time depending on synchronization requirements */ typedef int (GetSyncData)(double, double*, double, int, int, int, void*); /* double actual time (ckt->CKTtime) double* delta time (ckt->CKTdelta) double old delta time (olddelta) int redostep (as set by ngspice) int identification number of calling ngspice shared lib int location of call for synchronization in dctran.c void* return pointer received from caller */ #ifdef XSPICE /* callback functions addresses received from caller with ngSpice_Init_Evt() function */ /* Upon time step finished, called per node */ typedef int (SendEvtData)(int, double, double, char *, void *, int, int, int, void*); /* int node index double step, actual simulation time double dvalue, a real value for specified structure component for plotting purposes char *svalue, a string value for specified structure component for printing void *pvalue, a binary data structure int plen, size of the *pvalue structure int mode, the mode (op, dc, tran) we are in int ident, identification number of calling ngspice shared lib void* return pointer received from caller */ /* Upon initialization, called once per event node To build up a dictionary of nodes */ typedef int (SendInitEvtData)(int, int, char*, char*, int, void*); /* int node index int maximum node index, number of nodes char* node name char* udn-name, node type int identification number of calling ngspice shared lib void* return pointer received from caller */ #endif /* ngspice initialization, printfcn: pointer to callback function for reading printf, fprintf statfcn: pointer to callback function for the status string and percent value ControlledExit: pointer to callback function for setting a 'quit' signal in caller SendData: pointer to callback function for returning data values of all current output vectors SendInitData: pointer to callback function for returning information of all output vectors just initialized BGThreadRunning: pointer to callback function indicating if workrt thread is running userData: pointer to user-defined data, will not be modified, but handed over back to caller during Callback, e.g. address of calling object */ IMPEXP int ngSpice_Init(SendChar* printfcn, SendStat* statfcn, ControlledExit* ngexit, SendData* sdata, SendInitData* sinitdata, BGThreadRunning* bgtrun, void* userData); /* initialization of synchronizing functions vsrcdat: pointer to callback function for retrieving a voltage source value from caller isrcdat: pointer to callback function for retrieving a current source value from caller syncdat: pointer to callback function for synchronization ident: pointer to integer unique to this shared library (defaults to 0) userData: pointer to user-defined data, will not be modified, but handed over back to caller during Callback, e.g. address of calling object. If NULL is sent here, userdata info from ngSpice_Init() will be kept, otherwise userdata will be overridden by new value from here. */ IMPEXP int ngSpice_Init_Sync(GetVSRCData *vsrcdat, GetISRCData *isrcdat, GetSyncData *syncdat, int *ident, void *userData); /* Caller may send ngspice commands to ngspice.dll. Commands are executed immediately */ IMPEXP int ngSpice_Command(char* command); /* get info about a vector */ IMPEXP pvector_info ngGet_Vec_Info(char* vecname); #ifdef XSPICE /* get info about the event node vector */ IMPEXP pevt_shared_data ngGet_Evt_NodeInfo(char* nodename); /* get a list of all event nodes */ IMPEXP char** ngSpice_AllEvtNodes(void); /* initialization of XSPICE callback functions sevtdata: data for a specific event node at time 'step' sinitevtdata: single line entry of event node dictionary (list) userData: pointer to user-defined data, will not be modified, but handed over back to caller during Callback, e.g. address of calling object */ IMPEXP int ngSpice_Init_Evt(SendEvtData* sevtdata, SendInitEvtData* sinitevtdata, void* userData); #endif /* send a circuit to ngspice.dll The circuit description is a dynamic array of char*. Each char* corresponds to a single circuit line. The last entry of the array has to be a NULL */ IMPEXP int ngSpice_Circ(char** circarray); /* return to the caller a pointer to the name of the current plot */ IMPEXP char* ngSpice_CurPlot(void); /* return to the caller a pointer to an array of all plots created so far by ngspice.dll */ IMPEXP char** ngSpice_AllPlots(void); /* return to the caller a pointer to an array of vector names in the plot named by plotname */ IMPEXP char** ngSpice_AllVecs(char* plotname); /* returns TRUE if ngspice is running in a second (background) thread */ IMPEXP bool ngSpice_running(void); /* set a breakpoint in ngspice */ IMPEXP bool ngSpice_SetBkpt(double time); #ifdef __cplusplus } #endif #endif tmpk8ny_4pz/src/include/ngspice/ciderinp.h0000644000175000017500000000254613546075722020777 0ustar carstencarsten/* * ciderinp.h * * CIDER input library header */ #ifndef ngspice_CIDERINP_H #define ngspice_CIDERINP_H /* externals for bdryset.c */ extern int BDRYcheck(BDRYcard *, DOMNdomain *); extern int BDRYsetup(BDRYcard *, MESHcoord *, MESHcoord *, DOMNdomain *); /* externals for contset.c */ extern int CONTcheck(CONTcard *); extern int CONTsetup(CONTcard *, ELCTelectrode *); /* externals for domnset.c */ extern int DOMNcheck(DOMNcard *, MaterialInfo *); extern int DOMNsetup(DOMNcard *,DOMNdomain **, MESHcoord *, MESHcoord *, MaterialInfo *); /* externals for dopset.c */ extern int DOPcheck(DOPcard *, MESHcoord *, MESHcoord *); extern int DOPsetup(DOPcard *, DOPprofile **, DOPtable **, MESHcoord *, MESHcoord *); /* externals for elctset.c */ extern int ELCTcheck(ELCTcard *); extern int ELCTsetup(ELCTcard *, ELCTelectrode **, MESHcoord *, MESHcoord *); /* externals for matlset.c */ extern int MATLcheck(MATLcard *); extern int MATLsetup(MATLcard *, MaterialInfo **); /* externals for mobset.c */ extern int MOBcheck(MOBcard *, MaterialInfo *); extern int MOBsetup(MOBcard *, MaterialInfo *); /* externals for modlset.c */ extern int MODLcheck(MODLcard *); extern int MODLsetup(MODLcard *); /* externals for outpset.c */ extern int OUTPcheck(OUTPcard *); extern int OUTPsetup(OUTPcard *); #endif tmpk8ny_4pz/src/include/ngspice/hash.h0000644000175000017500000004175413546075722020131 0ustar carstencarsten/* ----------------------------------------------------------------- FILE: nghash.h DESCRIPTION:Insert file for threaded hash routines. This code was donated from TimberWolf. CONTENTS: DATE: Jul 17, 1988 - original coding REVISIONS: Aug 21, 2009 - adapted for ngspice ----------------------------------------------------------------- */ #ifndef ngspice_HASH_H #define ngspice_HASH_H #include "ngspice/bool.h" #include #define _NGMALLOC(size_xz) tmalloc((size_xz)) #define NGMALLOC(n, els) TMALLOC(els, n) #define NGREALLOC(ar,n,els) TREALLOC(els, ar, n) #define NGFREE(els) txfree(els) /* ********************** TYPE DEFINITIONS ************************* */ typedef void (*ngdelete)(void *) ; typedef struct ngtable_rec { void *key ; void *data ; struct ngtable_rec *next ; /* collision list */ struct ngtable_rec *thread_next ; /* thread thru entire table */ struct ngtable_rec *thread_prev ; /* thread thru entire table */ } NGTABLEBOX, *NGTABLEPTR ; struct nghashbox; typedef unsigned int nghash_func_t(struct nghashbox *, void *) ; typedef int nghash_compare_func_t(const void *, const void *) ; struct nghashbox { NGTABLEPTR *hash_table ; NGTABLEPTR thread ; /* thread of hash table */ NGTABLEPTR last_entry ; /* last entry into hash table */ NGTABLEPTR enumeratePtr ; /* used to enumerate hash table */ NGTABLEPTR searchPtr ; /* used for find again mechanism */ nghash_compare_func_t *compare_func ; /* the comparison function */ nghash_func_t *hash_func ; /* the hash function */ double growth_factor ; /* how much to grow table by */ int size ; /* the size of the table */ int max_density ; /* maximum number of entries before growth */ int num_entries ; /* current number of entries in table */ int need_resize ; /* amount before we need a resize */ long access ; /* used for statistics */ long collision ; /* collision times */ unsigned int power_of_two : 8 ; /* build table as a power of two */ unsigned int call_from_free : 8 ;/* true if in a free calling sequence */ unsigned int unique : 16 ; /* true if only one unique item in col. list */ }; typedef struct nghashbox NGHASHBOX, *NGHASHPTR; /* ----------------------------------------------------------------- * This enumerated type is used to control the base hash function types * as well as hash table attributes such as uniqueness and power of 2. * The negative definitions for the function are used so we catch a * segfault immediately if the hash table is used incorrectly. Notice * that the default function string is zero. Because there definitions * can be cast into functions, they are defined as longs so it will work * on all architecture types include 64bits. * ----------------------------------------------------------------- */ typedef enum { NGHASH_UNIQUE = 1 << 0, NGHASH_POWER_OF_TWO = 1 << 1, NGHASH_UNIQUE_TWO = NGHASH_UNIQUE | NGHASH_POWER_OF_TWO } NGHASHFLAGS_T ; enum nghash_default_func_t { NGHASH_FUNC_NUM = -2, NGHASH_FUNC_PTR = -1, NGHASH_FUNC_STR = 0 }; typedef struct nghash_iter_rec { struct ngtable_rec *position ; } NGHASHITER, *NGHASHITERPTR ; /* ----------------------------------------------------------------- * macro definition for enumeration. Strange looking but compiler * will optimize. x_yz->position = 0 and x_yz will be returned. #define NGHASH_FIRST(x_yz) ( ((x_yz)->position = NULL) ? (x_yz) : (x_yz) ) No longer use this trick and now explicitly write out both lines because some compilers complain about unintentional assignment. Unfortunately, we want to intentionally assign it. The compiler is warning unnecessarily. ----------------------------------------------------------------- */ #define NGHASH_FIRST(x_yz) ( (x_yz)->position = NULL ) ; #define NGHASH_ITER_EQUAL(x_yz,y_yz) ( (x_yz)->position == (y_yz)->position ) #define NGHASH_DEF_HASH(x) ((nghash_func_t *) (intptr_t) (x)) #define NGHASH_DEF_CMP(x) ((nghash_compare_func_t *) (intptr_t) (x)) /* defines for unique flag */ /* misc definitions */ #define NGHASH_DEF_GROW_FACTOR 2.0 #define NGHASH_DEF_MAX_DENSITY 4 #define NGHASH_MIN_SIZE 4 #define nghash_tablesize( htable_xz ) ( (htable_xz)->size ) /* ----------------------------------------------------------------- * Here are three hash functions in order of increasingly better * behaviour. Remember hsum must be unsigned int. The best one * is taken from tcl. ----------------------------------------------------------------- */ #define NGHASH_STR_TO_HASH( str, hsum, size ) \ do { \ char *name ; \ int shift ; \ for( name=str,shift=1,hsum=0 ;*name; name++){ \ hsum = hsum + ((*name)<> 24); \ hsum = hsum^g; \ } \ } \ hsum = hsum & (size-1); \ } while(0); #undef NGHASH_STR_TO_HASH #define NGHASH_STR_TO_HASH( str, hsum, size ) \ do { \ int c ; \ char *string ; \ hsum = 0 ; \ string = (char *) str ; \ for (;;) { \ c = *string ; \ string++ ; \ if( c == 0) { \ break ; \ } \ hsum += (hsum<<3) + (unsigned int) c; \ } \ hsum %= (unsigned int) (size) ; \ } while(0); #define NGHASH_NUM_TO_HASH( num, hsum, size ) \ do { \ int c, len ; \ unsigned long temp; \ char cptr[80] ; \ sprintf( cptr, "%lx", (UNSIGNED_LONG) num) ; \ len = strlen(cptr) ; \ temp = (unsigned long) cptr[0] ; \ for( c = 1 ; c < len ; c++ ){ \ temp += (temp<<3) + (unsigned long) cptr[c] ; \ } \ temp %= (size) ; \ hsum = temp ; \ } while(0); #undef NGHASH_NUM_TO_HASH /* ----------------------------------------------------------------- * Replace the old num to hash with a new algorithm which is simple * and is 5 times faster. Variance was even less on generated data. * To use this hash table power of 2 table size must be enforced. ----------------------------------------------------------------- */ #define NGHASH_NUM_TO_HASH( ptr, hsum, size ) \ do { \ unsigned int temp ; \ intptr_t value = (intptr_t) ptr ; \ temp = (unsigned int) value ; \ hsum = temp & (unsigned int) (size - 1) ; \ } while(0); #define NGHASH_PTR_TO_HASH( ptr, hsum, size ) \ do { \ unsigned long temp; \ temp = (unsigned long) (ptr); \ temp %= (size) ; \ hsum = temp ; \ } while(0); #undef NGHASH_PTR_TO_HASH /* ----------------------------------------------------------------- * We use strlen instead of looking at the return value of sprintf * because it is not standard. Actually no machine have 80 byte pointers * but just being cautious. ----------------------------------------------------------------- */ #define NGHASH_PTR_TO_HASH( ptr, hsum, size ) \ do { \ int c, len ; \ unsigned long temp; \ char cptr[80] ; \ sprintf( cptr, "%lx", (UNSIGNED_LONG) ptr) ; \ len = strlen(cptr) ; \ temp = (UNSIGNED_LONG) cptr[0] ; \ for( c = 1 ; c < len ; c++ ){ \ temp += (temp<<3) + (UNSIGNED_LONG) cptr[c] ; \ } \ temp %= (size) ; \ hsum = temp ; \ } while(0); #undef NGHASH_PTR_TO_HASH /* ----------------------------------------------------------------- * Replace the old ptr to hash with a new algorithm which is simple * and is 5 times faster. Variance was even less on generated data. * To use this hash table power of 2 table size must be enforced. ----------------------------------------------------------------- */ #define NGHASH_PTR_TO_HASH( ptr, hsum, size ) \ do { \ unsigned int temp ; \ intptr_t value = (intptr_t) ptr ; \ temp = (unsigned int) (value >> 4) ; \ hsum = temp & (unsigned int) (size - 1) ; \ } while(0); #define NGHASH_PTR_COMPARE_FUNC( p1 , p2 ) ( (p1) != (p2) ) #define nghash_unique( htable_xz, flag_xz ) ((htable_xz)->unique = flag_xz) extern NGHASHPTR nghash_init( int numentries ) ; /* Function: Returns a hash table with the given number of entries. More that one hash table can coexist at the same time. The default key type is string. The default comparison function is strcmp. */ extern NGHASHPTR nghash_init_integer( int numentries ) ; /* Function: Returns a hash table with the given number of entries. More that one hash table can coexist at the same time. The default key type is an integer. The default comparison function is integer comparison. */ extern NGHASHPTR nghash_init_pointer( int numentries ) ; /* Function: Returns a hash table with the given number of entries. More that one hash table can coexist at the same time. The default key type is a pointer. The default comparison function is pointer comparison. */ extern NGHASHPTR nghash_init_with_parms( nghash_compare_func_t *comp_func, nghash_func_t *hash_func, int numentries, int max_density, double growth, NGHASHFLAGS_T flags ) ; /* Function: Returns a hash table with the given number of entries. More that one hash table can coexist at the same time. Tables may be given their own hash and compare functions. If your keys are pointers, numbers or strings, it is recommended that you use the functions: * HASH_DEF_HASH_PTR and HASH_DEF_CMP_PTR for pointers, * HASH_DEF_HASH_NUM and HASH_DEF_CMP_NUM for numbers, and * HASH_DEF_HASH_STR and HASH_DEF_CMP_STR for strings. The hash package will recognize these and run faster as a result. You may use your own hash and compare functions provided they look like * INT hash(void * key) and * UNSIGNED_INT compare(void * key1, void * key2). The hash function's return value should be in the interval [0, UINT_MAX]. The compare should return zero if the two keys are equal and a non-zero value otherwise. Whenever number of entries in hash table >= size of table * max_density, the table is grown at a the specified by growth. Unique if TRUE only allows one entry which matches comparison function. Otherwise, multiple items which are not unique relative to the comparison function can exist in collision list. */ extern int nghash_max_density(NGHASHPTR hashtable,int max_density) ; /* Function: Changes the max_density limit in the hash table if max_density > 1. This function returns the current value of max_density. */ extern int nghash_table_get( NGHASHPTR hashtable ) ; /* Function: Returns the current size of hash table set by nghash_table_create */ extern int nghash_table_size( int num ) ; /* Function: Returns the closest prime number to given size. */ extern int nghash_table_size2( int num ) ; /* Function: Returns the table size to the closest power of 2. */ extern void *_nghash_find(NGHASHPTR hashtable, void * user_key,BOOL *status) ; extern void *nghash_find(NGHASHPTR hashtable, void * user_key) ; extern void *nghash_find_again(NGHASHPTR hashtable, void * user_key) ; extern void *_nghash_find_again(NGHASHPTR hashtable, void * user_key,BOOL *status) ; extern void *nghash_delete(NGHASHPTR hashtable, void * user_key) ; extern void *nghash_insert(NGHASHPTR hashtable, void * user_key, void * data) ; /* The four functions above replace the old nghash_search function. The same functionality but now four functions. Function: Hash table search routine. Given a hashtable and a key, perform the following operations: HASH_ENTER:if key is in table it, returns a pointer to the item. if key is not in table, add it to the table. returns NULL. HASH_FIND:if key is in table, it returns data pointer. if key is not in the table, it returns NULL. HASH_FIND_AGAIN:if additional keys are in table, returns data pointer. if no more keys are in the table, it returns NULL. HASH_DELETE:if key is in table, it returns -1 if key is not in table, it return NULL. Memory is not freed in the delete case, but marked dirty. Data is a pointer to the information to be store with the given key. A new operation is available for using pointers are arguments. Just pass the pointer in as a key. Make sure to call the nghash_init_pointer function first. */ /* ----------------------------------------------------------------- * Convenience functions. ----------------------------------------------------------------- */ typedef void * (*nghash)(void *) ; extern void nghash_free(NGHASHPTR htabl,void (*del_data)(void *),void (*del_key)(void *) ); /* Function: Frees the memory associated with a hash table. The user make supply a function which deletes the memory associated with the data field. In addition, the user may free the memory stored at the key. This function must have the data pointer supplied by the hash add routines as an argument,ie. nghash_table_delete( my_hash_table, my_free_func, my_key_free ) ; my_free_func( data ) void * data ; { } my_key_free( key ) void * key ; { } Note: for the default hash types: STR, PTR, and NUM, the free key operation is ignored. */ extern void nghash_free_string_func(char *str) ; /* Function: Just a wrapper for YFREE(string) */ extern void nghash_free_string_hashtable(NGHASHPTR htable) ; /* Function: Frees the memory associated with a hash table. This version is a convenience function as it is equivalent to the function: nghash_free( htable, (ngdelete) nghash_free_string_func, NULL ) ; */ extern void nghash_empty(NGHASHPTR htabl,void (*del_data)(void *),void (*del_key)(void *) ) ; /* Function: Similar to nghash_free except table structure is not delete. However, all entries have been deleted. */ extern NGHASHPTR nghash_merge( NGHASHPTR master_htable, NGHASHPTR merge_htable ) ; /* Function: Merge items in merge_htable into master_htable. Create master_htable if master_htable is NULL. Returns the merged hash table. */ extern int nghash_get_size( NGHASHPTR hashtable ) ; /* Function: Since this is a threaded hash table we can find the size of all the valid entries in the table in O(n) where n is the number of valid entries. Returns the number of valid entries. One may enumerate the hash table by writing the following loop. TABLEPTR ptr ; for( ptr = mytable->thread; ptr ; ptr= ptr->threadNext ){ ... } */ extern void *nghash_enumeratek(NGHASHPTR hashtable,void **key_ret,BOOL flag) ; /* Function: Since this is a threaded hash table, we can enumerate the elements of the hash table in O(n) time where n is the number of valid entries. Returns the data and key associated with each entry. The flag is similar to the rbtree enumerate function. This eliminates the need for writing the following: TABLEPTR ptr ; for( ptr = mytable->thread; ptr ; ptr= ptr->threadNext ){ ... } Instead write: for( data = nghash_enumerate(hashtable,&key,TRUE) ; data ; data = nghash_enumerate(hashtable,&key,TRUE) ){ ... } The order returned is guaranteed to be the same as the order entered. */ extern void *nghash_enumeratekRE(NGHASHPTR hashtable,void **key_ret,NGHASHITERPTR iter_p) ; /* Function: Same as nghash_enumeratekRE but this is a reentrant version. Use as void * key_ret ; for( i_p= nghash_enumeratekRE(htable_p,&key_ret,YHASH_FIRST(&iter) ) ; i_p ; i_p= nghash_enumeratekRE(htable_p,&key_ret,&iter) ) ){ data_p = (data_cast) key_ret ; } */ extern void *nghash_enumerate(NGHASHPTR hashtable,BOOL flag) ; /* Function: Like above but we don't return the key. */ extern void *nghash_enumerateRE(NGHASHPTR hashtable,NGHASHITERPTR iter_p) ; /* Function: Like nghash_enumerate but this is a reentrant version. for( i_p= nghash_enumerateRE(htable_p,YHASH_FIRST(&iter) ) ; i_p ; i_p= nghash_enumerateRE(htable_p,&iter) ) ){ data_p = (data_cast) key_ret ; } */ extern BOOL nghash_deleteItem( NGHASHPTR hashtable, void *key, void *data ) ; /* Function: Delete a specific item in the hash table. Returns true if the item was found and deleted. */ /* * This function has been removed because we now support reentrant versions. extern VOID nghash_enumeratePush( P1(YHASHPTR hashtable)); Function: Push the current enumeration pointer onto a stack. This is useful for recursive enumeration. */ /* * This function has been removed because we now support reentrant versions. extern VOID nghash_enumeratePop( P1(YHASHPTR hashtable)); Function: Pops the current enumeration pointer from the stack. This is useful for recursive enumeration. */ extern void nghash_dump( NGHASHPTR hashtable,void (*print_func)(void *) ) ; /* Function: Prints the contents of the hash table. */ extern void nghash_reset_stat( NGHASHPTR hashtable ) ; extern void nghash_resize( NGHASHPTR hashtable, int num ) ; extern void nghash_distribution( NGHASHPTR hashtable ) ; /* Function: Returns information about hash table distribution to message system. */ #endif tmpk8ny_4pz/src/include/ngspice/smpdefs.h0000644000175000017500000000321713546075722020637 0ustar carstencarsten#ifndef ngspice_SMPDEFS_H #define ngspice_SMPDEFS_H typedef struct MatrixFrame SMPmatrix; typedef struct MatrixElement SMPelement; /********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #include #include #include "ngspice/complex.h" int SMPaddElt( SMPmatrix *, int , int , double ); double * SMPmakeElt( SMPmatrix * , int , int ); void SMPcClear( SMPmatrix *); void SMPclear( SMPmatrix *); int SMPcLUfac( SMPmatrix *, double ); int SMPluFac( SMPmatrix *, double , double ); int SMPcReorder( SMPmatrix * , double , double , int *); int SMPreorder( SMPmatrix * , double , double , double ); void SMPcaSolve(SMPmatrix *Matrix, double RHS[], double iRHS[], double Spare[], double iSpare[]); void SMPcSolve( SMPmatrix *, double [], double [], double [], double []); void SMPsolve( SMPmatrix *, double [], double []); int SMPmatSize( SMPmatrix *); int SMPnewMatrix( SMPmatrix **, int ); void SMPdestroy( SMPmatrix *); int SMPpreOrder( SMPmatrix *); void SMPprint( SMPmatrix * , char *); void SMPprintRHS( SMPmatrix * , char *, double*, double*); void SMPgetError( SMPmatrix *, int *, int *); int SMPcProdDiag( SMPmatrix *, SPcomplex *, int *); int SMPcDProd(SMPmatrix *Matrix, SPcomplex *pMantissa, int *pExponent); SMPelement * SMPfindElt( SMPmatrix *, int , int , int ); int SMPcZeroCol(SMPmatrix *Matrix, int Col); int SMPcAddCol(SMPmatrix *Matrix, int Accum_Col, int Addend_Col); int SMPzeroRow(SMPmatrix *Matrix, int Row); void SMPconstMult(SMPmatrix *, double); void SMPmultiply(SMPmatrix *, double *, double *, double *, double *); #endif tmpk8ny_4pz/src/include/ngspice/grid.h0000644000175000017500000000063513546075722020124 0ustar carstencarsten#ifndef ngspice_GRID_H #define ngspice_GRID_H #include "typedefs.h" /* Grid types. Note: SMITHGRID is only a smith grid, SMITH transforms the data */ typedef enum { GRID_NONE, GRID_LIN, GRID_LOGLOG, GRID_XLOG, GRID_YLOG, GRID_POLAR, GRID_SMITH, GRID_SMITHGRID } GRIDTYPE; void gr_fixgrid(GRAPH *graph, double xdelta, double ydelta, int xtype, int ytype); void gr_redrawgrid(GRAPH *graph); #endif tmpk8ny_4pz/src/include/ngspice/optndefs.h0000644000175000017500000000253413546075722021021 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors: 1991 David Gates **********/ /* Member of CIDER device simulator * Version: 1b1 */ #ifndef ngspice_OPTNDEFS_H #define ngspice_OPTNDEFS_H /* Data Structures and Definitions for Device Simulation Cards */ typedef struct sOPTNcard { struct sOPTNcard *OPTNnextCard; char *OPTNicFile; int OPTNunique; int OPTNdeviceType; double OPTNdefa; double OPTNdefw; double OPTNdefl; double OPTNbaseArea; double OPTNbaseLength; double OPTNbaseDepth; double OPTNtnom; unsigned int OPTNicFileGiven : 1; unsigned int OPTNuniqueGiven : 1; unsigned int OPTNdeviceTypeGiven : 1; unsigned int OPTNdefaGiven : 1; unsigned int OPTNdefwGiven : 1; unsigned int OPTNdeflGiven : 1; unsigned int OPTNbaseAreaGiven : 1; unsigned int OPTNbaseLengthGiven : 1; unsigned int OPTNbaseDepthGiven : 1; unsigned int OPTNtnomGiven : 1; } OPTNcard; /* OPTN parameters */ enum { OPTN_RESISTOR = 1, OPTN_CAPACITOR, OPTN_DIODE, OPTN_BIPOLAR, OPTN_SOIBJT, OPTN_MOSCAP, OPTN_MOSFET, OPTN_SOIMOS, OPTN_JFET, OPTN_MESFET, OPTN_DEFA, OPTN_DEFW, OPTN_DEFL, OPTN_BASE_AREA, OPTN_BASE_LENGTH, OPTN_BASE_DEPTH, OPTN_TNOM, OPTN_IC_FILE, OPTN_UNIQUE, }; #endif tmpk8ny_4pz/src/include/ngspice/numconst.h0000644000175000017500000001602113546075722021041 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors: 1987 Karti Mayaram, 1991 David Gates **********/ /* * Constants used by the numerical simulation routines */ /* Member of CIDER device simulator * Version: 1b1 */ #ifndef ngspice_NUMCONST_H #define ngspice_NUMCONST_H /* Basic Physical Constants */ #ifdef CHARGE #undef CHARGE #endif #define CHARGE 1.602191770e-19 /* C */ #define BOLTZMANN_CONSTANT 1.38062259e-23 /* J/oK */ #define VELOCITY_OF_LIGHT 2.997924562e8 /* CM/S */ #define ELECTRON_MASS 9.10955854e-31 /* kG */ #define ZERO_DEGREES_CELSIUS 273.15 /* oK */ #define EPS0 8.854e-14 /* F/CM */ /* Physical Constants of Silicon, GaAs, SiO2, Si3N4 */ #define EPS_REL_SI 11.7 /* ~EPS0 */ #define EPS_SI EPS0 * EPS_REL_SI /* F/CM */ #define EPS_REL_GA 10.9 /* ~EPS0 */ #define EPS_GA EPS0 * EPS_REL_GA /* F/CM */ #define EPS_REL_OX 3.9 /* ~EPS0 */ #define EPS_OX EPS0 * EPS_REL_OX /* F/CM */ #define EPS_REL_NI 7.5 /* ~EPS0 */ #define EPS_NI EPS0 * EPS_REL_NI /* F/CM */ /* Work Function, Affinity, Band & Bandgap Parameters */ #define AFFIN_SI 4.05 /* eV */ #define AFFIN_GA 4.07 /* eV */ #define AFFIN_OX 0.95 /* eV */ #define AFFIN_NI 3.10 /* eV */ #define PHI_METAL 4.10 /* eV */ #define PHI_ALUM 4.10 /* eV */ #define PHI_GOLD 4.75 /* eV */ #define EGAP300_SI 1.1245 /* eV */ #define EGAP300_GA 1.43 /* eV */ #define EGAP300_OX 9.00 /* eV */ #define EGAP300_NI 4.70 /* eV */ #define DGAPDT_SI 4.73e-4 /* eV/oK */ #define DGAPDT_GA 5.405e-4 /* eV/oK */ #define TREF_EG_SI 636.0 /* oK */ #define TREF_EG_GA 204.0 /* oK */ #define NCV_NOM 2.509e19 /* CM^-3 */ #define M_N_SI 1.447 /* ~ELECTRON_MASS */ #define M_P_SI 1.08 /* ~ELECTRON_MASS */ #define M_N_GA 7.05e-2 /* ~ELECTRON_MASS */ #define M_P_GA 0.427 /* ~ELECTRON_MASS */ /* Physical Model Parameters for Silicon and GaAs*/ /* N = electrons, P = holes */ /* Effective Richardson Constants (ref. PISCES) */ #define A_RICH_N_SI 110.0 /* A/CM^2/oK^2 */ #define A_RICH_P_SI 30.0 /* A/CM^2/oK^2 */ #define A_RICH_N_GA 6.2857 /* A/CM^2/oK^2 */ #define A_RICH_P_GA 105.0 /* A/CM^2/oK^2 */ /* Auger Recombination (ref. PISCES, SOLL90) */ #define C_AUG_N_SI 1.8e-31 /* CM^6/S */ #define C_AUG_P_SI 8.3e-32 /* CM^6/S */ #define C_AUG_N_GA 2.8e-31 /* CM^6/S */ #define C_AUG_P_GA 9.9e-32 /* CM^6/S */ /* SRH Recombination (ref. SOLL90) */ #define TAU0_N_SI 3.0e-5 /* S */ #define NSRH_N_SI 1.0e17 /* CM^-3 */ #define S_N_SI 1.0e4 /* CM/S */ #define TAU0_P_SI 1.0e-5 /* S */ #define NSRH_P_SI 1.0e17 /* CM^-3 */ #define S_P_SI 1.0e4 /* CM/S */ #define TAU0_N_GA 1.0e-7 /* S */ #define NSRH_N_GA 5.0e16 /* CM^-3 */ #define S_N_GA 1.0e4 /* CM/S */ #define TAU0_P_GA 1.0e-7 /* S */ #define NSRH_P_GA 5.0e16 /* CM^-3 */ #define S_P_GA 1.0e4 /* CM/S */ /* Bandgap Narrowing (ref. SOLL90) */ #define DGAPDN_N 1.2e-2 /* V */ #define NBGN_N 1.0e18 /* CM^-3 */ #define DGAPDN_P 9.7e-3 /* V */ #define NBGN_P 1.0e17 /* CM^-3 */ /* Mobility Models : */ /* Scharfetter-Gummel (SG) mobility (ref. SCHA69) */ #define SG_MUMAX_N 1400.0 #define SG_MUMIN_N 75.0 #define SG_NTREF_N 3.0e16 #define SG_NTEXP_N 0.5 #define SG_VSAT_N 1.036e7 #define SG_VWARM_N 4.9e6 #define SG_FIT_N 8.8 #define SG_MUMAX_P 480.0 #define SG_MUMIN_P 53.0 #define SG_NTREF_P 4.0e16 #define SG_NTEXP_P 0.5 #define SG_VSAT_P 1.2e7 #define SG_VWARM_P 2.928e6 #define SG_FIT_P 1.6 /* Caughey-Thomas (CT) mobility (ref. CAUG67) */ #define CT_MUMAX_N 1360.0 #define CT_MUMIN_N 92.0 #define CT_NTREF_N 1.3e17 #define CT_NTEXP_N 0.91 #define CT_VSAT_N 1.1e7 #define CT_MUMAX_P 520.0 #define CT_MUMIN_P 65.0 #define CT_NTREF_P 2.4e17 #define CT_NTEXP_P 0.61 #define CT_VSAT_P 9.5e6 /* Arora (AR) mobility (ref. AROR82) */ #define AR_MUMAX_N 1340.0 #define AR_MUMIN_N 88.0 #define AR_NTREF_N 1.26e17 #define AR_NTEXP_N 0.88 #define AR_VSAT_N 1.38e7 #define AR_MUMAX_P 461.3 #define AR_MUMIN_P 54.3 #define AR_NTREF_P 2.35e17 #define AR_NTEXP_P 0.88 #define AR_VSAT_P 9.0e6 /* Minority Carrier mobility (ref. SOLL90) */ /* * These parameters are flawed in that they don't match the majority * carrier mobility when the concentration drops to zero. * Carrier heating effects must be handled by a different model. */ #define UF_MUMAX_N 1412.0 #define UF_MUMIN_N 232.0 #define UF_NTREF_N 8.0e16 #define UF_NTEXP_N 0.9 #define UF_MUMAX_P 500.0 #define UF_MUMIN_P 130.0 #define UF_NTREF_P 8.0e17 #define UF_NTEXP_P 1.25 /* Temperature-Dependence of Arora mobility */ /* Applicable to all above models, but not necessarily accurate. */ #define TD_TREFVS_N 175.0 #define TD_TREFVS_P 312.0 #define TD_EXPMUMAX_N -2.33 #define TD_EXPMUMAX_P -2.23 #define TD_EXPMUMIN_N -0.57 #define TD_EXPMUMIN_P -0.57 #define TD_EXPNTREF_N 2.4 #define TD_EXPNTREF_P 2.4 #define TD_EXPNTEXP_N -0.146 #define TD_EXPNTEXP_P -0.146 /* * Inversion-layers are handled differently. They don't fit into the nice * pattern established above for bulk mobility. */ /* Surface mobility (ref. GATE90) */ #define MUS_N 991.0 /* CM^2/VS */ #define THETAA_N 2.67e-6 /* CM/V */ #define THETAB_N 4.18e-14 /* CM^2/V^2 */ #define SALPHA_N 1.0 / 2.0 /* --- */ #define SBETA_N 1.0 / 2.0 /* --- */ #define MUS_P 240.0 /* CM^2/VS */ #define THETAA_P 3.07e-6 /* CM/V */ #define THETAB_P 0.0 /* CM^2/V^2 */ #define SALPHA_P 2.0 / 3.0 /* --- */ #define SBETA_P 1.0 / 3.0 /* --- */ /* Gallium-Arsenide (GA) mobility (ref. PISCES) */ #define GA_MUMAX_N 5000.0 #define GA_MUMIN_N 50.0 #define GA_NTREF_N 1.0e17 #define GA_NTEXP_N 1.0 #define GA_VSAT_N 7.7e6 #define GA_VWARM_N 2.31e7 #define GA_MUMAX_P 400.0 #define GA_MUMIN_P 40.0 #define GA_NTREF_P 1.0e17 #define GA_NTEXP_P 1.0 #define GA_VSAT_P 7.7e6 #define GA_VWARM_P 2.31e7 /* END OF MOBILITY MODELS */ /* Freeze Out / Incomplete Ionization Parameters */ #define E_ARS_SI 0.049 /* eV (Arsenic) */ #define E_DON_SI 0.044 /* eV (Phosphorus) */ #define E_ACC_SI 0.045 /* eV (Boron) */ #define G_DON_SI 2.0 /* --- */ #define G_ACC_SI 4.0 /* --- */ #define E_DON_GA 0.005 /* eV */ #define E_ACC_GA 0.005 /* eV */ #define G_DON_GA 2.0 /* --- */ #define G_ACC_GA 2.0 /* --- */ /* Impact Ionization / Avalanche Generation Parameters */ /* These are for Silicon. Need better GaAs parameters. */ #define AII_N 7.03e5 #define BII_N 1.231e6 #define AII_P 1.582e6 #define BII_P 2.036e6 /* Default Surface-State / Fixed-Charge Density */ #define NSS 0.0 /* CM^-2 */ /* Default abstol for Poisson and Current-Continuity Equations */ #define DABSTOL1D 1.0e-12 /* --- */ #define DABSTOL2D 1.0e-8 /* --- */ #endif tmpk8ny_4pz/src/include/ngspice/cpdefs.h0000644000175000017500000000457513546075722020452 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * General stuff for the C-shell parser. */ /* Standard definitions */ #ifndef ngspice_CPDEFS_H #define ngspice_CPDEFS_H #include "ngspice/cpstd.h" /* Information about spice commands. */ struct comm { /* The name of the command. */ char *co_comname; /* The function that handles the command. */ void (*co_func) (wordlist *wl); /* These can't be used from nutmeg. */ bool co_spiceonly; /* Is this a "major" command? */ bool co_major; /* Bitmasks for command completion. */ long co_cctypes[4]; /* print help message on this environment mask */ unsigned int co_env; /* minimum number of arguments required */ int co_minargs; /* maximum number of arguments allowed */ int co_maxargs; /* The fn that prompts the user. */ void (*co_argfn) (wordlist *wl, struct comm *command); /* When these are printed, printf(string, av[0]) .. */ char *co_help; }; #define LOTS 1000 #define NLOTS 10000 /* The history list. Things get put here after the first (basic) parse. * The word list will change later, so be sure to copy it. */ struct histent { int hi_event; wordlist *hi_wlist; struct histent *hi_next; struct histent *hi_prev; }; /* The values returned by cp_usrset(). */ enum { US_OK = 1, /* Either not relevant or nothing special. */ US_READONLY, /* Complain and don't set this var. */ US_DONTRECORD, /* OK, but don't keep track of this one. */ US_SIMVAR, /* OK, recorded in options struct */ US_NOSIMVAR, /* Not OK, simulation param but circuit not loaded */ }; /* Aliases. These will be expanded if the word is the first in an input * line. The substitution string may contain arg selectors. */ struct alias { char *al_name; /* The word to be substituted for. */ wordlist *al_text; /* What to substitute for it. */ struct alias *al_next; struct alias *al_prev; } ; /* The current record of what characters are special. */ #define CPC_BRR 004 /* Break word to right of character. */ #define CPC_BRL 010 /* Break word to left of character. */ #define CT_ALIASES 1 #define CT_LABEL 15 /* Get all the extern definitions... */ #include "ngspice/cpextern.h" #endif tmpk8ny_4pz/src/include/ngspice/contdefs.h0000644000175000017500000000130613546075722021000 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors : 1991 David Gates **********/ /* Member of CIDER device simulator * Version: 1b1 */ #ifndef ngspice_CONTDEFS_H #define ngspice_CONTDEFS_H /* Data Structures and Definitions for Device Simulation Cards */ typedef struct sCONTcard { struct sCONTcard *CONTnextCard; double CONTworkfun; int CONTtype; int CONTnumber; unsigned int CONTworkfunGiven : 1; unsigned int CONTtypeGiven : 1; unsigned int CONTnumberGiven : 1; } CONTcard; /* CONT parameters */ enum { CONT_NEUTRAL = 1, CONT_ALUMINUM, CONT_P_POLY, CONT_N_POLY, CONT_WORKFUN, CONT_NUMBER, }; #endif tmpk8ny_4pz/src/include/ngspice/methdefs.h0000644000175000017500000000206613546075722020776 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors : 1991 David Gates **********/ /* Member of CIDER device simulator * Version: 1b1 */ #ifndef ngspice_METHDEFS_H #define ngspice_METHDEFS_H /* Data Structures and Definitions for Device Simulation Cards */ typedef struct sMETHcard { struct sMETHcard *METHnextCard; double METHdabstol; double METHdreltol; double METHomega; int METHoneCarrier; int METHacAnalysisMethod; int METHmobDeriv; int METHitLim; int METHvoltPred; unsigned int METHdabstolGiven : 1; unsigned int METHdreltolGiven : 1; unsigned int METHomegaGiven : 1; unsigned int METHoneCarrierGiven : 1; unsigned int METHacAnalysisMethodGiven : 1; unsigned int METHmobDerivGiven : 1; unsigned int METHitLimGiven : 1; unsigned int METHvoltPredGiven : 1; } METHcard; /* METH parameters */ enum { METH_DABSTOL = 1, METH_DRELTOL, METH_OMEGA, METH_ONEC, METH_ACANAL, METH_NOMOBDERIV, METH_ITLIM, METH_VOLTPRED, }; #endif tmpk8ny_4pz/src/include/ngspice/sensgen.h0000644000175000017500000000106513546075722020637 0ustar carstencarstentypedef struct s_sgen sgen; struct s_sgen { CKTcircuit *ckt; GENmodel **devlist; GENmodel *model, *next_model, *first_model; GENinstance *instance, *next_instance, *first_instance; IFparm *ptable; double value; int dev; int istate; int param, max_param; int is_dc; int is_instparam; int is_q; int is_principle; int is_zerook; }; extern sgen *sgen_init(CKTcircuit *ckt, int is_dc); extern int sgen_next(sgen **xsg); extern int sgen_setp(sgen*, CKTcircuit*, IFvalue* ); /* AlansFixes */ extern int sens_getp(sgen *, CKTcircuit *, IFvalue *); tmpk8ny_4pz/src/include/ngspice/fteext.h0000644000175000017500000003221313546075722020473 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1986 Wayne A. Christopher, U. C. Berkeley CAD Group Modified: 1999 Paolo Nenzi - 2000 AlansFixes **********/ /* * Definitions for all external symbols in FTE. */ #ifndef ngspice_FTEEXT_H #define ngspice_FTEEXT_H #include "ngspice/config.h" /* needed to find out what the interface structures look like */ #include "ngspice/typedefs.h" #include "ngspice/ifsim.h" #include "ngspice/dvec.h" #include "ngspice/plot.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/fteinp.h" /* aspice.c */ extern void ft_checkkids(void); /* breakpoint.c */ extern bool ft_bpcheck(struct plot *runplot, int iteration); extern void dbfree(struct dbcomm *db); extern void dbfree1(struct dbcomm *db); /* breakp2.c */ extern int ft_getSaves(struct save_info **); /* circuits.c */ extern struct circ *ft_curckt; extern struct circ *ft_circuits; extern struct subcirc *ft_subcircuits; extern void ft_newcirc(struct circ *ci); /* clip.c */ extern bool clip_line(int *pX1, int *pY1, int *pX2, int *pY2, int l, int b, int r, int t); extern bool clip_to_circle(int *x1, int *y1, int *x2, int *y2, int cx, int cy, int rad); /* cmath1.c */ extern bool cx_degrees; extern void *cx_mag(void *, short int , int , int *, short int *); extern void *cx_ph(void *, short int , int , int *, short int *); extern void *cx_cph(void *, short int , int , int *, short int *); extern void *cx_unwrap(void *, short int , int , int *, short int *); extern void *cx_j(void *, short int , int , int *, short int *); extern void *cx_real(void *, short int , int , int *, short int *); extern void *cx_imag(void *, short int , int , int *, short int *); extern void *cx_pos(void *, short int , int , int *, short int *); extern void *cx_db(void *, short int , int , int *, short int *); extern void *cx_log10(void *, short int , int , int *, short int *); extern void *cx_log(void *, short int , int , int *, short int *); extern void *cx_exp(void *, short int , int , int *, short int *); extern void *cx_sqrt(void *, short int , int , int *, short int *); extern void *cx_sin(void *, short int , int , int *, short int *); extern void *cx_sinh(void *, short int , int , int *, short int *); extern void *cx_cos(void *, short int , int , int *, short int *); extern void *cx_cosh(void *, short int , int , int *, short int *); extern void *cx_tan(void *, short int , int , int *, short int *); extern void *cx_tanh(void *, short int , int , int *, short int *); extern void *cx_atan(void *, short int , int , int *, short int *); extern void *cx_floor(void *, short int , int , int *, short int *); extern void *cx_ceil(void *, short int , int , int *, short int *); extern void *cx_nint(void *, short int , int , int *, short int *); extern void *cx_sortorder(void *, short int , int , int *, short int *); /* cmath2.c */ extern void *cx_norm(void *, short int , int , int *, short int *); extern void *cx_uminus(void *, short int , int , int *, short int *); extern void *cx_rnd(void *, short int , int , int *, short int *); extern void *cx_sunif(void *, short int , int , int *, short int *); extern void *cx_sgauss(void *, short int , int , int *, short int *); extern void *cx_poisson(void *, short int , int , int *, short int *); extern void *cx_exponential(void *, short int , int , int *, short int *); extern void *cx_mean(void *, short int , int , int *, short int *); extern void *cx_stddev(void *, short int , int , int *, short int *); extern void *cx_length(void *, short int , int , int *, short int *); extern void *cx_vector(void *, short int , int , int *, short int *); extern void *cx_unitvec(void *, short int , int , int *, short int *); extern void *cx_plus(void *, void *, short int , short int , int ); extern void *cx_minus(void *, void *, short int , short int , int ); extern void *cx_times(void *, void *, short int , short int , int ); extern void *cx_mod(void *, void *, short int , short int , int ); extern void *cx_max(void *, short int , int , int *, short int *); extern void *cx_min(void *, short int , int , int *, short int *); extern void *cx_d(void *, short int , int , int *, short int *); extern void *cx_avg(void *, short int , int , int *, short int *); /* cmath3.c */ extern void *cx_divide(void *, void *, short int , short int , int); extern void *cx_comma(void *, void *, short int , short int , int); extern void *cx_power(void *, void *, short int , short int , int); extern void *cx_eq(void *, void *, short int , short int , int); extern void *cx_gt(void *, void *, short int , short int , int); extern void *cx_lt(void *, void *, short int , short int , int); extern void *cx_ge(void *, void *, short int , short int , int); extern void *cx_le(void *, void *, short int , short int , int); extern void *cx_ne(void *, void *, short int , short int , int); /* cmath4.c */ extern void *cx_and(void *, void *, short int , short int , int); extern void *cx_or(void *, void *, short int , short int , int); extern void *cx_not(void *, short int , int , int *, short int *); extern void *cx_interpolate(void *, short int , int , int *, short int *, struct plot *, struct plot *, int ); extern void *cx_deriv(void *, short int , int , int *, short int *, struct plot *, struct plot *, int ); extern void *cx_group_delay(void *, short int , int , int *, short int *, struct plot *, struct plot *, int ); extern void *cx_fft(void *, short int , int , int *, short int *, struct plot *, struct plot *, int ); extern void *cx_ifft(void *, short int , int , int *, short int *, struct plot *, struct plot *, int ); /* define.c */ extern struct pnode *ft_substdef(const char *name, struct pnode *args); extern void ft_pnode(struct pnode *pn); /* DEVHELP*/ extern void com_devhelp(wordlist *wl); extern void com_inventory(wordlist *wl); /* dotcards.c */ extern bool ft_acctprint; extern bool ft_noacctprint; extern bool ft_noinitprint; extern bool ft_norefprint; extern bool ft_listprint; extern bool ft_nopage; extern bool ft_nomod; extern bool ft_nodesprint; extern bool ft_optsprint; extern int ft_cktcoms(bool terse); extern void ft_dotsaves(void); extern int ft_savedotargs(void); /* error.c */ extern void fperror(char *mess, int code); extern void ft_sperror(int code, char *mess); extern char ErrorMessage[]; extern void internalerror(char *); extern void externalerror(char *); extern bool ft_pipemode; /* evaluate.c */ extern struct dvec *ft_evaluate(struct pnode *node); /* ftesopt.c */ extern struct variable *ft_getstat(struct circ *, char *); /* ginterface.c extern bool gi_init(); extern bool gi_endpause; extern bool gi_rottext; extern int gi_fntheight; extern int gi_fntwidth; extern int gi_maxx; extern int gi_maxy; extern int gi_nolst; extern int gi_nocolors; extern int gi_package; extern void gi_arc(); extern void gi_clearscreen(); extern void gi_close(); extern void gi_drawline(); extern void gi_redraw(); extern void gi_setcolor(); extern void gi_resetcolor(); extern void gi_setlinestyle(); extern void gi_text(); extern void gi_update(); */ /* graf.c */ extern bool gr_gmode; extern bool gr_hmode; extern double gr_xrange[2]; extern double gr_yrange[2]; extern int gr_xmargin; extern int gr_ymargin; extern int gr_xcenter; extern int gr_ycenter; extern int gr_radius; extern bool gr_circular; /* inp.c */ void inp_dodeck(struct card *deck, char *tt, wordlist *end, bool reuse, struct card *options, char *filename); extern void inp_source(char *file); void inp_spsource(FILE *fp, bool comfile, char *filename, bool intfile); extern void inp_casefix(char *string); extern void inp_list(FILE *file, struct card *deck, struct card *extras, int type); extern struct card *inp_readall(FILE *fp, char *dir_name, bool comfile, bool intfile, bool *expr_w_temper); extern FILE *inp_pathopen(char *name, char *mode); extern char *search_identifier(char *str, const char *identifier, char *str_begin); extern char *find_assignment(const char *s); extern char *find_back_assignment(const char *s, const char *start); extern struct card *line_nconc(struct card *head, struct card *rest); extern struct card *line_reverse(struct card *head); extern void inp_mc_free(void); extern void inp_source_recent(void); extern void inp_remove_recent(void); extern char **circarray; extern void rem_tlist(struct pt_temper *p); /* nutinp.c */ void inp_nutsource(FILE *fp, bool comfile, char *filename); void nutinp_dodeck(struct card *deck, char *tt, wordlist *end, bool reuse, struct card *options, char *filename); extern void nutcom_source(wordlist *wl); /* interpolate.c */ extern bool ft_interpolate(double *data, double *ndata, double *oscale, int olen, double *nscale, int nlen, int degree); extern bool ft_polyfit(double *xdata, double *ydata, double *result, int degree, double *scratch); extern double ft_peval(double x, double *coeffs, int degree); extern void ft_polyderiv(double *coeffs, int degree); /* numparse.c */ extern bool ft_strictnumparse; double *ft_numparse(char **s, bool whole); /* options.c */ extern bool ft_simdb; extern bool ft_parsedb; extern bool ft_evdb; extern bool ft_vecdb; extern bool ft_grdb; extern bool ft_gidb; extern bool ft_controldb; extern bool ft_asyncdb; extern char *ft_setkwords[]; extern struct card *inp_getopts(struct card *deck); extern struct card *inp_getoptsc(char *line, struct card *options); extern bool ft_ngdebug; extern bool ft_stricterror; /* parse.c */ extern struct func ft_funcs[]; extern struct func func_not; extern struct func func_uminus; extern struct pnode *ft_getpnames(const wordlist *wl, bool check); struct pnode *ft_getpnames_from_string(const char *sz, bool check); extern struct pnode *alloc_pnode(void); #define free_pnode(ptr) \ do { \ free_pnode_x(ptr); \ ptr = NULL; \ } while(0) extern void free_pnode_x(struct pnode *t); /* plotcurve.c */ extern int ft_findpoint(double pt, double *lims, int maxp, int minp, bool islog); extern double *ft_minmax(struct dvec *v, bool real); extern void ft_graf(struct dvec *v, struct dvec *xs, bool nostart); /* rawfile.c */ extern int raw_prec; extern void raw_write(char *name, struct plot *pl, bool app, bool binary); extern void spar_write(char *name, struct plot *pl, double val); extern struct plot *raw_read(char *name); /* meas.c */ extern bool do_measure(char *what, bool chk_only); extern bool check_autostop(char *what); /* resource.c */ extern void ft_ckspace(void); /* runcoms.c */ extern int ft_dorun(char *file); extern bool ft_getOutReq(FILE **, struct plot **, bool *, char *, char *); /* spice.c & nutmeg.c */ extern const bool ft_nutmeg; extern IFsimulator *ft_sim; extern char *ft_rawfile; extern int main(int argc, char **argv); /* spiceif.c & nutmegif.c */ extern bool if_tranparams(struct circ *ci, double *start, double *stop, double *step); extern char *if_errstring(int code); extern int if_sens_run(CKTcircuit *t, wordlist *args, INPtables *tab); extern struct variable *(*if_getparam)(CKTcircuit *ckt, char **name, char *param, int ind, int do_model); extern struct variable *nutif_getparam(CKTcircuit *ckt, char **name, char *param, int ind, int do_model); extern struct variable *spif_getparam(CKTcircuit *ckt, char **name, char *param, int ind, int do_model); extern struct variable *spif_getparam_special(CKTcircuit *ckt, char **name, char *param, int ind, int do_model); extern void if_setndnames(char *line); extern void if_setparam_model(CKTcircuit *ckt, char **name, char *val ); extern void if_setparam(CKTcircuit *ckt, char **name, char *param, struct dvec *val, int do_model); extern struct variable *if_getstat(CKTcircuit *ckt, char *name); extern int ft_find_analysis(char *name); extern IFparm *ft_find_analysis_parm(int which, char *name); /* typesdef.c */ extern char *ft_typabbrev(int); extern char *ft_typenames(int); extern char *ft_plotabbrev(char *); extern int ft_typnum(char *); /* vectors.c */ extern bool vec_iszero(struct dvec *v); extern bool vec_eq(struct dvec *v1, struct dvec *v2); extern int plot_num; extern struct dvec *vec_fromplot(char *word, struct plot *plot); extern struct dvec *vec_copy(struct dvec *v); extern struct dvec *vec_get(const char *word); extern struct dvec *vec_mkfamily(struct dvec *v); extern struct plot *plot_cur; extern struct plot *plot_alloc(char *name); extern struct plot *plot_list; extern int plotl_changed; extern void plot_add(struct plot *pl); #define vec_free(ptr) \ do { \ vec_free_x(ptr); \ ptr = NULL; \ } while(0) extern void vec_free_x(struct dvec *v); extern void vec_gc(void); extern void ft_loadfile(char *file); extern void vec_new(struct dvec *d); extern void plot_docoms(wordlist *wl); extern void vec_remove(const char *name); extern void plot_setcur(char *name); extern struct plot *get_plot(char* name); extern void plot_new(struct plot *pl); extern char *vec_basename(struct dvec *v); extern bool plot_prefix(char *pre, char *str); extern void vec_transpose(struct dvec *v); /* main.c */ extern bool ft_intrpt; extern bool ft_setflag; /* error.c */ #endif tmpk8ny_4pz/src/include/ngspice/bool.h0000644000175000017500000000032113546075722020122 0ustar carstencarsten#ifndef ngspice_BOOL_H #define ngspice_BOOL_H //typedef unsigned char bool; typedef int bool; typedef int BOOL ; #define BOOLEAN int #define TRUE 1 #define FALSE 0 #define NO 0 #define YES 1 #endif tmpk8ny_4pz/src/include/ngspice/wallace.h0000644000175000017500000000121213546075722020577 0ustar carstencarsten/* Wallace generator for normally distributed random variates Copyright Holger Vogt, 2008 Calling sequence: initw(void); initialize using srand(seed) double x = GaussWa; returns normally distributed random variate */ extern double *outgauss; /*output vector for user access */ extern unsigned int variate_used; /* actual index of variate called by user */ extern double ScaleGauss; /* scale factor, including chi square correction */ double NewWa(void); /* generate new pool, return outgauss[0] */ #define GaussWa ((--variate_used)?(outgauss[variate_used]*ScaleGauss):NewWa()) void PolarGauss(double* py1, double* py2); tmpk8ny_4pz/src/include/ngspice/jobdefs.h0000644000175000017500000000100113546075722020577 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #ifndef ngspice_JOBDEFS_H #define ngspice_JOBDEFS_H #include "ngspice/typedefs.h" #include "ngspice/ifsim.h" struct JOB { int JOBtype; /* type of job */ struct JOB *JOBnextJob; /* next job in list */ IFuid JOBname; /* name of this job */ }; enum { NODOMAIN = 0, TIMEDOMAIN, FREQUENCYDOMAIN, SWEEPDOMAIN, }; #endif tmpk8ny_4pz/src/include/ngspice/swec.h0000644000175000017500000002725213546075722020144 0ustar carstencarsten/* * project.h * * Timing Simulator (ESWEC) * * Date: October 5, 1990 * * Author: Shen Lin * * Copyright (C) University of California, Berkeley * */ #ifndef ngspice_SWEC_H #define ngspice_SWEC_H /************************************************************ * * Defines * ************************************************************/ #define MainTitle " Timing Simulator\n" #define MAXDEVICE 4 #define MAXMOS 31500 /* suggested value */ #define MAXDD 256 /* suggested value */ #define MAXVCCS 128 /* suggested value */ #define MAXTIME 1000000 #define MAXNODE 136 #define TAB_SIZE 8192 /* originally 2048 */ #define NUM_STEPS_PER_MICRON 10 /* 0.1 micron is the smallest step */ #define MAX_FET_SIZE 80 /* largest fet in microns */ #define Vol_Step 1.0e-3 /* voltage resolution */ #define SCL 1000.0 /* voltage scaler (1V/3mv) */ #define MAX_CP_TX_LINES 8 /* max number of coupled lines in a multiconductor line system */ /************************************************************ * * Macro * ************************************************************/ #ifndef MAX #define MAX(x, y) ((x) > (y) ? (x) : (y)) #endif #ifndef MIN #define MIN(x, y) ((x) < (y) ? (x) : (y)) #endif #ifndef ABS #define ABS(x) ((x) >= 0 ? (x) : (-(x))) #endif /************************************************************ * * Data Structure Definitions * ************************************************************/ typedef struct reglist REGLIST; typedef struct node NODE; typedef struct mosfet MOSFET; typedef struct emosfet EMOSFET; typedef struct diode DIODE; typedef struct ediode EDIODE; typedef struct vccs VCCS; typedef struct evccs EVCCS; typedef struct i_cap I_CAP; typedef struct ei_cap EI_CAP; typedef struct resistor RESISTOR; typedef struct eresistor ERESISTOR; typedef struct rline RLINE; typedef struct erline ERLINE; typedef struct txline TXLine; typedef struct etxline ETXLine; typedef struct cpline CPLine; typedef struct ecpline ECPLine; typedef struct bqueue BQUEUE; typedef struct pqueue PQUEUE; typedef struct ms_device MS_DEVICE; typedef struct bp_device BP_DEVICE; typedef struct dd_device DD_DEVICE; struct mosfet{ int type; /* 1 : NMOS, 2 : PMOS */ MS_DEVICE *device; /* NULL if the nominal device model */ NODE *out_node; NODE *in_node; float Cs, Cd; MOSFET *nx; int time; /* instantaneous information */ float voltage, dvg; /* instantaneous information */ float vgN_1; /* gate voltage at previous event point */ float G; /* effective conductance at t(n) */ float effective; /* W over effective L */ int tabW; /* width in ns/um */ REGLIST *region; /* region associated with this mos */ /* NULL if driven by the node of the same region */ }; struct diode{ float Is; /* saturation current */ float Vj; /* junction potential */ double G; NODE *in_node; NODE *out_node; DIODE *nx; }; struct vccs{ float Is; /* saturation current */ NODE *in_node; NODE *out_node; NODE *pcv_node; NODE *ncv_node; DIODE *nx; }; typedef struct { char name[10]; /* device name */ int type; /* 1 : NMOS, 2 : PMOS */ int device_id; /* device id */ } DEVICENAME; struct ms_device{ char name[10]; int used; /* device used in circuit flag */ float rho; /* device vsat denom param */ float alpha; /* device vsat denom vgg param */ float vt; /* device zero bias threshold voltage in mv*/ float gamma; /* device backgate bias vt param */ float fermi; /* device fermi potential in mv */ float theta; /* device backgate bias vt width param */ float mu; /* device vt width param */ float eta; /* device saturation slope */ float eta5; /* eta - 0.5 */ int pzld; /* positive lambda */ float lambda; /* channel-length modulation */ float kp; /* device conductance parameter */ float cgs0; /* gate-source overlap capacitance per meter channel width */ float cgd0; /* gate-drain overlap capacitance per meter channel width */ float cox; /* oxide-field capacitance per square meter of gate area */ float cjsw; /* zero-biased junction sidewall capacitace per meter of junction perimeter */ float cj0; /* zero-biased junction bottom capacitace per square meter of junction area */ float keq; /* abrupt junction parameter */ float ld; /* lateral diffusion */ float *thresh; float *sat; float *dsat; float *body; float *gammod; }; struct bp_device{ char name[10]; int type; /* 1 : NPN; 2 : PNP */ float rc; /* collector resistance */ float re; /* emitter resistance */ float rb; /* zero bias base resistance */ float Is; /* transport saturation current */ float Af; /* ideal maximum forward alpha */ float Ar; /* ideal maximum reverse alpha */ float Vje; /* B-E built-in potential */ float Vjc; /* B-C built-in potential */ }; struct dd_device{ char name[10]; float Is; /* saturation current */ float rs; /* ohmic resistance */ float Vj; /* junction potential */ }; typedef struct linked_lists_of_Bpoint{ struct linked_lists_of_Bpoint *next; int time; float voltage; float slope; } BPOINT, *BPOINTPTR; typedef struct linked_lists_of_nodeName{ char id[24]; struct linked_lists_of_nodeName *left, *right; NODE *nd; } NDname, *NDnamePt; struct node { NDnamePt name; EMOSFET *mptr; /* pointer to head of src/drn MOSFET list */ EMOSFET *gptr; /* pointer to head of gate MOSFET list */ EI_CAP *cptr; /* pointer to head of internodal cap list */ ERESISTOR *rptr; /* pointer to head of internodal resistor list */ ERLINE *rlptr; /* pointer to head of internodal TX line list */ ETXLine *tptr; /* pointer to head of transmission line list */ ECPLine *cplptr; /* pointer to head of coupled lines list */ EDIODE *ddptr; /* pointer to head of diode list */ EVCCS *vccsptr; /* pointer to head of VCCS list */ EVCCS *cvccsptr;/* pointer to head of controlled VCCS list */ NODE *next; /* pointer to next node */ REGLIST *region; /* region associated with this node */ NODE *base_ptr; /* group src/drn nodes into region */ /* charles 2,2 1/18/93 float V; float dv; voltage at t(n-1) and slope at t(n) */ double V; double dv; double CL; /* grounded capacitance in F */ double gsum; /*^ sum of the equivalent conductance */ double cgsum; /*^ sum of the constant conductance */ double is; /*^ equivalent Is */ int tag; /* -2 : Vdd, -3 : Vss, -1 : initial value */ int flag; /*^ flag to show some features of the node */ PQUEUE *qptr; /*^ pointer to the entry in the queue or waiting list */ FILE *ofile; /* output file for the signal at this node */ /* NULL if not for print */ int dvtag; }; struct reglist{ REGLIST *rnxt; /* pointer to next region */ NODE *nlist; /* node list */ MOSFET *mos; I_CAP *cap; RESISTOR *res; TXLine *txl; CPLine *cpl; struct linked_lists_of_Bpoint *Bpoint; /* break points at primary inputs */ struct linked_lists_of_Bpoint *head; /* header of the break points at primary inputs */ int eTime; /* time when this region previously evaluated */ int DCvalue; /* 1, 0, 2 : unknown, 3 : unchangeable 1, 4 : unchangeable 0 */ BQUEUE *prediction; }; struct bqueue{ int key; /* time for the event to be fired, or DC weight */ BQUEUE *left; BQUEUE *right; BQUEUE *pred; BQUEUE *pool; REGLIST *region; /* region id */ }; struct pqueue { NODE *node; PQUEUE *next; PQUEUE *prev; }; struct i_cap { NODE *in_node; NODE *out_node; float cap; I_CAP *nx; }; struct resistor { NODE *in_node; NODE *out_node; float g; /* conductance */ int ifF; /* whether floating */ float g1; /* conductance for floating resistor */ RESISTOR *nx; }; struct rline { NODE *in_node; NODE *out_node; double g; /* conductance */ RLINE *nx; }; typedef struct linked_lists_of_vi_txl{ struct linked_lists_of_vi_txl *next; struct linked_lists_of_vi_txl *pool; int time; /* charles 2,2 float v_i, v_o; float i_i, i_o; */ double v_i, v_o; double i_i, i_o; } VI_list_txl; typedef struct linked_lists_of_vi{ struct linked_lists_of_vi *next; struct linked_lists_of_vi *pool; int time; double v_i[MAX_CP_TX_LINES], v_o[MAX_CP_TX_LINES]; double i_i[MAX_CP_TX_LINES], i_o[MAX_CP_TX_LINES]; } VI_list; typedef struct { double c, x; double cnv_i, cnv_o; } TERM; typedef struct { int ifImg; double aten; TERM tm[3]; } TMS; struct cpline { int noL; int ext; double ratio[MAX_CP_TX_LINES]; double taul[MAX_CP_TX_LINES]; TMS *h1t[MAX_CP_TX_LINES][MAX_CP_TX_LINES]; TMS *h2t[MAX_CP_TX_LINES][MAX_CP_TX_LINES][MAX_CP_TX_LINES]; TMS *h3t[MAX_CP_TX_LINES][MAX_CP_TX_LINES][MAX_CP_TX_LINES]; double h1C[MAX_CP_TX_LINES][MAX_CP_TX_LINES]; double h2C[MAX_CP_TX_LINES][MAX_CP_TX_LINES][MAX_CP_TX_LINES]; double h3C[MAX_CP_TX_LINES][MAX_CP_TX_LINES][MAX_CP_TX_LINES]; double h1e[MAX_CP_TX_LINES][MAX_CP_TX_LINES][3]; NODE *in_node[MAX_CP_TX_LINES]; NODE *out_node[MAX_CP_TX_LINES]; int tag_i[MAX_CP_TX_LINES], tag_o[MAX_CP_TX_LINES]; CPLine *nx; struct linked_lists_of_vi *vi_head; struct linked_lists_of_vi *vi_tail; double dc1[MAX_CP_TX_LINES], dc2[MAX_CP_TX_LINES]; }; struct txline { int lsl; /* 1 if the line is lossless, otherwise 0 */ int ext; /* a flag, set if time step is greater than tau */ double ratio; double taul; double sqtCdL; double h2_aten; double h3_aten; double h1C; double h1e[3]; int ifImg; NODE *in_node; NODE *out_node; int tag_i, tag_o; TERM h1_term[3]; TERM h2_term[3]; TERM h3_term[6]; TXLine *nx; struct linked_lists_of_vi_txl *vi_head; struct linked_lists_of_vi_txl *vi_tail; double dc1, dc2; int newtp; /* flag indicating new time point */ }; struct evccs { VCCS *vccs; EVCCS *link; }; struct ediode { DIODE *dd; EDIODE *link; }; struct emosfet { MOSFET *mos; EMOSFET *link; }; struct ei_cap { I_CAP *cap; EI_CAP *link; }; struct eresistor { RESISTOR *res; ERESISTOR *link; }; struct erline { RLINE *rl; ERLINE *link; }; struct etxline { TXLine *line; ETXLine *link; }; struct ecpline { CPLine *line; ECPLine *link; }; #endif tmpk8ny_4pz/src/include/ngspice/fteinput.h0000644000175000017500000000204613546075722021033 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jeffrey M. Hsu **********/ /* Defs to use the Input routine. char_option is used by the lexer and the command interpreter response.reply contains a pointer to a character button_option is used by the menu system and the help package response.reply contains the button number click_option is used in the X10 version for the hardcopy command response.reply is the associated graph structure checkup_option is for handling and pending asynchonous events */ #ifndef ngspice_FTEINPUT_H #define ngspice_FTEINPUT_H #include #include "ngspice/graph.h" typedef enum { error_option, /* a reply option only */ button_option, char_option, click_option, checkup_option } OPTION; typedef struct request { OPTION option; FILE *fp; } REQUEST; typedef struct response { OPTION option; union { int ch; GRAPH *graph; int button; } reply; } RESPONSE; #endif tmpk8ny_4pz/src/include/ngspice/mif.h0000644000175000017500000000434713546075722017756 0ustar carstencarsten#ifndef ngspice_MIF_H #define ngspice_MIF_H /* =========================================================================== FILE MIF.h MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file structure definitions global data used with the MIF package. The global data structure is used to circumvent the need to modify argument lists in existing SPICE 3C1 functions. INTERFACES None. REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ #include "ngspice/miftypes.h" #include "ngspice/mifdefs.h" #include "ngspice/cktdefs.h" typedef struct { Mif_Boolean_t init; /* TRUE if first call to model */ Mif_Boolean_t anal_init; /* TRUE if first call for this analysis type */ Mif_Analysis_t anal_type; /* The type of analysis being performed */ Mif_Call_Type_t call_type; /* Type of call to code model - analog or event-driven */ double evt_step; /* The current DC step or time in event analysis */ } Mif_Circuit_Info_t; typedef struct { double current; /* The current dynamic breakpoint time */ double last; /* The last used dynamic breakpoint time */ } Mif_Bkpt_Info_t; typedef struct { Mif_Boolean_t global; /* Set by .option to force all models to use auto */ Mif_Boolean_t local; /* Set by individual model to request auto partials */ } Mif_Auto_Partial_t; typedef struct { Mif_Circuit_Info_t circuit; /* Circuit data that will be needed by MIFload */ MIFinstance *instance; /* Current instance struct */ CKTcircuit *ckt; /* The ckt struct for the circuit */ char *errmsg; /* An error msg from a cm_... function */ Mif_Bkpt_Info_t breakpoint; /* Data used by dynamic breakpoints */ Mif_Auto_Partial_t auto_partial; /* Flags to enable auto partial computations */ } Mif_Info_t; /* These are defined in mif.c */ extern int MIFiSize; extern int MIFmSize; extern Mif_Info_t g_mif_info; #endif tmpk8ny_4pz/src/include/ngspice/numgen.h0000644000175000017500000000231613546075722020466 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors: 1991 David Gates **********/ /* Member of CIDER device simulator * Version: 1b1 */ /* * Generic Numerical Model Structure */ #ifndef ngspice_NUMGEN_H #define ngspice_NUMGEN_H #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/gendefs.h" #include "ngspice/carddefs.h" typedef struct sGENnumModel { /* model structure for a numerical device */ struct GENmodel gen; MESHcard *GENxMeshes; /* list of xmesh cards */ MESHcard *GENyMeshes; /* list of ymesh cards */ DOMNcard *GENdomains; /* list of domain cards */ BDRYcard *GENboundaries; /* list of boundary cards */ DOPcard *GENdopings; /* list of doping cards */ ELCTcard *GENelectrodes; /* list of electrode cards */ CONTcard *GENcontacts; /* list of contact cards */ MODLcard *GENmodels; /* list of model cards */ MATLcard *GENmaterials; /* list of material cards */ MOBcard *GENmobility; /* list of mobility cards */ METHcard *GENmethods; /* list of method cards */ OPTNcard *GENoptions; /* list of option cards */ OUTPcard *GENoutputs; /* list of output cards */ } GENnumModel; #endif tmpk8ny_4pz/src/include/ngspice/meshext.h0000644000175000017500000000130413546075722020646 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Author: 1991 David A. Gates, U. C. Berkeley CAD Group **********/ /* Member of CIDER device simulator * Version: 1b1 */ /********** Mesh Definitions and Declarations. **********/ #ifndef ngspice_MESHEXT_H #define ngspice_MESHEXT_H #include "ngspice/meshdefs.h" #include "ngspice/gendev.h" extern double *MESHmkArray( MESHcoord *, int ); extern void MESHiBounds( MESHcoord *, int *, int * ); extern void MESHlBounds( MESHcoord *, double *, double * ); extern int MESHlocate( MESHcoord *, double ); extern int MESHcheck( char, MESHcard * ); extern int MESHsetup( char, MESHcard *, MESHcoord **, int * ); #endif tmpk8ny_4pz/src/include/ngspice/elctdefs.h0000644000175000017500000000211413546075722020762 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors : 1991 David Gates **********/ /* Member of CIDER device simulator * Version: 1b1 */ #ifndef ngspice_ELCTDEFS_H #define ngspice_ELCTDEFS_H /* Data Structures and Definitions for Device Simulation Cards */ typedef struct sELCTcard { struct sELCTcard *ELCTnextCard; double ELCTxLow; double ELCTxHigh; double ELCTyLow; double ELCTyHigh; int ELCTixLow; int ELCTixHigh; int ELCTiyLow; int ELCTiyHigh; int ELCTnumber; unsigned int ELCTxLowGiven : 1; unsigned int ELCTxHighGiven : 1; unsigned int ELCTyLowGiven : 1; unsigned int ELCTyHighGiven : 1; unsigned int ELCTixLowGiven : 1; unsigned int ELCTixHighGiven : 1; unsigned int ELCTiyLowGiven : 1; unsigned int ELCTiyHighGiven : 1; unsigned int ELCTnumberGiven : 1; } ELCTcard; /* ELCT parameters */ enum { ELCT_X_LOW = 1, ELCT_X_HIGH, ELCT_Y_LOW, ELCT_Y_HIGH, ELCT_IX_LOW, ELCT_IX_HIGH, ELCT_IY_LOW, ELCT_IY_HIGH, ELCT_NUMBER, }; #endif tmpk8ny_4pz/src/include/ngspice/ifsim.h0000644000175000017500000004335013546075722020307 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1986 Thomas L. Quarles **********/ #ifndef ngspice_IFSIM_H #define ngspice_IFSIM_H #include "ngspice/typedefs.h" /* gtri - add - wbk - 10/11/90 - for structs referenced in IFdevice */ #ifdef XSPICE #include "ngspice/miftypes.h" #endif /* gtri - end - wbk - 10/11/90 */ /* * structure: IFparm * * * The structure used to describe all values passed * between the front end and the simulator when there is any * possibility one argument of the function could have more * than one type. * * keyword is provided for the front end and is the token * the user is expected to label the data with. * * id is an integer intended to uniquely identify the parameter * to the simulator * * dataType is an integer which indicates the type of argument * that must be passed for this parameter * * description is a longer description intended for help menus * the description should all fit on one line, but should * give a knowledgable user a good idea what the parameter is * used for. */ struct IFparm { char *keyword; int id; int dataType; char *description; }; /* * datatype: IFuid * * unique identifier for all name-type data in the simulator. * this permits the front end to use something other than * a unique, fully qualified character string to identify * an object. * */ /* moved to "typedefs.h" * typedef char *IFuid; */ /* * * types for IFnewUid * */ #define UID_ANALYSIS 0x1 #define UID_TASK 0x2 #define UID_INSTANCE 0x4 #define UID_MODEL 0x8 #define UID_SIGNAL 0x10 #define UID_OTHER 0x20 /* * dataType values: * * Note: These structures are put together by ORing together the * appropriate bits from the fields below as is shown for the vector * types. * IF_REQUIRED indicates that the parameter must be specified. * The front end does not NEED to check for this, but can to save time, * since failure to do so will cause the simulator to fail. * IF_SET indicates that the specified item is an input parameter. * IF_ASK indicates that the specified item is something the simulator * can provide information about. * IF_SET and IF_ASK are NOT mutually exclusive. * if IF_SET and IF_ASK are both zero, it indicates a parameter that * the simulator recoginizes are being a reasonable paremeter, but * which this simulator does not implement. */ #define IF_FLAG 0x1 #define IF_INTEGER 0x2 #define IF_REAL 0x4 #define IF_COMPLEX 0x8 #define IF_NODE 0x10 #define IF_STRING 0x20 #define IF_INSTANCE 0x40 #define IF_PARSETREE 0x80 /* indicates that for a query the integer field will have a selector * in it to pick a sub-field */ #define IF_SELECT 0x800 #define IF_VSELECT 0x400 /* indicates a vector of the specified type */ #define IF_VECTOR 0x8000 #define IF_FLAGVEC (IF_FLAG|IF_VECTOR) #define IF_INTVEC (IF_INTEGER|IF_VECTOR) #define IF_REALVEC (IF_REAL|IF_VECTOR) #define IF_CPLXVEC (IF_COMPLEX|IF_VECTOR) #define IF_NODEVEC (IF_NODE|IF_VECTOR) #define IF_STRINGVEC (IF_STRING|IF_VECTOR) #define IF_INSTVEC (IF_INSTANCE|IF_VECTOR) #define IF_REQUIRED 0x4000 #define IF_VARTYPES 0x80ff #define IF_SET 0x2000 #define IF_ASK 0x1000 /* If you AND with IF_UNIMP_MASK and get 0, it is recognized, but not * implemented */ #define IF_UNIMP_MASK (~0xfff) /* Used by sensetivity to check if a parameter is or is not useful */ #define IF_REDUNDANT 0x0010000 #define IF_PRINCIPAL 0x0020000 #define IF_AC 0x0040000 #define IF_AC_ONLY 0x0080000 #define IF_NOISE 0x0100000 #define IF_NONSENSE 0x0200000 #define IF_SETQUERY 0x0400000 #define IF_ORQUERY 0x0800000 #define IF_CHKQUERY 0x1000000 /* For "show" command: do not print value in a table by default */ #define IF_UNINTERESTING 0x2000000 /* Structure: IFparseTree * * This structure is returned by the parser for a IF_PARSETREE valued * parameter and describes the information that the simulator needs * to know about the parse tree in order to use it. * It is expected that the front end will have a more extensive * structure which this structure will be a prefix of. * * Note that the function pointer is provided as a hook for * versions which may want to compile code for the parse trees * if they are used heavily. * */ struct IFparseTree { int numVars; /* number of variables used */ int *varTypes; /* array of types of variables */ IFvalue *vars; /* array of structures describing values */ int (*IFeval) (IFparseTree *, double, double *, double *, double *); /* function to call to get evaluated */ }; /* * Structure: IFvalue * * structure used to pass the values corresponding to the above * dataType. All types are passed in one of these structures, with * relatively simple rules concerning the handling of the structure. * * whoever makes the subroutine call allocates a single instance of the * structure. The basic data structure belongs to you, and you * should arrange to free it when appropriate. * * The responsibilities of the data supplier are: * Any vectors referenced by the structure are to be tmalloc()'d * and are assumed to have been turned over to the recipient and * thus should not be re-used or tfree()'d. * * The responsibilities of the data recipient are: * scalar valued data is to be copied by the recipient * vector valued data is now the property of the recipient, * and must be tfree()'d when no longer needed. * * Character strings are a special case: Since it is assumed * that all character strings are directly descended from input * tokens, it is assumed that they are static, thus nobody * frees them until the circuit is deleted, when the front end * may do so. * * EVERYBODY's responsibility is to be SURE that the right data * is filled in and read out of the structure as per the IFparm * structure describing the parameter being passed. Programs * neglecting this rule are fated to die of data corruption * */ /* * Some preliminary definitions: * * IFnode's are returned by the simulator, thus we don't really * know what they look like, just that we get to carry pointers * to them around all the time, and will need to save them occasionally * */ typedef void *IFnode; /* * and of course, the standard complex data type */ struct IFcomplex { double real; double imag; }; union IFvalue { int iValue; /* integer or flag valued data */ double rValue; /* real valued data */ IFcomplex cValue; /* complex valued data */ char *sValue; /* string valued data */ IFuid uValue; /* UID valued data */ CKTnode *nValue; /* node valued data */ IFparseTree *tValue; /* parse tree */ struct { int numValue; /* length of vector */ union { int *iVec; /* pointer to integer vector */ double *rVec; /* pointer to real vector */ IFcomplex *cVec;/* pointer to complex vector */ char **sVec; /* pointer to string vector */ IFuid *uVec; /* pointer to UID vector */ IFnode *nVec; /* pointer to node vector */ } vec; } v; }; /* * structure: IFdevice * * This structure contains all the information available to the * front end about a particular device. The simulator will * present the front end with an array of pointers to these structures * which it will use to determine legal device types and parameters. * * Note to simulators: you are passing an array of pointers to * these structures, so you may in fact make this the first component * in a larger, more complex structure which includes other data * which you need, but which is not needed in the common * front end interface. * */ struct IFdevice { char *name; /* name of this type of device */ char *description; /* description of this type of device */ int *terms; /* number of terminals on this device */ int *numNames; /* number of names in termNames */ char **termNames; /* pointer to array of pointers to names */ /* array contains 'terms' pointers */ int *numInstanceParms; /* number of instance parameter descriptors */ IFparm *instanceParms; /* array of instance parameter descriptors */ int *numModelParms; /* number of model parameter descriptors */ IFparm *modelParms; /* array of model parameter descriptors */ /* gtri - modify - wbk - 10/11/90 - add entries to hold data required */ /* by new parser */ #ifdef XSPICE void (*cm_func) (Mif_Private_t *); /* pointer to code model function */ int num_conn; /* number of code model connections */ Mif_Conn_Info_t *conn; /* array of connection info for mif parser */ int num_param; /* number of parameters = numModelParms */ Mif_Param_Info_t *param; /* array of parameter info for mif parser */ int num_inst_var; /* number of instance vars = numInstanceParms */ Mif_Inst_Var_Info_t *inst_var; /* array of instance var info for mif parser */ /* gtri - end - wbk - 10/11/90 */ #endif int flags; /* DEV_ */ }; /* * Structure: IFanalysis * * This structure contains all the information available to the * front end about a particular analysis type. The simulator will * present the front end with an array of pointers to these structures * which it will use to determine legal analysis types and parameters. * * Note to simulators: As for IFdevice above, you pass an array of pointers * to these, so you can make this structure a prefix to a larger structure * which you use internally. * */ struct IFanalysis { char *name; /* name of this analysis type */ char *description; /* description of this type of analysis */ int numParms; /* number of analysis parameter descriptors */ IFparm *analysisParms; /* array of analysis parameter descriptors */ }; /* * Structure: IFsimulator * * This is what we have been leading up to all along. * This structure describes a simulator to the front end, and is * returned from the SIMinit command to the front end. * This is where all those neat structures we described in the first * few hundred lines of this file come from. * */ struct IFsimulator { char *simulator; /* the simulator's name */ char *description; /* description of this simulator */ char *version; /* version or revision level of simulator*/ int (*newCircuit) (CKTcircuit **); /* create new circuit */ int (*deleteCircuit) (CKTcircuit *); /* destroy old circuit's data structures*/ int (*newNode) (CKTcircuit *, CKTnode **, IFuid); /* create new node */ int (*groundNode) (CKTcircuit *, CKTnode **, IFuid); /* create ground node */ int (*bindNode) (CKTcircuit *, GENinstance *, int, CKTnode *); /* bind a node to a terminal */ int (*findNode) (CKTcircuit *, CKTnode **, IFuid); /* find a node by name */ int (*instToNode) (CKTcircuit *, void *, int, void **, IFuid *); /* find the node attached to a terminal */ int (*setNodeParm) (CKTcircuit *, CKTnode *, int, IFvalue *, IFvalue *); /* set a parameter on a node */ int (*askNodeQuest) (CKTcircuit *, CKTnode *, int, IFvalue *, IFvalue *); /* ask a question about a node */ int (*deleteNode) (CKTcircuit *, CKTnode *); /* delete a node from the circuit */ int (*newInstance) (CKTcircuit *, GENmodel *, GENinstance **, IFuid); /* create new instance */ int (*setInstanceParm) (CKTcircuit *, GENinstance *, int, IFvalue *, IFvalue *); /* set a parameter on an instance */ int (*askInstanceQuest) (CKTcircuit *, GENinstance *, int, IFvalue *, IFvalue *); /* ask a question about an instance */ GENinstance *(*findInstance) (CKTcircuit *, IFuid); /* find a specific instance */ int (*deleteInstance) (CKTcircuit *, void *); /* delete an instance from the circuit */ int (*newModel) (CKTcircuit *, int, GENmodel **, IFuid); /* create new model */ int (*setModelParm) (CKTcircuit *, GENmodel *, int, IFvalue *, IFvalue *); /* set a parameter on a model */ int (*askModelQuest) (CKTcircuit *, GENmodel *, int, IFvalue *, IFvalue *); /* ask a questions about a model */ GENmodel *(*findModel) (CKTcircuit *, IFuid); /* find a specific model */ int (*deleteModel) (CKTcircuit *, GENmodel *); /* delete a model from the circuit*/ int (*newTask) (CKTcircuit *, TSKtask **, IFuid, TSKtask **); /*CDHW*/ /* create a new task */ int (*newAnalysis) (CKTcircuit *, int, IFuid, JOB **, TSKtask *); /* create new analysis within a task */ int (*setAnalysisParm) (CKTcircuit *, JOB *, int, IFvalue *, IFvalue *); /* set a parameter on an analysis */ int (*askAnalysisQuest) (CKTcircuit *, JOB *, int, IFvalue *, IFvalue *); /* ask a question about an analysis */ int (*findAnalysis) (CKTcircuit *, int *, JOB **, IFuid, TSKtask *, IFuid); /* find a specific analysis */ int (*findTask) (CKTcircuit *, TSKtask **, IFuid); /* find a specific task */ int (*deleteTask) (CKTcircuit *, TSKtask *); /* delete a task */ int (*doAnalyses) (CKTcircuit *, int, TSKtask *); char *(*nonconvErr) (CKTcircuit *, char *); /* return nonconvergence error */ int numDevices; /* number of device types supported */ IFdevice **devices; /* array of device type descriptors */ int numAnalyses; /* number of analysis types supported */ IFanalysis **analyses; /* array of analysis type descriptors */ int numNodeParms; /* number of node parameters supported */ IFparm *nodeParms; /* array of node parameter descriptors */ int numSpecSigs; /* number of special signals legal in parse trees */ char **specSigs; /* names of special signals legal in parse trees */ }; /* * Structure: IFfrontEnd * * This structure provides the simulator with all the information * it needs about the front end. This is the entire set of * front end and back end related routines the simulator * should know about. * */ struct IFfrontEnd { int (*IFnewUid) (CKTcircuit *, IFuid *, IFuid, char *, int, CKTnode **); /* create a new UID in the circuit */ int (*IFdelUid) (CKTcircuit *, IFuid, int); /* create a new UID in the circuit */ int (*IFpauseTest) (void); /* should we stop now? */ double (*IFseconds) (void); /* what time is it? */ void (*IFerror) (int, char *, IFuid *); /* output an error or warning message */ #ifdef __GNUC__ void (*IFerrorf) (int, const char *fmt, ...) __attribute__ ((format (__printf__, 2, 3))); #else void (*IFerrorf) (int, const char *fmt, ...); #endif /* output an error or warning message */ int (*OUTpBeginPlot) (CKTcircuit *, JOB *, IFuid, IFuid, int, int, IFuid *, int, runDesc **); /* start pointwise output plot */ int (*OUTpData) (runDesc *, IFvalue *, IFvalue *); /* data for pointwise plot */ int (*OUTwBeginPlot) (CKTcircuit *, JOB *, IFuid, IFuid, int, int, IFuid *, int, runDesc **); /* start windowed output plot */ int (*OUTwReference) (runDesc *, IFvalue *, void **); /* independent vector for windowed plot */ int (*OUTwData) (runDesc *, int, IFvalue *, void *); /* data for windowed plot */ int (*OUTwEnd) (runDesc *); /* signal end of windows */ int (*OUTendPlot) (runDesc *); /* end of plot */ int (*OUTbeginDomain) (runDesc *, IFuid, int, IFvalue *); /* start nested domain */ int (*OUTendDomain) (runDesc *); /* end nested domain */ int (*OUTattributes) (runDesc *, IFuid, int, IFvalue *); /* specify output attributes of node */ }; /* flags for the first argument to IFerror */ #define ERR_WARNING 0x1 #define ERR_FATAL 0x2 #define ERR_PANIC 0x4 #define ERR_INFO 0x8 /* valid values for the second argument to doAnalyses */ /* continue the analysis from where we left off */ #define RESUME 0 /* start everything over from the beginning of this task*/ #define RESTART 1 /* abandon the current analysis and go on the the next in the task*/ #define SKIPTONEXT 2 #define OUT_SCALE_LIN 1 #define OUT_SCALE_LOG 2 #endif tmpk8ny_4pz/src/include/ngspice/suffix.h0000644000175000017500000000002013546075722020467 0ustar carstencarsten/* Null file */ tmpk8ny_4pz/src/include/ngspice/cluster.h0000644000175000017500000000122113546075722020650 0ustar carstencarsten#ifndef ngspice_CLUSTER_H #define ngspice_CLUSTER_H #include "ngspice/cktdefs.h" /* Cluster definitions */ #define PORT 1234 #define TIME_PORT 1235 #define DOMAIN_NAME "cluster.multigig" #define CLUSTER_WIDTH 4 #define TIME_HOST "time.cluster.multigig" /* does all the setups */ extern int CLUsetup(CKTcircuit *ckt); /* reads input pipes and sets voltages*/ /* call each time the present time is changed, ie just before NIinter*/ extern int CLUinput(CKTcircuit *ckt); /* call after each accepted timestep, ie CKTdump */ extern int CLUoutput(CKTcircuit *ckt); /* the time step control */ extern int CLUsync(double time,double *delta, int error); #endif tmpk8ny_4pz/src/include/ngspice/enhtypes.h0000644000175000017500000000132013546075722021026 0ustar carstencarsten#ifndef ngspice_ENHTYPES_H #define ngspice_ENHTYPES_H typedef enum { ENH_ANALOG_NODE, /* An analog node */ ENH_EVENT_NODE, /* An event-driven node */ ENH_ANALOG_BRANCH, /* A branch current */ ENH_ANALOG_INSTANCE, /* An analog instance */ ENH_EVENT_INSTANCE, /* An event-driven instance */ ENH_HYBRID_INSTANCE, /* A hybrid (analog/event-driven) instance */ } Enh_Conv_Source_t; typedef struct Enh_Bkpt Enh_Bkpt_t; typedef struct Enh_Ramp Enh_Ramp_t; typedef struct Enh_Conv_Debug Enh_Conv_Debug_t; typedef struct Enh_Conv_Limit Enh_Conv_Limit_t; typedef struct Enh_Rshunt Enh_Rshunt_t; typedef struct Enh_Ckt_Data Enh_Ckt_Data_t; #endif tmpk8ny_4pz/src/include/ngspice/cmconstants.h0000644000175000017500000000164013546075722021530 0ustar carstencarsten#ifndef ngspice_CMCONSTANTS_H #define ngspice_CMCONSTANTS_H /* =========================================================================== FILE CMconstants.h MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains constants used by code models. INTERFACES None. REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ #include "ngspice/miftypes.h" /***** Define Constants *******************************************/ #define FALSE 0 #define TRUE 1 #define DC MIF_DC #define AC MIF_AC #define TRANSIENT MIF_TRAN #define ANALOG MIF_ANALOG #define EVENT MIF_EVENT_DRIVEN #endif tmpk8ny_4pz/src/include/ngspice/ftedebug.h0000644000175000017500000000354213546075722020764 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ #ifndef ngspice_FTEDEBUG_H #define ngspice_FTEDEBUG_H /* * * Stuff for debugging a spice run. Debugging information will be printed * on the standard output. */ #define DB_TRACENODE 1 /* Print the value of a node every iteration. */ #define DB_TRACEALL 2 /* Trace all nodes. */ #define DB_STOPAFTER 3 /* Break after this many iterations. */ #define DB_STOPWHEN 4 /* Break when a node reaches this value. */ #define DB_IPLOT 5 /* Incrementally plot the stuff. */ #define DB_IPLOTALL 6 /* Incrementally plot everything. */ #define DB_SAVE 7 /* Save a node. */ #define DB_SAVEALL 8 /* Save everything. */ #define DB_DEADIPLOT 9 /* Incrementally plot the stuff. */ /* These only make sense in the real case, so always use realpart(). It's too * bad that we have to say "ge" instead of ">=", etc, but cshpar takes * the <>'s. */ #define DBC_EQU 1 /* == (eq) */ #define DBC_NEQ 2 /* != (ne) */ #define DBC_GT 3 /* > (gt) */ #define DBC_LT 4 /* < (lt) */ #define DBC_GTE 5 /* >= (ge) */ #define DBC_LTE 6 /* <= (le) */ struct dbcomm { int db_number; /* The number of this debugging command. */ char db_type; /* One of the above. */ char *db_nodename1; /* What node. */ char *db_nodename2; /* What node. */ char *db_analysis; /* for a specific analysis. */ int db_iteration; /* For the DB_STOPAFTER command. */ char db_op; /* For DB_STOPWHEN. */ double db_value1; /* If this is DB_STOPWHEN. */ double db_value2; /* If this is DB_STOPWHEN. */ int db_graphid; /* If iplot, id of graph. */ struct dbcomm *db_also; /* Link for conjunctions. */ struct dbcomm *db_next; /* List of active debugging commands. */ } ; #endif tmpk8ny_4pz/src/include/ngspice/domndefs.h0000644000175000017500000000227313546075722020776 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors : 1991 David Gates **********/ /* Member of CIDER device simulator * Version: 1b1 */ #ifndef ngspice_DOMNDEFS_H #define ngspice_DOMNDEFS_H /* Data Structures and Definitions for Device Simulation Cards */ typedef struct sDOMNcard { struct sDOMNcard *DOMNnextCard; /* pointer to next domain */ double DOMNxLow; double DOMNxHigh; double DOMNyLow; double DOMNyHigh; int DOMNixLow; int DOMNixHigh; int DOMNiyLow; int DOMNiyHigh; int DOMNmaterial; int DOMNnumber; unsigned int DOMNxLowGiven : 1; unsigned int DOMNxHighGiven : 1; unsigned int DOMNyLowGiven : 1; unsigned int DOMNyHighGiven : 1; unsigned int DOMNixLowGiven : 1; unsigned int DOMNixHighGiven : 1; unsigned int DOMNiyLowGiven : 1; unsigned int DOMNiyHighGiven : 1; unsigned int DOMNmaterialGiven : 1; unsigned int DOMNnumberGiven : 1; } DOMNcard; /* DOMN parameters */ enum { DOMN_X_LOW = 1, DOMN_X_HIGH, DOMN_Y_LOW, DOMN_Y_HIGH, DOMN_IX_LOW, DOMN_IX_HIGH, DOMN_IY_LOW, DOMN_IY_HIGH, DOMN_NUMBER, DOMN_MATERIAL, }; #endif tmpk8ny_4pz/src/include/ngspice/hlpdefs.h0000644000175000017500000000636313546075722020630 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1986 Wayne A. Christopher, U. C. Berkeley CAD Group Modified 1999 Emmanuel Rouat - 2000 AlansFixes **********/ /* * Definitions for the help system. */ #include "ngspice/config.h" #ifndef X_DISPLAY_MISSING # include #endif typedef struct fplace { char *filename; long fpos; FILE *fp; } fplace; typedef struct button { char *text; fplace *tag; /* Why isn't used for anything? */ int x; int y; int width; int height; } button; struct hlp_index { char subject[64]; long fpos; }; typedef struct toplink { char *description; /* really the subject */ fplace *place; struct toplink *next; struct button button; } toplink; typedef struct topic { char *subject; char *title; fplace *place; wordlist *text; char *chartext; toplink *subtopics; toplink *seealso; int xposition; int yposition; struct topic *parent; struct topic *children; struct topic *next; struct topic *winlink; struct topic *readlink; int numlines; int maxcols; int curtopline; #ifndef X_DISPLAY_MISSING Widget shellwidget, formwidget, titlewidget, buttonwidget, textwidget, seelabelwidget, sublabelwidget, seeboxwidget, subboxwidget; #endif } topic; typedef struct handle { topic *parent; toplink *result; } handle; #define REG_FONT "timrom12" #define BOLD_FONT "timrom12b" #define ITALIC_FONT "timrom12i" #define TITLE_FONT "accordb" #define BUTTON_FONT "6x10" #define X_INCR 20 #define Y_INCR 20 #define BORDER_WIDTH 3 #define INT_BORDER 10 #define BUTTON_XPAD 4 #define BUTTON_YPAD 2 #define START_XPOS 100 #define START_YPOS 100 /* If the MAX_LINES and SCROLL_INCR are different, it is very confusing... */ #define MIN_COLS 40 #define MAX_COLS 90 #define MAX_LINES 25 #define SCROLL_INCR 25 enum { BS_LEFT = 0, BS_CENTER, BS_UNIF, }; /* External symbols. */ /* help.c */ extern char *hlp_directory; extern void hlp_main(char *path, wordlist *wl); extern FILE *hlp_fopen(char *filename); extern fplace *findglobalsubject(char *subject); extern bool hlp_approvedfile(char *filename); extern void hlp_pathfix(char *buf); /* readhelp.c */ extern topic *hlp_read(fplace *place); extern void hlp_free(void); extern long findsubject(char *filename, char *subject); /* provide.c */ extern void hlp_provide(topic *top); extern bool hlp_usex; extern void hlp_fixchildren(topic *parent); extern void hlp_killfamily(topic *top); /* xdisplay.c */ extern char *hlp_regfontname; extern char *hlp_boldfontname; extern char *hlp_italicfontname; extern char *hlp_titlefontname; extern char *hlp_buttonfontname; extern int hlp_initxpos; extern int hlp_initypos; extern int hlp_buttonstyle; extern char *hlp_displayname; extern bool hlp_xdisplay(topic *top); extern void hlp_xclosedisplay(void); extern toplink *hlp_xhandle(topic **pp); extern void hlp_xkillwin(topic *top); extern void hlp_xwait(topic *top, bool on); /* textdisp.c */ extern bool hlp_tdisplay(topic *top); extern toplink *hlp_thandle(topic **parent); extern void hlp_tkillwin(topic *top); extern int hlp_width; tmpk8ny_4pz/src/include/ngspice/ChangeLog0000644000175000017500000001015313546075722020574 0ustar carstencarsten2003.4.10 Stuart Brorson * Added declaration for INPgetNetTok to inpdefs.h 2002-01-03 Paolo Nenzi * wstdio.h: Standard input/output for Windows (Holger Vogt patch). * complex.h: _complex redefined as _complex1 to avoid conflict with MINGW32 Paolo Nenzi * defines.h: added defines for Windows (Holger Vogt patch). * ngspice.h: added wstdio.h inclusion if compiling for Windows (Holger Vogt patch). 2001-12-14 Paolo Nenzi * cpextern.h: Modification needed for patches sent by Charles Williams. 2001-11-25 Emmanuel Rouat * ftedefs.h: added definition of structure circ (taken from circuits.h) 2000-09-09 Arno W. Peters * fteext.h: Removed prototype for com_fourier(). Use src/frontend/fourier.h for the proper prototype. 2000-07-18 Arno W. Peters * cpdefs.h: Moved quote() and strip() macro's to ... * wordlist.h: ... here. Also added ANSI C prototypes for all functions that manipulate wordlists. * defines.h: Removed CAPZEROBYPASS, NEWCONV and CAPBYPASS as they are no longer used in the code. 2000-05-22 Paolo Nenzi * inpptree.h: Applied Widlok patch (u2 function). 1999-11-30 Emmanuel Rouat * ngspice.h: substitutes spice.h 1999-09-08 Arno * distodef.h: added prototypes for derivative functions, retained only ANSI conforming prototypes. 1999-09-07 Arno * ifsim.h: changed the typedef for IFuid from GENERIC to char *. 1999-09-06 Arno Peters * fteext.h: changed parameters and return values for math functions from char * to void *. 1999-09-04 Emmanuel Rouat * Makefile.am (noinst_HEADERS): removed patchlev.h added ngspice.h 1999-09-03 Emmanuel Rouat * ngspice.h: added this generic header file (will eventually replace spice.h) 1999-08-28 Emmanuel Rouat * cpstd.h: now #includes spice.h instead of misc.h * spice.h: removed capabil.h from #includes #includes "hw_ieee.h" instead of "hw.h" (removes vms support) merged spice.h with misc.h and util.h * misc.h: suppressed code related to HAS_MEMAVL and HAS_BSDRAND 1999-08-26 Paolo Nenzi * spmatrix.h: added externs for spOriginalCount 1999-08-19 Paolo Nenzi * fteext.h: patched for spec command downloaded from: ftp://ftp.mpce.mq.edu.au/pub/elec/spice/patches. 1999-08-12 Emmanuel Rouat * hlpdefs.h: ansi-fied function declarations * complex.h (C_NORM): fixed a bug in C_NORM macros 1999-10-08 Paolo Nenzi * cktdefs.h: removed non STDC definitions and converted to ANSI prototypes the functions. Marked with ??? the circuit elements whose function is unknown. If you know their meaning, please write me an email describing it. Thank you. * complex.h: Removed HAS_SHORTMACRO definitions. Defined macros should be better documented. 1999-08-08 Emmanuel Rouat * spice.h: removed 'porth.h' from #includes - now everything shold be handled by autoconf 1999-08-07 Emmanuel Rouat * strext.h: changed HAS_STRINGS into STDC_HEADERS (reversed) 1999-08-06 Emmanuel Rouat * capabil.h: removed X10 defines * misc.h: removed test on HAS_VPERROR removed test on HAS_CLEARERR 1999-08-05 Emmanuel Rouat * util.h: * misc.h: changed HAS_STDLIB to STDC_HEADERS * spice.h: removed 'port.h' from includes 1999-08-04 Emmanuel Rouat * mfb.h: changed HAS_STAT into STAT_MACROS_BROKEN 04-08-1999 Paolo Nenzi * changed trcvdefs.h: now includes the TEMP code for the temperature sweep code supplied by Serban-Mihai Popescu. 29-07-1999 emmanuel.rouat@wanadoo.fr (Manu Rouat) * removed old config.h (used my ms-dos only) to avoid confusion with autoconf config.h tmpk8ny_4pz/src/include/ngspice/matldefs.h0000644000175000017500000000425713546075722021002 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors : 1991 David Gates **********/ /* Member of CIDER device simulator * Version: 1b1 */ #ifndef ngspice_MATLDEFS_H #define ngspice_MATLDEFS_H /* Data Structures and Definitions for Device Simulation Cards */ typedef struct sMATLcard { struct sMATLcard *MATLnextCard; int MATLnumber; int MATLmaterial; double MATLpermittivity; double MATLaffinity; double MATLnc0; double MATLnv0; double MATLeg0; double MATLdEgdT; double MATLtrefEg; double MATLdEgdN; double MATLnrefEg; double MATLdEgdP; double MATLprefEg; double MATLtaun0; double MATLtaup0; double MATLnrefSRHn; double MATLnrefSRHp; double MATLcnAug; double MATLcpAug; double MATLaRichN; double MATLaRichP; unsigned int MATLnumberGiven : 1; unsigned int MATLmaterialGiven : 1; unsigned int MATLpermittivityGiven : 1; unsigned int MATLaffinityGiven : 1; unsigned int MATLnc0Given : 1; unsigned int MATLnv0Given : 1; unsigned int MATLeg0Given : 1; unsigned int MATLdEgdTGiven : 1; unsigned int MATLtrefEgGiven : 1; unsigned int MATLdEgdNGiven : 1; unsigned int MATLnrefEgGiven : 1; unsigned int MATLdEgdPGiven : 1; unsigned int MATLprefEgGiven : 1; unsigned int MATLtaun0Given : 1; unsigned int MATLtaup0Given : 1; unsigned int MATLnrefSRHnGiven : 1; unsigned int MATLnrefSRHpGiven : 1; unsigned int MATLcnAugGiven : 1; unsigned int MATLcpAugGiven : 1; unsigned int MATLaRichNGiven : 1; unsigned int MATLaRichPGiven : 1; unsigned int MATLtnomGiven : 1; } MATLcard; /* MATL parameters */ enum { MATL_NC0 = 1, MATL_NV0, MATL_EG0, MATL_DEGDT, MATL_TREF_EG, MATL_DEGDN, MATL_NREF_EG, MATL_DEGDP, MATL_PREF_EG, MATL_AFFIN, MATL_PERMIT, MATL_TAUN0, MATL_TAUP0, MATL_NSRHN, MATL_NSRHP, MATL_CNAUG, MATL_CPAUG, MATL_ARICHN, MATL_ARICHP, MATL_INSULATOR, MATL_OXIDE, MATL_NITRIDE, MATL_SEMICON, MATL_SILICON, MATL_POLYSIL, MATL_GAAS, MATL_NUMBER, MATL_DEGDC, MATL_CREF_EG, }; #endif tmpk8ny_4pz/src/include/ngspice/profile.h0000644000175000017500000000300613546075722020632 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors: 1987 Karti Mayaram, 1991 David Gates **********/ /* Member of CIDER device simulator * Version: 1b1 */ /* * Doping Profile Data Structures */ #ifndef ngspice_PROFILE_H #define ngspice_PROFILE_H typedef struct sDOPprofile { int type; /* Primary profile type UNIF, EXP, etc */ int latType; /* Lateral profile type UNIF, EXP, etc */ int rotate; /* Is lat prof rotation of primary? */ int numDomains; /* Size of vector of domains to dope */ int *domains; /* Vector of domains to dope */ double param[10]; struct sDOPprofile *next; } DOPprofile; #define CONC param[1] #define PEAK_CONC param[1] #define IMPID param[1] #define X_LOW param[2] #define X_HIGH param[3] #define Y_LOW param[4] #define Y_HIGH param[5] #define RANGE param[6] #define LOCATION param[6] #define CHAR_LENGTH param[7] #define DIRECTION param[8] #define LAT_RATIO param[9] /* Structure for holding lookup tables of concentrations */ typedef struct sDOPtable { int impId; /* id of impurity */ double **dopData; /* Array of doping values */ struct sDOPtable *next; /* Pointer to next table in list */ } DOPtable; /* define impurity types */ #define IMP_BORON 1 #define IMP_PHOSPHORUS 2 #define IMP_ARSENIC 3 #define IMP_ANTIMONY 4 #define IMP_N_TYPE 5 #define IMP_P_TYPE 6 #endif tmpk8ny_4pz/src/include/ngspice/ftedbgra.h0000644000175000017500000000055213546075722020753 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Jeffrey M. Hsu **********/ /* External definitions for the graph database module. */ extern GRAPH *currentgraph; extern GRAPH *NewGraph(void); extern GRAPH *FindGraph(int id); extern GRAPH *CopyGraph(GRAPH *graph); extern void RemoveWindow(GRAPH*); tmpk8ny_4pz/src/include/ngspice/graph.h0000644000175000017500000000706013546075722020277 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jeffrey M. Hsu **********/ /* This file contains the graph structure. */ #ifndef ngspice_GRAPH_H #define ngspice_GRAPH_H #include "ngspice/typedefs.h" #include "ngspice/grid.h" #include "ngspice/plot.h" #include "ngspice/dvec.h" /* for struct dvec */ struct _keyed; #define GRAPH_UNITS_LENGTH 20 /* Device-independent data structure for plots. */ struct graph { int graphid; struct dveclist *plotdata; /* normalized data */ char *plotname; /* name of plot this graph is in */ int onevalue; /* boolean variable, true if plotting one value against itself (real vs imaginary) */ int degree; /* degree of polynomial interpretation */ int currentcolor; int linestyle; struct { int height, width; } viewport; int viewportxoff; /* x offset of viewport w/in graph */ int viewportyoff; /* y offset of viewport w/in graph */ struct { int xpos; /* x position of graph in screen coord */ int ypos; /* y position of graph in screen coord */ int width; /* width of window on screen */ int height; /* height of window on screen */ } absolute; struct { double xmin, ymin, xmax, ymax; } data; struct { double xmin, ymin, xmax, ymax; /* cache: width = xmax - xmin height = ymax - ymin */ double width, height; } datawindow; /* cache (datawindow size) / (viewport size) */ double aspectratiox, aspectratioy; int ticmarks; /* mark every ticmark'th point */ double *ticdata; int fontwidth, fontheight; /* for use in grid */ PLOTTYPE plottype; /* defined in FTEconstant.h */ struct { GRIDTYPE gridtype; /* defined in FTEconstant.h */ int circular; /* TRUE if circular plot area */ union { struct { char units[GRAPH_UNITS_LENGTH]; /* unit labels */ int spacing, numspace; double distance, lowlimit, highlimit; int mult; int onedec; /* a boolean */ int hacked; /* true if hi - lo already hacked up */ double tenpowmag; double tenpowmagx; int digits; } lin; struct { char units[GRAPH_UNITS_LENGTH]; /* unit labels */ int hmt, lmt, decsp, subs, pp; } log; struct { char units[GRAPH_UNITS_LENGTH]; /* unit labels */ int radius, center; double mrad; int lmt; int hmt, mag; /* added, p.w.h. */ } circular; /* bogus, rework when write polar grids, etc */ } xaxis, yaxis; int xdatatype, ydatatype; int xsized, ysized; double xdelta, ydelta; /* if non-zero, user-specified deltas */ char *xlabel, *ylabel; } grid; /* characters the user typed on graph */ /* note: think up better names */ struct _keyed *keyed; /* for zoomin */ char *commandline; /* Space here is allocated by NewViewport and de-allocated by DestroyGraph. */ void *devdep; }; /* characters the user typed on graph */ /* note: think up better names */ struct _keyed { char *text; int x, y; int colorindex; /* index into colors array */ struct _keyed *next; }; #define rnd(x) (int) ((x)+0.5) #endif tmpk8ny_4pz/src/include/ngspice/1-f-code.h0000644000175000017500000000471113546075722020471 0ustar carstencarsten#include "ngspice/randnumb.h" void f_alpha(int n_pts, int n_exp, double X[], double Q_d, double alpha); void rvfft(float X[], unsigned long int n); #define TRNOISE_STATE_MEM_LEN 4 struct trnoise_state { double points[TRNOISE_STATE_MEM_LEN]; size_t top; double NA, TS, NAMP, NALPHA, RTSAM, RTSCAPT, RTSEMT; double *oneof; size_t oneof_length; bool timezero; double RTScapTime, RTSemTime; bool RTS; }; struct trrandom_state { double value; int rndtype; double TS, TD, PARAM1, PARAM2; }; struct trnoise_state *trnoise_state_init(double NA, double TS, double NALPHA, double NAMP, double RTSAM, double RTSCAPT, double RTSEMT); struct trrandom_state *trrandom_state_init(int rndtype, double TS, double TD, double PARAM1, double PARAM2); void trnoise_state_gen(struct trnoise_state *this, CKTcircuit *ckt); void trnoise_state_free(struct trnoise_state *this); static inline void trnoise_state_push(struct trnoise_state *this, double val) { this->points[this->top++ % TRNOISE_STATE_MEM_LEN] = val; } static inline double trnoise_state_get(struct trnoise_state *this, CKTcircuit *ckt, size_t index) { while(index >= this->top) trnoise_state_gen(this, ckt); if(index + TRNOISE_STATE_MEM_LEN < this->top) { fprintf(stderr, "ouch, trying to fetch from the past %d %d\n", (int)index, (int)this->top); controlled_exit(1); } return this->points[index % TRNOISE_STATE_MEM_LEN]; } static inline double trrandom_state_get(struct trrandom_state *this) { double param1 = this->PARAM1; double param2 = this->PARAM2; switch (this->rndtype) { case 1: /* param1: range -param1[ ... +param1[ (default = 1) param2: offset (default = 0) */ return (param1 * drand() + param2); break; case 2: /* param1: standard deviation (default = 1) param2: mean (default = 0) */ return param1 * gauss0() + param2; break; case 3: /* param1: mean (default = 1) param2: offset (default = 0) */ return exprand(param1) + param2; break; case 4: /* param1: lambda (default = 1) param2: offset (default = 0) */ return (double)poisson(param1) + param2; break; default: return 0.0; break; } } tmpk8ny_4pz/src/include/ngspice/bdrydefs.h0000644000175000017500000000265713546075722021007 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors : 1991 David Gates **********/ /* Member of CIDER device simulator * Version: 1b1 */ #ifndef ngspice_BDRYDEFS_H #define ngspice_BDRYDEFS_H /* Data Structures and Definitions for Device Simulation Cards */ typedef struct sBDRYcard { struct sBDRYcard *BDRYnextCard; double BDRYxLow; double BDRYxHigh; double BDRYyLow; double BDRYyHigh; double BDRYqf; double BDRYsn; double BDRYsp; double BDRYlayer; int BDRYixLow; int BDRYixHigh; int BDRYiyLow; int BDRYiyHigh; int BDRYdomain; int BDRYneighbor; unsigned int BDRYxLowGiven : 1; unsigned int BDRYxHighGiven : 1; unsigned int BDRYyLowGiven : 1; unsigned int BDRYyHighGiven : 1; unsigned int BDRYqfGiven : 1; unsigned int BDRYsnGiven : 1; unsigned int BDRYspGiven : 1; unsigned int BDRYlayerGiven : 1; unsigned int BDRYixLowGiven : 1; unsigned int BDRYixHighGiven : 1; unsigned int BDRYiyLowGiven : 1; unsigned int BDRYiyHighGiven : 1; unsigned int BDRYdomainGiven : 1; unsigned int BDRYneighborGiven : 1; } BDRYcard; /* BDRY parameters */ enum { BDRY_X_LOW = 1, BDRY_X_HIGH, BDRY_Y_LOW, BDRY_Y_HIGH, BDRY_IX_LOW, BDRY_IX_HIGH, BDRY_IY_LOW, BDRY_IY_HIGH, BDRY_DOMAIN, BDRY_NEIGHBOR, BDRY_QF, BDRY_SN, BDRY_SP, BDRY_LAYER, }; #endif tmpk8ny_4pz/src/include/ngspice/mifcmdat.h0000644000175000017500000002613313546075722020764 0ustar carstencarsten#ifndef ngspice_MIFCMDAT_H #define ngspice_MIFCMDAT_H /* =========================================================================== FILE MIFcmdat.h MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the data structure definitions used by code model and the associated MIF package. A special preprocessor (cmpp) is used on models written by a user to turn items like INPUT() into the appropriate structure reference. INTERFACES None. REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ #include "ngspice/typedefs.h" #include "ngspice/miftypes.h" /* ************************************************************************** */ /* * Pointers into matrix for a voltage input, voltage output partial */ typedef struct Mif_E_Ptr_s { double *branch_poscntl; /* Branch row, positive controlling column */ double *branch_negcntl; /* Branch row, negative controlling column */ } Mif_E_Ptr_t; /* * Pointers into matrix for a current input, current output partial */ typedef struct Mif_F_Ptr_s { double *pos_ibranchcntl; /* Positive row, controlling branch column */ double *neg_ibranchcntl; /* Negative row, controlling branch column */ } Mif_F_Ptr_t; /* * Pointers into matrix for a voltage input, current output partial */ typedef struct Mif_G_Ptr_s { double *pos_poscntl; /* Positive row, positive controlling column */ double *pos_negcntl; /* Positive row, negative controlling column */ double *neg_poscntl; /* Negative row, positive controlling column */ double *neg_negcntl; /* Negative row, negative controlling column */ } Mif_G_Ptr_t; /* * Pointers into matrix for a current input, voltage output partial */ typedef struct Mif_H_Ptr_s { double *branch_ibranchcntl; /* Branch row, controlling branch column */ } Mif_H_Ptr_t; /* * Matrix pointers associated with a particular port (of a particular type) */ typedef union Mif_Port_Ptr_u { Mif_E_Ptr_t e; /* Pointers for voltage input, voltage output */ Mif_F_Ptr_t f; /* Pointers for current input, current output */ Mif_G_Ptr_t g; /* Pointers for voltage input, current output */ Mif_H_Ptr_t h; /* Pointers for current input, voltage output */ } Mif_Port_Ptr_t; /* * Array of matrix data pointers for particular ports in a connection */ typedef struct Mif_Conn_Ptr_s { Mif_Port_Ptr_t *port; /* Data for a particular port */ } Mif_Conn_Ptr_t; /* * Row numbers and matrix entry pointers for loading the matrix and RHS with * data appropriate for the particular output port and input ports. */ typedef struct Mif_Smp_Ptr_s { /* Data at this level is for this connection. The Mif_Conn_Ptr_t */ /* subtree is used only if this connection is an output. It supplies */ /* the matrix pointers required for loading the partials from each */ /* input. */ /* node connection equation numbers */ int pos_node; /* Row associated with positive node */ int neg_node; /* Row associated with negative node */ /* V source branch equation numbers */ int branch; /* Row associated with V output branch */ int ibranch; /* Row associated with I input branch */ /* matrix pointers for V source output */ double *pos_branch; /* Positive node row, branch column */ double *neg_branch; /* Negative node row, branch column */ double *branch_pos; /* Branch row, positive node column */ double *branch_neg; /* Branch row, negative node column */ /* matrix pointers for the zero-valued V source associated with an I input */ double *pos_ibranch; /* Positive node row, branch column */ double *neg_ibranch; /* Negative node row, branch column */ double *ibranch_pos; /* Branch row, positive node column */ double *ibranch_neg; /* Branch row, negative node column */ /* array of pointer info required for putting partials into the matrix */ Mif_Conn_Ptr_t *input; /* Matrix pointers associated with inputs */ } Mif_Smp_Ptr_t; /* ******************************************************************** */ /* * Partial derivatives wrt ports of a particular input connection */ typedef struct Mif_Partial_s { double *port; /* Partial wrt this port */ } Mif_Partial_t; /* * AC gains wrt ports of a particular input connection */ typedef struct Mif_AC_Gain_s { Mif_Complex_t *port; /* AC gain wrt this port */ } Mif_AC_Gain_t; /* * Data used to access information in event struct in CKTcircuit struct ckt */ typedef struct { int node_index; /* Index of node in event-driven structures */ int output_subindex; /* Subindex of output on node */ int port_index; /* Index of port in event-driven structures */ int output_index; /* Index of output in event-driven structures */ } Mif_Evt_Data_t; /* * Information about individual port(s) of a connection. */ typedef struct Mif_Port_Data_s { Mif_Port_Type_t type; /* Port type - e.g. MIF_VOLTAGE, ... */ char *type_str; /* Port type in string form */ char *pos_node_str; /* Positive node identifier */ char *neg_node_str; /* Negative node identifier */ char *vsource_str; /* Voltage source identifier */ Mif_Boolean_t is_null; /* Set to true if null in SPICE deck */ Mif_Value_t input; /* The input value */ Mif_Value_t output; /* The output value */ Mif_Partial_t *partial; /* Partials for this port wrt inputs */ Mif_AC_Gain_t *ac_gain; /* AC gains for this port wrt inputs */ int old_input; /* Index into CKTstate for old input */ Mif_Boolean_t invert; /* True if state should be inverted */ Mif_Boolean_t changed; /* A new output has been assigned */ double load; /* Load factor output to this port */ double total_load; /* Total load for this port */ double delay; /* Digital delay for this output port */ char *msg; /* Message string output to port */ Mif_Smp_Ptr_t smp_data; /* Pointers used to load matrix/rhs */ Mif_Evt_Data_t evt_data; /* Data used to access evt struct */ double nominal_output; /* Saved output when doing auto partial */ } Mif_Port_Data_t; /* ******************************************************************** */ /* * Information in MIFinstance struct used by cm_.. support functions. */ typedef struct Mif_State_s { /* for cm_analog_alloc() */ int tag; /* Tag identifying this particular state */ int index; /* Index into ckt->CKTstate[i] vector */ int doubles; /* Number of doubles allocated for this state */ int bytes; /* Actual number of bytes requested by cm_analog_alloc() */ } Mif_State_t; typedef struct Mif_Intgr_s { /* for cm_analog_integrate() */ int byte_index; /* Byte offset into state array */ } Mif_Intgr_t; typedef struct Mif_Conv_s { /* for cm_analog_converge() */ int byte_index; /* Byte offset into state array */ double last_value; /* Value at last iteration */ } Mif_Conv_t; /* ******************************************************************** */ /* * Information about the circuit in which this model is simulating. */ typedef struct Mif_Circ_Data_s { Mif_Boolean_t init; /* True if first call to model - a setup pass */ Mif_Analysis_t anal_type; /* Current analysis type */ Mif_Boolean_t anal_init; /* True if first call in this analysis type */ Mif_Call_Type_t call_type; /* Analog or event type call */ double time; /* Current analysis time */ double frequency; /* Current analysis frequency */ double temperature; /* Current analysis temperature */ double t[8]; /* History of last 8 analysis times t[0]=time */ } Mif_Circ_Data_t; /* * The structure associated with a named "connection" on the model. */ typedef struct Mif_Conn_Data_s { char *name; /* Name of this connection - currently unused */ char *description; /* Description of this connection - unused */ Mif_Boolean_t is_null; /* Set to true if null in SPICE deck */ Mif_Boolean_t is_input; /* Set to true if connection is an input */ Mif_Boolean_t is_output; /* Set to true if connection is an output */ int size; /* The size of an array (1 if scalar) */ Mif_Port_Data_t **port; /* Pointer(s) to port(s) for this connection */ } Mif_Conn_Data_t; /* * Values for model parameters */ typedef struct Mif_Param_Data_s { Mif_Boolean_t is_null; /* True if no value given on .model card */ int size; /* Size of array (1 if scalar) */ Mif_Value_t *element; /* Value of parameter(s) */ int eltype; /* type of the element */ } Mif_Param_Data_t; /* * Values for instance variables */ typedef struct Mif_Inst_Var_Data_s { int size; /* Size of array (1 if scalar) */ Mif_Value_t *element; /* Value of instance variables(s) */ } Mif_Inst_Var_Data_t; /* ************************************************************************* */ /* * HERE IT IS!!! * The top level data structure passed to code models. */ struct Mif_Private { Mif_Circ_Data_t circuit; /* Information about the circuit */ int num_conn; /* Number of connections on this model */ Mif_Conn_Data_t **conn; /* Information about each connection */ int num_param; /* Number of parameters on this model */ Mif_Param_Data_t **param; /* Information about each parameter */ int num_inst_var; /* Number of instance variables */ Mif_Inst_Var_Data_t **inst_var; /* Information about each inst variable */ Mif_Callback_t *callback; /* Callback function */ }; #endif tmpk8ny_4pz/src/include/ngspice/trandefs.h0000644000175000017500000000123213546075722020777 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #ifndef ngspice_TRANDEFS_H #define ngspice_TRANDEFS_H #include "ngspice/cktdefs.h" #include "ngspice/jobdefs.h" #include "ngspice/tskdefs.h" /* * TRANdefs.h - defs for transient analyses */ typedef struct { int JOBtype; JOB *JOBnextJob; char *JOBname; double TRANfinalTime; double TRANstep; double TRANmaxStep; double TRANinitTime; long TRANmode; runDesc *TRANplot; } TRANan; enum { TRAN_TSTART = 1, TRAN_TSTOP, TRAN_TSTEP, TRAN_TMAX, TRAN_UIC, }; #endif tmpk8ny_4pz/src/include/ngspice/numenum.h0000644000175000017500000000366113546075722020665 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors: 1991 David Gates **********/ /* * Enumerations used by the numerical simulation routines */ /* Member of CIDER device simulator * Version: 1b1 */ #ifndef ngspice_NUMENUM_H #define ngspice_NUMENUM_H /* Doping Profiles */ #define UNIF 101 #define LIN 102 #define GAUSS 103 #define EXP 104 #define ERRFC 105 #define LOOKUP 106 #define X 107 #define Y 108 /* AC-Analysis Method */ #define SOR 201 #define DIRECT 202 #define SOR_ONLY 203 /* One-Carrier-Simulation Types */ #define N_TYPE 301 #define P_TYPE 302 /* Element, Node, and Edge Types */ #define SEMICON 401 #define INSULATOR 402 #define METAL 403 #define INTERFACE 404 #define CONTACT 405 #define SCHOTTKY 406 #define HETERO 407 /* Material Types */ #define OXIDE 1 #define NITRIDE 2 #define SILICON 3 #define POLYSILICON 4 #define GAAS 5 /* Time-Integration Method */ #ifndef TRAPEZOIDAL #define TRAPEZOIDAL 1 #define BDF 2 #define GEAR 2 #endif /* Mobility Models */ #define SG 1 /* Scharfetter-Gummel Model */ #define CT 2 /* Caughey-Thomas Model */ #define AR 3 /* Arora Model */ #define UF 4 /* Univ. of Florida Model */ #define GA 5 /* Gallium-Arsenide Model */ #define TD 6 /* Temperature Dependent */ #define CCS 7 /* Carrier-Carrier Scattering */ /* Carrier Classification */ #define NUM_CARRIERS 2 #define ELEC 0 #define HOLE 1 #define NUM_CARRTYPES 2 #define MAJOR 0 #define MINOR 1 /* Solvers */ #define SLV_NONE 0 #define SLV_EQUIL 1 #define SLV_BIAS 2 #define SLV_SMSIG 3 /* Output Data Formats */ #define RAWFILE 0 #define HDF 1 /* Time and Memory Statistics Types */ #define NUM_STATTYPES 4 #define STAT_SETUP 0 #define STAT_DC 1 #define STAT_TRAN 2 #define STAT_AC 3 #endif tmpk8ny_4pz/src/include/ngspice/devdefs.h0000644000175000017500000002077413546075722020625 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #ifndef ngspice_DEVDEFS_H #define ngspice_DEVDEFS_H #include "ngspice/optdefs.h" #include "ngspice/gendefs.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/noisedef.h" #include "ngspice/complex.h" double DEVlimvds(double,double); double DEVpnjlim(double,double,double,double,int*); double DEVfetlim(double,double,double); void DEVcmeyer(double,double,double,double,double,double,double,double,double, double,double,double*,double*,double*,double,double,double,double); void DEVqmeyer(double,double,double,double,double,double*,double*,double*, double,double); void DevCapVDMOS(double, double, double, double, double, double*, double*, double*); double DEVpred(CKTcircuit*,int); /* Cider integration */ double limitResistorVoltage( double, double, int * ); double limitJunctionVoltage( double, double, int * ); double limitVbe( double, double, int * ); double limitVce( double, double, int * ); double limitVgb( double, double, int * ); /* Area Calculation Method (ACM) for MOS models (devsup.c) */ int ACM_SourceDrainResistances(int, double, double, double, double, double, double, double, int, double, double, double, int, double, double, double, double *, double *); int ACM_saturationCurrents(int, int, int, double, double, double, double, double, double, int, double, int, double, int, double, int, double, double *, double *); int ACM_junctionCapacitances(int, int, int, double, double, double, double, int, double, int, double, int, double, int, double, double, double, double, double *, double *, double *, double *, double *, double *); typedef struct SPICEdev { IFdevice DEVpublic; int (*DEVparam)(int,IFvalue*,GENinstance*,IFvalue *); /* routine to input a parameter to a device instance */ int (*DEVmodParam)(int,IFvalue*,GENmodel*); /* routine to input a paramater to a model */ int (*DEVload)(GENmodel*,CKTcircuit*); /* routine to load the device into the matrix */ int (*DEVsetup)(SMPmatrix*,GENmodel*,CKTcircuit*,int*); /* setup routine to preprocess devices once before soloution begins */ int (*DEVunsetup)(GENmodel*,CKTcircuit*); /* clean up before running again */ int (*DEVpzSetup)(SMPmatrix*,GENmodel*,CKTcircuit*,int*); /* setup routine to process devices specially for pz analysis */ int (*DEVtemperature)(GENmodel*,CKTcircuit*); /* subroutine to do temperature dependent setup processing */ int (*DEVtrunc)(GENmodel*,CKTcircuit*,double*); /* subroutine to perform truncation error calc. */ int (*DEVfindBranch)(CKTcircuit*,GENmodel*,IFuid); /* subroutine to search for device branch eq.s */ int (*DEVacLoad)(GENmodel*,CKTcircuit*); /* ac analysis loading function */ int (*DEVaccept)(CKTcircuit*,GENmodel*); /* subroutine to call on acceptance of a timepoint */ void (*DEVdestroy)(void); /* subroutine to delete device specfic extra data */ int (*DEVmodDelete)(GENmodel*); /* subroutine to delete a model */ int (*DEVdelete)(GENinstance*); /* subroutine to delete an instance */ int (*DEVsetic)(GENmodel*,CKTcircuit*); /* routine to pick up device init conds from rhs */ int (*DEVask)(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*); /* routine to ask about device details*/ int (*DEVmodAsk)(CKTcircuit*,GENmodel*,int,IFvalue*); /* routine to ask about model details*/ int (*DEVpzLoad)(GENmodel*,CKTcircuit*,SPcomplex*); /* routine to load for pole-zero analysis */ int (*DEVconvTest)(GENmodel*,CKTcircuit*); /* convergence test function */ int (*DEVsenSetup)(SENstruct*,GENmodel*); /* routine to setup the device sensitivity info */ int (*DEVsenLoad)(GENmodel*,CKTcircuit*); /* routine to load the device sensitivity info */ int (*DEVsenUpdate)(GENmodel*,CKTcircuit*); /* routine to update the device sensitivity info */ int (*DEVsenAcLoad)(GENmodel*,CKTcircuit*); /* routine to load the device ac sensitivity info */ void (*DEVsenPrint)(GENmodel*,CKTcircuit*); /* subroutine to print out sensitivity info */ int (*DEVsenTrunc)(GENmodel*,CKTcircuit*,double*); /* subroutine to print out sensitivity info */ int (*DEVdisto)(int,GENmodel*,CKTcircuit*); /* procedure to do distortion operations */ int (*DEVnoise)(int, int, GENmodel*,CKTcircuit*, Ndata *, double *); /* noise routine */ int (*DEVsoaCheck)(CKTcircuit*,GENmodel*); /* subroutine to call on soa check */ #ifdef CIDER void (*DEVdump)(GENmodel *, CKTcircuit *); void (*DEVacct)(GENmodel *, CKTcircuit *, FILE *); /* routines to report device internals * now used only by cider numerical devices */ #endif int *DEVinstSize; /* size of an instance */ int *DEVmodSize; /* size of a model */ } SPICEdev; /* instance of structure for each possible type of device */ extern SPICEdev **DEVices; extern int DEVmaxnum; /* size of DEVices array */ /* IOP( ) Input/output parameter * IOPP( ) IO parameter which the principle value of a device (used * for naming output variables in sensetivity) * IOPA( ) IO parameter significant for time-varying (non-dc) analyses * IOPAP( ) Principle value is significant for time-varying analyses * IOPAA( ) IO parameter significant for ac analyses only * IOPAAP( ) IO parameter principle value for ac analyses only * IOPN( ) IO parameter significant for noise analyses only * IOPR( ) Redundant IO parameter name (e.g. "vto" vs. "vt0") * IOPX( ) IO parameter which is not used by sensetivity in any case * * IOPQ( ) This (Q) parameter must be non-zero for sensetivity of * following Z parameter (model params done first) * IOPZ( ) Prev. 'Q' parameter must be non-zero for sensetivity * IOPQO( ) Like Q, but or-ed with previous Q value * ....U( ) uninteresting for default "show" command output */ # define IOP(a,b,c,d) { a, b, c|IF_SET|IF_ASK, d } # define IOPU(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_UNINTERESTING, d } # define IOPUR(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_UNINTERESTING|IF_REDUNDANT, d } # define IOPP(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_PRINCIPAL, d } # define IOPPR(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_PRINCIPAL|IF_REDUNDANT, d } # define IOPA(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_AC, d } # define IOPAR(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_AC|IF_REDUNDANT, d } # define IOPAU(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_AC|IF_UNINTERESTING,d } # define IOPAP(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_AC|IF_PRINCIPAL, d } # define IOPAPR(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_AC|IF_PRINCIPAL|IF_REDUNDANT, d } # define IOPAA(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_AC_ONLY, d } # define IOPAAU(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_AC_ONLY|IF_UNINTERESTING,d} # define IOPPA(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_AC_ONLY|IF_PRINCIPAL, d } # define IOPN(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_NOISE, d } # define IOPR(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_REDUNDANT, NULL } # define IOPX(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_NONSENSE, d } # define IOPXR(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_NONSENSE|IF_REDUNDANT, d } # define IOPXU(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_NONSENSE|IF_UNINTERESTING,\ d } # define IOPQ(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_SETQUERY, d } # define IOPQR(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_SETQUERY|IF_REDUNDANT, d } # define IOPQU(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_SETQUERY|IF_UNINTERESTING,\ d } # define IOPZ(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_CHKQUERY, d } # define IOPZR(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_CHKQUERY|IF_REDUNDANT, d } # define IOPZU(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_CHKQUERY|IF_UNINTERESTING,\ d } # define IOPQO(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_ORQUERY, d } # define IOPQOR(a,b,c,d) { a, b, c|IF_SET|IF_ASK|IF_ORQUERY|IF_REDUNDANT, d } # define IP(a,b,c,d) { a , b , c|IF_SET , d } # define IPR(a,b,c,d) { a , b , c|IF_SET|IF_REDUNDANT , d } # define OP(a,b,c,d) { a , b , c|IF_ASK , d } # define OPU(a,b,c,d) { a , b , c|IF_ASK|IF_UNINTERESTING , d } # define OPUR(a,b,c,d) { a , b , c|IF_ASK|IF_UNINTERESTING|IF_REDUNDANT , d } # define OPR(a,b,c,d) { a , b , c|IF_ASK|IF_REDUNDANT , d } # define P(a,b,c,d) { a , b , c , d } #define DEV_DEFAULT 0x1 #endif tmpk8ny_4pz/src/include/ngspice/pssdefs.h0000644000175000017500000000133513546075722020644 0ustar carstencarsten/********** Author: 2010-05 Stefano Perticaroli ``spertica'' Review: 2012-10 Francesco Lannutti **********/ #ifndef ngspice_PSSDEFS_H #define ngspice_PSSDEFS_H #include "ngspice/jobdefs.h" #include "ngspice/tskdefs.h" /* * PSSdefs.h - defs for pss analyses */ typedef struct { int JOBtype; JOB *JOBnextJob; char *JOBname; double PSSguessedFreq; CKTnode *PSSoscNode; double PSSstabTime; long PSSmode; long int PSSpoints; int PSSharms; runDesc *PSSplot_td; runDesc *PSSplot_fd; int sc_iter; double steady_coeff; } PSSan; enum { GUESSED_FREQ = 1, STAB_TIME, OSC_NODE, PSS_POINTS, PSS_HARMS, PSS_UIC, SC_ITER, STEADY_COEFF, }; #endif tmpk8ny_4pz/src/include/ngspice/distodef.h0000644000175000017500000001460513546075722021002 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury Modified: 2000 AlansFixes **********/ #ifndef ngspice_DISTODEF_H #define ngspice_DISTODEF_H #ifdef D_DBG_ALLTIMES #define D_DBG_BLOCKTIMES #define D_DBG_SMALLTIMES #endif #include "ngspice/jobdefs.h" #include "ngspice/gendefs.h" #include "ngspice/cktdefs.h" /* structure for passing a large number of values */ typedef struct { double cxx; double cyy; double czz; double cxy; double cyz; double cxz; double cxxx; double cyyy; double czzz; double cxxy; double cxxz; double cxyy; double cyyz; double cxzz; double cyzz; double cxyz; double r1h1x; double i1h1x; double r1h1y; double i1h1y; double r1h1z; double i1h1z; double r1h2x; double i1h2x; double r1h2y; double i1h2y; double r1h2z; double i1h2z; double r2h11x; double i2h11x; double r2h11y; double i2h11y; double r2h11z; double i2h11z; double h2f1f2x; double ih2f1f2x; double h2f1f2y; double ih2f1f2y; double h2f1f2z; double ih2f1f2z; } DpassStr; /* structure to keep derivatives of upto 3rd order w.r.t 3 variables */ typedef struct { double value; double d1_p; double d1_q; double d1_r; double d2_p2; double d2_q2; double d2_r2; double d2_pq; double d2_qr; double d2_pr; double d3_p3; double d3_q3; double d3_r3; double d3_p2q; double d3_p2r; double d3_pq2; double d3_q2r; double d3_pr2; double d3_qr2; double d3_pqr; } Dderivs; /* structure used to describe an DISTO analysis to be performed */ typedef struct { int JOBtype; JOB *JOBnextJob; /* pointer to next thing to do */ char *JOBname; /* name of this job */ double DstartF1; /* the start value of the higher frequency for distortion analysis */ double DstopF1; /* the stop value ove above */ double DfreqDelta; /* multiplier for decade/octave stepping, step for linear steps. */ double DsaveF1; /* frequency at which we left off last time*/ int DstepType; /* values described below */ int DnumSteps; int Df2wanted; /* set if f2overf1 is given in the disto command line */ int Df2given; /* set if at least 1 source has an f2 input */ double Df2ovrF1; /* ratio of f2 over f1 if 2 frequencies given should be < 1 */ double Domega1; /* current omega1 */ double Domega2; /* current omega2 */ double* r1H1ptr; double* i1H1ptr; double* r2H11ptr; double* i2H11ptr; double* r3H11ptr; double* i3H11ptr; double* r1H2ptr; /* distortion analysis Volterra transforms */ double* i1H2ptr; double* r2H12ptr; double* i2H12ptr; double* r2H1m2ptr; double* i2H1m2ptr; double* r3H1m2ptr; double* i3H1m2ptr; double** r1H1stor; double** i1H1stor; double** r2H11stor; double** i2H11stor; double** r3H11stor; double** i3H11stor; /*these store computed values*/ double** r1H2stor; /* for the plots */ double** i1H2stor; double** r2H12stor; double** i2H12stor; double** r2H1m2stor; double** i2H1m2stor; double** r3H1m2stor; double** i3H1m2stor; } DISTOAN; /* available step types: */ #define DECADE 1 #define OCTAVE 2 #define LINEAR 3 /* defns. used in DsetParm */ #define D_DEC 1 #define D_OCT 2 #define D_LIN 3 #define D_START 4 #define D_STOP 5 #define D_STEPS 6 #define D_F2OVRF1 7 /* defns. used by CKTdisto for calling different functions */ #define D_SETUP 1 #define D_F1 2 #define D_F2 3 #define D_TWOF1 4 #define D_THRF1 5 #define D_F1PF2 6 #define D_F1MF2 7 #define D_2F1MF2 8 #define D_RHSF1 9 #define D_RHSF2 10 extern int DsetParm(CKTcircuit*,JOB *,int,IFvalue*); extern int DaskQuest(CKTcircuit*,JOB *,int,IFvalue*); extern double D1i2F1(double, double, double); extern double D1i3F1(double, double, double, double, double, double); extern double D1iF12(double, double, double, double, double); extern double D1i2F12(double, double, double, double, double, double, double, double, double, double); extern double D1n2F1(double, double, double); extern double D1n3F1(double, double, double, double, double, double); extern double D1nF12(double, double, double, double, double); extern double D1n2F12(double, double, double, double, double, double, double, double, double, double); extern double DFn2F1(double, double, double, double, double, double, double, double, double, double, double, double); extern double DFi2F1(double, double, double, double, double, double, double, double, double, double, double, double); extern double DFi3F1(double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double); extern double DFn3F1(double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double); extern double DFnF12(double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double); extern double DFiF12(double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double); extern double DFn2F12(DpassStr*); extern double DFi2F12(DpassStr*); extern void EqualDeriv(Dderivs *, Dderivs *); extern void TimesDeriv(Dderivs *, Dderivs *, double); extern void InvDeriv(Dderivs *, Dderivs *); extern void MultDeriv(Dderivs *, Dderivs *, Dderivs *); extern void CubeDeriv(Dderivs *, Dderivs *); extern void PlusDeriv(Dderivs *, Dderivs *, Dderivs *); extern void SqrtDeriv(Dderivs *, Dderivs *); extern void DivDeriv(Dderivs *, Dderivs *, Dderivs *); extern void PowDeriv(Dderivs *, Dderivs *, double); extern void AtanDeriv(Dderivs *, Dderivs *); extern void CosDeriv(Dderivs *, Dderivs *); extern void TanDeriv(Dderivs *, Dderivs *); extern void ExpDeriv(Dderivs *, Dderivs *); extern int CKTdisto(CKTcircuit *ckt, int mode); extern int DkerProc(int type, double *rPtr, double *iPtr, int size, DISTOAN *job); #endif tmpk8ny_4pz/src/include/ngspice/inpptree.h0000644000175000017500000001141513546075722021023 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * faustus@cad.berkeley.edu, ucbvax!faustus * * These definitions specify the format of the parse tree parameter type. * The first four are the elements of IFparseTree, defined in IFsim.h. */ #include "ngspice/ifsim.h" #ifndef ngspice_INPPTREE_H #define ngspice_INPPTREE_H /* This is the parameter value passed to the device routines. To get the * value of the function, where tree is a pointer to the INPparseTree, * result is a pointer to where you want the result, derivs is a pointer to * an vector of numVars doubles, and vals is a pointer to the selected * elements from the RHS, do * tree->p.IFeval(&tree, result, vals, derivs) * This routine will return either OK, E_PARMVAL, or E_PANIC. If an error * is reported the eval function will have printed something to standard * out before returning. */ typedef struct INPparseTree { IFparseTree p; struct INPparseNode *tree; /* The real stuff. */ struct INPparseNode **derivs; /* The derivative parse trees. */ } INPparseTree; /* This is what is passed as the actual parameter value. The fields will all * be filled in as needed. * * Values with names like v(something) and i(something) are treated specially. * They are considered voltages at nodes and branch currents through * voltage sources, respectively. The corresponding parameters will be of * type IF_NODE and IF_INSTANCE, respectively. */ typedef struct INPparseNode { int type; /* One of PT_*, below. */ struct INPparseNode *left; /* Left operand, or single operand. */ struct INPparseNode *right; /* Right operand, if there is one. */ double constant; /* If INP_CONSTANT. */ int valueIndex; /* If INP_VAR, index into vars array. */ char *funcname; /* If INP_FUNCTION, name of function, */ int funcnum; /* ... one of PTF_*, */ void (*function)(void); /* ... and pointer to the function. */ void *data; /* private data for certain functions, currently PTF_PWL */ int usecnt; } INPparseNode; /* A debugging function */ void INPptPrint(char *str, IFparseTree * ptree); /* FIXME, less public * and replace with static inline functions for better type check */ #define PTunary(node_ptr) \ ((double(*)(double)) (node_ptr)) #define PTbinary(node_ptr) \ ((double(*)(double, double)) (node_ptr)) #define PTunary_with_private(node_ptr) \ ((double(*)(double, void*)) (node_ptr)) /* These are the possible types of nodes we can have in the parse tree. The * numbers for the ops 1 - 5 have to be the same as the token numbers, * below. */ #define PT_PLACEHOLDER 0 /* For i(something) ... */ #define PT_PLUS 1 #define PT_MINUS 2 #define PT_TIMES 3 #define PT_DIVIDE 4 #define PT_POWER 5 #define PT_FUNCTION 6 #define PT_CONSTANT 7 #define PT_VAR 8 #define PT_COMMA 10 #define PT_TERN 11 #define PT_TIME 12 #define PT_TEMPERATURE 13 #define PT_FREQUENCY 14 /* These are the functions that we support. */ #define PTF_ACOS 0 #define PTF_ACOSH 1 #define PTF_ASIN 2 #define PTF_ASINH 3 #define PTF_ATAN 4 #define PTF_ATANH 5 #define PTF_COS 6 #define PTF_COSH 7 #define PTF_EXP 8 #define PTF_LOG 9 #define PTF_LOG10 10 #define PTF_SIN 11 #define PTF_SINH 12 #define PTF_SQRT 13 #define PTF_TAN 14 #define PTF_TANH 15 #define PTF_UMINUS 16 #define PTF_ABS 17 #define PTF_SGN 18 #define PTF_USTEP 19 #define PTF_URAMP 20 /* MW. PTF_CIF - next function */ #define PTF_USTEP2 21 #define PTF_PWL 22 #define PTF_PWL_DERIVATIVE 23 #define PTF_EQ0 24 #define PTF_NE0 25 #define PTF_GT0 26 #define PTF_LT0 27 #define PTF_GE0 28 #define PTF_LE0 29 #define PTF_POW 30 #define PTF_PWR 31 #define PTF_MIN 32 #define PTF_MAX 33 #define PTF_CEIL 34 #define PTF_FLOOR 35 #define PTF_NINT 36 /* The following things are used by the parser -- these are the token types the * lexer returns. */ #define TOK_END 0 #define TOK_PLUS 1 #define TOK_MINUS 2 #define TOK_TIMES 3 #define TOK_DIVIDE 4 #define TOK_POWER 5 #define TOK_UMINUS 6 #define TOK_LPAREN 7 #define TOK_RPAREN 8 #define TOK_VALUE 9 #define TOK_COMMA 10 /* And the types for value tokens... */ #define TYP_NUM 0 #define TYP_STRING 1 #define TYP_PNODE 2 /* A parser stack element. */ typedef struct PTelement { int token; int type; union { char *string; double real; INPparseNode *pnode; } value; } PTelement ; #define PT_STACKSIZE 200 /* And in IFeval.c */ extern int IFeval(IFparseTree *tree, double gmin, double *result, double *vals, double *derivs); #endif tmpk8ny_4pz/src/include/ngspice/defines.h0000644000175000017500000000520713546075722020614 0ustar carstencarsten/************* * Definitions header file * 1999 E. Rouat ************/ /* * This file will contain all #defines needed * by ngspice code (in construction) * It should only #define numeric constants, not macros. */ #ifndef ngspice_DEFINES_H #define ngspice_DEFINES_H /* * Physical constants (const.h) */ /* For definitions of CHARGE, CONSTCtoK CONSTboltz, CONSTepsZero, * CONSTepsSi02, CONSTmuZero, REFTEMP */ #include "ngspice/const.h" #ifndef M_PI #define M_PI CONSTpi #endif #ifndef M_E #define M_E CONSTnap #endif #ifndef M_LOG2E #define M_LOG2E CONSTlog2e #endif #ifndef M_LOG10E #define M_LOG10E CONSTlog10e #endif /* * IEEE Floating point */ #define MAX_EXP_ARG 709.0 #ifndef DBL_EPSILON # define DBL_EPSILON 2.2204460492503131e-16 #endif #ifndef DBL_MAX # define DBL_MAX 1.79769313486231e+308 #endif #ifndef DBL_MIN # define DBL_MIN 2.22507385850721e-308 #endif #ifndef SHRT_MAX # define SHRT_MAX 32766 #endif #ifndef INT_MAX # define INT_MAX 2147483646 #endif #ifndef LONG_MAX # define LONG_MAX 2147483646 #endif #define MAXPOSINT INT_MAX /* Standard initialisation file name */ #define INITSTR ".spiceinit" /* Alternate initialisation file name */ #define ALT_INITSTR "spice.rc" #if defined(__MINGW32__) || defined(_MSC_VER) || defined (HAS_WINGUI) #define DIR_PATHSEP "\\" #define DIR_TERM '\\' #define DIR_PATHSEP_LINUX "/" #define DIR_TERM_LINUX '/' #define DIR_CWD "." #define TEMPFORMAT "%s%d.tmp" /* #define SYSTEM_PLOT5LPR "lpr -P%s -g %s" #define SYSTEM_PSLPR "lpr -P%s %s" #define SYSTEM_MAIL "Mail -s \"%s (%s) Bug Report\" %s" */ #else #define DIR_PATHSEP "/" #define DIR_TERM '/' #define DIR_CWD "." #define TEMPFORMAT "/tmp/%s%d" #define SYSTEM_PLOT5LPR "lpr -P%s -g %s" #define SYSTEM_PSLPR "lpr -P%s %s" #define SYSTEM_MAIL "Mail -s \"%s (%s) Bug Report\" %s" #endif /* * #define-s that are always on */ /* On Unix the following should always be true, so they should jump out */ #define HAS_ASCII #define HAS_TTY_ #define HAS_TIME_H #define HAS_RLIMIT_ #ifndef SIGNAL_FUNCTION # ifdef HAVE_SIGHANDLER_T # define SIGNAL_FUNCTION sighandler_t # elif HAVE_SIG_T # define SIGNAL_FUNCTION sig_t # elif HAVE___SIGHANDLER_T # define SIGNAL_FUNCTION __sighandler_t # else # define SIGNAL_FUNCTION RETSIGTYPE (*)(int) # endif #endif #define BSIZE_SP 512 #define EXIT_NORMAL 0 #define EXIT_BAD 1 #define EXIT_INFO 2 #define TRUE 1 #define FALSE 0 /* #define DIR_PATHSEP "/" #define DIR_TERM '/' #define DIR_CWD "." #define TEMPFORMAT "/tmp/%s%d" #define SYSTEM_PLOT5LPR "lpr -P%s -g %s" #define SYSTEM_PSLPR "lpr -P%s %s" #define SYSTEM_MAIL "Mail -s \"%s (%s) Bug Report\" %s" */ #endif tmpk8ny_4pz/src/include/ngspice/tclspice.h0000644000175000017500000000206313546075722021002 0ustar carstencarsten/*Include file to allow spice to export certain data */ #ifndef ngspice_TCLSPICE_H #define ngspice_TCLSPICE_H extern int steps_completed; extern void blt_init(void *run); extern void blt_add(int index,double value); extern void blt_relink(int index, void* v); extern void blt_lockvec(int index); /* For things to do per loop */ int Tcl_ExecutePerLoop(void); #include "ngspice/graph.h" #include "ngspice/ftedev.h" /* For tk ploting */ disp_fn_Init_t sp_Tk_Init; disp_fn_NewViewport_t sp_Tk_NewViewport; disp_fn_Close_t sp_Tk_Close; disp_fn_Clear_t sp_Tk_Clear; disp_fn_DrawLine_t sp_Tk_DrawLine; disp_fn_Arc_t sp_Tk_Arc; disp_fn_Text_t sp_Tk_Text; disp_fn_DefineColor_t sp_Tk_DefineColor; disp_fn_DefineLinestyle_t sp_Tk_DefineLinestyle; disp_fn_SetLinestyle_t sp_Tk_SetLinestyle; disp_fn_SetColor_t sp_Tk_SetColor; disp_fn_Update_t sp_Tk_Update; /* The blt callback method */ #include "ngspice/dvec.h" extern int blt_plot(struct dvec *y,struct dvec *x,int new); #endif tmpk8ny_4pz/src/include/ngspice/FastNorm3.h0000644000175000017500000000214713546075722021013 0ustar carstencarsten/* Last revised 28-1-1999 */ /* This is the header file FastNorm3.h to be included in code files using FastNorm3.c */ /* I M P O R T A N T ! ! ! ! ! The definition below should be altered to ensure that integer arithmetic is done on 32-bit words. It may need to be changed from int to long on some platforms. The 32-bit requirement arises from the use of a Uniform pseudo-random generator in part of the code, which assumes 32-bit twos-complement arithmetic. In dire need, replace this generator with another more suitable for the platform. The rest of the code assumes only that signed integers up to a bit less than 2^31 can be handled. */ #define Sw int /* MUST define Sw as a 32-bit integer or longer */ #define Sf double extern int gaussfaze; extern int gaussmask; extern double *gausssave; extern double GScale; #define FastNorm ((--gaussfaze)?GScale*gausssave[gaussfaze]:fastnorm()) void initnorm(Sw seed, Sw quoll); Sf fastnorm (void); Sf c7rand(Sw*); Sw irandm(Sw*); unsigned Sw urandm(Sw*); double adchi (double a, int *is); double rgamma (double g, int *is); Sf renormalize(void); tmpk8ny_4pz/src/include/ngspice/onedev.h0000644000175000017500000000621213546075722020454 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors: 1987 Karti Mayaram, 1991 David Gates **********/ /* Member of CIDER device simulator * Version: 1b1 */ /* * One Dimensional Numerical Device Data Structures */ #ifndef ngspice_ONEDEV_H #define ngspice_ONEDEV_H #include "ngspice/gendev.h" #include "ngspice/smpdefs.h" typedef struct sONEdevice { double *dcSolution; /* solution vector for device */ double *dcDeltaSolution; /* delta solution vector */ double *copiedSolution; /* copy of the solution vector */ double *rhs; /* rhs vector */ double *rhsImag; /* imaginary part of rhs vector */ SMPmatrix *matrix; /* matrix for device equations */ int solverType; /* type of equations matrix can solve */ int dimEquil; /* dimension in equilibrium */ int numOrigEquil; /* orig number of nz's in equilibrium */ int numFillEquil; /* fill number of nz's in equilibrium */ int dimBias; /* dimension under bias */ int numOrigBias; /* orig number of nz's under bias */ int numFillBias; /* fill number of nz's under bias */ int numEqns; /* number of equations */ int poissonOnly; /* flag for Poisson eqn solution */ struct sONEelem **elemArray; /* array of elements */ double **devStates; /* device states */ int numNodes; /* total number of nodes */ struct sONEcontact *pFirstContact; /* first contact */ struct sONEcontact *pLastContact; /* last contact */ struct sMaterialInfo *pMaterials; /* temp-dep material information */ struct sStatInfo *pStats; /* run-time statistics */ int converged; /* flag for device convergence */ int iterationNumber; /* device iteration counter */ int baseIndex; /* index for base contact in BJTs */ double baseLength; /* length of base contact in BJTs */ double area; /* area of device in CM^2 */ double rhsNorm; /* norm of rhs vector */ double abstol; /* absolute tolerance for device */ double reltol; /* relative tolerance for device */ char *name; /* name of device */ } ONEdevice; #define devState0 devStates[0] #define devState1 devStates[1] #define devState2 devStates[2] #define devState3 devStates[3] #define devState4 devStates[4] #define devState5 devStates[5] #define devState6 devStates[6] #define devState7 devStates[7] typedef struct sONEcontact { struct sONEcontact *next; /* pointer to next contact */ struct sONEnode **pNodes; /* pointer to the contact nodes */ int numNodes; /* number of nodes in contact */ int id; /* unique contact identifier */ double workf; /* metal work function */ } ONEcontact; #endif tmpk8ny_4pz/src/include/ngspice/stringskip.h0000644000175000017500000000105213546075722021366 0ustar carstencarsten#ifndef ngspice_STRINGSKIP_H #define ngspice_STRINGSKIP_H static inline char *skip_non_ws(const char *s) { while (*s && !isspace_c(*s)) s++; return (char *) s; } static inline char *skip_ws(const char *s) { while ( isspace_c(*s)) s++; return (char *) s; } static inline char *skip_back_non_ws(const char *s, const char *start) { while (s > start && !isspace_c(s[-1])) s--; return (char *) s; } static inline char *skip_back_ws(const char *s, const char *start) { while (s > start && isspace_c(s[-1])) s--; return (char *) s; } #endif tmpk8ny_4pz/src/include/ngspice/outpdefs.h0000644000175000017500000000453213546075722021030 0ustar carstencarsten/********** Copyright 1992 Regents of the University of California. All rights reserved. Authors: 1992 David Gates **********/ #ifndef ngspice_OUTPDEFS_H #define ngspice_OUTPDEFS_H /* Data Structures and Definitions for Device Simulation Cards */ typedef struct sOUTPcard { struct sOUTPcard *OUTPnextCard; char *OUTProotFile; int OUTPnumVars; int OUTPdcDebug; int OUTPtranDebug; int OUTPacDebug; int OUTPgeom; int OUTPmesh; int OUTPmaterial; int OUTPglobals; int OUTPstats; int OUTPfileType; int OUTPdoping; int OUTPpsi; int OUTPequPsi; int OUTPvacPsi; int OUTPnConc; int OUTPpConc; int OUTPphin; int OUTPphip; int OUTPphic; int OUTPphiv; int OUTPeField; int OUTPjc; int OUTPjd; int OUTPjn; int OUTPjp; int OUTPjt; int OUTPuNet; int OUTPmun; int OUTPmup; unsigned int OUTProotFileGiven : 1; unsigned int OUTPdcDebugGiven : 1; unsigned int OUTPtranDebugGiven : 1; unsigned int OUTPacDebugGiven : 1; unsigned int OUTPgeomGiven : 1; unsigned int OUTPmeshGiven : 1; unsigned int OUTPmaterialGiven : 1; unsigned int OUTPglobalsGiven : 1; unsigned int OUTPstatsGiven : 1; unsigned int OUTPfileTypeGiven : 1; unsigned int OUTPdopingGiven : 1; unsigned int OUTPpsiGiven : 1; unsigned int OUTPequPsiGiven : 1; unsigned int OUTPvacPsiGiven : 1; unsigned int OUTPnConcGiven : 1; unsigned int OUTPpConcGiven : 1; unsigned int OUTPphinGiven : 1; unsigned int OUTPphipGiven : 1; unsigned int OUTPphicGiven : 1; unsigned int OUTPphivGiven : 1; unsigned int OUTPeFieldGiven : 1; unsigned int OUTPjcGiven : 1; unsigned int OUTPjdGiven : 1; unsigned int OUTPjnGiven : 1; unsigned int OUTPjpGiven : 1; unsigned int OUTPjtGiven : 1; unsigned int OUTPuNetGiven : 1; unsigned int OUTPmunGiven : 1; unsigned int OUTPmupGiven : 1; } OUTPcard; /* OUTP parameters */ enum { OUTP_ALL_DEBUG = 1, OUTP_DC_DEBUG, OUTP_TRAN_DEBUG, OUTP_AC_DEBUG, OUTP_GEOM, OUTP_MESH, OUTP_MATERIAL, OUTP_GLOBALS, OUTP_STATS, OUTP_ROOTFILE, OUTP_RAWFILE, OUTP_HDF, OUTP_DOPING, OUTP_PSI, OUTP_EQU_PSI, OUTP_VAC_PSI, OUTP_N_CONC, OUTP_P_CONC, OUTP_PHIN, OUTP_PHIP, OUTP_PHIC, OUTP_PHIV, OUTP_E_FIELD, OUTP_J_C, OUTP_J_D, OUTP_J_N, OUTP_J_P, OUTP_J_T, OUTP_U_NET, OUTP_MUN, OUTP_MUP, }; #endif tmpk8ny_4pz/src/include/ngspice/cktdefs.h0000644000175000017500000004520613546075722020625 0ustar carstencarsten/* * Copyright (c) 1985 Thomas L. Quarles * Modified 1999 Paolo Nenzi - Removed non STDC definitions * Modified 2000 AlansFixes */ #ifndef ngspice_CKTDEFS_H #define ngspice_CKTDEFS_H #include "ngspice/typedefs.h" /* gtri - evt - wbk - 5/20/91 - add event-driven and enhancements data */ #ifdef XSPICE #include "ngspice/evttypes.h" #include "ngspice/enhtypes.h" #endif /* gtri - evt - wbk - 5/20/91 - add event-driven and enhancements data */ #define MAXNUMDEVS 64 /* Max number of possible devices PN:XXX may cause toubles*/ #define MAXNUMDEVNODES 4 /* Max No. of nodes per device */ /* Need to change for SOI devs ? */ #include "ngspice/smpdefs.h" #include "ngspice/ifsim.h" #include "ngspice/acdefs.h" #include "ngspice/gendefs.h" #include "ngspice/trcvdefs.h" #include "ngspice/optdefs.h" #include "ngspice/sen2defs.h" #include "ngspice/pzdefs.h" #include "ngspice/noisedef.h" #include "ngspice/hash.h" struct CKTnode { IFuid name; int type; #define SP_VOLTAGE 3 #define SP_CURRENT 4 #define NODE_VOLTAGE SP_VOLTAGE #define NODE_CURRENT SP_CURRENT int number; /* Number of the node */ double ic; /* Value of the initial condition */ double nodeset; /* Value of the .nodeset option */ double *ptr; /* ??? */ CKTnode *next; /* pointer to the next node */ unsigned int icGiven:1; /* FLAG ic given */ unsigned int nsGiven:1; /* FLAG nodeset given */ }; /* defines for node parameters */ enum { PARM_NS = 1, PARM_IC, PARM_NODETYPE, }; struct CKTcircuit { /* gtri - begin - wbk - change declaration to allow dynamic sizing */ /* An associated change is made in CKTinit.c to alloc the space */ /* required for the pointers. No changes are needed to the source */ /* code at the 3C1 level, although the compiler will generate */ /* slightly different code for references to this data. */ /* GENmodel *CKThead[MAXNUMDEVS]; The max number of loadable devices */ GENmodel **CKThead; /* gtri - end - wbk - change declaration to allow dynamic sizing */ /* GENmodel *CKThead[MAXNUMDEVS]; maschmann : deleted */ STATistics *CKTstat; /* The STATistics structure */ double *(CKTstates[8]); /* Used as memory of past steps ??? */ /* Some shortcut for CKTstates */ #define CKTstate0 CKTstates[0] #define CKTstate1 CKTstates[1] #define CKTstate2 CKTstates[2] #define CKTstate3 CKTstates[3] #define CKTstate4 CKTstates[4] #define CKTstate5 CKTstates[5] #define CKTstate6 CKTstates[6] #define CKTstate7 CKTstates[7] double CKTtime; /* ??? */ double CKTdelta; /* ??? */ double CKTdeltaOld[7]; /* Memory for ??? */ double CKTtemp; /* Actual temperature of CKT */ double CKTnomTemp; /* Reference temperature 27 C ? */ double CKTvt; /* Thernmal voltage at CKTtemp */ double CKTag[7]; /* the gear variable coefficient matrix */ #ifdef PREDICTOR double CKTagp[7]; /* the gear predictor variable coefficient matrix */ #endif /*PREDICTOR*/ int CKTorder; /* the integration method order */ int CKTmaxOrder; /* maximum integration method order */ int CKTintegrateMethod; /* the integration method to be used */ double CKTxmu; /* for trapezoidal method */ int CKTindverbosity; /* control check of inductive couplings */ /* known integration methods */ #define TRAPEZOIDAL 1 #define GEAR 2 SMPmatrix *CKTmatrix; /* pointer to sparse matrix */ int CKTniState; /* internal state */ double *CKTrhs; /* current rhs value - being loaded */ double *CKTrhsOld; /* previous rhs value for convergence testing */ double *CKTrhsSpare; /* spare rhs value for reordering */ double *CKTirhs; /* current rhs value - being loaded (imag) */ double *CKTirhsOld; /* previous rhs value (imaginary)*/ double *CKTirhsSpare; /* spare rhs value (imaginary)*/ #ifdef PREDICTOR double *CKTpred; /* predicted solution vector */ double *CKTsols[8]; /* previous 8 solutions */ #endif /* PREDICTOR */ double *CKTrhsOp; /* opearating point values */ double *CKTsenRhs; /* current sensitivity rhs values */ double *CKTseniRhs; /* current sensitivity rhs values (imag)*/ /* * symbolic constants for CKTniState * Note that they are bitwise disjoint * What is their meaning ???? */ #define NISHOULDREORDER 0x1 #define NIREORDERED 0x2 #define NIUNINITIALIZED 0x4 #define NIACSHOULDREORDER 0x10 #define NIACREORDERED 0x20 #define NIACUNINITIALIZED 0x40 #define NIDIDPREORDER 0x100 #define NIPZSHOULDREORDER 0x200 int CKTmaxEqNum; /* And this ? */ int CKTcurrentAnalysis; /* the analysis in progress (if any) */ /* defines for the value of CKTcurrentAnalysis */ /* are in TSKdefs.h */ CKTnode *CKTnodes; /* ??? */ CKTnode *CKTlastNode; /* ??? */ CKTnode *prev_CKTlastNode; /* just before model setup */ /* This define should be somewhere else ??? */ #define NODENAME(ckt,nodenum) CKTnodName(ckt,nodenum) int CKTnumStates; /* Number of sates effectively valid ??? */ long CKTmode; /* Mode of operation of the circuit ??? */ /* defines for CKTmode */ /* old 'mode' parameters */ #define MODE 0x3 #define MODETRAN 0x1 #define MODEAC 0x2 /* for noise analysis */ #define MODEACNOISE 0x8 /* old 'modedc' parameters */ #define MODEDC 0x70 #define MODEDCOP 0x10 #define MODETRANOP 0x20 #define MODEDCTRANCURVE 0x40 /* old 'initf' parameters */ #define INITF 0x3f00 #define MODEINITFLOAT 0x100 #define MODEINITJCT 0x200 #define MODEINITFIX 0x400 #define MODEINITSMSIG 0x800 #define MODEINITTRAN 0x1000 #define MODEINITPRED 0x2000 /* old 'nosolv' paramater */ #define MODEUIC 0x10000l int CKTbypass; /* bypass option, how does it work ? */ int CKTdcMaxIter; /* iteration limit for dc op. (itl1) */ int CKTdcTrcvMaxIter; /* iteration limit for dc tran. curv (itl2) */ int CKTtranMaxIter; /* iteration limit for each timepoint for tran*/ /* (itl4) */ int CKTbreakSize; /* ??? */ int CKTbreak; /* ??? */ double CKTsaveDelta; /* ??? */ double CKTminBreak; /* ??? */ double *CKTbreaks; /* List of breakpoints ??? */ double CKTabstol; /* --- */ double CKTpivotAbsTol; /* --- */ double CKTpivotRelTol; /* --- */ double CKTreltol; /* --- */ double CKTchgtol; /* --- */ double CKTvoltTol; /* --- */ /* What is this define for ? */ #ifdef NEWTRUNC double CKTlteReltol; double CKTlteAbstol; #endif /* NEWTRUNC */ double CKTgmin; /* .options GMIN */ double CKTgshunt; /* .options RSHUNT */ double CKTdelmin; /* minimum time step for tran analysis */ double CKTtrtol; /* .options TRTOL */ double CKTfinalTime; /* TSTOP */ double CKTstep; /* TSTEP */ double CKTmaxStep; /* TMAX */ double CKTinitTime; /* TSTART */ double CKTomega; /* actual angular frequency for ac analysis */ double CKTsrcFact; /* source stepping scaling factor */ double CKTdiagGmin; /* actual value during gmin stepping */ int CKTnumSrcSteps; /* .options SRCSTEPS */ int CKTnumGminSteps; /* .options GMINSTEPS */ double CKTgminFactor; /* gmin stepping scaling factor */ int CKTnoncon; /* used by devices (and few other places) to announce non-convergence */ double CKTdefaultMosM; /* Default MOS multiplier parameter m */ double CKTdefaultMosL; /* Default Channel Lenght of MOS devices */ double CKTdefaultMosW; /* Default Channel Width of MOS devics */ double CKTdefaultMosAD; /* Default Drain Area of MOS */ double CKTdefaultMosAS; /* Default Source Area of MOS */ unsigned int CKThadNodeset:1; /* flag to show that nodes have been set up */ unsigned int CKTfixLimit:1; /* flag to indicate that the limiting of MOSFETs should be done as in SPICE2 */ unsigned int CKTnoOpIter:1; /* flag to indicate not to try the operating point brute force, but to use gmin stepping first */ unsigned int CKTisSetup:1; /* flag to indicate if CKTsetup done */ #ifdef XSPICE unsigned int CKTadevFlag:1; /* flag indicates 'A' devices in the circuit */ #endif JOB *CKTcurJob; /* Next analysis to be performed ??? */ SENstruct *CKTsenInfo; /* the sensitivity information */ double *CKTtimePoints; /* list of all accepted timepoints in the current transient simulation */ double *CKTdeltaList; /* list of all timesteps in the current transient simulation */ int CKTtimeListSize; /* size of above lists */ int CKTtimeIndex; /* current position in above lists */ int CKTsizeIncr; /* amount to increment size of above arrays when you run out of space */ unsigned int CKTtryToCompact:1; /* try to compact past history for LTRA lines */ unsigned int CKTbadMos3:1; /* Use old, unfixed MOS3 equations */ unsigned int CKTkeepOpInfo:1; /* flag for small signal analyses */ unsigned int CKTcopyNodesets:1; /* NodesetFIX */ unsigned int CKTnodeDamping:1; /* flag for node damping fix */ double CKTabsDv; /* abs limit for iter-iter voltage change */ double CKTrelDv; /* rel limit for iter-iter voltage change */ int CKTtroubleNode; /* Non-convergent node number */ GENinstance *CKTtroubleElt; /* Non-convergent device instance */ int CKTvarHertz; /* variable HERTZ in B source */ /* gtri - evt - wbk - 5/20/91 - add event-driven and enhancements data */ #ifdef XSPICE Evt_Ckt_Data_t *evt; /* all data about event driven stuff */ Enh_Ckt_Data_t *enh; /* data used by general enhancements */ #endif /* gtri - evt - wbk - 5/20/91 - add event-driven and enhancements data */ #ifdef WITH_PSS /* SP: Periodic Steady State Analysis - 100609 */ double CKTstabTime; /* PSS stab time */ double CKTguessedFreq; /* PSS guessed frequency */ int CKTharms; /* PSS harmonics */ long int CKTpsspoints; /* PSS number of samples */ char *CKToscNode; /* PSS oscnode */ double CKTsteady_coeff; /* PSS Steady Coefficient */ int CKTsc_iter; /* PSS Maximum Number of Shooting Iterations */ /* SP: 100609 */ #endif unsigned int CKTisLinear:1; /* flag to indicate that the circuit contains only linear elements */ unsigned int CKTnoopac:1; /* flag to indicate that OP will not be evaluated during AC simulation */ int CKTsoaCheck; /* flag to indicate that in certain device models a safe operating area (SOA) check is executed */ int CKTsoaMaxWarns; /* specifies the maximum number of SOA warnings */ double CKTepsmin; /* minimum argument value for some log functions, e.g. diode saturation current*/ NGHASHPTR DEVnameHash; NGHASHPTR MODnameHash; GENinstance *noise_input; /* identify the input vsrc/isrc during noise analysis */ }; /* Now function prottypes */ extern int ACan(CKTcircuit *, int); extern int ACaskQuest(CKTcircuit *, JOB *, int , IFvalue *); extern int ACsetParm(CKTcircuit *, JOB *, int , IFvalue *); extern int CKTacDump(CKTcircuit *, double , runDesc *); extern int CKTacLoad(CKTcircuit *); extern int CKTaccept(CKTcircuit *); extern int CKTacct(CKTcircuit *, JOB *, int , IFvalue *); extern int CKTask(CKTcircuit *, GENinstance *, int , IFvalue *, IFvalue *); extern int CKTaskAnalQ(CKTcircuit *, JOB *, int , IFvalue *, IFvalue *); extern int CKTaskNodQst(CKTcircuit *, CKTnode *, int , IFvalue *, IFvalue *); extern int CKTbindNode(CKTcircuit *, GENinstance *, int , CKTnode *); extern void CKTbreakDump(CKTcircuit *); extern int CKTclrBreak(CKTcircuit *); extern int CKTconvTest(CKTcircuit *); extern int CKTcrtElt(CKTcircuit *, GENmodel *, GENinstance **, IFuid); extern int CKTdelTask(CKTcircuit *, TSKtask *); extern int CKTdestroy(CKTcircuit *); extern int CKTdltAnal(void *, void *, void *); extern int CKTdltInst(CKTcircuit *, void *); extern int CKTdltMod(CKTcircuit *, GENmodel *); extern int CKTdltNNum(CKTcircuit *, int); extern int CKTdltNod(CKTcircuit *, CKTnode *); extern int CKTdoJob(CKTcircuit *, int , TSKtask *); extern void CKTdump(CKTcircuit *, double, runDesc *); extern int CKTsoaInit(void); extern int CKTsoaCheck(CKTcircuit *); #ifdef CIDER extern void NDEVacct(CKTcircuit *ckt, FILE *file); #endif /* CIDER */ extern void CKTncDump(CKTcircuit *); extern int CKTfndAnal(CKTcircuit *, int *, JOB **, IFuid , TSKtask *, IFuid); extern int CKTfndBranch(CKTcircuit *, IFuid); extern GENinstance *CKTfndDev(CKTcircuit *, IFuid); extern GENmodel *CKTfndMod(CKTcircuit *, IFuid); extern int CKTfndNode(CKTcircuit *, CKTnode **, IFuid); extern int CKTfndTask(CKTcircuit *, TSKtask **, IFuid ); extern int CKTground(CKTcircuit *, CKTnode **, IFuid); extern int CKTic(CKTcircuit *); extern int CKTinit(CKTcircuit **); extern int CKTinst2Node(CKTcircuit *, void *, int , CKTnode **, IFuid *); extern int CKTlinkEq(CKTcircuit *, CKTnode *); extern int CKTload(CKTcircuit *); extern int CKTmapNode(CKTcircuit *, CKTnode **, IFuid); extern int CKTmkCur(CKTcircuit *, CKTnode **, IFuid , char *); extern int CKTmkNode(CKTcircuit *, CKTnode **); extern int CKTmkVolt(CKTcircuit *, CKTnode **, IFuid , char *); extern int CKTmodAsk(CKTcircuit *, GENmodel *, int , IFvalue *, IFvalue *); extern int CKTmodCrt(CKTcircuit *, int , GENmodel **, IFuid); extern int CKTmodParam(CKTcircuit *, GENmodel *, int , IFvalue *, IFvalue *); extern int CKTnames(CKTcircuit *, int *, IFuid **); extern int CKTdnames(CKTcircuit *); extern int CKTnewAnal(CKTcircuit *, int , IFuid , JOB **, TSKtask *); extern int CKTnewEq(CKTcircuit *, CKTnode **, IFuid); extern int CKTnewNode(CKTcircuit *, CKTnode **, IFuid); extern int CKTnewTask(CKTcircuit *, TSKtask **, IFuid, TSKtask **); extern int CKTnoise (CKTcircuit *ckt, int mode, int operation, Ndata *data); extern IFuid CKTnodName(CKTcircuit *, int); extern void CKTnodOut(CKTcircuit *); extern CKTnode * CKTnum2nod(CKTcircuit *, int); extern int CKTop(CKTcircuit *, long, long, int); extern int CKTpModName(char *, IFvalue *, CKTcircuit *, int , IFuid , GENmodel **); extern int CKTpName(char *, IFvalue *, CKTcircuit *, int , char *, GENinstance **); extern int CKTparam(CKTcircuit *, GENinstance *, int , IFvalue *, IFvalue *); extern int CKTpzFindZeros(CKTcircuit *, PZtrial **, int *); extern int CKTpzLoad(CKTcircuit *, SPcomplex *); extern int CKTpzSetup(CKTcircuit *, int); extern int CKTsenAC(CKTcircuit *); extern int CKTsenComp(CKTcircuit *); extern int CKTsenDCtran(CKTcircuit *); extern int CKTsenLoad(CKTcircuit *); extern void CKTsenPrint(CKTcircuit *); extern int CKTsenSetup(CKTcircuit *); extern int CKTsenUpdate(CKTcircuit *); extern int CKTsetAnalPm(CKTcircuit *, JOB *, int , IFvalue *, IFvalue *); extern int CKTsetBreak(CKTcircuit *, double); extern int CKTsetNodPm(CKTcircuit *, CKTnode *, int , IFvalue *, IFvalue *); extern int CKTsetOpt(CKTcircuit *, JOB *, int , IFvalue *); extern int CKTsetup(CKTcircuit *); extern int CKTunsetup(CKTcircuit *); extern int CKTtemp(CKTcircuit *); extern char *CKTtrouble(CKTcircuit *, char *); extern void CKTterr(int , CKTcircuit *, double *); extern int CKTtrunc(CKTcircuit *, double *); extern int CKTtypelook(char *); extern int DCOaskQuest(CKTcircuit *, JOB *, int , IFvalue *); extern int DCOsetParm(CKTcircuit *, JOB *, int , IFvalue *); extern int DCTaskQuest(CKTcircuit *, JOB *, int , IFvalue *); extern int DCTsetParm(CKTcircuit *, JOB *, int , IFvalue *); extern int DCop(CKTcircuit *ckt, int notused); /* va: notused avoids "init from incompatible pointer type" */ extern int DCtrCurv(CKTcircuit *, int); extern int DCtran(CKTcircuit *, int); extern int DISTOan(CKTcircuit *, int); extern int NOISEan(CKTcircuit *, int); extern int PZan(CKTcircuit *, int); extern int PZinit(CKTcircuit *); extern int PZpost(CKTcircuit *); extern int PZaskQuest(CKTcircuit *, JOB *, int , IFvalue *); extern int PZsetParm(CKTcircuit *, JOB *, int , IFvalue *); #ifdef WANT_SENSE2 extern int SENaskQuest(CKTcircuit *, JOB *, int , IFvalue *); extern void SENdestroy(SENstruct *); extern int SENsetParm(CKTcircuit *, JOB *, int , IFvalue *); extern int SENstartup(CKTcircuit *, int); #endif extern int SPIinit(IFfrontEnd *, IFsimulator **); extern int TFanal(CKTcircuit *, int); extern int TFaskQuest(CKTcircuit *, JOB *, int , IFvalue *); extern int TFsetParm(CKTcircuit *, JOB *, int , IFvalue *); extern int TRANaskQuest(CKTcircuit *, JOB *, int , IFvalue *); extern int TRANsetParm(CKTcircuit *, JOB *, int , IFvalue *); extern int TRANinit(CKTcircuit *, JOB *); #ifdef WITH_PSS /* SP: Steady State Analysis */ extern int PSSaskQuest(CKTcircuit *, JOB *, int , IFvalue *); extern int PSSsetParm(CKTcircuit *, JOB *, int , IFvalue *); extern int PSSinit(CKTcircuit *, JOB *); extern int DCpss(CKTcircuit *, int); /* SP */ #endif extern int NaskQuest(CKTcircuit *, JOB *, int, IFvalue *); extern int NsetParm(CKTcircuit *, JOB *, int, IFvalue *); extern int NIacIter(CKTcircuit *); extern int NIcomCof(CKTcircuit *); extern int NIconvTest(CKTcircuit *); extern void NIdestroy(CKTcircuit *); extern int NIinit(CKTcircuit *); extern int NIintegrate(CKTcircuit *, double *, double *, double , int); extern int NIiter(CKTcircuit * , int); extern int NIpzMuller(PZtrial **, PZtrial *); extern int NIpzComplex(PZtrial **, PZtrial *); extern int NIpzSym(PZtrial **, PZtrial *); extern int NIpzSym2(PZtrial **, PZtrial *); extern int NIreinit(CKTcircuit *); extern int NIsenReinit(CKTcircuit *); extern int NIdIter (CKTcircuit *); extern void NInzIter(CKTcircuit *, int, int); #ifdef PREDICTOR extern int NIpred(CKTcircuit *ckt); #endif extern IFfrontEnd *SPfrontEnd; struct circ; extern void inp_evaluate_temper(struct circ *ckt); #endif tmpk8ny_4pz/src/include/ngspice/mifdefs.h0000644000175000017500000000657413546075722020624 0ustar carstencarsten#ifndef ngspice_MIFDEFS_H #define ngspice_MIFDEFS_H /* =========================================================================== FILE MIFdefs.h MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains (augmented) SPICE 3C1 compatible typedefs for use with code models. These typedefs define the data structures that are used internally to describe instances and models in the circuit description linked lists. INTERFACES None. REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ #include "ngspice/mifcmdat.h" #include "ngspice/gendefs.h" #include "ngspice/ifsim.h" /* The per-instance data structure */ struct MIFinstance { struct GENinstance gen; #define MIFmodPtr(inst) ((struct MIFmodel *)((inst)->gen.GENmodPtr)) #define MIFnextInstance(inst) ((struct MIFinstance *)((inst)->gen.GENnextInstance)) #define MIFname gen.GENname #define MIFstates gen.GENstate int num_conn; /* number of connections on the code model */ Mif_Conn_Data_t **conn; /* array of data structures for each connection */ int num_inst_var; /* number of instance variables on the code model */ Mif_Inst_Var_Data_t **inst_var; /* array of structs for each instance var */ int num_param; /* number of parameters on the code model */ Mif_Param_Data_t **param; /* array of structs for each parameter */ int num_state; /* Number of state tags used for this inst */ Mif_State_t *state; /* Info about states */ int num_intgr; /* Number of integrals */ Mif_Intgr_t *intgr; /* Info for integrals */ int num_conv; /* Number of things to be converged */ Mif_Conv_t *conv; /* Info for convergence things */ Mif_Boolean_t initialized; /* True if model called once already */ Mif_Boolean_t analog; /* true if this inst is analog or hybrid type */ Mif_Boolean_t event_driven; /* true if this inst is event-driven or hybrid type */ int inst_index; /* Index into inst_table in evt struct in ckt */ Mif_Callback_t callback; /* instance callback function */ }; /* The per model data structure */ struct MIFmodel { struct GENmodel gen; #define MIFmodType gen.GENmodType #define MIFnextModel(inst) ((struct MIFmodel *)((inst)->gen.GENnextModel)) #define MIFinstances(inst) ((struct MIFinstance *)((inst)->gen.GENinstances)) #define MIFmodName gen.GENmodName int num_param; /* number of parameters on the code model */ Mif_Param_Data_t **param; /* array of structs for each parameter */ Mif_Boolean_t analog; /* true if this model is analog or hybrid type */ Mif_Boolean_t event_driven; /* true if this model is event-driven or hybrid type */ }; /* NOTE: There are no device parameter tags, since the ask, mAsk, ... */ /* functions for code models work out of the generic code model structure */ #endif tmpk8ny_4pz/src/include/ngspice/numglobs.h0000644000175000017500000000233213546075722021021 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors: 1987 Karti Mayaram, 1991 David Gates **********/ /* Define various flags, constants, and indices */ /* These variables are defined in support/globals.c */ #ifndef ngspice_NUMGLOBS_H #define ngspice_NUMGLOBS_H extern int BandGapNarrowing; extern int TempDepMobility; extern int ConcDepMobility; extern int FieldDepMobility; extern int TransDepMobility; extern int SurfaceMobility; extern int MatchingMobility; extern int MobDeriv; extern int CCScattering; extern int Srh; extern int Auger; extern int ConcDepLifetime; extern int AvalancheGen; extern int FreezeOut; extern int OneCarrier; extern int MaxIterations; extern int AcAnalysisMethod; extern double Temp; extern double RelTemp; extern double Vt; extern double RefPsi; extern double EpsNorm; extern double VNorm; extern double NNorm; extern double LNorm; extern double TNorm; extern double JNorm; extern double GNorm; extern double ENorm; typedef struct sGLOBvalues { double Temp; double RelTemp; double Vt; double RefPsi; double EpsNorm; double VNorm; double NNorm; double LNorm; double TNorm; double JNorm; double GNorm; double ENorm; } GLOBvalues; #endif tmpk8ny_4pz/src/include/ngspice/ftedev.h0000644000175000017500000000427713546075722020462 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Jeffrey M. Hsu **********/ /* The display device structure. */ #ifndef ngspice_FTEDEV_H #define ngspice_FTEDEV_H struct graph; struct request; struct response; typedef int disp_fn_Init_t (void); typedef int disp_fn_NewViewport_t (struct graph *); typedef int disp_fn_Close_t (void); typedef int disp_fn_Clear_t (void); typedef int disp_fn_DrawLine_t (int x1, int y1, int x2, int y2); typedef int disp_fn_Arc_t (int x0, int y0, int radius, double theta, double delta_theta); typedef int disp_fn_Text_t (char *text, int x, int y, int angle); typedef int disp_fn_DefineColor_t (int colorid, double red, double green, double blue); typedef int disp_fn_DefineLinestyle_t (int linestyleid, int mask); typedef int disp_fn_SetLinestyle_t (int linestyleid); typedef int disp_fn_SetColor_t (int colorid); typedef int disp_fn_Update_t (void); typedef int disp_fn_Track_t (void); typedef int disp_fn_MakeMenu_t (void); typedef int disp_fn_MakeDialog_t (void); typedef int disp_fn_Input_t (struct request *request, struct response *response); typedef void disp_fn_DatatoScreen_t (struct graph *graph, double x, double y, int *screenx, int *screeny); typedef struct { char *name; int minx, miny; int width, height; /* in screen coordinate system */ int numlinestyles, numcolors; /* number supported */ disp_fn_Init_t *Init; disp_fn_NewViewport_t *NewViewport; disp_fn_Close_t *Close; disp_fn_Clear_t *Clear; disp_fn_DrawLine_t *DrawLine; disp_fn_Arc_t *DrawArc; disp_fn_Text_t *DrawText; disp_fn_DefineColor_t *DefineColor; disp_fn_DefineLinestyle_t *DefineLinestyle; disp_fn_SetLinestyle_t *SetLinestyle; disp_fn_SetColor_t *SetColor; disp_fn_Update_t *Update; /* int (*NDCtoScreen)(); */ disp_fn_Track_t *Track; disp_fn_MakeMenu_t *MakeMenu; disp_fn_MakeDialog_t *MakeDialog; disp_fn_Input_t *Input; disp_fn_DatatoScreen_t *DatatoScreen; } DISPDEVICE; extern DISPDEVICE *dispdev; #endif tmpk8ny_4pz/src/include/ngspice/numcards.h0000644000175000017500000000242113546075722021006 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors: 1991 David Gates **********/ /* * Structures for parsing numerical-device input cards */ /* Member of CIDER device simulator * Version: 1b1 */ #ifndef ngspice_NUMCARDS_H #define ngspice_NUMCARDS_H #include "ngspice/ifsim.h" /* * Generic header for a linked list of cards */ typedef struct sGENcard { struct sGENcard *GENnextCard; /* pointer to next card of this type */ } GENcard; /* * Structure: IFcardInfo * * This structure is a generic description of an input card to * the program. It can be used in situations where input parameters * need to be grouped together under a single heading. */ typedef struct sIFcardInfo { char *name; /* name of the card */ char *description; /* description of its purpose */ int numParms; /* number of parameter descriptors */ IFparm *cardParms; /* array of parameter descriptors */ int (*newCard)(GENcard**,GENmodel*); /* routine to add a new card to a numerical device model */ int (*setCardParm)(int,IFvalue*,GENcard*); /* routine to input a parameter to a card instance */ int (*askCardQuest)(int,IFvalue*,GENcard*); /* routine to find out about a card's details */ } IFcardInfo; #endif tmpk8ny_4pz/src/include/ngspice/cpstd.h0000644000175000017500000000145413546075722020314 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1986 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * Standard definitions. This file serves as the header file for std.c and * wlist.c */ #ifndef ngspice_CPSTD_H #define ngspice_CPSTD_H #ifndef FILE /* XXX Bogus */ # include #endif /* FIXME: Split this file and adjust all callers to use new header files */ #if 0 #warning "Please use bool.h, wordlist.h or complex.h rather than cpstd.h" #endif #include "ngspice/bool.h" #include "ngspice/wordlist.h" #include "ngspice/complex.h" /* Externs defined in std.c */ extern char *tildexpand(char *string); extern void printnum(char *buf, double num); extern int cp_numdgt; extern void cp_printword(char *string, FILE *fp); #endif tmpk8ny_4pz/src/include/ngspice/sensdefs.h0000644000175000017500000000342313546075722021007 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ #ifndef ngspice_SENSDEFS_H #define ngspice_SENSDEFS_H #include "ngspice/jobdefs.h" /* structure used to describe an Adjoint Sensitivity analysis */ typedef struct st_sens SENS_AN; typedef struct st_devsen DevSenList; typedef struct st_modsen ModSenList; typedef struct st_devsen ParamSenList; typedef struct st_nodes Nodes; typedef struct st_output output; struct st_sens { int JOBtype; JOB *JOBnextJob; /* pointer to next thing to do */ char *JOBname; /* name of this job */ DevSenList *first; double start_freq; double stop_freq; int step_type; int n_freq_steps; CKTnode *output_pos, *output_neg; IFuid output_src; char *output_name; int output_volt; double deftol; double defperturb; unsigned int pct_flag :1; }; struct st_output { int type; int pos, neg; }; struct st_nodes { int pos, neg; }; struct st_paramsenlist { ParamSenList *next; int param_no; double delta, tol; }; struct st_modsenlist { ModSenList *next; int mod_no; ParamSenList *first; }; struct st_devsenlist { DevSenList *next; int dev_no; ModSenList *first; }; /* va, with prototypes */ extern int SENSask(CKTcircuit *,JOB *,int ,IFvalue *); extern int SENSsetParam(CKTcircuit *,JOB *,int ,IFvalue *); extern int sens_sens(CKTcircuit *,int); enum { SENS_POS = 2, SENS_NEG, SENS_SRC, SENS_NAME, }; enum { SENS_START = 10, SENS_STOP, SENS_STEPS, SENS_DECADE, SENS_OCTAVE, SENS_LINEAR, SENS_DC, SENS_DEFTOL, SENS_DEFPERTURB, SENS_DEVDEFTOL, SENS_DEVDEFPERT, SENS_TYPE, SENS_DEVICE, }; enum { SENS_PARAM = 24, SENS_TOL, SENS_PERT, }; #endif /*DEFS*/ tmpk8ny_4pz/src/include/ngspice/spmatrix.h0000644000175000017500000002530213546075722021044 0ustar carstencarsten/* * EXPORTS for sparse matrix routines with SPICE3. * * Author: Advising professor: * Kenneth S. Kundert Alberto Sangiovanni-Vincentelli * UC Berkeley * * This file contains definitions that are useful to the calling * program. In particular, this file contains error keyword * definitions, some macro functions that are used to quickly enter * data into the matrix and the type definition of a data structure * that acts as a template for entering admittances into the matrix. * Also included is the type definitions for the various functions * available to the user. * * This file is a modified version of spMatrix.h that is used when * interfacing to Spice3. */ /* * Revision and copyright information. * * Copyright (c) 1985,86,87,88,89,90 * by Kenneth S. Kundert and the University of California. * * Permission to use, copy, modify, and distribute this software and * its documentation for any purpose and without fee is hereby granted, * provided that the copyright notices appear in all copies and * supporting documentation and that the authors and the University of * California are properly credited. The authors and the University of * California make no representations as to the suitability of this * software for any purpose. It is provided `as is', without express * or implied warranty. */ #ifndef spOKAY /* * ERROR KEYWORDS * * The actual numbers used in the error codes are not sacred, they can be * changed under the condition that the codes for the nonfatal errors are * less than the code for spFATAL and similarly the codes for the fatal * errors are greater than that for spFATAL. * * >>> Error descriptions: * spOKAY * No error has occurred. * spSMALL_PIVOT * When reordering the matrix, no element was found which satisfies the * threshold criteria. The largest element in the matrix was chosen * as pivot. Non-fatal. * spZERO_DIAG * Fatal error. A zero was encountered on the diagonal the matrix. This * does not necessarily imply that the matrix is singular. When this * error occurs, the matrix should be reconstructed and factored using * spOrderAndFactor(). * spSINGULAR * Fatal error. Matrix is singular, so no unique solution exists. * spNO_MEMORY * Fatal error. Indicates that not enough memory is available to handle * the matrix. * spPANIC * Fatal error indicating that the routines are not prepared to * handle the matrix that has been requested. This may occur when * the matrix is specified to be real and the routines are not * compiled for real matrices, or when the matrix is specified to * be complex and the routines are not compiled to handle complex * matrices. * spFATAL * Not an error flag, but rather the dividing line between fatal errors * and warnings. */ #include "ngspice/sperror.h" /* Spice error definitions. */ /* Begin error macros. */ #define spOKAY OK #define spSMALL_PIVOT OK #define spZERO_DIAG E_SINGULAR #define spSINGULAR E_SINGULAR #define spNO_MEMORY E_NOMEM #define spPANIC E_BADMATRIX #define spFATAL E_BADMATRIX /* * KEYWORD DEFINITIONS * * Here we define what precision arithmetic Sparse will use. Double * precision is suggested as being most appropriate for circuit * simulation and for C. However, it is possible to change spREAL * to a float for single precision arithmetic. Note that in C, single * precision arithmetic is often slower than double precision. Sparse * internally refers to spREALs as RealNumbers. * * Some C compilers, notably the old VMS compiler, do not handle the keyword * "void" correctly. If this is true for your compiler, remove the * comment delimiters from the redefinition of void to int below. */ #define spREAL double /* #define void int */ /* * PARTITION TYPES * * When factoring a previously ordered matrix using spFactor(), Sparse * operates on a row-at-a-time basis. For speed, on each step, the row * being updated is copied into a full vector and the operations are * performed on that vector. This can be done one of two ways, either * using direct addressing or indirect addressing. Direct addressing * is fastest when the matrix is relatively dense and indirect addressing * is quite sparse. The user can select which partitioning mode is used. * The following keywords are passed to spPartition() and indicate that * Sparse should use only direct addressing, only indirect addressing, or * that it should choose the best mode on a row-by-row basis. The time * required to choose a partition is of the same order of the cost to factor * the matrix. * * If you plan to factor a large number of matrices with the same structure, * it is best to let Sparse choose the partition. Otherwise, you should * choose the partition based on the predicted density of the matrix. */ /* Begin partition keywords. */ #define spDEFAULT_PARTITION 0 #define spDIRECT_PARTITION 1 #define spINDIRECT_PARTITION 2 #define spAUTO_PARTITION 3 /* * MACRO FUNCTION DEFINITIONS * * >>> Macro descriptions: * spADD_REAL_ELEMENT * Macro function that adds data to a real element in the matrix by a * pointer. * spADD_IMAG_ELEMENT * Macro function that adds data to a imaginary element in the matrix by * a pointer. * spADD_COMPLEX_ELEMENT * Macro function that adds data to a complex element in the matrix by a * pointer. * spADD_REAL_QUAD * Macro function that adds data to each of the four real matrix elements * specified by the given template. * spADD_IMAG_QUAD * Macro function that adds data to each of the four imaginary matrix * elements specified by the given template. * spADD_COMPLEX_QUAD * Macro function that adds data to each of the four complex matrix * elements specified by the given template. */ /* Begin Macros. */ #define spADD_REAL_ELEMENT(element,real) *(element) += real #define spADD_IMAG_ELEMENT(element,imag) *(element+1) += imag #define spADD_COMPLEX_ELEMENT(element,real,imag) \ { *(element) += real; \ *(element+1) += imag; \ } #define spADD_REAL_QUAD(template,real) \ { *((template).Element1) += real; \ *((template).Element2) += real; \ *((template).Element3Negated) -= real; \ *((template).Element4Negated) -= real; \ } #define spADD_IMAG_QUAD(template,imag) \ { *((template).Element1+1) += imag; \ *((template).Element2+1) += imag; \ *((template).Element3Negated+1) -= imag; \ *((template).Element4Negated+1) -= imag; \ } #define spADD_COMPLEX_QUAD(template,real,imag) \ { *((template).Element1) += real; \ *((template).Element2) += real; \ *((template).Element3Negated) -= real; \ *((template).Element4Negated) -= real; \ *((template).Element1+1) += imag; \ *((template).Element2+1) += imag; \ *((template).Element3Negated+1) -= imag; \ *((template).Element4Negated+1) -= imag; \ } /* * TYPE DEFINITION FOR COMPONENT TEMPLATE * * This data structure is used to hold pointers to four related elements in * matrix. It is used in conjunction with the routines * spGetAdmittance * spGetQuad * spGetOnes * These routines stuff the structure which is later used by the spADD_QUAD * macro functions above. It is also possible for the user to collect four * pointers returned by spGetElement and stuff them into the template. * The spADD_QUAD routines stuff data into the matrix in locations specified * by Element1 and Element2 without changing the data. The data is negated * before being placed in Element3 and Element4. */ /* Begin `spTemplate'. */ struct spTemplate { spREAL *Element1 ; spREAL *Element2 ; spREAL *Element3Negated; spREAL *Element4Negated; }; typedef struct MatrixFrame *MatrixPtr; /* * FUNCTION TYPE DEFINITIONS * * The type of every user accessible function is declared here. */ /* Begin function declarations. */ extern void spClear( MatrixPtr ); extern spREAL spCondition( MatrixPtr, spREAL, int* ); extern MatrixPtr spCreate( int, int, int* ); extern void spDeleteRowAndCol( MatrixPtr, int, int ); extern void spDestroy( MatrixPtr); extern int spElementCount( MatrixPtr ); extern int spError( MatrixPtr ); extern int spFactor( MatrixPtr ); extern int spFileMatrix( MatrixPtr, char *, char *, int, int, int ); extern int spFileStats( MatrixPtr, char *, char * ); extern int spFillinCount( MatrixPtr ); extern int spGetAdmittance( MatrixPtr, int, int, struct spTemplate* ); extern spREAL *spFindElement(MatrixPtr Matrix, int Row, int Col ); extern spREAL *spGetElement(MatrixPtr, int, int ); extern void *spGetInitInfo( spREAL* ); extern int spGetOnes( MatrixPtr, int, int, int, struct spTemplate* ); extern int spGetQuad( MatrixPtr, int, int, int, int, struct spTemplate* ); extern int spGetSize( MatrixPtr, int ); extern int spInitialize(MatrixPtr, int (*pInit)(spREAL*, void *InitInfo, int, int Col)); extern void spInstallInitInfo( spREAL*, void * ); extern spREAL spLargestElement( MatrixPtr ); extern void spMNA_Preorder( MatrixPtr ); extern spREAL spNorm( MatrixPtr ); extern int spOrderAndFactor(MatrixPtr, spREAL*, spREAL, spREAL, int ); extern int spOriginalCount( MatrixPtr); extern void spPartition( MatrixPtr, int ); extern void spPrint(MatrixPtr, int, int, int ); extern spREAL spPseudoCondition( MatrixPtr ); extern spREAL spRoundoff( MatrixPtr, spREAL ); extern void spScale( MatrixPtr, spREAL*, spREAL* ); extern void spSetComplex( MatrixPtr ); extern void spSetReal( MatrixPtr ); extern void spStripFills( MatrixPtr ); extern void spWhereSingular(MatrixPtr, int*, int* ); extern void spConstMult(MatrixPtr, double); /* Functions with argument lists that are dependent on options. */ extern void spDeterminant ( MatrixPtr, int*, spREAL*, spREAL* ); extern int spFileVector( MatrixPtr, char * , spREAL*, spREAL*); extern void spMultiply( MatrixPtr, spREAL*, spREAL*, spREAL*, spREAL* ); extern void spMultTransposed(MatrixPtr,spREAL*,spREAL*,spREAL*,spREAL*); extern void spSolve( MatrixPtr, spREAL*, spREAL*, spREAL*, spREAL* ); extern void spSolveTransposed(MatrixPtr,spREAL*,spREAL*,spREAL*,spREAL*); #endif /* spOKAY */ tmpk8ny_4pz/src/include/ngspice/inpdefs.h0000644000175000017500000001107013546075722020622 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ #ifndef ngspice_INPDEFS_H #define ngspice_INPDEFS_H /* structure declarations used by either/both input package */ #include "ngspice/gendefs.h" #include "ngspice/ifsim.h" #include "ngspice/inpptree.h" typedef struct INPtables INPtables; typedef struct INPmodel INPmodel; struct INPtab { char *t_ent; struct INPtab *t_next; }; struct INPnTab { char *t_ent; CKTnode *t_node; struct INPnTab *t_next; }; struct INPtables { struct INPtab **INPsymtab; struct INPnTab **INPtermsymtab; int INPsize; int INPtermsize; GENmodel *defAmod; GENmodel *defBmod; GENmodel *defCmod; GENmodel *defDmod; GENmodel *defEmod; GENmodel *defFmod; GENmodel *defGmod; GENmodel *defHmod; GENmodel *defImod; GENmodel *defJmod; GENmodel *defKmod; GENmodel *defLmod; GENmodel *defMmod; GENmodel *defNmod; GENmodel *defOmod; GENmodel *defPmod; GENmodel *defQmod; GENmodel *defRmod; GENmodel *defSmod; GENmodel *defTmod; GENmodel *defUmod; GENmodel *defVmod; GENmodel *defWmod; GENmodel *defYmod; GENmodel *defZmod; }; /* Linked list of scoping information for each netlist line entry */ struct nscope { struct nscope *next; struct card_assoc *subckts; struct modellist *models; }; /* A linked list of netlist line entries, associated for a specific reason */ struct card_assoc { const char *name; struct card *line; struct card_assoc *next; }; /* The linked list of netlist line entries */ struct card { int linenum; int linenum_orig; char *line; char *error; struct card *nextcard; struct card *actualLine; struct nscope *level; }; /* structure used to save models in after they are read during pass 1 */ struct INPmodel { IFuid INPmodName; /* uid of model */ int INPmodType; /* type index of device type */ INPmodel *INPnextModel; /* link to next model */ struct card *INPmodLine; /* pointer to line describing model */ GENmodel *INPmodfast; /* high speed pointer to model for access */ }; /* listing types - used for debug listings */ #define LOGICAL 1 #define PHYSICAL 2 int IFnewUid(CKTcircuit *, IFuid *, IFuid, char *, int, CKTnode **); int IFdelUid(CKTcircuit *, IFuid, int); int INPaName(char *, IFvalue *, CKTcircuit *, int *, char *, GENinstance **, IFsimulator *, int *, IFvalue *); int INPapName(CKTcircuit *, int, JOB *, char *, IFvalue *); void INPcaseFix(char *); char *INPdevParse(char **, CKTcircuit *, int, GENinstance *, double *, int *, INPtables *); char *INPdomodel(CKTcircuit *, struct card *, INPtables *); void INPdoOpts(CKTcircuit *, JOB *, struct card *, INPtables *); char *INPerrCat(char *, char *); char *INPstrCat(char *, char, char *); char *INPerror(int); double INPevaluate(char **, int *, int); char *INPfindLev(char *, int *); char *INPgetMod(CKTcircuit *, char *, INPmodel **, INPtables *); char *INPgetModBin(CKTcircuit *, char *, INPmodel **, INPtables *, char *); int INPgetTok(char **, char **, int); int INPgetNetTok(char **, char **, int); void INPgetTree(char **, INPparseTree **, CKTcircuit *, INPtables *); void INPfreeTree(IFparseTree *); IFvalue *INPgetValue(CKTcircuit *, char **, int, INPtables *); int INPgndInsert(CKTcircuit *, char **, INPtables *, CKTnode **); int INPinsertNofree(char **token, INPtables *tab); int INPinsert(char **, INPtables *); int INPretrieve(char **, INPtables *); int INPremove(char *, INPtables *); INPmodel *INPlookMod(const char *); int INPmakeMod(char *, int, struct card *); char *INPmkTemp(char *); void INPpas1(CKTcircuit *, struct card *, INPtables *); void INPpas2(CKTcircuit *, struct card *, INPtables *, TSKtask *); void INPpas3( CKTcircuit *, struct card *, INPtables *, TSKtask *, IFparm *, int); int INPpName(char *, IFvalue *, CKTcircuit *, int, GENinstance *); int INPtermInsert(CKTcircuit *, char **, INPtables *, CKTnode **); int INPmkTerm(CKTcircuit *, char **, INPtables *, CKTnode **); int INPtypelook(char *); int INP2dot(CKTcircuit *, INPtables *, struct card *, TSKtask *, CKTnode *); INPtables *INPtabInit(int); void INPkillMods(void); void INPtabEnd(INPtables *); char *INPfindVer(char *line, char *version); int INPgetStr(char **line, char **token, int gobble); int INPgetTitle(CKTcircuit **ckt, struct card **data); int INPgetUTok(char **line, char **token, int gobble); int INPgetU2Tok(char **line, char **token, int gobble); int INPremTerm(char *token, INPtables *tab); #endif tmpk8ny_4pz/src/include/ngspice/ipctiein.h0000644000175000017500000000502613546075722021002 0ustar carstencarsten/*============================================================================ FILE IPCtiein.h MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY Provides a protocol independent interface between the simulator and the IPC method used to interface to CAE packages. INTERFACES REFERENCED FILES None. NON-STANDARD FEATURES None. ============================================================================*/ #ifndef ngspice_IPCTIEIN_H #define ngspice_IPCTIEIN_H #include "ngspice/ipc.h" #include "ngspice/ipcproto.h" #define IPC_STDOUT_FILE_NAME "/usr/tmp/atesse_xspice.out" #define IPC_STDERR_FILE_NAME "/usr/tmp/atesse_xspice.err" /* Ipc_Vtrans_t is used by functions that return results to translate voltage source names to the names of the devices they monitor. This table is built from #VTRANS cards in the incoming deck and is provided for ATESSE 1.0 compatibility. */ typedef struct { int size; /* Size of arrays */ char **vsrc_name; /* Array of voltage source name prefixes */ char **device_name; /* Array of device names the vsources map to */ } Ipc_Vtrans_t; /* Ipc_Tiein_t is used by the SPICE mods that take care of interprocess communications activities. */ typedef struct { Ipc_Boolean_t enabled; /* True if we are using IPC */ Ipc_Mode_t mode; /* INTERACTIVE or BATCH mode */ Ipc_Anal_t anal_type; /* DCOP, AC, ... mode */ Ipc_Boolean_t syntax_error; /* True if error occurred during parsing */ Ipc_Boolean_t run_error; /* True if error occurred during simulation */ Ipc_Boolean_t errchk_sent; /* True if #ERRCHK has been sent */ Ipc_Boolean_t returni; /* True if simulator should return currents */ double mintime; /* Minimum time between timepoints returned */ double last_time; /* Last timepoint returned */ double cpu_time; /* CPU time used during simulation */ Ipc_Boolean_t *send; /* Used by OUTinterface to determine what to send */ char *log_file; /* Path to write log file */ Ipc_Vtrans_t vtrans; /* Used by OUTinterface to translate v sources */ Ipc_Boolean_t stop_analysis; /* True if analysis should be terminated */ } Ipc_Tiein_t; extern Ipc_Tiein_t g_ipc; extern bool wantevtdata; #endif tmpk8ny_4pz/src/include/ngspice/sperror.h0000644000175000017500000000305113546075722020666 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #ifndef ngspice_SPERROR_H #define ngspice_SPERROR_H #include "ngspice/iferrmsg.h" /* * definitions for error codes returned by SPICE3 routines. */ #define E_INTERN E_PANIC #define E_BADMATRIX (E_PRIVATE+1)/* ill-formed matrix can't be decomposed */ #define E_SINGULAR (E_PRIVATE+2) /* matrix is singular */ #define E_ITERLIM (E_PRIVATE+3) /* iteration limit reached,operation aborted */ #define E_ORDER (E_PRIVATE+4) /* integration order not supported */ #define E_METHOD (E_PRIVATE+5) /* integration method not supported */ #define E_TIMESTEP (E_PRIVATE+6) /* timestep too small */ #define E_XMISSIONLINE (E_PRIVATE+7) /* transmission line in pz analysis */ #define E_MAGEXCEEDED (E_PRIVATE+8) /* pole-zero magnitude too large */ #define E_SHORT (E_PRIVATE+9) /* pole-zero input or output shorted */ #define E_INISOUT (E_PRIVATE+10) /* pole-zero input is output */ #define E_ASKCURRENT (E_PRIVATE+11) /* ac currents cannot be ASKed */ #define E_ASKPOWER (E_PRIVATE+12) /* ac powers cannot be ASKed */ #define E_NODUNDEF (E_PRIVATE+13) /* node not defined in noise anal */ #define E_NOACINPUT (E_PRIVATE+14) /* no ac input src specified for noise */ #define E_NOF2SRC (E_PRIVATE+15) /* no source at F2 for IM disto analysis */ #define E_NODISTO (E_PRIVATE+16) /* no distortion analysis - NODISTO defined */ #define E_NONOISE (E_PRIVATE+17) /* no noise analysis - NONOISE defined */ const char *SPerror(int type); #endif tmpk8ny_4pz/src/include/ngspice/dllitf.h0000644000175000017500000000745613546075722020465 0ustar carstencarsten/* DLL load interface (c)2000 Arpad Buermen */ #ifndef ngspice_DLLITF_H #define ngspice_DLLITF_H #include "ngspice/mifproto.h" #include "ngspice/cmproto.h" /* This structure contains pointers to core SPICE OPUS functions used in CMs and UDNs. A pointer to this structure is passed to the dll when the dll is loaded. */ struct coreInfo_t { /* MIF stuff */ void ((*dllitf_MIF_INP2A)(CKTcircuit *, INPtables *, struct card *)); char * ((*dllitf_MIFgetMod)(CKTcircuit *, char *, INPmodel **, INPtables *)); IFvalue * ((*dllitf_MIFgetValue)(CKTcircuit *, char **, int, INPtables *, char **)); int ((*dllitf_MIFsetup)(SMPmatrix *, GENmodel *, CKTcircuit *, int *)); int ((*dllitf_MIFunsetup)(GENmodel *, CKTcircuit *)); int ((*dllitf_MIFload)(GENmodel *, CKTcircuit *)); int ((*dllitf_MIFmParam)(int, IFvalue *, GENmodel *)); int ((*dllitf_MIFask)(CKTcircuit *, GENinstance *, int, IFvalue *, IFvalue *)); int ((*dllitf_MIFmAsk)(CKTcircuit *, GENmodel *, int, IFvalue *)); int ((*dllitf_MIFtrunc)(GENmodel *, CKTcircuit *, double *)); int ((*dllitf_MIFconvTest)(GENmodel *, CKTcircuit *)); int ((*dllitf_MIFdelete)(GENinstance *)); int ((*dllitf_MIFmDelete)(GENmodel *)); void ((*dllitf_MIFdestroy)(void)); char * ((*dllitf_MIFgettok)(char **)); char * ((*dllitf_MIFget_token)(char **, Mif_Token_Type_t *)); Mif_Cntl_Src_Type_t ((*dllitf_MIFget_cntl_src_type)(Mif_Port_Type_t, Mif_Port_Type_t)); char * ((*dllitf_MIFcopy)(char *)); /* CM stuff */ void ((*dllitf_cm_climit_fcn)(double, double, double, double, double, double, double, double, int, double *, double *, double *, double *)); void ((*dllitf_cm_smooth_corner)(double, double, double, double, double, double, double *, double *)); void ((*dllitf_cm_smooth_discontinuity)(double, double, double, double, double, double *, double *)); double ((*dllitf_cm_smooth_pwl)(double, double *, double *, int, double, double *)); double ((*dllitf_cm_analog_ramp_factor)(void)); void ((*dllitf_cm_analog_alloc)(int, int)); void * ((*dllitf_cm_analog_get_ptr)(int, int)); int ((*dllitf_cm_analog_integrate)(double, double *, double *)); int ((*dllitf_cm_analog_converge)(double *)); int ((*dllitf_cm_analog_set_temp_bkpt)(double)); int ((*dllitf_cm_analog_set_perm_bkpt)(double)); void ((*dllitf_cm_analog_not_converged)(void)); void ((*dllitf_cm_analog_auto_partial)(void)); void ((*dllitf_cm_event_alloc)(int, int)); void * ((*dllitf_cm_event_get_ptr)(int, int)); int ((*dllitf_cm_event_queue)(double)); char * ((*dllitf_cm_message_get_errmsg)(void)); int ((*dllitf_cm_message_send)(char *)); double ((*dllitf_cm_netlist_get_c)(void)); double ((*dllitf_cm_netlist_get_l)(void)); Complex_t ((*dllitf_cm_complex_set)(double, double)); Complex_t ((*dllitf_cm_complex_add)(Complex_t, Complex_t)); Complex_t ((*dllitf_cm_complex_subtract)(Complex_t, Complex_t)); Complex_t ((*dllitf_cm_complex_multiply)(Complex_t, Complex_t)); Complex_t ((*dllitf_cm_complex_divide)(Complex_t, Complex_t)); char * ((*dllitf_cm_get_path)(void)); CKTcircuit *((*dllitf_cm_get_circuit)(void)); FILE * ((*dllitf_cm_stream_out)(void)); FILE * ((*dllitf_cm_stream_in)(void)); FILE * ((*dllitf_cm_stream_err)(void)); /*Other stuff*/ void * ((*dllitf_malloc_pj)(size_t)); void * ((*dllitf_calloc_pj)(size_t, size_t)); void * ((*dllitf_realloc_pj)(const void *, size_t)); void ((*dllitf_free_pj)(const void *)); void * ((*dllitf_tmalloc)(size_t)); void * ((*dllitf_trealloc)(const void *, size_t)); void ((*dllitf_txfree)(const void *)); }; #endif tmpk8ny_4pz/src/include/ngspice/mifproto.h0000644000175000017500000000472313546075722021040 0ustar carstencarsten#ifndef ngspice_MIFPROTO_H #define ngspice_MIFPROTO_H /* =========================================================================== FILE MIFproto.h MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains ANSI C function prototypes for functions in the MIF package. INTERFACES None. REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ #include "ngspice/ifsim.h" #include "ngspice/inpdefs.h" #include "ngspice/smpdefs.h" #include "ngspice/cktdefs.h" #include "ngspice/miftypes.h" extern void MIF_INP2A( CKTcircuit *ckt, /* circuit structure to put mod/inst structs in */ INPtables *tab, /* symbol table for node names, etc. */ struct card *current /* the card we are to parse */ ); extern char * MIFgetMod( CKTcircuit *ckt, char *name, INPmodel **model, INPtables *tab ); extern IFvalue * MIFgetValue( CKTcircuit *ckt, char **line, int type, INPtables *tab, char **err ); extern int MIFsetup( SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *state ); extern int MIFunsetup( GENmodel *inModel, CKTcircuit *ckt ); extern int MIFload( GENmodel *inModel, CKTcircuit *ckt ); extern int MIFmParam( int param_index, IFvalue *value, GENmodel *inModel ); extern int MIFask( CKTcircuit *ckt, GENinstance *inst, int param_index, IFvalue *value, IFvalue *select ); extern int MIFmAsk( CKTcircuit *ckt, GENmodel *inModel, int param_index, IFvalue *value ); extern int MIFtrunc( GENmodel *inModel, CKTcircuit *ckt, double *timeStep ); extern int MIFconvTest( GENmodel *inModel, CKTcircuit *ckt ); extern int MIFdelete( GENinstance *inst ); extern int MIFmDelete( GENmodel *gen_model ); extern void MIFdestroy( void ); extern char *MIFgettok( char **s ); extern char *MIFget_token( char **s, Mif_Token_Type_t *type ); extern Mif_Cntl_Src_Type_t MIFget_cntl_src_type( Mif_Port_Type_t in_port_type, Mif_Port_Type_t out_port_type ); extern char *MIFcopy(char *); #endif tmpk8ny_4pz/src/include/ngspice/acdefs.h0000644000175000017500000000167313546075722020427 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #ifndef ngspice_ACDEFS_H #define ngspice_ACDEFS_H #include "ngspice/jobdefs.h" /* structure used to describe an AC analysis to be performed */ typedef struct { int JOBtype; JOB *JOBnextJob; /* pointer to next thing to do */ char *JOBname; /* name of this job */ double ACstartFreq; double ACstopFreq; double ACfreqDelta; /* multiplier for decade/octave stepping, */ /* step for linear steps. */ double ACsaveFreq; /* frequency at which we left off last time*/ int ACstepType; /* values described below */ int ACnumberSteps; } ACAN; /* available step types: XXX should be somewhere else */ enum { DECADE = 1, OCTAVE, LINEAR, }; enum { AC_DEC = 1, AC_OCT, AC_LIN, AC_START, AC_STOP, AC_STEPS, }; #endif tmpk8ny_4pz/src/include/ngspice/evt.h0000644000175000017500000003474613546075722020007 0ustar carstencarsten#ifndef ngspice_EVT_H #define ngspice_EVT_H /* =========================================================================== FILE EVT.h MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the definition of the evt data structure and all its substructures. The single evt structure is housed inside of the main 3C1 circuit structure 'ckt' and contains virtually all information about the event-driven simulation. INTERFACES None. REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ #include "ngspice/mifdefs.h" #include "ngspice/mifcmdat.h" #include "ngspice/miftypes.h" #include "ngspice/evttypes.h" /* ************** */ /* Info structure */ /* ************** */ struct Evt_Output_Info { Evt_Output_Info_t *next; /* the next in the linked list */ int node_index; /* index into node info struct for this output */ int output_subindex; /* index into output data in node data struct */ int inst_index; /* Index of instance the port is on */ int port_index; /* Index of port the output corresponds to */ }; struct Evt_Port_Info { Evt_Port_Info_t *next; /* the next in the linked list of node info */ int inst_index; /* Index of instance the port is on */ int node_index; /* index of node the port is connected to */ char *node_name; /* name of node port is connected to */ char *inst_name; /* instance name */ char *conn_name; /* connection name on instance */ int port_num; /* port number of instance connector */ }; struct Evt_Inst_Index { Evt_Inst_Index_t *next; /* the next in the linked list */ int index; /* the value of the index */ }; struct Evt_Node_Info { Evt_Node_Info_t *next; /* the next in the linked list */ char *name; /* Name of node in deck */ int udn_index; /* Index of the node type */ Mif_Boolean_t invert; /* True if need to make inverted copy */ int num_ports; /* Number of ports connected to this node */ int num_outputs; /* Number of outputs connected to this node */ int num_insts; /* The number of insts receiving node as input */ Evt_Inst_Index_t *inst_list; /* Linked list of indexes of these instances */ }; struct Evt_Inst_Info { Evt_Inst_Info_t *next; /* the next in the linked list of node info */ MIFinstance *inst_ptr; /* Pointer to MIFinstance struct for this instance */ }; struct Evt_Info { Evt_Inst_Info_t *inst_list; /* static info about event/hybrid instances */ Evt_Node_Info_t *node_list; /* static info about event nodes */ Evt_Port_Info_t *port_list; /* static info about event ports */ Evt_Output_Info_t *output_list; /* static info about event outputs */ int *hybrid_index; /* vector of inst indexs for hybrids */ Evt_Inst_Info_t **inst_table; /* vector of pointers to elements in inst_list */ Evt_Node_Info_t **node_table; /* vector of pointers to elements in node_list */ Evt_Port_Info_t **port_table; /* vector of pointers to elements in port_list */ Evt_Output_Info_t **output_table; /* vector of pointers to elements in output_list */ }; /* *************** */ /* Queue structure */ /* *************** */ struct Evt_Inst_Event { Evt_Inst_Event_t *next; /* the next in the linked list */ double event_time; /* Time for this event to happen */ double posted_time; /* Time at which event was entered in queue */ }; struct Evt_Inst_Queue { Evt_Inst_Event_t **head; /* Beginning of linked lists */ Evt_Inst_Event_t ***current; /* Beginning of pending events */ Evt_Inst_Event_t ***last_step; /* Values of 'current' at last accepted timepoint */ Evt_Inst_Event_t **free; /* Linked lists of items freed by backups */ double last_time; /* Time at which last_step was set */ double next_time; /* Earliest next event time in queue */ int num_modified; /* Number modified since last accepted timepoint */ int *modified_index; /* Indexes of modified instances */ Mif_Boolean_t *modified; /* Flags used to prevent multiple entries */ int num_pending; /* Count of number of pending events in lists */ int *pending_index; /* Indexes of pending events */ Mif_Boolean_t *pending; /* Flags used to prevent multiple entries */ int num_to_call; /* Count of number of instances that need to be called */ int *to_call_index; /* Indexes of instances to be called */ Mif_Boolean_t *to_call; /* Flags used to prevent multiple entries */ }; struct Evt_Node_Queue { int num_to_eval; /* Count of number of nodes that need to be evaluated */ int *to_eval_index; /* Indexes of nodes to be evaluated */ Mif_Boolean_t *to_eval; /* Flags used to prevent multiple entries */ int num_changed; /* Count of number of nodes that changed */ int *changed_index; /* Indexes of nodes that changed */ Mif_Boolean_t *changed; /* Flags used to prevent multiple entries */ }; struct Evt_Output_Event { Evt_Output_Event_t *next; /* the next in the linked list */ double event_time; /* Time for this event to happen */ double posted_time; /* Time at which event was entered in queue */ Mif_Boolean_t removed; /* True if event has been deactivated */ double removed_time; /* Time at which event was deactivated */ void *value; /* The delayed value sent to this output */ }; struct Evt_Output_Queue { Evt_Output_Event_t **head; /* Beginning of linked lists */ Evt_Output_Event_t ***current; /* Beginning of pending events */ Evt_Output_Event_t ***last_step; /* Values of 'current' at last accepted timepoint */ Evt_Output_Event_t **free; /* Linked lists of items freed by backups */ double last_time; /* Time at which last_step was set */ double next_time; /* Earliest next event time in queue */ int num_modified; /* Number modified since last accepted timepoint */ int *modified_index; /* Indexes of modified outputs */ Mif_Boolean_t *modified; /* Flags used to prevent multiple entries */ int num_pending; /* Count of number of pending events in lists */ int *pending_index; /* Indexes of pending events */ Mif_Boolean_t *pending; /* Flags used to prevent multiple entries */ int num_changed; /* Count of number of outputs that changed */ int *changed_index; /* Indexes of outputs that changed */ Mif_Boolean_t *changed; /* Flags used to prevent multiple entries */ }; struct Evt_Queue { Evt_Inst_Queue_t inst; /* dynamic queue for instances */ Evt_Node_Queue_t node; /* dynamic queue of changing nodes */ Evt_Output_Queue_t output; /* dynamic queue of delayed outputs */ }; /* ************** */ /* Data structure */ /* ************** */ struct Evt_Node { Evt_Node_t *next; /* pointer to next in linked list */ Mif_Boolean_t op; /* true if computed from op analysis */ double step; /* DC step or time at which data was computed */ void **output_value; /* Array of outputs posted to this node */ void *node_value; /* Resultant computed from output values */ void *inverted_value; /* Inverted copy of node_value */ }; struct Evt_Node_Data { Evt_Node_t **head; /* Beginning of linked lists */ Evt_Node_t ***tail; /* Location of last item added to list */ Evt_Node_t ***last_step; /* 'tail' at last accepted timepoint */ Evt_Node_t **free; /* Linked lists of items freed by backups */ int num_modified; /* Number modified since last accepted timepoint */ int *modified_index; /* Indexes of modified nodes */ Mif_Boolean_t *modified; /* Flags used to prevent multiple entries */ Evt_Node_t *rhs; /* Location where model outputs are placed */ Evt_Node_t *rhsold; /* Location where model inputs are retrieved */ double *total_load; /* Location where total load inputs are retrieved */ }; struct Evt_State { Evt_State_t *next; /* Pointer to next state */ Evt_State_t *prev; /* Pointer to previous state */ double step; /* Time at which state was assigned (0 for DC) */ void *block; /* Block of memory holding all states on inst */ }; struct Evt_State_Desc { Evt_State_Desc_t *next; /* Pointer to next description */ int tag; /* Tag for this state */ int size; /* Size of this state */ int offset; /* Offset of this state into the state block */ }; struct Evt_State_Data { Evt_State_t **head; /* Beginning of linked lists */ Evt_State_t ***tail; /* Location of last item added to list */ Evt_State_t ***last_step; /* 'tail' at last accepted timepoint */ Evt_State_t **free; /* Linked lists of items freed by backups */ int num_modified; /* Number modified since last accepted timepoint */ int *modified_index; /* List of indexes modified */ Mif_Boolean_t *modified; /* Flags used to prevent multiple entries */ int *total_size; /* Total bytes for all states allocated */ Evt_State_Desc_t **desc; /* Lists of description structures */ }; struct Evt_Msg { Evt_Msg_t *next; /* Pointer to next state */ Mif_Boolean_t op; /* true if output from op analysis */ double step; /* DC step or time at which message was output */ char *text; /* The value of the message text */ int port_index; /* The index of the port from which the message came */ }; struct Evt_Msg_Data { Evt_Msg_t **head; /* Beginning of linked lists */ Evt_Msg_t ***tail; /* Location of last item added to list */ Evt_Msg_t ***last_step; /* 'tail' at last accepted timepoint */ Evt_Msg_t **free; /* Linked lists of items freed by backups */ int num_modified; /* Number modified since last accepted timepoint */ int *modified_index; /* List of indexes modified */ Mif_Boolean_t *modified; /* Flags used to prevent multiple entries */ }; struct Evt_Statistic { int op_alternations; /* Total alternations between event and analog */ int op_load_calls; /* Total load calls in DCOP analysis */ int op_event_passes; /* Total passes through event iteration loop */ int tran_load_calls; /* Total inst calls in transient analysis */ int tran_time_backups; /* Number of transient timestep cuts */ }; struct Evt_Data { Evt_Node_Data_t *node; /* dynamic event solution vector */ Evt_State_Data_t *state; /* dynamic event instance state data */ Evt_Msg_Data_t *msg; /* dynamic event message data */ Evt_Statistic_t *statistics; /* Statistics for events, etc. */ }; /* **************** */ /* Counts structure */ /* **************** */ struct Evt_Count { int num_insts; /* number of event/hybrid instances parsed */ int num_hybrids; /* number of hybrids parsed */ int num_hybrid_outputs; /* number of outputs on all hybrids parsed */ int num_nodes; /* number of event nodes parsed */ int num_ports; /* number of event ports parsed */ int num_outputs; /* number of event outputs parsed */ }; /* **************** */ /* Limits structure */ /* **************** */ struct Evt_Limit { int max_event_passes; /* maximum loops in attempting convergence of event nodes */ int max_op_alternations; /* maximum loops through event/analog alternation */ }; /* ************** */ /* Jobs structure */ /* ************** */ struct Evt_Job { int num_jobs; /* Number of jobs run */ char **job_name; /* Names of different jobs */ Evt_Node_Data_t **node_data; /* node_data for different jobs */ Evt_State_Data_t **state_data; /* state_data for different jobs */ Evt_Msg_Data_t **msg_data; /* messages for different jobs */ Evt_Statistic_t **statistics; /* Statistics for different jobs */ }; /* ***************** */ /* Options structure */ /* ***************** */ struct Evt_Option { Mif_Boolean_t op_alternate; /* Alternate analog/event solutions in OP analysis */ }; /* ****************** */ /* Main evt structure */ /* ****************** */ struct Evt_Ckt_Data { Evt_Count_t counts; /* Number of insts, nodes, etc. */ Evt_Info_t info; /* Static info about insts, etc. */ Evt_Queue_t queue; /* Dynamic queued events */ Evt_Data_t data; /* Results and state data */ Evt_Limit_t limits; /* Iteration limits, etc. */ Evt_Job_t jobs; /* Data held from multiple job runs */ Evt_Option_t options; /* Data input on .options cards */ }; #endif tmpk8ny_4pz/src/include/ngspice/modldefs.h0000644000175000017500000000260413546075722020772 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors : 1991 David Gates **********/ /* Member of CIDER device simulator * Version: 1b1 */ #ifndef ngspice_MODLDEFS_H #define ngspice_MODLDEFS_H /* Data Structures and Definitions for Device Simulation Cards */ typedef struct sMODLcard { struct sMODLcard *MODLnextCard; int MODLbandGapNarrowing; int MODLtempDepMobility; int MODLconcDepMobility; int MODLfieldDepMobility; int MODLtransDepMobility; int MODLsurfaceMobility; int MODLmatchingMobility; int MODLsrh; int MODLconcDepLifetime; int MODLauger; int MODLavalancheGen; unsigned int MODLbandGapNarrowingGiven : 1; unsigned int MODLtempDepMobilityGiven : 1; unsigned int MODLconcDepMobilityGiven : 1; unsigned int MODLfieldDepMobilityGiven : 1; unsigned int MODLtransDepMobilityGiven : 1; unsigned int MODLsurfaceMobilityGiven : 1; unsigned int MODLmatchingMobilityGiven : 1; unsigned int MODLsrhGiven : 1; unsigned int MODLconcDepLifetimeGiven : 1; unsigned int MODLaugerGiven : 1; unsigned int MODLavalancheGenGiven : 1; } MODLcard; /* MODL parameters */ enum { MODL_BGNW = 1, MODL_TEMPMOB, MODL_CONCMOB, MODL_FIELDMOB, MODL_TRANSMOB, MODL_SURFMOB, MODL_MATCHMOB, MODL_SRH, MODL_CONCTAU, MODL_AUGER, MODL_AVAL, }; #endif tmpk8ny_4pz/src/include/ngspice/cpextern.h0000644000175000017500000001064513546075722021031 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1986 Wayne A. Christopher, U. C. Berkeley CAD Group Modified: 2000 AlansFixes **********/ /* * Definitions for all external symbols in CP. */ #ifndef ngspice_CPEXTERN_H #define ngspice_CPEXTERN_H #include "ngspice/wordlist.h" #include "ngspice/bool.h" #include struct ccom; /* com_alias.c */ extern struct alias *cp_aliases; extern void cp_paliases(char *word); extern void cp_setalias(char *word, wordlist *wlist); extern void cp_unalias(char *word); extern wordlist *cp_doalias(wordlist *wlist); /* backquote.c */ extern char cp_back; extern wordlist *cp_bquote(wordlist *wlist); /* complete.c */ extern bool cp_nocc; extern bool cp_comlook(char *word); extern struct ccom *cp_kwswitch(int kw_class, struct ccom *tree); extern void cp_addcomm(char *word, long int bits0, long int bits1, long int bits2, long int bits3); extern void cp_addkword(int kw_class, char *word); extern void cp_ccom(wordlist *wlist, char *buf, bool esc); extern void cp_ccon(bool on); extern void cp_ccrestart(bool kwords); extern void cp_remcomm(char *word); extern void cp_remkword(int kw_class, const char *word); extern void cp_destroy_keywords(void); extern wordlist *cp_cctowl(struct ccom *stuff); /* cshpar.c */ extern FILE *cp_in; extern FILE *cp_out; extern FILE *cp_err; extern FILE *cp_curin; extern FILE *cp_curout; extern FILE *cp_curerr; extern bool cp_debug; extern char cp_amp; extern char cp_gt; extern char cp_lt; extern void cp_ioreset(void); extern wordlist *cp_redirect(wordlist *wlist); extern wordlist *cp_parse(char *string); /* control.c */ extern bool cp_cwait; extern bool cp_dounixcom; extern char *cp_csep; extern char * get_alt_prompt(void); extern int cp_evloop(char *string); extern void cp_resetcontrol(void); extern void cp_toplevel(void); extern void cp_popcontrol(void); extern void cp_pushcontrol(void); /* glob.c */ extern bool cp_globmatch(char *p, char *s); extern char *cp_tildexpand(char *string); extern char cp_cbrac; extern char cp_ccurl; extern char cp_comma; extern char cp_huh; extern char cp_obrac; extern char cp_ocurl; extern char cp_star; extern char cp_til; extern wordlist *cp_doglob(wordlist *wlist); /* history.c */ extern bool cp_didhsubst; extern char cp_bang; extern char cp_hat; extern int cp_maxhistlength; extern struct histent *cp_lastone; extern void cp_addhistent(int event, wordlist *wlist); extern wordlist *cp_histsubst(wordlist *wlist); /* lexical.c */ extern FILE *cp_inp_cur; extern bool cp_bqflag; extern bool cp_interactive; extern char *cp_altprompt; extern char *cp_promptstring; extern int cp_event; extern wordlist *cp_lexer(char *string); extern int inchar(FILE *fp); /* modify.c */ extern char cp_chars[]; extern void cp_init(void); /* output.c */ extern bool out_moremode; extern bool out_isatty; extern void out_init(void); #ifdef __GNUC__ extern void out_printf(char *fmt, ...) __attribute__ ((format (__printf__, 1, 2))); #else extern void out_printf(char *fmt, ...); #endif extern void out_vprintf(const char *fmt, va_list ap); extern void out_send(char *string); /* quote.c */ extern char *cp_unquote(const char *string); extern void cp_quoteword(char *str); extern void cp_striplist(wordlist *wlist); extern void cp_wstrip(char *str); /* unixcom.c */ extern bool cp_unixcom(wordlist *wlist); extern void cp_hstat(void); void cp_rehash(char *pathlist, bool docc); /* variable.c */ enum cp_types { CP_BOOL, CP_NUM, CP_REAL, CP_STRING, CP_LIST }; extern bool cp_ignoreeof; extern bool cp_noclobber; extern bool cp_noglob; extern bool cp_nonomatch; extern char cp_dol; extern void cp_remvar(char *varname); extern void cp_vset(char *varname, enum cp_types type, void *value); extern struct variable *cp_setparse(wordlist *wl); extern wordlist *vareval(char *string); extern char *span_var_expr(char *t); /* var2.c */ extern void cp_vprint(void); extern bool cp_getvar(char *name, enum cp_types type, void *retval, size_t rsize); /* cpinterface.c etc -- stuff CP needs from FTE */ extern bool cp_istrue(wordlist *wl); extern bool cp_oddcomm(char *s, wordlist *wlist); extern void cp_doquit(void); extern void cp_periodic(void); extern void ft_cpinit(void); extern struct comm *cp_coms; extern char *cp_program; extern struct variable *cp_enqvar(char *word, int *tbfreed); extern struct variable *cp_usrvars(void); int cp_usrset(struct variable *var, bool isset); extern void fatal(void); #endif tmpk8ny_4pz/src/include/ngspice/ftedefs.h0000644000175000017500000000572613546075722020625 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ /* * General front end stuff. */ #ifndef ngspice_FTEDEFS_H #define ngspice_FTEDEFS_H #define DEF_WIDTH 80 /* Line printer width. */ #define DEF_HEIGHT 60 /* Line printer height. */ #define IPOINTMIN 20 /* When we start plotting incremental plots. */ #include "ngspice/fteparse.h" #include "ngspice/fteinp.h" #include "ngspice/fteoptdefs.h" struct ccom; struct save_info { char *name; IFuid analysis; int used; }; /* The circuits that are currently available to the user. */ struct circ { char *ci_name; /* What the circuit can be called. */ CKTcircuit *ci_ckt; /* The CKTcircuit structure. */ INPtables *ci_symtab; /* The INP symbol table. */ INPmodel *ci_modtab; /* The INP model table. */ struct dbcomm *ci_dbs; /* The database storing save, iplot, stop data */ struct card *ci_deck; /* The input deck. */ struct card *ci_origdeck; /* The input deck, before subckt expansion. */ struct card *ci_mcdeck; /* The compacted input deck, used by mc_source */ struct card *ci_options; /* The .option cards from the deck... */ struct card *ci_meas; /* .measure commands to run after simulation */ struct card *ci_param; /* .param statements found in deck */ struct variable *ci_vars; /* ... and the parsed versions. */ bool ci_inprogress; /* We are in a break now. */ bool ci_runonce; /* So com_run can to a reset if necessary... */ wordlist *ci_commands; /* Things to do when this circuit is done. */ struct circ *ci_next; /* The next in the list. */ struct ccom *ci_nodes; /* ccom structs for the nodes... */ struct ccom *ci_devices; /* and devices in the circuit. */ char *ci_filename; /* Where this circuit came from. */ TSKtask *ci_defTask; /* default task for this circuit */ TSKtask *ci_specTask; /* special task for command line jobs */ TSKtask *ci_curTask; /* most recent task for this circuit */ JOB *ci_defOpt; /* default options anal. for this circuit */ JOB *ci_specOpt; /* special options anal. for command line jobs */ JOB *ci_curOpt; /* most recent options anal. for the circuit */ char *ci_last_an; /* name of last analysis run */ int ci_dicos; /* index to the numparam dicoS structure for this circuit */ struct pt_temper *modtlist; /* all expressions with 'temper' in .model lines */ struct pt_temper *devtlist; /* all expressions with 'temper' in device instantiation lines */ FTESTATistics *FTEstats; /* Statistics for the front end */ } ; #define mylog10(xx) (((xx) > 0.0) ? log10(xx) : (- log10(HUGE))) #include "ngspice/fteext.h" #endif tmpk8ny_4pz/src/include/ngspice/typedefs.h0000644000175000017500000000165613546075722021026 0ustar carstencarsten/* * forward declaration of important structs * and central typedefs which are not allowed to be repeated */ #ifndef ngspice_TYPEDEFS_H #define ngspice_TYPEDEFS_H typedef struct CKTcircuit CKTcircuit; typedef struct CKTnode CKTnode; typedef struct GENinstance GENinstance; typedef struct GENmodel GENmodel; typedef struct IFparm IFparm; typedef union IFvalue IFvalue; typedef struct IFparseTree IFparseTree; typedef struct IFcomplex IFcomplex; typedef struct IFdevice IFdevice; typedef struct IFanalysis IFanalysis; typedef struct IFsimulator IFsimulator; typedef struct IFfrontEnd IFfrontEnd; typedef char *IFuid; typedef struct TFan TFan; typedef struct graph GRAPH; struct dbcomm; typedef struct PZtrial PZtrial; typedef struct PZAN PZAN; typedef struct SENstruct SENstruct; typedef struct TSKtask TSKtask; typedef struct JOB JOB; typedef struct SPICEanalysis SPICEanalysis; typedef struct runDesc runDesc; #endif tmpk8ny_4pz/src/include/ngspice/fftext.h0000644000175000017500000001163313546075722020477 0ustar carstencarsten/******************************************************************* This file extends the fftlib with calls to maintain the cosine and bit reversed tables for you (including mallocs and free's). Call the init routine for each fft size you will be using. Then you can call the fft routines below which will make the fftlib library call with the appropriate tables passed. When you are done with all fft's you can call fftfree to release the storage for the tables. Note that you can call fftinit repeatedly with the same size, the extra calls will be ignored. So, you could make a macro to call fftInit every time you call ffts. For example you could have someting like: #define FFT(a,n) if(!fftInit(roundtol(LOG2(n)))) ffts(a,roundtol(LOG2(n)),1);else printf("fft error\n"); *******************************************************************/ int fftInit(int M); // malloc and init cosine and bit reversed tables for a given size fft, ifft, rfft, rifft /* INPUTS */ /* M = log2 of fft size (ex M=10 for 1024 point fft) */ /* OUTPUTS */ /* private cosine and bit reversed tables */ void fftFree(void); // release storage for all private cosine and bit reversed tables int fft_windows(char *window, double *win, double *time, int length, double maxt, double span, int order); // computes some popular window functions void ffts(double *data, int M, int Rows); /* Compute in-place complex fft on the rows of the input array */ /* INPUTS */ /* *ioptr = input data array */ /* M = log2 of fft size (ex M=10 for 1024 point fft) */ /* Rows = number of rows in ioptr array (use 1 for Rows for a single fft) */ /* OUTPUTS */ /* *ioptr = output data array */ void iffts(double *data, int M, int Rows); /* Compute in-place inverse complex fft on the rows of the input array */ /* INPUTS */ /* *ioptr = input data array */ /* M = log2 of fft size (ex M=10 for 1024 point fft) */ /* Rows = number of rows in ioptr array (use 1 for Rows for a single fft) */ /* OUTPUTS */ /* *ioptr = output data array */ void rffts(double *data, int M, int Rows); /* Compute in-place real fft on the rows of the input array */ /* The result is the complex spectra of the positive frequencies */ /* except the location for the first complex number contains the real */ /* values for DC and Nyquest */ /* See rspectprod for multiplying two of these spectra together- ex. for fast convolution */ /* INPUTS */ /* *ioptr = real input data array */ /* M = log2 of fft size (ex M=10 for 1024 point fft) */ /* Rows = number of rows in ioptr array (use 1 for Rows for a single fft) */ /* OUTPUTS */ /* *ioptr = output data array in the following order */ /* Re(x[0]), Re(x[N/2]), Re(x[1]), Im(x[1]), Re(x[2]), Im(x[2]), ... Re(x[N/2-1]), Im(x[N/2-1]). */ void riffts(double *data, int M, int Rows); /* Compute in-place real ifft on the rows of the input array */ /* data order as from rffts */ /* INPUTS */ /* *ioptr = input data array in the following order */ /* M = log2 of fft size (ex M=10 for 1024 point fft) */ /* Re(x[0]), Re(x[N/2]), Re(x[1]), Im(x[1]), Re(x[2]), Im(x[2]), ... Re(x[N/2-1]), Im(x[N/2-1]). */ /* Rows = number of rows in ioptr array (use 1 for Rows for a single fft) */ /* OUTPUTS */ /* *ioptr = real output data array */ void rspectprod(double *data1, double *data2, double *outdata, int N); // When multiplying a pair of spectra from rfft care must be taken to multiply the // two real values seperately from the complex ones. This routine does it correctly. // the result can be stored in-place over one of the inputs /* INPUTS */ /* *data1 = input data array first spectra */ /* *data2 = input data array second spectra */ /* N = fft input size for both data1 and data2 */ /* OUTPUTS */ /* *outdata = output data array spectra */ // The following is FYI //Note that most of the fft routines require full matrices, ie Rsiz==Ncols //This is how I like to define a real matrix: //struct matrix { // real matrix // double *d; // pointer to data // int Nrows; // number of rows in the matrix // int Ncols; // number of columns in the matrix (can be less than Rsiz) // int Rsiz; // number of doubles from one row to the next //}; //typedef struct matrix matrix; // CACHEFILLMALLOC and CEILCACHELINE can be used instead of malloc to make // arrays that start exactly on a cache line start. // First we CACHEFILLMALLOC a void * (use this void * when free'ing), // then we set our array pointer equal to the properly cast CEILCACHELINE of this void * // example: // aInit = CACHEFILLMALLOC( NUMFLOATS*sizeof(float) ); // a = (float *) CEILCACHELINE(ainit); // ... main body of code ... // tfree(aInit); // // To disable this alignment, set CACHELINESIZE to 1 //#define CACHELINESIZE 32 // Bytes per cache line //#define CACHELINEFILL (CACHELINESIZE-1) //#define CEILCACHELINE(p) ((((unsigned long)p+CACHELINEFILL)/CACHELINESIZE)*CACHELINESIZE) //#define CACHEFILLMALLOC(n) malloc((n)+CACHELINEFILL) #ifdef BOURKE static void fftext(double *x, double *y, long int n, long int nn, int dir); #endif tmpk8ny_4pz/src/include/ngspice/ngspice.h0000644000175000017500000001574113546075722020633 0ustar carstencarsten/************* * Main header file for ngspice * 1999 E. Rouat ************/ #ifndef ngspice_NGSPICE_H #define ngspice_NGSPICE_H /* #include "memwatch.h" #define MEMWATCH */ /* * This file will eventually replace spice.h and lots of other * files in src/include */ #ifndef _GNU_SOURCE # define _GNU_SOURCE #endif #include "ngspice/config.h" #include #ifdef HAVE_LIMITS_H # include #endif #ifdef HAVE_FLOAT_H # include #endif #include "ngspice/memory.h" #include "ngspice/defines.h" #include "ngspice/macros.h" #include "ngspice/bool.h" #include "ngspice/complex.h" #include "ngspice/typedefs.h" #include #include #ifdef HAVE_IEEEFP_H #include #endif #include "ngspice/missing_math.h" #ifdef STDC_HEADERS # include # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_CTYPE_H # include #endif #ifdef HAVE_FCNTL_H #include #endif #ifdef HAVE_TERMIOS_H #include #else # ifdef HAVE_SGTTY_H # include # else # ifdef HAVE_TERMIO_H # include # endif # endif #endif #ifdef HAVE_PWD_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_NETDB_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_SYS_WAIT_H #include #endif #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_DIR_H #include #else # ifdef HAVE_DIRENT_H # include # include # ifndef direct # define direct dirent # endif # endif #endif #ifdef HAVE_GETRLIMIT # include # include #endif #ifdef HAVE_GETRUSAGE # ifndef HAVE_GETRLIMIT # include # include # endif #else # ifdef HAVE_TIMES # include # include # else # ifdef HAVE_FTIME # include # endif # endif #endif #ifdef HAVE_UNISTD_H #include #include #endif #ifdef HAS_TIME_H #include #endif #ifdef HAS_WINGUI #include "ngspice/wstdio.h" #define HAS_PROGREP extern void SetAnalyse(char *Analyse, int Percent); #endif #if defined (__MINGW32__) || defined (__CYGWIN__) || defined (_MSC_VER) #include #else # ifdef HAVE_SYS_IO_H # include # endif #endif #if defined (__MINGW32__) #include /* getpid() */ #endif #if defined (_MSC_VER) #include #include /* C99 not available before VC++ 2013) */ #if (_MSC_VER < 1800) #define trunc x_trunc extern double x_trunc(double); #define nearbyint x_nearbyint extern double x_nearbyint(double); #define asinh x_asinh extern double x_asinh(double); #define acosh x_acosh extern double x_acosh(double); #define atanh x_atanh extern double x_atanh(double); #define hypot _hypot #endif #define strdup _strdup #define unlink _unlink #define fileno _fileno #define getcwd _getcwd #define chdir _chdir #if (_MSC_VER < 1800) #define isnan _isnan #endif #define finite _finite #define scalb _scalb #define logb _logb #define getpid _getpid #define access _access #define dup2 _dup2 #define open _open #define write _write #define strcasecmp _stricmp #define strncasecmp _strnicmp #define isatty _isatty #define inline __inline #define popen _popen #define pclose _pclose // undo a #define bool _Bool in MS Visual Studio 2015 #if defined(bool) #undef bool #endif // warning C4127: Bedingter Ausdruck ist konstant #pragma warning(disable: 4127) #endif #if !defined(NAN) #if defined(_MSC_VER) /* NAN is not defined in VS 2012 or older */ static const __int64 global_nan = 0x7ff8000000000000i64; #define NAN (*(const double *) &global_nan) #else #define NAN (0.0/0.0) #endif #endif #if defined(__GNUC__) #define ATTRIBUTE_NORETURN __attribute__ ((noreturn)) #elif defined(_MSC_VER) #define ATTRIBUTE_NORETURN __declspec (noreturn) #else #define ATTRIBUTE_NORETURN #endif /* Fast random number generator */ //#define FastRand #define WaGauss #define RR_MAX RAND_MAX #if !defined(HAVE_STRCHR) && defined(HAVE_INDEX) # define strchr index # define strrchr rindex #endif /* added for CYGWIN */ #ifndef HUGE #define HUGE HUGE_VAL #endif extern char *gettok_noparens(char **s); extern char *gettok_node(char **s); extern char *gettok_iv(char **s); extern char *nexttok(const char *s); extern char *gettok_model(char **s); extern int get_l_paren(char **s); extern int get_r_paren(char **s); /* Some external variables */ extern char *Spice_Exec_Dir; extern char *Spice_Lib_Dir; extern char *Def_Editor; extern char *Bug_Addr; extern int AsciiRawFile; extern char *Spice_Host; extern char *Spiced_Log; extern char Spice_Version[]; extern char Spice_Notice[]; extern char Spice_Build_Date[]; extern char Spice_Manual[]; extern char *News_File; extern char *Spice_Path; extern char *Help_Path; extern char *Lib_Path; extern char *Inp_Path; extern char *Infile_Path; #ifdef TCL_MODULE #include extern int tcl_printf(const char *format, ...); extern int tcl_fprintf(FILE *f, const char *format, ...); #undef printf #define printf tcl_printf #undef fprintf #define fprintf tcl_fprintf #undef perror #define perror(string) fprintf(stderr, "%s: %s\n", string, strerror(errno)) #elif defined SHARED_MODULE #include #include extern int sh_printf(const char *format, ...); extern int sh_fprintf(FILE *fd, const char *format, ...); extern int sh_vfprintf(FILE *fd, const char *format, va_list args); extern int sh_fputs(const char *input, FILE *fd); extern int sh_fputc(int input, FILE *fd); extern int sh_putc(int input, FILE *fd); extern void SetAnalyse(char *analyse, int percent); #define HAS_PROGREP #undef vfprintf #define vfprintf sh_vfprintf #undef printf #define printf sh_printf #undef fprintf #define fprintf sh_fprintf #undef perror #define perror(string) fprintf(stderr, "%s: %s\n", string, strerror(errno)) #undef fputs #define fputs sh_fputs #undef fputc #define fputc sh_fputc #undef putc #define putc sh_putc #endif void soa_printf(CKTcircuit *ckt, GENinstance *instance, const char *fmt, ...); ATTRIBUTE_NORETURN void controlled_exit(int status); /* macro to ignore unused variables and parameters */ #define NG_IGNORE(x) (void)x #define NG_IGNOREABLE(x) (void)x #if !defined(va_copy) && defined(_MSC_VER) #define va_copy(dst, src) ((dst) = (src)) #endif /* * type safe variants of the functions for char arguments */ #if !defined(isalpha_c) inline static int char_to_int(char c) { return (unsigned char) c; } #define isalpha_c(x) isalpha(char_to_int(x)) #define islower_c(x) islower(char_to_int(x)) #define isdigit_c(x) isdigit(char_to_int(x)) #define isalnum_c(x) isalnum(char_to_int(x)) #define isprint_c(x) isprint(char_to_int(x)) #define isblank_c(x) isblank(char_to_int(x)) #define isspace_c(x) isspace(char_to_int(x)) #define isupper_c(x) isupper(char_to_int(x)) #define tolower_c(x) ((char) tolower(char_to_int(x))) #define toupper_c(x) ((char) toupper(char_to_int(x))) #endif #endif tmpk8ny_4pz/src/include/ngspice/compatmode.h0000644000175000017500000000060713546075722021326 0ustar carstencarsten#ifndef ngspice_COMPATMODE_H #define ngspice_COMPATMODE_H #include "ngspice/config.h" typedef enum { COMPATMODE_NATIVE = 0, COMPATMODE_HS = 1, COMPATMODE_SPICE3 = 2, COMPATMODE_ALL = 3, COMPATMODE_PS = 4, COMPATMODE_PSA = 5, COMPATMODE_LT = 6, COMPATMODE_LTA = 7, COMPATMODE_LTPS = 8, COMPATMODE_LTPSA = 9 } COMPATMODE_T ; extern COMPATMODE_T inp_compat_mode; #endif tmpk8ny_4pz/src/include/ngspice/pnode.h0000644000175000017500000000100113546075722020270 0ustar carstencarsten#ifndef ngspice_PNODE_H #define ngspice_PNODE_H struct pnode { char *pn_name; /* If non-NULL, the name. */ struct dvec *pn_value; /* Non-NULL in a terminal node. */ struct func *pn_func; /* Non-NULL is a function. */ struct op *pn_op; /* Operation if the above two NULL. */ struct pnode *pn_left; /* Left branch or function argument. */ struct pnode *pn_right; /* Right branch. */ struct pnode *pn_next; /* For expression lists. */ int pn_use; /* usage counter */ } ; #endif tmpk8ny_4pz/src/include/ngspice/evtudn.h0000644000175000017500000001060613546075722020503 0ustar carstencarsten#ifndef ngspice_EVTUDN_H #define ngspice_EVTUDN_H /* =========================================================================== FILE EVTudn.h MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Bill Kuhn MODIFICATIONS SUMMARY This file contains the definition of "User-Defined Nodes". These nodes are integrated into the simulator similar to the way models are tied into SPICE 3C1, so that new node types can be relatively easily added. The functions (required and optional) are listed below. For optional functions, the function can be left undefined and the pointer placed into the Evt_Udn_Info_t structure can be specified as NULL. Required functions: create - allocate data structure used as inputs and outputs to code models initialize - set structure to appropriate initial value for first use as model input copy - make a copy of the contents into created but possibly uninitialized structure compare - determine if two structures are equal in value Optional functions: dismantle - free allocations _inside_ structure (but not structure itself) invert - invert logical value of structure resolve - determine the resultant when multiple outputs are connected to a node plot_val - output a real value for specified structure component for plotting purposes print_val - output a string value for specified structure component for printing ipc_val - output a binary data structure and size of the structure for IPC INTERFACES None. REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ #include "ngspice/miftypes.h" /* for Mif_Boolean_t used in udn_..._compare */ #define MALLOCED_PTR (*evt_struct_ptr) #define STRUCT_PTR evt_struct_ptr #define STRUCT_PTR_1 evt_struct_ptr_1 #define STRUCT_PTR_2 evt_struct_ptr_2 #define EQUAL (*evt_equal) #define INPUT_STRUCT_PTR evt_input_struct_ptr #define OUTPUT_STRUCT_PTR evt_output_struct_ptr #define INPUT_STRUCT_PTR_ARRAY evt_input_struct_ptr_array #define INPUT_STRUCT_PTR_ARRAY_SIZE evt_input_struct_ptr_array_size #define STRUCT_MEMBER_ID evt_struct_member_id #define PLOT_VAL (*evt_plot_val) #define PRINT_VAL (*evt_print_val) #define IPC_VAL (*evt_ipc_val) #define IPC_VAL_SIZE (*evt_ipc_val_size) #define CREATE_ARGS void **evt_struct_ptr #define INITIALIZE_ARGS void *evt_struct_ptr #define COMPARE_ARGS void *evt_struct_ptr_1, \ void *evt_struct_ptr_2, \ Mif_Boolean_t *evt_equal #define COPY_ARGS void *evt_input_struct_ptr, \ void *evt_output_struct_ptr #define DISMANTLE_ARGS void *evt_struct_ptr #define INVERT_ARGS void *evt_struct_ptr #define RESOLVE_ARGS int evt_input_struct_ptr_array_size, \ void **evt_input_struct_ptr_array, \ void *evt_output_struct_ptr #define PLOT_VAL_ARGS void *evt_struct_ptr, \ char *evt_struct_member_id, \ double *evt_plot_val #define PRINT_VAL_ARGS void *evt_struct_ptr, \ char *evt_struct_member_id, \ char **evt_print_val #define IPC_VAL_ARGS void *evt_struct_ptr, \ void **evt_ipc_val, \ int *evt_ipc_val_size typedef struct { char *name; char *description; void ((*create)(CREATE_ARGS)); void ((*dismantle)(DISMANTLE_ARGS)); void ((*initialize)(INITIALIZE_ARGS)); void ((*invert)(INVERT_ARGS)); void ((*copy)(COPY_ARGS)); void ((*resolve)(RESOLVE_ARGS)); void ((*compare)(COMPARE_ARGS)); void ((*plot_val)(PLOT_VAL_ARGS)); void ((*print_val)(PRINT_VAL_ARGS)); void ((*ipc_val)(IPC_VAL_ARGS)); } Evt_Udn_Info_t; extern int g_evt_num_udn_types; extern Evt_Udn_Info_t **g_evt_udn_info; #endif tmpk8ny_4pz/src/include/ngspice/material.h0000644000175000017500000000521713546075722020776 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors : 1991 David Gates **********/ /* Member of CIDER device simulator * Version: 1b1 */ #ifndef ngspice_MATERIAL_H #define ngspice_MATERIAL_H #ifndef NUM_CARRIERS #include "ngspice/numenum.h" #endif /* Information needed by the various physical models */ typedef struct sMaterialInfo { int id; /* Unique identification number */ int material; /* Oxide, Nitride, Silicon, Aluminum */ int type; /* Insulator, Semiconductor, Metal */ double tnom; /* Parameter Measurement Temp. */ /* Intrinsic-Concentration-Related Parameters */ double eps; /* Dielectric Permittivity */ double affin; /* Electron Affinity */ double refPsi; /* Reference Potential of Intrinsic */ double ni0; /* Reference Intrinsic Concentration */ double nc0; /* Conduction Band Num States */ double nv0; /* Valence Band Num States */ double mass[NUM_CARRIERS]; /* Conduction Masses */ double eg0; /* Band Gap */ double dEgDt; /* Temp-Dep Band Gap Narrowing */ double trefBGN; /* Ref. Temp for BGN */ double dEgDn[NUM_CARRIERS]; /* Conc-Dep BGN Constants */ double nrefBGN[NUM_CARRIERS]; /* Ref. Conc's for BGN */ /* Generation-Recombination Parameters */ double tau0[NUM_CARRIERS]; /* Low-Conc. SRH Lifetimes */ double nrefSRH[NUM_CARRIERS]; /* Ref. Conc.'s for Lifetime */ double cAug[NUM_CARRIERS]; /* Auger Constants */ double aii[NUM_CARRIERS]; /* Avalanche Factors */ double bii[NUM_CARRIERS]; /* Aval. Critical Fields */ /* Incomplete Ionization Parameters */ double eDon; /* Donor Energy Level */ double eAcc; /* Acceptor Energy Level */ double gDon; /* Donor Degeneracy Factor */ double gAcc; /* Acceptor Degeneracy Factor */ /* Carrier-Velocity Related Parameters */ double aRich[NUM_CARRIERS]; /* Effective Richardson Constants */ double vRich[NUM_CARRIERS]; /* Effective Recombination Velocities */ /* Mobility Concentration and Temperature Dependence */ int concModel; int tempModel; double muMax[NUM_CARRIERS][NUM_CARRTYPES]; double muMin[NUM_CARRIERS][NUM_CARRTYPES]; double ntRef[NUM_CARRIERS][NUM_CARRTYPES]; double ntExp[NUM_CARRIERS][NUM_CARRTYPES]; /* Mobility Hot Carrier Dependence */ int fieldModel; double vSat[NUM_CARRIERS]; double vWarm[NUM_CARRIERS]; /* Inversion-Layer Mobility */ int surfModel; double mus[NUM_CARRIERS]; double thetaA[NUM_CARRIERS]; double thetaB[NUM_CARRIERS]; struct sMaterialInfo *next; } MaterialInfo; typedef struct sMaterialInfo ONEmaterial; typedef struct sMaterialInfo TWOmaterial; typedef struct sMaterialInfo MATLmaterial; #endif tmpk8ny_4pz/src/include/ngspice/macros.h0000644000175000017500000000560113546075722020461 0ustar carstencarsten/************* * Macros definitions header file * 1999 E. Rouat ************/ /* * This file will contain all macros definitions needed * by ngspice code. (in construction) */ #ifndef ngspice_MACROS_H #define ngspice_MACROS_H /* * #define-s that are always on */ #define NEWCONV #define NUMELEMS(ARRAY) (sizeof(ARRAY)/sizeof(*ARRAY)) /* String macros */ #define eq(a,b) (!strcmp((a), (b))) #define eqc(a,b) (cieq((a), (b))) #define hexnum(c) ((((c) >= '0') && ((c) <= '9')) ? ((c) - '0') : ((((c) >= \ 'a') && ((c) <= 'f')) ? ((c) - 'a' + 10) : ((((c) >= 'A') && \ ((c) <= 'F')) ? ((c) - 'A' + 10) : 0))) /* Mathematical macros */ #define MIN(a,b) ((a) < (b) ? (a) : (b)) #define MAX(a,b) ((a) > (b) ? (a) : (b)) #define ABS(a) ((a) < 0.0 ? -(a) : (a)) #define SGN(a) copysign(1.0, (a)) #define SWAP(type, a, b) \ do { \ type SWAP_macro_local = a; \ a = b; \ b = SWAP_macro_local; \ } while(0) #define ABORT() \ do { \ fflush(stderr); \ fflush(stdout); \ abort(); \ } while(0) #define MERROR(CODE, MESSAGE) \ do { \ errMsg = TMALLOC(char, strlen(MESSAGE) + 1); \ strcpy(errMsg, (MESSAGE)); \ return (CODE); \ } while(0) #define R_NORM(A,B) { \ if ((A) == 0.0) { \ (B) = 0; \ } else { \ while (fabs(A) > 1.0) { \ (B) += 1; \ (A) /= 2.0; \ } \ while (fabs(A) < 0.5) { \ (B) -= 1; \ (A) *= 2.0; \ } \ } \ } #ifdef DEBUG #define DEBUGMSG(textargs) printf(textargs) #define DS(name_xz) { name_xz } #define DBGDEFINE(func_xz) func_xz #else /* ! DEBUG */ #define DEBUGMSG(testargs) #define DS(name_xz) #define DBGDEFINE(func_xz) #endif /* DEBUG */ /* A few useful macros - string eq just makes the code easier to read */ #define STRINGEQ 0 #define FUNC_NAME(x_xz) char *routine = x_xz /* Macro that queries the system to find the process time. */ #define ELAPSED_TIME( time ) \ { struct tms {int user, sys, cuser, csys;} buffer; \ \ times(&buffer); \ time = buffer.user / 60.0; \ } #ifdef HAVE_SIGSETJMP # define SETJMP(env, save_signals) sigsetjmp(env, save_signals) # define LONGJMP(env, retval) siglongjmp(env, retval) # define JMP_BUF sigjmp_buf #else # define SETJMP(env, save_signals) setjmp(env) # define LONGJMP(env, retval) longjmp(env, retval) # define JMP_BUF jmp_buf #endif #endif tmpk8ny_4pz/src/include/ngspice/evtshared.h0000644000175000017500000000166713546075722021172 0ustar carstencarsten#ifndef ngspice_EVTSHARED_H #define ngspice_EVTSHARED_H /* =========================================================================== FILE EVTshared.h MEMBER OF process XSPICE Copyright 2018 Holger Vogt All Rights Reserved PROJECT A-8503 AUTHORS 7/21/2018 Holger Vogt MODIFICATIONS SUMMARY This file contains ANSI C function prototypes for functions in the event-driven simulation algorithm package. INTERFACES None. REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ #include "ngspice/cktdefs.h" #include "ngspice/cpstd.h" #include "ngspice/evt.h" #include "ngspice/mifdefs.h" #include "ngspice/ipc.h" /* ******************* */ /* Function Prototypes */ /* ******************* */ struct evt_shared_data *EVTshareddata(char *node_name); char** EVTallnodes(void); #endif tmpk8ny_4pz/src/include/ngspice/inpmacs.h0000644000175000017500000000370413546075722020631 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ /* a couple of macros to make much of the input code * much much shorter and easier to handle. * * First, call the simulator function 'func', giving it the arglist * 'args' (must have its own parens!) and check the error returned. * If necessary, get the proper error message and tack it on the current * error */ #define IFC(func, args) \ do { \ error = (*(ft_sim->func)) args; \ if (error) \ current->error = INPerrCat(current->error, INPerror(error)); \ } while(0) /* and one for calling more General functions that still return an * error code as above */ #define GCA(func, args) \ do { \ error = func args; \ if (error) \ current->error = INPerrCat(current->error, INPerror(error)); \ } while(0) /* and one for putting our own error messages onto the current * line's error string */ #define LITERR(text) \ do { \ current->error = INPerrCat(current->error, INPmkTemp(text)); \ } while(0) /* and now a special one for calling INPdevParse which returns an * already concatenated list of error messages or NUL */ #define PARSECALL(args) \ do { \ current->error = INPerrCat(current->error, INPdevParse args); \ } while(0) tmpk8ny_4pz/src/include/ngspice/sim.h0000644000175000017500000000066013546075722017765 0ustar carstencarsten#ifndef ngspice_SIM_H #define ngspice_SIM_H enum simulation_types { SV_NOTYPE, SV_TIME, SV_FREQUENCY, SV_VOLTAGE, SV_CURRENT, SV_VOLTAGE_DENSITY, SV_CURRENT_DENSITY, SV_SQR_VOLTAGE_DENSITY, SV_SQR_CURRENT_DENSITY, SV_SQR_VOLTAGE, SV_SQR_CURRENT, SV_POLE, SV_ZERO, SV_SPARAM, SV_TEMP, SV_RES, SV_IMPEDANCE, SV_ADMITTANCE, SV_POWER, SV_PHASE, SV_DB, SV_CAPACITANCE, SV_CHARGE }; #endif tmpk8ny_4pz/src/include/ngspice/cmproto.h0000644000175000017500000000630513546075722020662 0ustar carstencarsten#ifndef ngspice_CMPROTO_H #define ngspice_CMPROTO_H /* =========================================================================== FILE CMproto.h MEMBER OF process XSPICE Copyright 1991 Georgia Tech Research Corporation Atlanta, Georgia 30332 All Rights Reserved PROJECT A-8503 AUTHORS 9/12/91 Jeff Murray, Bill Kuhn MODIFICATIONS 01/17/14 Holger Vogt Add function cm_get_path SUMMARY This file contains ANSI C function prototypes for cm_xxx functions called by code models. INTERFACES None. REFERENCED FILES None. NON-STANDARD FEATURES None. =========================================================================== */ /* Prototypes for functions used by internal code models */ /* The actual functions reside in ../ICM/CMutil.c */ /* 12/17/90 */ #include #include "ngspice/cmtypes.h" #include "ngspice/cktdefs.h" void cm_climit_fcn(double in, double in_offset, double cntl_upper, double cntl_lower, double lower_delta, double upper_delta, double limit_range, double gain, int percent, double *out_final, double *pout_pin_final, double *pout_pcntl_lower_final, double *pout_pcntl_upper_final); void cm_smooth_corner(double x_input, double x_center, double y_center, double domain, double lower_slope, double upper_slope, double *y_output, double *dy_dx); void cm_smooth_discontinuity(double x_input, double x_lower, double y_lower, double x_upper, double y_upper, double *y_output, double *dy_dx); double cm_smooth_pwl(double x_input, double *x, double *y, int size, double input_domain, double *dout_din); double cm_analog_ramp_factor(void); void cm_analog_alloc(int tag, int bytes); void *cm_analog_get_ptr(int tag, int timepoint); int cm_analog_integrate(double integrand, double *integral, double *partial); int cm_analog_converge(double *state); int cm_analog_set_temp_bkpt(double time); int cm_analog_set_perm_bkpt(double time); void cm_analog_not_converged(void); void cm_analog_auto_partial(void); void cm_event_alloc(int tag, int bytes); void *cm_event_get_ptr(int tag, int timepoint); int cm_event_queue(double time); char *cm_message_get_errmsg(void); int cm_message_send(char *msg); #ifdef __GNUC__ int cm_message_printf(const char *fmt, ...) __attribute__ ((format (__printf__, 1, 2))); #else int cm_message_printf(const char *fmt, ...); #endif double cm_netlist_get_c(void); double cm_netlist_get_l(void); Complex_t cm_complex_set(double real, double imag); Complex_t cm_complex_add(Complex_t x, Complex_t y); Complex_t cm_complex_subtract(Complex_t x, Complex_t y); Complex_t cm_complex_multiply(Complex_t x, Complex_t y); Complex_t cm_complex_divide(Complex_t x, Complex_t y); char *cm_get_path(void); CKTcircuit *cm_get_circuit(void); FILE *cm_stream_out(void); FILE *cm_stream_in(void); FILE *cm_stream_err(void); void *malloc_pj(size_t s); void *calloc_pj(size_t s1, size_t s2); void *realloc_pj(const void *ptr, size_t s); void free_pj(const void *ptr); FILE *fopen_with_path(const char *path, const char *mode); #endif tmpk8ny_4pz/src/include/ngspice/wordlist.h0000644000175000017500000000271613546075722021050 0ustar carstencarsten#ifndef ngspice_WORDLIST_H #define ngspice_WORDLIST_H /* Doubly linked lists of words. */ struct wordlist { char *wl_word; struct wordlist *wl_next; struct wordlist *wl_prev; } ; typedef struct wordlist wordlist; wordlist * wl_append(wordlist *wlist, wordlist *nwl); void wl_append_word(wordlist **first, wordlist **last, char *word); wordlist * wl_build(const char * const *v); wordlist *wl_chop(wordlist *wlist); wordlist *wl_chop_rest(wordlist *wlist); wordlist *wl_cons(char *word, wordlist *tail); wordlist * wl_copy(const wordlist *wlist); void wl_delete_slice(wordlist *from, wordlist *to); wordlist *wl_find(const char *string, const wordlist *wlist); char * wl_flatten(const wordlist *wl); void wl_free(wordlist *wlist); wordlist *wl_from_string(const char *sz); int wl_length(const wordlist *wlist); char ** wl_mkvec(const wordlist *wl); wordlist * wl_nthelem(int i, wordlist *wl); void wl_print(const wordlist *wlist, FILE *fp); wordlist * wl_range(wordlist *wl, int low, int up); wordlist * wl_reverse(wordlist *wl); void wl_sort(wordlist *wl); wordlist * wl_splice(wordlist *elt, wordlist *list); #ifdef QUOTE_CHAR /* For quoting individual characters. '' strings are all quoted, but * `` and "" strings are maintained as single words with the quotes * around them. Note that this won't work on non-ascii machines. */ #define quote(c) ((c) | 0200) #define strip(c) ((c) & 0177) #else #define quote(c) (c) #define strip(c) (c) #endif #endif tmpk8ny_4pz/src/include/ngspice/gendefs.h0000644000175000017500000000316213546075722020610 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ #ifndef ngspice_GENDEFS_H #define ngspice_GENDEFS_H #include "ngspice/typedefs.h" #include "ngspice/ifsim.h" /* definitions used to describe generic devices */ /* information used to describe a single instance */ struct GENinstance { GENmodel *GENmodPtr; /* backpointer to model */ GENinstance *GENnextInstance; /* pointer to next instance of * current model*/ IFuid GENname; /* pointer to character string naming this instance */ int GENstate; /* state index number */ /* The actual device instance structs have to place their node elements * right after the the end of struct GENinstance * where they will be accessed by generic GENnode()[] * A notable exception is the XSPICE MIF device */ }; static inline int * GENnode(struct GENinstance *inst) { return (int*)(inst + 1); } /* per model data */ struct GENmodel { /* model structure for a resistor */ int GENmodType; /* type index of this device type */ GENmodel *GENnextModel; /* pointer to next possible model in * linked list */ GENinstance *GENinstances; /* pointer to list of instances that have this * model */ IFuid GENmodName; /* pointer to character string naming this model */ struct wordlist *defaults; /* default instance parameters */ }; void GENinstanceFree(GENinstance *); void GENmodelFree(GENmodel *); #endif tmpk8ny_4pz/src/include/ngspice/dopdefs.h0000644000175000017500000000352513546075722020624 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors : 1991 David Gates **********/ /* Member of CIDER device simulator * Version: 1b1 */ #ifndef ngspice_DOPDEFS_H #define ngspice_DOPDEFS_H /* Data Structures and Definitions for Device Simulation Cards */ typedef struct sDOPcard { struct sDOPcard *DOPnextCard; double DOPxLow; double DOPxHigh; double DOPyLow; double DOPyHigh; double DOPconc; double DOPlocation; double DOPcharLen; double DOPratioLat; int DOPprofileType; int DOPlatProfileType; int DOProtateLat; int DOPimpurityType; int DOPaxisType; int DOPnumDomains; int *DOPdomains; char *DOPinFile; unsigned int DOPxLowGiven : 1; unsigned int DOPxHighGiven : 1; unsigned int DOPyLowGiven : 1; unsigned int DOPyHighGiven : 1; unsigned int DOPconcGiven : 1; unsigned int DOPlocationGiven : 1; unsigned int DOPcharLenGiven : 1; unsigned int DOPratioLatGiven : 1; unsigned int DOPprofileTypeGiven : 1; unsigned int DOPlatProfileTypeGiven : 1; unsigned int DOProtateLatGiven : 1; unsigned int DOPimpurityTypeGiven : 1; unsigned int DOPaxisTypeGiven : 1; unsigned int DOPdomainsGiven : 1; unsigned int DOPinFileGiven : 1; } DOPcard; /* DOP parameters */ enum { DOP_UNIF = 1, DOP_LINEAR, DOP_GAUSS, DOP_ERFC, DOP_EXP, DOP_SUPREM3, DOP_ASCII, DOP_SUPASCII, DOP_INFILE, DOP_BORON, DOP_PHOSP, DOP_ARSEN, DOP_ANTIM, DOP_P_TYPE, DOP_N_TYPE, DOP_X_AXIS, DOP_Y_AXIS, DOP_X_LOW, DOP_X_HIGH, DOP_Y_LOW, DOP_Y_HIGH, DOP_CONC, DOP_LOCATION, DOP_CHAR_LEN, DOP_RATIO_LAT, DOP_ROTATE_LAT, DOP_UNIF_LAT, DOP_LINEAR_LAT, DOP_GAUSS_LAT, DOP_ERFC_LAT, DOP_EXP_LAT, DOP_DOMAIN, }; #endif tmpk8ny_4pz/src/include/ngspice/const.h0000644000175000017500000000407213546075722020324 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ /* */ #ifndef ngspice_CONST_H #define ngspice_CONST_H #define CONSTsqrt2 1.4142135623730950488016887242097 #define CONSTpi 3.1415926535897932384626433832795 #define CONSTnap 2.7182818284590452353602874713527 #define CONSTlog10e 0.43429448190325182765112891891661 #define CONSTlog2e 1.4426950408889634073599246810019 /* https://physics.nist.gov/cgi-bin/cuu/Value?c * value = 299 792 458 m s-1 (exact) */ #define CONSTc 299792458 /* https://www.nist.gov/pml/weights-and-measures/si-units-temperature * Note that for general use in an expression, the negative value must * be guarded by (), so CONSTKtoC_for_str should only be used for building * a string value */ #define CONSTCtoK 273.15 #define CONSTKtoC_for_str -CONSTCtoK #define CONSTKtoC (CONSTKtoC_for_str) /* https://physics.nist.gov/cgi-bin/cuu/Value?e * value = 1.602 176 6208 x 10-19 C * standard uncertainty = 0.000 000 0098 x 10-19 C */ #define CHARGE 1.6021766208e-19 /* https://physics.nist.gov/cgi-bin/cuu/Value?k * value = 1.380 648 52 x 10-23 J K-1 * standard uncertainty = 0.000 000 79 x 10-23 J K-1 */ #define CONSTboltz 1.38064852e-23 /* https://physics.nist.gov/cgi-bin/cuu/Value?h * value = 6.626 070 040 x 10-34 J s * standard uncertainty = 0.000 000 081 x 10-34 J s */ #define CONSTplanck 6.626070040e-34 #define CONSTmuZero (4.0 * CONSTpi * 1E-7) /* MuZero H/m */ /* epsilon zero e0*u0*c*c=1 */ #define CONSTepsZero (1.0 / (CONSTmuZero * CONSTc * CONSTc)) /* F/m */ /* This value is not really constant over temperature and frequency, but * 3.9 is the most common "all-purpose" value */ #define CONSTepsrSiO2 3.9 #define CONSTepsSiO2 (CONSTepsrSiO2 * CONSTepsZero) /* epsilon SiO2 F/m */ #define REFTEMP (27.0 + CONSTCtoK) /* 27 degrees C in K */ /* Some global variables defining constant values */ extern double CONSTroot2; extern double CONSTvt0; extern double CONSTKoverQ; extern double CONSTe; #endif /* include guard */ tmpk8ny_4pz/src/include/ngspice/sen2defs.h0000644000175000017500000000460313546075722020707 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ /* * SENdefs.h - structures for sensitivity package */ #ifndef ngspice_SEN2DEFS_H #define ngspice_SEN2DEFS_H #include "ngspice/smpdefs.h" #include "ngspice/jobdefs.h" #include "ngspice/typedefs.h" struct SENstruct { int JOBtype; JOB *JOBnextJob; /* pointer to next thing to do */ char *JOBname; /* name of this job */ int SENnumVal; /* length of the next two arrays */ char **SENdevices; /* names of the devices to do sensetivity analysis of */ char **SENparmNames;/* parameters of the above devices to do analysis wrt */ unsigned int SENinitflag :1 ; /* indicates whether sensitivity structure*/ /* is to be initialized */ unsigned int SENicflag :1 ; /* indicates whether initial conditions are specified for transient analysis */ unsigned int SENstatus :1; /* indicates whether perturbation is in progress*/ unsigned int SENacpertflag :1; /* indictes whether the perturbation is to be carried out in ac analysis (is done only for first frequency )*/ int SENmode; /* indicates the type of sensitivity analysis reqired: DC, Transient, or AC */ int SENparms; /* # of design parameters */ double SENpertfac; /* perturbation factor (for active devices )*/ double **SEN_Sap; /* sensitivity matrix (DC and transient )*/ double **SEN_RHS; /* RHS matrix (real part) contains the sensitivity values after SMPsolve*/ double **SEN_iRHS; /* RHS matrix (imag part ) contains the sensitivity values after SMPsolve*/ int SENsize; /* stores the number of rows of each of the above three matrices */ SMPmatrix *SEN_Jacmat; /* sensitivity Jacobian matrix, */ double *SEN_parmVal; /* table containing values of design parameters */ char **SEN_parmName; /* table containing names of design parameters */ }; /* SENmode */ #define DCSEN 0x1 #define TRANSEN 0x2 #define ACSEN 0x4 #define NORMAL 0 #define PERTURBATION 1 #define OFF 0 #define ON 1 enum { SEN_AC = 1, SEN_DC, SEN_TRAN, SEN_DEV, SEN_PARM, }; #endif tmpk8ny_4pz/src/include/ngspice/cidersupt.h0000644000175000017500000000554213546075722021203 0ustar carstencarsten/* * cidersupt.h * * CIDER support library header */ #ifndef ngspice_CIDERSUPT_H #define ngspice_CIDERSUPT_H #include "ngspice/numglobs.h" #include "ngspice/material.h" #include "ngspice/gendev.h" #include "ngspice/profile.h" /* externals for database.c */ extern struct plot* DBread( char *); extern double *DBgetData( struct plot *, char *, int ); extern void DBfree( struct plot *); /* externals for devprint.c */ extern void printVoltages(FILE *, char *, char *, int, int, double, double, double, double, double, double ); /* externals for geominfo.c */ extern void printCoordInfo(CoordInfo *); extern void killCoordInfo(CoordInfo *); extern void ONEprintDomainInfo(DomainInfo *); extern void TWOprintDomainInfo(DomainInfo *); extern void killDomainInfo(DomainInfo *); extern void ONEprintBoundaryInfo(BoundaryInfo *); extern void TWOprintBoundaryInfo(BoundaryInfo *); extern void killBoundaryInfo(BoundaryInfo *); extern void TWOprintElectrodeInfo(ElectrodeInfo *); extern void killElectrodeInfo(ElectrodeInfo *); /* externals for globals.c */ extern void GLOBcomputeGlobals(GLOBvalues *, double); extern void GLOBputGlobals(GLOBvalues *); extern void GLOBgetGlobals(GLOBvalues *); extern void GLOBprnGlobals(FILE *, GLOBvalues *); /* externals for integset.c */ extern void computeIntegCoeff(int, int, double *, double *); extern void computePredCoeff(int, int, double *, double *); /* externals for integuse.c */ extern double integrate(double **, TranInfo *, int ); extern double predict(double **, TranInfo *, int ); extern double computeLTECoeff( TranInfo * ); extern double integrateLin(double **, TranInfo *, int ); /* externals for logfile.c */ extern void LOGmakeEntry(char *, char * ); /* externals for mater.c */ extern void MATLdefaults(MaterialInfo * ); extern void MATLtempDep(MaterialInfo *, double ); extern void printMaterialInfo(MaterialInfo * ); /* externals for mobil.c */ extern void MOBdefaults(MaterialInfo *, int, int, int, int ); extern void MOBtempDep (MaterialInfo *, double ); extern void MOBconcDep (MaterialInfo *, double, double *, double *); extern void MOBfieldDep (MaterialInfo *, int, double, double *, double * ); /* externals for recomb.c */ extern void recomb (double, double, double, double, double, double, double, double *, double *, double * ); /* externals for suprem.c */ extern void readAsciiData( char *, int, DOPtable ** ); extern void readSupremData( char *, int, int, DOPtable ** ); /* externals for suprmitf.c */ extern void SUPbinRead( char *, float *, float *, int *, int * ); extern void SUPascRead( char *, float *, float *, int *, int * ); /* externals for misc.c */ extern double guessNewConc(double , double ); extern double lookup(double **, double ); extern BOOLEAN hasSORConverged(double *, double *, int); extern BOOLEAN foundError(int ); #endif tmpk8ny_4pz/src/include/ngspice/onemesh.h0000644000175000017500000001170213546075722020632 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Authors: 1987 Karti Mayaram, 1991 David Gates **********/ /* Member of CIDER device simulator * Version: 1b1 */ /* * One-Dimensional Element-based Simulation-Mesh Data Structures */ #ifndef ngspice_ONEMESH_H #define ngspice_ONEMESH_H #include "ngspice/material.h" typedef struct sONEelem { struct sONEelem *pElems[2]; /* array to store neighbor elements */ struct sONEnode *pNodes[2]; /* array to store the element nodes */ struct sONEedge *pEdge; /* the edge */ double dx; /* the x length */ double rDx; /* 1 / dx */ int domain; /* domain to which this elem belongs */ int elemType; /* material type of element */ ONEmaterial *matlInfo; /* material information */ double epsRel; /* epsilon of material rel to Semicon */ int evalNodes[2]; /* nodes to be evaluated in elem */ } ONEelem; #define pLeftElem pElems[0] #define pRightElem pElems[1] #define pLeftNode pNodes[0] #define pRightNode pNodes[1] typedef struct sONEedge { double mun; /* electron mobility */ double mup; /* hole mobility */ double dPsi; /* deltaPsi */ double jn; /* electron current */ double jp; /* hole current */ double jd; /* displacement current */ double dJnDpsiP1; /* dJn/dPsi(+1) */ double dJnDn; /* dJnx/dN */ double dJnDnP1; /* dJn/dN(+1) */ double dJpDpsiP1; /* dJpx/dPsi(+1) */ double dJpDp; /* dJpx/dP */ double dJpDpP1; /* dJpxDp(+1) */ double dCBand; /* effective delta conduction band */ double dVBand; /* effective delta valence band */ int edgeState; /* pointer to state vector */ unsigned evaluated : 1; /* flag to indicated evaluated */ } ONEedge; typedef struct sONEnode { double x; /* x location */ int nodeI; /* node x-index */ int poiEqn; /* equation number for equil poisson */ int psiEqn; /* equation number for bias poisson */ int nEqn; /* equation number for n continuity */ int pEqn; /* equation number for p continuity */ int nodeType; /* type of node */ int baseType; /* baseType n or p or none */ double vbe; /* base emitter voltage for BJTs */ struct sONEelem *pElems[2]; /* array of elements */ double psi0; /* equilibrium potential */ double psi; /* electrostatic potential */ double nConc; /* electron conc. */ double pConc; /* hole conc. */ double nie; /* effective intrinsic carrier conc. */ double eg; /* energy gap */ double eaff; /* electron affinity; work phi for metal*/ double tn; /* electron lifetime */ double tp; /* hole lifetime */ double netConc; /* net conc. */ double totalConc; /* total conc. */ double na; /* acceptor conc. */ double nd; /* donor conc. */ double qf; /* fixed charge density */ double nPred; /* predicted electron conc. */ double pPred; /* predicted hole conc. */ double uNet; /* net recombination rate */ double dUdN; /* dU / dN */ double dUdP; /* dU / dP */ double dNdT; /* dN / dT value */ double dPdT; /* dN / dT value */ int nodeState; /* pointer to the state vector */ unsigned evaluated : 1; /* flag to indicated evaluated */ /* sparse matrix pointers. pointers to doubles */ double *fPsiPsiiM1; double *fPsiPsi; double *fPsiPsiiP1; double *fPsiN; double *fPsiP; double *fNPsiiM1; double *fNPsi; double *fNPsiiP1; double *fNNiM1; double *fNN; double *fNNiP1; double *fNPiM1; double *fNP; double *fNPiP1; double *fPPsiiM1; double *fPPsi; double *fPPsiiP1; double *fPPiM1; double *fPP; double *fPPiP1; double *fPNiM1; double *fPN; double *fPNiP1; } ONEnode; #define pLeftElem pElems[0] #define pRightElem pElems[1] #define nodePsi nodeState #define nodeN nodeState+1 #define nodeP nodeState+3 #define edgeDpsi edgeState #define ONEnumNodeStates 5 #define ONEnumEdgeStates 2 #endif tmpk8ny_4pz/src/include/ngspice/pzdefs.h0000644000175000017500000000177413546075722020477 0ustar carstencarsten#ifndef ngspice_PZDEFS_H #define ngspice_PZDEFS_H /* structure used to describe an PZ analysis to be performed */ #include "ngspice/jobdefs.h" #include #include "ngspice/complex.h" #include "ngspice/typedefs.h" struct PZtrial { SPcomplex s, f_raw, f_def; PZtrial *next, *prev; int mag_raw, mag_def; int multiplicity; int flags; int seq_num; int count; }; struct PZAN { int JOBtype; JOB *JOBnextJob; IFuid JOBname; int PZin_pos; int PZin_neg; int PZout_pos; int PZout_neg; int PZinput_type; int PZwhich; int PZnumswaps; int PZbalance_col; int PZsolution_col; PZtrial *PZpoleList; PZtrial *PZzeroList; int PZnPoles; int PZnZeros; double *PZdrive_pptr; double *PZdrive_nptr; }; #define PZ_DO_POLES 0x1 #define PZ_DO_ZEROS 0x2 #define PZ_IN_VOL 1 #define PZ_IN_CUR 2 enum { PZ_NODEI = 1, PZ_NODEG, PZ_NODEJ, PZ_NODEK, PZ_V, PZ_I, PZ_POL, PZ_ZER, PZ_PZ, }; #endif tmpk8ny_4pz/autogen.sh0000755000175000017500000001355013546075722015165 0ustar carstencarsten#!/bin/sh # Configuration script for ngspice. # # This script performs initial configuration of ngspice source # package. # # # temp-adms.ac: modified configure.ac if --adms is selected # for temporary use by autoconf, will be deleted automatically # configure.ac stays untouched PROJECT=ngspice # ADMS variables ADMSDIR=src/spicelib/devices/adms XMLPATH=src/spicelib/devices/adms/admst ADMSXML=${ADMSXML:-admsXml} ADMS=0 # Exit variable DIE=0 # Check for Mac OS X uname -a | grep -q "Darwin" if [ $? -eq 0 ]; then LIBTOOLIZE=glibtoolize else LIBTOOLIZE=libtoolize fi help() { echo echo "$PROJECT autogen.sh help" echo echo "--adms -a: enables adms feature" echo "--help -h: print this file" echo "--version -v: print version" echo } version() { echo echo "$PROJECT autogen.sh 1.0" echo } error_and_exit() { echo "Error: $1" if [ "$ADMS" -eq 1 ]; then rm -f temp-adms.ac fi exit 1 } check_awk() { (awk --version) < /dev/null > /dev/null 2>&1 || { echo echo "You must have awk installed to compile $PROJECT with --adms." exit 1 } } check_autoconf() { (autoconf --version) < /dev/null > /dev/null 2>&1 || { echo echo "You must have autoconf installed to compile $PROJECT." echo "See http://www.gnu.org/software/automake/" echo "(newest stable release is recommended)" DIE=1 } ($LIBTOOLIZE --version) < /dev/null > /dev/null 2>&1 || { echo echo "You must have libtool installed to compile $PROJECT." echo "See http://www.gnu.org/software/libtool/" echo "(newest stable release is recommended)" DIE=1 } (automake --version) < /dev/null > /dev/null 2>&1 || { echo echo "You must have automake installed to compile $PROJECT." echo "See http://www.gnu.org/software/automake/" echo "(newest stable release is recommended)" DIE=1 } } check_adms() { ($ADMSXML --version) < /dev/null > /dev/null 2>&1 || { echo echo "You must have admsXml installed to compile adms models." echo "See http://mot-adms.sourceforge.net" echo "(newest stable release is recommended)" DIE=1 } } # check if verilog-a files exist in every adms device directory check_adms_va() { echo # get the devices directories from configure.ac admsdirs=`awk '$1 ~ /#VLAMKF/ { print $2 }' < configure.ac` admsdirs=`echo $admsdirs | sed "s/\/Makefile//g"` for adms_dir in $admsdirs ; do FOK=0 if [ -d "$adms_dir" ]; then ls $adms_dir/admsva/*.va > /dev/null 2>&1 exitcode=$? if [ $exitcode -ne 0 ]; then FOK=1 fi else FOK=1 fi if [ "$FOK" -eq 1 ]; then echo "Error: No *.va file found in $adms_dir/admsva" echo "Please download patch file ng-adms-va.tar.gz from" echo "http://ngspice.sourceforge.net/experimental/ng-adms-va.tar.gz" echo "and expand it into the ngspice directory" echo DIE=1 fi done } case "$1" in "--adms" | "-a") check_adms check_adms_va ADMS=1 ;; "--help" | "-h") help exit 0 ;; "--version" | "-v") version exit 0 ;; *) ;; esac check_autoconf if [ "$DIE" -eq 1 ]; then exit 1 fi [ -f "DEVICES" ] || { echo "You must run this script in the top-level $PROJECT directory" exit 1 } # only for --adms: if [ "$ADMS" -gt 0 ]; then check_awk # add adms related Makefile entries to a configure.ac style file for # autoconf and automake # Find all lines with "#VLAMKF" and put the second token of each line # into a shell variable adms_Makefiles=`awk '$1 ~ /#VLAMKF/ { print "./" $2 }' < configure.ac` # just the same, but escape newlines with '\' for the following sed expression znew=`awk '$1 ~ /#VLAMKF/ { print " " $2 "\\\\" }' < configure.ac` # Find "tests/vbic/Makefile" and insert the list of Makefiles # some sed's fail to process the '\n' escape on the RHS, # thus use an escaped plain newline sed \ -e "s,tests\\/vbic\\/Makefile,&\\ $znew ," \ configure.ac > temp-adms.ac for adms_dir in `ls $ADMSDIR` ; do if [ -d "$ADMSDIR/$adms_dir" ]; then case "$adms_dir" in "admst") # echo "Skipping admst dir" ;; *) echo "Entering into directory: $adms_dir" echo "-->"$ADMSDIR/$adms_dir ( cd $ADMSDIR/$adms_dir $ADMSXML `ls admsva/*.va` -Iadmsva -xv -x \ -e ../admst/ngspiceVersion.xml \ -e ../admst/ngspiceMakefile.am.xml ) ;; esac fi done fi echo "Running $LIBTOOLIZE" $LIBTOOLIZE --copy --force \ || error_and_exit "$LIBTOOLIZE failed" echo "Running aclocal $ACLOCAL_FLAGS" aclocal $ACLOCAL_FLAGS --force -I m4 \ || error_and_exit "aclocal failed" # optional feature: autoheader (autoheader --version) < /dev/null > /dev/null 2>&1 if [ $? -eq 0 ]; then echo "Running autoheader" autoheader --force \ || error_and_exit "autoheader failed" fi echo "Running automake -Wall --copy --add-missing" automake -Wall --copy --add-missing \ || error_and_exit "automake failed" if [ "$ADMS" -gt 0 ]; then echo "Running automake for adms" automake -Wall --copy --add-missing $adms_Makefiles \ || error_and_exit "automake failed" fi echo "Running autoconf" if [ "$ADMS" -gt 0 ]; then autoconf --force temp-adms.ac > configure \ || error_and_exit "autoconf failed, with adms" rm -f temp-adms.ac chmod +x configure else autoconf --force \ || error_and_exit "autoconf failed" fi echo "Success." exit 0 tmpk8ny_4pz/Makefile.am0000644000175000017500000000201213546075722015207 0ustar carstencarsten## Process this file with automake to produce Makefile.in SUBDIRS = src man tests DIST_SUBDIRS = src man tests EXTRA_DIST = FAQ autogen.sh Stuarts_Poly_Notes \ ANALYSES BUGS AUTHORS ChangeLog \ DEVICES NEWS README README.tcl \ README.shared-xspice README.vdmos \ README.adms README-old.adms contrib \ examples m4 visualc \ build-for-mac-os.sh \ cross-compile.sh cross-compile-shared.sh \ compile_min.sh compile_linux.sh compile_min_shared.sh \ ngspice.pc.in .gitignore MAINTAINERCLEANFILES = Makefile.in aclocal.m4 ar-lib compile config.guess \ src/include/ngspice/config.h.in config.sub configure install-sh \ missing mkinstalldirs stamp-h.in ltconfig \ ltmain.sh depcomp ylwrap ACLOCAL_AMFLAGS = -I m4 if SHARED_MODULE pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = ngspice.pc endif SHARED_MODULE mrproper: maintainer-clean rm -f `find $(top_srcdir) -type f -name "*~" -print` rm -f `find $(top_srcdir) -type f -name "*.orig" -print` rm -f `find $(top_srcdir) -type f -name "*.rej" -print` tmpk8ny_4pz/README.tcl0000644000175000017500000001140513546075722014622 0ustar carstencarsten********************************************************************************* *Copied and written by Stefan Jones (stefan.jones@multigig.com) at Multigig Ltd * *Code based on and copied from ScriptEDA * *(http://embedded.eecs.berkeley.edu/Alumni/pinhong/scriptEDA/) * *Copyright (C) 2001 Author Pinhong Chen * * * *This program is free software; you can redistribute it and/or * *modify it under the terms of the GNU Lesser General Public License * *as published by the Free Software Foundation; either version 2 * *of the License, or (at your option) any later version. * * * *This program is distributed in the hope that it will be useful, * *but WITHOUT ANY WARRANTY; without even the implied warranty of * *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * *GNU Lesser General Public License for more details. * * * *You should have received a copy of the GNU Lesser General Public License * *along with this program; if not, write to the Free Software * *Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.* ********************************************************************************* WARNING! The text in this document has been prepared in 2006 and is partially outdated. It is provided here only for reference and may provide some (historical) information. Welcome to tclspice README_tcl This file acompanies ngspice sources starting with ngspice-rework-18. It describes what tclspice is, its installation, and points to resources that will help you to start with it. It also contains usefull datas to keep informed, get help, or get involved in the project. Enjoy Lionel (saintel@users.sourceforge.net) What is tclspice: tclspice is a variant of ngspice. It share 95% of its code (approx). The different between plain NGspice and tclspice is the type of binary it produces, and the way to access it. NGspice is a standalone program that you can execute and which can either automatically process a spice directives script. It can also propose you a command line interface. tclspice is a tcl package name. It is based on libspice shared library. This library is specifically designed to be loaded in tcl interpreters such as tclsh or wish. Then all spice directives are available as tcl functions. libspice also feature some new commands that are usefull for the integration into the tcl environment. tclspice differs from ngspice by its printf (bundled to tcl printf), malloc (tcl malloc), data handling and plotting (BLT toolkit extensions to tcl/tk). Installing: Tclspice relies on three packages that are not included in ngspice: tcl : the tcl command interpreter, for interpretion of user scipt tk : the graphical extension of tcl, to represent data graphically and for GUIs blt : BLT toolkit gives number handling and plotting features to tcl/tk The latest configuration is (not much tested): tclspice-27 tcl 8.4 tk 8.4 blt 2.4 Tclspice is built and installed the same way as ngspice. Then, after reading this paragraph, the information you lack will probably be in README file in this directory. There is a configuration flag to set in order to compile tclspice library rather than plain ngspice, that is a standalone program. This flag is --with-tcl. It accepts an argument the path to tclConfig.sh If you don't provide any argument, configure script will try to find it automatically. ./configure --enable-xspice --disable-cider --disable-xgraph --enable-numparam --with-readline=no --enable-adms=no --with-tcl If its does not, then it will propose you some possible locations. can't find Tcl configuration script "tclConfig.sh" Should you add --with-tcl=/usr/lib/tcl8.4/tclConfig.sh to ./configure arguments? If it does not, check that tcl8.4 is installed, and manually specify the path. ./configure --enable-xspice --disable-cider --disable-xgraph --enable-numparam --with-readline=no --enable-adms=non --with-tcl=/usr/lib/tcl8.4 Tclspice is not compatible with ngspice graphical code. Then when building tclspice, --no-x is automatically configured. Support and help : First of all (but last recourse), mail me at saintel@users.sourceforge.net For any kind of information on tclspice: http://ngspice.sourceforge.net/tclspice.html It gives plenty of information. There is an index of good resources that you can read to get into tclspice quickly and proficently. tmpk8ny_4pz/FAQ0000644000175000017500000003156413546075722013523 0ustar carstencarsten Ngspice F.A.Q.Version 2.3 (ngspice-31 release) Maintained by Holger Vogt Last update: 09-14-2018 This document contains the Frequently Asked Questions (and Answers) for ngspice project. __________________________________________________________________________ Table of Contents 1. INTRODUCTION AND GENERAL INFORMATION 1.1 What is ngspice? 1.2 What is sharedspice? 1.3 What is tclspice ? 1.4 Why resurrecting Berkeley's Spice? 1.5 What is the project's goal? 1.6 What you are going to do? 1.7 Legal issues 1.8 Discussion groups 1.9 What mailing lists exist for ngspice? 1.10 Are the mailing lists archived anywhere? 1.11 Where can I get a copy of ngspice? 1.12 Where should I look on the World Wide Web for ngspice stuff? 1.13 Where should I look on the World Wide Web for Spice documentation? 2. DEVELOPMENT 2.1 What is the current version? 2.2 What are the latest features in the current release? 2.3 What does it look like? 2.4 Who are the authors of ngspice? 2.5 How can I report a bug/request for a feature? 2.6 How can I join the development? 3. SOLUTIONS TO COMMON MISCELLANEOUS PROBLEMS 3.1 What systems are supported? 3.2 I get errors when I try to compile the source code, why? 3.3 This document didn't answer my question. Where else can I look for an answer? 4. ADMINISTRATIVE INFORMATION AND ACKNOWLEDGEMENTS 4.1 Feedback 4.2 Formats in which this FAQ is available 4.3 Authorship and acknowledgements 4.4 Disclaimer and Copyright ______________________________________________________________________ 1. INTRODUCTION AND GENERAL INFORMATION 1.1 What is ngspice ? Ngspice is a mixed-level/mixed-signal circuit simulator, based on three open source software packages: Spice3f5, Cider1b1 and Xspice, and including many bug fixes and enhancements: - Spice3 is a widely used circuit simulator. It was developed by the University of California at Berkeley (UCB), by "a cast of thousand" (as they say) initially under the guide of Donald O. Peterson. - Cider is a mixed-level simulator that already includes Spice3f5 and adds a device simulator to it: DSIM. Cider couples the circuit level simulator to the device simulator to provide greater simulation accuracy (at the expense of greater simulation time). Critical devices can be described with technology parameters (numerical models) and non critical ones with the original spice's compact models. - Xspice is an extension to Spice3 that provides code modeling support and simulation of digital components through an embedded event driven algorithm. The NG prefix has lot of meanings: Next Generation, New (and) Good, etc. Choose or invent the one you prefer. The heart of the project is the ngspice program, with its tremendous advancements. 1.2 What is sharedspice ? Sharedspice is an interface option to ngspice. It compiles the simulator into a shared object (or dynamic link library), providing full control of ngspice to any suitable controlling program (GUI, optimizer, development system, etc., to be provided by the user). 1.3 What is tclspice ? Tclspice is a another interface option of ngspice, providing a tcl/tk interface to the user. Tclspice is both a batch and interactive simulator and a building block for simulator applications. Analyses can be run from a tcl script and vector plotted or post processed using tcl. A small GUI may be built by the user to analyze a circuit or a set of circuits. Tclspice is obtained compiling ngspice activating an additional option. This has not been used and tested for some time. 1.4 Why resurrecting Berkeley's Spice? Berkeley's Spice can be considered the father of most circuit simulators available today. It is an old but still good piece of software, it may not be the fastest or the most reliable but it's free, it's available in source code and most of the electrical simulators inherited it's syntax. Spice3 is based on proven numerical algorithms (most commercial implementations have only strengthened them), implements most of the models for MOSFET submicron design and has a powerful set of analyses. The readily availability of its source code in the past made this simulator the de-facto standard. 1.5 What is the project's goal? Ngspice is both a maintenance and enhancement project. It is a maintenance project because it aims to provide the free EDA community the best spice3 simulator available. This means fixing bugs, adding new features but always in the spice3 framework. Achieving compatibility with commercial spice based simulators and provide users the latest devices models are important goals of the project. Improvements in the postprocessing (data handling capabilities) and user interface are other goals. 1.6 What you are going to do? An official roadmap for ngspice was never drawn. Contributions made by developers drive ngspice development and the roadmap is built day by day by developers writing on the lists. Ngspice development activity can be summarized in 3 points: + Compatibility: Ngspice should be compatible with commercial products, thus allowing people to use the netlist generated for such tools. As most of the commercial simulators available tracked each other in netlist language, this should not be an impossible task. The most important goal here is to provide a reliable support for model libraries coming from foundries. + Compact models: The interest in using ngspice is intimately connected to the available models. To provide the latest models available for active and passive devices is a fundamental goal of the project. In this direction we are integrating ADMS model compiler into ngspice. + Documentation: Commercial simulators come with very good manuals containing tutorials, description of models equations, example of use, suggestions, etc. Spice came with little documentation. The Spice3f manual, available on the Internet has been used as the basis for the new manual. It will be constantly improved during ngspice development and integrated with the documentation accompanying Xspice and Cider. The ngspice manual today contains description of all features ngspice is offering. It is however not a tutorial of ngspice usage, but there are now several good ones available on the internet (see http://ngspice.sourceforge.net/tutorials.html). 1.7 Legal issues The ngspice base license is new BSD, as provided by UCB. For some parts of the code other compatible licences apply. All licenses are DFSG compatible. Please see file COPYING for details. 1.8 Discussion groups Vivid discussion are going on in the ngspice discussion groups. They are found at https://sourceforge.net/p/ngspice/discussion/ A new group 'ngspice tips and examples' will present interesting ngspice tips (your input is welcome!) 1.9 What mailing lists exist for ngspice? Mailing lists have somewhat lost importance compared to the discussion groups described above. There are two general mailing lists dedicated to the ngspice project. Users mailing list: This list is for ngspice users. Examples, problems, bug reports and general discussion on ngspice can be sent here. Developers mailing list: The list is dedicated to ngspice development. Developers should subscribe here, to follow the program development. May be used to send patches, and technical discussion on ngspice. Send an empty message with Subject "help" to the following addresses to get instructions. Send an empty message to the following address to Subscribe. Documentation about the user interface of these mailing lists can be found at: http://www.gnu.org/software/mailman/mailman-member 1.10 Are the mailing lists archived anywhere ? Yes, the lists are archived. There are two places where to look for archives. The project started on the IEEE Central and South Italy web server and then moved to sourceforge. Sourceforge provides an archiving service that cam be accessed via the summary page: http://sourceforge.net/p/ngspice/mailman/ 1.11 Where can I get a copy of ngspice? You can download ngspice from: http://sourceforge.net/projects/ngspice/files/ng-spice-rework/ 1.12 Where should I look on the World Wide Web for ngspice stuff? Look at the official Ngpice Web Page: http://ngspice.sourceforge.net 1.13 Where should I look on the World Wide Web for Spice documentation? There is a detailed ngspice manual available at: http://ngspice.sourceforge.net/docs.html Others docs are assembled at: http://ngspice.sourceforge.net/literature.html 2. DEVELOPMENT 2.1. What is the current version? The latest version released is: * ngspice-31 (released on 22/09/2019) 2.2. What are the latest features in the current release? - New features: + configure flag --with-fftw3 If set to 'no', internal fast fourier is used instead of fftw + command setseed to set the seed value for the random number generator + option seed=[val|random] + variable inputdir to remeber and retrieve the last input file directory + example directory 'digital' with analog, behavioral and digital example input files + new XSPICE filesource, d_source, and state-machine examples + +, - maybe part of instance name + Quasi-saturation VDMOS example + add environmental variable SOURCE_DATE_EPOCH to allow reproducible executables + new parameters to command setplot: setplot next, setplot previous + updates to commands cd, rusage, print + update to bipolar and diode temperature equations - Bug fixes: + several bug fixes + lots of memory leaks removed, especially when XSPICE circuits are called several times in a loop. 2.3. What does it look like? Ngspice, as the original Spice3 (and Xspice and Cider) is a command line simulator, but with a graphics output capability. 2.4. Who are the authors of ngspice? The development is open to anyone who wish to contribute. If the original Spice3 was made with the contribution of "a cast of thousand", ngspice can only increase that number. An incomplete list of contributor makes the "acknowledgements" page of the ngspice manual. 2.5. How can I report a bug/request for a feature? The ngspice summary page (hosted on Sourceforge) has bug-reporting, feature-request and bugs trackers. You can use them or subscribe to mailing lists and post there. The former is preferred since almost it allows to track all necessary actions upon a bug. The web site at http://ngspice.sourceforge.net/bugrep.html will give you more details. 2.6. How can I join the development? To join the development just code the feature you want to add and send your patch in the mailing list. Before you start coding check the latest development release of ngspice from our git repository. It might be that your feature has already been implemented. There is no bureaucracy here. 3. SOLUTIONS TO COMMON MISCELLANEOUS PROBLEMS 3.1. What systems are supported? Ngspice is written in C, and uses some GNU extensions, then you need a GNU C compiler and a UNIX environment to compile it. Ngspice can be compiled under Windows using the mingw or cygwin environment as well as MS Visual Studio. 3.2. I get errors when I try to compile the source code, why? This is a one-million-euros question :). Write to the user's discussion group describing the problem and providing information on the type of hardware, the flavour of operating system. 3.3. This document didn't answer my question. Where else can I look for an answer? Read old messages from the mailing list archive, search the web site or read the docs. Upgrade to the latest version of ngspice, many problems are fixed in the new versions. If you still can't find an answer, post your question to the mailing lists. 4. ADMINISTRATIVE INFORMATION AND ACKNOWLEDGEMENTS 4.1. Feedback Send your comments about this F.A.Q. to: https://sourceforge.net/p/ngspice/discussion/127605/ 4.2. Formats in which this FAQ is available This document is available only in ASCII format in the ngspice source package. 4.3. Authorship and acknowledgements Parts of the questions and answers originate from Paolo Nenzi and are updated by Holger Vogt. 4.4. Disclaimer and Copyright Copyright: Holger Vogt, 2018 License: Creative Commons Attribution Share-Alike (CC-BY-SA) v4.0. This document is provided as is. The information in it is not warranted to be correct: you use it at your own risk. tmpk8ny_4pz/NEWS0000644000175000017500000007360013546075722013665 0ustar carstencarstenNgspice-31, Sep 22nd, 2019 ============ - New features: + if a subcircuit is defined more than once, only read the first one and discard the others + vbic model implementation including self-heating effect + Enable the file input as additional search path for .include files also for non-Windows OSs + add scope to decks and subcircuits (not yet fully implemented) + enable 'res' as valid resistor model identifier + Add variable 'nostepsizelimit' to relieve step size limit defined by TSTEP of the .tran command + Windows GUI: make GUI more responsive + if the comaptibility mode is PS, LTPS or LTPSA, '$' is treated as a valid character, not as end-of-line comment delimiter + allow very short version information with new options -v and -d to 'version' command + the PSPICE area token for a device instance may be not only a number, but also a parametrized token like {tok} + Windows GUI: New history buffering + Windows GUI: Added scrolling to input window + update to hicum version 2.40 + allow " around netnames for .plot and .print commands + command 'setcs': like command 'set' but case sensitive + linearized cutout of an original vector by defining the vectors lin-tstart, lin-tstop, and lin-tstep before sending the 'linearize' command + new examples: inverters and ring oscillator using SOI + 'option norefvalue' to suppress printing the reference value - Bug fixes: + many bugs fixed and code improvements (patches 33 - 64, bug tracker nos. 390, 394, 395, 403, 404, 408) + memory leaks removed Ngspice-30, Jan 1st, 2019 ============ - New features: + VDMOS device model has been overhauled extensively + Making the manual is now much more flexible and comfortable, xhtml manual added. + Add pre-defined variable controlswait to enable running .control sections after the simulation has finished (shared ngspice only) + Add an icon to the MS Windows GUI build + Enable more reliable memory usage data + Support libtinfo + add rotation angle to text output, vertcally aligned text for Postscript and Windows y-axis plot labels + enable postscript output for extended ascii. Currently only Western European latin-1 (ISO/IEC 8859-1) encoding is supported + Ancient Xgraph code removed - Bug fixes: + many bugs fixed (bug tracker nos. 253, 332, 337, 368, 374, 375, 376, 377, 378, 379, 380, 381, 384, 385, 386) + ancient bug removed that led to spurious heap corruption of shared ngspice under (very sensitive) Windows 10 + memory leaks removed Ngspice-29, Sept 30th, 2018 ============ - New features: + new variable no_auto_gnd. If set, the automatic replacing of gnd by 0 is disabled + new compatibility modes for 'set behavior=??'. ps sets PSPICE, lt sets LTSPICE compatibility, ltps is both for a file added by .include command, psa, lta, and ltpsa are the same for the whole netlist + .if, .elseif, .endif is now evaluated recursively, nested .if are thus enabled + new code model sidiode, that is a simple diode, linear breakdown, reverse and forward regions with smooth overlapp, and optional current limits + configure flag --with-fftw3. If set to 'no', internal fast fourier is used instead of fftw + command setseed to set the seed value for the random number generator + option seed=[val|random] + variable inputdir to remeber and retrieve the last input file directory + example directory 'digital' with analog, behavioral and digital example input files + new XSPICE filesource, d_source, and state-machine examples + + or - maybe part of instance name + Quasi-saturation VDMOS example + add environmental variable SOURCE_DATE_EPOCH to allow reproducible executables + new parameters to command setplot: setplot next, setplot previous + updates to commands cd, rusage, print + introduce diode recombination current part (ISR, NR) + update to bipolar and diode temperature equations - Bug fixes: + several bug fixes + lots of memory leaks removed, especially when XSPICE circuits are called several times in a loop. Ngspice-28, May 27th, 2018 ============ - New features: + Licenses for ngspice distribution are DFSG compatible + VDMOS power MOS model added + if 'set ngbehavior=ps' is given in .spiceinit, device libraries loaded via .include may have PSPICE syntax + --enable-oldapps configure flag to compile the old, seldom used apps ngnutmeg, ngmakeidx, ngmultidec, ngproc2mod, ngsconvert + add command mc_source to internally re-load the circuit + add command alterparam to alter the value of a parameter xxx given in .param xxx=value + add the function i(xyz) to measure the current in node 1 of device xyz, to be used in behavioral models. + new label 'noretraceplot' for the 'plot' command, if graphs in a plot show unwanted retracing lines. + The hyphen '-' is a valid character in model, device and subcircuit names + add noise for behavioral resistor + add a new vector type "temperature" + support instance parameter defaults on .model lines + New functions for XSPICE event node data export from shared ngspice: ngGet_Evt_NodeInfo(char*) and ngSpice_AllEvtNodes(void) + 'edisplay' command now showing node name, node type and number of events per node + add flag 'none' to the 'save' command for shared ngspice. Output data will not be stored, but are available via callback function ng_data. + add a function cm_get_circuit to allow accessing the circuit structure ckt from within an XSPICE code model. + add variable 'sim_status' to indicate if a simulation has been aborted + add pkg-config file - Bug fixes: + many, many ... as always Ngspice-27, Aug 28th, 2017 ============ - New features: + check for correct inductor coefficients + add variable 'win_console' + --enable-relpath configure flag to set preprocessor flag HAS_RELPATH + sets search path for spinit relativ to current directory + The search path for .spiceinit is: current dir, HOME dir, USERPROFILE dir + new function stddev to calculate the standard deviation of all elements of a vector + xspice digital n-input x m-output look-up table gate + xspice digital model d_lut (digital n-input look-up table gate) + add variable $sharedmode (if shared ngspice is running), to be used in scripts + enable msys2 for mingw compilation + OMP support for bsim3v3.24 model + bsim3v3.24: add model parameter lmlt (Channel length scaling) + OMP support for BSIM4.5 model + update and extension of command 'wrdata' + option xmu to set damping in trapezoid integration + command 'linearize' will take time data from transient analysis vector if no circuit is loaded + two new commands: edisplay and eprvcd + 'edisplay' will show a list of all event nodes + 'eprvcd' will print all event nodes in vcd format + XSPICE 2D and 3D table models + add variable 'batchmode' which is set when command line option `-b' is active + enable backquote substitution for Visual Studio console apps + update how-to-ngspice-vstudio.txt + update visualc directory and project files, add XSPICE code model generation by VS2015 + allow access to 4 GB memory of 32 bit ngspice on 64 bit Windows, 8 TB for 64 bit ngspice + new variable `interactive' + xspice, introduce cm_message_printf() + add variable `width' to command "print line ..." + support msys2 + favor exponential temperatur equation if all parameters tc1, tc2 and tce are given for R + move libfftw3 sideways out of the ngspice tree + remove visual studio 2008 .vcproj files + visualc/sharedspice.vcxproj, updated and migrated with visual studio 2015 + `E..table {expr} {pairs}', `G..', allow an optional `=' after `table' + `E..value=', `G..value=', allow `=' being optional + introduce TCE, exponential temperature coefficient for R + allow `temper' to be recognised when preceded by '=' + allow cross-compilation, especially for MinGW-w64 + allow "plot xlog ylog" (equiv to "plot loglog") + extend qa test to hisimhv version 2 + update hisimhv model to version 2.2.0 + update hisim model to version 2.8.0 + .control variable "sqrnoise" to deliver noise data in squared representation + noise analysis, deliver results in V/sqrt(Hz) and A/sqrt(Hz) + add delvt0 for bsim4 models + bug fixes for diode model + allow a xspice circuit with exclusively xspice event nodes + man pages for cmpp ngmakeidx and ngproc2mod + implement `nint()' + everywhere: ln to the base e, log to the base e, log10 to the base 10 + allow an optional '=' in ".func foo() = {expr}" + bsim4, update to version 4.8 + update hisimhv to version 1.2.4 + cmc quality check for bsim3 model + nested indexing for vectors + option savecurrents to save current through all devices + option interp to plot interpolated raw file data + MS VS 2010 project file added for compatibility + XSPICE: new callback function cm_get_path - Bug fixes: + many, many ... as always Ngspice-26, Jan 4th, 2014 ============ - New features: + fft command may (optionally) use fftw3 library + add nint() rounding function + usage of 'temper' in behavioral devices + check for soa (safe operating area) in several device models + library processing rewritten completely to enhance ngspice compatibility (.lib) + include file processing rewritten to allow nesting and various absolute and relative path names (.inc) + asinh, acosh, atanh functions + shared ngspice option added: ngspice optionally compiles as a shared object or dynamic link library + use a hash table to massively speed up parsing the netlist + implement a very basic .if/.else block + implement a signed power function `pwr' for controlled sources + implement multiplier `m' in F, G source + apply Area Calculation Method (ACM) to the bsim3v3.3 model + implement `tc1', `tc2' instance parameters - Bug fixes: + many, many ... please see http://sourceforge.net/p/ngspice/ngspice/ci/master/tree/ and check the 'history' button on the upper right. + removed memory leaks Ngspice-25, Jan 4th, 2013 ============ - New features: + add temperature coefficients for B source + commands "mdump", "mrdump" to dump matrix to file + allow `time', `temper', and `hertz' in expressions with behavioral R, L, C + Enable ctrl-c to interrupt a simulation also for Windows GUI + tests/bsim4: use the standard CMC model qa check + implement exit code for command "quit" + .nodeset all = value + memristor code model in extradev + new scalable diode model including tunnel component + variable xtrtol may override the XSPICE reduction of trtol + XSPICE example: delta-sigma converter + XSPICE: new d_source model + new option noopac + bsim3: make additonal parameters accessible with @mxx[par] + enable Mac OS X compilation + option reseries = val + commands "snsave", "snload" + update hisim to version 2.7.0, new qa tests + hisimhv update to version 1.2.3, new qa tests + allow Ctrl-d to quit + jfet model temperature extension, tcv and bex parameter + speed up vector handling by hash table for vector address storage and retrieval + update PSS code - Bug fixes: + many, many ... please see http://ngspice.git.sourceforge.net/git/gitweb.cgi?p=ngspice/ngspice;a=shortlog;pg=0 + remove memory leaks + update tclspice for MS Windows + adms3 removed due to licensing issues Ngspice-24, Jan 29th, 2012 ============ - New features: + .csparam allows to tranfer a param into a vector in .control ... .endc + functions floor and ceil + syntax Gxxx n1 n2 TABLE {expression} = (x0, y0) (x1, y1) (x2, y2) + syntax Gxxx n1 n2 value={equation} or Exxx n1 n2 value={equation} + variable strict_errorhandling to exit ngspice with exit code 1 if any error occurs during circuit parsing + command altermod allows reading from file + command "devhelp" to show available devices and describe device parameters + command "inventory" to print the number of istances of each device. + function cph(vec) delivers phase from a vector without jumps at +-PI + enable 64 bit compilation in MS Visual Studio + --adms3 flag to compile with (experimental) adms code + still very experimental pss code + command 'remcirc' to remove a circuit from the list + command 'wrdata' aknowledges appendwrite and prints complex variables + allow comment lines inside of command files + path variable NGSPICE_INPUT + 'Filesource' code model - Bug fixes: + More on prototypes, type casts, reordering of functions, compiler warnings + fix a numerical problem in the hisim2 and hisimhv models + plot i(vdd) from a loaded rawfile + fix the guard for device generated internal nodes (via CKTmkVolt()) + reduce memory leaks for command 'reset' + parameter processing for nested .subckt + bsim4/b4noi.c: correct init the correlated noise slot in noiseDens and lnNdens vector + Many small bugs Ngspice-23, June 5th, 2011 ============ - New features: + Reduction of trtol to 1 only if 'A' devices in the circuit and xspice is enabled + command wrs2p to write a s-parameter file using Touchstone vers. 1 format + d_source d_state d_ram, test cases for those xspice codemodels + transient noise simulation added to independent voltage and current sources + Random telegraph noise added to independent voltage and current sources + 'time = nnn' in stop command added + random voltage generator option trrandom to independent voltage and current sources + ngspice build possible in a separate directory (e.g. in ng-spice-rework/release) + update FIND .. WHEN measurements + diode & bjt temperature model update with tlev and tlevc + merge bsim3v1a code with bsim3v0 and bsim3v1s code with bsim3v1 + bjt2: removed - all GP extensions of this model are now in the bjt model + HiSIM_HV model vers. 1.2.1 added + bsim3v32: delvto and mulu0 as instance parameters + Replace HiSIM1 by HiSIM_2.5.1_Release_20110407 - Bug fixes: + More on prototypes, type casts, reordering of functions, compiler warnings + allow models like 2N2904 or 2SK136 also in subcircuits + fix sensitvity calculation (for the dc-2+.cir testcase) + allow multiple call to setup w/ correct node collapsing + Many small bugs Ngspice-22, Sept 26th, 2010 ============ - New features: + OpenMP multicore support for BSIM3, BSIM4, and BSIMSOI4 + reinstate {$var} expansion in interactive interpreter + .TITLE line added + update to 'spectrum' script + par('expression') in .four, .plot, .print, .meas, .save commands + command 'option' for use in spinit, .spiceinit, and in scripts + adms procedure updated + new random number generator, random functions sunif() and sgauss() + ngspice manual updated - Bug fixes: + Major code cleanup to reduce compiler/linker warnings: ansi function prototypes, void/char pointers to named pointers, explicit type casts and many more + Many small bugs Ng-spice-rework-21, Jun3, 13th 2010 ============ - Updated Devices: BSIMSOI 4.3.1 - New features: + Compatibility: C, L, R, devices and E, G sources with expressions Variables HERTZ, TIME, TEMPER added + E, G sources with pwl function + New manual + Plotting with Gnuplot, + Writing wrdata for simple text table to file + .measure improved + transmission line models improved - Bug fixes: + Many small bugs, memory leaks, memory overflows Ng-spice-rework-20, November, 16th 2009 ============ Ngspice release 20 is the second release of the simulator in 2009. - Fixes: model names starting with a number (1n4001) are now correctly parsed. The .global command has been reinstated (it was previously disabled) and error messages now display the corresponding line numberin the input deck. - New Features: .measure command for transient, ac and dc analyses (still not complete, e.g. DERIV is missing). - Devices: Updated BISM4 model to revision 4.6.5. Added PWL (PieceWise Linear) functionality for B (arbitrary generator) sources. Ng-spice-rework-19, April, 23rd 2009 ============ Ngspice release 19 came early after release 18. It reveals an important work in compile scripts, many bug fixes in memory management, interface, and work in device models. - Compile scripts: tclspice and ADMS compiling fixes. Architecture compiling fixes for SunOS, MS Visual Studio, MINGW, Cygwin. - Memory management: fixed memory leaks, modifies memory management for MS Windows, integration of espice bugfixes and enhancements, bug fixes in plots and cli interface. - Rework of BSim models, integration of EPFL-EKV model V2.63, ADMS models mextram, hicum0, hicum2. Ng-spice-rework-18 ============ Rework-18 is introduces several new features into ngspice. This is a major release that comes after more than three years. During the silent years ngspice developers worked in CVS to stabilize and introduce new features into the simulator. - Tclspice simulator library has been merged with ngspice. Now you can compile ngapice or tclspice by asserting a configure switch. See README.tcl - New options have been introduced: brief, listing, autostop and scale - Support for .lib file has been introduced. This allows the use of third party model libraries in ngspice. - .measure statements: avg, integ, rms, max, min, delay, param - .global statements t support for global nodes whose name is not expanded when flattening the netlist. - .func macros for inlining functions into netlists. - Improved the numparam library to support fully parametrized netlists. - BSIM model binning. - new multi-input gate VCVS using XSPICE extensions. Ng-spice-rework-17 ============ This is a bug fix release. Previous release tarball did not included an include file necessary for compiling numparam library. Ng-spice-rework-16 ============ Rework-16 comes out after almost one year of CVS development (from 15-fixedRC3). This release improves ngspice in three ways: - Bug fixing: most of the bugs that affected rework-15 have been fixed, thus ngspice is more stable, especially the xspice extension, the subcircuit (X devices) handling and the numparam library. - New features: netlist syntax has been expandend allowing for end-of-line comments. A ".global" card has beed added to define global nodes, i.e. nodes that are not expanded in subcircuits. It is possible to define TC for resistors on the instance line. The editline library can be used instead of readline (no more GPL license violation). - Porting: ngspice now works (with xspice extension) on Windows using MINGW/MSYS. Ng-spice-rework-15 ============ Rework-15 release is a giant leap forward for ngspice. It incorporates many (read most) of the improvements implemented in tclspice during the two years long "sleep" of ngspice and adds many others. The incomplete list of new features incorporated are: - Xspice simulator (with codemodel dynamic loading support): a mixed signal simulator built upon spice3. - Cider simulator: a mixed level simulator built upon spice3. - Numparam library: a library that allows for parameter substitution at netlist level. - Improved models: Diode model includes periphery effects and high level of injection effects, BJT and BJT2 enhanced. BSIM3 now includes ACM. BSIM4 implementation corrected. -New models: VBIC (3 Terminals, no excess phase and thermal network), HiSIM. - Frontend leaks closed. Now frontend works as it should. - Many new example file. - Xgraph plotting program included. Ng-spice-rework-14 ============ This is a major release in terms of bug-fixes. Some enhancements have been included: BSIM4 model and support for EKV model. The source code for the latter must be obtained from EKV web site (see DEVICE for more info). To enable EKV support you have to obtain the code first and then use the configure switch "--enable-ekv". The spice code contains an option to debug frontend code, now this is available in configure as "--enable-ftedebug". Ng-spice-rework-13 ============ This is a major release in terms of fixes and enhancements. A garbage collector support has been added. If the configuration script detects that you have installed GC (Bohem-Weiser conservative garbage collector), it will use it. Some memory leaks have been fixed too. Enhancements to the code comes from Alan's contribute code, a description of improvements follows (extracted form Alan's mail): Output File Format Changes - (NOTE: Do not rely on this, we may revert to the old format in the next release). Text mode .OP results even though "rawfile" written. Internal device nodes are not saved to "rawfile" (reduces file size). Optionally, these internal nodes can be replaced by device currents and saved. DC Convergence Enhancements - "Source-Stepping" algorithm modified with a "Dynamic" step size. After each successful step, the node voltages are saved, the source-factor is increased by the step-factor, and the step-factor is increased (for the next step). If the step fails, i.e. the circuit does not converge, the source-factor is set to the value from the previous successful step, the previously stored node voltages are restored, the step-factor is reduced, the source factor is increased by this smaller step-factor, and convergence is attempted again. Same thing done for "Gmin-stepping" algorithm. "Gshunt" option added. This sets the "diagGmin" variable used in the gmin-stepping algorithm to a non-zero value for the final solution. (Normally this is set to zero for the final solution). This helps for circuits with floating nodes (and for some others too). The Gmin implementation across the substrate diodes of MOS1, MOS2, MOS3, MOS6 and BSIM3 devices, and across BJT base-emitter and base-collector diodes, was incorrect. Correcting this dramatically improved DC convergence. (I think this also affects BSIM1 and 2 but I haven't fixed them yet !) The gm, gmb and gds calculations in the MOS3 model were all wrong. The device equations were fixed, leading to much improved convergence. The Vcrit value used for diode voltage limiting was calculated without taking into account the device area (and in some cases without using the temperature corrected saturation current). This could cause floating point overflows, especially in device models designed to be scaled by a small area, e.g. 2u by 2u diodes (area=4e-12). This is now fixed for Diode, BJT, MOS1, MOS2, and MOS3 models. The diode voltage limiting was modified to add negative voltage limiting. Negative diode voltages are now limited to 3*Vdp-10, where Vdp is the voltage from the previous iteration. If Vdp is positive, then the voltage is limited to -10V. This prevents some more floating point overflows. (Actually, I'm still playing with the best values for this). The Spice3 "fix" for the MOS3 gds discontinuity between the linear and saturated regions only works if the VMAX parameter is non-zero. A "tweak" has been added for the VMAX=0 case. Transient Convergence Enhancements - Temperature correction of various diode capacitances was implemented slightly incorrectly, leading to capacitance discontinuities in simulations at temperatures other than nominal. This affected the Diode and MOS3 models. A mistake in the implementation of the MOS3 source-bulk capacitance model resulted in a charge storage discontinuity. This has been fixed. The level 2 MOSFET model seems to calculate Von and Vth values for the threshold and subthreshold values respectively, but then uses Vbin to calculate the Vdsat voltage used to find the drain current. However, a jump statement uses Von to decide that the device is in the "cutoff" region, which means that when this jump allows the drain current to be calculated, Vdsat can already be well above zero. This leads to a discontinuity of drain current with respect to gate voltage. The code is now modified to use Vbin for the jump decision. It looks like the code should actually use Vth as the threshold voltage, but since other SPICE simulators follow the original Berkeley code, this was left alone. New Model Parameters - A device multiplier instance parameter "M" (i.e. M devices in parallel) was added to the MOS1,2,3 and BSIM3 mosfet models. Input Read-in and Checking - Numbers beginning with a + sign got the input routine confused. Fixed now. Attempts to nodeset (or .IC) non-existent nodes are flagged with a warning. PWL statements on Voltage or Current sources are now checked for "non-increasing" time-points at the start of the simulation. Previously each time-point was checked as it was reached during the simulation, which could be very annoying if you made a mistake which caused the simulation to fail after hours of run-time. A check which was performed at the end of each sub-circuit expansion was moved to the top level. This check makes sure that all sub-circuits have been defined, but in its original position, it meant that if a sub-circuit included ANY .MODEL statements at all, then ALL the models called in that sub-circuit must also be defined within that sub-circuit. Now SPICE behaves as expected, i.e. a subcircuit may define its own models, but may also use models defined at any level above. Miscellaneous Fixes/Enhancements - MOS devices reported only half of the Meyer capacitances, and did not include overlap capacitances, when reporting to the .OP printout, or when storing device capacitances to the "rawfile". The ideal switch devices had no time-step control to stop their controlling voltages/currents overshooting the switching thresholds. The time-step control has been modified to use the last two time points to estimate if the next one will move the controlling voltage/current past a switching threshold. If this looks likely, then the time-step is reduced. The "rawfile" writing routines have been modified to print the "reference value" to the console during the simulation. This lets the user see exactly how far and how fast the simulation is proceeding. .OP printout tidied up a lot to make the printout clearer. Analysis order changed to fix a "feature" where, if you ask for a .OP and a .TRAN in the same simulation, the node voltages printed out correspond to the .OP, but the device data was from the last timepoint of the .TRAN Etc. - There are other minor bug fixes, and changes to reduce compiler warnings. There are probably some more significant fixes which I've forgotten :-) Ng-spice-rework-12 ============ Arno did a great work this summer! The pole-zero analysis has been corrected. The error was introduced in an attempt to eliminate compiler warnings. The source has been reworked and info file have been updated. As you may see, a new dir called "spicelib" has been created, another step toward the separation of the simulator from the frontend. Ng-spice-rework-11 ============ Resistor code (device) has been modified to conform to spice3 device coding standard. A new step function (U2) has been introduced. Documentation updated. Ng-spice-rework-10 ============ Added BSIM4 model and closed a couple of serious bugs. Added DEVICES file to distribution. This file contains the status of device models in this simulator. Read it, this file can save you a lot of time. Ng-spice-rework-9 ============ Thanks to Arno Peters now all device models are dynamically loaded on demand. They are linked as shared libraries. The next step is the dlopen() one which will make possible to link devices without any recompilation. Ng-spice-rework-8 ============ Applied Arno's patch. From his mail message: Hi Paolo, I have prepared a source cleaning patch. Features: + patches don't get polluted with differences between automatically generated Makefile.am files. Usually these make up the biggest part of the patches. This allows me to read the patch on the mailing list instead of sifting through 90% redundant and irrelevant changes. + the shell script autogen.sh automatically regenerates the required files if the user has automake, autoconf and libtool installed. + this feature is only valuable to developers, not to end users. Usage of this patch, once incorporated: # create a working tree to work from cp -a ng-spice-rework-x ng-spice [ Changes made to ng-spice ] # clean up all the automatically generated files cd ng-spice; make maintainer-clean # extract the differences diff -ruN ng-spice-rework-x ng-spice > my.patch [ Patch sent to ng-spice mailing list or you ] # incorporate changes into the tree cd ng-spice-rework-x; patch -p1 < my.patch # update the automatically generated files cd ng-spice-rework-x; sh autogen.sh Ng-spice-rework-7 (22 Mar 2000) ============ Bug fix release Ng-spice-rework-6 (29 Jan 2000) ============ This porting includes: 1) BSIM3V3.1 model as level 49. This is the version modified by Serban Popescu which understands the M parameter and implements HDIF. 2) BSIM3V3.2 model al Level 50. This is the standard Berkeley version. 3) Now the resistor model can accepts two different values for DC and AC resistance. Ng-spice-rework-5 and 5_2 (Jan 2000) ============ Internal development release, buggy and not working. Ng-spice-rework-4 (22/12/99) ============ This porting includes a new feature: 1) dynamically loading of some device code as an experimental feature for the future GPL simulator. Thanks to Arno Peters and Manu Rouat. 2) Patched the following bug (thanks to Andrew Tuckey for having supplied the patch). * Wsw (current controlled switch) in subckt, parsing bug. * scale factor in arbitrary source. * bug in noise analysis. * save segmentation faults. tmpk8ny_4pz/Stuarts_Poly_Notes0000644000175000017500000000647513546075722016737 0ustar carstencarstenSPICE 2 POLY CODEMODEL WARNING! The text in this document has been prepared in 2003 and is outdated. It is provided here only for reference and may provide some (historical) information. SPICE2 POLY attributes are now available for controlled sources. To use POLY attributes, configure tclspice/ngspice with the --enable-xspice flag set as described above. After compilation of ngspice, cd into $(top_srcdir)/src/xspice/icm and read the README file there for instructions about how to get POLY support. (Hint: you have to download some stuff from http://www.fe.uni-lj.si/ and edit the Makefiles before you can do "make && make install" of the codemodel stuff.) -- SDB 6.22.2003. -------------------------------------------------------------------- COMPILING XSPICE CHANGES The dependencies in the Makefile don't seem to work when you are compiling changes in the xspice stuff. Obviously, the best thing to do is fix Makefile.am, but since I am not an expert at this, I have been using the following workaround when making: touch src/main.c && make && make install I recommend you also do this if you hack anything under src/xspice. -- SDB 6.19.2003. --------------------------------------------------------------------- DEBUGGING SPICE To avoid a segmentation fault in the initial run, use the following command in gdb: setenv SPICE_NO_DATASEG_CHECK "1" Or, the comparable command in your shell before running gdb. This disable accurate tracking of how much memory is used. ---------------------------------------------------------------------- USING A GARBAGE COLLECTOR Get the Boehm-Weiser conservative garbage collector at the following address: http://www.hpl.hp.com/personal/Hans_Boehm/gc/ Compile it with 'make liblinuxgc.so' and install libgc.so and gc.h where the compiler can find them (i.e., /usr/local/lib and /usr/local/include). Run configure and compile. ---------------------------------------------------------------------- CREATING PATCHES If you don't have access to anonymous CVS: # extract the differences $ diff -ruN ng-spice-rework-x ng-spice > my.patch where ng-spice-rework-x is the snapshot you used to base your changes on. If you do have access to anonymous CVS: $ cvs diff -u > my.patch Note: this only works if you haven't added any files. Otherwise, the first method is better. Now, send your patch to ng-spice mailing list. ---------------------------------------------------------------------- INCORPORATING PATCHES # apply the patch $ patch -p1 < my.patch # update the automatically generated files $ sh autogen.sh ---------------------------------------------------------------------- INCOMPATIBILITIES BETWEEN SPICE3 AND SPICE2 The output format of spice3 is slightly different for .print and .plot lines. Most notably, different traces on plots are not scaled independently. This is most noticeable on phase/magnitude plots from an AC analysis (also, phase is displayed in radians). Finally, frequency for ".PRINT AC" lines is displayed as a complex quantity with an all-zero imaginary component. For input, "POLY( )" sources are not supported (the non-linear dependent source provides a more general replacement). Also, the ".ALTER" line is not supported. The Spice3 parser may be slightly different on subtle points of reading input (lines need not start at column 1 for instance). tmpk8ny_4pz/tests/0000755000175000017500000000000013546075722014322 5ustar carstencarstentmpk8ny_4pz/tests/bsim3soidd/0000755000175000017500000000000013546075722016362 5ustar carstencarstentmpk8ny_4pz/tests/bsim3soidd/RampVg2.out0000644000175000017500000013701413546075722020377 0ustar carstencarsten Circuit: * BSIMSOI (DD) example Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Warning: Pd = 0 is less than W. Warning: Ps = 0 is less than W. Initial Transient Solution -------------------------- Node Voltage ---- ------- d 1.5 g 0 e 0 s 0 b 0 vb#branch 0 vs#branch 1.06195e-11 ve#branch 0 vg#branch 1.5e-20 vd#branch -1.06195e-11 No. of Data Rows : 1029 * BSIMSOI (DD) example -------------------------------------------------------------------------------- Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 0 0.000000e+00 9.166197e-02 0.000000e+00 1 1.000000e-14 9.166197e-02 0.000000e+00 2 2.000000e-14 9.166197e-02 0.000000e+00 3 4.000000e-14 9.166197e-02 0.000000e+00 4 8.000000e-14 9.166197e-02 0.000000e+00 5 1.600000e-13 9.166197e-02 0.000000e+00 6 3.200000e-13 9.166197e-02 0.000000e+00 7 6.400000e-13 9.166197e-02 0.000000e+00 8 1.280000e-12 9.166197e-02 0.000000e+00 9 2.280000e-12 9.166197e-02 0.000000e+00 10 3.280000e-12 9.166197e-02 0.000000e+00 11 4.280000e-12 9.166197e-02 0.000000e+00 12 5.280000e-12 9.166197e-02 0.000000e+00 13 6.280000e-12 9.166197e-02 0.000000e+00 14 7.280000e-12 9.166197e-02 0.000000e+00 15 8.280000e-12 9.166197e-02 0.000000e+00 16 9.280000e-12 9.166197e-02 0.000000e+00 17 1.028000e-11 9.166197e-02 0.000000e+00 18 1.128000e-11 9.166197e-02 0.000000e+00 19 1.228000e-11 9.166197e-02 0.000000e+00 20 1.328000e-11 9.166197e-02 0.000000e+00 21 1.428000e-11 9.166197e-02 0.000000e+00 22 1.528000e-11 9.166197e-02 0.000000e+00 23 1.628000e-11 9.166197e-02 0.000000e+00 24 1.728000e-11 9.166197e-02 0.000000e+00 25 1.828000e-11 9.166197e-02 0.000000e+00 26 1.928000e-11 9.166197e-02 0.000000e+00 27 2.000000e-11 9.166197e-02 0.000000e+00 28 2.010000e-11 9.393837e-02 2.000000e-04 29 2.030000e-11 9.863117e-02 6.000000e-04 30 2.070000e-11 1.087280e-01 1.400000e-03 31 2.150000e-11 1.322176e-01 3.000000e-03 32 2.250000e-11 1.634797e-01 5.000000e-03 33 2.350000e-11 1.940307e-01 7.000000e-03 34 2.450000e-11 2.234013e-01 9.000000e-03 35 2.550000e-11 2.517648e-01 1.100000e-02 36 2.650000e-11 2.793418e-01 1.300000e-02 37 2.750000e-11 3.062522e-01 1.500000e-02 38 2.850000e-11 3.324855e-01 1.700000e-02 39 2.950000e-11 3.579054e-01 1.900000e-02 40 3.050000e-11 3.823391e-01 2.100000e-02 41 3.150000e-11 4.056560e-01 2.300000e-02 42 3.250000e-11 4.274095e-01 2.500000e-02 43 3.350000e-11 4.473553e-01 2.700000e-02 44 3.450000e-11 4.654301e-01 2.900000e-02 45 3.550000e-11 4.816629e-01 3.100000e-02 46 3.650000e-11 4.960865e-01 3.300000e-02 47 3.750000e-11 5.086948e-01 3.500000e-02 48 3.850000e-11 5.194649e-01 3.700000e-02 49 3.950000e-11 5.284127e-01 3.900000e-02 50 4.050000e-11 5.356307e-01 4.100000e-02 51 4.150000e-11 5.412833e-01 4.300000e-02 52 4.250000e-11 5.455761e-01 4.500000e-02 53 4.350000e-11 5.487215e-01 4.700000e-02 54 4.450000e-11 5.509170e-01 4.900000e-02 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 55 4.550000e-11 5.523348e-01 5.100000e-02 56 4.650000e-11 5.531176e-01 5.300000e-02 57 4.750000e-11 5.533812e-01 5.500000e-02 58 4.850000e-11 5.532216e-01 5.700000e-02 59 4.950000e-11 5.527060e-01 5.900000e-02 60 5.050000e-11 5.518984e-01 6.100000e-02 61 5.150000e-11 5.508476e-01 6.300000e-02 62 5.250000e-11 5.495937e-01 6.500000e-02 63 5.350000e-11 5.481712e-01 6.700000e-02 64 5.450000e-11 5.466100e-01 6.900000e-02 65 5.550000e-11 5.449355e-01 7.100000e-02 66 5.650000e-11 5.431673e-01 7.300000e-02 67 5.750000e-11 5.413167e-01 7.500000e-02 68 5.850000e-11 5.393864e-01 7.700000e-02 69 5.950000e-11 5.373729e-01 7.900000e-02 70 6.050000e-11 5.352712e-01 8.100000e-02 71 6.150000e-11 5.330782e-01 8.300000e-02 72 6.250000e-11 5.307927e-01 8.500000e-02 73 6.350000e-11 5.284157e-01 8.700000e-02 74 6.450000e-11 5.259492e-01 8.900000e-02 75 6.550000e-11 5.233961e-01 9.100000e-02 76 6.650000e-11 5.207594e-01 9.300000e-02 77 6.750000e-11 5.180420e-01 9.500000e-02 78 6.850000e-11 5.152468e-01 9.700000e-02 79 6.950000e-11 5.123765e-01 9.900000e-02 80 7.050000e-11 5.094333e-01 1.010000e-01 81 7.150000e-11 5.064196e-01 1.030000e-01 82 7.250000e-11 5.033370e-01 1.050000e-01 83 7.350000e-11 5.001873e-01 1.070000e-01 84 7.450000e-11 4.969718e-01 1.090000e-01 85 7.550000e-11 4.936916e-01 1.110000e-01 86 7.650000e-11 4.903478e-01 1.130000e-01 87 7.750000e-11 4.869410e-01 1.150000e-01 88 7.850000e-11 4.834720e-01 1.170000e-01 89 7.950000e-11 4.799410e-01 1.190000e-01 90 8.050000e-11 4.763484e-01 1.210000e-01 91 8.150000e-11 4.726943e-01 1.230000e-01 92 8.250000e-11 4.689788e-01 1.250000e-01 93 8.350000e-11 4.652016e-01 1.270000e-01 94 8.450000e-11 4.613625e-01 1.290000e-01 95 8.550000e-11 4.574612e-01 1.310000e-01 96 8.650000e-11 4.534973e-01 1.330000e-01 97 8.750000e-11 4.494700e-01 1.350000e-01 98 8.850000e-11 4.453789e-01 1.370000e-01 99 8.950000e-11 4.412231e-01 1.390000e-01 100 9.050000e-11 4.370017e-01 1.410000e-01 101 9.150000e-11 4.327138e-01 1.430000e-01 102 9.250000e-11 4.283584e-01 1.450000e-01 103 9.350000e-11 4.239342e-01 1.470000e-01 104 9.450000e-11 4.194401e-01 1.490000e-01 105 9.550000e-11 4.148747e-01 1.510000e-01 106 9.650000e-11 4.102366e-01 1.530000e-01 107 9.750000e-11 4.055241e-01 1.550000e-01 108 9.850000e-11 4.007355e-01 1.570000e-01 109 9.950000e-11 3.958691e-01 1.590000e-01 110 1.005000e-10 3.909227e-01 1.610000e-01 111 1.015000e-10 3.858943e-01 1.630000e-01 112 1.025000e-10 3.807815e-01 1.650000e-01 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 113 1.035000e-10 3.755815e-01 1.670000e-01 114 1.045000e-10 3.702914e-01 1.690000e-01 115 1.055000e-10 3.649100e-01 1.710000e-01 116 1.065000e-10 3.594363e-01 1.730000e-01 117 1.075000e-10 3.538678e-01 1.750000e-01 118 1.085000e-10 3.482016e-01 1.770000e-01 119 1.095000e-10 3.424350e-01 1.790000e-01 120 1.105000e-10 3.365646e-01 1.810000e-01 121 1.115000e-10 3.305872e-01 1.830000e-01 122 1.125000e-10 3.244993e-01 1.850000e-01 123 1.135000e-10 3.182970e-01 1.870000e-01 124 1.145000e-10 3.119762e-01 1.890000e-01 125 1.155000e-10 3.055323e-01 1.910000e-01 126 1.165000e-10 2.989603e-01 1.930000e-01 127 1.175000e-10 2.922546e-01 1.950000e-01 128 1.185000e-10 2.854089e-01 1.970000e-01 129 1.195000e-10 2.784155e-01 1.990000e-01 130 1.200000e-10 2.748604e-01 2.000000e-01 131 1.201000e-10 2.748604e-01 2.000000e-01 132 1.203000e-10 2.748604e-01 2.000000e-01 133 1.207000e-10 2.748604e-01 2.000000e-01 134 1.215000e-10 2.748604e-01 2.000000e-01 135 1.225000e-10 2.748604e-01 2.000000e-01 136 1.235000e-10 2.748604e-01 2.000000e-01 137 1.245000e-10 2.748604e-01 2.000000e-01 138 1.255000e-10 2.748604e-01 2.000000e-01 139 1.265000e-10 2.748604e-01 2.000000e-01 140 1.275000e-10 2.748604e-01 2.000000e-01 141 1.285000e-10 2.748604e-01 2.000000e-01 142 1.295000e-10 2.748604e-01 2.000000e-01 143 1.305000e-10 2.748604e-01 2.000000e-01 144 1.315000e-10 2.748604e-01 2.000000e-01 145 1.325000e-10 2.748604e-01 2.000000e-01 146 1.335000e-10 2.748604e-01 2.000000e-01 147 1.345000e-10 2.748604e-01 2.000000e-01 148 1.355000e-10 2.748604e-01 2.000000e-01 149 1.365000e-10 2.748604e-01 2.000000e-01 150 1.375000e-10 2.748604e-01 2.000000e-01 151 1.385000e-10 2.748604e-01 2.000000e-01 152 1.395000e-10 2.748604e-01 2.000000e-01 153 1.405000e-10 2.748604e-01 2.000000e-01 154 1.415000e-10 2.748604e-01 2.000000e-01 155 1.425000e-10 2.748604e-01 2.000000e-01 156 1.435000e-10 2.748604e-01 2.000000e-01 157 1.445000e-10 2.748604e-01 2.000000e-01 158 1.455000e-10 2.748604e-01 2.000000e-01 159 1.465000e-10 2.748604e-01 2.000000e-01 160 1.475000e-10 2.748604e-01 2.000000e-01 161 1.485000e-10 2.748604e-01 2.000000e-01 162 1.495000e-10 2.748604e-01 2.000000e-01 163 1.505000e-10 2.748604e-01 2.000000e-01 164 1.515000e-10 2.748604e-01 2.000000e-01 165 1.525000e-10 2.748604e-01 2.000000e-01 166 1.535000e-10 2.748604e-01 2.000000e-01 167 1.545000e-10 2.748604e-01 2.000000e-01 168 1.555000e-10 2.748604e-01 2.000000e-01 169 1.565000e-10 2.748604e-01 2.000000e-01 170 1.575000e-10 2.748604e-01 2.000000e-01 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 171 1.585000e-10 2.748604e-01 2.000000e-01 172 1.595000e-10 2.748604e-01 2.000000e-01 173 1.605000e-10 2.748604e-01 2.000000e-01 174 1.615000e-10 2.748604e-01 2.000000e-01 175 1.625000e-10 2.748604e-01 2.000000e-01 176 1.635000e-10 2.748604e-01 2.000000e-01 177 1.645000e-10 2.748604e-01 2.000000e-01 178 1.655000e-10 2.748604e-01 2.000000e-01 179 1.665000e-10 2.748604e-01 2.000000e-01 180 1.675000e-10 2.748604e-01 2.000000e-01 181 1.685000e-10 2.748604e-01 2.000000e-01 182 1.695000e-10 2.748604e-01 2.000000e-01 183 1.705000e-10 2.748604e-01 2.000000e-01 184 1.715000e-10 2.748604e-01 2.000000e-01 185 1.725000e-10 2.748604e-01 2.000000e-01 186 1.735000e-10 2.748604e-01 2.000000e-01 187 1.745000e-10 2.748604e-01 2.000000e-01 188 1.755000e-10 2.748604e-01 2.000000e-01 189 1.765000e-10 2.748604e-01 2.000000e-01 190 1.775000e-10 2.748604e-01 2.000000e-01 191 1.785000e-10 2.748604e-01 2.000000e-01 192 1.795000e-10 2.748604e-01 2.000000e-01 193 1.805000e-10 2.748604e-01 2.000000e-01 194 1.815000e-10 2.748604e-01 2.000000e-01 195 1.825000e-10 2.748604e-01 2.000000e-01 196 1.835000e-10 2.748604e-01 2.000000e-01 197 1.845000e-10 2.748604e-01 2.000000e-01 198 1.855000e-10 2.748604e-01 2.000000e-01 199 1.865000e-10 2.748604e-01 2.000000e-01 200 1.875000e-10 2.748604e-01 2.000000e-01 201 1.885000e-10 2.748604e-01 2.000000e-01 202 1.895000e-10 2.748604e-01 2.000000e-01 203 1.905000e-10 2.748604e-01 2.000000e-01 204 1.915000e-10 2.748604e-01 2.000000e-01 205 1.925000e-10 2.748604e-01 2.000000e-01 206 1.935000e-10 2.748604e-01 2.000000e-01 207 1.945000e-10 2.748604e-01 2.000000e-01 208 1.955000e-10 2.748604e-01 2.000000e-01 209 1.965000e-10 2.748604e-01 2.000000e-01 210 1.975000e-10 2.748604e-01 2.000000e-01 211 1.985000e-10 2.748604e-01 2.000000e-01 212 1.995000e-10 2.748604e-01 2.000000e-01 213 2.005000e-10 2.748604e-01 2.000000e-01 214 2.015000e-10 2.748604e-01 2.000000e-01 215 2.025000e-10 2.748604e-01 2.000000e-01 216 2.035000e-10 2.748604e-01 2.000000e-01 217 2.045000e-10 2.748604e-01 2.000000e-01 218 2.055000e-10 2.748604e-01 2.000000e-01 219 2.065000e-10 2.748604e-01 2.000000e-01 220 2.075000e-10 2.748604e-01 2.000000e-01 221 2.085000e-10 2.748604e-01 2.000000e-01 222 2.095000e-10 2.748604e-01 2.000000e-01 223 2.105000e-10 2.748604e-01 2.000000e-01 224 2.115000e-10 2.748604e-01 2.000000e-01 225 2.125000e-10 2.748604e-01 2.000000e-01 226 2.135000e-10 2.748604e-01 2.000000e-01 227 2.145000e-10 2.748604e-01 2.000000e-01 228 2.155000e-10 2.748604e-01 2.000000e-01 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 229 2.165000e-10 2.748604e-01 2.000000e-01 230 2.175000e-10 2.748604e-01 2.000000e-01 231 2.185000e-10 2.748604e-01 2.000000e-01 232 2.195000e-10 2.748604e-01 2.000000e-01 233 2.205000e-10 2.748604e-01 2.000000e-01 234 2.215000e-10 2.748604e-01 2.000000e-01 235 2.225000e-10 2.748604e-01 2.000000e-01 236 2.235000e-10 2.748604e-01 2.000000e-01 237 2.245000e-10 2.748604e-01 2.000000e-01 238 2.255000e-10 2.748604e-01 2.000000e-01 239 2.265000e-10 2.748604e-01 2.000000e-01 240 2.275000e-10 2.748604e-01 2.000000e-01 241 2.285000e-10 2.748604e-01 2.000000e-01 242 2.295000e-10 2.748604e-01 2.000000e-01 243 2.305000e-10 2.748604e-01 2.000000e-01 244 2.315000e-10 2.748604e-01 2.000000e-01 245 2.325000e-10 2.748604e-01 2.000000e-01 246 2.335000e-10 2.748604e-01 2.000000e-01 247 2.345000e-10 2.748604e-01 2.000000e-01 248 2.355000e-10 2.748604e-01 2.000000e-01 249 2.365000e-10 2.748604e-01 2.000000e-01 250 2.375000e-10 2.748604e-01 2.000000e-01 251 2.385000e-10 2.748604e-01 2.000000e-01 252 2.395000e-10 2.748604e-01 2.000000e-01 253 2.405000e-10 2.748604e-01 2.000000e-01 254 2.415000e-10 2.748604e-01 2.000000e-01 255 2.425000e-10 2.748604e-01 2.000000e-01 256 2.435000e-10 2.748604e-01 2.000000e-01 257 2.445000e-10 2.748604e-01 2.000000e-01 258 2.455000e-10 2.748604e-01 2.000000e-01 259 2.465000e-10 2.748604e-01 2.000000e-01 260 2.475000e-10 2.748604e-01 2.000000e-01 261 2.485000e-10 2.748604e-01 2.000000e-01 262 2.495000e-10 2.748604e-01 2.000000e-01 263 2.505000e-10 2.748604e-01 2.000000e-01 264 2.515000e-10 2.748604e-01 2.000000e-01 265 2.525000e-10 2.748604e-01 2.000000e-01 266 2.535000e-10 2.748604e-01 2.000000e-01 267 2.545000e-10 2.748604e-01 2.000000e-01 268 2.555000e-10 2.748604e-01 2.000000e-01 269 2.565000e-10 2.748604e-01 2.000000e-01 270 2.575000e-10 2.748604e-01 2.000000e-01 271 2.585000e-10 2.748604e-01 2.000000e-01 272 2.595000e-10 2.748604e-01 2.000000e-01 273 2.605000e-10 2.748604e-01 2.000000e-01 274 2.615000e-10 2.748604e-01 2.000000e-01 275 2.625000e-10 2.748604e-01 2.000000e-01 276 2.635000e-10 2.748604e-01 2.000000e-01 277 2.645000e-10 2.748604e-01 2.000000e-01 278 2.655000e-10 2.748604e-01 2.000000e-01 279 2.665000e-10 2.748604e-01 2.000000e-01 280 2.675000e-10 2.748604e-01 2.000000e-01 281 2.685000e-10 2.748604e-01 2.000000e-01 282 2.695000e-10 2.748604e-01 2.000000e-01 283 2.705000e-10 2.748604e-01 2.000000e-01 284 2.715000e-10 2.748604e-01 2.000000e-01 285 2.725000e-10 2.748604e-01 2.000000e-01 286 2.735000e-10 2.748604e-01 2.000000e-01 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 287 2.745000e-10 2.748604e-01 2.000000e-01 288 2.755000e-10 2.748604e-01 2.000000e-01 289 2.765000e-10 2.748604e-01 2.000000e-01 290 2.775000e-10 2.748604e-01 2.000000e-01 291 2.785000e-10 2.748604e-01 2.000000e-01 292 2.795000e-10 2.748604e-01 2.000000e-01 293 2.805000e-10 2.748604e-01 2.000000e-01 294 2.815000e-10 2.748604e-01 2.000000e-01 295 2.825000e-10 2.748604e-01 2.000000e-01 296 2.835000e-10 2.748604e-01 2.000000e-01 297 2.845000e-10 2.748604e-01 2.000000e-01 298 2.855000e-10 2.748604e-01 2.000000e-01 299 2.865000e-10 2.748604e-01 2.000000e-01 300 2.875000e-10 2.748604e-01 2.000000e-01 301 2.885000e-10 2.748604e-01 2.000000e-01 302 2.895000e-10 2.748604e-01 2.000000e-01 303 2.905000e-10 2.748604e-01 2.000000e-01 304 2.915000e-10 2.748604e-01 2.000000e-01 305 2.925000e-10 2.748604e-01 2.000000e-01 306 2.935000e-10 2.748604e-01 2.000000e-01 307 2.945000e-10 2.748604e-01 2.000000e-01 308 2.955000e-10 2.748604e-01 2.000000e-01 309 2.965000e-10 2.748604e-01 2.000000e-01 310 2.975000e-10 2.748604e-01 2.000000e-01 311 2.985000e-10 2.748604e-01 2.000000e-01 312 2.995000e-10 2.748604e-01 2.000000e-01 313 3.005000e-10 2.748604e-01 2.000000e-01 314 3.015000e-10 2.748604e-01 2.000000e-01 315 3.025000e-10 2.748604e-01 2.000000e-01 316 3.035000e-10 2.748604e-01 2.000000e-01 317 3.045000e-10 2.748604e-01 2.000000e-01 318 3.055000e-10 2.748604e-01 2.000000e-01 319 3.065000e-10 2.748604e-01 2.000000e-01 320 3.075000e-10 2.748604e-01 2.000000e-01 321 3.085000e-10 2.748604e-01 2.000000e-01 322 3.095000e-10 2.748604e-01 2.000000e-01 323 3.105000e-10 2.748604e-01 2.000000e-01 324 3.115000e-10 2.748604e-01 2.000000e-01 325 3.125000e-10 2.748604e-01 2.000000e-01 326 3.135000e-10 2.748604e-01 2.000000e-01 327 3.145000e-10 2.748604e-01 2.000000e-01 328 3.155000e-10 2.748604e-01 2.000000e-01 329 3.165000e-10 2.748604e-01 2.000000e-01 330 3.175000e-10 2.748604e-01 2.000000e-01 331 3.185000e-10 2.748604e-01 2.000000e-01 332 3.195000e-10 2.748604e-01 2.000000e-01 333 3.200000e-10 2.748604e-01 2.000000e-01 334 3.201000e-10 2.755747e-01 1.998000e-01 335 3.203000e-10 2.769983e-01 1.994000e-01 336 3.207000e-10 2.798265e-01 1.986000e-01 337 3.215000e-10 2.854089e-01 1.970000e-01 338 3.225000e-10 2.922546e-01 1.950000e-01 339 3.235000e-10 2.989603e-01 1.930000e-01 340 3.245000e-10 3.055323e-01 1.910000e-01 341 3.255000e-10 3.119762e-01 1.890000e-01 342 3.265000e-10 3.182970e-01 1.870000e-01 343 3.275000e-10 3.244993e-01 1.850000e-01 344 3.285000e-10 3.305872e-01 1.830000e-01 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 345 3.295000e-10 3.365645e-01 1.810000e-01 346 3.305000e-10 3.424350e-01 1.790000e-01 347 3.315000e-10 3.482016e-01 1.770000e-01 348 3.325000e-10 3.538678e-01 1.750000e-01 349 3.335000e-10 3.594363e-01 1.730000e-01 350 3.345000e-10 3.649100e-01 1.710000e-01 351 3.355000e-10 3.702914e-01 1.690000e-01 352 3.365000e-10 3.755815e-01 1.670000e-01 353 3.375000e-10 3.807815e-01 1.650000e-01 354 3.385000e-10 3.858943e-01 1.630000e-01 355 3.395000e-10 3.909227e-01 1.610000e-01 356 3.405000e-10 3.958691e-01 1.590000e-01 357 3.415000e-10 4.007355e-01 1.570000e-01 358 3.425000e-10 4.055241e-01 1.550000e-01 359 3.435000e-10 4.102366e-01 1.530000e-01 360 3.445000e-10 4.148747e-01 1.510000e-01 361 3.455000e-10 4.194402e-01 1.490000e-01 362 3.465000e-10 4.239342e-01 1.470000e-01 363 3.475000e-10 4.283584e-01 1.450000e-01 364 3.485000e-10 4.327138e-01 1.430000e-01 365 3.495000e-10 4.370017e-01 1.410000e-01 366 3.505000e-10 4.412231e-01 1.390000e-01 367 3.515000e-10 4.453789e-01 1.370000e-01 368 3.525000e-10 4.494700e-01 1.350000e-01 369 3.535000e-10 4.534973e-01 1.330000e-01 370 3.545000e-10 4.574612e-01 1.310000e-01 371 3.555000e-10 4.613625e-01 1.290000e-01 372 3.565000e-10 4.652016e-01 1.270000e-01 373 3.575000e-10 4.689788e-01 1.250000e-01 374 3.585000e-10 4.726943e-01 1.230000e-01 375 3.595000e-10 4.763484e-01 1.210000e-01 376 3.605000e-10 4.799410e-01 1.190000e-01 377 3.615000e-10 4.834720e-01 1.170000e-01 378 3.625000e-10 4.869410e-01 1.150000e-01 379 3.635000e-10 4.903478e-01 1.130000e-01 380 3.645000e-10 4.936916e-01 1.110000e-01 381 3.655000e-10 4.969718e-01 1.090000e-01 382 3.665000e-10 5.001873e-01 1.070000e-01 383 3.675000e-10 5.033370e-01 1.050000e-01 384 3.685000e-10 5.064196e-01 1.030000e-01 385 3.695000e-10 5.094333e-01 1.010000e-01 386 3.705000e-10 5.123764e-01 9.900000e-02 387 3.715000e-10 5.152468e-01 9.700000e-02 388 3.725000e-10 5.180420e-01 9.500000e-02 389 3.735000e-10 5.207594e-01 9.300000e-02 390 3.745000e-10 5.233961e-01 9.100000e-02 391 3.755000e-10 5.259492e-01 8.900000e-02 392 3.765000e-10 5.284157e-01 8.700000e-02 393 3.775000e-10 5.307927e-01 8.500000e-02 394 3.785000e-10 5.330782e-01 8.300000e-02 395 3.795000e-10 5.352713e-01 8.100000e-02 396 3.805000e-10 5.373729e-01 7.900000e-02 397 3.815000e-10 5.393864e-01 7.700000e-02 398 3.825000e-10 5.413167e-01 7.500000e-02 399 3.835000e-10 5.431672e-01 7.300000e-02 400 3.845000e-10 5.449354e-01 7.100000e-02 401 3.855000e-10 5.466098e-01 6.900000e-02 402 3.865000e-10 5.481710e-01 6.700000e-02 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 403 3.875000e-10 5.495933e-01 6.500000e-02 404 3.885000e-10 5.508470e-01 6.300000e-02 405 3.895000e-10 5.518977e-01 6.100000e-02 406 3.905000e-10 5.527049e-01 5.900000e-02 407 3.915000e-10 5.532200e-01 5.700000e-02 408 3.925000e-10 5.533834e-01 5.500000e-02 409 3.935000e-10 5.531176e-01 5.300000e-02 410 3.945000e-10 5.523348e-01 5.100000e-02 411 3.955000e-10 5.509170e-01 4.900000e-02 412 3.965000e-10 5.487215e-01 4.700000e-02 413 3.975000e-10 5.455761e-01 4.500000e-02 414 3.985000e-10 5.412833e-01 4.300000e-02 415 3.995000e-10 5.356307e-01 4.100000e-02 416 4.005000e-10 5.284127e-01 3.900000e-02 417 4.015000e-10 5.194648e-01 3.700000e-02 418 4.025000e-10 5.086948e-01 3.500000e-02 419 4.035000e-10 4.960865e-01 3.300000e-02 420 4.045000e-10 4.816629e-01 3.100000e-02 421 4.055000e-10 4.654301e-01 2.900000e-02 422 4.065000e-10 4.473553e-01 2.700000e-02 423 4.075000e-10 4.274096e-01 2.500000e-02 424 4.085000e-10 4.056561e-01 2.300000e-02 425 4.095000e-10 3.823392e-01 2.100000e-02 426 4.105000e-10 3.579054e-01 1.900000e-02 427 4.115000e-10 3.324855e-01 1.700000e-02 428 4.125000e-10 3.062522e-01 1.500000e-02 429 4.135000e-10 2.793418e-01 1.300000e-02 430 4.145000e-10 2.517648e-01 1.100000e-02 431 4.155000e-10 2.234013e-01 9.000000e-03 432 4.165000e-10 1.940307e-01 7.000000e-03 433 4.175000e-10 1.634796e-01 5.000000e-03 434 4.185000e-10 1.322176e-01 3.000000e-03 435 4.195000e-10 1.035401e-01 1.000000e-03 436 4.200000e-10 9.166197e-02 3.230922e-17 437 4.201000e-10 9.166198e-02 0.000000e+00 438 4.203000e-10 9.166197e-02 0.000000e+00 439 4.207000e-10 9.166197e-02 0.000000e+00 440 4.215000e-10 9.166197e-02 0.000000e+00 441 4.225000e-10 9.166197e-02 0.000000e+00 442 4.235000e-10 9.166197e-02 0.000000e+00 443 4.245000e-10 9.166197e-02 0.000000e+00 444 4.255000e-10 9.166197e-02 0.000000e+00 445 4.265000e-10 9.166197e-02 0.000000e+00 446 4.275000e-10 9.166197e-02 0.000000e+00 447 4.285000e-10 9.166197e-02 0.000000e+00 448 4.295000e-10 9.166197e-02 0.000000e+00 449 4.305000e-10 9.166197e-02 0.000000e+00 450 4.315000e-10 9.166197e-02 0.000000e+00 451 4.325000e-10 9.166197e-02 0.000000e+00 452 4.335000e-10 9.166197e-02 0.000000e+00 453 4.345000e-10 9.166197e-02 0.000000e+00 454 4.355000e-10 9.166197e-02 0.000000e+00 455 4.365000e-10 9.166197e-02 0.000000e+00 456 4.375000e-10 9.166197e-02 0.000000e+00 457 4.385000e-10 9.166197e-02 0.000000e+00 458 4.395000e-10 9.166197e-02 0.000000e+00 459 4.405000e-10 9.166197e-02 0.000000e+00 460 4.415000e-10 9.166197e-02 0.000000e+00 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 461 4.425000e-10 9.166197e-02 0.000000e+00 462 4.435000e-10 9.166197e-02 0.000000e+00 463 4.445000e-10 9.166197e-02 0.000000e+00 464 4.455000e-10 9.166197e-02 0.000000e+00 465 4.465000e-10 9.166197e-02 0.000000e+00 466 4.475000e-10 9.166197e-02 0.000000e+00 467 4.485000e-10 9.166197e-02 0.000000e+00 468 4.495000e-10 9.166197e-02 0.000000e+00 469 4.505000e-10 9.166197e-02 0.000000e+00 470 4.515000e-10 9.166197e-02 0.000000e+00 471 4.525000e-10 9.166197e-02 0.000000e+00 472 4.535000e-10 9.166197e-02 0.000000e+00 473 4.545000e-10 9.166197e-02 0.000000e+00 474 4.555000e-10 9.166197e-02 0.000000e+00 475 4.565000e-10 9.166197e-02 0.000000e+00 476 4.575000e-10 9.166197e-02 0.000000e+00 477 4.585000e-10 9.166197e-02 0.000000e+00 478 4.595000e-10 9.166197e-02 0.000000e+00 479 4.605000e-10 9.166197e-02 0.000000e+00 480 4.615000e-10 9.166197e-02 0.000000e+00 481 4.625000e-10 9.166197e-02 0.000000e+00 482 4.635000e-10 9.166197e-02 0.000000e+00 483 4.645000e-10 9.166197e-02 0.000000e+00 484 4.655000e-10 9.166197e-02 0.000000e+00 485 4.665000e-10 9.166197e-02 0.000000e+00 486 4.675000e-10 9.166197e-02 0.000000e+00 487 4.685000e-10 9.166197e-02 0.000000e+00 488 4.695000e-10 9.166197e-02 0.000000e+00 489 4.705000e-10 9.166197e-02 0.000000e+00 490 4.715000e-10 9.166197e-02 0.000000e+00 491 4.725000e-10 9.166197e-02 0.000000e+00 492 4.735000e-10 9.166197e-02 0.000000e+00 493 4.745000e-10 9.166197e-02 0.000000e+00 494 4.755000e-10 9.166197e-02 0.000000e+00 495 4.765000e-10 9.166197e-02 0.000000e+00 496 4.775000e-10 9.166197e-02 0.000000e+00 497 4.785000e-10 9.166197e-02 0.000000e+00 498 4.795000e-10 9.166197e-02 0.000000e+00 499 4.805000e-10 9.166197e-02 0.000000e+00 500 4.815000e-10 9.166197e-02 0.000000e+00 501 4.825000e-10 9.166197e-02 0.000000e+00 502 4.835000e-10 9.166197e-02 0.000000e+00 503 4.845000e-10 9.166197e-02 0.000000e+00 504 4.855000e-10 9.166197e-02 0.000000e+00 505 4.865000e-10 9.166197e-02 0.000000e+00 506 4.875000e-10 9.166197e-02 0.000000e+00 507 4.885000e-10 9.166197e-02 0.000000e+00 508 4.895000e-10 9.166197e-02 0.000000e+00 509 4.905000e-10 9.166197e-02 0.000000e+00 510 4.915000e-10 9.166197e-02 0.000000e+00 511 4.925000e-10 9.166197e-02 0.000000e+00 512 4.935000e-10 9.166197e-02 0.000000e+00 513 4.945000e-10 9.166197e-02 0.000000e+00 514 4.955000e-10 9.166197e-02 0.000000e+00 515 4.965000e-10 9.166197e-02 0.000000e+00 516 4.975000e-10 9.166197e-02 0.000000e+00 517 4.985000e-10 9.166197e-02 0.000000e+00 518 4.995000e-10 9.166197e-02 0.000000e+00 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 519 5.005000e-10 9.166197e-02 0.000000e+00 520 5.015000e-10 9.166197e-02 0.000000e+00 521 5.025000e-10 9.166197e-02 0.000000e+00 522 5.035000e-10 9.166197e-02 0.000000e+00 523 5.045000e-10 9.166197e-02 0.000000e+00 524 5.055000e-10 9.166197e-02 0.000000e+00 525 5.065000e-10 9.166197e-02 0.000000e+00 526 5.075000e-10 9.166197e-02 0.000000e+00 527 5.085000e-10 9.166197e-02 0.000000e+00 528 5.095000e-10 9.166197e-02 0.000000e+00 529 5.105000e-10 9.166197e-02 0.000000e+00 530 5.115000e-10 9.166197e-02 0.000000e+00 531 5.125000e-10 9.166197e-02 0.000000e+00 532 5.135000e-10 9.166197e-02 0.000000e+00 533 5.145000e-10 9.166197e-02 0.000000e+00 534 5.155000e-10 9.166197e-02 0.000000e+00 535 5.165000e-10 9.166197e-02 0.000000e+00 536 5.175000e-10 9.166197e-02 0.000000e+00 537 5.185000e-10 9.166197e-02 0.000000e+00 538 5.195000e-10 9.166197e-02 0.000000e+00 539 5.205000e-10 9.166197e-02 0.000000e+00 540 5.215000e-10 9.166197e-02 0.000000e+00 541 5.225000e-10 9.166197e-02 0.000000e+00 542 5.235000e-10 9.166197e-02 0.000000e+00 543 5.245000e-10 9.166197e-02 0.000000e+00 544 5.255000e-10 9.166197e-02 0.000000e+00 545 5.265000e-10 9.166197e-02 0.000000e+00 546 5.275000e-10 9.166197e-02 0.000000e+00 547 5.285000e-10 9.166197e-02 0.000000e+00 548 5.295000e-10 9.166197e-02 0.000000e+00 549 5.305000e-10 9.166197e-02 0.000000e+00 550 5.315000e-10 9.166197e-02 0.000000e+00 551 5.325000e-10 9.166197e-02 0.000000e+00 552 5.335000e-10 9.166197e-02 0.000000e+00 553 5.345000e-10 9.166197e-02 0.000000e+00 554 5.355000e-10 9.166197e-02 0.000000e+00 555 5.365000e-10 9.166197e-02 0.000000e+00 556 5.375000e-10 9.166197e-02 0.000000e+00 557 5.385000e-10 9.166197e-02 0.000000e+00 558 5.395000e-10 9.166197e-02 0.000000e+00 559 5.405000e-10 9.166197e-02 0.000000e+00 560 5.415000e-10 9.166197e-02 0.000000e+00 561 5.425000e-10 9.166197e-02 0.000000e+00 562 5.435000e-10 9.166197e-02 0.000000e+00 563 5.445000e-10 9.166197e-02 0.000000e+00 564 5.455000e-10 9.166197e-02 0.000000e+00 565 5.465000e-10 9.166197e-02 0.000000e+00 566 5.475000e-10 9.166197e-02 0.000000e+00 567 5.485000e-10 9.166197e-02 0.000000e+00 568 5.495000e-10 9.166197e-02 0.000000e+00 569 5.505000e-10 9.166197e-02 0.000000e+00 570 5.515000e-10 9.166197e-02 0.000000e+00 571 5.525000e-10 9.166197e-02 0.000000e+00 572 5.535000e-10 9.166197e-02 0.000000e+00 573 5.545000e-10 9.166197e-02 0.000000e+00 574 5.555000e-10 9.166197e-02 0.000000e+00 575 5.565000e-10 9.166197e-02 0.000000e+00 576 5.575000e-10 9.166197e-02 0.000000e+00 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 577 5.585000e-10 9.166197e-02 0.000000e+00 578 5.595000e-10 9.166197e-02 0.000000e+00 579 5.605000e-10 9.166197e-02 0.000000e+00 580 5.615000e-10 9.166197e-02 0.000000e+00 581 5.625000e-10 9.166197e-02 0.000000e+00 582 5.635000e-10 9.166197e-02 0.000000e+00 583 5.645000e-10 9.166197e-02 0.000000e+00 584 5.655000e-10 9.166197e-02 0.000000e+00 585 5.665000e-10 9.166197e-02 0.000000e+00 586 5.675000e-10 9.166197e-02 0.000000e+00 587 5.685000e-10 9.166197e-02 0.000000e+00 588 5.695000e-10 9.166197e-02 0.000000e+00 589 5.705000e-10 9.166197e-02 0.000000e+00 590 5.715000e-10 9.166197e-02 0.000000e+00 591 5.725000e-10 9.166197e-02 0.000000e+00 592 5.735000e-10 9.166197e-02 0.000000e+00 593 5.745000e-10 9.166197e-02 0.000000e+00 594 5.755000e-10 9.166197e-02 0.000000e+00 595 5.765000e-10 9.166197e-02 0.000000e+00 596 5.775000e-10 9.166197e-02 0.000000e+00 597 5.785000e-10 9.166197e-02 0.000000e+00 598 5.795000e-10 9.166197e-02 0.000000e+00 599 5.805000e-10 9.166197e-02 0.000000e+00 600 5.815000e-10 9.166197e-02 0.000000e+00 601 5.825000e-10 9.166197e-02 0.000000e+00 602 5.835000e-10 9.166197e-02 0.000000e+00 603 5.845000e-10 9.166197e-02 0.000000e+00 604 5.855000e-10 9.166197e-02 0.000000e+00 605 5.865000e-10 9.166197e-02 0.000000e+00 606 5.875000e-10 9.166197e-02 0.000000e+00 607 5.885000e-10 9.166197e-02 0.000000e+00 608 5.895000e-10 9.166197e-02 0.000000e+00 609 5.905000e-10 9.166197e-02 0.000000e+00 610 5.915000e-10 9.166197e-02 0.000000e+00 611 5.925000e-10 9.166197e-02 0.000000e+00 612 5.935000e-10 9.166197e-02 0.000000e+00 613 5.945000e-10 9.166197e-02 0.000000e+00 614 5.955000e-10 9.166197e-02 0.000000e+00 615 5.965000e-10 9.166197e-02 0.000000e+00 616 5.975000e-10 9.166197e-02 0.000000e+00 617 5.985000e-10 9.166197e-02 0.000000e+00 618 5.995000e-10 9.166197e-02 0.000000e+00 619 6.005000e-10 9.166197e-02 0.000000e+00 620 6.015000e-10 9.166197e-02 0.000000e+00 621 6.025000e-10 9.166197e-02 0.000000e+00 622 6.035000e-10 9.166197e-02 0.000000e+00 623 6.045000e-10 9.166197e-02 0.000000e+00 624 6.055000e-10 9.166197e-02 0.000000e+00 625 6.065000e-10 9.166197e-02 0.000000e+00 626 6.075000e-10 9.166197e-02 0.000000e+00 627 6.085000e-10 9.166197e-02 0.000000e+00 628 6.095000e-10 9.166197e-02 0.000000e+00 629 6.105000e-10 9.166197e-02 0.000000e+00 630 6.115000e-10 9.166197e-02 0.000000e+00 631 6.125000e-10 9.166197e-02 0.000000e+00 632 6.135000e-10 9.166197e-02 0.000000e+00 633 6.145000e-10 9.166197e-02 0.000000e+00 634 6.155000e-10 9.166197e-02 0.000000e+00 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 635 6.165000e-10 9.166197e-02 0.000000e+00 636 6.175000e-10 9.166197e-02 0.000000e+00 637 6.185000e-10 9.166197e-02 0.000000e+00 638 6.195000e-10 9.166197e-02 0.000000e+00 639 6.200000e-10 9.166197e-02 7.108583e-17 640 6.201000e-10 9.393837e-02 2.000000e-04 641 6.203000e-10 9.863117e-02 6.000000e-04 642 6.207000e-10 1.087280e-01 1.400000e-03 643 6.215000e-10 1.322176e-01 3.000000e-03 644 6.225000e-10 1.634797e-01 5.000000e-03 645 6.235000e-10 1.940307e-01 7.000000e-03 646 6.245000e-10 2.234013e-01 9.000000e-03 647 6.255000e-10 2.517648e-01 1.100000e-02 648 6.265000e-10 2.793418e-01 1.300000e-02 649 6.275000e-10 3.062522e-01 1.500000e-02 650 6.285000e-10 3.324855e-01 1.700000e-02 651 6.295000e-10 3.579054e-01 1.900000e-02 652 6.305000e-10 3.823391e-01 2.100000e-02 653 6.315000e-10 4.056560e-01 2.300000e-02 654 6.325000e-10 4.274095e-01 2.500000e-02 655 6.335000e-10 4.473553e-01 2.700000e-02 656 6.345000e-10 4.654301e-01 2.900000e-02 657 6.355000e-10 4.816629e-01 3.100000e-02 658 6.365000e-10 4.960865e-01 3.300000e-02 659 6.375000e-10 5.086948e-01 3.500000e-02 660 6.385000e-10 5.194649e-01 3.700000e-02 661 6.395000e-10 5.284127e-01 3.900000e-02 662 6.405000e-10 5.356307e-01 4.100000e-02 663 6.415000e-10 5.412833e-01 4.300000e-02 664 6.425000e-10 5.455761e-01 4.500000e-02 665 6.435000e-10 5.487215e-01 4.700000e-02 666 6.445000e-10 5.509170e-01 4.900000e-02 667 6.455000e-10 5.523348e-01 5.100000e-02 668 6.465000e-10 5.531176e-01 5.300000e-02 669 6.475000e-10 5.533812e-01 5.500000e-02 670 6.485000e-10 5.532216e-01 5.700000e-02 671 6.495000e-10 5.527060e-01 5.900000e-02 672 6.505000e-10 5.518984e-01 6.100000e-02 673 6.515000e-10 5.508476e-01 6.300000e-02 674 6.525000e-10 5.495937e-01 6.500000e-02 675 6.535000e-10 5.481712e-01 6.700000e-02 676 6.545000e-10 5.466100e-01 6.900000e-02 677 6.555000e-10 5.449355e-01 7.100000e-02 678 6.565000e-10 5.431673e-01 7.300000e-02 679 6.575000e-10 5.413167e-01 7.500000e-02 680 6.585000e-10 5.393864e-01 7.700000e-02 681 6.595000e-10 5.373729e-01 7.900000e-02 682 6.605000e-10 5.352712e-01 8.100000e-02 683 6.615000e-10 5.330782e-01 8.300000e-02 684 6.625000e-10 5.307927e-01 8.500000e-02 685 6.635000e-10 5.284157e-01 8.700000e-02 686 6.645000e-10 5.259492e-01 8.900000e-02 687 6.655000e-10 5.233961e-01 9.100000e-02 688 6.665000e-10 5.207594e-01 9.300000e-02 689 6.675000e-10 5.180420e-01 9.500000e-02 690 6.685000e-10 5.152468e-01 9.700000e-02 691 6.695000e-10 5.123765e-01 9.900000e-02 692 6.705000e-10 5.094333e-01 1.010000e-01 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 693 6.715000e-10 5.064196e-01 1.030000e-01 694 6.725000e-10 5.033370e-01 1.050000e-01 695 6.735000e-10 5.001873e-01 1.070000e-01 696 6.745000e-10 4.969718e-01 1.090000e-01 697 6.755000e-10 4.936916e-01 1.110000e-01 698 6.765000e-10 4.903478e-01 1.130000e-01 699 6.775000e-10 4.869410e-01 1.150000e-01 700 6.785000e-10 4.834720e-01 1.170000e-01 701 6.795000e-10 4.799410e-01 1.190000e-01 702 6.805000e-10 4.763484e-01 1.210000e-01 703 6.815000e-10 4.726943e-01 1.230000e-01 704 6.825000e-10 4.689788e-01 1.250000e-01 705 6.835000e-10 4.652016e-01 1.270000e-01 706 6.845000e-10 4.613625e-01 1.290000e-01 707 6.855000e-10 4.574612e-01 1.310000e-01 708 6.865000e-10 4.534973e-01 1.330000e-01 709 6.875000e-10 4.494700e-01 1.350000e-01 710 6.885000e-10 4.453789e-01 1.370000e-01 711 6.895000e-10 4.412231e-01 1.390000e-01 712 6.905000e-10 4.370017e-01 1.410000e-01 713 6.915000e-10 4.327138e-01 1.430000e-01 714 6.925000e-10 4.283584e-01 1.450000e-01 715 6.935000e-10 4.239342e-01 1.470000e-01 716 6.945000e-10 4.194401e-01 1.490000e-01 717 6.955000e-10 4.148747e-01 1.510000e-01 718 6.965000e-10 4.102366e-01 1.530000e-01 719 6.975000e-10 4.055241e-01 1.550000e-01 720 6.985000e-10 4.007355e-01 1.570000e-01 721 6.995000e-10 3.958691e-01 1.590000e-01 722 7.005000e-10 3.909227e-01 1.610000e-01 723 7.015000e-10 3.858943e-01 1.630000e-01 724 7.025000e-10 3.807815e-01 1.650000e-01 725 7.035000e-10 3.755815e-01 1.670000e-01 726 7.045000e-10 3.702914e-01 1.690000e-01 727 7.055000e-10 3.649100e-01 1.710000e-01 728 7.065000e-10 3.594363e-01 1.730000e-01 729 7.075000e-10 3.538678e-01 1.750000e-01 730 7.085000e-10 3.482016e-01 1.770000e-01 731 7.095000e-10 3.424350e-01 1.790000e-01 732 7.105000e-10 3.365646e-01 1.810000e-01 733 7.115000e-10 3.305872e-01 1.830000e-01 734 7.125000e-10 3.244993e-01 1.850000e-01 735 7.135000e-10 3.182970e-01 1.870000e-01 736 7.145000e-10 3.119762e-01 1.890000e-01 737 7.155000e-10 3.055323e-01 1.910000e-01 738 7.165000e-10 2.989603e-01 1.930000e-01 739 7.175000e-10 2.922546e-01 1.950000e-01 740 7.185000e-10 2.854089e-01 1.970000e-01 741 7.195000e-10 2.784155e-01 1.990000e-01 742 7.200000e-10 2.748604e-01 2.000000e-01 743 7.201000e-10 2.748604e-01 2.000000e-01 744 7.203000e-10 2.748604e-01 2.000000e-01 745 7.207000e-10 2.748604e-01 2.000000e-01 746 7.215000e-10 2.748604e-01 2.000000e-01 747 7.225000e-10 2.748604e-01 2.000000e-01 748 7.235000e-10 2.748604e-01 2.000000e-01 749 7.245000e-10 2.748604e-01 2.000000e-01 750 7.255000e-10 2.748604e-01 2.000000e-01 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 751 7.265000e-10 2.748604e-01 2.000000e-01 752 7.275000e-10 2.748604e-01 2.000000e-01 753 7.285000e-10 2.748604e-01 2.000000e-01 754 7.295000e-10 2.748604e-01 2.000000e-01 755 7.305000e-10 2.748604e-01 2.000000e-01 756 7.315000e-10 2.748604e-01 2.000000e-01 757 7.325000e-10 2.748604e-01 2.000000e-01 758 7.335000e-10 2.748604e-01 2.000000e-01 759 7.345000e-10 2.748604e-01 2.000000e-01 760 7.355000e-10 2.748604e-01 2.000000e-01 761 7.365000e-10 2.748604e-01 2.000000e-01 762 7.375000e-10 2.748604e-01 2.000000e-01 763 7.385000e-10 2.748604e-01 2.000000e-01 764 7.395000e-10 2.748604e-01 2.000000e-01 765 7.405000e-10 2.748604e-01 2.000000e-01 766 7.415000e-10 2.748604e-01 2.000000e-01 767 7.425000e-10 2.748604e-01 2.000000e-01 768 7.435000e-10 2.748604e-01 2.000000e-01 769 7.445000e-10 2.748604e-01 2.000000e-01 770 7.455000e-10 2.748604e-01 2.000000e-01 771 7.465000e-10 2.748604e-01 2.000000e-01 772 7.475000e-10 2.748604e-01 2.000000e-01 773 7.485000e-10 2.748604e-01 2.000000e-01 774 7.495000e-10 2.748604e-01 2.000000e-01 775 7.505000e-10 2.748604e-01 2.000000e-01 776 7.515000e-10 2.748604e-01 2.000000e-01 777 7.525000e-10 2.748604e-01 2.000000e-01 778 7.535000e-10 2.748604e-01 2.000000e-01 779 7.545000e-10 2.748604e-01 2.000000e-01 780 7.555000e-10 2.748604e-01 2.000000e-01 781 7.565000e-10 2.748604e-01 2.000000e-01 782 7.575000e-10 2.748604e-01 2.000000e-01 783 7.585000e-10 2.748604e-01 2.000000e-01 784 7.595000e-10 2.748604e-01 2.000000e-01 785 7.605000e-10 2.748604e-01 2.000000e-01 786 7.615000e-10 2.748604e-01 2.000000e-01 787 7.625000e-10 2.748604e-01 2.000000e-01 788 7.635000e-10 2.748604e-01 2.000000e-01 789 7.645000e-10 2.748604e-01 2.000000e-01 790 7.655000e-10 2.748604e-01 2.000000e-01 791 7.665000e-10 2.748604e-01 2.000000e-01 792 7.675000e-10 2.748604e-01 2.000000e-01 793 7.685000e-10 2.748604e-01 2.000000e-01 794 7.695000e-10 2.748604e-01 2.000000e-01 795 7.705000e-10 2.748604e-01 2.000000e-01 796 7.715000e-10 2.748604e-01 2.000000e-01 797 7.725000e-10 2.748604e-01 2.000000e-01 798 7.735000e-10 2.748604e-01 2.000000e-01 799 7.745000e-10 2.748604e-01 2.000000e-01 800 7.755000e-10 2.748604e-01 2.000000e-01 801 7.765000e-10 2.748604e-01 2.000000e-01 802 7.775000e-10 2.748604e-01 2.000000e-01 803 7.785000e-10 2.748604e-01 2.000000e-01 804 7.795000e-10 2.748604e-01 2.000000e-01 805 7.805000e-10 2.748604e-01 2.000000e-01 806 7.815000e-10 2.748604e-01 2.000000e-01 807 7.825000e-10 2.748604e-01 2.000000e-01 808 7.835000e-10 2.748604e-01 2.000000e-01 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 809 7.845000e-10 2.748604e-01 2.000000e-01 810 7.855000e-10 2.748604e-01 2.000000e-01 811 7.865000e-10 2.748604e-01 2.000000e-01 812 7.875000e-10 2.748604e-01 2.000000e-01 813 7.885000e-10 2.748604e-01 2.000000e-01 814 7.895000e-10 2.748604e-01 2.000000e-01 815 7.905000e-10 2.748604e-01 2.000000e-01 816 7.915000e-10 2.748604e-01 2.000000e-01 817 7.925000e-10 2.748604e-01 2.000000e-01 818 7.935000e-10 2.748604e-01 2.000000e-01 819 7.945000e-10 2.748604e-01 2.000000e-01 820 7.955000e-10 2.748604e-01 2.000000e-01 821 7.965000e-10 2.748604e-01 2.000000e-01 822 7.975000e-10 2.748604e-01 2.000000e-01 823 7.985000e-10 2.748604e-01 2.000000e-01 824 7.995000e-10 2.748604e-01 2.000000e-01 825 8.005000e-10 2.748604e-01 2.000000e-01 826 8.015000e-10 2.748604e-01 2.000000e-01 827 8.025000e-10 2.748604e-01 2.000000e-01 828 8.035000e-10 2.748604e-01 2.000000e-01 829 8.045000e-10 2.748604e-01 2.000000e-01 830 8.055000e-10 2.748604e-01 2.000000e-01 831 8.065000e-10 2.748604e-01 2.000000e-01 832 8.075000e-10 2.748604e-01 2.000000e-01 833 8.085000e-10 2.748604e-01 2.000000e-01 834 8.095000e-10 2.748604e-01 2.000000e-01 835 8.105000e-10 2.748604e-01 2.000000e-01 836 8.115000e-10 2.748604e-01 2.000000e-01 837 8.125000e-10 2.748604e-01 2.000000e-01 838 8.135000e-10 2.748604e-01 2.000000e-01 839 8.145000e-10 2.748604e-01 2.000000e-01 840 8.155000e-10 2.748604e-01 2.000000e-01 841 8.165000e-10 2.748604e-01 2.000000e-01 842 8.175000e-10 2.748604e-01 2.000000e-01 843 8.185000e-10 2.748604e-01 2.000000e-01 844 8.195000e-10 2.748604e-01 2.000000e-01 845 8.205000e-10 2.748604e-01 2.000000e-01 846 8.215000e-10 2.748604e-01 2.000000e-01 847 8.225000e-10 2.748604e-01 2.000000e-01 848 8.235000e-10 2.748604e-01 2.000000e-01 849 8.245000e-10 2.748604e-01 2.000000e-01 850 8.255000e-10 2.748604e-01 2.000000e-01 851 8.265000e-10 2.748604e-01 2.000000e-01 852 8.275000e-10 2.748604e-01 2.000000e-01 853 8.285000e-10 2.748604e-01 2.000000e-01 854 8.295000e-10 2.748604e-01 2.000000e-01 855 8.305000e-10 2.748604e-01 2.000000e-01 856 8.315000e-10 2.748604e-01 2.000000e-01 857 8.325000e-10 2.748604e-01 2.000000e-01 858 8.335000e-10 2.748604e-01 2.000000e-01 859 8.345000e-10 2.748604e-01 2.000000e-01 860 8.355000e-10 2.748604e-01 2.000000e-01 861 8.365000e-10 2.748604e-01 2.000000e-01 862 8.375000e-10 2.748604e-01 2.000000e-01 863 8.385000e-10 2.748604e-01 2.000000e-01 864 8.395000e-10 2.748604e-01 2.000000e-01 865 8.405000e-10 2.748604e-01 2.000000e-01 866 8.415000e-10 2.748604e-01 2.000000e-01 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 867 8.425000e-10 2.748604e-01 2.000000e-01 868 8.435000e-10 2.748604e-01 2.000000e-01 869 8.445000e-10 2.748604e-01 2.000000e-01 870 8.455000e-10 2.748604e-01 2.000000e-01 871 8.465000e-10 2.748604e-01 2.000000e-01 872 8.475000e-10 2.748604e-01 2.000000e-01 873 8.485000e-10 2.748604e-01 2.000000e-01 874 8.495000e-10 2.748604e-01 2.000000e-01 875 8.505000e-10 2.748604e-01 2.000000e-01 876 8.515000e-10 2.748604e-01 2.000000e-01 877 8.525000e-10 2.748604e-01 2.000000e-01 878 8.535000e-10 2.748604e-01 2.000000e-01 879 8.545000e-10 2.748604e-01 2.000000e-01 880 8.555000e-10 2.748604e-01 2.000000e-01 881 8.565000e-10 2.748604e-01 2.000000e-01 882 8.575000e-10 2.748604e-01 2.000000e-01 883 8.585000e-10 2.748604e-01 2.000000e-01 884 8.595000e-10 2.748604e-01 2.000000e-01 885 8.605000e-10 2.748604e-01 2.000000e-01 886 8.615000e-10 2.748604e-01 2.000000e-01 887 8.625000e-10 2.748604e-01 2.000000e-01 888 8.635000e-10 2.748604e-01 2.000000e-01 889 8.645000e-10 2.748604e-01 2.000000e-01 890 8.655000e-10 2.748604e-01 2.000000e-01 891 8.665000e-10 2.748604e-01 2.000000e-01 892 8.675000e-10 2.748604e-01 2.000000e-01 893 8.685000e-10 2.748604e-01 2.000000e-01 894 8.695000e-10 2.748604e-01 2.000000e-01 895 8.705000e-10 2.748604e-01 2.000000e-01 896 8.715000e-10 2.748604e-01 2.000000e-01 897 8.725000e-10 2.748604e-01 2.000000e-01 898 8.735000e-10 2.748604e-01 2.000000e-01 899 8.745000e-10 2.748604e-01 2.000000e-01 900 8.755000e-10 2.748604e-01 2.000000e-01 901 8.765000e-10 2.748604e-01 2.000000e-01 902 8.775000e-10 2.748604e-01 2.000000e-01 903 8.785000e-10 2.748604e-01 2.000000e-01 904 8.795000e-10 2.748604e-01 2.000000e-01 905 8.805000e-10 2.748604e-01 2.000000e-01 906 8.815000e-10 2.748604e-01 2.000000e-01 907 8.825000e-10 2.748604e-01 2.000000e-01 908 8.835000e-10 2.748604e-01 2.000000e-01 909 8.845000e-10 2.748604e-01 2.000000e-01 910 8.855000e-10 2.748604e-01 2.000000e-01 911 8.865000e-10 2.748604e-01 2.000000e-01 912 8.875000e-10 2.748604e-01 2.000000e-01 913 8.885000e-10 2.748604e-01 2.000000e-01 914 8.895000e-10 2.748604e-01 2.000000e-01 915 8.905000e-10 2.748604e-01 2.000000e-01 916 8.915000e-10 2.748604e-01 2.000000e-01 917 8.925000e-10 2.748604e-01 2.000000e-01 918 8.935000e-10 2.748604e-01 2.000000e-01 919 8.945000e-10 2.748604e-01 2.000000e-01 920 8.955000e-10 2.748604e-01 2.000000e-01 921 8.965000e-10 2.748604e-01 2.000000e-01 922 8.975000e-10 2.748604e-01 2.000000e-01 923 8.985000e-10 2.748604e-01 2.000000e-01 924 8.995000e-10 2.748604e-01 2.000000e-01 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 925 9.005000e-10 2.748604e-01 2.000000e-01 926 9.015000e-10 2.748604e-01 2.000000e-01 927 9.025000e-10 2.748604e-01 2.000000e-01 928 9.035000e-10 2.748604e-01 2.000000e-01 929 9.045000e-10 2.748604e-01 2.000000e-01 930 9.055000e-10 2.748604e-01 2.000000e-01 931 9.065000e-10 2.748604e-01 2.000000e-01 932 9.075000e-10 2.748604e-01 2.000000e-01 933 9.085000e-10 2.748604e-01 2.000000e-01 934 9.095000e-10 2.748604e-01 2.000000e-01 935 9.105000e-10 2.748604e-01 2.000000e-01 936 9.115000e-10 2.748604e-01 2.000000e-01 937 9.125000e-10 2.748604e-01 2.000000e-01 938 9.135000e-10 2.748604e-01 2.000000e-01 939 9.145000e-10 2.748604e-01 2.000000e-01 940 9.155000e-10 2.748604e-01 2.000000e-01 941 9.165000e-10 2.748604e-01 2.000000e-01 942 9.175000e-10 2.748604e-01 2.000000e-01 943 9.185000e-10 2.748604e-01 2.000000e-01 944 9.195000e-10 2.748604e-01 2.000000e-01 945 9.200000e-10 2.748604e-01 2.000000e-01 946 9.201000e-10 2.755747e-01 1.998000e-01 947 9.203000e-10 2.769983e-01 1.994000e-01 948 9.207000e-10 2.798265e-01 1.986000e-01 949 9.215000e-10 2.854089e-01 1.970000e-01 950 9.225000e-10 2.922546e-01 1.950000e-01 951 9.235000e-10 2.989603e-01 1.930000e-01 952 9.245000e-10 3.055323e-01 1.910000e-01 953 9.255000e-10 3.119762e-01 1.890000e-01 954 9.265000e-10 3.182970e-01 1.870000e-01 955 9.275000e-10 3.244993e-01 1.850000e-01 956 9.285000e-10 3.305872e-01 1.830000e-01 957 9.295000e-10 3.365645e-01 1.810000e-01 958 9.305000e-10 3.424350e-01 1.790000e-01 959 9.315000e-10 3.482016e-01 1.770000e-01 960 9.325000e-10 3.538678e-01 1.750000e-01 961 9.335000e-10 3.594363e-01 1.730000e-01 962 9.345000e-10 3.649100e-01 1.710000e-01 963 9.355000e-10 3.702914e-01 1.690000e-01 964 9.365000e-10 3.755815e-01 1.670000e-01 965 9.375000e-10 3.807815e-01 1.650000e-01 966 9.385000e-10 3.858943e-01 1.630000e-01 967 9.395000e-10 3.909227e-01 1.610000e-01 968 9.405000e-10 3.958691e-01 1.590000e-01 969 9.415000e-10 4.007355e-01 1.570000e-01 970 9.425000e-10 4.055241e-01 1.550000e-01 971 9.435000e-10 4.102366e-01 1.530000e-01 972 9.445000e-10 4.148747e-01 1.510000e-01 973 9.455000e-10 4.194402e-01 1.490000e-01 974 9.465000e-10 4.239342e-01 1.470000e-01 975 9.475000e-10 4.283584e-01 1.450000e-01 976 9.485000e-10 4.327138e-01 1.430000e-01 977 9.495000e-10 4.370017e-01 1.410000e-01 978 9.505000e-10 4.412231e-01 1.390000e-01 979 9.515000e-10 4.453789e-01 1.370000e-01 980 9.525000e-10 4.494700e-01 1.350000e-01 981 9.535000e-10 4.534973e-01 1.330000e-01 982 9.545000e-10 4.574612e-01 1.310000e-01 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 983 9.555000e-10 4.613625e-01 1.290000e-01 984 9.565000e-10 4.652016e-01 1.270000e-01 985 9.575000e-10 4.689788e-01 1.250000e-01 986 9.585000e-10 4.726943e-01 1.230000e-01 987 9.595000e-10 4.763484e-01 1.210000e-01 988 9.605000e-10 4.799410e-01 1.190000e-01 989 9.615000e-10 4.834720e-01 1.170000e-01 990 9.625000e-10 4.869410e-01 1.150000e-01 991 9.635000e-10 4.903478e-01 1.130000e-01 992 9.645000e-10 4.936916e-01 1.110000e-01 993 9.655000e-10 4.969718e-01 1.090000e-01 994 9.665000e-10 5.001873e-01 1.070000e-01 995 9.675000e-10 5.033370e-01 1.050000e-01 996 9.685000e-10 5.064196e-01 1.030000e-01 997 9.695000e-10 5.094333e-01 1.010000e-01 998 9.705000e-10 5.123764e-01 9.900000e-02 999 9.715000e-10 5.152468e-01 9.700000e-02 1000 9.725000e-10 5.180420e-01 9.500000e-02 1001 9.735000e-10 5.207594e-01 9.300000e-02 1002 9.745000e-10 5.233961e-01 9.100000e-02 1003 9.755000e-10 5.259492e-01 8.900000e-02 1004 9.765000e-10 5.284157e-01 8.700000e-02 1005 9.775000e-10 5.307927e-01 8.500000e-02 1006 9.785000e-10 5.330782e-01 8.300000e-02 1007 9.795000e-10 5.352713e-01 8.100000e-02 1008 9.805000e-10 5.373729e-01 7.900000e-02 1009 9.815000e-10 5.393864e-01 7.700000e-02 1010 9.825000e-10 5.413167e-01 7.500000e-02 1011 9.835000e-10 5.431672e-01 7.300000e-02 1012 9.845000e-10 5.449354e-01 7.100000e-02 1013 9.855000e-10 5.466098e-01 6.900000e-02 1014 9.865000e-10 5.481710e-01 6.700000e-02 1015 9.875000e-10 5.495933e-01 6.500000e-02 1016 9.885000e-10 5.508470e-01 6.300000e-02 1017 9.895000e-10 5.518977e-01 6.100000e-02 1018 9.905000e-10 5.527049e-01 5.900000e-02 1019 9.915000e-10 5.532200e-01 5.700000e-02 1020 9.925000e-10 5.533834e-01 5.500000e-02 1021 9.935000e-10 5.531176e-01 5.300000e-02 1022 9.945000e-10 5.523348e-01 5.100000e-02 1023 9.955000e-10 5.509170e-01 4.900000e-02 1024 9.965000e-10 5.487215e-01 4.700000e-02 1025 9.975000e-10 5.455761e-01 4.500000e-02 1026 9.985000e-10 5.412833e-01 4.300000e-02 1027 9.995000e-10 5.356307e-01 4.100000e-02 1028 1.000000e-09 5.322290e-01 4.000000e-02 tmpk8ny_4pz/tests/bsim3soidd/Makefile.am0000644000175000017500000000060513546075722020417 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = \ t3.cir \ t4.cir \ t5.cir \ inv2.cir \ RampVg2.cir TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ nmosdd.mod \ pmosdd.mod \ $(TESTS) \ $(TESTS:.cir=.out) EXTRA_DIST += ring51.cir lib.h MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/bsim3soidd/lib.h0000644000175000017500000001042513546075722017303 0ustar carstencarsten .subckt dum ss mn1 ss ss ss ss ss n1 w=4u l=0.15u debug=1 AS=6p AD=6p PS=7u PD=7u .ends dum * XOR2 .subckt xnor2 dd ss sub A B out mn1 T1 A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn2 C1 B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn3 out A C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn4 out B C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn5 C2 T1 ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 T1 A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp2 T1 B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp3 out A C3 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp4 C3 B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp5 out T1 dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends xnor2 .subckt nor2 dd ss sub A B out mn1 out A ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn2 out B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 out A C1 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp2 C1 B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends nor2 .subckt nand2 dd ss sub A B out mn1 out A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn2 C1 B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 out A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp2 out B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends nand2 .subckt nor3 dd ss sub A B C out mn1 out A ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn2 out B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn3 out C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 out A C1 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp2 C1 B C2 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp3 C2 C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends nor3 .subckt nand3 dd ss sub A B C out mn1 out A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn2 C1 B C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn3 C2 C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 out A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp2 out B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp3 out C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends nand3 .subckt nor4 dd ss sub A B C D out mn1 out A ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn2 out B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn3 out C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn4 out C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 out A C1 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp2 C1 B C2 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp3 C2 C C3 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp4 C3 C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends nor4 .subckt nand4 dd ss sub A B C D out mn1 out A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn2 C1 B C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn3 C2 C C3 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn4 C3 C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 out A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp2 out B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp3 out C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp4 out C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends nand4 .subckt inv1 dd ss sub in out mn1 out in ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 out in dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends inv1 .subckt inv5 dd ss sub in out xinv1 dd ss sub in 1 inv1 xinv2 dd ss sub 1 2 inv1 xinv3 dd ss sub 2 3 inv1 xinv4 dd ss sub 3 4 inv1 xinv5 dd ss sub 4 out inv1 .ends inv5 .subckt inv25 dd ss sub in out xinv1 dd ss sub in 1 inv5 xinv2 dd ss sub 1 2 inv5 xinv3 dd ss sub 2 3 inv5 xinv4 dd ss sub 3 4 inv5 xinv5 dd ss sub 4 out inv5 .ends inv25 .subckt inv125 dd ss sub in out xinv1 dd ss sub in 1 inv25 xinv2 dd ss sub 1 2 inv25 xinv3 dd ss sub 2 3 inv25 xinv4 dd ss sub 3 4 inv25 xinv5 dd ss sub 4 out inv25 .ends inv125 .subckt inv625 dd ss sub in out xinv1 dd ss sub in 1 inv125 xinv2 dd ss sub 1 2 inv125 xinv3 dd ss sub 2 3 inv125 xinv4 dd ss sub 3 4 inv125 xinv5 dd ss sub 4 out inv125 .ends inv625 tmpk8ny_4pz/tests/bsim3soidd/inv2.cir0000644000175000017500000000046313546075722017742 0ustar carstencarsten* model = BSIMSOI (DD) * * * SOI Inverter - floating body vin in 0 dc 2.5 vdd dd 0 dc 2.5 vss ss 0 dc 0 ve e 0 dc 1.25 m1 out in dd e p1 w=20u l=0.25u m2 out in ss e n1 w=10u l=0.25u .option itl1=500 gmin=1e-25 noacct .dc vin 0 2.5 0.01 .print dc v(in), v(out) .include nmosdd.mod .include pmosdd.mod tmpk8ny_4pz/tests/bsim3soidd/nmosdd.mod0000644000175000017500000000405513546075722020353 0ustar carstencarsten*Model Card for BSIMDD2.0, floating body DD SOI NMOS *Released on 2/15/99 .Model N1 NMOS Level= 56 +TNOM = 27 TOX = 4.5E-09 TSI = 5e-8 TBOX = 8E-08 +MOBMOD = 0 CAPMOD = 3 SHMOD = 0 +PARAMCHK=0 WINT = 0 LINT = -2E-08 +VTH0 = .52 K1 = .39 K2 = .1 K3 = 0 +KB1 = .95 K3B = 2.2 NLX = 7.2E-08 +DVT0 = .55 DVT1 = .28 DVT2 = -1.4 +DVT0W = 0 DVT1W = 0 DVT2W = 0 +NCH = 3.3E+17 NSUB = 1E+15 NGATE = 1E+20 +DVBD0 = 60.0 DVBD1 = 1.1 VBSA = 0.0 +KB3 = 2.2 DELP = 0.02 +ABP = 0.9 MXC = 0.9 ADICE0 = 0.93 +KBJT1 = 1.0E-08 EDL = .0000005 +NDIODE = 1.13 NTUN = 14.0 +ISBJT = 2e-6 ISDIF = 1e-6 ISTUN = 0.0 ISREC = 1e-5 +XBJT = 0.01 XDIF = 0.01 XREC = 0.01 XTUN = 0.001 +U0 = 352 UA = 1.3E-11 UB = 1.7E-18 UC = -4E-10 +W0 = 1.16E-06 AGS = .25 A1 = 0 A2 = 1 +B0 = .01 B1 = 10 +RDSW = 700 PRWG = 0 PRWB = -.2 WR = 1 +RBODY = 0.0 RBSH = 0.0 +A0 = 1.4 KETA = -.67 VSAT = 135000 +DWG = 0 DWB = 0 +ALPHA0 = 0.0 ALPHA1 = 1.5 BETA0 = 20.5 +AII = 1.2 BII = 0.1e-7 CII = 0.8 DII = 0.6 +VOFF = -.14 NFACTOR = .7 CDSC = .00002 CDSCB = 0 +CDSCD = 0 CIT = 0 +PCLM = 2.9 PVAG = 12 PDIBLC1 = .18 PDIBLC2 = .004 +PDIBLCB = -.234 DROUT = .2 +DELTA = .01 ETA0 = .01 ETAB = 0 +DSUB = .3 RTH0 = .006 +CLC = .0000001 CLE = .6 CF = 1E-20 CKAPPA = .6 +CGDL = 1E-20 CGSL = 1E-20 KT1 = -.3 KT1L = 0 +KT2 = .022 UTE = -1.5 UA1 = 4.31E-09 UB1 = -7.61E-18 +UC1 = -5.6E-11 PRT = 760 AT = 22400 +CGSO = 1e-10 CGDO = 1e-10 CJSWG = 5e-10 TT=3e-10 +ASD = 0.3 CSDESW = 1e-12 tmpk8ny_4pz/tests/bsim3soidd/t5.cir0000644000175000017500000000042413546075722017411 0ustar carstencarsten*model = BSIMSOI (DD) *Berkeley Spice Compatibility * * SOI NMOSFET, floating body simulation vd d 0 dc 0.05 vs s 0 dc 0 ve e 0 dc 0 vg g 0 dc 3 m1 d g s e n1 w=10u l=0.25u .option gmin=1e-25 itl1=500 noacct .dc vg 0 1.5 0.01 ve -4 4 1 .print dc i(vs) .include nmosdd.mod tmpk8ny_4pz/tests/bsim3soidd/t3.out0000644000175000017500000024625313546075722017455 0ustar carstencarsten Circuit: *model = BSIMSOI (DD) Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Warning: Pd = 0 is less than W. Warning: Ps = 0 is less than W. *model = BSIMSOI (DD) DC transfer characteristic Sat Aug 27 15:56:51 2005 -------------------------------------------------------------------------------- Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 0 0.000000e+00 5.000000e-01 -5.161596e-35 1 1.000000e-02 5.000000e-01 3.628821e-06 2 2.000000e-02 5.000000e-01 6.866714e-06 3 3.000000e-02 5.000000e-01 9.721321e-06 4 4.000000e-02 5.000000e-01 1.220246e-05 5 5.000000e-02 5.000000e-01 1.432317e-05 6 6.000000e-02 5.000000e-01 1.610108e-05 7 7.000000e-02 5.000000e-01 1.755994e-05 8 8.000000e-02 5.000000e-01 1.873090e-05 9 9.000000e-02 5.000000e-01 1.965237e-05 10 1.000000e-01 5.000000e-01 2.036791e-05 11 1.100000e-01 5.000000e-01 2.092197e-05 12 1.200000e-01 5.000000e-01 2.135522e-05 13 1.300000e-01 5.000000e-01 2.170127e-05 14 1.400000e-01 5.000000e-01 2.198575e-05 15 1.500000e-01 5.000000e-01 2.222712e-05 16 1.600000e-01 5.000000e-01 2.243823e-05 17 1.700000e-01 5.000000e-01 2.262788e-05 18 1.800000e-01 5.000000e-01 2.280209e-05 19 1.900000e-01 5.000000e-01 2.296503e-05 20 2.000000e-01 5.000000e-01 2.311958e-05 21 2.100000e-01 5.000000e-01 2.326779e-05 22 2.200000e-01 5.000000e-01 2.341114e-05 23 2.300000e-01 5.000000e-01 2.355068e-05 24 2.400000e-01 5.000000e-01 2.368723e-05 25 2.500000e-01 5.000000e-01 2.382139e-05 26 2.600000e-01 5.000000e-01 2.395361e-05 27 2.700000e-01 5.000000e-01 2.408425e-05 28 2.800000e-01 5.000000e-01 2.421360e-05 29 2.900000e-01 5.000000e-01 2.434186e-05 30 3.000000e-01 5.000000e-01 2.446923e-05 31 3.100000e-01 5.000000e-01 2.459584e-05 32 3.200000e-01 5.000000e-01 2.472182e-05 33 3.300000e-01 5.000000e-01 2.484726e-05 34 3.400000e-01 5.000000e-01 2.497225e-05 35 3.500000e-01 5.000000e-01 2.509684e-05 36 3.600000e-01 5.000000e-01 2.522111e-05 37 3.700000e-01 5.000000e-01 2.534509e-05 38 3.800000e-01 5.000000e-01 2.546884e-05 39 3.900000e-01 5.000000e-01 2.559238e-05 40 4.000000e-01 5.000000e-01 2.571575e-05 41 4.100000e-01 5.000000e-01 2.583898e-05 42 4.200000e-01 5.000000e-01 2.596209e-05 43 4.300000e-01 5.000000e-01 2.608509e-05 44 4.400000e-01 5.000000e-01 2.620801e-05 45 4.500000e-01 5.000000e-01 2.633087e-05 46 4.600000e-01 5.000000e-01 2.645368e-05 47 4.700000e-01 5.000000e-01 2.657645e-05 48 4.800000e-01 5.000000e-01 2.669919e-05 49 4.900000e-01 5.000000e-01 2.682191e-05 50 5.000000e-01 5.000000e-01 2.694463e-05 51 5.100000e-01 5.000000e-01 2.706734e-05 52 5.200000e-01 5.000000e-01 2.719007e-05 53 5.300000e-01 5.000000e-01 2.731281e-05 54 5.400000e-01 5.000000e-01 2.743557e-05 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 55 5.500000e-01 5.000000e-01 2.755835e-05 56 5.600000e-01 5.000000e-01 2.768117e-05 57 5.700000e-01 5.000000e-01 2.780403e-05 58 5.800000e-01 5.000000e-01 2.792693e-05 59 5.900000e-01 5.000000e-01 2.804987e-05 60 6.000000e-01 5.000000e-01 2.817286e-05 61 6.100000e-01 5.000000e-01 2.829590e-05 62 6.200000e-01 5.000000e-01 2.841900e-05 63 6.300000e-01 5.000000e-01 2.854215e-05 64 6.400000e-01 5.000000e-01 2.866536e-05 65 6.500000e-01 5.000000e-01 2.878865e-05 66 6.600000e-01 5.000000e-01 2.891200e-05 67 6.700000e-01 5.000000e-01 2.903542e-05 68 6.800000e-01 5.000000e-01 2.915892e-05 69 6.900000e-01 5.000000e-01 2.928250e-05 70 7.000000e-01 5.000000e-01 2.940617e-05 71 7.100000e-01 5.000000e-01 2.952995e-05 72 7.200000e-01 5.000000e-01 2.965384e-05 73 7.300000e-01 5.000000e-01 2.977787e-05 74 7.400000e-01 5.000000e-01 2.990204e-05 75 7.500000e-01 5.000000e-01 3.002638e-05 76 7.600000e-01 5.000000e-01 3.015091e-05 77 7.700000e-01 5.000000e-01 3.027565e-05 78 7.800000e-01 5.000000e-01 3.040061e-05 79 7.900000e-01 5.000000e-01 3.052581e-05 80 8.000000e-01 5.000000e-01 3.065127e-05 81 8.100000e-01 5.000000e-01 3.077703e-05 82 8.200000e-01 5.000000e-01 3.090314e-05 83 8.300000e-01 5.000000e-01 3.102967e-05 84 8.400000e-01 5.000000e-01 3.115673e-05 85 8.500000e-01 5.000000e-01 3.128448e-05 86 8.600000e-01 5.000000e-01 3.141320e-05 87 8.700000e-01 5.000000e-01 3.154331e-05 88 8.800000e-01 5.000000e-01 3.167565e-05 89 8.900000e-01 5.000000e-01 3.181185e-05 90 9.000000e-01 5.000000e-01 3.195572e-05 91 9.100000e-01 5.000000e-01 3.211788e-05 92 9.200000e-01 5.000000e-01 3.233415e-05 93 9.300000e-01 5.000000e-01 3.268784e-05 94 9.400000e-01 5.000000e-01 3.315744e-05 95 9.500000e-01 5.000000e-01 3.363908e-05 96 9.600000e-01 5.000000e-01 3.410684e-05 97 9.700000e-01 5.000000e-01 3.456930e-05 98 9.800000e-01 5.000000e-01 3.504589e-05 99 9.900000e-01 5.000000e-01 3.556360e-05 100 1.000000e+00 5.000000e-01 3.615687e-05 101 1.010000e+00 5.000000e-01 3.686245e-05 102 1.020000e+00 5.000000e-01 3.770443e-05 103 1.030000e+00 5.000000e-01 3.868068e-05 104 1.040000e+00 5.000000e-01 3.976837e-05 105 1.050000e+00 5.000000e-01 4.094050e-05 106 1.060000e+00 5.000000e-01 4.217556e-05 107 1.070000e+00 5.000000e-01 4.345876e-05 108 1.080000e+00 5.000000e-01 4.478040e-05 109 1.090000e+00 5.000000e-01 4.613406e-05 110 1.100000e+00 5.000000e-01 4.751535e-05 111 1.110000e+00 5.000000e-01 4.892760e-05 112 1.120000e+00 5.000000e-01 5.037555e-05 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 113 1.130000e+00 5.000000e-01 5.185403e-05 114 1.140000e+00 5.000000e-01 5.335897e-05 115 1.150000e+00 5.000000e-01 5.488717e-05 116 1.160000e+00 5.000000e-01 5.643604e-05 117 1.170000e+00 5.000000e-01 5.800344e-05 118 1.180000e+00 5.000000e-01 5.958757e-05 119 1.190000e+00 5.000000e-01 6.118688e-05 120 1.200000e+00 5.000000e-01 6.280003e-05 121 1.210000e+00 5.000000e-01 6.442581e-05 122 1.220000e+00 5.000000e-01 6.606317e-05 123 1.230000e+00 5.000000e-01 6.771114e-05 124 1.240000e+00 5.000000e-01 6.936884e-05 125 1.250000e+00 5.000000e-01 7.103547e-05 126 1.260000e+00 5.000000e-01 7.271028e-05 127 1.270000e+00 5.000000e-01 7.439258e-05 128 1.280000e+00 5.000000e-01 7.608173e-05 129 1.290000e+00 5.000000e-01 7.777712e-05 130 1.300000e+00 5.000000e-01 7.947818e-05 131 1.310000e+00 5.000000e-01 8.118438e-05 132 1.320000e+00 5.000000e-01 8.289520e-05 133 1.330000e+00 5.000000e-01 8.461016e-05 134 1.340000e+00 5.000000e-01 8.632882e-05 135 1.350000e+00 5.000000e-01 8.805074e-05 136 1.360000e+00 5.000000e-01 8.977551e-05 137 1.370000e+00 5.000000e-01 9.150273e-05 138 1.380000e+00 5.000000e-01 9.323204e-05 139 1.390000e+00 5.000000e-01 9.496308e-05 140 1.400000e+00 5.000000e-01 9.669551e-05 141 1.410000e+00 5.000000e-01 9.842901e-05 142 1.420000e+00 5.000000e-01 1.001633e-04 143 1.430000e+00 5.000000e-01 1.018980e-04 144 1.440000e+00 5.000000e-01 1.036329e-04 145 1.450000e+00 5.000000e-01 1.053677e-04 146 1.460000e+00 5.000000e-01 1.071022e-04 147 1.470000e+00 5.000000e-01 1.088361e-04 148 1.480000e+00 5.000000e-01 1.105692e-04 149 1.490000e+00 5.000000e-01 1.123012e-04 150 1.500000e+00 5.000000e-01 1.140320e-04 151 1.510000e+00 5.000000e-01 1.157613e-04 152 1.520000e+00 5.000000e-01 1.174890e-04 153 1.530000e+00 5.000000e-01 1.192148e-04 154 1.540000e+00 5.000000e-01 1.209386e-04 155 1.550000e+00 5.000000e-01 1.226602e-04 156 1.560000e+00 5.000000e-01 1.243795e-04 157 1.570000e+00 5.000000e-01 1.260962e-04 158 1.580000e+00 5.000000e-01 1.278103e-04 159 1.590000e+00 5.000000e-01 1.295216e-04 160 1.600000e+00 5.000000e-01 1.312299e-04 161 1.610000e+00 5.000000e-01 1.329352e-04 162 1.620000e+00 5.000000e-01 1.346373e-04 163 1.630000e+00 5.000000e-01 1.363361e-04 164 1.640000e+00 5.000000e-01 1.380315e-04 165 1.650000e+00 5.000000e-01 1.397234e-04 166 1.660000e+00 5.000000e-01 1.414116e-04 167 1.670000e+00 5.000000e-01 1.430962e-04 168 1.680000e+00 5.000000e-01 1.447769e-04 169 1.690000e+00 5.000000e-01 1.464537e-04 170 1.700000e+00 5.000000e-01 1.481265e-04 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 171 1.710000e+00 5.000000e-01 1.497952e-04 172 1.720000e+00 5.000000e-01 1.514598e-04 173 1.730000e+00 5.000000e-01 1.531202e-04 174 1.740000e+00 5.000000e-01 1.547763e-04 175 1.750000e+00 5.000000e-01 1.564281e-04 176 1.760000e+00 5.000000e-01 1.580754e-04 177 1.770000e+00 5.000000e-01 1.597183e-04 178 1.780000e+00 5.000000e-01 1.613567e-04 179 1.790000e+00 5.000000e-01 1.629904e-04 180 1.800000e+00 5.000000e-01 1.646196e-04 181 1.810000e+00 5.000000e-01 1.662440e-04 182 1.820000e+00 5.000000e-01 1.678638e-04 183 1.830000e+00 5.000000e-01 1.694788e-04 184 1.840000e+00 5.000000e-01 1.710889e-04 185 1.850000e+00 5.000000e-01 1.726942e-04 186 1.860000e+00 5.000000e-01 1.742947e-04 187 1.870000e+00 5.000000e-01 1.758902e-04 188 1.880000e+00 5.000000e-01 1.774808e-04 189 1.890000e+00 5.000000e-01 1.790664e-04 190 1.900000e+00 5.000000e-01 1.806470e-04 191 1.910000e+00 5.000000e-01 1.822226e-04 192 1.920000e+00 5.000000e-01 1.837931e-04 193 1.930000e+00 5.000000e-01 1.853585e-04 194 1.940000e+00 5.000000e-01 1.869188e-04 195 1.950000e+00 5.000000e-01 1.884740e-04 196 1.960000e+00 5.000000e-01 1.900241e-04 197 1.970000e+00 5.000000e-01 1.915690e-04 198 1.980000e+00 5.000000e-01 1.931088e-04 199 1.990000e+00 5.000000e-01 1.946433e-04 200 2.000000e+00 5.000000e-01 1.961727e-04 201 2.010000e+00 5.000000e-01 1.976969e-04 202 2.020000e+00 5.000000e-01 1.992158e-04 203 2.030000e+00 5.000000e-01 2.007295e-04 204 2.040000e+00 5.000000e-01 2.022380e-04 205 2.050000e+00 5.000000e-01 2.037412e-04 206 2.060000e+00 5.000000e-01 2.052392e-04 207 2.070000e+00 5.000000e-01 2.067319e-04 208 2.080000e+00 5.000000e-01 2.082193e-04 209 2.090000e+00 5.000000e-01 2.097015e-04 210 2.100000e+00 5.000000e-01 2.111784e-04 211 2.110000e+00 5.000000e-01 2.126501e-04 212 2.120000e+00 5.000000e-01 2.141165e-04 213 2.130000e+00 5.000000e-01 2.155776e-04 214 2.140000e+00 5.000000e-01 2.170334e-04 215 2.150000e+00 5.000000e-01 2.184840e-04 216 2.160000e+00 5.000000e-01 2.199293e-04 217 2.170000e+00 5.000000e-01 2.213694e-04 218 2.180000e+00 5.000000e-01 2.228042e-04 219 2.190000e+00 5.000000e-01 2.242337e-04 220 2.200000e+00 5.000000e-01 2.256581e-04 221 2.210000e+00 5.000000e-01 2.270771e-04 222 2.220000e+00 5.000000e-01 2.284910e-04 223 2.230000e+00 5.000000e-01 2.298996e-04 224 2.240000e+00 5.000000e-01 2.313030e-04 225 2.250000e+00 5.000000e-01 2.327012e-04 226 2.260000e+00 5.000000e-01 2.340942e-04 227 2.270000e+00 5.000000e-01 2.354820e-04 228 2.280000e+00 5.000000e-01 2.368646e-04 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 229 2.290000e+00 5.000000e-01 2.382421e-04 230 2.300000e+00 5.000000e-01 2.396144e-04 231 2.310000e+00 5.000000e-01 2.409816e-04 232 2.320000e+00 5.000000e-01 2.423437e-04 233 2.330000e+00 5.000000e-01 2.437006e-04 234 2.340000e+00 5.000000e-01 2.450525e-04 235 2.350000e+00 5.000000e-01 2.463992e-04 236 2.360000e+00 5.000000e-01 2.477410e-04 237 2.370000e+00 5.000000e-01 2.490776e-04 238 2.380000e+00 5.000000e-01 2.504093e-04 239 2.390000e+00 5.000000e-01 2.517359e-04 240 2.400000e+00 5.000000e-01 2.530576e-04 241 2.410000e+00 5.000000e-01 2.543742e-04 242 2.420000e+00 5.000000e-01 2.556859e-04 243 2.430000e+00 5.000000e-01 2.569927e-04 244 2.440000e+00 5.000000e-01 2.582946e-04 245 2.450000e+00 5.000000e-01 2.595916e-04 246 2.460000e+00 5.000000e-01 2.608837e-04 247 2.470000e+00 5.000000e-01 2.621710e-04 248 2.480000e+00 5.000000e-01 2.634534e-04 249 2.490000e+00 5.000000e-01 2.647311e-04 250 2.500000e+00 5.000000e-01 2.660039e-04 251 2.510000e+00 5.000000e-01 2.672721e-04 252 2.520000e+00 5.000000e-01 2.685355e-04 253 2.530000e+00 5.000000e-01 2.697942e-04 254 2.540000e+00 5.000000e-01 2.710483e-04 255 2.550000e+00 5.000000e-01 2.722977e-04 256 2.560000e+00 5.000000e-01 2.735425e-04 257 2.570000e+00 5.000000e-01 2.747827e-04 258 2.580000e+00 5.000000e-01 2.760184e-04 259 2.590000e+00 5.000000e-01 2.772496e-04 260 2.600000e+00 5.000000e-01 2.784762e-04 261 2.610000e+00 5.000000e-01 2.796984e-04 262 2.620000e+00 5.000000e-01 2.809162e-04 263 2.630000e+00 5.000000e-01 2.821296e-04 264 2.640000e+00 5.000000e-01 2.833386e-04 265 2.650000e+00 5.000000e-01 2.845434e-04 266 2.660000e+00 5.000000e-01 2.857438e-04 267 2.670000e+00 5.000000e-01 2.869400e-04 268 2.680000e+00 5.000000e-01 2.881319e-04 269 2.690000e+00 5.000000e-01 2.893197e-04 270 2.700000e+00 5.000000e-01 2.905033e-04 271 2.710000e+00 5.000000e-01 2.916829e-04 272 2.720000e+00 5.000000e-01 2.928583e-04 273 2.730000e+00 5.000000e-01 2.940298e-04 274 2.740000e+00 5.000000e-01 2.951972e-04 275 2.750000e+00 5.000000e-01 2.963607e-04 276 2.760000e+00 5.000000e-01 2.975203e-04 277 2.770000e+00 5.000000e-01 2.986761e-04 278 2.780000e+00 5.000000e-01 2.998280e-04 279 2.790000e+00 5.000000e-01 3.009762e-04 280 2.800000e+00 5.000000e-01 3.021206e-04 281 2.810000e+00 5.000000e-01 3.032614e-04 282 2.820000e+00 5.000000e-01 3.043985e-04 283 2.830000e+00 5.000000e-01 3.055320e-04 284 2.840000e+00 5.000000e-01 3.066620e-04 285 2.850000e+00 5.000000e-01 3.077885e-04 286 2.860000e+00 5.000000e-01 3.089115e-04 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 287 2.870000e+00 5.000000e-01 3.100311e-04 288 2.880000e+00 5.000000e-01 3.111474e-04 289 2.890000e+00 5.000000e-01 3.122604e-04 290 2.900000e+00 5.000000e-01 3.133701e-04 291 2.910000e+00 5.000000e-01 3.144766e-04 292 2.920000e+00 5.000000e-01 3.155800e-04 293 2.930000e+00 5.000000e-01 3.166803e-04 294 2.940000e+00 5.000000e-01 3.177775e-04 295 2.950000e+00 5.000000e-01 3.188718e-04 296 2.960000e+00 5.000000e-01 3.199631e-04 297 2.970000e+00 5.000000e-01 3.210516e-04 298 2.980000e+00 5.000000e-01 3.221372e-04 299 2.990000e+00 5.000000e-01 3.232200e-04 300 3.000000e+00 5.000000e-01 3.243001e-04 301 0.000000e+00 1.000000e+00 -5.161596e-35 302 1.000000e-02 1.000000e+00 3.035382e-05 303 2.000000e-02 1.000000e+00 6.014191e-05 304 3.000000e-02 1.000000e+00 8.936619e-05 305 4.000000e-02 1.000000e+00 1.180286e-04 306 5.000000e-02 1.000000e+00 1.461310e-04 307 6.000000e-02 1.000000e+00 1.736754e-04 308 7.000000e-02 1.000000e+00 2.006636e-04 309 8.000000e-02 1.000000e+00 2.270975e-04 310 9.000000e-02 1.000000e+00 2.529791e-04 311 1.000000e-01 1.000000e+00 2.783103e-04 312 1.100000e-01 1.000000e+00 3.030928e-04 313 1.200000e-01 1.000000e+00 3.273287e-04 314 1.300000e-01 1.000000e+00 3.510198e-04 315 1.400000e-01 1.000000e+00 3.741679e-04 316 1.500000e-01 1.000000e+00 3.967749e-04 317 1.600000e-01 1.000000e+00 4.188428e-04 318 1.700000e-01 1.000000e+00 4.403734e-04 319 1.800000e-01 1.000000e+00 4.613686e-04 320 1.900000e-01 1.000000e+00 4.818302e-04 321 2.000000e-01 1.000000e+00 5.017602e-04 322 2.100000e-01 1.000000e+00 5.211604e-04 323 2.200000e-01 1.000000e+00 5.400328e-04 324 2.300000e-01 1.000000e+00 5.583792e-04 325 2.400000e-01 1.000000e+00 5.762015e-04 326 2.500000e-01 1.000000e+00 5.935017e-04 327 2.600000e-01 1.000000e+00 6.102819e-04 328 2.700000e-01 1.000000e+00 6.265438e-04 329 2.800000e-01 1.000000e+00 6.422897e-04 330 2.900000e-01 1.000000e+00 6.575214e-04 331 3.000000e-01 1.000000e+00 6.722413e-04 332 3.100000e-01 1.000000e+00 6.864514e-04 333 3.200000e-01 1.000000e+00 7.001539e-04 334 3.300000e-01 1.000000e+00 7.133514e-04 335 3.400000e-01 1.000000e+00 7.260463e-04 336 3.500000e-01 1.000000e+00 7.382412e-04 337 3.600000e-01 1.000000e+00 7.499389e-04 338 3.700000e-01 1.000000e+00 7.611427e-04 339 3.800000e-01 1.000000e+00 7.718558e-04 340 3.900000e-01 1.000000e+00 7.820821e-04 341 4.000000e-01 1.000000e+00 7.918258e-04 342 4.100000e-01 1.000000e+00 8.010919e-04 343 4.200000e-01 1.000000e+00 8.098858e-04 344 4.300000e-01 1.000000e+00 8.182141e-04 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 345 4.400000e-01 1.000000e+00 8.260843e-04 346 4.500000e-01 1.000000e+00 8.335052e-04 347 4.600000e-01 1.000000e+00 8.404869e-04 348 4.700000e-01 1.000000e+00 8.470415e-04 349 4.800000e-01 1.000000e+00 8.531825e-04 350 4.900000e-01 1.000000e+00 8.589254e-04 351 5.000000e-01 1.000000e+00 8.642875e-04 352 5.100000e-01 1.000000e+00 8.692879e-04 353 5.200000e-01 1.000000e+00 8.739470e-04 354 5.300000e-01 1.000000e+00 8.782866e-04 355 5.400000e-01 1.000000e+00 8.823288e-04 356 5.500000e-01 1.000000e+00 8.860965e-04 357 5.600000e-01 1.000000e+00 8.896119e-04 358 5.700000e-01 1.000000e+00 8.928969e-04 359 5.800000e-01 1.000000e+00 8.959725e-04 360 5.900000e-01 1.000000e+00 8.988582e-04 361 6.000000e-01 1.000000e+00 9.015723e-04 362 6.100000e-01 1.000000e+00 9.041317e-04 363 6.200000e-01 1.000000e+00 9.065517e-04 364 6.300000e-01 1.000000e+00 9.088463e-04 365 6.400000e-01 1.000000e+00 9.110278e-04 366 6.500000e-01 1.000000e+00 9.131076e-04 367 6.600000e-01 1.000000e+00 9.150956e-04 368 6.700000e-01 1.000000e+00 9.170008e-04 369 6.800000e-01 1.000000e+00 9.188312e-04 370 6.900000e-01 1.000000e+00 9.205938e-04 371 7.000000e-01 1.000000e+00 9.222949e-04 372 7.100000e-01 1.000000e+00 9.239402e-04 373 7.200000e-01 1.000000e+00 9.255347e-04 374 7.300000e-01 1.000000e+00 9.270828e-04 375 7.400000e-01 1.000000e+00 9.285886e-04 376 7.500000e-01 1.000000e+00 9.300556e-04 377 7.600000e-01 1.000000e+00 9.314870e-04 378 7.700000e-01 1.000000e+00 9.328858e-04 379 7.800000e-01 1.000000e+00 9.342546e-04 380 7.900000e-01 1.000000e+00 9.355955e-04 381 8.000000e-01 1.000000e+00 9.369109e-04 382 8.100000e-01 1.000000e+00 9.382026e-04 383 8.200000e-01 1.000000e+00 9.394723e-04 384 8.300000e-01 1.000000e+00 9.407215e-04 385 8.400000e-01 1.000000e+00 9.419518e-04 386 8.500000e-01 1.000000e+00 9.431645e-04 387 8.600000e-01 1.000000e+00 9.443606e-04 388 8.700000e-01 1.000000e+00 9.455414e-04 389 8.800000e-01 1.000000e+00 9.467078e-04 390 8.900000e-01 1.000000e+00 9.478607e-04 391 9.000000e-01 1.000000e+00 9.490010e-04 392 9.100000e-01 1.000000e+00 9.501305e-04 393 9.200000e-01 1.000000e+00 9.512496e-04 394 9.300000e-01 1.000000e+00 9.523590e-04 395 9.400000e-01 1.000000e+00 9.534597e-04 396 9.500000e-01 1.000000e+00 9.545524e-04 397 9.600000e-01 1.000000e+00 9.556378e-04 398 9.700000e-01 1.000000e+00 9.567166e-04 399 9.800000e-01 1.000000e+00 9.577897e-04 400 9.900000e-01 1.000000e+00 9.588578e-04 401 1.000000e+00 1.000000e+00 9.599222e-04 402 1.010000e+00 1.000000e+00 9.609844e-04 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 403 1.020000e+00 1.000000e+00 9.620466e-04 404 1.030000e+00 1.000000e+00 9.631129e-04 405 1.040000e+00 1.000000e+00 9.641899e-04 406 1.050000e+00 1.000000e+00 9.652918e-04 407 1.060000e+00 1.000000e+00 9.664537e-04 408 1.070000e+00 1.000000e+00 9.677858e-04 409 1.080000e+00 1.000000e+00 9.697455e-04 410 1.090000e+00 1.000000e+00 9.734428e-04 411 1.100000e+00 1.000000e+00 9.783818e-04 412 1.110000e+00 1.000000e+00 9.835361e-04 413 1.120000e+00 1.000000e+00 9.886429e-04 414 1.130000e+00 1.000000e+00 9.936418e-04 415 1.140000e+00 1.000000e+00 9.985189e-04 416 1.150000e+00 1.000000e+00 1.003274e-03 417 1.160000e+00 1.000000e+00 1.007910e-03 418 1.170000e+00 1.000000e+00 1.012432e-03 419 1.180000e+00 1.000000e+00 1.016848e-03 420 1.190000e+00 1.000000e+00 1.021161e-03 421 1.200000e+00 1.000000e+00 1.025379e-03 422 1.210000e+00 1.000000e+00 1.029506e-03 423 1.220000e+00 1.000000e+00 1.033547e-03 424 1.230000e+00 1.000000e+00 1.037508e-03 425 1.240000e+00 1.000000e+00 1.041394e-03 426 1.250000e+00 1.000000e+00 1.045262e-03 427 1.260000e+00 1.000000e+00 1.049117e-03 428 1.270000e+00 1.000000e+00 1.052944e-03 429 1.280000e+00 1.000000e+00 1.056734e-03 430 1.290000e+00 1.000000e+00 1.060479e-03 431 1.300000e+00 1.000000e+00 1.064174e-03 432 1.310000e+00 1.000000e+00 1.067819e-03 433 1.320000e+00 1.000000e+00 1.071410e-03 434 1.330000e+00 1.000000e+00 1.074947e-03 435 1.340000e+00 1.000000e+00 1.078431e-03 436 1.350000e+00 1.000000e+00 1.081862e-03 437 1.360000e+00 1.000000e+00 1.085241e-03 438 1.370000e+00 1.000000e+00 1.088568e-03 439 1.380000e+00 1.000000e+00 1.091844e-03 440 1.390000e+00 1.000000e+00 1.095072e-03 441 1.400000e+00 1.000000e+00 1.098252e-03 442 1.410000e+00 1.000000e+00 1.101385e-03 443 1.420000e+00 1.000000e+00 1.104474e-03 444 1.430000e+00 1.000000e+00 1.107519e-03 445 1.440000e+00 1.000000e+00 1.110522e-03 446 1.450000e+00 1.000000e+00 1.113484e-03 447 1.460000e+00 1.000000e+00 1.116406e-03 448 1.470000e+00 1.000000e+00 1.119290e-03 449 1.480000e+00 1.000000e+00 1.122138e-03 450 1.490000e+00 1.000000e+00 1.124949e-03 451 1.500000e+00 1.000000e+00 1.127726e-03 452 1.510000e+00 1.000000e+00 1.130470e-03 453 1.520000e+00 1.000000e+00 1.133182e-03 454 1.530000e+00 1.000000e+00 1.135862e-03 455 1.540000e+00 1.000000e+00 1.138513e-03 456 1.550000e+00 1.000000e+00 1.141134e-03 457 1.560000e+00 1.000000e+00 1.143727e-03 458 1.570000e+00 1.000000e+00 1.146294e-03 459 1.580000e+00 1.000000e+00 1.148834e-03 460 1.590000e+00 1.000000e+00 1.151349e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 461 1.600000e+00 1.000000e+00 1.153839e-03 462 1.610000e+00 1.000000e+00 1.156306e-03 463 1.620000e+00 1.000000e+00 1.158750e-03 464 1.630000e+00 1.000000e+00 1.161172e-03 465 1.640000e+00 1.000000e+00 1.163572e-03 466 1.650000e+00 1.000000e+00 1.165952e-03 467 1.660000e+00 1.000000e+00 1.168312e-03 468 1.670000e+00 1.000000e+00 1.170653e-03 469 1.680000e+00 1.000000e+00 1.172974e-03 470 1.690000e+00 1.000000e+00 1.175278e-03 471 1.700000e+00 1.000000e+00 1.177564e-03 472 1.710000e+00 1.000000e+00 1.179832e-03 473 1.720000e+00 1.000000e+00 1.182085e-03 474 1.730000e+00 1.000000e+00 1.184321e-03 475 1.740000e+00 1.000000e+00 1.186542e-03 476 1.750000e+00 1.000000e+00 1.188747e-03 477 1.760000e+00 1.000000e+00 1.190938e-03 478 1.770000e+00 1.000000e+00 1.193115e-03 479 1.780000e+00 1.000000e+00 1.195277e-03 480 1.790000e+00 1.000000e+00 1.197427e-03 481 1.800000e+00 1.000000e+00 1.199563e-03 482 1.810000e+00 1.000000e+00 1.201686e-03 483 1.820000e+00 1.000000e+00 1.203797e-03 484 1.830000e+00 1.000000e+00 1.205896e-03 485 1.840000e+00 1.000000e+00 1.207983e-03 486 1.850000e+00 1.000000e+00 1.210058e-03 487 1.860000e+00 1.000000e+00 1.212123e-03 488 1.870000e+00 1.000000e+00 1.214176e-03 489 1.880000e+00 1.000000e+00 1.216218e-03 490 1.890000e+00 1.000000e+00 1.218250e-03 491 1.900000e+00 1.000000e+00 1.220272e-03 492 1.910000e+00 1.000000e+00 1.222284e-03 493 1.920000e+00 1.000000e+00 1.224286e-03 494 1.930000e+00 1.000000e+00 1.226278e-03 495 1.940000e+00 1.000000e+00 1.228260e-03 496 1.950000e+00 1.000000e+00 1.230234e-03 497 1.960000e+00 1.000000e+00 1.232198e-03 498 1.970000e+00 1.000000e+00 1.234153e-03 499 1.980000e+00 1.000000e+00 1.236100e-03 500 1.990000e+00 1.000000e+00 1.238037e-03 501 2.000000e+00 1.000000e+00 1.239966e-03 502 2.010000e+00 1.000000e+00 1.241887e-03 503 2.020000e+00 1.000000e+00 1.243799e-03 504 2.030000e+00 1.000000e+00 1.245704e-03 505 2.040000e+00 1.000000e+00 1.247599e-03 506 2.050000e+00 1.000000e+00 1.249487e-03 507 2.060000e+00 1.000000e+00 1.251367e-03 508 2.070000e+00 1.000000e+00 1.253239e-03 509 2.080000e+00 1.000000e+00 1.255104e-03 510 2.090000e+00 1.000000e+00 1.256960e-03 511 2.100000e+00 1.000000e+00 1.258809e-03 512 2.110000e+00 1.000000e+00 1.260651e-03 513 2.120000e+00 1.000000e+00 1.262485e-03 514 2.130000e+00 1.000000e+00 1.264311e-03 515 2.140000e+00 1.000000e+00 1.266130e-03 516 2.150000e+00 1.000000e+00 1.267941e-03 517 2.160000e+00 1.000000e+00 1.269746e-03 518 2.170000e+00 1.000000e+00 1.271543e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 519 2.180000e+00 1.000000e+00 1.273332e-03 520 2.190000e+00 1.000000e+00 1.275115e-03 521 2.200000e+00 1.000000e+00 1.276890e-03 522 2.210000e+00 1.000000e+00 1.278658e-03 523 2.220000e+00 1.000000e+00 1.280419e-03 524 2.230000e+00 1.000000e+00 1.282173e-03 525 2.240000e+00 1.000000e+00 1.283920e-03 526 2.250000e+00 1.000000e+00 1.285659e-03 527 2.260000e+00 1.000000e+00 1.287392e-03 528 2.270000e+00 1.000000e+00 1.289117e-03 529 2.280000e+00 1.000000e+00 1.290836e-03 530 2.290000e+00 1.000000e+00 1.292547e-03 531 2.300000e+00 1.000000e+00 1.294252e-03 532 2.310000e+00 1.000000e+00 1.295950e-03 533 2.320000e+00 1.000000e+00 1.297640e-03 534 2.330000e+00 1.000000e+00 1.299324e-03 535 2.340000e+00 1.000000e+00 1.301000e-03 536 2.350000e+00 1.000000e+00 1.302670e-03 537 2.360000e+00 1.000000e+00 1.304333e-03 538 2.370000e+00 1.000000e+00 1.305989e-03 539 2.380000e+00 1.000000e+00 1.307638e-03 540 2.390000e+00 1.000000e+00 1.309280e-03 541 2.400000e+00 1.000000e+00 1.310916e-03 542 2.410000e+00 1.000000e+00 1.312544e-03 543 2.420000e+00 1.000000e+00 1.314166e-03 544 2.430000e+00 1.000000e+00 1.315781e-03 545 2.440000e+00 1.000000e+00 1.317389e-03 546 2.450000e+00 1.000000e+00 1.318990e-03 547 2.460000e+00 1.000000e+00 1.320585e-03 548 2.470000e+00 1.000000e+00 1.322173e-03 549 2.480000e+00 1.000000e+00 1.323754e-03 550 2.490000e+00 1.000000e+00 1.325328e-03 551 2.500000e+00 1.000000e+00 1.326896e-03 552 2.510000e+00 1.000000e+00 1.328457e-03 553 2.520000e+00 1.000000e+00 1.330011e-03 554 2.530000e+00 1.000000e+00 1.331559e-03 555 2.540000e+00 1.000000e+00 1.333101e-03 556 2.550000e+00 1.000000e+00 1.334635e-03 557 2.560000e+00 1.000000e+00 1.336164e-03 558 2.570000e+00 1.000000e+00 1.337685e-03 559 2.580000e+00 1.000000e+00 1.339201e-03 560 2.590000e+00 1.000000e+00 1.340710e-03 561 2.600000e+00 1.000000e+00 1.342212e-03 562 2.610000e+00 1.000000e+00 1.343709e-03 563 2.620000e+00 1.000000e+00 1.345199e-03 564 2.630000e+00 1.000000e+00 1.346683e-03 565 2.640000e+00 1.000000e+00 1.348160e-03 566 2.650000e+00 1.000000e+00 1.349632e-03 567 2.660000e+00 1.000000e+00 1.351097e-03 568 2.670000e+00 1.000000e+00 1.352557e-03 569 2.680000e+00 1.000000e+00 1.354011e-03 570 2.690000e+00 1.000000e+00 1.355458e-03 571 2.700000e+00 1.000000e+00 1.356900e-03 572 2.710000e+00 1.000000e+00 1.358336e-03 573 2.720000e+00 1.000000e+00 1.359767e-03 574 2.730000e+00 1.000000e+00 1.361192e-03 575 2.740000e+00 1.000000e+00 1.362611e-03 576 2.750000e+00 1.000000e+00 1.364025e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 577 2.760000e+00 1.000000e+00 1.365433e-03 578 2.770000e+00 1.000000e+00 1.366836e-03 579 2.780000e+00 1.000000e+00 1.368234e-03 580 2.790000e+00 1.000000e+00 1.369626e-03 581 2.800000e+00 1.000000e+00 1.371014e-03 582 2.810000e+00 1.000000e+00 1.372397e-03 583 2.820000e+00 1.000000e+00 1.373774e-03 584 2.830000e+00 1.000000e+00 1.375147e-03 585 2.840000e+00 1.000000e+00 1.376515e-03 586 2.850000e+00 1.000000e+00 1.377879e-03 587 2.860000e+00 1.000000e+00 1.379238e-03 588 2.870000e+00 1.000000e+00 1.380592e-03 589 2.880000e+00 1.000000e+00 1.381943e-03 590 2.890000e+00 1.000000e+00 1.383289e-03 591 2.900000e+00 1.000000e+00 1.384630e-03 592 2.910000e+00 1.000000e+00 1.385968e-03 593 2.920000e+00 1.000000e+00 1.387302e-03 594 2.930000e+00 1.000000e+00 1.388633e-03 595 2.940000e+00 1.000000e+00 1.389959e-03 596 2.950000e+00 1.000000e+00 1.391282e-03 597 2.960000e+00 1.000000e+00 1.392602e-03 598 2.970000e+00 1.000000e+00 1.393918e-03 599 2.980000e+00 1.000000e+00 1.395232e-03 600 2.990000e+00 1.000000e+00 1.396542e-03 601 3.000000e+00 1.000000e+00 1.397849e-03 602 0.000000e+00 1.500000e+00 -5.161596e-35 603 1.000000e-02 1.500000e+00 4.579468e-05 604 2.000000e-02 1.500000e+00 9.111651e-05 605 3.000000e-02 1.500000e+00 1.359666e-04 606 4.000000e-02 1.500000e+00 1.803462e-04 607 5.000000e-02 1.500000e+00 2.242563e-04 608 6.000000e-02 1.500000e+00 2.676981e-04 609 7.000000e-02 1.500000e+00 3.106727e-04 610 8.000000e-02 1.500000e+00 3.531813e-04 611 9.000000e-02 1.500000e+00 3.952248e-04 612 1.000000e-01 1.500000e+00 4.368045e-04 613 1.100000e-01 1.500000e+00 4.779215e-04 614 1.200000e-01 1.500000e+00 5.185768e-04 615 1.300000e-01 1.500000e+00 5.587716e-04 616 1.400000e-01 1.500000e+00 5.985069e-04 617 1.500000e-01 1.500000e+00 6.377839e-04 618 1.600000e-01 1.500000e+00 6.766036e-04 619 1.700000e-01 1.500000e+00 7.149671e-04 620 1.800000e-01 1.500000e+00 7.528755e-04 621 1.900000e-01 1.500000e+00 7.903298e-04 622 2.000000e-01 1.500000e+00 8.273312e-04 623 2.100000e-01 1.500000e+00 8.638806e-04 624 2.200000e-01 1.500000e+00 8.999792e-04 625 2.300000e-01 1.500000e+00 9.356280e-04 626 2.400000e-01 1.500000e+00 9.708281e-04 627 2.500000e-01 1.500000e+00 1.005580e-03 628 2.600000e-01 1.500000e+00 1.039886e-03 629 2.700000e-01 1.500000e+00 1.073746e-03 630 2.800000e-01 1.500000e+00 1.107162e-03 631 2.900000e-01 1.500000e+00 1.140133e-03 632 3.000000e-01 1.500000e+00 1.172663e-03 633 3.100000e-01 1.500000e+00 1.204750e-03 634 3.200000e-01 1.500000e+00 1.236397e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 635 3.300000e-01 1.500000e+00 1.267605e-03 636 3.400000e-01 1.500000e+00 1.298374e-03 637 3.500000e-01 1.500000e+00 1.328705e-03 638 3.600000e-01 1.500000e+00 1.358599e-03 639 3.700000e-01 1.500000e+00 1.388058e-03 640 3.800000e-01 1.500000e+00 1.417082e-03 641 3.900000e-01 1.500000e+00 1.445672e-03 642 4.000000e-01 1.500000e+00 1.473830e-03 643 4.100000e-01 1.500000e+00 1.501555e-03 644 4.200000e-01 1.500000e+00 1.528849e-03 645 4.300000e-01 1.500000e+00 1.555713e-03 646 4.400000e-01 1.500000e+00 1.582148e-03 647 4.500000e-01 1.500000e+00 1.608154e-03 648 4.600000e-01 1.500000e+00 1.633732e-03 649 4.700000e-01 1.500000e+00 1.658884e-03 650 4.800000e-01 1.500000e+00 1.683609e-03 651 4.900000e-01 1.500000e+00 1.707910e-03 652 5.000000e-01 1.500000e+00 1.731785e-03 653 5.100000e-01 1.500000e+00 1.755237e-03 654 5.200000e-01 1.500000e+00 1.778266e-03 655 5.300000e-01 1.500000e+00 1.800872e-03 656 5.400000e-01 1.500000e+00 1.823056e-03 657 5.500000e-01 1.500000e+00 1.844819e-03 658 5.600000e-01 1.500000e+00 1.866161e-03 659 5.700000e-01 1.500000e+00 1.887083e-03 660 5.800000e-01 1.500000e+00 1.907584e-03 661 5.900000e-01 1.500000e+00 1.927666e-03 662 6.000000e-01 1.500000e+00 1.947329e-03 663 6.100000e-01 1.500000e+00 1.966572e-03 664 6.200000e-01 1.500000e+00 1.985397e-03 665 6.300000e-01 1.500000e+00 2.003802e-03 666 6.400000e-01 1.500000e+00 2.021788e-03 667 6.500000e-01 1.500000e+00 2.039355e-03 668 6.600000e-01 1.500000e+00 2.056503e-03 669 6.700000e-01 1.500000e+00 2.073230e-03 670 6.800000e-01 1.500000e+00 2.089537e-03 671 6.900000e-01 1.500000e+00 2.105423e-03 672 7.000000e-01 1.500000e+00 2.120886e-03 673 7.100000e-01 1.500000e+00 2.135927e-03 674 7.200000e-01 1.500000e+00 2.150543e-03 675 7.300000e-01 1.500000e+00 2.164734e-03 676 7.400000e-01 1.500000e+00 2.178498e-03 677 7.500000e-01 1.500000e+00 2.191834e-03 678 7.600000e-01 1.500000e+00 2.204740e-03 679 7.700000e-01 1.500000e+00 2.217215e-03 680 7.800000e-01 1.500000e+00 2.229259e-03 681 7.900000e-01 1.500000e+00 2.240869e-03 682 8.000000e-01 1.500000e+00 2.252045e-03 683 8.100000e-01 1.500000e+00 2.262787e-03 684 8.200000e-01 1.500000e+00 2.273096e-03 685 8.300000e-01 1.500000e+00 2.282973e-03 686 8.400000e-01 1.500000e+00 2.292421e-03 687 8.500000e-01 1.500000e+00 2.301443e-03 688 8.600000e-01 1.500000e+00 2.310044e-03 689 8.700000e-01 1.500000e+00 2.318232e-03 690 8.800000e-01 1.500000e+00 2.326015e-03 691 8.900000e-01 1.500000e+00 2.333403e-03 692 9.000000e-01 1.500000e+00 2.340407e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 693 9.100000e-01 1.500000e+00 2.347041e-03 694 9.200000e-01 1.500000e+00 2.353320e-03 695 9.300000e-01 1.500000e+00 2.359259e-03 696 9.400000e-01 1.500000e+00 2.364875e-03 697 9.500000e-01 1.500000e+00 2.370185e-03 698 9.600000e-01 1.500000e+00 2.375207e-03 699 9.700000e-01 1.500000e+00 2.379958e-03 700 9.800000e-01 1.500000e+00 2.384455e-03 701 9.900000e-01 1.500000e+00 2.388716e-03 702 1.000000e+00 1.500000e+00 2.392756e-03 703 1.010000e+00 1.500000e+00 2.396592e-03 704 1.020000e+00 1.500000e+00 2.400238e-03 705 1.030000e+00 1.500000e+00 2.403708e-03 706 1.040000e+00 1.500000e+00 2.407016e-03 707 1.050000e+00 1.500000e+00 2.410173e-03 708 1.060000e+00 1.500000e+00 2.413191e-03 709 1.070000e+00 1.500000e+00 2.416080e-03 710 1.080000e+00 1.500000e+00 2.418851e-03 711 1.090000e+00 1.500000e+00 2.421511e-03 712 1.100000e+00 1.500000e+00 2.424070e-03 713 1.110000e+00 1.500000e+00 2.426537e-03 714 1.120000e+00 1.500000e+00 2.428918e-03 715 1.130000e+00 1.500000e+00 2.431220e-03 716 1.140000e+00 1.500000e+00 2.433449e-03 717 1.150000e+00 1.500000e+00 2.435610e-03 718 1.160000e+00 1.500000e+00 2.437708e-03 719 1.170000e+00 1.500000e+00 2.439749e-03 720 1.180000e+00 1.500000e+00 2.441738e-03 721 1.190000e+00 1.500000e+00 2.443678e-03 722 1.200000e+00 1.500000e+00 2.445575e-03 723 1.210000e+00 1.500000e+00 2.447435e-03 724 1.220000e+00 1.500000e+00 2.449265e-03 725 1.230000e+00 1.500000e+00 2.451077e-03 726 1.240000e+00 1.500000e+00 2.452889e-03 727 1.250000e+00 1.500000e+00 2.454747e-03 728 1.260000e+00 1.500000e+00 2.456784e-03 729 1.270000e+00 1.500000e+00 2.459531e-03 730 1.280000e+00 1.500000e+00 2.464487e-03 731 1.290000e+00 1.500000e+00 2.471352e-03 732 1.300000e+00 1.500000e+00 2.478654e-03 733 1.310000e+00 1.500000e+00 2.485967e-03 734 1.320000e+00 1.500000e+00 2.493192e-03 735 1.330000e+00 1.500000e+00 2.500301e-03 736 1.340000e+00 1.500000e+00 2.507287e-03 737 1.350000e+00 1.500000e+00 2.514149e-03 738 1.360000e+00 1.500000e+00 2.520891e-03 739 1.370000e+00 1.500000e+00 2.527516e-03 740 1.380000e+00 1.500000e+00 2.534028e-03 741 1.390000e+00 1.500000e+00 2.540432e-03 742 1.400000e+00 1.500000e+00 2.546732e-03 743 1.410000e+00 1.500000e+00 2.552931e-03 744 1.420000e+00 1.500000e+00 2.559034e-03 745 1.430000e+00 1.500000e+00 2.565051e-03 746 1.440000e+00 1.500000e+00 2.571058e-03 747 1.450000e+00 1.500000e+00 2.577049e-03 748 1.460000e+00 1.500000e+00 2.583003e-03 749 1.470000e+00 1.500000e+00 2.588905e-03 750 1.480000e+00 1.500000e+00 2.594746e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 751 1.490000e+00 1.500000e+00 2.600517e-03 752 1.500000e+00 1.500000e+00 2.606215e-03 753 1.510000e+00 1.500000e+00 2.611836e-03 754 1.520000e+00 1.500000e+00 2.617379e-03 755 1.530000e+00 1.500000e+00 2.622842e-03 756 1.540000e+00 1.500000e+00 2.628227e-03 757 1.550000e+00 1.500000e+00 2.633532e-03 758 1.560000e+00 1.500000e+00 2.638759e-03 759 1.570000e+00 1.500000e+00 2.643907e-03 760 1.580000e+00 1.500000e+00 2.648980e-03 761 1.590000e+00 1.500000e+00 2.653976e-03 762 1.600000e+00 1.500000e+00 2.658899e-03 763 1.610000e+00 1.500000e+00 2.663749e-03 764 1.620000e+00 1.500000e+00 2.668527e-03 765 1.630000e+00 1.500000e+00 2.673235e-03 766 1.640000e+00 1.500000e+00 2.677875e-03 767 1.650000e+00 1.500000e+00 2.682448e-03 768 1.660000e+00 1.500000e+00 2.686955e-03 769 1.670000e+00 1.500000e+00 2.691399e-03 770 1.680000e+00 1.500000e+00 2.695779e-03 771 1.690000e+00 1.500000e+00 2.700098e-03 772 1.700000e+00 1.500000e+00 2.704357e-03 773 1.710000e+00 1.500000e+00 2.708558e-03 774 1.720000e+00 1.500000e+00 2.712701e-03 775 1.730000e+00 1.500000e+00 2.716788e-03 776 1.740000e+00 1.500000e+00 2.720821e-03 777 1.750000e+00 1.500000e+00 2.724800e-03 778 1.760000e+00 1.500000e+00 2.728727e-03 779 1.770000e+00 1.500000e+00 2.732603e-03 780 1.780000e+00 1.500000e+00 2.736428e-03 781 1.790000e+00 1.500000e+00 2.740205e-03 782 1.800000e+00 1.500000e+00 2.743934e-03 783 1.810000e+00 1.500000e+00 2.747616e-03 784 1.820000e+00 1.500000e+00 2.751253e-03 785 1.830000e+00 1.500000e+00 2.754845e-03 786 1.840000e+00 1.500000e+00 2.758393e-03 787 1.850000e+00 1.500000e+00 2.761898e-03 788 1.860000e+00 1.500000e+00 2.765361e-03 789 1.870000e+00 1.500000e+00 2.768783e-03 790 1.880000e+00 1.500000e+00 2.772165e-03 791 1.890000e+00 1.500000e+00 2.775508e-03 792 1.900000e+00 1.500000e+00 2.778812e-03 793 1.910000e+00 1.500000e+00 2.782078e-03 794 1.920000e+00 1.500000e+00 2.785307e-03 795 1.930000e+00 1.500000e+00 2.788500e-03 796 1.940000e+00 1.500000e+00 2.791658e-03 797 1.950000e+00 1.500000e+00 2.794780e-03 798 1.960000e+00 1.500000e+00 2.797868e-03 799 1.970000e+00 1.500000e+00 2.800923e-03 800 1.980000e+00 1.500000e+00 2.803945e-03 801 1.990000e+00 1.500000e+00 2.806935e-03 802 2.000000e+00 1.500000e+00 2.809893e-03 803 2.010000e+00 1.500000e+00 2.812819e-03 804 2.020000e+00 1.500000e+00 2.815716e-03 805 2.030000e+00 1.500000e+00 2.818582e-03 806 2.040000e+00 1.500000e+00 2.821419e-03 807 2.050000e+00 1.500000e+00 2.824226e-03 808 2.060000e+00 1.500000e+00 2.827006e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 809 2.070000e+00 1.500000e+00 2.829757e-03 810 2.080000e+00 1.500000e+00 2.832481e-03 811 2.090000e+00 1.500000e+00 2.835178e-03 812 2.100000e+00 1.500000e+00 2.837849e-03 813 2.110000e+00 1.500000e+00 2.840493e-03 814 2.120000e+00 1.500000e+00 2.843112e-03 815 2.130000e+00 1.500000e+00 2.845705e-03 816 2.140000e+00 1.500000e+00 2.848273e-03 817 2.150000e+00 1.500000e+00 2.850817e-03 818 2.160000e+00 1.500000e+00 2.853336e-03 819 2.170000e+00 1.500000e+00 2.855832e-03 820 2.180000e+00 1.500000e+00 2.858305e-03 821 2.190000e+00 1.500000e+00 2.860754e-03 822 2.200000e+00 1.500000e+00 2.863180e-03 823 2.210000e+00 1.500000e+00 2.865584e-03 824 2.220000e+00 1.500000e+00 2.867966e-03 825 2.230000e+00 1.500000e+00 2.870326e-03 826 2.240000e+00 1.500000e+00 2.872665e-03 827 2.250000e+00 1.500000e+00 2.874982e-03 828 2.260000e+00 1.500000e+00 2.877278e-03 829 2.270000e+00 1.500000e+00 2.879553e-03 830 2.280000e+00 1.500000e+00 2.881808e-03 831 2.290000e+00 1.500000e+00 2.884043e-03 832 2.300000e+00 1.500000e+00 2.886258e-03 833 2.310000e+00 1.500000e+00 2.888453e-03 834 2.320000e+00 1.500000e+00 2.890629e-03 835 2.330000e+00 1.500000e+00 2.892785e-03 836 2.340000e+00 1.500000e+00 2.894923e-03 837 2.350000e+00 1.500000e+00 2.897041e-03 838 2.360000e+00 1.500000e+00 2.899141e-03 839 2.370000e+00 1.500000e+00 2.901223e-03 840 2.380000e+00 1.500000e+00 2.903286e-03 841 2.390000e+00 1.500000e+00 2.905331e-03 842 2.400000e+00 1.500000e+00 2.907359e-03 843 2.410000e+00 1.500000e+00 2.909369e-03 844 2.420000e+00 1.500000e+00 2.911361e-03 845 2.430000e+00 1.500000e+00 2.913337e-03 846 2.440000e+00 1.500000e+00 2.915295e-03 847 2.450000e+00 1.500000e+00 2.917236e-03 848 2.460000e+00 1.500000e+00 2.919161e-03 849 2.470000e+00 1.500000e+00 2.921069e-03 850 2.480000e+00 1.500000e+00 2.922960e-03 851 2.490000e+00 1.500000e+00 2.924836e-03 852 2.500000e+00 1.500000e+00 2.926695e-03 853 2.510000e+00 1.500000e+00 2.928538e-03 854 2.520000e+00 1.500000e+00 2.930366e-03 855 2.530000e+00 1.500000e+00 2.932178e-03 856 2.540000e+00 1.500000e+00 2.933975e-03 857 2.550000e+00 1.500000e+00 2.935756e-03 858 2.560000e+00 1.500000e+00 2.937522e-03 859 2.570000e+00 1.500000e+00 2.939273e-03 860 2.580000e+00 1.500000e+00 2.941009e-03 861 2.590000e+00 1.500000e+00 2.942731e-03 862 2.600000e+00 1.500000e+00 2.944437e-03 863 2.610000e+00 1.500000e+00 2.946130e-03 864 2.620000e+00 1.500000e+00 2.947808e-03 865 2.630000e+00 1.500000e+00 2.949472e-03 866 2.640000e+00 1.500000e+00 2.951123e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 867 2.650000e+00 1.500000e+00 2.952759e-03 868 2.660000e+00 1.500000e+00 2.954381e-03 869 2.670000e+00 1.500000e+00 2.955991e-03 870 2.680000e+00 1.500000e+00 2.957586e-03 871 2.690000e+00 1.500000e+00 2.959169e-03 872 2.700000e+00 1.500000e+00 2.960738e-03 873 2.710000e+00 1.500000e+00 2.962295e-03 874 2.720000e+00 1.500000e+00 2.963839e-03 875 2.730000e+00 1.500000e+00 2.965370e-03 876 2.740000e+00 1.500000e+00 2.966889e-03 877 2.750000e+00 1.500000e+00 2.968395e-03 878 2.760000e+00 1.500000e+00 2.969890e-03 879 2.770000e+00 1.500000e+00 2.971372e-03 880 2.780000e+00 1.500000e+00 2.972843e-03 881 2.790000e+00 1.500000e+00 2.974302e-03 882 2.800000e+00 1.500000e+00 2.975750e-03 883 2.810000e+00 1.500000e+00 2.977186e-03 884 2.820000e+00 1.500000e+00 2.978612e-03 885 2.830000e+00 1.500000e+00 2.980026e-03 886 2.840000e+00 1.500000e+00 2.981430e-03 887 2.850000e+00 1.500000e+00 2.982823e-03 888 2.860000e+00 1.500000e+00 2.984206e-03 889 2.870000e+00 1.500000e+00 2.985579e-03 890 2.880000e+00 1.500000e+00 2.986942e-03 891 2.890000e+00 1.500000e+00 2.988295e-03 892 2.900000e+00 1.500000e+00 2.989638e-03 893 2.910000e+00 1.500000e+00 2.990972e-03 894 2.920000e+00 1.500000e+00 2.992297e-03 895 2.930000e+00 1.500000e+00 2.993614e-03 896 2.940000e+00 1.500000e+00 2.994921e-03 897 2.950000e+00 1.500000e+00 2.996220e-03 898 2.960000e+00 1.500000e+00 2.997510e-03 899 2.970000e+00 1.500000e+00 2.998793e-03 900 2.980000e+00 1.500000e+00 3.000068e-03 901 2.990000e+00 1.500000e+00 3.001335e-03 902 3.000000e+00 1.500000e+00 3.002594e-03 903 0.000000e+00 2.000000e+00 -5.161596e-35 904 1.000000e-02 2.000000e+00 5.447069e-05 905 2.000000e-02 2.000000e+00 1.085482e-04 906 3.000000e-02 2.000000e+00 1.622332e-04 907 4.000000e-02 2.000000e+00 2.155265e-04 908 5.000000e-02 2.000000e+00 2.684288e-04 909 6.000000e-02 2.000000e+00 3.209408e-04 910 7.000000e-02 2.000000e+00 3.730632e-04 911 8.000000e-02 2.000000e+00 4.247969e-04 912 9.000000e-02 2.000000e+00 4.761425e-04 913 1.000000e-01 2.000000e+00 5.271007e-04 914 1.100000e-01 2.000000e+00 5.776722e-04 915 1.200000e-01 2.000000e+00 6.278579e-04 916 1.300000e-01 2.000000e+00 6.776583e-04 917 1.400000e-01 2.000000e+00 7.270742e-04 918 1.500000e-01 2.000000e+00 7.761064e-04 919 1.600000e-01 2.000000e+00 8.247555e-04 920 1.700000e-01 2.000000e+00 8.730222e-04 921 1.800000e-01 2.000000e+00 9.209073e-04 922 1.900000e-01 2.000000e+00 9.684115e-04 923 2.000000e-01 2.000000e+00 1.015535e-03 924 2.100000e-01 2.000000e+00 1.062280e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 925 2.200000e-01 2.000000e+00 1.108645e-03 926 2.300000e-01 2.000000e+00 1.154633e-03 927 2.400000e-01 2.000000e+00 1.200243e-03 928 2.500000e-01 2.000000e+00 1.245476e-03 929 2.600000e-01 2.000000e+00 1.290333e-03 930 2.700000e-01 2.000000e+00 1.334815e-03 931 2.800000e-01 2.000000e+00 1.378922e-03 932 2.900000e-01 2.000000e+00 1.422655e-03 933 3.000000e-01 2.000000e+00 1.466014e-03 934 3.100000e-01 2.000000e+00 1.509002e-03 935 3.200000e-01 2.000000e+00 1.551617e-03 936 3.300000e-01 2.000000e+00 1.593860e-03 937 3.400000e-01 2.000000e+00 1.635733e-03 938 3.500000e-01 2.000000e+00 1.677236e-03 939 3.600000e-01 2.000000e+00 1.718370e-03 940 3.700000e-01 2.000000e+00 1.759135e-03 941 3.800000e-01 2.000000e+00 1.799532e-03 942 3.900000e-01 2.000000e+00 1.839562e-03 943 4.000000e-01 2.000000e+00 1.879225e-03 944 4.100000e-01 2.000000e+00 1.918522e-03 945 4.200000e-01 2.000000e+00 1.957454e-03 946 4.300000e-01 2.000000e+00 1.996021e-03 947 4.400000e-01 2.000000e+00 2.034223e-03 948 4.500000e-01 2.000000e+00 2.072062e-03 949 4.600000e-01 2.000000e+00 2.109539e-03 950 4.700000e-01 2.000000e+00 2.146653e-03 951 4.800000e-01 2.000000e+00 2.183405e-03 952 4.900000e-01 2.000000e+00 2.219796e-03 953 5.000000e-01 2.000000e+00 2.255827e-03 954 5.100000e-01 2.000000e+00 2.291498e-03 955 5.200000e-01 2.000000e+00 2.326810e-03 956 5.300000e-01 2.000000e+00 2.361763e-03 957 5.400000e-01 2.000000e+00 2.396358e-03 958 5.500000e-01 2.000000e+00 2.430596e-03 959 5.600000e-01 2.000000e+00 2.464477e-03 960 5.700000e-01 2.000000e+00 2.498001e-03 961 5.800000e-01 2.000000e+00 2.531170e-03 962 5.900000e-01 2.000000e+00 2.563984e-03 963 6.000000e-01 2.000000e+00 2.596442e-03 964 6.100000e-01 2.000000e+00 2.628547e-03 965 6.200000e-01 2.000000e+00 2.660298e-03 966 6.300000e-01 2.000000e+00 2.691696e-03 967 6.400000e-01 2.000000e+00 2.722741e-03 968 6.500000e-01 2.000000e+00 2.753435e-03 969 6.600000e-01 2.000000e+00 2.783776e-03 970 6.700000e-01 2.000000e+00 2.813767e-03 971 6.800000e-01 2.000000e+00 2.843406e-03 972 6.900000e-01 2.000000e+00 2.872696e-03 973 7.000000e-01 2.000000e+00 2.901635e-03 974 7.100000e-01 2.000000e+00 2.930225e-03 975 7.200000e-01 2.000000e+00 2.958466e-03 976 7.300000e-01 2.000000e+00 2.986358e-03 977 7.400000e-01 2.000000e+00 3.013902e-03 978 7.500000e-01 2.000000e+00 3.041097e-03 979 7.600000e-01 2.000000e+00 3.067945e-03 980 7.700000e-01 2.000000e+00 3.094445e-03 981 7.800000e-01 2.000000e+00 3.120598e-03 982 7.900000e-01 2.000000e+00 3.146404e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 983 8.000000e-01 2.000000e+00 3.171862e-03 984 8.100000e-01 2.000000e+00 3.196974e-03 985 8.200000e-01 2.000000e+00 3.221739e-03 986 8.300000e-01 2.000000e+00 3.246156e-03 987 8.400000e-01 2.000000e+00 3.270227e-03 988 8.500000e-01 2.000000e+00 3.293951e-03 989 8.600000e-01 2.000000e+00 3.317328e-03 990 8.700000e-01 2.000000e+00 3.340357e-03 991 8.800000e-01 2.000000e+00 3.363039e-03 992 8.900000e-01 2.000000e+00 3.385372e-03 993 9.000000e-01 2.000000e+00 3.407357e-03 994 9.100000e-01 2.000000e+00 3.428993e-03 995 9.200000e-01 2.000000e+00 3.450278e-03 996 9.300000e-01 2.000000e+00 3.471213e-03 997 9.400000e-01 2.000000e+00 3.491796e-03 998 9.500000e-01 2.000000e+00 3.512027e-03 999 9.600000e-01 2.000000e+00 3.531903e-03 1000 9.700000e-01 2.000000e+00 3.551424e-03 1001 9.800000e-01 2.000000e+00 3.570588e-03 1002 9.900000e-01 2.000000e+00 3.589394e-03 1003 1.000000e+00 2.000000e+00 3.607838e-03 1004 1.010000e+00 2.000000e+00 3.625921e-03 1005 1.020000e+00 2.000000e+00 3.643637e-03 1006 1.030000e+00 2.000000e+00 3.660987e-03 1007 1.040000e+00 2.000000e+00 3.677966e-03 1008 1.050000e+00 2.000000e+00 3.694571e-03 1009 1.060000e+00 2.000000e+00 3.710799e-03 1010 1.070000e+00 2.000000e+00 3.726648e-03 1011 1.080000e+00 2.000000e+00 3.742112e-03 1012 1.090000e+00 2.000000e+00 3.757189e-03 1013 1.100000e+00 2.000000e+00 3.771875e-03 1014 1.110000e+00 2.000000e+00 3.786165e-03 1015 1.120000e+00 2.000000e+00 3.800056e-03 1016 1.130000e+00 2.000000e+00 3.813544e-03 1017 1.140000e+00 2.000000e+00 3.826625e-03 1018 1.150000e+00 2.000000e+00 3.839296e-03 1019 1.160000e+00 2.000000e+00 3.851554e-03 1020 1.170000e+00 2.000000e+00 3.863397e-03 1021 1.180000e+00 2.000000e+00 3.874824e-03 1022 1.190000e+00 2.000000e+00 3.885834e-03 1023 1.200000e+00 2.000000e+00 3.896427e-03 1024 1.210000e+00 2.000000e+00 3.906606e-03 1025 1.220000e+00 2.000000e+00 3.916373e-03 1026 1.230000e+00 2.000000e+00 3.925734e-03 1027 1.240000e+00 2.000000e+00 3.934693e-03 1028 1.250000e+00 2.000000e+00 3.943259e-03 1029 1.260000e+00 2.000000e+00 3.951441e-03 1030 1.270000e+00 2.000000e+00 3.959249e-03 1031 1.280000e+00 2.000000e+00 3.966693e-03 1032 1.290000e+00 2.000000e+00 3.973788e-03 1033 1.300000e+00 2.000000e+00 3.980545e-03 1034 1.310000e+00 2.000000e+00 3.986981e-03 1035 1.320000e+00 2.000000e+00 3.993113e-03 1036 1.330000e+00 2.000000e+00 3.998952e-03 1037 1.340000e+00 2.000000e+00 4.004515e-03 1038 1.350000e+00 2.000000e+00 4.009816e-03 1039 1.360000e+00 2.000000e+00 4.014871e-03 1040 1.370000e+00 2.000000e+00 4.019695e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1041 1.380000e+00 2.000000e+00 4.024302e-03 1042 1.390000e+00 2.000000e+00 4.028706e-03 1043 1.400000e+00 2.000000e+00 4.032923e-03 1044 1.410000e+00 2.000000e+00 4.036968e-03 1045 1.420000e+00 2.000000e+00 4.040857e-03 1046 1.430000e+00 2.000000e+00 4.044613e-03 1047 1.440000e+00 2.000000e+00 4.048267e-03 1048 1.450000e+00 2.000000e+00 4.051884e-03 1049 1.460000e+00 2.000000e+00 4.055647e-03 1050 1.470000e+00 2.000000e+00 4.060277e-03 1051 1.480000e+00 2.000000e+00 4.067422e-03 1052 1.490000e+00 2.000000e+00 4.076364e-03 1053 1.500000e+00 2.000000e+00 4.085669e-03 1054 1.510000e+00 2.000000e+00 4.094952e-03 1055 1.520000e+00 2.000000e+00 4.104118e-03 1056 1.530000e+00 2.000000e+00 4.113142e-03 1057 1.540000e+00 2.000000e+00 4.122017e-03 1058 1.550000e+00 2.000000e+00 4.130743e-03 1059 1.560000e+00 2.000000e+00 4.139324e-03 1060 1.570000e+00 2.000000e+00 4.147764e-03 1061 1.580000e+00 2.000000e+00 4.156070e-03 1062 1.590000e+00 2.000000e+00 4.164244e-03 1063 1.600000e+00 2.000000e+00 4.172293e-03 1064 1.610000e+00 2.000000e+00 4.180221e-03 1065 1.620000e+00 2.000000e+00 4.188032e-03 1066 1.630000e+00 2.000000e+00 4.195749e-03 1067 1.640000e+00 2.000000e+00 4.203454e-03 1068 1.650000e+00 2.000000e+00 4.211131e-03 1069 1.660000e+00 2.000000e+00 4.218755e-03 1070 1.670000e+00 2.000000e+00 4.226310e-03 1071 1.680000e+00 2.000000e+00 4.233785e-03 1072 1.690000e+00 2.000000e+00 4.241173e-03 1073 1.700000e+00 2.000000e+00 4.248469e-03 1074 1.710000e+00 2.000000e+00 4.255669e-03 1075 1.720000e+00 2.000000e+00 4.262772e-03 1076 1.730000e+00 2.000000e+00 4.269776e-03 1077 1.740000e+00 2.000000e+00 4.276683e-03 1078 1.750000e+00 2.000000e+00 4.283491e-03 1079 1.760000e+00 2.000000e+00 4.290202e-03 1080 1.770000e+00 2.000000e+00 4.296816e-03 1081 1.780000e+00 2.000000e+00 4.303336e-03 1082 1.790000e+00 2.000000e+00 4.309761e-03 1083 1.800000e+00 2.000000e+00 4.316095e-03 1084 1.810000e+00 2.000000e+00 4.322337e-03 1085 1.820000e+00 2.000000e+00 4.328491e-03 1086 1.830000e+00 2.000000e+00 4.334557e-03 1087 1.840000e+00 2.000000e+00 4.340537e-03 1088 1.850000e+00 2.000000e+00 4.346434e-03 1089 1.860000e+00 2.000000e+00 4.352248e-03 1090 1.870000e+00 2.000000e+00 4.357981e-03 1091 1.880000e+00 2.000000e+00 4.363635e-03 1092 1.890000e+00 2.000000e+00 4.369212e-03 1093 1.900000e+00 2.000000e+00 4.374713e-03 1094 1.910000e+00 2.000000e+00 4.380140e-03 1095 1.920000e+00 2.000000e+00 4.385494e-03 1096 1.930000e+00 2.000000e+00 4.390777e-03 1097 1.940000e+00 2.000000e+00 4.395991e-03 1098 1.950000e+00 2.000000e+00 4.401136e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1099 1.960000e+00 2.000000e+00 4.406214e-03 1100 1.970000e+00 2.000000e+00 4.411227e-03 1101 1.980000e+00 2.000000e+00 4.416176e-03 1102 1.990000e+00 2.000000e+00 4.421062e-03 1103 2.000000e+00 2.000000e+00 4.425886e-03 1104 2.010000e+00 2.000000e+00 4.430651e-03 1105 2.020000e+00 2.000000e+00 4.435356e-03 1106 2.030000e+00 2.000000e+00 4.440003e-03 1107 2.040000e+00 2.000000e+00 4.444594e-03 1108 2.050000e+00 2.000000e+00 4.449129e-03 1109 2.060000e+00 2.000000e+00 4.453609e-03 1110 2.070000e+00 2.000000e+00 4.458036e-03 1111 2.080000e+00 2.000000e+00 4.462411e-03 1112 2.090000e+00 2.000000e+00 4.466734e-03 1113 2.100000e+00 2.000000e+00 4.471007e-03 1114 2.110000e+00 2.000000e+00 4.475231e-03 1115 2.120000e+00 2.000000e+00 4.479405e-03 1116 2.130000e+00 2.000000e+00 4.483533e-03 1117 2.140000e+00 2.000000e+00 4.487613e-03 1118 2.150000e+00 2.000000e+00 4.491648e-03 1119 2.160000e+00 2.000000e+00 4.495637e-03 1120 2.170000e+00 2.000000e+00 4.499583e-03 1121 2.180000e+00 2.000000e+00 4.503484e-03 1122 2.190000e+00 2.000000e+00 4.507343e-03 1123 2.200000e+00 2.000000e+00 4.511160e-03 1124 2.210000e+00 2.000000e+00 4.514936e-03 1125 2.220000e+00 2.000000e+00 4.518671e-03 1126 2.230000e+00 2.000000e+00 4.522367e-03 1127 2.240000e+00 2.000000e+00 4.526023e-03 1128 2.250000e+00 2.000000e+00 4.529640e-03 1129 2.260000e+00 2.000000e+00 4.533220e-03 1130 2.270000e+00 2.000000e+00 4.536762e-03 1131 2.280000e+00 2.000000e+00 4.540267e-03 1132 2.290000e+00 2.000000e+00 4.543737e-03 1133 2.300000e+00 2.000000e+00 4.547170e-03 1134 2.310000e+00 2.000000e+00 4.550569e-03 1135 2.320000e+00 2.000000e+00 4.553933e-03 1136 2.330000e+00 2.000000e+00 4.557262e-03 1137 2.340000e+00 2.000000e+00 4.560559e-03 1138 2.350000e+00 2.000000e+00 4.563822e-03 1139 2.360000e+00 2.000000e+00 4.567053e-03 1140 2.370000e+00 2.000000e+00 4.570251e-03 1141 2.380000e+00 2.000000e+00 4.573418e-03 1142 2.390000e+00 2.000000e+00 4.576553e-03 1143 2.400000e+00 2.000000e+00 4.579658e-03 1144 2.410000e+00 2.000000e+00 4.582732e-03 1145 2.420000e+00 2.000000e+00 4.585776e-03 1146 2.430000e+00 2.000000e+00 4.588790e-03 1147 2.440000e+00 2.000000e+00 4.591776e-03 1148 2.450000e+00 2.000000e+00 4.594732e-03 1149 2.460000e+00 2.000000e+00 4.597659e-03 1150 2.470000e+00 2.000000e+00 4.600559e-03 1151 2.480000e+00 2.000000e+00 4.603430e-03 1152 2.490000e+00 2.000000e+00 4.606274e-03 1153 2.500000e+00 2.000000e+00 4.609091e-03 1154 2.510000e+00 2.000000e+00 4.611881e-03 1155 2.520000e+00 2.000000e+00 4.614644e-03 1156 2.530000e+00 2.000000e+00 4.617380e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1157 2.540000e+00 2.000000e+00 4.620091e-03 1158 2.550000e+00 2.000000e+00 4.622776e-03 1159 2.560000e+00 2.000000e+00 4.625435e-03 1160 2.570000e+00 2.000000e+00 4.628070e-03 1161 2.580000e+00 2.000000e+00 4.630679e-03 1162 2.590000e+00 2.000000e+00 4.633263e-03 1163 2.600000e+00 2.000000e+00 4.635823e-03 1164 2.610000e+00 2.000000e+00 4.638359e-03 1165 2.620000e+00 2.000000e+00 4.640871e-03 1166 2.630000e+00 2.000000e+00 4.643359e-03 1167 2.640000e+00 2.000000e+00 4.645824e-03 1168 2.650000e+00 2.000000e+00 4.648266e-03 1169 2.660000e+00 2.000000e+00 4.650684e-03 1170 2.670000e+00 2.000000e+00 4.653080e-03 1171 2.680000e+00 2.000000e+00 4.655453e-03 1172 2.690000e+00 2.000000e+00 4.657803e-03 1173 2.700000e+00 2.000000e+00 4.660132e-03 1174 2.710000e+00 2.000000e+00 4.662439e-03 1175 2.720000e+00 2.000000e+00 4.664723e-03 1176 2.730000e+00 2.000000e+00 4.666987e-03 1177 2.740000e+00 2.000000e+00 4.669229e-03 1178 2.750000e+00 2.000000e+00 4.671450e-03 1179 2.760000e+00 2.000000e+00 4.673650e-03 1180 2.770000e+00 2.000000e+00 4.675830e-03 1181 2.780000e+00 2.000000e+00 4.677989e-03 1182 2.790000e+00 2.000000e+00 4.680128e-03 1183 2.800000e+00 2.000000e+00 4.682247e-03 1184 2.810000e+00 2.000000e+00 4.684346e-03 1185 2.820000e+00 2.000000e+00 4.686426e-03 1186 2.830000e+00 2.000000e+00 4.688486e-03 1187 2.840000e+00 2.000000e+00 4.690527e-03 1188 2.850000e+00 2.000000e+00 4.692549e-03 1189 2.860000e+00 2.000000e+00 4.694552e-03 1190 2.870000e+00 2.000000e+00 4.696537e-03 1191 2.880000e+00 2.000000e+00 4.698504e-03 1192 2.890000e+00 2.000000e+00 4.700452e-03 1193 2.900000e+00 2.000000e+00 4.702383e-03 1194 2.910000e+00 2.000000e+00 4.704297e-03 1195 2.920000e+00 2.000000e+00 4.706193e-03 1196 2.930000e+00 2.000000e+00 4.708071e-03 1197 2.940000e+00 2.000000e+00 4.709933e-03 1198 2.950000e+00 2.000000e+00 4.711779e-03 1199 2.960000e+00 2.000000e+00 4.713608e-03 1200 2.970000e+00 2.000000e+00 4.715421e-03 1201 2.980000e+00 2.000000e+00 4.717218e-03 1202 2.990000e+00 2.000000e+00 4.719000e-03 1203 3.000000e+00 2.000000e+00 4.720766e-03 1204 0.000000e+00 2.500000e+00 -5.161596e-35 1205 1.000000e-02 2.500000e+00 5.946712e-05 1206 2.000000e-02 2.500000e+00 1.186031e-04 1207 3.000000e-02 2.500000e+00 1.774084e-04 1208 4.000000e-02 2.500000e+00 2.358836e-04 1209 5.000000e-02 2.500000e+00 2.940291e-04 1210 6.000000e-02 2.500000e+00 3.518455e-04 1211 7.000000e-02 2.500000e+00 4.093333e-04 1212 8.000000e-02 2.500000e+00 4.664929e-04 1213 9.000000e-02 2.500000e+00 5.233249e-04 1214 1.000000e-01 2.500000e+00 5.798297e-04 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1215 1.100000e-01 2.500000e+00 6.360079e-04 1216 1.200000e-01 2.500000e+00 6.918600e-04 1217 1.300000e-01 2.500000e+00 7.473864e-04 1218 1.400000e-01 2.500000e+00 8.025876e-04 1219 1.500000e-01 2.500000e+00 8.574642e-04 1220 1.600000e-01 2.500000e+00 9.120167e-04 1221 1.700000e-01 2.500000e+00 9.662454e-04 1222 1.800000e-01 2.500000e+00 1.020151e-03 1223 1.900000e-01 2.500000e+00 1.073734e-03 1224 2.000000e-01 2.500000e+00 1.126995e-03 1225 2.100000e-01 2.500000e+00 1.179933e-03 1226 2.200000e-01 2.500000e+00 1.232551e-03 1227 2.300000e-01 2.500000e+00 1.284848e-03 1228 2.400000e-01 2.500000e+00 1.336825e-03 1229 2.500000e-01 2.500000e+00 1.388482e-03 1230 2.600000e-01 2.500000e+00 1.439819e-03 1231 2.700000e-01 2.500000e+00 1.490838e-03 1232 2.800000e-01 2.500000e+00 1.541538e-03 1233 2.900000e-01 2.500000e+00 1.591921e-03 1234 3.000000e-01 2.500000e+00 1.641986e-03 1235 3.100000e-01 2.500000e+00 1.691734e-03 1236 3.200000e-01 2.500000e+00 1.741166e-03 1237 3.300000e-01 2.500000e+00 1.790282e-03 1238 3.400000e-01 2.500000e+00 1.839082e-03 1239 3.500000e-01 2.500000e+00 1.887567e-03 1240 3.600000e-01 2.500000e+00 1.935738e-03 1241 3.700000e-01 2.500000e+00 1.983595e-03 1242 3.800000e-01 2.500000e+00 2.031138e-03 1243 3.900000e-01 2.500000e+00 2.078367e-03 1244 4.000000e-01 2.500000e+00 2.125285e-03 1245 4.100000e-01 2.500000e+00 2.171889e-03 1246 4.200000e-01 2.500000e+00 2.218182e-03 1247 4.300000e-01 2.500000e+00 2.264164e-03 1248 4.400000e-01 2.500000e+00 2.309835e-03 1249 4.500000e-01 2.500000e+00 2.355195e-03 1250 4.600000e-01 2.500000e+00 2.400246e-03 1251 4.700000e-01 2.500000e+00 2.444987e-03 1252 4.800000e-01 2.500000e+00 2.489418e-03 1253 4.900000e-01 2.500000e+00 2.533542e-03 1254 5.000000e-01 2.500000e+00 2.577357e-03 1255 5.100000e-01 2.500000e+00 2.620864e-03 1256 5.200000e-01 2.500000e+00 2.664064e-03 1257 5.300000e-01 2.500000e+00 2.706957e-03 1258 5.400000e-01 2.500000e+00 2.749544e-03 1259 5.500000e-01 2.500000e+00 2.791825e-03 1260 5.600000e-01 2.500000e+00 2.833800e-03 1261 5.700000e-01 2.500000e+00 2.875470e-03 1262 5.800000e-01 2.500000e+00 2.916836e-03 1263 5.900000e-01 2.500000e+00 2.957897e-03 1264 6.000000e-01 2.500000e+00 2.998654e-03 1265 6.100000e-01 2.500000e+00 3.039109e-03 1266 6.200000e-01 2.500000e+00 3.079260e-03 1267 6.300000e-01 2.500000e+00 3.119108e-03 1268 6.400000e-01 2.500000e+00 3.158655e-03 1269 6.500000e-01 2.500000e+00 3.197899e-03 1270 6.600000e-01 2.500000e+00 3.236843e-03 1271 6.700000e-01 2.500000e+00 3.275485e-03 1272 6.800000e-01 2.500000e+00 3.313827e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1273 6.900000e-01 2.500000e+00 3.351869e-03 1274 7.000000e-01 2.500000e+00 3.389611e-03 1275 7.100000e-01 2.500000e+00 3.427054e-03 1276 7.200000e-01 2.500000e+00 3.464198e-03 1277 7.300000e-01 2.500000e+00 3.501044e-03 1278 7.400000e-01 2.500000e+00 3.537591e-03 1279 7.500000e-01 2.500000e+00 3.573841e-03 1280 7.600000e-01 2.500000e+00 3.609793e-03 1281 7.700000e-01 2.500000e+00 3.645448e-03 1282 7.800000e-01 2.500000e+00 3.680807e-03 1283 7.900000e-01 2.500000e+00 3.715869e-03 1284 8.000000e-01 2.500000e+00 3.750635e-03 1285 8.100000e-01 2.500000e+00 3.785106e-03 1286 8.200000e-01 2.500000e+00 3.819282e-03 1287 8.300000e-01 2.500000e+00 3.853162e-03 1288 8.400000e-01 2.500000e+00 3.886749e-03 1289 8.500000e-01 2.500000e+00 3.920040e-03 1290 8.600000e-01 2.500000e+00 3.953038e-03 1291 8.700000e-01 2.500000e+00 3.985743e-03 1292 8.800000e-01 2.500000e+00 4.018154e-03 1293 8.900000e-01 2.500000e+00 4.050272e-03 1294 9.000000e-01 2.500000e+00 4.082097e-03 1295 9.100000e-01 2.500000e+00 4.113630e-03 1296 9.200000e-01 2.500000e+00 4.144870e-03 1297 9.300000e-01 2.500000e+00 4.175819e-03 1298 9.400000e-01 2.500000e+00 4.206476e-03 1299 9.500000e-01 2.500000e+00 4.236841e-03 1300 9.600000e-01 2.500000e+00 4.266916e-03 1301 9.700000e-01 2.500000e+00 4.296699e-03 1302 9.800000e-01 2.500000e+00 4.326191e-03 1303 9.900000e-01 2.500000e+00 4.355392e-03 1304 1.000000e+00 2.500000e+00 4.384303e-03 1305 1.010000e+00 2.500000e+00 4.412923e-03 1306 1.020000e+00 2.500000e+00 4.441253e-03 1307 1.030000e+00 2.500000e+00 4.469292e-03 1308 1.040000e+00 2.500000e+00 4.497041e-03 1309 1.050000e+00 2.500000e+00 4.524500e-03 1310 1.060000e+00 2.500000e+00 4.551669e-03 1311 1.070000e+00 2.500000e+00 4.578547e-03 1312 1.080000e+00 2.500000e+00 4.605135e-03 1313 1.090000e+00 2.500000e+00 4.631433e-03 1314 1.100000e+00 2.500000e+00 4.657440e-03 1315 1.110000e+00 2.500000e+00 4.683156e-03 1316 1.120000e+00 2.500000e+00 4.708581e-03 1317 1.130000e+00 2.500000e+00 4.733715e-03 1318 1.140000e+00 2.500000e+00 4.758557e-03 1319 1.150000e+00 2.500000e+00 4.783107e-03 1320 1.160000e+00 2.500000e+00 4.807365e-03 1321 1.170000e+00 2.500000e+00 4.831329e-03 1322 1.180000e+00 2.500000e+00 4.855000e-03 1323 1.190000e+00 2.500000e+00 4.878377e-03 1324 1.200000e+00 2.500000e+00 4.901458e-03 1325 1.210000e+00 2.500000e+00 4.924244e-03 1326 1.220000e+00 2.500000e+00 4.946733e-03 1327 1.230000e+00 2.500000e+00 4.968923e-03 1328 1.240000e+00 2.500000e+00 4.990815e-03 1329 1.250000e+00 2.500000e+00 5.012406e-03 1330 1.260000e+00 2.500000e+00 5.033696e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1331 1.270000e+00 2.500000e+00 5.054682e-03 1332 1.280000e+00 2.500000e+00 5.075363e-03 1333 1.290000e+00 2.500000e+00 5.095737e-03 1334 1.300000e+00 2.500000e+00 5.115801e-03 1335 1.310000e+00 2.500000e+00 5.135555e-03 1336 1.320000e+00 2.500000e+00 5.154995e-03 1337 1.330000e+00 2.500000e+00 5.174118e-03 1338 1.340000e+00 2.500000e+00 5.192922e-03 1339 1.350000e+00 2.500000e+00 5.211404e-03 1340 1.360000e+00 2.500000e+00 5.229560e-03 1341 1.370000e+00 2.500000e+00 5.247387e-03 1342 1.380000e+00 2.500000e+00 5.264881e-03 1343 1.390000e+00 2.500000e+00 5.282039e-03 1344 1.400000e+00 2.500000e+00 5.298856e-03 1345 1.410000e+00 2.500000e+00 5.315327e-03 1346 1.420000e+00 2.500000e+00 5.331449e-03 1347 1.430000e+00 2.500000e+00 5.347217e-03 1348 1.440000e+00 2.500000e+00 5.362626e-03 1349 1.450000e+00 2.500000e+00 5.377671e-03 1350 1.460000e+00 2.500000e+00 5.392347e-03 1351 1.470000e+00 2.500000e+00 5.406651e-03 1352 1.480000e+00 2.500000e+00 5.420577e-03 1353 1.490000e+00 2.500000e+00 5.434122e-03 1354 1.500000e+00 2.500000e+00 5.447281e-03 1355 1.510000e+00 2.500000e+00 5.460052e-03 1356 1.520000e+00 2.500000e+00 5.472432e-03 1357 1.530000e+00 2.500000e+00 5.484420e-03 1358 1.540000e+00 2.500000e+00 5.496019e-03 1359 1.550000e+00 2.500000e+00 5.507226e-03 1360 1.560000e+00 2.500000e+00 5.518042e-03 1361 1.570000e+00 2.500000e+00 5.528470e-03 1362 1.580000e+00 2.500000e+00 5.538514e-03 1363 1.590000e+00 2.500000e+00 5.548178e-03 1364 1.600000e+00 2.500000e+00 5.557470e-03 1365 1.610000e+00 2.500000e+00 5.566399e-03 1366 1.620000e+00 2.500000e+00 5.574974e-03 1367 1.630000e+00 2.500000e+00 5.583209e-03 1368 1.640000e+00 2.500000e+00 5.591122e-03 1369 1.650000e+00 2.500000e+00 5.598739e-03 1370 1.660000e+00 2.500000e+00 5.606107e-03 1371 1.670000e+00 2.500000e+00 5.613336e-03 1372 1.680000e+00 2.500000e+00 5.620810e-03 1373 1.690000e+00 2.500000e+00 5.629951e-03 1374 1.700000e+00 2.500000e+00 5.641662e-03 1375 1.710000e+00 2.500000e+00 5.654183e-03 1376 1.720000e+00 2.500000e+00 5.666701e-03 1377 1.730000e+00 2.500000e+00 5.679034e-03 1378 1.740000e+00 2.500000e+00 5.691135e-03 1379 1.750000e+00 2.500000e+00 5.702995e-03 1380 1.760000e+00 2.500000e+00 5.714613e-03 1381 1.770000e+00 2.500000e+00 5.725996e-03 1382 1.780000e+00 2.500000e+00 5.737151e-03 1383 1.790000e+00 2.500000e+00 5.748087e-03 1384 1.800000e+00 2.500000e+00 5.758813e-03 1385 1.810000e+00 2.500000e+00 5.769336e-03 1386 1.820000e+00 2.500000e+00 5.779665e-03 1387 1.830000e+00 2.500000e+00 5.789807e-03 1388 1.840000e+00 2.500000e+00 5.799782e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1389 1.850000e+00 2.500000e+00 5.809689e-03 1390 1.860000e+00 2.500000e+00 5.819520e-03 1391 1.870000e+00 2.500000e+00 5.829248e-03 1392 1.880000e+00 2.500000e+00 5.838856e-03 1393 1.890000e+00 2.500000e+00 5.848335e-03 1394 1.900000e+00 2.500000e+00 5.857678e-03 1395 1.910000e+00 2.500000e+00 5.866880e-03 1396 1.920000e+00 2.500000e+00 5.875940e-03 1397 1.930000e+00 2.500000e+00 5.884857e-03 1398 1.940000e+00 2.500000e+00 5.893633e-03 1399 1.950000e+00 2.500000e+00 5.902268e-03 1400 1.960000e+00 2.500000e+00 5.910764e-03 1401 1.970000e+00 2.500000e+00 5.919123e-03 1402 1.980000e+00 2.500000e+00 5.927349e-03 1403 1.990000e+00 2.500000e+00 5.935443e-03 1404 2.000000e+00 2.500000e+00 5.943408e-03 1405 2.010000e+00 2.500000e+00 5.951248e-03 1406 2.020000e+00 2.500000e+00 5.958964e-03 1407 2.030000e+00 2.500000e+00 5.966561e-03 1408 2.040000e+00 2.500000e+00 5.974040e-03 1409 2.050000e+00 2.500000e+00 5.981404e-03 1410 2.060000e+00 2.500000e+00 5.988656e-03 1411 2.070000e+00 2.500000e+00 5.995800e-03 1412 2.080000e+00 2.500000e+00 6.002836e-03 1413 2.090000e+00 2.500000e+00 6.009769e-03 1414 2.100000e+00 2.500000e+00 6.016600e-03 1415 2.110000e+00 2.500000e+00 6.023333e-03 1416 2.120000e+00 2.500000e+00 6.029968e-03 1417 2.130000e+00 2.500000e+00 6.036510e-03 1418 2.140000e+00 2.500000e+00 6.042959e-03 1419 2.150000e+00 2.500000e+00 6.049318e-03 1420 2.160000e+00 2.500000e+00 6.055590e-03 1421 2.170000e+00 2.500000e+00 6.061775e-03 1422 2.180000e+00 2.500000e+00 6.067877e-03 1423 2.190000e+00 2.500000e+00 6.073897e-03 1424 2.200000e+00 2.500000e+00 6.079837e-03 1425 2.210000e+00 2.500000e+00 6.085699e-03 1426 2.220000e+00 2.500000e+00 6.091484e-03 1427 2.230000e+00 2.500000e+00 6.097195e-03 1428 2.240000e+00 2.500000e+00 6.102832e-03 1429 2.250000e+00 2.500000e+00 6.108398e-03 1430 2.260000e+00 2.500000e+00 6.113893e-03 1431 2.270000e+00 2.500000e+00 6.119320e-03 1432 2.280000e+00 2.500000e+00 6.124681e-03 1433 2.290000e+00 2.500000e+00 6.129975e-03 1434 2.300000e+00 2.500000e+00 6.135205e-03 1435 2.310000e+00 2.500000e+00 6.140372e-03 1436 2.320000e+00 2.500000e+00 6.145477e-03 1437 2.330000e+00 2.500000e+00 6.150522e-03 1438 2.340000e+00 2.500000e+00 6.155508e-03 1439 2.350000e+00 2.500000e+00 6.160435e-03 1440 2.360000e+00 2.500000e+00 6.165305e-03 1441 2.370000e+00 2.500000e+00 6.170119e-03 1442 2.380000e+00 2.500000e+00 6.174879e-03 1443 2.390000e+00 2.500000e+00 6.179584e-03 1444 2.400000e+00 2.500000e+00 6.184237e-03 1445 2.410000e+00 2.500000e+00 6.188838e-03 1446 2.420000e+00 2.500000e+00 6.193388e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1447 2.430000e+00 2.500000e+00 6.197887e-03 1448 2.440000e+00 2.500000e+00 6.202338e-03 1449 2.450000e+00 2.500000e+00 6.206740e-03 1450 2.460000e+00 2.500000e+00 6.211094e-03 1451 2.470000e+00 2.500000e+00 6.215402e-03 1452 2.480000e+00 2.500000e+00 6.219664e-03 1453 2.490000e+00 2.500000e+00 6.223881e-03 1454 2.500000e+00 2.500000e+00 6.228053e-03 1455 2.510000e+00 2.500000e+00 6.232181e-03 1456 2.520000e+00 2.500000e+00 6.236266e-03 1457 2.530000e+00 2.500000e+00 6.240309e-03 1458 2.540000e+00 2.500000e+00 6.244310e-03 1459 2.550000e+00 2.500000e+00 6.248270e-03 1460 2.560000e+00 2.500000e+00 6.252189e-03 1461 2.570000e+00 2.500000e+00 6.256068e-03 1462 2.580000e+00 2.500000e+00 6.259908e-03 1463 2.590000e+00 2.500000e+00 6.263709e-03 1464 2.600000e+00 2.500000e+00 6.267471e-03 1465 2.610000e+00 2.500000e+00 6.271196e-03 1466 2.620000e+00 2.500000e+00 6.274883e-03 1467 2.630000e+00 2.500000e+00 6.278534e-03 1468 2.640000e+00 2.500000e+00 6.282148e-03 1469 2.650000e+00 2.500000e+00 6.285726e-03 1470 2.660000e+00 2.500000e+00 6.289269e-03 1471 2.670000e+00 2.500000e+00 6.292777e-03 1472 2.680000e+00 2.500000e+00 6.296250e-03 1473 2.690000e+00 2.500000e+00 6.299689e-03 1474 2.700000e+00 2.500000e+00 6.303095e-03 1475 2.710000e+00 2.500000e+00 6.306467e-03 1476 2.720000e+00 2.500000e+00 6.309806e-03 1477 2.730000e+00 2.500000e+00 6.313112e-03 1478 2.740000e+00 2.500000e+00 6.316386e-03 1479 2.750000e+00 2.500000e+00 6.319628e-03 1480 2.760000e+00 2.500000e+00 6.322839e-03 1481 2.770000e+00 2.500000e+00 6.326018e-03 1482 2.780000e+00 2.500000e+00 6.329167e-03 1483 2.790000e+00 2.500000e+00 6.332284e-03 1484 2.800000e+00 2.500000e+00 6.335372e-03 1485 2.810000e+00 2.500000e+00 6.338430e-03 1486 2.820000e+00 2.500000e+00 6.341457e-03 1487 2.830000e+00 2.500000e+00 6.344456e-03 1488 2.840000e+00 2.500000e+00 6.347426e-03 1489 2.850000e+00 2.500000e+00 6.350366e-03 1490 2.860000e+00 2.500000e+00 6.353279e-03 1491 2.870000e+00 2.500000e+00 6.356163e-03 1492 2.880000e+00 2.500000e+00 6.359019e-03 1493 2.890000e+00 2.500000e+00 6.361847e-03 1494 2.900000e+00 2.500000e+00 6.364648e-03 1495 2.910000e+00 2.500000e+00 6.367422e-03 1496 2.920000e+00 2.500000e+00 6.370169e-03 1497 2.930000e+00 2.500000e+00 6.372890e-03 1498 2.940000e+00 2.500000e+00 6.375584e-03 1499 2.950000e+00 2.500000e+00 6.378252e-03 1500 2.960000e+00 2.500000e+00 6.380895e-03 1501 2.970000e+00 2.500000e+00 6.383512e-03 1502 2.980000e+00 2.500000e+00 6.386104e-03 1503 2.990000e+00 2.500000e+00 6.388671e-03 1504 3.000000e+00 2.500000e+00 6.391213e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1505 0.000000e+00 3.000000e+00 -5.161596e-35 1506 1.000000e-02 3.000000e+00 6.230785e-05 1507 2.000000e-02 3.000000e+00 1.243329e-04 1508 3.000000e-02 3.000000e+00 1.860755e-04 1509 4.000000e-02 3.000000e+00 2.475361e-04 1510 5.000000e-02 3.000000e+00 3.087150e-04 1511 6.000000e-02 3.000000e+00 3.696125e-04 1512 7.000000e-02 3.000000e+00 4.302290e-04 1513 8.000000e-02 3.000000e+00 4.905649e-04 1514 9.000000e-02 3.000000e+00 5.506206e-04 1515 1.000000e-01 3.000000e+00 6.103963e-04 1516 1.100000e-01 3.000000e+00 6.698925e-04 1517 1.200000e-01 3.000000e+00 7.291094e-04 1518 1.300000e-01 3.000000e+00 7.880476e-04 1519 1.400000e-01 3.000000e+00 8.467072e-04 1520 1.500000e-01 3.000000e+00 9.050888e-04 1521 1.600000e-01 3.000000e+00 9.631925e-04 1522 1.700000e-01 3.000000e+00 1.021019e-03 1523 1.800000e-01 3.000000e+00 1.078568e-03 1524 1.900000e-01 3.000000e+00 1.135841e-03 1525 2.000000e-01 3.000000e+00 1.192837e-03 1526 2.100000e-01 3.000000e+00 1.249557e-03 1527 2.200000e-01 3.000000e+00 1.306002e-03 1528 2.300000e-01 3.000000e+00 1.362171e-03 1529 2.400000e-01 3.000000e+00 1.418065e-03 1530 2.500000e-01 3.000000e+00 1.473685e-03 1531 2.600000e-01 3.000000e+00 1.529030e-03 1532 2.700000e-01 3.000000e+00 1.584102e-03 1533 2.800000e-01 3.000000e+00 1.638899e-03 1534 2.900000e-01 3.000000e+00 1.693424e-03 1535 3.000000e-01 3.000000e+00 1.747676e-03 1536 3.100000e-01 3.000000e+00 1.801655e-03 1537 3.200000e-01 3.000000e+00 1.855362e-03 1538 3.300000e-01 3.000000e+00 1.908798e-03 1539 3.400000e-01 3.000000e+00 1.961961e-03 1540 3.500000e-01 3.000000e+00 2.014854e-03 1541 3.600000e-01 3.000000e+00 2.067476e-03 1542 3.700000e-01 3.000000e+00 2.119827e-03 1543 3.800000e-01 3.000000e+00 2.171908e-03 1544 3.900000e-01 3.000000e+00 2.223719e-03 1545 4.000000e-01 3.000000e+00 2.275261e-03 1546 4.100000e-01 3.000000e+00 2.326534e-03 1547 4.200000e-01 3.000000e+00 2.377538e-03 1548 4.300000e-01 3.000000e+00 2.428273e-03 1549 4.400000e-01 3.000000e+00 2.478740e-03 1550 4.500000e-01 3.000000e+00 2.528940e-03 1551 4.600000e-01 3.000000e+00 2.578872e-03 1552 4.700000e-01 3.000000e+00 2.628537e-03 1553 4.800000e-01 3.000000e+00 2.677935e-03 1554 4.900000e-01 3.000000e+00 2.727067e-03 1555 5.000000e-01 3.000000e+00 2.775932e-03 1556 5.100000e-01 3.000000e+00 2.824532e-03 1557 5.200000e-01 3.000000e+00 2.872866e-03 1558 5.300000e-01 3.000000e+00 2.920936e-03 1559 5.400000e-01 3.000000e+00 2.968740e-03 1560 5.500000e-01 3.000000e+00 3.016280e-03 1561 5.600000e-01 3.000000e+00 3.063555e-03 1562 5.700000e-01 3.000000e+00 3.110567e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1563 5.800000e-01 3.000000e+00 3.157315e-03 1564 5.900000e-01 3.000000e+00 3.203801e-03 1565 6.000000e-01 3.000000e+00 3.250023e-03 1566 6.100000e-01 3.000000e+00 3.295982e-03 1567 6.200000e-01 3.000000e+00 3.341680e-03 1568 6.300000e-01 3.000000e+00 3.387115e-03 1569 6.400000e-01 3.000000e+00 3.432289e-03 1570 6.500000e-01 3.000000e+00 3.477202e-03 1571 6.600000e-01 3.000000e+00 3.521853e-03 1572 6.700000e-01 3.000000e+00 3.566244e-03 1573 6.800000e-01 3.000000e+00 3.610375e-03 1574 6.900000e-01 3.000000e+00 3.654246e-03 1575 7.000000e-01 3.000000e+00 3.697856e-03 1576 7.100000e-01 3.000000e+00 3.741208e-03 1577 7.200000e-01 3.000000e+00 3.784300e-03 1578 7.300000e-01 3.000000e+00 3.827134e-03 1579 7.400000e-01 3.000000e+00 3.869709e-03 1580 7.500000e-01 3.000000e+00 3.912026e-03 1581 7.600000e-01 3.000000e+00 3.954085e-03 1582 7.700000e-01 3.000000e+00 3.995886e-03 1583 7.800000e-01 3.000000e+00 4.037430e-03 1584 7.900000e-01 3.000000e+00 4.078717e-03 1585 8.000000e-01 3.000000e+00 4.119748e-03 1586 8.100000e-01 3.000000e+00 4.160522e-03 1587 8.200000e-01 3.000000e+00 4.201039e-03 1588 8.300000e-01 3.000000e+00 4.241302e-03 1589 8.400000e-01 3.000000e+00 4.281308e-03 1590 8.500000e-01 3.000000e+00 4.321060e-03 1591 8.600000e-01 3.000000e+00 4.360556e-03 1592 8.700000e-01 3.000000e+00 4.399798e-03 1593 8.800000e-01 3.000000e+00 4.438785e-03 1594 8.900000e-01 3.000000e+00 4.477519e-03 1595 9.000000e-01 3.000000e+00 4.515998e-03 1596 9.100000e-01 3.000000e+00 4.554224e-03 1597 9.200000e-01 3.000000e+00 4.592197e-03 1598 9.300000e-01 3.000000e+00 4.629917e-03 1599 9.400000e-01 3.000000e+00 4.667384e-03 1600 9.500000e-01 3.000000e+00 4.704598e-03 1601 9.600000e-01 3.000000e+00 4.741561e-03 1602 9.700000e-01 3.000000e+00 4.778271e-03 1603 9.800000e-01 3.000000e+00 4.814730e-03 1604 9.900000e-01 3.000000e+00 4.850938e-03 1605 1.000000e+00 3.000000e+00 4.886894e-03 1606 1.010000e+00 3.000000e+00 4.922599e-03 1607 1.020000e+00 3.000000e+00 4.958054e-03 1608 1.030000e+00 3.000000e+00 4.993258e-03 1609 1.040000e+00 3.000000e+00 5.028213e-03 1610 1.050000e+00 3.000000e+00 5.062917e-03 1611 1.060000e+00 3.000000e+00 5.097371e-03 1612 1.070000e+00 3.000000e+00 5.131576e-03 1613 1.080000e+00 3.000000e+00 5.165532e-03 1614 1.090000e+00 3.000000e+00 5.199238e-03 1615 1.100000e+00 3.000000e+00 5.232696e-03 1616 1.110000e+00 3.000000e+00 5.265905e-03 1617 1.120000e+00 3.000000e+00 5.298866e-03 1618 1.130000e+00 3.000000e+00 5.331579e-03 1619 1.140000e+00 3.000000e+00 5.364043e-03 1620 1.150000e+00 3.000000e+00 5.396259e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1621 1.160000e+00 3.000000e+00 5.428228e-03 1622 1.170000e+00 3.000000e+00 5.459949e-03 1623 1.180000e+00 3.000000e+00 5.491423e-03 1624 1.190000e+00 3.000000e+00 5.522650e-03 1625 1.200000e+00 3.000000e+00 5.553629e-03 1626 1.210000e+00 3.000000e+00 5.584361e-03 1627 1.220000e+00 3.000000e+00 5.614847e-03 1628 1.230000e+00 3.000000e+00 5.645086e-03 1629 1.240000e+00 3.000000e+00 5.675078e-03 1630 1.250000e+00 3.000000e+00 5.704823e-03 1631 1.260000e+00 3.000000e+00 5.734322e-03 1632 1.270000e+00 3.000000e+00 5.763574e-03 1633 1.280000e+00 3.000000e+00 5.792580e-03 1634 1.290000e+00 3.000000e+00 5.821340e-03 1635 1.300000e+00 3.000000e+00 5.849853e-03 1636 1.310000e+00 3.000000e+00 5.878119e-03 1637 1.320000e+00 3.000000e+00 5.906139e-03 1638 1.330000e+00 3.000000e+00 5.933913e-03 1639 1.340000e+00 3.000000e+00 5.961439e-03 1640 1.350000e+00 3.000000e+00 5.988719e-03 1641 1.360000e+00 3.000000e+00 6.015753e-03 1642 1.370000e+00 3.000000e+00 6.042539e-03 1643 1.380000e+00 3.000000e+00 6.069078e-03 1644 1.390000e+00 3.000000e+00 6.095369e-03 1645 1.400000e+00 3.000000e+00 6.121412e-03 1646 1.410000e+00 3.000000e+00 6.147208e-03 1647 1.420000e+00 3.000000e+00 6.172755e-03 1648 1.430000e+00 3.000000e+00 6.198053e-03 1649 1.440000e+00 3.000000e+00 6.223103e-03 1650 1.450000e+00 3.000000e+00 6.247902e-03 1651 1.460000e+00 3.000000e+00 6.272451e-03 1652 1.470000e+00 3.000000e+00 6.296750e-03 1653 1.480000e+00 3.000000e+00 6.320797e-03 1654 1.490000e+00 3.000000e+00 6.344591e-03 1655 1.500000e+00 3.000000e+00 6.368133e-03 1656 1.510000e+00 3.000000e+00 6.391421e-03 1657 1.520000e+00 3.000000e+00 6.414454e-03 1658 1.530000e+00 3.000000e+00 6.437231e-03 1659 1.540000e+00 3.000000e+00 6.459751e-03 1660 1.550000e+00 3.000000e+00 6.482013e-03 1661 1.560000e+00 3.000000e+00 6.504016e-03 1662 1.570000e+00 3.000000e+00 6.525757e-03 1663 1.580000e+00 3.000000e+00 6.547236e-03 1664 1.590000e+00 3.000000e+00 6.568451e-03 1665 1.600000e+00 3.000000e+00 6.589399e-03 1666 1.610000e+00 3.000000e+00 6.610079e-03 1667 1.620000e+00 3.000000e+00 6.630489e-03 1668 1.630000e+00 3.000000e+00 6.650626e-03 1669 1.640000e+00 3.000000e+00 6.670489e-03 1670 1.650000e+00 3.000000e+00 6.690073e-03 1671 1.660000e+00 3.000000e+00 6.709377e-03 1672 1.670000e+00 3.000000e+00 6.728397e-03 1673 1.680000e+00 3.000000e+00 6.747131e-03 1674 1.690000e+00 3.000000e+00 6.765574e-03 1675 1.700000e+00 3.000000e+00 6.783723e-03 1676 1.710000e+00 3.000000e+00 6.801574e-03 1677 1.720000e+00 3.000000e+00 6.819124e-03 1678 1.730000e+00 3.000000e+00 6.836368e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1679 1.740000e+00 3.000000e+00 6.853301e-03 1680 1.750000e+00 3.000000e+00 6.869920e-03 1681 1.760000e+00 3.000000e+00 6.886219e-03 1682 1.770000e+00 3.000000e+00 6.902197e-03 1683 1.780000e+00 3.000000e+00 6.917850e-03 1684 1.790000e+00 3.000000e+00 6.933172e-03 1685 1.800000e+00 3.000000e+00 6.948157e-03 1686 1.810000e+00 3.000000e+00 6.962802e-03 1687 1.820000e+00 3.000000e+00 6.977103e-03 1688 1.830000e+00 3.000000e+00 6.991057e-03 1689 1.840000e+00 3.000000e+00 7.004661e-03 1690 1.850000e+00 3.000000e+00 7.017915e-03 1691 1.860000e+00 3.000000e+00 7.030820e-03 1692 1.870000e+00 3.000000e+00 7.043383e-03 1693 1.880000e+00 3.000000e+00 7.055618e-03 1694 1.890000e+00 3.000000e+00 7.067565e-03 1695 1.900000e+00 3.000000e+00 7.079343e-03 1696 1.910000e+00 3.000000e+00 7.091434e-03 1697 1.920000e+00 3.000000e+00 7.105554e-03 1698 1.930000e+00 3.000000e+00 7.122055e-03 1699 1.940000e+00 3.000000e+00 7.139058e-03 1700 1.950000e+00 3.000000e+00 7.155925e-03 1701 1.960000e+00 3.000000e+00 7.172511e-03 1702 1.970000e+00 3.000000e+00 7.188777e-03 1703 1.980000e+00 3.000000e+00 7.204708e-03 1704 1.990000e+00 3.000000e+00 7.220304e-03 1705 2.000000e+00 3.000000e+00 7.235569e-03 1706 2.010000e+00 3.000000e+00 7.250506e-03 1707 2.020000e+00 3.000000e+00 7.265123e-03 1708 2.030000e+00 3.000000e+00 7.279428e-03 1709 2.040000e+00 3.000000e+00 7.293427e-03 1710 2.050000e+00 3.000000e+00 7.307129e-03 1711 2.060000e+00 3.000000e+00 7.320545e-03 1712 2.070000e+00 3.000000e+00 7.333774e-03 1713 2.080000e+00 3.000000e+00 7.346839e-03 1714 2.090000e+00 3.000000e+00 7.359711e-03 1715 2.100000e+00 3.000000e+00 7.372370e-03 1716 2.110000e+00 3.000000e+00 7.384806e-03 1717 2.120000e+00 3.000000e+00 7.397012e-03 1718 2.130000e+00 3.000000e+00 7.408987e-03 1719 2.140000e+00 3.000000e+00 7.420730e-03 1720 2.150000e+00 3.000000e+00 7.432244e-03 1721 2.160000e+00 3.000000e+00 7.443532e-03 1722 2.170000e+00 3.000000e+00 7.454599e-03 1723 2.180000e+00 3.000000e+00 7.465448e-03 1724 2.190000e+00 3.000000e+00 7.476085e-03 1725 2.200000e+00 3.000000e+00 7.486516e-03 1726 2.210000e+00 3.000000e+00 7.496746e-03 1727 2.220000e+00 3.000000e+00 7.506780e-03 1728 2.230000e+00 3.000000e+00 7.516625e-03 1729 2.240000e+00 3.000000e+00 7.526285e-03 1730 2.250000e+00 3.000000e+00 7.535766e-03 1731 2.260000e+00 3.000000e+00 7.545074e-03 1732 2.270000e+00 3.000000e+00 7.554214e-03 1733 2.280000e+00 3.000000e+00 7.563190e-03 1734 2.290000e+00 3.000000e+00 7.572008e-03 1735 2.300000e+00 3.000000e+00 7.580673e-03 1736 2.310000e+00 3.000000e+00 7.589188e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1737 2.320000e+00 3.000000e+00 7.597560e-03 1738 2.330000e+00 3.000000e+00 7.605791e-03 1739 2.340000e+00 3.000000e+00 7.613886e-03 1740 2.350000e+00 3.000000e+00 7.621849e-03 1741 2.360000e+00 3.000000e+00 7.629684e-03 1742 2.370000e+00 3.000000e+00 7.637395e-03 1743 2.380000e+00 3.000000e+00 7.644984e-03 1744 2.390000e+00 3.000000e+00 7.652457e-03 1745 2.400000e+00 3.000000e+00 7.659815e-03 1746 2.410000e+00 3.000000e+00 7.667062e-03 1747 2.420000e+00 3.000000e+00 7.674201e-03 1748 2.430000e+00 3.000000e+00 7.681235e-03 1749 2.440000e+00 3.000000e+00 7.688167e-03 1750 2.450000e+00 3.000000e+00 7.694999e-03 1751 2.460000e+00 3.000000e+00 7.701735e-03 1752 2.470000e+00 3.000000e+00 7.708376e-03 1753 2.480000e+00 3.000000e+00 7.714926e-03 1754 2.490000e+00 3.000000e+00 7.721385e-03 1755 2.500000e+00 3.000000e+00 7.727757e-03 1756 2.510000e+00 3.000000e+00 7.734044e-03 1757 2.520000e+00 3.000000e+00 7.740248e-03 1758 2.530000e+00 3.000000e+00 7.746371e-03 1759 2.540000e+00 3.000000e+00 7.752414e-03 1760 2.550000e+00 3.000000e+00 7.758380e-03 1761 2.560000e+00 3.000000e+00 7.764270e-03 1762 2.570000e+00 3.000000e+00 7.770086e-03 1763 2.580000e+00 3.000000e+00 7.775830e-03 1764 2.590000e+00 3.000000e+00 7.781504e-03 1765 2.600000e+00 3.000000e+00 7.787108e-03 1766 2.610000e+00 3.000000e+00 7.792644e-03 1767 2.620000e+00 3.000000e+00 7.798114e-03 1768 2.630000e+00 3.000000e+00 7.803519e-03 1769 2.640000e+00 3.000000e+00 7.808861e-03 1770 2.650000e+00 3.000000e+00 7.814140e-03 1771 2.660000e+00 3.000000e+00 7.819358e-03 1772 2.670000e+00 3.000000e+00 7.824517e-03 1773 2.680000e+00 3.000000e+00 7.829616e-03 1774 2.690000e+00 3.000000e+00 7.834658e-03 1775 2.700000e+00 3.000000e+00 7.839644e-03 1776 2.710000e+00 3.000000e+00 7.844574e-03 1777 2.720000e+00 3.000000e+00 7.849449e-03 1778 2.730000e+00 3.000000e+00 7.854271e-03 1779 2.740000e+00 3.000000e+00 7.859040e-03 1780 2.750000e+00 3.000000e+00 7.863758e-03 1781 2.760000e+00 3.000000e+00 7.868424e-03 1782 2.770000e+00 3.000000e+00 7.873041e-03 1783 2.780000e+00 3.000000e+00 7.877608e-03 1784 2.790000e+00 3.000000e+00 7.882127e-03 1785 2.800000e+00 3.000000e+00 7.886598e-03 1786 2.810000e+00 3.000000e+00 7.891022e-03 1787 2.820000e+00 3.000000e+00 7.895400e-03 1788 2.830000e+00 3.000000e+00 7.899732e-03 1789 2.840000e+00 3.000000e+00 7.904020e-03 1790 2.850000e+00 3.000000e+00 7.908263e-03 1791 2.860000e+00 3.000000e+00 7.912462e-03 1792 2.870000e+00 3.000000e+00 7.916619e-03 1793 2.880000e+00 3.000000e+00 7.920732e-03 1794 2.890000e+00 3.000000e+00 7.924804e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1795 2.900000e+00 3.000000e+00 7.928835e-03 1796 2.910000e+00 3.000000e+00 7.932825e-03 1797 2.920000e+00 3.000000e+00 7.936774e-03 1798 2.930000e+00 3.000000e+00 7.940684e-03 1799 2.940000e+00 3.000000e+00 7.944554e-03 1800 2.950000e+00 3.000000e+00 7.948385e-03 1801 2.960000e+00 3.000000e+00 7.952178e-03 1802 2.970000e+00 3.000000e+00 7.955933e-03 1803 2.980000e+00 3.000000e+00 7.959651e-03 1804 2.990000e+00 3.000000e+00 7.963331e-03 1805 3.000000e+00 3.000000e+00 7.966974e-03 CPU time since last call: 0.157 seconds. Total CPU time: 0.157 seconds. Current dynamic memory usage = 270336, Dynamic memory limit = -491521. tmpk8ny_4pz/tests/bsim3soidd/t4.cir0000644000175000017500000000044413546075722017412 0ustar carstencarsten*model = BSIMSOI (DD) *Berkeley Spice Compatibility * * SOI NMOSFET, tied body simulation vd d 0 dc 0.05 vs s 0 dc 0 ve e 0 dc 0 vg g 0 dc 3 vb b 0 dc 0 m1 d g s e b n1 w=10u l=0.25u .option gmin=1e-25 itl1=500 noacct .dc vg 0 1.5 0.01 vb -0.3 0.5 0.1 .print dc i(vs) .include nmosdd.mod tmpk8ny_4pz/tests/bsim3soidd/t5.out0000644000175000017500000013114413546075722017447 0ustar carstencarsten No. of Data Rows : 1359 Circuit: *model = BSIMSOI (DD) Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Warning: Pd = 0 is less than W. Warning: Ps = 0 is less than W. *model = BSIMSOI (DD) -------------------------------------------------------------------------------- Index v-sweep vs#branch -------------------------------------------------------------------------------- 0 0.000000e+00 2.064981e-12 1 1.000000e-02 2.750991e-12 2 2.000000e-02 4.012634e-12 3 3.000000e-02 5.593057e-12 4 4.000000e-02 7.795398e-12 5 5.000000e-02 1.086403e-11 6 6.000000e-02 1.513914e-11 7 7.000000e-02 2.109411e-11 8 8.000000e-02 2.938743e-11 9 9.000000e-02 4.093474e-11 10 1.000000e-01 5.700856e-11 11 1.100000e-01 7.937633e-11 12 1.200000e-01 1.104912e-10 13 1.300000e-01 1.537552e-10 14 1.400000e-01 2.138818e-10 15 1.500000e-01 2.973940e-10 16 1.600000e-01 4.133010e-10 17 1.700000e-01 5.739877e-10 18 1.800000e-01 7.965107e-10 19 1.900000e-01 1.104291e-09 20 2.000000e-01 1.529397e-09 21 2.100000e-01 2.115610e-09 22 2.200000e-01 2.922495e-09 23 2.300000e-01 4.030771e-09 24 2.400000e-01 5.549341e-09 25 2.500000e-01 7.624372e-09 26 2.600000e-01 1.045092e-08 27 2.700000e-01 1.428761e-08 28 2.800000e-01 1.947483e-08 29 2.900000e-01 2.645706e-08 30 3.000000e-01 3.580963e-08 31 3.100000e-01 4.827032e-08 32 3.200000e-01 6.477582e-08 33 3.300000e-01 8.650332e-08 34 3.400000e-01 1.149169e-07 35 3.500000e-01 1.518190e-07 36 3.600000e-01 1.994073e-07 37 3.700000e-01 2.603381e-07 38 3.800000e-01 3.377970e-07 39 3.900000e-01 4.355794e-07 40 4.000000e-01 5.581821e-07 41 4.100000e-01 7.108746e-07 42 4.200000e-01 8.996268e-07 43 4.300000e-01 1.131406e-06 44 4.400000e-01 1.414288e-06 45 4.500000e-01 1.757461e-06 46 4.600000e-01 2.171230e-06 47 4.700000e-01 2.666926e-06 48 4.800000e-01 3.256704e-06 49 4.900000e-01 3.953195e-06 50 5.000000e-01 4.769004e-06 51 5.100000e-01 5.716084e-06 52 5.200000e-01 6.805016e-06 53 5.300000e-01 8.044296e-06 54 5.400000e-01 9.439702e-06 Index v-sweep vs#branch -------------------------------------------------------------------------------- 55 5.500000e-01 1.099386e-05 56 5.600000e-01 1.270604e-05 57 5.700000e-01 1.457225e-05 58 5.800000e-01 1.658558e-05 59 5.900000e-01 1.873680e-05 60 6.000000e-01 2.101516e-05 61 6.100000e-01 2.340955e-05 62 6.200000e-01 2.591048e-05 63 6.300000e-01 2.851274e-05 64 6.400000e-01 3.121346e-05 65 6.500000e-01 3.400052e-05 66 6.600000e-01 3.685373e-05 67 6.700000e-01 3.975537e-05 68 6.800000e-01 4.269170e-05 69 6.900000e-01 4.565163e-05 70 7.000000e-01 4.862588e-05 71 7.100000e-01 5.160659e-05 72 7.200000e-01 5.458710e-05 73 7.300000e-01 5.756173e-05 74 7.400000e-01 6.052572e-05 75 7.500000e-01 6.347508e-05 76 7.600000e-01 6.640647e-05 77 7.700000e-01 6.931717e-05 78 7.800000e-01 7.220492e-05 79 7.900000e-01 7.506790e-05 80 8.000000e-01 7.790465e-05 81 8.100000e-01 8.071404e-05 82 8.200000e-01 8.349515e-05 83 8.300000e-01 8.624734e-05 84 8.400000e-01 8.897010e-05 85 8.500000e-01 9.166311e-05 86 8.600000e-01 9.432618e-05 87 8.700000e-01 9.695919e-05 88 8.800000e-01 9.956217e-05 89 8.900000e-01 1.021352e-04 90 9.000000e-01 1.046784e-04 91 9.100000e-01 1.071919e-04 92 9.200000e-01 1.096760e-04 93 9.300000e-01 1.121311e-04 94 9.400000e-01 1.145573e-04 95 9.500000e-01 1.169550e-04 96 9.600000e-01 1.193245e-04 97 9.700000e-01 1.216663e-04 98 9.800000e-01 1.239807e-04 99 9.900000e-01 1.262681e-04 100 1.000000e+00 1.285289e-04 101 1.010000e+00 1.307633e-04 102 1.020000e+00 1.329719e-04 103 1.030000e+00 1.351550e-04 104 1.040000e+00 1.373130e-04 105 1.050000e+00 1.394460e-04 106 1.060000e+00 1.415546e-04 107 1.070000e+00 1.436388e-04 108 1.080000e+00 1.456991e-04 109 1.090000e+00 1.477355e-04 110 1.100000e+00 1.497483e-04 111 1.110000e+00 1.517378e-04 112 1.120000e+00 1.537039e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 113 1.130000e+00 1.556471e-04 114 1.140000e+00 1.575674e-04 115 1.150000e+00 1.594649e-04 116 1.160000e+00 1.613400e-04 117 1.170000e+00 1.631927e-04 118 1.180000e+00 1.650234e-04 119 1.190000e+00 1.668322e-04 120 1.200000e+00 1.686193e-04 121 1.210000e+00 1.703850e-04 122 1.220000e+00 1.721295e-04 123 1.230000e+00 1.738531e-04 124 1.240000e+00 1.755561e-04 125 1.250000e+00 1.772387e-04 126 1.260000e+00 1.789011e-04 127 1.270000e+00 1.805436e-04 128 1.280000e+00 1.821665e-04 129 1.290000e+00 1.837701e-04 130 1.300000e+00 1.853545e-04 131 1.310000e+00 1.869202e-04 132 1.320000e+00 1.884673e-04 133 1.330000e+00 1.899960e-04 134 1.340000e+00 1.915067e-04 135 1.350000e+00 1.929996e-04 136 1.360000e+00 1.944749e-04 137 1.370000e+00 1.959329e-04 138 1.380000e+00 1.973738e-04 139 1.390000e+00 1.987979e-04 140 1.400000e+00 2.002054e-04 141 1.410000e+00 2.015964e-04 142 1.420000e+00 2.029713e-04 143 1.430000e+00 2.043303e-04 144 1.440000e+00 2.056736e-04 145 1.450000e+00 2.070013e-04 146 1.460000e+00 2.083137e-04 147 1.470000e+00 2.096111e-04 148 1.480000e+00 2.108936e-04 149 1.490000e+00 2.121613e-04 150 1.500000e+00 2.134146e-04 151 0.000000e+00 2.065527e-12 152 1.000000e-02 2.751725e-12 153 2.000000e-02 4.013719e-12 154 3.000000e-02 5.594586e-12 155 4.000000e-02 7.797555e-12 156 5.000000e-02 1.086708e-11 157 6.000000e-02 1.514343e-11 158 7.000000e-02 2.110015e-11 159 8.000000e-02 2.939595e-11 160 9.000000e-02 4.094675e-11 161 1.000000e-01 5.702548e-11 162 1.100000e-01 7.940017e-11 163 1.200000e-01 1.105248e-10 164 1.300000e-01 1.538025e-10 165 1.400000e-01 2.139484e-10 166 1.500000e-01 2.974877e-10 167 1.600000e-01 4.134327e-10 168 1.700000e-01 5.741729e-10 169 1.800000e-01 7.967707e-10 170 1.900000e-01 1.104655e-09 Index v-sweep vs#branch -------------------------------------------------------------------------------- 171 2.000000e-01 1.529908e-09 172 2.100000e-01 2.116325e-09 173 2.200000e-01 2.923494e-09 174 2.300000e-01 4.032165e-09 175 2.400000e-01 5.551280e-09 176 2.500000e-01 7.627065e-09 177 2.600000e-01 1.045465e-08 178 2.700000e-01 1.429276e-08 179 2.800000e-01 1.948192e-08 180 2.900000e-01 2.646679e-08 181 3.000000e-01 3.582292e-08 182 3.100000e-01 4.828839e-08 183 3.200000e-01 6.480030e-08 184 3.300000e-01 8.653629e-08 185 3.400000e-01 1.149610e-07 186 3.500000e-01 1.518778e-07 187 3.600000e-01 1.994843e-07 188 3.700000e-01 2.604018e-07 189 3.800000e-01 3.376975e-07 190 3.900000e-01 4.350425e-07 191 4.000000e-01 5.567666e-07 192 4.100000e-01 7.079415e-07 193 4.200000e-01 8.944774e-07 194 4.300000e-01 1.123220e-06 195 4.400000e-01 1.402039e-06 196 4.500000e-01 1.739883e-06 197 4.600000e-01 2.146786e-06 198 4.700000e-01 2.633791e-06 199 4.800000e-01 3.212758e-06 200 4.900000e-01 3.896042e-06 201 5.000000e-01 4.696027e-06 202 5.100000e-01 5.624529e-06 203 5.200000e-01 6.692127e-06 204 5.300000e-01 7.907490e-06 205 5.400000e-01 9.276805e-06 206 5.500000e-01 1.080344e-05 207 5.600000e-01 1.248799e-05 208 5.700000e-01 1.432898e-05 209 5.800000e-01 1.632471e-05 210 5.900000e-01 1.847540e-05 211 6.000000e-01 2.077826e-05 212 6.100000e-01 2.321891e-05 213 6.200000e-01 2.577786e-05 214 6.300000e-01 2.843711e-05 215 6.400000e-01 3.118050e-05 216 6.500000e-01 3.399327e-05 217 6.600000e-01 3.686186e-05 218 6.700000e-01 3.977399e-05 219 6.800000e-01 4.271858e-05 220 6.900000e-01 4.568582e-05 221 7.000000e-01 4.866713e-05 222 7.100000e-01 5.165503e-05 223 7.200000e-01 5.464313e-05 224 7.300000e-01 5.762600e-05 225 7.400000e-01 6.059907e-05 226 7.500000e-01 6.355857e-05 227 7.600000e-01 6.650139e-05 228 7.700000e-01 6.942501e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 229 7.800000e-01 7.232747e-05 230 7.900000e-01 7.520722e-05 231 8.000000e-01 7.806308e-05 232 8.100000e-01 8.089419e-05 233 8.200000e-01 8.369989e-05 234 8.300000e-01 8.647966e-05 235 8.400000e-01 8.923306e-05 236 8.500000e-01 9.195962e-05 237 8.600000e-01 9.465880e-05 238 8.700000e-01 9.733001e-05 239 8.800000e-01 9.997262e-05 240 8.900000e-01 1.025860e-04 241 9.000000e-01 1.051696e-04 242 9.100000e-01 1.077228e-04 243 9.200000e-01 1.102455e-04 244 9.300000e-01 1.127373e-04 245 9.400000e-01 1.151983e-04 246 9.500000e-01 1.176283e-04 247 9.600000e-01 1.200277e-04 248 9.700000e-01 1.223965e-04 249 9.800000e-01 1.247352e-04 250 9.900000e-01 1.270439e-04 251 1.000000e+00 1.293231e-04 252 1.010000e+00 1.315731e-04 253 1.020000e+00 1.337944e-04 254 1.030000e+00 1.359873e-04 255 1.040000e+00 1.381523e-04 256 1.050000e+00 1.402898e-04 257 1.060000e+00 1.424002e-04 258 1.070000e+00 1.444839e-04 259 1.080000e+00 1.465413e-04 260 1.090000e+00 1.485729e-04 261 1.100000e+00 1.505791e-04 262 1.110000e+00 1.525602e-04 263 1.120000e+00 1.545166e-04 264 1.130000e+00 1.564488e-04 265 1.140000e+00 1.583570e-04 266 1.150000e+00 1.602417e-04 267 1.160000e+00 1.621033e-04 268 1.170000e+00 1.639420e-04 269 1.180000e+00 1.657582e-04 270 1.190000e+00 1.675523e-04 271 1.200000e+00 1.693247e-04 272 1.210000e+00 1.710755e-04 273 1.220000e+00 1.728052e-04 274 1.230000e+00 1.745141e-04 275 1.240000e+00 1.762024e-04 276 1.250000e+00 1.778706e-04 277 1.260000e+00 1.795187e-04 278 1.270000e+00 1.811473e-04 279 1.280000e+00 1.827565e-04 280 1.290000e+00 1.843466e-04 281 1.300000e+00 1.859180e-04 282 1.310000e+00 1.874708e-04 283 1.320000e+00 1.890053e-04 284 1.330000e+00 1.905218e-04 285 1.340000e+00 1.920206e-04 286 1.350000e+00 1.935019e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 287 1.360000e+00 1.949658e-04 288 1.370000e+00 1.964128e-04 289 1.380000e+00 1.978430e-04 290 1.390000e+00 1.992566e-04 291 1.400000e+00 2.006539e-04 292 1.410000e+00 2.020351e-04 293 1.420000e+00 2.034004e-04 294 1.430000e+00 2.047500e-04 295 1.440000e+00 2.060842e-04 296 1.450000e+00 2.074031e-04 297 1.460000e+00 2.087069e-04 298 1.470000e+00 2.099959e-04 299 1.480000e+00 2.112702e-04 300 1.490000e+00 2.125301e-04 301 1.500000e+00 2.137757e-04 302 0.000000e+00 2.066772e-12 303 1.000000e-02 2.753407e-12 304 2.000000e-02 4.016233e-12 305 3.000000e-02 5.598160e-12 306 4.000000e-02 7.802635e-12 307 5.000000e-02 1.087430e-11 308 6.000000e-02 1.515370e-11 309 7.000000e-02 2.111475e-11 310 8.000000e-02 2.941671e-11 311 9.000000e-02 4.097628e-11 312 1.000000e-01 5.706747e-11 313 1.100000e-01 7.945989e-11 314 1.200000e-01 1.106097e-10 315 1.300000e-01 1.539232e-10 316 1.400000e-01 2.141201e-10 317 1.500000e-01 2.977317e-10 318 1.600000e-01 4.137794e-10 319 1.700000e-01 5.746652e-10 320 1.800000e-01 7.974695e-10 321 1.900000e-01 1.105646e-09 322 2.000000e-01 1.531312e-09 323 2.100000e-01 2.118313e-09 324 2.200000e-01 2.926303e-09 325 2.300000e-01 4.036131e-09 326 2.400000e-01 5.556869e-09 327 2.500000e-01 7.634925e-09 328 2.600000e-01 1.046568e-08 329 2.700000e-01 1.430820e-08 330 2.800000e-01 1.950346e-08 331 2.900000e-01 2.649674e-08 332 3.000000e-01 3.586443e-08 333 3.100000e-01 4.834567e-08 334 3.200000e-01 6.487844e-08 335 3.300000e-01 8.662492e-08 336 3.400000e-01 1.150059e-07 337 3.500000e-01 1.517738e-07 338 3.600000e-01 1.990533e-07 339 3.700000e-01 2.593955e-07 340 3.800000e-01 3.358387e-07 341 3.900000e-01 4.319774e-07 342 4.000000e-01 5.520402e-07 343 4.100000e-01 7.009767e-07 344 4.200000e-01 8.845520e-07 Index v-sweep vs#branch -------------------------------------------------------------------------------- 345 4.300000e-01 1.109443e-06 346 4.400000e-01 1.383327e-06 347 4.500000e-01 1.714939e-06 348 4.600000e-01 2.114095e-06 349 4.700000e-01 2.591624e-06 350 4.800000e-01 3.159216e-06 351 4.900000e-01 3.829144e-06 352 5.000000e-01 4.613877e-06 353 5.100000e-01 5.525622e-06 354 5.200000e-01 6.575919e-06 355 5.300000e-01 7.775580e-06 356 5.400000e-01 9.135477e-06 357 5.500000e-01 1.066724e-05 358 5.600000e-01 1.237822e-05 359 5.700000e-01 1.426579e-05 360 5.800000e-01 1.632211e-05 361 5.900000e-01 1.853797e-05 362 6.000000e-01 2.090342e-05 363 6.100000e-01 2.340782e-05 364 6.200000e-01 2.603975e-05 365 6.300000e-01 2.878602e-05 366 6.400000e-01 3.163063e-05 367 6.500000e-01 3.455495e-05 368 6.600000e-01 3.753980e-05 369 6.700000e-01 4.056761e-05 370 6.800000e-01 4.362345e-05 371 6.900000e-01 4.669505e-05 372 7.000000e-01 4.977246e-05 373 7.100000e-01 5.284759e-05 374 7.200000e-01 5.591389e-05 375 7.300000e-01 5.896604e-05 376 7.400000e-01 6.199972e-05 377 7.500000e-01 6.501146e-05 378 7.600000e-01 6.799846e-05 379 7.700000e-01 7.095852e-05 380 7.800000e-01 7.388989e-05 381 7.900000e-01 7.679124e-05 382 8.000000e-01 7.966153e-05 383 8.100000e-01 8.250003e-05 384 8.200000e-01 8.530622e-05 385 8.300000e-01 8.807974e-05 386 8.400000e-01 9.082041e-05 387 8.500000e-01 9.352818e-05 388 8.600000e-01 9.620306e-05 389 8.700000e-01 9.884519e-05 390 8.800000e-01 1.014547e-04 391 8.900000e-01 1.040320e-04 392 9.000000e-01 1.065771e-04 393 9.100000e-01 1.090905e-04 394 9.200000e-01 1.115725e-04 395 9.300000e-01 1.140235e-04 396 9.400000e-01 1.164438e-04 397 9.500000e-01 1.188338e-04 398 9.600000e-01 1.211939e-04 399 9.700000e-01 1.235245e-04 400 9.800000e-01 1.258260e-04 401 9.900000e-01 1.280989e-04 402 1.000000e+00 1.303434e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 403 1.010000e+00 1.325601e-04 404 1.020000e+00 1.347492e-04 405 1.030000e+00 1.369113e-04 406 1.040000e+00 1.390467e-04 407 1.050000e+00 1.411557e-04 408 1.060000e+00 1.432388e-04 409 1.070000e+00 1.452964e-04 410 1.080000e+00 1.473287e-04 411 1.090000e+00 1.493362e-04 412 1.100000e+00 1.513192e-04 413 1.110000e+00 1.532782e-04 414 1.120000e+00 1.552133e-04 415 1.130000e+00 1.571251e-04 416 1.140000e+00 1.590137e-04 417 1.150000e+00 1.608796e-04 418 1.160000e+00 1.627230e-04 419 1.170000e+00 1.645444e-04 420 1.180000e+00 1.663439e-04 421 1.190000e+00 1.681220e-04 422 1.200000e+00 1.698789e-04 423 1.210000e+00 1.716148e-04 424 1.220000e+00 1.733302e-04 425 1.230000e+00 1.750253e-04 426 1.240000e+00 1.767004e-04 427 1.250000e+00 1.783557e-04 428 1.260000e+00 1.799916e-04 429 1.270000e+00 1.816082e-04 430 1.280000e+00 1.832060e-04 431 1.290000e+00 1.847850e-04 432 1.300000e+00 1.863457e-04 433 1.310000e+00 1.878882e-04 434 1.320000e+00 1.894127e-04 435 1.330000e+00 1.909196e-04 436 1.340000e+00 1.924091e-04 437 1.350000e+00 1.938813e-04 438 1.360000e+00 1.953366e-04 439 1.370000e+00 1.967752e-04 440 1.380000e+00 1.981972e-04 441 1.390000e+00 1.996029e-04 442 1.400000e+00 2.009925e-04 443 1.410000e+00 2.023663e-04 444 1.420000e+00 2.037244e-04 445 1.430000e+00 2.050671e-04 446 1.440000e+00 2.063945e-04 447 1.450000e+00 2.077069e-04 448 1.460000e+00 2.090044e-04 449 1.470000e+00 2.102872e-04 450 1.480000e+00 2.115555e-04 451 1.490000e+00 2.128096e-04 452 1.500000e+00 2.140496e-04 453 0.000000e+00 2.072522e-12 454 1.000000e-02 2.761350e-12 455 2.000000e-02 4.028601e-12 456 3.000000e-02 5.616346e-12 457 4.000000e-02 7.829424e-12 458 5.000000e-02 1.091384e-11 459 6.000000e-02 1.521220e-11 460 7.000000e-02 2.120149e-11 Index v-sweep vs#branch -------------------------------------------------------------------------------- 461 8.000000e-02 2.954567e-11 462 9.000000e-02 4.116854e-11 463 1.000000e-01 5.735505e-11 464 1.100000e-01 7.989155e-11 465 1.200000e-01 1.112602e-10 466 1.300000e-01 1.549081e-10 467 1.400000e-01 2.156189e-10 468 1.500000e-01 3.000266e-10 469 1.600000e-01 4.173183e-10 470 1.700000e-01 5.801683e-10 471 1.800000e-01 8.061148e-10 472 1.900000e-01 1.119402e-09 473 2.000000e-01 1.553552e-09 474 2.100000e-01 2.155020e-09 475 2.200000e-01 2.988527e-09 476 2.300000e-01 4.145176e-09 477 2.400000e-01 5.755065e-09 478 2.500000e-01 8.004832e-09 479 2.600000e-01 1.115475e-08 480 2.700000e-01 1.555195e-08 481 2.800000e-01 2.165279e-08 482 2.900000e-01 3.005843e-08 483 3.000000e-01 4.155874e-08 484 3.100000e-01 5.719560e-08 485 3.200000e-01 7.831618e-08 486 3.300000e-01 1.066349e-07 487 3.400000e-01 1.443092e-07 488 3.500000e-01 1.940253e-07 489 3.600000e-01 2.590932e-07 490 3.700000e-01 3.435517e-07 491 3.800000e-01 4.522870e-07 492 3.900000e-01 5.911651e-07 493 4.000000e-01 7.671765e-07 494 4.100000e-01 9.885874e-07 495 4.200000e-01 1.265079e-06 496 4.300000e-01 1.607851e-06 497 4.400000e-01 2.029632e-06 498 4.500000e-01 2.544561e-06 499 4.600000e-01 3.167847e-06 500 4.700000e-01 3.915125e-06 501 4.800000e-01 4.801366e-06 502 4.900000e-01 5.839018e-06 503 5.000000e-01 7.034884e-06 504 5.100000e-01 8.388099e-06 505 5.200000e-01 9.897562e-06 506 5.300000e-01 1.156778e-05 507 5.400000e-01 1.340158e-05 508 5.500000e-01 1.539660e-05 509 5.600000e-01 1.754618e-05 510 5.700000e-01 1.984048e-05 511 5.800000e-01 2.226739e-05 512 5.900000e-01 2.481331e-05 513 6.000000e-01 2.746386e-05 514 6.100000e-01 3.020442e-05 515 6.200000e-01 3.302065e-05 516 6.300000e-01 3.589884e-05 517 6.400000e-01 3.882618e-05 518 6.500000e-01 4.179091e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 519 6.600000e-01 4.478245e-05 520 6.700000e-01 4.779136e-05 521 6.800000e-01 5.080937e-05 522 6.900000e-01 5.382929e-05 523 7.000000e-01 5.684495e-05 524 7.100000e-01 5.985109e-05 525 7.200000e-01 6.284326e-05 526 7.300000e-01 6.581775e-05 527 7.400000e-01 6.877148e-05 528 7.500000e-01 7.170193e-05 529 7.600000e-01 7.460703e-05 530 7.700000e-01 7.748514e-05 531 7.800000e-01 8.033495e-05 532 7.900000e-01 8.315543e-05 533 8.000000e-01 8.594583e-05 534 8.100000e-01 8.870557e-05 535 8.200000e-01 9.143426e-05 536 8.300000e-01 9.413166e-05 537 8.400000e-01 9.679763e-05 538 8.500000e-01 9.943214e-05 539 8.600000e-01 1.020352e-04 540 8.700000e-01 1.046071e-04 541 8.800000e-01 1.071477e-04 542 8.900000e-01 1.096575e-04 543 9.000000e-01 1.121367e-04 544 9.100000e-01 1.145854e-04 545 9.200000e-01 1.170041e-04 546 9.300000e-01 1.193931e-04 547 9.400000e-01 1.217527e-04 548 9.500000e-01 1.240832e-04 549 9.600000e-01 1.263850e-04 550 9.700000e-01 1.286584e-04 551 9.800000e-01 1.309039e-04 552 9.900000e-01 1.331218e-04 553 1.000000e+00 1.353124e-04 554 1.010000e+00 1.374762e-04 555 1.020000e+00 1.396134e-04 556 1.030000e+00 1.417245e-04 557 1.040000e+00 1.438098e-04 558 1.050000e+00 1.458696e-04 559 1.060000e+00 1.479044e-04 560 1.070000e+00 1.499145e-04 561 1.080000e+00 1.519001e-04 562 1.090000e+00 1.538617e-04 563 1.100000e+00 1.557996e-04 564 1.110000e+00 1.577142e-04 565 1.120000e+00 1.596056e-04 566 1.130000e+00 1.614744e-04 567 1.140000e+00 1.633207e-04 568 1.150000e+00 1.651450e-04 569 1.160000e+00 1.669474e-04 570 1.170000e+00 1.687284e-04 571 1.180000e+00 1.704882e-04 572 1.190000e+00 1.722271e-04 573 1.200000e+00 1.739453e-04 574 1.210000e+00 1.756433e-04 575 1.220000e+00 1.773212e-04 576 1.230000e+00 1.789793e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 577 1.240000e+00 1.806180e-04 578 1.250000e+00 1.822374e-04 579 1.260000e+00 1.838379e-04 580 1.270000e+00 1.854196e-04 581 1.280000e+00 1.869829e-04 582 1.290000e+00 1.885280e-04 583 1.300000e+00 1.900551e-04 584 1.310000e+00 1.915646e-04 585 1.320000e+00 1.930565e-04 586 1.330000e+00 1.945312e-04 587 1.340000e+00 1.959889e-04 588 1.350000e+00 1.974298e-04 589 1.360000e+00 1.988541e-04 590 1.370000e+00 2.002621e-04 591 1.380000e+00 2.016539e-04 592 1.390000e+00 2.030299e-04 593 1.400000e+00 2.043901e-04 594 1.410000e+00 2.057348e-04 595 1.420000e+00 2.070642e-04 596 1.430000e+00 2.083785e-04 597 1.440000e+00 2.096779e-04 598 1.450000e+00 2.109626e-04 599 1.460000e+00 2.122328e-04 600 1.470000e+00 2.134886e-04 601 1.480000e+00 2.147303e-04 602 1.490000e+00 2.159580e-04 603 1.500000e+00 2.171719e-04 604 0.000000e+00 4.149697e-12 605 1.000000e-02 5.650698e-12 606 2.000000e-02 8.551535e-12 607 3.000000e-02 1.227249e-11 608 4.000000e-02 1.760870e-11 609 5.000000e-02 2.525906e-11 610 6.000000e-02 3.622354e-11 611 7.000000e-02 5.193193e-11 612 8.000000e-02 7.442713e-11 613 9.000000e-02 1.066257e-10 614 1.000000e-01 1.526874e-10 615 1.100000e-01 2.185387e-10 616 1.200000e-01 3.126114e-10 617 1.300000e-01 4.468842e-10 618 1.400000e-01 6.383434e-10 619 1.500000e-01 9.110261e-10 620 1.600000e-01 1.298843e-09 621 1.700000e-01 1.849360e-09 622 1.800000e-01 2.629285e-09 623 1.900000e-01 3.731735e-09 624 2.000000e-01 5.286071e-09 625 2.100000e-01 7.471051e-09 626 2.200000e-01 1.053220e-08 627 2.300000e-01 1.480442e-08 628 2.400000e-01 2.074103e-08 629 2.500000e-01 2.895034e-08 630 2.600000e-01 4.024094e-08 631 2.700000e-01 5.567669e-08 632 2.800000e-01 7.664210e-08 633 2.900000e-01 1.049187e-07 634 3.000000e-01 1.427730e-07 Index v-sweep vs#branch -------------------------------------------------------------------------------- 635 3.100000e-01 1.930558e-07 636 3.200000e-01 2.593155e-07 637 3.300000e-01 3.459256e-07 638 3.400000e-01 4.582287e-07 639 3.500000e-01 6.027000e-07 640 3.600000e-01 7.871250e-07 641 3.700000e-01 1.020785e-06 642 3.800000e-01 1.314626e-06 643 3.900000e-01 1.681377e-06 644 4.000000e-01 2.135546e-06 645 4.100000e-01 2.693225e-06 646 4.200000e-01 3.371579e-06 647 4.300000e-01 4.187855e-06 648 4.400000e-01 5.157563e-06 649 4.500000e-01 6.291041e-06 650 4.600000e-01 7.587978e-06 651 4.700000e-01 9.038489e-06 652 4.800000e-01 1.064051e-05 653 4.900000e-01 1.240101e-05 654 5.000000e-01 1.432317e-05 655 5.100000e-01 1.640407e-05 656 5.200000e-01 1.863631e-05 657 5.300000e-01 2.100939e-05 658 5.400000e-01 2.351072e-05 659 5.500000e-01 2.612645e-05 660 5.600000e-01 2.884208e-05 661 5.700000e-01 3.164308e-05 662 5.800000e-01 3.451528e-05 663 5.900000e-01 3.744525e-05 664 6.000000e-01 4.042047e-05 665 6.100000e-01 4.342954e-05 666 6.200000e-01 4.646219e-05 667 6.300000e-01 4.950931e-05 668 6.400000e-01 5.256294e-05 669 6.500000e-01 5.561616e-05 670 6.600000e-01 5.866303e-05 671 6.700000e-01 6.169851e-05 672 6.800000e-01 6.471835e-05 673 6.900000e-01 6.771899e-05 674 7.000000e-01 7.069749e-05 675 7.100000e-01 7.365145e-05 676 7.200000e-01 7.657892e-05 677 7.300000e-01 7.947833e-05 678 7.400000e-01 8.234846e-05 679 7.500000e-01 8.518835e-05 680 7.600000e-01 8.799729e-05 681 7.700000e-01 9.077477e-05 682 7.800000e-01 9.352045e-05 683 7.900000e-01 9.623410e-05 684 8.000000e-01 9.891565e-05 685 8.100000e-01 1.015651e-04 686 8.200000e-01 1.041825e-04 687 8.300000e-01 1.067680e-04 688 8.400000e-01 1.093218e-04 689 8.500000e-01 1.118442e-04 690 8.600000e-01 1.143354e-04 691 8.700000e-01 1.167957e-04 692 8.800000e-01 1.192255e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 693 8.900000e-01 1.216250e-04 694 9.000000e-01 1.239947e-04 695 9.100000e-01 1.263349e-04 696 9.200000e-01 1.286460e-04 697 9.300000e-01 1.309283e-04 698 9.400000e-01 1.331822e-04 699 9.500000e-01 1.354081e-04 700 9.600000e-01 1.376064e-04 701 9.700000e-01 1.397775e-04 702 9.800000e-01 1.419217e-04 703 9.900000e-01 1.440394e-04 704 1.000000e+00 1.461310e-04 705 1.010000e+00 1.481968e-04 706 1.020000e+00 1.502373e-04 707 1.030000e+00 1.522527e-04 708 1.040000e+00 1.542434e-04 709 1.050000e+00 1.562098e-04 710 1.060000e+00 1.581522e-04 711 1.070000e+00 1.600709e-04 712 1.080000e+00 1.619664e-04 713 1.090000e+00 1.638388e-04 714 1.100000e+00 1.656886e-04 715 1.110000e+00 1.675160e-04 716 1.120000e+00 1.693215e-04 717 1.130000e+00 1.711052e-04 718 1.140000e+00 1.728675e-04 719 1.150000e+00 1.746087e-04 720 1.160000e+00 1.763291e-04 721 1.170000e+00 1.780289e-04 722 1.180000e+00 1.797085e-04 723 1.190000e+00 1.813682e-04 724 1.200000e+00 1.830081e-04 725 1.210000e+00 1.846287e-04 726 1.220000e+00 1.862301e-04 727 1.230000e+00 1.878126e-04 728 1.240000e+00 1.893765e-04 729 1.250000e+00 1.909221e-04 730 1.260000e+00 1.924495e-04 731 1.270000e+00 1.939591e-04 732 1.280000e+00 1.954510e-04 733 1.290000e+00 1.969255e-04 734 1.300000e+00 1.983829e-04 735 1.310000e+00 1.998233e-04 736 1.320000e+00 2.012471e-04 737 1.330000e+00 2.026543e-04 738 1.340000e+00 2.040454e-04 739 1.350000e+00 2.054203e-04 740 1.360000e+00 2.067795e-04 741 1.370000e+00 2.081230e-04 742 1.380000e+00 2.094511e-04 743 1.390000e+00 2.107640e-04 744 1.400000e+00 2.120619e-04 745 1.410000e+00 2.133449e-04 746 1.420000e+00 2.146133e-04 747 1.430000e+00 2.158673e-04 748 1.440000e+00 2.171071e-04 749 1.450000e+00 2.183327e-04 750 1.460000e+00 2.195445e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 751 1.470000e+00 2.207426e-04 752 1.480000e+00 2.219271e-04 753 1.490000e+00 2.230983e-04 754 1.500000e+00 2.242563e-04 755 0.000000e+00 2.039674e-11 756 1.000000e-02 2.936285e-11 757 2.000000e-02 4.225803e-11 758 3.000000e-02 6.079651e-11 759 4.000000e-02 8.743568e-11 760 5.000000e-02 1.256951e-10 761 6.000000e-02 1.806104e-10 762 7.000000e-02 2.593780e-10 763 8.000000e-02 3.722671e-10 764 9.000000e-02 5.339088e-10 765 1.000000e-01 7.651084e-10 766 1.100000e-01 1.095385e-09 767 1.200000e-01 1.566511e-09 768 1.300000e-01 2.237422e-09 769 1.400000e-01 3.190971e-09 770 1.500000e-01 4.543156e-09 771 1.600000e-01 6.455517e-09 772 1.700000e-01 9.151132e-09 773 1.800000e-01 1.293714e-08 774 1.900000e-01 1.823313e-08 775 2.000000e-01 2.560762e-08 776 2.100000e-01 3.582410e-08 777 2.200000e-01 4.989798e-08 778 2.300000e-01 6.916574e-08 779 2.400000e-01 9.536735e-08 780 2.500000e-01 1.307429e-07 781 2.600000e-01 1.781442e-07 782 2.700000e-01 2.411632e-07 783 2.800000e-01 3.242784e-07 784 2.900000e-01 4.330219e-07 785 3.000000e-01 5.741683e-07 786 3.100000e-01 7.559600e-07 787 3.200000e-01 9.884636e-07 788 3.300000e-01 1.283590e-06 789 3.400000e-01 1.655271e-06 790 3.500000e-01 2.119490e-06 791 3.600000e-01 2.694047e-06 792 3.700000e-01 3.397920e-06 793 3.800000e-01 4.250005e-06 794 3.900000e-01 5.266717e-06 795 4.000000e-01 6.457328e-06 796 4.100000e-01 7.816460e-06 797 4.200000e-01 9.326264e-06 798 4.300000e-01 1.098167e-05 799 4.400000e-01 1.279167e-05 800 4.500000e-01 1.476130e-05 801 4.600000e-01 1.688842e-05 802 4.700000e-01 1.916588e-05 803 4.800000e-01 2.158327e-05 804 4.900000e-01 2.412806e-05 805 5.000000e-01 2.678642e-05 806 5.100000e-01 2.954396e-05 807 5.200000e-01 3.238621e-05 808 5.300000e-01 3.529910e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 809 5.400000e-01 3.826925e-05 810 5.500000e-01 4.128423e-05 811 5.600000e-01 4.433265e-05 812 5.700000e-01 4.740427e-05 813 5.800000e-01 5.048999e-05 814 5.900000e-01 5.358183e-05 815 6.000000e-01 5.667284e-05 816 6.100000e-01 5.975706e-05 817 6.200000e-01 6.282940e-05 818 6.300000e-01 6.588559e-05 819 6.400000e-01 6.892202e-05 820 6.500000e-01 7.193573e-05 821 6.600000e-01 7.492428e-05 822 6.700000e-01 7.788569e-05 823 6.800000e-01 8.081838e-05 824 6.900000e-01 8.372110e-05 825 7.000000e-01 8.659289e-05 826 7.100000e-01 8.943303e-05 827 7.200000e-01 9.224099e-05 828 7.300000e-01 9.501643e-05 829 7.400000e-01 9.775913e-05 830 7.500000e-01 1.004690e-04 831 7.600000e-01 1.031461e-04 832 7.700000e-01 1.057904e-04 833 7.800000e-01 1.084022e-04 834 7.900000e-01 1.109816e-04 835 8.000000e-01 1.135289e-04 836 8.100000e-01 1.160443e-04 837 8.200000e-01 1.185283e-04 838 8.300000e-01 1.209810e-04 839 8.400000e-01 1.234029e-04 840 8.500000e-01 1.257944e-04 841 8.600000e-01 1.281557e-04 842 8.700000e-01 1.304874e-04 843 8.800000e-01 1.327897e-04 844 8.900000e-01 1.350632e-04 845 9.000000e-01 1.373080e-04 846 9.100000e-01 1.395248e-04 847 9.200000e-01 1.417138e-04 848 9.300000e-01 1.438754e-04 849 9.400000e-01 1.460100e-04 850 9.500000e-01 1.481181e-04 851 9.600000e-01 1.501999e-04 852 9.700000e-01 1.522559e-04 853 9.800000e-01 1.542864e-04 854 9.900000e-01 1.562918e-04 855 1.000000e+00 1.582724e-04 856 1.010000e+00 1.602287e-04 857 1.020000e+00 1.621609e-04 858 1.030000e+00 1.640694e-04 859 1.040000e+00 1.659545e-04 860 1.050000e+00 1.678166e-04 861 1.060000e+00 1.696560e-04 862 1.070000e+00 1.714730e-04 863 1.080000e+00 1.732680e-04 864 1.090000e+00 1.750412e-04 865 1.100000e+00 1.767930e-04 866 1.110000e+00 1.785236e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 867 1.120000e+00 1.802334e-04 868 1.130000e+00 1.819226e-04 869 1.140000e+00 1.835916e-04 870 1.150000e+00 1.852406e-04 871 1.160000e+00 1.868699e-04 872 1.170000e+00 1.884798e-04 873 1.180000e+00 1.900706e-04 874 1.190000e+00 1.916424e-04 875 1.200000e+00 1.931956e-04 876 1.210000e+00 1.947305e-04 877 1.220000e+00 1.962472e-04 878 1.230000e+00 1.977460e-04 879 1.240000e+00 1.992272e-04 880 1.250000e+00 2.006911e-04 881 1.260000e+00 2.021377e-04 882 1.270000e+00 2.035675e-04 883 1.280000e+00 2.049806e-04 884 1.290000e+00 2.063771e-04 885 1.300000e+00 2.077575e-04 886 1.310000e+00 2.091218e-04 887 1.320000e+00 2.104702e-04 888 1.330000e+00 2.118031e-04 889 1.340000e+00 2.131206e-04 890 1.350000e+00 2.144228e-04 891 1.360000e+00 2.157101e-04 892 1.370000e+00 2.169826e-04 893 1.380000e+00 2.182404e-04 894 1.390000e+00 2.194838e-04 895 1.400000e+00 2.207130e-04 896 1.410000e+00 2.219282e-04 897 1.420000e+00 2.231295e-04 898 1.430000e+00 2.243170e-04 899 1.440000e+00 2.254911e-04 900 1.450000e+00 2.266518e-04 901 1.460000e+00 2.277994e-04 902 1.470000e+00 2.289340e-04 903 1.480000e+00 2.300557e-04 904 1.490000e+00 2.311647e-04 905 1.500000e+00 2.322613e-04 906 0.000000e+00 1.468737e-10 907 1.000000e-02 2.126740e-10 908 2.000000e-02 3.077418e-10 909 3.000000e-02 4.449567e-10 910 4.000000e-02 6.427766e-10 911 5.000000e-02 9.275941e-10 912 6.000000e-02 1.337051e-09 913 7.000000e-02 1.924673e-09 914 8.000000e-02 2.766314e-09 915 9.000000e-02 3.969041e-09 916 1.000000e-01 5.683300e-09 917 1.100000e-01 8.119385e-09 918 1.200000e-01 1.156952e-08 919 1.300000e-01 1.643703e-08 920 1.400000e-01 2.327445e-08 921 1.500000e-01 3.283237e-08 922 1.600000e-01 4.612049e-08 923 1.700000e-01 6.447923e-08 924 1.800000e-01 8.967626e-08 Index v-sweep vs#branch -------------------------------------------------------------------------------- 925 1.900000e-01 1.240158e-07 926 2.000000e-01 1.704680e-07 927 2.100000e-01 2.328208e-07 928 2.200000e-01 3.158556e-07 929 2.300000e-01 4.255513e-07 930 2.400000e-01 5.693147e-07 931 2.500000e-01 7.562375e-07 932 2.600000e-01 9.973625e-07 933 2.700000e-01 1.305927e-06 934 2.800000e-01 1.697521e-06 935 2.900000e-01 2.190055e-06 936 3.000000e-01 2.803399e-06 937 3.100000e-01 3.558467e-06 938 3.200000e-01 4.475389e-06 939 3.300000e-01 5.569931e-06 940 3.400000e-01 6.846410e-06 941 3.500000e-01 8.288679e-06 942 3.600000e-01 9.872788e-06 943 3.700000e-01 1.159878e-05 944 3.800000e-01 1.347855e-05 945 3.900000e-01 1.551694e-05 946 4.000000e-01 1.771117e-05 947 4.100000e-01 2.005365e-05 948 4.200000e-01 2.253366e-05 949 4.300000e-01 2.513854e-05 950 4.400000e-01 2.785449e-05 951 4.500000e-01 3.066722e-05 952 4.600000e-01 3.356246e-05 953 4.700000e-01 3.652635e-05 954 4.800000e-01 3.954574e-05 955 4.900000e-01 4.260840e-05 956 5.000000e-01 4.570314e-05 957 5.100000e-01 4.881989e-05 958 5.200000e-01 5.194966e-05 959 5.300000e-01 5.508456e-05 960 5.400000e-01 5.821773e-05 961 5.500000e-01 6.134324e-05 962 5.600000e-01 6.445605e-05 963 5.700000e-01 6.755187e-05 964 5.800000e-01 7.062714e-05 965 5.900000e-01 7.367888e-05 966 6.000000e-01 7.670465e-05 967 6.100000e-01 7.970246e-05 968 6.200000e-01 8.267073e-05 969 6.300000e-01 8.560822e-05 970 6.400000e-01 8.851395e-05 971 6.500000e-01 9.138722e-05 972 6.600000e-01 9.422749e-05 973 6.700000e-01 9.703443e-05 974 6.800000e-01 9.980785e-05 975 6.900000e-01 1.025476e-04 976 7.000000e-01 1.052539e-04 977 7.100000e-01 1.079266e-04 978 7.200000e-01 1.105659e-04 979 7.300000e-01 1.131722e-04 980 7.400000e-01 1.157457e-04 981 7.500000e-01 1.182866e-04 982 7.600000e-01 1.207952e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 983 7.700000e-01 1.232721e-04 984 7.800000e-01 1.257174e-04 985 7.900000e-01 1.281316e-04 986 8.000000e-01 1.305152e-04 987 8.100000e-01 1.328684e-04 988 8.200000e-01 1.351917e-04 989 8.300000e-01 1.374854e-04 990 8.400000e-01 1.397501e-04 991 8.500000e-01 1.419861e-04 992 8.600000e-01 1.441939e-04 993 8.700000e-01 1.463737e-04 994 8.800000e-01 1.485260e-04 995 8.900000e-01 1.506513e-04 996 9.000000e-01 1.527498e-04 997 9.100000e-01 1.548221e-04 998 9.200000e-01 1.568684e-04 999 9.300000e-01 1.588891e-04 1000 9.400000e-01 1.608847e-04 1001 9.500000e-01 1.628554e-04 1002 9.600000e-01 1.648017e-04 1003 9.700000e-01 1.667239e-04 1004 9.800000e-01 1.686223e-04 1005 9.900000e-01 1.704973e-04 1006 1.000000e+00 1.723492e-04 1007 1.010000e+00 1.741784e-04 1008 1.020000e+00 1.759851e-04 1009 1.030000e+00 1.777698e-04 1010 1.040000e+00 1.795327e-04 1011 1.050000e+00 1.812741e-04 1012 1.060000e+00 1.829944e-04 1013 1.070000e+00 1.846937e-04 1014 1.080000e+00 1.863726e-04 1015 1.090000e+00 1.880311e-04 1016 1.100000e+00 1.896696e-04 1017 1.110000e+00 1.912885e-04 1018 1.120000e+00 1.928879e-04 1019 1.130000e+00 1.944681e-04 1020 1.140000e+00 1.960294e-04 1021 1.150000e+00 1.975721e-04 1022 1.160000e+00 1.990964e-04 1023 1.170000e+00 2.006026e-04 1024 1.180000e+00 2.020909e-04 1025 1.190000e+00 2.035616e-04 1026 1.200000e+00 2.050149e-04 1027 1.210000e+00 2.064511e-04 1028 1.220000e+00 2.078703e-04 1029 1.230000e+00 2.092728e-04 1030 1.240000e+00 2.106588e-04 1031 1.250000e+00 2.120287e-04 1032 1.260000e+00 2.133824e-04 1033 1.270000e+00 2.147204e-04 1034 1.280000e+00 2.160428e-04 1035 1.290000e+00 2.173498e-04 1036 1.300000e+00 2.186416e-04 1037 1.310000e+00 2.199184e-04 1038 1.320000e+00 2.211804e-04 1039 1.330000e+00 2.224278e-04 1040 1.340000e+00 2.236608e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1041 1.350000e+00 2.248795e-04 1042 1.360000e+00 2.260843e-04 1043 1.370000e+00 2.272752e-04 1044 1.380000e+00 2.284524e-04 1045 1.390000e+00 2.296161e-04 1046 1.400000e+00 2.307665e-04 1047 1.410000e+00 2.319037e-04 1048 1.420000e+00 2.330280e-04 1049 1.430000e+00 2.341394e-04 1050 1.440000e+00 2.352382e-04 1051 1.450000e+00 2.363245e-04 1052 1.460000e+00 2.373985e-04 1053 1.470000e+00 2.384602e-04 1054 1.480000e+00 2.395100e-04 1055 1.490000e+00 2.405478e-04 1056 1.500000e+00 2.415739e-04 1057 0.000000e+00 1.491864e-09 1058 1.000000e-02 2.158102e-09 1059 2.000000e-02 3.116114e-09 1060 3.000000e-02 4.490120e-09 1061 4.000000e-02 6.455027e-09 1062 5.000000e-02 9.255779e-09 1063 6.000000e-02 1.323331e-08 1064 7.000000e-02 1.885894e-08 1065 8.000000e-02 2.677935e-08 1066 9.000000e-02 3.787446e-08 1067 1.000000e-01 5.333102e-08 1068 1.100000e-01 7.473436e-08 1069 1.200000e-01 1.041815e-07 1070 1.300000e-01 1.444187e-07 1071 1.400000e-01 1.990065e-07 1072 1.500000e-01 2.725171e-07 1073 1.600000e-01 3.707627e-07 1074 1.700000e-01 5.010355e-07 1075 1.800000e-01 6.724479e-07 1076 1.900000e-01 8.962557e-07 1077 2.000000e-01 1.186173e-06 1078 2.100000e-01 1.558611e-06 1079 2.200000e-01 2.032706e-06 1080 2.300000e-01 2.629957e-06 1081 2.400000e-01 3.373140e-06 1082 2.500000e-01 4.283943e-06 1083 2.600000e-01 5.378000e-06 1084 2.700000e-01 6.654960e-06 1085 2.800000e-01 8.089410e-06 1086 2.900000e-01 9.656277e-06 1087 3.000000e-01 1.136243e-05 1088 3.100000e-01 1.322275e-05 1089 3.200000e-01 1.524300e-05 1090 3.300000e-01 1.742118e-05 1091 3.400000e-01 1.975043e-05 1092 3.500000e-01 2.222073e-05 1093 3.600000e-01 2.482002e-05 1094 3.700000e-01 2.753496e-05 1095 3.800000e-01 3.035163e-05 1096 3.900000e-01 3.325593e-05 1097 4.000000e-01 3.623406e-05 1098 4.100000e-01 3.927277e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1099 4.200000e-01 4.235965e-05 1100 4.300000e-01 4.548318e-05 1101 4.400000e-01 4.863291e-05 1102 4.500000e-01 5.179942e-05 1103 4.600000e-01 5.497437e-05 1104 4.700000e-01 5.815043e-05 1105 4.800000e-01 6.132120e-05 1106 4.900000e-01 6.448119e-05 1107 5.000000e-01 6.762572e-05 1108 5.100000e-01 7.075081e-05 1109 5.200000e-01 7.385316e-05 1110 5.300000e-01 7.693002e-05 1111 5.400000e-01 7.997913e-05 1112 5.500000e-01 8.299867e-05 1113 5.600000e-01 8.598719e-05 1114 5.700000e-01 8.894357e-05 1115 5.800000e-01 9.186694e-05 1116 5.900000e-01 9.475668e-05 1117 6.000000e-01 9.761235e-05 1118 6.100000e-01 1.004337e-04 1119 6.200000e-01 1.032205e-04 1120 6.300000e-01 1.059729e-04 1121 6.400000e-01 1.086908e-04 1122 6.500000e-01 1.113744e-04 1123 6.600000e-01 1.140240e-04 1124 6.700000e-01 1.166398e-04 1125 6.800000e-01 1.192220e-04 1126 6.900000e-01 1.217711e-04 1127 7.000000e-01 1.242874e-04 1128 7.100000e-01 1.267713e-04 1129 7.200000e-01 1.292232e-04 1130 7.300000e-01 1.316435e-04 1131 7.400000e-01 1.340325e-04 1132 7.500000e-01 1.363909e-04 1133 7.600000e-01 1.387188e-04 1134 7.700000e-01 1.410169e-04 1135 7.800000e-01 1.432855e-04 1136 7.900000e-01 1.455250e-04 1137 8.000000e-01 1.477359e-04 1138 8.100000e-01 1.499186e-04 1139 8.200000e-01 1.520735e-04 1140 8.300000e-01 1.542009e-04 1141 8.400000e-01 1.563014e-04 1142 8.500000e-01 1.583753e-04 1143 8.600000e-01 1.604230e-04 1144 8.700000e-01 1.624449e-04 1145 8.800000e-01 1.644413e-04 1146 8.900000e-01 1.664127e-04 1147 9.000000e-01 1.683594e-04 1148 9.100000e-01 1.702818e-04 1149 9.200000e-01 1.721803e-04 1150 9.300000e-01 1.740551e-04 1151 9.400000e-01 1.759066e-04 1152 9.500000e-01 1.777352e-04 1153 9.600000e-01 1.795412e-04 1154 9.700000e-01 1.813250e-04 1155 9.800000e-01 1.830868e-04 1156 9.900000e-01 1.848269e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1157 1.000000e+00 1.865458e-04 1158 1.010000e+00 1.882436e-04 1159 1.020000e+00 1.899207e-04 1160 1.030000e+00 1.915774e-04 1161 1.040000e+00 1.932140e-04 1162 1.050000e+00 1.948307e-04 1163 1.060000e+00 1.964279e-04 1164 1.070000e+00 1.980058e-04 1165 1.080000e+00 1.995646e-04 1166 1.090000e+00 2.011048e-04 1167 1.100000e+00 2.026264e-04 1168 1.110000e+00 2.041298e-04 1169 1.120000e+00 2.056152e-04 1170 1.130000e+00 2.070828e-04 1171 1.140000e+00 2.085330e-04 1172 1.150000e+00 2.099659e-04 1173 1.160000e+00 2.113819e-04 1174 1.170000e+00 2.127810e-04 1175 1.180000e+00 2.141636e-04 1176 1.190000e+00 2.155298e-04 1177 1.200000e+00 2.168800e-04 1178 1.210000e+00 2.182142e-04 1179 1.220000e+00 2.195328e-04 1180 1.230000e+00 2.208359e-04 1181 1.240000e+00 2.221237e-04 1182 1.250000e+00 2.233965e-04 1183 1.260000e+00 2.246544e-04 1184 1.270000e+00 2.258977e-04 1185 1.280000e+00 2.271264e-04 1186 1.290000e+00 2.283409e-04 1187 1.300000e+00 2.295413e-04 1188 1.310000e+00 2.307278e-04 1189 1.320000e+00 2.319006e-04 1190 1.330000e+00 2.330598e-04 1191 1.340000e+00 2.342056e-04 1192 1.350000e+00 2.353382e-04 1193 1.360000e+00 2.364578e-04 1194 1.370000e+00 2.375645e-04 1195 1.380000e+00 2.386586e-04 1196 1.390000e+00 2.397400e-04 1197 1.400000e+00 2.408091e-04 1198 1.410000e+00 2.418660e-04 1199 1.420000e+00 2.429108e-04 1200 1.430000e+00 2.439437e-04 1201 1.440000e+00 2.449648e-04 1202 1.450000e+00 2.459742e-04 1203 1.460000e+00 2.469722e-04 1204 1.470000e+00 2.479589e-04 1205 1.480000e+00 2.489344e-04 1206 1.490000e+00 2.498988e-04 1207 1.500000e+00 2.508523e-04 1208 0.000000e+00 1.048409e-08 1209 1.000000e-02 1.505832e-08 1210 2.000000e-02 2.154301e-08 1211 3.000000e-02 3.068721e-08 1212 4.000000e-02 4.350714e-08 1213 5.000000e-02 6.136848e-08 1214 6.000000e-02 8.608831e-08 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1215 7.000000e-02 1.200599e-07 1216 8.000000e-02 1.664038e-07 1217 9.000000e-02 2.291479e-07 1218 1.000000e-01 3.134426e-07 1219 1.100000e-01 4.258100e-07 1220 1.200000e-01 5.744308e-07 1221 1.300000e-01 7.694535e-07 1222 1.400000e-01 1.023296e-06 1223 1.500000e-01 1.350867e-06 1224 1.600000e-01 1.769554e-06 1225 1.700000e-01 2.298628e-06 1226 1.800000e-01 2.957947e-06 1227 1.900000e-01 3.764320e-06 1228 2.000000e-01 4.723621e-06 1229 2.100000e-01 5.822589e-06 1230 2.200000e-01 7.047310e-06 1231 2.300000e-01 8.409078e-06 1232 2.400000e-01 9.926061e-06 1233 2.500000e-01 1.160887e-05 1234 2.600000e-01 1.346102e-05 1235 2.700000e-01 1.548098e-05 1236 2.800000e-01 1.766340e-05 1237 2.900000e-01 1.999995e-05 1238 3.000000e-01 2.248005e-05 1239 3.100000e-01 2.509145e-05 1240 3.200000e-01 2.782085e-05 1241 3.300000e-01 3.065437e-05 1242 3.400000e-01 3.357803e-05 1243 3.500000e-01 3.657804e-05 1244 3.600000e-01 3.964117e-05 1245 3.700000e-01 4.275490e-05 1246 3.800000e-01 4.590759e-05 1247 3.900000e-01 4.908858e-05 1248 4.000000e-01 5.228822e-05 1249 4.100000e-01 5.549789e-05 1250 4.200000e-01 5.870995e-05 1251 4.300000e-01 6.191774e-05 1252 4.400000e-01 6.511545e-05 1253 4.500000e-01 6.829812e-05 1254 4.600000e-01 7.146152e-05 1255 4.700000e-01 7.460210e-05 1256 4.800000e-01 7.771688e-05 1257 4.900000e-01 8.080344e-05 1258 5.000000e-01 8.385979e-05 1259 5.100000e-01 8.688435e-05 1260 5.200000e-01 8.987589e-05 1261 5.300000e-01 9.283347e-05 1262 5.400000e-01 9.575638e-05 1263 5.500000e-01 9.864417e-05 1264 5.600000e-01 1.014965e-04 1265 5.700000e-01 1.043133e-04 1266 5.800000e-01 1.070944e-04 1267 5.900000e-01 1.098401e-04 1268 6.000000e-01 1.125503e-04 1269 6.100000e-01 1.152255e-04 1270 6.200000e-01 1.178658e-04 1271 6.300000e-01 1.204716e-04 1272 6.400000e-01 1.230433e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1273 6.500000e-01 1.255812e-04 1274 6.600000e-01 1.280859e-04 1275 6.700000e-01 1.305576e-04 1276 6.800000e-01 1.329970e-04 1277 6.900000e-01 1.354044e-04 1278 7.000000e-01 1.377803e-04 1279 7.100000e-01 1.401251e-04 1280 7.200000e-01 1.424394e-04 1281 7.300000e-01 1.447235e-04 1282 7.400000e-01 1.469780e-04 1283 7.500000e-01 1.492032e-04 1284 7.600000e-01 1.513997e-04 1285 7.700000e-01 1.535679e-04 1286 7.800000e-01 1.557081e-04 1287 7.900000e-01 1.578209e-04 1288 8.000000e-01 1.599067e-04 1289 8.100000e-01 1.619658e-04 1290 8.200000e-01 1.639987e-04 1291 8.300000e-01 1.660058e-04 1292 8.400000e-01 1.679874e-04 1293 8.500000e-01 1.699440e-04 1294 8.600000e-01 1.718760e-04 1295 8.700000e-01 1.737836e-04 1296 8.800000e-01 1.756673e-04 1297 8.900000e-01 1.775274e-04 1298 9.000000e-01 1.793644e-04 1299 9.100000e-01 1.811784e-04 1300 9.200000e-01 1.829699e-04 1301 9.300000e-01 1.847391e-04 1302 9.400000e-01 1.864865e-04 1303 9.500000e-01 1.882124e-04 1304 9.600000e-01 1.899170e-04 1305 9.700000e-01 1.916006e-04 1306 9.800000e-01 1.932636e-04 1307 9.900000e-01 1.949062e-04 1308 1.000000e+00 1.965289e-04 1309 1.010000e+00 1.981317e-04 1310 1.020000e+00 1.997150e-04 1311 1.030000e+00 2.012792e-04 1312 1.040000e+00 2.028244e-04 1313 1.050000e+00 2.043509e-04 1314 1.060000e+00 2.058591e-04 1315 1.070000e+00 2.073491e-04 1316 1.080000e+00 2.088211e-04 1317 1.090000e+00 2.102756e-04 1318 1.100000e+00 2.117126e-04 1319 1.110000e+00 2.131325e-04 1320 1.120000e+00 2.145354e-04 1321 1.130000e+00 2.159216e-04 1322 1.140000e+00 2.172914e-04 1323 1.150000e+00 2.186449e-04 1324 1.160000e+00 2.199824e-04 1325 1.170000e+00 2.213040e-04 1326 1.180000e+00 2.226101e-04 1327 1.190000e+00 2.239008e-04 1328 1.200000e+00 2.251763e-04 1329 1.210000e+00 2.264368e-04 1330 1.220000e+00 2.276825e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1331 1.230000e+00 2.289137e-04 1332 1.240000e+00 2.301304e-04 1333 1.250000e+00 2.313330e-04 1334 1.260000e+00 2.325215e-04 1335 1.270000e+00 2.336962e-04 1336 1.280000e+00 2.348572e-04 1337 1.290000e+00 2.360048e-04 1338 1.300000e+00 2.371391e-04 1339 1.310000e+00 2.382602e-04 1340 1.320000e+00 2.393683e-04 1341 1.330000e+00 2.404637e-04 1342 1.340000e+00 2.415465e-04 1343 1.350000e+00 2.426167e-04 1344 1.360000e+00 2.436747e-04 1345 1.370000e+00 2.447205e-04 1346 1.380000e+00 2.457543e-04 1347 1.390000e+00 2.467762e-04 1348 1.400000e+00 2.477865e-04 1349 1.410000e+00 2.487851e-04 1350 1.420000e+00 2.497724e-04 1351 1.430000e+00 2.507484e-04 1352 1.440000e+00 2.517133e-04 1353 1.450000e+00 2.526672e-04 1354 1.460000e+00 2.536102e-04 1355 1.470000e+00 2.545425e-04 1356 1.480000e+00 2.554642e-04 1357 1.490000e+00 2.563755e-04 1358 1.500000e+00 2.572764e-04 tmpk8ny_4pz/tests/bsim3soidd/pmosdd.mod0000644000175000017500000000403213546075722020350 0ustar carstencarsten*Model Card for BSIMDD2.0, floating body DD SOI PMOS *Released on 2/15/99 .Model P1 PMOS Level= 56 +TNOM = 27 TOX = 4.5E-09 TSI = 5e-8 TBOX = 8E-08 +MOBMOD = 2 CAPMOD = 3 SHMOD = 0 +WINT = 0 LINT = -2E-08 +VTH0 = -.52 K1 = .39 K2 = .1 K3 = 0 +KB1 = .95 K3B = 2.2 NLX = 7.2E-08 +DVT0 = .55 DVT1 = .28 DVT2 = -1.4 +DVT0W = 0 DVT1W = 0 DVT2W = 0 +NCH = 3.0E+17 NSUB = 1E+15 NGATE = 1E+20 +DVBD0 = 60.0 DVBD1 = 1.1 VBSA = -0.2 +KB3 = 2.2 DELP = 0.02 +ABP = 0.9 MXC = 0.9 ADICE0 = 0.93 +KBJT1 = 1.0E-08 EDL = .0000005 +NDIODE = 1.13 NTUN = 14.0 +ISBJT = 0.0 ISDIF = 1e-6 ISTUN = 0.0 ISREC = 0.0 +XBJT = 0.01 XDIF = 0.01 XREC = 0.01 XTUN = 0.001 +U0 = 145 UA = 1.3E-11 UB = 1.7E-18 UC = -4E-10 +W0 = 1.16E-06 AGS = .25 A1 = 0 A2 = 1 +B0 = .01 B1 = 10 +RDSW = 700 PRWG = 0 PRWB = -.2 WR = 1 +RBODY = 0.0 RBSH = 0.0 +A0 = 1.4 KETA = -.67 VSAT = 75000 +DWG = 0 DWB = 0 +ALPHA0 = 0.0 ALPHA1 = 1e-4 BETA0 = 19 +AII = 1.25 BII = 0.1e-7 CII = 0.8 DII = 0.6 +VOFF = -.14 NFACTOR = .7 CDSC = .00002 CDSCB = 0 +CDSCD = 0 CIT = 0 +PCLM = 2.9 PVAG = 12 PDIBLC1 = .18 PDIBLC2 = .004 +PDIBLCB = -.234 DROUT = .2 +DELTA = .01 ETA0 = .01 ETAB = 0 +DSUB = .3 RTH0 = .006 +CLC = .0000001 CLE = .6 CF = 1E-20 CKAPPA = .6 +CGDL = 1E-20 CGSL = 1E-20 KT1 = -.3 KT1L = 0 +KT2 = .022 UTE = -1.5 UA1 = 4.31E-09 UB1 = -7.61E-18 +UC1 = -5.6E-11 PRT = 760 AT = 22400 +CGSO = 1e-10 CGDO = 1e-10 CJSWG = 5e-10 TT=3e-10 +ASD = 0.3 CSDESW = 1e-12 tmpk8ny_4pz/tests/bsim3soidd/RampVg2.cir0000644000175000017500000000047013546075722020340 0ustar carstencarsten* BSIMSOI (DD) example * * SOI, Ramp Vg Vd d 0 1.5 Vg g 0 0.0 PULSE 0V 2V .02n .1n .1n .2n .6n Ve e 0 0.0 Vs s 0 0.0 Vb b 0 0.0 m1 d g s e n1 w=10u l=0.25u debug=-1 .option gmin=1e-20 itl1=200 itl2=200 abstol=1e-9 noacct .tran 1p 1.0ns .print tran @m1[Vbs], V(g)/10 .include nmosdd.mod .end tmpk8ny_4pz/tests/bsim3soidd/ring51.cir0000644000175000017500000000064513546075722020173 0ustar carstencarsten* 51 stage Ring-Osc. vin in out 2 pulse 2 0 0.1n 5n 1 1 1 vdd dd 0 dc 0 pulse 0 2 0 1n 1 1 1 vss ss 0 dc 0 ve sub 0 dc 0 xinv1 dd ss sub in out25 inv25 xinv2 dd ss sub out25 out50 inv25 xinv5 dd ss sub out50 out inv1 xinv11 dd ss sub out buf inv1 cout buf ss 1pF xdum ss dum .option itl1=500 gmin=1e-15 itl4=10 noacct *.dc vdd 0 2 0.01 .tran 0.2n 50n .include nmosdd.mod .include pmosdd.mod .include lib.h .end tmpk8ny_4pz/tests/bsim3soidd/t3.cir0000644000175000017500000000043413546075722017410 0ustar carstencarsten*model = BSIMSOI (DD) *Berkeley Spice Compatibility * * SOI NMOSFET, floating body simulation vd d 0 dc 1.5 vs s 0 dc 0 ve e 0 dc 0 vg g 0 dc 3 m1 d g s e n1 w=10u l=0.25u .option gmin=1e-25 itl1=500 noacct .dc vd 0 3 0.01 vg 0.5 3 0.5 .print dc v(g), i(vs) .include nmosdd.mod tmpk8ny_4pz/tests/bsim3soidd/inv2.out0000644000175000017500000002735513546075722020005 0ustar carstencarsten No. of Data Rows : 251 Circuit: * model = BSIMSOI (DD) Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Warning: Pd = 0 is less than W. Warning: Ps = 0 is less than W. Warning: Pd = 0 is less than W. Warning: Ps = 0 is less than W. * model = BSIMSOI (DD) -------------------------------------------------------------------------------- Index v-sweep v(in) v(out) -------------------------------------------------------------------------------- 0 0.000000e+00 0.000000e+00 2.500000e+00 1 1.000000e-02 1.000000e-02 2.500000e+00 2 2.000000e-02 2.000000e-02 2.500000e+00 3 3.000000e-02 3.000000e-02 2.500000e+00 4 4.000000e-02 4.000000e-02 2.500000e+00 5 5.000000e-02 5.000000e-02 2.500000e+00 6 6.000000e-02 6.000000e-02 2.499999e+00 7 7.000000e-02 7.000000e-02 2.499999e+00 8 8.000000e-02 8.000000e-02 2.499998e+00 9 9.000000e-02 9.000000e-02 2.499997e+00 10 1.000000e-01 1.000000e-01 2.499995e+00 11 1.100000e-01 1.100000e-01 2.499993e+00 12 1.200000e-01 1.200000e-01 2.499988e+00 13 1.300000e-01 1.300000e-01 2.499982e+00 14 1.400000e-01 1.400000e-01 2.499972e+00 15 1.500000e-01 1.500000e-01 2.499957e+00 16 1.600000e-01 1.600000e-01 2.499936e+00 17 1.700000e-01 1.700000e-01 2.499905e+00 18 1.800000e-01 1.800000e-01 2.499861e+00 19 1.900000e-01 1.900000e-01 2.499802e+00 20 2.000000e-01 2.000000e-01 2.499720e+00 21 2.100000e-01 2.100000e-01 2.499612e+00 22 2.200000e-01 2.200000e-01 2.499469e+00 23 2.300000e-01 2.300000e-01 2.499283e+00 24 2.400000e-01 2.400000e-01 2.499045e+00 25 2.500000e-01 2.500000e-01 2.498745e+00 26 2.600000e-01 2.600000e-01 2.498373e+00 27 2.700000e-01 2.700000e-01 2.497919e+00 28 2.800000e-01 2.800000e-01 2.497374e+00 29 2.900000e-01 2.900000e-01 2.496733e+00 30 3.000000e-01 3.000000e-01 2.495990e+00 31 3.100000e-01 3.100000e-01 2.495142e+00 32 3.200000e-01 3.200000e-01 2.494190e+00 33 3.300000e-01 3.300000e-01 2.493135e+00 34 3.400000e-01 3.400000e-01 2.491980e+00 35 3.500000e-01 3.500000e-01 2.490729e+00 36 3.600000e-01 3.600000e-01 2.489387e+00 37 3.700000e-01 3.700000e-01 2.487957e+00 38 3.800000e-01 3.800000e-01 2.486445e+00 39 3.900000e-01 3.900000e-01 2.484855e+00 40 4.000000e-01 4.000000e-01 2.483191e+00 41 4.100000e-01 4.100000e-01 2.481458e+00 42 4.200000e-01 4.200000e-01 2.479656e+00 43 4.300000e-01 4.300000e-01 2.477790e+00 44 4.400000e-01 4.400000e-01 2.475861e+00 45 4.500000e-01 4.500000e-01 2.473871e+00 46 4.600000e-01 4.600000e-01 2.471820e+00 47 4.700000e-01 4.700000e-01 2.469709e+00 48 4.800000e-01 4.800000e-01 2.467538e+00 49 4.900000e-01 4.900000e-01 2.465307e+00 50 5.000000e-01 5.000000e-01 2.463016e+00 51 5.100000e-01 5.100000e-01 2.460664e+00 52 5.200000e-01 5.200000e-01 2.458249e+00 53 5.300000e-01 5.300000e-01 2.455770e+00 54 5.400000e-01 5.400000e-01 2.453224e+00 Index v-sweep v(in) v(out) -------------------------------------------------------------------------------- 55 5.500000e-01 5.500000e-01 2.450609e+00 56 5.600000e-01 5.600000e-01 2.447923e+00 57 5.700000e-01 5.700000e-01 2.445160e+00 58 5.800000e-01 5.800000e-01 2.442319e+00 59 5.900000e-01 5.900000e-01 2.439392e+00 60 6.000000e-01 6.000000e-01 2.436377e+00 61 6.100000e-01 6.100000e-01 2.433266e+00 62 6.200000e-01 6.200000e-01 2.430054e+00 63 6.300000e-01 6.300000e-01 2.426735e+00 64 6.400000e-01 6.400000e-01 2.423302e+00 65 6.500000e-01 6.500000e-01 2.419749e+00 66 6.600000e-01 6.600000e-01 2.416072e+00 67 6.700000e-01 6.700000e-01 2.412267e+00 68 6.800000e-01 6.800000e-01 2.408329e+00 69 6.900000e-01 6.900000e-01 2.404258e+00 70 7.000000e-01 7.000000e-01 2.400051e+00 71 7.100000e-01 7.100000e-01 2.395707e+00 72 7.200000e-01 7.200000e-01 2.391227e+00 73 7.300000e-01 7.300000e-01 2.386609e+00 74 7.400000e-01 7.400000e-01 2.381853e+00 75 7.500000e-01 7.500000e-01 2.376958e+00 76 7.600000e-01 7.600000e-01 2.371922e+00 77 7.700000e-01 7.700000e-01 2.366745e+00 78 7.800000e-01 7.800000e-01 2.361424e+00 79 7.900000e-01 7.900000e-01 2.355957e+00 80 8.000000e-01 8.000000e-01 2.350341e+00 81 8.100000e-01 8.100000e-01 2.344571e+00 82 8.200000e-01 8.200000e-01 2.338645e+00 83 8.300000e-01 8.300000e-01 2.332557e+00 84 8.400000e-01 8.400000e-01 2.326304e+00 85 8.500000e-01 8.500000e-01 2.319878e+00 86 8.600000e-01 8.600000e-01 2.313274e+00 87 8.700000e-01 8.700000e-01 2.306485e+00 88 8.800000e-01 8.800000e-01 2.299503e+00 89 8.900000e-01 8.900000e-01 2.292321e+00 90 9.000000e-01 9.000000e-01 2.284930e+00 91 9.100000e-01 9.100000e-01 2.277319e+00 92 9.200000e-01 9.200000e-01 2.269479e+00 93 9.300000e-01 9.300000e-01 2.261396e+00 94 9.400000e-01 9.400000e-01 2.253058e+00 95 9.500000e-01 9.500000e-01 2.244452e+00 96 9.600000e-01 9.600000e-01 2.235561e+00 97 9.700000e-01 9.700000e-01 2.226367e+00 98 9.800000e-01 9.800000e-01 2.216853e+00 99 9.900000e-01 9.900000e-01 2.206995e+00 100 1.000000e+00 1.000000e+00 2.196772e+00 101 1.010000e+00 1.010000e+00 2.186154e+00 102 1.020000e+00 1.020000e+00 2.175114e+00 103 1.030000e+00 1.030000e+00 2.163616e+00 104 1.040000e+00 1.040000e+00 2.151623e+00 105 1.050000e+00 1.050000e+00 2.139089e+00 106 1.060000e+00 1.060000e+00 2.125965e+00 107 1.070000e+00 1.070000e+00 2.112191e+00 108 1.080000e+00 1.080000e+00 2.097698e+00 109 1.090000e+00 1.090000e+00 2.082405e+00 110 1.100000e+00 1.100000e+00 2.066214e+00 111 1.110000e+00 1.110000e+00 2.049008e+00 112 1.120000e+00 1.120000e+00 2.030641e+00 Index v-sweep v(in) v(out) -------------------------------------------------------------------------------- 113 1.130000e+00 1.130000e+00 2.010934e+00 114 1.140000e+00 1.140000e+00 1.989654e+00 115 1.150000e+00 1.150000e+00 1.966500e+00 116 1.160000e+00 1.160000e+00 1.941063e+00 117 1.170000e+00 1.170000e+00 1.912769e+00 118 1.180000e+00 1.180000e+00 1.880773e+00 119 1.190000e+00 1.190000e+00 1.843752e+00 120 1.200000e+00 1.200000e+00 1.799517e+00 121 1.210000e+00 1.210000e+00 1.744480e+00 122 1.220000e+00 1.220000e+00 1.674500e+00 123 1.230000e+00 1.230000e+00 1.590985e+00 124 1.240000e+00 1.240000e+00 1.503942e+00 125 1.250000e+00 1.250000e+00 1.341767e+00 126 1.260000e+00 1.260000e+00 1.088858e+00 127 1.270000e+00 1.270000e+00 8.944097e-01 128 1.280000e+00 1.280000e+00 7.997023e-01 129 1.290000e+00 1.290000e+00 7.421520e-01 130 1.300000e+00 1.300000e+00 6.964756e-01 131 1.310000e+00 1.310000e+00 6.584965e-01 132 1.320000e+00 1.320000e+00 6.255547e-01 133 1.330000e+00 1.330000e+00 5.963339e-01 134 1.340000e+00 1.340000e+00 5.699202e-01 135 1.350000e+00 1.350000e+00 5.457303e-01 136 1.360000e+00 1.360000e+00 5.233645e-01 137 1.370000e+00 1.370000e+00 5.025314e-01 138 1.380000e+00 1.380000e+00 4.830098e-01 139 1.390000e+00 1.390000e+00 4.646272e-01 140 1.400000e+00 1.400000e+00 4.472457e-01 141 1.410000e+00 1.410000e+00 4.307528e-01 142 1.420000e+00 1.420000e+00 4.150558e-01 143 1.430000e+00 1.430000e+00 4.000764e-01 144 1.440000e+00 1.440000e+00 3.857487e-01 145 1.450000e+00 1.450000e+00 3.720158e-01 146 1.460000e+00 1.460000e+00 3.588289e-01 147 1.470000e+00 1.470000e+00 3.461453e-01 148 1.480000e+00 1.480000e+00 3.339277e-01 149 1.490000e+00 1.490000e+00 3.221430e-01 150 1.500000e+00 1.500000e+00 3.107622e-01 151 1.510000e+00 1.510000e+00 2.997591e-01 152 1.520000e+00 1.520000e+00 2.891106e-01 153 1.530000e+00 1.530000e+00 2.787957e-01 154 1.540000e+00 1.540000e+00 2.687957e-01 155 1.550000e+00 1.550000e+00 2.590935e-01 156 1.560000e+00 1.560000e+00 2.496737e-01 157 1.570000e+00 1.570000e+00 2.405222e-01 158 1.580000e+00 1.580000e+00 2.316263e-01 159 1.590000e+00 1.590000e+00 2.229743e-01 160 1.600000e+00 1.600000e+00 2.145555e-01 161 1.610000e+00 1.610000e+00 2.063602e-01 162 1.620000e+00 1.620000e+00 1.983795e-01 163 1.630000e+00 1.630000e+00 1.906050e-01 164 1.640000e+00 1.640000e+00 1.830293e-01 165 1.650000e+00 1.650000e+00 1.756454e-01 166 1.660000e+00 1.660000e+00 1.684470e-01 167 1.670000e+00 1.670000e+00 1.614281e-01 168 1.680000e+00 1.680000e+00 1.545836e-01 169 1.690000e+00 1.690000e+00 1.479084e-01 170 1.700000e+00 1.700000e+00 1.413982e-01 Index v-sweep v(in) v(out) -------------------------------------------------------------------------------- 171 1.710000e+00 1.710000e+00 1.350488e-01 172 1.720000e+00 1.720000e+00 1.288568e-01 173 1.730000e+00 1.730000e+00 1.228188e-01 174 1.740000e+00 1.740000e+00 1.169320e-01 175 1.750000e+00 1.750000e+00 1.111939e-01 176 1.760000e+00 1.760000e+00 1.056025e-01 177 1.770000e+00 1.770000e+00 1.001561e-01 178 1.780000e+00 1.780000e+00 9.485343e-02 179 1.790000e+00 1.790000e+00 8.969369e-02 180 1.800000e+00 1.800000e+00 8.467656e-02 181 1.810000e+00 1.810000e+00 7.980223e-02 182 1.820000e+00 1.820000e+00 7.507144e-02 183 1.830000e+00 1.830000e+00 7.048552e-02 184 1.840000e+00 1.840000e+00 6.604639e-02 185 1.850000e+00 1.850000e+00 6.175652e-02 186 1.860000e+00 1.860000e+00 5.761877e-02 187 1.870000e+00 1.870000e+00 5.363615e-02 188 1.880000e+00 1.880000e+00 4.981126e-02 189 1.890000e+00 1.890000e+00 4.614572e-02 190 1.900000e+00 1.900000e+00 4.263946e-02 191 1.910000e+00 1.910000e+00 3.929045e-02 192 1.920000e+00 1.920000e+00 3.609476e-02 193 1.930000e+00 1.930000e+00 3.304738e-02 194 1.940000e+00 1.940000e+00 3.014314e-02 195 1.950000e+00 1.950000e+00 2.737758e-02 196 1.960000e+00 1.960000e+00 2.474758e-02 197 1.970000e+00 1.970000e+00 2.225157e-02 198 1.980000e+00 1.980000e+00 1.988949e-02 199 1.990000e+00 1.990000e+00 1.766257e-02 200 2.000000e+00 2.000000e+00 1.557309e-02 201 2.010000e+00 2.010000e+00 1.362395e-02 202 2.020000e+00 2.020000e+00 1.181830e-02 203 2.030000e+00 2.030000e+00 1.015909e-02 204 2.040000e+00 2.040000e+00 8.648552e-03 205 2.050000e+00 2.050000e+00 7.287712e-03 206 2.060000e+00 2.060000e+00 6.075896e-03 207 2.070000e+00 2.070000e+00 5.010461e-03 208 2.080000e+00 2.080000e+00 4.086553e-03 209 2.090000e+00 2.090000e+00 3.296794e-03 210 2.100000e+00 2.100000e+00 2.631421e-03 211 2.110000e+00 2.110000e+00 2.078812e-03 212 2.120000e+00 2.120000e+00 1.626150e-03 213 2.130000e+00 2.130000e+00 1.260149e-03 214 2.140000e+00 2.140000e+00 9.677601e-04 215 2.150000e+00 2.150000e+00 7.367541e-04 216 2.160000e+00 2.160000e+00 5.561244e-04 217 2.170000e+00 2.170000e+00 4.162698e-04 218 2.180000e+00 2.180000e+00 3.086613e-04 219 2.190000e+00 2.190000e+00 2.265229e-04 220 2.200000e+00 2.200000e+00 1.644520e-04 221 2.210000e+00 2.210000e+00 1.180565e-04 222 2.220000e+00 2.220000e+00 8.378794e-05 223 2.230000e+00 2.230000e+00 5.879595e-05 224 2.240000e+00 2.240000e+00 4.080883e-05 225 2.250000e+00 2.250000e+00 2.803541e-05 226 2.260000e+00 2.260000e+00 1.908344e-05 227 2.270000e+00 2.270000e+00 1.288950e-05 228 2.280000e+00 2.280000e+00 8.657819e-06 Index v-sweep v(in) v(out) -------------------------------------------------------------------------------- 229 2.290000e+00 2.290000e+00 5.808017e-06 230 2.300000e+00 2.300000e+00 3.929452e-06 231 2.310000e+00 2.310000e+00 2.709377e-06 232 2.320000e+00 2.320000e+00 1.888948e-06 233 2.330000e+00 2.330000e+00 1.319648e-06 234 2.340000e+00 2.340000e+00 9.225229e-07 235 2.350000e+00 2.350000e+00 6.447846e-07 236 2.360000e+00 2.360000e+00 4.503306e-07 237 2.370000e+00 2.370000e+00 3.142418e-07 238 2.380000e+00 2.380000e+00 2.190908e-07 239 2.390000e+00 2.390000e+00 1.526323e-07 240 2.400000e+00 2.400000e+00 1.062600e-07 241 2.410000e+00 2.410000e+00 7.393178e-08 242 2.420000e+00 2.420000e+00 5.141199e-08 243 2.430000e+00 2.430000e+00 3.573541e-08 244 2.440000e+00 2.440000e+00 2.482901e-08 245 2.450000e+00 2.450000e+00 1.724520e-08 246 2.460000e+00 2.460000e+00 1.197412e-08 247 2.470000e+00 2.470000e+00 8.311920e-09 248 2.480000e+00 2.480000e+00 5.768392e-09 249 2.490000e+00 2.490000e+00 4.002351e-09 250 2.500000e+00 2.500000e+00 2.776464e-09 tmpk8ny_4pz/tests/bsim3soidd/t4.out0000644000175000017500000013114413546075722017446 0ustar carstencarsten No. of Data Rows : 1359 Circuit: *model = BSIMSOI (DD) Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Warning: Pd = 0 is less than W. Warning: Ps = 0 is less than W. *model = BSIMSOI (DD) -------------------------------------------------------------------------------- Index v-sweep vs#branch -------------------------------------------------------------------------------- 0 0.000000e+00 4.146227e-12 1 1.000000e-02 5.646211e-12 2 2.000000e-02 8.545267e-12 3 3.000000e-02 1.226404e-11 4 4.000000e-02 1.759728e-11 5 5.000000e-02 2.524361e-11 6 6.000000e-02 3.620261e-11 7 7.000000e-02 5.190353e-11 8 8.000000e-02 7.438857e-11 9 9.000000e-02 1.065733e-10 10 1.000000e-01 1.526162e-10 11 1.100000e-01 2.184419e-10 12 1.200000e-01 3.124799e-10 13 1.300000e-01 4.467056e-10 14 1.400000e-01 6.381011e-10 15 1.500000e-01 9.106977e-10 16 1.600000e-01 1.298398e-09 17 1.700000e-01 1.848760e-09 18 1.800000e-01 2.628478e-09 19 1.900000e-01 3.730652e-09 20 2.000000e-01 5.284624e-09 21 2.100000e-01 7.469127e-09 22 2.200000e-01 1.052965e-08 23 2.300000e-01 1.480108e-08 24 2.400000e-01 2.073668e-08 25 2.500000e-01 2.894472e-08 26 2.600000e-01 4.023376e-08 27 2.700000e-01 5.566760e-08 28 2.800000e-01 7.663072e-08 29 2.900000e-01 1.049046e-07 30 3.000000e-01 1.427557e-07 31 3.100000e-01 1.930347e-07 32 3.200000e-01 2.592898e-07 33 3.300000e-01 3.458940e-07 34 3.400000e-01 4.581896e-07 35 3.500000e-01 6.026505e-07 36 3.600000e-01 7.870605e-07 37 3.700000e-01 1.020699e-06 38 3.800000e-01 1.314508e-06 39 3.900000e-01 1.681213e-06 40 4.000000e-01 2.135318e-06 41 4.100000e-01 2.692908e-06 42 4.200000e-01 3.371145e-06 43 4.300000e-01 4.187271e-06 44 4.400000e-01 5.156795e-06 45 4.500000e-01 6.290054e-06 46 4.600000e-01 7.586744e-06 47 4.700000e-01 9.036984e-06 48 4.800000e-01 1.063872e-05 49 4.900000e-01 1.239891e-05 50 5.000000e-01 1.432076e-05 51 5.100000e-01 1.640136e-05 52 5.200000e-01 1.863330e-05 53 5.300000e-01 2.100609e-05 54 5.400000e-01 2.350716e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 55 5.500000e-01 2.612264e-05 56 5.600000e-01 2.883806e-05 57 5.700000e-01 3.163886e-05 58 5.800000e-01 3.451090e-05 59 5.900000e-01 3.744072e-05 60 6.000000e-01 4.041582e-05 61 6.100000e-01 4.342478e-05 62 6.200000e-01 4.645735e-05 63 6.300000e-01 4.950441e-05 64 6.400000e-01 5.255799e-05 65 6.500000e-01 5.561117e-05 66 6.600000e-01 5.865801e-05 67 6.700000e-01 6.169348e-05 68 6.800000e-01 6.471330e-05 69 6.900000e-01 6.771394e-05 70 7.000000e-01 7.069245e-05 71 7.100000e-01 7.364643e-05 72 7.200000e-01 7.657391e-05 73 7.300000e-01 7.947334e-05 74 7.400000e-01 8.234349e-05 75 7.500000e-01 8.518340e-05 76 7.600000e-01 8.799237e-05 77 7.700000e-01 9.076988e-05 78 7.800000e-01 9.351559e-05 79 7.900000e-01 9.622928e-05 80 8.000000e-01 9.891086e-05 81 8.100000e-01 1.015603e-04 82 8.200000e-01 1.041778e-04 83 8.300000e-01 1.067633e-04 84 8.400000e-01 1.093172e-04 85 8.500000e-01 1.118396e-04 86 8.600000e-01 1.143308e-04 87 8.700000e-01 1.167912e-04 88 8.800000e-01 1.192210e-04 89 8.900000e-01 1.216206e-04 90 9.000000e-01 1.239903e-04 91 9.100000e-01 1.263305e-04 92 9.200000e-01 1.286416e-04 93 9.300000e-01 1.309239e-04 94 9.400000e-01 1.331779e-04 95 9.500000e-01 1.354039e-04 96 9.600000e-01 1.376022e-04 97 9.700000e-01 1.397733e-04 98 9.800000e-01 1.419176e-04 99 9.900000e-01 1.440353e-04 100 1.000000e+00 1.461269e-04 101 1.010000e+00 1.481928e-04 102 1.020000e+00 1.502333e-04 103 1.030000e+00 1.522487e-04 104 1.040000e+00 1.542394e-04 105 1.050000e+00 1.562059e-04 106 1.060000e+00 1.581483e-04 107 1.070000e+00 1.600671e-04 108 1.080000e+00 1.619625e-04 109 1.090000e+00 1.638350e-04 110 1.100000e+00 1.656848e-04 111 1.110000e+00 1.675123e-04 112 1.120000e+00 1.693178e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 113 1.130000e+00 1.711015e-04 114 1.140000e+00 1.728639e-04 115 1.150000e+00 1.746051e-04 116 1.160000e+00 1.763255e-04 117 1.170000e+00 1.780254e-04 118 1.180000e+00 1.797050e-04 119 1.190000e+00 1.813647e-04 120 1.200000e+00 1.830047e-04 121 1.210000e+00 1.846253e-04 122 1.220000e+00 1.862267e-04 123 1.230000e+00 1.878092e-04 124 1.240000e+00 1.893732e-04 125 1.250000e+00 1.909188e-04 126 1.260000e+00 1.924462e-04 127 1.270000e+00 1.939558e-04 128 1.280000e+00 1.954477e-04 129 1.290000e+00 1.969223e-04 130 1.300000e+00 1.983797e-04 131 1.310000e+00 1.998202e-04 132 1.320000e+00 2.012439e-04 133 1.330000e+00 2.026512e-04 134 1.340000e+00 2.040423e-04 135 1.350000e+00 2.054173e-04 136 1.360000e+00 2.067764e-04 137 1.370000e+00 2.081200e-04 138 1.380000e+00 2.094481e-04 139 1.390000e+00 2.107610e-04 140 1.400000e+00 2.120589e-04 141 1.410000e+00 2.133420e-04 142 1.420000e+00 2.146104e-04 143 1.430000e+00 2.158644e-04 144 1.440000e+00 2.171042e-04 145 1.450000e+00 2.183299e-04 146 1.460000e+00 2.195417e-04 147 1.470000e+00 2.207398e-04 148 1.480000e+00 2.219244e-04 149 1.490000e+00 2.230956e-04 150 1.500000e+00 2.242536e-04 151 0.000000e+00 4.146482e-12 152 1.000000e-02 5.646551e-12 153 2.000000e-02 8.545765e-12 154 3.000000e-02 1.226474e-11 155 4.000000e-02 1.759825e-11 156 5.000000e-02 2.524497e-11 157 6.000000e-02 3.620450e-11 158 7.000000e-02 5.190617e-11 159 8.000000e-02 7.439226e-11 160 9.000000e-02 1.065785e-10 161 1.000000e-01 1.526234e-10 162 1.100000e-01 2.184519e-10 163 1.200000e-01 3.124937e-10 164 1.300000e-01 4.467248e-10 165 1.400000e-01 6.381277e-10 166 1.500000e-01 9.107344e-10 167 1.600000e-01 1.298449e-09 168 1.700000e-01 1.848830e-09 169 1.800000e-01 2.628573e-09 170 1.900000e-01 3.730782e-09 Index v-sweep vs#branch -------------------------------------------------------------------------------- 171 2.000000e-01 5.284801e-09 172 2.100000e-01 7.469365e-09 173 2.200000e-01 1.052997e-08 174 2.300000e-01 1.480151e-08 175 2.400000e-01 2.073725e-08 176 2.500000e-01 2.894546e-08 177 2.600000e-01 4.023472e-08 178 2.700000e-01 5.566883e-08 179 2.800000e-01 7.663228e-08 180 2.900000e-01 1.049066e-07 181 3.000000e-01 1.427581e-07 182 3.100000e-01 1.930377e-07 183 3.200000e-01 2.592935e-07 184 3.300000e-01 3.458986e-07 185 3.400000e-01 4.581953e-07 186 3.500000e-01 6.026578e-07 187 3.600000e-01 7.870701e-07 188 3.700000e-01 1.020712e-06 189 3.800000e-01 1.314526e-06 190 3.900000e-01 1.681238e-06 191 4.000000e-01 2.135353e-06 192 4.100000e-01 2.692957e-06 193 4.200000e-01 3.371213e-06 194 4.300000e-01 4.187363e-06 195 4.400000e-01 5.156917e-06 196 4.500000e-01 6.290212e-06 197 4.600000e-01 7.586942e-06 198 4.700000e-01 9.037226e-06 199 4.800000e-01 1.063901e-05 200 4.900000e-01 1.239925e-05 201 5.000000e-01 1.432115e-05 202 5.100000e-01 1.640180e-05 203 5.200000e-01 1.863378e-05 204 5.300000e-01 2.100662e-05 205 5.400000e-01 2.350774e-05 206 5.500000e-01 2.612326e-05 207 5.600000e-01 2.883871e-05 208 5.700000e-01 3.163955e-05 209 5.800000e-01 3.451161e-05 210 5.900000e-01 3.744145e-05 211 6.000000e-01 4.041657e-05 212 6.100000e-01 4.342555e-05 213 6.200000e-01 4.645813e-05 214 6.300000e-01 4.950520e-05 215 6.400000e-01 5.255879e-05 216 6.500000e-01 5.561198e-05 217 6.600000e-01 5.865883e-05 218 6.700000e-01 6.169429e-05 219 6.800000e-01 6.471412e-05 220 6.900000e-01 6.771476e-05 221 7.000000e-01 7.069327e-05 222 7.100000e-01 7.364724e-05 223 7.200000e-01 7.657472e-05 224 7.300000e-01 7.947415e-05 225 7.400000e-01 8.234429e-05 226 7.500000e-01 8.518420e-05 227 7.600000e-01 8.799317e-05 228 7.700000e-01 9.077067e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 229 7.800000e-01 9.351637e-05 230 7.900000e-01 9.623006e-05 231 8.000000e-01 9.891163e-05 232 8.100000e-01 1.015611e-04 233 8.200000e-01 1.041785e-04 234 8.300000e-01 1.067641e-04 235 8.400000e-01 1.093179e-04 236 8.500000e-01 1.118403e-04 237 8.600000e-01 1.143316e-04 238 8.700000e-01 1.167919e-04 239 8.800000e-01 1.192217e-04 240 8.900000e-01 1.216213e-04 241 9.000000e-01 1.239910e-04 242 9.100000e-01 1.263312e-04 243 9.200000e-01 1.286423e-04 244 9.300000e-01 1.309246e-04 245 9.400000e-01 1.331786e-04 246 9.500000e-01 1.354046e-04 247 9.600000e-01 1.376029e-04 248 9.700000e-01 1.397740e-04 249 9.800000e-01 1.419182e-04 250 9.900000e-01 1.440360e-04 251 1.000000e+00 1.461276e-04 252 1.010000e+00 1.481934e-04 253 1.020000e+00 1.502339e-04 254 1.030000e+00 1.522493e-04 255 1.040000e+00 1.542401e-04 256 1.050000e+00 1.562065e-04 257 1.060000e+00 1.581489e-04 258 1.070000e+00 1.600677e-04 259 1.080000e+00 1.619632e-04 260 1.090000e+00 1.638356e-04 261 1.100000e+00 1.656854e-04 262 1.110000e+00 1.675129e-04 263 1.120000e+00 1.693184e-04 264 1.130000e+00 1.711021e-04 265 1.140000e+00 1.728644e-04 266 1.150000e+00 1.746057e-04 267 1.160000e+00 1.763261e-04 268 1.170000e+00 1.780259e-04 269 1.180000e+00 1.797056e-04 270 1.190000e+00 1.813652e-04 271 1.200000e+00 1.830052e-04 272 1.210000e+00 1.846258e-04 273 1.220000e+00 1.862272e-04 274 1.230000e+00 1.878098e-04 275 1.240000e+00 1.893737e-04 276 1.250000e+00 1.909193e-04 277 1.260000e+00 1.924467e-04 278 1.270000e+00 1.939563e-04 279 1.280000e+00 1.954483e-04 280 1.290000e+00 1.969228e-04 281 1.300000e+00 1.983802e-04 282 1.310000e+00 1.998207e-04 283 1.320000e+00 2.012444e-04 284 1.330000e+00 2.026517e-04 285 1.340000e+00 2.040428e-04 286 1.350000e+00 2.054178e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 287 1.360000e+00 2.067769e-04 288 1.370000e+00 2.081205e-04 289 1.380000e+00 2.094486e-04 290 1.390000e+00 2.107615e-04 291 1.400000e+00 2.120594e-04 292 1.410000e+00 2.133425e-04 293 1.420000e+00 2.146109e-04 294 1.430000e+00 2.158649e-04 295 1.440000e+00 2.171047e-04 296 1.450000e+00 2.183304e-04 297 1.460000e+00 2.195422e-04 298 1.470000e+00 2.207403e-04 299 1.480000e+00 2.219248e-04 300 1.490000e+00 2.230960e-04 301 1.500000e+00 2.242540e-04 302 0.000000e+00 4.147012e-12 303 1.000000e-02 5.647254e-12 304 2.000000e-02 8.546781e-12 305 3.000000e-02 1.226614e-11 306 4.000000e-02 1.760020e-11 307 5.000000e-02 2.524766e-11 308 6.000000e-02 3.620823e-11 309 7.000000e-02 5.191133e-11 310 8.000000e-02 7.439939e-11 311 9.000000e-02 1.065883e-10 312 1.000000e-01 1.526370e-10 313 1.100000e-01 2.184707e-10 314 1.200000e-01 3.125197e-10 315 1.300000e-01 4.467605e-10 316 1.400000e-01 6.381768e-10 317 1.500000e-01 9.108019e-10 318 1.600000e-01 1.298541e-09 319 1.700000e-01 1.848956e-09 320 1.800000e-01 2.628745e-09 321 1.900000e-01 3.731015e-09 322 2.000000e-01 5.285115e-09 323 2.100000e-01 7.469787e-09 324 2.200000e-01 1.053054e-08 325 2.300000e-01 1.480225e-08 326 2.400000e-01 2.073822e-08 327 2.500000e-01 2.894674e-08 328 2.600000e-01 4.023636e-08 329 2.700000e-01 5.567092e-08 330 2.800000e-01 7.663492e-08 331 2.900000e-01 1.049099e-07 332 3.000000e-01 1.427622e-07 333 3.100000e-01 1.930427e-07 334 3.200000e-01 2.592996e-07 335 3.300000e-01 3.459061e-07 336 3.400000e-01 4.582048e-07 337 3.500000e-01 6.026698e-07 338 3.600000e-01 7.870858e-07 339 3.700000e-01 1.020733e-06 340 3.800000e-01 1.314555e-06 341 3.900000e-01 1.681279e-06 342 4.000000e-01 2.135409e-06 343 4.100000e-01 2.693036e-06 344 4.200000e-01 3.371321e-06 Index v-sweep vs#branch -------------------------------------------------------------------------------- 345 4.300000e-01 4.187509e-06 346 4.400000e-01 5.157110e-06 347 4.500000e-01 6.290461e-06 348 4.600000e-01 7.587255e-06 349 4.700000e-01 9.037608e-06 350 4.800000e-01 1.063946e-05 351 4.900000e-01 1.239978e-05 352 5.000000e-01 1.432176e-05 353 5.100000e-01 1.640249e-05 354 5.200000e-01 1.863455e-05 355 5.300000e-01 2.100746e-05 356 5.400000e-01 2.350864e-05 357 5.500000e-01 2.612423e-05 358 5.600000e-01 2.883973e-05 359 5.700000e-01 3.164062e-05 360 5.800000e-01 3.451272e-05 361 5.900000e-01 3.744260e-05 362 6.000000e-01 4.041775e-05 363 6.100000e-01 4.342676e-05 364 6.200000e-01 4.645936e-05 365 6.300000e-01 4.950645e-05 366 6.400000e-01 5.256005e-05 367 6.500000e-01 5.561325e-05 368 6.600000e-01 5.866010e-05 369 6.700000e-01 6.169557e-05 370 6.800000e-01 6.471540e-05 371 6.900000e-01 6.771604e-05 372 7.000000e-01 7.069455e-05 373 7.100000e-01 7.364852e-05 374 7.200000e-01 7.657599e-05 375 7.300000e-01 7.947542e-05 376 7.400000e-01 8.234555e-05 377 7.500000e-01 8.518546e-05 378 7.600000e-01 8.799442e-05 379 7.700000e-01 9.077192e-05 380 7.800000e-01 9.351761e-05 381 7.900000e-01 9.623129e-05 382 8.000000e-01 9.891285e-05 383 8.100000e-01 1.015623e-04 384 8.200000e-01 1.041797e-04 385 8.300000e-01 1.067653e-04 386 8.400000e-01 1.093191e-04 387 8.500000e-01 1.118415e-04 388 8.600000e-01 1.143327e-04 389 8.700000e-01 1.167931e-04 390 8.800000e-01 1.192229e-04 391 8.900000e-01 1.216224e-04 392 9.000000e-01 1.239921e-04 393 9.100000e-01 1.263323e-04 394 9.200000e-01 1.286434e-04 395 9.300000e-01 1.309258e-04 396 9.400000e-01 1.331797e-04 397 9.500000e-01 1.354056e-04 398 9.600000e-01 1.376040e-04 399 9.700000e-01 1.397751e-04 400 9.800000e-01 1.419193e-04 401 9.900000e-01 1.440370e-04 402 1.000000e+00 1.461286e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 403 1.010000e+00 1.481945e-04 404 1.020000e+00 1.502349e-04 405 1.030000e+00 1.522503e-04 406 1.040000e+00 1.542411e-04 407 1.050000e+00 1.562075e-04 408 1.060000e+00 1.581499e-04 409 1.070000e+00 1.600687e-04 410 1.080000e+00 1.619641e-04 411 1.090000e+00 1.638366e-04 412 1.100000e+00 1.656864e-04 413 1.110000e+00 1.675139e-04 414 1.120000e+00 1.693193e-04 415 1.130000e+00 1.711030e-04 416 1.140000e+00 1.728654e-04 417 1.150000e+00 1.746066e-04 418 1.160000e+00 1.763270e-04 419 1.170000e+00 1.780268e-04 420 1.180000e+00 1.797065e-04 421 1.190000e+00 1.813661e-04 422 1.200000e+00 1.830061e-04 423 1.210000e+00 1.846267e-04 424 1.220000e+00 1.862281e-04 425 1.230000e+00 1.878107e-04 426 1.240000e+00 1.893746e-04 427 1.250000e+00 1.909201e-04 428 1.260000e+00 1.924476e-04 429 1.270000e+00 1.939571e-04 430 1.280000e+00 1.954491e-04 431 1.290000e+00 1.969236e-04 432 1.300000e+00 1.983810e-04 433 1.310000e+00 1.998215e-04 434 1.320000e+00 2.012452e-04 435 1.330000e+00 2.026525e-04 436 1.340000e+00 2.040436e-04 437 1.350000e+00 2.054185e-04 438 1.360000e+00 2.067777e-04 439 1.370000e+00 2.081212e-04 440 1.380000e+00 2.094493e-04 441 1.390000e+00 2.107622e-04 442 1.400000e+00 2.120601e-04 443 1.410000e+00 2.133432e-04 444 1.420000e+00 2.146116e-04 445 1.430000e+00 2.158656e-04 446 1.440000e+00 2.171054e-04 447 1.450000e+00 2.183311e-04 448 1.460000e+00 2.195429e-04 449 1.470000e+00 2.207410e-04 450 1.480000e+00 2.219255e-04 451 1.490000e+00 2.230967e-04 452 1.500000e+00 2.242547e-04 453 0.000000e+00 4.148791e-12 454 1.000000e-02 5.649556e-12 455 2.000000e-02 8.549996e-12 456 3.000000e-02 1.227048e-11 457 4.000000e-02 1.760605e-11 458 5.000000e-02 2.525557e-11 459 6.000000e-02 3.621893e-11 460 7.000000e-02 5.192582e-11 Index v-sweep vs#branch -------------------------------------------------------------------------------- 461 8.000000e-02 7.441903e-11 462 9.000000e-02 1.066149e-10 463 1.000000e-01 1.526731e-10 464 1.100000e-01 2.185196e-10 465 1.200000e-01 3.125860e-10 466 1.300000e-01 4.468504e-10 467 1.400000e-01 6.382984e-10 468 1.500000e-01 9.109662e-10 469 1.600000e-01 1.298763e-09 470 1.700000e-01 1.849255e-09 471 1.800000e-01 2.629145e-09 472 1.900000e-01 3.731550e-09 473 2.000000e-01 5.285828e-09 474 2.100000e-01 7.470732e-09 475 2.200000e-01 1.053178e-08 476 2.300000e-01 1.480388e-08 477 2.400000e-01 2.074034e-08 478 2.500000e-01 2.894946e-08 479 2.600000e-01 4.023983e-08 480 2.700000e-01 5.567530e-08 481 2.800000e-01 7.664038e-08 482 2.900000e-01 1.049166e-07 483 3.000000e-01 1.427704e-07 484 3.100000e-01 1.930527e-07 485 3.200000e-01 2.593118e-07 486 3.300000e-01 3.459211e-07 487 3.400000e-01 4.582232e-07 488 3.500000e-01 6.026931e-07 489 3.600000e-01 7.871160e-07 490 3.700000e-01 1.020773e-06 491 3.800000e-01 1.314610e-06 492 3.900000e-01 1.681355e-06 493 4.000000e-01 2.135515e-06 494 4.100000e-01 2.693183e-06 495 4.200000e-01 3.371522e-06 496 4.300000e-01 4.187779e-06 497 4.400000e-01 5.157463e-06 498 4.500000e-01 6.290913e-06 499 4.600000e-01 7.587820e-06 500 4.700000e-01 9.038297e-06 501 4.800000e-01 1.064028e-05 502 4.900000e-01 1.240074e-05 503 5.000000e-01 1.432286e-05 504 5.100000e-01 1.640373e-05 505 5.200000e-01 1.863593e-05 506 5.300000e-01 2.100897e-05 507 5.400000e-01 2.351027e-05 508 5.500000e-01 2.612596e-05 509 5.600000e-01 2.884157e-05 510 5.700000e-01 3.164254e-05 511 5.800000e-01 3.451473e-05 512 5.900000e-01 3.744467e-05 513 6.000000e-01 4.041988e-05 514 6.100000e-01 4.342893e-05 515 6.200000e-01 4.646157e-05 516 6.300000e-01 4.950869e-05 517 6.400000e-01 5.256231e-05 518 6.500000e-01 5.561553e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 519 6.600000e-01 5.866240e-05 520 6.700000e-01 6.169787e-05 521 6.800000e-01 6.471771e-05 522 6.900000e-01 6.771835e-05 523 7.000000e-01 7.069685e-05 524 7.100000e-01 7.365082e-05 525 7.200000e-01 7.657828e-05 526 7.300000e-01 7.947770e-05 527 7.400000e-01 8.234783e-05 528 7.500000e-01 8.518772e-05 529 7.600000e-01 8.799667e-05 530 7.700000e-01 9.077415e-05 531 7.800000e-01 9.351983e-05 532 7.900000e-01 9.623349e-05 533 8.000000e-01 9.891504e-05 534 8.100000e-01 1.015645e-04 535 8.200000e-01 1.041819e-04 536 8.300000e-01 1.067674e-04 537 8.400000e-01 1.093212e-04 538 8.500000e-01 1.118436e-04 539 8.600000e-01 1.143348e-04 540 8.700000e-01 1.167951e-04 541 8.800000e-01 1.192249e-04 542 8.900000e-01 1.216245e-04 543 9.000000e-01 1.239942e-04 544 9.100000e-01 1.263344e-04 545 9.200000e-01 1.286454e-04 546 9.300000e-01 1.309277e-04 547 9.400000e-01 1.331817e-04 548 9.500000e-01 1.354076e-04 549 9.600000e-01 1.376059e-04 550 9.700000e-01 1.397770e-04 551 9.800000e-01 1.419212e-04 552 9.900000e-01 1.440389e-04 553 1.000000e+00 1.461305e-04 554 1.010000e+00 1.481963e-04 555 1.020000e+00 1.502368e-04 556 1.030000e+00 1.522522e-04 557 1.040000e+00 1.542429e-04 558 1.050000e+00 1.562093e-04 559 1.060000e+00 1.581517e-04 560 1.070000e+00 1.600704e-04 561 1.080000e+00 1.619659e-04 562 1.090000e+00 1.638383e-04 563 1.100000e+00 1.656881e-04 564 1.110000e+00 1.675156e-04 565 1.120000e+00 1.693210e-04 566 1.130000e+00 1.711047e-04 567 1.140000e+00 1.728670e-04 568 1.150000e+00 1.746082e-04 569 1.160000e+00 1.763286e-04 570 1.170000e+00 1.780284e-04 571 1.180000e+00 1.797081e-04 572 1.190000e+00 1.813677e-04 573 1.200000e+00 1.830077e-04 574 1.210000e+00 1.846282e-04 575 1.220000e+00 1.862297e-04 576 1.230000e+00 1.878122e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 577 1.240000e+00 1.893761e-04 578 1.250000e+00 1.909217e-04 579 1.260000e+00 1.924491e-04 580 1.270000e+00 1.939586e-04 581 1.280000e+00 1.954506e-04 582 1.290000e+00 1.969251e-04 583 1.300000e+00 1.983825e-04 584 1.310000e+00 1.998229e-04 585 1.320000e+00 2.012467e-04 586 1.330000e+00 2.026540e-04 587 1.340000e+00 2.040450e-04 588 1.350000e+00 2.054199e-04 589 1.360000e+00 2.067791e-04 590 1.370000e+00 2.081226e-04 591 1.380000e+00 2.094507e-04 592 1.390000e+00 2.107636e-04 593 1.400000e+00 2.120615e-04 594 1.410000e+00 2.133445e-04 595 1.420000e+00 2.146130e-04 596 1.430000e+00 2.158670e-04 597 1.440000e+00 2.171067e-04 598 1.450000e+00 2.183324e-04 599 1.460000e+00 2.195442e-04 600 1.470000e+00 2.207422e-04 601 1.480000e+00 2.219268e-04 602 1.490000e+00 2.230980e-04 603 1.500000e+00 2.242560e-04 604 0.000000e+00 4.342370e-12 605 1.000000e-02 5.848072e-12 606 2.000000e-02 8.761122e-12 607 3.000000e-02 1.249202e-11 608 4.000000e-02 1.783257e-11 609 5.000000e-02 2.548303e-11 610 6.000000e-02 3.645059e-11 611 7.000000e-02 5.217063e-11 612 8.000000e-02 7.468824e-11 613 9.000000e-02 1.069212e-10 614 1.000000e-01 1.530310e-10 615 1.100000e-01 2.189467e-10 616 1.200000e-01 3.131039e-10 617 1.300000e-01 4.474865e-10 618 1.400000e-01 6.390874e-10 619 1.500000e-01 9.119524e-10 620 1.600000e-01 1.300003e-09 621 1.700000e-01 1.850819e-09 622 1.800000e-01 2.631125e-09 623 1.900000e-01 3.734059e-09 624 2.000000e-01 5.289006e-09 625 2.100000e-01 7.474753e-09 626 2.200000e-01 1.053686e-08 627 2.300000e-01 1.481026e-08 628 2.400000e-01 2.074831e-08 629 2.500000e-01 2.895936e-08 630 2.600000e-01 4.025203e-08 631 2.700000e-01 5.569021e-08 632 2.800000e-01 7.665845e-08 633 2.900000e-01 1.049383e-07 634 3.000000e-01 1.427963e-07 Index v-sweep vs#branch -------------------------------------------------------------------------------- 635 3.100000e-01 1.930834e-07 636 3.200000e-01 2.593481e-07 637 3.300000e-01 3.459644e-07 638 3.400000e-01 4.582756e-07 639 3.500000e-01 6.027579e-07 640 3.600000e-01 7.871986e-07 641 3.700000e-01 1.020881e-06 642 3.800000e-01 1.314755e-06 643 3.900000e-01 1.681552e-06 644 4.000000e-01 2.135786e-06 645 4.100000e-01 2.693551e-06 646 4.200000e-01 3.372018e-06 647 4.300000e-01 4.188435e-06 648 4.400000e-01 5.158314e-06 649 4.500000e-01 6.291990e-06 650 4.600000e-01 7.589152e-06 651 4.700000e-01 9.039911e-06 652 4.800000e-01 1.064220e-05 653 4.900000e-01 1.240298e-05 654 5.000000e-01 1.432543e-05 655 5.100000e-01 1.640662e-05 656 5.200000e-01 1.863913e-05 657 5.300000e-01 2.101247e-05 658 5.400000e-01 2.351405e-05 659 5.500000e-01 2.613000e-05 660 5.600000e-01 2.884584e-05 661 5.700000e-01 3.164702e-05 662 5.800000e-01 3.451938e-05 663 5.900000e-01 3.744948e-05 664 6.000000e-01 4.042482e-05 665 6.100000e-01 4.343398e-05 666 6.200000e-01 4.646670e-05 667 6.300000e-01 4.951389e-05 668 6.400000e-01 5.256757e-05 669 6.500000e-01 5.562083e-05 670 6.600000e-01 5.866772e-05 671 6.700000e-01 6.170322e-05 672 6.800000e-01 6.472306e-05 673 6.900000e-01 6.772370e-05 674 7.000000e-01 7.070220e-05 675 7.100000e-01 7.365615e-05 676 7.200000e-01 7.658360e-05 677 7.300000e-01 7.948300e-05 678 7.400000e-01 8.235310e-05 679 7.500000e-01 8.519297e-05 680 7.600000e-01 8.800188e-05 681 7.700000e-01 9.077934e-05 682 7.800000e-01 9.352498e-05 683 7.900000e-01 9.623861e-05 684 8.000000e-01 9.892013e-05 685 8.100000e-01 1.015695e-04 686 8.200000e-01 1.041869e-04 687 8.300000e-01 1.067724e-04 688 8.400000e-01 1.093262e-04 689 8.500000e-01 1.118485e-04 690 8.600000e-01 1.143397e-04 691 8.700000e-01 1.168000e-04 692 8.800000e-01 1.192297e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 693 8.900000e-01 1.216292e-04 694 9.000000e-01 1.239989e-04 695 9.100000e-01 1.263390e-04 696 9.200000e-01 1.286500e-04 697 9.300000e-01 1.309323e-04 698 9.400000e-01 1.331862e-04 699 9.500000e-01 1.354121e-04 700 9.600000e-01 1.376104e-04 701 9.700000e-01 1.397814e-04 702 9.800000e-01 1.419256e-04 703 9.900000e-01 1.440433e-04 704 1.000000e+00 1.461348e-04 705 1.010000e+00 1.482006e-04 706 1.020000e+00 1.502410e-04 707 1.030000e+00 1.522564e-04 708 1.040000e+00 1.542471e-04 709 1.050000e+00 1.562134e-04 710 1.060000e+00 1.581558e-04 711 1.070000e+00 1.600745e-04 712 1.080000e+00 1.619699e-04 713 1.090000e+00 1.638423e-04 714 1.100000e+00 1.656921e-04 715 1.110000e+00 1.675195e-04 716 1.120000e+00 1.693249e-04 717 1.130000e+00 1.711086e-04 718 1.140000e+00 1.728709e-04 719 1.150000e+00 1.746120e-04 720 1.160000e+00 1.763324e-04 721 1.170000e+00 1.780322e-04 722 1.180000e+00 1.797118e-04 723 1.190000e+00 1.813714e-04 724 1.200000e+00 1.830114e-04 725 1.210000e+00 1.846319e-04 726 1.220000e+00 1.862333e-04 727 1.230000e+00 1.878158e-04 728 1.240000e+00 1.893797e-04 729 1.250000e+00 1.909252e-04 730 1.260000e+00 1.924526e-04 731 1.270000e+00 1.939621e-04 732 1.280000e+00 1.954540e-04 733 1.290000e+00 1.969285e-04 734 1.300000e+00 1.983859e-04 735 1.310000e+00 1.998263e-04 736 1.320000e+00 2.012500e-04 737 1.330000e+00 2.026573e-04 738 1.340000e+00 2.040482e-04 739 1.350000e+00 2.054232e-04 740 1.360000e+00 2.067823e-04 741 1.370000e+00 2.081258e-04 742 1.380000e+00 2.094539e-04 743 1.390000e+00 2.107668e-04 744 1.400000e+00 2.120646e-04 745 1.410000e+00 2.133476e-04 746 1.420000e+00 2.146160e-04 747 1.430000e+00 2.158700e-04 748 1.440000e+00 2.171097e-04 749 1.450000e+00 2.183354e-04 750 1.460000e+00 2.195472e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 751 1.470000e+00 2.207452e-04 752 1.480000e+00 2.219297e-04 753 1.490000e+00 2.231009e-04 754 1.500000e+00 2.242589e-04 755 0.000000e+00 1.035825e-11 756 1.000000e-02 1.374050e-11 757 2.000000e-02 1.989926e-11 758 3.000000e-02 2.757713e-11 759 4.000000e-02 3.821258e-11 760 5.000000e-02 5.294171e-11 761 6.000000e-02 7.333502e-11 762 7.000000e-02 1.015622e-10 763 8.000000e-02 1.406188e-10 764 9.000000e-02 1.946371e-10 765 1.000000e-01 2.693124e-10 766 1.100000e-01 3.724855e-10 767 1.200000e-01 5.149374e-10 768 1.300000e-01 7.114699e-10 769 1.400000e-01 9.823713e-10 770 1.500000e-01 1.355395e-09 771 1.600000e-01 1.868398e-09 772 1.700000e-01 2.572718e-09 773 1.800000e-01 3.538056e-09 774 1.900000e-01 4.858667e-09 775 2.000000e-01 6.661560e-09 776 2.100000e-01 9.117327e-09 777 2.200000e-01 1.245447e-08 778 2.300000e-01 1.697864e-08 779 2.400000e-01 2.309950e-08 780 2.500000e-01 3.137067e-08 781 2.600000e-01 4.255412e-08 782 2.700000e-01 5.772124e-08 783 2.800000e-01 7.835827e-08 784 2.900000e-01 1.063745e-07 785 3.000000e-01 1.440740e-07 786 3.100000e-01 1.942644e-07 787 3.200000e-01 2.604440e-07 788 3.300000e-01 3.469806e-07 789 3.400000e-01 4.592439e-07 790 3.500000e-01 6.037297e-07 791 3.600000e-01 7.882339e-07 792 3.700000e-01 1.022048e-06 793 3.800000e-01 1.316131e-06 794 3.900000e-01 1.683226e-06 795 4.000000e-01 2.137861e-06 796 4.100000e-01 2.696140e-06 797 4.200000e-01 3.375239e-06 798 4.300000e-01 4.192406e-06 799 4.400000e-01 5.163146e-06 800 4.500000e-01 6.297792e-06 801 4.600000e-01 7.596049e-06 802 4.700000e-01 9.048061e-06 803 4.800000e-01 1.065176e-05 804 4.900000e-01 1.241405e-05 805 5.000000e-01 1.433806e-05 806 5.100000e-01 1.642081e-05 807 5.200000e-01 1.865485e-05 808 5.300000e-01 2.102965e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 809 5.400000e-01 2.353259e-05 810 5.500000e-01 2.614978e-05 811 5.600000e-01 2.886674e-05 812 5.700000e-01 3.166891e-05 813 5.800000e-01 3.454213e-05 814 5.900000e-01 3.747297e-05 815 6.000000e-01 4.044894e-05 816 6.100000e-01 4.345862e-05 817 6.200000e-01 4.649177e-05 818 6.300000e-01 4.953930e-05 819 6.400000e-01 5.259324e-05 820 6.500000e-01 5.564669e-05 821 6.600000e-01 5.869372e-05 822 6.700000e-01 6.172929e-05 823 6.800000e-01 6.474917e-05 824 6.900000e-01 6.774981e-05 825 7.000000e-01 7.072828e-05 826 7.100000e-01 7.368217e-05 827 7.200000e-01 7.660954e-05 828 7.300000e-01 7.950884e-05 829 7.400000e-01 8.237882e-05 830 7.500000e-01 8.521855e-05 831 7.600000e-01 8.802733e-05 832 7.700000e-01 9.080463e-05 833 7.800000e-01 9.355011e-05 834 7.900000e-01 9.626357e-05 835 8.000000e-01 9.894491e-05 836 8.100000e-01 1.015941e-04 837 8.200000e-01 1.042113e-04 838 8.300000e-01 1.067966e-04 839 8.400000e-01 1.093502e-04 840 8.500000e-01 1.118724e-04 841 8.600000e-01 1.143634e-04 842 8.700000e-01 1.168235e-04 843 8.800000e-01 1.192530e-04 844 8.900000e-01 1.216523e-04 845 9.000000e-01 1.240218e-04 846 9.100000e-01 1.263618e-04 847 9.200000e-01 1.286726e-04 848 9.300000e-01 1.309547e-04 849 9.400000e-01 1.332084e-04 850 9.500000e-01 1.354341e-04 851 9.600000e-01 1.376322e-04 852 9.700000e-01 1.398031e-04 853 9.800000e-01 1.419470e-04 854 9.900000e-01 1.440645e-04 855 1.000000e+00 1.461559e-04 856 1.010000e+00 1.482215e-04 857 1.020000e+00 1.502618e-04 858 1.030000e+00 1.522770e-04 859 1.040000e+00 1.542675e-04 860 1.050000e+00 1.562337e-04 861 1.060000e+00 1.581759e-04 862 1.070000e+00 1.600944e-04 863 1.080000e+00 1.619896e-04 864 1.090000e+00 1.638619e-04 865 1.100000e+00 1.657115e-04 866 1.110000e+00 1.675388e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 867 1.120000e+00 1.693440e-04 868 1.130000e+00 1.711275e-04 869 1.140000e+00 1.728897e-04 870 1.150000e+00 1.746307e-04 871 1.160000e+00 1.763509e-04 872 1.170000e+00 1.780505e-04 873 1.180000e+00 1.797300e-04 874 1.190000e+00 1.813894e-04 875 1.200000e+00 1.830292e-04 876 1.210000e+00 1.846496e-04 877 1.220000e+00 1.862509e-04 878 1.230000e+00 1.878332e-04 879 1.240000e+00 1.893970e-04 880 1.250000e+00 1.909423e-04 881 1.260000e+00 1.924696e-04 882 1.270000e+00 1.939790e-04 883 1.280000e+00 1.954708e-04 884 1.290000e+00 1.969451e-04 885 1.300000e+00 1.984023e-04 886 1.310000e+00 1.998426e-04 887 1.320000e+00 2.012662e-04 888 1.330000e+00 2.026734e-04 889 1.340000e+00 2.040642e-04 890 1.350000e+00 2.054390e-04 891 1.360000e+00 2.067980e-04 892 1.370000e+00 2.081414e-04 893 1.380000e+00 2.094694e-04 894 1.390000e+00 2.107821e-04 895 1.400000e+00 2.120798e-04 896 1.410000e+00 2.133628e-04 897 1.420000e+00 2.146310e-04 898 1.430000e+00 2.158849e-04 899 1.440000e+00 2.171245e-04 900 1.450000e+00 2.183500e-04 901 1.460000e+00 2.195617e-04 902 1.470000e+00 2.207596e-04 903 1.480000e+00 2.219441e-04 904 1.490000e+00 2.231151e-04 905 1.500000e+00 2.242730e-04 906 0.000000e+00 2.888814e-11 907 1.000000e-02 3.985200e-11 908 2.000000e-02 5.497377e-11 909 3.000000e-02 7.582477e-11 910 4.000000e-02 1.045667e-10 911 5.000000e-02 1.441716e-10 912 6.000000e-02 1.987217e-10 913 7.000000e-02 2.738195e-10 914 8.000000e-02 3.771447e-10 915 9.000000e-02 5.192109e-10 916 1.000000e-01 7.143893e-10 917 1.100000e-01 9.822894e-10 918 1.200000e-01 1.349613e-09 919 1.300000e-01 1.852634e-09 920 1.400000e-01 2.540492e-09 921 1.500000e-01 3.479546e-09 922 1.600000e-01 4.759021e-09 923 1.700000e-01 6.497972e-09 924 1.800000e-01 8.855179e-09 Index v-sweep vs#branch -------------------------------------------------------------------------------- 925 1.900000e-01 1.204107e-08 926 2.000000e-01 1.633276e-08 927 2.100000e-01 2.209272e-08 928 2.200000e-01 2.979157e-08 929 2.300000e-01 4.003547e-08 930 2.400000e-01 5.359841e-08 931 2.500000e-01 7.145981e-08 932 2.600000e-01 9.484748e-08 933 2.700000e-01 1.252861e-07 934 2.800000e-01 1.646516e-07 935 2.900000e-01 2.152318e-07 936 3.000000e-01 2.797944e-07 937 3.100000e-01 3.616633e-07 938 3.200000e-01 4.648060e-07 939 3.300000e-01 5.939315e-07 940 3.400000e-01 7.546012e-07 941 3.500000e-01 9.533483e-07 942 3.600000e-01 1.197800e-06 943 3.700000e-01 1.496793e-06 944 3.800000e-01 1.860454e-06 945 3.900000e-01 2.300243e-06 946 4.000000e-01 2.828906e-06 947 4.100000e-01 3.460354e-06 948 4.200000e-01 4.209458e-06 949 4.300000e-01 5.091849e-06 950 4.400000e-01 6.123857e-06 951 4.500000e-01 7.322601e-06 952 4.600000e-01 8.704781e-06 953 4.700000e-01 1.028153e-05 954 4.800000e-01 1.205570e-05 955 4.900000e-01 1.402401e-05 956 5.000000e-01 1.617661e-05 957 5.100000e-01 1.849841e-05 958 5.200000e-01 2.097175e-05 959 5.300000e-01 2.357818e-05 960 5.400000e-01 2.629938e-05 961 5.500000e-01 2.911767e-05 962 5.600000e-01 3.201639e-05 963 5.700000e-01 3.498009e-05 964 5.800000e-01 3.799462e-05 965 5.900000e-01 4.104726e-05 966 6.000000e-01 4.412668e-05 967 6.100000e-01 4.722288e-05 968 6.200000e-01 5.032719e-05 969 6.300000e-01 5.343210e-05 970 6.400000e-01 5.653120e-05 971 6.500000e-01 5.961905e-05 972 6.600000e-01 6.269109e-05 973 6.700000e-01 6.574352e-05 974 6.800000e-01 6.877321e-05 975 6.900000e-01 7.177759e-05 976 7.000000e-01 7.475460e-05 977 7.100000e-01 7.770259e-05 978 7.200000e-01 8.062027e-05 979 7.300000e-01 8.350665e-05 980 7.400000e-01 8.636099e-05 981 7.500000e-01 8.918278e-05 982 7.600000e-01 9.197165e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 983 7.700000e-01 9.472742e-05 984 7.800000e-01 9.744999e-05 985 7.900000e-01 1.001394e-04 986 8.000000e-01 1.027957e-04 987 8.100000e-01 1.054192e-04 988 8.200000e-01 1.080100e-04 989 8.300000e-01 1.105683e-04 990 8.400000e-01 1.130946e-04 991 8.500000e-01 1.155891e-04 992 8.600000e-01 1.180521e-04 993 8.700000e-01 1.204841e-04 994 8.800000e-01 1.228855e-04 995 8.900000e-01 1.252565e-04 996 9.000000e-01 1.275977e-04 997 9.100000e-01 1.299094e-04 998 9.200000e-01 1.321920e-04 999 9.300000e-01 1.344459e-04 1000 9.400000e-01 1.366716e-04 1001 9.500000e-01 1.388693e-04 1002 9.600000e-01 1.410396e-04 1003 9.700000e-01 1.431828e-04 1004 9.800000e-01 1.452992e-04 1005 9.900000e-01 1.473894e-04 1006 1.000000e+00 1.494536e-04 1007 1.010000e+00 1.514923e-04 1008 1.020000e+00 1.535058e-04 1009 1.030000e+00 1.554944e-04 1010 1.040000e+00 1.574586e-04 1011 1.050000e+00 1.593986e-04 1012 1.060000e+00 1.613149e-04 1013 1.070000e+00 1.632078e-04 1014 1.080000e+00 1.650776e-04 1015 1.090000e+00 1.669246e-04 1016 1.100000e+00 1.687492e-04 1017 1.110000e+00 1.705517e-04 1018 1.120000e+00 1.723324e-04 1019 1.130000e+00 1.740917e-04 1020 1.140000e+00 1.758297e-04 1021 1.150000e+00 1.775469e-04 1022 1.160000e+00 1.792434e-04 1023 1.170000e+00 1.809197e-04 1024 1.180000e+00 1.825760e-04 1025 1.190000e+00 1.842126e-04 1026 1.200000e+00 1.858297e-04 1027 1.210000e+00 1.874276e-04 1028 1.220000e+00 1.890066e-04 1029 1.230000e+00 1.905669e-04 1030 1.240000e+00 1.921089e-04 1031 1.250000e+00 1.936327e-04 1032 1.260000e+00 1.951385e-04 1033 1.270000e+00 1.966268e-04 1034 1.280000e+00 1.980976e-04 1035 1.290000e+00 1.995513e-04 1036 1.300000e+00 2.009880e-04 1037 1.310000e+00 2.024080e-04 1038 1.320000e+00 2.038115e-04 1039 1.330000e+00 2.051987e-04 1040 1.340000e+00 2.065699e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1041 1.350000e+00 2.079252e-04 1042 1.360000e+00 2.092649e-04 1043 1.370000e+00 2.105892e-04 1044 1.380000e+00 2.118983e-04 1045 1.390000e+00 2.131923e-04 1046 1.400000e+00 2.144715e-04 1047 1.410000e+00 2.157361e-04 1048 1.420000e+00 2.169863e-04 1049 1.430000e+00 2.182221e-04 1050 1.440000e+00 2.194440e-04 1051 1.450000e+00 2.206519e-04 1052 1.460000e+00 2.218462e-04 1053 1.470000e+00 2.230269e-04 1054 1.480000e+00 2.241942e-04 1055 1.490000e+00 2.253484e-04 1056 1.500000e+00 2.264895e-04 1057 0.000000e+00 9.353506e-11 1058 1.000000e-02 1.279145e-10 1059 2.000000e-02 1.750465e-10 1060 3.000000e-02 2.396334e-10 1061 4.000000e-02 3.280945e-10 1062 5.000000e-02 4.491831e-10 1063 6.000000e-02 6.148191e-10 1064 7.000000e-02 8.412100e-10 1065 8.000000e-02 1.150353e-09 1066 9.000000e-02 1.572042e-09 1067 1.000000e-01 2.146534e-09 1068 1.100000e-01 2.928076e-09 1069 1.200000e-01 3.989531e-09 1070 1.300000e-01 5.428422e-09 1071 1.400000e-01 7.374732e-09 1072 1.500000e-01 1.000091e-08 1073 1.600000e-01 1.353437e-08 1074 1.700000e-01 1.827214e-08 1075 1.800000e-01 2.460148e-08 1076 1.900000e-01 3.302316e-08 1077 2.000000e-01 4.417953e-08 1078 2.100000e-01 5.888767e-08 1079 2.200000e-01 7.817794e-08 1080 2.300000e-01 1.033380e-07 1081 2.400000e-01 1.359629e-07 1082 2.500000e-01 1.780104e-07 1083 2.600000e-01 2.318645e-07 1084 2.700000e-01 3.004048e-07 1085 2.800000e-01 3.870860e-07 1086 2.900000e-01 4.960270e-07 1087 3.000000e-01 6.321102e-07 1088 3.100000e-01 8.010920e-07 1089 3.200000e-01 1.009717e-06 1090 3.300000e-01 1.265831e-06 1091 3.400000e-01 1.578474e-06 1092 3.500000e-01 1.957932e-06 1093 3.600000e-01 2.415719e-06 1094 3.700000e-01 2.964459e-06 1095 3.800000e-01 3.617623e-06 1096 3.900000e-01 4.389115e-06 1097 4.000000e-01 5.292685e-06 1098 4.100000e-01 6.341219e-06 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1099 4.200000e-01 7.545935e-06 1100 4.300000e-01 8.915619e-06 1101 4.400000e-01 1.045596e-05 1102 4.500000e-01 1.216909e-05 1103 4.600000e-01 1.405338e-05 1104 4.700000e-01 1.610353e-05 1105 4.800000e-01 1.831121e-05 1106 4.900000e-01 2.066572e-05 1107 5.000000e-01 2.315455e-05 1108 5.100000e-01 2.576403e-05 1109 5.200000e-01 2.847997e-05 1110 5.300000e-01 3.128834e-05 1111 5.400000e-01 3.417569e-05 1112 5.500000e-01 3.712954e-05 1113 5.600000e-01 4.013867e-05 1114 5.700000e-01 4.319316e-05 1115 5.800000e-01 4.628432e-05 1116 5.900000e-01 4.940421e-05 1117 6.000000e-01 5.254512e-05 1118 6.100000e-01 5.569889e-05 1119 6.200000e-01 5.885691e-05 1120 6.300000e-01 6.201051e-05 1121 6.400000e-01 6.515170e-05 1122 6.500000e-01 6.827378e-05 1123 6.600000e-01 7.137140e-05 1124 6.700000e-01 7.444056e-05 1125 6.800000e-01 7.747833e-05 1126 6.900000e-01 8.048263e-05 1127 7.000000e-01 8.345202e-05 1128 7.100000e-01 8.638557e-05 1129 7.200000e-01 8.928269e-05 1130 7.300000e-01 9.214309e-05 1131 7.400000e-01 9.496667e-05 1132 7.500000e-01 9.775351e-05 1133 7.600000e-01 1.005038e-04 1134 7.700000e-01 1.032178e-04 1135 7.800000e-01 1.058959e-04 1136 7.900000e-01 1.085384e-04 1137 8.000000e-01 1.111459e-04 1138 8.100000e-01 1.137187e-04 1139 8.200000e-01 1.162574e-04 1140 8.300000e-01 1.187625e-04 1141 8.400000e-01 1.212344e-04 1142 8.500000e-01 1.236737e-04 1143 8.600000e-01 1.260808e-04 1144 8.700000e-01 1.284563e-04 1145 8.800000e-01 1.308007e-04 1146 8.900000e-01 1.331145e-04 1147 9.000000e-01 1.353982e-04 1148 9.100000e-01 1.376522e-04 1149 9.200000e-01 1.398770e-04 1150 9.300000e-01 1.420731e-04 1151 9.400000e-01 1.442410e-04 1152 9.500000e-01 1.463811e-04 1153 9.600000e-01 1.484939e-04 1154 9.700000e-01 1.505797e-04 1155 9.800000e-01 1.526390e-04 1156 9.900000e-01 1.546723e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1157 1.000000e+00 1.566799e-04 1158 1.010000e+00 1.586622e-04 1159 1.020000e+00 1.606197e-04 1160 1.030000e+00 1.625526e-04 1161 1.040000e+00 1.644615e-04 1162 1.050000e+00 1.663466e-04 1163 1.060000e+00 1.682083e-04 1164 1.070000e+00 1.700470e-04 1165 1.080000e+00 1.718630e-04 1166 1.090000e+00 1.736567e-04 1167 1.100000e+00 1.754284e-04 1168 1.110000e+00 1.771784e-04 1169 1.120000e+00 1.789070e-04 1170 1.130000e+00 1.806146e-04 1171 1.140000e+00 1.823014e-04 1172 1.150000e+00 1.839679e-04 1173 1.160000e+00 1.856141e-04 1174 1.170000e+00 1.872406e-04 1175 1.180000e+00 1.888475e-04 1176 1.190000e+00 1.904351e-04 1177 1.200000e+00 1.920036e-04 1178 1.210000e+00 1.935535e-04 1179 1.220000e+00 1.950849e-04 1180 1.230000e+00 1.965981e-04 1181 1.240000e+00 1.980933e-04 1182 1.250000e+00 1.995708e-04 1183 1.260000e+00 2.010309e-04 1184 1.270000e+00 2.024737e-04 1185 1.280000e+00 2.038996e-04 1186 1.290000e+00 2.053087e-04 1187 1.300000e+00 2.067014e-04 1188 1.310000e+00 2.080777e-04 1189 1.320000e+00 2.094380e-04 1190 1.330000e+00 2.107824e-04 1191 1.340000e+00 2.121112e-04 1192 1.350000e+00 2.134245e-04 1193 1.360000e+00 2.147227e-04 1194 1.370000e+00 2.160058e-04 1195 1.380000e+00 2.172741e-04 1196 1.390000e+00 2.185278e-04 1197 1.400000e+00 2.197671e-04 1198 1.410000e+00 2.209921e-04 1199 1.420000e+00 2.222031e-04 1200 1.430000e+00 2.234002e-04 1201 1.440000e+00 2.245837e-04 1202 1.450000e+00 2.257536e-04 1203 1.460000e+00 2.269102e-04 1204 1.470000e+00 2.280536e-04 1205 1.480000e+00 2.291841e-04 1206 1.490000e+00 2.303017e-04 1207 1.500000e+00 2.314066e-04 1208 0.000000e+00 3.853291e-10 1209 1.000000e-02 5.115682e-10 1210 2.000000e-02 6.831691e-10 1211 3.000000e-02 9.162574e-10 1212 4.000000e-02 1.232590e-09 1213 5.000000e-02 1.661468e-09 1214 6.000000e-02 2.242261e-09 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1215 7.000000e-02 3.027733e-09 1216 8.000000e-02 4.088398e-09 1217 9.000000e-02 5.518170e-09 1218 1.000000e-01 7.441664e-09 1219 1.100000e-01 1.002352e-08 1220 1.200000e-01 1.348020e-08 1221 1.300000e-01 1.809483e-08 1222 1.400000e-01 2.423546e-08 1223 1.500000e-01 3.237750e-08 1224 1.600000e-01 4.313011e-08 1225 1.700000e-01 5.726476e-08 1226 1.800000e-01 7.575602e-08 1227 1.900000e-01 9.982342e-08 1228 2.000000e-01 1.309796e-07 1229 2.100000e-01 1.710852e-07 1230 2.200000e-01 2.224108e-07 1231 2.300000e-01 2.877061e-07 1232 2.400000e-01 3.702785e-07 1233 2.500000e-01 4.740812e-07 1234 2.600000e-01 6.038112e-07 1235 2.700000e-01 7.650179e-07 1236 2.800000e-01 9.642163e-07 1237 2.900000e-01 1.209000e-06 1238 3.000000e-01 1.508136e-06 1239 3.100000e-01 1.871627e-06 1240 3.200000e-01 2.310709e-06 1241 3.300000e-01 2.837751e-06 1242 3.400000e-01 3.466032e-06 1243 3.500000e-01 4.209363e-06 1244 3.600000e-01 5.081545e-06 1245 3.700000e-01 6.095690e-06 1246 3.800000e-01 7.263442e-06 1247 3.900000e-01 8.594197e-06 1248 4.000000e-01 1.009442e-05 1249 4.100000e-01 1.176714e-05 1250 4.200000e-01 1.361174e-05 1251 4.300000e-01 1.562402e-05 1252 4.400000e-01 1.779649e-05 1253 4.500000e-01 2.011889e-05 1254 4.600000e-01 2.257882e-05 1255 4.700000e-01 2.516240e-05 1256 4.800000e-01 2.785503e-05 1257 4.900000e-01 3.064202e-05 1258 5.000000e-01 3.350892e-05 1259 5.100000e-01 3.644193e-05 1260 5.200000e-01 3.942812e-05 1261 5.300000e-01 4.245561e-05 1262 5.400000e-01 4.551368e-05 1263 5.500000e-01 4.859278e-05 1264 5.600000e-01 5.168450e-05 1265 5.700000e-01 5.478156e-05 1266 5.800000e-01 5.787771e-05 1267 5.900000e-01 6.096765e-05 1268 6.000000e-01 6.404693e-05 1269 6.100000e-01 6.711192e-05 1270 6.200000e-01 7.015963e-05 1271 6.300000e-01 7.318773e-05 1272 6.400000e-01 7.619438e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1273 6.500000e-01 7.917819e-05 1274 6.600000e-01 8.213807e-05 1275 6.700000e-01 8.507321e-05 1276 6.800000e-01 8.798284e-05 1277 6.900000e-01 9.086625e-05 1278 7.000000e-01 9.372258e-05 1279 7.100000e-01 9.655088e-05 1280 7.200000e-01 9.935007e-05 1281 7.300000e-01 1.021190e-04 1282 7.400000e-01 1.048567e-04 1283 7.500000e-01 1.075622e-04 1284 7.600000e-01 1.102347e-04 1285 7.700000e-01 1.128738e-04 1286 7.800000e-01 1.154791e-04 1287 7.900000e-01 1.180505e-04 1288 8.000000e-01 1.205880e-04 1289 8.100000e-01 1.230918e-04 1290 8.200000e-01 1.255621e-04 1291 8.300000e-01 1.279993e-04 1292 8.400000e-01 1.304037e-04 1293 8.500000e-01 1.327758e-04 1294 8.600000e-01 1.351161e-04 1295 8.700000e-01 1.374250e-04 1296 8.800000e-01 1.397030e-04 1297 8.900000e-01 1.419506e-04 1298 9.000000e-01 1.441683e-04 1299 9.100000e-01 1.463566e-04 1300 9.200000e-01 1.485160e-04 1301 9.300000e-01 1.506469e-04 1302 9.400000e-01 1.527499e-04 1303 9.500000e-01 1.548254e-04 1304 9.600000e-01 1.568739e-04 1305 9.700000e-01 1.588957e-04 1306 9.800000e-01 1.608915e-04 1307 9.900000e-01 1.628616e-04 1308 1.000000e+00 1.648063e-04 1309 1.010000e+00 1.667262e-04 1310 1.020000e+00 1.686217e-04 1311 1.030000e+00 1.704930e-04 1312 1.040000e+00 1.723407e-04 1313 1.050000e+00 1.741651e-04 1314 1.060000e+00 1.759666e-04 1315 1.070000e+00 1.777455e-04 1316 1.080000e+00 1.795022e-04 1317 1.090000e+00 1.812370e-04 1318 1.100000e+00 1.829502e-04 1319 1.110000e+00 1.846423e-04 1320 1.120000e+00 1.863135e-04 1321 1.130000e+00 1.879642e-04 1322 1.140000e+00 1.895946e-04 1323 1.150000e+00 1.912050e-04 1324 1.160000e+00 1.927958e-04 1325 1.170000e+00 1.943673e-04 1326 1.180000e+00 1.959197e-04 1327 1.190000e+00 1.974533e-04 1328 1.200000e+00 1.989684e-04 1329 1.210000e+00 2.004652e-04 1330 1.220000e+00 2.019441e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1331 1.230000e+00 2.034053e-04 1332 1.240000e+00 2.048490e-04 1333 1.250000e+00 2.062755e-04 1334 1.260000e+00 2.076850e-04 1335 1.270000e+00 2.090777e-04 1336 1.280000e+00 2.104540e-04 1337 1.290000e+00 2.118140e-04 1338 1.300000e+00 2.131580e-04 1339 1.310000e+00 2.144861e-04 1340 1.320000e+00 2.157987e-04 1341 1.330000e+00 2.170958e-04 1342 1.340000e+00 2.183778e-04 1343 1.350000e+00 2.196448e-04 1344 1.360000e+00 2.208971e-04 1345 1.370000e+00 2.221348e-04 1346 1.380000e+00 2.233581e-04 1347 1.390000e+00 2.245672e-04 1348 1.400000e+00 2.257624e-04 1349 1.410000e+00 2.269437e-04 1350 1.420000e+00 2.281115e-04 1351 1.430000e+00 2.292657e-04 1352 1.440000e+00 2.304068e-04 1353 1.450000e+00 2.315347e-04 1354 1.460000e+00 2.326497e-04 1355 1.470000e+00 2.337520e-04 1356 1.480000e+00 2.348416e-04 1357 1.490000e+00 2.359189e-04 1358 1.500000e+00 2.369838e-04 tmpk8ny_4pz/tests/hisimhv2/0000755000175000017500000000000013546075722016053 5ustar carstencarstentmpk8ny_4pz/tests/hisimhv2/Makefile.am0000644000175000017500000000050713546075722020111 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = nmos/qaSpec pmos/qaSpec TESTS_ENVIRONMENT = \ $(SHELL) $(top_srcdir)/tests/bin/check_cmc.sh \ $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ nmos pmos MAINTAINERCLEANFILES = Makefile.in clean-local: rm -rf nmos/results pmos/results ngspiceCkt tmpk8ny_4pz/tests/hisimhv2/nmos/0000755000175000017500000000000013546075722017027 5ustar carstencarstentmpk8ny_4pz/tests/hisimhv2/nmos/parameters/0000755000175000017500000000000013546075722021172 5ustar carstencarstentmpk8ny_4pz/tests/hisimhv2/nmos/parameters/nmosParameters0000644000175000017500000002102213546075722024112 0ustar carstencarsten CORSRD = ( 3 ) CORG = ( 0 ) COIPRV = ( 1 ) COPPRV = ( 1 ) COADOV = ( 1 ) COISUB = ( 0 ) COIIGS = ( 0 ) COGIDL = ( 0 ) COOVLP = ( 1 ) COOVLPS = ( 0 ) COFLICK = ( 0 ) COISTI = ( 0 ) CONQS = ( 0 ) COTHRML = ( 0 ) COIGN = ( 0 ) CODFM = ( 0 ) COQOVSM = ( 1 ) CORBNET = ( 0 ) COSELFHEAT = ( 0 ) COSUBNODE = ( 0 ) COSYM = ( 0 ) COTEMP = ( 0 ) CORDRIFT = ( 1 ) COERRREP = ( 1 ) VERSION = ( 2 ) VMAX = ( 1e+07 ) VMAXT1 = ( 0 ) VMAXT2 = ( 0 ) BGTMP1 = ( 9.025e-05 ) BGTMP2 = ( 1e-07 ) EG0 = ( 1.1785 ) TOX = ( 7e-09 ) XLD = ( 0 ) RDOV11 = ( 0 ) RDOV12 = ( 1 ) RDOV13 = ( 1 ) RDSLP1 = ( 0 ) RDICT1 = ( 1 ) RDSLP2 = ( 1 ) RDICT2 = ( 0 ) SUBLD1 = ( 0 ) SUBLD1L = ( 0 ) SUBLD1LP = ( 1 ) SUBLD2 = ( 0 ) XPDV = ( 0 ) XPVDTH = ( 0 ) XPVDTHG = ( 0 ) DDLTMAX = ( 10 ) DDLTSLP = ( 0 ) DDLTICT = ( 10 ) VFBOVER = ( -0.5 ) NOVER = ( 1e+17 ) NOVERS = ( 0 ) XWD = ( 0 ) XL = ( 0 ) XW = ( 0 ) SAREF = ( 1e-06 ) SBREF = ( 1e-06 ) LL = ( 0 ) LLD = ( 0 ) LLN = ( 0 ) WL = ( 0 ) WL1 = ( 0 ) WL1P = ( 1 ) WL2 = ( 0 ) WL2P = ( 1 ) WLD = ( 0 ) WLN = ( 0 ) RSH = ( 0 ) RSHG = ( 0 ) XQY = ( 0 ) XQY1 = ( 0 ) XQY2 = ( 2 ) RS = ( 0 ) RD = ( 0.01 ) VFBC = ( -1 ) VBI = ( 1.1 ) NSUBC = ( 3e+17 ) PARL2 = ( 1e-08 ) LP = ( 1.5e-08 ) NSUBP = ( 1e+18 ) NSUBP0 = ( 0 ) NSUBWP = ( 1 ) SCP1 = ( 1 ) SCP2 = ( 0 ) SCP3 = ( 0 ) SC1 = ( 1 ) SC2 = ( 0 ) SC3 = ( 0 ) SC4 = ( 0 ) PGD1 = ( 0 ) PGD2 = ( 1 ) PGD4 = ( 0 ) NDEP = ( 1 ) NDEPL = ( 0 ) NDEPLP = ( 1 ) NINV = ( 0.5 ) MUECB0 = ( 1000 ) MUECB1 = ( 100 ) MUEPH0 = ( 0.3 ) MUEPH1 = ( 20000 ) MUEPHW = ( 0 ) MUEPWP = ( 1 ) MUEPHL = ( 0 ) MUEPLP = ( 1 ) MUEPHS = ( 0 ) MUEPSP = ( 1 ) VTMP = ( 0 ) WVTH0 = ( 0 ) MUESR0 = ( 2 ) MUESR1 = ( 6e+14 ) MUESRL = ( 0 ) MUESRW = ( 0 ) MUESWP = ( 1 ) MUESLP = ( 1 ) MUETMP = ( 1.5 ) BB = ( 2 ) SUB1 = ( 10 ) SUB2 = ( 25 ) SVGS = ( 0.8 ) SVBS = ( 0.5 ) SVBSL = ( 0 ) SVDS = ( 0.8 ) SLG = ( 3e-08 ) SUB1L = ( 0.0025 ) SUB2L = ( 2e-06 ) FN1 = ( 0 ) FN2 = ( 0.00017 ) FN3 = ( 0 ) FVBS = ( 0.012 ) SVGSL = ( 0 ) SVGSLP = ( 1 ) SVGSWP = ( 1 ) SVGSW = ( 0 ) SVBSLP = ( 1 ) SLGL = ( 0 ) SLGLP = ( 1 ) SUB1LP = ( 1 ) NSTI = ( 1e+17 ) WSTI = ( 0 ) WSTIL = ( 0 ) WSTILP = ( 1 ) WSTIW = ( 0 ) WSTIWP = ( 1 ) SCSTI1 = ( 0 ) SCSTI2 = ( 0 ) VTHSTI = ( 0 ) VDSTI = ( 0 ) MUESTI1 = ( 0 ) MUESTI2 = ( 0 ) MUESTI3 = ( 1 ) NSUBPSTI1 = ( 0 ) NSUBPSTI2 = ( 0 ) NSUBPSTI3 = ( 1 ) LPEXT = ( 1e-50 ) NPEXT = ( 5e+17 ) SCP21 = ( 0 ) SCP22 = ( 0 ) BS1 = ( 0 ) BS2 = ( 0.9 ) TPOLY = ( 2e-07 ) CGBO = ( 0 ) JS0 = ( 5e-07 ) JS0SW = ( 0 ) NJ = ( 1 ) NJSW = ( 1 ) XTI = ( 2 ) CJ = ( 0.0005 ) CJSW = ( 5e-10 ) CJSWG = ( 5e-10 ) MJ = ( 0.5 ) MJSW = ( 0.33 ) MJSWG = ( 0.33 ) PB = ( 1 ) PBSW = ( 1 ) PBSWG = ( 1 ) XTI2 = ( 0 ) CISB = ( 0 ) CVB = ( 0 ) CTEMP = ( 0 ) CISBK = ( 0 ) DIVX = ( 0 ) CLM1 = ( 0.05 ) CLM2 = ( 2 ) CLM3 = ( 1 ) CLM5 = ( 1 ) CLM6 = ( 0 ) VOVER = ( 0.3 ) VOVERP = ( 0.3 ) WFC = ( 0 ) NSUBCW = ( 0 ) NSUBCWP = ( 1 ) QME1 = ( 0 ) QME2 = ( 1 ) QME3 = ( 0 ) VOVERS = ( 0 ) VOVERSP = ( 0 ) GIDL1 = ( 2 ) GIDL2 = ( 3e+07 ) GIDL3 = ( 0.9 ) GIDL4 = ( 0 ) GIDL5 = ( 0.2 ) GLEAK1 = ( 50 ) GLEAK2 = ( 1e+07 ) GLEAK3 = ( 0.06 ) GLEAK4 = ( 4 ) GLEAK5 = ( 7500 ) GLEAK6 = ( 0.25 ) GLEAK7 = ( 1e-06 ) GLPART1 = ( 0.5 ) GLKSD1 = ( 1e-15 ) GLKSD2 = ( 1000 ) GLKSD3 = ( -1000 ) GLKB1 = ( 5e-16 ) GLKB2 = ( 1 ) GLKB3 = ( 0 ) EGIG = ( 0 ) IGTEMP2 = ( 0 ) IGTEMP3 = ( 0 ) VZADD0 = ( 0.01 ) PZADD0 = ( 0.005 ) NFTRP = ( 1e+10 ) NFALP = ( 1e-19 ) CIT = ( 0 ) FALPH = ( 1 ) KAPPA = ( 3.9 ) VDIFFJ = ( 0.0006 ) DLY1 = ( 1e-10 ) DLY2 = ( 0.7 ) DLY3 = ( 8e-07 ) TNOM = ( 27 ) OVSLP = ( 2.1e-07 ) OVMAG = ( 0.6 ) GBMIN = ( 1e-12 ) RBPB = ( 50 ) RBDB = ( 50 ) RBSB = ( 50 ) IBPC1 = ( 0 ) IBPC1L = ( 0 ) IBPC1LP = ( -1 ) IBPC2 = ( 0 ) MPHDFM = ( -0.3 ) PTL = ( 0 ) PTP = ( 3.5 ) PT2 = ( 0 ) PTLP = ( 1 ) GDL = ( 0 ) GDLP = ( 0 ) GDLD = ( 0 ) PT4 = ( 0 ) PT4P = ( 1 ) RDVG11 = ( 0 ) RDVG12 = ( 100 ) RTH0 = ( 0.1 ) CTH0 = ( 1e-07 ) POWRAT = ( 1 ) TCJBD = ( 0 ) TCJBS = ( 0 ) TCJBDSW = ( 0 ) TCJBSSW = ( 0 ) TCJBDSWG = ( 0 ) TCJBSSWG = ( 0 ) DLYOV = ( 0 ) QDFTVD = ( 1 ) XLDLD = ( 1e-06 ) RDVD = ( 0.07 ) RD20 = ( 0 ) RD21 = ( 1 ) RD22 = ( 0 ) RD22D = ( 0 ) RD23 = ( 0.005 ) RD24 = ( 0 ) RD25 = ( 0 ) RDVDL = ( 0 ) RDVDLP = ( 1 ) RDVDS = ( 0 ) RDVDSP = ( 1 ) RD23L = ( 0 ) RD23LP = ( 1 ) RD23S = ( 0 ) RD23SP = ( 1 ) RDS = ( 0 ) RDSP = ( 1 ) RDTEMP1 = ( 0 ) RDTEMP2 = ( 0 ) RDVDTEMP1 = ( 0 ) RDVDTEMP2 = ( 0 ) RTH0W = ( 0 ) RTH0WP = ( 1 ) CVDSOVER = ( 0 ) NINVD = ( 0 ) NINVDW = ( 0 ) NINVDWP = ( 1 ) NINVDT1 = ( 0 ) NINVDT2 = ( 0 ) RDVB = ( 0 ) RTH0NF = ( 0 ) RTHTEMP1 = ( 0 ) RTHTEMP2 = ( 0 ) PRATTEMP1 = ( 0 ) PRATTEMP2 = ( 0 ) RDVSUB = ( 1 ) RDVDSUB = ( 0.3 ) DDRIFT = ( 1e-06 ) VBISUB = ( 0.7 ) NSUBSUB = ( 1e+15 ) RDRMUE = ( 1000 ) RDRVMAX = ( 1e+07 ) RDRMUETMP = ( 0 ) RDRVTMP = ( 0 ) RDRDJUNC = ( 1e-06 ) RDRCX = ( 0.1 ) RDRCAR = ( 1e-08 ) RDRDL1 = ( 0 ) RDRDL2 = ( 0 ) RDRVMAXW = ( 1.02 ) RDRVMAXWP = ( 1 ) RDRVMAXL = ( 1.02 ) RDRVMAXLP = ( 1 ) RDRMUEL = ( 1.02 ) RDRMUELP = ( 1 ) RDRQOVER = ( 3e5 ) SHEMAX = ( 500 ) tmpk8ny_4pz/tests/hisimhv2/nmos/parameters/pmosParameters0000644000175000017500000002100113546075722024111 0ustar carstencarsten CORSRD = ( 3 ) CORG = ( 0 ) COIPRV = ( 1 ) COPPRV = ( 1 ) COADOV = ( 1 ) COISUB = ( 0 ) COIIGS = ( 0 ) COGIDL = ( 0 ) COOVLP = ( 1 ) COOVLPS = ( 0 ) COFLICK = ( 0 ) COISTI = ( 0 ) CONQS = ( 0 ) COTHRML = ( 0 ) COIGN = ( 0 ) CODFM = ( 0 ) COQOVSM = ( 1 ) CORBNET = ( 0 ) COSELFHEAT = ( 0 ) COSUBNODE = ( 0 ) COSYM = ( 0 ) COTEMP = ( 0 ) CORDRIFT = ( 1 ) COERRREP = ( 1 ) VERSION = ( 2 ) VMAX = ( 1e+07 ) VMAXT1 = ( 0 ) VMAXT2 = ( 0 ) BGTMP1 = ( 9.025e-05 ) BGTMP2 = ( 1e-07 ) EG0 = ( 1.1785 ) TOX = ( 7e-09 ) XLD = ( 0 ) RDOV11 = ( 0 ) RDOV12 = ( 1 ) RDOV13 = ( 1 ) RDSLP1 = ( 0 ) RDICT1 = ( 1 ) RDSLP2 = ( 1 ) RDICT2 = ( 0 ) SUBLD1 = ( 0 ) SUBLD1L = ( 0 ) SUBLD1LP = ( 1 ) SUBLD2 = ( 0 ) XPDV = ( 0 ) XPVDTH = ( 0 ) XPVDTHG = ( 0 ) DDLTMAX = ( 10 ) DDLTSLP = ( 0 ) DDLTICT = ( 10 ) VFBOVER = ( -0.5 ) NOVER = ( 1e+17 ) NOVERS = ( 0 ) XWD = ( 0 ) XL = ( 0 ) XW = ( 0 ) SAREF = ( 1e-06 ) SBREF = ( 1e-06 ) LL = ( 0 ) LLD = ( 0 ) LLN = ( 0 ) WL = ( 0 ) WL1 = ( 0 ) WL1P = ( 1 ) WL2 = ( 0 ) WL2P = ( 1 ) WLD = ( 0 ) WLN = ( 0 ) RSH = ( 0 ) RSHG = ( 0 ) XQY = ( 0 ) XQY1 = ( 0 ) XQY2 = ( 2 ) RS = ( 0 ) RD = ( 0 ) VFBC = ( -1 ) VBI = ( 1.1 ) NSUBC = ( 3e+17 ) PARL2 = ( 1e-08 ) LP = ( 1.5e-08 ) NSUBP = ( 1e+18 ) NSUBP0 = ( 0 ) NSUBWP = ( 1 ) SCP1 = ( 1 ) SCP2 = ( 0 ) SCP3 = ( 0 ) SC1 = ( 1 ) SC2 = ( 0 ) SC3 = ( 0 ) SC4 = ( 0 ) PGD1 = ( 0 ) PGD2 = ( 1 ) PGD4 = ( 0 ) NDEP = ( 1 ) NDEPL = ( 0 ) NDEPLP = ( 1 ) NINV = ( 0.5 ) MUECB0 = ( 1000 ) MUECB1 = ( 100 ) MUEPH0 = ( 0.3 ) MUEPH1 = ( 9000 ) MUEPHW = ( 0 ) MUEPWP = ( 1 ) MUEPHL = ( 0 ) MUEPLP = ( 1 ) MUEPHS = ( 0 ) MUEPSP = ( 1 ) VTMP = ( 0 ) WVTH0 = ( 0 ) MUESR0 = ( 2 ) MUESR1 = ( 6e+14 ) MUESRL = ( 0 ) MUESRW = ( 0 ) MUESWP = ( 1 ) MUESLP = ( 1 ) MUETMP = ( 1.5 ) BB = ( 1 ) SUB1 = ( 10 ) SUB2 = ( 25 ) SVGS = ( 0.8 ) SVBS = ( 0.5 ) SVBSL = ( 0 ) SVDS = ( 0.8 ) SLG = ( 3e-08 ) SUB1L = ( 0.0025 ) SUB2L = ( 2e-06 ) FN1 = ( 0 ) FN2 = ( 0.00017 ) FN3 = ( 0 ) FVBS = ( 0.012 ) SVGSL = ( 0 ) SVGSLP = ( 1 ) SVGSWP = ( 1 ) SVGSW = ( 0 ) SVBSLP = ( 1 ) SLGL = ( 0 ) SLGLP = ( 1 ) SUB1LP = ( 1 ) NSTI = ( 1e+17 ) WSTI = ( 0 ) WSTIL = ( 0 ) WSTILP = ( 1 ) WSTIW = ( 0 ) WSTIWP = ( 1 ) SCSTI1 = ( 0 ) SCSTI2 = ( 0 ) VTHSTI = ( 0 ) VDSTI = ( 0 ) MUESTI1 = ( 0 ) MUESTI2 = ( 0 ) MUESTI3 = ( 1 ) NSUBPSTI1 = ( 0 ) NSUBPSTI2 = ( 0 ) NSUBPSTI3 = ( 1 ) LPEXT = ( 1e-50 ) NPEXT = ( 5e+17 ) SCP21 = ( 0 ) SCP22 = ( 0 ) BS1 = ( 0 ) BS2 = ( 0.9 ) TPOLY = ( 2e-07 ) CGBO = ( 0 ) JS0 = ( 5e-07 ) JS0SW = ( 0 ) NJ = ( 1 ) NJSW = ( 1 ) XTI = ( 2 ) CJ = ( 0.0005 ) CJSW = ( 5e-10 ) CJSWG = ( 5e-10 ) MJ = ( 0.5 ) MJSW = ( 0.33 ) MJSWG = ( 0.33 ) PB = ( 1 ) PBSW = ( 1 ) PBSWG = ( 1 ) XTI2 = ( 0 ) CISB = ( 0 ) CVB = ( 0 ) CTEMP = ( 0 ) CISBK = ( 0 ) DIVX = ( 0 ) CLM1 = ( 0.05 ) CLM2 = ( 2 ) CLM3 = ( 1 ) CLM5 = ( 1 ) CLM6 = ( 0 ) VOVER = ( 0.3 ) VOVERP = ( 0.3 ) WFC = ( 0 ) NSUBCW = ( 0 ) NSUBCWP = ( 1 ) QME1 = ( 0 ) QME2 = ( 1 ) QME3 = ( 0 ) VOVERS = ( 0 ) VOVERSP = ( 0 ) GIDL1 = ( 2 ) GIDL2 = ( 3e+07 ) GIDL3 = ( 0.9 ) GIDL4 = ( 0 ) GIDL5 = ( 0.2 ) GLEAK1 = ( 50 ) GLEAK2 = ( 1e+07 ) GLEAK3 = ( 0.06 ) GLEAK4 = ( 4 ) GLEAK5 = ( 7500 ) GLEAK6 = ( 0.25 ) GLEAK7 = ( 1e-06 ) GLPART1 = ( 0.5 ) GLKSD1 = ( 1e-15 ) GLKSD2 = ( 1000 ) GLKSD3 = ( -1000 ) GLKB1 = ( 5e-16 ) GLKB2 = ( 1 ) GLKB3 = ( 0 ) EGIG = ( 0 ) IGTEMP2 = ( 0 ) IGTEMP3 = ( 0 ) VZADD0 = ( 0.01 ) PZADD0 = ( 0.005 ) NFTRP = ( 1e+10 ) NFALP = ( 1e-19 ) CIT = ( 0 ) FALPH = ( 1 ) KAPPA = ( 3.9 ) VDIFFJ = ( 0.0006 ) DLY1 = ( 1e-10 ) DLY2 = ( 0.7 ) DLY3 = ( 8e-07 ) TNOM = ( 27 ) OVSLP = ( 2.1e-07 ) OVMAG = ( 0.6 ) GBMIN = ( 1e-12 ) RBPB = ( 50 ) RBDB = ( 50 ) RBSB = ( 50 ) IBPC1 = ( 0 ) IBPC1L = ( 0 ) IBPC1LP = ( -1 ) IBPC2 = ( 0 ) MPHDFM = ( -0.3 ) PTL = ( 0 ) PTP = ( 3.5 ) PT2 = ( 0 ) PTLP = ( 1 ) GDL = ( 0 ) GDLP = ( 0 ) GDLD = ( 0 ) PT4 = ( 0 ) PT4P = ( 1 ) RDVG11 = ( 0 ) RDVG12 = ( 100 ) RTH0 = ( 0.1 ) CTH0 = ( 1e-07 ) POWRAT = ( 1 ) TCJBD = ( 0 ) TCJBS = ( 0 ) TCJBDSW = ( 0 ) TCJBSSW = ( 0 ) TCJBDSWG = ( 0 ) TCJBSSWG = ( 0 ) DLYOV = ( 0 ) QDFTVD = ( 1 ) XLDLD = ( 1e-06 ) RDVD = ( 0.07 ) RD20 = ( 0 ) RD21 = ( 1 ) RD22 = ( 0 ) RD22D = ( 0 ) RD23 = ( 0.005 ) RD24 = ( 0 ) RD25 = ( 0 ) RDVDL = ( 0 ) RDVDLP = ( 1 ) RDVDS = ( 0 ) RDVDSP = ( 1 ) RD23L = ( 0 ) RD23LP = ( 1 ) RD23S = ( 0 ) RD23SP = ( 1 ) RDS = ( 0 ) RDSP = ( 1 ) RDTEMP1 = ( 0 ) RDTEMP2 = ( 0 ) RDVDTEMP1 = ( 0 ) RDVDTEMP2 = ( 0 ) RTH0W = ( 0 ) RTH0WP = ( 1 ) CVDSOVER = ( 0 ) NINVD = ( 0 ) NINVDW = ( 0 ) NINVDWP = ( 1 ) NINVDT1 = ( 0 ) NINVDT2 = ( 0 ) RDVB = ( 0 ) RTH0NF = ( 0 ) RTHTEMP1 = ( 0 ) RTHTEMP2 = ( 0 ) PRATTEMP1 = ( 0 ) PRATTEMP2 = ( 0 ) RDVSUB = ( 1 ) RDVDSUB = ( 0.3 ) DDRIFT = ( 1e-06 ) VBISUB = ( 0.7 ) NSUBSUB = ( 1e+15 ) RDRMUE = ( 1000 ) RDRVMAX = ( 1e+07 ) RDRMUETMP = ( 0 ) RDRVTMP = ( 0 ) RDRDJUNC = ( 1e-06 ) RDRCX = ( 0 ) RDRCAR = ( 1e-08 ) RDRDL1 = ( 0 ) RDRDL2 = ( 0 ) RDRVMAXW = ( 0 ) RDRVMAXWP = ( 1 ) RDRVMAXL = ( 0 ) RDRVMAXLP = ( 1 ) RDRMUEL = ( 0 ) RDRMUELP = ( 1 ) RDRQOVER = ( 0 ) SHEMAX = ( 500 ) tmpk8ny_4pz/tests/hisimhv2/nmos/reference/0000755000175000017500000000000013546075722020765 5ustar carstencarstentmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_NF_RD23.standard0000644000175000017500000000041613546075722024525 0ustar carstencarstenV(d) I(d) 1.000000e+00 2.321105e-05 3.000000e+00 2.912882e-05 5.000000e+00 3.064735e-05 7.000000e+00 3.130121e-05 9.000000e+00 3.163468e-05 1.100000e+01 3.183359e-05 1.300000e+01 3.197181e-05 1.500000e+01 3.207400e-05 1.700000e+01 3.215264e-05 1.900000e+01 3.221502e-05 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/acFreq_coadov.standard0000644000175000017500000000713313546075722025247 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 7.09538360249507e-14 6.90994422055155e-14 6.86534423084891e-33 1258.925 7.09538570497621e-14 6.90994587597535e-14 6.86534570330947e-33 1584.893 7.09538444424256e-14 6.90994486938721e-14 6.86534433394108e-33 1995.262 7.09538421415848e-14 6.90994559153561e-14 6.86534418759476e-33 2511.886 7.09538220751598e-14 6.90994434451303e-14 6.86534472317576e-33 3162.278 7.09538136246388e-14 6.90994340039284e-14 6.86534165741893e-33 3981.072 7.0953836310425e-14 6.90994209192287e-14 6.86534273413348e-33 5011.872 7.09538287612029e-14 6.90994611911909e-14 6.86534539556259e-33 6309.573 7.09538302857706e-14 6.90994362092865e-14 6.86534442936992e-33 7943.282 7.09538359760579e-14 6.90994451665539e-14 6.86534344328011e-33 10000 7.09538360249507e-14 6.90994422055155e-14 6.86534423084891e-33 12589.25 7.09538570497621e-14 6.90994587597535e-14 6.86534570330947e-33 15848.93 7.09538444424256e-14 6.90994486938721e-14 6.86534433394108e-33 19952.62 7.09538421415848e-14 6.90994559153561e-14 6.86534418759476e-33 25118.86 7.09538220751599e-14 6.90994434451303e-14 6.86534472317576e-33 31622.78 7.09538136246388e-14 6.90994340039284e-14 6.86534165741893e-33 39810.72 7.0953836310425e-14 6.90994209192287e-14 6.86534273413348e-33 50118.72 7.09538287612029e-14 6.90994611911909e-14 6.86534539556259e-33 63095.73 7.09538302857706e-14 6.90994362092865e-14 6.86534442936992e-33 79432.82 7.09538359760578e-14 6.90994451665539e-14 6.86534344328011e-33 100000 7.09538360249507e-14 6.90994422055155e-14 6.86534423084891e-33 125892.5 7.09538570497621e-14 6.90994587597535e-14 6.86534570330947e-33 158489.3 7.09538444424256e-14 6.90994486938721e-14 6.86534433394108e-33 199526.2 7.09538421415848e-14 6.90994559153561e-14 6.86534418759476e-33 251188.6 7.09538220751598e-14 6.90994434451303e-14 6.86534472317576e-33 316227.8 7.09538136246388e-14 6.90994340039284e-14 6.86534165741893e-33 398107.2 7.0953836310425e-14 6.90994209192287e-14 6.86534273413348e-33 501187.2 7.09538287612029e-14 6.90994611911909e-14 6.86534539556259e-33 630957.3 7.09538302857706e-14 6.90994362092865e-14 6.86534442936992e-33 794328.2 7.09538359760579e-14 6.90994451665539e-14 6.86534344328011e-33 1000000 7.09538360249507e-14 6.90994422055155e-14 6.86534423084891e-33 1258925 7.09538570497621e-14 6.90994587597535e-14 6.86534570330947e-33 1584893 7.09538444424256e-14 6.90994486938721e-14 6.86534433394108e-33 1995262 7.09538421415848e-14 6.90994559153561e-14 6.86534418759476e-33 2511886 7.09538220751598e-14 6.90994434451302e-14 6.86534472317576e-33 3162278 7.09538136246388e-14 6.90994340039284e-14 6.86534165741893e-33 3981072 7.0953836310425e-14 6.90994209192287e-14 6.86534273413348e-33 5011872 7.09538287612029e-14 6.90994611911909e-14 6.86534539556259e-33 6309573 7.09538302857706e-14 6.90994362092865e-14 6.86534442936992e-33 7943282 7.09538359760579e-14 6.90994451665539e-14 6.86534344328011e-33 10000000 7.09538360249507e-14 6.90994422055155e-14 6.86534423084891e-33 12589250 7.09538570497621e-14 6.90994587597535e-14 6.86534570330947e-33 15848930 7.09538444424256e-14 6.90994486938721e-14 6.86534433394108e-33 19952620 7.09538421415848e-14 6.90994559153561e-14 6.86534418759476e-33 25118860 7.09538220751599e-14 6.90994434451303e-14 6.86534472317576e-33 31622780 7.09538136246388e-14 6.90994340039284e-14 6.86534165741893e-33 39810720 7.0953836310425e-14 6.90994209192287e-14 6.86534273413348e-33 50118720 7.09538287612029e-14 6.90994611911909e-14 6.86534539556259e-33 63095730 7.09538302857706e-14 6.90994362092865e-14 6.86534442936992e-33 79432820 7.09538359760579e-14 6.90994451665539e-14 6.86534344328011e-33 100000000 7.09538360249507e-14 6.90994422055155e-14 6.86534423084891e-33 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_COTEMP2.standard0000644000175000017500000000041613546075722024541 0ustar carstencarstenV(d) I(d) 1.000000e+00 3.579611e-03 3.000000e+00 1.016807e-02 5.000000e+00 1.551127e-02 7.000000e+00 1.870718e-02 9.000000e+00 1.963869e-02 1.100000e+01 1.969220e-02 1.300000e+01 1.969805e-02 1.500000e+01 1.970299e-02 1.700000e+01 1.970724e-02 1.900000e+01 1.971097e-02 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_rdrbb.standard0000644000175000017500000001112213546075722024557 0ustar carstencarstenV(d) I(d) 1.000000e+00 1.729918e-04 2.000000e+00 1.735683e-04 3.000000e+00 1.739590e-04 4.000000e+00 1.742778e-04 5.000000e+00 1.745548e-04 6.000000e+00 1.748034e-04 7.000000e+00 1.750308e-04 8.000000e+00 1.752419e-04 9.000000e+00 1.754397e-04 1.000000e+01 1.756265e-04 1.100000e+01 1.758041e-04 1.200000e+01 1.759736e-04 1.300000e+01 1.761361e-04 1.400000e+01 1.762924e-04 1.500000e+01 1.764432e-04 1.600000e+01 1.765890e-04 1.700000e+01 1.767304e-04 1.800000e+01 1.768677e-04 1.900000e+01 1.770012e-04 2.000000e+01 1.771313e-04 1.000000e+00 2.689140e-03 2.000000e+00 4.787313e-03 3.000000e+00 6.180814e-03 4.000000e+00 6.766025e-03 5.000000e+00 6.803548e-03 6.000000e+00 6.812832e-03 7.000000e+00 6.821014e-03 8.000000e+00 6.827921e-03 9.000000e+00 6.833885e-03 1.000000e+01 6.839164e-03 1.100000e+01 6.843934e-03 1.200000e+01 6.848314e-03 1.300000e+01 6.852386e-03 1.400000e+01 6.856208e-03 1.500000e+01 6.859822e-03 1.600000e+01 6.863261e-03 1.700000e+01 6.866548e-03 1.800000e+01 6.869703e-03 1.900000e+01 6.872742e-03 2.000000e+01 6.875677e-03 1.000000e+00 3.421074e-03 2.000000e+00 6.594795e-03 3.000000e+00 9.439603e-03 4.000000e+00 1.190879e-02 5.000000e+00 1.398682e-02 6.000000e+00 1.568447e-02 7.000000e+00 1.703293e-02 8.000000e+00 1.807725e-02 9.000000e+00 1.886930e-02 1.000000e+01 1.946112e-02 1.100000e+01 1.989983e-02 1.200000e+01 2.022473e-02 1.300000e+01 2.046662e-02 1.400000e+01 2.064857e-02 1.500000e+01 2.078731e-02 1.600000e+01 2.089480e-02 1.700000e+01 2.097945e-02 1.800000e+01 2.104725e-02 1.900000e+01 2.110240e-02 2.000000e+01 2.114794e-02 1.000000e+00 1.500719e-04 2.000000e+00 1.505689e-04 3.000000e+00 1.509093e-04 4.000000e+00 1.511885e-04 5.000000e+00 1.514317e-04 6.000000e+00 1.516502e-04 7.000000e+00 1.518504e-04 8.000000e+00 1.520363e-04 9.000000e+00 1.522107e-04 1.000000e+01 1.523754e-04 1.100000e+01 1.525320e-04 1.200000e+01 1.526816e-04 1.300000e+01 1.528250e-04 1.400000e+01 1.529630e-04 1.500000e+01 1.530962e-04 1.600000e+01 1.532250e-04 1.700000e+01 1.533498e-04 1.800000e+01 1.534711e-04 1.900000e+01 1.535891e-04 2.000000e+01 1.537040e-04 1.000000e+00 3.055677e-03 2.000000e+00 5.468315e-03 3.000000e+00 7.113760e-03 4.000000e+00 7.880080e-03 5.000000e+00 7.947053e-03 6.000000e+00 7.957425e-03 7.000000e+00 7.966932e-03 8.000000e+00 7.974992e-03 9.000000e+00 7.981919e-03 1.000000e+01 7.988019e-03 1.100000e+01 7.993509e-03 1.200000e+01 7.998532e-03 1.300000e+01 8.003191e-03 1.400000e+01 8.007555e-03 1.500000e+01 8.011676e-03 1.600000e+01 8.015592e-03 1.700000e+01 8.019332e-03 1.800000e+01 8.022918e-03 1.900000e+01 8.026370e-03 2.000000e+01 8.029701e-03 1.000000e+00 3.678601e-03 2.000000e+00 7.102021e-03 3.000000e+00 1.017870e-02 4.000000e+00 1.285576e-02 5.000000e+00 1.511533e-02 6.000000e+00 1.696910e-02 7.000000e+00 1.845119e-02 8.000000e+00 1.961015e-02 9.000000e+00 2.050103e-02 1.000000e+01 2.117828e-02 1.100000e+01 2.169077e-02 1.200000e+01 2.207917e-02 1.300000e+01 2.237551e-02 1.400000e+01 2.260403e-02 1.500000e+01 2.278261e-02 1.600000e+01 2.292423e-02 1.700000e+01 2.303827e-02 1.800000e+01 2.313150e-02 1.900000e+01 2.320882e-02 2.000000e+01 2.327381e-02 1.000000e+00 2.100696e-04 2.000000e+00 2.107823e-04 3.000000e+00 2.112538e-04 4.000000e+00 2.116352e-04 5.000000e+00 2.119649e-04 6.000000e+00 2.122598e-04 7.000000e+00 2.125292e-04 8.000000e+00 2.127789e-04 9.000000e+00 2.130126e-04 1.000000e+01 2.132332e-04 1.100000e+01 2.134426e-04 1.200000e+01 2.136425e-04 1.300000e+01 2.138340e-04 1.400000e+01 2.140182e-04 1.500000e+01 2.141958e-04 1.600000e+01 2.143675e-04 1.700000e+01 2.145339e-04 1.800000e+01 2.146954e-04 1.900000e+01 2.148525e-04 2.000000e+01 2.150055e-04 1.000000e+00 2.212472e-03 2.000000e+00 3.914375e-03 3.000000e+00 5.011647e-03 4.000000e+00 5.432149e-03 5.000000e+00 5.457754e-03 6.000000e+00 5.465443e-03 7.000000e+00 5.471965e-03 8.000000e+00 5.477481e-03 9.000000e+00 5.482270e-03 1.000000e+01 5.486531e-03 1.100000e+01 5.490396e-03 1.200000e+01 5.493957e-03 1.300000e+01 5.497275e-03 1.400000e+01 5.500395e-03 1.500000e+01 5.503349e-03 1.600000e+01 5.506164e-03 1.700000e+01 5.508857e-03 1.800000e+01 5.511444e-03 1.900000e+01 5.513937e-03 2.000000e+01 5.516345e-03 1.000000e+00 3.028952e-03 2.000000e+00 5.825717e-03 3.000000e+00 8.323395e-03 4.000000e+00 1.048403e-02 5.000000e+00 1.229498e-02 6.000000e+00 1.376511e-02 7.000000e+00 1.492069e-02 8.000000e+00 1.580098e-02 9.000000e+00 1.645283e-02 1.000000e+01 1.692470e-02 1.100000e+01 1.726122e-02 1.200000e+01 1.749978e-02 1.300000e+01 1.766935e-02 1.400000e+01 1.779109e-02 1.500000e+01 1.787985e-02 1.600000e+01 1.794579e-02 1.700000e+01 1.799577e-02 1.800000e+01 1.803442e-02 1.900000e+01 1.806489e-02 2.000000e+01 1.808934e-02 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/acVd_corsrd1.standard0000644000175000017500000000544113546075722025025 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 1 -2.035623e-06 3.521348e-04 4.4845652142156e-13 2.0094405440648e-12 2 -2.375169e-06 3.432913e-04 4.74186028387936e-13 1.97443753458758e-12 3 -1.034401e-07 3.320039e-04 4.99999035376921e-13 1.9324885232297e-12 4 6.400735e-06 3.162612e-04 5.26053242431211e-13 1.87743350832331e-12 5 2.002517e-05 2.930459e-04 5.5195704944478e-13 1.79794648680186e-12 6 4.603392e-05 2.572712e-04 5.75900255927507e-13 1.66967645207219e-12 7 9.428761e-05 1.998002e-04 5.91476660144887e-13 1.4298823871469e-12 8 1.816076e-04 1.057624e-04 5.73180855191218e-13 9.10528346529523e-13 9 2.821196e-04 5.821502e-06 5.00225635438274e-13 2.93516879470976e-13 10 2.881964e-04 1.378355e-07 4.85463931441478e-13 2.03188555014188e-13 11 2.882331e-04 1.117077e-07 4.62826825312382e-13 5.77500156360687e-14 12 2.882617e-04 9.321049e-08 4.59834124502096e-13 3.83818603920562e-14 13 2.882841e-04 7.991394e-08 4.58754524209789e-13 3.12270584548623e-14 14 2.883019e-04 7.027093e-08 4.58163224049692e-13 2.72181273694268e-14 15 2.883164e-04 6.311701e-08 4.57781523946345e-13 2.4568586652052e-14 16 2.883284e-04 5.765762e-08 4.57512023873377e-13 2.2651136132894e-14 17 2.883386e-04 5.337124e-08 4.57310823818901e-13 2.11809257348281e-14 18 2.883475e-04 4.991655e-08 4.57154423776555e-13 2.00074654171086e-14 19 2.883554e-04 4.706715e-08 4.57029523742738e-13 1.90427351559036e-14 20 2.883625e-04 4.466970e-08 4.56927423715094e-13 1.82314149362351e-14 1 -6.475259e-07 3.362076e-04 4.75047028621056e-13 1.97393653445193e-12 2 7.905785e-07 3.249999e-04 5.01980435913393e-13 1.93329652344847e-12 3 5.274328e-06 3.110338e-04 5.29056043244232e-13 1.88422951016336e-12 4 1.439298e-05 2.923826e-04 5.56429650655756e-13 1.82003949278363e-12 5 3.074975e-05 2.663998e-04 5.83698158038823e-13 1.72891946811249e-12 6 5.866208e-05 2.290041e-04 6.09196664942655e-13 1.58654842956491e-12 7 1.054923e-04 1.734288e-04 6.27474169891369e-13 1.33309436094112e-12 8 1.811703e-04 9.126493e-05 6.17687567241604e-13 8.42126328009378e-13 9 2.600553e-04 1.193476e-05 5.65291553055155e-13 3.27484888667963e-13 10 2.726276e-04 1.344734e-07 5.41725946674664e-13 1.84555449969193e-13 11 2.726622e-04 1.096252e-07 5.2302614161161e-13 5.59183551401387e-14 12 2.726887e-04 9.234828e-08 5.20432740909436e-13 3.79098102642466e-14 13 2.727099e-04 7.965911e-08 5.19461040646344e-13 3.10027583941321e-14 14 2.727271e-04 7.025090e-08 5.18922040500407e-13 2.7086167333698e-14 15 2.727412e-04 6.315425e-08 5.18571740405562e-13 2.4481906628583e-14 16 2.727530e-04 5.767869e-08 5.18323340338306e-13 2.25902761164158e-14 17 2.727631e-04 5.335132e-08 5.18137240287919e-13 2.11362757227389e-14 18 2.727719e-04 4.985178e-08 5.17992340248686e-13 1.99736954079652e-14 19 2.727797e-04 4.696177e-08 5.17876240217252e-13 1.90166551488424e-14 20 2.727868e-04 4.453038e-08 5.17781340191557e-13 1.82109649306982e-14 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/acVd_corg.standard0000644000175000017500000000544213546075722024403 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 1 -9.653820e-05 3.498912e-03 5.454449476816e-13 6.91258687161306e-13 2 -1.417599e-04 3.305198e-03 5.73851355372759e-13 6.59117978459069e-13 3 -1.198608e-04 3.045730e-03 6.04567363689252e-13 6.20729668065266e-13 4 -9.023511e-06 2.692336e-03 6.38184572791258e-13 5.7266105505048e-13 5 2.200279e-04 2.215004e-03 6.75152282800427e-13 5.09272437887735e-13 6 5.908299e-04 1.606367e-03 7.12303992859414e-13 4.28024915889614e-13 7 1.064796e-03 9.515037e-04 7.40429600474545e-13 3.43162692912797e-13 8 1.505316e-03 4.271597e-04 7.53826404101788e-13 2.81067176100164e-13 9 1.796378e-03 1.284864e-04 7.57855805192766e-13 2.4334126588571e-13 10 1.939052e-03 3.734987e-06 7.47048402266615e-13 1.43284438794887e-13 11 1.939694e-03 3.207582e-06 7.36401499383919e-13 4.83275930849067e-14 12 1.940074e-03 2.917474e-06 7.34973598997309e-13 3.55612296283581e-14 13 1.940421e-03 2.674695e-06 7.34336398824784e-13 2.98010880687746e-14 14 1.940745e-03 2.464603e-06 7.33958098722358e-13 2.63429671324733e-14 15 1.941048e-03 2.281661e-06 7.33702098653045e-13 2.39739964910642e-14 16 1.941330e-03 2.122435e-06 7.33514998602387e-13 2.22210760164533e-14 17 1.941591e-03 1.983940e-06 7.33371298563479e-13 2.08564456469737e-14 18 1.941833e-03 1.863385e-06 7.33256798532478e-13 1.97550953487783e-14 19 1.942055e-03 1.758211e-06 7.33163398507189e-13 1.8841975101547e-14 20 1.942261e-03 1.666139e-06 7.33085398486071e-13 1.80689248922403e-14 1 -2.946531e-05 2.928674e-03 5.40928846458845e-13 6.93288887710992e-13 2 -1.486847e-05 2.733831e-03 5.6919725411264e-13 6.61787179181766e-13 3 5.380981e-05 2.491192e-03 5.99953362439991e-13 6.23997268949983e-13 4 1.906559e-04 2.179939e-03 6.33826871611391e-13 5.76332856044636e-13 5 4.147623e-04 1.778362e-03 6.71413581788157e-13 5.12838438853245e-13 6 7.394491e-04 1.283359e-03 7.09624192133847e-13 4.30727816621436e-13 7 1.130471e-03 7.622733e-04 7.38978600081681e-13 3.44376193241357e-13 8 1.483538e-03 3.485889e-04 7.53171103924363e-13 2.80003775812244e-13 9 1.713743e-03 1.125635e-04 7.570648049786e-13 2.37285864246183e-13 10 1.830118e-03 9.992124e-06 7.4642350209742e-13 1.16739731607792e-13 11 1.839302e-03 2.630630e-06 7.39284800164586e-13 4.65326325989133e-14 12 1.839662e-03 2.385015e-06 7.38234899880321e-13 3.48941594477459e-14 13 1.839982e-03 2.184341e-06 7.37747299748301e-13 2.94341379694213e-14 14 1.840279e-03 2.011850e-06 7.3745289966859e-13 2.61045870679309e-14 15 1.840556e-03 1.862275e-06 7.37251699614115e-13 2.38041464450765e-14 16 1.840813e-03 1.732431e-06 7.37103599574016e-13 2.2092725981702e-14 17 1.841051e-03 1.619673e-06 7.36989299543069e-13 2.07554256196221e-14 18 1.841271e-03 1.521613e-06 7.36897799518295e-13 1.96731953266035e-14 19 1.841475e-03 1.436104e-06 7.36822699497961e-13 1.87740550831573e-14 20 1.841663e-03 1.361260e-06 7.36759899480958e-13 1.80115848767152e-14 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/acVg_QOVADD.standard0000644000175000017500000000263413546075722024432 0ustar carstencarstenV(g) g(d,g) g(d,d) c(g,s) c(g,d) 1 5.448464e-04 1.153056e-07 6.18119767358624e-13 7.270338968476e-14 2 1.394689e-03 2.684818e-04 6.73742582418744e-13 2.99735981154825e-13 3 9.013171e-04 1.647675e-03 6.20103767895801e-13 5.63243452500623e-13 4 5.254266e-04 2.554898e-03 5.94095160853857e-13 6.21900968382401e-13 5 2.808369e-04 3.093604e-03 5.79775456976735e-13 6.46115874938693e-13 6 1.242080e-04 3.391742e-03 5.6975975426494e-13 6.60544378845273e-13 7 2.500045e-05 3.534611e-03 5.61933052145826e-13 6.70880481643818e-13 8 -3.689141e-05 3.577927e-03 5.55494250402492e-13 6.78996783841342e-13 9 -7.456598e-05 3.558086e-03 5.50063048931971e-13 6.85668685647789e-13 10 -9.653820e-05 3.498912e-03 5.45419147674614e-13 6.91287487169104e-13 1 4.965062e-04 1.533499e-07 6.19904767841921e-13 7.34255098802772e-14 2 8.898650e-04 3.343818e-04 6.58406278266373e-13 3.43642893042813e-13 3 6.357351e-04 1.224604e-03 6.04843163763926e-13 5.68389053893817e-13 4 4.304319e-04 1.866690e-03 5.81784757520762e-13 6.25136469258427e-13 5 2.799370e-04 2.304693e-03 5.69239854124174e-13 6.49967275981476e-13 6 1.708441e-04 2.593325e-03 5.60776651832725e-13 6.64481179911179e-13 7 9.247942e-05 2.773590e-03 5.54338450089554e-13 6.74484082619509e-13 8 3.676323e-05 2.875733e-03 5.49104248672371e-13 6.82088784678515e-13 9 -2.377506e-06 2.921996e-03 5.44690947477451e-13 6.88216686337671e-13 10 -2.946531e-05 2.928674e-03 5.40892746449071e-13 6.9332928772193e-13 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_rs2m.standard0000644000175000017500000001415213546075722024355 0ustar carstencarstenV(d) I(d) 1.000000e+00 5.329576e-12 2.000000e+00 5.332748e-12 3.000000e+00 5.334753e-12 4.000000e+00 5.336915e-12 5.000000e+00 5.338940e-12 6.000000e+00 5.340867e-12 7.000000e+00 5.342719e-12 8.000000e+00 5.344512e-12 9.000000e+00 5.346257e-12 1.000000e+01 5.347963e-12 1.100000e+01 5.349633e-12 1.200000e+01 5.351274e-12 1.300000e+01 5.352887e-12 1.400000e+01 5.354478e-12 1.500000e+01 5.356050e-12 1.600000e+01 5.357602e-12 1.700000e+01 5.359138e-12 1.800000e+01 5.360660e-12 1.900000e+01 5.362166e-12 2.000000e+01 5.363656e-12 1.000000e+00 2.024423e-06 2.000000e+00 2.025088e-06 3.000000e+00 2.025595e-06 4.000000e+00 2.026021e-06 5.000000e+00 2.026395e-06 6.000000e+00 2.026734e-06 7.000000e+00 2.027045e-06 8.000000e+00 2.027335e-06 9.000000e+00 2.027606e-06 1.000000e+01 2.027863e-06 1.100000e+01 2.028108e-06 1.200000e+01 2.028342e-06 1.300000e+01 2.028566e-06 1.400000e+01 2.028781e-06 1.500000e+01 2.028989e-06 1.600000e+01 2.029190e-06 1.700000e+01 2.029385e-06 1.800000e+01 2.029575e-06 1.900000e+01 2.029759e-06 2.000000e+01 2.029938e-06 1.000000e+00 3.060424e-04 2.000000e+00 5.193784e-04 3.000000e+00 5.334174e-04 4.000000e+00 5.335916e-04 5.000000e+00 5.337028e-04 6.000000e+00 5.337872e-04 7.000000e+00 5.338571e-04 8.000000e+00 5.339177e-04 9.000000e+00 5.339720e-04 1.000000e+01 5.340215e-04 1.100000e+01 5.340673e-04 1.200000e+01 5.341102e-04 1.300000e+01 5.341505e-04 1.400000e+01 5.341889e-04 1.500000e+01 5.342254e-04 1.600000e+01 5.342604e-04 1.700000e+01 5.342940e-04 1.800000e+01 5.343263e-04 1.900000e+01 5.343576e-04 2.000000e+01 5.343879e-04 1.000000e+00 3.826538e-04 2.000000e+00 7.568875e-04 3.000000e+00 1.122313e-03 4.000000e+00 1.478312e-03 5.000000e+00 1.823939e-03 6.000000e+00 2.157718e-03 7.000000e+00 2.477227e-03 8.000000e+00 2.778111e-03 9.000000e+00 3.051405e-03 1.000000e+01 3.275158e-03 1.100000e+01 3.391010e-03 1.200000e+01 3.398280e-03 1.300000e+01 3.401620e-03 1.400000e+01 3.404045e-03 1.500000e+01 3.405893e-03 1.600000e+01 3.407355e-03 1.700000e+01 3.408545e-03 1.800000e+01 3.409537e-03 1.900000e+01 3.410380e-03 2.000000e+01 3.411109e-03 1.000000e+00 1.673900e-15 2.000000e+00 2.674293e-15 3.000000e+00 3.673711e-15 4.000000e+00 4.674212e-15 5.000000e+00 5.674714e-15 6.000000e+00 6.674782e-15 7.000000e+00 7.674417e-15 8.000000e+00 8.675352e-15 9.000000e+00 9.675420e-15 1.000000e+01 1.067549e-14 1.100000e+01 1.167469e-14 1.200000e+01 1.267476e-14 1.300000e+01 1.367483e-14 1.400000e+01 1.467403e-14 1.500000e+01 1.567496e-14 1.600000e+01 1.667676e-14 1.700000e+01 1.767683e-14 1.800000e+01 1.867430e-14 1.900000e+01 1.967523e-14 2.000000e+01 2.067443e-14 1.000000e+00 8.417677e-08 2.000000e+00 8.420514e-08 3.000000e+00 8.422687e-08 4.000000e+00 8.424519e-08 5.000000e+00 8.426133e-08 6.000000e+00 8.427592e-08 7.000000e+00 8.428935e-08 8.000000e+00 8.430184e-08 9.000000e+00 8.431358e-08 1.000000e+01 8.432468e-08 1.100000e+01 8.433524e-08 1.200000e+01 8.434533e-08 1.300000e+01 8.435501e-08 1.400000e+01 8.436433e-08 1.500000e+01 8.437332e-08 1.600000e+01 8.438202e-08 1.700000e+01 8.439044e-08 1.800000e+01 8.439863e-08 1.900000e+01 8.440659e-08 2.000000e+01 8.441435e-08 1.000000e+00 3.379213e-04 2.000000e+00 6.017288e-04 3.000000e+00 6.402406e-04 4.000000e+00 6.405133e-04 5.000000e+00 6.406736e-04 6.000000e+00 6.407896e-04 7.000000e+00 6.408829e-04 8.000000e+00 6.409624e-04 9.000000e+00 6.410326e-04 1.000000e+01 6.410960e-04 1.100000e+01 6.411543e-04 1.200000e+01 6.412085e-04 1.300000e+01 6.412594e-04 1.400000e+01 6.413075e-04 1.500000e+01 6.413532e-04 1.600000e+01 6.413968e-04 1.700000e+01 6.414387e-04 1.800000e+01 6.414789e-04 1.900000e+01 6.415178e-04 2.000000e+01 6.415553e-04 1.000000e+00 3.994037e-04 2.000000e+00 7.913324e-04 3.000000e+00 1.175614e-03 4.000000e+00 1.551956e-03 5.000000e+00 1.919912e-03 6.000000e+00 2.278810e-03 7.000000e+00 2.627629e-03 8.000000e+00 2.964743e-03 9.000000e+00 3.287377e-03 1.000000e+01 3.590245e-03 1.100000e+01 3.861588e-03 1.200000e+01 4.069294e-03 1.300000e+01 4.133328e-03 1.400000e+01 4.140747e-03 1.500000e+01 4.145908e-03 1.600000e+01 4.149715e-03 1.700000e+01 4.152645e-03 1.800000e+01 4.154975e-03 1.900000e+01 4.156880e-03 2.000000e+01 4.158470e-03 1.000000e+00 1.520227e-08 2.000000e+00 1.520739e-08 3.000000e+00 1.521132e-08 4.000000e+00 1.521464e-08 5.000000e+00 1.521756e-08 6.000000e+00 1.522019e-08 7.000000e+00 1.522262e-08 8.000000e+00 1.522488e-08 9.000000e+00 1.522701e-08 1.000000e+01 1.522901e-08 1.100000e+01 1.523093e-08 1.200000e+01 1.523275e-08 1.300000e+01 1.523450e-08 1.400000e+01 1.523619e-08 1.500000e+01 1.523781e-08 1.600000e+01 1.523939e-08 1.700000e+01 1.524091e-08 1.800000e+01 1.524239e-08 1.900000e+01 1.524383e-08 2.000000e+01 1.524524e-08 1.000000e+00 1.267626e-05 2.000000e+00 1.268020e-05 3.000000e+00 1.268313e-05 4.000000e+00 1.268557e-05 5.000000e+00 1.268771e-05 6.000000e+00 1.268964e-05 7.000000e+00 1.269141e-05 8.000000e+00 1.269305e-05 9.000000e+00 1.269460e-05 1.000000e+01 1.269605e-05 1.100000e+01 1.269744e-05 1.200000e+01 1.269876e-05 1.300000e+01 1.270003e-05 1.400000e+01 1.270125e-05 1.500000e+01 1.270242e-05 1.600000e+01 1.270356e-05 1.700000e+01 1.270466e-05 1.800000e+01 1.270573e-05 1.900000e+01 1.270677e-05 2.000000e+01 1.270778e-05 1.000000e+00 2.656099e-04 2.000000e+00 4.310480e-04 3.000000e+00 4.384524e-04 4.000000e+00 4.385684e-04 5.000000e+00 4.386470e-04 6.000000e+00 4.387086e-04 7.000000e+00 4.387607e-04 8.000000e+00 4.388065e-04 9.000000e+00 4.388478e-04 1.000000e+01 4.388858e-04 1.100000e+01 4.389211e-04 1.200000e+01 4.389542e-04 1.300000e+01 4.389856e-04 1.400000e+01 4.390153e-04 1.500000e+01 4.390438e-04 1.600000e+01 4.390711e-04 1.700000e+01 4.390974e-04 1.800000e+01 4.391227e-04 1.900000e+01 4.391472e-04 2.000000e+01 4.391710e-04 1.000000e+00 3.554938e-04 2.000000e+00 7.007589e-04 3.000000e+00 1.034943e-03 4.000000e+00 1.356670e-03 5.000000e+00 1.663715e-03 6.000000e+00 1.952255e-03 7.000000e+00 2.214940e-03 8.000000e+00 2.435416e-03 9.000000e+00 2.574834e-03 1.000000e+01 2.599716e-03 1.100000e+01 2.601496e-03 1.200000e+01 2.602779e-03 1.300000e+01 2.603755e-03 1.400000e+01 2.604527e-03 1.500000e+01 2.605158e-03 1.600000e+01 2.605687e-03 1.700000e+01 2.606139e-03 1.800000e+01 2.606532e-03 1.900000e+01 2.606879e-03 2.000000e+01 2.607190e-03 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_coisti.standard0000644000175000017500000001112213546075722024756 0ustar carstencarstenV(d) I(d) 1.000000e+00 2.023814e-03 2.000000e+00 2.164918e-03 3.000000e+00 2.171461e-03 4.000000e+00 2.174498e-03 5.000000e+00 2.176904e-03 6.000000e+00 2.178984e-03 7.000000e+00 2.180848e-03 8.000000e+00 2.182555e-03 9.000000e+00 2.184139e-03 1.000000e+01 2.185626e-03 1.100000e+01 2.187030e-03 1.200000e+01 2.188366e-03 1.300000e+01 2.189641e-03 1.400000e+01 2.190865e-03 1.500000e+01 2.192042e-03 1.600000e+01 2.193178e-03 1.700000e+01 2.194277e-03 1.800000e+01 2.195342e-03 1.900000e+01 2.196376e-03 2.000000e+01 2.197382e-03 1.000000e+00 5.036267e-03 2.000000e+00 8.618162e-03 3.000000e+00 1.076212e-02 4.000000e+00 1.162037e-02 5.000000e+00 1.173018e-02 6.000000e+00 1.175501e-02 7.000000e+00 1.176736e-02 8.000000e+00 1.177585e-02 9.000000e+00 1.178274e-02 1.000000e+01 1.178871e-02 1.100000e+01 1.179406e-02 1.200000e+01 1.179896e-02 1.300000e+01 1.180350e-02 1.400000e+01 1.180776e-02 1.500000e+01 1.181177e-02 1.600000e+01 1.181559e-02 1.700000e+01 1.181923e-02 1.800000e+01 1.182272e-02 1.900000e+01 1.182608e-02 2.000000e+01 1.182933e-02 1.000000e+00 5.331875e-03 2.000000e+00 1.016600e-02 3.000000e+00 1.437492e-02 4.000000e+00 1.789482e-02 5.000000e+00 2.072047e-02 6.000000e+00 2.288854e-02 7.000000e+00 2.446538e-02 8.000000e+00 2.554166e-02 9.000000e+00 2.622655e-02 1.000000e+01 2.663353e-02 1.100000e+01 2.686196e-02 1.200000e+01 2.698517e-02 1.300000e+01 2.705010e-02 1.400000e+01 2.708327e-02 1.500000e+01 2.709733e-02 1.600000e+01 2.710568e-02 1.700000e+01 2.711534e-02 1.800000e+01 2.712494e-02 1.900000e+01 2.713370e-02 2.000000e+01 2.714160e-02 1.000000e+00 2.418203e-03 2.000000e+00 2.530821e-03 3.000000e+00 2.537277e-03 4.000000e+00 2.540729e-03 5.000000e+00 2.543496e-03 6.000000e+00 2.545891e-03 7.000000e+00 2.548039e-03 8.000000e+00 2.550008e-03 9.000000e+00 2.551836e-03 1.000000e+01 2.553552e-03 1.100000e+01 2.555174e-03 1.200000e+01 2.556716e-03 1.300000e+01 2.558189e-03 1.400000e+01 2.559602e-03 1.500000e+01 2.560962e-03 1.600000e+01 2.562274e-03 1.700000e+01 2.563543e-03 1.800000e+01 2.564774e-03 1.900000e+01 2.565969e-03 2.000000e+01 2.567131e-03 1.000000e+00 5.990866e-03 2.000000e+00 1.018206e-02 3.000000e+00 1.265061e-02 4.000000e+00 1.364641e-02 5.000000e+00 1.376892e-02 6.000000e+00 1.379435e-02 7.000000e+00 1.380755e-02 8.000000e+00 1.381675e-02 9.000000e+00 1.382424e-02 1.000000e+01 1.383074e-02 1.100000e+01 1.383657e-02 1.200000e+01 1.384189e-02 1.300000e+01 1.384682e-02 1.400000e+01 1.385143e-02 1.500000e+01 1.385578e-02 1.600000e+01 1.385991e-02 1.700000e+01 1.386385e-02 1.800000e+01 1.386763e-02 1.900000e+01 1.387126e-02 2.000000e+01 1.387477e-02 1.000000e+00 5.873844e-03 2.000000e+00 1.121183e-02 3.000000e+00 1.585760e-02 4.000000e+00 1.973472e-02 5.000000e+00 2.284048e-02 6.000000e+00 2.522396e-02 7.000000e+00 2.696754e-02 8.000000e+00 2.817569e-02 9.000000e+00 2.896560e-02 1.000000e+01 2.945403e-02 1.100000e+01 2.974245e-02 1.200000e+01 2.990755e-02 1.300000e+01 3.000056e-02 1.400000e+01 3.005253e-02 1.500000e+01 3.008049e-02 1.600000e+01 3.009145e-02 1.700000e+01 3.009716e-02 1.800000e+01 3.010264e-02 1.900000e+01 3.010952e-02 2.000000e+01 3.011716e-02 1.000000e+00 1.631847e-03 2.000000e+00 1.823896e-03 3.000000e+00 1.831611e-03 4.000000e+00 1.834250e-03 5.000000e+00 1.836275e-03 6.000000e+00 1.838015e-03 7.000000e+00 1.839572e-03 8.000000e+00 1.840995e-03 9.000000e+00 1.842315e-03 1.000000e+01 1.843552e-03 1.100000e+01 1.844720e-03 1.200000e+01 1.845831e-03 1.300000e+01 1.846891e-03 1.400000e+01 1.847908e-03 1.500000e+01 1.848885e-03 1.600000e+01 1.849829e-03 1.700000e+01 1.850741e-03 1.800000e+01 1.851625e-03 1.900000e+01 1.852484e-03 2.000000e+01 1.853319e-03 1.000000e+00 3.913432e-03 2.000000e+00 6.749069e-03 3.000000e+00 8.487849e-03 4.000000e+00 9.203185e-03 5.000000e+00 9.312757e-03 6.000000e+00 9.336377e-03 7.000000e+00 9.347459e-03 8.000000e+00 9.354809e-03 9.000000e+00 9.360687e-03 1.000000e+01 9.365766e-03 1.100000e+01 9.370315e-03 1.200000e+01 9.374478e-03 1.300000e+01 9.378340e-03 1.400000e+01 9.381960e-03 1.500000e+01 9.385381e-03 1.600000e+01 9.388632e-03 1.700000e+01 9.391739e-03 1.800000e+01 9.394718e-03 1.900000e+01 9.397587e-03 2.000000e+01 9.400355e-03 1.000000e+00 4.555843e-03 2.000000e+00 8.672234e-03 3.000000e+00 1.225870e-02 4.000000e+00 1.526785e-02 5.000000e+00 1.769200e-02 6.000000e+00 1.955262e-02 7.000000e+00 2.089556e-02 8.000000e+00 2.179331e-02 9.000000e+00 2.234357e-02 1.000000e+01 2.265340e-02 1.100000e+01 2.281609e-02 1.200000e+01 2.289770e-02 1.300000e+01 2.293783e-02 1.400000e+01 2.295763e-02 1.500000e+01 2.297116e-02 1.600000e+01 2.298270e-02 1.700000e+01 2.299242e-02 1.800000e+01 2.300076e-02 1.900000e+01 2.300811e-02 2.000000e+01 2.301473e-02 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_NF_RDS.standard0000644000175000017500000000041613546075722024503 0ustar carstencarstenV(d) I(d) 1.000000e+00 1.936901e-03 3.000000e+00 5.370127e-03 5.000000e+00 8.310972e-03 7.000000e+00 1.083999e-02 9.000000e+00 1.301241e-02 1.100000e+01 1.486146e-02 1.300000e+01 1.639589e-02 1.500000e+01 1.759343e-02 1.700000e+01 1.840155e-02 1.900000e+01 1.879527e-02 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_Ig1_vb0.standard0000644000175000017500000001112213546075722024653 0ustar carstencarstenV(g) I(d) 1.000000e+00 1.985201e-04 2.000000e+00 1.924870e-03 3.000000e+00 4.718920e-03 4.000000e+00 7.037712e-03 5.000000e+00 8.470070e-03 6.000000e+00 9.338593e-03 7.000000e+00 9.834692e-03 8.000000e+00 1.007729e-02 9.000000e+00 1.014522e-02 1.000000e+01 1.009282e-02 1.100000e+01 9.958463e-03 1.200000e+01 9.769496e-03 1.300000e+01 9.545505e-03 1.400000e+01 9.300479e-03 1.500000e+01 9.044358e-03 1.600000e+01 8.784145e-03 1.700000e+01 8.524712e-03 1.800000e+01 8.269394e-03 1.900000e+01 8.020412e-03 2.000000e+01 7.779192e-03 1.000000e+00 1.995052e-04 2.000000e+00 1.933282e-03 3.000000e+00 4.763809e-03 4.000000e+00 8.023820e-03 5.000000e+00 1.138635e-02 6.000000e+00 1.459989e-02 7.000000e+00 1.702800e-02 8.000000e+00 1.868076e-02 9.000000e+00 1.978542e-02 1.000000e+01 2.049841e-02 1.100000e+01 2.091737e-02 1.200000e+01 2.110903e-02 1.300000e+01 2.112338e-02 1.400000e+01 2.100011e-02 1.500000e+01 2.077156e-02 1.600000e+01 2.046427e-02 1.700000e+01 2.009983e-02 1.800000e+01 1.969560e-02 1.900000e+01 1.926535e-02 2.000000e+01 1.881983e-02 1.000000e+00 2.005877e-04 2.000000e+00 1.941020e-03 3.000000e+00 4.780265e-03 4.000000e+00 8.050493e-03 5.000000e+00 1.142446e-02 6.000000e+00 1.475285e-02 7.000000e+00 1.796700e-02 8.000000e+00 2.103596e-02 9.000000e+00 2.389466e-02 1.000000e+01 2.626519e-02 1.100000e+01 2.813674e-02 1.200000e+01 2.960809e-02 1.300000e+01 3.076870e-02 1.400000e+01 3.167688e-02 1.500000e+01 3.236875e-02 1.600000e+01 3.286809e-02 1.700000e+01 3.319287e-02 1.800000e+01 3.335903e-02 1.900000e+01 3.338249e-02 2.000000e+01 3.327976e-02 1.000000e+00 1.555040e-04 2.000000e+00 2.298816e-03 3.000000e+00 5.777811e-03 4.000000e+00 8.512023e-03 5.000000e+00 1.004703e-02 6.000000e+00 1.087791e-02 7.000000e+00 1.127323e-02 8.000000e+00 1.139002e-02 9.000000e+00 1.132661e-02 1.000000e+01 1.114737e-02 1.100000e+01 1.089550e-02 1.200000e+01 1.060037e-02 1.300000e+01 1.028193e-02 1.400000e+01 9.953682e-03 1.500000e+01 9.624653e-03 1.600000e+01 9.300759e-03 1.700000e+01 8.985772e-03 1.800000e+01 8.681981e-03 1.900000e+01 8.390664e-03 2.000000e+01 8.112404e-03 1.000000e+00 1.563061e-04 2.000000e+00 2.308700e-03 3.000000e+00 5.817985e-03 4.000000e+00 9.659114e-03 5.000000e+00 1.346378e-02 6.000000e+00 1.696147e-02 7.000000e+00 1.943974e-02 8.000000e+00 2.103496e-02 9.000000e+00 2.203798e-02 1.000000e+01 2.262633e-02 1.100000e+01 2.290775e-02 1.200000e+01 2.295566e-02 1.300000e+01 2.282521e-02 1.400000e+01 2.256012e-02 1.500000e+01 2.219577e-02 1.600000e+01 2.176075e-02 1.700000e+01 2.127787e-02 1.800000e+01 2.076501e-02 1.900000e+01 2.023595e-02 2.000000e+01 1.970109e-02 1.000000e+00 1.571938e-04 2.000000e+00 2.317821e-03 3.000000e+00 5.836971e-03 4.000000e+00 9.689005e-03 5.000000e+00 1.350569e-02 6.000000e+00 1.716355e-02 7.000000e+00 2.062057e-02 8.000000e+00 2.386788e-02 9.000000e+00 2.678882e-02 1.000000e+01 2.910094e-02 1.100000e+01 3.088011e-02 1.200000e+01 3.225528e-02 1.300000e+01 3.331959e-02 1.400000e+01 3.412929e-02 1.500000e+01 3.471844e-02 1.600000e+01 3.510987e-02 1.700000e+01 3.532163e-02 1.800000e+01 3.537066e-02 1.900000e+01 3.527446e-02 2.000000e+01 3.505151e-02 1.000000e+00 2.650466e-04 2.000000e+00 1.584766e-03 3.000000e+00 3.629067e-03 4.000000e+00 5.383164e-03 5.000000e+00 6.591260e-03 6.000000e+00 7.415294e-03 7.000000e+00 7.963827e-03 8.000000e+00 8.309875e-03 9.000000e+00 8.505524e-03 1.000000e+01 8.589245e-03 1.100000e+01 8.590014e-03 1.200000e+01 8.529861e-03 1.300000e+01 8.425589e-03 1.400000e+01 8.290005e-03 1.500000e+01 8.132842e-03 1.600000e+01 7.961465e-03 1.700000e+01 7.781421e-03 1.800000e+01 7.596857e-03 1.900000e+01 7.410849e-03 2.000000e+01 7.225658e-03 1.000000e+00 2.662824e-04 2.000000e+00 1.591683e-03 3.000000e+00 3.692176e-03 4.000000e+00 6.217359e-03 5.000000e+00 8.943127e-03 6.000000e+00 1.165630e-02 7.000000e+00 1.386147e-02 8.000000e+00 1.547732e-02 9.000000e+00 1.663818e-02 1.000000e+01 1.746028e-02 1.100000e+01 1.802132e-02 1.200000e+01 1.837547e-02 1.300000e+01 1.856355e-02 1.400000e+01 1.861814e-02 1.500000e+01 1.856613e-02 1.600000e+01 1.843001e-02 1.700000e+01 1.822855e-02 1.800000e+01 1.797739e-02 1.900000e+01 1.768936e-02 2.000000e+01 1.737491e-02 1.000000e+00 2.676229e-04 2.000000e+00 1.597983e-03 3.000000e+00 3.705356e-03 4.000000e+00 6.239183e-03 5.000000e+00 8.975006e-03 6.000000e+00 1.177859e-02 7.000000e+00 1.457101e-02 8.000000e+00 1.730601e-02 9.000000e+00 1.993774e-02 1.000000e+01 2.225846e-02 1.100000e+01 2.417306e-02 1.200000e+01 2.572181e-02 1.300000e+01 2.697485e-02 1.400000e+01 2.798726e-02 1.500000e+01 2.879544e-02 1.600000e+01 2.942340e-02 1.700000e+01 2.988851e-02 1.800000e+01 3.020516e-02 1.900000e+01 3.038690e-02 2.000000e+01 3.044739e-02 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_corbnet.standard0000644000175000017500000001112213546075722025120 0ustar carstencarstenV(d) I(d) 1.000000e+00 1.695827e-03 2.000000e+00 1.902521e-03 3.000000e+00 1.906588e-03 4.000000e+00 1.909364e-03 5.000000e+00 1.911567e-03 6.000000e+00 1.913453e-03 7.000000e+00 1.915133e-03 8.000000e+00 1.916666e-03 9.000000e+00 1.918084e-03 1.000000e+01 1.919412e-03 1.100000e+01 1.920665e-03 1.200000e+01 1.921855e-03 1.300000e+01 1.922990e-03 1.400000e+01 1.924078e-03 1.500000e+01 1.925124e-03 1.600000e+01 1.926132e-03 1.700000e+01 1.927108e-03 1.800000e+01 1.928052e-03 1.900000e+01 1.928969e-03 2.000000e+01 1.929861e-03 1.000000e+00 3.418731e-03 2.000000e+00 6.028793e-03 3.000000e+00 7.961005e-03 4.000000e+00 9.358161e-03 5.000000e+00 1.033188e-02 6.000000e+00 1.095421e-02 7.000000e+00 1.127158e-02 8.000000e+00 1.135089e-02 9.000000e+00 1.135787e-02 1.000000e+01 1.136624e-02 1.100000e+01 1.137413e-02 1.200000e+01 1.138111e-02 1.300000e+01 1.138729e-02 1.400000e+01 1.139283e-02 1.500000e+01 1.139787e-02 1.600000e+01 1.140251e-02 1.700000e+01 1.140683e-02 1.800000e+01 1.141088e-02 1.900000e+01 1.141470e-02 2.000000e+01 1.141834e-02 1.000000e+00 3.885422e-03 2.000000e+00 7.235522e-03 3.000000e+00 1.004755e-02 4.000000e+00 1.236069e-02 5.000000e+00 1.423938e-02 6.000000e+00 1.575671e-02 7.000000e+00 1.698277e-02 8.000000e+00 1.797853e-02 9.000000e+00 1.879399e-02 1.000000e+01 1.946870e-02 1.100000e+01 2.003326e-02 1.200000e+01 2.051115e-02 1.300000e+01 2.092031e-02 1.400000e+01 2.127448e-02 1.500000e+01 2.158425e-02 1.600000e+01 2.185781e-02 1.700000e+01 2.210159e-02 1.800000e+01 2.232063e-02 1.900000e+01 2.251895e-02 2.000000e+01 2.269977e-02 1.000000e+00 2.032966e-03 2.000000e+00 2.270227e-03 3.000000e+00 2.275120e-03 4.000000e+00 2.278432e-03 5.000000e+00 2.281048e-03 6.000000e+00 2.283284e-03 7.000000e+00 2.285274e-03 8.000000e+00 2.287088e-03 9.000000e+00 2.288767e-03 1.000000e+01 2.290338e-03 1.100000e+01 2.291820e-03 1.200000e+01 2.293227e-03 1.300000e+01 2.294570e-03 1.400000e+01 2.295857e-03 1.500000e+01 2.297094e-03 1.600000e+01 2.298287e-03 1.700000e+01 2.299440e-03 1.800000e+01 2.300557e-03 1.900000e+01 2.301641e-03 2.000000e+01 2.302696e-03 1.000000e+00 3.846361e-03 2.000000e+00 6.767956e-03 3.000000e+00 8.934764e-03 4.000000e+00 1.052445e-02 5.000000e+00 1.167677e-02 6.000000e+00 1.248892e-02 7.000000e+00 1.302277e-02 8.000000e+00 1.331891e-02 9.000000e+00 1.342096e-02 1.000000e+01 1.342906e-02 1.100000e+01 1.343476e-02 1.200000e+01 1.344300e-02 1.300000e+01 1.345098e-02 1.400000e+01 1.345817e-02 1.500000e+01 1.346462e-02 1.600000e+01 1.347046e-02 1.700000e+01 1.347579e-02 1.800000e+01 1.348071e-02 1.900000e+01 1.348530e-02 2.000000e+01 1.348961e-02 1.000000e+00 4.176571e-03 2.000000e+00 7.772887e-03 3.000000e+00 1.078862e-02 4.000000e+00 1.326997e-02 5.000000e+00 1.528918e-02 6.000000e+00 1.692593e-02 7.000000e+00 1.825508e-02 8.000000e+00 1.934097e-02 9.000000e+00 2.023594e-02 1.000000e+01 2.098124e-02 1.100000e+01 2.160882e-02 1.200000e+01 2.214326e-02 1.300000e+01 2.260340e-02 1.400000e+01 2.300375e-02 1.500000e+01 2.335555e-02 1.600000e+01 2.366757e-02 1.700000e+01 2.394667e-02 1.800000e+01 2.419833e-02 1.900000e+01 2.442689e-02 2.000000e+01 2.463589e-02 1.000000e+00 1.358292e-03 2.000000e+00 1.568445e-03 3.000000e+00 1.571741e-03 4.000000e+00 1.573993e-03 5.000000e+00 1.575783e-03 6.000000e+00 1.577315e-03 7.000000e+00 1.578679e-03 8.000000e+00 1.579923e-03 9.000000e+00 1.581073e-03 1.000000e+01 1.582150e-03 1.100000e+01 1.583166e-03 1.200000e+01 1.584130e-03 1.300000e+01 1.585049e-03 1.400000e+01 1.585931e-03 1.500000e+01 1.586778e-03 1.600000e+01 1.587595e-03 1.700000e+01 1.588384e-03 1.800000e+01 1.589149e-03 1.900000e+01 1.589892e-03 2.000000e+01 1.590614e-03 1.000000e+00 2.844473e-03 2.000000e+00 5.026277e-03 3.000000e+00 6.632622e-03 4.000000e+00 7.760035e-03 5.000000e+00 8.477987e-03 6.000000e+00 8.832717e-03 7.000000e+00 8.914513e-03 8.000000e+00 8.922518e-03 9.000000e+00 8.929938e-03 1.000000e+01 8.936386e-03 1.100000e+01 8.942017e-03 1.200000e+01 8.947010e-03 1.300000e+01 8.951507e-03 1.400000e+01 8.955618e-03 1.500000e+01 8.959421e-03 1.600000e+01 8.962975e-03 1.700000e+01 8.966323e-03 1.800000e+01 8.969496e-03 1.900000e+01 8.972521e-03 2.000000e+01 8.975418e-03 1.000000e+00 3.442853e-03 2.000000e+00 6.418174e-03 3.000000e+00 8.921000e-03 4.000000e+00 1.098061e-02 5.000000e+00 1.264950e-02 6.000000e+00 1.399025e-02 7.000000e+00 1.506505e-02 8.000000e+00 1.592943e-02 9.000000e+00 1.662961e-02 1.000000e+01 1.720240e-02 1.100000e+01 1.767634e-02 1.200000e+01 1.807322e-02 1.300000e+01 1.840961e-02 1.400000e+01 1.869809e-02 1.500000e+01 1.894824e-02 1.600000e+01 1.916744e-02 1.700000e+01 1.936138e-02 1.800000e+01 1.953452e-02 1.900000e+01 1.969036e-02 2.000000e+01 1.983168e-02 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_isub.standard0000644000175000017500000001605713546075722024442 0ustar carstencarstenV(d) I(d) I(b) 1.000000e+00 1.002110e-04 -1.012500e-15 2.000000e+00 1.019158e-04 -2.012500e-15 3.000000e+00 1.019201e-04 -3.012500e-15 4.000000e+00 1.019231e-04 -4.012500e-15 5.000000e+00 1.019256e-04 -5.012500e-15 6.000000e+00 1.019277e-04 -6.012500e-15 7.000000e+00 1.019296e-04 -7.012500e-15 8.000000e+00 1.019314e-04 -8.012500e-15 9.000000e+00 1.019330e-04 -9.012500e-15 1.000000e+01 1.019346e-04 -1.001250e-14 1.100000e+01 1.019360e-04 -1.101250e-14 1.200000e+01 1.019374e-04 -1.201259e-14 1.300000e+01 1.019387e-04 -1.301417e-14 1.400000e+01 1.019400e-04 -1.403404e-14 1.500000e+01 1.019412e-04 -1.521576e-14 1.600000e+01 1.019424e-04 -1.749151e-14 1.700000e+01 1.019435e-04 -2.567556e-14 1.800000e+01 1.019446e-04 -6.027346e-14 1.900000e+01 1.019457e-04 -1.954582e-13 2.000000e+01 1.019467e-04 -6.645922e-13 1.000000e+00 2.936423e-04 -1.012500e-15 2.000000e+00 5.173117e-04 -2.012500e-15 3.000000e+00 6.449641e-04 -3.012500e-15 4.000000e+00 6.730230e-04 -4.012500e-15 5.000000e+00 6.730524e-04 -5.012500e-15 6.000000e+00 6.730685e-04 -6.012500e-15 7.000000e+00 6.730818e-04 -7.012500e-15 8.000000e+00 6.730932e-04 -8.012500e-15 9.000000e+00 6.731031e-04 -9.012500e-15 1.000000e+01 6.731120e-04 -1.001250e-14 1.100000e+01 6.731200e-04 -1.101252e-14 1.200000e+01 6.731274e-04 -1.201313e-14 1.300000e+01 6.731344e-04 -1.302429e-14 1.400000e+01 6.731409e-04 -1.416362e-14 1.500000e+01 6.731470e-04 -1.642810e-14 1.600000e+01 6.731529e-04 -2.624979e-14 1.700000e+01 6.731585e-04 -7.666800e-14 1.800000e+01 6.731639e-04 -3.077662e-13 1.900000e+01 6.731690e-04 -1.224295e-12 2.000000e+01 6.731741e-04 -4.409042e-12 1.000000e+00 3.010497e-04 -1.012500e-15 2.000000e+00 5.891755e-04 -2.012500e-15 3.000000e+00 8.601458e-04 -3.012500e-15 4.000000e+00 1.106189e-03 -4.012500e-15 5.000000e+00 1.315584e-03 -5.012500e-15 6.000000e+00 1.473746e-03 -6.012500e-15 7.000000e+00 1.571542e-03 -7.012500e-15 8.000000e+00 1.617118e-03 -8.012500e-15 9.000000e+00 1.631341e-03 -9.012500e-15 1.000000e+01 1.632245e-03 -1.001250e-14 1.100000e+01 1.632268e-03 -1.101255e-14 1.200000e+01 1.632289e-03 -1.201399e-14 1.300000e+01 1.632308e-03 -1.304070e-14 1.400000e+01 1.632326e-03 -1.437436e-14 1.500000e+01 1.632342e-03 -1.840553e-14 1.600000e+01 1.632357e-03 -4.057226e-14 1.700000e+01 1.632371e-03 -1.602438e-13 1.800000e+01 1.632384e-03 -7.141993e-13 1.900000e+01 1.632397e-03 -2.916764e-12 2.000000e+01 1.632408e-03 -1.057814e-11 1.000000e+00 1.232124e-04 -1.000000e-15 2.000000e+00 1.238098e-04 -2.000000e-15 3.000000e+00 1.238151e-04 -3.000000e-15 4.000000e+00 1.238188e-04 -4.000000e-15 5.000000e+00 1.238219e-04 -5.000000e-15 6.000000e+00 1.238245e-04 -6.000000e-15 7.000000e+00 1.238269e-04 -7.000000e-15 8.000000e+00 1.238291e-04 -8.000000e-15 9.000000e+00 1.238311e-04 -9.000000e-15 1.000000e+01 1.238330e-04 -1.000000e-14 1.100000e+01 1.238348e-04 -1.100000e-14 1.200000e+01 1.238365e-04 -1.200013e-14 1.300000e+01 1.238382e-04 -1.300237e-14 1.400000e+01 1.238397e-04 -1.403009e-14 1.500000e+01 1.238412e-04 -1.527924e-14 1.600000e+01 1.238427e-04 -1.800398e-14 1.700000e+01 1.238441e-04 -2.860283e-14 1.800000e+01 1.238455e-04 -7.404918e-14 1.900000e+01 1.238468e-04 -2.510579e-13 2.000000e+01 1.238481e-04 -8.616307e-13 1.000000e+00 3.634717e-04 -1.000000e-15 2.000000e+00 6.446044e-04 -2.000000e-15 3.000000e+00 8.035648e-04 -3.000000e-15 4.000000e+00 8.340161e-04 -4.000000e-15 5.000000e+00 8.340411e-04 -5.000000e-15 6.000000e+00 8.340610e-04 -6.000000e-15 7.000000e+00 8.340776e-04 -7.000000e-15 8.000000e+00 8.340918e-04 -8.000000e-15 9.000000e+00 8.341042e-04 -9.000000e-15 1.000000e+01 8.341152e-04 -1.000000e-14 1.100000e+01 8.341253e-04 -1.100003e-14 1.200000e+01 8.341345e-04 -1.200089e-14 1.300000e+01 8.341431e-04 -1.301647e-14 1.400000e+01 8.341512e-04 -1.420788e-14 1.500000e+01 8.341589e-04 -1.692312e-14 1.600000e+01 8.341662e-04 -2.976438e-14 1.700000e+01 8.341732e-04 -9.651530e-14 1.800000e+01 8.341800e-04 -4.013835e-13 1.900000e+01 8.341864e-04 -1.603753e-12 2.000000e+01 8.341927e-04 -5.759683e-12 1.000000e+00 3.361328e-04 -1.000000e-15 2.000000e+00 6.611264e-04 -2.000000e-15 3.000000e+00 9.699067e-04 -3.000000e-15 4.000000e+00 1.252989e-03 -4.000000e-15 5.000000e+00 1.495730e-03 -5.000000e-15 6.000000e+00 1.679504e-03 -6.000000e-15 7.000000e+00 1.792276e-03 -7.000000e-15 8.000000e+00 1.843685e-03 -8.000000e-15 9.000000e+00 1.858674e-03 -9.000000e-15 1.000000e+01 1.858951e-03 -1.000000e-14 1.100000e+01 1.858978e-03 -1.100006e-14 1.200000e+01 1.859002e-03 -1.200189e-14 1.300000e+01 1.859023e-03 -1.303518e-14 1.400000e+01 1.859044e-03 -1.444624e-14 1.500000e+01 1.859062e-03 -1.914440e-14 1.600000e+01 1.859079e-03 -4.576135e-14 1.700000e+01 1.859095e-03 -1.894164e-13 1.800000e+01 1.859110e-03 -8.513389e-13 1.900000e+01 1.859124e-03 -3.470984e-12 2.000000e+01 1.859138e-03 -1.254555e-11 1.000000e+00 7.881265e-05 -1.619318e-11 2.000000e+00 8.286771e-05 -1.619418e-11 3.000000e+00 8.287111e-05 -1.619518e-11 4.000000e+00 8.287352e-05 -1.619618e-11 5.000000e+00 8.287547e-05 -1.619718e-11 6.000000e+00 8.287716e-05 -1.619818e-11 7.000000e+00 8.287867e-05 -1.619918e-11 8.000000e+00 8.288005e-05 -1.620018e-11 9.000000e+00 8.288133e-05 -1.620118e-11 1.000000e+01 8.288253e-05 -1.620218e-11 1.100000e+01 8.288367e-05 -1.620318e-11 1.200000e+01 8.288474e-05 -1.620418e-11 1.300000e+01 8.288577e-05 -1.620518e-11 1.400000e+01 8.288676e-05 -1.620619e-11 1.500000e+01 8.288770e-05 -1.620731e-11 1.600000e+01 8.288862e-05 -1.620916e-11 1.700000e+01 8.288950e-05 -1.621506e-11 1.800000e+01 8.289036e-05 -1.623938e-11 1.900000e+01 8.289119e-05 -1.633503e-11 2.000000e+01 8.289200e-05 -1.667075e-11 1.000000e+00 2.182754e-04 -1.619318e-11 2.000000e+00 3.826634e-04 -1.619418e-11 3.000000e+00 4.788661e-04 -1.619518e-11 4.000000e+00 5.049200e-04 -1.619618e-11 5.000000e+00 5.052975e-04 -1.619718e-11 6.000000e+00 5.053095e-04 -1.619818e-11 7.000000e+00 5.053194e-04 -1.619918e-11 8.000000e+00 5.053279e-04 -1.620018e-11 9.000000e+00 5.053352e-04 -1.620118e-11 1.000000e+01 5.053418e-04 -1.620218e-11 1.100000e+01 5.053478e-04 -1.620318e-11 1.200000e+01 5.053533e-04 -1.620418e-11 1.300000e+01 5.053584e-04 -1.620519e-11 1.400000e+01 5.053632e-04 -1.620627e-11 1.500000e+01 5.053678e-04 -1.620806e-11 1.600000e+01 5.053721e-04 -1.621470e-11 1.700000e+01 5.053763e-04 -1.624787e-11 1.800000e+01 5.053802e-04 -1.640092e-11 1.900000e+01 5.053841e-04 -1.701467e-11 2.000000e+01 5.053878e-04 -1.917006e-11 1.000000e+00 2.523607e-04 -1.619318e-11 2.000000e+00 4.905480e-04 -1.619418e-11 3.000000e+00 7.115472e-04 -1.619518e-11 4.000000e+00 9.097863e-04 -1.619618e-11 5.000000e+00 1.077043e-03 -1.619718e-11 6.000000e+00 1.203333e-03 -1.619818e-11 7.000000e+00 1.282633e-03 -1.619918e-11 8.000000e+00 1.321084e-03 -1.620018e-11 9.000000e+00 1.334363e-03 -1.620118e-11 1.000000e+01 1.336398e-03 -1.620218e-11 1.100000e+01 1.336421e-03 -1.620318e-11 1.200000e+01 1.336438e-03 -1.620418e-11 1.300000e+01 1.336454e-03 -1.620520e-11 1.400000e+01 1.336468e-03 -1.620643e-11 1.500000e+01 1.336482e-03 -1.620957e-11 1.600000e+01 1.336494e-03 -1.622580e-11 1.700000e+01 1.336505e-03 -1.631341e-11 1.800000e+01 1.336516e-03 -1.672288e-11 1.900000e+01 1.336526e-03 -1.836711e-11 2.000000e+01 1.336536e-03 -2.413686e-11 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_Ig1_vb2.standard0000644000175000017500000001112213546075722024655 0ustar carstencarstenV(g) I(d) 1.000000e+00 8.268372e-06 2.000000e+00 1.023339e-03 3.000000e+00 3.388314e-03 4.000000e+00 5.830774e-03 5.000000e+00 7.389187e-03 6.000000e+00 8.354809e-03 7.000000e+00 8.932543e-03 8.000000e+00 9.247534e-03 9.000000e+00 9.381432e-03 1.000000e+01 9.389808e-03 1.100000e+01 9.311516e-03 1.200000e+01 9.174157e-03 1.300000e+01 8.997489e-03 1.400000e+01 8.795697e-03 1.500000e+01 8.578954e-03 1.600000e+01 8.354527e-03 1.700000e+01 8.127571e-03 1.800000e+01 7.901704e-03 1.900000e+01 7.679430e-03 2.000000e+01 7.462438e-03 1.000000e+00 8.316842e-06 2.000000e+00 1.028459e-03 3.000000e+00 3.405874e-03 4.000000e+00 6.408877e-03 5.000000e+00 9.626976e-03 6.000000e+00 1.283975e-02 7.000000e+00 1.545045e-02 8.000000e+00 1.725973e-02 9.000000e+00 1.847827e-02 1.000000e+01 1.927917e-02 1.100000e+01 1.977185e-02 1.200000e+01 2.002947e-02 1.300000e+01 2.010533e-02 1.400000e+01 2.004067e-02 1.500000e+01 1.986840e-02 1.600000e+01 1.961514e-02 1.700000e+01 1.930234e-02 1.800000e+01 1.894719e-02 1.900000e+01 1.856332e-02 2.000000e+01 1.816141e-02 1.000000e+00 8.371546e-06 2.000000e+00 1.033514e-03 3.000000e+00 3.419912e-03 4.000000e+00 6.433614e-03 5.000000e+00 9.663813e-03 6.000000e+00 1.291396e-02 7.000000e+00 1.609045e-02 8.000000e+00 1.914831e-02 9.000000e+00 2.206587e-02 1.000000e+01 2.461577e-02 1.100000e+01 2.666166e-02 1.200000e+01 2.826588e-02 1.300000e+01 2.952185e-02 1.400000e+01 3.049966e-02 1.500000e+01 3.124475e-02 1.600000e+01 3.178729e-02 1.700000e+01 3.214954e-02 1.800000e+01 3.235035e-02 1.900000e+01 3.240747e-02 2.000000e+01 3.233850e-02 1.000000e+00 6.392042e-07 2.000000e+00 1.162340e-03 3.000000e+00 4.089324e-03 4.000000e+00 7.023175e-03 5.000000e+00 8.739649e-03 6.000000e+00 9.705108e-03 7.000000e+00 1.021137e-02 8.000000e+00 1.042497e-02 9.000000e+00 1.044837e-02 1.000000e+01 1.034772e-02 1.100000e+01 1.016712e-02 1.200000e+01 9.936442e-03 1.300000e+01 9.676124e-03 1.400000e+01 9.400143e-03 1.500000e+01 9.118022e-03 1.600000e+01 8.836185e-03 1.700000e+01 8.558896e-03 1.800000e+01 8.288913e-03 1.900000e+01 8.027941e-03 2.000000e+01 7.776957e-03 1.000000e+00 6.430244e-07 2.000000e+00 1.168146e-03 3.000000e+00 4.109683e-03 4.000000e+00 7.676241e-03 5.000000e+00 1.134779e-02 6.000000e+00 1.489969e-02 7.000000e+00 1.763583e-02 8.000000e+00 1.942750e-02 9.000000e+00 2.056798e-02 1.000000e+01 2.126143e-02 1.100000e+01 2.163098e-02 1.200000e+01 2.175792e-02 1.300000e+01 2.170121e-02 1.400000e+01 2.150622e-02 1.500000e+01 2.120887e-02 1.600000e+01 2.083772e-02 1.700000e+01 2.041541e-02 1.800000e+01 1.995963e-02 1.900000e+01 1.948403e-02 2.000000e+01 1.899900e-02 1.000000e+00 6.473539e-07 2.000000e+00 1.173913e-03 3.000000e+00 4.126064e-03 4.000000e+00 7.704374e-03 5.000000e+00 1.138886e-02 6.000000e+00 1.498703e-02 7.000000e+00 1.842630e-02 8.000000e+00 2.168036e-02 9.000000e+00 2.473151e-02 1.000000e+01 2.728322e-02 1.100000e+01 2.926677e-02 1.200000e+01 3.078950e-02 1.300000e+01 3.195842e-02 1.400000e+01 3.284491e-02 1.500000e+01 3.349356e-02 1.600000e+01 3.393407e-02 1.700000e+01 3.418909e-02 1.800000e+01 3.427860e-02 1.900000e+01 3.422199e-02 2.000000e+01 3.403878e-02 1.000000e+00 3.986450e-05 2.000000e+00 9.014688e-04 3.000000e+00 2.674308e-03 4.000000e+00 4.494577e-03 5.000000e+00 5.776402e-03 6.000000e+00 6.660245e-03 7.000000e+00 7.260273e-03 8.000000e+00 7.652807e-03 9.000000e+00 7.891602e-03 1.000000e+01 8.015888e-03 1.100000e+01 8.054927e-03 1.200000e+01 8.030826e-03 1.300000e+01 7.960387e-03 1.400000e+01 7.856418e-03 1.500000e+01 7.728677e-03 1.600000e+01 7.584585e-03 1.700000e+01 7.429772e-03 1.800000e+01 7.268491e-03 1.900000e+01 7.103939e-03 2.000000e+01 6.938501e-03 1.000000e+00 4.008827e-05 2.000000e+00 9.059422e-04 3.000000e+00 2.691451e-03 4.000000e+00 5.011893e-03 5.000000e+00 7.605568e-03 6.000000e+00 1.028828e-02 7.000000e+00 1.259531e-02 8.000000e+00 1.431554e-02 9.000000e+00 1.555805e-02 1.000000e+01 1.644489e-02 1.100000e+01 1.706066e-02 1.200000e+01 1.746383e-02 1.300000e+01 1.769765e-02 1.400000e+01 1.779596e-02 1.500000e+01 1.778619e-02 1.600000e+01 1.769100e-02 1.700000e+01 1.752912e-02 1.800000e+01 1.731605e-02 1.900000e+01 1.706448e-02 2.000000e+01 1.678478e-02 1.000000e+00 4.033824e-05 2.000000e+00 9.103070e-04 3.000000e+00 2.702740e-03 4.000000e+00 5.032022e-03 5.000000e+00 7.636138e-03 6.000000e+00 1.035609e-02 7.000000e+00 1.309755e-02 8.000000e+00 1.580467e-02 9.000000e+00 1.844394e-02 1.000000e+01 2.086657e-02 1.100000e+01 2.290646e-02 1.200000e+01 2.456204e-02 1.300000e+01 2.589503e-02 1.400000e+01 2.696612e-02 1.500000e+01 2.781860e-02 1.600000e+01 2.848178e-02 1.700000e+01 2.897673e-02 1.800000e+01 2.932040e-02 1.900000e+01 2.952805e-02 2.000000e+01 2.961441e-02 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_RDRIFT_REVS.standard0000644000175000017500000000043013546075722025315 0ustar carstencarstenV(g) I(d) 1.000000e+00 -2.144447e-02 3.000000e+00 -2.425811e-02 5.000000e+00 -2.558516e-02 7.000000e+00 -2.569039e-02 9.000000e+00 -2.507110e-02 1.100000e+01 -2.409971e-02 1.300000e+01 -2.299027e-02 1.500000e+01 -2.185523e-02 1.700000e+01 -2.075094e-02 1.900000e+01 -1.970379e-02 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_Ig1_vb1.standard0000644000175000017500000002746513546075722024675 0ustar carstencarstenV(g) I(d) I(g) I(s) I(b) 1.000000e+00 8.841708e-05 0.000000e+00 -8.841708e-05 -3.000000e-15 2.000000e+00 1.549622e-03 0.000000e+00 -1.549622e-03 -3.000000e-15 3.000000e+00 4.206723e-03 0.000000e+00 -4.206723e-03 -3.000000e-15 4.000000e+00 6.582859e-03 0.000000e+00 -6.582859e-03 -3.000000e-15 5.000000e+00 8.063225e-03 0.000000e+00 -8.063225e-03 -3.000000e-15 6.000000e+00 8.968708e-03 0.000000e+00 -8.968708e-03 -3.000000e-15 7.000000e+00 9.495836e-03 0.000000e+00 -9.495836e-03 -3.000000e-15 8.000000e+00 9.765914e-03 0.000000e+00 -9.765914e-03 -3.000000e-15 9.000000e+00 9.858857e-03 0.000000e+00 -9.858857e-03 -3.000000e-15 1.000000e+01 9.829489e-03 0.000000e+00 -9.829489e-03 -3.000000e-15 1.100000e+01 9.716355e-03 0.000000e+00 -9.716355e-03 -3.000000e-15 1.200000e+01 9.546907e-03 0.000000e+00 -9.546907e-03 -3.000000e-15 1.300000e+01 9.340797e-03 0.000000e+00 -9.340797e-03 -3.000000e-15 1.400000e+01 9.112089e-03 0.000000e+00 -9.112089e-03 -3.000000e-15 1.500000e+01 8.870815e-03 0.000000e+00 -8.870815e-03 -3.000000e-15 1.600000e+01 8.624080e-03 0.000000e+00 -8.624080e-03 -3.000000e-15 1.700000e+01 8.376864e-03 0.000000e+00 -8.376864e-03 -3.000000e-15 1.800000e+01 8.132614e-03 0.000000e+00 -8.132614e-03 -3.000000e-15 1.900000e+01 7.893659e-03 0.000000e+00 -7.893659e-03 -3.000000e-15 2.000000e+01 7.661525e-03 0.000000e+00 -7.661525e-03 -3.000000e-15 1.000000e+00 8.889219e-05 0.000000e+00 -8.889219e-05 -6.000000e-15 2.000000e+00 1.556803e-03 0.000000e+00 -1.556803e-03 -6.000000e-15 3.000000e+00 4.233001e-03 0.000000e+00 -4.233001e-03 -6.000000e-15 4.000000e+00 7.410370e-03 0.000000e+00 -7.410370e-03 -6.000000e-15 5.000000e+00 1.072946e-02 0.000000e+00 -1.072946e-02 -6.000000e-15 6.000000e+00 1.395673e-02 0.000000e+00 -1.395673e-02 -6.000000e-15 7.000000e+00 1.645511e-02 0.000000e+00 -1.645511e-02 -6.000000e-15 8.000000e+00 1.816487e-02 0.000000e+00 -1.816487e-02 -6.000000e-15 9.000000e+00 1.931083e-02 0.000000e+00 -1.931083e-02 -6.000000e-15 1.000000e+01 2.005581e-02 0.000000e+00 -2.005581e-02 -6.000000e-15 1.100000e+01 2.050166e-02 0.000000e+00 -2.050166e-02 -6.000000e-15 1.200000e+01 2.071742e-02 0.000000e+00 -2.071742e-02 -6.000000e-15 1.300000e+01 2.075424e-02 0.000000e+00 -2.075424e-02 -6.000000e-15 1.400000e+01 2.065237e-02 0.000000e+00 -2.065237e-02 -6.000000e-15 1.500000e+01 2.044438e-02 0.000000e+00 -2.044438e-02 -6.000000e-15 1.600000e+01 2.015681e-02 0.000000e+00 -2.015681e-02 -6.000000e-15 1.700000e+01 1.981121e-02 0.000000e+00 -1.981121e-02 -6.000000e-15 1.800000e+01 1.942488e-02 0.000000e+00 -1.942488e-02 -6.000000e-15 1.900000e+01 1.901153e-02 0.000000e+00 -1.901153e-02 -6.000000e-15 2.000000e+01 1.858188e-02 0.000000e+00 -1.858188e-02 -6.000000e-15 1.000000e+00 8.942041e-05 0.000000e+00 -8.942041e-05 -1.100000e-14 2.000000e+00 1.563585e-03 0.000000e+00 -1.563585e-03 -1.100000e-14 3.000000e+00 4.248675e-03 0.000000e+00 -4.248675e-03 -1.100000e-14 4.000000e+00 7.436454e-03 0.000000e+00 -7.436454e-03 -1.100000e-14 5.000000e+00 1.076722e-02 0.000000e+00 -1.076722e-02 -1.100000e-14 6.000000e+00 1.407471e-02 0.000000e+00 -1.407471e-02 -1.100000e-14 7.000000e+00 1.728161e-02 0.000000e+00 -1.728161e-02 -1.100000e-14 8.000000e+00 2.035208e-02 0.000000e+00 -2.035208e-02 -1.100000e-14 9.000000e+00 2.324394e-02 0.000000e+00 -2.324394e-02 -1.100000e-14 1.000000e+01 2.568394e-02 0.000000e+00 -2.568394e-02 -1.100000e-14 1.100000e+01 2.761830e-02 0.000000e+00 -2.761830e-02 -1.100000e-14 1.200000e+01 2.913620e-02 0.000000e+00 -2.913620e-02 -1.100000e-14 1.300000e+01 3.033004e-02 0.000000e+00 -3.033004e-02 -1.100000e-14 1.400000e+01 3.126256e-02 0.000000e+00 -3.126256e-02 -1.100000e-14 1.500000e+01 3.197312e-02 0.000000e+00 -3.197312e-02 -1.100000e-14 1.600000e+01 3.248767e-02 0.000000e+00 -3.248767e-02 -1.100000e-14 1.700000e+01 3.282567e-02 0.000000e+00 -3.282567e-02 -1.100000e-14 1.800000e+01 3.300405e-02 0.000000e+00 -3.300405e-02 -1.100000e-14 1.900000e+01 3.303938e-02 0.000000e+00 -3.303938e-02 -1.100000e-14 2.000000e+01 3.294856e-02 0.000000e+00 -3.294856e-02 -1.100000e-14 1.000000e+00 5.198607e-05 0.000000e+00 -5.198607e-05 -3.000000e-15 2.000000e+00 1.823522e-03 0.000000e+00 -1.823522e-03 -3.000000e-15 3.000000e+00 5.126275e-03 0.000000e+00 -5.126275e-03 -3.000000e-15 4.000000e+00 7.952703e-03 0.000000e+00 -7.952703e-03 -3.000000e-15 5.000000e+00 9.555912e-03 0.000000e+00 -9.555912e-03 -3.000000e-15 6.000000e+00 1.043760e-02 0.000000e+00 -1.043760e-02 -3.000000e-15 7.000000e+00 1.087483e-02 0.000000e+00 -1.087483e-02 -3.000000e-15 8.000000e+00 1.102820e-02 0.000000e+00 -1.102820e-02 -3.000000e-15 9.000000e+00 1.099760e-02 0.000000e+00 -1.099760e-02 -3.000000e-15 1.000000e+01 1.084807e-02 0.000000e+00 -1.084807e-02 -3.000000e-15 1.100000e+01 1.062313e-02 0.000000e+00 -1.062313e-02 -3.000000e-15 1.200000e+01 1.035233e-02 0.000000e+00 -1.035233e-02 -3.000000e-15 1.300000e+01 1.005582e-02 0.000000e+00 -1.005582e-02 -3.000000e-15 1.400000e+01 9.747277e-03 0.000000e+00 -9.747277e-03 -3.000000e-15 1.500000e+01 9.435910e-03 0.000000e+00 -9.435910e-03 -3.000000e-15 1.600000e+01 9.127835e-03 0.000000e+00 -9.127835e-03 -3.000000e-15 1.700000e+01 8.827012e-03 0.000000e+00 -8.827012e-03 -3.000000e-15 1.800000e+01 8.535909e-03 0.000000e+00 -8.535909e-03 -3.000000e-15 1.900000e+01 8.255969e-03 0.000000e+00 -8.255969e-03 -3.000000e-15 2.000000e+01 7.987925e-03 0.000000e+00 -7.987925e-03 -3.000000e-15 1.000000e+00 5.227538e-05 0.000000e+00 -5.227538e-05 -6.000000e-15 2.000000e+00 1.831891e-03 0.000000e+00 -1.831891e-03 -6.000000e-15 3.000000e+00 5.151282e-03 0.000000e+00 -5.151282e-03 -6.000000e-15 4.000000e+00 8.907331e-03 0.000000e+00 -8.907331e-03 -6.000000e-15 5.000000e+00 1.267479e-02 0.000000e+00 -1.267479e-02 -6.000000e-15 6.000000e+00 1.621081e-02 0.000000e+00 -1.621081e-02 -6.000000e-15 7.000000e+00 1.878621e-02 0.000000e+00 -1.878621e-02 -6.000000e-15 8.000000e+00 2.045229e-02 0.000000e+00 -2.045229e-02 -6.000000e-15 9.000000e+00 2.150490e-02 0.000000e+00 -2.150490e-02 -6.000000e-15 1.000000e+01 2.213135e-02 0.000000e+00 -2.213135e-02 -6.000000e-15 1.100000e+01 2.244481e-02 0.000000e+00 -2.244481e-02 -6.000000e-15 1.200000e+01 2.252150e-02 0.000000e+00 -2.252150e-02 -6.000000e-15 1.300000e+01 2.241792e-02 0.000000e+00 -2.241792e-02 -6.000000e-15 1.400000e+01 2.217838e-02 0.000000e+00 -2.217838e-02 -6.000000e-15 1.500000e+01 2.183846e-02 0.000000e+00 -2.183846e-02 -6.000000e-15 1.600000e+01 2.142672e-02 0.000000e+00 -2.142672e-02 -6.000000e-15 1.700000e+01 2.096591e-02 0.000000e+00 -2.096591e-02 -6.000000e-15 1.800000e+01 2.047384e-02 0.000000e+00 -2.047384e-02 -6.000000e-15 1.900000e+01 1.996424e-02 0.000000e+00 -1.996424e-02 -6.000000e-15 2.000000e+01 1.944750e-02 0.000000e+00 -1.944750e-02 -6.000000e-15 1.000000e+00 5.259918e-05 0.000000e+00 -5.259918e-05 -1.100000e-14 2.000000e+00 1.839825e-03 0.000000e+00 -1.839825e-03 -1.100000e-14 3.000000e+00 5.169465e-03 0.000000e+00 -5.169465e-03 -1.100000e-14 4.000000e+00 8.936730e-03 0.000000e+00 -8.936730e-03 -1.100000e-14 5.000000e+00 1.271653e-02 0.000000e+00 -1.271653e-02 -1.100000e-14 6.000000e+00 1.636152e-02 0.000000e+00 -1.636152e-02 -1.100000e-14 7.000000e+00 1.981950e-02 0.000000e+00 -1.981950e-02 -1.100000e-14 8.000000e+00 2.307527e-02 0.000000e+00 -2.307527e-02 -1.100000e-14 9.000000e+00 2.606006e-02 0.000000e+00 -2.606006e-02 -1.100000e-14 1.000000e+01 2.846229e-02 0.000000e+00 -2.846229e-02 -1.100000e-14 1.100000e+01 3.031381e-02 0.000000e+00 -3.031381e-02 -1.100000e-14 1.200000e+01 3.174026e-02 0.000000e+00 -3.174026e-02 -1.100000e-14 1.300000e+01 3.284093e-02 0.000000e+00 -3.284093e-02 -1.100000e-14 1.400000e+01 3.367745e-02 0.000000e+00 -3.367745e-02 -1.100000e-14 1.500000e+01 3.428749e-02 0.000000e+00 -3.428749e-02 -1.100000e-14 1.600000e+01 3.469620e-02 0.000000e+00 -3.469620e-02 -1.100000e-14 1.700000e+01 3.492321e-02 0.000000e+00 -3.492321e-02 -1.100000e-14 1.800000e+01 3.498650e-02 0.000000e+00 -3.498650e-02 -1.100000e-14 1.900000e+01 3.490425e-02 0.000000e+00 -3.490425e-02 -1.100000e-14 2.000000e+01 3.469531e-02 0.000000e+00 -3.469531e-02 -1.100000e-14 1.000000e+00 1.500974e-04 0.000000e+00 -1.500974e-04 -3.000000e-15 2.000000e+00 1.301969e-03 0.000000e+00 -1.301969e-03 -3.000000e-15 3.000000e+00 3.261943e-03 0.000000e+00 -3.261943e-03 -3.000000e-15 4.000000e+00 5.046472e-03 0.000000e+00 -5.046472e-03 -3.000000e-15 5.000000e+00 6.283259e-03 0.000000e+00 -6.283259e-03 -3.000000e-15 6.000000e+00 7.130413e-03 0.000000e+00 -7.130413e-03 -3.000000e-15 7.000000e+00 7.698762e-03 0.000000e+00 -7.698762e-03 -3.000000e-15 8.000000e+00 8.062631e-03 0.000000e+00 -8.062631e-03 -3.000000e-15 9.000000e+00 8.274772e-03 0.000000e+00 -8.274772e-03 -3.000000e-15 1.000000e+01 8.373963e-03 0.000000e+00 -8.373963e-03 -3.000000e-15 1.100000e+01 8.389298e-03 0.000000e+00 -8.389298e-03 -3.000000e-15 1.200000e+01 8.342845e-03 0.000000e+00 -8.342845e-03 -3.000000e-15 1.300000e+01 8.251410e-03 0.000000e+00 -8.251410e-03 -3.000000e-15 1.400000e+01 8.127805e-03 0.000000e+00 -8.127805e-03 -3.000000e-15 1.500000e+01 7.981775e-03 0.000000e+00 -7.981775e-03 -3.000000e-15 1.600000e+01 7.820710e-03 0.000000e+00 -7.820710e-03 -3.000000e-15 1.700000e+01 7.650190e-03 0.000000e+00 -7.650190e-03 -3.000000e-15 1.800000e+01 7.474404e-03 0.000000e+00 -7.474404e-03 -3.000000e-15 1.900000e+01 7.296478e-03 0.000000e+00 -7.296478e-03 -3.000000e-15 2.000000e+01 7.118719e-03 0.000000e+00 -7.118719e-03 -3.000000e-15 1.000000e+00 1.508598e-04 0.000000e+00 -1.508598e-04 -6.000000e-15 2.000000e+00 1.307979e-03 0.000000e+00 -1.307979e-03 -6.000000e-15 3.000000e+00 3.300505e-03 0.000000e+00 -3.300505e-03 -6.000000e-15 4.000000e+00 5.758551e-03 0.000000e+00 -5.758551e-03 -6.000000e-15 5.000000e+00 8.442945e-03 0.000000e+00 -8.442945e-03 -6.000000e-15 6.000000e+00 1.115437e-02 0.000000e+00 -1.115437e-02 -6.000000e-15 7.000000e+00 1.339999e-02 0.000000e+00 -1.339999e-02 -6.000000e-15 8.000000e+00 1.505435e-02 0.000000e+00 -1.505435e-02 -6.000000e-15 9.000000e+00 1.624506e-02 0.000000e+00 -1.624506e-02 -6.000000e-15 1.000000e+01 1.709088e-02 0.000000e+00 -1.709088e-02 -6.000000e-15 1.100000e+01 1.767202e-02 0.000000e+00 -1.767202e-02 -6.000000e-15 1.200000e+01 1.804418e-02 0.000000e+00 -1.804418e-02 -6.000000e-15 1.300000e+01 1.824906e-02 0.000000e+00 -1.824906e-02 -6.000000e-15 1.400000e+01 1.831969e-02 0.000000e+00 -1.831969e-02 -6.000000e-15 1.500000e+01 1.828317e-02 0.000000e+00 -1.828317e-02 -6.000000e-15 1.600000e+01 1.816203e-02 0.000000e+00 -1.816203e-02 -6.000000e-15 1.700000e+01 1.797506e-02 0.000000e+00 -1.797506e-02 -6.000000e-15 1.800000e+01 1.773782e-02 0.000000e+00 -1.773782e-02 -6.000000e-15 1.900000e+01 1.746311e-02 0.000000e+00 -1.746311e-02 -6.000000e-15 2.000000e+01 1.716134e-02 0.000000e+00 -1.716134e-02 -6.000000e-15 1.000000e+00 1.516972e-04 0.000000e+00 -1.516972e-04 -1.100000e-14 2.000000e+00 1.313593e-03 0.000000e+00 -1.313593e-03 -1.100000e-14 3.000000e+00 3.313062e-03 0.000000e+00 -3.313062e-03 -1.100000e-14 4.000000e+00 5.779843e-03 0.000000e+00 -5.779843e-03 -1.100000e-14 5.000000e+00 8.474433e-03 0.000000e+00 -8.474433e-03 -1.100000e-14 6.000000e+00 1.125344e-02 0.000000e+00 -1.125344e-02 -1.100000e-14 7.000000e+00 1.403245e-02 0.000000e+00 -1.403245e-02 -1.100000e-14 8.000000e+00 1.676187e-02 0.000000e+00 -1.676187e-02 -1.100000e-14 9.000000e+00 1.940347e-02 0.000000e+00 -1.940347e-02 -1.100000e-14 1.000000e+01 2.176572e-02 0.000000e+00 -2.176572e-02 -1.100000e-14 1.100000e+01 2.372674e-02 0.000000e+00 -2.372674e-02 -1.100000e-14 1.200000e+01 2.531346e-02 0.000000e+00 -2.531346e-02 -1.100000e-14 1.300000e+01 2.659454e-02 0.000000e+00 -2.659454e-02 -1.100000e-14 1.400000e+01 2.762751e-02 0.000000e+00 -2.762751e-02 -1.100000e-14 1.500000e+01 2.845125e-02 0.000000e+00 -2.845125e-02 -1.100000e-14 1.600000e+01 2.909163e-02 0.000000e+00 -2.909163e-02 -1.100000e-14 1.700000e+01 2.956728e-02 0.000000e+00 -2.956728e-02 -1.100000e-14 1.800000e+01 2.989348e-02 0.000000e+00 -2.989348e-02 -1.100000e-14 1.900000e+01 3.008438e-02 0.000000e+00 -3.008438e-02 -1.100000e-14 2.000000e+01 3.015401e-02 0.000000e+00 -3.015401e-02 -1.100000e-14 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/acFreq_conqs.standard0000644000175000017500000000711713546075722025121 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 7.44983121005731e-13 7.07314488229684e-13 2.33752933933327e-14 1258.925 7.44983312157907e-13 7.07314693297685e-13 2.33753121855438e-14 1584.893 7.44983187058889e-13 7.07314643691481e-13 2.33753039102281e-14 1995.262 7.4498319661203e-13 7.07314612884207e-13 2.33753074497266e-14 2511.886 7.44983483102067e-13 7.07314892561906e-13 2.33753021198927e-14 3162.278 7.44982983354042e-13 7.07314591894563e-13 2.33752993914971e-14 3981.072 7.44983178996729e-13 7.07314391901468e-13 2.33753005880135e-14 5011.872 7.44983239993158e-13 7.07314443773893e-13 2.3375301139359e-14 6309.573 7.44983069553308e-13 7.07314523248058e-13 2.33753037616824e-14 7943.282 7.44983189420211e-13 7.07314517382356e-13 2.33753103520273e-14 10000 7.44983121005731e-13 7.07314488229684e-13 2.33752933933327e-14 12589.25 7.44983312157907e-13 7.07314693297685e-13 2.33753121855438e-14 15848.93 7.44983187058889e-13 7.07314643691481e-13 2.33753039102281e-14 19952.62 7.4498319661203e-13 7.07314612884207e-13 2.33753074497266e-14 25118.86 7.44983483102067e-13 7.07314892561906e-13 2.33753021198927e-14 31622.78 7.44982983354042e-13 7.07314591894563e-13 2.33752993914971e-14 39810.72 7.44983178996729e-13 7.07314391901468e-13 2.33753005880135e-14 50118.72 7.44983239993157e-13 7.07314443773893e-13 2.3375301139359e-14 63095.73 7.44983069553308e-13 7.07314523248058e-13 2.33753037616824e-14 79432.82 7.44983189420211e-13 7.07314517382356e-13 2.33753103520273e-14 100000 7.44983121005731e-13 7.07314488229684e-13 2.33752933933327e-14 125892.5 7.44983312157907e-13 7.07314693297685e-13 2.33753121855438e-14 158489.3 7.44983187058889e-13 7.07314643691481e-13 2.33753039102281e-14 199526.2 7.4498319661203e-13 7.07314612884207e-13 2.33753074497266e-14 251188.6 7.44983483102067e-13 7.07314892561906e-13 2.33753021198927e-14 316227.8 7.44982983354042e-13 7.07314591894563e-13 2.33752993914971e-14 398107.2 7.44983178996729e-13 7.07314391901468e-13 2.33753005880135e-14 501187.2 7.44983239993157e-13 7.07314443773893e-13 2.3375301139359e-14 630957.3 7.44983069553308e-13 7.07314523248058e-13 2.33753037616824e-14 794328.2 7.44982989056e-13 7.07314517382356e-13 2.33753103520273e-14 1000000 7.44982961850788e-13 7.07314329074741e-13 2.33752933933327e-14 1258925 7.449831857366e-13 7.07314566876379e-13 2.33753121855438e-14 1584893 7.44982885798912e-13 7.07314342431504e-13 2.33753039102281e-14 1995262 7.44982797779839e-13 7.07314134285577e-13 2.33753074497266e-14 2511886 7.44982849494717e-13 7.07313625347207e-13 2.33753021198927e-14 3162278 7.44981976769908e-13 7.07313082018362e-13 2.33752993914971e-14 3981072 7.4498157988028e-13 7.07312393005905e-13 2.33753005880135e-14 5011872 7.44980699546106e-13 7.0731158577096e-13 2.3375301139359e-14 6309573 7.44979538142857e-13 7.07309730619589e-13 2.33753037616824e-14 7943282 7.4497717849388e-13 7.07306903542337e-13 2.33753103520273e-14 10000000 7.44973890019032e-13 7.07302392454009e-13 2.33752933933327e-14 12589250 7.44968647286371e-13 7.07295603680427e-13 2.33753121855438e-14 15848930 7.44959990040633e-13 7.07284216433769e-13 2.33753039102281e-14 19952620 7.44946424284003e-13 7.07266513721949e-13 2.33753074497266e-14 25118860 7.44925191225905e-13 7.07238226072606e-13 2.33753021198927e-14 31622780 7.44890880905789e-13 7.07193801798493e-13 2.33752993914971e-14 39810720 7.44836859841558e-13 7.07122897706585e-13 2.33753005880135e-14 50118720 7.44751106643782e-13 7.07011177907062e-13 2.3375301139359e-14 63095730 7.44615550622811e-13 7.0683374693953e-13 2.33753012392464e-14 79432820 7.44400931022958e-13 7.06552933016231e-13 2.33753103520273e-14 100000000 7.44060818110513e-13 7.06107934606105e-13 2.33752933933327e-14 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_Id1_vb0.standard0000644000175000017500000001112213546075722024650 0ustar carstencarstenV(d) I(d) 1.000000e+00 1.219562e-03 2.000000e+00 1.245328e-03 3.000000e+00 1.245964e-03 4.000000e+00 1.246417e-03 5.000000e+00 1.246785e-03 6.000000e+00 1.247105e-03 7.000000e+00 1.247392e-03 8.000000e+00 1.247654e-03 9.000000e+00 1.247898e-03 1.000000e+01 1.248126e-03 1.100000e+01 1.248343e-03 1.200000e+01 1.248548e-03 1.300000e+01 1.248744e-03 1.400000e+01 1.248932e-03 1.500000e+01 1.249113e-03 1.600000e+01 1.249288e-03 1.700000e+01 1.249457e-03 1.800000e+01 1.249620e-03 1.900000e+01 1.249779e-03 2.000000e+01 1.249934e-03 1.000000e+00 3.464524e-03 2.000000e+00 6.120070e-03 3.000000e+00 7.710222e-03 4.000000e+00 8.139444e-03 5.000000e+00 8.144155e-03 6.000000e+00 8.146505e-03 7.000000e+00 8.148460e-03 8.000000e+00 8.150127e-03 9.000000e+00 8.151581e-03 1.000000e+01 8.152877e-03 1.100000e+01 8.154054e-03 1.200000e+01 8.155137e-03 1.300000e+01 8.156145e-03 1.400000e+01 8.157093e-03 1.500000e+01 8.157989e-03 1.600000e+01 8.158842e-03 1.700000e+01 8.159658e-03 1.800000e+01 8.160442e-03 1.900000e+01 8.161196e-03 2.000000e+01 8.161925e-03 1.000000e+00 3.579611e-03 2.000000e+00 6.985987e-03 3.000000e+00 1.016807e-02 4.000000e+00 1.304619e-02 5.000000e+00 1.551127e-02 6.000000e+00 1.743135e-02 7.000000e+00 1.870718e-02 8.000000e+00 1.937902e-02 9.000000e+00 1.963869e-02 1.000000e+01 1.968881e-02 1.100000e+01 1.969220e-02 1.200000e+01 1.969526e-02 1.300000e+01 1.969805e-02 1.400000e+01 1.970062e-02 1.500000e+01 1.970299e-02 1.600000e+01 1.970519e-02 1.700000e+01 1.970724e-02 1.800000e+01 1.970916e-02 1.900000e+01 1.971097e-02 2.000000e+01 1.971268e-02 1.000000e+00 1.499015e-03 2.000000e+00 1.510863e-03 3.000000e+00 1.511642e-03 4.000000e+00 1.512199e-03 5.000000e+00 1.512653e-03 6.000000e+00 1.513047e-03 7.000000e+00 1.513401e-03 8.000000e+00 1.513725e-03 9.000000e+00 1.514027e-03 1.000000e+01 1.514310e-03 1.100000e+01 1.514577e-03 1.200000e+01 1.514831e-03 1.300000e+01 1.515074e-03 1.400000e+01 1.515307e-03 1.500000e+01 1.515531e-03 1.600000e+01 1.515748e-03 1.700000e+01 1.515957e-03 1.800000e+01 1.516159e-03 1.900000e+01 1.516356e-03 2.000000e+01 1.516548e-03 1.000000e+00 4.248126e-03 2.000000e+00 7.549798e-03 3.000000e+00 9.536079e-03 4.000000e+00 1.004246e-02 5.000000e+00 1.004628e-02 6.000000e+00 1.004918e-02 7.000000e+00 1.005160e-02 8.000000e+00 1.005366e-02 9.000000e+00 1.005546e-02 1.000000e+01 1.005706e-02 1.100000e+01 1.005851e-02 1.200000e+01 1.005985e-02 1.300000e+01 1.006109e-02 1.400000e+01 1.006226e-02 1.500000e+01 1.006337e-02 1.600000e+01 1.006442e-02 1.700000e+01 1.006543e-02 1.800000e+01 1.006639e-02 1.900000e+01 1.006732e-02 2.000000e+01 1.006822e-02 1.000000e+00 3.983013e-03 2.000000e+00 7.806471e-03 3.000000e+00 1.140870e-02 4.000000e+00 1.469338e-02 5.000000e+00 1.752827e-02 6.000000e+00 1.975191e-02 7.000000e+00 2.123761e-02 8.000000e+00 2.202156e-02 9.000000e+00 2.232269e-02 1.000000e+01 2.237325e-02 1.100000e+01 2.237708e-02 1.200000e+01 2.238056e-02 1.300000e+01 2.238375e-02 1.400000e+01 2.238668e-02 1.500000e+01 2.238938e-02 1.600000e+01 2.239189e-02 1.700000e+01 2.239423e-02 1.800000e+01 2.239642e-02 1.900000e+01 2.239848e-02 2.000000e+01 2.240043e-02 1.000000e+00 9.592475e-04 2.000000e+00 1.013486e-03 3.000000e+00 1.013994e-03 4.000000e+00 1.014354e-03 5.000000e+00 1.014645e-03 6.000000e+00 1.014897e-03 7.000000e+00 1.015123e-03 8.000000e+00 1.015329e-03 9.000000e+00 1.015521e-03 1.000000e+01 1.015700e-03 1.100000e+01 1.015869e-03 1.200000e+01 1.016030e-03 1.300000e+01 1.016184e-03 1.400000e+01 1.016331e-03 1.500000e+01 1.016473e-03 1.600000e+01 1.016609e-03 1.700000e+01 1.016741e-03 1.800000e+01 1.016869e-03 1.900000e+01 1.016993e-03 2.000000e+01 1.017114e-03 1.000000e+00 2.600841e-03 2.000000e+00 4.571814e-03 3.000000e+00 5.763391e-03 4.000000e+00 6.127568e-03 5.000000e+00 6.139122e-03 6.000000e+00 6.140888e-03 7.000000e+00 6.142352e-03 8.000000e+00 6.143599e-03 9.000000e+00 6.144687e-03 1.000000e+01 6.145657e-03 1.100000e+01 6.146538e-03 1.200000e+01 6.147348e-03 1.300000e+01 6.148102e-03 1.400000e+01 6.148811e-03 1.500000e+01 6.149482e-03 1.600000e+01 6.150120e-03 1.700000e+01 6.150731e-03 1.800000e+01 6.151317e-03 1.900000e+01 6.151881e-03 2.000000e+01 6.152426e-03 1.000000e+00 3.015007e-03 2.000000e+00 5.849385e-03 3.000000e+00 8.466723e-03 4.000000e+00 1.080893e-02 5.000000e+00 1.279635e-02 6.000000e+00 1.433369e-02 7.000000e+00 1.535335e-02 8.000000e+00 1.589493e-02 9.000000e+00 1.611120e-02 1.000000e+01 1.616483e-02 1.100000e+01 1.616851e-02 1.200000e+01 1.617101e-02 1.300000e+01 1.617329e-02 1.400000e+01 1.617539e-02 1.500000e+01 1.617732e-02 1.600000e+01 1.617912e-02 1.700000e+01 1.618079e-02 1.800000e+01 1.618236e-02 1.900000e+01 1.618384e-02 2.000000e+01 1.618524e-02 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/acVd_codfm.standard0000644000175000017500000000545113546075722024541 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 1 -1.793414e-04 4.186233e-03 5.40607646371879e-13 6.89679786733812e-13 2 -3.174042e-04 4.102579e-03 5.65313153061003e-13 6.59775678637144e-13 3 -3.920344e-04 3.932343e-03 5.91506160152874e-13 6.24874469187489e-13 4 -3.763559e-04 3.649072e-03 6.19459867721462e-13 5.83188557900847e-13 5 -2.390232e-04 3.226929e-03 6.49480375849646e-13 5.31943244025955e-13 6 5.147385e-05 2.649065e-03 6.80777084323366e-13 4.6852112685414e-13 7 5.035764e-04 1.941185e-03 7.09652292141455e-13 3.95028806955773e-13 8 1.056291e-03 1.213693e-03 7.3046929777775e-13 3.23031387462158e-13 9 1.575106e-03 6.253565e-04 7.41399000737015e-13 2.65759871955645e-13 10 1.948442e-03 2.588111e-04 7.44004101442357e-13 2.12304357482331e-13 11 2.184912e-03 6.324208e-05 7.1941839478567e-13 6.92043087373686e-14 12 2.263781e-03 4.907845e-06 7.11085392529473e-13 3.88780405263991e-14 13 2.264258e-03 4.491492e-06 7.09749792167853e-13 3.15061285304218e-14 14 2.264675e-03 4.153234e-06 7.09023091971096e-13 2.74116074218123e-14 15 2.265069e-03 3.858004e-06 7.08555391844464e-13 2.47173166923213e-14 16 2.265444e-03 3.595987e-06 7.08225791755224e-13 2.27724061657283e-14 17 2.265802e-03 3.363101e-06 7.07980191688726e-13 2.12834857625966e-14 18 2.266139e-03 3.156478e-06 7.07789791637175e-13 2.00963154411651e-14 19 2.266454e-03 2.973427e-06 7.07638291596155e-13 1.91210151770983e-14 20 2.266749e-03 2.811293e-06 7.07515191562825e-13 1.83012149551338e-14 1 -9.507933e-05 3.584418e-03 5.36038245134694e-13 6.92025887369029e-13 2 -1.495096e-04 3.470440e-03 5.60486751754234e-13 6.63130379545444e-13 3 -1.483383e-04 3.289524e-03 5.8654315880912e-13 6.29353370400171e-13 4 -7.359709e-05 3.022339e-03 6.14523666384964e-13 5.88767659411413e-13 5 9.616443e-05 2.649358e-03 6.44842674593968e-13 5.38240045730841e-13 6 3.827649e-04 2.157613e-03 6.76785783242704e-13 4.74591628497754e-13 7 7.891249e-04 1.568785e-03 7.06483191283407e-13 3.99578808187706e-13 8 1.261415e-03 9.739150e-04 7.27793797053346e-13 3.2517968804382e-13 9 1.689582e-03 5.005679e-04 7.38374999918253e-13 2.64173771526201e-13 10 1.988306e-03 2.109024e-04 7.37402899655053e-13 1.89485151303932e-13 11 2.166460e-03 6.226796e-05 7.19274594746735e-13 6.48011075451826e-14 12 2.244531e-03 4.434014e-06 7.12017492781843e-13 3.73103501019401e-14 13 2.245504e-03 3.728507e-06 7.10998192505863e-13 3.06774083060422e-14 14 2.245909e-03 3.442900e-06 7.10447492356759e-13 2.68993572831184e-14 15 2.246287e-03 3.195906e-06 7.10084892258583e-13 2.4364146596699e-14 16 2.246645e-03 2.977950e-06 7.09825392188322e-13 2.2512106095251e-14 17 2.246983e-03 2.785083e-06 7.09629392135255e-13 2.10828457082725e-14 18 2.247300e-03 2.614513e-06 7.09475892093694e-13 1.99366553979364e-14 19 2.247597e-03 2.463733e-06 7.09352492060283e-13 1.89909151418731e-14 20 2.247873e-03 2.330373e-06 7.09251192032855e-13 1.81932749259086e-14 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_Id1_vb2.standard0000644000175000017500000001112213546075722024652 0ustar carstencarstenV(d) I(d) 1.000000e+00 6.422352e-04 2.000000e+00 6.428937e-04 3.000000e+00 6.432453e-04 4.000000e+00 6.435086e-04 5.000000e+00 6.437290e-04 6.000000e+00 6.439230e-04 7.000000e+00 6.440986e-04 8.000000e+00 6.442602e-04 9.000000e+00 6.444109e-04 1.000000e+01 6.445526e-04 1.100000e+01 6.446867e-04 1.200000e+01 6.448144e-04 1.300000e+01 6.449365e-04 1.400000e+01 6.450537e-04 1.500000e+01 6.451665e-04 1.600000e+01 6.452755e-04 1.700000e+01 6.453809e-04 1.800000e+01 6.454831e-04 1.900000e+01 6.455825e-04 2.000000e+01 6.456791e-04 1.000000e+00 2.977256e-03 2.000000e+00 5.228314e-03 3.000000e+00 6.477857e-03 4.000000e+00 6.715562e-03 5.000000e+00 6.718226e-03 6.000000e+00 6.720357e-03 7.000000e+00 6.722128e-03 8.000000e+00 6.723639e-03 9.000000e+00 6.724962e-03 1.000000e+01 6.726146e-03 1.100000e+01 6.727224e-03 1.200000e+01 6.728219e-03 1.300000e+01 6.729149e-03 1.400000e+01 6.730024e-03 1.500000e+01 6.730854e-03 1.600000e+01 6.731645e-03 1.700000e+01 6.732402e-03 1.800000e+01 6.733130e-03 1.900000e+01 6.733831e-03 2.000000e+01 6.734510e-03 1.000000e+00 3.294986e-03 2.000000e+00 6.455178e-03 3.000000e+00 9.415993e-03 4.000000e+00 1.209326e-02 5.000000e+00 1.437660e-02 6.000000e+00 1.613508e-02 7.000000e+00 1.727548e-02 8.000000e+00 1.784928e-02 9.000000e+00 1.805204e-02 1.000000e+01 1.807848e-02 1.100000e+01 1.808178e-02 1.200000e+01 1.808478e-02 1.300000e+01 1.808752e-02 1.400000e+01 1.809003e-02 1.500000e+01 1.809235e-02 1.600000e+01 1.809451e-02 1.700000e+01 1.809652e-02 1.800000e+01 1.809841e-02 1.900000e+01 1.810018e-02 2.000000e+01 1.810186e-02 1.000000e+00 7.331768e-04 2.000000e+00 7.338702e-04 3.000000e+00 7.342747e-04 4.000000e+00 7.345786e-04 5.000000e+00 7.348337e-04 6.000000e+00 7.350585e-04 7.000000e+00 7.352622e-04 8.000000e+00 7.354499e-04 9.000000e+00 7.356250e-04 1.000000e+01 7.357896e-04 1.100000e+01 7.359456e-04 1.200000e+01 7.360941e-04 1.300000e+01 7.362361e-04 1.400000e+01 7.363725e-04 1.500000e+01 7.365038e-04 1.600000e+01 7.366306e-04 1.700000e+01 7.367534e-04 1.800000e+01 7.368724e-04 1.900000e+01 7.369880e-04 2.000000e+01 7.371006e-04 1.000000e+00 3.617289e-03 2.000000e+00 6.388151e-03 3.000000e+00 7.922089e-03 4.000000e+00 8.183889e-03 5.000000e+00 8.187106e-03 6.000000e+00 8.189705e-03 7.000000e+00 8.191867e-03 8.000000e+00 8.193712e-03 9.000000e+00 8.195327e-03 1.000000e+01 8.196772e-03 1.100000e+01 8.198088e-03 1.200000e+01 8.199302e-03 1.300000e+01 8.200437e-03 1.400000e+01 8.201504e-03 1.500000e+01 8.202517e-03 1.600000e+01 8.203482e-03 1.700000e+01 8.204406e-03 1.800000e+01 8.205294e-03 1.900000e+01 8.206150e-03 2.000000e+01 8.206977e-03 1.000000e+00 3.653959e-03 2.000000e+00 7.188895e-03 3.000000e+00 1.052901e-02 4.000000e+00 1.357379e-02 5.000000e+00 1.619018e-02 6.000000e+00 1.821819e-02 7.000000e+00 1.953848e-02 8.000000e+00 2.020163e-02 9.000000e+00 2.043188e-02 1.000000e+01 2.045449e-02 1.100000e+01 2.045823e-02 1.200000e+01 2.046162e-02 1.300000e+01 2.046473e-02 1.400000e+01 2.046758e-02 1.500000e+01 2.047022e-02 1.600000e+01 2.047266e-02 1.700000e+01 2.047494e-02 1.800000e+01 2.047708e-02 1.900000e+01 2.047910e-02 2.000000e+01 2.048100e-02 1.000000e+00 5.605154e-04 2.000000e+00 5.646479e-04 3.000000e+00 5.649533e-04 4.000000e+00 5.651802e-04 5.000000e+00 5.653691e-04 6.000000e+00 5.655350e-04 7.000000e+00 5.656847e-04 8.000000e+00 5.658224e-04 9.000000e+00 5.659506e-04 1.000000e+01 5.660711e-04 1.100000e+01 5.661850e-04 1.200000e+01 5.662935e-04 1.300000e+01 5.663971e-04 1.400000e+01 5.664966e-04 1.500000e+01 5.665923e-04 1.600000e+01 5.666847e-04 1.700000e+01 5.667741e-04 1.800000e+01 5.668607e-04 1.900000e+01 5.669449e-04 2.000000e+01 5.670268e-04 1.000000e+00 2.258288e-03 2.000000e+00 3.949856e-03 3.000000e+00 4.908743e-03 4.000000e+00 5.133493e-03 5.000000e+00 5.136295e-03 6.000000e+00 5.137920e-03 7.000000e+00 5.139266e-03 8.000000e+00 5.140414e-03 9.000000e+00 5.141419e-03 1.000000e+01 5.142318e-03 1.100000e+01 5.143137e-03 1.200000e+01 5.143893e-03 1.300000e+01 5.144599e-03 1.400000e+01 5.145263e-03 1.500000e+01 5.145893e-03 1.600000e+01 5.146493e-03 1.700000e+01 5.147067e-03 1.800000e+01 5.147620e-03 1.900000e+01 5.148152e-03 2.000000e+01 5.148666e-03 1.000000e+00 2.787882e-03 2.000000e+00 5.429823e-03 3.000000e+00 7.876833e-03 4.000000e+00 1.006621e-02 5.000000e+00 1.191656e-02 6.000000e+00 1.333305e-02 7.000000e+00 1.425232e-02 8.000000e+00 1.472159e-02 9.000000e+00 1.489604e-02 1.000000e+01 1.493041e-02 1.100000e+01 1.493328e-02 1.200000e+01 1.493574e-02 1.300000e+01 1.493799e-02 1.400000e+01 1.494006e-02 1.500000e+01 1.494197e-02 1.600000e+01 1.494374e-02 1.700000e+01 1.494539e-02 1.800000e+01 1.494694e-02 1.900000e+01 1.494840e-02 2.000000e+01 1.494978e-02 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_corsrd0.standard0000644000175000017500000001112213546075722025040 0ustar carstencarstenV(d) I(d) 1.000000e+00 4.726901e-03 2.000000e+00 4.812889e-03 3.000000e+00 4.821823e-03 4.000000e+00 4.828266e-03 5.000000e+00 4.833532e-03 6.000000e+00 4.838108e-03 7.000000e+00 4.842219e-03 8.000000e+00 4.845988e-03 9.000000e+00 4.849490e-03 1.000000e+01 4.852777e-03 1.100000e+01 4.855885e-03 1.200000e+01 4.858840e-03 1.300000e+01 4.861665e-03 1.400000e+01 4.864374e-03 1.500000e+01 4.866981e-03 1.600000e+01 4.869497e-03 1.700000e+01 4.871932e-03 1.800000e+01 4.874292e-03 1.900000e+01 4.876584e-03 2.000000e+01 4.878814e-03 1.000000e+00 1.396225e-02 2.000000e+00 2.314123e-02 3.000000e+00 2.756707e-02 4.000000e+00 2.845216e-02 5.000000e+00 2.848107e-02 6.000000e+00 2.850448e-02 7.000000e+00 2.852425e-02 8.000000e+00 2.854129e-02 9.000000e+00 2.855629e-02 1.000000e+01 2.856975e-02 1.100000e+01 2.858203e-02 1.200000e+01 2.859338e-02 1.300000e+01 2.860398e-02 1.400000e+01 2.861396e-02 1.500000e+01 2.862342e-02 1.600000e+01 2.863244e-02 1.700000e+01 2.864107e-02 1.800000e+01 2.864937e-02 1.900000e+01 2.865736e-02 2.000000e+01 2.866509e-02 1.000000e+00 1.466091e-02 2.000000e+00 2.812430e-02 3.000000e+00 3.988189e-02 4.000000e+00 4.959011e-02 5.000000e+00 5.705111e-02 6.000000e+00 6.217965e-02 7.000000e+00 6.512622e-02 8.000000e+00 6.644022e-02 9.000000e+00 6.684971e-02 1.000000e+01 6.690021e-02 1.100000e+01 6.692923e-02 1.200000e+01 6.695595e-02 1.300000e+01 6.698069e-02 1.400000e+01 6.700368e-02 1.500000e+01 6.702510e-02 1.600000e+01 6.704513e-02 1.700000e+01 6.706395e-02 1.800000e+01 6.708170e-02 1.900000e+01 6.709850e-02 2.000000e+01 6.711446e-02 1.000000e+00 5.708089e-03 2.000000e+00 5.748044e-03 3.000000e+00 5.758482e-03 4.000000e+00 5.766031e-03 5.000000e+00 5.772214e-03 6.000000e+00 5.777595e-03 7.000000e+00 5.782434e-03 8.000000e+00 5.786873e-03 9.000000e+00 5.791000e-03 1.000000e+01 5.794875e-03 1.100000e+01 5.798539e-03 1.200000e+01 5.802025e-03 1.300000e+01 5.805357e-03 1.400000e+01 5.808554e-03 1.500000e+01 5.811631e-03 1.600000e+01 5.814600e-03 1.700000e+01 5.817474e-03 1.800000e+01 5.820259e-03 1.900000e+01 5.822965e-03 2.000000e+01 5.825598e-03 1.000000e+00 1.709091e-02 2.000000e+00 2.792020e-02 3.000000e+00 3.281677e-02 4.000000e+00 3.364926e-02 5.000000e+00 3.368013e-02 6.000000e+00 3.370546e-02 7.000000e+00 3.372688e-02 8.000000e+00 3.374535e-02 9.000000e+00 3.376160e-02 1.000000e+01 3.377620e-02 1.100000e+01 3.378951e-02 1.200000e+01 3.380181e-02 1.300000e+01 3.381331e-02 1.400000e+01 3.382413e-02 1.500000e+01 3.383439e-02 1.600000e+01 3.384416e-02 1.700000e+01 3.385353e-02 1.800000e+01 3.386252e-02 1.900000e+01 3.387119e-02 2.000000e+01 3.387958e-02 1.000000e+00 1.635923e-02 2.000000e+00 3.146777e-02 3.000000e+00 4.467981e-02 4.000000e+00 5.556107e-02 5.000000e+00 6.387317e-02 6.000000e+00 6.952771e-02 7.000000e+00 7.272070e-02 8.000000e+00 7.410509e-02 9.000000e+00 7.450562e-02 1.000000e+01 7.454308e-02 1.100000e+01 7.457408e-02 1.200000e+01 7.460266e-02 1.300000e+01 7.462913e-02 1.400000e+01 7.465372e-02 1.500000e+01 7.467664e-02 1.600000e+01 7.469808e-02 1.700000e+01 7.471821e-02 1.800000e+01 7.473720e-02 1.900000e+01 7.475518e-02 2.000000e+01 7.477226e-02 1.000000e+00 3.770472e-03 2.000000e+00 3.962401e-03 3.000000e+00 3.969808e-03 4.000000e+00 3.975111e-03 5.000000e+00 3.979427e-03 6.000000e+00 3.983166e-03 7.000000e+00 3.986519e-03 8.000000e+00 3.989588e-03 9.000000e+00 3.992438e-03 1.000000e+01 3.995109e-03 1.100000e+01 3.997634e-03 1.200000e+01 4.000034e-03 1.300000e+01 4.002326e-03 1.400000e+01 4.004524e-03 1.500000e+01 4.006638e-03 1.600000e+01 4.008679e-03 1.700000e+01 4.010652e-03 1.800000e+01 4.012565e-03 1.900000e+01 4.014423e-03 2.000000e+01 4.016229e-03 1.000000e+00 1.048765e-02 2.000000e+00 1.765102e-02 3.000000e+00 2.138742e-02 4.000000e+00 2.233198e-02 5.000000e+00 2.236731e-02 6.000000e+00 2.238728e-02 7.000000e+00 2.240410e-02 8.000000e+00 2.241858e-02 9.000000e+00 2.243132e-02 1.000000e+01 2.244276e-02 1.100000e+01 2.245318e-02 1.200000e+01 2.246281e-02 1.300000e+01 2.247180e-02 1.400000e+01 2.248027e-02 1.500000e+01 2.248829e-02 1.600000e+01 2.249593e-02 1.700000e+01 2.250325e-02 1.800000e+01 2.251028e-02 1.900000e+01 2.251706e-02 2.000000e+01 2.252361e-02 1.000000e+00 1.230073e-02 2.000000e+00 2.351040e-02 3.000000e+00 3.328542e-02 4.000000e+00 4.138906e-02 5.000000e+00 4.767421e-02 6.000000e+00 5.206478e-02 7.000000e+00 5.465878e-02 8.000000e+00 5.587164e-02 9.000000e+00 5.629094e-02 1.000000e+01 5.637278e-02 1.100000e+01 5.639868e-02 1.200000e+01 5.642242e-02 1.300000e+01 5.644438e-02 1.400000e+01 5.646478e-02 1.500000e+01 5.648378e-02 1.600000e+01 5.650156e-02 1.700000e+01 5.651825e-02 1.800000e+01 5.653399e-02 1.900000e+01 5.654890e-02 2.000000e+01 5.656306e-02 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/acFreq_nover.standard0000644000175000017500000000711713546075722025127 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 7.40071917771801e-13 7.17115886245056e-13 1.14024919682275e-14 1258.925 7.40072223670276e-13 7.171160107574e-13 1.14024964015382e-14 1584.893 7.40072046908196e-13 7.17115936214445e-13 1.14024893025577e-14 1995.262 7.40072056776147e-13 7.17115913982718e-13 1.14024926964839e-14 2511.886 7.40072392535436e-13 7.17116164652632e-13 1.1402492904229e-14 3162.278 7.40071859364656e-13 7.17115701606523e-13 1.14024894435302e-14 3981.072 7.40071892599789e-13 7.17115776402386e-13 1.14024918508587e-14 5011.872 7.40071920729898e-13 7.17115806056352e-13 1.14024949147701e-14 6309.573 7.40071886590531e-13 7.17115952954509e-13 1.14024930093677e-14 7943.282 7.40072062243654e-13 7.17115933857523e-13 1.14024928235915e-14 10000 7.40071917771801e-13 7.17115886245055e-13 1.14024919682275e-14 12589.25 7.40072223670276e-13 7.171160107574e-13 1.14024964015382e-14 15848.93 7.40072046908196e-13 7.17115936214445e-13 1.14024893025577e-14 19952.62 7.40072056776147e-13 7.17115913982718e-13 1.14024926964839e-14 25118.86 7.40072392535436e-13 7.17116164652632e-13 1.1402492904229e-14 31622.78 7.40071859364656e-13 7.17115701606523e-13 1.14024894435302e-14 39810.72 7.40071892599789e-13 7.17115776402386e-13 1.14024918508587e-14 50118.72 7.40071920729898e-13 7.17115806056352e-13 1.14024949147701e-14 63095.73 7.40071886590531e-13 7.17115952954509e-13 1.14024930093677e-14 79432.82 7.40072062243654e-13 7.17115933857523e-13 1.14024928235915e-14 100000 7.40071917771801e-13 7.17115886245055e-13 1.14024919682275e-14 125892.5 7.40072223670276e-13 7.171160107574e-13 1.14024964015382e-14 158489.3 7.40072046908196e-13 7.17115936214445e-13 1.14024893025577e-14 199526.2 7.40072056776147e-13 7.17115913982717e-13 1.14024926964839e-14 251188.6 7.40072392535436e-13 7.17116164652632e-13 1.1402492904229e-14 316227.8 7.40071859364656e-13 7.17115701606522e-13 1.14024894435302e-14 398107.2 7.40071892599789e-13 7.17115776402386e-13 1.14024918508587e-14 501187.2 7.40071920729898e-13 7.17115806056352e-13 1.140249491477e-14 630957.3 7.40071886590532e-13 7.17115952954509e-13 1.14024930093677e-14 794328.2 7.40072062243654e-13 7.17115933857523e-13 1.14024928235915e-14 1000000 7.40071917771801e-13 7.17115886245056e-13 1.14024919682275e-14 1258925 7.40072223670276e-13 7.171160107574e-13 1.14024964015382e-14 1584893 7.40072046908196e-13 7.17115936214445e-13 1.14024893025577e-14 1995262 7.40072056776147e-13 7.17115913982718e-13 1.14024926964839e-14 2511886 7.40072392535436e-13 7.17116164652632e-13 1.1402492904229e-14 3162278 7.40071859364656e-13 7.17115701606522e-13 1.14024894435302e-14 3981072 7.40071892599789e-13 7.17115776402386e-13 1.14024918508587e-14 5011872 7.40071920729898e-13 7.17115806056352e-13 1.14024949147701e-14 6309573 7.40071886590532e-13 7.17115952954509e-13 1.14024930093677e-14 7943282 7.40072062243654e-13 7.17115933857523e-13 1.14024928235915e-14 10000000 7.40071917771801e-13 7.17115886245055e-13 1.14024919682275e-14 12589250 7.40072223670276e-13 7.171160107574e-13 1.14024964015382e-14 15848930 7.40072046908196e-13 7.17115936214445e-13 1.14024893025577e-14 19952620 7.40072056776147e-13 7.17115913982718e-13 1.14024926964839e-14 25118860 7.40071758928086e-13 7.17116164652632e-13 1.1402492904229e-14 31622780 7.40071859364656e-13 7.17115701606522e-13 1.14024894435302e-14 39810720 7.40071892599789e-13 7.17115776402386e-13 1.14024878530676e-14 50118720 7.40071920729898e-13 7.17115488500471e-13 1.14024885636524e-14 63095730 7.40071634346928e-13 7.17115448467301e-13 1.14024829196236e-14 79432820 7.40071461151021e-13 7.17115132400679e-13 1.14024767944546e-14 100000000 7.40070962842143e-13 7.17114613005511e-13 1.14024665034366e-14 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_Ig1_vb0_jd.standard0000644000175000017500000002746513546075722025351 0ustar carstencarstenV(g) I(d) I(g) I(s) I(b) 1.000000e+00 1.985201e-04 0.000000e+00 -1.985201e-04 -2.010000e-15 2.000000e+00 1.924870e-03 0.000000e+00 -1.924870e-03 -2.010000e-15 3.000000e+00 4.718920e-03 0.000000e+00 -4.718920e-03 -2.010000e-15 4.000000e+00 7.037712e-03 0.000000e+00 -7.037712e-03 -2.010000e-15 5.000000e+00 8.470070e-03 0.000000e+00 -8.470070e-03 -2.010000e-15 6.000000e+00 9.338593e-03 0.000000e+00 -9.338593e-03 -2.010000e-15 7.000000e+00 9.834692e-03 0.000000e+00 -9.834692e-03 -2.010000e-15 8.000000e+00 1.007729e-02 0.000000e+00 -1.007729e-02 -2.010000e-15 9.000000e+00 1.014522e-02 0.000000e+00 -1.014522e-02 -2.010000e-15 1.000000e+01 1.009282e-02 0.000000e+00 -1.009282e-02 -2.010000e-15 1.100000e+01 9.958463e-03 0.000000e+00 -9.958463e-03 -2.010000e-15 1.200000e+01 9.769496e-03 0.000000e+00 -9.769496e-03 -2.010000e-15 1.300000e+01 9.545505e-03 0.000000e+00 -9.545505e-03 -2.010000e-15 1.400000e+01 9.300479e-03 0.000000e+00 -9.300479e-03 -2.010000e-15 1.500000e+01 9.044358e-03 0.000000e+00 -9.044358e-03 -2.010000e-15 1.600000e+01 8.784145e-03 0.000000e+00 -8.784145e-03 -2.010000e-15 1.700000e+01 8.524712e-03 0.000000e+00 -8.524712e-03 -2.010000e-15 1.800000e+01 8.269394e-03 0.000000e+00 -8.269394e-03 -2.010000e-15 1.900000e+01 8.020412e-03 0.000000e+00 -8.020412e-03 -2.010000e-15 2.000000e+01 7.779192e-03 0.000000e+00 -7.779192e-03 -2.010000e-15 1.000000e+00 1.995052e-04 0.000000e+00 -1.995052e-04 -5.010000e-15 2.000000e+00 1.933282e-03 0.000000e+00 -1.933282e-03 -5.010000e-15 3.000000e+00 4.763809e-03 0.000000e+00 -4.763809e-03 -5.010000e-15 4.000000e+00 8.023820e-03 0.000000e+00 -8.023820e-03 -5.010000e-15 5.000000e+00 1.138635e-02 0.000000e+00 -1.138635e-02 -5.010000e-15 6.000000e+00 1.459989e-02 0.000000e+00 -1.459989e-02 -5.010000e-15 7.000000e+00 1.702800e-02 0.000000e+00 -1.702800e-02 -5.010000e-15 8.000000e+00 1.868076e-02 0.000000e+00 -1.868076e-02 -5.010000e-15 9.000000e+00 1.978542e-02 0.000000e+00 -1.978542e-02 -5.010000e-15 1.000000e+01 2.049841e-02 0.000000e+00 -2.049841e-02 -5.010000e-15 1.100000e+01 2.091737e-02 0.000000e+00 -2.091737e-02 -5.010000e-15 1.200000e+01 2.110903e-02 0.000000e+00 -2.110903e-02 -5.010000e-15 1.300000e+01 2.112338e-02 0.000000e+00 -2.112338e-02 -5.010000e-15 1.400000e+01 2.100011e-02 0.000000e+00 -2.100011e-02 -5.010000e-15 1.500000e+01 2.077156e-02 0.000000e+00 -2.077156e-02 -5.010000e-15 1.600000e+01 2.046427e-02 0.000000e+00 -2.046427e-02 -5.010000e-15 1.700000e+01 2.009983e-02 0.000000e+00 -2.009983e-02 -5.010000e-15 1.800000e+01 1.969560e-02 0.000000e+00 -1.969560e-02 -5.010000e-15 1.900000e+01 1.926535e-02 0.000000e+00 -1.926535e-02 -5.010000e-15 2.000000e+01 1.881983e-02 0.000000e+00 -1.881983e-02 -5.010000e-15 1.000000e+00 2.005877e-04 0.000000e+00 -2.005877e-04 -1.001000e-14 2.000000e+00 1.941020e-03 0.000000e+00 -1.941020e-03 -1.001000e-14 3.000000e+00 4.780265e-03 0.000000e+00 -4.780265e-03 -1.001000e-14 4.000000e+00 8.050493e-03 0.000000e+00 -8.050493e-03 -1.001000e-14 5.000000e+00 1.142446e-02 0.000000e+00 -1.142446e-02 -1.001000e-14 6.000000e+00 1.475285e-02 0.000000e+00 -1.475285e-02 -1.001000e-14 7.000000e+00 1.796700e-02 0.000000e+00 -1.796700e-02 -1.001000e-14 8.000000e+00 2.103596e-02 0.000000e+00 -2.103596e-02 -1.001000e-14 9.000000e+00 2.389466e-02 0.000000e+00 -2.389466e-02 -1.001000e-14 1.000000e+01 2.626519e-02 0.000000e+00 -2.626519e-02 -1.001000e-14 1.100000e+01 2.813674e-02 0.000000e+00 -2.813674e-02 -1.001000e-14 1.200000e+01 2.960809e-02 0.000000e+00 -2.960809e-02 -1.001000e-14 1.300000e+01 3.076870e-02 0.000000e+00 -3.076870e-02 -1.001000e-14 1.400000e+01 3.167688e-02 0.000000e+00 -3.167688e-02 -1.001000e-14 1.500000e+01 3.236875e-02 0.000000e+00 -3.236875e-02 -1.001000e-14 1.600000e+01 3.286809e-02 0.000000e+00 -3.286809e-02 -1.001000e-14 1.700000e+01 3.319287e-02 0.000000e+00 -3.319287e-02 -1.001000e-14 1.800000e+01 3.335903e-02 0.000000e+00 -3.335903e-02 -1.001000e-14 1.900000e+01 3.338249e-02 0.000000e+00 -3.338249e-02 -1.001000e-14 2.000000e+01 3.327976e-02 0.000000e+00 -3.327976e-02 -1.001000e-14 1.000000e+00 1.555040e-04 0.000000e+00 -1.555040e-04 -2.000000e-15 2.000000e+00 2.298816e-03 0.000000e+00 -2.298816e-03 -2.000000e-15 3.000000e+00 5.777811e-03 0.000000e+00 -5.777811e-03 -2.000000e-15 4.000000e+00 8.512023e-03 0.000000e+00 -8.512023e-03 -2.000000e-15 5.000000e+00 1.004703e-02 0.000000e+00 -1.004703e-02 -2.000000e-15 6.000000e+00 1.087791e-02 0.000000e+00 -1.087791e-02 -2.000000e-15 7.000000e+00 1.127323e-02 0.000000e+00 -1.127323e-02 -2.000000e-15 8.000000e+00 1.139002e-02 0.000000e+00 -1.139002e-02 -2.000000e-15 9.000000e+00 1.132661e-02 0.000000e+00 -1.132661e-02 -2.000000e-15 1.000000e+01 1.114737e-02 0.000000e+00 -1.114737e-02 -2.000000e-15 1.100000e+01 1.089550e-02 0.000000e+00 -1.089550e-02 -2.000000e-15 1.200000e+01 1.060037e-02 0.000000e+00 -1.060037e-02 -2.000000e-15 1.300000e+01 1.028193e-02 0.000000e+00 -1.028193e-02 -2.000000e-15 1.400000e+01 9.953682e-03 0.000000e+00 -9.953682e-03 -2.000000e-15 1.500000e+01 9.624653e-03 0.000000e+00 -9.624653e-03 -2.000000e-15 1.600000e+01 9.300759e-03 0.000000e+00 -9.300759e-03 -2.000000e-15 1.700000e+01 8.985772e-03 0.000000e+00 -8.985772e-03 -2.000000e-15 1.800000e+01 8.681981e-03 0.000000e+00 -8.681981e-03 -2.000000e-15 1.900000e+01 8.390664e-03 0.000000e+00 -8.390664e-03 -2.000000e-15 2.000000e+01 8.112404e-03 0.000000e+00 -8.112404e-03 -2.000000e-15 1.000000e+00 1.563061e-04 0.000000e+00 -1.563061e-04 -5.000000e-15 2.000000e+00 2.308700e-03 0.000000e+00 -2.308700e-03 -5.000000e-15 3.000000e+00 5.817985e-03 0.000000e+00 -5.817985e-03 -5.000000e-15 4.000000e+00 9.659114e-03 0.000000e+00 -9.659114e-03 -5.000000e-15 5.000000e+00 1.346378e-02 0.000000e+00 -1.346378e-02 -5.000000e-15 6.000000e+00 1.696147e-02 0.000000e+00 -1.696147e-02 -5.000000e-15 7.000000e+00 1.943974e-02 0.000000e+00 -1.943974e-02 -5.000000e-15 8.000000e+00 2.103496e-02 0.000000e+00 -2.103496e-02 -5.000000e-15 9.000000e+00 2.203798e-02 0.000000e+00 -2.203798e-02 -5.000000e-15 1.000000e+01 2.262633e-02 0.000000e+00 -2.262633e-02 -5.000000e-15 1.100000e+01 2.290775e-02 0.000000e+00 -2.290775e-02 -5.000000e-15 1.200000e+01 2.295566e-02 0.000000e+00 -2.295566e-02 -5.000000e-15 1.300000e+01 2.282521e-02 0.000000e+00 -2.282521e-02 -5.000000e-15 1.400000e+01 2.256012e-02 0.000000e+00 -2.256012e-02 -5.000000e-15 1.500000e+01 2.219577e-02 0.000000e+00 -2.219577e-02 -5.000000e-15 1.600000e+01 2.176075e-02 0.000000e+00 -2.176075e-02 -5.000000e-15 1.700000e+01 2.127787e-02 0.000000e+00 -2.127787e-02 -5.000000e-15 1.800000e+01 2.076501e-02 0.000000e+00 -2.076501e-02 -5.000000e-15 1.900000e+01 2.023595e-02 0.000000e+00 -2.023595e-02 -5.000000e-15 2.000000e+01 1.970109e-02 0.000000e+00 -1.970109e-02 -5.000000e-15 1.000000e+00 1.571938e-04 0.000000e+00 -1.571938e-04 -1.000000e-14 2.000000e+00 2.317821e-03 0.000000e+00 -2.317821e-03 -1.000000e-14 3.000000e+00 5.836971e-03 0.000000e+00 -5.836971e-03 -1.000000e-14 4.000000e+00 9.689005e-03 0.000000e+00 -9.689005e-03 -1.000000e-14 5.000000e+00 1.350569e-02 0.000000e+00 -1.350569e-02 -1.000000e-14 6.000000e+00 1.716355e-02 0.000000e+00 -1.716355e-02 -1.000000e-14 7.000000e+00 2.062057e-02 0.000000e+00 -2.062057e-02 -1.000000e-14 8.000000e+00 2.386788e-02 0.000000e+00 -2.386788e-02 -1.000000e-14 9.000000e+00 2.678882e-02 0.000000e+00 -2.678882e-02 -1.000000e-14 1.000000e+01 2.910094e-02 0.000000e+00 -2.910094e-02 -1.000000e-14 1.100000e+01 3.088011e-02 0.000000e+00 -3.088011e-02 -1.000000e-14 1.200000e+01 3.225528e-02 0.000000e+00 -3.225528e-02 -1.000000e-14 1.300000e+01 3.331959e-02 0.000000e+00 -3.331959e-02 -1.000000e-14 1.400000e+01 3.412929e-02 0.000000e+00 -3.412929e-02 -1.000000e-14 1.500000e+01 3.471844e-02 0.000000e+00 -3.471844e-02 -1.000000e-14 1.600000e+01 3.510987e-02 0.000000e+00 -3.510987e-02 -1.000000e-14 1.700000e+01 3.532163e-02 0.000000e+00 -3.532163e-02 -1.000000e-14 1.800000e+01 3.537066e-02 0.000000e+00 -3.537066e-02 -1.000000e-14 1.900000e+01 3.527446e-02 0.000000e+00 -3.527446e-02 -1.000000e-14 2.000000e+01 3.505151e-02 0.000000e+00 -3.505151e-02 -1.000000e-14 1.000000e+00 2.650466e-04 0.000000e+00 -2.650466e-04 -1.295574e-11 2.000000e+00 1.584766e-03 0.000000e+00 -1.584766e-03 -1.295574e-11 3.000000e+00 3.629067e-03 0.000000e+00 -3.629067e-03 -1.295574e-11 4.000000e+00 5.383164e-03 0.000000e+00 -5.383164e-03 -1.295574e-11 5.000000e+00 6.591260e-03 0.000000e+00 -6.591260e-03 -1.295574e-11 6.000000e+00 7.415294e-03 0.000000e+00 -7.415294e-03 -1.295574e-11 7.000000e+00 7.963827e-03 0.000000e+00 -7.963827e-03 -1.295574e-11 8.000000e+00 8.309875e-03 0.000000e+00 -8.309875e-03 -1.295574e-11 9.000000e+00 8.505524e-03 0.000000e+00 -8.505524e-03 -1.295574e-11 1.000000e+01 8.589245e-03 0.000000e+00 -8.589245e-03 -1.295574e-11 1.100000e+01 8.590014e-03 0.000000e+00 -8.590014e-03 -1.295574e-11 1.200000e+01 8.529861e-03 0.000000e+00 -8.529861e-03 -1.295574e-11 1.300000e+01 8.425589e-03 0.000000e+00 -8.425589e-03 -1.295574e-11 1.400000e+01 8.290005e-03 0.000000e+00 -8.290005e-03 -1.295574e-11 1.500000e+01 8.132842e-03 0.000000e+00 -8.132842e-03 -1.295574e-11 1.600000e+01 7.961465e-03 0.000000e+00 -7.961465e-03 -1.295574e-11 1.700000e+01 7.781421e-03 0.000000e+00 -7.781421e-03 -1.295574e-11 1.800000e+01 7.596857e-03 0.000000e+00 -7.596857e-03 -1.295574e-11 1.900000e+01 7.410849e-03 0.000000e+00 -7.410849e-03 -1.295574e-11 2.000000e+01 7.225658e-03 0.000000e+00 -7.225658e-03 -1.295574e-11 1.000000e+00 2.662824e-04 0.000000e+00 -2.662824e-04 -1.295874e-11 2.000000e+00 1.591683e-03 0.000000e+00 -1.591683e-03 -1.295874e-11 3.000000e+00 3.692176e-03 0.000000e+00 -3.692176e-03 -1.295874e-11 4.000000e+00 6.217359e-03 0.000000e+00 -6.217359e-03 -1.295874e-11 5.000000e+00 8.943127e-03 0.000000e+00 -8.943127e-03 -1.295874e-11 6.000000e+00 1.165630e-02 0.000000e+00 -1.165630e-02 -1.295874e-11 7.000000e+00 1.386147e-02 0.000000e+00 -1.386147e-02 -1.295874e-11 8.000000e+00 1.547732e-02 0.000000e+00 -1.547732e-02 -1.295874e-11 9.000000e+00 1.663818e-02 0.000000e+00 -1.663818e-02 -1.295874e-11 1.000000e+01 1.746028e-02 0.000000e+00 -1.746028e-02 -1.295874e-11 1.100000e+01 1.802132e-02 0.000000e+00 -1.802132e-02 -1.295874e-11 1.200000e+01 1.837547e-02 0.000000e+00 -1.837547e-02 -1.295874e-11 1.300000e+01 1.856355e-02 0.000000e+00 -1.856355e-02 -1.295874e-11 1.400000e+01 1.861814e-02 0.000000e+00 -1.861814e-02 -1.295874e-11 1.500000e+01 1.856613e-02 0.000000e+00 -1.856613e-02 -1.295874e-11 1.600000e+01 1.843001e-02 0.000000e+00 -1.843001e-02 -1.295874e-11 1.700000e+01 1.822855e-02 0.000000e+00 -1.822855e-02 -1.295874e-11 1.800000e+01 1.797739e-02 0.000000e+00 -1.797739e-02 -1.295874e-11 1.900000e+01 1.768936e-02 0.000000e+00 -1.768936e-02 -1.295874e-11 2.000000e+01 1.737491e-02 0.000000e+00 -1.737491e-02 -1.295874e-11 1.000000e+00 2.676229e-04 0.000000e+00 -2.676229e-04 -1.296374e-11 2.000000e+00 1.597983e-03 0.000000e+00 -1.597983e-03 -1.296374e-11 3.000000e+00 3.705356e-03 0.000000e+00 -3.705356e-03 -1.296374e-11 4.000000e+00 6.239183e-03 0.000000e+00 -6.239183e-03 -1.296374e-11 5.000000e+00 8.975006e-03 0.000000e+00 -8.975006e-03 -1.296374e-11 6.000000e+00 1.177859e-02 0.000000e+00 -1.177859e-02 -1.296374e-11 7.000000e+00 1.457101e-02 0.000000e+00 -1.457101e-02 -1.296374e-11 8.000000e+00 1.730601e-02 0.000000e+00 -1.730601e-02 -1.296374e-11 9.000000e+00 1.993774e-02 0.000000e+00 -1.993774e-02 -1.296374e-11 1.000000e+01 2.225846e-02 0.000000e+00 -2.225846e-02 -1.296374e-11 1.100000e+01 2.417306e-02 0.000000e+00 -2.417306e-02 -1.296374e-11 1.200000e+01 2.572181e-02 0.000000e+00 -2.572181e-02 -1.296374e-11 1.300000e+01 2.697485e-02 0.000000e+00 -2.697485e-02 -1.296374e-11 1.400000e+01 2.798726e-02 0.000000e+00 -2.798726e-02 -1.296374e-11 1.500000e+01 2.879544e-02 0.000000e+00 -2.879544e-02 -1.296374e-11 1.600000e+01 2.942340e-02 0.000000e+00 -2.942340e-02 -1.296374e-11 1.700000e+01 2.988851e-02 0.000000e+00 -2.988851e-02 -1.296374e-11 1.800000e+01 3.020516e-02 0.000000e+00 -3.020516e-02 -1.296374e-11 1.900000e+01 3.038690e-02 0.000000e+00 -3.038690e-02 -1.296374e-11 2.000000e+01 3.044739e-02 0.000000e+00 -3.044739e-02 -1.296374e-11 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/acVd_coisti.standard0000644000175000017500000000545013546075722024742 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 1 -9.785914e-05 3.508579e-03 5.45474247689533e-13 6.91221787151315e-13 2 -1.445779e-04 3.315894e-03 5.73845955371297e-13 6.59105178455603e-13 3 -1.243271e-04 3.057435e-03 6.04519163676201e-13 6.2074596806968e-13 4 -1.521716e-05 2.704895e-03 6.38086672764751e-13 5.72707255062988e-13 5 2.121989e-04 2.227998e-03 6.75004182760328e-13 5.09337537905361e-13 6 5.817790e-04 1.618972e-03 7.12115592808404e-13 4.28083015905345e-13 7 1.055295e-03 9.626491e-04 7.40211900415602e-13 3.43198892922598e-13 8 1.496345e-03 4.359459e-04 7.53575004033721e-13 2.81100476109181e-13 9 1.788887e-03 1.344713e-04 7.57558005112136e-13 2.43384465897406e-13 10 1.933433e-03 7.221068e-06 7.46785002195298e-13 1.43003038718697e-13 11 1.935595e-03 5.076827e-06 7.36317099361068e-13 4.83029330782299e-14 12 1.936966e-03 3.861376e-06 7.34911398980468e-13 3.55529696261217e-14 13 1.937855e-03 3.156991e-06 7.34283498810461e-13 2.97970180676727e-14 14 1.938468e-03 2.720325e-06 7.33910598709497e-13 2.63405871318289e-14 15 1.938927e-03 2.423997e-06 7.33657998641105e-13 2.39724664906499e-14 16 1.939294e-03 2.206131e-06 7.33473398591123e-13 2.22200360161717e-14 17 1.939604e-03 2.036157e-06 7.33331498552703e-13 2.08557056467733e-14 18 1.939873e-03 1.898051e-06 7.33218498522108e-13 1.97545653486348e-14 19 1.940113e-03 1.782717e-06 7.3312609849709e-13 1.88415951014441e-14 20 1.940329e-03 1.684544e-06 7.33049098476242e-13 1.80686548921672e-14 1 -3.082824e-05 2.939975e-03 5.40974946471327e-13 6.93234187696181e-13 2 -1.773751e-05 2.746110e-03 5.69218654118434e-13 6.61744679170259e-13 3 4.931332e-05 2.504418e-03 5.99942762437121e-13 6.23970568942754e-13 4 1.844654e-04 2.193970e-03 6.33778471598287e-13 5.76323456042091e-13 5 4.069419e-04 1.792849e-03 6.71324981764168e-13 5.12844738854951e-13 6 7.303473e-04 1.297586e-03 7.09502592100923e-13 4.30742316625362e-13 7 1.120882e-03 7.751402e-04 7.3883810004364e-13 3.44387493244417e-13 8 1.474687e-03 3.589018e-04 7.53016203882423e-13 2.80008775813598e-13 9 1.706838e-03 1.196179e-04 7.56891704931732e-13 2.37302764250759e-13 10 1.825614e-03 1.407082e-05 7.46329802072051e-13 1.16852131638225e-13 11 1.836683e-03 4.761700e-06 7.39242500153133e-13 4.65419526014368e-14 12 1.838179e-03 3.465049e-06 7.38202599871575e-13 3.48982894488642e-14 13 1.839124e-03 2.738593e-06 7.37719599740801e-13 2.94367979701415e-14 14 1.839755e-03 2.306916e-06 7.37427999661849e-13 2.61065270684561e-14 15 1.840211e-03 2.027080e-06 7.3722859960786e-13 2.38056664454881e-14 16 1.840568e-03 1.829602e-06 7.37081799568114e-13 2.2093955982035e-14 17 1.840863e-03 1.680409e-06 7.36968299537383e-13 2.07564556199009e-14 18 1.841116e-03 1.561970e-06 7.36877599512825e-13 1.96740753268417e-14 19 1.841339e-03 1.464631e-06 7.36803099492654e-13 1.87748250833658e-14 20 1.841540e-03 1.382665e-06 7.36740799475786e-13 1.80122648768993e-14 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_corg.standard0000644000175000017500000001112213546075722024416 0ustar carstencarstenV(d) I(d) 1.000000e+00 1.695827e-03 2.000000e+00 1.902521e-03 3.000000e+00 1.906588e-03 4.000000e+00 1.909364e-03 5.000000e+00 1.911567e-03 6.000000e+00 1.913453e-03 7.000000e+00 1.915133e-03 8.000000e+00 1.916666e-03 9.000000e+00 1.918084e-03 1.000000e+01 1.919412e-03 1.100000e+01 1.920665e-03 1.200000e+01 1.921855e-03 1.300000e+01 1.922990e-03 1.400000e+01 1.924078e-03 1.500000e+01 1.925124e-03 1.600000e+01 1.926132e-03 1.700000e+01 1.927108e-03 1.800000e+01 1.928052e-03 1.900000e+01 1.928969e-03 2.000000e+01 1.929861e-03 1.000000e+00 3.418731e-03 2.000000e+00 6.028793e-03 3.000000e+00 7.961005e-03 4.000000e+00 9.358161e-03 5.000000e+00 1.033188e-02 6.000000e+00 1.095421e-02 7.000000e+00 1.127158e-02 8.000000e+00 1.135089e-02 9.000000e+00 1.135787e-02 1.000000e+01 1.136624e-02 1.100000e+01 1.137413e-02 1.200000e+01 1.138111e-02 1.300000e+01 1.138729e-02 1.400000e+01 1.139283e-02 1.500000e+01 1.139787e-02 1.600000e+01 1.140251e-02 1.700000e+01 1.140683e-02 1.800000e+01 1.141088e-02 1.900000e+01 1.141470e-02 2.000000e+01 1.141834e-02 1.000000e+00 3.885422e-03 2.000000e+00 7.235522e-03 3.000000e+00 1.004755e-02 4.000000e+00 1.236069e-02 5.000000e+00 1.423938e-02 6.000000e+00 1.575671e-02 7.000000e+00 1.698277e-02 8.000000e+00 1.797853e-02 9.000000e+00 1.879399e-02 1.000000e+01 1.946870e-02 1.100000e+01 2.003326e-02 1.200000e+01 2.051115e-02 1.300000e+01 2.092031e-02 1.400000e+01 2.127448e-02 1.500000e+01 2.158425e-02 1.600000e+01 2.185781e-02 1.700000e+01 2.210159e-02 1.800000e+01 2.232063e-02 1.900000e+01 2.251895e-02 2.000000e+01 2.269977e-02 1.000000e+00 2.032966e-03 2.000000e+00 2.270227e-03 3.000000e+00 2.275120e-03 4.000000e+00 2.278432e-03 5.000000e+00 2.281048e-03 6.000000e+00 2.283284e-03 7.000000e+00 2.285274e-03 8.000000e+00 2.287088e-03 9.000000e+00 2.288767e-03 1.000000e+01 2.290338e-03 1.100000e+01 2.291820e-03 1.200000e+01 2.293227e-03 1.300000e+01 2.294570e-03 1.400000e+01 2.295857e-03 1.500000e+01 2.297094e-03 1.600000e+01 2.298287e-03 1.700000e+01 2.299440e-03 1.800000e+01 2.300557e-03 1.900000e+01 2.301641e-03 2.000000e+01 2.302696e-03 1.000000e+00 3.846361e-03 2.000000e+00 6.767956e-03 3.000000e+00 8.934764e-03 4.000000e+00 1.052445e-02 5.000000e+00 1.167677e-02 6.000000e+00 1.248892e-02 7.000000e+00 1.302277e-02 8.000000e+00 1.331891e-02 9.000000e+00 1.342096e-02 1.000000e+01 1.342906e-02 1.100000e+01 1.343476e-02 1.200000e+01 1.344300e-02 1.300000e+01 1.345098e-02 1.400000e+01 1.345817e-02 1.500000e+01 1.346462e-02 1.600000e+01 1.347046e-02 1.700000e+01 1.347579e-02 1.800000e+01 1.348071e-02 1.900000e+01 1.348530e-02 2.000000e+01 1.348961e-02 1.000000e+00 4.176571e-03 2.000000e+00 7.772887e-03 3.000000e+00 1.078862e-02 4.000000e+00 1.326997e-02 5.000000e+00 1.528918e-02 6.000000e+00 1.692593e-02 7.000000e+00 1.825508e-02 8.000000e+00 1.934097e-02 9.000000e+00 2.023594e-02 1.000000e+01 2.098124e-02 1.100000e+01 2.160882e-02 1.200000e+01 2.214326e-02 1.300000e+01 2.260340e-02 1.400000e+01 2.300375e-02 1.500000e+01 2.335555e-02 1.600000e+01 2.366757e-02 1.700000e+01 2.394667e-02 1.800000e+01 2.419833e-02 1.900000e+01 2.442689e-02 2.000000e+01 2.463589e-02 1.000000e+00 1.358292e-03 2.000000e+00 1.568445e-03 3.000000e+00 1.571741e-03 4.000000e+00 1.573993e-03 5.000000e+00 1.575783e-03 6.000000e+00 1.577315e-03 7.000000e+00 1.578679e-03 8.000000e+00 1.579923e-03 9.000000e+00 1.581073e-03 1.000000e+01 1.582150e-03 1.100000e+01 1.583166e-03 1.200000e+01 1.584130e-03 1.300000e+01 1.585049e-03 1.400000e+01 1.585931e-03 1.500000e+01 1.586778e-03 1.600000e+01 1.587595e-03 1.700000e+01 1.588384e-03 1.800000e+01 1.589149e-03 1.900000e+01 1.589892e-03 2.000000e+01 1.590614e-03 1.000000e+00 2.844473e-03 2.000000e+00 5.026277e-03 3.000000e+00 6.632622e-03 4.000000e+00 7.760035e-03 5.000000e+00 8.477987e-03 6.000000e+00 8.832717e-03 7.000000e+00 8.914513e-03 8.000000e+00 8.922518e-03 9.000000e+00 8.929938e-03 1.000000e+01 8.936386e-03 1.100000e+01 8.942017e-03 1.200000e+01 8.947010e-03 1.300000e+01 8.951507e-03 1.400000e+01 8.955618e-03 1.500000e+01 8.959421e-03 1.600000e+01 8.962975e-03 1.700000e+01 8.966323e-03 1.800000e+01 8.969496e-03 1.900000e+01 8.972521e-03 2.000000e+01 8.975418e-03 1.000000e+00 3.442853e-03 2.000000e+00 6.418174e-03 3.000000e+00 8.921000e-03 4.000000e+00 1.098061e-02 5.000000e+00 1.264950e-02 6.000000e+00 1.399025e-02 7.000000e+00 1.506505e-02 8.000000e+00 1.592943e-02 9.000000e+00 1.662961e-02 1.000000e+01 1.720240e-02 1.100000e+01 1.767634e-02 1.200000e+01 1.807322e-02 1.300000e+01 1.840961e-02 1.400000e+01 1.869809e-02 1.500000e+01 1.894824e-02 1.600000e+01 1.916744e-02 1.700000e+01 1.936138e-02 1.800000e+01 1.953452e-02 1.900000e+01 1.969036e-02 2.000000e+01 1.983168e-02 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/acVd_corbnet.standard0000644000175000017500000000544213546075722025105 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 1 -9.653820e-05 3.498912e-03 5.454449476816e-13 6.91258687161306e-13 2 -1.417599e-04 3.305198e-03 5.73851355372759e-13 6.59117978459069e-13 3 -1.198608e-04 3.045730e-03 6.04567363689252e-13 6.20729668065266e-13 4 -9.023511e-06 2.692336e-03 6.38184572791258e-13 5.7266105505048e-13 5 2.200279e-04 2.215004e-03 6.75152282800427e-13 5.09272437887735e-13 6 5.908299e-04 1.606367e-03 7.12303992859414e-13 4.28024915889614e-13 7 1.064796e-03 9.515037e-04 7.40429600474545e-13 3.43162692912797e-13 8 1.505316e-03 4.271597e-04 7.53826404101788e-13 2.81067176100164e-13 9 1.796378e-03 1.284864e-04 7.57855805192766e-13 2.4334126588571e-13 10 1.939052e-03 3.734987e-06 7.47048402266615e-13 1.43284438794887e-13 11 1.939694e-03 3.207582e-06 7.36401499383919e-13 4.83275930849067e-14 12 1.940074e-03 2.917474e-06 7.34973598997309e-13 3.55612296283581e-14 13 1.940421e-03 2.674695e-06 7.34336398824784e-13 2.98010880687746e-14 14 1.940745e-03 2.464603e-06 7.33958098722358e-13 2.63429671324733e-14 15 1.941048e-03 2.281661e-06 7.33702098653045e-13 2.39739964910642e-14 16 1.941330e-03 2.122435e-06 7.33514998602387e-13 2.22210760164533e-14 17 1.941591e-03 1.983940e-06 7.33371298563479e-13 2.08564456469737e-14 18 1.941833e-03 1.863385e-06 7.33256798532478e-13 1.97550953487783e-14 19 1.942055e-03 1.758211e-06 7.33163398507189e-13 1.8841975101547e-14 20 1.942261e-03 1.666139e-06 7.33085398486071e-13 1.80689248922403e-14 1 -2.946531e-05 2.928674e-03 5.40928846458845e-13 6.93288887710992e-13 2 -1.486847e-05 2.733831e-03 5.6919725411264e-13 6.61787179181766e-13 3 5.380981e-05 2.491192e-03 5.99953362439991e-13 6.23997268949983e-13 4 1.906559e-04 2.179939e-03 6.33826871611391e-13 5.76332856044636e-13 5 4.147623e-04 1.778362e-03 6.71413581788157e-13 5.12838438853245e-13 6 7.394491e-04 1.283359e-03 7.09624192133847e-13 4.30727816621436e-13 7 1.130471e-03 7.622733e-04 7.38978600081681e-13 3.44376193241357e-13 8 1.483538e-03 3.485889e-04 7.53171103924363e-13 2.80003775812244e-13 9 1.713743e-03 1.125635e-04 7.570648049786e-13 2.37285864246183e-13 10 1.830118e-03 9.992124e-06 7.4642350209742e-13 1.16739731607792e-13 11 1.839302e-03 2.630630e-06 7.39284800164586e-13 4.65326325989133e-14 12 1.839662e-03 2.385015e-06 7.38234899880321e-13 3.48941594477459e-14 13 1.839982e-03 2.184341e-06 7.37747299748301e-13 2.94341379694213e-14 14 1.840279e-03 2.011850e-06 7.3745289966859e-13 2.61045870679309e-14 15 1.840556e-03 1.862275e-06 7.37251699614115e-13 2.38041464450765e-14 16 1.840813e-03 1.732431e-06 7.37103599574016e-13 2.2092725981702e-14 17 1.841051e-03 1.619673e-06 7.36989299543069e-13 2.07554256196221e-14 18 1.841271e-03 1.521613e-06 7.36897799518295e-13 1.96731953266035e-14 19 1.841475e-03 1.436104e-06 7.36822699497961e-13 1.87740550831573e-14 20 1.841663e-03 1.361260e-06 7.36759899480958e-13 1.80115848767152e-14 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_corsrd2.standard0000644000175000017500000001112213546075722025042 0ustar carstencarstenV(d) I(d) 1.000000e+00 4.704662e-03 2.000000e+00 4.789836e-03 3.000000e+00 4.798685e-03 4.000000e+00 4.805066e-03 5.000000e+00 4.810281e-03 6.000000e+00 4.814814e-03 7.000000e+00 4.818885e-03 8.000000e+00 4.822618e-03 9.000000e+00 4.826086e-03 1.000000e+01 4.829341e-03 1.100000e+01 4.832419e-03 1.200000e+01 4.835346e-03 1.300000e+01 4.838143e-03 1.400000e+01 4.840826e-03 1.500000e+01 4.843408e-03 1.600000e+01 4.845900e-03 1.700000e+01 4.848311e-03 1.800000e+01 4.850648e-03 1.900000e+01 4.852918e-03 2.000000e+01 4.855127e-03 1.000000e+00 1.376999e-02 2.000000e+00 2.261782e-02 3.000000e+00 2.682751e-02 4.000000e+00 2.766503e-02 5.000000e+00 2.769236e-02 6.000000e+00 2.771449e-02 7.000000e+00 2.773318e-02 8.000000e+00 2.774929e-02 9.000000e+00 2.776347e-02 1.000000e+01 2.777620e-02 1.100000e+01 2.778780e-02 1.200000e+01 2.779853e-02 1.300000e+01 2.780855e-02 1.400000e+01 2.781798e-02 1.500000e+01 2.782692e-02 1.600000e+01 2.783544e-02 1.700000e+01 2.784360e-02 1.800000e+01 2.785144e-02 1.900000e+01 2.785900e-02 2.000000e+01 2.786630e-02 1.000000e+00 1.444908e-02 2.000000e+00 2.735496e-02 3.000000e+00 3.835233e-02 4.000000e+00 4.724712e-02 5.000000e+00 5.397195e-02 6.000000e+00 5.853968e-02 7.000000e+00 6.114413e-02 8.000000e+00 6.230094e-02 9.000000e+00 6.266085e-02 1.000000e+01 6.270522e-02 1.100000e+01 6.273071e-02 1.200000e+01 6.275418e-02 1.300000e+01 6.277592e-02 1.400000e+01 6.279611e-02 1.500000e+01 6.281492e-02 1.600000e+01 6.283252e-02 1.700000e+01 6.284904e-02 1.800000e+01 6.286463e-02 1.900000e+01 6.287938e-02 2.000000e+01 6.289341e-02 1.000000e+00 5.675691e-03 2.000000e+00 5.715193e-03 3.000000e+00 5.725512e-03 4.000000e+00 5.732975e-03 5.000000e+00 5.739087e-03 6.000000e+00 5.744406e-03 7.000000e+00 5.749189e-03 8.000000e+00 5.753577e-03 9.000000e+00 5.757657e-03 1.000000e+01 5.761487e-03 1.100000e+01 5.765110e-03 1.200000e+01 5.768556e-03 1.300000e+01 5.771849e-03 1.400000e+01 5.775009e-03 1.500000e+01 5.778051e-03 1.600000e+01 5.780986e-03 1.700000e+01 5.783826e-03 1.800000e+01 5.786580e-03 1.900000e+01 5.789255e-03 2.000000e+01 5.791857e-03 1.000000e+00 1.680372e-02 2.000000e+00 2.716184e-02 3.000000e+00 3.177405e-02 4.000000e+00 3.255384e-02 5.000000e+00 3.258274e-02 6.000000e+00 3.260645e-02 7.000000e+00 3.262649e-02 8.000000e+00 3.264377e-02 9.000000e+00 3.265898e-02 1.000000e+01 3.267264e-02 1.100000e+01 3.268510e-02 1.200000e+01 3.269661e-02 1.300000e+01 3.270736e-02 1.400000e+01 3.271749e-02 1.500000e+01 3.272709e-02 1.600000e+01 3.273623e-02 1.700000e+01 3.274499e-02 1.800000e+01 3.275341e-02 1.900000e+01 3.276152e-02 2.000000e+01 3.276936e-02 1.000000e+00 1.609592e-02 2.000000e+00 3.050775e-02 3.000000e+00 4.276890e-02 4.000000e+00 5.263653e-02 5.000000e+00 6.003833e-02 6.000000e+00 6.500786e-02 7.000000e+00 6.779090e-02 8.000000e+00 6.899241e-02 9.000000e+00 6.933944e-02 1.000000e+01 6.937188e-02 1.100000e+01 6.939874e-02 1.200000e+01 6.942348e-02 1.300000e+01 6.944640e-02 1.400000e+01 6.946770e-02 1.500000e+01 6.948754e-02 1.600000e+01 6.950610e-02 1.700000e+01 6.952354e-02 1.800000e+01 6.953998e-02 1.900000e+01 6.955554e-02 2.000000e+01 6.957033e-02 1.000000e+00 3.756309e-03 2.000000e+00 3.946763e-03 3.000000e+00 3.954111e-03 4.000000e+00 3.959372e-03 5.000000e+00 3.963654e-03 6.000000e+00 3.967364e-03 7.000000e+00 3.970690e-03 8.000000e+00 3.973735e-03 9.000000e+00 3.976562e-03 1.000000e+01 3.979212e-03 1.100000e+01 3.981717e-03 1.200000e+01 3.984097e-03 1.300000e+01 3.986371e-03 1.400000e+01 3.988551e-03 1.500000e+01 3.990649e-03 1.600000e+01 3.992673e-03 1.700000e+01 3.994631e-03 1.800000e+01 3.996529e-03 1.900000e+01 3.998371e-03 2.000000e+01 4.000164e-03 1.000000e+00 1.037880e-02 2.000000e+00 1.734487e-02 3.000000e+00 2.093957e-02 4.000000e+00 2.184416e-02 5.000000e+00 2.187796e-02 6.000000e+00 2.189706e-02 7.000000e+00 2.191316e-02 8.000000e+00 2.192701e-02 9.000000e+00 2.193920e-02 1.000000e+01 2.195013e-02 1.100000e+01 2.196010e-02 1.200000e+01 2.196932e-02 1.300000e+01 2.197792e-02 1.400000e+01 2.198601e-02 1.500000e+01 2.199369e-02 1.600000e+01 2.200100e-02 1.700000e+01 2.200800e-02 1.800000e+01 2.201473e-02 1.900000e+01 2.202121e-02 2.000000e+01 2.202747e-02 1.000000e+00 1.215126e-02 2.000000e+00 2.297036e-02 3.000000e+00 3.221319e-02 4.000000e+00 3.974409e-02 5.000000e+00 4.550481e-02 6.000000e+00 4.948819e-02 7.000000e+00 5.182603e-02 8.000000e+00 5.291518e-02 9.000000e+00 5.329113e-02 1.000000e+01 5.336447e-02 1.100000e+01 5.338769e-02 1.200000e+01 5.340896e-02 1.300000e+01 5.342864e-02 1.400000e+01 5.344691e-02 1.500000e+01 5.346394e-02 1.600000e+01 5.347986e-02 1.700000e+01 5.349482e-02 1.800000e+01 5.350892e-02 1.900000e+01 5.352227e-02 2.000000e+01 5.353496e-02 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_COTEMP3.standard0000644000175000017500000000041613546075722024542 0ustar carstencarstenV(d) I(d) 1.000000e+00 3.579611e-03 3.000000e+00 1.016807e-02 5.000000e+00 1.551127e-02 7.000000e+00 1.870718e-02 9.000000e+00 1.963869e-02 1.100000e+01 1.969220e-02 1.300000e+01 1.969805e-02 1.500000e+01 1.970299e-02 1.700000e+01 1.970724e-02 1.900000e+01 1.971097e-02 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_ptl.standard0000644000175000017500000001112213546075722024263 0ustar carstencarstenV(d) I(d) 1.000000e+00 1.890760e-03 2.000000e+00 1.925156e-03 3.000000e+00 1.928729e-03 4.000000e+00 1.931306e-03 5.000000e+00 1.933413e-03 6.000000e+00 1.935243e-03 7.000000e+00 1.936888e-03 8.000000e+00 1.938395e-03 9.000000e+00 1.939796e-03 1.000000e+01 1.941111e-03 1.100000e+01 1.942354e-03 1.200000e+01 1.943536e-03 1.300000e+01 1.944666e-03 1.400000e+01 1.945749e-03 1.500000e+01 1.946792e-03 1.600000e+01 1.947799e-03 1.700000e+01 1.948773e-03 1.800000e+01 1.949717e-03 1.900000e+01 1.950634e-03 2.000000e+01 1.951526e-03 1.000000e+00 5.584900e-03 2.000000e+00 9.256490e-03 3.000000e+00 1.102683e-02 4.000000e+00 1.138086e-02 5.000000e+00 1.139243e-02 6.000000e+00 1.140179e-02 7.000000e+00 1.140970e-02 8.000000e+00 1.141652e-02 9.000000e+00 1.142252e-02 1.000000e+01 1.142790e-02 1.100000e+01 1.143281e-02 1.200000e+01 1.143735e-02 1.300000e+01 1.144159e-02 1.400000e+01 1.144559e-02 1.500000e+01 1.144937e-02 1.600000e+01 1.145298e-02 1.700000e+01 1.145643e-02 1.800000e+01 1.145975e-02 1.900000e+01 1.146295e-02 2.000000e+01 1.146604e-02 1.000000e+00 5.864366e-03 2.000000e+00 1.124972e-02 3.000000e+00 1.595276e-02 4.000000e+00 1.983604e-02 5.000000e+00 2.282045e-02 6.000000e+00 2.487186e-02 7.000000e+00 2.605049e-02 8.000000e+00 2.657609e-02 9.000000e+00 2.673989e-02 1.000000e+01 2.676008e-02 1.100000e+01 2.677169e-02 1.200000e+01 2.678238e-02 1.300000e+01 2.679228e-02 1.400000e+01 2.680147e-02 1.500000e+01 2.681004e-02 1.600000e+01 2.681805e-02 1.700000e+01 2.682558e-02 1.800000e+01 2.683268e-02 1.900000e+01 2.683940e-02 2.000000e+01 2.684579e-02 1.000000e+00 2.283235e-03 2.000000e+00 2.299218e-03 3.000000e+00 2.303393e-03 4.000000e+00 2.306413e-03 5.000000e+00 2.308886e-03 6.000000e+00 2.311038e-03 7.000000e+00 2.312974e-03 8.000000e+00 2.314749e-03 9.000000e+00 2.316400e-03 1.000000e+01 2.317950e-03 1.100000e+01 2.319416e-03 1.200000e+01 2.320810e-03 1.300000e+01 2.322143e-03 1.400000e+01 2.323421e-03 1.500000e+01 2.324652e-03 1.600000e+01 2.325840e-03 1.700000e+01 2.326989e-03 1.800000e+01 2.328104e-03 1.900000e+01 2.329186e-03 2.000000e+01 2.330239e-03 1.000000e+00 6.836362e-03 2.000000e+00 1.116808e-02 3.000000e+00 1.312671e-02 4.000000e+00 1.345970e-02 5.000000e+00 1.347205e-02 6.000000e+00 1.348218e-02 7.000000e+00 1.349075e-02 8.000000e+00 1.349814e-02 9.000000e+00 1.350464e-02 1.000000e+01 1.351048e-02 1.100000e+01 1.351580e-02 1.200000e+01 1.352073e-02 1.300000e+01 1.352532e-02 1.400000e+01 1.352965e-02 1.500000e+01 1.353375e-02 1.600000e+01 1.353767e-02 1.700000e+01 1.354141e-02 1.800000e+01 1.354501e-02 1.900000e+01 1.354848e-02 2.000000e+01 1.355183e-02 1.000000e+00 6.543694e-03 2.000000e+00 1.258711e-02 3.000000e+00 1.787192e-02 4.000000e+00 2.222443e-02 5.000000e+00 2.554927e-02 6.000000e+00 2.781108e-02 7.000000e+00 2.908828e-02 8.000000e+00 2.964204e-02 9.000000e+00 2.980225e-02 1.000000e+01 2.981723e-02 1.100000e+01 2.982963e-02 1.200000e+01 2.984106e-02 1.300000e+01 2.985165e-02 1.400000e+01 2.986149e-02 1.500000e+01 2.987065e-02 1.600000e+01 2.987923e-02 1.700000e+01 2.988728e-02 1.800000e+01 2.989488e-02 1.900000e+01 2.990207e-02 2.000000e+01 2.990890e-02 1.000000e+00 1.508189e-03 2.000000e+00 1.584961e-03 3.000000e+00 1.587923e-03 4.000000e+00 1.590044e-03 5.000000e+00 1.591771e-03 6.000000e+00 1.593267e-03 7.000000e+00 1.594608e-03 8.000000e+00 1.595835e-03 9.000000e+00 1.596975e-03 1.000000e+01 1.598044e-03 1.100000e+01 1.599054e-03 1.200000e+01 1.600013e-03 1.300000e+01 1.600930e-03 1.400000e+01 1.601809e-03 1.500000e+01 1.602655e-03 1.600000e+01 1.603471e-03 1.700000e+01 1.604261e-03 1.800000e+01 1.605026e-03 1.900000e+01 1.605769e-03 2.000000e+01 1.606492e-03 1.000000e+00 4.195061e-03 2.000000e+00 7.060410e-03 3.000000e+00 8.554967e-03 4.000000e+00 8.932792e-03 5.000000e+00 8.946925e-03 6.000000e+00 8.954912e-03 7.000000e+00 8.961640e-03 8.000000e+00 8.967433e-03 9.000000e+00 8.972530e-03 1.000000e+01 8.977102e-03 1.100000e+01 8.981272e-03 1.200000e+01 8.985124e-03 1.300000e+01 8.988721e-03 1.400000e+01 8.992106e-03 1.500000e+01 8.995316e-03 1.600000e+01 8.998374e-03 1.700000e+01 9.001301e-03 1.800000e+01 9.004114e-03 1.900000e+01 9.006825e-03 2.000000e+01 9.009445e-03 1.000000e+00 4.920291e-03 2.000000e+00 9.404162e-03 3.000000e+00 1.331417e-02 4.000000e+00 1.655562e-02 5.000000e+00 1.906969e-02 6.000000e+00 2.082591e-02 7.000000e+00 2.186351e-02 8.000000e+00 2.234866e-02 9.000000e+00 2.251638e-02 1.000000e+01 2.254911e-02 1.100000e+01 2.255947e-02 1.200000e+01 2.256897e-02 1.300000e+01 2.257775e-02 1.400000e+01 2.258591e-02 1.500000e+01 2.259351e-02 1.600000e+01 2.260062e-02 1.700000e+01 2.260730e-02 1.800000e+01 2.261360e-02 1.900000e+01 2.261956e-02 2.000000e+01 2.262522e-02 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_ld2.standard0000644000175000017500000001112213546075722024145 0ustar carstencarstenV(d) I(d) 1.000000e+00 1.219562e-03 2.000000e+00 1.245328e-03 3.000000e+00 1.245964e-03 4.000000e+00 1.246417e-03 5.000000e+00 1.246785e-03 6.000000e+00 1.247105e-03 7.000000e+00 1.247392e-03 8.000000e+00 1.247654e-03 9.000000e+00 1.247898e-03 1.000000e+01 1.248126e-03 1.100000e+01 1.248343e-03 1.200000e+01 1.248548e-03 1.300000e+01 1.248744e-03 1.400000e+01 1.248932e-03 1.500000e+01 1.249113e-03 1.600000e+01 1.249288e-03 1.700000e+01 1.249457e-03 1.800000e+01 1.249620e-03 1.900000e+01 1.249779e-03 2.000000e+01 1.249934e-03 1.000000e+00 3.464524e-03 2.000000e+00 6.120070e-03 3.000000e+00 7.710222e-03 4.000000e+00 8.139444e-03 5.000000e+00 8.144155e-03 6.000000e+00 8.146505e-03 7.000000e+00 8.148460e-03 8.000000e+00 8.150127e-03 9.000000e+00 8.151581e-03 1.000000e+01 8.152877e-03 1.100000e+01 8.154054e-03 1.200000e+01 8.155137e-03 1.300000e+01 8.156145e-03 1.400000e+01 8.157093e-03 1.500000e+01 8.157989e-03 1.600000e+01 8.158842e-03 1.700000e+01 8.159658e-03 1.800000e+01 8.160442e-03 1.900000e+01 8.161196e-03 2.000000e+01 8.161925e-03 1.000000e+00 3.579611e-03 2.000000e+00 6.985987e-03 3.000000e+00 1.016807e-02 4.000000e+00 1.304619e-02 5.000000e+00 1.551127e-02 6.000000e+00 1.743135e-02 7.000000e+00 1.870718e-02 8.000000e+00 1.937902e-02 9.000000e+00 1.963869e-02 1.000000e+01 1.968881e-02 1.100000e+01 1.969220e-02 1.200000e+01 1.969526e-02 1.300000e+01 1.969805e-02 1.400000e+01 1.970062e-02 1.500000e+01 1.970299e-02 1.600000e+01 1.970519e-02 1.700000e+01 1.970724e-02 1.800000e+01 1.970916e-02 1.900000e+01 1.971097e-02 2.000000e+01 1.971268e-02 1.000000e+00 1.499015e-03 2.000000e+00 1.510863e-03 3.000000e+00 1.511642e-03 4.000000e+00 1.512199e-03 5.000000e+00 1.512653e-03 6.000000e+00 1.513047e-03 7.000000e+00 1.513401e-03 8.000000e+00 1.513725e-03 9.000000e+00 1.514027e-03 1.000000e+01 1.514310e-03 1.100000e+01 1.514577e-03 1.200000e+01 1.514831e-03 1.300000e+01 1.515074e-03 1.400000e+01 1.515307e-03 1.500000e+01 1.515531e-03 1.600000e+01 1.515748e-03 1.700000e+01 1.515957e-03 1.800000e+01 1.516159e-03 1.900000e+01 1.516356e-03 2.000000e+01 1.516548e-03 1.000000e+00 4.248126e-03 2.000000e+00 7.549798e-03 3.000000e+00 9.536079e-03 4.000000e+00 1.004246e-02 5.000000e+00 1.004628e-02 6.000000e+00 1.004918e-02 7.000000e+00 1.005160e-02 8.000000e+00 1.005366e-02 9.000000e+00 1.005546e-02 1.000000e+01 1.005706e-02 1.100000e+01 1.005851e-02 1.200000e+01 1.005985e-02 1.300000e+01 1.006109e-02 1.400000e+01 1.006226e-02 1.500000e+01 1.006337e-02 1.600000e+01 1.006442e-02 1.700000e+01 1.006543e-02 1.800000e+01 1.006639e-02 1.900000e+01 1.006732e-02 2.000000e+01 1.006822e-02 1.000000e+00 3.983013e-03 2.000000e+00 7.806471e-03 3.000000e+00 1.140870e-02 4.000000e+00 1.469338e-02 5.000000e+00 1.752827e-02 6.000000e+00 1.975191e-02 7.000000e+00 2.123761e-02 8.000000e+00 2.202156e-02 9.000000e+00 2.232269e-02 1.000000e+01 2.237325e-02 1.100000e+01 2.237708e-02 1.200000e+01 2.238056e-02 1.300000e+01 2.238375e-02 1.400000e+01 2.238668e-02 1.500000e+01 2.238938e-02 1.600000e+01 2.239189e-02 1.700000e+01 2.239423e-02 1.800000e+01 2.239642e-02 1.900000e+01 2.239848e-02 2.000000e+01 2.240043e-02 1.000000e+00 9.592475e-04 2.000000e+00 1.013486e-03 3.000000e+00 1.013994e-03 4.000000e+00 1.014354e-03 5.000000e+00 1.014645e-03 6.000000e+00 1.014897e-03 7.000000e+00 1.015123e-03 8.000000e+00 1.015329e-03 9.000000e+00 1.015521e-03 1.000000e+01 1.015700e-03 1.100000e+01 1.015869e-03 1.200000e+01 1.016030e-03 1.300000e+01 1.016184e-03 1.400000e+01 1.016331e-03 1.500000e+01 1.016473e-03 1.600000e+01 1.016609e-03 1.700000e+01 1.016741e-03 1.800000e+01 1.016869e-03 1.900000e+01 1.016993e-03 2.000000e+01 1.017114e-03 1.000000e+00 2.600841e-03 2.000000e+00 4.571814e-03 3.000000e+00 5.763391e-03 4.000000e+00 6.127568e-03 5.000000e+00 6.139122e-03 6.000000e+00 6.140888e-03 7.000000e+00 6.142352e-03 8.000000e+00 6.143599e-03 9.000000e+00 6.144687e-03 1.000000e+01 6.145657e-03 1.100000e+01 6.146538e-03 1.200000e+01 6.147348e-03 1.300000e+01 6.148103e-03 1.400000e+01 6.148811e-03 1.500000e+01 6.149482e-03 1.600000e+01 6.150120e-03 1.700000e+01 6.150731e-03 1.800000e+01 6.151317e-03 1.900000e+01 6.151881e-03 2.000000e+01 6.152426e-03 1.000000e+00 3.015007e-03 2.000000e+00 5.849386e-03 3.000000e+00 8.466723e-03 4.000000e+00 1.080893e-02 5.000000e+00 1.279635e-02 6.000000e+00 1.433369e-02 7.000000e+00 1.535335e-02 8.000000e+00 1.589493e-02 9.000000e+00 1.611120e-02 1.000000e+01 1.616483e-02 1.100000e+01 1.616851e-02 1.200000e+01 1.617101e-02 1.300000e+01 1.617329e-02 1.400000e+01 1.617539e-02 1.500000e+01 1.617732e-02 1.600000e+01 1.617912e-02 1.700000e+01 1.618079e-02 1.800000e+01 1.618236e-02 1.900000e+01 1.618384e-02 2.000000e+01 1.618524e-02 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_codfm.standard0000644000175000017500000001112213546075722024554 0ustar carstencarstenV(d) I(d) 1.000000e+00 6.582386e-03 2.000000e+00 9.737527e-03 3.000000e+00 9.954975e-03 4.000000e+00 9.974858e-03 5.000000e+00 9.989442e-03 6.000000e+00 1.000121e-02 7.000000e+00 1.001132e-02 8.000000e+00 1.002032e-02 9.000000e+00 1.002854e-02 1.000000e+01 1.003615e-02 1.100000e+01 1.004327e-02 1.200000e+01 1.004999e-02 1.300000e+01 1.005638e-02 1.400000e+01 1.006248e-02 1.500000e+01 1.006832e-02 1.600000e+01 1.007394e-02 1.700000e+01 1.007936e-02 1.800000e+01 1.008460e-02 1.900000e+01 1.008968e-02 2.000000e+01 1.009461e-02 1.000000e+00 9.916730e-03 2.000000e+00 1.742043e-02 3.000000e+00 2.297952e-02 4.000000e+00 2.709917e-02 5.000000e+00 3.018118e-02 6.000000e+00 3.251633e-02 7.000000e+00 3.430870e-02 8.000000e+00 3.570078e-02 9.000000e+00 3.679254e-02 1.000000e+01 3.765488e-02 1.100000e+01 3.833876e-02 1.200000e+01 3.888142e-02 1.300000e+01 3.931060e-02 1.400000e+01 3.964742e-02 1.500000e+01 3.990838e-02 1.600000e+01 4.010670e-02 1.700000e+01 4.025329e-02 1.800000e+01 4.035728e-02 1.900000e+01 4.042646e-02 2.000000e+01 4.046685e-02 1.000000e+00 1.070164e-02 2.000000e+00 1.985749e-02 3.000000e+00 2.743383e-02 4.000000e+00 3.356750e-02 5.000000e+00 3.848067e-02 6.000000e+00 4.241099e-02 7.000000e+00 4.557227e-02 8.000000e+00 4.813998e-02 9.000000e+00 5.025112e-02 1.000000e+01 5.200988e-02 1.100000e+01 5.349470e-02 1.200000e+01 5.476447e-02 1.300000e+01 5.586365e-02 1.400000e+01 5.682602e-02 1.500000e+01 5.767747e-02 1.600000e+01 5.843808e-02 1.700000e+01 5.912354e-02 1.800000e+01 5.974626e-02 1.900000e+01 6.031616e-02 2.000000e+01 6.084120e-02 1.000000e+00 7.646053e-03 2.000000e+00 1.142519e-02 3.000000e+00 1.176578e-02 4.000000e+00 1.178868e-02 5.000000e+00 1.180526e-02 6.000000e+00 1.181847e-02 7.000000e+00 1.182973e-02 8.000000e+00 1.183972e-02 9.000000e+00 1.184881e-02 1.000000e+01 1.185721e-02 1.100000e+01 1.186507e-02 1.200000e+01 1.187248e-02 1.300000e+01 1.187951e-02 1.400000e+01 1.188622e-02 1.500000e+01 1.189265e-02 1.600000e+01 1.189882e-02 1.700000e+01 1.190478e-02 1.800000e+01 1.191053e-02 1.900000e+01 1.191611e-02 2.000000e+01 1.192152e-02 1.000000e+00 1.089646e-02 2.000000e+00 1.907732e-02 3.000000e+00 2.512496e-02 4.000000e+00 2.962117e-02 5.000000e+00 3.301062e-02 6.000000e+00 3.560773e-02 7.000000e+00 3.763037e-02 8.000000e+00 3.922972e-02 9.000000e+00 4.051173e-02 1.000000e+01 4.155164e-02 1.100000e+01 4.240363e-02 1.200000e+01 4.310733e-02 1.300000e+01 4.369211e-02 1.400000e+01 4.418004e-02 1.500000e+01 4.458800e-02 1.600000e+01 4.492902e-02 1.700000e+01 4.521339e-02 1.800000e+01 4.544932e-02 1.900000e+01 4.564354e-02 2.000000e+01 4.580160e-02 1.000000e+00 1.135077e-02 2.000000e+00 2.106055e-02 3.000000e+00 2.910364e-02 4.000000e+00 3.563272e-02 5.000000e+00 4.088474e-02 6.000000e+00 4.510843e-02 7.000000e+00 4.852542e-02 8.000000e+00 5.131705e-02 9.000000e+00 5.362498e-02 1.000000e+01 5.555738e-02 1.100000e+01 5.719605e-02 1.200000e+01 5.860280e-02 1.300000e+01 5.982456e-02 1.400000e+01 6.089720e-02 1.500000e+01 6.184837e-02 1.600000e+01 6.269963e-02 1.700000e+01 6.346792e-02 1.800000e+01 6.416671e-02 1.900000e+01 6.480677e-02 2.000000e+01 6.539683e-02 1.000000e+00 5.345242e-03 2.000000e+00 7.904462e-03 3.000000e+00 8.094570e-03 4.000000e+00 8.110696e-03 5.000000e+00 8.122659e-03 6.000000e+00 8.132404e-03 7.000000e+00 8.140816e-03 8.000000e+00 8.148335e-03 9.000000e+00 8.155204e-03 1.000000e+01 8.161572e-03 1.100000e+01 8.167540e-03 1.200000e+01 8.173176e-03 1.300000e+01 8.178531e-03 1.400000e+01 8.183645e-03 1.500000e+01 8.188548e-03 1.600000e+01 8.193265e-03 1.700000e+01 8.197816e-03 1.800000e+01 8.202218e-03 1.900000e+01 8.206484e-03 2.000000e+01 8.210627e-03 1.000000e+00 8.522567e-03 2.000000e+00 1.504206e-02 3.000000e+00 1.988961e-02 4.000000e+00 2.346445e-02 5.000000e+00 2.610390e-02 6.000000e+00 2.806123e-02 7.000000e+00 2.951800e-02 8.000000e+00 3.060243e-02 9.000000e+00 3.140518e-02 1.000000e+01 3.199150e-02 1.100000e+01 3.240986e-02 1.200000e+01 3.269799e-02 1.300000e+01 3.288692e-02 1.400000e+01 3.300477e-02 1.500000e+01 3.305188e-02 1.600000e+01 3.307033e-02 1.700000e+01 3.308818e-02 1.800000e+01 3.310501e-02 1.900000e+01 3.312066e-02 2.000000e+01 3.313518e-02 1.000000e+00 9.682165e-03 2.000000e+00 1.797431e-02 3.000000e+00 2.483182e-02 4.000000e+00 3.036508e-02 5.000000e+00 3.477016e-02 6.000000e+00 3.826498e-02 7.000000e+00 4.104960e-02 8.000000e+00 4.328960e-02 9.000000e+00 4.511433e-02 1.000000e+01 4.662170e-02 1.100000e+01 4.788479e-02 1.200000e+01 4.895802e-02 1.300000e+01 4.988201e-02 1.400000e+01 5.068735e-02 1.500000e+01 5.139723e-02 1.600000e+01 5.202949e-02 1.700000e+01 5.259795e-02 1.800000e+01 5.311346e-02 1.900000e+01 5.358462e-02 2.000000e+01 5.401829e-02 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/acFreq_coovlp.standard0000644000175000017500000000712013546075722025272 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 5.02490670837342e-13 2.43173155859993e-13 2.67753522735935e-13 1258.925 5.02490938237368e-13 2.43173279076519e-13 2.67753626512025e-13 1584.893 5.02490796853788e-13 2.43173237753903e-13 2.67753541405518e-13 1995.262 5.02490831374956e-13 2.43173251553875e-13 2.6775351879627e-13 2511.886 5.02490798926643e-13 2.43173241829612e-13 2.67753532070872e-13 3162.278 5.02490675000775e-13 2.43173161861449e-13 2.67753443119659e-13 3981.072 5.02490761850095e-13 2.43173200997294e-13 2.67753459817099e-13 5011.872 5.02490900207193e-13 2.43173211351486e-13 2.67753497336545e-13 6309.573 5.02490699147499e-13 2.4317322634074e-13 2.67753558335453e-13 7943.282 5.02490800107442e-13 2.43173226901849e-13 2.6775350758259e-13 10000 5.02490670837342e-13 2.43173155859993e-13 2.67753522735935e-13 12589.25 5.02490938237368e-13 2.43173279076519e-13 2.67753626512025e-13 15848.93 5.02490796853788e-13 2.43173237753903e-13 2.67753541405518e-13 19952.62 5.02490831374956e-13 2.43173251553875e-13 2.6775351879627e-13 25118.86 5.02490798926643e-13 2.43173241829612e-13 2.67753532070872e-13 31622.78 5.02490675000775e-13 2.43173161861449e-13 2.67753443119659e-13 39810.72 5.02490761850095e-13 2.43173200997294e-13 2.67753459817099e-13 50118.72 5.02490900207193e-13 2.43173211351486e-13 2.67753497336545e-13 63095.73 5.02490699147499e-13 2.4317322634074e-13 2.67753558335453e-13 79432.82 5.02490800107442e-13 2.43173226901849e-13 2.6775350758259e-13 100000 5.02490670837342e-13 2.43173155859993e-13 2.67753522735935e-13 125892.5 5.02490938237368e-13 2.43173279076519e-13 2.67753626512024e-13 158489.3 5.02490796853788e-13 2.43173237753903e-13 2.67753541405518e-13 199526.2 5.02490831374956e-13 2.43173251553875e-13 2.6775351879627e-13 251188.6 5.02490798926643e-13 2.43173241829612e-13 2.67753532070872e-13 316227.8 5.02490675000775e-13 2.43173161861449e-13 2.67753443119659e-13 398107.2 5.02490761850095e-13 2.43173200997294e-13 2.67753459817099e-13 501187.2 5.02490900207193e-13 2.43173211351486e-13 2.67753497336545e-13 630957.3 5.02490699147499e-13 2.4317322634074e-13 2.67753558335453e-13 794328.2 5.02490800107442e-13 2.43173226901849e-13 2.6775350758259e-13 1000000 5.02490670837342e-13 2.43173155859993e-13 2.67753522735935e-13 1258925 5.02490938237368e-13 2.43173279076519e-13 2.67753626512024e-13 1584893 5.02490796853788e-13 2.43173237753903e-13 2.67753541405518e-13 1995262 5.02490831374956e-13 2.43173251553875e-13 2.6775351879627e-13 2511886 5.02490798926643e-13 2.43173241829612e-13 2.67753532070872e-13 3162278 5.02490675000775e-13 2.43173161861449e-13 2.67753443119659e-13 3981072 5.02490761850095e-13 2.43173200997294e-13 2.67753459817099e-13 5011872 5.02490900207193e-13 2.43173211351486e-13 2.67753497336545e-13 6309573 5.02490699147499e-13 2.4317322634074e-13 2.67753558335453e-13 7943282 5.02490800107442e-13 2.43173226901849e-13 2.6775350758259e-13 10000000 5.02490670837342e-13 2.43173155859993e-13 2.67753522735935e-13 12589250 5.02490811816062e-13 2.43173279076519e-13 2.67753500090718e-13 15848930 5.02490796853788e-13 2.4317313733391e-13 2.67753541405518e-13 19952620 5.02490751608518e-13 2.43173171787436e-13 2.6775351879627e-13 25118860 5.02490672205173e-13 2.43173115108142e-13 2.67753532070872e-13 31622780 5.02490473683948e-13 2.43172910215416e-13 2.67753443119659e-13 39810720 5.02490362070983e-13 2.4317276124027e-13 2.67753419839188e-13 50118720 5.0249026509543e-13 2.43172576239723e-13 2.67753433825369e-13 63095730 5.02489942416688e-13 2.43172192141966e-13 2.67753306091849e-13 79432820 5.02489397557965e-13 2.43171623988161e-13 2.67753307218379e-13 100000000 5.02488442668139e-13 2.43170609380904e-13 2.67753204426049e-13 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_cosym.standard0000644000175000017500000003371413546075722024631 0ustar carstencarstenV(d) I(d) 1.000000e-01 2.395080e-05 6.000000e-01 1.333173e-04 1.100000e+00 2.186297e-04 1.600000e+00 2.612537e-04 2.100000e+00 2.627002e-04 2.600000e+00 2.627253e-04 3.100000e+00 2.627438e-04 3.600000e+00 2.627583e-04 4.100000e+00 2.627704e-04 4.600000e+00 2.627810e-04 5.100000e+00 2.627904e-04 5.600000e+00 2.627989e-04 6.100000e+00 2.628068e-04 6.600000e+00 2.628142e-04 7.100000e+00 2.628211e-04 7.600000e+00 2.628277e-04 8.100000e+00 2.628339e-04 8.600000e+00 2.628399e-04 9.100000e+00 2.628457e-04 9.600000e+00 2.628512e-04 1.010000e+01 2.628566e-04 1.060000e+01 2.628618e-04 1.110000e+01 2.628668e-04 1.160000e+01 2.628717e-04 1.210000e+01 2.628764e-04 1.260000e+01 2.628810e-04 1.310000e+01 2.628856e-04 1.360000e+01 2.628900e-04 1.410000e+01 2.628943e-04 1.460000e+01 2.628985e-04 1.510000e+01 2.629027e-04 1.560000e+01 2.629067e-04 1.610000e+01 2.629107e-04 1.660000e+01 2.629146e-04 1.710000e+01 2.629185e-04 1.760000e+01 2.629222e-04 1.810000e+01 2.629260e-04 1.860000e+01 2.629296e-04 1.910000e+01 2.629332e-04 1.960000e+01 2.629368e-04 2.010000e+01 2.629403e-04 2.060000e+01 2.629437e-04 2.110000e+01 2.629471e-04 2.160000e+01 2.629505e-04 2.210000e+01 2.629538e-04 2.260000e+01 2.629571e-04 2.310000e+01 2.629603e-04 2.360000e+01 2.629635e-04 2.410000e+01 2.629667e-04 2.460000e+01 2.629698e-04 2.510000e+01 2.629729e-04 2.560000e+01 2.629760e-04 2.610000e+01 2.629790e-04 2.660000e+01 2.629820e-04 2.710000e+01 2.629849e-04 2.760000e+01 2.629879e-04 2.810000e+01 2.629908e-04 2.860000e+01 2.629937e-04 2.910000e+01 2.629965e-04 2.960000e+01 2.629993e-04 3.010000e+01 2.630021e-04 1.000000e-01 3.145100e-05 6.000000e-01 1.870470e-04 1.100000e+00 3.397815e-04 1.600000e+00 4.894787e-04 2.100000e+00 6.359002e-04 2.600000e+00 7.787311e-04 3.100000e+00 9.175549e-04 3.600000e+00 1.051813e-03 4.100000e+00 1.180733e-03 4.600000e+00 1.303215e-03 5.100000e+00 1.417612e-03 5.600000e+00 1.521362e-03 6.100000e+00 1.610391e-03 6.600000e+00 1.678537e-03 7.100000e+00 1.718543e-03 7.600000e+00 1.728799e-03 8.100000e+00 1.729172e-03 8.600000e+00 1.729462e-03 9.100000e+00 1.729705e-03 9.600000e+00 1.729912e-03 1.010000e+01 1.730091e-03 1.060000e+01 1.730247e-03 1.110000e+01 1.730385e-03 1.160000e+01 1.730508e-03 1.210000e+01 1.730619e-03 1.260000e+01 1.730719e-03 1.310000e+01 1.730811e-03 1.360000e+01 1.730895e-03 1.410000e+01 1.730972e-03 1.460000e+01 1.731043e-03 1.510000e+01 1.731110e-03 1.560000e+01 1.731172e-03 1.610000e+01 1.731231e-03 1.660000e+01 1.731285e-03 1.710000e+01 1.731337e-03 1.760000e+01 1.731386e-03 1.810000e+01 1.731433e-03 1.860000e+01 1.731477e-03 1.910000e+01 1.731519e-03 1.960000e+01 1.731560e-03 2.010000e+01 1.731599e-03 2.060000e+01 1.731636e-03 2.110000e+01 1.731671e-03 2.160000e+01 1.731706e-03 2.210000e+01 1.731739e-03 2.260000e+01 1.731771e-03 2.310000e+01 1.731802e-03 2.360000e+01 1.731832e-03 2.410000e+01 1.731861e-03 2.460000e+01 1.731889e-03 2.510000e+01 1.731916e-03 2.560000e+01 1.731943e-03 2.610000e+01 1.731969e-03 2.660000e+01 1.731994e-03 2.710000e+01 1.732018e-03 2.760000e+01 1.732042e-03 2.810000e+01 1.732066e-03 2.860000e+01 1.732089e-03 2.910000e+01 1.732111e-03 2.960000e+01 1.732133e-03 3.010000e+01 1.732154e-03 1.000000e-01 3.085491e-05 6.000000e-01 1.844182e-04 1.100000e+00 3.368177e-04 1.600000e+00 4.880713e-04 2.100000e+00 6.381856e-04 2.600000e+00 7.871581e-04 3.100000e+00 9.349789e-04 3.600000e+00 1.081631e-03 4.100000e+00 1.227090e-03 4.600000e+00 1.371328e-03 5.100000e+00 1.514307e-03 5.600000e+00 1.655985e-03 6.100000e+00 1.796312e-03 6.600000e+00 1.935227e-03 7.100000e+00 2.072663e-03 7.600000e+00 2.208540e-03 8.100000e+00 2.342764e-03 8.600000e+00 2.475225e-03 9.100000e+00 2.605796e-03 9.600000e+00 2.734322e-03 1.010000e+01 2.860621e-03 1.060000e+01 2.984474e-03 1.110000e+01 3.105617e-03 1.160000e+01 3.223728e-03 1.210000e+01 3.338413e-03 1.260000e+01 3.449191e-03 1.310000e+01 3.555468e-03 1.360000e+01 3.656516e-03 1.410000e+01 3.751452e-03 1.460000e+01 3.839218e-03 1.510000e+01 3.918597e-03 1.560000e+01 3.988270e-03 1.610000e+01 4.046974e-03 1.660000e+01 4.093773e-03 1.710000e+01 4.128417e-03 1.760000e+01 4.151643e-03 1.810000e+01 4.165160e-03 1.860000e+01 4.170661e-03 1.910000e+01 4.171660e-03 1.960000e+01 4.172453e-03 2.010000e+01 4.173179e-03 2.060000e+01 4.173847e-03 2.110000e+01 4.174464e-03 2.160000e+01 4.175036e-03 2.210000e+01 4.175567e-03 2.260000e+01 4.176063e-03 2.310000e+01 4.176525e-03 2.360000e+01 4.176959e-03 2.410000e+01 4.177366e-03 2.460000e+01 4.177748e-03 2.510000e+01 4.178109e-03 2.560000e+01 4.178450e-03 2.610000e+01 4.178772e-03 2.660000e+01 4.179078e-03 2.710000e+01 4.179367e-03 2.760000e+01 4.179643e-03 2.810000e+01 4.179906e-03 2.860000e+01 4.180156e-03 2.910000e+01 4.180395e-03 2.960000e+01 4.180623e-03 3.010000e+01 4.180841e-03 1.000000e-01 2.733118e-05 6.000000e-01 1.542081e-04 1.100000e+00 2.577884e-04 1.600000e+00 3.162876e-04 2.100000e+00 3.190733e-04 2.600000e+00 3.191102e-04 3.100000e+00 3.191364e-04 3.600000e+00 3.191565e-04 4.100000e+00 3.191730e-04 4.600000e+00 3.191871e-04 5.100000e+00 3.191996e-04 5.600000e+00 3.192108e-04 6.100000e+00 3.192211e-04 6.600000e+00 3.192307e-04 7.100000e+00 3.192396e-04 7.600000e+00 3.192481e-04 8.100000e+00 3.192561e-04 8.600000e+00 3.192638e-04 9.100000e+00 3.192711e-04 9.600000e+00 3.192782e-04 1.010000e+01 3.192850e-04 1.060000e+01 3.192916e-04 1.110000e+01 3.192980e-04 1.160000e+01 3.193041e-04 1.210000e+01 3.193102e-04 1.260000e+01 3.193160e-04 1.310000e+01 3.193217e-04 1.360000e+01 3.193273e-04 1.410000e+01 3.193327e-04 1.460000e+01 3.193381e-04 1.510000e+01 3.193433e-04 1.560000e+01 3.193484e-04 1.610000e+01 3.193534e-04 1.660000e+01 3.193583e-04 1.710000e+01 3.193632e-04 1.760000e+01 3.193679e-04 1.810000e+01 3.193726e-04 1.860000e+01 3.193772e-04 1.910000e+01 3.193817e-04 1.960000e+01 3.193862e-04 2.010000e+01 3.193906e-04 2.060000e+01 3.193949e-04 2.110000e+01 3.193992e-04 2.160000e+01 3.194034e-04 2.210000e+01 3.194076e-04 2.260000e+01 3.194117e-04 2.310000e+01 3.194157e-04 2.360000e+01 3.194197e-04 2.410000e+01 3.194237e-04 2.460000e+01 3.194276e-04 2.510000e+01 3.194315e-04 2.560000e+01 3.194353e-04 2.610000e+01 3.194391e-04 2.660000e+01 3.194428e-04 2.710000e+01 3.194465e-04 2.760000e+01 3.194502e-04 2.810000e+01 3.194538e-04 2.860000e+01 3.194574e-04 2.910000e+01 3.194610e-04 2.960000e+01 3.194645e-04 3.010000e+01 3.194680e-04 1.000000e-01 3.381826e-05 6.000000e-01 2.015133e-04 1.100000e+00 3.668183e-04 1.600000e+00 5.296188e-04 2.100000e+00 6.897611e-04 2.600000e+00 8.470448e-04 3.100000e+00 1.001210e-03 3.600000e+00 1.151919e-03 4.100000e+00 1.298722e-03 4.600000e+00 1.441011e-03 5.100000e+00 1.577926e-03 5.600000e+00 1.708207e-03 6.100000e+00 1.829916e-03 6.600000e+00 1.939940e-03 7.100000e+00 2.033167e-03 7.600000e+00 2.101606e-03 8.100000e+00 2.135766e-03 8.600000e+00 2.139327e-03 9.100000e+00 2.139920e-03 9.600000e+00 2.140406e-03 1.010000e+01 2.140814e-03 1.060000e+01 2.141162e-03 1.110000e+01 2.141462e-03 1.160000e+01 2.141724e-03 1.210000e+01 2.141955e-03 1.260000e+01 2.142160e-03 1.310000e+01 2.142344e-03 1.360000e+01 2.142511e-03 1.410000e+01 2.142662e-03 1.460000e+01 2.142800e-03 1.510000e+01 2.142928e-03 1.560000e+01 2.143045e-03 1.610000e+01 2.143154e-03 1.660000e+01 2.143255e-03 1.710000e+01 2.143350e-03 1.760000e+01 2.143439e-03 1.810000e+01 2.143522e-03 1.860000e+01 2.143601e-03 1.910000e+01 2.143675e-03 1.960000e+01 2.143746e-03 2.010000e+01 2.143813e-03 2.060000e+01 2.143877e-03 2.110000e+01 2.143938e-03 2.160000e+01 2.143996e-03 2.210000e+01 2.144052e-03 2.260000e+01 2.144106e-03 2.310000e+01 2.144157e-03 2.360000e+01 2.144207e-03 2.410000e+01 2.144255e-03 2.460000e+01 2.144301e-03 2.510000e+01 2.144345e-03 2.560000e+01 2.144388e-03 2.610000e+01 2.144430e-03 2.660000e+01 2.144470e-03 2.710000e+01 2.144509e-03 2.760000e+01 2.144547e-03 2.810000e+01 2.144584e-03 2.860000e+01 2.144620e-03 2.910000e+01 2.144655e-03 2.960000e+01 2.144689e-03 3.010000e+01 2.144723e-03 1.000000e-01 3.210773e-05 6.000000e-01 1.919889e-04 1.100000e+00 3.507940e-04 1.600000e+00 5.085413e-04 2.100000e+00 6.652394e-04 2.600000e+00 8.208895e-04 3.100000e+00 9.754869e-04 3.600000e+00 1.129021e-03 4.100000e+00 1.281476e-03 4.600000e+00 1.432832e-03 5.100000e+00 1.583063e-03 5.600000e+00 1.732140e-03 6.100000e+00 1.880026e-03 6.600000e+00 2.026682e-03 7.100000e+00 2.172058e-03 7.600000e+00 2.316101e-03 8.100000e+00 2.458747e-03 8.600000e+00 2.599922e-03 9.100000e+00 2.739541e-03 9.600000e+00 2.877505e-03 1.010000e+01 3.013698e-03 1.060000e+01 3.147982e-03 1.110000e+01 3.280194e-03 1.160000e+01 3.410141e-03 1.210000e+01 3.537587e-03 1.260000e+01 3.662251e-03 1.310000e+01 3.783788e-03 1.360000e+01 3.901778e-03 1.410000e+01 4.015704e-03 1.460000e+01 4.124930e-03 1.510000e+01 4.228676e-03 1.560000e+01 4.325990e-03 1.610000e+01 4.415735e-03 1.660000e+01 4.496599e-03 1.710000e+01 4.567165e-03 1.760000e+01 4.626085e-03 1.810000e+01 4.672389e-03 1.860000e+01 4.705889e-03 1.910000e+01 4.727484e-03 1.960000e+01 4.738804e-03 2.010000e+01 4.741067e-03 2.060000e+01 4.742282e-03 2.110000e+01 4.743392e-03 2.160000e+01 4.744410e-03 2.210000e+01 4.745348e-03 2.260000e+01 4.746215e-03 2.310000e+01 4.747019e-03 2.360000e+01 4.747767e-03 2.410000e+01 4.748464e-03 2.460000e+01 4.749116e-03 2.510000e+01 4.749727e-03 2.560000e+01 4.750301e-03 2.610000e+01 4.750841e-03 2.660000e+01 4.751350e-03 2.710000e+01 4.751831e-03 2.760000e+01 4.752286e-03 2.810000e+01 4.752717e-03 2.860000e+01 4.753127e-03 2.910000e+01 4.753516e-03 2.960000e+01 4.753886e-03 3.010000e+01 4.754239e-03 1.000000e-01 1.995027e-05 6.000000e-01 1.096445e-04 1.100000e+00 1.774563e-04 1.600000e+00 2.113636e-04 2.100000e+00 2.136306e-04 2.600000e+00 2.136483e-04 3.100000e+00 2.136615e-04 3.600000e+00 2.136720e-04 4.100000e+00 2.136810e-04 4.600000e+00 2.136888e-04 5.100000e+00 2.136958e-04 5.600000e+00 2.137023e-04 6.100000e+00 2.137083e-04 6.600000e+00 2.137138e-04 7.100000e+00 2.137191e-04 7.600000e+00 2.137241e-04 8.100000e+00 2.137289e-04 8.600000e+00 2.137335e-04 9.100000e+00 2.137379e-04 9.600000e+00 2.137422e-04 1.010000e+01 2.137463e-04 1.060000e+01 2.137503e-04 1.110000e+01 2.137541e-04 1.160000e+01 2.137579e-04 1.210000e+01 2.137616e-04 1.260000e+01 2.137651e-04 1.310000e+01 2.137686e-04 1.360000e+01 2.137720e-04 1.410000e+01 2.137753e-04 1.460000e+01 2.137786e-04 1.510000e+01 2.137818e-04 1.560000e+01 2.137850e-04 1.610000e+01 2.137880e-04 1.660000e+01 2.137911e-04 1.710000e+01 2.137940e-04 1.760000e+01 2.137970e-04 1.810000e+01 2.137998e-04 1.860000e+01 2.138027e-04 1.910000e+01 2.138055e-04 1.960000e+01 2.138082e-04 2.010000e+01 2.138109e-04 2.060000e+01 2.138136e-04 2.110000e+01 2.138162e-04 2.160000e+01 2.138188e-04 2.210000e+01 2.138214e-04 2.260000e+01 2.138240e-04 2.310000e+01 2.138265e-04 2.360000e+01 2.138289e-04 2.410000e+01 2.138314e-04 2.460000e+01 2.138338e-04 2.510000e+01 2.138362e-04 2.560000e+01 2.138386e-04 2.610000e+01 2.138409e-04 2.660000e+01 2.138433e-04 2.710000e+01 2.138456e-04 2.760000e+01 2.138478e-04 2.810000e+01 2.138501e-04 2.860000e+01 2.138523e-04 2.910000e+01 2.138545e-04 2.960000e+01 2.138567e-04 3.010000e+01 2.138589e-04 1.000000e-01 2.791887e-05 6.000000e-01 1.654633e-04 1.100000e+00 2.994521e-04 1.600000e+00 4.296234e-04 2.100000e+00 5.556141e-04 2.600000e+00 6.769336e-04 3.100000e+00 7.929143e-04 3.600000e+00 9.026257e-04 4.100000e+00 1.004726e-03 4.600000e+00 1.097207e-03 5.100000e+00 1.177018e-03 5.600000e+00 1.239767e-03 6.100000e+00 1.280539e-03 6.600000e+00 1.297760e-03 7.100000e+00 1.299771e-03 7.600000e+00 1.299922e-03 8.100000e+00 1.300046e-03 8.600000e+00 1.300153e-03 9.100000e+00 1.300245e-03 9.600000e+00 1.300327e-03 1.010000e+01 1.300399e-03 1.060000e+01 1.300464e-03 1.110000e+01 1.300522e-03 1.160000e+01 1.300576e-03 1.210000e+01 1.300624e-03 1.260000e+01 1.300669e-03 1.310000e+01 1.300711e-03 1.360000e+01 1.300750e-03 1.410000e+01 1.300787e-03 1.460000e+01 1.300821e-03 1.510000e+01 1.300853e-03 1.560000e+01 1.300884e-03 1.610000e+01 1.300913e-03 1.660000e+01 1.300940e-03 1.710000e+01 1.300967e-03 1.760000e+01 1.300992e-03 1.810000e+01 1.301016e-03 1.860000e+01 1.301040e-03 1.910000e+01 1.301062e-03 1.960000e+01 1.301084e-03 2.010000e+01 1.301104e-03 2.060000e+01 1.301125e-03 2.110000e+01 1.301144e-03 2.160000e+01 1.301163e-03 2.210000e+01 1.301182e-03 2.260000e+01 1.301199e-03 2.310000e+01 1.301217e-03 2.360000e+01 1.301234e-03 2.410000e+01 1.301250e-03 2.460000e+01 1.301267e-03 2.510000e+01 1.301282e-03 2.560000e+01 1.301298e-03 2.610000e+01 1.301313e-03 2.660000e+01 1.301328e-03 2.710000e+01 1.301342e-03 2.760000e+01 1.301356e-03 2.810000e+01 1.301370e-03 2.860000e+01 1.301384e-03 2.910000e+01 1.301397e-03 2.960000e+01 1.301411e-03 3.010000e+01 1.301424e-03 1.000000e-01 2.877883e-05 6.000000e-01 1.718631e-04 1.100000e+00 3.136231e-04 1.600000e+00 4.540772e-04 2.100000e+00 5.932282e-04 2.600000e+00 7.310664e-04 3.100000e+00 8.675715e-04 3.600000e+00 1.002714e-03 4.100000e+00 1.136455e-03 4.600000e+00 1.268746e-03 5.100000e+00 1.399529e-03 5.600000e+00 1.528734e-03 6.100000e+00 1.656281e-03 6.600000e+00 1.782072e-03 7.100000e+00 1.905995e-03 7.600000e+00 2.027914e-03 8.100000e+00 2.147670e-03 8.600000e+00 2.265070e-03 9.100000e+00 2.379884e-03 9.600000e+00 2.491833e-03 1.010000e+01 2.600575e-03 1.060000e+01 2.705694e-03 1.110000e+01 2.806678e-03 1.160000e+01 2.902901e-03 1.210000e+01 2.993604e-03 1.260000e+01 3.077879e-03 1.310000e+01 3.154676e-03 1.360000e+01 3.222849e-03 1.410000e+01 3.281272e-03 1.460000e+01 3.329052e-03 1.510000e+01 3.365815e-03 1.560000e+01 3.391983e-03 1.610000e+01 3.408857e-03 1.660000e+01 3.418378e-03 1.710000e+01 3.422537e-03 1.760000e+01 3.423470e-03 1.810000e+01 3.423919e-03 1.860000e+01 3.424322e-03 1.910000e+01 3.424694e-03 1.960000e+01 3.425039e-03 2.010000e+01 3.425358e-03 2.060000e+01 3.425656e-03 2.110000e+01 3.425934e-03 2.160000e+01 3.426194e-03 2.210000e+01 3.426439e-03 2.260000e+01 3.426668e-03 2.310000e+01 3.426885e-03 2.360000e+01 3.427090e-03 2.410000e+01 3.427283e-03 2.460000e+01 3.427467e-03 2.510000e+01 3.427641e-03 2.560000e+01 3.427806e-03 2.610000e+01 3.427964e-03 2.660000e+01 3.428115e-03 2.710000e+01 3.428258e-03 2.760000e+01 3.428396e-03 2.810000e+01 3.428527e-03 2.860000e+01 3.428653e-03 2.910000e+01 3.428774e-03 2.960000e+01 3.428891e-03 3.010000e+01 3.429003e-03 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/acVd_coadov.standard0000644000175000017500000000544213546075722024724 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 1 -9.653820e-05 3.498912e-03 5.454449476816e-13 6.91258687161306e-13 2 -1.417599e-04 3.305198e-03 5.73851355372759e-13 6.59117978459069e-13 3 -1.198608e-04 3.045730e-03 6.04567363689252e-13 6.20729668065266e-13 4 -9.023511e-06 2.692336e-03 6.38184572791258e-13 5.7266105505048e-13 5 2.200279e-04 2.215004e-03 6.75152282800427e-13 5.09272437887735e-13 6 5.908299e-04 1.606367e-03 7.12303992859414e-13 4.28024915889614e-13 7 1.064796e-03 9.515037e-04 7.40429600474545e-13 3.43162692912797e-13 8 1.505316e-03 4.271597e-04 7.53826404101788e-13 2.81067176100164e-13 9 1.796378e-03 1.284864e-04 7.57855805192766e-13 2.4334126588571e-13 10 1.939052e-03 3.734987e-06 7.47048402266615e-13 1.43284438794887e-13 11 1.939694e-03 3.207582e-06 7.36401499383919e-13 4.83275930849067e-14 12 1.940074e-03 2.917474e-06 7.34973598997309e-13 3.55612296283581e-14 13 1.940421e-03 2.674695e-06 7.34336398824784e-13 2.98010880687746e-14 14 1.940745e-03 2.464603e-06 7.33958098722358e-13 2.63429671324733e-14 15 1.941048e-03 2.281661e-06 7.33702098653045e-13 2.39739964910642e-14 16 1.941330e-03 2.122435e-06 7.33514998602387e-13 2.22210760164533e-14 17 1.941591e-03 1.983940e-06 7.33371298563479e-13 2.08564456469737e-14 18 1.941833e-03 1.863385e-06 7.33256798532478e-13 1.97550953487783e-14 19 1.942055e-03 1.758211e-06 7.33163398507189e-13 1.8841975101547e-14 20 1.942261e-03 1.666139e-06 7.33085398486071e-13 1.80689248922403e-14 1 -2.946531e-05 2.928674e-03 5.40928846458845e-13 6.93288887710992e-13 2 -1.486847e-05 2.733831e-03 5.6919725411264e-13 6.61787179181766e-13 3 5.380981e-05 2.491192e-03 5.99953362439991e-13 6.23997268949983e-13 4 1.906559e-04 2.179939e-03 6.33826871611391e-13 5.76332856044636e-13 5 4.147623e-04 1.778362e-03 6.71413581788157e-13 5.12838438853245e-13 6 7.394491e-04 1.283359e-03 7.09624192133847e-13 4.30727816621436e-13 7 1.130471e-03 7.622733e-04 7.38978600081681e-13 3.44376193241357e-13 8 1.483538e-03 3.485889e-04 7.53171103924363e-13 2.80003775812244e-13 9 1.713743e-03 1.125635e-04 7.570648049786e-13 2.37285864246183e-13 10 1.830118e-03 9.992124e-06 7.4642350209742e-13 1.16739731607792e-13 11 1.839302e-03 2.630630e-06 7.39284800164586e-13 4.65326325989133e-14 12 1.839662e-03 2.385015e-06 7.38234899880321e-13 3.48941594477459e-14 13 1.839982e-03 2.184341e-06 7.37747299748301e-13 2.94341379694213e-14 14 1.840279e-03 2.011850e-06 7.3745289966859e-13 2.61045870679309e-14 15 1.840556e-03 1.862275e-06 7.37251699614115e-13 2.38041464450765e-14 16 1.840813e-03 1.732431e-06 7.37103599574016e-13 2.2092725981702e-14 17 1.841051e-03 1.619673e-06 7.36989299543069e-13 2.07554256196221e-14 18 1.841271e-03 1.521613e-06 7.36897799518295e-13 1.96731953266035e-14 19 1.841475e-03 1.436104e-06 7.36822699497961e-13 1.87740550831573e-14 20 1.841663e-03 1.361260e-06 7.36759899480958e-13 1.80115848767152e-14 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_gidl.standard0000644000175000017500000001605713546075722024417 0ustar carstencarstenV(d) I(d) I(b) 1.000000e+00 1.219562e-03 -1.012500e-15 2.000000e+00 1.245328e-03 -2.012500e-15 3.000000e+00 1.245964e-03 -3.012500e-15 4.000000e+00 1.246417e-03 -1.096908e-14 5.000000e+00 1.246785e-03 -6.123311e-12 6.000000e+00 1.247105e-03 -1.777786e-10 7.000000e+00 1.247393e-03 -1.403499e-09 8.000000e+00 1.247660e-03 -5.818335e-09 9.000000e+00 1.247915e-03 -1.667394e-08 1.000000e+01 1.248164e-03 -3.784619e-08 1.100000e+01 1.248416e-03 -7.337137e-08 1.200000e+01 1.248675e-03 -1.271412e-07 1.300000e+01 1.248947e-03 -2.027423e-07 1.400000e+01 1.249236e-03 -3.033932e-07 1.500000e+01 1.249545e-03 -4.319363e-07 1.600000e+01 1.249879e-03 -5.908598e-07 1.700000e+01 1.250239e-03 -7.823312e-07 1.800000e+01 1.250628e-03 -1.008235e-06 1.900000e+01 1.251049e-03 -1.270210e-06 2.000000e+01 1.251503e-03 -1.569681e-06 1.000000e+00 3.464524e-03 -1.012500e-15 2.000000e+00 6.120070e-03 -2.012500e-15 3.000000e+00 7.710222e-03 -3.012500e-15 4.000000e+00 8.139444e-03 -4.012500e-15 5.000000e+00 8.144155e-03 -5.012500e-15 6.000000e+00 8.146505e-03 -6.012500e-15 7.000000e+00 8.148460e-03 -7.023017e-15 8.000000e+00 8.150127e-03 -5.129734e-13 9.000000e+00 8.151581e-03 -4.579810e-11 1.000000e+01 8.152878e-03 -5.872148e-10 1.100000e+01 8.154057e-03 -3.138530e-09 1.200000e+01 8.155147e-03 -1.046029e-08 1.300000e+01 8.156171e-03 -2.618110e-08 1.400000e+01 8.157147e-03 -5.429292e-08 1.500000e+01 8.158088e-03 -9.876944e-08 1.600000e+01 8.159006e-03 -1.633433e-07 1.700000e+01 8.159910e-03 -2.514026e-07 1.800000e+01 8.160808e-03 -3.659602e-07 1.900000e+01 8.161706e-03 -5.096644e-07 2.000000e+01 8.162610e-03 -6.848271e-07 1.000000e+00 3.579611e-03 -1.012500e-15 2.000000e+00 6.985987e-03 -2.012500e-15 3.000000e+00 1.016807e-02 -3.012500e-15 4.000000e+00 1.304619e-02 -4.012500e-15 5.000000e+00 1.551127e-02 -5.012500e-15 6.000000e+00 1.743135e-02 -6.012500e-15 7.000000e+00 1.870718e-02 -7.012500e-15 8.000000e+00 1.937902e-02 -8.012500e-15 9.000000e+00 1.963869e-02 -9.012500e-15 1.000000e+01 1.968881e-02 -1.001250e-14 1.100000e+01 1.969220e-02 -1.101250e-14 1.200000e+01 1.969526e-02 -1.201250e-14 1.300000e+01 1.969805e-02 -1.305508e-14 1.400000e+01 1.970062e-02 -8.010807e-13 1.500000e+01 1.970299e-02 -5.649688e-11 1.600000e+01 1.970519e-02 -6.613629e-10 1.700000e+01 1.970724e-02 -3.381205e-09 1.800000e+01 1.970917e-02 -1.099192e-08 1.900000e+01 1.971100e-02 -2.709367e-08 2.000000e+01 1.971274e-02 -5.562273e-08 1.000000e+00 1.499015e-03 -1.000000e-15 2.000000e+00 1.510863e-03 -2.000000e-15 3.000000e+00 1.511642e-03 -3.000000e-15 4.000000e+00 1.512199e-03 -1.064531e-14 5.000000e+00 1.512653e-03 -6.002018e-12 6.000000e+00 1.513047e-03 -1.757366e-10 7.000000e+00 1.513402e-03 -1.392748e-09 8.000000e+00 1.513731e-03 -5.785945e-09 9.000000e+00 1.514044e-03 -1.660247e-08 1.000000e+01 1.514347e-03 -3.771604e-08 1.100000e+01 1.514650e-03 -7.316256e-08 1.200000e+01 1.514958e-03 -1.268345e-07 1.300000e+01 1.515277e-03 -2.023199e-07 1.400000e+01 1.515610e-03 -3.028386e-07 1.500000e+01 1.515963e-03 -4.312347e-07 1.600000e+01 1.516338e-03 -5.899979e-07 1.700000e+01 1.516738e-03 -7.812968e-07 1.800000e+01 1.517166e-03 -1.007017e-06 1.900000e+01 1.517625e-03 -1.268799e-06 2.000000e+01 1.518116e-03 -1.568068e-06 1.000000e+00 4.248126e-03 -1.000000e-15 2.000000e+00 7.549798e-03 -2.000000e-15 3.000000e+00 9.536079e-03 -3.000000e-15 4.000000e+00 1.004246e-02 -4.000000e-15 5.000000e+00 1.004628e-02 -5.000000e-15 6.000000e+00 1.004918e-02 -6.000000e-15 7.000000e+00 1.005160e-02 -7.004729e-15 8.000000e+00 1.005366e-02 -3.929398e-13 9.000000e+00 1.005546e-02 -3.978018e-11 1.000000e+01 1.005706e-02 -5.374358e-10 1.100000e+01 1.005851e-02 -2.949595e-09 1.200000e+01 1.005986e-02 -9.983378e-09 1.300000e+01 1.006112e-02 -2.523476e-08 1.400000e+01 1.006231e-02 -5.268335e-08 1.500000e+01 1.006346e-02 -9.630440e-08 1.600000e+01 1.006458e-02 -1.598400e-07 1.700000e+01 1.006567e-02 -2.466911e-07 1.800000e+01 1.006675e-02 -3.598849e-07 1.900000e+01 1.006783e-02 -5.020833e-07 2.000000e+01 1.006890e-02 -6.756111e-07 1.000000e+00 3.983013e-03 -1.000000e-15 2.000000e+00 7.806471e-03 -2.000000e-15 3.000000e+00 1.140870e-02 -3.000000e-15 4.000000e+00 1.469338e-02 -4.000000e-15 5.000000e+00 1.752827e-02 -5.000000e-15 6.000000e+00 1.975191e-02 -6.000000e-15 7.000000e+00 2.123761e-02 -7.000000e-15 8.000000e+00 2.202156e-02 -8.000000e-15 9.000000e+00 2.232269e-02 -9.000000e-15 1.000000e+01 2.237325e-02 -1.000000e-14 1.100000e+01 2.237708e-02 -1.100000e-14 1.200000e+01 2.238056e-02 -1.200000e-14 1.300000e+01 2.238375e-02 -1.300819e-14 1.400000e+01 2.238668e-02 -4.515469e-13 1.500000e+01 2.238938e-02 -4.138168e-11 1.600000e+01 2.239189e-02 -5.423095e-10 1.700000e+01 2.239423e-02 -2.937962e-09 1.800000e+01 2.239643e-02 -9.881598e-09 1.900000e+01 2.239850e-02 -2.489551e-08 2.000000e+01 2.240048e-02 -5.188245e-08 1.000000e+00 9.592475e-04 -1.619318e-11 2.000000e+00 1.013486e-03 -1.619418e-11 3.000000e+00 1.013994e-03 -1.619518e-11 4.000000e+00 1.014354e-03 -1.620342e-11 5.000000e+00 1.014645e-03 -2.242208e-11 6.000000e+00 1.014897e-03 -1.957527e-10 7.000000e+00 1.015124e-03 -1.429042e-09 8.000000e+00 1.015335e-03 -5.862650e-09 9.000000e+00 1.015537e-03 -1.675211e-08 1.000000e+01 1.015738e-03 -3.797518e-08 1.100000e+01 1.015943e-03 -7.356843e-08 1.200000e+01 1.016158e-03 -1.274229e-07 1.300000e+01 1.016387e-03 -2.031242e-07 1.400000e+01 1.016635e-03 -3.038893e-07 1.500000e+01 1.016905e-03 -4.325595e-07 1.600000e+01 1.017201e-03 -5.916216e-07 1.700000e+01 1.017524e-03 -7.832420e-07 1.800000e+01 1.017878e-03 -1.009304e-06 1.900000e+01 1.018265e-03 -1.271446e-06 2.000000e+01 1.018685e-03 -1.571092e-06 1.000000e+00 2.600841e-03 -1.619318e-11 2.000000e+00 4.571814e-03 -1.619418e-11 3.000000e+00 5.763391e-03 -1.619518e-11 4.000000e+00 6.127568e-03 -1.619618e-11 5.000000e+00 6.139122e-03 -1.619718e-11 6.000000e+00 6.140888e-03 -1.619818e-11 7.000000e+00 6.142352e-03 -1.619920e-11 8.000000e+00 6.143599e-03 -1.685593e-11 9.000000e+00 6.144687e-03 -6.871342e-11 1.000000e+01 6.145658e-03 -6.564961e-10 1.100000e+01 6.146541e-03 -3.351583e-09 1.200000e+01 6.147359e-03 -1.096673e-08 1.300000e+01 6.148130e-03 -2.716174e-08 1.400000e+01 6.148867e-03 -5.593975e-08 1.500000e+01 6.149583e-03 -1.012721e-07 1.600000e+01 6.150287e-03 -1.668817e-07 1.700000e+01 6.150987e-03 -2.561432e-07 1.800000e+01 6.151689e-03 -3.720556e-07 1.900000e+01 6.152398e-03 -5.172529e-07 2.000000e+01 6.153120e-03 -6.940345e-07 1.000000e+00 3.015007e-03 -1.619318e-11 2.000000e+00 5.849386e-03 -1.619418e-11 3.000000e+00 8.466723e-03 -1.619518e-11 4.000000e+00 1.080893e-02 -1.619618e-11 5.000000e+00 1.279635e-02 -1.619718e-11 6.000000e+00 1.433369e-02 -1.619818e-11 7.000000e+00 1.535335e-02 -1.619918e-11 8.000000e+00 1.589493e-02 -1.620018e-11 9.000000e+00 1.611120e-02 -1.620118e-11 1.000000e+01 1.616483e-02 -1.620218e-11 1.100000e+01 1.616851e-02 -1.620318e-11 1.200000e+01 1.617101e-02 -1.620418e-11 1.300000e+01 1.617329e-02 -1.620542e-11 1.400000e+01 1.617539e-02 -1.772339e-11 1.500000e+01 1.617732e-02 -9.686193e-11 1.600000e+01 1.617912e-02 -8.483780e-10 1.700000e+01 1.618080e-02 -3.999258e-09 1.800000e+01 1.618238e-02 -1.246800e-08 1.900000e+01 1.618387e-02 -2.994092e-08 2.000000e+01 1.618530e-02 -6.038797e-08 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_lg2.standard0000644000175000017500000001112213546075722024150 0ustar carstencarstenV(g) I(d) 1.000000e+00 1.234775e-05 2.000000e+00 1.245329e-04 3.000000e+00 3.198091e-04 4.000000e+00 5.013415e-04 5.000000e+00 6.122624e-04 6.000000e+00 6.739473e-04 7.000000e+00 7.038963e-04 8.000000e+00 7.135119e-04 9.000000e+00 7.102156e-04 1.000000e+01 6.988599e-04 1.100000e+01 6.826260e-04 1.200000e+01 6.636012e-04 1.300000e+01 6.431527e-04 1.400000e+01 6.221719e-04 1.500000e+01 6.012338e-04 1.600000e+01 5.807027e-04 1.700000e+01 5.608025e-04 1.800000e+01 5.416629e-04 1.900000e+01 5.233513e-04 2.000000e+01 5.058937e-04 1.000000e+00 1.236324e-05 2.000000e+00 1.246785e-04 3.000000e+00 3.206481e-04 4.000000e+00 5.595055e-04 5.000000e+00 8.144164e-04 6.000000e+00 1.068989e-03 7.000000e+00 1.284719e-03 8.000000e+00 1.430157e-03 9.000000e+00 1.513694e-03 1.000000e+01 1.552734e-03 1.100000e+01 1.561817e-03 1.200000e+01 1.551144e-03 1.300000e+01 1.527646e-03 1.400000e+01 1.496028e-03 1.500000e+01 1.459493e-03 1.600000e+01 1.420230e-03 1.700000e+01 1.379726e-03 1.800000e+01 1.338993e-03 1.900000e+01 1.298705e-03 2.000000e+01 1.259307e-03 1.000000e+00 1.238021e-05 2.000000e+00 1.248127e-04 3.000000e+00 3.209684e-04 4.000000e+00 5.600749e-04 5.000000e+00 8.152883e-04 6.000000e+00 1.070539e-03 7.000000e+00 1.316864e-03 8.000000e+00 1.549715e-03 9.000000e+00 1.767187e-03 1.000000e+01 1.968894e-03 1.100000e+01 2.149219e-03 1.200000e+01 2.295494e-03 1.300000e+01 2.404214e-03 1.400000e+01 2.475648e-03 1.500000e+01 2.513923e-03 1.600000e+01 2.525096e-03 1.700000e+01 2.515400e-03 1.800000e+01 2.490304e-03 1.900000e+01 2.454227e-03 2.000000e+01 2.410586e-03 1.000000e+00 9.643440e-06 2.000000e+00 1.510863e-04 3.000000e+00 4.044882e-04 4.000000e+00 6.334147e-04 5.000000e+00 7.554410e-04 6.000000e+00 8.106968e-04 7.000000e+00 8.275668e-04 8.000000e+00 8.224811e-04 9.000000e+00 8.050558e-04 1.000000e+01 7.809897e-04 1.100000e+01 7.536840e-04 1.200000e+01 7.251701e-04 1.300000e+01 6.966513e-04 1.400000e+01 6.688260e-04 1.500000e+01 6.420826e-04 1.600000e+01 6.166187e-04 1.700000e+01 5.925146e-04 1.800000e+01 5.697799e-04 1.900000e+01 5.483818e-04 2.000000e+01 5.282634e-04 1.000000e+00 9.656012e-06 2.000000e+00 1.512653e-04 3.000000e+00 4.050693e-04 4.000000e+00 7.022537e-04 5.000000e+00 1.004630e-03 6.000000e+00 1.293860e-03 7.000000e+00 1.527258e-03 8.000000e+00 1.669212e-03 9.000000e+00 1.736884e-03 1.000000e+01 1.755068e-03 1.100000e+01 1.742406e-03 1.200000e+01 1.711050e-03 1.300000e+01 1.668738e-03 1.400000e+01 1.620413e-03 1.500000e+01 1.569238e-03 1.600000e+01 1.517237e-03 1.700000e+01 1.465689e-03 1.800000e+01 1.415388e-03 1.900000e+01 1.366808e-03 2.000000e+01 1.320211e-03 1.000000e+00 9.669875e-06 2.000000e+00 1.514310e-04 3.000000e+00 4.054768e-04 4.000000e+00 7.029702e-04 5.000000e+00 1.005707e-03 6.000000e+00 1.295396e-03 7.000000e+00 1.564441e-03 8.000000e+00 1.810653e-03 9.000000e+00 2.034437e-03 1.000000e+01 2.237343e-03 1.100000e+01 2.415235e-03 1.200000e+01 2.553335e-03 1.300000e+01 2.649588e-03 1.400000e+01 2.705544e-03 1.500000e+01 2.726697e-03 1.600000e+01 2.720280e-03 1.700000e+01 2.693373e-03 1.800000e+01 2.651974e-03 1.900000e+01 2.600786e-03 2.000000e+01 2.543339e-03 1.000000e+00 1.653492e-05 2.000000e+00 1.013486e-04 3.000000e+00 2.397219e-04 4.000000e+00 3.681724e-04 5.000000e+00 4.572981e-04 6.000000e+00 5.160636e-04 7.000000e+00 5.528476e-04 8.000000e+00 5.738131e-04 9.000000e+00 5.834685e-04 1.000000e+01 5.851090e-04 1.100000e+01 5.811368e-04 1.200000e+01 5.732980e-04 1.300000e+01 5.628580e-04 1.400000e+01 5.507307e-04 1.500000e+01 5.375744e-04 1.600000e+01 5.238607e-04 1.700000e+01 5.099255e-04 1.800000e+01 4.960059e-04 1.900000e+01 4.822673e-04 2.000000e+01 4.688226e-04 1.000000e+00 1.655442e-05 2.000000e+00 1.014645e-04 3.000000e+00 2.418745e-04 4.000000e+00 4.177923e-04 5.000000e+00 6.139127e-04 6.000000e+00 8.180405e-04 7.000000e+00 9.991431e-04 8.000000e+00 1.134212e-03 9.000000e+00 1.224850e-03 1.000000e+01 1.280601e-03 1.100000e+01 1.310686e-03 1.200000e+01 1.322230e-03 1.300000e+01 1.320486e-03 1.400000e+01 1.309301e-03 1.500000e+01 1.291500e-03 1.600000e+01 1.269159e-03 1.700000e+01 1.243803e-03 1.800000e+01 1.216555e-03 1.900000e+01 1.188236e-03 2.000000e+01 1.159447e-03 1.000000e+00 1.657551e-05 2.000000e+00 1.015700e-04 3.000000e+00 2.421119e-04 4.000000e+00 4.182131e-04 5.000000e+00 6.145660e-04 6.000000e+00 8.201340e-04 7.000000e+00 1.027292e-03 8.000000e+00 1.230991e-03 9.000000e+00 1.428045e-03 1.000000e+01 1.616506e-03 1.100000e+01 1.789136e-03 1.200000e+01 1.936486e-03 1.300000e+01 2.053737e-03 1.400000e+01 2.139652e-03 1.500000e+01 2.196471e-03 1.600000e+01 2.228446e-03 1.700000e+01 2.240369e-03 1.800000e+01 2.236695e-03 1.900000e+01 2.221197e-03 2.000000e+01 2.196918e-03 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_corsrd1.standard0000644000175000017500000001112213546075722025041 0ustar carstencarstenV(d) I(d) 1.000000e+00 1.560163e-04 2.000000e+00 1.842786e-04 3.000000e+00 1.842969e-04 4.000000e+00 1.843089e-04 5.000000e+00 1.843183e-04 6.000000e+00 1.843264e-04 7.000000e+00 1.843336e-04 8.000000e+00 1.843401e-04 9.000000e+00 1.843462e-04 1.000000e+01 1.843519e-04 1.100000e+01 1.843572e-04 1.200000e+01 1.843623e-04 1.300000e+01 1.843671e-04 1.400000e+01 1.843717e-04 1.500000e+01 1.843762e-04 1.600000e+01 1.843805e-04 1.700000e+01 1.843846e-04 1.800000e+01 1.843886e-04 1.900000e+01 1.843925e-04 2.000000e+01 1.843963e-04 1.000000e+00 2.344131e-04 2.000000e+00 4.555884e-04 3.000000e+00 6.589428e-04 4.000000e+00 8.353988e-04 5.000000e+00 9.639406e-04 6.000000e+00 1.002492e-03 7.000000e+00 1.002556e-03 8.000000e+00 1.002602e-03 9.000000e+00 1.002640e-03 1.000000e+01 1.002671e-03 1.100000e+01 1.002698e-03 1.200000e+01 1.002722e-03 1.300000e+01 1.002744e-03 1.400000e+01 1.002764e-03 1.500000e+01 1.002783e-03 1.600000e+01 1.002801e-03 1.700000e+01 1.002818e-03 1.800000e+01 1.002834e-03 1.900000e+01 1.002849e-03 2.000000e+01 1.002864e-03 1.000000e+00 2.346478e-04 2.000000e+00 4.657617e-04 3.000000e+00 6.933105e-04 4.000000e+00 9.170145e-04 5.000000e+00 1.136379e-03 6.000000e+00 1.350667e-03 7.000000e+00 1.558833e-03 8.000000e+00 1.759367e-03 9.000000e+00 1.950016e-03 1.000000e+01 2.127211e-03 1.100000e+01 2.284872e-03 1.200000e+01 2.412256e-03 1.300000e+01 2.493427e-03 1.400000e+01 2.521410e-03 1.500000e+01 2.522214e-03 1.600000e+01 2.522295e-03 1.700000e+01 2.522366e-03 1.800000e+01 2.522429e-03 1.900000e+01 2.522486e-03 2.000000e+01 2.522537e-03 1.000000e+00 1.758505e-04 2.000000e+00 2.060159e-04 3.000000e+00 2.060358e-04 4.000000e+00 2.060487e-04 5.000000e+00 2.060588e-04 6.000000e+00 2.060675e-04 7.000000e+00 2.060753e-04 8.000000e+00 2.060824e-04 9.000000e+00 2.060889e-04 1.000000e+01 2.060950e-04 1.100000e+01 2.061008e-04 1.200000e+01 2.061062e-04 1.300000e+01 2.061115e-04 1.400000e+01 2.061164e-04 1.500000e+01 2.061212e-04 1.600000e+01 2.061259e-04 1.700000e+01 2.061303e-04 1.800000e+01 2.061347e-04 1.900000e+01 2.061389e-04 2.000000e+01 2.061430e-04 1.000000e+00 2.488122e-04 2.000000e+00 4.865324e-04 3.000000e+00 7.092498e-04 4.000000e+00 9.091819e-04 5.000000e+00 1.068388e-03 6.000000e+00 1.137962e-03 7.000000e+00 1.138213e-03 8.000000e+00 1.138267e-03 9.000000e+00 1.138310e-03 1.000000e+01 1.138345e-03 1.100000e+01 1.138375e-03 1.200000e+01 1.138402e-03 1.300000e+01 1.138426e-03 1.400000e+01 1.138449e-03 1.500000e+01 1.138469e-03 1.600000e+01 1.138489e-03 1.700000e+01 1.138508e-03 1.800000e+01 1.138525e-03 1.900000e+01 1.138542e-03 2.000000e+01 1.138559e-03 1.000000e+00 2.421843e-04 2.000000e+00 4.813894e-04 3.000000e+00 7.176391e-04 4.000000e+00 9.507360e-04 5.000000e+00 1.180296e-03 6.000000e+00 1.405733e-03 7.000000e+00 1.626208e-03 8.000000e+00 1.840519e-03 9.000000e+00 2.046898e-03 1.000000e+01 2.242604e-03 1.100000e+01 2.423056e-03 1.200000e+01 2.579963e-03 1.300000e+01 2.698130e-03 1.400000e+01 2.758174e-03 1.500000e+01 2.765975e-03 1.600000e+01 2.766071e-03 1.700000e+01 2.766154e-03 1.800000e+01 2.766227e-03 1.900000e+01 2.766291e-03 2.000000e+01 2.766349e-03 1.000000e+00 1.335101e-04 2.000000e+00 1.628069e-04 3.000000e+00 1.628236e-04 4.000000e+00 1.628345e-04 5.000000e+00 1.628430e-04 6.000000e+00 1.628503e-04 7.000000e+00 1.628568e-04 8.000000e+00 1.628628e-04 9.000000e+00 1.628682e-04 1.000000e+01 1.628733e-04 1.100000e+01 1.628782e-04 1.200000e+01 1.628827e-04 1.300000e+01 1.628871e-04 1.400000e+01 1.628912e-04 1.500000e+01 1.628953e-04 1.600000e+01 1.628991e-04 1.700000e+01 1.629028e-04 1.800000e+01 1.629064e-04 1.900000e+01 1.629100e-04 2.000000e+01 1.629134e-04 1.000000e+00 2.122191e-04 2.000000e+00 4.086269e-04 3.000000e+00 5.841211e-04 4.000000e+00 7.286575e-04 5.000000e+00 8.201859e-04 6.000000e+00 8.379271e-04 7.000000e+00 8.379773e-04 8.000000e+00 8.380152e-04 9.000000e+00 8.380461e-04 1.000000e+01 8.380723e-04 1.100000e+01 8.380952e-04 1.200000e+01 8.381157e-04 1.300000e+01 8.381345e-04 1.400000e+01 8.381520e-04 1.500000e+01 8.381683e-04 1.600000e+01 8.381837e-04 1.700000e+01 8.381984e-04 1.800000e+01 8.382124e-04 1.900000e+01 8.382258e-04 2.000000e+01 8.382387e-04 1.000000e+00 2.218687e-04 2.000000e+00 4.393353e-04 3.000000e+00 6.522981e-04 4.000000e+00 8.603610e-04 5.000000e+00 1.062868e-03 6.000000e+00 1.258864e-03 7.000000e+00 1.446987e-03 8.000000e+00 1.625252e-03 9.000000e+00 1.790630e-03 1.000000e+01 1.938219e-03 1.100000e+01 2.059879e-03 1.200000e+01 2.143877e-03 1.300000e+01 2.183053e-03 1.400000e+01 2.190138e-03 1.500000e+01 2.190226e-03 1.600000e+01 2.190291e-03 1.700000e+01 2.190348e-03 1.800000e+01 2.190400e-03 1.900000e+01 2.190447e-03 2.000000e+01 2.190490e-03 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/acFreq.standard0000644000175000017500000000713113546075722023712 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 4.55059951316868e-13 3.98419731014381e-13 1.23478755132922e-13 1258.925 4.55060066101093e-13 3.98419907482722e-13 1.23478787230343e-13 1584.893 4.55059923920486e-13 3.98419834739697e-13 1.23478732374669e-13 1995.262 4.55059952336921e-13 3.98419798704978e-13 1.23478765458384e-13 2511.886 4.55059966508491e-13 3.98419841346329e-13 1.23478794223238e-13 3162.278 4.55059826660079e-13 3.98419740078168e-13 1.2347873262106e-13 3981.072 4.55059768606939e-13 3.98419743573841e-13 1.23478735049107e-13 5011.872 4.55059801078894e-13 3.98419898943012e-13 1.23478746517859e-13 6309.573 4.55059820894363e-13 3.98419780916111e-13 1.23478768114318e-13 7943.282 4.55059982979783e-13 3.98419825620551e-13 1.23478752877786e-13 10000 4.55059951316868e-13 3.98419731014381e-13 1.23478755132922e-13 12589.25 4.55060066101093e-13 3.98419907482722e-13 1.23478787230343e-13 15848.93 4.55059923920486e-13 3.98419834739697e-13 1.23478732374669e-13 19952.62 4.55059952336921e-13 3.98419798704978e-13 1.23478765458384e-13 25118.86 4.55059966508491e-13 3.98419841346329e-13 1.23478794223238e-13 31622.78 4.55059826660079e-13 3.98419740078168e-13 1.2347873262106e-13 39810.72 4.55059768606939e-13 3.98419743573841e-13 1.23478735049107e-13 50118.72 4.55059801078894e-13 3.98419898943012e-13 1.23478746517859e-13 63095.73 4.55059820894363e-13 3.98419780916111e-13 1.23478768114318e-13 79432.82 4.55059982979783e-13 3.98419825620551e-13 1.23478752877786e-13 100000 4.55059951316868e-13 3.98419731014381e-13 1.23478755132922e-13 125892.5 4.55060066101093e-13 3.98419907482722e-13 1.23478787230343e-13 158489.3 4.55059923920486e-13 3.98419834739697e-13 1.23478732374669e-13 199526.2 4.55059952336921e-13 3.98419798704978e-13 1.23478765458384e-13 251188.6 4.55059966508491e-13 3.98419841346329e-13 1.23478794223238e-13 316227.8 4.55059826660079e-13 3.98419740078168e-13 1.2347873262106e-13 398107.2 4.55059768606939e-13 3.98419743573841e-13 1.23478735049107e-13 501187.2 4.55059801078894e-13 3.98419898943012e-13 1.23478746517859e-13 630957.3 4.55059820894363e-13 3.98419780916111e-13 1.23478742889958e-13 794328.2 4.55059982979783e-13 3.98419825620551e-13 1.23478752877787e-13 1000000 4.55059951316868e-13 3.98419731014381e-13 1.23478739217427e-13 1258925 4.55060066101093e-13 3.98419907482722e-13 1.23478787230343e-13 1584893 4.55059923920486e-13 3.98419834739697e-13 1.23478732374669e-13 1995262 4.55059952336921e-13 3.98419798704978e-13 1.23478765458384e-13 2511886 4.55059903147756e-13 3.98419777985594e-13 1.23478730862504e-13 3162278 4.55059776330872e-13 3.98419689748961e-13 1.2347873262106e-13 3981072 4.55059768606939e-13 3.98419663618019e-13 1.23478695071195e-13 5011872 4.55059801078894e-13 3.9841958138713e-13 1.23478714762271e-13 6309573 4.55059820894363e-13 3.98419528672508e-13 1.23478667216877e-13 7943282 4.55059582251361e-13 3.98419424892129e-13 1.2347863265926e-13 10000000 4.55059314697095e-13 3.98419253549551e-13 1.23478548231496e-13 12589250 4.55059181151948e-13 3.98419148954884e-13 1.23478483819208e-13 15848930 4.55058618460584e-13 3.98418629699788e-13 1.23478230274706e-13 19952620 4.55057798643088e-13 3.9841788431046e-13 1.23477967794002e-13 25118860 4.55056545028803e-13 3.98416800031051e-13 1.23477527008539e-13 31622780 4.55054441434963e-13 3.98414908474325e-13 1.23476769781999e-13 39810720 4.55051373245577e-13 3.98412107792793e-13 1.23475616772029e-13 50118720 4.55046463731871e-13 3.98407831819515e-13 1.23473824401696e-13 63095730 4.55038380188054e-13 3.98400610402235e-13 1.23470973786966e-13 79432820 4.55025720699697e-13 3.98389370260474e-13 1.23466410442387e-13 100000000 4.55005838636216e-13 3.98371666221567e-13 1.23459179074921e-13 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_she.standard0000644000175000017500000001112213546075722024243 0ustar carstencarstenV(d) I(d) 1.000000e+00 1.866494e-03 2.000000e+00 1.924148e-03 3.000000e+00 1.927444e-03 4.000000e+00 1.929689e-03 5.000000e+00 1.931444e-03 6.000000e+00 1.932914e-03 7.000000e+00 1.934194e-03 8.000000e+00 1.935334e-03 9.000000e+00 1.936366e-03 1.000000e+01 1.937310e-03 1.100000e+01 1.938181e-03 1.200000e+01 1.938991e-03 1.300000e+01 1.939747e-03 1.400000e+01 1.940456e-03 1.500000e+01 1.941125e-03 1.600000e+01 1.941756e-03 1.700000e+01 1.942354e-03 1.800000e+01 1.942923e-03 1.900000e+01 1.943463e-03 2.000000e+01 1.943979e-03 1.000000e+00 4.961818e-03 2.000000e+00 8.455810e-03 3.000000e+00 1.050508e-02 4.000000e+00 1.127260e-02 5.000000e+00 1.132307e-02 6.000000e+00 1.131992e-02 7.000000e+00 1.131518e-02 8.000000e+00 1.130921e-02 9.000000e+00 1.130233e-02 1.000000e+01 1.129477e-02 1.100000e+01 1.128671e-02 1.200000e+01 1.127826e-02 1.300000e+01 1.126952e-02 1.400000e+01 1.126054e-02 1.500000e+01 1.125138e-02 1.600000e+01 1.124207e-02 1.700000e+01 1.123263e-02 1.800000e+01 1.122308e-02 1.900000e+01 1.121346e-02 2.000000e+01 1.120376e-02 1.000000e+00 5.296610e-03 2.000000e+00 1.008038e-02 3.000000e+00 1.421916e-02 4.000000e+00 1.765056e-02 5.000000e+00 2.037551e-02 6.000000e+00 2.243958e-02 7.000000e+00 2.391852e-02 8.000000e+00 2.491036e-02 9.000000e+00 2.552716e-02 1.000000e+01 2.588076e-02 1.100000e+01 2.606656e-02 1.200000e+01 2.615406e-02 1.300000e+01 2.618752e-02 1.400000e+01 2.619220e-02 1.500000e+01 2.618094e-02 1.600000e+01 2.615990e-02 1.700000e+01 2.613576e-02 1.800000e+01 2.610982e-02 1.900000e+01 2.608280e-02 2.000000e+01 2.605514e-02 1.000000e+00 2.260984e-03 2.000000e+00 2.297451e-03 3.000000e+00 2.301053e-03 4.000000e+00 2.303424e-03 5.000000e+00 2.305221e-03 6.000000e+00 2.306686e-03 7.000000e+00 2.307928e-03 8.000000e+00 2.309006e-03 9.000000e+00 2.309956e-03 1.000000e+01 2.310804e-03 1.100000e+01 2.311566e-03 1.200000e+01 2.312256e-03 1.300000e+01 2.312884e-03 1.400000e+01 2.313456e-03 1.500000e+01 2.313980e-03 1.600000e+01 2.314461e-03 1.700000e+01 2.314903e-03 1.800000e+01 2.315310e-03 1.900000e+01 2.315685e-03 2.000000e+01 2.316030e-03 1.000000e+00 5.922035e-03 2.000000e+00 1.002647e-02 3.000000e+00 1.240244e-02 4.000000e+00 1.331117e-02 5.000000e+00 1.337202e-02 6.000000e+00 1.336375e-02 7.000000e+00 1.335371e-02 8.000000e+00 1.334233e-02 9.000000e+00 1.332994e-02 1.000000e+01 1.331681e-02 1.100000e+01 1.330314e-02 1.200000e+01 1.328907e-02 1.300000e+01 1.327469e-02 1.400000e+01 1.326007e-02 1.500000e+01 1.324527e-02 1.600000e+01 1.323033e-02 1.700000e+01 1.321528e-02 1.800000e+01 1.320014e-02 1.900000e+01 1.318493e-02 2.000000e+01 1.316967e-02 1.000000e+00 5.843474e-03 2.000000e+00 1.113286e-02 3.000000e+00 1.570590e-02 4.000000e+00 1.948785e-02 5.000000e+00 2.248355e-02 6.000000e+00 2.475271e-02 7.000000e+00 2.638872e-02 8.000000e+00 2.750449e-02 9.000000e+00 2.822064e-02 1.000000e+01 2.865215e-02 1.100000e+01 2.889584e-02 1.200000e+01 2.902367e-02 1.300000e+01 2.908349e-02 1.400000e+01 2.910454e-02 1.500000e+01 2.910357e-02 1.600000e+01 2.908939e-02 1.700000e+01 2.906546e-02 1.800000e+01 2.903802e-02 1.900000e+01 2.901032e-02 2.000000e+01 2.898146e-02 1.000000e+00 1.484410e-03 2.000000e+00 1.584462e-03 3.000000e+00 1.587334e-03 4.000000e+00 1.589326e-03 5.000000e+00 1.590910e-03 6.000000e+00 1.592258e-03 7.000000e+00 1.593448e-03 8.000000e+00 1.594523e-03 9.000000e+00 1.595509e-03 1.000000e+01 1.596422e-03 1.100000e+01 1.597276e-03 1.200000e+01 1.598080e-03 1.300000e+01 1.598840e-03 1.400000e+01 1.599561e-03 1.500000e+01 1.600250e-03 1.600000e+01 1.600908e-03 1.700000e+01 1.601539e-03 1.800000e+01 1.602145e-03 1.900000e+01 1.602730e-03 2.000000e+01 1.603293e-03 1.000000e+00 3.835099e-03 2.000000e+00 6.583490e-03 3.000000e+00 8.228910e-03 4.000000e+00 8.854854e-03 5.000000e+00 8.908952e-03 6.000000e+00 8.910343e-03 7.000000e+00 8.910358e-03 8.000000e+00 8.909347e-03 9.000000e+00 8.907570e-03 1.000000e+01 8.905222e-03 1.100000e+01 8.902441e-03 1.200000e+01 8.899325e-03 1.300000e+01 8.895945e-03 1.400000e+01 8.892352e-03 1.500000e+01 8.888584e-03 1.600000e+01 8.884669e-03 1.700000e+01 8.880631e-03 1.800000e+01 8.876488e-03 1.900000e+01 8.872252e-03 2.000000e+01 8.867937e-03 1.000000e+00 4.515224e-03 2.000000e+00 8.580209e-03 3.000000e+00 1.210144e-02 4.000000e+00 1.503256e-02 5.000000e+00 1.737015e-02 6.000000e+00 1.914207e-02 7.000000e+00 2.040128e-02 8.000000e+00 2.122600e-02 9.000000e+00 2.171634e-02 1.000000e+01 2.197835e-02 1.100000e+01 2.210269e-02 1.200000e+01 2.215265e-02 1.300000e+01 2.216544e-02 1.400000e+01 2.215952e-02 1.500000e+01 2.214279e-02 1.600000e+01 2.212370e-02 1.700000e+01 2.210405e-02 1.800000e+01 2.208399e-02 1.900000e+01 2.206363e-02 2.000000e+01 2.204301e-02 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/noise2.standard0000644000175000017500000000424413546075722023712 0ustar carstencarstenFreq N(d) 1000 4.307907e-20 1258.925 3.267882e-20 1584.893 2.478942e-20 1995.262 1.88047e-20 2511.886 1.426482e-20 3162.278 1.082097e-20 3981.072 8.208548e-21 5011.872 6.22682e-21 6309.573 4.723526e-21 7943.282 3.583161e-21 10000 2.718106e-21 12589.25 2.061894e-21 15848.93 1.564107e-21 19952.62 1.186496e-21 25118.86 9.000494e-22 31622.78 6.827573e-22 39810.72 5.179244e-22 50118.72 3.928858e-22 63095.73 2.980344e-22 79432.82 2.260822e-22 100000 1.715009e-22 125892.5 1.300967e-22 158489.3 9.868845e-23 199526.2 7.486285e-23 251188.6 5.678928e-23 316227.8 4.307907e-23 398107.2 3.267882e-23 501187.2 2.478942e-23 630957.3 1.88047e-23 794328.2 1.426482e-23 1000000 1.082097e-23 1258925 8.208548e-24 1584893 6.22682e-24 1995262 4.723526e-24 2511886 3.583161e-24 3162278 2.718106e-24 3981072 2.061894e-24 5011872 1.564107e-24 6309573 1.186496e-24 7943282 9.000494e-25 10000000 6.827573e-25 12589250 5.179244e-25 15848930 3.928858e-25 19952620 2.980344e-25 25118860 2.260822e-25 31622780 1.715009e-25 39810720 1.300967e-25 50118720 9.868845e-26 63095730 7.486285e-26 79432820 5.678928e-26 100000000 4.307907e-26 1000 1.329662e-19 1258.925 1.008652e-19 1584.893 7.651405e-20 1995.262 5.804184e-20 2511.886 4.402924e-20 3162.278 3.339959e-20 3981.072 2.533618e-20 5011.872 1.921946e-20 6309.573 1.457945e-20 7943.282 1.105965e-20 10000 8.389599e-21 12589.25 6.364162e-21 15848.93 4.82771e-21 19952.62 3.662193e-21 25118.86 2.778057e-21 31622.78 2.107372e-21 39810.72 1.598605e-21 50118.72 1.212666e-21 63095.73 9.199012e-22 79432.82 6.978164e-22 100000 5.293479e-22 125892.5 4.015514e-22 158489.3 3.046079e-22 199526.2 2.310687e-22 251188.6 1.752836e-22 316227.8 1.329662e-22 398107.2 1.008652e-22 501187.2 7.651405e-23 630957.3 5.804184e-23 794328.2 4.402924e-23 1000000 3.339959e-23 1258925 2.533618e-23 1584893 1.921946e-23 1995262 1.457945e-23 2511886 1.105965e-23 3162278 8.389599e-24 3981072 6.364162e-24 5011872 4.82771e-24 6309573 3.662193e-24 7943282 2.778057e-24 10000000 2.107372e-24 12589250 1.598605e-24 15848930 1.212666e-24 19952620 9.199012e-25 25118860 6.978164e-25 31622780 5.293479e-25 39810720 4.015514e-25 50118720 3.046079e-25 63095730 2.310687e-25 79432820 1.752836e-25 100000000 1.329662e-25 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/acVg_LOVER.standard0000644000175000017500000000263613546075722024345 0ustar carstencarstenV(g) g(d,g) g(d,d) c(g,s) c(g,d) 1 5.448464e-04 1.153056e-07 1.00725027271741e-12 1.95665752977356e-13 2 1.394689e-03 2.684818e-04 1.07560429122456e-12 7.34766098941128e-13 3 9.013171e-04 1.647675e-03 1.02812627836968e-12 1.02484527748133e-12 4 5.254266e-04 2.554898e-03 1.00434227193005e-12 1.08648629417091e-12 5 2.808369e-04 3.093604e-03 9.90195868099852e-13 1.11201530108299e-12 6 1.242080e-04 3.391742e-03 9.79295265148466e-13 1.12796530540153e-12 7 2.500045e-05 3.534611e-03 9.70091762656578e-13 1.14007930868145e-12 8 -3.689141e-05 3.577927e-03 9.62097860492194e-13 1.15007331138737e-12 9 -7.456598e-05 3.558086e-03 9.55100758597698e-13 1.15859531369474e-12 10 -9.653820e-05 3.498912e-03 9.48964156936187e-13 1.16596131568911e-12 1 4.965062e-04 1.533499e-07 1.00897427318419e-12 1.97832353563973e-13 2 8.898650e-04 3.343818e-04 1.05579528586118e-12 7.56552304839838e-13 3 6.357351e-04 1.224604e-03 1.00669727256768e-12 1.02291727695932e-12 4 4.304319e-04 1.866690e-03 9.85679066876908e-13 1.0883432946737e-12 5 2.799370e-04 2.304693e-03 9.73816563665084e-13 1.11674130236258e-12 6 1.708441e-04 2.593325e-03 9.6522566133906e-13 1.13355230691423e-12 7 9.247942e-05 2.773590e-03 9.58194959435466e-13 1.14545631013729e-12 8 3.676323e-05 2.875733e-03 9.52121957791175e-13 1.15479031266452e-12 9 -2.377506e-06 2.921996e-03 9.46759456339254e-13 1.16252431475853e-12 10 -2.946531e-05 2.928674e-03 9.41983655046185e-13 1.16912931654686e-12 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_Id1_vb0_jd.standard0000644000175000017500000001112213546075722025325 0ustar carstencarstenV(d) I(d) 1.000000e+00 1.219562e-03 2.000000e+00 1.245328e-03 3.000000e+00 1.245964e-03 4.000000e+00 1.246417e-03 5.000000e+00 1.246785e-03 6.000000e+00 1.247105e-03 7.000000e+00 1.247392e-03 8.000000e+00 1.247654e-03 9.000000e+00 1.247898e-03 1.000000e+01 1.248126e-03 1.100000e+01 1.248343e-03 1.200000e+01 1.248548e-03 1.300000e+01 1.248744e-03 1.400000e+01 1.248932e-03 1.500000e+01 1.249113e-03 1.600000e+01 1.249288e-03 1.700000e+01 1.249457e-03 1.800000e+01 1.249620e-03 1.900000e+01 1.249779e-03 2.000000e+01 1.249934e-03 1.000000e+00 3.464524e-03 2.000000e+00 6.120070e-03 3.000000e+00 7.710222e-03 4.000000e+00 8.139444e-03 5.000000e+00 8.144155e-03 6.000000e+00 8.146505e-03 7.000000e+00 8.148460e-03 8.000000e+00 8.150127e-03 9.000000e+00 8.151581e-03 1.000000e+01 8.152877e-03 1.100000e+01 8.154054e-03 1.200000e+01 8.155137e-03 1.300000e+01 8.156145e-03 1.400000e+01 8.157093e-03 1.500000e+01 8.157989e-03 1.600000e+01 8.158842e-03 1.700000e+01 8.159658e-03 1.800000e+01 8.160442e-03 1.900000e+01 8.161196e-03 2.000000e+01 8.161925e-03 1.000000e+00 3.579611e-03 2.000000e+00 6.985987e-03 3.000000e+00 1.016807e-02 4.000000e+00 1.304619e-02 5.000000e+00 1.551127e-02 6.000000e+00 1.743135e-02 7.000000e+00 1.870718e-02 8.000000e+00 1.937902e-02 9.000000e+00 1.963869e-02 1.000000e+01 1.968881e-02 1.100000e+01 1.969220e-02 1.200000e+01 1.969526e-02 1.300000e+01 1.969805e-02 1.400000e+01 1.970062e-02 1.500000e+01 1.970299e-02 1.600000e+01 1.970519e-02 1.700000e+01 1.970724e-02 1.800000e+01 1.970916e-02 1.900000e+01 1.971097e-02 2.000000e+01 1.971268e-02 1.000000e+00 1.499015e-03 2.000000e+00 1.510863e-03 3.000000e+00 1.511642e-03 4.000000e+00 1.512199e-03 5.000000e+00 1.512653e-03 6.000000e+00 1.513047e-03 7.000000e+00 1.513401e-03 8.000000e+00 1.513725e-03 9.000000e+00 1.514027e-03 1.000000e+01 1.514310e-03 1.100000e+01 1.514577e-03 1.200000e+01 1.514831e-03 1.300000e+01 1.515074e-03 1.400000e+01 1.515307e-03 1.500000e+01 1.515531e-03 1.600000e+01 1.515748e-03 1.700000e+01 1.515957e-03 1.800000e+01 1.516159e-03 1.900000e+01 1.516356e-03 2.000000e+01 1.516548e-03 1.000000e+00 4.248126e-03 2.000000e+00 7.549798e-03 3.000000e+00 9.536079e-03 4.000000e+00 1.004246e-02 5.000000e+00 1.004628e-02 6.000000e+00 1.004918e-02 7.000000e+00 1.005160e-02 8.000000e+00 1.005366e-02 9.000000e+00 1.005546e-02 1.000000e+01 1.005706e-02 1.100000e+01 1.005851e-02 1.200000e+01 1.005985e-02 1.300000e+01 1.006109e-02 1.400000e+01 1.006226e-02 1.500000e+01 1.006337e-02 1.600000e+01 1.006442e-02 1.700000e+01 1.006543e-02 1.800000e+01 1.006639e-02 1.900000e+01 1.006732e-02 2.000000e+01 1.006822e-02 1.000000e+00 3.983013e-03 2.000000e+00 7.806471e-03 3.000000e+00 1.140870e-02 4.000000e+00 1.469338e-02 5.000000e+00 1.752827e-02 6.000000e+00 1.975191e-02 7.000000e+00 2.123761e-02 8.000000e+00 2.202156e-02 9.000000e+00 2.232269e-02 1.000000e+01 2.237325e-02 1.100000e+01 2.237708e-02 1.200000e+01 2.238056e-02 1.300000e+01 2.238375e-02 1.400000e+01 2.238668e-02 1.500000e+01 2.238938e-02 1.600000e+01 2.239189e-02 1.700000e+01 2.239423e-02 1.800000e+01 2.239642e-02 1.900000e+01 2.239848e-02 2.000000e+01 2.240043e-02 1.000000e+00 9.592475e-04 2.000000e+00 1.013486e-03 3.000000e+00 1.013994e-03 4.000000e+00 1.014354e-03 5.000000e+00 1.014645e-03 6.000000e+00 1.014897e-03 7.000000e+00 1.015123e-03 8.000000e+00 1.015329e-03 9.000000e+00 1.015521e-03 1.000000e+01 1.015700e-03 1.100000e+01 1.015869e-03 1.200000e+01 1.016030e-03 1.300000e+01 1.016184e-03 1.400000e+01 1.016331e-03 1.500000e+01 1.016473e-03 1.600000e+01 1.016609e-03 1.700000e+01 1.016741e-03 1.800000e+01 1.016869e-03 1.900000e+01 1.016993e-03 2.000000e+01 1.017114e-03 1.000000e+00 2.600841e-03 2.000000e+00 4.571814e-03 3.000000e+00 5.763391e-03 4.000000e+00 6.127568e-03 5.000000e+00 6.139122e-03 6.000000e+00 6.140888e-03 7.000000e+00 6.142352e-03 8.000000e+00 6.143599e-03 9.000000e+00 6.144687e-03 1.000000e+01 6.145657e-03 1.100000e+01 6.146538e-03 1.200000e+01 6.147348e-03 1.300000e+01 6.148102e-03 1.400000e+01 6.148811e-03 1.500000e+01 6.149482e-03 1.600000e+01 6.150120e-03 1.700000e+01 6.150731e-03 1.800000e+01 6.151317e-03 1.900000e+01 6.151881e-03 2.000000e+01 6.152426e-03 1.000000e+00 3.015007e-03 2.000000e+00 5.849386e-03 3.000000e+00 8.466723e-03 4.000000e+00 1.080893e-02 5.000000e+00 1.279635e-02 6.000000e+00 1.433369e-02 7.000000e+00 1.535335e-02 8.000000e+00 1.589493e-02 9.000000e+00 1.611120e-02 1.000000e+01 1.616483e-02 1.100000e+01 1.616851e-02 1.200000e+01 1.617101e-02 1.300000e+01 1.617329e-02 1.400000e+01 1.617539e-02 1.500000e+01 1.617732e-02 1.600000e+01 1.617912e-02 1.700000e+01 1.618079e-02 1.800000e+01 1.618236e-02 1.900000e+01 1.618384e-02 2.000000e+01 1.618524e-02 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_NF_RTH0W.standard0000644000175000017500000000041613546075722024717 0ustar carstencarstenV(d) I(d) 1.000000e+00 3.538832e-03 3.000000e+00 9.202168e-03 5.000000e+00 1.229442e-02 7.000000e+00 1.316395e-02 9.000000e+00 1.276766e-02 1.100000e+01 1.209603e-02 1.300000e+01 1.149660e-02 1.500000e+01 1.098346e-02 1.700000e+01 1.053857e-02 1.900000e+01 1.015221e-02 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/acVd_rdrbb.standard0000644000175000017500000000545213546075722024545 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 1 -9.710717e-05 3.505200e-03 5.44229047352389e-13 6.92498487496987e-13 2 -1.438057e-04 3.318414e-03 5.71279354676378e-13 6.61775879178707e-13 3 -1.233883e-04 3.064332e-03 6.00719162647335e-13 6.2468056913499e-13 4 -1.221011e-05 2.712206e-03 6.33250671455382e-13 5.77455856348693e-13 5 2.221266e-04 2.227747e-03 6.69569581288886e-13 5.13773639106455e-13 6 6.053928e-04 1.601637e-03 7.06545391300248e-13 4.30699416613746e-13 7 1.092485e-03 9.293699e-04 7.3433689882492e-13 3.44146693179219e-13 8 1.534288e-03 4.026214e-04 7.46861902216119e-13 2.82358676449844e-13 9 1.816439e-03 1.122988e-04 7.49749702998004e-13 2.44415566176581e-13 10 1.939330e-03 3.596447e-06 7.3896630007835e-13 1.14259130936158e-13 11 1.939822e-03 3.185627e-06 7.34149398774153e-13 4.61283924894636e-14 12 1.940199e-03 2.896810e-06 7.33349498557577e-13 3.47410794062988e-14 13 1.940541e-03 2.655394e-06 7.32973798455854e-13 2.93501579466833e-14 14 1.940861e-03 2.446864e-06 7.32745698394095e-13 2.60505870533101e-14 15 1.941160e-03 2.265643e-06 7.32588998351668e-13 2.37662264348095e-14 16 1.941437e-03 2.108164e-06 7.32473298320342e-13 2.20645659740775e-14 17 1.941694e-03 1.971337e-06 7.32383698296082e-13 2.07336956137386e-14 18 1.941931e-03 1.852313e-06 7.32311698276588e-13 1.96559553219357e-14 19 1.942149e-03 1.748507e-06 7.32252498260559e-13 1.87600950793776e-14 20 1.942351e-03 1.657639e-06 7.32202698247076e-13 1.80001148736096e-14 1 -2.972987e-05 2.932789e-03 5.39954046194914e-13 6.94269087976385e-13 2 -1.572829e-05 2.742217e-03 5.67131153553235e-13 6.63862979743799e-13 3 5.261809e-05 2.502650e-03 5.96846861598892e-13 6.27050069776543e-13 4 1.904418e-04 2.191721e-03 6.29840070531947e-13 5.79974857030723e-13 5 4.183887e-04 1.785484e-03 6.66895680564915e-13 5.16182439758648e-13 6 7.505242e-04 1.280128e-03 7.04964690872266e-13 4.32630717136654e-13 7 1.148546e-03 7.491226e-04 7.34092298758693e-13 3.44965293400858e-13 8 1.501517e-03 3.341496e-04 7.47666702434022e-13 2.80692975998848e-13 9 1.725765e-03 1.031554e-04 7.50829803290446e-13 2.37251064236761e-13 10 1.834297e-03 6.744792e-06 7.41395100735959e-13 1.00756427280242e-13 11 1.839392e-03 2.614952e-06 7.37674199728508e-13 4.50833022065008e-14 12 1.839746e-03 2.372097e-06 7.37043099557635e-13 3.43274692943121e-14 13 1.840063e-03 2.172511e-06 7.36739599475461e-13 2.91170278835624e-14 14 1.840357e-03 2.001092e-06 7.36553399425047e-13 2.58970070117277e-14 15 1.840631e-03 1.852621e-06 7.36424699390201e-13 2.36557164048884e-14 16 1.840885e-03 1.723861e-06 7.36329199364344e-13 2.19804059512908e-14 17 1.841119e-03 1.612121e-06 7.36254899344227e-13 2.06670155956847e-14 18 1.841337e-03 1.514986e-06 7.36195199328063e-13 1.96015653072093e-14 19 1.841537e-03 1.430298e-06 7.36145899314715e-13 1.87147250670935e-14 20 1.841723e-03 1.356173e-06 7.36104299303451e-13 1.79615948631802e-14 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/noise1.standard0000644000175000017500000000423313546075722023707 0ustar carstencarstenFreq N(d) 1000 5.861499e-23 1258.925 5.861499e-23 1584.893 5.861499e-23 1995.262 5.861499e-23 2511.886 5.861499e-23 3162.278 5.861499e-23 3981.072 5.861499e-23 5011.872 5.861499e-23 6309.573 5.861499e-23 7943.282 5.861499e-23 10000 5.861499e-23 12589.25 5.861499e-23 15848.93 5.861499e-23 19952.62 5.861499e-23 25118.86 5.861499e-23 31622.78 5.861499e-23 39810.72 5.861499e-23 50118.72 5.861499e-23 63095.73 5.861499e-23 79432.82 5.861499e-23 100000 5.861499e-23 125892.5 5.861499e-23 158489.3 5.861499e-23 199526.2 5.861499e-23 251188.6 5.861499e-23 316227.8 5.861499e-23 398107.2 5.861499e-23 501187.2 5.861499e-23 630957.3 5.861499e-23 794328.2 5.861499e-23 1000000 5.861499e-23 1258925 5.861499e-23 1584893 5.861499e-23 1995262 5.8615e-23 2511886 5.8615e-23 3162278 5.8615e-23 3981072 5.8615e-23 5011872 5.8615e-23 6309573 5.8615e-23 7943282 5.8615e-23 10000000 5.861501e-23 12589250 5.861501e-23 15848930 5.861503e-23 19952620 5.861504e-23 25118860 5.861507e-23 31622780 5.861512e-23 39810720 5.861519e-23 50118720 5.861531e-23 63095730 5.861549e-23 79432820 5.861578e-23 100000000 5.861624e-23 1000 6.380981e-23 1258.925 6.380981e-23 1584.893 6.380981e-23 1995.262 6.380981e-23 2511.886 6.380981e-23 3162.278 6.380981e-23 3981.072 6.380981e-23 5011.872 6.380981e-23 6309.573 6.380981e-23 7943.282 6.380981e-23 10000 6.380981e-23 12589.25 6.380981e-23 15848.93 6.380981e-23 19952.62 6.380981e-23 25118.86 6.380981e-23 31622.78 6.380981e-23 39810.72 6.380981e-23 50118.72 6.380981e-23 63095.73 6.380981e-23 79432.82 6.380981e-23 100000 6.380981e-23 125892.5 6.380981e-23 158489.3 6.380981e-23 199526.2 6.380981e-23 251188.6 6.380981e-23 316227.8 6.380981e-23 398107.2 6.380981e-23 501187.2 6.380981e-23 630957.3 6.380981e-23 794328.2 6.380981e-23 1000000 6.380981e-23 1258925 6.380981e-23 1584893 6.380981e-23 1995262 6.380981e-23 2511886 6.380981e-23 3162278 6.380981e-23 3981072 6.380982e-23 5011872 6.380982e-23 6309573 6.380982e-23 7943282 6.380982e-23 10000000 6.380983e-23 12589250 6.380984e-23 15848930 6.380985e-23 19952620 6.380987e-23 25118860 6.38099e-23 31622780 6.380996e-23 39810720 6.381004e-23 50118720 6.381017e-23 63095730 6.381038e-23 79432820 6.381072e-23 100000000 6.381124e-23 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_COTEMP1.standard0000644000175000017500000000041613546075722024540 0ustar carstencarstenV(d) I(d) 1.000000e+00 3.579611e-03 3.000000e+00 1.016807e-02 5.000000e+00 1.551127e-02 7.000000e+00 1.870718e-02 9.000000e+00 1.963869e-02 1.100000e+01 1.969220e-02 1.300000e+01 1.969805e-02 1.500000e+01 1.970299e-02 1.700000e+01 1.970724e-02 1.900000e+01 1.971097e-02 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/acVd_corsrd2.standard0000644000175000017500000000547213546075722025032 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 1 -9.020265e-05 2.554367e-03 5.10985938351673e-13 7.30492797784113e-13 2 -1.766585e-04 2.543466e-03 5.23520841745552e-13 7.18035294411189e-13 3 -2.585846e-04 2.530068e-03 5.36781445335919e-13 7.04564890764019e-13 4 -3.343817e-04 2.508651e-03 5.507209491101e-13 6.89862986783414e-13 5 -4.017729e-04 2.474841e-03 5.65362553074378e-13 6.73639282390775e-13 6 -4.577285e-04 2.424254e-03 5.8079935725396e-13 6.55480677474254e-13 7 -4.982885e-04 2.351939e-03 5.97195161693196e-13 6.34797371874158e-13 8 -5.183633e-04 2.252144e-03 6.14759166448727e-13 6.10793365374969e-13 9 -5.116843e-04 2.118532e-03 6.33666671568016e-13 5.82517357719117e-13 10 -4.712726e-04 1.945294e-03 6.53899677046191e-13 5.49081648666252e-13 11 -3.909870e-04 1.729626e-03 6.7502018276466e-13 5.10136738121748e-13 12 -2.685479e-04 1.475496e-03 6.95983988440702e-13 4.66552626321159e-13 13 -1.092702e-04 1.196955e-03 7.15214993647581e-13 4.20924413967122e-13 14 7.220050e-05 9.174618e-04 7.31104297949679e-13 3.77230402136777e-13 15 2.551153e-04 6.630854e-04 7.42729201097172e-13 3.3937259188661e-13 16 4.199691e-04 4.530106e-04 7.50223803126368e-13 3.09446883784094e-13 17 5.548227e-04 2.941664e-04 7.54503104285008e-13 2.8696737769767e-13 18 6.567096e-04 1.826913e-04 7.56671704872166e-13 2.68696972750878e-13 19 7.290732e-04 1.090035e-04 7.57605705125051e-13 2.41052065265899e-13 20 7.784769e-04 6.224277e-05 7.57819505182938e-13 8.03687317601848e-14 1 -7.116119e-05 2.365440e-03 5.10512638223524e-13 7.29673397562256e-13 2 -1.376660e-04 2.345526e-03 5.23131741640202e-13 7.17192094182889e-13 3 -1.988118e-04 2.323299e-03 5.36495045258375e-13 7.03716890534419e-13 4 -2.532133e-04 2.293760e-03 5.50550049063828e-13 6.89026586556955e-13 5 -2.989485e-04 2.253106e-03 5.65317653062221e-13 6.72831582172087e-13 6 -3.335109e-04 2.197634e-03 5.80890357278599e-13 6.54722277268913e-13 7 -3.536785e-04 2.123237e-03 5.97431561757202e-13 6.34116071689693e-13 8 -3.553704e-04 2.025206e-03 6.15151066554835e-13 6.10228065221911e-13 9 -3.336366e-04 1.898434e-03 6.34227071719747e-13 5.82120657611708e-13 10 -2.830757e-04 1.738352e-03 6.54650077249365e-13 5.48914548621009e-13 11 -1.991201e-04 1.542970e-03 6.75999683029864e-13 5.10247938151856e-13 12 -8.047728e-05 1.315942e-03 6.97257588785535e-13 4.66934926424669e-13 13 6.790291e-05 1.069228e-03 7.16868894095381e-13 4.21461914112652e-13 14 2.334864e-04 8.225406e-04 7.33218198522027e-13 3.77675602257317e-13 15 3.987917e-04 5.978368e-04 7.45336001802975e-13 3.39381791889101e-13 16 5.473785e-04 4.114968e-04 7.53288703956204e-13 3.08629583562806e-13 17 6.691014e-04 2.697105e-04 7.57939505215429e-13 2.84827877118391e-13 18 7.613981e-04 1.694614e-04 7.60378005875663e-13 2.64222571539414e-13 19 8.272257e-04 1.026734e-04 7.61495306178177e-13 2.30544362420892e-13 20 8.721707e-04 6.009395e-05 7.61850006274214e-13 8.14669820575409e-14 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/acVd_cosym.standard0000644000175000017500000000544213546075722024603 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 1 4.408958e-05 6.046266e-04 3.15763085494233e-12 1.99601754043046e-12 2 1.317602e-04 4.645093e-04 3.39867892020715e-12 1.68688845673241e-12 3 2.891036e-04 2.666584e-04 3.62190398064631e-12 1.08428929357606e-12 4 4.970760e-04 4.691750e-05 3.65817399046657e-12 4.06781710137923e-13 5 5.487554e-04 1.768696e-07 3.59088997224913e-12 1.41835038402456e-13 6 5.488427e-04 1.363866e-07 3.56856196620372e-12 4.76827229103053e-14 7 5.489088e-04 1.101525e-07 3.56573996543966e-12 3.51606395198966e-14 8 5.489615e-04 9.183759e-08 3.56452896511177e-12 2.94901079845754e-14 9 5.490042e-04 7.873267e-08 3.56383996492522e-12 2.60809270615248e-14 10 5.490395e-04 6.911263e-08 3.56339396480447e-12 2.37436864287067e-14 11 5.490692e-04 6.185485e-08 3.56308296472026e-12 2.20134159602284e-14 12 5.490947e-04 5.623075e-08 3.56285696465907e-12 2.06659855954058e-14 13 5.491169e-04 5.176350e-08 3.56268596461277e-12 1.95782653009008e-14 14 5.491367e-04 4.813572e-08 3.5625549645773e-12 1.86763050566911e-14 15 5.491544e-04 4.513171e-08 3.56245296454969e-12 1.79125948499132e-14 16 5.491705e-04 4.260158e-08 3.56237196452775e-12 1.72550946718922e-14 17 5.491853e-04 4.043882e-08 3.56230796451043e-12 1.66812645165252e-14 18 5.491989e-04 3.856617e-08 3.56225696449662e-12 1.61747343793799e-14 19 5.492116e-04 3.692642e-08 3.56221696448579e-12 1.57233142571559e-14 20 5.492236e-04 3.547646e-08 3.56218596447739e-12 1.53176741473271e-14 1 4.831982e-05 4.594473e-04 3.0671258304377e-12 2.05635455676697e-12 2 1.265549e-04 3.437043e-04 3.31920889869029e-12 1.72225046630683e-12 3 2.486290e-04 1.911016e-04 3.57197796712862e-12 1.07841929198673e-12 4 3.911232e-04 3.656252e-05 3.64509698692592e-12 3.96627207388547e-13 5 4.302801e-04 1.153707e-07 3.58966897191854e-12 1.08838829468588e-13 6 4.303344e-04 8.911518e-08 3.57852496890125e-12 4.57398123842538e-14 7 4.303749e-04 7.291202e-08 3.57663696839007e-12 3.44701093329325e-14 8 4.304077e-04 6.148645e-08 3.57578996816074e-12 2.91303678871742e-14 9 4.304347e-04 5.324620e-08 3.5752989680278e-12 2.58609870019751e-14 10 4.304572e-04 4.715684e-08 3.57497796794088e-12 2.35970763890114e-14 11 4.304764e-04 4.253467e-08 3.57475396788024e-12 2.19104659323543e-14 12 4.304930e-04 3.893179e-08 3.57458996783583e-12 2.05912555751723e-14 13 4.305077e-04 3.605336e-08 3.57446596780226e-12 1.95229052859118e-14 14 4.305209e-04 3.370239e-08 3.57437096777654e-12 1.86348150454575e-14 15 4.305328e-04 3.174463e-08 3.57429596775623e-12 1.78813948414657e-14 16 4.305437e-04 3.008657e-08 3.57423696774026e-12 1.72317346655674e-14 17 4.305538e-04 2.866164e-08 3.5741909677278e-12 1.66640045118519e-14 18 4.305633e-04 2.742145e-08 3.57415396771778e-12 1.61623143760171e-14 19 4.305721e-04 2.633012e-08 3.57412496770993e-12 1.57147842548464e-14 20 4.305804e-04 2.536054e-08 3.5741019677037e-12 1.53123241458786e-14 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/acFreq_cosym.standard0000644000175000017500000000713113546075722025124 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.31510759095048e-12 2.08008826113497e-12 3.41498283927451e-13 1258.925 2.31510913566082e-12 2.08008813452404e-12 3.41498461457731e-13 1584.893 2.31510861510888e-12 2.08008767318194e-12 3.41498368740067e-13 1995.262 2.31510839918392e-12 2.08008855388099e-12 3.41498388611807e-13 2511.886 2.31510811510216e-12 2.0800879425648e-12 3.41498394520952e-13 3162.278 2.31510777427462e-12 2.08008749093504e-12 3.41498313230826e-13 3981.072 2.31510804749823e-12 2.08008790174315e-12 3.41498314023462e-13 5011.872 2.31510812825503e-12 2.08008787836074e-12 3.41498324740241e-13 6309.573 2.31510818999751e-12 2.08008803186219e-12 3.41498237076203e-13 7943.282 2.31510827634636e-12 2.08008706773448e-12 3.41498356909032e-13 10000 2.31510759095048e-12 2.08008826113497e-12 3.41498283927451e-13 12589.25 2.31510913566082e-12 2.08008813452404e-12 3.41498461457731e-13 15848.93 2.31510861510888e-12 2.08008767318194e-12 3.41498368740067e-13 19952.62 2.31510839918392e-12 2.08008855388099e-12 3.41498388611807e-13 25118.86 2.31510811510216e-12 2.0800879425648e-12 3.41498394520952e-13 31622.78 2.31510777427462e-12 2.08008749093504e-12 3.41498313230826e-13 39810.72 2.31510804749823e-12 2.08008790174315e-12 3.41498314023462e-13 50118.72 2.31510812825503e-12 2.08008787836074e-12 3.41498324740241e-13 63095.73 2.31510818999751e-12 2.08008803186219e-12 3.41498237076203e-13 79432.82 2.31510827634636e-12 2.08008706773448e-12 3.41498356909032e-13 100000 2.31510759095048e-12 2.08008826113497e-12 3.41498283927451e-13 125892.5 2.31510913566082e-12 2.08008813452404e-12 3.4149846145773e-13 158489.3 2.31510861510888e-12 2.08008767318194e-12 3.41498368740067e-13 199526.2 2.31510839918392e-12 2.08008855388099e-12 3.41498388611807e-13 251188.6 2.31510811510216e-12 2.0800879425648e-12 3.41498394520952e-13 316227.8 2.31510777427462e-12 2.08008749093504e-12 3.41498262901619e-13 398107.2 2.31510764771912e-12 2.08008750196403e-12 3.41498274045551e-13 501187.2 2.31510812825503e-12 2.08008787836074e-12 3.41498324740241e-13 630957.3 2.31510793775391e-12 2.08008777961858e-12 3.41498237076203e-13 794328.2 2.31510827634636e-12 2.08008706773448e-12 3.41498156544821e-13 1000000 2.31510759095048e-12 2.08008666958554e-12 3.41498124772507e-13 1258925 2.31510787144776e-12 2.08008813452404e-12 3.41498082193811e-13 1584893 2.31510660670903e-12 2.08008666898202e-12 3.41497866640105e-13 1995262 2.31510600619077e-12 2.08008616088785e-12 3.41497590947425e-13 2511886 2.31510431345807e-12 2.0800841409207e-12 3.41497127306253e-13 3162278 2.31510123147775e-12 2.08008145143024e-12 3.41496249733351e-13 3981072 2.31509725346219e-12 2.08007790726533e-12 3.41495075812651e-13 5011872 2.3150916153492e-12 2.08007263567842e-12 3.41493243846137e-13 6309573 2.31508170441913e-12 2.08006381647624e-12 3.41490165280887e-13 7943282 2.31506619986204e-12 2.08004899853438e-12 3.41485533599527e-13 10000000 2.31504233742381e-12 2.08002619070717e-12 3.41477912094735e-13 12589250 2.31500420597655e-12 2.07999205433121e-12 3.41466097603306e-13 15848930 2.31494191792142e-12 2.07993503479342e-12 3.41447054123926e-13 19952620 2.31484437227335e-12 2.07984526624437e-12 3.41417106611243e-13 25118860 2.31468993425144e-12 2.0797033429036e-12 3.41369582146782e-13 31622780 2.31444493862243e-12 2.07947750094989e-12 3.41294127639261e-13 39810720 2.31405782776972e-12 2.07912123584915e-12 3.41174852743546e-13 50118720 2.31344477054774e-12 2.07855694145603e-12 3.40986107103383e-13 63095730 2.31247401004475e-12 2.07766371858765e-12 3.40687021646912e-13 79432820 2.31093869711482e-12 2.07625009309325e-12 3.40214423044752e-13 100000000 2.30851539320762e-12 2.07401968315488e-12 3.39467944318427e-13 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/acVd_cvdsover.standard0000644000175000017500000000544613546075722025310 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 1 -9.653820e-05 3.498912e-03 5.43817447240947e-13 6.92919487610975e-13 2 -1.417599e-04 3.305198e-03 5.720103548743e-13 6.61029378976589e-13 3 -1.198608e-04 3.045730e-03 6.02488563126407e-13 6.22903568653859e-13 4 -9.023511e-06 2.692336e-03 6.35839972156447e-13 5.75083555706382e-13 5 2.200279e-04 2.215004e-03 6.72516482086772e-13 5.11872338591669e-13 6 5.908299e-04 1.606367e-03 7.09350792059822e-13 4.30645516599153e-13 7 1.064796e-03 9.515037e-04 7.37104299574206e-13 3.45603593573681e-13 8 1.505316e-03 4.271597e-04 7.50033803074925e-13 2.83119476655834e-13 9 1.796378e-03 1.284864e-04 7.53565304031094e-13 2.43411065904608e-13 10 1.939052e-03 3.734987e-06 7.43830001395219e-13 1.28155834698751e-13 11 1.939694e-03 3.207582e-06 7.35307999087849e-13 4.68209126769664e-14 12 1.940074e-03 2.917474e-06 7.34165698778567e-13 3.49428694609344e-14 13 1.940421e-03 2.674695e-06 7.33655898640536e-13 2.94467679728409e-14 14 1.940745e-03 2.464603e-06 7.33353298558606e-13 2.61073470686781e-14 15 1.941048e-03 2.281661e-06 7.33148498503155e-13 2.38034064448762e-14 16 1.941330e-03 2.122435e-06 7.32998798462623e-13 2.20905859811225e-14 17 1.941591e-03 1.983940e-06 7.32883798431487e-13 2.07527056188856e-14 18 1.941833e-03 1.863385e-06 7.32792298406712e-13 1.96702453258048e-14 19 1.942055e-03 1.758211e-06 7.3271749838646e-13 1.87710350823397e-14 20 1.942261e-03 1.666139e-06 7.32655098369565e-13 1.80085748759002e-14 1 -2.946531e-05 2.928674e-03 5.39547846084934e-13 6.94678188087151e-13 2 -1.486847e-05 2.733831e-03 5.67638853690697e-13 6.6335927960742e-13 3 5.380981e-05 2.491192e-03 5.98195361964004e-13 6.25756569426322e-13 4 1.906559e-04 2.179939e-03 6.31846371075162e-13 5.78260256566488e-13 5 4.147623e-04 1.778362e-03 6.69189581185999e-13 5.14870739403499e-13 6 7.394491e-04 1.283359e-03 7.07136591460318e-13 4.32737117165463e-13 7 1.130471e-03 7.622733e-04 7.36190699326844e-13 3.46192593733155e-13 8 1.483538e-03 3.485889e-04 7.5003020307395e-13 2.81384176185994e-13 9 1.713743e-03 1.125635e-04 7.53619904045878e-13 2.36443664018154e-13 10 1.830118e-03 9.992124e-06 7.44358201538231e-13 1.07585629129279e-13 11 1.839302e-03 2.630630e-06 7.38440499935988e-13 4.54113622953245e-14 12 1.839662e-03 2.385015e-06 7.37600499708554e-13 3.44214093197468e-14 13 1.839982e-03 2.184341e-06 7.37210399602933e-13 2.9160567895351e-14 14 1.840279e-03 2.011850e-06 7.3697489953917e-13 2.59216870184099e-14 15 1.840556e-03 1.862275e-06 7.36813899495579e-13 2.36712664090987e-14 16 1.840813e-03 1.732431e-06 7.36695499463521e-13 2.19908159541094e-14 17 1.841051e-03 1.619673e-06 7.36603999438747e-13 2.06742455976422e-14 18 1.841271e-03 1.521613e-06 7.36530799418928e-13 1.96066653085902e-14 19 1.841475e-03 1.436104e-06 7.36470699402656e-13 1.87183450680736e-14 20 1.841663e-03 1.361260e-06 7.36420499389064e-13 1.79641148638625e-14 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/dcSw_Id1_vb1.standard0000644000175000017500000001112213546075722024651 0ustar carstencarstenV(d) I(d) 1.000000e+00 9.848211e-04 2.000000e+00 9.922125e-04 3.000000e+00 9.927365e-04 4.000000e+00 9.931162e-04 5.000000e+00 9.934284e-04 6.000000e+00 9.937007e-04 7.000000e+00 9.939457e-04 8.000000e+00 9.941706e-04 9.000000e+00 9.943797e-04 1.000000e+01 9.945761e-04 1.100000e+01 9.947617e-04 1.200000e+01 9.949383e-04 1.300000e+01 9.951070e-04 1.400000e+01 9.952689e-04 1.500000e+01 9.954246e-04 1.600000e+01 9.955750e-04 1.700000e+01 9.957204e-04 1.800000e+01 9.958613e-04 1.900000e+01 9.959982e-04 2.000000e+01 9.961313e-04 1.000000e+00 3.276475e-03 2.000000e+00 5.782344e-03 3.000000e+00 7.249624e-03 4.000000e+00 7.605497e-03 5.000000e+00 7.608658e-03 6.000000e+00 7.610935e-03 7.000000e+00 7.612830e-03 8.000000e+00 7.614445e-03 9.000000e+00 7.615855e-03 1.000000e+01 7.617114e-03 1.100000e+01 7.618258e-03 1.200000e+01 7.619313e-03 1.300000e+01 7.620295e-03 1.400000e+01 7.621219e-03 1.500000e+01 7.622094e-03 1.600000e+01 7.622927e-03 1.700000e+01 7.623724e-03 1.800000e+01 7.624490e-03 1.900000e+01 7.625227e-03 2.000000e+01 7.625940e-03 1.000000e+00 3.470899e-03 2.000000e+00 6.786808e-03 3.000000e+00 9.889468e-03 4.000000e+00 1.269693e-02 5.000000e+00 1.509944e-02 6.000000e+00 1.696526e-02 7.000000e+00 1.819645e-02 8.000000e+00 1.883593e-02 9.000000e+00 1.907639e-02 1.000000e+01 1.911760e-02 1.100000e+01 1.912097e-02 1.200000e+01 1.912401e-02 1.300000e+01 1.912678e-02 1.400000e+01 1.912934e-02 1.500000e+01 1.913169e-02 1.600000e+01 1.913388e-02 1.700000e+01 1.913592e-02 1.800000e+01 1.913783e-02 1.900000e+01 1.913963e-02 2.000000e+01 1.914134e-02 1.000000e+00 1.179090e-03 2.000000e+00 1.180932e-03 3.000000e+00 1.181561e-03 4.000000e+00 1.182019e-03 5.000000e+00 1.182396e-03 6.000000e+00 1.182725e-03 7.000000e+00 1.183022e-03 8.000000e+00 1.183294e-03 9.000000e+00 1.183548e-03 1.000000e+01 1.183786e-03 1.100000e+01 1.184011e-03 1.200000e+01 1.184226e-03 1.300000e+01 1.184430e-03 1.400000e+01 1.184627e-03 1.500000e+01 1.184816e-03 1.600000e+01 1.184999e-03 1.700000e+01 1.185175e-03 1.800000e+01 1.185346e-03 1.900000e+01 1.185513e-03 2.000000e+01 1.185674e-03 1.000000e+00 4.004405e-03 2.000000e+00 7.109189e-03 3.000000e+00 8.931706e-03 4.000000e+00 9.342127e-03 5.000000e+00 9.345630e-03 6.000000e+00 9.348428e-03 7.000000e+00 9.350759e-03 8.000000e+00 9.352747e-03 9.000000e+00 9.354482e-03 1.000000e+01 9.356030e-03 1.100000e+01 9.357437e-03 1.200000e+01 9.358733e-03 1.300000e+01 9.359940e-03 1.400000e+01 9.361076e-03 1.500000e+01 9.362151e-03 1.600000e+01 9.363175e-03 1.700000e+01 9.364154e-03 1.800000e+01 9.365095e-03 1.900000e+01 9.366001e-03 2.000000e+01 9.366877e-03 1.000000e+00 3.857403e-03 2.000000e+00 7.574741e-03 3.000000e+00 1.108273e-02 4.000000e+00 1.428285e-02 5.000000e+00 1.704233e-02 6.000000e+00 1.920006e-02 7.000000e+00 2.063101e-02 8.000000e+00 2.137486e-02 9.000000e+00 2.165192e-02 1.000000e+01 2.169168e-02 1.100000e+01 2.169549e-02 1.200000e+01 2.169894e-02 1.300000e+01 2.170210e-02 1.400000e+01 2.170501e-02 1.500000e+01 2.170769e-02 1.600000e+01 2.171018e-02 1.700000e+01 2.171250e-02 1.800000e+01 2.171468e-02 1.900000e+01 2.171673e-02 2.000000e+01 2.171866e-02 1.000000e+00 7.997847e-04 2.000000e+00 8.267961e-04 3.000000e+00 8.272265e-04 4.000000e+00 8.275360e-04 5.000000e+00 8.277894e-04 6.000000e+00 8.280097e-04 7.000000e+00 8.282076e-04 8.000000e+00 8.283889e-04 9.000000e+00 8.285573e-04 1.000000e+01 8.287153e-04 1.100000e+01 8.288646e-04 1.200000e+01 8.290065e-04 1.300000e+01 8.291421e-04 1.400000e+01 8.292720e-04 1.500000e+01 8.293971e-04 1.600000e+01 8.295177e-04 1.700000e+01 8.296344e-04 1.800000e+01 8.297474e-04 1.900000e+01 8.298572e-04 2.000000e+01 8.299640e-04 1.000000e+00 2.468387e-03 2.000000e+00 4.336113e-03 3.000000e+00 5.444066e-03 4.000000e+00 5.756717e-03 5.000000e+00 5.763581e-03 6.000000e+00 5.765301e-03 7.000000e+00 5.766727e-03 8.000000e+00 5.767942e-03 9.000000e+00 5.769003e-03 1.000000e+01 5.769951e-03 1.100000e+01 5.770811e-03 1.200000e+01 5.771604e-03 1.300000e+01 5.772343e-03 1.400000e+01 5.773038e-03 1.500000e+01 5.773696e-03 1.600000e+01 5.774323e-03 1.700000e+01 5.774922e-03 1.800000e+01 5.775497e-03 1.900000e+01 5.776052e-03 2.000000e+01 5.776587e-03 1.000000e+00 2.928031e-03 2.000000e+00 5.691726e-03 3.000000e+00 8.248038e-03 4.000000e+00 1.053663e-02 5.000000e+00 1.247705e-02 6.000000e+00 1.397402e-02 7.000000e+00 1.496084e-02 8.000000e+00 1.547876e-02 9.000000e+00 1.568108e-02 1.000000e+01 1.572788e-02 1.100000e+01 1.573113e-02 1.200000e+01 1.573362e-02 1.300000e+01 1.573590e-02 1.400000e+01 1.573799e-02 1.500000e+01 1.573992e-02 1.600000e+01 1.574171e-02 1.700000e+01 1.574338e-02 1.800000e+01 1.574494e-02 1.900000e+01 1.574641e-02 2.000000e+01 1.574781e-02 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/acVd.standard0000644000175000017500000000544213546075722023371 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 1 2.808369e-04 3.093604e-03 5.79827656990868e-13 6.46047174920092e-13 2 8.263838e-04 2.174393e-03 6.43855974326814e-13 5.50262248985905e-13 3 1.711839e-03 9.662072e-04 7.10444792356028e-13 3.73345501084924e-13 4 2.535594e-03 3.457111e-05 7.23779995966592e-13 2.36077463919003e-13 5 2.568898e-03 2.593359e-06 7.11575892662278e-13 7.92165914482378e-14 6 2.569764e-03 2.132390e-06 7.08779291905086e-13 4.27001015612388e-14 7 2.570502e-03 1.796228e-06 7.08065691711876e-13 3.33275190235712e-14 8 2.571128e-03 1.549543e-06 7.07702991613673e-13 2.85395077271963e-14 9 2.571657e-03 1.367695e-06 7.07474791551887e-13 2.55111169072462e-14 10 2.572109e-03 1.231157e-06 7.07314691508539e-13 2.33753063289662e-14 11 2.572502e-03 1.126085e-06 7.07194591476022e-13 2.17652258930299e-14 12 2.572849e-03 1.043123e-06 7.07100391450516e-13 2.04954355492286e-14 13 2.573160e-03 9.760148e-07 7.07023991429831e-13 1.94608052690979e-14 14 2.573444e-03 9.205373e-07 7.06960591412665e-13 1.85966950351363e-14 15 2.573704e-03 8.737950e-07 7.06906791398098e-13 1.78608848359125e-14 16 2.573946e-03 8.337605e-07 7.0686059138559e-13 1.72244746636017e-14 17 2.574172e-03 7.989839e-07 7.06820291374678e-13 1.66669245126425e-14 18 2.574386e-03 7.684067e-07 7.06784891365094e-13 1.61731943789629e-14 19 2.574589e-03 7.412401e-07 7.06753391356565e-13 1.5731964259498e-14 20 2.574782e-03 7.168857e-07 7.06725191348929e-13 1.53345441518947e-14 1 2.799370e-04 2.304693e-03 5.69312654143885e-13 6.49872475955809e-13 2 7.227927e-04 1.611782e-03 6.32921671366304e-13 5.54534550142649e-13 3 1.363927e-03 7.486439e-04 7.02525090211734e-13 3.79315302701273e-13 4 1.950179e-03 7.261881e-05 7.22802195701849e-13 2.36327063986584e-13 5 2.022331e-03 1.957966e-06 7.12532792921363e-13 7.64914807104022e-14 6 2.023024e-03 1.598264e-06 7.1064199240942e-13 4.23122614562294e-14 7 2.023602e-03 1.344266e-06 7.10138192273014e-13 3.31575989775646e-14 8 2.024091e-03 1.159331e-06 7.09879892203078e-13 2.84397977001993e-14 9 2.024504e-03 1.023297e-06 7.09716592158864e-13 2.54439568890624e-14 10 2.024858e-03 9.211913e-07 7.09601692127755e-13 2.33262963156965e-14 11 2.025167e-03 8.425923e-07 7.09515392104388e-13 2.1727505882817e-14 12 2.025440e-03 7.805043e-07 7.09447592086031e-13 2.04653155410735e-14 13 2.025686e-03 7.302582e-07 7.09392492071113e-13 1.94360652623995e-14 14 2.025910e-03 6.887057e-07 7.09346692058712e-13 1.85759450295182e-14 15 2.026116e-03 6.536865e-07 7.09307892048207e-13 1.78431748311174e-14 16 2.026308e-03 6.236874e-07 7.09274492039164e-13 1.72091546594537e-14 17 2.026489e-03 5.976255e-07 7.09245292031258e-13 1.66535145090117e-14 18 2.026659e-03 5.747095e-07 7.09219592024299e-13 1.61613443757545e-14 19 2.026821e-03 5.543495e-07 7.09196792018126e-13 1.57214042566388e-14 20 2.026975e-03 5.360976e-07 7.09176292012576e-13 1.5325064149328e-14 tmpk8ny_4pz/tests/hisimhv2/nmos/reference/acFreq_coiigs.standard0000644000175000017500000000712513546075722025252 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.5523407660244e-12 2.45780750447611e-12 4.65350114162474e-14 1258.925 2.55234250965866e-12 2.45780844941216e-12 4.65350254752448e-14 1584.893 2.55234180946946e-12 2.45780743277824e-12 4.65350161386683e-14 1995.262 2.55234176314795e-12 2.45780736653441e-12 4.65350141935393e-14 2511.886 2.55234147811162e-12 2.45780789516093e-12 4.65350193390891e-14 3162.278 2.55234103283261e-12 2.45780718060364e-12 4.65350035602709e-14 3981.072 2.55234097064094e-12 2.45780720280599e-12 4.65350082962433e-14 5011.872 2.5523414250875e-12 2.45780757961237e-12 4.65350199418861e-14 6309.573 2.55234203799834e-12 2.45780744144598e-12 4.65350098704658e-14 7943.282 2.55234150584801e-12 2.45780766744194e-12 4.65350087765651e-14 10000 2.5523407660244e-12 2.45780750447611e-12 4.65350114162474e-14 12589.25 2.55234250965866e-12 2.45780844941216e-12 4.65350254752448e-14 15848.93 2.55234180946946e-12 2.45780743277824e-12 4.65350161386683e-14 19952.62 2.55234176314795e-12 2.45780736653441e-12 4.65350141935393e-14 25118.86 2.55234147811162e-12 2.45780789516093e-12 4.65350193390891e-14 31622.78 2.55234103283261e-12 2.45780718060364e-12 4.65350035602709e-14 39810.72 2.55234097064094e-12 2.45780720280599e-12 4.65350082962433e-14 50118.72 2.5523414250875e-12 2.45780757961237e-12 4.65350199418861e-14 63095.73 2.55234203799834e-12 2.45780744144598e-12 4.65350098704658e-14 79432.82 2.55234150584801e-12 2.45780766744194e-12 4.65350087765651e-14 100000 2.5523407660244e-12 2.45780750447611e-12 4.65350114162474e-14 125892.5 2.55234250965866e-12 2.45780844941216e-12 4.65350254752448e-14 158489.3 2.55234180946946e-12 2.45780743277824e-12 4.65350161386683e-14 199526.2 2.55234176314795e-12 2.45780736653441e-12 4.65350141935393e-14 251188.6 2.55234147811162e-12 2.45780789516093e-12 4.65350193390891e-14 316227.8 2.55234103283261e-12 2.45780718060364e-12 4.65350035602709e-14 398107.2 2.55234097064094e-12 2.45780720280599e-12 4.65350082962433e-14 501187.2 2.5523414250875e-12 2.45780757961237e-12 4.65350199418861e-14 630957.3 2.55234203799834e-12 2.45780744144598e-12 4.65350098704658e-14 794328.2 2.55234150584801e-12 2.45780766744194e-12 4.65350087765651e-14 1000000 2.5523407660244e-12 2.45780750447611e-12 4.65350114162474e-14 1258925 2.55234250965866e-12 2.45780844941216e-12 4.65350254752448e-14 1584893 2.55234180946946e-12 2.45780743277824e-12 4.65350161386683e-14 1995262 2.55234176314795e-12 2.45780736653441e-12 4.65350141935393e-14 2511886 2.55234147811162e-12 2.45780789516093e-12 4.65350193390891e-14 3162278 2.55234103283261e-12 2.45780718060364e-12 4.65350035602709e-14 3981072 2.55234097064094e-12 2.45780720280599e-12 4.65350082962433e-14 5011872 2.5523414250875e-12 2.45780757961237e-12 4.65350199418861e-14 6309573 2.55234203799834e-12 2.45780744144598e-12 4.65350098704658e-14 7943282 2.55234150584801e-12 2.45780766744194e-12 4.65350087765651e-14 10000000 2.5523407660244e-12 2.45780750447611e-12 4.65350114162474e-14 12589250 2.55234250965866e-12 2.45780844941216e-12 4.65350254752448e-14 15848930 2.55234180946946e-12 2.45780743277824e-12 4.65350161386683e-14 19952620 2.55234176314795e-12 2.45780736653441e-12 4.65350141935393e-14 25118860 2.55234147811162e-12 2.45780789516093e-12 4.65350193390891e-14 31622780 2.55234103283261e-12 2.45780718060364e-12 4.65350035602709e-14 39810720 2.55234097064094e-12 2.45780720280599e-12 4.65350082962433e-14 50118720 2.5523414250875e-12 2.45780757961237e-12 4.65350199418861e-14 63095730 2.55234203799834e-12 2.45780744144598e-12 4.65350098704658e-14 79432820 2.55234150584801e-12 2.45780766744194e-12 4.65350087765651e-14 100000000 2.5523407660244e-12 2.45780750447611e-12 4.65350114162474e-14 tmpk8ny_4pz/tests/hisimhv2/nmos/qaSpec0000644000175000017500000004766713546075722020212 0ustar carstencarsten // // Test specification for HiSIM_HV (version 2.1.0) // // // Simulator specific information // These arguments are added to the model card // specification to invoke the desired model in // different simulators (which can have different // names or levels for the same model) and to switch // between nType and pType polarities. // It is assumed that there are no polarity specific // parameters. // `ifdef spice nTypeSelectionArguments nmos level=62 version=2.10 pTypeSelectionArguments pmos level=62 version=2.10 `endif `ifdef ngspice nTypeSelectionArguments nmos level=73 version=2.20 pTypeSelectionArguments pmos level=73 version=2.20 `endif `ifdef hspice nTypeSelectionArguments nmos level=73 version=2.10 pTypeSelectionArguments pmos level=73 version=2.10 `endif // // General test-independent information // keyLetter m pins d g s b linearScale w l ps pd areaScale as ad temperature 27 -50 150 //checkPolarity yes scaleParameters m // // Specific tests // test dcSw_Id1_vb0 biases V(s)=0 V(b)=0 biasList V(g)=2,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/nmosParameters test dcSw_Id1_vb1 biases V(s)=0 V(b)=-0.5 biasList V(g)=2,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/nmosParameters test dcSw_Id1_vb2 biases V(s)=0 V(b)=-1.5 biasList V(g)=2,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/nmosParameters test dcSw_Id1_vb0_jd biases V(s)=0 V(b)=0 biasList V(g)=2,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=50e-6 L=5e-6 AD=20e-12 AS=20e-12 PD=12e-6 PS=12e-6 modelParameters parameters/nmosParameters test dcSw_Ig1_vb0 biases V(s)=0 V(b)=0 biasList V(d)=2,5,10 biasSweep V(g)=1,20.000000001,1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/nmosParameters test dcSw_Ig1_vb1 biases V(s)=0 V(b)=-0.5 biasList V(d)=2,5,10 biasSweep V(g)=1,20.000000001,1 outputs I(d) I(g) I(s) I(b) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/nmosParameters test dcSw_Ig1_vb2 biases V(s)=0 V(b)=-1.5 biasList V(d)=2,5,10 biasSweep V(g)=1,20.000000001,1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/nmosParameters test dcSw_Ig1_vb0_jd biases V(s)=0 V(b)=0 biasList V(d)=2,5,10 biasSweep V(g)=1,20.000000001,1 outputs I(d) I(g) I(s) I(b) instanceParameters W=20e-6 L=2.0e-6 AD=20e-12 AS=20e-12 PD=12e-6 PS=12e-6 modelParameters parameters/nmosParameters test dcSw_ld2 biases V(s)=0 V(b)=0 biasList V(g)=2,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/nmosParameters test dcSw_lg2 biases V(s)=0 V(b)=0 biasList V(d)=2,5,10 biasSweep V(g)=1,20.000000001,1 outputs I(d) instanceParameters W=5e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/nmosParameters test dcSw_cosym biases V(s)=0 V(b)=0 biasList V(g)=2,5,10 biasSweep V(d)=0.1,30.1,0.5 outputs I(d) instanceParameters W=50e-6 L=20e-6 modelParameters parameters/nmosParameters modelParameters COSYM=1 RD=0.1 CORDRIFT=0 test dcSw_rs2m biases V(s)=0 V(b)=0 biasList V(g)=0.1,0.6,2,5 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=50e-6 L=10e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/nmosParameters modelParameters COSYM=1 RD=0.1 RS=2e-3 CORDRIFT=0 test dcSw_corsrd0 biases V(s)=0 V(b)=0 biasList V(g)=2,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=50e-6 L=2e-6 modelParameters parameters/nmosParameters modelParameters CORSRD=0 CORDRIFT=0 test dcSw_corsrd1 biases V(s)=0 V(b)=0 biasList V(g)=2,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=50e-6 L=20e-6 AD=20e-12 AS=20e-12 PD=12e-6 PS=12e-6 modelParameters parameters/nmosParameters modelParameters CORSRD=1 RD=0.1 RS=0.05 CORDRIFT=0 test dcSw_corsrd2 biases V(s)=0 V(b)=0 biasList V(g)=2,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=50e-6 L=2e-6 modelParameters parameters/nmosParameters modelParameters CORSRD=2 CORDRIFT=0 test dcSw_isub biases V(s)=0 V(b)=0 biasList V(g)=2,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) I(b) instanceParameters W=50e-6 L=50e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/nmosParameters modelParameters COISUB=1 SUB1=1 SVGS=1 SVDS=1 SUB1L=0.1 SUB2L=0.1 SLG=1 SVBS=1 test dcSw_gidl biases V(s)=0 V(b)=0 biasList V(g)=2,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) I(b) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/nmosParameters modelParameters COGIDL=1 test dcSw_she biases V(s)=0 V(b)=0 biasList V(g)=2,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/nmosParameters modelParameters COSELFHEAT=1 POWRAT=0.5 test dcSw_ptl biases V(s)=0 V(b)=0 biasList V(g)=2,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/nmosParameters modelParameters CORDRIFT=0 CORSRD=-1 RSH=10 PT4P=0.1 GDLD=0.0001 test dcSw_coisti biases V(s)=0 V(b)=0 biasList V(g)=2,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=20e-6 L=2e-6 instanceParameters SA=1e-6 SB=2e-6 SD=1e-6 NF=2 modelParameters parameters/nmosParameters modelParameters COISTI=1 WSTI=0.1E-4 modelParameters NSUBPSTI1=2e-6 NSUBPSTI2=1e-6 NSUBPSTI3=1.5 test dcSw_corg biases V(s)=0 V(b)=0 biasList V(g)=2,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters CORG=1 RSHG=10 test dcSw_corbnet biases V(s)=0 V(b)=0 biasList V(g)=2,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters CORBNET=1 test dcSw_codfm biases V(s)=0 V(b)=0 biasList V(g)=2,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=50e-6 L=2e-6 NSUBCDFM=1E17 modelParameters CODFM=1 test dcSw_rdrbb biases V(s)=0 V(b)=-5 biasList V(g)=2,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters RDRBB=1.5 test dcSw_NF_RDS temperature 27 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.000000001,2 outputs I(d) instanceParameters W=50e-6 L=5e-6 NF=100 modelParameters parameters/nmosParameters modelParameters CORDRIFT=0 RD=0.01 RDS=1 RDSP=2.0 RDVDS=1 RDVDSP=1.5 test dcSw_NF_RD23 temperature 27 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.000000001,2 outputs I(d) instanceParameters W=1e-6 L=2e-6 NF=100 modelParameters parameters/nmosParameters modelParameters CORDRIFT=0 RD20=0.1 RD23=0.1 RD23L=0.1 RD23S=0.1 RD23SP=1.5 RD24=0.1 test dcSw_NF_RTH0W temperature 27 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.000000001,2 outputs I(d) instanceParameters W=50e-6 L=5e-6 NF=100 modelParameters parameters/nmosParameters modelParameters COSELFHEAT=1 RTH0=1 RTH0W=2.0 RTH0WP=2.5 test dcSw_COTEMP1 temperature 27 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.000000001,2 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/nmosParameters modelParameters COTEMP=1 test dcSw_COTEMP2 temperature 27 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.000000001,2 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/nmosParameters modelParameters COTEMP=2 test dcSw_COTEMP3 temperature 27 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.000000001,2 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/nmosParameters modelParameters COTEMP=3 test dcSw_RDRIFT_REVS temperature 27 biases V(s)=0 V(b)=0 V(d)=-10 biasSweep V(g)=1,20.000000001,2 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/nmosParameters modelParameters CORDRIFT=1 RDRCX=0.5 test acVd temperature 27 150 biases V(s)=0 V(b)=0 V(g)=5 biasSweep V(d)=1,20.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/nmosParameters test acVd_corsrd1 temperature 27 150 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=10e-6 modelParameters parameters/nmosParameters modelParameters CORSRD=1 RD=0.01 RS=0.1 CORDRIFT=0 test acVd_corsrd2 temperature 27 150 biases V(s)=0 V(b)=0 V(g)=20 biasSweep V(d)=1,20.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/nmosParameters modelParameters CORSRD=2 CORDRIFT=0 test acVd_cosym temperature 27 150 biases V(s)=0 V(b)=0 V(g)=5 biasSweep V(d)=1,20.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=20e-6 modelParameters parameters/nmosParameters modelParameters COSYM=1 RD=0.01 CORDRIFT=0 test acVd_cvdsover temperature 27 150 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/nmosParameters modelParameters CVDSOVER=0.2 test acVd_coisti temperature 27 150 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 instanceParameters SA=1e-6 SB=2e-6 SD=1e-6 NF=2 modelParameters parameters/nmosParameters modelParameters COISTI=1 WSTI=0.1E-4 modelParameters NSUBPSTI1=2e-6 NSUBPSTI2=1e-6 NSUBPSTI3=1.5 test acVd_coadov temperature 27 150 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/nmosParameters modelParameters COADOV=1 test acVd_corg temperature 27 150 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/nmosParameters modelParameters CORG=1 RSHG=10 test acVd_corbnet temperature 27 150 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/nmosParameters modelParameters CORBNET=1 test acVd_codfm temperature 27 150 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 NSUBCDFM=1E17 modelParameters parameters/nmosParameters modelParameters CODFM=1 test acVd_rdrbb temperature 27 150 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/nmosParameters modelParameters RDRBB=1.5 test acVg_QOVADD temperature 27 150 biases V(s)=0 V(b)=0 V(d)=1 biasSweep V(g)=1,10.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/nmosParameters modelParameters QOVADD=1e-4 test acVg_LOVER temperature 27 150 biases V(s)=0 V(b)=0 V(d)=1 biasSweep V(g)=1,10.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/nmosParameters modelParameters LOVERS=0 LOVER=1.6e-06 LOVERLD=3e-06 test acFreq temperature 27 biases V(s)=0 V(b)=0 V(d)=10 V(g)=10 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=50e-6 L=2e-6 modelParameters parameters/nmosParameters test acFreq_cosym temperature 27 biases V(s)=0 V(b)=0 V(d)=10 V(g)=10 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=50e-6 L=10e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/nmosParameters modelParameters COSYM=1 RD=0.01 CORDRIFT=0 test acFreq_coovlp temperature 27 biases V(s)=0 V(b)=0 V(d)=10 V(g)=10 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=50e-6 L=2e-6 modelParameters parameters/nmosParameters modelParameters COOVLP=0 CORDRIFT=0 test acFreq_nover temperature 27 biases V(s)=0 V(b)=0 V(d)=10 V(g)=5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/nmosParameters modelParameters NOVER=1E16 CORDRIFT=0 test acFreq_coadov temperature 27 biases V(s)=0 V(b)=0 V(d)=10 V(g)=5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/nmosParameters modelParameters COADOV=0 test acFreq_conqs temperature 27 biases V(s)=0 V(b)=0 V(d)=10 V(g)=5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/nmosParameters modelParameters CONQS=1 test acFreq_coiigs temperature 27 biases V(s)=0 V(b)=0 V(d)=10 V(g)=5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=100e-6 L=8e-6 modelParameters parameters/nmosParameters modelParameters COIIGS=1 test noise1 temperature 27 biases V(s)=0 V(b)=0 V(d)=20 biasList V(g)=5,10 freq dec 10 1e3 1e8 outputs N(d) instanceParameters W=100e-6 L=8e-6 modelParameters parameters/nmosParameters modelParameters COTHRML=1 COIGN=1 test noise2 temperature 27 biases V(s)=0 V(b)=0 V(d)=20 biasList V(g)=5,10 freq dec 10 1e3 1e8 outputs N(d) instanceParameters W=100e-6 L=8e-6 modelParameters parameters/nmosParameters modelParameters COFLICK=1 FALPH=1.2 tmpk8ny_4pz/tests/hisimhv2/nmos/run0000755000175000017500000000023613546075722017562 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmpk8ny_4pz/tests/hisimhv2/pmos/0000755000175000017500000000000013546075722017031 5ustar carstencarstentmpk8ny_4pz/tests/hisimhv2/pmos/parameters/0000755000175000017500000000000013546075722021174 5ustar carstencarstentmpk8ny_4pz/tests/hisimhv2/pmos/parameters/nmosParameters0000644000175000017500000002102213546075722024114 0ustar carstencarsten CORSRD = ( 3 ) CORG = ( 0 ) COIPRV = ( 1 ) COPPRV = ( 1 ) COADOV = ( 1 ) COISUB = ( 0 ) COIIGS = ( 0 ) COGIDL = ( 0 ) COOVLP = ( 1 ) COOVLPS = ( 0 ) COFLICK = ( 0 ) COISTI = ( 0 ) CONQS = ( 0 ) COTHRML = ( 0 ) COIGN = ( 0 ) CODFM = ( 0 ) COQOVSM = ( 1 ) CORBNET = ( 0 ) COSELFHEAT = ( 0 ) COSUBNODE = ( 0 ) COSYM = ( 0 ) COTEMP = ( 0 ) CORDRIFT = ( 1 ) COERRREP = ( 1 ) VERSION = ( 2 ) VMAX = ( 1e+07 ) VMAXT1 = ( 0 ) VMAXT2 = ( 0 ) BGTMP1 = ( 9.025e-05 ) BGTMP2 = ( 1e-07 ) EG0 = ( 1.1785 ) TOX = ( 7e-09 ) XLD = ( 0 ) RDOV11 = ( 0 ) RDOV12 = ( 1 ) RDOV13 = ( 1 ) RDSLP1 = ( 0 ) RDICT1 = ( 1 ) RDSLP2 = ( 1 ) RDICT2 = ( 0 ) SUBLD1 = ( 0 ) SUBLD1L = ( 0 ) SUBLD1LP = ( 1 ) SUBLD2 = ( 0 ) XPDV = ( 0 ) XPVDTH = ( 0 ) XPVDTHG = ( 0 ) DDLTMAX = ( 10 ) DDLTSLP = ( 0 ) DDLTICT = ( 10 ) VFBOVER = ( -0.5 ) NOVER = ( 1e+17 ) NOVERS = ( 0 ) XWD = ( 0 ) XL = ( 0 ) XW = ( 0 ) SAREF = ( 1e-06 ) SBREF = ( 1e-06 ) LL = ( 0 ) LLD = ( 0 ) LLN = ( 0 ) WL = ( 0 ) WL1 = ( 0 ) WL1P = ( 1 ) WL2 = ( 0 ) WL2P = ( 1 ) WLD = ( 0 ) WLN = ( 0 ) RSH = ( 0 ) RSHG = ( 0 ) XQY = ( 0 ) XQY1 = ( 0 ) XQY2 = ( 2 ) RS = ( 0 ) RD = ( 0.01 ) VFBC = ( -1 ) VBI = ( 1.1 ) NSUBC = ( 3e+17 ) PARL2 = ( 1e-08 ) LP = ( 1.5e-08 ) NSUBP = ( 1e+18 ) NSUBP0 = ( 0 ) NSUBWP = ( 1 ) SCP1 = ( 1 ) SCP2 = ( 0 ) SCP3 = ( 0 ) SC1 = ( 1 ) SC2 = ( 0 ) SC3 = ( 0 ) SC4 = ( 0 ) PGD1 = ( 0 ) PGD2 = ( 1 ) PGD4 = ( 0 ) NDEP = ( 1 ) NDEPL = ( 0 ) NDEPLP = ( 1 ) NINV = ( 0.5 ) MUECB0 = ( 1000 ) MUECB1 = ( 100 ) MUEPH0 = ( 0.3 ) MUEPH1 = ( 20000 ) MUEPHW = ( 0 ) MUEPWP = ( 1 ) MUEPHL = ( 0 ) MUEPLP = ( 1 ) MUEPHS = ( 0 ) MUEPSP = ( 1 ) VTMP = ( 0 ) WVTH0 = ( 0 ) MUESR0 = ( 2 ) MUESR1 = ( 6e+14 ) MUESRL = ( 0 ) MUESRW = ( 0 ) MUESWP = ( 1 ) MUESLP = ( 1 ) MUETMP = ( 1.5 ) BB = ( 2 ) SUB1 = ( 10 ) SUB2 = ( 25 ) SVGS = ( 0.8 ) SVBS = ( 0.5 ) SVBSL = ( 0 ) SVDS = ( 0.8 ) SLG = ( 3e-08 ) SUB1L = ( 0.0025 ) SUB2L = ( 2e-06 ) FN1 = ( 0 ) FN2 = ( 0.00017 ) FN3 = ( 0 ) FVBS = ( 0.012 ) SVGSL = ( 0 ) SVGSLP = ( 1 ) SVGSWP = ( 1 ) SVGSW = ( 0 ) SVBSLP = ( 1 ) SLGL = ( 0 ) SLGLP = ( 1 ) SUB1LP = ( 1 ) NSTI = ( 1e+17 ) WSTI = ( 0 ) WSTIL = ( 0 ) WSTILP = ( 1 ) WSTIW = ( 0 ) WSTIWP = ( 1 ) SCSTI1 = ( 0 ) SCSTI2 = ( 0 ) VTHSTI = ( 0 ) VDSTI = ( 0 ) MUESTI1 = ( 0 ) MUESTI2 = ( 0 ) MUESTI3 = ( 1 ) NSUBPSTI1 = ( 0 ) NSUBPSTI2 = ( 0 ) NSUBPSTI3 = ( 1 ) LPEXT = ( 1e-50 ) NPEXT = ( 5e+17 ) SCP21 = ( 0 ) SCP22 = ( 0 ) BS1 = ( 0 ) BS2 = ( 0.9 ) TPOLY = ( 2e-07 ) CGBO = ( 0 ) JS0 = ( 5e-07 ) JS0SW = ( 0 ) NJ = ( 1 ) NJSW = ( 1 ) XTI = ( 2 ) CJ = ( 0.0005 ) CJSW = ( 5e-10 ) CJSWG = ( 5e-10 ) MJ = ( 0.5 ) MJSW = ( 0.33 ) MJSWG = ( 0.33 ) PB = ( 1 ) PBSW = ( 1 ) PBSWG = ( 1 ) XTI2 = ( 0 ) CISB = ( 0 ) CVB = ( 0 ) CTEMP = ( 0 ) CISBK = ( 0 ) DIVX = ( 0 ) CLM1 = ( 0.05 ) CLM2 = ( 2 ) CLM3 = ( 1 ) CLM5 = ( 1 ) CLM6 = ( 0 ) VOVER = ( 0.3 ) VOVERP = ( 0.3 ) WFC = ( 0 ) NSUBCW = ( 0 ) NSUBCWP = ( 1 ) QME1 = ( 0 ) QME2 = ( 1 ) QME3 = ( 0 ) VOVERS = ( 0 ) VOVERSP = ( 0 ) GIDL1 = ( 2 ) GIDL2 = ( 3e+07 ) GIDL3 = ( 0.9 ) GIDL4 = ( 0 ) GIDL5 = ( 0.2 ) GLEAK1 = ( 50 ) GLEAK2 = ( 1e+07 ) GLEAK3 = ( 0.06 ) GLEAK4 = ( 4 ) GLEAK5 = ( 7500 ) GLEAK6 = ( 0.25 ) GLEAK7 = ( 1e-06 ) GLPART1 = ( 0.5 ) GLKSD1 = ( 1e-15 ) GLKSD2 = ( 1000 ) GLKSD3 = ( -1000 ) GLKB1 = ( 5e-16 ) GLKB2 = ( 1 ) GLKB3 = ( 0 ) EGIG = ( 0 ) IGTEMP2 = ( 0 ) IGTEMP3 = ( 0 ) VZADD0 = ( 0.01 ) PZADD0 = ( 0.005 ) NFTRP = ( 1e+10 ) NFALP = ( 1e-19 ) CIT = ( 0 ) FALPH = ( 1 ) KAPPA = ( 3.9 ) VDIFFJ = ( 0.0006 ) DLY1 = ( 1e-10 ) DLY2 = ( 0.7 ) DLY3 = ( 8e-07 ) TNOM = ( 27 ) OVSLP = ( 2.1e-07 ) OVMAG = ( 0.6 ) GBMIN = ( 1e-12 ) RBPB = ( 50 ) RBDB = ( 50 ) RBSB = ( 50 ) IBPC1 = ( 0 ) IBPC1L = ( 0 ) IBPC1LP = ( -1 ) IBPC2 = ( 0 ) MPHDFM = ( -0.3 ) PTL = ( 0 ) PTP = ( 3.5 ) PT2 = ( 0 ) PTLP = ( 1 ) GDL = ( 0 ) GDLP = ( 0 ) GDLD = ( 0 ) PT4 = ( 0 ) PT4P = ( 1 ) RDVG11 = ( 0 ) RDVG12 = ( 100 ) RTH0 = ( 0.1 ) CTH0 = ( 1e-07 ) POWRAT = ( 1 ) TCJBD = ( 0 ) TCJBS = ( 0 ) TCJBDSW = ( 0 ) TCJBSSW = ( 0 ) TCJBDSWG = ( 0 ) TCJBSSWG = ( 0 ) DLYOV = ( 0 ) QDFTVD = ( 1 ) XLDLD = ( 1e-06 ) RDVD = ( 0.07 ) RD20 = ( 0 ) RD21 = ( 1 ) RD22 = ( 0 ) RD22D = ( 0 ) RD23 = ( 0.005 ) RD24 = ( 0 ) RD25 = ( 0 ) RDVDL = ( 0 ) RDVDLP = ( 1 ) RDVDS = ( 0 ) RDVDSP = ( 1 ) RD23L = ( 0 ) RD23LP = ( 1 ) RD23S = ( 0 ) RD23SP = ( 1 ) RDS = ( 0 ) RDSP = ( 1 ) RDTEMP1 = ( 0 ) RDTEMP2 = ( 0 ) RDVDTEMP1 = ( 0 ) RDVDTEMP2 = ( 0 ) RTH0W = ( 0 ) RTH0WP = ( 1 ) CVDSOVER = ( 0 ) NINVD = ( 0 ) NINVDW = ( 0 ) NINVDWP = ( 1 ) NINVDT1 = ( 0 ) NINVDT2 = ( 0 ) RDVB = ( 0 ) RTH0NF = ( 0 ) RTHTEMP1 = ( 0 ) RTHTEMP2 = ( 0 ) PRATTEMP1 = ( 0 ) PRATTEMP2 = ( 0 ) RDVSUB = ( 1 ) RDVDSUB = ( 0.3 ) DDRIFT = ( 1e-06 ) VBISUB = ( 0.7 ) NSUBSUB = ( 1e+15 ) RDRMUE = ( 1000 ) RDRVMAX = ( 1e+07 ) RDRMUETMP = ( 0 ) RDRVTMP = ( 0 ) RDRDJUNC = ( 1e-06 ) RDRCX = ( 0.1 ) RDRCAR = ( 1e-08 ) RDRDL1 = ( 0 ) RDRDL2 = ( 0 ) RDRVMAXW = ( 1.02 ) RDRVMAXWP = ( 1 ) RDRVMAXL = ( 1.02 ) RDRVMAXLP = ( 1 ) RDRMUEL = ( 1.02 ) RDRMUELP = ( 1 ) RDRQOVER = ( 3e5 ) SHEMAX = ( 500 ) tmpk8ny_4pz/tests/hisimhv2/pmos/parameters/pmosParameters0000644000175000017500000002100113546075722024113 0ustar carstencarsten CORSRD = ( 3 ) CORG = ( 0 ) COIPRV = ( 1 ) COPPRV = ( 1 ) COADOV = ( 1 ) COISUB = ( 0 ) COIIGS = ( 0 ) COGIDL = ( 0 ) COOVLP = ( 1 ) COOVLPS = ( 0 ) COFLICK = ( 0 ) COISTI = ( 0 ) CONQS = ( 0 ) COTHRML = ( 0 ) COIGN = ( 0 ) CODFM = ( 0 ) COQOVSM = ( 1 ) CORBNET = ( 0 ) COSELFHEAT = ( 0 ) COSUBNODE = ( 0 ) COSYM = ( 0 ) COTEMP = ( 0 ) CORDRIFT = ( 1 ) COERRREP = ( 1 ) VERSION = ( 2 ) VMAX = ( 1e+07 ) VMAXT1 = ( 0 ) VMAXT2 = ( 0 ) BGTMP1 = ( 9.025e-05 ) BGTMP2 = ( 1e-07 ) EG0 = ( 1.1785 ) TOX = ( 7e-09 ) XLD = ( 0 ) RDOV11 = ( 0 ) RDOV12 = ( 1 ) RDOV13 = ( 1 ) RDSLP1 = ( 0 ) RDICT1 = ( 1 ) RDSLP2 = ( 1 ) RDICT2 = ( 0 ) SUBLD1 = ( 0 ) SUBLD1L = ( 0 ) SUBLD1LP = ( 1 ) SUBLD2 = ( 0 ) XPDV = ( 0 ) XPVDTH = ( 0 ) XPVDTHG = ( 0 ) DDLTMAX = ( 10 ) DDLTSLP = ( 0 ) DDLTICT = ( 10 ) VFBOVER = ( -0.5 ) NOVER = ( 1e+17 ) NOVERS = ( 0 ) XWD = ( 0 ) XL = ( 0 ) XW = ( 0 ) SAREF = ( 1e-06 ) SBREF = ( 1e-06 ) LL = ( 0 ) LLD = ( 0 ) LLN = ( 0 ) WL = ( 0 ) WL1 = ( 0 ) WL1P = ( 1 ) WL2 = ( 0 ) WL2P = ( 1 ) WLD = ( 0 ) WLN = ( 0 ) RSH = ( 0 ) RSHG = ( 0 ) XQY = ( 0 ) XQY1 = ( 0 ) XQY2 = ( 2 ) RS = ( 0 ) RD = ( 0 ) VFBC = ( -1 ) VBI = ( 1.1 ) NSUBC = ( 3e+17 ) PARL2 = ( 1e-08 ) LP = ( 1.5e-08 ) NSUBP = ( 1e+18 ) NSUBP0 = ( 0 ) NSUBWP = ( 1 ) SCP1 = ( 1 ) SCP2 = ( 0 ) SCP3 = ( 0 ) SC1 = ( 1 ) SC2 = ( 0 ) SC3 = ( 0 ) SC4 = ( 0 ) PGD1 = ( 0 ) PGD2 = ( 1 ) PGD4 = ( 0 ) NDEP = ( 1 ) NDEPL = ( 0 ) NDEPLP = ( 1 ) NINV = ( 0.5 ) MUECB0 = ( 1000 ) MUECB1 = ( 100 ) MUEPH0 = ( 0.3 ) MUEPH1 = ( 9000 ) MUEPHW = ( 0 ) MUEPWP = ( 1 ) MUEPHL = ( 0 ) MUEPLP = ( 1 ) MUEPHS = ( 0 ) MUEPSP = ( 1 ) VTMP = ( 0 ) WVTH0 = ( 0 ) MUESR0 = ( 2 ) MUESR1 = ( 6e+14 ) MUESRL = ( 0 ) MUESRW = ( 0 ) MUESWP = ( 1 ) MUESLP = ( 1 ) MUETMP = ( 1.5 ) BB = ( 1 ) SUB1 = ( 10 ) SUB2 = ( 25 ) SVGS = ( 0.8 ) SVBS = ( 0.5 ) SVBSL = ( 0 ) SVDS = ( 0.8 ) SLG = ( 3e-08 ) SUB1L = ( 0.0025 ) SUB2L = ( 2e-06 ) FN1 = ( 0 ) FN2 = ( 0.00017 ) FN3 = ( 0 ) FVBS = ( 0.012 ) SVGSL = ( 0 ) SVGSLP = ( 1 ) SVGSWP = ( 1 ) SVGSW = ( 0 ) SVBSLP = ( 1 ) SLGL = ( 0 ) SLGLP = ( 1 ) SUB1LP = ( 1 ) NSTI = ( 1e+17 ) WSTI = ( 0 ) WSTIL = ( 0 ) WSTILP = ( 1 ) WSTIW = ( 0 ) WSTIWP = ( 1 ) SCSTI1 = ( 0 ) SCSTI2 = ( 0 ) VTHSTI = ( 0 ) VDSTI = ( 0 ) MUESTI1 = ( 0 ) MUESTI2 = ( 0 ) MUESTI3 = ( 1 ) NSUBPSTI1 = ( 0 ) NSUBPSTI2 = ( 0 ) NSUBPSTI3 = ( 1 ) LPEXT = ( 1e-50 ) NPEXT = ( 5e+17 ) SCP21 = ( 0 ) SCP22 = ( 0 ) BS1 = ( 0 ) BS2 = ( 0.9 ) TPOLY = ( 2e-07 ) CGBO = ( 0 ) JS0 = ( 5e-07 ) JS0SW = ( 0 ) NJ = ( 1 ) NJSW = ( 1 ) XTI = ( 2 ) CJ = ( 0.0005 ) CJSW = ( 5e-10 ) CJSWG = ( 5e-10 ) MJ = ( 0.5 ) MJSW = ( 0.33 ) MJSWG = ( 0.33 ) PB = ( 1 ) PBSW = ( 1 ) PBSWG = ( 1 ) XTI2 = ( 0 ) CISB = ( 0 ) CVB = ( 0 ) CTEMP = ( 0 ) CISBK = ( 0 ) DIVX = ( 0 ) CLM1 = ( 0.05 ) CLM2 = ( 2 ) CLM3 = ( 1 ) CLM5 = ( 1 ) CLM6 = ( 0 ) VOVER = ( 0.3 ) VOVERP = ( 0.3 ) WFC = ( 0 ) NSUBCW = ( 0 ) NSUBCWP = ( 1 ) QME1 = ( 0 ) QME2 = ( 1 ) QME3 = ( 0 ) VOVERS = ( 0 ) VOVERSP = ( 0 ) GIDL1 = ( 2 ) GIDL2 = ( 3e+07 ) GIDL3 = ( 0.9 ) GIDL4 = ( 0 ) GIDL5 = ( 0.2 ) GLEAK1 = ( 50 ) GLEAK2 = ( 1e+07 ) GLEAK3 = ( 0.06 ) GLEAK4 = ( 4 ) GLEAK5 = ( 7500 ) GLEAK6 = ( 0.25 ) GLEAK7 = ( 1e-06 ) GLPART1 = ( 0.5 ) GLKSD1 = ( 1e-15 ) GLKSD2 = ( 1000 ) GLKSD3 = ( -1000 ) GLKB1 = ( 5e-16 ) GLKB2 = ( 1 ) GLKB3 = ( 0 ) EGIG = ( 0 ) IGTEMP2 = ( 0 ) IGTEMP3 = ( 0 ) VZADD0 = ( 0.01 ) PZADD0 = ( 0.005 ) NFTRP = ( 1e+10 ) NFALP = ( 1e-19 ) CIT = ( 0 ) FALPH = ( 1 ) KAPPA = ( 3.9 ) VDIFFJ = ( 0.0006 ) DLY1 = ( 1e-10 ) DLY2 = ( 0.7 ) DLY3 = ( 8e-07 ) TNOM = ( 27 ) OVSLP = ( 2.1e-07 ) OVMAG = ( 0.6 ) GBMIN = ( 1e-12 ) RBPB = ( 50 ) RBDB = ( 50 ) RBSB = ( 50 ) IBPC1 = ( 0 ) IBPC1L = ( 0 ) IBPC1LP = ( -1 ) IBPC2 = ( 0 ) MPHDFM = ( -0.3 ) PTL = ( 0 ) PTP = ( 3.5 ) PT2 = ( 0 ) PTLP = ( 1 ) GDL = ( 0 ) GDLP = ( 0 ) GDLD = ( 0 ) PT4 = ( 0 ) PT4P = ( 1 ) RDVG11 = ( 0 ) RDVG12 = ( 100 ) RTH0 = ( 0.1 ) CTH0 = ( 1e-07 ) POWRAT = ( 1 ) TCJBD = ( 0 ) TCJBS = ( 0 ) TCJBDSW = ( 0 ) TCJBSSW = ( 0 ) TCJBDSWG = ( 0 ) TCJBSSWG = ( 0 ) DLYOV = ( 0 ) QDFTVD = ( 1 ) XLDLD = ( 1e-06 ) RDVD = ( 0.07 ) RD20 = ( 0 ) RD21 = ( 1 ) RD22 = ( 0 ) RD22D = ( 0 ) RD23 = ( 0.005 ) RD24 = ( 0 ) RD25 = ( 0 ) RDVDL = ( 0 ) RDVDLP = ( 1 ) RDVDS = ( 0 ) RDVDSP = ( 1 ) RD23L = ( 0 ) RD23LP = ( 1 ) RD23S = ( 0 ) RD23SP = ( 1 ) RDS = ( 0 ) RDSP = ( 1 ) RDTEMP1 = ( 0 ) RDTEMP2 = ( 0 ) RDVDTEMP1 = ( 0 ) RDVDTEMP2 = ( 0 ) RTH0W = ( 0 ) RTH0WP = ( 1 ) CVDSOVER = ( 0 ) NINVD = ( 0 ) NINVDW = ( 0 ) NINVDWP = ( 1 ) NINVDT1 = ( 0 ) NINVDT2 = ( 0 ) RDVB = ( 0 ) RTH0NF = ( 0 ) RTHTEMP1 = ( 0 ) RTHTEMP2 = ( 0 ) PRATTEMP1 = ( 0 ) PRATTEMP2 = ( 0 ) RDVSUB = ( 1 ) RDVDSUB = ( 0.3 ) DDRIFT = ( 1e-06 ) VBISUB = ( 0.7 ) NSUBSUB = ( 1e+15 ) RDRMUE = ( 1000 ) RDRVMAX = ( 1e+07 ) RDRMUETMP = ( 0 ) RDRVTMP = ( 0 ) RDRDJUNC = ( 1e-06 ) RDRCX = ( 0 ) RDRCAR = ( 1e-08 ) RDRDL1 = ( 0 ) RDRDL2 = ( 0 ) RDRVMAXW = ( 0 ) RDRVMAXWP = ( 1 ) RDRVMAXL = ( 0 ) RDRVMAXLP = ( 1 ) RDRMUEL = ( 0 ) RDRMUELP = ( 1 ) RDRQOVER = ( 0 ) SHEMAX = ( 500 ) tmpk8ny_4pz/tests/hisimhv2/pmos/reference/0000755000175000017500000000000013546075722020767 5ustar carstencarstentmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_NF_RD23.standard0000644000175000017500000000044213546075722024526 0ustar carstencarstenV(d) I(d) -1.000000e+00 -1.817262e-04 -3.000000e+00 -4.682581e-04 -5.000000e+00 -6.495658e-04 -7.000000e+00 -7.347139e-04 -9.000000e+00 -7.530119e-04 -1.100000e+01 -7.538835e-04 -1.300000e+01 -7.544759e-04 -1.500000e+01 -7.549873e-04 -1.700000e+01 -7.554349e-04 -1.900000e+01 -7.558329e-04 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/acFreq_coadov.standard0000644000175000017500000000713313546075722025251 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 7.09538360249507e-14 6.90994422055155e-14 5.15425033907477e-33 1258.925 7.09538570497621e-14 6.90994587597535e-14 5.15425228510955e-33 1584.893 7.09538444424256e-14 6.90994486938721e-14 5.15425092721157e-33 1995.262 7.09538421415848e-14 6.90994559153561e-14 5.15425118868146e-33 2511.886 7.09538220751598e-14 6.90994434451303e-14 5.15425132639596e-33 3162.278 7.09538136246388e-14 6.90994340039284e-14 5.15424928817175e-33 3981.072 7.0953836310425e-14 6.90994209192287e-14 5.15424815476485e-33 5011.872 7.09538287612029e-14 6.90994611911909e-14 5.15424951260637e-33 6309.573 7.09538302857706e-14 6.90994362092865e-14 5.15424994411098e-33 7943.282 7.09538359760579e-14 6.90994451665539e-14 5.15425111386274e-33 10000 7.09538360249507e-14 6.90994422055155e-14 5.15425033907477e-33 12589.25 7.09538570497621e-14 6.90994587597535e-14 5.15425228510955e-33 15848.93 7.09538444424256e-14 6.90994486938721e-14 5.15425092721157e-33 19952.62 7.09538421415848e-14 6.90994559153561e-14 5.15425118868146e-33 25118.86 7.09538220751599e-14 6.90994434451303e-14 5.15425132639596e-33 31622.78 7.09538136246388e-14 6.90994340039284e-14 5.15424928817174e-33 39810.72 7.0953836310425e-14 6.90994209192287e-14 5.15424815476485e-33 50118.72 7.09538287612029e-14 6.90994611911909e-14 5.15424951260637e-33 63095.73 7.09538302857706e-14 6.90994362092865e-14 5.15424994411098e-33 79432.82 7.09538359760578e-14 6.90994451665539e-14 5.15425111386274e-33 100000 7.09538360249507e-14 6.90994422055155e-14 5.15425033907477e-33 125892.5 7.09538570497621e-14 6.90994587597535e-14 5.15425228510955e-33 158489.3 7.09538444424256e-14 6.90994486938721e-14 5.15425092721157e-33 199526.2 7.09538421415848e-14 6.90994559153561e-14 5.15425118868146e-33 251188.6 7.09538220751598e-14 6.90994434451303e-14 5.15425132639596e-33 316227.8 7.09538136246388e-14 6.90994340039284e-14 5.15424928817174e-33 398107.2 7.0953836310425e-14 6.90994209192287e-14 5.15424815476485e-33 501187.2 7.09538287612029e-14 6.90994611911909e-14 5.15424951260637e-33 630957.3 7.09538302857706e-14 6.90994362092865e-14 5.15424994411098e-33 794328.2 7.09538359760579e-14 6.90994451665539e-14 5.15425111386274e-33 1000000 7.09538360249507e-14 6.90994422055155e-14 5.15425033907477e-33 1258925 7.09538570497621e-14 6.90994587597535e-14 5.15425228510954e-33 1584893 7.09538444424256e-14 6.90994486938721e-14 5.15425092721157e-33 1995262 7.09538421415848e-14 6.90994559153561e-14 5.15425118868146e-33 2511886 7.09538220751598e-14 6.90994434451302e-14 5.15425132639596e-33 3162278 7.09538136246388e-14 6.90994340039284e-14 5.15424928817174e-33 3981072 7.0953836310425e-14 6.90994209192287e-14 5.15424815476485e-33 5011872 7.09538287612029e-14 6.90994611911909e-14 5.15424951260637e-33 6309573 7.09538302857706e-14 6.90994362092865e-14 5.15424994411098e-33 7943282 7.09538359760579e-14 6.90994451665539e-14 5.15425111386274e-33 10000000 7.09538360249507e-14 6.90994422055155e-14 5.15425033907477e-33 12589250 7.09538570497621e-14 6.90994587597535e-14 5.15425228510954e-33 15848930 7.09538444424256e-14 6.90994486938721e-14 5.15425092721157e-33 19952620 7.09538421415848e-14 6.90994559153561e-14 5.15425118868146e-33 25118860 7.09538220751599e-14 6.90994434451303e-14 5.15425132639596e-33 31622780 7.09538136246388e-14 6.90994340039284e-14 5.15424928817174e-33 39810720 7.0953836310425e-14 6.90994209192287e-14 5.15424815476485e-33 50118720 7.09538287612029e-14 6.90994611911909e-14 5.15424951260637e-33 63095730 7.09538302857706e-14 6.90994362092865e-14 5.15424994411098e-33 79432820 7.09538359760579e-14 6.90994451665539e-14 5.15425111386274e-33 100000000 7.09538360249507e-14 6.90994422055155e-14 5.15425033907477e-33 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_COTEMP2.standard0000644000175000017500000000044213546075722024542 0ustar carstencarstenV(d) I(d) -1.000000e+00 -2.216231e-03 -3.000000e+00 -6.168359e-03 -5.000000e+00 -9.237027e-03 -7.000000e+00 -1.099754e-02 -9.000000e+00 -1.146674e-02 -1.100000e+01 -1.148422e-02 -1.300000e+01 -1.148751e-02 -1.500000e+01 -1.149029e-02 -1.700000e+01 -1.149269e-02 -1.900000e+01 -1.149479e-02 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_rdrbb.standard0000644000175000017500000001167213546075722024573 0ustar carstencarstenV(d) I(d) -1.000000e+00 -8.243273e-05 -2.000000e+00 -8.270482e-05 -3.000000e+00 -8.288994e-05 -4.000000e+00 -8.304122e-05 -5.000000e+00 -8.317271e-05 -6.000000e+00 -8.329071e-05 -7.000000e+00 -8.339874e-05 -8.000000e+00 -8.349899e-05 -9.000000e+00 -8.359297e-05 -1.000000e+01 -8.368173e-05 -1.100000e+01 -8.376607e-05 -1.200000e+01 -8.384661e-05 -1.300000e+01 -8.392383e-05 -1.400000e+01 -8.399811e-05 -1.500000e+01 -8.406977e-05 -1.600000e+01 -8.413908e-05 -1.700000e+01 -8.420625e-05 -1.800000e+01 -8.427149e-05 -1.900000e+01 -8.433495e-05 -2.000000e+01 -8.439677e-05 -1.000000e+00 -1.626865e-03 -2.000000e+00 -2.756160e-03 -3.000000e+00 -3.347284e-03 -4.000000e+00 -3.453425e-03 -5.000000e+00 -3.458750e-03 -6.000000e+00 -3.463186e-03 -7.000000e+00 -3.466890e-03 -8.000000e+00 -3.470051e-03 -9.000000e+00 -3.472824e-03 -1.000000e+01 -3.475312e-03 -1.100000e+01 -3.477584e-03 -1.200000e+01 -3.479688e-03 -1.300000e+01 -3.481657e-03 -1.400000e+01 -3.483514e-03 -1.500000e+01 -3.485278e-03 -1.600000e+01 -3.486962e-03 -1.700000e+01 -3.488576e-03 -1.800000e+01 -3.490129e-03 -1.900000e+01 -3.491627e-03 -2.000000e+01 -3.493076e-03 -1.000000e+00 -2.425776e-03 -2.000000e+00 -4.617417e-03 -3.000000e+00 -6.521251e-03 -4.000000e+00 -8.129329e-03 -5.000000e+00 -9.450342e-03 -6.000000e+00 -1.049487e-02 -7.000000e+00 -1.127222e-02 -8.000000e+00 -1.179735e-02 -9.000000e+00 -1.210447e-02 -1.000000e+01 -1.225178e-02 -1.100000e+01 -1.230468e-02 -1.200000e+01 -1.231455e-02 -1.300000e+01 -1.232002e-02 -1.400000e+01 -1.232638e-02 -1.500000e+01 -1.233244e-02 -1.600000e+01 -1.233813e-02 -1.700000e+01 -1.234346e-02 -1.800000e+01 -1.234844e-02 -1.900000e+01 -1.235312e-02 -2.000000e+01 -1.235753e-02 -1.000000e+00 -7.739371e-05 -2.000000e+00 -7.764763e-05 -3.000000e+00 -7.782211e-05 -4.000000e+00 -7.796534e-05 -5.000000e+00 -7.809014e-05 -6.000000e+00 -7.820230e-05 -7.000000e+00 -7.830509e-05 -8.000000e+00 -7.840056e-05 -9.000000e+00 -7.849009e-05 -1.000000e+01 -7.857469e-05 -1.100000e+01 -7.865511e-05 -1.200000e+01 -7.873193e-05 -1.300000e+01 -7.880559e-05 -1.400000e+01 -7.887647e-05 -1.500000e+01 -7.894486e-05 -1.600000e+01 -7.901102e-05 -1.700000e+01 -7.907515e-05 -1.800000e+01 -7.913744e-05 -1.900000e+01 -7.919803e-05 -2.000000e+01 -7.925707e-05 -1.000000e+00 -2.012302e-03 -2.000000e+00 -3.415092e-03 -3.000000e+00 -4.170793e-03 -4.000000e+00 -4.319204e-03 -5.000000e+00 -4.325617e-03 -6.000000e+00 -4.330999e-03 -7.000000e+00 -4.335521e-03 -8.000000e+00 -4.339370e-03 -9.000000e+00 -4.342735e-03 -1.000000e+01 -4.345746e-03 -1.100000e+01 -4.348490e-03 -1.200000e+01 -4.351028e-03 -1.300000e+01 -4.353399e-03 -1.400000e+01 -4.355634e-03 -1.500000e+01 -4.357755e-03 -1.600000e+01 -4.359778e-03 -1.700000e+01 -4.361717e-03 -1.800000e+01 -4.363581e-03 -1.900000e+01 -4.365379e-03 -2.000000e+01 -4.367118e-03 -1.000000e+00 -2.782040e-03 -2.000000e+00 -5.300730e-03 -3.000000e+00 -7.489891e-03 -4.000000e+00 -9.342360e-03 -5.000000e+00 -1.087194e-02 -6.000000e+00 -1.209537e-02 -7.000000e+00 -1.302764e-02 -8.000000e+00 -1.368625e-02 -9.000000e+00 -1.410205e-02 -1.000000e+01 -1.432716e-02 -1.100000e+01 -1.442646e-02 -1.200000e+01 -1.445602e-02 -1.300000e+01 -1.446120e-02 -1.400000e+01 -1.446616e-02 -1.500000e+01 -1.447285e-02 -1.600000e+01 -1.447946e-02 -1.700000e+01 -1.448572e-02 -1.800000e+01 -1.449162e-02 -1.900000e+01 -1.449717e-02 -2.000000e+01 -1.450239e-02 -1.000000e+00 -9.298229e-05 -2.000000e+00 -9.329414e-05 -3.000000e+00 -9.350169e-05 -4.000000e+00 -9.366981e-05 -5.000000e+00 -9.381527e-05 -6.000000e+00 -9.394545e-05 -7.000000e+00 -9.406440e-05 -8.000000e+00 -9.417464e-05 -9.000000e+00 -9.427787e-05 -1.000000e+01 -9.437530e-05 -1.100000e+01 -9.446781e-05 -1.200000e+01 -9.455611e-05 -1.300000e+01 -9.464072e-05 -1.400000e+01 -9.472209e-05 -1.500000e+01 -9.480056e-05 -1.600000e+01 -9.487644e-05 -1.700000e+01 -9.494996e-05 -1.800000e+01 -9.502134e-05 -1.900000e+01 -9.509076e-05 -2.000000e+01 -9.515838e-05 -1.000000e+00 -1.210628e-03 -2.000000e+00 -2.051618e-03 -3.000000e+00 -2.488549e-03 -4.000000e+00 -2.571074e-03 -5.000000e+00 -2.575214e-03 -6.000000e+00 -2.578591e-03 -7.000000e+00 -2.581404e-03 -8.000000e+00 -2.583811e-03 -9.000000e+00 -2.585929e-03 -1.000000e+01 -2.587833e-03 -1.100000e+01 -2.589575e-03 -1.200000e+01 -2.591190e-03 -1.300000e+01 -2.592703e-03 -1.400000e+01 -2.594131e-03 -1.500000e+01 -2.595488e-03 -1.600000e+01 -2.596784e-03 -1.700000e+01 -2.598026e-03 -1.800000e+01 -2.599222e-03 -1.900000e+01 -2.600376e-03 -2.000000e+01 -2.601493e-03 -1.000000e+00 -1.960467e-03 -2.000000e+00 -3.726436e-03 -3.000000e+00 -5.259437e-03 -4.000000e+00 -6.551325e-03 -5.000000e+00 -7.605243e-03 -6.000000e+00 -8.425259e-03 -7.000000e+00 -9.015762e-03 -8.000000e+00 -9.391460e-03 -9.000000e+00 -9.591127e-03 -1.000000e+01 -9.674356e-03 -1.100000e+01 -9.698224e-03 -1.200000e+01 -9.703991e-03 -1.300000e+01 -9.709484e-03 -1.400000e+01 -9.714640e-03 -1.500000e+01 -9.719441e-03 -1.600000e+01 -9.723914e-03 -1.700000e+01 -9.728091e-03 -1.800000e+01 -9.732003e-03 -1.900000e+01 -9.735683e-03 -2.000000e+01 -9.739157e-03 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/acVd_corsrd1.standard0000644000175000017500000000551413546075722025030 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -1 4.962487e-07 3.083275e-04 5.27388842792831e-13 1.92446952105852e-12 -2 3.494142e-06 2.951627e-04 5.55865150502915e-13 1.87859250863712e-12 -3 1.001879e-05 2.788533e-04 5.84939458374911e-13 1.82188849328426e-12 -4 2.166844e-05 2.575321e-04 6.1479666645888e-13 1.74639447284392e-12 -5 4.089578e-05 2.287744e-04 6.4504947464996e-13 1.63804844350876e-12 -6 7.152863e-05 1.890112e-04 6.74110882518463e-13 1.46742439731156e-12 -7 1.196425e-04 1.326854e-04 6.96023588451424e-13 1.16387831512513e-12 -8 1.885388e-04 5.829101e-05 6.87407686118631e-13 6.58219578215823e-13 -9 2.445854e-04 2.501420e-06 6.45156574678958e-13 2.67902772535845e-13 -10 2.471485e-04 1.188152e-07 6.33232771450536e-13 1.85237350153821e-13 -11 2.471761e-04 9.976792e-08 6.15930966765997e-13 5.2414494191453e-14 -12 2.471984e-04 8.567930e-08 6.13944466228143e-13 3.68995099907033e-14 -13 2.472170e-04 7.484155e-08 6.13142966011134e-13 3.04984982576015e-14 -14 2.472326e-04 6.649372e-08 6.12686765887615e-13 2.67782472503273e-14 -15 2.472457e-04 6.001309e-08 6.12385965806172e-13 2.42728365719764e-14 -16 2.472569e-04 5.490974e-08 6.12170665747879e-13 2.24386860753722e-14 -17 2.472666e-04 5.082079e-08 6.12008265703908e-13 2.10213556916238e-14 -18 2.472751e-04 4.748507e-08 6.11881165669496e-13 1.98837453836108e-14 -19 2.472827e-04 4.471613e-08 6.11778865641797e-13 1.89445451293183e-14 -20 2.472895e-04 4.238037e-08 6.11694965619081e-13 1.81521049147616e-14 -1 2.608536e-06 2.786275e-04 5.79832456992168e-13 1.86186350410767e-12 -2 7.916285e-06 2.629871e-04 6.10161465203879e-13 1.80848448965507e-12 -3 1.677424e-05 2.444262e-04 6.41275873628241e-13 1.74288047189249e-12 -4 3.041381e-05 2.214829e-04 6.73404782327283e-13 1.65693144862142e-12 -5 5.058763e-05 1.924270e-04 7.06355291248777e-13 1.53659041603856e-12 -6 7.989576e-05 1.547964e-04 7.39217900146472e-13 1.35261336622597e-12 -7 1.220084e-04 1.052488e-04 7.66878307635648e-13 1.04362128256502e-12 -8 1.755570e-04 4.676944e-05 7.68260808009966e-13 6.00215062510847e-13 -9 2.160084e-04 6.016760e-06 7.41573500784261e-13 2.94145479641172e-13 -10 2.223540e-04 1.084990e-07 7.21382595317486e-13 1.56017742242485e-13 -11 2.223786e-04 9.146701e-08 7.09220692024597e-13 5.04473736588466e-14 -12 2.223980e-04 7.931659e-08 7.07619891591173e-13 3.62791098227273e-14 -13 2.224145e-04 6.982635e-08 7.06945691408631e-13 3.01811881716884e-14 -14 2.224285e-04 6.235654e-08 7.06555591303009e-13 2.65826571973704e-14 -15 2.224406e-04 5.644269e-08 7.06295991232722e-13 2.41395965359011e-14 -16 2.224510e-04 5.171274e-08 7.06108991182091e-13 2.23420560492092e-14 -17 2.224601e-04 4.787932e-08 7.05967191143698e-13 2.09482256718235e-14 -18 2.224681e-04 4.472707e-08 7.05855791113536e-13 1.98266653681562e-14 -19 2.224753e-04 4.209680e-08 7.05765891089195e-13 1.88989551169746e-14 -20 2.224817e-04 3.987110e-08 7.05691891069159e-13 1.81150449047275e-14 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/acVd_corg.standard0000644000175000017500000000550713546075722024407 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -1 2.460788e-06 2.144733e-03 5.52874049693061e-13 6.86133485773635e-13 -2 3.765616e-05 1.981657e-03 5.80321957124702e-13 6.57590578045518e-13 -3 1.123391e-04 1.785065e-03 6.09691865076733e-13 6.23461968805049e-13 -4 2.352359e-04 1.544071e-03 6.41650373729639e-13 5.7980195698391e-13 -5 4.187927e-04 1.244826e-03 6.76853783261115e-13 5.1961094068693e-13 -6 6.723607e-04 8.833017e-04 7.12331692866914e-13 4.38355818686751e-13 -7 9.699029e-04 5.059907e-04 7.38337699908154e-13 3.51261195105501e-13 -8 1.230887e-03 2.117441e-04 7.48784002736536e-13 2.88919578226237e-13 -9 1.392875e-03 5.118161e-05 7.49423802909765e-13 2.49883367657012e-13 -10 1.449112e-03 2.042876e-06 7.36626199444758e-13 9.58225459443724e-14 -11 1.449441e-03 1.809495e-06 7.33456698586602e-13 4.45397320593268e-14 -12 1.449704e-03 1.643475e-06 7.32812598412209e-13 3.41136992364329e-14 -13 1.449941e-03 1.505476e-06 7.32496698326677e-13 2.89992878516837e-14 -14 1.450161e-03 1.386751e-06 7.32300398273528e-13 2.58217169913425e-14 -15 1.450366e-03 1.283902e-06 7.32163398236435e-13 2.3603346390709e-14 -16 1.450555e-03 1.194741e-06 7.32060798208656e-13 2.19419859408884e-14 -17 1.450731e-03 1.117403e-06 7.3198029818686e-13 2.06377955877732e-14 -18 1.450893e-03 1.050204e-06 7.31914898169153e-13 1.95787653010361e-14 -19 1.451043e-03 9.916385e-07 7.31860398154396e-13 1.86965950621847e-14 -20 1.451182e-03 9.403920e-07 7.3181409814186e-13 1.79469848592245e-14 -1 3.415552e-05 1.635579e-03 5.445740474458e-13 6.91499787226585e-13 -2 9.149376e-05 1.493452e-03 5.71824854824075e-13 6.63000679510327e-13 -3 1.755353e-04 1.330511e-03 6.01308862806998e-13 6.28458970158008e-13 -4 2.912939e-04 1.138639e-03 6.33789871601373e-13 5.83705958040935e-13 -5 4.459556e-04 9.085684e-04 6.70115981436826e-13 5.21559441214495e-13 -6 6.432207e-04 6.398814e-04 7.0729379150288e-13 4.37969318582104e-13 -7 8.621435e-04 3.674797e-04 7.35153499046018e-13 3.49132094529038e-13 -8 1.048538e-03 1.580313e-04 7.47078802274846e-13 2.84540177040495e-13 -9 1.162955e-03 4.356922e-05 7.48577202680544e-13 2.39210164767196e-13 -10 1.209992e-03 2.181629e-06 7.38920600065977e-13 8.61595633280777e-14 -11 1.211048e-03 1.363443e-06 7.36833499500885e-13 4.35074717798378e-14 -12 1.211266e-03 1.236791e-06 7.36396199382484e-13 3.36802791190825e-14 -13 1.211463e-03 1.132411e-06 7.36176799323081e-13 2.87483077837298e-14 -14 1.211644e-03 1.042959e-06 7.36039099285798e-13 2.56534069457719e-14 -15 1.211812e-03 9.656511e-07 7.35942499259643e-13 2.34805463574604e-14 -16 1.211968e-03 8.987207e-07 7.35869899239986e-13 2.18473359152615e-14 -17 1.212112e-03 8.407066e-07 7.35812699224499e-13 2.05619755672446e-14 -18 1.212246e-03 7.903130e-07 7.35766199211909e-13 1.95162552841113e-14 -19 1.212370e-03 7.463956e-07 7.35727399201404e-13 1.86439250479241e-14 -20 1.212485e-03 7.079620e-07 7.35694399192469e-13 1.79018048469918e-14 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/acVg_QOVADD.standard0000644000175000017500000000265313546075722024435 0ustar carstencarstenV(g) g(d,g) g(d,d) c(g,s) c(g,d) -1 2.381738e-04 5.118127e-08 6.17726167252055e-13 7.26481196697954e-14 -2 6.270266e-04 1.120769e-04 6.69645781309517e-13 2.96168480188908e-13 -3 4.692911e-04 7.351832e-04 6.11666465611365e-13 5.6738295362141e-13 -4 3.345672e-04 1.208114e-03 5.8548895852369e-13 6.30112670605755e-13 -5 2.329793e-04 1.547280e-03 5.73380955245396e-13 6.54084877096335e-13 -6 1.565682e-04 1.785343e-03 5.66421153360999e-13 6.66340080414484e-13 -7 9.935819e-05 1.947239e-03 5.61756052097902e-13 6.73800082434312e-13 -8 5.681265e-05 2.051997e-03 5.58239051145659e-13 6.78968683833734e-13 -9 2.541937e-05 2.114145e-03 5.55353150364289e-13 6.8291948490343e-13 -10 2.460788e-06 2.144733e-03 5.52848649686184e-13 6.86162085781379e-13 -1 2.054560e-04 6.400416e-08 6.19512767735785e-13 7.33436498581132e-14 -2 3.816148e-04 1.365661e-04 6.55310977428307e-13 3.40425892171796e-13 -3 3.035544e-04 5.194351e-04 5.98214361969149e-13 5.71752254804418e-13 -4 2.367489e-04 8.263559e-04 5.74474155541384e-13 6.31586071004685e-13 -5 1.831844e-04 1.066210e-03 5.62905752409189e-13 6.56859977847705e-13 -6 1.397834e-04 1.252266e-03 5.56229850601659e-13 6.70386081509957e-13 -7 1.045005e-04 1.394770e-03 5.51907649431404e-13 6.78676983754755e-13 -8 7.587163e-05 1.501897e-03 5.48835648599647e-13 6.84277585271142e-13 -9 5.274211e-05 1.580331e-03 5.46473847960179e-13 6.88364186377607e-13 -10 3.415552e-05 1.635579e-03 5.4453814743608e-13 6.91539987237469e-13 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_rs2m.standard0000644000175000017500000001511213546075722024354 0ustar carstencarstenV(d) I(d) -1.000000e+00 -2.521999e-12 -2.000000e+00 -2.524027e-12 -3.000000e+00 -2.525502e-12 -4.000000e+00 -2.527052e-12 -5.000000e+00 -2.528537e-12 -6.000000e+00 -2.529975e-12 -7.000000e+00 -2.531378e-12 -8.000000e+00 -2.532754e-12 -9.000000e+00 -2.534107e-12 -1.000000e+01 -2.535440e-12 -1.100000e+01 -2.536756e-12 -1.200000e+01 -2.538060e-12 -1.300000e+01 -2.539352e-12 -1.400000e+01 -2.540630e-12 -1.500000e+01 -2.541902e-12 -1.600000e+01 -2.543162e-12 -1.700000e+01 -2.544417e-12 -1.800000e+01 -2.545663e-12 -1.900000e+01 -2.546898e-12 -2.000000e+01 -2.548132e-12 -1.000000e+00 -9.425375e-07 -2.000000e+00 -9.428473e-07 -3.000000e+00 -9.430832e-07 -4.000000e+00 -9.432816e-07 -5.000000e+00 -9.434562e-07 -6.000000e+00 -9.436139e-07 -7.000000e+00 -9.437588e-07 -8.000000e+00 -9.438937e-07 -9.000000e+00 -9.440204e-07 -1.000000e+01 -9.441402e-07 -1.100000e+01 -9.442541e-07 -1.200000e+01 -9.443630e-07 -1.300000e+01 -9.444674e-07 -1.400000e+01 -9.445678e-07 -1.500000e+01 -9.446647e-07 -1.600000e+01 -9.447585e-07 -1.700000e+01 -9.448493e-07 -1.800000e+01 -9.449376e-07 -1.900000e+01 -9.450234e-07 -2.000000e+01 -9.451069e-07 -1.000000e+00 -1.907689e-04 -2.000000e+00 -2.388822e-04 -3.000000e+00 -2.389567e-04 -4.000000e+00 -2.390035e-04 -5.000000e+00 -2.390391e-04 -6.000000e+00 -2.390688e-04 -7.000000e+00 -2.390949e-04 -8.000000e+00 -2.391185e-04 -9.000000e+00 -2.391402e-04 -1.000000e+01 -2.391604e-04 -1.100000e+01 -2.391793e-04 -1.200000e+01 -2.391973e-04 -1.300000e+01 -2.392144e-04 -1.400000e+01 -2.392307e-04 -1.500000e+01 -2.392464e-04 -1.600000e+01 -2.392614e-04 -1.700000e+01 -2.392760e-04 -1.800000e+01 -2.392901e-04 -1.900000e+01 -2.393037e-04 -2.000000e+01 -2.393170e-04 -1.000000e+00 -3.143343e-04 -2.000000e+00 -6.150997e-04 -3.000000e+00 -9.000101e-04 -4.000000e+00 -1.165175e-03 -5.000000e+00 -1.403350e-03 -6.000000e+00 -1.598798e-03 -7.000000e+00 -1.715050e-03 -8.000000e+00 -1.730029e-03 -9.000000e+00 -1.730712e-03 -1.000000e+01 -1.731214e-03 -1.100000e+01 -1.731604e-03 -1.200000e+01 -1.731918e-03 -1.300000e+01 -1.732178e-03 -1.400000e+01 -1.732401e-03 -1.500000e+01 -1.732595e-03 -1.600000e+01 -1.732766e-03 -1.700000e+01 -1.732921e-03 -1.800000e+01 -1.733061e-03 -1.900000e+01 -1.733190e-03 -2.000000e+01 -1.733309e-03 -1.000000e+00 -1.343543e-15 -2.000000e+00 -2.343611e-15 -3.000000e+00 -3.343463e-15 -4.000000e+00 -4.343748e-15 -5.000000e+00 -5.343816e-15 -6.000000e+00 -6.344317e-15 -7.000000e+00 -7.345253e-15 -8.000000e+00 -8.344020e-15 -9.000000e+00 -9.344955e-15 -1.000000e+01 -1.034589e-14 -1.100000e+01 -1.134509e-14 -1.200000e+01 -1.234603e-14 -1.300000e+01 -1.334436e-14 -1.400000e+01 -1.434356e-14 -1.500000e+01 -1.534450e-14 -1.600000e+01 -1.634630e-14 -1.700000e+01 -1.734463e-14 -1.800000e+01 -1.834297e-14 -1.900000e+01 -1.934217e-14 -2.000000e+01 -2.034484e-14 -1.000000e+00 -4.271010e-08 -2.000000e+00 -4.272449e-08 -3.000000e+00 -4.273552e-08 -4.000000e+00 -4.274482e-08 -5.000000e+00 -4.275301e-08 -6.000000e+00 -4.276041e-08 -7.000000e+00 -4.276722e-08 -8.000000e+00 -4.277356e-08 -9.000000e+00 -4.277952e-08 -1.000000e+01 -4.278515e-08 -1.100000e+01 -4.279051e-08 -1.200000e+01 -4.279564e-08 -1.300000e+01 -4.280055e-08 -1.400000e+01 -4.280528e-08 -1.500000e+01 -4.280984e-08 -1.600000e+01 -4.281425e-08 -1.700000e+01 -4.281853e-08 -1.800000e+01 -4.282268e-08 -1.900000e+01 -4.282672e-08 -2.000000e+01 -4.283066e-08 -1.000000e+00 -2.329836e-04 -2.000000e+00 -3.052885e-04 -3.000000e+00 -3.053985e-04 -4.000000e+00 -3.054644e-04 -5.000000e+00 -3.055131e-04 -6.000000e+00 -3.055532e-04 -7.000000e+00 -3.055882e-04 -8.000000e+00 -3.056196e-04 -9.000000e+00 -3.056483e-04 -1.000000e+01 -3.056750e-04 -1.100000e+01 -3.057001e-04 -1.200000e+01 -3.057237e-04 -1.300000e+01 -3.057462e-04 -1.400000e+01 -3.057676e-04 -1.500000e+01 -3.057882e-04 -1.600000e+01 -3.058080e-04 -1.700000e+01 -3.058271e-04 -1.800000e+01 -3.058456e-04 -1.900000e+01 -3.058635e-04 -2.000000e+01 -3.058808e-04 -1.000000e+00 -3.465264e-04 -2.000000e+00 -6.822056e-04 -3.000000e+00 -1.005744e-03 -4.000000e+00 -1.315073e-03 -5.000000e+00 -1.606733e-03 -6.000000e+00 -1.874279e-03 -7.000000e+00 -2.103550e-03 -8.000000e+00 -2.258141e-03 -9.000000e+00 -2.287427e-03 -1.000000e+01 -2.288865e-03 -1.100000e+01 -2.289890e-03 -1.200000e+01 -2.290663e-03 -1.300000e+01 -2.291272e-03 -1.400000e+01 -2.291768e-03 -1.500000e+01 -2.292183e-03 -1.600000e+01 -2.292538e-03 -1.700000e+01 -2.292848e-03 -1.800000e+01 -2.293121e-03 -1.900000e+01 -2.293366e-03 -2.000000e+01 -2.293588e-03 -1.000000e+00 -6.715818e-09 -2.000000e+00 -6.718078e-09 -3.000000e+00 -6.719812e-09 -4.000000e+00 -6.721274e-09 -5.000000e+00 -6.722563e-09 -6.000000e+00 -6.723728e-09 -7.000000e+00 -6.724799e-09 -8.000000e+00 -6.725797e-09 -9.000000e+00 -6.726734e-09 -1.000000e+01 -6.727621e-09 -1.100000e+01 -6.728464e-09 -1.200000e+01 -6.729270e-09 -1.300000e+01 -6.730044e-09 -1.400000e+01 -6.730788e-09 -1.500000e+01 -6.731506e-09 -1.600000e+01 -6.732201e-09 -1.700000e+01 -6.732874e-09 -1.800000e+01 -6.733528e-09 -1.900000e+01 -6.734164e-09 -2.000000e+01 -6.734784e-09 -1.000000e+00 -5.427155e-06 -2.000000e+00 -5.428834e-06 -3.000000e+00 -5.430088e-06 -4.000000e+00 -5.431134e-06 -5.000000e+00 -5.432051e-06 -6.000000e+00 -5.432878e-06 -7.000000e+00 -5.433636e-06 -8.000000e+00 -5.434341e-06 -9.000000e+00 -5.435002e-06 -1.000000e+01 -5.435627e-06 -1.100000e+01 -5.436221e-06 -1.200000e+01 -5.436788e-06 -1.300000e+01 -5.437332e-06 -1.400000e+01 -5.437855e-06 -1.500000e+01 -5.438359e-06 -1.600000e+01 -5.438847e-06 -1.700000e+01 -5.439319e-06 -1.800000e+01 -5.439778e-06 -1.900000e+01 -5.440224e-06 -2.000000e+01 -5.440659e-06 -1.000000e+00 -1.491500e-04 -2.000000e+00 -1.860187e-04 -3.000000e+00 -1.860713e-04 -4.000000e+00 -1.861050e-04 -5.000000e+00 -1.861309e-04 -6.000000e+00 -1.861528e-04 -7.000000e+00 -1.861721e-04 -8.000000e+00 -1.861896e-04 -9.000000e+00 -1.862057e-04 -1.000000e+01 -1.862207e-04 -1.100000e+01 -1.862348e-04 -1.200000e+01 -1.862482e-04 -1.300000e+01 -1.862609e-04 -1.400000e+01 -1.862731e-04 -1.500000e+01 -1.862848e-04 -1.600000e+01 -1.862960e-04 -1.700000e+01 -1.863069e-04 -1.800000e+01 -1.863174e-04 -1.900000e+01 -1.863276e-04 -2.000000e+01 -1.863375e-04 -1.000000e+00 -2.686617e-04 -2.000000e+00 -5.200436e-04 -3.000000e+00 -7.504402e-04 -4.000000e+00 -9.530351e-04 -5.000000e+00 -1.113815e-03 -6.000000e+00 -1.205028e-03 -7.000000e+00 -1.218822e-03 -8.000000e+00 -1.219142e-03 -9.000000e+00 -1.219383e-03 -1.000000e+01 -1.219576e-03 -1.100000e+01 -1.219734e-03 -1.200000e+01 -1.219869e-03 -1.300000e+01 -1.219986e-03 -1.400000e+01 -1.220089e-03 -1.500000e+01 -1.220183e-03 -1.600000e+01 -1.220268e-03 -1.700000e+01 -1.220347e-03 -1.800000e+01 -1.220420e-03 -1.900000e+01 -1.220489e-03 -2.000000e+01 -1.220554e-03 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_coisti.standard0000644000175000017500000001167213546075722024772 0ustar carstencarstenV(d) I(d) -1.000000e+00 -8.916384e-04 -2.000000e+00 -9.479414e-04 -3.000000e+00 -9.506846e-04 -4.000000e+00 -9.520074e-04 -5.000000e+00 -9.530599e-04 -6.000000e+00 -9.539708e-04 -7.000000e+00 -9.547878e-04 -8.000000e+00 -9.555361e-04 -9.000000e+00 -9.562313e-04 -1.000000e+01 -9.568834e-04 -1.100000e+01 -9.574998e-04 -1.200000e+01 -9.580859e-04 -1.300000e+01 -9.586459e-04 -1.400000e+01 -9.591830e-04 -1.500000e+01 -9.596998e-04 -1.600000e+01 -9.601986e-04 -1.700000e+01 -9.606810e-04 -1.800000e+01 -9.611488e-04 -1.900000e+01 -9.616030e-04 -2.000000e+01 -9.620449e-04 -1.000000e+00 -2.533474e-03 -2.000000e+00 -4.285680e-03 -3.000000e+00 -5.324736e-03 -4.000000e+00 -5.703977e-03 -5.000000e+00 -5.739643e-03 -6.000000e+00 -5.750189e-03 -7.000000e+00 -5.755849e-03 -8.000000e+00 -5.759976e-03 -9.000000e+00 -5.763404e-03 -1.000000e+01 -5.766409e-03 -1.100000e+01 -5.769118e-03 -1.200000e+01 -5.771606e-03 -1.300000e+01 -5.773918e-03 -1.400000e+01 -5.776089e-03 -1.500000e+01 -5.778141e-03 -1.600000e+01 -5.780094e-03 -1.700000e+01 -5.781961e-03 -1.800000e+01 -5.783753e-03 -1.900000e+01 -5.785478e-03 -2.000000e+01 -5.787145e-03 -1.000000e+00 -3.094939e-03 -2.000000e+00 -5.753887e-03 -3.000000e+00 -7.965059e-03 -4.000000e+00 -9.776439e-03 -5.000000e+00 -1.124677e-02 -6.000000e+00 -1.242935e-02 -7.000000e+00 -1.336790e-02 -8.000000e+00 -1.409519e-02 -9.000000e+00 -1.463236e-02 -1.000000e+01 -1.499119e-02 -1.100000e+01 -1.518647e-02 -1.200000e+01 -1.525710e-02 -1.300000e+01 -1.527169e-02 -1.400000e+01 -1.528164e-02 -1.500000e+01 -1.528942e-02 -1.600000e+01 -1.529594e-02 -1.700000e+01 -1.530167e-02 -1.800000e+01 -1.530684e-02 -1.900000e+01 -1.531160e-02 -2.000000e+01 -1.531602e-02 -1.000000e+00 -1.122201e-03 -2.000000e+00 -1.168756e-03 -3.000000e+00 -1.171630e-03 -4.000000e+00 -1.173214e-03 -5.000000e+00 -1.174489e-03 -6.000000e+00 -1.175594e-03 -7.000000e+00 -1.176586e-03 -8.000000e+00 -1.177495e-03 -9.000000e+00 -1.178340e-03 -1.000000e+01 -1.179133e-03 -1.100000e+01 -1.179883e-03 -1.200000e+01 -1.180596e-03 -1.300000e+01 -1.181277e-03 -1.400000e+01 -1.181931e-03 -1.500000e+01 -1.182560e-03 -1.600000e+01 -1.183167e-03 -1.700000e+01 -1.183754e-03 -1.800000e+01 -1.184323e-03 -1.900000e+01 -1.184876e-03 -2.000000e+01 -1.185414e-03 -1.000000e+00 -3.205531e-03 -2.000000e+00 -5.375340e-03 -3.000000e+00 -6.669903e-03 -4.000000e+00 -7.165648e-03 -5.000000e+00 -7.208829e-03 -6.000000e+00 -7.220719e-03 -7.000000e+00 -7.227295e-03 -8.000000e+00 -7.232165e-03 -9.000000e+00 -7.236229e-03 -1.000000e+01 -7.239794e-03 -1.100000e+01 -7.243006e-03 -1.200000e+01 -7.245951e-03 -1.300000e+01 -7.248687e-03 -1.400000e+01 -7.251253e-03 -1.500000e+01 -7.253678e-03 -1.600000e+01 -7.255984e-03 -1.700000e+01 -7.258187e-03 -1.800000e+01 -7.260301e-03 -1.900000e+01 -7.262336e-03 -2.000000e+01 -7.264301e-03 -1.000000e+00 -3.589223e-03 -2.000000e+00 -6.633849e-03 -3.000000e+00 -9.127032e-03 -4.000000e+00 -1.114025e-02 -5.000000e+00 -1.275585e-02 -6.000000e+00 -1.404848e-02 -7.000000e+00 -1.508150e-02 -8.000000e+00 -1.590653e-02 -9.000000e+00 -1.656363e-02 -1.000000e+01 -1.708146e-02 -1.100000e+01 -1.747731e-02 -1.200000e+01 -1.775718e-02 -1.300000e+01 -1.792043e-02 -1.400000e+01 -1.797641e-02 -1.500000e+01 -1.798963e-02 -1.600000e+01 -1.799965e-02 -1.700000e+01 -1.800778e-02 -1.800000e+01 -1.801476e-02 -1.900000e+01 -1.802099e-02 -2.000000e+01 -1.802666e-02 -1.000000e+00 -6.869515e-04 -2.000000e+00 -7.621914e-04 -3.000000e+00 -7.652476e-04 -4.000000e+00 -7.663435e-04 -5.000000e+00 -7.671892e-04 -6.000000e+00 -7.679170e-04 -7.000000e+00 -7.685684e-04 -8.000000e+00 -7.691641e-04 -9.000000e+00 -7.697170e-04 -1.000000e+01 -7.702352e-04 -1.100000e+01 -7.707248e-04 -1.200000e+01 -7.711901e-04 -1.300000e+01 -7.716344e-04 -1.400000e+01 -7.720605e-04 -1.500000e+01 -7.724703e-04 -1.600000e+01 -7.728658e-04 -1.700000e+01 -7.732482e-04 -1.800000e+01 -7.736189e-04 -1.900000e+01 -7.739789e-04 -2.000000e+01 -7.743290e-04 -1.000000e+00 -1.837174e-03 -2.000000e+00 -3.139595e-03 -3.000000e+00 -3.921149e-03 -4.000000e+00 -4.214176e-03 -5.000000e+00 -4.249680e-03 -6.000000e+00 -4.259022e-03 -7.000000e+00 -4.263714e-03 -8.000000e+00 -4.267001e-03 -9.000000e+00 -4.269690e-03 -1.000000e+01 -4.272037e-03 -1.100000e+01 -4.274151e-03 -1.200000e+01 -4.276090e-03 -1.300000e+01 -4.277894e-03 -1.400000e+01 -4.279588e-03 -1.500000e+01 -4.281191e-03 -1.600000e+01 -4.282716e-03 -1.700000e+01 -4.284175e-03 -1.800000e+01 -4.285575e-03 -1.900000e+01 -4.286923e-03 -2.000000e+01 -4.288226e-03 -1.000000e+00 -2.464277e-03 -2.000000e+00 -4.608584e-03 -3.000000e+00 -6.420518e-03 -4.000000e+00 -7.924975e-03 -5.000000e+00 -9.154777e-03 -6.000000e+00 -1.013774e-02 -7.000000e+00 -1.089235e-02 -8.000000e+00 -1.142905e-02 -9.000000e+00 -1.176111e-02 -1.000000e+01 -1.192442e-02 -1.100000e+01 -1.198114e-02 -1.200000e+01 -1.199530e-02 -1.300000e+01 -1.200403e-02 -1.400000e+01 -1.201071e-02 -1.500000e+01 -1.201621e-02 -1.600000e+01 -1.202100e-02 -1.700000e+01 -1.202529e-02 -1.800000e+01 -1.202923e-02 -1.900000e+01 -1.203288e-02 -2.000000e+01 -1.203631e-02 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_NF_RDS.standard0000644000175000017500000000044213546075722024504 0ustar carstencarstenV(d) I(d) -1.000000e+00 -1.478361e-03 -3.000000e+00 -4.100815e-03 -5.000000e+00 -6.323941e-03 -7.000000e+00 -8.175053e-03 -9.000000e+00 -9.643959e-03 -1.100000e+01 -1.066606e-02 -1.300000e+01 -1.116940e-02 -1.500000e+01 -1.127656e-02 -1.700000e+01 -1.128575e-02 -1.900000e+01 -1.129292e-02 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_Ig1_vb0.standard0000644000175000017500000001167213546075722024667 0ustar carstencarstenV(g) I(d) -1.000000e+00 -8.813838e-05 -2.000000e+00 -8.427276e-04 -3.000000e+00 -2.136842e-03 -4.000000e+00 -3.358829e-03 -5.000000e+00 -4.215517e-03 -6.000000e+00 -4.807209e-03 -7.000000e+00 -5.208367e-03 -8.000000e+00 -5.471379e-03 -9.000000e+00 -5.633828e-03 -1.000000e+01 -5.722784e-03 -1.100000e+01 -5.757827e-03 -1.200000e+01 -5.753220e-03 -1.300000e+01 -5.719449e-03 -1.400000e+01 -5.664293e-03 -1.500000e+01 -5.593579e-03 -1.600000e+01 -5.511700e-03 -1.700000e+01 -5.421994e-03 -1.800000e+01 -5.327005e-03 -1.900000e+01 -5.228682e-03 -2.000000e+01 -5.128516e-03 -1.000000e+00 -8.857496e-05 -2.000000e+00 -8.463978e-04 -3.000000e+00 -2.152038e-03 -4.000000e+00 -3.773364e-03 -5.000000e+00 -5.569017e-03 -6.000000e+00 -7.430415e-03 -7.000000e+00 -8.980460e-03 -8.000000e+00 -1.004667e-02 -9.000000e+00 -1.073975e-02 -1.000000e+01 -1.118290e-02 -1.100000e+01 -1.145935e-02 -1.200000e+01 -1.162196e-02 -1.300000e+01 -1.170453e-02 -1.400000e+01 -1.172925e-02 -1.500000e+01 -1.171108e-02 -1.600000e+01 -1.166044e-02 -1.700000e+01 -1.158479e-02 -1.800000e+01 -1.148966e-02 -1.900000e+01 -1.137925e-02 -2.000000e+01 -1.125680e-02 -1.000000e+00 -8.905477e-05 -2.000000e+00 -8.497913e-04 -3.000000e+00 -2.159587e-03 -4.000000e+00 -3.786221e-03 -5.000000e+00 -5.588242e-03 -6.000000e+00 -7.478077e-03 -7.000000e+00 -9.399877e-03 -8.000000e+00 -1.131734e-02 -9.000000e+00 -1.320627e-02 -1.000000e+01 -1.485114e-02 -1.100000e+01 -1.577577e-02 -1.200000e+01 -1.620071e-02 -1.300000e+01 -1.641459e-02 -1.400000e+01 -1.652858e-02 -1.500000e+01 -1.658666e-02 -1.600000e+01 -1.660949e-02 -1.700000e+01 -1.660812e-02 -1.800000e+01 -1.658904e-02 -1.900000e+01 -1.655633e-02 -2.000000e+01 -1.651270e-02 -1.000000e+00 -7.417996e-05 -2.000000e+00 -1.061526e-03 -3.000000e+00 -2.773246e-03 -4.000000e+00 -4.324547e-03 -5.000000e+00 -5.312153e-03 -6.000000e+00 -5.926788e-03 -7.000000e+00 -6.295175e-03 -8.000000e+00 -6.499028e-03 -9.000000e+00 -6.591772e-03 -1.000000e+01 -6.608725e-03 -1.100000e+01 -6.573620e-03 -1.200000e+01 -6.502704e-03 -1.300000e+01 -6.407301e-03 -1.400000e+01 -6.295429e-03 -1.500000e+01 -6.172835e-03 -1.600000e+01 -6.043677e-03 -1.700000e+01 -5.910978e-03 -1.800000e+01 -5.776945e-03 -1.900000e+01 -5.643181e-03 -2.000000e+01 -5.510847e-03 -1.000000e+00 -7.456138e-05 -2.000000e+00 -1.066066e-03 -3.000000e+00 -2.787886e-03 -4.000000e+00 -4.847594e-03 -5.000000e+00 -7.046557e-03 -6.000000e+00 -9.236808e-03 -7.000000e+00 -1.086870e-02 -8.000000e+00 -1.184233e-02 -9.000000e+00 -1.239886e-02 -1.000000e+01 -1.270961e-02 -1.100000e+01 -1.286908e-02 -1.200000e+01 -1.293029e-02 -1.300000e+01 -1.292452e-02 -1.400000e+01 -1.287125e-02 -1.500000e+01 -1.278321e-02 -1.600000e+01 -1.266914e-02 -1.700000e+01 -1.253525e-02 -1.800000e+01 -1.238618e-02 -1.900000e+01 -1.222547e-02 -2.000000e+01 -1.205589e-02 -1.000000e+00 -7.498350e-05 -2.000000e+00 -1.070279e-03 -3.000000e+00 -2.797239e-03 -4.000000e+00 -4.863256e-03 -5.000000e+00 -7.069683e-03 -6.000000e+00 -9.311170e-03 -7.000000e+00 -1.152926e-02 -8.000000e+00 -1.369074e-02 -9.000000e+00 -1.574581e-02 -1.000000e+01 -1.700790e-02 -1.100000e+01 -1.748927e-02 -1.200000e+01 -1.769707e-02 -1.300000e+01 -1.779374e-02 -1.400000e+01 -1.783249e-02 -1.500000e+01 -1.783598e-02 -1.600000e+01 -1.781568e-02 -1.700000e+01 -1.777809e-02 -1.800000e+01 -1.772720e-02 -1.900000e+01 -1.766560e-02 -2.000000e+01 -1.759505e-02 -1.000000e+00 -1.107588e-04 -2.000000e+00 -6.621137e-04 -3.000000e+00 -1.558903e-03 -4.000000e+00 -2.412188e-03 -5.000000e+00 -3.066626e-03 -6.000000e+00 -3.564666e-03 -7.000000e+00 -3.940940e-03 -8.000000e+00 -4.221391e-03 -9.000000e+00 -4.426206e-03 -1.000000e+01 -4.571277e-03 -1.100000e+01 -4.669137e-03 -1.200000e+01 -4.729672e-03 -1.300000e+01 -4.760693e-03 -1.400000e+01 -4.768383e-03 -1.500000e+01 -4.757653e-03 -1.600000e+01 -4.732417e-03 -1.700000e+01 -4.695807e-03 -1.800000e+01 -4.650337e-03 -1.900000e+01 -4.598028e-03 -2.000000e+01 -4.540513e-03 -1.000000e+00 -1.112748e-04 -2.000000e+00 -6.649969e-04 -3.000000e+00 -1.580498e-03 -4.000000e+00 -2.745525e-03 -5.000000e+00 -4.079039e-03 -6.000000e+00 -5.506499e-03 -7.000000e+00 -6.791859e-03 -8.000000e+00 -7.793191e-03 -9.000000e+00 -8.532821e-03 -1.000000e+01 -9.069689e-03 -1.100000e+01 -9.454857e-03 -1.200000e+01 -9.726728e-03 -1.300000e+01 -9.913403e-03 -1.400000e+01 -1.003533e-02 -1.500000e+01 -1.010744e-02 -1.600000e+01 -1.014073e-02 -1.700000e+01 -1.014340e-02 -1.800000e+01 -1.012166e-02 -1.900000e+01 -1.008028e-02 -2.000000e+01 -1.002301e-02 -1.000000e+00 -1.118347e-04 -2.000000e+00 -6.676351e-04 -3.000000e+00 -1.586184e-03 -4.000000e+00 -2.755274e-03 -5.000000e+00 -4.093784e-03 -6.000000e+00 -5.543615e-03 -7.000000e+00 -7.062690e-03 -8.000000e+00 -8.620236e-03 -9.000000e+00 -1.019350e-02 -1.000000e+01 -1.173017e-02 -1.100000e+01 -1.299439e-02 -1.200000e+01 -1.379849e-02 -1.300000e+01 -1.424887e-02 -1.400000e+01 -1.450866e-02 -1.500000e+01 -1.466575e-02 -1.600000e+01 -1.476216e-02 -1.700000e+01 -1.481952e-02 -1.800000e+01 -1.484993e-02 -1.900000e+01 -1.486073e-02 -2.000000e+01 -1.485661e-02 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_corbnet.standard0000644000175000017500000001167213546075722025134 0ustar carstencarstenV(d) I(d) -1.000000e+00 -7.946711e-04 -2.000000e+00 -8.331585e-04 -3.000000e+00 -8.348002e-04 -4.000000e+00 -8.359586e-04 -5.000000e+00 -8.368949e-04 -6.000000e+00 -8.377041e-04 -7.000000e+00 -8.384287e-04 -8.000000e+00 -8.390917e-04 -9.000000e+00 -8.397069e-04 -1.000000e+01 -8.402837e-04 -1.100000e+01 -8.408287e-04 -1.200000e+01 -8.413466e-04 -1.300000e+01 -8.418412e-04 -1.400000e+01 -8.423156e-04 -1.500000e+01 -8.427719e-04 -1.600000e+01 -8.432122e-04 -1.700000e+01 -8.436380e-04 -1.800000e+01 -8.440508e-04 -1.900000e+01 -8.444516e-04 -2.000000e+01 -8.448414e-04 -1.000000e+00 -2.170631e-03 -2.000000e+00 -3.756973e-03 -3.000000e+00 -4.817749e-03 -4.000000e+00 -5.395953e-03 -5.000000e+00 -5.547712e-03 -6.000000e+00 -5.553603e-03 -7.000000e+00 -5.558484e-03 -8.000000e+00 -5.562639e-03 -9.000000e+00 -5.566220e-03 -1.000000e+01 -5.569367e-03 -1.100000e+01 -5.572185e-03 -1.200000e+01 -5.574750e-03 -1.300000e+01 -5.577116e-03 -1.400000e+01 -5.579322e-03 -1.500000e+01 -5.581396e-03 -1.600000e+01 -5.583361e-03 -1.700000e+01 -5.585232e-03 -1.800000e+01 -5.587022e-03 -1.900000e+01 -5.588742e-03 -2.000000e+01 -5.590398e-03 -1.000000e+00 -2.797502e-03 -2.000000e+00 -5.230154e-03 -3.000000e+00 -7.287074e-03 -4.000000e+00 -8.998800e-03 -5.000000e+00 -1.040628e-02 -6.000000e+00 -1.154933e-02 -7.000000e+00 -1.246396e-02 -8.000000e+00 -1.318253e-02 -9.000000e+00 -1.373458e-02 -1.000000e+01 -1.414763e-02 -1.100000e+01 -1.444761e-02 -1.200000e+01 -1.465873e-02 -1.300000e+01 -1.480279e-02 -1.400000e+01 -1.489833e-02 -1.500000e+01 -1.496015e-02 -1.600000e+01 -1.499926e-02 -1.700000e+01 -1.502347e-02 -1.800000e+01 -1.503802e-02 -1.900000e+01 -1.504619e-02 -2.000000e+01 -1.504982e-02 -1.000000e+00 -1.013116e-03 -2.000000e+00 -1.048672e-03 -3.000000e+00 -1.050722e-03 -4.000000e+00 -1.052164e-03 -5.000000e+00 -1.053328e-03 -6.000000e+00 -1.054334e-03 -7.000000e+00 -1.055236e-03 -8.000000e+00 -1.056060e-03 -9.000000e+00 -1.056826e-03 -1.000000e+01 -1.057543e-03 -1.100000e+01 -1.058221e-03 -1.200000e+01 -1.058866e-03 -1.300000e+01 -1.059481e-03 -1.400000e+01 -1.060072e-03 -1.500000e+01 -1.060639e-03 -1.600000e+01 -1.061187e-03 -1.700000e+01 -1.061717e-03 -1.800000e+01 -1.062231e-03 -1.900000e+01 -1.062730e-03 -2.000000e+01 -1.063215e-03 -1.000000e+00 -2.668416e-03 -2.000000e+00 -4.607811e-03 -3.000000e+00 -5.928368e-03 -4.000000e+00 -6.716334e-03 -5.000000e+00 -7.009020e-03 -6.000000e+00 -7.026017e-03 -7.000000e+00 -7.031996e-03 -8.000000e+00 -7.037234e-03 -9.000000e+00 -7.041733e-03 -1.000000e+01 -7.045659e-03 -1.100000e+01 -7.049147e-03 -1.200000e+01 -7.052302e-03 -1.300000e+01 -7.055197e-03 -1.400000e+01 -7.057884e-03 -1.500000e+01 -7.060402e-03 -1.600000e+01 -7.062780e-03 -1.700000e+01 -7.065040e-03 -1.800000e+01 -7.067197e-03 -1.900000e+01 -7.069266e-03 -2.000000e+01 -7.071257e-03 -1.000000e+00 -3.210104e-03 -2.000000e+00 -5.986826e-03 -3.000000e+00 -8.321621e-03 -4.000000e+00 -1.025773e-02 -5.000000e+00 -1.184900e-02 -6.000000e+00 -1.314631e-02 -7.000000e+00 -1.419490e-02 -8.000000e+00 -1.503439e-02 -9.000000e+00 -1.569942e-02 -1.000000e+01 -1.622022e-02 -1.100000e+01 -1.662312e-02 -1.200000e+01 -1.693090e-02 -1.300000e+01 -1.716311e-02 -1.400000e+01 -1.733632e-02 -1.500000e+01 -1.746424e-02 -1.600000e+01 -1.755794e-02 -1.700000e+01 -1.762616e-02 -1.800000e+01 -1.767559e-02 -1.900000e+01 -1.771129e-02 -2.000000e+01 -1.773696e-02 -1.000000e+00 -6.043154e-04 -2.000000e+00 -6.554295e-04 -3.000000e+00 -6.567153e-04 -4.000000e+00 -6.576201e-04 -5.000000e+00 -6.583501e-04 -6.000000e+00 -6.589799e-04 -7.000000e+00 -6.595431e-04 -8.000000e+00 -6.600578e-04 -9.000000e+00 -6.605352e-04 -1.000000e+01 -6.609824e-04 -1.100000e+01 -6.614048e-04 -1.200000e+01 -6.618060e-04 -1.300000e+01 -6.621891e-04 -1.400000e+01 -6.625564e-04 -1.500000e+01 -6.629096e-04 -1.600000e+01 -6.632504e-04 -1.700000e+01 -6.635799e-04 -1.800000e+01 -6.638993e-04 -1.900000e+01 -6.642093e-04 -2.000000e+01 -6.645109e-04 -1.000000e+00 -1.621360e-03 -2.000000e+00 -2.813405e-03 -3.000000e+00 -3.596606e-03 -4.000000e+00 -3.986037e-03 -5.000000e+00 -4.064182e-03 -6.000000e+00 -4.068538e-03 -7.000000e+00 -4.072135e-03 -8.000000e+00 -4.075192e-03 -9.000000e+00 -4.077841e-03 -1.000000e+01 -4.080183e-03 -1.100000e+01 -4.082293e-03 -1.200000e+01 -4.084224e-03 -1.300000e+01 -4.086012e-03 -1.400000e+01 -4.087684e-03 -1.500000e+01 -4.089261e-03 -1.600000e+01 -4.090757e-03 -1.700000e+01 -4.092185e-03 -1.800000e+01 -4.093552e-03 -1.900000e+01 -4.094867e-03 -2.000000e+01 -4.096135e-03 -1.000000e+00 -2.258852e-03 -2.000000e+00 -4.234321e-03 -3.000000e+00 -5.916039e-03 -4.000000e+00 -7.321472e-03 -5.000000e+00 -8.476686e-03 -6.000000e+00 -9.407817e-03 -7.000000e+00 -1.013899e-02 -8.000000e+00 -1.069315e-02 -9.000000e+00 -1.109399e-02 -1.000000e+01 -1.136770e-02 -1.100000e+01 -1.154281e-02 -1.200000e+01 -1.164753e-02 -1.300000e+01 -1.170620e-02 -1.400000e+01 -1.173711e-02 -1.500000e+01 -1.175238e-02 -1.600000e+01 -1.175946e-02 -1.700000e+01 -1.176395e-02 -1.800000e+01 -1.176837e-02 -1.900000e+01 -1.177264e-02 -2.000000e+01 -1.177670e-02 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_isub.standard0000644000175000017500000001634313546075722024442 0ustar carstencarstenV(d) I(d) I(b) -1.000000e+00 -4.392516e-05 1.012500e-15 -2.000000e+00 -4.466754e-05 2.012500e-15 -3.000000e+00 -4.466941e-05 3.012500e-15 -4.000000e+00 -4.467074e-05 4.012500e-15 -5.000000e+00 -4.467182e-05 5.012500e-15 -6.000000e+00 -4.467276e-05 6.012500e-15 -7.000000e+00 -4.467361e-05 7.012500e-15 -8.000000e+00 -4.467438e-05 8.012500e-15 -9.000000e+00 -4.467509e-05 9.012500e-15 -1.000000e+01 -4.467577e-05 1.001250e-14 -1.100000e+01 -4.467640e-05 1.101250e-14 -1.200000e+01 -4.467701e-05 1.201254e-14 -1.300000e+01 -4.467758e-05 1.301323e-14 -1.400000e+01 -4.467814e-05 1.402197e-14 -1.500000e+01 -4.467867e-05 1.510184e-14 -1.600000e+01 -4.467918e-05 1.666239e-14 -1.700000e+01 -4.467968e-05 2.081819e-14 -1.800000e+01 -4.468016e-05 3.657383e-14 -1.900000e+01 -4.468063e-05 9.649448e-14 -2.000000e+01 -4.468108e-05 3.030193e-13 -1.000000e+00 -1.486091e-04 1.012500e-15 -2.000000e+00 -2.576635e-04 2.012500e-15 -3.000000e+00 -3.180615e-04 3.012500e-15 -4.000000e+00 -3.310297e-04 4.012500e-15 -5.000000e+00 -3.310428e-04 5.012500e-15 -6.000000e+00 -3.310507e-04 6.012500e-15 -7.000000e+00 -3.310573e-04 7.012500e-15 -8.000000e+00 -3.310628e-04 8.012500e-15 -9.000000e+00 -3.310677e-04 9.012500e-15 -1.000000e+01 -3.310721e-04 1.001250e-14 -1.100000e+01 -3.310760e-04 1.101251e-14 -1.200000e+01 -3.310797e-04 1.201282e-14 -1.300000e+01 -3.310831e-04 1.301843e-14 -1.400000e+01 -3.310863e-04 1.408830e-14 -1.500000e+01 -3.310893e-04 1.572100e-14 -1.600000e+01 -3.310922e-04 2.112718e-14 -1.700000e+01 -3.310949e-04 4.677270e-14 -1.800000e+01 -3.310976e-04 1.623767e-13 -1.900000e+01 -3.311001e-04 6.188599e-13 -2.000000e+01 -3.311026e-04 2.202262e-12 -1.000000e+00 -1.881078e-04 1.012500e-15 -2.000000e+00 -3.641465e-04 2.012500e-15 -3.000000e+00 -5.258497e-04 3.012500e-15 -4.000000e+00 -6.692544e-04 4.012500e-15 -5.000000e+00 -7.886371e-04 5.012500e-15 -6.000000e+00 -8.772334e-04 6.012500e-15 -7.000000e+00 -9.314315e-04 7.012500e-15 -8.000000e+00 -9.564375e-04 8.012500e-15 -9.000000e+00 -9.639045e-04 9.012500e-15 -1.000000e+01 -9.643111e-04 1.001250e-14 -1.100000e+01 -9.643248e-04 1.101253e-14 -1.200000e+01 -9.643372e-04 1.201343e-14 -1.300000e+01 -9.643485e-04 1.302991e-14 -1.400000e+01 -9.643589e-04 1.423484e-14 -1.500000e+01 -9.643685e-04 1.708907e-14 -1.600000e+01 -9.643774e-04 3.099286e-14 -1.700000e+01 -9.643856e-04 1.041258e-13 -1.800000e+01 -9.643934e-04 4.403815e-13 -1.900000e+01 -9.644007e-04 1.773250e-12 -2.000000e+01 -9.644077e-04 6.399600e-12 -1.000000e+00 -5.721280e-05 1.000000e-15 -2.000000e+00 -5.748526e-05 2.000000e-15 -3.000000e+00 -5.748769e-05 3.000000e-15 -4.000000e+00 -5.748943e-05 4.000000e-15 -5.000000e+00 -5.749085e-05 5.000000e-15 -6.000000e+00 -5.749208e-05 6.000000e-15 -7.000000e+00 -5.749319e-05 7.000000e-15 -8.000000e+00 -5.749420e-05 8.000000e-15 -9.000000e+00 -5.749514e-05 9.000000e-15 -1.000000e+01 -5.749603e-05 1.000000e-14 -1.100000e+01 -5.749686e-05 1.100000e-14 -1.200000e+01 -5.749766e-05 1.200006e-14 -1.300000e+01 -5.749842e-05 1.300111e-14 -1.400000e+01 -5.749915e-05 1.401402e-14 -1.500000e+01 -5.749985e-05 1.513008e-14 -1.600000e+01 -5.750052e-05 1.693325e-14 -1.700000e+01 -5.750118e-05 2.240186e-14 -1.800000e+01 -5.750181e-05 4.408803e-14 -1.900000e+01 -5.750243e-05 1.269881e-13 -2.000000e+01 -5.750303e-05 4.115802e-13 -1.000000e+00 -1.996589e-04 1.000000e-15 -2.000000e+00 -3.479257e-04 2.000000e-15 -3.000000e+00 -4.290301e-04 3.000000e-15 -4.000000e+00 -4.441138e-04 4.000000e-15 -5.000000e+00 -4.441271e-04 5.000000e-15 -6.000000e+00 -4.441377e-04 6.000000e-15 -7.000000e+00 -4.441465e-04 7.000000e-15 -8.000000e+00 -4.441540e-04 8.000000e-15 -9.000000e+00 -4.441606e-04 9.000000e-15 -1.000000e+01 -4.441665e-04 1.000000e-14 -1.100000e+01 -4.441718e-04 1.100002e-14 -1.200000e+01 -4.441768e-04 1.200049e-14 -1.300000e+01 -4.441813e-04 1.300899e-14 -1.400000e+01 -4.441857e-04 1.411323e-14 -1.500000e+01 -4.441897e-04 1.604497e-14 -1.600000e+01 -4.441936e-04 2.346402e-14 -1.700000e+01 -4.441974e-04 6.004485e-14 -1.800000e+01 -4.442009e-04 2.252361e-13 -1.900000e+01 -4.442044e-04 8.745433e-13 -2.000000e+01 -4.442077e-04 3.115198e-12 -1.000000e+00 -2.267972e-04 1.000000e-15 -2.000000e+00 -4.418474e-04 2.000000e-15 -3.000000e+00 -6.419967e-04 3.000000e-15 -4.000000e+00 -8.217059e-04 4.000000e-15 -5.000000e+00 -9.728148e-04 5.000000e-15 -6.000000e+00 -1.085423e-03 6.000000e-15 -7.000000e+00 -1.153842e-03 7.000000e-15 -8.000000e+00 -1.184705e-03 8.000000e-15 -9.000000e+00 -1.193274e-03 9.000000e-15 -1.000000e+01 -1.193403e-03 1.000000e-14 -1.100000e+01 -1.193420e-03 1.100004e-14 -1.200000e+01 -1.193435e-03 1.200128e-14 -1.300000e+01 -1.193449e-03 1.302363e-14 -1.400000e+01 -1.193462e-03 1.429832e-14 -1.500000e+01 -1.193474e-03 1.775956e-14 -1.600000e+01 -1.193485e-03 3.574925e-14 -1.700000e+01 -1.193495e-03 1.310787e-13 -1.800000e+01 -1.193505e-03 5.679796e-13 -1.900000e+01 -1.193514e-03 2.292184e-12 -2.000000e+01 -1.193522e-03 8.252310e-12 -1.000000e+00 -3.290237e-05 1.619318e-11 -2.000000e+00 -3.458967e-05 1.619418e-11 -3.000000e+00 -3.459109e-05 1.619518e-11 -4.000000e+00 -3.459210e-05 1.619618e-11 -5.000000e+00 -3.459291e-05 1.619718e-11 -6.000000e+00 -3.459361e-05 1.619818e-11 -7.000000e+00 -3.459424e-05 1.619918e-11 -8.000000e+00 -3.459482e-05 1.620018e-11 -9.000000e+00 -3.459536e-05 1.620118e-11 -1.000000e+01 -3.459586e-05 1.620218e-11 -1.100000e+01 -3.459633e-05 1.620318e-11 -1.200000e+01 -3.459678e-05 1.620418e-11 -1.300000e+01 -3.459721e-05 1.620518e-11 -1.400000e+01 -3.459762e-05 1.620619e-11 -1.500000e+01 -3.459802e-05 1.620723e-11 -1.600000e+01 -3.459840e-05 1.620859e-11 -1.700000e+01 -3.459877e-05 1.621164e-11 -1.800000e+01 -3.459912e-05 1.622239e-11 -1.900000e+01 -3.459947e-05 1.626296e-11 -2.000000e+01 -3.459981e-05 1.640388e-11 -1.000000e+00 -1.018156e-04 1.619318e-11 -2.000000e+00 -1.762142e-04 1.619418e-11 -3.000000e+00 -2.187040e-04 1.619518e-11 -4.000000e+00 -2.300471e-04 1.619618e-11 -5.000000e+00 -2.301934e-04 1.619718e-11 -6.000000e+00 -2.301989e-04 1.619818e-11 -7.000000e+00 -2.302034e-04 1.619918e-11 -8.000000e+00 -2.302072e-04 1.620018e-11 -9.000000e+00 -2.302106e-04 1.620118e-11 -1.000000e+01 -2.302136e-04 1.620218e-11 -1.100000e+01 -2.302163e-04 1.620318e-11 -1.200000e+01 -2.302188e-04 1.620418e-11 -1.300000e+01 -2.302211e-04 1.620518e-11 -1.400000e+01 -2.302233e-04 1.620622e-11 -1.500000e+01 -2.302254e-04 1.620759e-11 -1.600000e+01 -2.302274e-04 1.621119e-11 -1.700000e+01 -2.302293e-04 1.622701e-11 -1.800000e+01 -2.302311e-04 1.629797e-11 -1.900000e+01 -2.302328e-04 1.658067e-11 -2.000000e+01 -2.302345e-04 1.757132e-11 -1.000000e+00 -1.430019e-04 1.619318e-11 -2.000000e+00 -2.748408e-04 1.619418e-11 -3.000000e+00 -3.942161e-04 1.619518e-11 -4.000000e+00 -4.987367e-04 1.619618e-11 -5.000000e+00 -5.849646e-04 1.619718e-11 -6.000000e+00 -6.489220e-04 1.619818e-11 -7.000000e+00 -6.886642e-04 1.619918e-11 -8.000000e+00 -7.077845e-04 1.620018e-11 -9.000000e+00 -7.141885e-04 1.620118e-11 -1.000000e+01 -7.150673e-04 1.620218e-11 -1.100000e+01 -7.150791e-04 1.620318e-11 -1.200000e+01 -7.150882e-04 1.620418e-11 -1.300000e+01 -7.150966e-04 1.620519e-11 -1.400000e+01 -7.151043e-04 1.620632e-11 -1.500000e+01 -7.151113e-04 1.620850e-11 -1.600000e+01 -7.151179e-04 1.621788e-11 -1.700000e+01 -7.151240e-04 1.626643e-11 -1.800000e+01 -7.151297e-04 1.649113e-11 -1.900000e+01 -7.151351e-04 1.739028e-11 -2.000000e+01 -7.151402e-04 2.053877e-11 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_Ig1_vb2.standard0000644000175000017500000001167213546075722024671 0ustar carstencarstenV(g) I(d) -1.000000e+00 -3.877453e-06 -2.000000e+00 -4.605978e-04 -3.000000e+00 -1.561105e-03 -4.000000e+00 -2.817214e-03 -5.000000e+00 -3.728171e-03 -6.000000e+00 -4.365991e-03 -7.000000e+00 -4.806487e-03 -8.000000e+00 -5.103186e-03 -9.000000e+00 -5.294678e-03 -1.000000e+01 -5.408903e-03 -1.100000e+01 -5.466160e-03 -1.200000e+01 -5.481278e-03 -1.300000e+01 -5.465182e-03 -1.400000e+01 -5.425990e-03 -1.500000e+01 -5.369786e-03 -1.600000e+01 -5.301169e-03 -1.700000e+01 -5.223635e-03 -1.800000e+01 -5.139858e-03 -1.900000e+01 -5.051890e-03 -2.000000e+01 -4.961311e-03 -1.000000e+00 -3.900178e-06 -2.000000e+00 -4.628869e-04 -3.000000e+00 -1.569124e-03 -4.000000e+00 -3.059834e-03 -5.000000e+00 -4.766646e-03 -6.000000e+00 -6.584886e-03 -7.000000e+00 -8.212710e-03 -8.000000e+00 -9.383465e-03 -9.000000e+00 -1.016731e-02 -1.000000e+01 -1.068210e-02 -1.100000e+01 -1.101398e-02 -1.200000e+01 -1.121958e-02 -1.300000e+01 -1.133594e-02 -1.400000e+01 -1.138768e-02 -1.500000e+01 -1.139156e-02 -1.600000e+01 -1.135927e-02 -1.700000e+01 -1.129923e-02 -1.800000e+01 -1.121764e-02 -1.900000e+01 -1.111916e-02 -2.000000e+01 -1.100743e-02 -1.000000e+00 -3.925826e-06 -2.000000e+00 -4.651520e-04 -3.000000e+00 -1.575586e-03 -4.000000e+00 -3.071705e-03 -5.000000e+00 -4.785060e-03 -6.000000e+00 -6.613535e-03 -7.000000e+00 -8.493083e-03 -8.000000e+00 -1.038244e-02 -9.000000e+00 -1.225444e-02 -1.000000e+01 -1.401808e-02 -1.100000e+01 -1.522414e-02 -1.200000e+01 -1.582790e-02 -1.300000e+01 -1.613129e-02 -1.400000e+01 -1.629529e-02 -1.500000e+01 -1.638451e-02 -1.600000e+01 -1.642823e-02 -1.700000e+01 -1.644163e-02 -1.800000e+01 -1.643338e-02 -1.900000e+01 -1.640882e-02 -2.000000e+01 -1.637143e-02 -1.000000e+00 -3.267272e-07 -2.000000e+00 -5.564042e-04 -3.000000e+00 -2.003422e-03 -4.000000e+00 -3.617521e-03 -5.000000e+00 -4.694691e-03 -6.000000e+00 -5.381489e-03 -7.000000e+00 -5.808464e-03 -8.000000e+00 -6.060267e-03 -9.000000e+00 -6.192807e-03 -1.000000e+01 -6.243360e-03 -1.100000e+01 -6.237115e-03 -1.200000e+01 -6.191371e-03 -1.300000e+01 -6.118210e-03 -1.400000e+01 -6.026196e-03 -1.500000e+01 -5.921478e-03 -1.600000e+01 -5.808514e-03 -1.700000e+01 -5.690561e-03 -1.800000e+01 -5.570008e-03 -1.900000e+01 -5.448605e-03 -2.000000e+01 -5.327637e-03 -1.000000e+00 -3.286797e-07 -2.000000e+00 -5.591490e-04 -3.000000e+00 -2.013320e-03 -4.000000e+00 -3.911768e-03 -5.000000e+00 -6.008910e-03 -6.000000e+00 -8.171620e-03 -7.000000e+00 -9.962330e-03 -8.000000e+00 -1.110205e-02 -9.000000e+00 -1.178123e-02 -1.000000e+01 -1.217869e-02 -1.100000e+01 -1.240036e-02 -1.200000e+01 -1.250744e-02 -1.300000e+01 -1.253657e-02 -1.400000e+01 -1.251067e-02 -1.500000e+01 -1.244476e-02 -1.600000e+01 -1.234907e-02 -1.700000e+01 -1.223087e-02 -1.800000e+01 -1.209549e-02 -1.900000e+01 -1.194699e-02 -2.000000e+01 -1.178849e-02 -1.000000e+00 -3.308925e-07 -2.000000e+00 -5.618801e-04 -3.000000e+00 -2.021324e-03 -4.000000e+00 -3.926237e-03 -5.000000e+00 -6.031032e-03 -6.000000e+00 -8.207834e-03 -7.000000e+00 -1.038623e-02 -8.000000e+00 -1.252609e-02 -9.000000e+00 -1.460371e-02 -1.000000e+01 -1.627787e-02 -1.100000e+01 -1.705327e-02 -1.200000e+01 -1.738267e-02 -1.300000e+01 -1.753998e-02 -1.400000e+01 -1.761427e-02 -1.500000e+01 -1.764077e-02 -1.600000e+01 -1.763633e-02 -1.700000e+01 -1.761016e-02 -1.800000e+01 -1.756772e-02 -1.900000e+01 -1.751250e-02 -2.000000e+01 -1.744683e-02 -1.000000e+00 -1.722905e-05 -2.000000e+00 -3.838884e-04 -3.000000e+00 -1.162997e-03 -4.000000e+00 -2.034460e-03 -5.000000e+00 -2.717559e-03 -6.000000e+00 -3.241081e-03 -7.000000e+00 -3.639898e-03 -8.000000e+00 -3.940394e-03 -9.000000e+00 -4.163132e-03 -1.000000e+01 -4.324319e-03 -1.100000e+01 -4.436756e-03 -1.200000e+01 -4.510554e-03 -1.300000e+01 -4.553708e-03 -1.400000e+01 -4.572553e-03 -1.500000e+01 -4.572123e-03 -1.600000e+01 -4.556435e-03 -1.700000e+01 -4.528701e-03 -1.800000e+01 -4.491504e-03 -1.900000e+01 -4.446925e-03 -2.000000e+01 -4.396645e-03 -1.000000e+00 -1.732573e-05 -2.000000e+00 -3.857875e-04 -3.000000e+00 -1.169868e-03 -4.000000e+00 -2.242080e-03 -5.000000e+00 -3.508131e-03 -6.000000e+00 -4.897980e-03 -7.000000e+00 -6.212245e-03 -8.000000e+00 -7.264587e-03 -9.000000e+00 -8.055688e-03 -1.000000e+01 -8.638571e-03 -1.100000e+01 -9.063266e-03 -1.200000e+01 -9.368485e-03 -1.300000e+01 -9.583099e-03 -1.400000e+01 -9.728446e-03 -1.500000e+01 -9.820296e-03 -1.600000e+01 -9.870373e-03 -1.700000e+01 -9.887475e-03 -1.800000e+01 -9.878292e-03 -1.900000e+01 -9.847977e-03 -2.000000e+01 -9.800563e-03 -1.000000e+00 -1.743374e-05 -2.000000e+00 -3.876441e-04 -3.000000e+00 -1.174777e-03 -4.000000e+00 -2.251106e-03 -5.000000e+00 -3.522287e-03 -6.000000e+00 -4.922235e-03 -7.000000e+00 -6.404042e-03 -8.000000e+00 -7.933876e-03 -9.000000e+00 -9.486994e-03 -1.000000e+01 -1.103129e-02 -1.100000e+01 -1.239001e-02 -1.200000e+01 -1.334702e-02 -1.300000e+01 -1.391522e-02 -1.400000e+01 -1.424724e-02 -1.500000e+01 -1.444919e-02 -1.600000e+01 -1.457513e-02 -1.700000e+01 -1.465294e-02 -1.800000e+01 -1.469813e-02 -1.900000e+01 -1.471996e-02 -2.000000e+01 -1.472424e-02 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_RDRIFT_REVS.standard0000644000175000017500000000043013546075722025317 0ustar carstencarstenV(g) I(d) -1.000000e+00 1.283291e-02 -3.000000e+00 1.510841e-02 -5.000000e+00 1.654453e-02 -7.000000e+00 1.718847e-02 -9.000000e+00 1.727846e-02 -1.100000e+01 1.703196e-02 -1.300000e+01 1.659520e-02 -1.500000e+01 1.605875e-02 -1.700000e+01 1.547747e-02 -1.900000e+01 1.488421e-02 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_Ig1_vb1.standard0000644000175000017500000002746513546075722024677 0ustar carstencarstenV(g) I(d) I(g) I(s) I(b) -1.000000e+00 -4.000242e-05 0.000000e+00 4.000242e-05 3.000000e-15 -2.000000e+00 -6.849976e-04 0.000000e+00 6.849976e-04 3.000000e-15 -3.000000e+00 -1.914935e-03 0.000000e+00 1.914935e-03 3.000000e-15 -4.000000e+00 -3.155354e-03 0.000000e+00 3.155354e-03 3.000000e-15 -5.000000e+00 -4.032972e-03 0.000000e+00 4.032972e-03 3.000000e-15 -6.000000e+00 -4.642338e-03 0.000000e+00 4.642338e-03 3.000000e-15 -7.000000e+00 -5.058476e-03 0.000000e+00 5.058476e-03 3.000000e-15 -8.000000e+00 -5.334242e-03 0.000000e+00 5.334242e-03 3.000000e-15 -9.000000e+00 -5.507638e-03 0.000000e+00 5.507638e-03 3.000000e-15 -1.000000e+01 -5.606087e-03 0.000000e+00 5.606087e-03 3.000000e-15 -1.100000e+01 -5.649453e-03 0.000000e+00 5.649453e-03 3.000000e-15 -1.200000e+01 -5.652225e-03 0.000000e+00 5.652225e-03 3.000000e-15 -1.300000e+01 -5.625056e-03 0.000000e+00 5.625056e-03 3.000000e-15 -1.400000e+01 -5.575859e-03 0.000000e+00 5.575859e-03 3.000000e-15 -1.500000e+01 -5.510557e-03 0.000000e+00 5.510557e-03 3.000000e-15 -1.600000e+01 -5.433622e-03 0.000000e+00 5.433622e-03 3.000000e-15 -1.700000e+01 -5.348452e-03 0.000000e+00 5.348452e-03 3.000000e-15 -1.800000e+01 -5.257640e-03 0.000000e+00 5.257640e-03 3.000000e-15 -1.900000e+01 -5.163174e-03 0.000000e+00 5.163174e-03 3.000000e-15 -2.000000e+01 -5.066578e-03 0.000000e+00 5.066578e-03 3.000000e-15 -1.000000e+00 -4.021713e-05 0.000000e+00 4.021713e-05 6.000000e-15 -2.000000e+00 -6.881553e-04 0.000000e+00 6.881553e-04 6.000000e-15 -3.000000e+00 -1.925151e-03 0.000000e+00 1.925151e-03 6.000000e-15 -4.000000e+00 -3.502855e-03 0.000000e+00 3.502855e-03 6.000000e-15 -5.000000e+00 -5.269658e-03 0.000000e+00 5.269658e-03 6.000000e-15 -6.000000e+00 -7.120646e-03 0.000000e+00 7.120646e-03 6.000000e-15 -7.000000e+00 -8.702161e-03 0.000000e+00 8.702161e-03 6.000000e-15 -8.000000e+00 -9.807422e-03 0.000000e+00 9.807422e-03 6.000000e-15 -9.000000e+00 -1.053382e-02 0.000000e+00 1.053382e-02 6.000000e-15 -1.000000e+01 -1.100306e-02 0.000000e+00 1.100306e-02 6.000000e-15 -1.100000e+01 -1.129957e-02 0.000000e+00 1.129957e-02 6.000000e-15 -1.200000e+01 -1.147766e-02 0.000000e+00 1.147766e-02 6.000000e-15 -1.300000e+01 -1.157237e-02 0.000000e+00 1.157237e-02 6.000000e-15 -1.400000e+01 -1.160676e-02 0.000000e+00 1.160676e-02 6.000000e-15 -1.500000e+01 -1.159648e-02 0.000000e+00 1.159648e-02 6.000000e-15 -1.600000e+01 -1.155239e-02 0.000000e+00 1.155239e-02 6.000000e-15 -1.700000e+01 -1.148232e-02 0.000000e+00 1.148232e-02 6.000000e-15 -1.800000e+01 -1.139202e-02 0.000000e+00 1.139202e-02 6.000000e-15 -1.900000e+01 -1.128587e-02 0.000000e+00 1.128587e-02 6.000000e-15 -2.000000e+01 -1.116725e-02 0.000000e+00 1.116725e-02 6.000000e-15 -1.000000e+00 -4.045587e-05 0.000000e+00 4.045587e-05 1.100000e-14 -2.000000e+00 -6.911480e-04 0.000000e+00 6.911480e-04 1.100000e-14 -3.000000e+00 -1.932342e-03 0.000000e+00 1.932342e-03 1.100000e-14 -4.000000e+00 -3.515400e-03 0.000000e+00 3.515400e-03 1.100000e-14 -5.000000e+00 -5.288635e-03 0.000000e+00 5.288635e-03 1.100000e-14 -6.000000e+00 -7.159230e-03 0.000000e+00 7.159230e-03 1.100000e-14 -7.000000e+00 -9.068432e-03 0.000000e+00 9.068432e-03 1.100000e-14 -8.000000e+00 -1.097819e-02 0.000000e+00 1.097819e-02 1.100000e-14 -9.000000e+00 -1.286332e-02 0.000000e+00 1.286332e-02 1.100000e-14 -1.000000e+01 -1.456348e-02 0.000000e+00 1.456348e-02 1.100000e-14 -1.100000e+01 -1.559150e-02 0.000000e+00 1.559150e-02 1.100000e-14 -1.200000e+01 -1.607507e-02 0.000000e+00 1.607507e-02 1.100000e-14 -1.300000e+01 -1.631802e-02 0.000000e+00 1.631802e-02 1.100000e-14 -1.400000e+01 -1.644843e-02 0.000000e+00 1.644843e-02 1.100000e-14 -1.500000e+01 -1.651684e-02 0.000000e+00 1.651684e-02 1.100000e-14 -1.600000e+01 -1.654666e-02 0.000000e+00 1.654666e-02 1.100000e-14 -1.700000e+01 -1.655026e-02 0.000000e+00 1.655026e-02 1.100000e-14 -1.800000e+01 -1.653484e-02 0.000000e+00 1.653484e-02 1.100000e-14 -1.900000e+01 -1.650490e-02 0.000000e+00 1.650490e-02 1.100000e-14 -2.000000e+01 -1.646339e-02 0.000000e+00 1.646339e-02 1.100000e-14 -1.000000e+00 -2.546089e-05 0.000000e+00 2.546089e-05 3.000000e-15 -2.000000e+00 -8.525116e-04 0.000000e+00 8.525116e-04 3.000000e-15 -3.000000e+00 -2.475171e-03 0.000000e+00 2.475171e-03 3.000000e-15 -4.000000e+00 -4.059886e-03 0.000000e+00 4.059886e-03 3.000000e-15 -5.000000e+00 -5.081684e-03 0.000000e+00 5.081684e-03 3.000000e-15 -6.000000e+00 -5.723740e-03 0.000000e+00 5.723740e-03 3.000000e-15 -7.000000e+00 -6.114248e-03 0.000000e+00 6.114248e-03 3.000000e-15 -8.000000e+00 -6.336105e-03 0.000000e+00 6.336105e-03 3.000000e-15 -9.000000e+00 -6.443730e-03 0.000000e+00 6.443730e-03 3.000000e-15 -1.000000e+01 -6.473215e-03 0.000000e+00 6.473215e-03 3.000000e-15 -1.100000e+01 -6.448855e-03 0.000000e+00 6.448855e-03 3.000000e-15 -1.200000e+01 -6.387302e-03 0.000000e+00 6.387302e-03 3.000000e-15 -1.300000e+01 -6.300167e-03 0.000000e+00 6.300167e-03 3.000000e-15 -1.400000e+01 -6.195675e-03 0.000000e+00 6.195675e-03 3.000000e-15 -1.500000e+01 -6.079723e-03 0.000000e+00 6.079723e-03 3.000000e-15 -1.600000e+01 -5.956583e-03 0.000000e+00 5.956583e-03 3.000000e-15 -1.700000e+01 -5.829364e-03 0.000000e+00 5.829364e-03 3.000000e-15 -1.800000e+01 -5.700340e-03 0.000000e+00 5.700340e-03 3.000000e-15 -1.900000e+01 -5.571170e-03 0.000000e+00 5.571170e-03 3.000000e-15 -2.000000e+01 -5.443059e-03 0.000000e+00 5.443059e-03 3.000000e-15 -1.000000e+00 -2.560239e-05 0.000000e+00 2.560239e-05 6.000000e-15 -2.000000e+00 -8.563858e-04 0.000000e+00 8.563858e-04 6.000000e-15 -3.000000e+00 -2.486619e-03 0.000000e+00 2.486619e-03 6.000000e-15 -4.000000e+00 -4.492913e-03 0.000000e+00 4.492913e-03 6.000000e-15 -5.000000e+00 -6.659354e-03 0.000000e+00 6.659354e-03 6.000000e-15 -6.000000e+00 -8.848074e-03 0.000000e+00 8.848074e-03 6.000000e-15 -7.000000e+00 -1.054268e-02 0.000000e+00 1.054268e-02 6.000000e-15 -8.000000e+00 -1.157752e-02 0.000000e+00 1.157752e-02 6.000000e-15 -9.000000e+00 -1.217837e-02 0.000000e+00 1.217837e-02 6.000000e-15 -1.000000e+01 -1.252016e-02 0.000000e+00 1.252016e-02 6.000000e-15 -1.100000e+01 -1.270179e-02 0.000000e+00 1.270179e-02 6.000000e-15 -1.200000e+01 -1.277928e-02 0.000000e+00 1.277928e-02 6.000000e-15 -1.300000e+01 -1.278588e-02 0.000000e+00 1.278588e-02 6.000000e-15 -1.400000e+01 -1.274231e-02 0.000000e+00 1.274231e-02 6.000000e-15 -1.500000e+01 -1.266210e-02 0.000000e+00 1.266210e-02 6.000000e-15 -1.600000e+01 -1.255454e-02 0.000000e+00 1.255454e-02 6.000000e-15 -1.700000e+01 -1.242621e-02 0.000000e+00 1.242621e-02 6.000000e-15 -1.800000e+01 -1.228200e-02 0.000000e+00 1.228200e-02 6.000000e-15 -1.900000e+01 -1.212561e-02 0.000000e+00 1.212561e-02 6.000000e-15 -2.000000e+01 -1.195997e-02 0.000000e+00 1.195997e-02 6.000000e-15 -1.000000e+00 -2.576075e-05 0.000000e+00 2.576075e-05 1.100000e-14 -2.000000e+00 -8.600735e-04 0.000000e+00 8.600735e-04 1.100000e-14 -3.000000e+00 -2.495529e-03 0.000000e+00 2.495529e-03 1.100000e-14 -4.000000e+00 -4.508195e-03 0.000000e+00 4.508195e-03 1.100000e-14 -5.000000e+00 -6.682165e-03 0.000000e+00 6.682165e-03 1.100000e-14 -6.000000e+00 -8.904077e-03 0.000000e+00 8.904077e-03 1.100000e-14 -7.000000e+00 -1.111126e-02 0.000000e+00 1.111126e-02 1.100000e-14 -8.000000e+00 -1.326808e-02 0.000000e+00 1.326808e-02 1.100000e-14 -9.000000e+00 -1.534461e-02 0.000000e+00 1.534461e-02 1.100000e-14 -1.000000e+01 -1.677045e-02 0.000000e+00 1.677045e-02 1.100000e-14 -1.100000e+01 -1.734500e-02 0.000000e+00 1.734500e-02 1.100000e-14 -1.200000e+01 -1.759087e-02 0.000000e+00 1.759087e-02 1.100000e-14 -1.300000e+01 -1.770699e-02 0.000000e+00 1.770699e-02 1.100000e-14 -1.400000e+01 -1.775736e-02 0.000000e+00 1.775736e-02 1.100000e-14 -1.500000e+01 -1.776845e-02 0.000000e+00 1.776845e-02 1.100000e-14 -1.600000e+01 -1.775344e-02 0.000000e+00 1.775344e-02 1.100000e-14 -1.700000e+01 -1.771968e-02 0.000000e+00 1.771968e-02 1.100000e-14 -1.800000e+01 -1.767164e-02 0.000000e+00 1.767164e-02 1.100000e-14 -1.900000e+01 -1.761220e-02 0.000000e+00 1.761220e-02 1.100000e-14 -2.000000e+01 -1.754331e-02 0.000000e+00 1.754331e-02 1.100000e-14 -1.000000e+00 -6.344128e-05 0.000000e+00 6.344128e-05 3.000000e-15 -2.000000e+00 -5.476219e-04 0.000000e+00 5.476219e-04 3.000000e-15 -3.000000e+00 -1.406870e-03 0.000000e+00 1.406870e-03 3.000000e-15 -4.000000e+00 -2.269446e-03 0.000000e+00 2.269446e-03 3.000000e-15 -5.000000e+00 -2.935158e-03 0.000000e+00 2.935158e-03 3.000000e-15 -6.000000e+00 -3.443105e-03 0.000000e+00 3.443105e-03 3.000000e-15 -7.000000e+00 -3.828079e-03 0.000000e+00 3.828079e-03 3.000000e-15 -8.000000e+00 -4.116216e-03 0.000000e+00 4.116216e-03 3.000000e-15 -9.000000e+00 -4.327869e-03 0.000000e+00 4.327869e-03 3.000000e-15 -1.000000e+01 -4.479062e-03 0.000000e+00 4.479062e-03 3.000000e-15 -1.100000e+01 -4.582440e-03 0.000000e+00 4.582440e-03 3.000000e-15 -1.200000e+01 -4.647984e-03 0.000000e+00 4.647984e-03 3.000000e-15 -1.300000e+01 -4.683577e-03 0.000000e+00 4.683577e-03 3.000000e-15 -1.400000e+01 -4.695463e-03 0.000000e+00 4.695463e-03 3.000000e-15 -1.500000e+01 -4.688602e-03 0.000000e+00 4.688602e-03 3.000000e-15 -1.600000e+01 -4.666949e-03 0.000000e+00 4.666949e-03 3.000000e-15 -1.700000e+01 -4.633667e-03 0.000000e+00 4.633667e-03 3.000000e-15 -1.800000e+01 -4.591296e-03 0.000000e+00 4.591296e-03 3.000000e-15 -1.900000e+01 -4.541881e-03 0.000000e+00 4.541881e-03 3.000000e-15 -2.000000e+01 -4.487073e-03 0.000000e+00 4.487073e-03 3.000000e-15 -1.000000e+00 -6.376334e-05 0.000000e+00 6.376334e-05 6.000000e-15 -2.000000e+00 -5.501427e-04 0.000000e+00 5.501427e-04 6.000000e-15 -3.000000e+00 -1.420392e-03 0.000000e+00 1.420392e-03 6.000000e-15 -4.000000e+00 -2.554370e-03 0.000000e+00 2.554370e-03 6.000000e-15 -5.000000e+00 -3.865841e-03 0.000000e+00 3.865841e-03 6.000000e-15 -6.000000e+00 -5.282896e-03 0.000000e+00 5.282896e-03 6.000000e-15 -7.000000e+00 -6.580570e-03 0.000000e+00 6.580570e-03 6.000000e-15 -8.000000e+00 -7.601104e-03 0.000000e+00 7.601104e-03 6.000000e-15 -9.000000e+00 -8.359808e-03 0.000000e+00 8.359808e-03 6.000000e-15 -1.000000e+01 -8.913659e-03 0.000000e+00 8.913659e-03 6.000000e-15 -1.100000e+01 -9.313357e-03 0.000000e+00 9.313357e-03 6.000000e-15 -1.200000e+01 -9.597436e-03 0.000000e+00 9.597436e-03 6.000000e-15 -1.300000e+01 -9.794299e-03 0.000000e+00 9.794299e-03 6.000000e-15 -1.400000e+01 -9.924739e-03 0.000000e+00 9.924739e-03 6.000000e-15 -1.500000e+01 -1.000401e-02 0.000000e+00 1.000401e-02 6.000000e-15 -1.600000e+01 -1.004337e-02 0.000000e+00 1.004337e-02 6.000000e-15 -1.700000e+01 -1.005125e-02 0.000000e+00 1.005125e-02 6.000000e-15 -1.800000e+01 -1.003404e-02 0.000000e+00 1.003404e-02 6.000000e-15 -1.900000e+01 -9.996648e-03 0.000000e+00 9.996648e-03 6.000000e-15 -2.000000e+01 -9.942922e-03 0.000000e+00 9.942922e-03 6.000000e-15 -1.000000e+00 -6.411710e-05 0.000000e+00 6.411710e-05 1.100000e-14 -2.000000e+00 -5.525054e-04 0.000000e+00 5.525054e-04 1.100000e-14 -3.000000e+00 -1.425823e-03 0.000000e+00 1.425823e-03 1.100000e-14 -4.000000e+00 -2.563892e-03 0.000000e+00 2.563892e-03 1.100000e-14 -5.000000e+00 -3.880410e-03 0.000000e+00 3.880410e-03 1.100000e-14 -6.000000e+00 -5.314346e-03 0.000000e+00 5.314346e-03 1.100000e-14 -7.000000e+00 -6.821903e-03 0.000000e+00 6.821903e-03 1.100000e-14 -8.000000e+00 -8.371231e-03 0.000000e+00 8.371231e-03 1.100000e-14 -9.000000e+00 -9.938886e-03 0.000000e+00 9.938886e-03 1.100000e-14 -1.000000e+01 -1.148133e-02 0.000000e+00 1.148133e-02 1.100000e-14 -1.100000e+01 -1.278394e-02 0.000000e+00 1.278394e-02 1.100000e-14 -1.200000e+01 -1.364399e-02 0.000000e+00 1.364399e-02 1.100000e-14 -1.300000e+01 -1.413475e-02 0.000000e+00 1.413475e-02 1.100000e-14 -1.400000e+01 -1.441883e-02 0.000000e+00 1.441883e-02 1.100000e-14 -1.500000e+01 -1.459100e-02 0.000000e+00 1.459100e-02 1.100000e-14 -1.600000e+01 -1.469737e-02 0.000000e+00 1.469737e-02 1.100000e-14 -1.700000e+01 -1.476165e-02 0.000000e+00 1.476165e-02 1.100000e-14 -1.800000e+01 -1.479709e-02 0.000000e+00 1.479709e-02 1.100000e-14 -1.900000e+01 -1.481165e-02 0.000000e+00 1.481165e-02 1.100000e-14 -2.000000e+01 -1.481040e-02 0.000000e+00 1.481040e-02 1.100000e-14 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/acFreq_conqs.standard0000644000175000017500000000707713546075722025130 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 7.44245119534614e-13 7.06387569841117e-13 2.3257327749513e-14 1258.925 7.44245390992764e-13 7.06387898700861e-13 2.32573358224615e-14 1584.893 7.44245300954376e-13 7.0638776716118e-13 2.32573305030995e-14 1995.262 7.44245277291889e-13 7.0638772687188e-13 2.32573328875724e-14 2511.886 7.442453305398e-13 7.06387925009463e-13 2.3257337103547e-14 3162.278 7.4424515718388e-13 7.06387527907225e-13 2.32573277310019e-14 3981.072 7.44245186755073e-13 7.06387703918716e-13 2.32573297697088e-14 5011.872 7.44245240124554e-13 7.0638781571168e-13 2.3257332304941e-14 6309.573 7.44245257012675e-13 7.06387780248303e-13 2.32573344731343e-14 7943.282 7.44245248030987e-13 7.06387632542131e-13 2.32573359045728e-14 10000 7.44245119534614e-13 7.06387569841117e-13 2.3257327749513e-14 12589.25 7.44245390992764e-13 7.06387898700861e-13 2.32573358224615e-14 15848.93 7.44245300954376e-13 7.0638776716118e-13 2.32573305030995e-14 19952.62 7.44245277291889e-13 7.0638772687188e-13 2.32573328875724e-14 25118.86 7.44245330539801e-13 7.06387925009463e-13 2.3257337103547e-14 31622.78 7.4424515718388e-13 7.06387527907225e-13 2.32573277310019e-14 39810.72 7.44245186755073e-13 7.06387703918716e-13 2.32573297697088e-14 50118.72 7.44245240124554e-13 7.0638781571168e-13 2.3257332304941e-14 63095.73 7.44245257012675e-13 7.06387780248303e-13 2.32573344731343e-14 79432.82 7.44245248030987e-13 7.06387632542131e-13 2.32573359045728e-14 100000 7.44245119534614e-13 7.06387569841117e-13 2.3257327749513e-14 125892.5 7.44245390992764e-13 7.06387898700861e-13 2.32573358224615e-14 158489.3 7.44245300954376e-13 7.06387666741188e-13 2.32573305030995e-14 199526.2 7.44245277291889e-13 7.0638772687188e-13 2.32573328875724e-14 251188.6 7.44245330539801e-13 7.06387925009463e-13 2.3257337103547e-14 316227.8 7.4424515718388e-13 7.06387527907224e-13 2.32573277310019e-14 398107.2 7.44245186755073e-13 7.06387703918716e-13 2.32573297697088e-14 501187.2 7.44245240124554e-13 7.06387498155798e-13 2.3257332304941e-14 630957.3 7.44245257012675e-13 7.06387528004699e-13 2.32573344731343e-14 794328.2 7.44245047666776e-13 7.06387632542131e-13 2.32573359045728e-14 1000000 7.44244960379671e-13 7.06387410686174e-13 2.3257327749513e-14 1258925 7.44245138150151e-13 7.06387519436942e-13 2.32573358224615e-14 1584893 7.44244899274406e-13 7.06387265061218e-13 2.32573305030995e-14 1995262 7.44244718926822e-13 7.06387008973936e-13 2.32573328875724e-14 2511886 7.44244063325101e-13 7.06386657794764e-13 2.3257337103547e-14 3162278 7.44243647307679e-13 7.06385514738957e-13 2.32573277310019e-14 3981072 7.44242788080398e-13 7.06384505685816e-13 2.32573297697088e-14 5011872 7.44241429453977e-13 7.06382734817576e-13 2.3257332304941e-14 6309573 7.44239455409791e-13 7.0637996069659e-13 2.32573344731343e-14 7943282 7.4423603127728e-13 7.0637561068947e-13 2.32573359045728e-14 10000000 7.44230636434792e-13 7.06368471247946e-13 2.3257327749513e-14 12589250 7.44222255893702e-13 7.06357557587338e-13 2.32573358224615e-14 15848930 7.4420854723714e-13 7.0633976640479e-13 2.32573305030995e-14 19952620 7.44187207324852e-13 7.06311709456239e-13 2.32573328875724e-14 25118860 7.44153457474111e-13 7.06267539613042e-13 2.3257337103547e-14 31622780 7.44099202484462e-13 7.06196780213847e-13 2.32573277310019e-14 39810720 7.44013714648941e-13 7.06085071130561e-13 2.32573297697088e-14 50118720 7.43878780637305e-13 7.05908306330617e-13 2.3257332304941e-14 63095730 7.43664592237107e-13 7.05628022514154e-13 2.32573319506983e-14 79432820 7.43325375938148e-13 7.05184245090685e-13 2.32573359045728e-14 100000000 7.42788533495437e-13 7.04482007707478e-13 2.3257327749513e-14 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_Id1_vb0.standard0000644000175000017500000001167213546075722024664 0ustar carstencarstenV(d) I(d) -1.000000e+00 -5.353655e-04 -2.000000e+00 -5.457226e-04 -3.000000e+00 -5.459996e-04 -4.000000e+00 -5.461975e-04 -5.000000e+00 -5.463587e-04 -6.000000e+00 -5.464984e-04 -7.000000e+00 -5.466239e-04 -8.000000e+00 -5.467388e-04 -9.000000e+00 -5.468454e-04 -1.000000e+01 -5.469455e-04 -1.100000e+01 -5.470401e-04 -1.200000e+01 -5.471300e-04 -1.300000e+01 -5.472158e-04 -1.400000e+01 -5.472982e-04 -1.500000e+01 -5.473774e-04 -1.600000e+01 -5.474538e-04 -1.700000e+01 -5.475277e-04 -1.800000e+01 -5.475994e-04 -1.900000e+01 -5.476689e-04 -2.000000e+01 -5.477366e-04 -1.000000e+00 -1.766043e-03 -2.000000e+00 -3.067649e-03 -3.000000e+00 -3.808295e-03 -4.000000e+00 -3.987897e-03 -5.000000e+00 -3.989524e-03 -6.000000e+00 -3.990654e-03 -7.000000e+00 -3.991595e-03 -8.000000e+00 -3.992397e-03 -9.000000e+00 -3.993098e-03 -1.000000e+01 -3.993724e-03 -1.100000e+01 -3.994293e-03 -1.200000e+01 -3.994816e-03 -1.300000e+01 -3.995304e-03 -1.400000e+01 -3.995763e-03 -1.500000e+01 -3.996198e-03 -1.600000e+01 -3.996611e-03 -1.700000e+01 -3.997007e-03 -1.800000e+01 -3.997386e-03 -1.900000e+01 -3.997752e-03 -2.000000e+01 -3.998106e-03 -1.000000e+00 -2.216231e-03 -2.000000e+00 -4.281789e-03 -3.000000e+00 -6.168359e-03 -4.000000e+00 -7.837171e-03 -5.000000e+00 -9.237027e-03 -6.000000e+00 -1.030548e-02 -7.000000e+00 -1.099754e-02 -8.000000e+00 -1.134584e-02 -9.000000e+00 -1.146674e-02 -1.000000e+01 -1.148230e-02 -1.100000e+01 -1.148422e-02 -1.200000e+01 -1.148594e-02 -1.300000e+01 -1.148751e-02 -1.400000e+01 -1.148896e-02 -1.500000e+01 -1.149029e-02 -1.600000e+01 -1.149153e-02 -1.700000e+01 -1.149269e-02 -1.800000e+01 -1.149377e-02 -1.900000e+01 -1.149479e-02 -2.000000e+01 -1.149575e-02 -1.000000e+00 -6.962586e-04 -2.000000e+00 -7.009440e-04 -3.000000e+00 -7.013029e-04 -4.000000e+00 -7.015601e-04 -5.000000e+00 -7.017700e-04 -6.000000e+00 -7.019523e-04 -7.000000e+00 -7.021161e-04 -8.000000e+00 -7.022661e-04 -9.000000e+00 -7.024056e-04 -1.000000e+01 -7.025365e-04 -1.100000e+01 -7.026602e-04 -1.200000e+01 -7.027778e-04 -1.300000e+01 -7.028902e-04 -1.400000e+01 -7.029980e-04 -1.500000e+01 -7.031017e-04 -1.600000e+01 -7.032018e-04 -1.700000e+01 -7.032986e-04 -1.800000e+01 -7.033925e-04 -1.900000e+01 -7.034836e-04 -2.000000e+01 -7.035722e-04 -1.000000e+00 -2.345550e-03 -2.000000e+00 -4.089944e-03 -3.000000e+00 -5.079829e-03 -4.000000e+00 -5.301047e-03 -5.000000e+00 -5.302930e-03 -6.000000e+00 -5.304419e-03 -7.000000e+00 -5.305660e-03 -8.000000e+00 -5.306719e-03 -9.000000e+00 -5.307644e-03 -1.000000e+01 -5.308469e-03 -1.100000e+01 -5.309218e-03 -1.200000e+01 -5.309909e-03 -1.300000e+01 -5.310552e-03 -1.400000e+01 -5.311157e-03 -1.500000e+01 -5.311730e-03 -1.600000e+01 -5.312275e-03 -1.700000e+01 -5.312796e-03 -1.800000e+01 -5.313297e-03 -1.900000e+01 -5.313779e-03 -2.000000e+01 -5.314245e-03 -1.000000e+00 -2.649701e-03 -2.000000e+00 -5.144317e-03 -3.000000e+00 -7.444572e-03 -4.000000e+00 -9.498816e-03 -5.000000e+00 -1.124008e-02 -6.000000e+00 -1.258505e-02 -7.000000e+00 -1.346668e-02 -8.000000e+00 -1.391361e-02 -9.000000e+00 -1.406785e-02 -1.000000e+01 -1.408414e-02 -1.100000e+01 -1.408647e-02 -1.200000e+01 -1.408857e-02 -1.300000e+01 -1.409049e-02 -1.400000e+01 -1.409224e-02 -1.500000e+01 -1.409387e-02 -1.600000e+01 -1.409538e-02 -1.700000e+01 -1.409678e-02 -1.800000e+01 -1.409810e-02 -1.900000e+01 -1.409934e-02 -2.000000e+01 -1.410051e-02 -1.000000e+00 -4.013793e-04 -2.000000e+00 -4.230806e-04 -3.000000e+00 -4.232920e-04 -4.000000e+00 -4.234419e-04 -5.000000e+00 -4.235634e-04 -6.000000e+00 -4.236685e-04 -7.000000e+00 -4.237626e-04 -8.000000e+00 -4.238487e-04 -9.000000e+00 -4.239285e-04 -1.000000e+01 -4.240033e-04 -1.100000e+01 -4.240740e-04 -1.200000e+01 -4.241411e-04 -1.300000e+01 -4.242052e-04 -1.400000e+01 -4.242666e-04 -1.500000e+01 -4.243257e-04 -1.600000e+01 -4.243827e-04 -1.700000e+01 -4.244378e-04 -1.800000e+01 -4.244912e-04 -1.900000e+01 -4.245430e-04 -2.000000e+01 -4.245934e-04 -1.000000e+00 -1.222122e-03 -2.000000e+00 -2.119443e-03 -3.000000e+00 -2.640888e-03 -4.000000e+00 -2.789490e-03 -5.000000e+00 -2.793036e-03 -6.000000e+00 -2.793830e-03 -7.000000e+00 -2.794489e-03 -8.000000e+00 -2.795050e-03 -9.000000e+00 -2.795541e-03 -1.000000e+01 -2.795978e-03 -1.100000e+01 -2.796376e-03 -1.200000e+01 -2.796742e-03 -1.300000e+01 -2.797083e-03 -1.400000e+01 -2.797404e-03 -1.500000e+01 -2.797707e-03 -1.600000e+01 -2.797996e-03 -1.700000e+01 -2.798272e-03 -1.800000e+01 -2.798538e-03 -1.900000e+01 -2.798793e-03 -2.000000e+01 -2.799040e-03 -1.000000e+00 -1.701068e-03 -2.000000e+00 -3.266999e-03 -3.000000e+00 -4.681032e-03 -4.000000e+00 -5.918405e-03 -5.000000e+00 -6.945512e-03 -6.000000e+00 -7.722251e-03 -7.000000e+00 -8.223535e-03 -8.000000e+00 -8.478687e-03 -9.000000e+00 -8.571982e-03 -1.000000e+01 -8.589581e-03 -1.100000e+01 -8.591100e-03 -1.200000e+01 -8.592398e-03 -1.300000e+01 -8.593581e-03 -1.400000e+01 -8.594668e-03 -1.500000e+01 -8.595671e-03 -1.600000e+01 -8.596602e-03 -1.700000e+01 -8.597471e-03 -1.800000e+01 -8.598286e-03 -1.900000e+01 -8.599054e-03 -2.000000e+01 -8.599781e-03 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/acVd_codfm.standard0000644000175000017500000000550713546075722024545 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -1 -4.280637e-05 2.659802e-03 5.51129849220812e-13 6.81635284555728e-13 -2 -5.249392e-05 2.539700e-03 5.75206355739631e-13 6.55607877508694e-13 -3 -1.897485e-05 2.370966e-03 6.00283562529394e-13 6.26022769498396e-13 -4 6.783376e-05 2.148154e-03 6.26597369653972e-13 5.91000760016035e-13 -5 2.205748e-04 1.862079e-03 6.54492177206613e-13 5.46908348077822e-13 -6 4.554745e-04 1.500892e-03 6.83343585018257e-13 4.88805132346122e-13 -7 7.793652e-04 1.070273e-03 7.09285992042277e-13 4.16023712640236e-13 -8 1.152428e-03 6.316836e-04 7.25734496495782e-13 3.41577792483678e-13 -9 1.479814e-03 2.887448e-04 7.30580997807993e-13 2.82182476402137e-13 -10 1.692024e-03 9.135078e-05 7.21484095344967e-13 1.59242043115478e-13 -11 1.799655e-03 3.423695e-06 7.07581691580831e-13 4.78977829685337e-14 -12 1.800557e-03 2.736771e-06 7.0639179125866e-13 3.53673095758534e-14 -13 1.800887e-03 2.508079e-06 7.05875391118842e-13 2.9706738043229e-14 -14 1.801185e-03 2.317181e-06 7.05563691034448e-13 2.62897571180665e-14 -15 1.801465e-03 2.150687e-06 7.0534959097648e-13 2.39420164824054e-14 -16 1.801728e-03 2.003972e-06 7.05190890933511e-13 2.22015660111709e-14 -17 1.801974e-03 1.874551e-06 7.05067190900019e-13 2.08448956438465e-14 -18 1.802205e-03 1.760447e-06 7.04967190872943e-13 1.97489653471185e-14 -19 1.802421e-03 1.659840e-06 7.04884290850498e-13 1.88396951009297e-14 -20 1.802622e-03 1.571027e-06 7.04814090831491e-13 1.80694848923919e-14 -1 7.901448e-06 2.086187e-03 5.41994546747389e-13 6.88299786360171e-13 -2 4.161045e-05 1.968037e-03 5.65508453113881e-13 6.63083379532718e-13 -3 1.066847e-04 1.817588e-03 5.90207559801272e-13 6.33925971638223e-13 -4 2.092546e-04 1.629686e-03 6.16429466900968e-13 5.98587662070221e-13 -5 3.575552e-04 1.396698e-03 6.44702174555927e-13 5.5292094970576e-13 -6 5.613902e-04 1.110849e-03 6.74531982632478e-13 4.91628733110625e-13 -7 8.208386e-04 7.808443e-04 7.01836890025401e-13 4.14778112302984e-13 -8 1.101357e-03 4.567267e-04 7.19558394823575e-13 3.36802491190744e-13 -9 1.336540e-03 2.109150e-04 7.2529789637757e-13 2.71491573507528e-13 -10 1.484861e-03 7.174445e-05 7.17820794353112e-13 1.25562833996685e-13 -11 1.558948e-03 1.024274e-05 7.10555492386e-13 5.01725535844378e-14 -12 1.569602e-03 2.121743e-06 7.08126991728473e-13 3.4519159346213e-14 -13 1.569899e-03 1.934851e-06 7.07775191633222e-13 2.92277979135538e-14 -14 1.570155e-03 1.786920e-06 7.07560191575009e-13 2.59738870325433e-14 -15 1.570395e-03 1.658409e-06 7.07410991534613e-13 2.37139064206436e-14 -16 1.570619e-03 1.545471e-06 7.07299591504451e-13 2.20269559638944e-14 -17 1.570830e-03 1.446020e-06 7.07212291480814e-13 2.07057256061656e-14 -18 1.571026e-03 1.358431e-06 7.07141591461672e-13 1.9634675316174e-14 -19 1.571210e-03 1.281242e-06 7.07082791445751e-13 1.87436650749291e-14 -20 1.571382e-03 1.213114e-06 7.07032891432241e-13 1.7987314870144e-14 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_Id1_vb2.standard0000644000175000017500000001167213546075722024666 0ustar carstencarstenV(d) I(d) -1.000000e+00 -2.896765e-04 -2.000000e+00 -2.899693e-04 -3.000000e+00 -2.901275e-04 -4.000000e+00 -2.902461e-04 -5.000000e+00 -2.903454e-04 -6.000000e+00 -2.904328e-04 -7.000000e+00 -2.905119e-04 -8.000000e+00 -2.905847e-04 -9.000000e+00 -2.906526e-04 -1.000000e+01 -2.907165e-04 -1.100000e+01 -2.907769e-04 -1.200000e+01 -2.908345e-04 -1.300000e+01 -2.908895e-04 -1.400000e+01 -2.909423e-04 -1.500000e+01 -2.909932e-04 -1.600000e+01 -2.910423e-04 -1.700000e+01 -2.910898e-04 -1.800000e+01 -2.911359e-04 -1.900000e+01 -2.911806e-04 -2.000000e+01 -2.912242e-04 -1.000000e+00 -1.544166e-03 -2.000000e+00 -2.663776e-03 -3.000000e+00 -3.253541e-03 -4.000000e+00 -3.353740e-03 -5.000000e+00 -3.355049e-03 -6.000000e+00 -3.356096e-03 -7.000000e+00 -3.356967e-03 -8.000000e+00 -3.357711e-03 -9.000000e+00 -3.358362e-03 -1.000000e+01 -3.358946e-03 -1.100000e+01 -3.359478e-03 -1.200000e+01 -3.359969e-03 -1.300000e+01 -3.360429e-03 -1.400000e+01 -3.360861e-03 -1.500000e+01 -3.361271e-03 -1.600000e+01 -3.361663e-03 -1.700000e+01 -3.362037e-03 -1.800000e+01 -3.362397e-03 -1.900000e+01 -3.362744e-03 -2.000000e+01 -3.363080e-03 -1.000000e+00 -2.061821e-03 -2.000000e+00 -3.996738e-03 -3.000000e+00 -5.768249e-03 -4.000000e+00 -7.333901e-03 -5.000000e+00 -8.640508e-03 -6.000000e+00 -9.625452e-03 -7.000000e+00 -1.024745e-02 -8.000000e+00 -1.054612e-02 -9.000000e+00 -1.063989e-02 -1.000000e+01 -1.064772e-02 -1.100000e+01 -1.064962e-02 -1.200000e+01 -1.065133e-02 -1.300000e+01 -1.065289e-02 -1.400000e+01 -1.065432e-02 -1.500000e+01 -1.065564e-02 -1.600000e+01 -1.065687e-02 -1.700000e+01 -1.065801e-02 -1.800000e+01 -1.065909e-02 -1.900000e+01 -1.066010e-02 -2.000000e+01 -1.066106e-02 -1.000000e+00 -3.530425e-04 -2.000000e+00 -3.533750e-04 -3.000000e+00 -3.535691e-04 -4.000000e+00 -3.537151e-04 -5.000000e+00 -3.538377e-04 -6.000000e+00 -3.539458e-04 -7.000000e+00 -3.540437e-04 -8.000000e+00 -3.541339e-04 -9.000000e+00 -3.542180e-04 -1.000000e+01 -3.542972e-04 -1.100000e+01 -3.543722e-04 -1.200000e+01 -3.544436e-04 -1.300000e+01 -3.545118e-04 -1.400000e+01 -3.545774e-04 -1.500000e+01 -3.546405e-04 -1.600000e+01 -3.547015e-04 -1.700000e+01 -3.547605e-04 -1.800000e+01 -3.548177e-04 -1.900000e+01 -3.548733e-04 -2.000000e+01 -3.549274e-04 -1.000000e+00 -2.034888e-03 -2.000000e+00 -3.523350e-03 -3.000000e+00 -4.300174e-03 -4.000000e+00 -4.416044e-03 -5.000000e+00 -4.417746e-03 -6.000000e+00 -4.419115e-03 -7.000000e+00 -4.420254e-03 -8.000000e+00 -4.421227e-03 -9.000000e+00 -4.422080e-03 -1.000000e+01 -4.422844e-03 -1.100000e+01 -4.423540e-03 -1.200000e+01 -4.424183e-03 -1.300000e+01 -4.424783e-03 -1.400000e+01 -4.425349e-03 -1.500000e+01 -4.425886e-03 -1.600000e+01 -4.426398e-03 -1.700000e+01 -4.426888e-03 -1.800000e+01 -4.427359e-03 -1.900000e+01 -4.427813e-03 -2.000000e+01 -4.428252e-03 -1.000000e+00 -2.454545e-03 -2.000000e+00 -4.782221e-03 -3.000000e+00 -6.934492e-03 -4.000000e+00 -8.855410e-03 -5.000000e+00 -1.047537e-02 -6.000000e+00 -1.171039e-02 -7.000000e+00 -1.249820e-02 -8.000000e+00 -1.287776e-02 -9.000000e+00 -1.299468e-02 -1.000000e+01 -1.300130e-02 -1.100000e+01 -1.300359e-02 -1.200000e+01 -1.300566e-02 -1.300000e+01 -1.300756e-02 -1.400000e+01 -1.300929e-02 -1.500000e+01 -1.301090e-02 -1.600000e+01 -1.301239e-02 -1.700000e+01 -1.301377e-02 -1.800000e+01 -1.301508e-02 -1.900000e+01 -1.301630e-02 -2.000000e+01 -1.301747e-02 -1.000000e+00 -2.388162e-04 -2.000000e+00 -2.404798e-04 -3.000000e+00 -2.406096e-04 -4.000000e+00 -2.407061e-04 -5.000000e+00 -2.407865e-04 -6.000000e+00 -2.408571e-04 -7.000000e+00 -2.409209e-04 -8.000000e+00 -2.409795e-04 -9.000000e+00 -2.410341e-04 -1.000000e+01 -2.410853e-04 -1.100000e+01 -2.411339e-04 -1.200000e+01 -2.411800e-04 -1.300000e+01 -2.412241e-04 -1.400000e+01 -2.412665e-04 -1.500000e+01 -2.413072e-04 -1.600000e+01 -2.413466e-04 -1.700000e+01 -2.413846e-04 -1.800000e+01 -2.414215e-04 -1.900000e+01 -2.414574e-04 -2.000000e+01 -2.414922e-04 -1.000000e+00 -1.076751e-03 -2.000000e+00 -1.855918e-03 -3.000000e+00 -2.279679e-03 -4.000000e+00 -2.371520e-03 -5.000000e+00 -2.372623e-03 -6.000000e+00 -2.373365e-03 -7.000000e+00 -2.373981e-03 -8.000000e+00 -2.374507e-03 -9.000000e+00 -2.374967e-03 -1.000000e+01 -2.375380e-03 -1.100000e+01 -2.375755e-03 -1.200000e+01 -2.376103e-03 -1.300000e+01 -2.376427e-03 -1.400000e+01 -2.376732e-03 -1.500000e+01 -2.377021e-03 -1.600000e+01 -2.377297e-03 -1.700000e+01 -2.377561e-03 -1.800000e+01 -2.377815e-03 -1.900000e+01 -2.378060e-03 -2.000000e+01 -2.378297e-03 -1.000000e+00 -1.590305e-03 -2.000000e+00 -3.063989e-03 -3.000000e+00 -4.397533e-03 -4.000000e+00 -5.563221e-03 -5.000000e+00 -6.525992e-03 -6.000000e+00 -7.245704e-03 -7.000000e+00 -7.699672e-03 -8.000000e+00 -7.921421e-03 -9.000000e+00 -7.996381e-03 -1.000000e+01 -8.007382e-03 -1.100000e+01 -8.008831e-03 -1.200000e+01 -8.010124e-03 -1.300000e+01 -8.011304e-03 -1.400000e+01 -8.012387e-03 -1.500000e+01 -8.013387e-03 -1.600000e+01 -8.014316e-03 -1.700000e+01 -8.015183e-03 -1.800000e+01 -8.015996e-03 -1.900000e+01 -8.016762e-03 -2.000000e+01 -8.017488e-03 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_corsrd0.standard0000644000175000017500000001167213546075722025054 0ustar carstencarstenV(d) I(d) -1.000000e+00 -2.069102e-03 -2.000000e+00 -2.107011e-03 -3.000000e+00 -2.110935e-03 -4.000000e+00 -2.113765e-03 -5.000000e+00 -2.116078e-03 -6.000000e+00 -2.118089e-03 -7.000000e+00 -2.119895e-03 -8.000000e+00 -2.121551e-03 -9.000000e+00 -2.123089e-03 -1.000000e+01 -2.124533e-03 -1.100000e+01 -2.125899e-03 -1.200000e+01 -2.127197e-03 -1.300000e+01 -2.128438e-03 -1.400000e+01 -2.129628e-03 -1.500000e+01 -2.130774e-03 -1.600000e+01 -2.131880e-03 -1.700000e+01 -2.132949e-03 -1.800000e+01 -2.133986e-03 -1.900000e+01 -2.134994e-03 -2.000000e+01 -2.135974e-03 -1.000000e+00 -6.981472e-03 -2.000000e+00 -1.135687e-02 -3.000000e+00 -1.348080e-02 -4.000000e+00 -1.391234e-02 -5.000000e+00 -1.392721e-02 -6.000000e+00 -1.393927e-02 -7.000000e+00 -1.394946e-02 -8.000000e+00 -1.395824e-02 -9.000000e+00 -1.396597e-02 -1.000000e+01 -1.397292e-02 -1.100000e+01 -1.397925e-02 -1.200000e+01 -1.398510e-02 -1.300000e+01 -1.399057e-02 -1.400000e+01 -1.399572e-02 -1.500000e+01 -1.400060e-02 -1.600000e+01 -1.400525e-02 -1.700000e+01 -1.400971e-02 -1.800000e+01 -1.401399e-02 -1.900000e+01 -1.401811e-02 -2.000000e+01 -1.402210e-02 -1.000000e+00 -9.086312e-03 -2.000000e+00 -1.694179e-02 -3.000000e+00 -2.341290e-02 -4.000000e+00 -2.856862e-02 -5.000000e+00 -3.247829e-02 -6.000000e+00 -3.517187e-02 -7.000000e+00 -3.673570e-02 -8.000000e+00 -3.743767e-02 -9.000000e+00 -3.765059e-02 -1.000000e+01 -3.767748e-02 -1.100000e+01 -3.769417e-02 -1.200000e+01 -3.770955e-02 -1.300000e+01 -3.772380e-02 -1.400000e+01 -3.773703e-02 -1.500000e+01 -3.774937e-02 -1.600000e+01 -3.776091e-02 -1.700000e+01 -3.777174e-02 -1.800000e+01 -3.778197e-02 -1.900000e+01 -3.779164e-02 -2.000000e+01 -3.780084e-02 -1.000000e+00 -2.635572e-03 -2.000000e+00 -2.654114e-03 -3.000000e+00 -2.658943e-03 -4.000000e+00 -2.662436e-03 -5.000000e+00 -2.665298e-03 -6.000000e+00 -2.667788e-03 -7.000000e+00 -2.670027e-03 -8.000000e+00 -2.672082e-03 -9.000000e+00 -2.673992e-03 -1.000000e+01 -2.675786e-03 -1.100000e+01 -2.677482e-03 -1.200000e+01 -2.679096e-03 -1.300000e+01 -2.680638e-03 -1.400000e+01 -2.682118e-03 -1.500000e+01 -2.683542e-03 -1.600000e+01 -2.684917e-03 -1.700000e+01 -2.686247e-03 -1.800000e+01 -2.687537e-03 -1.900000e+01 -2.688790e-03 -2.000000e+01 -2.690009e-03 -1.000000e+00 -9.177450e-03 -2.000000e+00 -1.464443e-02 -3.000000e+00 -1.716774e-02 -4.000000e+00 -1.760665e-02 -5.000000e+00 -1.762398e-02 -6.000000e+00 -1.763821e-02 -7.000000e+00 -1.765024e-02 -8.000000e+00 -1.766061e-02 -9.000000e+00 -1.766975e-02 -1.000000e+01 -1.767795e-02 -1.100000e+01 -1.768544e-02 -1.200000e+01 -1.769236e-02 -1.300000e+01 -1.769882e-02 -1.400000e+01 -1.770491e-02 -1.500000e+01 -1.771068e-02 -1.600000e+01 -1.771619e-02 -1.700000e+01 -1.772146e-02 -1.800000e+01 -1.772652e-02 -1.900000e+01 -1.773140e-02 -2.000000e+01 -1.773612e-02 -1.000000e+00 -1.091233e-02 -2.000000e+00 -2.029259e-02 -3.000000e+00 -2.795379e-02 -4.000000e+00 -3.401877e-02 -5.000000e+00 -3.859294e-02 -6.000000e+00 -4.171931e-02 -7.000000e+00 -4.350660e-02 -8.000000e+00 -4.428675e-02 -9.000000e+00 -4.450606e-02 -1.000000e+01 -4.452828e-02 -1.100000e+01 -4.454698e-02 -1.200000e+01 -4.456422e-02 -1.300000e+01 -4.458020e-02 -1.400000e+01 -4.459504e-02 -1.500000e+01 -4.460887e-02 -1.600000e+01 -4.462182e-02 -1.700000e+01 -4.463397e-02 -1.800000e+01 -4.464544e-02 -1.900000e+01 -4.465630e-02 -2.000000e+01 -4.466662e-02 -1.000000e+00 -1.574804e-03 -2.000000e+00 -1.655404e-03 -3.000000e+00 -1.658510e-03 -4.000000e+00 -1.660734e-03 -5.000000e+00 -1.662544e-03 -6.000000e+00 -1.664112e-03 -7.000000e+00 -1.665518e-03 -8.000000e+00 -1.666806e-03 -9.000000e+00 -1.668001e-03 -1.000000e+01 -1.669121e-03 -1.100000e+01 -1.670180e-03 -1.200000e+01 -1.671187e-03 -1.300000e+01 -1.672148e-03 -1.400000e+01 -1.673070e-03 -1.500000e+01 -1.673957e-03 -1.600000e+01 -1.674813e-03 -1.700000e+01 -1.675641e-03 -1.800000e+01 -1.676443e-03 -1.900000e+01 -1.677222e-03 -2.000000e+01 -1.677980e-03 -1.000000e+00 -4.867622e-03 -2.000000e+00 -8.083649e-03 -3.000000e+00 -9.756523e-03 -4.000000e+00 -1.018403e-02 -5.000000e+00 -1.020007e-02 -6.000000e+00 -1.020950e-02 -7.000000e+00 -1.021743e-02 -8.000000e+00 -1.022427e-02 -9.000000e+00 -1.023028e-02 -1.000000e+01 -1.023568e-02 -1.100000e+01 -1.024060e-02 -1.200000e+01 -1.024515e-02 -1.300000e+01 -1.024940e-02 -1.400000e+01 -1.025339e-02 -1.500000e+01 -1.025718e-02 -1.600000e+01 -1.026079e-02 -1.700000e+01 -1.026425e-02 -1.800000e+01 -1.026757e-02 -1.900000e+01 -1.027077e-02 -2.000000e+01 -1.027387e-02 -1.000000e+00 -6.936274e-03 -2.000000e+00 -1.296982e-02 -3.000000e+00 -1.799657e-02 -4.000000e+00 -2.204097e-02 -5.000000e+00 -2.513667e-02 -6.000000e+00 -2.729862e-02 -7.000000e+00 -2.858611e-02 -8.000000e+00 -2.919222e-02 -9.000000e+00 -2.939822e-02 -1.000000e+01 -2.943707e-02 -1.100000e+01 -2.945100e-02 -1.200000e+01 -2.946377e-02 -1.300000e+01 -2.947559e-02 -1.400000e+01 -2.948657e-02 -1.500000e+01 -2.949680e-02 -1.600000e+01 -2.950637e-02 -1.700000e+01 -2.951536e-02 -1.800000e+01 -2.952383e-02 -1.900000e+01 -2.953186e-02 -2.000000e+01 -2.953949e-02 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/acFreq_nover.standard0000644000175000017500000000710413546075722025125 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 7.30280069053016e-13 7.05599434562926e-13 9.8741175004194e-15 1258.925 7.30280387808537e-13 7.05599535434486e-13 9.87412096161353e-15 1584.893 7.30280193864522e-13 7.05599470220458e-13 9.87411910988777e-15 1995.262 7.30280168117348e-13 7.05599474929211e-13 9.87411987997828e-15 2511.886 7.30279990947604e-13 7.0559971746658e-13 9.87411792770772e-15 3162.278 7.30279808909902e-13 7.05599372530367e-13 9.87411725919252e-15 3981.072 7.30280102797571e-13 7.05599339508886e-13 9.87411631485365e-15 5011.872 7.30280085123883e-13 7.05599324457918e-13 9.87411751046941e-15 6309.573 7.30280042141019e-13 7.05599518986943e-13 9.87411874571e-15 7943.282 7.30280062886406e-13 7.05599399735939e-13 9.87411862913872e-15 10000 7.30280069053015e-13 7.05599434562926e-13 9.8741175004194e-15 12589.25 7.30280387808537e-13 7.05599535434486e-13 9.87412096161353e-15 15848.93 7.30280193864522e-13 7.05599470220459e-13 9.87411910988777e-15 19952.62 7.30280168117348e-13 7.0559947492921e-13 9.87411987997828e-15 25118.86 7.30279990947604e-13 7.0559971746658e-13 9.87411792770772e-15 31622.78 7.30279808909902e-13 7.05599372530367e-13 9.87411725919252e-15 39810.72 7.30280102797571e-13 7.05599339508886e-13 9.87411631485365e-15 50118.72 7.30280085123883e-13 7.05599324457918e-13 9.87411751046941e-15 63095.73 7.30280042141019e-13 7.05599518986943e-13 9.87411874571e-15 79432.82 7.30280062886406e-13 7.05599399735939e-13 9.87411862913872e-15 100000 7.30280069053015e-13 7.05599434562926e-13 9.8741175004194e-15 125892.5 7.30280387808537e-13 7.05599535434486e-13 9.87412096161353e-15 158489.3 7.30280193864522e-13 7.05599470220458e-13 9.87411910988777e-15 199526.2 7.30280168117348e-13 7.0559947492921e-13 9.87411987997828e-15 251188.6 7.30279990947604e-13 7.0559971746658e-13 9.87411792770772e-15 316227.8 7.30279808909902e-13 7.05599372530367e-13 9.87411725919252e-15 398107.2 7.30280102797571e-13 7.05599339508886e-13 9.87411631485365e-15 501187.2 7.30280085123883e-13 7.05599324457918e-13 9.87411751046941e-15 630957.3 7.30280042141019e-13 7.05599518986943e-13 9.87411874571e-15 794328.2 7.30280062886406e-13 7.05599399735939e-13 9.87411862913873e-15 1000000 7.30280069053015e-13 7.05599434562926e-13 9.8741175004194e-15 1258925 7.30280387808537e-13 7.05599535434486e-13 9.87412096161353e-15 1584893 7.30280193864522e-13 7.05599470220458e-13 9.87411910988777e-15 1995262 7.30280168117348e-13 7.05599474929211e-13 9.87411987997828e-15 2511886 7.30279990947604e-13 7.0559971746658e-13 9.87411792770772e-15 3162278 7.30279808909902e-13 7.05599372530367e-13 9.87411725919252e-15 3981072 7.30280102797571e-13 7.05599339508886e-13 9.87411631485365e-15 5011872 7.30280085123884e-13 7.05599324457918e-13 9.87411751046941e-15 6309573 7.30280042141019e-13 7.05599518986943e-13 9.87411874571e-15 7943282 7.30280062886406e-13 7.05599399735939e-13 9.87411862913872e-15 10000000 7.30280069053015e-13 7.05599434562926e-13 9.8741175004194e-15 12589250 7.30280387808537e-13 7.05599535434486e-13 9.87412096161353e-15 15848930 7.30280193864522e-13 7.05599470220458e-13 9.87411910988777e-15 19952620 7.30280168117348e-13 7.05599474929211e-13 9.87411987997828e-15 25118860 7.30279990947604e-13 7.0559971746658e-13 9.87411792770772e-15 31622780 7.30279808909902e-13 7.05599372530367e-13 9.87411725919252e-15 39810720 7.30280102797571e-13 7.05599339508886e-13 9.87411631485365e-15 50118720 7.30280085123883e-13 7.05599324457918e-13 9.87411751046941e-15 63095730 7.30280042141019e-13 7.05599518986943e-13 9.87411874571e-15 79432820 7.30280062886406e-13 7.05599399735939e-13 9.87411862913872e-15 100000000 7.30280069053016e-13 7.05599434562926e-13 9.8741175004194e-15 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_Ig1_vb0_jd.standard0000644000175000017500000002746513546075722025353 0ustar carstencarstenV(g) I(d) I(g) I(s) I(b) -1.000000e+00 -8.813838e-05 0.000000e+00 8.813838e-05 2.010000e-15 -2.000000e+00 -8.427276e-04 0.000000e+00 8.427276e-04 2.010000e-15 -3.000000e+00 -2.136842e-03 0.000000e+00 2.136842e-03 2.010000e-15 -4.000000e+00 -3.358829e-03 0.000000e+00 3.358829e-03 2.010000e-15 -5.000000e+00 -4.215517e-03 0.000000e+00 4.215517e-03 2.010000e-15 -6.000000e+00 -4.807209e-03 0.000000e+00 4.807209e-03 2.010000e-15 -7.000000e+00 -5.208367e-03 0.000000e+00 5.208367e-03 2.010000e-15 -8.000000e+00 -5.471379e-03 0.000000e+00 5.471379e-03 2.010000e-15 -9.000000e+00 -5.633828e-03 0.000000e+00 5.633828e-03 2.010000e-15 -1.000000e+01 -5.722784e-03 0.000000e+00 5.722784e-03 2.010000e-15 -1.100000e+01 -5.757827e-03 0.000000e+00 5.757827e-03 2.010000e-15 -1.200000e+01 -5.753220e-03 0.000000e+00 5.753220e-03 2.010000e-15 -1.300000e+01 -5.719449e-03 0.000000e+00 5.719449e-03 2.010000e-15 -1.400000e+01 -5.664293e-03 0.000000e+00 5.664293e-03 2.010000e-15 -1.500000e+01 -5.593579e-03 0.000000e+00 5.593579e-03 2.010000e-15 -1.600000e+01 -5.511700e-03 0.000000e+00 5.511700e-03 2.010000e-15 -1.700000e+01 -5.421994e-03 0.000000e+00 5.421994e-03 2.010000e-15 -1.800000e+01 -5.327005e-03 0.000000e+00 5.327005e-03 2.010000e-15 -1.900000e+01 -5.228682e-03 0.000000e+00 5.228682e-03 2.010000e-15 -2.000000e+01 -5.128516e-03 0.000000e+00 5.128516e-03 2.010000e-15 -1.000000e+00 -8.857496e-05 0.000000e+00 8.857496e-05 5.010000e-15 -2.000000e+00 -8.463978e-04 0.000000e+00 8.463978e-04 5.010000e-15 -3.000000e+00 -2.152038e-03 0.000000e+00 2.152038e-03 5.010000e-15 -4.000000e+00 -3.773364e-03 0.000000e+00 3.773364e-03 5.010000e-15 -5.000000e+00 -5.569017e-03 0.000000e+00 5.569017e-03 5.010000e-15 -6.000000e+00 -7.430415e-03 0.000000e+00 7.430415e-03 5.010000e-15 -7.000000e+00 -8.980460e-03 0.000000e+00 8.980460e-03 5.010000e-15 -8.000000e+00 -1.004667e-02 0.000000e+00 1.004667e-02 5.010000e-15 -9.000000e+00 -1.073975e-02 0.000000e+00 1.073975e-02 5.010000e-15 -1.000000e+01 -1.118290e-02 0.000000e+00 1.118290e-02 5.010000e-15 -1.100000e+01 -1.145935e-02 0.000000e+00 1.145935e-02 5.010000e-15 -1.200000e+01 -1.162196e-02 0.000000e+00 1.162196e-02 5.010000e-15 -1.300000e+01 -1.170453e-02 0.000000e+00 1.170453e-02 5.010000e-15 -1.400000e+01 -1.172925e-02 0.000000e+00 1.172925e-02 5.010000e-15 -1.500000e+01 -1.171108e-02 0.000000e+00 1.171108e-02 5.010000e-15 -1.600000e+01 -1.166044e-02 0.000000e+00 1.166044e-02 5.010000e-15 -1.700000e+01 -1.158479e-02 0.000000e+00 1.158479e-02 5.010000e-15 -1.800000e+01 -1.148966e-02 0.000000e+00 1.148966e-02 5.010000e-15 -1.900000e+01 -1.137925e-02 0.000000e+00 1.137925e-02 5.010000e-15 -2.000000e+01 -1.125680e-02 0.000000e+00 1.125680e-02 5.010000e-15 -1.000000e+00 -8.905477e-05 0.000000e+00 8.905477e-05 1.001000e-14 -2.000000e+00 -8.497913e-04 0.000000e+00 8.497913e-04 1.001000e-14 -3.000000e+00 -2.159587e-03 0.000000e+00 2.159587e-03 1.001000e-14 -4.000000e+00 -3.786221e-03 0.000000e+00 3.786221e-03 1.001000e-14 -5.000000e+00 -5.588242e-03 0.000000e+00 5.588242e-03 1.001000e-14 -6.000000e+00 -7.478077e-03 0.000000e+00 7.478077e-03 1.001000e-14 -7.000000e+00 -9.399877e-03 0.000000e+00 9.399877e-03 1.001000e-14 -8.000000e+00 -1.131734e-02 0.000000e+00 1.131734e-02 1.001000e-14 -9.000000e+00 -1.320627e-02 0.000000e+00 1.320627e-02 1.001000e-14 -1.000000e+01 -1.485114e-02 0.000000e+00 1.485114e-02 1.001000e-14 -1.100000e+01 -1.577577e-02 0.000000e+00 1.577577e-02 1.001000e-14 -1.200000e+01 -1.620071e-02 0.000000e+00 1.620071e-02 1.001000e-14 -1.300000e+01 -1.641459e-02 0.000000e+00 1.641459e-02 1.001000e-14 -1.400000e+01 -1.652858e-02 0.000000e+00 1.652858e-02 1.001000e-14 -1.500000e+01 -1.658666e-02 0.000000e+00 1.658666e-02 1.001000e-14 -1.600000e+01 -1.660949e-02 0.000000e+00 1.660949e-02 1.001000e-14 -1.700000e+01 -1.660812e-02 0.000000e+00 1.660812e-02 1.001000e-14 -1.800000e+01 -1.658904e-02 0.000000e+00 1.658904e-02 1.001000e-14 -1.900000e+01 -1.655633e-02 0.000000e+00 1.655633e-02 1.001000e-14 -2.000000e+01 -1.651270e-02 0.000000e+00 1.651270e-02 1.001000e-14 -1.000000e+00 -7.417996e-05 0.000000e+00 7.417996e-05 2.000000e-15 -2.000000e+00 -1.061526e-03 0.000000e+00 1.061526e-03 2.000000e-15 -3.000000e+00 -2.773246e-03 0.000000e+00 2.773246e-03 2.000000e-15 -4.000000e+00 -4.324547e-03 0.000000e+00 4.324547e-03 2.000000e-15 -5.000000e+00 -5.312153e-03 0.000000e+00 5.312153e-03 2.000000e-15 -6.000000e+00 -5.926788e-03 0.000000e+00 5.926788e-03 2.000000e-15 -7.000000e+00 -6.295175e-03 0.000000e+00 6.295175e-03 2.000000e-15 -8.000000e+00 -6.499028e-03 0.000000e+00 6.499028e-03 2.000000e-15 -9.000000e+00 -6.591772e-03 0.000000e+00 6.591772e-03 2.000000e-15 -1.000000e+01 -6.608725e-03 0.000000e+00 6.608725e-03 2.000000e-15 -1.100000e+01 -6.573620e-03 0.000000e+00 6.573620e-03 2.000000e-15 -1.200000e+01 -6.502704e-03 0.000000e+00 6.502704e-03 2.000000e-15 -1.300000e+01 -6.407301e-03 0.000000e+00 6.407301e-03 2.000000e-15 -1.400000e+01 -6.295429e-03 0.000000e+00 6.295429e-03 2.000000e-15 -1.500000e+01 -6.172835e-03 0.000000e+00 6.172835e-03 2.000000e-15 -1.600000e+01 -6.043677e-03 0.000000e+00 6.043677e-03 2.000000e-15 -1.700000e+01 -5.910978e-03 0.000000e+00 5.910978e-03 2.000000e-15 -1.800000e+01 -5.776945e-03 0.000000e+00 5.776945e-03 2.000000e-15 -1.900000e+01 -5.643181e-03 0.000000e+00 5.643181e-03 2.000000e-15 -2.000000e+01 -5.510847e-03 0.000000e+00 5.510847e-03 2.000000e-15 -1.000000e+00 -7.456138e-05 0.000000e+00 7.456138e-05 5.000000e-15 -2.000000e+00 -1.066066e-03 0.000000e+00 1.066066e-03 5.000000e-15 -3.000000e+00 -2.787886e-03 0.000000e+00 2.787886e-03 5.000000e-15 -4.000000e+00 -4.847594e-03 0.000000e+00 4.847594e-03 5.000000e-15 -5.000000e+00 -7.046557e-03 0.000000e+00 7.046557e-03 5.000000e-15 -6.000000e+00 -9.236808e-03 0.000000e+00 9.236808e-03 5.000000e-15 -7.000000e+00 -1.086870e-02 0.000000e+00 1.086870e-02 5.000000e-15 -8.000000e+00 -1.184233e-02 0.000000e+00 1.184233e-02 5.000000e-15 -9.000000e+00 -1.239886e-02 0.000000e+00 1.239886e-02 5.000000e-15 -1.000000e+01 -1.270961e-02 0.000000e+00 1.270961e-02 5.000000e-15 -1.100000e+01 -1.286908e-02 0.000000e+00 1.286908e-02 5.000000e-15 -1.200000e+01 -1.293029e-02 0.000000e+00 1.293029e-02 5.000000e-15 -1.300000e+01 -1.292452e-02 0.000000e+00 1.292452e-02 5.000000e-15 -1.400000e+01 -1.287125e-02 0.000000e+00 1.287125e-02 5.000000e-15 -1.500000e+01 -1.278321e-02 0.000000e+00 1.278321e-02 5.000000e-15 -1.600000e+01 -1.266914e-02 0.000000e+00 1.266914e-02 5.000000e-15 -1.700000e+01 -1.253525e-02 0.000000e+00 1.253525e-02 5.000000e-15 -1.800000e+01 -1.238618e-02 0.000000e+00 1.238618e-02 5.000000e-15 -1.900000e+01 -1.222547e-02 0.000000e+00 1.222547e-02 5.000000e-15 -2.000000e+01 -1.205589e-02 0.000000e+00 1.205589e-02 5.000000e-15 -1.000000e+00 -7.498350e-05 0.000000e+00 7.498350e-05 1.000000e-14 -2.000000e+00 -1.070279e-03 0.000000e+00 1.070279e-03 1.000000e-14 -3.000000e+00 -2.797239e-03 0.000000e+00 2.797239e-03 1.000000e-14 -4.000000e+00 -4.863256e-03 0.000000e+00 4.863256e-03 1.000000e-14 -5.000000e+00 -7.069683e-03 0.000000e+00 7.069683e-03 1.000000e-14 -6.000000e+00 -9.311170e-03 0.000000e+00 9.311170e-03 1.000000e-14 -7.000000e+00 -1.152926e-02 0.000000e+00 1.152926e-02 1.000000e-14 -8.000000e+00 -1.369074e-02 0.000000e+00 1.369074e-02 1.000000e-14 -9.000000e+00 -1.574581e-02 0.000000e+00 1.574581e-02 1.000000e-14 -1.000000e+01 -1.700790e-02 0.000000e+00 1.700790e-02 1.000000e-14 -1.100000e+01 -1.748927e-02 0.000000e+00 1.748927e-02 1.000000e-14 -1.200000e+01 -1.769707e-02 0.000000e+00 1.769707e-02 1.000000e-14 -1.300000e+01 -1.779374e-02 0.000000e+00 1.779374e-02 1.000000e-14 -1.400000e+01 -1.783249e-02 0.000000e+00 1.783249e-02 1.000000e-14 -1.500000e+01 -1.783598e-02 0.000000e+00 1.783598e-02 1.000000e-14 -1.600000e+01 -1.781568e-02 0.000000e+00 1.781568e-02 1.000000e-14 -1.700000e+01 -1.777809e-02 0.000000e+00 1.777809e-02 1.000000e-14 -1.800000e+01 -1.772720e-02 0.000000e+00 1.772720e-02 1.000000e-14 -1.900000e+01 -1.766560e-02 0.000000e+00 1.766560e-02 1.000000e-14 -2.000000e+01 -1.759505e-02 0.000000e+00 1.759505e-02 1.000000e-14 -1.000000e+00 -1.107588e-04 0.000000e+00 1.107588e-04 1.295574e-11 -2.000000e+00 -6.621137e-04 0.000000e+00 6.621137e-04 1.295574e-11 -3.000000e+00 -1.558903e-03 0.000000e+00 1.558903e-03 1.295574e-11 -4.000000e+00 -2.412188e-03 0.000000e+00 2.412188e-03 1.295574e-11 -5.000000e+00 -3.066626e-03 0.000000e+00 3.066626e-03 1.295574e-11 -6.000000e+00 -3.564666e-03 0.000000e+00 3.564666e-03 1.295574e-11 -7.000000e+00 -3.940940e-03 0.000000e+00 3.940940e-03 1.295574e-11 -8.000000e+00 -4.221391e-03 0.000000e+00 4.221391e-03 1.295574e-11 -9.000000e+00 -4.426206e-03 0.000000e+00 4.426206e-03 1.295574e-11 -1.000000e+01 -4.571277e-03 0.000000e+00 4.571277e-03 1.295574e-11 -1.100000e+01 -4.669137e-03 0.000000e+00 4.669137e-03 1.295574e-11 -1.200000e+01 -4.729672e-03 0.000000e+00 4.729672e-03 1.295574e-11 -1.300000e+01 -4.760693e-03 0.000000e+00 4.760693e-03 1.295574e-11 -1.400000e+01 -4.768383e-03 0.000000e+00 4.768383e-03 1.295574e-11 -1.500000e+01 -4.757653e-03 0.000000e+00 4.757653e-03 1.295574e-11 -1.600000e+01 -4.732417e-03 0.000000e+00 4.732417e-03 1.295574e-11 -1.700000e+01 -4.695807e-03 0.000000e+00 4.695807e-03 1.295574e-11 -1.800000e+01 -4.650337e-03 0.000000e+00 4.650337e-03 1.295574e-11 -1.900000e+01 -4.598028e-03 0.000000e+00 4.598028e-03 1.295574e-11 -2.000000e+01 -4.540513e-03 0.000000e+00 4.540513e-03 1.295574e-11 -1.000000e+00 -1.112748e-04 0.000000e+00 1.112748e-04 1.295874e-11 -2.000000e+00 -6.649970e-04 0.000000e+00 6.649969e-04 1.295874e-11 -3.000000e+00 -1.580498e-03 0.000000e+00 1.580498e-03 1.295874e-11 -4.000000e+00 -2.745525e-03 0.000000e+00 2.745525e-03 1.295874e-11 -5.000000e+00 -4.079039e-03 0.000000e+00 4.079039e-03 1.295874e-11 -6.000000e+00 -5.506499e-03 0.000000e+00 5.506499e-03 1.295874e-11 -7.000000e+00 -6.791859e-03 0.000000e+00 6.791859e-03 1.295874e-11 -8.000000e+00 -7.793191e-03 0.000000e+00 7.793191e-03 1.295874e-11 -9.000000e+00 -8.532821e-03 0.000000e+00 8.532821e-03 1.295874e-11 -1.000000e+01 -9.069689e-03 0.000000e+00 9.069689e-03 1.295874e-11 -1.100000e+01 -9.454857e-03 0.000000e+00 9.454857e-03 1.295874e-11 -1.200000e+01 -9.726728e-03 0.000000e+00 9.726728e-03 1.295874e-11 -1.300000e+01 -9.913403e-03 0.000000e+00 9.913403e-03 1.295874e-11 -1.400000e+01 -1.003533e-02 0.000000e+00 1.003533e-02 1.295874e-11 -1.500000e+01 -1.010744e-02 0.000000e+00 1.010744e-02 1.295874e-11 -1.600000e+01 -1.014073e-02 0.000000e+00 1.014073e-02 1.295874e-11 -1.700000e+01 -1.014340e-02 0.000000e+00 1.014340e-02 1.295874e-11 -1.800000e+01 -1.012166e-02 0.000000e+00 1.012166e-02 1.295874e-11 -1.900000e+01 -1.008028e-02 0.000000e+00 1.008028e-02 1.295874e-11 -2.000000e+01 -1.002301e-02 0.000000e+00 1.002301e-02 1.295874e-11 -1.000000e+00 -1.118348e-04 0.000000e+00 1.118347e-04 1.296374e-11 -2.000000e+00 -6.676351e-04 0.000000e+00 6.676351e-04 1.296374e-11 -3.000000e+00 -1.586184e-03 0.000000e+00 1.586184e-03 1.296374e-11 -4.000000e+00 -2.755274e-03 0.000000e+00 2.755274e-03 1.296374e-11 -5.000000e+00 -4.093784e-03 0.000000e+00 4.093784e-03 1.296374e-11 -6.000000e+00 -5.543615e-03 0.000000e+00 5.543615e-03 1.296374e-11 -7.000000e+00 -7.062690e-03 0.000000e+00 7.062690e-03 1.296374e-11 -8.000000e+00 -8.620236e-03 0.000000e+00 8.620236e-03 1.296374e-11 -9.000000e+00 -1.019350e-02 0.000000e+00 1.019350e-02 1.296374e-11 -1.000000e+01 -1.173017e-02 0.000000e+00 1.173017e-02 1.296374e-11 -1.100000e+01 -1.299439e-02 0.000000e+00 1.299439e-02 1.296374e-11 -1.200000e+01 -1.379849e-02 0.000000e+00 1.379849e-02 1.296374e-11 -1.300000e+01 -1.424887e-02 0.000000e+00 1.424887e-02 1.296374e-11 -1.400000e+01 -1.450866e-02 0.000000e+00 1.450866e-02 1.296374e-11 -1.500000e+01 -1.466575e-02 0.000000e+00 1.466575e-02 1.296374e-11 -1.600000e+01 -1.476216e-02 0.000000e+00 1.476216e-02 1.296374e-11 -1.700000e+01 -1.481952e-02 0.000000e+00 1.481952e-02 1.296374e-11 -1.800000e+01 -1.484993e-02 0.000000e+00 1.484993e-02 1.296374e-11 -1.900000e+01 -1.486073e-02 0.000000e+00 1.486073e-02 1.296374e-11 -2.000000e+01 -1.485661e-02 0.000000e+00 1.485661e-02 1.296374e-11 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/acVd_coisti.standard0000644000175000017500000000550613546075722024746 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -1 1.799613e-06 2.150513e-03 5.52953349714532e-13 6.86049685750946e-13 -2 3.626678e-05 1.987843e-03 5.80408157148041e-13 6.57494278019445e-13 -3 1.101540e-04 1.791662e-03 6.09782365101236e-13 6.23358268776971e-13 -4 2.321910e-04 1.551076e-03 6.41739773753844e-13 5.79703556957268e-13 -5 4.148600e-04 1.252180e-03 6.76933383282667e-13 5.19543540668681e-13 -6 6.676653e-04 8.907547e-04 7.1239679288454e-13 4.38346118684124e-13 -7 9.649389e-04 5.129081e-04 7.38398599924643e-13 3.51291095113597e-13 -8 1.226532e-03 2.172492e-04 7.48850102754433e-13 2.88943378232681e-13 -9 1.389880e-03 5.478380e-05 7.49494202928826e-13 2.49933567670604e-13 -10 1.447700e-03 3.898871e-06 7.36672099457185e-13 9.61410660306131e-14 -11 1.448935e-03 2.753138e-06 7.33470698590392e-13 4.45689020672247e-14 -12 1.449720e-03 2.114458e-06 7.3282279841497e-13 3.41259192397415e-14 -13 1.450235e-03 1.746054e-06 7.32505098328952e-13 2.90064278536169e-14 -14 1.450602e-03 1.515013e-06 7.32307798275532e-13 2.58265369926476e-14 -15 1.450885e-03 1.355943e-06 7.32170098238249e-13 2.36068763916648e-14 -16 1.451118e-03 1.237599e-06 7.32066998210334e-13 2.19447159416276e-14 -17 1.451318e-03 1.144511e-06 7.3198609818843e-13 2.06399855883662e-14 -18 1.451495e-03 1.068472e-06 7.31920298170615e-13 1.95805653015235e-14 -19 1.451654e-03 1.004751e-06 7.31865598155804e-13 1.8698125062599e-14 -20 1.451798e-03 9.503837e-07 7.31819098143214e-13 1.79482948595792e-14 -1 3.355816e-05 1.641819e-03 5.44658047468543e-13 6.91412287202894e-13 -2 9.024730e-05 1.500069e-03 5.71914854848443e-13 6.6290347948401e-13 -3 1.735903e-04 1.337507e-03 6.01401062831962e-13 6.28358470130798e-13 -4 2.886110e-04 1.145994e-03 6.33878671625416e-13 5.83615258016378e-13 -5 4.425402e-04 9.161941e-04 6.70192581457566e-13 5.2150284119917e-13 -6 6.392302e-04 6.474967e-04 7.07354091519207e-13 4.37968818581969e-13 -7 8.580580e-04 3.744698e-04 7.35208599060936e-13 3.49166694538406e-13 -8 1.045162e-03 1.635850e-04 7.47138302290956e-13 2.84570177048617e-13 -9 1.160977e-03 4.722668e-05 7.48638602697168e-13 2.39276164785066e-13 -10 1.209553e-03 4.139649e-06 7.38954900075264e-13 8.63821033883314e-14 -11 1.211575e-03 2.360434e-06 7.36845699504189e-13 4.3532941786734e-14 -12 1.212345e-03 1.737750e-06 7.36405299384948e-13 3.36913191220717e-14 -13 1.212837e-03 1.389607e-06 7.36184499325166e-13 2.87548477855005e-14 -14 1.213175e-03 1.180574e-06 7.36045899287639e-13 2.56578569469767e-14 -15 1.213428e-03 1.043114e-06 7.35948699261322e-13 2.34838263583485e-14 -16 1.213631e-03 9.448404e-07 7.3587559924153e-13 2.18498759159492e-14 -17 1.213802e-03 8.698600e-07 7.35818099225961e-13 2.05640155677969e-14 -18 1.213952e-03 8.099241e-07 7.3577129921329e-13 1.95179452845689e-14 -19 1.214085e-03 7.604342e-07 7.35732199202704e-13 1.86453450483085e-14 -20 1.214206e-03 7.186241e-07 7.35698999193714e-13 1.79030348473248e-14 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_corg.standard0000644000175000017500000001167213546075722024432 0ustar carstencarstenV(d) I(d) -1.000000e+00 -7.946711e-04 -2.000000e+00 -8.331585e-04 -3.000000e+00 -8.348002e-04 -4.000000e+00 -8.359586e-04 -5.000000e+00 -8.368949e-04 -6.000000e+00 -8.377041e-04 -7.000000e+00 -8.384287e-04 -8.000000e+00 -8.390917e-04 -9.000000e+00 -8.397069e-04 -1.000000e+01 -8.402837e-04 -1.100000e+01 -8.408287e-04 -1.200000e+01 -8.413466e-04 -1.300000e+01 -8.418412e-04 -1.400000e+01 -8.423156e-04 -1.500000e+01 -8.427719e-04 -1.600000e+01 -8.432122e-04 -1.700000e+01 -8.436380e-04 -1.800000e+01 -8.440508e-04 -1.900000e+01 -8.444516e-04 -2.000000e+01 -8.448414e-04 -1.000000e+00 -2.170631e-03 -2.000000e+00 -3.756973e-03 -3.000000e+00 -4.817749e-03 -4.000000e+00 -5.395953e-03 -5.000000e+00 -5.547712e-03 -6.000000e+00 -5.553603e-03 -7.000000e+00 -5.558484e-03 -8.000000e+00 -5.562639e-03 -9.000000e+00 -5.566220e-03 -1.000000e+01 -5.569367e-03 -1.100000e+01 -5.572185e-03 -1.200000e+01 -5.574750e-03 -1.300000e+01 -5.577116e-03 -1.400000e+01 -5.579322e-03 -1.500000e+01 -5.581396e-03 -1.600000e+01 -5.583361e-03 -1.700000e+01 -5.585232e-03 -1.800000e+01 -5.587022e-03 -1.900000e+01 -5.588742e-03 -2.000000e+01 -5.590398e-03 -1.000000e+00 -2.797502e-03 -2.000000e+00 -5.230154e-03 -3.000000e+00 -7.287074e-03 -4.000000e+00 -8.998800e-03 -5.000000e+00 -1.040628e-02 -6.000000e+00 -1.154933e-02 -7.000000e+00 -1.246396e-02 -8.000000e+00 -1.318253e-02 -9.000000e+00 -1.373458e-02 -1.000000e+01 -1.414763e-02 -1.100000e+01 -1.444761e-02 -1.200000e+01 -1.465873e-02 -1.300000e+01 -1.480279e-02 -1.400000e+01 -1.489833e-02 -1.500000e+01 -1.496015e-02 -1.600000e+01 -1.499926e-02 -1.700000e+01 -1.502347e-02 -1.800000e+01 -1.503802e-02 -1.900000e+01 -1.504619e-02 -2.000000e+01 -1.504982e-02 -1.000000e+00 -1.013116e-03 -2.000000e+00 -1.048672e-03 -3.000000e+00 -1.050722e-03 -4.000000e+00 -1.052164e-03 -5.000000e+00 -1.053328e-03 -6.000000e+00 -1.054334e-03 -7.000000e+00 -1.055236e-03 -8.000000e+00 -1.056060e-03 -9.000000e+00 -1.056826e-03 -1.000000e+01 -1.057543e-03 -1.100000e+01 -1.058221e-03 -1.200000e+01 -1.058866e-03 -1.300000e+01 -1.059481e-03 -1.400000e+01 -1.060072e-03 -1.500000e+01 -1.060639e-03 -1.600000e+01 -1.061187e-03 -1.700000e+01 -1.061717e-03 -1.800000e+01 -1.062231e-03 -1.900000e+01 -1.062730e-03 -2.000000e+01 -1.063215e-03 -1.000000e+00 -2.668416e-03 -2.000000e+00 -4.607811e-03 -3.000000e+00 -5.928368e-03 -4.000000e+00 -6.716334e-03 -5.000000e+00 -7.009020e-03 -6.000000e+00 -7.026017e-03 -7.000000e+00 -7.031996e-03 -8.000000e+00 -7.037234e-03 -9.000000e+00 -7.041733e-03 -1.000000e+01 -7.045659e-03 -1.100000e+01 -7.049147e-03 -1.200000e+01 -7.052302e-03 -1.300000e+01 -7.055197e-03 -1.400000e+01 -7.057884e-03 -1.500000e+01 -7.060402e-03 -1.600000e+01 -7.062780e-03 -1.700000e+01 -7.065040e-03 -1.800000e+01 -7.067197e-03 -1.900000e+01 -7.069266e-03 -2.000000e+01 -7.071257e-03 -1.000000e+00 -3.210104e-03 -2.000000e+00 -5.986826e-03 -3.000000e+00 -8.321621e-03 -4.000000e+00 -1.025773e-02 -5.000000e+00 -1.184900e-02 -6.000000e+00 -1.314631e-02 -7.000000e+00 -1.419490e-02 -8.000000e+00 -1.503439e-02 -9.000000e+00 -1.569942e-02 -1.000000e+01 -1.622022e-02 -1.100000e+01 -1.662312e-02 -1.200000e+01 -1.693090e-02 -1.300000e+01 -1.716311e-02 -1.400000e+01 -1.733632e-02 -1.500000e+01 -1.746424e-02 -1.600000e+01 -1.755794e-02 -1.700000e+01 -1.762616e-02 -1.800000e+01 -1.767559e-02 -1.900000e+01 -1.771129e-02 -2.000000e+01 -1.773696e-02 -1.000000e+00 -6.043154e-04 -2.000000e+00 -6.554295e-04 -3.000000e+00 -6.567153e-04 -4.000000e+00 -6.576201e-04 -5.000000e+00 -6.583501e-04 -6.000000e+00 -6.589799e-04 -7.000000e+00 -6.595431e-04 -8.000000e+00 -6.600578e-04 -9.000000e+00 -6.605352e-04 -1.000000e+01 -6.609824e-04 -1.100000e+01 -6.614048e-04 -1.200000e+01 -6.618060e-04 -1.300000e+01 -6.621891e-04 -1.400000e+01 -6.625564e-04 -1.500000e+01 -6.629096e-04 -1.600000e+01 -6.632504e-04 -1.700000e+01 -6.635799e-04 -1.800000e+01 -6.638993e-04 -1.900000e+01 -6.642093e-04 -2.000000e+01 -6.645109e-04 -1.000000e+00 -1.621360e-03 -2.000000e+00 -2.813405e-03 -3.000000e+00 -3.596606e-03 -4.000000e+00 -3.986037e-03 -5.000000e+00 -4.064182e-03 -6.000000e+00 -4.068538e-03 -7.000000e+00 -4.072135e-03 -8.000000e+00 -4.075192e-03 -9.000000e+00 -4.077841e-03 -1.000000e+01 -4.080183e-03 -1.100000e+01 -4.082293e-03 -1.200000e+01 -4.084224e-03 -1.300000e+01 -4.086012e-03 -1.400000e+01 -4.087684e-03 -1.500000e+01 -4.089261e-03 -1.600000e+01 -4.090757e-03 -1.700000e+01 -4.092185e-03 -1.800000e+01 -4.093552e-03 -1.900000e+01 -4.094867e-03 -2.000000e+01 -4.096135e-03 -1.000000e+00 -2.258852e-03 -2.000000e+00 -4.234321e-03 -3.000000e+00 -5.916039e-03 -4.000000e+00 -7.321472e-03 -5.000000e+00 -8.476686e-03 -6.000000e+00 -9.407817e-03 -7.000000e+00 -1.013899e-02 -8.000000e+00 -1.069315e-02 -9.000000e+00 -1.109399e-02 -1.000000e+01 -1.136770e-02 -1.100000e+01 -1.154281e-02 -1.200000e+01 -1.164753e-02 -1.300000e+01 -1.170620e-02 -1.400000e+01 -1.173711e-02 -1.500000e+01 -1.175238e-02 -1.600000e+01 -1.175946e-02 -1.700000e+01 -1.176395e-02 -1.800000e+01 -1.176837e-02 -1.900000e+01 -1.177264e-02 -2.000000e+01 -1.177670e-02 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/acVd_corbnet.standard0000644000175000017500000000550713546075722025111 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -1 2.460788e-06 2.144733e-03 5.52874049693061e-13 6.86133485773635e-13 -2 3.765616e-05 1.981657e-03 5.80321957124702e-13 6.57590578045518e-13 -3 1.123391e-04 1.785065e-03 6.09691865076733e-13 6.23461968805049e-13 -4 2.352359e-04 1.544071e-03 6.41650373729639e-13 5.7980195698391e-13 -5 4.187927e-04 1.244826e-03 6.76853783261115e-13 5.1961094068693e-13 -6 6.723607e-04 8.833017e-04 7.12331692866914e-13 4.38355818686751e-13 -7 9.699029e-04 5.059907e-04 7.38337699908154e-13 3.51261195105501e-13 -8 1.230887e-03 2.117441e-04 7.48784002736536e-13 2.88919578226237e-13 -9 1.392875e-03 5.118161e-05 7.49423802909765e-13 2.49883367657012e-13 -10 1.449112e-03 2.042876e-06 7.36626199444758e-13 9.58225459443724e-14 -11 1.449441e-03 1.809495e-06 7.33456698586602e-13 4.45397320593268e-14 -12 1.449704e-03 1.643475e-06 7.32812598412209e-13 3.41136992364329e-14 -13 1.449941e-03 1.505476e-06 7.32496698326677e-13 2.89992878516837e-14 -14 1.450161e-03 1.386751e-06 7.32300398273528e-13 2.58217169913425e-14 -15 1.450366e-03 1.283902e-06 7.32163398236435e-13 2.3603346390709e-14 -16 1.450555e-03 1.194741e-06 7.32060798208656e-13 2.19419859408884e-14 -17 1.450731e-03 1.117403e-06 7.3198029818686e-13 2.06377955877732e-14 -18 1.450893e-03 1.050204e-06 7.31914898169153e-13 1.95787653010361e-14 -19 1.451043e-03 9.916385e-07 7.31860398154396e-13 1.86965950621847e-14 -20 1.451182e-03 9.403920e-07 7.3181409814186e-13 1.79469848592245e-14 -1 3.415552e-05 1.635579e-03 5.445740474458e-13 6.91499787226585e-13 -2 9.149376e-05 1.493452e-03 5.71824854824075e-13 6.63000679510327e-13 -3 1.755353e-04 1.330511e-03 6.01308862806998e-13 6.28458970158008e-13 -4 2.912939e-04 1.138639e-03 6.33789871601373e-13 5.83705958040935e-13 -5 4.459556e-04 9.085684e-04 6.70115981436826e-13 5.21559441214495e-13 -6 6.432207e-04 6.398814e-04 7.0729379150288e-13 4.37969318582104e-13 -7 8.621435e-04 3.674797e-04 7.35153499046018e-13 3.49132094529038e-13 -8 1.048538e-03 1.580313e-04 7.47078802274846e-13 2.84540177040495e-13 -9 1.162955e-03 4.356922e-05 7.48577202680544e-13 2.39210164767196e-13 -10 1.209992e-03 2.181629e-06 7.38920600065977e-13 8.61595633280777e-14 -11 1.211048e-03 1.363443e-06 7.36833499500885e-13 4.35074717798378e-14 -12 1.211266e-03 1.236791e-06 7.36396199382484e-13 3.36802791190825e-14 -13 1.211463e-03 1.132411e-06 7.36176799323081e-13 2.87483077837298e-14 -14 1.211644e-03 1.042959e-06 7.36039099285798e-13 2.56534069457719e-14 -15 1.211812e-03 9.656511e-07 7.35942499259643e-13 2.34805463574604e-14 -16 1.211968e-03 8.987207e-07 7.35869899239986e-13 2.18473359152615e-14 -17 1.212112e-03 8.407066e-07 7.35812699224499e-13 2.05619755672446e-14 -18 1.212246e-03 7.903130e-07 7.35766199211909e-13 1.95162552841113e-14 -19 1.212370e-03 7.463956e-07 7.35727399201404e-13 1.86439250479241e-14 -20 1.212485e-03 7.079620e-07 7.35694399192469e-13 1.79018048469918e-14 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_corsrd2.standard0000644000175000017500000001167213546075722025056 0ustar carstencarstenV(d) I(d) -1.000000e+00 -2.069102e-03 -2.000000e+00 -2.107011e-03 -3.000000e+00 -2.110935e-03 -4.000000e+00 -2.113765e-03 -5.000000e+00 -2.116078e-03 -6.000000e+00 -2.118089e-03 -7.000000e+00 -2.119895e-03 -8.000000e+00 -2.121551e-03 -9.000000e+00 -2.123089e-03 -1.000000e+01 -2.124533e-03 -1.100000e+01 -2.125899e-03 -1.200000e+01 -2.127197e-03 -1.300000e+01 -2.128438e-03 -1.400000e+01 -2.129628e-03 -1.500000e+01 -2.130774e-03 -1.600000e+01 -2.131880e-03 -1.700000e+01 -2.132949e-03 -1.800000e+01 -2.133986e-03 -1.900000e+01 -2.134994e-03 -2.000000e+01 -2.135974e-03 -1.000000e+00 -6.981472e-03 -2.000000e+00 -1.135687e-02 -3.000000e+00 -1.348080e-02 -4.000000e+00 -1.391234e-02 -5.000000e+00 -1.392721e-02 -6.000000e+00 -1.393927e-02 -7.000000e+00 -1.394946e-02 -8.000000e+00 -1.395824e-02 -9.000000e+00 -1.396597e-02 -1.000000e+01 -1.397292e-02 -1.100000e+01 -1.397925e-02 -1.200000e+01 -1.398510e-02 -1.300000e+01 -1.399057e-02 -1.400000e+01 -1.399572e-02 -1.500000e+01 -1.400060e-02 -1.600000e+01 -1.400525e-02 -1.700000e+01 -1.400971e-02 -1.800000e+01 -1.401399e-02 -1.900000e+01 -1.401811e-02 -2.000000e+01 -1.402210e-02 -1.000000e+00 -9.086312e-03 -2.000000e+00 -1.694179e-02 -3.000000e+00 -2.341290e-02 -4.000000e+00 -2.856862e-02 -5.000000e+00 -3.247829e-02 -6.000000e+00 -3.517187e-02 -7.000000e+00 -3.673570e-02 -8.000000e+00 -3.743767e-02 -9.000000e+00 -3.765059e-02 -1.000000e+01 -3.767748e-02 -1.100000e+01 -3.769417e-02 -1.200000e+01 -3.770955e-02 -1.300000e+01 -3.772380e-02 -1.400000e+01 -3.773703e-02 -1.500000e+01 -3.774937e-02 -1.600000e+01 -3.776091e-02 -1.700000e+01 -3.777174e-02 -1.800000e+01 -3.778197e-02 -1.900000e+01 -3.779164e-02 -2.000000e+01 -3.780084e-02 -1.000000e+00 -2.635572e-03 -2.000000e+00 -2.654114e-03 -3.000000e+00 -2.658943e-03 -4.000000e+00 -2.662436e-03 -5.000000e+00 -2.665298e-03 -6.000000e+00 -2.667788e-03 -7.000000e+00 -2.670027e-03 -8.000000e+00 -2.672082e-03 -9.000000e+00 -2.673992e-03 -1.000000e+01 -2.675786e-03 -1.100000e+01 -2.677482e-03 -1.200000e+01 -2.679096e-03 -1.300000e+01 -2.680638e-03 -1.400000e+01 -2.682118e-03 -1.500000e+01 -2.683542e-03 -1.600000e+01 -2.684917e-03 -1.700000e+01 -2.686247e-03 -1.800000e+01 -2.687537e-03 -1.900000e+01 -2.688790e-03 -2.000000e+01 -2.690009e-03 -1.000000e+00 -9.177450e-03 -2.000000e+00 -1.464443e-02 -3.000000e+00 -1.716774e-02 -4.000000e+00 -1.760665e-02 -5.000000e+00 -1.762398e-02 -6.000000e+00 -1.763821e-02 -7.000000e+00 -1.765024e-02 -8.000000e+00 -1.766061e-02 -9.000000e+00 -1.766975e-02 -1.000000e+01 -1.767795e-02 -1.100000e+01 -1.768544e-02 -1.200000e+01 -1.769236e-02 -1.300000e+01 -1.769882e-02 -1.400000e+01 -1.770491e-02 -1.500000e+01 -1.771068e-02 -1.600000e+01 -1.771619e-02 -1.700000e+01 -1.772146e-02 -1.800000e+01 -1.772652e-02 -1.900000e+01 -1.773140e-02 -2.000000e+01 -1.773612e-02 -1.000000e+00 -1.091233e-02 -2.000000e+00 -2.029259e-02 -3.000000e+00 -2.795379e-02 -4.000000e+00 -3.401877e-02 -5.000000e+00 -3.859294e-02 -6.000000e+00 -4.171931e-02 -7.000000e+00 -4.350660e-02 -8.000000e+00 -4.428675e-02 -9.000000e+00 -4.450606e-02 -1.000000e+01 -4.452828e-02 -1.100000e+01 -4.454698e-02 -1.200000e+01 -4.456422e-02 -1.300000e+01 -4.458020e-02 -1.400000e+01 -4.459504e-02 -1.500000e+01 -4.460887e-02 -1.600000e+01 -4.462182e-02 -1.700000e+01 -4.463397e-02 -1.800000e+01 -4.464544e-02 -1.900000e+01 -4.465630e-02 -2.000000e+01 -4.466662e-02 -1.000000e+00 -1.574804e-03 -2.000000e+00 -1.655404e-03 -3.000000e+00 -1.658510e-03 -4.000000e+00 -1.660734e-03 -5.000000e+00 -1.662544e-03 -6.000000e+00 -1.664112e-03 -7.000000e+00 -1.665518e-03 -8.000000e+00 -1.666806e-03 -9.000000e+00 -1.668001e-03 -1.000000e+01 -1.669121e-03 -1.100000e+01 -1.670180e-03 -1.200000e+01 -1.671187e-03 -1.300000e+01 -1.672148e-03 -1.400000e+01 -1.673070e-03 -1.500000e+01 -1.673957e-03 -1.600000e+01 -1.674813e-03 -1.700000e+01 -1.675641e-03 -1.800000e+01 -1.676443e-03 -1.900000e+01 -1.677222e-03 -2.000000e+01 -1.677980e-03 -1.000000e+00 -4.867622e-03 -2.000000e+00 -8.083649e-03 -3.000000e+00 -9.756523e-03 -4.000000e+00 -1.018403e-02 -5.000000e+00 -1.020007e-02 -6.000000e+00 -1.020950e-02 -7.000000e+00 -1.021743e-02 -8.000000e+00 -1.022427e-02 -9.000000e+00 -1.023028e-02 -1.000000e+01 -1.023568e-02 -1.100000e+01 -1.024060e-02 -1.200000e+01 -1.024515e-02 -1.300000e+01 -1.024940e-02 -1.400000e+01 -1.025339e-02 -1.500000e+01 -1.025718e-02 -1.600000e+01 -1.026079e-02 -1.700000e+01 -1.026425e-02 -1.800000e+01 -1.026757e-02 -1.900000e+01 -1.027077e-02 -2.000000e+01 -1.027387e-02 -1.000000e+00 -6.936274e-03 -2.000000e+00 -1.296982e-02 -3.000000e+00 -1.799657e-02 -4.000000e+00 -2.204097e-02 -5.000000e+00 -2.513667e-02 -6.000000e+00 -2.729862e-02 -7.000000e+00 -2.858611e-02 -8.000000e+00 -2.919222e-02 -9.000000e+00 -2.939822e-02 -1.000000e+01 -2.943707e-02 -1.100000e+01 -2.945100e-02 -1.200000e+01 -2.946377e-02 -1.300000e+01 -2.947559e-02 -1.400000e+01 -2.948657e-02 -1.500000e+01 -2.949680e-02 -1.600000e+01 -2.950637e-02 -1.700000e+01 -2.951536e-02 -1.800000e+01 -2.952383e-02 -1.900000e+01 -2.953186e-02 -2.000000e+01 -2.953949e-02 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_COTEMP3.standard0000644000175000017500000000044213546075722024543 0ustar carstencarstenV(d) I(d) -1.000000e+00 -2.216231e-03 -3.000000e+00 -6.168359e-03 -5.000000e+00 -9.237027e-03 -7.000000e+00 -1.099754e-02 -9.000000e+00 -1.146674e-02 -1.100000e+01 -1.148422e-02 -1.300000e+01 -1.148751e-02 -1.500000e+01 -1.149029e-02 -1.700000e+01 -1.149269e-02 -1.900000e+01 -1.149479e-02 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_ptl.standard0000644000175000017500000001167213546075722024277 0ustar carstencarstenV(d) I(d) -1.000000e+00 -8.276406e-04 -2.000000e+00 -8.428044e-04 -3.000000e+00 -8.443741e-04 -4.000000e+00 -8.455061e-04 -5.000000e+00 -8.464314e-04 -6.000000e+00 -8.472355e-04 -7.000000e+00 -8.479580e-04 -8.000000e+00 -8.486202e-04 -9.000000e+00 -8.492357e-04 -1.000000e+01 -8.498133e-04 -1.100000e+01 -8.503595e-04 -1.200000e+01 -8.508789e-04 -1.300000e+01 -8.513753e-04 -1.400000e+01 -8.518514e-04 -1.500000e+01 -8.523096e-04 -1.600000e+01 -8.527519e-04 -1.700000e+01 -8.531798e-04 -1.800000e+01 -8.535946e-04 -1.900000e+01 -8.539975e-04 -2.000000e+01 -8.543895e-04 -1.000000e+00 -2.792589e-03 -2.000000e+00 -4.542747e-03 -3.000000e+00 -5.392319e-03 -4.000000e+00 -5.564937e-03 -5.000000e+00 -5.570885e-03 -6.000000e+00 -5.575709e-03 -7.000000e+00 -5.579784e-03 -8.000000e+00 -5.583297e-03 -9.000000e+00 -5.586390e-03 -1.000000e+01 -5.589166e-03 -1.100000e+01 -5.591699e-03 -1.200000e+01 -5.594041e-03 -1.300000e+01 -5.596228e-03 -1.400000e+01 -5.598287e-03 -1.500000e+01 -5.600239e-03 -1.600000e+01 -5.602101e-03 -1.700000e+01 -5.603882e-03 -1.800000e+01 -5.605595e-03 -1.900000e+01 -5.607246e-03 -2.000000e+01 -5.608842e-03 -1.000000e+00 -3.634525e-03 -2.000000e+00 -6.776715e-03 -3.000000e+00 -9.365161e-03 -4.000000e+00 -1.142745e-02 -5.000000e+00 -1.299132e-02 -6.000000e+00 -1.406875e-02 -7.000000e+00 -1.469428e-02 -8.000000e+00 -1.497507e-02 -9.000000e+00 -1.506024e-02 -1.000000e+01 -1.507099e-02 -1.100000e+01 -1.507767e-02 -1.200000e+01 -1.508382e-02 -1.300000e+01 -1.508952e-02 -1.400000e+01 -1.509481e-02 -1.500000e+01 -1.509975e-02 -1.600000e+01 -1.510436e-02 -1.700000e+01 -1.510870e-02 -1.800000e+01 -1.511279e-02 -1.900000e+01 -1.511666e-02 -2.000000e+01 -1.512034e-02 -1.000000e+00 -1.054229e-03 -2.000000e+00 -1.061645e-03 -3.000000e+00 -1.063577e-03 -4.000000e+00 -1.064975e-03 -5.000000e+00 -1.066119e-03 -6.000000e+00 -1.067115e-03 -7.000000e+00 -1.068011e-03 -8.000000e+00 -1.068833e-03 -9.000000e+00 -1.069597e-03 -1.000000e+01 -1.070314e-03 -1.100000e+01 -1.070993e-03 -1.200000e+01 -1.071638e-03 -1.300000e+01 -1.072255e-03 -1.400000e+01 -1.072847e-03 -1.500000e+01 -1.073417e-03 -1.600000e+01 -1.073967e-03 -1.700000e+01 -1.074499e-03 -1.800000e+01 -1.075015e-03 -1.900000e+01 -1.075516e-03 -2.000000e+01 -1.076004e-03 -1.000000e+00 -3.670980e-03 -2.000000e+00 -5.857771e-03 -3.000000e+00 -6.867098e-03 -4.000000e+00 -7.042662e-03 -5.000000e+00 -7.049592e-03 -6.000000e+00 -7.055282e-03 -7.000000e+00 -7.060095e-03 -8.000000e+00 -7.064245e-03 -9.000000e+00 -7.067900e-03 -1.000000e+01 -7.071182e-03 -1.100000e+01 -7.074176e-03 -1.200000e+01 -7.076944e-03 -1.300000e+01 -7.079530e-03 -1.400000e+01 -7.081965e-03 -1.500000e+01 -7.084274e-03 -1.600000e+01 -7.086475e-03 -1.700000e+01 -7.088583e-03 -1.800000e+01 -7.090609e-03 -1.900000e+01 -7.092562e-03 -2.000000e+01 -7.094449e-03 -1.000000e+00 -4.364930e-03 -2.000000e+00 -8.117035e-03 -3.000000e+00 -1.118152e-02 -4.000000e+00 -1.360751e-02 -5.000000e+00 -1.543718e-02 -6.000000e+00 -1.668772e-02 -7.000000e+00 -1.740264e-02 -8.000000e+00 -1.771470e-02 -9.000000e+00 -1.780242e-02 -1.000000e+01 -1.781131e-02 -1.100000e+01 -1.781879e-02 -1.200000e+01 -1.782569e-02 -1.300000e+01 -1.783208e-02 -1.400000e+01 -1.783802e-02 -1.500000e+01 -1.784355e-02 -1.600000e+01 -1.784873e-02 -1.700000e+01 -1.785359e-02 -1.800000e+01 -1.785818e-02 -1.900000e+01 -1.786252e-02 -2.000000e+01 -1.786665e-02 -1.000000e+00 -6.299216e-04 -2.000000e+00 -6.621614e-04 -3.000000e+00 -6.634039e-04 -4.000000e+00 -6.642935e-04 -5.000000e+00 -6.650174e-04 -6.000000e+00 -6.656448e-04 -7.000000e+00 -6.662073e-04 -8.000000e+00 -6.667222e-04 -9.000000e+00 -6.672003e-04 -1.000000e+01 -6.676485e-04 -1.100000e+01 -6.680721e-04 -1.200000e+01 -6.684747e-04 -1.300000e+01 -6.688592e-04 -1.400000e+01 -6.692280e-04 -1.500000e+01 -6.695828e-04 -1.600000e+01 -6.699251e-04 -1.700000e+01 -6.702563e-04 -1.800000e+01 -6.705772e-04 -1.900000e+01 -6.708889e-04 -2.000000e+01 -6.711921e-04 -1.000000e+00 -1.947049e-03 -2.000000e+00 -3.233460e-03 -3.000000e+00 -3.902609e-03 -4.000000e+00 -4.073613e-03 -5.000000e+00 -4.080030e-03 -6.000000e+00 -4.083798e-03 -7.000000e+00 -4.086974e-03 -8.000000e+00 -4.089708e-03 -9.000000e+00 -4.092113e-03 -1.000000e+01 -4.094272e-03 -1.100000e+01 -4.096241e-03 -1.200000e+01 -4.098060e-03 -1.300000e+01 -4.099758e-03 -1.400000e+01 -4.101357e-03 -1.500000e+01 -4.102873e-03 -1.600000e+01 -4.104318e-03 -1.700000e+01 -4.105700e-03 -1.800000e+01 -4.107029e-03 -1.900000e+01 -4.108310e-03 -2.000000e+01 -4.109548e-03 -1.000000e+00 -2.774510e-03 -2.000000e+00 -5.187927e-03 -3.000000e+00 -7.198630e-03 -4.000000e+00 -8.816388e-03 -5.000000e+00 -1.005467e-02 -6.000000e+00 -1.091945e-02 -7.000000e+00 -1.143444e-02 -8.000000e+00 -1.167689e-02 -9.000000e+00 -1.175929e-02 -1.000000e+01 -1.177483e-02 -1.100000e+01 -1.178040e-02 -1.200000e+01 -1.178551e-02 -1.300000e+01 -1.179024e-02 -1.400000e+01 -1.179463e-02 -1.500000e+01 -1.179872e-02 -1.600000e+01 -1.180255e-02 -1.700000e+01 -1.180614e-02 -1.800000e+01 -1.180953e-02 -1.900000e+01 -1.181274e-02 -2.000000e+01 -1.181579e-02 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_ld2.standard0000644000175000017500000001167213546075722024161 0ustar carstencarstenV(d) I(d) -1.000000e+00 -5.353655e-04 -2.000000e+00 -5.457226e-04 -3.000000e+00 -5.459996e-04 -4.000000e+00 -5.461975e-04 -5.000000e+00 -5.463587e-04 -6.000000e+00 -5.464984e-04 -7.000000e+00 -5.466239e-04 -8.000000e+00 -5.467388e-04 -9.000000e+00 -5.468454e-04 -1.000000e+01 -5.469455e-04 -1.100000e+01 -5.470401e-04 -1.200000e+01 -5.471300e-04 -1.300000e+01 -5.472158e-04 -1.400000e+01 -5.472982e-04 -1.500000e+01 -5.473774e-04 -1.600000e+01 -5.474538e-04 -1.700000e+01 -5.475277e-04 -1.800000e+01 -5.475994e-04 -1.900000e+01 -5.476689e-04 -2.000000e+01 -5.477366e-04 -1.000000e+00 -1.766043e-03 -2.000000e+00 -3.067649e-03 -3.000000e+00 -3.808295e-03 -4.000000e+00 -3.987897e-03 -5.000000e+00 -3.989524e-03 -6.000000e+00 -3.990654e-03 -7.000000e+00 -3.991595e-03 -8.000000e+00 -3.992397e-03 -9.000000e+00 -3.993098e-03 -1.000000e+01 -3.993724e-03 -1.100000e+01 -3.994293e-03 -1.200000e+01 -3.994816e-03 -1.300000e+01 -3.995304e-03 -1.400000e+01 -3.995763e-03 -1.500000e+01 -3.996198e-03 -1.600000e+01 -3.996611e-03 -1.700000e+01 -3.997007e-03 -1.800000e+01 -3.997386e-03 -1.900000e+01 -3.997752e-03 -2.000000e+01 -3.998106e-03 -1.000000e+00 -2.216231e-03 -2.000000e+00 -4.281789e-03 -3.000000e+00 -6.168359e-03 -4.000000e+00 -7.837171e-03 -5.000000e+00 -9.237027e-03 -6.000000e+00 -1.030548e-02 -7.000000e+00 -1.099754e-02 -8.000000e+00 -1.134584e-02 -9.000000e+00 -1.146674e-02 -1.000000e+01 -1.148230e-02 -1.100000e+01 -1.148422e-02 -1.200000e+01 -1.148594e-02 -1.300000e+01 -1.148751e-02 -1.400000e+01 -1.148896e-02 -1.500000e+01 -1.149029e-02 -1.600000e+01 -1.149153e-02 -1.700000e+01 -1.149269e-02 -1.800000e+01 -1.149377e-02 -1.900000e+01 -1.149479e-02 -2.000000e+01 -1.149575e-02 -1.000000e+00 -6.962586e-04 -2.000000e+00 -7.009440e-04 -3.000000e+00 -7.013029e-04 -4.000000e+00 -7.015601e-04 -5.000000e+00 -7.017700e-04 -6.000000e+00 -7.019523e-04 -7.000000e+00 -7.021161e-04 -8.000000e+00 -7.022661e-04 -9.000000e+00 -7.024056e-04 -1.000000e+01 -7.025365e-04 -1.100000e+01 -7.026602e-04 -1.200000e+01 -7.027778e-04 -1.300000e+01 -7.028902e-04 -1.400000e+01 -7.029980e-04 -1.500000e+01 -7.031017e-04 -1.600000e+01 -7.032018e-04 -1.700000e+01 -7.032986e-04 -1.800000e+01 -7.033925e-04 -1.900000e+01 -7.034836e-04 -2.000000e+01 -7.035722e-04 -1.000000e+00 -2.345550e-03 -2.000000e+00 -4.089944e-03 -3.000000e+00 -5.079829e-03 -4.000000e+00 -5.301047e-03 -5.000000e+00 -5.302930e-03 -6.000000e+00 -5.304419e-03 -7.000000e+00 -5.305660e-03 -8.000000e+00 -5.306719e-03 -9.000000e+00 -5.307644e-03 -1.000000e+01 -5.308469e-03 -1.100000e+01 -5.309218e-03 -1.200000e+01 -5.309909e-03 -1.300000e+01 -5.310552e-03 -1.400000e+01 -5.311157e-03 -1.500000e+01 -5.311730e-03 -1.600000e+01 -5.312275e-03 -1.700000e+01 -5.312796e-03 -1.800000e+01 -5.313297e-03 -1.900000e+01 -5.313779e-03 -2.000000e+01 -5.314245e-03 -1.000000e+00 -2.649701e-03 -2.000000e+00 -5.144317e-03 -3.000000e+00 -7.444572e-03 -4.000000e+00 -9.498816e-03 -5.000000e+00 -1.124008e-02 -6.000000e+00 -1.258505e-02 -7.000000e+00 -1.346668e-02 -8.000000e+00 -1.391361e-02 -9.000000e+00 -1.406785e-02 -1.000000e+01 -1.408414e-02 -1.100000e+01 -1.408647e-02 -1.200000e+01 -1.408857e-02 -1.300000e+01 -1.409049e-02 -1.400000e+01 -1.409224e-02 -1.500000e+01 -1.409387e-02 -1.600000e+01 -1.409538e-02 -1.700000e+01 -1.409678e-02 -1.800000e+01 -1.409810e-02 -1.900000e+01 -1.409934e-02 -2.000000e+01 -1.410051e-02 -1.000000e+00 -4.013794e-04 -2.000000e+00 -4.230806e-04 -3.000000e+00 -4.232920e-04 -4.000000e+00 -4.234419e-04 -5.000000e+00 -4.235634e-04 -6.000000e+00 -4.236685e-04 -7.000000e+00 -4.237626e-04 -8.000000e+00 -4.238487e-04 -9.000000e+00 -4.239285e-04 -1.000000e+01 -4.240033e-04 -1.100000e+01 -4.240740e-04 -1.200000e+01 -4.241411e-04 -1.300000e+01 -4.242052e-04 -1.400000e+01 -4.242666e-04 -1.500000e+01 -4.243257e-04 -1.600000e+01 -4.243827e-04 -1.700000e+01 -4.244378e-04 -1.800000e+01 -4.244912e-04 -1.900000e+01 -4.245430e-04 -2.000000e+01 -4.245934e-04 -1.000000e+00 -1.222122e-03 -2.000000e+00 -2.119443e-03 -3.000000e+00 -2.640888e-03 -4.000000e+00 -2.789490e-03 -5.000000e+00 -2.793036e-03 -6.000000e+00 -2.793830e-03 -7.000000e+00 -2.794489e-03 -8.000000e+00 -2.795050e-03 -9.000000e+00 -2.795541e-03 -1.000000e+01 -2.795978e-03 -1.100000e+01 -2.796376e-03 -1.200000e+01 -2.796742e-03 -1.300000e+01 -2.797083e-03 -1.400000e+01 -2.797404e-03 -1.500000e+01 -2.797707e-03 -1.600000e+01 -2.797996e-03 -1.700000e+01 -2.798272e-03 -1.800000e+01 -2.798538e-03 -1.900000e+01 -2.798793e-03 -2.000000e+01 -2.799040e-03 -1.000000e+00 -1.701069e-03 -2.000000e+00 -3.266999e-03 -3.000000e+00 -4.681032e-03 -4.000000e+00 -5.918405e-03 -5.000000e+00 -6.945512e-03 -6.000000e+00 -7.722251e-03 -7.000000e+00 -8.223535e-03 -8.000000e+00 -8.478687e-03 -9.000000e+00 -8.571982e-03 -1.000000e+01 -8.589581e-03 -1.100000e+01 -8.591100e-03 -1.200000e+01 -8.592398e-03 -1.300000e+01 -8.593581e-03 -1.400000e+01 -8.594668e-03 -1.500000e+01 -8.595671e-03 -1.600000e+01 -8.596602e-03 -1.700000e+01 -8.597471e-03 -1.800000e+01 -8.598286e-03 -1.900000e+01 -8.599054e-03 -2.000000e+01 -8.599781e-03 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_codfm.standard0000644000175000017500000001167213546075722024570 0ustar carstencarstenV(d) I(d) -1.000000e+00 -3.533286e-03 -2.000000e+00 -4.426689e-03 -3.000000e+00 -4.438276e-03 -4.000000e+00 -4.446317e-03 -5.000000e+00 -4.452498e-03 -6.000000e+00 -4.457655e-03 -7.000000e+00 -4.462173e-03 -8.000000e+00 -4.466250e-03 -9.000000e+00 -4.469998e-03 -1.000000e+01 -4.473490e-03 -1.100000e+01 -4.476773e-03 -1.200000e+01 -4.479882e-03 -1.300000e+01 -4.482843e-03 -1.400000e+01 -4.485676e-03 -1.500000e+01 -4.488396e-03 -1.600000e+01 -4.491016e-03 -1.700000e+01 -4.493547e-03 -1.800000e+01 -4.495997e-03 -1.900000e+01 -4.498374e-03 -2.000000e+01 -4.500683e-03 -1.000000e+00 -6.817977e-03 -2.000000e+00 -1.192522e-02 -3.000000e+00 -1.560318e-02 -4.000000e+00 -1.815602e-02 -5.000000e+00 -1.976288e-02 -6.000000e+00 -2.053911e-02 -7.000000e+00 -2.071084e-02 -8.000000e+00 -2.072862e-02 -9.000000e+00 -2.074448e-02 -1.000000e+01 -2.075853e-02 -1.100000e+01 -2.077104e-02 -1.200000e+01 -2.078227e-02 -1.300000e+01 -2.079247e-02 -1.400000e+01 -2.080185e-02 -1.500000e+01 -2.081056e-02 -1.600000e+01 -2.081872e-02 -1.700000e+01 -2.082641e-02 -1.800000e+01 -2.083372e-02 -1.900000e+01 -2.084068e-02 -2.000000e+01 -2.084735e-02 -1.000000e+00 -8.092577e-03 -2.000000e+00 -1.512141e-02 -3.000000e+00 -2.103394e-02 -4.000000e+00 -2.593381e-02 -5.000000e+00 -2.996075e-02 -6.000000e+00 -3.325106e-02 -7.000000e+00 -3.592821e-02 -8.000000e+00 -3.810103e-02 -9.000000e+00 -3.986359e-02 -1.000000e+01 -4.129548e-02 -1.100000e+01 -4.246268e-02 -1.200000e+01 -4.341886e-02 -1.300000e+01 -4.420701e-02 -1.400000e+01 -4.486122e-02 -1.500000e+01 -4.540834e-02 -1.600000e+01 -4.586941e-02 -1.700000e+01 -4.626096e-02 -1.800000e+01 -4.659599e-02 -1.900000e+01 -4.688473e-02 -2.000000e+01 -4.713529e-02 -1.000000e+00 -4.453985e-03 -2.000000e+00 -5.550876e-03 -3.000000e+00 -5.565012e-03 -4.000000e+00 -5.574851e-03 -5.000000e+00 -5.582364e-03 -6.000000e+00 -5.588606e-03 -7.000000e+00 -5.594064e-03 -8.000000e+00 -5.598983e-03 -9.000000e+00 -5.603503e-03 -1.000000e+01 -5.607711e-03 -1.100000e+01 -5.611667e-03 -1.200000e+01 -5.615412e-03 -1.300000e+01 -5.618977e-03 -1.400000e+01 -5.622388e-03 -1.500000e+01 -5.625662e-03 -1.600000e+01 -5.628816e-03 -1.700000e+01 -5.631862e-03 -1.800000e+01 -5.634811e-03 -1.900000e+01 -5.637671e-03 -2.000000e+01 -5.640450e-03 -1.000000e+00 -8.108670e-03 -2.000000e+00 -1.410483e-02 -3.000000e+00 -1.842551e-02 -4.000000e+00 -2.149469e-02 -5.000000e+00 -2.357773e-02 -6.000000e+00 -2.482436e-02 -7.000000e+00 -2.536412e-02 -8.000000e+00 -2.544725e-02 -9.000000e+00 -2.546639e-02 -1.000000e+01 -2.548377e-02 -1.100000e+01 -2.549927e-02 -1.200000e+01 -2.551312e-02 -1.300000e+01 -2.552560e-02 -1.400000e+01 -2.553696e-02 -1.500000e+01 -2.554742e-02 -1.600000e+01 -2.555714e-02 -1.700000e+01 -2.556625e-02 -1.800000e+01 -2.557485e-02 -1.900000e+01 -2.558302e-02 -2.000000e+01 -2.559081e-02 -1.000000e+00 -9.069206e-03 -2.000000e+00 -1.690040e-02 -3.000000e+00 -2.345027e-02 -4.000000e+00 -2.885620e-02 -5.000000e+00 -3.329010e-02 -6.000000e+00 -3.691452e-02 -7.000000e+00 -3.987315e-02 -8.000000e+00 -4.228964e-02 -9.000000e+00 -4.426830e-02 -1.000000e+01 -4.589549e-02 -1.100000e+01 -4.724151e-02 -1.200000e+01 -4.836275e-02 -1.300000e+01 -4.930402e-02 -1.400000e+01 -5.010070e-02 -1.500000e+01 -5.078060e-02 -1.600000e+01 -5.136563e-02 -1.700000e+01 -5.187305e-02 -1.800000e+01 -5.231653e-02 -1.900000e+01 -5.270693e-02 -2.000000e+01 -5.305293e-02 -1.000000e+00 -2.645293e-03 -2.000000e+00 -3.417067e-03 -3.000000e+00 -3.426954e-03 -4.000000e+00 -3.433193e-03 -5.000000e+00 -3.438005e-03 -6.000000e+00 -3.442027e-03 -7.000000e+00 -3.445553e-03 -8.000000e+00 -3.448735e-03 -9.000000e+00 -3.451660e-03 -1.000000e+01 -3.454385e-03 -1.100000e+01 -3.456946e-03 -1.200000e+01 -3.459371e-03 -1.300000e+01 -3.461681e-03 -1.400000e+01 -3.463890e-03 -1.500000e+01 -3.466012e-03 -1.600000e+01 -3.468055e-03 -1.700000e+01 -3.470028e-03 -1.800000e+01 -3.471939e-03 -1.900000e+01 -3.473792e-03 -2.000000e+01 -3.475593e-03 -1.000000e+00 -5.281340e-03 -2.000000e+00 -9.298909e-03 -3.000000e+00 -1.219121e-02 -4.000000e+00 -1.413105e-02 -5.000000e+00 -1.521678e-02 -6.000000e+00 -1.559713e-02 -7.000000e+00 -1.563472e-02 -8.000000e+00 -1.564829e-02 -9.000000e+00 -1.566024e-02 -1.000000e+01 -1.567082e-02 -1.100000e+01 -1.568027e-02 -1.200000e+01 -1.568884e-02 -1.300000e+01 -1.569668e-02 -1.400000e+01 -1.570395e-02 -1.500000e+01 -1.571074e-02 -1.600000e+01 -1.571713e-02 -1.700000e+01 -1.572319e-02 -1.800000e+01 -1.572896e-02 -1.900000e+01 -1.573448e-02 -2.000000e+01 -1.573979e-02 -1.000000e+00 -6.744442e-03 -2.000000e+00 -1.264683e-02 -3.000000e+00 -1.765247e-02 -4.000000e+00 -2.182626e-02 -5.000000e+00 -2.526740e-02 -6.000000e+00 -2.807735e-02 -7.000000e+00 -3.035133e-02 -8.000000e+00 -3.217664e-02 -9.000000e+00 -3.363193e-02 -1.000000e+01 -3.478664e-02 -1.100000e+01 -3.570050e-02 -1.200000e+01 -3.642354e-02 -1.300000e+01 -3.699667e-02 -1.400000e+01 -3.745266e-02 -1.500000e+01 -3.781736e-02 -1.600000e+01 -3.811093e-02 -1.700000e+01 -3.834895e-02 -1.800000e+01 -3.854344e-02 -1.900000e+01 -3.870363e-02 -2.000000e+01 -3.883664e-02 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/acFreq_coovlp.standard0000644000175000017500000000712313546075722025277 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 4.36975652598165e-13 1.90240449956832e-13 2.50375076189844e-13 1258.925 4.36975877492187e-13 1.90240551688057e-13 2.50375121635144e-13 1584.893 4.36975789580374e-13 1.90240453854333e-13 2.50375058352342e-13 1995.262 4.369757840582e-13 1.90240482438364e-13 2.50375123963081e-13 2511.886 4.36975735618849e-13 1.90240479991341e-13 2.50375076407932e-13 3162.278 4.36975636768522e-13 1.90240425303171e-13 2.50375019693599e-13 3981.072 4.36975760453452e-13 1.9024044760805e-13 2.50375061797157e-13 5011.872 4.36975628739302e-13 1.90240456576221e-13 2.50375092943585e-13 6309.573 4.36975720218949e-13 1.90240461053835e-13 2.50375083916848e-13 7943.282 4.36975710384846e-13 1.90240468648569e-13 2.50375118103112e-13 10000 4.36975652598165e-13 1.90240449956832e-13 2.50375076189844e-13 12589.25 4.36975877492187e-13 1.90240551688057e-13 2.50375121635144e-13 15848.93 4.36975789580373e-13 1.90240453854333e-13 2.50375058352342e-13 19952.62 4.369757840582e-13 1.90240482438364e-13 2.50375123963081e-13 25118.86 4.36975735618849e-13 1.90240479991341e-13 2.50375076407932e-13 31622.78 4.36975636768522e-13 1.90240425303171e-13 2.50375019693599e-13 39810.72 4.36975760453452e-13 1.9024044760805e-13 2.50375061797157e-13 50118.72 4.36975628739302e-13 1.90240456576221e-13 2.50375092943585e-13 63095.73 4.36975720218949e-13 1.90240461053835e-13 2.50375083916848e-13 79432.82 4.36975710384846e-13 1.90240468648569e-13 2.50375118103112e-13 100000 4.36975652598165e-13 1.90240449956832e-13 2.50375076189844e-13 125892.5 4.36975877492187e-13 1.90240551688057e-13 2.50375121635144e-13 158489.3 4.36975789580374e-13 1.90240453854333e-13 2.50375058352342e-13 199526.2 4.369757840582e-13 1.90240482438364e-13 2.50375123963081e-13 251188.6 4.36975735618849e-13 1.90240479991341e-13 2.50375076407932e-13 316227.8 4.36975636768522e-13 1.90240425303171e-13 2.50375019693599e-13 398107.2 4.36975760453452e-13 1.9024044760805e-13 2.50375061797157e-13 501187.2 4.36975628739302e-13 1.90240456576221e-13 2.50375092943585e-13 630957.3 4.36975720218949e-13 1.90240461053835e-13 2.50375083916848e-13 794328.2 4.36975710384846e-13 1.90240468648569e-13 2.50375118103112e-13 1000000 4.36975652598165e-13 1.90240449956832e-13 2.50375076189844e-13 1258925 4.36975877492187e-13 1.90240551688057e-13 2.50375121635144e-13 1584893 4.36975789580373e-13 1.90240453854333e-13 2.50375058352342e-13 1995262 4.36975784058201e-13 1.90240482438364e-13 2.50375123963081e-13 2511886 4.36975735618849e-13 1.90240479991341e-13 2.50375076407932e-13 3162278 4.36975636768522e-13 1.90240425303171e-13 2.50375019693599e-13 3981072 4.36975760453452e-13 1.9024044760805e-13 2.50375061797157e-13 5011872 4.36975628739302e-13 1.90240456576221e-13 2.50375092943585e-13 6309573 4.36975720218949e-13 1.90240461053835e-13 2.50375083916848e-13 7943282 4.36975710384846e-13 1.90240468648569e-13 2.50375118103112e-13 10000000 4.36975652598165e-13 1.90240449956832e-13 2.50375076189844e-13 12589250 4.36975877492187e-13 1.90240551688057e-13 2.50375121635144e-13 15848930 4.36975789580374e-13 1.90240453854333e-13 2.50375058352342e-13 19952620 4.369757840582e-13 1.90240482438364e-13 2.50375123963081e-13 25118860 4.36975735618849e-13 1.90240479991341e-13 2.50375076407932e-13 31622780 4.36975636768522e-13 1.90240425303171e-13 2.50375019693599e-13 39810720 4.36975760453452e-13 1.9024044760805e-13 2.50375061797157e-13 50118720 4.36975628739302e-13 1.90240456576221e-13 2.50375092943585e-13 63095730 4.36975720218949e-13 1.90240461053835e-13 2.50375083916848e-13 79432820 4.36975710384846e-13 1.90240468648569e-13 2.50375118103112e-13 100000000 4.36975652598165e-13 1.90240449956832e-13 2.50375076189844e-13 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_cosym.standard0000644000175000017500000003602613546075722024632 0ustar carstencarstenV(d) I(d) -1.000000e-01 -1.424131e-05 -6.000000e-01 -7.412732e-05 -1.100000e+00 -1.094527e-04 -1.600000e+00 -1.151591e-04 -2.100000e+00 -1.151695e-04 -2.600000e+00 -1.151772e-04 -3.100000e+00 -1.151832e-04 -3.600000e+00 -1.151882e-04 -4.100000e+00 -1.151926e-04 -4.600000e+00 -1.151966e-04 -5.100000e+00 -1.152001e-04 -5.600000e+00 -1.152035e-04 -6.100000e+00 -1.152066e-04 -6.600000e+00 -1.152095e-04 -7.100000e+00 -1.152123e-04 -7.600000e+00 -1.152150e-04 -8.100000e+00 -1.152176e-04 -8.600000e+00 -1.152200e-04 -9.100000e+00 -1.152224e-04 -9.600000e+00 -1.152247e-04 -1.010000e+01 -1.152270e-04 -1.060000e+01 -1.152291e-04 -1.110000e+01 -1.152312e-04 -1.160000e+01 -1.152333e-04 -1.210000e+01 -1.152353e-04 -1.260000e+01 -1.152373e-04 -1.310000e+01 -1.152392e-04 -1.360000e+01 -1.152410e-04 -1.410000e+01 -1.152429e-04 -1.460000e+01 -1.152447e-04 -1.510000e+01 -1.152465e-04 -1.560000e+01 -1.152482e-04 -1.610000e+01 -1.152499e-04 -1.660000e+01 -1.152516e-04 -1.710000e+01 -1.152532e-04 -1.760000e+01 -1.152548e-04 -1.810000e+01 -1.152564e-04 -1.860000e+01 -1.152580e-04 -1.910000e+01 -1.152596e-04 -1.960000e+01 -1.152611e-04 -2.010000e+01 -1.152626e-04 -2.060000e+01 -1.152641e-04 -2.110000e+01 -1.152655e-04 -2.160000e+01 -1.152670e-04 -2.210000e+01 -1.152684e-04 -2.260000e+01 -1.152698e-04 -2.310000e+01 -1.152712e-04 -2.360000e+01 -1.152726e-04 -2.410000e+01 -1.152740e-04 -2.460000e+01 -1.152753e-04 -2.510000e+01 -1.152767e-04 -2.560000e+01 -1.152780e-04 -2.610000e+01 -1.152793e-04 -2.660000e+01 -1.152806e-04 -2.710000e+01 -1.152819e-04 -2.760000e+01 -1.152832e-04 -2.810000e+01 -1.152844e-04 -2.860000e+01 -1.152857e-04 -2.910000e+01 -1.152869e-04 -2.960000e+01 -1.152881e-04 -3.010000e+01 -1.152893e-04 -1.000000e-01 -2.317270e-05 -6.000000e-01 -1.365541e-04 -1.100000e+00 -2.455559e-04 -1.600000e+00 -3.497325e-04 -2.100000e+00 -4.484681e-04 -2.600000e+00 -5.409125e-04 -3.100000e+00 -6.258614e-04 -3.600000e+00 -7.015457e-04 -4.100000e+00 -7.653165e-04 -4.600000e+00 -8.134664e-04 -5.100000e+00 -8.422726e-04 -5.600000e+00 -8.517203e-04 -6.100000e+00 -8.520011e-04 -6.600000e+00 -8.520615e-04 -7.100000e+00 -8.521132e-04 -7.600000e+00 -8.521582e-04 -8.100000e+00 -8.521979e-04 -8.600000e+00 -8.522332e-04 -9.100000e+00 -8.522650e-04 -9.600000e+00 -8.522938e-04 -1.010000e+01 -8.523202e-04 -1.060000e+01 -8.523444e-04 -1.110000e+01 -8.523669e-04 -1.160000e+01 -8.523878e-04 -1.210000e+01 -8.524074e-04 -1.260000e+01 -8.524259e-04 -1.310000e+01 -8.524433e-04 -1.360000e+01 -8.524599e-04 -1.410000e+01 -8.524756e-04 -1.460000e+01 -8.524906e-04 -1.510000e+01 -8.525051e-04 -1.560000e+01 -8.525189e-04 -1.610000e+01 -8.525322e-04 -1.660000e+01 -8.525450e-04 -1.710000e+01 -8.525574e-04 -1.760000e+01 -8.525694e-04 -1.810000e+01 -8.525811e-04 -1.860000e+01 -8.525924e-04 -1.910000e+01 -8.526034e-04 -1.960000e+01 -8.526141e-04 -2.010000e+01 -8.526245e-04 -2.060000e+01 -8.526347e-04 -2.110000e+01 -8.526446e-04 -2.160000e+01 -8.526543e-04 -2.210000e+01 -8.526638e-04 -2.260000e+01 -8.526731e-04 -2.310000e+01 -8.526822e-04 -2.360000e+01 -8.526912e-04 -2.410000e+01 -8.526999e-04 -2.460000e+01 -8.527086e-04 -2.510000e+01 -8.527170e-04 -2.560000e+01 -8.527253e-04 -2.610000e+01 -8.527335e-04 -2.660000e+01 -8.527416e-04 -2.710000e+01 -8.527495e-04 -2.760000e+01 -8.527573e-04 -2.810000e+01 -8.527650e-04 -2.860000e+01 -8.527726e-04 -2.910000e+01 -8.527801e-04 -2.960000e+01 -8.527874e-04 -3.010000e+01 -8.527947e-04 -1.000000e-01 -2.514541e-05 -6.000000e-01 -1.500042e-04 -1.100000e+00 -2.734321e-04 -1.600000e+00 -3.954305e-04 -2.100000e+00 -5.159805e-04 -2.600000e+00 -6.350467e-04 -3.100000e+00 -7.525787e-04 -3.600000e+00 -8.685117e-04 -4.100000e+00 -9.827659e-04 -4.600000e+00 -1.095245e-03 -5.100000e+00 -1.205835e-03 -5.600000e+00 -1.314398e-03 -6.100000e+00 -1.420771e-03 -6.600000e+00 -1.524757e-03 -7.100000e+00 -1.626120e-03 -7.600000e+00 -1.724572e-03 -8.100000e+00 -1.819758e-03 -8.600000e+00 -1.911245e-03 -9.100000e+00 -1.998498e-03 -9.600000e+00 -2.080863e-03 -1.010000e+01 -2.157547e-03 -1.060000e+01 -2.227618e-03 -1.110000e+01 -2.290038e-03 -1.160000e+01 -2.343750e-03 -1.210000e+01 -2.387867e-03 -1.260000e+01 -2.421931e-03 -1.310000e+01 -2.446182e-03 -1.360000e+01 -2.461684e-03 -1.410000e+01 -2.470161e-03 -1.460000e+01 -2.473446e-03 -1.510000e+01 -2.473807e-03 -1.560000e+01 -2.474006e-03 -1.610000e+01 -2.474188e-03 -1.660000e+01 -2.474356e-03 -1.710000e+01 -2.474511e-03 -1.760000e+01 -2.474655e-03 -1.810000e+01 -2.474790e-03 -1.860000e+01 -2.474916e-03 -1.910000e+01 -2.475034e-03 -1.960000e+01 -2.475145e-03 -2.010000e+01 -2.475249e-03 -2.060000e+01 -2.475348e-03 -2.110000e+01 -2.475441e-03 -2.160000e+01 -2.475529e-03 -2.210000e+01 -2.475613e-03 -2.260000e+01 -2.475693e-03 -2.310000e+01 -2.475769e-03 -2.360000e+01 -2.475842e-03 -2.410000e+01 -2.475911e-03 -2.460000e+01 -2.475977e-03 -2.510000e+01 -2.476041e-03 -2.560000e+01 -2.476102e-03 -2.610000e+01 -2.476160e-03 -2.660000e+01 -2.476217e-03 -2.710000e+01 -2.476271e-03 -2.760000e+01 -2.476323e-03 -2.810000e+01 -2.476374e-03 -2.860000e+01 -2.476423e-03 -2.910000e+01 -2.476470e-03 -2.960000e+01 -2.476516e-03 -3.010000e+01 -2.476560e-03 -1.000000e-01 -1.778308e-05 -6.000000e-01 -9.408558e-05 -1.100000e+00 -1.409712e-04 -1.600000e+00 -1.481836e-04 -2.100000e+00 -1.481980e-04 -2.600000e+00 -1.482087e-04 -3.100000e+00 -1.482169e-04 -3.600000e+00 -1.482238e-04 -4.100000e+00 -1.482297e-04 -4.600000e+00 -1.482350e-04 -5.100000e+00 -1.482398e-04 -5.600000e+00 -1.482442e-04 -6.100000e+00 -1.482484e-04 -6.600000e+00 -1.482523e-04 -7.100000e+00 -1.482560e-04 -7.600000e+00 -1.482596e-04 -8.100000e+00 -1.482630e-04 -8.600000e+00 -1.482663e-04 -9.100000e+00 -1.482694e-04 -9.600000e+00 -1.482725e-04 -1.010000e+01 -1.482755e-04 -1.060000e+01 -1.482783e-04 -1.110000e+01 -1.482811e-04 -1.160000e+01 -1.482839e-04 -1.210000e+01 -1.482865e-04 -1.260000e+01 -1.482891e-04 -1.310000e+01 -1.482916e-04 -1.360000e+01 -1.482941e-04 -1.410000e+01 -1.482965e-04 -1.460000e+01 -1.482989e-04 -1.510000e+01 -1.483013e-04 -1.560000e+01 -1.483036e-04 -1.610000e+01 -1.483058e-04 -1.660000e+01 -1.483080e-04 -1.710000e+01 -1.483102e-04 -1.760000e+01 -1.483123e-04 -1.810000e+01 -1.483145e-04 -1.860000e+01 -1.483165e-04 -1.910000e+01 -1.483186e-04 -1.960000e+01 -1.483206e-04 -2.010000e+01 -1.483226e-04 -2.060000e+01 -1.483246e-04 -2.110000e+01 -1.483265e-04 -2.160000e+01 -1.483284e-04 -2.210000e+01 -1.483303e-04 -2.260000e+01 -1.483322e-04 -2.310000e+01 -1.483340e-04 -2.360000e+01 -1.483359e-04 -2.410000e+01 -1.483377e-04 -2.460000e+01 -1.483394e-04 -2.510000e+01 -1.483412e-04 -2.560000e+01 -1.483430e-04 -2.610000e+01 -1.483447e-04 -2.660000e+01 -1.483464e-04 -2.710000e+01 -1.483481e-04 -2.760000e+01 -1.483498e-04 -2.810000e+01 -1.483514e-04 -2.860000e+01 -1.483531e-04 -2.910000e+01 -1.483547e-04 -2.960000e+01 -1.483563e-04 -3.010000e+01 -1.483579e-04 -1.000000e-01 -2.681869e-05 -6.000000e-01 -1.588001e-04 -1.100000e+00 -2.870662e-04 -1.600000e+00 -4.112647e-04 -2.100000e+00 -5.309162e-04 -2.600000e+00 -6.453698e-04 -3.100000e+00 -7.537245e-04 -3.600000e+00 -8.546860e-04 -4.100000e+00 -9.463102e-04 -4.600000e+00 -1.025572e-03 -5.100000e+00 -1.087871e-03 -5.600000e+00 -1.127484e-03 -6.100000e+00 -1.141485e-03 -6.600000e+00 -1.141839e-03 -7.100000e+00 -1.141955e-03 -7.600000e+00 -1.142053e-03 -8.100000e+00 -1.142137e-03 -8.600000e+00 -1.142210e-03 -9.100000e+00 -1.142274e-03 -9.600000e+00 -1.142331e-03 -1.010000e+01 -1.142383e-03 -1.060000e+01 -1.142429e-03 -1.110000e+01 -1.142472e-03 -1.160000e+01 -1.142510e-03 -1.210000e+01 -1.142546e-03 -1.260000e+01 -1.142580e-03 -1.310000e+01 -1.142611e-03 -1.360000e+01 -1.142640e-03 -1.410000e+01 -1.142668e-03 -1.460000e+01 -1.142694e-03 -1.510000e+01 -1.142719e-03 -1.560000e+01 -1.142742e-03 -1.610000e+01 -1.142765e-03 -1.660000e+01 -1.142786e-03 -1.710000e+01 -1.142807e-03 -1.760000e+01 -1.142827e-03 -1.810000e+01 -1.142846e-03 -1.860000e+01 -1.142864e-03 -1.910000e+01 -1.142882e-03 -1.960000e+01 -1.142899e-03 -2.010000e+01 -1.142916e-03 -2.060000e+01 -1.142932e-03 -2.110000e+01 -1.142948e-03 -2.160000e+01 -1.142963e-03 -2.210000e+01 -1.142978e-03 -2.260000e+01 -1.142992e-03 -2.310000e+01 -1.143007e-03 -2.360000e+01 -1.143020e-03 -2.410000e+01 -1.143034e-03 -2.460000e+01 -1.143047e-03 -2.510000e+01 -1.143060e-03 -2.560000e+01 -1.143073e-03 -2.610000e+01 -1.143085e-03 -2.660000e+01 -1.143098e-03 -2.710000e+01 -1.143110e-03 -2.760000e+01 -1.143121e-03 -2.810000e+01 -1.143133e-03 -2.860000e+01 -1.143144e-03 -2.910000e+01 -1.143156e-03 -2.960000e+01 -1.143167e-03 -3.010000e+01 -1.143178e-03 -1.000000e-01 -2.743351e-05 -6.000000e-01 -1.638452e-04 -1.100000e+00 -2.990142e-04 -1.600000e+00 -4.329480e-04 -2.100000e+00 -5.656380e-04 -2.600000e+00 -6.970623e-04 -3.100000e+00 -8.271876e-04 -3.600000e+00 -9.559696e-04 -4.100000e+00 -1.083353e-03 -4.600000e+00 -1.209271e-03 -5.100000e+00 -1.333645e-03 -5.600000e+00 -1.456381e-03 -6.100000e+00 -1.577367e-03 -6.600000e+00 -1.696475e-03 -7.100000e+00 -1.813547e-03 -7.600000e+00 -1.928398e-03 -8.100000e+00 -2.040804e-03 -8.600000e+00 -2.150495e-03 -9.100000e+00 -2.257137e-03 -9.600000e+00 -2.360324e-03 -1.010000e+01 -2.459552e-03 -1.060000e+01 -2.554200e-03 -1.110000e+01 -2.643506e-03 -1.160000e+01 -2.726545e-03 -1.210000e+01 -2.802231e-03 -1.260000e+01 -2.869351e-03 -1.310000e+01 -2.926683e-03 -1.360000e+01 -2.973212e-03 -1.410000e+01 -3.008455e-03 -1.460000e+01 -3.032774e-03 -1.510000e+01 -3.047499e-03 -1.560000e+01 -3.054585e-03 -1.610000e+01 -3.055733e-03 -1.660000e+01 -3.056098e-03 -1.710000e+01 -3.056430e-03 -1.760000e+01 -3.056735e-03 -1.810000e+01 -3.057016e-03 -1.860000e+01 -3.057277e-03 -1.910000e+01 -3.057518e-03 -1.960000e+01 -3.057743e-03 -2.010000e+01 -3.057954e-03 -2.060000e+01 -3.058150e-03 -2.110000e+01 -3.058335e-03 -2.160000e+01 -3.058509e-03 -2.210000e+01 -3.058673e-03 -2.260000e+01 -3.058828e-03 -2.310000e+01 -3.058974e-03 -2.360000e+01 -3.059113e-03 -2.410000e+01 -3.059245e-03 -2.460000e+01 -3.059371e-03 -2.510000e+01 -3.059490e-03 -2.560000e+01 -3.059604e-03 -2.610000e+01 -3.059713e-03 -2.660000e+01 -3.059818e-03 -2.710000e+01 -3.059918e-03 -2.760000e+01 -3.060014e-03 -2.810000e+01 -3.060106e-03 -2.860000e+01 -3.060194e-03 -2.910000e+01 -3.060279e-03 -2.960000e+01 -3.060362e-03 -3.010000e+01 -3.060441e-03 -1.000000e-01 -1.077598e-05 -6.000000e-01 -5.570955e-05 -1.100000e+00 -8.278490e-05 -1.600000e+00 -8.917437e-05 -2.100000e+00 -8.919203e-05 -2.600000e+00 -8.919763e-05 -3.100000e+00 -8.920205e-05 -3.600000e+00 -8.920576e-05 -4.100000e+00 -8.920899e-05 -4.600000e+00 -8.921189e-05 -5.100000e+00 -8.921455e-05 -5.600000e+00 -8.921701e-05 -6.100000e+00 -8.921932e-05 -6.600000e+00 -8.922150e-05 -7.100000e+00 -8.922357e-05 -7.600000e+00 -8.922555e-05 -8.100000e+00 -8.922745e-05 -8.600000e+00 -8.922928e-05 -9.100000e+00 -8.923105e-05 -9.600000e+00 -8.923275e-05 -1.010000e+01 -8.923441e-05 -1.060000e+01 -8.923601e-05 -1.110000e+01 -8.923758e-05 -1.160000e+01 -8.923910e-05 -1.210000e+01 -8.924059e-05 -1.260000e+01 -8.924204e-05 -1.310000e+01 -8.924346e-05 -1.360000e+01 -8.924484e-05 -1.410000e+01 -8.924620e-05 -1.460000e+01 -8.924754e-05 -1.510000e+01 -8.924885e-05 -1.560000e+01 -8.925013e-05 -1.610000e+01 -8.925139e-05 -1.660000e+01 -8.925263e-05 -1.710000e+01 -8.925386e-05 -1.760000e+01 -8.925506e-05 -1.810000e+01 -8.925624e-05 -1.860000e+01 -8.925740e-05 -1.910000e+01 -8.925855e-05 -1.960000e+01 -8.925969e-05 -2.010000e+01 -8.926080e-05 -2.060000e+01 -8.926190e-05 -2.110000e+01 -8.926299e-05 -2.160000e+01 -8.926407e-05 -2.210000e+01 -8.926513e-05 -2.260000e+01 -8.926617e-05 -2.310000e+01 -8.926721e-05 -2.360000e+01 -8.926823e-05 -2.410000e+01 -8.926925e-05 -2.460000e+01 -8.927025e-05 -2.510000e+01 -8.927124e-05 -2.560000e+01 -8.927222e-05 -2.610000e+01 -8.927319e-05 -2.660000e+01 -8.927415e-05 -2.710000e+01 -8.927510e-05 -2.760000e+01 -8.927604e-05 -2.810000e+01 -8.927697e-05 -2.860000e+01 -8.927790e-05 -2.910000e+01 -8.927881e-05 -2.960000e+01 -8.927972e-05 -3.010000e+01 -8.928062e-05 -1.000000e-01 -1.860060e-05 -6.000000e-01 -1.088450e-04 -1.100000e+00 -1.942516e-04 -1.600000e+00 -2.743590e-04 -2.100000e+00 -3.485154e-04 -2.600000e+00 -4.158089e-04 -3.100000e+00 -4.749410e-04 -3.600000e+00 -5.240596e-04 -4.100000e+00 -5.607798e-04 -4.600000e+00 -5.831341e-04 -5.100000e+00 -5.919380e-04 -5.600000e+00 -5.928997e-04 -6.100000e+00 -5.929328e-04 -6.600000e+00 -5.929600e-04 -7.100000e+00 -5.929840e-04 -7.600000e+00 -5.930054e-04 -8.100000e+00 -5.930246e-04 -8.600000e+00 -5.930421e-04 -9.100000e+00 -5.930581e-04 -9.600000e+00 -5.930729e-04 -1.010000e+01 -5.930865e-04 -1.060000e+01 -5.930993e-04 -1.110000e+01 -5.931113e-04 -1.160000e+01 -5.931226e-04 -1.210000e+01 -5.931333e-04 -1.260000e+01 -5.931435e-04 -1.310000e+01 -5.931533e-04 -1.360000e+01 -5.931626e-04 -1.410000e+01 -5.931715e-04 -1.460000e+01 -5.931801e-04 -1.510000e+01 -5.931884e-04 -1.560000e+01 -5.931965e-04 -1.610000e+01 -5.932043e-04 -1.660000e+01 -5.932118e-04 -1.710000e+01 -5.932191e-04 -1.760000e+01 -5.932263e-04 -1.810000e+01 -5.932333e-04 -1.860000e+01 -5.932400e-04 -1.910000e+01 -5.932467e-04 -1.960000e+01 -5.932532e-04 -2.010000e+01 -5.932595e-04 -2.060000e+01 -5.932657e-04 -2.110000e+01 -5.932718e-04 -2.160000e+01 -5.932778e-04 -2.210000e+01 -5.932837e-04 -2.260000e+01 -5.932894e-04 -2.310000e+01 -5.932951e-04 -2.360000e+01 -5.933007e-04 -2.410000e+01 -5.933062e-04 -2.460000e+01 -5.933116e-04 -2.510000e+01 -5.933169e-04 -2.560000e+01 -5.933221e-04 -2.610000e+01 -5.933273e-04 -2.660000e+01 -5.933324e-04 -2.710000e+01 -5.933374e-04 -2.760000e+01 -5.933424e-04 -2.810000e+01 -5.933473e-04 -2.860000e+01 -5.933521e-04 -2.910000e+01 -5.933569e-04 -2.960000e+01 -5.933616e-04 -3.010000e+01 -5.933662e-04 -1.000000e-01 -2.178414e-05 -6.000000e-01 -1.296821e-04 -1.100000e+00 -2.358934e-04 -1.600000e+00 -3.404134e-04 -2.100000e+00 -4.432108e-04 -2.600000e+00 -5.442324e-04 -3.100000e+00 -6.434052e-04 -3.600000e+00 -7.406368e-04 -4.100000e+00 -8.358138e-04 -4.600000e+00 -9.287993e-04 -5.100000e+00 -1.019428e-03 -5.600000e+00 -1.107500e-03 -6.100000e+00 -1.192775e-03 -6.600000e+00 -1.274958e-03 -7.100000e+00 -1.353689e-03 -7.600000e+00 -1.428530e-03 -8.100000e+00 -1.498946e-03 -8.600000e+00 -1.564295e-03 -9.100000e+00 -1.623835e-03 -9.600000e+00 -1.676752e-03 -1.010000e+01 -1.722243e-03 -1.060000e+01 -1.759673e-03 -1.110000e+01 -1.788774e-03 -1.160000e+01 -1.809838e-03 -1.210000e+01 -1.823779e-03 -1.260000e+01 -1.831996e-03 -1.310000e+01 -1.836079e-03 -1.360000e+01 -1.837454e-03 -1.410000e+01 -1.837642e-03 -1.460000e+01 -1.837734e-03 -1.510000e+01 -1.837818e-03 -1.560000e+01 -1.837896e-03 -1.610000e+01 -1.837968e-03 -1.660000e+01 -1.838036e-03 -1.710000e+01 -1.838100e-03 -1.760000e+01 -1.838160e-03 -1.810000e+01 -1.838216e-03 -1.860000e+01 -1.838269e-03 -1.910000e+01 -1.838320e-03 -1.960000e+01 -1.838368e-03 -2.010000e+01 -1.838414e-03 -2.060000e+01 -1.838457e-03 -2.110000e+01 -1.838499e-03 -2.160000e+01 -1.838538e-03 -2.210000e+01 -1.838576e-03 -2.260000e+01 -1.838612e-03 -2.310000e+01 -1.838647e-03 -2.360000e+01 -1.838681e-03 -2.410000e+01 -1.838713e-03 -2.460000e+01 -1.838744e-03 -2.510000e+01 -1.838774e-03 -2.560000e+01 -1.838803e-03 -2.610000e+01 -1.838832e-03 -2.660000e+01 -1.838859e-03 -2.710000e+01 -1.838885e-03 -2.760000e+01 -1.838911e-03 -2.810000e+01 -1.838935e-03 -2.860000e+01 -1.838960e-03 -2.910000e+01 -1.838983e-03 -2.960000e+01 -1.839006e-03 -3.010000e+01 -1.839028e-03 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/acVd_coadov.standard0000644000175000017500000000550713546075722024730 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -1 2.460788e-06 2.144733e-03 5.52874049693061e-13 6.86133485773635e-13 -2 3.765616e-05 1.981657e-03 5.80321957124702e-13 6.57590578045518e-13 -3 1.123391e-04 1.785065e-03 6.09691865076733e-13 6.23461968805049e-13 -4 2.352359e-04 1.544071e-03 6.41650373729639e-13 5.7980195698391e-13 -5 4.187927e-04 1.244826e-03 6.76853783261115e-13 5.1961094068693e-13 -6 6.723607e-04 8.833017e-04 7.12331692866914e-13 4.38355818686751e-13 -7 9.699029e-04 5.059907e-04 7.38337699908154e-13 3.51261195105501e-13 -8 1.230887e-03 2.117441e-04 7.48784002736536e-13 2.88919578226237e-13 -9 1.392875e-03 5.118161e-05 7.49423802909765e-13 2.49883367657012e-13 -10 1.449112e-03 2.042876e-06 7.36626199444758e-13 9.58225459443724e-14 -11 1.449441e-03 1.809495e-06 7.33456698586602e-13 4.45397320593268e-14 -12 1.449704e-03 1.643475e-06 7.32812598412209e-13 3.41136992364329e-14 -13 1.449941e-03 1.505476e-06 7.32496698326677e-13 2.89992878516837e-14 -14 1.450161e-03 1.386751e-06 7.32300398273528e-13 2.58217169913425e-14 -15 1.450366e-03 1.283902e-06 7.32163398236435e-13 2.3603346390709e-14 -16 1.450555e-03 1.194741e-06 7.32060798208656e-13 2.19419859408884e-14 -17 1.450731e-03 1.117403e-06 7.3198029818686e-13 2.06377955877732e-14 -18 1.450893e-03 1.050204e-06 7.31914898169153e-13 1.95787653010361e-14 -19 1.451043e-03 9.916385e-07 7.31860398154396e-13 1.86965950621847e-14 -20 1.451182e-03 9.403920e-07 7.3181409814186e-13 1.79469848592245e-14 -1 3.415552e-05 1.635579e-03 5.445740474458e-13 6.91499787226585e-13 -2 9.149376e-05 1.493452e-03 5.71824854824075e-13 6.63000679510327e-13 -3 1.755353e-04 1.330511e-03 6.01308862806998e-13 6.28458970158008e-13 -4 2.912939e-04 1.138639e-03 6.33789871601373e-13 5.83705958040935e-13 -5 4.459556e-04 9.085684e-04 6.70115981436826e-13 5.21559441214495e-13 -6 6.432207e-04 6.398814e-04 7.0729379150288e-13 4.37969318582104e-13 -7 8.621435e-04 3.674797e-04 7.35153499046018e-13 3.49132094529038e-13 -8 1.048538e-03 1.580313e-04 7.47078802274846e-13 2.84540177040495e-13 -9 1.162955e-03 4.356922e-05 7.48577202680544e-13 2.39210164767196e-13 -10 1.209992e-03 2.181629e-06 7.38920600065977e-13 8.61595633280777e-14 -11 1.211048e-03 1.363443e-06 7.36833499500885e-13 4.35074717798378e-14 -12 1.211266e-03 1.236791e-06 7.36396199382484e-13 3.36802791190825e-14 -13 1.211463e-03 1.132411e-06 7.36176799323081e-13 2.87483077837298e-14 -14 1.211644e-03 1.042959e-06 7.36039099285798e-13 2.56534069457719e-14 -15 1.211812e-03 9.656511e-07 7.35942499259643e-13 2.34805463574604e-14 -16 1.211968e-03 8.987207e-07 7.35869899239986e-13 2.18473359152615e-14 -17 1.212112e-03 8.407066e-07 7.35812699224499e-13 2.05619755672446e-14 -18 1.212246e-03 7.903130e-07 7.35766199211909e-13 1.95162552841113e-14 -19 1.212370e-03 7.463956e-07 7.35727399201404e-13 1.86439250479241e-14 -20 1.212485e-03 7.079620e-07 7.35694399192469e-13 1.79018048469918e-14 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_gidl.standard0000644000175000017500000001634313546075722024417 0ustar carstencarstenV(d) I(d) I(b) -1.000000e+00 -5.353655e-04 1.012500e-15 -2.000000e+00 -5.457226e-04 2.012500e-15 -3.000000e+00 -5.459996e-04 3.012500e-15 -4.000000e+00 -5.461975e-04 1.177668e-14 -5.000000e+00 -5.463587e-04 6.428976e-12 -6.000000e+00 -5.464986e-04 1.829099e-10 -7.000000e+00 -5.466253e-04 1.430599e-09 -8.000000e+00 -5.467447e-04 5.900390e-09 -9.000000e+00 -5.468623e-04 1.685599e-08 -1.000000e+01 -5.469837e-04 3.817964e-08 -1.100000e+01 -5.471140e-04 7.390933e-08 -1.200000e+01 -5.472579e-04 1.279356e-07 -1.300000e+01 -5.474197e-04 2.038424e-07 -1.400000e+01 -5.476030e-04 3.048448e-07 -1.500000e+01 -5.478112e-04 4.337817e-07 -1.600000e+01 -5.480469e-04 5.931378e-07 -1.700000e+01 -5.483128e-04 7.850774e-07 -1.800000e+01 -5.486108e-04 1.011482e-06 -1.900000e+01 -5.489429e-04 1.273988e-06 -2.000000e+01 -5.493106e-04 1.574019e-06 -1.000000e+00 -1.766043e-03 1.012500e-15 -2.000000e+00 -3.067649e-03 2.012500e-15 -3.000000e+00 -3.808295e-03 3.012500e-15 -4.000000e+00 -3.987897e-03 4.012500e-15 -5.000000e+00 -3.989524e-03 5.012500e-15 -6.000000e+00 -3.990654e-03 6.012500e-15 -7.000000e+00 -3.991595e-03 7.054631e-15 -8.000000e+00 -3.992397e-03 8.369036e-13 -9.000000e+00 -3.993098e-03 5.962955e-11 -1.000000e+01 -3.993725e-03 6.952127e-10 -1.100000e+01 -3.994296e-03 3.538377e-09 -1.200000e+01 -3.994828e-03 1.145822e-08 -1.300000e+01 -3.995333e-03 2.815176e-08 -1.400000e+01 -3.995821e-03 5.763993e-08 -1.500000e+01 -3.996301e-03 1.038980e-07 -1.600000e+01 -3.996782e-03 1.706441e-07 -1.700000e+01 -3.997268e-03 2.612439e-07 -1.800000e+01 -3.997765e-03 3.786854e-07 -1.900000e+01 -3.998278e-03 5.255912e-07 -2.000000e+01 -3.998810e-03 7.042494e-07 -1.000000e+00 -2.216231e-03 1.012500e-15 -2.000000e+00 -4.281789e-03 2.012500e-15 -3.000000e+00 -6.168359e-03 3.012500e-15 -4.000000e+00 -7.837171e-03 4.012500e-15 -5.000000e+00 -9.237027e-03 5.012500e-15 -6.000000e+00 -1.030548e-02 6.012500e-15 -7.000000e+00 -1.099754e-02 7.012500e-15 -8.000000e+00 -1.134584e-02 8.012500e-15 -9.000000e+00 -1.146674e-02 9.012500e-15 -1.000000e+01 -1.148230e-02 1.001250e-14 -1.100000e+01 -1.148422e-02 1.101250e-14 -1.200000e+01 -1.148594e-02 1.201250e-14 -1.300000e+01 -1.148751e-02 1.460839e-14 -1.400000e+01 -1.148896e-02 3.319179e-12 -1.500000e+01 -1.149029e-02 1.257845e-10 -1.600000e+01 -1.149153e-02 1.119680e-09 -1.700000e+01 -1.149269e-02 4.950738e-09 -1.800000e+01 -1.149378e-02 1.475026e-08 -1.900000e+01 -1.149482e-02 3.434260e-08 -2.000000e+01 -1.149582e-02 6.776507e-08 -1.000000e+00 -6.962586e-04 1.000000e-15 -2.000000e+00 -7.009440e-04 2.000000e-15 -3.000000e+00 -7.013029e-04 3.000000e-15 -4.000000e+00 -7.015601e-04 1.154397e-14 -5.000000e+00 -7.017700e-04 6.349347e-12 -6.000000e+00 -7.019525e-04 1.816111e-10 -7.000000e+00 -7.021175e-04 1.423894e-09 -8.000000e+00 -7.022720e-04 5.880485e-09 -9.000000e+00 -7.024224e-04 1.681260e-08 -1.000000e+01 -7.025746e-04 3.810145e-08 -1.100000e+01 -7.027340e-04 7.378510e-08 -1.200000e+01 -7.029056e-04 1.277548e-07 -1.300000e+01 -7.030938e-04 2.035954e-07 -1.400000e+01 -7.033025e-04 3.045230e-07 -1.500000e+01 -7.035351e-04 4.333777e-07 -1.600000e+01 -7.037945e-04 5.926451e-07 -1.700000e+01 -7.040831e-04 7.844903e-07 -1.800000e+01 -7.044033e-04 1.010796e-06 -1.900000e+01 -7.047568e-04 1.273198e-06 -2.000000e+01 -7.051453e-04 1.573121e-06 -1.000000e+00 -2.345550e-03 1.000000e-15 -2.000000e+00 -4.089944e-03 2.000000e-15 -3.000000e+00 -5.079829e-03 3.000000e-15 -4.000000e+00 -5.301047e-03 4.000000e-15 -5.000000e+00 -5.302930e-03 5.000000e-15 -6.000000e+00 -5.304419e-03 6.000000e-15 -7.000000e+00 -5.305660e-03 7.026411e-15 -8.000000e+00 -5.306719e-03 7.111444e-13 -9.000000e+00 -5.307644e-03 5.471858e-11 -1.000000e+01 -5.308469e-03 6.587178e-10 -1.100000e+01 -5.309222e-03 3.407849e-09 -1.200000e+01 -5.309920e-03 1.114124e-08 -1.300000e+01 -5.310580e-03 2.754019e-08 -1.400000e+01 -5.311214e-03 5.662242e-08 -1.500000e+01 -5.311832e-03 1.023679e-07 -1.600000e+01 -5.312443e-03 1.685034e-07 -1.700000e+01 -5.313054e-03 2.584050e-07 -1.800000e+01 -5.313672e-03 3.750709e-07 -1.900000e+01 -5.314300e-03 5.211334e-07 -2.000000e+01 -5.314944e-03 6.988894e-07 -1.000000e+00 -2.649701e-03 1.000000e-15 -2.000000e+00 -5.144317e-03 2.000000e-15 -3.000000e+00 -7.444572e-03 3.000000e-15 -4.000000e+00 -9.498816e-03 4.000000e-15 -5.000000e+00 -1.124008e-02 5.000000e-15 -6.000000e+00 -1.258505e-02 6.000000e-15 -7.000000e+00 -1.346668e-02 7.000000e-15 -8.000000e+00 -1.391361e-02 8.000000e-15 -9.000000e+00 -1.406785e-02 9.000000e-15 -1.000000e+01 -1.408414e-02 1.000000e-14 -1.100000e+01 -1.408647e-02 1.100000e-14 -1.200000e+01 -1.408857e-02 1.200000e-14 -1.300000e+01 -1.409049e-02 1.362100e-14 -1.400000e+01 -1.409224e-02 2.279400e-12 -1.500000e+01 -1.409387e-02 1.021447e-10 -1.600000e+01 -1.409538e-02 9.787814e-10 -1.700000e+01 -1.409679e-02 4.499870e-09 -1.800000e+01 -1.409811e-02 1.372320e-08 -1.900000e+01 -1.409937e-02 3.243912e-08 -2.000000e+01 -1.410058e-02 6.468228e-08 -1.000000e+00 -4.013794e-04 1.619318e-11 -2.000000e+00 -4.230806e-04 1.619418e-11 -3.000000e+00 -4.232920e-04 1.619518e-11 -4.000000e+00 -4.234419e-04 1.620412e-11 -5.000000e+00 -4.235635e-04 2.268435e-11 -6.000000e+00 -4.236687e-04 2.001287e-10 -7.000000e+00 -4.237641e-04 1.452082e-09 -8.000000e+00 -4.238546e-04 5.932273e-09 -9.000000e+00 -4.239454e-04 1.690637e-08 -1.000000e+01 -4.240416e-04 3.825740e-08 -1.100000e+01 -4.241480e-04 7.402334e-08 -1.200000e+01 -4.242692e-04 1.280941e-07 -1.300000e+01 -4.244093e-04 2.040531e-07 -1.400000e+01 -4.245717e-04 3.051142e-07 -1.500000e+01 -4.247598e-04 4.341158e-07 -1.600000e+01 -4.249762e-04 5.935417e-07 -1.700000e+01 -4.252234e-04 7.855557e-07 -1.800000e+01 -4.255032e-04 1.012039e-06 -1.900000e+01 -4.258176e-04 1.274626e-06 -2.000000e+01 -4.261682e-04 1.574741e-06 -1.000000e+00 -1.222122e-03 1.619318e-11 -2.000000e+00 -2.119443e-03 1.619418e-11 -3.000000e+00 -2.640888e-03 1.619518e-11 -4.000000e+00 -2.789490e-03 1.619618e-11 -5.000000e+00 -2.793036e-03 1.619718e-11 -6.000000e+00 -2.793830e-03 1.619818e-11 -7.000000e+00 -2.794489e-03 1.619924e-11 -8.000000e+00 -2.795050e-03 1.715436e-11 -9.000000e+00 -2.795541e-03 8.040212e-11 -1.000000e+01 -2.795979e-03 7.445609e-10 -1.100000e+01 -2.796379e-03 3.671618e-09 -1.200000e+01 -2.796754e-03 1.175656e-08 -1.300000e+01 -2.797112e-03 2.870979e-08 -1.400000e+01 -2.797462e-03 5.855485e-08 -1.500000e+01 -2.797812e-03 1.052627e-07 -1.600000e+01 -2.798169e-03 1.725440e-07 -1.700000e+01 -2.798536e-03 2.637552e-07 -1.800000e+01 -2.798919e-03 3.818754e-07 -1.900000e+01 -2.799323e-03 5.295189e-07 -2.000000e+01 -2.799749e-03 7.089661e-07 -1.000000e+00 -1.701069e-03 1.619318e-11 -2.000000e+00 -3.266999e-03 1.619418e-11 -3.000000e+00 -4.681032e-03 1.619518e-11 -4.000000e+00 -5.918405e-03 1.619618e-11 -5.000000e+00 -6.945512e-03 1.619718e-11 -6.000000e+00 -7.722251e-03 1.619818e-11 -7.000000e+00 -8.223535e-03 1.619918e-11 -8.000000e+00 -8.478687e-03 1.620018e-11 -9.000000e+00 -8.571982e-03 1.620118e-11 -1.000000e+01 -8.589581e-03 1.620218e-11 -1.100000e+01 -8.591100e-03 1.620318e-11 -1.200000e+01 -8.592398e-03 1.620418e-11 -1.300000e+01 -8.593581e-03 1.620901e-11 -1.400000e+01 -8.594668e-03 2.095722e-11 -1.500000e+01 -8.595671e-03 1.703098e-10 -1.600000e+01 -8.596604e-03 1.294369e-09 -1.700000e+01 -8.597477e-03 5.457737e-09 -1.800000e+01 -8.598302e-03 1.586323e-08 -1.900000e+01 -8.599091e-03 3.636685e-08 -2.000000e+01 -8.599852e-03 7.100670e-08 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_lg2.standard0000644000175000017500000001167213546075722024164 0ustar carstencarstenV(g) I(d) -1.000000e+00 -5.485888e-06 -2.000000e+00 -5.457226e-05 -3.000000e+00 -1.444498e-04 -4.000000e+00 -2.381316e-04 -5.000000e+00 -3.067649e-04 -6.000000e+00 -3.549635e-04 -7.000000e+00 -3.877935e-04 -8.000000e+00 -4.091064e-04 -9.000000e+00 -4.218274e-04 -1.000000e+01 -4.281789e-04 -1.100000e+01 -4.298432e-04 -1.200000e+01 -4.280896e-04 -1.300000e+01 -4.238725e-04 -1.400000e+01 -4.179077e-04 -1.500000e+01 -4.107311e-04 -1.600000e+01 -4.027430e-04 -1.700000e+01 -3.942418e-04 -1.800000e+01 -3.854491e-04 -1.900000e+01 -3.765288e-04 -2.000000e+01 -3.676011e-04 -1.000000e+00 -5.492770e-06 -2.000000e+00 -5.463587e-05 -3.000000e+00 -1.447530e-04 -4.000000e+00 -2.628768e-04 -5.000000e+00 -3.989524e-04 -6.000000e+00 -5.454057e-04 -7.000000e+00 -6.840535e-04 -8.000000e+00 -7.931295e-04 -9.000000e+00 -8.711746e-04 -1.000000e+01 -9.237027e-04 -1.100000e+01 -9.567888e-04 -1.200000e+01 -9.753480e-04 -1.300000e+01 -9.831139e-04 -1.400000e+01 -9.828937e-04 -1.500000e+01 -9.767995e-04 -1.600000e+01 -9.664249e-04 -1.700000e+01 -9.529748e-04 -1.800000e+01 -9.373611e-04 -1.900000e+01 -9.202749e-04 -2.000000e+01 -9.022390e-04 -1.000000e+00 -5.500307e-06 -2.000000e+00 -5.469455e-05 -3.000000e+00 -1.448969e-04 -4.000000e+00 -2.631414e-04 -5.000000e+00 -3.993724e-04 -6.000000e+00 -5.460514e-04 -7.000000e+00 -6.976572e-04 -8.000000e+00 -8.502416e-04 -9.000000e+00 -1.001053e-03 -1.000000e+01 -1.148230e-03 -1.100000e+01 -1.288425e-03 -1.200000e+01 -1.411937e-03 -1.300000e+01 -1.513529e-03 -1.400000e+01 -1.591040e-03 -1.500000e+01 -1.645565e-03 -1.600000e+01 -1.680243e-03 -1.700000e+01 -1.698831e-03 -1.800000e+01 -1.704833e-03 -1.900000e+01 -1.701188e-03 -2.000000e+01 -1.690242e-03 -1.000000e+00 -4.606784e-06 -2.000000e+00 -7.009440e-05 -3.000000e+00 -1.943641e-04 -4.000000e+00 -3.229553e-04 -5.000000e+00 -4.089944e-04 -6.000000e+00 -4.627327e-04 -7.000000e+00 -4.941418e-04 -8.000000e+00 -5.102216e-04 -9.000000e+00 -5.158529e-04 -1.000000e+01 -5.144317e-04 -1.100000e+01 -5.083171e-04 -1.200000e+01 -4.991457e-04 -1.300000e+01 -4.880521e-04 -1.400000e+01 -4.758220e-04 -1.500000e+01 -4.629980e-04 -1.600000e+01 -4.499529e-04 -1.700000e+01 -4.369409e-04 -1.800000e+01 -4.241325e-04 -1.900000e+01 -4.116400e-04 -2.000000e+01 -3.995341e-04 -1.000000e+00 -4.612788e-06 -2.000000e+00 -7.017700e-05 -3.000000e+00 -1.946223e-04 -4.000000e+00 -3.536403e-04 -5.000000e+00 -5.302930e-04 -6.000000e+00 -7.134648e-04 -7.000000e+00 -8.802963e-04 -8.000000e+00 -1.001665e-03 -9.000000e+00 -1.079417e-03 -1.000000e+01 -1.124008e-03 -1.100000e+01 -1.145174e-03 -1.200000e+01 -1.150092e-03 -1.300000e+01 -1.143825e-03 -1.400000e+01 -1.129930e-03 -1.500000e+01 -1.110920e-03 -1.600000e+01 -1.088580e-03 -1.700000e+01 -1.064179e-03 -1.800000e+01 -1.038622e-03 -1.900000e+01 -1.012553e-03 -2.000000e+01 -9.864257e-04 -1.000000e+00 -4.619408e-06 -2.000000e+00 -7.025365e-05 -3.000000e+00 -1.948163e-04 -4.000000e+00 -3.539949e-04 -5.000000e+00 -5.308469e-04 -6.000000e+00 -7.142503e-04 -7.000000e+00 -8.971563e-04 -8.000000e+00 -1.075270e-03 -9.000000e+00 -1.246120e-03 -1.000000e+01 -1.408414e-03 -1.100000e+01 -1.559245e-03 -1.200000e+01 -1.686508e-03 -1.300000e+01 -1.785140e-03 -1.400000e+01 -1.854031e-03 -1.500000e+01 -1.896005e-03 -1.600000e+01 -1.915931e-03 -1.700000e+01 -1.918887e-03 -1.800000e+01 -1.909248e-03 -1.900000e+01 -1.890471e-03 -2.000000e+01 -1.865185e-03 -1.000000e+00 -6.910167e-06 -2.000000e+00 -4.230808e-05 -3.000000e+00 -1.025122e-04 -4.000000e+00 -1.635762e-04 -5.000000e+00 -2.119443e-04 -6.000000e+00 -2.494309e-04 -7.000000e+00 -2.781336e-04 -8.000000e+00 -2.997198e-04 -9.000000e+00 -3.155394e-04 -1.000000e+01 -3.266999e-04 -1.100000e+01 -3.341128e-04 -1.200000e+01 -3.385263e-04 -1.300000e+01 -3.405527e-04 -1.400000e+01 -3.406905e-04 -1.500000e+01 -3.393448e-04 -1.600000e+01 -3.368431e-04 -1.700000e+01 -3.334499e-04 -1.800000e+01 -3.293782e-04 -1.900000e+01 -3.247989e-04 -2.000000e+01 -3.198493e-04 -1.000000e+00 -6.918315e-06 -2.000000e+00 -4.235636e-05 -3.000000e+00 -1.033069e-04 -4.000000e+00 -1.839316e-04 -5.000000e+00 -2.793036e-04 -6.000000e+00 -3.850167e-04 -7.000000e+00 -4.878350e-04 -8.000000e+00 -5.745354e-04 -9.000000e+00 -6.427438e-04 -1.000000e+01 -6.945512e-04 -1.100000e+01 -7.328845e-04 -1.200000e+01 -7.603617e-04 -1.300000e+01 -7.791346e-04 -1.400000e+01 -7.909443e-04 -1.500000e+01 -7.971972e-04 -1.600000e+01 -7.990303e-04 -1.700000e+01 -7.973634e-04 -1.800000e+01 -7.929409e-04 -1.900000e+01 -7.863647e-04 -2.000000e+01 -7.781217e-04 -1.000000e+00 -6.927129e-06 -2.000000e+00 -4.240035e-05 -3.000000e+00 -1.034080e-04 -4.000000e+00 -1.841157e-04 -5.000000e+00 -2.795978e-04 -6.000000e+00 -3.857578e-04 -7.000000e+00 -4.992306e-04 -8.000000e+00 -6.172930e-04 -9.000000e+00 -7.377735e-04 -1.000000e+01 -8.589582e-04 -1.100000e+01 -9.773080e-04 -1.200000e+01 -1.086199e-03 -1.300000e+01 -1.181066e-03 -1.400000e+01 -1.259333e-03 -1.500000e+01 -1.320715e-03 -1.600000e+01 -1.366592e-03 -1.700000e+01 -1.399109e-03 -1.800000e+01 -1.420526e-03 -1.900000e+01 -1.432901e-03 -2.000000e+01 -1.437988e-03 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_corsrd1.standard0000644000175000017500000001167213546075722025055 0ustar carstencarstenV(d) I(d) -1.000000e+00 -8.924794e-05 -2.000000e+00 -9.648148e-05 -3.000000e+00 -9.649138e-05 -4.000000e+00 -9.649816e-05 -5.000000e+00 -9.650360e-05 -6.000000e+00 -9.650828e-05 -7.000000e+00 -9.651247e-05 -8.000000e+00 -9.651630e-05 -9.000000e+00 -9.651984e-05 -1.000000e+01 -9.652316e-05 -1.100000e+01 -9.652629e-05 -1.200000e+01 -9.652927e-05 -1.300000e+01 -9.653211e-05 -1.400000e+01 -9.653483e-05 -1.500000e+01 -9.653745e-05 -1.600000e+01 -9.653997e-05 -1.700000e+01 -9.654241e-05 -1.800000e+01 -9.654477e-05 -1.900000e+01 -9.654706e-05 -2.000000e+01 -9.654929e-05 -1.000000e+00 -1.809063e-04 -2.000000e+00 -3.429863e-04 -3.000000e+00 -4.796184e-04 -4.000000e+00 -5.774106e-04 -5.000000e+00 -6.136568e-04 -6.000000e+00 -6.139745e-04 -7.000000e+00 -6.140078e-04 -8.000000e+00 -6.140346e-04 -9.000000e+00 -6.140571e-04 -1.000000e+01 -6.140764e-04 -1.100000e+01 -6.140936e-04 -1.200000e+01 -6.141092e-04 -1.300000e+01 -6.141235e-04 -1.400000e+01 -6.141369e-04 -1.500000e+01 -6.141494e-04 -1.600000e+01 -6.141613e-04 -1.700000e+01 -6.141726e-04 -1.800000e+01 -6.141835e-04 -1.900000e+01 -6.141939e-04 -2.000000e+01 -6.142039e-04 -1.000000e+00 -1.989812e-04 -2.000000e+00 -3.929189e-04 -3.000000e+00 -5.815321e-04 -4.000000e+00 -7.641981e-04 -5.000000e+00 -9.399577e-04 -6.000000e+00 -1.107426e-03 -7.000000e+00 -1.264587e-03 -8.000000e+00 -1.408391e-03 -9.000000e+00 -1.533996e-03 -1.000000e+01 -1.633783e-03 -1.100000e+01 -1.698360e-03 -1.200000e+01 -1.725317e-03 -1.300000e+01 -1.728602e-03 -1.400000e+01 -1.728662e-03 -1.500000e+01 -1.728715e-03 -1.600000e+01 -1.728762e-03 -1.700000e+01 -1.728805e-03 -1.800000e+01 -1.728843e-03 -1.900000e+01 -1.728879e-03 -2.000000e+01 -1.728911e-03 -1.000000e+00 -1.094756e-04 -2.000000e+00 -1.171462e-04 -3.000000e+00 -1.171580e-04 -4.000000e+00 -1.171661e-04 -5.000000e+00 -1.171726e-04 -6.000000e+00 -1.171781e-04 -7.000000e+00 -1.171831e-04 -8.000000e+00 -1.171877e-04 -9.000000e+00 -1.171919e-04 -1.000000e+01 -1.171958e-04 -1.100000e+01 -1.171996e-04 -1.200000e+01 -1.172031e-04 -1.300000e+01 -1.172065e-04 -1.400000e+01 -1.172097e-04 -1.500000e+01 -1.172128e-04 -1.600000e+01 -1.172159e-04 -1.700000e+01 -1.172188e-04 -1.800000e+01 -1.172216e-04 -1.900000e+01 -1.172243e-04 -2.000000e+01 -1.172270e-04 -1.000000e+00 -2.052445e-04 -2.000000e+00 -3.938116e-04 -3.000000e+00 -5.593785e-04 -4.000000e+00 -6.889684e-04 -5.000000e+00 -7.536999e-04 -6.000000e+00 -7.564306e-04 -7.000000e+00 -7.564728e-04 -8.000000e+00 -7.565064e-04 -9.000000e+00 -7.565340e-04 -1.000000e+01 -7.565577e-04 -1.100000e+01 -7.565785e-04 -1.200000e+01 -7.565973e-04 -1.300000e+01 -7.566145e-04 -1.400000e+01 -7.566306e-04 -1.500000e+01 -7.566456e-04 -1.600000e+01 -7.566598e-04 -1.700000e+01 -7.566733e-04 -1.800000e+01 -7.566863e-04 -1.900000e+01 -7.566987e-04 -2.000000e+01 -7.567106e-04 -1.000000e+00 -2.137870e-04 -2.000000e+00 -4.234311e-04 -3.000000e+00 -6.287521e-04 -4.000000e+00 -8.292666e-04 -5.000000e+00 -1.024203e-03 -6.000000e+00 -1.212436e-03 -7.000000e+00 -1.392345e-03 -8.000000e+00 -1.561509e-03 -9.000000e+00 -1.716119e-03 -1.000000e+01 -1.849837e-03 -1.100000e+01 -1.952321e-03 -1.200000e+01 -2.011587e-03 -1.300000e+01 -2.028454e-03 -1.400000e+01 -2.028572e-03 -1.500000e+01 -2.028638e-03 -1.600000e+01 -2.028696e-03 -1.700000e+01 -2.028748e-03 -1.800000e+01 -2.028795e-03 -1.900000e+01 -2.028838e-03 -2.000000e+01 -2.028878e-03 -1.000000e+00 -7.029310e-05 -2.000000e+00 -7.859494e-05 -3.000000e+00 -7.860308e-05 -4.000000e+00 -7.860864e-05 -5.000000e+00 -7.861309e-05 -6.000000e+00 -7.861691e-05 -7.000000e+00 -7.862033e-05 -8.000000e+00 -7.862344e-05 -9.000000e+00 -7.862633e-05 -1.000000e+01 -7.862903e-05 -1.100000e+01 -7.863158e-05 -1.200000e+01 -7.863399e-05 -1.300000e+01 -7.863630e-05 -1.400000e+01 -7.863851e-05 -1.500000e+01 -7.864063e-05 -1.600000e+01 -7.864268e-05 -1.700000e+01 -7.864466e-05 -1.800000e+01 -7.864658e-05 -1.900000e+01 -7.864844e-05 -2.000000e+01 -7.865025e-05 -1.000000e+00 -1.489649e-04 -2.000000e+00 -2.781192e-04 -3.000000e+00 -3.815273e-04 -4.000000e+00 -4.477781e-04 -5.000000e+00 -4.662788e-04 -6.000000e+00 -4.663788e-04 -7.000000e+00 -4.664035e-04 -8.000000e+00 -4.664237e-04 -9.000000e+00 -4.664407e-04 -1.000000e+01 -4.664555e-04 -1.100000e+01 -4.664688e-04 -1.200000e+01 -4.664808e-04 -1.300000e+01 -4.664919e-04 -1.400000e+01 -4.665023e-04 -1.500000e+01 -4.665121e-04 -1.600000e+01 -4.665214e-04 -1.700000e+01 -4.665302e-04 -1.800000e+01 -4.665387e-04 -1.900000e+01 -4.665468e-04 -2.000000e+01 -4.665546e-04 -1.000000e+00 -1.763550e-04 -2.000000e+00 -3.465767e-04 -3.000000e+00 -5.102995e-04 -4.000000e+00 -6.667726e-04 -5.000000e+00 -8.148621e-04 -6.000000e+00 -9.529304e-04 -7.000000e+00 -1.078568e-03 -8.000000e+00 -1.188116e-03 -9.000000e+00 -1.276120e-03 -1.000000e+01 -1.336107e-03 -1.100000e+01 -1.365954e-03 -1.200000e+01 -1.374071e-03 -1.300000e+01 -1.374392e-03 -1.400000e+01 -1.374436e-03 -1.500000e+01 -1.374476e-03 -1.600000e+01 -1.374511e-03 -1.700000e+01 -1.374543e-03 -1.800000e+01 -1.374573e-03 -1.900000e+01 -1.374600e-03 -2.000000e+01 -1.374626e-03 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/acFreq.standard0000644000175000017500000000711713546075722023720 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 6.62793439378816e-13 5.45014961772179e-13 2.18717566459436e-13 1258.925 6.62793660369581e-13 5.45015146631734e-13 2.18717583049071e-13 1584.893 6.62793540459371e-13 5.45015048536057e-13 2.18717555312917e-13 1995.262 6.62793613513099e-13 5.4501503749765e-13 2.18717579488007e-13 2511.886 6.62793838535986e-13 5.45015102751082e-13 2.18717582154016e-13 3162.278 6.6279337565137e-13 5.45014979309895e-13 2.18717495719018e-13 3981.072 6.62793390818127e-13 5.45014866266548e-13 2.1871751334894e-13 5011.872 6.62793426743648e-13 5.45015125854573e-13 2.18717534294327e-13 6309.573 6.62793527206457e-13 5.45014934822725e-13 2.18717553134945e-13 7943.282 6.62793589691486e-13 5.45015098435398e-13 2.18717572760369e-13 10000 6.62793439378816e-13 5.45014961772179e-13 2.18717566459436e-13 12589.25 6.6279366036958e-13 5.45015146631734e-13 2.18717583049071e-13 15848.93 6.62793540459371e-13 5.45015048536057e-13 2.18717555312917e-13 19952.62 6.62793613513098e-13 5.4501503749765e-13 2.18717579488007e-13 25118.86 6.62793838535986e-13 5.45015102751082e-13 2.18717582154016e-13 31622.78 6.6279337565137e-13 5.45014979309895e-13 2.18717495719018e-13 39810.72 6.62793390818127e-13 5.45014866266548e-13 2.1871751334894e-13 50118.72 6.62793426743648e-13 5.45015125854573e-13 2.18717534294327e-13 63095.73 6.62793527206457e-13 5.45014934822725e-13 2.18717553134945e-13 79432.82 6.62793589691486e-13 5.45015098435398e-13 2.18717572760369e-13 100000 6.62793439378816e-13 5.45014961772179e-13 2.18717566459436e-13 125892.5 6.6279366036958e-13 5.45015146631734e-13 2.18717583049071e-13 158489.3 6.62793540459371e-13 5.45015048536057e-13 2.18717555312917e-13 199526.2 6.62793613513098e-13 5.4501503749765e-13 2.18717579488007e-13 251188.6 6.62793838535986e-13 5.45015039390347e-13 2.18717582154016e-13 316227.8 6.6279337565137e-13 5.45014979309895e-13 2.18717495719018e-13 398107.2 6.62793390818127e-13 5.45014866266548e-13 2.1871751334894e-13 501187.2 6.62793426743648e-13 5.45015125854573e-13 2.18717534294327e-13 630957.3 6.62793527206457e-13 5.45014934822725e-13 2.18717527910584e-13 794328.2 6.62793389327275e-13 5.45014898071187e-13 2.18717572760369e-13 1000000 6.62793439378816e-13 5.45014961772179e-13 2.18717566459436e-13 1258925 6.62793533948274e-13 5.45015020210428e-13 2.18717583049071e-13 1584893 6.62793440039379e-13 5.45014948116064e-13 2.18717454892924e-13 1995262 6.62793294447345e-13 5.45014877964773e-13 2.18717499721569e-13 2511886 6.62793204928637e-13 5.45014722586672e-13 2.18717392071811e-13 3162278 6.62792872359304e-13 5.45014476017828e-13 2.18717244072984e-13 3981072 6.62792591259902e-13 5.45014066708323e-13 2.18717113569828e-13 5011872 6.62791838964241e-13 5.45013538075166e-13 2.18716899182564e-13 6309573 6.6279100477042e-13 5.45012916873896e-13 2.18716493711809e-13 7943282 6.62789382043054e-13 5.45011692243811e-13 2.18715969846681e-13 10000000 6.62786914026149e-13 5.45009550504114e-13 2.18714860825403e-13 12589250 6.6278329382246e-13 5.45006676404209e-13 2.18713411145962e-13 15848930 6.6277707158061e-13 5.45001491837076e-13 2.18710927593415e-13 19952620 6.62767370354918e-13 5.44993660092202e-13 2.18707130084598e-13 25118860 6.62752020450914e-13 5.44981078036409e-13 2.18700981641457e-13 31622780 6.62727444390599e-13 5.4496112705873e-13 2.18691223873122e-13 39810720 6.62689048469767e-13 5.44929713315588e-13 2.1867589634333e-13 50118720 6.62628297685269e-13 5.44879847049055e-13 2.1865157793774e-13 63095730 6.62531698345884e-13 5.44800780003239e-13 2.18612998161238e-13 79432820 6.62378435046232e-13 5.44675481097702e-13 2.18551871557847e-13 100000000 6.62135970308903e-13 5.44477177219472e-13 2.18455119958277e-13 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_she.standard0000644000175000017500000001167213546075722024257 0ustar carstencarstenV(d) I(d) -1.000000e+00 -8.209829e-04 -2.000000e+00 -8.425508e-04 -3.000000e+00 -8.440563e-04 -4.000000e+00 -8.451088e-04 -5.000000e+00 -8.459492e-04 -6.000000e+00 -8.466662e-04 -7.000000e+00 -8.473001e-04 -8.000000e+00 -8.478731e-04 -9.000000e+00 -8.483987e-04 -1.000000e+01 -8.488860e-04 -1.100000e+01 -8.493415e-04 -1.200000e+01 -8.497700e-04 -1.300000e+01 -8.501752e-04 -1.400000e+01 -8.505600e-04 -1.500000e+01 -8.509267e-04 -1.600000e+01 -8.512772e-04 -1.700000e+01 -8.516132e-04 -1.800000e+01 -8.519361e-04 -1.900000e+01 -8.522469e-04 -2.000000e+01 -8.525466e-04 -1.000000e+00 -2.498112e-03 -2.000000e+00 -4.210822e-03 -3.000000e+00 -5.204188e-03 -4.000000e+00 -5.537203e-03 -5.000000e+00 -5.547998e-03 -6.000000e+00 -5.548747e-03 -7.000000e+00 -5.548676e-03 -8.000000e+00 -5.547992e-03 -9.000000e+00 -5.546852e-03 -1.000000e+01 -5.545372e-03 -1.100000e+01 -5.543635e-03 -1.200000e+01 -5.541699e-03 -1.300000e+01 -5.539605e-03 -1.400000e+01 -5.537385e-03 -1.500000e+01 -5.535060e-03 -1.600000e+01 -5.532648e-03 -1.700000e+01 -5.530162e-03 -1.800000e+01 -5.527612e-03 -1.900000e+01 -5.525007e-03 -2.000000e+01 -5.522354e-03 -1.000000e+00 -3.077656e-03 -2.000000e+00 -5.717307e-03 -3.000000e+00 -7.906356e-03 -4.000000e+00 -9.693192e-03 -5.000000e+00 -1.113706e-02 -6.000000e+00 -1.229110e-02 -7.000000e+00 -1.319775e-02 -8.000000e+00 -1.388701e-02 -9.000000e+00 -1.437605e-02 -1.000000e+01 -1.467460e-02 -1.100000e+01 -1.480492e-02 -1.200000e+01 -1.482166e-02 -1.300000e+01 -1.480583e-02 -1.400000e+01 -1.478944e-02 -1.500000e+01 -1.477265e-02 -1.600000e+01 -1.475552e-02 -1.700000e+01 -1.473810e-02 -1.800000e+01 -1.472044e-02 -1.900000e+01 -1.470258e-02 -2.000000e+01 -1.468455e-02 -1.000000e+00 -1.047741e-03 -2.000000e+00 -1.061133e-03 -3.000000e+00 -1.062905e-03 -4.000000e+00 -1.064118e-03 -5.000000e+00 -1.065070e-03 -6.000000e+00 -1.065870e-03 -7.000000e+00 -1.066568e-03 -8.000000e+00 -1.067190e-03 -9.000000e+00 -1.067754e-03 -1.000000e+01 -1.068270e-03 -1.100000e+01 -1.068747e-03 -1.200000e+01 -1.069191e-03 -1.300000e+01 -1.069605e-03 -1.400000e+01 -1.069995e-03 -1.500000e+01 -1.070362e-03 -1.600000e+01 -1.070708e-03 -1.700000e+01 -1.071037e-03 -1.800000e+01 -1.071350e-03 -1.900000e+01 -1.071647e-03 -2.000000e+01 -1.071931e-03 -1.000000e+00 -3.172714e-03 -2.000000e+00 -5.304098e-03 -3.000000e+00 -6.551543e-03 -4.000000e+00 -6.995436e-03 -5.000000e+00 -7.008546e-03 -6.000000e+00 -7.006718e-03 -7.000000e+00 -7.003911e-03 -8.000000e+00 -7.000370e-03 -9.000000e+00 -6.996287e-03 -1.000000e+01 -6.991803e-03 -1.100000e+01 -6.987020e-03 -1.200000e+01 -6.982010e-03 -1.300000e+01 -6.976824e-03 -1.400000e+01 -6.971499e-03 -1.500000e+01 -6.966062e-03 -1.600000e+01 -6.960534e-03 -1.700000e+01 -6.954931e-03 -1.800000e+01 -6.949266e-03 -1.900000e+01 -6.943549e-03 -2.000000e+01 -6.937788e-03 -1.000000e+00 -3.574485e-03 -2.000000e+00 -6.601645e-03 -3.000000e+00 -9.073982e-03 -4.000000e+00 -1.106408e-02 -5.000000e+00 -1.265548e-02 -6.000000e+00 -1.392338e-02 -7.000000e+00 -1.493074e-02 -8.000000e+00 -1.572782e-02 -9.000000e+00 -1.635214e-02 -1.000000e+01 -1.682825e-02 -1.100000e+01 -1.716715e-02 -1.200000e+01 -1.736844e-02 -1.300000e+01 -1.743760e-02 -1.400000e+01 -1.741920e-02 -1.500000e+01 -1.739371e-02 -1.600000e+01 -1.736777e-02 -1.700000e+01 -1.734145e-02 -1.800000e+01 -1.731483e-02 -1.900000e+01 -1.728796e-02 -2.000000e+01 -1.726089e-02 -1.000000e+00 -6.238189e-04 -2.000000e+00 -6.620487e-04 -3.000000e+00 -6.632745e-04 -4.000000e+00 -6.641378e-04 -5.000000e+00 -6.648321e-04 -6.000000e+00 -6.654284e-04 -7.000000e+00 -6.659590e-04 -8.000000e+00 -6.664416e-04 -9.000000e+00 -6.668869e-04 -1.000000e+01 -6.673023e-04 -1.100000e+01 -6.676927e-04 -1.200000e+01 -6.680621e-04 -1.300000e+01 -6.684133e-04 -1.400000e+01 -6.687485e-04 -1.500000e+01 -6.690698e-04 -1.600000e+01 -6.693784e-04 -1.700000e+01 -6.696758e-04 -1.800000e+01 -6.699629e-04 -1.900000e+01 -6.702407e-04 -2.000000e+01 -6.705100e-04 -1.000000e+00 -1.801044e-03 -2.000000e+00 -3.064535e-03 -3.000000e+00 -3.803458e-03 -4.000000e+00 -4.055991e-03 -5.000000e+00 -4.070009e-03 -6.000000e+00 -4.072079e-03 -7.000000e+00 -4.073510e-03 -8.000000e+00 -4.074469e-03 -9.000000e+00 -4.075079e-03 -1.000000e+01 -4.075426e-03 -1.100000e+01 -4.075572e-03 -1.200000e+01 -4.075563e-03 -1.300000e+01 -4.075428e-03 -1.400000e+01 -4.075191e-03 -1.500000e+01 -4.074869e-03 -1.600000e+01 -4.074474e-03 -1.700000e+01 -4.074018e-03 -1.800000e+01 -4.073507e-03 -1.900000e+01 -4.072949e-03 -2.000000e+01 -4.072349e-03 -1.000000e+00 -2.444547e-03 -2.000000e+00 -4.567883e-03 -3.000000e+00 -6.356869e-03 -4.000000e+00 -7.836231e-03 -5.000000e+00 -9.038587e-03 -6.000000e+00 -9.991017e-03 -7.000000e+00 -1.071052e-02 -8.000000e+00 -1.120620e-02 -9.000000e+00 -1.149325e-02 -1.000000e+01 -1.161515e-02 -1.100000e+01 -1.164099e-02 -1.200000e+01 -1.163511e-02 -1.300000e+01 -1.162778e-02 -1.400000e+01 -1.162008e-02 -1.500000e+01 -1.161206e-02 -1.600000e+01 -1.160376e-02 -1.700000e+01 -1.159522e-02 -1.800000e+01 -1.158647e-02 -1.900000e+01 -1.157754e-02 -2.000000e+01 -1.156845e-02 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/noise2.standard0000644000175000017500000000423613546075722023715 0ustar carstencarstenFreq N(d) 1000 8.532976e-21 1258.925 6.472925e-21 1584.893 4.910215e-21 1995.262 3.724779e-21 2511.886 2.825534e-21 3162.278 2.143387e-21 3981.072 1.625925e-21 5011.872 1.23339e-21 6309.573 9.356223e-22 7943.282 7.097421e-22 10000 5.383944e-22 12589.25 4.084139e-22 15848.93 3.098136e-22 19952.62 2.350177e-22 25118.86 1.782791e-22 31622.78 1.352386e-22 39810.72 1.025889e-22 50118.72 7.782167e-23 63095.73 5.903377e-23 79432.82 4.47817e-23 100000 3.397039e-23 125892.5 2.576918e-23 158489.3 1.954792e-23 199526.2 1.482861e-23 251188.6 1.124865e-23 316227.8 8.532976e-24 398107.2 6.472925e-24 501187.2 4.910215e-24 630957.3 3.724779e-24 794328.2 2.825534e-24 1000000 2.143387e-24 1258925 1.625925e-24 1584893 1.23339e-24 1995262 9.356223e-25 2511886 7.097421e-25 3162278 5.383944e-25 3981072 4.084139e-25 5011872 3.098136e-25 6309573 2.350177e-25 7943282 1.782791e-25 10000000 1.352386e-25 12589250 1.025889e-25 15848930 7.782167e-26 19952620 5.903377e-26 25118860 4.47817e-26 31622780 3.397039e-26 39810720 2.576918e-26 50118720 1.954792e-26 63095730 1.482861e-26 79432820 1.124865e-26 100000000 8.532976e-27 1000 3.459462e-20 1258.925 2.62427e-20 1584.893 1.990713e-20 1995.262 1.51011e-20 2511.886 1.145536e-20 3162.278 8.689776e-21 3981.072 6.591869e-21 5011.872 5.000444e-21 6309.573 3.793225e-21 7943.282 2.877455e-21 10000 2.182773e-21 12589.25 1.655803e-21 15848.93 1.256055e-21 19952.62 9.52815e-22 25118.86 7.227841e-22 31622.78 5.482878e-22 39810.72 4.159188e-22 50118.72 3.155067e-22 63095.73 2.393363e-22 79432.82 1.815552e-22 100000 1.377237e-22 125892.5 1.044741e-22 158489.3 7.92517e-23 199526.2 6.011856e-23 251188.6 4.560459e-23 316227.8 3.459462e-23 398107.2 2.62427e-23 501187.2 1.990713e-23 630957.3 1.51011e-23 794328.2 1.145536e-23 1000000 8.689776e-24 1258925 6.591869e-24 1584893 5.000444e-24 1995262 3.793225e-24 2511886 2.877455e-24 3162278 2.182773e-24 3981072 1.655803e-24 5011872 1.256055e-24 6309573 9.52815e-25 7943282 7.227841e-25 10000000 5.482878e-25 12589250 4.159188e-25 15848930 3.155067e-25 19952620 2.393363e-25 25118860 1.815552e-25 31622780 1.377237e-25 39810720 1.044741e-25 50118720 7.92517e-26 63095730 6.011856e-26 79432820 4.560459e-26 100000000 3.459462e-26 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/acVg_LOVER.standard0000644000175000017500000000265313546075722024346 0ustar carstencarstenV(g) g(d,g) g(d,d) c(g,s) c(g,d) -1 2.381738e-04 5.118127e-08 1.00615527242093e-12 1.95499052932222e-13 -2 6.270266e-04 1.120769e-04 1.06469428827062e-12 7.31989098189243e-13 -3 4.692911e-04 7.351832e-04 1.01139627383995e-12 1.03494228021514e-12 -4 3.345672e-04 1.208114e-03 9.88528567648423e-13 1.10193929835487e-12 -5 2.329793e-04 1.547280e-03 9.78770765006456e-13 1.12626630494152e-12 -6 1.565682e-04 1.785343e-03 9.73411463555402e-13 1.1380873081421e-12 -7 9.935819e-05 1.947239e-03 9.6976516256815e-13 1.14508031003549e-12 -8 5.681265e-05 2.051997e-03 9.66824461771942e-13 1.14995131135434e-12 -9 2.541937e-05 2.114145e-03 9.64184161057069e-13 1.15380431239755e-12 -10 2.460788e-06 2.144733e-03 9.61682160379641e-13 1.15712931329781e-12 -1 2.054560e-04 6.400416e-08 1.00788227288852e-12 1.97585553497151e-13 -2 3.816148e-04 1.365661e-04 1.04778628369271e-12 7.54109004178304e-13 -3 3.035544e-04 5.194351e-04 9.9374896906187e-13 1.03068927906362e-12 -4 2.367489e-04 8.263559e-04 9.72305463255947e-13 1.10044229794955e-12 -5 1.831844e-04 1.066210e-03 9.62528460608781e-13 1.12908030570342e-12 -6 1.397834e-04 1.252266e-03 9.57235959175813e-13 1.14389830971546e-12 -7 1.045005e-04 1.394770e-03 9.53957658288199e-13 1.15270431209972e-12 -8 7.587163e-05 1.501897e-03 9.51647657662756e-13 1.15852331367524e-12 -9 5.274211e-05 1.580331e-03 9.49815857166788e-13 1.16273431481539e-12 -10 3.415552e-05 1.635579e-03 9.4822135673507e-13 1.16602531570644e-12 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_Id1_vb0_jd.standard0000644000175000017500000001167213546075722025341 0ustar carstencarstenV(d) I(d) -1.000000e+00 -5.353655e-04 -2.000000e+00 -5.457226e-04 -3.000000e+00 -5.459996e-04 -4.000000e+00 -5.461975e-04 -5.000000e+00 -5.463587e-04 -6.000000e+00 -5.464984e-04 -7.000000e+00 -5.466239e-04 -8.000000e+00 -5.467388e-04 -9.000000e+00 -5.468454e-04 -1.000000e+01 -5.469455e-04 -1.100000e+01 -5.470401e-04 -1.200000e+01 -5.471300e-04 -1.300000e+01 -5.472158e-04 -1.400000e+01 -5.472982e-04 -1.500000e+01 -5.473774e-04 -1.600000e+01 -5.474538e-04 -1.700000e+01 -5.475277e-04 -1.800000e+01 -5.475994e-04 -1.900000e+01 -5.476689e-04 -2.000000e+01 -5.477366e-04 -1.000000e+00 -1.766043e-03 -2.000000e+00 -3.067649e-03 -3.000000e+00 -3.808295e-03 -4.000000e+00 -3.987897e-03 -5.000000e+00 -3.989524e-03 -6.000000e+00 -3.990654e-03 -7.000000e+00 -3.991595e-03 -8.000000e+00 -3.992397e-03 -9.000000e+00 -3.993098e-03 -1.000000e+01 -3.993724e-03 -1.100000e+01 -3.994293e-03 -1.200000e+01 -3.994816e-03 -1.300000e+01 -3.995304e-03 -1.400000e+01 -3.995763e-03 -1.500000e+01 -3.996198e-03 -1.600000e+01 -3.996611e-03 -1.700000e+01 -3.997007e-03 -1.800000e+01 -3.997386e-03 -1.900000e+01 -3.997752e-03 -2.000000e+01 -3.998106e-03 -1.000000e+00 -2.216231e-03 -2.000000e+00 -4.281789e-03 -3.000000e+00 -6.168359e-03 -4.000000e+00 -7.837171e-03 -5.000000e+00 -9.237027e-03 -6.000000e+00 -1.030548e-02 -7.000000e+00 -1.099754e-02 -8.000000e+00 -1.134584e-02 -9.000000e+00 -1.146674e-02 -1.000000e+01 -1.148230e-02 -1.100000e+01 -1.148422e-02 -1.200000e+01 -1.148594e-02 -1.300000e+01 -1.148751e-02 -1.400000e+01 -1.148896e-02 -1.500000e+01 -1.149029e-02 -1.600000e+01 -1.149153e-02 -1.700000e+01 -1.149269e-02 -1.800000e+01 -1.149377e-02 -1.900000e+01 -1.149479e-02 -2.000000e+01 -1.149575e-02 -1.000000e+00 -6.962586e-04 -2.000000e+00 -7.009440e-04 -3.000000e+00 -7.013029e-04 -4.000000e+00 -7.015601e-04 -5.000000e+00 -7.017700e-04 -6.000000e+00 -7.019523e-04 -7.000000e+00 -7.021161e-04 -8.000000e+00 -7.022661e-04 -9.000000e+00 -7.024056e-04 -1.000000e+01 -7.025365e-04 -1.100000e+01 -7.026602e-04 -1.200000e+01 -7.027778e-04 -1.300000e+01 -7.028902e-04 -1.400000e+01 -7.029980e-04 -1.500000e+01 -7.031017e-04 -1.600000e+01 -7.032018e-04 -1.700000e+01 -7.032986e-04 -1.800000e+01 -7.033925e-04 -1.900000e+01 -7.034836e-04 -2.000000e+01 -7.035722e-04 -1.000000e+00 -2.345550e-03 -2.000000e+00 -4.089944e-03 -3.000000e+00 -5.079829e-03 -4.000000e+00 -5.301047e-03 -5.000000e+00 -5.302930e-03 -6.000000e+00 -5.304419e-03 -7.000000e+00 -5.305660e-03 -8.000000e+00 -5.306719e-03 -9.000000e+00 -5.307644e-03 -1.000000e+01 -5.308469e-03 -1.100000e+01 -5.309218e-03 -1.200000e+01 -5.309909e-03 -1.300000e+01 -5.310552e-03 -1.400000e+01 -5.311157e-03 -1.500000e+01 -5.311730e-03 -1.600000e+01 -5.312275e-03 -1.700000e+01 -5.312796e-03 -1.800000e+01 -5.313297e-03 -1.900000e+01 -5.313779e-03 -2.000000e+01 -5.314245e-03 -1.000000e+00 -2.649701e-03 -2.000000e+00 -5.144317e-03 -3.000000e+00 -7.444572e-03 -4.000000e+00 -9.498816e-03 -5.000000e+00 -1.124008e-02 -6.000000e+00 -1.258505e-02 -7.000000e+00 -1.346668e-02 -8.000000e+00 -1.391361e-02 -9.000000e+00 -1.406785e-02 -1.000000e+01 -1.408414e-02 -1.100000e+01 -1.408647e-02 -1.200000e+01 -1.408857e-02 -1.300000e+01 -1.409049e-02 -1.400000e+01 -1.409224e-02 -1.500000e+01 -1.409387e-02 -1.600000e+01 -1.409538e-02 -1.700000e+01 -1.409678e-02 -1.800000e+01 -1.409810e-02 -1.900000e+01 -1.409934e-02 -2.000000e+01 -1.410051e-02 -1.000000e+00 -4.013794e-04 -2.000000e+00 -4.230806e-04 -3.000000e+00 -4.232920e-04 -4.000000e+00 -4.234419e-04 -5.000000e+00 -4.235634e-04 -6.000000e+00 -4.236685e-04 -7.000000e+00 -4.237626e-04 -8.000000e+00 -4.238487e-04 -9.000000e+00 -4.239285e-04 -1.000000e+01 -4.240033e-04 -1.100000e+01 -4.240740e-04 -1.200000e+01 -4.241411e-04 -1.300000e+01 -4.242052e-04 -1.400000e+01 -4.242666e-04 -1.500000e+01 -4.243257e-04 -1.600000e+01 -4.243827e-04 -1.700000e+01 -4.244378e-04 -1.800000e+01 -4.244912e-04 -1.900000e+01 -4.245430e-04 -2.000000e+01 -4.245934e-04 -1.000000e+00 -1.222122e-03 -2.000000e+00 -2.119443e-03 -3.000000e+00 -2.640888e-03 -4.000000e+00 -2.789490e-03 -5.000000e+00 -2.793036e-03 -6.000000e+00 -2.793830e-03 -7.000000e+00 -2.794489e-03 -8.000000e+00 -2.795050e-03 -9.000000e+00 -2.795541e-03 -1.000000e+01 -2.795978e-03 -1.100000e+01 -2.796376e-03 -1.200000e+01 -2.796742e-03 -1.300000e+01 -2.797083e-03 -1.400000e+01 -2.797404e-03 -1.500000e+01 -2.797707e-03 -1.600000e+01 -2.797996e-03 -1.700000e+01 -2.798272e-03 -1.800000e+01 -2.798538e-03 -1.900000e+01 -2.798793e-03 -2.000000e+01 -2.799040e-03 -1.000000e+00 -1.701069e-03 -2.000000e+00 -3.266999e-03 -3.000000e+00 -4.681032e-03 -4.000000e+00 -5.918405e-03 -5.000000e+00 -6.945512e-03 -6.000000e+00 -7.722251e-03 -7.000000e+00 -8.223535e-03 -8.000000e+00 -8.478687e-03 -9.000000e+00 -8.571982e-03 -1.000000e+01 -8.589581e-03 -1.100000e+01 -8.591100e-03 -1.200000e+01 -8.592398e-03 -1.300000e+01 -8.593581e-03 -1.400000e+01 -8.594668e-03 -1.500000e+01 -8.595671e-03 -1.600000e+01 -8.596602e-03 -1.700000e+01 -8.597471e-03 -1.800000e+01 -8.598286e-03 -1.900000e+01 -8.599054e-03 -2.000000e+01 -8.599781e-03 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_NF_RTH0W.standard0000644000175000017500000000044213546075722024720 0ustar carstencarstenV(d) I(d) -1.000000e+00 -2.189366e-03 -3.000000e+00 -5.600533e-03 -5.000000e+00 -7.442222e-03 -7.000000e+00 -7.971038e-03 -9.000000e+00 -7.737698e-03 -1.100000e+01 -7.344006e-03 -1.300000e+01 -6.998707e-03 -1.500000e+01 -6.700485e-03 -1.700000e+01 -6.439322e-03 -1.900000e+01 -6.207988e-03 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/acVd_rdrbb.standard0000644000175000017500000000551213546075722024544 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -1 2.497503e-06 2.150798e-03 5.50787049127997e-13 6.88098386305641e-13 -2 3.818173e-05 1.991413e-03 5.76440256073715e-13 6.60975678962049e-13 -3 1.143636e-04 1.795325e-03 6.04493063669135e-13 6.27487269894916e-13 -4 2.402436e-04 1.551296e-03 6.35680972113397e-13 5.83500257985241e-13 -5 4.284208e-04 1.245270e-03 6.70840781633069e-13 5.21705841254133e-13 -6 6.869752e-04 8.752021e-04 7.06894391394741e-13 4.37949718576797e-13 -7 9.858179e-04 4.935903e-04 7.33448398584354e-13 3.49421194607313e-13 -8 1.242294e-03 2.022921e-04 7.44166601486355e-13 2.87416277819211e-13 -9 1.398350e-03 4.672837e-05 7.45051901726054e-13 2.47934467129339e-13 -10 1.449156e-03 2.027942e-06 7.3469319892139e-13 8.84399639455062e-14 -11 1.449476e-03 1.801207e-06 7.32713498385377e-13 4.38250618658267e-14 -12 1.449735e-03 1.636822e-06 7.32269398265135e-13 3.38152991556398e-14 -13 1.449970e-03 1.499797e-06 7.32048198205244e-13 2.88268578049975e-14 -14 1.450188e-03 1.381836e-06 7.31909798167772e-13 2.57062169600704e-14 -15 1.450390e-03 1.279641e-06 7.31812798141509e-13 2.35191363679088e-14 -16 1.450578e-03 1.191045e-06 7.31739998121798e-13 2.18771059233219e-14 -17 1.450752e-03 1.114195e-06 7.31682698106283e-13 2.05858355737048e-14 -18 1.450912e-03 1.047412e-06 7.31636098093666e-13 1.95359452894424e-14 -19 1.451061e-03 9.891999e-07 7.31597298083161e-13 1.86605150524159e-14 -20 1.451199e-03 9.382528e-07 7.31564298074226e-13 1.79160448508473e-14 -1 3.427139e-05 1.638492e-03 5.43214647077736e-13 6.92759387567627e-13 -2 9.208022e-05 1.498025e-03 5.6926805413181e-13 6.6515748009429e-13 -3 1.771071e-04 1.335104e-03 5.97898461883617e-13 6.30962370835815e-13 -4 2.944439e-04 1.141621e-03 6.29914970552227e-13 5.85919158640169e-13 -5 4.511833e-04 9.084263e-04 6.66262680393528e-13 5.22712341526647e-13 -6 6.503526e-04 6.361251e-04 7.03858190572677e-13 4.37592818480165e-13 -7 8.694209e-04 3.620691e-04 7.32108698221625e-13 3.47931094203862e-13 -8 1.053631e-03 1.539378e-04 7.44241901506742e-13 2.83522776765029e-13 -9 1.165365e-03 4.164848e-05 7.45980301977422e-13 2.37757264373817e-13 -10 1.210183e-03 2.039957e-06 7.37862599779519e-13 8.26792723857738e-14 -11 1.211066e-03 1.359535e-06 7.36383899379154e-13 4.31005216696543e-14 -12 1.211282e-03 1.233719e-06 7.36061999291998e-13 3.35054290717411e-14 -13 1.211477e-03 1.129802e-06 7.35898999247865e-13 2.86461277560641e-14 -14 1.211657e-03 1.040708e-06 7.35796399220086e-13 2.55845569271304e-14 -15 1.211825e-03 9.637025e-07 7.3572409920051e-13 2.34301563438171e-14 -16 1.211980e-03 8.970324e-07 7.35669799185808e-13 2.18084159047238e-14 -17 1.212123e-03 8.392416e-07 7.35626899174193e-13 2.0530745558789e-14 -18 1.212256e-03 7.890383e-07 7.35592099164771e-13 1.94904852771339e-14 -19 1.212379e-03 7.452823e-07 7.35562899156865e-13 1.86221850420379e-14 -20 1.212493e-03 7.069852e-07 7.35538199150177e-13 1.78831448419395e-14 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/noise1.standard0000644000175000017500000000413513546075722023712 0ustar carstencarstenFreq N(d) 1000 2.66982e-23 1258.925 2.66982e-23 1584.893 2.66982e-23 1995.262 2.66982e-23 2511.886 2.66982e-23 3162.278 2.66982e-23 3981.072 2.66982e-23 5011.872 2.66982e-23 6309.573 2.66982e-23 7943.282 2.66982e-23 10000 2.66982e-23 12589.25 2.66982e-23 15848.93 2.66982e-23 19952.62 2.66982e-23 25118.86 2.66982e-23 31622.78 2.66982e-23 39810.72 2.66982e-23 50118.72 2.66982e-23 63095.73 2.66982e-23 79432.82 2.66982e-23 100000 2.66982e-23 125892.5 2.66982e-23 158489.3 2.66982e-23 199526.2 2.66982e-23 251188.6 2.66982e-23 316227.8 2.66982e-23 398107.2 2.66982e-23 501187.2 2.66982e-23 630957.3 2.66982e-23 794328.2 2.66982e-23 1000000 2.66982e-23 1258925 2.66982e-23 1584893 2.66982e-23 1995262 2.66982e-23 2511886 2.66982e-23 3162278 2.66982e-23 3981072 2.66982e-23 5011872 2.66982e-23 6309573 2.669821e-23 7943282 2.669822e-23 10000000 2.669823e-23 12589250 2.669825e-23 15848930 2.669827e-23 19952620 2.669832e-23 25118860 2.669839e-23 31622780 2.66985e-23 39810720 2.669868e-23 50118720 2.669896e-23 63095730 2.669941e-23 79432820 2.670013e-23 100000000 2.670126e-23 1000 3.47379e-23 1258.925 3.47379e-23 1584.893 3.47379e-23 1995.262 3.47379e-23 2511.886 3.47379e-23 3162.278 3.47379e-23 3981.072 3.47379e-23 5011.872 3.47379e-23 6309.573 3.47379e-23 7943.282 3.47379e-23 10000 3.47379e-23 12589.25 3.47379e-23 15848.93 3.47379e-23 19952.62 3.47379e-23 25118.86 3.47379e-23 31622.78 3.47379e-23 39810.72 3.47379e-23 50118.72 3.47379e-23 63095.73 3.47379e-23 79432.82 3.47379e-23 100000 3.47379e-23 125892.5 3.47379e-23 158489.3 3.47379e-23 199526.2 3.47379e-23 251188.6 3.47379e-23 316227.8 3.47379e-23 398107.2 3.47379e-23 501187.2 3.47379e-23 630957.3 3.47379e-23 794328.2 3.47379e-23 1000000 3.47379e-23 1258925 3.47379e-23 1584893 3.47379e-23 1995262 3.47379e-23 2511886 3.47379e-23 3162278 3.47379e-23 3981072 3.47379e-23 5011872 3.473791e-23 6309573 3.473791e-23 7943282 3.473792e-23 10000000 3.473793e-23 12589250 3.473794e-23 15848930 3.473797e-23 19952620 3.473801e-23 25118860 3.473807e-23 31622780 3.473818e-23 39810720 3.473834e-23 50118720 3.47386e-23 63095730 3.473901e-23 79432820 3.473966e-23 100000000 3.474069e-23 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_COTEMP1.standard0000644000175000017500000000044213546075722024541 0ustar carstencarstenV(d) I(d) -1.000000e+00 -2.216231e-03 -3.000000e+00 -6.168359e-03 -5.000000e+00 -9.237027e-03 -7.000000e+00 -1.099754e-02 -9.000000e+00 -1.146674e-02 -1.100000e+01 -1.148422e-02 -1.300000e+01 -1.148751e-02 -1.500000e+01 -1.149029e-02 -1.700000e+01 -1.149269e-02 -1.900000e+01 -1.149479e-02 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/acVd_corsrd2.standard0000644000175000017500000000553513546075722025034 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -1 -4.980383e-05 1.903795e-03 5.10985938351673e-13 7.30492797784113e-13 -2 -9.551997e-05 1.889314e-03 5.23520841745552e-13 7.18035294411189e-13 -3 -1.362369e-04 1.870947e-03 5.36781445335919e-13 7.04564890764019e-13 -4 -1.706036e-04 1.845005e-03 5.507209491101e-13 6.89862986783414e-13 -5 -1.969342e-04 1.808698e-03 5.65362553074378e-13 6.73639282390775e-13 -6 -2.131850e-04 1.759353e-03 5.8079935725396e-13 6.55480677474254e-13 -7 -2.168720e-04 1.694044e-03 5.97195161693196e-13 6.34797371874158e-13 -8 -2.049806e-04 1.609452e-03 6.14759166448727e-13 6.10793365374969e-13 -9 -1.739797e-04 1.502031e-03 6.33666671568016e-13 5.82517357719117e-13 -10 -1.201637e-04 1.368736e-03 6.53899677046191e-13 5.49081648666252e-13 -11 -4.064750e-05 1.208602e-03 6.7502018276466e-13 5.10136738121748e-13 -12 6.478759e-05 1.025064e-03 6.95983988440702e-13 4.66552626321159e-13 -13 1.915203e-04 8.279048e-04 7.15214993647581e-13 4.20924413967122e-13 -14 3.292535e-04 6.326653e-04 7.31104297949679e-13 3.77230402136777e-13 -15 4.642474e-04 4.562632e-04 7.42729201097172e-13 3.3937259188661e-13 -16 5.839879e-04 3.109996e-04 7.50223803126368e-13 3.09446883784094e-13 -17 6.810896e-04 2.011879e-04 7.54503104285008e-13 2.8696737769767e-13 -18 7.540813e-04 1.240908e-04 7.56671704872166e-13 2.68696972750878e-13 -19 8.056938e-04 7.317281e-05 7.57605705125051e-13 2.41052065265899e-13 -20 8.406738e-04 4.101768e-05 7.57819505182938e-13 8.03687317601848e-14 -1 -2.925274e-05 1.648285e-03 5.10512638223524e-13 7.29673397562256e-13 -2 -5.402909e-05 1.624584e-03 5.23131741640202e-13 7.17192094182889e-13 -3 -7.365975e-05 1.597723e-03 5.36495045258375e-13 7.03716890534419e-13 -4 -8.718059e-05 1.564740e-03 5.50550049063828e-13 6.89026586556955e-13 -5 -9.341818e-05 1.523525e-03 5.65317653062221e-13 6.72831582172087e-13 -6 -9.097426e-05 1.472122e-03 5.80890357278599e-13 6.54722277268913e-13 -7 -7.816777e-05 1.408435e-03 5.97431561757202e-13 6.34116071689693e-13 -8 -5.297721e-05 1.330110e-03 6.15151066554835e-13 6.10228065221911e-13 -9 -1.306677e-05 1.234684e-03 6.34227071719747e-13 5.82120657611708e-13 -10 4.394481e-05 1.120132e-03 6.54650077249365e-13 5.48914548621009e-13 -11 1.197508e-04 9.860324e-04 6.75999683029864e-13 5.10247938151856e-13 -12 2.140395e-04 8.352303e-04 6.97257588785535e-13 4.66934926424669e-13 -13 3.229770e-04 6.752204e-04 7.16868894095381e-13 4.21461914112652e-13 -14 4.386569e-04 5.177036e-04 7.33218198522027e-13 3.77675602257317e-13 -15 5.507238e-04 3.754273e-04 7.45336001802975e-13 3.39381791889101e-13 -16 6.497523e-04 2.577969e-04 7.53288703956204e-13 3.08629583562806e-13 -17 7.301391e-04 1.682780e-04 7.57939505215429e-13 2.84827877118391e-13 -18 7.907713e-04 1.049272e-04 7.60378005875663e-13 2.64222571539414e-13 -19 8.338085e-04 6.275200e-05 7.61495306178177e-13 2.30544362420892e-13 -20 8.629659e-04 3.599926e-05 7.61850006274214e-13 8.14669820575409e-14 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/acVd_cosym.standard0000644000175000017500000000550113546075722024601 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -1 4.450632e-05 3.181386e-04 3.00684981411771e-12 2.12437257518314e-12 -2 1.106412e-04 2.256178e-04 3.27937588790533e-12 1.73068846859145e-12 -3 2.063378e-04 1.076780e-04 3.55414496230026e-12 9.57663259291506e-13 -4 3.001422e-04 6.775617e-06 3.60545897619375e-12 3.2579718821101e-13 -5 3.072800e-04 6.516258e-08 3.56800396605264e-12 8.86659340066885e-14 -6 3.073081e-04 5.248233e-08 3.56262396459598e-12 4.36645518223679e-14 -7 3.073310e-04 4.363097e-08 3.56149396429003e-12 3.36696891162152e-14 -8 3.073499e-04 3.725052e-08 3.56096196414599e-12 2.86971577698807e-14 -9 3.073657e-04 3.259640e-08 3.5606469640607e-12 2.5588776928273e-14 -10 3.073791e-04 2.912930e-08 3.56043996400466e-12 2.34112063386863e-14 -11 3.073907e-04 2.647923e-08 3.56029396396513e-12 2.17767758961571e-14 -12 3.074009e-04 2.439995e-08 3.56018696393616e-12 2.04917155482214e-14 -13 3.074100e-04 2.272804e-08 3.56010496391395e-12 1.9447025265367e-14 -14 3.074182e-04 2.135385e-08 3.56004296389717e-12 1.85760350295425e-14 -15 3.074257e-04 2.020240e-08 3.5599939638839e-12 1.7835394829011e-14 -16 3.074327e-04 1.922133e-08 3.55995596387361e-12 1.71955446557688e-14 -17 3.074392e-04 1.837332e-08 3.55992496386522e-12 1.66355045041354e-14 -18 3.074453e-04 1.763116e-08 3.55990096385872e-12 1.61399543699631e-14 -19 3.074511e-04 1.697464e-08 3.55988296385385e-12 1.56974042501407e-14 -20 3.074566e-04 1.638846e-08 3.55986796384979e-12 1.52990341422803e-14 -1 3.615594e-05 2.206664e-04 2.93723879527022e-12 2.16208058539275e-12 -2 8.453247e-05 1.542483e-04 3.21831087137171e-12 1.75323347469561e-12 -3 1.485346e-04 7.432901e-05 3.52080895327439e-12 9.73987463711356e-13 -4 2.080388e-04 8.302170e-06 3.60828697695944e-12 3.37825991467861e-13 -5 2.165992e-04 4.302026e-08 3.57718196853763e-12 8.12541719999216e-14 -6 2.166172e-04 3.463434e-08 3.5740369676861e-12 4.28609916048005e-14 -7 2.166318e-04 2.889837e-08 3.57329896748629e-12 3.3349479029517e-14 -8 2.166440e-04 2.476762e-08 3.57294496739044e-12 2.85240077229996e-14 -9 2.166542e-04 2.174991e-08 3.57273496733358e-12 2.54813868991967e-14 -10 2.166629e-04 1.949675e-08 3.57259496729568e-12 2.33393863192407e-14 -11 2.166705e-04 1.777015e-08 3.57249596726887e-12 2.17265058825463e-14 -12 2.166772e-04 1.641188e-08 3.57242396724938e-12 2.04555555384309e-14 -13 2.166832e-04 1.531687e-08 3.57236896723449e-12 1.9420625258219e-14 -14 2.166887e-04 1.441457e-08 3.57232596722284e-12 1.8556665024298e-14 -15 2.166937e-04 1.365666e-08 3.57229296721391e-12 1.78212548251825e-14 -16 2.166984e-04 1.300942e-08 3.57226696720687e-12 1.71853946530206e-14 -17 2.167028e-04 1.244875e-08 3.57224696720145e-12 1.6628474502232e-14 -18 2.167069e-04 1.195706e-08 3.57223096719712e-12 1.61353943687284e-14 -19 2.167108e-04 1.152129e-08 3.5722179671936e-12 1.56948342494449e-14 -20 2.167145e-04 1.113151e-08 3.5722079671909e-12 1.5298084142023e-14 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/acFreq_cosym.standard0000644000175000017500000000711613546075722025131 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.19901838390982e-12 1.99297161993476e-12 2.80219492808551e-13 1258.925 2.19902024268229e-12 1.99297247653393e-12 2.80219652266905e-13 1584.893 2.19901908703856e-12 1.9929713213329e-12 2.80219578848099e-13 1995.262 2.19901951562967e-12 1.99297163835921e-12 2.80219577297002e-13 2511.886 2.1990192101186e-12 1.99297136724835e-12 2.80219566591746e-13 3162.278 2.19901892940192e-12 1.99297115718891e-12 2.80219484326167e-13 3981.072 2.19901898947603e-12 1.99297123578222e-12 2.80219492036497e-13 5011.872 2.19901922465553e-12 1.99297150316565e-12 2.80219534531837e-13 6309.573 2.19901912527093e-12 1.99297141520553e-12 2.80219437227101e-13 7943.282 2.19901925611767e-12 1.99297131351337e-12 2.80219567700244e-13 10000 2.19901838390982e-12 1.99297161993476e-12 2.8021949280855e-13 12589.25 2.19902024268229e-12 1.99297247653393e-12 2.80219652266905e-13 15848.93 2.19901908703856e-12 1.9929713213329e-12 2.80219578848099e-13 19952.62 2.19901951562967e-12 1.99297163835921e-12 2.80219577297002e-13 25118.86 2.1990192101186e-12 1.99297136724835e-12 2.80219566591746e-13 31622.78 2.19901892940192e-12 1.99297115718891e-12 2.80219484326167e-13 39810.72 2.19901898947603e-12 1.99297123578222e-12 2.80219492036497e-13 50118.72 2.19901922465553e-12 1.99297150316565e-12 2.80219534531837e-13 63095.73 2.19901912527093e-12 1.99297141520553e-12 2.80219437227101e-13 79432.82 2.19901925611767e-12 1.99297131351337e-12 2.80219567700244e-13 100000 2.19901838390982e-12 1.99297161993476e-12 2.8021949280855e-13 125892.5 2.19902024268229e-12 1.99297247653393e-12 2.80219652266905e-13 158489.3 2.19901908703856e-12 1.9929713213329e-12 2.80219578848099e-13 199526.2 2.19901951562967e-12 1.99297163835921e-12 2.80219577297002e-13 251188.6 2.1990192101186e-12 1.99297136724835e-12 2.80219566591746e-13 316227.8 2.19901892940192e-12 1.99297115718891e-12 2.80219484326167e-13 398107.2 2.19901898947603e-12 1.99297123578222e-12 2.80219492036497e-13 501187.2 2.19901922465553e-12 1.99297150316565e-12 2.80219534531837e-13 630957.3 2.19901912527093e-12 1.99297141520553e-12 2.80219437227101e-13 794328.2 2.19901925611767e-12 1.99297111314916e-12 2.80219567700244e-13 1000000 2.19901838390982e-12 1.99297161993476e-12 2.8021949280855e-13 1258925 2.19901897846923e-12 1.99297121232087e-12 2.80219399424292e-13 1584893 2.19901808283864e-12 1.99297031713298e-12 2.80219277588121e-13 1995262 2.1990179203009e-12 1.99297004303045e-12 2.80219178464811e-13 2511886 2.19901730929655e-12 1.9929694664263e-12 2.80218932984397e-13 3162278 2.19901490306539e-12 1.99296763414444e-12 2.80218477742033e-13 3981072 2.19901299278935e-12 1.99296563887464e-12 2.80217852942136e-13 5011872 2.19901001553497e-12 1.99296292915685e-12 2.80216930573608e-13 6309573 2.19900449514192e-12 1.99295779405093e-12 2.80215401329443e-13 7943282 2.19899521241235e-12 1.99294987454279e-12 2.8021295568128e-13 10000000 2.19898177827291e-12 1.99293660584728e-12 2.80209147737249e-13 12589250 2.19896208888137e-12 1.9929181153722e-12 2.80203091075773e-13 15848930 2.19892670064551e-12 1.99288596433932e-12 2.8019336923007e-13 19952620 2.19887354304769e-12 1.99283523774983e-12 2.80178098749118e-13 25118860 2.198787943436e-12 1.99275594074949e-12 2.80153861509594e-13 31622780 2.19865202948511e-12 1.99262891858338e-12 2.80115353197513e-13 39810720 2.19843771064647e-12 1.99242913530568e-12 2.80054463218861e-13 50118720 2.19809831259919e-12 1.9921125145062e-12 2.79958059019011e-13 63095730 2.19756065275471e-12 1.99161106545113e-12 2.79805253229932e-13 79432820 2.1967090567645e-12 1.99081719788058e-12 2.79563575273332e-13 100000000 2.19536418641643e-12 1.98956252105373e-12 2.79181484269705e-13 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/acVd_cvdsover.standard0000644000175000017500000000551313546075722025305 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -1 2.460788e-06 2.144733e-03 5.50717649109207e-13 6.88164986323673e-13 -2 3.765616e-05 1.981657e-03 5.77986556492382e-13 6.59645478601892e-13 -3 1.123391e-04 1.785065e-03 6.07190864399576e-13 6.25472769349482e-13 -4 2.352359e-04 1.544071e-03 6.39001973012572e-13 5.81673457490627e-13 -5 4.187927e-04 1.244826e-03 6.74090182512858e-13 5.2120774111927e-13 -6 6.723607e-04 8.833017e-04 7.09497092099434e-13 4.39513119000095e-13 -7 9.699029e-04 5.059907e-04 7.35467499131035e-13 3.51857195266871e-13 -8 1.230887e-03 2.117441e-04 7.45903701956682e-13 2.88896378219955e-13 -9 1.392875e-03 5.118161e-05 7.46636902155199e-13 2.48200567201387e-13 -10 1.449112e-03 2.042876e-06 7.35487999136585e-13 9.01757944154898e-14 -11 1.449441e-03 1.809495e-06 7.32952198450006e-13 4.3790621856502e-14 -12 1.449704e-03 1.643475e-06 7.32436898310486e-13 3.37848491473953e-14 -13 1.449941e-03 1.505476e-06 7.32184198242067e-13 2.88053277991682e-14 -14 1.450161e-03 1.386751e-06 7.32027098199531e-13 2.56903369557708e-14 -15 1.450366e-03 1.283902e-06 7.31917498169856e-13 2.35068863645921e-14 -16 1.450555e-03 1.194741e-06 7.31835498147655e-13 2.18673159206712e-14 -17 1.450731e-03 1.117403e-06 7.31770998130191e-13 2.05777855715252e-14 -18 1.450893e-03 1.050204e-06 7.31718698116031e-13 1.95291752876094e-14 -19 1.451043e-03 9.916385e-07 7.31675098104226e-13 1.86547250508482e-14 -20 1.451182e-03 9.403920e-07 7.31638098094208e-13 1.79110248494881e-14 -1 3.415552e-05 1.635579e-03 5.42933747001681e-13 6.93020587638348e-13 -2 9.149376e-05 1.493452e-03 5.70067354348224e-13 6.64497079915484e-13 -3 1.755353e-04 1.330511e-03 5.99445762302556e-13 6.29882770543509e-13 -4 2.912939e-04 1.138639e-03 6.31837571072779e-13 5.84991958389125e-13 -5 4.459556e-04 9.085684e-04 6.68099680890904e-13 5.22620641501819e-13 -6 6.432207e-04 6.398814e-04 7.05245190948213e-13 4.38705118781325e-13 -7 8.621435e-04 3.674797e-04 7.33098898489726e-13 3.49467094619741e-13 -8 1.048538e-03 1.580313e-04 7.4504380172386e-13 2.84396777001668e-13 -9 1.162955e-03 4.356922e-05 7.46670902164405e-13 2.37560864320641e-13 -10 1.209992e-03 2.181629e-06 7.38192599868868e-13 8.27060923930354e-14 -11 1.211048e-03 1.363443e-06 7.36479399405011e-13 4.29910616400175e-14 -12 1.211266e-03 1.236791e-06 7.36129499310274e-13 3.34502990568144e-14 -13 1.211463e-03 1.132411e-06 7.35953999262757e-13 2.86119077467989e-14 -14 1.211644e-03 1.042959e-06 7.35843899232947e-13 2.55607469206838e-14 -15 1.211812e-03 9.656511e-07 7.35766599212017e-13 2.34123863390058e-14 -16 1.211968e-03 8.987207e-07 7.35708499196287e-13 2.17945059009576e-14 -17 1.212112e-03 8.407066e-07 7.35662699183886e-13 2.05194755557375e-14 -18 1.212246e-03 7.903130e-07 7.35625499173814e-13 1.9481115274597e-14 -19 1.212370e-03 7.463956e-07 7.35594499165421e-13 1.86142350398854e-14 -20 1.212485e-03 7.079620e-07 7.35568099158273e-13 1.78762948400848e-14 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/dcSw_Id1_vb1.standard0000644000175000017500000001167213546075722024665 0ustar carstencarstenV(d) I(d) -1.000000e+00 -4.363977e-04 -2.000000e+00 -4.393442e-04 -3.000000e+00 -4.395753e-04 -4.000000e+00 -4.397430e-04 -5.000000e+00 -4.398810e-04 -6.000000e+00 -4.400014e-04 -7.000000e+00 -4.401098e-04 -8.000000e+00 -4.402092e-04 -9.000000e+00 -4.403017e-04 -1.000000e+01 -4.403885e-04 -1.100000e+01 -4.404706e-04 -1.200000e+01 -4.405488e-04 -1.300000e+01 -4.406234e-04 -1.400000e+01 -4.406950e-04 -1.500000e+01 -4.407639e-04 -1.600000e+01 -4.408304e-04 -1.700000e+01 -4.408947e-04 -1.800000e+01 -4.409571e-04 -1.900000e+01 -4.410176e-04 -2.000000e+01 -4.410765e-04 -1.000000e+00 -1.681093e-03 -2.000000e+00 -2.915778e-03 -3.000000e+00 -3.602248e-03 -4.000000e+00 -3.751378e-03 -5.000000e+00 -3.752798e-03 -6.000000e+00 -3.753901e-03 -7.000000e+00 -3.754820e-03 -8.000000e+00 -3.755603e-03 -9.000000e+00 -3.756288e-03 -1.000000e+01 -3.756901e-03 -1.100000e+01 -3.757458e-03 -1.200000e+01 -3.757971e-03 -1.300000e+01 -3.758450e-03 -1.400000e+01 -3.758901e-03 -1.500000e+01 -3.759328e-03 -1.600000e+01 -3.759735e-03 -1.700000e+01 -3.760124e-03 -1.800000e+01 -3.760498e-03 -1.900000e+01 -3.760858e-03 -2.000000e+01 -3.761206e-03 -1.000000e+00 -2.157564e-03 -2.000000e+00 -4.175343e-03 -3.000000e+00 -6.020786e-03 -4.000000e+00 -7.653407e-03 -5.000000e+00 -9.021171e-03 -6.000000e+00 -1.006148e-02 -7.000000e+00 -1.073030e-02 -8.000000e+00 -1.106208e-02 -9.000000e+00 -1.117377e-02 -1.000000e+01 -1.118637e-02 -1.100000e+01 -1.118828e-02 -1.200000e+01 -1.119000e-02 -1.300000e+01 -1.119157e-02 -1.400000e+01 -1.119301e-02 -1.500000e+01 -1.119435e-02 -1.600000e+01 -1.119558e-02 -1.700000e+01 -1.119674e-02 -1.800000e+01 -1.119782e-02 -1.900000e+01 -1.119884e-02 -2.000000e+01 -1.119980e-02 -1.000000e+00 -5.545527e-04 -2.000000e+00 -5.553220e-04 -3.000000e+00 -5.556165e-04 -4.000000e+00 -5.558308e-04 -5.000000e+00 -5.560075e-04 -6.000000e+00 -5.561619e-04 -7.000000e+00 -5.563011e-04 -8.000000e+00 -5.564289e-04 -9.000000e+00 -5.565478e-04 -1.000000e+01 -5.566595e-04 -1.100000e+01 -5.567652e-04 -1.200000e+01 -5.568658e-04 -1.300000e+01 -5.569619e-04 -1.400000e+01 -5.570541e-04 -1.500000e+01 -5.571428e-04 -1.600000e+01 -5.572285e-04 -1.700000e+01 -5.573113e-04 -1.800000e+01 -5.573917e-04 -1.900000e+01 -5.574697e-04 -2.000000e+01 -5.575456e-04 -1.000000e+00 -2.226603e-03 -2.000000e+00 -3.876771e-03 -3.000000e+00 -4.790006e-03 -4.000000e+00 -4.970198e-03 -5.000000e+00 -4.972015e-03 -6.000000e+00 -4.973465e-03 -7.000000e+00 -4.974673e-03 -8.000000e+00 -4.975703e-03 -9.000000e+00 -4.976604e-03 -1.000000e+01 -4.977410e-03 -1.100000e+01 -4.978142e-03 -1.200000e+01 -4.978817e-03 -1.300000e+01 -4.979447e-03 -1.400000e+01 -4.980040e-03 -1.500000e+01 -4.980601e-03 -1.600000e+01 -4.981135e-03 -1.700000e+01 -4.981647e-03 -1.800000e+01 -4.982138e-03 -1.900000e+01 -4.982612e-03 -2.000000e+01 -4.983070e-03 -1.000000e+00 -2.575574e-03 -2.000000e+00 -5.009076e-03 -3.000000e+00 -7.256365e-03 -4.000000e+00 -9.263765e-03 -5.000000e+00 -1.096321e-02 -6.000000e+00 -1.227104e-02 -7.000000e+00 -1.312144e-02 -8.000000e+00 -1.354584e-02 -9.000000e+00 -1.368738e-02 -1.000000e+01 -1.369981e-02 -1.100000e+01 -1.370214e-02 -1.200000e+01 -1.370423e-02 -1.300000e+01 -1.370614e-02 -1.400000e+01 -1.370789e-02 -1.500000e+01 -1.370951e-02 -1.600000e+01 -1.371101e-02 -1.700000e+01 -1.371242e-02 -1.800000e+01 -1.371373e-02 -1.900000e+01 -1.371497e-02 -2.000000e+01 -1.371614e-02 -1.000000e+00 -3.367954e-04 -2.000000e+00 -3.476406e-04 -3.000000e+00 -3.478210e-04 -4.000000e+00 -3.479509e-04 -5.000000e+00 -3.480573e-04 -6.000000e+00 -3.481499e-04 -7.000000e+00 -3.482330e-04 -8.000000e+00 -3.483092e-04 -9.000000e+00 -3.483800e-04 -1.000000e+01 -3.484464e-04 -1.100000e+01 -3.485091e-04 -1.200000e+01 -3.485687e-04 -1.300000e+01 -3.486257e-04 -1.400000e+01 -3.486803e-04 -1.500000e+01 -3.487329e-04 -1.600000e+01 -3.487836e-04 -1.700000e+01 -3.488326e-04 -1.800000e+01 -3.488802e-04 -1.900000e+01 -3.489263e-04 -2.000000e+01 -3.489712e-04 -1.000000e+00 -1.166260e-03 -2.000000e+00 -2.020125e-03 -3.000000e+00 -2.506555e-03 -4.000000e+00 -2.634131e-03 -5.000000e+00 -2.636296e-03 -6.000000e+00 -2.637074e-03 -7.000000e+00 -2.637719e-03 -8.000000e+00 -2.638269e-03 -9.000000e+00 -2.638750e-03 -1.000000e+01 -2.639180e-03 -1.100000e+01 -2.639571e-03 -1.200000e+01 -2.639931e-03 -1.300000e+01 -2.640267e-03 -1.400000e+01 -2.640583e-03 -1.500000e+01 -2.640883e-03 -1.600000e+01 -2.641168e-03 -1.700000e+01 -2.641441e-03 -1.800000e+01 -2.641703e-03 -1.900000e+01 -2.641955e-03 -2.000000e+01 -2.642199e-03 -1.000000e+00 -1.658868e-03 -2.000000e+00 -3.191067e-03 -3.000000e+00 -4.576363e-03 -4.000000e+00 -5.788632e-03 -5.000000e+00 -6.793651e-03 -6.000000e+00 -7.551237e-03 -7.000000e+00 -8.036888e-03 -8.000000e+00 -8.280986e-03 -9.000000e+00 -8.368095e-03 -1.000000e+01 -8.383294e-03 -1.100000e+01 -8.384779e-03 -1.200000e+01 -8.386077e-03 -1.300000e+01 -8.387261e-03 -1.400000e+01 -8.388348e-03 -1.500000e+01 -8.389351e-03 -1.600000e+01 -8.390283e-03 -1.700000e+01 -8.391152e-03 -1.800000e+01 -8.391968e-03 -1.900000e+01 -8.392736e-03 -2.000000e+01 -8.393464e-03 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/acVd.standard0000644000175000017500000000550013546075722023366 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -1 2.329793e-04 1.547280e-03 5.73433955259746e-13 6.54014977077409e-13 -2 5.745796e-04 1.039564e-03 6.36469772326968e-13 5.57181150859228e-13 -3 1.040447e-03 4.313144e-04 7.03882090579148e-13 3.70956000437956e-13 -4 1.418330e-03 6.180367e-06 7.1530289367138e-13 2.3006266229047e-13 -5 1.423577e-03 1.247758e-06 7.08393691800683e-13 7.30228997712688e-14 -6 1.424037e-03 1.025338e-06 7.07133991459614e-13 4.17730413102332e-14 -7 1.424425e-03 8.643455e-07 7.06777191363009e-13 3.29186689128733e-14 -8 1.424754e-03 7.465810e-07 7.06590991312594e-13 2.82992376621421e-14 -9 1.425034e-03 6.598200e-07 7.06472091280402e-13 2.53493368634436e-14 -10 1.425274e-03 5.946283e-07 7.06387791257577e-13 2.32573362970253e-14 -11 1.425484e-03 5.443940e-07 7.06323991240303e-13 2.1674575868486e-14 -12 1.425670e-03 5.046716e-07 7.06273591226657e-13 2.04231455296558e-14 -13 1.425838e-03 4.724927e-07 7.06232391215502e-13 1.94015552530557e-14 -14 1.425992e-03 4.458552e-07 7.06197991206188e-13 1.85470850217042e-14 -15 1.426134e-03 4.233850e-07 7.06168691198255e-13 1.78186348244731e-14 -16 1.426266e-03 4.041192e-07 7.0614319119135e-13 1.71879946537246e-14 -17 1.426390e-03 3.873684e-07 7.0612099118534e-13 1.66350645040163e-14 -18 1.426508e-03 3.726287e-07 7.06101191179979e-13 1.61450943713548e-14 -19 1.426620e-03 3.595241e-07 7.06083591175213e-13 1.57069842527345e-14 -20 1.426727e-03 3.477691e-07 7.06067591170881e-13 1.5312174145838e-14 -1 1.831844e-04 1.066210e-03 5.62979652429198e-13 6.56763877821686e-13 -2 4.253717e-04 7.195552e-04 6.261686695379e-13 5.59736051550978e-13 -3 7.336716e-04 3.178028e-04 6.9707138873512e-13 3.76845802032645e-13 -4 9.901069e-04 2.365977e-05 7.16644394034597e-13 2.3311746311757e-13 -5 1.013174e-03 8.799743e-07 7.1022039229527e-13 7.19745194874152e-14 -6 1.013509e-03 7.186833e-07 7.09398192072656e-13 4.15967612625046e-14 -7 1.013789e-03 6.049442e-07 7.09161292008514e-13 3.28388288912562e-14 -8 1.014025e-03 5.222715e-07 7.09037091974887e-13 2.82515576492325e-14 -9 1.014225e-03 4.614705e-07 7.08957691953389e-13 2.53168268546413e-14 -10 1.014398e-03 4.158012e-07 7.08901391938145e-13 2.32333662905353e-14 -11 1.014549e-03 3.806073e-07 7.08858691926584e-13 2.16559658634473e-14 -12 1.014683e-03 3.527734e-07 7.08824891917433e-13 2.04081655255999e-14 -13 1.014804e-03 3.302220e-07 7.08797391909987e-13 1.93891552496984e-14 -14 1.014915e-03 3.115528e-07 7.08774291903732e-13 1.8536595018864e-14 -15 1.015018e-03 2.958041e-07 7.08754591898399e-13 1.78096148220309e-14 -16 1.015114e-03 2.823019e-07 7.08737591893796e-13 1.71801346515964e-14 -17 1.015204e-03 2.705635e-07 7.08722591889734e-13 1.662813450214e-14 -18 1.015289e-03 2.602356e-07 7.0870939188616e-13 1.61389243696842e-14 -19 1.015370e-03 2.510548e-07 7.08697591882966e-13 1.57014442512345e-14 -20 1.015448e-03 2.428207e-07 7.08686891880068e-13 1.53071641444815e-14 tmpk8ny_4pz/tests/hisimhv2/pmos/reference/acFreq_coiigs.standard0000644000175000017500000000713313546075722025253 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.55153225891349e-12 2.45680801143349e-12 4.63933794323899e-14 1258.925 2.55153341329805e-12 2.45680845687896e-12 4.63933956857452e-14 1584.893 2.55153242433033e-12 2.45680825385338e-12 4.63933837813187e-14 1995.262 2.55153293146422e-12 2.45680869072767e-12 4.63933888824475e-14 2511.886 2.55153299513355e-12 2.45680869637064e-12 4.63933890882365e-14 3162.278 2.55153224248101e-12 2.45680764255866e-12 4.63933771726287e-14 3981.072 2.55153221749638e-12 2.45680775502476e-12 4.63933665566881e-14 5011.872 2.55153261025732e-12 2.45680823125329e-12 4.63933900187376e-14 6309.573 2.55153233603067e-12 2.45680830453198e-12 4.63933750870247e-14 7943.282 2.55153203443545e-12 2.4568078500289e-12 4.63933913522091e-14 10000 2.55153225891349e-12 2.45680801143349e-12 4.63933794323899e-14 12589.25 2.55153341329805e-12 2.45680845687896e-12 4.63933956857452e-14 15848.93 2.55153242433033e-12 2.45680825385338e-12 4.63933837813187e-14 19952.62 2.55153293146422e-12 2.45680869072767e-12 4.63933888824475e-14 25118.86 2.55153299513355e-12 2.45680869637064e-12 4.63933890882365e-14 31622.78 2.55153224248101e-12 2.45680764255866e-12 4.63933771726287e-14 39810.72 2.55153221749638e-12 2.45680775502476e-12 4.63933665566881e-14 50118.72 2.55153261025732e-12 2.45680823125329e-12 4.63933900187376e-14 63095.73 2.55153233603067e-12 2.45680830453198e-12 4.63933750870247e-14 79432.82 2.55153203443545e-12 2.4568078500289e-12 4.63933913522091e-14 100000 2.55153225891349e-12 2.45680801143349e-12 4.63933794323899e-14 125892.5 2.55153341329805e-12 2.45680845687896e-12 4.63933956857452e-14 158489.3 2.55153242433033e-12 2.45680825385338e-12 4.63933837813187e-14 199526.2 2.55153293146422e-12 2.45680869072767e-12 4.63933888824475e-14 251188.6 2.55153299513355e-12 2.45680869637064e-12 4.63933890882365e-14 316227.8 2.55153224248101e-12 2.45680764255865e-12 4.63933771726287e-14 398107.2 2.55153221749638e-12 2.45680775502476e-12 4.63933665566881e-14 501187.2 2.55153261025732e-12 2.45680823125329e-12 4.63933900187376e-14 630957.3 2.55153233603067e-12 2.45680830453198e-12 4.63933750870247e-14 794328.2 2.55153203443545e-12 2.4568078500289e-12 4.63933913522091e-14 1000000 2.55153225891349e-12 2.45680801143349e-12 4.63933794323899e-14 1258925 2.55153341329805e-12 2.45680845687896e-12 4.63933956857452e-14 1584893 2.55153242433033e-12 2.45680825385338e-12 4.63933837813187e-14 1995262 2.55153293146422e-12 2.45680869072767e-12 4.63933888824475e-14 2511886 2.55153299513355e-12 2.45680869637064e-12 4.63933890882365e-14 3162278 2.55153224248101e-12 2.45680764255866e-12 4.63933771726287e-14 3981072 2.55153221749638e-12 2.45680775502476e-12 4.63933665566881e-14 5011872 2.55153261025732e-12 2.45680823125329e-12 4.63933900187376e-14 6309573 2.55153233603067e-12 2.45680830453198e-12 4.63933750870247e-14 7943282 2.55153203443545e-12 2.4568078500289e-12 4.63933913522091e-14 10000000 2.55153225891349e-12 2.45680801143349e-12 4.63933794323899e-14 12589250 2.55153341329805e-12 2.45680845687896e-12 4.63933956857452e-14 15848930 2.55153242433033e-12 2.45680825385338e-12 4.63933837813187e-14 19952620 2.55153293146422e-12 2.45680869072767e-12 4.63933888824475e-14 25118860 2.55153299513355e-12 2.45680869637064e-12 4.63933890882365e-14 31622780 2.55153224248101e-12 2.45680764255866e-12 4.63933771726287e-14 39810720 2.55153221749638e-12 2.45680775502476e-12 4.63933665566881e-14 50118720 2.55153261025732e-12 2.45680823125329e-12 4.63933900187376e-14 63095730 2.55153233603067e-12 2.45680830453198e-12 4.63933750870247e-14 79432820 2.55153203443545e-12 2.4568078500289e-12 4.63933913522091e-14 100000000 2.55153225891349e-12 2.45680801143349e-12 4.63933794323899e-14 tmpk8ny_4pz/tests/hisimhv2/pmos/qaSpec0000644000175000017500000005024513546075722020176 0ustar carstencarsten // // Test specification for HiSIM_HV (version 2.1.0) // // // Simulator specific information // These arguments are added to the model card // specification to invoke the desired model in // different simulators (which can have different // names or levels for the same model) and to switch // between nType and pType polarities. // It is assumed that there are no polarity specific // parameters. // `ifdef spice nTypeSelectionArguments pmos level=62 version=2.10 pTypeSelectionArguments nmos level=62 version=2.10 `endif `ifdef ngspice nTypeSelectionArguments pmos level=73 version=2.20 pTypeSelectionArguments nmos level=73 version=2.20 `endif `ifdef hspice nTypeSelectionArguments pmos level=73 version=2.10 pTypeSelectionArguments nmos level=73 version=2.10 `endif // // General test-independent information // keyLetter m pins d g s b linearScale w l ps pd areaScale as ad temperature 27 -50 150 //checkPolarity yes scaleParameters m // // Specific tests // test dcSw_Id1_vb0 biases V(s)=0 V(b)=0 biasList V(g)=-2,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/pmosParameters test dcSw_Id1_vb1 biases V(s)=0 V(b)=0.5 biasList V(g)=-2,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/pmosParameters test dcSw_Id1_vb2 biases V(s)=0 V(b)=1.5 biasList V(g)=-2,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/pmosParameters test dcSw_Id1_vb0_jd biases V(s)=0 V(b)=0 biasList V(g)=-2,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=50e-6 L=5e-6 AD=20e-12 AS=20e-12 PD=12e-6 PS=12e-6 modelParameters parameters/pmosParameters test dcSw_Ig1_vb0 biases V(s)=0 V(b)=0 biasList V(d)=-2,-5,-10 biasSweep V(g)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/pmosParameters test dcSw_Ig1_vb1 biases V(s)=0 V(b)=0.5 biasList V(d)=-2,-5,-10 biasSweep V(g)=-1,-20.000000001,-1 outputs I(d) I(g) I(s) I(b) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/pmosParameters test dcSw_Ig1_vb2 biases V(s)=0 V(b)=1.5 biasList V(d)=-2,-5,-10 biasSweep V(g)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/pmosParameters test dcSw_Ig1_vb0_jd biases V(s)=0 V(b)=0 biasList V(d)=-2,-5,-10 biasSweep V(g)=-1,-20.000000001,-1 outputs I(d) I(g) I(s) I(b) instanceParameters W=20e-6 L=2.0e-6 AD=20e-12 AS=20e-12 PD=12e-6 PS=12e-6 modelParameters parameters/pmosParameters test dcSw_ld2 biases V(s)=0 V(b)=0 biasList V(g)=-2,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/pmosParameters test dcSw_lg2 biases V(s)=0 V(b)=0 biasList V(d)=-2,-5,-10 biasSweep V(g)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=5e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/pmosParameters test dcSw_cosym biases V(s)=0 V(b)=0 biasList V(g)=-2,-5,-10 biasSweep V(d)=-0.1,-30.1,-0.5 outputs I(d) instanceParameters W=50e-6 L=20e-6 modelParameters parameters/pmosParameters modelParameters COSYM=1 RD=0.1 CORDRIFT=0 test dcSw_rs2m biases V(s)=0 V(b)=0 biasList V(g)=-0.1,-0.6,-2,-5 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=50e-6 L=10e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/pmosParameters modelParameters COSYM=1 RD=0.1 RS=2e-3 CORDRIFT=0 test dcSw_corsrd0 biases V(s)=0 V(b)=0 biasList V(g)=-2,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=50e-6 L=2e-6 modelParameters parameters/pmosParameters modelParameters CORSRD=0 CORDRIFT=0 test dcSw_corsrd1 biases V(s)=0 V(b)=0 biasList V(g)=-2,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=50e-6 L=20e-6 AD=20e-12 AS=20e-12 PD=12e-6 PS=12e-6 modelParameters parameters/pmosParameters modelParameters CORSRD=1 RD=0.1 RS=0.05 CORDRIFT=0 test dcSw_corsrd2 biases V(s)=0 V(b)=0 biasList V(g)=-2,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=50e-6 L=2e-6 modelParameters parameters/pmosParameters modelParameters CORSRD=2 CORDRIFT=0 test dcSw_isub biases V(s)=0 V(b)=0 biasList V(g)=-2,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) I(b) instanceParameters W=50e-6 L=50e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/pmosParameters modelParameters COISUB=1 SUB1=1 SVGS=1 SVDS=1 SUB1L=0.1 SUB2L=0.1 SLG=1 SVBS=1 test dcSw_gidl biases V(s)=0 V(b)=0 biasList V(g)=-2,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) I(b) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/pmosParameters modelParameters COGIDL=1 test dcSw_she biases V(s)=0 V(b)=0 biasList V(g)=-2,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/pmosParameters modelParameters COSELFHEAT=1 POWRAT=0.5 test dcSw_ptl biases V(s)=0 V(b)=0 biasList V(g)=-2,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/pmosParameters modelParameters CORDRIFT=0 CORSRD=-1 RSH=10 PT4P=0.1 GDLD=0.0001 test dcSw_coisti biases V(s)=0 V(b)=0 biasList V(g)=-2,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=20e-6 L=2e-6 instanceParameters SA=1e-6 SB=2e-6 SD=1e-6 NF=2 modelParameters parameters/pmosParameters modelParameters COISTI=1 WSTI=0.1E-4 modelParameters NSUBPSTI1=2e-6 NSUBPSTI2=1e-6 NSUBPSTI3=1.5 test dcSw_corg biases V(s)=0 V(b)=0 biasList V(g)=-2,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters CORG=1 RSHG=10 test dcSw_corbnet biases V(s)=0 V(b)=0 biasList V(g)=-2,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters CORBNET=1 test dcSw_codfm biases V(s)=0 V(b)=0 biasList V(g)=-2,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=50e-6 L=2e-6 NSUBCDFM=1E17 modelParameters CODFM=1 test dcSw_rdrbb biases V(s)=0 V(b)=5 biasList V(g)=-2,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters RDRBB=1.5 test dcSw_NF_RDS temperature 27 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.000000001,-2 outputs I(d) instanceParameters W=50e-6 L=5e-6 NF=100 modelParameters parameters/pmosParameters modelParameters CORDRIFT=0 RD=0.01 RDS=1 RDSP=2.0 RDVDS=1 RDVDSP=1.5 test dcSw_NF_RD23 temperature 27 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.000000001,-2 outputs I(d) instanceParameters W=1e-6 L=2e-6 NF=100 modelParameters parameters/pmosParameters modelParameters CORDRIFT=0 RD20=0.1 RD23=0.1 RD23L=0.1 RD23S=0.1 RD23SP=1.5 RD24=0.1 test dcSw_NF_RTH0W temperature 27 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.000000001,-2 outputs I(d) instanceParameters W=50e-6 L=5e-6 NF=100 modelParameters parameters/pmosParameters modelParameters COSELFHEAT=1 RTH0=1 RTH0W=2.0 RTH0WP=2.5 test dcSw_COTEMP1 temperature 27 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.000000001,-2 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/pmosParameters modelParameters COTEMP=1 test dcSw_COTEMP2 temperature 27 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.000000001,-2 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/pmosParameters modelParameters COTEMP=2 test dcSw_COTEMP3 temperature 27 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.000000001,-2 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/pmosParameters modelParameters COTEMP=3 test dcSw_RDRIFT_REVS temperature 27 biases V(s)=0 V(b)=0 V(d)=10 biasSweep V(g)=-1,-20.000000001,-2 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/pmosParameters modelParameters CORDRIFT=1 RDRCX=0.5 test acVd temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-5 biasSweep V(d)=-1,-20.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/pmosParameters test acVd_corsrd1 temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=10e-6 modelParameters parameters/pmosParameters modelParameters CORSRD=1 RD=0.01 RS=0.1 CORDRIFT=0 test acVd_corsrd2 temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-20 biasSweep V(d)=-1,-20.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/pmosParameters modelParameters CORSRD=2 CORDRIFT=0 test acVd_cosym temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-5 biasSweep V(d)=-1,-20.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=20e-6 modelParameters parameters/pmosParameters modelParameters COSYM=1 RD=0.01 CORDRIFT=0 test acVd_cvdsover temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/pmosParameters modelParameters CVDSOVER=0.2 test acVd_coisti temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 instanceParameters SA=1e-6 SB=2e-6 SD=1e-6 NF=2 modelParameters parameters/pmosParameters modelParameters COISTI=1 WSTI=0.1E-4 modelParameters NSUBPSTI1=2e-6 NSUBPSTI2=1e-6 NSUBPSTI3=1.5 test acVd_coadov temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/pmosParameters modelParameters COADOV=1 test acVd_corg temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/pmosParameters modelParameters CORG=1 RSHG=10 test acVd_corbnet temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/pmosParameters modelParameters CORBNET=1 test acVd_codfm temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 NSUBCDFM=1E17 modelParameters parameters/pmosParameters modelParameters CODFM=1 test acVd_rdrbb temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/pmosParameters modelParameters RDRBB=1.5 test acVg_QOVADD temperature 27 150 biases V(s)=0 V(b)=0 V(d)=-1 biasSweep V(g)=-1,-10.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/pmosParameters modelParameters QOVADD=1e-4 test acVg_LOVER temperature 27 150 biases V(s)=0 V(b)=0 V(d)=-1 biasSweep V(g)=-1,-10.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/pmosParameters modelParameters LOVERS=0 LOVER=1.6e-06 LOVERLD=3e-06 test acFreq temperature 27 biases V(s)=0 V(b)=0 V(d)=-10 V(g)=-10 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=50e-6 L=2e-6 modelParameters parameters/pmosParameters test acFreq_cosym temperature 27 biases V(s)=0 V(b)=0 V(d)=-10 V(g)=-10 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=50e-6 L=10e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/pmosParameters modelParameters COSYM=1 RD=0.01 CORDRIFT=0 test acFreq_coovlp temperature 27 biases V(s)=0 V(b)=0 V(d)=-10 V(g)=-10 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=50e-6 L=2e-6 modelParameters parameters/pmosParameters modelParameters COOVLP=0 CORDRIFT=0 test acFreq_nover temperature 27 biases V(s)=0 V(b)=0 V(d)=-10 V(g)=-5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/pmosParameters modelParameters NOVER=1E16 CORDRIFT=0 test acFreq_coadov temperature 27 biases V(s)=0 V(b)=0 V(d)=-10 V(g)=-5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/pmosParameters modelParameters COADOV=0 test acFreq_conqs temperature 27 biases V(s)=0 V(b)=0 V(d)=-10 V(g)=-5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/pmosParameters modelParameters CONQS=1 test acFreq_coiigs temperature 27 biases V(s)=0 V(b)=0 V(d)=-10 V(g)=-5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=100e-6 L=8e-6 modelParameters parameters/pmosParameters modelParameters COIIGS=1 test noise1 temperature 27 biases V(s)=0 V(b)=0 V(d)=-20 biasList V(g)=-5,-10 freq dec 10 1e3 1e8 outputs N(d) instanceParameters W=100e-6 L=8e-6 modelParameters parameters/pmosParameters modelParameters COTHRML=1 COIGN=1 test noise2 temperature 27 biases V(s)=0 V(b)=0 V(d)=-20 biasList V(g)=-5,-10 freq dec 10 1e3 1e8 outputs N(d) instanceParameters W=100e-6 L=8e-6 modelParameters parameters/pmosParameters modelParameters COFLICK=1 FALPH=1.2 tmpk8ny_4pz/tests/hisimhv2/pmos/run0000755000175000017500000000023613546075722017564 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmpk8ny_4pz/tests/regression/0000755000175000017500000000000013546075722016502 5ustar carstencarstentmpk8ny_4pz/tests/regression/Makefile.am0000644000175000017500000000026513546075722020541 0ustar carstencarsten## Process this file with automake to produce Makefile.in SUBDIRS = lib-processing parser subckt-processing func model misc sens temper pipe pz MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/regression/pipe/0000755000175000017500000000000013546075722017437 5ustar carstencarstentmpk8ny_4pz/tests/regression/pipe/alter-1.cmd0000644000175000017500000000357713546075722021405 0ustar carstencarstenset prompt = "" let fail_count = 0 source alter-1.cir op if @v1[sin][2] <> 100meg echo "ERROR: tst100 failed" let fail_count = fail_count + 1 end # space after '[' is mandatory # alter @v1[sin] = [0 1 113meg] # # if @v1[sin][2] <> 113meg # echo "ERROR: tst113 failed" # let fail_count = fail_count + 1 # end alter @v1[sin] = [ 0 1 114meg ] if @v1[sin][2] <> 114meg echo "ERROR: tst114 failed" let fail_count = fail_count + 1 end alter @v1[sin]=[ 0 1 115meg ] if @v1[sin][2] <> 115meg echo "ERROR: tst115 failed" let fail_count = fail_count + 1 end alter @v1[sin] =[ 0 1 116meg ] if @v1[sin][2] <> 116meg echo "ERROR: tst116 failed" let fail_count = fail_count + 1 end alter @v1[sin]= [ 0 1 117meg ] if @v1[sin][2] <> 117meg echo "ERROR: tst117 failed" let fail_count = fail_count + 1 end # this will cause a warning, because # the first ']' will be a separate word # instead of beeing fused with the "[sin" alter @v1[sin ]= [ 0 1 118meg ] if @v1[sin][2] <> 118meg echo "ERROR: tst118 failed" let fail_count = fail_count + 1 end # check old syntax without '=' too alter v1 sin [ 0 1 119meg ] if @v1[sin][2] <> 119meg print @v1[sin] echo "ERROR: tst119 failed" let fail_count = fail_count + 1 end # check old syntax with '=' too alter v1 sin = [ 0 1 120meg ] if @v1[sin][2] <> 120meg echo "ERROR: tst120 failed" let fail_count = fail_count + 1 end alter v1 sin =[ 0 1 121meg ] if @v1[sin][2] <> 121meg echo "ERROR: tst121 failed" let fail_count = fail_count + 1 end alter v1 sin= [ 0 1 122meg ] if @v1[sin][2] <> 122meg echo "ERROR: tst122 failed" let fail_count = fail_count + 1 end alter v1 sin=[ 0 1 123meg ] if @v1[sin][2] <> 123meg echo "ERROR: tst123 failed" let fail_count = fail_count + 1 end if fail_count > 0 echo "ERROR: $&fail_count tests failed" quit 1 else echo "INFO: all tests passed" quit 0 end tmpk8ny_4pz/tests/regression/pipe/alter-1.cir0000644000175000017500000000004613546075722021403 0ustar carstencarsten* v1 1 0 dc=0 sin(0v, 0.1v, 100Meg) tmpk8ny_4pz/tests/regression/pipe/Makefile.am0000644000175000017500000000046113546075722021474 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = alter-1.cmd TESTS_ENVIRONMENT = \ SPICE_SCRIPTS=$(top_srcdir)/tests/bin \ ngspice_vpath=$(srcdir) \ $(SHELL) -c '$(top_builddir)/src/ngspice -p < $$1' -- EXTRA_DIST = \ $(TESTS) \ alter-1.cir MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/regression/sens/0000755000175000017500000000000013546075722017452 5ustar carstencarstentmpk8ny_4pz/tests/regression/sens/sens-dc-2.out0000644000175000017500000000015713546075722021701 0ustar carstencarsten Circuit: * test "sens dc" Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 INFO: 0 of 7 tests failed tmpk8ny_4pz/tests/regression/sens/Makefile.am0000644000175000017500000000050313546075722021504 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = sens-ac-1.cir sens-ac-2.cir sens-dc-1.cir sens-dc-2.cir TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/regression/sens/sens-ac-1.out0000644000175000017500000000015713546075722021675 0ustar carstencarsten Circuit: * test "sens ac" Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 INFO: 0 of 3 tests failed tmpk8ny_4pz/tests/regression/sens/sens-ac-1.cir0000644000175000017500000000204313546075722021637 0ustar carstencarsten* test "sens ac" i1 0 1 dc=1.27 ac=42mA r1 1 0 1k c1 1 0 100p .control * express our "golden" expectations: setplot new set gold = $curplot let s = (0,2) * pi * 1e6 let i1_acmag = 1 / (s*100p + 1/1k) let r1 = 42mA / (1 + s*100p * 1k)^2 let c1 = - 42mA * s / (s*100p + 1/1k)^2 * run a "sens" analysis sens v(1) ac lin 1 1e6 1.1e6 strcmp __flag $curplot $gold if $__flag = 0 echo "ERROR: sens failed to execute" quit 1 end * compare results with "golden" expectation define mismatch(a,b,err) abs(a-b)>err*abs(b) let total_count = 0 let fail_count = 0 foreach n i1_acmag c1 r1 set n_test = "$n" set n_gold = "{$gold}.$n" if mismatch($n_test, $n_gold, 1e-3) let s_test = $n_test let s_gold = $n_gold echo "ERROR, test failure, s[$n] = $&s_test but should be $&s_gold" let fail_count = fail_count + 1 end let total_count = total_count + 1 end if fail_count > 0 echo "ERROR: $&fail_count of $&total_count tests failed" quit 1 else echo "INFO: $&fail_count of $&total_count tests failed" quit 0 end .endc .end tmpk8ny_4pz/tests/regression/sens/sens-ac-2.out0000644000175000017500000000015713546075722021676 0ustar carstencarsten Circuit: * test "sens ac" Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 INFO: 0 of 6 tests failed tmpk8ny_4pz/tests/regression/sens/sens-ac-2.cir0000644000175000017500000000245513546075722021647 0ustar carstencarsten* test "sens ac" v1 1 0 dc=1.27 ac=42mA r1 1 2 68.0 c2 2 0 1.5n l3 2 3 12u c4 3 0 1.8n r5 3 0 100.0 .control * express our "golden" expectations: setplot new set gold = $curplot let s = (0,2) * pi * 1e6 let v1_acmag = ( 0.1258214312760609, -0.5915026769337883 ) let r1 = ( -38.77993150952251u, 196.2381768346785u ) let c2 = ( -4912987.937722201, -1131146.799006112 ) let l3 = ( -1670.021661737812, -453.4103177577211 ) let c4 = ( -7419488.478291172, -1226939.0306441 ) let r5 = ( 1.952734115993878E-5, -1.180848266533405E-4 ) * run a "sens" analysis sens v(3) ac lin 1 1e6 1.1e6 strcmp __flag $curplot $gold if $__flag = 0 echo "ERROR: sens failed to execute" quit 1 end * compare results with "golden" expectation define mismatch(a,b,err) abs(a-b)>err*abs(b) let total_count = 0 let fail_count = 0 foreach n v1_acmag r1 c2 l3 c4 r5 set n_test = "$n" set n_gold = "{$gold}.$n" if mismatch($n_test, $n_gold, 1e-3) let s_test = $n_test let s_gold = $n_gold echo "ERROR, test failure, s[$n] = $&s_test but should be $&s_gold" let fail_count = fail_count + 1 end let total_count = total_count + 1 end if fail_count > 0 echo "ERROR: $&fail_count of $&total_count tests failed" quit 1 else echo "INFO: $&fail_count of $&total_count tests failed" quit 0 end .endc .end tmpk8ny_4pz/tests/regression/sens/sens-dc-1.cir0000644000175000017500000000255213546075722021647 0ustar carstencarsten* test "sens dc" * The "sens" analysis does express "sensitivity" as * S = (d out) / (d parameter) * instead of the normalized * S = ((d out)/out) / ((d parameter)/parameter) * * here: * v(1) = (R / m_R) * (m_i1 * i1) * * S[R] = (d v(1))/(d R) = m_i1 * i1 / m_R = 42m * S[i1] = (d v(1))/(d i1) = m_i1 * R1 / m_R = 1k * S[m_R] = (d v(1))/(d m_R) = -R * i1 *m_i1/m_R^2 = -42 * S[m_i1] = (d v(1))/(d m_i1) = R * i1 / m_R = 42 i1 0 1 dc=42mA r1 1 0 1k .control * express our "golden" expectations: setplot new set gold = $curplot let i1 = 1k let i1_m = 42.0 let r1 = 42m let r1_m = -42.0 let r1_scale = 42.0 * run a "sens" analysis sens v(1) dc strcmp __flag $curplot $gold if $__flag = 0 echo "ERROR: sens failed to execute" quit 1 end * compare results with "golden" expectation define mismatch(a,b,err) abs(a-b)>err*abs(b) let total_count = 0 let fail_count = 0 foreach n i1 i1_m r1 r1_m r1_scale set n_test = "$n" set n_gold = "{$gold}.$n" if mismatch($n_test, $n_gold, 1e-3) let s_test = $n_test let s_gold = $n_gold echo "ERROR, test failure, s[$n] = $&s_test but should be $&s_gold" let fail_count = fail_count + 1 end let total_count = total_count + 1 end if fail_count > 0 echo "ERROR: $&fail_count of $&total_count tests failed" quit 1 else echo "INFO: $&fail_count of $&total_count tests failed" quit 0 end .endc .end tmpk8ny_4pz/tests/regression/sens/sens-dc-1.out0000644000175000017500000000015713546075722021700 0ustar carstencarsten Circuit: * test "sens dc" Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 INFO: 0 of 5 tests failed tmpk8ny_4pz/tests/regression/sens/sens-dc-2.cir0000644000175000017500000000223513546075722021646 0ustar carstencarsten* test "sens dc" v1 1 0 dc=42 r1 1 2 1k r2 2 3 1.5k r3 3 0 2.2k r4 3 4 3.3k r5 4 0 1.8k rx 2 4 2.7k .control * express our "golden" expectations: setplot new set gold = $curplot let v1 = 0.2933065931311105 let r1 = - 0.004104514242490192 let r2 = - 2.954317312283796E-4 let r3 = 0.001129248920024266 let r4 = - 2.00582596465584E-4 let r5 = 0.003755608696037442 let rx = - 0.001494392173796886 * run a "sens" analysis sens v(4) dc strcmp __flag $curplot $gold if $__flag = 0 echo "ERROR: sens failed to execute" quit 1 end * compare results with "golden" expectation define mismatch(a,b,err) abs(a-b)>err*abs(b) let total_count = 0 let fail_count = 0 foreach n v1 r1 r2 r3 r4 r5 rx set n_test = "$n" set n_gold = "{$gold}.$n" if mismatch($n_test, $n_gold, 1e-3) let s_test = $n_test let s_gold = $n_gold echo "ERROR, test failure, s[$n] = $&s_test but should be $&s_gold" let fail_count = fail_count + 1 end let total_count = total_count + 1 end if fail_count > 0 echo "ERROR: $&fail_count of $&total_count tests failed" quit 1 else echo "INFO: $&fail_count of $&total_count tests failed" quit 0 end .endc .end tmpk8ny_4pz/tests/regression/model/0000755000175000017500000000000013546075722017602 5ustar carstencarstentmpk8ny_4pz/tests/regression/model/Makefile.am0000644000175000017500000000050313546075722021634 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = binning-1.cir special-names-1.cir instance-defaults.cir TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/regression/model/special-names-1.out0000644000175000017500000000001613546075722023207 0ustar carstencarstenINFO: success tmpk8ny_4pz/tests/regression/model/binning-1.out0000644000175000017500000000021113546075722022107 0ustar carstencarsten Circuit: check model binning Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 INFO: 0 of 2 tests failed tmpk8ny_4pz/tests/regression/model/instance-defaults.cir0000644000175000017500000000035613546075722023716 0ustar carstencarsten* check whether .model accepts instance defaults v1 1 0 dc=1 r1 1 0 myres .model myres r(resistance=2k) .control op if abs(i(v1)/-0.5mA - 1) > 1e-9 echo "ERROR: check failed" quit 1 else echo "INFO: ok" quit 0 end .endc tmpk8ny_4pz/tests/regression/model/instance-defaults.out0000644000175000017500000000022513546075722023743 0ustar carstencarsten Circuit: * check whether .model accepts instance defaults Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 INFO: ok tmpk8ny_4pz/tests/regression/model/binning-1.cir0000644000175000017500000000201513546075722022061 0ustar carstencarstencheck model binning * (exec-spice "ngspice -b %s") ix1 0 1 dc=5uA mx1 1 1 0 0 nmos0v7 l=5u w=5u ix2 0 2 dc=5uA mx2 2 2 0 0 nmos_tst l=5u w=5u ix3 0 3 dc=6uA mx3 3 3 0 0 nmos0v9 l=5u w=6u ix4 0 4 dc=6uA mx4 4 4 0 0 nmos_tst l=5u w=6u * binned .model nmos_tst.1 nmos ( version=4.8 level=54 Vth0=0.7 lmin=1u lmax=10u wmin=4.5u wmax=5.5u ) .model nmos_tst.2 nmos ( version=4.8 level=54 Vth0=0.9 lmin=1u lmax=10u wmin=5.5u wmax=6.5u ) * and non binned to compare with .model nmos0v7 nmos ( version=4.8 level=54 Vth0=0.7 ) .model nmos0v9 nmos ( version=4.8 level=54 Vth0=0.9 ) .control define mismatch(a,b,err) abs(a-b)>err op let fail_count = 0 let total_count = 2 if mismatch(v(2)/v(1), 1.0, 1e-4) let fail_count = fail_count + 1 end if mismatch(v(4)/v(3), 1.0, 1e-4) let fail_count = fail_count + 1 end if fail_count > 0 echo "ERROR: $&fail_count of $&total_count tests failed" quit 1 else echo "INFO: $&fail_count of $&total_count tests failed" quit 0 end .endc .end tmpk8ny_4pz/tests/regression/model/special-names-1.cir0000644000175000017500000000157013546075722023163 0ustar carstencarsten* check whether we can swallow special modelnames starting with a digit * (exec-spice "ngspice -b %s") * check whether we can swallow special modelnames starting with a digit * for example 1n4002 2SK456 or 1SMB4148 * see function is_a_modelname() in inpcom.c i1 1 0 dc -100u vm1 1 t1 dc 0 d1 t1 0 dplain vm2 1 t2 dc 0 d2 t2 0 1n4002 vm3 1 t3 dc 0 d3 t3 0 2sk456 vm4 1 t4 dc 0 d4 t4 0 1smb4148 .model dplain d(is=1.0f) .model 1n4002 d(is=1.3f) .model 2sk456 d(is=1.5f) .model 1smb4148 d(is=1.7f) .control op compose result values i(vm2)/i(vm1) i(vm3)/i(vm1) i(vm4)/i(vm1) compose gold values 1.3 1.5 1.7 let err = result / gold - 1 let allowed_err = 1e-7 echo "Note: err =" $&err echo "Note: allowed_err =" $&allowed_err if vecmax(abs(err)) > allowed_err echo "ERROR: test failed" quit 1 else echo "INFO: success" quit 0 end .endc .end tmpk8ny_4pz/tests/regression/lib-processing/0000755000175000017500000000000013546075722021422 5ustar carstencarstentmpk8ny_4pz/tests/regression/lib-processing/scope-1.out0000644000175000017500000000021313546075722023416 0ustar carstencarsten Circuit: scope-1, subckt scopes Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 INFO: 0 of 2 tests failed tmpk8ny_4pz/tests/regression/lib-processing/ex1b.out0000644000175000017500000000016413546075722023013 0ustar carstencarsten Circuit: ex1b lib problem Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 INFO: ok tmpk8ny_4pz/tests/regression/lib-processing/Makefile.am0000644000175000017500000000057113546075722023461 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = ex1a.cir ex1b.cir ex2a.cir ex3a.cir scope-1.cir scope-2.cir scope-3.cir TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ ex1.lib ex2.lib ex3.lib extra3.lib \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/regression/lib-processing/ex3a.out0000644000175000017500000000016413546075722023014 0ustar carstencarsten Circuit: ex3a lib problem Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 INFO: ok tmpk8ny_4pz/tests/regression/lib-processing/scope-2.out0000644000175000017500000000021313546075722023417 0ustar carstencarsten Circuit: scope-2, subckt scopes Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 INFO: 0 of 3 tests failed tmpk8ny_4pz/tests/regression/lib-processing/ex2a.cir0000644000175000017500000000057413546075722022766 0ustar carstencarstenex2a, check lib processing I1 7 0 -1mA X1 7 0 sub1_in_lib Vcheck1 7 check1 1.0V I2 9 0 -1mA X2 9 0 sub2_in_lib Vcheck2 9 check2 2.0V .lib 'ex2.lib' MOS .control op echo "Note: v(check1) = $&v(check1)" echo "Note: v(check2) = $&v(check2)" if abs(v(check1)) > 1e-9 quit 1 end if abs(v(check2)) > 1e-9 quit 1 end echo "INFO: ok" quit 0 .endc .end tmpk8ny_4pz/tests/regression/lib-processing/ex2a.out0000644000175000017500000000016413546075722023013 0ustar carstencarsten Circuit: ex2a lib problem Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 INFO: ok tmpk8ny_4pz/tests/regression/lib-processing/ex1a.out0000644000175000017500000000016413546075722023012 0ustar carstencarsten Circuit: ex1a lib problem Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 INFO: ok tmpk8ny_4pz/tests/regression/lib-processing/scope-1.cir0000644000175000017500000000205213546075722023367 0ustar carstencarstenscope-1, subckt scopes * (exec-spice "ngspice -b %s" t) * ---- i1001_t n1001_t 0 -1mA x1001_t n1001_t 0 sub1 v1001_g n1001_g 0 2.0V * ---- i1002_t n1002_t 0 -1mA x1002_t n1002_t 0 sub2 v1002_g n1002_g 0 1.0V * ---- .subckt sub1 n1 n2 .subckt sub n1 n2 R1 n1 n2 4k .ends X1 n1 n2 sub R1 n1 n2 4k .ends .subckt sub2 n1 n2 .subckt sub n1 n2 R1 n1 n2 2k .ends X1 n1 n2 sub R1 n1 n2 2k .ends .control define mismatch(a,b,err) abs(a-b)>err op let total_count = 0 let fail_count = 0 let tests = 1001 + vector(2) foreach n $&tests set n_test = "n{$n}_t" set n_gold = "n{$n}_g" if mismatch(v($n_test), v($n_gold), 1e-9) let v_test = v($n_test) let v_gold = v($n_gold) echo "ERROR, test failure, v($n_test) = $&v_test but should be $&v_gold" let fail_count = fail_count + 1 end let total_count = total_count + 1 end if fail_count > 0 echo "ERROR: $&fail_count of $&total_count tests failed" quit 1 else echo "INFO: $&fail_count of $&total_count tests failed" quit 0 end .endc .end tmpk8ny_4pz/tests/regression/lib-processing/ex1.lib0000644000175000017500000000012713546075722022607 0ustar carstencarsten* -*- spice -*- .LIB RES .subckt sub_in_lib n1 n2 R3 n1 n2 2k .ends .ENDL RES tmpk8ny_4pz/tests/regression/lib-processing/ex1a.cir0000644000175000017500000000045013546075722022756 0ustar carstencarstenex1a, check lib processing I1 9 0 -1mA X1 9 0 sub1 Vcheck 9 check0 1.0V .lib 'ex1.lib' RES .subckt sub1 n1 n2 X2 n1 n2 sub_in_lib R2 n1 n2 2k .ends .control op echo "Note: v(check0) = $&v(check0)" if abs(v(check0)) > 1e-9 quit 1 end echo "INFO: ok" quit 0 .endc .end tmpk8ny_4pz/tests/regression/lib-processing/scope-3.cir0000644000175000017500000000262413546075722023376 0ustar carstencarstenscope-3, subckt scopes * (exec-spice "ngspice -b %s" t) * ---- * (/ 1 (+ (/ 1.0 2 3 3) (/ 1.0 2 3 5))) .param foo = 2k i1001_t n1001_t 0 -1mA x1001_t n1001_t 0 sub1 foo='foo*3' v1001_g n1001_g 0 11.25v * ---- * (/ 1 (+ (/ 1.0 2 4 11) (/ 1.0 2 4 13))) i1002_t n1002_t 0 -1mA x1002_t n1002_t 0 sub2 foo='foo*4' v1002_g n1002_g 0 47.666666666666666 * ---- i1003_t n1003_t 0 -1mA x1003_t n1003_t 0 sub foo=3k v1003_g n1003_g 0 33.0v * ---- .subckt sub1 n1 n2 foo=5k .subckt sub n1 n2 foo=10k R1 n1 n2 'foo' .ends X1 n1 n2 sub foo='3*foo' R1 n1 n2 '5*foo' .ends .subckt sub n1 n2 foo=17k R1 n1 n2 'foo*11' .ends .subckt sub2 n1 n2 foo=121k .subckt sub n1 n2 foo=117k R1 n1 n2 'foo' .ends X1 n1 n2 sub foo='11*foo' R1 n1 n2 'foo*13' .ends .control define mismatch(a,b,err) abs(a-b)>err op let total_count = 0 let fail_count = 0 let tests = 1001 + vector(3) foreach n $&tests set n_test = "n{$n}_t" set n_gold = "n{$n}_g" if mismatch(v($n_test), v($n_gold), 1e-9) let v_test = v($n_test) let v_gold = v($n_gold) echo "ERROR, test failure, v($n_test) = $&v_test but should be $&v_gold" let fail_count = fail_count + 1 end let total_count = total_count + 1 end if fail_count > 0 echo "ERROR: $&fail_count of $&total_count tests failed" quit 1 else echo "INFO: $&fail_count of $&total_count tests failed" quit 0 end .endc .end tmpk8ny_4pz/tests/regression/lib-processing/ex1b.cir0000644000175000017500000000055513546075722022765 0ustar carstencarstenex1b, check lib processing I1 9 0 -1mA X1 9 0 sub1 R2 9 0 4k X3 9 0 sub_in_lib Vcheck 9 check0 1.0V .subckt sub1 n1 n2 .lib 'ex1.lib' RES X1 n1 n2 sub_in_lib .ends .subckt sub_in_lib n1 n2 R4 n1 n2 4k .ends .control op echo "Note: v(check0) = $&v(check0)" if abs(v(check0)) > 1e-9 quit 1 end echo "INFO: ok" quit 0 .endc .end tmpk8ny_4pz/tests/regression/lib-processing/scope-2.cir0000644000175000017500000000225113546075722023371 0ustar carstencarstenscope-2, subckt scopes * (exec-spice "ngspice -b %s" t) * ---- i1001_t n1001_t 0 -1mA x1001_t n1001_t 0 sub1 v1001_g n1001_g 0 2.0V * ---- i1002_t n1002_t 0 -1mA x1002_t n1002_t 0 sub2 v1002_g n1002_g 0 1.0V * ---- i1003_t n1003_t 0 -1mA x1003_t n1003_t 0 sub v1003_g n1003_g 0 3.0V * ---- .subckt sub1 n1 n2 .subckt sub n1 n2 R1 n1 n2 4k .ends X1 n1 n2 sub R1 n1 n2 4k .ends .subckt sub n1 n2 R1 n1 n2 3k .ends .subckt sub2 n1 n2 .subckt sub n1 n2 R1 n1 n2 2k .ends X1 n1 n2 sub R1 n1 n2 2k .ends .control define mismatch(a,b,err) abs(a-b)>err op let total_count = 0 let fail_count = 0 let tests = 1001 + vector(3) foreach n $&tests set n_test = "n{$n}_t" set n_gold = "n{$n}_g" if mismatch(v($n_test), v($n_gold), 1e-9) let v_test = v($n_test) let v_gold = v($n_gold) echo "ERROR, test failure, v($n_test) = $&v_test but should be $&v_gold" let fail_count = fail_count + 1 end let total_count = total_count + 1 end if fail_count > 0 echo "ERROR: $&fail_count of $&total_count tests failed" quit 1 else echo "INFO: $&fail_count of $&total_count tests failed" quit 0 end .endc .end tmpk8ny_4pz/tests/regression/lib-processing/scope-3.out0000644000175000017500000000021313546075722023420 0ustar carstencarsten Circuit: scope-3, subckt scopes Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 INFO: 0 of 3 tests failed tmpk8ny_4pz/tests/regression/lib-processing/ex2.lib0000644000175000017500000000050213546075722022605 0ustar carstencarsten* -*- spice -*- .LIB MOS .subckt sub1_in_lib n1 n2 .LIB 'ex2.lib' RES Xsub1 n1 n2 sub3_in_lib R1a n1 n2 4k R1b n1 n2 2k .ends .subckt sub2_in_lib n1 n2 .LIB 'ex2.lib' RES Xsub2 n1 n2 sub3_in_lib R2 n1 n2 4k .ends .ENDL MOS .LIB RES .subckt sub3_in_lib n1 n2 R3 n1 n2 4k .ends .ENDL RES tmpk8ny_4pz/tests/regression/lib-processing/extra3.lib0000644000175000017500000000013013546075722023312 0ustar carstencarsten* -*- spice -*- .LIB RES .subckt sub3_in_lib n1 n2 R3 n1 n2 4k .ends .ENDL RES tmpk8ny_4pz/tests/regression/lib-processing/ex3a.cir0000644000175000017500000000057413546075722022767 0ustar carstencarstenex3a, check lib processing I1 7 0 -1mA X1 7 0 sub1_in_lib Vcheck1 7 check1 1.0V I2 9 0 -1mA X2 9 0 sub2_in_lib Vcheck2 9 check2 2.0V .lib 'ex3.lib' MOS .control op echo "Note: v(check1) = $&v(check1)" echo "Note: v(check2) = $&v(check2)" if abs(v(check1)) > 1e-9 quit 1 end if abs(v(check2)) > 1e-9 quit 1 end echo "INFO: ok" quit 0 .endc .end tmpk8ny_4pz/tests/regression/lib-processing/ex3.lib0000644000175000017500000000037613546075722022617 0ustar carstencarsten* -*- spice -*- .LIB MOS .subckt sub1_in_lib n1 n2 .LIB 'extra3.lib' RES Xsub1 n1 n2 sub3_in_lib R1a n1 n2 4k R1b n1 n2 2k .ends .subckt sub2_in_lib n1 n2 .LIB 'extra3.lib' RES Xsub2 n1 n2 sub3_in_lib R2 n1 n2 4k .ends .ENDL MOS tmpk8ny_4pz/tests/regression/misc/0000755000175000017500000000000013546075722017435 5ustar carstencarstentmpk8ny_4pz/tests/regression/misc/resume-1.cir0000644000175000017500000000236013546075722021573 0ustar carstencarstenregression test for "alter" with "stop" and "resume" * (exec-spice "ngspice %s" t) * check wheter we can "stop" a transient simulation * alter a resistance, its temperature coefficient a voltage * and successfully "resume" from there * * charge a capacitor for 1ms * (first order e^(-t/tau) response, with tau=1ms) * then stop, alter resistance, and voltage, * and resume from there. * * finally, compare the capacitor voltage against a golden trace v1 1 0 dc 5 r1 1 2 1k tc1=0.03125 c2 2 0 1u .temp 91 .control stop when time = 1ms tran 0.2u 2ms uic alter v1=-5 alter r1=100 alter @r1[tc1] = 0.0625 resume * calculate the golden response let D_temp = 91 - 27 let tc_fst = 0.03125 let tc_snd = 0.0625 let tau1 = 1u * 1k * (1 + D_temp * tc_fst) let tau2 = 1u * 100 * (1 + D_temp * tc_snd) let tstop = 1ms let vstop = 5 * (1 - exp(-tstop / tau1)) let trace1 = 5 * (1 - exp(-time / tau1)) let trace2 = vstop + (-5 - vstop) * (1 - exp(-(time - tstop) / tau2)) let gold = (time le tstop) * trace1 + (time gt tstop) * trace2 * plot v(2) gold let maxerr = vecmax(abs(v(2) - gold)) if maxerr > 2e-6 echo "ERROR: test failed, excessive error, maxerr = $&maxerr" quit 1 else echo "Note: maxerr = $&maxerr" echo "INFO: success" quit 0 end .endc tmpk8ny_4pz/tests/regression/misc/Makefile.am0000644000175000017500000000070113546075722021467 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = bugs-1.cir bugs-2.cir dollar-1.cir empty-1.cir resume-1.cir log-functions-1.cir alter-vec.cir test-noise-2.cir test-noise-3.cir ac-zero.cir asrc-tc-1.cir asrc-tc-2.cir if-elseif.cir TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/regression/misc/dollar-1.out0000644000175000017500000000073313546075722021604 0ustar carstencarsten Circuit: test for regression of already fixed bugs TEST: >< should be >< TEST: >1< should be >1< TEST: >2< should be >2< TEST: 1 2 3 baz bar TEST: should be >1 2 3 baz bar< TEST: >1< should be >1< TEST: end TEST: mi au TEST: should be >mi au< TEST: >mi< should be >mi< TEST: mi au TEST: should be >mi au< TEST: >mi< should be >mi< TEST: mi au TEST: should be >mi au< TEST: >mi< should be >mi< Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 tmpk8ny_4pz/tests/regression/misc/alter-vec.cir0000644000175000017500000000143313546075722022017 0ustar carstencarsten* check alter @v1[pulse] = [ 1 2 3 4 5 6 ] * * (exec-spice "ngspice -b %s" t) * * see com_alter_common() in frontend/device.c v1 1 0 dc 0.25 pulse( -1 2 3m 4u 5u 6m 7m) .control op let vec1 = @v1[pulse] compose gold1 values -1 2 3m 4u 5u 6m 7m let err1 = vecmax(abs(vec1/gold1 - 1)) alter @v1[pulse] = [ 2 5 11n 12n 13n 54n 105n ] let vec2 = @v1[pulse] compose gold2 values 2 5 11n 12n 13n 54n 105n let err2 = vecmax(abs(vec2/gold2 - 1)) echo "Note: err1 = " $&err1 echo "Note: err2 = " $&err2 let success = 0 if err1 > 1e-15 echo "ERROR: test1 failed, excessive error" else let success = success + 1 end if err2 > 1e-15 echo "ERROR: test2 failed, excessive error" else let success = success + 1 end if success eq 2 echo "INFO: success" quit 0 else quit 1 end .endc tmpk8ny_4pz/tests/regression/misc/test-noise-3.cir0000644000175000017500000000117213546075722022367 0ustar carstencarstencompare a m=2 resistor with two parallel instances * The expectation is identical inoise and onoise * (exec-spice "ngspice %s" t) .temp 25 i1 1 0 dc 10ma ac=1 r1 1 0 100 rmodel l=1u w=10u m=2 i2 2 0 dc 10mA ac=1 r2a 2 0 100 rmodel l=1u w=10u r2b 2 0 100 rmodel l=1u w=10u .model rmodel r kf=100e-18 af=1.1 + dlr=0.01u dw=0.01u .control noise v(1) i1 dec 5 1k 100k print all noise v(2) i2 dec 5 1k 100k print all let relerr = noise4.onoise_total / noise2.onoise_total - 1 echo "Note: relative relerr = $&relerr" if abs(relerr) > 1e-6 echo "ERROR: test failed" quit 1 else echo "INFO: success" quit 0 end .endc .end tmpk8ny_4pz/tests/regression/misc/asrc-tc-1.out0000644000175000017500000000001613546075722021655 0ustar carstencarstenINFO: success tmpk8ny_4pz/tests/regression/misc/test-noise-2.cir0000644000175000017500000000210213546075722022360 0ustar carstencarstenPaolo's carbon resistor noise (Motchenbacher p. 290) * (exec-spice "ngspice %s" t) * * check whether resistor flicker noise behaves as expected .temp 25 i1 1 0 dc 1e-3 r1 1 2 1k rmodel l=1u w=10u v1 2 0 dc 0 ac 1 .model rmodel r tc1=0.01 kf=100e-18 af=1.1 + dlr=0.01u dw=0.01u + tnom=25 .control * output noise in v/sqrt(Hz) compose wanted_onoise values 2.2637m 1.7981m 1.4283m 1.1345m 901.2011u 715.8494u 568.6194u 451.6705u 358.7746u 284.9848u 226.3715u * equivalent input noise in v/sqrt(Hz) * extern_onoise / H let wanted_inoise = wanted_onoise noise v(1) v1 dec 5 1k 100k setplot noise2 *print all setplot noise1 *print onoise_spectrum wanted_onoise *print inoise_spectrum wanted_inoise let inoise_relerr = vecmax(abs(inoise_spectrum / wanted_inoise - 1)) let onoise_relerr = vecmax(abs(onoise_spectrum / wanted_onoise - 1)) echo "Note: relative inoise_relerr = $&inoise_relerr" echo "Note: relative onoise_relerr = $&onoise_relerr" if inoise_relerr > 1e-4 or onoise_relerr > 1e-4 echo "ERROR: test failed" quit 1 else echo "INFO: success" quit 0 end .endc .end tmpk8ny_4pz/tests/regression/misc/empty-1.cir0000644000175000017500000000046013546075722021430 0ustar carstencarstencheck that we can survive emptiness * (exec-spice "ngspice -b %s") * Nothingness, No circuit elements at all. * We have only the implicit node "0" * Checks whether we can live with a * zero times zero circuit matrix .control op tran 0.1m 1m ac lin 3 1kHz 2kHz echo "TEST: done" quit 0 .endc .end tmpk8ny_4pz/tests/regression/misc/if-elseif.out0000644000175000017500000000022313546075722022026 0ustar carstencarsten Circuit: multiple .elseif, nested .if Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 INFO: nested .if test o.k. tmpk8ny_4pz/tests/regression/misc/ac-zero.out0000644000175000017500000000001613546075722021523 0ustar carstencarstenINFO: success tmpk8ny_4pz/tests/regression/misc/resume-1.out0000644000175000017500000000034713546075722021630 0ustar carstencarstenInitial Transient Solution Node Voltage 1 0 2 0 v1#branch 0 INFO: success tmpk8ny_4pz/tests/regression/misc/alter-vec.out0000644000175000017500000000001613546075722022045 0ustar carstencarstenINFO: success tmpk8ny_4pz/tests/regression/misc/log-functions-1.cir0000644000175000017500000000217413546075722023065 0ustar carstencarstenregression test for log, log10 and ln * (exec-spice "ngspice -b %s" t) v1 1 0 dc 2.7 vn1 n1 0 'ln(2.7)' vn2 n2 0 'log(2.7)' vn3 n3 0 'log10(2.7)' bb1 b1 0 v = ln(v(1)) bb2 b2 0 v = log(v(1)) bb3 b3 0 v = log10(v(1)) .control op let success = 0 compose numparm values v(n1) v(n2) v(n3) compose asrc values v(b1) v(b2) v(b3) compose ctrl values ln(2.7) log(2.7) log10(2.7) compose gold values 0.9932517730102834 0.9932517730102834 0.43136376415898736 let numparm_err = vecmax(abs(numparm/gold - 1)) let asrc_err = vecmax(abs(asrc/gold - 1)) let ctrl_err = vecmax(abs(ctrl/gold - 1)) echo "Note: numparm_err = " $&numparm_err echo "Note: asrc_err = " $&asrc_err echo "Note: ctrl_err = " $&ctrl_err if numparm_err > 1e-15 echo "ERROR: test failed, numparm, excessive error" else let success = success + 1 end if asrc_err > 1e-15 echo "ERROR: test failed, asrc, excessive error" else let success = success + 1 end if ctrl_err > 1e-15 echo "ERROR: test failed, control, excessive error" else let success = success + 1 end if success eq 3 echo "INFO: success" quit 0 else quit 1 end .endc .end tmpk8ny_4pz/tests/regression/misc/bugs-1.cir0000644000175000017500000000245213546075722021235 0ustar carstencarstentest for regression of already fixed bugs * (exec-spice "ngspice -b %s") * Bug Tracker * #294 B source failure when using an unary minus b1001_t n1001_t 0 V=(- (5)) v1001_g n1001_g 0 -5 v1002_aux aux1002 0 DC=3 b1002_t n1002_t 0 V=(-(v(aux1002))) v1002_g n1002_g 0 -3 .param aux1003=-2 b1003_t n1003_t 0 V='aux1003**2' v1003_g n1003_g 0 4 b1004_t n1004_t 0 V='-aux1003**2' v1004_g n1004_g 0 -4 * unary '+' b1005_t n1005_t 0 V=(+ (5)) v1005_g n1005_g 0 5 b1006_t n1006_t 0 V=(+(v(aux1002))) v1006_g n1006_g 0 3 b1007_t n1007_t 0 V=+-(5) v1007_g n1007_g 0 -5 b1008_t n1008_t 0 V=-+(5) v1008_g n1008_g 0 -5 * ---------------------------------------- .control define mismatch(a,b,err) abs(a-b)>err op let total_count = 0 let fail_count = 0 let tests = 1001 + vector(8) foreach n $&tests set n_test = "n{$n}_t" set n_gold = "n{$n}_g" if mismatch(v($n_test), v($n_gold), 1e-9) let v_test = v($n_test) let v_gold = v($n_gold) echo "ERROR, test failure, v($n_test) = $&v_test but should be $&v_gold" let fail_count = fail_count + 1 end let total_count = total_count + 1 end if fail_count > 0 echo "ERROR: $&fail_count of $&total_count tests failed" quit 1 else echo "INFO: $&fail_count of $&total_count tests failed" quit 0 end .endc .end tmpk8ny_4pz/tests/regression/misc/bugs-2.cir0000644000175000017500000000127013546075722021233 0ustar carstencarstenparser test * * test capability to parse @foo[bar][42] * (exec-spice "ngspice %s" t) v1 1 0 dc=0 .control save @v1[dc] dc v1 0 1 250m let foo = @v1[dc] let gold = 500m let bar = foo[2] let baz = @v1[dc][2] let two = 2 let argh = foo[two] let fail_count = 0 if bar <> 0.5 echo "ERROR: bar = $&bar should be 0.5" let fail_count = fail_count + 1 end if baz <> 0.5 echo "ERROR: baz = $&baz should be 0.5" let fail_count = fail_count + 1 end if argh <> 0.5 echo "ERROR: bar = $&argh should be 0.5" let fail_count = fail_count + 1 end if fail_count > 0 echo "ERROR: $&fail_count tests failed" quit 1 else echo "INFO: $&fail_count tests failed" quit 0 end .endc .end tmpk8ny_4pz/tests/regression/misc/test-noise-3.out0000644000175000017500000000001613546075722022415 0ustar carstencarstenINFO: success tmpk8ny_4pz/tests/regression/misc/dollar-1.cir0000644000175000017500000000135513546075722021553 0ustar carstencarstentest $var expansion v1 1 0 dc = 0 .control set foo = "" echo "TEST:" ">{$foo}< should be ><" set foo = ( 1 2 3 ) set bar = 2 echo "TEST:" ">$foo[0]< should be >1<" echo "TEST:" ">$foo[$bar]< should be >2<" set foo = ( $foo baz bar ) echo "TEST:" $foo echo "TEST:" "should be >1 2 3 baz bar<" echo "TEST:" ">$foo[0]< should be >1<" set aux = ( ) echo "TEST:" $aux "end" set foo = ( $aux mi au ) set bar = ( mi $aux au ) set baz = ( mi au $aux ) echo "TEST:" $foo echo "TEST:" "should be >mi au<" echo "TEST:" ">$foo[0]< should be >mi<" echo "TEST:" $bar echo "TEST:" "should be >mi au<" echo "TEST:" ">$bar[0]< should be >mi<" echo "TEST:" $baz echo "TEST:" "should be >mi au<" echo "TEST:" ">$baz[0]< should be >mi<" quit 0 .endc .end tmpk8ny_4pz/tests/regression/misc/asrc-tc-2.cir0000644000175000017500000000163713546075722021636 0ustar carstencarsten* test ASRC temperature coeff v0 9 0 dc=0 ac=0 v1 1 0 dc=100 ac=10 * a real resistor, in devices/res r2 1 2 1k tc1=0.001 v2 2 0 dc=0 ac=0 * a behavioural resistor, which is mapped to devices/asrc in inpcom.c r3 1 3 r = {1k + v(9)} tc1=0.001 v3 3 0 dc=0 ac=0 .temp 127.0 .control * listing extended op let idc_gold = 100 / (1k * (1 + 100*0.001)) let idc2=i(v2) let idc3=i(v3) * print idc2 idc3 idc_gold let err1 = idc2/idc_gold - 1 let err2 = idc3/idc_gold - 1 if abs(err1) > 1e-9 or abs(err2) > 1e-9 echo "ERROR: dc test failed, err1 = $&err1 err2 = $&err2" quit 1 end ac dec 1 1kHz 1kHz let iac_gold = 10 / (1k * (1 + 100*0.001)) let iac2=i(v2) let iac3=i(v3) * print iac2 iac3 iac_gold let err3 = iac2/iac_gold - 1 let err4 = iac3/iac_gold - 1 if abs(err3) > 1e-9 or abs(err4) > 1e-9 echo "ERROR: ac test failed, err3 = $&err3 err4 = $&err4" quit 1 end echo "INFO: success" quit 0 .endc tmpk8ny_4pz/tests/regression/misc/empty-1.out0000644000175000017500000000070213546075722021461 0ustar carstencarsten Circuit: check that we can survive emptiness Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 Initial Transient Solution -------------------------- Node Voltage ---- ------- No. of Data Rows : 59 Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 3 TEST: done tmpk8ny_4pz/tests/regression/misc/if-elseif.cir0000644000175000017500000000122713546075722022001 0ustar carstencarstenmultiple .elseif, nested .if .param select = 3 .param select2 = 3 V1 1 0 1 .if (select == 1) R1 1 0 1 .elseif (select == 2) R1 1 0 10 .elseif (select == 3) .if (select2 == 1) R1 1 0 100 .elseif (select2 = 2) R1 1 0 200 .elseif (select2 = 3) $ <----- selected R1 1 0 300 .else R1 1 0 400 .endif .elseif (select == 4) R1 1 0 1000 .else R1 1 0 10000 .endif .control define mismatch(a,b,err) abs(a-b)>err op let out = -1/v1#branch print out > test.log if mismatch(out, 300, 1e-9) echo "ERROR: nested .if test failed" quit 1 else echo "INFO: nested .if test o.k." quit 0 end .endc .end tmpk8ny_4pz/tests/regression/misc/asrc-tc-1.cir0000644000175000017500000000150513546075722021627 0ustar carstencarsten* test ASRC temperature coeff v1 1 0 dc=100 ac=1 b2 2 0 i=v(1) tc1=0.001 v2 0 2 0 b3 3 0 v=v(1) tc1=0.001 .temp 127.0 .control op let idc2_gold = 100 * (1 + 100*0.001) let vdc3_gold = 100 * (1 + 100*0.001) let idc2=i(v2) let vdc3=v(3) * print idc2 vdc3 idc2_gold vdc3_gold let err1 = idc2/idc2_gold - 1 let err2 = vdc3/vdc3_gold - 1 if abs(err1) > 1e-9 or abs(err2) > 1e-9 echo "ERROR: dc test failed, err1 = $&err1 err2 = $&err2" quit 1 end ac dec 1 1kHz 1kHz let iac2_gold = 1.0 * (1 + 100*0.001) let vac3_gold = 1.0 * (1 + 100*0.001) let iac2=i(v2) let vac3=v(3) * print iac2 vac3 iac2_gold vac3_gold let err3 = iac2/iac2_gold - 1 let err4 = vac3/vac3_gold - 1 if abs(err3) > 1e-9 or abs(err4) > 1e-9 echo "ERROR: ac test failed, err3 = $&err3 err4 = $&err4" quit 1 end echo "INFO: success" quit 0 .endc tmpk8ny_4pz/tests/regression/misc/bugs-1.out0000644000175000017500000000023613546075722021265 0ustar carstencarsten Circuit: test for regression of already fixed bugs Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 INFO: 0 of 8 tests failed tmpk8ny_4pz/tests/regression/misc/bugs-2.out0000644000175000017500000000017313546075722021266 0ustar carstencarsten Circuit: parser test Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 5 INFO: 0 tests failed tmpk8ny_4pz/tests/regression/misc/ac-zero.cir0000644000175000017500000000053313546075722021475 0ustar carstencarsten* whether .ac works for freq=0 * * (exec-spice "ngspice -b %s" t) v1 1 0 dc=0 ac=1 r1 1 2 1k l1 2 3 1uH r3 3 0 1k c3 3 0 1uF .control ac lin 1 0Hz 0Hz let v3_gold = 0.5 let err = abs(v(3)/v3_gold - 1) if err > 1e-15 echo "ERROR: test failed, excessive error, err = $&err" quit 1 else echo "INFO: success" quit 0 end .endc tmpk8ny_4pz/tests/regression/misc/log-functions-1.out0000644000175000017500000000001613546075722023110 0ustar carstencarstenINFO: success tmpk8ny_4pz/tests/regression/misc/test-noise-2.out0000644000175000017500000000001613546075722022414 0ustar carstencarstenINFO: success tmpk8ny_4pz/tests/regression/misc/asrc-tc-2.out0000644000175000017500000000001613546075722021656 0ustar carstencarstenINFO: success tmpk8ny_4pz/tests/regression/func/0000755000175000017500000000000013546075722017435 5ustar carstencarstentmpk8ny_4pz/tests/regression/func/Makefile.am0000644000175000017500000000042613546075722021473 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = func-1.cir TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/regression/func/func-1.cir0000644000175000017500000000455613546075722021237 0ustar carstencarsten* 'func-1' check .func processing * (exec-spice "ngspice -b %s") * (tests-aux-renumber) * ---------------------------------------- * introduce some nodenames and instancenames * intentionally meant to collide with parameter names vncol1 n 0 101.0 vncol2 p 0 102.0 vncol3 x 0 103.0 vp 1 0 105.0 rp 1 0 1.0 * ---------------------------------------- * arbitrary tests .func foo0() '1013.0' v1001_t n1001_t 0 '100*foo0()' v1001_g n1001_g 0 '101300.0' .func bar1(p) 'p' v1002_t n1002_t 0 'bar1(117.0)' v1003_t n1003_t 0 '2*bar1(117.0+2.0)' v1002_g n1002_g 0 '117.0' v1003_g n1003_g 0 '238.0' .func bar2(p) 'v(p)+p' b1004_t n1004_t 0 v = 'bar2(17.0)' v1004_g n1004_g 0 '119.0' .func bar3(p) 'p+v(p)' b1005_t n1005_t 0 v = 'bar3(17.0)' v1005_g n1005_g 0 '119.0' .func bar4(p) 'p+v(p)+p' b1006_t n1006_t 0 v = 'bar4(17.0)' v1006_g n1006_g 0 '136.0' .func baz1(n,vp) 'n+i(vp)+vp' b1007_t n1007_t 0 v = 'baz1(17.0,10000)' v1007_g n1007_g 0 '9912' .func baz2(p,n) 'v(p)+p+v(n)' b1008_t n1008_t 0 v = 'baz2(1000.0,1e20)' v1008_g n1008_g 0 '1203.0' .func baz3(x) 'x+x' v1009_t n1009_t 0 '17*baz3(100.0)' v1009_g n1009_g 0 '3400.0' .func moo1(x,p,n) 'xn?n:x' v1012_t n1012_t 0 '10*moo2(4,3,5)*100' v1012_g n1012_g 0 '4000' v1013_t n1013_t 0 '10*moo2(2,3,5)*100' v1013_g n1013_g 0 '3000' v1014_t n1014_t 0 '10*moo2(6,3,5)*100' v1014_g n1014_g 0 '5000' * ---------------------------------------- .param xoo = 100 .func fun1(a, xoo) 'a*xoo' v1015_t n1015_t 0 'fun1(xoo,2)' v1015_g n1015_g 0 '200' * ---------------------------------------- .control define mismatch(a,b,err) abs(a-b)>err op let total_count = 0 let fail_count = 0 let tests = 1001 + vector(15) foreach n $&tests set n_test = "n{$n}_t" set n_gold = "n{$n}_g" if mismatch(v($n_test), v($n_gold), 1e-9) let v_test = v($n_test) let v_gold = v($n_gold) echo "ERROR, test failure, v($n_test) = $&v_test but should be $&v_gold" let fail_count = fail_count + 1 end let total_count = total_count + 1 end if fail_count > 0 echo "ERROR: $&fail_count of $&total_count tests failed" quit 1 else echo "INFO: $&fail_count of $&total_count tests failed" quit 0 end .endc .end tmpk8ny_4pz/tests/regression/func/func-1.out0000644000175000017500000000023313546075722021255 0ustar carstencarsten Circuit: * 'xpressn-1' check xpressn.c parser Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 INFO: 0 of 15 tests failed tmpk8ny_4pz/tests/regression/pz/0000755000175000017500000000000013546075722017133 5ustar carstencarstentmpk8ny_4pz/tests/regression/pz/Makefile.am0000644000175000017500000000043513546075722021171 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = ac-resistance.cir TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/regression/pz/ac-resistance.out0000644000175000017500000000007413546075722022406 0ustar carstencarstenINFO: [op], success INFO: [ac], success INFO: [pz], success tmpk8ny_4pz/tests/regression/pz/ac-resistance.cir0000644000175000017500000000205013546075722022350 0ustar carstencarstencheck for proper use of ac resistance * (exec-spice "ngspice %s" t) Vin 1 0 dc 5.0 ac 3.0 R1 1 2 1k ac=4k C2 2 0 1n R2 2 0 4k .control let success_count = 0 op let H0 = 1 / (1 + 1k / 4k) let gold = 5.0 * H0 let err = v(2)/gold - 1 echo "Note: err[op] =" $&err if abs(err) > 1e-12 echo "ERROR: op test failed" else echo "INFO: [op], success" let success_count = success_count + 1 end ac lin 3 100kHz 200kHz let H0 = 1 / (1 + 4k / 4k) let tau = 1 / (1/4k + 1/4k) * 1n let s = 2 * pi * i * frequency let gold = 3.0 * H0 / (1 + s * tau) let err = abs(v(2)/gold - 1) echo "Note: err[ac] =" $&err if vecmax(err) > 1e-12 echo "ERROR: ac test failed" else echo "INFO: [ac], success" let success_count = success_count + 1 end pz 1 0 2 0 vol pz let tau = 1 / (1/4k + 1/4k) * 1n let gold = -1/tau let err = abs(pole(1)/gold - 1) echo "Note: err[pz] =" $&err if err > 1e-12 echo "ERROR: ac test failed" else echo "INFO: [pz], success" let success_count = success_count + 1 end if success_count ne 3 quit 1 else quit 0 end .endc tmpk8ny_4pz/tests/regression/temper/0000755000175000017500000000000013546075722017776 5ustar carstencarstentmpk8ny_4pz/tests/regression/temper/Makefile.am0000644000175000017500000000050313546075722022030 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = temper-1.cir temper-2.cir temper-3.cir temper-res-1.cir TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/regression/temper/temper-2.out0000644000175000017500000000001613546075722022157 0ustar carstencarstenINFO: success tmpk8ny_4pz/tests/regression/temper/temper-2.cir0000644000175000017500000000117613546075722022135 0ustar carstencarstenregression test temper-2.cir, temper sweep with 'temper' in a model parameter * check invocation of CKTtemp() in DCtrCurv() .model dtest D is='1e-12 * temper' .model dfix D is='1e-12' v1 1 0 dc 5v r1 1 2 5k d_test 2 3 dtest v_test 3 0 dc=0 d_fix 2 4 dfix v_fix 4 0 dc=0 .control let success_count = 0 dc temp 10 100 10.0 let val = i(v_test)/i(v_fix) let gold = "temp-sweep" let err = vecmax(abs(val/gold - 1)) echo "Note: err =" $&err if err > 1e-6 echo "ERROR: test failed" else echo "INFO: success" let success_count = success_count + 1 end if success_count ne 1 quit 1 else quit 0 end .endc .end tmpk8ny_4pz/tests/regression/temper/temper-res-1.out0000644000175000017500000000001613546075722022745 0ustar carstencarstenINFO: success tmpk8ny_4pz/tests/regression/temper/temper-3.out0000644000175000017500000000001613546075722022160 0ustar carstencarstenINFO: success tmpk8ny_4pz/tests/regression/temper/temper-1.cir0000644000175000017500000000072613546075722022134 0ustar carstencarstenregression test temper-1.cir, 'temper' in a model parameter * check inp_evaluate_temper() processing .model dplain d is='temper+1000' D1 1 0 dplain .control let success_count = 0 op let val = @dplain[is] let gold = 1000 + 27.0 let err = abs(val/gold - 1) echo "Note: err =" $&err if err > 1e-12 echo "ERROR: test failed" else echo "INFO: success" let success_count = success_count + 1 end if success_count ne 1 quit 1 else quit 0 end .endc .end tmpk8ny_4pz/tests/regression/temper/temper-res-1.cir0000644000175000017500000000213113546075722022713 0ustar carstencarstenregression test temper-res-1.cir, TC1 TC2 and TCE * check res model TC1 TC2, and TCE parameter v1 1 0 dc 5v r1 1 0 1k tc1=2m tc2=30u * note: tce shall override tc1,tc2 .model rtest r r=1000 tc1=2m tc2=30u tce=700m v2 2 0 dc 5v r2 2 0 rtest v3 3 0 dc 5v r3 3 0 1k tc1=2m tc2=30u tce=700m .control let success_count = 0 dc temp 10 100 10.0 let tc1 = 2m let tc2 = 30u let tce = 700m let val1 = -v(1)/i(v1) let val2 = -v(2)/i(v2) let val3 = -v(3)/i(v3) let tdif = "temp-sweep" - 27.0 let gold1 = 1000.0 * ((tc2 * tdif + tc1) * tdif + 1) let gold2 = 1000.0 * (1.01^(tce * tdif)) * plot val1 * plot val1/gold1 - 1 * plot val2 * plot val2/gold2 - 1 * plot val3 * plot val3/gold2 - 1 let err1 = vecmax(abs(val1/gold1 - 1)) let err2 = vecmax(abs(val2/gold2 - 1)) let err3 = vecmax(abs(val3/gold2 - 1)) echo "Note: err1 =" $&err1 echo "Note: err2 =" $&err2 echo "Note: err3 =" $&err3 if err1 > 1e-14 or err2 > 1e-14 or err3 > 1e-14 echo "ERROR: test failed" else echo "INFO: success" let success_count = success_count + 1 end if success_count ne 1 quit 1 else quit 0 end .endc .end tmpk8ny_4pz/tests/regression/temper/temper-1.out0000644000175000017500000000001613546075722022156 0ustar carstencarstenINFO: success tmpk8ny_4pz/tests/regression/temper/temper-3.cir0000644000175000017500000000115013546075722022126 0ustar carstencarstenregression test temper-3.cir, temper sweep with 'temper' in a model parameter * check invocation of CKTtemp() in DCtrCurv() * and for proper instance update in REStemp() .model rtest r r='1000 + temper' .model rfix r r='1000' v1 1 0 dc 5v r_test 1 0 rtest .control let success_count = 0 dc temp 10 100 10.0 let val = -v(1)/i(v1) - 1000 let gold = "temp-sweep" let err = vecmax(abs(val/gold - 1)) echo "Note: err =" $&err if err > 1e-12 echo "ERROR: test failed" else echo "INFO: success" let success_count = success_count + 1 end if success_count ne 1 quit 1 else quit 0 end .endc .end tmpk8ny_4pz/tests/regression/subckt-processing/0000755000175000017500000000000013546075722022147 5ustar carstencarstentmpk8ny_4pz/tests/regression/subckt-processing/model-scope-5.out0000644000175000017500000000025713546075722025255 0ustar carstencarsten Circuit: check scoping of nested .model definitions Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 INFO: 0 of 7 tests failed ngspice-25 done tmpk8ny_4pz/tests/regression/subckt-processing/Makefile.am0000644000175000017500000000045213546075722024204 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = global-1.cir model-scope-5.cir TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/regression/subckt-processing/global-1.out0000644000175000017500000000025713546075722024302 0ustar carstencarsten Circuit: check treatment of multiple .global cards Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 INFO: 0 of 3 tests failed ngspice-26 done tmpk8ny_4pz/tests/regression/subckt-processing/model-scope-5.cir0000644000175000017500000000260213546075722025217 0ustar carstencarstencheck scoping of nested .model definitions * (exec-spice "ngspice -b %s") * (tests-aux-renumber) i1 n1001_t 0 dc=-1 i2 n1002_t 0 dc=-1 i3 n1003_t 0 dc=-1 i4 n1004_t 0 dc=-1 i5 n1005_t 0 dc=-1 i6 n1006_t 0 dc=-1 i7 n1007_t 0 dc=-1 x1 n1001_t sub1 v1_g n1001_g 0 2k x2 n1002_t n1003_t n1004_t n1005_t n1006_t n1007_t sub2 v2_g n1002_g 0 4k v3_g n1003_g 0 1k v4_g n1004_g 0 8k v5_g n1005_g 0 1k v6_g n1006_g 0 8k v7_g n1007_g 0 43 .subckt sub1 2 .model my r r=2k r1 2 0 my .ends .subckt sub2 3 41a 41b 42a 42b 5 r2 3 0 my x31 41a 41b sub3 x32 42a 42b sub3 .subckt sub3 4 5 .model my r r=8k .model any r r=42 r5 4 0 1k r6 5 0 my .ends .model just r r=43 r5 5 0 just .ends .model my r r=4k .control define mismatch(a,b,err) abs(a-b)>err op let total_count = 0 let fail_count = 0 let tests = 1001 + vector(7) foreach n $&tests set n_test = "n{$n}_t" set n_gold = "n{$n}_g" if mismatch(v($n_test), v($n_gold), 1e-9) let v_test = v($n_test) let v_gold = v($n_gold) echo "ERROR, test failure, v($n_test) = $&v_test but should be $&v_gold" let fail_count = fail_count + 1 end let total_count = total_count + 1 end if fail_count > 0 echo "ERROR: $&fail_count of $&total_count tests failed" quit 1 else echo "INFO: $&fail_count of $&total_count tests failed" quit 0 end .endc .end tmpk8ny_4pz/tests/regression/subckt-processing/global-1.cir0000644000175000017500000000240413546075722024244 0ustar carstencarstencheck treatment of multiple .global cards * (exec-spice "ngspice -b %s") * (tests-aux-renumber) * multiple .global decks are "accumulative" .global n1001_t n1002_t .global n1003_t .subckt su1 1 R2 1 0 10k R3 n1001_t 0 2000.0 .ends .subckt su2 1 R2 1 0 10k R3 n1002_t 0 4000.0 .ends .subckt su3 1 R2 1 0 10k R3 n1003_t 0 8000.0 .ends i1 n1001_t 0 -3mA R1 n1001_t 0 1000.0 i2 n1002_t 0 -5mA R2 n1002_t 0 1000.0 i3 n1003_t 0 -9mA R3 n1003_t 0 1000.0 X1 n1 su1 X2 n1 su2 X3 n1 su3 Rn n1 0 100k v1g n1001_g 0 2.0000000 v2g n1002_g 0 4.0000000 v3g n1003_g 0 8.0000000 .control define mismatch(a,b,err) abs(a-b)>err op * listing extended let total_count = 0 let fail_count = 0 let tests = 1001 + vector(3) foreach n $&tests set n_test = "n{$n}_t" set n_gold = "n{$n}_g" if mismatch(v($n_test), v($n_gold), 1e-9) let v_test = v($n_test) let v_gold = v($n_gold) echo "ERROR, test failure, v($n_test) = $&v_test but should be $&v_gold" let fail_count = fail_count + 1 end let total_count = total_count + 1 end if fail_count > 0 echo "ERROR: $&fail_count of $&total_count tests failed" quit 1 else echo "INFO: $&fail_count of $&total_count tests failed" quit 0 end .endc .end tmpk8ny_4pz/tests/regression/parser/0000755000175000017500000000000013546075722017776 5ustar carstencarstentmpk8ny_4pz/tests/regression/parser/minus-minus.cir0000644000175000017500000000104013546075722022754 0ustar carstencarstentest dash dash * (exec-spice "ngspice -b %s") v1 1 0 '2--3' b2 2 0 v = 2--3 .control define mismatch(a,b,err) abs(a-b)>err op let foo = 2--3 if mismatch(v(1), 5.0, 1e-9) echo "ERROR: v(1) failed" end if mismatch(v(2), 5.0, 1e-9) echo "ERROR: v(2) failed" end if mismatch(foo, 5.0, 1e-9) echo "ERROR: foo failed" end echo "Note: v(1) = $&v(1)" echo "Note: v(2) = $&v(2)" echo "Note: foo = $&v(foo)" echo "INFO: -- yes we can, print dash dash --" echo "INFO: -- yes we can, print upper and lower case --" quit 0 .endc .end tmpk8ny_4pz/tests/regression/parser/Makefile.am0000644000175000017500000000052413546075722022033 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = minus-minus.cir xpressn-1.cir xpressn-2.cir xpressn-3.cir bxpressn-1.cir TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/regression/parser/xpressn-2.cir0000644000175000017500000001567213546075722022351 0ustar carstencarstencheck precision of some functions * do not change this file, its generated * (exec-spice "ngspice -b %s") v0 n0 0 'sin(1.0e-9)' v1 n1 0 'sin(1.0e-1)' v2 n2 0 'sin(7.0e-1)' v3 n3 0 'cos(1.0e-9)' v4 n4 0 'cos(1.0e-1)' v5 n5 0 'cos(7.0e-1)' v6 n6 0 'tan(1.0e-9)' v7 n7 0 'tan(1.0e-1)' v8 n8 0 'tan(7.0e-1)' v9 n9 0 'asin(1.0e-9)' v10 n10 0 'asin(1.0e-1)' v11 n11 0 'asin(7.0e-1)' v12 n12 0 'acos(1.0e-9)' v13 n13 0 'acos(1.0e-1)' v14 n14 0 'acos(7.0e-1)' v15 n15 0 'atan(1.0e-9)' v16 n16 0 'atan(1.0e-1)' v17 n17 0 'atan(7.0e-1)' v18 n18 0 'sinh(1.0e-9)' v19 n19 0 'sinh(1.0e-1)' v20 n20 0 'sinh(7.0e-1)' v21 n21 0 'cosh(1.0e-9)' v22 n22 0 'cosh(1.0e-1)' v23 n23 0 'cosh(7.0e-1)' v24 n24 0 'tanh(1.0e-9)' v25 n25 0 'tanh(1.0e-1)' v26 n26 0 'tanh(7.0e-1)' v27 n27 0 'asinh(1.0e-9)' v28 n28 0 'asinh(1.0e-1)' v29 n29 0 'asinh(7.0e-1)' v30 n30 0 'acosh(1.2e+0)' v31 n31 0 'atanh(1.0e-9)' v32 n32 0 'atanh(1.0e-1)' v33 n33 0 'atanh(7.0e-1)' .control op let eps = 1.1102230246251568e-16 define mismatch(y,gold,err) abs(y-gold)>(err*gold) define relerr_(y,gold) (y-gold)/(gold*eps) if mismatch(v(n0), 1.0e-9, 10*eps) let relerr = relerr_(v(n0), 1.0e-9) echo "ERROR, sin(1.0e-9) versus 1.0e-9 mismatch" print relerr end if mismatch(v(n1), 9.983341664682815e-2, 10*eps) let relerr = relerr_(v(n1), 9.983341664682815e-2) echo "ERROR, sin(1.0e-1) versus 9.983341664682815e-2 mismatch" print relerr end if mismatch(v(n2), 6.44217687237691e-1, 10*eps) let relerr = relerr_(v(n2), 6.44217687237691e-1) echo "ERROR, sin(7.0e-1) versus 6.44217687237691e-1 mismatch" print relerr end if mismatch(v(n3), 1.0e+0, 10*eps) let relerr = relerr_(v(n3), 1.0e+0) echo "ERROR, cos(1.0e-9) versus 1.0e+0 mismatch" print relerr end if mismatch(v(n4), 9.950041652780258e-1, 10*eps) let relerr = relerr_(v(n4), 9.950041652780258e-1) echo "ERROR, cos(1.0e-1) versus 9.950041652780258e-1 mismatch" print relerr end if mismatch(v(n5), 7.648421872844885e-1, 10*eps) let relerr = relerr_(v(n5), 7.648421872844885e-1) echo "ERROR, cos(7.0e-1) versus 7.648421872844885e-1 mismatch" print relerr end if mismatch(v(n6), 1.0e-9, 10*eps) let relerr = relerr_(v(n6), 1.0e-9) echo "ERROR, tan(1.0e-9) versus 1.0e-9 mismatch" print relerr end if mismatch(v(n7), 1.0033467208545055e-1, 10*eps) let relerr = relerr_(v(n7), 1.0033467208545055e-1) echo "ERROR, tan(1.0e-1) versus 1.0033467208545055e-1 mismatch" print relerr end if mismatch(v(n8), 8.422883804630794e-1, 10*eps) let relerr = relerr_(v(n8), 8.422883804630794e-1) echo "ERROR, tan(7.0e-1) versus 8.422883804630794e-1 mismatch" print relerr end if mismatch(v(n9), 1.0e-9, 10*eps) let relerr = relerr_(v(n9), 1.0e-9) echo "ERROR, asin(1.0e-9) versus 1.0e-9 mismatch" print relerr end if mismatch(v(n10), 1.0016742116155979e-1, 10*eps) let relerr = relerr_(v(n10), 1.0016742116155979e-1) echo "ERROR, asin(1.0e-1) versus 1.0016742116155979e-1 mismatch" print relerr end if mismatch(v(n11), 7.753974966107529e-1, 10*eps) let relerr = relerr_(v(n11), 7.753974966107529e-1) echo "ERROR, asin(7.0e-1) versus 7.753974966107529e-1 mismatch" print relerr end if mismatch(v(n12), 1.5707963257948965e+0, 10*eps) let relerr = relerr_(v(n12), 1.5707963257948965e+0) echo "ERROR, acos(1.0e-9) versus 1.5707963257948965e+0 mismatch" print relerr end if mismatch(v(n13), 1.470628905633337e+0, 10*eps) let relerr = relerr_(v(n13), 1.470628905633337e+0) echo "ERROR, acos(1.0e-1) versus 1.470628905633337e+0 mismatch" print relerr end if mismatch(v(n14), 7.953988301841437e-1, 10*eps) let relerr = relerr_(v(n14), 7.953988301841437e-1) echo "ERROR, acos(7.0e-1) versus 7.953988301841437e-1 mismatch" print relerr end if mismatch(v(n15), 1.0e-9, 10*eps) let relerr = relerr_(v(n15), 1.0e-9) echo "ERROR, atan(1.0e-9) versus 1.0e-9 mismatch" print relerr end if mismatch(v(n16), 9.966865249116206e-2, 10*eps) let relerr = relerr_(v(n16), 9.966865249116206e-2) echo "ERROR, atan(1.0e-1) versus 9.966865249116206e-2 mismatch" print relerr end if mismatch(v(n17), 6.107259643892086e-1, 10*eps) let relerr = relerr_(v(n17), 6.107259643892086e-1) echo "ERROR, atan(7.0e-1) versus 6.107259643892086e-1 mismatch" print relerr end if mismatch(v(n18), 1.0e-9, 10*eps) let relerr = relerr_(v(n18), 1.0e-9) echo "ERROR, sinh(1.0e-9) versus 1.0e-9 mismatch" print relerr end if mismatch(v(n19), 1.0016675001984403e-1, 10*eps) let relerr = relerr_(v(n19), 1.0016675001984403e-1) echo "ERROR, sinh(1.0e-1) versus 1.0016675001984403e-1 mismatch" print relerr end if mismatch(v(n20), 7.585837018395335e-1, 10*eps) let relerr = relerr_(v(n20), 7.585837018395335e-1) echo "ERROR, sinh(7.0e-1) versus 7.585837018395335e-1 mismatch" print relerr end if mismatch(v(n21), 1.0e+0, 10*eps) let relerr = relerr_(v(n21), 1.0e+0) echo "ERROR, cosh(1.0e-9) versus 1.0e+0 mismatch" print relerr end if mismatch(v(n22), 1.0050041680558035e+0, 10*eps) let relerr = relerr_(v(n22), 1.0050041680558035e+0) echo "ERROR, cosh(1.0e-1) versus 1.0050041680558035e+0 mismatch" print relerr end if mismatch(v(n23), 1.255169005630943e+0, 10*eps) let relerr = relerr_(v(n23), 1.255169005630943e+0) echo "ERROR, cosh(7.0e-1) versus 1.255169005630943e+0 mismatch" print relerr end if mismatch(v(n24), 1.0e-9, 10*eps) let relerr = relerr_(v(n24), 1.0e-9) echo "ERROR, tanh(1.0e-9) versus 1.0e-9 mismatch" print relerr end if mismatch(v(n25), 9.966799462495581e-2, 10*eps) let relerr = relerr_(v(n25), 9.966799462495581e-2) echo "ERROR, tanh(1.0e-1) versus 9.966799462495581e-2 mismatch" print relerr end if mismatch(v(n26), 6.043677771171635e-1, 10*eps) let relerr = relerr_(v(n26), 6.043677771171635e-1) echo "ERROR, tanh(7.0e-1) versus 6.043677771171635e-1 mismatch" print relerr end if mismatch(v(n27), 1.0e-9, 10*eps) let relerr = relerr_(v(n27), 1.0e-9) echo "ERROR, asinh(1.0e-9) versus 1.0e-9 mismatch" print relerr end if mismatch(v(n28), 9.983407889920759e-2, 10*eps) let relerr = relerr_(v(n28), 9.983407889920759e-2) echo "ERROR, asinh(1.0e-1) versus 9.983407889920759e-2 mismatch" print relerr end if mismatch(v(n29), 6.526665660823557e-1, 10*eps) let relerr = relerr_(v(n29), 6.526665660823557e-1) echo "ERROR, asinh(7.0e-1) versus 6.526665660823557e-1 mismatch" print relerr end if mismatch(v(n30), 6.223625037147784e-1, 10*eps) let relerr = relerr_(v(n30), 6.223625037147784e-1) echo "ERROR, acosh(1.2e+0) versus 6.223625037147784e-1 mismatch" print relerr end if mismatch(v(n31), 1.0e-9, 10*eps) let relerr = relerr_(v(n31), 1.0e-9) echo "ERROR, atanh(1.0e-9) versus 1.0e-9 mismatch" print relerr end if mismatch(v(n32), 1.0033534773107558e-1, 10*eps) let relerr = relerr_(v(n32), 1.0033534773107558e-1) echo "ERROR, atanh(1.0e-1) versus 1.0033534773107558e-1 mismatch" print relerr end if mismatch(v(n33), 8.673005276940532e-1, 10*eps) let relerr = relerr_(v(n33), 8.673005276940532e-1) echo "ERROR, atanh(7.0e-1) versus 8.673005276940532e-1 mismatch" print relerr end quit 0 .endc tmpk8ny_4pz/tests/regression/parser/bxpressn-1.cir0000644000175000017500000003027013546075722022501 0ustar carstencarsten* 'bxpressn-1' check b parser * (exec-spice "ngspice -b %s") * (tests-aux-renumber) * ---------------------------------------- * arbitrary tests b1001_t n1001_t 0 v = '1+2' b1002_t n1002_t 0 v = '1 + 2 ' b1003_t n1003_t 0 v = '1+2*3' b1004_t n1004_t 0 v = '(1?2:3)+100' b1005_t n1005_t 0 v = '(1>2?2*4:1+2*3)+100' v1001_g n1001_g 0 '3' v1002_g n1002_g 0 '3' v1003_g n1003_g 0 '7' v1004_g n1004_g 0 '102' v1005_g n1005_g 0 '107' b1006_t n1006_t 0 v = '1-2.1' b1007_t n1007_t 0 v = '1--1' b1008_t n1008_t 0 v = '5+2/-4' v1006_g n1006_g 0 '-1.1' v1007_g n1007_g 0 '2' v1008_g n1008_g 0 '4.5' * ---------------------------------------- * boolean operators '&&' '||' '!' * output: 0.0 or 1.0 * input: 0.0 is 'false', everything else is 'true' * --------------- * `&&' operator b1009_t n1009_t 0 v = '0 && 0' b1010_t n1010_t 0 v = '0 && 1' b1011_t n1011_t 0 v = '1 && 0' b1012_t n1012_t 0 v = '0.1 && 0.2' b1013_t n1013_t 0 v = '-0.1 && 0.2' v1009_g n1009_g 0 '0' v1010_g n1010_g 0 '0' v1011_g n1011_g 0 '0' v1012_g n1012_g 0 '1' v1013_g n1013_g 0 '1' * --------------- * `||' operator b1014_t n1014_t 0 v = '0 || 0' b1015_t n1015_t 0 v = '0 || 0.1' b1016_t n1016_t 0 v = '-0.1 || 0' b1017_t n1017_t 0 v = '0.1 || -0.2' v1014_g n1014_g 0 '0' v1015_g n1015_g 0 '1' v1016_g n1016_g 0 '1' v1017_g n1017_g 0 '1' * --------------- * `!' operator b1018_t n1018_t 0 v = '! 0.0' b1019_t n1019_t 0 v = '! 0.1' b1020_t n1020_t 0 v = '! (-0.1)' v1018_g n1018_g 0 '1' v1019_g n1019_g 0 '0' v1020_g n1020_g 0 '0' * ---------------------------------------- * comparison operators * output: 0.0 or 1.0 * ---------- * `>' b1021_t n1021_t 0 v = '3 > 2' b1022_t n1022_t 0 v = '2 > 3' b1023_t n1023_t 0 v = '2 > 2' v1021_g n1021_g 0 '1' v1022_g n1022_g 0 '0' v1023_g n1023_g 0 '0' * ---------- * '<' b1024_t n1024_t 0 v = '3 < 2' b1025_t n1025_t 0 v = '2 < 3' b1026_t n1026_t 0 v = '2 < 2' v1024_g n1024_g 0 '0' v1025_g n1025_g 0 '1' v1026_g n1026_g 0 '0' * ---------- * '<=' b1027_t n1027_t 0 v = '3 >= 2' b1028_t n1028_t 0 v = '2 >= 3' b1029_t n1029_t 0 v = '2 >= 2' v1027_g n1027_g 0 '1' v1028_g n1028_g 0 '0' v1029_g n1029_g 0 '1' * ---------- * '>=' b1030_t n1030_t 0 v = '3 <= 2' b1031_t n1031_t 0 v = '2 <= 3' b1032_t n1032_t 0 v = '2 <= 2' v1030_g n1030_g 0 '0' v1031_g n1031_g 0 '1' v1032_g n1032_g 0 '1' * ---------- * '==' b1033_t n1033_t 0 v = '3 == 2' b1034_t n1034_t 0 v = '2 == 3' b1035_t n1035_t 0 v = '2 == 2' v1033_g n1033_g 0 '0' v1034_g n1034_g 0 '0' v1035_g n1035_g 0 '1' * ---------- * '!=' b1036_t n1036_t 0 v = '3 != 2' b1037_t n1037_t 0 v = '2 != 3' b1038_t n1038_t 0 v = '2 != 2' v1036_g n1036_g 0 '1' v1037_g n1037_g 0 '1' v1038_g n1038_g 0 '0' * ---------------------------------------- * four variants of exponentiation b1039_t n1039_t 0 v = '2 ^ 3' v1039_g n1039_g 0 '8' b1040_t n1040_t 0 v = '2 ** 3' v1040_g n1040_g 0 '8' b1041_t n1041_t 0 v = 'pwr(2,3)' v1041_g n1041_g 0 '8' b1042_t n1042_t 0 v = 'pow(2,3)' v1042_g n1042_g 0 '8' * ---------------------------------------- * ternary 'c ? x : y' operator * input: 0.0 is false, everything else is true b1043_t n1043_t 0 v = ' 0.1 ? 42 : 43' b1044_t n1044_t 0 v = '-0.1 ? 42 : 43' b1045_t n1045_t 0 v = ' 0.0 ? 42 : 43' v1043_g n1043_g 0 '42' v1044_g n1044_g 0 '42' v1045_g n1045_g 0 '43' * assoziativity b1046_t n1046_t 0 v = '1 ? 42 : 1 ? 41 : 40' b1047_t n1047_t 0 v = '1 ? 42 : 0 ? 41 : 40' b1048_t n1048_t 0 v = '0 ? 42 : 1 ? 41 : 40' b1049_t n1049_t 0 v = '0 ? 42 : 0 ? 41 : 40' v1046_g n1046_g 0 '42' v1047_g n1047_g 0 '42' v1048_g n1048_g 0 '41' v1049_g n1049_g 0 '40' * -------------------- * regression tests * these failed in the past, due to incorrect transformations in inpcom.c * was incorrectly transformed --> (3>2)||ternary_fcn((1<4),0.2,0.3) b1050_t n1050_t 0 v = '(3>2)||(1<4) ? 0.2 : 0.3' v1050_g n1050_g 0 '0.2' * was incorrectly transformed --> controlled_exit() b1051_t n1051_t 0 v = '(3>2) ? (3+2)*((2>1)?1:1) : 42' v1051_g n1051_g 0 '5' * was incorrectly transformed --> ternary_fcn((3>2),42,(2*2))3 b1052_t n1052_t 0 v = '(3>2) ? 42 : (2*2)+3' v1052_g n1052_g 0 '42' * ---------------------------------------- * functions b1053_t n1053_t 0 v = 'sin(0.3)' b1054_t n1054_t 0 v = 'cos(0.3)' b1055_t n1055_t 0 v = 'tan(0.3)' b1056_t n1056_t 0 v = 'asin(0.3)' b1057_t n1057_t 0 v = 'acos(0.3)' b1058_t n1058_t 0 v = 'atan(0.3)' b1059_t n1059_t 0 v = 'atan(0.3)' *b1059_t n1059_t 0 v = 'arctan(0.3)'!!!! b1060_t n1060_t 0 v = 'sinh(0.3)' b1061_t n1061_t 0 v = 'cosh(0.3)' b1062_t n1062_t 0 v = 'tanh(0.3)' b1063_t n1063_t 0 v = 'asinh(0.3)' b1064_t n1064_t 0 v = 'acosh(1.3)' b1065_t n1065_t 0 v = 'atanh(0.3)' v1053_g n1053_g 0 '0.29552020666133955' v1054_g n1054_g 0 '0.955336489125606' v1055_g n1055_g 0 '0.30933624960962325' v1056_g n1056_g 0 '0.3046926540153975' v1057_g n1057_g 0 '1.266103672779499' v1058_g n1058_g 0 '0.29145679447786704' v1059_g n1059_g 0 '0.29145679447786704' v1060_g n1060_g 0 '0.3045202934471426' v1061_g n1061_g 0 '1.0453385141288605' v1062_g n1062_g 0 '0.2913126124515909' v1063_g n1063_g 0 '0.2956730475634223' v1064_g n1064_g 0 '0.7564329108569595' v1065_g n1065_g 0 '0.3095196042031116' * ---------- b1066_t n1066_t 0 v = 'exp(2.0)' b1067_t n1067_t 0 v = 'exp(-2.0)' v1066_g n1066_g 0 '7.38905609893065' v1067_g n1067_g 0 '0.1353352832366127' * ---------- b1068_t n1068_t 0 v = 'log(2.0)' b1069_t n1069_t 0 v = 'log(0.5)' v1068_g n1068_g 0 '0.6931471805599453' v1069_g n1069_g 0 '-0.6931471805599453' b1070_t n1070_t 0 v = 'ln(2.0)' b1071_t n1071_t 0 v = 'ln(0.5)' v1070_g n1070_g 0 '0.6931471805599453' v1071_g n1071_g 0 '-0.6931471805599453' * ---------- b1072_t n1072_t 0 v = 'sqrt(2.0)' v1072_g n1072_g 0 '1.4142135623730951' *b1073_t n1073_t 0 v = 'sqr(2.0)'!!!!! b1073_t n1073_t 0 v = '2.0 * 2.0' v1073_g n1073_g 0 '4.0' * ---------------------------------------- * functions b1074_t n1074_t 0 v = 'abs(2.0)' b1075_t n1075_t 0 v = 'abs(-2.0)' v1074_g n1074_g 0 '2' v1075_g n1075_g 0 '2' b1076_t n1076_t 0 v = 'sgn(2.0)' b1077_t n1077_t 0 v = 'sgn(0.0)' b1078_t n1078_t 0 v = 'sgn(-2.0)' v1076_g n1076_g 0 '1' v1077_g n1077_g 0 '0' v1078_g n1078_g 0 '-1' *b1079_t n1079_t 0 v = 'int(2.1)'!!! *b1080_t n1080_t 0 v = 'int(1.9)' *b1081_t n1081_t 0 v = 'int(0)' *b1082_t n1082_t 0 v = 'int(-1.9)' *b1083_t n1083_t 0 v = 'int(-2.1)'!!! b1079_t n1079_t 0 v = '2' b1080_t n1080_t 0 v = '1' b1081_t n1081_t 0 v = '0' b1082_t n1082_t 0 v = '-1' b1083_t n1083_t 0 v = '-2' v1079_g n1079_g 0 '2' v1080_g n1080_g 0 '1' v1081_g n1081_g 0 '0' v1082_g n1082_g 0 '-1' v1083_g n1083_g 0 '-2' b1084_t n1084_t 0 v = 'nint(2.6)' b1085_t n1085_t 0 v = 'nint(2.5)' b1086_t n1086_t 0 v = 'nint(2.4)' b1087_t n1087_t 0 v = 'nint(1.6)' b1088_t n1088_t 0 v = 'nint(1.5)' b1089_t n1089_t 0 v = 'nint(1.4)' b1090_t n1090_t 0 v = 'nint(0.6)' b1091_t n1091_t 0 v = 'nint(0.5)' b1092_t n1092_t 0 v = 'nint(0.4)' b1093_t n1093_t 0 v = 'nint(0)' b1094_t n1094_t 0 v = 'nint(-0.4)' b1095_t n1095_t 0 v = 'nint(-0.5)' b1096_t n1096_t 0 v = 'nint(-0.6)' b1097_t n1097_t 0 v = 'nint(-1.4)' b1098_t n1098_t 0 v = 'nint(-1.5)' b1099_t n1099_t 0 v = 'nint(-1.6)' b1100_t n1100_t 0 v = 'nint(-2.4)' b1101_t n1101_t 0 v = 'nint(-2.5)' b1102_t n1102_t 0 v = 'nint(-2.6)' v1084_g n1084_g 0 '3' v1085_g n1085_g 0 '2' v1086_g n1086_g 0 '2' v1087_g n1087_g 0 '2' v1088_g n1088_g 0 '2' v1089_g n1089_g 0 '1' v1090_g n1090_g 0 '1' v1091_g n1091_g 0 '0' v1092_g n1092_g 0 '0' v1093_g n1093_g 0 '0' v1094_g n1094_g 0 '0' v1095_g n1095_g 0 '0' v1096_g n1096_g 0 '-1' v1097_g n1097_g 0 '-1' v1098_g n1098_g 0 '-2' v1099_g n1099_g 0 '-2' v1100_g n1100_g 0 '-2' v1101_g n1101_g 0 '-2' v1102_g n1102_g 0 '-3' b1103_t n1103_t 0 v = 'floor(2.1)' b1104_t n1104_t 0 v = 'floor(1.9)' b1105_t n1105_t 0 v = 'floor(0)' b1106_t n1106_t 0 v = 'floor(-1.9)' b1107_t n1107_t 0 v = 'floor(-2.1)' v1103_g n1103_g 0 '2' v1104_g n1104_g 0 '1' v1105_g n1105_g 0 '0' v1106_g n1106_g 0 '-2' v1107_g n1107_g 0 '-3' b1108_t n1108_t 0 v = 'ceil(2.1)' b1109_t n1109_t 0 v = 'ceil(1.9)' b1110_t n1110_t 0 v = 'ceil(0)' b1111_t n1111_t 0 v = 'ceil(-1.9)' b1112_t n1112_t 0 v = 'ceil(-2.1)' v1108_g n1108_g 0 '3' v1109_g n1109_g 0 '2' v1110_g n1110_g 0 '0' v1111_g n1111_g 0 '-1' v1112_g n1112_g 0 '-2' * ---------------------------------------- * min(a,b) max(a,b) b1113_t n1113_t 0 v = 'min(1.1, 2.1)' b1114_t n1114_t 0 v = 'min(2.1, 1.1)' v1113_g n1113_g 0 '1.1' v1114_g n1114_g 0 '1.1' b1115_t n1115_t 0 v = 'max(1.1, 2.1)' b1116_t n1116_t 0 v = 'max(2.1, 1.1)' v1115_g n1115_g 0 '2.1' v1116_g n1116_g 0 '2.1' * ---------------------------------------- b1117_t n1117_t 0 v = 'log10(10.0)' b1118_t n1118_t 0 v = 'log10(0.5)' v1117_g n1117_g 0 '1.0' v1118_g n1118_g 0 '-0.3010299956639812' * ---------------------------------------- b1119_t n1119_t 0 v = 'u(0.01)' b1120_t n1120_t 0 v = 'u(0)' b1121_t n1121_t 0 v = 'u(-0.01)' v1119_g n1119_g 0 '1' v1120_g n1120_g 0 '0.5' v1121_g n1121_g 0 '0' * ---------- b1122_t n1122_t 0 v = 'uramp(0.25)' b1123_t n1123_t 0 v = 'uramp(0)' b1124_t n1124_t 0 v = 'uramp(-1)' v1122_g n1122_g 0 '0.25' v1123_g n1123_g 0 '0' v1124_g n1124_g 0 '0' * ---------- * unary minus b1125_t n1125_t 0 v = '- uramp(42)' v1125_g n1125_g 0 '-42' * ---------- b1126_t n1126_t 0 v = 'u2(-0.25)' b1127_t n1127_t 0 v = 'u2(0)' b1128_t n1128_t 0 v = 'u2(0.25)' b1129_t n1129_t 0 v = 'u2(0.75)' b1130_t n1130_t 0 v = 'u2(1)' b1131_t n1131_t 0 v = 'u2(1.25)' v1126_g n1126_g 0 '0' v1127_g n1127_g 0 '0' v1128_g n1128_g 0 '0.25' v1129_g n1129_g 0 '0.75' v1130_g n1130_g 0 '1' v1131_g n1131_g 0 '1' * ---------- b1132_t n1132_t 0 v = 'pwl(-100, -10, -8, 2, 4, 12, 9, 22, 19)' b1133_t n1133_t 0 v = 'pwl(0.5, -10, -8, 2, 4, 12, 9, 22, 19)' b1134_t n1134_t 0 v = 'pwl(6.0, -10, -8, 2, 4, 12, 9, 22, 19)' b1135_t n1135_t 0 v = 'pwl(100, -10, -8, 2, 4, 12, 9, 22, 19)' v1132_g n1132_g 0 '-98' v1133_g n1133_g 0 '2.5' v1134_g n1134_g 0 '6' v1135_g n1135_g 0 '97' * ---------- b1136_t n1136_t 0 v = 'eq0(-0.25)' b1137_t n1137_t 0 v = 'eq0(0)' b1138_t n1138_t 0 v = 'eq0(0.25)' v1136_g n1136_g 0 '0' v1137_g n1137_g 0 '1' v1138_g n1138_g 0 '0' b1139_t n1139_t 0 v = 'ne0(-0.25)' b1140_t n1140_t 0 v = 'ne0(0)' b1141_t n1141_t 0 v = 'ne0(0.25)' v1139_g n1139_g 0 '1' v1140_g n1140_g 0 '0' v1141_g n1141_g 0 '1' b1142_t n1142_t 0 v = 'gt0(-0.25)' b1143_t n1143_t 0 v = 'gt0(0)' b1144_t n1144_t 0 v = 'gt0(0.25)' v1142_g n1142_g 0 '0' v1143_g n1143_g 0 '0' v1144_g n1144_g 0 '1' b1145_t n1145_t 0 v = 'lt0(-0.25)' b1146_t n1146_t 0 v = 'lt0(0)' b1147_t n1147_t 0 v = 'lt0(0.25)' v1145_g n1145_g 0 '1' v1146_g n1146_g 0 '0' v1147_g n1147_g 0 '0' b1148_t n1148_t 0 v = 'ge0(-0.25)' b1149_t n1149_t 0 v = 'ge0(0)' b1150_t n1150_t 0 v = 'ge0(0.25)' v1148_g n1148_g 0 '0' v1149_g n1149_g 0 '1' v1150_g n1150_g 0 '1' b1151_t n1151_t 0 v = 'le0(-0.25)' b1152_t n1152_t 0 v = 'le0(0)' b1153_t n1153_t 0 v = 'le0(0.25)' v1151_g n1151_g 0 '1' v1152_g n1152_g 0 '1' v1153_g n1153_g 0 '0' * ---------------------------------------- * special regression test unveils ... * max(a,b) vaux1 n42 0 dc 42.0 b1154_t n1154_t 0 v = max(0, v(n42)) b1155_t n1155_t 0 v = max(v(n42), 0) v1154_g n1154_g 0 '42.0' v1155_g n1155_g 0 '42.0' .control define mismatch(a,b,err) abs(a-b)>err op let total_count = 0 let fail_count = 0 let tests = 1001 + vector(155) foreach n $&tests set n_test = "n{$n}_t" set n_gold = "n{$n}_g" if mismatch(v($n_test), v($n_gold), 1e-9) let v_test = v($n_test) let v_gold = v($n_gold) echo "ERROR, test failure, v($n_test) = $&v_test but should be $&v_gold" let fail_count = fail_count + 1 end let total_count = total_count + 1 end if fail_count > 0 echo "ERROR: $&fail_count of $&total_count tests failed" quit 1 else echo "INFO: $&fail_count of $&total_count tests failed" quit 0 end .endc .end tmpk8ny_4pz/tests/regression/parser/xpressn-1.out0000644000175000017500000000023313546075722022365 0ustar carstencarsten Circuit: * 'xpressn-1' check xpressn.c parser Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 INFO: 0 of 97 tests failed tmpk8ny_4pz/tests/regression/parser/xpressn-1.cir0000644000175000017500000002177013546075722022344 0ustar carstencarsten* 'xpressn-1' check xpressn.c parser * (exec-spice "ngspice -b %s") * (tests-aux-renumber) * ---------------------------------------- * arbitrary tests v1001_t n1001_t 0 '1+2' v1002_t n1002_t 0 '1 + 2 ' v1003_t n1003_t 0 '1+2*3' v1004_t n1004_t 0 '(1?2:3)+100' v1005_t n1005_t 0 '(1>2?2*4:1+2*3)+100' v1001_g n1001_g 0 '3' v1002_g n1002_g 0 '3' v1003_g n1003_g 0 '7' v1004_g n1004_g 0 '102' v1005_g n1005_g 0 '107' v1006_t n1006_t 0 '1-2.1' v1007_t n1007_t 0 '1--1' v1008_t n1008_t 0 '5+2/-4' v1006_g n1006_g 0 '-1.1' v1007_g n1007_g 0 '2' v1008_g n1008_g 0 '4.5' * ---------------------------------------- * boolean operators '&&' '||' '!' * output: 0.0 or 1.0 * input: 0.0 is 'false', everything else is 'true' * --------------- * `&&' operator v1009_t n1009_t 0 '0 && 0' v1010_t n1010_t 0 '0 && 1' v1011_t n1011_t 0 '1 && 0' v1012_t n1012_t 0 '0.1 && 0.2' v1013_t n1013_t 0 '-0.1 && 0.2' v1009_g n1009_g 0 '0' v1010_g n1010_g 0 '0' v1011_g n1011_g 0 '0' v1012_g n1012_g 0 '1' v1013_g n1013_g 0 '1' * --------------- * `||' operator v1014_t n1014_t 0 '0 || 0' v1015_t n1015_t 0 '0 || 0.1' v1016_t n1016_t 0 '-0.1 || 0' v1017_t n1017_t 0 '0.1 || -0.2' v1014_g n1014_g 0 '0' v1015_g n1015_g 0 '1' v1016_g n1016_g 0 '1' v1017_g n1017_g 0 '1' * --------------- * `!' operator v1018_t n1018_t 0 '! 0.0' v1019_t n1019_t 0 '! 0.1' v1020_t n1020_t 0 '! (-0.1)' v1018_g n1018_g 0 '1' v1019_g n1019_g 0 '0' v1020_g n1020_g 0 '0' * ---------------------------------------- * comparison operators * output: 0.0 or 1.0 * ---------- * `>' v1021_t n1021_t 0 '3 > 2' v1022_t n1022_t 0 '2 > 3' v1023_t n1023_t 0 '2 > 2' v1021_g n1021_g 0 '1' v1022_g n1022_g 0 '0' v1023_g n1023_g 0 '0' * ---------- * '<' v1024_t n1024_t 0 '3 < 2' v1025_t n1025_t 0 '2 < 3' v1026_t n1026_t 0 '2 < 2' v1024_g n1024_g 0 '0' v1025_g n1025_g 0 '1' v1026_g n1026_g 0 '0' * ---------- * '<=' v1027_t n1027_t 0 '3 >= 2' v1028_t n1028_t 0 '2 >= 3' v1029_t n1029_t 0 '2 >= 2' v1027_g n1027_g 0 '1' v1028_g n1028_g 0 '0' v1029_g n1029_g 0 '1' * ---------- * '>=' v1030_t n1030_t 0 '3 <= 2' v1031_t n1031_t 0 '2 <= 3' v1032_t n1032_t 0 '2 <= 2' v1030_g n1030_g 0 '0' v1031_g n1031_g 0 '1' v1032_g n1032_g 0 '1' * ---------- * '==' v1033_t n1033_t 0 '3 == 2' v1034_t n1034_t 0 '2 == 3' v1035_t n1035_t 0 '2 == 2' v1033_g n1033_g 0 '0' v1034_g n1034_g 0 '0' v1035_g n1035_g 0 '1' * ---------- * '!=' v1036_t n1036_t 0 '3 != 2' v1037_t n1037_t 0 '2 != 3' v1038_t n1038_t 0 '2 != 2' v1036_g n1036_g 0 '1' v1037_g n1037_g 0 '1' v1038_g n1038_g 0 '0' * ---------------------------------------- * four variants of exponentiation v1039_t n1039_t 0 '2 ^ 3' v1039_g n1039_g 0 '8' v1040_t n1040_t 0 '2 ** 3' v1040_g n1040_g 0 '8' v1041_t n1041_t 0 'pwr(2,3)' v1041_g n1041_g 0 '8' v1042_t n1042_t 0 'pow(2,3)' v1042_g n1042_g 0 '8' * ---------------------------------------- * ternary 'c ? x : y' operator * input: 0.0 is false, everything else is true v1043_t n1043_t 0 ' 0.1 ? 42 : 43' v1044_t n1044_t 0 '-0.1 ? 42 : 43' v1045_t n1045_t 0 ' 0.0 ? 42 : 43' v1043_g n1043_g 0 '42' v1044_g n1044_g 0 '42' v1045_g n1045_g 0 '43' * assoziativity v1046_t n1046_t 0 '1 ? 42 : 1 ? 41 : 40' v1047_t n1047_t 0 '1 ? 42 : 0 ? 41 : 40' v1048_t n1048_t 0 '0 ? 42 : 1 ? 41 : 40' v1049_t n1049_t 0 '0 ? 42 : 0 ? 41 : 40' v1046_g n1046_g 0 '42' v1047_g n1047_g 0 '42' v1048_g n1048_g 0 '41' v1049_g n1049_g 0 '40' * -------------------- * regression tests * these failed in the past, due to incorrect transformations in inpcom.c * was incorrectly transformed --> (3>2)||ternary_fcn((1<4),0.2,0.3) v1050_t n1050_t 0 '(3>2)||(1<4) ? 0.2 : 0.3' v1050_g n1050_g 0 '0.2' * was incorrectly transformed --> controlled_exit() v1051_t n1051_t 0 '(3>2) ? (3+2)*((2>1)?1:1) : 42' v1051_g n1051_g 0 '5' * was incorrectly transformed --> ternary_fcn((3>2),42,(2*2))3 v1052_t n1052_t 0 '(3>2) ? 42 : (2*2)+3' v1052_g n1052_g 0 '42' * ---------------------------------------- * functions v1053_t n1053_t 0 'sin(0.3)' v1054_t n1054_t 0 'cos(0.3)' v1055_t n1055_t 0 'tan(0.3)' v1056_t n1056_t 0 'asin(0.3)' v1057_t n1057_t 0 'acos(0.3)' v1058_t n1058_t 0 'atan(0.3)' v1059_t n1059_t 0 'arctan(0.3)' v1060_t n1060_t 0 'sinh(0.3)' v1061_t n1061_t 0 'cosh(0.3)' v1062_t n1062_t 0 'tanh(0.3)' v1063_t n1063_t 0 'asinh(0.3)' v1064_t n1064_t 0 'acosh(1.3)' v1065_t n1065_t 0 'atanh(0.3)' v1053_g n1053_g 0 '0.29552020666133955' v1054_g n1054_g 0 '0.955336489125606' v1055_g n1055_g 0 '0.30933624960962325' v1056_g n1056_g 0 '0.3046926540153975' v1057_g n1057_g 0 '1.266103672779499' v1058_g n1058_g 0 '0.29145679447786704' v1059_g n1059_g 0 '0.29145679447786704' v1060_g n1060_g 0 '0.3045202934471426' v1061_g n1061_g 0 '1.0453385141288605' v1062_g n1062_g 0 '0.2913126124515909' v1063_g n1063_g 0 '0.2956730475634223' v1064_g n1064_g 0 '0.7564329108569595' v1065_g n1065_g 0 '0.3095196042031116' * ---------- v1066_t n1066_t 0 'exp(2.0)' v1067_t n1067_t 0 'exp(-2.0)' v1066_g n1066_g 0 '7.38905609893065' v1067_g n1067_g 0 '0.1353352832366127' * ---------- v1068_t n1068_t 0 'log(2.0)' v1069_t n1069_t 0 'log(0.5)' v1068_g n1068_g 0 '0.6931471805599453' v1069_g n1069_g 0 '-0.6931471805599453' v1070_t n1070_t 0 'ln(2.0)' v1071_t n1071_t 0 'ln(0.5)' v1070_g n1070_g 0 '0.6931471805599453' v1071_g n1071_g 0 '-0.6931471805599453' * ---------- v1072_t n1072_t 0 'sqrt(2.0)' v1072_g n1072_g 0 '1.4142135623730951' v1073_t n1073_t 0 'sqr(2.0)' v1073_g n1073_g 0 '4.0' * ---------------------------------------- * functions v1074_t n1074_t 0 'abs(2.0)' v1075_t n1075_t 0 'abs(-2.0)' v1074_g n1074_g 0 '2' v1075_g n1075_g 0 '2' v1076_t n1076_t 0 'sgn(2.0)' v1077_t n1077_t 0 'sgn(0.0)' v1078_t n1078_t 0 'sgn(-2.0)' v1076_g n1076_g 0 '1' v1077_g n1077_g 0 '0' v1078_g n1078_g 0 '-1' v1079_t n1079_t 0 'int(2.1)' v1080_t n1080_t 0 'int(1.9)' v1081_t n1081_t 0 'int(0)' v1082_t n1082_t 0 'int(-1.9)' v1083_t n1083_t 0 'int(-2.1)' v1079_g n1079_g 0 '2' v1080_g n1080_g 0 '1' v1081_g n1081_g 0 '0' v1082_g n1082_g 0 '-1' v1083_g n1083_g 0 '-2' v1084_t n1084_t 0 'nint(2.6)' v1085_t n1085_t 0 'nint(2.5)' v1086_t n1086_t 0 'nint(2.4)' v1087_t n1087_t 0 'nint(1.6)' v1088_t n1088_t 0 'nint(1.5)' v1089_t n1089_t 0 'nint(1.4)' v1090_t n1090_t 0 'nint(0.6)' v1091_t n1091_t 0 'nint(0.5)' v1092_t n1092_t 0 'nint(0.4)' v1093_t n1093_t 0 'nint(0)' v1094_t n1094_t 0 'nint(-0.4)' v1095_t n1095_t 0 'nint(-0.5)' v1096_t n1096_t 0 'nint(-0.6)' v1097_t n1097_t 0 'nint(-1.4)' v1098_t n1098_t 0 'nint(-1.5)' v1099_t n1099_t 0 'nint(-1.6)' v1100_t n1100_t 0 'nint(-2.4)' v1101_t n1101_t 0 'nint(-2.5)' v1102_t n1102_t 0 'nint(-2.6)' v1084_g n1084_g 0 '3' v1085_g n1085_g 0 '2' v1086_g n1086_g 0 '2' v1087_g n1087_g 0 '2' v1088_g n1088_g 0 '2' v1089_g n1089_g 0 '1' v1090_g n1090_g 0 '1' v1091_g n1091_g 0 '0' v1092_g n1092_g 0 '0' v1093_g n1093_g 0 '0' v1094_g n1094_g 0 '0' v1095_g n1095_g 0 '0' v1096_g n1096_g 0 '-1' v1097_g n1097_g 0 '-1' v1098_g n1098_g 0 '-2' v1099_g n1099_g 0 '-2' v1100_g n1100_g 0 '-2' v1101_g n1101_g 0 '-2' v1102_g n1102_g 0 '-3' v1103_t n1103_t 0 'floor(2.1)' v1104_t n1104_t 0 'floor(1.9)' v1105_t n1105_t 0 'floor(0)' v1106_t n1106_t 0 'floor(-1.9)' v1107_t n1107_t 0 'floor(-2.1)' v1103_g n1103_g 0 '2' v1104_g n1104_g 0 '1' v1105_g n1105_g 0 '0' v1106_g n1106_g 0 '-2' v1107_g n1107_g 0 '-3' v1108_t n1108_t 0 'ceil(2.1)' v1109_t n1109_t 0 'ceil(1.9)' v1110_t n1110_t 0 'ceil(0)' v1111_t n1111_t 0 'ceil(-1.9)' v1112_t n1112_t 0 'ceil(-2.1)' v1108_g n1108_g 0 '3' v1109_g n1109_g 0 '2' v1110_g n1110_g 0 '0' v1111_g n1111_g 0 '-1' v1112_g n1112_g 0 '-2' * ---------------------------------------- * min(a,b) max(a,b) v1113_t n1113_t 0 'min(1.1, 2.1)' v1114_t n1114_t 0 'min(2.1, 1.1)' v1113_g n1113_g 0 '1.1' v1114_g n1114_g 0 '1.1' v1115_t n1115_t 0 'max(1.1, 2.1)' v1116_t n1116_t 0 'max(2.1, 1.1)' v1115_g n1115_g 0 '2.1' v1116_g n1116_g 0 '2.1' * ---------------------------------------- v1117_t n1117_t 0 'log10(10.0)' v1118_t n1118_t 0 'log10(0.5)' v1117_g n1117_g 0 '1.0' v1118_g n1118_g 0 '-0.3010299956639812' * ---------------------------------------- .control define mismatch(a,b,err) abs(a-b)>err op let total_count = 0 let fail_count = 0 let tests = 1001 + vector(118) foreach n $&tests set n_test = "n{$n}_t" set n_gold = "n{$n}_g" if mismatch(v($n_test), v($n_gold), 1e-9) let v_test = v($n_test) let v_gold = v($n_gold) echo "ERROR, test failure, v($n_test) = $&v_test but should be $&v_gold" let fail_count = fail_count + 1 end let total_count = total_count + 1 end if fail_count > 0 echo "ERROR: $&fail_count of $&total_count tests failed" quit 1 else echo "INFO: $&fail_count of $&total_count tests failed" quit 0 end .endc .end tmpk8ny_4pz/tests/regression/parser/xpressn-3.out0000644000175000017500000000023213546075722022366 0ustar carstencarsten Circuit: * 'xpressn-3' check nint/floor/ceil Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 INFO: 0 of 29 tests failed tmpk8ny_4pz/tests/regression/parser/bxpressn-1.out0000644000175000017500000000022513546075722022530 0ustar carstencarsten Circuit: * 'bxpressn-1' check b parser Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 INFO: 0 of 153 tests failed tmpk8ny_4pz/tests/regression/parser/xpressn-3.cir0000644000175000017500000000727513546075722022352 0ustar carstencarsten* 'xpressn-3' check nint/floor/ceil * (exec-spice "ngspice -b %s" t) .subckt test_nint g n b value=0 gold=0 vg g 0 dc = 'gold' vn n 0 dc = 'nint(value)' v1 1 0 dc = 'value' b1 b 0 v = nint(v(1)) vid id 0 dc = 1 .ends .subckt test_floor g n b value=0 gold=0 vg g 0 dc = 'gold' vn n 0 dc = 'floor(value)' v1 1 0 dc = 'value' b1 b 0 v = floor(v(1)) vid id 0 dc = 2 .ends .subckt test_ceil g n b value=0 gold=0 vg g 0 dc = 'gold' vn n 0 dc = 'ceil(value)' v1 1 0 dc = 'value' b1 b 0 v = ceil(v(1)) vid id 0 dc = 3 .ends x1084_t n1084_g n1084_n n1084_b test_nint value=2.6 gold=3 x1085_t n1085_g n1085_n n1085_b test_nint value=2.5 gold=2 x1086_t n1086_g n1086_n n1086_b test_nint value=2.4 gold=2 x1087_t n1087_g n1087_n n1087_b test_nint value=1.6 gold=2 x1088_t n1088_g n1088_n n1088_b test_nint value=1.5 gold=2 x1089_t n1089_g n1089_n n1089_b test_nint value=1.4 gold=1 x1090_t n1090_g n1090_n n1090_b test_nint value=0.6 gold=1 x1091_t n1091_g n1091_n n1091_b test_nint value=0.5 gold=0 x1092_t n1092_g n1092_n n1092_b test_nint value=0.4 gold=0 x1093_t n1093_g n1093_n n1093_b test_nint value=0 gold=0 x1094_t n1094_g n1094_n n1094_b test_nint value=-0.4 gold=0 x1095_t n1095_g n1095_n n1095_b test_nint value=-0.5 gold=0 x1096_t n1096_g n1096_n n1096_b test_nint value=-0.6 gold=-1 x1097_t n1097_g n1097_n n1097_b test_nint value=-1.4 gold=-1 x1098_t n1098_g n1098_n n1098_b test_nint value=-1.5 gold=-2 x1099_t n1099_g n1099_n n1099_b test_nint value=-1.6 gold=-2 x1100_t n1100_g n1100_n n1100_b test_nint value=-2.4 gold=-2 x1101_t n1101_g n1101_n n1101_b test_nint value=-2.5 gold=-2 x1102_t n1102_g n1102_n n1102_b test_nint value=-2.6 gold=-3 x1103_t n1103_g n1103_n n1103_b test_floor value=2.1 gold=2 x1104_t n1104_g n1104_n n1104_b test_floor value=1.9 gold=1 x1105_t n1105_g n1105_n n1105_b test_floor value=0 gold=0 x1106_t n1106_g n1106_n n1106_b test_floor value=-1.9 gold=-2 x1107_t n1107_g n1107_n n1107_b test_floor value=-2.1 gold=-3 x1108_t n1108_g n1108_n n1108_b test_ceil value=2.1 gold=3 x1109_t n1109_g n1109_n n1109_b test_ceil value=1.9 gold=2 x1110_t n1110_g n1110_n n1110_b test_ceil value=0 gold=0 x1111_t n1111_g n1111_n n1111_b test_ceil value=-1.9 gold=-1 x1112_t n1112_g n1112_n n1112_b test_ceil value=-2.1 gold=-2 * ---------------------------------------- .control define mismatch(a,b,err) abs(a-b)>err op let total_count = 0 let fail_count = 0 let tests = 1084 + vector(29) foreach n $&tests set n_id = "x{$n}_t.id" set n_value = "x{$n}_t.1" set n_gold = "n{$n}_g" set n_numparm = "n{$n}_n" set n_asrc = "n{$n}_b" if v($n_id) eq 1 let v_control = nint(v($n_value)) else if v($n_id) eq 2 let v_control = floor(v($n_value)) else let v_control = ceil(v($n_value)) end end if mismatch(v($n_numparm), v($n_gold), 1e-9) let v_numparm = v($n_numparm) let v_gold = v($n_gold) echo "ERROR, test failure, $n, v($n_numparm) = $&v_numparm but should be $&v_gold" let fail_count = fail_count + 1 end if mismatch(v($n_asrc), v($n_gold), 1e-9) let v_asrc = v($n_asrc) let v_gold = v($n_gold) echo "ERROR, test failure, $n, v($n_asrc) = $&v_asrc but should be $&v_gold" let fail_count = fail_count + 1 end if mismatch(v_control, v($n_gold), 1e-9) let v_gold = v($n_gold) echo "ERROR, test failure, $n, v_control = $&v_control but should be $&v_gold" let fail_count = fail_count + 1 end let total_count = total_count + 1 end if fail_count > 0 echo "ERROR: $&fail_count of $&total_count tests failed" quit 1 else echo "INFO: $&fail_count of $&total_count tests failed" quit 0 end .endc .end tmpk8ny_4pz/tests/regression/parser/xpressn-2.out0000644000175000017500000000017513546075722022373 0ustar carstencarsten Circuit: check precision of some functions Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 tmpk8ny_4pz/tests/regression/parser/minus-minus.out0000644000175000017500000000030413546075722023010 0ustar carstencarsten Circuit: test dash dash Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 INFO: -- yes we can, print dash dash -- INFO: -- yes we can, print upper and lower case -- tmpk8ny_4pz/tests/Makefile.am0000644000175000017500000000135213546075722016357 0ustar carstencarsten## Process this file with automake to produce Makefile.in ## regression first, then xspice, then the model qua tests SUBDIRS = regression if XSPICE_WANTED SUBDIRS += xspice endif SUBDIRS += \ bsim3 \ bsim4 \ bsimsoi \ hisim \ hisimhv1 \ hisimhv2 DIST_SUBDIRS = \ bsim1 \ bsim2 \ bsim3 \ bsim3soidd \ bsim3soifd \ bsim3soipd \ bsim4 \ bsimsoi \ filters \ general \ hfet \ hisim \ hisimhv1 \ hisimhv2 \ jfet \ mes \ mesa \ mos6 \ polezero \ regression \ resistance \ sensitivity \ transient \ transmission \ vbic \ xspice TESTS_ENVIRONMENT = \ $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ README bin .gitignore MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/transmission/0000755000175000017500000000000013546075722017053 5ustar carstencarstentmpk8ny_4pz/tests/transmission/Makefile.am0000644000175000017500000000054713546075722021115 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = \ cpl_ibm2.cir \ cpl3_4_line.cir \ ltra1_1_line.cir \ ltra2_2_line.cir \ txl1_1_line.cir \ txl2_3_line.cir TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/transmission/cpl3_4_line.out0000644000175000017500000016732513546075722021715 0ustar carstencarstenCircuit: 6.3inch 4 lossy lines cpl model -- r load Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 Warning: vs1: no DC value, transient time 0 value used No. of Data Rows : 1018 6.3inch 4 lossy lines cpl model -- r load Transient Analysis Sun Feb 07 19:00:53 2010 -------------------------------------------------------------------------------- Index time v(2) v(7) v(9) -------------------------------------------------------------------------------- 0 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1 2.000000e-12 0.000000e+00 0.000000e+00 0.000000e+00 2 4.000000e-12 0.000000e+00 0.000000e+00 0.000000e+00 3 8.000000e-12 0.000000e+00 0.000000e+00 0.000000e+00 4 1.600000e-11 0.000000e+00 0.000000e+00 0.000000e+00 5 3.200000e-11 0.000000e+00 0.000000e+00 0.000000e+00 6 6.400000e-11 0.000000e+00 0.000000e+00 0.000000e+00 7 1.140000e-10 0.000000e+00 0.000000e+00 0.000000e+00 8 1.640000e-10 0.000000e+00 0.000000e+00 0.000000e+00 9 2.140000e-10 0.000000e+00 0.000000e+00 0.000000e+00 10 2.640000e-10 0.000000e+00 0.000000e+00 0.000000e+00 11 3.140000e-10 0.000000e+00 0.000000e+00 0.000000e+00 12 3.640000e-10 0.000000e+00 0.000000e+00 0.000000e+00 13 4.140000e-10 0.000000e+00 0.000000e+00 0.000000e+00 14 4.640000e-10 0.000000e+00 0.000000e+00 0.000000e+00 15 5.140000e-10 0.000000e+00 0.000000e+00 0.000000e+00 16 5.640000e-10 0.000000e+00 0.000000e+00 0.000000e+00 17 6.140000e-10 0.000000e+00 0.000000e+00 0.000000e+00 18 6.640000e-10 0.000000e+00 0.000000e+00 0.000000e+00 19 7.140000e-10 0.000000e+00 0.000000e+00 0.000000e+00 20 7.640000e-10 0.000000e+00 0.000000e+00 0.000000e+00 21 8.140000e-10 0.000000e+00 0.000000e+00 0.000000e+00 22 8.640000e-10 0.000000e+00 0.000000e+00 0.000000e+00 23 9.140000e-10 0.000000e+00 0.000000e+00 0.000000e+00 24 9.640000e-10 0.000000e+00 0.000000e+00 0.000000e+00 25 1.014000e-09 0.000000e+00 0.000000e+00 0.000000e+00 26 1.064000e-09 0.000000e+00 0.000000e+00 0.000000e+00 27 1.114000e-09 0.000000e+00 0.000000e+00 0.000000e+00 28 1.164000e-09 0.000000e+00 0.000000e+00 0.000000e+00 29 1.214000e-09 0.000000e+00 0.000000e+00 0.000000e+00 30 1.264000e-09 0.000000e+00 0.000000e+00 0.000000e+00 31 1.314000e-09 0.000000e+00 0.000000e+00 0.000000e+00 32 1.364000e-09 0.000000e+00 0.000000e+00 0.000000e+00 33 1.414000e-09 0.000000e+00 0.000000e+00 0.000000e+00 34 1.464000e-09 0.000000e+00 0.000000e+00 0.000000e+00 35 1.514000e-09 0.000000e+00 0.000000e+00 0.000000e+00 36 1.564000e-09 0.000000e+00 0.000000e+00 0.000000e+00 37 1.614000e-09 0.000000e+00 0.000000e+00 0.000000e+00 38 1.664000e-09 0.000000e+00 0.000000e+00 0.000000e+00 39 1.714000e-09 0.000000e+00 0.000000e+00 0.000000e+00 40 1.764000e-09 0.000000e+00 0.000000e+00 0.000000e+00 41 1.814000e-09 0.000000e+00 0.000000e+00 0.000000e+00 42 1.864000e-09 0.000000e+00 0.000000e+00 0.000000e+00 43 1.914000e-09 0.000000e+00 0.000000e+00 0.000000e+00 44 1.964000e-09 0.000000e+00 0.000000e+00 0.000000e+00 45 2.014000e-09 0.000000e+00 0.000000e+00 0.000000e+00 46 2.064000e-09 0.000000e+00 0.000000e+00 0.000000e+00 47 2.114000e-09 0.000000e+00 0.000000e+00 0.000000e+00 48 2.164000e-09 0.000000e+00 0.000000e+00 0.000000e+00 49 2.214000e-09 0.000000e+00 0.000000e+00 0.000000e+00 50 2.264000e-09 0.000000e+00 0.000000e+00 0.000000e+00 51 2.314000e-09 0.000000e+00 0.000000e+00 0.000000e+00 52 2.364000e-09 0.000000e+00 0.000000e+00 0.000000e+00 53 2.414000e-09 0.000000e+00 0.000000e+00 0.000000e+00 54 2.464000e-09 0.000000e+00 0.000000e+00 0.000000e+00 Index time v(2) v(7) v(9) -------------------------------------------------------------------------------- 55 2.514000e-09 0.000000e+00 0.000000e+00 0.000000e+00 56 2.564000e-09 0.000000e+00 0.000000e+00 0.000000e+00 57 2.614000e-09 0.000000e+00 0.000000e+00 0.000000e+00 58 2.664000e-09 0.000000e+00 0.000000e+00 0.000000e+00 59 2.714000e-09 0.000000e+00 0.000000e+00 0.000000e+00 60 2.764000e-09 0.000000e+00 0.000000e+00 0.000000e+00 61 2.814000e-09 0.000000e+00 0.000000e+00 0.000000e+00 62 2.864000e-09 0.000000e+00 0.000000e+00 0.000000e+00 63 2.914000e-09 0.000000e+00 0.000000e+00 0.000000e+00 64 2.964000e-09 0.000000e+00 0.000000e+00 0.000000e+00 65 3.014000e-09 0.000000e+00 0.000000e+00 0.000000e+00 66 3.064000e-09 0.000000e+00 0.000000e+00 0.000000e+00 67 3.114000e-09 0.000000e+00 0.000000e+00 0.000000e+00 68 3.164000e-09 0.000000e+00 0.000000e+00 0.000000e+00 69 3.214000e-09 0.000000e+00 0.000000e+00 0.000000e+00 70 3.264000e-09 0.000000e+00 0.000000e+00 0.000000e+00 71 3.314000e-09 0.000000e+00 0.000000e+00 0.000000e+00 72 3.364000e-09 0.000000e+00 0.000000e+00 0.000000e+00 73 3.414000e-09 0.000000e+00 0.000000e+00 0.000000e+00 74 3.464000e-09 0.000000e+00 0.000000e+00 0.000000e+00 75 3.514000e-09 0.000000e+00 0.000000e+00 0.000000e+00 76 3.564000e-09 0.000000e+00 0.000000e+00 0.000000e+00 77 3.614000e-09 0.000000e+00 0.000000e+00 0.000000e+00 78 3.664000e-09 0.000000e+00 0.000000e+00 0.000000e+00 79 3.714000e-09 0.000000e+00 0.000000e+00 0.000000e+00 80 3.764000e-09 0.000000e+00 0.000000e+00 0.000000e+00 81 3.814000e-09 0.000000e+00 0.000000e+00 0.000000e+00 82 3.864000e-09 0.000000e+00 0.000000e+00 0.000000e+00 83 3.914000e-09 0.000000e+00 0.000000e+00 0.000000e+00 84 3.964000e-09 0.000000e+00 0.000000e+00 0.000000e+00 85 4.014000e-09 0.000000e+00 0.000000e+00 0.000000e+00 86 4.064000e-09 0.000000e+00 0.000000e+00 0.000000e+00 87 4.114000e-09 0.000000e+00 0.000000e+00 0.000000e+00 88 4.164000e-09 0.000000e+00 0.000000e+00 0.000000e+00 89 4.214000e-09 0.000000e+00 0.000000e+00 0.000000e+00 90 4.264000e-09 0.000000e+00 0.000000e+00 0.000000e+00 91 4.314000e-09 0.000000e+00 0.000000e+00 0.000000e+00 92 4.364000e-09 0.000000e+00 0.000000e+00 0.000000e+00 93 4.414000e-09 0.000000e+00 0.000000e+00 0.000000e+00 94 4.464000e-09 0.000000e+00 0.000000e+00 0.000000e+00 95 4.514000e-09 0.000000e+00 0.000000e+00 0.000000e+00 96 4.564000e-09 0.000000e+00 0.000000e+00 0.000000e+00 97 4.614000e-09 0.000000e+00 0.000000e+00 0.000000e+00 98 4.664000e-09 0.000000e+00 0.000000e+00 0.000000e+00 99 4.714000e-09 0.000000e+00 0.000000e+00 0.000000e+00 100 4.764000e-09 0.000000e+00 0.000000e+00 0.000000e+00 101 4.814000e-09 0.000000e+00 0.000000e+00 0.000000e+00 102 4.864000e-09 0.000000e+00 0.000000e+00 0.000000e+00 103 4.914000e-09 0.000000e+00 0.000000e+00 0.000000e+00 104 4.964000e-09 0.000000e+00 0.000000e+00 0.000000e+00 105 5.014000e-09 0.000000e+00 0.000000e+00 0.000000e+00 106 5.064000e-09 0.000000e+00 0.000000e+00 0.000000e+00 107 5.114000e-09 0.000000e+00 0.000000e+00 0.000000e+00 108 5.164000e-09 0.000000e+00 0.000000e+00 0.000000e+00 109 5.214000e-09 0.000000e+00 0.000000e+00 0.000000e+00 110 5.264000e-09 0.000000e+00 0.000000e+00 0.000000e+00 111 5.314000e-09 0.000000e+00 0.000000e+00 0.000000e+00 112 5.364000e-09 0.000000e+00 0.000000e+00 0.000000e+00 Index time v(2) v(7) v(9) -------------------------------------------------------------------------------- 113 5.414000e-09 0.000000e+00 0.000000e+00 0.000000e+00 114 5.464000e-09 0.000000e+00 0.000000e+00 0.000000e+00 115 5.514000e-09 0.000000e+00 0.000000e+00 0.000000e+00 116 5.564000e-09 0.000000e+00 0.000000e+00 0.000000e+00 117 5.614000e-09 0.000000e+00 0.000000e+00 0.000000e+00 118 5.664000e-09 0.000000e+00 0.000000e+00 0.000000e+00 119 5.714000e-09 0.000000e+00 0.000000e+00 0.000000e+00 120 5.764000e-09 0.000000e+00 0.000000e+00 0.000000e+00 121 5.814000e-09 0.000000e+00 0.000000e+00 0.000000e+00 122 5.864000e-09 0.000000e+00 0.000000e+00 0.000000e+00 123 5.914000e-09 0.000000e+00 0.000000e+00 0.000000e+00 124 5.964000e-09 0.000000e+00 0.000000e+00 0.000000e+00 125 6.014000e-09 0.000000e+00 0.000000e+00 0.000000e+00 126 6.064000e-09 0.000000e+00 0.000000e+00 0.000000e+00 127 6.114000e-09 0.000000e+00 0.000000e+00 0.000000e+00 128 6.164000e-09 0.000000e+00 0.000000e+00 0.000000e+00 129 6.214000e-09 0.000000e+00 0.000000e+00 0.000000e+00 130 6.264000e-09 0.000000e+00 0.000000e+00 0.000000e+00 131 6.314000e-09 0.000000e+00 0.000000e+00 0.000000e+00 132 6.364000e-09 0.000000e+00 0.000000e+00 0.000000e+00 133 6.414000e-09 0.000000e+00 0.000000e+00 0.000000e+00 134 6.464000e-09 0.000000e+00 0.000000e+00 0.000000e+00 135 6.514000e-09 0.000000e+00 0.000000e+00 0.000000e+00 136 6.564000e-09 0.000000e+00 0.000000e+00 0.000000e+00 137 6.614000e-09 0.000000e+00 0.000000e+00 0.000000e+00 138 6.664000e-09 0.000000e+00 0.000000e+00 0.000000e+00 139 6.714000e-09 0.000000e+00 0.000000e+00 0.000000e+00 140 6.764000e-09 0.000000e+00 0.000000e+00 0.000000e+00 141 6.814000e-09 0.000000e+00 0.000000e+00 0.000000e+00 142 6.864000e-09 0.000000e+00 0.000000e+00 0.000000e+00 143 6.914000e-09 0.000000e+00 0.000000e+00 0.000000e+00 144 6.964000e-09 0.000000e+00 0.000000e+00 0.000000e+00 145 7.014000e-09 0.000000e+00 0.000000e+00 0.000000e+00 146 7.064000e-09 0.000000e+00 0.000000e+00 0.000000e+00 147 7.114000e-09 0.000000e+00 0.000000e+00 0.000000e+00 148 7.164000e-09 0.000000e+00 0.000000e+00 0.000000e+00 149 7.214000e-09 0.000000e+00 0.000000e+00 0.000000e+00 150 7.264000e-09 0.000000e+00 0.000000e+00 0.000000e+00 151 7.314000e-09 0.000000e+00 0.000000e+00 0.000000e+00 152 7.364000e-09 0.000000e+00 0.000000e+00 0.000000e+00 153 7.414000e-09 0.000000e+00 0.000000e+00 0.000000e+00 154 7.464000e-09 0.000000e+00 0.000000e+00 0.000000e+00 155 7.514000e-09 0.000000e+00 0.000000e+00 0.000000e+00 156 7.564000e-09 0.000000e+00 0.000000e+00 0.000000e+00 157 7.614000e-09 0.000000e+00 0.000000e+00 0.000000e+00 158 7.664000e-09 0.000000e+00 0.000000e+00 0.000000e+00 159 7.714000e-09 0.000000e+00 0.000000e+00 0.000000e+00 160 7.764000e-09 0.000000e+00 0.000000e+00 0.000000e+00 161 7.814000e-09 0.000000e+00 0.000000e+00 0.000000e+00 162 7.864000e-09 0.000000e+00 0.000000e+00 0.000000e+00 163 7.914000e-09 0.000000e+00 0.000000e+00 0.000000e+00 164 7.964000e-09 0.000000e+00 0.000000e+00 0.000000e+00 165 8.014000e-09 0.000000e+00 0.000000e+00 0.000000e+00 166 8.064000e-09 0.000000e+00 0.000000e+00 0.000000e+00 167 8.114000e-09 0.000000e+00 0.000000e+00 0.000000e+00 168 8.164000e-09 0.000000e+00 0.000000e+00 0.000000e+00 169 8.214000e-09 0.000000e+00 0.000000e+00 0.000000e+00 170 8.264000e-09 0.000000e+00 0.000000e+00 0.000000e+00 Index time v(2) v(7) v(9) -------------------------------------------------------------------------------- 171 8.314000e-09 0.000000e+00 0.000000e+00 0.000000e+00 172 8.364000e-09 0.000000e+00 0.000000e+00 0.000000e+00 173 8.414000e-09 0.000000e+00 0.000000e+00 0.000000e+00 174 8.464000e-09 0.000000e+00 0.000000e+00 0.000000e+00 175 8.514000e-09 0.000000e+00 0.000000e+00 0.000000e+00 176 8.564000e-09 0.000000e+00 0.000000e+00 0.000000e+00 177 8.614000e-09 0.000000e+00 0.000000e+00 0.000000e+00 178 8.664000e-09 0.000000e+00 0.000000e+00 0.000000e+00 179 8.714000e-09 0.000000e+00 0.000000e+00 0.000000e+00 180 8.764000e-09 0.000000e+00 0.000000e+00 0.000000e+00 181 8.814000e-09 0.000000e+00 0.000000e+00 0.000000e+00 182 8.864000e-09 0.000000e+00 0.000000e+00 0.000000e+00 183 8.914000e-09 0.000000e+00 0.000000e+00 0.000000e+00 184 8.964000e-09 0.000000e+00 0.000000e+00 0.000000e+00 185 9.014000e-09 0.000000e+00 0.000000e+00 0.000000e+00 186 9.064000e-09 0.000000e+00 0.000000e+00 0.000000e+00 187 9.114000e-09 0.000000e+00 0.000000e+00 0.000000e+00 188 9.164000e-09 0.000000e+00 0.000000e+00 0.000000e+00 189 9.214000e-09 0.000000e+00 0.000000e+00 0.000000e+00 190 9.264000e-09 0.000000e+00 0.000000e+00 0.000000e+00 191 9.314000e-09 0.000000e+00 0.000000e+00 0.000000e+00 192 9.364000e-09 0.000000e+00 0.000000e+00 0.000000e+00 193 9.414000e-09 0.000000e+00 0.000000e+00 0.000000e+00 194 9.464000e-09 0.000000e+00 0.000000e+00 0.000000e+00 195 9.514000e-09 0.000000e+00 0.000000e+00 0.000000e+00 196 9.564000e-09 0.000000e+00 0.000000e+00 0.000000e+00 197 9.614000e-09 0.000000e+00 0.000000e+00 0.000000e+00 198 9.664000e-09 0.000000e+00 0.000000e+00 0.000000e+00 199 9.714000e-09 0.000000e+00 0.000000e+00 0.000000e+00 200 9.764000e-09 0.000000e+00 0.000000e+00 0.000000e+00 201 9.814000e-09 0.000000e+00 0.000000e+00 0.000000e+00 202 9.864000e-09 0.000000e+00 0.000000e+00 0.000000e+00 203 9.914000e-09 0.000000e+00 0.000000e+00 0.000000e+00 204 9.964000e-09 0.000000e+00 0.000000e+00 0.000000e+00 205 1.001400e-08 0.000000e+00 0.000000e+00 0.000000e+00 206 1.006400e-08 0.000000e+00 0.000000e+00 0.000000e+00 207 1.011400e-08 0.000000e+00 0.000000e+00 0.000000e+00 208 1.016400e-08 0.000000e+00 0.000000e+00 0.000000e+00 209 1.021400e-08 0.000000e+00 0.000000e+00 0.000000e+00 210 1.026400e-08 0.000000e+00 0.000000e+00 0.000000e+00 211 1.031400e-08 0.000000e+00 0.000000e+00 0.000000e+00 212 1.036400e-08 0.000000e+00 0.000000e+00 0.000000e+00 213 1.041400e-08 0.000000e+00 0.000000e+00 0.000000e+00 214 1.046400e-08 0.000000e+00 0.000000e+00 0.000000e+00 215 1.051400e-08 0.000000e+00 0.000000e+00 0.000000e+00 216 1.056400e-08 0.000000e+00 0.000000e+00 0.000000e+00 217 1.061400e-08 0.000000e+00 0.000000e+00 0.000000e+00 218 1.066400e-08 0.000000e+00 0.000000e+00 0.000000e+00 219 1.071400e-08 0.000000e+00 0.000000e+00 0.000000e+00 220 1.076400e-08 0.000000e+00 0.000000e+00 0.000000e+00 221 1.081400e-08 0.000000e+00 0.000000e+00 0.000000e+00 222 1.086400e-08 0.000000e+00 0.000000e+00 0.000000e+00 223 1.091400e-08 0.000000e+00 0.000000e+00 0.000000e+00 224 1.096400e-08 0.000000e+00 0.000000e+00 0.000000e+00 225 1.101400e-08 0.000000e+00 0.000000e+00 0.000000e+00 226 1.106400e-08 0.000000e+00 0.000000e+00 0.000000e+00 227 1.111400e-08 0.000000e+00 0.000000e+00 0.000000e+00 228 1.116400e-08 0.000000e+00 0.000000e+00 0.000000e+00 Index time v(2) v(7) v(9) -------------------------------------------------------------------------------- 229 1.121400e-08 0.000000e+00 0.000000e+00 0.000000e+00 230 1.126400e-08 0.000000e+00 0.000000e+00 0.000000e+00 231 1.131400e-08 0.000000e+00 0.000000e+00 0.000000e+00 232 1.136400e-08 0.000000e+00 0.000000e+00 0.000000e+00 233 1.141400e-08 0.000000e+00 0.000000e+00 0.000000e+00 234 1.146400e-08 0.000000e+00 0.000000e+00 0.000000e+00 235 1.151400e-08 0.000000e+00 0.000000e+00 0.000000e+00 236 1.156400e-08 0.000000e+00 0.000000e+00 0.000000e+00 237 1.161400e-08 0.000000e+00 0.000000e+00 0.000000e+00 238 1.166400e-08 0.000000e+00 0.000000e+00 0.000000e+00 239 1.171400e-08 0.000000e+00 0.000000e+00 0.000000e+00 240 1.176400e-08 0.000000e+00 0.000000e+00 0.000000e+00 241 1.181400e-08 0.000000e+00 0.000000e+00 0.000000e+00 242 1.186400e-08 0.000000e+00 0.000000e+00 0.000000e+00 243 1.191400e-08 0.000000e+00 0.000000e+00 0.000000e+00 244 1.196400e-08 0.000000e+00 0.000000e+00 0.000000e+00 245 1.201400e-08 0.000000e+00 0.000000e+00 0.000000e+00 246 1.206400e-08 0.000000e+00 0.000000e+00 0.000000e+00 247 1.211400e-08 0.000000e+00 0.000000e+00 0.000000e+00 248 1.216400e-08 0.000000e+00 0.000000e+00 0.000000e+00 249 1.221400e-08 0.000000e+00 0.000000e+00 0.000000e+00 250 1.226400e-08 0.000000e+00 0.000000e+00 0.000000e+00 251 1.231400e-08 0.000000e+00 0.000000e+00 0.000000e+00 252 1.236400e-08 0.000000e+00 0.000000e+00 0.000000e+00 253 1.241400e-08 0.000000e+00 0.000000e+00 0.000000e+00 254 1.246400e-08 0.000000e+00 0.000000e+00 0.000000e+00 255 1.251400e-08 0.000000e+00 0.000000e+00 0.000000e+00 256 1.256400e-08 0.000000e+00 0.000000e+00 0.000000e+00 257 1.261400e-08 0.000000e+00 0.000000e+00 0.000000e+00 258 1.266400e-08 0.000000e+00 0.000000e+00 0.000000e+00 259 1.271400e-08 0.000000e+00 0.000000e+00 0.000000e+00 260 1.276400e-08 0.000000e+00 0.000000e+00 0.000000e+00 261 1.281400e-08 0.000000e+00 0.000000e+00 0.000000e+00 262 1.286400e-08 0.000000e+00 0.000000e+00 0.000000e+00 263 1.291400e-08 0.000000e+00 0.000000e+00 0.000000e+00 264 1.296400e-08 0.000000e+00 0.000000e+00 0.000000e+00 265 1.301400e-08 0.000000e+00 0.000000e+00 0.000000e+00 266 1.306400e-08 0.000000e+00 0.000000e+00 0.000000e+00 267 1.311400e-08 0.000000e+00 0.000000e+00 0.000000e+00 268 1.316400e-08 0.000000e+00 0.000000e+00 0.000000e+00 269 1.321400e-08 0.000000e+00 0.000000e+00 0.000000e+00 270 1.326400e-08 0.000000e+00 0.000000e+00 0.000000e+00 271 1.331400e-08 0.000000e+00 0.000000e+00 0.000000e+00 272 1.336400e-08 0.000000e+00 0.000000e+00 0.000000e+00 273 1.341400e-08 0.000000e+00 0.000000e+00 0.000000e+00 274 1.346400e-08 0.000000e+00 0.000000e+00 0.000000e+00 275 1.351400e-08 0.000000e+00 0.000000e+00 0.000000e+00 276 1.356400e-08 0.000000e+00 0.000000e+00 0.000000e+00 277 1.361400e-08 0.000000e+00 0.000000e+00 0.000000e+00 278 1.366400e-08 0.000000e+00 0.000000e+00 0.000000e+00 279 1.371400e-08 0.000000e+00 0.000000e+00 0.000000e+00 280 1.376400e-08 0.000000e+00 0.000000e+00 0.000000e+00 281 1.381400e-08 0.000000e+00 0.000000e+00 0.000000e+00 282 1.386400e-08 0.000000e+00 0.000000e+00 0.000000e+00 283 1.391400e-08 0.000000e+00 0.000000e+00 0.000000e+00 284 1.396400e-08 0.000000e+00 0.000000e+00 0.000000e+00 285 1.401400e-08 0.000000e+00 0.000000e+00 0.000000e+00 286 1.406400e-08 0.000000e+00 0.000000e+00 0.000000e+00 Index time v(2) v(7) v(9) -------------------------------------------------------------------------------- 287 1.411400e-08 0.000000e+00 0.000000e+00 0.000000e+00 288 1.416400e-08 0.000000e+00 0.000000e+00 0.000000e+00 289 1.421400e-08 0.000000e+00 0.000000e+00 0.000000e+00 290 1.426400e-08 0.000000e+00 0.000000e+00 0.000000e+00 291 1.431400e-08 0.000000e+00 0.000000e+00 0.000000e+00 292 1.436400e-08 0.000000e+00 0.000000e+00 0.000000e+00 293 1.441400e-08 0.000000e+00 0.000000e+00 0.000000e+00 294 1.446400e-08 0.000000e+00 0.000000e+00 0.000000e+00 295 1.451400e-08 0.000000e+00 0.000000e+00 0.000000e+00 296 1.456400e-08 0.000000e+00 0.000000e+00 0.000000e+00 297 1.461400e-08 0.000000e+00 0.000000e+00 0.000000e+00 298 1.466400e-08 0.000000e+00 0.000000e+00 0.000000e+00 299 1.471400e-08 0.000000e+00 0.000000e+00 0.000000e+00 300 1.476400e-08 0.000000e+00 0.000000e+00 0.000000e+00 301 1.481400e-08 0.000000e+00 0.000000e+00 0.000000e+00 302 1.486400e-08 0.000000e+00 0.000000e+00 0.000000e+00 303 1.491400e-08 0.000000e+00 0.000000e+00 0.000000e+00 304 1.496400e-08 0.000000e+00 0.000000e+00 0.000000e+00 305 1.501400e-08 0.000000e+00 0.000000e+00 0.000000e+00 306 1.506400e-08 0.000000e+00 0.000000e+00 0.000000e+00 307 1.511400e-08 0.000000e+00 0.000000e+00 0.000000e+00 308 1.516400e-08 0.000000e+00 0.000000e+00 0.000000e+00 309 1.521400e-08 0.000000e+00 0.000000e+00 0.000000e+00 310 1.526400e-08 0.000000e+00 0.000000e+00 0.000000e+00 311 1.531400e-08 0.000000e+00 0.000000e+00 0.000000e+00 312 1.536400e-08 0.000000e+00 0.000000e+00 0.000000e+00 313 1.541400e-08 0.000000e+00 0.000000e+00 0.000000e+00 314 1.546400e-08 0.000000e+00 0.000000e+00 0.000000e+00 315 1.551400e-08 0.000000e+00 0.000000e+00 0.000000e+00 316 1.556400e-08 0.000000e+00 0.000000e+00 0.000000e+00 317 1.561400e-08 0.000000e+00 0.000000e+00 0.000000e+00 318 1.566400e-08 0.000000e+00 0.000000e+00 0.000000e+00 319 1.571400e-08 0.000000e+00 0.000000e+00 0.000000e+00 320 1.576400e-08 0.000000e+00 0.000000e+00 0.000000e+00 321 1.581400e-08 0.000000e+00 0.000000e+00 0.000000e+00 322 1.586400e-08 0.000000e+00 0.000000e+00 0.000000e+00 323 1.590000e-08 0.000000e+00 0.000000e+00 0.000000e+00 324 1.590500e-08 1.610643e-02 -1.79516e-13 -1.40305e-15 325 1.591500e-08 5.591464e-02 -7.30431e-13 -5.68374e-15 326 1.593500e-08 1.204085e-01 -1.45120e-12 -1.30006e-14 327 1.597500e-08 2.395031e-01 -2.76036e-03 -1.70599e-03 328 1.602500e-08 4.018330e-01 -1.69811e-02 -1.04958e-02 329 1.607500e-08 5.789948e-01 -3.25443e-02 -2.02304e-02 330 1.610000e-08 6.639681e-01 -4.17321e-02 -2.59366e-02 331 1.610500e-08 6.547115e-01 -4.36839e-02 -2.70106e-02 332 1.611500e-08 6.566876e-01 -4.86910e-02 -3.00583e-02 333 1.613500e-08 6.604582e-01 -5.86484e-02 -3.62343e-02 334 1.617500e-08 6.698495e-01 -7.74639e-02 -4.79030e-02 335 1.622500e-08 6.844447e-01 -1.41206e-01 1.789425e-02 336 1.627500e-08 6.957245e-01 -2.22634e-01 1.013900e-01 337 1.632500e-08 7.079473e-01 -2.62334e-01 1.228789e-01 338 1.637500e-08 7.200002e-01 -2.24183e-01 8.811304e-02 339 1.642500e-08 7.314385e-01 -5.95076e-02 2.481736e-02 340 1.647500e-08 7.613273e-01 1.368278e-01 -7.52941e-02 341 1.652500e-08 8.453092e-01 2.773426e-01 -9.65504e-02 342 1.657500e-08 9.433235e-01 3.350071e-01 -6.09638e-02 343 1.662500e-08 1.043384e+00 3.172132e-01 -7.19163e-02 344 1.667500e-08 1.127175e+00 2.997849e-01 -8.27464e-02 Index time v(2) v(7) v(9) -------------------------------------------------------------------------------- 345 1.672500e-08 1.207156e+00 2.803354e-01 -8.95400e-02 346 1.677500e-08 1.338024e+00 2.466900e-01 -7.25811e-02 347 1.682500e-08 1.478888e+00 1.891277e-01 -1.61309e-02 348 1.687500e-08 1.670146e+00 1.259162e-01 5.029616e-02 349 1.692500e-08 1.806794e+00 6.412297e-02 1.151590e-01 350 1.697500e-08 1.876835e+00 1.672713e-02 1.574219e-01 351 1.702500e-08 1.936271e+00 -5.22843e-03 1.592224e-01 352 1.707500e-08 1.986523e+00 -2.05778e-02 1.509182e-01 353 1.712500e-08 2.057081e+00 -1.02635e-02 1.017175e-01 354 1.717500e-08 2.133701e+00 3.299456e-02 -8.72584e-05 355 1.722500e-08 2.203933e+00 7.792676e-02 -1.04010e-01 356 1.727500e-08 2.249980e+00 1.415214e-01 -2.11000e-01 357 1.732500e-08 2.266151e+00 2.046424e-01 -2.36620e-01 358 1.737500e-08 2.275101e+00 2.406524e-01 -1.74763e-01 359 1.742500e-08 2.283318e+00 2.622016e-01 -8.54526e-02 360 1.747500e-08 2.291425e+00 2.681600e-01 -1.64519e-03 361 1.752500e-08 2.331739e+00 2.442623e-01 5.088590e-02 362 1.757500e-08 2.419269e+00 2.179206e-01 7.105093e-02 363 1.762500e-08 2.522950e+00 2.027691e-01 6.890543e-02 364 1.767500e-08 2.656051e+00 1.908591e-01 6.198525e-02 365 1.772500e-08 2.769988e+00 1.793528e-01 5.492904e-02 366 1.777500e-08 2.854552e+00 1.680044e-01 4.813538e-02 367 1.782500e-08 2.931826e+00 1.561381e-01 4.265928e-02 368 1.787500e-08 2.991559e+00 1.414265e-01 4.227724e-02 369 1.792500e-08 3.030539e+00 1.345084e-01 2.978887e-02 370 1.797500e-08 3.050519e+00 1.394413e-01 -1.40353e-03 371 1.802500e-08 3.059880e+00 1.421625e-01 -2.85420e-02 372 1.807500e-08 3.066936e+00 1.515317e-01 -6.59350e-02 373 1.812500e-08 3.075439e+00 1.506938e-01 -8.63641e-02 374 1.817500e-08 3.089775e+00 1.425966e-01 -8.46236e-02 375 1.822500e-08 3.115477e+00 1.525236e-01 -7.60632e-02 376 1.827500e-08 3.153809e+00 1.784995e-01 -5.97645e-02 377 1.832500e-08 3.216954e+00 2.101894e-01 -3.99915e-02 378 1.837500e-08 3.304473e+00 2.372286e-01 -2.22160e-02 379 1.842500e-08 3.386646e+00 2.465541e-01 -1.19303e-02 380 1.847500e-08 3.461973e+00 2.381954e-01 -3.82540e-03 381 1.852500e-08 3.507382e+00 2.184357e-01 1.155871e-02 382 1.857500e-08 3.521677e+00 1.919784e-01 3.616674e-02 383 1.862500e-08 3.529865e+00 1.637964e-01 6.382513e-02 384 1.867500e-08 3.544693e+00 1.389692e-01 8.644409e-02 385 1.872500e-08 3.569950e+00 1.296534e-01 8.431730e-02 386 1.877500e-08 3.605379e+00 1.409642e-01 4.914098e-02 387 1.882500e-08 3.648617e+00 1.594929e-01 2.602292e-03 388 1.887500e-08 3.692104e+00 1.820449e-01 -5.01350e-02 389 1.892500e-08 3.729167e+00 1.944113e-01 -8.60871e-02 390 1.897500e-08 3.756947e+00 1.916246e-01 -9.72020e-02 391 1.902500e-08 3.774521e+00 1.823145e-01 -9.74434e-02 392 1.907500e-08 3.783642e+00 1.702937e-01 -8.92207e-02 393 1.912500e-08 3.800222e+00 1.606136e-01 -6.90235e-02 394 1.917500e-08 3.834705e+00 1.570063e-01 -3.82331e-02 395 1.922500e-08 3.875372e+00 1.594844e-01 -4.54225e-03 396 1.927500e-08 3.922039e+00 1.655238e-01 2.337781e-02 397 1.932500e-08 3.959571e+00 1.696213e-01 3.925232e-02 398 1.937500e-08 3.983550e+00 1.690172e-01 4.348810e-02 399 1.942500e-08 4.006645e+00 1.649684e-01 4.180000e-02 400 1.947500e-08 4.031660e+00 1.594509e-01 3.875895e-02 401 1.952500e-08 4.055479e+00 1.586907e-01 2.749391e-02 402 1.957500e-08 4.076528e+00 1.659395e-01 3.437348e-03 Index time v(2) v(7) v(9) -------------------------------------------------------------------------------- 403 1.962500e-08 4.095091e+00 1.742923e-01 -2.21648e-02 404 1.967500e-08 4.111892e+00 1.818125e-01 -4.61761e-02 405 1.972500e-08 4.127230e+00 1.806506e-01 -5.58978e-02 406 1.977500e-08 4.139712e+00 1.690511e-01 -4.84892e-02 407 1.982500e-08 4.148821e+00 1.551394e-01 -3.71054e-02 408 1.987500e-08 4.156930e+00 1.437193e-01 -2.95295e-02 409 1.992500e-08 4.174218e+00 1.356739e-01 -2.71984e-02 410 1.997500e-08 4.207681e+00 1.305868e-01 -2.80269e-02 411 2.002500e-08 4.249522e+00 1.293329e-01 -2.82645e-02 412 2.007500e-08 4.295153e+00 1.329445e-01 -2.53339e-02 413 2.012500e-08 4.330777e+00 1.401497e-01 -1.87873e-02 414 2.017500e-08 4.349169e+00 1.474671e-01 -9.23244e-03 415 2.022500e-08 4.357401e+00 1.503227e-01 2.199118e-03 416 2.027500e-08 4.361569e+00 1.462369e-01 1.453918e-02 417 2.032500e-08 4.364663e+00 1.399640e-01 2.176381e-02 418 2.037500e-08 4.367990e+00 1.377115e-01 1.822279e-02 419 2.042500e-08 4.372645e+00 1.392489e-01 7.293225e-03 420 2.047500e-08 4.380640e+00 1.448400e-01 -1.03235e-02 421 2.052500e-08 4.393862e+00 1.493332e-01 -2.60387e-02 422 2.057500e-08 4.412250e+00 1.490115e-01 -3.38041e-02 423 2.062500e-08 4.433234e+00 1.460460e-01 -3.71305e-02 424 2.067500e-08 4.452680e+00 1.421069e-01 -3.87232e-02 425 2.072500e-08 4.471401e+00 1.373669e-01 -3.88635e-02 426 2.077500e-08 4.492299e+00 1.313926e-01 -3.68508e-02 427 2.082500e-08 4.512997e+00 1.238201e-01 -3.20962e-02 428 2.087500e-08 4.534036e+00 1.150763e-01 -2.47576e-02 429 2.092500e-08 4.550535e+00 1.070367e-01 -1.56331e-02 430 2.097500e-08 4.559455e+00 1.021415e-01 -5.97625e-03 431 2.102500e-08 4.565257e+00 1.015121e-01 2.801207e-03 432 2.107500e-08 4.571784e+00 1.042229e-01 9.630616e-03 433 2.112500e-08 4.580393e+00 1.097385e-01 1.083644e-02 434 2.117500e-08 4.590765e+00 1.174532e-01 3.597609e-03 435 2.122500e-08 4.601531e+00 1.247640e-01 -8.50411e-03 436 2.127500e-08 4.611029e+00 1.312330e-01 -2.28997e-02 437 2.132500e-08 4.618238e+00 1.343370e-01 -3.34256e-02 438 2.137500e-08 4.623497e+00 1.322188e-01 -3.59087e-02 439 2.142500e-08 4.628129e+00 1.266283e-01 -3.27650e-02 440 2.147500e-08 4.633328e+00 1.195761e-01 -2.71512e-02 441 2.152500e-08 4.641955e+00 1.124248e-01 -2.12590e-02 442 2.157500e-08 4.656161e+00 1.061224e-01 -1.66252e-02 443 2.162500e-08 4.673549e+00 1.011464e-01 -1.40283e-02 444 2.167500e-08 4.693006e+00 9.743557e-02 -1.33744e-02 445 2.172500e-08 4.710784e+00 9.454783e-02 -1.39503e-02 446 2.177500e-08 4.723784e+00 9.206153e-02 -1.48736e-02 447 2.182500e-08 4.733090e+00 8.999719e-02 -1.52248e-02 448 2.187500e-08 4.739905e+00 8.870697e-02 -1.40832e-02 449 2.192500e-08 4.744631e+00 8.942997e-02 -1.26859e-02 450 2.197500e-08 4.747693e+00 9.288358e-02 -1.30016e-02 451 2.202500e-08 4.749780e+00 9.729418e-02 -1.43846e-02 452 2.207500e-08 4.751601e+00 1.013812e-01 -1.71952e-02 453 2.212500e-08 4.753703e+00 1.033370e-01 -1.96512e-02 454 2.217500e-08 4.756527e+00 1.024158e-01 -2.00814e-02 455 2.222500e-08 4.760465e+00 1.001241e-01 -1.97777e-02 456 2.227500e-08 4.765823e+00 9.775686e-02 -1.99207e-02 457 2.232500e-08 4.774120e+00 9.561522e-02 -2.05464e-02 458 2.237500e-08 4.786538e+00 9.352471e-02 -2.12191e-02 459 2.242500e-08 4.801081e+00 9.123730e-02 -2.15011e-02 460 2.247500e-08 4.815836e+00 8.853318e-02 -2.10317e-02 Index time v(2) v(7) v(9) -------------------------------------------------------------------------------- 461 2.252500e-08 4.827659e+00 8.524764e-02 -1.95444e-02 462 2.257500e-08 4.834542e+00 8.136536e-02 -1.70152e-02 463 2.262500e-08 4.837975e+00 7.709385e-02 -1.37801e-02 464 2.267500e-08 4.840096e+00 7.286337e-02 -1.04600e-02 465 2.272500e-08 4.842185e+00 6.998062e-02 -8.77107e-03 466 2.277500e-08 4.844855e+00 6.987783e-02 -1.02716e-02 467 2.282500e-08 4.848372e+00 7.239594e-02 -1.40862e-02 468 2.287500e-08 4.852704e+00 7.684287e-02 -1.92019e-02 469 2.292500e-08 4.857487e+00 8.130427e-02 -2.35038e-02 470 2.297500e-08 4.862139e+00 8.388625e-02 -2.53212e-02 471 2.302500e-08 4.866106e+00 8.433028e-02 -2.52244e-02 472 2.307500e-08 4.869097e+00 8.312876e-02 -2.41356e-02 473 2.312500e-08 4.872086e+00 8.079395e-02 -2.23876e-02 474 2.317500e-08 4.876576e+00 7.776913e-02 -2.01043e-02 475 2.322500e-08 4.882610e+00 7.447639e-02 -1.75795e-02 476 2.327500e-08 4.890076e+00 7.130973e-02 -1.52763e-02 477 2.332500e-08 4.897690e+00 6.855930e-02 -1.36078e-02 478 2.337500e-08 4.904065e+00 6.634178e-02 -1.27506e-02 479 2.342500e-08 4.909370e+00 6.459148e-02 -1.25974e-02 480 2.347500e-08 4.914130e+00 6.312778e-02 -1.28564e-02 481 2.352500e-08 4.918433e+00 6.216668e-02 -1.38777e-02 482 2.357500e-08 4.922094e+00 6.209351e-02 -1.62567e-02 483 2.362500e-08 4.924948e+00 6.264437e-02 -1.94008e-02 484 2.367500e-08 4.927000e+00 6.360445e-02 -2.25914e-02 485 2.372500e-08 4.928436e+00 6.440018e-02 -2.45000e-02 486 2.377500e-08 4.929544e+00 6.448947e-02 -2.41411e-02 487 2.382500e-08 4.930615e+00 6.405930e-02 -2.21918e-02 488 2.387500e-08 4.931893e+00 6.344881e-02 -1.99310e-02 489 2.392500e-08 4.934094e+00 6.276645e-02 -1.82208e-02 490 2.397500e-08 4.938044e+00 6.199769e-02 -1.73273e-02 491 2.402500e-08 4.943493e+00 6.113295e-02 -1.71023e-02 492 2.407500e-08 4.949884e+00 6.017227e-02 -1.72249e-02 493 2.412500e-08 4.956004e+00 5.909190e-02 -1.73749e-02 494 2.417500e-08 4.960691e+00 5.784261e-02 -1.73102e-02 495 2.422500e-08 4.963955e+00 5.637136e-02 -1.68762e-02 496 2.427500e-08 4.966322e+00 5.465670e-02 -1.60160e-02 497 2.432500e-08 4.968177e+00 5.299626e-02 -1.52061e-02 498 2.437500e-08 4.969718e+00 5.187021e-02 -1.52231e-02 499 2.442500e-08 4.971103e+00 5.135893e-02 -1.61982e-02 500 2.447500e-08 4.972513e+00 5.141585e-02 -1.80462e-02 501 2.452500e-08 4.974112e+00 5.166390e-02 -2.00897e-02 502 2.457500e-08 4.975987e+00 5.167953e-02 -2.14695e-02 503 2.462500e-08 4.978092e+00 5.151326e-02 -2.20360e-02 504 2.467500e-08 4.980263e+00 5.138674e-02 -2.20150e-02 505 2.472500e-08 4.982607e+00 5.134036e-02 -2.15798e-02 506 2.477500e-08 4.985429e+00 5.121500e-02 -2.08213e-02 507 2.482500e-08 4.988591e+00 5.079993e-02 -1.98167e-02 508 2.487500e-08 4.991895e+00 4.998260e-02 -1.86533e-02 509 2.492500e-08 4.994861e+00 4.881058e-02 -1.74362e-02 510 2.497500e-08 4.997013e+00 4.745197e-02 -1.62973e-02 511 2.502500e-08 4.998538e+00 4.610110e-02 -1.53757e-02 512 2.507500e-08 4.999945e+00 4.489699e-02 -1.47690e-02 513 2.512500e-08 5.001586e+00 4.404146e-02 -1.47372e-02 514 2.517500e-08 5.003538e+00 4.374118e-02 -1.55887e-02 515 2.522500e-08 5.005666e+00 4.390111e-02 -1.71618e-02 516 2.527500e-08 5.007731e+00 4.431571e-02 -1.91221e-02 517 2.532500e-08 5.009513e+00 4.461259e-02 -2.08670e-02 518 2.537500e-08 5.010898e+00 4.442190e-02 -2.17941e-02 Index time v(2) v(7) v(9) -------------------------------------------------------------------------------- 519 2.542500e-08 5.011903e+00 4.372556e-02 -2.18461e-02 520 2.547500e-08 5.012638e+00 4.275089e-02 -2.13109e-02 521 2.552500e-08 5.013443e+00 4.175341e-02 -2.04774e-02 522 2.557500e-08 5.014769e+00 4.092413e-02 -1.95526e-02 523 2.562500e-08 5.016713e+00 4.035458e-02 -1.86922e-02 524 2.567500e-08 5.019179e+00 4.002245e-02 -1.80102e-02 525 2.572500e-08 5.021784e+00 3.981764e-02 -1.75609e-02 526 2.577500e-08 5.024046e+00 3.960723e-02 -1.73263e-02 527 2.582500e-08 5.025822e+00 3.929404e-02 -1.72265e-02 528 2.587500e-08 5.027213e+00 3.883481e-02 -1.71517e-02 529 2.592500e-08 5.028327e+00 3.831631e-02 -1.71483e-02 530 2.597500e-08 5.029237e+00 3.790605e-02 -1.73991e-02 531 2.602500e-08 5.030017e+00 3.763714e-02 -1.79017e-02 532 2.607500e-08 5.030751e+00 3.748038e-02 -1.85816e-02 533 2.612500e-08 5.031502e+00 3.730648e-02 -1.92195e-02 534 2.617500e-08 5.032307e+00 3.696128e-02 -1.95630e-02 535 2.622500e-08 5.033179e+00 3.645686e-02 -1.96313e-02 536 2.627500e-08 5.034124e+00 3.590692e-02 -1.96071e-02 537 2.632500e-08 5.035247e+00 3.539262e-02 -1.96107e-02 538 2.637500e-08 5.036716e+00 3.493648e-02 -1.96429e-02 539 2.642500e-08 5.038488e+00 3.453554e-02 -1.96349e-02 540 2.647500e-08 5.040400e+00 3.418168e-02 -1.95073e-02 541 2.652500e-08 5.042159e+00 3.385716e-02 -1.92097e-02 542 2.657500e-08 5.043465e+00 3.352836e-02 -1.87427e-02 543 2.662500e-08 5.044297e+00 3.315541e-02 -1.81602e-02 544 2.667500e-08 5.044838e+00 3.271534e-02 -1.75507e-02 545 2.672500e-08 5.045286e+00 3.227377e-02 -1.70965e-02 546 2.677500e-08 5.045766e+00 3.196780e-02 -1.70260e-02 547 2.682500e-08 5.046344e+00 3.185424e-02 -1.73899e-02 548 2.687500e-08 5.047044e+00 3.191239e-02 -1.81017e-02 549 2.692500e-08 5.047857e+00 3.201927e-02 -1.89205e-02 550 2.697500e-08 5.048738e+00 3.200723e-02 -1.95511e-02 551 2.702500e-08 5.049616e+00 3.180989e-02 -1.98750e-02 552 2.707500e-08 5.050415e+00 3.145836e-02 -1.99384e-02 553 2.712500e-08 5.051152e+00 3.100296e-02 -1.98216e-02 554 2.717500e-08 5.051949e+00 3.048100e-02 -1.95842e-02 555 2.722500e-08 5.052862e+00 2.992532e-02 -1.92749e-02 556 2.727500e-08 5.053895e+00 2.937634e-02 -1.89434e-02 557 2.732500e-08 5.054951e+00 2.888174e-02 -1.86352e-02 558 2.737500e-08 5.055879e+00 2.848404e-02 -1.83803e-02 559 2.742500e-08 5.056643e+00 2.820286e-02 -1.81870e-02 560 2.747500e-08 5.057309e+00 2.802330e-02 -1.80458e-02 561 2.752500e-08 5.057935e+00 2.793241e-02 -1.79911e-02 562 2.757500e-08 5.058529e+00 2.793466e-02 -1.81034e-02 563 2.762500e-08 5.059067e+00 2.799678e-02 -1.83863e-02 564 2.767500e-08 5.059525e+00 2.806810e-02 -1.87795e-02 565 2.772500e-08 5.059901e+00 2.807382e-02 -1.91498e-02 566 2.777500e-08 5.060217e+00 2.793773e-02 -1.93453e-02 567 2.782500e-08 5.060514e+00 2.765697e-02 -1.93338e-02 568 2.787500e-08 5.060837e+00 2.729472e-02 -1.91982e-02 569 2.792500e-08 5.061257e+00 2.692057e-02 -1.90411e-02 570 2.797500e-08 5.061868e+00 2.657629e-02 -1.89257e-02 571 2.802500e-08 5.062684e+00 2.627409e-02 -1.88705e-02 572 2.807500e-08 5.063648e+00 2.600649e-02 -1.88628e-02 573 2.812500e-08 5.064627e+00 2.575688e-02 -1.88739e-02 574 2.817500e-08 5.065462e+00 2.550903e-02 -1.88708e-02 575 2.822500e-08 5.066078e+00 2.525420e-02 -1.88239e-02 576 2.827500e-08 5.066504e+00 2.499358e-02 -1.87134e-02 Index time v(2) v(7) v(9) -------------------------------------------------------------------------------- 577 2.832500e-08 5.066805e+00 2.475539e-02 -1.85674e-02 578 2.837500e-08 5.067040e+00 2.458974e-02 -1.84665e-02 579 2.842500e-08 5.067252e+00 2.451679e-02 -1.84664e-02 580 2.847500e-08 5.067474e+00 2.452304e-02 -1.85848e-02 581 2.852500e-08 5.067727e+00 2.455841e-02 -1.87790e-02 582 2.857500e-08 5.068021e+00 2.455551e-02 -1.89620e-02 583 2.862500e-08 5.068355e+00 2.448280e-02 -1.90841e-02 584 2.867500e-08 5.068714e+00 2.435069e-02 -1.91498e-02 585 2.872500e-08 5.069107e+00 2.418010e-02 -1.91761e-02 586 2.877500e-08 5.069566e+00 2.398272e-02 -1.91685e-02 587 2.882500e-08 5.070098e+00 2.376155e-02 -1.91231e-02 588 2.887500e-08 5.070677e+00 2.351817e-02 -1.90383e-02 589 2.892500e-08 5.071244e+00 2.325767e-02 -1.89205e-02 590 2.897500e-08 5.071721e+00 2.298996e-02 -1.87852e-02 591 2.902500e-08 5.072084e+00 2.272821e-02 -1.86530e-02 592 2.907500e-08 5.072368e+00 2.248585e-02 -1.85424e-02 593 2.912500e-08 5.072624e+00 2.228568e-02 -1.84834e-02 594 2.917500e-08 5.072883e+00 2.215965e-02 -1.85162e-02 595 2.922500e-08 5.073156e+00 2.211931e-02 -1.86480e-02 596 2.927500e-08 5.073433e+00 2.214995e-02 -1.88507e-02 597 2.932500e-08 5.073698e+00 2.220807e-02 -1.90621e-02 598 2.937500e-08 5.073938e+00 2.223451e-02 -1.92059e-02 599 2.942500e-08 5.074142e+00 2.219285e-02 -1.92464e-02 600 2.947500e-08 5.074313e+00 2.208277e-02 -1.92002e-02 601 2.952500e-08 5.074476e+00 2.192435e-02 -1.91058e-02 602 2.957500e-08 5.074680e+00 2.174138e-02 -1.89981e-02 603 2.962500e-08 5.074960e+00 2.155397e-02 -1.89008e-02 604 2.967500e-08 5.075323e+00 2.137615e-02 -1.88277e-02 605 2.972500e-08 5.075736e+00 2.121490e-02 -1.87837e-02 606 2.977500e-08 5.076143e+00 2.107043e-02 -1.87655e-02 607 2.982500e-08 5.076501e+00 2.093779e-02 -1.87634e-02 608 2.987500e-08 5.076800e+00 2.080944e-02 -1.87645e-02 609 2.992500e-08 5.077045e+00 2.068520e-02 -1.87678e-02 610 2.997500e-08 5.077246e+00 2.057669e-02 -1.87910e-02 611 3.002500e-08 5.077408e+00 2.049252e-02 -1.88446e-02 612 3.007500e-08 5.077541e+00 2.043391e-02 -1.89248e-02 613 3.012500e-08 5.077657e+00 2.039105e-02 -1.90087e-02 614 3.017500e-08 5.077768e+00 2.034562e-02 -1.90625e-02 615 3.022500e-08 5.077887e+00 2.028753e-02 -1.90717e-02 616 3.027500e-08 5.078020e+00 2.021987e-02 -1.90503e-02 617 3.032500e-08 5.078178e+00 2.014889e-02 -1.90214e-02 618 3.037500e-08 5.078379e+00 2.007613e-02 -1.89992e-02 619 3.042500e-08 5.078629e+00 1.999857e-02 -1.89853e-02 620 3.047500e-08 5.078915e+00 1.991212e-02 -1.89735e-02 621 3.052500e-08 5.079206e+00 1.981410e-02 -1.89554e-02 622 3.057500e-08 5.079463e+00 1.970409e-02 -1.89252e-02 623 3.062500e-08 5.079664e+00 1.958400e-02 -1.88814e-02 624 3.067500e-08 5.079817e+00 1.945773e-02 -1.88274e-02 625 3.072500e-08 5.079942e+00 1.933487e-02 -1.87771e-02 626 3.077500e-08 5.080058e+00 1.923131e-02 -1.87555e-02 627 3.082500e-08 5.080176e+00 1.915817e-02 -1.87803e-02 628 3.087500e-08 5.080300e+00 1.911653e-02 -1.88526e-02 629 3.092500e-08 5.080431e+00 1.909541e-02 -1.89531e-02 630 3.097500e-08 5.080564e+00 1.907549e-02 -1.90478e-02 631 3.102500e-08 5.080695e+00 1.904267e-02 -1.91098e-02 632 3.107500e-08 5.080817e+00 1.899455e-02 -1.91321e-02 633 3.112500e-08 5.080931e+00 1.893513e-02 -1.91209e-02 634 3.117500e-08 5.081049e+00 1.886812e-02 -1.90857e-02 Index time v(2) v(7) v(9) -------------------------------------------------------------------------------- 635 3.122500e-08 5.081183e+00 1.879519e-02 -1.90360e-02 636 3.127500e-08 5.081337e+00 1.871732e-02 -1.89807e-02 637 3.132500e-08 5.081502e+00 1.863644e-02 -1.89282e-02 638 3.137500e-08 5.081661e+00 1.855548e-02 -1.88850e-02 639 3.142500e-08 5.081803e+00 1.847749e-02 -1.88549e-02 640 3.147500e-08 5.081928e+00 1.840427e-02 -1.88380e-02 641 3.152500e-08 5.082046e+00 1.833835e-02 -1.88355e-02 642 3.157500e-08 5.082160e+00 1.828455e-02 -1.88530e-02 643 3.162500e-08 5.082269e+00 1.824500e-02 -1.88928e-02 644 3.167500e-08 5.082372e+00 1.821698e-02 -1.89497e-02 645 3.172500e-08 5.082462e+00 1.819225e-02 -1.90099e-02 646 3.177500e-08 5.082540e+00 1.815937e-02 -1.90548e-02 647 3.182500e-08 5.082608e+00 1.811170e-02 -1.90729e-02 648 3.187500e-08 5.082665e+00 1.805312e-02 -1.90665e-02 649 3.190000e-08 5.082697e+00 1.801929e-02 -1.90562e-02 650 3.190500e-08 5.066600e+00 1.801076e-02 -1.90519e-02 651 3.191500e-08 5.046241e+00 1.800251e-02 -1.90524e-02 652 3.193500e-08 4.976481e+00 1.797527e-02 -1.90438e-02 653 3.197500e-08 4.847652e+00 2.079300e-02 -1.72538e-02 654 3.202500e-08 4.694909e+00 3.445427e-02 -8.78484e-03 655 3.207500e-08 4.527276e+00 4.953481e-02 6.032849e-04 656 3.210000e-08 4.442119e+00 5.957219e-02 6.853044e-03 657 3.210500e-08 4.432100e+00 6.253816e-02 8.819579e-03 658 3.211500e-08 4.430431e+00 6.741855e-02 1.176556e-02 659 3.213500e-08 4.426830e+00 7.709699e-02 1.778043e-02 660 3.217500e-08 4.416778e+00 9.649542e-02 2.983306e-02 661 3.222500e-08 4.402834e+00 1.564015e-01 -3.06699e-02 662 3.227500e-08 4.391563e+00 2.405114e-01 -1.18398e-01 663 3.232500e-08 4.379444e+00 2.840613e-01 -1.46472e-01 664 3.237500e-08 4.367490e+00 2.441166e-01 -1.00006e-01 665 3.242500e-08 4.356141e+00 8.091240e-02 -4.26693e-02 666 3.247500e-08 4.329440e+00 -9.90304e-02 4.813828e-02 667 3.252500e-08 4.248910e+00 -2.42149e-01 7.705307e-02 668 3.257500e-08 4.148637e+00 -3.04718e-01 3.842701e-02 669 3.262500e-08 4.050585e+00 -2.87392e-01 4.898967e-02 670 3.267500e-08 3.967157e+00 -2.70469e-01 5.950776e-02 671 3.272500e-08 3.891372e+00 -2.51869e-01 6.655390e-02 672 3.277500e-08 3.759474e+00 -2.20204e-01 5.170690e-02 673 3.282500e-08 3.618370e+00 -1.64100e-01 -3.44662e-03 674 3.287500e-08 3.439636e+00 -1.00439e-01 -7.16425e-02 675 3.292500e-08 3.301769e+00 -3.98166e-02 -1.35636e-01 676 3.297500e-08 3.233540e+00 7.538062e-03 -1.78825e-01 677 3.302500e-08 3.173880e+00 3.023262e-02 -1.82789e-01 678 3.307500e-08 3.125436e+00 4.464055e-02 -1.73924e-01 679 3.312500e-08 3.055933e+00 3.719579e-02 -1.30301e-01 680 3.317500e-08 2.978879e+00 -7.49823e-03 -2.70862e-02 681 3.322500e-08 2.909481e+00 -5.40876e-02 7.860581e-02 682 3.327500e-08 2.862928e+00 -1.10691e-01 1.773949e-01 683 3.332500e-08 2.845890e+00 -1.76335e-01 2.067763e-01 684 3.337500e-08 2.837743e+00 -2.11122e-01 1.483094e-01 685 3.342500e-08 2.829852e+00 -2.30857e-01 6.056722e-02 686 3.347500e-08 2.822021e+00 -2.37959e-01 -2.44472e-02 687 3.352500e-08 2.786258e+00 -2.15375e-01 -7.75295e-02 688 3.357500e-08 2.698340e+00 -1.89025e-01 -9.87707e-02 689 3.362500e-08 2.594253e+00 -1.73866e-01 -9.74214e-02 690 3.367500e-08 2.469730e+00 -1.62500e-01 -9.03917e-02 691 3.372500e-08 2.355108e+00 -1.51372e-01 -8.34687e-02 692 3.377500e-08 2.270376e+00 -1.40381e-01 -7.68317e-02 Index time v(2) v(7) v(9) -------------------------------------------------------------------------------- 693 3.382500e-08 2.194399e+00 -1.28903e-01 -7.14482e-02 694 3.387500e-08 2.135469e+00 -1.14801e-01 -7.07790e-02 695 3.392500e-08 2.096255e+00 -1.06754e-01 -6.07970e-02 696 3.397500e-08 2.076300e+00 -1.12811e-01 -2.84570e-02 697 3.402500e-08 2.067022e+00 -1.16674e-01 -1.26443e-04 698 3.407500e-08 2.060243e+00 -1.22871e-01 3.149146e-02 699 3.412500e-08 2.052091e+00 -1.22839e-01 5.258694e-02 700 3.417500e-08 2.038449e+00 -1.14318e-01 5.104562e-02 701 3.422500e-08 2.013723e+00 -1.23978e-01 4.246766e-02 702 3.427500e-08 1.976094e+00 -1.49175e-01 2.687568e-02 703 3.432500e-08 1.915684e+00 -1.79665e-01 7.875217e-03 704 3.437500e-08 1.827903e+00 -2.06822e-01 -9.86293e-03 705 3.442500e-08 1.744624e+00 -2.17006e-01 -2.03409e-02 706 3.447500e-08 1.673350e+00 -2.09434e-01 -2.82751e-02 707 3.452500e-08 1.627512e+00 -1.90364e-01 -4.31959e-02 708 3.457500e-08 1.613095e+00 -1.64372e-01 -6.75960e-02 709 3.462500e-08 1.605328e+00 -1.36403e-01 -9.54356e-02 710 3.467500e-08 1.591020e+00 -1.11719e-01 -1.18335e-01 711 3.472500e-08 1.566690e+00 -1.01297e-01 -1.18503e-01 712 3.477500e-08 1.532585e+00 -1.12741e-01 -8.36037e-02 713 3.482500e-08 1.490214e+00 -1.31981e-01 -3.63947e-02 714 3.487500e-08 1.446969e+00 -1.52830e-01 1.311710e-02 715 3.492500e-08 1.409842e+00 -1.65557e-01 4.918970e-02 716 3.497500e-08 1.382005e+00 -1.63259e-01 6.064302e-02 717 3.502500e-08 1.364368e+00 -1.54351e-01 6.109123e-02 718 3.507500e-08 1.355209e+00 -1.42529e-01 5.332024e-02 719 3.512500e-08 1.340292e+00 -1.32959e-01 3.356869e-02 720 3.517500e-08 1.306007e+00 -1.29083e-01 3.144254e-03 721 3.522500e-08 1.264870e+00 -1.30907e-01 -3.02186e-02 722 3.527500e-08 1.220950e+00 -1.36626e-01 -5.81547e-02 723 3.532500e-08 1.183816e+00 -1.40894e-01 -7.43550e-02 724 3.537500e-08 1.160045e+00 -1.40579e-01 -7.89150e-02 725 3.542500e-08 1.137297e+00 -1.36787e-01 -7.73746e-02 726 3.547500e-08 1.112483e+00 -1.31488e-01 -7.43964e-02 727 3.552500e-08 1.088810e+00 -1.30221e-01 -6.43244e-02 728 3.557500e-08 1.067889e+00 -1.37684e-01 -4.02831e-02 729 3.562500e-08 1.049538e+00 -1.46665e-01 -1.40182e-02 730 3.567500e-08 1.033156e+00 -1.53381e-01 8.347621e-03 731 3.572500e-08 1.018180e+00 -1.52428e-01 1.806906e-02 732 3.577500e-08 1.005852e+00 -1.41131e-01 1.081998e-02 733 3.582500e-08 9.968515e-01 -1.27352e-01 -6.71968e-04 734 3.587500e-08 9.889574e-01 -1.16003e-01 -8.44985e-03 735 3.592500e-08 9.729086e-01 -1.08028e-01 -1.09787e-02 736 3.597500e-08 9.398982e-01 -1.02956e-01 -1.02185e-02 737 3.602500e-08 8.979075e-01 -1.01685e-01 -9.93080e-03 738 3.607500e-08 8.538182e-01 -1.05178e-01 -1.27305e-02 739 3.612500e-08 8.183880e-01 -1.12149e-01 -1.89986e-02 740 3.617500e-08 7.998208e-01 -1.19365e-01 -2.82583e-02 741 3.622500e-08 7.915388e-01 -1.22402e-01 -3.95148e-02 742 3.627500e-08 7.874274e-01 -1.18632e-01 -5.17852e-02 743 3.632500e-08 7.844469e-01 -1.12179e-01 -5.97238e-02 744 3.637500e-08 7.812546e-01 -1.09988e-01 -5.64109e-02 745 3.642500e-08 7.768113e-01 -1.11783e-01 -4.53376e-02 746 3.647500e-08 7.691331e-01 -1.16770e-01 -2.89526e-02 747 3.652500e-08 7.562939e-01 -1.21211e-01 -1.35707e-02 748 3.657500e-08 7.383215e-01 -1.21062e-01 -5.76854e-03 749 3.662500e-08 7.176563e-01 -1.18251e-01 -2.42852e-03 750 3.667500e-08 6.983276e-01 -1.14455e-01 -8.37663e-04 Index time v(2) v(7) v(9) -------------------------------------------------------------------------------- 751 3.672500e-08 6.801397e-01 -1.09875e-01 -6.64706e-04 752 3.677500e-08 6.593413e-01 -1.04088e-01 -2.59640e-03 753 3.682500e-08 6.384258e-01 -9.67102e-02 -7.25491e-03 754 3.687500e-08 6.182835e-01 -8.80934e-02 -1.45216e-02 755 3.692500e-08 6.020954e-01 -8.00914e-02 -2.36093e-02 756 3.697500e-08 5.932177e-01 -7.51334e-02 -3.32582e-02 757 3.702500e-08 5.875310e-01 -7.43357e-02 -4.20173e-02 758 3.707500e-08 5.811874e-01 -7.68794e-02 -4.88248e-02 759 3.712500e-08 5.727692e-01 -8.20992e-02 -5.04660e-02 760 3.717500e-08 5.625420e-01 -8.98284e-02 -4.34053e-02 761 3.722500e-08 5.518545e-01 -9.73850e-02 -3.11823e-02 762 3.727500e-08 5.423870e-01 -1.03614e-01 -1.74199e-02 763 3.732500e-08 5.351924e-01 -1.06740e-01 -7.06151e-03 764 3.737500e-08 5.299764e-01 -1.04805e-01 -4.46528e-03 765 3.742500e-08 5.254470e-01 -9.93798e-02 -7.51612e-03 766 3.747500e-08 5.204167e-01 -9.24462e-02 -1.31080e-02 767 3.752500e-08 5.123178e-01 -8.53738e-02 -1.90388e-02 768 3.757500e-08 4.984101e-01 -7.91246e-02 -2.37492e-02 769 3.762500e-08 4.810443e-01 -7.41929e-02 -2.64339e-02 770 3.767500e-08 4.622043e-01 -7.05292e-02 -2.71678e-02 771 3.772500e-08 4.447325e-01 -6.77057e-02 -2.66412e-02 772 3.777500e-08 4.317849e-01 -6.52852e-02 -2.57315e-02 773 3.782500e-08 4.224891e-01 -6.32700e-02 -2.53617e-02 774 3.787500e-08 4.156795e-01 -6.20079e-02 -2.64433e-02 775 3.792500e-08 4.109602e-01 -6.25724e-02 -2.79831e-02 776 3.797500e-08 4.079162e-01 -6.59406e-02 -2.76501e-02 777 3.802500e-08 4.058688e-01 -7.04149e-02 -2.60963e-02 778 3.807500e-08 4.041114e-01 -7.43282e-02 -2.36420e-02 779 3.812500e-08 4.020861e-01 -7.62473e-02 -2.14058e-02 780 3.817500e-08 3.993543e-01 -7.53931e-02 -2.10375e-02 781 3.822500e-08 3.955323e-01 -7.31658e-02 -2.13871e-02 782 3.827500e-08 3.903016e-01 -7.08522e-02 -2.12902e-02 783 3.832500e-08 3.823225e-01 -6.87680e-02 -2.06955e-02 784 3.837500e-08 3.701096e-01 -6.67437e-02 -2.00353e-02 785 3.842500e-08 3.555910e-01 -6.45312e-02 -1.97488e-02 786 3.847500e-08 3.411784e-01 -6.19089e-02 -2.02001e-02 787 3.852500e-08 3.295373e-01 -5.87121e-02 -2.16555e-02 788 3.857500e-08 3.226722e-01 -5.49155e-02 -2.41556e-02 789 3.862500e-08 3.192499e-01 -5.07143e-02 -2.73843e-02 790 3.867500e-08 3.171695e-01 -4.65306e-02 -3.07225e-02 791 3.872500e-08 3.151448e-01 -4.35749e-02 -3.25939e-02 792 3.877500e-08 3.125537e-01 -4.34165e-02 -3.12061e-02 793 3.882500e-08 3.091205e-01 -4.59364e-02 -2.73569e-02 794 3.887500e-08 3.048669e-01 -5.02172e-02 -2.24397e-02 795 3.892500e-08 3.001404e-01 -5.45835e-02 -1.82431e-02 796 3.897500e-08 2.955185e-01 -5.71857e-02 -1.64149e-02 797 3.902500e-08 2.915669e-01 -5.76987e-02 -1.64854e-02 798 3.907500e-08 2.885858e-01 -5.65772e-02 -1.75548e-02 799 3.912500e-08 2.857328e-01 -5.43191e-02 -1.92854e-02 800 3.917500e-08 2.813491e-01 -5.13599e-02 -2.15586e-02 801 3.922500e-08 2.753371e-01 -4.81181e-02 -2.40894e-02 802 3.927500e-08 2.681114e-01 -4.49878e-02 -2.64182e-02 803 3.932500e-08 2.607020e-01 -4.22662e-02 -2.81220e-02 804 3.937500e-08 2.544344e-01 -4.00759e-02 -2.90152e-02 805 3.942500e-08 2.491999e-01 -3.83549e-02 -2.91995e-02 806 3.947500e-08 2.444911e-01 -3.69257e-02 -2.89615e-02 807 3.952500e-08 2.402186e-01 -3.59492e-02 -2.80405e-02 808 3.957500e-08 2.365728e-01 -3.58822e-02 -2.57211e-02 Index time v(2) v(7) v(9) -------------------------------------------------------------------------------- 809 3.962500e-08 2.337271e-01 -3.64885e-02 -2.25428e-02 810 3.967500e-08 2.316843e-01 -3.74077e-02 -1.94514e-02 811 3.972500e-08 2.302632e-01 -3.81674e-02 -1.76041e-02 812 3.977500e-08 2.291789e-01 -3.82512e-02 -1.79479e-02 813 3.982500e-08 2.281408e-01 -3.78196e-02 -1.98741e-02 814 3.987500e-08 2.269049e-01 -3.72111e-02 -2.21360e-02 815 3.992500e-08 2.248239e-01 -3.65423e-02 -2.38676e-02 816 3.997500e-08 2.209767e-01 -3.57979e-02 -2.47889e-02 817 4.002500e-08 2.155608e-01 -3.49638e-02 -2.50373e-02 818 4.007500e-08 2.093057e-01 -3.40362e-02 -2.49298e-02 819 4.012500e-08 2.032949e-01 -3.29921e-02 -2.47844e-02 820 4.017500e-08 1.986481e-01 -3.17823e-02 -2.48449e-02 821 4.022500e-08 1.954061e-01 -3.03521e-02 -2.52702e-02 822 4.027500e-08 1.930652e-01 -2.86781e-02 -2.61209e-02 823 4.032500e-08 1.912403e-01 -2.70211e-02 -2.69801e-02 824 4.037500e-08 1.897286e-01 -2.58990e-02 -2.70105e-02 825 4.042500e-08 1.883728e-01 -2.54165e-02 -2.60417e-02 826 4.047500e-08 1.869964e-01 -2.54469e-02 -2.42866e-02 827 4.052500e-08 1.854326e-01 -2.56698e-02 -2.23273e-02 828 4.057500e-08 1.835934e-01 -2.56874e-02 -2.09764e-02 829 4.062500e-08 1.815193e-01 -2.55308e-02 -2.04097e-02 830 4.067500e-08 1.793713e-01 -2.54100e-02 -2.04199e-02 831 4.072500e-08 1.770852e-01 -2.53682e-02 -2.08390e-02 832 4.077500e-08 1.743093e-01 -2.52542e-02 -2.15805e-02 833 4.082500e-08 1.711521e-01 -2.48610e-02 -2.25719e-02 834 4.087500e-08 1.679154e-01 -2.40721e-02 -2.37289e-02 835 4.092500e-08 1.650200e-01 -2.29292e-02 -2.49467e-02 836 4.097500e-08 1.629049e-01 -2.15956e-02 -2.60930e-02 837 4.102500e-08 1.614059e-01 -2.02641e-02 -2.70283e-02 838 4.107500e-08 1.600309e-01 -1.90757e-02 -2.76520e-02 839 4.112500e-08 1.584281e-01 -1.82150e-02 -2.77327e-02 840 4.117500e-08 1.565149e-01 -1.79124e-02 -2.69245e-02 841 4.122500e-08 1.544195e-01 -1.80918e-02 -2.53587e-02 842 4.127500e-08 1.523756e-01 -1.85008e-02 -2.34451e-02 843 4.132500e-08 1.506049e-01 -1.87939e-02 -2.17433e-02 844 4.137500e-08 1.492257e-01 -1.86192e-02 -2.08261e-02 845 4.142500e-08 1.482271e-01 -1.79469e-02 -2.07675e-02 846 4.147500e-08 1.475021e-01 -1.69929e-02 -2.12958e-02 847 4.152500e-08 1.467366e-01 -1.60084e-02 -2.21262e-02 848 4.157500e-08 1.454538e-01 -1.51837e-02 -2.30511e-02 849 4.162500e-08 1.435320e-01 -1.46132e-02 -2.39140e-02 850 4.167500e-08 1.411229e-01 -1.42798e-02 -2.46007e-02 851 4.172500e-08 1.385763e-01 -1.40789e-02 -2.50559e-02 852 4.177500e-08 1.363474e-01 -1.38793e-02 -2.52964e-02 853 4.182500e-08 1.345857e-01 -1.35822e-02 -2.54007e-02 854 4.187500e-08 1.332028e-01 -1.31419e-02 -2.54774e-02 855 4.192500e-08 1.320965e-01 -1.26314e-02 -2.54996e-02 856 4.197500e-08 1.311960e-01 -1.22284e-02 -2.52670e-02 857 4.202500e-08 1.304276e-01 -1.19774e-02 -2.47642e-02 858 4.207500e-08 1.297104e-01 -1.18214e-02 -2.41108e-02 859 4.212500e-08 1.289783e-01 -1.16434e-02 -2.35067e-02 860 4.217500e-08 1.281935e-01 -1.13027e-02 -2.31824e-02 861 4.222500e-08 1.273402e-01 -1.08082e-02 -2.31239e-02 862 4.227500e-08 1.264136e-01 -1.02690e-02 -2.31559e-02 863 4.232500e-08 1.253218e-01 -9.76520e-03 -2.31589e-02 864 4.237500e-08 1.238832e-01 -9.31942e-03 -2.31306e-02 865 4.242500e-08 1.221234e-01 -8.92829e-03 -2.31388e-02 866 4.247500e-08 1.202383e-01 -8.58289e-03 -2.32628e-02 Index time v(2) v(7) v(9) -------------------------------------------------------------------------------- 867 4.252500e-08 1.185098e-01 -8.26560e-03 -2.35539e-02 868 4.257500e-08 1.172189e-01 -7.94381e-03 -2.40137e-02 869 4.262500e-08 1.163951e-01 -7.57864e-03 -2.45916e-02 870 4.267500e-08 1.158613e-01 -7.14747e-03 -2.52007e-02 871 4.272500e-08 1.154238e-01 -6.70803e-03 -2.56707e-02 872 4.277500e-08 1.149563e-01 -6.40266e-03 -2.57620e-02 873 4.282500e-08 1.143929e-01 -6.29619e-03 -2.54085e-02 874 4.287500e-08 1.137076e-01 -6.35317e-03 -2.47199e-02 875 4.292500e-08 1.129090e-01 -6.45697e-03 -2.39262e-02 876 4.297500e-08 1.120405e-01 -6.44925e-03 -2.33082e-02 877 4.302500e-08 1.111731e-01 -6.26221e-03 -2.29867e-02 878 4.307500e-08 1.103825e-01 -5.92295e-03 -2.29220e-02 879 4.312500e-08 1.096609e-01 -5.47985e-03 -2.30370e-02 880 4.317500e-08 1.088818e-01 -4.96950e-03 -2.32733e-02 881 4.322500e-08 1.079769e-01 -4.42410e-03 -2.35829e-02 882 4.327500e-08 1.069639e-01 -3.88338e-03 -2.39165e-02 883 4.332500e-08 1.059341e-01 -3.39478e-03 -2.42279e-02 884 4.337500e-08 1.050244e-01 -3.00093e-03 -2.44863e-02 885 4.342500e-08 1.042717e-01 -2.72199e-03 -2.46824e-02 886 4.347500e-08 1.036149e-01 -2.54435e-03 -2.48254e-02 887 4.352500e-08 1.029965e-01 -2.45225e-03 -2.48879e-02 888 4.357500e-08 1.024085e-01 -2.45425e-03 -2.47850e-02 889 4.362500e-08 1.018753e-01 -2.52245e-03 -2.45044e-02 890 4.367500e-08 1.014212e-01 -2.59689e-03 -2.41204e-02 891 4.372500e-08 1.010498e-01 -2.60405e-03 -2.37628e-02 892 4.377500e-08 1.007387e-01 -2.47259e-03 -2.35746e-02 893 4.382500e-08 1.004478e-01 -2.19891e-03 -2.35890e-02 894 4.387500e-08 1.001341e-01 -1.84372e-03 -2.37269e-02 895 4.392500e-08 9.972960e-02 -1.47569e-03 -2.38874e-02 896 4.397500e-08 9.913657e-02 -1.13688e-03 -2.40070e-02 897 4.402500e-08 9.833249e-02 -8.40058e-04 -2.40662e-02 898 4.407500e-08 9.738453e-02 -5.78120e-04 -2.40772e-02 899 4.412500e-08 9.642182e-02 -3.34658e-04 -2.40681e-02 900 4.417500e-08 9.559797e-02 -9.33409e-05 -2.40719e-02 901 4.422500e-08 9.498653e-02 1.550478e-04 -2.41184e-02 902 4.427500e-08 9.456297e-02 4.098530e-04 -2.42276e-02 903 4.432500e-08 9.426456e-02 6.459030e-04 -2.43763e-02 904 4.437500e-08 9.403365e-02 8.116067e-04 -2.44821e-02 905 4.442500e-08 9.382636e-02 8.829778e-04 -2.44843e-02 906 4.447500e-08 9.361018e-02 8.775790e-04 -2.43733e-02 907 4.452500e-08 9.336316e-02 8.442349e-04 -2.41902e-02 908 4.457500e-08 9.307505e-02 8.465075e-04 -2.40157e-02 909 4.462500e-08 9.274776e-02 9.156522e-04 -2.38979e-02 910 4.467500e-08 9.239354e-02 1.042758e-03 -2.38344e-02 911 4.472500e-08 9.200905e-02 1.207844e-03 -2.38092e-02 912 4.477500e-08 9.155904e-02 1.399503e-03 -2.38172e-02 913 4.482500e-08 9.103327e-02 1.614850e-03 -2.38626e-02 914 4.487500e-08 9.046264e-02 1.852529e-03 -2.39473e-02 915 4.492500e-08 8.990750e-02 2.107643e-03 -2.40653e-02 916 4.497500e-08 8.943913e-02 2.370447e-03 -2.42013e-02 917 4.502500e-08 8.908179e-02 2.627923e-03 -2.43352e-02 918 4.507500e-08 8.880232e-02 2.866637e-03 -2.44478e-02 919 4.512500e-08 8.855123e-02 3.065282e-03 -2.45118e-02 920 4.517500e-08 8.829602e-02 3.191051e-03 -2.44850e-02 921 4.522500e-08 8.802780e-02 3.230099e-03 -2.43563e-02 922 4.527500e-08 8.775450e-02 3.199487e-03 -2.41579e-02 923 4.532500e-08 8.749175e-02 3.142297e-03 -2.39519e-02 924 4.537500e-08 8.725474e-02 3.115188e-03 -2.38113e-02 Index time v(2) v(7) v(9) -------------------------------------------------------------------------------- 925 4.542500e-08 8.705221e-02 3.154065e-03 -2.37715e-02 926 4.547500e-08 8.688343e-02 3.260236e-03 -2.38176e-02 927 4.552500e-08 8.672542e-02 3.414571e-03 -2.39121e-02 928 4.557500e-08 8.652769e-02 3.593759e-03 -2.40208e-02 929 4.562500e-08 8.625288e-02 3.777818e-03 -2.41197e-02 930 4.567500e-08 8.589781e-02 3.952649e-03 -2.41948e-02 931 4.572500e-08 8.549317e-02 4.111069e-03 -2.42407e-02 932 4.577500e-08 8.509394e-02 4.252675e-03 -2.42607e-02 933 4.582500e-08 8.474137e-02 4.382291e-03 -2.42641e-02 934 4.587500e-08 8.444596e-02 4.507398e-03 -2.42640e-02 935 4.592500e-08 8.420228e-02 4.629181e-03 -2.42626e-02 936 4.597500e-08 8.400340e-02 4.735818e-03 -2.42421e-02 937 4.602500e-08 8.384286e-02 4.817524e-03 -2.41899e-02 938 4.607500e-08 8.371180e-02 4.874672e-03 -2.41122e-02 939 4.612500e-08 8.359826e-02 4.917360e-03 -2.40322e-02 940 4.617500e-08 8.348921e-02 4.962597e-03 -2.39816e-02 941 4.622500e-08 8.337337e-02 5.019872e-03 -2.39742e-02 942 4.627500e-08 8.324346e-02 5.086259e-03 -2.39967e-02 943 4.632500e-08 8.308952e-02 5.155627e-03 -2.40266e-02 944 4.637500e-08 8.289302e-02 5.226419e-03 -2.40497e-02 945 4.642500e-08 8.264676e-02 5.301638e-03 -2.40644e-02 946 4.647500e-08 8.236486e-02 5.385452e-03 -2.40768e-02 947 4.652500e-08 8.207842e-02 5.480671e-03 -2.40952e-02 948 4.657500e-08 8.182549e-02 5.587834e-03 -2.41256e-02 949 4.662500e-08 8.162682e-02 5.705173e-03 -2.41695e-02 950 4.667500e-08 8.147612e-02 5.828878e-03 -2.42239e-02 951 4.672500e-08 8.135327e-02 5.950004e-03 -2.42757e-02 952 4.677500e-08 8.123976e-02 6.052518e-03 -2.42999e-02 953 4.682500e-08 8.112438e-02 6.124419e-03 -2.42773e-02 954 4.687500e-08 8.100251e-02 6.165261e-03 -2.42078e-02 955 4.692500e-08 8.087415e-02 6.186127e-03 -2.41107e-02 956 4.697500e-08 8.074267e-02 6.205502e-03 -2.40187e-02 957 4.702500e-08 8.061361e-02 6.237134e-03 -2.39580e-02 958 4.707500e-08 8.049308e-02 6.283685e-03 -2.39359e-02 959 4.712500e-08 8.038095e-02 6.341458e-03 -2.39469e-02 960 4.717500e-08 8.026513e-02 6.406828e-03 -2.39819e-02 961 4.722500e-08 8.013327e-02 6.478147e-03 -2.40315e-02 962 4.727500e-08 7.998247e-02 6.554401e-03 -2.40869e-02 963 4.732500e-08 7.982092e-02 6.633703e-03 -2.41400e-02 964 4.737500e-08 7.966499e-02 6.713111e-03 -2.41839e-02 965 4.742500e-08 7.952588e-02 6.789609e-03 -2.42150e-02 966 4.747500e-08 7.940230e-02 6.861350e-03 -2.42328e-02 967 4.752500e-08 7.928681e-02 6.926105e-03 -2.42367e-02 968 4.757500e-08 7.917457e-02 6.979002e-03 -2.42208e-02 969 4.762500e-08 7.906610e-02 7.017362e-03 -2.41822e-02 970 4.767500e-08 7.896520e-02 7.044317e-03 -2.41266e-02 971 4.772500e-08 7.887556e-02 7.068294e-03 -2.40680e-02 972 4.777500e-08 7.879844e-02 7.100331e-03 -2.40246e-02 973 4.782500e-08 7.873203e-02 7.146858e-03 -2.40075e-02 974 4.787500e-08 7.867210e-02 7.205626e-03 -2.40143e-02 975 4.792500e-08 7.861069e-02 7.268947e-03 -2.40347e-02 976 4.797500e-08 7.853480e-02 7.329171e-03 -2.40583e-02 977 4.802500e-08 7.843457e-02 7.381891e-03 -2.40790e-02 978 4.807500e-08 7.831016e-02 7.426553e-03 -2.40946e-02 979 4.812500e-08 7.817240e-02 7.465618e-03 -2.41061e-02 980 4.817500e-08 7.803933e-02 7.503083e-03 -2.41156e-02 981 4.822500e-08 7.792586e-02 7.542896e-03 -2.41261e-02 982 4.827500e-08 7.783651e-02 7.587725e-03 -2.41398e-02 Index time v(2) v(7) v(9) -------------------------------------------------------------------------------- 983 4.832500e-08 7.776725e-02 7.637050e-03 -2.41558e-02 984 4.837500e-08 7.771103e-02 7.685822e-03 -2.41672e-02 985 4.842500e-08 7.766106e-02 7.728210e-03 -2.41660e-02 986 4.847500e-08 7.761196e-02 7.761506e-03 -2.41494e-02 987 4.852500e-08 7.755999e-02 7.787397e-03 -2.41211e-02 988 4.857500e-08 7.750329e-02 7.811307e-03 -2.40905e-02 989 4.862500e-08 7.744197e-02 7.838324e-03 -2.40661e-02 990 4.867500e-08 7.737774e-02 7.870073e-03 -2.40507e-02 991 4.872500e-08 7.731158e-02 7.905533e-03 -2.40430e-02 992 4.877500e-08 7.724108e-02 7.943266e-03 -2.40413e-02 993 4.882500e-08 7.716361e-02 7.982409e-03 -2.40453e-02 994 4.887500e-08 7.708015e-02 8.022454e-03 -2.40555e-02 995 4.892500e-08 7.699587e-02 8.062839e-03 -2.40716e-02 996 4.897500e-08 7.691871e-02 8.102863e-03 -2.40924e-02 997 4.902500e-08 7.685413e-02 8.141834e-03 -2.41155e-02 998 4.907500e-08 7.680136e-02 8.179224e-03 -2.41376e-02 999 4.912500e-08 7.675538e-02 8.213936e-03 -2.41547e-02 1000 4.917500e-08 7.671103e-02 8.243376e-03 -2.41610e-02 1001 4.922500e-08 7.666545e-02 8.265311e-03 -2.41523e-02 1002 4.927500e-08 7.661818e-02 8.280026e-03 -2.41295e-02 1003 4.932500e-08 7.657033e-02 8.290837e-03 -2.40988e-02 1004 4.937500e-08 7.652363e-02 8.303202e-03 -2.40698e-02 1005 4.942500e-08 7.647971e-02 8.321740e-03 -2.40509e-02 1006 4.947500e-08 7.643959e-02 8.347801e-03 -2.40446e-02 1007 4.952500e-08 7.640233e-02 8.379804e-03 -2.40487e-02 1008 4.957500e-08 7.636380e-02 8.415024e-03 -2.40589e-02 1009 4.962500e-08 7.631914e-02 8.450894e-03 -2.40713e-02 1010 4.967500e-08 7.626612e-02 8.485444e-03 -2.40829e-02 1011 4.972500e-08 7.620656e-02 8.517338e-03 -2.40921e-02 1012 4.977500e-08 7.614587e-02 8.545896e-03 -2.40985e-02 1013 4.982500e-08 7.608966e-02 8.571133e-03 -2.41028e-02 1014 4.987500e-08 7.604064e-02 8.593740e-03 -2.41061e-02 1015 4.992500e-08 7.599867e-02 8.614437e-03 -2.41092e-02 1016 4.997500e-08 7.596259e-02 8.633010e-03 -2.41104e-02 1017 5.000000e-08 7.594647e-02 8.640902e-03 -2.41089e-02 tmpk8ny_4pz/tests/transmission/txl2_3_line.cir0000644000175000017500000000161213546075722021674 0ustar carstencarstenMOSdriver -- 3 lossy lines TXL model -- C load m5 0 168 2 0 mn0p9 w = 18.0u l=0.9u m6 1 168 2 1 mp1p0 w = 36.0u l=1.0u m1 0 3 4 0 mn0p9 w = 18.0u l=0.9u m2 1 3 4 1 mp1p0 w = 36.0u l=1.0u CN2 2 0 0.025398e-12 CN3 3 0 0.007398e-12 CN4 4 0 0.025398e-12 CN5 5 0 0.007398e-12 CN6 6 0 0.007398e-12 CN7 168 0 0.007398e-12 y1 2 0 3 0 ymod y2 4 0 5 0 ymod y3 6 0 168 0 ymod vdd 1 0 dc 5.0 VS 168 0 PULSE (0 5 15.9NS 0.2NS 0.2NS 15.8NS 32NS ) .OPTION NOACCT .TRAN 0.2N 47N 0 0.1N .PRINT TRAN V(2) V(3) V(4) V(5) V(6) .MODEL mn0p9 NMOS VTO=0.8 KP=48U GAMMA=0.30 PHI=0.55 +LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U .MODEL mp1p0 PMOS VTO=-0.8 KP=21U GAMMA=0.45 PHI=0.61 +LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U .MODEL ymod txl R=12.45 L=8.972e-9 G=0 C=0.468e-12 length=16 .end tmpk8ny_4pz/tests/transmission/cpl_ibm2.out0000644000175000017500000002422213546075722021275 0ustar carstencarstenCircuit: simple coupled transmissionlines Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 Warning: ves: no DC value, transient time 0 value used No. of Data Rows : 217 simple coupled transmissionlines Transient Analysis Sun Feb 07 19:00:52 2010 -------------------------------------------------------------------------------- Index time v(v1) v(v3) -------------------------------------------------------------------------------- 0 0.000000e+00 0.000000e+00 0.000000e+00 1 1.000000e-12 4.253641e-04 -1.99874e-15 2 2.000000e-12 8.508862e-04 -3.99915e-15 3 4.000000e-12 1.701772e-03 -7.99831e-15 4 8.000000e-12 3.403562e-03 -1.59974e-14 5 1.600000e-11 6.806254e-03 -3.19847e-14 6 3.200000e-11 1.361164e-02 -6.39593e-14 7 6.400000e-11 2.722330e-02 -1.27919e-13 8 1.280000e-10 5.444661e-02 -2.55839e-13 9 2.280000e-10 9.698304e-02 -4.55713e-13 10 3.280000e-10 1.395193e-01 -6.55586e-13 11 4.280000e-10 1.820555e-01 -8.55458e-13 12 5.280000e-10 2.245917e-01 -1.05533e-12 13 6.280000e-10 2.670837e-01 -1.25469e-12 14 7.280000e-10 3.096200e-01 -1.45456e-12 15 8.280000e-10 3.521562e-01 8.165704e-04 16 9.280000e-10 3.946924e-01 3.741859e-02 17 1.028000e-09 4.372287e-01 8.251621e-02 18 1.128000e-09 4.798082e-01 1.281325e-01 19 1.228000e-09 5.223445e-01 1.732303e-01 20 1.328000e-09 5.648807e-01 2.185829e-01 21 1.428000e-09 6.074169e-01 2.638859e-01 22 1.500000e-09 6.380430e-01 2.959141e-01 23 1.510000e-09 6.379982e-01 3.003551e-01 24 1.530000e-09 6.379982e-01 3.093746e-01 25 1.570000e-09 6.380102e-01 3.274134e-01 26 1.650000e-09 6.380624e-01 3.634912e-01 27 1.750000e-09 6.399480e-01 4.085892e-01 28 1.850000e-09 6.419275e-01 4.538528e-01 29 1.950000e-09 6.439479e-01 4.988394e-01 30 2.050000e-09 6.459482e-01 5.439321e-01 31 2.150000e-09 6.479620e-01 5.890298e-01 32 2.250000e-09 6.499669e-01 6.341275e-01 33 2.350000e-09 6.519641e-01 6.732024e-01 34 2.450000e-09 6.539632e-01 6.765236e-01 35 2.550000e-09 6.559478e-01 6.757760e-01 36 2.650000e-09 6.579445e-01 6.751314e-01 37 2.750000e-09 6.599443e-01 6.744503e-01 38 2.850000e-09 6.619430e-01 6.737685e-01 39 2.950000e-09 6.639423e-01 6.730791e-01 40 3.050000e-09 6.659417e-01 6.723949e-01 41 3.150000e-09 6.675632e-01 6.717128e-01 42 3.250000e-09 6.679784e-01 6.710292e-01 43 3.350000e-09 6.679316e-01 6.703519e-01 44 3.450000e-09 6.678385e-01 6.696686e-01 45 3.550000e-09 6.677413e-01 6.689855e-01 46 3.650000e-09 6.676444e-01 6.683022e-01 47 3.750000e-09 6.675474e-01 6.676192e-01 48 3.850000e-09 6.674505e-01 6.669359e-01 49 3.950000e-09 6.673540e-01 6.664076e-01 50 4.050000e-09 6.672576e-01 6.663285e-01 51 4.150000e-09 6.671616e-01 6.663320e-01 52 4.250000e-09 6.670654e-01 6.663595e-01 53 4.350000e-09 6.669690e-01 6.663923e-01 54 4.450000e-09 6.668725e-01 6.664237e-01 Index time v(v1) v(v3) -------------------------------------------------------------------------------- 55 4.550000e-09 6.667761e-01 6.664552e-01 56 4.650000e-09 6.666796e-01 6.664868e-01 57 4.750000e-09 6.665953e-01 6.665182e-01 58 4.850000e-09 6.665554e-01 6.665496e-01 59 4.950000e-09 6.665492e-01 6.665808e-01 60 5.050000e-09 6.665528e-01 6.666121e-01 61 5.150000e-09 6.665581e-01 6.666435e-01 62 5.250000e-09 6.665636e-01 6.666749e-01 63 5.350000e-09 6.665690e-01 6.667063e-01 64 5.450000e-09 6.665745e-01 6.667378e-01 65 5.550000e-09 6.665799e-01 6.667641e-01 66 5.650000e-09 6.665854e-01 6.667731e-01 67 5.750000e-09 6.665908e-01 6.667715e-01 68 5.850000e-09 6.665962e-01 6.667688e-01 69 5.950000e-09 6.666016e-01 6.667668e-01 70 6.000000e-09 6.666043e-01 6.667659e-01 71 6.010000e-09 6.623512e-01 6.667658e-01 72 6.030000e-09 6.538053e-01 6.667654e-01 73 6.070000e-09 6.368394e-01 6.667647e-01 74 6.150000e-09 6.028150e-01 6.667633e-01 75 6.250000e-09 5.602840e-01 6.667615e-01 76 6.350000e-09 5.177528e-01 6.667597e-01 77 6.450000e-09 4.752200e-01 6.667580e-01 78 6.550000e-09 4.326850e-01 6.667562e-01 79 6.650000e-09 3.901489e-01 6.667545e-01 80 6.750000e-09 3.475691e-01 6.667527e-01 81 6.850000e-09 3.050326e-01 6.603526e-01 82 6.950000e-09 2.624960e-01 6.185044e-01 83 7.050000e-09 2.199595e-01 5.734047e-01 84 7.150000e-09 1.774230e-01 5.283054e-01 85 7.250000e-09 1.348864e-01 4.832067e-01 86 7.350000e-09 9.234988e-02 4.381088e-01 87 7.450000e-09 4.981334e-02 3.932656e-01 88 7.500000e-09 2.854517e-02 3.713293e-01 89 7.510000e-09 2.858946e-02 3.669088e-01 90 7.530000e-09 2.858939e-02 3.579076e-01 91 7.570000e-09 2.858927e-02 3.398758e-01 92 7.650000e-09 2.820347e-02 3.038038e-01 93 7.750000e-09 2.662883e-02 2.587058e-01 94 7.850000e-09 2.464179e-02 2.136082e-01 95 7.950000e-09 2.264214e-02 1.685106e-01 96 8.050000e-09 2.064256e-02 1.234130e-01 97 8.150000e-09 1.864307e-02 7.831535e-02 98 8.250000e-09 1.665465e-02 3.321773e-02 99 8.350000e-09 1.466686e-02 -6.06555e-03 100 8.450000e-09 1.266845e-02 -9.49006e-03 101 8.550000e-09 1.066913e-02 -8.89781e-03 102 8.650000e-09 8.669789e-03 -8.23487e-03 103 8.750000e-09 6.670455e-03 -7.55819e-03 104 8.850000e-09 4.671120e-03 -6.87489e-03 105 8.950000e-09 2.671785e-03 -6.19163e-03 106 9.050000e-09 6.724503e-04 -5.51284e-03 107 9.150000e-09 -9.63311e-04 -4.83328e-03 108 9.250000e-09 -1.37374e-03 -4.14968e-03 109 9.350000e-09 -1.33094e-03 -3.46676e-03 110 9.450000e-09 -1.24263e-03 -2.78356e-03 111 9.550000e-09 -1.14676e-03 -2.10034e-03 112 9.650000e-09 -1.05027e-03 -1.41712e-03 Index time v(v1) v(v3) -------------------------------------------------------------------------------- 113 9.750000e-09 -9.53785e-04 -7.33903e-04 114 9.850000e-09 -8.57650e-04 -5.06836e-05 115 9.950000e-09 -7.61713e-04 4.834588e-04 116 1.005000e-08 -6.65454e-04 5.593809e-04 117 1.015000e-08 -5.68998e-04 5.575726e-04 118 1.025000e-08 -4.72521e-04 5.324044e-04 119 1.035000e-08 -3.76044e-04 4.999795e-04 120 1.045000e-08 -2.79567e-04 4.684646e-04 121 1.055000e-08 -1.83090e-04 4.370662e-04 122 1.065000e-08 -8.66135e-05 4.057951e-04 123 1.075000e-08 -1.90554e-06 3.745803e-04 124 1.085000e-08 3.809786e-05 3.432148e-04 125 1.095000e-08 4.437435e-05 3.117856e-04 126 1.105000e-08 4.089016e-05 2.803661e-04 127 1.115000e-08 3.576288e-05 2.489538e-04 128 1.125000e-08 3.036042e-05 2.175408e-04 129 1.135000e-08 2.492757e-05 1.861277e-04 130 1.145000e-08 1.950567e-05 1.547147e-04 131 1.155000e-08 1.409754e-05 1.281614e-04 132 1.165000e-08 8.684139e-06 1.192114e-04 133 1.175000e-08 3.258276e-06 1.208217e-04 134 1.185000e-08 -2.17344e-06 1.234484e-04 135 1.195000e-08 -7.60616e-06 1.253448e-04 136 1.205000e-08 -1.30389e-05 1.271274e-04 137 1.215000e-08 -1.84716e-05 1.288982e-04 138 1.225000e-08 -2.39044e-05 1.306558e-04 139 1.235000e-08 -2.89520e-05 1.324079e-04 140 1.245000e-08 -3.22956e-05 1.341633e-04 141 1.255000e-08 -3.35802e-05 1.359238e-04 142 1.265000e-08 -3.37078e-05 1.376858e-04 143 1.275000e-08 -3.34791e-05 1.394476e-04 144 1.285000e-08 -3.31820e-05 1.412092e-04 145 1.295000e-08 -3.28741e-05 1.429707e-04 146 1.305000e-08 -3.25649e-05 1.447323e-04 147 1.315000e-08 -3.22563e-05 1.463348e-04 148 1.325000e-08 -3.19479e-05 1.472613e-04 149 1.335000e-08 -3.16390e-05 1.474635e-04 150 1.345000e-08 -3.13297e-05 1.473559e-04 151 1.355000e-08 -3.10201e-05 1.472216e-04 152 1.365000e-08 -3.07105e-05 1.471105e-04 153 1.375000e-08 -3.04009e-05 1.470083e-04 154 1.385000e-08 -3.00913e-05 1.469077e-04 155 1.395000e-08 -2.97943e-05 1.468077e-04 156 1.405000e-08 -2.95610e-05 1.467078e-04 157 1.415000e-08 -2.94316e-05 1.466076e-04 158 1.425000e-08 -2.93888e-05 1.465073e-04 159 1.435000e-08 -2.93890e-05 1.464069e-04 160 1.445000e-08 -2.94030e-05 1.463066e-04 161 1.455000e-08 -2.94200e-05 1.462062e-04 162 1.465000e-08 -2.94376e-05 1.461058e-04 163 1.475000e-08 -2.94552e-05 1.460107e-04 164 1.485000e-08 -2.94728e-05 1.459409e-04 165 1.495000e-08 -2.94904e-05 1.459094e-04 166 1.505000e-08 -2.95080e-05 1.459054e-04 167 1.515000e-08 -2.95257e-05 1.459113e-04 168 1.525000e-08 -2.95433e-05 1.459182e-04 169 1.535000e-08 -2.95610e-05 1.459244e-04 170 1.545000e-08 -2.95787e-05 1.459302e-04 Index time v(v1) v(v3) -------------------------------------------------------------------------------- 171 1.555000e-08 -2.95959e-05 1.459359e-04 172 1.565000e-08 -2.96108e-05 1.459416e-04 173 1.575000e-08 -2.96209e-05 1.459473e-04 174 1.585000e-08 -2.96259e-05 1.459530e-04 175 1.595000e-08 -2.96272e-05 1.459587e-04 176 1.605000e-08 -2.96269e-05 1.459645e-04 177 1.615000e-08 -2.96261e-05 1.459702e-04 178 1.625000e-08 -2.96251e-05 1.459759e-04 179 1.635000e-08 -2.96241e-05 1.459815e-04 180 1.645000e-08 -2.96231e-05 1.459861e-04 181 1.655000e-08 -2.96221e-05 1.459889e-04 182 1.665000e-08 -2.96211e-05 1.459899e-04 183 1.675000e-08 -2.96201e-05 1.459900e-04 184 1.685000e-08 -2.96191e-05 1.459896e-04 185 1.695000e-08 -2.96181e-05 1.459893e-04 186 1.705000e-08 -2.96171e-05 1.459889e-04 187 1.715000e-08 -2.96161e-05 1.459886e-04 188 1.725000e-08 -2.96152e-05 1.459883e-04 189 1.735000e-08 -2.96145e-05 1.459879e-04 190 1.745000e-08 -2.96140e-05 1.459876e-04 191 1.755000e-08 -2.96139e-05 1.459873e-04 192 1.765000e-08 -2.96138e-05 1.459870e-04 193 1.775000e-08 -2.96139e-05 1.459866e-04 194 1.785000e-08 -2.96139e-05 1.459863e-04 195 1.795000e-08 -2.96140e-05 1.459860e-04 196 1.805000e-08 -2.96140e-05 1.459857e-04 197 1.815000e-08 -2.96141e-05 1.459855e-04 198 1.825000e-08 -2.96141e-05 1.459854e-04 199 1.835000e-08 -2.96142e-05 1.459853e-04 200 1.845000e-08 -2.96142e-05 1.459853e-04 201 1.855000e-08 -2.96143e-05 1.459854e-04 202 1.865000e-08 -2.96144e-05 1.459854e-04 203 1.875000e-08 -2.96144e-05 1.459854e-04 204 1.885000e-08 -2.96145e-05 1.459854e-04 205 1.895000e-08 -2.96145e-05 1.459854e-04 206 1.905000e-08 -2.96145e-05 1.459855e-04 207 1.915000e-08 -2.96146e-05 1.459855e-04 208 1.925000e-08 -2.96146e-05 1.459855e-04 209 1.935000e-08 -2.96146e-05 1.459855e-04 210 1.945000e-08 -2.96146e-05 1.459855e-04 211 1.955000e-08 -2.96146e-05 1.459856e-04 212 1.965000e-08 -2.96146e-05 1.459856e-04 213 1.975000e-08 -2.96146e-05 1.459856e-04 214 1.985000e-08 -2.96146e-05 1.459856e-04 215 1.995000e-08 -2.96146e-05 1.459856e-04 216 2.000000e-08 -2.96146e-05 1.459856e-04 tmpk8ny_4pz/tests/transmission/txl1_1_line.cir0000644000175000017500000000120513546075722021667 0ustar carstencarstenMOSdriver -- lossy line TXL model -- C load m5 0 168 2 0 mn0p9 w = 18.0u l=0.9u m6 1 168 2 1 mp1p0 w = 36.0u l=1.0u CN2 2 0 0.025398e-12 CN3 3 0 0.007398e-12 y1 2 0 3 0 ymod vdd 1 0 dc 5.0 VS 168 0 PULSE (0 5 15.9NS 0.2NS 0.2NS 15.8NS 32NS ) .OPTION NOACCT .TRAN 0.2N 47N 0 0.1N .PRINT TRAN V(2) V(3) .MODEL mn0p9 NMOS VTO=0.8 KP=48U GAMMA=0.30 PHI=0.55 +LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U .MODEL mp1p0 PMOS VTO=-0.8 KP=21U GAMMA=0.45 PHI=0.61 +LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U .MODEL ymod txl R=12.45 L=8.972e-9 G=0 C=0.468e-12 length=16 .end tmpk8ny_4pz/tests/transmission/cpl3_4_line.cir0000644000175000017500000000176413546075722021655 0ustar carstencarsten6.3inch 4 lossy lines CPL model -- R load Ra 1 2 1K Rb 0 3 1K Rc 0 4 1K Rd 0 5 1K Re 6 0 1Meg Rf 7 0 1Meg Rg 8 0 1Meg Rh 9 0 1Meg * P1 2 3 4 5 0 6 7 8 9 0 LOSSYMODE * * VS1 1 0 PWL(15.9NS 0.0 16.1Ns 5.0 31.9Ns 5.0 32.1Ns 0.0) * .OPTION NOACCT .TRAN 0.2NS 50NS 0 0.05N .PRINT TRAN V(2) V(7) V(9) .MODEL LOSSYMODE CPL +R=0.3 0 0 0 + 0.3 0 0 + 0.3 0 + 0.3 +L=9e-9 5.4e-9 0 0 + 9e-9 5.4e-9 0 + 9e-9 5.4e-9 + 9e-9 +G=0 0 0 0 0 0 0 0 0 0 +C=3.5e-13 -3e-14 0 0 + 3.5e-13 -3e-14 0 + 3.5e-13 -3e-14 + 3.5e-13 +length=6.3 .END tmpk8ny_4pz/tests/transmission/cpl_ibm2.cir0000644000175000017500000000055713546075722021250 0ustar carstencarstenSimple coupled transmissionlines VES IN 0 PULSE (0 1 0N 1.5N 1.5N 4.5N 200N) R1 IN V1 50 R2 V2 0 10 p1 V1 V2 0 V3 V4 0 cpl1 .model cpl1 cpl +R = 0.5 0 0.5 +L = 247.3e-9 31.65e-9 + 247.3e-9 +C = 31.4e-12 -2.45e-12 + 31.4e-12 +G = 0 0 0 +length = 0.3048 R3 V3 0 100 R4 V4 0 100 .OPTION NOACCT .TRAN 0.1N 20N .PRINT TRAN V(V1) V(V3) .END tmpk8ny_4pz/tests/transmission/ltra2_2_line.out0000644000175000017500000013523613546075722022072 0ustar carstencarstenCircuit: mosdriver -- 2 lossy lines ltra model -- c load Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 Warning: vs: no DC value, transient time 0 value used No. of Data Rows : 510 mosdriver -- 2 lossy lines ltra model -- c load Transient Analysis Sat Jan 16 17:43:34 2010 -------------------------------------------------------------------------------- Index time v(2) v(3) v(4) -------------------------------------------------------------------------------- 0 0.000000e+00 5.000000e+00 5.000000e+00 1.242558e-09 1 2.000000e-12 5.000000e+00 5.000000e+00 1.242558e-09 2 4.000000e-12 5.000000e+00 5.000000e+00 1.242558e-09 3 8.000000e-12 5.000000e+00 5.000000e+00 1.242558e-09 4 1.600000e-11 5.000000e+00 5.000000e+00 1.242558e-09 5 3.200000e-11 5.000000e+00 5.000000e+00 1.242558e-09 6 6.400000e-11 5.000000e+00 5.000000e+00 1.242558e-09 7 1.280000e-10 5.000000e+00 5.000000e+00 1.242558e-09 8 2.280000e-10 5.000000e+00 5.000000e+00 1.242559e-09 9 3.280000e-10 5.000000e+00 5.000000e+00 1.242559e-09 10 4.280000e-10 5.000000e+00 5.000000e+00 1.242559e-09 11 5.280000e-10 5.000000e+00 5.000000e+00 1.242559e-09 12 6.280000e-10 5.000000e+00 5.000000e+00 1.242559e-09 13 7.280000e-10 5.000000e+00 5.000000e+00 1.242559e-09 14 8.280000e-10 5.000000e+00 5.000000e+00 1.242559e-09 15 9.280000e-10 5.000000e+00 5.000000e+00 1.242559e-09 16 1.028000e-09 5.000000e+00 5.000000e+00 1.242559e-09 17 1.128000e-09 5.000000e+00 5.000000e+00 1.242559e-09 18 1.228000e-09 5.000000e+00 5.000000e+00 1.242559e-09 19 1.328000e-09 5.000000e+00 5.000000e+00 1.242559e-09 20 1.428000e-09 5.000000e+00 5.000000e+00 1.242559e-09 21 1.528000e-09 5.000000e+00 5.000000e+00 1.242559e-09 22 1.628000e-09 5.000000e+00 5.000000e+00 1.242559e-09 23 1.728000e-09 5.000000e+00 5.000000e+00 1.242559e-09 24 1.828000e-09 5.000000e+00 5.000000e+00 1.242559e-09 25 1.928000e-09 5.000000e+00 5.000000e+00 1.242559e-09 26 2.028000e-09 5.000000e+00 5.000000e+00 1.242559e-09 27 2.128000e-09 5.000000e+00 5.000000e+00 1.242559e-09 28 2.228000e-09 5.000000e+00 5.000000e+00 1.242559e-09 29 2.328000e-09 5.000000e+00 5.000000e+00 1.242559e-09 30 2.428000e-09 5.000000e+00 5.000000e+00 1.242559e-09 31 2.528000e-09 5.000000e+00 5.000000e+00 1.242559e-09 32 2.628000e-09 5.000000e+00 5.000000e+00 1.242559e-09 33 2.728000e-09 5.000000e+00 5.000000e+00 1.242559e-09 34 2.828000e-09 5.000000e+00 5.000000e+00 1.242559e-09 35 2.928000e-09 5.000000e+00 5.000000e+00 1.242559e-09 36 3.028000e-09 5.000000e+00 5.000000e+00 1.242559e-09 37 3.128000e-09 5.000000e+00 5.000000e+00 1.242559e-09 38 3.228000e-09 5.000000e+00 5.000000e+00 1.242559e-09 39 3.328000e-09 5.000000e+00 5.000000e+00 1.242559e-09 40 3.428000e-09 5.000000e+00 5.000000e+00 1.242559e-09 41 3.528000e-09 5.000000e+00 5.000000e+00 1.242559e-09 42 3.628000e-09 5.000000e+00 5.000000e+00 1.242559e-09 43 3.728000e-09 5.000000e+00 5.000000e+00 1.242559e-09 44 3.828000e-09 5.000000e+00 5.000000e+00 1.242559e-09 45 3.928000e-09 5.000000e+00 5.000000e+00 1.242559e-09 46 4.028000e-09 5.000000e+00 5.000000e+00 1.242559e-09 47 4.128000e-09 5.000000e+00 5.000000e+00 1.242559e-09 48 4.228000e-09 5.000000e+00 5.000000e+00 1.242559e-09 49 4.328000e-09 5.000000e+00 5.000000e+00 1.242559e-09 50 4.428000e-09 5.000000e+00 5.000000e+00 1.242559e-09 51 4.528000e-09 5.000000e+00 5.000000e+00 1.242559e-09 52 4.628000e-09 5.000000e+00 5.000000e+00 1.242559e-09 53 4.728000e-09 5.000000e+00 5.000000e+00 1.242559e-09 54 4.828000e-09 5.000000e+00 5.000000e+00 1.242559e-09 Index time v(2) v(3) v(4) -------------------------------------------------------------------------------- 55 4.928000e-09 5.000000e+00 5.000000e+00 1.242559e-09 56 5.028000e-09 5.000000e+00 5.000000e+00 1.242559e-09 57 5.128000e-09 5.000000e+00 5.000000e+00 1.242559e-09 58 5.228000e-09 5.000000e+00 5.000000e+00 1.242559e-09 59 5.328000e-09 5.000000e+00 5.000000e+00 1.242559e-09 60 5.428000e-09 5.000000e+00 5.000000e+00 1.242559e-09 61 5.528000e-09 5.000000e+00 5.000000e+00 1.242559e-09 62 5.628000e-09 5.000000e+00 5.000000e+00 1.242559e-09 63 5.728000e-09 5.000000e+00 5.000000e+00 1.242559e-09 64 5.828000e-09 5.000000e+00 5.000000e+00 1.242559e-09 65 5.928000e-09 5.000000e+00 5.000000e+00 1.242559e-09 66 6.028000e-09 5.000000e+00 5.000000e+00 1.242559e-09 67 6.128000e-09 5.000000e+00 5.000000e+00 1.242559e-09 68 6.228000e-09 5.000000e+00 5.000000e+00 1.242559e-09 69 6.328000e-09 5.000000e+00 5.000000e+00 1.242559e-09 70 6.428000e-09 5.000000e+00 5.000000e+00 1.242559e-09 71 6.528000e-09 5.000000e+00 5.000000e+00 1.242559e-09 72 6.628000e-09 5.000000e+00 5.000000e+00 1.242559e-09 73 6.728000e-09 5.000000e+00 5.000000e+00 1.242559e-09 74 6.828000e-09 5.000000e+00 5.000000e+00 1.242559e-09 75 6.928000e-09 5.000000e+00 5.000000e+00 1.242559e-09 76 7.028000e-09 5.000000e+00 5.000000e+00 1.242559e-09 77 7.128000e-09 5.000000e+00 5.000000e+00 1.242559e-09 78 7.228000e-09 5.000000e+00 5.000000e+00 1.242559e-09 79 7.328000e-09 5.000000e+00 5.000000e+00 1.242559e-09 80 7.428000e-09 5.000000e+00 5.000000e+00 1.242559e-09 81 7.528000e-09 5.000000e+00 5.000000e+00 1.242559e-09 82 7.628000e-09 5.000000e+00 5.000000e+00 1.242559e-09 83 7.728000e-09 5.000000e+00 5.000000e+00 1.242559e-09 84 7.828000e-09 5.000000e+00 5.000000e+00 1.242559e-09 85 7.928000e-09 5.000000e+00 5.000000e+00 1.242559e-09 86 8.028000e-09 5.000000e+00 5.000000e+00 1.242559e-09 87 8.128000e-09 5.000000e+00 5.000000e+00 1.242559e-09 88 8.228000e-09 5.000000e+00 5.000000e+00 1.242559e-09 89 8.328000e-09 5.000000e+00 5.000000e+00 1.242559e-09 90 8.428000e-09 5.000000e+00 5.000000e+00 1.242559e-09 91 8.528000e-09 5.000000e+00 5.000000e+00 1.242559e-09 92 8.628000e-09 5.000000e+00 5.000000e+00 1.242559e-09 93 8.728000e-09 5.000000e+00 5.000000e+00 1.242559e-09 94 8.828000e-09 5.000000e+00 5.000000e+00 1.242559e-09 95 8.928000e-09 5.000000e+00 5.000000e+00 1.242559e-09 96 9.028000e-09 5.000000e+00 5.000000e+00 1.242559e-09 97 9.128000e-09 5.000000e+00 5.000000e+00 1.242559e-09 98 9.228000e-09 5.000000e+00 5.000000e+00 1.242560e-09 99 9.328000e-09 5.000000e+00 5.000000e+00 1.242560e-09 100 9.428000e-09 5.000000e+00 5.000000e+00 1.242560e-09 101 9.528000e-09 5.000000e+00 5.000000e+00 1.242560e-09 102 9.628000e-09 5.000000e+00 5.000000e+00 1.242560e-09 103 9.728000e-09 5.000000e+00 5.000000e+00 1.242560e-09 104 9.828000e-09 5.000000e+00 5.000000e+00 1.242560e-09 105 9.928000e-09 5.000000e+00 5.000000e+00 1.242560e-09 106 1.002800e-08 5.000000e+00 5.000000e+00 1.242560e-09 107 1.012800e-08 5.000000e+00 5.000000e+00 1.242560e-09 108 1.022800e-08 5.000000e+00 5.000000e+00 1.242560e-09 109 1.032800e-08 5.000000e+00 5.000000e+00 1.242560e-09 110 1.042800e-08 5.000000e+00 5.000000e+00 1.242560e-09 111 1.052800e-08 5.000000e+00 5.000000e+00 1.242560e-09 112 1.062800e-08 5.000000e+00 5.000000e+00 1.242560e-09 Index time v(2) v(3) v(4) -------------------------------------------------------------------------------- 113 1.072800e-08 5.000000e+00 5.000000e+00 1.242560e-09 114 1.082800e-08 5.000000e+00 5.000000e+00 1.242560e-09 115 1.092800e-08 5.000000e+00 5.000000e+00 1.242560e-09 116 1.102800e-08 5.000000e+00 5.000000e+00 1.242560e-09 117 1.112800e-08 5.000000e+00 5.000000e+00 1.242560e-09 118 1.122800e-08 5.000000e+00 5.000000e+00 1.242560e-09 119 1.132800e-08 5.000000e+00 5.000000e+00 1.242560e-09 120 1.142800e-08 5.000000e+00 5.000000e+00 1.242560e-09 121 1.152800e-08 5.000000e+00 5.000000e+00 1.242560e-09 122 1.162800e-08 5.000000e+00 5.000000e+00 1.242560e-09 123 1.172800e-08 5.000000e+00 5.000000e+00 1.242560e-09 124 1.182800e-08 5.000000e+00 5.000000e+00 1.242560e-09 125 1.192800e-08 5.000000e+00 5.000000e+00 1.242560e-09 126 1.202800e-08 5.000000e+00 5.000000e+00 1.242560e-09 127 1.212800e-08 5.000000e+00 5.000000e+00 1.242560e-09 128 1.222800e-08 5.000000e+00 5.000000e+00 1.242560e-09 129 1.232800e-08 5.000000e+00 5.000000e+00 1.242560e-09 130 1.242800e-08 5.000000e+00 5.000000e+00 1.242560e-09 131 1.252800e-08 5.000000e+00 5.000000e+00 1.242560e-09 132 1.262800e-08 5.000000e+00 5.000000e+00 1.242560e-09 133 1.272800e-08 5.000000e+00 5.000000e+00 1.242560e-09 134 1.282800e-08 5.000000e+00 5.000000e+00 1.242560e-09 135 1.292800e-08 5.000000e+00 5.000000e+00 1.242560e-09 136 1.302800e-08 5.000000e+00 5.000000e+00 1.242560e-09 137 1.312800e-08 5.000000e+00 5.000000e+00 1.242560e-09 138 1.322800e-08 5.000000e+00 5.000000e+00 1.242560e-09 139 1.332800e-08 5.000000e+00 5.000000e+00 1.242560e-09 140 1.342800e-08 5.000000e+00 5.000000e+00 1.242560e-09 141 1.352800e-08 5.000000e+00 5.000000e+00 1.242560e-09 142 1.362800e-08 5.000000e+00 5.000000e+00 1.242560e-09 143 1.372800e-08 5.000000e+00 5.000000e+00 1.242560e-09 144 1.382800e-08 5.000000e+00 5.000000e+00 1.242560e-09 145 1.392800e-08 5.000000e+00 5.000000e+00 1.242560e-09 146 1.402800e-08 5.000000e+00 5.000000e+00 1.242560e-09 147 1.412800e-08 5.000000e+00 5.000000e+00 1.242560e-09 148 1.422800e-08 5.000000e+00 5.000000e+00 1.242560e-09 149 1.432800e-08 5.000000e+00 5.000000e+00 1.242560e-09 150 1.442800e-08 5.000000e+00 5.000000e+00 1.242560e-09 151 1.452800e-08 5.000000e+00 5.000000e+00 1.242560e-09 152 1.462800e-08 5.000000e+00 5.000000e+00 1.242560e-09 153 1.472800e-08 5.000000e+00 5.000000e+00 1.242560e-09 154 1.482800e-08 5.000000e+00 5.000000e+00 1.242560e-09 155 1.492800e-08 5.000000e+00 5.000000e+00 1.242560e-09 156 1.502800e-08 5.000000e+00 5.000000e+00 1.242560e-09 157 1.512800e-08 5.000000e+00 5.000000e+00 1.242560e-09 158 1.522800e-08 5.000000e+00 5.000000e+00 1.242560e-09 159 1.532800e-08 5.000000e+00 5.000000e+00 1.242560e-09 160 1.542800e-08 5.000000e+00 5.000000e+00 1.242560e-09 161 1.552800e-08 5.000000e+00 5.000000e+00 1.242560e-09 162 1.562800e-08 5.000000e+00 5.000000e+00 1.242560e-09 163 1.572800e-08 5.000000e+00 5.000000e+00 1.242560e-09 164 1.582800e-08 5.000000e+00 5.000000e+00 1.242560e-09 165 1.590000e-08 5.000000e+00 5.000000e+00 1.242560e-09 166 1.591000e-08 5.000068e+00 5.000000e+00 1.242560e-09 167 1.593000e-08 5.000098e+00 5.000000e+00 1.242560e-09 168 1.597000e-08 4.957752e+00 5.000000e+00 1.242560e-09 169 1.605000e-08 4.452793e+00 5.000000e+00 1.242560e-09 170 1.610000e-08 3.840812e+00 5.000000e+00 1.242560e-09 Index time v(2) v(3) v(4) -------------------------------------------------------------------------------- 171 1.611000e-08 3.800302e+00 5.000000e+00 1.242560e-09 172 1.613000e-08 3.768943e+00 5.000000e+00 1.242560e-09 173 1.617000e-08 3.749050e+00 5.000000e+00 1.242560e-09 174 1.625000e-08 3.684821e+00 5.000000e+00 1.242560e-09 175 1.635000e-08 3.622577e+00 5.000000e+00 1.242560e-09 176 1.645000e-08 3.551765e+00 5.000000e+00 1.242560e-09 177 1.655000e-08 3.493778e+00 5.000000e+00 1.242560e-09 178 1.665000e-08 3.429632e+00 5.000000e+00 1.242560e-09 179 1.675000e-08 3.375582e+00 5.000000e+00 1.242560e-09 180 1.685000e-08 3.317137e+00 5.000000e+00 1.242560e-09 181 1.695000e-08 3.266708e+00 5.000081e+00 3.428422e-09 182 1.705000e-08 3.213179e+00 4.761608e+00 -6.56423e-06 183 1.715000e-08 3.166070e+00 3.813996e+00 5.402796e-03 184 1.725000e-08 3.116815e+00 3.685654e+00 1.054458e-02 185 1.735000e-08 3.072745e+00 3.609212e+00 1.413978e-02 186 1.745000e-08 3.027231e+00 3.492732e+00 2.097697e-02 187 1.755000e-08 2.985940e+00 3.424017e+00 2.606797e-02 188 1.765000e-08 2.943725e+00 3.313896e+00 3.459857e-02 189 1.775000e-08 2.904977e+00 3.248827e+00 4.135562e-02 190 1.785000e-08 2.865685e+00 3.144964e+00 5.147593e-02 191 1.795000e-08 2.829281e+00 3.083104e+00 5.991372e-02 192 1.798678e-08 2.815298e+00 3.041072e+00 6.416284e-02 193 1.799678e-08 2.807819e+00 3.030518e+00 6.573328e-02 194 1.801678e-08 2.788513e+00 3.016477e+00 6.793103e-02 195 1.805678e-08 2.736764e+00 2.990156e+00 7.156512e-02 196 1.808678e-08 2.688938e+00 2.969077e+00 7.471027e-02 197 1.809478e-08 2.668503e+00 2.952252e+00 7.642816e-02 198 1.811078e-08 2.620369e+00 2.939422e+00 7.871033e-02 199 1.814278e-08 2.499805e+00 2.921825e+00 8.152840e-02 200 1.820678e-08 2.244920e+00 2.868259e+00 8.964434e-02 201 1.830678e-08 2.159673e+00 2.793489e+00 1.024589e-01 202 1.840678e-08 2.118471e+00 2.720970e+00 1.157798e-01 203 1.850678e-08 2.021139e+00 2.650238e+00 1.301197e-01 204 1.860678e-08 1.978566e+00 2.580881e+00 1.451117e-01 205 1.870678e-08 1.892691e+00 2.513781e+00 1.610012e-01 206 1.880678e-08 1.848777e+00 2.447417e+00 1.776556e-01 207 1.890678e-08 1.772667e+00 2.383606e+00 1.951250e-01 208 1.900678e-08 1.723702e+00 2.327920e+00 2.119892e-01 209 1.902356e-08 1.709355e+00 2.319509e+00 2.147778e-01 210 1.903356e-08 1.704430e+00 2.311049e+00 2.169205e-01 211 1.905356e-08 1.693768e+00 2.292426e+00 2.217638e-01 212 1.909356e-08 1.673250e+00 2.254851e+00 2.321770e-01 213 1.912356e-08 1.657704e+00 2.225861e+00 2.402399e-01 214 1.913156e-08 1.650820e+00 2.214889e+00 2.430187e-01 215 1.914756e-08 1.639985e+00 2.189073e+00 2.495497e-01 216 1.917956e-08 1.625758e+00 2.126051e+00 2.662245e-01 217 1.924356e-08 1.590171e+00 1.998619e+00 3.036745e-01 218 1.934356e-08 1.537789e+00 1.909686e+00 3.409614e-01 219 1.944356e-08 1.488092e+00 1.860750e+00 3.671625e-01 220 1.954356e-08 1.439324e+00 1.775758e+00 4.069418e-01 221 1.964356e-08 1.392678e+00 1.723660e+00 4.396744e-01 222 1.974356e-08 1.347154e+00 1.650172e+00 4.803571e-01 223 1.984356e-08 1.303376e+00 1.596365e+00 5.190690e-01 224 1.994356e-08 1.260784e+00 1.532198e+00 5.616026e-01 225 2.004356e-08 1.222244e+00 1.484630e+00 6.033946e-01 226 2.014356e-08 1.174196e+00 1.431068e+00 6.466266e-01 227 2.024356e-08 1.099342e+00 1.374412e+00 6.963561e-01 228 2.034356e-08 1.030204e+00 1.323995e+00 7.429353e-01 Index time v(2) v(3) v(4) -------------------------------------------------------------------------------- 229 2.044356e-08 9.952955e-01 1.272673e+00 7.926836e-01 230 2.054356e-08 9.581854e-01 1.226234e+00 8.402723e-01 231 2.064356e-08 9.183604e-01 1.178297e+00 8.909324e-01 232 2.074356e-08 8.833440e-01 1.134852e+00 9.401499e-01 233 2.084356e-08 8.474144e-01 1.090111e+00 9.916835e-01 234 2.094356e-08 8.142429e-01 1.049481e+00 1.042366e+00 235 2.104356e-08 7.826774e-01 1.008051e+00 1.094028e+00 236 2.114356e-08 7.533278e-01 9.694631e-01 1.146317e+00 237 2.124356e-08 7.234202e-01 9.243253e-01 1.209069e+00 238 2.134356e-08 6.934234e-01 8.787023e-01 1.280170e+00 239 2.144356e-08 6.662792e-01 8.383137e-01 1.345819e+00 240 2.154356e-08 6.390573e-01 8.068873e-01 1.403617e+00 241 2.164356e-08 6.139189e-01 7.727446e-01 1.465634e+00 242 2.174356e-08 5.887546e-01 7.412722e-01 1.529422e+00 243 2.184356e-08 5.654009e-01 7.099292e-01 1.593102e+00 244 2.194356e-08 5.421630e-01 6.810196e-01 1.657631e+00 245 2.204356e-08 5.205274e-01 6.520826e-01 1.721612e+00 246 2.214356e-08 4.990310e-01 6.258789e-01 1.785346e+00 247 2.224356e-08 4.777908e-01 5.992432e-01 1.849185e+00 248 2.234356e-08 4.551312e-01 5.745744e-01 1.913921e+00 249 2.244356e-08 4.339746e-01 5.495933e-01 1.978134e+00 250 2.254356e-08 4.154577e-01 5.270664e-01 2.041350e+00 251 2.264356e-08 3.986134e-01 5.041308e-01 2.104144e+00 252 2.274356e-08 3.815007e-01 4.833215e-01 2.166326e+00 253 2.284356e-08 3.653891e-01 4.621932e-01 2.227958e+00 254 2.294356e-08 3.498264e-01 4.429859e-01 2.289002e+00 255 2.304356e-08 3.350242e-01 4.235403e-01 2.349339e+00 256 2.314356e-08 3.207998e-01 4.058252e-01 2.409081e+00 257 2.324356e-08 3.072883e-01 3.877989e-01 2.468785e+00 258 2.334356e-08 2.941488e-01 3.710019e-01 2.530072e+00 259 2.344356e-08 2.815550e-01 3.538902e-01 2.592230e+00 260 2.354356e-08 2.694615e-01 3.385647e-01 2.652653e+00 261 2.364356e-08 2.579554e-01 3.235779e-01 2.710373e+00 262 2.374356e-08 2.468618e-01 3.098631e-01 2.767798e+00 263 2.384356e-08 2.362727e-01 2.959624e-01 2.825183e+00 264 2.394356e-08 2.260913e-01 2.832885e-01 2.881853e+00 265 2.404356e-08 2.163556e-01 2.705867e-01 2.937491e+00 266 2.414356e-08 2.070150e-01 2.589644e-01 2.992307e+00 267 2.424356e-08 1.980469e-01 2.473365e-01 3.045971e+00 268 2.434356e-08 1.893799e-01 2.366815e-01 3.098880e+00 269 2.444356e-08 1.809716e-01 2.259889e-01 3.150865e+00 270 2.454356e-08 1.729558e-01 2.161922e-01 3.201968e+00 271 2.464356e-08 1.653968e-01 2.063996e-01 3.251859e+00 272 2.474356e-08 1.582508e-01 1.974329e-01 3.300792e+00 273 2.484356e-08 1.513459e-01 1.884578e-01 3.348643e+00 274 2.494356e-08 1.447466e-01 1.802387e-01 3.395541e+00 275 2.504356e-08 1.384146e-01 1.720164e-01 3.441357e+00 276 2.514356e-08 1.323869e-01 1.644864e-01 3.486220e+00 277 2.524356e-08 1.265887e-01 1.569535e-01 3.530044e+00 278 2.534356e-08 1.210753e-01 1.500448e-01 3.573084e+00 279 2.544356e-08 1.157600e-01 1.431179e-01 3.615401e+00 280 2.554356e-08 1.107029e-01 1.367667e-01 3.657003e+00 281 2.564356e-08 1.058325e-01 1.304386e-01 3.697431e+00 282 2.574356e-08 1.012088e-01 1.246736e-01 3.736667e+00 283 2.584356e-08 9.675178e-02 1.189117e-01 3.774905e+00 284 2.594356e-08 9.251961e-02 1.136320e-01 3.812374e+00 285 2.604356e-08 8.843920e-02 1.083509e-01 3.848898e+00 286 2.614356e-08 8.456699e-02 1.035251e-01 3.884496e+00 Index time v(2) v(3) v(4) -------------------------------------------------------------------------------- 287 2.624356e-08 8.083201e-02 9.869702e-02 3.919135e+00 288 2.634356e-08 7.728730e-02 9.428536e-02 3.952885e+00 289 2.644356e-08 7.386265e-02 8.986967e-02 3.985719e+00 290 2.654356e-08 7.061103e-02 8.583531e-02 4.017711e+00 291 2.664356e-08 6.747568e-02 8.179550e-02 4.048811e+00 292 2.674356e-08 6.451264e-02 7.810880e-02 4.079061e+00 293 2.684356e-08 6.165813e-02 7.441595e-02 4.108441e+00 294 2.694356e-08 5.895214e-02 7.104737e-02 4.137013e+00 295 2.704356e-08 5.633803e-02 6.767092e-02 4.164759e+00 296 2.714356e-08 5.386288e-02 6.459340e-02 4.191725e+00 297 2.724356e-08 5.147390e-02 6.150688e-02 4.217899e+00 298 2.734356e-08 4.921188e-02 5.869549e-02 4.243331e+00 299 2.744356e-08 4.702774e-02 5.587347e-02 4.268029e+00 300 2.754356e-08 4.495991e-02 5.330419e-02 4.292046e+00 301 2.764356e-08 4.296264e-02 5.072402e-02 4.315362e+00 302 2.774356e-08 4.107248e-02 4.837906e-02 4.337976e+00 303 2.784356e-08 3.924709e-02 4.602436e-02 4.359871e+00 304 2.794356e-08 3.751989e-02 4.388545e-02 4.381108e+00 305 2.804356e-08 3.585140e-02 4.173384e-02 4.401706e+00 306 2.814356e-08 3.427296e-02 3.978057e-02 4.421686e+00 307 2.824356e-08 3.274806e-02 3.781497e-02 4.441040e+00 308 2.834356e-08 3.130570e-02 3.603243e-02 4.459796e+00 309 2.844356e-08 2.991193e-02 3.423699e-02 4.477962e+00 310 2.854356e-08 2.859362e-02 3.261017e-02 4.495564e+00 311 2.864356e-08 2.731950e-02 3.097017e-02 4.512607e+00 312 2.874356e-08 2.611504e-02 2.948560e-02 4.529115e+00 313 2.884356e-08 2.495153e-02 2.798784e-02 4.545091e+00 314 2.894356e-08 2.385202e-02 2.663340e-02 4.560559e+00 315 2.904356e-08 2.278919e-02 2.526569e-02 4.575526e+00 316 2.914356e-08 2.178453e-02 2.403005e-02 4.590014e+00 317 2.924356e-08 2.081333e-02 2.278120e-02 4.604030e+00 318 2.934356e-08 1.989567e-02 2.165410e-02 4.617593e+00 319 2.944356e-08 1.900843e-02 2.051389e-02 4.630712e+00 320 2.954356e-08 1.817020e-02 1.948587e-02 4.643406e+00 321 2.964356e-08 1.735962e-02 1.844488e-02 4.655685e+00 322 2.974356e-08 1.659394e-02 1.750737e-02 4.667563e+00 323 2.984356e-08 1.585342e-02 1.655725e-02 4.679045e+00 324 2.994356e-08 1.515408e-02 1.570262e-02 4.690145e+00 325 3.004356e-08 1.447763e-02 1.483558e-02 4.700874e+00 326 3.014356e-08 1.383890e-02 1.405643e-02 4.711248e+00 327 3.024356e-08 1.322095e-02 1.326512e-02 4.721275e+00 328 3.034356e-08 1.263760e-02 1.255489e-02 4.730966e+00 329 3.044356e-08 1.207312e-02 1.183285e-02 4.740330e+00 330 3.054356e-08 1.154034e-02 1.118554e-02 4.749380e+00 331 3.064356e-08 1.102471e-02 1.052677e-02 4.758123e+00 332 3.074356e-08 1.053812e-02 9.936892e-03 4.766571e+00 333 3.084356e-08 1.006713e-02 9.335919e-03 4.774731e+00 334 3.094356e-08 9.622818e-03 8.798468e-03 4.782615e+00 335 3.104356e-08 9.192675e-03 8.250305e-03 4.790228e+00 336 3.114356e-08 8.786942e-03 7.760707e-03 4.797583e+00 337 3.124356e-08 8.394042e-03 7.260782e-03 4.804686e+00 338 3.134356e-08 8.023520e-03 6.814854e-03 4.811546e+00 339 3.144356e-08 7.664662e-03 6.358991e-03 4.818169e+00 340 3.154356e-08 7.326319e-03 5.952916e-03 4.824566e+00 341 3.164356e-08 6.998554e-03 5.537296e-03 4.830742e+00 342 3.174356e-08 6.689594e-03 5.167584e-03 4.836706e+00 343 3.184356e-08 6.390230e-03 4.788723e-03 4.842463e+00 344 3.190000e-08 6.226121e-03 4.571132e-03 4.845625e+00 Index time v(2) v(3) v(4) -------------------------------------------------------------------------------- 345 3.191000e-08 6.277436e-03 4.535586e-03 4.846178e+00 346 3.193000e-08 6.482896e-03 4.479275e-03 4.847280e+00 347 3.197000e-08 3.884237e-02 4.374363e-03 4.849460e+00 348 3.203637e-08 3.222579e-01 4.133161e-03 4.853009e+00 349 3.209825e-08 9.041895e-01 3.905349e-03 4.856244e+00 350 3.210000e-08 9.246849e-01 3.900219e-03 4.856334e+00 351 3.210349e-08 9.459073e-01 3.891286e-03 4.856515e+00 352 3.211048e-08 9.691540e-01 3.873580e-03 4.856875e+00 353 3.212369e-08 9.770694e-01 3.840559e-03 4.857554e+00 354 3.215010e-08 9.931278e-01 3.775876e-03 4.858901e+00 355 3.218309e-08 1.012845e+00 3.641025e-03 4.860566e+00 356 3.224908e-08 1.051564e+00 3.472095e-03 4.863840e+00 357 3.234908e-08 1.108268e+00 3.190403e-03 4.868656e+00 358 3.244908e-08 1.162845e+00 2.908493e-03 4.873305e+00 359 3.254908e-08 1.215343e+00 2.652169e-03 4.877791e+00 360 3.264908e-08 1.265957e+00 2.395480e-03 4.882121e+00 361 3.274908e-08 1.314737e+00 2.162303e-03 4.886300e+00 362 3.284908e-08 1.361842e+00 1.928639e-03 4.890332e+00 363 3.293678e-08 1.401804e+00 1.753489e-03 4.893908e+00 364 3.294678e-08 1.406286e+00 1.796144e-03 4.894281e+00 365 3.296678e-08 1.415214e+00 1.989958e-03 4.894979e+00 366 3.300678e-08 1.432891e+00 3.237717e-02 4.896118e+00 367 3.308678e-08 1.467508e+00 4.071212e-01 4.896425e+00 368 3.318595e-08 1.509182e+00 9.748660e-01 4.893753e+00 369 3.328254e-08 1.548518e+00 1.058609e+00 4.894185e+00 370 3.338254e-08 1.588003e+00 1.131777e+00 4.894524e+00 371 3.348254e-08 1.626286e+00 1.213487e+00 4.893437e+00 372 3.358254e-08 1.663430e+00 1.283153e+00 4.892266e+00 373 3.368254e-08 1.699492e+00 1.360694e+00 4.889651e+00 374 3.378254e-08 1.734523e+00 1.427175e+00 4.886949e+00 375 3.388254e-08 1.768572e+00 1.500910e+00 4.882859e+00 376 3.397356e-08 1.798754e+00 1.559213e+00 4.878952e+00 377 3.398356e-08 1.802043e+00 1.568775e+00 4.878308e+00 378 3.400356e-08 1.808643e+00 1.584699e+00 4.877111e+00 379 3.404356e-08 1.832576e+00 1.615506e+00 4.874706e+00 380 3.412356e-08 2.010589e+00 1.670887e+00 4.869740e+00 381 3.422356e-08 2.294921e+00 1.734972e+00 4.863204e+00 382 3.432356e-08 2.375984e+00 1.798673e+00 4.855952e+00 383 3.442356e-08 2.432366e+00 1.860382e+00 4.848070e+00 384 3.452356e-08 2.507097e+00 1.921401e+00 4.839378e+00 385 3.462356e-08 2.562411e+00 1.980570e+00 4.830056e+00 386 3.472356e-08 2.631086e+00 2.039097e+00 4.819950e+00 387 3.482356e-08 2.684938e+00 2.095910e+00 4.809205e+00 388 3.492356e-08 2.748384e+00 2.151159e+00 4.797853e+00 389 3.502356e-08 2.803044e+00 2.198207e+00 4.787078e+00 390 3.512356e-08 2.862342e+00 2.281382e+00 4.768872e+00 391 3.522356e-08 2.915806e+00 2.434235e+00 4.732327e+00 392 3.532356e-08 2.968444e+00 2.557307e+00 4.696068e+00 393 3.542356e-08 3.018968e+00 2.615969e+00 4.673463e+00 394 3.552356e-08 3.068985e+00 2.679378e+00 4.648448e+00 395 3.562356e-08 3.116904e+00 2.745528e+00 4.620175e+00 396 3.572356e-08 3.164245e+00 2.806514e+00 4.591740e+00 397 3.582356e-08 3.209733e+00 2.868735e+00 4.560698e+00 398 3.592356e-08 3.254410e+00 2.927246e+00 4.528870e+00 399 3.602356e-08 3.295967e+00 2.986350e+00 4.494699e+00 400 3.612356e-08 3.342141e+00 3.043037e+00 4.459039e+00 401 3.622356e-08 3.409003e+00 3.099007e+00 4.421458e+00 402 3.632356e-08 3.485512e+00 3.152821e+00 4.382498e+00 Index time v(2) v(3) v(4) -------------------------------------------------------------------------------- 403 3.642356e-08 3.539386e+00 3.204981e+00 4.342122e+00 404 3.652356e-08 3.579262e+00 3.256280e+00 4.299674e+00 405 3.662356e-08 3.622569e+00 3.305876e+00 4.255707e+00 406 3.672356e-08 3.665178e+00 3.354609e+00 4.209688e+00 407 3.682356e-08 3.705687e+00 3.401705e+00 4.162087e+00 408 3.692356e-08 3.745706e+00 3.447978e+00 4.113199e+00 409 3.702356e-08 3.784104e+00 3.492386e+00 4.063894e+00 410 3.712356e-08 3.821951e+00 3.536610e+00 4.012973e+00 411 3.722356e-08 3.858401e+00 3.584153e+00 3.955573e+00 412 3.732356e-08 3.893955e+00 3.637399e+00 3.888235e+00 413 3.742356e-08 3.928145e+00 3.687159e+00 3.820130e+00 414 3.752356e-08 3.961441e+00 3.728794e+00 3.759023e+00 415 3.762356e-08 3.993753e+00 3.767425e+00 3.699024e+00 416 3.772356e-08 4.025134e+00 3.807012e+00 3.635594e+00 417 3.782356e-08 4.055578e+00 3.844888e+00 3.571258e+00 418 3.792356e-08 4.085142e+00 3.881900e+00 3.505930e+00 419 3.802356e-08 4.113767e+00 3.917591e+00 3.439296e+00 420 3.812356e-08 4.141601e+00 3.952539e+00 3.371524e+00 421 3.822356e-08 4.169580e+00 3.986205e+00 3.302445e+00 422 3.832356e-08 4.198960e+00 4.019148e+00 3.232242e+00 423 3.842356e-08 4.228466e+00 4.050778e+00 3.161447e+00 424 3.852356e-08 4.255251e+00 4.081722e+00 3.090981e+00 425 3.862356e-08 4.279393e+00 4.111459e+00 3.020789e+00 426 3.872356e-08 4.303033e+00 4.140599e+00 2.950879e+00 427 3.882356e-08 4.326334e+00 4.168571e+00 2.881321e+00 428 3.892356e-08 4.348783e+00 4.195971e+00 2.812190e+00 429 3.902356e-08 4.370503e+00 4.222265e+00 2.743726e+00 430 3.912356e-08 4.391575e+00 4.248007e+00 2.676051e+00 431 3.922356e-08 4.411963e+00 4.272865e+00 2.608611e+00 432 3.932356e-08 4.431729e+00 4.297700e+00 2.540132e+00 433 3.942356e-08 4.450830e+00 4.322083e+00 2.470254e+00 434 3.952356e-08 4.469324e+00 4.345778e+00 2.401264e+00 435 3.962356e-08 4.487204e+00 4.367844e+00 2.335101e+00 436 3.972356e-08 4.504530e+00 4.389130e+00 2.270696e+00 437 3.982356e-08 4.521283e+00 4.409711e+00 2.206495e+00 438 3.992356e-08 4.537508e+00 4.429876e+00 2.142878e+00 439 4.002356e-08 4.553192e+00 4.449167e+00 2.080155e+00 440 4.012356e-08 4.568380e+00 4.468010e+00 2.018209e+00 441 4.022356e-08 4.583084e+00 4.486082e+00 1.956974e+00 442 4.032356e-08 4.597441e+00 4.503721e+00 1.896517e+00 443 4.042356e-08 4.611511e+00 4.520633e+00 1.836828e+00 444 4.052356e-08 4.625211e+00 4.537130e+00 1.778180e+00 445 4.062356e-08 4.638281e+00 4.552942e+00 1.720773e+00 446 4.072356e-08 4.650743e+00 4.568367e+00 1.664720e+00 447 4.082356e-08 4.662767e+00 4.583156e+00 1.609928e+00 448 4.092356e-08 4.674461e+00 4.597578e+00 1.556451e+00 449 4.102356e-08 4.685748e+00 4.611402e+00 1.504260e+00 450 4.112356e-08 4.696658e+00 4.624880e+00 1.453410e+00 451 4.122356e-08 4.707192e+00 4.637802e+00 1.403843e+00 452 4.132356e-08 4.717383e+00 4.650418e+00 1.355469e+00 453 4.142356e-08 4.727217e+00 4.662556e+00 1.308062e+00 454 4.152356e-08 4.736730e+00 4.674425e+00 1.261653e+00 455 4.162356e-08 4.745905e+00 4.685786e+00 1.216525e+00 456 4.172356e-08 4.754781e+00 4.696793e+00 1.172967e+00 457 4.182356e-08 4.763343e+00 4.707308e+00 1.130798e+00 458 4.192356e-08 4.771624e+00 4.717561e+00 1.089786e+00 459 4.202356e-08 4.779612e+00 4.727395e+00 1.049885e+00 460 4.212356e-08 4.787338e+00 4.736967e+00 1.011179e+00 Index time v(2) v(3) v(4) -------------------------------------------------------------------------------- 461 4.222356e-08 4.794789e+00 4.746136e+00 9.736140e-01 462 4.232356e-08 4.801998e+00 4.755063e+00 9.371747e-01 463 4.242356e-08 4.808963e+00 4.763614e+00 9.018247e-01 464 4.252356e-08 4.815713e+00 4.771938e+00 8.675725e-01 465 4.262356e-08 4.822227e+00 4.779910e+00 8.344013e-01 466 4.272356e-08 4.828510e+00 4.787669e+00 8.023332e-01 467 4.282356e-08 4.834550e+00 4.795101e+00 7.713351e-01 468 4.292356e-08 4.840386e+00 4.802333e+00 7.413930e-01 469 4.302356e-08 4.846017e+00 4.809260e+00 7.124650e-01 470 4.312356e-08 4.851461e+00 4.816000e+00 6.845431e-01 471 4.322356e-08 4.856708e+00 4.822455e+00 6.575895e-01 472 4.332356e-08 4.861778e+00 4.828735e+00 6.315876e-01 473 4.342356e-08 4.866666e+00 4.834752e+00 6.064871e-01 474 4.352356e-08 4.871389e+00 4.840608e+00 5.822588e-01 475 4.362356e-08 4.875941e+00 4.846220e+00 5.588731e-01 476 4.372356e-08 4.880339e+00 4.851676e+00 5.363467e-01 477 4.382356e-08 4.884578e+00 4.856896e+00 5.146707e-01 478 4.392356e-08 4.888674e+00 4.861969e+00 4.938173e-01 479 4.402356e-08 4.892621e+00 4.866827e+00 4.737297e-01 480 4.412356e-08 4.896435e+00 4.871553e+00 4.543878e-01 481 4.422356e-08 4.900110e+00 4.876078e+00 4.357696e-01 482 4.432356e-08 4.903661e+00 4.880477e+00 4.178599e-01 483 4.442356e-08 4.907083e+00 4.884688e+00 4.006276e-01 484 4.452356e-08 4.910390e+00 4.888783e+00 3.840563e-01 485 4.462356e-08 4.913578e+00 4.892704e+00 3.681206e-01 486 4.472356e-08 4.916657e+00 4.896515e+00 3.528062e-01 487 4.482356e-08 4.919623e+00 4.900164e+00 3.380896e-01 488 4.492356e-08 4.922487e+00 4.903711e+00 3.239553e-01 489 4.502356e-08 4.925245e+00 4.907107e+00 3.103785e-01 490 4.512356e-08 4.927910e+00 4.910408e+00 2.973431e-01 491 4.522356e-08 4.930477e+00 4.913568e+00 2.848264e-01 492 4.532356e-08 4.932957e+00 4.916639e+00 2.728133e-01 493 4.542356e-08 4.935346e+00 4.919579e+00 2.612817e-01 494 4.552356e-08 4.937653e+00 4.922437e+00 2.502162e-01 495 4.562356e-08 4.939875e+00 4.925174e+00 2.395956e-01 496 4.572356e-08 4.942022e+00 4.927833e+00 2.294069e-01 497 4.582356e-08 4.944090e+00 4.930379e+00 2.196338e-01 498 4.592356e-08 4.946087e+00 4.932852e+00 2.102646e-01 499 4.602356e-08 4.948010e+00 4.935219e+00 2.012812e-01 500 4.612356e-08 4.949868e+00 4.937520e+00 1.926689e-01 501 4.622356e-08 4.951657e+00 4.939722e+00 1.844111e-01 502 4.632356e-08 4.953386e+00 4.941861e+00 1.764964e-01 503 4.642356e-08 4.955050e+00 4.943910e+00 1.689101e-01 504 4.652356e-08 4.956657e+00 4.945900e+00 1.616409e-01 505 4.662356e-08 4.958206e+00 4.947805e+00 1.546746e-01 506 4.672356e-08 4.959701e+00 4.949655e+00 1.480009e-01 507 4.682356e-08 4.961141e+00 4.951427e+00 1.416071e-01 508 4.692356e-08 4.962532e+00 4.953148e+00 1.354833e-01 509 4.700000e-08 4.963561e+00 4.954478e+00 1.309763e-01 mosdriver -- 2 lossy lines ltra model -- c load Transient Analysis Sat Jan 16 17:43:34 2010 -------------------------------------------------------------------------------- Index time v(5) -------------------------------------------------------------------------------- 0 0.000000e+00 1.242558e-09 1 2.000000e-12 1.242558e-09 2 4.000000e-12 1.242558e-09 3 8.000000e-12 1.242558e-09 4 1.600000e-11 1.242558e-09 5 3.200000e-11 1.242558e-09 6 6.400000e-11 1.242558e-09 7 1.280000e-10 1.242558e-09 8 2.280000e-10 1.242558e-09 9 3.280000e-10 1.242558e-09 10 4.280000e-10 1.242558e-09 11 5.280000e-10 1.242558e-09 12 6.280000e-10 1.242558e-09 13 7.280000e-10 1.242558e-09 14 8.280000e-10 1.242558e-09 15 9.280000e-10 1.242558e-09 16 1.028000e-09 1.242558e-09 17 1.128000e-09 1.242558e-09 18 1.228000e-09 1.242559e-09 19 1.328000e-09 1.242559e-09 20 1.428000e-09 1.242559e-09 21 1.528000e-09 1.242559e-09 22 1.628000e-09 1.242559e-09 23 1.728000e-09 1.242559e-09 24 1.828000e-09 1.242559e-09 25 1.928000e-09 1.242559e-09 26 2.028000e-09 1.242559e-09 27 2.128000e-09 1.242559e-09 28 2.228000e-09 1.242559e-09 29 2.328000e-09 1.242559e-09 30 2.428000e-09 1.242559e-09 31 2.528000e-09 1.242559e-09 32 2.628000e-09 1.242559e-09 33 2.728000e-09 1.242559e-09 34 2.828000e-09 1.242559e-09 35 2.928000e-09 1.242559e-09 36 3.028000e-09 1.242559e-09 37 3.128000e-09 1.242559e-09 38 3.228000e-09 1.242559e-09 39 3.328000e-09 1.242559e-09 40 3.428000e-09 1.242559e-09 41 3.528000e-09 1.242559e-09 42 3.628000e-09 1.242559e-09 43 3.728000e-09 1.242559e-09 44 3.828000e-09 1.242559e-09 45 3.928000e-09 1.242559e-09 46 4.028000e-09 1.242559e-09 47 4.128000e-09 1.242559e-09 48 4.228000e-09 1.242559e-09 49 4.328000e-09 1.242559e-09 50 4.428000e-09 1.242559e-09 51 4.528000e-09 1.242559e-09 52 4.628000e-09 1.242559e-09 53 4.728000e-09 1.242559e-09 54 4.828000e-09 1.242559e-09 Index time v(5) -------------------------------------------------------------------------------- 55 4.928000e-09 1.242559e-09 56 5.028000e-09 1.242559e-09 57 5.128000e-09 1.242559e-09 58 5.228000e-09 1.242559e-09 59 5.328000e-09 1.242559e-09 60 5.428000e-09 1.242559e-09 61 5.528000e-09 1.242559e-09 62 5.628000e-09 1.242559e-09 63 5.728000e-09 1.242559e-09 64 5.828000e-09 1.242559e-09 65 5.928000e-09 1.242559e-09 66 6.028000e-09 1.242559e-09 67 6.128000e-09 1.242559e-09 68 6.228000e-09 1.242559e-09 69 6.328000e-09 1.242559e-09 70 6.428000e-09 1.242559e-09 71 6.528000e-09 1.242559e-09 72 6.628000e-09 1.242559e-09 73 6.728000e-09 1.242559e-09 74 6.828000e-09 1.242559e-09 75 6.928000e-09 1.242559e-09 76 7.028000e-09 1.242559e-09 77 7.128000e-09 1.242559e-09 78 7.228000e-09 1.242559e-09 79 7.328000e-09 1.242559e-09 80 7.428000e-09 1.242559e-09 81 7.528000e-09 1.242559e-09 82 7.628000e-09 1.242559e-09 83 7.728000e-09 1.242559e-09 84 7.828000e-09 1.242559e-09 85 7.928000e-09 1.242559e-09 86 8.028000e-09 1.242559e-09 87 8.128000e-09 1.242559e-09 88 8.228000e-09 1.242559e-09 89 8.328000e-09 1.242559e-09 90 8.428000e-09 1.242559e-09 91 8.528000e-09 1.242559e-09 92 8.628000e-09 1.242559e-09 93 8.728000e-09 1.242559e-09 94 8.828000e-09 1.242559e-09 95 8.928000e-09 1.242559e-09 96 9.028000e-09 1.242559e-09 97 9.128000e-09 1.242559e-09 98 9.228000e-09 1.242559e-09 99 9.328000e-09 1.242559e-09 100 9.428000e-09 1.242559e-09 101 9.528000e-09 1.242559e-09 102 9.628000e-09 1.242559e-09 103 9.728000e-09 1.242559e-09 104 9.828000e-09 1.242560e-09 105 9.928000e-09 1.242560e-09 106 1.002800e-08 1.242560e-09 107 1.012800e-08 1.242560e-09 108 1.022800e-08 1.242560e-09 109 1.032800e-08 1.242560e-09 110 1.042800e-08 1.242560e-09 111 1.052800e-08 1.242560e-09 112 1.062800e-08 1.242560e-09 Index time v(5) -------------------------------------------------------------------------------- 113 1.072800e-08 1.242560e-09 114 1.082800e-08 1.242560e-09 115 1.092800e-08 1.242560e-09 116 1.102800e-08 1.242560e-09 117 1.112800e-08 1.242560e-09 118 1.122800e-08 1.242560e-09 119 1.132800e-08 1.242560e-09 120 1.142800e-08 1.242560e-09 121 1.152800e-08 1.242560e-09 122 1.162800e-08 1.242560e-09 123 1.172800e-08 1.242560e-09 124 1.182800e-08 1.242560e-09 125 1.192800e-08 1.242560e-09 126 1.202800e-08 1.242560e-09 127 1.212800e-08 1.242560e-09 128 1.222800e-08 1.242560e-09 129 1.232800e-08 1.242560e-09 130 1.242800e-08 1.242560e-09 131 1.252800e-08 1.242560e-09 132 1.262800e-08 1.242560e-09 133 1.272800e-08 1.242560e-09 134 1.282800e-08 1.242560e-09 135 1.292800e-08 1.242560e-09 136 1.302800e-08 1.242560e-09 137 1.312800e-08 1.242560e-09 138 1.322800e-08 1.242560e-09 139 1.332800e-08 1.242560e-09 140 1.342800e-08 1.242560e-09 141 1.352800e-08 1.242560e-09 142 1.362800e-08 1.242560e-09 143 1.372800e-08 1.242560e-09 144 1.382800e-08 1.242560e-09 145 1.392800e-08 1.242560e-09 146 1.402800e-08 1.242560e-09 147 1.412800e-08 1.242560e-09 148 1.422800e-08 1.242560e-09 149 1.432800e-08 1.242560e-09 150 1.442800e-08 1.242560e-09 151 1.452800e-08 1.242560e-09 152 1.462800e-08 1.242560e-09 153 1.472800e-08 1.242560e-09 154 1.482800e-08 1.242560e-09 155 1.492800e-08 1.242560e-09 156 1.502800e-08 1.242560e-09 157 1.512800e-08 1.242560e-09 158 1.522800e-08 1.242560e-09 159 1.532800e-08 1.242560e-09 160 1.542800e-08 1.242560e-09 161 1.552800e-08 1.242560e-09 162 1.562800e-08 1.242560e-09 163 1.572800e-08 1.242560e-09 164 1.582800e-08 1.242560e-09 165 1.590000e-08 1.242560e-09 166 1.591000e-08 1.242560e-09 167 1.593000e-08 1.242560e-09 168 1.597000e-08 1.242560e-09 169 1.605000e-08 1.242560e-09 170 1.610000e-08 1.242560e-09 Index time v(5) -------------------------------------------------------------------------------- 171 1.611000e-08 1.242560e-09 172 1.613000e-08 1.242560e-09 173 1.617000e-08 1.242560e-09 174 1.625000e-08 1.242560e-09 175 1.635000e-08 1.242560e-09 176 1.645000e-08 1.242560e-09 177 1.655000e-08 1.242560e-09 178 1.665000e-08 1.242560e-09 179 1.675000e-08 1.242560e-09 180 1.685000e-08 1.242560e-09 181 1.695000e-08 1.242560e-09 182 1.705000e-08 1.242560e-09 183 1.715000e-08 1.242560e-09 184 1.725000e-08 1.242560e-09 185 1.735000e-08 1.242560e-09 186 1.745000e-08 1.242560e-09 187 1.755000e-08 1.242560e-09 188 1.765000e-08 1.242560e-09 189 1.775000e-08 1.242560e-09 190 1.785000e-08 1.242560e-09 191 1.795000e-08 2.333566e-09 192 1.798678e-08 3.366564e-09 193 1.799678e-08 -3.11149e-07 194 1.801678e-08 -1.17611e-06 195 1.805678e-08 -3.72991e-06 196 1.808678e-08 -6.33261e-06 197 1.809478e-08 1.921160e-04 198 1.811078e-08 7.256608e-04 199 1.814278e-08 2.233893e-03 200 1.820678e-08 6.318454e-03 201 1.830678e-08 1.142934e-02 202 1.840678e-08 1.549704e-02 203 1.850678e-08 2.264305e-02 204 1.860678e-08 2.851276e-02 205 1.870678e-08 3.750607e-02 206 1.880678e-08 4.537657e-02 207 1.890678e-08 5.616557e-02 208 1.900678e-08 6.588348e-02 209 1.902356e-08 6.776177e-02 210 1.903356e-08 6.954557e-02 211 1.905356e-08 7.218019e-02 212 1.909356e-08 7.618411e-02 213 1.912356e-08 7.953585e-02 214 1.913156e-08 8.127388e-02 215 1.914756e-08 8.396133e-02 216 1.917956e-08 8.747642e-02 217 1.924356e-08 9.671129e-02 218 1.934356e-08 1.112604e-01 219 1.944356e-08 1.263421e-01 220 1.954356e-08 1.428187e-01 221 1.964356e-08 1.600199e-01 222 1.974356e-08 1.784877e-01 223 1.984356e-08 1.978262e-01 224 1.994356e-08 2.183510e-01 225 2.004356e-08 2.369701e-01 226 2.014356e-08 2.637721e-01 227 2.024356e-08 3.122120e-01 228 2.034356e-08 3.639116e-01 Index time v(5) -------------------------------------------------------------------------------- 229 2.044356e-08 3.968699e-01 230 2.054356e-08 4.327724e-01 231 2.064356e-08 4.747823e-01 232 2.074356e-08 5.153272e-01 233 2.084356e-08 5.604909e-01 234 2.094356e-08 6.059530e-01 235 2.104356e-08 6.535793e-01 236 2.114356e-08 7.016178e-01 237 2.124356e-08 7.536682e-01 238 2.134356e-08 8.081448e-01 239 2.144356e-08 8.618081e-01 240 2.154356e-08 9.170860e-01 241 2.164356e-08 9.723732e-01 242 2.174356e-08 1.029204e+00 243 2.184356e-08 1.086169e+00 244 2.194356e-08 1.144362e+00 245 2.204356e-08 1.202633e+00 246 2.214356e-08 1.261936e+00 247 2.224356e-08 1.324732e+00 248 2.234356e-08 1.394179e+00 249 2.244356e-08 1.464842e+00 250 2.254356e-08 1.530803e+00 251 2.264356e-08 1.595539e+00 252 2.274356e-08 1.663128e+00 253 2.284356e-08 1.731345e+00 254 2.294356e-08 1.799490e+00 255 2.304356e-08 1.867675e+00 256 2.314356e-08 1.935245e+00 257 2.324356e-08 2.002588e+00 258 2.334356e-08 2.069851e+00 259 2.344356e-08 2.137022e+00 260 2.354356e-08 2.203325e+00 261 2.364356e-08 2.268897e+00 262 2.374356e-08 2.333781e+00 263 2.384356e-08 2.397978e+00 264 2.394356e-08 2.461375e+00 265 2.404356e-08 2.524022e+00 266 2.414356e-08 2.585778e+00 267 2.424356e-08 2.646895e+00 268 2.434356e-08 2.707727e+00 269 2.444356e-08 2.768640e+00 270 2.454356e-08 2.828687e+00 271 2.464356e-08 2.887069e+00 272 2.474356e-08 2.944021e+00 273 2.484356e-08 3.000399e+00 274 2.494356e-08 3.055937e+00 275 2.504356e-08 3.110444e+00 276 2.514356e-08 3.163833e+00 277 2.524356e-08 3.216183e+00 278 2.534356e-08 3.267403e+00 279 2.544356e-08 3.317643e+00 280 2.554356e-08 3.366794e+00 281 2.564356e-08 3.414871e+00 282 2.574356e-08 3.461788e+00 283 2.584356e-08 3.507653e+00 284 2.594356e-08 3.552412e+00 285 2.604356e-08 3.596123e+00 286 2.614356e-08 3.638746e+00 Index time v(5) -------------------------------------------------------------------------------- 287 2.624356e-08 3.680341e+00 288 2.634356e-08 3.720906e+00 289 2.644356e-08 3.760548e+00 290 2.654356e-08 3.799255e+00 291 2.664356e-08 3.836984e+00 292 2.674356e-08 3.873618e+00 293 2.684356e-08 3.909232e+00 294 2.694356e-08 3.943903e+00 295 2.704356e-08 3.977675e+00 296 2.714356e-08 4.010499e+00 297 2.724356e-08 4.042406e+00 298 2.734356e-08 4.073402e+00 299 2.744356e-08 4.103520e+00 300 2.754356e-08 4.132769e+00 301 2.764356e-08 4.161178e+00 302 2.774356e-08 4.188746e+00 303 2.784356e-08 4.215500e+00 304 2.794356e-08 4.241451e+00 305 2.804356e-08 4.266629e+00 306 2.814356e-08 4.291042e+00 307 2.824356e-08 4.314716e+00 308 2.834356e-08 4.337664e+00 309 2.844356e-08 4.359912e+00 310 2.854356e-08 4.381479e+00 311 2.864356e-08 4.402386e+00 312 2.874356e-08 4.422638e+00 313 2.884356e-08 4.442246e+00 314 2.894356e-08 4.461227e+00 315 2.904356e-08 4.479608e+00 316 2.914356e-08 4.497405e+00 317 2.924356e-08 4.514632e+00 318 2.934356e-08 4.531302e+00 319 2.944356e-08 4.547432e+00 320 2.954356e-08 4.563039e+00 321 2.964356e-08 4.578136e+00 322 2.974356e-08 4.592740e+00 323 2.984356e-08 4.606863e+00 324 2.994356e-08 4.620520e+00 325 3.004356e-08 4.633725e+00 326 3.014356e-08 4.646492e+00 327 3.024356e-08 4.658834e+00 328 3.034356e-08 4.670764e+00 329 3.044356e-08 4.682294e+00 330 3.054356e-08 4.693438e+00 331 3.064356e-08 4.704207e+00 332 3.074356e-08 4.714614e+00 333 3.084356e-08 4.724669e+00 334 3.094356e-08 4.734383e+00 335 3.104356e-08 4.743765e+00 336 3.114356e-08 4.752829e+00 337 3.124356e-08 4.761583e+00 338 3.134356e-08 4.770038e+00 339 3.144356e-08 4.778203e+00 340 3.154356e-08 4.786088e+00 341 3.164356e-08 4.793701e+00 342 3.174356e-08 4.801053e+00 343 3.184356e-08 4.808151e+00 344 3.190000e-08 4.812543e+00 Index time v(5) -------------------------------------------------------------------------------- 345 3.191000e-08 4.813139e+00 346 3.193000e-08 4.814274e+00 347 3.197000e-08 4.816501e+00 348 3.203637e-08 4.821220e+00 349 3.209825e-08 4.825656e+00 350 3.210000e-08 4.825754e+00 351 3.210349e-08 4.825939e+00 352 3.211048e-08 4.826310e+00 353 3.212369e-08 4.827006e+00 354 3.215010e-08 4.828386e+00 355 3.218309e-08 4.831086e+00 356 3.224908e-08 4.834563e+00 357 3.234908e-08 4.840364e+00 358 3.244908e-08 4.846220e+00 359 3.254908e-08 4.851625e+00 360 3.264908e-08 4.857080e+00 361 3.274908e-08 4.862116e+00 362 3.284908e-08 4.867194e+00 363 3.293678e-08 4.871131e+00 364 3.294678e-08 4.871718e+00 365 3.296678e-08 4.872825e+00 366 3.300678e-08 4.874894e+00 367 3.308678e-08 4.878413e+00 368 3.318595e-08 4.882413e+00 369 3.328254e-08 4.886534e+00 370 3.338254e-08 4.890634e+00 371 3.348254e-08 4.894593e+00 372 3.358254e-08 4.898410e+00 373 3.368254e-08 4.902095e+00 374 3.378254e-08 4.905648e+00 375 3.388254e-08 4.909078e+00 376 3.397356e-08 4.912166e+00 377 3.398356e-08 4.912548e+00 378 3.400356e-08 4.913297e+00 379 3.404356e-08 4.914560e+00 380 3.412356e-08 4.914499e+00 381 3.422356e-08 4.911271e+00 382 3.432356e-08 4.910902e+00 383 3.442356e-08 4.910604e+00 384 3.452356e-08 4.908610e+00 385 3.462356e-08 4.906634e+00 386 3.472356e-08 4.903027e+00 387 3.482356e-08 4.899335e+00 388 3.492356e-08 4.894114e+00 389 3.502356e-08 4.888421e+00 390 3.512356e-08 4.881080e+00 391 3.522356e-08 4.873338e+00 392 3.532356e-08 4.864990e+00 393 3.542356e-08 4.855633e+00 394 3.552356e-08 4.845529e+00 395 3.562356e-08 4.834448e+00 396 3.572356e-08 4.822605e+00 397 3.582356e-08 4.809791e+00 398 3.592356e-08 4.796276e+00 399 3.602356e-08 4.782482e+00 400 3.612356e-08 4.765395e+00 401 3.622356e-08 4.734994e+00 402 3.632356e-08 4.694645e+00 Index time v(5) -------------------------------------------------------------------------------- 403 3.642356e-08 4.662182e+00 404 3.652356e-08 4.636176e+00 405 3.662356e-08 4.605539e+00 406 3.672356e-08 4.572958e+00 407 3.682356e-08 4.539117e+00 408 3.692356e-08 4.503183e+00 409 3.702356e-08 4.465657e+00 410 3.712356e-08 4.425965e+00 411 3.722356e-08 4.384452e+00 412 3.732356e-08 4.341062e+00 413 3.742356e-08 4.295980e+00 414 3.752356e-08 4.248988e+00 415 3.762356e-08 4.199860e+00 416 3.772356e-08 4.148800e+00 417 3.782356e-08 4.095581e+00 418 3.792356e-08 4.040743e+00 419 3.802356e-08 3.984737e+00 420 3.812356e-08 3.927626e+00 421 3.822356e-08 3.867181e+00 422 3.832356e-08 3.800411e+00 423 3.842356e-08 3.729166e+00 424 3.852356e-08 3.660124e+00 425 3.862356e-08 3.593960e+00 426 3.872356e-08 3.526265e+00 427 3.882356e-08 3.456335e+00 428 3.892356e-08 3.385602e+00 429 3.902356e-08 3.313743e+00 430 3.912356e-08 3.240723e+00 431 3.922356e-08 3.166585e+00 432 3.932356e-08 3.091339e+00 433 3.942356e-08 3.015325e+00 434 3.952356e-08 2.939341e+00 435 3.962356e-08 2.863904e+00 436 3.972356e-08 2.788988e+00 437 3.982356e-08 2.714648e+00 438 3.992356e-08 2.641002e+00 439 4.002356e-08 2.568140e+00 440 4.012356e-08 2.496200e+00 441 4.022356e-08 2.425088e+00 442 4.032356e-08 2.354402e+00 443 4.042356e-08 2.283748e+00 444 4.052356e-08 2.213661e+00 445 4.062356e-08 2.145285e+00 446 4.072356e-08 2.078865e+00 447 4.082356e-08 2.013658e+00 448 4.092356e-08 1.949376e+00 449 4.102356e-08 1.886282e+00 450 4.112356e-08 1.824452e+00 451 4.122356e-08 1.763826e+00 452 4.132356e-08 1.704428e+00 453 4.142356e-08 1.646279e+00 454 4.152356e-08 1.589434e+00 455 4.162356e-08 1.533986e+00 456 4.172356e-08 1.479995e+00 457 4.182356e-08 1.427451e+00 458 4.192356e-08 1.376336e+00 459 4.202356e-08 1.326645e+00 460 4.212356e-08 1.278375e+00 Index time v(5) -------------------------------------------------------------------------------- 461 4.222356e-08 1.231509e+00 462 4.232356e-08 1.186014e+00 463 4.242356e-08 1.141813e+00 464 4.252356e-08 1.098865e+00 465 4.262356e-08 1.057204e+00 466 4.272356e-08 1.016924e+00 467 4.282356e-08 9.780195e-01 468 4.292356e-08 9.403954e-01 469 4.302356e-08 9.039738e-01 470 4.312356e-08 8.687547e-01 471 4.322356e-08 8.347214e-01 472 4.332356e-08 8.018456e-01 473 4.342356e-08 7.700915e-01 474 4.352356e-08 7.394412e-01 475 4.362356e-08 7.098658e-01 476 4.372356e-08 6.813507e-01 477 4.382356e-08 6.538665e-01 478 4.392356e-08 6.273904e-01 479 4.402356e-08 6.018860e-01 480 4.412356e-08 5.773309e-01 481 4.422356e-08 5.536915e-01 482 4.432356e-08 5.309453e-01 483 4.442356e-08 5.090564e-01 484 4.452356e-08 4.879996e-01 485 4.462356e-08 4.677412e-01 486 4.472356e-08 4.482660e-01 487 4.482356e-08 4.295506e-01 488 4.492356e-08 4.115769e-01 489 4.502356e-08 3.943088e-01 490 4.512356e-08 3.777228e-01 491 4.522356e-08 3.617911e-01 492 4.532356e-08 3.464975e-01 493 4.542356e-08 3.318140e-01 494 4.552356e-08 3.177232e-01 495 4.562356e-08 3.041991e-01 496 4.572356e-08 2.912260e-01 497 4.582356e-08 2.787798e-01 498 4.592356e-08 2.668453e-01 499 4.602356e-08 2.553992e-01 500 4.612356e-08 2.444270e-01 501 4.622356e-08 2.339064e-01 502 4.632356e-08 2.238241e-01 503 4.642356e-08 2.141592e-01 504 4.652356e-08 2.048991e-01 505 4.662356e-08 1.960240e-01 506 4.672356e-08 1.875223e-01 507 4.682356e-08 1.793763e-01 508 4.692356e-08 1.715755e-01 509 4.700000e-08 1.655183e-01 tmpk8ny_4pz/tests/transmission/ltra1_1_line.out0000644000175000017500000005563513546075722022074 0ustar carstencarstenCircuit: mosdriver -- lossy line ltra model -- c load Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 Warning: vs: no DC value, transient time 0 value used No. of Data Rows : 498 mosdriver -- lossy line ltra model -- c load Transient Analysis Sat Jan 16 17:42:59 2010 -------------------------------------------------------------------------------- Index time v(2) v(3) -------------------------------------------------------------------------------- 0 0.000000e+00 5.000000e+00 5.000000e+00 1 2.000000e-12 5.000000e+00 5.000000e+00 2 4.000000e-12 5.000000e+00 5.000000e+00 3 8.000000e-12 5.000000e+00 5.000000e+00 4 1.600000e-11 5.000000e+00 5.000000e+00 5 3.200000e-11 5.000000e+00 5.000000e+00 6 6.400000e-11 5.000000e+00 5.000000e+00 7 1.280000e-10 5.000000e+00 5.000000e+00 8 2.280000e-10 5.000000e+00 5.000000e+00 9 3.280000e-10 5.000000e+00 5.000000e+00 10 4.280000e-10 5.000000e+00 5.000000e+00 11 5.280000e-10 5.000000e+00 5.000000e+00 12 6.280000e-10 5.000000e+00 5.000000e+00 13 7.280000e-10 5.000000e+00 5.000000e+00 14 8.280000e-10 5.000000e+00 5.000000e+00 15 9.280000e-10 5.000000e+00 5.000000e+00 16 1.028000e-09 5.000000e+00 5.000000e+00 17 1.128000e-09 5.000000e+00 5.000000e+00 18 1.228000e-09 5.000000e+00 5.000000e+00 19 1.328000e-09 5.000000e+00 5.000000e+00 20 1.428000e-09 5.000000e+00 5.000000e+00 21 1.528000e-09 5.000000e+00 5.000000e+00 22 1.628000e-09 5.000000e+00 5.000000e+00 23 1.728000e-09 5.000000e+00 5.000000e+00 24 1.828000e-09 5.000000e+00 5.000000e+00 25 1.928000e-09 5.000000e+00 5.000000e+00 26 2.028000e-09 5.000000e+00 5.000000e+00 27 2.128000e-09 5.000000e+00 5.000000e+00 28 2.228000e-09 5.000000e+00 5.000000e+00 29 2.328000e-09 5.000000e+00 5.000000e+00 30 2.428000e-09 5.000000e+00 5.000000e+00 31 2.528000e-09 5.000000e+00 5.000000e+00 32 2.628000e-09 5.000000e+00 5.000000e+00 33 2.728000e-09 5.000000e+00 5.000000e+00 34 2.828000e-09 5.000000e+00 5.000000e+00 35 2.928000e-09 5.000000e+00 5.000000e+00 36 3.028000e-09 5.000000e+00 5.000000e+00 37 3.128000e-09 5.000000e+00 5.000000e+00 38 3.228000e-09 5.000000e+00 5.000000e+00 39 3.328000e-09 5.000000e+00 5.000000e+00 40 3.428000e-09 5.000000e+00 5.000000e+00 41 3.528000e-09 5.000000e+00 5.000000e+00 42 3.628000e-09 5.000000e+00 5.000000e+00 43 3.728000e-09 5.000000e+00 5.000000e+00 44 3.828000e-09 5.000000e+00 5.000000e+00 45 3.928000e-09 5.000000e+00 5.000000e+00 46 4.028000e-09 5.000000e+00 5.000000e+00 47 4.128000e-09 5.000000e+00 5.000000e+00 48 4.228000e-09 5.000000e+00 5.000000e+00 49 4.328000e-09 5.000000e+00 5.000000e+00 50 4.428000e-09 5.000000e+00 5.000000e+00 51 4.528000e-09 5.000000e+00 5.000000e+00 52 4.628000e-09 5.000000e+00 5.000000e+00 53 4.728000e-09 5.000000e+00 5.000000e+00 54 4.828000e-09 5.000000e+00 5.000000e+00 Index time v(2) v(3) -------------------------------------------------------------------------------- 55 4.928000e-09 5.000000e+00 5.000000e+00 56 5.028000e-09 5.000000e+00 5.000000e+00 57 5.128000e-09 5.000000e+00 5.000000e+00 58 5.228000e-09 5.000000e+00 5.000000e+00 59 5.328000e-09 5.000000e+00 5.000000e+00 60 5.428000e-09 5.000000e+00 5.000000e+00 61 5.528000e-09 5.000000e+00 5.000000e+00 62 5.628000e-09 5.000000e+00 5.000000e+00 63 5.728000e-09 5.000000e+00 5.000000e+00 64 5.828000e-09 5.000000e+00 5.000000e+00 65 5.928000e-09 5.000000e+00 5.000000e+00 66 6.028000e-09 5.000000e+00 5.000000e+00 67 6.128000e-09 5.000000e+00 5.000000e+00 68 6.228000e-09 5.000000e+00 5.000000e+00 69 6.328000e-09 5.000000e+00 5.000000e+00 70 6.428000e-09 5.000000e+00 5.000000e+00 71 6.528000e-09 5.000000e+00 5.000000e+00 72 6.628000e-09 5.000000e+00 5.000000e+00 73 6.728000e-09 5.000000e+00 5.000000e+00 74 6.828000e-09 5.000000e+00 5.000000e+00 75 6.928000e-09 5.000000e+00 5.000000e+00 76 7.028000e-09 5.000000e+00 5.000000e+00 77 7.128000e-09 5.000000e+00 5.000000e+00 78 7.228000e-09 5.000000e+00 5.000000e+00 79 7.328000e-09 5.000000e+00 5.000000e+00 80 7.428000e-09 5.000000e+00 5.000000e+00 81 7.528000e-09 5.000000e+00 5.000000e+00 82 7.628000e-09 5.000000e+00 5.000000e+00 83 7.728000e-09 5.000000e+00 5.000000e+00 84 7.828000e-09 5.000000e+00 5.000000e+00 85 7.928000e-09 5.000000e+00 5.000000e+00 86 8.028000e-09 5.000000e+00 5.000000e+00 87 8.128000e-09 5.000000e+00 5.000000e+00 88 8.228000e-09 5.000000e+00 5.000000e+00 89 8.328000e-09 5.000000e+00 5.000000e+00 90 8.428000e-09 5.000000e+00 5.000000e+00 91 8.528000e-09 5.000000e+00 5.000000e+00 92 8.628000e-09 5.000000e+00 5.000000e+00 93 8.728000e-09 5.000000e+00 5.000000e+00 94 8.828000e-09 5.000000e+00 5.000000e+00 95 8.928000e-09 5.000000e+00 5.000000e+00 96 9.028000e-09 5.000000e+00 5.000000e+00 97 9.128000e-09 5.000000e+00 5.000000e+00 98 9.228000e-09 5.000000e+00 5.000000e+00 99 9.328000e-09 5.000000e+00 5.000000e+00 100 9.428000e-09 5.000000e+00 5.000000e+00 101 9.528000e-09 5.000000e+00 5.000000e+00 102 9.628000e-09 5.000000e+00 5.000000e+00 103 9.728000e-09 5.000000e+00 5.000000e+00 104 9.828000e-09 5.000000e+00 5.000000e+00 105 9.928000e-09 5.000000e+00 5.000000e+00 106 1.002800e-08 5.000000e+00 5.000000e+00 107 1.012800e-08 5.000000e+00 5.000000e+00 108 1.022800e-08 5.000000e+00 5.000000e+00 109 1.032800e-08 5.000000e+00 5.000000e+00 110 1.042800e-08 5.000000e+00 5.000000e+00 111 1.052800e-08 5.000000e+00 5.000000e+00 112 1.062800e-08 5.000000e+00 5.000000e+00 Index time v(2) v(3) -------------------------------------------------------------------------------- 113 1.072800e-08 5.000000e+00 5.000000e+00 114 1.082800e-08 5.000000e+00 5.000000e+00 115 1.092800e-08 5.000000e+00 5.000000e+00 116 1.102800e-08 5.000000e+00 5.000000e+00 117 1.112800e-08 5.000000e+00 5.000000e+00 118 1.122800e-08 5.000000e+00 5.000000e+00 119 1.132800e-08 5.000000e+00 5.000000e+00 120 1.142800e-08 5.000000e+00 5.000000e+00 121 1.152800e-08 5.000000e+00 5.000000e+00 122 1.162800e-08 5.000000e+00 5.000000e+00 123 1.172800e-08 5.000000e+00 5.000000e+00 124 1.182800e-08 5.000000e+00 5.000000e+00 125 1.192800e-08 5.000000e+00 5.000000e+00 126 1.202800e-08 5.000000e+00 5.000000e+00 127 1.212800e-08 5.000000e+00 5.000000e+00 128 1.222800e-08 5.000000e+00 5.000000e+00 129 1.232800e-08 5.000000e+00 5.000000e+00 130 1.242800e-08 5.000000e+00 5.000000e+00 131 1.252800e-08 5.000000e+00 5.000000e+00 132 1.262800e-08 5.000000e+00 5.000000e+00 133 1.272800e-08 5.000000e+00 5.000000e+00 134 1.282800e-08 5.000000e+00 5.000000e+00 135 1.292800e-08 5.000000e+00 5.000000e+00 136 1.302800e-08 5.000000e+00 5.000000e+00 137 1.312800e-08 5.000000e+00 5.000000e+00 138 1.322800e-08 5.000000e+00 5.000000e+00 139 1.332800e-08 5.000000e+00 5.000000e+00 140 1.342800e-08 5.000000e+00 5.000000e+00 141 1.352800e-08 5.000000e+00 5.000000e+00 142 1.362800e-08 5.000000e+00 5.000000e+00 143 1.372800e-08 5.000000e+00 5.000000e+00 144 1.382800e-08 5.000000e+00 5.000000e+00 145 1.392800e-08 5.000000e+00 5.000000e+00 146 1.402800e-08 5.000000e+00 5.000000e+00 147 1.412800e-08 5.000000e+00 5.000000e+00 148 1.422800e-08 5.000000e+00 5.000000e+00 149 1.432800e-08 5.000000e+00 5.000000e+00 150 1.442800e-08 5.000000e+00 5.000000e+00 151 1.452800e-08 5.000000e+00 5.000000e+00 152 1.462800e-08 5.000000e+00 5.000000e+00 153 1.472800e-08 5.000000e+00 5.000000e+00 154 1.482800e-08 5.000000e+00 5.000000e+00 155 1.492800e-08 5.000000e+00 5.000000e+00 156 1.502800e-08 5.000000e+00 5.000000e+00 157 1.512800e-08 5.000000e+00 5.000000e+00 158 1.522800e-08 5.000000e+00 5.000000e+00 159 1.532800e-08 5.000000e+00 5.000000e+00 160 1.542800e-08 5.000000e+00 5.000000e+00 161 1.552800e-08 5.000000e+00 5.000000e+00 162 1.562800e-08 5.000000e+00 5.000000e+00 163 1.572800e-08 5.000000e+00 5.000000e+00 164 1.582800e-08 5.000000e+00 5.000000e+00 165 1.590000e-08 5.000000e+00 5.000000e+00 166 1.591000e-08 5.000068e+00 5.000000e+00 167 1.593000e-08 5.000098e+00 5.000000e+00 168 1.597000e-08 4.957752e+00 5.000000e+00 169 1.605000e-08 4.452793e+00 5.000000e+00 170 1.610000e-08 3.840812e+00 5.000000e+00 Index time v(2) v(3) -------------------------------------------------------------------------------- 171 1.611000e-08 3.800302e+00 5.000000e+00 172 1.613000e-08 3.768943e+00 5.000000e+00 173 1.617000e-08 3.749050e+00 5.000000e+00 174 1.625000e-08 3.684821e+00 5.000000e+00 175 1.635000e-08 3.622577e+00 5.000000e+00 176 1.645000e-08 3.551765e+00 5.000000e+00 177 1.655000e-08 3.493778e+00 5.000000e+00 178 1.665000e-08 3.429632e+00 5.000000e+00 179 1.675000e-08 3.375582e+00 5.000000e+00 180 1.685000e-08 3.317137e+00 5.000000e+00 181 1.695000e-08 3.266708e+00 5.000081e+00 182 1.705000e-08 3.213179e+00 4.761543e+00 183 1.715000e-08 3.166070e+00 3.813826e+00 184 1.725000e-08 3.116815e+00 3.685771e+00 185 1.735000e-08 3.072745e+00 3.609063e+00 186 1.745000e-08 3.027231e+00 3.492829e+00 187 1.755000e-08 2.985940e+00 3.423888e+00 188 1.765000e-08 2.943725e+00 3.313974e+00 189 1.775000e-08 2.904977e+00 3.248715e+00 190 1.785000e-08 2.865685e+00 3.145026e+00 191 1.795000e-08 2.829281e+00 3.083008e+00 192 1.805000e-08 2.745441e+00 2.985080e+00 193 1.815000e-08 2.467167e+00 2.925945e+00 194 1.825000e-08 2.184420e+00 2.833351e+00 195 1.835000e-08 2.138410e+00 2.776803e+00 196 1.845000e-08 2.076543e+00 2.689151e+00 197 1.855000e-08 1.999946e+00 2.634943e+00 198 1.865000e-08 1.941457e+00 2.551872e+00 199 1.875000e-08 1.871365e+00 2.499796e+00 200 1.885000e-08 1.815714e+00 2.420975e+00 201 1.895000e-08 1.751531e+00 2.370858e+00 202 1.905000e-08 1.698686e+00 2.287300e+00 203 1.915000e-08 1.639700e+00 2.183808e+00 204 1.925000e-08 1.589604e+00 2.013480e+00 205 1.935000e-08 1.535214e+00 1.915992e+00 206 1.945000e-08 1.487782e+00 1.851520e+00 207 1.955000e-08 1.437480e+00 1.795313e+00 208 1.965000e-08 1.392605e+00 1.718031e+00 209 1.975000e-08 1.345959e+00 1.666496e+00 210 1.985000e-08 1.303527e+00 1.594857e+00 211 1.995000e-08 1.260163e+00 1.546162e+00 212 2.005000e-08 1.218582e+00 1.479736e+00 213 2.015000e-08 1.167007e+00 1.433792e+00 214 2.025000e-08 1.100930e+00 1.372130e+00 215 2.035000e-08 1.035422e+00 1.328842e+00 216 2.045000e-08 9.928653e-01 1.271548e+00 217 2.055000e-08 9.585804e-01 1.230811e+00 218 2.065000e-08 9.202834e-01 1.177534e+00 219 2.075000e-08 8.837107e-01 1.139236e+00 220 2.085000e-08 8.490898e-01 1.089663e+00 221 2.095000e-08 8.153770e-01 1.053689e+00 222 2.105000e-08 7.831429e-01 1.007345e+00 223 2.115000e-08 7.521002e-01 9.718657e-01 224 2.125000e-08 7.221120e-01 9.233550e-01 225 2.135000e-08 6.934968e-01 8.836538e-01 226 2.145000e-08 6.656197e-01 8.391150e-01 227 2.155000e-08 6.392182e-01 8.099281e-01 228 2.165000e-08 6.133193e-01 7.733211e-01 Index time v(2) v(3) -------------------------------------------------------------------------------- 229 2.175000e-08 5.889412e-01 7.450936e-01 230 2.185000e-08 5.648919e-01 7.104092e-01 231 2.195000e-08 5.423680e-01 6.846665e-01 232 2.205000e-08 5.200144e-01 6.526315e-01 233 2.215000e-08 4.988823e-01 6.288350e-01 234 2.225000e-08 4.769541e-01 5.992924e-01 235 2.235000e-08 4.553717e-01 5.773100e-01 236 2.245000e-08 4.340156e-01 5.500659e-01 237 2.255000e-08 4.156583e-01 5.297755e-01 238 2.265000e-08 3.982273e-01 5.046524e-01 239 2.275000e-08 3.818241e-01 4.859360e-01 240 2.285000e-08 3.652181e-01 4.627709e-01 241 2.295000e-08 3.500607e-01 4.455180e-01 242 2.305000e-08 3.348808e-01 4.241580e-01 243 2.315000e-08 3.209373e-01 4.082261e-01 244 2.325000e-08 3.069708e-01 3.883669e-01 245 2.335000e-08 2.941662e-01 3.733201e-01 246 2.345000e-08 2.813182e-01 3.546588e-01 247 2.355000e-08 2.695600e-01 3.409249e-01 248 2.365000e-08 2.577450e-01 3.243021e-01 249 2.375000e-08 2.469482e-01 3.120866e-01 250 2.385000e-08 2.360860e-01 2.967668e-01 251 2.395000e-08 2.261730e-01 2.854593e-01 252 2.405000e-08 2.161891e-01 2.713974e-01 253 2.415000e-08 2.070823e-01 2.610597e-01 254 2.425000e-08 1.978748e-01 2.481380e-01 255 2.435000e-08 1.894251e-01 2.386746e-01 256 2.445000e-08 1.808426e-01 2.268092e-01 257 2.455000e-08 1.730470e-01 2.181484e-01 258 2.465000e-08 1.652874e-01 2.072550e-01 259 2.475000e-08 1.583082e-01 1.993318e-01 260 2.485000e-08 1.512457e-01 1.893322e-01 261 2.495000e-08 1.448150e-01 1.820864e-01 262 2.505000e-08 1.383233e-01 1.729090e-01 263 2.515000e-08 1.324454e-01 1.662842e-01 264 2.525000e-08 1.265002e-01 1.578588e-01 265 2.535000e-08 1.211181e-01 1.517915e-01 266 2.545000e-08 1.156725e-01 1.440387e-01 267 2.555000e-08 1.107468e-01 1.384788e-01 268 2.565000e-08 1.057592e-01 1.313797e-01 269 2.575000e-08 1.012520e-01 1.263404e-01 270 2.585000e-08 9.668450e-02 1.198592e-01 271 2.595000e-08 9.256073e-02 1.152605e-01 272 2.605000e-08 8.837856e-02 1.093104e-01 273 2.615000e-08 8.460613e-02 1.051144e-01 274 2.625000e-08 8.077652e-02 9.966354e-02 275 2.635000e-08 7.732335e-02 9.583696e-02 276 2.645000e-08 7.381186e-02 9.084150e-02 277 2.655000e-08 7.064729e-02 8.735275e-02 278 2.665000e-08 6.743265e-02 8.277540e-02 279 2.675000e-08 6.454798e-02 7.959526e-02 280 2.685000e-08 6.161777e-02 7.540144e-02 281 2.695000e-08 5.898538e-02 7.250325e-02 282 2.705000e-08 5.630242e-02 6.866114e-02 283 2.715000e-08 5.389491e-02 6.602048e-02 284 2.725000e-08 5.144130e-02 6.250082e-02 285 2.735000e-08 4.924202e-02 6.009499e-02 286 2.745000e-08 4.699778e-02 5.687017e-02 Index time v(2) v(3) -------------------------------------------------------------------------------- 287 2.755000e-08 4.498843e-02 5.467783e-02 288 2.765000e-08 4.293599e-02 5.172351e-02 289 2.775000e-08 4.110036e-02 4.972840e-02 290 2.785000e-08 3.922341e-02 4.702522e-02 291 2.795000e-08 3.754665e-02 4.521093e-02 292 2.805000e-08 3.583029e-02 4.273560e-02 293 2.815000e-08 3.429876e-02 4.108380e-02 294 2.825000e-08 3.272933e-02 3.881699e-02 295 2.835000e-08 3.133051e-02 3.731419e-02 296 2.845000e-08 2.989532e-02 3.523865e-02 297 2.855000e-08 2.861752e-02 3.387150e-02 298 2.865000e-08 2.730502e-02 3.197113e-02 299 2.875000e-08 2.613826e-02 3.072766e-02 300 2.885000e-08 2.493894e-02 2.898775e-02 301 2.895000e-08 2.387432e-02 2.785699e-02 302 2.905000e-08 2.277822e-02 2.626405e-02 303 2.915000e-08 2.180608e-02 2.523600e-02 304 2.925000e-08 2.080394e-02 2.377767e-02 305 2.935000e-08 1.991644e-02 2.284318e-02 306 2.945000e-08 1.900042e-02 2.150812e-02 307 2.955000e-08 1.819023e-02 2.065881e-02 308 2.965000e-08 1.735290e-02 1.943659e-02 309 2.975000e-08 1.661331e-02 1.866491e-02 310 2.985000e-08 1.584794e-02 1.754619e-02 311 2.995000e-08 1.517283e-02 1.684536e-02 312 3.005000e-08 1.447325e-02 1.582145e-02 313 3.015000e-08 1.385703e-02 1.518499e-02 314 3.025000e-08 1.321759e-02 1.424774e-02 315 3.035000e-08 1.265515e-02 1.366984e-02 316 3.045000e-08 1.207069e-02 1.281199e-02 317 3.055000e-08 1.155734e-02 1.228742e-02 318 3.065000e-08 1.102312e-02 1.150227e-02 319 3.075000e-08 1.055460e-02 1.102622e-02 320 3.085000e-08 1.006633e-02 1.030764e-02 321 3.095000e-08 9.638793e-03 9.875731e-03 322 3.105000e-08 9.192576e-03 9.218101e-03 323 3.115000e-08 8.802430e-03 8.826355e-03 324 3.125000e-08 8.394591e-03 8.224531e-03 325 3.135000e-08 8.038550e-03 7.869316e-03 326 3.145000e-08 7.665798e-03 7.318588e-03 327 3.155000e-08 7.340905e-03 6.996596e-03 328 3.165000e-08 7.000225e-03 6.492650e-03 329 3.175000e-08 6.703760e-03 6.200867e-03 330 3.185000e-08 6.392391e-03 5.739757e-03 331 3.190000e-08 6.231698e-03 5.599711e-03 332 3.191000e-08 6.271794e-03 5.527927e-03 333 3.193000e-08 6.480360e-03 5.467952e-03 334 3.197000e-08 3.888365e-02 5.384217e-03 335 3.203644e-08 3.228266e-01 5.139705e-03 336 3.209839e-08 9.056803e-01 4.887744e-03 337 3.210000e-08 9.246154e-01 4.880404e-03 338 3.210323e-08 9.449448e-01 4.871957e-03 339 3.210968e-08 9.678754e-01 4.855817e-03 340 3.212258e-08 9.766354e-01 4.825172e-03 341 3.214839e-08 9.919844e-01 4.768340e-03 342 3.217995e-08 1.011137e+00 4.707713e-03 343 3.224307e-08 1.048086e+00 4.491166e-03 344 3.234307e-08 1.105006e+00 4.178933e-03 Index time v(2) v(3) -------------------------------------------------------------------------------- 345 3.244307e-08 1.159637e+00 3.915540e-03 346 3.254307e-08 1.212316e+00 3.631884e-03 347 3.264307e-08 1.262985e+00 3.391166e-03 348 3.274307e-08 1.311920e+00 3.133543e-03 349 3.284307e-08 1.359079e+00 2.913569e-03 350 3.294307e-08 1.404705e+00 2.750685e-03 351 3.304307e-08 1.448724e+00 1.508475e-01 352 3.314307e-08 1.491365e+00 9.348311e-01 353 3.321536e-08 1.521308e+00 1.024389e+00 354 3.329346e-08 1.552950e+00 1.074053e+00 355 3.339346e-08 1.592249e+00 1.174263e+00 356 3.349346e-08 1.630447e+00 1.230165e+00 357 3.359346e-08 1.667433e+00 1.324731e+00 358 3.369346e-08 1.703410e+00 1.378530e+00 359 3.379346e-08 1.738305e+00 1.467951e+00 360 3.389346e-08 1.772274e+00 1.519843e+00 361 3.397985e-08 1.800855e+00 1.596892e+00 362 3.398985e-08 1.806796e+00 1.595244e+00 363 3.400985e-08 1.821390e+00 1.605058e+00 364 3.404985e-08 1.859309e+00 1.628316e+00 365 3.412985e-08 2.038220e+00 1.681377e+00 366 3.422985e-08 2.322609e+00 1.743778e+00 367 3.432985e-08 2.378201e+00 1.802541e+00 368 3.442985e-08 2.451833e+00 1.864787e+00 369 3.452985e-08 2.512315e+00 1.923402e+00 370 3.462985e-08 2.579523e+00 1.983080e+00 371 3.472985e-08 2.638565e+00 2.039385e+00 372 3.482985e-08 2.700292e+00 2.096675e+00 373 3.492985e-08 2.757560e+00 2.150832e+00 374 3.501664e-08 2.807822e+00 2.199834e+00 375 3.502664e-08 2.813595e+00 2.206400e+00 376 3.504664e-08 2.823292e+00 2.222032e+00 377 3.508664e-08 2.843812e+00 2.258220e+00 378 3.516664e-08 2.887457e+00 2.363493e+00 379 3.526664e-08 2.939867e+00 2.524183e+00 380 3.536664e-08 2.989747e+00 2.594930e+00 381 3.546664e-08 3.040121e+00 2.656514e+00 382 3.556664e-08 3.088471e+00 2.728137e+00 383 3.566664e-08 3.136093e+00 2.785106e+00 384 3.576664e-08 3.182050e+00 2.854337e+00 385 3.586664e-08 3.227127e+00 2.907539e+00 386 3.596664e-08 3.270825e+00 2.972773e+00 387 3.606664e-08 3.314300e+00 3.021574e+00 388 3.616664e-08 3.374001e+00 3.076418e+00 389 3.626664e-08 3.451705e+00 3.131477e+00 390 3.636664e-08 3.518606e+00 3.183576e+00 391 3.646664e-08 3.559757e+00 3.235239e+00 392 3.656664e-08 3.603529e+00 3.285211e+00 393 3.666664e-08 3.647057e+00 3.334530e+00 394 3.676664e-08 3.688153e+00 3.381950e+00 395 3.686664e-08 3.729181e+00 3.428827e+00 396 3.696664e-08 3.767726e+00 3.473874e+00 397 3.706664e-08 3.805831e+00 3.518547e+00 398 3.716664e-08 3.840643e+00 3.564490e+00 399 3.726664e-08 3.876393e+00 3.616856e+00 400 3.736664e-08 3.911530e+00 3.669535e+00 401 3.746664e-08 3.944792e+00 3.714671e+00 402 3.756664e-08 3.977781e+00 3.753485e+00 Index time v(2) v(3) -------------------------------------------------------------------------------- 403 3.766664e-08 4.009352e+00 3.793508e+00 404 3.776664e-08 4.040426e+00 3.832018e+00 405 3.786664e-08 4.070195e+00 3.869517e+00 406 3.796664e-08 4.099453e+00 3.905760e+00 407 3.806664e-08 4.127558e+00 3.940978e+00 408 3.816664e-08 4.155686e+00 3.974752e+00 409 3.826664e-08 4.184627e+00 4.007616e+00 410 3.836664e-08 4.214806e+00 4.039765e+00 411 3.846664e-08 4.242992e+00 4.071162e+00 412 3.856664e-08 4.268124e+00 4.101226e+00 413 3.866664e-08 4.291856e+00 4.130775e+00 414 3.876664e-08 4.315596e+00 4.159124e+00 415 3.886664e-08 4.338378e+00 4.186897e+00 416 3.896664e-08 4.360494e+00 4.213567e+00 417 3.906664e-08 4.381839e+00 4.239673e+00 418 3.916664e-08 4.402482e+00 4.264846e+00 419 3.926664e-08 4.422365e+00 4.289831e+00 420 3.936664e-08 4.441714e+00 4.314473e+00 421 3.946664e-08 4.460515e+00 4.338694e+00 422 3.956664e-08 4.478698e+00 4.361403e+00 423 3.966664e-08 4.496255e+00 4.383016e+00 424 3.976664e-08 4.513303e+00 4.403868e+00 425 3.986664e-08 4.529762e+00 4.424311e+00 426 3.996664e-08 4.545718e+00 4.443926e+00 427 4.006664e-08 4.561135e+00 4.463010e+00 428 4.016664e-08 4.576086e+00 4.481364e+00 429 4.026664e-08 4.590620e+00 4.499190e+00 430 4.036664e-08 4.604874e+00 4.516345e+00 431 4.046664e-08 4.618803e+00 4.533049e+00 432 4.056664e-08 4.632196e+00 4.549139e+00 433 4.066664e-08 4.644919e+00 4.564759e+00 434 4.076664e-08 4.657138e+00 4.579795e+00 435 4.086664e-08 4.669006e+00 4.594405e+00 436 4.096664e-08 4.680493e+00 4.608463e+00 437 4.106664e-08 4.691580e+00 4.622117e+00 438 4.116664e-08 4.702289e+00 4.635259e+00 439 4.126664e-08 4.712635e+00 4.648032e+00 440 4.136664e-08 4.722622e+00 4.660363e+00 441 4.146664e-08 4.732282e+00 4.672380e+00 442 4.156664e-08 4.741616e+00 4.683955e+00 443 4.166664e-08 4.750639e+00 4.695132e+00 444 4.176664e-08 4.759346e+00 4.705836e+00 445 4.186664e-08 4.767764e+00 4.716215e+00 446 4.196664e-08 4.775889e+00 4.726217e+00 447 4.206664e-08 4.783742e+00 4.735914e+00 448 4.216664e-08 4.791321e+00 4.745240e+00 449 4.226664e-08 4.798649e+00 4.754280e+00 450 4.236664e-08 4.805730e+00 4.762974e+00 451 4.246664e-08 4.812588e+00 4.771401e+00 452 4.256664e-08 4.819217e+00 4.779510e+00 453 4.266664e-08 4.825614e+00 4.787369e+00 454 4.276664e-08 4.831764e+00 4.794929e+00 455 4.286664e-08 4.837697e+00 4.802253e+00 456 4.296664e-08 4.843424e+00 4.809298e+00 457 4.306664e-08 4.848960e+00 4.816123e+00 458 4.316664e-08 4.854298e+00 4.822688e+00 459 4.326664e-08 4.859453e+00 4.829048e+00 460 4.336664e-08 4.864424e+00 4.835165e+00 Index time v(2) v(3) -------------------------------------------------------------------------------- 461 4.346664e-08 4.869225e+00 4.841095e+00 462 4.356664e-08 4.873855e+00 4.846801e+00 463 4.366664e-08 4.878328e+00 4.852327e+00 464 4.376664e-08 4.882641e+00 4.857637e+00 465 4.386664e-08 4.886806e+00 4.862774e+00 466 4.396664e-08 4.890822e+00 4.867713e+00 467 4.406664e-08 4.894700e+00 4.872496e+00 468 4.416664e-08 4.898439e+00 4.877096e+00 469 4.426664e-08 4.902049e+00 4.881549e+00 470 4.436664e-08 4.905531e+00 4.885829e+00 471 4.446664e-08 4.908893e+00 4.889974e+00 472 4.456664e-08 4.912136e+00 4.893958e+00 473 4.466664e-08 4.915268e+00 4.897815e+00 474 4.476664e-08 4.918287e+00 4.901523e+00 475 4.486664e-08 4.921199e+00 4.905112e+00 476 4.496664e-08 4.924005e+00 4.908562e+00 477 4.506664e-08 4.926715e+00 4.911901e+00 478 4.516664e-08 4.929327e+00 4.915111e+00 479 4.526664e-08 4.931849e+00 4.918218e+00 480 4.536664e-08 4.934279e+00 4.921205e+00 481 4.546664e-08 4.936625e+00 4.924095e+00 482 4.556664e-08 4.938886e+00 4.926874e+00 483 4.566664e-08 4.941069e+00 4.929563e+00 484 4.576664e-08 4.943173e+00 4.932147e+00 485 4.586664e-08 4.945203e+00 4.934648e+00 486 4.596664e-08 4.947161e+00 4.937051e+00 487 4.606664e-08 4.949050e+00 4.939376e+00 488 4.616664e-08 4.950870e+00 4.941611e+00 489 4.626664e-08 4.952627e+00 4.943774e+00 490 4.636664e-08 4.954321e+00 4.945852e+00 491 4.646664e-08 4.955955e+00 4.947862e+00 492 4.656664e-08 4.957531e+00 4.949794e+00 493 4.666664e-08 4.959051e+00 4.951664e+00 494 4.676664e-08 4.960516e+00 4.953460e+00 495 4.686664e-08 4.961930e+00 4.955198e+00 496 4.696664e-08 4.963293e+00 4.956868e+00 497 4.700000e-08 4.963736e+00 4.957326e+00 tmpk8ny_4pz/tests/transmission/txl2_3_line.out0000644000175000017500000015000113546075722021723 0ustar carstencarstenCircuit: mosdriver -- 3 lossy lines txl model -- c load Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 Warning: vs: no DC value, transient time 0 value used No. of Data Rows : 497 mosdriver -- 3 lossy lines txl model -- c load Transient Analysis Sun Feb 07 19:00:58 2010 -------------------------------------------------------------------------------- Index time v(2) v(3) v(4) -------------------------------------------------------------------------------- 0 0.000000e+00 5.000000e+00 5.000000e+00 1.242558e-09 1 2.000000e-12 5.000000e+00 5.000000e+00 1.242558e-09 2 4.000000e-12 5.000000e+00 5.000000e+00 1.242543e-09 3 8.000000e-12 5.000000e+00 5.000000e+00 1.245466e-09 4 1.600000e-11 5.000000e+00 5.000000e+00 1.262555e-09 5 3.200000e-11 5.000001e+00 5.000001e+00 1.340474e-09 6 6.400000e-11 5.000005e+00 5.000008e+00 1.679891e-09 7 1.280000e-10 5.000041e+00 5.000062e+00 3.094346e-09 8 2.280000e-10 5.000154e+00 5.000229e+00 4.125711e-09 9 3.280000e-10 5.000118e+00 5.000174e+00 -2.58962e-09 10 4.280000e-10 5.000068e+00 5.000110e+00 3.170042e-09 11 5.280000e-10 5.000035e+00 5.000059e+00 -1.84303e-09 12 6.280000e-10 4.999991e+00 5.000000e+00 2.511713e-09 13 7.280000e-10 4.999962e+00 4.999953e+00 -1.22743e-09 14 8.280000e-10 4.999924e+00 4.999900e+00 1.970489e-09 15 9.280000e-10 4.999898e+00 4.999857e+00 -7.32261e-10 16 1.028000e-09 4.999866e+00 4.999808e+00 1.538286e-09 17 1.128000e-09 4.999852e+00 4.999772e+00 -2.10601e-10 18 1.228000e-09 4.999868e+00 4.999750e+00 1.721858e-09 19 1.328000e-09 4.999860e+00 4.999721e+00 -2.22888e-10 20 1.428000e-09 4.999813e+00 4.999665e+00 7.786944e-10 21 1.528000e-09 4.999777e+00 4.999620e+00 1.276023e-10 22 1.628000e-09 4.999734e+00 4.999569e+00 5.065352e-10 23 1.728000e-09 4.999700e+00 4.999528e+00 4.127559e-10 24 1.828000e-09 4.999662e+00 4.999481e+00 3.116747e-10 25 1.928000e-09 4.999631e+00 4.999444e+00 6.262388e-10 26 2.028000e-09 4.999596e+00 4.999401e+00 1.823706e-10 27 2.128000e-09 4.999569e+00 4.999368e+00 1.005133e-09 28 2.228000e-09 4.999542e+00 4.999337e+00 8.705708e-10 29 2.328000e-09 4.999521e+00 4.999312e+00 1.055088e-09 30 2.428000e-09 4.999491e+00 4.999274e+00 -2.47565e-10 31 2.528000e-09 4.999462e+00 4.999239e+00 7.072365e-10 32 2.628000e-09 4.999432e+00 4.999201e+00 -3.00623e-10 33 2.728000e-09 4.999406e+00 4.999168e+00 7.730868e-10 34 2.828000e-09 4.999378e+00 4.999133e+00 -3.12858e-10 35 2.928000e-09 4.999354e+00 4.999103e+00 8.101524e-10 36 3.028000e-09 4.999330e+00 4.999071e+00 -3.00812e-10 37 3.128000e-09 4.999308e+00 4.999043e+00 8.486718e-10 38 3.228000e-09 4.999287e+00 4.999015e+00 -1.69307e-10 39 3.328000e-09 4.999269e+00 4.998990e+00 9.213174e-10 40 3.428000e-09 4.999249e+00 4.998964e+00 -2.54060e-10 41 3.528000e-09 4.999228e+00 4.998939e+00 7.827906e-10 42 3.628000e-09 4.999208e+00 4.998913e+00 -2.37817e-10 43 3.728000e-09 4.999188e+00 4.998890e+00 7.811733e-10 44 3.828000e-09 4.999169e+00 4.998866e+00 -1.76162e-10 45 3.928000e-09 4.999152e+00 4.998845e+00 7.786272e-10 46 4.028000e-09 4.999134e+00 4.998823e+00 -1.11990e-10 47 4.128000e-09 4.999118e+00 4.998803e+00 7.844326e-10 48 4.228000e-09 4.999102e+00 4.998783e+00 2.507934e-12 49 4.328000e-09 4.999087e+00 4.998766e+00 8.405882e-10 50 4.428000e-09 4.999073e+00 4.998747e+00 2.750005e-11 51 4.528000e-09 4.999059e+00 4.998731e+00 7.357245e-10 52 4.628000e-09 4.999045e+00 4.998713e+00 3.050852e-11 53 4.728000e-09 4.999032e+00 4.998697e+00 7.237099e-10 54 4.828000e-09 4.999019e+00 4.998681e+00 9.207653e-11 Index time v(2) v(3) v(4) -------------------------------------------------------------------------------- 55 4.928000e-09 4.999007e+00 4.998666e+00 7.265572e-10 56 5.028000e-09 4.998995e+00 4.998651e+00 1.519375e-10 57 5.128000e-09 4.998984e+00 4.998638e+00 7.324520e-10 58 5.228000e-09 4.998973e+00 4.998624e+00 2.150942e-10 59 5.328000e-09 4.998963e+00 4.998612e+00 7.498723e-10 60 5.428000e-09 4.998953e+00 4.998599e+00 2.707076e-10 61 5.528000e-09 4.998944e+00 4.998588e+00 7.440876e-10 62 5.628000e-09 4.998935e+00 4.998576e+00 3.080677e-10 63 5.728000e-09 4.998926e+00 4.998565e+00 7.490067e-10 64 5.828000e-09 4.998917e+00 4.998554e+00 3.578036e-10 65 5.928000e-09 4.998909e+00 4.998545e+00 7.620180e-10 66 6.028000e-09 4.998901e+00 4.998535e+00 4.061682e-10 67 6.128000e-09 4.998894e+00 4.998526e+00 7.764535e-10 68 6.228000e-09 4.998887e+00 4.998516e+00 4.542915e-10 69 6.328000e-09 4.998880e+00 4.998508e+00 7.965215e-10 70 6.428000e-09 4.998873e+00 4.998500e+00 5.004937e-10 71 6.528000e-09 4.998867e+00 4.998492e+00 8.066942e-10 72 6.628000e-09 4.998860e+00 4.998484e+00 5.322892e-10 73 6.728000e-09 4.998855e+00 4.998477e+00 8.165741e-10 74 6.828000e-09 4.998849e+00 4.998470e+00 5.695229e-10 75 6.928000e-09 4.998843e+00 4.998463e+00 8.327985e-10 76 7.028000e-09 4.998838e+00 4.998456e+00 6.067761e-10 77 7.128000e-09 4.998833e+00 4.998450e+00 8.494474e-10 78 7.228000e-09 4.998829e+00 4.998444e+00 6.423110e-10 79 7.328000e-09 4.998824e+00 4.998438e+00 8.666926e-10 80 7.428000e-09 4.998820e+00 4.998433e+00 6.763910e-10 81 7.528000e-09 4.998815e+00 4.998428e+00 8.826651e-10 82 7.628000e-09 4.998811e+00 4.998422e+00 7.064945e-10 83 7.728000e-09 4.998807e+00 4.998418e+00 8.973049e-10 84 7.828000e-09 4.998804e+00 4.998413e+00 7.357214e-10 85 7.928000e-09 4.998800e+00 4.998408e+00 9.141890e-10 86 8.028000e-09 4.998797e+00 4.998404e+00 7.633493e-10 87 8.128000e-09 4.998793e+00 4.998400e+00 9.293863e-10 88 8.228000e-09 4.998790e+00 4.998395e+00 7.902937e-10 89 8.328000e-09 4.998787e+00 4.998392e+00 9.443821e-10 90 8.428000e-09 4.998784e+00 4.998388e+00 8.160159e-10 91 8.528000e-09 4.998781e+00 4.998384e+00 9.585922e-10 92 8.628000e-09 4.998779e+00 4.998381e+00 8.393134e-10 93 8.728000e-09 4.998776e+00 4.998377e+00 9.713821e-10 94 8.828000e-09 4.998773e+00 4.998374e+00 8.613221e-10 95 8.928000e-09 4.998771e+00 4.998371e+00 9.836152e-10 96 9.028000e-09 4.998769e+00 4.998368e+00 8.828005e-10 97 9.128000e-09 4.998766e+00 4.998365e+00 9.963367e-10 98 9.228000e-09 4.998764e+00 4.998362e+00 9.027781e-10 99 9.328000e-09 4.998762e+00 4.998359e+00 1.008340e-09 100 9.428000e-09 4.998760e+00 4.998357e+00 9.216000e-10 101 9.528000e-09 4.998758e+00 4.998354e+00 1.019755e-09 102 9.628000e-09 4.998757e+00 4.998352e+00 9.391561e-10 103 9.728000e-09 4.998755e+00 4.998349e+00 1.030418e-09 104 9.828000e-09 4.998753e+00 4.998347e+00 9.553296e-10 105 9.928000e-09 4.998751e+00 4.998345e+00 1.040844e-09 106 1.002800e-08 4.998750e+00 4.998343e+00 9.711099e-10 107 1.012800e-08 4.998748e+00 4.998341e+00 1.050329e-09 108 1.022800e-08 4.998747e+00 4.998338e+00 9.856694e-10 109 1.032800e-08 4.998746e+00 4.998337e+00 1.059444e-09 110 1.042800e-08 4.998744e+00 4.998335e+00 9.993870e-10 111 1.052800e-08 4.998743e+00 4.998333e+00 1.068055e-09 112 1.062800e-08 4.998742e+00 4.998331e+00 1.012196e-09 Index time v(2) v(3) v(4) -------------------------------------------------------------------------------- 113 1.072800e-08 4.998740e+00 4.998329e+00 1.076087e-09 114 1.082800e-08 4.998739e+00 4.998327e+00 1.024113e-09 115 1.092800e-08 4.998738e+00 4.998326e+00 1.083632e-09 116 1.102800e-08 4.998737e+00 4.998324e+00 1.035358e-09 117 1.112800e-08 4.998736e+00 4.998323e+00 1.090818e-09 118 1.122800e-08 4.998735e+00 4.998321e+00 1.045883e-09 119 1.132800e-08 4.998734e+00 4.998320e+00 1.097557e-09 120 1.142800e-08 4.998733e+00 4.998318e+00 1.055740e-09 121 1.152800e-08 4.998732e+00 4.998317e+00 1.103894e-09 122 1.162800e-08 4.998731e+00 4.998315e+00 1.064962e-09 123 1.172800e-08 4.998730e+00 4.998314e+00 1.109833e-09 124 1.182800e-08 4.998730e+00 4.998313e+00 1.073569e-09 125 1.192800e-08 4.998729e+00 4.998312e+00 1.115397e-09 126 1.202800e-08 4.998728e+00 4.998310e+00 1.081659e-09 127 1.212800e-08 4.998727e+00 4.998309e+00 1.120655e-09 128 1.222800e-08 4.998726e+00 4.998308e+00 1.089219e-09 129 1.232800e-08 4.998726e+00 4.998307e+00 1.125575e-09 130 1.242800e-08 4.998725e+00 4.998306e+00 1.096303e-09 131 1.252800e-08 4.998724e+00 4.998305e+00 1.130205e-09 132 1.262800e-08 4.998724e+00 4.998303e+00 1.102942e-09 133 1.272800e-08 4.998723e+00 4.998302e+00 1.134553e-09 134 1.282800e-08 4.998723e+00 4.998301e+00 1.109157e-09 135 1.292800e-08 4.998722e+00 4.998300e+00 1.138638e-09 136 1.302800e-08 4.998721e+00 4.998299e+00 1.114989e-09 137 1.312800e-08 4.998721e+00 4.998298e+00 1.142494e-09 138 1.322800e-08 4.998720e+00 4.998297e+00 1.120470e-09 139 1.332800e-08 4.998720e+00 4.998297e+00 1.146127e-09 140 1.342800e-08 4.998719e+00 4.998296e+00 1.125619e-09 141 1.352800e-08 4.998719e+00 4.998295e+00 1.149558e-09 142 1.362800e-08 4.998718e+00 4.998294e+00 1.130463e-09 143 1.372800e-08 4.998718e+00 4.998293e+00 1.152800e-09 144 1.382800e-08 4.998717e+00 4.998292e+00 1.135021e-09 145 1.392800e-08 4.998717e+00 4.998291e+00 1.155868e-09 146 1.402800e-08 4.998717e+00 4.998290e+00 1.139319e-09 147 1.412800e-08 4.998716e+00 4.998290e+00 1.158779e-09 148 1.422800e-08 4.998716e+00 4.998289e+00 1.143378e-09 149 1.432800e-08 4.998715e+00 4.998288e+00 1.161545e-09 150 1.442800e-08 4.998715e+00 4.998287e+00 1.147214e-09 151 1.452800e-08 4.998715e+00 4.998287e+00 1.164177e-09 152 1.462800e-08 4.998714e+00 4.998286e+00 1.150845e-09 153 1.472800e-08 4.998714e+00 4.998285e+00 1.166688e-09 154 1.482800e-08 4.998714e+00 4.998285e+00 1.154288e-09 155 1.492800e-08 4.998713e+00 4.998284e+00 1.169087e-09 156 1.502800e-08 4.998713e+00 4.998283e+00 1.157558e-09 157 1.512800e-08 4.998713e+00 4.998283e+00 1.171386e-09 158 1.522800e-08 4.998713e+00 4.998282e+00 1.160670e-09 159 1.532800e-08 4.998712e+00 4.998281e+00 1.173594e-09 160 1.542800e-08 4.998712e+00 4.998281e+00 1.163637e-09 161 1.552800e-08 4.998712e+00 4.998280e+00 1.175717e-09 162 1.562800e-08 4.998712e+00 4.998280e+00 1.166469e-09 163 1.572800e-08 4.998711e+00 4.998279e+00 1.177765e-09 164 1.582800e-08 4.998711e+00 4.998278e+00 1.169178e-09 165 1.590000e-08 4.998596e+00 4.998106e+00 -5.13567e-09 166 1.590621e-08 4.998579e+00 4.997997e+00 -1.83926e-08 167 1.591862e-08 4.998550e+00 4.997974e+00 6.346984e-09 168 1.594345e-08 4.995095e+00 4.998019e+00 1.472412e-09 169 1.599311e-08 4.879178e+00 4.998054e+00 2.266807e-09 170 1.609242e-08 3.937755e+00 4.998339e+00 7.504918e-09 Index time v(2) v(3) v(4) -------------------------------------------------------------------------------- 171 1.610000e-08 3.827512e+00 4.998084e+00 -5.86240e-08 172 1.610492e-08 3.860707e+00 4.998157e+00 -6.10953e-08 173 1.611477e-08 3.879622e+00 4.998179e+00 -8.41332e-08 174 1.613386e-08 3.853706e+00 4.998171e+00 -7.67199e-08 175 1.617205e-08 3.828861e+00 4.998220e+00 -7.42199e-08 176 1.623935e-08 3.771815e+00 4.998299e+00 -7.02048e-08 177 1.633935e-08 3.699970e+00 4.998518e+00 -6.13310e-08 178 1.643935e-08 3.624656e+00 4.998498e+00 -6.50394e-08 179 1.653935e-08 3.558276e+00 4.998495e+00 -5.16514e-08 180 1.663935e-08 3.490207e+00 4.998476e+00 -5.55976e-08 181 1.673935e-08 3.429310e+00 4.998474e+00 -4.35959e-08 182 1.683935e-08 3.367460e+00 4.998457e+00 -4.77477e-08 183 1.693935e-08 3.311334e+00 4.998448e+00 -3.71909e-08 184 1.703935e-08 3.254840e+00 4.797835e+00 -5.54993e-06 185 1.713935e-08 3.203127e+00 3.826105e+00 5.064420e-03 186 1.723935e-08 3.151372e+00 3.713212e+00 9.502307e-03 187 1.733935e-08 3.103560e+00 3.641266e+00 1.268004e-02 188 1.743935e-08 3.055858e+00 3.515604e+00 1.964915e-02 189 1.753935e-08 3.011387e+00 3.447536e+00 2.458117e-02 190 1.763935e-08 2.967239e+00 3.329946e+00 3.334942e-02 191 1.773935e-08 2.925829e+00 3.265227e+00 4.006438e-02 192 1.783935e-08 2.884857e+00 3.155053e+00 5.051478e-02 193 1.793935e-08 2.846196e+00 3.093333e+00 5.902981e-02 194 1.803935e-08 2.759757e+00 2.989863e+00 7.108756e-02 195 1.813935e-08 2.458805e+00 2.930902e+00 8.140762e-02 196 1.823935e-08 2.231108e+00 2.833589e+00 9.494365e-02 197 1.833935e-08 2.166411e+00 2.777145e+00 1.071323e-01 198 1.843935e-08 2.083595e+00 2.685425e+00 1.222198e-01 199 1.853935e-08 2.019836e+00 2.631232e+00 1.361435e-01 200 1.863935e-08 1.944661e+00 2.544606e+00 1.528258e-01 201 1.873935e-08 1.884177e+00 2.492496e+00 1.685821e-01 202 1.883935e-08 1.815614e+00 2.410566e+00 1.867917e-01 203 1.893935e-08 1.758381e+00 2.360384e+00 2.043896e-01 204 1.903935e-08 1.695579e+00 2.271978e+00 2.261858e-01 205 1.913935e-08 1.641507e+00 2.157617e+00 2.604277e-01 206 1.923935e-08 1.583784e+00 1.998137e+00 3.064034e-01 207 1.933935e-08 1.532757e+00 1.916456e+00 3.434411e-01 208 1.943935e-08 1.479515e+00 1.831939e+00 3.781630e-01 209 1.953935e-08 1.431367e+00 1.774557e+00 4.134740e-01 210 1.963935e-08 1.382096e+00 1.696126e+00 4.517174e-01 211 1.973935e-08 1.336676e+00 1.642180e+00 4.911377e-01 212 1.983935e-08 1.290953e+00 1.569437e+00 5.331126e-01 213 1.993935e-08 1.248108e+00 1.518768e+00 5.767541e-01 214 2.003935e-08 1.203348e+00 1.451225e+00 6.227303e-01 215 2.013935e-08 1.147816e+00 1.403667e+00 6.705404e-01 216 2.023935e-08 1.080997e+00 1.340897e+00 7.189791e-01 217 2.033935e-08 1.023582e+00 1.296286e+00 7.685504e-01 218 2.043935e-08 9.786948e-01 1.237902e+00 8.181474e-01 219 2.053935e-08 9.381659e-01 1.196063e+00 8.692346e-01 220 2.063935e-08 8.994869e-01 1.141711e+00 9.199837e-01 221 2.073935e-08 8.618515e-01 1.102481e+00 9.724574e-01 222 2.083935e-08 8.261949e-01 1.051847e+00 1.024375e+00 223 2.093935e-08 7.912536e-01 1.015067e+00 1.078123e+00 224 2.103935e-08 7.583450e-01 9.675177e-01 1.131683e+00 225 2.113935e-08 7.259043e-01 9.303876e-01 1.190582e+00 226 2.123935e-08 6.954989e-01 8.802364e-01 1.255018e+00 227 2.133935e-08 6.653763e-01 8.417874e-01 1.323514e+00 228 2.143935e-08 6.372551e-01 7.976866e-01 1.388578e+00 Index time v(2) v(3) v(4) -------------------------------------------------------------------------------- 229 2.153935e-08 6.092764e-01 7.664294e-01 1.453448e+00 230 2.163935e-08 5.832392e-01 7.277166e-01 1.517766e+00 231 2.173935e-08 5.572414e-01 6.991309e-01 1.584090e+00 232 2.183935e-08 5.331100e-01 6.633304e-01 1.649486e+00 233 2.193935e-08 5.089422e-01 6.368757e-01 1.716198e+00 234 2.203935e-08 4.864882e-01 6.037533e-01 1.781962e+00 235 2.213935e-08 4.634523e-01 5.792649e-01 1.848989e+00 236 2.223935e-08 4.411249e-01 5.486057e-01 1.914800e+00 237 2.233935e-08 4.182061e-01 5.259294e-01 1.981303e+00 238 2.243935e-08 3.974951e-01 4.975357e-01 2.046219e+00 239 2.253935e-08 3.774426e-01 4.765269e-01 2.111598e+00 240 2.263935e-08 3.592840e-01 4.502158e-01 2.175396e+00 241 2.273935e-08 3.410692e-01 4.307398e-01 2.239541e+00 242 2.283935e-08 3.243316e-01 4.063429e-01 2.302140e+00 243 2.293935e-08 3.074692e-01 3.882750e-01 2.364984e+00 244 2.303935e-08 2.919848e-01 3.656289e-01 2.426375e+00 245 2.313935e-08 2.763615e-01 3.487754e-01 2.488316e+00 246 2.323935e-08 2.620218e-01 3.275000e-01 2.549896e+00 247 2.333935e-08 2.475337e-01 3.115020e-01 2.612742e+00 248 2.343935e-08 2.342395e-01 2.916126e-01 2.674496e+00 249 2.353935e-08 2.207909e-01 2.769511e-01 2.735785e+00 250 2.363935e-08 2.084516e-01 2.587715e-01 2.795372e+00 251 2.373935e-08 1.959544e-01 2.453191e-01 2.854835e+00 252 2.383935e-08 1.844871e-01 2.284788e-01 2.912958e+00 253 2.393935e-08 1.728606e-01 2.159786e-01 2.970772e+00 254 2.403935e-08 1.621880e-01 2.003190e-01 3.027119e+00 255 2.413935e-08 1.513426e-01 1.886802e-01 3.083042e+00 256 2.423935e-08 1.413410e-01 1.740994e-01 3.137516e+00 257 2.433935e-08 1.311306e-01 1.632439e-01 3.191452e+00 258 2.443935e-08 1.217322e-01 1.496484e-01 3.243901e+00 259 2.453935e-08 1.122238e-01 1.395050e-01 3.295705e+00 260 2.463935e-08 1.035303e-01 1.268095e-01 3.346041e+00 261 2.473935e-08 9.471782e-02 1.173130e-01 3.395691e+00 262 2.483935e-08 8.662314e-02 1.054394e-01 3.443919e+00 263 2.493935e-08 7.838867e-02 9.653069e-02 3.491434e+00 264 2.503935e-08 7.081219e-02 8.540747e-02 3.537581e+00 265 2.513935e-08 6.309859e-02 7.703071e-02 3.583025e+00 266 2.523935e-08 5.599355e-02 6.658513e-02 3.627247e+00 267 2.533935e-08 4.875536e-02 5.867738e-02 3.670899e+00 268 2.543935e-08 4.208000e-02 4.884319e-02 3.713427e+00 269 2.553935e-08 3.527588e-02 4.137685e-02 3.755237e+00 270 2.563935e-08 2.899231e-02 3.213308e-02 3.795777e+00 271 2.573935e-08 2.258470e-02 2.508912e-02 3.835523e+00 272 2.583935e-08 1.665862e-02 1.638318e-02 3.874084e+00 273 2.593935e-08 1.061343e-02 9.710064e-03 3.911890e+00 274 2.603935e-08 5.013742e-03 1.485719e-03 3.948555e+00 275 2.613935e-08 -7.00270e-04 -4.85432e-03 3.984457e+00 276 2.623935e-08 -6.00274e-03 -1.26392e-02 4.019261e+00 277 2.633935e-08 -1.14155e-02 -1.86766e-02 4.053309e+00 278 2.643935e-08 -1.64478e-02 -2.60594e-02 4.086300e+00 279 2.653935e-08 -2.15821e-02 -3.18213e-02 4.118544e+00 280 2.663935e-08 -2.63591e-02 -3.88359e-02 4.149775e+00 281 2.673935e-08 -3.12298e-02 -4.43465e-02 4.180276e+00 282 2.683935e-08 -3.57701e-02 -5.10234e-02 4.209813e+00 283 2.693935e-08 -4.04014e-02 -5.63046e-02 4.238641e+00 284 2.703935e-08 -4.47279e-02 -6.26713e-02 4.266556e+00 285 2.713935e-08 -4.91408e-02 -6.77426e-02 4.293789e+00 286 2.723935e-08 -5.32714e-02 -7.38237e-02 4.320163e+00 Index time v(2) v(3) v(4) -------------------------------------------------------------------------------- 287 2.733935e-08 -5.74834e-02 -7.87017e-02 4.345894e+00 288 2.743935e-08 -6.14334e-02 -8.45187e-02 4.370824e+00 289 2.753935e-08 -6.54598e-02 -8.92179e-02 4.395137e+00 290 2.763935e-08 -6.92431e-02 -9.47895e-02 4.418679e+00 291 2.773935e-08 -7.30979e-02 -9.93221e-02 4.441613e+00 292 2.783935e-08 -7.67267e-02 -1.04665e-01 4.463812e+00 293 2.793935e-08 -8.04223e-02 -1.09044e-01 4.485432e+00 294 2.803935e-08 -8.39078e-02 -1.14176e-01 4.506363e+00 295 2.813935e-08 -8.74554e-02 -1.18412e-01 4.526741e+00 296 2.823935e-08 -9.08074e-02 -1.23348e-01 4.546470e+00 297 2.833935e-08 -9.42170e-02 -1.27451e-01 4.565673e+00 298 2.843935e-08 -9.74441e-02 -1.32204e-01 4.584265e+00 299 2.853935e-08 -1.00724e-01 -1.36182e-01 4.602357e+00 300 2.863935e-08 -1.03834e-01 -1.40765e-01 4.619874e+00 301 2.873935e-08 -1.06993e-01 -1.44626e-01 4.636918e+00 302 2.883935e-08 -1.09992e-01 -1.49047e-01 4.653423e+00 303 2.893935e-08 -1.13035e-01 -1.52798e-01 4.669480e+00 304 2.903935e-08 -1.15931e-01 -1.57068e-01 4.685032e+00 305 2.913935e-08 -1.18866e-01 -1.60714e-01 4.700161e+00 306 2.923935e-08 -1.21663e-01 -1.64842e-01 4.714819e+00 307 2.933935e-08 -1.24497e-01 -1.68387e-01 4.729079e+00 308 2.943935e-08 -1.27201e-01 -1.72380e-01 4.742899e+00 309 2.953935e-08 -1.29938e-01 -1.75830e-01 4.756345e+00 310 2.963935e-08 -1.32553e-01 -1.79694e-01 4.769380e+00 311 2.973935e-08 -1.35198e-01 -1.83052e-01 4.782063e+00 312 2.983935e-08 -1.37728e-01 -1.86793e-01 4.794360e+00 313 2.993935e-08 -1.40285e-01 -1.90063e-01 4.806326e+00 314 3.003935e-08 -1.42734e-01 -1.93687e-01 4.817931e+00 315 3.013935e-08 -1.45207e-01 -1.96871e-01 4.829226e+00 316 3.023935e-08 -1.47578e-01 -2.00383e-01 4.840184e+00 317 3.033935e-08 -1.49970e-01 -2.03484e-01 4.850852e+00 318 3.043935e-08 -1.52266e-01 -2.06887e-01 4.861205e+00 319 3.053935e-08 -1.54581e-01 -2.09907e-01 4.871286e+00 320 3.063935e-08 -1.56804e-01 -2.13207e-01 4.881074e+00 321 3.073935e-08 -1.59044e-01 -2.16148e-01 4.890606e+00 322 3.083935e-08 -1.61197e-01 -2.19347e-01 4.899866e+00 323 3.093935e-08 -1.63364e-01 -2.22211e-01 4.908886e+00 324 3.103935e-08 -1.65450e-01 -2.25313e-01 4.917653e+00 325 3.113935e-08 -1.67546e-01 -2.28101e-01 4.926195e+00 326 3.123935e-08 -1.69565e-01 -2.31108e-01 4.934500e+00 327 3.133935e-08 -1.71593e-01 -2.33822e-01 4.942597e+00 328 3.143935e-08 -1.73548e-01 -2.36737e-01 4.950472e+00 329 3.153935e-08 -1.75510e-01 -2.39378e-01 4.958152e+00 330 3.163935e-08 -1.77402e-01 -2.42204e-01 4.965626e+00 331 3.173935e-08 -1.79299e-01 -2.44772e-01 4.972917e+00 332 3.183935e-08 -1.81130e-01 -2.47510e-01 4.980016e+00 333 3.190000e-08 -1.82289e-01 -2.48974e-01 4.984137e+00 334 3.191000e-08 -1.85649e-01 -2.49280e-01 4.984752e+00 335 3.193000e-08 -1.94025e-01 -2.49822e-01 4.986135e+00 336 3.197000e-08 -1.83181e-01 -2.50858e-01 4.988910e+00 337 3.203371e-08 2.884582e-02 -2.52452e-01 4.993175e+00 338 3.209348e-08 5.436334e-01 -2.53934e-01 4.997160e+00 339 3.210000e-08 6.203501e-01 -2.54108e-01 4.997549e+00 340 3.210125e-08 6.309529e-01 -2.54139e-01 4.997631e+00 341 3.210375e-08 6.472974e-01 -2.54203e-01 4.997792e+00 342 3.210875e-08 6.612459e-01 -2.54326e-01 4.998106e+00 343 3.211876e-08 6.684241e-01 -2.54576e-01 4.998752e+00 344 3.213525e-08 6.767259e-01 -2.54997e-01 4.999842e+00 Index time v(2) v(3) v(4) -------------------------------------------------------------------------------- 345 3.216415e-08 6.920924e-01 -2.55728e-01 5.001736e+00 346 3.222196e-08 7.217340e-01 -2.57136e-01 5.005443e+00 347 3.232196e-08 7.718774e-01 -2.59566e-01 5.011858e+00 348 3.242196e-08 8.206479e-01 -2.61985e-01 5.018005e+00 349 3.252196e-08 8.677878e-01 -2.64353e-01 5.023983e+00 350 3.262196e-08 9.130801e-01 -2.66697e-01 5.029838e+00 351 3.272196e-08 9.568678e-01 -2.68991e-01 5.035537e+00 352 3.282196e-08 9.990343e-01 -2.71262e-01 5.041118e+00 353 3.292196e-08 1.039879e+00 -2.73501e-01 5.046534e+00 354 3.302196e-08 1.079237e+00 -2.28453e-01 5.051992e+00 355 3.312196e-08 1.117432e+00 3.593319e-01 5.059704e+00 356 3.317320e-08 1.136576e+00 5.898828e-01 5.063545e+00 357 3.323667e-08 1.159761e+00 6.317097e-01 5.067313e+00 358 3.330065e-08 1.182495e+00 6.810272e-01 5.071174e+00 359 3.337230e-08 1.207534e+00 7.256570e-01 5.075414e+00 360 3.347230e-08 1.241588e+00 7.974353e-01 5.081440e+00 361 3.357230e-08 1.274778e+00 8.593577e-01 5.087056e+00 362 3.367230e-08 1.306987e+00 9.278660e-01 5.092232e+00 363 3.377230e-08 1.338320e+00 9.870126e-01 5.096966e+00 364 3.387230e-08 1.368770e+00 1.052258e+00 5.101193e+00 365 3.397230e-08 1.401268e+00 1.108877e+00 5.105054e+00 366 3.407230e-08 1.483282e+00 1.171118e+00 5.108361e+00 367 3.417230e-08 1.757918e+00 1.225402e+00 5.111341e+00 368 3.427230e-08 1.905600e+00 1.284950e+00 5.113718e+00 369 3.437230e-08 1.960800e+00 1.336898e+00 5.115898e+00 370 3.447230e-08 2.033160e+00 1.393742e+00 5.117534e+00 371 3.457230e-08 2.084375e+00 1.443888e+00 5.118885e+00 372 3.467230e-08 2.152114e+00 1.498498e+00 5.119647e+00 373 3.477230e-08 2.202438e+00 1.546843e+00 5.120154e+00 374 3.487230e-08 2.265152e+00 1.599276e+00 5.120113e+00 375 3.497230e-08 2.314218e+00 1.646679e+00 5.119766e+00 376 3.507230e-08 2.372570e+00 1.711633e+00 5.117869e+00 377 3.517230e-08 2.420166e+00 1.830932e+00 5.110316e+00 378 3.527230e-08 2.474714e+00 1.960389e+00 5.099277e+00 379 3.537230e-08 2.520698e+00 2.033864e+00 5.092102e+00 380 3.547230e-08 2.571786e+00 2.101227e+00 5.085222e+00 381 3.557230e-08 2.616148e+00 2.159058e+00 5.078200e+00 382 3.567230e-08 2.664275e+00 2.222552e+00 5.070048e+00 383 3.577230e-08 2.707006e+00 2.278637e+00 5.061360e+00 384 3.587230e-08 2.752429e+00 2.338826e+00 5.051684e+00 385 3.597230e-08 2.793691e+00 2.392832e+00 5.041320e+00 386 3.607230e-08 2.840231e+00 2.449963e+00 5.030096e+00 387 3.617230e-08 2.899698e+00 2.501883e+00 5.018077e+00 388 3.627230e-08 2.972269e+00 2.556177e+00 5.005291e+00 389 3.637230e-08 3.030898e+00 2.606036e+00 4.991637e+00 390 3.647230e-08 3.079820e+00 2.657663e+00 4.977306e+00 391 3.657230e-08 3.123761e+00 2.705495e+00 4.962064e+00 392 3.667230e-08 3.167794e+00 2.754668e+00 4.946176e+00 393 3.677230e-08 3.209701e+00 2.800551e+00 4.929340e+00 394 3.687230e-08 3.251393e+00 2.847415e+00 4.911887e+00 395 3.697230e-08 3.291306e+00 2.891436e+00 4.893453e+00 396 3.707230e-08 3.330772e+00 2.936930e+00 4.874034e+00 397 3.717230e-08 3.368754e+00 2.983995e+00 4.851347e+00 398 3.727230e-08 3.406139e+00 3.036878e+00 4.824420e+00 399 3.737230e-08 3.442266e+00 3.086917e+00 4.795654e+00 400 3.747230e-08 3.477697e+00 3.133078e+00 4.767889e+00 401 3.757230e-08 3.512044e+00 3.174917e+00 4.740064e+00 402 3.767230e-08 3.545652e+00 3.216360e+00 4.711565e+00 Index time v(2) v(3) v(4) -------------------------------------------------------------------------------- 403 3.777230e-08 3.578314e+00 3.255829e+00 4.681749e+00 404 3.787230e-08 3.610213e+00 3.295199e+00 4.650949e+00 405 3.797230e-08 3.641278e+00 3.332759e+00 4.618807e+00 406 3.807230e-08 3.671752e+00 3.370150e+00 4.585635e+00 407 3.817230e-08 3.702497e+00 3.405873e+00 4.551104e+00 408 3.827230e-08 3.734316e+00 3.441387e+00 4.515483e+00 409 3.837230e-08 3.766153e+00 3.475355e+00 4.478479e+00 410 3.847230e-08 3.796236e+00 3.509087e+00 4.440322e+00 411 3.857230e-08 3.824539e+00 3.541382e+00 4.400752e+00 412 3.867230e-08 3.851646e+00 3.573426e+00 4.359967e+00 413 3.877230e-08 3.878040e+00 3.604132e+00 4.318083e+00 414 3.887230e-08 3.903683e+00 3.634579e+00 4.275520e+00 415 3.897230e-08 3.928712e+00 3.663779e+00 4.232096e+00 416 3.907230e-08 3.953026e+00 3.692751e+00 4.187951e+00 417 3.917230e-08 3.976762e+00 3.720775e+00 4.142537e+00 418 3.927230e-08 3.999819e+00 3.749038e+00 4.095366e+00 419 3.937230e-08 4.022334e+00 3.776603e+00 4.046273e+00 420 3.947230e-08 4.044206e+00 3.803802e+00 3.996319e+00 421 3.957230e-08 4.065567e+00 3.829589e+00 3.946016e+00 422 3.967230e-08 4.086322e+00 3.854854e+00 3.895391e+00 423 3.977230e-08 4.106596e+00 3.879052e+00 3.844023e+00 424 3.987230e-08 4.126300e+00 3.902965e+00 3.791903e+00 425 3.997230e-08 4.145552e+00 3.925944e+00 3.738896e+00 426 4.007230e-08 4.164274e+00 3.948656e+00 3.685102e+00 427 4.017230e-08 4.182623e+00 3.970493e+00 3.630417e+00 428 4.027230e-08 4.200607e+00 3.992073e+00 3.574926e+00 429 4.037230e-08 4.218350e+00 4.012831e+00 3.518530e+00 430 4.047230e-08 4.235656e+00 4.033345e+00 3.461303e+00 431 4.057230e-08 4.252486e+00 4.053089e+00 3.403150e+00 432 4.067230e-08 4.268757e+00 4.072599e+00 3.344135e+00 433 4.077230e-08 4.284609e+00 4.091388e+00 3.284232e+00 434 4.087230e-08 4.300020e+00 4.109954e+00 3.224092e+00 435 4.097230e-08 4.315083e+00 4.127846e+00 3.164135e+00 436 4.107230e-08 4.329742e+00 4.145527e+00 3.104482e+00 437 4.117230e-08 4.344075e+00 4.162587e+00 3.045063e+00 438 4.127230e-08 4.358029e+00 4.179477e+00 2.985848e+00 439 4.137230e-08 4.371677e+00 4.195823e+00 2.926688e+00 440 4.147230e-08 4.384970e+00 4.212006e+00 2.867728e+00 441 4.157230e-08 4.397976e+00 4.227621e+00 2.809115e+00 442 4.167230e-08 4.410648e+00 4.243020e+00 2.751056e+00 443 4.177230e-08 4.423050e+00 4.257873e+00 2.693496e+00 444 4.187230e-08 4.435141e+00 4.272543e+00 2.636450e+00 445 4.197230e-08 4.446978e+00 4.286721e+00 2.579840e+00 446 4.207230e-08 4.458523e+00 4.300734e+00 2.523722e+00 447 4.217230e-08 4.469832e+00 4.314290e+00 2.468050e+00 448 4.227230e-08 4.480876e+00 4.327689e+00 2.412879e+00 449 4.237230e-08 4.491711e+00 4.340661e+00 2.358164e+00 450 4.247230e-08 4.502302e+00 4.353486e+00 2.303953e+00 451 4.257230e-08 4.512684e+00 4.365911e+00 2.250201e+00 452 4.267230e-08 4.522817e+00 4.378197e+00 2.196948e+00 453 4.277230e-08 4.532741e+00 4.390110e+00 2.144155e+00 454 4.287230e-08 4.542434e+00 4.401892e+00 2.091940e+00 455 4.297230e-08 4.551939e+00 4.413324e+00 2.040434e+00 456 4.307230e-08 4.561230e+00 4.424633e+00 1.989798e+00 457 4.317230e-08 4.570347e+00 4.435616e+00 1.940038e+00 458 4.327230e-08 4.579264e+00 4.446484e+00 1.891187e+00 459 4.337230e-08 4.588017e+00 4.457051e+00 1.843199e+00 460 4.347230e-08 4.596582e+00 4.467510e+00 1.796101e+00 Index time v(2) v(3) v(4) -------------------------------------------------------------------------------- 461 4.357230e-08 4.604993e+00 4.477687e+00 1.749881e+00 462 4.367230e-08 4.613229e+00 4.487757e+00 1.704596e+00 463 4.377230e-08 4.621320e+00 4.497557e+00 1.660237e+00 464 4.387230e-08 4.629246e+00 4.507255e+00 1.616825e+00 465 4.397230e-08 4.637035e+00 4.516702e+00 1.574325e+00 466 4.407230e-08 4.644670e+00 4.526055e+00 1.532750e+00 467 4.417230e-08 4.652176e+00 4.535173e+00 1.492070e+00 468 4.427230e-08 4.659538e+00 4.544202e+00 1.452297e+00 469 4.437230e-08 4.666779e+00 4.553012e+00 1.413403e+00 470 4.447230e-08 4.673886e+00 4.561737e+00 1.375398e+00 471 4.457230e-08 4.680878e+00 4.570256e+00 1.338253e+00 472 4.467230e-08 4.687743e+00 4.578695e+00 1.301974e+00 473 4.477230e-08 4.694498e+00 4.586940e+00 1.266534e+00 474 4.487230e-08 4.701131e+00 4.595109e+00 1.231941e+00 475 4.497230e-08 4.707662e+00 4.603097e+00 1.198180e+00 476 4.507230e-08 4.714079e+00 4.611012e+00 1.165273e+00 477 4.517230e-08 4.720398e+00 4.618757e+00 1.133208e+00 478 4.527230e-08 4.726610e+00 4.626432e+00 1.101988e+00 479 4.537230e-08 4.732731e+00 4.633948e+00 1.071587e+00 480 4.547230e-08 4.738749e+00 4.641396e+00 1.041999e+00 481 4.557230e-08 4.744681e+00 4.648695e+00 1.013200e+00 482 4.567230e-08 4.750516e+00 4.655930e+00 9.851862e-01 483 4.577230e-08 4.756269e+00 4.663022e+00 9.579351e-01 484 4.587230e-08 4.761930e+00 4.670053e+00 9.314422e-01 485 4.597230e-08 4.767513e+00 4.676949e+00 9.056824e-01 486 4.607230e-08 4.773010e+00 4.683787e+00 8.806470e-01 487 4.617230e-08 4.778432e+00 4.690497e+00 8.563108e-01 488 4.627230e-08 4.783771e+00 4.697151e+00 8.326648e-01 489 4.637230e-08 4.789040e+00 4.703684e+00 8.096851e-01 490 4.647230e-08 4.794230e+00 4.710163e+00 7.873620e-01 491 4.657230e-08 4.799353e+00 4.716528e+00 7.656726e-01 492 4.667230e-08 4.804401e+00 4.722840e+00 7.446066e-01 493 4.677230e-08 4.809385e+00 4.729044e+00 7.241418e-01 494 4.687230e-08 4.814296e+00 4.735196e+00 7.042679e-01 495 4.697230e-08 4.819146e+00 4.741246e+00 6.849645e-01 496 4.700000e-08 4.820309e+00 4.742699e+00 6.796605e-01 mosdriver -- 3 lossy lines txl model -- c load Transient Analysis Sun Feb 07 19:00:58 2010 -------------------------------------------------------------------------------- Index time v(5) v(6) -------------------------------------------------------------------------------- 0 0.000000e+00 1.242558e-09 0.000000e+00 1 2.000000e-12 1.242558e-09 0.000000e+00 2 4.000000e-12 1.242558e-09 0.000000e+00 3 8.000000e-12 1.242558e-09 0.000000e+00 4 1.600000e-11 1.242558e-09 0.000000e+00 5 3.200000e-11 1.242558e-09 0.000000e+00 6 6.400000e-11 1.242560e-09 0.000000e+00 7 1.280000e-10 1.242573e-09 0.000000e+00 8 2.280000e-10 1.242615e-09 0.000000e+00 9 3.280000e-10 1.242601e-09 0.000000e+00 10 4.280000e-10 1.242585e-09 0.000000e+00 11 5.280000e-10 1.242572e-09 0.000000e+00 12 6.280000e-10 1.242558e-09 0.000000e+00 13 7.280000e-10 1.242546e-09 0.000000e+00 14 8.280000e-10 1.242533e-09 0.000000e+00 15 9.280000e-10 1.242522e-09 0.000000e+00 16 1.028000e-09 1.242510e-09 0.000000e+00 17 1.128000e-09 2.249830e-09 0.000000e+00 18 1.228000e-09 3.732011e-09 0.000000e+00 19 1.328000e-09 8.245883e-11 0.000000e+00 20 1.428000e-09 9.939216e-10 0.000000e+00 21 1.528000e-09 1.472417e-10 0.000000e+00 22 1.628000e-09 8.242704e-10 0.000000e+00 23 1.728000e-09 2.667727e-10 0.000000e+00 24 1.828000e-09 6.455068e-10 0.000000e+00 25 1.928000e-09 3.683496e-10 0.000000e+00 26 2.028000e-09 4.954720e-10 0.000000e+00 27 2.128000e-09 5.321980e-10 0.000000e+00 28 2.228000e-09 7.610725e-10 0.000000e+00 29 2.328000e-09 5.840404e-10 0.000000e+00 30 2.428000e-09 1.607054e-10 0.000000e+00 31 2.528000e-09 4.164933e-10 0.000000e+00 32 2.628000e-09 1.005225e-10 0.000000e+00 33 2.728000e-09 4.535245e-10 0.000000e+00 34 2.828000e-09 7.281951e-11 0.000000e+00 35 2.928000e-09 4.756486e-10 0.000000e+00 36 3.028000e-09 6.477825e-11 0.000000e+00 37 3.128000e-09 5.304343e-10 0.000000e+00 38 3.228000e-09 2.733845e-10 0.000000e+00 39 3.328000e-09 6.623541e-10 0.000000e+00 40 3.428000e-09 2.177413e-11 0.000000e+00 41 3.528000e-09 3.827402e-10 0.000000e+00 42 3.628000e-09 -3.19834e-11 0.000000e+00 43 3.728000e-09 3.827615e-10 0.000000e+00 44 3.828000e-09 8.545861e-13 0.000000e+00 45 3.928000e-09 3.845928e-10 0.000000e+00 46 4.028000e-09 3.881923e-11 0.000000e+00 47 4.128000e-09 3.914262e-10 0.000000e+00 48 4.228000e-09 1.041219e-10 0.000000e+00 49 4.328000e-09 4.270767e-10 0.000000e+00 50 4.428000e-09 1.289197e-10 0.000000e+00 51 4.528000e-09 3.797781e-10 0.000000e+00 52 4.628000e-09 1.425974e-10 0.000000e+00 53 4.728000e-09 3.844497e-10 0.000000e+00 54 4.828000e-09 1.901817e-10 0.000000e+00 Index time v(5) v(6) -------------------------------------------------------------------------------- 55 4.928000e-09 3.987883e-10 0.000000e+00 56 5.028000e-09 2.376020e-10 0.000000e+00 57 5.128000e-09 4.168316e-10 0.000000e+00 58 5.228000e-09 2.940001e-10 0.000000e+00 59 5.328000e-09 4.529616e-10 0.000000e+00 60 5.428000e-09 3.400793e-10 0.000000e+00 61 5.528000e-09 4.474202e-10 0.000000e+00 62 5.628000e-09 3.578912e-10 0.000000e+00 63 5.728000e-09 4.588383e-10 0.000000e+00 64 5.828000e-09 3.995872e-10 0.000000e+00 65 5.928000e-09 4.829197e-10 0.000000e+00 66 6.028000e-09 4.417896e-10 0.000000e+00 67 6.128000e-09 5.082584e-10 0.000000e+00 68 6.228000e-09 4.835323e-10 0.000000e+00 69 6.328000e-09 5.367709e-10 0.000000e+00 70 6.428000e-09 5.240673e-10 0.000000e+00 71 6.528000e-09 5.603457e-10 0.000000e+00 72 6.628000e-09 5.564994e-10 0.000000e+00 73 6.728000e-09 5.837660e-10 0.000000e+00 74 6.828000e-09 5.916242e-10 0.000000e+00 75 6.928000e-09 6.106816e-10 0.000000e+00 76 7.028000e-09 6.263440e-10 0.000000e+00 77 7.128000e-09 6.376103e-10 0.000000e+00 78 7.228000e-09 6.598589e-10 0.000000e+00 79 7.328000e-09 6.652342e-10 0.000000e+00 80 7.428000e-09 6.924907e-10 0.000000e+00 81 7.528000e-09 6.905901e-10 0.000000e+00 82 7.628000e-09 7.200820e-10 0.000000e+00 83 7.728000e-09 7.136485e-10 0.000000e+00 84 7.828000e-09 7.475128e-10 0.000000e+00 85 7.928000e-09 7.355153e-10 0.000000e+00 86 8.028000e-09 7.766546e-10 0.000000e+00 87 8.128000e-09 7.600012e-10 0.000000e+00 88 8.228000e-09 8.021805e-10 0.000000e+00 89 8.328000e-09 7.837121e-10 0.000000e+00 90 8.428000e-09 8.265170e-10 0.000000e+00 91 8.528000e-09 8.063706e-10 0.000000e+00 92 8.628000e-09 8.490337e-10 0.000000e+00 93 8.728000e-09 8.276174e-10 0.000000e+00 94 8.828000e-09 8.692260e-10 0.000000e+00 95 8.928000e-09 8.504125e-10 0.000000e+00 96 9.028000e-09 8.891721e-10 0.000000e+00 97 9.128000e-09 8.696284e-10 0.000000e+00 98 9.228000e-09 9.086561e-10 0.000000e+00 99 9.328000e-09 8.882867e-10 0.000000e+00 100 9.428000e-09 9.270634e-10 0.000000e+00 101 9.528000e-09 9.060216e-10 0.000000e+00 102 9.628000e-09 9.441623e-10 0.000000e+00 103 9.728000e-09 9.225885e-10 0.000000e+00 104 9.828000e-09 9.600273e-10 0.000000e+00 105 9.928000e-09 9.383511e-10 0.000000e+00 106 1.002800e-08 9.752307e-10 0.000000e+00 107 1.012800e-08 9.534474e-10 0.000000e+00 108 1.022800e-08 9.894080e-10 0.000000e+00 109 1.032800e-08 9.677010e-10 0.000000e+00 110 1.042800e-08 1.002697e-09 0.000000e+00 111 1.052800e-08 9.811582e-10 0.000000e+00 112 1.062800e-08 1.015101e-09 0.000000e+00 Index time v(5) v(6) -------------------------------------------------------------------------------- 113 1.072800e-08 9.937999e-10 0.000000e+00 114 1.082800e-08 1.026611e-09 0.000000e+00 115 1.092800e-08 1.005703e-09 0.000000e+00 116 1.102800e-08 1.037520e-09 0.000000e+00 117 1.112800e-08 1.016944e-09 0.000000e+00 118 1.122800e-08 1.047606e-09 0.000000e+00 119 1.132800e-08 1.027500e-09 0.000000e+00 120 1.142800e-08 1.057046e-09 0.000000e+00 121 1.152800e-08 1.037434e-09 0.000000e+00 122 1.162800e-08 1.065845e-09 0.000000e+00 123 1.172800e-08 1.046748e-09 0.000000e+00 124 1.182800e-08 1.074025e-09 0.000000e+00 125 1.192800e-08 1.055483e-09 0.000000e+00 126 1.202800e-08 1.081671e-09 0.000000e+00 127 1.212800e-08 1.063717e-09 0.000000e+00 128 1.222800e-08 1.088809e-09 0.000000e+00 129 1.232800e-08 1.071442e-09 0.000000e+00 130 1.242800e-08 1.095467e-09 0.000000e+00 131 1.252800e-08 1.078699e-09 0.000000e+00 132 1.262800e-08 1.101681e-09 0.000000e+00 133 1.272800e-08 1.085514e-09 0.000000e+00 134 1.282800e-08 1.107477e-09 0.000000e+00 135 1.292800e-08 1.091913e-09 0.000000e+00 136 1.302800e-08 1.112896e-09 0.000000e+00 137 1.312800e-08 1.097941e-09 0.000000e+00 138 1.322800e-08 1.117967e-09 0.000000e+00 139 1.332800e-08 1.103607e-09 0.000000e+00 140 1.342800e-08 1.122711e-09 0.000000e+00 141 1.352800e-08 1.108944e-09 0.000000e+00 142 1.362800e-08 1.127160e-09 0.000000e+00 143 1.372800e-08 1.113974e-09 0.000000e+00 144 1.382800e-08 1.131333e-09 0.000000e+00 145 1.392800e-08 1.118719e-09 0.000000e+00 146 1.402800e-08 1.135255e-09 0.000000e+00 147 1.412800e-08 1.123203e-09 0.000000e+00 148 1.422800e-08 1.138951e-09 0.000000e+00 149 1.432800e-08 1.127447e-09 0.000000e+00 150 1.442800e-08 1.142437e-09 0.000000e+00 151 1.452800e-08 1.131467e-09 0.000000e+00 152 1.462800e-08 1.145733e-09 0.000000e+00 153 1.472800e-08 1.135282e-09 0.000000e+00 154 1.482800e-08 1.148855e-09 0.000000e+00 155 1.492800e-08 1.138909e-09 0.000000e+00 156 1.502800e-08 1.151818e-09 0.000000e+00 157 1.512800e-08 1.142362e-09 0.000000e+00 158 1.522800e-08 1.154640e-09 0.000000e+00 159 1.532800e-08 1.145657e-09 0.000000e+00 160 1.542800e-08 1.157331e-09 0.000000e+00 161 1.552800e-08 1.148806e-09 0.000000e+00 162 1.562800e-08 1.159904e-09 0.000000e+00 163 1.572800e-08 1.151822e-09 0.000000e+00 164 1.582800e-08 1.162372e-09 0.000000e+00 165 1.590000e-08 1.150272e-09 0.000000e+00 166 1.590621e-08 1.156274e-09 -1.84764e-12 167 1.591862e-08 1.159634e-09 -6.07201e-12 168 1.594345e-08 1.162682e-09 -1.48638e-11 169 1.599311e-08 1.163660e-09 -3.28249e-11 170 1.609242e-08 1.157357e-09 -7.07355e-11 Index time v(5) v(6) -------------------------------------------------------------------------------- 171 1.610000e-08 1.158914e-09 -7.39669e-11 172 1.610492e-08 1.156347e-09 -7.29254e-11 173 1.611477e-08 1.157009e-09 -7.30697e-11 174 1.613386e-08 1.160954e-09 -7.43320e-11 175 1.617205e-08 1.164229e-09 -7.58201e-11 176 1.623935e-08 1.157066e-09 -7.92145e-11 177 1.633935e-08 1.163685e-09 -8.34553e-11 178 1.643935e-08 1.160299e-09 -8.80928e-11 179 1.653935e-08 1.165982e-09 -9.21047e-11 180 1.663935e-08 1.163299e-09 -9.64614e-11 181 1.673935e-08 1.168198e-09 -1.00247e-10 182 1.683935e-08 1.166141e-09 -1.04355e-10 183 1.693935e-08 -9.75340e-09 5.634229e-02 184 1.703935e-08 1.729773e-09 2.474978e+00 185 1.713935e-08 -3.68152e-09 4.983509e+00 186 1.723935e-08 -1.29895e-08 5.127177e+00 187 1.733935e-08 -8.31155e-09 5.232606e+00 188 1.743935e-08 -1.10917e-08 5.336078e+00 189 1.753935e-08 -6.75164e-09 5.429987e+00 190 1.763935e-08 -7.25838e-09 5.523228e+00 191 1.773935e-08 -3.49374e-09 5.607924e+00 192 1.783935e-08 -3.97121e-09 5.692274e+00 193 1.793935e-08 -8.96729e-10 5.768988e+00 194 1.803935e-08 -3.36542e-06 5.845604e+00 195 1.813935e-08 3.090634e-03 5.915376e+00 196 1.823935e-08 7.815423e-03 5.985237e+00 197 1.833935e-08 1.159793e-02 6.048950e+00 198 1.843935e-08 1.733686e-02 6.112892e+00 199 1.853935e-08 2.335953e-02 6.171295e+00 200 1.863935e-08 3.106628e-02 6.230029e+00 201 1.873935e-08 3.914611e-02 6.283764e+00 202 1.883935e-08 4.881836e-02 6.337901e+00 203 1.893935e-08 5.897282e-02 6.382266e+00 204 1.903935e-08 7.062454e-02 6.200083e+00 205 1.913935e-08 8.287233e-02 5.716003e+00 206 1.923935e-08 9.647455e-02 5.337090e+00 207 1.933935e-08 1.108425e-01 5.211663e+00 208 1.943935e-08 1.265074e-01 5.171740e+00 209 1.953935e-08 1.429763e-01 5.133100e+00 210 1.963935e-08 1.607195e-01 5.096968e+00 211 1.973935e-08 1.793968e-01 5.060234e+00 212 1.983935e-08 1.992513e-01 5.025774e+00 213 1.993935e-08 2.201472e-01 4.990749e+00 214 2.003935e-08 2.434092e-01 4.957829e+00 215 2.013935e-08 2.761209e-01 4.924380e+00 216 2.023935e-08 3.204963e-01 4.892884e+00 217 2.033935e-08 3.645794e-01 4.860897e+00 218 2.043935e-08 4.041342e-01 4.830722e+00 219 2.053935e-08 4.437257e-01 4.800093e+00 220 2.063935e-08 4.852529e-01 4.771148e+00 221 2.073935e-08 5.291027e-01 4.741785e+00 222 2.083935e-08 5.749263e-01 4.713989e+00 223 2.093935e-08 6.232421e-01 4.686299e+00 224 2.103935e-08 6.736183e-01 4.681861e+00 225 2.113935e-08 7.265146e-01 4.732630e+00 226 2.123935e-08 7.805357e-01 4.821241e+00 227 2.133935e-08 8.359776e-01 4.888816e+00 228 2.143935e-08 8.919003e-01 4.919752e+00 Index time v(5) v(6) -------------------------------------------------------------------------------- 229 2.153935e-08 9.491666e-01 4.932364e+00 230 2.163935e-08 1.006818e+00 4.942799e+00 231 2.173935e-08 1.065742e+00 4.952598e+00 232 2.183935e-08 1.124998e+00 4.963243e+00 233 2.193935e-08 1.185439e+00 4.973381e+00 234 2.203935e-08 1.246359e+00 4.984293e+00 235 2.213935e-08 1.309759e+00 4.994723e+00 236 2.223935e-08 1.376596e+00 5.005858e+00 237 2.233935e-08 1.446810e+00 5.016535e+00 238 2.243935e-08 1.516842e+00 5.027853e+00 239 2.253935e-08 1.586400e+00 5.038737e+00 240 2.263935e-08 1.655837e+00 5.050205e+00 241 2.273935e-08 1.726183e+00 5.061259e+00 242 2.283935e-08 1.796499e+00 5.072845e+00 243 2.293935e-08 1.866991e+00 5.083992e+00 244 2.303935e-08 1.937111e+00 5.093531e+00 245 2.313935e-08 2.007264e+00 5.094850e+00 246 2.323935e-08 2.076898e+00 5.085493e+00 247 2.333935e-08 2.146246e+00 5.070559e+00 248 2.343935e-08 2.214810e+00 5.059568e+00 249 2.353935e-08 2.282860e+00 5.054219e+00 250 2.363935e-08 2.350044e+00 5.052511e+00 251 2.373935e-08 2.416600e+00 5.051273e+00 252 2.383935e-08 2.482247e+00 5.050325e+00 253 2.393935e-08 2.547177e+00 5.048928e+00 254 2.403935e-08 2.611179e+00 5.047686e+00 255 2.413935e-08 2.674501e+00 5.046023e+00 256 2.423935e-08 2.737213e+00 5.044502e+00 257 2.433935e-08 2.799574e+00 5.042591e+00 258 2.443935e-08 2.861242e+00 5.040811e+00 259 2.453935e-08 2.921926e+00 5.038668e+00 260 2.463935e-08 2.981430e+00 5.036646e+00 261 2.473935e-08 3.039896e+00 5.034288e+00 262 2.483935e-08 3.097335e+00 5.032041e+00 263 2.493935e-08 3.153739e+00 5.029486e+00 264 2.503935e-08 3.209058e+00 5.027235e+00 265 2.513935e-08 3.263280e+00 5.025680e+00 266 2.523935e-08 3.316409e+00 5.026302e+00 267 2.533935e-08 3.368411e+00 5.028863e+00 268 2.543935e-08 3.419303e+00 5.032422e+00 269 2.553935e-08 3.469039e+00 5.035208e+00 270 2.563935e-08 3.517667e+00 5.037159e+00 271 2.573935e-08 3.565141e+00 5.038361e+00 272 2.583935e-08 3.611528e+00 5.039543e+00 273 2.593935e-08 3.656774e+00 5.040597e+00 274 2.603935e-08 3.700962e+00 5.041846e+00 275 2.613935e-08 3.744034e+00 5.043023e+00 276 2.623935e-08 3.786103e+00 5.044387e+00 277 2.633935e-08 3.827122e+00 5.045686e+00 278 2.643935e-08 3.867201e+00 5.047161e+00 279 2.653935e-08 3.906236e+00 5.048577e+00 280 2.663935e-08 3.944302e+00 5.050158e+00 281 2.673935e-08 3.981310e+00 5.051685e+00 282 2.683935e-08 4.017383e+00 5.053367e+00 283 2.693935e-08 4.052445e+00 5.055001e+00 284 2.703935e-08 4.086612e+00 5.056759e+00 285 2.713935e-08 4.119801e+00 5.058358e+00 286 2.723935e-08 4.152131e+00 5.059770e+00 Index time v(5) v(6) -------------------------------------------------------------------------------- 287 2.733935e-08 4.183518e+00 5.060638e+00 288 2.743935e-08 4.214084e+00 5.061173e+00 289 2.753935e-08 4.243744e+00 5.061478e+00 290 2.763935e-08 4.272619e+00 5.061950e+00 291 2.773935e-08 4.300628e+00 5.062508e+00 292 2.783935e-08 4.327891e+00 5.063232e+00 293 2.793935e-08 4.354330e+00 5.063910e+00 294 2.803935e-08 4.380061e+00 5.064637e+00 295 2.813935e-08 4.405009e+00 5.065272e+00 296 2.823935e-08 4.429290e+00 5.065936e+00 297 2.833935e-08 4.452830e+00 5.066511e+00 298 2.843935e-08 4.475745e+00 5.067110e+00 299 2.853935e-08 4.497960e+00 5.067624e+00 300 2.863935e-08 4.519583e+00 5.068157e+00 301 2.873935e-08 4.540539e+00 5.068609e+00 302 2.883935e-08 4.560934e+00 5.069075e+00 303 2.893935e-08 4.580700e+00 5.069464e+00 304 2.903935e-08 4.599939e+00 5.069866e+00 305 2.913935e-08 4.618586e+00 5.070206e+00 306 2.923935e-08 4.636738e+00 5.070600e+00 307 2.933935e-08 4.654333e+00 5.071014e+00 308 2.943935e-08 4.671463e+00 5.071553e+00 309 2.953935e-08 4.688069e+00 5.072124e+00 310 2.963935e-08 4.704240e+00 5.072749e+00 311 2.973935e-08 4.719920e+00 5.073314e+00 312 2.983935e-08 4.735192e+00 5.073875e+00 313 2.993935e-08 4.750003e+00 5.074377e+00 314 3.003935e-08 4.764433e+00 5.074895e+00 315 3.013935e-08 4.778432e+00 5.075378e+00 316 3.023935e-08 4.792075e+00 5.075885e+00 317 3.033935e-08 4.805314e+00 5.076364e+00 318 3.043935e-08 4.818221e+00 5.076867e+00 319 3.053935e-08 4.830751e+00 5.077344e+00 320 3.063935e-08 4.842971e+00 5.077843e+00 321 3.073935e-08 4.854838e+00 5.078318e+00 322 3.083935e-08 4.866417e+00 5.078815e+00 323 3.093935e-08 4.877664e+00 5.079290e+00 324 3.103935e-08 4.888642e+00 5.079786e+00 325 3.113935e-08 4.899312e+00 5.080260e+00 326 3.123935e-08 4.909730e+00 5.080747e+00 327 3.133935e-08 4.919860e+00 5.081202e+00 328 3.143935e-08 4.929756e+00 5.081651e+00 329 3.153935e-08 4.939382e+00 5.082055e+00 330 3.163935e-08 4.948790e+00 5.082452e+00 331 3.173935e-08 4.957947e+00 5.082821e+00 332 3.183935e-08 4.966900e+00 5.083199e+00 333 3.190000e-08 4.972036e+00 5.083195e+00 334 3.191000e-08 4.972830e+00 5.083168e+00 335 3.193000e-08 4.974588e+00 5.083240e+00 336 3.197000e-08 4.978058e+00 5.083435e+00 337 3.203371e-08 4.983461e+00 5.083742e+00 338 3.209348e-08 4.988455e+00 5.083972e+00 339 3.210000e-08 4.988949e+00 5.083937e+00 340 3.210125e-08 4.989051e+00 5.083935e+00 341 3.210375e-08 4.989257e+00 5.083938e+00 342 3.210875e-08 4.989657e+00 5.083961e+00 343 3.211876e-08 4.990472e+00 5.084001e+00 344 3.213525e-08 4.991844e+00 5.084070e+00 Index time v(5) v(6) -------------------------------------------------------------------------------- 345 3.216415e-08 4.994228e+00 5.084193e+00 346 3.222196e-08 4.998929e+00 5.084470e+00 347 3.232196e-08 5.007055e+00 5.085056e+00 348 3.242196e-08 5.014846e+00 5.085391e+00 349 3.252196e-08 5.022436e+00 5.085700e+00 350 3.262196e-08 5.029877e+00 5.086014e+00 351 3.272196e-08 5.037133e+00 5.086306e+00 352 3.282196e-08 5.044249e+00 5.086600e+00 353 3.292196e-08 5.051191e+00 5.086954e+00 354 3.302196e-08 5.057979e+00 3.050621e+00 355 3.312196e-08 5.064636e+00 4.786518e-01 356 3.317320e-08 5.067778e+00 2.414706e-02 357 3.323667e-08 5.071910e+00 -6.29462e-02 358 3.330065e-08 5.076031e+00 -1.21422e-01 359 3.337230e-08 5.080569e+00 -2.04259e-01 360 3.347230e-08 5.086950e+00 -2.93358e-01 361 3.357230e-08 5.092973e+00 -3.96579e-01 362 3.367230e-08 5.098921e+00 -4.77050e-01 363 3.377230e-08 5.104703e+00 -5.70413e-01 364 3.387230e-08 5.110413e+00 -6.43052e-01 365 3.397230e-08 5.115988e+00 -7.27788e-01 366 3.407230e-08 5.121956e+00 -7.93657e-01 367 3.417230e-08 5.129772e+00 -8.70878e-01 368 3.427230e-08 5.136657e+00 -9.30862e-01 369 3.437230e-08 5.142863e+00 -1.00194e+00 370 3.447230e-08 5.149143e+00 -1.05716e+00 371 3.457230e-08 5.155198e+00 -1.12199e+00 372 3.467230e-08 5.160975e+00 -1.17242e+00 373 3.477230e-08 5.166249e+00 -1.23210e+00 374 3.487230e-08 5.171134e+00 -1.27860e+00 375 3.497230e-08 5.175525e+00 -1.29105e+00 376 3.507230e-08 5.179508e+00 -9.91833e-01 377 3.517230e-08 5.182997e+00 -4.72230e-01 378 3.527230e-08 5.186061e+00 -1.81697e-01 379 3.537230e-08 5.188651e+00 -1.18167e-01 380 3.547230e-08 5.190838e+00 -7.58924e-02 381 3.557230e-08 5.192534e+00 -4.22508e-02 382 3.567230e-08 5.193795e+00 -1.21837e-03 383 3.577230e-08 5.194563e+00 3.085452e-02 384 3.587230e-08 5.194904e+00 6.986891e-02 385 3.597230e-08 5.194722e+00 1.005688e-01 386 3.607230e-08 5.193422e+00 1.377039e-01 387 3.617230e-08 5.187684e+00 1.671380e-01 388 3.627230e-08 5.177357e+00 2.025364e-01 389 3.637230e-08 5.167820e+00 2.308391e-01 390 3.647230e-08 5.159817e+00 2.647133e-01 391 3.657230e-08 5.151595e+00 2.919478e-01 392 3.667230e-08 5.142551e+00 3.242611e-01 393 3.677230e-08 5.132559e+00 3.504257e-01 394 3.687230e-08 5.121726e+00 3.813268e-01 395 3.697230e-08 5.109918e+00 4.025578e-01 396 3.707230e-08 5.097284e+00 3.950689e-01 397 3.717230e-08 5.083658e+00 3.227423e-01 398 3.727230e-08 5.069211e+00 2.353806e-01 399 3.737230e-08 5.053760e+00 1.785891e-01 400 3.747230e-08 5.037501e+00 1.596139e-01 401 3.757230e-08 5.020243e+00 1.468821e-01 402 3.767230e-08 5.002172e+00 1.388173e-01 Index time v(5) v(6) -------------------------------------------------------------------------------- 403 3.777230e-08 4.983098e+00 1.268106e-01 404 3.787230e-08 4.963203e+00 1.182474e-01 405 3.797230e-08 4.942299e+00 1.060576e-01 406 3.807230e-08 4.920393e+00 9.707057e-02 407 3.817230e-08 4.896388e+00 8.473499e-02 408 3.827230e-08 4.869297e+00 7.537882e-02 409 3.837230e-08 4.839755e+00 6.292668e-02 410 3.847230e-08 4.809765e+00 5.323713e-02 411 3.857230e-08 4.779590e+00 4.068732e-02 412 3.867230e-08 4.748751e+00 3.072038e-02 413 3.877230e-08 4.716729e+00 1.812357e-02 414 3.887230e-08 4.683545e+00 7.929253e-03 415 3.897230e-08 4.649075e+00 -4.32694e-03 416 3.907230e-08 4.613397e+00 -1.07815e-02 417 3.917230e-08 4.576402e+00 -9.73515e-03 418 3.927230e-08 4.538147e+00 3.910746e-03 419 3.937230e-08 4.498534e+00 1.756723e-02 420 3.947230e-08 4.457600e+00 2.760666e-02 421 3.957230e-08 4.415259e+00 3.022306e-02 422 3.967230e-08 4.371535e+00 3.244244e-02 423 3.977230e-08 4.326564e+00 3.259090e-02 424 3.987230e-08 4.280651e+00 3.453639e-02 425 3.997230e-08 4.233847e+00 3.499973e-02 426 4.007230e-08 4.186194e+00 3.716134e-02 427 4.017230e-08 4.137524e+00 3.794978e-02 428 4.027230e-08 4.087556e+00 4.031235e-02 429 4.037230e-08 4.036103e+00 4.140321e-02 430 4.047230e-08 3.983524e+00 4.395458e-02 431 4.057230e-08 3.930264e+00 4.532939e-02 432 4.067230e-08 3.876477e+00 4.805756e-02 433 4.077230e-08 3.822029e+00 4.969358e-02 434 4.087230e-08 3.766829e+00 5.258255e-02 435 4.097230e-08 3.710835e+00 5.442543e-02 436 4.107230e-08 3.654060e+00 5.705299e-02 437 4.117230e-08 3.596498e+00 5.738594e-02 438 4.127230e-08 3.538163e+00 5.647028e-02 439 4.137230e-08 3.479050e+00 5.273817e-02 440 4.147230e-08 3.419165e+00 4.964790e-02 441 4.157230e-08 3.358503e+00 4.658621e-02 442 4.167230e-08 3.297067e+00 4.530259e-02 443 4.177230e-08 3.234868e+00 4.362243e-02 444 4.187230e-08 3.172243e+00 4.279866e-02 445 4.197230e-08 3.109675e+00 4.117161e-02 446 4.207230e-08 3.047382e+00 4.021100e-02 447 4.217230e-08 2.985414e+00 3.848481e-02 448 4.227230e-08 2.923780e+00 3.737292e-02 449 4.237230e-08 2.862470e+00 3.554960e-02 450 4.247230e-08 2.801523e+00 3.429351e-02 451 4.257230e-08 2.741041e+00 3.237604e-02 452 4.267230e-08 2.681136e+00 3.098231e-02 453 4.277230e-08 2.621863e+00 2.897421e-02 454 4.287230e-08 2.563236e+00 2.745027e-02 455 4.297230e-08 2.505264e+00 2.535896e-02 456 4.307230e-08 2.447962e+00 2.375420e-02 457 4.317230e-08 2.391355e+00 2.179310e-02 458 4.327230e-08 2.335461e+00 2.064375e-02 459 4.337230e-08 2.280302e+00 1.953065e-02 460 4.347230e-08 2.225891e+00 1.919215e-02 Index time v(5) v(6) -------------------------------------------------------------------------------- 461 4.357230e-08 2.172247e+00 1.849345e-02 462 4.367230e-08 2.119379e+00 1.804681e-02 463 4.377230e-08 2.067301e+00 1.706648e-02 464 4.387230e-08 2.016040e+00 1.638381e-02 465 4.397230e-08 1.965659e+00 1.534227e-02 466 4.407230e-08 1.916218e+00 1.466319e-02 467 4.417230e-08 1.867754e+00 1.368442e-02 468 4.427230e-08 1.820271e+00 1.305088e-02 469 4.437230e-08 1.773772e+00 1.214318e-02 470 4.447230e-08 1.728249e+00 1.155815e-02 471 4.457230e-08 1.683707e+00 1.072176e-02 472 4.467230e-08 1.640149e+00 1.018707e-02 473 4.477230e-08 1.597584e+00 9.422020e-03 474 4.487230e-08 1.556004e+00 8.939031e-03 475 4.497230e-08 1.515405e+00 8.244698e-03 476 4.507230e-08 1.475771e+00 7.810089e-03 477 4.517230e-08 1.437097e+00 7.161190e-03 478 4.527230e-08 1.399365e+00 6.699068e-03 479 4.537230e-08 1.362570e+00 5.954390e-03 480 4.547230e-08 1.326694e+00 5.319757e-03 481 4.557230e-08 1.291729e+00 4.436533e-03 482 4.567230e-08 1.257656e+00 3.737263e-03 483 4.577230e-08 1.224464e+00 2.892438e-03 484 4.587230e-08 1.192136e+00 2.254146e-03 485 4.597230e-08 1.160663e+00 1.471753e-03 486 4.607230e-08 1.130029e+00 8.575954e-04 487 4.617230e-08 1.100229e+00 9.351648e-05 488 4.627230e-08 1.071244e+00 -5.21764e-04 489 4.637230e-08 1.043061e+00 -1.27824e-03 490 4.647230e-08 1.015658e+00 -1.89761e-03 491 4.657230e-08 9.890217e-01 -2.64832e-03 492 4.667230e-08 9.631291e-01 -3.27243e-03 493 4.677230e-08 9.379683e-01 -4.01872e-03 494 4.687230e-08 9.135169e-01 -4.64816e-03 495 4.697230e-08 8.897618e-01 -5.39124e-03 496 4.700000e-08 8.831034e-01 -5.53139e-03 tmpk8ny_4pz/tests/transmission/txl1_1_line.out0000644000175000017500000005531113546075722021730 0ustar carstencarstenCircuit: mosdriver -- lossy line txl model -- c load Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 Warning: vs: no DC value, transient time 0 value used No. of Data Rows : 493 mosdriver -- lossy line txl model -- c load Transient Analysis Sun Feb 07 19:00:56 2010 -------------------------------------------------------------------------------- Index time v(2) v(3) -------------------------------------------------------------------------------- 0 0.000000e+00 5.000000e+00 5.000000e+00 1 2.000000e-12 5.000000e+00 5.000000e+00 2 4.000000e-12 5.000000e+00 5.000000e+00 3 8.000000e-12 5.000000e+00 5.000000e+00 4 1.600000e-11 5.000000e+00 5.000000e+00 5 3.200000e-11 5.000001e+00 5.000001e+00 6 6.400000e-11 5.000005e+00 5.000008e+00 7 1.280000e-10 5.000041e+00 5.000062e+00 8 2.280000e-10 5.000154e+00 5.000229e+00 9 3.280000e-10 5.000118e+00 5.000174e+00 10 4.280000e-10 5.000068e+00 5.000110e+00 11 5.280000e-10 5.000035e+00 5.000059e+00 12 6.280000e-10 4.999991e+00 5.000000e+00 13 7.280000e-10 4.999962e+00 4.999953e+00 14 8.280000e-10 4.999924e+00 4.999900e+00 15 9.280000e-10 4.999898e+00 4.999857e+00 16 1.028000e-09 4.999866e+00 4.999808e+00 17 1.128000e-09 4.999852e+00 4.999772e+00 18 1.228000e-09 4.999868e+00 4.999750e+00 19 1.328000e-09 4.999860e+00 4.999721e+00 20 1.428000e-09 4.999813e+00 4.999665e+00 21 1.528000e-09 4.999776e+00 4.999620e+00 22 1.628000e-09 4.999734e+00 4.999569e+00 23 1.728000e-09 4.999700e+00 4.999528e+00 24 1.828000e-09 4.999662e+00 4.999481e+00 25 1.928000e-09 4.999631e+00 4.999444e+00 26 2.028000e-09 4.999596e+00 4.999401e+00 27 2.128000e-09 4.999569e+00 4.999368e+00 28 2.228000e-09 4.999542e+00 4.999337e+00 29 2.328000e-09 4.999521e+00 4.999312e+00 30 2.428000e-09 4.999491e+00 4.999274e+00 31 2.528000e-09 4.999462e+00 4.999239e+00 32 2.628000e-09 4.999432e+00 4.999201e+00 33 2.728000e-09 4.999406e+00 4.999168e+00 34 2.828000e-09 4.999378e+00 4.999133e+00 35 2.928000e-09 4.999354e+00 4.999103e+00 36 3.028000e-09 4.999330e+00 4.999071e+00 37 3.128000e-09 4.999308e+00 4.999043e+00 38 3.228000e-09 4.999287e+00 4.999015e+00 39 3.328000e-09 4.999269e+00 4.998990e+00 40 3.428000e-09 4.999249e+00 4.998964e+00 41 3.528000e-09 4.999228e+00 4.998939e+00 42 3.628000e-09 4.999208e+00 4.998913e+00 43 3.728000e-09 4.999188e+00 4.998890e+00 44 3.828000e-09 4.999169e+00 4.998866e+00 45 3.928000e-09 4.999152e+00 4.998845e+00 46 4.028000e-09 4.999134e+00 4.998823e+00 47 4.128000e-09 4.999118e+00 4.998803e+00 48 4.228000e-09 4.999102e+00 4.998783e+00 49 4.328000e-09 4.999087e+00 4.998766e+00 50 4.428000e-09 4.999073e+00 4.998747e+00 51 4.528000e-09 4.999059e+00 4.998731e+00 52 4.628000e-09 4.999045e+00 4.998713e+00 53 4.728000e-09 4.999032e+00 4.998697e+00 54 4.828000e-09 4.999019e+00 4.998681e+00 Index time v(2) v(3) -------------------------------------------------------------------------------- 55 4.928000e-09 4.999007e+00 4.998666e+00 56 5.028000e-09 4.998995e+00 4.998651e+00 57 5.128000e-09 4.998984e+00 4.998638e+00 58 5.228000e-09 4.998973e+00 4.998624e+00 59 5.328000e-09 4.998963e+00 4.998612e+00 60 5.428000e-09 4.998953e+00 4.998599e+00 61 5.528000e-09 4.998944e+00 4.998588e+00 62 5.628000e-09 4.998935e+00 4.998576e+00 63 5.728000e-09 4.998926e+00 4.998565e+00 64 5.828000e-09 4.998917e+00 4.998554e+00 65 5.928000e-09 4.998909e+00 4.998545e+00 66 6.028000e-09 4.998901e+00 4.998535e+00 67 6.128000e-09 4.998894e+00 4.998526e+00 68 6.228000e-09 4.998887e+00 4.998516e+00 69 6.328000e-09 4.998880e+00 4.998508e+00 70 6.428000e-09 4.998873e+00 4.998500e+00 71 6.528000e-09 4.998867e+00 4.998492e+00 72 6.628000e-09 4.998860e+00 4.998484e+00 73 6.728000e-09 4.998855e+00 4.998477e+00 74 6.828000e-09 4.998849e+00 4.998470e+00 75 6.928000e-09 4.998843e+00 4.998463e+00 76 7.028000e-09 4.998838e+00 4.998456e+00 77 7.128000e-09 4.998833e+00 4.998450e+00 78 7.228000e-09 4.998829e+00 4.998444e+00 79 7.328000e-09 4.998824e+00 4.998438e+00 80 7.428000e-09 4.998820e+00 4.998433e+00 81 7.528000e-09 4.998815e+00 4.998428e+00 82 7.628000e-09 4.998811e+00 4.998422e+00 83 7.728000e-09 4.998807e+00 4.998418e+00 84 7.828000e-09 4.998804e+00 4.998413e+00 85 7.928000e-09 4.998800e+00 4.998408e+00 86 8.028000e-09 4.998797e+00 4.998404e+00 87 8.128000e-09 4.998793e+00 4.998400e+00 88 8.228000e-09 4.998790e+00 4.998395e+00 89 8.328000e-09 4.998787e+00 4.998392e+00 90 8.428000e-09 4.998784e+00 4.998388e+00 91 8.528000e-09 4.998781e+00 4.998384e+00 92 8.628000e-09 4.998779e+00 4.998381e+00 93 8.728000e-09 4.998776e+00 4.998377e+00 94 8.828000e-09 4.998773e+00 4.998374e+00 95 8.928000e-09 4.998771e+00 4.998371e+00 96 9.028000e-09 4.998769e+00 4.998368e+00 97 9.128000e-09 4.998766e+00 4.998365e+00 98 9.228000e-09 4.998764e+00 4.998362e+00 99 9.328000e-09 4.998762e+00 4.998359e+00 100 9.428000e-09 4.998760e+00 4.998357e+00 101 9.528000e-09 4.998758e+00 4.998354e+00 102 9.628000e-09 4.998757e+00 4.998352e+00 103 9.728000e-09 4.998755e+00 4.998349e+00 104 9.828000e-09 4.998753e+00 4.998347e+00 105 9.928000e-09 4.998751e+00 4.998345e+00 106 1.002800e-08 4.998750e+00 4.998343e+00 107 1.012800e-08 4.998748e+00 4.998341e+00 108 1.022800e-08 4.998747e+00 4.998338e+00 109 1.032800e-08 4.998746e+00 4.998337e+00 110 1.042800e-08 4.998744e+00 4.998335e+00 111 1.052800e-08 4.998743e+00 4.998333e+00 112 1.062800e-08 4.998742e+00 4.998331e+00 Index time v(2) v(3) -------------------------------------------------------------------------------- 113 1.072800e-08 4.998740e+00 4.998329e+00 114 1.082800e-08 4.998739e+00 4.998327e+00 115 1.092800e-08 4.998738e+00 4.998326e+00 116 1.102800e-08 4.998737e+00 4.998324e+00 117 1.112800e-08 4.998736e+00 4.998323e+00 118 1.122800e-08 4.998735e+00 4.998321e+00 119 1.132800e-08 4.998734e+00 4.998320e+00 120 1.142800e-08 4.998733e+00 4.998318e+00 121 1.152800e-08 4.998732e+00 4.998317e+00 122 1.162800e-08 4.998731e+00 4.998315e+00 123 1.172800e-08 4.998730e+00 4.998314e+00 124 1.182800e-08 4.998730e+00 4.998313e+00 125 1.192800e-08 4.998729e+00 4.998312e+00 126 1.202800e-08 4.998728e+00 4.998310e+00 127 1.212800e-08 4.998727e+00 4.998309e+00 128 1.222800e-08 4.998726e+00 4.998308e+00 129 1.232800e-08 4.998726e+00 4.998307e+00 130 1.242800e-08 4.998725e+00 4.998306e+00 131 1.252800e-08 4.998724e+00 4.998305e+00 132 1.262800e-08 4.998724e+00 4.998303e+00 133 1.272800e-08 4.998723e+00 4.998302e+00 134 1.282800e-08 4.998723e+00 4.998301e+00 135 1.292800e-08 4.998722e+00 4.998300e+00 136 1.302800e-08 4.998721e+00 4.998299e+00 137 1.312800e-08 4.998721e+00 4.998298e+00 138 1.322800e-08 4.998720e+00 4.998297e+00 139 1.332800e-08 4.998720e+00 4.998297e+00 140 1.342800e-08 4.998719e+00 4.998296e+00 141 1.352800e-08 4.998719e+00 4.998295e+00 142 1.362800e-08 4.998718e+00 4.998294e+00 143 1.372800e-08 4.998718e+00 4.998293e+00 144 1.382800e-08 4.998717e+00 4.998292e+00 145 1.392800e-08 4.998717e+00 4.998291e+00 146 1.402800e-08 4.998717e+00 4.998290e+00 147 1.412800e-08 4.998716e+00 4.998290e+00 148 1.422800e-08 4.998716e+00 4.998289e+00 149 1.432800e-08 4.998715e+00 4.998288e+00 150 1.442800e-08 4.998715e+00 4.998287e+00 151 1.452800e-08 4.998715e+00 4.998287e+00 152 1.462800e-08 4.998714e+00 4.998286e+00 153 1.472800e-08 4.998714e+00 4.998285e+00 154 1.482800e-08 4.998714e+00 4.998285e+00 155 1.492800e-08 4.998713e+00 4.998284e+00 156 1.502800e-08 4.998713e+00 4.998283e+00 157 1.512800e-08 4.998713e+00 4.998283e+00 158 1.522800e-08 4.998713e+00 4.998282e+00 159 1.532800e-08 4.998712e+00 4.998281e+00 160 1.542800e-08 4.998712e+00 4.998281e+00 161 1.552800e-08 4.998712e+00 4.998280e+00 162 1.562800e-08 4.998712e+00 4.998280e+00 163 1.572800e-08 4.998711e+00 4.998279e+00 164 1.582800e-08 4.998711e+00 4.998278e+00 165 1.590000e-08 4.998596e+00 4.998106e+00 166 1.591000e-08 4.998571e+00 4.997993e+00 167 1.593000e-08 4.998526e+00 4.997985e+00 168 1.597000e-08 4.956088e+00 4.998043e+00 169 1.605000e-08 4.450282e+00 4.998182e+00 170 1.610000e-08 3.834131e+00 4.998106e+00 Index time v(2) v(3) -------------------------------------------------------------------------------- 171 1.611000e-08 3.793436e+00 4.998060e+00 172 1.613000e-08 3.761934e+00 4.998064e+00 173 1.617000e-08 3.741943e+00 4.998110e+00 174 1.625000e-08 3.677501e+00 4.998256e+00 175 1.635000e-08 3.614440e+00 4.998413e+00 176 1.645000e-08 3.542730e+00 4.998401e+00 177 1.655000e-08 3.483939e+00 4.998401e+00 178 1.665000e-08 3.419033e+00 4.998389e+00 179 1.675000e-08 3.364326e+00 4.998389e+00 180 1.685000e-08 3.305242e+00 4.998378e+00 181 1.695000e-08 3.254163e+00 4.998379e+00 182 1.705000e-08 3.200134e+00 4.692574e+00 183 1.715000e-08 3.152585e+00 3.804416e+00 184 1.725000e-08 3.102921e+00 3.667061e+00 185 1.735000e-08 3.058587e+00 3.589511e+00 186 1.745000e-08 3.012721e+00 3.474512e+00 187 1.755000e-08 2.971158e+00 3.401226e+00 188 1.765000e-08 2.928632e+00 3.293487e+00 189 1.775000e-08 2.889663e+00 3.223734e+00 190 1.785000e-08 2.850117e+00 3.122570e+00 191 1.795000e-08 2.813517e+00 3.056029e+00 192 1.805000e-08 2.703343e+00 2.960812e+00 193 1.815000e-08 2.406653e+00 2.897285e+00 194 1.825000e-08 2.190892e+00 2.807513e+00 195 1.835000e-08 2.120388e+00 2.746754e+00 196 1.845000e-08 2.042130e+00 2.661951e+00 197 1.855000e-08 1.978664e+00 2.603705e+00 198 1.865000e-08 1.907248e+00 2.523425e+00 199 1.875000e-08 1.847291e+00 2.467524e+00 200 1.885000e-08 1.781786e+00 2.391414e+00 201 1.895000e-08 1.725219e+00 2.337694e+00 202 1.905000e-08 1.664915e+00 2.249172e+00 203 1.915000e-08 1.611600e+00 2.128120e+00 204 1.925000e-08 1.555923e+00 1.977521e+00 205 1.935000e-08 1.505698e+00 1.893028e+00 206 1.945000e-08 1.454141e+00 1.812968e+00 207 1.955000e-08 1.406822e+00 1.753242e+00 208 1.965000e-08 1.358940e+00 1.679627e+00 209 1.975000e-08 1.314353e+00 1.623596e+00 210 1.985000e-08 1.269781e+00 1.555188e+00 211 1.995000e-08 1.227758e+00 1.502637e+00 212 2.005000e-08 1.182839e+00 1.439010e+00 213 2.015000e-08 1.126634e+00 1.389745e+00 214 2.025000e-08 1.061012e+00 1.330521e+00 215 2.035000e-08 1.005025e+00 1.284353e+00 216 2.045000e-08 9.608308e-01 1.229189e+00 217 2.055000e-08 9.211590e-01 1.185928e+00 218 2.065000e-08 8.832356e-01 1.134508e+00 219 2.075000e-08 8.465324e-01 1.093972e+00 220 2.085000e-08 8.115204e-01 1.046013e+00 221 2.095000e-08 7.774503e-01 1.008032e+00 222 2.105000e-08 7.450903e-01 9.627555e-01 223 2.115000e-08 7.134598e-01 9.241539e-01 224 2.125000e-08 6.835235e-01 8.761683e-01 225 2.135000e-08 6.541516e-01 8.369078e-01 226 2.145000e-08 6.264320e-01 7.949794e-01 227 2.155000e-08 5.991475e-01 7.628226e-01 228 2.165000e-08 5.734561e-01 7.260597e-01 Index time v(2) v(3) -------------------------------------------------------------------------------- 229 2.175000e-08 5.480986e-01 6.966752e-01 230 2.185000e-08 5.242655e-01 6.626785e-01 231 2.195000e-08 5.006874e-01 6.354747e-01 232 2.205000e-08 4.784580e-01 6.040056e-01 233 2.215000e-08 4.558712e-01 5.788129e-01 234 2.225000e-08 4.337050e-01 5.496701e-01 235 2.235000e-08 4.113183e-01 5.263311e-01 236 2.245000e-08 3.908536e-01 4.993288e-01 237 2.255000e-08 3.712845e-01 4.776962e-01 238 2.265000e-08 3.533138e-01 4.526622e-01 239 2.275000e-08 3.355437e-01 4.325988e-01 240 2.285000e-08 3.189772e-01 4.093745e-01 241 2.295000e-08 3.025228e-01 3.907533e-01 242 2.305000e-08 2.871863e-01 3.691798e-01 243 2.315000e-08 2.719348e-01 3.517898e-01 244 2.325000e-08 2.577226e-01 3.314864e-01 245 2.335000e-08 2.435732e-01 3.149983e-01 246 2.345000e-08 2.303888e-01 2.960309e-01 247 2.355000e-08 2.172486e-01 2.809184e-01 248 2.365000e-08 2.050034e-01 2.635800e-01 249 2.375000e-08 1.927870e-01 2.496989e-01 250 2.385000e-08 1.814001e-01 2.336319e-01 251 2.395000e-08 1.700292e-01 2.207282e-01 252 2.405000e-08 1.594243e-01 2.057782e-01 253 2.415000e-08 1.488081e-01 1.937585e-01 254 2.425000e-08 1.388593e-01 1.798286e-01 255 2.435000e-08 1.288585e-01 1.686136e-01 256 2.445000e-08 1.195115e-01 1.556154e-01 257 2.455000e-08 1.101997e-01 1.451329e-01 258 2.465000e-08 1.015497e-01 1.329854e-01 259 2.475000e-08 9.291457e-02 1.231692e-01 260 2.485000e-08 8.485580e-02 1.117985e-01 261 2.495000e-08 7.678282e-02 1.025885e-01 262 2.505000e-08 6.923591e-02 9.192681e-02 263 2.515000e-08 6.166898e-02 8.326580e-02 264 2.525000e-08 5.458779e-02 7.324310e-02 265 2.535000e-08 4.748277e-02 6.506755e-02 266 2.545000e-08 4.082635e-02 5.562279e-02 267 2.555000e-08 3.414315e-02 4.790603e-02 268 2.565000e-08 2.787431e-02 3.902051e-02 269 2.575000e-08 2.157653e-02 3.174086e-02 270 2.585000e-08 1.566157e-02 2.336378e-02 271 2.595000e-08 9.716179e-03 1.646913e-02 272 2.605000e-08 4.124555e-03 8.546938e-03 273 2.615000e-08 -1.49882e-03 1.998779e-03 274 2.625000e-08 -6.79585e-03 -5.50848e-03 275 2.635000e-08 -1.21262e-02 -1.17412e-02 276 2.645000e-08 -1.71551e-02 -1.88688e-02 277 2.655000e-08 -2.22140e-02 -2.48140e-02 278 2.665000e-08 -2.69890e-02 -3.15938e-02 279 2.675000e-08 -3.17910e-02 -3.72763e-02 280 2.685000e-08 -3.63309e-02 -4.37372e-02 281 2.695000e-08 -4.08996e-02 -4.91794e-02 282 2.705000e-08 -4.52269e-02 -5.53472e-02 283 2.715000e-08 -4.95828e-02 -6.05691e-02 284 2.725000e-08 -5.37151e-02 -6.64670e-02 285 2.735000e-08 -5.78750e-02 -7.14857e-02 286 2.745000e-08 -6.18275e-02 -7.71337e-02 Index time v(2) v(3) -------------------------------------------------------------------------------- 287 2.755000e-08 -6.58063e-02 -8.19644e-02 288 2.765000e-08 -6.95925e-02 -8.73801e-02 289 2.775000e-08 -7.34038e-02 -9.20353e-02 290 2.785000e-08 -7.70359e-02 -9.72348e-02 291 2.795000e-08 -8.06916e-02 -1.01728e-01 292 2.805000e-08 -8.41807e-02 -1.06727e-01 293 2.815000e-08 -8.76917e-02 -1.11069e-01 294 2.825000e-08 -9.10473e-02 -1.15883e-01 295 2.835000e-08 -9.44231e-02 -1.20085e-01 296 2.845000e-08 -9.76539e-02 -1.24724e-01 297 2.855000e-08 -1.00903e-01 -1.28795e-01 298 2.865000e-08 -1.04016e-01 -1.33272e-01 299 2.875000e-08 -1.07146e-01 -1.37219e-01 300 2.885000e-08 -1.10148e-01 -1.41543e-01 301 2.895000e-08 -1.13165e-01 -1.45373e-01 302 2.905000e-08 -1.16064e-01 -1.49553e-01 303 2.915000e-08 -1.18975e-01 -1.53272e-01 304 2.925000e-08 -1.21774e-01 -1.57316e-01 305 2.935000e-08 -1.24585e-01 -1.60930e-01 306 2.945000e-08 -1.27291e-01 -1.64844e-01 307 2.955000e-08 -1.30007e-01 -1.68357e-01 308 2.965000e-08 -1.32624e-01 -1.72148e-01 309 2.975000e-08 -1.35249e-01 -1.75564e-01 310 2.985000e-08 -1.37781e-01 -1.79238e-01 311 2.995000e-08 -1.40319e-01 -1.82561e-01 312 3.005000e-08 -1.42770e-01 -1.86122e-01 313 3.015000e-08 -1.45225e-01 -1.89355e-01 314 3.025000e-08 -1.47598e-01 -1.92808e-01 315 3.035000e-08 -1.49973e-01 -1.95954e-01 316 3.045000e-08 -1.52270e-01 -1.99303e-01 317 3.055000e-08 -1.54569e-01 -2.02364e-01 318 3.065000e-08 -1.56793e-01 -2.05612e-01 319 3.075000e-08 -1.59017e-01 -2.08592e-01 320 3.085000e-08 -1.61171e-01 -2.11742e-01 321 3.095000e-08 -1.63323e-01 -2.14641e-01 322 3.105000e-08 -1.65409e-01 -2.17697e-01 323 3.115000e-08 -1.67491e-01 -2.20517e-01 324 3.125000e-08 -1.69510e-01 -2.23482e-01 325 3.135000e-08 -1.71525e-01 -2.26224e-01 326 3.145000e-08 -1.73480e-01 -2.29099e-01 327 3.155000e-08 -1.75429e-01 -2.31766e-01 328 3.165000e-08 -1.77320e-01 -2.34554e-01 329 3.175000e-08 -1.79205e-01 -2.37146e-01 330 3.185000e-08 -1.81035e-01 -2.39849e-01 331 3.190000e-08 -1.81987e-01 -2.41064e-01 332 3.191000e-08 -1.85346e-01 -2.41351e-01 333 3.193000e-08 -1.93715e-01 -2.41885e-01 334 3.197000e-08 -1.82850e-01 -2.42916e-01 335 3.203372e-08 2.930167e-02 -2.44513e-01 336 3.209349e-08 5.451883e-01 -2.46002e-01 337 3.210000e-08 6.218717e-01 -2.46172e-01 338 3.210179e-08 6.355696e-01 -2.46216e-01 339 3.210537e-08 6.545462e-01 -2.46306e-01 340 3.211253e-08 6.672464e-01 -2.46490e-01 341 3.212685e-08 6.750693e-01 -2.46847e-01 342 3.214598e-08 6.848948e-01 -2.47323e-01 343 3.218423e-08 7.047906e-01 -2.48281e-01 344 3.226074e-08 7.437148e-01 -2.50139e-01 Index time v(2) v(3) -------------------------------------------------------------------------------- 345 3.236074e-08 7.933228e-01 -2.52576e-01 346 3.246074e-08 8.413111e-01 -2.54960e-01 347 3.256074e-08 8.876989e-01 -2.57327e-01 348 3.266074e-08 9.322713e-01 -2.59639e-01 349 3.276074e-08 9.753935e-01 -2.61930e-01 350 3.286074e-08 1.016930e+00 -2.64170e-01 351 3.296074e-08 1.057143e+00 -2.74673e-01 352 3.306074e-08 1.096000e+00 -9.32541e-02 353 3.316074e-08 1.133632e+00 5.705877e-01 354 3.324123e-08 1.163080e+00 6.517344e-01 355 3.332580e-08 1.193202e+00 6.945873e-01 356 3.342580e-08 1.227693e+00 7.782361e-01 357 3.352580e-08 1.261289e+00 8.303386e-01 358 3.362580e-08 1.293926e+00 9.099424e-01 359 3.372580e-08 1.325630e+00 9.600411e-01 360 3.382580e-08 1.356467e+00 1.035487e+00 361 3.392580e-08 1.385466e+00 1.083753e+00 362 3.402580e-08 1.433897e+00 1.155387e+00 363 3.412580e-08 1.600149e+00 1.201988e+00 364 3.422580e-08 1.859180e+00 1.270114e+00 365 3.432580e-08 1.940568e+00 1.315174e+00 366 3.442580e-08 1.997020e+00 1.380073e+00 367 3.452580e-08 2.063946e+00 1.423684e+00 368 3.462580e-08 2.119255e+00 1.485625e+00 369 3.472580e-08 2.182057e+00 1.527946e+00 370 3.482580e-08 2.235102e+00 1.587141e+00 371 3.492580e-08 2.294113e+00 1.627977e+00 372 3.502580e-08 2.344918e+00 1.689460e+00 373 3.512580e-08 2.400507e+00 1.769210e+00 374 3.522580e-08 2.449126e+00 1.910549e+00 375 3.532580e-08 2.501602e+00 2.009290e+00 376 3.542580e-08 2.548104e+00 2.079976e+00 377 3.552580e-08 2.597732e+00 2.137241e+00 378 3.562580e-08 2.642203e+00 2.203109e+00 379 3.572580e-08 2.689236e+00 2.257941e+00 380 3.582580e-08 2.731771e+00 2.320927e+00 381 3.592580e-08 2.776346e+00 2.373282e+00 382 3.602580e-08 2.818129e+00 2.433461e+00 383 3.612580e-08 2.870777e+00 2.483478e+00 384 3.622580e-08 2.937062e+00 2.540954e+00 385 3.632580e-08 3.006378e+00 2.588760e+00 386 3.642580e-08 3.058234e+00 2.643640e+00 387 3.652580e-08 3.104831e+00 2.689351e+00 388 3.662580e-08 3.147858e+00 2.741746e+00 389 3.672580e-08 3.191688e+00 2.785476e+00 390 3.682580e-08 3.232663e+00 2.835501e+00 391 3.692580e-08 3.274182e+00 2.877339e+00 392 3.702580e-08 3.313152e+00 2.925328e+00 393 3.712580e-08 3.352496e+00 2.967790e+00 394 3.722580e-08 3.389546e+00 3.021023e+00 395 3.732580e-08 3.426845e+00 3.070169e+00 396 3.742580e-08 3.462064e+00 3.121504e+00 397 3.752580e-08 3.497437e+00 3.162241e+00 398 3.762580e-08 3.530914e+00 3.206571e+00 399 3.772580e-08 3.564476e+00 3.244264e+00 400 3.782580e-08 3.596302e+00 3.286320e+00 401 3.792580e-08 3.628158e+00 3.322197e+00 402 3.802580e-08 3.658465e+00 3.362130e+00 Index time v(2) v(3) -------------------------------------------------------------------------------- 403 3.812580e-08 3.689286e+00 3.396270e+00 404 3.822580e-08 3.720127e+00 3.434179e+00 405 3.832580e-08 3.752458e+00 3.466663e+00 406 3.842580e-08 3.783250e+00 3.502647e+00 407 3.852580e-08 3.812690e+00 3.533557e+00 408 3.862580e-08 3.840002e+00 3.567713e+00 409 3.872580e-08 3.866992e+00 3.597127e+00 410 3.882580e-08 3.892716e+00 3.629553e+00 411 3.892580e-08 3.918290e+00 3.657547e+00 412 3.902580e-08 3.942688e+00 3.688343e+00 413 3.912580e-08 3.966931e+00 3.715106e+00 414 3.922580e-08 3.990072e+00 3.744817e+00 415 3.932580e-08 4.013059e+00 3.771175e+00 416 3.942580e-08 4.035014e+00 3.800106e+00 417 3.952580e-08 4.056817e+00 3.825142e+00 418 3.962580e-08 4.077653e+00 3.852030e+00 419 3.972580e-08 4.098340e+00 3.875373e+00 420 3.982580e-08 4.118122e+00 3.900710e+00 421 3.992580e-08 4.137759e+00 3.922878e+00 422 4.002580e-08 4.156550e+00 3.946917e+00 423 4.012580e-08 4.175225e+00 3.968002e+00 424 4.022580e-08 4.193199e+00 3.990819e+00 425 4.032580e-08 4.211201e+00 4.010882e+00 426 4.042580e-08 4.228574e+00 4.032548e+00 427 4.052580e-08 4.245783e+00 4.051647e+00 428 4.062580e-08 4.262173e+00 4.072231e+00 429 4.072580e-08 4.278347e+00 4.090423e+00 430 4.082580e-08 4.293828e+00 4.109990e+00 431 4.092580e-08 4.309174e+00 4.127328e+00 432 4.102580e-08 4.323896e+00 4.145940e+00 433 4.112580e-08 4.338494e+00 4.162480e+00 434 4.122580e-08 4.352509e+00 4.180219e+00 435 4.132580e-08 4.366404e+00 4.196065e+00 436 4.142580e-08 4.379754e+00 4.213046e+00 437 4.152580e-08 4.392990e+00 4.228232e+00 438 4.162580e-08 4.405716e+00 4.244403e+00 439 4.172580e-08 4.418335e+00 4.258861e+00 440 4.182580e-08 4.430475e+00 4.274236e+00 441 4.192580e-08 4.442514e+00 4.288039e+00 442 4.202580e-08 4.454106e+00 4.302706e+00 443 4.212580e-08 4.465603e+00 4.315913e+00 444 4.222580e-08 4.476686e+00 4.329922e+00 445 4.232580e-08 4.487690e+00 4.342570e+00 446 4.242580e-08 4.498317e+00 4.355962e+00 447 4.252580e-08 4.508865e+00 4.368087e+00 448 4.262580e-08 4.519042e+00 4.380901e+00 449 4.272580e-08 4.529127e+00 4.392535e+00 450 4.282580e-08 4.538859e+00 4.404809e+00 451 4.292580e-08 4.548509e+00 4.415983e+00 452 4.302580e-08 4.557837e+00 4.427750e+00 453 4.312580e-08 4.567088e+00 4.438493e+00 454 4.322580e-08 4.576039e+00 4.449786e+00 455 4.332580e-08 4.584918e+00 4.460128e+00 456 4.342580e-08 4.593515e+00 4.470982e+00 457 4.352580e-08 4.602045e+00 4.480952e+00 458 4.362580e-08 4.610310e+00 4.491393e+00 459 4.372580e-08 4.618511e+00 4.501003e+00 460 4.382580e-08 4.626466e+00 4.511047e+00 Index time v(2) v(3) -------------------------------------------------------------------------------- 461 4.392580e-08 4.634358e+00 4.520317e+00 462 4.402580e-08 4.642020e+00 4.529991e+00 463 4.412580e-08 4.649623e+00 4.538945e+00 464 4.422580e-08 4.657009e+00 4.548274e+00 465 4.432580e-08 4.664340e+00 4.556931e+00 466 4.442580e-08 4.671470e+00 4.565935e+00 467 4.452580e-08 4.678547e+00 4.574313e+00 468 4.462580e-08 4.685434e+00 4.583011e+00 469 4.472580e-08 4.692269e+00 4.591126e+00 470 4.482580e-08 4.698924e+00 4.599538e+00 471 4.492580e-08 4.705530e+00 4.607405e+00 472 4.502580e-08 4.711967e+00 4.615546e+00 473 4.512580e-08 4.718356e+00 4.623179e+00 474 4.522580e-08 4.724588e+00 4.631064e+00 475 4.532580e-08 4.730774e+00 4.638476e+00 476 4.542580e-08 4.736811e+00 4.646121e+00 477 4.552580e-08 4.742804e+00 4.653324e+00 478 4.562580e-08 4.748657e+00 4.660742e+00 479 4.572580e-08 4.754468e+00 4.667747e+00 480 4.582580e-08 4.760147e+00 4.674949e+00 481 4.592580e-08 4.765784e+00 4.681764e+00 482 4.602580e-08 4.771297e+00 4.688762e+00 483 4.612580e-08 4.776770e+00 4.695397e+00 484 4.622580e-08 4.782126e+00 4.702200e+00 485 4.632580e-08 4.787443e+00 4.708665e+00 486 4.642580e-08 4.792649e+00 4.715284e+00 487 4.652580e-08 4.797817e+00 4.721586e+00 488 4.662580e-08 4.802881e+00 4.728028e+00 489 4.672580e-08 4.807907e+00 4.734174e+00 490 4.682580e-08 4.812833e+00 4.740449e+00 491 4.692580e-08 4.817724e+00 4.746446e+00 492 4.700000e-08 4.821159e+00 4.750884e+00 tmpk8ny_4pz/tests/transmission/ltra1_1_line.cir0000644000175000017500000000127513546075722022031 0ustar carstencarstenMOSdriver -- lossy line LTRA model -- C load m5 0 168 2 0 mn0p9 w = 18.0u l=0.9u m6 1 168 2 1 mp1p0 w = 36.0u l=1.0u CN2 2 0 0.025398e-12 CN3 3 0 0.007398e-12 o1 2 0 3 0 lline vdd 1 0 dc 5.0 VS 168 0 PULSE (0 5 15.9NS 0.2NS 0.2NS 15.8NS 32NS ) .OPTION NOACCT .TRAN 0.2N 47N 0 0.1N .PRINT TRAN V(2) V(3) .MODEL mn0p9 NMOS VTO=0.8 KP=48U GAMMA=0.30 PHI=0.55 +LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U .MODEL mp1p0 PMOS VTO=-0.8 KP=21U GAMMA=0.45 PHI=0.61 +LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U .model lline ltra rel=1 r=12.45 g=0 l=8.972e-9 c=0.468e-12 +len=16 steplimit compactrel=1.0e-3 compactabs=1.0e-14 .end tmpk8ny_4pz/tests/transmission/ltra2_2_line.cir0000644000175000017500000000156613546075722022036 0ustar carstencarstenMOSdriver -- 2 lossy lines LTRA model -- C load m5 0 168 2 0 mn0p9 w = 18.0u l=0.9u m6 1 168 2 1 mp1p0 w = 36.0u l=1.0u m1 0 3 4 0 mn0p9 w = 18.0u l=0.9u m2 1 3 4 1 mp1p0 w = 36.0u l=1.0u CN2 2 0 0.025398e-12 CN3 3 0 0.007398e-12 CN4 4 0 0.025398e-12 CN5 5 0 0.007398e-12 o1 2 0 3 0 lline o2 4 0 5 0 lline vdd 1 0 dc 5.0 VS 168 0 PULSE (0 5 15.9NS 0.2NS 0.2NS 15.8NS 32NS ) .OPTION NOACCT .TRAN 0.2N 47N 0 0.1N .PRINT TRAN V(2) V(3) V(4) V(5) .MODEL mn0p9 NMOS VTO=0.8 KP=48U GAMMA=0.30 PHI=0.55 +LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U .MODEL mp1p0 PMOS VTO=-0.8 KP=21U GAMMA=0.45 PHI=0.61 +LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U .model lline ltra rel=1 r=12.45 g=0 l=8.972e-9 c=0.468e-12 +len=16 steplimit compactrel=1.0e-3 compactabs=1.0e-14 .end tmpk8ny_4pz/tests/hfet/0000755000175000017500000000000013546075722015250 5ustar carstencarstentmpk8ny_4pz/tests/hfet/id_vgs.out0000644000175000017500000000706413546075722017263 0ustar carstencarsten No. of Data Rows : 101 Circuit: HFET Id versus Vgs characteristic Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 HFET Id versus Vgs characteristic -------------------------------------------------------------------------------- Index v-sweep vds#branch -------------------------------------------------------------------------------- 0 0.000000e+00 3.772725e-11 1 1.000000e-02 -1.357632e-05 2 2.000000e-02 -2.711234e-05 3 3.000000e-02 -4.036601e-05 4 4.000000e-02 -5.305124e-05 5 5.000000e-02 -6.489829e-05 6 6.000000e-02 -7.570261e-05 7 7.000000e-02 -8.535128e-05 8 8.000000e-02 -9.382381e-05 9 9.000000e-02 -1.011738e-04 10 1.000000e-01 -1.075027e-04 11 1.100000e-01 -1.129351e-04 12 1.200000e-01 -1.176000e-04 13 1.300000e-01 -1.216188e-04 14 1.400000e-01 -1.251000e-04 15 1.500000e-01 -1.281367e-04 16 1.600000e-01 -1.308071e-04 17 1.700000e-01 -1.331758e-04 18 1.800000e-01 -1.352959e-04 19 1.900000e-01 -1.372106e-04 20 2.000000e-01 -1.389551e-04 21 2.100000e-01 -1.405581e-04 22 2.200000e-01 -1.420430e-04 23 2.300000e-01 -1.434290e-04 24 2.400000e-01 -1.447317e-04 25 2.500000e-01 -1.459642e-04 26 2.600000e-01 -1.471370e-04 27 2.700000e-01 -1.482592e-04 28 2.800000e-01 -1.493381e-04 29 2.900000e-01 -1.503799e-04 30 3.000000e-01 -1.513899e-04 31 3.100000e-01 -1.523725e-04 32 3.200000e-01 -1.533314e-04 33 3.300000e-01 -1.542699e-04 34 3.400000e-01 -1.551906e-04 35 3.500000e-01 -1.560960e-04 36 3.600000e-01 -1.569880e-04 37 3.700000e-01 -1.578684e-04 38 3.800000e-01 -1.587386e-04 39 3.900000e-01 -1.596001e-04 40 4.000000e-01 -1.604540e-04 41 4.100000e-01 -1.613013e-04 42 4.200000e-01 -1.621428e-04 43 4.300000e-01 -1.629794e-04 44 4.400000e-01 -1.638117e-04 45 4.500000e-01 -1.646404e-04 46 4.600000e-01 -1.654660e-04 47 4.700000e-01 -1.662889e-04 48 4.800000e-01 -1.671097e-04 49 4.900000e-01 -1.679287e-04 50 5.000000e-01 -1.687463e-04 51 5.100000e-01 -1.695627e-04 52 5.200000e-01 -1.703782e-04 53 5.300000e-01 -1.711932e-04 54 5.400000e-01 -1.720078e-04 Index v-sweep vds#branch -------------------------------------------------------------------------------- 55 5.500000e-01 -1.728222e-04 56 5.600000e-01 -1.736366e-04 57 5.700000e-01 -1.744513e-04 58 5.800000e-01 -1.752663e-04 59 5.900000e-01 -1.760818e-04 60 6.000000e-01 -1.768979e-04 61 6.100000e-01 -1.777147e-04 62 6.200000e-01 -1.785324e-04 63 6.300000e-01 -1.793511e-04 64 6.400000e-01 -1.801708e-04 65 6.500000e-01 -1.809916e-04 66 6.600000e-01 -1.818136e-04 67 6.700000e-01 -1.826370e-04 68 6.800000e-01 -1.834616e-04 69 6.900000e-01 -1.842877e-04 70 7.000000e-01 -1.851153e-04 71 7.100000e-01 -1.859443e-04 72 7.200000e-01 -1.867750e-04 73 7.300000e-01 -1.876072e-04 74 7.400000e-01 -1.884411e-04 75 7.500000e-01 -1.892768e-04 76 7.600000e-01 -1.901141e-04 77 7.700000e-01 -1.909533e-04 78 7.800000e-01 -1.917942e-04 79 7.900000e-01 -1.926370e-04 80 8.000000e-01 -1.934816e-04 81 8.100000e-01 -1.943282e-04 82 8.200000e-01 -1.951766e-04 83 8.300000e-01 -1.960271e-04 84 8.400000e-01 -1.968794e-04 85 8.500000e-01 -1.977338e-04 86 8.600000e-01 -1.985902e-04 87 8.700000e-01 -1.994486e-04 88 8.800000e-01 -2.003091e-04 89 8.900000e-01 -2.011716e-04 90 9.000000e-01 -2.020362e-04 91 9.100000e-01 -2.029030e-04 92 9.200000e-01 -2.037718e-04 93 9.300000e-01 -2.046427e-04 94 9.400000e-01 -2.055158e-04 95 9.500000e-01 -2.063911e-04 96 9.600000e-01 -2.072685e-04 97 9.700000e-01 -2.081481e-04 98 9.800000e-01 -2.090299e-04 99 9.900000e-01 -2.099139e-04 100 1.000000e+00 -2.108001e-04 tmpk8ny_4pz/tests/hfet/Makefile.am0000644000175000017500000000042213546075722017302 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = \ id_vgs.cir \ inverter.cir TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/hfet/inverter.out0000644000175000017500000014763613546075722017660 0ustar carstencarsten Circuit: DCFL inverter circuit Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Initial Transient Solution -------------------------- Node Voltage ---- ------- 1 2 2 0 3 -0.275446 4 -0.275535 vin#branch -3.59703e-11 vdd#branch 1.31971e-09 No. of Data Rows : 338 DCFL inverter circuit -------------------------------------------------------------------------------- Index time V(1) V(2) V(3) -------------------------------------------------------------------------------- 0 0.000000e+00 2.000000e+00 0.000000e+00 -2.754464e-01 1 1.000000e-13 2.000000e+00 0.000000e+00 -2.754464e-01 2 2.000000e-13 2.000000e+00 0.000000e+00 -2.754465e-01 3 4.000000e-13 2.000000e+00 0.000000e+00 -2.754465e-01 4 8.000000e-13 2.000000e+00 0.000000e+00 -2.754466e-01 5 1.600000e-12 2.000000e+00 0.000000e+00 -2.754467e-01 6 3.200000e-12 2.000000e+00 0.000000e+00 -2.754471e-01 7 6.400000e-12 2.000000e+00 0.000000e+00 -2.754477e-01 8 1.280000e-11 2.000000e+00 0.000000e+00 -2.754490e-01 9 2.280000e-11 2.000000e+00 0.000000e+00 -2.754509e-01 10 3.280000e-11 2.000000e+00 0.000000e+00 -2.754526e-01 11 4.280000e-11 2.000000e+00 0.000000e+00 -2.754543e-01 12 5.280000e-11 2.000000e+00 0.000000e+00 -2.754558e-01 13 6.280000e-11 2.000000e+00 0.000000e+00 -2.754572e-01 14 7.280000e-11 2.000000e+00 0.000000e+00 -2.754585e-01 15 8.280000e-11 2.000000e+00 0.000000e+00 -2.754598e-01 16 9.280000e-11 2.000000e+00 0.000000e+00 -2.754609e-01 17 1.028000e-10 2.000000e+00 0.000000e+00 -2.754620e-01 18 1.128000e-10 2.000000e+00 0.000000e+00 -2.754630e-01 19 1.228000e-10 2.000000e+00 0.000000e+00 -2.754639e-01 20 1.328000e-10 2.000000e+00 0.000000e+00 -2.754648e-01 21 1.428000e-10 2.000000e+00 0.000000e+00 -2.754656e-01 22 1.528000e-10 2.000000e+00 0.000000e+00 -2.754664e-01 23 1.628000e-10 2.000000e+00 0.000000e+00 -2.754671e-01 24 1.728000e-10 2.000000e+00 0.000000e+00 -2.754678e-01 25 1.828000e-10 2.000000e+00 0.000000e+00 -2.754684e-01 26 1.928000e-10 2.000000e+00 0.000000e+00 -2.754689e-01 27 2.028000e-10 2.000000e+00 0.000000e+00 -2.754695e-01 28 2.128000e-10 2.000000e+00 0.000000e+00 -2.754700e-01 29 2.228000e-10 2.000000e+00 0.000000e+00 -2.754704e-01 30 2.328000e-10 2.000000e+00 0.000000e+00 -2.754709e-01 31 2.428000e-10 2.000000e+00 0.000000e+00 -2.754713e-01 32 2.528000e-10 2.000000e+00 0.000000e+00 -2.754717e-01 33 2.628000e-10 2.000000e+00 0.000000e+00 -2.754720e-01 34 2.728000e-10 2.000000e+00 0.000000e+00 -2.754723e-01 35 2.828000e-10 2.000000e+00 0.000000e+00 -2.754726e-01 36 2.928000e-10 2.000000e+00 0.000000e+00 -2.754729e-01 37 3.028000e-10 2.000000e+00 0.000000e+00 -2.754732e-01 38 3.128000e-10 2.000000e+00 0.000000e+00 -2.754734e-01 39 3.228000e-10 2.000000e+00 0.000000e+00 -2.754737e-01 40 3.328000e-10 2.000000e+00 0.000000e+00 -2.754739e-01 41 3.428000e-10 2.000000e+00 0.000000e+00 -2.754741e-01 42 3.528000e-10 2.000000e+00 0.000000e+00 -2.754743e-01 43 3.628000e-10 2.000000e+00 0.000000e+00 -2.754745e-01 44 3.728000e-10 2.000000e+00 0.000000e+00 -2.754746e-01 45 3.828000e-10 2.000000e+00 0.000000e+00 -2.754748e-01 46 3.928000e-10 2.000000e+00 0.000000e+00 -2.754749e-01 47 4.028000e-10 2.000000e+00 0.000000e+00 -2.754750e-01 48 4.128000e-10 2.000000e+00 0.000000e+00 -2.754752e-01 49 4.228000e-10 2.000000e+00 0.000000e+00 -2.754753e-01 50 4.328000e-10 2.000000e+00 0.000000e+00 -2.754754e-01 51 4.428000e-10 2.000000e+00 0.000000e+00 -2.754755e-01 52 4.528000e-10 2.000000e+00 0.000000e+00 -2.754756e-01 53 4.628000e-10 2.000000e+00 0.000000e+00 -2.754757e-01 54 4.728000e-10 2.000000e+00 0.000000e+00 -2.754758e-01 Index time V(1) V(2) V(3) -------------------------------------------------------------------------------- 55 4.828000e-10 2.000000e+00 0.000000e+00 -2.754758e-01 56 4.928000e-10 2.000000e+00 0.000000e+00 -2.754759e-01 57 5.028000e-10 2.000000e+00 0.000000e+00 -2.754760e-01 58 5.128000e-10 2.000000e+00 0.000000e+00 -2.754760e-01 59 5.228000e-10 2.000000e+00 0.000000e+00 -2.754761e-01 60 5.328000e-10 2.000000e+00 0.000000e+00 -2.754761e-01 61 5.428000e-10 2.000000e+00 0.000000e+00 -2.754762e-01 62 5.528000e-10 2.000000e+00 0.000000e+00 -2.754762e-01 63 5.628000e-10 2.000000e+00 0.000000e+00 -2.754763e-01 64 5.728000e-10 2.000000e+00 0.000000e+00 -2.754763e-01 65 5.828000e-10 2.000000e+00 0.000000e+00 -2.754764e-01 66 5.928000e-10 2.000000e+00 0.000000e+00 -2.754764e-01 67 6.028000e-10 2.000000e+00 0.000000e+00 -2.754764e-01 68 6.128000e-10 2.000000e+00 0.000000e+00 -2.754765e-01 69 6.228000e-10 2.000000e+00 0.000000e+00 -2.754765e-01 70 6.328000e-10 2.000000e+00 0.000000e+00 -2.754765e-01 71 6.428000e-10 2.000000e+00 0.000000e+00 -2.754765e-01 72 6.528000e-10 2.000000e+00 0.000000e+00 -2.754766e-01 73 6.628000e-10 2.000000e+00 0.000000e+00 -2.754766e-01 74 6.728000e-10 2.000000e+00 0.000000e+00 -2.754766e-01 75 6.828000e-10 2.000000e+00 0.000000e+00 -2.754766e-01 76 6.928000e-10 2.000000e+00 0.000000e+00 -2.754766e-01 77 7.028000e-10 2.000000e+00 0.000000e+00 -2.754766e-01 78 7.128000e-10 2.000000e+00 0.000000e+00 -2.754767e-01 79 7.228000e-10 2.000000e+00 0.000000e+00 -2.754767e-01 80 7.328000e-10 2.000000e+00 0.000000e+00 -2.754767e-01 81 7.428000e-10 2.000000e+00 0.000000e+00 -2.754767e-01 82 7.528000e-10 2.000000e+00 0.000000e+00 -2.754767e-01 83 7.628000e-10 2.000000e+00 0.000000e+00 -2.754767e-01 84 7.728000e-10 2.000000e+00 0.000000e+00 -2.754767e-01 85 7.828000e-10 2.000000e+00 0.000000e+00 -2.754767e-01 86 7.928000e-10 2.000000e+00 0.000000e+00 -2.754768e-01 87 8.028000e-10 2.000000e+00 0.000000e+00 -2.754768e-01 88 8.128000e-10 2.000000e+00 0.000000e+00 -2.754768e-01 89 8.228000e-10 2.000000e+00 0.000000e+00 -2.754768e-01 90 8.328000e-10 2.000000e+00 0.000000e+00 -2.754768e-01 91 8.428000e-10 2.000000e+00 0.000000e+00 -2.754768e-01 92 8.528000e-10 2.000000e+00 0.000000e+00 -2.754768e-01 93 8.628000e-10 2.000000e+00 0.000000e+00 -2.754768e-01 94 8.728000e-10 2.000000e+00 0.000000e+00 -2.754768e-01 95 8.828000e-10 2.000000e+00 0.000000e+00 -2.754768e-01 96 8.928000e-10 2.000000e+00 0.000000e+00 -2.754768e-01 97 9.028000e-10 2.000000e+00 0.000000e+00 -2.754768e-01 98 9.128000e-10 2.000000e+00 0.000000e+00 -2.754768e-01 99 9.228000e-10 2.000000e+00 0.000000e+00 -2.754768e-01 100 9.328000e-10 2.000000e+00 0.000000e+00 -2.754768e-01 101 9.428000e-10 2.000000e+00 0.000000e+00 -2.754768e-01 102 9.528000e-10 2.000000e+00 0.000000e+00 -2.754768e-01 103 9.628000e-10 2.000000e+00 0.000000e+00 -2.754768e-01 104 9.728000e-10 2.000000e+00 0.000000e+00 -2.754768e-01 105 9.828000e-10 2.000000e+00 0.000000e+00 -2.754768e-01 106 9.928000e-10 2.000000e+00 0.000000e+00 -2.754768e-01 107 1.000000e-09 2.000000e+00 0.000000e+00 -2.754768e-01 108 1.000500e-09 2.000000e+00 1.000000e-01 -2.536058e-01 109 1.000625e-09 2.000000e+00 1.250000e-01 -2.471611e-01 110 1.000875e-09 2.000000e+00 1.750000e-01 -2.298135e-01 111 1.001375e-09 2.000000e+00 2.750000e-01 -1.854793e-01 112 1.001500e-09 2.000000e+00 3.000000e-01 -1.739954e-01 Index time V(1) V(2) V(3) -------------------------------------------------------------------------------- 113 1.001531e-09 2.000000e+00 3.062500e-01 -1.711110e-01 114 1.001594e-09 2.000000e+00 3.187500e-01 -1.652804e-01 115 1.001719e-09 2.000000e+00 3.437500e-01 -1.533777e-01 116 1.001750e-09 2.000000e+00 3.500000e-01 -1.503734e-01 117 1.001813e-09 2.000000e+00 3.625000e-01 -1.443194e-01 118 1.001937e-09 2.000000e+00 3.875000e-01 -1.320334e-01 119 1.001969e-09 2.000000e+00 3.937500e-01 -1.289378e-01 120 1.002031e-09 2.000000e+00 4.062500e-01 -1.227208e-01 121 1.002156e-09 2.000000e+00 4.312500e-01 -1.101840e-01 122 1.002406e-09 2.000000e+00 4.812500e-01 -8.488070e-02 123 1.002469e-09 2.000000e+00 4.937500e-01 -7.851234e-02 124 1.002594e-09 2.000000e+00 5.187500e-01 -6.582131e-02 125 1.002844e-09 2.000000e+00 5.687500e-01 -4.067242e-02 126 1.003344e-09 2.000000e+00 6.687500e-01 7.817310e-03 127 1.004344e-09 2.000000e+00 8.687500e-01 9.221666e-02 128 1.005000e-09 2.000000e+00 1.000000e+00 1.415557e-01 129 1.005200e-09 2.000000e+00 1.000000e+00 1.409346e-01 130 1.005600e-09 2.000000e+00 1.000000e+00 1.372951e-01 131 1.006400e-09 2.000000e+00 1.000000e+00 1.267527e-01 132 1.008000e-09 2.000000e+00 1.000000e+00 1.069739e-01 133 1.009887e-09 2.000000e+00 1.000000e+00 9.095597e-02 134 1.012840e-09 2.000000e+00 1.000000e+00 7.439795e-02 135 1.017563e-09 2.000000e+00 1.000000e+00 5.316238e-02 136 1.026126e-09 2.000000e+00 1.000000e+00 2.558201e-02 137 1.036126e-09 2.000000e+00 1.000000e+00 5.137378e-03 138 1.046126e-09 2.000000e+00 1.000000e+00 -6.539894e-03 139 1.056126e-09 2.000000e+00 1.000000e+00 -1.374962e-02 140 1.066126e-09 2.000000e+00 1.000000e+00 -1.764029e-02 141 1.076126e-09 2.000000e+00 1.000000e+00 -2.025724e-02 142 1.086126e-09 2.000000e+00 1.000000e+00 -2.146908e-02 143 1.096126e-09 2.000000e+00 1.000000e+00 -2.249602e-02 144 1.106126e-09 2.000000e+00 1.000000e+00 -2.279177e-02 145 1.116126e-09 2.000000e+00 1.000000e+00 -2.326223e-02 146 1.126126e-09 2.000000e+00 1.000000e+00 -2.324920e-02 147 1.136126e-09 2.000000e+00 1.000000e+00 -2.352163e-02 148 1.146126e-09 2.000000e+00 1.000000e+00 -2.340952e-02 149 1.156126e-09 2.000000e+00 1.000000e+00 -2.360743e-02 150 1.166126e-09 2.000000e+00 1.000000e+00 -2.346721e-02 151 1.176126e-09 2.000000e+00 1.000000e+00 -2.363342e-02 152 1.186126e-09 2.000000e+00 1.000000e+00 -2.348924e-02 153 1.196126e-09 2.000000e+00 1.000000e+00 -2.363901e-02 154 1.206126e-09 2.000000e+00 1.000000e+00 -2.349884e-02 155 1.216126e-09 2.000000e+00 1.000000e+00 -2.363783e-02 156 1.226126e-09 2.000000e+00 1.000000e+00 -2.350402e-02 157 1.236126e-09 2.000000e+00 1.000000e+00 -2.363451e-02 158 1.246126e-09 2.000000e+00 1.000000e+00 -2.350757e-02 159 1.256126e-09 2.000000e+00 1.000000e+00 -2.363075e-02 160 1.266126e-09 2.000000e+00 1.000000e+00 -2.351057e-02 161 1.276126e-09 2.000000e+00 1.000000e+00 -2.362707e-02 162 1.286126e-09 2.000000e+00 1.000000e+00 -2.351321e-02 163 1.296126e-09 2.000000e+00 1.000000e+00 -2.362354e-02 164 1.306126e-09 2.000000e+00 1.000000e+00 -2.351565e-02 165 1.316126e-09 2.000000e+00 1.000000e+00 -2.362025e-02 166 1.326126e-09 2.000000e+00 1.000000e+00 -2.351795e-02 167 1.336126e-09 2.000000e+00 1.000000e+00 -2.361721e-02 168 1.346126e-09 2.000000e+00 1.000000e+00 -2.352013e-02 169 1.356126e-09 2.000000e+00 1.000000e+00 -2.361438e-02 170 1.366126e-09 2.000000e+00 1.000000e+00 -2.352220e-02 Index time V(1) V(2) V(3) -------------------------------------------------------------------------------- 171 1.376126e-09 2.000000e+00 1.000000e+00 -2.361177e-02 172 1.386126e-09 2.000000e+00 1.000000e+00 -2.352416e-02 173 1.396126e-09 2.000000e+00 1.000000e+00 -2.360933e-02 174 1.406126e-09 2.000000e+00 1.000000e+00 -2.352602e-02 175 1.416126e-09 2.000000e+00 1.000000e+00 -2.360707e-02 176 1.426126e-09 2.000000e+00 1.000000e+00 -2.352778e-02 177 1.436126e-09 2.000000e+00 1.000000e+00 -2.360497e-02 178 1.446126e-09 2.000000e+00 1.000000e+00 -2.352945e-02 179 1.456126e-09 2.000000e+00 1.000000e+00 -2.360300e-02 180 1.466126e-09 2.000000e+00 1.000000e+00 -2.353104e-02 181 1.476126e-09 2.000000e+00 1.000000e+00 -2.360117e-02 182 1.486126e-09 2.000000e+00 1.000000e+00 -2.353255e-02 183 1.496126e-09 2.000000e+00 1.000000e+00 -2.359945e-02 184 1.506126e-09 2.000000e+00 1.000000e+00 -2.353398e-02 185 1.516126e-09 2.000000e+00 1.000000e+00 -2.359784e-02 186 1.526126e-09 2.000000e+00 1.000000e+00 -2.353533e-02 187 1.536126e-09 2.000000e+00 1.000000e+00 -2.359634e-02 188 1.546126e-09 2.000000e+00 1.000000e+00 -2.353662e-02 189 1.556126e-09 2.000000e+00 1.000000e+00 -2.359492e-02 190 1.566126e-09 2.000000e+00 1.000000e+00 -2.353785e-02 191 1.576126e-09 2.000000e+00 1.000000e+00 -2.359359e-02 192 1.586126e-09 2.000000e+00 1.000000e+00 -2.353906e-02 193 1.596126e-09 2.000000e+00 1.000000e+00 -2.359239e-02 194 1.606126e-09 2.000000e+00 1.000000e+00 -2.354012e-02 195 1.616126e-09 2.000000e+00 1.000000e+00 -2.359115e-02 196 1.626126e-09 2.000000e+00 1.000000e+00 -2.354117e-02 197 1.636126e-09 2.000000e+00 1.000000e+00 -2.359004e-02 198 1.646126e-09 2.000000e+00 1.000000e+00 -2.354217e-02 199 1.656126e-09 2.000000e+00 1.000000e+00 -2.358899e-02 200 1.666126e-09 2.000000e+00 1.000000e+00 -2.354313e-02 201 1.676126e-09 2.000000e+00 1.000000e+00 -2.358799e-02 202 1.686126e-09 2.000000e+00 1.000000e+00 -2.354403e-02 203 1.696126e-09 2.000000e+00 1.000000e+00 -2.358705e-02 204 1.706126e-09 2.000000e+00 1.000000e+00 -2.354490e-02 205 1.716126e-09 2.000000e+00 1.000000e+00 -2.358616e-02 206 1.726126e-09 2.000000e+00 1.000000e+00 -2.354573e-02 207 1.736126e-09 2.000000e+00 1.000000e+00 -2.358531e-02 208 1.746126e-09 2.000000e+00 1.000000e+00 -2.354651e-02 209 1.756126e-09 2.000000e+00 1.000000e+00 -2.358451e-02 210 1.766126e-09 2.000000e+00 1.000000e+00 -2.354726e-02 211 1.776126e-09 2.000000e+00 1.000000e+00 -2.358374e-02 212 1.786126e-09 2.000000e+00 1.000000e+00 -2.354798e-02 213 1.796126e-09 2.000000e+00 1.000000e+00 -2.358302e-02 214 1.806126e-09 2.000000e+00 1.000000e+00 -2.354866e-02 215 1.816126e-09 2.000000e+00 1.000000e+00 -2.358232e-02 216 1.826126e-09 2.000000e+00 1.000000e+00 -2.354932e-02 217 1.836126e-09 2.000000e+00 1.000000e+00 -2.358167e-02 218 1.846126e-09 2.000000e+00 1.000000e+00 -2.354994e-02 219 1.856126e-09 2.000000e+00 1.000000e+00 -2.358104e-02 220 1.866126e-09 2.000000e+00 1.000000e+00 -2.355054e-02 221 1.876126e-09 2.000000e+00 1.000000e+00 -2.358044e-02 222 1.886126e-09 2.000000e+00 1.000000e+00 -2.355111e-02 223 1.896126e-09 2.000000e+00 1.000000e+00 -2.357987e-02 224 1.906126e-09 2.000000e+00 1.000000e+00 -2.355166e-02 225 1.916126e-09 2.000000e+00 1.000000e+00 -2.357932e-02 226 1.926126e-09 2.000000e+00 1.000000e+00 -2.355218e-02 227 1.936126e-09 2.000000e+00 1.000000e+00 -2.357880e-02 228 1.946126e-09 2.000000e+00 1.000000e+00 -2.355268e-02 Index time V(1) V(2) V(3) -------------------------------------------------------------------------------- 229 1.956126e-09 2.000000e+00 1.000000e+00 -2.357830e-02 230 1.966126e-09 2.000000e+00 1.000000e+00 -2.355316e-02 231 1.976126e-09 2.000000e+00 1.000000e+00 -2.357782e-02 232 1.986126e-09 2.000000e+00 1.000000e+00 -2.355363e-02 233 1.996126e-09 2.000000e+00 1.000000e+00 -2.357736e-02 234 2.000000e-09 2.000000e+00 1.000000e+00 -2.355441e-02 235 2.001000e-09 2.000000e+00 1.000000e+00 -2.356510e-02 236 2.003000e-09 2.000000e+00 1.000000e+00 -2.356606e-02 237 2.007000e-09 2.000000e+00 1.000000e+00 -2.356518e-02 238 2.015000e-09 2.000000e+00 1.000000e+00 -2.356602e-02 239 2.025000e-09 2.000000e+00 1.000000e+00 -2.356519e-02 240 2.035000e-09 2.000000e+00 1.000000e+00 -2.356600e-02 241 2.045000e-09 2.000000e+00 1.000000e+00 -2.356521e-02 242 2.055000e-09 2.000000e+00 1.000000e+00 -2.356599e-02 243 2.065000e-09 2.000000e+00 1.000000e+00 -2.356522e-02 244 2.075000e-09 2.000000e+00 1.000000e+00 -2.356597e-02 245 2.085000e-09 2.000000e+00 1.000000e+00 -2.356523e-02 246 2.095000e-09 2.000000e+00 1.000000e+00 -2.356595e-02 247 2.105000e-09 2.000000e+00 1.000000e+00 -2.356525e-02 248 2.115000e-09 2.000000e+00 1.000000e+00 -2.356594e-02 249 2.125000e-09 2.000000e+00 1.000000e+00 -2.356526e-02 250 2.135000e-09 2.000000e+00 1.000000e+00 -2.356593e-02 251 2.145000e-09 2.000000e+00 1.000000e+00 -2.356527e-02 252 2.155000e-09 2.000000e+00 1.000000e+00 -2.356591e-02 253 2.165000e-09 2.000000e+00 1.000000e+00 -2.356528e-02 254 2.175000e-09 2.000000e+00 1.000000e+00 -2.356590e-02 255 2.185000e-09 2.000000e+00 1.000000e+00 -2.356529e-02 256 2.195000e-09 2.000000e+00 1.000000e+00 -2.356589e-02 257 2.205000e-09 2.000000e+00 1.000000e+00 -2.356530e-02 258 2.215000e-09 2.000000e+00 1.000000e+00 -2.356588e-02 259 2.225000e-09 2.000000e+00 1.000000e+00 -2.356531e-02 260 2.235000e-09 2.000000e+00 1.000000e+00 -2.356586e-02 261 2.245000e-09 2.000000e+00 1.000000e+00 -2.356532e-02 262 2.255000e-09 2.000000e+00 1.000000e+00 -2.356585e-02 263 2.265000e-09 2.000000e+00 1.000000e+00 -2.356533e-02 264 2.275000e-09 2.000000e+00 1.000000e+00 -2.356584e-02 265 2.285000e-09 2.000000e+00 1.000000e+00 -2.356534e-02 266 2.295000e-09 2.000000e+00 1.000000e+00 -2.356583e-02 267 2.305000e-09 2.000000e+00 1.000000e+00 -2.356535e-02 268 2.315000e-09 2.000000e+00 1.000000e+00 -2.356583e-02 269 2.325000e-09 2.000000e+00 1.000000e+00 -2.356536e-02 270 2.335000e-09 2.000000e+00 1.000000e+00 -2.356582e-02 271 2.345000e-09 2.000000e+00 1.000000e+00 -2.356537e-02 272 2.355000e-09 2.000000e+00 1.000000e+00 -2.356581e-02 273 2.365000e-09 2.000000e+00 1.000000e+00 -2.356537e-02 274 2.375000e-09 2.000000e+00 1.000000e+00 -2.356580e-02 275 2.385000e-09 2.000000e+00 1.000000e+00 -2.356538e-02 276 2.395000e-09 2.000000e+00 1.000000e+00 -2.356579e-02 277 2.405000e-09 2.000000e+00 1.000000e+00 -2.356539e-02 278 2.415000e-09 2.000000e+00 1.000000e+00 -2.356578e-02 279 2.425000e-09 2.000000e+00 1.000000e+00 -2.356540e-02 280 2.435000e-09 2.000000e+00 1.000000e+00 -2.356578e-02 281 2.445000e-09 2.000000e+00 1.000000e+00 -2.356540e-02 282 2.455000e-09 2.000000e+00 1.000000e+00 -2.356577e-02 283 2.465000e-09 2.000000e+00 1.000000e+00 -2.356541e-02 284 2.475000e-09 2.000000e+00 1.000000e+00 -2.356576e-02 285 2.485000e-09 2.000000e+00 1.000000e+00 -2.356542e-02 286 2.495000e-09 2.000000e+00 1.000000e+00 -2.356576e-02 Index time V(1) V(2) V(3) -------------------------------------------------------------------------------- 287 2.505000e-09 2.000000e+00 1.000000e+00 -2.356542e-02 288 2.515000e-09 2.000000e+00 1.000000e+00 -2.356575e-02 289 2.525000e-09 2.000000e+00 1.000000e+00 -2.356543e-02 290 2.535000e-09 2.000000e+00 1.000000e+00 -2.356575e-02 291 2.545000e-09 2.000000e+00 1.000000e+00 -2.356543e-02 292 2.555000e-09 2.000000e+00 1.000000e+00 -2.356574e-02 293 2.565000e-09 2.000000e+00 1.000000e+00 -2.356544e-02 294 2.575000e-09 2.000000e+00 1.000000e+00 -2.356574e-02 295 2.585000e-09 2.000000e+00 1.000000e+00 -2.356544e-02 296 2.595000e-09 2.000000e+00 1.000000e+00 -2.356573e-02 297 2.605000e-09 2.000000e+00 1.000000e+00 -2.356545e-02 298 2.615000e-09 2.000000e+00 1.000000e+00 -2.356572e-02 299 2.625000e-09 2.000000e+00 1.000000e+00 -2.356545e-02 300 2.635000e-09 2.000000e+00 1.000000e+00 -2.356572e-02 301 2.645000e-09 2.000000e+00 1.000000e+00 -2.356546e-02 302 2.655000e-09 2.000000e+00 1.000000e+00 -2.356572e-02 303 2.665000e-09 2.000000e+00 1.000000e+00 -2.356546e-02 304 2.675000e-09 2.000000e+00 1.000000e+00 -2.356571e-02 305 2.685000e-09 2.000000e+00 1.000000e+00 -2.356547e-02 306 2.695000e-09 2.000000e+00 1.000000e+00 -2.356571e-02 307 2.705000e-09 2.000000e+00 1.000000e+00 -2.356547e-02 308 2.715000e-09 2.000000e+00 1.000000e+00 -2.356570e-02 309 2.725000e-09 2.000000e+00 1.000000e+00 -2.356548e-02 310 2.735000e-09 2.000000e+00 1.000000e+00 -2.356570e-02 311 2.745000e-09 2.000000e+00 1.000000e+00 -2.356548e-02 312 2.755000e-09 2.000000e+00 1.000000e+00 -2.356569e-02 313 2.765000e-09 2.000000e+00 1.000000e+00 -2.356548e-02 314 2.775000e-09 2.000000e+00 1.000000e+00 -2.356569e-02 315 2.785000e-09 2.000000e+00 1.000000e+00 -2.356549e-02 316 2.795000e-09 2.000000e+00 1.000000e+00 -2.356569e-02 317 2.805000e-09 2.000000e+00 1.000000e+00 -2.356549e-02 318 2.815000e-09 2.000000e+00 1.000000e+00 -2.356568e-02 319 2.825000e-09 2.000000e+00 1.000000e+00 -2.356549e-02 320 2.835000e-09 2.000000e+00 1.000000e+00 -2.356568e-02 321 2.845000e-09 2.000000e+00 1.000000e+00 -2.356550e-02 322 2.855000e-09 2.000000e+00 1.000000e+00 -2.356568e-02 323 2.865000e-09 2.000000e+00 1.000000e+00 -2.356550e-02 324 2.875000e-09 2.000000e+00 1.000000e+00 -2.356567e-02 325 2.885000e-09 2.000000e+00 1.000000e+00 -2.356550e-02 326 2.895000e-09 2.000000e+00 1.000000e+00 -2.356567e-02 327 2.905000e-09 2.000000e+00 1.000000e+00 -2.356551e-02 328 2.915000e-09 2.000000e+00 1.000000e+00 -2.356567e-02 329 2.925000e-09 2.000000e+00 1.000000e+00 -2.356551e-02 330 2.935000e-09 2.000000e+00 1.000000e+00 -2.356567e-02 331 2.945000e-09 2.000000e+00 1.000000e+00 -2.356551e-02 332 2.955000e-09 2.000000e+00 1.000000e+00 -2.356566e-02 333 2.965000e-09 2.000000e+00 1.000000e+00 -2.356551e-02 334 2.975000e-09 2.000000e+00 1.000000e+00 -2.356566e-02 335 2.985000e-09 2.000000e+00 1.000000e+00 -2.356552e-02 336 2.995000e-09 2.000000e+00 1.000000e+00 -2.356566e-02 337 3.000000e-09 2.000000e+00 1.000000e+00 -2.356552e-02 DCFL inverter circuit -------------------------------------------------------------------------------- Index time V(4) time vdd#branch -------------------------------------------------------------------------------- 0 0.000000e+00 -2.755353e-01 0.000000e+00 1.319715e-09 1 1.000000e-13 -2.755352e-01 1.000000e-13 1.398994e-09 2 2.000000e-13 -2.755352e-01 2.000000e-13 1.472862e-09 3 4.000000e-13 -2.755351e-01 4.000000e-13 1.583757e-09 4 8.000000e-13 -2.755350e-01 8.000000e-13 1.642401e-09 5 1.600000e-12 -2.755347e-01 1.600000e-12 1.628870e-09 6 3.200000e-12 -2.755340e-01 3.200000e-12 1.632494e-09 7 6.400000e-12 -2.755328e-01 6.400000e-12 1.619913e-09 8 1.280000e-11 -2.755305e-01 1.280000e-11 1.612052e-09 9 2.280000e-11 -2.755270e-01 2.280000e-11 1.587462e-09 10 3.280000e-11 -2.755238e-01 3.280000e-11 1.573886e-09 11 4.280000e-11 -2.755208e-01 4.280000e-11 1.552466e-09 12 5.280000e-11 -2.755181e-01 5.280000e-11 1.541194e-09 13 6.280000e-11 -2.755155e-01 6.280000e-11 1.522078e-09 14 7.280000e-11 -2.755131e-01 7.280000e-11 1.512499e-09 15 8.280000e-11 -2.755109e-01 8.280000e-11 1.495636e-09 16 9.280000e-11 -2.755089e-01 9.280000e-11 1.487528e-09 17 1.028000e-10 -2.755070e-01 1.028000e-10 1.472634e-09 18 1.128000e-10 -2.755052e-01 1.128000e-10 1.465795e-09 19 1.228000e-10 -2.755036e-01 1.228000e-10 1.452626e-09 20 1.328000e-10 -2.755021e-01 1.328000e-10 1.446881e-09 21 1.428000e-10 -2.755007e-01 1.428000e-10 1.435224e-09 22 1.528000e-10 -2.754993e-01 1.528000e-10 1.430420e-09 23 1.628000e-10 -2.754981e-01 1.628000e-10 1.420089e-09 24 1.728000e-10 -2.754970e-01 1.728000e-10 1.416095e-09 25 1.828000e-10 -2.754960e-01 1.828000e-10 1.406927e-09 26 1.928000e-10 -2.754950e-01 1.928000e-10 1.403629e-09 27 2.028000e-10 -2.754941e-01 2.028000e-10 1.395482e-09 28 2.128000e-10 -2.754932e-01 2.128000e-10 1.392780e-09 29 2.228000e-10 -2.754925e-01 2.228000e-10 1.385530e-09 30 2.328000e-10 -2.754917e-01 2.328000e-10 1.383338e-09 31 2.428000e-10 -2.754911e-01 2.428000e-10 1.376878e-09 32 2.528000e-10 -2.754904e-01 2.528000e-10 1.375122e-09 33 2.628000e-10 -2.754899e-01 2.628000e-10 1.369355e-09 34 2.728000e-10 -2.754893e-01 2.728000e-10 1.367972e-09 35 2.828000e-10 -2.754888e-01 2.828000e-10 1.362816e-09 36 2.928000e-10 -2.754884e-01 2.928000e-10 1.361750e-09 37 3.028000e-10 -2.754879e-01 3.028000e-10 1.357133e-09 38 3.128000e-10 -2.754875e-01 3.128000e-10 1.356335e-09 39 3.228000e-10 -2.754872e-01 3.228000e-10 1.352193e-09 40 3.328000e-10 -2.754868e-01 3.328000e-10 1.351622e-09 41 3.428000e-10 -2.754865e-01 3.428000e-10 1.347900e-09 42 3.528000e-10 -2.754862e-01 3.528000e-10 1.347521e-09 43 3.628000e-10 -2.754859e-01 3.628000e-10 1.344169e-09 44 3.728000e-10 -2.754857e-01 3.728000e-10 1.343952e-09 45 3.828000e-10 -2.754855e-01 3.828000e-10 1.340928e-09 46 3.928000e-10 -2.754852e-01 3.928000e-10 1.340845e-09 47 4.028000e-10 -2.754850e-01 4.028000e-10 1.338112e-09 48 4.128000e-10 -2.754848e-01 4.128000e-10 1.338141e-09 49 4.228000e-10 -2.754847e-01 4.228000e-10 1.335666e-09 50 4.328000e-10 -2.754845e-01 4.328000e-10 1.335788e-09 51 4.428000e-10 -2.754844e-01 4.428000e-10 1.333541e-09 52 4.528000e-10 -2.754842e-01 4.528000e-10 1.333739e-09 53 4.628000e-10 -2.754841e-01 4.628000e-10 1.331697e-09 54 4.728000e-10 -2.754840e-01 4.728000e-10 1.331955e-09 Index time V(4) time vdd#branch -------------------------------------------------------------------------------- 55 4.828000e-10 -2.754839e-01 4.828000e-10 1.330095e-09 56 4.928000e-10 -2.754837e-01 4.928000e-10 1.330403e-09 57 5.028000e-10 -2.754837e-01 5.028000e-10 1.328704e-09 58 5.128000e-10 -2.754836e-01 5.128000e-10 1.329051e-09 59 5.228000e-10 -2.754835e-01 5.228000e-10 1.327497e-09 60 5.328000e-10 -2.754834e-01 5.328000e-10 1.327874e-09 61 5.428000e-10 -2.754833e-01 5.428000e-10 1.326449e-09 62 5.528000e-10 -2.754833e-01 5.528000e-10 1.326848e-09 63 5.628000e-10 -2.754832e-01 5.628000e-10 1.325540e-09 64 5.728000e-10 -2.754831e-01 5.728000e-10 1.325956e-09 65 5.828000e-10 -2.754831e-01 5.828000e-10 1.324752e-09 66 5.928000e-10 -2.754830e-01 5.928000e-10 1.325178e-09 67 6.028000e-10 -2.754830e-01 6.028000e-10 1.324068e-09 68 6.128000e-10 -2.754830e-01 6.128000e-10 1.324500e-09 69 6.228000e-10 -2.754829e-01 6.228000e-10 1.323475e-09 70 6.328000e-10 -2.754829e-01 6.328000e-10 1.323909e-09 71 6.428000e-10 -2.754828e-01 6.428000e-10 1.322961e-09 72 6.528000e-10 -2.754828e-01 6.528000e-10 1.323395e-09 73 6.628000e-10 -2.754828e-01 6.628000e-10 1.322516e-09 74 6.728000e-10 -2.754828e-01 6.728000e-10 1.322946e-09 75 6.828000e-10 -2.754827e-01 6.828000e-10 1.322130e-09 76 6.928000e-10 -2.754827e-01 6.928000e-10 1.322555e-09 77 7.028000e-10 -2.754827e-01 7.028000e-10 1.321796e-09 78 7.128000e-10 -2.754827e-01 7.128000e-10 1.322214e-09 79 7.228000e-10 -2.754826e-01 7.228000e-10 1.321507e-09 80 7.328000e-10 -2.754826e-01 7.328000e-10 1.321916e-09 81 7.428000e-10 -2.754826e-01 7.428000e-10 1.321257e-09 82 7.528000e-10 -2.754826e-01 7.528000e-10 1.321656e-09 83 7.628000e-10 -2.754826e-01 7.628000e-10 1.321041e-09 84 7.728000e-10 -2.754826e-01 7.728000e-10 1.321429e-09 85 7.828000e-10 -2.754826e-01 7.828000e-10 1.320854e-09 86 7.928000e-10 -2.754825e-01 7.928000e-10 1.321231e-09 87 8.028000e-10 -2.754825e-01 8.028000e-10 1.320692e-09 88 8.128000e-10 -2.754825e-01 8.128000e-10 1.321058e-09 89 8.228000e-10 -2.754825e-01 8.228000e-10 1.320553e-09 90 8.328000e-10 -2.754825e-01 8.328000e-10 1.320906e-09 91 8.428000e-10 -2.754825e-01 8.428000e-10 1.320433e-09 92 8.528000e-10 -2.754825e-01 8.528000e-10 1.320774e-09 93 8.628000e-10 -2.754825e-01 8.628000e-10 1.320329e-09 94 8.728000e-10 -2.754825e-01 8.728000e-10 1.320658e-09 95 8.828000e-10 -2.754825e-01 8.828000e-10 1.320240e-09 96 8.928000e-10 -2.754825e-01 8.928000e-10 1.320557e-09 97 9.028000e-10 -2.754825e-01 9.028000e-10 1.320163e-09 98 9.128000e-10 -2.754825e-01 9.128000e-10 1.320468e-09 99 9.228000e-10 -2.754825e-01 9.228000e-10 1.319890e-09 100 9.328000e-10 -2.754825e-01 9.328000e-10 1.320568e-09 101 9.428000e-10 -2.754825e-01 9.428000e-10 1.319097e-09 102 9.528000e-10 -2.754825e-01 9.528000e-10 1.320869e-09 103 9.628000e-10 -2.754824e-01 9.628000e-10 1.319607e-09 104 9.728000e-10 -2.754824e-01 9.728000e-10 1.320794e-09 105 9.828000e-10 -2.754824e-01 9.828000e-10 1.319581e-09 106 9.928000e-10 -2.754824e-01 9.928000e-10 1.320591e-09 107 1.000000e-09 -2.754824e-01 1.000000e-09 1.319708e-09 108 1.000500e-09 -2.739095e-01 1.000500e-09 3.095522e-04 109 1.000625e-09 -2.735376e-01 1.000625e-09 3.971348e-04 110 1.000875e-09 -2.723278e-01 1.000875e-09 6.385589e-04 111 1.001375e-09 -2.709220e-01 1.001375e-09 1.164845e-03 112 1.001500e-09 -2.708076e-01 1.001500e-09 1.274812e-03 Index time V(4) time vdd#branch -------------------------------------------------------------------------------- 113 1.001531e-09 -2.707664e-01 1.001531e-09 1.302291e-03 114 1.001594e-09 -2.706515e-01 1.001594e-09 1.357921e-03 115 1.001719e-09 -2.703571e-01 1.001719e-09 1.468891e-03 116 1.001750e-09 -2.702928e-01 1.001750e-09 1.495624e-03 117 1.001813e-09 -2.701469e-01 1.001813e-09 1.549266e-03 118 1.001937e-09 -2.698314e-01 1.001937e-09 1.654781e-03 119 1.001969e-09 -2.697644e-01 1.001969e-09 1.680101e-03 120 1.002031e-09 -2.696145e-01 1.002031e-09 1.730627e-03 121 1.002156e-09 -2.692886e-01 1.002156e-09 1.829045e-03 122 1.002406e-09 -2.685602e-01 1.002406e-09 2.012921e-03 123 1.002469e-09 -2.684261e-01 1.002469e-09 2.054515e-03 124 1.002594e-09 -2.680546e-01 1.002594e-09 2.136091e-03 125 1.002844e-09 -2.670856e-01 1.002844e-09 2.284591e-03 126 1.003344e-09 -2.640150e-01 1.003344e-09 2.522172e-03 127 1.004344e-09 -2.505700e-01 1.004344e-09 2.788187e-03 128 1.005000e-09 -2.398001e-01 1.005000e-09 2.845742e-03 129 1.005200e-09 -2.435709e-01 1.005200e-09 2.517217e-03 130 1.005600e-09 -2.503760e-01 1.005600e-09 1.898151e-03 131 1.006400e-09 -2.575077e-01 1.006400e-09 1.027876e-03 132 1.008000e-09 -2.596029e-01 1.008000e-09 2.176104e-04 133 1.009887e-09 -2.598183e-01 1.009887e-09 -4.852503e-05 134 1.012840e-09 -2.611107e-01 1.012840e-09 -9.904073e-05 135 1.017563e-09 -2.622923e-01 1.017563e-09 -6.632878e-05 136 1.026126e-09 -2.640637e-01 1.026126e-09 -2.069864e-05 137 1.036126e-09 -2.653206e-01 1.036126e-09 1.038803e-05 138 1.046126e-09 -2.664202e-01 1.046126e-09 3.174502e-05 139 1.056126e-09 -2.671545e-01 1.056126e-09 4.089804e-05 140 1.066126e-09 -2.679147e-01 1.066126e-09 4.979284e-05 141 1.076126e-09 -2.684470e-01 1.076126e-09 5.137632e-05 142 1.086126e-09 -2.690414e-01 1.086126e-09 5.600302e-05 143 1.096126e-09 -2.694692e-01 1.096126e-09 5.499002e-05 144 1.106126e-09 -2.699589e-01 1.106126e-09 5.813362e-05 145 1.116126e-09 -2.703190e-01 1.116126e-09 5.623570e-05 146 1.126126e-09 -2.707309e-01 1.126126e-09 5.885612e-05 147 1.136126e-09 -2.710405e-01 1.136126e-09 5.667141e-05 148 1.146126e-09 -2.713897e-01 1.146126e-09 5.909547e-05 149 1.156126e-09 -2.716588e-01 1.156126e-09 5.683003e-05 150 1.166126e-09 -2.719551e-01 1.166126e-09 5.916579e-05 151 1.176126e-09 -2.721903e-01 1.176126e-09 5.689412e-05 152 1.186126e-09 -2.724415e-01 1.186126e-09 5.917677e-05 153 1.196126e-09 -2.726480e-01 1.196126e-09 5.692677e-05 154 1.206126e-09 -2.728603e-01 1.206126e-09 5.916653e-05 155 1.216126e-09 -2.730423e-01 1.216126e-09 5.694958e-05 156 1.226126e-09 -2.732210e-01 1.226126e-09 5.914830e-05 157 1.236126e-09 -2.733821e-01 1.236126e-09 5.696973e-05 158 1.246126e-09 -2.735317e-01 1.246126e-09 5.912698e-05 159 1.256126e-09 -2.736749e-01 1.256126e-09 5.698989e-05 160 1.266126e-09 -2.737994e-01 1.266126e-09 5.910456e-05 161 1.276126e-09 -2.739270e-01 1.276126e-09 5.701050e-05 162 1.286126e-09 -2.740299e-01 1.286126e-09 5.908110e-05 163 1.296126e-09 -2.741443e-01 1.296126e-09 5.703173e-05 164 1.306126e-09 -2.742285e-01 1.306126e-09 5.905728e-05 165 1.316126e-09 -2.743315e-01 1.316126e-09 5.705350e-05 166 1.326126e-09 -2.743995e-01 1.326126e-09 5.903322e-05 167 1.336126e-09 -2.744927e-01 1.336126e-09 5.707572e-05 168 1.346126e-09 -2.745469e-01 1.346126e-09 5.900905e-05 169 1.356126e-09 -2.746317e-01 1.356126e-09 5.709827e-05 170 1.366126e-09 -2.746739e-01 1.366126e-09 5.898485e-05 Index time V(4) time vdd#branch -------------------------------------------------------------------------------- 171 1.376126e-09 -2.747514e-01 1.376126e-09 5.712103e-05 172 1.386126e-09 -2.747833e-01 1.386126e-09 5.896070e-05 173 1.396126e-09 -2.748544e-01 1.396126e-09 5.714390e-05 174 1.406126e-09 -2.748776e-01 1.406126e-09 5.893666e-05 175 1.416126e-09 -2.749432e-01 1.416126e-09 5.716680e-05 176 1.426126e-09 -2.749588e-01 1.426126e-09 5.891279e-05 177 1.436126e-09 -2.750197e-01 1.436126e-09 5.718964e-05 178 1.446126e-09 -2.750289e-01 1.446126e-09 5.888915e-05 179 1.456126e-09 -2.750855e-01 1.456126e-09 5.721237e-05 180 1.466126e-09 -2.750892e-01 1.466126e-09 5.886578e-05 181 1.476126e-09 -2.751422e-01 1.476126e-09 5.723491e-05 182 1.486126e-09 -2.751413e-01 1.486126e-09 5.884271e-05 183 1.496126e-09 -2.751910e-01 1.496126e-09 5.725723e-05 184 1.506126e-09 -2.751861e-01 1.506126e-09 5.881998e-05 185 1.516126e-09 -2.752330e-01 1.516126e-09 5.727928e-05 186 1.526126e-09 -2.752248e-01 1.526126e-09 5.879762e-05 187 1.536126e-09 -2.752692e-01 1.536126e-09 5.730102e-05 188 1.546126e-09 -2.752582e-01 1.546126e-09 5.877564e-05 189 1.556126e-09 -2.753003e-01 1.556126e-09 5.732241e-05 190 1.566126e-09 -2.752870e-01 1.566126e-09 5.875408e-05 191 1.576126e-09 -2.753270e-01 1.576126e-09 5.734344e-05 192 1.586126e-09 -2.753118e-01 1.586126e-09 5.873318e-05 193 1.596126e-09 -2.753500e-01 1.596126e-09 5.736417e-05 194 1.606126e-09 -2.753332e-01 1.606126e-09 5.871214e-05 195 1.616126e-09 -2.753698e-01 1.616126e-09 5.738436e-05 196 1.626126e-09 -2.753517e-01 1.626126e-09 5.869197e-05 197 1.636126e-09 -2.753868e-01 1.636126e-09 5.740415e-05 198 1.646126e-09 -2.753677e-01 1.646126e-09 5.867219e-05 199 1.656126e-09 -2.754014e-01 1.656126e-09 5.742353e-05 200 1.666126e-09 -2.753815e-01 1.666126e-09 5.865286e-05 201 1.676126e-09 -2.754139e-01 1.676126e-09 5.744248e-05 202 1.686126e-09 -2.753935e-01 1.686126e-09 5.863400e-05 203 1.696126e-09 -2.754247e-01 1.696126e-09 5.746098e-05 204 1.706126e-09 -2.754038e-01 1.706126e-09 5.861560e-05 205 1.716126e-09 -2.754339e-01 1.716126e-09 5.747903e-05 206 1.726126e-09 -2.754128e-01 1.726126e-09 5.859766e-05 207 1.736126e-09 -2.754418e-01 1.736126e-09 5.749663e-05 208 1.746126e-09 -2.754205e-01 1.746126e-09 5.858019e-05 209 1.756126e-09 -2.754485e-01 1.756126e-09 5.751379e-05 210 1.766126e-09 -2.754273e-01 1.766126e-09 5.856319e-05 211 1.776126e-09 -2.754543e-01 1.776126e-09 5.753049e-05 212 1.786126e-09 -2.754331e-01 1.786126e-09 5.854664e-05 213 1.796126e-09 -2.754593e-01 1.796126e-09 5.754675e-05 214 1.806126e-09 -2.754382e-01 1.806126e-09 5.853055e-05 215 1.816126e-09 -2.754635e-01 1.816126e-09 5.756256e-05 216 1.826126e-09 -2.754426e-01 1.826126e-09 5.851490e-05 217 1.836126e-09 -2.754671e-01 1.836126e-09 5.757794e-05 218 1.846126e-09 -2.754464e-01 1.846126e-09 5.849970e-05 219 1.856126e-09 -2.754701e-01 1.856126e-09 5.759289e-05 220 1.866126e-09 -2.754497e-01 1.866126e-09 5.848493e-05 221 1.876126e-09 -2.754727e-01 1.876126e-09 5.760740e-05 222 1.886126e-09 -2.754527e-01 1.886126e-09 5.847059e-05 223 1.896126e-09 -2.754749e-01 1.896126e-09 5.762150e-05 224 1.906126e-09 -2.754552e-01 1.906126e-09 5.845667e-05 225 1.916126e-09 -2.754768e-01 1.916126e-09 5.763519e-05 226 1.926126e-09 -2.754574e-01 1.926126e-09 5.844316e-05 227 1.936126e-09 -2.754784e-01 1.936126e-09 5.764847e-05 228 1.946126e-09 -2.754594e-01 1.946126e-09 5.843006e-05 Index time V(4) time vdd#branch -------------------------------------------------------------------------------- 229 1.956126e-09 -2.754797e-01 1.956126e-09 5.766136e-05 230 1.966126e-09 -2.754611e-01 1.966126e-09 5.841735e-05 231 1.976126e-09 -2.754808e-01 1.976126e-09 5.767386e-05 232 1.986126e-09 -2.754627e-01 1.986126e-09 5.840503e-05 233 1.996126e-09 -2.754817e-01 1.996126e-09 5.768598e-05 234 2.000000e-09 -2.754639e-01 2.000000e-09 5.838390e-05 235 2.001000e-09 -2.754725e-01 2.001000e-09 5.805627e-05 236 2.003000e-09 -2.754732e-01 2.003000e-09 5.802976e-05 237 2.007000e-09 -2.754728e-01 2.007000e-09 5.805472e-05 238 2.015000e-09 -2.754737e-01 2.015000e-09 5.803051e-05 239 2.025000e-09 -2.754736e-01 2.025000e-09 5.805427e-05 240 2.035000e-09 -2.754746e-01 2.035000e-09 5.803088e-05 241 2.045000e-09 -2.754744e-01 2.045000e-09 5.805389e-05 242 2.055000e-09 -2.754754e-01 2.055000e-09 5.803125e-05 243 2.065000e-09 -2.754751e-01 2.065000e-09 5.805352e-05 244 2.075000e-09 -2.754760e-01 2.075000e-09 5.803161e-05 245 2.085000e-09 -2.754758e-01 2.085000e-09 5.805316e-05 246 2.095000e-09 -2.754765e-01 2.095000e-09 5.803196e-05 247 2.105000e-09 -2.754763e-01 2.105000e-09 5.805281e-05 248 2.115000e-09 -2.754770e-01 2.115000e-09 5.803230e-05 249 2.125000e-09 -2.754767e-01 2.125000e-09 5.805247e-05 250 2.135000e-09 -2.754774e-01 2.135000e-09 5.803263e-05 251 2.145000e-09 -2.754771e-01 2.145000e-09 5.805214e-05 252 2.155000e-09 -2.754778e-01 2.155000e-09 5.803294e-05 253 2.165000e-09 -2.754775e-01 2.165000e-09 5.805182e-05 254 2.175000e-09 -2.754781e-01 2.175000e-09 5.803325e-05 255 2.185000e-09 -2.754778e-01 2.185000e-09 5.805151e-05 256 2.195000e-09 -2.754783e-01 2.195000e-09 5.803355e-05 257 2.205000e-09 -2.754780e-01 2.205000e-09 5.805121e-05 258 2.215000e-09 -2.754786e-01 2.215000e-09 5.803385e-05 259 2.225000e-09 -2.754782e-01 2.225000e-09 5.805092e-05 260 2.235000e-09 -2.754788e-01 2.235000e-09 5.803413e-05 261 2.245000e-09 -2.754784e-01 2.245000e-09 5.805064e-05 262 2.255000e-09 -2.754789e-01 2.255000e-09 5.803440e-05 263 2.265000e-09 -2.754786e-01 2.265000e-09 5.805037e-05 264 2.275000e-09 -2.754791e-01 2.275000e-09 5.803467e-05 265 2.285000e-09 -2.754787e-01 2.285000e-09 5.805011e-05 266 2.295000e-09 -2.754792e-01 2.295000e-09 5.803493e-05 267 2.305000e-09 -2.754788e-01 2.305000e-09 5.804985e-05 268 2.315000e-09 -2.754793e-01 2.315000e-09 5.803518e-05 269 2.325000e-09 -2.754790e-01 2.325000e-09 5.804961e-05 270 2.335000e-09 -2.754794e-01 2.335000e-09 5.803542e-05 271 2.345000e-09 -2.754790e-01 2.345000e-09 5.804937e-05 272 2.355000e-09 -2.754795e-01 2.355000e-09 5.803565e-05 273 2.365000e-09 -2.754791e-01 2.365000e-09 5.804914e-05 274 2.375000e-09 -2.754795e-01 2.375000e-09 5.803588e-05 275 2.385000e-09 -2.754792e-01 2.385000e-09 5.804891e-05 276 2.395000e-09 -2.754796e-01 2.395000e-09 5.803610e-05 277 2.405000e-09 -2.754793e-01 2.405000e-09 5.804870e-05 278 2.415000e-09 -2.754796e-01 2.415000e-09 5.803631e-05 279 2.425000e-09 -2.754793e-01 2.425000e-09 5.804849e-05 280 2.435000e-09 -2.754797e-01 2.435000e-09 5.803652e-05 281 2.445000e-09 -2.754794e-01 2.445000e-09 5.804828e-05 282 2.455000e-09 -2.754797e-01 2.455000e-09 5.803671e-05 283 2.465000e-09 -2.754794e-01 2.465000e-09 5.804809e-05 284 2.475000e-09 -2.754797e-01 2.475000e-09 5.803691e-05 285 2.485000e-09 -2.754794e-01 2.485000e-09 5.804790e-05 286 2.495000e-09 -2.754797e-01 2.495000e-09 5.803709e-05 Index time V(4) time vdd#branch -------------------------------------------------------------------------------- 287 2.505000e-09 -2.754795e-01 2.505000e-09 5.804772e-05 288 2.515000e-09 -2.754798e-01 2.515000e-09 5.803727e-05 289 2.525000e-09 -2.754795e-01 2.525000e-09 5.804754e-05 290 2.535000e-09 -2.754798e-01 2.535000e-09 5.803745e-05 291 2.545000e-09 -2.754795e-01 2.545000e-09 5.804737e-05 292 2.555000e-09 -2.754798e-01 2.555000e-09 5.803762e-05 293 2.565000e-09 -2.754795e-01 2.565000e-09 5.804720e-05 294 2.575000e-09 -2.754798e-01 2.575000e-09 5.803778e-05 295 2.585000e-09 -2.754796e-01 2.585000e-09 5.804704e-05 296 2.595000e-09 -2.754798e-01 2.595000e-09 5.803794e-05 297 2.605000e-09 -2.754796e-01 2.605000e-09 5.804688e-05 298 2.615000e-09 -2.754798e-01 2.615000e-09 5.803809e-05 299 2.625000e-09 -2.754796e-01 2.625000e-09 5.804673e-05 300 2.635000e-09 -2.754798e-01 2.635000e-09 5.803824e-05 301 2.645000e-09 -2.754796e-01 2.645000e-09 5.804659e-05 302 2.655000e-09 -2.754798e-01 2.655000e-09 5.803838e-05 303 2.665000e-09 -2.754796e-01 2.665000e-09 5.804645e-05 304 2.675000e-09 -2.754798e-01 2.675000e-09 5.803852e-05 305 2.685000e-09 -2.754796e-01 2.685000e-09 5.804631e-05 306 2.695000e-09 -2.754798e-01 2.695000e-09 5.803865e-05 307 2.705000e-09 -2.754796e-01 2.705000e-09 5.804618e-05 308 2.715000e-09 -2.754798e-01 2.715000e-09 5.803878e-05 309 2.725000e-09 -2.754796e-01 2.725000e-09 5.804606e-05 310 2.735000e-09 -2.754798e-01 2.735000e-09 5.803890e-05 311 2.745000e-09 -2.754796e-01 2.745000e-09 5.804593e-05 312 2.755000e-09 -2.754798e-01 2.755000e-09 5.803902e-05 313 2.765000e-09 -2.754797e-01 2.765000e-09 5.804582e-05 314 2.775000e-09 -2.754798e-01 2.775000e-09 5.803914e-05 315 2.785000e-09 -2.754797e-01 2.785000e-09 5.804570e-05 316 2.795000e-09 -2.754798e-01 2.795000e-09 5.803925e-05 317 2.805000e-09 -2.754797e-01 2.805000e-09 5.804559e-05 318 2.815000e-09 -2.754798e-01 2.815000e-09 5.803936e-05 319 2.825000e-09 -2.754797e-01 2.825000e-09 5.804548e-05 320 2.835000e-09 -2.754798e-01 2.835000e-09 5.803946e-05 321 2.845000e-09 -2.754797e-01 2.845000e-09 5.804538e-05 322 2.855000e-09 -2.754798e-01 2.855000e-09 5.803957e-05 323 2.865000e-09 -2.754797e-01 2.865000e-09 5.804528e-05 324 2.875000e-09 -2.754798e-01 2.875000e-09 5.803966e-05 325 2.885000e-09 -2.754797e-01 2.885000e-09 5.804519e-05 326 2.895000e-09 -2.754798e-01 2.895000e-09 5.803976e-05 327 2.905000e-09 -2.754797e-01 2.905000e-09 5.804509e-05 328 2.915000e-09 -2.754798e-01 2.915000e-09 5.803985e-05 329 2.925000e-09 -2.754797e-01 2.925000e-09 5.804500e-05 330 2.935000e-09 -2.754798e-01 2.935000e-09 5.803994e-05 331 2.945000e-09 -2.754797e-01 2.945000e-09 5.804492e-05 332 2.955000e-09 -2.754798e-01 2.955000e-09 5.804002e-05 333 2.965000e-09 -2.754797e-01 2.965000e-09 5.804483e-05 334 2.975000e-09 -2.754798e-01 2.975000e-09 5.804011e-05 335 2.985000e-09 -2.754797e-01 2.985000e-09 5.804475e-05 336 2.995000e-09 -2.754798e-01 2.995000e-09 5.804019e-05 337 3.000000e-09 -2.754797e-01 3.000000e-09 5.804463e-05 DCFL inverter circuit -------------------------------------------------------------------------------- Index time vin#branch -------------------------------------------------------------------------------- 0 0.000000e+00 -3.597027e-11 1 1.000000e-13 -8.325604e-11 2 2.000000e-13 -1.295404e-10 3 4.000000e-13 -2.011381e-10 4 8.000000e-13 -2.417378e-10 5 1.600000e-12 -2.324317e-10 6 3.200000e-12 -2.351270e-10 7 6.400000e-12 -2.268303e-10 8 1.280000e-11 -2.220794e-10 9 2.280000e-11 -2.062019e-10 10 3.280000e-11 -1.977800e-10 11 4.280000e-11 -1.839484e-10 12 5.280000e-11 -1.769647e-10 13 6.280000e-11 -1.646257e-10 14 7.280000e-11 -1.586943e-10 15 8.280000e-11 -1.478124e-10 16 9.280000e-11 -1.427941e-10 17 1.028000e-10 -1.331872e-10 18 1.128000e-10 -1.289553e-10 19 1.228000e-10 -1.204663e-10 20 1.328000e-10 -1.169110e-10 21 1.428000e-10 -1.094023e-10 22 1.528000e-10 -1.064287e-10 23 1.628000e-10 -9.978034e-11 24 1.728000e-10 -9.730590e-11 25 1.828000e-10 -9.141294e-11 26 1.928000e-10 -8.936644e-11 27 2.028000e-10 -8.413712e-11 28 2.128000e-10 -8.245686e-11 29 2.228000e-10 -7.781099e-11 30 2.328000e-10 -7.644362e-11 31 2.428000e-10 -7.231102e-11 32 2.528000e-10 -7.121044e-11 33 2.628000e-10 -6.752974e-11 34 2.728000e-10 -6.665612e-11 35 2.828000e-10 -6.337359e-11 36 2.928000e-10 -6.269257e-11 37 3.028000e-10 -5.976118e-11 38 3.128000e-10 -5.924311e-11 39 3.228000e-10 -5.662166e-11 40 3.328000e-10 -5.624102e-11 41 3.428000e-10 -5.389340e-11 42 3.528000e-10 -5.362822e-11 43 3.628000e-10 -5.152278e-11 44 3.728000e-10 -5.135415e-11 45 3.828000e-10 -4.946314e-11 46 3.928000e-10 -4.937485e-11 47 4.028000e-10 -4.767390e-11 48 4.128000e-10 -4.765203e-11 49 4.228000e-10 -4.611974e-11 50 4.328000e-10 -4.615239e-11 51 4.428000e-10 -4.476995e-11 52 4.528000e-10 -4.484694e-11 53 4.628000e-10 -4.359783e-11 54 4.728000e-10 -4.371046e-11 Index time vin#branch -------------------------------------------------------------------------------- 55 4.828000e-10 -4.258012e-11 56 4.928000e-10 -4.272102e-11 57 5.028000e-10 -4.169664e-11 58 5.128000e-10 -4.185951e-11 59 5.228000e-10 -4.092979e-11 60 5.328000e-10 -4.110932e-11 61 5.428000e-10 -4.026431e-11 62 5.528000e-10 -4.045601e-11 63 5.628000e-10 -3.968690e-11 64 5.728000e-10 -3.988699e-11 65 5.828000e-10 -3.918601e-11 66 5.928000e-10 -3.939134e-11 67 6.028000e-10 -3.875159e-11 68 6.128000e-10 -3.895952e-11 69 6.228000e-10 -3.837491e-11 70 6.328000e-10 -3.858326e-11 71 6.428000e-10 -3.804837e-11 72 6.528000e-10 -3.825535e-11 73 6.628000e-10 -3.776539e-11 74 6.728000e-10 -3.796954e-11 75 6.828000e-10 -3.752022e-11 76 6.928000e-10 -3.772035e-11 77 7.028000e-10 -3.730787e-11 78 7.128000e-10 -3.750305e-11 79 7.228000e-10 -3.712402e-11 80 7.328000e-10 -3.731352e-11 81 7.428000e-10 -3.696490e-11 82 7.528000e-10 -3.714816e-11 83 7.628000e-10 -3.682724e-11 84 7.728000e-10 -3.700385e-11 85 7.828000e-10 -3.670820e-11 86 7.928000e-10 -3.687786e-11 87 8.028000e-10 -3.660531e-11 88 8.128000e-10 -3.676784e-11 89 8.228000e-10 -3.651642e-11 90 8.328000e-10 -3.667173e-11 91 8.428000e-10 -3.643967e-11 92 8.528000e-10 -3.658773e-11 93 8.628000e-10 -3.637344e-11 94 8.728000e-10 -3.651430e-11 95 8.828000e-10 -3.631634e-11 96 8.928000e-10 -3.645006e-11 97 9.028000e-10 -3.626713e-11 98 9.128000e-10 -3.639384e-11 99 9.228000e-10 -3.609357e-11 100 9.328000e-10 -3.645734e-11 101 9.428000e-10 -3.559005e-11 102 9.528000e-10 -3.664623e-11 103 9.628000e-10 -3.591700e-11 104 9.728000e-10 -3.659667e-11 105 9.828000e-10 -3.590208e-11 106 9.928000e-10 -3.646646e-11 107 1.000000e-09 -3.598353e-11 108 1.000500e-09 -4.345505e-04 109 1.000625e-09 -5.327530e-04 110 1.000875e-09 -8.037847e-04 111 1.001375e-09 -1.505213e-03 112 1.001500e-09 -1.646465e-03 Index time vin#branch -------------------------------------------------------------------------------- 113 1.001531e-09 -1.688694e-03 114 1.001594e-09 -1.797399e-03 115 1.001719e-09 -2.056880e-03 116 1.001750e-09 -2.114032e-03 117 1.001813e-09 -2.246406e-03 118 1.001937e-09 -2.540125e-03 119 1.001969e-09 -2.607493e-03 120 1.002031e-09 -2.753548e-03 121 1.002156e-09 -3.061848e-03 122 1.002406e-09 -3.695352e-03 123 1.002469e-09 -3.836624e-03 124 1.002594e-09 -4.130665e-03 125 1.002844e-09 -4.706260e-03 126 1.003344e-09 -5.726739e-03 127 1.004344e-09 -6.916053e-03 128 1.005000e-09 -6.968118e-03 129 1.005200e-09 -6.025083e-03 130 1.005600e-09 -4.361792e-03 131 1.006400e-09 -2.286552e-03 132 1.008000e-09 -6.589523e-04 133 1.009887e-09 -2.385717e-04 134 1.012840e-09 -1.034070e-04 135 1.017563e-09 -8.755799e-05 136 1.026126e-09 -5.144927e-05 137 1.036126e-09 -3.368199e-05 138 1.046126e-09 -1.655647e-05 139 1.056126e-09 -1.290848e-05 140 1.066126e-09 -4.548308e-06 141 1.076126e-09 -5.608596e-06 142 1.086126e-09 -4.492497e-07 143 1.096126e-09 -3.024494e-06 144 1.106126e-09 9.060477e-07 145 1.116126e-09 -2.068893e-06 146 1.126126e-09 1.311870e-06 147 1.136126e-09 -1.681604e-06 148 1.146126e-09 1.392680e-06 149 1.156126e-09 -1.491686e-06 150 1.166126e-09 1.366493e-06 151 1.176126e-09 -1.373713e-06 152 1.186126e-09 1.306788e-06 153 1.196126e-09 -1.284206e-06 154 1.206126e-09 1.238964e-06 155 1.216126e-09 -1.207904e-06 156 1.226126e-09 1.171671e-06 157 1.236126e-09 -1.139284e-06 158 1.246126e-09 1.107450e-06 159 1.256126e-09 -1.076324e-06 160 1.266126e-09 1.047040e-06 161 1.276126e-09 -1.017749e-06 162 1.286126e-09 9.907819e-07 163 1.296126e-09 -9.633922e-07 164 1.306126e-09 9.381953e-07 165 1.316126e-09 -9.126821e-07 166 1.326126e-09 8.890920e-07 167 1.336126e-09 -8.653325e-07 168 1.346126e-09 8.432159e-07 169 1.356126e-09 -8.210781e-07 170 1.366126e-09 8.003221e-07 Index time vin#branch -------------------------------------------------------------------------------- 171 1.376126e-09 -7.796778e-07 172 1.386126e-09 7.601816e-07 173 1.396126e-09 -7.409115e-07 174 1.406126e-09 7.225831e-07 175 1.416126e-09 -7.045777e-07 176 1.426126e-09 6.873329e-07 177 1.436126e-09 -6.704922e-07 178 1.446126e-09 6.542534e-07 179 1.456126e-09 -6.384864e-07 180 1.466126e-09 6.231820e-07 181 1.476126e-09 -6.084056e-07 182 1.486126e-09 5.939697e-07 183 1.496126e-09 -5.801082e-07 184 1.506126e-09 5.664800e-07 185 1.516126e-09 -5.534642e-07 186 1.526126e-09 5.405876e-07 187 1.536126e-09 -5.283544e-07 188 1.546126e-09 5.161778e-07 189 1.556126e-09 -5.046696e-07 190 1.566126e-09 4.931451e-07 191 1.576126e-09 -4.823093e-07 192 1.586126e-09 4.712313e-07 193 1.596126e-09 -4.611051e-07 194 1.606126e-09 4.509666e-07 195 1.616126e-09 -4.412598e-07 196 1.626126e-09 4.314023e-07 197 1.636126e-09 -4.223031e-07 198 1.646126e-09 4.129714e-07 199 1.656126e-09 -4.043781e-07 200 1.666126e-09 3.955148e-07 201 1.676126e-09 -3.873921e-07 202 1.686126e-09 3.789640e-07 203 1.696126e-09 -3.712787e-07 204 1.706126e-09 3.632572e-07 205 1.716126e-09 -3.559801e-07 206 1.726126e-09 3.483393e-07 207 1.736126e-09 -3.414439e-07 208 1.746126e-09 3.341603e-07 209 1.756126e-09 -3.276220e-07 210 1.766126e-09 3.206737e-07 211 1.776126e-09 -3.144701e-07 212 1.786126e-09 3.078370e-07 213 1.796126e-09 -3.019473e-07 214 1.806126e-09 2.956106e-07 215 1.816126e-09 -2.900156e-07 216 1.826126e-09 2.839580e-07 217 1.836126e-09 -2.786399e-07 218 1.846126e-09 2.728452e-07 219 1.856126e-09 -2.677878e-07 220 1.866126e-09 2.622410e-07 221 1.876126e-09 -2.574289e-07 222 1.886126e-09 2.521160e-07 223 1.896126e-09 -2.475352e-07 224 1.906126e-09 2.424433e-07 225 1.916126e-09 -2.380807e-07 226 1.926126e-09 2.331977e-07 227 1.936126e-09 -2.290411e-07 228 1.946126e-09 2.243557e-07 Index time vin#branch -------------------------------------------------------------------------------- 229 1.956126e-09 -2.203939e-07 230 1.966126e-09 2.158955e-07 231 1.976126e-09 -2.121179e-07 232 1.986126e-09 2.077968e-07 233 1.996126e-09 -2.041937e-07 234 2.000000e-09 1.941415e-07 235 2.001000e-09 8.564805e-09 236 2.003000e-09 -8.010890e-09 237 2.007000e-09 7.298733e-09 238 2.015000e-09 -7.436472e-09 239 2.025000e-09 6.975031e-09 240 2.035000e-09 -7.150308e-09 241 2.045000e-09 6.693180e-09 242 2.055000e-09 -6.876277e-09 243 2.065000e-09 6.425193e-09 244 2.075000e-09 -6.614974e-09 245 2.085000e-09 6.169556e-09 246 2.095000e-09 -6.365617e-09 247 2.105000e-09 5.925496e-09 248 2.115000e-09 -6.127448e-09 249 2.125000e-09 5.692337e-09 250 2.135000e-09 -5.899819e-09 251 2.145000e-09 5.469463e-09 252 2.155000e-09 -5.682146e-09 253 2.165000e-09 5.256308e-09 254 2.175000e-09 -5.473888e-09 255 2.185000e-09 5.052347e-09 256 2.195000e-09 -5.274541e-09 257 2.205000e-09 4.857089e-09 258 2.215000e-09 -5.083637e-09 259 2.225000e-09 4.670079e-09 260 2.235000e-09 -4.900739e-09 261 2.245000e-09 4.490889e-09 262 2.255000e-09 -4.725439e-09 263 2.265000e-09 4.319121e-09 264 2.275000e-09 -4.557353e-09 265 2.285000e-09 4.154402e-09 266 2.295000e-09 -4.396123e-09 267 2.305000e-09 3.996383e-09 268 2.315000e-09 -4.241413e-09 269 2.325000e-09 3.844737e-09 270 2.335000e-09 -4.092909e-09 271 2.345000e-09 3.699157e-09 272 2.355000e-09 -3.950314e-09 273 2.365000e-09 3.559354e-09 274 2.375000e-09 -3.813350e-09 275 2.385000e-09 3.425057e-09 276 2.395000e-09 -3.681756e-09 277 2.405000e-09 3.296011e-09 278 2.415000e-09 -3.555284e-09 279 2.425000e-09 3.171977e-09 280 2.435000e-09 -3.433703e-09 281 2.445000e-09 3.052726e-09 282 2.455000e-09 -3.316793e-09 283 2.465000e-09 2.938046e-09 284 2.475000e-09 -3.204347e-09 285 2.485000e-09 2.827736e-09 286 2.495000e-09 -3.096171e-09 Index time vin#branch -------------------------------------------------------------------------------- 287 2.505000e-09 2.721603e-09 288 2.515000e-09 -2.992078e-09 289 2.525000e-09 2.619469e-09 290 2.535000e-09 -2.891894e-09 291 2.545000e-09 2.521161e-09 292 2.555000e-09 -2.795453e-09 293 2.565000e-09 2.426520e-09 294 2.575000e-09 -2.702598e-09 295 2.585000e-09 2.335390e-09 296 2.595000e-09 -2.613180e-09 297 2.605000e-09 2.247627e-09 298 2.615000e-09 -2.527056e-09 299 2.625000e-09 2.163091e-09 300 2.635000e-09 -2.444093e-09 301 2.645000e-09 2.081653e-09 302 2.655000e-09 -2.364162e-09 303 2.665000e-09 2.003186e-09 304 2.675000e-09 -2.287142e-09 305 2.685000e-09 1.927572e-09 306 2.695000e-09 -2.212916e-09 307 2.705000e-09 1.854698e-09 308 2.715000e-09 -2.141375e-09 309 2.725000e-09 1.784455e-09 310 2.735000e-09 -2.072413e-09 311 2.745000e-09 1.716740e-09 312 2.755000e-09 -2.005928e-09 313 2.765000e-09 1.651456e-09 314 2.775000e-09 -1.941827e-09 315 2.785000e-09 1.588508e-09 316 2.795000e-09 -1.880016e-09 317 2.805000e-09 1.527808e-09 318 2.815000e-09 -1.820408e-09 319 2.825000e-09 1.469268e-09 320 2.835000e-09 -1.762920e-09 321 2.845000e-09 1.412808e-09 322 2.855000e-09 -1.707471e-09 323 2.865000e-09 1.358348e-09 324 2.875000e-09 -1.653985e-09 325 2.885000e-09 1.305815e-09 326 2.895000e-09 -1.602388e-09 327 2.905000e-09 1.255135e-09 328 2.915000e-09 -1.552611e-09 329 2.925000e-09 1.206241e-09 330 2.935000e-09 -1.504585e-09 331 2.945000e-09 1.159066e-09 332 2.955000e-09 -1.458246e-09 333 2.965000e-09 1.113547e-09 334 2.975000e-09 -1.413533e-09 335 2.985000e-09 1.069623e-09 336 2.995000e-09 -1.370386e-09 337 3.000000e-09 1.006627e-09 tmpk8ny_4pz/tests/hfet/id_vgs.cir0000644000175000017500000000045713546075722017230 0ustar carstencarstenHFET Id versus Vgs characteristic z1 1 2 0 hfet l=1u w=10u vgs 2 0 dc 0.3 vds 1 0 dc 1.0 .options noacct .model hfet nhfet level=5 rdi=0 rsi=0 m=2.57 lambda=0.17 + vs=1.5e5 mu=0.385 vt0=0.13 eta=1.32 sigma0=0.04 + vsigma=0.1 Vsigmat=0.3 js1s=0 js1d=0 nmax=6e15 .dc vds 0 1 0.01 .print DC i(vds) .end tmpk8ny_4pz/tests/hfet/inverter.cir0000644000175000017500000000114613546075722017607 0ustar carstencarstenDCFL inverter circuit .subckt inv 1 2 3 * *Vdd 1.0 *Vin 2 0 *Vout 3 0 z1 1 3 3 aload l=1u w=10u z2 3 2 0 adrv l=1u w=10u .ends vdd 1 0 dc 2 vin 2 0 dc 0 pwl(0,0V 1ns,0V 1.005ns,1V 2ns,1V) x1 1 2 3 inv x2 1 3 4 inv .options noacct .tran 0.01n 3n .print tran all .model adrv nhfet level=5 rd=60 rs=60 m=2.57 lambda=0.17 + vs=1.5e5 mu=0.385 vt0=0.3 eta=1.32 sigma0=0.04 + vsigma=0.1 vsigmat=0.3 js1s=1e-12 js1d=1e-12 + nmax=6e15 .model aload nhfet level=5 rd=60 rs=60 m=2.57 lambda=0.17 + vs=1.5e5 mu=0.385 vt0=-0.3 eta=1.32 sigma0=0.04 + vsigma=0.1 vsigmat=0.3 js1s=1e-12 js1d=1e-12 + nmax=6e15 .end tmpk8ny_4pz/tests/xspice/0000755000175000017500000000000013546075722015615 5ustar carstencarstentmpk8ny_4pz/tests/xspice/Makefile.am0000644000175000017500000000016113546075722017647 0ustar carstencarsten## Process this file with automake to produce Makefile.in SUBDIRS = digital MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/xspice/digital/0000755000175000017500000000000013546075722017232 5ustar carstencarstentmpk8ny_4pz/tests/xspice/digital/d_ram.cir0000644000175000017500000000076113546075722021017 0ustar carstencarstenCode Model Test: d_source + d_ram * (compile (concat "SPICE_SCRIPTS=. ../../../src/ngspice " buffer-file-name) t) vdummy dummy 0 DC=0 a_source [a0 a1 a2 d0 d1 d2 d3 d4 we cs] d_source1 aram [d0 d1 d2 d3 d4] [o0 o1 o2 o3 o4] [a0 a1 a2] we [cs] d_ram1 .model d_source1 d_source input_file="d_ram-stimulus.txt" .model d_ram1 d_ram (select_value=1 ic=2 read_delay=1ns) .control set noaskquit set noacct tran 100ps 350ns eprint a0 a1 a2 d0 d1 d2 d3 d4 o0 o1 o2 o3 o4 we cs .endc .end tmpk8ny_4pz/tests/xspice/digital/d_state-stimulus.txt0000644000175000017500000000011213546075722023273 0ustar carstencarsten* time, enable, reset, up 0 0s 1s 1s 1n 1s 0s 1s 9n 1s 0s 0s tmpk8ny_4pz/tests/xspice/digital/Makefile.am0000644000175000017500000000067413546075722021275 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = \ d_ram.cir \ d_source.cir \ d_state.cir TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) SPICE_SCRIPTS=. $(SHELL) $(top_srcdir)/tests/bin/check.sh "$(top_builddir)/src/ngspice -r foobaz" EXTRA_DIST = \ d_ram-stimulus.txt \ d_source-stimulus.txt \ d_state-stimulus.txt \ d_state-updn.txt \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/xspice/digital/d_source.out0000644000175000017500000000313213546075722021565 0ustar carstencarsten Circuit: code model test: d_source Reducing trtol to 1 for xspice 'A' devices Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 308 **** Results Data **** Time or Step a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab 0.000000000e+00 0s 0s Uu Uu Uu Uu Uu Uu Uu Uu Uu 1.000000000e-09 1s 0s Uu Uu 0u Uu Uu Uu Uu Uu Uu 2.000000000e-09 Us 0s Uu Uu 0u 0u Uu Uu Uu Uu Uu 3.000000000e-09 Us 0r Uu Uu 0u 0u 0u Uu Uu Uu Uu 4.000000000e-09 Us 1r Uu Uu 0u 0u 0u 0u Uu Uu Uu 5.000000000e-09 Us Ur Uu Uu 0u 0u 0u 0u 0u Uu Uu 6.000000000e-09 Us Ur 0z Uu 0u 0u 0u 0u 0u 0u Uu 7.000000000e-09 Us Ur 1z Uu 0u 0u 0u 0u 0u 0u 0u 8.000000000e-09 Us Ur Uz Uu 0u 0u 0u 0u 0u 0u 0u 9.000000000e-09 Us Ur Uz 0u 0u 0u 0u 0u 0u 0u 0u 1.000000000e-08 Us Ur Uz 1u 0u 0u 0u 0u 0u 0u 0u 1.100000000e-08 Us Ur Uz Uu 0u 0u 0u 0u 0u 0u 0u **** Messages **** **** Statistics **** Operating point analog/event alternations: 1 Operating point load calls: 1 Operating point event passes: 2 Transient analysis load calls: 11 Transient analysis timestep backups: 0 binary raw file Reducing trtol to 1 for xspice 'A' devices Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 tmpk8ny_4pz/tests/xspice/digital/d_source-stimulus.txt0000644000175000017500000000105713546075722023464 0ustar carstencarsten* time, a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab 0n 0s 0s Uu Uu Uu Uu Uu Uu Uu Uu Uu 1n 1s 0s Uu Uu 0u Uu Uu Uu Uu Uu Uu 2n Us 0s Uu Uu 0u 0u Uu Uu Uu Uu Uu 3n Us 0r Uu Uu 0u 0u 0u Uu Uu Uu Uu 4n Us 1r Uu Uu 0u 0u 0u 0u Uu Uu Uu 5n Us Ur Uu Uu 0u 0u 0u 0u 0u Uu Uu 6n Us Ur 0z Uu 0u 0u 0u 0u 0u 0u Uu 7n Us Ur 1z Uu 0u 0u 0u 0u 0u 0u 0u 8n Us Ur Uz Uu 0u 0u 0u 0u 0u 0u 0u 9n Us Ur Uz 0u 0u 0u 0u 0u 0u 0u 0u 10n Us Ur Uz 1u 0u 0u 0u 0u 0u 0u 0u 11n Us Ur Uz Uu 0u 0u 0u 0u 0u 0u 0u tmpk8ny_4pz/tests/xspice/digital/spinit.in0000644000175000017500000000016513546075722021072 0ustar carstencarstencodemodel @top_builddir@/src/xspice/icm/digital/digital.cm set sourcepath = ( $ngspice_vpath . ) set filetype=binary tmpk8ny_4pz/tests/xspice/digital/d_ram-stimulus.txt0000644000175000017500000000254013546075722022741 0ustar carstencarsten* ram test * a a a d d d d d we cs 0ns 0s 0s 0s 0r 0r 0r 0r 0r 0s 1s 10ns 0s 0s 0s 0r 0r 0r 0r 0r 1s 1s 20ns 0s 0s 0s 0r 0r 0r 0r 0r 0s 1s 30ns 0s 0s 1s 0r 1r 1r 0r 1r 0s 1s 40ns 0s 0s 1s 0r 1r 1r 0r 1r 1s 1s 50ns 0s 0s 1s 0r 1r 1r 0r 1r 0s 1s 60ns 0s 1s 0s 1r 1r 0r 1r 0r 0s 0s 70ns 0s 1s 0s 1r 1r 0r 1r 0r 1s 0s 80ns 0s 1s 0s 1r 1r 0r 1r 0r 0s 0s 90ns 0s 1s 1s 0r 0r 1r 1r 1r 0s 1s 100ns 0s 1s 1s 0r 0r 1r 1r 1r 1s 1s 110ns 0s 1s 1s 0r 0r 1r 1r 1r 0s 1s 120ns 1s 0s 0s 1r 0r 1r 0r 0r 0s 1s 130ns 1s 0s 0s 1r 0r 1r 0r 0r 1s 1s 140ns 1s 0s 0s 1r 0r 1r 0r 0r 0s 1s 150ns 1s 0s 1s 0r 0r 0r 0r 1r 0s 1s 160ns 1s 0s 1s 0r 0r 0r 0r 1r 1s 1s 170ns 1s 0s 1s 0r 0r 0r 0r 1r 0s 1s 180ns 1s 1s 0s 0r 1r 1r 1r 0r 0s 1s 190ns 1s 1s 0s 0r 1r 1r 1r 0r 1s 1s 200ns 1s 1s 0s 0r 1r 1r 1r 0r 0s 1s 210ns 1s 1s 1s 1r 1r 0r 1r 1r 0s 1s 220ns 1s 1s 1s 1r 1r 0r 1r 1r 1s 1s 230ns 1s 1s 1s 1r 1r 0r 1r 1r 0s 1s 240ns 0s 0s 0s 0r 0r 0r 0r 0r 0s 1s 250ns 0s 0s 1s 0r 1r 1r 0r 1r 0s 1s 260ns 0s 1s 0s 1r 1r 0r 1r 0r 0s 1s 270ns 0s 1s 1s 0r 0r 1r 1r 1r 0s 1s 280ns 1s 0s 0s 1r 0r 1r 0r 0r 0s 1s 290ns 1s 0s 1s 0r 0r 0r 0r 1r 0s 1s 300ns 1s 1s 0s 0r 1r 1r 1r 0r 0s 1s 310ns 1s 1s 1s 1r 1r 0r 1r 1r 0s 1s 320ns 1s 1s 1s 1r 1r 0r 1r 1r 0s 0s 330ns 1s 1s 1s 1r 1r 0r 1r 1r 0s 1s tmpk8ny_4pz/tests/xspice/digital/d_state.out0000644000175000017500000000376413546075722021420 0ustar carstencarsten Circuit: code model test: d_source + d_state Reducing trtol to 1 for xspice 'A' devices Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 208 **** Results Data **** Time or Step clk up reset o1 o2 0.000000000e+00 0s 1s 1s 0s 0s 1.000000000e-09 0s 1s 0s 0s 0s 2.000000000e-09 1s 1s 0s 0s 0s 2.100000000e-09 1s 1s 0s 0s 1z 3.000000000e-09 0s 1s 0s 0s 1z 4.000000000e-09 1s 1s 0s 0s 1z 4.100000000e-09 1s 1s 0s 1z 0s 5.000000000e-09 0s 1s 0s 1z 0s 6.000000000e-09 1s 1s 0s 1z 0s 6.100000000e-09 1s 1s 0s 1z 1z 7.000000000e-09 0s 1s 0s 1z 1z 8.000000000e-09 1s 1s 0s 1z 1z 8.100000000e-09 1s 1s 0s 0s 0s 9.000000000e-09 0s 0s 0s 0s 0s 1.000000000e-08 1s 0s 0s 0s 0s 1.010000000e-08 1s 0s 0s 1z 1z 1.100000000e-08 0s 0s 0s 1z 1z 1.200000000e-08 1s 0s 0s 1z 1z 1.210000000e-08 1s 0s 0s 1z 0s 1.300000000e-08 0s 0s 0s 1z 0s 1.400000000e-08 1s 0s 0s 1z 0s 1.410000000e-08 1s 0s 0s 0s 1z 1.500000000e-08 0s 0s 0s 0s 1z 1.600000000e-08 1s 0s 0s 0s 1z 1.610000000e-08 1s 0s 0s 0s 0s 1.700000000e-08 0s 0s 0s 0s 0s 1.800000000e-08 1s 0s 0s 0s 0s 1.810000000e-08 1s 0s 0s 1z 1z 1.900000000e-08 0s 0s 0s 1z 1z 2.000000000e-08 1s 0s 0s 1z 1z **** Messages **** **** Statistics **** Operating point analog/event alternations: 1 Operating point load calls: 5 Operating point event passes: 2 Transient analysis load calls: 42 Transient analysis timestep backups: 0 binary raw file Reducing trtol to 1 for xspice 'A' devices Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 tmpk8ny_4pz/tests/xspice/digital/d_source.cir0000644000175000017500000000054013546075722021533 0ustar carstencarstenCode Model Test: d_source * (compile (concat "SPICE_SCRIPTS=. ../../../src/ngspice " buffer-file-name) t) vdummy dummy 0 DC=0 a_source [a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab] d_source1 .model d_source1 d_source (input_file="d_source-stimulus.txt") .control set noaskquit set noacct tran 100ps 30ns eprint a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab .endc .end tmpk8ny_4pz/tests/xspice/digital/d_ram.out0000644000175000017500000001666613546075722021064 0ustar carstencarsten Circuit: code model test: d_source + d_ram Reducing trtol to 1 for xspice 'A' devices Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 3508 **** Results Data **** Time or Step a0 a1 a2 d0 d1 d2 d3 d4 o0 o1 o2 o3 o4 we cs 0.000000000e+00 0s 0s 0s 0r 0r 0r 0r 0r Us Us Us Us Us 0s 1s 1.000000000e-08 0s 0s 0s 0r 0r 0r 0r 0r Us Us Us Us Us 1s 1s 1.100000000e-08 0s 0s 0s 0r 0r 0r 0r 0r 0z 0z 0z 0z 0z 1s 1s 2.000000000e-08 0s 0s 0s 0r 0r 0r 0r 0r 0z 0z 0z 0z 0z 0s 1s 2.100000000e-08 0s 0s 0s 0r 0r 0r 0r 0r 0s 0s 0s 0s 0s 0s 1s 3.000000000e-08 0s 0s 1s 0r 1r 1r 0r 1r 0s 0s 0s 0s 0s 0s 1s 3.100000000e-08 0s 0s 1s 0r 1r 1r 0r 1r Us Us Us Us Us 0s 1s 4.000000000e-08 0s 0s 1s 0r 1r 1r 0r 1r Us Us Us Us Us 1s 1s 4.100000000e-08 0s 0s 1s 0r 1r 1r 0r 1r 0z 1z 1z 0z 1z 1s 1s 5.000000000e-08 0s 0s 1s 0r 1r 1r 0r 1r 0z 1z 1z 0z 1z 0s 1s 5.100000000e-08 0s 0s 1s 0r 1r 1r 0r 1r 0s 1s 1s 0s 1s 0s 1s 6.000000000e-08 0s 1s 0s 1r 1r 0r 1r 0r 0s 1s 1s 0s 1s 0s 0s 6.100000000e-08 0s 1s 0s 1r 1r 0r 1r 0r Uz Uz Uz Uz Uz 0s 0s 7.000000000e-08 0s 1s 0s 1r 1r 0r 1r 0r Uz Uz Uz Uz Uz 1s 0s 8.000000000e-08 0s 1s 0s 1r 1r 0r 1r 0r Uz Uz Uz Uz Uz 0s 0s 9.000000000e-08 0s 1s 1s 0r 0r 1r 1r 1r Uz Uz Uz Uz Uz 0s 1s 9.100000000e-08 0s 1s 1s 0r 0r 1r 1r 1r Us Us Us Us Us 0s 1s 1.000000000e-07 0s 1s 1s 0r 0r 1r 1r 1r Us Us Us Us Us 1s 1s 1.010000000e-07 0s 1s 1s 0r 0r 1r 1r 1r 0z 0z 1z 1z 1z 1s 1s 1.100000000e-07 0s 1s 1s 0r 0r 1r 1r 1r 0z 0z 1z 1z 1z 0s 1s 1.110000000e-07 0s 1s 1s 0r 0r 1r 1r 1r 0s 0s 1s 1s 1s 0s 1s 1.200000000e-07 1s 0s 0s 1r 0r 1r 0r 0r 0s 0s 1s 1s 1s 0s 1s 1.210000000e-07 1s 0s 0s 1r 0r 1r 0r 0r Us Us Us Us Us 0s 1s 1.300000000e-07 1s 0s 0s 1r 0r 1r 0r 0r Us Us Us Us Us 1s 1s 1.310000000e-07 1s 0s 0s 1r 0r 1r 0r 0r 1z 0z 1z 0z 0z 1s 1s 1.400000000e-07 1s 0s 0s 1r 0r 1r 0r 0r 1z 0z 1z 0z 0z 0s 1s 1.410000000e-07 1s 0s 0s 1r 0r 1r 0r 0r 1s 0s 1s 0s 0s 0s 1s 1.500000000e-07 1s 0s 1s 0r 0r 0r 0r 1r 1s 0s 1s 0s 0s 0s 1s 1.510000000e-07 1s 0s 1s 0r 0r 0r 0r 1r Us Us Us Us Us 0s 1s 1.600000000e-07 1s 0s 1s 0r 0r 0r 0r 1r Us Us Us Us Us 1s 1s 1.610000000e-07 1s 0s 1s 0r 0r 0r 0r 1r 0z 0z 0z 0z 1z 1s 1s 1.700000000e-07 1s 0s 1s 0r 0r 0r 0r 1r 0z 0z 0z 0z 1z 0s 1s 1.710000000e-07 1s 0s 1s 0r 0r 0r 0r 1r 0s 0s 0s 0s 1s 0s 1s 1.800000000e-07 1s 1s 0s 0r 1r 1r 1r 0r 0s 0s 0s 0s 1s 0s 1s 1.810000000e-07 1s 1s 0s 0r 1r 1r 1r 0r Us Us Us Us Us 0s 1s 1.900000000e-07 1s 1s 0s 0r 1r 1r 1r 0r Us Us Us Us Us 1s 1s 1.910000000e-07 1s 1s 0s 0r 1r 1r 1r 0r 0z 1z 1z 1z 0z 1s 1s 2.000000000e-07 1s 1s 0s 0r 1r 1r 1r 0r 0z 1z 1z 1z 0z 0s 1s 2.010000000e-07 1s 1s 0s 0r 1r 1r 1r 0r 0s 1s 1s 1s 0s 0s 1s 2.100000000e-07 1s 1s 1s 1r 1r 0r 1r 1r 0s 1s 1s 1s 0s 0s 1s 2.110000000e-07 1s 1s 1s 1r 1r 0r 1r 1r Us Us Us Us Us 0s 1s 2.200000000e-07 1s 1s 1s 1r 1r 0r 1r 1r Us Us Us Us Us 1s 1s 2.210000000e-07 1s 1s 1s 1r 1r 0r 1r 1r 1z 1z 0z 1z 1z 1s 1s 2.300000000e-07 1s 1s 1s 1r 1r 0r 1r 1r 1z 1z 0z 1z 1z 0s 1s 2.310000000e-07 1s 1s 1s 1r 1r 0r 1r 1r 1s 1s 0s 1s 1s 0s 1s 2.400000000e-07 0s 0s 0s 0r 0r 0r 0r 0r 1s 1s 0s 1s 1s 0s 1s 2.410000000e-07 0s 0s 0s 0r 0r 0r 0r 0r 0s 0s 0s 0s 0s 0s 1s 2.500000000e-07 0s 0s 1s 0r 1r 1r 0r 1r 0s 0s 0s 0s 0s 0s 1s 2.510000000e-07 0s 0s 1s 0r 1r 1r 0r 1r 0s 1s 1s 0s 1s 0s 1s 2.600000000e-07 0s 1s 0s 1r 1r 0r 1r 0r 0s 1s 1s 0s 1s 0s 1s 2.610000000e-07 0s 1s 0s 1r 1r 0r 1r 0r Us Us Us Us Us 0s 1s 2.700000000e-07 0s 1s 1s 0r 0r 1r 1r 1r Us Us Us Us Us 0s 1s 2.710000000e-07 0s 1s 1s 0r 0r 1r 1r 1r 0s 0s 1s 1s 1s 0s 1s 2.800000000e-07 1s 0s 0s 1r 0r 1r 0r 0r 0s 0s 1s 1s 1s 0s 1s 2.810000000e-07 1s 0s 0s 1r 0r 1r 0r 0r 1s 0s 1s 0s 0s 0s 1s 2.900000000e-07 1s 0s 1s 0r 0r 0r 0r 1r 1s 0s 1s 0s 0s 0s 1s 2.910000000e-07 1s 0s 1s 0r 0r 0r 0r 1r 0s 0s 0s 0s 1s 0s 1s 3.000000000e-07 1s 1s 0s 0r 1r 1r 1r 0r 0s 0s 0s 0s 1s 0s 1s 3.010000000e-07 1s 1s 0s 0r 1r 1r 1r 0r 0s 1s 1s 1s 0s 0s 1s 3.100000000e-07 1s 1s 1s 1r 1r 0r 1r 1r 0s 1s 1s 1s 0s 0s 1s 3.110000000e-07 1s 1s 1s 1r 1r 0r 1r 1r 1s 1s 0s 1s 1s 0s 1s 3.200000000e-07 1s 1s 1s 1r 1r 0r 1r 1r 1s 1s 0s 1s 1s 0s 0s 3.210000000e-07 1s 1s 1s 1r 1r 0r 1r 1r Uz Uz Uz Uz Uz 0s 0s 3.300000000e-07 1s 1s 1s 1r 1r 0r 1r 1r Uz Uz Uz Uz Uz 0s 1s 3.310000000e-07 1s 1s 1s 1r 1r 0r 1r 1r 1s 1s 0s 1s 1s 0s 1s **** Messages **** **** Statistics **** Operating point analog/event alternations: 1 Operating point load calls: 3 Operating point event passes: 2 Transient analysis load calls: 66 Transient analysis timestep backups: 0 binary raw file Reducing trtol to 1 for xspice 'A' devices Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 tmpk8ny_4pz/tests/xspice/digital/d_state-updn.txt0000644000175000017500000000051313546075722022361 0ustar carstencarsten* This is an example state.in file. This file * defines a simple 2-bit counter with one input. The * value of this input determines whether the counter counts * up (in = 1) or down (in = 0). 0 0s 0s 0 -> 3 1 -> 1 1 0s 1z 0 -> 0 1 -> 2 2 1z 0s 0 -> 1 1 -> 3 3 1z 1z 0 -> 2 3 1z 1z 1 -> 0 tmpk8ny_4pz/tests/xspice/digital/d_state.cir0000644000175000017500000000120113546075722021346 0ustar carstencarstenCode Model Test: d_source + d_state * (compile (concat "SPICE_SCRIPTS=. ../../../src/ngspice " buffer-file-name) t) vdummy dummy 0 DC=0 a_source [enable reset up] d_source1 a_osc [enable clk] clk d_xor1 a_counter [up] clk reset [o1 o2] d_state1 .model d_source1 d_source (input_file="d_state-stimulus.txt") .model d_xor1 d_xor (rise_delay=1ns fall_delay=1ns) .model d_state1 d_state (clk_delay=0.1ns reset_delay=0.1ns + state_file="d_state-updn.txt" reset_state=0) .control set noaskquit set noacct tran 100ps 20ns eprint clk up reset o1 o2 eprvcd clk up reset o1 o2 > myfirst.vcd .endc .end tmpk8ny_4pz/tests/mes/0000755000175000017500000000000013546075722015106 5ustar carstencarstentmpk8ny_4pz/tests/mes/Makefile.am0000644000175000017500000000037513546075722017147 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = subth.cir TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/mes/subth.out0000644000175000017500000000455213546075722016772 0ustar carstencarsten No. of Data Rows : 61 Circuit: Mesfet level 1 subthreshold characteristics Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Mesfet level 1 subthreshold characteristics -------------------------------------------------------------------------------- Index v-sweep vids#branch -------------------------------------------------------------------------------- 0 -3.000000e+00 3.114000e-12 1 -2.950000e+00 3.064000e-12 2 -2.900000e+00 3.014000e-12 3 -2.850000e+00 2.964000e-12 4 -2.800000e+00 2.914001e-12 5 -2.750000e+00 2.864000e-12 6 -2.700000e+00 2.814000e-12 7 -2.650000e+00 2.764000e-12 8 -2.600000e+00 2.714000e-12 9 -2.550000e+00 2.664000e-12 10 -2.500000e+00 2.614001e-12 11 -2.450000e+00 2.564000e-12 12 -2.400000e+00 2.514000e-12 13 -2.350000e+00 2.464000e-12 14 -2.300000e+00 2.414000e-12 15 -2.250000e+00 2.364000e-12 16 -2.200000e+00 2.314000e-12 17 -2.150000e+00 2.264000e-12 18 -2.100000e+00 2.214000e-12 19 -2.050000e+00 2.164000e-12 20 -2.000000e+00 2.114000e-12 21 -1.950000e+00 2.064000e-12 22 -1.900000e+00 2.014000e-12 23 -1.850000e+00 1.964000e-12 24 -1.800000e+00 1.914000e-12 25 -1.750000e+00 1.864001e-12 26 -1.700000e+00 1.814000e-12 27 -1.650000e+00 1.764000e-12 28 -1.600000e+00 1.714000e-12 29 -1.550000e+00 1.664000e-12 30 -1.500000e+00 1.614000e-12 31 -1.450000e+00 1.564000e-12 32 -1.400000e+00 1.514000e-12 33 -1.350000e+00 1.464000e-12 34 -1.300000e+00 1.414000e-12 35 -1.250000e+00 1.308946e-06 36 -1.200000e+00 5.139480e-06 37 -1.150000e+00 1.133848e-05 38 -1.100000e+00 1.974383e-05 39 -1.050000e+00 3.018749e-05 40 -1.000000e+00 4.249832e-05 41 -9.500000e-01 5.650452e-05 42 -9.000000e-01 7.203585e-05 43 -8.500000e-01 8.892547e-05 44 -8.000000e-01 1.070115e-04 45 -7.500000e-01 1.261384e-04 46 -7.000000e-01 1.461577e-04 47 -6.500000e-01 1.669292e-04 48 -6.000000e-01 1.883212e-04 49 -5.500000e-01 2.102107e-04 50 -5.000000e-01 2.324840e-04 51 -4.500000e-01 2.550366e-04 52 -4.000000e-01 2.777728e-04 53 -3.500000e-01 3.006058e-04 54 -3.000000e-01 3.234572e-04 Index v-sweep vids#branch -------------------------------------------------------------------------------- 55 -2.500000e-01 3.462568e-04 56 -2.000000e-01 3.689422e-04 57 -1.500000e-01 3.914582e-04 58 -1.000000e-01 4.137564e-04 59 -5.000000e-02 4.357948e-04 60 -2.289835e-15 4.575371e-04 tmpk8ny_4pz/tests/mes/subth.cir0000644000175000017500000000040313546075722016727 0ustar carstencarstenMesfet level 1 subthreshold characteristics Vds 1 0 dc 0.1 vids 1 2 dc 0 Vgs 3 0 dc 0 z1 2 3 0 mesmod area=1.4 .model mesmod nmf level=1 rd=46 rs=46 vt0=-1.3 + lambda=0.03 alpha=3 beta=1.4e-3 .options noacct .dc vgs -3 0 0.05 .print DC vids#branch .end tmpk8ny_4pz/tests/bsimsoi/0000755000175000017500000000000013546075722015767 5ustar carstencarstentmpk8ny_4pz/tests/bsimsoi/Makefile.am0000644000175000017500000000053013546075722020021 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = nmos/qaSpec pmos/qaSpec TESTS_ENVIRONMENT = \ $(SHELL) $(top_srcdir)/tests/bin/check_cmc.sh \ $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ nmos pmos MAINTAINERCLEANFILES = Makefile.in clean-local: rm -rf nmos/results pmos/results ngspiceCkt b4soiv1check.log tmpk8ny_4pz/tests/bsimsoi/nmos/0000755000175000017500000000000013546075722016743 5ustar carstencarstentmpk8ny_4pz/tests/bsimsoi/nmos/parameters/0000755000175000017500000000000013546075722021106 5ustar carstencarstentmpk8ny_4pz/tests/bsimsoi/nmos/parameters/nmosParameters0000644000175000017500000001176013546075722024036 0ustar carstencarsten+ binunit = (1) + mobmod = (1) + capmod = (3) + shmod = (0) + paramchk= (0) + soimod = (0) + igcmod = (1) + igbmod = (1) + tsi = (9e-008) + tox = (2e-009) + toxref = (2e-009) + tbox = (4e-007) + toxqm = (2e-009) + tnom = (27) + rbody = (0) + rbsh = (0) + rsh = (0) + dtoxcv = (0) + xj = (7e-008) + rhalo = (0) + nch = (1e+019) + ngate = (3e+020) + wint = (5.5544e-009) + lint = (2e-009) + xpart = (1) + toxm = (2e-009) + k1 = (0.6) + k2 = (1e-010) + k3 = (0.231) + k3b = (0) + kb1 = (1) + w0 = (0) + dvt0 = (2.2) + dvt1 = (0.53) + dvt2 = (0.127) + dvt0w = (0) + dvt1w = (0) + dvt2w = (0) + eta0 = (1.7958) + etab = (-0.07) + dsub = (1.7577) + voff = (-0.10382) + nfactor = (1) + cdsc = (0.00024) + cdscb = (0) + cdscd = (0) + cit = (0) + u0 = (200) + ua = (2.25e-009) + ub = (5.9e-019) + uc = (2.9e-011) + prwg = (2.5) + prwb = (0.76) + wr = (1) + rdsw = (0.695) + a0 = (0) + ags = (0) + a1 = (0) + a2 = (0.7) + b0 = (0) + b1 = (0) + vsat = (99820) + keta = (0) + ketas = (0) + dwg = (0) + dwb = (0) + dwbc = (0) + pclm = (1.3) + pdiblc1 = (0.39) + pdiblc2 = (0.05) + pdiblcb = (0.89459) + drout = (2) + pvag = (0.116) + delta = (0.01) + vevb = (0.075) + vecb = (0.026) + alpha0 = (5.0707e-009) + beta0 = (0.0007605) + beta1 = (0.0002767) + beta2 = (0.094512) + alphagb1= (0.35) + alphagb2= (0.43) + betagb1 = (0.03) + betagb2 = (0.05) + fbjtii = (0) + vdsatii0= (0.72051) + tii = (-0.5062) + lii = (2.835e-009) + esatii = (2213500) + sii0 = (2.0387) + sii1 = (0.04093) + sii2 = (9.8e-011) + siid = (0.008025) + aigc = (1) + bigc = (0.05022) + cigc = (0.075) + aigsd = (0.43) + bigsd = (0.054) + cigsd = (0.075) + nigc = (1) + poxedge = (1) + pigcd = (1) + agidl = (0) + bgidl = (0) + ebg = (1.2) + vgb1 = (300) + vgb2 = (17) + voxh = (1.5) + deltavox= (0.004) + ntox = (1) + ntun = (1) + ndiode = (1) + nrecf0 = (1.5) + nrecr0 = (2) + isbjt = (1e-006) + isdif = (0.0001) + isrec = (0.01) + istun = (5e-005) + vrec0 = (1) + vtun0 = (0) + nbjt = (0.7888) + lbjt0 = (1.4381e-006) + vabjt = (0.001) + aely = (1.0819e+010) + ahli = (0) + lpe0 = (3e-009) + cjswg = (1e-010) + mjswg = (0.5) + pbswg = (0.7) + tt = (4e-010) + ldif0 = (1) + cgso = (5e-011) + cgdo = (5e-011) + dlc = (0) + dwc = (0) + dlcb = (0) + dlbg = (0) + fbody = (1) + clc = (1e-008) + cle = (0) + cf = (0) + csdmin = (0) + asd = (0.3) + csdesw = (8.73e-011) + delvt = (-0.031456) + acde = (1) + moin = (25) + ckappa = (3.2309) + cgdl = (1.5533e-010) + cgsl = (1.5533e-010) + ndif = (-1) + kt1 = (-0.11573) + kt1l = (-4e-010) + kt2 = (-0.25) + ute = (-1.2189) + ua1 = (5.005e-012) + ub1 = (-8.835e-019) + uc1 = (-6e-011) + prt = (51.149) + rth0 = (0.02) + cth0 = (1e-005) + at = (8479) + tpbswg = (5.86e-005) + tcjswg = (0.00092578) + ntrecf = (-0.55338) + ntrecr = (-0.15688) + xbjt = (1.0968) + xdif = (1.4551) + xrec = (2.6e-011) + xtun = (25.308) + fnoimod = (0) + tnoimod = (2) + af = (2.15) + ef = (1.119) + kf = (1.67e-026) + w0flk = (0.001) tmpk8ny_4pz/tests/bsimsoi/nmos/reference/0000755000175000017500000000000013546075722020701 5ustar carstencarstentmpk8ny_4pz/tests/bsimsoi/nmos/reference/noise03.standard0000644000175000017500000000634713546075722023715 0ustar carstencarstenFreq N(d) 1000 3.201132e-19 1258.925 3.079607e-19 1584.893 2.98562e-19 1995.262 2.912879e-19 2511.886 2.856497e-19 3162.278 2.812664e-19 3981.072 2.778378e-19 5011.872 2.751231e-19 6309.573 2.729226e-19 7943.282 2.710598e-19 10000 2.693644e-19 12589.25 2.676513e-19 15848.93 2.656958e-19 19952.62 2.631996e-19 25118.86 2.597495e-19 31622.78 2.547683e-19 39810.72 2.474749e-19 50118.72 2.368889e-19 63095.73 2.219518e-19 79432.82 2.018507e-19 100000 1.765518e-19 125892.5 1.473136e-19 158489.3 1.166982e-19 199526.2 8.779114e-20 251188.6 6.304732e-20 316227.8 4.35851e-20 398107.2 2.927108e-20 501187.2 1.925484e-20 630957.3 1.248759e-20 794328.2 8.022973e-21 1000000 5.123459e-21 1258925 3.259486e-21 1584893 2.068988e-21 1995262 1.311735e-21 2511886 8.312731e-22 3162278 5.268854e-22 3981072 3.34205e-22 5011872 2.122816e-22 6309573 1.351353e-22 7943282 8.631209e-23 10000000 5.540135e-23 12589250 3.58199e-23 15848930 2.340583e-23 19952620 1.552801e-23 25118860 1.052281e-23 31622780 7.33807e-24 39810720 5.30805e-24 50118720 4.011299e-24 63095730 3.180826e-24 79432820 2.647345e-24 100000000 2.303409e-24 1000 8.85887e-19 1258.925 7.448534e-19 1584.893 6.358535e-19 1995.262 5.516104e-19 2511.886 4.865001e-19 3162.278 4.361752e-19 3981.072 3.972752e-19 5011.872 3.672015e-19 6309.573 3.439438e-19 7943.282 3.25945e-19 10000 3.119966e-19 12589.25 3.011567e-19 15848.93 2.926844e-19 19952.62 2.859868e-19 25118.86 2.805742e-19 31622.78 2.760189e-19 39810.72 2.719141e-19 50118.72 2.678298e-19 63095.73 2.632624e-19 79432.82 2.575792e-19 100000 2.499697e-19 125892.5 2.394344e-19 158489.3 2.248777e-19 199526.2 2.053896e-19 251188.6 1.807483e-19 316227.8 1.519599e-19 398107.2 1.213807e-19 501187.2 9.205972e-20 630957.3 6.659525e-20 794328.2 4.631802e-20 1000000 3.125909e-20 1258925 2.064448e-20 1584893 1.343426e-20 1995262 8.658196e-21 2511886 5.546531e-21 3162278 3.54071e-21 3981072 2.256305e-21 5011872 1.437136e-21 6309573 9.158525e-22 7943282 5.844749e-22 10000000 3.73862e-22 12589250 2.39946e-22 15848930 1.54717e-22 19952620 1.003983e-22 25118860 6.571578e-23 31622780 4.351972e-23 39810720 2.92747e-23 50118720 2.010163e-23 63095730 1.417102e-23 79432820 1.031881e-23 100000000 7.803046e-24 1000 2.09251e-18 1258.925 1.671513e-18 1584.893 1.346142e-18 1995.262 1.094675e-18 2511.886 9.003254e-19 3162.278 7.501191e-19 3981.072 6.34028e-19 5011.872 5.443016e-19 6309.573 4.749488e-19 7943.282 4.213378e-19 10000 3.798865e-19 12589.25 3.478226e-19 15848.93 3.229976e-19 19952.62 3.037416e-19 25118.86 2.887489e-19 31622.78 2.769872e-19 39810.72 2.676217e-19 50118.72 2.599508e-19 63095.73 2.533448e-19 79432.82 2.471866e-19 100000 2.408096e-19 125892.5 2.33439e-19 158489.3 2.241534e-19 199526.2 2.119123e-19 251188.6 1.957218e-19 316227.8 1.750029e-19 398107.2 1.500982e-19 501187.2 1.226039e-19 630957.3 9.509335e-20 794328.2 7.019871e-20 1000000 4.9656e-20 1258925 3.396026e-20 1584893 2.265852e-20 1995262 1.486238e-20 2511886 9.640995e-21 3162278 6.211756e-21 3981072 3.987538e-21 5011872 2.555936e-21 6309573 1.63855e-21 7943282 1.051964e-21 10000000 6.771362e-22 12589250 4.375022e-22 15848930 2.840872e-22 19952620 1.856582e-22 25118860 1.223262e-22 31622780 8.143093e-23 39810720 5.490989e-23 50118720 3.762352e-23 63095730 2.629022e-23 79432820 1.881022e-23 100000000 1.383638e-23 tmpk8ny_4pz/tests/bsimsoi/nmos/reference/noise02.standard0000644000175000017500000000635213546075722023710 0ustar carstencarstenFreq N(d) 1000 3.093528e-19 1258.925 2.980617e-19 1584.893 2.893287e-19 1995.262 2.825687e-19 2511.886 2.773275e-19 3162.278 2.732504e-19 3981.072 2.700575e-19 5011.872 2.675235e-19 6309.573 2.654601e-19 7943.282 2.636996e-19 10000 2.620773e-19 12589.25 2.604116e-19 15848.93 2.584786e-19 19952.62 2.559788e-19 25118.86 2.524953e-19 31622.78 2.474468e-19 39810.72 2.400501e-19 50118.72 2.293341e-19 63095.73 2.142747e-19 79432.82 1.941349e-19 100000 1.689984e-19 125892.5 1.402414e-19 158489.3 1.104635e-19 199526.2 8.265644e-20 251188.6 5.90892e-20 316227.8 4.070279e-20 398107.2 2.72636e-20 501187.2 1.790133e-20 630957.3 1.159528e-20 794328.2 7.443454e-21 1000000 4.750689e-21 1258925 3.021124e-21 1584893 1.917082e-21 1995262 1.215069e-21 2511886 7.697542e-22 3162278 4.876725e-22 3981072 3.091274e-22 5011872 1.961544e-22 6309573 1.246736e-22 7943282 7.943648e-23 10000000 5.079635e-23 12589250 3.265327e-23 15848930 2.1151e-23 19952620 1.385172e-23 25118860 9.214017e-24 31622780 6.263048e-24 39810720 4.381991e-24 50118720 3.180358e-24 63095730 2.410771e-24 79432820 1.91638e-24 100000000 1.597628e-24 1000 8.643494e-19 1258.925 7.274877e-19 1584.893 6.21712e-19 1995.262 5.399609e-19 2511.886 4.767764e-19 3162.278 4.279399e-19 3981.072 3.901902e-19 5011.872 3.610055e-19 6309.573 3.384347e-19 7943.282 3.209667e-19 10000 3.074284e-19 12589.25 2.969052e-19 15848.93 2.88677e-19 19952.62 2.821675e-19 25118.86 2.768991e-19 31622.78 2.724534e-19 39810.72 2.684306e-19 50118.72 2.644058e-19 63095.73 2.598788e-19 79432.82 2.542198e-19 100000 2.466215e-19 125892.5 2.36091e-19 158489.3 2.215466e-19 199526.2 2.021048e-19 251188.6 1.775831e-19 316227.8 1.490271e-19 398107.2 1.18807e-19 501187.2 8.99397e-20 630957.3 6.495613e-20 794328.2 4.511948e-20 1000000 3.042073e-20 1258925 2.007685e-20 1584893 1.305845e-20 1995262 8.412974e-21 2511886 5.387896e-21 3162278 3.43852e-21 3981072 2.190521e-21 5011872 1.394677e-21 6309573 8.882793e-22 7943282 5.663833e-22 10000000 3.618043e-22 12589250 2.317284e-22 15848930 1.489451e-22 19952620 9.618599e-23 25118860 6.249974e-23 31622780 4.094162e-23 39810720 2.710624e-23 50118720 1.819712e-23 63095730 1.243729e-23 79432820 8.696081e-24 100000000 6.252885e-24 1000 2.056529e-18 1258.925 1.642957e-18 1584.893 1.323324e-18 1995.262 1.076292e-18 2511.886 8.853708e-19 3162.278 7.378136e-19 3981.072 6.2377e-19 5011.872 5.35626e-19 6309.573 4.674963e-19 7943.282 4.148307e-19 10000 3.741102e-19 12589.25 3.426114e-19 15848.93 3.182237e-19 19952.62 2.993063e-19 25118.86 2.845765e-19 31622.78 2.730197e-19 39810.72 2.638155e-19 50118.72 2.562737e-19 63095.73 2.497746e-19 79432.82 2.437101e-19 100000 2.374228e-19 125892.5 2.301478e-19 158489.3 2.209756e-19 199526.2 2.0888e-19 251188.6 1.928824e-19 316227.8 1.724166e-19 398107.2 1.478293e-19 501187.2 1.207041e-19 630957.3 9.358327e-20 794328.2 6.905922e-20 1000000 4.883526e-20 1258925 3.339096e-20 1584893 2.227452e-20 1995262 1.460828e-20 2511886 9.474833e-21 3162278 6.103766e-21 3981072 3.917456e-21 5011872 2.510327e-21 6309573 1.608655e-21 7943282 1.032131e-21 10000000 6.637387e-22 12589250 4.282222e-22 15848930 2.774448e-22 19952620 1.807091e-22 25118860 1.184673e-22 31622780 7.827632e-23 39810720 5.221238e-23 50118720 3.522418e-23 63095730 2.408653e-23 79432820 1.673578e-23 100000000 1.184798e-23 tmpk8ny_4pz/tests/bsimsoi/nmos/reference/dcSweep02.standard0000644000175000017500000000725213546075722024165 0ustar carstencarstenV(d) I(d) 1.000000e-01 1.789307e-13 2.000000e-01 2.899054e-13 3.000000e-01 4.310319e-13 4.000000e-01 6.042802e-13 5.000000e-01 8.130389e-13 6.000000e-01 1.062778e-12 7.000000e-01 1.360203e-12 8.000000e-01 1.712858e-12 9.000000e-01 2.129013e-12 1.000000e+00 2.617708e-12 1.100000e+00 3.188947e-12 1.200000e+00 3.854294e-12 1.300000e+00 4.629387e-12 1.400000e+00 5.545876e-12 1.500000e+00 6.701330e-12 1.600000e+00 8.368638e-12 1.000000e-01 3.057304e-08 2.000000e-01 5.341968e-08 3.000000e-01 8.578265e-08 4.000000e-01 1.317897e-07 5.000000e-01 1.956043e-07 6.000000e-01 2.819067e-07 7.000000e-01 3.961964e-07 8.000000e-01 5.457322e-07 9.000000e-01 7.421982e-07 1.000000e+00 1.007997e-06 1.100000e+00 1.386266e-06 1.200000e+00 1.936295e-06 1.300000e+00 2.721749e-06 1.400000e+00 3.781212e-06 1.500000e+00 5.145451e-06 1.600000e+00 6.843668e-06 1.000000e-01 6.523317e-05 2.000000e-01 1.123510e-04 3.000000e-01 1.457251e-04 4.000000e-01 1.669823e-04 5.000000e-01 1.793040e-04 6.000000e-01 1.873231e-04 7.000000e-01 1.935049e-04 8.000000e-01 1.989933e-04 9.000000e-01 2.043676e-04 1.000000e+00 2.097029e-04 1.100000e+00 2.149605e-04 1.200000e+00 2.201088e-04 1.300000e+00 2.251752e-04 1.400000e+00 2.301837e-04 1.500000e+00 2.351614e-04 1.600000e+00 2.401335e-04 1.000000e-01 1.527918e-13 2.000000e-01 2.464246e-13 3.000000e-01 3.665628e-13 4.000000e-01 5.147983e-13 5.000000e-01 6.936413e-13 6.000000e-01 9.071297e-13 7.000000e-01 1.160350e-12 8.000000e-01 1.459125e-12 9.000000e-01 1.809871e-12 1.000000e+00 2.219563e-12 1.100000e+00 2.695772e-12 1.200000e+00 3.246762e-12 1.300000e+00 3.881744e-12 1.400000e+00 4.611579e-12 1.500000e+00 5.450975e-12 1.600000e+00 6.424923e-12 1.000000e-01 1.908610e-10 2.000000e-01 3.874885e-10 3.000000e-01 7.261183e-10 4.000000e-01 1.304306e-09 5.000000e-01 2.264571e-09 6.000000e-01 3.814859e-09 7.000000e-01 6.250729e-09 8.000000e-01 9.981612e-09 9.000000e-01 1.556340e-08 1.000000e+00 2.374604e-08 1.100000e+00 3.557069e-08 1.200000e+00 5.265120e-08 1.300000e+00 7.817441e-08 1.400000e+00 1.207195e-07 1.500000e+00 2.093818e-07 1.600000e+00 4.348789e-07 1.000000e-01 8.188961e-05 2.000000e-01 1.338936e-04 3.000000e-01 1.620568e-04 4.000000e-01 1.748698e-04 5.000000e-01 1.821380e-04 6.000000e-01 1.873677e-04 7.000000e-01 1.918575e-04 8.000000e-01 1.962996e-04 9.000000e-01 2.011708e-04 1.000000e+00 2.065496e-04 1.100000e+00 2.123284e-04 1.200000e+00 2.183131e-04 1.300000e+00 2.245161e-04 1.400000e+00 2.309119e-04 1.500000e+00 2.375159e-04 1.600000e+00 2.443424e-04 1.000000e-01 1.246568e-10 2.000000e-01 1.404667e-10 3.000000e-01 1.415609e-10 4.000000e-01 1.416631e-10 5.000000e-01 1.417491e-10 6.000000e-01 1.419310e-10 7.000000e-01 1.422955e-10 8.000000e-01 1.429657e-10 9.000000e-01 1.441117e-10 1.000000e+00 1.459540e-10 1.100000e+00 1.487642e-10 1.200000e+00 1.528621e-10 1.300000e+00 1.586097e-10 1.400000e+00 1.664029e-10 1.500000e+00 1.766625e-10 1.600000e+00 1.898246e-10 1.000000e-01 1.739663e-06 2.000000e-01 2.271515e-06 3.000000e-01 2.658914e-06 4.000000e-01 3.016874e-06 5.000000e-01 3.370998e-06 6.000000e-01 3.731594e-06 7.000000e-01 4.104225e-06 8.000000e-01 4.492897e-06 9.000000e-01 4.902036e-06 1.000000e+00 5.339689e-06 1.100000e+00 5.825991e-06 1.200000e+00 6.413703e-06 1.300000e+00 7.234006e-06 1.400000e+00 8.509082e-06 1.500000e+00 1.040334e-05 1.600000e+00 1.288300e-05 1.000000e-01 4.074150e-05 2.000000e-01 7.406657e-05 3.000000e-01 1.010768e-04 4.000000e-01 1.226715e-04 5.000000e-01 1.394550e-04 6.000000e-01 1.517552e-04 7.000000e-01 1.605021e-04 8.000000e-01 1.670024e-04 9.000000e-01 1.721530e-04 1.000000e+00 1.765128e-04 1.100000e+00 1.805142e-04 1.200000e+00 1.845583e-04 1.300000e+00 1.889092e-04 1.400000e+00 1.935564e-04 1.500000e+00 1.983603e-04 1.600000e+00 2.032222e-04 tmpk8ny_4pz/tests/bsimsoi/nmos/reference/acVd01.standard0000644000175000017500000000333013546075722023440 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 0.1 4.256531e-05 2.280443e-04 6.39209673068808e-17 1.46536539675408e-16 0.2 8.071046e-05 1.623635e-04 8.75467137036548e-17 1.12277430399604e-16 0.3 1.133566e-04 1.120913e-04 1.1030702986611e-16 7.22669395665892e-17 0.4 1.361569e-04 8.071918e-05 1.21450132883153e-16 4.9801823484061e-17 0.5 1.470479e-04 6.758203e-05 1.24686533759423e-16 4.40607519296409e-17 0.6 1.518340e-04 6.328112e-05 1.25851434074825e-16 4.34204917562876e-17 0.7 1.555805e-04 6.145814e-05 1.26392834221411e-16 4.36471618176595e-17 0.8 1.595673e-04 5.994295e-05 1.26691134302177e-16 4.37565918472882e-17 0.9 1.634965e-04 5.852821e-05 1.26899834358684e-16 4.36846718278155e-17 1 1.670521e-04 5.723482e-05 1.2710443441408e-16 4.34550717656503e-17 1.1 1.701518e-04 5.654639e-05 1.27214034443755e-16 4.31422616809556e-17 1.2 1.728251e-04 5.623839e-05 1.27288234463845e-16 4.25766415278115e-17 0.1 1.966259e-05 2.186862e-04 6.10635565332244e-17 1.49950440599736e-16 0.2 3.983789e-05 1.709235e-04 7.92661114616456e-17 1.26301034196556e-16 0.3 6.002787e-05 1.301579e-04 1.0143662746441e-16 9.34229552946728e-17 0.4 7.946084e-05 9.587285e-05 1.20272832564394e-16 6.16061266801276e-17 0.5 9.616649e-05 7.016245e-05 1.28724434852702e-16 4.56001523464402e-17 0.6 1.084092e-04 5.385525e-05 1.31159335511962e-16 4.04668109565656e-17 0.7 1.170742e-04 4.380305e-05 1.31855035700326e-16 3.88147805092712e-17 0.8 1.234285e-04 3.748273e-05 1.32065735757374e-16 3.8193190340973e-17 0.9 1.282798e-04 3.377229e-05 1.32081435761625e-16 3.79423002730434e-17 1 1.321108e-04 3.267038e-05 1.31920135717952e-16 3.78926102595896e-17 1.1 1.352172e-04 3.509282e-05 1.31485835600364e-16 3.80175602934203e-17 1.2 1.377816e-04 4.137063e-05 1.30736335397433e-16 3.82095303453971e-17 tmpk8ny_4pz/tests/bsimsoi/nmos/reference/acFreq02.standard0000644000175000017500000000710513546075722023771 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.7988153217581e-16 1.38428354007981e-16 4.1453130421346e-17 1258.925 1.79881589846049e-16 1.38428422759048e-16 4.14531418027401e-17 1584.893 1.79881529113301e-16 1.38428357070489e-16 4.14531318748149e-17 1995.262 1.7988153417013e-16 1.3842835201366e-16 4.14531342966069e-17 2511.886 1.79881570072246e-16 1.3842837947228e-16 4.14531335753039e-17 3162.278 1.79881466664194e-16 1.38428318861183e-16 4.14531226384072e-17 3981.072 1.79881491178942e-16 1.38428355026938e-16 4.14531361520036e-17 5011.872 1.79881529677026e-16 1.38428356506765e-16 4.14531414146733e-17 6309.573 1.7988152253463e-16 1.3842836364916e-16 4.14531336611098e-17 7943.282 1.79881498683369e-16 1.38428367464001e-16 4.14531312193686e-17 10000 1.7988153217581e-16 1.38428354007981e-16 4.14531145058516e-17 12589.25 1.79881589846049e-16 1.38428422759048e-16 4.14531291606095e-17 15848.93 1.79881529113301e-16 1.38428357070489e-16 4.14531117908164e-17 19952.62 1.79881454403692e-16 1.3842835201366e-16 4.14530944133878e-17 25118.86 1.79881443350776e-16 1.3842837947228e-16 4.14530765506425e-17 31622.78 1.79881366005781e-16 1.38428318861183e-16 4.14530270129145e-17 39810.72 1.79881251311474e-16 1.38428275071115e-16 4.14529762403586e-17 50118.72 1.79881148609968e-16 1.3842826124e-16 4.14528873699681e-17 63095.73 1.79880967598702e-16 1.38428187078638e-16 4.1452730071344e-17 79432.82 1.79880617080841e-16 1.38428066917684e-16 4.14525100903144e-17 100000 1.79880099781322e-16 1.38427876543152e-16 4.14521436606988e-17 125892.5 1.79879314262535e-16 1.3842766423121e-16 4.14515741785414e-17 158489.3 1.79877913993573e-16 1.3842715203058e-16 4.14506414590022e-17 199526.2 1.79875870753015e-16 1.38426437619143e-16 4.14491858579141e-17 251188.6 1.79872572847881e-16 1.38425338157002e-16 4.1446886206837e-17 316227.8 1.79867324157112e-16 1.38423537586547e-16 4.14432379822121e-17 398107.2 1.79859063570731e-16 1.38420799201712e-16 4.14375047887053e-17 501187.2 1.79846122196239e-16 1.3841641640562e-16 4.14284673226808e-17 630957.3 1.79825801922587e-16 1.38409546276329e-16 4.141428814615e-17 794328.2 1.79794099814518e-16 1.38398853815716e-16 4.13922004627943e-17 1000000 1.7974513638958e-16 1.38382326398439e-16 4.13580990048258e-17 1258925 1.79670719107064e-16 1.38357247563575e-16 4.13062023183739e-17 1584893 1.79559883877488e-16 1.38319803058652e-16 4.12289643256718e-17 1995262 1.7940030324824e-16 1.38265947545408e-16 4.11177164238156e-17 2511886 1.79180927065075e-16 1.3819185384868e-16 4.0964812390979e-17 3162278 1.78897983636149e-16 1.38096297084611e-16 4.07676388432091e-17 3981072 1.78561780350701e-16 1.37982801206068e-16 4.05333243699865e-17 5011872 1.78198896327729e-16 1.3786031254594e-16 4.02803757887102e-17 6309573 1.77845664409691e-16 1.37741075502336e-16 4.00341877175811e-17 7943282 1.77534813007364e-16 1.37636127373588e-16 3.98175381283094e-17 10000000 1.77284600969379e-16 1.37551664919453e-16 3.96431567465277e-17 12589250 1.77097413416387e-16 1.37488480346364e-16 3.95126506031097e-17 15848930 1.76964629592646e-16 1.37443638624538e-16 3.94201291276923e-17 19952620 1.76874179915676e-16 1.37413084787765e-16 3.9357087669092e-17 25118860 1.76814150171436e-16 1.37392874980854e-16 3.93152536727762e-17 31622780 1.76774997039303e-16 1.37379609181261e-16 3.92879802980323e-17 39810720 1.76749821501251e-16 1.37371099186047e-16 3.92704181558394e-17 50118720 1.76733725246081e-16 1.37365687504917e-16 3.92592113405747e-17 63095730 1.76723483065839e-16 1.37362230834036e-16 3.92520559757896e-17 79432820 1.76716966370782e-16 1.37360025490788e-16 3.92475219843501e-17 100000000 1.76712916413793e-16 1.37358625888977e-16 3.92446486845199e-17 tmpk8ny_4pz/tests/bsimsoi/nmos/reference/dcSweep01.standard0000644000175000017500000000725213546075722024164 0ustar carstencarstenV(d) I(d) 1.000000e-01 1.789308e-13 2.000000e-01 2.899051e-13 3.000000e-01 4.310282e-13 4.000000e-01 6.042801e-13 5.000000e-01 8.130390e-13 6.000000e-01 1.062778e-12 7.000000e-01 1.360203e-12 8.000000e-01 1.712858e-12 9.000000e-01 2.129013e-12 1.000000e+00 2.617708e-12 1.100000e+00 3.188947e-12 1.200000e+00 3.854294e-12 1.300000e+00 4.629387e-12 1.400000e+00 5.545876e-12 1.500000e+00 6.701330e-12 1.600000e+00 8.368638e-12 1.000000e-01 1.260908e-08 2.000000e-01 2.123638e-08 3.000000e-01 3.383739e-08 4.000000e-01 5.207216e-08 5.000000e-01 7.773994e-08 6.000000e-01 1.129282e-07 7.000000e-01 1.600570e-07 8.000000e-01 2.220518e-07 9.000000e-01 3.029209e-07 1.000000e+00 4.093930e-07 1.100000e+00 5.550268e-07 1.200000e+00 7.668972e-07 1.300000e+00 1.090293e-06 1.400000e+00 1.574731e-06 1.500000e+00 2.261906e-06 1.600000e+00 3.190903e-06 1.000000e-01 4.002699e-05 2.000000e-01 7.197073e-05 3.000000e-01 9.710855e-05 4.000000e-01 1.165604e-04 5.000000e-01 1.312070e-04 6.000000e-01 1.420461e-04 7.000000e-01 1.505450e-04 8.000000e-01 1.579522e-04 9.000000e-01 1.650652e-04 1.000000e+00 1.720647e-04 1.100000e+00 1.789170e-04 1.200000e+00 1.855652e-04 1.300000e+00 1.920581e-04 1.400000e+00 1.984317e-04 1.500000e+00 2.047289e-04 1.600000e+00 2.109907e-04 1.000000e-01 1.527918e-13 2.000000e-01 2.464243e-13 3.000000e-01 3.665583e-13 4.000000e-01 5.147983e-13 5.000000e-01 6.936413e-13 6.000000e-01 9.071297e-13 7.000000e-01 1.160350e-12 8.000000e-01 1.459125e-12 9.000000e-01 1.809871e-12 1.000000e+00 2.219563e-12 1.100000e+00 2.695772e-12 1.200000e+00 3.246762e-12 1.300000e+00 3.881744e-12 1.400000e+00 4.611579e-12 1.500000e+00 5.450975e-12 1.600000e+00 6.424923e-12 1.000000e-01 6.533852e-11 2.000000e-01 1.268863e-10 3.000000e-01 2.341749e-10 4.000000e-01 4.181669e-10 5.000000e-01 7.250477e-10 6.000000e-01 1.223151e-09 7.000000e-01 2.010886e-09 8.000000e-01 3.226296e-09 9.000000e-01 5.058596e-09 1.000000e+00 7.762676e-09 1.100000e+00 1.168059e-08 1.200000e+00 1.728578e-08 1.300000e+00 2.531133e-08 1.400000e+00 3.720775e-08 1.500000e+00 5.692191e-08 1.600000e+00 9.827982e-08 1.000000e-01 4.377955e-05 2.000000e-01 7.715505e-05 3.000000e-01 1.020519e-04 4.000000e-01 1.200370e-04 5.000000e-01 1.324365e-04 6.000000e-01 1.412528e-04 7.000000e-01 1.482596e-04 8.000000e-01 1.545886e-04 9.000000e-01 1.610377e-04 1.000000e+00 1.679176e-04 1.100000e+00 1.751708e-04 1.200000e+00 1.826787e-04 1.300000e+00 1.903605e-04 1.400000e+00 1.982473e-04 1.500000e+00 2.063660e-04 1.600000e+00 2.147523e-04 1.000000e-01 1.246568e-10 2.000000e-01 1.404667e-10 3.000000e-01 1.415609e-10 4.000000e-01 1.416631e-10 5.000000e-01 1.417491e-10 6.000000e-01 1.419310e-10 7.000000e-01 1.422955e-10 8.000000e-01 1.429657e-10 9.000000e-01 1.441117e-10 1.000000e+00 1.459540e-10 1.100000e+00 1.487642e-10 1.200000e+00 1.528621e-10 1.300000e+00 1.586097e-10 1.400000e+00 1.664029e-10 1.500000e+00 1.766625e-10 1.600000e+00 1.898246e-10 1.000000e-01 1.001632e-06 2.000000e-01 1.276656e-06 3.000000e-01 1.482664e-06 4.000000e-01 1.683528e-06 5.000000e-01 1.888976e-06 6.000000e-01 2.103076e-06 7.000000e-01 2.328366e-06 8.000000e-01 2.566941e-06 9.000000e-01 2.821189e-06 1.000000e+00 3.095096e-06 1.100000e+00 3.397862e-06 1.200000e+00 3.753902e-06 1.300000e+00 4.229740e-06 1.400000e+00 4.973596e-06 1.500000e+00 6.187299e-06 1.600000e+00 7.976295e-06 1.000000e-01 3.047115e-05 2.000000e-01 5.633043e-05 3.000000e-01 7.801510e-05 4.000000e-01 9.598978e-05 5.000000e-01 1.106507e-04 6.000000e-01 1.223639e-04 7.000000e-01 1.315448e-04 8.000000e-01 1.387880e-04 9.000000e-01 1.447182e-04 1.000000e+00 1.498351e-04 1.100000e+00 1.545914e-04 1.200000e+00 1.594670e-04 1.300000e+00 1.648264e-04 1.400000e+00 1.706749e-04 1.500000e+00 1.768033e-04 1.600000e+00 1.830468e-04 tmpk8ny_4pz/tests/bsimsoi/nmos/reference/noise01.standard0000644000175000017500000000634413546075722023710 0ustar carstencarstenFreq N(d) 1000 3.886811e-19 1258.925 3.609539e-19 1584.893 3.395181e-19 1995.262 3.229411e-19 2511.886 3.101131e-19 3162.278 3.00173e-19 3981.072 2.924498e-19 5011.872 2.86416e-19 6309.573 2.816503e-19 7943.282 2.77805e-19 10000 2.745773e-19 12589.25 2.716801e-19 15848.93 2.688093e-19 19952.62 2.656058e-19 25118.86 2.616091e-19 31622.78 2.562054e-19 39810.72 2.485854e-19 50118.72 2.377471e-19 63095.73 2.22615e-19 79432.82 2.023631e-19 100000 1.769477e-19 125892.5 1.476195e-19 158489.3 1.169345e-19 199526.2 8.797367e-20 251188.6 6.318828e-20 316227.8 4.369394e-20 398107.2 2.93551e-20 501187.2 1.931967e-20 630957.3 1.253758e-20 794328.2 8.061509e-21 1000000 5.153138e-21 1258925 3.282319e-21 1584893 2.08653e-21 1995262 1.325188e-21 2511886 8.415663e-22 3162278 5.347361e-22 3981072 3.401681e-22 5011872 2.167858e-22 6309573 1.38512e-22 7943282 8.881736e-23 10000000 5.723314e-23 12589250 3.713119e-23 15848930 2.431485e-23 19952620 1.612613e-23 25118860 1.088065e-23 31622780 7.510207e-24 39810720 5.336665e-24 50118720 3.928992e-24 63095730 3.012791e-24 79432820 2.413055e-24 100000000 2.017913e-24 1000 2.426038e-18 1258.925 1.935172e-18 1584.893 1.555802e-18 1995.262 1.2626e-18 2511.886 1.035995e-18 3162.278 8.608567e-19 3981.072 7.254939e-19 5011.872 6.208681e-19 6309.573 5.399921e-19 7943.282 4.774626e-19 10000 4.290983e-19 12589.25 3.916597e-19 15848.93 3.626304e-19 19952.62 3.400451e-19 25118.86 3.223537e-19 31622.78 3.083085e-19 39810.72 2.968694e-19 50118.72 2.871167e-19 63095.73 2.781684e-19 79432.82 2.690994e-19 100000 2.588731e-19 125892.5 2.463155e-19 158489.3 2.301958e-19 199526.2 2.094997e-19 251188.6 1.839248e-19 316227.8 1.544149e-19 398107.2 1.23278e-19 501187.2 9.352606e-20 630957.3 6.77285e-20 794328.2 4.719383e-20 1000000 3.193595e-20 1258925 2.116758e-20 1584893 1.383852e-20 1995262 8.970605e-21 2511886 5.787955e-21 3162278 3.727273e-21 3981072 2.40047e-21 5011872 1.548532e-21 6309573 1.001922e-21 7943282 6.509718e-22 10000000 4.252316e-22 12589250 2.796244e-22 15848930 1.853597e-22 19952620 1.240578e-22 25118860 8.397817e-23 31622780 5.761092e-23 39810720 4.014216e-23 50118720 2.84776e-23 63095730 2.062142e-23 79432820 1.528101e-23 100000000 1.161508e-23 1000 8.323392e-18 1258.925 6.487104e-18 1584.893 5.067912e-18 1995.262 3.971077e-18 2511.886 3.123377e-18 3162.278 2.468224e-18 3981.072 1.96188e-18 5011.872 1.570544e-18 6309.573 1.268089e-18 7943.282 1.034323e-18 10000 8.536375e-19 12589.25 7.139653e-19 15848.93 6.059743e-19 19952.62 5.224427e-19 25118.86 4.577741e-19 31622.78 4.076199e-19 39810.72 3.685825e-19 50118.72 3.379794e-19 63095.73 3.1365e-19 79432.82 2.937941e-19 100000 2.768309e-19 125892.5 2.612785e-19 158489.3 2.456695e-19 199526.2 2.285414e-19 251188.6 2.08574e-19 316227.8 1.849359e-19 398107.2 1.577752e-19 501187.2 1.285373e-19 630957.3 9.96792e-20 794328.2 7.374309e-20 1000000 5.239548e-20 1258925 3.607766e-20 1584893 2.429513e-20 1995262 1.612743e-20 2511886 1.061886e-20 3162278 6.96768e-21 3981072 4.57193e-21 5011872 3.007758e-21 6309573 1.987913e-21 7943282 1.322143e-21 10000000 8.861153e-22 12589250 5.99183e-22 15848930 4.09213e-22 19952620 2.825322e-22 25118860 1.973656e-22 31622780 1.395952e-22 39810720 1.000321e-22 50118720 7.266612e-23 63095730 5.354266e-23 79432820 4.004197e-23 100000000 3.041499e-23 tmpk8ny_4pz/tests/bsimsoi/nmos/reference/acVd02.standard0000644000175000017500000000332413546075722023444 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 0.1 4.264037e-05 2.257028e-04 1.08292829320756e-16 8.95884842564731e-17 0.2 8.079254e-05 1.605346e-04 1.21039832772063e-16 7.09067491983118e-17 0.3 1.132572e-04 1.108388e-04 1.32008635741914e-16 5.15411439549896e-17 0.4 1.356023e-04 8.023475e-05 1.36298336903369e-16 4.30990916692671e-17 0.5 1.461278e-04 6.754099e-05 1.37500637228898e-16 4.14624012261261e-17 0.6 1.510933e-04 6.328222e-05 1.37974437357181e-16 4.16129812668963e-17 0.7 1.551108e-04 6.127224e-05 1.3821143742135e-16 4.19533113590421e-17 0.8 1.592797e-04 5.963311e-05 1.3832903745319e-16 4.2135771408444e-17 0.9 1.632949e-04 5.816691e-05 1.3839983747236e-16 4.21721114182832e-17 1 1.668892e-04 5.685556e-05 1.3846993749134e-16 4.20770113925344e-17 1.1 1.700095e-04 5.616502e-05 1.38477737493452e-16 4.18729213372762e-17 1.2 1.726973e-04 5.585255e-05 1.38460037488659e-16 4.14049412105685e-17 0.1 1.974074e-05 2.172062e-04 1.07511129109107e-16 9.01798544165891e-17 0.2 3.996884e-05 1.696340e-04 1.17378031780614e-16 7.72644109196764e-17 0.3 6.019029e-05 1.290328e-04 1.2894473491235e-16 6.00110362482499e-17 0.4 7.962655e-05 9.491892e-05 1.37104637121679e-16 4.62592625248972e-17 0.5 9.628051e-05 6.944631e-05 1.39975537898988e-16 4.08774810677564e-17 0.6 1.084545e-04 5.335814e-05 1.40740238106034e-16 3.92958406395203e-17 0.7 1.170749e-04 4.344342e-05 1.40968638167874e-16 3.87703604972443e-17 0.8 1.234045e-04 3.720460e-05 1.41043138188045e-16 3.855502043894e-17 0.9 1.282430e-04 3.354116e-05 1.41046338188912e-16 3.84479304099449e-17 1 1.320696e-04 3.245978e-05 1.40969838168199e-16 3.83876203936157e-17 1.1 1.351792e-04 3.487628e-05 1.4075473810996e-16 3.83407203809173e-17 1.2 1.377541e-04 4.112760e-05 1.40359938003066e-16 3.82116503459711e-17 tmpk8ny_4pz/tests/bsimsoi/nmos/reference/acFreq01.standard0000644000175000017500000000712113546075722023766 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.69864797522435e-16 1.27288224188792e-16 4.25766369956203e-17 1258.925 1.69864976901627e-16 1.27288303665127e-16 4.25766479522388e-17 1584.893 1.69864936126527e-16 1.272882652082e-16 4.25766407923295e-17 1995.262 1.69864863688377e-16 1.27288251015761e-16 4.25766366025472e-17 2511.886 1.69864871482661e-16 1.27288231691147e-16 4.25766397915141e-17 3162.278 1.69864847289163e-16 1.2728820060508e-16 4.25766265524005e-17 3981.072 1.69864865603859e-16 1.27288190234113e-16 4.25766353918344e-17 5011.872 1.69864864506911e-16 1.27288242139083e-16 4.25766223678278e-17 6309.573 1.69864878585558e-16 1.27288226689497e-16 4.25766266717007e-17 7943.282 1.69864871009135e-16 1.27288217512837e-16 4.25766334598772e-17 10000 1.69864797522435e-16 1.27288208273298e-16 4.25766210801259e-17 12589.25 1.6986485048032e-16 1.27288303665127e-16 4.25766226679776e-17 15848.93 1.69864835706535e-16 1.27288164788208e-16 4.25766006243325e-17 19952.62 1.69864783921938e-16 1.27288171249323e-16 4.25765807660404e-17 25118.86 1.69864744761191e-16 1.27288168330412e-16 4.25765447504116e-17 31622.78 1.69864595643129e-16 1.27288099946666e-16 4.25764755647804e-17 39810.72 1.69864425846835e-16 1.27288030322468e-16 4.25763955243669e-17 50118.72 1.69864229395148e-16 1.27287924583201e-16 4.257624130077e-17 63095.73 1.69863819162423e-16 1.2728774742665e-16 4.25760465114124e-17 79432.82 1.69863187949763e-16 1.27287436092414e-16 4.25756717116642e-17 100000 1.69862251043346e-16 1.27286982780236e-16 4.25751250236609e-17 125892.5 1.69860678577211e-16 1.27286280924225e-16 4.25742585895489e-17 158489.3 1.69858207987033e-16 1.27285152188434e-16 4.25728449166149e-17 199526.2 1.69854254752091e-16 1.2728330549659e-16 4.25706381663917e-17 251188.6 1.69848080887897e-16 1.27280438320747e-16 4.25671420173438e-17 316227.8 1.69838273468027e-16 1.27275869949439e-16 4.25615982512811e-17 398107.2 1.69822848819136e-16 1.27268720991335e-16 4.25528885125525e-17 501187.2 1.69798590594442e-16 1.27257470974166e-16 4.25391507738109e-17 630957.3 1.69760525406735e-16 1.27239795917599e-16 4.25176521171708e-17 794328.2 1.6970129366725e-16 1.27212319549699e-16 4.24841653764868e-17 1000000 1.69609990458545e-16 1.27169972066075e-16 4.24325699411335e-17 1258925 1.69471680217584e-16 1.27105751298763e-16 4.23543234428984e-17 1584893 1.69266432971533e-16 1.27010503509087e-16 4.22383559637677e-17 1995262 1.68972915375998e-16 1.26874342967743e-16 4.20724169931563e-17 2511886 1.68573136179062e-16 1.2668883913844e-16 4.18464263293382e-17 3162278 1.68063766298343e-16 1.26452433798687e-16 4.15584868326251e-17 3981072 1.67467270332522e-16 1.26175644941964e-16 4.12213042446707e-17 5011872 1.66833920640358e-16 1.25881755384337e-16 4.08632496092012e-17 6309573 1.66227651942942e-16 1.25600439513214e-16 4.052053860975e-17 7943282 1.65702324561408e-16 1.25356666445665e-16 4.02235762019617e-17 10000000 1.65284954880023e-16 1.25162980487203e-16 3.99876476208501e-17 12589250 1.64975759299994e-16 1.25019496332915e-16 3.98128127107675e-17 15848930 1.64758077410552e-16 1.24918453806405e-16 3.96897869334146e-17 19952620 1.64610488868754e-16 1.24850030298136e-16 3.96063737418738e-17 25118860 1.64512916922189e-16 1.24804744323714e-16 3.9551215385835e-17 31622780 1.64449424648684e-16 1.24775263314753e-16 3.95153324234397e-17 39810720 1.64408600320772e-16 1.24756309158891e-16 3.94922635809423e-17 50118720 1.64382548013128e-16 1.2474423846122e-16 3.9477531009105e-17 63095730 1.64365968026312e-16 1.24736555619485e-16 3.94681530710239e-17 79432820 1.64355456298443e-16 1.24731670362199e-16 3.94622122364688e-17 100000000 1.64348805504756e-16 1.24728582985528e-16 3.94584574350695e-17 tmpk8ny_4pz/tests/bsimsoi/nmos/reference/dcSweep03.standard0000644000175000017500000000725213546075722024166 0ustar carstencarstenV(d) I(d) 1.000000e-01 1.789308e-13 2.000000e-01 2.899051e-13 3.000000e-01 4.310282e-13 4.000000e-01 6.042801e-13 5.000000e-01 8.130390e-13 6.000000e-01 1.062778e-12 7.000000e-01 1.360203e-12 8.000000e-01 1.712858e-12 9.000000e-01 2.129013e-12 1.000000e+00 2.617708e-12 1.100000e+00 3.188947e-12 1.200000e+00 3.854294e-12 1.300000e+00 4.629387e-12 1.400000e+00 5.545876e-12 1.500000e+00 6.701330e-12 1.600000e+00 8.368638e-12 1.000000e-01 1.261281e-08 2.000000e-01 2.124881e-08 3.000000e-01 3.386676e-08 4.000000e-01 5.213124e-08 5.000000e-01 7.784738e-08 6.000000e-01 1.131100e-07 7.000000e-01 1.603481e-07 8.000000e-01 2.224989e-07 9.000000e-01 3.035888e-07 1.000000e+00 4.103807e-07 1.100000e+00 5.565090e-07 1.200000e+00 7.691980e-07 1.300000e+00 1.093960e-06 1.400000e+00 1.580498e-06 1.500000e+00 2.270648e-06 1.600000e+00 3.203666e-06 1.000000e-01 4.011359e-05 2.000000e-01 7.211780e-05 3.000000e-01 9.729560e-05 4.000000e-01 1.167723e-04 5.000000e-01 1.314305e-04 6.000000e-01 1.422725e-04 7.000000e-01 1.507743e-04 8.000000e-01 1.581891e-04 9.000000e-01 1.653156e-04 1.000000e+00 1.723325e-04 1.100000e+00 1.792036e-04 1.200000e+00 1.858705e-04 1.300000e+00 1.923819e-04 1.400000e+00 1.987735e-04 1.500000e+00 2.050884e-04 1.600000e+00 2.113675e-04 1.000000e-01 1.527918e-13 2.000000e-01 2.464243e-13 3.000000e-01 3.665583e-13 4.000000e-01 5.147983e-13 5.000000e-01 6.936413e-13 6.000000e-01 9.071297e-13 7.000000e-01 1.160350e-12 8.000000e-01 1.459125e-12 9.000000e-01 1.809871e-12 1.000000e+00 2.219563e-12 1.100000e+00 2.695772e-12 1.200000e+00 3.246762e-12 1.300000e+00 3.881744e-12 1.400000e+00 4.611579e-12 1.500000e+00 5.450975e-12 1.600000e+00 6.424923e-12 1.000000e-01 6.537081e-11 2.000000e-01 1.270125e-10 3.000000e-01 2.345242e-10 4.000000e-01 4.189926e-10 5.000000e-01 7.268139e-10 6.000000e-01 1.226666e-09 7.000000e-01 2.017492e-09 8.000000e-01 3.238141e-09 9.000000e-01 5.078992e-09 1.000000e+00 7.796593e-09 1.100000e+00 1.173536e-08 1.200000e+00 1.737227e-08 1.300000e+00 2.544673e-08 1.400000e+00 3.742458e-08 1.500000e+00 5.730328e-08 1.600000e+00 9.911536e-08 1.000000e-01 4.393320e-05 2.000000e-01 7.740888e-05 3.000000e-01 1.023643e-04 4.000000e-01 1.203743e-04 5.000000e-01 1.327731e-04 6.000000e-01 1.415840e-04 7.000000e-01 1.485898e-04 8.000000e-01 1.549263e-04 9.000000e-01 1.613944e-04 1.000000e+00 1.683035e-04 1.100000e+00 1.755916e-04 1.200000e+00 1.831367e-04 1.300000e+00 1.908560e-04 1.400000e+00 1.987802e-04 1.500000e+00 2.069354e-04 1.600000e+00 2.153570e-04 1.000000e-01 1.246568e-10 2.000000e-01 1.404667e-10 3.000000e-01 1.415609e-10 4.000000e-01 1.416631e-10 5.000000e-01 1.417491e-10 6.000000e-01 1.419310e-10 7.000000e-01 1.422955e-10 8.000000e-01 1.429657e-10 9.000000e-01 1.441117e-10 1.000000e+00 1.459540e-10 1.100000e+00 1.487642e-10 1.200000e+00 1.528621e-10 1.300000e+00 1.586097e-10 1.400000e+00 1.664029e-10 1.500000e+00 1.766625e-10 1.600000e+00 1.898246e-10 1.000000e-01 1.001653e-06 2.000000e-01 1.276685e-06 3.000000e-01 1.482700e-06 4.000000e-01 1.683569e-06 5.000000e-01 1.889022e-06 6.000000e-01 2.103127e-06 7.000000e-01 2.328423e-06 8.000000e-01 2.567004e-06 9.000000e-01 2.821259e-06 1.000000e+00 3.095173e-06 1.100000e+00 3.397951e-06 1.200000e+00 3.754010e-06 1.300000e+00 4.229895e-06 1.400000e+00 4.973865e-06 1.500000e+00 6.187820e-06 1.600000e+00 7.977258e-06 1.000000e-01 3.047187e-05 2.000000e-01 5.633183e-05 3.000000e-01 7.801696e-05 4.000000e-01 9.599200e-05 5.000000e-01 1.106532e-04 6.000000e-01 1.223665e-04 7.000000e-01 1.315475e-04 8.000000e-01 1.387908e-04 9.000000e-01 1.447210e-04 1.000000e+00 1.498382e-04 1.100000e+00 1.545951e-04 1.200000e+00 1.594721e-04 1.300000e+00 1.648340e-04 1.400000e+00 1.706858e-04 1.500000e+00 1.768178e-04 1.600000e+00 1.830652e-04 tmpk8ny_4pz/tests/bsimsoi/nmos/qaSpec0000644000175000017500000001126713546075722020111 0ustar carstencarsten // // CMC test specification for bsimsoi (version 4.4) // // // Simulator specific information // These arguments are added to the model card // specification to invoke the desired model in // different simulators (which can have different // names or levels for the same model) and to switch // between nType and pType polarities. // It is assumed that there are no polarity specific // parameters. // `ifdef spice nTypeSelectionArguments nmos level=10 pTypeSelectionArguments pmos level=10 `endif `ifdef ngspice nTypeSelectionArguments nmos level=10 pTypeSelectionArguments pmos level=10 `endif `ifdef hspice nTypeSelectionArguments nmos level=70 version=4.4 pTypeSelectionArguments pmos level=70 version=4.4 `endif // // General test-independent information // keyLetter m pins d g s b linearScale w l ps pd areaScale as ad temperature 27 -50 150 checkPolarity no symmetricPins d s scaleParameters m // // Specific tests // test dcSweep01 biases V(s)=0 V(b)=0 biasList V(g)=-1.6,0.4,1.6 biasSweep V(d)=0.1,1.6,0.1 outputs I(d) instanceParameters w=0.2e-6 l=0.04e-6 modelParameters parameters/nmosParameters modelParameters soimod=0 mobmod=1 test dcSweep02 biases V(s)=0 V(b)=0 biasList V(g)=-1.6,0.4,1.6 biasSweep V(d)=0.1,1.6,0.1 outputs I(d) instanceParameters w=0.2e-6 l=0.04e-6 modelParameters parameters/nmosParameters modelParameters soimod=1 mobmod=2 test dcSweep03 biases V(s)=0 V(b)=0 biasList V(g)=-1.6,0.4,1.6 biasSweep V(d)=0.1,1.6,0.1 outputs I(d) instanceParameters w=0.2e-6 l=0.04e-6 modelParameters parameters/nmosParameters modelParameters soimod=3 mobmod=3 test acVd01 temperature 27 150 biases V(s)=0 V(b)=0 V(g)=1.2 biasSweep V(d)=0.1,1.2,0.1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters w=0.2e-6 l=0.04e-6 modelParameters parameters/nmosParameters modelParameters soimod=0 capmod=2 test acVd02 temperature 27 150 biases V(s)=0 V(b)=0 V(g)=1.2 biasSweep V(d)=0.1,1.2,0.1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters w=0.2e-6 l=0.04e-6 modelParameters parameters/nmosParameters modelParameters soimod=1 capmod=3 test acFreq01 temperature 27 biases V(s)=0 V(b)=0 V(d)=1.2 V(g)=1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=0.2e-6 l=0.04e-6 modelParameters parameters/nmosParameters modelParameters soimod=0 capmod=2 test acFreq02 temperature 27 biases V(s)=0 V(b)=0 V(d)=1.2 V(g)=1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=0.2e-6 l=0.04e-6 modelParameters parameters/nmosParameters modelParameters soimod=3 capmod=3 test noise01 temperature 27 biases V(s)=0 V(b)=0 V(d)=1.0 biasList V(g)=0.6,0.8,1.0 freq dec 10 1e3 1e8 outputs N(d) instanceParameters w=0.2e-6 l=0.04e-6 modelParameters parameters/nmosParameters modelParameters soimod=0 fnoimod=0 tnoimod=0 test noise02 temperature 27 biases V(s)=0 V(b)=0 V(d)=1.0 biasList V(g)=0.6,0.8,1.0 freq dec 10 1e3 1e8 outputs N(d) instanceParameters w=0.2e-6 l=0.04e-6 modelParameters parameters/nmosParameters modelParameters soimod=1 fnoimod=1 tnoimod=1 test noise03 temperature 27 biases V(s)=0 V(b)=0 V(d)=1.0 biasList V(g)=0.6,0.8,1.0 freq dec 10 1e3 1e8 outputs N(d) instanceParameters w=0.2e-6 l=0.04e-6 modelParameters parameters/nmosParameters modelParameters soimod=3 fnoimod=1 tnoimod=2 tmpk8ny_4pz/tests/bsimsoi/nmos/run0000755000175000017500000000023613546075722017476 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmpk8ny_4pz/tests/bsimsoi/pmos/0000755000175000017500000000000013546075722016745 5ustar carstencarstentmpk8ny_4pz/tests/bsimsoi/pmos/parameters/0000755000175000017500000000000013546075722021110 5ustar carstencarstentmpk8ny_4pz/tests/bsimsoi/pmos/parameters/pmosParameters0000644000175000017500000001176013546075722024042 0ustar carstencarsten+ binunit = (1) + mobmod = (1) + capmod = (3) + shmod = (0) + paramchk= (0) + soimod = (0) + igcmod = (1) + igbmod = (1) + tsi = (9e-008) + tox = (2e-009) + toxref = (2e-009) + tbox = (4e-007) + toxqm = (2e-009) + tnom = (27) + rbody = (0) + rbsh = (0) + rsh = (0) + dtoxcv = (0) + xj = (7e-008) + rhalo = (0) + nch = (1e+019) + ngate = (3e+020) + wint = (5.5544e-009) + lint = (2e-009) + xpart = (1) + toxm = (2e-009) + k1 = (0.6) + k2 = (1e-010) + k3 = (0.231) + k3b = (0) + kb1 = (1) + w0 = (0) + dvt0 = (2.2) + dvt1 = (0.53) + dvt2 = (0.127) + dvt0w = (0) + dvt1w = (0) + dvt2w = (0) + eta0 = (1.7958) + etab = (-0.07) + dsub = (1.7577) + voff = (-0.10382) + nfactor = (1) + cdsc = (0.00024) + cdscb = (0) + cdscd = (0) + cit = (0) + u0 = (200) + ua = (2.25e-009) + ub = (5.9e-019) + uc = (2.9e-011) + prwg = (2.5) + prwb = (0.76) + wr = (1) + rdsw = (0.695) + a0 = (0) + ags = (0) + a1 = (0) + a2 = (0.7) + b0 = (0) + b1 = (0) + vsat = (99820) + keta = (0) + ketas = (0) + dwg = (0) + dwb = (0) + dwbc = (0) + pclm = (1.3) + pdiblc1 = (0.39) + pdiblc2 = (0.05) + pdiblcb = (0.89459) + drout = (2) + pvag = (0.116) + delta = (0.01) + vevb = (0.075) + vecb = (0.026) + alpha0 = (5.0707e-009) + beta0 = (0.0007605) + beta1 = (0.0002767) + beta2 = (0.094512) + alphagb1= (0.35) + alphagb2= (0.43) + betagb1 = (0.03) + betagb2 = (0.05) + fbjtii = (0) + vdsatii0= (0.72051) + tii = (-0.5062) + lii = (2.835e-009) + esatii = (2213500) + sii0 = (2.0387) + sii1 = (0.04093) + sii2 = (9.8e-011) + siid = (0.008025) + aigc = (1) + bigc = (0.05022) + cigc = (0.075) + aigsd = (0.43) + bigsd = (0.054) + cigsd = (0.075) + nigc = (1) + poxedge = (1) + pigcd = (1) + agidl = (0) + bgidl = (0) + ebg = (1.2) + vgb1 = (300) + vgb2 = (17) + voxh = (1.5) + deltavox= (0.004) + ntox = (1) + ntun = (1) + ndiode = (1) + nrecf0 = (1.5) + nrecr0 = (2) + isbjt = (1e-006) + isdif = (0.0001) + isrec = (0.01) + istun = (5e-005) + vrec0 = (1) + vtun0 = (0) + nbjt = (0.7888) + lbjt0 = (1.4381e-006) + vabjt = (0.001) + aely = (1.0819e+010) + ahli = (0) + lpe0 = (3e-009) + cjswg = (1e-010) + mjswg = (0.5) + pbswg = (0.7) + tt = (4e-010) + ldif0 = (1) + cgso = (5e-011) + cgdo = (5e-011) + dlc = (0) + dwc = (0) + dlcb = (0) + dlbg = (0) + fbody = (1) + clc = (1e-008) + cle = (0) + cf = (0) + csdmin = (0) + asd = (0.3) + csdesw = (8.73e-011) + delvt = (-0.031456) + acde = (1) + moin = (25) + ckappa = (3.2309) + cgdl = (1.5533e-010) + cgsl = (1.5533e-010) + ndif = (-1) + kt1 = (-0.11573) + kt1l = (-4e-010) + kt2 = (-0.25) + ute = (-1.2189) + ua1 = (5.005e-012) + ub1 = (-8.835e-019) + uc1 = (-6e-011) + prt = (51.149) + rth0 = (0.02) + cth0 = (1e-005) + at = (8479) + tpbswg = (5.86e-005) + tcjswg = (0.00092578) + ntrecf = (-0.55338) + ntrecr = (-0.15688) + xbjt = (1.0968) + xdif = (1.4551) + xrec = (2.6e-011) + xtun = (25.308) + fnoimod = (0) + tnoimod = (2) + af = (2.15) + ef = (1.119) + kf = (1.67e-026) + w0flk = (0.001) tmpk8ny_4pz/tests/bsimsoi/pmos/reference/0000755000175000017500000000000013546075722020703 5ustar carstencarstentmpk8ny_4pz/tests/bsimsoi/pmos/reference/noise03.standard0000644000175000017500000000635013546075722023711 0ustar carstencarstenFreq N(d) 1000 2.729064e-19 1258.925 2.714765e-19 1584.893 2.703649e-19 1995.262 2.694955e-19 2511.886 2.688073e-19 3162.278 2.682496e-19 3981.072 2.677776e-19 5011.872 2.67348e-19 6309.573 2.669135e-19 7943.282 2.664157e-19 10000 2.657751e-19 12589.25 2.648773e-19 15848.93 2.635519e-19 19952.62 2.615427e-19 25118.86 2.584689e-19 31622.78 2.537786e-19 39810.72 2.4671e-19 50118.72 2.362977e-19 63095.73 2.214949e-19 79432.82 2.014976e-19 100000 1.762789e-19 125892.5 1.471027e-19 158489.3 1.165352e-19 199526.2 8.766516e-20 251188.6 6.294995e-20 316227.8 4.350985e-20 398107.2 2.921292e-20 501187.2 1.92099e-20 630957.3 1.245285e-20 794328.2 7.996125e-21 1000000 5.10271e-21 1258925 3.243449e-21 1584893 2.056594e-21 1995262 1.302156e-21 2511886 8.238702e-22 3162278 5.211639e-22 3981072 3.297831e-22 5011872 2.088641e-22 6309573 1.324941e-22 7943282 8.42708e-23 10000000 5.382372e-23 12589250 3.460062e-23 15848930 2.24635e-23 19952620 1.479972e-23 25118860 9.959946e-24 31622780 6.903054e-24 39810720 4.971845e-24 50118720 3.75146e-24 63095730 2.980007e-24 79432820 2.49214e-24 100000000 2.183458e-24 1000 3.619615e-19 1258.925 3.399332e-19 1584.893 3.229074e-19 1995.262 3.097474e-19 2511.886 2.995742e-19 3162.278 2.917079e-19 3981.072 2.856225e-19 5011.872 2.809097e-19 6309.573 2.772524e-19 7943.282 2.74402e-19 10000 2.721612e-19 12589.25 2.703696e-19 15848.93 2.688903e-19 19952.62 2.675973e-19 25118.86 2.663618e-19 31622.78 2.650347e-19 39810.72 2.634249e-19 50118.72 2.612688e-19 63095.73 2.581917e-19 79432.82 2.536603e-19 100000 2.469409e-19 125892.5 2.370936e-19 158489.3 2.230686e-19 199526.2 2.039914e-19 251188.6 1.796677e-19 316227.8 1.511247e-19 398107.2 1.207352e-19 501187.2 9.156087e-20 630957.3 6.620971e-20 794328.2 4.602005e-20 1000000 3.10288e-20 1258925 2.04665e-20 1584893 1.329671e-20 1995262 8.551888e-21 2511886 5.464369e-21 3162278 3.47721e-21 3981072 2.207229e-21 5011872 1.399207e-21 6309573 8.865388e-22 7943282 5.618196e-22 10000000 3.563526e-22 12589250 2.264138e-22 15848930 1.442585e-22 19952620 9.231539e-23 25118860 5.946881e-23 31622780 3.86917e-23 39810720 2.554332e-23 50118720 1.72178e-23 63095730 1.194223e-23 79432820 8.596265e-24 100000000 6.471765e-24 1000 5.757758e-19 1258.925 4.992921e-19 1584.893 4.401806e-19 1995.262 3.944951e-19 2511.886 3.591855e-19 3162.278 3.318945e-19 3981.072 3.107995e-19 5011.872 2.944917e-19 6309.573 2.818811e-19 7943.282 2.721238e-19 10000 2.645651e-19 12589.25 2.586955e-19 15848.93 2.54115e-19 19952.62 2.505051e-19 25118.86 2.476046e-19 31622.78 2.451885e-19 39810.72 2.430458e-19 50118.72 2.409571e-19 63095.73 2.386653e-19 79432.82 2.358414e-19 100000 2.320415e-19 125892.5 2.266625e-19 158489.3 2.189161e-19 199526.2 2.078646e-19 251188.6 1.925935e-19 316227.8 1.725851e-19 398107.2 1.482296e-19 501187.2 1.211598e-19 630957.3 9.397723e-20 794328.2 6.933611e-20 1000000 4.898933e-20 1258925 3.344502e-20 1584893 2.226031e-20 1995262 1.455462e-20 2511886 9.403141e-21 3162278 6.027929e-21 3981072 3.845466e-21 5011872 2.446134e-21 6309573 1.553688e-21 7943282 9.863786e-22 10000000 6.264477e-22 12589250 3.983272e-22 15848930 2.538104e-22 19952620 1.622585e-22 25118860 1.042416e-22 31622780 6.745408e-23 39810720 4.410775e-23 50118720 2.9275e-23 63095730 1.983799e-23 79432820 1.382356e-23 100000000 9.982395e-24 tmpk8ny_4pz/tests/bsimsoi/pmos/reference/noise02.standard0000644000175000017500000000634413546075722023713 0ustar carstencarstenFreq N(d) 1000 2.65462e-19 1258.925 2.641403e-19 1584.893 2.631122e-19 1995.262 2.623071e-19 2511.886 2.616682e-19 3162.278 2.61148e-19 3981.072 2.60704e-19 5011.872 2.602945e-19 6309.573 2.598732e-19 7943.282 2.593817e-19 10000 2.587402e-19 12589.25 2.578325e-19 15848.93 2.564853e-19 19952.62 2.544382e-19 25118.86 2.513047e-19 31622.78 2.465266e-19 39810.72 2.393389e-19 50118.72 2.287844e-19 63095.73 2.138499e-19 79432.82 1.938066e-19 100000 1.687447e-19 125892.5 1.400453e-19 158489.3 1.10312e-19 199526.2 8.253931e-20 251188.6 5.899867e-20 316227.8 4.063282e-20 398107.2 2.720953e-20 501187.2 1.785954e-20 630957.3 1.156298e-20 794328.2 7.418492e-21 1000000 4.731398e-21 1258925 3.006214e-21 1584893 1.905559e-21 1995262 1.206163e-21 2511886 7.628712e-22 3162278 4.82353e-22 3981072 3.050162e-22 5011872 1.92977e-22 6309573 1.222179e-22 7943282 7.753858e-23 10000000 4.932954e-23 12589250 3.151963e-23 15848930 2.027486e-23 19952620 1.317458e-23 25118860 8.69069e-24 31622780 5.85859e-24 39810720 4.069402e-24 50118720 2.938771e-24 63095730 2.224058e-24 79432820 1.772077e-24 100000000 1.486103e-24 1000 3.557247e-19 1258.925 3.343928e-19 1584.893 3.179053e-19 1995.262 3.051612e-19 2511.886 2.953095e-19 3162.278 2.876917e-19 3981.072 2.817982e-19 5011.872 2.772338e-19 6309.573 2.73691e-19 7943.282 2.70929e-19 10000 2.687564e-19 12589.25 2.670171e-19 15848.93 2.655778e-19 19952.62 2.64315e-19 25118.86 2.631017e-19 31622.78 2.6179e-19 39810.72 2.601893e-19 50118.72 2.580364e-19 63095.73 2.549562e-19 79432.82 2.504153e-19 100000 2.436812e-19 125892.5 2.338185e-19 158489.3 2.197903e-19 199526.2 2.007474e-19 251188.6 1.76534e-19 316227.8 1.482163e-19 398107.2 1.181804e-19 501187.2 8.945542e-20 630957.3 6.458185e-20 794328.2 4.483021e-20 1000000 3.019717e-20 1258925 1.990407e-20 1584893 1.292492e-20 1995262 8.30977e-21 2511886 5.308134e-21 3162278 3.376875e-21 3981072 2.142878e-21 5011872 1.357855e-21 6309573 8.598218e-22 7943282 5.443896e-22 10000000 3.448063e-22 12589250 2.185914e-22 15848930 1.38792e-22 19952620 8.83391e-23 25118860 5.64352e-23 31622780 3.625459e-23 39810720 2.348383e-23 50118720 1.539751e-23 63095730 1.027358e-23 79432820 7.023846e-24 100000000 4.960484e-24 1000 5.666183e-19 1258.925 4.91467e-19 1584.893 4.333852e-19 1995.262 3.884955e-19 2511.886 3.53801e-19 3162.278 3.269854e-19 3981.072 3.062579e-19 5011.872 2.902341e-19 6309.573 2.778431e-19 7943.282 2.682556e-19 10000 2.608284e-19 12589.25 2.550606e-19 15848.93 2.505593e-19 19952.62 2.470113e-19 25118.86 2.441598e-19 31622.78 2.417833e-19 39810.72 2.396742e-19 50118.72 2.376159e-19 63095.73 2.353548e-19 79432.82 2.325656e-19 100000 2.288096e-19 125892.5 2.23491e-19 158489.3 2.158309e-19 199526.2 2.049039e-19 251188.6 1.898094e-19 316227.8 1.700416e-19 398107.2 1.459938e-19 501187.2 1.192855e-19 630957.3 9.248689e-20 794328.2 6.821188e-20 1000000 4.818038e-20 1258925 3.288483e-20 1584893 2.188335e-20 1995262 1.430596e-20 2511886 9.241186e-21 3162278 5.92319e-21 3981072 3.777896e-21 5011872 2.402467e-21 6309573 1.525294e-21 7943282 9.677054e-22 10000000 6.139466e-22 12589250 3.897399e-22 15848930 2.477035e-22 19952620 1.577232e-22 25118860 1.007025e-22 31622780 6.454665e-23 39810720 4.160128e-23 50118720 2.702331e-23 63095730 1.774841e-23 79432820 1.183731e-23 100000000 8.062159e-24 tmpk8ny_4pz/tests/bsimsoi/pmos/reference/dcSweep02.standard0000644000175000017500000000771213546075722024170 0ustar carstencarstenV(d) I(d) -1.000000e-01 -1.789307e-13 -2.000000e-01 -2.899054e-13 -3.000000e-01 -4.310319e-13 -4.000000e-01 -6.042802e-13 -5.000000e-01 -8.130389e-13 -6.000000e-01 -1.062778e-12 -7.000000e-01 -1.360203e-12 -8.000000e-01 -1.712858e-12 -9.000000e-01 -2.129013e-12 -1.000000e+00 -2.617708e-12 -1.100000e+00 -3.188947e-12 -1.200000e+00 -3.854294e-12 -1.300000e+00 -4.629387e-12 -1.400000e+00 -5.545876e-12 -1.500000e+00 -6.701330e-12 -1.600000e+00 -8.368640e-12 -1.000000e-01 -3.057304e-08 -2.000000e-01 -5.341968e-08 -3.000000e-01 -8.578265e-08 -4.000000e-01 -1.317897e-07 -5.000000e-01 -1.956043e-07 -6.000000e-01 -2.819067e-07 -7.000000e-01 -3.961964e-07 -8.000000e-01 -5.457322e-07 -9.000000e-01 -7.421982e-07 -1.000000e+00 -1.007997e-06 -1.100000e+00 -1.386266e-06 -1.200000e+00 -1.936295e-06 -1.300000e+00 -2.721749e-06 -1.400000e+00 -3.781212e-06 -1.500000e+00 -5.145451e-06 -1.600000e+00 -6.843670e-06 -1.000000e-01 -6.523317e-05 -2.000000e-01 -1.123510e-04 -3.000000e-01 -1.457251e-04 -4.000000e-01 -1.669823e-04 -5.000000e-01 -1.793040e-04 -6.000000e-01 -1.873231e-04 -7.000000e-01 -1.935049e-04 -8.000000e-01 -1.989933e-04 -9.000000e-01 -2.043676e-04 -1.000000e+00 -2.097029e-04 -1.100000e+00 -2.149605e-04 -1.200000e+00 -2.201088e-04 -1.300000e+00 -2.251752e-04 -1.400000e+00 -2.301837e-04 -1.500000e+00 -2.351614e-04 -1.600000e+00 -2.401340e-04 -1.000000e-01 -1.527918e-13 -2.000000e-01 -2.464246e-13 -3.000000e-01 -3.665628e-13 -4.000000e-01 -5.147983e-13 -5.000000e-01 -6.936413e-13 -6.000000e-01 -9.071297e-13 -7.000000e-01 -1.160350e-12 -8.000000e-01 -1.459125e-12 -9.000000e-01 -1.809871e-12 -1.000000e+00 -2.219563e-12 -1.100000e+00 -2.695772e-12 -1.200000e+00 -3.246762e-12 -1.300000e+00 -3.881744e-12 -1.400000e+00 -4.611579e-12 -1.500000e+00 -5.450975e-12 -1.600000e+00 -6.424920e-12 -1.000000e-01 -1.908610e-10 -2.000000e-01 -3.874885e-10 -3.000000e-01 -7.261183e-10 -4.000000e-01 -1.304306e-09 -5.000000e-01 -2.264571e-09 -6.000000e-01 -3.814859e-09 -7.000000e-01 -6.250729e-09 -8.000000e-01 -9.981612e-09 -9.000000e-01 -1.556340e-08 -1.000000e+00 -2.374604e-08 -1.100000e+00 -3.557069e-08 -1.200000e+00 -5.265120e-08 -1.300000e+00 -7.817441e-08 -1.400000e+00 -1.207195e-07 -1.500000e+00 -2.093818e-07 -1.600000e+00 -4.348790e-07 -1.000000e-01 -8.188961e-05 -2.000000e-01 -1.338936e-04 -3.000000e-01 -1.620568e-04 -4.000000e-01 -1.748698e-04 -5.000000e-01 -1.821380e-04 -6.000000e-01 -1.873677e-04 -7.000000e-01 -1.918575e-04 -8.000000e-01 -1.962996e-04 -9.000000e-01 -2.011708e-04 -1.000000e+00 -2.065496e-04 -1.100000e+00 -2.123284e-04 -1.200000e+00 -2.183131e-04 -1.300000e+00 -2.245161e-04 -1.400000e+00 -2.309119e-04 -1.500000e+00 -2.375159e-04 -1.600000e+00 -2.443420e-04 -1.000000e-01 -1.246568e-10 -2.000000e-01 -1.404667e-10 -3.000000e-01 -1.415609e-10 -4.000000e-01 -1.416631e-10 -5.000000e-01 -1.417491e-10 -6.000000e-01 -1.419310e-10 -7.000000e-01 -1.422955e-10 -8.000000e-01 -1.429657e-10 -9.000000e-01 -1.441117e-10 -1.000000e+00 -1.459540e-10 -1.100000e+00 -1.487642e-10 -1.200000e+00 -1.528621e-10 -1.300000e+00 -1.586097e-10 -1.400000e+00 -1.664029e-10 -1.500000e+00 -1.766625e-10 -1.600000e+00 -1.898250e-10 -1.000000e-01 -1.739663e-06 -2.000000e-01 -2.271515e-06 -3.000000e-01 -2.658914e-06 -4.000000e-01 -3.016874e-06 -5.000000e-01 -3.370998e-06 -6.000000e-01 -3.731594e-06 -7.000000e-01 -4.104225e-06 -8.000000e-01 -4.492897e-06 -9.000000e-01 -4.902036e-06 -1.000000e+00 -5.339689e-06 -1.100000e+00 -5.825991e-06 -1.200000e+00 -6.413703e-06 -1.300000e+00 -7.234006e-06 -1.400000e+00 -8.509082e-06 -1.500000e+00 -1.040334e-05 -1.600000e+00 -1.288300e-05 -1.000000e-01 -4.074150e-05 -2.000000e-01 -7.406657e-05 -3.000000e-01 -1.010768e-04 -4.000000e-01 -1.226715e-04 -5.000000e-01 -1.394550e-04 -6.000000e-01 -1.517552e-04 -7.000000e-01 -1.605021e-04 -8.000000e-01 -1.670024e-04 -9.000000e-01 -1.721530e-04 -1.000000e+00 -1.765128e-04 -1.100000e+00 -1.805142e-04 -1.200000e+00 -1.845583e-04 -1.300000e+00 -1.889092e-04 -1.400000e+00 -1.935564e-04 -1.500000e+00 -1.983603e-04 -1.600000e+00 -2.032220e-04 tmpk8ny_4pz/tests/bsimsoi/pmos/reference/acVd01.standard0000644000175000017500000000335613546075722023452 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 0.1 -3.784770e-05 3.042694e-04 1.51603841047401e-16 5.90699259934402e-17 0.2 -6.441850e-05 2.931023e-04 1.32994136008743e-16 7.24576896182356e-17 0.3 -8.351476e-05 2.802468e-04 1.13801830812342e-16 8.52417430795739e-17 0.4 -9.737521e-05 2.665477e-04 9.49671757127772e-17 9.71088262926385e-17 0.5 -1.088064e-04 2.533665e-04 7.80045511200726e-17 1.07190629022331e-16 0.6 -1.187798e-04 2.420734e-04 6.45443774756718e-17 1.14624331035038e-16 0.7 -1.263466e-04 2.344094e-04 5.5355694987796e-17 1.19266032291799e-16 0.8 -1.314696e-04 2.312224e-04 5.00711835569914e-17 1.21492132894525e-16 0.9 -1.347149e-04 2.312080e-04 4.75403028717445e-17 1.22094133057519e-16 1 -1.368245e-04 2.322485e-04 4.64687225816094e-17 1.21885333000986e-16 1.1 -1.383271e-04 2.321062e-04 4.58058024021209e-17 1.21593932922088e-16 1.2 -1.394190e-04 2.308895e-04 4.52576522537068e-17 1.21361432859138e-16 0.1 -1.711294e-05 2.545691e-04 1.52877141392153e-16 5.7819145654786e-17 0.2 -3.085515e-05 2.383249e-04 1.3840803747458e-16 6.86651585913913e-17 0.3 -4.211016e-05 2.251054e-04 1.22307633115325e-16 7.9882841628628e-17 0.4 -5.142137e-05 2.139760e-04 1.05608128593862e-16 9.07006845576061e-17 0.5 -5.917567e-05 2.044110e-04 8.92523441654616e-17 1.00631527246425e-16 0.6 -6.567588e-05 1.959933e-04 7.44988001708752e-17 1.09080929534138e-16 0.7 -7.119267e-05 1.883134e-04 6.25400069329798e-17 1.15553431286596e-16 0.8 -7.588823e-05 1.811701e-04 5.38822645888583e-17 1.19954332478159e-16 0.9 -7.970494e-05 1.748474e-04 4.81754330437087e-17 1.22620133199936e-16 1 -8.254585e-05 1.699069e-04 4.46596320917903e-17 1.2403903358411e-16 1.1 -8.440738e-05 1.670649e-04 4.2655951549285e-17 1.24591833733783e-16 1.2 -8.533282e-05 1.670362e-04 4.17242112970123e-17 1.2449583370779e-16 tmpk8ny_4pz/tests/bsimsoi/pmos/reference/acFreq02.standard0000644000175000017500000000710513546075722023773 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.7988153217581e-16 1.38428354007981e-16 4.1453130421346e-17 1258.925 1.79881589846049e-16 1.38428422759048e-16 4.14531418027401e-17 1584.893 1.79881529113301e-16 1.38428357070489e-16 4.14531318748149e-17 1995.262 1.7988153417013e-16 1.3842835201366e-16 4.14531342966069e-17 2511.886 1.79881570072246e-16 1.3842837947228e-16 4.14531335753039e-17 3162.278 1.79881466664194e-16 1.38428318861183e-16 4.14531226384072e-17 3981.072 1.79881491178942e-16 1.38428355026938e-16 4.14531361520036e-17 5011.872 1.79881529677026e-16 1.38428356506765e-16 4.14531414146733e-17 6309.573 1.7988152253463e-16 1.3842836364916e-16 4.14531336611098e-17 7943.282 1.79881498683369e-16 1.38428367464001e-16 4.14531312193686e-17 10000 1.7988153217581e-16 1.38428354007981e-16 4.14531145058516e-17 12589.25 1.79881589846049e-16 1.38428422759048e-16 4.14531291606095e-17 15848.93 1.79881529113301e-16 1.38428357070489e-16 4.14531117908164e-17 19952.62 1.79881454403692e-16 1.3842835201366e-16 4.14530944133878e-17 25118.86 1.79881443350776e-16 1.3842837947228e-16 4.14530765506425e-17 31622.78 1.79881366005781e-16 1.38428318861183e-16 4.14530270129145e-17 39810.72 1.79881251311474e-16 1.38428275071115e-16 4.14529762403586e-17 50118.72 1.79881148609968e-16 1.3842826124e-16 4.14528873699681e-17 63095.73 1.79880967598702e-16 1.38428187078638e-16 4.1452730071344e-17 79432.82 1.79880617080841e-16 1.38428066917684e-16 4.14525100903144e-17 100000 1.79880099781322e-16 1.38427876543152e-16 4.14521436606988e-17 125892.5 1.79879314262535e-16 1.3842766423121e-16 4.14515741785414e-17 158489.3 1.79877913993573e-16 1.3842715203058e-16 4.14506414590022e-17 199526.2 1.79875870753015e-16 1.38426437619143e-16 4.14491858579141e-17 251188.6 1.79872572847881e-16 1.38425338157002e-16 4.1446886206837e-17 316227.8 1.79867324157112e-16 1.38423537586547e-16 4.14432379822121e-17 398107.2 1.79859063570731e-16 1.38420799201712e-16 4.14375047887053e-17 501187.2 1.79846122196239e-16 1.3841641640562e-16 4.14284673226808e-17 630957.3 1.79825801922587e-16 1.38409546276329e-16 4.141428814615e-17 794328.2 1.79794099814518e-16 1.38398853815716e-16 4.13922004627943e-17 1000000 1.7974513638958e-16 1.38382326398439e-16 4.13580990048258e-17 1258925 1.79670719107064e-16 1.38357247563575e-16 4.13062023183739e-17 1584893 1.79559883877488e-16 1.38319803058652e-16 4.12289643256718e-17 1995262 1.7940030324824e-16 1.38265947545408e-16 4.11177164238156e-17 2511886 1.79180927065075e-16 1.3819185384868e-16 4.0964812390979e-17 3162278 1.78897983636149e-16 1.38096297084611e-16 4.07676388432091e-17 3981072 1.78561780350701e-16 1.37982801206068e-16 4.05333243699865e-17 5011872 1.78198896327729e-16 1.3786031254594e-16 4.02803757887102e-17 6309573 1.77845664409691e-16 1.37741075502336e-16 4.00341877175811e-17 7943282 1.77534813007364e-16 1.37636127373588e-16 3.98175381283094e-17 10000000 1.77284600969379e-16 1.37551664919453e-16 3.96431567465277e-17 12589250 1.77097413416387e-16 1.37488480346364e-16 3.95126506031097e-17 15848930 1.76964629592646e-16 1.37443638624538e-16 3.94201291276923e-17 19952620 1.76874179915676e-16 1.37413084787765e-16 3.9357087669092e-17 25118860 1.76814150171436e-16 1.37392874980854e-16 3.93152536727762e-17 31622780 1.76774997039303e-16 1.37379609181261e-16 3.92879802980323e-17 39810720 1.76749821501251e-16 1.37371099186047e-16 3.92704181558394e-17 50118720 1.76733725246081e-16 1.37365687504917e-16 3.92592113405747e-17 63095730 1.76723483065839e-16 1.37362230834036e-16 3.92520559757896e-17 79432820 1.76716966370782e-16 1.37360025490788e-16 3.92475219843501e-17 100000000 1.76712916413793e-16 1.37358625888977e-16 3.92446486845199e-17 tmpk8ny_4pz/tests/bsimsoi/pmos/reference/dcSweep01.standard0000644000175000017500000000771213546075722024167 0ustar carstencarstenV(d) I(d) -1.000000e-01 -1.789308e-13 -2.000000e-01 -2.899051e-13 -3.000000e-01 -4.310282e-13 -4.000000e-01 -6.042801e-13 -5.000000e-01 -8.130390e-13 -6.000000e-01 -1.062778e-12 -7.000000e-01 -1.360203e-12 -8.000000e-01 -1.712858e-12 -9.000000e-01 -2.129013e-12 -1.000000e+00 -2.617708e-12 -1.100000e+00 -3.188947e-12 -1.200000e+00 -3.854294e-12 -1.300000e+00 -4.629387e-12 -1.400000e+00 -5.545876e-12 -1.500000e+00 -6.701330e-12 -1.600000e+00 -8.368640e-12 -1.000000e-01 -1.260908e-08 -2.000000e-01 -2.123638e-08 -3.000000e-01 -3.383739e-08 -4.000000e-01 -5.207216e-08 -5.000000e-01 -7.773994e-08 -6.000000e-01 -1.129282e-07 -7.000000e-01 -1.600570e-07 -8.000000e-01 -2.220518e-07 -9.000000e-01 -3.029209e-07 -1.000000e+00 -4.093930e-07 -1.100000e+00 -5.550268e-07 -1.200000e+00 -7.668972e-07 -1.300000e+00 -1.090293e-06 -1.400000e+00 -1.574731e-06 -1.500000e+00 -2.261906e-06 -1.600000e+00 -3.190900e-06 -1.000000e-01 -4.002699e-05 -2.000000e-01 -7.197073e-05 -3.000000e-01 -9.710855e-05 -4.000000e-01 -1.165604e-04 -5.000000e-01 -1.312070e-04 -6.000000e-01 -1.420461e-04 -7.000000e-01 -1.505450e-04 -8.000000e-01 -1.579522e-04 -9.000000e-01 -1.650652e-04 -1.000000e+00 -1.720647e-04 -1.100000e+00 -1.789170e-04 -1.200000e+00 -1.855652e-04 -1.300000e+00 -1.920581e-04 -1.400000e+00 -1.984317e-04 -1.500000e+00 -2.047289e-04 -1.600000e+00 -2.109910e-04 -1.000000e-01 -1.527918e-13 -2.000000e-01 -2.464243e-13 -3.000000e-01 -3.665583e-13 -4.000000e-01 -5.147983e-13 -5.000000e-01 -6.936413e-13 -6.000000e-01 -9.071297e-13 -7.000000e-01 -1.160350e-12 -8.000000e-01 -1.459125e-12 -9.000000e-01 -1.809871e-12 -1.000000e+00 -2.219563e-12 -1.100000e+00 -2.695772e-12 -1.200000e+00 -3.246762e-12 -1.300000e+00 -3.881744e-12 -1.400000e+00 -4.611579e-12 -1.500000e+00 -5.450975e-12 -1.600000e+00 -6.424920e-12 -1.000000e-01 -6.533852e-11 -2.000000e-01 -1.268863e-10 -3.000000e-01 -2.341749e-10 -4.000000e-01 -4.181669e-10 -5.000000e-01 -7.250477e-10 -6.000000e-01 -1.223151e-09 -7.000000e-01 -2.010886e-09 -8.000000e-01 -3.226296e-09 -9.000000e-01 -5.058596e-09 -1.000000e+00 -7.762676e-09 -1.100000e+00 -1.168059e-08 -1.200000e+00 -1.728578e-08 -1.300000e+00 -2.531133e-08 -1.400000e+00 -3.720775e-08 -1.500000e+00 -5.692191e-08 -1.600000e+00 -9.827980e-08 -1.000000e-01 -4.377955e-05 -2.000000e-01 -7.715505e-05 -3.000000e-01 -1.020519e-04 -4.000000e-01 -1.200370e-04 -5.000000e-01 -1.324365e-04 -6.000000e-01 -1.412528e-04 -7.000000e-01 -1.482596e-04 -8.000000e-01 -1.545886e-04 -9.000000e-01 -1.610377e-04 -1.000000e+00 -1.679176e-04 -1.100000e+00 -1.751708e-04 -1.200000e+00 -1.826787e-04 -1.300000e+00 -1.903605e-04 -1.400000e+00 -1.982473e-04 -1.500000e+00 -2.063660e-04 -1.600000e+00 -2.147520e-04 -1.000000e-01 -1.246568e-10 -2.000000e-01 -1.404667e-10 -3.000000e-01 -1.415609e-10 -4.000000e-01 -1.416631e-10 -5.000000e-01 -1.417491e-10 -6.000000e-01 -1.419310e-10 -7.000000e-01 -1.422955e-10 -8.000000e-01 -1.429657e-10 -9.000000e-01 -1.441117e-10 -1.000000e+00 -1.459540e-10 -1.100000e+00 -1.487642e-10 -1.200000e+00 -1.528621e-10 -1.300000e+00 -1.586097e-10 -1.400000e+00 -1.664029e-10 -1.500000e+00 -1.766625e-10 -1.600000e+00 -1.898250e-10 -1.000000e-01 -1.001632e-06 -2.000000e-01 -1.276656e-06 -3.000000e-01 -1.482664e-06 -4.000000e-01 -1.683528e-06 -5.000000e-01 -1.888976e-06 -6.000000e-01 -2.103076e-06 -7.000000e-01 -2.328366e-06 -8.000000e-01 -2.566941e-06 -9.000000e-01 -2.821189e-06 -1.000000e+00 -3.095096e-06 -1.100000e+00 -3.397862e-06 -1.200000e+00 -3.753902e-06 -1.300000e+00 -4.229740e-06 -1.400000e+00 -4.973596e-06 -1.500000e+00 -6.187299e-06 -1.600000e+00 -7.976300e-06 -1.000000e-01 -3.047115e-05 -2.000000e-01 -5.633043e-05 -3.000000e-01 -7.801510e-05 -4.000000e-01 -9.598978e-05 -5.000000e-01 -1.106507e-04 -6.000000e-01 -1.223639e-04 -7.000000e-01 -1.315448e-04 -8.000000e-01 -1.387880e-04 -9.000000e-01 -1.447182e-04 -1.000000e+00 -1.498351e-04 -1.100000e+00 -1.545914e-04 -1.200000e+00 -1.594670e-04 -1.300000e+00 -1.648264e-04 -1.400000e+00 -1.706749e-04 -1.500000e+00 -1.768033e-04 -1.600000e+00 -1.830470e-04 tmpk8ny_4pz/tests/bsimsoi/pmos/reference/noise01.standard0000644000175000017500000000634413546075722023712 0ustar carstencarstenFreq N(d) 1000 3.886811e-19 1258.925 3.609539e-19 1584.893 3.395181e-19 1995.262 3.229411e-19 2511.886 3.101131e-19 3162.278 3.00173e-19 3981.072 2.924498e-19 5011.872 2.86416e-19 6309.573 2.816503e-19 7943.282 2.77805e-19 10000 2.745773e-19 12589.25 2.716801e-19 15848.93 2.688093e-19 19952.62 2.656058e-19 25118.86 2.616091e-19 31622.78 2.562054e-19 39810.72 2.485854e-19 50118.72 2.377471e-19 63095.73 2.22615e-19 79432.82 2.023631e-19 100000 1.769477e-19 125892.5 1.476195e-19 158489.3 1.169345e-19 199526.2 8.797367e-20 251188.6 6.318828e-20 316227.8 4.369394e-20 398107.2 2.93551e-20 501187.2 1.931967e-20 630957.3 1.253758e-20 794328.2 8.061509e-21 1000000 5.153138e-21 1258925 3.282319e-21 1584893 2.08653e-21 1995262 1.325188e-21 2511886 8.415663e-22 3162278 5.347361e-22 3981072 3.401681e-22 5011872 2.167858e-22 6309573 1.38512e-22 7943282 8.881736e-23 10000000 5.723314e-23 12589250 3.713119e-23 15848930 2.431485e-23 19952620 1.612613e-23 25118860 1.088065e-23 31622780 7.510207e-24 39810720 5.336665e-24 50118720 3.928992e-24 63095730 3.012791e-24 79432820 2.413055e-24 100000000 2.017913e-24 1000 2.426038e-18 1258.925 1.935172e-18 1584.893 1.555802e-18 1995.262 1.2626e-18 2511.886 1.035995e-18 3162.278 8.608567e-19 3981.072 7.254939e-19 5011.872 6.208681e-19 6309.573 5.399921e-19 7943.282 4.774626e-19 10000 4.290983e-19 12589.25 3.916597e-19 15848.93 3.626304e-19 19952.62 3.400451e-19 25118.86 3.223537e-19 31622.78 3.083085e-19 39810.72 2.968694e-19 50118.72 2.871167e-19 63095.73 2.781684e-19 79432.82 2.690994e-19 100000 2.588731e-19 125892.5 2.463155e-19 158489.3 2.301958e-19 199526.2 2.094997e-19 251188.6 1.839248e-19 316227.8 1.544149e-19 398107.2 1.23278e-19 501187.2 9.352606e-20 630957.3 6.77285e-20 794328.2 4.719383e-20 1000000 3.193595e-20 1258925 2.116758e-20 1584893 1.383852e-20 1995262 8.970605e-21 2511886 5.787955e-21 3162278 3.727273e-21 3981072 2.40047e-21 5011872 1.548532e-21 6309573 1.001922e-21 7943282 6.509718e-22 10000000 4.252316e-22 12589250 2.796244e-22 15848930 1.853597e-22 19952620 1.240578e-22 25118860 8.397817e-23 31622780 5.761092e-23 39810720 4.014216e-23 50118720 2.84776e-23 63095730 2.062142e-23 79432820 1.528101e-23 100000000 1.161508e-23 1000 8.323392e-18 1258.925 6.487104e-18 1584.893 5.067912e-18 1995.262 3.971077e-18 2511.886 3.123377e-18 3162.278 2.468224e-18 3981.072 1.96188e-18 5011.872 1.570544e-18 6309.573 1.268089e-18 7943.282 1.034323e-18 10000 8.536375e-19 12589.25 7.139653e-19 15848.93 6.059743e-19 19952.62 5.224427e-19 25118.86 4.577741e-19 31622.78 4.076199e-19 39810.72 3.685825e-19 50118.72 3.379794e-19 63095.73 3.1365e-19 79432.82 2.937941e-19 100000 2.768309e-19 125892.5 2.612785e-19 158489.3 2.456695e-19 199526.2 2.285414e-19 251188.6 2.08574e-19 316227.8 1.849359e-19 398107.2 1.577752e-19 501187.2 1.285373e-19 630957.3 9.96792e-20 794328.2 7.374309e-20 1000000 5.239548e-20 1258925 3.607766e-20 1584893 2.429513e-20 1995262 1.612743e-20 2511886 1.061886e-20 3162278 6.96768e-21 3981072 4.57193e-21 5011872 3.007758e-21 6309573 1.987913e-21 7943282 1.322143e-21 10000000 8.861153e-22 12589250 5.99183e-22 15848930 4.09213e-22 19952620 2.825322e-22 25118860 1.973656e-22 31622780 1.395952e-22 39810720 1.000321e-22 50118720 7.266612e-23 63095730 5.354266e-23 79432820 4.004197e-23 100000000 3.041499e-23 tmpk8ny_4pz/tests/bsimsoi/pmos/reference/acVd02.standard0000644000175000017500000000335613546075722023453 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 0.1 -3.800295e-05 3.021800e-04 9.23616650073238e-17 1.06171628746432e-16 0.2 -6.470374e-05 2.916716e-04 8.22209322616762e-17 1.13797930811286e-16 0.3 -8.386716e-05 2.792674e-04 7.19222394732602e-17 1.20916932738787e-16 0.4 -9.774242e-05 2.658812e-04 6.22012068412482e-17 1.27267734458294e-16 0.5 -1.090090e-04 2.527817e-04 5.40794746422537e-17 1.32280935815641e-16 0.6 -1.188563e-04 2.415800e-04 4.82922130753274e-17 1.35578136708372e-16 0.7 -1.263652e-04 2.340112e-04 4.48082621320325e-17 1.37360737191019e-16 0.8 -1.314660e-04 2.308803e-04 4.31304416777553e-17 1.37991137361703e-16 0.9 -1.347064e-04 2.308839e-04 4.26085815364594e-17 1.37900637337199e-16 1 -1.368185e-04 2.319217e-04 4.26289115419638e-17 1.37468237220125e-16 1.1 -1.383251e-04 2.317767e-04 4.26796215556938e-17 1.37069837112257e-16 1.2 -1.394204e-04 2.305600e-04 4.26647215516595e-17 1.36754937026996e-16 0.1 -1.718912e-05 2.532298e-04 9.18153948594188e-17 1.06116528731513e-16 0.2 -3.098364e-05 2.372523e-04 8.40449527555377e-17 1.1220543038011e-16 0.3 -4.227527e-05 2.242315e-04 7.53839504105335e-17 1.18425932064338e-16 0.4 -5.161207e-05 2.132550e-04 6.6534998014641e-17 1.242879336515e-16 0.5 -5.938383e-05 2.038117e-04 5.82807757797744e-17 1.29383535031157e-16 0.6 -6.589387e-05 1.954953e-04 5.1481943938961e-17 1.33319936096954e-16 0.7 -7.141145e-05 1.879046e-04 4.66040626182533e-17 1.35962836812531e-16 0.8 -7.609750e-05 1.808442e-04 4.34798217723515e-17 1.375176372335e-16 0.9 -7.989784e-05 1.745961e-04 4.16079512655344e-17 1.38328837453136e-16 1 -8.272172e-05 1.697163e-04 4.05278409730898e-17 1.38677037547413e-16 1.1 -8.456918e-05 1.669188e-04 3.99539608177092e-17 1.38719237558839e-16 1.2 -8.548453e-05 1.669173e-04 3.97474207617876e-17 1.38519137504661e-16 tmpk8ny_4pz/tests/bsimsoi/pmos/reference/acFreq01.standard0000644000175000017500000000712113546075722023770 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.69864797522435e-16 1.27288224188792e-16 4.25766369956203e-17 1258.925 1.69864976901627e-16 1.27288303665127e-16 4.25766479522388e-17 1584.893 1.69864936126527e-16 1.272882652082e-16 4.25766407923295e-17 1995.262 1.69864863688377e-16 1.27288251015761e-16 4.25766366025472e-17 2511.886 1.69864871482661e-16 1.27288231691147e-16 4.25766397915141e-17 3162.278 1.69864847289163e-16 1.2728820060508e-16 4.25766265524005e-17 3981.072 1.69864865603859e-16 1.27288190234113e-16 4.25766353918344e-17 5011.872 1.69864864506911e-16 1.27288242139083e-16 4.25766223678278e-17 6309.573 1.69864878585558e-16 1.27288226689497e-16 4.25766266717007e-17 7943.282 1.69864871009135e-16 1.27288217512837e-16 4.25766334598772e-17 10000 1.69864797522435e-16 1.27288208273298e-16 4.25766210801259e-17 12589.25 1.6986485048032e-16 1.27288303665127e-16 4.25766226679776e-17 15848.93 1.69864835706535e-16 1.27288164788208e-16 4.25766006243325e-17 19952.62 1.69864783921938e-16 1.27288171249323e-16 4.25765807660404e-17 25118.86 1.69864744761191e-16 1.27288168330412e-16 4.25765447504116e-17 31622.78 1.69864595643129e-16 1.27288099946666e-16 4.25764755647804e-17 39810.72 1.69864425846835e-16 1.27288030322468e-16 4.25763955243669e-17 50118.72 1.69864229395148e-16 1.27287924583201e-16 4.257624130077e-17 63095.73 1.69863819162423e-16 1.2728774742665e-16 4.25760465114124e-17 79432.82 1.69863187949763e-16 1.27287436092414e-16 4.25756717116642e-17 100000 1.69862251043346e-16 1.27286982780236e-16 4.25751250236609e-17 125892.5 1.69860678577211e-16 1.27286280924225e-16 4.25742585895489e-17 158489.3 1.69858207987033e-16 1.27285152188434e-16 4.25728449166149e-17 199526.2 1.69854254752091e-16 1.2728330549659e-16 4.25706381663917e-17 251188.6 1.69848080887897e-16 1.27280438320747e-16 4.25671420173438e-17 316227.8 1.69838273468027e-16 1.27275869949439e-16 4.25615982512811e-17 398107.2 1.69822848819136e-16 1.27268720991335e-16 4.25528885125525e-17 501187.2 1.69798590594442e-16 1.27257470974166e-16 4.25391507738109e-17 630957.3 1.69760525406735e-16 1.27239795917599e-16 4.25176521171708e-17 794328.2 1.6970129366725e-16 1.27212319549699e-16 4.24841653764868e-17 1000000 1.69609990458545e-16 1.27169972066075e-16 4.24325699411335e-17 1258925 1.69471680217584e-16 1.27105751298763e-16 4.23543234428984e-17 1584893 1.69266432971533e-16 1.27010503509087e-16 4.22383559637677e-17 1995262 1.68972915375998e-16 1.26874342967743e-16 4.20724169931563e-17 2511886 1.68573136179062e-16 1.2668883913844e-16 4.18464263293382e-17 3162278 1.68063766298343e-16 1.26452433798687e-16 4.15584868326251e-17 3981072 1.67467270332522e-16 1.26175644941964e-16 4.12213042446707e-17 5011872 1.66833920640358e-16 1.25881755384337e-16 4.08632496092012e-17 6309573 1.66227651942942e-16 1.25600439513214e-16 4.052053860975e-17 7943282 1.65702324561408e-16 1.25356666445665e-16 4.02235762019617e-17 10000000 1.65284954880023e-16 1.25162980487203e-16 3.99876476208501e-17 12589250 1.64975759299994e-16 1.25019496332915e-16 3.98128127107675e-17 15848930 1.64758077410552e-16 1.24918453806405e-16 3.96897869334146e-17 19952620 1.64610488868754e-16 1.24850030298136e-16 3.96063737418738e-17 25118860 1.64512916922189e-16 1.24804744323714e-16 3.9551215385835e-17 31622780 1.64449424648684e-16 1.24775263314753e-16 3.95153324234397e-17 39810720 1.64408600320772e-16 1.24756309158891e-16 3.94922635809423e-17 50118720 1.64382548013128e-16 1.2474423846122e-16 3.9477531009105e-17 63095730 1.64365968026312e-16 1.24736555619485e-16 3.94681530710239e-17 79432820 1.64355456298443e-16 1.24731670362199e-16 3.94622122364688e-17 100000000 1.64348805504756e-16 1.24728582985528e-16 3.94584574350695e-17 tmpk8ny_4pz/tests/bsimsoi/pmos/reference/dcSweep03.standard0000644000175000017500000000771213546075722024171 0ustar carstencarstenV(d) I(d) -1.000000e-01 -1.789308e-13 -2.000000e-01 -2.899051e-13 -3.000000e-01 -4.310282e-13 -4.000000e-01 -6.042801e-13 -5.000000e-01 -8.130390e-13 -6.000000e-01 -1.062778e-12 -7.000000e-01 -1.360203e-12 -8.000000e-01 -1.712858e-12 -9.000000e-01 -2.129013e-12 -1.000000e+00 -2.617708e-12 -1.100000e+00 -3.188947e-12 -1.200000e+00 -3.854294e-12 -1.300000e+00 -4.629387e-12 -1.400000e+00 -5.545876e-12 -1.500000e+00 -6.701330e-12 -1.600000e+00 -8.368640e-12 -1.000000e-01 -1.261281e-08 -2.000000e-01 -2.124881e-08 -3.000000e-01 -3.386676e-08 -4.000000e-01 -5.213124e-08 -5.000000e-01 -7.784738e-08 -6.000000e-01 -1.131100e-07 -7.000000e-01 -1.603481e-07 -8.000000e-01 -2.224989e-07 -9.000000e-01 -3.035888e-07 -1.000000e+00 -4.103807e-07 -1.100000e+00 -5.565090e-07 -1.200000e+00 -7.691980e-07 -1.300000e+00 -1.093960e-06 -1.400000e+00 -1.580498e-06 -1.500000e+00 -2.270648e-06 -1.600000e+00 -3.203670e-06 -1.000000e-01 -4.011359e-05 -2.000000e-01 -7.211780e-05 -3.000000e-01 -9.729560e-05 -4.000000e-01 -1.167723e-04 -5.000000e-01 -1.314305e-04 -6.000000e-01 -1.422725e-04 -7.000000e-01 -1.507743e-04 -8.000000e-01 -1.581891e-04 -9.000000e-01 -1.653156e-04 -1.000000e+00 -1.723325e-04 -1.100000e+00 -1.792036e-04 -1.200000e+00 -1.858705e-04 -1.300000e+00 -1.923819e-04 -1.400000e+00 -1.987735e-04 -1.500000e+00 -2.050884e-04 -1.600000e+00 -2.113670e-04 -1.000000e-01 -1.527918e-13 -2.000000e-01 -2.464243e-13 -3.000000e-01 -3.665583e-13 -4.000000e-01 -5.147983e-13 -5.000000e-01 -6.936413e-13 -6.000000e-01 -9.071297e-13 -7.000000e-01 -1.160350e-12 -8.000000e-01 -1.459125e-12 -9.000000e-01 -1.809871e-12 -1.000000e+00 -2.219563e-12 -1.100000e+00 -2.695772e-12 -1.200000e+00 -3.246762e-12 -1.300000e+00 -3.881744e-12 -1.400000e+00 -4.611579e-12 -1.500000e+00 -5.450975e-12 -1.600000e+00 -6.424920e-12 -1.000000e-01 -6.537081e-11 -2.000000e-01 -1.270125e-10 -3.000000e-01 -2.345242e-10 -4.000000e-01 -4.189926e-10 -5.000000e-01 -7.268139e-10 -6.000000e-01 -1.226666e-09 -7.000000e-01 -2.017492e-09 -8.000000e-01 -3.238141e-09 -9.000000e-01 -5.078992e-09 -1.000000e+00 -7.796593e-09 -1.100000e+00 -1.173536e-08 -1.200000e+00 -1.737227e-08 -1.300000e+00 -2.544673e-08 -1.400000e+00 -3.742458e-08 -1.500000e+00 -5.730328e-08 -1.600000e+00 -9.911540e-08 -1.000000e-01 -4.393320e-05 -2.000000e-01 -7.740888e-05 -3.000000e-01 -1.023643e-04 -4.000000e-01 -1.203743e-04 -5.000000e-01 -1.327731e-04 -6.000000e-01 -1.415840e-04 -7.000000e-01 -1.485898e-04 -8.000000e-01 -1.549263e-04 -9.000000e-01 -1.613944e-04 -1.000000e+00 -1.683035e-04 -1.100000e+00 -1.755916e-04 -1.200000e+00 -1.831367e-04 -1.300000e+00 -1.908560e-04 -1.400000e+00 -1.987802e-04 -1.500000e+00 -2.069354e-04 -1.600000e+00 -2.153570e-04 -1.000000e-01 -1.246568e-10 -2.000000e-01 -1.404667e-10 -3.000000e-01 -1.415609e-10 -4.000000e-01 -1.416631e-10 -5.000000e-01 -1.417491e-10 -6.000000e-01 -1.419310e-10 -7.000000e-01 -1.422955e-10 -8.000000e-01 -1.429657e-10 -9.000000e-01 -1.441117e-10 -1.000000e+00 -1.459540e-10 -1.100000e+00 -1.487642e-10 -1.200000e+00 -1.528621e-10 -1.300000e+00 -1.586097e-10 -1.400000e+00 -1.664029e-10 -1.500000e+00 -1.766625e-10 -1.60000e+00 -1.898250e-10 -1.0000000e-01 -1.001653e-06 -2.000000e-01 -1.276685e-06 -3.000000e-01 -1.482700e-06 -4.000000e-01 -1.683569e-06 -5.000000e-01 -1.889022e-06 -6.000000e-01 -2.103127e-06 -7.000000e-01 -2.328423e-06 -8.000000e-01 -2.567004e-06 -9.000000e-01 -2.821259e-06 -1.000000e+00 -3.095173e-06 -1.100000e+00 -3.397951e-06 -1.200000e+00 -3.754010e-06 -1.300000e+00 -4.229895e-06 -1.400000e+00 -4.973865e-06 -1.500000e+00 -6.187820e-06 -1.600000e+00 -7.977260e-06 -1.000000e-01 -3.047187e-05 -2.000000e-01 -5.633183e-05 -3.000000e-01 -7.801696e-05 -4.000000e-01 -9.599200e-05 -5.000000e-01 -1.106532e-04 -6.000000e-01 -1.223665e-04 -7.000000e-01 -1.315475e-04 -8.000000e-01 -1.387908e-04 -9.000000e-01 -1.447210e-04 -1.000000e+00 -1.498382e-04 -1.100000e+00 -1.545951e-04 -1.200000e+00 -1.594721e-04 -1.300000e+00 -1.648340e-04 -1.400000e+00 -1.706858e-04 -1.500000e+00 -1.768178e-04 -1.600000e+00 -1.830650e-04 tmpk8ny_4pz/tests/bsimsoi/pmos/qaSpec0000644000175000017500000001132513546075722020106 0ustar carstencarsten // // CMC test specification for bsimsoi (version 4.4) // // // Simulator specific information // These arguments are added to the model card // specification to invoke the desired model in // different simulators (which can have different // names or levels for the same model) and to switch // between nType and pType polarities. // It is assumed that there are no polarity specific // parameters. // `ifdef spice nTypeSelectionArguments pmos level=10 pTypeSelectionArguments nmos level=10 `endif `ifdef ngspice nTypeSelectionArguments pmos level=10 pTypeSelectionArguments nmos level=10 `endif `ifdef hspice nTypeSelectionArguments pmos level=70 version=4.4 pTypeSelectionArguments nmos level=70 version=4.4 `endif // // General test-independent information // keyLetter m pins d g s b linearScale w l ps pd areaScale as ad temperature 27 -50 150 checkPolarity no symmetricPins d s scaleParameters m // // Specific tests // test dcSweep01 biases V(s)=0 V(b)=0 biasList V(g)=1.6,-0.4,-1.6 biasSweep V(d)=-0.1,-1.6,-0.1 outputs I(d) instanceParameters w=0.2e-6 l=0.04e-6 modelParameters parameters/pmosParameters modelParameters soimod=0 mobmod=1 test dcSweep02 biases V(s)=0 V(b)=0 biasList V(g)=1.6,-0.4,-1.6 biasSweep V(d)=-0.1,-1.6,-0.1 outputs I(d) instanceParameters w=0.2e-6 l=0.04e-6 modelParameters parameters/pmosParameters modelParameters soimod=1 mobmod=2 test dcSweep03 biases V(s)=0 V(b)=0 biasList V(g)=1.6,-0.4,-1.6 biasSweep V(d)=-0.1,-1.6,-0.1 outputs I(d) instanceParameters w=0.2e-6 l=0.04e-6 modelParameters parameters/pmosParameters modelParameters soimod=3 mobmod=3 test acVd01 temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-1.2 biasSweep V(d)=0.1,1.2,0.1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters w=0.2e-6 l=0.04e-6 modelParameters parameters/pmosParameters modelParameters soimod=0 capmod=2 test acVd02 temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-1.2 biasSweep V(d)=0.1,1.2,0.1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters w=0.2e-6 l=0.04e-6 modelParameters parameters/pmosParameters modelParameters soimod=1 capmod=3 test acFreq01 temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.2 V(g)=-1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=0.2e-6 l=0.04e-6 modelParameters parameters/pmosParameters modelParameters soimod=0 capmod=2 test acFreq02 temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.2 V(g)=-1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=0.2e-6 l=0.04e-6 modelParameters parameters/pmosParameters modelParameters soimod=3 capmod=3 test noise01 temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.0 biasList V(g)=-0.6,-0.8,-1.0 freq dec 10 1e3 1e8 outputs N(d) instanceParameters w=0.2e-6 l=0.04e-6 modelParameters parameters/pmosParameters modelParameters soimod=0 fnoimod=0 tnoimod=0 test noise02 temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.0 biasList V(g)=-0.6,-0.8,-1.0 freq dec 10 1e3 1e8 outputs N(d) instanceParameters w=0.2e-6 l=0.04e-6 modelParameters parameters/pmosParameters modelParameters soimod=1 fnoimod=1 tnoimod=1 test noise03 temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.0 biasList V(g)=-0.6,-0.8,-1.0 freq dec 10 1e3 1e8 outputs N(d) instanceParameters w=0.2e-6 l=0.04e-6 modelParameters parameters/pmosParameters modelParameters soimod=3 fnoimod=1 tnoimod=2 tmpk8ny_4pz/tests/bsimsoi/pmos/run0000755000175000017500000000023613546075722017500 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmpk8ny_4pz/tests/bsim3/0000755000175000017500000000000013546075722015337 5ustar carstencarstentmpk8ny_4pz/tests/bsim3/Makefile.am0000644000175000017500000000052113546075722017371 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = nmos/qaSpec pmos/qaSpec TESTS_ENVIRONMENT = \ $(SHELL) $(top_srcdir)/tests/bin/check_cmc.sh \ $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ nmos pmos MAINTAINERCLEANFILES = Makefile.in clean-local: rm -rf nmos/results pmos/results ngspiceCkt bsim3.out tmpk8ny_4pz/tests/bsim3/nmos/0000755000175000017500000000000013546075722016313 5ustar carstencarstentmpk8ny_4pz/tests/bsim3/nmos/parameters/0000755000175000017500000000000013546075722020456 5ustar carstencarstentmpk8ny_4pz/tests/bsim3/nmos/parameters/nmosParameters0000644000175000017500000000424413546075722023405 0ustar carstencarsten+ binunit = (1) + paramchk= (1) + mobmod = (1) + capmod = (3) + acnqsmod= (0) + noimod = (1) + tnom = (27) + nch = (1.7e+17) + tox = (1.5e-08) + toxm = (1.5e-08) + wint = (0.0) + lint = (0.0) + ll = (0.0) + wl = (0.0) + lln = (1.0) + wln = (1.0) + lw = (0.0) + ww = (0.0) + lwn = (1.0) + wwn = (1.0) + lwl = (0.0) + wwl = (0.0) + xpart = (0.0) + xl = (-30e-09) + vth0 = (0.7) + k1 = (0.5) + k2 = (0.0) + k3 = (80) + k3b = (0.0) + w0 = (2.5e-06) + dvt0 = (2.2) + dvt1 = (0.53) + dvt2 = (-0.032) + nlx = (1.74e-07) + dvt0w = (0.0) + dvt1w = (5.3e6) + dvt2w = (-0.032) + dsub = (0.56) + xj = (1.5e-07) + ngate = (0.0) + cdsc = (2.4e-04) + cdscb = (0.0) + cdscd = (0.0) + cit = (0.0) + voff = (-0.08) + nfactor = (1.0) + eta0 = (0.08) + etab = (-0.07) + vfb = (-0.55) + u0 = (670) + ua = (2.25e-09) + ub = (5.87e-19) + uc = (-4.65e-11) + vsat = (8e+04) + a0 = (1.0) + ags = (0.0) + a1 = (0.0) + a2 = (1.0) + b0 = (0.0) + b1 = (0.0) + keta = (-0.047) + dwg = (0.0) + dwb = (0.0) + pclm = (1.3) + pdiblc1 = (0.39) + pdiblc2 = (0.0086) + pdiblcb = (0.0) + drout = (0.56) + pvag = (0.0) + delta = (0.01) + pscbe1 = (4.24e+8) + pscbe2 = (1e-05) + rsh = (10.0) + rdsw = (100.0) + prwg = (0.0) + prwb = (0.0) + wr = (1.0) + alpha0 = (0.0) + alpha1 = (0.0) + beta0 = (30) + cgbo = (0.0) + cgdl = (2e-10) + cgsl = (2e-10) + ckappa = (0.6) + acde = (1.0) + moin = (15) + noff = (0.9) + voffcv = (0.02) + kt1 = (-0.11) + kt1l = (0.0) + kt2 = (-0.022) + ute = (-1.48) + ua1 = (4.31e-09) + ub1 = (-7.61e-18) + uc1 = (-5.6e-11) + prt = (0.0) + at = (3.3e+04) + ijth = (0.1) + js = (0.0001) + jsw = (0.0) + pb = (1.0) + cj = (0.0005) + mj = (0.5) + pbsw = (1.0) + cjsw = (5e-10) + mjsw = (0.33) + pbswg = (1.0) + cjswg = (5e-10) + mjswg = (0.33) + tpb = (0.005) + tcj = (0.001) + tpbsw = (0.005) + tcjsw = (0.001) + tpbswg = (0.005) + tcjswg = (0.001) + xti = (3) tmpk8ny_4pz/tests/bsim3/nmos/reference/0000755000175000017500000000000013546075722020251 5ustar carstencarstentmpk8ny_4pz/tests/bsim3/nmos/reference/dcSweep_lw4.standard0000644000175000017500000003054613546075722024163 0ustar carstencarstenV(d) I(d) 1.000000e-01 1.027650e-14 2.000000e-01 1.121325e-14 3.000000e-01 1.070671e-14 4.000000e-01 1.082467e-14 5.000000e-01 1.093570e-14 6.000000e-01 1.103284e-14 7.000000e-01 1.114386e-14 8.000000e-01 1.124101e-14 9.000000e-01 1.135203e-14 1.000000e+00 1.144917e-14 1.100000e+00 1.156020e-14 1.200000e+00 1.167122e-14 1.300000e+00 1.179612e-14 1.400000e+00 1.190714e-14 1.500000e+00 1.201816e-14 1.600000e+00 1.212919e-14 1.700000e+00 1.224021e-14 1.800000e+00 1.235123e-14 1.000000e-01 6.398354e-14 2.000000e-01 6.889281e-14 3.000000e-01 6.805667e-14 4.000000e-01 6.947221e-14 5.000000e-01 7.083917e-14 6.000000e-01 7.220613e-14 7.000000e-01 7.355228e-14 8.000000e-01 7.489842e-14 9.000000e-01 7.625844e-14 1.000000e+00 7.761847e-14 1.100000e+00 7.897849e-14 1.200000e+00 8.032464e-14 1.300000e+00 8.174017e-14 1.400000e+00 8.307244e-14 1.500000e+00 8.446022e-14 1.600000e+00 8.582024e-14 1.700000e+00 8.720802e-14 1.800000e+00 8.859580e-14 1.000000e-01 7.541764e-12 2.000000e-01 7.852378e-12 3.000000e-01 8.051726e-12 4.000000e-01 8.234621e-12 5.000000e-01 8.412278e-12 6.000000e-01 8.587804e-12 7.000000e-01 8.762463e-12 8.000000e-01 8.936810e-12 9.000000e-01 9.111253e-12 1.000000e+00 9.285933e-12 1.100000e+00 9.461001e-12 1.200000e+00 9.636569e-12 1.300000e+00 9.812623e-12 1.400000e+00 9.989259e-12 1.500000e+00 1.016653e-11 1.600000e+00 1.034439e-11 1.700000e+00 1.052292e-11 1.800000e+00 1.070211e-11 1.000000e-01 9.632089e-10 2.000000e-01 1.002895e-09 3.000000e-01 1.028256e-09 4.000000e-01 1.051494e-09 5.000000e-01 1.074051e-09 6.000000e-01 1.096328e-09 7.000000e-01 1.118487e-09 8.000000e-01 1.140605e-09 9.000000e-01 1.162724e-09 1.000000e+00 1.184871e-09 1.100000e+00 1.207062e-09 1.200000e+00 1.229308e-09 1.300000e+00 1.251616e-09 1.400000e+00 1.273993e-09 1.500000e+00 1.296442e-09 1.600000e+00 1.318966e-09 1.700000e+00 1.341569e-09 1.800000e+00 1.364252e-09 1.000000e-01 7.922575e-08 2.000000e-01 8.311921e-08 3.000000e-01 8.512582e-08 4.000000e-01 8.687458e-08 5.000000e-01 8.853531e-08 6.000000e-01 9.015533e-08 7.000000e-01 9.175392e-08 8.000000e-01 9.334064e-08 9.000000e-01 9.492086e-08 1.000000e+00 9.649782e-08 1.100000e+00 9.807362e-08 1.200000e+00 9.964970e-08 1.300000e+00 1.012270e-07 1.400000e+00 1.028064e-07 1.500000e+00 1.043883e-07 1.600000e+00 1.059731e-07 1.700000e+00 1.075612e-07 1.800000e+00 1.091528e-07 1.000000e-01 1.325526e-06 2.000000e-01 1.710960e-06 3.000000e-01 1.781708e-06 4.000000e-01 1.816514e-06 5.000000e-01 1.843243e-06 6.000000e-01 1.866458e-06 7.000000e-01 1.887724e-06 8.000000e-01 1.907774e-06 9.000000e-01 1.927010e-06 1.000000e+00 1.945675e-06 1.100000e+00 1.963924e-06 1.200000e+00 1.981862e-06 1.300000e+00 1.999562e-06 1.400000e+00 2.017078e-06 1.500000e+00 2.034448e-06 1.600000e+00 2.051702e-06 1.700000e+00 2.068864e-06 1.800000e+00 2.085951e-06 1.000000e-01 3.457462e-06 2.000000e-01 5.578518e-06 3.000000e-01 6.558507e-06 4.000000e-01 6.879134e-06 5.000000e-01 7.022217e-06 6.000000e-01 7.118724e-06 7.000000e-01 7.195118e-06 8.000000e-01 7.260334e-06 9.000000e-01 7.318544e-06 1.000000e+00 7.372034e-06 1.100000e+00 7.422182e-06 1.200000e+00 7.469874e-06 1.300000e+00 7.515707e-06 1.400000e+00 7.560100e-06 1.500000e+00 7.603356e-06 1.600000e+00 7.645697e-06 1.700000e+00 7.687293e-06 1.800000e+00 7.728275e-06 1.000000e-01 5.521359e-06 2.000000e-01 9.563571e-06 3.000000e-01 1.225716e-05 4.000000e-01 1.376452e-05 5.000000e-01 1.443416e-05 6.000000e-01 1.475479e-05 7.000000e-01 1.495992e-05 8.000000e-01 1.511406e-05 9.000000e-01 1.523992e-05 1.000000e+00 1.534811e-05 1.100000e+00 1.544443e-05 1.200000e+00 1.553235e-05 1.300000e+00 1.561413e-05 1.400000e+00 1.569125e-05 1.500000e+00 1.576476e-05 1.600000e+00 1.583543e-05 1.700000e+00 1.590381e-05 1.800000e+00 1.597033e-05 1.000000e-01 7.485695e-06 2.000000e-01 1.339346e-05 3.000000e-01 1.785114e-05 4.000000e-01 2.098026e-05 5.000000e-01 2.292351e-05 6.000000e-01 2.395045e-05 7.000000e-01 2.449193e-05 8.000000e-01 2.483583e-05 9.000000e-01 2.508748e-05 1.000000e+00 2.528746e-05 1.100000e+00 2.545513e-05 1.200000e+00 2.560111e-05 1.300000e+00 2.573179e-05 1.400000e+00 2.585125e-05 1.500000e+00 2.596225e-05 1.600000e+00 2.606669e-05 1.700000e+00 2.616597e-05 1.800000e+00 2.626108e-05 1.000000e-01 1.004578e-14 2.000000e-01 1.043263e-14 3.000000e-01 1.030426e-14 4.000000e-01 1.040140e-14 5.000000e-01 1.050549e-14 6.000000e-01 1.060263e-14 7.000000e-01 1.071365e-14 8.000000e-01 1.081080e-14 9.000000e-01 1.090794e-14 1.000000e+00 1.100509e-14 1.100000e+00 1.111611e-14 1.200000e+00 1.121325e-14 1.300000e+00 1.129652e-14 1.400000e+00 1.140754e-14 1.500000e+00 1.149081e-14 1.600000e+00 1.160183e-14 1.700000e+00 1.171285e-14 1.800000e+00 1.179612e-14 1.000000e-01 1.024007e-14 2.000000e-01 1.064079e-14 3.000000e-01 1.050895e-14 4.000000e-01 1.061651e-14 5.000000e-01 1.072753e-14 6.000000e-01 1.083161e-14 7.000000e-01 1.093570e-14 8.000000e-01 1.103284e-14 9.000000e-01 1.112999e-14 1.000000e+00 1.124101e-14 1.100000e+00 1.136591e-14 1.200000e+00 1.144917e-14 1.300000e+00 1.157408e-14 1.400000e+00 1.168510e-14 1.500000e+00 1.179612e-14 1.600000e+00 1.187939e-14 1.700000e+00 1.199041e-14 1.800000e+00 1.210143e-14 1.000000e-01 1.606822e-13 2.000000e-01 1.718521e-13 3.000000e-01 1.734238e-13 4.000000e-01 1.785794e-13 5.000000e-01 1.836448e-13 6.000000e-01 1.887032e-13 7.000000e-01 1.937478e-13 8.000000e-01 1.988132e-13 9.000000e-01 2.038786e-13 1.000000e+00 2.089579e-13 1.100000e+00 2.140649e-13 1.200000e+00 2.192413e-13 1.300000e+00 2.244038e-13 1.400000e+00 2.295664e-13 1.500000e+00 2.347844e-13 1.600000e+00 2.400302e-13 1.700000e+00 2.452760e-13 1.800000e+00 2.506051e-13 1.000000e-01 1.115640e-10 2.000000e-01 1.168407e-10 3.000000e-01 1.207929e-10 4.000000e-01 1.245311e-10 5.000000e-01 1.282061e-10 6.000000e-01 1.318615e-10 7.000000e-01 1.355147e-10 8.000000e-01 1.391742e-10 9.000000e-01 1.428448e-10 1.000000e+00 1.465291e-10 1.100000e+00 1.502291e-10 1.200000e+00 1.539458e-10 1.300000e+00 1.576802e-10 1.400000e+00 1.614329e-10 1.500000e+00 1.652043e-10 1.600000e+00 1.689950e-10 1.700000e+00 1.728052e-10 1.800000e+00 1.766351e-10 1.000000e-01 4.570355e-08 2.000000e-01 4.790822e-08 3.000000e-01 4.941255e-08 4.000000e-01 5.080082e-08 5.000000e-01 5.215025e-08 6.000000e-01 5.348360e-08 7.000000e-01 5.481016e-08 8.000000e-01 5.613452e-08 9.000000e-01 5.745919e-08 1.000000e+00 5.878571e-08 1.100000e+00 6.011503e-08 1.200000e+00 6.144782e-08 1.300000e+00 6.278454e-08 1.400000e+00 6.412551e-08 1.500000e+00 6.547098e-08 1.600000e+00 6.682115e-08 1.700000e+00 6.817616e-08 1.800000e+00 6.953613e-08 1.000000e-01 1.770217e-06 2.000000e-01 2.139202e-06 3.000000e-01 2.216360e-06 4.000000e-01 2.261960e-06 5.000000e-01 2.298505e-06 6.000000e-01 2.330925e-06 7.000000e-01 2.361072e-06 8.000000e-01 2.389828e-06 9.000000e-01 2.417671e-06 1.000000e+00 2.444885e-06 1.100000e+00 2.471650e-06 1.200000e+00 2.498086e-06 1.300000e+00 2.524274e-06 1.400000e+00 2.550275e-06 1.500000e+00 2.576130e-06 1.600000e+00 2.601874e-06 1.700000e+00 2.627531e-06 1.800000e+00 2.653120e-06 1.000000e-01 5.256134e-06 2.000000e-01 8.163905e-06 3.000000e-01 9.283990e-06 4.000000e-01 9.646029e-06 5.000000e-01 9.832983e-06 6.000000e-01 9.964008e-06 7.000000e-01 1.006918e-05 8.000000e-01 1.016002e-05 9.000000e-01 1.024205e-05 1.000000e+00 1.031825e-05 1.100000e+00 1.039039e-05 1.200000e+00 1.045960e-05 1.300000e+00 1.052663e-05 1.400000e+00 1.059197e-05 1.500000e+00 1.065601e-05 1.600000e+00 1.071900e-05 1.700000e+00 1.078115e-05 1.800000e+00 1.084261e-05 1.000000e-01 8.702928e-06 2.000000e-01 1.472371e-05 3.000000e-01 1.841242e-05 4.000000e-01 2.022545e-05 5.000000e-01 2.099143e-05 6.000000e-01 2.139283e-05 7.000000e-01 2.165947e-05 8.000000e-01 2.186219e-05 9.000000e-01 2.202935e-05 1.000000e+00 2.217464e-05 1.100000e+00 2.230549e-05 1.200000e+00 2.242631e-05 1.300000e+00 2.253989e-05 1.400000e+00 2.264805e-05 1.500000e+00 2.275207e-05 1.600000e+00 2.285284e-05 1.700000e+00 2.295103e-05 1.800000e+00 2.304713e-05 1.000000e-01 1.200264e-05 2.000000e-01 2.107861e-05 3.000000e-01 2.757481e-05 4.000000e-01 3.180805e-05 5.000000e-01 3.416975e-05 6.000000e-01 3.533889e-05 7.000000e-01 3.598293e-05 8.000000e-01 3.640547e-05 9.000000e-01 3.671867e-05 1.000000e+00 3.697025e-05 1.100000e+00 3.718372e-05 1.200000e+00 3.737200e-05 1.300000e+00 3.754275e-05 1.400000e+00 3.770081e-05 1.500000e+00 3.784941e-05 1.600000e+00 3.799075e-05 1.700000e+00 3.812641e-05 1.800000e+00 3.825754e-05 1.000000e-01 1.945735e-13 2.000000e-01 2.030667e-13 3.000000e-01 2.069074e-13 4.000000e-01 2.102277e-13 5.000000e-01 2.133918e-13 6.000000e-01 2.164935e-13 7.000000e-01 2.195466e-13 8.000000e-01 2.225858e-13 9.000000e-01 2.256251e-13 1.000000e+00 2.286643e-13 1.100000e+00 2.317035e-13 1.200000e+00 2.347150e-13 1.300000e+00 2.377543e-13 1.400000e+00 2.408074e-13 1.500000e+00 2.438327e-13 1.600000e+00 2.468858e-13 1.700000e+00 2.499390e-13 1.800000e+00 2.529921e-13 1.000000e-01 6.147088e-12 2.000000e-01 6.406028e-12 3.000000e-01 6.528951e-12 4.000000e-01 6.635678e-12 5.000000e-01 6.737333e-12 6.000000e-01 6.836753e-12 7.000000e-01 6.935050e-12 8.000000e-01 7.032722e-12 9.000000e-01 7.130074e-12 1.000000e+00 7.227288e-12 1.100000e+00 7.324474e-12 1.200000e+00 7.421730e-12 1.300000e+00 7.519041e-12 1.400000e+00 7.616519e-12 1.500000e+00 7.714163e-12 1.600000e+00 7.811973e-12 1.700000e+00 7.910034e-12 1.800000e+00 8.008316e-12 1.000000e-01 1.977246e-10 2.000000e-01 2.060488e-10 3.000000e-01 2.099990e-10 4.000000e-01 2.134276e-10 5.000000e-01 2.166926e-10 6.000000e-01 2.198852e-10 7.000000e-01 2.230409e-10 8.000000e-01 2.261768e-10 9.000000e-01 2.293023e-10 1.000000e+00 2.324230e-10 1.100000e+00 2.355425e-10 1.200000e+00 2.386633e-10 1.300000e+00 2.417873e-10 1.400000e+00 2.449154e-10 1.500000e+00 2.480489e-10 1.600000e+00 2.511883e-10 1.700000e+00 2.543342e-10 1.800000e+00 2.574871e-10 1.000000e-01 5.615877e-09 2.000000e-01 5.859827e-09 3.000000e-01 5.971727e-09 4.000000e-01 6.068145e-09 5.000000e-01 6.159684e-09 6.000000e-01 6.249044e-09 7.000000e-01 6.337271e-09 8.000000e-01 6.424869e-09 9.000000e-01 6.512119e-09 1.000000e+00 6.599190e-09 1.100000e+00 6.686189e-09 1.200000e+00 6.773190e-09 1.300000e+00 6.860246e-09 1.400000e+00 6.947393e-09 1.500000e+00 7.034660e-09 1.600000e+00 7.122067e-09 1.700000e+00 7.209632e-09 1.800000e+00 7.297368e-09 1.000000e-01 1.194588e-07 2.000000e-01 1.286612e-07 3.000000e-01 1.312572e-07 4.000000e-01 1.332639e-07 5.000000e-01 1.350928e-07 6.000000e-01 1.368384e-07 7.000000e-01 1.385372e-07 8.000000e-01 1.402070e-07 9.000000e-01 1.418578e-07 1.000000e+00 1.434960e-07 1.100000e+00 1.451255e-07 1.200000e+00 1.467492e-07 1.300000e+00 1.483690e-07 1.400000e+00 1.499863e-07 1.500000e+00 1.516023e-07 1.600000e+00 1.532178e-07 1.700000e+00 1.548335e-07 1.800000e+00 1.564498e-07 1.000000e-01 8.949177e-07 2.000000e-01 1.258903e-06 3.000000e-01 1.334814e-06 4.000000e-01 1.360451e-06 5.000000e-01 1.378343e-06 6.000000e-01 1.393468e-06 7.000000e-01 1.407120e-06 8.000000e-01 1.419849e-06 9.000000e-01 1.431951e-06 1.000000e+00 1.443604e-06 1.100000e+00 1.454924e-06 1.200000e+00 1.465989e-06 1.300000e+00 1.476857e-06 1.400000e+00 1.487569e-06 1.500000e+00 1.498154e-06 1.600000e+00 1.508638e-06 1.700000e+00 1.519038e-06 1.800000e+00 1.529369e-06 1.000000e-01 2.076317e-06 2.000000e-01 3.476175e-06 3.000000e-01 4.255036e-06 4.000000e-01 4.558125e-06 5.000000e-01 4.666922e-06 6.000000e-01 4.730960e-06 7.000000e-01 4.780230e-06 8.000000e-01 4.821929e-06 9.000000e-01 4.858911e-06 1.000000e+00 4.892668e-06 1.100000e+00 4.924097e-06 1.200000e+00 4.953783e-06 1.300000e+00 4.982126e-06 1.400000e+00 5.009413e-06 1.500000e+00 5.035852e-06 1.600000e+00 5.061603e-06 1.700000e+00 5.086785e-06 1.800000e+00 5.111493e-06 1.000000e-01 3.199444e-06 2.000000e-01 5.666076e-06 3.000000e-01 7.441879e-06 4.000000e-01 8.575078e-06 5.000000e-01 9.159609e-06 6.000000e-01 9.415506e-06 7.000000e-01 9.556907e-06 8.000000e-01 9.658987e-06 9.000000e-01 9.741688e-06 1.000000e+00 9.812526e-06 1.100000e+00 9.875309e-06 1.200000e+00 9.932295e-06 1.300000e+00 9.984947e-06 1.400000e+00 1.003426e-05 1.500000e+00 1.008095e-05 1.600000e+00 1.012553e-05 1.700000e+00 1.016839e-05 1.800000e+00 1.020984e-05 1.000000e-01 4.244561e-06 2.000000e-01 7.721325e-06 3.000000e-01 1.047115e-05 4.000000e-01 1.253378e-05 5.000000e-01 1.395288e-05 6.000000e-01 1.479942e-05 7.000000e-01 1.523616e-05 8.000000e-01 1.548188e-05 9.000000e-01 1.565331e-05 1.000000e+00 1.578833e-05 1.100000e+00 1.590130e-05 1.200000e+00 1.599939e-05 1.300000e+00 1.608681e-05 1.400000e+00 1.616626e-05 1.500000e+00 1.623959e-05 1.600000e+00 1.630811e-05 1.700000e+00 1.637276e-05 1.800000e+00 1.643427e-05 tmpk8ny_4pz/tests/bsim3/nmos/reference/acFreq_acnqsmod.standard0000644000175000017500000000713313546075722025065 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.57706071178543e-14 2.05822355505301e-14 4.55132207661031e-15 1258.925 2.57706166768854e-14 2.05822736223065e-14 4.55131873403097e-15 1584.893 2.57706119481062e-14 2.05822824922572e-14 4.55131523375102e-15 1995.262 2.57706138235795e-14 2.05822138250239e-14 4.55132140963526e-15 2511.886 2.57706166885567e-14 2.05822278653798e-14 4.55131564138994e-15 3162.278 2.57706072599337e-14 2.05822297367015e-14 4.55131545779621e-15 3981.072 2.57706091228265e-14 2.05822278274373e-14 4.55132528405412e-15 5011.872 2.57706124512689e-14 2.05822256814014e-14 4.55130616040468e-15 6309.573 2.57706191115458e-14 2.05822456527351e-14 4.55130701346984e-15 7943.282 2.57706043856278e-14 2.05822132138477e-14 4.55131312638909e-15 10000 2.57706071178543e-14 2.05822355505301e-14 4.55132207661031e-15 12589.25 2.57706166768854e-14 2.05822736223065e-14 4.55131873403097e-15 15848.93 2.57706119481062e-14 2.05822824922572e-14 4.55131523375102e-15 19952.62 2.57706138235795e-14 2.05822138250239e-14 4.55132140963526e-15 25118.86 2.57706166885567e-14 2.05822278653798e-14 4.55131564138994e-15 31622.78 2.57706072599337e-14 2.05822297367015e-14 4.55131545779621e-15 39810.72 2.57706091228265e-14 2.05822278274373e-14 4.55132528405412e-15 50118.72 2.57706124512689e-14 2.05822256814014e-14 4.55130616040468e-15 63095.73 2.57706191115458e-14 2.05822456527351e-14 4.55130701346984e-15 79432.82 2.57706043856278e-14 2.05822132138477e-14 4.55131312638909e-15 100000 2.57706071178543e-14 2.05822355505301e-14 4.55132207661031e-15 125892.5 2.57706166768854e-14 2.05822736223065e-14 4.55131873403097e-15 158489.3 2.57706119481062e-14 2.05822824922572e-14 4.55131523375102e-15 199526.2 2.57706138235795e-14 2.05822138250239e-14 4.55132140963526e-15 251188.6 2.57706166885567e-14 2.05822278653798e-14 4.55131564138994e-15 316227.8 2.57706072599337e-14 2.05822297367014e-14 4.55131545779621e-15 398107.2 2.57706091228265e-14 2.05822278274373e-14 4.55132528405412e-15 501187.2 2.57706124512689e-14 2.05822256814014e-14 4.55130616040468e-15 630957.3 2.57706191115458e-14 2.05822456527351e-14 4.55130701346984e-15 794328.2 2.57706043856278e-14 2.05822132138477e-14 4.55131312638909e-15 1000000 2.57706071178543e-14 2.05822355505301e-14 4.55132207661031e-15 1258925 2.57706166768854e-14 2.05822736223065e-14 4.55131873403097e-15 1584893 2.57706119481062e-14 2.05822824922572e-14 4.55131523375102e-15 1995262 2.57706138235795e-14 2.05822138250239e-14 4.55132140963526e-15 2511886 2.57706103524832e-14 2.05822278653798e-14 4.55131564138994e-15 3162278 2.5770602227013e-14 2.05822297367014e-14 4.55131545779621e-15 3981072 2.57706011272443e-14 2.05822278274373e-14 4.55132528405412e-15 5011872 2.57705965734748e-14 2.05822256814014e-14 4.55130616040468e-15 6309573 2.57705938871854e-14 2.05822204283747e-14 4.55130701346984e-15 7943282 2.57705643127856e-14 2.05822132138477e-14 4.55131312638909e-15 10000000 2.57705434558771e-14 2.05822355505301e-14 4.55132207661031e-15 12589250 2.57705155398403e-14 2.05821472010001e-14 4.55131873403097e-15 15848930 2.57704613181175e-14 2.05820816522723e-14 4.55131523375102e-15 19952620 2.5770366547621e-14 2.0581894759271e-14 4.55132140963526e-15 25118860 2.57702175159265e-14 2.05817209795002e-14 4.55131564138994e-15 31622780 2.576997814485e-14 2.05814244693943e-14 4.55131545779621e-15 39810720 2.57696136728364e-14 2.05809885121886e-14 4.55132528405412e-15 50118720 2.57690341985378e-14 2.05802568349361e-14 4.55130616040468e-15 63095730 2.57680966755095e-14 2.05790926076896e-14 4.55130701346984e-15 79432820 2.57666371742494e-14 2.05772041085719e-14 4.55131312638909e-15 100000000 2.57643204976022e-14 2.05742778033755e-14 4.55132207661031e-15 tmpk8ny_4pz/tests/bsim3/nmos/reference/acFreq_mobmod.standard0000644000175000017500000000711213546075722024532 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.575607627155e-14 2.05660017463347e-14 4.55253165417781e-15 1258.925 2.57560782266555e-14 2.05659652737878e-14 4.5525323785719e-15 1584.893 2.57560811751989e-14 2.05659140334881e-14 4.55254035765889e-15 1995.262 2.57560803785325e-14 2.05659414716233e-14 4.55253385949648e-15 2511.886 2.57560817359572e-14 2.05659441564955e-14 4.55253850357464e-15 3162.278 2.57560721850399e-14 2.0565923073732e-14 4.55253845751892e-15 3981.072 2.57560731542964e-14 2.05659168396477e-14 4.55252462139159e-15 5011.872 2.57560747430139e-14 2.05659350646805e-14 4.55254462834252e-15 6309.573 2.57560646556161e-14 2.05659254915799e-14 4.55254300712765e-15 7943.282 2.57560779803282e-14 2.05659837127543e-14 4.55253534807638e-15 10000 2.575607627155e-14 2.05660017463347e-14 4.55253165417781e-15 12589.25 2.57560782266555e-14 2.05659652737878e-14 4.5525323785719e-15 15848.93 2.57560811751989e-14 2.05659140334881e-14 4.55254035765889e-15 19952.62 2.57560803785325e-14 2.05659414716233e-14 4.55253385949648e-15 25118.86 2.57560817359572e-14 2.05659441564955e-14 4.55253850357464e-15 31622.78 2.57560721850399e-14 2.0565923073732e-14 4.55253845751892e-15 39810.72 2.57560731542964e-14 2.05659168396477e-14 4.55252462139159e-15 50118.72 2.57560747430139e-14 2.05659350646805e-14 4.55254462834252e-15 63095.73 2.57560646556161e-14 2.05659254915799e-14 4.55254300712765e-15 79432.82 2.57560779803282e-14 2.05659837127543e-14 4.55253534807638e-15 100000 2.575607627155e-14 2.05660017463347e-14 4.55253165417781e-15 125892.5 2.57560782266555e-14 2.05659652737878e-14 4.5525323785719e-15 158489.3 2.57560811751989e-14 2.05659140334881e-14 4.55254035765889e-15 199526.2 2.57560803785325e-14 2.05659414716233e-14 4.55253385949648e-15 251188.6 2.57560817359572e-14 2.05659441564955e-14 4.55253850357464e-15 316227.8 2.57560721850399e-14 2.0565923073732e-14 4.55253845751892e-15 398107.2 2.57560731542964e-14 2.05659168396477e-14 4.55252462139159e-15 501187.2 2.57560747430139e-14 2.05659350646805e-14 4.55254462834252e-15 630957.3 2.57560646556161e-14 2.05659254915799e-14 4.55254300712765e-15 794328.2 2.57560779803282e-14 2.05659837127543e-14 4.55253534807638e-15 1000000 2.575607627155e-14 2.05660017463347e-14 4.55253165417781e-15 1258925 2.57560782266555e-14 2.05659652737878e-14 4.5525323785719e-15 1584893 2.57560811751989e-14 2.05659140334881e-14 4.55254035765889e-15 1995262 2.57560803785325e-14 2.05659414716233e-14 4.55253385949648e-15 2511886 2.57560817359572e-14 2.05659441564955e-14 4.55253850357464e-15 3162278 2.57560721850399e-14 2.0565923073732e-14 4.55253845751892e-15 3981072 2.57560731542964e-14 2.05659168396477e-14 4.55252462139159e-15 5011872 2.57560747430139e-14 2.05659350646805e-14 4.55254462834252e-15 6309573 2.57560646556161e-14 2.05659254915799e-14 4.55254300712765e-15 7943282 2.57560779803282e-14 2.05659837127543e-14 4.55253534807638e-15 10000000 2.575607627155e-14 2.05660017463347e-14 4.55253165417781e-15 12589250 2.57560782266555e-14 2.05659652737878e-14 4.5525323785719e-15 15848930 2.57560811751989e-14 2.05659140334881e-14 4.55254035765889e-15 19952620 2.57560803785325e-14 2.05659414716233e-14 4.55253385949648e-15 25118860 2.57560817359572e-14 2.05659441564955e-14 4.55253850357464e-15 31622780 2.57560721850399e-14 2.0565923073732e-14 4.55253845751892e-15 39810720 2.57560731542964e-14 2.05659168396477e-14 4.55252462139159e-15 50118720 2.57560747430139e-14 2.05659350646805e-14 4.55254462834252e-15 63095730 2.57560646556161e-14 2.05659254915799e-14 4.55254300712765e-15 79432820 2.57560779803282e-14 2.05659837127543e-14 4.55253534807638e-15 100000000 2.575607627155e-14 2.05660017463347e-14 4.55253165417781e-15 tmpk8ny_4pz/tests/bsim3/nmos/reference/dcSweep_nrd_nrs.standard0000644000175000017500000003054613546075722025122 0ustar carstencarstenV(d) I(d) 1.000000e-01 7.015178e-13 2.000000e-01 7.309136e-13 3.000000e-01 7.498169e-13 4.000000e-01 7.671745e-13 5.000000e-01 7.840291e-13 6.000000e-01 8.006859e-13 7.000000e-01 8.172629e-13 8.000000e-01 8.337983e-13 9.000000e-01 8.503614e-13 1.000000e+00 8.669315e-13 1.100000e+00 8.835432e-13 1.200000e+00 9.002105e-13 1.300000e+00 9.169054e-13 1.400000e+00 9.336837e-13 1.500000e+00 9.504758e-13 1.600000e+00 9.673512e-13 1.700000e+00 9.842960e-13 1.800000e+00 1.001296e-12 1.000000e-01 9.622446e-11 2.000000e-01 1.002705e-10 3.000000e-01 1.028850e-10 4.000000e-01 1.052844e-10 5.000000e-01 1.076147e-10 6.000000e-01 1.099168e-10 7.000000e-01 1.122072e-10 8.000000e-01 1.144938e-10 9.000000e-01 1.167811e-10 1.000000e+00 1.190716e-10 1.100000e+00 1.213672e-10 1.200000e+00 1.236688e-10 1.300000e+00 1.259774e-10 1.400000e+00 1.282935e-10 1.500000e+00 1.306175e-10 1.600000e+00 1.329497e-10 1.700000e+00 1.352905e-10 1.800000e+00 1.376401e-10 1.000000e-01 1.220038e-08 2.000000e-01 1.271355e-08 3.000000e-01 1.304336e-08 4.000000e-01 1.334561e-08 5.000000e-01 1.363892e-08 6.000000e-01 1.392855e-08 7.000000e-01 1.421659e-08 8.000000e-01 1.450408e-08 9.000000e-01 1.479157e-08 1.000000e+00 1.507940e-08 1.100000e+00 1.536779e-08 1.200000e+00 1.565688e-08 1.300000e+00 1.594677e-08 1.400000e+00 1.623754e-08 1.500000e+00 1.652924e-08 1.600000e+00 1.682192e-08 1.700000e+00 1.711562e-08 1.800000e+00 1.741034e-08 1.000000e-01 9.744946e-07 2.000000e-01 1.024590e-06 3.000000e-01 1.049826e-06 4.000000e-01 1.071660e-06 5.000000e-01 1.092322e-06 6.000000e-01 1.112435e-06 7.000000e-01 1.132256e-06 8.000000e-01 1.151912e-06 9.000000e-01 1.171474e-06 1.000000e+00 1.190986e-06 1.100000e+00 1.210476e-06 1.200000e+00 1.229963e-06 1.300000e+00 1.249459e-06 1.400000e+00 1.268976e-06 1.500000e+00 1.288520e-06 1.600000e+00 1.308097e-06 1.700000e+00 1.327710e-06 1.800000e+00 1.347364e-06 1.000000e-01 1.467815e-05 2.000000e-01 1.921881e-05 3.000000e-01 2.007334e-05 4.000000e-01 2.047693e-05 5.000000e-01 2.078134e-05 6.000000e-01 2.104318e-05 7.000000e-01 2.128159e-05 8.000000e-01 2.150548e-05 9.000000e-01 2.171970e-05 1.000000e+00 2.192713e-05 1.100000e+00 2.212964e-05 1.200000e+00 2.232848e-05 1.300000e+00 2.252450e-05 1.400000e+00 2.271834e-05 1.500000e+00 2.291046e-05 1.600000e+00 2.310120e-05 1.700000e+00 2.329084e-05 1.800000e+00 2.347958e-05 1.000000e-01 3.663413e-05 2.000000e-01 5.944322e-05 3.000000e-01 7.030281e-05 4.000000e-01 7.395268e-05 5.000000e-01 7.554802e-05 6.000000e-01 7.660393e-05 7.000000e-01 7.743046e-05 8.000000e-01 7.813107e-05 9.000000e-01 7.875349e-05 1.000000e+00 7.932362e-05 1.100000e+00 7.985693e-05 1.200000e+00 8.036332e-05 1.300000e+00 8.084941e-05 1.400000e+00 8.131983e-05 1.500000e+00 8.177789e-05 1.600000e+00 8.222605e-05 1.700000e+00 8.266615e-05 1.800000e+00 8.309962e-05 1.000000e-01 5.744972e-05 2.000000e-01 9.987256e-05 3.000000e-01 1.284918e-04 4.000000e-01 1.448381e-04 5.000000e-01 1.522538e-04 6.000000e-01 1.557706e-04 7.000000e-01 1.579804e-04 8.000000e-01 1.596206e-04 9.000000e-01 1.609491e-04 1.000000e+00 1.620849e-04 1.100000e+00 1.630924e-04 1.200000e+00 1.640098e-04 1.300000e+00 1.648616e-04 1.400000e+00 1.656639e-04 1.500000e+00 1.664280e-04 1.600000e+00 1.671621e-04 1.700000e+00 1.678721e-04 1.800000e+00 1.685626e-04 1.000000e-01 7.693069e-05 2.000000e-01 1.381024e-04 3.000000e-01 1.846618e-04 4.000000e-01 2.177224e-04 5.000000e-01 2.386032e-04 6.000000e-01 2.498298e-04 7.000000e-01 2.557206e-04 8.000000e-01 2.593986e-04 9.000000e-01 2.620544e-04 1.000000e+00 2.641457e-04 1.100000e+00 2.658881e-04 1.200000e+00 2.673986e-04 1.300000e+00 2.687467e-04 1.400000e+00 2.699766e-04 1.500000e+00 2.711177e-04 1.600000e+00 2.721904e-04 1.700000e+00 2.732094e-04 1.800000e+00 2.741852e-04 1.000000e-01 9.521714e-05 2.000000e-01 1.741702e-04 3.000000e-01 2.379697e-04 4.000000e-01 2.876564e-04 5.000000e-01 3.242435e-04 6.000000e-01 3.488945e-04 7.000000e-01 3.636309e-04 8.000000e-01 3.720538e-04 9.000000e-01 3.773933e-04 1.000000e+00 3.812046e-04 1.100000e+00 3.841560e-04 1.200000e+00 3.865732e-04 1.300000e+00 3.886350e-04 1.400000e+00 3.904482e-04 1.500000e+00 3.920804e-04 1.600000e+00 3.935768e-04 1.700000e+00 3.949687e-04 1.800000e+00 3.962785e-04 1.000000e-01 1.268517e-14 2.000000e-01 1.326196e-14 3.000000e-01 1.316482e-14 4.000000e-01 1.335737e-14 5.000000e-01 1.354472e-14 6.000000e-01 1.373207e-14 7.000000e-01 1.392636e-14 8.000000e-01 1.411371e-14 9.000000e-01 1.429412e-14 1.000000e+00 1.449535e-14 1.100000e+00 1.467576e-14 1.200000e+00 1.486311e-14 1.300000e+00 1.505740e-14 1.400000e+00 1.523781e-14 1.500000e+00 1.543210e-14 1.600000e+00 1.564027e-14 1.700000e+00 1.582068e-14 1.800000e+00 1.600109e-14 1.000000e-01 2.049316e-12 2.000000e-01 2.147752e-12 3.000000e-01 2.221731e-12 4.000000e-01 2.291736e-12 5.000000e-01 2.360570e-12 6.000000e-01 2.429043e-12 7.000000e-01 2.497474e-12 8.000000e-01 2.566052e-12 9.000000e-01 2.634830e-12 1.000000e+00 2.703872e-12 1.100000e+00 2.773233e-12 1.200000e+00 2.842893e-12 1.300000e+00 2.912906e-12 1.400000e+00 2.983253e-12 1.500000e+00 3.053960e-12 1.600000e+00 3.125056e-12 1.700000e+00 3.196512e-12 1.800000e+00 3.268344e-12 1.000000e-01 1.501375e-09 2.000000e-01 1.573627e-09 3.000000e-01 1.627884e-09 4.000000e-01 1.679208e-09 5.000000e-01 1.729659e-09 6.000000e-01 1.779836e-09 7.000000e-01 1.829982e-09 8.000000e-01 1.880212e-09 9.000000e-01 1.930592e-09 1.000000e+00 1.981160e-09 1.100000e+00 2.031941e-09 1.200000e+00 2.082950e-09 1.300000e+00 2.134202e-09 1.400000e+00 2.185703e-09 1.500000e+00 2.237461e-09 1.600000e+00 2.289482e-09 1.700000e+00 2.341770e-09 1.800000e+00 2.394327e-09 1.000000e-01 5.860128e-07 2.000000e-01 6.149425e-07 3.000000e-01 6.343902e-07 4.000000e-01 6.522529e-07 5.000000e-01 6.695773e-07 6.000000e-01 6.866735e-07 7.000000e-01 7.036687e-07 8.000000e-01 7.206259e-07 9.000000e-01 7.375796e-07 1.000000e+00 7.545509e-07 1.100000e+00 7.715531e-07 1.200000e+00 7.885953e-07 1.300000e+00 8.056836e-07 1.400000e+00 8.228227e-07 1.500000e+00 8.400159e-07 1.600000e+00 8.572659e-07 1.700000e+00 8.745748e-07 1.800000e+00 8.919441e-07 1.000000e-01 1.961407e-05 2.000000e-01 2.404072e-05 3.000000e-01 2.495106e-05 4.000000e-01 2.546964e-05 5.000000e-01 2.587861e-05 6.000000e-01 2.623833e-05 7.000000e-01 2.657114e-05 8.000000e-01 2.688754e-05 9.000000e-01 2.719322e-05 1.000000e+00 2.749151e-05 1.100000e+00 2.778454e-05 1.200000e+00 2.807370e-05 1.300000e+00 2.835994e-05 1.400000e+00 2.864397e-05 1.500000e+00 2.892627e-05 1.600000e+00 2.920723e-05 1.700000e+00 2.948714e-05 1.800000e+00 2.976621e-05 1.000000e-01 5.502689e-05 2.000000e-01 8.619049e-05 3.000000e-01 9.867964e-05 4.000000e-01 1.027325e-04 5.000000e-01 1.047650e-04 6.000000e-01 1.061648e-04 7.000000e-01 1.072773e-04 8.000000e-01 1.082326e-04 9.000000e-01 1.090920e-04 1.000000e+00 1.098884e-04 1.100000e+00 1.106413e-04 1.200000e+00 1.113628e-04 1.300000e+00 1.120609e-04 1.400000e+00 1.127411e-04 1.500000e+00 1.134074e-04 1.600000e+00 1.140627e-04 1.700000e+00 1.147090e-04 1.800000e+00 1.153480e-04 1.000000e-01 8.905062e-05 2.000000e-01 1.516129e-04 3.000000e-01 1.907443e-04 4.000000e-01 2.105387e-04 5.000000e-01 2.189527e-04 6.000000e-01 2.232561e-04 7.000000e-01 2.260606e-04 8.000000e-01 2.281682e-04 9.000000e-01 2.298938e-04 1.000000e+00 2.313870e-04 1.100000e+00 2.327281e-04 1.200000e+00 2.339642e-04 1.300000e+00 2.351249e-04 1.400000e+00 2.362293e-04 1.500000e+00 2.372910e-04 1.600000e+00 2.383192e-04 1.700000e+00 2.393209e-04 1.800000e+00 2.403010e-04 1.000000e-01 1.208408e-04 2.000000e-01 2.135581e-04 3.000000e-01 2.809843e-04 4.000000e-01 3.258176e-04 5.000000e-01 3.514631e-04 6.000000e-01 3.642359e-04 7.000000e-01 3.711198e-04 8.000000e-01 3.755430e-04 9.000000e-01 3.787771e-04 1.000000e+00 3.813522e-04 1.100000e+00 3.835252e-04 1.200000e+00 3.854348e-04 1.300000e+00 3.871626e-04 1.400000e+00 3.887597e-04 1.500000e+00 3.902598e-04 1.600000e+00 3.916857e-04 1.700000e+00 3.930539e-04 1.800000e+00 3.943761e-04 1.000000e-01 1.504462e-04 2.000000e-01 2.716323e-04 3.000000e-01 3.662874e-04 4.000000e-01 4.369025e-04 5.000000e-01 4.858496e-04 6.000000e-01 5.160005e-04 7.000000e-01 5.325400e-04 8.000000e-01 5.419106e-04 9.000000e-01 5.479620e-04 1.000000e+00 5.523405e-04 1.100000e+00 5.557764e-04 1.200000e+00 5.586321e-04 1.300000e+00 5.611061e-04 1.400000e+00 5.633160e-04 1.500000e+00 5.653357e-04 1.600000e+00 5.672138e-04 1.700000e+00 5.689838e-04 1.800000e+00 5.706694e-04 1.000000e-01 7.521019e-11 2.000000e-01 7.843966e-11 3.000000e-01 7.999924e-11 4.000000e-01 8.135545e-11 5.000000e-01 8.264696e-11 6.000000e-01 8.390966e-11 7.000000e-01 8.515760e-11 8.000000e-01 8.639759e-11 9.000000e-01 8.763339e-11 1.000000e+00 8.886727e-11 1.100000e+00 9.010071e-11 1.200000e+00 9.133468e-11 1.300000e+00 9.256991e-11 1.400000e+00 9.380685e-11 1.500000e+00 9.504593e-11 1.600000e+00 9.628739e-11 1.700000e+00 9.753148e-11 1.800000e+00 9.877843e-11 1.000000e-01 2.416756e-09 2.000000e-01 2.520591e-09 3.000000e-01 2.570638e-09 4.000000e-01 2.614137e-09 5.000000e-01 2.655551e-09 6.000000e-01 2.696034e-09 7.000000e-01 2.736039e-09 8.000000e-01 2.775786e-09 9.000000e-01 2.815395e-09 1.000000e+00 2.854939e-09 1.100000e+00 2.894467e-09 1.200000e+00 2.934009e-09 1.300000e+00 2.973589e-09 1.400000e+00 3.013222e-09 1.500000e+00 3.052920e-09 1.600000e+00 3.092693e-09 1.700000e+00 3.132548e-09 1.800000e+00 3.172491e-09 1.000000e-01 6.806550e-08 2.000000e-01 7.109373e-08 3.000000e-01 7.249936e-08 4.000000e-01 7.371112e-08 5.000000e-01 7.486086e-08 6.000000e-01 7.598261e-08 7.000000e-01 7.708968e-08 8.000000e-01 7.818856e-08 9.000000e-01 7.928285e-08 1.000000e+00 8.037471e-08 1.100000e+00 8.146555e-08 1.200000e+00 8.255632e-08 1.300000e+00 8.364768e-08 1.400000e+00 8.474013e-08 1.500000e+00 8.583403e-08 1.600000e+00 8.692964e-08 1.700000e+00 8.802720e-08 1.800000e+00 8.912686e-08 1.000000e-01 1.418908e-06 2.000000e-01 1.535861e-06 3.000000e-01 1.568091e-06 4.000000e-01 1.592758e-06 5.000000e-01 1.615121e-06 6.000000e-01 1.636399e-06 7.000000e-01 1.657061e-06 8.000000e-01 1.677340e-06 9.000000e-01 1.697368e-06 1.000000e+00 1.717225e-06 1.100000e+00 1.736966e-06 1.200000e+00 1.756625e-06 1.300000e+00 1.776230e-06 1.400000e+00 1.795799e-06 1.500000e+00 1.815347e-06 1.600000e+00 1.834883e-06 1.700000e+00 1.854417e-06 1.800000e+00 1.873955e-06 1.000000e-01 9.947095e-06 2.000000e-01 1.415600e-05 3.000000e-01 1.508577e-05 4.000000e-01 1.539118e-05 5.000000e-01 1.559981e-05 6.000000e-01 1.577424e-05 7.000000e-01 1.593059e-05 8.000000e-01 1.607567e-05 9.000000e-01 1.621313e-05 1.000000e+00 1.634515e-05 1.100000e+00 1.647315e-05 1.200000e+00 1.659809e-05 1.300000e+00 1.672065e-05 1.400000e+00 1.684133e-05 1.500000e+00 1.696050e-05 1.600000e+00 1.707845e-05 1.700000e+00 1.719540e-05 1.800000e+00 1.731151e-05 1.000000e-01 2.230063e-05 2.000000e-01 3.746855e-05 3.000000e-01 4.606679e-05 4.000000e-01 4.952731e-05 5.000000e-01 5.077722e-05 6.000000e-01 5.149929e-05 7.000000e-01 5.204788e-05 8.000000e-01 5.250830e-05 9.000000e-01 5.291422e-05 1.000000e+00 5.328315e-05 1.100000e+00 5.362556e-05 1.200000e+00 5.394821e-05 1.300000e+00 5.425572e-05 1.400000e+00 5.455135e-05 1.500000e+00 5.483750e-05 1.600000e+00 5.511595e-05 1.700000e+00 5.538807e-05 1.800000e+00 5.565492e-05 1.000000e-01 3.382291e-05 2.000000e-01 6.001481e-05 3.000000e-01 7.899758e-05 4.000000e-01 9.125355e-05 5.000000e-01 9.770522e-05 6.000000e-01 1.005694e-04 7.000000e-01 1.021366e-04 8.000000e-01 1.032542e-04 9.000000e-01 1.041517e-04 1.000000e+00 1.049154e-04 1.100000e+00 1.055890e-04 1.200000e+00 1.061983e-04 1.300000e+00 1.067597e-04 1.400000e+00 1.072845e-04 1.500000e+00 1.077806e-04 1.600000e+00 1.082538e-04 1.700000e+00 1.087083e-04 1.800000e+00 1.091476e-04 1.000000e-01 4.440693e-05 2.000000e-01 8.090724e-05 3.000000e-01 1.098998e-04 4.000000e-01 1.317754e-04 5.000000e-01 1.469639e-04 6.000000e-01 1.561573e-04 7.000000e-01 1.609646e-04 8.000000e-01 1.636586e-04 9.000000e-01 1.655174e-04 1.000000e+00 1.669678e-04 1.100000e+00 1.681730e-04 1.200000e+00 1.692139e-04 1.300000e+00 1.701380e-04 1.400000e+00 1.709754e-04 1.500000e+00 1.717465e-04 1.600000e+00 1.724657e-04 1.700000e+00 1.731436e-04 1.800000e+00 1.737879e-04 1.000000e-01 5.430850e-05 2.000000e-01 1.005339e-04 3.000000e-01 1.390623e-04 4.000000e-01 1.702630e-04 5.000000e-01 1.944975e-04 6.000000e-01 2.121556e-04 7.000000e-01 2.238008e-04 8.000000e-01 2.306377e-04 9.000000e-01 2.346706e-04 1.000000e+00 2.374236e-04 1.100000e+00 2.395335e-04 1.200000e+00 2.412579e-04 1.300000e+00 2.427250e-04 1.400000e+00 2.440092e-04 1.500000e+00 2.451581e-04 1.600000e+00 2.462036e-04 1.700000e+00 2.471685e-04 1.800000e+00 2.480689e-04 tmpk8ny_4pz/tests/bsim3/nmos/reference/acFreq_capmod.standard0000644000175000017500000000713213546075722024522 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.6970985529642e-14 2.15287299970976e-14 4.79263280132625e-15 1258.925 2.69709996227732e-14 2.15287899429205e-14 4.79264436571524e-15 1584.893 2.69709923698402e-14 2.15287409210856e-14 4.79264455960358e-15 1995.262 2.69709950226937e-14 2.15288021475958e-14 4.79263881523709e-15 2511.886 2.69709921484184e-14 2.15287738849244e-14 4.79263767262627e-15 3162.278 2.69709840042342e-14 2.15287711270312e-14 4.79263897098238e-15 3981.072 2.69709858859891e-14 2.15287448541687e-14 4.79263195635311e-15 5011.872 2.69709895611283e-14 2.15287644973847e-14 4.79264863034374e-15 6309.573 2.69709959725247e-14 2.15287645510156e-14 4.79262846906758e-15 7943.282 2.69709863739087e-14 2.15287337467535e-14 4.79263178215365e-15 10000 2.6970985529642e-14 2.15287299970976e-14 4.79263280132624e-15 12589.25 2.69709996227732e-14 2.15287899429205e-14 4.79264436571524e-15 15848.93 2.69709923698402e-14 2.15287409210856e-14 4.79264455960358e-15 19952.62 2.69709950226937e-14 2.15288021475958e-14 4.79263881523709e-15 25118.86 2.69709921484184e-14 2.15287738849244e-14 4.79263767262627e-15 31622.78 2.69709840042342e-14 2.15287711270312e-14 4.79263897098238e-15 39810.72 2.69709858859891e-14 2.15287448541687e-14 4.79263195635311e-15 50118.72 2.69709895611283e-14 2.15287644973847e-14 4.79264863034374e-15 63095.73 2.69709959725247e-14 2.15287645510156e-14 4.79262846906758e-15 79432.82 2.69709863739087e-14 2.15287337467535e-14 4.79263178215365e-15 100000 2.6970985529642e-14 2.15287299970976e-14 4.79263280132625e-15 125892.5 2.69709996227732e-14 2.15287899429205e-14 4.79264436571524e-15 158489.3 2.69709923698402e-14 2.15287409210856e-14 4.79264455960358e-15 199526.2 2.69709950226937e-14 2.15288021475958e-14 4.79263881523709e-15 251188.6 2.69709921484184e-14 2.15287738849244e-14 4.79263767262627e-15 316227.8 2.69709840042342e-14 2.15287711270312e-14 4.79263897098238e-15 398107.2 2.69709858859891e-14 2.15287448541687e-14 4.79263195635311e-15 501187.2 2.69709895611283e-14 2.15287644973847e-14 4.79264863034374e-15 630957.3 2.69709959725247e-14 2.15287645510155e-14 4.79262846906758e-15 794328.2 2.69709863739087e-14 2.15287337467535e-14 4.79263178215365e-15 1000000 2.6970985529642e-14 2.15287299970976e-14 4.79263280132624e-15 1258925 2.69709996227732e-14 2.15287899429205e-14 4.79264436571524e-15 1584893 2.69709923698402e-14 2.15287409210856e-14 4.79264455960358e-15 1995262 2.69709950226937e-14 2.15288021475958e-14 4.79263881523709e-15 2511886 2.69709921484184e-14 2.15287738849244e-14 4.79263767262627e-15 3162278 2.69709840042342e-14 2.15287711270312e-14 4.79263897098238e-15 3981072 2.69709858859891e-14 2.15287448541687e-14 4.79263195635311e-15 5011872 2.69709895611283e-14 2.15287644973847e-14 4.79264863034374e-15 6309573 2.69709959725247e-14 2.15287645510155e-14 4.79262846906758e-15 7943282 2.69709863739087e-14 2.15287337467535e-14 4.79263178215365e-15 10000000 2.6970985529642e-14 2.15287299970976e-14 4.79263280132624e-15 12589250 2.69709996227732e-14 2.15287899429205e-14 4.79264436571524e-15 15848930 2.69709923698402e-14 2.15287409210856e-14 4.79264455960358e-15 19952620 2.69709950226937e-14 2.15288021475958e-14 4.79263881523709e-15 25118860 2.69709921484184e-14 2.15287738849244e-14 4.79263767262627e-15 31622780 2.69709840042342e-14 2.15287711270312e-14 4.79263897098238e-15 39810720 2.69709858859891e-14 2.15287448541687e-14 4.79263195635311e-15 50118720 2.69709895611283e-14 2.15287644973847e-14 4.79264863034373e-15 63095730 2.69709959725247e-14 2.15287645510156e-14 4.79262846906758e-15 79432820 2.69709863739087e-14 2.15287337467535e-14 4.79263178215365e-15 100000000 2.6970985529642e-14 2.15287299970976e-14 4.79263280132625e-15 tmpk8ny_4pz/tests/bsim3/nmos/reference/dcSweep_lw2.standard0000644000175000017500000003054613546075722024161 0ustar carstencarstenV(d) I(d) 1.000000e-01 6.380628e-10 2.000000e-01 8.780450e-10 3.000000e-01 1.171846e-09 4.000000e-01 1.540278e-09 5.000000e-01 2.001621e-09 6.000000e-01 2.577440e-09 7.000000e-01 3.293796e-09 8.000000e-01 4.182274e-09 9.000000e-01 5.281147e-09 1.000000e+00 6.636745e-09 1.100000e+00 8.305085e-09 1.200000e+00 1.035382e-08 1.300000e+00 1.286454e-08 1.400000e+00 1.593559e-08 1.500000e+00 1.968526e-08 1.600000e+00 2.425580e-08 1.700000e+00 2.981794e-08 1.800000e+00 3.657647e-08 1.000000e-01 6.218812e-08 2.000000e-01 8.503505e-08 3.000000e-01 1.127100e-07 4.000000e-01 1.470622e-07 5.000000e-01 1.896211e-07 6.000000e-01 2.421476e-07 7.000000e-01 3.067255e-07 8.000000e-01 3.858276e-07 9.000000e-01 4.823856e-07 1.000000e+00 5.998683e-07 1.100000e+00 7.423716e-07 1.200000e+00 9.147218e-07 1.300000e+00 1.122594e-06 1.400000e+00 1.372644e-06 1.500000e+00 1.672666e-06 1.600000e+00 2.031761e-06 1.700000e+00 2.460534e-06 1.800000e+00 2.971314e-06 1.000000e-01 4.085388e-06 2.000000e-01 5.464112e-06 3.000000e-01 7.037008e-06 4.000000e-01 8.906056e-06 5.000000e-01 1.112193e-05 6.000000e-01 1.373392e-05 7.000000e-01 1.679345e-05 8.000000e-01 2.035427e-05 9.000000e-01 2.447210e-05 1.000000e+00 2.920402e-05 1.100000e+00 3.460771e-05 1.200000e+00 4.074062e-05 1.300000e+00 4.765912e-05 1.400000e+00 5.541769e-05 1.500000e+00 6.406803e-05 1.600000e+00 7.365840e-05 1.700000e+00 8.423294e-05 1.800000e+00 9.583115e-05 1.000000e-01 6.471421e-05 2.000000e-01 8.804206e-05 3.000000e-01 1.043544e-04 4.000000e-01 1.206063e-04 5.000000e-01 1.375267e-04 6.000000e-01 1.552819e-04 7.000000e-01 1.739276e-04 8.000000e-01 1.934835e-04 9.000000e-01 2.139541e-04 1.000000e+00 2.353362e-04 1.100000e+00 2.576225e-04 1.200000e+00 2.808027e-04 1.300000e+00 3.048651e-04 1.400000e+00 3.297965e-04 1.500000e+00 3.555831e-04 1.600000e+00 3.822107e-04 1.700000e+00 4.096645e-04 1.800000e+00 4.379299e-04 1.000000e-01 1.724146e-04 2.000000e-01 2.621835e-04 3.000000e-01 3.095319e-04 4.000000e-01 3.450136e-04 5.000000e-01 3.776712e-04 6.000000e-01 4.095883e-04 7.000000e-01 4.414569e-04 8.000000e-01 4.735687e-04 9.000000e-01 5.060653e-04 1.000000e+00 5.390210e-04 1.100000e+00 5.724766e-04 1.200000e+00 6.064546e-04 1.300000e+00 6.409671e-04 1.400000e+00 6.760196e-04 1.500000e+00 7.116134e-04 1.600000e+00 7.477474e-04 1.700000e+00 7.844185e-04 1.800000e+00 8.216226e-04 1.000000e-01 2.717739e-04 2.000000e-01 4.375365e-04 3.000000e-01 5.339015e-04 4.000000e-01 5.947673e-04 5.000000e-01 6.432364e-04 6.000000e-01 6.872856e-04 7.000000e-01 7.295078e-04 8.000000e-01 7.709425e-04 9.000000e-01 8.120806e-04 1.000000e+00 8.531819e-04 1.100000e+00 8.943950e-04 1.200000e+00 9.358102e-04 1.300000e+00 9.774845e-04 1.400000e+00 1.019455e-03 1.500000e+00 1.061746e-03 1.600000e+00 1.104374e-03 1.700000e+00 1.147350e-03 1.800000e+00 1.190680e-03 1.000000e-01 3.615069e-04 2.000000e-01 6.006044e-04 3.000000e-01 7.537923e-04 4.000000e-01 8.498140e-04 5.000000e-01 9.173803e-04 6.000000e-01 9.737703e-04 7.000000e-01 1.025393e-03 8.000000e-01 1.074713e-03 9.000000e-01 1.122838e-03 1.000000e+00 1.170335e-03 1.100000e+00 1.217521e-03 1.200000e+00 1.264586e-03 1.300000e+00 1.311650e-03 1.400000e+00 1.358794e-03 1.500000e+00 1.406071e-03 1.600000e+00 1.453519e-03 1.700000e+00 1.501165e-03 1.800000e+00 1.549027e-03 1.000000e-01 4.432434e-04 2.000000e-01 7.518772e-04 3.000000e-01 9.627899e-04 4.000000e-01 1.101735e-03 5.000000e-01 1.193866e-03 6.000000e-01 1.264199e-03 7.000000e-01 1.325217e-03 8.000000e-01 1.381773e-03 9.000000e-01 1.435956e-03 1.000000e+00 1.488790e-03 1.100000e+00 1.540831e-03 1.200000e+00 1.592406e-03 1.300000e+00 1.643718e-03 1.400000e+00 1.694901e-03 1.500000e+00 1.746046e-03 1.600000e+00 1.797214e-03 1.700000e+00 1.848453e-03 1.800000e+00 1.899794e-03 1.000000e-01 5.179586e-04 2.000000e-01 8.921900e-04 3.000000e-01 1.159481e-03 4.000000e-01 1.344975e-03 5.000000e-01 1.468044e-03 6.000000e-01 1.555210e-03 7.000000e-01 1.626384e-03 8.000000e-01 1.690082e-03 9.000000e-01 1.749866e-03 1.000000e+00 1.807413e-03 1.100000e+00 1.863606e-03 1.200000e+00 1.918952e-03 1.300000e+00 1.973758e-03 1.400000e+00 2.028226e-03 1.500000e+00 2.082487e-03 1.600000e+00 2.136636e-03 1.700000e+00 2.190739e-03 1.800000e+00 2.244844e-03 1.000000e-01 1.481924e-11 2.000000e-01 2.253473e-11 3.000000e-01 3.291984e-11 4.000000e-01 4.698875e-11 5.000000e-01 6.594368e-11 6.000000e-01 9.133638e-11 7.000000e-01 1.251796e-10 8.000000e-01 1.700821e-10 9.000000e-01 2.294196e-10 1.000000e+00 3.075535e-10 1.100000e+00 4.101093e-10 1.200000e+00 5.443325e-10 1.300000e+00 7.195411e-10 1.400000e+00 9.477024e-10 1.500000e+00 1.244166e-09 1.600000e+00 1.628592e-09 1.700000e+00 2.126136e-09 1.800000e+00 2.768939e-09 1.000000e-01 7.554645e-09 2.000000e-01 1.144149e-08 3.000000e-01 1.663773e-08 4.000000e-01 2.362649e-08 5.000000e-01 3.296841e-08 6.000000e-01 4.537546e-08 7.000000e-01 6.175545e-08 8.000000e-01 8.326322e-08 9.000000e-01 1.113631e-07 1.000000e+00 1.479052e-07 1.100000e+00 1.952189e-07 1.200000e+00 2.562264e-07 1.300000e+00 3.345798e-07 1.400000e+00 4.348271e-07 1.500000e+00 5.626108e-07 1.600000e+00 7.249049e-07 1.700000e+00 9.302965e-07 1.800000e+00 1.189319e-06 1.000000e-01 2.348840e-06 2.000000e-01 3.415041e-06 3.000000e-01 4.749629e-06 4.000000e-01 6.435325e-06 5.000000e-01 8.546010e-06 6.000000e-01 1.116255e-05 7.000000e-01 1.437375e-05 8.000000e-01 1.827578e-05 9.000000e-01 2.297079e-05 1.000000e+00 2.856517e-05 1.100000e+00 3.516727e-05 1.200000e+00 4.288498e-05 1.300000e+00 5.182310e-05 1.400000e+00 6.208084e-05 1.500000e+00 7.374944e-05 1.600000e+00 8.691025e-05 1.700000e+00 1.016332e-04 1.800000e+00 1.179756e-04 1.000000e-01 8.058912e-05 2.000000e-01 1.078581e-04 3.000000e-01 1.302811e-04 4.000000e-01 1.531782e-04 5.000000e-01 1.771577e-04 6.000000e-01 2.023625e-04 7.000000e-01 2.288295e-04 8.000000e-01 2.565599e-04 9.000000e-01 2.855397e-04 1.000000e+00 3.157473e-04 1.100000e+00 3.471576e-04 1.200000e+00 3.797432e-04 1.300000e+00 4.134757e-04 1.400000e+00 4.483264e-04 1.500000e+00 4.842665e-04 1.600000e+00 5.212674e-04 1.700000e+00 5.593010e-04 1.800000e+00 5.983398e-04 1.000000e-01 2.377679e-04 2.000000e-01 3.435076e-04 3.000000e-01 4.001885e-04 4.000000e-01 4.462858e-04 5.000000e-01 4.898416e-04 6.000000e-01 5.328004e-04 7.000000e-01 5.758307e-04 8.000000e-01 6.192153e-04 9.000000e-01 6.630889e-04 1.000000e+00 7.075196e-04 1.100000e+00 7.525424e-04 1.200000e+00 7.981738e-04 1.300000e+00 8.444204e-04 1.400000e+00 8.912821e-04 1.500000e+00 9.387549e-04 1.600000e+00 9.868327e-04 1.700000e+00 1.035507e-03 1.800000e+00 1.084770e-03 1.000000e-01 3.840373e-04 2.000000e-01 5.900839e-04 3.000000e-01 6.971250e-04 4.000000e-01 7.670259e-04 5.000000e-01 8.262392e-04 6.000000e-01 8.817223e-04 7.000000e-01 9.356934e-04 8.000000e-01 9.890494e-04 9.000000e-01 1.042216e-03 1.000000e+00 1.095417e-03 1.100000e+00 1.148782e-03 1.200000e+00 1.202387e-03 1.300000e+00 1.256280e-03 1.400000e+00 1.310491e-03 1.500000e+00 1.365039e-03 1.600000e+00 1.419936e-03 1.700000e+00 1.475189e-03 1.800000e+00 1.530801e-03 1.000000e-01 5.152363e-04 2.000000e-01 8.223644e-04 3.000000e-01 9.948848e-04 4.000000e-01 1.094448e-03 5.000000e-01 1.168994e-03 6.000000e-01 1.234934e-03 7.000000e-01 1.297253e-03 8.000000e-01 1.357836e-03 9.000000e-01 1.417537e-03 1.000000e+00 1.476796e-03 1.100000e+00 1.535860e-03 1.200000e+00 1.594879e-03 1.300000e+00 1.653945e-03 1.400000e+00 1.713121e-03 1.500000e+00 1.772449e-03 1.600000e+00 1.831957e-03 1.700000e+00 1.891666e-03 1.800000e+00 1.951589e-03 1.000000e-01 6.328288e-04 2.000000e-01 1.036752e-03 3.000000e-01 1.282635e-03 4.000000e-01 1.420880e-03 5.000000e-01 1.512667e-03 6.000000e-01 1.588567e-03 7.000000e-01 1.658019e-03 8.000000e-01 1.724380e-03 9.000000e-01 1.789098e-03 1.000000e+00 1.852891e-03 1.100000e+00 1.916154e-03 1.200000e+00 1.979120e-03 1.300000e+00 2.041936e-03 1.400000e+00 2.104697e-03 1.500000e+00 2.167469e-03 1.600000e+00 2.230298e-03 1.700000e+00 2.293216e-03 1.800000e+00 2.356247e-03 1.000000e-01 7.383563e-04 2.000000e-01 1.233619e-03 3.000000e-01 1.554866e-03 4.000000e-01 1.741561e-03 5.000000e-01 1.854453e-03 6.000000e-01 1.940900e-03 7.000000e-01 2.017080e-03 8.000000e-01 2.088486e-03 9.000000e-01 2.157369e-03 1.000000e+00 2.224805e-03 1.100000e+00 2.291369e-03 1.200000e+00 2.357396e-03 1.300000e+00 2.423091e-03 1.400000e+00 2.488588e-03 1.500000e+00 2.553979e-03 1.600000e+00 2.619325e-03 1.700000e+00 2.684674e-03 1.800000e+00 2.750057e-03 1.000000e-01 1.501346e-08 2.000000e-01 1.909126e-08 3.000000e-01 2.355740e-08 4.000000e-01 2.878118e-08 5.000000e-01 3.491267e-08 6.000000e-01 4.210227e-08 7.000000e-01 5.051796e-08 8.000000e-01 6.035078e-08 9.000000e-01 7.181877e-08 1.000000e+00 8.517094e-08 1.100000e+00 1.006916e-07 1.200000e+00 1.187049e-07 1.300000e+00 1.395806e-07 1.400000e+00 1.637395e-07 1.500000e+00 1.916606e-07 1.600000e+00 2.238882e-07 1.700000e+00 2.610408e-07 1.800000e+00 3.038200e-07 1.000000e-01 3.538155e-07 2.000000e-01 4.473491e-07 3.000000e-01 5.481304e-07 4.000000e-01 6.647844e-07 5.000000e-01 8.003308e-07 6.000000e-01 9.576559e-07 7.000000e-01 1.139913e-06 8.000000e-01 1.350624e-06 9.000000e-01 1.593745e-06 1.000000e+00 1.873719e-06 1.100000e+00 2.195532e-06 1.200000e+00 2.564774e-06 1.300000e+00 2.987702e-06 1.400000e+00 3.471308e-06 1.500000e+00 4.023389e-06 1.600000e+00 4.652626e-06 1.700000e+00 5.368657e-06 1.800000e+00 6.182162e-06 1.000000e-01 6.344307e-06 2.000000e-01 8.055219e-06 3.000000e-01 9.707866e-06 4.000000e-01 1.155627e-05 5.000000e-01 1.364106e-05 6.000000e-01 1.598955e-05 7.000000e-01 1.862731e-05 8.000000e-01 2.157996e-05 9.000000e-01 2.487346e-05 1.000000e+00 2.853416e-05 1.100000e+00 3.258866e-05 1.200000e+00 3.706362e-05 1.300000e+00 4.198561e-05 1.400000e+00 4.738086e-05 1.500000e+00 5.327508e-05 1.600000e+00 5.969324e-05 1.700000e+00 6.665935e-05 1.800000e+00 7.419632e-05 1.000000e-01 4.678294e-05 2.000000e-01 6.669651e-05 3.000000e-01 7.786135e-05 4.000000e-01 8.830512e-05 5.000000e-01 9.903944e-05 6.000000e-01 1.102507e-04 7.000000e-01 1.220021e-04 8.000000e-01 1.343222e-04 9.000000e-01 1.472255e-04 1.000000e+00 1.607197e-04 1.100000e+00 1.748087e-04 1.200000e+00 1.894939e-04 1.300000e+00 2.047748e-04 1.400000e+00 2.206495e-04 1.500000e+00 2.371153e-04 1.600000e+00 2.541685e-04 1.700000e+00 2.718048e-04 1.800000e+00 2.900193e-04 1.000000e-01 1.121509e-04 2.000000e-01 1.799183e-04 3.000000e-01 2.177547e-04 4.000000e-01 2.427973e-04 5.000000e-01 2.647292e-04 6.000000e-01 2.858730e-04 7.000000e-01 3.068841e-04 8.000000e-01 3.280243e-04 9.000000e-01 3.494194e-04 1.000000e+00 3.711365e-04 1.100000e+00 3.932135e-04 1.200000e+00 4.156731e-04 1.300000e+00 4.385284e-04 1.400000e+00 4.617872e-04 1.500000e+00 4.854538e-04 1.600000e+00 5.095301e-04 1.700000e+00 5.340163e-04 1.800000e+00 5.589116e-04 1.000000e-01 1.727785e-04 2.000000e-01 2.905425e-04 3.000000e-01 3.671157e-04 4.000000e-01 4.157859e-04 5.000000e-01 4.515000e-04 6.000000e-01 4.826010e-04 7.000000e-01 5.118394e-04 8.000000e-01 5.402501e-04 9.000000e-01 5.683097e-04 1.000000e+00 5.962687e-04 1.100000e+00 6.242706e-04 1.200000e+00 6.524032e-04 1.300000e+00 6.807228e-04 1.400000e+00 7.092665e-04 1.500000e+00 7.380600e-04 1.600000e+00 7.671206e-04 1.700000e+00 7.964609e-04 1.800000e+00 8.260894e-04 1.000000e-01 2.266693e-04 2.000000e-01 3.907961e-04 3.000000e-01 5.067335e-04 4.000000e-01 5.859754e-04 5.000000e-01 6.409515e-04 6.000000e-01 6.841219e-04 7.000000e-01 7.221239e-04 8.000000e-01 7.576262e-04 9.000000e-01 7.918138e-04 1.000000e+00 8.252858e-04 1.100000e+00 8.583765e-04 1.200000e+00 8.912863e-04 1.300000e+00 9.241424e-04 1.400000e+00 9.570290e-04 1.500000e+00 9.900038e-04 1.600000e+00 1.023108e-03 1.700000e+00 1.056370e-03 1.800000e+00 1.089811e-03 1.000000e-01 2.757565e-04 2.000000e-01 4.832375e-04 3.000000e-01 6.371788e-04 4.000000e-01 7.488937e-04 5.000000e-01 8.283871e-04 6.000000e-01 8.872005e-04 7.000000e-01 9.354903e-04 8.000000e-01 9.785813e-04 9.000000e-01 1.018890e-03 1.000000e+00 1.057603e-03 1.100000e+00 1.095360e-03 1.200000e+00 1.132537e-03 1.300000e+00 1.169366e-03 1.400000e+00 1.206000e-03 1.500000e+00 1.242543e-03 1.600000e+00 1.279066e-03 1.700000e+00 1.315622e-03 1.800000e+00 1.352248e-03 1.000000e-01 3.210917e-04 2.000000e-01 5.694045e-04 3.000000e-01 7.598310e-04 4.000000e-01 9.038204e-04 5.000000e-01 1.010545e-03 6.000000e-01 1.089041e-03 7.000000e-01 1.149994e-03 8.000000e-01 1.201712e-03 9.000000e-01 1.248498e-03 1.000000e+00 1.292454e-03 1.100000e+00 1.334689e-03 1.200000e+00 1.375833e-03 1.300000e+00 1.416269e-03 1.400000e+00 1.456242e-03 1.500000e+00 1.495919e-03 1.600000e+00 1.535412e-03 1.700000e+00 1.574804e-03 1.800000e+00 1.614154e-03 tmpk8ny_4pz/tests/bsim3/nmos/reference/dcSweep_lw3.standard0000644000175000017500000003054613546075722024162 0ustar carstencarstenV(d) I(d) 1.000000e-01 4.891105e-13 2.000000e-01 6.604127e-13 3.000000e-01 8.838381e-13 4.000000e-01 1.155964e-12 5.000000e-01 1.496768e-12 6.000000e-01 1.922282e-12 7.000000e-01 2.451928e-12 8.000000e-01 3.109374e-12 9.000000e-01 3.923278e-12 1.000000e+00 4.928571e-12 1.100000e+00 6.167483e-12 1.200000e+00 7.691375e-12 1.300000e+00 9.562379e-12 1.400000e+00 1.185566e-11 1.500000e+00 1.466219e-11 1.600000e+00 1.809186e-11 1.700000e+00 2.227746e-11 1.800000e+00 2.737921e-11 1.000000e-01 5.042096e-11 2.000000e-01 6.903244e-11 3.000000e-01 9.177097e-11 4.000000e-01 1.202511e-10 5.000000e-01 1.558770e-10 6.000000e-01 2.003034e-10 7.000000e-01 2.555298e-10 8.000000e-01 3.239788e-10 9.000000e-01 4.085862e-10 1.000000e+00 5.129053e-10 1.100000e+00 6.412323e-10 1.200000e+00 7.987565e-10 1.300000e+00 9.917375e-10 1.400000e+00 1.227718e-09 1.500000e+00 1.515778e-09 1.600000e+00 1.866832e-09 1.700000e+00 2.293989e-09 1.800000e+00 2.812977e-09 1.000000e-01 4.946884e-09 2.000000e-01 6.733438e-09 3.000000e-01 8.894827e-09 4.000000e-01 1.157651e-08 5.000000e-01 1.489804e-08 6.000000e-01 1.899714e-08 7.000000e-01 2.403698e-08 8.000000e-01 3.021143e-08 9.000000e-01 3.775061e-08 1.000000e+00 4.692719e-08 1.100000e+00 5.806364e-08 1.200000e+00 7.154053e-08 1.300000e+00 8.780606e-08 1.400000e+00 1.073871e-07 1.500000e+00 1.309015e-07 1.600000e+00 1.590728e-07 1.700000e+00 1.927461e-07 1.800000e+00 2.329064e-07 1.000000e-01 3.342167e-07 2.000000e-01 4.457078e-07 3.000000e-01 5.735209e-07 4.000000e-01 7.259968e-07 5.000000e-01 9.075270e-07 6.000000e-01 1.122494e-06 7.000000e-01 1.375555e-06 8.000000e-01 1.671670e-06 9.000000e-01 2.016084e-06 1.000000e+00 2.414275e-06 1.100000e+00 2.871899e-06 1.200000e+00 3.394724e-06 1.300000e+00 3.988543e-06 1.400000e+00 4.659102e-06 1.500000e+00 5.412009e-06 1.600000e+00 6.252655e-06 1.700000e+00 7.186136e-06 1.800000e+00 8.217180e-06 1.000000e-01 5.876666e-06 2.000000e-01 7.955232e-06 3.000000e-01 9.442949e-06 4.000000e-01 1.094252e-05 5.000000e-01 1.251484e-05 6.000000e-01 1.417400e-05 7.000000e-01 1.592489e-05 8.000000e-01 1.776936e-05 9.000000e-01 1.970797e-05 1.000000e+00 2.174056e-05 1.100000e+00 2.386655e-05 1.200000e+00 2.608511e-05 1.300000e+00 2.839518e-05 1.400000e+00 3.079560e-05 1.500000e+00 3.328508e-05 1.600000e+00 3.586226e-05 1.700000e+00 3.852574e-05 1.800000e+00 4.127408e-05 1.000000e-01 1.658772e-05 2.000000e-01 2.507490e-05 3.000000e-01 2.954739e-05 4.000000e-01 3.295184e-05 5.000000e-01 3.611210e-05 6.000000e-01 3.921479e-05 7.000000e-01 4.232218e-05 8.000000e-01 4.546066e-05 9.000000e-01 4.864306e-05 1.000000e+00 5.187607e-05 1.100000e+00 5.516336e-05 1.200000e+00 5.850689e-05 1.300000e+00 6.190766e-05 1.400000e+00 6.536604e-05 1.500000e+00 6.888207e-05 1.600000e+00 7.245550e-05 1.700000e+00 7.608593e-05 1.800000e+00 7.977284e-05 1.000000e-01 2.687088e-05 2.000000e-01 4.289272e-05 3.000000e-01 5.209465e-05 4.000000e-01 5.796807e-05 5.000000e-01 6.271295e-05 6.000000e-01 6.705497e-05 7.000000e-01 7.123128e-05 8.000000e-01 7.533819e-05 9.000000e-01 7.942169e-05 1.000000e+00 8.350626e-05 1.100000e+00 8.760596e-05 1.200000e+00 9.172936e-05 1.300000e+00 9.588184e-05 1.400000e+00 1.000669e-04 1.500000e+00 1.042868e-04 1.600000e+00 1.085430e-04 1.700000e+00 1.128365e-04 1.800000e+00 1.171679e-04 1.000000e-01 3.647182e-05 2.000000e-01 5.990314e-05 3.000000e-01 7.463720e-05 4.000000e-01 8.385336e-05 5.000000e-01 9.045501e-05 6.000000e-01 9.603535e-05 7.000000e-01 1.011742e-04 8.000000e-01 1.060979e-04 9.000000e-01 1.109103e-04 1.000000e+00 1.156647e-04 1.100000e+00 1.203916e-04 1.200000e+00 1.251092e-04 1.300000e+00 1.298291e-04 1.400000e+00 1.345590e-04 1.500000e+00 1.393042e-04 1.600000e+00 1.440682e-04 1.700000e+00 1.488537e-04 1.800000e+00 1.536625e-04 1.000000e-01 4.549816e-05 2.000000e-01 7.609183e-05 3.000000e-01 9.651520e-05 4.000000e-01 1.097868e-04 5.000000e-01 1.186828e-04 6.000000e-01 1.256112e-04 7.000000e-01 1.316881e-04 8.000000e-01 1.373498e-04 9.000000e-01 1.427878e-04 1.000000e+00 1.480978e-04 1.100000e+00 1.533326e-04 1.200000e+00 1.585233e-04 1.300000e+00 1.636896e-04 1.400000e+00 1.688445e-04 1.500000e+00 1.739968e-04 1.600000e+00 1.791525e-04 1.700000e+00 1.843162e-04 1.800000e+00 1.894911e-04 1.000000e-01 1.214306e-14 2.000000e-01 1.348574e-14 3.000000e-01 1.492556e-14 4.000000e-01 1.698641e-14 5.000000e-01 1.974115e-14 6.000000e-01 2.337713e-14 7.000000e-01 2.819966e-14 8.000000e-01 3.456957e-14 9.000000e-01 4.296563e-14 1.000000e+00 5.397072e-14 1.100000e+00 6.843137e-14 1.200000e+00 8.727741e-14 1.300000e+00 1.118827e-13 1.400000e+00 1.439404e-13 1.500000e+00 1.856293e-13 1.600000e+00 2.396694e-13 1.700000e+00 3.096412e-13 1.800000e+00 4.002354e-13 1.000000e-01 1.120650e-12 2.000000e-01 1.691869e-12 3.000000e-01 2.459682e-12 4.000000e-01 3.498944e-12 5.000000e-01 4.898193e-12 6.000000e-01 6.771625e-12 7.000000e-01 9.267420e-12 8.000000e-01 1.257755e-11 9.000000e-01 1.695055e-11 1.000000e+00 2.270750e-11 1.100000e+00 3.026257e-11 1.200000e+00 4.014922e-11 1.300000e+00 5.305378e-11 1.400000e+00 6.985779e-11 1.500000e+00 9.169210e-11 1.600000e+00 1.200059e-10 1.700000e+00 1.566536e-10 1.800000e+00 2.040056e-10 1.000000e-01 5.690382e-10 2.000000e-01 8.583595e-10 3.000000e-01 1.244952e-09 4.000000e-01 1.764885e-09 5.000000e-01 2.460014e-09 6.000000e-01 3.383573e-09 7.000000e-01 4.603560e-09 8.000000e-01 6.206638e-09 9.000000e-01 8.302925e-09 1.000000e+00 1.103187e-08 1.100000e+00 1.456948e-08 1.200000e+00 1.913711e-08 1.300000e+00 2.501224e-08 1.400000e+00 3.254142e-08 1.500000e+00 4.215600e-08 1.600000e+00 5.439090e-08 1.700000e+00 6.990718e-08 1.800000e+00 8.951876e-08 1.000000e-01 1.845194e-07 2.000000e-01 2.680397e-07 3.000000e-01 3.731573e-07 4.000000e-01 5.066722e-07 5.000000e-01 6.748864e-07 6.000000e-01 8.848558e-07 7.000000e-01 1.144510e-06 8.000000e-01 1.462648e-06 9.000000e-01 1.848878e-06 1.000000e+00 2.313499e-06 1.100000e+00 2.867344e-06 1.200000e+00 3.521575e-06 1.300000e+00 4.287446e-06 1.400000e+00 5.176050e-06 1.500000e+00 6.198055e-06 1.600000e+00 7.363456e-06 1.700000e+00 8.681344e-06 1.800000e+00 1.015973e-05 1.000000e-01 7.347250e-06 2.000000e-01 9.819365e-06 3.000000e-01 1.191224e-05 4.000000e-01 1.407443e-05 5.000000e-01 1.635671e-05 6.000000e-01 1.877117e-05 7.000000e-01 2.132099e-05 8.000000e-01 2.400619e-05 9.000000e-01 2.682541e-05 1.000000e+00 2.977659e-05 1.100000e+00 3.285723e-05 1.200000e+00 3.606460e-05 1.300000e+00 3.939582e-05 1.400000e+00 4.284792e-05 1.500000e+00 4.641789e-05 1.600000e+00 5.010274e-05 1.700000e+00 5.389945e-05 1.800000e+00 5.780508e-05 1.000000e-01 2.328248e-05 2.000000e-01 3.331852e-05 3.000000e-01 3.879379e-05 4.000000e-01 4.333044e-05 5.000000e-01 4.764819e-05 6.000000e-01 5.192330e-05 7.000000e-01 5.621709e-05 8.000000e-01 6.055561e-05 9.000000e-01 6.495121e-05 1.000000e+00 6.941003e-05 1.100000e+00 7.393507e-05 1.200000e+00 7.852765e-05 1.300000e+00 8.318809e-05 1.400000e+00 8.791610e-05 1.500000e+00 9.271105e-05 1.600000e+00 9.757205e-05 1.700000e+00 1.024981e-04 1.800000e+00 1.074880e-04 1.000000e-01 3.889102e-05 2.000000e-01 5.879305e-05 3.000000e-01 6.904445e-05 4.000000e-01 7.593167e-05 5.000000e-01 8.185307e-05 6.000000e-01 8.743337e-05 7.000000e-01 9.287661e-05 8.000000e-01 9.826681e-05 9.000000e-01 1.036443e-04 1.000000e+00 1.090305e-04 1.100000e+00 1.144376e-04 1.200000e+00 1.198729e-04 1.300000e+00 1.253410e-04 1.400000e+00 1.308446e-04 1.500000e+00 1.363854e-04 1.600000e+00 1.419644e-04 1.700000e+00 1.475822e-04 1.800000e+00 1.532389e-04 1.000000e-01 5.354018e-05 2.000000e-01 8.359267e-05 3.000000e-01 9.992722e-05 4.000000e-01 1.095467e-04 5.000000e-01 1.169630e-04 6.000000e-01 1.236023e-04 7.000000e-01 1.299077e-04 8.000000e-01 1.360516e-04 9.000000e-01 1.421140e-04 1.000000e+00 1.481365e-04 1.100000e+00 1.541428e-04 1.200000e+00 1.601471e-04 1.300000e+00 1.661587e-04 1.400000e+00 1.721833e-04 1.500000e+00 1.782251e-04 1.600000e+00 1.842869e-04 1.700000e+00 1.903704e-04 1.800000e+00 1.964769e-04 1.000000e-01 6.724903e-05 2.000000e-01 1.072468e-04 3.000000e-01 1.304335e-04 4.000000e-01 1.433853e-04 5.000000e-01 1.523594e-04 6.000000e-01 1.599559e-04 7.000000e-01 1.669733e-04 8.000000e-01 1.737064e-04 9.000000e-01 1.802862e-04 1.000000e+00 1.867792e-04 1.100000e+00 1.932226e-04 1.200000e+00 1.996384e-04 1.300000e+00 2.060409e-04 1.400000e+00 2.124392e-04 1.500000e+00 2.188398e-04 1.600000e+00 2.252470e-04 1.700000e+00 2.316639e-04 1.800000e+00 2.380929e-04 1.000000e-01 4.656341e-11 2.000000e-01 5.899410e-11 3.000000e-01 7.259728e-11 4.000000e-01 8.852739e-11 5.000000e-01 1.072539e-10 6.000000e-01 1.292507e-10 7.000000e-01 1.550503e-10 8.000000e-01 1.852618e-10 9.000000e-01 2.205849e-10 1.000000e+00 2.618235e-10 1.100000e+00 3.099014e-10 1.200000e+00 3.658798e-10 1.300000e+00 4.309771e-10 1.400000e+00 5.065913e-10 1.500000e+00 5.943256e-10 1.600000e+00 6.960179e-10 1.700000e+00 8.137734e-10 1.800000e+00 9.500025e-10 1.000000e-01 1.231787e-09 2.000000e-01 1.557894e-09 3.000000e-01 1.913497e-09 4.000000e-01 2.328711e-09 5.000000e-01 2.815358e-09 6.000000e-01 3.385216e-09 7.000000e-01 4.051425e-09 8.000000e-01 4.828918e-09 9.000000e-01 5.734732e-09 1.000000e+00 6.788316e-09 1.100000e+00 8.011867e-09 1.200000e+00 9.430695e-09 1.300000e+00 1.107364e-08 1.400000e+00 1.297355e-08 1.500000e+00 1.516777e-08 1.600000e+00 1.769875e-08 1.700000e+00 2.061473e-08 1.800000e+00 2.397039e-08 1.000000e-01 2.925103e-08 2.000000e-01 3.679241e-08 3.000000e-01 4.488923e-08 4.000000e-01 5.425031e-08 5.000000e-01 6.511711e-08 6.000000e-01 7.771955e-08 7.000000e-01 9.230876e-08 8.000000e-01 1.091655e-07 9.000000e-01 1.286053e-07 1.000000e+00 1.509828e-07 1.100000e+00 1.766968e-07 1.200000e+00 2.061946e-07 1.300000e+00 2.399780e-07 1.400000e+00 2.786088e-07 1.500000e+00 3.227147e-07 1.600000e+00 3.729963e-07 1.700000e+00 4.302341e-07 1.800000e+00 4.952954e-07 1.000000e-01 5.352333e-07 2.000000e-01 6.760577e-07 3.000000e-01 8.127331e-07 4.000000e-01 9.659872e-07 5.000000e-01 1.139246e-06 6.000000e-01 1.334898e-06 7.000000e-01 1.555226e-06 8.000000e-01 1.802550e-06 9.000000e-01 2.079253e-06 1.000000e+00 2.387782e-06 1.100000e+00 2.730642e-06 1.200000e+00 3.110377e-06 1.300000e+00 3.529555e-06 1.400000e+00 3.990753e-06 1.500000e+00 4.496530e-06 1.600000e+00 5.049412e-06 1.700000e+00 5.651874e-06 1.800000e+00 6.306313e-06 1.000000e-01 4.211999e-06 2.000000e-01 5.972475e-06 3.000000e-01 6.962633e-06 4.000000e-01 7.898862e-06 5.000000e-01 8.867065e-06 6.000000e-01 9.882886e-06 7.000000e-01 1.095175e-05 8.000000e-01 1.207621e-05 9.000000e-01 1.325768e-05 1.000000e+00 1.449699e-05 1.100000e+00 1.579464e-05 1.200000e+00 1.715087e-05 1.300000e+00 1.856578e-05 1.400000e+00 2.003933e-05 1.500000e+00 2.157136e-05 1.600000e+00 2.316163e-05 1.700000e+00 2.480983e-05 1.800000e+00 2.651558e-05 1.000000e-01 1.054826e-05 2.000000e-01 1.689152e-05 3.000000e-01 2.040971e-05 4.000000e-01 2.274120e-05 5.000000e-01 2.479765e-05 6.000000e-01 2.679019e-05 7.000000e-01 2.877687e-05 8.000000e-01 3.078074e-05 9.000000e-01 3.281285e-05 1.000000e+00 3.487910e-05 1.100000e+00 3.698282e-05 1.200000e+00 3.912598e-05 1.300000e+00 4.130972e-05 1.400000e+00 4.353470e-05 1.500000e+00 4.580125e-05 1.600000e+00 4.810950e-05 1.700000e+00 5.045943e-05 1.800000e+00 5.285092e-05 1.000000e-01 1.662675e-05 2.000000e-01 2.788618e-05 3.000000e-01 3.516838e-05 4.000000e-01 3.978199e-05 5.000000e-01 4.318170e-05 6.000000e-01 4.616056e-05 7.000000e-01 4.897220e-05 8.000000e-01 5.171106e-05 9.000000e-01 5.442074e-05 1.000000e+00 5.712423e-05 1.100000e+00 5.983478e-05 1.200000e+00 6.256050e-05 1.300000e+00 6.530660e-05 1.400000e+00 6.807652e-05 1.500000e+00 7.087262e-05 1.600000e+00 7.369651e-05 1.700000e+00 7.654933e-05 1.800000e+00 7.943185e-05 1.000000e-01 2.216368e-05 2.000000e-01 3.805753e-05 3.000000e-01 4.920657e-05 4.000000e-01 5.678893e-05 5.000000e-01 6.205512e-05 6.000000e-01 6.622107e-05 7.000000e-01 6.990984e-05 8.000000e-01 7.336758e-05 9.000000e-01 7.670385e-05 1.000000e+00 7.997444e-05 1.100000e+00 8.321070e-05 1.200000e+00 8.643151e-05 1.300000e+00 8.964894e-05 1.400000e+00 9.287096e-05 1.500000e+00 9.610307e-05 1.600000e+00 9.934916e-05 1.700000e+00 1.026120e-04 1.800000e+00 1.058936e-04 1.000000e-01 2.732209e-05 2.000000e-01 4.762029e-05 3.000000e-01 6.254392e-05 4.000000e-01 7.330007e-05 5.000000e-01 8.093278e-05 6.000000e-01 8.661445e-05 7.000000e-01 9.131960e-05 8.000000e-01 9.554079e-05 9.000000e-01 9.950101e-05 1.000000e+00 1.033107e-04 1.100000e+00 1.070301e-04 1.200000e+00 1.106947e-04 1.300000e+00 1.143268e-04 1.400000e+00 1.179409e-04 1.500000e+00 1.215471e-04 1.600000e+00 1.251522e-04 1.700000e+00 1.287614e-04 1.800000e+00 1.323783e-04 tmpk8ny_4pz/tests/bsim3/nmos/reference/acFreq.standard0000644000175000017500000000714013546075722023176 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.57706071178543e-14 2.05822355505301e-14 4.55132207661031e-15 1258.925 2.57706166768854e-14 2.05822736223065e-14 4.55131873403097e-15 1584.893 2.57706119481062e-14 2.05822824922572e-14 4.55131523375102e-15 1995.262 2.57706138235795e-14 2.05822138250239e-14 4.55132140963526e-15 2511.886 2.57706166885567e-14 2.05822278653798e-14 4.55131564138994e-15 3162.278 2.57706072599337e-14 2.05822297367015e-14 4.55131545779621e-15 3981.072 2.57706091228265e-14 2.05822278274373e-14 4.55132528405412e-15 5011.872 2.57706124512689e-14 2.05822256814014e-14 4.55130616040468e-15 6309.573 2.57706191115458e-14 2.05822456527351e-14 4.55130701346984e-15 7943.282 2.57706043856278e-14 2.05822132138477e-14 4.55131312638909e-15 10000 2.57706071178543e-14 2.05822355505301e-14 4.55132207661031e-15 12589.25 2.57706166768854e-14 2.05822736223065e-14 4.55131873403097e-15 15848.93 2.57706119481062e-14 2.05822824922572e-14 4.55131523375102e-15 19952.62 2.57706138235795e-14 2.05822138250239e-14 4.55132140963526e-15 25118.86 2.57706166885567e-14 2.05822278653798e-14 4.55131564138994e-15 31622.78 2.57706072599337e-14 2.05822297367015e-14 4.55131545779621e-15 39810.72 2.57706091228265e-14 2.05822278274373e-14 4.55132528405412e-15 50118.72 2.57706124512689e-14 2.05822256814014e-14 4.55130616040468e-15 63095.73 2.57706191115458e-14 2.05822456527351e-14 4.55130701346984e-15 79432.82 2.57706043856278e-14 2.05822132138477e-14 4.55131312638909e-15 100000 2.57706071178543e-14 2.05822355505301e-14 4.55132207661031e-15 125892.5 2.57706166768854e-14 2.05822736223065e-14 4.55131873403097e-15 158489.3 2.57706119481062e-14 2.05822824922572e-14 4.55131523375102e-15 199526.2 2.57706138235795e-14 2.05822138250239e-14 4.55132140963526e-15 251188.6 2.57706166885567e-14 2.05822278653798e-14 4.55131564138994e-15 316227.8 2.57706072599337e-14 2.05822297367014e-14 4.55131545779621e-15 398107.2 2.57706091228265e-14 2.05822278274373e-14 4.55132528405412e-15 501187.2 2.57706124512689e-14 2.05822256814014e-14 4.55130616040468e-15 630957.3 2.57706191115458e-14 2.05822456527351e-14 4.55130701346984e-15 794328.2 2.57706043856278e-14 2.05822132138477e-14 4.55131312638909e-15 1000000 2.57706071178543e-14 2.05822355505301e-14 4.55132207661031e-15 1258925 2.57706166768854e-14 2.05822736223065e-14 4.55131873403097e-15 1584893 2.57706119481062e-14 2.05822824922572e-14 4.55131523375102e-15 1995262 2.57706138235795e-14 2.05822138250239e-14 4.55132140963526e-15 2511886 2.57706166885567e-14 2.05822278653798e-14 4.55131564138994e-15 3162278 2.57706072599337e-14 2.05822297367014e-14 4.55131545779621e-15 3981072 2.57706091228265e-14 2.05822278274373e-14 4.55132528405412e-15 5011872 2.57706124512689e-14 2.05822256814014e-14 4.55130616040468e-15 6309573 2.57706191115458e-14 2.05822456527351e-14 4.55130701346984e-15 7943282 2.57706043856278e-14 2.05822132138477e-14 4.55131312638909e-15 10000000 2.57706071178543e-14 2.05822355505301e-14 4.55132207661031e-15 12589250 2.57706166768854e-14 2.05822736223065e-14 4.55131873403097e-15 15848930 2.57706119481062e-14 2.05822824922572e-14 4.55131523375102e-15 19952620 2.57706138235795e-14 2.05822138250239e-14 4.55132140963526e-15 25118860 2.57706166885567e-14 2.05822278653798e-14 4.55131564138994e-15 31622780 2.57706072599337e-14 2.05822297367014e-14 4.55131545779621e-15 39810720 2.57706091228265e-14 2.05822278274373e-14 4.55132528405412e-15 50118720 2.57706124512689e-14 2.05822256814014e-14 4.55130616040468e-15 63095730 2.57706191115458e-14 2.05822456527351e-14 4.55130701346984e-15 79432820 2.57706043856278e-14 2.05822132138477e-14 4.55131312638909e-15 100000000 2.57706071178543e-14 2.05822355505301e-14 4.55132207661031e-15 tmpk8ny_4pz/tests/bsim3/nmos/reference/noise2.standard0000644000175000017500000000635313546075722023201 0ustar carstencarstenFreq N(d) 1000 1.951753e-18 1258.925 1.515052e-18 1584.893 1.176064e-18 1995.262 9.129256e-19 2511.886 7.086652e-19 3162.278 5.501086e-19 3981.072 4.270296e-19 5011.872 3.314898e-19 6309.573 2.573274e-19 7943.282 1.99759e-19 10000 1.550717e-19 12589.25 1.203833e-19 15848.93 9.345652e-20 19952.62 7.25547e-20 25118.86 5.632972e-20 31622.78 4.373513e-20 39810.72 3.395861e-20 50118.72 2.636962e-20 63095.73 2.047869e-20 79432.82 1.590587e-20 100000 1.235623e-20 125892.5 9.600832e-21 158489.3 7.461964e-21 199526.2 5.801673e-21 251188.6 4.512877e-21 316227.8 3.512453e-21 398107.2 2.735877e-21 501187.2 2.133062e-21 630957.3 1.665128e-21 794328.2 1.301896e-21 1000000 1.019938e-21 1258925 8.010693e-22 1584893 6.311729e-22 1995262 4.992913e-22 2511886 3.969187e-22 3162278 3.174521e-22 3981072 2.557665e-22 5011872 2.078832e-22 6309573 1.707139e-22 7943282 1.418614e-22 10000000 1.194647e-22 12589250 1.020793e-22 15848930 8.858393e-23 19952620 7.81082e-23 25118860 6.997645e-23 31622780 6.36642e-23 39810720 5.876433e-23 50118720 5.496083e-23 63095730 5.200837e-23 79432820 4.971653e-23 100000000 4.79375e-23 1000 2.198137e-18 1258.925 1.706309e-18 1584.893 1.32453e-18 1995.262 1.028174e-18 2511.886 7.981293e-19 3162.278 6.195575e-19 3981.072 4.809416e-19 5011.872 3.733415e-19 6309.573 2.898172e-19 7943.282 2.249817e-19 10000 1.746533e-19 12589.25 1.355861e-19 15848.93 1.052602e-19 19952.62 8.17199e-20 25118.86 6.344677e-20 31622.78 4.926231e-20 39810.72 3.825166e-20 50118.72 2.970468e-20 63095.73 2.307011e-20 79432.82 1.792004e-20 100000 1.392232e-20 125892.5 1.081909e-20 158489.3 8.410228e-21 199526.2 6.540352e-21 251188.6 5.088866e-21 316227.8 3.962154e-21 398107.2 3.087547e-21 501187.2 2.408636e-21 630957.3 1.881633e-21 794328.2 1.472549e-21 1000000 1.154998e-21 1258925 9.085008e-22 1584893 7.171577e-22 1995262 5.686281e-22 2511886 4.533325e-22 3162278 3.638346e-22 3981072 2.943621e-22 5011872 2.404343e-22 6309573 1.98573e-22 7943282 1.660783e-22 10000000 1.408543e-22 12589250 1.212743e-22 15848930 1.060754e-22 19952620 9.427729e-23 25118860 8.511903e-23 31622780 7.800996e-23 39810720 7.249157e-23 50118720 6.820793e-23 63095730 6.488277e-23 79432820 6.230162e-23 100000000 6.029801e-23 1000 2.374527e-18 1258.925 1.843234e-18 1584.893 1.43082e-18 1995.262 1.110684e-18 2511.886 8.621798e-19 3162.278 6.692789e-19 3981.072 5.195402e-19 5011.872 4.03306e-19 6309.573 3.130795e-19 7943.282 2.430415e-19 10000 1.886746e-19 12589.25 1.464725e-19 15848.93 1.137133e-19 19952.62 8.828398e-20 25118.86 6.854457e-20 31622.78 5.322192e-20 39810.72 4.132775e-20 50118.72 3.209493e-20 63095.73 2.492799e-20 79432.82 1.936467e-20 100000 1.504616e-20 125892.5 1.169393e-20 158489.3 9.091765e-21 199526.2 7.071845e-21 251188.6 5.503889e-21 316227.8 4.286767e-21 398107.2 3.34198e-21 501187.2 2.608591e-21 630957.3 2.0393e-21 794328.2 1.59739e-21 1000000 1.254359e-21 1258925 9.880814e-22 1584893 7.813844e-22 1995262 6.209365e-22 2511886 4.963893e-22 3162278 3.997099e-22 3981072 3.246628e-22 5011872 2.664076e-22 6309573 2.211873e-22 7943282 1.860851e-22 10000000 1.588371e-22 12589250 1.37686e-22 15848930 1.212675e-22 19952620 1.085226e-22 25118860 9.862949e-23 31622780 9.094997e-23 39810720 8.498876e-23 50118720 8.036139e-23 63095730 7.676941e-23 79432820 7.398115e-23 100000000 7.181676e-23 tmpk8ny_4pz/tests/bsim3/nmos/reference/noise1.standard0000644000175000017500000000635413546075722023201 0ustar carstencarstenFreq N(d) 1000 2.044022e-21 1258.925 1.592281e-21 1584.893 1.241618e-21 1995.262 9.694172e-22 2511.886 7.581221e-22 3162.278 5.941048e-22 3981.072 4.667868e-22 5011.872 3.679567e-22 6309.573 2.9124e-22 7943.282 2.316889e-22 10000 1.854626e-22 12589.25 1.495795e-22 15848.93 1.217254e-22 19952.62 1.001037e-22 25118.86 8.331992e-23 31622.78 7.029156e-23 39810.72 6.017834e-23 50118.72 5.232798e-23 63095.73 4.623416e-23 79432.82 4.150385e-23 100000 3.783196e-23 125892.5 3.498167e-23 158489.3 3.276914e-23 199526.2 3.105166e-23 251188.6 2.971848e-23 316227.8 2.86836e-23 398107.2 2.788028e-23 501187.2 2.72567e-23 630957.3 2.677266e-23 794328.2 2.639691e-23 1000000 2.610524e-23 1258925 2.587884e-23 1584893 2.570309e-23 1995262 2.556667e-23 2511886 2.546077e-23 3162278 2.537856e-23 3981072 2.531475e-23 5011872 2.526522e-23 6309573 2.522677e-23 7943282 2.519693e-23 10000000 2.517376e-23 12589250 2.515577e-23 15848930 2.514181e-23 19952620 2.513098e-23 25118860 2.512257e-23 31622780 2.511604e-23 39810720 2.511097e-23 50118720 2.510703e-23 63095730 2.510398e-23 79432820 2.510161e-23 100000000 2.509977e-23 1000 2.829118e-21 1258.925 2.201737e-21 1584.893 1.714733e-21 1995.262 1.336699e-21 2511.886 1.04325e-21 3162.278 8.154618e-22 3981.072 6.386417e-22 5011.872 5.013856e-22 6309.573 3.948409e-22 7943.282 3.121359e-22 10000 2.479364e-22 12589.25 1.981017e-22 15848.93 1.594177e-22 19952.62 1.293893e-22 25118.86 1.060799e-22 31622.78 8.798601e-23 39810.72 7.394068e-23 50118.72 6.303804e-23 63095.73 5.45749e-23 79432.82 4.800541e-23 100000 4.290586e-23 125892.5 3.894735e-23 158489.3 3.587457e-23 199526.2 3.348933e-23 251188.6 3.163779e-23 316227.8 3.020055e-23 398107.2 2.908489e-23 501187.2 2.821886e-23 630957.3 2.754661e-23 794328.2 2.702477e-23 1000000 2.66197e-23 1258925 2.630527e-23 1584893 2.606119e-23 1995262 2.587172e-23 2511886 2.572465e-23 3162278 2.561048e-23 3981072 2.552186e-23 5011872 2.545307e-23 6309573 2.539967e-23 7943282 2.535822e-23 10000000 2.532605e-23 12589250 2.530107e-23 15848930 2.528168e-23 19952620 2.526663e-23 25118860 2.525495e-23 31622780 2.524588e-23 39810720 2.523884e-23 50118720 2.523338e-23 63095730 2.522914e-23 79432820 2.522585e-23 100000000 2.522329e-23 1000 3.639218e-21 1258.925 2.830594e-21 1584.893 2.202903e-21 1995.262 1.715659e-21 2511.886 1.337437e-21 3162.278 1.043844e-21 3981.072 8.159425e-22 5011.872 6.390349e-22 6309.573 5.017109e-22 7943.282 3.951136e-22 10000 3.123677e-22 12589.25 2.481364e-22 15848.93 1.982771e-22 19952.62 1.595739e-22 25118.86 1.295307e-22 31622.78 1.062098e-22 39810.72 8.810694e-23 50118.72 7.405467e-23 63095.73 6.314664e-23 79432.82 5.467931e-23 100000 4.810657e-23 125892.5 4.30045e-23 158489.3 3.904403e-23 199526.2 3.596973e-23 251188.6 3.358332e-23 316227.8 3.173087e-23 398107.2 3.029291e-23 501187.2 2.91767e-23 630957.3 2.831024e-23 794328.2 2.763766e-23 1000000 2.711557e-23 1258925 2.671029e-23 1584893 2.63957e-23 1995262 2.61515e-23 2511886 2.596194e-23 3162278 2.58148e-23 3981072 2.570058e-23 5011872 2.561191e-23 6309573 2.554309e-23 7943282 2.548966e-23 10000000 2.544819e-23 12589250 2.5416e-23 15848930 2.539101e-23 19952620 2.537161e-23 25118860 2.535656e-23 31622780 2.534487e-23 39810720 2.533579e-23 50118720 2.532875e-23 63095730 2.532329e-23 79432820 2.531904e-23 100000000 2.531575e-23 tmpk8ny_4pz/tests/bsim3/nmos/reference/acFreq_xpart.standard0000644000175000017500000000714013546075722024414 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.57706071178543e-14 2.05822355505301e-14 4.55132207661031e-15 1258.925 2.57706166768854e-14 2.05822736223065e-14 4.55131873403097e-15 1584.893 2.57706119481062e-14 2.05822824922572e-14 4.55131523375102e-15 1995.262 2.57706138235795e-14 2.05822138250239e-14 4.55132140963526e-15 2511.886 2.57706166885567e-14 2.05822278653798e-14 4.55131564138994e-15 3162.278 2.57706072599337e-14 2.05822297367015e-14 4.55131545779621e-15 3981.072 2.57706091228265e-14 2.05822278274373e-14 4.55132528405412e-15 5011.872 2.57706124512689e-14 2.05822256814014e-14 4.55130616040468e-15 6309.573 2.57706191115458e-14 2.05822456527351e-14 4.55130701346984e-15 7943.282 2.57706043856278e-14 2.05822132138477e-14 4.55131312638909e-15 10000 2.57706071178543e-14 2.05822355505301e-14 4.55132207661031e-15 12589.25 2.57706166768854e-14 2.05822736223065e-14 4.55131873403097e-15 15848.93 2.57706119481062e-14 2.05822824922572e-14 4.55131523375102e-15 19952.62 2.57706138235795e-14 2.05822138250239e-14 4.55132140963526e-15 25118.86 2.57706166885567e-14 2.05822278653798e-14 4.55131564138994e-15 31622.78 2.57706072599337e-14 2.05822297367015e-14 4.55131545779621e-15 39810.72 2.57706091228265e-14 2.05822278274373e-14 4.55132528405412e-15 50118.72 2.57706124512689e-14 2.05822256814014e-14 4.55130616040468e-15 63095.73 2.57706191115458e-14 2.05822456527351e-14 4.55130701346984e-15 79432.82 2.57706043856278e-14 2.05822132138477e-14 4.55131312638909e-15 100000 2.57706071178543e-14 2.05822355505301e-14 4.55132207661031e-15 125892.5 2.57706166768854e-14 2.05822736223065e-14 4.55131873403097e-15 158489.3 2.57706119481062e-14 2.05822824922572e-14 4.55131523375102e-15 199526.2 2.57706138235795e-14 2.05822138250239e-14 4.55132140963526e-15 251188.6 2.57706166885567e-14 2.05822278653798e-14 4.55131564138994e-15 316227.8 2.57706072599337e-14 2.05822297367014e-14 4.55131545779621e-15 398107.2 2.57706091228265e-14 2.05822278274373e-14 4.55132528405412e-15 501187.2 2.57706124512689e-14 2.05822256814014e-14 4.55130616040468e-15 630957.3 2.57706191115458e-14 2.05822456527351e-14 4.55130701346984e-15 794328.2 2.57706043856278e-14 2.05822132138477e-14 4.55131312638909e-15 1000000 2.57706071178543e-14 2.05822355505301e-14 4.55132207661031e-15 1258925 2.57706166768854e-14 2.05822736223065e-14 4.55131873403097e-15 1584893 2.57706119481062e-14 2.05822824922572e-14 4.55131523375102e-15 1995262 2.57706138235795e-14 2.05822138250239e-14 4.55132140963526e-15 2511886 2.57706166885567e-14 2.05822278653798e-14 4.55131564138994e-15 3162278 2.57706072599337e-14 2.05822297367014e-14 4.55131545779621e-15 3981072 2.57706091228265e-14 2.05822278274373e-14 4.55132528405412e-15 5011872 2.57706124512689e-14 2.05822256814014e-14 4.55130616040468e-15 6309573 2.57706191115458e-14 2.05822456527351e-14 4.55130701346984e-15 7943282 2.57706043856278e-14 2.05822132138477e-14 4.55131312638909e-15 10000000 2.57706071178543e-14 2.05822355505301e-14 4.55132207661031e-15 12589250 2.57706166768854e-14 2.05822736223065e-14 4.55131873403097e-15 15848930 2.57706119481062e-14 2.05822824922572e-14 4.55131523375102e-15 19952620 2.57706138235795e-14 2.05822138250239e-14 4.55132140963526e-15 25118860 2.57706166885567e-14 2.05822278653798e-14 4.55131564138994e-15 31622780 2.57706072599337e-14 2.05822297367014e-14 4.55131545779621e-15 39810720 2.57706091228265e-14 2.05822278274373e-14 4.55132528405412e-15 50118720 2.57706124512689e-14 2.05822256814014e-14 4.55130616040468e-15 63095730 2.57706191115458e-14 2.05822456527351e-14 4.55130701346984e-15 79432820 2.57706043856278e-14 2.05822132138477e-14 4.55131312638909e-15 100000000 2.57706071178543e-14 2.05822355505301e-14 4.55132207661031e-15 tmpk8ny_4pz/tests/bsim3/nmos/reference/dcSweep_lw1.standard0000644000175000017500000003054613546075722024160 0ustar carstencarstenV(d) I(d) 1.000000e-01 7.015170e-13 2.000000e-01 7.309119e-13 3.000000e-01 7.498169e-13 4.000000e-01 7.671641e-13 5.000000e-01 7.840256e-13 6.000000e-01 8.006928e-13 7.000000e-01 8.172768e-13 8.000000e-01 8.338052e-13 9.000000e-01 8.503476e-13 1.000000e+00 8.669454e-13 1.100000e+00 8.835571e-13 1.200000e+00 9.001827e-13 1.300000e+00 9.169054e-13 1.400000e+00 9.336698e-13 1.500000e+00 9.504897e-13 1.600000e+00 9.673373e-13 1.700000e+00 9.843237e-13 1.800000e+00 1.001310e-12 1.000000e-01 9.622446e-11 2.000000e-01 1.002705e-10 3.000000e-01 1.028850e-10 4.000000e-01 1.052844e-10 5.000000e-01 1.076147e-10 6.000000e-01 1.099168e-10 7.000000e-01 1.122072e-10 8.000000e-01 1.144938e-10 9.000000e-01 1.167811e-10 1.000000e+00 1.190717e-10 1.100000e+00 1.213672e-10 1.200000e+00 1.236689e-10 1.300000e+00 1.259774e-10 1.400000e+00 1.282935e-10 1.500000e+00 1.306175e-10 1.600000e+00 1.329498e-10 1.700000e+00 1.352906e-10 1.800000e+00 1.376400e-10 1.000000e-01 1.220043e-08 2.000000e-01 1.271360e-08 3.000000e-01 1.304342e-08 4.000000e-01 1.334566e-08 5.000000e-01 1.363898e-08 6.000000e-01 1.392861e-08 7.000000e-01 1.421666e-08 8.000000e-01 1.450415e-08 9.000000e-01 1.479164e-08 1.000000e+00 1.507947e-08 1.100000e+00 1.536786e-08 1.200000e+00 1.565695e-08 1.300000e+00 1.594685e-08 1.400000e+00 1.623762e-08 1.500000e+00 1.652933e-08 1.600000e+00 1.682201e-08 1.700000e+00 1.711570e-08 1.800000e+00 1.741043e-08 1.000000e-01 9.747524e-07 2.000000e-01 1.024860e-06 3.000000e-01 1.050108e-06 4.000000e-01 1.071953e-06 5.000000e-01 1.092625e-06 6.000000e-01 1.112749e-06 7.000000e-01 1.132581e-06 8.000000e-01 1.152247e-06 9.000000e-01 1.171820e-06 1.000000e+00 1.191343e-06 1.100000e+00 1.210843e-06 1.200000e+00 1.230341e-06 1.300000e+00 1.249850e-06 1.400000e+00 1.269378e-06 1.500000e+00 1.288934e-06 1.600000e+00 1.308522e-06 1.700000e+00 1.328148e-06 1.800000e+00 1.347814e-06 1.000000e-01 1.472403e-05 2.000000e-01 1.926661e-05 3.000000e-01 2.012245e-05 4.000000e-01 2.052754e-05 5.000000e-01 2.083320e-05 6.000000e-01 2.109616e-05 7.000000e-01 2.133560e-05 8.000000e-01 2.156046e-05 9.000000e-01 2.177560e-05 1.000000e+00 2.198394e-05 1.100000e+00 2.218733e-05 1.200000e+00 2.238704e-05 1.300000e+00 2.258393e-05 1.400000e+00 2.277862e-05 1.500000e+00 2.297159e-05 1.600000e+00 2.316318e-05 1.700000e+00 2.335366e-05 1.800000e+00 2.354325e-05 1.000000e-01 3.690242e-05 2.000000e-01 5.979531e-05 3.000000e-01 7.064426e-05 4.000000e-01 7.428644e-05 5.000000e-01 7.588689e-05 6.000000e-01 7.694865e-05 7.000000e-01 7.778047e-05 8.000000e-01 7.848584e-05 9.000000e-01 7.911263e-05 1.000000e+00 7.968683e-05 1.100000e+00 8.022399e-05 1.200000e+00 8.073406e-05 1.300000e+00 8.122370e-05 1.400000e+00 8.169756e-05 1.500000e+00 8.215898e-05 1.600000e+00 8.261043e-05 1.700000e+00 8.305377e-05 1.800000e+00 8.349044e-05 1.000000e-01 5.810282e-05 2.000000e-01 1.008371e-04 3.000000e-01 1.295348e-04 4.000000e-01 1.458301e-04 5.000000e-01 1.531967e-04 6.000000e-01 1.567100e-04 7.000000e-01 1.589281e-04 8.000000e-01 1.605780e-04 9.000000e-01 1.619159e-04 1.000000e+00 1.630605e-04 1.100000e+00 1.640763e-04 1.200000e+00 1.650015e-04 1.300000e+00 1.658607e-04 1.400000e+00 1.666701e-04 1.500000e+00 1.674412e-04 1.600000e+00 1.681819e-04 1.700000e+00 1.688985e-04 1.800000e+00 1.695952e-04 1.000000e-01 7.810183e-05 2.000000e-01 1.399382e-04 3.000000e-01 1.867910e-04 4.000000e-01 2.198852e-04 5.000000e-01 2.406483e-04 6.000000e-01 2.517543e-04 7.000000e-01 2.576068e-04 8.000000e-01 2.612841e-04 9.000000e-01 2.639491e-04 1.000000e+00 2.660521e-04 1.100000e+00 2.678067e-04 1.200000e+00 2.693292e-04 1.300000e+00 2.706890e-04 1.400000e+00 2.719302e-04 1.500000e+00 2.730821e-04 1.600000e+00 2.741654e-04 1.700000e+00 2.751945e-04 1.800000e+00 2.761802e-04 1.000000e-01 9.701559e-05 2.000000e-01 1.770929e-04 3.000000e-01 2.415029e-04 4.000000e-01 2.914169e-04 5.000000e-01 3.279579e-04 6.000000e-01 3.523994e-04 7.000000e-01 3.669186e-04 8.000000e-01 3.752378e-04 9.000000e-01 3.805481e-04 1.000000e+00 3.843573e-04 1.100000e+00 3.873166e-04 1.200000e+00 3.897457e-04 1.300000e+00 3.918210e-04 1.400000e+00 3.936481e-04 1.500000e+00 3.952943e-04 1.600000e+00 3.968045e-04 1.700000e+00 3.982100e-04 1.800000e+00 3.995331e-04 1.000000e-01 1.268430e-14 2.000000e-01 1.326717e-14 3.000000e-01 1.316308e-14 4.000000e-01 1.335043e-14 5.000000e-01 1.355166e-14 6.000000e-01 1.373901e-14 7.000000e-01 1.393330e-14 8.000000e-01 1.411371e-14 9.000000e-01 1.430800e-14 1.000000e+00 1.448841e-14 1.100000e+00 1.466882e-14 1.200000e+00 1.487699e-14 1.300000e+00 1.504352e-14 1.400000e+00 1.523781e-14 1.500000e+00 1.545986e-14 1.600000e+00 1.559863e-14 1.700000e+00 1.582068e-14 1.800000e+00 1.601497e-14 1.000000e-01 2.049316e-12 2.000000e-01 2.147754e-12 3.000000e-01 2.221730e-12 4.000000e-01 2.291736e-12 5.000000e-01 2.360570e-12 6.000000e-01 2.429043e-12 7.000000e-01 2.497488e-12 8.000000e-01 2.566045e-12 9.000000e-01 2.634837e-12 1.000000e+00 2.703879e-12 1.100000e+00 2.773240e-12 1.200000e+00 2.842893e-12 1.300000e+00 2.912892e-12 1.400000e+00 2.983253e-12 1.500000e+00 3.053974e-12 1.600000e+00 3.125056e-12 1.700000e+00 3.196499e-12 1.800000e+00 3.268358e-12 1.000000e-01 1.501376e-09 2.000000e-01 1.573628e-09 3.000000e-01 1.627885e-09 4.000000e-01 1.679209e-09 5.000000e-01 1.729660e-09 6.000000e-01 1.779838e-09 7.000000e-01 1.829983e-09 8.000000e-01 1.880214e-09 9.000000e-01 1.930594e-09 1.000000e+00 1.981162e-09 1.100000e+00 2.031942e-09 1.200000e+00 2.082952e-09 1.300000e+00 2.134204e-09 1.400000e+00 2.185705e-09 1.500000e+00 2.237464e-09 1.600000e+00 2.289484e-09 1.700000e+00 2.341772e-09 1.800000e+00 2.394330e-09 1.000000e-01 5.861317e-07 2.000000e-01 6.150700e-07 3.000000e-01 6.345252e-07 4.000000e-01 6.523952e-07 5.000000e-01 6.697268e-07 6.000000e-01 6.868303e-07 7.000000e-01 7.038330e-07 8.000000e-01 7.207977e-07 9.000000e-01 7.377592e-07 1.000000e+00 7.547384e-07 1.100000e+00 7.717488e-07 1.200000e+00 7.887992e-07 1.300000e+00 8.058960e-07 1.400000e+00 8.230437e-07 1.500000e+00 8.402458e-07 1.600000e+00 8.575049e-07 1.700000e+00 8.748231e-07 1.800000e+00 8.922018e-07 1.000000e-01 1.969523e-05 2.000000e-01 2.412269e-05 3.000000e-01 2.503632e-05 4.000000e-01 2.555766e-05 5.000000e-01 2.596898e-05 6.000000e-01 2.633080e-05 7.000000e-01 2.666556e-05 8.000000e-01 2.698383e-05 9.000000e-01 2.729132e-05 1.000000e+00 2.759139e-05 1.100000e+00 2.788618e-05 1.200000e+00 2.817707e-05 1.300000e+00 2.846505e-05 1.400000e+00 2.875079e-05 1.500000e+00 2.903482e-05 1.600000e+00 2.931751e-05 1.700000e+00 2.959914e-05 1.800000e+00 2.987995e-05 1.000000e-01 5.562294e-05 2.000000e-01 8.690923e-05 3.000000e-01 9.935569e-05 4.000000e-01 1.034063e-04 5.000000e-01 1.054502e-04 6.000000e-01 1.068613e-04 7.000000e-01 1.079839e-04 8.000000e-01 1.089484e-04 9.000000e-01 1.098163e-04 1.000000e+00 1.106207e-04 1.100000e+00 1.113813e-04 1.200000e+00 1.121101e-04 1.300000e+00 1.128154e-04 1.400000e+00 1.135026e-04 1.500000e+00 1.141759e-04 1.600000e+00 1.148379e-04 1.700000e+00 1.154909e-04 1.800000e+00 1.161366e-04 1.000000e-01 9.060417e-05 2.000000e-01 1.537776e-04 3.000000e-01 1.929549e-04 4.000000e-01 2.125822e-04 5.000000e-01 2.209257e-04 6.000000e-01 2.252296e-04 7.000000e-01 2.280493e-04 8.000000e-01 2.301742e-04 9.000000e-01 2.319170e-04 1.000000e+00 2.334266e-04 1.100000e+00 2.347833e-04 1.200000e+00 2.360343e-04 1.300000e+00 2.372092e-04 1.400000e+00 2.383276e-04 1.500000e+00 2.394027e-04 1.600000e+00 2.404441e-04 1.700000e+00 2.414586e-04 1.800000e+00 2.424515e-04 1.000000e-01 1.237123e-04 2.000000e-01 2.178521e-04 3.000000e-01 2.857352e-04 4.000000e-01 3.304290e-04 5.000000e-01 3.557049e-04 6.000000e-01 3.682591e-04 7.000000e-01 3.750849e-04 8.000000e-01 3.795049e-04 9.000000e-01 3.827526e-04 1.000000e+00 3.853470e-04 1.100000e+00 3.875408e-04 1.200000e+00 3.894715e-04 1.300000e+00 3.912201e-04 1.400000e+00 3.928377e-04 1.500000e+00 3.943576e-04 1.600000e+00 3.958031e-04 1.700000e+00 3.971903e-04 1.800000e+00 3.985312e-04 1.000000e-01 1.549222e-04 2.000000e-01 2.786123e-04 3.000000e-01 3.743878e-04 4.000000e-01 4.451811e-04 5.000000e-01 4.937105e-04 6.000000e-01 5.232133e-04 7.000000e-01 5.393120e-04 8.000000e-01 5.485090e-04 9.000000e-01 5.545063e-04 1.000000e+00 5.588765e-04 1.100000e+00 5.623225e-04 1.200000e+00 5.651963e-04 1.300000e+00 5.676920e-04 1.400000e+00 5.699252e-04 1.500000e+00 5.719687e-04 1.600000e+00 5.738708e-04 1.700000e+00 5.756646e-04 1.800000e+00 5.773737e-04 1.000000e-01 7.521019e-11 2.000000e-01 7.843965e-11 3.000000e-01 7.999924e-11 4.000000e-01 8.135546e-11 5.000000e-01 8.264696e-11 6.000000e-01 8.390966e-11 7.000000e-01 8.515762e-11 8.000000e-01 8.639760e-11 9.000000e-01 8.763337e-11 1.000000e+00 8.886727e-11 1.100000e+00 9.010072e-11 1.200000e+00 9.133469e-11 1.300000e+00 9.256987e-11 1.400000e+00 9.380685e-11 1.500000e+00 9.504592e-11 1.600000e+00 9.628737e-11 1.700000e+00 9.753151e-11 1.800000e+00 9.877840e-11 1.000000e-01 2.416757e-09 2.000000e-01 2.520592e-09 3.000000e-01 2.570640e-09 4.000000e-01 2.614139e-09 5.000000e-01 2.655552e-09 6.000000e-01 2.696036e-09 7.000000e-01 2.736041e-09 8.000000e-01 2.775787e-09 9.000000e-01 2.815396e-09 1.000000e+00 2.854941e-09 1.100000e+00 2.894469e-09 1.200000e+00 2.934011e-09 1.300000e+00 2.973591e-09 1.400000e+00 3.013224e-09 1.500000e+00 3.052922e-09 1.600000e+00 3.092695e-09 1.700000e+00 3.132551e-09 1.800000e+00 3.172494e-09 1.000000e-01 6.806656e-08 2.000000e-01 7.109481e-08 3.000000e-01 7.250047e-08 4.000000e-01 7.371226e-08 5.000000e-01 7.486204e-08 6.000000e-01 7.598382e-08 7.000000e-01 7.709093e-08 8.000000e-01 7.818985e-08 9.000000e-01 7.928417e-08 1.000000e+00 8.037607e-08 1.100000e+00 8.146694e-08 1.200000e+00 8.255775e-08 1.300000e+00 8.364915e-08 1.400000e+00 8.474164e-08 1.500000e+00 8.583557e-08 1.600000e+00 8.693123e-08 1.700000e+00 8.802882e-08 1.800000e+00 8.912852e-08 1.000000e-01 1.419350e-06 2.000000e-01 1.536296e-06 3.000000e-01 1.568541e-06 4.000000e-01 1.593220e-06 5.000000e-01 1.615596e-06 6.000000e-01 1.636885e-06 7.000000e-01 1.657558e-06 8.000000e-01 1.677849e-06 9.000000e-01 1.697888e-06 1.000000e+00 1.717757e-06 1.100000e+00 1.737509e-06 1.200000e+00 1.757180e-06 1.300000e+00 1.776797e-06 1.400000e+00 1.796377e-06 1.500000e+00 1.815936e-06 1.600000e+00 1.835484e-06 1.700000e+00 1.855030e-06 1.800000e+00 1.874581e-06 1.000000e-01 9.968334e-06 2.000000e-01 1.418017e-05 3.000000e-01 1.510996e-05 4.000000e-01 1.541598e-05 5.000000e-01 1.562517e-05 6.000000e-01 1.580009e-05 7.000000e-01 1.595689e-05 8.000000e-01 1.610239e-05 9.000000e-01 1.624024e-05 1.000000e+00 1.637265e-05 1.100000e+00 1.650102e-05 1.200000e+00 1.662632e-05 1.300000e+00 1.674924e-05 1.400000e+00 1.687027e-05 1.500000e+00 1.698980e-05 1.600000e+00 1.710809e-05 1.700000e+00 1.722539e-05 1.800000e+00 1.734185e-05 1.000000e-01 2.240159e-05 2.000000e-01 3.761302e-05 3.000000e-01 4.621673e-05 4.000000e-01 4.967148e-05 5.000000e-01 5.092205e-05 6.000000e-01 5.164646e-05 7.000000e-01 5.219732e-05 8.000000e-01 5.265978e-05 9.000000e-01 5.306756e-05 1.000000e+00 5.343823e-05 1.100000e+00 5.378226e-05 1.200000e+00 5.410646e-05 1.300000e+00 5.441544e-05 1.400000e+00 5.471250e-05 1.500000e+00 5.500002e-05 1.600000e+00 5.527981e-05 1.700000e+00 5.555325e-05 1.800000e+00 5.582139e-05 1.000000e-01 3.405126e-05 2.000000e-01 6.037106e-05 3.000000e-01 7.940582e-05 4.000000e-01 9.166113e-05 5.000000e-01 9.809046e-05 6.000000e-01 1.009458e-04 7.000000e-01 1.025150e-04 8.000000e-01 1.036367e-04 9.000000e-01 1.045382e-04 1.000000e+00 1.053057e-04 1.100000e+00 1.059829e-04 1.200000e+00 1.065955e-04 1.300000e+00 1.071601e-04 1.400000e+00 1.076879e-04 1.500000e+00 1.081869e-04 1.600000e+00 1.086628e-04 1.700000e+00 1.091200e-04 1.800000e+00 1.095618e-04 1.000000e-01 4.479912e-05 2.000000e-01 8.154819e-05 3.000000e-01 1.106759e-04 4.000000e-01 1.325993e-04 5.000000e-01 1.477729e-04 6.000000e-01 1.569208e-04 7.000000e-01 1.616975e-04 8.000000e-01 1.643867e-04 9.000000e-01 1.662490e-04 1.000000e+00 1.677047e-04 1.100000e+00 1.689153e-04 1.200000e+00 1.699617e-04 1.300000e+00 1.708909e-04 1.400000e+00 1.717332e-04 1.500000e+00 1.725090e-04 1.600000e+00 1.732327e-04 1.700000e+00 1.739149e-04 1.800000e+00 1.745633e-04 1.000000e-01 5.489504e-05 2.000000e-01 1.015212e-04 3.000000e-01 1.402993e-04 4.000000e-01 1.716282e-04 5.000000e-01 1.958961e-04 6.000000e-01 2.135179e-04 7.000000e-01 2.250890e-04 8.000000e-01 2.318643e-04 9.000000e-01 2.358755e-04 1.000000e+00 2.386269e-04 1.100000e+00 2.407410e-04 1.200000e+00 2.424713e-04 1.300000e+00 2.439448e-04 1.400000e+00 2.452355e-04 1.500000e+00 2.463908e-04 1.600000e+00 2.474426e-04 1.700000e+00 2.484135e-04 1.800000e+00 2.493198e-04 tmpk8ny_4pz/tests/bsim3/nmos/reference/dcSweep_lw1_vb1.standard0000644000175000017500000003054613546075722024730 0ustar carstencarstenV(d) I(d) 1.000000e-01 1.288067e-13 2.000000e-01 1.380215e-13 3.000000e-01 1.373554e-13 4.000000e-01 1.404571e-13 5.000000e-01 1.434755e-13 6.000000e-01 1.464592e-13 7.000000e-01 1.494360e-13 8.000000e-01 1.524197e-13 9.000000e-01 1.554035e-13 1.000000e+00 1.583872e-13 1.100000e+00 1.613709e-13 1.200000e+00 1.643963e-13 1.300000e+00 1.674216e-13 1.400000e+00 1.704470e-13 1.500000e+00 1.734723e-13 1.600000e+00 1.765255e-13 1.700000e+00 1.796063e-13 1.800000e+00 1.826872e-13 1.000000e-01 1.994739e-11 2.000000e-01 2.080148e-11 3.000000e-01 2.135138e-11 4.000000e-01 2.185672e-11 5.000000e-01 2.234814e-11 6.000000e-01 2.283417e-11 7.000000e-01 2.331824e-11 8.000000e-01 2.380197e-11 9.000000e-01 2.428632e-11 1.000000e+00 2.477181e-11 1.100000e+00 2.525881e-11 1.200000e+00 2.574753e-11 1.300000e+00 2.623815e-11 1.400000e+00 2.673084e-11 1.500000e+00 2.722561e-11 1.600000e+00 2.772257e-11 1.700000e+00 2.822176e-11 1.800000e+00 2.872330e-11 1.000000e-01 3.184140e-09 2.000000e-01 3.320398e-09 3.000000e-01 3.407932e-09 4.000000e-01 3.488324e-09 5.000000e-01 3.566472e-09 6.000000e-01 3.643746e-09 7.000000e-01 3.720691e-09 8.000000e-01 3.797573e-09 9.000000e-01 3.874538e-09 1.000000e+00 3.951673e-09 1.100000e+00 4.029035e-09 1.200000e+00 4.106661e-09 1.300000e+00 4.184578e-09 1.400000e+00 4.262805e-09 1.500000e+00 4.341359e-09 1.600000e+00 4.420249e-09 1.700000e+00 4.499486e-09 1.800000e+00 4.579076e-09 1.000000e-01 3.489977e-07 2.000000e-01 3.650635e-07 3.000000e-01 3.743537e-07 4.000000e-01 3.826772e-07 5.000000e-01 3.906805e-07 6.000000e-01 3.985444e-07 7.000000e-01 4.063422e-07 8.000000e-01 4.141098e-07 9.000000e-01 4.218672e-07 1.000000e+00 4.296264e-07 1.100000e+00 4.373951e-07 1.200000e+00 4.451787e-07 1.300000e+00 4.529807e-07 1.400000e+00 4.608039e-07 1.500000e+00 4.686502e-07 1.600000e+00 4.765212e-07 1.700000e+00 4.844181e-07 1.800000e+00 4.923419e-07 1.000000e-01 9.788335e-06 2.000000e-01 1.188405e-05 3.000000e-01 1.228033e-05 4.000000e-01 1.251449e-05 5.000000e-01 1.270603e-05 6.000000e-01 1.287814e-05 7.000000e-01 1.303933e-05 8.000000e-01 1.319370e-05 9.000000e-01 1.334353e-05 1.000000e+00 1.349019e-05 1.100000e+00 1.363457e-05 1.200000e+00 1.377727e-05 1.300000e+00 1.391871e-05 1.400000e+00 1.405919e-05 1.500000e+00 1.419894e-05 1.600000e+00 1.433814e-05 1.700000e+00 1.447691e-05 1.800000e+00 1.461535e-05 1.000000e-01 3.127556e-05 2.000000e-01 4.953514e-05 3.000000e-01 5.709572e-05 4.000000e-01 5.942985e-05 5.000000e-01 6.057380e-05 6.000000e-01 6.138502e-05 7.000000e-01 6.204484e-05 8.000000e-01 6.261890e-05 9.000000e-01 6.313872e-05 1.000000e+00 6.362184e-05 1.100000e+00 6.407889e-05 1.200000e+00 6.451677e-05 1.300000e+00 6.494012e-05 1.400000e+00 6.535222e-05 1.500000e+00 6.575543e-05 1.600000e+00 6.615151e-05 1.700000e+00 6.654178e-05 1.800000e+00 6.692727e-05 1.000000e-01 5.248595e-05 2.000000e-01 9.043055e-05 3.000000e-01 1.151244e-04 4.000000e-01 1.283227e-04 5.000000e-01 1.339546e-04 6.000000e-01 1.367357e-04 7.000000e-01 1.385705e-04 8.000000e-01 1.399741e-04 9.000000e-01 1.411352e-04 1.000000e+00 1.421438e-04 1.100000e+00 1.430498e-04 1.200000e+00 1.438831e-04 1.300000e+00 1.446630e-04 1.400000e+00 1.454025e-04 1.500000e+00 1.461108e-04 1.600000e+00 1.467943e-04 1.700000e+00 1.474580e-04 1.800000e+00 1.481054e-04 1.000000e-01 7.252103e-05 2.000000e-01 1.295452e-04 3.000000e-01 1.722974e-04 4.000000e-01 2.019628e-04 5.000000e-01 2.200071e-04 6.000000e-01 2.293406e-04 7.000000e-01 2.342968e-04 8.000000e-01 2.374920e-04 9.000000e-01 2.398538e-04 1.000000e+00 2.417456e-04 1.100000e+00 2.433428e-04 1.200000e+00 2.447422e-04 1.300000e+00 2.460021e-04 1.400000e+00 2.471597e-04 1.500000e+00 2.482402e-04 1.600000e+00 2.492609e-04 1.700000e+00 2.502346e-04 1.800000e+00 2.511704e-04 1.000000e-01 9.147820e-05 2.000000e-01 1.667504e-04 3.000000e-01 2.270327e-04 4.000000e-01 2.734475e-04 5.000000e-01 3.070807e-04 6.000000e-01 3.292076e-04 7.000000e-01 3.421102e-04 8.000000e-01 3.495019e-04 9.000000e-01 3.542859e-04 1.000000e+00 3.577632e-04 1.100000e+00 3.604939e-04 1.200000e+00 3.627554e-04 1.300000e+00 3.647019e-04 1.400000e+00 3.664265e-04 1.500000e+00 3.679888e-04 1.600000e+00 3.694287e-04 1.700000e+00 3.707740e-04 1.800000e+00 3.720447e-04 1.000000e-01 1.054712e-14 2.000000e-01 1.066161e-14 3.000000e-01 1.076916e-14 4.000000e-01 1.087325e-14 5.000000e-01 1.097733e-14 6.000000e-01 1.108835e-14 7.000000e-01 1.119937e-14 8.000000e-01 1.129652e-14 9.000000e-01 1.142142e-14 1.000000e+00 1.150469e-14 1.100000e+00 1.162959e-14 1.200000e+00 1.174061e-14 1.300000e+00 1.187939e-14 1.400000e+00 1.193490e-14 1.500000e+00 1.204592e-14 1.600000e+00 1.215694e-14 1.700000e+00 1.226796e-14 1.800000e+00 1.237899e-14 1.000000e-01 2.547285e-13 2.000000e-01 2.728824e-13 3.000000e-01 2.758974e-13 4.000000e-01 2.845224e-13 5.000000e-01 2.930226e-13 6.000000e-01 3.014880e-13 7.000000e-01 3.099465e-13 8.000000e-01 3.184536e-13 9.000000e-01 3.269884e-13 1.000000e+00 3.355649e-13 1.100000e+00 3.441830e-13 1.200000e+00 3.528705e-13 1.300000e+00 3.615719e-13 1.400000e+00 3.703426e-13 1.500000e+00 3.791967e-13 1.600000e+00 3.880785e-13 1.700000e+00 3.970158e-13 1.800000e+00 4.060086e-13 1.000000e-01 2.374800e-10 2.000000e-01 2.490949e-10 3.000000e-01 2.578256e-10 4.000000e-01 2.661001e-10 5.000000e-01 2.742469e-10 6.000000e-01 2.823611e-10 7.000000e-01 2.904812e-10 8.000000e-01 2.986257e-10 9.000000e-01 3.068048e-10 1.000000e+00 3.150247e-10 1.100000e+00 3.232894e-10 1.200000e+00 3.316017e-10 1.300000e+00 3.399636e-10 1.400000e+00 3.483765e-10 1.500000e+00 3.568417e-10 1.600000e+00 3.653599e-10 1.700000e+00 3.739322e-10 1.800000e+00 3.825591e-10 1.000000e-01 1.506428e-07 2.000000e-01 1.579865e-07 3.000000e-01 1.633098e-07 4.000000e-01 1.683049e-07 5.000000e-01 1.731990e-07 6.000000e-01 1.780583e-07 7.000000e-01 1.829096e-07 8.000000e-01 1.877662e-07 9.000000e-01 1.926350e-07 1.000000e+00 1.975206e-07 1.100000e+00 2.024255e-07 1.200000e+00 2.073518e-07 1.300000e+00 2.123007e-07 1.400000e+00 2.172732e-07 1.500000e+00 2.222701e-07 1.600000e+00 2.272919e-07 1.700000e+00 2.323391e-07 1.800000e+00 2.374122e-07 1.000000e-01 1.202371e-05 2.000000e-01 1.374737e-05 3.000000e-01 1.418309e-05 4.000000e-01 1.448032e-05 5.000000e-01 1.473363e-05 6.000000e-01 1.496636e-05 7.000000e-01 1.518768e-05 8.000000e-01 1.540200e-05 9.000000e-01 1.561179e-05 1.000000e+00 1.581849e-05 1.100000e+00 1.602302e-05 1.200000e+00 1.622602e-05 1.300000e+00 1.642791e-05 1.400000e+00 1.662900e-05 1.500000e+00 1.682951e-05 1.600000e+00 1.702962e-05 1.700000e+00 1.722946e-05 1.800000e+00 1.742912e-05 1.000000e-01 4.670799e-05 2.000000e-01 7.092893e-05 3.000000e-01 7.916331e-05 4.000000e-01 8.184546e-05 5.000000e-01 8.334235e-05 6.000000e-01 8.443877e-05 7.000000e-01 8.534466e-05 8.000000e-01 8.614344e-05 9.000000e-01 8.687568e-05 1.000000e+00 8.756370e-05 1.100000e+00 8.822085e-05 1.200000e+00 8.885561e-05 1.300000e+00 8.947362e-05 1.400000e+00 9.007881e-05 1.500000e+00 9.067397e-05 1.600000e+00 9.126116e-05 1.700000e+00 9.184193e-05 1.800000e+00 9.241746e-05 1.000000e-01 8.173784e-05 2.000000e-01 1.375367e-04 3.000000e-01 1.707573e-04 4.000000e-01 1.862750e-04 5.000000e-01 1.927340e-04 6.000000e-01 1.962218e-04 7.000000e-01 1.985970e-04 8.000000e-01 2.004370e-04 9.000000e-01 2.019770e-04 1.000000e+00 2.033313e-04 1.100000e+00 2.045628e-04 1.200000e+00 2.057086e-04 1.300000e+00 2.067925e-04 1.400000e+00 2.078301e-04 1.500000e+00 2.088321e-04 1.600000e+00 2.098063e-04 1.700000e+00 2.107583e-04 1.800000e+00 2.116924e-04 1.000000e-01 1.149572e-04 2.000000e-01 2.017235e-04 3.000000e-01 2.634797e-04 4.000000e-01 3.032208e-04 5.000000e-01 3.249086e-04 6.000000e-01 3.355112e-04 7.000000e-01 3.413989e-04 8.000000e-01 3.453057e-04 9.000000e-01 3.482323e-04 1.000000e+00 3.506055e-04 1.100000e+00 3.526359e-04 1.200000e+00 3.544396e-04 1.300000e+00 3.560855e-04 1.400000e+00 3.576171e-04 1.500000e+00 3.590635e-04 1.600000e+00 3.604445e-04 1.700000e+00 3.617743e-04 1.800000e+00 3.630632e-04 1.000000e-01 1.462862e-04 2.000000e-01 2.626509e-04 3.000000e-01 3.522820e-04 4.000000e-01 4.180022e-04 5.000000e-01 4.624617e-04 6.000000e-01 4.889790e-04 7.000000e-01 5.033172e-04 8.000000e-01 5.115993e-04 9.000000e-01 5.170833e-04 1.000000e+00 5.211325e-04 1.100000e+00 5.243599e-04 1.200000e+00 5.270750e-04 1.300000e+00 5.294499e-04 1.400000e+00 5.315875e-04 1.500000e+00 5.335532e-04 1.600000e+00 5.353902e-04 1.700000e+00 5.371287e-04 1.800000e+00 5.387898e-04 1.000000e-01 2.150856e-11 2.000000e-01 2.245892e-11 3.000000e-01 2.291085e-11 4.000000e-01 2.330389e-11 5.000000e-01 2.367861e-11 6.000000e-01 2.404533e-11 7.000000e-01 2.440807e-11 8.000000e-01 2.476881e-11 9.000000e-01 2.512862e-11 1.000000e+00 2.548813e-11 1.100000e+00 2.584774e-11 1.200000e+00 2.620776e-11 1.300000e+00 2.656839e-11 1.400000e+00 2.692976e-11 1.500000e+00 2.729197e-11 1.600000e+00 2.765516e-11 1.700000e+00 2.801934e-11 1.800000e+00 2.838452e-11 1.000000e-01 7.995462e-10 2.000000e-01 8.348861e-10 3.000000e-01 8.516727e-10 4.000000e-01 8.662675e-10 5.000000e-01 8.801789e-10 6.000000e-01 8.937925e-10 7.000000e-01 9.072580e-10 8.000000e-01 9.206480e-10 9.000000e-01 9.340021e-10 1.000000e+00 9.473446e-10 1.100000e+00 9.606910e-10 1.200000e+00 9.740517e-10 1.300000e+00 9.874341e-10 1.400000e+00 1.000843e-09 1.500000e+00 1.014284e-09 1.600000e+00 1.027759e-09 1.700000e+00 1.041270e-09 1.800000e+00 1.054820e-09 1.000000e-01 2.697188e-08 2.000000e-01 2.818023e-08 3.000000e-01 2.874437e-08 4.000000e-01 2.923296e-08 5.000000e-01 2.969791e-08 6.000000e-01 3.015247e-08 7.000000e-01 3.060179e-08 8.000000e-01 3.104836e-08 9.000000e-01 3.149355e-08 1.000000e+00 3.193820e-08 1.100000e+00 3.238283e-08 1.200000e+00 3.282782e-08 1.300000e+00 3.327341e-08 1.400000e+00 3.371978e-08 1.500000e+00 3.416709e-08 1.600000e+00 3.461543e-08 1.700000e+00 3.506488e-08 1.800000e+00 3.551552e-08 1.000000e-01 6.892067e-07 2.000000e-01 7.327796e-07 3.000000e-01 7.477269e-07 4.000000e-01 7.598530e-07 5.000000e-01 7.711047e-07 6.000000e-01 7.819526e-07 7.000000e-01 7.925798e-07 8.000000e-01 8.030759e-07 9.000000e-01 8.134913e-07 1.000000e+00 8.238565e-07 1.100000e+00 8.341918e-07 1.200000e+00 8.445107e-07 1.300000e+00 8.548230e-07 1.400000e+00 8.651357e-07 1.500000e+00 8.754540e-07 1.600000e+00 8.857821e-07 1.700000e+00 8.961231e-07 1.800000e+00 9.064795e-07 1.000000e-01 7.154725e-06 2.000000e-01 9.539676e-06 3.000000e-01 9.960878e-06 4.000000e-01 1.013849e-05 5.000000e-01 1.027324e-05 6.000000e-01 1.039098e-05 7.000000e-01 1.049939e-05 8.000000e-01 1.060193e-05 9.000000e-01 1.070047e-05 1.000000e+00 1.079617e-05 1.100000e+00 1.088978e-05 1.200000e+00 1.098180e-05 1.300000e+00 1.107259e-05 1.400000e+00 1.116244e-05 1.500000e+00 1.125152e-05 1.600000e+00 1.134001e-05 1.700000e+00 1.142801e-05 1.800000e+00 1.151562e-05 1.000000e-01 1.915579e-05 2.000000e-01 3.162352e-05 3.000000e-01 3.804643e-05 4.000000e-01 4.027948e-05 5.000000e-01 4.112844e-05 6.000000e-01 4.167186e-05 7.000000e-01 4.210365e-05 8.000000e-01 4.247547e-05 9.000000e-01 4.280934e-05 1.000000e+00 4.311710e-05 1.100000e+00 4.340600e-05 1.200000e+00 4.368077e-05 1.300000e+00 4.394466e-05 1.400000e+00 4.419999e-05 1.500000e+00 4.444847e-05 1.600000e+00 4.469138e-05 1.700000e+00 4.492972e-05 1.800000e+00 4.516425e-05 1.000000e-01 3.081312e-05 2.000000e-01 5.431708e-05 3.000000e-01 7.093942e-05 4.000000e-01 8.119792e-05 5.000000e-01 8.621101e-05 6.000000e-01 8.839296e-05 7.000000e-01 8.966232e-05 8.000000e-01 9.060333e-05 9.000000e-01 9.137545e-05 1.000000e+00 9.204253e-05 1.100000e+00 9.263794e-05 1.200000e+00 9.318169e-05 1.300000e+00 9.368680e-05 1.400000e+00 9.416218e-05 1.500000e+00 9.461417e-05 1.600000e+00 9.504743e-05 1.700000e+00 9.546543e-05 1.800000e+00 9.587085e-05 1.000000e-01 4.157953e-05 2.000000e-01 7.549915e-05 3.000000e-01 1.021663e-04 4.000000e-01 1.219807e-04 5.000000e-01 1.353940e-04 6.000000e-01 1.431927e-04 7.000000e-01 1.471662e-04 8.000000e-01 1.494559e-04 9.000000e-01 1.510835e-04 1.000000e+00 1.523765e-04 1.100000e+00 1.534644e-04 1.200000e+00 1.544133e-04 1.300000e+00 1.552624e-04 1.400000e+00 1.560372e-04 1.500000e+00 1.567549e-04 1.600000e+00 1.574277e-04 1.700000e+00 1.580647e-04 1.800000e+00 1.586724e-04 1.000000e-01 5.169376e-05 2.000000e-01 9.548900e-05 3.000000e-01 1.317862e-04 4.000000e-01 1.609658e-04 5.000000e-01 1.834000e-04 6.000000e-01 1.994949e-04 7.000000e-01 2.098652e-04 8.000000e-01 2.158346e-04 9.000000e-01 2.193921e-04 1.000000e+00 2.218717e-04 1.100000e+00 2.237996e-04 1.200000e+00 2.253913e-04 1.300000e+00 2.267565e-04 1.400000e+00 2.279597e-04 1.500000e+00 2.290423e-04 1.600000e+00 2.300325e-04 1.700000e+00 2.309503e-04 1.800000e+00 2.318102e-04 tmpk8ny_4pz/tests/bsim3/nmos/reference/acVd.standard0000644000175000017500000000506413546075722022655 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 0.1 9.197326e-05 8.832494e-04 1.59415043162319e-14 1.45702039449463e-14 0.2 1.809932e-04 7.204108e-04 1.6723704528016e-14 1.35352036647155e-14 0.3 2.670126e-04 5.697348e-04 1.76161047696372e-14 1.21475032889895e-14 0.4 3.499147e-04 4.303937e-04 1.85957050348683e-14 1.03204027942941e-14 0.5 4.291839e-04 3.024390e-04 1.95405052906771e-14 8.17189221257548e-15 0.6 5.021880e-04 1.897544e-04 2.02504054828856e-14 6.34997171928255e-15 0.7 5.593921e-04 1.073961e-04 2.04996055503577e-14 5.40383146311095e-15 0.8 5.931142e-04 6.445546e-05 2.0572905570204e-14 5.04490136592906e-15 0.9 6.116821e-04 4.406523e-05 2.05919055753483e-14 4.91050132953966e-15 1 6.230697e-04 3.312871e-05 2.05960055764584e-14 4.85362131413915e-15 1.1 6.307841e-04 2.656354e-05 2.05958055764042e-14 4.82563130656073e-15 1.2 6.363974e-04 2.230177e-05 2.05943055759981e-14 4.80923130212036e-15 1.3 6.407039e-04 1.937476e-05 2.05925055755107e-14 4.79704129881986e-15 1.4 6.441459e-04 1.727656e-05 2.05906055749963e-14 4.78451129542731e-15 1.5 6.469879e-04 1.572084e-05 2.05887055744819e-14 4.76658129057268e-15 1.6 6.493976e-04 1.453532e-05 2.05868055739674e-14 4.73420128180566e-15 1.7 6.514861e-04 1.361116e-05 2.05847055733989e-14 4.6699712644151e-15 1.8 6.533298e-04 1.287682e-05 2.0582205572722e-14 4.55132123229008e-15 0.1 4.908203e-05 5.068839e-04 1.57186042558807e-14 1.45914039506863e-14 0.2 9.723729e-05 4.263406e-04 1.6491804465228e-14 1.35828036776034e-14 0.3 1.444299e-04 3.498845e-04 1.73731047038439e-14 1.22429033148195e-14 0.4 1.906053e-04 2.773355e-04 1.83459049672338e-14 1.04855028389956e-14 0.5 2.356239e-04 2.086950e-04 1.93078052276725e-14 8.38962227152684e-15 0.6 2.789607e-04 1.446514e-04 2.00782054362617e-14 6.52038176542182e-15 0.7 3.183374e-04 8.875500e-05 2.0371505515674e-14 5.48285148450596e-15 0.8 3.474010e-04 5.050424e-05 2.04636055406105e-14 5.07494137406252e-15 0.9 3.635099e-04 3.222943e-05 2.04890055474877e-14 4.9222113327102e-15 1 3.725270e-04 2.372808e-05 2.04953055491934e-14 4.85860131548751e-15 1.1 3.784469e-04 1.894379e-05 2.04960055493829e-14 4.82788130716993e-15 1.2 3.827604e-04 1.586410e-05 2.04951055491393e-14 4.81024130239382e-15 1.3 3.860995e-04 1.372520e-05 2.04935055487061e-14 4.79741129892004e-15 1.4 3.887909e-04 1.216663e-05 2.04919055482728e-14 4.7844912954219e-15 1.5 3.910260e-04 1.099145e-05 2.04902055478126e-14 4.76623129047792e-15 1.6 3.929268e-04 1.008178e-05 2.04885055473523e-14 4.73341128159176e-15 1.7 3.945751e-04 9.362519e-06 2.04867055468649e-14 4.66844126400084e-15 1.8 3.960278e-04 8.783696e-06 2.04846055462963e-14 4.5488212316132e-15 tmpk8ny_4pz/tests/bsim3/nmos/qaSpec0000644000175000017500000001370413546075722017457 0ustar carstencarsten // // Test specification for bsim3 (version 3.3.0) // // // Simulator specific information // These arguments are added to the model card // specification to invoke the desired model in // different simulators (which can have different // names or levels for the same model) and to switch // between nType and pType polarities. // It is assumed that there are no polarity specific // parameters. // `ifdef spice nTypeSelectionArguments nmos level=7 version=3.2.4 pTypeSelectionArguments pmos level=7 version=3.2.4 `endif `ifdef ngspice nTypeSelectionArguments nmos level=8 version=3.3.0 pTypeSelectionArguments pmos level=8 version=3.3.0 `endif `ifdef hspice nTypeSelectionArguments nmos level=53 version=3.3.0 pTypeSelectionArguments pmos level=53 version=3.3.0 `endif // // General test-independent information // keyLetter m pins d g s b linearScale w l ps pd areaScale as ad temperature 27 -50 150 checkPolarity no symmetricPins d s scaleParameters m // // Specific tests // test dcSweep_lw1 biases V(s)=0 V(b)=0 biasList V(g)=0.2,0.4,0.6,0.8,1.0,1.2,1.4,1.6,1.8 biasSweep V(d)=0.1,1.8,0.1 outputs I(d) instanceParameters w=10.0e-06 l=1.0e-06 modelParameters parameters/nmosParameters test dcSweep_lw1_vb1 biases V(s)=0 V(b)=-0.2 biasList V(g)=0.2,0.4,0.6,0.8,1.0,1.2,1.4,1.6,1.8 biasSweep V(d)=0.1,1.8,0.1 outputs I(d) instanceParameters w=10.0e-06 l=1.0e-06 modelParameters parameters/nmosParameters test dcSweep_lw2 biases V(s)=0 V(b)=0 biasList V(g)=0.2,0.4,0.6,0.8,1.0,1.2,1.4,1.6,1.8 biasSweep V(d)=0.1,1.8,0.1 outputs I(d) instanceParameters w=10.0e-06 l=0.2e-06 modelParameters parameters/nmosParameters test dcSweep_lw3 biases V(s)=0 V(b)=0 biasList V(g)=0.2,0.4,0.6,0.8,1.0,1.2,1.4,1.6,1.8 biasSweep V(d)=0.1,1.8,0.1 outputs I(d) instanceParameters w=1.0e-06 l=0.2e-06 modelParameters parameters/nmosParameters test dcSweep_lw4 biases V(s)=0 V(b)=0 biasList V(g)=0.2,0.4,0.6,0.8,1.0,1.2,1.4,1.6,1.8 biasSweep V(d)=0.1,1.8,0.1 outputs I(d) instanceParameters w=1.0e-06 l=1.0e-06 modelParameters parameters/nmosParameters test dcSweep_nrd_nrs biases V(s)=0 V(b)=0 biasList V(g)=0.2,0.4,0.6,0.8,1.0,1.2,1.4,1.6,1.8 biasSweep V(d)=0.1,1.8,0.1 outputs I(d) instanceParameters w=10.0e-06 l=1.0e-06 nrd=2.0 nrs=2.0 modelParameters parameters/nmosParameters test acVd temperature 27 150 biases V(s)=0 V(b)=0 V(g)=1.8 biasSweep V(d)=0.1,1.8,0.1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters w=10.0e-06 l=1.0e-06 modelParameters parameters/nmosParameters test acFreq temperature 27 biases V(s)=0 V(b)=0 V(d)=1.8 V(g)=1.8 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-06 l=1.0e-06 modelParameters parameters/nmosParameters test acFreq_mobmod temperature 27 biases V(s)=0 V(b)=0 V(d)=1.8 V(g)=1.8 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-06 l=1.0e-06 modelParameters parameters/nmosParameters modelParameters mobmod=2 test acFreq_capmod temperature 27 biases V(s)=0 V(b)=0 V(d)=1.8 V(g)=1.8 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-06 l=1.0e-06 modelParameters parameters/nmosParameters modelParameters capmod=1 test acFreq_acnqsmod temperature 27 biases V(s)=0 V(b)=0 V(d)=1.8 V(g)=1.8 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-06 l=1.0e-06 modelParameters parameters/nmosParameters modelParameters acnqsmod=1 test acFreq_xpart temperature 27 biases V(s)=0 V(b)=0 V(d)=1.8 V(g)=1.8 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-06 l=1.0e-06 modelParameters parameters/nmosParameters modelParameters xpart=1 test noise1 temperature 27 biases V(s)=0 V(b)=0 V(d)=1.6 biasList V(g)=1.2,1.4,1.6 freq dec 10 1e3 1e8 outputs N(d) instanceParameters w=10.0e-06 l=0.2e-06 modelParameters parameters/nmosParameters modelParameters noimod=1 kf=1e-30 af=1.2 ef=1.1 test noise2 temperature 27 biases V(s)=0 V(b)=0 V(d)=1.6 biasList V(g)=1.2,1.4,1.6 freq dec 10 1e3 1e8 outputs N(d) instanceParameters w=10.0e-06 l=0.2e-06 modelParameters parameters/nmosParameters modelParameters noimod=2 noia=1e+20 noib=5e+04 noic=-1.4e-12 em=4.1e7 ef=1.1 tmpk8ny_4pz/tests/bsim3/nmos/run0000755000175000017500000000023613546075722017046 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmpk8ny_4pz/tests/bsim3/pmos/0000755000175000017500000000000013546075722016315 5ustar carstencarstentmpk8ny_4pz/tests/bsim3/pmos/parameters/0000755000175000017500000000000013546075722020460 5ustar carstencarstentmpk8ny_4pz/tests/bsim3/pmos/parameters/pmosParameters0000644000175000017500000000424513546075722023412 0ustar carstencarsten+ binunit = (1) + paramchk= (1) + mobmod = (1) + capmod = (3) + acnqsmod= (0) + noimod = (1) + tnom = (27) + nch = (1.7e+17) + tox = (1.5e-08) + toxm = (1.5e-08) + wint = (0.0) + lint = (0.0) + ll = (0.0) + wl = (0.0) + lln = (1.0) + wln = (1.0) + lw = (0.0) + ww = (0.0) + lwn = (1.0) + wwn = (1.0) + lwl = (0.0) + wwl = (0.0) + xpart = (0.0) + xl = (-30e-09) + vth0 = (-0.7) + k1 = (0.5) + k2 = (0.0) + k3 = (80) + k3b = (0.0) + w0 = (2.5e-06) + dvt0 = (2.2) + dvt1 = (0.53) + dvt2 = (-0.032) + nlx = (1.74e-07) + dvt0w = (0.0) + dvt1w = (5.3e6) + dvt2w = (-0.032) + dsub = (0.56) + xj = (1.5e-07) + ngate = (0.0) + cdsc = (2.4e-04) + cdscb = (0.0) + cdscd = (0.0) + cit = (0.0) + voff = (-0.08) + nfactor = (1.0) + eta0 = (0.08) + etab = (-0.07) + vfb = (-0.55) + u0 = (250) + ua = (2.25e-09) + ub = (5.87e-19) + uc = (-4.65e-11) + vsat = (8e+04) + a0 = (1.0) + ags = (0.0) + a1 = (0.0) + a2 = (1.0) + b0 = (0.0) + b1 = (0.0) + keta = (-0.047) + dwg = (0.0) + dwb = (0.0) + pclm = (1.3) + pdiblc1 = (0.39) + pdiblc2 = (0.0086) + pdiblcb = (0.0) + drout = (0.56) + pvag = (0.0) + delta = (0.01) + pscbe1 = (4.24e+8) + pscbe2 = (1e-05) + rsh = (10.0) + rdsw = (100.0) + prwg = (0.0) + prwb = (0.0) + wr = (1.0) + alpha0 = (0.0) + alpha1 = (0.0) + beta0 = (30) + cgbo = (0.0) + cgdl = (2e-10) + cgsl = (2e-10) + ckappa = (0.6) + acde = (1.0) + moin = (15) + noff = (0.9) + voffcv = (0.02) + kt1 = (-0.11) + kt1l = (0.0) + kt2 = (-0.022) + ute = (-1.48) + ua1 = (4.31e-09) + ub1 = (-7.61e-18) + uc1 = (-5.6e-11) + prt = (0.0) + at = (3.3e+04) + ijth = (0.1) + js = (0.0001) + jsw = (0.0) + pb = (1.0) + cj = (0.0005) + mj = (0.5) + pbsw = (1.0) + cjsw = (5e-10) + mjsw = (0.33) + pbswg = (1.0) + cjswg = (5e-10) + mjswg = (0.33) + tpb = (0.005) + tcj = (0.001) + tpbsw = (0.005) + tcjsw = (0.001) + tpbswg = (0.005) + tcjswg = (0.001) + xti = (3) tmpk8ny_4pz/tests/bsim3/pmos/reference/0000755000175000017500000000000013546075722020253 5ustar carstencarstentmpk8ny_4pz/tests/bsim3/pmos/reference/dcSweep_lw4.standard0000644000175000017500000003054613546075722024165 0ustar carstencarstenV(d) I(d) 1.000000e-01 4.677786e-13 2.000000e-01 2.280776e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.461591e-13 2.000000e-01 2.409815e-12 3.000000e-01 3.750379e-11 4.000000e-01 5.817919e-10 5.000000e-01 9.026717e-09 6.000000e-01 1.400887e-07 7.000000e-01 2.173363e-06 8.000000e-01 3.345203e-05 9.000000e-01 4.617876e-04 1.000000e+00 3.295728e-03 1.100000e+00 9.453414e-03 1.200000e+00 1.725857e-02 1.300000e+00 2.579344e-02 1.400000e+00 3.471074e-02 1.500000e+00 4.385785e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256262e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453837e-13 2.000000e-01 2.400961e-12 3.000000e-01 3.741725e-11 4.000000e-01 5.810456e-10 5.000000e-01 9.020981e-09 6.000000e-01 1.400493e-07 7.000000e-01 2.173121e-06 8.000000e-01 3.345074e-05 9.000000e-01 4.617824e-04 1.000000e+00 3.295719e-03 1.100000e+00 9.453406e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400656e-12 3.000000e-01 3.741404e-11 4.000000e-01 5.810160e-10 5.000000e-01 9.020738e-09 6.000000e-01 1.400475e-07 7.000000e-01 2.173109e-06 8.000000e-01 3.345067e-05 9.000000e-01 4.617821e-04 1.000000e+00 3.295718e-03 1.100000e+00 9.453405e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400646e-12 3.000000e-01 3.741392e-11 4.000000e-01 5.810149e-10 5.000000e-01 9.020728e-09 6.000000e-01 1.400474e-07 7.000000e-01 2.173109e-06 8.000000e-01 3.345067e-05 9.000000e-01 4.617821e-04 1.000000e+00 3.295718e-03 1.100000e+00 9.453405e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400646e-12 3.000000e-01 3.741392e-11 4.000000e-01 5.810148e-10 5.000000e-01 9.020727e-09 6.000000e-01 1.400474e-07 7.000000e-01 2.173109e-06 8.000000e-01 3.345067e-05 9.000000e-01 4.617820e-04 1.000000e+00 3.295718e-03 1.100000e+00 9.453405e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400646e-12 3.000000e-01 3.741392e-11 4.000000e-01 5.810148e-10 5.000000e-01 9.020727e-09 6.000000e-01 1.400474e-07 7.000000e-01 2.173109e-06 8.000000e-01 3.345067e-05 9.000000e-01 4.617820e-04 1.000000e+00 3.295718e-03 1.100000e+00 9.453405e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400646e-12 3.000000e-01 3.741392e-11 4.000000e-01 5.810148e-10 5.000000e-01 9.020727e-09 6.000000e-01 1.400474e-07 7.000000e-01 2.173109e-06 8.000000e-01 3.345067e-05 9.000000e-01 4.617820e-04 1.000000e+00 3.295718e-03 1.100000e+00 9.453405e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400646e-12 3.000000e-01 3.741392e-11 4.000000e-01 5.810148e-10 5.000000e-01 9.020727e-09 6.000000e-01 1.400474e-07 7.000000e-01 2.173109e-06 8.000000e-01 3.345067e-05 9.000000e-01 4.617820e-04 1.000000e+00 3.295718e-03 1.100000e+00 9.453405e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400646e-12 3.000000e-01 3.741392e-11 4.000000e-01 5.810148e-10 5.000000e-01 9.020727e-09 6.000000e-01 1.400474e-07 7.000000e-01 2.173109e-06 8.000000e-01 3.345067e-05 9.000000e-01 4.617820e-04 1.000000e+00 3.295718e-03 1.100000e+00 9.453405e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 tmpk8ny_4pz/tests/bsim3/pmos/reference/acFreq_acnqsmod.standard0000644000175000017500000000712613546075722025071 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 1258.925 2.8534338139181e-14 3.36668788291387e-15 4.86662611418904e-16 1584.893 2.85343308122805e-14 3.36668066683295e-15 4.86662396804049e-16 1995.262 2.85343294690791e-14 3.36668610542927e-15 4.86662218670296e-16 2511.886 2.85343295784898e-14 3.36668532416538e-15 4.86662400283728e-16 3162.278 2.85343249213843e-14 3.36668168935014e-15 4.86662290482535e-16 3981.072 2.85343261031726e-14 3.36668382675913e-15 4.86663107007502e-16 5011.872 2.85343298679819e-14 3.3666957000617e-15 4.86663915073295e-16 6309.573 2.85343261547742e-14 3.36669537771815e-15 4.86663674237413e-16 7943.282 2.85343281304704e-14 3.36667976509521e-15 4.86662628528703e-16 10000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 12589.25 2.8534338139181e-14 3.36668788291387e-15 4.86662611418904e-16 15848.93 2.85343308122805e-14 3.36668066683296e-15 4.86662396804049e-16 19952.62 2.85343294690791e-14 3.36668610542927e-15 4.86662218670296e-16 25118.86 2.85343295784898e-14 3.36668532416538e-15 4.86662400283728e-16 31622.78 2.85343249213843e-14 3.36668168935014e-15 4.86662290482535e-16 39810.72 2.85343261031726e-14 3.36668382675913e-15 4.86663107007502e-16 50118.72 2.85343298679819e-14 3.3666957000617e-15 4.86663915073295e-16 63095.73 2.85343261547742e-14 3.36669537771815e-15 4.86663674237413e-16 79432.82 2.85343281304704e-14 3.36667976509521e-15 4.86662628528703e-16 100000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 125892.5 2.8534338139181e-14 3.36668788291386e-15 4.86662611418904e-16 158489.3 2.85343308122805e-14 3.36668066683296e-15 4.86662396804049e-16 199526.2 2.85343294690791e-14 3.36668610542927e-15 4.86662218670296e-16 251188.6 2.85343295784898e-14 3.36668532416538e-15 4.86662400283728e-16 316227.8 2.85343249213843e-14 3.36668168935014e-15 4.86662290482535e-16 398107.2 2.85343261031726e-14 3.36668382675913e-15 4.86663107007502e-16 501187.2 2.85343298679819e-14 3.3666957000617e-15 4.86663915073295e-16 630957.3 2.85343261547742e-14 3.36669537771815e-15 4.86663674237413e-16 794328.2 2.85343281304704e-14 3.36667976509521e-15 4.86662628528704e-16 1000000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 1258925 2.8534338139181e-14 3.36668788291386e-15 4.86662611418904e-16 1584893 2.85343308122805e-14 3.36668066683296e-15 4.86662396804049e-16 1995262 2.85343294690791e-14 3.36668610542927e-15 4.86662218670296e-16 2511886 2.85343295784898e-14 3.36668532416538e-15 4.86662400283728e-16 3162278 2.85343249213843e-14 3.36668168935014e-15 4.86662290482535e-16 3981072 2.85343261031726e-14 3.36668382675913e-15 4.86663107007502e-16 5011872 2.85343298679819e-14 3.3666957000617e-15 4.86663915073295e-16 6309573 2.85343261547742e-14 3.36669537771815e-15 4.86663674237413e-16 7943282 2.85343281304704e-14 3.36667976509521e-15 4.86662628528703e-16 10000000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 12589250 2.8534338139181e-14 3.36668788291386e-15 4.86662611418904e-16 15848930 2.85343308122805e-14 3.36668066683296e-15 4.86662396804049e-16 19952620 2.85343294690791e-14 3.36668610542927e-15 4.86662218670296e-16 25118860 2.85343295784898e-14 3.36668532416538e-15 4.86662400283728e-16 31622780 2.85343249213843e-14 3.36668168935014e-15 4.86662290482535e-16 39810720 2.85343261031726e-14 3.36668382675913e-15 4.86663107007502e-16 50118720 2.85343298679819e-14 3.3666957000617e-15 4.86663915073295e-16 63095730 2.85343261547742e-14 3.36669537771815e-15 4.86663674237413e-16 79432820 2.85343281304704e-14 3.36667976509521e-15 4.86662628528703e-16 100000000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 tmpk8ny_4pz/tests/bsim3/pmos/reference/acFreq_mobmod.standard0000644000175000017500000000712613546075722024541 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 1258.925 2.8534338139181e-14 3.36668788291387e-15 4.86662611418904e-16 1584.893 2.85343308122805e-14 3.36668066683295e-15 4.86662396804049e-16 1995.262 2.85343294690791e-14 3.36668610542927e-15 4.86662218670296e-16 2511.886 2.85343295784898e-14 3.36668532416538e-15 4.86662400283728e-16 3162.278 2.85343249213843e-14 3.36668168935014e-15 4.86662290482535e-16 3981.072 2.85343261031726e-14 3.36668382675913e-15 4.86663107007502e-16 5011.872 2.85343298679819e-14 3.3666957000617e-15 4.86663915073295e-16 6309.573 2.85343261547742e-14 3.36669537771815e-15 4.86663674237413e-16 7943.282 2.85343281304704e-14 3.36667976509521e-15 4.86662628528703e-16 10000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 12589.25 2.8534338139181e-14 3.36668788291387e-15 4.86662611418904e-16 15848.93 2.85343308122805e-14 3.36668066683296e-15 4.86662396804049e-16 19952.62 2.85343294690791e-14 3.36668610542927e-15 4.86662218670296e-16 25118.86 2.85343295784898e-14 3.36668532416538e-15 4.86662400283728e-16 31622.78 2.85343249213843e-14 3.36668168935014e-15 4.86662290482535e-16 39810.72 2.85343261031726e-14 3.36668382675913e-15 4.86663107007502e-16 50118.72 2.85343298679819e-14 3.3666957000617e-15 4.86663915073295e-16 63095.73 2.85343261547742e-14 3.36669537771815e-15 4.86663674237413e-16 79432.82 2.85343281304704e-14 3.36667976509521e-15 4.86662628528703e-16 100000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 125892.5 2.8534338139181e-14 3.36668788291386e-15 4.86662611418904e-16 158489.3 2.85343308122805e-14 3.36668066683296e-15 4.86662396804049e-16 199526.2 2.85343294690791e-14 3.36668610542927e-15 4.86662218670296e-16 251188.6 2.85343295784898e-14 3.36668532416538e-15 4.86662400283728e-16 316227.8 2.85343249213843e-14 3.36668168935014e-15 4.86662290482535e-16 398107.2 2.85343261031726e-14 3.36668382675913e-15 4.86663107007502e-16 501187.2 2.85343298679819e-14 3.3666957000617e-15 4.86663915073295e-16 630957.3 2.85343261547742e-14 3.36669537771815e-15 4.86663674237413e-16 794328.2 2.85343281304704e-14 3.36667976509521e-15 4.86662628528704e-16 1000000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 1258925 2.8534338139181e-14 3.36668788291386e-15 4.86662611418904e-16 1584893 2.85343308122805e-14 3.36668066683296e-15 4.86662396804049e-16 1995262 2.85343294690791e-14 3.36668610542927e-15 4.86662218670296e-16 2511886 2.85343295784898e-14 3.36668532416538e-15 4.86662400283728e-16 3162278 2.85343249213843e-14 3.36668168935014e-15 4.86662290482535e-16 3981072 2.85343261031726e-14 3.36668382675913e-15 4.86663107007502e-16 5011872 2.85343298679819e-14 3.3666957000617e-15 4.86663915073295e-16 6309573 2.85343261547742e-14 3.36669537771815e-15 4.86663674237413e-16 7943282 2.85343281304704e-14 3.36667976509521e-15 4.86662628528703e-16 10000000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 12589250 2.8534338139181e-14 3.36668788291386e-15 4.86662611418904e-16 15848930 2.85343308122805e-14 3.36668066683296e-15 4.86662396804049e-16 19952620 2.85343294690791e-14 3.36668610542927e-15 4.86662218670296e-16 25118860 2.85343295784898e-14 3.36668532416538e-15 4.86662400283728e-16 31622780 2.85343249213843e-14 3.36668168935014e-15 4.86662290482535e-16 39810720 2.85343261031726e-14 3.36668382675913e-15 4.86663107007502e-16 50118720 2.85343298679819e-14 3.3666957000617e-15 4.86663915073295e-16 63095730 2.85343261547742e-14 3.36669537771815e-15 4.86663674237413e-16 79432820 2.85343281304704e-14 3.36667976509521e-15 4.86662628528703e-16 100000000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 tmpk8ny_4pz/tests/bsim3/pmos/reference/dcSweep_nrd_nrs.standard0000644000175000017500000003054613546075722025124 0ustar carstencarstenV(d) I(d) 1.000000e-01 4.682088e-13 2.000000e-01 2.281971e-11 3.000000e-01 1.090203e-09 4.000000e-01 5.206715e-08 5.000000e-01 2.482297e-06 6.000000e-01 1.091806e-04 7.000000e-01 1.620644e-03 8.000000e-01 5.130399e-03 9.000000e-01 9.353710e-03 1.000000e+00 1.384644e-02 1.100000e+00 1.847359e-02 1.200000e+00 2.318009e-02 1.300000e+00 2.793863e-02 1.400000e+00 3.273379e-02 1.500000e+00 3.755607e-02 1.600000e+00 4.239921e-02 1.700000e+00 4.725888e-02 1.800000e+00 5.213197e-02 1.000000e-01 4.677803e-13 2.000000e-01 2.280785e-11 3.000000e-01 1.089934e-09 4.000000e-01 5.206201e-08 5.000000e-01 2.482213e-06 6.000000e-01 1.091796e-04 7.000000e-01 1.620641e-03 8.000000e-01 5.130396e-03 9.000000e-01 9.353708e-03 1.000000e+00 1.384644e-02 1.100000e+00 1.847359e-02 1.200000e+00 2.318009e-02 1.300000e+00 2.793863e-02 1.400000e+00 3.273379e-02 1.500000e+00 3.755607e-02 1.600000e+00 4.239921e-02 1.700000e+00 4.725888e-02 1.800000e+00 5.213197e-02 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206195e-08 5.000000e-01 2.482212e-06 6.000000e-01 1.091796e-04 7.000000e-01 1.620641e-03 8.000000e-01 5.130396e-03 9.000000e-01 9.353708e-03 1.000000e+00 1.384644e-02 1.100000e+00 1.847359e-02 1.200000e+00 2.318009e-02 1.300000e+00 2.793863e-02 1.400000e+00 3.273379e-02 1.500000e+00 3.755607e-02 1.600000e+00 4.239921e-02 1.700000e+00 4.725888e-02 1.800000e+00 5.213197e-02 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206195e-08 5.000000e-01 2.482212e-06 6.000000e-01 1.091796e-04 7.000000e-01 1.620641e-03 8.000000e-01 5.130396e-03 9.000000e-01 9.353708e-03 1.000000e+00 1.384644e-02 1.100000e+00 1.847359e-02 1.200000e+00 2.318009e-02 1.300000e+00 2.793863e-02 1.400000e+00 3.273379e-02 1.500000e+00 3.755607e-02 1.600000e+00 4.239921e-02 1.700000e+00 4.725888e-02 1.800000e+00 5.213197e-02 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206195e-08 5.000000e-01 2.482212e-06 6.000000e-01 1.091796e-04 7.000000e-01 1.620641e-03 8.000000e-01 5.130396e-03 9.000000e-01 9.353708e-03 1.000000e+00 1.384644e-02 1.100000e+00 1.847359e-02 1.200000e+00 2.318009e-02 1.300000e+00 2.793863e-02 1.400000e+00 3.273379e-02 1.500000e+00 3.755607e-02 1.600000e+00 4.239921e-02 1.700000e+00 4.725888e-02 1.800000e+00 5.213197e-02 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206195e-08 5.000000e-01 2.482212e-06 6.000000e-01 1.091796e-04 7.000000e-01 1.620641e-03 8.000000e-01 5.130396e-03 9.000000e-01 9.353708e-03 1.000000e+00 1.384644e-02 1.100000e+00 1.847359e-02 1.200000e+00 2.318009e-02 1.300000e+00 2.793863e-02 1.400000e+00 3.273379e-02 1.500000e+00 3.755607e-02 1.600000e+00 4.239921e-02 1.700000e+00 4.725888e-02 1.800000e+00 5.213197e-02 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206195e-08 5.000000e-01 2.482212e-06 6.000000e-01 1.091796e-04 7.000000e-01 1.620641e-03 8.000000e-01 5.130396e-03 9.000000e-01 9.353708e-03 1.000000e+00 1.384644e-02 1.100000e+00 1.847359e-02 1.200000e+00 2.318009e-02 1.300000e+00 2.793863e-02 1.400000e+00 3.273379e-02 1.500000e+00 3.755607e-02 1.600000e+00 4.239921e-02 1.700000e+00 4.725888e-02 1.800000e+00 5.213197e-02 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206195e-08 5.000000e-01 2.482212e-06 6.000000e-01 1.091796e-04 7.000000e-01 1.620641e-03 8.000000e-01 5.130396e-03 9.000000e-01 9.353708e-03 1.000000e+00 1.384644e-02 1.100000e+00 1.847359e-02 1.200000e+00 2.318009e-02 1.300000e+00 2.793863e-02 1.400000e+00 3.273379e-02 1.500000e+00 3.755607e-02 1.600000e+00 4.239921e-02 1.700000e+00 4.725888e-02 1.800000e+00 5.213197e-02 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206195e-08 5.000000e-01 2.482212e-06 6.000000e-01 1.091796e-04 7.000000e-01 1.620641e-03 8.000000e-01 5.130396e-03 9.000000e-01 9.353708e-03 1.000000e+00 1.384644e-02 1.100000e+00 1.847359e-02 1.200000e+00 2.318009e-02 1.300000e+00 2.793863e-02 1.400000e+00 3.273379e-02 1.500000e+00 3.755607e-02 1.600000e+00 4.239921e-02 1.700000e+00 4.725888e-02 1.800000e+00 5.213197e-02 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964579e-08 4.000000e-01 1.069818e-05 5.000000e-01 8.286498e-04 6.000000e-01 4.255542e-03 7.000000e-01 8.581224e-03 8.000000e-01 1.316941e-02 9.000000e-01 1.787565e-02 1.000000e+00 2.264813e-02 1.100000e+00 2.746281e-02 1.200000e+00 3.230663e-02 1.300000e+00 3.717176e-02 1.400000e+00 4.205313e-02 1.500000e+00 4.694729e-02 1.600000e+00 5.185175e-02 1.700000e+00 5.676472e-02 1.800000e+00 6.168480e-02 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964579e-08 4.000000e-01 1.069818e-05 5.000000e-01 8.286498e-04 6.000000e-01 4.255542e-03 7.000000e-01 8.581224e-03 8.000000e-01 1.316941e-02 9.000000e-01 1.787565e-02 1.000000e+00 2.264813e-02 1.100000e+00 2.746281e-02 1.200000e+00 3.230663e-02 1.300000e+00 3.717176e-02 1.400000e+00 4.205313e-02 1.500000e+00 4.694729e-02 1.600000e+00 5.185175e-02 1.700000e+00 5.676472e-02 1.800000e+00 6.168480e-02 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964579e-08 4.000000e-01 1.069818e-05 5.000000e-01 8.286498e-04 6.000000e-01 4.255542e-03 7.000000e-01 8.581224e-03 8.000000e-01 1.316941e-02 9.000000e-01 1.787565e-02 1.000000e+00 2.264813e-02 1.100000e+00 2.746281e-02 1.200000e+00 3.230663e-02 1.300000e+00 3.717176e-02 1.400000e+00 4.205313e-02 1.500000e+00 4.694729e-02 1.600000e+00 5.185175e-02 1.700000e+00 5.676472e-02 1.800000e+00 6.168480e-02 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964579e-08 4.000000e-01 1.069818e-05 5.000000e-01 8.286498e-04 6.000000e-01 4.255542e-03 7.000000e-01 8.581224e-03 8.000000e-01 1.316941e-02 9.000000e-01 1.787565e-02 1.000000e+00 2.264813e-02 1.100000e+00 2.746281e-02 1.200000e+00 3.230663e-02 1.300000e+00 3.717176e-02 1.400000e+00 4.205313e-02 1.500000e+00 4.694729e-02 1.600000e+00 5.185175e-02 1.700000e+00 5.676472e-02 1.800000e+00 6.168480e-02 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964579e-08 4.000000e-01 1.069818e-05 5.000000e-01 8.286498e-04 6.000000e-01 4.255542e-03 7.000000e-01 8.581224e-03 8.000000e-01 1.316941e-02 9.000000e-01 1.787565e-02 1.000000e+00 2.264813e-02 1.100000e+00 2.746281e-02 1.200000e+00 3.230663e-02 1.300000e+00 3.717176e-02 1.400000e+00 4.205313e-02 1.500000e+00 4.694729e-02 1.600000e+00 5.185175e-02 1.700000e+00 5.676472e-02 1.800000e+00 6.168480e-02 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964579e-08 4.000000e-01 1.069818e-05 5.000000e-01 8.286498e-04 6.000000e-01 4.255542e-03 7.000000e-01 8.581224e-03 8.000000e-01 1.316941e-02 9.000000e-01 1.787565e-02 1.000000e+00 2.264813e-02 1.100000e+00 2.746281e-02 1.200000e+00 3.230663e-02 1.300000e+00 3.717176e-02 1.400000e+00 4.205313e-02 1.500000e+00 4.694729e-02 1.600000e+00 5.185175e-02 1.700000e+00 5.676472e-02 1.800000e+00 6.168480e-02 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964579e-08 4.000000e-01 1.069818e-05 5.000000e-01 8.286498e-04 6.000000e-01 4.255542e-03 7.000000e-01 8.581224e-03 8.000000e-01 1.316941e-02 9.000000e-01 1.787565e-02 1.000000e+00 2.264813e-02 1.100000e+00 2.746281e-02 1.200000e+00 3.230663e-02 1.300000e+00 3.717176e-02 1.400000e+00 4.205313e-02 1.500000e+00 4.694729e-02 1.600000e+00 5.185175e-02 1.700000e+00 5.676472e-02 1.800000e+00 6.168480e-02 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964579e-08 4.000000e-01 1.069818e-05 5.000000e-01 8.286498e-04 6.000000e-01 4.255542e-03 7.000000e-01 8.581224e-03 8.000000e-01 1.316941e-02 9.000000e-01 1.787565e-02 1.000000e+00 2.264813e-02 1.100000e+00 2.746281e-02 1.200000e+00 3.230663e-02 1.300000e+00 3.717176e-02 1.400000e+00 4.205313e-02 1.500000e+00 4.694729e-02 1.600000e+00 5.185175e-02 1.700000e+00 5.676472e-02 1.800000e+00 6.168480e-02 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964579e-08 4.000000e-01 1.069818e-05 5.000000e-01 8.286498e-04 6.000000e-01 4.255542e-03 7.000000e-01 8.581224e-03 8.000000e-01 1.316941e-02 9.000000e-01 1.787565e-02 1.000000e+00 2.264813e-02 1.100000e+00 2.746281e-02 1.200000e+00 3.230663e-02 1.300000e+00 3.717176e-02 1.400000e+00 4.205313e-02 1.500000e+00 4.694729e-02 1.600000e+00 5.185175e-02 1.700000e+00 5.676472e-02 1.800000e+00 6.168480e-02 1.000000e-01 4.495336e-13 2.000000e-01 5.635117e-12 3.000000e-01 6.686373e-11 4.000000e-01 8.166647e-10 5.000000e-01 1.067931e-08 6.000000e-01 1.502216e-07 7.000000e-01 2.226076e-06 8.000000e-01 3.340285e-05 9.000000e-01 4.177664e-04 1.000000e+00 2.302997e-03 1.100000e+00 5.662187e-03 1.200000e+00 9.683561e-03 1.300000e+00 1.401004e-02 1.400000e+00 1.850283e-02 1.500000e+00 2.309832e-02 1.600000e+00 2.776292e-02 1.700000e+00 3.247696e-02 1.800000e+00 3.722802e-02 1.000000e-01 1.551675e-13 2.000000e-01 2.512719e-12 3.000000e-01 3.851001e-11 4.000000e-01 5.904767e-10 5.000000e-01 9.093496e-09 6.000000e-01 1.405426e-07 7.000000e-01 2.174877e-06 8.000000e-01 3.316678e-05 9.000000e-01 4.170321e-04 1.000000e+00 2.302131e-03 1.100000e+00 5.661503e-03 1.200000e+00 9.683021e-03 1.300000e+00 1.400959e-02 1.400000e+00 1.850245e-02 1.500000e+00 2.309799e-02 1.600000e+00 2.776263e-02 1.700000e+00 3.247669e-02 1.800000e+00 3.722777e-02 1.000000e-01 1.456725e-13 2.000000e-01 2.404521e-12 3.000000e-01 3.745451e-11 4.000000e-01 5.813893e-10 5.000000e-01 9.023790e-09 6.000000e-01 1.400649e-07 7.000000e-01 2.171969e-06 8.000000e-01 3.315156e-05 9.000000e-01 4.169786e-04 1.000000e+00 2.302057e-03 1.100000e+00 5.661438e-03 1.200000e+00 9.682964e-03 1.300000e+00 1.400954e-02 1.400000e+00 1.850241e-02 1.500000e+00 2.309795e-02 1.600000e+00 2.776259e-02 1.700000e+00 3.247666e-02 1.800000e+00 3.722774e-02 1.000000e-01 1.453664e-13 2.000000e-01 2.400779e-12 3.000000e-01 3.741542e-11 4.000000e-01 5.810295e-10 5.000000e-01 9.020835e-09 6.000000e-01 1.400430e-07 7.000000e-01 2.171823e-06 8.000000e-01 3.315070e-05 9.000000e-01 4.169752e-04 1.000000e+00 2.302052e-03 1.100000e+00 5.661433e-03 1.200000e+00 9.682960e-03 1.300000e+00 1.400954e-02 1.400000e+00 1.850240e-02 1.500000e+00 2.309795e-02 1.600000e+00 2.776259e-02 1.700000e+00 3.247666e-02 1.800000e+00 3.722774e-02 1.000000e-01 1.453568e-13 2.000000e-01 2.400649e-12 3.000000e-01 3.741398e-11 4.000000e-01 5.810153e-10 5.000000e-01 9.020710e-09 6.000000e-01 1.400420e-07 7.000000e-01 2.171816e-06 8.000000e-01 3.315066e-05 9.000000e-01 4.169750e-04 1.000000e+00 2.302052e-03 1.100000e+00 5.661433e-03 1.200000e+00 9.682960e-03 1.300000e+00 1.400954e-02 1.400000e+00 1.850240e-02 1.500000e+00 2.309795e-02 1.600000e+00 2.776259e-02 1.700000e+00 3.247666e-02 1.800000e+00 3.722774e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400646e-12 3.000000e-01 3.741392e-11 4.000000e-01 5.810148e-10 5.000000e-01 9.020705e-09 6.000000e-01 1.400420e-07 7.000000e-01 2.171816e-06 8.000000e-01 3.315065e-05 9.000000e-01 4.169750e-04 1.000000e+00 2.302052e-03 1.100000e+00 5.661433e-03 1.200000e+00 9.682960e-03 1.300000e+00 1.400954e-02 1.400000e+00 1.850240e-02 1.500000e+00 2.309795e-02 1.600000e+00 2.776259e-02 1.700000e+00 3.247666e-02 1.800000e+00 3.722774e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400646e-12 3.000000e-01 3.741392e-11 4.000000e-01 5.810147e-10 5.000000e-01 9.020705e-09 6.000000e-01 1.400420e-07 7.000000e-01 2.171816e-06 8.000000e-01 3.315065e-05 9.000000e-01 4.169750e-04 1.000000e+00 2.302052e-03 1.100000e+00 5.661433e-03 1.200000e+00 9.682960e-03 1.300000e+00 1.400954e-02 1.400000e+00 1.850240e-02 1.500000e+00 2.309795e-02 1.600000e+00 2.776259e-02 1.700000e+00 3.247666e-02 1.800000e+00 3.722774e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400646e-12 3.000000e-01 3.741392e-11 4.000000e-01 5.810147e-10 5.000000e-01 9.020705e-09 6.000000e-01 1.400420e-07 7.000000e-01 2.171816e-06 8.000000e-01 3.315065e-05 9.000000e-01 4.169750e-04 1.000000e+00 2.302052e-03 1.100000e+00 5.661433e-03 1.200000e+00 9.682960e-03 1.300000e+00 1.400954e-02 1.400000e+00 1.850240e-02 1.500000e+00 2.309795e-02 1.600000e+00 2.776259e-02 1.700000e+00 3.247666e-02 1.800000e+00 3.722774e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400646e-12 3.000000e-01 3.741392e-11 4.000000e-01 5.810147e-10 5.000000e-01 9.020705e-09 6.000000e-01 1.400420e-07 7.000000e-01 2.171816e-06 8.000000e-01 3.315065e-05 9.000000e-01 4.169750e-04 1.000000e+00 2.302052e-03 1.100000e+00 5.661433e-03 1.200000e+00 9.682960e-03 1.300000e+00 1.400954e-02 1.400000e+00 1.850240e-02 1.500000e+00 2.309795e-02 1.600000e+00 2.776259e-02 1.700000e+00 3.247666e-02 1.800000e+00 3.722774e-02 tmpk8ny_4pz/tests/bsim3/pmos/reference/acFreq_capmod.standard0000644000175000017500000000712113546075722024522 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.92030540290343e-14 3.35648225684222e-15 4.98973028285125e-16 1258.925 2.92030689233605e-14 3.35647304136109e-15 4.98972254017834e-16 1584.893 2.9203067709993e-14 3.35647799560017e-15 4.98972883678327e-16 1995.262 2.92030673573361e-14 3.35647600133478e-15 4.98972573083587e-16 2511.886 2.92030641195355e-14 3.35647790976357e-15 4.98972757478809e-16 3162.278 2.9203059156594e-14 3.35647492623221e-15 4.98972814440352e-16 3981.072 2.92030566135903e-14 3.35647746601726e-15 4.9897230588107e-16 5011.872 2.92030612721537e-14 3.35647040067744e-15 4.98972381040187e-16 6309.573 2.92030743967316e-14 3.35647951177093e-15 4.98973162094807e-16 7943.282 2.92030637212042e-14 3.35648122675378e-15 4.98973005654388e-16 10000 2.92030540290343e-14 3.35648225684222e-15 4.98973028285125e-16 12589.25 2.92030689233605e-14 3.35647304136109e-15 4.98972254017834e-16 15848.93 2.9203067709993e-14 3.35647799560017e-15 4.98972883678327e-16 19952.62 2.92030673573361e-14 3.35647600133478e-15 4.98972573083587e-16 25118.86 2.92030641195355e-14 3.35647790976357e-15 4.98972757478809e-16 31622.78 2.9203059156594e-14 3.35647492623221e-15 4.98972814440352e-16 39810.72 2.92030566135903e-14 3.35647746601726e-15 4.9897230588107e-16 50118.72 2.92030612721537e-14 3.35647040067744e-15 4.98972381040187e-16 63095.73 2.92030743967316e-14 3.35647951177093e-15 4.98973162094807e-16 79432.82 2.92030637212042e-14 3.35648122675378e-15 4.98973005654388e-16 100000 2.92030540290343e-14 3.35648225684222e-15 4.98973028285125e-16 125892.5 2.92030689233605e-14 3.35647304136109e-15 4.98972254017834e-16 158489.3 2.9203067709993e-14 3.35647799560017e-15 4.98972883678327e-16 199526.2 2.92030673573361e-14 3.35647600133478e-15 4.98972573083587e-16 251188.6 2.92030641195355e-14 3.35647790976357e-15 4.98972757478809e-16 316227.8 2.9203059156594e-14 3.35647492623221e-15 4.98972814440352e-16 398107.2 2.92030566135903e-14 3.35647746601726e-15 4.9897230588107e-16 501187.2 2.92030612721537e-14 3.35647040067744e-15 4.98972381040187e-16 630957.3 2.92030743967316e-14 3.35647951177093e-15 4.98973162094807e-16 794328.2 2.92030637212042e-14 3.35648122675378e-15 4.98973005654388e-16 1000000 2.92030540290343e-14 3.35648225684222e-15 4.98973028285125e-16 1258925 2.92030689233605e-14 3.35647304136109e-15 4.98972254017834e-16 1584893 2.9203067709993e-14 3.35647799560017e-15 4.98972883678327e-16 1995262 2.92030673573361e-14 3.35647600133478e-15 4.98972573083587e-16 2511886 2.92030641195355e-14 3.35647790976357e-15 4.98972757478809e-16 3162278 2.9203059156594e-14 3.35647492623221e-15 4.98972814440352e-16 3981072 2.92030566135903e-14 3.35647746601726e-15 4.9897230588107e-16 5011872 2.92030612721537e-14 3.35647040067744e-15 4.98972381040187e-16 6309573 2.92030743967316e-14 3.35647951177093e-15 4.98973162094807e-16 7943282 2.92030637212042e-14 3.35648122675378e-15 4.98973005654388e-16 10000000 2.92030540290343e-14 3.35648225684222e-15 4.98973028285125e-16 12589250 2.92030689233605e-14 3.35647304136109e-15 4.98972254017834e-16 15848930 2.9203067709993e-14 3.35647799560017e-15 4.98972883678327e-16 19952620 2.92030673573361e-14 3.35647600133478e-15 4.98972573083587e-16 25118860 2.92030641195355e-14 3.35647790976357e-15 4.98972757478809e-16 31622780 2.9203059156594e-14 3.35647492623221e-15 4.98972814440352e-16 39810720 2.92030566135903e-14 3.35647746601726e-15 4.9897230588107e-16 50118720 2.92030612721537e-14 3.35647040067744e-15 4.98972381040187e-16 63095730 2.92030743967316e-14 3.35647951177093e-15 4.98973162094807e-16 79432820 2.92030637212042e-14 3.35648122675378e-15 4.98973005654388e-16 100000000 2.92030540290343e-14 3.35648225684222e-15 4.98973028285125e-16 tmpk8ny_4pz/tests/bsim3/pmos/reference/dcSweep_lw2.standard0000644000175000017500000003054613546075722024163 0ustar carstencarstenV(d) I(d) 1.000000e-01 8.545525e-13 2.000000e-01 3.029242e-11 3.000000e-01 1.210360e-09 4.000000e-01 5.370344e-08 5.000000e-01 2.503342e-06 6.000000e-01 1.138532e-04 7.000000e-01 2.317338e-03 8.000000e-01 8.850835e-03 9.000000e-01 1.714115e-02 1.000000e+00 2.605780e-02 1.100000e+00 3.527448e-02 1.200000e+00 4.466403e-02 1.300000e+00 5.416517e-02 1.400000e+00 6.374399e-02 1.500000e+00 7.337987e-02 1.600000e+00 8.305939e-02 1.700000e+00 9.277332e-02 1.800000e+00 1.025143e-01 1.000000e-01 4.717407e-13 2.000000e-01 2.289097e-11 3.000000e-01 1.091386e-09 4.000000e-01 5.208466e-08 5.000000e-01 2.484871e-06 6.000000e-01 1.136915e-04 7.000000e-01 2.316897e-03 8.000000e-01 8.850463e-03 9.000000e-01 1.714085e-02 1.000000e+00 2.605755e-02 1.100000e+00 3.527426e-02 1.200000e+00 4.466384e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374383e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305925e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.678185e-13 2.000000e-01 2.280868e-11 3.000000e-01 1.089950e-09 4.000000e-01 5.206328e-08 5.000000e-01 2.484597e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677786e-13 2.000000e-01 2.280776e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 1.804617e-12 2.000000e-01 3.289462e-10 3.000000e-01 5.964978e-08 4.000000e-01 1.075761e-05 5.000000e-01 1.104593e-03 6.000000e-01 7.437504e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288958e-10 3.000000e-01 5.964765e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 6.235867e-11 2.000000e-01 5.146858e-10 3.000000e-01 3.661351e-09 4.000000e-01 2.299970e-08 5.000000e-01 1.296483e-07 6.000000e-01 7.066256e-07 7.000000e-01 4.542513e-06 8.000000e-01 4.194447e-05 9.000000e-01 4.828374e-04 1.000000e+00 3.318505e-03 1.100000e+00 9.469252e-03 1.200000e+00 1.726999e-02 1.300000e+00 2.580229e-02 1.400000e+00 3.471798e-02 1.500000e+00 4.386398e-02 1.600000e+00 5.316202e-02 1.700000e+00 6.256734e-02 1.800000e+00 7.205213e-02 1.000000e-01 2.567689e-12 2.000000e-01 2.365133e-11 3.000000e-01 1.987188e-10 4.000000e-01 1.668683e-09 5.000000e-01 1.555629e-08 6.000000e-01 1.749213e-07 7.000000e-01 2.337408e-06 8.000000e-01 3.413115e-05 9.000000e-01 4.639762e-04 1.000000e+00 3.298882e-03 1.100000e+00 9.456014e-03 1.200000e+00 1.726064e-02 1.300000e+00 2.579515e-02 1.400000e+00 3.471220e-02 1.500000e+00 4.385914e-02 1.600000e+00 5.315785e-02 1.700000e+00 6.256367e-02 1.800000e+00 7.204886e-02 1.000000e-01 2.393918e-13 2.000000e-01 3.275234e-12 3.000000e-01 4.445445e-11 4.000000e-01 6.315153e-10 5.000000e-01 9.346129e-09 6.000000e-01 1.419385e-07 7.000000e-01 2.183015e-06 8.000000e-01 3.349673e-05 9.000000e-01 4.619462e-04 1.000000e+00 3.295975e-03 1.100000e+00 9.453630e-03 1.200000e+00 1.725875e-02 1.300000e+00 2.579359e-02 1.400000e+00 3.471087e-02 1.500000e+00 4.385797e-02 1.600000e+00 5.315680e-02 1.700000e+00 6.256272e-02 1.800000e+00 7.204799e-02 1.000000e-01 1.490041e-13 2.000000e-01 2.436579e-12 3.000000e-01 3.771992e-11 4.000000e-01 5.833352e-10 5.000000e-01 9.036546e-09 6.000000e-01 1.401450e-07 7.000000e-01 2.173656e-06 8.000000e-01 3.345343e-05 9.000000e-01 4.617929e-04 1.000000e+00 3.295737e-03 1.100000e+00 9.453422e-03 1.200000e+00 1.725858e-02 1.300000e+00 2.579344e-02 1.400000e+00 3.471074e-02 1.500000e+00 4.385785e-02 1.600000e+00 5.315670e-02 1.700000e+00 6.256262e-02 1.800000e+00 7.204790e-02 1.000000e-01 1.454965e-13 2.000000e-01 2.402120e-12 3.000000e-01 3.742721e-11 4.000000e-01 5.811212e-10 5.000000e-01 9.021492e-09 6.000000e-01 1.400524e-07 7.000000e-01 2.173138e-06 8.000000e-01 3.345082e-05 9.000000e-01 4.617827e-04 1.000000e+00 3.295719e-03 1.100000e+00 9.453406e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256262e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453612e-13 2.000000e-01 2.400705e-12 3.000000e-01 3.741450e-11 4.000000e-01 5.810197e-10 5.000000e-01 9.020764e-09 6.000000e-01 1.400476e-07 7.000000e-01 2.173110e-06 8.000000e-01 3.345068e-05 9.000000e-01 4.617821e-04 1.000000e+00 3.295718e-03 1.100000e+00 9.453405e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400649e-12 3.000000e-01 3.741394e-11 4.000000e-01 5.810150e-10 5.000000e-01 9.020729e-09 6.000000e-01 1.400474e-07 7.000000e-01 2.173109e-06 8.000000e-01 3.345067e-05 9.000000e-01 4.617821e-04 1.000000e+00 3.295718e-03 1.100000e+00 9.453405e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400646e-12 3.000000e-01 3.741393e-11 4.000000e-01 5.810148e-10 5.000000e-01 9.020727e-09 6.000000e-01 1.400474e-07 7.000000e-01 2.173109e-06 8.000000e-01 3.345067e-05 9.000000e-01 4.617820e-04 1.000000e+00 3.295718e-03 1.100000e+00 9.453405e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400646e-12 3.000000e-01 3.741392e-11 4.000000e-01 5.810148e-10 5.000000e-01 9.020727e-09 6.000000e-01 1.400474e-07 7.000000e-01 2.173109e-06 8.000000e-01 3.345067e-05 9.000000e-01 4.617820e-04 1.000000e+00 3.295718e-03 1.100000e+00 9.453405e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 tmpk8ny_4pz/tests/bsim3/pmos/reference/dcSweep_lw3.standard0000644000175000017500000003054613546075722024164 0ustar carstencarstenV(d) I(d) 1.000000e-01 4.680908e-13 2.000000e-01 2.281433e-11 3.000000e-01 1.090047e-09 4.000000e-01 5.206472e-08 5.000000e-01 2.484615e-06 6.000000e-01 1.136889e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850456e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677821e-13 2.000000e-01 2.280782e-11 3.000000e-01 1.089934e-09 4.000000e-01 5.206302e-08 5.000000e-01 2.484594e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 3.436626e-13 2.000000e-01 4.138408e-12 3.000000e-01 5.059312e-11 4.000000e-01 6.698536e-10 5.000000e-01 9.554836e-09 6.000000e-01 1.429025e-07 7.000000e-01 2.186600e-06 8.000000e-01 3.350671e-05 9.000000e-01 4.619635e-04 1.000000e+00 3.295982e-03 1.100000e+00 9.453624e-03 1.200000e+00 1.725874e-02 1.300000e+00 2.579357e-02 1.400000e+00 3.471086e-02 1.500000e+00 4.385795e-02 1.600000e+00 5.315679e-02 1.700000e+00 6.256270e-02 1.800000e+00 7.204797e-02 1.000000e-01 1.530529e-13 2.000000e-01 2.472151e-12 3.000000e-01 3.798898e-11 4.000000e-01 5.851364e-10 5.000000e-01 9.047275e-09 6.000000e-01 1.402017e-07 7.000000e-01 2.173918e-06 8.000000e-01 3.345444e-05 9.000000e-01 4.617955e-04 1.000000e+00 3.295739e-03 1.100000e+00 9.453424e-03 1.200000e+00 1.725858e-02 1.300000e+00 2.579344e-02 1.400000e+00 3.471074e-02 1.500000e+00 4.385785e-02 1.600000e+00 5.315670e-02 1.700000e+00 6.256262e-02 1.800000e+00 7.204790e-02 1.000000e-01 1.456543e-13 2.000000e-01 2.403581e-12 3.000000e-01 3.743891e-11 4.000000e-01 5.812042e-10 5.000000e-01 9.022017e-09 6.000000e-01 1.400553e-07 7.000000e-01 2.173153e-06 8.000000e-01 3.345089e-05 9.000000e-01 4.617829e-04 1.000000e+00 3.295720e-03 1.100000e+00 9.453406e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256262e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453681e-13 2.000000e-01 2.400764e-12 3.000000e-01 3.741501e-11 4.000000e-01 5.810235e-10 5.000000e-01 9.020789e-09 6.000000e-01 1.400478e-07 7.000000e-01 2.173111e-06 8.000000e-01 3.345068e-05 9.000000e-01 4.617821e-04 1.000000e+00 3.295718e-03 1.100000e+00 9.453405e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400653e-12 3.000000e-01 3.741397e-11 4.000000e-01 5.810152e-10 5.000000e-01 9.020730e-09 6.000000e-01 1.400474e-07 7.000000e-01 2.173109e-06 8.000000e-01 3.345067e-05 9.000000e-01 4.617821e-04 1.000000e+00 3.295718e-03 1.100000e+00 9.453405e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400646e-12 3.000000e-01 3.741393e-11 4.000000e-01 5.810148e-10 5.000000e-01 9.020727e-09 6.000000e-01 1.400474e-07 7.000000e-01 2.173109e-06 8.000000e-01 3.345067e-05 9.000000e-01 4.617820e-04 1.000000e+00 3.295718e-03 1.100000e+00 9.453405e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400646e-12 3.000000e-01 3.741392e-11 4.000000e-01 5.810148e-10 5.000000e-01 9.020727e-09 6.000000e-01 1.400474e-07 7.000000e-01 2.173109e-06 8.000000e-01 3.345067e-05 9.000000e-01 4.617820e-04 1.000000e+00 3.295718e-03 1.100000e+00 9.453405e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400646e-12 3.000000e-01 3.741392e-11 4.000000e-01 5.810148e-10 5.000000e-01 9.020727e-09 6.000000e-01 1.400474e-07 7.000000e-01 2.173109e-06 8.000000e-01 3.345067e-05 9.000000e-01 4.617820e-04 1.000000e+00 3.295718e-03 1.100000e+00 9.453405e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400646e-12 3.000000e-01 3.741392e-11 4.000000e-01 5.810148e-10 5.000000e-01 9.020727e-09 6.000000e-01 1.400474e-07 7.000000e-01 2.173109e-06 8.000000e-01 3.345067e-05 9.000000e-01 4.617820e-04 1.000000e+00 3.295718e-03 1.100000e+00 9.453405e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 tmpk8ny_4pz/tests/bsim3/pmos/reference/acFreq.standard0000644000175000017500000000712613546075722023204 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 1258.925 2.8534338139181e-14 3.36668788291387e-15 4.86662611418904e-16 1584.893 2.85343308122805e-14 3.36668066683295e-15 4.86662396804049e-16 1995.262 2.85343294690791e-14 3.36668610542927e-15 4.86662218670296e-16 2511.886 2.85343295784898e-14 3.36668532416538e-15 4.86662400283728e-16 3162.278 2.85343249213843e-14 3.36668168935014e-15 4.86662290482535e-16 3981.072 2.85343261031726e-14 3.36668382675913e-15 4.86663107007502e-16 5011.872 2.85343298679819e-14 3.3666957000617e-15 4.86663915073295e-16 6309.573 2.85343261547742e-14 3.36669537771815e-15 4.86663674237413e-16 7943.282 2.85343281304704e-14 3.36667976509521e-15 4.86662628528703e-16 10000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 12589.25 2.8534338139181e-14 3.36668788291387e-15 4.86662611418904e-16 15848.93 2.85343308122805e-14 3.36668066683296e-15 4.86662396804049e-16 19952.62 2.85343294690791e-14 3.36668610542927e-15 4.86662218670296e-16 25118.86 2.85343295784898e-14 3.36668532416538e-15 4.86662400283728e-16 31622.78 2.85343249213843e-14 3.36668168935014e-15 4.86662290482535e-16 39810.72 2.85343261031726e-14 3.36668382675913e-15 4.86663107007502e-16 50118.72 2.85343298679819e-14 3.3666957000617e-15 4.86663915073295e-16 63095.73 2.85343261547742e-14 3.36669537771815e-15 4.86663674237413e-16 79432.82 2.85343281304704e-14 3.36667976509521e-15 4.86662628528703e-16 100000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 125892.5 2.8534338139181e-14 3.36668788291386e-15 4.86662611418904e-16 158489.3 2.85343308122805e-14 3.36668066683296e-15 4.86662396804049e-16 199526.2 2.85343294690791e-14 3.36668610542927e-15 4.86662218670296e-16 251188.6 2.85343295784898e-14 3.36668532416538e-15 4.86662400283728e-16 316227.8 2.85343249213843e-14 3.36668168935014e-15 4.86662290482535e-16 398107.2 2.85343261031726e-14 3.36668382675913e-15 4.86663107007502e-16 501187.2 2.85343298679819e-14 3.3666957000617e-15 4.86663915073295e-16 630957.3 2.85343261547742e-14 3.36669537771815e-15 4.86663674237413e-16 794328.2 2.85343281304704e-14 3.36667976509521e-15 4.86662628528704e-16 1000000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 1258925 2.8534338139181e-14 3.36668788291386e-15 4.86662611418904e-16 1584893 2.85343308122805e-14 3.36668066683296e-15 4.86662396804049e-16 1995262 2.85343294690791e-14 3.36668610542927e-15 4.86662218670296e-16 2511886 2.85343295784898e-14 3.36668532416538e-15 4.86662400283728e-16 3162278 2.85343249213843e-14 3.36668168935014e-15 4.86662290482535e-16 3981072 2.85343261031726e-14 3.36668382675913e-15 4.86663107007502e-16 5011872 2.85343298679819e-14 3.3666957000617e-15 4.86663915073295e-16 6309573 2.85343261547742e-14 3.36669537771815e-15 4.86663674237413e-16 7943282 2.85343281304704e-14 3.36667976509521e-15 4.86662628528703e-16 10000000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 12589250 2.8534338139181e-14 3.36668788291386e-15 4.86662611418904e-16 15848930 2.85343308122805e-14 3.36668066683296e-15 4.86662396804049e-16 19952620 2.85343294690791e-14 3.36668610542927e-15 4.86662218670296e-16 25118860 2.85343295784898e-14 3.36668532416538e-15 4.86662400283728e-16 31622780 2.85343249213843e-14 3.36668168935014e-15 4.86662290482535e-16 39810720 2.85343261031726e-14 3.36668382675913e-15 4.86663107007502e-16 50118720 2.85343298679819e-14 3.3666957000617e-15 4.86663915073295e-16 63095730 2.85343261547742e-14 3.36669537771815e-15 4.86663674237413e-16 79432820 2.85343281304704e-14 3.36667976509521e-15 4.86662628528703e-16 100000000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 tmpk8ny_4pz/tests/bsim3/pmos/reference/noise2.standard0000644000175000017500000000637213546075722023204 0ustar carstencarstenFreq N(d) 1000 1.558973e-21 1258.925 1.558973e-21 1584.893 1.558973e-21 1995.262 1.558973e-21 2511.886 1.558973e-21 3162.278 1.558973e-21 3981.072 1.558973e-21 5011.872 1.558973e-21 6309.573 1.558973e-21 7943.282 1.558973e-21 10000 1.558973e-21 12589.25 1.558973e-21 15848.93 1.558973e-21 19952.62 1.558973e-21 25118.86 1.558973e-21 31622.78 1.558973e-21 39810.72 1.558973e-21 50118.72 1.558973e-21 63095.73 1.558973e-21 79432.82 1.558973e-21 100000 1.558973e-21 125892.5 1.558973e-21 158489.3 1.558973e-21 199526.2 1.558973e-21 251188.6 1.558973e-21 316227.8 1.558973e-21 398107.2 1.558973e-21 501187.2 1.558973e-21 630957.3 1.558973e-21 794328.2 1.558973e-21 1000000 1.558973e-21 1258925 1.558973e-21 1584893 1.558973e-21 1995262 1.558973e-21 2511886 1.558973e-21 3162278 1.558973e-21 3981072 1.558973e-21 5011872 1.558973e-21 6309573 1.558973e-21 7943282 1.558973e-21 10000000 1.558973e-21 12589250 1.558973e-21 15848930 1.558973e-21 19952620 1.558973e-21 25118860 1.558973e-21 31622780 1.558973e-21 39810720 1.558973e-21 50118720 1.558973e-21 63095730 1.558973e-21 79432820 1.558973e-21 100000000 1.558973e-21 1000 1.558973e-21 1258.925 1.558973e-21 1584.893 1.558973e-21 1995.262 1.558973e-21 2511.886 1.558973e-21 3162.278 1.558973e-21 3981.072 1.558973e-21 5011.872 1.558973e-21 6309.573 1.558973e-21 7943.282 1.558973e-21 10000 1.558973e-21 12589.25 1.558973e-21 15848.93 1.558973e-21 19952.62 1.558973e-21 25118.86 1.558973e-21 31622.78 1.558973e-21 39810.72 1.558973e-21 50118.72 1.558973e-21 63095.73 1.558973e-21 79432.82 1.558973e-21 100000 1.558973e-21 125892.5 1.558973e-21 158489.3 1.558973e-21 199526.2 1.558973e-21 251188.6 1.558973e-21 316227.8 1.558973e-21 398107.2 1.558973e-21 501187.2 1.558973e-21 630957.3 1.558973e-21 794328.2 1.558973e-21 1000000 1.558973e-21 1258925 1.558973e-21 1584893 1.558973e-21 1995262 1.558973e-21 2511886 1.558973e-21 3162278 1.558973e-21 3981072 1.558973e-21 5011872 1.558973e-21 6309573 1.558973e-21 7943282 1.558973e-21 10000000 1.558973e-21 12589250 1.558973e-21 15848930 1.558973e-21 19952620 1.558973e-21 25118860 1.558973e-21 31622780 1.558973e-21 39810720 1.558973e-21 50118720 1.558973e-21 63095730 1.558973e-21 79432820 1.558973e-21 100000000 1.558973e-21 1000 1.558973e-21 1258.925 1.558973e-21 1584.893 1.558973e-21 1995.262 1.558973e-21 2511.886 1.558973e-21 3162.278 1.558973e-21 3981.072 1.558973e-21 5011.872 1.558973e-21 6309.573 1.558973e-21 7943.282 1.558973e-21 10000 1.558973e-21 12589.25 1.558973e-21 15848.93 1.558973e-21 19952.62 1.558973e-21 25118.86 1.558973e-21 31622.78 1.558973e-21 39810.72 1.558973e-21 50118.72 1.558973e-21 63095.73 1.558973e-21 79432.82 1.558973e-21 100000 1.558973e-21 125892.5 1.558973e-21 158489.3 1.558973e-21 199526.2 1.558973e-21 251188.6 1.558973e-21 316227.8 1.558973e-21 398107.2 1.558973e-21 501187.2 1.558973e-21 630957.3 1.558973e-21 794328.2 1.558973e-21 1000000 1.558973e-21 1258925 1.558973e-21 1584893 1.558973e-21 1995262 1.558973e-21 2511886 1.558973e-21 3162278 1.558973e-21 3981072 1.558973e-21 5011872 1.558973e-21 6309573 1.558973e-21 7943282 1.558973e-21 10000000 1.558973e-21 12589250 1.558973e-21 15848930 1.558973e-21 19952620 1.558973e-21 25118860 1.558973e-21 31622780 1.558973e-21 39810720 1.558973e-21 50118720 1.558973e-21 63095730 1.558973e-21 79432820 1.558973e-21 100000000 1.558973e-21 tmpk8ny_4pz/tests/bsim3/pmos/reference/noise1.standard0000644000175000017500000000637213546075722023203 0ustar carstencarstenFreq N(d) 1000 1.558973e-21 1258.925 1.558973e-21 1584.893 1.558973e-21 1995.262 1.558973e-21 2511.886 1.558973e-21 3162.278 1.558973e-21 3981.072 1.558973e-21 5011.872 1.558973e-21 6309.573 1.558973e-21 7943.282 1.558973e-21 10000 1.558973e-21 12589.25 1.558973e-21 15848.93 1.558973e-21 19952.62 1.558973e-21 25118.86 1.558973e-21 31622.78 1.558973e-21 39810.72 1.558973e-21 50118.72 1.558973e-21 63095.73 1.558973e-21 79432.82 1.558973e-21 100000 1.558973e-21 125892.5 1.558973e-21 158489.3 1.558973e-21 199526.2 1.558973e-21 251188.6 1.558973e-21 316227.8 1.558973e-21 398107.2 1.558973e-21 501187.2 1.558973e-21 630957.3 1.558973e-21 794328.2 1.558973e-21 1000000 1.558973e-21 1258925 1.558973e-21 1584893 1.558973e-21 1995262 1.558973e-21 2511886 1.558973e-21 3162278 1.558973e-21 3981072 1.558973e-21 5011872 1.558973e-21 6309573 1.558973e-21 7943282 1.558973e-21 10000000 1.558973e-21 12589250 1.558973e-21 15848930 1.558973e-21 19952620 1.558973e-21 25118860 1.558973e-21 31622780 1.558973e-21 39810720 1.558973e-21 50118720 1.558973e-21 63095730 1.558973e-21 79432820 1.558973e-21 100000000 1.558973e-21 1000 1.558973e-21 1258.925 1.558973e-21 1584.893 1.558973e-21 1995.262 1.558973e-21 2511.886 1.558973e-21 3162.278 1.558973e-21 3981.072 1.558973e-21 5011.872 1.558973e-21 6309.573 1.558973e-21 7943.282 1.558973e-21 10000 1.558973e-21 12589.25 1.558973e-21 15848.93 1.558973e-21 19952.62 1.558973e-21 25118.86 1.558973e-21 31622.78 1.558973e-21 39810.72 1.558973e-21 50118.72 1.558973e-21 63095.73 1.558973e-21 79432.82 1.558973e-21 100000 1.558973e-21 125892.5 1.558973e-21 158489.3 1.558973e-21 199526.2 1.558973e-21 251188.6 1.558973e-21 316227.8 1.558973e-21 398107.2 1.558973e-21 501187.2 1.558973e-21 630957.3 1.558973e-21 794328.2 1.558973e-21 1000000 1.558973e-21 1258925 1.558973e-21 1584893 1.558973e-21 1995262 1.558973e-21 2511886 1.558973e-21 3162278 1.558973e-21 3981072 1.558973e-21 5011872 1.558973e-21 6309573 1.558973e-21 7943282 1.558973e-21 10000000 1.558973e-21 12589250 1.558973e-21 15848930 1.558973e-21 19952620 1.558973e-21 25118860 1.558973e-21 31622780 1.558973e-21 39810720 1.558973e-21 50118720 1.558973e-21 63095730 1.558973e-21 79432820 1.558973e-21 100000000 1.558973e-21 1000 1.558973e-21 1258.925 1.558973e-21 1584.893 1.558973e-21 1995.262 1.558973e-21 2511.886 1.558973e-21 3162.278 1.558973e-21 3981.072 1.558973e-21 5011.872 1.558973e-21 6309.573 1.558973e-21 7943.282 1.558973e-21 10000 1.558973e-21 12589.25 1.558973e-21 15848.93 1.558973e-21 19952.62 1.558973e-21 25118.86 1.558973e-21 31622.78 1.558973e-21 39810.72 1.558973e-21 50118.72 1.558973e-21 63095.73 1.558973e-21 79432.82 1.558973e-21 100000 1.558973e-21 125892.5 1.558973e-21 158489.3 1.558973e-21 199526.2 1.558973e-21 251188.6 1.558973e-21 316227.8 1.558973e-21 398107.2 1.558973e-21 501187.2 1.558973e-21 630957.3 1.558973e-21 794328.2 1.558973e-21 1000000 1.558973e-21 1258925 1.558973e-21 1584893 1.558973e-21 1995262 1.558973e-21 2511886 1.558973e-21 3162278 1.558973e-21 3981072 1.558973e-21 5011872 1.558973e-21 6309573 1.558973e-21 7943282 1.558973e-21 10000000 1.558973e-21 12589250 1.558973e-21 15848930 1.558973e-21 19952620 1.558973e-21 25118860 1.558973e-21 31622780 1.558973e-21 39810720 1.558973e-21 50118720 1.558973e-21 63095730 1.558973e-21 79432820 1.558973e-21 100000000 1.558973e-21 tmpk8ny_4pz/tests/bsim3/pmos/reference/acFreq_xpart.standard0000644000175000017500000000712613546075722024422 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 1258.925 2.8534338139181e-14 3.36668788291387e-15 4.86662611418904e-16 1584.893 2.85343308122805e-14 3.36668066683295e-15 4.86662396804049e-16 1995.262 2.85343294690791e-14 3.36668610542927e-15 4.86662218670296e-16 2511.886 2.85343295784898e-14 3.36668532416538e-15 4.86662400283728e-16 3162.278 2.85343249213843e-14 3.36668168935014e-15 4.86662290482535e-16 3981.072 2.85343261031726e-14 3.36668382675913e-15 4.86663107007502e-16 5011.872 2.85343298679819e-14 3.3666957000617e-15 4.86663915073295e-16 6309.573 2.85343261547742e-14 3.36669537771815e-15 4.86663674237413e-16 7943.282 2.85343281304704e-14 3.36667976509521e-15 4.86662628528703e-16 10000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 12589.25 2.8534338139181e-14 3.36668788291387e-15 4.86662611418904e-16 15848.93 2.85343308122805e-14 3.36668066683296e-15 4.86662396804049e-16 19952.62 2.85343294690791e-14 3.36668610542927e-15 4.86662218670296e-16 25118.86 2.85343295784898e-14 3.36668532416538e-15 4.86662400283728e-16 31622.78 2.85343249213843e-14 3.36668168935014e-15 4.86662290482535e-16 39810.72 2.85343261031726e-14 3.36668382675913e-15 4.86663107007502e-16 50118.72 2.85343298679819e-14 3.3666957000617e-15 4.86663915073295e-16 63095.73 2.85343261547742e-14 3.36669537771815e-15 4.86663674237413e-16 79432.82 2.85343281304704e-14 3.36667976509521e-15 4.86662628528703e-16 100000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 125892.5 2.8534338139181e-14 3.36668788291386e-15 4.86662611418904e-16 158489.3 2.85343308122805e-14 3.36668066683296e-15 4.86662396804049e-16 199526.2 2.85343294690791e-14 3.36668610542927e-15 4.86662218670296e-16 251188.6 2.85343295784898e-14 3.36668532416538e-15 4.86662400283728e-16 316227.8 2.85343249213843e-14 3.36668168935014e-15 4.86662290482535e-16 398107.2 2.85343261031726e-14 3.36668382675913e-15 4.86663107007502e-16 501187.2 2.85343298679819e-14 3.3666957000617e-15 4.86663915073295e-16 630957.3 2.85343261547742e-14 3.36669537771815e-15 4.86663674237413e-16 794328.2 2.85343281304704e-14 3.36667976509521e-15 4.86662628528704e-16 1000000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 1258925 2.8534338139181e-14 3.36668788291386e-15 4.86662611418904e-16 1584893 2.85343308122805e-14 3.36668066683296e-15 4.86662396804049e-16 1995262 2.85343294690791e-14 3.36668610542927e-15 4.86662218670296e-16 2511886 2.85343295784898e-14 3.36668532416538e-15 4.86662400283728e-16 3162278 2.85343249213843e-14 3.36668168935014e-15 4.86662290482535e-16 3981072 2.85343261031726e-14 3.36668382675913e-15 4.86663107007502e-16 5011872 2.85343298679819e-14 3.3666957000617e-15 4.86663915073295e-16 6309573 2.85343261547742e-14 3.36669537771815e-15 4.86663674237413e-16 7943282 2.85343281304704e-14 3.36667976509521e-15 4.86662628528703e-16 10000000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 12589250 2.8534338139181e-14 3.36668788291386e-15 4.86662611418904e-16 15848930 2.85343308122805e-14 3.36668066683296e-15 4.86662396804049e-16 19952620 2.85343294690791e-14 3.36668610542927e-15 4.86662218670296e-16 25118860 2.85343295784898e-14 3.36668532416538e-15 4.86662400283728e-16 31622780 2.85343249213843e-14 3.36668168935014e-15 4.86662290482535e-16 39810720 2.85343261031726e-14 3.36668382675913e-15 4.86663107007502e-16 50118720 2.85343298679819e-14 3.3666957000617e-15 4.86663915073295e-16 63095730 2.85343261547742e-14 3.36669537771815e-15 4.86663674237413e-16 79432820 2.85343281304704e-14 3.36667976509521e-15 4.86662628528703e-16 100000000 2.85343327046451e-14 3.36668408869441e-15 4.86662393436967e-16 tmpk8ny_4pz/tests/bsim3/pmos/reference/dcSweep_lw1.standard0000644000175000017500000003054613546075722024162 0ustar carstencarstenV(d) I(d) 1.000000e-01 4.682088e-13 2.000000e-01 2.281971e-11 3.000000e-01 1.090204e-09 4.000000e-01 5.206819e-08 5.000000e-01 2.484678e-06 6.000000e-01 1.136898e-04 7.000000e-01 2.316892e-03 8.000000e-01 8.850459e-03 9.000000e-01 1.714085e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527426e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677786e-13 2.000000e-01 2.280785e-11 3.000000e-01 1.089935e-09 4.000000e-01 5.206306e-08 5.000000e-01 2.484594e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 4.677769e-13 2.000000e-01 2.280775e-11 3.000000e-01 1.089932e-09 4.000000e-01 5.206300e-08 5.000000e-01 2.484593e-06 6.000000e-01 1.136887e-04 7.000000e-01 2.316888e-03 8.000000e-01 8.850455e-03 9.000000e-01 1.714084e-02 1.000000e+00 2.605754e-02 1.100000e+00 3.527425e-02 1.200000e+00 4.466383e-02 1.300000e+00 5.416499e-02 1.400000e+00 6.374382e-02 1.500000e+00 7.337972e-02 1.600000e+00 8.305924e-02 1.700000e+00 9.277318e-02 1.800000e+00 1.025141e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 1.803675e-12 2.000000e-01 3.288957e-10 3.000000e-01 5.964764e-08 4.000000e-01 1.075754e-05 5.000000e-01 1.104592e-03 6.000000e-01 7.437503e-03 7.000000e-01 1.596827e-02 8.000000e-01 2.509871e-02 9.000000e-01 3.448764e-02 1.000000e+00 4.401844e-02 1.100000e+00 5.363837e-02 1.200000e+00 6.331931e-02 1.300000e+00 7.304456e-02 1.400000e+00 8.280343e-02 1.500000e+00 9.258865e-02 1.600000e+00 1.023945e-01 1.700000e+00 1.122059e-01 1.800000e+00 1.220172e-01 1.000000e-01 4.495310e-13 2.000000e-01 5.635117e-12 3.000000e-01 6.686373e-11 4.000000e-01 8.166649e-10 5.000000e-01 1.067934e-08 6.000000e-01 1.502276e-07 7.000000e-01 2.227421e-06 8.000000e-01 3.370639e-05 9.000000e-01 4.626895e-04 1.000000e+00 3.297025e-03 1.100000e+00 9.454451e-03 1.200000e+00 1.725938e-02 1.300000e+00 2.579409e-02 1.400000e+00 3.471129e-02 1.500000e+00 4.385832e-02 1.600000e+00 5.315712e-02 1.700000e+00 6.256300e-02 1.800000e+00 7.204824e-02 1.000000e-01 1.551675e-13 2.000000e-01 2.512719e-12 3.000000e-01 3.851001e-11 4.000000e-01 5.904768e-10 5.000000e-01 9.093518e-09 6.000000e-01 1.405481e-07 7.000000e-01 2.176173e-06 8.000000e-01 3.346702e-05 9.000000e-01 4.618480e-04 1.000000e+00 3.295832e-03 1.100000e+00 9.453510e-03 1.200000e+00 1.725865e-02 1.300000e+00 2.579351e-02 1.400000e+00 3.471080e-02 1.500000e+00 4.385790e-02 1.600000e+00 5.315675e-02 1.700000e+00 6.256267e-02 1.800000e+00 7.204794e-02 1.000000e-01 1.456734e-13 2.000000e-01 2.404521e-12 3.000000e-01 3.745450e-11 4.000000e-01 5.813894e-10 5.000000e-01 9.023813e-09 6.000000e-01 1.400702e-07 7.000000e-01 2.173262e-06 8.000000e-01 3.345158e-05 9.000000e-01 4.617862e-04 1.000000e+00 3.295726e-03 1.100000e+00 9.453412e-03 1.200000e+00 1.725857e-02 1.300000e+00 2.579344e-02 1.400000e+00 3.471074e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256262e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453664e-13 2.000000e-01 2.400777e-12 3.000000e-01 3.741542e-11 4.000000e-01 5.810296e-10 5.000000e-01 9.020857e-09 6.000000e-01 1.400484e-07 7.000000e-01 2.173116e-06 8.000000e-01 3.345071e-05 9.000000e-01 4.617823e-04 1.000000e+00 3.295719e-03 1.100000e+00 9.453406e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400649e-12 3.000000e-01 3.741398e-11 4.000000e-01 5.810154e-10 5.000000e-01 9.020733e-09 6.000000e-01 1.400474e-07 7.000000e-01 2.173109e-06 8.000000e-01 3.345067e-05 9.000000e-01 4.617821e-04 1.000000e+00 3.295718e-03 1.100000e+00 9.453405e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400646e-12 3.000000e-01 3.741393e-11 4.000000e-01 5.810148e-10 5.000000e-01 9.020727e-09 6.000000e-01 1.400474e-07 7.000000e-01 2.173109e-06 8.000000e-01 3.345067e-05 9.000000e-01 4.617821e-04 1.000000e+00 3.295718e-03 1.100000e+00 9.453405e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400646e-12 3.000000e-01 3.741392e-11 4.000000e-01 5.810148e-10 5.000000e-01 9.020727e-09 6.000000e-01 1.400474e-07 7.000000e-01 2.173109e-06 8.000000e-01 3.345067e-05 9.000000e-01 4.617820e-04 1.000000e+00 3.295718e-03 1.100000e+00 9.453405e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400646e-12 3.000000e-01 3.741392e-11 4.000000e-01 5.810148e-10 5.000000e-01 9.020727e-09 6.000000e-01 1.400474e-07 7.000000e-01 2.173109e-06 8.000000e-01 3.345067e-05 9.000000e-01 4.617820e-04 1.000000e+00 3.295718e-03 1.100000e+00 9.453405e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 1.000000e-01 1.453559e-13 2.000000e-01 2.400646e-12 3.000000e-01 3.741392e-11 4.000000e-01 5.810148e-10 5.000000e-01 9.020727e-09 6.000000e-01 1.400474e-07 7.000000e-01 2.173109e-06 8.000000e-01 3.345067e-05 9.000000e-01 4.617820e-04 1.000000e+00 3.295718e-03 1.100000e+00 9.453405e-03 1.200000e+00 1.725856e-02 1.300000e+00 2.579343e-02 1.400000e+00 3.471073e-02 1.500000e+00 4.385784e-02 1.600000e+00 5.315669e-02 1.700000e+00 6.256261e-02 1.800000e+00 7.204789e-02 tmpk8ny_4pz/tests/bsim3/pmos/reference/dcSweep_lw1_vb1.standard0000644000175000017500000003054613546075722024732 0ustar carstencarstenV(d) I(d) 1.000000e-01 1.089935e-09 2.000000e-01 5.206305e-08 3.000000e-01 2.484594e-06 4.000000e-01 1.136887e-04 5.000000e-01 2.316888e-03 6.000000e-01 8.850455e-03 7.000000e-01 1.714084e-02 8.000000e-01 2.605754e-02 9.000000e-01 3.527425e-02 1.000000e+00 4.466383e-02 1.100000e+00 5.416499e-02 1.200000e+00 6.374382e-02 1.300000e+00 7.337972e-02 1.400000e+00 8.305924e-02 1.500000e+00 9.277318e-02 1.600000e+00 1.025141e-01 1.700000e+00 1.122620e-01 1.800000e+00 1.220099e-01 1.000000e-01 1.089932e-09 2.000000e-01 5.206300e-08 3.000000e-01 2.484593e-06 4.000000e-01 1.136887e-04 5.000000e-01 2.316888e-03 6.000000e-01 8.850455e-03 7.000000e-01 1.714084e-02 8.000000e-01 2.605754e-02 9.000000e-01 3.527425e-02 1.000000e+00 4.466383e-02 1.100000e+00 5.416499e-02 1.200000e+00 6.374382e-02 1.300000e+00 7.337972e-02 1.400000e+00 8.305924e-02 1.500000e+00 9.277318e-02 1.600000e+00 1.025141e-01 1.700000e+00 1.122620e-01 1.800000e+00 1.220099e-01 1.000000e-01 1.089932e-09 2.000000e-01 5.206300e-08 3.000000e-01 2.484593e-06 4.000000e-01 1.136887e-04 5.000000e-01 2.316888e-03 6.000000e-01 8.850455e-03 7.000000e-01 1.714084e-02 8.000000e-01 2.605754e-02 9.000000e-01 3.527425e-02 1.000000e+00 4.466383e-02 1.100000e+00 5.416499e-02 1.200000e+00 6.374382e-02 1.300000e+00 7.337972e-02 1.400000e+00 8.305924e-02 1.500000e+00 9.277318e-02 1.600000e+00 1.025141e-01 1.700000e+00 1.122620e-01 1.800000e+00 1.220099e-01 1.000000e-01 1.089932e-09 2.000000e-01 5.206300e-08 3.000000e-01 2.484593e-06 4.000000e-01 1.136887e-04 5.000000e-01 2.316888e-03 6.000000e-01 8.850455e-03 7.000000e-01 1.714084e-02 8.000000e-01 2.605754e-02 9.000000e-01 3.527425e-02 1.000000e+00 4.466383e-02 1.100000e+00 5.416499e-02 1.200000e+00 6.374382e-02 1.300000e+00 7.337972e-02 1.400000e+00 8.305924e-02 1.500000e+00 9.277318e-02 1.600000e+00 1.025141e-01 1.700000e+00 1.122620e-01 1.800000e+00 1.220099e-01 1.000000e-01 1.089932e-09 2.000000e-01 5.206300e-08 3.000000e-01 2.484593e-06 4.000000e-01 1.136887e-04 5.000000e-01 2.316888e-03 6.000000e-01 8.850455e-03 7.000000e-01 1.714084e-02 8.000000e-01 2.605754e-02 9.000000e-01 3.527425e-02 1.000000e+00 4.466383e-02 1.100000e+00 5.416499e-02 1.200000e+00 6.374382e-02 1.300000e+00 7.337972e-02 1.400000e+00 8.305924e-02 1.500000e+00 9.277318e-02 1.600000e+00 1.025141e-01 1.700000e+00 1.122620e-01 1.800000e+00 1.220099e-01 1.000000e-01 1.089932e-09 2.000000e-01 5.206300e-08 3.000000e-01 2.484593e-06 4.000000e-01 1.136887e-04 5.000000e-01 2.316888e-03 6.000000e-01 8.850455e-03 7.000000e-01 1.714084e-02 8.000000e-01 2.605754e-02 9.000000e-01 3.527425e-02 1.000000e+00 4.466383e-02 1.100000e+00 5.416499e-02 1.200000e+00 6.374382e-02 1.300000e+00 7.337972e-02 1.400000e+00 8.305924e-02 1.500000e+00 9.277318e-02 1.600000e+00 1.025141e-01 1.700000e+00 1.122620e-01 1.800000e+00 1.220099e-01 1.000000e-01 1.089932e-09 2.000000e-01 5.206300e-08 3.000000e-01 2.484593e-06 4.000000e-01 1.136887e-04 5.000000e-01 2.316888e-03 6.000000e-01 8.850455e-03 7.000000e-01 1.714084e-02 8.000000e-01 2.605754e-02 9.000000e-01 3.527425e-02 1.000000e+00 4.466383e-02 1.100000e+00 5.416499e-02 1.200000e+00 6.374382e-02 1.300000e+00 7.337972e-02 1.400000e+00 8.305924e-02 1.500000e+00 9.277318e-02 1.600000e+00 1.025141e-01 1.700000e+00 1.122620e-01 1.800000e+00 1.220099e-01 1.000000e-01 1.089932e-09 2.000000e-01 5.206300e-08 3.000000e-01 2.484593e-06 4.000000e-01 1.136887e-04 5.000000e-01 2.316888e-03 6.000000e-01 8.850455e-03 7.000000e-01 1.714084e-02 8.000000e-01 2.605754e-02 9.000000e-01 3.527425e-02 1.000000e+00 4.466383e-02 1.100000e+00 5.416499e-02 1.200000e+00 6.374382e-02 1.300000e+00 7.337972e-02 1.400000e+00 8.305924e-02 1.500000e+00 9.277318e-02 1.600000e+00 1.025141e-01 1.700000e+00 1.122620e-01 1.800000e+00 1.220099e-01 1.000000e-01 1.089932e-09 2.000000e-01 5.206300e-08 3.000000e-01 2.484593e-06 4.000000e-01 1.136887e-04 5.000000e-01 2.316888e-03 6.000000e-01 8.850455e-03 7.000000e-01 1.714084e-02 8.000000e-01 2.605754e-02 9.000000e-01 3.527425e-02 1.000000e+00 4.466383e-02 1.100000e+00 5.416499e-02 1.200000e+00 6.374382e-02 1.300000e+00 7.337972e-02 1.400000e+00 8.305924e-02 1.500000e+00 9.277318e-02 1.600000e+00 1.025141e-01 1.700000e+00 1.122620e-01 1.800000e+00 1.220099e-01 1.000000e-01 5.964764e-08 2.000000e-01 1.075754e-05 3.000000e-01 1.104592e-03 4.000000e-01 7.437503e-03 5.000000e-01 1.596827e-02 6.000000e-01 2.509871e-02 7.000000e-01 3.448764e-02 8.000000e-01 4.401844e-02 9.000000e-01 5.363837e-02 1.000000e+00 6.331931e-02 1.100000e+00 7.304456e-02 1.200000e+00 8.280343e-02 1.300000e+00 9.258865e-02 1.400000e+00 1.023945e-01 1.500000e+00 1.122059e-01 1.600000e+00 1.220172e-01 1.700000e+00 1.318285e-01 1.800000e+00 1.416399e-01 1.000000e-01 5.964764e-08 2.000000e-01 1.075754e-05 3.000000e-01 1.104592e-03 4.000000e-01 7.437503e-03 5.000000e-01 1.596827e-02 6.000000e-01 2.509871e-02 7.000000e-01 3.448764e-02 8.000000e-01 4.401844e-02 9.000000e-01 5.363837e-02 1.000000e+00 6.331931e-02 1.100000e+00 7.304456e-02 1.200000e+00 8.280343e-02 1.300000e+00 9.258865e-02 1.400000e+00 1.023945e-01 1.500000e+00 1.122059e-01 1.600000e+00 1.220172e-01 1.700000e+00 1.318285e-01 1.800000e+00 1.416399e-01 1.000000e-01 5.964764e-08 2.000000e-01 1.075754e-05 3.000000e-01 1.104592e-03 4.000000e-01 7.437503e-03 5.000000e-01 1.596827e-02 6.000000e-01 2.509871e-02 7.000000e-01 3.448764e-02 8.000000e-01 4.401844e-02 9.000000e-01 5.363837e-02 1.000000e+00 6.331931e-02 1.100000e+00 7.304456e-02 1.200000e+00 8.280343e-02 1.300000e+00 9.258865e-02 1.400000e+00 1.023945e-01 1.500000e+00 1.122059e-01 1.600000e+00 1.220172e-01 1.700000e+00 1.318285e-01 1.800000e+00 1.416399e-01 1.000000e-01 5.964764e-08 2.000000e-01 1.075754e-05 3.000000e-01 1.104592e-03 4.000000e-01 7.437503e-03 5.000000e-01 1.596827e-02 6.000000e-01 2.509871e-02 7.000000e-01 3.448764e-02 8.000000e-01 4.401844e-02 9.000000e-01 5.363837e-02 1.000000e+00 6.331931e-02 1.100000e+00 7.304456e-02 1.200000e+00 8.280343e-02 1.300000e+00 9.258865e-02 1.400000e+00 1.023945e-01 1.500000e+00 1.122059e-01 1.600000e+00 1.220172e-01 1.700000e+00 1.318285e-01 1.800000e+00 1.416399e-01 1.000000e-01 5.964764e-08 2.000000e-01 1.075754e-05 3.000000e-01 1.104592e-03 4.000000e-01 7.437503e-03 5.000000e-01 1.596827e-02 6.000000e-01 2.509871e-02 7.000000e-01 3.448764e-02 8.000000e-01 4.401844e-02 9.000000e-01 5.363837e-02 1.000000e+00 6.331931e-02 1.100000e+00 7.304456e-02 1.200000e+00 8.280343e-02 1.300000e+00 9.258865e-02 1.400000e+00 1.023945e-01 1.500000e+00 1.122059e-01 1.600000e+00 1.220172e-01 1.700000e+00 1.318285e-01 1.800000e+00 1.416399e-01 1.000000e-01 5.964764e-08 2.000000e-01 1.075754e-05 3.000000e-01 1.104592e-03 4.000000e-01 7.437503e-03 5.000000e-01 1.596827e-02 6.000000e-01 2.509871e-02 7.000000e-01 3.448764e-02 8.000000e-01 4.401844e-02 9.000000e-01 5.363837e-02 1.000000e+00 6.331931e-02 1.100000e+00 7.304456e-02 1.200000e+00 8.280343e-02 1.300000e+00 9.258865e-02 1.400000e+00 1.023945e-01 1.500000e+00 1.122059e-01 1.600000e+00 1.220172e-01 1.700000e+00 1.318285e-01 1.800000e+00 1.416399e-01 1.000000e-01 5.964764e-08 2.000000e-01 1.075754e-05 3.000000e-01 1.104592e-03 4.000000e-01 7.437503e-03 5.000000e-01 1.596827e-02 6.000000e-01 2.509871e-02 7.000000e-01 3.448764e-02 8.000000e-01 4.401844e-02 9.000000e-01 5.363837e-02 1.000000e+00 6.331931e-02 1.100000e+00 7.304456e-02 1.200000e+00 8.280343e-02 1.300000e+00 9.258865e-02 1.400000e+00 1.023945e-01 1.500000e+00 1.122059e-01 1.600000e+00 1.220172e-01 1.700000e+00 1.318285e-01 1.800000e+00 1.416399e-01 1.000000e-01 5.964764e-08 2.000000e-01 1.075754e-05 3.000000e-01 1.104592e-03 4.000000e-01 7.437503e-03 5.000000e-01 1.596827e-02 6.000000e-01 2.509871e-02 7.000000e-01 3.448764e-02 8.000000e-01 4.401844e-02 9.000000e-01 5.363837e-02 1.000000e+00 6.331931e-02 1.100000e+00 7.304456e-02 1.200000e+00 8.280343e-02 1.300000e+00 9.258865e-02 1.400000e+00 1.023945e-01 1.500000e+00 1.122059e-01 1.600000e+00 1.220172e-01 1.700000e+00 1.318285e-01 1.800000e+00 1.416399e-01 1.000000e-01 5.964764e-08 2.000000e-01 1.075754e-05 3.000000e-01 1.104592e-03 4.000000e-01 7.437503e-03 5.000000e-01 1.596827e-02 6.000000e-01 2.509871e-02 7.000000e-01 3.448764e-02 8.000000e-01 4.401844e-02 9.000000e-01 5.363837e-02 1.000000e+00 6.331931e-02 1.100000e+00 7.304456e-02 1.200000e+00 8.280343e-02 1.300000e+00 9.258865e-02 1.400000e+00 1.023945e-01 1.500000e+00 1.122059e-01 1.600000e+00 1.220172e-01 1.700000e+00 1.318285e-01 1.800000e+00 1.416399e-01 1.000000e-01 3.846519e-11 2.000000e-01 5.902905e-10 3.000000e-01 9.092285e-09 4.000000e-01 1.405401e-07 5.000000e-01 2.176126e-06 6.000000e-01 3.346678e-05 7.000000e-01 4.618470e-04 8.000000e-01 3.295830e-03 9.000000e-01 9.453509e-03 1.000000e+00 1.725865e-02 1.100000e+00 2.579351e-02 1.200000e+00 3.471080e-02 1.300000e+00 4.385790e-02 1.400000e+00 5.315674e-02 1.500000e+00 6.256267e-02 1.600000e+00 7.204794e-02 1.700000e+00 8.159423e-02 1.800000e+00 9.118886e-02 1.000000e-01 3.745285e-11 2.000000e-01 5.813821e-10 3.000000e-01 9.023760e-09 4.000000e-01 1.400699e-07 5.000000e-01 2.173260e-06 6.000000e-01 3.345157e-05 7.000000e-01 4.617862e-04 8.000000e-01 3.295726e-03 9.000000e-01 9.453412e-03 1.000000e+00 1.725857e-02 1.100000e+00 2.579344e-02 1.200000e+00 3.471074e-02 1.300000e+00 4.385784e-02 1.400000e+00 5.315669e-02 1.500000e+00 6.256262e-02 1.600000e+00 7.204789e-02 1.700000e+00 8.159419e-02 1.800000e+00 9.118881e-02 1.000000e-01 3.741536e-11 2.000000e-01 5.810293e-10 3.000000e-01 9.020855e-09 4.000000e-01 1.400484e-07 5.000000e-01 2.173116e-06 6.000000e-01 3.345071e-05 7.000000e-01 4.617823e-04 8.000000e-01 3.295719e-03 9.000000e-01 9.453406e-03 1.000000e+00 1.725856e-02 1.100000e+00 2.579343e-02 1.200000e+00 3.471073e-02 1.300000e+00 4.385784e-02 1.400000e+00 5.315669e-02 1.500000e+00 6.256261e-02 1.600000e+00 7.204789e-02 1.700000e+00 8.159419e-02 1.800000e+00 9.118881e-02 1.000000e-01 3.741397e-11 2.000000e-01 5.810154e-10 3.000000e-01 9.020732e-09 4.000000e-01 1.400474e-07 5.000000e-01 2.173109e-06 6.000000e-01 3.345067e-05 7.000000e-01 4.617821e-04 8.000000e-01 3.295718e-03 9.000000e-01 9.453405e-03 1.000000e+00 1.725856e-02 1.100000e+00 2.579343e-02 1.200000e+00 3.471073e-02 1.300000e+00 4.385784e-02 1.400000e+00 5.315669e-02 1.500000e+00 6.256261e-02 1.600000e+00 7.204789e-02 1.700000e+00 8.159419e-02 1.800000e+00 9.118881e-02 1.000000e-01 3.741393e-11 2.000000e-01 5.810148e-10 3.000000e-01 9.020727e-09 4.000000e-01 1.400474e-07 5.000000e-01 2.173109e-06 6.000000e-01 3.345067e-05 7.000000e-01 4.617821e-04 8.000000e-01 3.295718e-03 9.000000e-01 9.453405e-03 1.000000e+00 1.725856e-02 1.100000e+00 2.579343e-02 1.200000e+00 3.471073e-02 1.300000e+00 4.385784e-02 1.400000e+00 5.315669e-02 1.500000e+00 6.256261e-02 1.600000e+00 7.204789e-02 1.700000e+00 8.159419e-02 1.800000e+00 9.118881e-02 1.000000e-01 3.741392e-11 2.000000e-01 5.810148e-10 3.000000e-01 9.020727e-09 4.000000e-01 1.400474e-07 5.000000e-01 2.173109e-06 6.000000e-01 3.345067e-05 7.000000e-01 4.617820e-04 8.000000e-01 3.295718e-03 9.000000e-01 9.453405e-03 1.000000e+00 1.725856e-02 1.100000e+00 2.579343e-02 1.200000e+00 3.471073e-02 1.300000e+00 4.385784e-02 1.400000e+00 5.315669e-02 1.500000e+00 6.256261e-02 1.600000e+00 7.204789e-02 1.700000e+00 8.159419e-02 1.800000e+00 9.118881e-02 1.000000e-01 3.741392e-11 2.000000e-01 5.810148e-10 3.000000e-01 9.020727e-09 4.000000e-01 1.400474e-07 5.000000e-01 2.173109e-06 6.000000e-01 3.345067e-05 7.000000e-01 4.617820e-04 8.000000e-01 3.295718e-03 9.000000e-01 9.453405e-03 1.000000e+00 1.725856e-02 1.100000e+00 2.579343e-02 1.200000e+00 3.471073e-02 1.300000e+00 4.385784e-02 1.400000e+00 5.315669e-02 1.500000e+00 6.256261e-02 1.600000e+00 7.204789e-02 1.700000e+00 8.159419e-02 1.800000e+00 9.118881e-02 1.000000e-01 3.741392e-11 2.000000e-01 5.810148e-10 3.000000e-01 9.020727e-09 4.000000e-01 1.400474e-07 5.000000e-01 2.173109e-06 6.000000e-01 3.345067e-05 7.000000e-01 4.617820e-04 8.000000e-01 3.295718e-03 9.000000e-01 9.453405e-03 1.000000e+00 1.725856e-02 1.100000e+00 2.579343e-02 1.200000e+00 3.471073e-02 1.300000e+00 4.385784e-02 1.400000e+00 5.315669e-02 1.500000e+00 6.256261e-02 1.600000e+00 7.204789e-02 1.700000e+00 8.159419e-02 1.800000e+00 9.118881e-02 1.000000e-01 3.741392e-11 2.000000e-01 5.810148e-10 3.000000e-01 9.020727e-09 4.000000e-01 1.400474e-07 5.000000e-01 2.173109e-06 6.000000e-01 3.345067e-05 7.000000e-01 4.617820e-04 8.000000e-01 3.295718e-03 9.000000e-01 9.453405e-03 1.000000e+00 1.725856e-02 1.100000e+00 2.579343e-02 1.200000e+00 3.471073e-02 1.300000e+00 4.385784e-02 1.400000e+00 5.315669e-02 1.500000e+00 6.256261e-02 1.600000e+00 7.204789e-02 1.700000e+00 8.159419e-02 1.800000e+00 9.118881e-02 tmpk8ny_4pz/tests/bsim3/pmos/reference/acVd.standard0000644000175000017500000000507413546075722022660 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 0.1 -1.14567e-28 1.846967e-11 3.36668091154355e-15 7.77476210505076e-15 0.2 -1.24957e-28 8.822073e-10 3.36668091154355e-15 1.09757029717195e-14 0.3 -5.62652e-28 4.214095e-08 3.36668091154355e-15 1.33711036202847e-14 0.4 -1.75093e-26 2.012898e-06 3.36668091154355e-15 1.52080041176335e-14 0.5 -5.66402e-25 9.597089e-05 3.36668091154355e-15 1.66305045027817e-14 0.6 -1.44999e-23 4.210524e-03 3.36668091154355e-15 1.70325046116249e-14 0.7 -9.58368e-23 4.725154e-02 3.36668091154355e-15 9.76992264524919e-15 0.8 -1.20608e-22 7.738527e-02 3.36668091154355e-15 4.25499115205742e-15 0.9 -1.18193e-22 8.688912e-02 3.36668091154355e-15 2.48486067278687e-15 1 -1.13289e-22 9.097046e-02 3.36668091154355e-15 1.71899046542417e-15 1.1 -1.08743e-22 9.316859e-02 3.36668091154355e-15 1.30464035323707e-15 1.2 -1.04832e-22 9.452613e-02 3.36668091154355e-15 1.04791028372628e-15 1.3 -1.01483e-22 9.544255e-02 3.36668091154355e-15 8.74181236688384e-16 1.4 -9.85866e-23 9.610069e-02 3.36668091154355e-15 7.49161202838665e-16 1.5 -9.60539e-23 9.659530e-02 3.36668091154355e-15 6.55049177357423e-16 1.6 -9.38139e-23 9.698009e-02 3.36668091154355e-15 5.81727157505166e-16 1.7 -9.18130e-23 9.728772e-02 3.36668091154355e-15 5.23034141613776e-16 1.8 -9.22381e-23 9.747879e-02 3.36668091154355e-15 4.86662131765896e-16 0.1 -6.09796e-24 4.258885e-12 3.36668091154355e-15 7.76979210370512e-15 0.2 -1.11407e-22 6.610724e-11 3.36668091154355e-15 1.09670029693639e-14 0.3 -1.71151e-21 1.026340e-09 3.36668091154355e-15 1.33594036171168e-14 0.4 -2.28425e-20 1.593454e-08 3.36668091154355e-15 1.51940041138429e-14 0.5 -2.68452e-19 2.473923e-07 3.36668091154355e-15 1.66301045026734e-14 0.6 -2.80801e-18 3.840639e-06 3.36668091154355e-15 1.7773504812254e-14 0.7 -2.63620e-17 5.956181e-05 3.36668091154355e-15 1.86880050598589e-14 0.8 -2.21016e-16 9.090421e-04 3.36668091154355e-15 1.92787052197936e-14 0.9 -1.41079e-15 1.124076e-02 3.36668091154355e-15 1.78061048210806e-14 1 -3.44877e-15 4.747479e-02 3.36668091154355e-15 1.07428029086608e-14 1.1 -3.84284e-15 7.216491e-02 3.36668091154355e-15 5.74637155585517e-15 1.2 -3.66222e-15 8.255757e-02 3.36668091154355e-15 3.61907097987926e-15 1.3 -3.43311e-15 8.761430e-02 3.36668091154355e-15 2.57826069807533e-15 1.4 -3.23187e-15 9.049374e-02 3.36668091154355e-15 1.98353053704955e-15 1.5 -3.06300e-15 9.232421e-02 3.36668091154355e-15 1.60452043443091e-15 1.6 -2.92097e-15 9.358076e-02 3.36668091154355e-15 1.34384036385064e-15 1.7 -2.80005e-15 9.449271e-02 3.36668091154355e-15 1.15436031254809e-15 1.8 -2.69571e-15 9.518283e-02 3.36668091154355e-15 1.01078027367317e-15 tmpk8ny_4pz/tests/bsim3/pmos/qaSpec0000644000175000017500000001370713546075722017464 0ustar carstencarsten // // Test specification for bsim3 (version 3.3.0) // // // Simulator specific information // These arguments are added to the model card // specification to invoke the desired model in // different simulators (which can have different // names or levels for the same model) and to switch // between nType and pType polarities. // It is assumed that there are no polarity specific // parameters. // `ifdef spice nTypeSelectionArguments pmos level=7 version=3.2.4 pTypeSelectionArguments nmos level=7 version=3.2.4 `endif `ifdef ngspice nTypeSelectionArguments pmos level=8 version=3.3.0 pTypeSelectionArguments nmos level=8 version=3.3.0 `endif `ifdef hspice nTypeSelectionArguments pmos level=53 version=3.3.0 pTypeSelectionArguments nmos level=53 version=3.3.0 `endif // // General test-independent information // keyLetter m pins d g s b linearScale w l ps pd areaScale as ad temperature 27 -50 150 checkPolarity no symmetricPins d s scaleParameters m // // Specific tests // test dcSweep_lw1 biases V(s)=0 V(b)=0 biasList V(g)=0.2,0.4,0.6,0.8,1.0,1.2,1.4,1.6,1.8 biasSweep V(d)=0.1,1.8,0.1 outputs I(d) instanceParameters w=10.0e-06 l=1.0e-06 modelParameters parameters/pmosParameters test dcSweep_lw1_vb1 biases V(s)=0 V(b)=-0.2 biasList V(g)=0.2,0.4,0.6,0.8,1.0,1.2,1.4,1.6,1.8 biasSweep V(d)=0.1,1.8,0.1 outputs I(d) instanceParameters w=10.0e-06 l=1.0e-06 modelParameters parameters/pmosParameters test dcSweep_lw2 biases V(s)=0 V(b)=0 biasList V(g)=0.2,0.4,0.6,0.8,1.0,1.2,1.4,1.6,1.8 biasSweep V(d)=0.1,1.8,0.1 outputs I(d) instanceParameters w=10.0e-06 l=0.2e-06 modelParameters parameters/pmosParameters test dcSweep_lw3 biases V(s)=0 V(b)=0 biasList V(g)=0.2,0.4,0.6,0.8,1.0,1.2,1.4,1.6,1.8 biasSweep V(d)=0.1,1.8,0.1 outputs I(d) instanceParameters w=1.0e-06 l=0.2e-06 modelParameters parameters/pmosParameters test dcSweep_lw4 biases V(s)=0 V(b)=0 biasList V(g)=0.2,0.4,0.6,0.8,1.0,1.2,1.4,1.6,1.8 biasSweep V(d)=0.1,1.8,0.1 outputs I(d) instanceParameters w=1.0e-06 l=1.0e-06 modelParameters parameters/pmosParameters test dcSweep_nrd_nrs biases V(s)=0 V(b)=0 biasList V(g)=0.2,0.4,0.6,0.8,1.0,1.2,1.4,1.6,1.8 biasSweep V(d)=0.1,1.8,0.1 outputs I(d) instanceParameters w=10.0e-06 l=1.0e-06 nrd=2.0 nrs=2.0 modelParameters parameters/pmosParameters test acVd temperature 27 150 biases V(s)=0 V(b)=0 V(g)=1.8 biasSweep V(d)=0.1,1.8,0.1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters w=10.0e-06 l=1.0e-06 modelParameters parameters/pmosParameters test acFreq temperature 27 biases V(s)=0 V(b)=0 V(d)=1.8 V(g)=1.8 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-06 l=1.0e-06 modelParameters parameters/pmosParameters test acFreq_mobmod temperature 27 biases V(s)=0 V(b)=0 V(d)=1.8 V(g)=1.8 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-06 l=1.0e-06 modelParameters parameters/pmosParameters modelParameters mobmod=2 test acFreq_capmod temperature 27 biases V(s)=0 V(b)=0 V(d)=1.8 V(g)=1.8 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-06 l=1.0e-06 modelParameters parameters/pmosParameters modelParameters capmod=1 test acFreq_acnqsmod temperature 27 biases V(s)=0 V(b)=0 V(d)=1.8 V(g)=1.8 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-06 l=1.0e-06 modelParameters parameters/pmosParameters modelParameters acnqsmod=1 test acFreq_xpart temperature 27 biases V(s)=0 V(b)=0 V(d)=1.8 V(g)=1.8 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-06 l=1.0e-06 modelParameters parameters/pmosParameters modelParameters xpart=1 test noise1 temperature 27 biases V(s)=0 V(b)=0 V(d)=1.6 biasList V(g)=1.2,1.4,1.6 freq dec 10 1e3 1e8 outputs N(d) instanceParameters w=10.0e-06 l=0.2e-06 modelParameters parameters/pmosParameters modelParameters noimod=1 kf=1e-30 af=1.2 ef=1.1 test noise2 temperature 27 biases V(s)=0 V(b)=0 V(d)=1.6 biasList V(g)=1.2,1.4,1.6 freq dec 10 1e3 1e8 outputs N(d) instanceParameters w=10.0e-06 l=0.2e-06 modelParameters parameters/pmosParameters modelParameters noimod=2 noia=9.9e+18 noib=2.4e+03 noic=1.4e-12 em=4.1e7 ef=1.1 tmpk8ny_4pz/tests/bsim3/pmos/run0000755000175000017500000000023613546075722017050 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmpk8ny_4pz/tests/bsim3soipd/0000755000175000017500000000000013546075722016376 5ustar carstencarstentmpk8ny_4pz/tests/bsim3soipd/RampVg2.out0000644000175000017500000010425313546075722020412 0ustar carstencarsten Circuit: * BSIMSOI (PD) example Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Warning: Pd = 0 is less than W. Warning: Ps = 0 is less than W. Initial Transient Solution -------------------------- Node Voltage ---- ------- d 1.5 g 0 e 0 s 0 b 0 vb#branch 0 vs#branch 1.17881e-09 ve#branch 0 vg#branch 1.5e-20 vd#branch -1.17881e-09 No. of Data Rows : 1029 * BSIMSOI (PD) example -------------------------------------------------------------------------------- Index time v(g)/10 -------------------------------------------------------------------------------- 0 0.000000e+00 0.000000e+00 1 1.000000e-14 0.000000e+00 2 2.000000e-14 0.000000e+00 3 4.000000e-14 0.000000e+00 4 8.000000e-14 0.000000e+00 5 1.600000e-13 0.000000e+00 6 3.200000e-13 0.000000e+00 7 6.400000e-13 0.000000e+00 8 1.280000e-12 0.000000e+00 9 2.280000e-12 0.000000e+00 10 3.280000e-12 0.000000e+00 11 4.280000e-12 0.000000e+00 12 5.280000e-12 0.000000e+00 13 6.280000e-12 0.000000e+00 14 7.280000e-12 0.000000e+00 15 8.280000e-12 0.000000e+00 16 9.280000e-12 0.000000e+00 17 1.028000e-11 0.000000e+00 18 1.128000e-11 0.000000e+00 19 1.228000e-11 0.000000e+00 20 1.328000e-11 0.000000e+00 21 1.428000e-11 0.000000e+00 22 1.528000e-11 0.000000e+00 23 1.628000e-11 0.000000e+00 24 1.728000e-11 0.000000e+00 25 1.828000e-11 0.000000e+00 26 1.928000e-11 0.000000e+00 27 2.000000e-11 0.000000e+00 28 2.010000e-11 2.000000e-04 29 2.030000e-11 6.000000e-04 30 2.070000e-11 1.400000e-03 31 2.150000e-11 3.000000e-03 32 2.250000e-11 5.000000e-03 33 2.350000e-11 7.000000e-03 34 2.450000e-11 9.000000e-03 35 2.550000e-11 1.100000e-02 36 2.650000e-11 1.300000e-02 37 2.750000e-11 1.500000e-02 38 2.850000e-11 1.700000e-02 39 2.950000e-11 1.900000e-02 40 3.050000e-11 2.100000e-02 41 3.150000e-11 2.300000e-02 42 3.250000e-11 2.500000e-02 43 3.350000e-11 2.700000e-02 44 3.450000e-11 2.900000e-02 45 3.550000e-11 3.100000e-02 46 3.650000e-11 3.300000e-02 47 3.750000e-11 3.500000e-02 48 3.850000e-11 3.700000e-02 49 3.950000e-11 3.900000e-02 50 4.050000e-11 4.100000e-02 51 4.150000e-11 4.300000e-02 52 4.250000e-11 4.500000e-02 53 4.350000e-11 4.700000e-02 54 4.450000e-11 4.900000e-02 Index time v(g)/10 -------------------------------------------------------------------------------- 55 4.550000e-11 5.100000e-02 56 4.650000e-11 5.300000e-02 57 4.750000e-11 5.500000e-02 58 4.850000e-11 5.700000e-02 59 4.950000e-11 5.900000e-02 60 5.050000e-11 6.100000e-02 61 5.150000e-11 6.300000e-02 62 5.250000e-11 6.500000e-02 63 5.350000e-11 6.700000e-02 64 5.450000e-11 6.900000e-02 65 5.550000e-11 7.100000e-02 66 5.650000e-11 7.300000e-02 67 5.750000e-11 7.500000e-02 68 5.850000e-11 7.700000e-02 69 5.950000e-11 7.900000e-02 70 6.050000e-11 8.100000e-02 71 6.150000e-11 8.300000e-02 72 6.250000e-11 8.500000e-02 73 6.350000e-11 8.700000e-02 74 6.450000e-11 8.900000e-02 75 6.550000e-11 9.100000e-02 76 6.650000e-11 9.300000e-02 77 6.750000e-11 9.500000e-02 78 6.850000e-11 9.700000e-02 79 6.950000e-11 9.900000e-02 80 7.050000e-11 1.010000e-01 81 7.150000e-11 1.030000e-01 82 7.250000e-11 1.050000e-01 83 7.350000e-11 1.070000e-01 84 7.450000e-11 1.090000e-01 85 7.550000e-11 1.110000e-01 86 7.650000e-11 1.130000e-01 87 7.750000e-11 1.150000e-01 88 7.850000e-11 1.170000e-01 89 7.950000e-11 1.190000e-01 90 8.050000e-11 1.210000e-01 91 8.150000e-11 1.230000e-01 92 8.250000e-11 1.250000e-01 93 8.350000e-11 1.270000e-01 94 8.450000e-11 1.290000e-01 95 8.550000e-11 1.310000e-01 96 8.650000e-11 1.330000e-01 97 8.750000e-11 1.350000e-01 98 8.850000e-11 1.370000e-01 99 8.950000e-11 1.390000e-01 100 9.050000e-11 1.410000e-01 101 9.150000e-11 1.430000e-01 102 9.250000e-11 1.450000e-01 103 9.350000e-11 1.470000e-01 104 9.450000e-11 1.490000e-01 105 9.550000e-11 1.510000e-01 106 9.650000e-11 1.530000e-01 107 9.750000e-11 1.550000e-01 108 9.850000e-11 1.570000e-01 109 9.950000e-11 1.590000e-01 110 1.005000e-10 1.610000e-01 111 1.015000e-10 1.630000e-01 112 1.025000e-10 1.650000e-01 Index time v(g)/10 -------------------------------------------------------------------------------- 113 1.035000e-10 1.670000e-01 114 1.045000e-10 1.690000e-01 115 1.055000e-10 1.710000e-01 116 1.065000e-10 1.730000e-01 117 1.075000e-10 1.750000e-01 118 1.085000e-10 1.770000e-01 119 1.095000e-10 1.790000e-01 120 1.105000e-10 1.810000e-01 121 1.115000e-10 1.830000e-01 122 1.125000e-10 1.850000e-01 123 1.135000e-10 1.870000e-01 124 1.145000e-10 1.890000e-01 125 1.155000e-10 1.910000e-01 126 1.165000e-10 1.930000e-01 127 1.175000e-10 1.950000e-01 128 1.185000e-10 1.970000e-01 129 1.195000e-10 1.990000e-01 130 1.200000e-10 2.000000e-01 131 1.201000e-10 2.000000e-01 132 1.203000e-10 2.000000e-01 133 1.207000e-10 2.000000e-01 134 1.215000e-10 2.000000e-01 135 1.225000e-10 2.000000e-01 136 1.235000e-10 2.000000e-01 137 1.245000e-10 2.000000e-01 138 1.255000e-10 2.000000e-01 139 1.265000e-10 2.000000e-01 140 1.275000e-10 2.000000e-01 141 1.285000e-10 2.000000e-01 142 1.295000e-10 2.000000e-01 143 1.305000e-10 2.000000e-01 144 1.315000e-10 2.000000e-01 145 1.325000e-10 2.000000e-01 146 1.335000e-10 2.000000e-01 147 1.345000e-10 2.000000e-01 148 1.355000e-10 2.000000e-01 149 1.365000e-10 2.000000e-01 150 1.375000e-10 2.000000e-01 151 1.385000e-10 2.000000e-01 152 1.395000e-10 2.000000e-01 153 1.405000e-10 2.000000e-01 154 1.415000e-10 2.000000e-01 155 1.425000e-10 2.000000e-01 156 1.435000e-10 2.000000e-01 157 1.445000e-10 2.000000e-01 158 1.455000e-10 2.000000e-01 159 1.465000e-10 2.000000e-01 160 1.475000e-10 2.000000e-01 161 1.485000e-10 2.000000e-01 162 1.495000e-10 2.000000e-01 163 1.505000e-10 2.000000e-01 164 1.515000e-10 2.000000e-01 165 1.525000e-10 2.000000e-01 166 1.535000e-10 2.000000e-01 167 1.545000e-10 2.000000e-01 168 1.555000e-10 2.000000e-01 169 1.565000e-10 2.000000e-01 170 1.575000e-10 2.000000e-01 Index time v(g)/10 -------------------------------------------------------------------------------- 171 1.585000e-10 2.000000e-01 172 1.595000e-10 2.000000e-01 173 1.605000e-10 2.000000e-01 174 1.615000e-10 2.000000e-01 175 1.625000e-10 2.000000e-01 176 1.635000e-10 2.000000e-01 177 1.645000e-10 2.000000e-01 178 1.655000e-10 2.000000e-01 179 1.665000e-10 2.000000e-01 180 1.675000e-10 2.000000e-01 181 1.685000e-10 2.000000e-01 182 1.695000e-10 2.000000e-01 183 1.705000e-10 2.000000e-01 184 1.715000e-10 2.000000e-01 185 1.725000e-10 2.000000e-01 186 1.735000e-10 2.000000e-01 187 1.745000e-10 2.000000e-01 188 1.755000e-10 2.000000e-01 189 1.765000e-10 2.000000e-01 190 1.775000e-10 2.000000e-01 191 1.785000e-10 2.000000e-01 192 1.795000e-10 2.000000e-01 193 1.805000e-10 2.000000e-01 194 1.815000e-10 2.000000e-01 195 1.825000e-10 2.000000e-01 196 1.835000e-10 2.000000e-01 197 1.845000e-10 2.000000e-01 198 1.855000e-10 2.000000e-01 199 1.865000e-10 2.000000e-01 200 1.875000e-10 2.000000e-01 201 1.885000e-10 2.000000e-01 202 1.895000e-10 2.000000e-01 203 1.905000e-10 2.000000e-01 204 1.915000e-10 2.000000e-01 205 1.925000e-10 2.000000e-01 206 1.935000e-10 2.000000e-01 207 1.945000e-10 2.000000e-01 208 1.955000e-10 2.000000e-01 209 1.965000e-10 2.000000e-01 210 1.975000e-10 2.000000e-01 211 1.985000e-10 2.000000e-01 212 1.995000e-10 2.000000e-01 213 2.005000e-10 2.000000e-01 214 2.015000e-10 2.000000e-01 215 2.025000e-10 2.000000e-01 216 2.035000e-10 2.000000e-01 217 2.045000e-10 2.000000e-01 218 2.055000e-10 2.000000e-01 219 2.065000e-10 2.000000e-01 220 2.075000e-10 2.000000e-01 221 2.085000e-10 2.000000e-01 222 2.095000e-10 2.000000e-01 223 2.105000e-10 2.000000e-01 224 2.115000e-10 2.000000e-01 225 2.125000e-10 2.000000e-01 226 2.135000e-10 2.000000e-01 227 2.145000e-10 2.000000e-01 228 2.155000e-10 2.000000e-01 Index time v(g)/10 -------------------------------------------------------------------------------- 229 2.165000e-10 2.000000e-01 230 2.175000e-10 2.000000e-01 231 2.185000e-10 2.000000e-01 232 2.195000e-10 2.000000e-01 233 2.205000e-10 2.000000e-01 234 2.215000e-10 2.000000e-01 235 2.225000e-10 2.000000e-01 236 2.235000e-10 2.000000e-01 237 2.245000e-10 2.000000e-01 238 2.255000e-10 2.000000e-01 239 2.265000e-10 2.000000e-01 240 2.275000e-10 2.000000e-01 241 2.285000e-10 2.000000e-01 242 2.295000e-10 2.000000e-01 243 2.305000e-10 2.000000e-01 244 2.315000e-10 2.000000e-01 245 2.325000e-10 2.000000e-01 246 2.335000e-10 2.000000e-01 247 2.345000e-10 2.000000e-01 248 2.355000e-10 2.000000e-01 249 2.365000e-10 2.000000e-01 250 2.375000e-10 2.000000e-01 251 2.385000e-10 2.000000e-01 252 2.395000e-10 2.000000e-01 253 2.405000e-10 2.000000e-01 254 2.415000e-10 2.000000e-01 255 2.425000e-10 2.000000e-01 256 2.435000e-10 2.000000e-01 257 2.445000e-10 2.000000e-01 258 2.455000e-10 2.000000e-01 259 2.465000e-10 2.000000e-01 260 2.475000e-10 2.000000e-01 261 2.485000e-10 2.000000e-01 262 2.495000e-10 2.000000e-01 263 2.505000e-10 2.000000e-01 264 2.515000e-10 2.000000e-01 265 2.525000e-10 2.000000e-01 266 2.535000e-10 2.000000e-01 267 2.545000e-10 2.000000e-01 268 2.555000e-10 2.000000e-01 269 2.565000e-10 2.000000e-01 270 2.575000e-10 2.000000e-01 271 2.585000e-10 2.000000e-01 272 2.595000e-10 2.000000e-01 273 2.605000e-10 2.000000e-01 274 2.615000e-10 2.000000e-01 275 2.625000e-10 2.000000e-01 276 2.635000e-10 2.000000e-01 277 2.645000e-10 2.000000e-01 278 2.655000e-10 2.000000e-01 279 2.665000e-10 2.000000e-01 280 2.675000e-10 2.000000e-01 281 2.685000e-10 2.000000e-01 282 2.695000e-10 2.000000e-01 283 2.705000e-10 2.000000e-01 284 2.715000e-10 2.000000e-01 285 2.725000e-10 2.000000e-01 286 2.735000e-10 2.000000e-01 Index time v(g)/10 -------------------------------------------------------------------------------- 287 2.745000e-10 2.000000e-01 288 2.755000e-10 2.000000e-01 289 2.765000e-10 2.000000e-01 290 2.775000e-10 2.000000e-01 291 2.785000e-10 2.000000e-01 292 2.795000e-10 2.000000e-01 293 2.805000e-10 2.000000e-01 294 2.815000e-10 2.000000e-01 295 2.825000e-10 2.000000e-01 296 2.835000e-10 2.000000e-01 297 2.845000e-10 2.000000e-01 298 2.855000e-10 2.000000e-01 299 2.865000e-10 2.000000e-01 300 2.875000e-10 2.000000e-01 301 2.885000e-10 2.000000e-01 302 2.895000e-10 2.000000e-01 303 2.905000e-10 2.000000e-01 304 2.915000e-10 2.000000e-01 305 2.925000e-10 2.000000e-01 306 2.935000e-10 2.000000e-01 307 2.945000e-10 2.000000e-01 308 2.955000e-10 2.000000e-01 309 2.965000e-10 2.000000e-01 310 2.975000e-10 2.000000e-01 311 2.985000e-10 2.000000e-01 312 2.995000e-10 2.000000e-01 313 3.005000e-10 2.000000e-01 314 3.015000e-10 2.000000e-01 315 3.025000e-10 2.000000e-01 316 3.035000e-10 2.000000e-01 317 3.045000e-10 2.000000e-01 318 3.055000e-10 2.000000e-01 319 3.065000e-10 2.000000e-01 320 3.075000e-10 2.000000e-01 321 3.085000e-10 2.000000e-01 322 3.095000e-10 2.000000e-01 323 3.105000e-10 2.000000e-01 324 3.115000e-10 2.000000e-01 325 3.125000e-10 2.000000e-01 326 3.135000e-10 2.000000e-01 327 3.145000e-10 2.000000e-01 328 3.155000e-10 2.000000e-01 329 3.165000e-10 2.000000e-01 330 3.175000e-10 2.000000e-01 331 3.185000e-10 2.000000e-01 332 3.195000e-10 2.000000e-01 333 3.200000e-10 2.000000e-01 334 3.201000e-10 1.998000e-01 335 3.203000e-10 1.994000e-01 336 3.207000e-10 1.986000e-01 337 3.215000e-10 1.970000e-01 338 3.225000e-10 1.950000e-01 339 3.235000e-10 1.930000e-01 340 3.245000e-10 1.910000e-01 341 3.255000e-10 1.890000e-01 342 3.265000e-10 1.870000e-01 343 3.275000e-10 1.850000e-01 344 3.285000e-10 1.830000e-01 Index time v(g)/10 -------------------------------------------------------------------------------- 345 3.295000e-10 1.810000e-01 346 3.305000e-10 1.790000e-01 347 3.315000e-10 1.770000e-01 348 3.325000e-10 1.750000e-01 349 3.335000e-10 1.730000e-01 350 3.345000e-10 1.710000e-01 351 3.355000e-10 1.690000e-01 352 3.365000e-10 1.670000e-01 353 3.375000e-10 1.650000e-01 354 3.385000e-10 1.630000e-01 355 3.395000e-10 1.610000e-01 356 3.405000e-10 1.590000e-01 357 3.415000e-10 1.570000e-01 358 3.425000e-10 1.550000e-01 359 3.435000e-10 1.530000e-01 360 3.445000e-10 1.510000e-01 361 3.455000e-10 1.490000e-01 362 3.465000e-10 1.470000e-01 363 3.475000e-10 1.450000e-01 364 3.485000e-10 1.430000e-01 365 3.495000e-10 1.410000e-01 366 3.505000e-10 1.390000e-01 367 3.515000e-10 1.370000e-01 368 3.525000e-10 1.350000e-01 369 3.535000e-10 1.330000e-01 370 3.545000e-10 1.310000e-01 371 3.555000e-10 1.290000e-01 372 3.565000e-10 1.270000e-01 373 3.575000e-10 1.250000e-01 374 3.585000e-10 1.230000e-01 375 3.595000e-10 1.210000e-01 376 3.605000e-10 1.190000e-01 377 3.615000e-10 1.170000e-01 378 3.625000e-10 1.150000e-01 379 3.635000e-10 1.130000e-01 380 3.645000e-10 1.110000e-01 381 3.655000e-10 1.090000e-01 382 3.665000e-10 1.070000e-01 383 3.675000e-10 1.050000e-01 384 3.685000e-10 1.030000e-01 385 3.695000e-10 1.010000e-01 386 3.705000e-10 9.900000e-02 387 3.715000e-10 9.700000e-02 388 3.725000e-10 9.500000e-02 389 3.735000e-10 9.300000e-02 390 3.745000e-10 9.100000e-02 391 3.755000e-10 8.900000e-02 392 3.765000e-10 8.700000e-02 393 3.775000e-10 8.500000e-02 394 3.785000e-10 8.300000e-02 395 3.795000e-10 8.100000e-02 396 3.805000e-10 7.900000e-02 397 3.815000e-10 7.700000e-02 398 3.825000e-10 7.500000e-02 399 3.835000e-10 7.300000e-02 400 3.845000e-10 7.100000e-02 401 3.855000e-10 6.900000e-02 402 3.865000e-10 6.700000e-02 Index time v(g)/10 -------------------------------------------------------------------------------- 403 3.875000e-10 6.500000e-02 404 3.885000e-10 6.300000e-02 405 3.895000e-10 6.100000e-02 406 3.905000e-10 5.900000e-02 407 3.915000e-10 5.700000e-02 408 3.925000e-10 5.500000e-02 409 3.935000e-10 5.300000e-02 410 3.945000e-10 5.100000e-02 411 3.955000e-10 4.900000e-02 412 3.965000e-10 4.700000e-02 413 3.975000e-10 4.500000e-02 414 3.985000e-10 4.300000e-02 415 3.995000e-10 4.100000e-02 416 4.005000e-10 3.900000e-02 417 4.015000e-10 3.700000e-02 418 4.025000e-10 3.500000e-02 419 4.035000e-10 3.300000e-02 420 4.045000e-10 3.100000e-02 421 4.055000e-10 2.900000e-02 422 4.065000e-10 2.700000e-02 423 4.075000e-10 2.500000e-02 424 4.085000e-10 2.300000e-02 425 4.095000e-10 2.100000e-02 426 4.105000e-10 1.900000e-02 427 4.115000e-10 1.700000e-02 428 4.125000e-10 1.500000e-02 429 4.135000e-10 1.300000e-02 430 4.145000e-10 1.100000e-02 431 4.155000e-10 9.000000e-03 432 4.165000e-10 7.000000e-03 433 4.175000e-10 5.000000e-03 434 4.185000e-10 3.000000e-03 435 4.195000e-10 1.000000e-03 436 4.200000e-10 3.230922e-17 437 4.201000e-10 0.000000e+00 438 4.203000e-10 0.000000e+00 439 4.207000e-10 0.000000e+00 440 4.215000e-10 0.000000e+00 441 4.225000e-10 0.000000e+00 442 4.235000e-10 0.000000e+00 443 4.245000e-10 0.000000e+00 444 4.255000e-10 0.000000e+00 445 4.265000e-10 0.000000e+00 446 4.275000e-10 0.000000e+00 447 4.285000e-10 0.000000e+00 448 4.295000e-10 0.000000e+00 449 4.305000e-10 0.000000e+00 450 4.315000e-10 0.000000e+00 451 4.325000e-10 0.000000e+00 452 4.335000e-10 0.000000e+00 453 4.345000e-10 0.000000e+00 454 4.355000e-10 0.000000e+00 455 4.365000e-10 0.000000e+00 456 4.375000e-10 0.000000e+00 457 4.385000e-10 0.000000e+00 458 4.395000e-10 0.000000e+00 459 4.405000e-10 0.000000e+00 460 4.415000e-10 0.000000e+00 Index time v(g)/10 -------------------------------------------------------------------------------- 461 4.425000e-10 0.000000e+00 462 4.435000e-10 0.000000e+00 463 4.445000e-10 0.000000e+00 464 4.455000e-10 0.000000e+00 465 4.465000e-10 0.000000e+00 466 4.475000e-10 0.000000e+00 467 4.485000e-10 0.000000e+00 468 4.495000e-10 0.000000e+00 469 4.505000e-10 0.000000e+00 470 4.515000e-10 0.000000e+00 471 4.525000e-10 0.000000e+00 472 4.535000e-10 0.000000e+00 473 4.545000e-10 0.000000e+00 474 4.555000e-10 0.000000e+00 475 4.565000e-10 0.000000e+00 476 4.575000e-10 0.000000e+00 477 4.585000e-10 0.000000e+00 478 4.595000e-10 0.000000e+00 479 4.605000e-10 0.000000e+00 480 4.615000e-10 0.000000e+00 481 4.625000e-10 0.000000e+00 482 4.635000e-10 0.000000e+00 483 4.645000e-10 0.000000e+00 484 4.655000e-10 0.000000e+00 485 4.665000e-10 0.000000e+00 486 4.675000e-10 0.000000e+00 487 4.685000e-10 0.000000e+00 488 4.695000e-10 0.000000e+00 489 4.705000e-10 0.000000e+00 490 4.715000e-10 0.000000e+00 491 4.725000e-10 0.000000e+00 492 4.735000e-10 0.000000e+00 493 4.745000e-10 0.000000e+00 494 4.755000e-10 0.000000e+00 495 4.765000e-10 0.000000e+00 496 4.775000e-10 0.000000e+00 497 4.785000e-10 0.000000e+00 498 4.795000e-10 0.000000e+00 499 4.805000e-10 0.000000e+00 500 4.815000e-10 0.000000e+00 501 4.825000e-10 0.000000e+00 502 4.835000e-10 0.000000e+00 503 4.845000e-10 0.000000e+00 504 4.855000e-10 0.000000e+00 505 4.865000e-10 0.000000e+00 506 4.875000e-10 0.000000e+00 507 4.885000e-10 0.000000e+00 508 4.895000e-10 0.000000e+00 509 4.905000e-10 0.000000e+00 510 4.915000e-10 0.000000e+00 511 4.925000e-10 0.000000e+00 512 4.935000e-10 0.000000e+00 513 4.945000e-10 0.000000e+00 514 4.955000e-10 0.000000e+00 515 4.965000e-10 0.000000e+00 516 4.975000e-10 0.000000e+00 517 4.985000e-10 0.000000e+00 518 4.995000e-10 0.000000e+00 Index time v(g)/10 -------------------------------------------------------------------------------- 519 5.005000e-10 0.000000e+00 520 5.015000e-10 0.000000e+00 521 5.025000e-10 0.000000e+00 522 5.035000e-10 0.000000e+00 523 5.045000e-10 0.000000e+00 524 5.055000e-10 0.000000e+00 525 5.065000e-10 0.000000e+00 526 5.075000e-10 0.000000e+00 527 5.085000e-10 0.000000e+00 528 5.095000e-10 0.000000e+00 529 5.105000e-10 0.000000e+00 530 5.115000e-10 0.000000e+00 531 5.125000e-10 0.000000e+00 532 5.135000e-10 0.000000e+00 533 5.145000e-10 0.000000e+00 534 5.155000e-10 0.000000e+00 535 5.165000e-10 0.000000e+00 536 5.175000e-10 0.000000e+00 537 5.185000e-10 0.000000e+00 538 5.195000e-10 0.000000e+00 539 5.205000e-10 0.000000e+00 540 5.215000e-10 0.000000e+00 541 5.225000e-10 0.000000e+00 542 5.235000e-10 0.000000e+00 543 5.245000e-10 0.000000e+00 544 5.255000e-10 0.000000e+00 545 5.265000e-10 0.000000e+00 546 5.275000e-10 0.000000e+00 547 5.285000e-10 0.000000e+00 548 5.295000e-10 0.000000e+00 549 5.305000e-10 0.000000e+00 550 5.315000e-10 0.000000e+00 551 5.325000e-10 0.000000e+00 552 5.335000e-10 0.000000e+00 553 5.345000e-10 0.000000e+00 554 5.355000e-10 0.000000e+00 555 5.365000e-10 0.000000e+00 556 5.375000e-10 0.000000e+00 557 5.385000e-10 0.000000e+00 558 5.395000e-10 0.000000e+00 559 5.405000e-10 0.000000e+00 560 5.415000e-10 0.000000e+00 561 5.425000e-10 0.000000e+00 562 5.435000e-10 0.000000e+00 563 5.445000e-10 0.000000e+00 564 5.455000e-10 0.000000e+00 565 5.465000e-10 0.000000e+00 566 5.475000e-10 0.000000e+00 567 5.485000e-10 0.000000e+00 568 5.495000e-10 0.000000e+00 569 5.505000e-10 0.000000e+00 570 5.515000e-10 0.000000e+00 571 5.525000e-10 0.000000e+00 572 5.535000e-10 0.000000e+00 573 5.545000e-10 0.000000e+00 574 5.555000e-10 0.000000e+00 575 5.565000e-10 0.000000e+00 576 5.575000e-10 0.000000e+00 Index time v(g)/10 -------------------------------------------------------------------------------- 577 5.585000e-10 0.000000e+00 578 5.595000e-10 0.000000e+00 579 5.605000e-10 0.000000e+00 580 5.615000e-10 0.000000e+00 581 5.625000e-10 0.000000e+00 582 5.635000e-10 0.000000e+00 583 5.645000e-10 0.000000e+00 584 5.655000e-10 0.000000e+00 585 5.665000e-10 0.000000e+00 586 5.675000e-10 0.000000e+00 587 5.685000e-10 0.000000e+00 588 5.695000e-10 0.000000e+00 589 5.705000e-10 0.000000e+00 590 5.715000e-10 0.000000e+00 591 5.725000e-10 0.000000e+00 592 5.735000e-10 0.000000e+00 593 5.745000e-10 0.000000e+00 594 5.755000e-10 0.000000e+00 595 5.765000e-10 0.000000e+00 596 5.775000e-10 0.000000e+00 597 5.785000e-10 0.000000e+00 598 5.795000e-10 0.000000e+00 599 5.805000e-10 0.000000e+00 600 5.815000e-10 0.000000e+00 601 5.825000e-10 0.000000e+00 602 5.835000e-10 0.000000e+00 603 5.845000e-10 0.000000e+00 604 5.855000e-10 0.000000e+00 605 5.865000e-10 0.000000e+00 606 5.875000e-10 0.000000e+00 607 5.885000e-10 0.000000e+00 608 5.895000e-10 0.000000e+00 609 5.905000e-10 0.000000e+00 610 5.915000e-10 0.000000e+00 611 5.925000e-10 0.000000e+00 612 5.935000e-10 0.000000e+00 613 5.945000e-10 0.000000e+00 614 5.955000e-10 0.000000e+00 615 5.965000e-10 0.000000e+00 616 5.975000e-10 0.000000e+00 617 5.985000e-10 0.000000e+00 618 5.995000e-10 0.000000e+00 619 6.005000e-10 0.000000e+00 620 6.015000e-10 0.000000e+00 621 6.025000e-10 0.000000e+00 622 6.035000e-10 0.000000e+00 623 6.045000e-10 0.000000e+00 624 6.055000e-10 0.000000e+00 625 6.065000e-10 0.000000e+00 626 6.075000e-10 0.000000e+00 627 6.085000e-10 0.000000e+00 628 6.095000e-10 0.000000e+00 629 6.105000e-10 0.000000e+00 630 6.115000e-10 0.000000e+00 631 6.125000e-10 0.000000e+00 632 6.135000e-10 0.000000e+00 633 6.145000e-10 0.000000e+00 634 6.155000e-10 0.000000e+00 Index time v(g)/10 -------------------------------------------------------------------------------- 635 6.165000e-10 0.000000e+00 636 6.175000e-10 0.000000e+00 637 6.185000e-10 0.000000e+00 638 6.195000e-10 0.000000e+00 639 6.200000e-10 7.108583e-17 640 6.201000e-10 2.000000e-04 641 6.203000e-10 6.000000e-04 642 6.207000e-10 1.400000e-03 643 6.215000e-10 3.000000e-03 644 6.225000e-10 5.000000e-03 645 6.235000e-10 7.000000e-03 646 6.245000e-10 9.000000e-03 647 6.255000e-10 1.100000e-02 648 6.265000e-10 1.300000e-02 649 6.275000e-10 1.500000e-02 650 6.285000e-10 1.700000e-02 651 6.295000e-10 1.900000e-02 652 6.305000e-10 2.100000e-02 653 6.315000e-10 2.300000e-02 654 6.325000e-10 2.500000e-02 655 6.335000e-10 2.700000e-02 656 6.345000e-10 2.900000e-02 657 6.355000e-10 3.100000e-02 658 6.365000e-10 3.300000e-02 659 6.375000e-10 3.500000e-02 660 6.385000e-10 3.700000e-02 661 6.395000e-10 3.900000e-02 662 6.405000e-10 4.100000e-02 663 6.415000e-10 4.300000e-02 664 6.425000e-10 4.500000e-02 665 6.435000e-10 4.700000e-02 666 6.445000e-10 4.900000e-02 667 6.455000e-10 5.100000e-02 668 6.465000e-10 5.300000e-02 669 6.475000e-10 5.500000e-02 670 6.485000e-10 5.700000e-02 671 6.495000e-10 5.900000e-02 672 6.505000e-10 6.100000e-02 673 6.515000e-10 6.300000e-02 674 6.525000e-10 6.500000e-02 675 6.535000e-10 6.700000e-02 676 6.545000e-10 6.900000e-02 677 6.555000e-10 7.100000e-02 678 6.565000e-10 7.300000e-02 679 6.575000e-10 7.500000e-02 680 6.585000e-10 7.700000e-02 681 6.595000e-10 7.900000e-02 682 6.605000e-10 8.100000e-02 683 6.615000e-10 8.300000e-02 684 6.625000e-10 8.500000e-02 685 6.635000e-10 8.700000e-02 686 6.645000e-10 8.900000e-02 687 6.655000e-10 9.100000e-02 688 6.665000e-10 9.300000e-02 689 6.675000e-10 9.500000e-02 690 6.685000e-10 9.700000e-02 691 6.695000e-10 9.900000e-02 692 6.705000e-10 1.010000e-01 Index time v(g)/10 -------------------------------------------------------------------------------- 693 6.715000e-10 1.030000e-01 694 6.725000e-10 1.050000e-01 695 6.735000e-10 1.070000e-01 696 6.745000e-10 1.090000e-01 697 6.755000e-10 1.110000e-01 698 6.765000e-10 1.130000e-01 699 6.775000e-10 1.150000e-01 700 6.785000e-10 1.170000e-01 701 6.795000e-10 1.190000e-01 702 6.805000e-10 1.210000e-01 703 6.815000e-10 1.230000e-01 704 6.825000e-10 1.250000e-01 705 6.835000e-10 1.270000e-01 706 6.845000e-10 1.290000e-01 707 6.855000e-10 1.310000e-01 708 6.865000e-10 1.330000e-01 709 6.875000e-10 1.350000e-01 710 6.885000e-10 1.370000e-01 711 6.895000e-10 1.390000e-01 712 6.905000e-10 1.410000e-01 713 6.915000e-10 1.430000e-01 714 6.925000e-10 1.450000e-01 715 6.935000e-10 1.470000e-01 716 6.945000e-10 1.490000e-01 717 6.955000e-10 1.510000e-01 718 6.965000e-10 1.530000e-01 719 6.975000e-10 1.550000e-01 720 6.985000e-10 1.570000e-01 721 6.995000e-10 1.590000e-01 722 7.005000e-10 1.610000e-01 723 7.015000e-10 1.630000e-01 724 7.025000e-10 1.650000e-01 725 7.035000e-10 1.670000e-01 726 7.045000e-10 1.690000e-01 727 7.055000e-10 1.710000e-01 728 7.065000e-10 1.730000e-01 729 7.075000e-10 1.750000e-01 730 7.085000e-10 1.770000e-01 731 7.095000e-10 1.790000e-01 732 7.105000e-10 1.810000e-01 733 7.115000e-10 1.830000e-01 734 7.125000e-10 1.850000e-01 735 7.135000e-10 1.870000e-01 736 7.145000e-10 1.890000e-01 737 7.155000e-10 1.910000e-01 738 7.165000e-10 1.930000e-01 739 7.175000e-10 1.950000e-01 740 7.185000e-10 1.970000e-01 741 7.195000e-10 1.990000e-01 742 7.200000e-10 2.000000e-01 743 7.201000e-10 2.000000e-01 744 7.203000e-10 2.000000e-01 745 7.207000e-10 2.000000e-01 746 7.215000e-10 2.000000e-01 747 7.225000e-10 2.000000e-01 748 7.235000e-10 2.000000e-01 749 7.245000e-10 2.000000e-01 750 7.255000e-10 2.000000e-01 Index time v(g)/10 -------------------------------------------------------------------------------- 751 7.265000e-10 2.000000e-01 752 7.275000e-10 2.000000e-01 753 7.285000e-10 2.000000e-01 754 7.295000e-10 2.000000e-01 755 7.305000e-10 2.000000e-01 756 7.315000e-10 2.000000e-01 757 7.325000e-10 2.000000e-01 758 7.335000e-10 2.000000e-01 759 7.345000e-10 2.000000e-01 760 7.355000e-10 2.000000e-01 761 7.365000e-10 2.000000e-01 762 7.375000e-10 2.000000e-01 763 7.385000e-10 2.000000e-01 764 7.395000e-10 2.000000e-01 765 7.405000e-10 2.000000e-01 766 7.415000e-10 2.000000e-01 767 7.425000e-10 2.000000e-01 768 7.435000e-10 2.000000e-01 769 7.445000e-10 2.000000e-01 770 7.455000e-10 2.000000e-01 771 7.465000e-10 2.000000e-01 772 7.475000e-10 2.000000e-01 773 7.485000e-10 2.000000e-01 774 7.495000e-10 2.000000e-01 775 7.505000e-10 2.000000e-01 776 7.515000e-10 2.000000e-01 777 7.525000e-10 2.000000e-01 778 7.535000e-10 2.000000e-01 779 7.545000e-10 2.000000e-01 780 7.555000e-10 2.000000e-01 781 7.565000e-10 2.000000e-01 782 7.575000e-10 2.000000e-01 783 7.585000e-10 2.000000e-01 784 7.595000e-10 2.000000e-01 785 7.605000e-10 2.000000e-01 786 7.615000e-10 2.000000e-01 787 7.625000e-10 2.000000e-01 788 7.635000e-10 2.000000e-01 789 7.645000e-10 2.000000e-01 790 7.655000e-10 2.000000e-01 791 7.665000e-10 2.000000e-01 792 7.675000e-10 2.000000e-01 793 7.685000e-10 2.000000e-01 794 7.695000e-10 2.000000e-01 795 7.705000e-10 2.000000e-01 796 7.715000e-10 2.000000e-01 797 7.725000e-10 2.000000e-01 798 7.735000e-10 2.000000e-01 799 7.745000e-10 2.000000e-01 800 7.755000e-10 2.000000e-01 801 7.765000e-10 2.000000e-01 802 7.775000e-10 2.000000e-01 803 7.785000e-10 2.000000e-01 804 7.795000e-10 2.000000e-01 805 7.805000e-10 2.000000e-01 806 7.815000e-10 2.000000e-01 807 7.825000e-10 2.000000e-01 808 7.835000e-10 2.000000e-01 Index time v(g)/10 -------------------------------------------------------------------------------- 809 7.845000e-10 2.000000e-01 810 7.855000e-10 2.000000e-01 811 7.865000e-10 2.000000e-01 812 7.875000e-10 2.000000e-01 813 7.885000e-10 2.000000e-01 814 7.895000e-10 2.000000e-01 815 7.905000e-10 2.000000e-01 816 7.915000e-10 2.000000e-01 817 7.925000e-10 2.000000e-01 818 7.935000e-10 2.000000e-01 819 7.945000e-10 2.000000e-01 820 7.955000e-10 2.000000e-01 821 7.965000e-10 2.000000e-01 822 7.975000e-10 2.000000e-01 823 7.985000e-10 2.000000e-01 824 7.995000e-10 2.000000e-01 825 8.005000e-10 2.000000e-01 826 8.015000e-10 2.000000e-01 827 8.025000e-10 2.000000e-01 828 8.035000e-10 2.000000e-01 829 8.045000e-10 2.000000e-01 830 8.055000e-10 2.000000e-01 831 8.065000e-10 2.000000e-01 832 8.075000e-10 2.000000e-01 833 8.085000e-10 2.000000e-01 834 8.095000e-10 2.000000e-01 835 8.105000e-10 2.000000e-01 836 8.115000e-10 2.000000e-01 837 8.125000e-10 2.000000e-01 838 8.135000e-10 2.000000e-01 839 8.145000e-10 2.000000e-01 840 8.155000e-10 2.000000e-01 841 8.165000e-10 2.000000e-01 842 8.175000e-10 2.000000e-01 843 8.185000e-10 2.000000e-01 844 8.195000e-10 2.000000e-01 845 8.205000e-10 2.000000e-01 846 8.215000e-10 2.000000e-01 847 8.225000e-10 2.000000e-01 848 8.235000e-10 2.000000e-01 849 8.245000e-10 2.000000e-01 850 8.255000e-10 2.000000e-01 851 8.265000e-10 2.000000e-01 852 8.275000e-10 2.000000e-01 853 8.285000e-10 2.000000e-01 854 8.295000e-10 2.000000e-01 855 8.305000e-10 2.000000e-01 856 8.315000e-10 2.000000e-01 857 8.325000e-10 2.000000e-01 858 8.335000e-10 2.000000e-01 859 8.345000e-10 2.000000e-01 860 8.355000e-10 2.000000e-01 861 8.365000e-10 2.000000e-01 862 8.375000e-10 2.000000e-01 863 8.385000e-10 2.000000e-01 864 8.395000e-10 2.000000e-01 865 8.405000e-10 2.000000e-01 866 8.415000e-10 2.000000e-01 Index time v(g)/10 -------------------------------------------------------------------------------- 867 8.425000e-10 2.000000e-01 868 8.435000e-10 2.000000e-01 869 8.445000e-10 2.000000e-01 870 8.455000e-10 2.000000e-01 871 8.465000e-10 2.000000e-01 872 8.475000e-10 2.000000e-01 873 8.485000e-10 2.000000e-01 874 8.495000e-10 2.000000e-01 875 8.505000e-10 2.000000e-01 876 8.515000e-10 2.000000e-01 877 8.525000e-10 2.000000e-01 878 8.535000e-10 2.000000e-01 879 8.545000e-10 2.000000e-01 880 8.555000e-10 2.000000e-01 881 8.565000e-10 2.000000e-01 882 8.575000e-10 2.000000e-01 883 8.585000e-10 2.000000e-01 884 8.595000e-10 2.000000e-01 885 8.605000e-10 2.000000e-01 886 8.615000e-10 2.000000e-01 887 8.625000e-10 2.000000e-01 888 8.635000e-10 2.000000e-01 889 8.645000e-10 2.000000e-01 890 8.655000e-10 2.000000e-01 891 8.665000e-10 2.000000e-01 892 8.675000e-10 2.000000e-01 893 8.685000e-10 2.000000e-01 894 8.695000e-10 2.000000e-01 895 8.705000e-10 2.000000e-01 896 8.715000e-10 2.000000e-01 897 8.725000e-10 2.000000e-01 898 8.735000e-10 2.000000e-01 899 8.745000e-10 2.000000e-01 900 8.755000e-10 2.000000e-01 901 8.765000e-10 2.000000e-01 902 8.775000e-10 2.000000e-01 903 8.785000e-10 2.000000e-01 904 8.795000e-10 2.000000e-01 905 8.805000e-10 2.000000e-01 906 8.815000e-10 2.000000e-01 907 8.825000e-10 2.000000e-01 908 8.835000e-10 2.000000e-01 909 8.845000e-10 2.000000e-01 910 8.855000e-10 2.000000e-01 911 8.865000e-10 2.000000e-01 912 8.875000e-10 2.000000e-01 913 8.885000e-10 2.000000e-01 914 8.895000e-10 2.000000e-01 915 8.905000e-10 2.000000e-01 916 8.915000e-10 2.000000e-01 917 8.925000e-10 2.000000e-01 918 8.935000e-10 2.000000e-01 919 8.945000e-10 2.000000e-01 920 8.955000e-10 2.000000e-01 921 8.965000e-10 2.000000e-01 922 8.975000e-10 2.000000e-01 923 8.985000e-10 2.000000e-01 924 8.995000e-10 2.000000e-01 Index time v(g)/10 -------------------------------------------------------------------------------- 925 9.005000e-10 2.000000e-01 926 9.015000e-10 2.000000e-01 927 9.025000e-10 2.000000e-01 928 9.035000e-10 2.000000e-01 929 9.045000e-10 2.000000e-01 930 9.055000e-10 2.000000e-01 931 9.065000e-10 2.000000e-01 932 9.075000e-10 2.000000e-01 933 9.085000e-10 2.000000e-01 934 9.095000e-10 2.000000e-01 935 9.105000e-10 2.000000e-01 936 9.115000e-10 2.000000e-01 937 9.125000e-10 2.000000e-01 938 9.135000e-10 2.000000e-01 939 9.145000e-10 2.000000e-01 940 9.155000e-10 2.000000e-01 941 9.165000e-10 2.000000e-01 942 9.175000e-10 2.000000e-01 943 9.185000e-10 2.000000e-01 944 9.195000e-10 2.000000e-01 945 9.200000e-10 2.000000e-01 946 9.201000e-10 1.998000e-01 947 9.203000e-10 1.994000e-01 948 9.207000e-10 1.986000e-01 949 9.215000e-10 1.970000e-01 950 9.225000e-10 1.950000e-01 951 9.235000e-10 1.930000e-01 952 9.245000e-10 1.910000e-01 953 9.255000e-10 1.890000e-01 954 9.265000e-10 1.870000e-01 955 9.275000e-10 1.850000e-01 956 9.285000e-10 1.830000e-01 957 9.295000e-10 1.810000e-01 958 9.305000e-10 1.790000e-01 959 9.315000e-10 1.770000e-01 960 9.325000e-10 1.750000e-01 961 9.335000e-10 1.730000e-01 962 9.345000e-10 1.710000e-01 963 9.355000e-10 1.690000e-01 964 9.365000e-10 1.670000e-01 965 9.375000e-10 1.650000e-01 966 9.385000e-10 1.630000e-01 967 9.395000e-10 1.610000e-01 968 9.405000e-10 1.590000e-01 969 9.415000e-10 1.570000e-01 970 9.425000e-10 1.550000e-01 971 9.435000e-10 1.530000e-01 972 9.445000e-10 1.510000e-01 973 9.455000e-10 1.490000e-01 974 9.465000e-10 1.470000e-01 975 9.475000e-10 1.450000e-01 976 9.485000e-10 1.430000e-01 977 9.495000e-10 1.410000e-01 978 9.505000e-10 1.390000e-01 979 9.515000e-10 1.370000e-01 980 9.525000e-10 1.350000e-01 981 9.535000e-10 1.330000e-01 982 9.545000e-10 1.310000e-01 Index time v(g)/10 -------------------------------------------------------------------------------- 983 9.555000e-10 1.290000e-01 984 9.565000e-10 1.270000e-01 985 9.575000e-10 1.250000e-01 986 9.585000e-10 1.230000e-01 987 9.595000e-10 1.210000e-01 988 9.605000e-10 1.190000e-01 989 9.615000e-10 1.170000e-01 990 9.625000e-10 1.150000e-01 991 9.635000e-10 1.130000e-01 992 9.645000e-10 1.110000e-01 993 9.655000e-10 1.090000e-01 994 9.665000e-10 1.070000e-01 995 9.675000e-10 1.050000e-01 996 9.685000e-10 1.030000e-01 997 9.695000e-10 1.010000e-01 998 9.705000e-10 9.900000e-02 999 9.715000e-10 9.700000e-02 1000 9.725000e-10 9.500000e-02 1001 9.735000e-10 9.300000e-02 1002 9.745000e-10 9.100000e-02 1003 9.755000e-10 8.900000e-02 1004 9.765000e-10 8.700000e-02 1005 9.775000e-10 8.500000e-02 1006 9.785000e-10 8.300000e-02 1007 9.795000e-10 8.100000e-02 1008 9.805000e-10 7.900000e-02 1009 9.815000e-10 7.700000e-02 1010 9.825000e-10 7.500000e-02 1011 9.835000e-10 7.300000e-02 1012 9.845000e-10 7.100000e-02 1013 9.855000e-10 6.900000e-02 1014 9.865000e-10 6.700000e-02 1015 9.875000e-10 6.500000e-02 1016 9.885000e-10 6.300000e-02 1017 9.895000e-10 6.100000e-02 1018 9.905000e-10 5.900000e-02 1019 9.915000e-10 5.700000e-02 1020 9.925000e-10 5.500000e-02 1021 9.935000e-10 5.300000e-02 1022 9.945000e-10 5.100000e-02 1023 9.955000e-10 4.900000e-02 1024 9.965000e-10 4.700000e-02 1025 9.975000e-10 4.500000e-02 1026 9.985000e-10 4.300000e-02 1027 9.995000e-10 4.100000e-02 1028 1.000000e-09 4.000000e-02 tmpk8ny_4pz/tests/bsim3soipd/Makefile.am0000644000175000017500000000060513546075722020433 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = \ t3.cir \ t4.cir \ t5.cir \ inv2.cir \ RampVg2.cir TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ nmospd.mod \ pmospd.mod \ $(TESTS) \ $(TESTS:.cir=.out) EXTRA_DIST += ring51.cir lib.h MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/bsim3soipd/lib.h0000644000175000017500000001042513546075722017317 0ustar carstencarsten .subckt dum ss mn1 ss ss ss ss ss n1 w=4u l=0.15u debug=1 AS=6p AD=6p PS=7u PD=7u .ends dum * XOR2 .subckt xnor2 dd ss sub A B out mn1 T1 A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn2 C1 B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn3 out A C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn4 out B C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn5 C2 T1 ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 T1 A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp2 T1 B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp3 out A C3 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp4 C3 B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp5 out T1 dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends xnor2 .subckt nor2 dd ss sub A B out mn1 out A ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn2 out B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 out A C1 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp2 C1 B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends nor2 .subckt nand2 dd ss sub A B out mn1 out A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn2 C1 B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 out A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp2 out B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends nand2 .subckt nor3 dd ss sub A B C out mn1 out A ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn2 out B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn3 out C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 out A C1 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp2 C1 B C2 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp3 C2 C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends nor3 .subckt nand3 dd ss sub A B C out mn1 out A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn2 C1 B C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn3 C2 C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 out A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp2 out B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp3 out C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends nand3 .subckt nor4 dd ss sub A B C D out mn1 out A ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn2 out B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn3 out C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn4 out C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 out A C1 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp2 C1 B C2 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp3 C2 C C3 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp4 C3 C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends nor4 .subckt nand4 dd ss sub A B C D out mn1 out A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn2 C1 B C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn3 C2 C C3 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn4 C3 C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 out A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp2 out B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp3 out C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp4 out C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends nand4 .subckt inv1 dd ss sub in out mn1 out in ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 out in dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends inv1 .subckt inv5 dd ss sub in out xinv1 dd ss sub in 1 inv1 xinv2 dd ss sub 1 2 inv1 xinv3 dd ss sub 2 3 inv1 xinv4 dd ss sub 3 4 inv1 xinv5 dd ss sub 4 out inv1 .ends inv5 .subckt inv25 dd ss sub in out xinv1 dd ss sub in 1 inv5 xinv2 dd ss sub 1 2 inv5 xinv3 dd ss sub 2 3 inv5 xinv4 dd ss sub 3 4 inv5 xinv5 dd ss sub 4 out inv5 .ends inv25 .subckt inv125 dd ss sub in out xinv1 dd ss sub in 1 inv25 xinv2 dd ss sub 1 2 inv25 xinv3 dd ss sub 2 3 inv25 xinv4 dd ss sub 3 4 inv25 xinv5 dd ss sub 4 out inv25 .ends inv125 .subckt inv625 dd ss sub in out xinv1 dd ss sub in 1 inv125 xinv2 dd ss sub 1 2 inv125 xinv3 dd ss sub 2 3 inv125 xinv4 dd ss sub 3 4 inv125 xinv5 dd ss sub 4 out inv125 .ends inv625 tmpk8ny_4pz/tests/bsim3soipd/inv2.cir0000644000175000017500000000046313546075722017756 0ustar carstencarsten* model = BSIMSOI (PD) * * * SOI Inverter - floating body vin in 0 dc 2.5 vdd dd 0 dc 2.5 vss ss 0 dc 0 ve e 0 dc 1.25 m1 out in dd e p1 w=20u l=0.25u m2 out in ss e n1 w=10u l=0.25u .option itl1=500 gmin=1e-25 noacct .dc vin 0 2.5 0.01 .print dc v(in), v(out) .include nmospd.mod .include pmospd.mod tmpk8ny_4pz/tests/bsim3soipd/t5.cir0000644000175000017500000000042413546075722017425 0ustar carstencarsten*model = BSIMSOI (PD) *Berkeley Spice Compatibility * * SOI NMOSFET, floating body simulation vd d 0 dc 0.05 vs s 0 dc 0 ve e 0 dc 0 vg g 0 dc 3 m1 d g s e n1 w=10u l=0.25u .option gmin=1e-25 itl1=500 noacct .dc vg 0 1.5 0.01 ve -4 4 1 .print dc i(vs) .include nmospd.mod tmpk8ny_4pz/tests/bsim3soipd/t3.out0000644000175000017500000024573313546075722017473 0ustar carstencarsten No. of Data Rows : 1806 Circuit: *model = BSIMSOI (PD) Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Warning: Pd = 0 is less than W. Warning: Ps = 0 is less than W. *model = BSIMSOI (PD) -------------------------------------------------------------------------------- Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 0 0.000000e+00 5.000000e-01 0.000000e+00 1 1.000000e-02 5.000000e-01 2.933649e-06 2 2.000000e-02 5.000000e-01 5.424817e-06 3 3.000000e-02 5.000000e-01 7.494119e-06 4 4.000000e-02 5.000000e-01 9.168761e-06 5 5.000000e-02 5.000000e-01 1.048555e-05 6 6.000000e-02 5.000000e-01 1.149269e-05 7 7.000000e-02 5.000000e-01 1.224807e-05 8 8.000000e-02 5.000000e-01 1.281282e-05 9 9.000000e-02 5.000000e-01 1.324287e-05 10 1.000000e-01 5.000000e-01 1.358286e-05 11 1.100000e-01 5.000000e-01 1.386487e-05 12 1.200000e-01 5.000000e-01 1.411044e-05 13 1.300000e-01 5.000000e-01 1.433348e-05 14 1.400000e-01 5.000000e-01 1.454291e-05 15 1.500000e-01 5.000000e-01 1.474448e-05 16 1.600000e-01 5.000000e-01 1.494196e-05 17 1.700000e-01 5.000000e-01 1.513789e-05 18 1.800000e-01 5.000000e-01 1.533400e-05 19 1.900000e-01 5.000000e-01 1.553154e-05 20 2.000000e-01 5.000000e-01 1.573140e-05 21 2.100000e-01 5.000000e-01 1.593428e-05 22 2.200000e-01 5.000000e-01 1.614070e-05 23 2.300000e-01 5.000000e-01 1.635107e-05 24 2.400000e-01 5.000000e-01 1.656575e-05 25 2.500000e-01 5.000000e-01 1.678500e-05 26 2.600000e-01 5.000000e-01 1.700908e-05 27 2.700000e-01 5.000000e-01 1.723820e-05 28 2.800000e-01 5.000000e-01 1.747254e-05 29 2.900000e-01 5.000000e-01 1.771227e-05 30 3.000000e-01 5.000000e-01 1.795755e-05 31 3.100000e-01 5.000000e-01 1.820849e-05 32 3.200000e-01 5.000000e-01 1.846525e-05 33 3.300000e-01 5.000000e-01 1.872792e-05 34 3.400000e-01 5.000000e-01 1.899663e-05 35 3.500000e-01 5.000000e-01 1.927147e-05 36 3.600000e-01 5.000000e-01 1.955254e-05 37 3.700000e-01 5.000000e-01 1.983995e-05 38 3.800000e-01 5.000000e-01 2.013377e-05 39 3.900000e-01 5.000000e-01 2.043409e-05 40 4.000000e-01 5.000000e-01 2.074100e-05 41 4.100000e-01 5.000000e-01 2.105459e-05 42 4.200000e-01 5.000000e-01 2.137492e-05 43 4.300000e-01 5.000000e-01 2.170208e-05 44 4.400000e-01 5.000000e-01 2.203615e-05 45 4.500000e-01 5.000000e-01 2.237720e-05 46 4.600000e-01 5.000000e-01 2.272532e-05 47 4.700000e-01 5.000000e-01 2.308059e-05 48 4.800000e-01 5.000000e-01 2.344310e-05 49 4.900000e-01 5.000000e-01 2.381293e-05 50 5.000000e-01 5.000000e-01 2.419018e-05 51 5.100000e-01 5.000000e-01 2.457494e-05 52 5.200000e-01 5.000000e-01 2.496733e-05 53 5.300000e-01 5.000000e-01 2.536747e-05 54 5.400000e-01 5.000000e-01 2.577548e-05 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 55 5.500000e-01 5.000000e-01 2.619150e-05 56 5.600000e-01 5.000000e-01 2.661571e-05 57 5.700000e-01 5.000000e-01 2.704827e-05 58 5.800000e-01 5.000000e-01 2.748939e-05 59 5.900000e-01 5.000000e-01 2.793930e-05 60 6.000000e-01 5.000000e-01 2.839824e-05 61 6.100000e-01 5.000000e-01 2.886653e-05 62 6.200000e-01 5.000000e-01 2.934448e-05 63 6.300000e-01 5.000000e-01 2.983247e-05 64 6.400000e-01 5.000000e-01 3.033093e-05 65 6.500000e-01 5.000000e-01 3.084035e-05 66 6.600000e-01 5.000000e-01 3.136126e-05 67 6.700000e-01 5.000000e-01 3.189431e-05 68 6.800000e-01 5.000000e-01 3.244018e-05 69 6.900000e-01 5.000000e-01 3.299967e-05 70 7.000000e-01 5.000000e-01 3.357368e-05 71 7.100000e-01 5.000000e-01 3.416322e-05 72 7.200000e-01 5.000000e-01 3.476942e-05 73 7.300000e-01 5.000000e-01 3.539354e-05 74 7.400000e-01 5.000000e-01 3.603701e-05 75 7.500000e-01 5.000000e-01 3.670140e-05 76 7.600000e-01 5.000000e-01 3.738846e-05 77 7.700000e-01 5.000000e-01 3.810015e-05 78 7.800000e-01 5.000000e-01 3.883862e-05 79 7.900000e-01 5.000000e-01 3.960622e-05 80 8.000000e-01 5.000000e-01 4.040557e-05 81 8.100000e-01 5.000000e-01 4.123949e-05 82 8.200000e-01 5.000000e-01 4.211107e-05 83 8.300000e-01 5.000000e-01 4.302364e-05 84 8.400000e-01 5.000000e-01 4.398079e-05 85 8.500000e-01 5.000000e-01 4.498631e-05 86 8.600000e-01 5.000000e-01 4.604425e-05 87 8.700000e-01 5.000000e-01 4.715883e-05 88 8.800000e-01 5.000000e-01 4.833441e-05 89 8.900000e-01 5.000000e-01 4.957543e-05 90 9.000000e-01 5.000000e-01 5.088635e-05 91 9.100000e-01 5.000000e-01 5.227152e-05 92 9.200000e-01 5.000000e-01 5.373510e-05 93 9.300000e-01 5.000000e-01 5.528089e-05 94 9.400000e-01 5.000000e-01 5.691223e-05 95 9.500000e-01 5.000000e-01 5.863178e-05 96 9.600000e-01 5.000000e-01 6.044143e-05 97 9.700000e-01 5.000000e-01 6.234212e-05 98 9.800000e-01 5.000000e-01 6.433373e-05 99 9.900000e-01 5.000000e-01 6.641501e-05 100 1.000000e+00 5.000000e-01 6.858353e-05 101 1.010000e+00 5.000000e-01 7.083574e-05 102 1.020000e+00 5.000000e-01 7.316702e-05 103 1.030000e+00 5.000000e-01 7.557184e-05 104 1.040000e+00 5.000000e-01 7.804393e-05 105 1.050000e+00 5.000000e-01 8.058231e-05 106 1.060000e+00 5.000000e-01 8.318687e-05 107 1.070000e+00 5.000000e-01 8.584557e-05 108 1.080000e+00 5.000000e-01 8.854770e-05 109 1.090000e+00 5.000000e-01 9.128396e-05 110 1.100000e+00 5.000000e-01 9.404628e-05 111 1.110000e+00 5.000000e-01 9.682776e-05 112 1.120000e+00 5.000000e-01 9.962253e-05 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 113 1.130000e+00 5.000000e-01 1.024256e-04 114 1.140000e+00 5.000000e-01 1.052330e-04 115 1.150000e+00 5.000000e-01 1.080412e-04 116 1.160000e+00 5.000000e-01 1.108476e-04 117 1.170000e+00 5.000000e-01 1.136500e-04 118 1.180000e+00 5.000000e-01 1.164468e-04 119 1.190000e+00 5.000000e-01 1.192366e-04 120 1.200000e+00 5.000000e-01 1.220186e-04 121 1.210000e+00 5.000000e-01 1.247920e-04 122 1.220000e+00 5.000000e-01 1.275565e-04 123 1.230000e+00 5.000000e-01 1.303118e-04 124 1.240000e+00 5.000000e-01 1.330578e-04 125 1.250000e+00 5.000000e-01 1.357945e-04 126 1.260000e+00 5.000000e-01 1.385220e-04 127 1.270000e+00 5.000000e-01 1.412405e-04 128 1.280000e+00 5.000000e-01 1.439502e-04 129 1.290000e+00 5.000000e-01 1.466515e-04 130 1.300000e+00 5.000000e-01 1.493446e-04 131 1.310000e+00 5.000000e-01 1.520297e-04 132 1.320000e+00 5.000000e-01 1.547074e-04 133 1.330000e+00 5.000000e-01 1.573778e-04 134 1.340000e+00 5.000000e-01 1.600413e-04 135 1.350000e+00 5.000000e-01 1.626982e-04 136 1.360000e+00 5.000000e-01 1.653488e-04 137 1.370000e+00 5.000000e-01 1.679935e-04 138 1.380000e+00 5.000000e-01 1.706326e-04 139 1.390000e+00 5.000000e-01 1.732663e-04 140 1.400000e+00 5.000000e-01 1.758949e-04 141 1.410000e+00 5.000000e-01 1.785186e-04 142 1.420000e+00 5.000000e-01 1.811378e-04 143 1.430000e+00 5.000000e-01 1.837527e-04 144 1.440000e+00 5.000000e-01 1.863635e-04 145 1.450000e+00 5.000000e-01 1.889703e-04 146 1.460000e+00 5.000000e-01 1.915735e-04 147 1.470000e+00 5.000000e-01 1.941732e-04 148 1.480000e+00 5.000000e-01 1.967696e-04 149 1.490000e+00 5.000000e-01 1.993629e-04 150 1.500000e+00 5.000000e-01 2.019532e-04 151 1.510000e+00 5.000000e-01 2.045407e-04 152 1.520000e+00 5.000000e-01 2.071256e-04 153 1.530000e+00 5.000000e-01 2.097079e-04 154 1.540000e+00 5.000000e-01 2.122879e-04 155 1.550000e+00 5.000000e-01 2.148655e-04 156 1.560000e+00 5.000000e-01 2.174410e-04 157 1.570000e+00 5.000000e-01 2.200145e-04 158 1.580000e+00 5.000000e-01 2.225860e-04 159 1.590000e+00 5.000000e-01 2.251557e-04 160 1.600000e+00 5.000000e-01 2.277237e-04 161 1.610000e+00 5.000000e-01 2.302899e-04 162 1.620000e+00 5.000000e-01 2.328546e-04 163 1.630000e+00 5.000000e-01 2.354177e-04 164 1.640000e+00 5.000000e-01 2.379794e-04 165 1.650000e+00 5.000000e-01 2.405397e-04 166 1.660000e+00 5.000000e-01 2.430987e-04 167 1.670000e+00 5.000000e-01 2.456564e-04 168 1.680000e+00 5.000000e-01 2.482128e-04 169 1.690000e+00 5.000000e-01 2.507681e-04 170 1.700000e+00 5.000000e-01 2.533222e-04 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 171 1.710000e+00 5.000000e-01 2.558751e-04 172 1.720000e+00 5.000000e-01 2.584270e-04 173 1.730000e+00 5.000000e-01 2.609777e-04 174 1.740000e+00 5.000000e-01 2.635274e-04 175 1.750000e+00 5.000000e-01 2.660761e-04 176 1.760000e+00 5.000000e-01 2.686237e-04 177 1.770000e+00 5.000000e-01 2.711703e-04 178 1.780000e+00 5.000000e-01 2.737158e-04 179 1.790000e+00 5.000000e-01 2.762603e-04 180 1.800000e+00 5.000000e-01 2.788038e-04 181 1.810000e+00 5.000000e-01 2.813462e-04 182 1.820000e+00 5.000000e-01 2.838875e-04 183 1.830000e+00 5.000000e-01 2.864278e-04 184 1.840000e+00 5.000000e-01 2.889670e-04 185 1.850000e+00 5.000000e-01 2.915051e-04 186 1.860000e+00 5.000000e-01 2.940420e-04 187 1.870000e+00 5.000000e-01 2.965778e-04 188 1.880000e+00 5.000000e-01 2.991125e-04 189 1.890000e+00 5.000000e-01 3.016459e-04 190 1.900000e+00 5.000000e-01 3.041781e-04 191 1.910000e+00 5.000000e-01 3.067091e-04 192 1.920000e+00 5.000000e-01 3.092388e-04 193 1.930000e+00 5.000000e-01 3.117672e-04 194 1.940000e+00 5.000000e-01 3.142942e-04 195 1.950000e+00 5.000000e-01 3.168199e-04 196 1.960000e+00 5.000000e-01 3.193443e-04 197 1.970000e+00 5.000000e-01 3.218672e-04 198 1.980000e+00 5.000000e-01 3.243886e-04 199 1.990000e+00 5.000000e-01 3.269087e-04 200 2.000000e+00 5.000000e-01 3.294272e-04 201 2.010000e+00 5.000000e-01 3.319443e-04 202 2.020000e+00 5.000000e-01 3.344598e-04 203 2.030000e+00 5.000000e-01 3.369738e-04 204 2.040000e+00 5.000000e-01 3.394862e-04 205 2.050000e+00 5.000000e-01 3.419970e-04 206 2.060000e+00 5.000000e-01 3.445063e-04 207 2.070000e+00 5.000000e-01 3.470139e-04 208 2.080000e+00 5.000000e-01 3.495199e-04 209 2.090000e+00 5.000000e-01 3.520243e-04 210 2.100000e+00 5.000000e-01 3.545270e-04 211 2.110000e+00 5.000000e-01 3.570280e-04 212 2.120000e+00 5.000000e-01 3.595274e-04 213 2.130000e+00 5.000000e-01 3.620251e-04 214 2.140000e+00 5.000000e-01 3.645212e-04 215 2.150000e+00 5.000000e-01 3.670155e-04 216 2.160000e+00 5.000000e-01 3.695081e-04 217 2.170000e+00 5.000000e-01 3.719991e-04 218 2.180000e+00 5.000000e-01 3.744883e-04 219 2.190000e+00 5.000000e-01 3.769759e-04 220 2.200000e+00 5.000000e-01 3.794618e-04 221 2.210000e+00 5.000000e-01 3.819459e-04 222 2.220000e+00 5.000000e-01 3.844284e-04 223 2.230000e+00 5.000000e-01 3.869091e-04 224 2.240000e+00 5.000000e-01 3.893882e-04 225 2.250000e+00 5.000000e-01 3.918656e-04 226 2.260000e+00 5.000000e-01 3.943413e-04 227 2.270000e+00 5.000000e-01 3.968154e-04 228 2.280000e+00 5.000000e-01 3.992877e-04 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 229 2.290000e+00 5.000000e-01 4.017584e-04 230 2.300000e+00 5.000000e-01 4.042275e-04 231 2.310000e+00 5.000000e-01 4.066948e-04 232 2.320000e+00 5.000000e-01 4.091606e-04 233 2.330000e+00 5.000000e-01 4.116247e-04 234 2.340000e+00 5.000000e-01 4.140872e-04 235 2.350000e+00 5.000000e-01 4.165481e-04 236 2.360000e+00 5.000000e-01 4.190074e-04 237 2.370000e+00 5.000000e-01 4.214651e-04 238 2.380000e+00 5.000000e-01 4.239212e-04 239 2.390000e+00 5.000000e-01 4.263757e-04 240 2.400000e+00 5.000000e-01 4.288287e-04 241 2.410000e+00 5.000000e-01 4.312801e-04 242 2.420000e+00 5.000000e-01 4.337300e-04 243 2.430000e+00 5.000000e-01 4.361783e-04 244 2.440000e+00 5.000000e-01 4.386252e-04 245 2.450000e+00 5.000000e-01 4.410705e-04 246 2.460000e+00 5.000000e-01 4.435144e-04 247 2.470000e+00 5.000000e-01 4.459567e-04 248 2.480000e+00 5.000000e-01 4.483977e-04 249 2.490000e+00 5.000000e-01 4.508371e-04 250 2.500000e+00 5.000000e-01 4.532752e-04 251 2.510000e+00 5.000000e-01 4.557118e-04 252 2.520000e+00 5.000000e-01 4.581470e-04 253 2.530000e+00 5.000000e-01 4.605808e-04 254 2.540000e+00 5.000000e-01 4.630132e-04 255 2.550000e+00 5.000000e-01 4.654442e-04 256 2.560000e+00 5.000000e-01 4.678739e-04 257 2.570000e+00 5.000000e-01 4.703023e-04 258 2.580000e+00 5.000000e-01 4.727293e-04 259 2.590000e+00 5.000000e-01 4.751551e-04 260 2.600000e+00 5.000000e-01 4.775795e-04 261 2.610000e+00 5.000000e-01 4.800026e-04 262 2.620000e+00 5.000000e-01 4.824245e-04 263 2.630000e+00 5.000000e-01 4.848452e-04 264 2.640000e+00 5.000000e-01 4.872645e-04 265 2.650000e+00 5.000000e-01 4.896827e-04 266 2.660000e+00 5.000000e-01 4.920997e-04 267 2.670000e+00 5.000000e-01 4.945154e-04 268 2.680000e+00 5.000000e-01 4.969300e-04 269 2.690000e+00 5.000000e-01 4.993434e-04 270 2.700000e+00 5.000000e-01 5.017557e-04 271 2.710000e+00 5.000000e-01 5.041668e-04 272 2.720000e+00 5.000000e-01 5.065768e-04 273 2.730000e+00 5.000000e-01 5.089857e-04 274 2.740000e+00 5.000000e-01 5.113935e-04 275 2.750000e+00 5.000000e-01 5.138003e-04 276 2.760000e+00 5.000000e-01 5.162060e-04 277 2.770000e+00 5.000000e-01 5.186106e-04 278 2.780000e+00 5.000000e-01 5.210142e-04 279 2.790000e+00 5.000000e-01 5.234168e-04 280 2.800000e+00 5.000000e-01 5.258184e-04 281 2.810000e+00 5.000000e-01 5.282190e-04 282 2.820000e+00 5.000000e-01 5.306187e-04 283 2.830000e+00 5.000000e-01 5.330174e-04 284 2.840000e+00 5.000000e-01 5.354151e-04 285 2.850000e+00 5.000000e-01 5.378119e-04 286 2.860000e+00 5.000000e-01 5.402079e-04 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 287 2.870000e+00 5.000000e-01 5.426029e-04 288 2.880000e+00 5.000000e-01 5.449971e-04 289 2.890000e+00 5.000000e-01 5.473904e-04 290 2.900000e+00 5.000000e-01 5.497828e-04 291 2.910000e+00 5.000000e-01 5.521744e-04 292 2.920000e+00 5.000000e-01 5.545652e-04 293 2.930000e+00 5.000000e-01 5.569552e-04 294 2.940000e+00 5.000000e-01 5.593445e-04 295 2.950000e+00 5.000000e-01 5.617329e-04 296 2.960000e+00 5.000000e-01 5.641206e-04 297 2.970000e+00 5.000000e-01 5.665076e-04 298 2.980000e+00 5.000000e-01 5.688938e-04 299 2.990000e+00 5.000000e-01 5.712793e-04 300 3.000000e+00 5.000000e-01 5.736642e-04 301 0.000000e+00 1.000000e+00 0.000000e+00 302 1.000000e-02 1.000000e+00 3.715408e-05 303 2.000000e-02 1.000000e+00 7.321271e-05 304 3.000000e-02 1.000000e+00 1.081949e-04 305 4.000000e-02 1.000000e+00 1.421186e-04 306 5.000000e-02 1.000000e+00 1.750005e-04 307 6.000000e-02 1.000000e+00 2.068564e-04 308 7.000000e-02 1.000000e+00 2.377013e-04 309 8.000000e-02 1.000000e+00 2.675495e-04 310 9.000000e-02 1.000000e+00 2.964147e-04 311 1.000000e-01 1.000000e+00 3.243101e-04 312 1.100000e-01 1.000000e+00 3.512487e-04 313 1.200000e-01 1.000000e+00 3.772430e-04 314 1.300000e-01 1.000000e+00 4.023054e-04 315 1.400000e-01 1.000000e+00 4.264481e-04 316 1.500000e-01 1.000000e+00 4.496832e-04 317 1.600000e-01 1.000000e+00 4.720227e-04 318 1.700000e-01 1.000000e+00 4.934786e-04 319 1.800000e-01 1.000000e+00 5.140630e-04 320 1.900000e-01 1.000000e+00 5.337879e-04 321 2.000000e-01 1.000000e+00 5.526656e-04 322 2.100000e-01 1.000000e+00 5.707084e-04 323 2.200000e-01 1.000000e+00 5.879290e-04 324 2.300000e-01 1.000000e+00 6.043404e-04 325 2.400000e-01 1.000000e+00 6.199559e-04 326 2.500000e-01 1.000000e+00 6.347896e-04 327 2.600000e-01 1.000000e+00 6.488563e-04 328 2.700000e-01 1.000000e+00 6.621718e-04 329 2.800000e-01 1.000000e+00 6.747529e-04 330 2.900000e-01 1.000000e+00 6.866183e-04 331 3.000000e-01 1.000000e+00 6.977880e-04 332 3.100000e-01 1.000000e+00 7.082847e-04 333 3.200000e-01 1.000000e+00 7.181329e-04 334 3.300000e-01 1.000000e+00 7.273605e-04 335 3.400000e-01 1.000000e+00 7.359979e-04 336 3.500000e-01 1.000000e+00 7.440786e-04 337 3.600000e-01 1.000000e+00 7.516390e-04 338 3.700000e-01 1.000000e+00 7.587180e-04 339 3.800000e-01 1.000000e+00 7.653560e-04 340 3.900000e-01 1.000000e+00 7.715946e-04 341 4.000000e-01 1.000000e+00 7.774752e-04 342 4.100000e-01 1.000000e+00 7.830380e-04 343 4.200000e-01 1.000000e+00 7.883212e-04 344 4.300000e-01 1.000000e+00 7.933605e-04 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 345 4.400000e-01 1.000000e+00 7.981881e-04 346 4.500000e-01 1.000000e+00 8.028328e-04 347 4.600000e-01 1.000000e+00 8.073203e-04 348 4.700000e-01 1.000000e+00 8.116726e-04 349 4.800000e-01 1.000000e+00 8.159089e-04 350 4.900000e-01 1.000000e+00 8.200459e-04 351 5.000000e-01 1.000000e+00 8.240975e-04 352 5.100000e-01 1.000000e+00 8.280761e-04 353 5.200000e-01 1.000000e+00 8.319920e-04 354 5.300000e-01 1.000000e+00 8.358543e-04 355 5.400000e-01 1.000000e+00 8.396708e-04 356 5.500000e-01 1.000000e+00 8.434483e-04 357 5.600000e-01 1.000000e+00 8.471929e-04 358 5.700000e-01 1.000000e+00 8.509100e-04 359 5.800000e-01 1.000000e+00 8.546047e-04 360 5.900000e-01 1.000000e+00 8.582814e-04 361 6.000000e-01 1.000000e+00 8.619447e-04 362 6.100000e-01 1.000000e+00 8.655988e-04 363 6.200000e-01 1.000000e+00 8.692478e-04 364 6.300000e-01 1.000000e+00 8.728962e-04 365 6.400000e-01 1.000000e+00 8.765484e-04 366 6.500000e-01 1.000000e+00 8.802092e-04 367 6.600000e-01 1.000000e+00 8.838836e-04 368 6.700000e-01 1.000000e+00 8.875774e-04 369 6.800000e-01 1.000000e+00 8.912966e-04 370 6.900000e-01 1.000000e+00 8.950480e-04 371 7.000000e-01 1.000000e+00 8.988392e-04 372 7.100000e-01 1.000000e+00 9.026785e-04 373 7.200000e-01 1.000000e+00 9.065754e-04 374 7.300000e-01 1.000000e+00 9.105399e-04 375 7.400000e-01 1.000000e+00 9.145835e-04 376 7.500000e-01 1.000000e+00 9.187186e-04 377 7.600000e-01 1.000000e+00 9.229585e-04 378 7.700000e-01 1.000000e+00 9.273179e-04 379 7.800000e-01 1.000000e+00 9.318122e-04 380 7.900000e-01 1.000000e+00 9.364577e-04 381 8.000000e-01 1.000000e+00 9.412713e-04 382 8.100000e-01 1.000000e+00 9.462701e-04 383 8.200000e-01 1.000000e+00 9.514714e-04 384 8.300000e-01 1.000000e+00 9.568920e-04 385 8.400000e-01 1.000000e+00 9.625477e-04 386 8.500000e-01 1.000000e+00 9.684529e-04 387 8.600000e-01 1.000000e+00 9.746199e-04 388 8.700000e-01 1.000000e+00 9.810583e-04 389 8.800000e-01 1.000000e+00 9.877746e-04 390 8.900000e-01 1.000000e+00 9.947716e-04 391 9.000000e-01 1.000000e+00 1.002048e-03 392 9.100000e-01 1.000000e+00 1.009598e-03 393 9.200000e-01 1.000000e+00 1.017412e-03 394 9.300000e-01 1.000000e+00 1.025476e-03 395 9.400000e-01 1.000000e+00 1.033770e-03 396 9.500000e-01 1.000000e+00 1.042275e-03 397 9.600000e-01 1.000000e+00 1.050964e-03 398 9.700000e-01 1.000000e+00 1.059812e-03 399 9.800000e-01 1.000000e+00 1.068790e-03 400 9.900000e-01 1.000000e+00 1.077870e-03 401 1.000000e+00 1.000000e+00 1.087023e-03 402 1.010000e+00 1.000000e+00 1.096235e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 403 1.020000e+00 1.000000e+00 1.105510e-03 404 1.030000e+00 1.000000e+00 1.114806e-03 405 1.040000e+00 1.000000e+00 1.124089e-03 406 1.050000e+00 1.000000e+00 1.133328e-03 407 1.060000e+00 1.000000e+00 1.142505e-03 408 1.070000e+00 1.000000e+00 1.151600e-03 409 1.080000e+00 1.000000e+00 1.160604e-03 410 1.090000e+00 1.000000e+00 1.169505e-03 411 1.100000e+00 1.000000e+00 1.178298e-03 412 1.110000e+00 1.000000e+00 1.186980e-03 413 1.120000e+00 1.000000e+00 1.195547e-03 414 1.130000e+00 1.000000e+00 1.203999e-03 415 1.140000e+00 1.000000e+00 1.212338e-03 416 1.150000e+00 1.000000e+00 1.220563e-03 417 1.160000e+00 1.000000e+00 1.228678e-03 418 1.170000e+00 1.000000e+00 1.236685e-03 419 1.180000e+00 1.000000e+00 1.244587e-03 420 1.190000e+00 1.000000e+00 1.252387e-03 421 1.200000e+00 1.000000e+00 1.260089e-03 422 1.210000e+00 1.000000e+00 1.267696e-03 423 1.220000e+00 1.000000e+00 1.275211e-03 424 1.230000e+00 1.000000e+00 1.282639e-03 425 1.240000e+00 1.000000e+00 1.289982e-03 426 1.250000e+00 1.000000e+00 1.297245e-03 427 1.260000e+00 1.000000e+00 1.304429e-03 428 1.270000e+00 1.000000e+00 1.311538e-03 429 1.280000e+00 1.000000e+00 1.318575e-03 430 1.290000e+00 1.000000e+00 1.325543e-03 431 1.300000e+00 1.000000e+00 1.332444e-03 432 1.310000e+00 1.000000e+00 1.339281e-03 433 1.320000e+00 1.000000e+00 1.346057e-03 434 1.330000e+00 1.000000e+00 1.352774e-03 435 1.340000e+00 1.000000e+00 1.359434e-03 436 1.350000e+00 1.000000e+00 1.366039e-03 437 1.360000e+00 1.000000e+00 1.372591e-03 438 1.370000e+00 1.000000e+00 1.379092e-03 439 1.380000e+00 1.000000e+00 1.385543e-03 440 1.390000e+00 1.000000e+00 1.391947e-03 441 1.400000e+00 1.000000e+00 1.398305e-03 442 1.410000e+00 1.000000e+00 1.404619e-03 443 1.420000e+00 1.000000e+00 1.410889e-03 444 1.430000e+00 1.000000e+00 1.417118e-03 445 1.440000e+00 1.000000e+00 1.423307e-03 446 1.450000e+00 1.000000e+00 1.429456e-03 447 1.460000e+00 1.000000e+00 1.435567e-03 448 1.470000e+00 1.000000e+00 1.441642e-03 449 1.480000e+00 1.000000e+00 1.447681e-03 450 1.490000e+00 1.000000e+00 1.453685e-03 451 1.500000e+00 1.000000e+00 1.459655e-03 452 1.510000e+00 1.000000e+00 1.465593e-03 453 1.520000e+00 1.000000e+00 1.471498e-03 454 1.530000e+00 1.000000e+00 1.477373e-03 455 1.540000e+00 1.000000e+00 1.483217e-03 456 1.550000e+00 1.000000e+00 1.489031e-03 457 1.560000e+00 1.000000e+00 1.494816e-03 458 1.570000e+00 1.000000e+00 1.500574e-03 459 1.580000e+00 1.000000e+00 1.506303e-03 460 1.590000e+00 1.000000e+00 1.512006e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 461 1.600000e+00 1.000000e+00 1.517683e-03 462 1.610000e+00 1.000000e+00 1.523333e-03 463 1.620000e+00 1.000000e+00 1.528959e-03 464 1.630000e+00 1.000000e+00 1.534559e-03 465 1.640000e+00 1.000000e+00 1.540135e-03 466 1.650000e+00 1.000000e+00 1.545688e-03 467 1.660000e+00 1.000000e+00 1.551217e-03 468 1.670000e+00 1.000000e+00 1.556722e-03 469 1.680000e+00 1.000000e+00 1.562206e-03 470 1.690000e+00 1.000000e+00 1.567666e-03 471 1.700000e+00 1.000000e+00 1.573105e-03 472 1.710000e+00 1.000000e+00 1.578522e-03 473 1.720000e+00 1.000000e+00 1.583918e-03 474 1.730000e+00 1.000000e+00 1.589292e-03 475 1.740000e+00 1.000000e+00 1.594646e-03 476 1.750000e+00 1.000000e+00 1.599979e-03 477 1.760000e+00 1.000000e+00 1.605292e-03 478 1.770000e+00 1.000000e+00 1.610585e-03 479 1.780000e+00 1.000000e+00 1.615858e-03 480 1.790000e+00 1.000000e+00 1.621111e-03 481 1.800000e+00 1.000000e+00 1.626345e-03 482 1.810000e+00 1.000000e+00 1.631560e-03 483 1.820000e+00 1.000000e+00 1.636755e-03 484 1.830000e+00 1.000000e+00 1.641932e-03 485 1.840000e+00 1.000000e+00 1.647090e-03 486 1.850000e+00 1.000000e+00 1.652230e-03 487 1.860000e+00 1.000000e+00 1.657351e-03 488 1.870000e+00 1.000000e+00 1.662455e-03 489 1.880000e+00 1.000000e+00 1.667541e-03 490 1.890000e+00 1.000000e+00 1.672608e-03 491 1.900000e+00 1.000000e+00 1.677659e-03 492 1.910000e+00 1.000000e+00 1.682692e-03 493 1.920000e+00 1.000000e+00 1.687708e-03 494 1.930000e+00 1.000000e+00 1.692707e-03 495 1.940000e+00 1.000000e+00 1.697689e-03 496 1.950000e+00 1.000000e+00 1.702655e-03 497 1.960000e+00 1.000000e+00 1.707605e-03 498 1.970000e+00 1.000000e+00 1.712538e-03 499 1.980000e+00 1.000000e+00 1.717455e-03 500 1.990000e+00 1.000000e+00 1.722356e-03 501 2.000000e+00 1.000000e+00 1.727241e-03 502 2.010000e+00 1.000000e+00 1.732111e-03 503 2.020000e+00 1.000000e+00 1.736966e-03 504 2.030000e+00 1.000000e+00 1.741805e-03 505 2.040000e+00 1.000000e+00 1.746630e-03 506 2.050000e+00 1.000000e+00 1.751439e-03 507 2.060000e+00 1.000000e+00 1.756234e-03 508 2.070000e+00 1.000000e+00 1.761015e-03 509 2.080000e+00 1.000000e+00 1.765781e-03 510 2.090000e+00 1.000000e+00 1.770533e-03 511 2.100000e+00 1.000000e+00 1.775271e-03 512 2.110000e+00 1.000000e+00 1.779995e-03 513 2.120000e+00 1.000000e+00 1.784706e-03 514 2.130000e+00 1.000000e+00 1.789403e-03 515 2.140000e+00 1.000000e+00 1.794087e-03 516 2.150000e+00 1.000000e+00 1.798757e-03 517 2.160000e+00 1.000000e+00 1.803415e-03 518 2.170000e+00 1.000000e+00 1.808059e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 519 2.180000e+00 1.000000e+00 1.812691e-03 520 2.190000e+00 1.000000e+00 1.817311e-03 521 2.200000e+00 1.000000e+00 1.821918e-03 522 2.210000e+00 1.000000e+00 1.826512e-03 523 2.220000e+00 1.000000e+00 1.831095e-03 524 2.230000e+00 1.000000e+00 1.835666e-03 525 2.240000e+00 1.000000e+00 1.840225e-03 526 2.250000e+00 1.000000e+00 1.844772e-03 527 2.260000e+00 1.000000e+00 1.849307e-03 528 2.270000e+00 1.000000e+00 1.853832e-03 529 2.280000e+00 1.000000e+00 1.858345e-03 530 2.290000e+00 1.000000e+00 1.862846e-03 531 2.300000e+00 1.000000e+00 1.867337e-03 532 2.310000e+00 1.000000e+00 1.871817e-03 533 2.320000e+00 1.000000e+00 1.876286e-03 534 2.330000e+00 1.000000e+00 1.880745e-03 535 2.340000e+00 1.000000e+00 1.885193e-03 536 2.350000e+00 1.000000e+00 1.889631e-03 537 2.360000e+00 1.000000e+00 1.894059e-03 538 2.370000e+00 1.000000e+00 1.898476e-03 539 2.380000e+00 1.000000e+00 1.902884e-03 540 2.390000e+00 1.000000e+00 1.907281e-03 541 2.400000e+00 1.000000e+00 1.911669e-03 542 2.410000e+00 1.000000e+00 1.916047e-03 543 2.420000e+00 1.000000e+00 1.920416e-03 544 2.430000e+00 1.000000e+00 1.924776e-03 545 2.440000e+00 1.000000e+00 1.929126e-03 546 2.450000e+00 1.000000e+00 1.933467e-03 547 2.460000e+00 1.000000e+00 1.937798e-03 548 2.470000e+00 1.000000e+00 1.942121e-03 549 2.480000e+00 1.000000e+00 1.946435e-03 550 2.490000e+00 1.000000e+00 1.950741e-03 551 2.500000e+00 1.000000e+00 1.955037e-03 552 2.510000e+00 1.000000e+00 1.959326e-03 553 2.520000e+00 1.000000e+00 1.963605e-03 554 2.530000e+00 1.000000e+00 1.967877e-03 555 2.540000e+00 1.000000e+00 1.972140e-03 556 2.550000e+00 1.000000e+00 1.976395e-03 557 2.560000e+00 1.000000e+00 1.980642e-03 558 2.570000e+00 1.000000e+00 1.984881e-03 559 2.580000e+00 1.000000e+00 1.989113e-03 560 2.590000e+00 1.000000e+00 1.993336e-03 561 2.600000e+00 1.000000e+00 1.997552e-03 562 2.610000e+00 1.000000e+00 2.001761e-03 563 2.620000e+00 1.000000e+00 2.005962e-03 564 2.630000e+00 1.000000e+00 2.010156e-03 565 2.640000e+00 1.000000e+00 2.014342e-03 566 2.650000e+00 1.000000e+00 2.018521e-03 567 2.660000e+00 1.000000e+00 2.022693e-03 568 2.670000e+00 1.000000e+00 2.026859e-03 569 2.680000e+00 1.000000e+00 2.031017e-03 570 2.690000e+00 1.000000e+00 2.035168e-03 571 2.700000e+00 1.000000e+00 2.039313e-03 572 2.710000e+00 1.000000e+00 2.043451e-03 573 2.720000e+00 1.000000e+00 2.047582e-03 574 2.730000e+00 1.000000e+00 2.051707e-03 575 2.740000e+00 1.000000e+00 2.055826e-03 576 2.750000e+00 1.000000e+00 2.059938e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 577 2.760000e+00 1.000000e+00 2.064044e-03 578 2.770000e+00 1.000000e+00 2.068144e-03 579 2.780000e+00 1.000000e+00 2.072238e-03 580 2.790000e+00 1.000000e+00 2.076326e-03 581 2.800000e+00 1.000000e+00 2.080407e-03 582 2.810000e+00 1.000000e+00 2.084483e-03 583 2.820000e+00 1.000000e+00 2.088554e-03 584 2.830000e+00 1.000000e+00 2.092618e-03 585 2.840000e+00 1.000000e+00 2.096677e-03 586 2.850000e+00 1.000000e+00 2.100730e-03 587 2.860000e+00 1.000000e+00 2.104778e-03 588 2.870000e+00 1.000000e+00 2.108821e-03 589 2.880000e+00 1.000000e+00 2.112858e-03 590 2.890000e+00 1.000000e+00 2.116890e-03 591 2.900000e+00 1.000000e+00 2.120917e-03 592 2.910000e+00 1.000000e+00 2.124938e-03 593 2.920000e+00 1.000000e+00 2.128955e-03 594 2.930000e+00 1.000000e+00 2.132966e-03 595 2.940000e+00 1.000000e+00 2.136973e-03 596 2.950000e+00 1.000000e+00 2.140975e-03 597 2.960000e+00 1.000000e+00 2.144972e-03 598 2.970000e+00 1.000000e+00 2.148964e-03 599 2.980000e+00 1.000000e+00 2.152952e-03 600 2.990000e+00 1.000000e+00 2.156935e-03 601 3.000000e+00 1.000000e+00 2.160913e-03 602 0.000000e+00 1.500000e+00 0.000000e+00 603 1.000000e-02 1.500000e+00 6.670045e-05 604 2.000000e-02 1.500000e+00 1.321933e-04 605 3.000000e-02 1.500000e+00 1.964976e-04 606 4.000000e-02 1.500000e+00 2.596311e-04 607 5.000000e-02 1.500000e+00 3.216106e-04 608 6.000000e-02 1.500000e+00 3.824518e-04 609 7.000000e-02 1.500000e+00 4.421697e-04 610 8.000000e-02 1.500000e+00 5.007785e-04 611 9.000000e-02 1.500000e+00 5.582918e-04 612 1.000000e-01 1.500000e+00 6.147226e-04 613 1.100000e-01 1.500000e+00 6.700838e-04 614 1.200000e-01 1.500000e+00 7.243877e-04 615 1.300000e-01 1.500000e+00 7.776464e-04 616 1.400000e-01 1.500000e+00 8.298717e-04 617 1.500000e-01 1.500000e+00 8.810753e-04 618 1.600000e-01 1.500000e+00 9.312687e-04 619 1.700000e-01 1.500000e+00 9.804632e-04 620 1.800000e-01 1.500000e+00 1.028670e-03 621 1.900000e-01 1.500000e+00 1.075900e-03 622 2.000000e-01 1.500000e+00 1.122164e-03 623 2.100000e-01 1.500000e+00 1.167473e-03 624 2.200000e-01 1.500000e+00 1.211838e-03 625 2.300000e-01 1.500000e+00 1.255268e-03 626 2.400000e-01 1.500000e+00 1.297774e-03 627 2.500000e-01 1.500000e+00 1.339366e-03 628 2.600000e-01 1.500000e+00 1.380055e-03 629 2.700000e-01 1.500000e+00 1.419849e-03 630 2.800000e-01 1.500000e+00 1.458758e-03 631 2.900000e-01 1.500000e+00 1.496792e-03 632 3.000000e-01 1.500000e+00 1.533960e-03 633 3.100000e-01 1.500000e+00 1.570271e-03 634 3.200000e-01 1.500000e+00 1.605734e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 635 3.300000e-01 1.500000e+00 1.640358e-03 636 3.400000e-01 1.500000e+00 1.674151e-03 637 3.500000e-01 1.500000e+00 1.707121e-03 638 3.600000e-01 1.500000e+00 1.739278e-03 639 3.700000e-01 1.500000e+00 1.770629e-03 640 3.800000e-01 1.500000e+00 1.801181e-03 641 3.900000e-01 1.500000e+00 1.830945e-03 642 4.000000e-01 1.500000e+00 1.859926e-03 643 4.100000e-01 1.500000e+00 1.888133e-03 644 4.200000e-01 1.500000e+00 1.915573e-03 645 4.300000e-01 1.500000e+00 1.942254e-03 646 4.400000e-01 1.500000e+00 1.968183e-03 647 4.500000e-01 1.500000e+00 1.993369e-03 648 4.600000e-01 1.500000e+00 2.017818e-03 649 4.700000e-01 1.500000e+00 2.041537e-03 650 4.800000e-01 1.500000e+00 2.064536e-03 651 4.900000e-01 1.500000e+00 2.086820e-03 652 5.000000e-01 1.500000e+00 2.108399e-03 653 5.100000e-01 1.500000e+00 2.129280e-03 654 5.200000e-01 1.500000e+00 2.149471e-03 655 5.300000e-01 1.500000e+00 2.168980e-03 656 5.400000e-01 1.500000e+00 2.187818e-03 657 5.500000e-01 1.500000e+00 2.205994e-03 658 5.600000e-01 1.500000e+00 2.223517e-03 659 5.700000e-01 1.500000e+00 2.240398e-03 660 5.800000e-01 1.500000e+00 2.256651e-03 661 5.900000e-01 1.500000e+00 2.272286e-03 662 6.000000e-01 1.500000e+00 2.287319e-03 663 6.100000e-01 1.500000e+00 2.301764e-03 664 6.200000e-01 1.500000e+00 2.315639e-03 665 6.300000e-01 1.500000e+00 2.328962e-03 666 6.400000e-01 1.500000e+00 2.341751e-03 667 6.500000e-01 1.500000e+00 2.354030e-03 668 6.600000e-01 1.500000e+00 2.365820e-03 669 6.700000e-01 1.500000e+00 2.377145e-03 670 6.800000e-01 1.500000e+00 2.388030e-03 671 6.900000e-01 1.500000e+00 2.398501e-03 672 7.000000e-01 1.500000e+00 2.408585e-03 673 7.100000e-01 1.500000e+00 2.418308e-03 674 7.200000e-01 1.500000e+00 2.427696e-03 675 7.300000e-01 1.500000e+00 2.436777e-03 676 7.400000e-01 1.500000e+00 2.445575e-03 677 7.500000e-01 1.500000e+00 2.454117e-03 678 7.600000e-01 1.500000e+00 2.462427e-03 679 7.700000e-01 1.500000e+00 2.470529e-03 680 7.800000e-01 1.500000e+00 2.478448e-03 681 7.900000e-01 1.500000e+00 2.486207e-03 682 8.000000e-01 1.500000e+00 2.493829e-03 683 8.100000e-01 1.500000e+00 2.501339e-03 684 8.200000e-01 1.500000e+00 2.508758e-03 685 8.300000e-01 1.500000e+00 2.516112e-03 686 8.400000e-01 1.500000e+00 2.523425e-03 687 8.500000e-01 1.500000e+00 2.530722e-03 688 8.600000e-01 1.500000e+00 2.538031e-03 689 8.700000e-01 1.500000e+00 2.545378e-03 690 8.800000e-01 1.500000e+00 2.552793e-03 691 8.900000e-01 1.500000e+00 2.560307e-03 692 9.000000e-01 1.500000e+00 2.567949e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 693 9.100000e-01 1.500000e+00 2.575752e-03 694 9.200000e-01 1.500000e+00 2.583749e-03 695 9.300000e-01 1.500000e+00 2.591973e-03 696 9.400000e-01 1.500000e+00 2.600454e-03 697 9.500000e-01 1.500000e+00 2.609223e-03 698 9.600000e-01 1.500000e+00 2.618309e-03 699 9.700000e-01 1.500000e+00 2.627734e-03 700 9.800000e-01 1.500000e+00 2.637519e-03 701 9.900000e-01 1.500000e+00 2.647677e-03 702 1.000000e+00 1.500000e+00 2.658216e-03 703 1.010000e+00 1.500000e+00 2.669135e-03 704 1.020000e+00 1.500000e+00 2.680429e-03 705 1.030000e+00 1.500000e+00 2.692080e-03 706 1.040000e+00 1.500000e+00 2.704067e-03 707 1.050000e+00 1.500000e+00 2.716360e-03 708 1.060000e+00 1.500000e+00 2.728925e-03 709 1.070000e+00 1.500000e+00 2.741721e-03 710 1.080000e+00 1.500000e+00 2.754706e-03 711 1.090000e+00 1.500000e+00 2.767839e-03 712 1.100000e+00 1.500000e+00 2.781123e-03 713 1.110000e+00 1.500000e+00 2.794518e-03 714 1.120000e+00 1.500000e+00 2.807957e-03 715 1.130000e+00 1.500000e+00 2.821388e-03 716 1.140000e+00 1.500000e+00 2.834765e-03 717 1.150000e+00 1.500000e+00 2.848055e-03 718 1.160000e+00 1.500000e+00 2.861230e-03 719 1.170000e+00 1.500000e+00 2.874267e-03 720 1.180000e+00 1.500000e+00 2.887153e-03 721 1.190000e+00 1.500000e+00 2.899873e-03 722 1.200000e+00 1.500000e+00 2.912422e-03 723 1.210000e+00 1.500000e+00 2.924795e-03 724 1.220000e+00 1.500000e+00 2.936989e-03 725 1.230000e+00 1.500000e+00 2.949005e-03 726 1.240000e+00 1.500000e+00 2.960845e-03 727 1.250000e+00 1.500000e+00 2.972510e-03 728 1.260000e+00 1.500000e+00 2.984006e-03 729 1.270000e+00 1.500000e+00 2.995337e-03 730 1.280000e+00 1.500000e+00 3.006507e-03 731 1.290000e+00 1.500000e+00 3.017522e-03 732 1.300000e+00 1.500000e+00 3.028386e-03 733 1.310000e+00 1.500000e+00 3.039107e-03 734 1.320000e+00 1.500000e+00 3.049688e-03 735 1.330000e+00 1.500000e+00 3.060135e-03 736 1.340000e+00 1.500000e+00 3.070454e-03 737 1.350000e+00 1.500000e+00 3.080649e-03 738 1.360000e+00 1.500000e+00 3.090725e-03 739 1.370000e+00 1.500000e+00 3.100686e-03 740 1.380000e+00 1.500000e+00 3.110538e-03 741 1.390000e+00 1.500000e+00 3.120284e-03 742 1.400000e+00 1.500000e+00 3.129929e-03 743 1.410000e+00 1.500000e+00 3.139475e-03 744 1.420000e+00 1.500000e+00 3.148928e-03 745 1.430000e+00 1.500000e+00 3.158290e-03 746 1.440000e+00 1.500000e+00 3.167564e-03 747 1.450000e+00 1.500000e+00 3.176754e-03 748 1.460000e+00 1.500000e+00 3.185863e-03 749 1.470000e+00 1.500000e+00 3.194893e-03 750 1.480000e+00 1.500000e+00 3.203847e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 751 1.490000e+00 1.500000e+00 3.212728e-03 752 1.500000e+00 1.500000e+00 3.221538e-03 753 1.510000e+00 1.500000e+00 3.230279e-03 754 1.520000e+00 1.500000e+00 3.238954e-03 755 1.530000e+00 1.500000e+00 3.247565e-03 756 1.540000e+00 1.500000e+00 3.256113e-03 757 1.550000e+00 1.500000e+00 3.264600e-03 758 1.560000e+00 1.500000e+00 3.273029e-03 759 1.570000e+00 1.500000e+00 3.281400e-03 760 1.580000e+00 1.500000e+00 3.289716e-03 761 1.590000e+00 1.500000e+00 3.297978e-03 762 1.600000e+00 1.500000e+00 3.306187e-03 763 1.610000e+00 1.500000e+00 3.314345e-03 764 1.620000e+00 1.500000e+00 3.322454e-03 765 1.630000e+00 1.500000e+00 3.330513e-03 766 1.640000e+00 1.500000e+00 3.338525e-03 767 1.650000e+00 1.500000e+00 3.346491e-03 768 1.660000e+00 1.500000e+00 3.354412e-03 769 1.670000e+00 1.500000e+00 3.362288e-03 770 1.680000e+00 1.500000e+00 3.370121e-03 771 1.690000e+00 1.500000e+00 3.377912e-03 772 1.700000e+00 1.500000e+00 3.385661e-03 773 1.710000e+00 1.500000e+00 3.393369e-03 774 1.720000e+00 1.500000e+00 3.401037e-03 775 1.730000e+00 1.500000e+00 3.408665e-03 776 1.740000e+00 1.500000e+00 3.416255e-03 777 1.750000e+00 1.500000e+00 3.423807e-03 778 1.760000e+00 1.500000e+00 3.431322e-03 779 1.770000e+00 1.500000e+00 3.438799e-03 780 1.780000e+00 1.500000e+00 3.446241e-03 781 1.790000e+00 1.500000e+00 3.453646e-03 782 1.800000e+00 1.500000e+00 3.461017e-03 783 1.810000e+00 1.500000e+00 3.468352e-03 784 1.820000e+00 1.500000e+00 3.475653e-03 785 1.830000e+00 1.500000e+00 3.482920e-03 786 1.840000e+00 1.500000e+00 3.490154e-03 787 1.850000e+00 1.500000e+00 3.497355e-03 788 1.860000e+00 1.500000e+00 3.504523e-03 789 1.870000e+00 1.500000e+00 3.511659e-03 790 1.880000e+00 1.500000e+00 3.518763e-03 791 1.890000e+00 1.500000e+00 3.525836e-03 792 1.900000e+00 1.500000e+00 3.532878e-03 793 1.910000e+00 1.500000e+00 3.539889e-03 794 1.920000e+00 1.500000e+00 3.546869e-03 795 1.930000e+00 1.500000e+00 3.553820e-03 796 1.940000e+00 1.500000e+00 3.560741e-03 797 1.950000e+00 1.500000e+00 3.567634e-03 798 1.960000e+00 1.500000e+00 3.574497e-03 799 1.970000e+00 1.500000e+00 3.581332e-03 800 1.980000e+00 1.500000e+00 3.588139e-03 801 1.990000e+00 1.500000e+00 3.594918e-03 802 2.000000e+00 1.500000e+00 3.601670e-03 803 2.010000e+00 1.500000e+00 3.608394e-03 804 2.020000e+00 1.500000e+00 3.615093e-03 805 2.030000e+00 1.500000e+00 3.621764e-03 806 2.040000e+00 1.500000e+00 3.628410e-03 807 2.050000e+00 1.500000e+00 3.635030e-03 808 2.060000e+00 1.500000e+00 3.641625e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 809 2.070000e+00 1.500000e+00 3.648195e-03 810 2.080000e+00 1.500000e+00 3.654740e-03 811 2.090000e+00 1.500000e+00 3.661261e-03 812 2.100000e+00 1.500000e+00 3.667758e-03 813 2.110000e+00 1.500000e+00 3.674232e-03 814 2.120000e+00 1.500000e+00 3.680682e-03 815 2.130000e+00 1.500000e+00 3.687109e-03 816 2.140000e+00 1.500000e+00 3.693513e-03 817 2.150000e+00 1.500000e+00 3.699895e-03 818 2.160000e+00 1.500000e+00 3.706254e-03 819 2.170000e+00 1.500000e+00 3.712592e-03 820 2.180000e+00 1.500000e+00 3.718909e-03 821 2.190000e+00 1.500000e+00 3.725204e-03 822 2.200000e+00 1.500000e+00 3.731478e-03 823 2.210000e+00 1.500000e+00 3.737731e-03 824 2.220000e+00 1.500000e+00 3.743965e-03 825 2.230000e+00 1.500000e+00 3.750178e-03 826 2.240000e+00 1.500000e+00 3.756371e-03 827 2.250000e+00 1.500000e+00 3.762544e-03 828 2.260000e+00 1.500000e+00 3.768698e-03 829 2.270000e+00 1.500000e+00 3.774834e-03 830 2.280000e+00 1.500000e+00 3.780950e-03 831 2.290000e+00 1.500000e+00 3.787048e-03 832 2.300000e+00 1.500000e+00 3.793127e-03 833 2.310000e+00 1.500000e+00 3.799189e-03 834 2.320000e+00 1.500000e+00 3.805232e-03 835 2.330000e+00 1.500000e+00 3.811258e-03 836 2.340000e+00 1.500000e+00 3.817267e-03 837 2.350000e+00 1.500000e+00 3.823259e-03 838 2.360000e+00 1.500000e+00 3.829233e-03 839 2.370000e+00 1.500000e+00 3.835191e-03 840 2.380000e+00 1.500000e+00 3.841133e-03 841 2.390000e+00 1.500000e+00 3.847058e-03 842 2.400000e+00 1.500000e+00 3.852967e-03 843 2.410000e+00 1.500000e+00 3.858861e-03 844 2.420000e+00 1.500000e+00 3.864739e-03 845 2.430000e+00 1.500000e+00 3.870601e-03 846 2.440000e+00 1.500000e+00 3.876449e-03 847 2.450000e+00 1.500000e+00 3.882281e-03 848 2.460000e+00 1.500000e+00 3.888098e-03 849 2.470000e+00 1.500000e+00 3.893901e-03 850 2.480000e+00 1.500000e+00 3.899690e-03 851 2.490000e+00 1.500000e+00 3.905464e-03 852 2.500000e+00 1.500000e+00 3.911224e-03 853 2.510000e+00 1.500000e+00 3.916971e-03 854 2.520000e+00 1.500000e+00 3.922704e-03 855 2.530000e+00 1.500000e+00 3.928423e-03 856 2.540000e+00 1.500000e+00 3.934129e-03 857 2.550000e+00 1.500000e+00 3.939822e-03 858 2.560000e+00 1.500000e+00 3.945502e-03 859 2.570000e+00 1.500000e+00 3.951169e-03 860 2.580000e+00 1.500000e+00 3.956824e-03 861 2.590000e+00 1.500000e+00 3.962466e-03 862 2.600000e+00 1.500000e+00 3.968095e-03 863 2.610000e+00 1.500000e+00 3.973713e-03 864 2.620000e+00 1.500000e+00 3.979319e-03 865 2.630000e+00 1.500000e+00 3.984913e-03 866 2.640000e+00 1.500000e+00 3.990495e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 867 2.650000e+00 1.500000e+00 3.996066e-03 868 2.660000e+00 1.500000e+00 4.001625e-03 869 2.670000e+00 1.500000e+00 4.007174e-03 870 2.680000e+00 1.500000e+00 4.012711e-03 871 2.690000e+00 1.500000e+00 4.018237e-03 872 2.700000e+00 1.500000e+00 4.023753e-03 873 2.710000e+00 1.500000e+00 4.029258e-03 874 2.720000e+00 1.500000e+00 4.034752e-03 875 2.730000e+00 1.500000e+00 4.040236e-03 876 2.740000e+00 1.500000e+00 4.045710e-03 877 2.750000e+00 1.500000e+00 4.051174e-03 878 2.760000e+00 1.500000e+00 4.056629e-03 879 2.770000e+00 1.500000e+00 4.062073e-03 880 2.780000e+00 1.500000e+00 4.067508e-03 881 2.790000e+00 1.500000e+00 4.072933e-03 882 2.800000e+00 1.500000e+00 4.078348e-03 883 2.810000e+00 1.500000e+00 4.083755e-03 884 2.820000e+00 1.500000e+00 4.089152e-03 885 2.830000e+00 1.500000e+00 4.094541e-03 886 2.840000e+00 1.500000e+00 4.099920e-03 887 2.850000e+00 1.500000e+00 4.105291e-03 888 2.860000e+00 1.500000e+00 4.110653e-03 889 2.870000e+00 1.500000e+00 4.116007e-03 890 2.880000e+00 1.500000e+00 4.121352e-03 891 2.890000e+00 1.500000e+00 4.126689e-03 892 2.900000e+00 1.500000e+00 4.132018e-03 893 2.910000e+00 1.500000e+00 4.137338e-03 894 2.920000e+00 1.500000e+00 4.142651e-03 895 2.930000e+00 1.500000e+00 4.147956e-03 896 2.940000e+00 1.500000e+00 4.153253e-03 897 2.950000e+00 1.500000e+00 4.158543e-03 898 2.960000e+00 1.500000e+00 4.163825e-03 899 2.970000e+00 1.500000e+00 4.169100e-03 900 2.980000e+00 1.500000e+00 4.174368e-03 901 2.990000e+00 1.500000e+00 4.179628e-03 902 3.000000e+00 1.500000e+00 4.184881e-03 903 0.000000e+00 2.000000e+00 0.000000e+00 904 1.000000e-02 2.000000e+00 8.811602e-05 905 2.000000e-02 2.000000e+00 1.750348e-04 906 3.000000e-02 2.000000e+00 2.607739e-04 907 4.000000e-02 2.000000e+00 3.453498e-04 908 5.000000e-02 2.000000e+00 4.287780e-04 909 6.000000e-02 2.000000e+00 5.110728e-04 910 7.000000e-02 2.000000e+00 5.922480e-04 911 8.000000e-02 2.000000e+00 6.723166e-04 912 9.000000e-02 2.000000e+00 7.512910e-04 913 1.000000e-01 2.000000e+00 8.291832e-04 914 1.100000e-01 2.000000e+00 9.060046e-04 915 1.200000e-01 2.000000e+00 9.817667e-04 916 1.300000e-01 2.000000e+00 1.056480e-03 917 1.400000e-01 2.000000e+00 1.130157e-03 918 1.500000e-01 2.000000e+00 1.202806e-03 919 1.600000e-01 2.000000e+00 1.274439e-03 920 1.700000e-01 2.000000e+00 1.345065e-03 921 1.800000e-01 2.000000e+00 1.414696e-03 922 1.900000e-01 2.000000e+00 1.483341e-03 923 2.000000e-01 2.000000e+00 1.551011e-03 924 2.100000e-01 2.000000e+00 1.617714e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 925 2.200000e-01 2.000000e+00 1.683461e-03 926 2.300000e-01 2.000000e+00 1.748261e-03 927 2.400000e-01 2.000000e+00 1.812124e-03 928 2.500000e-01 2.000000e+00 1.875059e-03 929 2.600000e-01 2.000000e+00 1.937075e-03 930 2.700000e-01 2.000000e+00 1.998180e-03 931 2.800000e-01 2.000000e+00 2.058385e-03 932 2.900000e-01 2.000000e+00 2.117697e-03 933 3.000000e-01 2.000000e+00 2.176124e-03 934 3.100000e-01 2.000000e+00 2.233676e-03 935 3.200000e-01 2.000000e+00 2.290360e-03 936 3.300000e-01 2.000000e+00 2.346185e-03 937 3.400000e-01 2.000000e+00 2.401157e-03 938 3.500000e-01 2.000000e+00 2.455285e-03 939 3.600000e-01 2.000000e+00 2.508577e-03 940 3.700000e-01 2.000000e+00 2.561039e-03 941 3.800000e-01 2.000000e+00 2.612678e-03 942 3.900000e-01 2.000000e+00 2.663503e-03 943 4.000000e-01 2.000000e+00 2.713519e-03 944 4.100000e-01 2.000000e+00 2.762734e-03 945 4.200000e-01 2.000000e+00 2.811154e-03 946 4.300000e-01 2.000000e+00 2.858786e-03 947 4.400000e-01 2.000000e+00 2.905635e-03 948 4.500000e-01 2.000000e+00 2.951709e-03 949 4.600000e-01 2.000000e+00 2.997013e-03 950 4.700000e-01 2.000000e+00 3.041553e-03 951 4.800000e-01 2.000000e+00 3.085335e-03 952 4.900000e-01 2.000000e+00 3.128365e-03 953 5.000000e-01 2.000000e+00 3.170649e-03 954 5.100000e-01 2.000000e+00 3.212191e-03 955 5.200000e-01 2.000000e+00 3.252997e-03 956 5.300000e-01 2.000000e+00 3.293073e-03 957 5.400000e-01 2.000000e+00 3.332424e-03 958 5.500000e-01 2.000000e+00 3.371054e-03 959 5.600000e-01 2.000000e+00 3.408969e-03 960 5.700000e-01 2.000000e+00 3.446173e-03 961 5.800000e-01 2.000000e+00 3.482672e-03 962 5.900000e-01 2.000000e+00 3.518469e-03 963 6.000000e-01 2.000000e+00 3.553569e-03 964 6.100000e-01 2.000000e+00 3.587978e-03 965 6.200000e-01 2.000000e+00 3.621698e-03 966 6.300000e-01 2.000000e+00 3.654735e-03 967 6.400000e-01 2.000000e+00 3.687092e-03 968 6.500000e-01 2.000000e+00 3.718773e-03 969 6.600000e-01 2.000000e+00 3.749783e-03 970 6.700000e-01 2.000000e+00 3.780125e-03 971 6.800000e-01 2.000000e+00 3.809803e-03 972 6.900000e-01 2.000000e+00 3.838821e-03 973 7.000000e-01 2.000000e+00 3.867182e-03 974 7.100000e-01 2.000000e+00 3.894890e-03 975 7.200000e-01 2.000000e+00 3.921949e-03 976 7.300000e-01 2.000000e+00 3.948361e-03 977 7.400000e-01 2.000000e+00 3.974130e-03 978 7.500000e-01 2.000000e+00 3.999259e-03 979 7.600000e-01 2.000000e+00 4.023753e-03 980 7.700000e-01 2.000000e+00 4.047614e-03 981 7.800000e-01 2.000000e+00 4.070846e-03 982 7.900000e-01 2.000000e+00 4.093454e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 983 8.000000e-01 2.000000e+00 4.115442e-03 984 8.100000e-01 2.000000e+00 4.136813e-03 985 8.200000e-01 2.000000e+00 4.157574e-03 986 8.300000e-01 2.000000e+00 4.177731e-03 987 8.400000e-01 2.000000e+00 4.197290e-03 988 8.500000e-01 2.000000e+00 4.216260e-03 989 8.600000e-01 2.000000e+00 4.234650e-03 990 8.700000e-01 2.000000e+00 4.252471e-03 991 8.800000e-01 2.000000e+00 4.269737e-03 992 8.900000e-01 2.000000e+00 4.286461e-03 993 9.000000e-01 2.000000e+00 4.302662e-03 994 9.100000e-01 2.000000e+00 4.318359e-03 995 9.200000e-01 2.000000e+00 4.333575e-03 996 9.300000e-01 2.000000e+00 4.348336e-03 997 9.400000e-01 2.000000e+00 4.362669e-03 998 9.500000e-01 2.000000e+00 4.376606e-03 999 9.600000e-01 2.000000e+00 4.390182e-03 1000 9.700000e-01 2.000000e+00 4.403433e-03 1001 9.800000e-01 2.000000e+00 4.416400e-03 1002 9.900000e-01 2.000000e+00 4.429127e-03 1003 1.000000e+00 2.000000e+00 4.441657e-03 1004 1.010000e+00 2.000000e+00 4.454040e-03 1005 1.020000e+00 2.000000e+00 4.466324e-03 1006 1.030000e+00 2.000000e+00 4.478563e-03 1007 1.040000e+00 2.000000e+00 4.490806e-03 1008 1.050000e+00 2.000000e+00 4.503109e-03 1009 1.060000e+00 2.000000e+00 4.515522e-03 1010 1.070000e+00 2.000000e+00 4.528096e-03 1011 1.080000e+00 2.000000e+00 4.540879e-03 1012 1.090000e+00 2.000000e+00 4.553913e-03 1013 1.100000e+00 2.000000e+00 4.567237e-03 1014 1.110000e+00 2.000000e+00 4.580880e-03 1015 1.120000e+00 2.000000e+00 4.594864e-03 1016 1.130000e+00 2.000000e+00 4.609202e-03 1017 1.140000e+00 2.000000e+00 4.623895e-03 1018 1.150000e+00 2.000000e+00 4.638935e-03 1019 1.160000e+00 2.000000e+00 4.654304e-03 1020 1.170000e+00 2.000000e+00 4.669973e-03 1021 1.180000e+00 2.000000e+00 4.685906e-03 1022 1.190000e+00 2.000000e+00 4.702072e-03 1023 1.200000e+00 2.000000e+00 4.718482e-03 1024 1.210000e+00 2.000000e+00 4.735067e-03 1025 1.220000e+00 2.000000e+00 4.751754e-03 1026 1.230000e+00 2.000000e+00 4.768478e-03 1027 1.240000e+00 2.000000e+00 4.785182e-03 1028 1.250000e+00 2.000000e+00 4.801818e-03 1029 1.260000e+00 2.000000e+00 4.818345e-03 1030 1.270000e+00 2.000000e+00 4.834730e-03 1031 1.280000e+00 2.000000e+00 4.850945e-03 1032 1.290000e+00 2.000000e+00 4.866970e-03 1033 1.300000e+00 2.000000e+00 4.882791e-03 1034 1.310000e+00 2.000000e+00 4.898397e-03 1035 1.320000e+00 2.000000e+00 4.913780e-03 1036 1.330000e+00 2.000000e+00 4.928938e-03 1037 1.340000e+00 2.000000e+00 4.943871e-03 1038 1.350000e+00 2.000000e+00 4.958579e-03 1039 1.360000e+00 2.000000e+00 4.973065e-03 1040 1.370000e+00 2.000000e+00 4.987334e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1041 1.380000e+00 2.000000e+00 5.001392e-03 1042 1.390000e+00 2.000000e+00 5.015243e-03 1043 1.400000e+00 2.000000e+00 5.028894e-03 1044 1.410000e+00 2.000000e+00 5.042353e-03 1045 1.420000e+00 2.000000e+00 5.055624e-03 1046 1.430000e+00 2.000000e+00 5.068716e-03 1047 1.440000e+00 2.000000e+00 5.081634e-03 1048 1.450000e+00 2.000000e+00 5.094386e-03 1049 1.460000e+00 2.000000e+00 5.106977e-03 1050 1.470000e+00 2.000000e+00 5.119414e-03 1051 1.480000e+00 2.000000e+00 5.131702e-03 1052 1.490000e+00 2.000000e+00 5.143847e-03 1053 1.500000e+00 2.000000e+00 5.155855e-03 1054 1.510000e+00 2.000000e+00 5.167730e-03 1055 1.520000e+00 2.000000e+00 5.179478e-03 1056 1.530000e+00 2.000000e+00 5.191103e-03 1057 1.540000e+00 2.000000e+00 5.202610e-03 1058 1.550000e+00 2.000000e+00 5.214003e-03 1059 1.560000e+00 2.000000e+00 5.225285e-03 1060 1.570000e+00 2.000000e+00 5.236462e-03 1061 1.580000e+00 2.000000e+00 5.247536e-03 1062 1.590000e+00 2.000000e+00 5.258511e-03 1063 1.600000e+00 2.000000e+00 5.269391e-03 1064 1.610000e+00 2.000000e+00 5.280178e-03 1065 1.620000e+00 2.000000e+00 5.290875e-03 1066 1.630000e+00 2.000000e+00 5.301486e-03 1067 1.640000e+00 2.000000e+00 5.312012e-03 1068 1.650000e+00 2.000000e+00 5.322458e-03 1069 1.660000e+00 2.000000e+00 5.332824e-03 1070 1.670000e+00 2.000000e+00 5.343114e-03 1071 1.680000e+00 2.000000e+00 5.353329e-03 1072 1.690000e+00 2.000000e+00 5.363472e-03 1073 1.700000e+00 2.000000e+00 5.373544e-03 1074 1.710000e+00 2.000000e+00 5.383548e-03 1075 1.720000e+00 2.000000e+00 5.393486e-03 1076 1.730000e+00 2.000000e+00 5.403358e-03 1077 1.740000e+00 2.000000e+00 5.413167e-03 1078 1.750000e+00 2.000000e+00 5.422914e-03 1079 1.760000e+00 2.000000e+00 5.432601e-03 1080 1.770000e+00 2.000000e+00 5.442229e-03 1081 1.780000e+00 2.000000e+00 5.451798e-03 1082 1.790000e+00 2.000000e+00 5.461312e-03 1083 1.800000e+00 2.000000e+00 5.470769e-03 1084 1.810000e+00 2.000000e+00 5.480173e-03 1085 1.820000e+00 2.000000e+00 5.489523e-03 1086 1.830000e+00 2.000000e+00 5.498820e-03 1087 1.840000e+00 2.000000e+00 5.508066e-03 1088 1.850000e+00 2.000000e+00 5.517262e-03 1089 1.860000e+00 2.000000e+00 5.526407e-03 1090 1.870000e+00 2.000000e+00 5.535504e-03 1091 1.880000e+00 2.000000e+00 5.544552e-03 1092 1.890000e+00 2.000000e+00 5.553553e-03 1093 1.900000e+00 2.000000e+00 5.562507e-03 1094 1.910000e+00 2.000000e+00 5.571415e-03 1095 1.920000e+00 2.000000e+00 5.580277e-03 1096 1.930000e+00 2.000000e+00 5.589095e-03 1097 1.940000e+00 2.000000e+00 5.597868e-03 1098 1.950000e+00 2.000000e+00 5.606598e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1099 1.960000e+00 2.000000e+00 5.615285e-03 1100 1.970000e+00 2.000000e+00 5.623930e-03 1101 1.980000e+00 2.000000e+00 5.632533e-03 1102 1.990000e+00 2.000000e+00 5.641094e-03 1103 2.000000e+00 2.000000e+00 5.649615e-03 1104 2.010000e+00 2.000000e+00 5.658096e-03 1105 2.020000e+00 2.000000e+00 5.666538e-03 1106 2.030000e+00 2.000000e+00 5.674940e-03 1107 2.040000e+00 2.000000e+00 5.683305e-03 1108 2.050000e+00 2.000000e+00 5.691631e-03 1109 2.060000e+00 2.000000e+00 5.699920e-03 1110 2.070000e+00 2.000000e+00 5.708172e-03 1111 2.080000e+00 2.000000e+00 5.716389e-03 1112 2.090000e+00 2.000000e+00 5.724569e-03 1113 2.100000e+00 2.000000e+00 5.732714e-03 1114 2.110000e+00 2.000000e+00 5.740825e-03 1115 2.120000e+00 2.000000e+00 5.748901e-03 1116 2.130000e+00 2.000000e+00 5.756944e-03 1117 2.140000e+00 2.000000e+00 5.764954e-03 1118 2.150000e+00 2.000000e+00 5.772931e-03 1119 2.160000e+00 2.000000e+00 5.780875e-03 1120 2.170000e+00 2.000000e+00 5.788788e-03 1121 2.180000e+00 2.000000e+00 5.796670e-03 1122 2.190000e+00 2.000000e+00 5.804521e-03 1123 2.200000e+00 2.000000e+00 5.812342e-03 1124 2.210000e+00 2.000000e+00 5.820132e-03 1125 2.220000e+00 2.000000e+00 5.827894e-03 1126 2.230000e+00 2.000000e+00 5.835626e-03 1127 2.240000e+00 2.000000e+00 5.843329e-03 1128 2.250000e+00 2.000000e+00 5.851005e-03 1129 2.260000e+00 2.000000e+00 5.858652e-03 1130 2.270000e+00 2.000000e+00 5.866273e-03 1131 2.280000e+00 2.000000e+00 5.873866e-03 1132 2.290000e+00 2.000000e+00 5.881433e-03 1133 2.300000e+00 2.000000e+00 5.888973e-03 1134 2.310000e+00 2.000000e+00 5.896488e-03 1135 2.320000e+00 2.000000e+00 5.903978e-03 1136 2.330000e+00 2.000000e+00 5.911442e-03 1137 2.340000e+00 2.000000e+00 5.918882e-03 1138 2.350000e+00 2.000000e+00 5.926297e-03 1139 2.360000e+00 2.000000e+00 5.933688e-03 1140 2.370000e+00 2.000000e+00 5.941056e-03 1141 2.380000e+00 2.000000e+00 5.948400e-03 1142 2.390000e+00 2.000000e+00 5.955722e-03 1143 2.400000e+00 2.000000e+00 5.963021e-03 1144 2.410000e+00 2.000000e+00 5.970297e-03 1145 2.420000e+00 2.000000e+00 5.977552e-03 1146 2.430000e+00 2.000000e+00 5.984785e-03 1147 2.440000e+00 2.000000e+00 5.991997e-03 1148 2.450000e+00 2.000000e+00 5.999187e-03 1149 2.460000e+00 2.000000e+00 6.006357e-03 1150 2.470000e+00 2.000000e+00 6.013507e-03 1151 2.480000e+00 2.000000e+00 6.020636e-03 1152 2.490000e+00 2.000000e+00 6.027745e-03 1153 2.500000e+00 2.000000e+00 6.034835e-03 1154 2.510000e+00 2.000000e+00 6.041905e-03 1155 2.520000e+00 2.000000e+00 6.048957e-03 1156 2.530000e+00 2.000000e+00 6.055990e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1157 2.540000e+00 2.000000e+00 6.063004e-03 1158 2.550000e+00 2.000000e+00 6.070000e-03 1159 2.560000e+00 2.000000e+00 6.076978e-03 1160 2.570000e+00 2.000000e+00 6.083938e-03 1161 2.580000e+00 2.000000e+00 6.090881e-03 1162 2.590000e+00 2.000000e+00 6.097806e-03 1163 2.600000e+00 2.000000e+00 6.104715e-03 1164 2.610000e+00 2.000000e+00 6.111606e-03 1165 2.620000e+00 2.000000e+00 6.118482e-03 1166 2.630000e+00 2.000000e+00 6.125341e-03 1167 2.640000e+00 2.000000e+00 6.132184e-03 1168 2.650000e+00 2.000000e+00 6.139011e-03 1169 2.660000e+00 2.000000e+00 6.145822e-03 1170 2.670000e+00 2.000000e+00 6.152619e-03 1171 2.680000e+00 2.000000e+00 6.159400e-03 1172 2.690000e+00 2.000000e+00 6.166166e-03 1173 2.700000e+00 2.000000e+00 6.172917e-03 1174 2.710000e+00 2.000000e+00 6.179654e-03 1175 2.720000e+00 2.000000e+00 6.186376e-03 1176 2.730000e+00 2.000000e+00 6.193085e-03 1177 2.740000e+00 2.000000e+00 6.199779e-03 1178 2.750000e+00 2.000000e+00 6.206460e-03 1179 2.760000e+00 2.000000e+00 6.213127e-03 1180 2.770000e+00 2.000000e+00 6.219781e-03 1181 2.780000e+00 2.000000e+00 6.226422e-03 1182 2.790000e+00 2.000000e+00 6.233050e-03 1183 2.800000e+00 2.000000e+00 6.239665e-03 1184 2.810000e+00 2.000000e+00 6.246267e-03 1185 2.820000e+00 2.000000e+00 6.252857e-03 1186 2.830000e+00 2.000000e+00 6.259435e-03 1187 2.840000e+00 2.000000e+00 6.266000e-03 1188 2.850000e+00 2.000000e+00 6.272554e-03 1189 2.860000e+00 2.000000e+00 6.279096e-03 1190 2.870000e+00 2.000000e+00 6.285627e-03 1191 2.880000e+00 2.000000e+00 6.292146e-03 1192 2.890000e+00 2.000000e+00 6.298654e-03 1193 2.900000e+00 2.000000e+00 6.305151e-03 1194 2.910000e+00 2.000000e+00 6.311637e-03 1195 2.920000e+00 2.000000e+00 6.318112e-03 1196 2.930000e+00 2.000000e+00 6.324577e-03 1197 2.940000e+00 2.000000e+00 6.331031e-03 1198 2.950000e+00 2.000000e+00 6.337475e-03 1199 2.960000e+00 2.000000e+00 6.343909e-03 1200 2.970000e+00 2.000000e+00 6.350332e-03 1201 2.980000e+00 2.000000e+00 6.356746e-03 1202 2.990000e+00 2.000000e+00 6.363151e-03 1203 3.000000e+00 2.000000e+00 6.369546e-03 1204 0.000000e+00 2.500000e+00 0.000000e+00 1205 1.000000e-02 2.500000e+00 1.026370e-04 1206 2.000000e-02 2.500000e+00 2.041497e-04 1207 3.000000e-02 2.500000e+00 3.045539e-04 1208 4.000000e-02 2.500000e+00 4.038641e-04 1209 5.000000e-02 2.500000e+00 5.020939e-04 1210 6.000000e-02 2.500000e+00 5.992561e-04 1211 7.000000e-02 2.500000e+00 6.953627e-04 1212 8.000000e-02 2.500000e+00 7.904251e-04 1213 9.000000e-02 2.500000e+00 8.844539e-04 1214 1.000000e-01 2.500000e+00 9.774597e-04 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1215 1.100000e-01 2.500000e+00 1.069453e-03 1216 1.200000e-01 2.500000e+00 1.160442e-03 1217 1.300000e-01 2.500000e+00 1.250438e-03 1218 1.400000e-01 2.500000e+00 1.339450e-03 1219 1.500000e-01 2.500000e+00 1.427486e-03 1220 1.600000e-01 2.500000e+00 1.514557e-03 1221 1.700000e-01 2.500000e+00 1.600670e-03 1222 1.800000e-01 2.500000e+00 1.685836e-03 1223 1.900000e-01 2.500000e+00 1.770063e-03 1224 2.000000e-01 2.500000e+00 1.853359e-03 1225 2.100000e-01 2.500000e+00 1.935733e-03 1226 2.200000e-01 2.500000e+00 2.017193e-03 1227 2.300000e-01 2.500000e+00 2.097749e-03 1228 2.400000e-01 2.500000e+00 2.177407e-03 1229 2.500000e-01 2.500000e+00 2.256177e-03 1230 2.600000e-01 2.500000e+00 2.334066e-03 1231 2.700000e-01 2.500000e+00 2.411083e-03 1232 2.800000e-01 2.500000e+00 2.487234e-03 1233 2.900000e-01 2.500000e+00 2.562527e-03 1234 3.000000e-01 2.500000e+00 2.636971e-03 1235 3.100000e-01 2.500000e+00 2.710572e-03 1236 3.200000e-01 2.500000e+00 2.783337e-03 1237 3.300000e-01 2.500000e+00 2.855273e-03 1238 3.400000e-01 2.500000e+00 2.926387e-03 1239 3.500000e-01 2.500000e+00 2.996687e-03 1240 3.600000e-01 2.500000e+00 3.066178e-03 1241 3.700000e-01 2.500000e+00 3.134867e-03 1242 3.800000e-01 2.500000e+00 3.202761e-03 1243 3.900000e-01 2.500000e+00 3.269865e-03 1244 4.000000e-01 2.500000e+00 3.336185e-03 1245 4.100000e-01 2.500000e+00 3.401729e-03 1246 4.200000e-01 2.500000e+00 3.466500e-03 1247 4.300000e-01 2.500000e+00 3.530506e-03 1248 4.400000e-01 2.500000e+00 3.593752e-03 1249 4.500000e-01 2.500000e+00 3.656242e-03 1250 4.600000e-01 2.500000e+00 3.717983e-03 1251 4.700000e-01 2.500000e+00 3.778980e-03 1252 4.800000e-01 2.500000e+00 3.839238e-03 1253 4.900000e-01 2.500000e+00 3.898761e-03 1254 5.000000e-01 2.500000e+00 3.957555e-03 1255 5.100000e-01 2.500000e+00 4.015625e-03 1256 5.200000e-01 2.500000e+00 4.072976e-03 1257 5.300000e-01 2.500000e+00 4.129611e-03 1258 5.400000e-01 2.500000e+00 4.185536e-03 1259 5.500000e-01 2.500000e+00 4.240755e-03 1260 5.600000e-01 2.500000e+00 4.295272e-03 1261 5.700000e-01 2.500000e+00 4.349092e-03 1262 5.800000e-01 2.500000e+00 4.402218e-03 1263 5.900000e-01 2.500000e+00 4.454656e-03 1264 6.000000e-01 2.500000e+00 4.506408e-03 1265 6.100000e-01 2.500000e+00 4.557480e-03 1266 6.200000e-01 2.500000e+00 4.607874e-03 1267 6.300000e-01 2.500000e+00 4.657595e-03 1268 6.400000e-01 2.500000e+00 4.706646e-03 1269 6.500000e-01 2.500000e+00 4.755031e-03 1270 6.600000e-01 2.500000e+00 4.802753e-03 1271 6.700000e-01 2.500000e+00 4.849817e-03 1272 6.800000e-01 2.500000e+00 4.896225e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1273 6.900000e-01 2.500000e+00 4.941980e-03 1274 7.000000e-01 2.500000e+00 4.987087e-03 1275 7.100000e-01 2.500000e+00 5.031548e-03 1276 7.200000e-01 2.500000e+00 5.075366e-03 1277 7.300000e-01 2.500000e+00 5.118545e-03 1278 7.400000e-01 2.500000e+00 5.161087e-03 1279 7.500000e-01 2.500000e+00 5.202995e-03 1280 7.600000e-01 2.500000e+00 5.244273e-03 1281 7.700000e-01 2.500000e+00 5.284923e-03 1282 7.800000e-01 2.500000e+00 5.324947e-03 1283 7.900000e-01 2.500000e+00 5.364349e-03 1284 8.000000e-01 2.500000e+00 5.403130e-03 1285 8.100000e-01 2.500000e+00 5.441294e-03 1286 8.200000e-01 2.500000e+00 5.478842e-03 1287 8.300000e-01 2.500000e+00 5.515777e-03 1288 8.400000e-01 2.500000e+00 5.552102e-03 1289 8.500000e-01 2.500000e+00 5.587817e-03 1290 8.600000e-01 2.500000e+00 5.622926e-03 1291 8.700000e-01 2.500000e+00 5.657431e-03 1292 8.800000e-01 2.500000e+00 5.691333e-03 1293 8.900000e-01 2.500000e+00 5.724633e-03 1294 9.000000e-01 2.500000e+00 5.757335e-03 1295 9.100000e-01 2.500000e+00 5.789440e-03 1296 9.200000e-01 2.500000e+00 5.820949e-03 1297 9.300000e-01 2.500000e+00 5.851865e-03 1298 9.400000e-01 2.500000e+00 5.882189e-03 1299 9.500000e-01 2.500000e+00 5.911924e-03 1300 9.600000e-01 2.500000e+00 5.941071e-03 1301 9.700000e-01 2.500000e+00 5.969633e-03 1302 9.800000e-01 2.500000e+00 5.997613e-03 1303 9.900000e-01 2.500000e+00 6.025014e-03 1304 1.000000e+00 2.500000e+00 6.051840e-03 1305 1.010000e+00 2.500000e+00 6.078096e-03 1306 1.020000e+00 2.500000e+00 6.103787e-03 1307 1.030000e+00 2.500000e+00 6.128919e-03 1308 1.040000e+00 2.500000e+00 6.153502e-03 1309 1.050000e+00 2.500000e+00 6.177545e-03 1310 1.060000e+00 2.500000e+00 6.201060e-03 1311 1.070000e+00 2.500000e+00 6.224060e-03 1312 1.080000e+00 2.500000e+00 6.246564e-03 1313 1.090000e+00 2.500000e+00 6.268590e-03 1314 1.100000e+00 2.500000e+00 6.290163e-03 1315 1.110000e+00 2.500000e+00 6.311308e-03 1316 1.120000e+00 2.500000e+00 6.332059e-03 1317 1.130000e+00 2.500000e+00 6.352449e-03 1318 1.140000e+00 2.500000e+00 6.372518e-03 1319 1.150000e+00 2.500000e+00 6.392310e-03 1320 1.160000e+00 2.500000e+00 6.411871e-03 1321 1.170000e+00 2.500000e+00 6.431253e-03 1322 1.180000e+00 2.500000e+00 6.450507e-03 1323 1.190000e+00 2.500000e+00 6.469687e-03 1324 1.200000e+00 2.500000e+00 6.488845e-03 1325 1.210000e+00 2.500000e+00 6.508032e-03 1326 1.220000e+00 2.500000e+00 6.527293e-03 1327 1.230000e+00 2.500000e+00 6.546669e-03 1328 1.240000e+00 2.500000e+00 6.566191e-03 1329 1.250000e+00 2.500000e+00 6.585882e-03 1330 1.260000e+00 2.500000e+00 6.605754e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1331 1.270000e+00 2.500000e+00 6.625807e-03 1332 1.280000e+00 2.500000e+00 6.646033e-03 1333 1.290000e+00 2.500000e+00 6.666461e-03 1334 1.300000e+00 2.500000e+00 6.687067e-03 1335 1.310000e+00 2.500000e+00 6.707794e-03 1336 1.320000e+00 2.500000e+00 6.728582e-03 1337 1.330000e+00 2.500000e+00 6.749372e-03 1338 1.340000e+00 2.500000e+00 6.770109e-03 1339 1.350000e+00 2.500000e+00 6.790743e-03 1340 1.360000e+00 2.500000e+00 6.811229e-03 1341 1.370000e+00 2.500000e+00 6.831526e-03 1342 1.380000e+00 2.500000e+00 6.851602e-03 1343 1.390000e+00 2.500000e+00 6.871430e-03 1344 1.400000e+00 2.500000e+00 6.890991e-03 1345 1.410000e+00 2.500000e+00 6.910267e-03 1346 1.420000e+00 2.500000e+00 6.929251e-03 1347 1.430000e+00 2.500000e+00 6.947935e-03 1348 1.440000e+00 2.500000e+00 6.966317e-03 1349 1.450000e+00 2.500000e+00 6.984399e-03 1350 1.460000e+00 2.500000e+00 7.002182e-03 1351 1.470000e+00 2.500000e+00 7.019672e-03 1352 1.480000e+00 2.500000e+00 7.036875e-03 1353 1.490000e+00 2.500000e+00 7.053799e-03 1354 1.500000e+00 2.500000e+00 7.070451e-03 1355 1.510000e+00 2.500000e+00 7.086840e-03 1356 1.520000e+00 2.500000e+00 7.102975e-03 1357 1.530000e+00 2.500000e+00 7.118866e-03 1358 1.540000e+00 2.500000e+00 7.134520e-03 1359 1.550000e+00 2.500000e+00 7.149947e-03 1360 1.560000e+00 2.500000e+00 7.165155e-03 1361 1.570000e+00 2.500000e+00 7.180154e-03 1362 1.580000e+00 2.500000e+00 7.194950e-03 1363 1.590000e+00 2.500000e+00 7.209552e-03 1364 1.600000e+00 2.500000e+00 7.223968e-03 1365 1.610000e+00 2.500000e+00 7.238204e-03 1366 1.620000e+00 2.500000e+00 7.252268e-03 1367 1.630000e+00 2.500000e+00 7.266166e-03 1368 1.640000e+00 2.500000e+00 7.279905e-03 1369 1.650000e+00 2.500000e+00 7.293490e-03 1370 1.660000e+00 2.500000e+00 7.306928e-03 1371 1.670000e+00 2.500000e+00 7.320223e-03 1372 1.680000e+00 2.500000e+00 7.333381e-03 1373 1.690000e+00 2.500000e+00 7.346407e-03 1374 1.700000e+00 2.500000e+00 7.359305e-03 1375 1.710000e+00 2.500000e+00 7.372080e-03 1376 1.720000e+00 2.500000e+00 7.384736e-03 1377 1.730000e+00 2.500000e+00 7.397278e-03 1378 1.740000e+00 2.500000e+00 7.409708e-03 1379 1.750000e+00 2.500000e+00 7.422031e-03 1380 1.760000e+00 2.500000e+00 7.434251e-03 1381 1.770000e+00 2.500000e+00 7.446369e-03 1382 1.780000e+00 2.500000e+00 7.458390e-03 1383 1.790000e+00 2.500000e+00 7.470317e-03 1384 1.800000e+00 2.500000e+00 7.482151e-03 1385 1.810000e+00 2.500000e+00 7.493896e-03 1386 1.820000e+00 2.500000e+00 7.505555e-03 1387 1.830000e+00 2.500000e+00 7.517129e-03 1388 1.840000e+00 2.500000e+00 7.528621e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1389 1.850000e+00 2.500000e+00 7.540034e-03 1390 1.860000e+00 2.500000e+00 7.551368e-03 1391 1.870000e+00 2.500000e+00 7.562626e-03 1392 1.880000e+00 2.500000e+00 7.573809e-03 1393 1.890000e+00 2.500000e+00 7.584920e-03 1394 1.900000e+00 2.500000e+00 7.595960e-03 1395 1.910000e+00 2.500000e+00 7.606930e-03 1396 1.920000e+00 2.500000e+00 7.617832e-03 1397 1.930000e+00 2.500000e+00 7.628666e-03 1398 1.940000e+00 2.500000e+00 7.639436e-03 1399 1.950000e+00 2.500000e+00 7.650141e-03 1400 1.960000e+00 2.500000e+00 7.660783e-03 1401 1.970000e+00 2.500000e+00 7.671362e-03 1402 1.980000e+00 2.500000e+00 7.681881e-03 1403 1.990000e+00 2.500000e+00 7.692340e-03 1404 2.000000e+00 2.500000e+00 7.702739e-03 1405 2.010000e+00 2.500000e+00 7.713081e-03 1406 2.020000e+00 2.500000e+00 7.723366e-03 1407 2.030000e+00 2.500000e+00 7.733595e-03 1408 2.040000e+00 2.500000e+00 7.743768e-03 1409 2.050000e+00 2.500000e+00 7.753887e-03 1410 2.060000e+00 2.500000e+00 7.763953e-03 1411 2.070000e+00 2.500000e+00 7.773966e-03 1412 2.080000e+00 2.500000e+00 7.783928e-03 1413 2.090000e+00 2.500000e+00 7.793838e-03 1414 2.100000e+00 2.500000e+00 7.803698e-03 1415 2.110000e+00 2.500000e+00 7.813510e-03 1416 2.120000e+00 2.500000e+00 7.823272e-03 1417 2.130000e+00 2.500000e+00 7.832987e-03 1418 2.140000e+00 2.500000e+00 7.842655e-03 1419 2.150000e+00 2.500000e+00 7.852277e-03 1420 2.160000e+00 2.500000e+00 7.861853e-03 1421 2.170000e+00 2.500000e+00 7.871385e-03 1422 2.180000e+00 2.500000e+00 7.880873e-03 1423 2.190000e+00 2.500000e+00 7.890317e-03 1424 2.200000e+00 2.500000e+00 7.899719e-03 1425 2.210000e+00 2.500000e+00 7.909079e-03 1426 2.220000e+00 2.500000e+00 7.918398e-03 1427 2.230000e+00 2.500000e+00 7.927676e-03 1428 2.240000e+00 2.500000e+00 7.936915e-03 1429 2.250000e+00 2.500000e+00 7.946114e-03 1430 2.260000e+00 2.500000e+00 7.955275e-03 1431 2.270000e+00 2.500000e+00 7.964397e-03 1432 2.280000e+00 2.500000e+00 7.973483e-03 1433 2.290000e+00 2.500000e+00 7.982531e-03 1434 2.300000e+00 2.500000e+00 7.991544e-03 1435 2.310000e+00 2.500000e+00 8.000521e-03 1436 2.320000e+00 2.500000e+00 8.009463e-03 1437 2.330000e+00 2.500000e+00 8.018370e-03 1438 2.340000e+00 2.500000e+00 8.027244e-03 1439 2.350000e+00 2.500000e+00 8.036085e-03 1440 2.360000e+00 2.500000e+00 8.044892e-03 1441 2.370000e+00 2.500000e+00 8.053668e-03 1442 2.380000e+00 2.500000e+00 8.062411e-03 1443 2.390000e+00 2.500000e+00 8.071123e-03 1444 2.400000e+00 2.500000e+00 8.079805e-03 1445 2.410000e+00 2.500000e+00 8.088456e-03 1446 2.420000e+00 2.500000e+00 8.097078e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1447 2.430000e+00 2.500000e+00 8.105670e-03 1448 2.440000e+00 2.500000e+00 8.114233e-03 1449 2.450000e+00 2.500000e+00 8.122768e-03 1450 2.460000e+00 2.500000e+00 8.131275e-03 1451 2.470000e+00 2.500000e+00 8.139755e-03 1452 2.480000e+00 2.500000e+00 8.148207e-03 1453 2.490000e+00 2.500000e+00 8.156632e-03 1454 2.500000e+00 2.500000e+00 8.165032e-03 1455 2.510000e+00 2.500000e+00 8.173405e-03 1456 2.520000e+00 2.500000e+00 8.181753e-03 1457 2.530000e+00 2.500000e+00 8.190076e-03 1458 2.540000e+00 2.500000e+00 8.198374e-03 1459 2.550000e+00 2.500000e+00 8.206648e-03 1460 2.560000e+00 2.500000e+00 8.214898e-03 1461 2.570000e+00 2.500000e+00 8.223124e-03 1462 2.580000e+00 2.500000e+00 8.231327e-03 1463 2.590000e+00 2.500000e+00 8.239507e-03 1464 2.600000e+00 2.500000e+00 8.247665e-03 1465 2.610000e+00 2.500000e+00 8.255800e-03 1466 2.620000e+00 2.500000e+00 8.263914e-03 1467 2.630000e+00 2.500000e+00 8.272006e-03 1468 2.640000e+00 2.500000e+00 8.280076e-03 1469 2.650000e+00 2.500000e+00 8.288126e-03 1470 2.660000e+00 2.500000e+00 8.296156e-03 1471 2.670000e+00 2.500000e+00 8.304165e-03 1472 2.680000e+00 2.500000e+00 8.312154e-03 1473 2.690000e+00 2.500000e+00 8.320123e-03 1474 2.700000e+00 2.500000e+00 8.328073e-03 1475 2.710000e+00 2.500000e+00 8.336004e-03 1476 2.720000e+00 2.500000e+00 8.343917e-03 1477 2.730000e+00 2.500000e+00 8.351810e-03 1478 2.740000e+00 2.500000e+00 8.359686e-03 1479 2.750000e+00 2.500000e+00 8.367543e-03 1480 2.760000e+00 2.500000e+00 8.375383e-03 1481 2.770000e+00 2.500000e+00 8.383205e-03 1482 2.780000e+00 2.500000e+00 8.391011e-03 1483 2.790000e+00 2.500000e+00 8.398799e-03 1484 2.800000e+00 2.500000e+00 8.406570e-03 1485 2.810000e+00 2.500000e+00 8.414326e-03 1486 2.820000e+00 2.500000e+00 8.422064e-03 1487 2.830000e+00 2.500000e+00 8.429788e-03 1488 2.840000e+00 2.500000e+00 8.437495e-03 1489 2.850000e+00 2.500000e+00 8.445187e-03 1490 2.860000e+00 2.500000e+00 8.452863e-03 1491 2.870000e+00 2.500000e+00 8.460525e-03 1492 2.880000e+00 2.500000e+00 8.468172e-03 1493 2.890000e+00 2.500000e+00 8.475804e-03 1494 2.900000e+00 2.500000e+00 8.483422e-03 1495 2.910000e+00 2.500000e+00 8.491026e-03 1496 2.920000e+00 2.500000e+00 8.498615e-03 1497 2.930000e+00 2.500000e+00 8.506192e-03 1498 2.940000e+00 2.500000e+00 8.513754e-03 1499 2.950000e+00 2.500000e+00 8.521303e-03 1500 2.960000e+00 2.500000e+00 8.528839e-03 1501 2.970000e+00 2.500000e+00 8.536363e-03 1502 2.980000e+00 2.500000e+00 8.543873e-03 1503 2.990000e+00 2.500000e+00 8.551371e-03 1504 3.000000e+00 2.500000e+00 8.558856e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1505 0.000000e+00 3.000000e+00 0.000000e+00 1506 1.000000e-02 3.000000e+00 1.118014e-04 1507 2.000000e-02 3.000000e+00 2.225797e-04 1508 3.000000e-02 3.000000e+00 3.323487e-04 1509 4.000000e-02 3.000000e+00 4.411212e-04 1510 5.000000e-02 3.000000e+00 5.489088e-04 1511 6.000000e-02 3.000000e+00 6.557227e-04 1512 7.000000e-02 3.000000e+00 7.615730e-04 1513 8.000000e-02 3.000000e+00 8.664696e-04 1514 9.000000e-02 3.000000e+00 9.704215e-04 1515 1.000000e-01 3.000000e+00 1.073438e-03 1516 1.100000e-01 3.000000e+00 1.175526e-03 1517 1.200000e-01 3.000000e+00 1.276696e-03 1518 1.300000e-01 3.000000e+00 1.376955e-03 1519 1.400000e-01 3.000000e+00 1.476311e-03 1520 1.500000e-01 3.000000e+00 1.574772e-03 1521 1.600000e-01 3.000000e+00 1.672345e-03 1522 1.700000e-01 3.000000e+00 1.769039e-03 1523 1.800000e-01 3.000000e+00 1.864860e-03 1524 1.900000e-01 3.000000e+00 1.959816e-03 1525 2.000000e-01 3.000000e+00 2.053916e-03 1526 2.100000e-01 3.000000e+00 2.147165e-03 1527 2.200000e-01 3.000000e+00 2.239571e-03 1528 2.300000e-01 3.000000e+00 2.331142e-03 1529 2.400000e-01 3.000000e+00 2.421884e-03 1530 2.500000e-01 3.000000e+00 2.511804e-03 1531 2.600000e-01 3.000000e+00 2.600910e-03 1532 2.700000e-01 3.000000e+00 2.689207e-03 1533 2.800000e-01 3.000000e+00 2.776703e-03 1534 2.900000e-01 3.000000e+00 2.863404e-03 1535 3.000000e-01 3.000000e+00 2.949316e-03 1536 3.100000e-01 3.000000e+00 3.034446e-03 1537 3.200000e-01 3.000000e+00 3.118799e-03 1538 3.300000e-01 3.000000e+00 3.202382e-03 1539 3.400000e-01 3.000000e+00 3.285200e-03 1540 3.500000e-01 3.000000e+00 3.367260e-03 1541 3.600000e-01 3.000000e+00 3.448567e-03 1542 3.700000e-01 3.000000e+00 3.529126e-03 1543 3.800000e-01 3.000000e+00 3.608943e-03 1544 3.900000e-01 3.000000e+00 3.688023e-03 1545 4.000000e-01 3.000000e+00 3.766371e-03 1546 4.100000e-01 3.000000e+00 3.843993e-03 1547 4.200000e-01 3.000000e+00 3.920893e-03 1548 4.300000e-01 3.000000e+00 3.997076e-03 1549 4.400000e-01 3.000000e+00 4.072547e-03 1550 4.500000e-01 3.000000e+00 4.147311e-03 1551 4.600000e-01 3.000000e+00 4.221372e-03 1552 4.700000e-01 3.000000e+00 4.294734e-03 1553 4.800000e-01 3.000000e+00 4.367402e-03 1554 4.900000e-01 3.000000e+00 4.439380e-03 1555 5.000000e-01 3.000000e+00 4.510673e-03 1556 5.100000e-01 3.000000e+00 4.581284e-03 1557 5.200000e-01 3.000000e+00 4.651217e-03 1558 5.300000e-01 3.000000e+00 4.720477e-03 1559 5.400000e-01 3.000000e+00 4.789066e-03 1560 5.500000e-01 3.000000e+00 4.856990e-03 1561 5.600000e-01 3.000000e+00 4.924252e-03 1562 5.700000e-01 3.000000e+00 4.990854e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1563 5.800000e-01 3.000000e+00 5.056802e-03 1564 5.900000e-01 3.000000e+00 5.122097e-03 1565 6.000000e-01 3.000000e+00 5.186745e-03 1566 6.100000e-01 3.000000e+00 5.250747e-03 1567 6.200000e-01 3.000000e+00 5.314108e-03 1568 6.300000e-01 3.000000e+00 5.376830e-03 1569 6.400000e-01 3.000000e+00 5.438918e-03 1570 6.500000e-01 3.000000e+00 5.500372e-03 1571 6.600000e-01 3.000000e+00 5.561198e-03 1572 6.700000e-01 3.000000e+00 5.621398e-03 1573 6.800000e-01 3.000000e+00 5.680974e-03 1574 6.900000e-01 3.000000e+00 5.739930e-03 1575 7.000000e-01 3.000000e+00 5.798268e-03 1576 7.100000e-01 3.000000e+00 5.855992e-03 1577 7.200000e-01 3.000000e+00 5.913104e-03 1578 7.300000e-01 3.000000e+00 5.969606e-03 1579 7.400000e-01 3.000000e+00 6.025502e-03 1580 7.500000e-01 3.000000e+00 6.080794e-03 1581 7.600000e-01 3.000000e+00 6.135483e-03 1582 7.700000e-01 3.000000e+00 6.189574e-03 1583 7.800000e-01 3.000000e+00 6.243069e-03 1584 7.900000e-01 3.000000e+00 6.295968e-03 1585 8.000000e-01 3.000000e+00 6.348276e-03 1586 8.100000e-01 3.000000e+00 6.399995e-03 1587 8.200000e-01 3.000000e+00 6.451126e-03 1588 8.300000e-01 3.000000e+00 6.501672e-03 1589 8.400000e-01 3.000000e+00 6.551635e-03 1590 8.500000e-01 3.000000e+00 6.601018e-03 1591 8.600000e-01 3.000000e+00 6.649821e-03 1592 8.700000e-01 3.000000e+00 6.698048e-03 1593 8.800000e-01 3.000000e+00 6.745701e-03 1594 8.900000e-01 3.000000e+00 6.792781e-03 1595 9.000000e-01 3.000000e+00 6.839290e-03 1596 9.100000e-01 3.000000e+00 6.885231e-03 1597 9.200000e-01 3.000000e+00 6.930604e-03 1598 9.300000e-01 3.000000e+00 6.975413e-03 1599 9.400000e-01 3.000000e+00 7.019658e-03 1600 9.500000e-01 3.000000e+00 7.063342e-03 1601 9.600000e-01 3.000000e+00 7.106466e-03 1602 9.700000e-01 3.000000e+00 7.149032e-03 1603 9.800000e-01 3.000000e+00 7.191041e-03 1604 9.900000e-01 3.000000e+00 7.232495e-03 1605 1.000000e+00 3.000000e+00 7.273397e-03 1606 1.010000e+00 3.000000e+00 7.313747e-03 1607 1.020000e+00 3.000000e+00 7.353547e-03 1608 1.030000e+00 3.000000e+00 7.392799e-03 1609 1.040000e+00 3.000000e+00 7.431505e-03 1610 1.050000e+00 3.000000e+00 7.469666e-03 1611 1.060000e+00 3.000000e+00 7.507286e-03 1612 1.070000e+00 3.000000e+00 7.544365e-03 1613 1.080000e+00 3.000000e+00 7.580908e-03 1614 1.090000e+00 3.000000e+00 7.616916e-03 1615 1.100000e+00 3.000000e+00 7.652393e-03 1616 1.110000e+00 3.000000e+00 7.687344e-03 1617 1.120000e+00 3.000000e+00 7.721772e-03 1618 1.130000e+00 3.000000e+00 7.755683e-03 1619 1.140000e+00 3.000000e+00 7.789083e-03 1620 1.150000e+00 3.000000e+00 7.821981e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1621 1.160000e+00 3.000000e+00 7.854384e-03 1622 1.170000e+00 3.000000e+00 7.886304e-03 1623 1.180000e+00 3.000000e+00 7.917753e-03 1624 1.190000e+00 3.000000e+00 7.948745e-03 1625 1.200000e+00 3.000000e+00 7.979297e-03 1626 1.210000e+00 3.000000e+00 8.009428e-03 1627 1.220000e+00 3.000000e+00 8.039160e-03 1628 1.230000e+00 3.000000e+00 8.068519e-03 1629 1.240000e+00 3.000000e+00 8.097533e-03 1630 1.250000e+00 3.000000e+00 8.126234e-03 1631 1.260000e+00 3.000000e+00 8.154655e-03 1632 1.270000e+00 3.000000e+00 8.182834e-03 1633 1.280000e+00 3.000000e+00 8.210811e-03 1634 1.290000e+00 3.000000e+00 8.238627e-03 1635 1.300000e+00 3.000000e+00 8.266323e-03 1636 1.310000e+00 3.000000e+00 8.293940e-03 1637 1.320000e+00 3.000000e+00 8.321518e-03 1638 1.330000e+00 3.000000e+00 8.349090e-03 1639 1.340000e+00 3.000000e+00 8.376687e-03 1640 1.350000e+00 3.000000e+00 8.404329e-03 1641 1.360000e+00 3.000000e+00 8.432030e-03 1642 1.370000e+00 3.000000e+00 8.459809e-03 1643 1.380000e+00 3.000000e+00 8.487694e-03 1644 1.390000e+00 3.000000e+00 8.515658e-03 1645 1.400000e+00 3.000000e+00 8.543657e-03 1646 1.410000e+00 3.000000e+00 8.571644e-03 1647 1.420000e+00 3.000000e+00 8.599564e-03 1648 1.430000e+00 3.000000e+00 8.627359e-03 1649 1.440000e+00 3.000000e+00 8.654973e-03 1650 1.450000e+00 3.000000e+00 8.682349e-03 1651 1.460000e+00 3.000000e+00 8.709436e-03 1652 1.470000e+00 3.000000e+00 8.736188e-03 1653 1.480000e+00 3.000000e+00 8.762564e-03 1654 1.490000e+00 3.000000e+00 8.788531e-03 1655 1.500000e+00 3.000000e+00 8.814065e-03 1656 1.510000e+00 3.000000e+00 8.839145e-03 1657 1.520000e+00 3.000000e+00 8.863759e-03 1658 1.530000e+00 3.000000e+00 8.887900e-03 1659 1.540000e+00 3.000000e+00 8.911566e-03 1660 1.550000e+00 3.000000e+00 8.934759e-03 1661 1.560000e+00 3.000000e+00 8.957485e-03 1662 1.570000e+00 3.000000e+00 8.979752e-03 1663 1.580000e+00 3.000000e+00 9.001571e-03 1664 1.590000e+00 3.000000e+00 9.022954e-03 1665 1.600000e+00 3.000000e+00 9.043915e-03 1666 1.610000e+00 3.000000e+00 9.064467e-03 1667 1.620000e+00 3.000000e+00 9.084625e-03 1668 1.630000e+00 3.000000e+00 9.104404e-03 1669 1.640000e+00 3.000000e+00 9.123820e-03 1670 1.650000e+00 3.000000e+00 9.142886e-03 1671 1.660000e+00 3.000000e+00 9.161617e-03 1672 1.670000e+00 3.000000e+00 9.180027e-03 1673 1.680000e+00 3.000000e+00 9.198130e-03 1674 1.690000e+00 3.000000e+00 9.215938e-03 1675 1.700000e+00 3.000000e+00 9.233464e-03 1676 1.710000e+00 3.000000e+00 9.250721e-03 1677 1.720000e+00 3.000000e+00 9.267719e-03 1678 1.730000e+00 3.000000e+00 9.284470e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1679 1.740000e+00 3.000000e+00 9.300984e-03 1680 1.750000e+00 3.000000e+00 9.317271e-03 1681 1.760000e+00 3.000000e+00 9.333340e-03 1682 1.770000e+00 3.000000e+00 9.349201e-03 1683 1.780000e+00 3.000000e+00 9.364862e-03 1684 1.790000e+00 3.000000e+00 9.380330e-03 1685 1.800000e+00 3.000000e+00 9.395615e-03 1686 1.810000e+00 3.000000e+00 9.410722e-03 1687 1.820000e+00 3.000000e+00 9.425659e-03 1688 1.830000e+00 3.000000e+00 9.440432e-03 1689 1.840000e+00 3.000000e+00 9.455048e-03 1690 1.850000e+00 3.000000e+00 9.469511e-03 1691 1.860000e+00 3.000000e+00 9.483829e-03 1692 1.870000e+00 3.000000e+00 9.498006e-03 1693 1.880000e+00 3.000000e+00 9.512046e-03 1694 1.890000e+00 3.000000e+00 9.525956e-03 1695 1.900000e+00 3.000000e+00 9.539738e-03 1696 1.910000e+00 3.000000e+00 9.553397e-03 1697 1.920000e+00 3.000000e+00 9.566938e-03 1698 1.930000e+00 3.000000e+00 9.580363e-03 1699 1.940000e+00 3.000000e+00 9.593677e-03 1700 1.950000e+00 3.000000e+00 9.606882e-03 1701 1.960000e+00 3.000000e+00 9.619982e-03 1702 1.970000e+00 3.000000e+00 9.632979e-03 1703 1.980000e+00 3.000000e+00 9.645877e-03 1704 1.990000e+00 3.000000e+00 9.658678e-03 1705 2.000000e+00 3.000000e+00 9.671385e-03 1706 2.010000e+00 3.000000e+00 9.683999e-03 1707 2.020000e+00 3.000000e+00 9.696523e-03 1708 2.030000e+00 3.000000e+00 9.708960e-03 1709 2.040000e+00 3.000000e+00 9.721310e-03 1710 2.050000e+00 3.000000e+00 9.733577e-03 1711 2.060000e+00 3.000000e+00 9.745761e-03 1712 2.070000e+00 3.000000e+00 9.757866e-03 1713 2.080000e+00 3.000000e+00 9.769891e-03 1714 2.090000e+00 3.000000e+00 9.781840e-03 1715 2.100000e+00 3.000000e+00 9.793713e-03 1716 2.110000e+00 3.000000e+00 9.805512e-03 1717 2.120000e+00 3.000000e+00 9.817239e-03 1718 2.130000e+00 3.000000e+00 9.828895e-03 1719 2.140000e+00 3.000000e+00 9.840481e-03 1720 2.150000e+00 3.000000e+00 9.851999e-03 1721 2.160000e+00 3.000000e+00 9.863450e-03 1722 2.170000e+00 3.000000e+00 9.874835e-03 1723 2.180000e+00 3.000000e+00 9.886156e-03 1724 2.190000e+00 3.000000e+00 9.897414e-03 1725 2.200000e+00 3.000000e+00 9.908610e-03 1726 2.210000e+00 3.000000e+00 9.919745e-03 1727 2.220000e+00 3.000000e+00 9.930820e-03 1728 2.230000e+00 3.000000e+00 9.941837e-03 1729 2.240000e+00 3.000000e+00 9.952797e-03 1730 2.250000e+00 3.000000e+00 9.963700e-03 1731 2.260000e+00 3.000000e+00 9.974548e-03 1732 2.270000e+00 3.000000e+00 9.985342e-03 1733 2.280000e+00 3.000000e+00 9.996083e-03 1734 2.290000e+00 3.000000e+00 1.000677e-02 1735 2.300000e+00 3.000000e+00 1.001741e-02 1736 2.310000e+00 3.000000e+00 1.002800e-02 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1737 2.320000e+00 3.000000e+00 1.003853e-02 1738 2.330000e+00 3.000000e+00 1.004902e-02 1739 2.340000e+00 3.000000e+00 1.005947e-02 1740 2.350000e+00 3.000000e+00 1.006986e-02 1741 2.360000e+00 3.000000e+00 1.008021e-02 1742 2.370000e+00 3.000000e+00 1.009051e-02 1743 2.380000e+00 3.000000e+00 1.010077e-02 1744 2.390000e+00 3.000000e+00 1.011099e-02 1745 2.400000e+00 3.000000e+00 1.012117e-02 1746 2.410000e+00 3.000000e+00 1.013130e-02 1747 2.420000e+00 3.000000e+00 1.014139e-02 1748 2.430000e+00 3.000000e+00 1.015144e-02 1749 2.440000e+00 3.000000e+00 1.016145e-02 1750 2.450000e+00 3.000000e+00 1.017143e-02 1751 2.460000e+00 3.000000e+00 1.018136e-02 1752 2.470000e+00 3.000000e+00 1.019126e-02 1753 2.480000e+00 3.000000e+00 1.020112e-02 1754 2.490000e+00 3.000000e+00 1.021094e-02 1755 2.500000e+00 3.000000e+00 1.022073e-02 1756 2.510000e+00 3.000000e+00 1.023048e-02 1757 2.520000e+00 3.000000e+00 1.024020e-02 1758 2.530000e+00 3.000000e+00 1.024989e-02 1759 2.540000e+00 3.000000e+00 1.025954e-02 1760 2.550000e+00 3.000000e+00 1.026916e-02 1761 2.560000e+00 3.000000e+00 1.027874e-02 1762 2.570000e+00 3.000000e+00 1.028830e-02 1763 2.580000e+00 3.000000e+00 1.029782e-02 1764 2.590000e+00 3.000000e+00 1.030731e-02 1765 2.600000e+00 3.000000e+00 1.031678e-02 1766 2.610000e+00 3.000000e+00 1.032621e-02 1767 2.620000e+00 3.000000e+00 1.033562e-02 1768 2.630000e+00 3.000000e+00 1.034499e-02 1769 2.640000e+00 3.000000e+00 1.035434e-02 1770 2.650000e+00 3.000000e+00 1.036366e-02 1771 2.660000e+00 3.000000e+00 1.037295e-02 1772 2.670000e+00 3.000000e+00 1.038222e-02 1773 2.680000e+00 3.000000e+00 1.039146e-02 1774 2.690000e+00 3.000000e+00 1.040068e-02 1775 2.700000e+00 3.000000e+00 1.040986e-02 1776 2.710000e+00 3.000000e+00 1.041903e-02 1777 2.720000e+00 3.000000e+00 1.042817e-02 1778 2.730000e+00 3.000000e+00 1.043728e-02 1779 2.740000e+00 3.000000e+00 1.044637e-02 1780 2.750000e+00 3.000000e+00 1.045544e-02 1781 2.760000e+00 3.000000e+00 1.046448e-02 1782 2.770000e+00 3.000000e+00 1.047351e-02 1783 2.780000e+00 3.000000e+00 1.048251e-02 1784 2.790000e+00 3.000000e+00 1.049148e-02 1785 2.800000e+00 3.000000e+00 1.050044e-02 1786 2.810000e+00 3.000000e+00 1.050937e-02 1787 2.820000e+00 3.000000e+00 1.051828e-02 1788 2.830000e+00 3.000000e+00 1.052718e-02 1789 2.840000e+00 3.000000e+00 1.053605e-02 1790 2.850000e+00 3.000000e+00 1.054490e-02 1791 2.860000e+00 3.000000e+00 1.055373e-02 1792 2.870000e+00 3.000000e+00 1.056255e-02 1793 2.880000e+00 3.000000e+00 1.057134e-02 1794 2.890000e+00 3.000000e+00 1.058011e-02 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1795 2.900000e+00 3.000000e+00 1.058887e-02 1796 2.910000e+00 3.000000e+00 1.059761e-02 1797 2.920000e+00 3.000000e+00 1.060633e-02 1798 2.930000e+00 3.000000e+00 1.061503e-02 1799 2.940000e+00 3.000000e+00 1.062372e-02 1800 2.950000e+00 3.000000e+00 1.063238e-02 1801 2.960000e+00 3.000000e+00 1.064104e-02 1802 2.970000e+00 3.000000e+00 1.064967e-02 1803 2.980000e+00 3.000000e+00 1.065829e-02 1804 2.990000e+00 3.000000e+00 1.066689e-02 1805 3.000000e+00 3.000000e+00 1.067547e-02 tmpk8ny_4pz/tests/bsim3soipd/t4.cir0000644000175000017500000000044513546075722017427 0ustar carstencarsten*model = BSIMSOI (PD) *Berkeley Spice Compatibility * * SOI NMOSFET, tied body simulation vd d 0 dc 0.05 vs s 0 dc 0 ve e 0 dc 0 vg g 0 dc 3 vb b 0 dc 0 m1 d g s e b n1 w=10u l=0.25u .option gmin=1e-25 itl1=500 noacct .dc vg 0 1.5 0.01 vb -0.3 0.5 0.1 .print dc i(vs) .include nmospd.mod tmpk8ny_4pz/tests/bsim3soipd/t5.out0000644000175000017500000013114413546075722017463 0ustar carstencarsten No. of Data Rows : 1359 Circuit: *model = BSIMSOI (PD) Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Warning: Pd = 0 is less than W. Warning: Ps = 0 is less than W. *model = BSIMSOI (PD) -------------------------------------------------------------------------------- Index v-sweep vs#branch -------------------------------------------------------------------------------- 0 0.000000e+00 1.412965e-11 1 1.000000e-02 1.868439e-11 2 2.000000e-02 2.691900e-11 3 3.000000e-02 3.714787e-11 4 4.000000e-02 5.125290e-11 5 5.000000e-02 7.069545e-11 6 6.000000e-02 9.748369e-11 7 7.000000e-02 1.343749e-10 8 8.000000e-02 1.851513e-10 9 9.000000e-02 2.549952e-10 10 1.000000e-01 3.509984e-10 11 1.100000e-01 4.828510e-10 12 1.200000e-01 6.637719e-10 13 1.300000e-01 9.117578e-10 14 1.400000e-01 1.251256e-09 15 1.500000e-01 1.715390e-09 16 1.600000e-01 2.348907e-09 17 1.700000e-01 3.212054e-09 18 1.800000e-01 4.385633e-09 19 1.900000e-01 5.977539e-09 20 2.000000e-01 8.131134e-09 21 2.100000e-01 1.103584e-08 22 2.200000e-01 1.494041e-08 23 2.300000e-01 2.016920e-08 24 2.400000e-01 2.714203e-08 25 2.500000e-01 3.639779e-08 26 2.600000e-01 4.862215e-08 27 2.700000e-01 6.467955e-08 28 2.800000e-01 8.564949e-08 29 2.900000e-01 1.128671e-07 30 3.000000e-01 1.479685e-07 31 3.100000e-01 1.929409e-07 32 3.200000e-01 2.501785e-07 33 3.300000e-01 3.225462e-07 34 3.400000e-01 4.134518e-07 35 3.500000e-01 5.269298e-07 36 3.600000e-01 6.677368e-07 37 3.700000e-01 8.414599e-07 38 3.800000e-01 1.054632e-06 39 3.900000e-01 1.314850e-06 40 4.000000e-01 1.630874e-06 41 4.100000e-01 2.012700e-06 42 4.200000e-01 2.471565e-06 43 4.300000e-01 3.019864e-06 44 4.400000e-01 3.670941e-06 45 4.500000e-01 4.438738e-06 46 4.600000e-01 5.337287e-06 47 4.700000e-01 6.380076e-06 48 4.800000e-01 7.579326e-06 49 4.900000e-01 8.945277e-06 50 5.000000e-01 1.048555e-05 51 5.100000e-01 1.220469e-05 52 5.200000e-01 1.410395e-05 53 5.300000e-01 1.618128e-05 54 5.400000e-01 1.843163e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 55 5.500000e-01 2.084730e-05 56 5.600000e-01 2.341855e-05 57 5.700000e-01 2.613410e-05 58 5.800000e-01 2.898174e-05 59 5.900000e-01 3.194880e-05 60 6.000000e-01 3.502262e-05 61 6.100000e-01 3.819081e-05 62 6.200000e-01 4.144161e-05 63 6.300000e-01 4.476398e-05 64 6.400000e-01 4.814773e-05 65 6.500000e-01 5.158359e-05 66 6.600000e-01 5.506319e-05 67 6.700000e-01 5.857906e-05 68 6.800000e-01 6.212456e-05 69 6.900000e-01 6.569384e-05 70 7.000000e-01 6.928175e-05 71 7.100000e-01 7.288380e-05 72 7.200000e-01 7.649608e-05 73 7.300000e-01 8.011519e-05 74 7.400000e-01 8.373817e-05 75 7.500000e-01 8.736247e-05 76 7.600000e-01 9.098586e-05 77 7.700000e-01 9.460644e-05 78 7.800000e-01 9.822255e-05 79 7.900000e-01 1.018327e-04 80 8.000000e-01 1.054358e-04 81 8.100000e-01 1.090306e-04 82 8.200000e-01 1.126162e-04 83 8.300000e-01 1.161919e-04 84 8.400000e-01 1.197568e-04 85 8.500000e-01 1.233105e-04 86 8.600000e-01 1.268522e-04 87 8.700000e-01 1.303816e-04 88 8.800000e-01 1.338983e-04 89 8.900000e-01 1.374018e-04 90 9.000000e-01 1.408919e-04 91 9.100000e-01 1.443682e-04 92 9.200000e-01 1.478305e-04 93 9.300000e-01 1.512785e-04 94 9.400000e-01 1.547121e-04 95 9.500000e-01 1.581310e-04 96 9.600000e-01 1.615351e-04 97 9.700000e-01 1.649242e-04 98 9.800000e-01 1.682983e-04 99 9.900000e-01 1.716570e-04 100 1.000000e+00 1.750005e-04 101 1.010000e+00 1.783285e-04 102 1.020000e+00 1.816409e-04 103 1.030000e+00 1.849377e-04 104 1.040000e+00 1.882188e-04 105 1.050000e+00 1.914840e-04 106 1.060000e+00 1.947335e-04 107 1.070000e+00 1.979670e-04 108 1.080000e+00 2.011845e-04 109 1.090000e+00 2.043860e-04 110 1.100000e+00 2.075714e-04 111 1.110000e+00 2.107407e-04 112 1.120000e+00 2.138938e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 113 1.130000e+00 2.170307e-04 114 1.140000e+00 2.201514e-04 115 1.150000e+00 2.232559e-04 116 1.160000e+00 2.263440e-04 117 1.170000e+00 2.294159e-04 118 1.180000e+00 2.324714e-04 119 1.190000e+00 2.355106e-04 120 1.200000e+00 2.385334e-04 121 1.210000e+00 2.415398e-04 122 1.220000e+00 2.445298e-04 123 1.230000e+00 2.475035e-04 124 1.240000e+00 2.504607e-04 125 1.250000e+00 2.534016e-04 126 1.260000e+00 2.563260e-04 127 1.270000e+00 2.592340e-04 128 1.280000e+00 2.621256e-04 129 1.290000e+00 2.650008e-04 130 1.300000e+00 2.678596e-04 131 1.310000e+00 2.707020e-04 132 1.320000e+00 2.735280e-04 133 1.330000e+00 2.763376e-04 134 1.340000e+00 2.791308e-04 135 1.350000e+00 2.819077e-04 136 1.360000e+00 2.846683e-04 137 1.370000e+00 2.874125e-04 138 1.380000e+00 2.901404e-04 139 1.390000e+00 2.928520e-04 140 1.400000e+00 2.955474e-04 141 1.410000e+00 2.982264e-04 142 1.420000e+00 3.008893e-04 143 1.430000e+00 3.035359e-04 144 1.440000e+00 3.061664e-04 145 1.450000e+00 3.087807e-04 146 1.460000e+00 3.113788e-04 147 1.470000e+00 3.139608e-04 148 1.480000e+00 3.165268e-04 149 1.490000e+00 3.190767e-04 150 1.500000e+00 3.216106e-04 151 0.000000e+00 1.412965e-11 152 1.000000e-02 1.868439e-11 153 2.000000e-02 2.691900e-11 154 3.000000e-02 3.714787e-11 155 4.000000e-02 5.125290e-11 156 5.000000e-02 7.069545e-11 157 6.000000e-02 9.748369e-11 158 7.000000e-02 1.343749e-10 159 8.000000e-02 1.851513e-10 160 9.000000e-02 2.549952e-10 161 1.000000e-01 3.509984e-10 162 1.100000e-01 4.828510e-10 163 1.200000e-01 6.637719e-10 164 1.300000e-01 9.117578e-10 165 1.400000e-01 1.251256e-09 166 1.500000e-01 1.715390e-09 167 1.600000e-01 2.348907e-09 168 1.700000e-01 3.212054e-09 169 1.800000e-01 4.385633e-09 170 1.900000e-01 5.977539e-09 Index v-sweep vs#branch -------------------------------------------------------------------------------- 171 2.000000e-01 8.131134e-09 172 2.100000e-01 1.103584e-08 173 2.200000e-01 1.494041e-08 174 2.300000e-01 2.016920e-08 175 2.400000e-01 2.714203e-08 176 2.500000e-01 3.639779e-08 177 2.600000e-01 4.862215e-08 178 2.700000e-01 6.467955e-08 179 2.800000e-01 8.564949e-08 180 2.900000e-01 1.128671e-07 181 3.000000e-01 1.479685e-07 182 3.100000e-01 1.929409e-07 183 3.200000e-01 2.501785e-07 184 3.300000e-01 3.225462e-07 185 3.400000e-01 4.134518e-07 186 3.500000e-01 5.269298e-07 187 3.600000e-01 6.677368e-07 188 3.700000e-01 8.414599e-07 189 3.800000e-01 1.054632e-06 190 3.900000e-01 1.314850e-06 191 4.000000e-01 1.630874e-06 192 4.100000e-01 2.012700e-06 193 4.200000e-01 2.471565e-06 194 4.300000e-01 3.019864e-06 195 4.400000e-01 3.670941e-06 196 4.500000e-01 4.438738e-06 197 4.600000e-01 5.337287e-06 198 4.700000e-01 6.380076e-06 199 4.800000e-01 7.579326e-06 200 4.900000e-01 8.945277e-06 201 5.000000e-01 1.048555e-05 202 5.100000e-01 1.220469e-05 203 5.200000e-01 1.410395e-05 204 5.300000e-01 1.618128e-05 205 5.400000e-01 1.843163e-05 206 5.500000e-01 2.084730e-05 207 5.600000e-01 2.341855e-05 208 5.700000e-01 2.613410e-05 209 5.800000e-01 2.898174e-05 210 5.900000e-01 3.194880e-05 211 6.000000e-01 3.502262e-05 212 6.100000e-01 3.819081e-05 213 6.200000e-01 4.144161e-05 214 6.300000e-01 4.476398e-05 215 6.400000e-01 4.814773e-05 216 6.500000e-01 5.158359e-05 217 6.600000e-01 5.506319e-05 218 6.700000e-01 5.857906e-05 219 6.800000e-01 6.212456e-05 220 6.900000e-01 6.569384e-05 221 7.000000e-01 6.928175e-05 222 7.100000e-01 7.288380e-05 223 7.200000e-01 7.649608e-05 224 7.300000e-01 8.011519e-05 225 7.400000e-01 8.373817e-05 226 7.500000e-01 8.736247e-05 227 7.600000e-01 9.098586e-05 228 7.700000e-01 9.460644e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 229 7.800000e-01 9.822255e-05 230 7.900000e-01 1.018327e-04 231 8.000000e-01 1.054358e-04 232 8.100000e-01 1.090306e-04 233 8.200000e-01 1.126162e-04 234 8.300000e-01 1.161919e-04 235 8.400000e-01 1.197568e-04 236 8.500000e-01 1.233105e-04 237 8.600000e-01 1.268522e-04 238 8.700000e-01 1.303816e-04 239 8.800000e-01 1.338983e-04 240 8.900000e-01 1.374018e-04 241 9.000000e-01 1.408919e-04 242 9.100000e-01 1.443682e-04 243 9.200000e-01 1.478305e-04 244 9.300000e-01 1.512785e-04 245 9.400000e-01 1.547121e-04 246 9.500000e-01 1.581310e-04 247 9.600000e-01 1.615351e-04 248 9.700000e-01 1.649242e-04 249 9.800000e-01 1.682983e-04 250 9.900000e-01 1.716570e-04 251 1.000000e+00 1.750005e-04 252 1.010000e+00 1.783285e-04 253 1.020000e+00 1.816409e-04 254 1.030000e+00 1.849377e-04 255 1.040000e+00 1.882188e-04 256 1.050000e+00 1.914840e-04 257 1.060000e+00 1.947335e-04 258 1.070000e+00 1.979670e-04 259 1.080000e+00 2.011845e-04 260 1.090000e+00 2.043860e-04 261 1.100000e+00 2.075714e-04 262 1.110000e+00 2.107407e-04 263 1.120000e+00 2.138938e-04 264 1.130000e+00 2.170307e-04 265 1.140000e+00 2.201514e-04 266 1.150000e+00 2.232559e-04 267 1.160000e+00 2.263440e-04 268 1.170000e+00 2.294159e-04 269 1.180000e+00 2.324714e-04 270 1.190000e+00 2.355106e-04 271 1.200000e+00 2.385334e-04 272 1.210000e+00 2.415398e-04 273 1.220000e+00 2.445298e-04 274 1.230000e+00 2.475035e-04 275 1.240000e+00 2.504607e-04 276 1.250000e+00 2.534016e-04 277 1.260000e+00 2.563260e-04 278 1.270000e+00 2.592340e-04 279 1.280000e+00 2.621256e-04 280 1.290000e+00 2.650008e-04 281 1.300000e+00 2.678596e-04 282 1.310000e+00 2.707020e-04 283 1.320000e+00 2.735280e-04 284 1.330000e+00 2.763376e-04 285 1.340000e+00 2.791308e-04 286 1.350000e+00 2.819077e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 287 1.360000e+00 2.846683e-04 288 1.370000e+00 2.874125e-04 289 1.380000e+00 2.901404e-04 290 1.390000e+00 2.928520e-04 291 1.400000e+00 2.955474e-04 292 1.410000e+00 2.982264e-04 293 1.420000e+00 3.008893e-04 294 1.430000e+00 3.035359e-04 295 1.440000e+00 3.061664e-04 296 1.450000e+00 3.087807e-04 297 1.460000e+00 3.113788e-04 298 1.470000e+00 3.139608e-04 299 1.480000e+00 3.165268e-04 300 1.490000e+00 3.190767e-04 301 1.500000e+00 3.216106e-04 302 0.000000e+00 1.412965e-11 303 1.000000e-02 1.868439e-11 304 2.000000e-02 2.691900e-11 305 3.000000e-02 3.714787e-11 306 4.000000e-02 5.125290e-11 307 5.000000e-02 7.069545e-11 308 6.000000e-02 9.748369e-11 309 7.000000e-02 1.343749e-10 310 8.000000e-02 1.851513e-10 311 9.000000e-02 2.549952e-10 312 1.000000e-01 3.509984e-10 313 1.100000e-01 4.828510e-10 314 1.200000e-01 6.637719e-10 315 1.300000e-01 9.117578e-10 316 1.400000e-01 1.251256e-09 317 1.500000e-01 1.715390e-09 318 1.600000e-01 2.348907e-09 319 1.700000e-01 3.212054e-09 320 1.800000e-01 4.385633e-09 321 1.900000e-01 5.977539e-09 322 2.000000e-01 8.131134e-09 323 2.100000e-01 1.103584e-08 324 2.200000e-01 1.494041e-08 325 2.300000e-01 2.016920e-08 326 2.400000e-01 2.714203e-08 327 2.500000e-01 3.639779e-08 328 2.600000e-01 4.862215e-08 329 2.700000e-01 6.467955e-08 330 2.800000e-01 8.564949e-08 331 2.900000e-01 1.128671e-07 332 3.000000e-01 1.479685e-07 333 3.100000e-01 1.929409e-07 334 3.200000e-01 2.501785e-07 335 3.300000e-01 3.225462e-07 336 3.400000e-01 4.134518e-07 337 3.500000e-01 5.269298e-07 338 3.600000e-01 6.677368e-07 339 3.700000e-01 8.414599e-07 340 3.800000e-01 1.054632e-06 341 3.900000e-01 1.314850e-06 342 4.000000e-01 1.630874e-06 343 4.100000e-01 2.012700e-06 344 4.200000e-01 2.471565e-06 Index v-sweep vs#branch -------------------------------------------------------------------------------- 345 4.300000e-01 3.019864e-06 346 4.400000e-01 3.670941e-06 347 4.500000e-01 4.438738e-06 348 4.600000e-01 5.337287e-06 349 4.700000e-01 6.380076e-06 350 4.800000e-01 7.579326e-06 351 4.900000e-01 8.945277e-06 352 5.000000e-01 1.048555e-05 353 5.100000e-01 1.220469e-05 354 5.200000e-01 1.410395e-05 355 5.300000e-01 1.618128e-05 356 5.400000e-01 1.843163e-05 357 5.500000e-01 2.084730e-05 358 5.600000e-01 2.341855e-05 359 5.700000e-01 2.613410e-05 360 5.800000e-01 2.898174e-05 361 5.900000e-01 3.194880e-05 362 6.000000e-01 3.502262e-05 363 6.100000e-01 3.819081e-05 364 6.200000e-01 4.144161e-05 365 6.300000e-01 4.476398e-05 366 6.400000e-01 4.814773e-05 367 6.500000e-01 5.158359e-05 368 6.600000e-01 5.506319e-05 369 6.700000e-01 5.857906e-05 370 6.800000e-01 6.212456e-05 371 6.900000e-01 6.569384e-05 372 7.000000e-01 6.928175e-05 373 7.100000e-01 7.288380e-05 374 7.200000e-01 7.649608e-05 375 7.300000e-01 8.011519e-05 376 7.400000e-01 8.373817e-05 377 7.500000e-01 8.736247e-05 378 7.600000e-01 9.098586e-05 379 7.700000e-01 9.460644e-05 380 7.800000e-01 9.822255e-05 381 7.900000e-01 1.018327e-04 382 8.000000e-01 1.054358e-04 383 8.100000e-01 1.090306e-04 384 8.200000e-01 1.126162e-04 385 8.300000e-01 1.161919e-04 386 8.400000e-01 1.197568e-04 387 8.500000e-01 1.233105e-04 388 8.600000e-01 1.268522e-04 389 8.700000e-01 1.303816e-04 390 8.800000e-01 1.338983e-04 391 8.900000e-01 1.374018e-04 392 9.000000e-01 1.408919e-04 393 9.100000e-01 1.443682e-04 394 9.200000e-01 1.478305e-04 395 9.300000e-01 1.512785e-04 396 9.400000e-01 1.547121e-04 397 9.500000e-01 1.581310e-04 398 9.600000e-01 1.615351e-04 399 9.700000e-01 1.649242e-04 400 9.800000e-01 1.682983e-04 401 9.900000e-01 1.716570e-04 402 1.000000e+00 1.750005e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 403 1.010000e+00 1.783285e-04 404 1.020000e+00 1.816409e-04 405 1.030000e+00 1.849377e-04 406 1.040000e+00 1.882188e-04 407 1.050000e+00 1.914840e-04 408 1.060000e+00 1.947335e-04 409 1.070000e+00 1.979670e-04 410 1.080000e+00 2.011845e-04 411 1.090000e+00 2.043860e-04 412 1.100000e+00 2.075714e-04 413 1.110000e+00 2.107407e-04 414 1.120000e+00 2.138938e-04 415 1.130000e+00 2.170307e-04 416 1.140000e+00 2.201514e-04 417 1.150000e+00 2.232559e-04 418 1.160000e+00 2.263440e-04 419 1.170000e+00 2.294159e-04 420 1.180000e+00 2.324714e-04 421 1.190000e+00 2.355106e-04 422 1.200000e+00 2.385334e-04 423 1.210000e+00 2.415398e-04 424 1.220000e+00 2.445298e-04 425 1.230000e+00 2.475035e-04 426 1.240000e+00 2.504607e-04 427 1.250000e+00 2.534016e-04 428 1.260000e+00 2.563260e-04 429 1.270000e+00 2.592340e-04 430 1.280000e+00 2.621256e-04 431 1.290000e+00 2.650008e-04 432 1.300000e+00 2.678596e-04 433 1.310000e+00 2.707020e-04 434 1.320000e+00 2.735280e-04 435 1.330000e+00 2.763376e-04 436 1.340000e+00 2.791308e-04 437 1.350000e+00 2.819077e-04 438 1.360000e+00 2.846683e-04 439 1.370000e+00 2.874125e-04 440 1.380000e+00 2.901404e-04 441 1.390000e+00 2.928520e-04 442 1.400000e+00 2.955474e-04 443 1.410000e+00 2.982264e-04 444 1.420000e+00 3.008893e-04 445 1.430000e+00 3.035359e-04 446 1.440000e+00 3.061664e-04 447 1.450000e+00 3.087807e-04 448 1.460000e+00 3.113788e-04 449 1.470000e+00 3.139608e-04 450 1.480000e+00 3.165268e-04 451 1.490000e+00 3.190767e-04 452 1.500000e+00 3.216106e-04 453 0.000000e+00 1.412965e-11 454 1.000000e-02 1.868439e-11 455 2.000000e-02 2.691900e-11 456 3.000000e-02 3.714787e-11 457 4.000000e-02 5.125290e-11 458 5.000000e-02 7.069545e-11 459 6.000000e-02 9.748369e-11 460 7.000000e-02 1.343749e-10 Index v-sweep vs#branch -------------------------------------------------------------------------------- 461 8.000000e-02 1.851513e-10 462 9.000000e-02 2.549952e-10 463 1.000000e-01 3.509984e-10 464 1.100000e-01 4.828510e-10 465 1.200000e-01 6.637719e-10 466 1.300000e-01 9.117578e-10 467 1.400000e-01 1.251256e-09 468 1.500000e-01 1.715390e-09 469 1.600000e-01 2.348907e-09 470 1.700000e-01 3.212054e-09 471 1.800000e-01 4.385633e-09 472 1.900000e-01 5.977539e-09 473 2.000000e-01 8.131134e-09 474 2.100000e-01 1.103584e-08 475 2.200000e-01 1.494041e-08 476 2.300000e-01 2.016920e-08 477 2.400000e-01 2.714203e-08 478 2.500000e-01 3.639779e-08 479 2.600000e-01 4.862215e-08 480 2.700000e-01 6.467955e-08 481 2.800000e-01 8.564949e-08 482 2.900000e-01 1.128671e-07 483 3.000000e-01 1.479685e-07 484 3.100000e-01 1.929409e-07 485 3.200000e-01 2.501785e-07 486 3.300000e-01 3.225462e-07 487 3.400000e-01 4.134518e-07 488 3.500000e-01 5.269298e-07 489 3.600000e-01 6.677368e-07 490 3.700000e-01 8.414599e-07 491 3.800000e-01 1.054632e-06 492 3.900000e-01 1.314850e-06 493 4.000000e-01 1.630874e-06 494 4.100000e-01 2.012700e-06 495 4.200000e-01 2.471565e-06 496 4.300000e-01 3.019864e-06 497 4.400000e-01 3.670941e-06 498 4.500000e-01 4.438738e-06 499 4.600000e-01 5.337287e-06 500 4.700000e-01 6.380076e-06 501 4.800000e-01 7.579326e-06 502 4.900000e-01 8.945277e-06 503 5.000000e-01 1.048555e-05 504 5.100000e-01 1.220469e-05 505 5.200000e-01 1.410395e-05 506 5.300000e-01 1.618128e-05 507 5.400000e-01 1.843163e-05 508 5.500000e-01 2.084730e-05 509 5.600000e-01 2.341855e-05 510 5.700000e-01 2.613410e-05 511 5.800000e-01 2.898174e-05 512 5.900000e-01 3.194880e-05 513 6.000000e-01 3.502262e-05 514 6.100000e-01 3.819081e-05 515 6.200000e-01 4.144161e-05 516 6.300000e-01 4.476398e-05 517 6.400000e-01 4.814773e-05 518 6.500000e-01 5.158359e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 519 6.600000e-01 5.506319e-05 520 6.700000e-01 5.857906e-05 521 6.800000e-01 6.212456e-05 522 6.900000e-01 6.569384e-05 523 7.000000e-01 6.928175e-05 524 7.100000e-01 7.288380e-05 525 7.200000e-01 7.649608e-05 526 7.300000e-01 8.011519e-05 527 7.400000e-01 8.373817e-05 528 7.500000e-01 8.736247e-05 529 7.600000e-01 9.098586e-05 530 7.700000e-01 9.460644e-05 531 7.800000e-01 9.822255e-05 532 7.900000e-01 1.018327e-04 533 8.000000e-01 1.054358e-04 534 8.100000e-01 1.090306e-04 535 8.200000e-01 1.126162e-04 536 8.300000e-01 1.161919e-04 537 8.400000e-01 1.197568e-04 538 8.500000e-01 1.233105e-04 539 8.600000e-01 1.268522e-04 540 8.700000e-01 1.303816e-04 541 8.800000e-01 1.338983e-04 542 8.900000e-01 1.374018e-04 543 9.000000e-01 1.408919e-04 544 9.100000e-01 1.443682e-04 545 9.200000e-01 1.478305e-04 546 9.300000e-01 1.512785e-04 547 9.400000e-01 1.547121e-04 548 9.500000e-01 1.581310e-04 549 9.600000e-01 1.615351e-04 550 9.700000e-01 1.649242e-04 551 9.800000e-01 1.682983e-04 552 9.900000e-01 1.716570e-04 553 1.000000e+00 1.750005e-04 554 1.010000e+00 1.783285e-04 555 1.020000e+00 1.816409e-04 556 1.030000e+00 1.849377e-04 557 1.040000e+00 1.882188e-04 558 1.050000e+00 1.914840e-04 559 1.060000e+00 1.947335e-04 560 1.070000e+00 1.979670e-04 561 1.080000e+00 2.011845e-04 562 1.090000e+00 2.043860e-04 563 1.100000e+00 2.075714e-04 564 1.110000e+00 2.107407e-04 565 1.120000e+00 2.138938e-04 566 1.130000e+00 2.170307e-04 567 1.140000e+00 2.201514e-04 568 1.150000e+00 2.232559e-04 569 1.160000e+00 2.263440e-04 570 1.170000e+00 2.294159e-04 571 1.180000e+00 2.324714e-04 572 1.190000e+00 2.355106e-04 573 1.200000e+00 2.385334e-04 574 1.210000e+00 2.415398e-04 575 1.220000e+00 2.445298e-04 576 1.230000e+00 2.475035e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 577 1.240000e+00 2.504607e-04 578 1.250000e+00 2.534016e-04 579 1.260000e+00 2.563260e-04 580 1.270000e+00 2.592340e-04 581 1.280000e+00 2.621256e-04 582 1.290000e+00 2.650008e-04 583 1.300000e+00 2.678596e-04 584 1.310000e+00 2.707020e-04 585 1.320000e+00 2.735280e-04 586 1.330000e+00 2.763376e-04 587 1.340000e+00 2.791308e-04 588 1.350000e+00 2.819077e-04 589 1.360000e+00 2.846683e-04 590 1.370000e+00 2.874125e-04 591 1.380000e+00 2.901404e-04 592 1.390000e+00 2.928520e-04 593 1.400000e+00 2.955474e-04 594 1.410000e+00 2.982264e-04 595 1.420000e+00 3.008893e-04 596 1.430000e+00 3.035359e-04 597 1.440000e+00 3.061664e-04 598 1.450000e+00 3.087807e-04 599 1.460000e+00 3.113788e-04 600 1.470000e+00 3.139608e-04 601 1.480000e+00 3.165268e-04 602 1.490000e+00 3.190767e-04 603 1.500000e+00 3.216106e-04 604 0.000000e+00 1.412965e-11 605 1.000000e-02 1.868439e-11 606 2.000000e-02 2.691900e-11 607 3.000000e-02 3.714787e-11 608 4.000000e-02 5.125290e-11 609 5.000000e-02 7.069545e-11 610 6.000000e-02 9.748369e-11 611 7.000000e-02 1.343749e-10 612 8.000000e-02 1.851513e-10 613 9.000000e-02 2.549952e-10 614 1.000000e-01 3.509984e-10 615 1.100000e-01 4.828510e-10 616 1.200000e-01 6.637719e-10 617 1.300000e-01 9.117578e-10 618 1.400000e-01 1.251256e-09 619 1.500000e-01 1.715390e-09 620 1.600000e-01 2.348907e-09 621 1.700000e-01 3.212054e-09 622 1.800000e-01 4.385633e-09 623 1.900000e-01 5.977539e-09 624 2.000000e-01 8.131134e-09 625 2.100000e-01 1.103584e-08 626 2.200000e-01 1.494041e-08 627 2.300000e-01 2.016920e-08 628 2.400000e-01 2.714203e-08 629 2.500000e-01 3.639779e-08 630 2.600000e-01 4.862215e-08 631 2.700000e-01 6.467955e-08 632 2.800000e-01 8.564949e-08 633 2.900000e-01 1.128671e-07 634 3.000000e-01 1.479685e-07 Index v-sweep vs#branch -------------------------------------------------------------------------------- 635 3.100000e-01 1.929409e-07 636 3.200000e-01 2.501785e-07 637 3.300000e-01 3.225462e-07 638 3.400000e-01 4.134518e-07 639 3.500000e-01 5.269298e-07 640 3.600000e-01 6.677368e-07 641 3.700000e-01 8.414599e-07 642 3.800000e-01 1.054632e-06 643 3.900000e-01 1.314850e-06 644 4.000000e-01 1.630874e-06 645 4.100000e-01 2.012700e-06 646 4.200000e-01 2.471565e-06 647 4.300000e-01 3.019864e-06 648 4.400000e-01 3.670941e-06 649 4.500000e-01 4.438738e-06 650 4.600000e-01 5.337287e-06 651 4.700000e-01 6.380076e-06 652 4.800000e-01 7.579326e-06 653 4.900000e-01 8.945277e-06 654 5.000000e-01 1.048555e-05 655 5.100000e-01 1.220469e-05 656 5.200000e-01 1.410395e-05 657 5.300000e-01 1.618128e-05 658 5.400000e-01 1.843163e-05 659 5.500000e-01 2.084730e-05 660 5.600000e-01 2.341855e-05 661 5.700000e-01 2.613410e-05 662 5.800000e-01 2.898174e-05 663 5.900000e-01 3.194880e-05 664 6.000000e-01 3.502262e-05 665 6.100000e-01 3.819081e-05 666 6.200000e-01 4.144161e-05 667 6.300000e-01 4.476398e-05 668 6.400000e-01 4.814773e-05 669 6.500000e-01 5.158359e-05 670 6.600000e-01 5.506319e-05 671 6.700000e-01 5.857906e-05 672 6.800000e-01 6.212456e-05 673 6.900000e-01 6.569384e-05 674 7.000000e-01 6.928175e-05 675 7.100000e-01 7.288380e-05 676 7.200000e-01 7.649608e-05 677 7.300000e-01 8.011519e-05 678 7.400000e-01 8.373817e-05 679 7.500000e-01 8.736247e-05 680 7.600000e-01 9.098586e-05 681 7.700000e-01 9.460644e-05 682 7.800000e-01 9.822255e-05 683 7.900000e-01 1.018327e-04 684 8.000000e-01 1.054358e-04 685 8.100000e-01 1.090306e-04 686 8.200000e-01 1.126162e-04 687 8.300000e-01 1.161919e-04 688 8.400000e-01 1.197568e-04 689 8.500000e-01 1.233105e-04 690 8.600000e-01 1.268522e-04 691 8.700000e-01 1.303816e-04 692 8.800000e-01 1.338983e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 693 8.900000e-01 1.374018e-04 694 9.000000e-01 1.408919e-04 695 9.100000e-01 1.443682e-04 696 9.200000e-01 1.478305e-04 697 9.300000e-01 1.512785e-04 698 9.400000e-01 1.547121e-04 699 9.500000e-01 1.581310e-04 700 9.600000e-01 1.615351e-04 701 9.700000e-01 1.649242e-04 702 9.800000e-01 1.682983e-04 703 9.900000e-01 1.716570e-04 704 1.000000e+00 1.750005e-04 705 1.010000e+00 1.783285e-04 706 1.020000e+00 1.816409e-04 707 1.030000e+00 1.849377e-04 708 1.040000e+00 1.882188e-04 709 1.050000e+00 1.914840e-04 710 1.060000e+00 1.947335e-04 711 1.070000e+00 1.979670e-04 712 1.080000e+00 2.011845e-04 713 1.090000e+00 2.043860e-04 714 1.100000e+00 2.075714e-04 715 1.110000e+00 2.107407e-04 716 1.120000e+00 2.138938e-04 717 1.130000e+00 2.170307e-04 718 1.140000e+00 2.201514e-04 719 1.150000e+00 2.232559e-04 720 1.160000e+00 2.263440e-04 721 1.170000e+00 2.294159e-04 722 1.180000e+00 2.324714e-04 723 1.190000e+00 2.355106e-04 724 1.200000e+00 2.385334e-04 725 1.210000e+00 2.415398e-04 726 1.220000e+00 2.445298e-04 727 1.230000e+00 2.475035e-04 728 1.240000e+00 2.504607e-04 729 1.250000e+00 2.534016e-04 730 1.260000e+00 2.563260e-04 731 1.270000e+00 2.592340e-04 732 1.280000e+00 2.621256e-04 733 1.290000e+00 2.650008e-04 734 1.300000e+00 2.678596e-04 735 1.310000e+00 2.707020e-04 736 1.320000e+00 2.735280e-04 737 1.330000e+00 2.763376e-04 738 1.340000e+00 2.791308e-04 739 1.350000e+00 2.819077e-04 740 1.360000e+00 2.846683e-04 741 1.370000e+00 2.874125e-04 742 1.380000e+00 2.901404e-04 743 1.390000e+00 2.928520e-04 744 1.400000e+00 2.955474e-04 745 1.410000e+00 2.982264e-04 746 1.420000e+00 3.008893e-04 747 1.430000e+00 3.035359e-04 748 1.440000e+00 3.061664e-04 749 1.450000e+00 3.087807e-04 750 1.460000e+00 3.113788e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 751 1.470000e+00 3.139608e-04 752 1.480000e+00 3.165268e-04 753 1.490000e+00 3.190767e-04 754 1.500000e+00 3.216106e-04 755 0.000000e+00 1.412965e-11 756 1.000000e-02 1.868439e-11 757 2.000000e-02 2.691900e-11 758 3.000000e-02 3.714787e-11 759 4.000000e-02 5.125290e-11 760 5.000000e-02 7.069545e-11 761 6.000000e-02 9.748369e-11 762 7.000000e-02 1.343749e-10 763 8.000000e-02 1.851513e-10 764 9.000000e-02 2.549952e-10 765 1.000000e-01 3.509984e-10 766 1.100000e-01 4.828510e-10 767 1.200000e-01 6.637719e-10 768 1.300000e-01 9.117578e-10 769 1.400000e-01 1.251256e-09 770 1.500000e-01 1.715390e-09 771 1.600000e-01 2.348907e-09 772 1.700000e-01 3.212054e-09 773 1.800000e-01 4.385633e-09 774 1.900000e-01 5.977539e-09 775 2.000000e-01 8.131134e-09 776 2.100000e-01 1.103584e-08 777 2.200000e-01 1.494041e-08 778 2.300000e-01 2.016920e-08 779 2.400000e-01 2.714203e-08 780 2.500000e-01 3.639779e-08 781 2.600000e-01 4.862215e-08 782 2.700000e-01 6.467955e-08 783 2.800000e-01 8.564949e-08 784 2.900000e-01 1.128671e-07 785 3.000000e-01 1.479685e-07 786 3.100000e-01 1.929409e-07 787 3.200000e-01 2.501785e-07 788 3.300000e-01 3.225462e-07 789 3.400000e-01 4.134518e-07 790 3.500000e-01 5.269298e-07 791 3.600000e-01 6.677368e-07 792 3.700000e-01 8.414599e-07 793 3.800000e-01 1.054632e-06 794 3.900000e-01 1.314850e-06 795 4.000000e-01 1.630874e-06 796 4.100000e-01 2.012700e-06 797 4.200000e-01 2.471565e-06 798 4.300000e-01 3.019864e-06 799 4.400000e-01 3.670941e-06 800 4.500000e-01 4.438738e-06 801 4.600000e-01 5.337287e-06 802 4.700000e-01 6.380076e-06 803 4.800000e-01 7.579326e-06 804 4.900000e-01 8.945277e-06 805 5.000000e-01 1.048555e-05 806 5.100000e-01 1.220469e-05 807 5.200000e-01 1.410395e-05 808 5.300000e-01 1.618128e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 809 5.400000e-01 1.843163e-05 810 5.500000e-01 2.084730e-05 811 5.600000e-01 2.341855e-05 812 5.700000e-01 2.613410e-05 813 5.800000e-01 2.898174e-05 814 5.900000e-01 3.194880e-05 815 6.000000e-01 3.502262e-05 816 6.100000e-01 3.819081e-05 817 6.200000e-01 4.144161e-05 818 6.300000e-01 4.476398e-05 819 6.400000e-01 4.814773e-05 820 6.500000e-01 5.158359e-05 821 6.600000e-01 5.506319e-05 822 6.700000e-01 5.857906e-05 823 6.800000e-01 6.212456e-05 824 6.900000e-01 6.569384e-05 825 7.000000e-01 6.928175e-05 826 7.100000e-01 7.288380e-05 827 7.200000e-01 7.649608e-05 828 7.300000e-01 8.011519e-05 829 7.400000e-01 8.373817e-05 830 7.500000e-01 8.736247e-05 831 7.600000e-01 9.098586e-05 832 7.700000e-01 9.460644e-05 833 7.800000e-01 9.822255e-05 834 7.900000e-01 1.018327e-04 835 8.000000e-01 1.054358e-04 836 8.100000e-01 1.090306e-04 837 8.200000e-01 1.126162e-04 838 8.300000e-01 1.161919e-04 839 8.400000e-01 1.197568e-04 840 8.500000e-01 1.233105e-04 841 8.600000e-01 1.268522e-04 842 8.700000e-01 1.303816e-04 843 8.800000e-01 1.338983e-04 844 8.900000e-01 1.374018e-04 845 9.000000e-01 1.408919e-04 846 9.100000e-01 1.443682e-04 847 9.200000e-01 1.478305e-04 848 9.300000e-01 1.512785e-04 849 9.400000e-01 1.547121e-04 850 9.500000e-01 1.581310e-04 851 9.600000e-01 1.615351e-04 852 9.700000e-01 1.649242e-04 853 9.800000e-01 1.682983e-04 854 9.900000e-01 1.716570e-04 855 1.000000e+00 1.750005e-04 856 1.010000e+00 1.783285e-04 857 1.020000e+00 1.816409e-04 858 1.030000e+00 1.849377e-04 859 1.040000e+00 1.882188e-04 860 1.050000e+00 1.914840e-04 861 1.060000e+00 1.947335e-04 862 1.070000e+00 1.979670e-04 863 1.080000e+00 2.011845e-04 864 1.090000e+00 2.043860e-04 865 1.100000e+00 2.075714e-04 866 1.110000e+00 2.107407e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 867 1.120000e+00 2.138938e-04 868 1.130000e+00 2.170307e-04 869 1.140000e+00 2.201514e-04 870 1.150000e+00 2.232559e-04 871 1.160000e+00 2.263440e-04 872 1.170000e+00 2.294159e-04 873 1.180000e+00 2.324714e-04 874 1.190000e+00 2.355106e-04 875 1.200000e+00 2.385334e-04 876 1.210000e+00 2.415398e-04 877 1.220000e+00 2.445298e-04 878 1.230000e+00 2.475035e-04 879 1.240000e+00 2.504607e-04 880 1.250000e+00 2.534016e-04 881 1.260000e+00 2.563260e-04 882 1.270000e+00 2.592340e-04 883 1.280000e+00 2.621256e-04 884 1.290000e+00 2.650008e-04 885 1.300000e+00 2.678596e-04 886 1.310000e+00 2.707020e-04 887 1.320000e+00 2.735280e-04 888 1.330000e+00 2.763376e-04 889 1.340000e+00 2.791308e-04 890 1.350000e+00 2.819077e-04 891 1.360000e+00 2.846683e-04 892 1.370000e+00 2.874125e-04 893 1.380000e+00 2.901404e-04 894 1.390000e+00 2.928520e-04 895 1.400000e+00 2.955474e-04 896 1.410000e+00 2.982264e-04 897 1.420000e+00 3.008893e-04 898 1.430000e+00 3.035359e-04 899 1.440000e+00 3.061664e-04 900 1.450000e+00 3.087807e-04 901 1.460000e+00 3.113788e-04 902 1.470000e+00 3.139608e-04 903 1.480000e+00 3.165268e-04 904 1.490000e+00 3.190767e-04 905 1.500000e+00 3.216106e-04 906 0.000000e+00 1.412965e-11 907 1.000000e-02 1.868439e-11 908 2.000000e-02 2.691900e-11 909 3.000000e-02 3.714787e-11 910 4.000000e-02 5.125290e-11 911 5.000000e-02 7.069545e-11 912 6.000000e-02 9.748369e-11 913 7.000000e-02 1.343749e-10 914 8.000000e-02 1.851513e-10 915 9.000000e-02 2.549952e-10 916 1.000000e-01 3.509984e-10 917 1.100000e-01 4.828510e-10 918 1.200000e-01 6.637719e-10 919 1.300000e-01 9.117578e-10 920 1.400000e-01 1.251256e-09 921 1.500000e-01 1.715390e-09 922 1.600000e-01 2.348907e-09 923 1.700000e-01 3.212054e-09 924 1.800000e-01 4.385633e-09 Index v-sweep vs#branch -------------------------------------------------------------------------------- 925 1.900000e-01 5.977539e-09 926 2.000000e-01 8.131134e-09 927 2.100000e-01 1.103584e-08 928 2.200000e-01 1.494041e-08 929 2.300000e-01 2.016920e-08 930 2.400000e-01 2.714203e-08 931 2.500000e-01 3.639779e-08 932 2.600000e-01 4.862215e-08 933 2.700000e-01 6.467955e-08 934 2.800000e-01 8.564949e-08 935 2.900000e-01 1.128671e-07 936 3.000000e-01 1.479685e-07 937 3.100000e-01 1.929409e-07 938 3.200000e-01 2.501785e-07 939 3.300000e-01 3.225462e-07 940 3.400000e-01 4.134518e-07 941 3.500000e-01 5.269298e-07 942 3.600000e-01 6.677368e-07 943 3.700000e-01 8.414599e-07 944 3.800000e-01 1.054632e-06 945 3.900000e-01 1.314850e-06 946 4.000000e-01 1.630874e-06 947 4.100000e-01 2.012700e-06 948 4.200000e-01 2.471565e-06 949 4.300000e-01 3.019864e-06 950 4.400000e-01 3.670941e-06 951 4.500000e-01 4.438738e-06 952 4.600000e-01 5.337287e-06 953 4.700000e-01 6.380076e-06 954 4.800000e-01 7.579326e-06 955 4.900000e-01 8.945277e-06 956 5.000000e-01 1.048555e-05 957 5.100000e-01 1.220469e-05 958 5.200000e-01 1.410395e-05 959 5.300000e-01 1.618128e-05 960 5.400000e-01 1.843163e-05 961 5.500000e-01 2.084730e-05 962 5.600000e-01 2.341855e-05 963 5.700000e-01 2.613410e-05 964 5.800000e-01 2.898174e-05 965 5.900000e-01 3.194880e-05 966 6.000000e-01 3.502262e-05 967 6.100000e-01 3.819081e-05 968 6.200000e-01 4.144161e-05 969 6.300000e-01 4.476398e-05 970 6.400000e-01 4.814773e-05 971 6.500000e-01 5.158359e-05 972 6.600000e-01 5.506319e-05 973 6.700000e-01 5.857906e-05 974 6.800000e-01 6.212456e-05 975 6.900000e-01 6.569384e-05 976 7.000000e-01 6.928175e-05 977 7.100000e-01 7.288380e-05 978 7.200000e-01 7.649608e-05 979 7.300000e-01 8.011519e-05 980 7.400000e-01 8.373817e-05 981 7.500000e-01 8.736247e-05 982 7.600000e-01 9.098586e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 983 7.700000e-01 9.460644e-05 984 7.800000e-01 9.822255e-05 985 7.900000e-01 1.018327e-04 986 8.000000e-01 1.054358e-04 987 8.100000e-01 1.090306e-04 988 8.200000e-01 1.126162e-04 989 8.300000e-01 1.161919e-04 990 8.400000e-01 1.197568e-04 991 8.500000e-01 1.233105e-04 992 8.600000e-01 1.268522e-04 993 8.700000e-01 1.303816e-04 994 8.800000e-01 1.338983e-04 995 8.900000e-01 1.374018e-04 996 9.000000e-01 1.408919e-04 997 9.100000e-01 1.443682e-04 998 9.200000e-01 1.478305e-04 999 9.300000e-01 1.512785e-04 1000 9.400000e-01 1.547121e-04 1001 9.500000e-01 1.581310e-04 1002 9.600000e-01 1.615351e-04 1003 9.700000e-01 1.649242e-04 1004 9.800000e-01 1.682983e-04 1005 9.900000e-01 1.716570e-04 1006 1.000000e+00 1.750005e-04 1007 1.010000e+00 1.783285e-04 1008 1.020000e+00 1.816409e-04 1009 1.030000e+00 1.849377e-04 1010 1.040000e+00 1.882188e-04 1011 1.050000e+00 1.914840e-04 1012 1.060000e+00 1.947335e-04 1013 1.070000e+00 1.979670e-04 1014 1.080000e+00 2.011845e-04 1015 1.090000e+00 2.043860e-04 1016 1.100000e+00 2.075714e-04 1017 1.110000e+00 2.107407e-04 1018 1.120000e+00 2.138938e-04 1019 1.130000e+00 2.170307e-04 1020 1.140000e+00 2.201514e-04 1021 1.150000e+00 2.232559e-04 1022 1.160000e+00 2.263440e-04 1023 1.170000e+00 2.294159e-04 1024 1.180000e+00 2.324714e-04 1025 1.190000e+00 2.355106e-04 1026 1.200000e+00 2.385334e-04 1027 1.210000e+00 2.415398e-04 1028 1.220000e+00 2.445298e-04 1029 1.230000e+00 2.475035e-04 1030 1.240000e+00 2.504607e-04 1031 1.250000e+00 2.534016e-04 1032 1.260000e+00 2.563260e-04 1033 1.270000e+00 2.592340e-04 1034 1.280000e+00 2.621256e-04 1035 1.290000e+00 2.650008e-04 1036 1.300000e+00 2.678596e-04 1037 1.310000e+00 2.707020e-04 1038 1.320000e+00 2.735280e-04 1039 1.330000e+00 2.763376e-04 1040 1.340000e+00 2.791308e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1041 1.350000e+00 2.819077e-04 1042 1.360000e+00 2.846683e-04 1043 1.370000e+00 2.874125e-04 1044 1.380000e+00 2.901404e-04 1045 1.390000e+00 2.928520e-04 1046 1.400000e+00 2.955474e-04 1047 1.410000e+00 2.982264e-04 1048 1.420000e+00 3.008893e-04 1049 1.430000e+00 3.035359e-04 1050 1.440000e+00 3.061664e-04 1051 1.450000e+00 3.087807e-04 1052 1.460000e+00 3.113788e-04 1053 1.470000e+00 3.139608e-04 1054 1.480000e+00 3.165268e-04 1055 1.490000e+00 3.190767e-04 1056 1.500000e+00 3.216106e-04 1057 0.000000e+00 1.412965e-11 1058 1.000000e-02 1.868439e-11 1059 2.000000e-02 2.691900e-11 1060 3.000000e-02 3.714787e-11 1061 4.000000e-02 5.125290e-11 1062 5.000000e-02 7.069545e-11 1063 6.000000e-02 9.748369e-11 1064 7.000000e-02 1.343749e-10 1065 8.000000e-02 1.851513e-10 1066 9.000000e-02 2.549952e-10 1067 1.000000e-01 3.509984e-10 1068 1.100000e-01 4.828510e-10 1069 1.200000e-01 6.637719e-10 1070 1.300000e-01 9.117578e-10 1071 1.400000e-01 1.251256e-09 1072 1.500000e-01 1.715390e-09 1073 1.600000e-01 2.348907e-09 1074 1.700000e-01 3.212054e-09 1075 1.800000e-01 4.385633e-09 1076 1.900000e-01 5.977539e-09 1077 2.000000e-01 8.131134e-09 1078 2.100000e-01 1.103584e-08 1079 2.200000e-01 1.494041e-08 1080 2.300000e-01 2.016920e-08 1081 2.400000e-01 2.714203e-08 1082 2.500000e-01 3.639779e-08 1083 2.600000e-01 4.862215e-08 1084 2.700000e-01 6.467955e-08 1085 2.800000e-01 8.564949e-08 1086 2.900000e-01 1.128671e-07 1087 3.000000e-01 1.479685e-07 1088 3.100000e-01 1.929409e-07 1089 3.200000e-01 2.501785e-07 1090 3.300000e-01 3.225462e-07 1091 3.400000e-01 4.134518e-07 1092 3.500000e-01 5.269298e-07 1093 3.600000e-01 6.677368e-07 1094 3.700000e-01 8.414599e-07 1095 3.800000e-01 1.054632e-06 1096 3.900000e-01 1.314850e-06 1097 4.000000e-01 1.630874e-06 1098 4.100000e-01 2.012700e-06 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1099 4.200000e-01 2.471565e-06 1100 4.300000e-01 3.019864e-06 1101 4.400000e-01 3.670941e-06 1102 4.500000e-01 4.438738e-06 1103 4.600000e-01 5.337287e-06 1104 4.700000e-01 6.380076e-06 1105 4.800000e-01 7.579326e-06 1106 4.900000e-01 8.945277e-06 1107 5.000000e-01 1.048555e-05 1108 5.100000e-01 1.220469e-05 1109 5.200000e-01 1.410395e-05 1110 5.300000e-01 1.618128e-05 1111 5.400000e-01 1.843163e-05 1112 5.500000e-01 2.084730e-05 1113 5.600000e-01 2.341855e-05 1114 5.700000e-01 2.613410e-05 1115 5.800000e-01 2.898174e-05 1116 5.900000e-01 3.194880e-05 1117 6.000000e-01 3.502262e-05 1118 6.100000e-01 3.819081e-05 1119 6.200000e-01 4.144161e-05 1120 6.300000e-01 4.476398e-05 1121 6.400000e-01 4.814773e-05 1122 6.500000e-01 5.158359e-05 1123 6.600000e-01 5.506319e-05 1124 6.700000e-01 5.857906e-05 1125 6.800000e-01 6.212456e-05 1126 6.900000e-01 6.569384e-05 1127 7.000000e-01 6.928175e-05 1128 7.100000e-01 7.288380e-05 1129 7.200000e-01 7.649608e-05 1130 7.300000e-01 8.011519e-05 1131 7.400000e-01 8.373817e-05 1132 7.500000e-01 8.736247e-05 1133 7.600000e-01 9.098586e-05 1134 7.700000e-01 9.460644e-05 1135 7.800000e-01 9.822255e-05 1136 7.900000e-01 1.018327e-04 1137 8.000000e-01 1.054358e-04 1138 8.100000e-01 1.090306e-04 1139 8.200000e-01 1.126162e-04 1140 8.300000e-01 1.161919e-04 1141 8.400000e-01 1.197568e-04 1142 8.500000e-01 1.233105e-04 1143 8.600000e-01 1.268522e-04 1144 8.700000e-01 1.303816e-04 1145 8.800000e-01 1.338983e-04 1146 8.900000e-01 1.374018e-04 1147 9.000000e-01 1.408919e-04 1148 9.100000e-01 1.443682e-04 1149 9.200000e-01 1.478305e-04 1150 9.300000e-01 1.512785e-04 1151 9.400000e-01 1.547121e-04 1152 9.500000e-01 1.581310e-04 1153 9.600000e-01 1.615351e-04 1154 9.700000e-01 1.649242e-04 1155 9.800000e-01 1.682983e-04 1156 9.900000e-01 1.716570e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1157 1.000000e+00 1.750005e-04 1158 1.010000e+00 1.783285e-04 1159 1.020000e+00 1.816409e-04 1160 1.030000e+00 1.849377e-04 1161 1.040000e+00 1.882188e-04 1162 1.050000e+00 1.914840e-04 1163 1.060000e+00 1.947335e-04 1164 1.070000e+00 1.979670e-04 1165 1.080000e+00 2.011845e-04 1166 1.090000e+00 2.043860e-04 1167 1.100000e+00 2.075714e-04 1168 1.110000e+00 2.107407e-04 1169 1.120000e+00 2.138938e-04 1170 1.130000e+00 2.170307e-04 1171 1.140000e+00 2.201514e-04 1172 1.150000e+00 2.232559e-04 1173 1.160000e+00 2.263440e-04 1174 1.170000e+00 2.294159e-04 1175 1.180000e+00 2.324714e-04 1176 1.190000e+00 2.355106e-04 1177 1.200000e+00 2.385334e-04 1178 1.210000e+00 2.415398e-04 1179 1.220000e+00 2.445298e-04 1180 1.230000e+00 2.475035e-04 1181 1.240000e+00 2.504607e-04 1182 1.250000e+00 2.534016e-04 1183 1.260000e+00 2.563260e-04 1184 1.270000e+00 2.592340e-04 1185 1.280000e+00 2.621256e-04 1186 1.290000e+00 2.650008e-04 1187 1.300000e+00 2.678596e-04 1188 1.310000e+00 2.707020e-04 1189 1.320000e+00 2.735280e-04 1190 1.330000e+00 2.763376e-04 1191 1.340000e+00 2.791308e-04 1192 1.350000e+00 2.819077e-04 1193 1.360000e+00 2.846683e-04 1194 1.370000e+00 2.874125e-04 1195 1.380000e+00 2.901404e-04 1196 1.390000e+00 2.928520e-04 1197 1.400000e+00 2.955474e-04 1198 1.410000e+00 2.982264e-04 1199 1.420000e+00 3.008893e-04 1200 1.430000e+00 3.035359e-04 1201 1.440000e+00 3.061664e-04 1202 1.450000e+00 3.087807e-04 1203 1.460000e+00 3.113788e-04 1204 1.470000e+00 3.139608e-04 1205 1.480000e+00 3.165268e-04 1206 1.490000e+00 3.190767e-04 1207 1.500000e+00 3.216106e-04 1208 0.000000e+00 1.412965e-11 1209 1.000000e-02 1.868439e-11 1210 2.000000e-02 2.691900e-11 1211 3.000000e-02 3.714787e-11 1212 4.000000e-02 5.125290e-11 1213 5.000000e-02 7.069545e-11 1214 6.000000e-02 9.748369e-11 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1215 7.000000e-02 1.343749e-10 1216 8.000000e-02 1.851513e-10 1217 9.000000e-02 2.549952e-10 1218 1.000000e-01 3.509984e-10 1219 1.100000e-01 4.828510e-10 1220 1.200000e-01 6.637719e-10 1221 1.300000e-01 9.117578e-10 1222 1.400000e-01 1.251256e-09 1223 1.500000e-01 1.715390e-09 1224 1.600000e-01 2.348907e-09 1225 1.700000e-01 3.212054e-09 1226 1.800000e-01 4.385633e-09 1227 1.900000e-01 5.977539e-09 1228 2.000000e-01 8.131134e-09 1229 2.100000e-01 1.103584e-08 1230 2.200000e-01 1.494041e-08 1231 2.300000e-01 2.016920e-08 1232 2.400000e-01 2.714203e-08 1233 2.500000e-01 3.639779e-08 1234 2.600000e-01 4.862215e-08 1235 2.700000e-01 6.467955e-08 1236 2.800000e-01 8.564949e-08 1237 2.900000e-01 1.128671e-07 1238 3.000000e-01 1.479685e-07 1239 3.100000e-01 1.929409e-07 1240 3.200000e-01 2.501785e-07 1241 3.300000e-01 3.225462e-07 1242 3.400000e-01 4.134518e-07 1243 3.500000e-01 5.269298e-07 1244 3.600000e-01 6.677368e-07 1245 3.700000e-01 8.414599e-07 1246 3.800000e-01 1.054632e-06 1247 3.900000e-01 1.314850e-06 1248 4.000000e-01 1.630874e-06 1249 4.100000e-01 2.012700e-06 1250 4.200000e-01 2.471565e-06 1251 4.300000e-01 3.019864e-06 1252 4.400000e-01 3.670941e-06 1253 4.500000e-01 4.438738e-06 1254 4.600000e-01 5.337287e-06 1255 4.700000e-01 6.380076e-06 1256 4.800000e-01 7.579326e-06 1257 4.900000e-01 8.945277e-06 1258 5.000000e-01 1.048555e-05 1259 5.100000e-01 1.220469e-05 1260 5.200000e-01 1.410395e-05 1261 5.300000e-01 1.618128e-05 1262 5.400000e-01 1.843163e-05 1263 5.500000e-01 2.084730e-05 1264 5.600000e-01 2.341855e-05 1265 5.700000e-01 2.613410e-05 1266 5.800000e-01 2.898174e-05 1267 5.900000e-01 3.194880e-05 1268 6.000000e-01 3.502262e-05 1269 6.100000e-01 3.819081e-05 1270 6.200000e-01 4.144161e-05 1271 6.300000e-01 4.476398e-05 1272 6.400000e-01 4.814773e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1273 6.500000e-01 5.158359e-05 1274 6.600000e-01 5.506319e-05 1275 6.700000e-01 5.857906e-05 1276 6.800000e-01 6.212456e-05 1277 6.900000e-01 6.569384e-05 1278 7.000000e-01 6.928175e-05 1279 7.100000e-01 7.288380e-05 1280 7.200000e-01 7.649608e-05 1281 7.300000e-01 8.011519e-05 1282 7.400000e-01 8.373817e-05 1283 7.500000e-01 8.736247e-05 1284 7.600000e-01 9.098586e-05 1285 7.700000e-01 9.460644e-05 1286 7.800000e-01 9.822255e-05 1287 7.900000e-01 1.018327e-04 1288 8.000000e-01 1.054358e-04 1289 8.100000e-01 1.090306e-04 1290 8.200000e-01 1.126162e-04 1291 8.300000e-01 1.161919e-04 1292 8.400000e-01 1.197568e-04 1293 8.500000e-01 1.233105e-04 1294 8.600000e-01 1.268522e-04 1295 8.700000e-01 1.303816e-04 1296 8.800000e-01 1.338983e-04 1297 8.900000e-01 1.374018e-04 1298 9.000000e-01 1.408919e-04 1299 9.100000e-01 1.443682e-04 1300 9.200000e-01 1.478305e-04 1301 9.300000e-01 1.512785e-04 1302 9.400000e-01 1.547121e-04 1303 9.500000e-01 1.581310e-04 1304 9.600000e-01 1.615351e-04 1305 9.700000e-01 1.649242e-04 1306 9.800000e-01 1.682983e-04 1307 9.900000e-01 1.716570e-04 1308 1.000000e+00 1.750005e-04 1309 1.010000e+00 1.783285e-04 1310 1.020000e+00 1.816409e-04 1311 1.030000e+00 1.849377e-04 1312 1.040000e+00 1.882188e-04 1313 1.050000e+00 1.914840e-04 1314 1.060000e+00 1.947335e-04 1315 1.070000e+00 1.979670e-04 1316 1.080000e+00 2.011845e-04 1317 1.090000e+00 2.043860e-04 1318 1.100000e+00 2.075714e-04 1319 1.110000e+00 2.107407e-04 1320 1.120000e+00 2.138938e-04 1321 1.130000e+00 2.170307e-04 1322 1.140000e+00 2.201514e-04 1323 1.150000e+00 2.232559e-04 1324 1.160000e+00 2.263440e-04 1325 1.170000e+00 2.294159e-04 1326 1.180000e+00 2.324714e-04 1327 1.190000e+00 2.355106e-04 1328 1.200000e+00 2.385334e-04 1329 1.210000e+00 2.415398e-04 1330 1.220000e+00 2.445298e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1331 1.230000e+00 2.475035e-04 1332 1.240000e+00 2.504607e-04 1333 1.250000e+00 2.534016e-04 1334 1.260000e+00 2.563260e-04 1335 1.270000e+00 2.592340e-04 1336 1.280000e+00 2.621256e-04 1337 1.290000e+00 2.650008e-04 1338 1.300000e+00 2.678596e-04 1339 1.310000e+00 2.707020e-04 1340 1.320000e+00 2.735280e-04 1341 1.330000e+00 2.763376e-04 1342 1.340000e+00 2.791308e-04 1343 1.350000e+00 2.819077e-04 1344 1.360000e+00 2.846683e-04 1345 1.370000e+00 2.874125e-04 1346 1.380000e+00 2.901404e-04 1347 1.390000e+00 2.928520e-04 1348 1.400000e+00 2.955474e-04 1349 1.410000e+00 2.982264e-04 1350 1.420000e+00 3.008893e-04 1351 1.430000e+00 3.035359e-04 1352 1.440000e+00 3.061664e-04 1353 1.450000e+00 3.087807e-04 1354 1.460000e+00 3.113788e-04 1355 1.470000e+00 3.139608e-04 1356 1.480000e+00 3.165268e-04 1357 1.490000e+00 3.190767e-04 1358 1.500000e+00 3.216106e-04 tmpk8ny_4pz/tests/bsim3soipd/pmospd.mod0000644000175000017500000000403213546075722020400 0ustar carstencarsten*Model Card for BSIMPD2.0 * Lmin= .2 Lmax= .8 Wmin= 2.8 Wmax= 2.8 .Model P1 PMOS Level= 57 +TNOM = 27 TOX = 4.5E-09 TSI = .0000001 TBOX = 8E-08 +MOBMOD = 2 CAPMOD = 2 SHMOD = 0 +WINT = 0 LINT = -2E-08 +VTH0 = -.42 K1 = .49 K2 = .1 K3 = 0 +K3B = 2.2 NLX = 2E-07 +DVT0 = 10 DVT1 = .55 DVT2 = -1.4 +DVT0W = 0 DVT1W = 0 DVT2W = 0 +NCH = 4.7E+17 NSUB = -1E+15 NGATE = 1E+20 +AGIDL=1e-16 BGIDL=1e9 NGIDL=1.1 +NDIODE = 1.13 NTUN = 14.0 NRECF0=2.5 NRECR0=4 +VREC0=1.2 NTRECF=.1 NTRECR=.2 +ISBJT = 1e-4 ISDIF = 1e-5 ISTUN = 2e-5 ISREC = 4e-2 +XBJT = .9 XDIF = .9 XREC = .9 XTUN = 0.01 +AHLI=1e-9 LBJT0=0.2e-6 LN=2e-6 +NBJT=.8 NDIF=-1 AELY=1e8 VABJT=0 +U0 = 145 UA = 1.3E-11 UB = 1.7E-18 UC = -4E-10 +W0 = 1.16E-06 AGS = .25 A1 = 0 A2 = 1 +B0 = .01 B1 = 10 +RDSW = 350 PRWG = 0 PRWB = -.2 WR = 1 +RBODY = 1e0 RBSH = 0.0 +A0 = 1.4 KETA = 0.1 KETAS = 0.2 VSAT = 75000 +DWG = 0 DWB = 0 +ALPHA0 = 1e-8 BETA0 = 0 BETA1 = 0.05 BETA2 = 0.07 +VDSATII0 = 1.6 ESATII = 1e7 +VOFF = -.14 NFACTOR = .7 CDSC = .00002 CDSCB = 0 +CDSCD = 0 CIT = 0 +PCLM = 2.9 PVAG = 12 PDIBLC1 = .18 PDIBLC2 = .004 +PDIBLCB = -.234 DROUT = .2 +DELTA = .01 ETA0 = .05 ETAB = 0 +DSUB = .2 RTH0 = .005 +CLC = .0000001 CLE = .6 CF = 1E-20 CKAPPA = .6 +CGDL = 1E-20 CGSL = 1E-20 KT1 = -.3 KT1L = 0 +KT2 = .022 UTE = -1.5 UA1 = 4.31E-09 UB1 = -7.61E-18 +UC1 = -5.6E-11 PRT = 760 AT = 22400 +CGSO = 1e-10 CGDO = 1e-10 CJSWG = 1e-12 TT=3e-10 +ASD = 0.3 CSDESW = 1e-12 +TCJSWG=1e-4 MJSWG=.5 PBSWG=1 tmpk8ny_4pz/tests/bsim3soipd/RampVg2.cir0000644000175000017500000000050613546075722020354 0ustar carstencarsten* BSIMSOI (PD) example * * SOI, Ramp Vg Vd d 0 1.5 Vg g 0 0.0 PULSE 0V 2V .02n .1n .1n .2n .6n Ve e 0 0.0 Vs s 0 0.0 Vb b 0 0.0 m1 d g s e n1 w=10u l=0.25u debug=-1 .option gmin=1e-20 itl1=200 itl2=200 abstol=1e-9 noacct .tran 1p 1.0ns .save @m1[Vbs], V(g)/10 .print tran v(g)/10 .include nmospd.mod .end tmpk8ny_4pz/tests/bsim3soipd/ring51.cir0000644000175000017500000000071613546075722020206 0ustar carstencarsten* 51 stage Ring-Osc. (PD) vin in out 2 pulse 2 0 0.1n 5n 1 1 1 vdd dd 0 dc 0 pulse 0 2 0 1n 1 1 1 vss ss 0 dc 0 ve sub 0 dc 0 xinv1 dd ss sub in out25 inv25 xinv2 dd ss sub out25 out50 inv25 xinv5 dd ss sub out50 out inv1 xinv11 dd ss sub out buf inv1 cout buf ss 1pF xdum ss dum .option itl1=500 gmin=1e-15 itl4=10 noacct .dc vdd 0 2 0.01 .tran 0.2n 50n .print dc v(out) .print tran v(out) .include nmospd.mod .include pmospd.mod .include lib.h .end tmpk8ny_4pz/tests/bsim3soipd/t3.cir0000644000175000017500000000043413546075722017424 0ustar carstencarsten*model = BSIMSOI (PD) *Berkeley Spice Compatibility * * SOI NMOSFET, floating body simulation vd d 0 dc 1.5 vs s 0 dc 0 ve e 0 dc 0 vg g 0 dc 3 m1 d g s e n1 w=10u l=0.25u .option gmin=1e-25 itl1=500 noacct .dc vd 0 3 0.01 vg 0.5 3 0.5 .print dc v(g), i(vs) .include nmospd.mod tmpk8ny_4pz/tests/bsim3soipd/inv2.out0000644000175000017500000002735513546075722020021 0ustar carstencarsten No. of Data Rows : 251 Circuit: * model = BSIMSOI (PD) Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Warning: Pd = 0 is less than W. Warning: Ps = 0 is less than W. Warning: Pd = 0 is less than W. Warning: Ps = 0 is less than W. * model = BSIMSOI (PD) -------------------------------------------------------------------------------- Index v-sweep v(in) v(out) -------------------------------------------------------------------------------- 0 0.000000e+00 0.000000e+00 2.499999e+00 1 1.000000e-02 1.000000e-02 2.499998e+00 2 2.000000e-02 2.000000e-02 2.499998e+00 3 3.000000e-02 3.000000e-02 2.499997e+00 4 4.000000e-02 4.000000e-02 2.499996e+00 5 5.000000e-02 5.000000e-02 2.499994e+00 6 6.000000e-02 6.000000e-02 2.499991e+00 7 7.000000e-02 7.000000e-02 2.499986e+00 8 8.000000e-02 8.000000e-02 2.499980e+00 9 9.000000e-02 9.000000e-02 2.499970e+00 10 1.000000e-01 1.000000e-01 2.499955e+00 11 1.100000e-01 1.100000e-01 2.499934e+00 12 1.200000e-01 1.200000e-01 2.499903e+00 13 1.300000e-01 1.300000e-01 2.499859e+00 14 1.400000e-01 1.400000e-01 2.499799e+00 15 1.500000e-01 1.500000e-01 2.499717e+00 16 1.600000e-01 1.600000e-01 2.499607e+00 17 1.700000e-01 1.700000e-01 2.499461e+00 18 1.800000e-01 1.800000e-01 2.499270e+00 19 1.900000e-01 1.900000e-01 2.499024e+00 20 2.000000e-01 2.000000e-01 2.498710e+00 21 2.100000e-01 2.100000e-01 2.498318e+00 22 2.200000e-01 2.200000e-01 2.497835e+00 23 2.300000e-01 2.300000e-01 2.497253e+00 24 2.400000e-01 2.400000e-01 2.496561e+00 25 2.500000e-01 2.500000e-01 2.495756e+00 26 2.600000e-01 2.600000e-01 2.494833e+00 27 2.700000e-01 2.700000e-01 2.493792e+00 28 2.800000e-01 2.800000e-01 2.492633e+00 29 2.900000e-01 2.900000e-01 2.491358e+00 30 3.000000e-01 3.000000e-01 2.489971e+00 31 3.100000e-01 3.100000e-01 2.488475e+00 32 3.200000e-01 3.200000e-01 2.486875e+00 33 3.300000e-01 3.300000e-01 2.485175e+00 34 3.400000e-01 3.400000e-01 2.483378e+00 35 3.500000e-01 3.500000e-01 2.481488e+00 36 3.600000e-01 3.600000e-01 2.479508e+00 37 3.700000e-01 3.700000e-01 2.477441e+00 38 3.800000e-01 3.800000e-01 2.475290e+00 39 3.900000e-01 3.900000e-01 2.473056e+00 40 4.000000e-01 4.000000e-01 2.470741e+00 41 4.100000e-01 4.100000e-01 2.468347e+00 42 4.200000e-01 4.200000e-01 2.465873e+00 43 4.300000e-01 4.300000e-01 2.463322e+00 44 4.400000e-01 4.400000e-01 2.460692e+00 45 4.500000e-01 4.500000e-01 2.457984e+00 46 4.600000e-01 4.600000e-01 2.455198e+00 47 4.700000e-01 4.700000e-01 2.452333e+00 48 4.800000e-01 4.800000e-01 2.449390e+00 49 4.900000e-01 4.900000e-01 2.446366e+00 50 5.000000e-01 5.000000e-01 2.443261e+00 51 5.100000e-01 5.100000e-01 2.440073e+00 52 5.200000e-01 5.200000e-01 2.436803e+00 53 5.300000e-01 5.300000e-01 2.433447e+00 54 5.400000e-01 5.400000e-01 2.430005e+00 Index v-sweep v(in) v(out) -------------------------------------------------------------------------------- 55 5.500000e-01 5.500000e-01 2.426475e+00 56 5.600000e-01 5.600000e-01 2.422854e+00 57 5.700000e-01 5.700000e-01 2.419142e+00 58 5.800000e-01 5.800000e-01 2.415335e+00 59 5.900000e-01 5.900000e-01 2.411431e+00 60 6.000000e-01 6.000000e-01 2.407429e+00 61 6.100000e-01 6.100000e-01 2.403324e+00 62 6.200000e-01 6.200000e-01 2.399115e+00 63 6.300000e-01 6.300000e-01 2.394799e+00 64 6.400000e-01 6.400000e-01 2.390372e+00 65 6.500000e-01 6.500000e-01 2.385830e+00 66 6.600000e-01 6.600000e-01 2.381171e+00 67 6.700000e-01 6.700000e-01 2.376391e+00 68 6.800000e-01 6.800000e-01 2.371484e+00 69 6.900000e-01 6.900000e-01 2.366448e+00 70 7.000000e-01 7.000000e-01 2.361277e+00 71 7.100000e-01 7.100000e-01 2.355966e+00 72 7.200000e-01 7.200000e-01 2.350511e+00 73 7.300000e-01 7.300000e-01 2.344905e+00 74 7.400000e-01 7.400000e-01 2.339142e+00 75 7.500000e-01 7.500000e-01 2.333216e+00 76 7.600000e-01 7.600000e-01 2.327120e+00 77 7.700000e-01 7.700000e-01 2.320847e+00 78 7.800000e-01 7.800000e-01 2.314387e+00 79 7.900000e-01 7.900000e-01 2.307733e+00 80 8.000000e-01 8.000000e-01 2.300875e+00 81 8.100000e-01 8.100000e-01 2.293803e+00 82 8.200000e-01 8.200000e-01 2.286505e+00 83 8.300000e-01 8.300000e-01 2.278969e+00 84 8.400000e-01 8.400000e-01 2.271182e+00 85 8.500000e-01 8.500000e-01 2.263129e+00 86 8.600000e-01 8.600000e-01 2.254795e+00 87 8.700000e-01 8.700000e-01 2.246161e+00 88 8.800000e-01 8.800000e-01 2.237209e+00 89 8.900000e-01 8.900000e-01 2.227915e+00 90 9.000000e-01 9.000000e-01 2.218257e+00 91 9.100000e-01 9.100000e-01 2.208207e+00 92 9.200000e-01 9.200000e-01 2.197734e+00 93 9.300000e-01 9.300000e-01 2.186805e+00 94 9.400000e-01 9.400000e-01 2.175378e+00 95 9.500000e-01 9.500000e-01 2.163411e+00 96 9.600000e-01 9.600000e-01 2.150849e+00 97 9.700000e-01 9.700000e-01 2.137634e+00 98 9.800000e-01 9.800000e-01 2.123693e+00 99 9.900000e-01 9.900000e-01 2.108943e+00 100 1.000000e+00 1.000000e+00 2.093282e+00 101 1.010000e+00 1.010000e+00 2.076587e+00 102 1.020000e+00 1.020000e+00 2.058705e+00 103 1.030000e+00 1.030000e+00 2.039446e+00 104 1.040000e+00 1.040000e+00 2.018564e+00 105 1.050000e+00 1.050000e+00 1.995738e+00 106 1.060000e+00 1.060000e+00 1.970541e+00 107 1.070000e+00 1.070000e+00 1.942391e+00 108 1.080000e+00 1.080000e+00 1.910503e+00 109 1.090000e+00 1.090000e+00 1.873883e+00 110 1.100000e+00 1.100000e+00 1.831549e+00 111 1.110000e+00 1.110000e+00 1.783134e+00 112 1.120000e+00 1.120000e+00 1.729441e+00 Index v-sweep v(in) v(out) -------------------------------------------------------------------------------- 113 1.130000e+00 1.130000e+00 1.672066e+00 114 1.140000e+00 1.140000e+00 1.612596e+00 115 1.150000e+00 1.150000e+00 1.552253e+00 116 1.160000e+00 1.160000e+00 1.491924e+00 117 1.170000e+00 1.170000e+00 1.432276e+00 118 1.180000e+00 1.180000e+00 1.373853e+00 119 1.190000e+00 1.190000e+00 1.317137e+00 120 1.200000e+00 1.200000e+00 1.262570e+00 121 1.210000e+00 1.210000e+00 1.210544e+00 122 1.220000e+00 1.220000e+00 1.161304e+00 123 1.230000e+00 1.230000e+00 1.114785e+00 124 1.240000e+00 1.240000e+00 1.070343e+00 125 1.250000e+00 1.250000e+00 1.026292e+00 126 1.260000e+00 1.260000e+00 9.804266e-01 127 1.270000e+00 1.270000e+00 9.295075e-01 128 1.280000e+00 1.280000e+00 8.696202e-01 129 1.290000e+00 1.290000e+00 8.003151e-01 130 1.300000e+00 1.300000e+00 7.294616e-01 131 1.310000e+00 1.310000e+00 6.656461e-01 132 1.320000e+00 1.320000e+00 6.121224e-01 133 1.330000e+00 1.330000e+00 5.684470e-01 134 1.340000e+00 1.340000e+00 5.324476e-01 135 1.350000e+00 1.350000e+00 5.019354e-01 136 1.360000e+00 1.360000e+00 4.753944e-01 137 1.370000e+00 1.370000e+00 4.518481e-01 138 1.380000e+00 1.380000e+00 4.306409e-01 139 1.390000e+00 1.390000e+00 4.113161e-01 140 1.400000e+00 1.400000e+00 3.935456e-01 141 1.410000e+00 1.410000e+00 3.770853e-01 142 1.420000e+00 1.420000e+00 3.617485e-01 143 1.430000e+00 1.430000e+00 3.473885e-01 144 1.440000e+00 1.440000e+00 3.338875e-01 145 1.450000e+00 1.450000e+00 3.211495e-01 146 1.460000e+00 1.460000e+00 3.090944e-01 147 1.470000e+00 1.470000e+00 2.976552e-01 148 1.480000e+00 1.480000e+00 2.867746e-01 149 1.490000e+00 1.490000e+00 2.764037e-01 150 1.500000e+00 1.500000e+00 2.664997e-01 151 1.510000e+00 1.510000e+00 2.570257e-01 152 1.520000e+00 1.520000e+00 2.479489e-01 153 1.530000e+00 1.530000e+00 2.392404e-01 154 1.540000e+00 1.540000e+00 2.308746e-01 155 1.550000e+00 1.550000e+00 2.228285e-01 156 1.560000e+00 1.560000e+00 2.150814e-01 157 1.570000e+00 1.570000e+00 2.076149e-01 158 1.580000e+00 1.580000e+00 2.004121e-01 159 1.590000e+00 1.590000e+00 1.934577e-01 160 1.600000e+00 1.600000e+00 1.867378e-01 161 1.610000e+00 1.610000e+00 1.802398e-01 162 1.620000e+00 1.620000e+00 1.739519e-01 163 1.630000e+00 1.630000e+00 1.678637e-01 164 1.640000e+00 1.640000e+00 1.619651e-01 165 1.650000e+00 1.650000e+00 1.562471e-01 166 1.660000e+00 1.660000e+00 1.507015e-01 167 1.670000e+00 1.670000e+00 1.453203e-01 168 1.680000e+00 1.680000e+00 1.400964e-01 169 1.690000e+00 1.690000e+00 1.350231e-01 170 1.700000e+00 1.700000e+00 1.300941e-01 Index v-sweep v(in) v(out) -------------------------------------------------------------------------------- 171 1.710000e+00 1.710000e+00 1.253037e-01 172 1.720000e+00 1.720000e+00 1.206465e-01 173 1.730000e+00 1.730000e+00 1.161173e-01 174 1.740000e+00 1.740000e+00 1.117114e-01 175 1.750000e+00 1.750000e+00 1.074244e-01 176 1.760000e+00 1.760000e+00 1.032521e-01 177 1.770000e+00 1.770000e+00 9.919058e-02 178 1.780000e+00 1.780000e+00 9.523620e-02 179 1.790000e+00 1.790000e+00 9.138549e-02 180 1.800000e+00 1.800000e+00 8.763520e-02 181 1.810000e+00 1.810000e+00 8.398230e-02 182 1.820000e+00 1.820000e+00 8.042391e-02 183 1.830000e+00 1.830000e+00 7.695732e-02 184 1.840000e+00 1.840000e+00 7.358002e-02 185 1.850000e+00 1.850000e+00 7.028961e-02 186 1.860000e+00 1.860000e+00 6.708387e-02 187 1.870000e+00 1.870000e+00 6.396071e-02 188 1.880000e+00 1.880000e+00 6.091816e-02 189 1.890000e+00 1.890000e+00 5.795442e-02 190 1.900000e+00 1.900000e+00 5.506780e-02 191 1.910000e+00 1.910000e+00 5.225675e-02 192 1.920000e+00 1.920000e+00 4.951983e-02 193 1.930000e+00 1.930000e+00 4.685577e-02 194 1.940000e+00 1.940000e+00 4.426340e-02 195 1.950000e+00 1.950000e+00 4.174171e-02 196 1.960000e+00 1.960000e+00 3.928984e-02 197 1.970000e+00 1.970000e+00 3.690705e-02 198 1.980000e+00 1.980000e+00 3.459280e-02 199 1.990000e+00 1.990000e+00 3.234670e-02 200 2.000000e+00 2.000000e+00 3.016854e-02 201 2.010000e+00 2.010000e+00 2.805832e-02 202 2.020000e+00 2.020000e+00 2.601624e-02 203 2.030000e+00 2.030000e+00 2.404274e-02 204 2.040000e+00 2.040000e+00 2.213848e-02 205 2.050000e+00 2.050000e+00 2.030441e-02 206 2.060000e+00 2.060000e+00 1.854171e-02 207 2.070000e+00 2.070000e+00 1.685188e-02 208 2.080000e+00 2.080000e+00 1.523666e-02 209 2.090000e+00 2.090000e+00 1.369810e-02 210 2.100000e+00 2.100000e+00 1.223847e-02 211 2.110000e+00 2.110000e+00 1.086027e-02 212 2.120000e+00 2.120000e+00 9.566105e-03 213 2.130000e+00 2.130000e+00 8.358633e-03 214 2.140000e+00 2.140000e+00 7.240385e-03 215 2.150000e+00 2.150000e+00 6.213586e-03 216 2.160000e+00 2.160000e+00 5.279925e-03 217 2.170000e+00 2.170000e+00 4.440283e-03 218 2.180000e+00 2.180000e+00 3.694453e-03 219 2.190000e+00 2.190000e+00 3.040875e-03 220 2.200000e+00 2.200000e+00 2.476437e-03 221 2.210000e+00 2.210000e+00 1.996396e-03 222 2.220000e+00 2.220000e+00 1.594448e-03 223 2.230000e+00 2.230000e+00 1.262996e-03 224 2.240000e+00 2.240000e+00 9.935696e-04 225 2.250000e+00 2.250000e+00 7.773428e-04 226 2.260000e+00 2.260000e+00 6.056656e-04 227 2.270000e+00 2.270000e+00 4.705061e-04 228 2.280000e+00 2.280000e+00 3.647509e-04 Index v-sweep v(in) v(out) -------------------------------------------------------------------------------- 229 2.290000e+00 2.290000e+00 2.823449e-04 230 2.300000e+00 2.300000e+00 2.182957e-04 231 2.310000e+00 2.310000e+00 1.685850e-04 232 2.320000e+00 2.320000e+00 1.300336e-04 233 2.330000e+00 2.330000e+00 1.001532e-04 234 2.340000e+00 2.340000e+00 7.700818e-05 235 2.350000e+00 2.350000e+00 5.909654e-05 236 2.360000e+00 2.360000e+00 4.525270e-05 237 2.370000e+00 2.370000e+00 3.457091e-05 238 2.380000e+00 2.380000e+00 2.634603e-05 239 2.390000e+00 2.390000e+00 2.002819e-05 240 2.400000e+00 2.400000e+00 1.518816e-05 241 2.410000e+00 2.410000e+00 1.149080e-05 242 2.420000e+00 2.420000e+00 8.674639e-06 243 2.430000e+00 2.430000e+00 6.536017e-06 244 2.440000e+00 2.440000e+00 4.916670e-06 245 2.450000e+00 2.450000e+00 3.693988e-06 246 2.460000e+00 2.460000e+00 2.773298e-06 247 2.470000e+00 2.470000e+00 2.081773e-06 248 2.480000e+00 2.480000e+00 1.563599e-06 249 2.490000e+00 2.490000e+00 1.176165e-06 250 2.500000e+00 2.500000e+00 8.870574e-07 tmpk8ny_4pz/tests/bsim3soipd/nmospd.mod0000644000175000017500000000410613546075722020400 0ustar carstencarsten*Model Card for BSIMPD2.0 * Lmin= .2 Lmax= .8 Wmin= 2.8 Wmax= 2.8 .Model N1 NMOS Level= 57 +TNOM = 27 TOX = 4.5E-09 TSI = .0000001 TBOX = 8E-08 +MOBMOD = 0 CAPMOD = 2 SHMOD =0 +PARAMCHK=0 WINT = 0 LINT = -2E-08 +VTH0 = .42 K1 = .49 K2 = .1 K3 = 0 +K3B = 2.2 NLX = 2E-7 +DVT0 = 10 DVT1 = .55 DVT2 = -1.4 +DVT0W = 0 DVT1W = 0 DVT2W = 0 +NCH = 4.7E+17 NSUB = -1E+15 NGATE = 1E+20 +AGIDL=1e-15 BGIDL=1e9 NGIDL=1.1 +NDIODE = 1.13 NTUN = 14.0 NRECF0=2.5 NRECR0=4 +VREC0=1.2 NTRECF=.1 NTRECR=.2 +ISBJT = 1e-4 ISDIF = 1e-5 ISTUN = 2e-5 ISREC = 4e-2 +XBJT = .9 XDIF = .9 XREC = .9 XTUN = 0.01 +AHLI=1e-9 LBJT0=0.2e-6 LN=2e-6 +NBJT=.8 NDIF=-1 AELY=1e8 VABJT=0 +U0 = 352 UA = 1.3E-11 UB = 1.7E-18 UC = -4E-10 +W0 = 1.16E-06 AGS = .25 A1 = 0 A2 = 1 +B0 = .01 B1 = 10 +RDSW = 0 PRWG = 0 PRWB = -.2 WR = 1 +RBODY = 1e0 RBSH = 0.0 +A0 = 1.4 KETA = 0.1 KETAS = 0.2 VSAT = 135000 +DWG = 0 DWB = 0 +ALPHA0 = 1e-8 BETA0 = 0 BETA1 = 0.05 BETA2 = 0.07 +VDSATII0 = .8 ESATII = 1e7 +VOFF = -.14 NFACTOR = .7 CDSC = .00002 CDSCB = 0 +CDSCD = 0 CIT = 0 +PCLM = 2.9 PVAG = 12 PDIBLC1 = .18 PDIBLC2 = .004 +PDIBLCB = -.234 DROUT = .2 +DELTA = .01 ETA0 = .05 ETAB = 0 +DSUB = .2 RTH0 = .005 +CLC = .0000001 CLE = .6 CF = 1E-20 CKAPPA = .6 +CGDL = 1E-20 CGSL = 1E-20 KT1 = -.3 KT1L = 0 +KT2 = .022 UTE = -1.5 UA1 = 4.31E-09 UB1 = -7.61E-18 +UC1 = -5.6E-11 PRT = 760 AT = 22400 +CGSO = 1e-10 CGDO = 1e-10 CJSWG = 1e-12 TT=3e-10 +ASD = 0.3 CSDESW = 1e-12 +TCJSWG=1e-4 MJSWG=.5 PBSWG=1 tmpk8ny_4pz/tests/bsim3soipd/t4.out0000644000175000017500000013114413546075722017462 0ustar carstencarsten No. of Data Rows : 1359 Circuit: *model = BSIMSOI (PD) Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Warning: Pd = 0 is less than W. Warning: Ps = 0 is less than W. *model = BSIMSOI (PD) -------------------------------------------------------------------------------- Index v-sweep vs#branch -------------------------------------------------------------------------------- 0 0.000000e+00 8.433234e-11 1 1.000000e-02 1.173853e-10 2 2.000000e-02 1.632588e-10 3 3.000000e-02 2.268841e-10 4 4.000000e-02 3.150653e-10 5 5.000000e-02 4.371752e-10 6 6.000000e-02 6.061032e-10 7 7.000000e-02 8.395378e-10 8 8.000000e-02 1.161696e-09 9 9.000000e-02 1.605642e-09 10 1.000000e-01 2.216377e-09 11 1.100000e-01 3.054930e-09 12 1.200000e-01 4.203719e-09 13 1.300000e-01 5.773527e-09 14 1.400000e-01 7.912466e-09 15 1.500000e-01 1.081736e-08 16 1.600000e-01 1.474798e-08 17 1.700000e-01 2.004465e-08 18 1.800000e-01 2.714951e-08 19 1.900000e-01 3.663184e-08 20 2.000000e-01 4.921768e-08 21 2.100000e-01 6.582364e-08 22 2.200000e-01 8.759512e-08 23 2.300000e-01 1.159487e-07 24 2.400000e-01 1.526188e-07 25 2.500000e-01 1.997099e-07 26 2.600000e-01 2.597536e-07 27 2.700000e-01 3.357750e-07 28 2.800000e-01 4.313687e-07 29 2.900000e-01 5.507868e-07 30 3.000000e-01 6.990425e-07 31 3.100000e-01 8.820264e-07 32 3.200000e-01 1.106633e-06 33 3.300000e-01 1.380887e-06 34 3.400000e-01 1.714056e-06 35 3.500000e-01 2.116720e-06 36 3.600000e-01 2.600778e-06 37 3.700000e-01 3.179341e-06 38 3.800000e-01 3.866500e-06 39 3.900000e-01 4.676920e-06 40 4.000000e-01 5.625275e-06 41 4.100000e-01 6.725549e-06 42 4.200000e-01 7.990251e-06 43 4.300000e-01 9.429650e-06 44 4.400000e-01 1.105112e-05 45 4.500000e-01 1.285872e-05 46 4.600000e-01 1.485294e-05 47 4.700000e-01 1.703086e-05 48 4.800000e-01 1.938642e-05 49 4.900000e-01 2.191092e-05 50 5.000000e-01 2.459361e-05 51 5.100000e-01 2.742233e-05 52 5.200000e-01 3.038407e-05 53 5.300000e-01 3.346549e-05 54 5.400000e-01 3.665341e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 55 5.500000e-01 3.993505e-05 56 5.600000e-01 4.329836e-05 57 5.700000e-01 4.673214e-05 58 5.800000e-01 5.022610e-05 59 5.900000e-01 5.377097e-05 60 6.000000e-01 5.735840e-05 61 6.100000e-01 6.098099e-05 62 6.200000e-01 6.463219e-05 63 6.300000e-01 6.830625e-05 64 6.400000e-01 7.199816e-05 65 6.500000e-01 7.570353e-05 66 6.600000e-01 7.941857e-05 67 6.700000e-01 8.313998e-05 68 6.800000e-01 8.686491e-05 69 6.900000e-01 9.059089e-05 70 7.000000e-01 9.431579e-05 71 7.100000e-01 9.803777e-05 72 7.200000e-01 1.017552e-04 73 7.300000e-01 1.054668e-04 74 7.400000e-01 1.091713e-04 75 7.500000e-01 1.128676e-04 76 7.600000e-01 1.165549e-04 77 7.700000e-01 1.202323e-04 78 7.800000e-01 1.238993e-04 79 7.900000e-01 1.275551e-04 80 8.000000e-01 1.311992e-04 81 8.100000e-01 1.348313e-04 82 8.200000e-01 1.384508e-04 83 8.300000e-01 1.420573e-04 84 8.400000e-01 1.456507e-04 85 8.500000e-01 1.492305e-04 86 8.600000e-01 1.527965e-04 87 8.700000e-01 1.563485e-04 88 8.800000e-01 1.598862e-04 89 8.900000e-01 1.634095e-04 90 9.000000e-01 1.669181e-04 91 9.100000e-01 1.704120e-04 92 9.200000e-01 1.738909e-04 93 9.300000e-01 1.773548e-04 94 9.400000e-01 1.808034e-04 95 9.500000e-01 1.842368e-04 96 9.600000e-01 1.876547e-04 97 9.700000e-01 1.910572e-04 98 9.800000e-01 1.944440e-04 99 9.900000e-01 1.978151e-04 100 1.000000e+00 2.011704e-04 101 1.010000e+00 2.045099e-04 102 1.020000e+00 2.078335e-04 103 1.030000e+00 2.111411e-04 104 1.040000e+00 2.144326e-04 105 1.050000e+00 2.177081e-04 106 1.060000e+00 2.209674e-04 107 1.070000e+00 2.242105e-04 108 1.080000e+00 2.274374e-04 109 1.090000e+00 2.306480e-04 110 1.100000e+00 2.338423e-04 111 1.110000e+00 2.370202e-04 112 1.120000e+00 2.401818e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 113 1.130000e+00 2.433269e-04 114 1.140000e+00 2.464556e-04 115 1.150000e+00 2.495678e-04 116 1.160000e+00 2.526636e-04 117 1.170000e+00 2.557428e-04 118 1.180000e+00 2.588055e-04 119 1.190000e+00 2.618517e-04 120 1.200000e+00 2.648813e-04 121 1.210000e+00 2.678943e-04 122 1.220000e+00 2.708908e-04 123 1.230000e+00 2.738707e-04 124 1.240000e+00 2.768340e-04 125 1.250000e+00 2.797807e-04 126 1.260000e+00 2.827108e-04 127 1.270000e+00 2.856243e-04 128 1.280000e+00 2.885213e-04 129 1.290000e+00 2.914016e-04 130 1.300000e+00 2.942654e-04 131 1.310000e+00 2.971126e-04 132 1.320000e+00 2.999432e-04 133 1.330000e+00 3.027572e-04 134 1.340000e+00 3.055548e-04 135 1.350000e+00 3.083357e-04 136 1.360000e+00 3.111002e-04 137 1.370000e+00 3.138481e-04 138 1.380000e+00 3.165795e-04 139 1.390000e+00 3.192945e-04 140 1.400000e+00 3.219930e-04 141 1.410000e+00 3.246751e-04 142 1.420000e+00 3.273407e-04 143 1.430000e+00 3.299900e-04 144 1.440000e+00 3.326229e-04 145 1.450000e+00 3.352394e-04 146 1.460000e+00 3.378396e-04 147 1.470000e+00 3.404235e-04 148 1.480000e+00 3.429912e-04 149 1.490000e+00 3.455426e-04 150 1.500000e+00 3.480777e-04 151 0.000000e+00 3.189255e-11 152 1.000000e-02 4.435540e-11 153 2.000000e-02 6.163784e-11 154 3.000000e-02 8.559318e-11 155 4.000000e-02 1.187814e-10 156 5.000000e-02 1.647354e-10 157 6.000000e-02 2.283245e-10 158 7.000000e-02 3.162525e-10 159 8.000000e-02 4.377338e-10 160 9.000000e-02 6.054119e-10 161 1.000000e-01 8.366013e-10 162 1.100000e-01 1.154958e-09 163 1.200000e-01 1.592716e-09 164 1.300000e-01 2.193662e-09 165 1.400000e-01 3.017072e-09 166 1.500000e-01 4.142860e-09 167 1.600000e-01 5.678277e-09 168 1.700000e-01 7.766511e-09 169 1.800000e-01 1.059761e-08 170 1.900000e-01 1.442217e-08 Index v-sweep vs#branch -------------------------------------------------------------------------------- 171 2.000000e-01 1.956821e-08 172 2.100000e-01 2.646166e-08 173 2.200000e-01 3.565081e-08 174 2.300000e-01 4.783488e-08 175 2.400000e-01 6.389687e-08 176 2.500000e-01 8.494072e-08 177 2.600000e-01 1.123326e-07 178 2.700000e-01 1.477468e-07 179 2.800000e-01 1.932161e-07 180 2.900000e-01 2.511888e-07 181 3.000000e-01 3.245919e-07 182 3.100000e-01 4.169056e-07 183 3.200000e-01 5.322484e-07 184 3.300000e-01 6.754765e-07 185 3.400000e-01 8.522962e-07 186 3.500000e-01 1.069386e-06 187 3.600000e-01 1.334520e-06 188 3.700000e-01 1.656678e-06 189 3.800000e-01 2.046121e-06 190 3.900000e-01 2.514397e-06 191 4.000000e-01 3.074263e-06 192 4.100000e-01 3.739458e-06 193 4.200000e-01 4.524337e-06 194 4.300000e-01 5.443337e-06 195 4.400000e-01 6.510303e-06 196 4.500000e-01 7.737734e-06 197 4.600000e-01 9.136030e-06 198 4.700000e-01 1.071284e-05 199 4.800000e-01 1.247258e-05 200 4.900000e-01 1.441625e-05 201 5.000000e-01 1.654142e-05 202 5.100000e-01 1.884257e-05 203 5.200000e-01 2.131151e-05 204 5.300000e-01 2.393794e-05 205 5.400000e-01 2.671009e-05 206 5.500000e-01 2.961528e-05 207 5.600000e-01 3.264041e-05 208 5.700000e-01 3.577248e-05 209 5.800000e-01 3.899883e-05 210 5.900000e-01 4.230747e-05 211 6.000000e-01 4.568721e-05 212 6.100000e-01 4.912779e-05 213 6.200000e-01 5.261986e-05 214 6.300000e-01 5.615504e-05 215 6.400000e-01 5.972587e-05 216 6.500000e-01 6.332573e-05 217 6.600000e-01 6.694883e-05 218 6.700000e-01 7.059006e-05 219 6.800000e-01 7.424499e-05 220 6.900000e-01 7.790976e-05 221 7.000000e-01 8.158104e-05 222 7.100000e-01 8.525591e-05 223 7.200000e-01 8.893187e-05 224 7.300000e-01 9.260676e-05 225 7.400000e-01 9.627870e-05 226 7.500000e-01 9.994606e-05 227 7.600000e-01 1.036075e-04 228 7.700000e-01 1.072616e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 229 7.800000e-01 1.109076e-04 230 7.900000e-01 1.145444e-04 231 8.000000e-01 1.181712e-04 232 8.100000e-01 1.217874e-04 233 8.200000e-01 1.253923e-04 234 8.300000e-01 1.289854e-04 235 8.400000e-01 1.325663e-04 236 8.500000e-01 1.361344e-04 237 8.600000e-01 1.396895e-04 238 8.700000e-01 1.432312e-04 239 8.800000e-01 1.467592e-04 240 8.900000e-01 1.502733e-04 241 9.000000e-01 1.537732e-04 242 9.100000e-01 1.572588e-04 243 9.200000e-01 1.607297e-04 244 9.300000e-01 1.641860e-04 245 9.400000e-01 1.676273e-04 246 9.500000e-01 1.710536e-04 247 9.600000e-01 1.744647e-04 248 9.700000e-01 1.778605e-04 249 9.800000e-01 1.812409e-04 250 9.900000e-01 1.846058e-04 251 1.000000e+00 1.879551e-04 252 1.010000e+00 1.912887e-04 253 1.020000e+00 1.946066e-04 254 1.030000e+00 1.979086e-04 255 1.040000e+00 2.011947e-04 256 1.050000e+00 2.044649e-04 257 1.060000e+00 2.077190e-04 258 1.070000e+00 2.109571e-04 259 1.080000e+00 2.141790e-04 260 1.090000e+00 2.173848e-04 261 1.100000e+00 2.205744e-04 262 1.110000e+00 2.237477e-04 263 1.120000e+00 2.269047e-04 264 1.130000e+00 2.300454e-04 265 1.140000e+00 2.331698e-04 266 1.150000e+00 2.362778e-04 267 1.160000e+00 2.393694e-04 268 1.170000e+00 2.424446e-04 269 1.180000e+00 2.455034e-04 270 1.190000e+00 2.485457e-04 271 1.200000e+00 2.515715e-04 272 1.210000e+00 2.545809e-04 273 1.220000e+00 2.575738e-04 274 1.230000e+00 2.605502e-04 275 1.240000e+00 2.635100e-04 276 1.250000e+00 2.664534e-04 277 1.260000e+00 2.693803e-04 278 1.270000e+00 2.722907e-04 279 1.280000e+00 2.751846e-04 280 1.290000e+00 2.780619e-04 281 1.300000e+00 2.809228e-04 282 1.310000e+00 2.837672e-04 283 1.320000e+00 2.865951e-04 284 1.330000e+00 2.894066e-04 285 1.340000e+00 2.922015e-04 286 1.350000e+00 2.949801e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 287 1.360000e+00 2.977422e-04 288 1.370000e+00 3.004878e-04 289 1.380000e+00 3.032171e-04 290 1.390000e+00 3.059300e-04 291 1.400000e+00 3.086265e-04 292 1.410000e+00 3.113067e-04 293 1.420000e+00 3.139705e-04 294 1.430000e+00 3.166180e-04 295 1.440000e+00 3.192493e-04 296 1.450000e+00 3.218643e-04 297 1.460000e+00 3.244631e-04 298 1.470000e+00 3.270456e-04 299 1.480000e+00 3.296120e-04 300 1.490000e+00 3.321623e-04 301 1.500000e+00 3.346964e-04 302 0.000000e+00 1.721668e-11 303 1.000000e-02 2.388772e-11 304 2.000000e-02 3.312193e-11 305 3.000000e-02 4.589976e-11 306 4.000000e-02 6.357426e-11 307 5.000000e-02 8.801134e-11 308 6.000000e-02 1.217820e-10 309 7.000000e-02 1.684254e-10 310 8.000000e-02 2.328078e-10 311 9.000000e-02 3.216122e-10 312 1.000000e-01 4.440024e-10 313 1.100000e-01 6.125230e-10 314 1.200000e-01 8.443127e-10 315 1.300000e-01 1.162735e-09 316 1.400000e-01 1.599553e-09 317 1.500000e-01 2.197827e-09 318 1.600000e-01 3.015724e-09 319 1.700000e-01 4.131521e-09 320 1.800000e-01 5.650076e-09 321 1.900000e-01 7.711158e-09 322 2.000000e-01 1.050001e-08 323 2.100000e-01 1.426057e-08 324 2.200000e-01 1.931181e-08 325 2.300000e-01 2.606762e-08 326 2.400000e-01 3.506045e-08 327 2.500000e-01 4.696916e-08 328 2.600000e-01 6.265104e-08 329 2.700000e-01 8.317815e-08 330 2.800000e-01 1.098779e-07 331 2.900000e-01 1.443779e-07 332 3.000000e-01 1.886563e-07 333 3.100000e-01 2.450966e-07 334 3.200000e-01 3.165513e-07 335 3.300000e-01 4.064134e-07 336 3.400000e-01 5.187001e-07 337 3.500000e-01 6.581490e-07 338 3.600000e-01 8.303274e-07 339 3.700000e-01 1.041750e-06 340 3.800000e-01 1.300001e-06 341 3.900000e-01 1.613841e-06 342 4.000000e-01 1.993282e-06 343 4.100000e-01 2.449604e-06 344 4.200000e-01 2.995279e-06 Index v-sweep vs#branch -------------------------------------------------------------------------------- 345 4.300000e-01 3.643767e-06 346 4.400000e-01 4.409168e-06 347 4.500000e-01 5.305717e-06 348 4.600000e-01 6.347133e-06 349 4.700000e-01 7.545891e-06 350 4.800000e-01 8.912481e-06 351 4.900000e-01 1.045475e-05 352 5.000000e-01 1.217743e-05 353 5.100000e-01 1.408188e-05 354 5.200000e-01 1.616612e-05 355 5.300000e-01 1.842507e-05 356 5.400000e-01 2.085096e-05 357 5.500000e-01 2.343390e-05 358 5.600000e-01 2.616247e-05 359 5.700000e-01 2.902425e-05 360 5.800000e-01 3.200641e-05 361 5.900000e-01 3.509606e-05 362 6.000000e-01 3.828069e-05 363 6.100000e-01 4.154835e-05 364 6.200000e-01 4.488789e-05 365 6.300000e-01 4.828902e-05 366 6.400000e-01 5.174237e-05 367 6.500000e-01 5.523952e-05 368 6.600000e-01 5.877293e-05 369 6.700000e-01 6.233595e-05 370 6.800000e-01 6.592270e-05 371 6.900000e-01 6.952801e-05 372 7.000000e-01 7.314740e-05 373 7.100000e-01 7.677695e-05 374 7.200000e-01 8.041326e-05 375 7.300000e-01 8.405338e-05 376 7.400000e-01 8.769476e-05 377 7.500000e-01 9.133519e-05 378 7.600000e-01 9.497278e-05 379 7.700000e-01 9.860585e-05 380 7.800000e-01 1.022330e-04 381 7.900000e-01 1.058530e-04 382 8.000000e-01 1.094647e-04 383 8.100000e-01 1.130673e-04 384 8.200000e-01 1.166599e-04 385 8.300000e-01 1.202417e-04 386 8.400000e-01 1.238123e-04 387 8.500000e-01 1.273711e-04 388 8.600000e-01 1.309175e-04 389 8.700000e-01 1.344511e-04 390 8.800000e-01 1.379716e-04 391 8.900000e-01 1.414787e-04 392 9.000000e-01 1.449721e-04 393 9.100000e-01 1.484515e-04 394 9.200000e-01 1.519166e-04 395 9.300000e-01 1.553673e-04 396 9.400000e-01 1.588033e-04 397 9.500000e-01 1.622246e-04 398 9.600000e-01 1.656309e-04 399 9.700000e-01 1.690221e-04 400 9.800000e-01 1.723981e-04 401 9.900000e-01 1.757588e-04 402 1.000000e+00 1.791040e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 403 1.010000e+00 1.824336e-04 404 1.020000e+00 1.857477e-04 405 1.030000e+00 1.890460e-04 406 1.040000e+00 1.923286e-04 407 1.050000e+00 1.955952e-04 408 1.060000e+00 1.988460e-04 409 1.070000e+00 2.020808e-04 410 1.080000e+00 2.052996e-04 411 1.090000e+00 2.085022e-04 412 1.100000e+00 2.116888e-04 413 1.110000e+00 2.148592e-04 414 1.120000e+00 2.180134e-04 415 1.130000e+00 2.211513e-04 416 1.140000e+00 2.242730e-04 417 1.150000e+00 2.273783e-04 418 1.160000e+00 2.304674e-04 419 1.170000e+00 2.335401e-04 420 1.180000e+00 2.365964e-04 421 1.190000e+00 2.396364e-04 422 1.200000e+00 2.426599e-04 423 1.210000e+00 2.456671e-04 424 1.220000e+00 2.486578e-04 425 1.230000e+00 2.516321e-04 426 1.240000e+00 2.545899e-04 427 1.250000e+00 2.575314e-04 428 1.260000e+00 2.604563e-04 429 1.270000e+00 2.633649e-04 430 1.280000e+00 2.662570e-04 431 1.290000e+00 2.691326e-04 432 1.300000e+00 2.719918e-04 433 1.310000e+00 2.748346e-04 434 1.320000e+00 2.776610e-04 435 1.330000e+00 2.804709e-04 436 1.340000e+00 2.832645e-04 437 1.350000e+00 2.860417e-04 438 1.360000e+00 2.888025e-04 439 1.370000e+00 2.915469e-04 440 1.380000e+00 2.942750e-04 441 1.390000e+00 2.969868e-04 442 1.400000e+00 2.996822e-04 443 1.410000e+00 3.023614e-04 444 1.420000e+00 3.050243e-04 445 1.430000e+00 3.076710e-04 446 1.440000e+00 3.103015e-04 447 1.450000e+00 3.129157e-04 448 1.460000e+00 3.155138e-04 449 1.470000e+00 3.180958e-04 450 1.480000e+00 3.206617e-04 451 1.490000e+00 3.232114e-04 452 1.500000e+00 3.257452e-04 453 0.000000e+00 1.394691e-11 454 1.000000e-02 1.846015e-11 455 2.000000e-02 2.662913e-11 456 3.000000e-02 3.678196e-11 457 4.000000e-02 5.079150e-11 458 5.000000e-02 7.011527e-11 459 6.000000e-02 9.675755e-11 460 7.000000e-02 1.334720e-10 Index v-sweep vs#branch -------------------------------------------------------------------------------- 461 8.000000e-02 1.840385e-10 462 9.000000e-02 2.536393e-10 463 1.000000e-01 3.493704e-10 464 1.100000e-01 4.809346e-10 465 1.200000e-01 6.615750e-10 466 1.300000e-01 9.093331e-10 467 1.400000e-01 1.248731e-09 468 1.500000e-01 1.713011e-09 469 1.600000e-01 2.347109e-09 470 1.700000e-01 3.211553e-09 471 1.800000e-01 4.387562e-09 472 1.900000e-01 5.983636e-09 473 2.000000e-01 8.143998e-09 474 2.100000e-01 1.105928e-08 475 2.200000e-01 1.497988e-08 476 2.300000e-01 2.023239e-08 477 2.400000e-01 2.723958e-08 478 2.500000e-01 3.654419e-08 479 2.600000e-01 4.883680e-08 480 2.700000e-01 6.498795e-08 481 2.800000e-01 8.608465e-08 482 2.900000e-01 1.134711e-07 483 3.000000e-01 1.487940e-07 484 3.100000e-01 1.940529e-07 485 3.200000e-01 2.516566e-07 486 3.300000e-01 3.244861e-07 487 3.400000e-01 4.159679e-07 488 3.500000e-01 5.301580e-07 489 3.600000e-01 6.718379e-07 490 3.700000e-01 8.466230e-07 491 3.800000e-01 1.061080e-06 492 3.900000e-01 1.322842e-06 493 4.000000e-01 1.640714e-06 494 4.100000e-01 2.024740e-06 495 4.200000e-01 2.486206e-06 496 4.300000e-01 3.037558e-06 497 4.400000e-01 3.692188e-06 498 4.500000e-01 4.464072e-06 499 4.600000e-01 5.367267e-06 500 4.700000e-01 6.415259e-06 501 4.800000e-01 7.620246e-06 502 4.900000e-01 8.992417e-06 503 5.000000e-01 1.053931e-05 504 5.100000e-01 1.226539e-05 505 5.200000e-01 1.417177e-05 506 5.300000e-01 1.625631e-05 507 5.400000e-01 1.851382e-05 508 5.500000e-01 2.093652e-05 509 5.600000e-01 2.351455e-05 510 5.700000e-01 2.623658e-05 511 5.800000e-01 2.909032e-05 512 5.900000e-01 3.206308e-05 513 6.000000e-01 3.514216e-05 514 6.100000e-01 3.831518e-05 515 6.200000e-01 4.157036e-05 516 6.300000e-01 4.489669e-05 517 6.400000e-01 4.828400e-05 518 6.500000e-01 5.172305e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 519 6.600000e-01 5.520548e-05 520 6.700000e-01 5.872386e-05 521 6.800000e-01 6.227158e-05 522 6.900000e-01 6.584281e-05 523 7.000000e-01 6.943244e-05 524 7.100000e-01 7.303600e-05 525 7.200000e-01 7.664961e-05 526 7.300000e-01 8.026988e-05 527 7.400000e-01 8.389387e-05 528 7.500000e-01 8.751905e-05 529 7.600000e-01 9.114323e-05 530 7.700000e-01 9.476449e-05 531 7.800000e-01 9.838119e-05 532 7.900000e-01 1.019919e-04 533 8.000000e-01 1.055954e-04 534 8.100000e-01 1.091906e-04 535 8.200000e-01 1.127766e-04 536 8.300000e-01 1.163526e-04 537 8.400000e-01 1.199178e-04 538 8.500000e-01 1.234716e-04 539 8.600000e-01 1.270136e-04 540 8.700000e-01 1.305432e-04 541 8.800000e-01 1.340600e-04 542 8.900000e-01 1.375637e-04 543 9.000000e-01 1.410539e-04 544 9.100000e-01 1.445303e-04 545 9.200000e-01 1.479927e-04 546 9.300000e-01 1.514408e-04 547 9.400000e-01 1.548744e-04 548 9.500000e-01 1.582934e-04 549 9.600000e-01 1.616976e-04 550 9.700000e-01 1.650868e-04 551 9.800000e-01 1.684608e-04 552 9.900000e-01 1.718197e-04 553 1.000000e+00 1.751631e-04 554 1.010000e+00 1.784911e-04 555 1.020000e+00 1.818036e-04 556 1.030000e+00 1.851004e-04 557 1.040000e+00 1.883815e-04 558 1.050000e+00 1.916467e-04 559 1.060000e+00 1.948962e-04 560 1.070000e+00 1.981296e-04 561 1.080000e+00 2.013472e-04 562 1.090000e+00 2.045486e-04 563 1.100000e+00 2.077340e-04 564 1.110000e+00 2.109033e-04 565 1.120000e+00 2.140564e-04 566 1.130000e+00 2.171933e-04 567 1.140000e+00 2.203140e-04 568 1.150000e+00 2.234184e-04 569 1.160000e+00 2.265065e-04 570 1.170000e+00 2.295783e-04 571 1.180000e+00 2.326338e-04 572 1.190000e+00 2.356730e-04 573 1.200000e+00 2.386957e-04 574 1.210000e+00 2.417021e-04 575 1.220000e+00 2.446921e-04 576 1.230000e+00 2.476657e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 577 1.240000e+00 2.506229e-04 578 1.250000e+00 2.535637e-04 579 1.260000e+00 2.564881e-04 580 1.270000e+00 2.593960e-04 581 1.280000e+00 2.622876e-04 582 1.290000e+00 2.651627e-04 583 1.300000e+00 2.680214e-04 584 1.310000e+00 2.708638e-04 585 1.320000e+00 2.736897e-04 586 1.330000e+00 2.764993e-04 587 1.340000e+00 2.792925e-04 588 1.350000e+00 2.820693e-04 589 1.360000e+00 2.848298e-04 590 1.370000e+00 2.875739e-04 591 1.380000e+00 2.903018e-04 592 1.390000e+00 2.930133e-04 593 1.400000e+00 2.957086e-04 594 1.410000e+00 2.983876e-04 595 1.420000e+00 3.010503e-04 596 1.430000e+00 3.036969e-04 597 1.440000e+00 3.063273e-04 598 1.450000e+00 3.089415e-04 599 1.460000e+00 3.115396e-04 600 1.470000e+00 3.141215e-04 601 1.480000e+00 3.166874e-04 602 1.490000e+00 3.192372e-04 603 1.500000e+00 3.217710e-04 604 0.000000e+00 1.754769e-11 605 1.000000e-02 2.311481e-11 606 2.000000e-02 3.313622e-11 607 3.000000e-02 4.555909e-11 608 4.000000e-02 6.264591e-11 609 5.000000e-02 8.613817e-11 610 6.000000e-02 1.184225e-10 611 7.000000e-02 1.627667e-10 612 8.000000e-02 2.236405e-10 613 9.000000e-02 3.071507e-10 614 1.000000e-01 4.216291e-10 615 1.100000e-01 5.784260e-10 616 1.200000e-01 7.929764e-10 617 1.300000e-01 1.086227e-09 618 1.400000e-01 1.486537e-09 619 1.500000e-01 2.032200e-09 620 1.600000e-01 2.774763e-09 621 1.700000e-01 3.783370e-09 622 1.800000e-01 5.150401e-09 623 1.900000e-01 6.998722e-09 624 2.000000e-01 9.490909e-09 625 2.100000e-01 1.284086e-08 626 2.200000e-01 1.732819e-08 627 2.300000e-01 2.331591e-08 628 2.400000e-01 3.127163e-08 629 2.500000e-01 4.179280e-08 630 2.600000e-01 5.563606e-08 631 2.700000e-01 7.375095e-08 632 2.800000e-01 9.731799e-08 633 2.900000e-01 1.277913e-07 634 3.000000e-01 1.669460e-07 Index v-sweep vs#branch -------------------------------------------------------------------------------- 635 3.100000e-01 2.169310e-07 636 3.200000e-01 2.803284e-07 637 3.300000e-01 3.602206e-07 638 3.400000e-01 4.602673e-07 639 3.500000e-01 5.847947e-07 640 3.600000e-01 7.388948e-07 641 3.700000e-01 9.285377e-07 642 3.800000e-01 1.160686e-06 643 3.900000e-01 1.443408e-06 644 4.000000e-01 1.785962e-06 645 4.100000e-01 2.198846e-06 646 4.200000e-01 2.693765e-06 647 4.300000e-01 3.283499e-06 648 4.400000e-01 3.981636e-06 649 4.500000e-01 4.802161e-06 650 4.600000e-01 5.758892e-06 651 4.700000e-01 6.864813e-06 652 4.800000e-01 8.131351e-06 653 4.900000e-01 9.567693e-06 654 5.000000e-01 1.118022e-05 655 5.100000e-01 1.297214e-05 656 5.200000e-01 1.494337e-05 657 5.300000e-01 1.709066e-05 658 5.400000e-01 1.940791e-05 659 5.500000e-01 2.188661e-05 660 5.600000e-01 2.451644e-05 661 5.700000e-01 2.728577e-05 662 5.800000e-01 3.018226e-05 663 5.900000e-01 3.319328e-05 664 6.000000e-01 3.630632e-05 665 6.100000e-01 3.950927e-05 666 6.200000e-01 4.279069e-05 667 6.300000e-01 4.613990e-05 668 6.400000e-01 4.954709e-05 669 6.500000e-01 5.300336e-05 670 6.600000e-01 5.650069e-05 671 6.700000e-01 6.003195e-05 672 6.800000e-01 6.359079e-05 673 6.900000e-01 6.717163e-05 674 7.000000e-01 7.076958e-05 675 7.100000e-01 7.438036e-05 676 7.200000e-01 7.800024e-05 677 7.300000e-01 8.162598e-05 678 7.400000e-01 8.525477e-05 679 7.500000e-01 8.888417e-05 680 7.600000e-01 9.251208e-05 681 7.700000e-01 9.613665e-05 682 7.800000e-01 9.975632e-05 683 7.900000e-01 1.033697e-04 684 8.000000e-01 1.069756e-04 685 8.100000e-01 1.105730e-04 686 8.200000e-01 1.141610e-04 687 8.300000e-01 1.177388e-04 688 8.400000e-01 1.213058e-04 689 8.500000e-01 1.248613e-04 690 8.600000e-01 1.284048e-04 691 8.700000e-01 1.319358e-04 692 8.800000e-01 1.354540e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 693 8.900000e-01 1.389590e-04 694 9.000000e-01 1.424504e-04 695 9.100000e-01 1.459280e-04 696 9.200000e-01 1.493916e-04 697 9.300000e-01 1.528408e-04 698 9.400000e-01 1.562756e-04 699 9.500000e-01 1.596956e-04 700 9.600000e-01 1.631008e-04 701 9.700000e-01 1.664910e-04 702 9.800000e-01 1.698661e-04 703 9.900000e-01 1.732259e-04 704 1.000000e+00 1.765704e-04 705 1.010000e+00 1.798993e-04 706 1.020000e+00 1.832127e-04 707 1.030000e+00 1.865105e-04 708 1.040000e+00 1.897925e-04 709 1.050000e+00 1.930587e-04 710 1.060000e+00 1.963090e-04 711 1.070000e+00 1.995434e-04 712 1.080000e+00 2.027618e-04 713 1.090000e+00 2.059642e-04 714 1.100000e+00 2.091504e-04 715 1.110000e+00 2.123206e-04 716 1.120000e+00 2.154745e-04 717 1.130000e+00 2.186123e-04 718 1.140000e+00 2.217338e-04 719 1.150000e+00 2.248391e-04 720 1.160000e+00 2.279280e-04 721 1.170000e+00 2.310007e-04 722 1.180000e+00 2.340570e-04 723 1.190000e+00 2.370969e-04 724 1.200000e+00 2.401205e-04 725 1.210000e+00 2.431277e-04 726 1.220000e+00 2.461184e-04 727 1.230000e+00 2.490928e-04 728 1.240000e+00 2.520508e-04 729 1.250000e+00 2.549923e-04 730 1.260000e+00 2.579175e-04 731 1.270000e+00 2.608262e-04 732 1.280000e+00 2.637185e-04 733 1.290000e+00 2.665944e-04 734 1.300000e+00 2.694538e-04 735 1.310000e+00 2.722969e-04 736 1.320000e+00 2.751235e-04 737 1.330000e+00 2.779338e-04 738 1.340000e+00 2.807277e-04 739 1.350000e+00 2.835052e-04 740 1.360000e+00 2.862663e-04 741 1.370000e+00 2.890112e-04 742 1.380000e+00 2.917397e-04 743 1.390000e+00 2.944519e-04 744 1.400000e+00 2.971478e-04 745 1.410000e+00 2.998274e-04 746 1.420000e+00 3.024908e-04 747 1.430000e+00 3.051380e-04 748 1.440000e+00 3.077690e-04 749 1.450000e+00 3.103838e-04 750 1.460000e+00 3.129824e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 751 1.470000e+00 3.155650e-04 752 1.480000e+00 3.181314e-04 753 1.490000e+00 3.206818e-04 754 1.500000e+00 3.232161e-04 755 0.000000e+00 3.463674e-11 756 1.000000e-02 4.717950e-11 757 2.000000e-02 6.437258e-11 758 3.000000e-02 8.793096e-11 759 4.000000e-02 1.201972e-10 760 5.000000e-02 1.643681e-10 761 6.000000e-02 2.248026e-10 762 7.000000e-02 3.074369e-10 763 8.000000e-02 4.203452e-10 764 9.000000e-02 5.744935e-10 765 1.000000e-01 7.847505e-10 766 1.100000e-01 1.071237e-09 767 1.200000e-01 1.461121e-09 768 1.300000e-01 1.990993e-09 769 1.400000e-01 2.709990e-09 770 1.500000e-01 3.683879e-09 771 1.600000e-01 5.000357e-09 772 1.700000e-01 6.775862e-09 773 1.800000e-01 9.164250e-09 774 1.900000e-01 1.236773e-08 775 2.000000e-01 1.665046e-08 776 2.100000e-01 2.235526e-08 777 2.200000e-01 2.992382e-08 778 2.300000e-01 3.992077e-08 779 2.400000e-01 5.306190e-08 780 2.500000e-01 7.024675e-08 781 2.600000e-01 9.259568e-08 782 2.700000e-01 1.214916e-07 783 2.800000e-01 1.586265e-07 784 2.900000e-01 2.060534e-07 785 3.000000e-01 2.662449e-07 786 3.100000e-01 3.421587e-07 787 3.200000e-01 4.373131e-07 788 3.300000e-01 5.558728e-07 789 3.400000e-01 7.027467e-07 790 3.500000e-01 8.836952e-07 791 3.600000e-01 1.105445e-06 792 3.700000e-01 1.375800e-06 793 3.800000e-01 1.703734e-06 794 3.900000e-01 2.099446e-06 795 4.000000e-01 2.574350e-06 796 4.100000e-01 3.140969e-06 797 4.200000e-01 3.812702e-06 798 4.300000e-01 4.603452e-06 799 4.400000e-01 5.527108e-06 800 4.500000e-01 6.596900e-06 801 4.600000e-01 7.824699e-06 802 4.700000e-01 9.220318e-06 803 4.800000e-01 1.079092e-05 804 4.900000e-01 1.254061e-05 805 5.000000e-01 1.447022e-05 806 5.100000e-01 1.657740e-05 807 5.200000e-01 1.885687e-05 808 5.300000e-01 2.130084e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 809 5.400000e-01 2.389954e-05 810 5.500000e-01 2.664175e-05 811 5.600000e-01 2.951538e-05 812 5.700000e-01 3.250792e-05 813 5.800000e-01 3.560688e-05 814 5.900000e-01 3.880005e-05 815 6.000000e-01 4.207581e-05 816 6.100000e-01 4.542328e-05 817 6.200000e-01 4.883239e-05 818 6.300000e-01 5.229396e-05 819 6.400000e-01 5.579969e-05 820 6.500000e-01 5.934216e-05 821 6.600000e-01 6.291476e-05 822 6.700000e-01 6.651166e-05 823 6.800000e-01 7.012772e-05 824 6.900000e-01 7.375843e-05 825 7.000000e-01 7.739988e-05 826 7.100000e-01 8.104863e-05 827 7.200000e-01 8.470172e-05 828 7.300000e-01 8.835657e-05 829 7.400000e-01 9.201093e-05 830 7.500000e-01 9.566286e-05 831 7.600000e-01 9.931068e-05 832 7.700000e-01 1.029529e-04 833 7.800000e-01 1.065884e-04 834 7.900000e-01 1.102158e-04 835 8.000000e-01 1.138344e-04 836 8.100000e-01 1.174433e-04 837 8.200000e-01 1.210417e-04 838 8.300000e-01 1.246290e-04 839 8.400000e-01 1.282046e-04 840 8.500000e-01 1.317681e-04 841 8.600000e-01 1.353190e-04 842 8.700000e-01 1.388570e-04 843 8.800000e-01 1.423816e-04 844 8.900000e-01 1.458927e-04 845 9.000000e-01 1.493898e-04 846 9.100000e-01 1.528729e-04 847 9.200000e-01 1.563416e-04 848 9.300000e-01 1.597957e-04 849 9.400000e-01 1.632352e-04 850 9.500000e-01 1.666598e-04 851 9.600000e-01 1.700693e-04 852 9.700000e-01 1.734637e-04 853 9.800000e-01 1.768429e-04 854 9.900000e-01 1.802066e-04 855 1.000000e+00 1.835549e-04 856 1.010000e+00 1.868876e-04 857 1.020000e+00 1.902046e-04 858 1.030000e+00 1.935058e-04 859 1.040000e+00 1.967913e-04 860 1.050000e+00 2.000609e-04 861 1.060000e+00 2.033145e-04 862 1.070000e+00 2.065521e-04 863 1.080000e+00 2.097737e-04 864 1.090000e+00 2.129791e-04 865 1.100000e+00 2.161684e-04 866 1.110000e+00 2.193415e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 867 1.120000e+00 2.224984e-04 868 1.130000e+00 2.256391e-04 869 1.140000e+00 2.287634e-04 870 1.150000e+00 2.318714e-04 871 1.160000e+00 2.349631e-04 872 1.170000e+00 2.380384e-04 873 1.180000e+00 2.410973e-04 874 1.190000e+00 2.441398e-04 875 1.200000e+00 2.471659e-04 876 1.210000e+00 2.501756e-04 877 1.220000e+00 2.531688e-04 878 1.230000e+00 2.561455e-04 879 1.240000e+00 2.591058e-04 880 1.250000e+00 2.620497e-04 881 1.260000e+00 2.649771e-04 882 1.270000e+00 2.678880e-04 883 1.280000e+00 2.707824e-04 884 1.290000e+00 2.736604e-04 885 1.300000e+00 2.765219e-04 886 1.310000e+00 2.793670e-04 887 1.320000e+00 2.821956e-04 888 1.330000e+00 2.850078e-04 889 1.340000e+00 2.878035e-04 890 1.350000e+00 2.905828e-04 891 1.360000e+00 2.933458e-04 892 1.370000e+00 2.960923e-04 893 1.380000e+00 2.988225e-04 894 1.390000e+00 3.015363e-04 895 1.400000e+00 3.042338e-04 896 1.410000e+00 3.069150e-04 897 1.420000e+00 3.095799e-04 898 1.430000e+00 3.122285e-04 899 1.440000e+00 3.148609e-04 900 1.450000e+00 3.174770e-04 901 1.460000e+00 3.200770e-04 902 1.470000e+00 3.226608e-04 903 1.480000e+00 3.252284e-04 904 1.490000e+00 3.277799e-04 905 1.500000e+00 3.303154e-04 906 0.000000e+00 1.045384e-10 907 1.000000e-02 1.404399e-10 908 2.000000e-02 1.893844e-10 909 3.000000e-02 2.560736e-10 910 4.000000e-02 3.468845e-10 911 5.000000e-02 4.704551e-10 912 6.000000e-02 6.384687e-10 913 7.000000e-02 8.667021e-10 914 8.000000e-02 1.176419e-09 915 9.000000e-02 1.596215e-09 916 1.000000e-01 2.164452e-09 917 1.100000e-01 2.932448e-09 918 1.200000e-01 3.968627e-09 919 1.300000e-01 5.363896e-09 920 1.400000e-01 7.238524e-09 921 1.500000e-01 9.750897e-09 922 1.600000e-01 1.310851e-08 923 1.700000e-01 1.758161e-08 924 1.800000e-01 2.352000e-08 Index v-sweep vs#branch -------------------------------------------------------------------------------- 925 1.900000e-01 3.137322e-08 926 2.000000e-01 4.171477e-08 927 2.100000e-01 5.527041e-08 928 2.200000e-01 7.295098e-08 929 2.300000e-01 9.588982e-08 930 2.400000e-01 1.254851e-07 931 2.500000e-01 1.634470e-07 932 2.600000e-01 2.118512e-07 933 2.700000e-01 2.731982e-07 934 2.800000e-01 3.504810e-07 935 2.900000e-01 4.472614e-07 936 3.000000e-01 5.677581e-07 937 3.100000e-01 7.169442e-07 938 3.200000e-01 9.006563e-07 939 3.300000e-01 1.125706e-06 940 3.400000e-01 1.399992e-06 941 3.500000e-01 1.732584e-06 942 3.600000e-01 2.133780e-06 943 3.700000e-01 2.615081e-06 944 3.800000e-01 3.189086e-06 945 3.900000e-01 3.869251e-06 946 4.000000e-01 4.669510e-06 947 4.100000e-01 5.603758e-06 948 4.200000e-01 6.685210e-06 949 4.300000e-01 7.925707e-06 950 4.400000e-01 9.335025e-06 951 4.500000e-01 1.092030e-05 952 4.600000e-01 1.268561e-05 953 4.700000e-01 1.463182e-05 954 4.800000e-01 1.675661e-05 955 4.900000e-01 1.905474e-05 956 5.000000e-01 2.151851e-05 957 5.100000e-01 2.413824e-05 958 5.200000e-01 2.690280e-05 959 5.300000e-01 2.980018e-05 960 5.400000e-01 3.281794e-05 961 5.500000e-01 3.594363e-05 962 5.600000e-01 3.916507e-05 963 5.700000e-01 4.247066e-05 964 5.800000e-01 4.584949e-05 965 5.900000e-01 4.929145e-05 966 6.000000e-01 5.278732e-05 967 6.100000e-01 5.632874e-05 968 6.200000e-01 5.990821e-05 969 6.300000e-01 6.351906e-05 970 6.400000e-01 6.715537e-05 971 6.500000e-01 7.081191e-05 972 6.600000e-01 7.448413e-05 973 6.700000e-01 7.816801e-05 974 6.800000e-01 8.186006e-05 975 6.900000e-01 8.555725e-05 976 7.000000e-01 8.925692e-05 977 7.100000e-01 9.295679e-05 978 7.200000e-01 9.665486e-05 979 7.300000e-01 1.003494e-04 980 7.400000e-01 1.040389e-04 981 7.500000e-01 1.077221e-04 982 7.600000e-01 1.113977e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 983 7.700000e-01 1.150650e-04 984 7.800000e-01 1.187228e-04 985 7.900000e-01 1.223706e-04 986 8.000000e-01 1.260077e-04 987 8.100000e-01 1.296334e-04 988 8.200000e-01 1.332472e-04 989 8.300000e-01 1.368488e-04 990 8.400000e-01 1.404377e-04 991 8.500000e-01 1.440135e-04 992 8.600000e-01 1.475759e-04 993 8.700000e-01 1.511247e-04 994 8.800000e-01 1.546595e-04 995 8.900000e-01 1.581802e-04 996 9.000000e-01 1.616866e-04 997 9.100000e-01 1.651784e-04 998 9.200000e-01 1.686555e-04 999 9.300000e-01 1.721177e-04 1000 9.400000e-01 1.755649e-04 1001 9.500000e-01 1.789970e-04 1002 9.600000e-01 1.824138e-04 1003 9.700000e-01 1.858152e-04 1004 9.800000e-01 1.892012e-04 1005 9.900000e-01 1.925716e-04 1006 1.000000e+00 1.959263e-04 1007 1.010000e+00 1.992653e-04 1008 1.020000e+00 2.025885e-04 1009 1.030000e+00 2.058958e-04 1010 1.040000e+00 2.091871e-04 1011 1.050000e+00 2.124624e-04 1012 1.060000e+00 2.157217e-04 1013 1.070000e+00 2.189649e-04 1014 1.080000e+00 2.221918e-04 1015 1.090000e+00 2.254026e-04 1016 1.100000e+00 2.285972e-04 1017 1.110000e+00 2.317754e-04 1018 1.120000e+00 2.349373e-04 1019 1.130000e+00 2.380829e-04 1020 1.140000e+00 2.412121e-04 1021 1.150000e+00 2.443249e-04 1022 1.160000e+00 2.474213e-04 1023 1.170000e+00 2.505012e-04 1024 1.180000e+00 2.535646e-04 1025 1.190000e+00 2.566115e-04 1026 1.200000e+00 2.596420e-04 1027 1.210000e+00 2.626559e-04 1028 1.220000e+00 2.656533e-04 1029 1.230000e+00 2.686342e-04 1030 1.240000e+00 2.715985e-04 1031 1.250000e+00 2.745463e-04 1032 1.260000e+00 2.774776e-04 1033 1.270000e+00 2.803922e-04 1034 1.280000e+00 2.832904e-04 1035 1.290000e+00 2.861720e-04 1036 1.300000e+00 2.890371e-04 1037 1.310000e+00 2.918856e-04 1038 1.320000e+00 2.947176e-04 1039 1.330000e+00 2.975331e-04 1040 1.340000e+00 3.003320e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1041 1.350000e+00 3.031145e-04 1042 1.360000e+00 3.058805e-04 1043 1.370000e+00 3.086300e-04 1044 1.380000e+00 3.113631e-04 1045 1.390000e+00 3.140797e-04 1046 1.400000e+00 3.167799e-04 1047 1.410000e+00 3.194637e-04 1048 1.420000e+00 3.221311e-04 1049 1.430000e+00 3.247822e-04 1050 1.440000e+00 3.274169e-04 1051 1.450000e+00 3.300354e-04 1052 1.460000e+00 3.326375e-04 1053 1.470000e+00 3.352234e-04 1054 1.480000e+00 3.377930e-04 1055 1.490000e+00 3.403465e-04 1056 1.500000e+00 3.428837e-04 1057 0.000000e+00 4.795506e-10 1058 1.000000e-02 6.196464e-10 1059 2.000000e-02 8.091557e-10 1060 3.000000e-02 1.065278e-09 1061 4.000000e-02 1.411076e-09 1062 5.000000e-02 1.877411e-09 1063 6.000000e-02 2.505474e-09 1064 7.000000e-02 3.350099e-09 1065 8.000000e-02 4.484049e-09 1066 9.000000e-02 6.003532e-09 1067 1.000000e-01 8.035260e-09 1068 1.100000e-01 1.074536e-08 1069 1.200000e-01 1.435056e-08 1070 1.300000e-01 1.913204e-08 1071 1.400000e-01 2.545238e-08 1072 1.500000e-01 3.377604e-08 1073 1.600000e-01 4.469378e-08 1074 1.700000e-01 5.895133e-08 1075 1.800000e-01 7.748264e-08 1076 1.900000e-01 1.014480e-07 1077 2.000000e-01 1.322771e-07 1078 2.100000e-01 1.717180e-07 1079 2.200000e-01 2.218914e-07 1080 2.300000e-01 2.853528e-07 1081 2.400000e-01 3.651618e-07 1082 2.500000e-01 4.649620e-07 1083 2.600000e-01 5.890700e-07 1084 2.700000e-01 7.425761e-07 1085 2.800000e-01 9.314530e-07 1086 2.900000e-01 1.162668e-06 1087 3.000000e-01 1.444289e-06 1088 3.100000e-01 1.785569e-06 1089 3.200000e-01 2.196987e-06 1090 3.300000e-01 2.690219e-06 1091 3.400000e-01 3.278015e-06 1092 3.500000e-01 3.973945e-06 1093 3.600000e-01 4.792012e-06 1094 3.700000e-01 5.746120e-06 1095 3.800000e-01 6.849443e-06 1096 3.900000e-01 8.113722e-06 1097 4.000000e-01 9.548603e-06 1098 4.100000e-01 1.116107e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1099 4.200000e-01 1.295505e-05 1100 4.300000e-01 1.493128e-05 1101 4.400000e-01 1.708735e-05 1102 4.500000e-01 1.941797e-05 1103 4.600000e-01 2.191543e-05 1104 4.700000e-01 2.457007e-05 1105 4.800000e-01 2.737081e-05 1106 4.900000e-01 3.030571e-05 1107 5.000000e-01 3.336239e-05 1108 5.100000e-01 3.652846e-05 1109 5.200000e-01 3.979178e-05 1110 5.300000e-01 4.314078e-05 1111 5.400000e-01 4.656455e-05 1112 5.500000e-01 5.005299e-05 1113 5.600000e-01 5.359684e-05 1114 5.700000e-01 5.718771e-05 1115 5.800000e-01 6.081804e-05 1116 5.900000e-01 6.448109e-05 1117 6.000000e-01 6.817088e-05 1118 6.100000e-01 7.188214e-05 1119 6.200000e-01 7.561020e-05 1120 6.300000e-01 7.935101e-05 1121 6.400000e-01 8.310101e-05 1122 6.500000e-01 8.685708e-05 1123 6.600000e-01 9.061652e-05 1124 6.700000e-01 9.437698e-05 1125 6.800000e-01 9.813641e-05 1126 6.900000e-01 1.018930e-04 1127 7.000000e-01 1.056453e-04 1128 7.100000e-01 1.093918e-04 1129 7.200000e-01 1.131315e-04 1130 7.300000e-01 1.168633e-04 1131 7.400000e-01 1.205862e-04 1132 7.500000e-01 1.242996e-04 1133 7.600000e-01 1.280027e-04 1134 7.700000e-01 1.316948e-04 1135 7.800000e-01 1.353756e-04 1136 7.900000e-01 1.390444e-04 1137 8.000000e-01 1.427010e-04 1138 8.100000e-01 1.463448e-04 1139 8.200000e-01 1.499756e-04 1140 8.300000e-01 1.535930e-04 1141 8.400000e-01 1.571969e-04 1142 8.500000e-01 1.607868e-04 1143 8.600000e-01 1.643627e-04 1144 8.700000e-01 1.679244e-04 1145 8.800000e-01 1.714715e-04 1146 8.900000e-01 1.750041e-04 1147 9.000000e-01 1.785218e-04 1148 9.100000e-01 1.820246e-04 1149 9.200000e-01 1.855123e-04 1150 9.300000e-01 1.889849e-04 1151 9.400000e-01 1.924421e-04 1152 9.500000e-01 1.958840e-04 1153 9.600000e-01 1.993103e-04 1154 9.700000e-01 2.027210e-04 1155 9.800000e-01 2.061161e-04 1156 9.900000e-01 2.094954e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1157 1.000000e+00 2.128588e-04 1158 1.010000e+00 2.162064e-04 1159 1.020000e+00 2.195379e-04 1160 1.030000e+00 2.228535e-04 1161 1.040000e+00 2.261529e-04 1162 1.050000e+00 2.294362e-04 1163 1.060000e+00 2.327033e-04 1164 1.070000e+00 2.359541e-04 1165 1.080000e+00 2.391887e-04 1166 1.090000e+00 2.424070e-04 1167 1.100000e+00 2.456088e-04 1168 1.110000e+00 2.487943e-04 1169 1.120000e+00 2.519633e-04 1170 1.130000e+00 2.551159e-04 1171 1.140000e+00 2.582520e-04 1172 1.150000e+00 2.613716e-04 1173 1.160000e+00 2.644746e-04 1174 1.170000e+00 2.675611e-04 1175 1.180000e+00 2.706310e-04 1176 1.190000e+00 2.736843e-04 1177 1.200000e+00 2.767210e-04 1178 1.210000e+00 2.797411e-04 1179 1.220000e+00 2.827445e-04 1180 1.230000e+00 2.857313e-04 1181 1.240000e+00 2.887015e-04 1182 1.250000e+00 2.916550e-04 1183 1.260000e+00 2.945919e-04 1184 1.270000e+00 2.975121e-04 1185 1.280000e+00 3.004156e-04 1186 1.290000e+00 3.033025e-04 1187 1.300000e+00 3.061728e-04 1188 1.310000e+00 3.090264e-04 1189 1.320000e+00 3.118634e-04 1190 1.330000e+00 3.146837e-04 1191 1.340000e+00 3.174874e-04 1192 1.350000e+00 3.202745e-04 1193 1.360000e+00 3.230451e-04 1194 1.370000e+00 3.257990e-04 1195 1.380000e+00 3.285363e-04 1196 1.390000e+00 3.312571e-04 1197 1.400000e+00 3.339614e-04 1198 1.410000e+00 3.366492e-04 1199 1.420000e+00 3.393204e-04 1200 1.430000e+00 3.419752e-04 1201 1.440000e+00 3.446135e-04 1202 1.450000e+00 3.472354e-04 1203 1.460000e+00 3.498409e-04 1204 1.470000e+00 3.524300e-04 1205 1.480000e+00 3.550027e-04 1206 1.490000e+00 3.575591e-04 1207 1.500000e+00 3.600992e-04 1208 0.000000e+00 3.964428e-09 1209 1.000000e-02 4.609593e-09 1210 2.000000e-02 5.472023e-09 1211 3.000000e-02 6.623095e-09 1212 4.000000e-02 8.156726e-09 1213 5.000000e-02 1.019603e-08 1214 6.000000e-02 1.290176e-08 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1215 7.000000e-02 1.648280e-08 1216 8.000000e-02 2.120931e-08 1217 9.000000e-02 2.742865e-08 1218 1.000000e-01 3.558485e-08 1219 1.100000e-01 4.624181e-08 1220 1.200000e-01 6.011071e-08 1221 1.300000e-01 7.808208e-08 1222 1.400000e-01 1.012627e-07 1223 1.500000e-01 1.310179e-07 1224 1.600000e-01 1.690196e-07 1225 1.700000e-01 2.173002e-07 1226 1.800000e-01 2.783144e-07 1227 1.900000e-01 3.550087e-07 1228 2.000000e-01 4.508997e-07 1229 2.100000e-01 5.701636e-07 1230 2.200000e-01 7.177351e-07 1231 2.300000e-01 8.994153e-07 1232 2.400000e-01 1.121983e-06 1233 2.500000e-01 1.393303e-06 1234 2.600000e-01 1.722410e-06 1235 2.700000e-01 2.119565e-06 1236 2.800000e-01 2.596235e-06 1237 2.900000e-01 3.164994e-06 1238 3.000000e-01 3.839298e-06 1239 3.100000e-01 4.633133e-06 1240 3.200000e-01 5.560519e-06 1241 3.300000e-01 6.634904e-06 1242 3.400000e-01 7.868491e-06 1243 3.500000e-01 9.271556e-06 1244 3.600000e-01 1.085187e-05 1245 3.700000e-01 1.261427e-05 1246 3.800000e-01 1.456043e-05 1247 3.900000e-01 1.668888e-05 1248 4.000000e-01 1.899525e-05 1249 4.100000e-01 2.147258e-05 1250 4.200000e-01 2.411187e-05 1251 4.300000e-01 2.690254e-05 1252 4.400000e-01 2.983300e-05 1253 4.500000e-01 3.289107e-05 1254 4.600000e-01 3.606442e-05 1255 4.700000e-01 3.934088e-05 1256 4.800000e-01 4.270873e-05 1257 4.900000e-01 4.615685e-05 1258 5.000000e-01 4.967486e-05 1259 5.100000e-01 5.325320e-05 1260 5.200000e-01 5.688315e-05 1261 5.300000e-01 6.055682e-05 1262 5.400000e-01 6.426712e-05 1263 5.500000e-01 6.800776e-05 1264 5.600000e-01 7.177314e-05 1265 5.700000e-01 7.555832e-05 1266 5.800000e-01 7.935896e-05 1267 5.900000e-01 8.317123e-05 1268 6.000000e-01 8.699182e-05 1269 6.100000e-01 9.081781e-05 1270 6.200000e-01 9.464666e-05 1271 6.300000e-01 9.847615e-05 1272 6.400000e-01 1.023043e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1273 6.500000e-01 1.061296e-04 1274 6.600000e-01 1.099504e-04 1275 6.700000e-01 1.137654e-04 1276 6.800000e-01 1.175737e-04 1277 6.900000e-01 1.213741e-04 1278 7.000000e-01 1.251658e-04 1279 7.100000e-01 1.289481e-04 1280 7.200000e-01 1.327204e-04 1281 7.300000e-01 1.364819e-04 1282 7.400000e-01 1.402322e-04 1283 7.500000e-01 1.439708e-04 1284 7.600000e-01 1.476974e-04 1285 7.700000e-01 1.514114e-04 1286 7.800000e-01 1.551127e-04 1287 7.900000e-01 1.588009e-04 1288 8.000000e-01 1.624758e-04 1289 8.100000e-01 1.661370e-04 1290 8.200000e-01 1.697844e-04 1291 8.300000e-01 1.734177e-04 1292 8.400000e-01 1.770368e-04 1293 8.500000e-01 1.806415e-04 1294 8.600000e-01 1.842316e-04 1295 8.700000e-01 1.878070e-04 1296 8.800000e-01 1.913676e-04 1297 8.900000e-01 1.949131e-04 1298 9.000000e-01 1.984436e-04 1299 9.100000e-01 2.019588e-04 1300 9.200000e-01 2.054586e-04 1301 9.300000e-01 2.089431e-04 1302 9.400000e-01 2.124120e-04 1303 9.500000e-01 2.158652e-04 1304 9.600000e-01 2.193028e-04 1305 9.700000e-01 2.227246e-04 1306 9.800000e-01 2.261306e-04 1307 9.900000e-01 2.295206e-04 1308 1.000000e+00 2.328946e-04 1309 1.010000e+00 2.362526e-04 1310 1.020000e+00 2.395944e-04 1311 1.030000e+00 2.429201e-04 1312 1.040000e+00 2.462296e-04 1313 1.050000e+00 2.495227e-04 1314 1.060000e+00 2.527996e-04 1315 1.070000e+00 2.560601e-04 1316 1.080000e+00 2.593041e-04 1317 1.090000e+00 2.625318e-04 1318 1.100000e+00 2.657429e-04 1319 1.110000e+00 2.689375e-04 1320 1.120000e+00 2.721156e-04 1321 1.130000e+00 2.752771e-04 1322 1.140000e+00 2.784220e-04 1323 1.150000e+00 2.815503e-04 1324 1.160000e+00 2.846619e-04 1325 1.170000e+00 2.877568e-04 1326 1.180000e+00 2.908351e-04 1327 1.190000e+00 2.938966e-04 1328 1.200000e+00 2.969414e-04 1329 1.210000e+00 2.999695e-04 1330 1.220000e+00 3.029808e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1331 1.230000e+00 3.059754e-04 1332 1.240000e+00 3.089532e-04 1333 1.250000e+00 3.119142e-04 1334 1.260000e+00 3.148585e-04 1335 1.270000e+00 3.177860e-04 1336 1.280000e+00 3.206967e-04 1337 1.290000e+00 3.235906e-04 1338 1.300000e+00 3.264678e-04 1339 1.310000e+00 3.293282e-04 1340 1.320000e+00 3.321718e-04 1341 1.330000e+00 3.349986e-04 1342 1.340000e+00 3.378087e-04 1343 1.350000e+00 3.406021e-04 1344 1.360000e+00 3.433787e-04 1345 1.370000e+00 3.461387e-04 1346 1.380000e+00 3.488819e-04 1347 1.390000e+00 3.516084e-04 1348 1.400000e+00 3.543182e-04 1349 1.410000e+00 3.570114e-04 1350 1.420000e+00 3.596880e-04 1351 1.430000e+00 3.623479e-04 1352 1.440000e+00 3.649912e-04 1353 1.450000e+00 3.676180e-04 1354 1.460000e+00 3.702282e-04 1355 1.470000e+00 3.728219e-04 1356 1.480000e+00 3.753991e-04 1357 1.490000e+00 3.779598e-04 1358 1.500000e+00 3.805040e-04 tmpk8ny_4pz/tests/transient/0000755000175000017500000000000013546075722016331 5ustar carstencarstentmpk8ny_4pz/tests/transient/fourbitadder.cir0000644000175000017500000000270513546075722021506 0ustar carstencarsten4 bit adder * Models: .MODEL dmod D .MODEL qmod NPN(level=1 BF=75 RB=100 CJE=1PF CJC=3PF) .options noacct .SUBCKT NAND 1 2 3 4 * noeuds: entrees(2) sortie vcc q1 9 5 1 qmod d1clamp 0 1 dmod q2 9 5 2 qmod d2clamp 0 2 dmod rb 4 5 4k r1 4 6 1.6k q3 6 9 8 qmod r2 8 0 1k rc 4 7 130 q4 7 6 10 qmod dvbedrop 10 3 dmod q5 3 8 0 qmod .ends NAND .SUBCKT ONEBIT 1 2 3 4 5 6 * noeuds entrees(2) ,carryin, sortie, carryout, vcc x1 1 2 7 6 NAND x2 1 7 8 6 NAND x3 2 7 9 6 NAND x4 8 9 10 6 NAND x5 3 10 11 6 NAND x6 3 11 12 6 NAND x7 10 11 13 6 NAND x8 12 13 4 6 NAND x9 11 7 5 6 NAND .ends ONEBIT .SUBCKT TWOBIT 1 2 3 4 5 6 7 8 9 * noeuds x1 1 2 7 5 10 9 ONEBIT x2 3 4 10 6 8 9 ONEBIT .ends TWOBIT .SUBCKT FOURBIT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 x1 1 2 3 4 9 10 13 16 15 TWOBIT x2 5 6 7 8 11 12 16 14 15 TWOBIT .ends FOURBIT * Inputs/Supplies: vcc 99 0 DC 5V VIN1A 1 0 DC 0 pulse(0 3 0 10ns 10ns 10ns 50ns) VIN1B 2 0 DC 0 pulse(0 3 0 10ns 10ns 20ns 100ns) VIN2A 3 0 DC 0 pulse(0 3 0 10ns 10ns 40ns 200ns) VIN2B 4 0 DC 0 pulse(0 3 0 10ns 10ns 80ns 400ns) VIN3A 5 0 DC 0 pulse(0 3 0 10ns 10ns 160ns 800ns) VIN3B 6 0 DC 0 pulse(0 3 0 10ns 10ns 320ns 1600ns) VIN4A 7 0 DC 0 pulse(0 3 0 10ns 10ns 640ns 3200ns) VIN4B 8 0 DC 0 pulse(0 3 0 10ns 10ns 1280ns 6400ns) * Circuit description: x1 1 2 3 4 5 6 7 8 9 10 11 12 0 13 99 FOURBIT rbit0 9 0 1k rbit1 10 0 1k rbit2 11 0 1k rbit3 12 0 1k rcout 13 0 1k * Analysys: .tran 1ns 6ns .print tran v(1) .end tmpk8ny_4pz/tests/transient/Makefile.am0000644000175000017500000000040413546075722020363 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = fourbitadder.cir TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/transient/fourbitadder.out0000644000175000017500000003553713546075722021551 0ustar carstencarsten Circuit: 4 bit adder Warning -- Level not specified on line "(bf=75 rb=100 cje=1pf cjc=3pf)" Using level 1. Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Initial Transient Solution -------------------------- Node Voltage ---- ------- 99 5 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 1:1:1:1:9 0.0179277 1:1:1:1:5 0.826789 1:1:1:1:6 4.97244 1:1:1:1:8 3.54606e-09 1:1:1:1:7 4.83208 1:1:1:1:10 4.18989 1:1:1:7 3.52783 1:1:1:2:9 0.0363158 1:1:1:2:5 0.844836 1:1:1:2:6 4.99412 1:1:1:2:8 3.66756e-09 1:1:1:2:7 4.96415 1:1:1:2:10 4.25286 1:1:1:8 3.63074 1:1:1:3:9 0.0363158 1:1:1:3:5 0.844836 1:1:1:3:6 4.99412 1:1:1:3:8 3.66756e-09 1:1:1:3:7 4.96415 1:1:1:3:10 4.25286 1:1:1:9 3.63074 1:1:1:4:9 1.99534 1:1:1:4:5 2.76452 1:1:1:4:6 1.10792 1:1:1:4:8 1.07019 1:1:1:4:7 4.99984 1:1:1:4:10 0.507271 1:1:1:10 0.0253869 1:1:1:5:9 0.0277172 1:1:1:5:5 0.836398 1:1:1:5:6 4.97251 1:1:1:5:8 3.55613e-09 1:1:1:5:7 4.83248 1:1:1:5:10 4.19002 1:1:1:11 3.52802 1:1:1:6:9 0.0363158 1:1:1:6:5 0.844836 1:1:1:6:6 4.9941 1:1:1:6:8 3.66742e-09 1:1:1:6:7 4.96406 1:1:1:6:10 4.25278 1:1:1:12 3.63059 1:1:1:7:9 0.0617017 1:1:1:7:5 0.869755 1:1:1:7:6 4.9941 1:1:1:7:8 3.6935e-09 1:1:1:7:7 4.96406 1:1:1:7:10 4.25278 1:1:1:13 3.63059 1:1:1:8:9 1.98972 1:1:1:8:5 2.75903 1:1:1:8:6 1.10196 1:1:1:8:8 1.06424 1:1:1:8:7 4.99984 1:1:1:8:10 0.500516 9 0.0178393 1:1:1:9:9 1.9967 1:1:1:9:5 2.76585 1:1:1:9:6 1.10936 1:1:1:9:8 1.07163 1:1:1:9:7 4.99984 1:1:1:9:10 0.508909 1:1:10 0.0272212 1:1:2:1:9 0.0179277 1:1:2:1:5 0.826789 1:1:2:1:6 4.97244 1:1:2:1:8 3.54606e-09 1:1:2:1:7 4.83208 1:1:2:1:10 4.18989 1:1:2:7 3.52783 1:1:2:2:9 0.0363158 1:1:2:2:5 0.844836 1:1:2:2:6 4.99412 1:1:2:2:8 3.6676e-09 1:1:2:2:7 4.96417 1:1:2:2:10 4.25288 1:1:2:8 3.63077 1:1:2:3:9 0.0363158 1:1:2:3:5 0.844836 1:1:2:3:6 4.99412 1:1:2:3:8 3.6676e-09 1:1:2:3:7 4.96417 1:1:2:3:10 4.25288 1:1:2:9 3.63077 1:1:2:4:9 1.9967 1:1:2:4:5 2.76585 1:1:2:4:6 1.10936 1:1:2:4:8 1.07163 1:1:2:4:7 4.99984 1:1:2:4:10 0.508909 1:1:2:10 0.0272212 1:1:2:5:9 0.0451489 1:1:2:5:5 0.85351 1:1:2:5:6 4.97258 1:1:2:5:8 3.57407e-09 1:1:2:5:7 4.83293 1:1:2:5:10 4.19017 1:1:2:11 3.52824 1:1:2:6:9 0.063536 1:1:2:6:5 0.871555 1:1:2:6:6 4.9941 1:1:2:6:8 3.69541e-09 1:1:2:6:7 4.96406 1:1:2:6:10 4.25278 1:1:2:12 3.63059 1:1:2:7:9 0.063536 1:1:2:7:5 0.871555 1:1:2:7:6 4.9941 1:1:2:7:8 3.69541e-09 1:1:2:7:7 4.96406 1:1:2:7:10 4.25278 1:1:2:13 3.63059 1:1:2:8:9 1.98972 1:1:2:8:5 2.75903 1:1:2:8:6 1.10196 1:1:2:8:8 1.06424 1:1:2:8:7 4.99984 1:1:2:8:10 0.500516 10 0.0178393 1:1:2:9:9 1.9967 1:1:2:9:5 2.76585 1:1:2:9:6 1.10936 1:1:2:9:8 1.07163 1:1:2:9:7 4.99984 1:1:2:9:10 0.508909 1:16 0.0272212 1:2:1:1:9 0.0179277 1:2:1:1:5 0.826789 1:2:1:1:6 4.97244 1:2:1:1:8 3.54606e-09 1:2:1:1:7 4.83208 1:2:1:1:10 4.18989 1:2:1:7 3.52783 1:2:1:2:9 0.0363158 1:2:1:2:5 0.844836 1:2:1:2:6 4.99412 1:2:1:2:8 3.6676e-09 1:2:1:2:7 4.96417 1:2:1:2:10 4.25288 1:2:1:8 3.63077 1:2:1:3:9 0.0363158 1:2:1:3:5 0.844836 1:2:1:3:6 4.99412 1:2:1:3:8 3.6676e-09 1:2:1:3:7 4.96417 1:2:1:3:10 4.25288 1:2:1:9 3.63077 1:2:1:4:9 1.9967 1:2:1:4:5 2.76585 1:2:1:4:6 1.10936 1:2:1:4:8 1.07163 1:2:1:4:7 4.99984 1:2:1:4:10 0.508909 1:2:1:10 0.0272212 1:2:1:5:9 0.0451489 1:2:1:5:5 0.85351 1:2:1:5:6 4.97258 1:2:1:5:8 3.57407e-09 1:2:1:5:7 4.83293 1:2:1:5:10 4.19017 1:2:1:11 3.52824 1:2:1:6:9 0.063536 1:2:1:6:5 0.871555 1:2:1:6:6 4.9941 1:2:1:6:8 3.69541e-09 1:2:1:6:7 4.96406 1:2:1:6:10 4.25278 1:2:1:12 3.63059 1:2:1:7:9 0.063536 1:2:1:7:5 0.871555 1:2:1:7:6 4.9941 1:2:1:7:8 3.69541e-09 1:2:1:7:7 4.96406 1:2:1:7:10 4.25278 1:2:1:13 3.63059 1:2:1:8:9 1.98972 1:2:1:8:5 2.75903 1:2:1:8:6 1.10196 1:2:1:8:8 1.06424 1:2:1:8:7 4.99984 1:2:1:8:10 0.500516 11 0.0178393 1:2:1:9:9 1.9967 1:2:1:9:5 2.76585 1:2:1:9:6 1.10936 1:2:1:9:8 1.07163 1:2:1:9:7 4.99984 1:2:1:9:10 0.508909 1:2:10 0.0272212 1:2:2:1:9 0.0179277 1:2:2:1:5 0.826789 1:2:2:1:6 4.97243 1:2:2:1:8 3.54601e-09 1:2:2:1:7 4.83197 1:2:2:1:10 4.18986 1:2:2:7 3.52778 1:2:2:2:9 0.0363158 1:2:2:2:5 0.844836 1:2:2:2:6 4.99412 1:2:2:2:8 3.6676e-09 1:2:2:2:7 4.96417 1:2:2:2:10 4.25288 1:2:2:8 3.63077 1:2:2:3:9 0.0363158 1:2:2:3:5 0.844836 1:2:2:3:6 4.99412 1:2:2:3:8 3.6676e-09 1:2:2:3:7 4.96417 1:2:2:3:10 4.25288 1:2:2:9 3.63077 1:2:2:4:9 1.9967 1:2:2:4:5 2.76585 1:2:2:4:6 1.10936 1:2:2:4:8 1.07163 1:2:2:4:7 4.99984 1:2:2:4:10 0.508909 1:2:2:10 0.0272212 1:2:2:5:9 0.0451489 1:2:2:5:5 0.85351 1:2:2:5:6 4.97257 1:2:2:5:8 3.57402e-09 1:2:2:5:7 4.83282 1:2:2:5:10 4.19014 1:2:2:11 3.52819 1:2:2:6:9 0.063536 1:2:2:6:5 0.871555 1:2:2:6:6 4.9941 1:2:2:6:8 3.69541e-09 1:2:2:6:7 4.96406 1:2:2:6:10 4.25278 1:2:2:12 3.63059 1:2:2:7:9 0.063536 1:2:2:7:5 0.871555 1:2:2:7:6 4.9941 1:2:2:7:8 3.69541e-09 1:2:2:7:7 4.96406 1:2:2:7:10 4.25278 1:2:2:13 3.63059 1:2:2:8:9 1.98972 1:2:2:8:5 2.75903 1:2:2:8:6 1.10196 1:2:2:8:8 1.06424 1:2:2:8:7 4.99984 1:2:2:8:10 0.500516 12 0.0178393 1:2:2:9:9 1.98972 1:2:2:9:5 2.75903 1:2:2:9:6 1.10196 1:2:2:9:8 1.06424 1:2:2:9:7 4.99984 1:2:2:9:10 0.500516 13 0.0178393 vin4b#branch 0.00207527 vin4a#branch 0.00207527 vin3b#branch 0.00207527 vin3a#branch 0.00207527 vin2b#branch 0.00207527 vin2a#branch 0.00207527 vin1b#branch 0.00207527 vin1a#branch 0.00207527 vcc#branch -0.0757537 No. of Data Rows : 60 4 bit adder -------------------------------------------------------------------------------- Index time v(1) -------------------------------------------------------------------------------- 0 0.000000e+00 0.000000e+00 1 3.000000e-13 9.000000e-05 2 6.000000e-13 1.800000e-04 3 1.200000e-12 3.600000e-04 4 2.400000e-12 7.200000e-04 5 4.800000e-12 1.440000e-03 6 9.600000e-12 2.880000e-03 7 1.920000e-11 5.760000e-03 8 3.840000e-11 1.152000e-02 9 7.680000e-11 2.304000e-02 10 1.536000e-10 4.608000e-02 11 2.577473e-10 7.732420e-02 12 3.777473e-10 1.133242e-01 13 4.977473e-10 1.493242e-01 14 6.177473e-10 1.853242e-01 15 7.377473e-10 2.213242e-01 16 8.577473e-10 2.573242e-01 17 9.777473e-10 2.933242e-01 18 1.097747e-09 3.293242e-01 19 1.217747e-09 3.653242e-01 20 1.337747e-09 4.013242e-01 21 1.457747e-09 4.373242e-01 22 1.577747e-09 4.733242e-01 23 1.697747e-09 5.093242e-01 24 1.817747e-09 5.453242e-01 25 1.937747e-09 5.813242e-01 26 2.057747e-09 6.173242e-01 27 2.177747e-09 6.533242e-01 28 2.297747e-09 6.893242e-01 29 2.417747e-09 7.253242e-01 30 2.537747e-09 7.613242e-01 31 2.657747e-09 7.973242e-01 32 2.777747e-09 8.333242e-01 33 2.897747e-09 8.693242e-01 34 3.017747e-09 9.053242e-01 35 3.137747e-09 9.413242e-01 36 3.257747e-09 9.773242e-01 37 3.377747e-09 1.013324e+00 38 3.497747e-09 1.049324e+00 39 3.617747e-09 1.085324e+00 40 3.737747e-09 1.121324e+00 41 3.857747e-09 1.157324e+00 42 3.977747e-09 1.193324e+00 43 4.097747e-09 1.229324e+00 44 4.217747e-09 1.265324e+00 45 4.337747e-09 1.301324e+00 46 4.457747e-09 1.337324e+00 47 4.577747e-09 1.373324e+00 48 4.697747e-09 1.409324e+00 49 4.817747e-09 1.445324e+00 50 4.937747e-09 1.481324e+00 51 5.057747e-09 1.517324e+00 52 5.177747e-09 1.553324e+00 53 5.297747e-09 1.589324e+00 54 5.417747e-09 1.625324e+00 Index time v(1) -------------------------------------------------------------------------------- 55 5.537747e-09 1.661324e+00 56 5.657747e-09 1.697324e+00 57 5.777747e-09 1.733324e+00 58 5.897747e-09 1.769324e+00 59 6.000000e-09 1.800000e+00 tmpk8ny_4pz/tests/hisim/0000755000175000017500000000000013546075722015433 5ustar carstencarstentmpk8ny_4pz/tests/hisim/Makefile.am0000644000175000017500000000050713546075722017471 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = nmos/qaSpec pmos/qaSpec TESTS_ENVIRONMENT = \ $(SHELL) $(top_srcdir)/tests/bin/check_cmc.sh \ $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ nmos pmos MAINTAINERCLEANFILES = Makefile.in clean-local: rm -rf nmos/results pmos/results ngspiceCkt tmpk8ny_4pz/tests/hisim/nmos/0000755000175000017500000000000013546075722016407 5ustar carstencarstentmpk8ny_4pz/tests/hisim/nmos/parameters/0000755000175000017500000000000013546075722020552 5ustar carstencarstentmpk8ny_4pz/tests/hisim/nmos/parameters/nmosParameters0000644000175000017500000000700713546075722023501 0ustar carstencarsten+ CORSRD = ( 0 ) + CORG = ( 0 ) + COADOV = ( 1 ) + COISUB = ( 0 ) + COIIGS = ( 0 ) + COGIDL = ( 0 ) + COOVLP = ( 1 ) + COFLICK = ( 0 ) + COISTI = ( 0 ) + CONQS = ( 0 ) + COTHRML = ( 0 ) + COIGN = ( 0 ) + CODFM = ( 0 ) + CORBNET = ( 0 ) + COQY = ( 0 ) + CORECIP = ( 1 ) + VMAX = ( 3.57E+06 ) + BGTMP1 = ( 9.0E-05 ) + BGTMP2 = ( -1.27E-07 ) + EG0 = ( 1.041 ) + TOX = ( 1.6E-09 ) + XLD = ( 1.0E-08 ) + LOVER = ( 1.9E-08 ) + DDLTMAX = ( 10 ) + DDLTSLP = ( 2.7 ) + DDLTICT = ( 1.28 ) + VFBOVER = ( 0.0 ) + NOVER = ( 4.5E+19 ) + XWD = ( 0 ) + XL = ( 0 ) + XW = ( 2e-9 ) + SAREF = ( 0 ) + SBREF = ( 0 ) + LL = ( 0 ) + LLD = ( 0 ) + LLN = ( 0 ) + WL = ( 0 ) + WL1 = ( -7E-09 ) + WL1P = ( 0 ) + WL2 = ( 0.0006 ) + WL2P = ( 0.8 ) + WLD = ( 0 ) + WLN = ( 0 ) + RSH = ( 0 ) + RSHG = ( 0 ) + XQY = ( 1E-08 ) + XQY1 = ( 0 ) + XQY2 = ( 0 ) + RS = ( 0 ) + RD = ( 0 ) + VFBC = ( -0.9 ) + VBI = ( 1.1 ) + NSUBC = ( 1.85E+17 ) + PARL2 = ( 1.88E-08 ) + LP = ( 9E-08 ) + NSUBP = ( 2.2E+18 ) + NSUBPW = ( 0 ) + NSUBPWP = ( 1 ) + SCP1 = ( 2.35E-05 ) + SCP2 = ( 0 ) + SCP3 = ( 0 ) + SC1 = ( 5.4 ) + SC2 = ( 0 ) + SC3 = ( 4.36E-10 ) + PGD1 = ( 0 ) + PGD2 = ( 1 ) + PGD4 = ( 0.4 ) + BB = ( 2 ) + NDEP = ( 0.5 ) + NDEPL = ( 0.3 ) + NDEPLP = ( 0.52 ) + NINV = ( 0.5 ) + MUECB0 = ( 2130 ) + MUECB1 = ( 11.4 ) + MUEPH0 = ( 0.3 ) + MUEPH1 = ( 3.0E+04 ) + MUEPHW = ( -0.36 ) + MUEPWP = ( 0.1 ) + MUEPHL = ( -0.08 ) + MUEPLP = ( 0.7 ) + MUEPHS = ( 0.08 ) + MUEPSP = ( 0.31 ) + VTMP = ( -0.7 ) + WVTH0 = ( 0 ) + MUESR0 = ( 2 ) + MUESR1 = ( 7.4E+14 ) + MUESRL = ( 0.00065 ) + MUESRW = ( 0 ) + MUESWP = ( 0.1 ) + MUESLP = ( 1.4 ) + MUETMP = ( 1.7 ) + SUB1 = ( 0 ) + SUB2 = ( 0 ) + SVGS = ( 0 ) + SVBS = ( 0 ) + SVBSL = ( 0 ) + SVDS = ( 0 ) + SLG = ( 0 ) + SUB1L = ( 0 ) + SUB2L = ( 0 ) + SVGSL = ( 0 ) + SVGSLP = ( 0 ) + SVGSWP = ( 0 ) + SVGSW = ( 0 ) + SVBSLP = ( 0 ) + SLGL = ( 0 ) + SLGLP = ( 0 ) + SUB1LP = ( 0 ) + NSTI = ( 1E+17 ) + WSTI = ( 0 ) + WSTIL = ( 0 ) + WSTILP = ( 0 ) + WSTIW = ( 0 ) + WSTIWP = ( 0 ) + SCSTI1 = ( 0 ) + SCSTI2 = ( 0 ) + VTHSTI = ( 0 ) + VDSTI = ( 0 ) + MUESTI1 = ( 0 ) + MUESTI2 = ( 0 ) + MUESTI3 = ( 1 ) + NSUBPSTI1 = ( 0 ) + NSUBPSTI2 = ( 0 ) + NSUBPSTI3 = ( 1 ) + LPEXT = ( 1E-05 ) + NPEXT = ( 6.27E+17 ) + SCP21 = ( 0.178 ) + SCP22 = ( 0 ) + BS1 = ( 0.032 ) + BS2 = ( 0.9 ) + TPOLY = ( 0 ) + CGBO = ( 0 ) + CLM1 = ( 1.0 ) + CLM2 = ( 1.4 ) + CLM3 = ( 0.78 ) + CLM5 = ( 1 ) + CLM6 = ( 2.56 ) + VOVER = ( 0.8 ) + VOVERP = ( 0.5 ) + WFC = ( 6E-14 ) + QME1 = ( 1E-12 ) + QME2 = ( 2.0 ) + QME3 = ( 0 ) + VOVERS = ( 0.0005 ) + VOVERSP = ( 1 ) + GIDL1 = ( 1.65 ) + GIDL2 = ( 4.9E+07 ) + GIDL3 = ( 1 ) + GIDL4 = ( 0.85 ) + GIDL5 = ( 0 ) + GLEAK1 = ( 5.3E+06 ) + GLEAK2 = ( 5.2E+07 ) + GLEAK3 = ( 0.05 ) + GLEAK4 = ( 0.3 ) + GLEAK5 = ( 5E+05 ) + GLEAK6 = ( 0.925 ) + GLEAK7 = ( 1.5E-06 ) + GLKSD1 = ( 2.5E-14 ) + GLKSD2 = ( 8.3E+06 ) + GLKSD3 = ( 0.55 ) + GLKB1 = ( 0 ) + GLKB2 = ( 0 ) + GLKB3 = ( 0 ) + EGIG = ( 0 ) + IGTEMP2 = ( 32 ) + IGTEMP3 = ( 0 ) + VZADD0 = ( 0.1 ) + PZADD0 = ( 0.1 ) + NFTRP = ( 0 ) + NFALP = ( 0 ) + CIT = ( 0 ) + KAPPA = ( 3.9 ) + CGSO = ( 0 ) + CGDO = ( 0 ) + TNOM = ( 27 ) + OVSLP = ( 3E-08 ) + OVMAG = ( 5 ) + IBPC1 = ( 0 ) + IBPC2 = ( 0 ) + DLY1 = ( 1E-08 ) + DLY2 = ( 0.1 ) + DLY3 = ( 1E-07 ) + NSUBPL = ( 0.3 ) + NSUBPFAC = ( 1.0 ) + QYRAT = ( 0.5 ) + GDL = ( 0.01067 ) + GDLP = ( 0.2198 ) + PTL = ( 0.3614 ) + PTLP = ( 1 ) + PT4 = ( 10 ) + PT4P = ( 0 ) + GDLD = ( 0 ) + MUEPHL2 = ( -0.014 ) + MUEPLP2 = ( 1.1 ) + NSUBCW = ( -0.11 ) + NSUBCWP = ( 1 ) + NSUBCMAX = ( 5E+18 ) + NSUBCW2 = ( 0 ) + NSUBCWP2 = ( 1 ) + MUEPHW2 = ( 0 ) + MUEPWP2 = ( 1 ) + SC3VBS = ( -2.5 ) tmpk8ny_4pz/tests/hisim/nmos/reference/0000755000175000017500000000000013546075722020345 5ustar carstencarstentmpk8ny_4pz/tests/hisim/nmos/reference/7_dcSweep_COISUB=1.standard0000644000175000017500000003372713546075722025145 0ustar carstencarstenV(d) I(d) I(b) 2.000000e-01 2.453631e-06 -1.422291e-06 3.000000e-01 2.895711e-06 -1.708043e-06 4.000000e-01 3.437961e-06 -2.074550e-06 5.000000e-01 4.068699e-06 -2.514889e-06 6.000000e-01 4.774839e-06 -3.020813e-06 7.000000e-01 5.548485e-06 -3.587280e-06 8.000000e-01 6.385959e-06 -4.212054e-06 9.000000e-01 7.285974e-06 -4.894564e-06 1.000000e+00 8.248454e-06 -5.635104e-06 1.100000e+00 9.273911e-06 -6.434395e-06 1.200000e+00 1.036314e-05 -7.293371e-06 1.300000e+00 1.151709e-05 -8.213064e-06 1.400000e+00 1.273676e-05 -9.194557e-06 1.500000e+00 1.402320e-05 -1.023895e-05 1.600000e+00 1.537747e-05 -1.134737e-05 1.700000e+00 1.680063e-05 -1.252091e-05 1.800000e+00 1.829377e-05 -1.376070e-05 2.000000e-01 9.122161e-04 -5.496672e-04 3.000000e-01 9.852911e-04 -6.016477e-04 4.000000e-01 1.067933e-03 -6.645383e-04 5.000000e-01 1.159590e-03 -7.366885e-04 6.000000e-01 1.258353e-03 -8.159772e-04 7.000000e-01 1.362844e-03 -9.010039e-04 8.000000e-01 1.472347e-03 -9.910422e-04 9.000000e-01 1.586546e-03 -1.085762e-03 1.000000e+00 1.705326e-03 -1.185030e-03 1.100000e+00 1.828668e-03 -1.288811e-03 1.200000e+00 1.956592e-03 -1.397110e-03 1.300000e+00 2.089135e-03 -1.509953e-03 1.400000e+00 2.226344e-03 -1.627378e-03 1.500000e+00 2.368266e-03 -1.749425e-03 1.600000e+00 2.514947e-03 -1.876135e-03 1.700000e+00 2.666437e-03 -2.007552e-03 1.800000e+00 2.822778e-03 -2.143717e-03 2.000000e-01 4.777910e-03 -2.931055e-03 3.000000e-01 5.204317e-03 -3.230058e-03 4.000000e-01 5.482936e-03 -3.451336e-03 5.000000e-01 5.795521e-03 -3.712850e-03 6.000000e-01 6.134244e-03 -4.003880e-03 7.000000e-01 6.490001e-03 -4.314263e-03 8.000000e-01 6.857457e-03 -4.637992e-03 9.000000e-01 7.234000e-03 -4.972018e-03 1.000000e+00 7.618523e-03 -5.314936e-03 1.100000e+00 8.010621e-03 -5.666134e-03 1.200000e+00 8.410190e-03 -6.025360e-03 1.300000e+00 8.817248e-03 -6.392520e-03 1.400000e+00 9.231851e-03 -6.767590e-03 1.500000e+00 9.654067e-03 -7.150575e-03 1.600000e+00 1.008396e-02 -7.541491e-03 1.700000e+00 1.052160e-02 -7.940358e-03 1.800000e+00 1.096702e-02 -8.347196e-03 2.000000e-01 8.731829e-03 -5.388253e-03 3.000000e-01 1.023076e-02 -6.412957e-03 4.000000e-01 1.108025e-02 -7.062512e-03 5.000000e-01 1.162000e-02 -7.515466e-03 6.000000e-01 1.214176e-02 -7.973190e-03 7.000000e-01 1.271554e-02 -8.487183e-03 8.000000e-01 1.332318e-02 -9.038315e-03 9.000000e-01 1.395111e-02 -9.612406e-03 1.000000e+00 1.459200e-02 -1.020158e-02 1.100000e+00 1.524251e-02 -1.080204e-02 1.200000e+00 1.590132e-02 -1.141211e-02 1.300000e+00 1.656801e-02 -1.203112e-02 1.400000e+00 1.724250e-02 -1.265878e-02 1.500000e+00 1.792488e-02 -1.329503e-02 1.600000e+00 1.861525e-02 -1.393985e-02 1.700000e+00 1.931371e-02 -1.459326e-02 1.800000e+00 2.002037e-02 -1.525529e-02 2.000000e-01 1.201135e-02 -7.435606e-03 3.000000e-01 1.465957e-02 -9.222980e-03 4.000000e-01 1.636861e-02 -1.048527e-02 5.000000e-01 1.759522e-02 -1.147257e-02 6.000000e-01 1.852764e-02 -1.227571e-02 7.000000e-01 1.927204e-02 -1.294337e-02 8.000000e-01 2.003773e-02 -1.364489e-02 9.000000e-01 2.086733e-02 -1.441338e-02 1.000000e+00 2.173688e-02 -1.522435e-02 1.100000e+00 2.262957e-02 -1.606073e-02 1.200000e+00 2.353657e-02 -1.691335e-02 1.300000e+00 2.445381e-02 -1.777785e-02 1.400000e+00 2.537967e-02 -1.865230e-02 1.500000e+00 2.631355e-02 -1.953589e-02 1.600000e+00 2.725532e-02 -2.042832e-02 1.700000e+00 2.820504e-02 -2.132948e-02 1.800000e+00 2.916281e-02 -2.223935e-02 2.000000e-01 1.549010e-02 -9.619860e-03 3.000000e-01 1.997166e-02 -1.260714e-02 4.000000e-01 2.310429e-02 -1.485342e-02 5.000000e-01 2.546140e-02 -1.667020e-02 6.000000e-01 2.735395e-02 -1.822102e-02 7.000000e-01 2.894545e-02 -1.959044e-02 8.000000e-01 3.032875e-02 -2.082615e-02 9.000000e-01 3.155265e-02 -2.194864e-02 1.000000e+00 3.265049e-02 -2.297384e-02 1.100000e+00 3.379004e-02 -2.405022e-02 1.200000e+00 3.500407e-02 -2.520328e-02 1.300000e+00 3.626276e-02 -2.640280e-02 1.400000e+00 3.754683e-02 -2.762940e-02 1.500000e+00 3.884652e-02 -2.887317e-02 1.600000e+00 4.015732e-02 -3.012943e-02 1.700000e+00 4.147729e-02 -3.139607e-02 1.800000e+00 4.280562e-02 -3.267213e-02 2.000000e-01 1.733542e-02 -1.079080e-02 3.000000e-01 2.349534e-02 -1.486591e-02 4.000000e-01 2.818936e-02 -1.816521e-02 5.000000e-01 3.186126e-02 -2.091117e-02 6.000000e-01 3.484876e-02 -2.327343e-02 7.000000e-01 3.737398e-02 -2.536601e-02 8.000000e-01 3.957785e-02 -2.726348e-02 9.000000e-01 4.155136e-02 -2.901577e-02 1.000000e+00 4.335732e-02 -3.065894e-02 1.100000e+00 4.504172e-02 -3.222039e-02 1.200000e+00 4.663138e-02 -3.371442e-02 1.300000e+00 4.813490e-02 -3.514356e-02 1.400000e+00 4.966284e-02 -3.660806e-02 1.500000e+00 5.126444e-02 -3.814854e-02 1.600000e+00 5.291101e-02 -3.973546e-02 1.700000e+00 5.458317e-02 -4.134935e-02 1.800000e+00 5.627136e-02 -4.298054e-02 2.000000e-01 1.467933e-05 -8.510893e-06 3.000000e-01 1.705259e-05 -1.006007e-05 4.000000e-01 1.992123e-05 -1.202239e-05 5.000000e-01 2.323830e-05 -1.436515e-05 6.000000e-01 2.693708e-05 -1.704325e-05 7.000000e-01 3.097653e-05 -2.002885e-05 8.000000e-01 3.533745e-05 -2.330946e-05 9.000000e-01 4.001312e-05 -2.688161e-05 1.000000e+00 4.500312e-05 -3.074653e-05 1.100000e+00 5.031006e-05 -3.490775e-05 1.200000e+00 5.593805e-05 -3.936992e-05 1.300000e+00 6.189189e-05 -4.413825e-05 1.400000e+00 6.817675e-05 -4.921820e-05 1.500000e+00 7.479799e-05 -5.461535e-05 1.600000e+00 8.176102e-05 -6.033536e-05 1.700000e+00 8.907133e-05 -6.638387e-05 1.800000e+00 9.673440e-05 -7.276653e-05 2.000000e-01 8.321304e-04 -5.006804e-04 3.000000e-01 9.007884e-04 -5.491441e-04 4.000000e-01 9.748415e-04 -6.055807e-04 5.000000e-01 1.056104e-03 -6.698420e-04 6.000000e-01 1.143194e-03 -7.401631e-04 7.000000e-01 1.235005e-03 -8.153279e-04 8.000000e-01 1.330955e-03 -8.947015e-04 9.000000e-01 1.430794e-03 -9.779970e-04 1.000000e+00 1.534441e-03 -1.065103e-03 1.100000e+00 1.641890e-03 -1.155991e-03 1.200000e+00 1.753170e-03 -1.250671e-03 1.300000e+00 1.868323e-03 -1.349171e-03 1.400000e+00 1.987394e-03 -1.451525e-03 1.500000e+00 2.110432e-03 -1.557774e-03 1.600000e+00 2.237485e-03 -1.667957e-03 1.700000e+00 2.368598e-03 -1.782115e-03 1.800000e+00 2.503817e-03 -1.900289e-03 2.000000e-01 3.652371e-03 -2.238112e-03 3.000000e-01 4.130466e-03 -2.562488e-03 4.000000e-01 4.395449e-03 -2.766463e-03 5.000000e-01 4.668258e-03 -2.990212e-03 6.000000e-01 4.959447e-03 -3.236522e-03 7.000000e-01 5.262990e-03 -3.498002e-03 8.000000e-01 5.575240e-03 -3.770160e-03 9.000000e-01 5.894532e-03 -4.050768e-03 1.000000e+00 6.220262e-03 -4.338849e-03 1.100000e+00 6.552301e-03 -4.634016e-03 1.200000e+00 6.890700e-03 -4.936141e-03 1.300000e+00 7.235567e-03 -5.245204e-03 1.400000e+00 7.587022e-03 -5.561228e-03 1.500000e+00 7.945173e-03 -5.884250e-03 1.600000e+00 8.310116e-03 -6.214310e-03 1.700000e+00 8.681934e-03 -6.551447e-03 1.800000e+00 9.060700e-03 -6.895698e-03 2.000000e-01 6.643785e-03 -4.101071e-03 3.000000e-01 8.207974e-03 -5.144754e-03 4.000000e-01 9.127398e-03 -5.816542e-03 5.000000e-01 9.691780e-03 -6.271384e-03 6.000000e-01 1.018351e-02 -6.691608e-03 7.000000e-01 1.070829e-02 -7.151956e-03 8.000000e-01 1.125910e-02 -7.642651e-03 9.000000e-01 1.182524e-02 -8.152236e-03 1.000000e+00 1.240111e-02 -8.674388e-03 1.100000e+00 1.298437e-02 -9.206181e-03 1.200000e+00 1.357431e-02 -9.746421e-03 1.300000e+00 1.417086e-02 -1.029469e-02 1.400000e+00 1.477422e-02 -1.085089e-02 1.500000e+00 1.538461e-02 -1.141504e-02 1.600000e+00 1.600225e-02 -1.198721e-02 1.700000e+00 1.662735e-02 -1.256748e-02 1.800000e+00 1.726006e-02 -1.315591e-02 2.000000e-01 9.172915e-03 -5.686284e-03 3.000000e-01 1.185280e-02 -7.464791e-03 4.000000e-01 1.371895e-02 -8.794085e-03 5.000000e-01 1.504888e-02 -9.816349e-03 6.000000e-01 1.601416e-02 -1.061446e-02 7.000000e-01 1.676754e-02 -1.127188e-02 8.000000e-01 1.750007e-02 -1.192937e-02 9.000000e-01 1.827941e-02 -1.263889e-02 1.000000e+00 1.909114e-02 -1.338442e-02 1.100000e+00 1.992134e-02 -1.415166e-02 1.200000e+00 2.076277e-02 -1.493294e-02 1.300000e+00 2.161230e-02 -1.572470e-02 1.400000e+00 2.246884e-02 -1.652543e-02 1.500000e+00 2.333214e-02 -1.733457e-02 1.600000e+00 2.420231e-02 -1.815197e-02 1.700000e+00 2.507959e-02 -1.897763e-02 1.800000e+00 2.596423e-02 -1.981163e-02 2.000000e-01 1.198522e-02 -7.461766e-03 3.000000e-01 1.622686e-02 -1.026526e-02 4.000000e-01 1.949668e-02 -1.255690e-02 5.000000e-01 2.206377e-02 -1.446749e-02 6.000000e-01 2.412756e-02 -1.609181e-02 7.000000e-01 2.582158e-02 -1.749399e-02 8.000000e-01 2.724092e-02 -1.872191e-02 9.000000e-01 2.846119e-02 -1.981578e-02 1.000000e+00 2.956006e-02 -2.082494e-02 1.100000e+00 3.066626e-02 -2.185540e-02 1.200000e+00 3.182865e-02 -2.294620e-02 1.300000e+00 3.302843e-02 -2.407715e-02 1.400000e+00 3.424957e-02 -2.523197e-02 1.500000e+00 3.548382e-02 -2.640224e-02 1.600000e+00 3.672748e-02 -2.758399e-02 1.700000e+00 3.797899e-02 -2.877543e-02 1.800000e+00 3.923782e-02 -2.997579e-02 2.000000e-01 1.370734e-02 -8.560675e-03 3.000000e-01 1.924364e-02 -1.221178e-02 4.000000e-01 2.384579e-02 -1.540615e-02 5.000000e-01 2.766104e-02 -1.819567e-02 6.000000e-01 3.085604e-02 -2.064769e-02 7.000000e-01 3.357427e-02 -2.282650e-02 8.000000e-01 3.592624e-02 -2.478562e-02 9.000000e-01 3.799474e-02 -2.656790e-02 1.000000e+00 3.984484e-02 -2.820945e-02 1.100000e+00 4.153126e-02 -2.974284e-02 1.200000e+00 4.309973e-02 -3.119656e-02 1.300000e+00 4.459321e-02 -3.260046e-02 1.400000e+00 4.608992e-02 -3.402086e-02 1.500000e+00 4.763791e-02 -3.549704e-02 1.600000e+00 4.922332e-02 -3.701298e-02 1.700000e+00 5.083079e-02 -3.855302e-02 1.800000e+00 5.245234e-02 -4.010902e-02 2.000000e-01 6.551899e-05 -3.794651e-05 3.000000e-01 7.519873e-05 -4.430930e-05 4.000000e-01 8.641130e-05 -5.208516e-05 5.000000e-01 9.924773e-05 -6.128039e-05 6.000000e-01 1.134804e-04 -7.172258e-05 7.000000e-01 1.289545e-04 -8.329757e-05 8.000000e-01 1.455960e-04 -9.595243e-05 9.000000e-01 1.633787e-04 -1.096708e-04 1.000000e+00 1.823003e-04 -1.244552e-04 1.100000e+00 2.023700e-04 -1.403174e-04 1.200000e+00 2.236028e-04 -1.572737e-04 1.300000e+00 2.460160e-04 -1.753424e-04 1.400000e+00 2.696283e-04 -1.945430e-04 1.500000e+00 2.944593e-04 -2.148955e-04 1.600000e+00 3.205285e-04 -2.364201e-04 1.700000e+00 3.478558e-04 -2.591370e-04 1.800000e+00 3.764610e-04 -2.830665e-04 2.000000e-01 8.075969e-04 -4.841990e-04 3.000000e-01 8.892995e-04 -5.401244e-04 4.000000e-01 9.627663e-04 -5.957858e-04 5.000000e-01 1.041193e-03 -6.579298e-04 6.000000e-01 1.124553e-03 -7.255586e-04 7.000000e-01 1.212012e-03 -7.975753e-04 8.000000e-01 1.303083e-03 -8.733759e-04 9.000000e-01 1.397564e-03 -9.526864e-04 1.000000e+00 1.495397e-03 -1.035403e-03 1.100000e+00 1.596592e-03 -1.121499e-03 1.200000e+00 1.701186e-03 -1.210988e-03 1.300000e+00 1.809224e-03 -1.303897e-03 1.400000e+00 1.920758e-03 -1.400260e-03 1.500000e+00 2.035835e-03 -1.500115e-03 1.600000e+00 2.154503e-03 -1.603502e-03 1.700000e+00 2.276810e-03 -1.710459e-03 1.800000e+00 2.402799e-03 -1.821026e-03 2.000000e-01 2.585531e-03 -1.578743e-03 3.000000e-01 3.085894e-03 -1.909337e-03 4.000000e-01 3.352061e-03 -2.105671e-03 5.000000e-01 3.579646e-03 -2.288398e-03 6.000000e-01 3.815105e-03 -2.484869e-03 7.000000e-01 4.058858e-03 -2.692674e-03 8.000000e-01 4.308629e-03 -2.908582e-03 9.000000e-01 4.563352e-03 -3.130931e-03 1.000000e+00 4.822753e-03 -3.359037e-03 1.100000e+00 5.086890e-03 -3.592675e-03 1.200000e+00 5.355926e-03 -3.831810e-03 1.300000e+00 5.630038e-03 -4.076480e-03 1.400000e+00 5.909388e-03 -4.326743e-03 1.500000e+00 6.194115e-03 -4.582663e-03 1.600000e+00 6.484336e-03 -4.844299e-03 1.700000e+00 6.780152e-03 -5.111705e-03 1.800000e+00 7.081648e-03 -5.384930e-03 2.000000e-01 4.481734e-03 -2.761132e-03 3.000000e-01 5.826311e-03 -3.644099e-03 4.000000e-01 6.711104e-03 -4.268102e-03 5.000000e-01 7.277308e-03 -4.703683e-03 6.000000e-01 7.714654e-03 -5.065747e-03 7.000000e-01 8.148877e-03 -5.438755e-03 8.000000e-01 8.599913e-03 -5.833591e-03 9.000000e-01 9.062306e-03 -6.243397e-03 1.000000e+00 9.531795e-03 -6.663256e-03 1.100000e+00 1.000664e-02 -7.090855e-03 1.200000e+00 1.048644e-02 -7.525308e-03 1.300000e+00 1.097132e-02 -7.966369e-03 1.400000e+00 1.146161e-02 -8.414048e-03 1.500000e+00 1.195761e-02 -8.868446e-03 1.600000e+00 1.245965e-02 -9.329683e-03 1.700000e+00 1.296797e-02 -9.797875e-03 1.800000e+00 1.348277e-02 -1.027312e-02 2.000000e-01 6.162936e-03 -3.818385e-03 3.000000e-01 8.367425e-03 -5.265500e-03 4.000000e-01 1.006911e-02 -6.447925e-03 5.000000e-01 1.134870e-02 -7.394517e-03 6.000000e-01 1.229098e-02 -8.139326e-03 7.000000e-01 1.301343e-02 -8.746339e-03 8.000000e-01 1.366212e-02 -9.313738e-03 9.000000e-01 1.432570e-02 -9.905889e-03 1.000000e+00 1.501240e-02 -1.052552e-02 1.100000e+00 1.571359e-02 -1.116315e-02 1.200000e+00 1.642358e-02 -1.181267e-02 1.300000e+00 1.713986e-02 -1.247116e-02 1.400000e+00 1.786162e-02 -1.313741e-02 1.500000e+00 1.858878e-02 -1.381101e-02 1.600000e+00 1.932160e-02 -1.449188e-02 1.700000e+00 2.006039e-02 -1.518011e-02 1.800000e+00 2.080549e-02 -1.587581e-02 2.000000e-01 8.186538e-03 -5.102136e-03 3.000000e-01 1.154337e-02 -7.307932e-03 4.000000e-01 1.440416e-02 -9.281484e-03 5.000000e-01 1.681262e-02 -1.102696e-02 6.000000e-01 1.882223e-02 -1.255428e-02 7.000000e-01 2.048802e-02 -1.387988e-02 8.000000e-01 2.186939e-02 -1.502928e-02 9.000000e-01 2.303618e-02 -1.604057e-02 1.000000e+00 2.407193e-02 -1.696749e-02 1.100000e+00 2.507354e-02 -1.788201e-02 1.200000e+00 2.610003e-02 -1.882928e-02 1.300000e+00 2.715378e-02 -1.980762e-02 1.400000e+00 2.822496e-02 -2.080643e-02 1.500000e+00 2.930721e-02 -2.181909e-02 1.600000e+00 3.039746e-02 -2.284228e-02 1.700000e+00 3.149441e-02 -2.387448e-02 1.800000e+00 3.259764e-02 -2.491501e-02 2.000000e-01 9.633365e-03 -6.029800e-03 3.000000e-01 1.392460e-02 -8.853225e-03 4.000000e-01 1.779925e-02 -1.151792e-02 5.000000e-01 2.124542e-02 -1.399370e-02 6.000000e-01 2.428096e-02 -1.626524e-02 7.000000e-01 2.694293e-02 -1.833395e-02 8.000000e-01 2.927551e-02 -2.021184e-02 9.000000e-01 3.132394e-02 -2.191687e-02 1.000000e+00 3.313465e-02 -2.347203e-02 1.100000e+00 3.475692e-02 -2.490574e-02 1.200000e+00 3.624255e-02 -2.625105e-02 1.300000e+00 3.764621e-02 -2.754610e-02 1.400000e+00 3.902725e-02 -2.883622e-02 1.500000e+00 4.042807e-02 -3.015411e-02 1.600000e+00 4.185425e-02 -3.150119e-02 1.700000e+00 4.329839e-02 -3.286894e-02 1.800000e+00 4.475487e-02 -3.425143e-02 tmpk8ny_4pz/tests/hisim/nmos/reference/69_acFreq_CODFM=0.standard0000644000175000017500000002533013546075722024676 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258.925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584.893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995.262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511.886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162.278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981.072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011.872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309.573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943.282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589.25 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848.93 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952.62 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118.86 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622.78 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810.72 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118.72 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095.73 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432.82 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 125892.5 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 158489.3 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 199526.2 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 251188.6 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 316227.8 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 398107.2 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 501187.2 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 630957.3 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 794328.2 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 1000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589250 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848930 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952620 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118860 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622780 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810720 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118720 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095730 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432820 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258.925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584.893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 1995.262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511.886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162.278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981.072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011.872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309.573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943.282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589.25 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848.93 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 19952.62 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118.86 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622.78 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810.72 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118.72 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095.73 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432.82 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 125892.5 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 158489.3 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 199526.2 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 251188.6 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 316227.8 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 398107.2 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 501187.2 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 630957.3 1.95109670680967e-14 1.51047556203098e-14 3.63962547928741e-15 794328.2 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 1000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 1995262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589250 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848930 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 19952620 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118860 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622780 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810720 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118720 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095730 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432820 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258.925 1.92253810991621e-14 1.48903692202894e-14 3.56434127432084e-15 1584.893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995.262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511.886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162.278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981.072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011.872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309.573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943.282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 12589.25 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848.93 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952.62 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118.86 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622.78 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810.72 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118.72 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095.73 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432.82 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 125892.5 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 158489.3 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 199526.2 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 251188.6 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 316227.8 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 398107.2 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 501187.2 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 630957.3 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 794328.2 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 1000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258925 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 1584893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000000 1.92253759986944e-14 1.4890367771438e-14 3.56434020406966e-15 12589250 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848930 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952620 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118860 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622780 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810720 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118720 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095730 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432820 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/22_dcSweep_CORBNET=1.standard0000644000175000017500000003372713546075722025332 0ustar carstencarstenV(d) I(d) I(b) 2.000000e-01 1.031340e-06 -2.000000e-16 3.000000e-01 1.187668e-06 -3.000000e-16 4.000000e-01 1.363411e-06 -4.000000e-16 5.000000e-01 1.553811e-06 -5.000000e-16 6.000000e-01 1.754026e-06 -6.000000e-16 7.000000e-01 1.961205e-06 -7.000000e-16 8.000000e-01 2.173905e-06 -8.000000e-16 9.000000e-01 2.391410e-06 -9.000000e-16 1.000000e+00 2.613350e-06 -1.000000e-15 1.100000e+00 2.839516e-06 -1.100000e-15 1.200000e+00 3.069773e-06 -1.200000e-15 1.300000e+00 3.304026e-06 -1.300000e-15 1.400000e+00 3.542204e-06 -1.400000e-15 1.500000e+00 3.784246e-06 -1.500000e-15 1.600000e+00 4.030100e-06 -1.600000e-15 1.700000e+00 4.279721e-06 -1.700000e-15 1.800000e+00 4.533070e-06 -1.800000e-15 2.000000e-01 3.625488e-04 -2.000000e-16 3.000000e-01 3.836434e-04 -3.000000e-16 4.000000e-01 4.033947e-04 -4.000000e-16 5.000000e-01 4.229012e-04 -5.000000e-16 6.000000e-01 4.423753e-04 -6.000000e-16 7.000000e-01 4.618402e-04 -7.000000e-16 8.000000e-01 4.813047e-04 -8.000000e-16 9.000000e-01 5.007840e-04 -9.000000e-16 1.000000e+00 5.202960e-04 -1.000000e-15 1.100000e+00 5.398574e-04 -1.100000e-15 1.200000e+00 5.594823e-04 -1.200000e-15 1.300000e+00 5.791821e-04 -1.300000e-15 1.400000e+00 5.989658e-04 -1.400000e-15 1.500000e+00 6.188407e-04 -1.500000e-15 1.600000e+00 6.388122e-04 -1.600000e-15 1.700000e+00 6.588847e-04 -1.700000e-15 1.800000e+00 6.790616e-04 -1.800000e-15 2.000000e-01 1.846855e-03 -2.000000e-16 3.000000e-01 1.974260e-03 -3.000000e-16 4.000000e-01 2.031600e-03 -4.000000e-16 5.000000e-01 2.082672e-03 -5.000000e-16 6.000000e-01 2.130364e-03 -6.000000e-16 7.000000e-01 2.175738e-03 -7.000000e-16 8.000000e-01 2.219464e-03 -8.000000e-16 9.000000e-01 2.261982e-03 -9.000000e-16 1.000000e+00 2.303587e-03 -1.000000e-15 1.100000e+00 2.344487e-03 -1.100000e-15 1.200000e+00 2.384830e-03 -1.200000e-15 1.300000e+00 2.424728e-03 -1.300000e-15 1.400000e+00 2.464261e-03 -1.400000e-15 1.500000e+00 2.503492e-03 -1.500000e-15 1.600000e+00 2.542472e-03 -1.600000e-15 1.700000e+00 2.581239e-03 -1.700000e-15 1.800000e+00 2.619826e-03 -1.800000e-15 2.000000e-01 3.343576e-03 -2.000000e-16 3.000000e-01 3.817799e-03 -3.000000e-16 4.000000e-01 4.017737e-03 -4.000000e-16 5.000000e-01 4.104539e-03 -5.000000e-16 6.000000e-01 4.168574e-03 -6.000000e-16 7.000000e-01 4.228356e-03 -7.000000e-16 8.000000e-01 4.284866e-03 -8.000000e-16 9.000000e-01 4.338706e-03 -9.000000e-16 1.000000e+00 4.390424e-03 -1.000000e-15 1.100000e+00 4.440474e-03 -1.100000e-15 1.200000e+00 4.489207e-03 -1.200000e-15 1.300000e+00 4.536889e-03 -1.300000e-15 1.400000e+00 4.583720e-03 -1.400000e-15 1.500000e+00 4.629852e-03 -1.500000e-15 1.600000e+00 4.675400e-03 -1.600000e-15 1.700000e+00 4.720456e-03 -1.700000e-15 1.800000e+00 4.765089e-03 -1.800000e-15 2.000000e-01 4.575745e-03 -2.000000e-16 3.000000e-01 5.436588e-03 -3.000000e-16 4.000000e-01 5.883336e-03 -4.000000e-16 5.000000e-01 6.122649e-03 -5.000000e-16 6.000000e-01 6.251933e-03 -6.000000e-16 7.000000e-01 6.328676e-03 -7.000000e-16 8.000000e-01 6.392836e-03 -8.000000e-16 9.000000e-01 6.453950e-03 -9.000000e-16 1.000000e+00 6.512526e-03 -1.000000e-15 1.100000e+00 6.568841e-03 -1.100000e-15 1.200000e+00 6.623216e-03 -1.200000e-15 1.300000e+00 6.675967e-03 -1.300000e-15 1.400000e+00 6.727368e-03 -1.400000e-15 1.500000e+00 6.777651e-03 -1.500000e-15 1.600000e+00 6.827000e-03 -1.600000e-15 1.700000e+00 6.875564e-03 -1.700000e-15 1.800000e+00 6.923462e-03 -1.800000e-15 2.000000e-01 5.870243e-03 -2.000000e-16 3.000000e-01 7.364527e-03 -3.000000e-16 4.000000e-01 8.250873e-03 -4.000000e-16 5.000000e-01 8.791206e-03 -5.000000e-16 6.000000e-01 9.132925e-03 -6.000000e-16 7.000000e-01 9.355002e-03 -7.000000e-16 8.000000e-01 9.502595e-03 -8.000000e-16 9.000000e-01 9.604011e-03 -9.000000e-16 1.000000e+00 9.676653e-03 -1.000000e-15 1.100000e+00 9.739827e-03 -1.100000e-15 1.200000e+00 9.800793e-03 -1.200000e-15 1.300000e+00 9.859958e-03 -1.300000e-15 1.400000e+00 9.917427e-03 -1.400000e-15 1.500000e+00 9.973346e-03 -1.500000e-15 1.600000e+00 1.002789e-02 -1.600000e-15 1.700000e+00 1.008122e-02 -1.700000e-15 1.800000e+00 1.013349e-02 -1.800000e-15 2.000000e-01 6.544617e-03 -2.000000e-16 3.000000e-01 8.629425e-03 -3.000000e-16 4.000000e-01 1.002415e-02 -4.000000e-16 5.000000e-01 1.095009e-02 -5.000000e-16 6.000000e-01 1.157533e-02 -6.000000e-16 7.000000e-01 1.200797e-02 -7.000000e-16 8.000000e-01 1.231437e-02 -8.000000e-16 9.000000e-01 1.253558e-02 -9.000000e-16 1.000000e+00 1.269838e-02 -1.000000e-15 1.100000e+00 1.282132e-02 -1.100000e-15 1.200000e+00 1.291696e-02 -1.200000e-15 1.300000e+00 1.299134e-02 -1.300000e-15 1.400000e+00 1.305478e-02 -1.400000e-15 1.500000e+00 1.311590e-02 -1.500000e-15 1.600000e+00 1.317555e-02 -1.600000e-15 1.700000e+00 1.323383e-02 -1.700000e-15 1.800000e+00 1.329082e-02 -1.800000e-15 2.000000e-01 6.168441e-06 -2.000000e-16 3.000000e-01 6.992527e-06 -3.000000e-16 4.000000e-01 7.898833e-06 -4.000000e-16 5.000000e-01 8.873147e-06 -5.000000e-16 6.000000e-01 9.893832e-06 -6.000000e-16 7.000000e-01 1.094768e-05 -7.000000e-16 8.000000e-01 1.202799e-05 -8.000000e-16 9.000000e-01 1.313151e-05 -9.000000e-16 1.000000e+00 1.425659e-05 -1.000000e-15 1.100000e+00 1.540231e-05 -1.100000e-15 1.200000e+00 1.656813e-05 -1.200000e-15 1.300000e+00 1.775364e-05 -1.300000e-15 1.400000e+00 1.895856e-05 -1.400000e-15 1.500000e+00 2.018263e-05 -1.500000e-15 1.600000e+00 2.142567e-05 -1.600000e-15 1.700000e+00 2.268746e-05 -1.700000e-15 1.800000e+00 2.396787e-05 -1.800000e-15 2.000000e-01 3.314500e-04 -2.000000e-16 3.000000e-01 3.516443e-04 -3.000000e-16 4.000000e-01 3.692608e-04 -4.000000e-16 5.000000e-01 3.862621e-04 -5.000000e-16 6.000000e-01 4.030308e-04 -6.000000e-16 7.000000e-01 4.196770e-04 -7.000000e-16 8.000000e-01 4.362533e-04 -8.000000e-16 9.000000e-01 4.527971e-04 -9.000000e-16 1.000000e+00 4.693380e-04 -1.000000e-15 1.100000e+00 4.858992e-04 -1.100000e-15 1.200000e+00 5.024990e-04 -1.200000e-15 1.300000e+00 5.191518e-04 -1.300000e-15 1.400000e+00 5.358687e-04 -1.400000e-15 1.500000e+00 5.526585e-04 -1.500000e-15 1.600000e+00 5.695281e-04 -1.600000e-15 1.700000e+00 5.864832e-04 -1.700000e-15 1.800000e+00 6.035282e-04 -1.800000e-15 2.000000e-01 1.414259e-03 -2.000000e-16 3.000000e-01 1.567979e-03 -3.000000e-16 4.000000e-01 1.628986e-03 -4.000000e-16 5.000000e-01 1.678046e-03 -5.000000e-16 6.000000e-01 1.722925e-03 -6.000000e-16 7.000000e-01 1.764987e-03 -7.000000e-16 8.000000e-01 1.805080e-03 -8.000000e-16 9.000000e-01 1.843763e-03 -9.000000e-16 1.000000e+00 1.881413e-03 -1.000000e-15 1.100000e+00 1.918285e-03 -1.100000e-15 1.200000e+00 1.954559e-03 -1.200000e-15 1.300000e+00 1.990363e-03 -1.300000e-15 1.400000e+00 2.025794e-03 -1.400000e-15 1.500000e+00 2.060923e-03 -1.500000e-15 1.600000e+00 2.095806e-03 -1.600000e-15 1.700000e+00 2.130488e-03 -1.700000e-15 1.800000e+00 2.165002e-03 -1.800000e-15 2.000000e-01 2.542714e-03 -2.000000e-16 3.000000e-01 3.063220e-03 -3.000000e-16 4.000000e-01 3.310856e-03 -4.000000e-16 5.000000e-01 3.420396e-03 -5.000000e-16 6.000000e-01 3.491904e-03 -6.000000e-16 7.000000e-01 3.556333e-03 -7.000000e-16 8.000000e-01 3.616445e-03 -8.000000e-16 9.000000e-01 3.673005e-03 -9.000000e-16 1.000000e+00 3.726718e-03 -1.000000e-15 1.100000e+00 3.778185e-03 -1.100000e-15 1.200000e+00 3.827884e-03 -1.200000e-15 1.300000e+00 3.876176e-03 -1.300000e-15 1.400000e+00 3.923336e-03 -1.400000e-15 1.500000e+00 3.969571e-03 -1.500000e-15 1.600000e+00 4.015041e-03 -1.600000e-15 1.700000e+00 4.059867e-03 -1.700000e-15 1.800000e+00 4.104148e-03 -1.800000e-15 2.000000e-01 3.486631e-03 -2.000000e-16 3.000000e-01 4.388014e-03 -3.000000e-16 4.000000e-01 4.924867e-03 -4.000000e-16 5.000000e-01 5.232529e-03 -5.000000e-16 6.000000e-01 5.399700e-03 -6.000000e-16 7.000000e-01 5.495663e-03 -7.000000e-16 8.000000e-01 5.570693e-03 -8.000000e-16 9.000000e-01 5.640525e-03 -9.000000e-16 1.000000e+00 5.706719e-03 -1.000000e-15 1.100000e+00 5.769675e-03 -1.100000e-15 1.200000e+00 5.829825e-03 -1.200000e-15 1.300000e+00 5.887607e-03 -1.300000e-15 1.400000e+00 5.943411e-03 -1.400000e-15 1.500000e+00 5.997567e-03 -1.500000e-15 1.600000e+00 6.050344e-03 -1.600000e-15 1.700000e+00 6.101961e-03 -1.700000e-15 1.800000e+00 6.152594e-03 -1.800000e-15 2.000000e-01 4.523458e-03 -2.000000e-16 3.000000e-01 5.961592e-03 -3.000000e-16 4.000000e-01 6.939779e-03 -4.000000e-16 5.000000e-01 7.596286e-03 -5.000000e-16 6.000000e-01 8.035751e-03 -6.000000e-16 7.000000e-01 8.327590e-03 -7.000000e-16 8.000000e-01 8.519006e-03 -8.000000e-16 9.000000e-01 8.645414e-03 -9.000000e-16 1.000000e+00 8.735120e-03 -1.000000e-15 1.100000e+00 8.810856e-03 -1.100000e-15 1.200000e+00 8.882452e-03 -1.200000e-15 1.300000e+00 8.951286e-03 -1.300000e-15 1.400000e+00 9.017592e-03 -1.400000e-15 1.500000e+00 9.081583e-03 -1.500000e-15 1.600000e+00 9.143495e-03 -1.600000e-15 1.700000e+00 9.203569e-03 -1.700000e-15 1.800000e+00 9.262028e-03 -1.800000e-15 2.000000e-01 5.146662e-03 -2.000000e-16 3.000000e-01 7.031863e-03 -3.000000e-16 4.000000e-01 8.439639e-03 -4.000000e-16 5.000000e-01 9.465363e-03 -5.000000e-16 6.000000e-01 1.020835e-02 -6.000000e-16 7.000000e-01 1.074777e-02 -7.000000e-16 8.000000e-01 1.114061e-02 -8.000000e-16 9.000000e-01 1.142684e-02 -9.000000e-16 1.000000e+00 1.163539e-02 -1.000000e-15 1.100000e+00 1.178842e-02 -1.100000e-15 1.200000e+00 1.190317e-02 -1.200000e-15 1.300000e+00 1.199275e-02 -1.300000e-15 1.400000e+00 1.206906e-02 -1.400000e-15 1.500000e+00 1.214087e-02 -1.500000e-15 1.600000e+00 1.221034e-02 -1.600000e-15 1.700000e+00 1.227777e-02 -1.700000e-15 1.800000e+00 1.234331e-02 -1.800000e-15 2.000000e-01 2.757247e-05 -2.000000e-16 3.000000e-01 3.088943e-05 -3.000000e-16 4.000000e-01 3.432614e-05 -4.000000e-16 5.000000e-01 3.796733e-05 -5.000000e-16 6.000000e-01 4.175784e-05 -6.000000e-16 7.000000e-01 4.565691e-05 -7.000000e-16 8.000000e-01 4.964358e-05 -8.000000e-16 9.000000e-01 5.370790e-05 -9.000000e-16 1.000000e+00 5.784506e-05 -1.000000e-15 1.100000e+00 6.205260e-05 -1.100000e-15 1.200000e+00 6.632908e-05 -1.200000e-15 1.300000e+00 7.067356e-05 -1.300000e-15 1.400000e+00 7.508532e-05 -1.400000e-15 1.500000e+00 7.956378e-05 -1.500000e-15 1.600000e+00 8.410843e-05 -1.600000e-15 1.700000e+00 8.871881e-05 -1.700000e-15 1.800000e+00 9.339451e-05 -1.800000e-15 2.000000e-01 3.233979e-04 -2.000000e-16 3.000000e-01 3.491751e-04 -3.000000e-16 4.000000e-01 3.669805e-04 -4.000000e-16 5.000000e-01 3.832630e-04 -5.000000e-16 6.000000e-01 3.989944e-04 -6.000000e-16 7.000000e-01 4.144367e-04 -7.000000e-16 8.000000e-01 4.297076e-04 -8.000000e-16 9.000000e-01 4.448775e-04 -9.000000e-16 1.000000e+00 4.599945e-04 -1.000000e-15 1.100000e+00 4.750927e-04 -1.100000e-15 1.200000e+00 4.901974e-04 -1.200000e-15 1.300000e+00 5.053275e-04 -1.300000e-15 1.400000e+00 5.204977e-04 -1.400000e-15 1.500000e+00 5.357192e-04 -1.500000e-15 1.600000e+00 5.510012e-04 -1.600000e-15 1.700000e+00 5.663506e-04 -1.700000e-15 1.800000e+00 5.817735e-04 -1.800000e-15 2.000000e-01 1.006788e-03 -2.000000e-16 3.000000e-01 1.176557e-03 -3.000000e-16 4.000000e-01 1.246390e-03 -4.000000e-16 5.000000e-01 1.291247e-03 -5.000000e-16 6.000000e-01 1.330236e-03 -6.000000e-16 7.000000e-01 1.366185e-03 -7.000000e-16 8.000000e-01 1.400047e-03 -8.000000e-16 9.000000e-01 1.432420e-03 -9.000000e-16 1.000000e+00 1.463716e-03 -1.000000e-15 1.100000e+00 1.494215e-03 -1.100000e-15 1.200000e+00 1.524116e-03 -1.200000e-15 1.300000e+00 1.553558e-03 -1.300000e-15 1.400000e+00 1.582644e-03 -1.400000e-15 1.500000e+00 1.611452e-03 -1.500000e-15 1.600000e+00 1.640038e-03 -1.600000e-15 1.700000e+00 1.668448e-03 -1.700000e-15 1.800000e+00 1.696719e-03 -1.800000e-15 2.000000e-01 1.720602e-03 -2.000000e-16 3.000000e-01 2.182212e-03 -3.000000e-16 4.000000e-01 2.443001e-03 -4.000000e-16 5.000000e-01 2.573625e-03 -5.000000e-16 6.000000e-01 2.648907e-03 -6.000000e-16 7.000000e-01 2.710122e-03 -7.000000e-16 8.000000e-01 2.766323e-03 -8.000000e-16 9.000000e-01 2.818908e-03 -9.000000e-16 1.000000e+00 2.868539e-03 -1.000000e-15 1.100000e+00 2.915786e-03 -1.100000e-15 1.200000e+00 2.961129e-03 -1.200000e-15 1.300000e+00 3.004954e-03 -1.300000e-15 1.400000e+00 3.047557e-03 -1.400000e-15 1.500000e+00 3.089169e-03 -1.500000e-15 1.600000e+00 3.129968e-03 -1.600000e-15 1.700000e+00 3.170092e-03 -1.700000e-15 1.800000e+00 3.209650e-03 -1.800000e-15 2.000000e-01 2.344551e-03 -2.000000e-16 3.000000e-01 3.101925e-03 -3.000000e-16 4.000000e-01 3.621184e-03 -4.000000e-16 5.000000e-01 3.954178e-03 -5.000000e-16 6.000000e-01 4.151658e-03 -6.000000e-16 7.000000e-01 4.267092e-03 -7.000000e-16 8.000000e-01 4.348380e-03 -8.000000e-16 9.000000e-01 4.419815e-03 -9.000000e-16 1.000000e+00 4.486875e-03 -1.000000e-15 1.100000e+00 4.550435e-03 -1.100000e-15 1.200000e+00 4.610906e-03 -1.200000e-15 1.300000e+00 4.668696e-03 -1.300000e-15 1.400000e+00 4.724200e-03 -1.400000e-15 1.500000e+00 4.777773e-03 -1.500000e-15 1.600000e+00 4.829716e-03 -1.600000e-15 1.700000e+00 4.880282e-03 -1.700000e-15 1.800000e+00 4.929678e-03 -1.800000e-15 2.000000e-01 3.084402e-03 -2.000000e-16 3.000000e-01 4.235437e-03 -3.000000e-16 4.000000e-01 5.122679e-03 -4.000000e-16 5.000000e-01 5.785658e-03 -5.000000e-16 6.000000e-01 6.267956e-03 -6.000000e-16 7.000000e-01 6.608144e-03 -7.000000e-16 8.000000e-01 6.840111e-03 -8.000000e-16 9.000000e-01 6.995611e-03 -9.000000e-16 1.000000e+00 7.104437e-03 -1.000000e-15 1.100000e+00 7.191523e-03 -1.100000e-15 1.200000e+00 7.270752e-03 -1.200000e-15 1.300000e+00 7.346161e-03 -1.300000e-15 1.400000e+00 7.418531e-03 -1.400000e-15 1.500000e+00 7.488125e-03 -1.500000e-15 1.600000e+00 7.555176e-03 -1.600000e-15 1.700000e+00 7.619929e-03 -1.700000e-15 1.800000e+00 7.682628e-03 -1.800000e-15 2.000000e-01 3.603565e-03 -2.000000e-16 3.000000e-01 5.071371e-03 -3.000000e-16 4.000000e-01 6.281326e-03 -4.000000e-16 5.000000e-01 7.251718e-03 -5.000000e-16 6.000000e-01 8.015715e-03 -6.000000e-16 7.000000e-01 8.608979e-03 -7.000000e-16 8.000000e-01 9.063670e-03 -8.000000e-16 9.000000e-01 9.407070e-03 -9.000000e-16 1.000000e+00 9.662614e-03 -1.000000e-15 1.100000e+00 9.851179e-03 -1.100000e-15 1.200000e+00 9.991500e-03 -1.200000e-15 1.300000e+00 1.010011e-02 -1.300000e-15 1.400000e+00 1.019103e-02 -1.400000e-15 1.500000e+00 1.027396e-02 -1.500000e-15 1.600000e+00 1.035306e-02 -1.600000e-15 1.700000e+00 1.042945e-02 -1.700000e-15 1.800000e+00 1.050344e-02 -1.800000e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/13_dcSweep_COISTI=0.standard0000644000175000017500000002211413546075722025213 0ustar carstencarstenV(d) I(d) 2.000000e-01 9.763426e-06 3.000000e-01 1.098950e-05 4.000000e-01 1.231711e-05 5.000000e-01 1.373634e-05 6.000000e-01 1.522100e-05 7.000000e-01 1.675391e-05 8.000000e-01 1.832619e-05 9.000000e-01 1.993350e-05 1.000000e+00 2.157366e-05 1.100000e+00 2.324548e-05 1.200000e+00 2.494824e-05 1.300000e+00 2.668147e-05 1.400000e+00 2.844479e-05 1.500000e+00 3.023790e-05 1.600000e+00 3.206053e-05 1.700000e+00 3.391245e-05 1.800000e+00 3.579344e-05 2.000000e-01 7.473464e-04 3.000000e-01 7.858657e-04 4.000000e-01 8.198046e-04 5.000000e-01 8.521719e-04 6.000000e-01 8.837789e-04 7.000000e-01 9.148995e-04 8.000000e-01 9.456691e-04 9.000000e-01 9.761819e-04 1.000000e+00 1.006511e-03 1.100000e+00 1.036712e-03 1.200000e+00 1.066831e-03 1.300000e+00 1.096900e-03 1.400000e+00 1.126948e-03 1.500000e+00 1.156994e-03 1.600000e+00 1.187056e-03 1.700000e+00 1.217146e-03 1.800000e+00 1.247276e-03 2.000000e-01 2.335360e-03 3.000000e-01 2.564311e-03 4.000000e-01 2.644401e-03 5.000000e-01 2.705025e-03 6.000000e-01 2.761030e-03 7.000000e-01 2.813736e-03 8.000000e-01 2.864021e-03 9.000000e-01 2.912503e-03 1.000000e+00 2.959618e-03 1.100000e+00 3.005675e-03 1.200000e+00 3.050899e-03 1.300000e+00 3.095452e-03 1.400000e+00 3.139457e-03 1.500000e+00 3.183005e-03 1.600000e+00 3.226169e-03 1.700000e+00 3.269004e-03 1.800000e+00 3.311557e-03 2.000000e-01 3.759968e-03 3.000000e-01 4.351810e-03 4.000000e-01 4.629215e-03 5.000000e-01 4.758552e-03 6.000000e-01 4.832181e-03 7.000000e-01 4.896696e-03 8.000000e-01 4.957720e-03 9.000000e-01 5.015788e-03 1.000000e+00 5.071383e-03 1.100000e+00 5.124963e-03 1.200000e+00 5.176923e-03 1.300000e+00 5.227577e-03 1.400000e+00 5.277169e-03 1.500000e+00 5.325889e-03 1.600000e+00 5.373882e-03 1.700000e+00 5.421263e-03 1.800000e+00 5.468122e-03 2.000000e-01 4.912544e-03 3.000000e-01 5.900868e-03 4.000000e-01 6.431054e-03 5.000000e-01 6.728834e-03 6.000000e-01 6.900371e-03 7.000000e-01 7.002483e-03 8.000000e-01 7.072838e-03 9.000000e-01 7.136871e-03 1.000000e+00 7.198375e-03 1.100000e+00 7.257581e-03 1.200000e+00 7.314708e-03 1.300000e+00 7.370027e-03 1.400000e+00 7.423809e-03 1.500000e+00 7.476299e-03 1.600000e+00 7.527699e-03 1.700000e+00 7.578181e-03 1.800000e+00 7.627881e-03 2.000000e-01 6.088581e-03 3.000000e-01 7.714236e-03 4.000000e-01 8.701154e-03 5.000000e-01 9.313270e-03 6.000000e-01 9.707082e-03 7.000000e-01 9.968760e-03 8.000000e-01 1.014709e-02 9.000000e-01 1.027230e-02 1.000000e+00 1.036335e-02 1.100000e+00 1.043239e-02 1.200000e+00 1.049541e-02 1.300000e+00 1.055660e-02 1.400000e+00 1.061611e-02 1.500000e+00 1.067404e-02 1.600000e+00 1.073052e-02 1.700000e+00 1.078568e-02 1.800000e+00 1.083969e-02 2.000000e-01 6.667634e-03 3.000000e-01 8.863865e-03 4.000000e-01 1.036406e-02 5.000000e-01 1.137599e-02 6.000000e-01 1.206751e-02 7.000000e-01 1.255092e-02 8.000000e-01 1.289693e-02 9.000000e-01 1.314985e-02 1.000000e+00 1.333828e-02 1.100000e+00 1.348179e-02 1.200000e+00 1.359431e-02 1.300000e+00 1.368483e-02 1.400000e+00 1.375690e-02 1.500000e+00 1.382020e-02 1.600000e+00 1.388155e-02 1.700000e+00 1.394153e-02 1.800000e+00 1.400020e-02 2.000000e-01 2.995037e-05 3.000000e-01 3.321301e-05 4.000000e-01 3.662332e-05 5.000000e-01 4.021767e-05 6.000000e-01 4.394998e-05 7.000000e-01 4.778588e-05 8.000000e-01 5.170748e-05 9.000000e-01 5.570640e-05 1.000000e+00 5.977874e-05 1.100000e+00 6.392263e-05 1.200000e+00 6.813705e-05 1.300000e+00 7.242139e-05 1.400000e+00 7.677518e-05 1.500000e+00 8.119805e-05 1.600000e+00 8.568966e-05 1.700000e+00 9.024971e-05 1.800000e+00 9.487788e-05 2.000000e-01 6.260767e-04 3.000000e-01 6.663137e-04 4.000000e-01 6.970937e-04 5.000000e-01 7.256343e-04 6.000000e-01 7.530890e-04 7.000000e-01 7.798943e-04 8.000000e-01 8.062710e-04 9.000000e-01 8.323560e-04 1.000000e+00 8.582435e-04 1.100000e+00 8.840018e-04 1.200000e+00 9.096810e-04 1.300000e+00 9.353194e-04 1.400000e+00 9.609459e-04 1.500000e+00 9.865833e-04 1.600000e+00 1.012249e-03 1.700000e+00 1.037959e-03 1.800000e+00 1.063723e-03 2.000000e-01 1.789771e-03 3.000000e-01 2.057410e-03 4.000000e-01 2.157350e-03 5.000000e-01 2.220952e-03 6.000000e-01 2.277800e-03 7.000000e-01 2.330467e-03 8.000000e-01 2.380048e-03 9.000000e-01 2.427351e-03 1.000000e+00 2.472956e-03 1.100000e+00 2.517272e-03 1.200000e+00 2.560590e-03 1.300000e+00 2.603121e-03 1.400000e+00 2.645019e-03 1.500000e+00 2.686400e-03 1.600000e+00 2.727351e-03 1.700000e+00 2.767944e-03 1.800000e+00 2.808233e-03 2.000000e-01 2.860789e-03 3.000000e-01 3.509730e-03 4.000000e-01 3.856062e-03 5.000000e-01 4.025617e-03 6.000000e-01 4.116862e-03 7.000000e-01 4.190303e-03 8.000000e-01 4.258495e-03 9.000000e-01 4.322587e-03 1.000000e+00 4.383209e-03 1.100000e+00 4.440983e-03 1.200000e+00 4.496456e-03 1.300000e+00 4.550074e-03 1.400000e+00 4.602186e-03 1.500000e+00 4.653064e-03 1.600000e+00 4.702918e-03 1.700000e+00 4.751914e-03 1.800000e+00 4.800180e-03 2.000000e-01 3.740159e-03 3.000000e-01 4.764634e-03 4.000000e-01 5.400613e-03 5.000000e-01 5.787783e-03 6.000000e-01 6.016011e-03 7.000000e-01 6.148496e-03 8.000000e-01 6.236420e-03 9.000000e-01 6.312356e-03 1.000000e+00 6.384121e-03 1.100000e+00 6.452464e-03 1.200000e+00 6.517713e-03 1.300000e+00 6.580252e-03 1.400000e+00 6.640471e-03 1.500000e+00 6.698725e-03 1.600000e+00 6.755316e-03 1.700000e+00 6.810497e-03 1.800000e+00 6.864478e-03 2.000000e-01 4.688234e-03 3.000000e-01 6.234394e-03 4.000000e-01 7.311067e-03 5.000000e-01 8.049735e-03 6.000000e-01 8.556581e-03 7.000000e-01 8.904359e-03 8.000000e-01 9.141764e-03 9.000000e-01 9.303711e-03 1.000000e+00 9.417038e-03 1.100000e+00 9.503186e-03 1.200000e+00 9.579265e-03 1.300000e+00 9.651875e-03 1.400000e+00 9.721878e-03 1.500000e+00 9.789463e-03 1.600000e+00 9.854823e-03 1.700000e+00 9.918174e-03 1.800000e+00 9.979733e-03 2.000000e-01 5.242223e-03 3.000000e-01 7.211351e-03 4.000000e-01 8.708925e-03 5.000000e-01 9.818161e-03 6.000000e-01 1.063352e-02 7.000000e-01 1.123405e-02 8.000000e-01 1.167850e-02 9.000000e-01 1.200868e-02 1.000000e+00 1.225454e-02 1.100000e+00 1.243852e-02 1.200000e+00 1.257808e-02 1.300000e+00 1.268675e-02 1.400000e+00 1.277456e-02 1.500000e+00 1.285113e-02 1.600000e+00 1.292371e-02 1.700000e+00 1.299405e-02 1.800000e+00 1.306243e-02 2.000000e-01 7.644342e-05 3.000000e-01 8.432861e-05 4.000000e-01 9.189748e-05 5.000000e-01 9.970086e-05 6.000000e-01 1.077236e-04 7.000000e-01 1.159194e-04 8.000000e-01 1.242625e-04 9.000000e-01 1.327420e-04 1.000000e+00 1.413538e-04 1.100000e+00 1.500970e-04 1.200000e+00 1.589712e-04 1.300000e+00 1.679768e-04 1.400000e+00 1.771140e-04 1.500000e+00 1.863827e-04 1.600000e+00 1.957832e-04 1.700000e+00 2.053154e-04 1.800000e+00 2.149792e-04 2.000000e-01 5.313260e-04 3.000000e-01 5.858621e-04 4.000000e-01 6.167036e-04 5.000000e-01 6.430891e-04 6.000000e-01 6.678172e-04 7.000000e-01 6.916242e-04 8.000000e-01 7.148519e-04 9.000000e-01 7.376998e-04 1.000000e+00 7.602967e-04 1.100000e+00 7.827302e-04 1.200000e+00 8.050622e-04 1.300000e+00 8.273379e-04 1.400000e+00 8.495911e-04 1.500000e+00 8.718478e-04 1.600000e+00 8.941281e-04 1.700000e+00 9.164482e-04 1.800000e+00 9.388210e-04 2.000000e-01 1.249075e-03 3.000000e-01 1.516722e-03 4.000000e-01 1.638735e-03 5.000000e-01 1.703954e-03 6.000000e-01 1.756165e-03 7.000000e-01 1.803630e-03 8.000000e-01 1.847881e-03 9.000000e-01 1.889728e-03 1.000000e+00 1.929772e-03 1.100000e+00 1.968457e-03 1.200000e+00 2.006104e-03 1.300000e+00 2.042946e-03 1.400000e+00 2.079156e-03 1.500000e+00 2.114860e-03 1.600000e+00 2.150157e-03 1.700000e+00 2.185123e-03 1.800000e+00 2.219816e-03 2.000000e-01 1.929074e-03 3.000000e-01 2.495574e-03 4.000000e-01 2.849603e-03 5.000000e-01 3.048483e-03 6.000000e-01 3.157405e-03 7.000000e-01 3.233347e-03 8.000000e-01 3.300419e-03 9.000000e-01 3.363028e-03 1.000000e+00 3.422015e-03 1.100000e+00 3.477940e-03 1.200000e+00 3.531328e-03 1.300000e+00 3.582640e-03 1.400000e+00 3.632254e-03 1.500000e+00 3.680476e-03 1.600000e+00 3.727546e-03 1.700000e+00 3.773657e-03 1.800000e+00 3.818960e-03 2.000000e-01 2.513014e-03 3.000000e-01 3.364992e-03 4.000000e-01 3.974446e-03 5.000000e-01 4.389869e-03 6.000000e-01 4.657036e-03 7.000000e-01 4.820782e-03 8.000000e-01 4.926200e-03 9.000000e-01 5.009079e-03 1.000000e+00 5.084797e-03 1.100000e+00 5.156495e-03 1.200000e+00 5.224749e-03 1.300000e+00 5.289912e-03 1.400000e+00 5.352355e-03 1.500000e+00 5.412444e-03 1.600000e+00 5.470510e-03 1.700000e+00 5.526847e-03 1.800000e+00 5.581699e-03 2.000000e-01 3.198303e-03 3.000000e-01 4.424863e-03 4.000000e-01 5.390643e-03 5.000000e-01 6.129485e-03 6.000000e-01 6.682532e-03 7.000000e-01 7.087480e-03 8.000000e-01 7.376564e-03 9.000000e-01 7.578532e-03 1.000000e+00 7.720055e-03 1.100000e+00 7.825402e-03 1.200000e+00 7.913975e-03 1.300000e+00 7.996009e-03 1.400000e+00 8.074452e-03 1.500000e+00 8.149924e-03 1.600000e+00 8.222662e-03 1.700000e+00 8.292880e-03 1.800000e+00 8.360803e-03 2.000000e-01 3.673865e-03 3.000000e-01 5.197470e-03 4.000000e-01 6.471831e-03 5.000000e-01 7.509462e-03 6.000000e-01 8.339273e-03 7.000000e-01 8.994691e-03 8.000000e-01 9.507097e-03 9.000000e-01 9.903497e-03 1.000000e+00 1.020673e-02 1.100000e+00 1.043664e-02 1.200000e+00 1.061086e-02 1.300000e+00 1.074499e-02 1.400000e+00 1.085257e-02 1.500000e+00 1.094493e-02 1.600000e+00 1.103000e-02 1.700000e+00 1.111135e-02 1.800000e+00 1.119003e-02 tmpk8ny_4pz/tests/hisim/nmos/reference/62_acFreq_COFLICK=0.standard0000644000175000017500000002533013546075722025111 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258.925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584.893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995.262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511.886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162.278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981.072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011.872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309.573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943.282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589.25 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848.93 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952.62 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118.86 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622.78 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810.72 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118.72 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095.73 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432.82 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 125892.5 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 158489.3 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 199526.2 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 251188.6 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 316227.8 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 398107.2 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 501187.2 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 630957.3 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 794328.2 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 1000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589250 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848930 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952620 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118860 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622780 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810720 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118720 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095730 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432820 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258.925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584.893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 1995.262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511.886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162.278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981.072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011.872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309.573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943.282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589.25 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848.93 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 19952.62 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118.86 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622.78 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810.72 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118.72 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095.73 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432.82 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 125892.5 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 158489.3 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 199526.2 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 251188.6 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 316227.8 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 398107.2 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 501187.2 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 630957.3 1.95109670680967e-14 1.51047556203098e-14 3.63962547928741e-15 794328.2 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 1000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 1995262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589250 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848930 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 19952620 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118860 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622780 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810720 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118720 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095730 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432820 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258.925 1.92253810991621e-14 1.48903692202894e-14 3.56434127432084e-15 1584.893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995.262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511.886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162.278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981.072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011.872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309.573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943.282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 12589.25 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848.93 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952.62 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118.86 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622.78 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810.72 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118.72 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095.73 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432.82 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 125892.5 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 158489.3 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 199526.2 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 251188.6 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 316227.8 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 398107.2 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 501187.2 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 630957.3 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 794328.2 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 1000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258925 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 1584893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000000 1.92253759986944e-14 1.4890367771438e-14 3.56434020406966e-15 12589250 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848930 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952620 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118860 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622780 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810720 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118720 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095730 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432820 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/23_dcSweep_CODFM=0.standard0000644000175000017500000002211413546075722025052 0ustar carstencarstenV(d) I(d) 2.000000e-01 1.031340e-06 3.000000e-01 1.187668e-06 4.000000e-01 1.363411e-06 5.000000e-01 1.553811e-06 6.000000e-01 1.754026e-06 7.000000e-01 1.961205e-06 8.000000e-01 2.173905e-06 9.000000e-01 2.391410e-06 1.000000e+00 2.613350e-06 1.100000e+00 2.839516e-06 1.200000e+00 3.069773e-06 1.300000e+00 3.304026e-06 1.400000e+00 3.542204e-06 1.500000e+00 3.784246e-06 1.600000e+00 4.030100e-06 1.700000e+00 4.279721e-06 1.800000e+00 4.533070e-06 2.000000e-01 3.625488e-04 3.000000e-01 3.836434e-04 4.000000e-01 4.033947e-04 5.000000e-01 4.229012e-04 6.000000e-01 4.423753e-04 7.000000e-01 4.618402e-04 8.000000e-01 4.813047e-04 9.000000e-01 5.007840e-04 1.000000e+00 5.202960e-04 1.100000e+00 5.398574e-04 1.200000e+00 5.594823e-04 1.300000e+00 5.791821e-04 1.400000e+00 5.989658e-04 1.500000e+00 6.188407e-04 1.600000e+00 6.388122e-04 1.700000e+00 6.588847e-04 1.800000e+00 6.790616e-04 2.000000e-01 1.846855e-03 3.000000e-01 1.974260e-03 4.000000e-01 2.031600e-03 5.000000e-01 2.082672e-03 6.000000e-01 2.130364e-03 7.000000e-01 2.175738e-03 8.000000e-01 2.219464e-03 9.000000e-01 2.261982e-03 1.000000e+00 2.303587e-03 1.100000e+00 2.344487e-03 1.200000e+00 2.384830e-03 1.300000e+00 2.424728e-03 1.400000e+00 2.464261e-03 1.500000e+00 2.503492e-03 1.600000e+00 2.542472e-03 1.700000e+00 2.581239e-03 1.800000e+00 2.619826e-03 2.000000e-01 3.343576e-03 3.000000e-01 3.817799e-03 4.000000e-01 4.017737e-03 5.000000e-01 4.104539e-03 6.000000e-01 4.168574e-03 7.000000e-01 4.228356e-03 8.000000e-01 4.284866e-03 9.000000e-01 4.338706e-03 1.000000e+00 4.390424e-03 1.100000e+00 4.440474e-03 1.200000e+00 4.489207e-03 1.300000e+00 4.536889e-03 1.400000e+00 4.583720e-03 1.500000e+00 4.629852e-03 1.600000e+00 4.675400e-03 1.700000e+00 4.720456e-03 1.800000e+00 4.765089e-03 2.000000e-01 4.575745e-03 3.000000e-01 5.436588e-03 4.000000e-01 5.883336e-03 5.000000e-01 6.122649e-03 6.000000e-01 6.251933e-03 7.000000e-01 6.328676e-03 8.000000e-01 6.392836e-03 9.000000e-01 6.453950e-03 1.000000e+00 6.512526e-03 1.100000e+00 6.568841e-03 1.200000e+00 6.623216e-03 1.300000e+00 6.675967e-03 1.400000e+00 6.727368e-03 1.500000e+00 6.777651e-03 1.600000e+00 6.827000e-03 1.700000e+00 6.875564e-03 1.800000e+00 6.923462e-03 2.000000e-01 5.870243e-03 3.000000e-01 7.364527e-03 4.000000e-01 8.250873e-03 5.000000e-01 8.791206e-03 6.000000e-01 9.132925e-03 7.000000e-01 9.355002e-03 8.000000e-01 9.502595e-03 9.000000e-01 9.604011e-03 1.000000e+00 9.676653e-03 1.100000e+00 9.739827e-03 1.200000e+00 9.800793e-03 1.300000e+00 9.859958e-03 1.400000e+00 9.917427e-03 1.500000e+00 9.973346e-03 1.600000e+00 1.002789e-02 1.700000e+00 1.008122e-02 1.800000e+00 1.013349e-02 2.000000e-01 6.544617e-03 3.000000e-01 8.629425e-03 4.000000e-01 1.002415e-02 5.000000e-01 1.095009e-02 6.000000e-01 1.157533e-02 7.000000e-01 1.200797e-02 8.000000e-01 1.231437e-02 9.000000e-01 1.253558e-02 1.000000e+00 1.269838e-02 1.100000e+00 1.282132e-02 1.200000e+00 1.291696e-02 1.300000e+00 1.299134e-02 1.400000e+00 1.305478e-02 1.500000e+00 1.311590e-02 1.600000e+00 1.317555e-02 1.700000e+00 1.323383e-02 1.800000e+00 1.329082e-02 2.000000e-01 6.168441e-06 3.000000e-01 6.992527e-06 4.000000e-01 7.898833e-06 5.000000e-01 8.873147e-06 6.000000e-01 9.893832e-06 7.000000e-01 1.094768e-05 8.000000e-01 1.202799e-05 9.000000e-01 1.313151e-05 1.000000e+00 1.425659e-05 1.100000e+00 1.540231e-05 1.200000e+00 1.656813e-05 1.300000e+00 1.775364e-05 1.400000e+00 1.895856e-05 1.500000e+00 2.018263e-05 1.600000e+00 2.142567e-05 1.700000e+00 2.268746e-05 1.800000e+00 2.396787e-05 2.000000e-01 3.314500e-04 3.000000e-01 3.516443e-04 4.000000e-01 3.692608e-04 5.000000e-01 3.862621e-04 6.000000e-01 4.030308e-04 7.000000e-01 4.196770e-04 8.000000e-01 4.362533e-04 9.000000e-01 4.527971e-04 1.000000e+00 4.693380e-04 1.100000e+00 4.858992e-04 1.200000e+00 5.024990e-04 1.300000e+00 5.191518e-04 1.400000e+00 5.358687e-04 1.500000e+00 5.526585e-04 1.600000e+00 5.695281e-04 1.700000e+00 5.864832e-04 1.800000e+00 6.035282e-04 2.000000e-01 1.414259e-03 3.000000e-01 1.567979e-03 4.000000e-01 1.628986e-03 5.000000e-01 1.678046e-03 6.000000e-01 1.722925e-03 7.000000e-01 1.764987e-03 8.000000e-01 1.805080e-03 9.000000e-01 1.843763e-03 1.000000e+00 1.881413e-03 1.100000e+00 1.918285e-03 1.200000e+00 1.954559e-03 1.300000e+00 1.990363e-03 1.400000e+00 2.025794e-03 1.500000e+00 2.060923e-03 1.600000e+00 2.095806e-03 1.700000e+00 2.130488e-03 1.800000e+00 2.165002e-03 2.000000e-01 2.542714e-03 3.000000e-01 3.063220e-03 4.000000e-01 3.310856e-03 5.000000e-01 3.420396e-03 6.000000e-01 3.491904e-03 7.000000e-01 3.556333e-03 8.000000e-01 3.616445e-03 9.000000e-01 3.673005e-03 1.000000e+00 3.726718e-03 1.100000e+00 3.778185e-03 1.200000e+00 3.827884e-03 1.300000e+00 3.876176e-03 1.400000e+00 3.923336e-03 1.500000e+00 3.969571e-03 1.600000e+00 4.015041e-03 1.700000e+00 4.059867e-03 1.800000e+00 4.104148e-03 2.000000e-01 3.486631e-03 3.000000e-01 4.388014e-03 4.000000e-01 4.924867e-03 5.000000e-01 5.232529e-03 6.000000e-01 5.399700e-03 7.000000e-01 5.495663e-03 8.000000e-01 5.570693e-03 9.000000e-01 5.640525e-03 1.000000e+00 5.706719e-03 1.100000e+00 5.769675e-03 1.200000e+00 5.829825e-03 1.300000e+00 5.887607e-03 1.400000e+00 5.943411e-03 1.500000e+00 5.997567e-03 1.600000e+00 6.050344e-03 1.700000e+00 6.101961e-03 1.800000e+00 6.152594e-03 2.000000e-01 4.523458e-03 3.000000e-01 5.961592e-03 4.000000e-01 6.939779e-03 5.000000e-01 7.596286e-03 6.000000e-01 8.035751e-03 7.000000e-01 8.327590e-03 8.000000e-01 8.519006e-03 9.000000e-01 8.645414e-03 1.000000e+00 8.735120e-03 1.100000e+00 8.810856e-03 1.200000e+00 8.882452e-03 1.300000e+00 8.951286e-03 1.400000e+00 9.017592e-03 1.500000e+00 9.081583e-03 1.600000e+00 9.143495e-03 1.700000e+00 9.203569e-03 1.800000e+00 9.262028e-03 2.000000e-01 5.146662e-03 3.000000e-01 7.031863e-03 4.000000e-01 8.439639e-03 5.000000e-01 9.465363e-03 6.000000e-01 1.020835e-02 7.000000e-01 1.074777e-02 8.000000e-01 1.114061e-02 9.000000e-01 1.142684e-02 1.000000e+00 1.163539e-02 1.100000e+00 1.178842e-02 1.200000e+00 1.190317e-02 1.300000e+00 1.199275e-02 1.400000e+00 1.206906e-02 1.500000e+00 1.214087e-02 1.600000e+00 1.221034e-02 1.700000e+00 1.227777e-02 1.800000e+00 1.234331e-02 2.000000e-01 2.757247e-05 3.000000e-01 3.088943e-05 4.000000e-01 3.432614e-05 5.000000e-01 3.796733e-05 6.000000e-01 4.175784e-05 7.000000e-01 4.565691e-05 8.000000e-01 4.964358e-05 9.000000e-01 5.370790e-05 1.000000e+00 5.784506e-05 1.100000e+00 6.205260e-05 1.200000e+00 6.632908e-05 1.300000e+00 7.067356e-05 1.400000e+00 7.508532e-05 1.500000e+00 7.956378e-05 1.600000e+00 8.410843e-05 1.700000e+00 8.871881e-05 1.800000e+00 9.339451e-05 2.000000e-01 3.233979e-04 3.000000e-01 3.491751e-04 4.000000e-01 3.669805e-04 5.000000e-01 3.832630e-04 6.000000e-01 3.989944e-04 7.000000e-01 4.144367e-04 8.000000e-01 4.297076e-04 9.000000e-01 4.448775e-04 1.000000e+00 4.599945e-04 1.100000e+00 4.750927e-04 1.200000e+00 4.901974e-04 1.300000e+00 5.053275e-04 1.400000e+00 5.204977e-04 1.500000e+00 5.357192e-04 1.600000e+00 5.510012e-04 1.700000e+00 5.663506e-04 1.800000e+00 5.817735e-04 2.000000e-01 1.006788e-03 3.000000e-01 1.176557e-03 4.000000e-01 1.246390e-03 5.000000e-01 1.291247e-03 6.000000e-01 1.330236e-03 7.000000e-01 1.366185e-03 8.000000e-01 1.400047e-03 9.000000e-01 1.432420e-03 1.000000e+00 1.463716e-03 1.100000e+00 1.494215e-03 1.200000e+00 1.524116e-03 1.300000e+00 1.553558e-03 1.400000e+00 1.582644e-03 1.500000e+00 1.611452e-03 1.600000e+00 1.640038e-03 1.700000e+00 1.668448e-03 1.800000e+00 1.696719e-03 2.000000e-01 1.720602e-03 3.000000e-01 2.182212e-03 4.000000e-01 2.443001e-03 5.000000e-01 2.573625e-03 6.000000e-01 2.648907e-03 7.000000e-01 2.710122e-03 8.000000e-01 2.766323e-03 9.000000e-01 2.818908e-03 1.000000e+00 2.868539e-03 1.100000e+00 2.915786e-03 1.200000e+00 2.961129e-03 1.300000e+00 3.004954e-03 1.400000e+00 3.047557e-03 1.500000e+00 3.089169e-03 1.600000e+00 3.129968e-03 1.700000e+00 3.170092e-03 1.800000e+00 3.209650e-03 2.000000e-01 2.344551e-03 3.000000e-01 3.101925e-03 4.000000e-01 3.621184e-03 5.000000e-01 3.954178e-03 6.000000e-01 4.151658e-03 7.000000e-01 4.267092e-03 8.000000e-01 4.348380e-03 9.000000e-01 4.419815e-03 1.000000e+00 4.486875e-03 1.100000e+00 4.550435e-03 1.200000e+00 4.610906e-03 1.300000e+00 4.668696e-03 1.400000e+00 4.724200e-03 1.500000e+00 4.777773e-03 1.600000e+00 4.829716e-03 1.700000e+00 4.880282e-03 1.800000e+00 4.929678e-03 2.000000e-01 3.084402e-03 3.000000e-01 4.235437e-03 4.000000e-01 5.122679e-03 5.000000e-01 5.785658e-03 6.000000e-01 6.267956e-03 7.000000e-01 6.608144e-03 8.000000e-01 6.840111e-03 9.000000e-01 6.995611e-03 1.000000e+00 7.104437e-03 1.100000e+00 7.191523e-03 1.200000e+00 7.270752e-03 1.300000e+00 7.346161e-03 1.400000e+00 7.418531e-03 1.500000e+00 7.488125e-03 1.600000e+00 7.555176e-03 1.700000e+00 7.619929e-03 1.800000e+00 7.682628e-03 2.000000e-01 3.603565e-03 3.000000e-01 5.071371e-03 4.000000e-01 6.281326e-03 5.000000e-01 7.251718e-03 6.000000e-01 8.015715e-03 7.000000e-01 8.608979e-03 8.000000e-01 9.063670e-03 9.000000e-01 9.407070e-03 1.000000e+00 9.662614e-03 1.100000e+00 9.851179e-03 1.200000e+00 9.991500e-03 1.300000e+00 1.010011e-02 1.400000e+00 1.019103e-02 1.500000e+00 1.027396e-02 1.600000e+00 1.035306e-02 1.700000e+00 1.042945e-02 1.800000e+00 1.050344e-02 tmpk8ny_4pz/tests/hisim/nmos/reference/25_dcSweep_VFBCL.standard0000644000175000017500000002211413546075722024703 0ustar carstencarstenV(d) I(d) 2.000000e-01 1.811016e-03 3.000000e-01 2.727847e-03 4.000000e-01 3.652039e-03 5.000000e-01 4.583361e-03 6.000000e-01 5.521542e-03 7.000000e-01 6.466283e-03 8.000000e-01 7.417270e-03 9.000000e-01 8.374167e-03 1.000000e+00 9.336625e-03 1.100000e+00 1.030428e-02 1.200000e+00 1.127673e-02 1.300000e+00 1.225360e-02 1.400000e+00 1.323447e-02 1.500000e+00 1.421890e-02 1.600000e+00 1.520645e-02 1.700000e+00 1.619668e-02 1.800000e+00 1.718911e-02 2.000000e-01 1.780140e-03 3.000000e-01 2.681188e-03 4.000000e-01 3.589385e-03 5.000000e-01 4.504519e-03 6.000000e-01 5.426339e-03 7.000000e-01 6.354570e-03 8.000000e-01 7.288919e-03 9.000000e-01 8.229076e-03 1.000000e+00 9.174716e-03 1.100000e+00 1.012550e-02 1.200000e+00 1.108107e-02 1.300000e+00 1.204106e-02 1.400000e+00 1.300508e-02 1.500000e+00 1.397273e-02 1.600000e+00 1.494361e-02 1.700000e+00 1.591729e-02 1.800000e+00 1.689334e-02 2.000000e-01 1.750266e-03 3.000000e-01 2.636047e-03 4.000000e-01 3.528772e-03 5.000000e-01 4.428247e-03 6.000000e-01 5.334240e-03 7.000000e-01 6.246496e-03 8.000000e-01 7.164741e-03 9.000000e-01 8.088691e-03 1.000000e+00 9.018043e-03 1.100000e+00 9.952482e-03 1.200000e+00 1.089168e-02 1.300000e+00 1.183528e-02 1.400000e+00 1.278295e-02 1.500000e+00 1.373429e-02 1.600000e+00 1.468894e-02 1.700000e+00 1.564650e-02 1.800000e+00 1.660657e-02 2.000000e-01 1.721348e-03 3.000000e-01 2.592351e-03 4.000000e-01 3.470104e-03 5.000000e-01 4.354425e-03 6.000000e-01 5.245100e-03 7.000000e-01 6.141891e-03 8.000000e-01 7.044546e-03 9.000000e-01 7.952799e-03 1.000000e+00 8.866370e-03 1.100000e+00 9.784965e-03 1.200000e+00 1.070828e-02 1.300000e+00 1.163599e-02 1.400000e+00 1.256776e-02 1.500000e+00 1.350326e-02 1.600000e+00 1.444212e-02 1.700000e+00 1.538398e-02 1.800000e+00 1.632846e-02 2.000000e-01 1.693340e-03 3.000000e-01 2.550036e-03 4.000000e-01 3.413291e-03 5.000000e-01 4.282940e-03 6.000000e-01 5.158782e-03 7.000000e-01 6.040598e-03 8.000000e-01 6.928152e-03 9.000000e-01 7.821197e-03 1.000000e+00 8.719472e-03 1.100000e+00 9.622706e-03 1.200000e+00 1.053061e-02 1.300000e+00 1.144289e-02 1.400000e+00 1.235923e-02 1.500000e+00 1.327932e-02 1.600000e+00 1.420282e-02 1.700000e+00 1.512939e-02 1.800000e+00 1.605868e-02 2.000000e-01 1.652946e-03 3.000000e-01 2.489012e-03 4.000000e-01 3.331367e-03 5.000000e-01 4.179863e-03 6.000000e-01 5.034321e-03 7.000000e-01 5.894542e-03 8.000000e-01 6.760317e-03 9.000000e-01 7.631422e-03 1.000000e+00 8.507624e-03 1.100000e+00 9.388676e-03 1.200000e+00 1.027432e-02 1.300000e+00 1.116429e-02 1.400000e+00 1.205831e-02 1.500000e+00 1.295609e-02 1.600000e+00 1.385733e-02 1.700000e+00 1.476171e-02 1.800000e+00 1.566893e-02 2.000000e-01 1.614380e-03 3.000000e-01 2.430755e-03 4.000000e-01 3.253163e-03 5.000000e-01 4.081473e-03 6.000000e-01 4.915523e-03 7.000000e-01 5.755134e-03 8.000000e-01 6.600117e-03 9.000000e-01 7.450271e-03 1.000000e+00 8.305384e-03 1.100000e+00 9.165237e-03 1.200000e+00 1.002960e-02 1.300000e+00 1.089822e-02 1.400000e+00 1.177086e-02 1.500000e+00 1.264725e-02 1.600000e+00 1.352712e-02 1.700000e+00 1.441019e-02 1.800000e+00 1.529618e-02 2.000000e-01 1.789562e-03 3.000000e-01 2.695237e-03 4.000000e-01 3.607989e-03 5.000000e-01 4.527593e-03 6.000000e-01 5.453783e-03 7.000000e-01 6.386269e-03 8.000000e-01 7.324740e-03 9.000000e-01 8.268872e-03 1.000000e+00 9.218322e-03 1.100000e+00 1.017273e-02 1.200000e+00 1.113173e-02 1.300000e+00 1.209492e-02 1.400000e+00 1.306191e-02 1.500000e+00 1.403227e-02 1.600000e+00 1.500559e-02 1.700000e+00 1.598141e-02 1.800000e+00 1.695930e-02 2.000000e-01 1.759777e-03 3.000000e-01 2.650241e-03 4.000000e-01 3.547588e-03 5.000000e-01 4.451610e-03 6.000000e-01 5.362062e-03 7.000000e-01 6.278673e-03 8.000000e-01 7.201157e-03 9.000000e-01 8.129213e-03 1.000000e+00 9.062521e-03 1.100000e+00 1.000075e-02 1.200000e+00 1.094356e-02 1.300000e+00 1.189057e-02 1.400000e+00 1.284143e-02 1.500000e+00 1.379574e-02 1.600000e+00 1.475310e-02 1.700000e+00 1.571310e-02 1.800000e+00 1.667533e-02 2.000000e-01 1.730925e-03 3.000000e-01 2.606657e-03 4.000000e-01 3.489083e-03 5.000000e-01 4.378014e-03 6.000000e-01 5.273220e-03 7.000000e-01 6.174451e-03 8.000000e-01 7.081442e-03 9.000000e-01 7.993911e-03 1.000000e+00 8.911565e-03 1.100000e+00 9.834093e-03 1.200000e+00 1.076117e-02 1.300000e+00 1.169247e-02 1.400000e+00 1.262764e-02 1.500000e+00 1.356632e-02 1.600000e+00 1.450813e-02 1.700000e+00 1.545270e-02 1.800000e+00 1.639962e-02 2.000000e-01 1.702964e-03 3.000000e-01 2.564421e-03 4.000000e-01 3.432391e-03 5.000000e-01 4.306698e-03 6.000000e-01 5.187131e-03 7.000000e-01 6.073456e-03 8.000000e-01 6.965426e-03 9.000000e-01 7.862781e-03 1.000000e+00 8.765246e-03 1.100000e+00 9.672534e-03 1.200000e+00 1.058435e-02 1.300000e+00 1.150037e-02 1.400000e+00 1.242028e-02 1.500000e+00 1.334373e-02 1.600000e+00 1.427040e-02 1.700000e+00 1.519990e-02 1.800000e+00 1.613189e-02 2.000000e-01 1.675855e-03 3.000000e-01 2.523474e-03 4.000000e-01 3.377431e-03 5.000000e-01 4.237564e-03 6.000000e-01 5.103674e-03 7.000000e-01 5.975546e-03 8.000000e-01 6.852950e-03 9.000000e-01 7.735642e-03 1.000000e+00 8.623368e-03 1.100000e+00 9.515861e-03 1.200000e+00 1.041284e-02 1.300000e+00 1.131401e-02 1.400000e+00 1.221908e-02 1.500000e+00 1.312773e-02 1.600000e+00 1.403963e-02 1.700000e+00 1.495445e-02 1.800000e+00 1.587186e-02 2.000000e-01 1.636707e-03 3.000000e-01 2.464348e-03 4.000000e-01 3.298076e-03 5.000000e-01 4.137745e-03 6.000000e-01 4.983178e-03 7.000000e-01 5.834181e-03 8.000000e-01 6.690545e-03 9.000000e-01 7.552054e-03 1.000000e+00 8.418477e-03 1.100000e+00 9.289572e-03 1.200000e+00 1.016509e-02 1.300000e+00 1.104477e-02 1.400000e+00 1.192833e-02 1.500000e+00 1.281549e-02 1.600000e+00 1.370597e-02 1.700000e+00 1.459945e-02 1.800000e+00 1.549563e-02 2.000000e-01 1.599277e-03 3.000000e-01 2.407821e-03 4.000000e-01 3.222214e-03 5.000000e-01 4.042324e-03 6.000000e-01 4.867992e-03 7.000000e-01 5.699044e-03 8.000000e-01 6.535291e-03 9.000000e-01 7.376536e-03 1.000000e+00 8.222573e-03 1.100000e+00 9.073183e-03 1.200000e+00 9.928140e-03 1.300000e+00 1.078721e-02 1.400000e+00 1.165013e-02 1.500000e+00 1.251667e-02 1.600000e+00 1.338654e-02 1.700000e+00 1.425948e-02 1.800000e+00 1.513521e-02 2.000000e-01 1.746270e-03 3.000000e-01 2.629482e-03 4.000000e-01 3.519227e-03 5.000000e-01 4.415287e-03 6.000000e-01 5.317403e-03 7.000000e-01 6.225292e-03 8.000000e-01 7.138655e-03 9.000000e-01 8.057178e-03 1.000000e+00 8.980531e-03 1.100000e+00 9.908370e-03 1.200000e+00 1.084033e-02 1.300000e+00 1.177605e-02 1.400000e+00 1.271514e-02 1.500000e+00 1.365720e-02 1.600000e+00 1.460182e-02 1.700000e+00 1.554858e-02 1.800000e+00 1.649705e-02 2.000000e-01 1.718557e-03 3.000000e-01 2.587641e-03 4.000000e-01 3.463097e-03 5.000000e-01 4.344721e-03 6.000000e-01 5.232274e-03 7.000000e-01 6.125494e-03 8.000000e-01 7.024101e-03 9.000000e-01 7.927805e-03 1.000000e+00 8.836299e-03 1.100000e+00 9.749261e-03 1.200000e+00 1.066636e-02 1.300000e+00 1.158724e-02 1.400000e+00 1.251156e-02 1.500000e+00 1.343893e-02 1.600000e+00 1.436898e-02 1.700000e+00 1.530131e-02 1.800000e+00 1.623553e-02 2.000000e-01 1.691650e-03 3.000000e-01 2.547019e-03 4.000000e-01 3.408602e-03 5.000000e-01 4.276210e-03 6.000000e-01 5.149621e-03 7.000000e-01 6.028591e-03 8.000000e-01 6.912861e-03 9.000000e-01 7.802160e-03 1.000000e+00 8.696201e-03 1.100000e+00 9.594686e-03 1.200000e+00 1.049730e-02 1.300000e+00 1.140373e-02 1.400000e+00 1.231364e-02 1.500000e+00 1.322667e-02 1.600000e+00 1.414247e-02 1.700000e+00 1.506068e-02 1.800000e+00 1.598092e-02 2.000000e-01 1.665517e-03 3.000000e-01 2.507568e-03 4.000000e-01 3.355678e-03 5.000000e-01 4.209673e-03 6.000000e-01 5.069347e-03 7.000000e-01 5.934472e-03 8.000000e-01 6.804807e-03 9.000000e-01 7.680100e-03 1.000000e+00 8.560083e-03 1.100000e+00 9.444479e-03 1.200000e+00 1.033300e-02 1.300000e+00 1.122534e-02 1.400000e+00 1.212118e-02 1.500000e+00 1.302022e-02 1.600000e+00 1.392210e-02 1.700000e+00 1.482649e-02 1.800000e+00 1.573305e-02 2.000000e-01 1.640128e-03 3.000000e-01 2.469240e-03 4.000000e-01 3.304262e-03 5.000000e-01 4.145032e-03 6.000000e-01 4.991358e-03 7.000000e-01 5.843028e-03 8.000000e-01 6.699817e-03 9.000000e-01 7.561490e-03 1.000000e+00 8.427797e-03 1.100000e+00 9.298479e-03 1.200000e+00 1.017327e-02 1.300000e+00 1.105188e-02 1.400000e+00 1.193402e-02 1.500000e+00 1.281938e-02 1.600000e+00 1.370767e-02 1.700000e+00 1.459855e-02 1.800000e+00 1.549169e-02 2.000000e-01 1.603375e-03 3.000000e-01 2.413760e-03 4.000000e-01 3.229838e-03 5.000000e-01 4.051465e-03 6.000000e-01 4.878468e-03 7.000000e-01 5.710655e-03 8.000000e-01 6.547824e-03 9.000000e-01 7.389761e-03 1.000000e+00 8.236243e-03 1.100000e+00 9.087035e-03 1.200000e+00 9.941893e-03 1.300000e+00 1.080056e-02 1.400000e+00 1.166277e-02 1.500000e+00 1.252826e-02 1.600000e+00 1.339674e-02 1.700000e+00 1.426791e-02 1.800000e+00 1.514148e-02 2.000000e-01 1.568136e-03 3.000000e-01 2.360568e-03 4.000000e-01 3.158487e-03 5.000000e-01 3.961762e-03 6.000000e-01 4.770238e-03 7.000000e-01 5.583742e-03 8.000000e-01 6.402090e-03 9.000000e-01 7.225089e-03 1.000000e+00 8.052536e-03 1.100000e+00 8.884220e-03 1.200000e+00 9.719918e-03 1.300000e+00 1.055940e-02 1.400000e+00 1.140243e-02 1.500000e+00 1.224875e-02 1.600000e+00 1.309811e-02 1.700000e+00 1.395024e-02 1.800000e+00 1.480488e-02 tmpk8ny_4pz/tests/hisim/nmos/reference/51_acFreq_COGIDL=1.standard0000644000175000017500000002533013546075722024777 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258.925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584.893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995.262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511.886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162.278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981.072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011.872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309.573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943.282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589.25 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848.93 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952.62 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118.86 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622.78 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810.72 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118.72 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095.73 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432.82 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 125892.5 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 158489.3 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 199526.2 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 251188.6 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 316227.8 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 398107.2 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 501187.2 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 630957.3 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 794328.2 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 1000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589250 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848930 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952620 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118860 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622780 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810720 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118720 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095730 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432820 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258.925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584.893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 1995.262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511.886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162.278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981.072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011.872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309.573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943.282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589.25 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848.93 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 19952.62 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118.86 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622.78 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810.72 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118.72 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095.73 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432.82 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 125892.5 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 158489.3 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 199526.2 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 251188.6 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 316227.8 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 398107.2 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 501187.2 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 630957.3 1.95109670680967e-14 1.51047556203098e-14 3.63962547928741e-15 794328.2 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 1000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 1995262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589250 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848930 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 19952620 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118860 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622780 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810720 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118720 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095730 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432820 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258.925 1.92253810991621e-14 1.48903692202894e-14 3.56434127432084e-15 1584.893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995.262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511.886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162.278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981.072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011.872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309.573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943.282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 12589.25 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848.93 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952.62 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118.86 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622.78 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810.72 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118.72 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095.73 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432.82 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 125892.5 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 158489.3 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 199526.2 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 251188.6 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 316227.8 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 398107.2 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 501187.2 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 630957.3 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 794328.2 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 1000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258925 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 1584893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000000 1.92253759986944e-14 1.4890367771438e-14 3.56434020406966e-15 12589250 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848930 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952620 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118860 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622780 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810720 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118720 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095730 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432820 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/54_acFreq_COADOV=0.standard0000644000175000017500000002530313546075722025013 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.19966587510747e-14 1.1232993545384e-14 6.61482957577397e-19 1258.925 1.19966626350217e-14 1.12329982992676e-14 6.61483177107996e-19 1584.893 1.1996664355877e-14 1.12330004393029e-14 6.61483059557916e-19 1995.262 1.19966569416321e-14 1.12329969918717e-14 6.61483050932846e-19 2511.886 1.19966581963021e-14 1.12329966021416e-14 6.61482904929695e-19 3162.278 1.19966559260994e-14 1.12329907412198e-14 6.61482803109009e-19 3981.072 1.19966595590059e-14 1.12329935027452e-14 6.61482914887385e-19 5011.872 1.19966610224071e-14 1.12329962874613e-14 6.61482873620703e-19 6309.573 1.19966603850384e-14 1.12329953974691e-14 6.61482869441969e-19 7943.282 1.19966588659062e-14 1.12329947192706e-14 6.61483007387139e-19 10000 1.19966587510747e-14 1.1232993545384e-14 6.61482957577397e-19 12589.25 1.19966626350217e-14 1.12329982992676e-14 6.61483177107996e-19 15848.93 1.1996664355877e-14 1.12330004393029e-14 6.61483059557916e-19 19952.62 1.19966569416321e-14 1.12329969918717e-14 6.61483050932846e-19 25118.86 1.19966581963021e-14 1.12329966021416e-14 6.61482904929695e-19 31622.78 1.19966559260994e-14 1.12329907412198e-14 6.61482803109009e-19 39810.72 1.19966595590059e-14 1.12329935027452e-14 6.61482914887384e-19 50118.72 1.19966610224071e-14 1.12329962874613e-14 6.61482873620703e-19 63095.73 1.19966603850384e-14 1.12329953974691e-14 6.61482869441969e-19 79432.82 1.19966588659062e-14 1.12329947192706e-14 6.61483007387139e-19 100000 1.19966587510747e-14 1.1232993545384e-14 6.61482957577397e-19 125892.5 1.19966626350217e-14 1.12329982992676e-14 6.61483177107996e-19 158489.3 1.1996664355877e-14 1.12330004393029e-14 6.61483059557916e-19 199526.2 1.19966569416321e-14 1.12329969918717e-14 6.61483050932846e-19 251188.6 1.19966581963021e-14 1.12329966021416e-14 6.61482904929695e-19 316227.8 1.19966559260994e-14 1.12329907412198e-14 6.61482803109009e-19 398107.2 1.19966595590059e-14 1.12329935027452e-14 6.61482914887384e-19 501187.2 1.19966610224071e-14 1.12329962874613e-14 6.61482873620703e-19 630957.3 1.19966603850384e-14 1.12329953974691e-14 6.61482869441969e-19 794328.2 1.19966588659062e-14 1.12329947192706e-14 6.61483007387139e-19 1000000 1.19966587510747e-14 1.1232993545384e-14 6.61482957577397e-19 1258925 1.19966626350217e-14 1.12329982992676e-14 6.61483177107996e-19 1584893 1.1996664355877e-14 1.12330004393029e-14 6.61483059557916e-19 1995262 1.19966569416321e-14 1.12329969918717e-14 6.61483050932846e-19 2511886 1.19966581963021e-14 1.12329966021416e-14 6.61482904929695e-19 3162278 1.19966559260994e-14 1.12329907412198e-14 6.61482803109009e-19 3981072 1.19966595590059e-14 1.12329935027452e-14 6.61482914887385e-19 5011872 1.19966610224071e-14 1.12329962874613e-14 6.61482873620703e-19 6309573 1.19966603850384e-14 1.12329953974691e-14 6.61482869441969e-19 7943282 1.19966588659062e-14 1.12329947192706e-14 6.61483007387139e-19 10000000 1.19966587510747e-14 1.1232993545384e-14 6.61482957577397e-19 12589250 1.19966626350217e-14 1.12329982992676e-14 6.61483177107996e-19 15848930 1.1996664355877e-14 1.12330004393029e-14 6.61483059557916e-19 19952620 1.19966569416321e-14 1.12329969918717e-14 6.61483050932846e-19 25118860 1.19966581963021e-14 1.12329966021416e-14 6.61482904929695e-19 31622780 1.19966559260994e-14 1.12329907412198e-14 6.61482803109009e-19 39810720 1.19966595590059e-14 1.12329935027452e-14 6.61482914887385e-19 50118720 1.19966610224071e-14 1.12329962874613e-14 6.61482873620703e-19 63095730 1.19966603850384e-14 1.12329953974691e-14 6.61482869441969e-19 79432820 1.19966588659062e-14 1.12329947192706e-14 6.61483007387139e-19 100000000 1.19966587510747e-14 1.1232993545384e-14 6.61482957577397e-19 1000 1.18624799932022e-14 1.10952990548186e-14 5.97369298612144e-19 1258.925 1.18624841173181e-14 1.10953014766084e-14 5.97369496543663e-19 1584.893 1.18624831619671e-14 1.10953045456573e-14 5.97369413279123e-19 1995.262 1.18624818158717e-14 1.10952961895412e-14 5.97369420169496e-19 2511.886 1.18624791678805e-14 1.10953010529298e-14 5.97369381079182e-19 3162.278 1.18624782610481e-14 1.10952950646205e-14 5.97369433283237e-19 3981.072 1.18624776976897e-14 1.10952975830302e-14 5.97369139280019e-19 5011.872 1.18624809602386e-14 1.10952977061258e-14 5.97369293813748e-19 6309.573 1.18624819225207e-14 1.10952981366807e-14 5.97369355975215e-19 7943.282 1.18624809647058e-14 1.10952984225245e-14 5.97369264956487e-19 10000 1.18624799932022e-14 1.10952990548186e-14 5.97369298612144e-19 12589.25 1.18624841173181e-14 1.10953014766084e-14 5.97369496543663e-19 15848.93 1.18624831619671e-14 1.10953045456573e-14 5.97369413279123e-19 19952.62 1.18624818158717e-14 1.10952961895412e-14 5.97369420169496e-19 25118.86 1.18624791678805e-14 1.10953010529298e-14 5.97369381079182e-19 31622.78 1.18624782610481e-14 1.10952950646205e-14 5.97369433283237e-19 39810.72 1.18624776976897e-14 1.10952975830302e-14 5.97369139280019e-19 50118.72 1.18624809602386e-14 1.10952977061258e-14 5.97369293813748e-19 63095.73 1.18624819225207e-14 1.10952981366807e-14 5.97369355975215e-19 79432.82 1.18624809647058e-14 1.10952984225245e-14 5.97369264956487e-19 100000 1.18624799932022e-14 1.10952990548186e-14 5.97369298612144e-19 125892.5 1.18624841173181e-14 1.10953014766084e-14 5.97369496543663e-19 158489.3 1.18624831619671e-14 1.10953045456573e-14 5.97369413279123e-19 199526.2 1.18624818158717e-14 1.10952961895412e-14 5.97369420169496e-19 251188.6 1.18624791678805e-14 1.10953010529298e-14 5.97369381079182e-19 316227.8 1.18624782610481e-14 1.10952950646205e-14 5.97369433283237e-19 398107.2 1.18624776976897e-14 1.10952975830302e-14 5.97369139280019e-19 501187.2 1.18624809602386e-14 1.10952977061258e-14 5.97369293813748e-19 630957.3 1.18624819225207e-14 1.10952981366807e-14 5.97369355975215e-19 794328.2 1.18624809647058e-14 1.10952984225245e-14 5.97369264956487e-19 1000000 1.18624799932022e-14 1.10952990548186e-14 5.97369298612144e-19 1258925 1.18624841173181e-14 1.10953014766084e-14 5.97369496543663e-19 1584893 1.18624831619671e-14 1.10953045456573e-14 5.97369413279123e-19 1995262 1.18624818158717e-14 1.10952961895412e-14 5.97369420169496e-19 2511886 1.18624791678805e-14 1.10953010529298e-14 5.97369381079182e-19 3162278 1.18624782610481e-14 1.10952950646205e-14 5.97369433283237e-19 3981072 1.18624776976897e-14 1.10952975830302e-14 5.97369139280019e-19 5011872 1.18624809602386e-14 1.10952977061258e-14 5.97369293813748e-19 6309573 1.18624819225207e-14 1.10952981366807e-14 5.97369355975215e-19 7943282 1.18624809647058e-14 1.10952984225245e-14 5.97369264956487e-19 10000000 1.18624799932022e-14 1.10952990548186e-14 5.97369298612144e-19 12589250 1.18624841173181e-14 1.10953014766084e-14 5.97369496543663e-19 15848930 1.18624831619671e-14 1.10953045456573e-14 5.97369413279123e-19 19952620 1.18624818158717e-14 1.10952961895412e-14 5.97369420169496e-19 25118860 1.18624791678805e-14 1.10953010529298e-14 5.97369381079182e-19 31622780 1.18624782610481e-14 1.10952950646205e-14 5.97369433283237e-19 39810720 1.18624776976897e-14 1.10952975830302e-14 5.97369139280019e-19 50118720 1.18624809602386e-14 1.10952977061258e-14 5.97369293813748e-19 63095730 1.18624819225207e-14 1.10952981366807e-14 5.97369355975215e-19 79432820 1.18624809647058e-14 1.10952984225245e-14 5.97369264956487e-19 100000000 1.18624799932022e-14 1.10952990548186e-14 5.97369298612144e-19 1000 1.16710961741342e-14 1.08998440523063e-14 5.83200052338559e-19 1258.925 1.16711012227059e-14 1.08998478159318e-14 5.83200322949686e-19 1584.893 1.16711027403585e-14 1.08998470723553e-14 5.8320015234462e-19 1995.262 1.1671098200607e-14 1.08998444859263e-14 5.83200188679503e-19 2511.886 1.16710980679384e-14 1.08998458577299e-14 5.83200210002624e-19 3162.278 1.16710964196663e-14 1.0899841590417e-14 5.8320025172214e-19 3981.072 1.16710954409585e-14 1.08998455749339e-14 5.83200167975147e-19 5011.872 1.1671096381577e-14 1.08998452366221e-14 5.83200267937155e-19 6309.573 1.16710971331346e-14 1.0899844657968e-14 5.83200076028219e-19 7943.282 1.16710970776141e-14 1.08998451383068e-14 5.83200109045077e-19 10000 1.16710961741342e-14 1.08998440523063e-14 5.83200052338559e-19 12589.25 1.16711012227059e-14 1.08998478159318e-14 5.83200322949686e-19 15848.93 1.16711027403585e-14 1.08998470723553e-14 5.8320015234462e-19 19952.62 1.1671098200607e-14 1.08998444859263e-14 5.83200188679503e-19 25118.86 1.16710980679384e-14 1.08998458577299e-14 5.83200210002624e-19 31622.78 1.16710964196663e-14 1.0899841590417e-14 5.8320025172214e-19 39810.72 1.16710954409585e-14 1.08998455749339e-14 5.83200167975147e-19 50118.72 1.1671096381577e-14 1.08998452366221e-14 5.83200267937155e-19 63095.73 1.16710971331346e-14 1.0899844657968e-14 5.83200076028219e-19 79432.82 1.16710970776141e-14 1.08998451383068e-14 5.83200109045077e-19 100000 1.16710961741342e-14 1.08998440523063e-14 5.83200052338559e-19 125892.5 1.16711012227059e-14 1.08998478159318e-14 5.83200322949686e-19 158489.3 1.16711027403585e-14 1.08998470723553e-14 5.8320015234462e-19 199526.2 1.1671098200607e-14 1.08998444859263e-14 5.83200188679503e-19 251188.6 1.16710980679384e-14 1.08998458577299e-14 5.83200210002624e-19 316227.8 1.16710964196663e-14 1.0899841590417e-14 5.8320025172214e-19 398107.2 1.16710954409585e-14 1.08998455749339e-14 5.83200167975147e-19 501187.2 1.1671096381577e-14 1.08998452366221e-14 5.83200267937155e-19 630957.3 1.16710971331346e-14 1.0899844657968e-14 5.83200076028219e-19 794328.2 1.16710970776141e-14 1.08998451383068e-14 5.83200109045077e-19 1000000 1.16710961741342e-14 1.08998440523063e-14 5.83200052338559e-19 1258925 1.16711012227059e-14 1.08998478159318e-14 5.83200322949686e-19 1584893 1.16711027403585e-14 1.08998470723553e-14 5.8320015234462e-19 1995262 1.1671098200607e-14 1.08998444859263e-14 5.83200188679503e-19 2511886 1.16710980679384e-14 1.08998458577299e-14 5.83200210002624e-19 3162278 1.16710964196663e-14 1.0899841590417e-14 5.8320025172214e-19 3981072 1.16710954409585e-14 1.08998455749339e-14 5.83200167975147e-19 5011872 1.1671096381577e-14 1.08998452366221e-14 5.83200267937155e-19 6309573 1.16710971331346e-14 1.0899844657968e-14 5.83200076028219e-19 7943282 1.16710970776141e-14 1.08998451383068e-14 5.83200109045077e-19 10000000 1.16710961741342e-14 1.08998440523063e-14 5.83200052338559e-19 12589250 1.16711012227059e-14 1.08998478159318e-14 5.83200322949686e-19 15848930 1.16711027403585e-14 1.08998470723553e-14 5.8320015234462e-19 19952620 1.1671098200607e-14 1.08998444859263e-14 5.83200188679503e-19 25118860 1.16710980679384e-14 1.08998458577299e-14 5.83200210002624e-19 31622780 1.16710964196663e-14 1.0899841590417e-14 5.8320025172214e-19 39810720 1.16710954409585e-14 1.08998455749339e-14 5.83200167975147e-19 50118720 1.1671096381577e-14 1.08998452366221e-14 5.83200267937155e-19 63095730 1.16710971331346e-14 1.0899844657968e-14 5.83200076028219e-19 79432820 1.16710970776141e-14 1.08998451383068e-14 5.83200109045077e-19 100000000 1.16710961741342e-14 1.08998440523063e-14 5.83200052338559e-19 tmpk8ny_4pz/tests/hisim/nmos/reference/19_dcSweep_CORG=0.standard0000644000175000017500000002211413546075722024761 0ustar carstencarstenV(d) I(d) 2.000000e-01 1.031340e-06 3.000000e-01 1.187668e-06 4.000000e-01 1.363411e-06 5.000000e-01 1.553811e-06 6.000000e-01 1.754026e-06 7.000000e-01 1.961205e-06 8.000000e-01 2.173905e-06 9.000000e-01 2.391410e-06 1.000000e+00 2.613350e-06 1.100000e+00 2.839516e-06 1.200000e+00 3.069773e-06 1.300000e+00 3.304026e-06 1.400000e+00 3.542204e-06 1.500000e+00 3.784246e-06 1.600000e+00 4.030100e-06 1.700000e+00 4.279721e-06 1.800000e+00 4.533070e-06 2.000000e-01 3.625488e-04 3.000000e-01 3.836434e-04 4.000000e-01 4.033947e-04 5.000000e-01 4.229012e-04 6.000000e-01 4.423753e-04 7.000000e-01 4.618402e-04 8.000000e-01 4.813047e-04 9.000000e-01 5.007840e-04 1.000000e+00 5.202960e-04 1.100000e+00 5.398574e-04 1.200000e+00 5.594823e-04 1.300000e+00 5.791821e-04 1.400000e+00 5.989658e-04 1.500000e+00 6.188407e-04 1.600000e+00 6.388122e-04 1.700000e+00 6.588847e-04 1.800000e+00 6.790616e-04 2.000000e-01 1.846855e-03 3.000000e-01 1.974260e-03 4.000000e-01 2.031600e-03 5.000000e-01 2.082672e-03 6.000000e-01 2.130364e-03 7.000000e-01 2.175738e-03 8.000000e-01 2.219464e-03 9.000000e-01 2.261982e-03 1.000000e+00 2.303587e-03 1.100000e+00 2.344487e-03 1.200000e+00 2.384830e-03 1.300000e+00 2.424728e-03 1.400000e+00 2.464261e-03 1.500000e+00 2.503492e-03 1.600000e+00 2.542472e-03 1.700000e+00 2.581239e-03 1.800000e+00 2.619826e-03 2.000000e-01 3.343576e-03 3.000000e-01 3.817799e-03 4.000000e-01 4.017737e-03 5.000000e-01 4.104539e-03 6.000000e-01 4.168574e-03 7.000000e-01 4.228356e-03 8.000000e-01 4.284866e-03 9.000000e-01 4.338706e-03 1.000000e+00 4.390424e-03 1.100000e+00 4.440474e-03 1.200000e+00 4.489207e-03 1.300000e+00 4.536889e-03 1.400000e+00 4.583720e-03 1.500000e+00 4.629852e-03 1.600000e+00 4.675400e-03 1.700000e+00 4.720456e-03 1.800000e+00 4.765089e-03 2.000000e-01 4.575745e-03 3.000000e-01 5.436588e-03 4.000000e-01 5.883336e-03 5.000000e-01 6.122649e-03 6.000000e-01 6.251933e-03 7.000000e-01 6.328676e-03 8.000000e-01 6.392836e-03 9.000000e-01 6.453950e-03 1.000000e+00 6.512526e-03 1.100000e+00 6.568841e-03 1.200000e+00 6.623216e-03 1.300000e+00 6.675967e-03 1.400000e+00 6.727368e-03 1.500000e+00 6.777651e-03 1.600000e+00 6.827000e-03 1.700000e+00 6.875564e-03 1.800000e+00 6.923462e-03 2.000000e-01 5.870243e-03 3.000000e-01 7.364527e-03 4.000000e-01 8.250873e-03 5.000000e-01 8.791206e-03 6.000000e-01 9.132925e-03 7.000000e-01 9.355002e-03 8.000000e-01 9.502595e-03 9.000000e-01 9.604011e-03 1.000000e+00 9.676653e-03 1.100000e+00 9.739827e-03 1.200000e+00 9.800793e-03 1.300000e+00 9.859958e-03 1.400000e+00 9.917427e-03 1.500000e+00 9.973346e-03 1.600000e+00 1.002789e-02 1.700000e+00 1.008122e-02 1.800000e+00 1.013349e-02 2.000000e-01 6.544617e-03 3.000000e-01 8.629425e-03 4.000000e-01 1.002415e-02 5.000000e-01 1.095009e-02 6.000000e-01 1.157533e-02 7.000000e-01 1.200797e-02 8.000000e-01 1.231437e-02 9.000000e-01 1.253558e-02 1.000000e+00 1.269838e-02 1.100000e+00 1.282132e-02 1.200000e+00 1.291696e-02 1.300000e+00 1.299134e-02 1.400000e+00 1.305478e-02 1.500000e+00 1.311590e-02 1.600000e+00 1.317555e-02 1.700000e+00 1.323383e-02 1.800000e+00 1.329082e-02 2.000000e-01 6.168441e-06 3.000000e-01 6.992527e-06 4.000000e-01 7.898833e-06 5.000000e-01 8.873147e-06 6.000000e-01 9.893832e-06 7.000000e-01 1.094768e-05 8.000000e-01 1.202799e-05 9.000000e-01 1.313151e-05 1.000000e+00 1.425659e-05 1.100000e+00 1.540231e-05 1.200000e+00 1.656813e-05 1.300000e+00 1.775364e-05 1.400000e+00 1.895856e-05 1.500000e+00 2.018263e-05 1.600000e+00 2.142567e-05 1.700000e+00 2.268746e-05 1.800000e+00 2.396787e-05 2.000000e-01 3.314500e-04 3.000000e-01 3.516443e-04 4.000000e-01 3.692608e-04 5.000000e-01 3.862621e-04 6.000000e-01 4.030308e-04 7.000000e-01 4.196770e-04 8.000000e-01 4.362533e-04 9.000000e-01 4.527971e-04 1.000000e+00 4.693380e-04 1.100000e+00 4.858992e-04 1.200000e+00 5.024990e-04 1.300000e+00 5.191518e-04 1.400000e+00 5.358687e-04 1.500000e+00 5.526585e-04 1.600000e+00 5.695281e-04 1.700000e+00 5.864832e-04 1.800000e+00 6.035282e-04 2.000000e-01 1.414259e-03 3.000000e-01 1.567979e-03 4.000000e-01 1.628986e-03 5.000000e-01 1.678046e-03 6.000000e-01 1.722925e-03 7.000000e-01 1.764987e-03 8.000000e-01 1.805080e-03 9.000000e-01 1.843763e-03 1.000000e+00 1.881413e-03 1.100000e+00 1.918285e-03 1.200000e+00 1.954559e-03 1.300000e+00 1.990363e-03 1.400000e+00 2.025794e-03 1.500000e+00 2.060923e-03 1.600000e+00 2.095806e-03 1.700000e+00 2.130488e-03 1.800000e+00 2.165002e-03 2.000000e-01 2.542714e-03 3.000000e-01 3.063220e-03 4.000000e-01 3.310856e-03 5.000000e-01 3.420396e-03 6.000000e-01 3.491904e-03 7.000000e-01 3.556333e-03 8.000000e-01 3.616445e-03 9.000000e-01 3.673005e-03 1.000000e+00 3.726718e-03 1.100000e+00 3.778185e-03 1.200000e+00 3.827884e-03 1.300000e+00 3.876176e-03 1.400000e+00 3.923336e-03 1.500000e+00 3.969571e-03 1.600000e+00 4.015041e-03 1.700000e+00 4.059867e-03 1.800000e+00 4.104148e-03 2.000000e-01 3.486631e-03 3.000000e-01 4.388014e-03 4.000000e-01 4.924867e-03 5.000000e-01 5.232529e-03 6.000000e-01 5.399700e-03 7.000000e-01 5.495663e-03 8.000000e-01 5.570693e-03 9.000000e-01 5.640525e-03 1.000000e+00 5.706719e-03 1.100000e+00 5.769675e-03 1.200000e+00 5.829825e-03 1.300000e+00 5.887607e-03 1.400000e+00 5.943411e-03 1.500000e+00 5.997567e-03 1.600000e+00 6.050344e-03 1.700000e+00 6.101961e-03 1.800000e+00 6.152594e-03 2.000000e-01 4.523458e-03 3.000000e-01 5.961592e-03 4.000000e-01 6.939779e-03 5.000000e-01 7.596286e-03 6.000000e-01 8.035751e-03 7.000000e-01 8.327590e-03 8.000000e-01 8.519006e-03 9.000000e-01 8.645414e-03 1.000000e+00 8.735120e-03 1.100000e+00 8.810856e-03 1.200000e+00 8.882452e-03 1.300000e+00 8.951286e-03 1.400000e+00 9.017592e-03 1.500000e+00 9.081583e-03 1.600000e+00 9.143495e-03 1.700000e+00 9.203569e-03 1.800000e+00 9.262028e-03 2.000000e-01 5.146662e-03 3.000000e-01 7.031863e-03 4.000000e-01 8.439639e-03 5.000000e-01 9.465363e-03 6.000000e-01 1.020835e-02 7.000000e-01 1.074777e-02 8.000000e-01 1.114061e-02 9.000000e-01 1.142684e-02 1.000000e+00 1.163539e-02 1.100000e+00 1.178842e-02 1.200000e+00 1.190317e-02 1.300000e+00 1.199275e-02 1.400000e+00 1.206906e-02 1.500000e+00 1.214087e-02 1.600000e+00 1.221034e-02 1.700000e+00 1.227777e-02 1.800000e+00 1.234331e-02 2.000000e-01 2.757247e-05 3.000000e-01 3.088943e-05 4.000000e-01 3.432614e-05 5.000000e-01 3.796733e-05 6.000000e-01 4.175784e-05 7.000000e-01 4.565691e-05 8.000000e-01 4.964358e-05 9.000000e-01 5.370790e-05 1.000000e+00 5.784506e-05 1.100000e+00 6.205260e-05 1.200000e+00 6.632908e-05 1.300000e+00 7.067356e-05 1.400000e+00 7.508532e-05 1.500000e+00 7.956378e-05 1.600000e+00 8.410843e-05 1.700000e+00 8.871881e-05 1.800000e+00 9.339451e-05 2.000000e-01 3.233979e-04 3.000000e-01 3.491751e-04 4.000000e-01 3.669805e-04 5.000000e-01 3.832630e-04 6.000000e-01 3.989944e-04 7.000000e-01 4.144367e-04 8.000000e-01 4.297076e-04 9.000000e-01 4.448775e-04 1.000000e+00 4.599945e-04 1.100000e+00 4.750927e-04 1.200000e+00 4.901974e-04 1.300000e+00 5.053275e-04 1.400000e+00 5.204977e-04 1.500000e+00 5.357192e-04 1.600000e+00 5.510012e-04 1.700000e+00 5.663506e-04 1.800000e+00 5.817735e-04 2.000000e-01 1.006788e-03 3.000000e-01 1.176557e-03 4.000000e-01 1.246390e-03 5.000000e-01 1.291247e-03 6.000000e-01 1.330236e-03 7.000000e-01 1.366185e-03 8.000000e-01 1.400047e-03 9.000000e-01 1.432420e-03 1.000000e+00 1.463716e-03 1.100000e+00 1.494215e-03 1.200000e+00 1.524116e-03 1.300000e+00 1.553558e-03 1.400000e+00 1.582644e-03 1.500000e+00 1.611452e-03 1.600000e+00 1.640038e-03 1.700000e+00 1.668448e-03 1.800000e+00 1.696719e-03 2.000000e-01 1.720602e-03 3.000000e-01 2.182212e-03 4.000000e-01 2.443001e-03 5.000000e-01 2.573625e-03 6.000000e-01 2.648907e-03 7.000000e-01 2.710122e-03 8.000000e-01 2.766323e-03 9.000000e-01 2.818908e-03 1.000000e+00 2.868539e-03 1.100000e+00 2.915786e-03 1.200000e+00 2.961129e-03 1.300000e+00 3.004954e-03 1.400000e+00 3.047557e-03 1.500000e+00 3.089169e-03 1.600000e+00 3.129968e-03 1.700000e+00 3.170092e-03 1.800000e+00 3.209650e-03 2.000000e-01 2.344551e-03 3.000000e-01 3.101925e-03 4.000000e-01 3.621184e-03 5.000000e-01 3.954178e-03 6.000000e-01 4.151658e-03 7.000000e-01 4.267092e-03 8.000000e-01 4.348380e-03 9.000000e-01 4.419815e-03 1.000000e+00 4.486875e-03 1.100000e+00 4.550435e-03 1.200000e+00 4.610906e-03 1.300000e+00 4.668696e-03 1.400000e+00 4.724200e-03 1.500000e+00 4.777773e-03 1.600000e+00 4.829716e-03 1.700000e+00 4.880282e-03 1.800000e+00 4.929678e-03 2.000000e-01 3.084402e-03 3.000000e-01 4.235437e-03 4.000000e-01 5.122679e-03 5.000000e-01 5.785658e-03 6.000000e-01 6.267956e-03 7.000000e-01 6.608144e-03 8.000000e-01 6.840111e-03 9.000000e-01 6.995611e-03 1.000000e+00 7.104437e-03 1.100000e+00 7.191523e-03 1.200000e+00 7.270752e-03 1.300000e+00 7.346161e-03 1.400000e+00 7.418531e-03 1.500000e+00 7.488125e-03 1.600000e+00 7.555176e-03 1.700000e+00 7.619929e-03 1.800000e+00 7.682628e-03 2.000000e-01 3.603565e-03 3.000000e-01 5.071371e-03 4.000000e-01 6.281326e-03 5.000000e-01 7.251718e-03 6.000000e-01 8.015715e-03 7.000000e-01 8.608979e-03 8.000000e-01 9.063670e-03 9.000000e-01 9.407070e-03 1.000000e+00 9.662614e-03 1.100000e+00 9.851179e-03 1.200000e+00 9.991500e-03 1.300000e+00 1.010011e-02 1.400000e+00 1.019103e-02 1.500000e+00 1.027396e-02 1.600000e+00 1.035306e-02 1.700000e+00 1.042945e-02 1.800000e+00 1.050344e-02 tmpk8ny_4pz/tests/hisim/nmos/reference/47_acFreq_COISUB=1.standard0000644000175000017500000002533013546075722025027 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258.925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584.893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995.262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511.886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162.278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981.072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011.872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309.573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943.282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589.25 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848.93 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952.62 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118.86 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622.78 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810.72 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118.72 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095.73 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432.82 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 125892.5 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 158489.3 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 199526.2 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 251188.6 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 316227.8 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 398107.2 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 501187.2 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 630957.3 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 794328.2 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 1000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589250 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848930 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952620 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118860 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622780 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810720 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118720 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095730 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432820 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258.925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584.893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 1995.262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511.886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162.278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981.072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011.872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309.573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943.282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589.25 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848.93 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 19952.62 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118.86 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622.78 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810.72 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118.72 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095.73 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432.82 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 125892.5 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 158489.3 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 199526.2 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 251188.6 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 316227.8 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 398107.2 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 501187.2 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 630957.3 1.95109670680967e-14 1.51047556203098e-14 3.63962547928741e-15 794328.2 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 1000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 1995262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589250 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848930 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 19952620 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118860 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622780 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810720 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118720 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095730 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432820 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258.925 1.92253810991621e-14 1.48903692202894e-14 3.56434127432084e-15 1584.893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995.262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511.886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162.278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981.072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011.872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309.573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943.282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 12589.25 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848.93 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952.62 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118.86 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622.78 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810.72 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118.72 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095.73 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432.82 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 125892.5 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 158489.3 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 199526.2 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 251188.6 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 316227.8 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 398107.2 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 501187.2 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 630957.3 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 794328.2 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 1000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258925 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 1584893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000000 1.92253759986944e-14 1.4890367771438e-14 3.56434020406966e-15 12589250 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848930 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952620 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118860 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622780 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810720 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118720 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095730 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432820 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/16_dcSweep_WPE.standard0000644000175000017500000002211413546075722024502 0ustar carstencarstenV(d) I(d) 2.000000e-01 1.012973e-06 3.000000e-01 1.166713e-06 4.000000e-01 1.339585e-06 5.000000e-01 1.526887e-06 6.000000e-01 1.723849e-06 7.000000e-01 1.927663e-06 8.000000e-01 2.136907e-06 9.000000e-01 2.350878e-06 1.000000e+00 2.569210e-06 1.100000e+00 2.791696e-06 1.200000e+00 3.018206e-06 1.300000e+00 3.248645e-06 1.400000e+00 3.482942e-06 1.500000e+00 3.721037e-06 1.600000e+00 3.962881e-06 1.700000e+00 4.208429e-06 1.800000e+00 4.457640e-06 2.000000e-01 3.599078e-04 3.000000e-01 3.808744e-04 4.000000e-01 4.005148e-04 5.000000e-01 4.199177e-04 6.000000e-01 4.392918e-04 7.000000e-01 4.586591e-04 8.000000e-01 4.780277e-04 9.000000e-01 4.974125e-04 1.000000e+00 5.168310e-04 1.100000e+00 5.362997e-04 1.200000e+00 5.558325e-04 1.300000e+00 5.754408e-04 1.400000e+00 5.951335e-04 1.500000e+00 6.149176e-04 1.600000e+00 6.347986e-04 1.700000e+00 6.547808e-04 1.800000e+00 6.748676e-04 2.000000e-01 1.842646e-03 3.000000e-01 1.969356e-03 4.000000e-01 2.026573e-03 5.000000e-01 2.077563e-03 6.000000e-01 2.125183e-03 7.000000e-01 2.170492e-03 8.000000e-01 2.214161e-03 9.000000e-01 2.256625e-03 1.000000e+00 2.298181e-03 1.100000e+00 2.339034e-03 1.200000e+00 2.379332e-03 1.300000e+00 2.419187e-03 1.400000e+00 2.458678e-03 1.500000e+00 2.497869e-03 1.600000e+00 2.536810e-03 1.700000e+00 2.575539e-03 1.800000e+00 2.614088e-03 2.000000e-01 3.339836e-03 3.000000e-01 3.813156e-03 4.000000e-01 4.012496e-03 5.000000e-01 4.099038e-03 6.000000e-01 4.163026e-03 7.000000e-01 4.222769e-03 8.000000e-01 4.279243e-03 9.000000e-01 4.333048e-03 1.000000e+00 4.384736e-03 1.100000e+00 4.434757e-03 1.200000e+00 4.483465e-03 1.300000e+00 4.531123e-03 1.400000e+00 4.577932e-03 1.500000e+00 4.624043e-03 1.600000e+00 4.669571e-03 1.700000e+00 4.714607e-03 1.800000e+00 4.759222e-03 2.000000e-01 4.572546e-03 3.000000e-01 5.432443e-03 4.000000e-01 5.878586e-03 5.000000e-01 6.117462e-03 6.000000e-01 6.246427e-03 7.000000e-01 6.323023e-03 8.000000e-01 6.387158e-03 9.000000e-01 6.448252e-03 1.000000e+00 6.506807e-03 1.100000e+00 6.563101e-03 1.200000e+00 6.617457e-03 1.300000e+00 6.670189e-03 1.400000e+00 6.721574e-03 1.500000e+00 6.771841e-03 1.600000e+00 6.821175e-03 1.700000e+00 6.869725e-03 1.800000e+00 6.917610e-03 2.000000e-01 5.867904e-03 3.000000e-01 7.361178e-03 4.000000e-01 8.246812e-03 5.000000e-01 8.786653e-03 6.000000e-01 9.128011e-03 7.000000e-01 9.349804e-03 8.000000e-01 9.497172e-03 9.000000e-01 9.598405e-03 1.000000e+00 9.670935e-03 1.100000e+00 9.734091e-03 1.200000e+00 9.795046e-03 1.300000e+00 9.854198e-03 1.400000e+00 9.911654e-03 1.500000e+00 9.967561e-03 1.600000e+00 1.002209e-02 1.700000e+00 1.007541e-02 1.800000e+00 1.012767e-02 2.000000e-01 6.543037e-03 3.000000e-01 8.626920e-03 4.000000e-01 1.002086e-02 5.000000e-01 1.094621e-02 6.000000e-01 1.157100e-02 7.000000e-01 1.200330e-02 8.000000e-01 1.230943e-02 9.000000e-01 1.253042e-02 1.000000e+00 1.269304e-02 1.100000e+00 1.281583e-02 1.200000e+00 1.291134e-02 1.300000e+00 1.298559e-02 1.400000e+00 1.304901e-02 1.500000e+00 1.311012e-02 1.600000e+00 1.316976e-02 1.700000e+00 1.322803e-02 1.800000e+00 1.328501e-02 2.000000e-01 6.087763e-06 3.000000e-01 6.902271e-06 4.000000e-01 7.798325e-06 5.000000e-01 8.761723e-06 6.000000e-01 9.771016e-06 7.000000e-01 1.081312e-05 8.000000e-01 1.188140e-05 9.000000e-01 1.297263e-05 1.000000e+00 1.408518e-05 1.100000e+00 1.521814e-05 1.200000e+00 1.637097e-05 1.300000e+00 1.754326e-05 1.400000e+00 1.873474e-05 1.500000e+00 1.994516e-05 1.600000e+00 2.117431e-05 1.700000e+00 2.242202e-05 1.800000e+00 2.368811e-05 2.000000e-01 3.293782e-04 3.000000e-01 3.494482e-04 4.000000e-01 3.669694e-04 5.000000e-01 3.838843e-04 6.000000e-01 4.005710e-04 7.000000e-01 4.171380e-04 8.000000e-01 4.336369e-04 9.000000e-01 4.501046e-04 1.000000e+00 4.665703e-04 1.100000e+00 4.830571e-04 1.200000e+00 4.995829e-04 1.300000e+00 5.161621e-04 1.400000e+00 5.328057e-04 1.500000e+00 5.495223e-04 1.600000e+00 5.663190e-04 1.700000e+00 5.832011e-04 1.800000e+00 6.001731e-04 2.000000e-01 1.410954e-03 3.000000e-01 1.563857e-03 4.000000e-01 1.624643e-03 5.000000e-01 1.673586e-03 6.000000e-01 1.718364e-03 7.000000e-01 1.760337e-03 8.000000e-01 1.800350e-03 9.000000e-01 1.838960e-03 1.000000e+00 1.876541e-03 1.100000e+00 1.913347e-03 1.200000e+00 1.949559e-03 1.300000e+00 1.985303e-03 1.400000e+00 2.020676e-03 1.500000e+00 2.055749e-03 1.600000e+00 2.090578e-03 1.700000e+00 2.125205e-03 1.800000e+00 2.159667e-03 2.000000e-01 2.539708e-03 3.000000e-01 3.059156e-03 4.000000e-01 3.306011e-03 5.000000e-01 3.415154e-03 6.000000e-01 3.486550e-03 7.000000e-01 3.550905e-03 8.000000e-01 3.610949e-03 9.000000e-01 3.667446e-03 1.000000e+00 3.721100e-03 1.100000e+00 3.772515e-03 1.200000e+00 3.822165e-03 1.300000e+00 3.870413e-03 1.400000e+00 3.917531e-03 1.500000e+00 3.963726e-03 1.600000e+00 4.009158e-03 1.700000e+00 4.053948e-03 1.800000e+00 4.098194e-03 2.000000e-01 3.484043e-03 3.000000e-01 4.384405e-03 4.000000e-01 4.920474e-03 5.000000e-01 5.227510e-03 6.000000e-01 5.394218e-03 7.000000e-01 5.489952e-03 8.000000e-01 5.564914e-03 9.000000e-01 5.634700e-03 1.000000e+00 5.700849e-03 1.100000e+00 5.763761e-03 1.200000e+00 5.823871e-03 1.300000e+00 5.881615e-03 1.400000e+00 5.937384e-03 1.500000e+00 5.991508e-03 1.600000e+00 6.044255e-03 1.700000e+00 6.095844e-03 1.800000e+00 6.146450e-03 2.000000e-01 4.521501e-03 3.000000e-01 5.958691e-03 4.000000e-01 6.936099e-03 5.000000e-01 7.591987e-03 6.000000e-01 8.030950e-03 7.000000e-01 8.322366e-03 8.000000e-01 8.513434e-03 9.000000e-01 8.639579e-03 1.000000e+00 8.729134e-03 1.100000e+00 8.804822e-03 1.200000e+00 8.876390e-03 1.300000e+00 8.945198e-03 1.400000e+00 9.011477e-03 1.500000e+00 9.075442e-03 1.600000e+00 9.137330e-03 1.700000e+00 9.197381e-03 1.800000e+00 9.255818e-03 2.000000e-01 5.145254e-03 3.000000e-01 7.029649e-03 4.000000e-01 8.436677e-03 5.000000e-01 9.461761e-03 6.000000e-01 1.020422e-02 7.000000e-01 1.074320e-02 8.000000e-01 1.113567e-02 9.000000e-01 1.142158e-02 1.000000e+00 1.162986e-02 1.100000e+00 1.178265e-02 1.200000e+00 1.189721e-02 1.300000e+00 1.198666e-02 1.400000e+00 1.206291e-02 1.500000e+00 1.213471e-02 1.600000e+00 1.220416e-02 1.700000e+00 1.227157e-02 1.800000e+00 1.233709e-02 2.000000e-01 2.732640e-05 3.000000e-01 3.061816e-05 4.000000e-01 3.403045e-05 5.000000e-01 3.764638e-05 6.000000e-01 4.141086e-05 7.000000e-01 4.528329e-05 8.000000e-01 4.924282e-05 9.000000e-01 5.327951e-05 1.000000e+00 5.738858e-05 1.100000e+00 6.156757e-05 1.200000e+00 6.581505e-05 1.300000e+00 7.013007e-05 1.400000e+00 7.451191e-05 1.500000e+00 7.896000e-05 1.600000e+00 8.347383e-05 1.700000e+00 8.805293e-05 1.800000e+00 9.269690e-05 2.000000e-01 3.218291e-04 3.000000e-01 3.474409e-04 4.000000e-01 3.651573e-04 5.000000e-01 3.813664e-04 6.000000e-01 3.970306e-04 7.000000e-01 4.124092e-04 8.000000e-01 4.276187e-04 9.000000e-01 4.427287e-04 1.000000e+00 4.577868e-04 1.100000e+00 4.728268e-04 1.200000e+00 4.878739e-04 1.300000e+00 5.029468e-04 1.400000e+00 5.180600e-04 1.500000e+00 5.332248e-04 1.600000e+00 5.484500e-04 1.700000e+00 5.637429e-04 1.800000e+00 5.791091e-04 2.000000e-01 1.004599e-03 3.000000e-01 1.173612e-03 4.000000e-01 1.243113e-03 5.000000e-01 1.287829e-03 6.000000e-01 1.326710e-03 7.000000e-01 1.362565e-03 8.000000e-01 1.396341e-03 9.000000e-01 1.428637e-03 1.000000e+00 1.459859e-03 1.100000e+00 1.490290e-03 1.200000e+00 1.520125e-03 1.300000e+00 1.549504e-03 1.400000e+00 1.578529e-03 1.500000e+00 1.607276e-03 1.600000e+00 1.635804e-03 1.700000e+00 1.664157e-03 1.800000e+00 1.692372e-03 2.000000e-01 1.718543e-03 3.000000e-01 2.179231e-03 4.000000e-01 2.439248e-03 5.000000e-01 2.569372e-03 6.000000e-01 2.644443e-03 7.000000e-01 2.705548e-03 8.000000e-01 2.761656e-03 9.000000e-01 2.814155e-03 1.000000e+00 2.863706e-03 1.100000e+00 2.910878e-03 1.200000e+00 2.956153e-03 1.300000e+00 2.999913e-03 1.400000e+00 3.042456e-03 1.500000e+00 3.084010e-03 1.600000e+00 3.124755e-03 1.700000e+00 3.164827e-03 1.800000e+00 3.204335e-03 2.000000e-01 2.342727e-03 3.000000e-01 3.099226e-03 4.000000e-01 3.617698e-03 5.000000e-01 3.949999e-03 6.000000e-01 4.146924e-03 7.000000e-01 4.262016e-03 8.000000e-01 4.343154e-03 9.000000e-01 4.414504e-03 1.000000e+00 4.481490e-03 1.100000e+00 4.544981e-03 1.200000e+00 4.605385e-03 1.300000e+00 4.663111e-03 1.400000e+00 4.718556e-03 1.500000e+00 4.772073e-03 1.600000e+00 4.823964e-03 1.700000e+00 4.874481e-03 1.800000e+00 4.923830e-03 2.000000e-01 3.082940e-03 3.000000e-01 4.233208e-03 4.000000e-01 5.119729e-03 5.000000e-01 5.782052e-03 6.000000e-01 6.263759e-03 7.000000e-01 6.603415e-03 8.000000e-01 6.834923e-03 9.000000e-01 6.990065e-03 1.000000e+00 7.098663e-03 1.100000e+00 7.185637e-03 1.200000e+00 7.264803e-03 1.300000e+00 7.340160e-03 1.400000e+00 7.412480e-03 1.500000e+00 7.482026e-03 1.600000e+00 7.549029e-03 1.700000e+00 7.613737e-03 1.800000e+00 7.676394e-03 2.000000e-01 3.602428e-03 3.000000e-01 5.069590e-03 4.000000e-01 6.278903e-03 5.000000e-01 7.248687e-03 6.000000e-01 8.012124e-03 7.000000e-01 8.604879e-03 8.000000e-01 9.059105e-03 9.000000e-01 9.402081e-03 1.000000e+00 9.657247e-03 1.100000e+00 9.845488e-03 1.200000e+00 9.985551e-03 1.300000e+00 1.009398e-02 1.400000e+00 1.018480e-02 1.500000e+00 1.026767e-02 1.600000e+00 1.034673e-02 1.700000e+00 1.042308e-02 1.800000e+00 1.049703e-02 tmpk8ny_4pz/tests/hisim/nmos/reference/14_dcSweep_COISTI=1_NSUBC.standard0000644000175000017500000002211413546075722026147 0ustar carstencarstenV(d) I(d) 2.000000e-01 6.629196e-03 3.000000e-01 8.039993e-03 4.000000e-01 8.147921e-03 5.000000e-01 8.227345e-03 6.000000e-01 8.336507e-03 7.000000e-01 8.460231e-03 8.000000e-01 8.588531e-03 9.000000e-01 8.716750e-03 1.000000e+00 8.842957e-03 1.100000e+00 8.966472e-03 1.200000e+00 9.087162e-03 1.300000e+00 9.205123e-03 1.400000e+00 9.320533e-03 1.500000e+00 9.433600e-03 1.600000e+00 9.544522e-03 1.700000e+00 9.653488e-03 1.800000e+00 9.760666e-03 2.000000e-01 5.462802e-03 3.000000e-01 8.246238e-03 4.000000e-01 1.021803e-02 5.000000e-01 1.091850e-02 6.000000e-01 1.118403e-02 7.000000e-01 1.136607e-02 8.000000e-01 1.152739e-02 9.000000e-01 1.167955e-02 1.000000e+00 1.182537e-02 1.100000e+00 1.196598e-02 1.200000e+00 1.210204e-02 1.300000e+00 1.223408e-02 1.400000e+00 1.236255e-02 1.500000e+00 1.248781e-02 1.600000e+00 1.261018e-02 1.700000e+00 1.272994e-02 1.800000e+00 1.284731e-02 2.000000e-01 5.081816e-03 3.000000e-01 6.799123e-03 4.000000e-01 8.537185e-03 5.000000e-01 1.004210e-02 6.000000e-01 1.098158e-02 7.000000e-01 1.142145e-02 8.000000e-01 1.164117e-02 9.000000e-01 1.178469e-02 1.000000e+00 1.189999e-02 1.100000e+00 1.200266e-02 1.200000e+00 1.209834e-02 1.300000e+00 1.218941e-02 1.400000e+00 1.227703e-02 1.500000e+00 1.236187e-02 1.600000e+00 1.244437e-02 1.700000e+00 1.252484e-02 1.800000e+00 1.260352e-02 2.000000e-01 5.800332e-03 3.000000e-01 7.197314e-03 4.000000e-01 8.360829e-03 5.000000e-01 9.516893e-03 6.000000e-01 1.060805e-02 7.000000e-01 1.148194e-02 8.000000e-01 1.204832e-02 9.000000e-01 1.236894e-02 1.000000e+00 1.255687e-02 1.100000e+00 1.268395e-02 1.200000e+00 1.278322e-02 1.300000e+00 1.286879e-02 1.400000e+00 1.294687e-02 1.500000e+00 1.302035e-02 1.600000e+00 1.309071e-02 1.700000e+00 1.315876e-02 1.800000e+00 1.322500e-02 2.000000e-01 6.592547e-03 3.000000e-01 8.162230e-03 4.000000e-01 9.248512e-03 5.000000e-01 1.014234e-02 6.000000e-01 1.098445e-02 7.000000e-01 1.180994e-02 8.000000e-01 1.254839e-02 9.000000e-01 1.312922e-02 1.000000e+00 1.352983e-02 1.100000e+00 1.378721e-02 1.200000e+00 1.395616e-02 1.300000e+00 1.407688e-02 1.400000e+00 1.417202e-02 1.500000e+00 1.425321e-02 1.600000e+00 1.432635e-02 1.700000e+00 1.439452e-02 1.800000e+00 1.445940e-02 2.000000e-01 7.426507e-03 3.000000e-01 9.507972e-03 4.000000e-01 1.088101e-02 5.000000e-01 1.186035e-02 6.000000e-01 1.263076e-02 7.000000e-01 1.329373e-02 8.000000e-01 1.390509e-02 9.000000e-01 1.449024e-02 1.000000e+00 1.503655e-02 1.100000e+00 1.550845e-02 1.200000e+00 1.588594e-02 1.300000e+00 1.616862e-02 1.400000e+00 1.637394e-02 1.500000e+00 1.652497e-02 1.600000e+00 1.664115e-02 1.700000e+00 1.673572e-02 1.800000e+00 1.681693e-02 2.000000e-01 7.759463e-03 3.000000e-01 1.035587e-02 4.000000e-01 1.218117e-02 5.000000e-01 1.347969e-02 6.000000e-01 1.444418e-02 7.000000e-01 1.520178e-02 8.000000e-01 1.583168e-02 9.000000e-01 1.638253e-02 1.000000e+00 1.688394e-02 1.100000e+00 1.735229e-02 1.200000e+00 1.779172e-02 1.300000e+00 1.819069e-02 1.400000e+00 1.853272e-02 1.500000e+00 1.881439e-02 1.600000e+00 1.903864e-02 1.700000e+00 1.921465e-02 1.800000e+00 1.935400e-02 2.000000e-01 6.288020e-03 3.000000e-01 8.063644e-03 4.000000e-01 8.295393e-03 5.000000e-01 8.413016e-03 6.000000e-01 8.541938e-03 7.000000e-01 8.678112e-03 8.000000e-01 8.815429e-03 9.000000e-01 8.950941e-03 1.000000e+00 9.083530e-03 1.100000e+00 9.212915e-03 1.200000e+00 9.339174e-03 1.300000e+00 9.462515e-03 1.400000e+00 9.583187e-03 1.500000e+00 9.701435e-03 1.600000e+00 9.817484e-03 1.700000e+00 9.931540e-03 1.800000e+00 1.004378e-02 2.000000e-01 5.034351e-03 3.000000e-01 7.660011e-03 4.000000e-01 9.680909e-03 5.000000e-01 1.050149e-02 6.000000e-01 1.081045e-02 7.000000e-01 1.100880e-02 8.000000e-01 1.117910e-02 9.000000e-01 1.133786e-02 1.000000e+00 1.148935e-02 1.100000e+00 1.163519e-02 1.200000e+00 1.177629e-02 1.300000e+00 1.191328e-02 1.400000e+00 1.204666e-02 1.500000e+00 1.217682e-02 1.600000e+00 1.230411e-02 1.700000e+00 1.242881e-02 1.800000e+00 1.255117e-02 2.000000e-01 4.718719e-03 3.000000e-01 6.559025e-03 4.000000e-01 8.402790e-03 5.000000e-01 1.005685e-02 6.000000e-01 1.116136e-02 7.000000e-01 1.171451e-02 8.000000e-01 1.199908e-02 9.000000e-01 1.218525e-02 1.000000e+00 1.233382e-02 1.100000e+00 1.246524e-02 1.200000e+00 1.258708e-02 1.300000e+00 1.270257e-02 1.400000e+00 1.281334e-02 1.500000e+00 1.292032e-02 1.600000e+00 1.302413e-02 1.700000e+00 1.312519e-02 1.800000e+00 1.322384e-02 2.000000e-01 5.133590e-03 3.000000e-01 6.803316e-03 4.000000e-01 8.212757e-03 5.000000e-01 9.557110e-03 6.000000e-01 1.084059e-02 7.000000e-01 1.190146e-02 8.000000e-01 1.261845e-02 9.000000e-01 1.304057e-02 1.000000e+00 1.329435e-02 1.100000e+00 1.346778e-02 1.200000e+00 1.360323e-02 1.300000e+00 1.371936e-02 1.400000e+00 1.382452e-02 1.500000e+00 1.392273e-02 1.600000e+00 1.401608e-02 1.700000e+00 1.410577e-02 1.800000e+00 1.419254e-02 2.000000e-01 5.631761e-03 3.000000e-01 7.448834e-03 4.000000e-01 8.839521e-03 5.000000e-01 9.999407e-03 6.000000e-01 1.105561e-02 7.000000e-01 1.206765e-02 8.000000e-01 1.298818e-02 9.000000e-01 1.372833e-02 1.000000e+00 1.425160e-02 1.100000e+00 1.459524e-02 1.200000e+00 1.482415e-02 1.300000e+00 1.498868e-02 1.400000e+00 1.511814e-02 1.500000e+00 1.522791e-02 1.600000e+00 1.532594e-02 1.700000e+00 1.541648e-02 1.800000e+00 1.550187e-02 2.000000e-01 6.201636e-03 3.000000e-01 8.377541e-03 4.000000e-01 1.001580e-02 5.000000e-01 1.128472e-02 6.000000e-01 1.231889e-02 7.000000e-01 1.320926e-02 8.000000e-01 1.401400e-02 9.000000e-01 1.476525e-02 1.000000e+00 1.546320e-02 1.100000e+00 1.607445e-02 1.200000e+00 1.656865e-02 1.300000e+00 1.694238e-02 1.400000e+00 1.721583e-02 1.500000e+00 1.741767e-02 1.600000e+00 1.757273e-02 1.700000e+00 1.769832e-02 1.800000e+00 1.780532e-02 2.000000e-01 6.485139e-03 3.000000e-01 8.990805e-03 4.000000e-01 1.096085e-02 5.000000e-01 1.249871e-02 6.000000e-01 1.371956e-02 7.000000e-01 1.471843e-02 8.000000e-01 1.556472e-02 9.000000e-01 1.630640e-02 1.000000e+00 1.697539e-02 1.100000e+00 1.759094e-02 1.200000e+00 1.815998e-02 1.300000e+00 1.867620e-02 1.400000e+00 1.912400e-02 1.500000e+00 1.949421e-02 1.600000e+00 1.978953e-02 1.700000e+00 2.002132e-02 1.800000e+00 2.020438e-02 2.000000e-01 5.292659e-03 3.000000e-01 7.392181e-03 4.000000e-01 7.862774e-03 5.000000e-01 8.021507e-03 6.000000e-01 8.160753e-03 7.000000e-01 8.299032e-03 8.000000e-01 8.435366e-03 9.000000e-01 8.568619e-03 1.000000e+00 8.698431e-03 1.100000e+00 8.824872e-03 1.200000e+00 8.948181e-03 1.300000e+00 9.068645e-03 1.400000e+00 9.186550e-03 1.500000e+00 9.302156e-03 1.600000e+00 9.415695e-03 1.700000e+00 9.527374e-03 1.800000e+00 9.637371e-03 2.000000e-01 4.215605e-03 3.000000e-01 6.433282e-03 4.000000e-01 8.359397e-03 5.000000e-01 9.355290e-03 6.000000e-01 9.738307e-03 7.000000e-01 9.951277e-03 8.000000e-01 1.011991e-02 9.000000e-01 1.027238e-02 1.000000e+00 1.041618e-02 1.100000e+00 1.055395e-02 1.200000e+00 1.068698e-02 1.300000e+00 1.081603e-02 1.400000e+00 1.094167e-02 1.500000e+00 1.106433e-02 1.600000e+00 1.118434e-02 1.700000e+00 1.130199e-02 1.800000e+00 1.141751e-02 2.000000e-01 3.947574e-03 3.000000e-01 5.669180e-03 4.000000e-01 7.365459e-03 5.000000e-01 8.961159e-03 6.000000e-01 1.015377e-02 7.000000e-01 1.082163e-02 8.000000e-01 1.117274e-02 9.000000e-01 1.139389e-02 1.000000e+00 1.156380e-02 1.100000e+00 1.171067e-02 1.200000e+00 1.184513e-02 1.300000e+00 1.197174e-02 1.400000e+00 1.209272e-02 1.500000e+00 1.220932e-02 1.600000e+00 1.232234e-02 1.700000e+00 1.243231e-02 1.800000e+00 1.253964e-02 2.000000e-01 4.109417e-03 3.000000e-01 5.760622e-03 4.000000e-01 7.223629e-03 5.000000e-01 8.591869e-03 6.000000e-01 9.902351e-03 7.000000e-01 1.104433e-02 8.000000e-01 1.187672e-02 9.000000e-01 1.239915e-02 1.000000e+00 1.272204e-02 1.100000e+00 1.294247e-02 1.200000e+00 1.311265e-02 1.300000e+00 1.325677e-02 1.400000e+00 1.338600e-02 1.500000e+00 1.350580e-02 1.600000e+00 1.361904e-02 1.700000e+00 1.372735e-02 1.800000e+00 1.383177e-02 2.000000e-01 4.363618e-03 3.000000e-01 6.106149e-03 4.000000e-01 7.590567e-03 5.000000e-01 8.887958e-03 6.000000e-01 1.006425e-02 7.000000e-01 1.116819e-02 8.000000e-01 1.218751e-02 9.000000e-01 1.304337e-02 1.000000e+00 1.367939e-02 1.100000e+00 1.411484e-02 1.200000e+00 1.441215e-02 1.300000e+00 1.462780e-02 1.400000e+00 1.479739e-02 1.500000e+00 1.494046e-02 1.600000e+00 1.506740e-02 1.700000e+00 1.518385e-02 1.800000e+00 1.529299e-02 2.000000e-01 4.711554e-03 3.000000e-01 6.659722e-03 4.000000e-01 8.314744e-03 5.000000e-01 9.722655e-03 6.000000e-01 1.093884e-02 7.000000e-01 1.201204e-02 8.000000e-01 1.298072e-02 9.000000e-01 1.387156e-02 1.000000e+00 1.469195e-02 1.100000e+00 1.542214e-02 1.200000e+00 1.602929e-02 1.300000e+00 1.650143e-02 1.400000e+00 1.685511e-02 1.500000e+00 1.712052e-02 1.600000e+00 1.732632e-02 1.700000e+00 1.749353e-02 1.800000e+00 1.763584e-02 2.000000e-01 4.944948e-03 3.000000e-01 7.080915e-03 4.000000e-01 8.937517e-03 5.000000e-01 1.053094e-02 6.000000e-01 1.189866e-02 7.000000e-01 1.308321e-02 8.000000e-01 1.412329e-02 9.000000e-01 1.505044e-02 1.000000e+00 1.588872e-02 1.100000e+00 1.665460e-02 1.200000e+00 1.735558e-02 1.300000e+00 1.798938e-02 1.400000e+00 1.854585e-02 1.500000e+00 1.901412e-02 1.600000e+00 1.939365e-02 1.700000e+00 1.969549e-02 1.800000e+00 1.993616e-02 tmpk8ny_4pz/tests/hisim/nmos/reference/21_dcSweep_CORBNET=0.standard0000644000175000017500000003372713546075722025330 0ustar carstencarstenV(d) I(d) I(b) 2.000000e-01 1.031340e-06 -2.000000e-16 3.000000e-01 1.187668e-06 -3.000000e-16 4.000000e-01 1.363411e-06 -4.000000e-16 5.000000e-01 1.553811e-06 -5.000000e-16 6.000000e-01 1.754026e-06 -6.000000e-16 7.000000e-01 1.961205e-06 -7.000000e-16 8.000000e-01 2.173905e-06 -8.000000e-16 9.000000e-01 2.391410e-06 -9.000000e-16 1.000000e+00 2.613350e-06 -1.000000e-15 1.100000e+00 2.839516e-06 -1.100000e-15 1.200000e+00 3.069773e-06 -1.200000e-15 1.300000e+00 3.304026e-06 -1.300000e-15 1.400000e+00 3.542204e-06 -1.400000e-15 1.500000e+00 3.784246e-06 -1.500000e-15 1.600000e+00 4.030100e-06 -1.600000e-15 1.700000e+00 4.279721e-06 -1.700000e-15 1.800000e+00 4.533070e-06 -1.800000e-15 2.000000e-01 3.625488e-04 -2.000000e-16 3.000000e-01 3.836434e-04 -3.000000e-16 4.000000e-01 4.033947e-04 -4.000000e-16 5.000000e-01 4.229012e-04 -5.000000e-16 6.000000e-01 4.423753e-04 -6.000000e-16 7.000000e-01 4.618402e-04 -7.000000e-16 8.000000e-01 4.813047e-04 -8.000000e-16 9.000000e-01 5.007840e-04 -9.000000e-16 1.000000e+00 5.202960e-04 -1.000000e-15 1.100000e+00 5.398574e-04 -1.100000e-15 1.200000e+00 5.594823e-04 -1.200000e-15 1.300000e+00 5.791821e-04 -1.300000e-15 1.400000e+00 5.989658e-04 -1.400000e-15 1.500000e+00 6.188407e-04 -1.500000e-15 1.600000e+00 6.388122e-04 -1.600000e-15 1.700000e+00 6.588847e-04 -1.700000e-15 1.800000e+00 6.790616e-04 -1.800000e-15 2.000000e-01 1.846855e-03 -2.000000e-16 3.000000e-01 1.974260e-03 -3.000000e-16 4.000000e-01 2.031600e-03 -4.000000e-16 5.000000e-01 2.082672e-03 -5.000000e-16 6.000000e-01 2.130364e-03 -6.000000e-16 7.000000e-01 2.175738e-03 -7.000000e-16 8.000000e-01 2.219464e-03 -8.000000e-16 9.000000e-01 2.261982e-03 -9.000000e-16 1.000000e+00 2.303587e-03 -1.000000e-15 1.100000e+00 2.344487e-03 -1.100000e-15 1.200000e+00 2.384830e-03 -1.200000e-15 1.300000e+00 2.424728e-03 -1.300000e-15 1.400000e+00 2.464261e-03 -1.400000e-15 1.500000e+00 2.503492e-03 -1.500000e-15 1.600000e+00 2.542472e-03 -1.600000e-15 1.700000e+00 2.581239e-03 -1.700000e-15 1.800000e+00 2.619826e-03 -1.800000e-15 2.000000e-01 3.343576e-03 -2.000000e-16 3.000000e-01 3.817799e-03 -3.000000e-16 4.000000e-01 4.017737e-03 -4.000000e-16 5.000000e-01 4.104539e-03 -5.000000e-16 6.000000e-01 4.168574e-03 -6.000000e-16 7.000000e-01 4.228356e-03 -7.000000e-16 8.000000e-01 4.284866e-03 -8.000000e-16 9.000000e-01 4.338706e-03 -9.000000e-16 1.000000e+00 4.390424e-03 -1.000000e-15 1.100000e+00 4.440474e-03 -1.100000e-15 1.200000e+00 4.489207e-03 -1.200000e-15 1.300000e+00 4.536889e-03 -1.300000e-15 1.400000e+00 4.583720e-03 -1.400000e-15 1.500000e+00 4.629852e-03 -1.500000e-15 1.600000e+00 4.675400e-03 -1.600000e-15 1.700000e+00 4.720456e-03 -1.700000e-15 1.800000e+00 4.765089e-03 -1.800000e-15 2.000000e-01 4.575745e-03 -2.000000e-16 3.000000e-01 5.436588e-03 -3.000000e-16 4.000000e-01 5.883336e-03 -4.000000e-16 5.000000e-01 6.122649e-03 -5.000000e-16 6.000000e-01 6.251933e-03 -6.000000e-16 7.000000e-01 6.328676e-03 -7.000000e-16 8.000000e-01 6.392836e-03 -8.000000e-16 9.000000e-01 6.453950e-03 -9.000000e-16 1.000000e+00 6.512526e-03 -1.000000e-15 1.100000e+00 6.568841e-03 -1.100000e-15 1.200000e+00 6.623216e-03 -1.200000e-15 1.300000e+00 6.675967e-03 -1.300000e-15 1.400000e+00 6.727368e-03 -1.400000e-15 1.500000e+00 6.777651e-03 -1.500000e-15 1.600000e+00 6.827000e-03 -1.600000e-15 1.700000e+00 6.875564e-03 -1.700000e-15 1.800000e+00 6.923462e-03 -1.800000e-15 2.000000e-01 5.870243e-03 -2.000000e-16 3.000000e-01 7.364527e-03 -3.000000e-16 4.000000e-01 8.250873e-03 -4.000000e-16 5.000000e-01 8.791206e-03 -5.000000e-16 6.000000e-01 9.132925e-03 -6.000000e-16 7.000000e-01 9.355002e-03 -7.000000e-16 8.000000e-01 9.502595e-03 -8.000000e-16 9.000000e-01 9.604011e-03 -9.000000e-16 1.000000e+00 9.676653e-03 -1.000000e-15 1.100000e+00 9.739827e-03 -1.100000e-15 1.200000e+00 9.800793e-03 -1.200000e-15 1.300000e+00 9.859958e-03 -1.300000e-15 1.400000e+00 9.917427e-03 -1.400000e-15 1.500000e+00 9.973346e-03 -1.500000e-15 1.600000e+00 1.002789e-02 -1.600000e-15 1.700000e+00 1.008122e-02 -1.700000e-15 1.800000e+00 1.013349e-02 -1.800000e-15 2.000000e-01 6.544617e-03 -2.000000e-16 3.000000e-01 8.629425e-03 -3.000000e-16 4.000000e-01 1.002415e-02 -4.000000e-16 5.000000e-01 1.095009e-02 -5.000000e-16 6.000000e-01 1.157533e-02 -6.000000e-16 7.000000e-01 1.200797e-02 -7.000000e-16 8.000000e-01 1.231437e-02 -8.000000e-16 9.000000e-01 1.253558e-02 -9.000000e-16 1.000000e+00 1.269838e-02 -1.000000e-15 1.100000e+00 1.282132e-02 -1.100000e-15 1.200000e+00 1.291696e-02 -1.200000e-15 1.300000e+00 1.299134e-02 -1.300000e-15 1.400000e+00 1.305478e-02 -1.400000e-15 1.500000e+00 1.311590e-02 -1.500000e-15 1.600000e+00 1.317555e-02 -1.600000e-15 1.700000e+00 1.323383e-02 -1.700000e-15 1.800000e+00 1.329082e-02 -1.800000e-15 2.000000e-01 6.168441e-06 -2.000000e-16 3.000000e-01 6.992527e-06 -3.000000e-16 4.000000e-01 7.898833e-06 -4.000000e-16 5.000000e-01 8.873147e-06 -5.000000e-16 6.000000e-01 9.893832e-06 -6.000000e-16 7.000000e-01 1.094768e-05 -7.000000e-16 8.000000e-01 1.202799e-05 -8.000000e-16 9.000000e-01 1.313151e-05 -9.000000e-16 1.000000e+00 1.425659e-05 -1.000000e-15 1.100000e+00 1.540231e-05 -1.100000e-15 1.200000e+00 1.656813e-05 -1.200000e-15 1.300000e+00 1.775364e-05 -1.300000e-15 1.400000e+00 1.895856e-05 -1.400000e-15 1.500000e+00 2.018263e-05 -1.500000e-15 1.600000e+00 2.142567e-05 -1.600000e-15 1.700000e+00 2.268746e-05 -1.700000e-15 1.800000e+00 2.396787e-05 -1.800000e-15 2.000000e-01 3.314500e-04 -2.000000e-16 3.000000e-01 3.516443e-04 -3.000000e-16 4.000000e-01 3.692608e-04 -4.000000e-16 5.000000e-01 3.862621e-04 -5.000000e-16 6.000000e-01 4.030308e-04 -6.000000e-16 7.000000e-01 4.196770e-04 -7.000000e-16 8.000000e-01 4.362533e-04 -8.000000e-16 9.000000e-01 4.527971e-04 -9.000000e-16 1.000000e+00 4.693380e-04 -1.000000e-15 1.100000e+00 4.858992e-04 -1.100000e-15 1.200000e+00 5.024990e-04 -1.200000e-15 1.300000e+00 5.191518e-04 -1.300000e-15 1.400000e+00 5.358687e-04 -1.400000e-15 1.500000e+00 5.526585e-04 -1.500000e-15 1.600000e+00 5.695281e-04 -1.600000e-15 1.700000e+00 5.864832e-04 -1.700000e-15 1.800000e+00 6.035282e-04 -1.800000e-15 2.000000e-01 1.414259e-03 -2.000000e-16 3.000000e-01 1.567979e-03 -3.000000e-16 4.000000e-01 1.628986e-03 -4.000000e-16 5.000000e-01 1.678046e-03 -5.000000e-16 6.000000e-01 1.722925e-03 -6.000000e-16 7.000000e-01 1.764987e-03 -7.000000e-16 8.000000e-01 1.805080e-03 -8.000000e-16 9.000000e-01 1.843763e-03 -9.000000e-16 1.000000e+00 1.881413e-03 -1.000000e-15 1.100000e+00 1.918285e-03 -1.100000e-15 1.200000e+00 1.954559e-03 -1.200000e-15 1.300000e+00 1.990363e-03 -1.300000e-15 1.400000e+00 2.025794e-03 -1.400000e-15 1.500000e+00 2.060923e-03 -1.500000e-15 1.600000e+00 2.095806e-03 -1.600000e-15 1.700000e+00 2.130488e-03 -1.700000e-15 1.800000e+00 2.165002e-03 -1.800000e-15 2.000000e-01 2.542714e-03 -2.000000e-16 3.000000e-01 3.063220e-03 -3.000000e-16 4.000000e-01 3.310856e-03 -4.000000e-16 5.000000e-01 3.420396e-03 -5.000000e-16 6.000000e-01 3.491904e-03 -6.000000e-16 7.000000e-01 3.556333e-03 -7.000000e-16 8.000000e-01 3.616445e-03 -8.000000e-16 9.000000e-01 3.673005e-03 -9.000000e-16 1.000000e+00 3.726718e-03 -1.000000e-15 1.100000e+00 3.778185e-03 -1.100000e-15 1.200000e+00 3.827884e-03 -1.200000e-15 1.300000e+00 3.876176e-03 -1.300000e-15 1.400000e+00 3.923336e-03 -1.400000e-15 1.500000e+00 3.969571e-03 -1.500000e-15 1.600000e+00 4.015041e-03 -1.600000e-15 1.700000e+00 4.059867e-03 -1.700000e-15 1.800000e+00 4.104148e-03 -1.800000e-15 2.000000e-01 3.486631e-03 -2.000000e-16 3.000000e-01 4.388014e-03 -3.000000e-16 4.000000e-01 4.924867e-03 -4.000000e-16 5.000000e-01 5.232529e-03 -5.000000e-16 6.000000e-01 5.399700e-03 -6.000000e-16 7.000000e-01 5.495663e-03 -7.000000e-16 8.000000e-01 5.570693e-03 -8.000000e-16 9.000000e-01 5.640525e-03 -9.000000e-16 1.000000e+00 5.706719e-03 -1.000000e-15 1.100000e+00 5.769675e-03 -1.100000e-15 1.200000e+00 5.829825e-03 -1.200000e-15 1.300000e+00 5.887607e-03 -1.300000e-15 1.400000e+00 5.943411e-03 -1.400000e-15 1.500000e+00 5.997567e-03 -1.500000e-15 1.600000e+00 6.050344e-03 -1.600000e-15 1.700000e+00 6.101961e-03 -1.700000e-15 1.800000e+00 6.152594e-03 -1.800000e-15 2.000000e-01 4.523458e-03 -2.000000e-16 3.000000e-01 5.961592e-03 -3.000000e-16 4.000000e-01 6.939779e-03 -4.000000e-16 5.000000e-01 7.596286e-03 -5.000000e-16 6.000000e-01 8.035751e-03 -6.000000e-16 7.000000e-01 8.327590e-03 -7.000000e-16 8.000000e-01 8.519006e-03 -8.000000e-16 9.000000e-01 8.645414e-03 -9.000000e-16 1.000000e+00 8.735120e-03 -1.000000e-15 1.100000e+00 8.810856e-03 -1.100000e-15 1.200000e+00 8.882452e-03 -1.200000e-15 1.300000e+00 8.951286e-03 -1.300000e-15 1.400000e+00 9.017592e-03 -1.400000e-15 1.500000e+00 9.081583e-03 -1.500000e-15 1.600000e+00 9.143495e-03 -1.600000e-15 1.700000e+00 9.203569e-03 -1.700000e-15 1.800000e+00 9.262028e-03 -1.800000e-15 2.000000e-01 5.146662e-03 -2.000000e-16 3.000000e-01 7.031863e-03 -3.000000e-16 4.000000e-01 8.439639e-03 -4.000000e-16 5.000000e-01 9.465363e-03 -5.000000e-16 6.000000e-01 1.020835e-02 -6.000000e-16 7.000000e-01 1.074777e-02 -7.000000e-16 8.000000e-01 1.114061e-02 -8.000000e-16 9.000000e-01 1.142684e-02 -9.000000e-16 1.000000e+00 1.163539e-02 -1.000000e-15 1.100000e+00 1.178842e-02 -1.100000e-15 1.200000e+00 1.190317e-02 -1.200000e-15 1.300000e+00 1.199275e-02 -1.300000e-15 1.400000e+00 1.206906e-02 -1.400000e-15 1.500000e+00 1.214087e-02 -1.500000e-15 1.600000e+00 1.221034e-02 -1.600000e-15 1.700000e+00 1.227777e-02 -1.700000e-15 1.800000e+00 1.234331e-02 -1.800000e-15 2.000000e-01 2.757247e-05 -2.000000e-16 3.000000e-01 3.088943e-05 -3.000000e-16 4.000000e-01 3.432614e-05 -4.000000e-16 5.000000e-01 3.796733e-05 -5.000000e-16 6.000000e-01 4.175784e-05 -6.000000e-16 7.000000e-01 4.565691e-05 -7.000000e-16 8.000000e-01 4.964358e-05 -8.000000e-16 9.000000e-01 5.370790e-05 -9.000000e-16 1.000000e+00 5.784506e-05 -1.000000e-15 1.100000e+00 6.205260e-05 -1.100000e-15 1.200000e+00 6.632908e-05 -1.200000e-15 1.300000e+00 7.067356e-05 -1.300000e-15 1.400000e+00 7.508532e-05 -1.400000e-15 1.500000e+00 7.956378e-05 -1.500000e-15 1.600000e+00 8.410843e-05 -1.600000e-15 1.700000e+00 8.871881e-05 -1.700000e-15 1.800000e+00 9.339451e-05 -1.800000e-15 2.000000e-01 3.233979e-04 -2.000000e-16 3.000000e-01 3.491751e-04 -3.000000e-16 4.000000e-01 3.669805e-04 -4.000000e-16 5.000000e-01 3.832630e-04 -5.000000e-16 6.000000e-01 3.989944e-04 -6.000000e-16 7.000000e-01 4.144367e-04 -7.000000e-16 8.000000e-01 4.297076e-04 -8.000000e-16 9.000000e-01 4.448775e-04 -9.000000e-16 1.000000e+00 4.599945e-04 -1.000000e-15 1.100000e+00 4.750927e-04 -1.100000e-15 1.200000e+00 4.901974e-04 -1.200000e-15 1.300000e+00 5.053275e-04 -1.300000e-15 1.400000e+00 5.204977e-04 -1.400000e-15 1.500000e+00 5.357192e-04 -1.500000e-15 1.600000e+00 5.510012e-04 -1.600000e-15 1.700000e+00 5.663506e-04 -1.700000e-15 1.800000e+00 5.817735e-04 -1.800000e-15 2.000000e-01 1.006788e-03 -2.000000e-16 3.000000e-01 1.176557e-03 -3.000000e-16 4.000000e-01 1.246390e-03 -4.000000e-16 5.000000e-01 1.291247e-03 -5.000000e-16 6.000000e-01 1.330236e-03 -6.000000e-16 7.000000e-01 1.366185e-03 -7.000000e-16 8.000000e-01 1.400047e-03 -8.000000e-16 9.000000e-01 1.432420e-03 -9.000000e-16 1.000000e+00 1.463716e-03 -1.000000e-15 1.100000e+00 1.494215e-03 -1.100000e-15 1.200000e+00 1.524116e-03 -1.200000e-15 1.300000e+00 1.553558e-03 -1.300000e-15 1.400000e+00 1.582644e-03 -1.400000e-15 1.500000e+00 1.611452e-03 -1.500000e-15 1.600000e+00 1.640038e-03 -1.600000e-15 1.700000e+00 1.668448e-03 -1.700000e-15 1.800000e+00 1.696719e-03 -1.800000e-15 2.000000e-01 1.720602e-03 -2.000000e-16 3.000000e-01 2.182212e-03 -3.000000e-16 4.000000e-01 2.443001e-03 -4.000000e-16 5.000000e-01 2.573625e-03 -5.000000e-16 6.000000e-01 2.648907e-03 -6.000000e-16 7.000000e-01 2.710122e-03 -7.000000e-16 8.000000e-01 2.766323e-03 -8.000000e-16 9.000000e-01 2.818908e-03 -9.000000e-16 1.000000e+00 2.868539e-03 -1.000000e-15 1.100000e+00 2.915786e-03 -1.100000e-15 1.200000e+00 2.961129e-03 -1.200000e-15 1.300000e+00 3.004954e-03 -1.300000e-15 1.400000e+00 3.047557e-03 -1.400000e-15 1.500000e+00 3.089169e-03 -1.500000e-15 1.600000e+00 3.129968e-03 -1.600000e-15 1.700000e+00 3.170092e-03 -1.700000e-15 1.800000e+00 3.209650e-03 -1.800000e-15 2.000000e-01 2.344551e-03 -2.000000e-16 3.000000e-01 3.101925e-03 -3.000000e-16 4.000000e-01 3.621184e-03 -4.000000e-16 5.000000e-01 3.954178e-03 -5.000000e-16 6.000000e-01 4.151658e-03 -6.000000e-16 7.000000e-01 4.267092e-03 -7.000000e-16 8.000000e-01 4.348380e-03 -8.000000e-16 9.000000e-01 4.419815e-03 -9.000000e-16 1.000000e+00 4.486875e-03 -1.000000e-15 1.100000e+00 4.550435e-03 -1.100000e-15 1.200000e+00 4.610906e-03 -1.200000e-15 1.300000e+00 4.668696e-03 -1.300000e-15 1.400000e+00 4.724200e-03 -1.400000e-15 1.500000e+00 4.777773e-03 -1.500000e-15 1.600000e+00 4.829716e-03 -1.600000e-15 1.700000e+00 4.880282e-03 -1.700000e-15 1.800000e+00 4.929678e-03 -1.800000e-15 2.000000e-01 3.084402e-03 -2.000000e-16 3.000000e-01 4.235437e-03 -3.000000e-16 4.000000e-01 5.122679e-03 -4.000000e-16 5.000000e-01 5.785658e-03 -5.000000e-16 6.000000e-01 6.267956e-03 -6.000000e-16 7.000000e-01 6.608144e-03 -7.000000e-16 8.000000e-01 6.840111e-03 -8.000000e-16 9.000000e-01 6.995611e-03 -9.000000e-16 1.000000e+00 7.104437e-03 -1.000000e-15 1.100000e+00 7.191523e-03 -1.100000e-15 1.200000e+00 7.270752e-03 -1.200000e-15 1.300000e+00 7.346161e-03 -1.300000e-15 1.400000e+00 7.418531e-03 -1.400000e-15 1.500000e+00 7.488125e-03 -1.500000e-15 1.600000e+00 7.555176e-03 -1.600000e-15 1.700000e+00 7.619929e-03 -1.700000e-15 1.800000e+00 7.682628e-03 -1.800000e-15 2.000000e-01 3.603565e-03 -2.000000e-16 3.000000e-01 5.071371e-03 -3.000000e-16 4.000000e-01 6.281326e-03 -4.000000e-16 5.000000e-01 7.251718e-03 -5.000000e-16 6.000000e-01 8.015715e-03 -6.000000e-16 7.000000e-01 8.608979e-03 -7.000000e-16 8.000000e-01 9.063670e-03 -8.000000e-16 9.000000e-01 9.407070e-03 -9.000000e-16 1.000000e+00 9.662614e-03 -1.000000e-15 1.100000e+00 9.851179e-03 -1.100000e-15 1.200000e+00 9.991500e-03 -1.200000e-15 1.300000e+00 1.010011e-02 -1.300000e-15 1.400000e+00 1.019103e-02 -1.400000e-15 1.500000e+00 1.027396e-02 -1.500000e-15 1.600000e+00 1.035306e-02 -1.600000e-15 1.700000e+00 1.042945e-02 -1.700000e-15 1.800000e+00 1.050344e-02 -1.800000e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/2_dcSweep_CORSRD=-1_GDLD.standard0000644000175000017500000002211413546075722026003 0ustar carstencarstenV(d) I(d) 2.000000e-01 3.493708e-09 3.000000e-01 4.378964e-09 4.000000e-01 5.428276e-09 5.000000e-01 6.590064e-09 6.000000e-01 7.825570e-09 7.000000e-01 9.112953e-09 8.000000e-01 1.044104e-08 9.000000e-01 1.180413e-08 1.000000e+00 1.319912e-08 1.100000e+00 1.462419e-08 1.200000e+00 1.607813e-08 1.300000e+00 1.756008e-08 1.400000e+00 1.906937e-08 1.500000e+00 2.060547e-08 1.600000e+00 2.216791e-08 1.700000e+00 2.375632e-08 1.800000e+00 2.537035e-08 2.000000e-01 5.036470e-06 3.000000e-01 5.702009e-06 4.000000e-01 6.438144e-06 5.000000e-01 7.231171e-06 6.000000e-01 8.063066e-06 7.000000e-01 8.922693e-06 8.000000e-01 9.804330e-06 9.000000e-01 1.070515e-05 1.000000e+00 1.162370e-05 1.100000e+00 1.255919e-05 1.200000e+00 1.351111e-05 1.300000e+00 1.447914e-05 1.400000e+00 1.546302e-05 1.500000e+00 1.646253e-05 1.600000e+00 1.747750e-05 1.700000e+00 1.850778e-05 1.800000e+00 1.955322e-05 2.000000e-01 6.064632e-04 3.000000e-01 6.318495e-04 4.000000e-01 6.520130e-04 5.000000e-01 6.698391e-04 6.000000e-01 6.864092e-04 7.000000e-01 7.021837e-04 8.000000e-01 7.173964e-04 9.000000e-01 7.321881e-04 1.000000e+00 7.466530e-04 1.100000e+00 7.608581e-04 1.200000e+00 7.748528e-04 1.300000e+00 7.886747e-04 1.400000e+00 8.023530e-04 1.500000e+00 8.159110e-04 1.600000e+00 8.293674e-04 1.700000e+00 8.427376e-04 1.800000e+00 8.560343e-04 2.000000e-01 2.136083e-03 3.000000e-01 2.337787e-03 4.000000e-01 2.397158e-03 5.000000e-01 2.438987e-03 6.000000e-01 2.474871e-03 7.000000e-01 2.506610e-03 8.000000e-01 2.535412e-03 9.000000e-01 2.562078e-03 1.000000e+00 2.587140e-03 1.100000e+00 2.610958e-03 1.200000e+00 2.633786e-03 1.300000e+00 2.655804e-03 1.400000e+00 2.677145e-03 1.500000e+00 2.697912e-03 1.600000e+00 2.718183e-03 1.700000e+00 2.738020e-03 1.800000e+00 2.757474e-03 2.000000e-01 3.518468e-03 3.000000e-01 4.100458e-03 4.000000e-01 4.360846e-03 5.000000e-01 4.463405e-03 6.000000e-01 4.514623e-03 7.000000e-01 4.557633e-03 8.000000e-01 4.596139e-03 9.000000e-01 4.630970e-03 1.000000e+00 4.662831e-03 1.100000e+00 4.692318e-03 1.200000e+00 4.719910e-03 1.300000e+00 4.745973e-03 1.400000e+00 4.770791e-03 1.500000e+00 4.794577e-03 1.600000e+00 4.817496e-03 1.700000e+00 4.839677e-03 1.800000e+00 4.861221e-03 2.000000e-01 5.053748e-03 3.000000e-01 6.250978e-03 4.000000e-01 6.929935e-03 5.000000e-01 7.320157e-03 6.000000e-01 7.543441e-03 7.000000e-01 7.665566e-03 8.000000e-01 7.730453e-03 9.000000e-01 7.775107e-03 1.000000e+00 7.815115e-03 1.100000e+00 7.852195e-03 1.200000e+00 7.886691e-03 1.300000e+00 7.918887e-03 1.400000e+00 7.949077e-03 1.500000e+00 7.977539e-03 1.600000e+00 8.004522e-03 1.700000e+00 8.030238e-03 1.800000e+00 8.054866e-03 2.000000e-01 5.946467e-03 3.000000e-01 7.749894e-03 4.000000e-01 8.917859e-03 5.000000e-01 9.669278e-03 6.000000e-01 1.015886e-02 7.000000e-01 1.048160e-02 8.000000e-01 1.069427e-02 9.000000e-01 1.083221e-02 1.000000e+00 1.091972e-02 1.100000e+00 1.097580e-02 1.200000e+00 1.101791e-02 1.300000e+00 1.105608e-02 1.400000e+00 1.109202e-02 1.500000e+00 1.112598e-02 1.600000e+00 1.115813e-02 1.700000e+00 1.118864e-02 1.800000e+00 1.121767e-02 2.000000e-01 1.276098e-07 3.000000e-01 1.592395e-07 4.000000e-01 1.965927e-07 5.000000e-01 2.379230e-07 6.000000e-01 2.818687e-07 7.000000e-01 3.276599e-07 8.000000e-01 3.749029e-07 9.000000e-01 4.233969e-07 1.000000e+00 4.730330e-07 1.100000e+00 5.237471e-07 1.200000e+00 5.754973e-07 1.300000e+00 6.282536e-07 1.400000e+00 6.819930e-07 1.500000e+00 7.366968e-07 1.600000e+00 7.923494e-07 1.700000e+00 8.489375e-07 1.800000e+00 9.064492e-07 2.000000e-01 1.570626e-05 3.000000e-01 1.752484e-05 4.000000e-01 1.948054e-05 5.000000e-01 2.156541e-05 6.000000e-01 2.374095e-05 7.000000e-01 2.598185e-05 8.000000e-01 2.827506e-05 9.000000e-01 3.061427e-05 1.000000e+00 3.299638e-05 1.100000e+00 3.541976e-05 1.200000e+00 3.788344e-05 1.300000e+00 4.038680e-05 1.400000e+00 4.292936e-05 1.500000e+00 4.551076e-05 1.600000e+00 4.813066e-05 1.700000e+00 5.078879e-05 1.800000e+00 5.348487e-05 2.000000e-01 4.909374e-04 3.000000e-01 5.168516e-04 4.000000e-01 5.352953e-04 5.000000e-01 5.512961e-04 6.000000e-01 5.660062e-04 7.000000e-01 5.799213e-04 8.000000e-01 5.932944e-04 9.000000e-01 6.062738e-04 1.000000e+00 6.189556e-04 1.100000e+00 6.314061e-04 1.200000e+00 6.436733e-04 1.300000e+00 6.557931e-04 1.400000e+00 6.677932e-04 1.500000e+00 6.796954e-04 1.600000e+00 6.915172e-04 1.700000e+00 7.032728e-04 1.800000e+00 7.149739e-04 2.000000e-01 1.609265e-03 3.000000e-01 1.835698e-03 4.000000e-01 1.910442e-03 5.000000e-01 1.955907e-03 6.000000e-01 1.994438e-03 7.000000e-01 2.028346e-03 8.000000e-01 2.058904e-03 9.000000e-01 2.087012e-03 1.000000e+00 2.113289e-03 1.100000e+00 2.138160e-03 1.200000e+00 2.161919e-03 1.300000e+00 2.184780e-03 1.400000e+00 2.206898e-03 1.500000e+00 2.228388e-03 1.600000e+00 2.249340e-03 1.700000e+00 2.269826e-03 1.800000e+00 2.289902e-03 2.000000e-01 2.663007e-03 3.000000e-01 3.272221e-03 4.000000e-01 3.586927e-03 5.000000e-01 3.726197e-03 6.000000e-01 3.793787e-03 7.000000e-01 3.847097e-03 8.000000e-01 3.894742e-03 9.000000e-01 3.937762e-03 1.000000e+00 3.976935e-03 1.100000e+00 4.012980e-03 1.200000e+00 4.046502e-03 1.300000e+00 4.077981e-03 1.400000e+00 4.107789e-03 1.500000e+00 4.136214e-03 1.600000e+00 4.163477e-03 1.700000e+00 4.189753e-03 1.800000e+00 4.215178e-03 2.000000e-01 3.873537e-03 3.000000e-01 5.037191e-03 4.000000e-01 5.795786e-03 5.000000e-01 6.277075e-03 6.000000e-01 6.571591e-03 7.000000e-01 6.740814e-03 8.000000e-01 6.833899e-03 9.000000e-01 6.895711e-03 1.000000e+00 6.949762e-03 1.100000e+00 6.999722e-03 1.200000e+00 7.046098e-03 1.300000e+00 7.089233e-03 1.400000e+00 7.129495e-03 1.500000e+00 7.167254e-03 1.600000e+00 7.202847e-03 1.700000e+00 7.236571e-03 1.800000e+00 7.268681e-03 2.000000e-01 4.649979e-03 3.000000e-01 6.293114e-03 4.000000e-01 7.487667e-03 5.000000e-01 8.333851e-03 6.000000e-01 8.927063e-03 7.000000e-01 9.339501e-03 8.000000e-01 9.621738e-03 9.000000e-01 9.809735e-03 1.000000e+00 9.931250e-03 1.100000e+00 1.001007e-02 1.200000e+00 1.006857e-02 1.300000e+00 1.012083e-02 1.400000e+00 1.016983e-02 1.500000e+00 1.021604e-02 1.600000e+00 1.025967e-02 1.700000e+00 1.030094e-02 1.800000e+00 1.034005e-02 2.000000e-01 2.347260e-06 3.000000e-01 2.919021e-06 4.000000e-01 3.583022e-06 5.000000e-01 4.316027e-06 6.000000e-01 5.094991e-06 7.000000e-01 5.906532e-06 8.000000e-01 6.743777e-06 9.000000e-01 7.603219e-06 1.000000e+00 8.482967e-06 1.100000e+00 9.381908e-06 1.200000e+00 1.029932e-05 1.300000e+00 1.123468e-05 1.400000e+00 1.218760e-05 1.500000e+00 1.315776e-05 1.600000e+00 1.414490e-05 1.700000e+00 1.514879e-05 1.800000e+00 1.616923e-05 2.000000e-01 4.284778e-05 3.000000e-01 4.757104e-05 4.000000e-01 5.232663e-05 5.000000e-01 5.731968e-05 6.000000e-01 6.249683e-05 7.000000e-01 6.780982e-05 8.000000e-01 7.323305e-05 9.000000e-01 7.875447e-05 1.000000e+00 8.436849e-05 1.100000e+00 9.007242e-05 1.200000e+00 9.586484e-05 1.300000e+00 1.017449e-04 1.400000e+00 1.077119e-04 1.500000e+00 1.137655e-04 1.600000e+00 1.199051e-04 1.700000e+00 1.261304e-04 1.800000e+00 1.324409e-04 2.000000e-01 4.095305e-04 3.000000e-01 4.440710e-04 4.000000e-01 4.630333e-04 5.000000e-01 4.785433e-04 6.000000e-01 4.925565e-04 7.000000e-01 5.056974e-04 8.000000e-01 5.182683e-04 9.000000e-01 5.304420e-04 1.000000e+00 5.423268e-04 1.100000e+00 5.539951e-04 1.200000e+00 5.654979e-04 1.300000e+00 5.768722e-04 1.400000e+00 5.881460e-04 1.500000e+00 5.993411e-04 1.600000e+00 6.104746e-04 1.700000e+00 6.215604e-04 1.800000e+00 6.326098e-04 2.000000e-01 1.107585e-03 3.000000e-01 1.327522e-03 4.000000e-01 1.418299e-03 5.000000e-01 1.464808e-03 6.000000e-01 1.501261e-03 7.000000e-01 1.533174e-03 8.000000e-01 1.561870e-03 9.000000e-01 1.588167e-03 1.000000e+00 1.612660e-03 1.100000e+00 1.635773e-03 1.200000e+00 1.657810e-03 1.300000e+00 1.678988e-03 1.400000e+00 1.699468e-03 1.500000e+00 1.719367e-03 1.600000e+00 1.738778e-03 1.700000e+00 1.757770e-03 1.800000e+00 1.776400e-03 2.000000e-01 1.790176e-03 3.000000e-01 2.306697e-03 4.000000e-01 2.618959e-03 5.000000e-01 2.782832e-03 6.000000e-01 2.865636e-03 7.000000e-01 2.922587e-03 8.000000e-01 2.972211e-03 9.000000e-01 3.017295e-03 1.000000e+00 3.058564e-03 1.100000e+00 3.096620e-03 1.200000e+00 3.132018e-03 1.300000e+00 3.165231e-03 1.400000e+00 3.196646e-03 1.500000e+00 3.226567e-03 1.600000e+00 3.255236e-03 1.700000e+00 3.282845e-03 1.800000e+00 3.309544e-03 2.000000e-01 2.627758e-03 3.000000e-01 3.563210e-03 4.000000e-01 4.255819e-03 5.000000e-01 4.746425e-03 6.000000e-01 5.076371e-03 7.000000e-01 5.283887e-03 8.000000e-01 5.407765e-03 9.000000e-01 5.487654e-03 1.000000e+00 5.552490e-03 1.100000e+00 5.611824e-03 1.200000e+00 5.667226e-03 1.300000e+00 5.719066e-03 1.400000e+00 5.767652e-03 1.500000e+00 5.813319e-03 1.600000e+00 5.856406e-03 1.700000e+00 5.897229e-03 1.800000e+00 5.936073e-03 2.000000e-01 3.234534e-03 3.000000e-01 4.516761e-03 4.000000e-01 5.550484e-03 5.000000e-01 6.358814e-03 6.000000e-01 6.976276e-03 7.000000e-01 7.437447e-03 8.000000e-01 7.772677e-03 9.000000e-01 8.008373e-03 1.000000e+00 8.168817e-03 1.100000e+00 8.277350e-03 1.200000e+00 8.356510e-03 1.300000e+00 8.423817e-03 1.400000e+00 8.486297e-03 1.500000e+00 8.545384e-03 1.600000e+00 8.601416e-03 1.700000e+00 8.654591e-03 1.800000e+00 8.705110e-03 tmpk8ny_4pz/tests/hisim/nmos/reference/12_dcSweep_COGIDL=1.standard0000644000175000017500000002211413546075722025162 0ustar carstencarstenV(d) I(d) 2.000000e-01 1.031345e-06 3.000000e-01 1.187715e-06 4.000000e-01 1.363636e-06 5.000000e-01 1.554546e-06 6.000000e-01 1.755893e-06 7.000000e-01 1.965136e-06 8.000000e-01 2.181102e-06 9.000000e-01 2.403274e-06 1.000000e+00 2.631411e-06 1.100000e+00 2.865382e-06 1.200000e+00 3.105104e-06 1.300000e+00 3.350519e-06 1.400000e+00 3.601580e-06 1.500000e+00 3.858253e-06 1.600000e+00 4.120510e-06 1.700000e+00 4.388325e-06 1.800000e+00 4.661678e-06 2.000000e-01 3.625488e-04 3.000000e-01 3.836434e-04 4.000000e-01 4.033948e-04 5.000000e-01 4.229014e-04 6.000000e-01 4.423759e-04 7.000000e-01 4.618417e-04 8.000000e-01 4.813078e-04 9.000000e-01 5.007897e-04 1.000000e+00 5.203055e-04 1.100000e+00 5.398719e-04 1.200000e+00 5.595033e-04 1.300000e+00 5.792110e-04 1.400000e+00 5.990044e-04 1.500000e+00 6.188904e-04 1.600000e+00 6.388747e-04 1.700000e+00 6.589618e-04 1.800000e+00 6.791550e-04 2.000000e-01 1.846855e-03 3.000000e-01 1.974260e-03 4.000000e-01 2.031600e-03 5.000000e-01 2.082672e-03 6.000000e-01 2.130364e-03 7.000000e-01 2.175738e-03 8.000000e-01 2.219465e-03 9.000000e-01 2.261984e-03 1.000000e+00 2.303591e-03 1.100000e+00 2.344494e-03 1.200000e+00 2.384841e-03 1.300000e+00 2.424744e-03 1.400000e+00 2.464283e-03 1.500000e+00 2.503523e-03 1.600000e+00 2.542513e-03 1.700000e+00 2.581291e-03 1.800000e+00 2.619891e-03 2.000000e-01 3.343576e-03 3.000000e-01 3.817799e-03 4.000000e-01 4.017737e-03 5.000000e-01 4.104539e-03 6.000000e-01 4.168574e-03 7.000000e-01 4.228356e-03 8.000000e-01 4.284867e-03 9.000000e-01 4.338706e-03 1.000000e+00 4.390426e-03 1.100000e+00 4.440477e-03 1.200000e+00 4.489212e-03 1.300000e+00 4.536897e-03 1.400000e+00 4.583732e-03 1.500000e+00 4.629869e-03 1.600000e+00 4.675425e-03 1.700000e+00 4.720488e-03 1.800000e+00 4.765131e-03 2.000000e-01 4.575745e-03 3.000000e-01 5.436588e-03 4.000000e-01 5.883336e-03 5.000000e-01 6.122649e-03 6.000000e-01 6.251933e-03 7.000000e-01 6.328676e-03 8.000000e-01 6.392836e-03 9.000000e-01 6.453950e-03 1.000000e+00 6.512526e-03 1.100000e+00 6.568842e-03 1.200000e+00 6.623218e-03 1.300000e+00 6.675970e-03 1.400000e+00 6.727374e-03 1.500000e+00 6.777659e-03 1.600000e+00 6.827013e-03 1.700000e+00 6.875582e-03 1.800000e+00 6.923487e-03 2.000000e-01 5.870243e-03 3.000000e-01 7.364527e-03 4.000000e-01 8.250873e-03 5.000000e-01 8.791206e-03 6.000000e-01 9.132925e-03 7.000000e-01 9.355002e-03 8.000000e-01 9.502595e-03 9.000000e-01 9.604011e-03 1.000000e+00 9.676653e-03 1.100000e+00 9.739827e-03 1.200000e+00 9.800793e-03 1.300000e+00 9.859958e-03 1.400000e+00 9.917427e-03 1.500000e+00 9.973348e-03 1.600000e+00 1.002789e-02 1.700000e+00 1.008122e-02 1.800000e+00 1.013350e-02 2.000000e-01 6.544617e-03 3.000000e-01 8.629425e-03 4.000000e-01 1.002415e-02 5.000000e-01 1.095009e-02 6.000000e-01 1.157533e-02 7.000000e-01 1.200797e-02 8.000000e-01 1.231437e-02 9.000000e-01 1.253558e-02 1.000000e+00 1.269838e-02 1.100000e+00 1.282132e-02 1.200000e+00 1.291696e-02 1.300000e+00 1.299134e-02 1.400000e+00 1.305478e-02 1.500000e+00 1.311590e-02 1.600000e+00 1.317555e-02 1.700000e+00 1.323383e-02 1.800000e+00 1.329082e-02 2.000000e-01 6.168448e-06 3.000000e-01 6.992588e-06 4.000000e-01 7.899114e-06 5.000000e-01 8.874048e-06 6.000000e-01 9.896077e-06 7.000000e-01 1.095233e-05 8.000000e-01 1.203641e-05 9.000000e-01 1.314524e-05 1.000000e+00 1.427730e-05 1.100000e+00 1.543174e-05 1.200000e+00 1.660804e-05 1.300000e+00 1.780584e-05 1.400000e+00 1.902486e-05 1.500000e+00 2.026488e-05 1.600000e+00 2.152569e-05 1.700000e+00 2.280715e-05 1.800000e+00 2.410908e-05 2.000000e-01 3.314500e-04 3.000000e-01 3.516443e-04 4.000000e-01 3.692608e-04 5.000000e-01 3.862624e-04 6.000000e-01 4.030315e-04 7.000000e-01 4.196788e-04 8.000000e-01 4.362570e-04 9.000000e-01 4.528039e-04 1.000000e+00 4.693491e-04 1.100000e+00 4.859160e-04 1.200000e+00 5.025231e-04 1.300000e+00 5.191848e-04 1.400000e+00 5.359122e-04 1.500000e+00 5.527143e-04 1.600000e+00 5.695980e-04 1.700000e+00 5.865689e-04 1.800000e+00 6.036315e-04 2.000000e-01 1.414259e-03 3.000000e-01 1.567979e-03 4.000000e-01 1.628986e-03 5.000000e-01 1.678046e-03 6.000000e-01 1.722925e-03 7.000000e-01 1.764988e-03 8.000000e-01 1.805081e-03 9.000000e-01 1.843766e-03 1.000000e+00 1.881418e-03 1.100000e+00 1.918293e-03 1.200000e+00 1.954571e-03 1.300000e+00 1.990382e-03 1.400000e+00 2.025820e-03 1.500000e+00 2.060958e-03 1.600000e+00 2.095852e-03 1.700000e+00 2.130546e-03 1.800000e+00 2.165074e-03 2.000000e-01 2.542714e-03 3.000000e-01 3.063220e-03 4.000000e-01 3.310856e-03 5.000000e-01 3.420396e-03 6.000000e-01 3.491904e-03 7.000000e-01 3.556333e-03 8.000000e-01 3.616446e-03 9.000000e-01 3.673006e-03 1.000000e+00 3.726719e-03 1.100000e+00 3.778189e-03 1.200000e+00 3.827890e-03 1.300000e+00 3.876186e-03 1.400000e+00 3.923350e-03 1.500000e+00 3.969592e-03 1.600000e+00 4.015068e-03 1.700000e+00 4.059904e-03 1.800000e+00 4.104195e-03 2.000000e-01 3.486631e-03 3.000000e-01 4.388014e-03 4.000000e-01 4.924867e-03 5.000000e-01 5.232529e-03 6.000000e-01 5.399700e-03 7.000000e-01 5.495663e-03 8.000000e-01 5.570693e-03 9.000000e-01 5.640525e-03 1.000000e+00 5.706719e-03 1.100000e+00 5.769675e-03 1.200000e+00 5.829827e-03 1.300000e+00 5.887610e-03 1.400000e+00 5.943417e-03 1.500000e+00 5.997576e-03 1.600000e+00 6.050359e-03 1.700000e+00 6.101982e-03 1.800000e+00 6.152622e-03 2.000000e-01 4.523458e-03 3.000000e-01 5.961592e-03 4.000000e-01 6.939779e-03 5.000000e-01 7.596286e-03 6.000000e-01 8.035751e-03 7.000000e-01 8.327590e-03 8.000000e-01 8.519006e-03 9.000000e-01 8.645414e-03 1.000000e+00 8.735120e-03 1.100000e+00 8.810856e-03 1.200000e+00 8.882452e-03 1.300000e+00 8.951286e-03 1.400000e+00 9.017593e-03 1.500000e+00 9.081585e-03 1.600000e+00 9.143499e-03 1.700000e+00 9.203576e-03 1.800000e+00 9.262039e-03 2.000000e-01 5.146662e-03 3.000000e-01 7.031863e-03 4.000000e-01 8.439639e-03 5.000000e-01 9.465363e-03 6.000000e-01 1.020835e-02 7.000000e-01 1.074777e-02 8.000000e-01 1.114061e-02 9.000000e-01 1.142684e-02 1.000000e+00 1.163539e-02 1.100000e+00 1.178842e-02 1.200000e+00 1.190317e-02 1.300000e+00 1.199275e-02 1.400000e+00 1.206906e-02 1.500000e+00 1.214087e-02 1.600000e+00 1.221034e-02 1.700000e+00 1.227777e-02 1.800000e+00 1.234331e-02 2.000000e-01 2.757248e-05 3.000000e-01 3.088951e-05 4.000000e-01 3.432647e-05 5.000000e-01 3.796838e-05 6.000000e-01 4.176042e-05 7.000000e-01 4.566221e-05 8.000000e-01 4.965307e-05 9.000000e-01 5.372325e-05 1.000000e+00 5.786806e-05 1.100000e+00 6.208508e-05 1.200000e+00 6.637291e-05 1.300000e+00 7.073061e-05 1.400000e+00 7.515748e-05 1.500000e+00 7.965296e-05 1.600000e+00 8.421653e-05 1.700000e+00 8.884777e-05 1.800000e+00 9.354625e-05 2.000000e-01 3.233979e-04 3.000000e-01 3.491751e-04 4.000000e-01 3.669805e-04 5.000000e-01 3.832633e-04 6.000000e-01 3.989953e-04 7.000000e-01 4.144388e-04 8.000000e-01 4.297119e-04 9.000000e-01 4.448853e-04 1.000000e+00 4.600070e-04 1.100000e+00 4.751115e-04 1.200000e+00 4.902241e-04 1.300000e+00 5.053639e-04 1.400000e+00 5.205455e-04 1.500000e+00 5.357802e-04 1.600000e+00 5.510772e-04 1.700000e+00 5.664436e-04 1.800000e+00 5.818852e-04 2.000000e-01 1.006788e-03 3.000000e-01 1.176557e-03 4.000000e-01 1.246390e-03 5.000000e-01 1.291247e-03 6.000000e-01 1.330236e-03 7.000000e-01 1.366185e-03 8.000000e-01 1.400048e-03 9.000000e-01 1.432424e-03 1.000000e+00 1.463722e-03 1.100000e+00 1.494225e-03 1.200000e+00 1.524130e-03 1.300000e+00 1.553579e-03 1.400000e+00 1.582674e-03 1.500000e+00 1.611490e-03 1.600000e+00 1.640088e-03 1.700000e+00 1.668511e-03 1.800000e+00 1.696797e-03 2.000000e-01 1.720602e-03 3.000000e-01 2.182212e-03 4.000000e-01 2.443001e-03 5.000000e-01 2.573625e-03 6.000000e-01 2.648907e-03 7.000000e-01 2.710122e-03 8.000000e-01 2.766323e-03 9.000000e-01 2.818909e-03 1.000000e+00 2.868541e-03 1.100000e+00 2.915790e-03 1.200000e+00 2.961136e-03 1.300000e+00 3.004964e-03 1.400000e+00 3.047573e-03 1.500000e+00 3.089191e-03 1.600000e+00 3.129998e-03 1.700000e+00 3.170132e-03 1.800000e+00 3.209702e-03 2.000000e-01 2.344551e-03 3.000000e-01 3.101925e-03 4.000000e-01 3.621184e-03 5.000000e-01 3.954178e-03 6.000000e-01 4.151658e-03 7.000000e-01 4.267092e-03 8.000000e-01 4.348380e-03 9.000000e-01 4.419815e-03 1.000000e+00 4.486875e-03 1.100000e+00 4.550437e-03 1.200000e+00 4.610909e-03 1.300000e+00 4.668700e-03 1.400000e+00 4.724207e-03 1.500000e+00 4.777784e-03 1.600000e+00 4.829733e-03 1.700000e+00 4.880305e-03 1.800000e+00 4.929709e-03 2.000000e-01 3.084402e-03 3.000000e-01 4.235437e-03 4.000000e-01 5.122679e-03 5.000000e-01 5.785658e-03 6.000000e-01 6.267956e-03 7.000000e-01 6.608144e-03 8.000000e-01 6.840111e-03 9.000000e-01 6.995611e-03 1.000000e+00 7.104437e-03 1.100000e+00 7.191523e-03 1.200000e+00 7.270752e-03 1.300000e+00 7.346162e-03 1.400000e+00 7.418532e-03 1.500000e+00 7.488128e-03 1.600000e+00 7.555181e-03 1.700000e+00 7.619937e-03 1.800000e+00 7.682640e-03 2.000000e-01 3.603565e-03 3.000000e-01 5.071371e-03 4.000000e-01 6.281326e-03 5.000000e-01 7.251718e-03 6.000000e-01 8.015715e-03 7.000000e-01 8.608979e-03 8.000000e-01 9.063670e-03 9.000000e-01 9.407070e-03 1.000000e+00 9.662614e-03 1.100000e+00 9.851179e-03 1.200000e+00 9.991500e-03 1.300000e+00 1.010011e-02 1.400000e+00 1.019103e-02 1.500000e+00 1.027396e-02 1.600000e+00 1.035306e-02 1.700000e+00 1.042945e-02 1.800000e+00 1.050345e-02 tmpk8ny_4pz/tests/hisim/nmos/reference/24_dcSweep_CODFM=1.standard0000644000175000017500000002211413546075722025054 0ustar carstencarstenV(d) I(d) 2.000000e-01 1.756760e-06 3.000000e-01 2.014409e-06 4.000000e-01 2.302615e-06 5.000000e-01 2.614290e-06 6.000000e-01 2.941772e-06 7.000000e-01 3.280493e-06 8.000000e-01 3.628134e-06 9.000000e-01 3.983549e-06 1.000000e+00 4.346140e-06 1.100000e+00 4.715572e-06 1.200000e+00 5.091628e-06 1.300000e+00 5.474156e-06 1.400000e+00 5.863039e-06 1.500000e+00 6.258178e-06 1.600000e+00 6.659489e-06 1.700000e+00 7.066897e-06 1.800000e+00 7.480335e-06 2.000000e-01 4.714736e-04 3.000000e-01 4.972767e-04 4.000000e-01 5.212918e-04 5.000000e-01 5.449028e-04 6.000000e-01 5.683965e-04 7.000000e-01 5.918157e-04 8.000000e-01 6.151788e-04 9.000000e-01 6.385093e-04 1.000000e+00 6.618324e-04 1.100000e+00 6.851708e-04 1.200000e+00 7.085434e-04 1.300000e+00 7.319655e-04 1.400000e+00 7.554491e-04 1.500000e+00 7.790039e-04 1.600000e+00 8.026371e-04 1.700000e+00 8.263548e-04 1.800000e+00 8.501613e-04 2.000000e-01 2.082037e-03 3.000000e-01 2.221416e-03 4.000000e-01 2.280438e-03 5.000000e-01 2.332674e-03 6.000000e-01 2.381664e-03 7.000000e-01 2.428374e-03 8.000000e-01 2.473438e-03 9.000000e-01 2.517278e-03 1.000000e+00 2.560188e-03 1.100000e+00 2.602374e-03 1.200000e+00 2.643985e-03 1.300000e+00 2.685133e-03 1.400000e+00 2.725899e-03 1.500000e+00 2.766348e-03 1.600000e+00 2.806529e-03 1.700000e+00 2.846483e-03 1.800000e+00 2.886242e-03 2.000000e-01 3.648707e-03 3.000000e-01 4.113294e-03 4.000000e-01 4.311111e-03 5.000000e-01 4.399249e-03 6.000000e-01 4.461267e-03 7.000000e-01 4.519345e-03 8.000000e-01 4.574589e-03 9.000000e-01 4.627465e-03 1.000000e+00 4.678426e-03 1.100000e+00 4.727867e-03 1.200000e+00 4.776099e-03 1.300000e+00 4.823365e-03 1.400000e+00 4.869845e-03 1.500000e+00 4.915681e-03 1.600000e+00 4.960978e-03 1.700000e+00 5.005819e-03 1.800000e+00 5.050271e-03 2.000000e-01 4.943501e-03 3.000000e-01 5.784322e-03 4.000000e-01 6.207847e-03 5.000000e-01 6.435287e-03 6.000000e-01 6.562243e-03 7.000000e-01 6.638377e-03 8.000000e-01 6.699680e-03 9.000000e-01 6.758260e-03 1.000000e+00 6.814720e-03 1.100000e+00 6.869245e-03 1.200000e+00 6.922081e-03 1.300000e+00 6.973486e-03 1.400000e+00 7.023699e-03 1.500000e+00 7.072917e-03 1.600000e+00 7.121304e-03 1.700000e+00 7.168993e-03 1.800000e+00 7.216088e-03 2.000000e-01 6.292402e-03 3.000000e-01 7.787668e-03 4.000000e-01 8.643088e-03 5.000000e-01 9.153474e-03 6.000000e-01 9.473716e-03 7.000000e-01 9.682945e-03 8.000000e-01 9.824531e-03 9.000000e-01 9.924473e-03 1.000000e+00 9.996432e-03 1.100000e+00 1.005689e-02 1.200000e+00 1.011526e-02 1.300000e+00 1.017213e-02 1.400000e+00 1.022756e-02 1.500000e+00 1.028165e-02 1.600000e+00 1.033454e-02 1.700000e+00 1.038637e-02 1.800000e+00 1.043727e-02 2.000000e-01 6.964393e-03 3.000000e-01 9.093352e-03 4.000000e-01 1.047608e-02 5.000000e-01 1.137317e-02 6.000000e-01 1.196946e-02 7.000000e-01 1.237839e-02 8.000000e-01 1.266725e-02 9.000000e-01 1.287657e-02 1.000000e+00 1.303211e-02 1.100000e+00 1.315130e-02 1.200000e+00 1.324571e-02 1.300000e+00 1.332002e-02 1.400000e+00 1.338143e-02 1.500000e+00 1.344020e-02 1.600000e+00 1.349769e-02 1.700000e+00 1.355400e-02 1.800000e+00 1.360918e-02 2.000000e-01 9.548738e-06 3.000000e-01 1.077757e-05 4.000000e-01 1.211947e-05 5.000000e-01 1.355815e-05 6.000000e-01 1.506338e-05 7.000000e-01 1.661638e-05 8.000000e-01 1.820759e-05 9.000000e-01 1.983237e-05 1.000000e+00 2.148837e-05 1.100000e+00 2.317432e-05 1.200000e+00 2.488942e-05 1.300000e+00 2.663312e-05 1.400000e+00 2.840502e-05 1.500000e+00 3.020476e-05 1.600000e+00 3.203205e-05 1.700000e+00 3.388661e-05 1.800000e+00 3.576821e-05 2.000000e-01 4.311838e-04 3.000000e-01 4.567472e-04 4.000000e-01 4.787110e-04 5.000000e-01 4.997799e-04 6.000000e-01 5.204766e-04 7.000000e-01 5.409611e-04 8.000000e-01 5.613108e-04 9.000000e-01 5.815791e-04 1.000000e+00 6.018068e-04 1.100000e+00 6.220258e-04 1.200000e+00 6.422606e-04 1.300000e+00 6.625303e-04 1.400000e+00 6.828499e-04 1.500000e+00 7.032309e-04 1.600000e+00 7.236827e-04 1.700000e+00 7.442126e-04 1.800000e+00 7.648263e-04 2.000000e-01 1.653444e-03 3.000000e-01 1.831406e-03 4.000000e-01 1.899673e-03 5.000000e-01 1.953041e-03 6.000000e-01 2.001848e-03 7.000000e-01 2.047569e-03 8.000000e-01 2.091100e-03 9.000000e-01 2.133049e-03 1.000000e+00 2.173828e-03 1.100000e+00 2.213720e-03 1.200000e+00 2.252925e-03 1.300000e+00 2.291586e-03 1.400000e+00 2.329809e-03 1.500000e+00 2.367675e-03 1.600000e+00 2.405244e-03 1.700000e+00 2.442566e-03 1.800000e+00 2.479680e-03 2.000000e-01 2.878902e-03 3.000000e-01 3.425942e-03 4.000000e-01 3.685303e-03 5.000000e-01 3.801825e-03 6.000000e-01 3.874781e-03 7.000000e-01 3.939900e-03 8.000000e-01 4.000831e-03 9.000000e-01 4.058293e-03 1.000000e+00 4.112943e-03 1.100000e+00 4.165359e-03 1.200000e+00 4.216006e-03 1.300000e+00 4.265241e-03 1.400000e+00 4.313337e-03 1.500000e+00 4.360501e-03 1.600000e+00 4.406892e-03 1.700000e+00 4.452632e-03 1.800000e+00 4.497820e-03 2.000000e-01 3.898018e-03 3.000000e-01 4.832254e-03 4.000000e-01 5.369868e-03 5.000000e-01 5.675329e-03 6.000000e-01 5.844139e-03 7.000000e-01 5.941663e-03 8.000000e-01 6.015340e-03 9.000000e-01 6.083548e-03 1.000000e+00 6.148410e-03 1.100000e+00 6.210288e-03 1.200000e+00 6.269556e-03 1.300000e+00 6.326604e-03 1.400000e+00 6.381793e-03 1.500000e+00 6.435428e-03 1.600000e+00 6.487762e-03 1.700000e+00 6.538999e-03 1.800000e+00 6.589305e-03 2.000000e-01 4.997762e-03 3.000000e-01 6.500547e-03 4.000000e-01 7.484506e-03 5.000000e-01 8.126812e-03 6.000000e-01 8.550207e-03 7.000000e-01 8.830719e-03 8.000000e-01 9.016659e-03 9.000000e-01 9.141762e-03 1.000000e+00 9.230728e-03 1.100000e+00 9.303815e-03 1.200000e+00 9.372464e-03 1.300000e+00 9.438622e-03 1.400000e+00 9.502527e-03 1.500000e+00 9.564355e-03 1.600000e+00 9.624310e-03 1.700000e+00 9.682603e-03 1.800000e+00 9.739434e-03 2.000000e-01 5.626909e-03 3.000000e-01 7.615639e-03 4.000000e-01 9.055956e-03 5.000000e-01 1.007722e-02 6.000000e-01 1.080145e-02 7.000000e-01 1.131968e-02 8.000000e-01 1.169419e-02 9.000000e-01 1.196682e-02 1.000000e+00 1.216664e-02 1.100000e+00 1.231499e-02 1.200000e+00 1.242782e-02 1.300000e+00 1.251637e-02 1.400000e+00 1.259028e-02 1.500000e+00 1.265898e-02 1.600000e+00 1.272547e-02 1.700000e+00 1.279014e-02 1.800000e+00 1.285312e-02 2.000000e-01 3.917877e-05 3.000000e-01 4.373610e-05 4.000000e-01 4.840591e-05 5.000000e-01 5.333390e-05 6.000000e-01 5.845431e-05 7.000000e-01 6.371556e-05 8.000000e-01 6.909092e-05 9.000000e-01 7.456778e-05 1.000000e+00 8.014015e-05 1.100000e+00 8.580502e-05 1.200000e+00 9.156066e-05 1.300000e+00 9.740596e-05 1.400000e+00 1.033401e-04 1.500000e+00 1.093623e-04 1.600000e+00 1.154720e-04 1.700000e+00 1.216685e-04 1.800000e+00 1.279515e-04 2.000000e-01 4.152242e-04 3.000000e-01 4.489277e-04 4.000000e-01 4.714795e-04 5.000000e-01 4.918929e-04 6.000000e-01 5.115122e-04 7.000000e-01 5.307041e-04 8.000000e-01 5.496347e-04 9.000000e-01 5.684024e-04 1.000000e+00 5.870734e-04 1.100000e+00 6.056944e-04 1.200000e+00 6.242993e-04 1.300000e+00 6.429137e-04 1.400000e+00 6.615570e-04 1.500000e+00 6.802442e-04 1.600000e+00 6.989873e-04 1.700000e+00 7.177955e-04 1.800000e+00 7.366767e-04 2.000000e-01 1.208402e-03 3.000000e-01 1.413783e-03 4.000000e-01 1.498445e-03 5.000000e-01 1.550865e-03 6.000000e-01 1.596000e-03 7.000000e-01 1.637526e-03 8.000000e-01 1.676557e-03 9.000000e-01 1.713790e-03 1.000000e+00 1.749710e-03 1.100000e+00 1.784651e-03 1.200000e+00 1.818852e-03 1.300000e+00 1.852480e-03 1.400000e+00 1.885658e-03 1.500000e+00 1.918479e-03 1.600000e+00 1.951012e-03 1.700000e+00 1.983312e-03 1.800000e+00 2.015421e-03 2.000000e-01 2.012597e-03 3.000000e-01 2.535655e-03 4.000000e-01 2.830214e-03 5.000000e-01 2.979381e-03 6.000000e-01 3.063612e-03 7.000000e-01 3.130397e-03 8.000000e-01 3.191486e-03 9.000000e-01 3.248645e-03 1.000000e+00 3.302578e-03 1.100000e+00 3.353888e-03 1.200000e+00 3.403089e-03 1.300000e+00 3.450599e-03 1.400000e+00 3.496745e-03 1.500000e+00 3.541779e-03 1.600000e+00 3.585897e-03 1.700000e+00 3.629252e-03 1.800000e+00 3.671966e-03 2.000000e-01 2.707209e-03 3.000000e-01 3.549621e-03 4.000000e-01 4.114078e-03 5.000000e-01 4.472593e-03 6.000000e-01 4.686407e-03 7.000000e-01 4.812006e-03 8.000000e-01 4.898429e-03 9.000000e-01 4.973031e-03 1.000000e+00 5.042888e-03 1.100000e+00 5.109132e-03 1.200000e+00 5.172189e-03 1.300000e+00 5.232465e-03 1.400000e+00 5.290362e-03 1.500000e+00 5.346242e-03 1.600000e+00 5.400416e-03 1.700000e+00 5.453144e-03 1.800000e+00 5.504643e-03 2.000000e-01 3.513679e-03 3.000000e-01 4.785442e-03 4.000000e-01 5.740254e-03 5.000000e-01 6.437558e-03 6.000000e-01 6.936811e-03 7.000000e-01 7.286496e-03 8.000000e-01 7.525446e-03 9.000000e-01 7.686889e-03 1.000000e+00 7.799967e-03 1.100000e+00 7.888836e-03 1.200000e+00 7.968521e-03 1.300000e+00 8.044139e-03 1.400000e+00 8.116734e-03 1.500000e+00 8.186602e-03 1.600000e+00 8.253972e-03 1.700000e+00 8.319080e-03 1.800000e+00 8.382164e-03 2.000000e-01 4.056691e-03 3.000000e-01 5.674251e-03 4.000000e-01 6.978848e-03 5.000000e-01 8.002120e-03 6.000000e-01 8.791944e-03 7.000000e-01 9.395699e-03 8.000000e-01 9.853507e-03 9.000000e-01 1.019746e-02 1.000000e+00 1.045348e-02 1.100000e+00 1.064331e-02 1.200000e+00 1.078553e-02 1.300000e+00 1.089578e-02 1.400000e+00 1.098702e-02 1.500000e+00 1.106904e-02 1.600000e+00 1.114687e-02 1.700000e+00 1.122200e-02 1.800000e+00 1.129481e-02 tmpk8ny_4pz/tests/hisim/nmos/reference/58_acFreq_CORG=0.standard0000644000175000017500000002533013546075722024576 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258.925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584.893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995.262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511.886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162.278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981.072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011.872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309.573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943.282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589.25 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848.93 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952.62 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118.86 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622.78 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810.72 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118.72 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095.73 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432.82 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 125892.5 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 158489.3 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 199526.2 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 251188.6 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 316227.8 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 398107.2 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 501187.2 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 630957.3 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 794328.2 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 1000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589250 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848930 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952620 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118860 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622780 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810720 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118720 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095730 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432820 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258.925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584.893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 1995.262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511.886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162.278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981.072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011.872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309.573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943.282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589.25 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848.93 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 19952.62 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118.86 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622.78 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810.72 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118.72 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095.73 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432.82 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 125892.5 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 158489.3 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 199526.2 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 251188.6 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 316227.8 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 398107.2 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 501187.2 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 630957.3 1.95109670680967e-14 1.51047556203098e-14 3.63962547928741e-15 794328.2 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 1000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 1995262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589250 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848930 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 19952620 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118860 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622780 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810720 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118720 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095730 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432820 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258.925 1.92253810991621e-14 1.48903692202894e-14 3.56434127432084e-15 1584.893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995.262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511.886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162.278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981.072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011.872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309.573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943.282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 12589.25 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848.93 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952.62 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118.86 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622.78 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810.72 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118.72 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095.73 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432.82 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 125892.5 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 158489.3 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 199526.2 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 251188.6 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 316227.8 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 398107.2 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 501187.2 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 630957.3 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 794328.2 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 1000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258925 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 1584893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000000 1.92253759986944e-14 1.4890367771438e-14 3.56434020406966e-15 12589250 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848930 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952620 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118860 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622780 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810720 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118720 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095730 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432820 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/45_acFreq_COOVLP=1.standard0000644000175000017500000002533013546075722025043 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258.925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584.893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995.262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511.886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162.278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981.072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011.872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309.573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943.282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589.25 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848.93 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952.62 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118.86 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622.78 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810.72 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118.72 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095.73 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432.82 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 125892.5 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 158489.3 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 199526.2 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 251188.6 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 316227.8 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 398107.2 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 501187.2 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 630957.3 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 794328.2 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 1000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589250 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848930 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952620 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118860 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622780 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810720 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118720 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095730 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432820 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258.925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584.893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 1995.262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511.886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162.278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981.072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011.872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309.573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943.282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589.25 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848.93 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 19952.62 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118.86 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622.78 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810.72 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118.72 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095.73 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432.82 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 125892.5 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 158489.3 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 199526.2 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 251188.6 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 316227.8 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 398107.2 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 501187.2 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 630957.3 1.95109670680967e-14 1.51047556203098e-14 3.63962547928741e-15 794328.2 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 1000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 1995262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589250 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848930 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 19952620 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118860 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622780 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810720 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118720 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095730 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432820 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258.925 1.92253810991621e-14 1.48903692202894e-14 3.56434127432084e-15 1584.893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995.262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511.886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162.278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981.072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011.872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309.573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943.282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 12589.25 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848.93 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952.62 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118.86 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622.78 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810.72 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118.72 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095.73 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432.82 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 125892.5 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 158489.3 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 199526.2 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 251188.6 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 316227.8 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 398107.2 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 501187.2 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 630957.3 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 794328.2 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 1000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258925 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 1584893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000000 1.92253759986944e-14 1.4890367771438e-14 3.56434020406966e-15 12589250 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848930 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952620 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118860 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622780 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810720 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118720 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095730 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432820 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/36_acVd_CORSRD=-1_GDLD.standard0000644000175000017500000000714613546075722025365 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 0.2 4.759243e-03 9.564863e-03 1.46386239634713e-14 9.64620561175226e-15 0.3 7.032326e-03 4.919515e-03 1.49704240533076e-14 8.65615734369237e-15 0.4 8.666903e-03 2.281328e-03 1.53346941519354e-14 6.63903079754656e-15 0.5 9.776300e-03 8.638449e-04 1.53477241554633e-14 4.67392826548647e-15 0.6 1.014332e-02 4.568283e-04 1.52397241262218e-14 3.98781207971752e-15 0.7 1.020019e-02 3.929787e-04 1.52273941228834e-14 3.92352106231045e-15 0.8 1.024444e-02 3.490366e-04 1.52233141217787e-14 3.89339905415478e-15 0.9 1.028520e-02 3.130814e-04 1.52193141206957e-14 3.86095404537016e-15 1 1.032091e-02 2.841080e-04 1.521482411948e-14 3.82338903519926e-15 1.1 1.035113e-02 2.609934e-04 1.52094641180288e-14 3.77821702296875e-15 1.2 1.037628e-02 2.425264e-04 1.5202994116277e-14 3.72380100823537e-15 1.3 1.039713e-02 2.276335e-04 1.5195404114222e-14 3.66009699098723e-15 1.4 1.041444e-02 2.154604e-04 1.51860441116877e-14 3.58176396977822e-15 1.5 1.042889e-02 2.053613e-04 1.5174854108658e-14 3.48831094447541e-15 1.6 1.044104e-02 1.968581e-04 1.51624641053033e-14 3.38503691651352e-15 1.7 1.045132e-02 1.895984e-04 1.51498141018783e-14 3.27972988800118e-15 1.8 1.046008e-02 1.833210e-04 1.51369740984018e-14 3.17286285906646e-15 0.2 3.819781e-03 8.365514e-03 1.42326138535423e-14 9.48305656757895e-15 0.3 5.768557e-03 5.031508e-03 1.46503939666581e-14 8.34812226029053e-15 0.4 7.420256e-03 2.641832e-03 1.50258140683047e-14 6.41097673579993e-15 0.5 8.659678e-03 1.134947e-03 1.50708840805076e-14 4.62506225225579e-15 0.6 9.180364e-03 5.868965e-04 1.49841940570359e-14 3.98186107810626e-15 0.7 9.294187e-03 4.911741e-04 1.49647140517616e-14 3.87623204950674e-15 0.8 9.371761e-03 4.381618e-04 1.4960494050619e-14 3.83910103945336e-15 0.9 9.444036e-03 3.935132e-04 1.49568840496416e-14 3.80194102939212e-15 1 9.509179e-03 3.565457e-04 1.49527940485342e-14 3.75990901801177e-15 1.1 9.566234e-03 3.265737e-04 1.49479340472184e-14 3.71137100486989e-15 1.2 9.615620e-03 3.023917e-04 1.49422740456859e-14 3.65619598993102e-15 1.3 9.658315e-03 2.827744e-04 1.49358940439585e-14 3.5953019734437e-15 1.4 9.695393e-03 2.666870e-04 1.49281940418737e-14 3.52331395395263e-15 1.5 9.727825e-03 2.533203e-04 1.49191140394152e-14 3.43970793131593e-15 1.6 9.756427e-03 2.420619e-04 1.49089740366698e-14 3.34727390628902e-15 1.7 9.781865e-03 2.324532e-04 1.48983640337971e-14 3.25124588028901e-15 1.8 9.804670e-03 2.241508e-04 1.48877940309352e-14 3.15594885448692e-15 0.2 2.696926e-03 6.292135e-03 1.36407236932855e-14 9.38186254018022e-15 0.3 4.119650e-03 4.278211e-03 1.41290938255138e-14 8.16061920952326e-15 0.4 5.447375e-03 2.567680e-03 1.45494339393227e-14 6.36475272328457e-15 0.5 6.538848e-03 1.308786e-03 1.46774039739712e-14 4.70505827391506e-15 0.6 7.153775e-03 6.830446e-04 1.46244939596456e-14 4.0096350856262e-15 0.7 7.362557e-03 5.166951e-04 1.45956739518424e-14 3.83282203775329e-15 0.8 7.470502e-03 4.592289e-04 1.45889739500284e-14 3.7750830221202e-15 0.9 7.565068e-03 4.166178e-04 1.45857939491674e-14 3.72990500988806e-15 1 7.652762e-03 3.802713e-04 1.45826239483091e-14 3.68212099695033e-15 1.1 7.732525e-03 3.497925e-04 1.45789839473235e-14 3.6298849828072e-15 1.2 7.804123e-03 3.246339e-04 1.4574933946227e-14 3.5744509677982e-15 1.3 7.868150e-03 3.039429e-04 1.45705639450438e-14 3.51697595223659e-15 1.4 7.925525e-03 2.868535e-04 1.4565323943625e-14 3.45137293447428e-15 1.5 7.977206e-03 2.726183e-04 1.45591639419572e-14 3.37727591441219e-15 1.6 8.024061e-03 2.606359e-04 1.45522339400808e-14 3.29608889243045e-15 1.7 8.066837e-03 2.504370e-04 1.45448039380691e-14 3.21064586929638e-15 1.8 8.106155e-03 2.416601e-04 1.45371939360087e-14 3.12445584596005e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/11_dcSweep_COGIDL=1.standard0000644000175000017500000003372713546075722025175 0ustar carstencarstenV(d) I(d) I(b) 2.000000e-01 1.031340e-06 -4.442258e-13 3.000000e-01 1.187672e-06 -3.725294e-12 4.000000e-01 1.363429e-06 -1.823582e-11 5.000000e-01 1.553874e-06 -6.339897e-11 6.000000e-01 1.754199e-06 -1.728377e-10 7.000000e-01 1.961598e-06 -3.930127e-10 8.000000e-01 2.174683e-06 -7.784863e-10 9.000000e-01 2.392797e-06 -1.387142e-09 1.000000e+00 2.615628e-06 -2.277373e-09 1.100000e+00 2.843023e-06 -3.507103e-09 1.200000e+00 3.074906e-06 -5.133701e-09 1.300000e+00 3.311240e-06 -7.214083e-09 1.400000e+00 3.552009e-06 -9.804712e-09 1.500000e+00 3.797207e-06 -1.296148e-08 1.600000e+00 4.046839e-06 -1.673951e-08 1.700000e+00 4.300914e-06 -2.119292e-08 1.800000e+00 4.559445e-06 -2.637464e-08 2.000000e-01 3.625488e-04 -3.868350e-14 3.000000e-01 3.836434e-04 -4.978470e-13 4.000000e-01 4.033947e-04 -3.346833e-12 5.000000e-01 4.229012e-04 -1.482378e-11 6.000000e-01 4.423754e-04 -4.886892e-11 7.000000e-01 4.618404e-04 -1.294098e-10 8.000000e-01 4.813050e-04 -2.902720e-10 9.000000e-01 5.007846e-04 -5.733047e-10 1.000000e+00 5.202970e-04 -1.026099e-09 1.100000e+00 5.398591e-04 -1.700145e-09 1.200000e+00 5.594849e-04 -2.649556e-09 1.300000e+00 5.791860e-04 -3.930174e-09 1.400000e+00 5.989714e-04 -5.598889e-09 1.500000e+00 6.188484e-04 -7.713066e-09 1.600000e+00 6.388225e-04 -1.033006e-08 1.700000e+00 6.588982e-04 -1.350678e-08 1.800000e+00 6.790789e-04 -1.729936e-08 2.000000e-01 1.846855e-03 -1.004837e-15 3.000000e-01 1.974260e-03 -2.487981e-14 4.000000e-01 2.031600e-03 -2.968565e-13 5.000000e-01 2.082672e-03 -1.996707e-12 6.000000e-01 2.130364e-03 -8.995734e-12 7.000000e-01 2.175738e-03 -3.029256e-11 8.000000e-01 2.219465e-03 -8.210945e-11 9.000000e-01 2.261982e-03 -1.888105e-10 1.000000e+00 2.303587e-03 -3.826294e-10 1.100000e+00 2.344487e-03 -7.026947e-10 1.200000e+00 2.384832e-03 -1.193813e-09 1.300000e+00 2.424730e-03 -1.905257e-09 1.400000e+00 2.464263e-03 -2.889660e-09 1.500000e+00 2.503496e-03 -4.202031e-09 1.600000e+00 2.542478e-03 -5.898898e-09 1.700000e+00 2.581247e-03 -8.037579e-09 1.800000e+00 2.619837e-03 -1.067556e-08 2.000000e-01 3.343576e-03 -2.005728e-16 3.000000e-01 3.817799e-03 -4.500216e-16 4.000000e-01 4.017737e-03 -6.887612e-15 5.000000e-01 4.104539e-03 -1.006605e-13 6.000000e-01 4.168574e-03 -8.017581e-13 7.000000e-01 4.228356e-03 -4.087836e-12 8.000000e-01 4.284866e-03 -1.512529e-11 9.000000e-01 4.338706e-03 -4.420970e-11 1.000000e+00 4.390424e-03 -1.082475e-10 1.100000e+00 4.440474e-03 -2.314355e-10 1.200000e+00 4.489208e-03 -4.451801e-10 1.300000e+00 4.536890e-03 -7.874795e-10 1.400000e+00 4.583722e-03 -1.302004e-09 1.500000e+00 4.629854e-03 -2.037053e-09 1.600000e+00 4.675403e-03 -3.044505e-09 1.700000e+00 4.720460e-03 -4.378830e-09 1.800000e+00 4.765095e-03 -6.096202e-09 2.000000e-01 4.575745e-03 -2.000000e-16 3.000000e-01 5.436588e-03 -3.000026e-16 4.000000e-01 5.883336e-03 -4.052153e-16 5.000000e-01 6.122649e-03 -1.133621e-15 6.000000e-01 6.251933e-03 -1.832781e-14 7.000000e-01 6.328676e-03 -2.065202e-13 8.000000e-01 6.392836e-03 -1.349589e-12 9.000000e-01 6.453950e-03 -5.968623e-12 1.000000e+00 6.512526e-03 -1.994389e-11 1.100000e+00 6.568841e-03 -5.419458e-11 1.200000e+00 6.623217e-03 -1.259477e-10 1.300000e+00 6.675967e-03 -2.593639e-10 1.400000e+00 6.727369e-03 -4.855290e-10 1.500000e+00 6.777652e-03 -8.419565e-10 1.600000e+00 6.827001e-03 -1.371776e-09 1.700000e+00 6.875566e-03 -2.122763e-09 1.800000e+00 6.923465e-03 -3.146338e-09 2.000000e-01 5.870243e-03 -2.000000e-16 3.000000e-01 7.364527e-03 -3.000000e-16 4.000000e-01 8.250873e-03 -4.000000e-16 5.000000e-01 8.791206e-03 -5.000000e-16 6.000000e-01 9.132925e-03 -6.000195e-16 7.000000e-01 9.355002e-03 -7.199777e-16 8.000000e-01 9.502595e-03 -2.437494e-15 9.000000e-01 9.604011e-03 -3.602264e-14 1.000000e+00 9.676653e-03 -3.392146e-13 1.100000e+00 9.739827e-03 -1.941340e-12 1.200000e+00 9.800793e-03 -7.808035e-12 1.300000e+00 9.859958e-03 -2.437471e-11 1.400000e+00 9.917427e-03 -6.306711e-11 1.500000e+00 9.973346e-03 -1.414399e-10 1.600000e+00 1.002789e-02 -2.837504e-10 1.700000e+00 1.008122e-02 -5.209685e-10 1.800000e+00 1.013349e-02 -8.903336e-10 2.000000e-01 6.544617e-03 -2.000000e-16 3.000000e-01 8.629425e-03 -3.000000e-16 4.000000e-01 1.002415e-02 -4.000000e-16 5.000000e-01 1.095009e-02 -5.000000e-16 6.000000e-01 1.157533e-02 -6.000000e-16 7.000000e-01 1.200797e-02 -7.000000e-16 8.000000e-01 1.231437e-02 -8.000000e-16 9.000000e-01 1.253558e-02 -9.000393e-16 1.000000e+00 1.269838e-02 -1.032997e-15 1.100000e+00 1.282132e-02 -3.459337e-15 1.200000e+00 1.291696e-02 -4.717233e-14 1.300000e+00 1.299134e-02 -4.147384e-13 1.400000e+00 1.305478e-02 -2.259462e-12 1.500000e+00 1.311590e-02 -8.768857e-12 1.600000e+00 1.317555e-02 -2.666694e-11 1.700000e+00 1.323383e-02 -6.767074e-11 1.800000e+00 1.329082e-02 -1.495667e-10 2.000000e-01 6.168441e-06 -7.234759e-13 3.000000e-01 6.992533e-06 -5.812616e-12 4.000000e-01 7.898861e-06 -2.746700e-11 5.000000e-01 8.873240e-06 -9.269982e-11 6.000000e-01 9.894079e-06 -2.463813e-10 7.000000e-01 1.094822e-05 -5.480450e-10 8.000000e-01 1.202905e-05 -1.064846e-09 9.000000e-01 1.313338e-05 -1.865340e-09 1.000000e+00 1.425960e-05 -3.016372e-09 1.100000e+00 1.540689e-05 -4.582454e-09 1.200000e+00 1.657475e-05 -6.626168e-09 1.300000e+00 1.776285e-05 -9.208652e-09 1.400000e+00 1.897095e-05 -1.238985e-08 1.500000e+00 2.019886e-05 -1.622853e-08 1.600000e+00 2.144645e-05 -2.078218e-08 1.700000e+00 2.271357e-05 -2.610684e-08 1.800000e+00 2.400013e-05 -3.225694e-08 2.000000e-01 3.314500e-04 -7.048517e-14 3.000000e-01 3.516443e-04 -8.517268e-13 4.000000e-01 3.692608e-04 -5.440223e-12 5.000000e-01 3.862621e-04 -2.311015e-11 6.000000e-01 4.030308e-04 -7.358122e-11 7.000000e-01 4.196771e-04 -1.891914e-10 8.000000e-01 4.362537e-04 -4.137596e-10 9.000000e-01 4.527979e-04 -7.994364e-10 1.000000e+00 4.693394e-04 -1.403525e-09 1.100000e+00 4.859015e-04 -2.286235e-09 1.200000e+00 5.025025e-04 -3.509321e-09 1.300000e+00 5.191570e-04 -5.135247e-09 1.400000e+00 5.358759e-04 -7.226597e-09 1.500000e+00 5.526683e-04 -9.845601e-09 1.600000e+00 5.695412e-04 -1.305372e-08 1.700000e+00 5.865001e-04 -1.691129e-08 1.800000e+00 6.035496e-04 -2.147725e-08 2.000000e-01 1.414259e-03 -1.974681e-15 3.000000e-01 1.567979e-03 -4.885156e-14 4.000000e-01 1.628986e-03 -5.401197e-13 5.000000e-01 1.678046e-03 -3.412142e-12 6.000000e-01 1.722925e-03 -1.461534e-11 7.000000e-01 1.764987e-03 -4.721651e-11 8.000000e-01 1.805080e-03 -1.236209e-10 9.000000e-01 1.843764e-03 -2.760231e-10 1.000000e+00 1.881414e-03 -5.453996e-10 1.100000e+00 1.918286e-03 -9.798561e-10 1.200000e+00 1.954560e-03 -1.632924e-09 1.300000e+00 1.990366e-03 -2.562053e-09 1.400000e+00 2.025798e-03 -3.827338e-09 1.500000e+00 2.060928e-03 -5.490463e-09 1.600000e+00 2.095814e-03 -7.613831e-09 1.700000e+00 2.130498e-03 -1.025984e-08 1.800000e+00 2.165016e-03 -1.349033e-08 2.000000e-01 2.542714e-03 -2.018256e-16 3.000000e-01 3.063220e-03 -6.818327e-16 4.000000e-01 3.310856e-03 -1.462594e-14 5.000000e-01 3.420396e-03 -1.979311e-13 6.000000e-01 3.491904e-03 -1.458026e-12 7.000000e-01 3.556333e-03 -6.983787e-12 8.000000e-01 3.616445e-03 -2.457124e-11 9.000000e-01 3.673005e-03 -6.890563e-11 1.000000e+00 3.726718e-03 -1.629700e-10 1.100000e+00 3.778186e-03 -3.383338e-10 1.200000e+00 3.827885e-03 -6.345570e-10 1.300000e+00 3.876178e-03 -1.098081e-09 1.400000e+00 3.923338e-03 -1.780911e-09 1.500000e+00 3.969574e-03 -2.739284e-09 1.600000e+00 4.015045e-03 -4.032431e-09 1.700000e+00 4.059873e-03 -5.721476e-09 1.800000e+00 4.104155e-03 -7.868501e-09 2.000000e-01 3.486631e-03 -2.000000e-16 3.000000e-01 4.388014e-03 -3.000118e-16 4.000000e-01 4.924867e-03 -4.164221e-16 5.000000e-01 5.232529e-03 -2.106262e-15 6.000000e-01 5.399700e-03 -3.942036e-14 7.000000e-01 5.495663e-03 -4.062044e-13 8.000000e-01 5.570693e-03 -2.453998e-12 9.000000e-01 5.640525e-03 -1.019632e-11 1.000000e+00 5.706719e-03 -3.239816e-11 1.100000e+00 5.769675e-03 -8.446707e-11 1.200000e+00 5.829825e-03 -1.896172e-10 1.300000e+00 5.887607e-03 -3.791612e-10 1.400000e+00 5.943411e-03 -6.920697e-10 1.500000e+00 5.997568e-03 -1.174045e-09 1.600000e+00 6.050346e-03 -1.876347e-09 1.700000e+00 6.101964e-03 -2.854543e-09 1.800000e+00 6.152598e-03 -4.167312e-09 2.000000e-01 4.523458e-03 -2.000000e-16 3.000000e-01 5.961592e-03 -3.000000e-16 4.000000e-01 6.939779e-03 -4.000000e-16 5.000000e-01 7.596286e-03 -5.000000e-16 6.000000e-01 8.035751e-03 -6.000865e-16 7.000000e-01 8.327590e-03 -7.626923e-16 8.000000e-01 8.519006e-03 -4.946642e-15 9.000000e-01 8.645414e-03 -7.778262e-14 1.000000e+00 8.735120e-03 -6.672520e-13 1.100000e+00 8.810856e-03 -3.529840e-12 1.200000e+00 8.882452e-03 -1.333831e-11 1.300000e+00 8.951286e-03 -3.959547e-11 1.400000e+00 9.017592e-03 -9.829528e-11 1.500000e+00 9.081583e-03 -2.129407e-10 1.600000e+00 9.143496e-03 -4.148117e-10 1.700000e+00 9.203570e-03 -7.425854e-10 1.800000e+00 9.262030e-03 -1.241505e-09 2.000000e-01 5.146662e-03 -2.000000e-16 3.000000e-01 7.031863e-03 -3.000000e-16 4.000000e-01 8.439639e-03 -4.000000e-16 5.000000e-01 9.465363e-03 -5.000000e-16 6.000000e-01 1.020835e-02 -6.000000e-16 7.000000e-01 1.074777e-02 -7.000000e-16 8.000000e-01 1.114061e-02 -8.000000e-16 9.000000e-01 1.142684e-02 -9.001744e-16 1.000000e+00 1.163539e-02 -1.103505e-15 1.100000e+00 1.178842e-02 -7.073728e-15 1.200000e+00 1.190317e-02 -1.018271e-13 1.300000e+00 1.199275e-02 -8.157198e-13 1.400000e+00 1.206906e-02 -4.108138e-12 1.500000e+00 1.214087e-02 -1.497952e-11 1.600000e+00 1.221034e-02 -4.331897e-11 1.700000e+00 1.227777e-02 -1.054704e-10 1.800000e+00 1.234331e-02 -2.251760e-10 2.000000e-01 2.757247e-05 -1.048898e-12 3.000000e-01 3.088944e-05 -8.156892e-12 4.000000e-01 3.432618e-05 -3.752476e-11 5.000000e-01 3.796746e-05 -1.238204e-10 6.000000e-01 4.175816e-05 -3.228065e-10 7.000000e-01 4.565761e-05 -7.061345e-10 8.000000e-01 4.964493e-05 -1.352059e-09 9.000000e-01 5.371024e-05 -2.338004e-09 1.000000e+00 5.784880e-05 -3.737386e-09 1.100000e+00 6.205822e-05 -5.619500e-09 1.200000e+00 6.633713e-05 -8.050478e-09 1.300000e+00 7.068465e-05 -1.109418e-08 1.400000e+00 7.510013e-05 -1.481271e-08 1.500000e+00 7.958304e-05 -1.926652e-08 1.600000e+00 8.413294e-05 -2.451446e-08 1.700000e+00 8.874943e-05 -3.061356e-08 1.800000e+00 9.343213e-05 -3.761896e-08 2.000000e-01 3.233979e-04 -1.113646e-13 3.000000e-01 3.491751e-04 -1.281941e-12 4.000000e-01 3.669805e-04 -7.875437e-12 5.000000e-01 3.832630e-04 -3.240969e-11 6.000000e-01 3.989945e-04 -1.004982e-10 7.000000e-01 4.144369e-04 -2.526778e-10 8.000000e-01 4.297081e-04 -5.420791e-10 9.000000e-01 4.448786e-04 -1.030022e-09 1.000000e+00 4.599963e-04 -1.782073e-09 1.100000e+00 4.750956e-04 -2.865541e-09 1.200000e+00 4.902017e-04 -4.348161e-09 1.300000e+00 5.053338e-04 -6.297392e-09 1.400000e+00 5.205065e-04 -8.779972e-09 1.500000e+00 5.357311e-04 -1.186156e-08 1.600000e+00 5.510168e-04 -1.560641e-08 1.700000e+00 5.663707e-04 -2.007712e-08 1.800000e+00 5.817988e-04 -2.533437e-08 2.000000e-01 1.006788e-03 -3.438856e-15 3.000000e-01 1.176557e-03 -8.180155e-14 4.000000e-01 1.246390e-03 -8.519717e-13 5.000000e-01 1.291247e-03 -5.131012e-12 6.000000e-01 1.330236e-03 -2.114973e-11 7.000000e-01 1.366185e-03 -6.620647e-11 8.000000e-01 1.400047e-03 -1.688325e-10 9.000000e-01 1.432421e-03 -3.686376e-10 1.000000e+00 1.463717e-03 -7.145365e-10 1.100000e+00 1.494216e-03 -1.262475e-09 1.200000e+00 1.524118e-03 -2.073339e-09 1.300000e+00 1.553561e-03 -3.211246e-09 1.400000e+00 1.582649e-03 -4.742194e-09 1.500000e+00 1.611458e-03 -6.732999e-09 1.600000e+00 1.640047e-03 -9.250447e-09 1.700000e+00 1.668460e-03 -1.236063e-08 1.800000e+00 1.696735e-03 -1.612841e-08 2.000000e-01 1.720602e-03 -2.044081e-16 3.000000e-01 2.182212e-03 -1.077114e-15 4.000000e-01 2.443001e-03 -2.625332e-14 5.000000e-01 2.573625e-03 -3.313949e-13 6.000000e-01 2.648907e-03 -2.298770e-12 7.000000e-01 2.710122e-03 -1.049966e-11 8.000000e-01 2.766323e-03 -3.555372e-11 9.000000e-01 2.818908e-03 -9.661517e-11 1.000000e+00 2.868539e-03 -2.225691e-10 1.100000e+00 2.915786e-03 -4.518525e-10 1.200000e+00 2.961130e-03 -8.313406e-10 1.300000e+00 3.004955e-03 -1.414798e-09 1.400000e+00 3.047559e-03 -2.261239e-09 1.500000e+00 3.089172e-03 -3.433386e-09 1.600000e+00 3.129973e-03 -4.996314e-09 1.700000e+00 3.170099e-03 -7.016296e-09 1.800000e+00 3.209660e-03 -9.559864e-09 2.000000e-01 2.344551e-03 -2.000000e-16 3.000000e-01 3.101925e-03 -3.000371e-16 4.000000e-01 3.621184e-03 -4.392890e-16 5.000000e-01 3.954178e-03 -3.759206e-15 6.000000e-01 4.151658e-03 -7.107669e-14 7.000000e-01 4.267092e-03 -6.800748e-13 8.000000e-01 4.348380e-03 -3.868630e-12 9.000000e-01 4.419815e-03 -1.532870e-11 1.000000e+00 4.486875e-03 -4.687793e-11 1.100000e+00 4.550436e-03 -1.184333e-10 1.200000e+00 4.610907e-03 -2.589604e-10 1.300000e+00 4.668697e-03 -5.063777e-10 1.400000e+00 4.724201e-03 -9.066883e-10 1.500000e+00 4.777774e-03 -1.512673e-09 1.600000e+00 4.829718e-03 -2.382416e-09 1.700000e+00 4.880286e-03 -3.577852e-09 1.800000e+00 4.929683e-03 -5.163438e-09 2.000000e-01 3.084402e-03 -2.000000e-16 3.000000e-01 4.235437e-03 -3.000000e-16 4.000000e-01 5.122679e-03 -4.000000e-16 5.000000e-01 5.785658e-03 -5.000000e-16 6.000000e-01 6.267956e-03 -6.002687e-16 7.000000e-01 6.608144e-03 -8.495987e-16 8.000000e-01 6.840111e-03 -9.206872e-15 9.000000e-01 6.995611e-03 -1.404372e-13 1.000000e+00 7.104437e-03 -1.117107e-12 1.100000e+00 7.191523e-03 -5.564445e-12 1.200000e+00 7.270752e-03 -2.005186e-11 1.300000e+00 7.346161e-03 -5.729152e-11 1.400000e+00 7.418531e-03 -1.378218e-10 1.500000e+00 7.488126e-03 -2.908131e-10 1.600000e+00 7.555177e-03 -5.539897e-10 1.700000e+00 7.619930e-03 -9.728703e-10 1.800000e+00 7.682630e-03 -1.599591e-09 2.000000e-01 3.603565e-03 -2.000000e-16 3.000000e-01 5.071371e-03 -3.000000e-16 4.000000e-01 6.281326e-03 -4.000000e-16 5.000000e-01 7.251718e-03 -5.000000e-16 6.000000e-01 8.015715e-03 -6.000000e-16 7.000000e-01 8.608979e-03 -7.000000e-16 8.000000e-01 9.063670e-03 -8.000000e-16 9.000000e-01 9.407070e-03 -9.005412e-16 1.000000e+00 9.662614e-03 -1.246909e-15 1.100000e+00 9.851179e-03 -1.320980e-14 1.200000e+00 9.991500e-03 -1.838246e-13 1.300000e+00 1.010011e-02 -1.365597e-12 1.400000e+00 1.019103e-02 -6.475970e-12 1.500000e+00 1.027396e-02 -2.251903e-11 1.600000e+00 1.035306e-02 -6.267904e-11 1.700000e+00 1.042945e-02 -1.478822e-10 1.800000e+00 1.050344e-02 -3.075230e-10 tmpk8ny_4pz/tests/hisim/nmos/reference/48_acFreq_COIIGS=0.standard0000644000175000017500000002533013546075722025020 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258.925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584.893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995.262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511.886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162.278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981.072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011.872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309.573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943.282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589.25 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848.93 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952.62 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118.86 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622.78 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810.72 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118.72 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095.73 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432.82 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 125892.5 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 158489.3 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 199526.2 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 251188.6 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 316227.8 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 398107.2 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 501187.2 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 630957.3 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 794328.2 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 1000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589250 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848930 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952620 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118860 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622780 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810720 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118720 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095730 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432820 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258.925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584.893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 1995.262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511.886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162.278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981.072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011.872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309.573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943.282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589.25 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848.93 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 19952.62 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118.86 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622.78 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810.72 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118.72 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095.73 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432.82 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 125892.5 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 158489.3 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 199526.2 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 251188.6 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 316227.8 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 398107.2 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 501187.2 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 630957.3 1.95109670680967e-14 1.51047556203098e-14 3.63962547928741e-15 794328.2 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 1000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 1995262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589250 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848930 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 19952620 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118860 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622780 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810720 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118720 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095730 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432820 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258.925 1.92253810991621e-14 1.48903692202894e-14 3.56434127432084e-15 1584.893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995.262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511.886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162.278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981.072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011.872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309.573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943.282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 12589.25 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848.93 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952.62 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118.86 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622.78 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810.72 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118.72 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095.73 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432.82 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 125892.5 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 158489.3 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 199526.2 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 251188.6 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 316227.8 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 398107.2 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 501187.2 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 630957.3 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 794328.2 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 1000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258925 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 1584893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000000 1.92253759986944e-14 1.4890367771438e-14 3.56434020406966e-15 12589250 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848930 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952620 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118860 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622780 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810720 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118720 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095730 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432820 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/35_acVd_CORSRD=0.standard0000644000175000017500000000715313546075722024512 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 0.2 5.457212e-03 1.167455e-02 1.32882335978472e-14 1.06351928795249e-14 0.3 7.499722e-03 5.782586e-03 1.39456237758385e-14 9.38533254111974e-15 0.4 8.827840e-03 2.877560e-03 1.46071939549615e-14 7.62078206336e-15 0.5 9.745832e-03 1.325058e-03 1.50387440718056e-14 5.61479652023066e-15 0.6 1.032182e-02 5.428156e-04 1.50989340881023e-14 4.37391318425608e-15 0.7 1.046253e-02 3.640996e-04 1.50647240788398e-14 3.95182606997415e-15 0.8 1.048503e-02 3.278262e-04 1.50619740780952e-14 3.89722405519042e-15 0.9 1.050543e-02 2.992767e-04 1.50616840780167e-14 3.85687604426602e-15 1 1.052668e-02 2.738046e-04 1.50615640779842e-14 3.81261903228324e-15 1.1 1.054715e-02 2.517398e-04 1.50615040779679e-14 3.76123801837161e-15 1.2 1.056575e-02 2.331253e-04 1.50614740779598e-14 3.70144000218103e-15 1.3 1.058213e-02 2.176091e-04 1.50614540779544e-14 3.63066198301757e-15 1.4 1.059633e-02 2.046913e-04 1.50614440779517e-14 3.54422195961356e-15 1.5 1.060857e-02 1.938818e-04 1.5061434077949e-14 3.44452993262151e-15 1.6 1.061912e-02 1.847608e-04 1.50614240779463e-14 3.33891390402551e-15 1.7 1.062822e-02 1.769893e-04 1.50614240779463e-14 3.23305287536317e-15 1.8 1.063610e-02 1.703007e-04 1.50614240779463e-14 3.12224384536115e-15 0.2 4.226394e-03 1.126599e-02 1.31004935470158e-14 1.04629628328928e-14 0.3 6.110437e-03 6.683166e-03 1.37363337191723e-14 9.23110849936291e-15 0.4 7.582344e-03 3.756512e-03 1.43732338916158e-14 7.5360100404076e-15 0.5 8.724916e-03 1.906119e-03 1.48059940087875e-14 5.62471052291492e-15 0.6 9.503908e-03 8.570185e-04 1.48926740322565e-14 4.39721919056628e-15 0.7 9.785703e-03 5.202026e-04 1.4862464024077e-14 3.94358506774287e-15 0.8 9.843432e-03 4.558668e-04 1.48547640219922e-14 3.84703504160152e-15 0.9 9.884593e-03 4.154272e-04 1.48541640218297e-14 3.80003102887498e-15 1 9.925734e-03 3.791888e-04 1.48540840218081e-14 3.75191601584763e-15 1.1 9.965196e-03 3.473858e-04 1.48540540217999e-14 3.69848600138122e-15 1.2 1.000148e-02 3.202834e-04 1.48540340217945e-14 3.63984698550445e-15 1.3 1.003405e-02 2.975138e-04 1.48540240217918e-14 3.57400996767879e-15 1.4 1.006295e-02 2.784454e-04 1.48540140217891e-14 3.49636094665498e-15 1.5 1.008850e-02 2.624232e-04 1.48540140217891e-14 3.40792092270946e-15 1.6 1.011111e-02 2.488678e-04 1.48540040217864e-14 3.31263789691117e-15 1.7 1.013119e-02 2.373007e-04 1.48540040217864e-14 3.21598987074329e-15 1.8 1.014909e-02 2.273386e-04 1.48540040217864e-14 3.12045684487731e-15 0.2 2.866239e-03 8.810054e-03 1.2824923472404e-14 1.02682927801851e-14 0.3 4.294226e-03 6.127745e-03 1.34218136340146e-14 9.09930146367558e-15 0.4 5.583223e-03 3.961572e-03 1.40202037960314e-14 7.54986504415891e-15 0.5 6.699969e-03 2.312510e-03 1.4465753916666e-14 5.78811256715673e-15 0.6 7.554643e-03 1.206650e-03 1.46082939552593e-14 4.51723422306088e-15 0.7 8.017037e-03 6.798478e-04 1.45940039513903e-14 3.97834107715321e-15 0.8 8.170882e-03 5.347061e-04 1.45772539468551e-14 3.80169802932633e-15 0.9 8.245040e-03 4.832887e-04 1.45737439459048e-14 3.73251201059391e-15 1 8.309994e-03 4.444044e-04 1.45732339457667e-14 3.67767599574682e-15 1.1 8.372395e-03 4.096999e-04 1.45731639457477e-14 3.62174798060407e-15 1.2 8.431181e-03 3.791876e-04 1.45731439457423e-14 3.56455496511881e-15 1.3 8.485466e-03 3.529251e-04 1.45731439457423e-14 3.50390194869674e-15 1.4 8.535042e-03 3.305580e-04 1.45731339457396e-14 3.43472592996703e-15 1.5 8.580119e-03 3.115548e-04 1.45731339457396e-14 3.35741890903582e-15 1.6 8.621096e-03 2.953685e-04 1.45731339457396e-14 3.27382888640346e-15 1.7 8.658432e-03 2.815070e-04 1.45731339457396e-14 3.18714886293446e-15 1.8 8.692577e-03 2.695541e-04 1.45731339457396e-14 3.10076583954588e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/6_dcSweep_COISUB=0.standard0000644000175000017500000002266113546075722025136 0ustar carstencarstenV(d) I(b) 2.000000e-01 -2.000000e-16 3.000000e-01 -3.000000e-16 4.000000e-01 -4.000000e-16 5.000000e-01 -5.000000e-16 6.000000e-01 -6.000000e-16 7.000000e-01 -7.000000e-16 8.000000e-01 -8.000000e-16 9.000000e-01 -9.000000e-16 1.000000e+00 -1.000000e-15 1.100000e+00 -1.100000e-15 1.200000e+00 -1.200000e-15 1.300000e+00 -1.300000e-15 1.400000e+00 -1.400000e-15 1.500000e+00 -1.500000e-15 1.600000e+00 -1.600000e-15 1.700000e+00 -1.700000e-15 1.800000e+00 -1.800000e-15 2.000000e-01 -2.000000e-16 3.000000e-01 -3.000000e-16 4.000000e-01 -4.000000e-16 5.000000e-01 -5.000000e-16 6.000000e-01 -6.000000e-16 7.000000e-01 -7.000000e-16 8.000000e-01 -8.000000e-16 9.000000e-01 -9.000000e-16 1.000000e+00 -1.000000e-15 1.100000e+00 -1.100000e-15 1.200000e+00 -1.200000e-15 1.300000e+00 -1.300000e-15 1.400000e+00 -1.400000e-15 1.500000e+00 -1.500000e-15 1.600000e+00 -1.600000e-15 1.700000e+00 -1.700000e-15 1.800000e+00 -1.800000e-15 2.000000e-01 -2.000000e-16 3.000000e-01 -3.000000e-16 4.000000e-01 -4.000000e-16 5.000000e-01 -5.000000e-16 6.000000e-01 -6.000000e-16 7.000000e-01 -7.000000e-16 8.000000e-01 -8.000000e-16 9.000000e-01 -9.000000e-16 1.000000e+00 -1.000000e-15 1.100000e+00 -1.100000e-15 1.200000e+00 -1.200000e-15 1.300000e+00 -1.300000e-15 1.400000e+00 -1.400000e-15 1.500000e+00 -1.500000e-15 1.600000e+00 -1.600000e-15 1.700000e+00 -1.700000e-15 1.800000e+00 -1.800000e-15 2.000000e-01 -2.000000e-16 3.000000e-01 -3.000000e-16 4.000000e-01 -4.000000e-16 5.000000e-01 -5.000000e-16 6.000000e-01 -6.000000e-16 7.000000e-01 -7.000000e-16 8.000000e-01 -8.000000e-16 9.000000e-01 -9.000000e-16 1.000000e+00 -1.000000e-15 1.100000e+00 -1.100000e-15 1.200000e+00 -1.200000e-15 1.300000e+00 -1.300000e-15 1.400000e+00 -1.400000e-15 1.500000e+00 -1.500000e-15 1.600000e+00 -1.600000e-15 1.700000e+00 -1.700000e-15 1.800000e+00 -1.800000e-15 2.000000e-01 -2.000000e-16 3.000000e-01 -3.000000e-16 4.000000e-01 -4.000000e-16 5.000000e-01 -5.000000e-16 6.000000e-01 -6.000000e-16 7.000000e-01 -7.000000e-16 8.000000e-01 -8.000000e-16 9.000000e-01 -9.000000e-16 1.000000e+00 -1.000000e-15 1.100000e+00 -1.100000e-15 1.200000e+00 -1.200000e-15 1.300000e+00 -1.300000e-15 1.400000e+00 -1.400000e-15 1.500000e+00 -1.500000e-15 1.600000e+00 -1.600000e-15 1.700000e+00 -1.700000e-15 1.800000e+00 -1.800000e-15 2.000000e-01 -2.000000e-16 3.000000e-01 -3.000000e-16 4.000000e-01 -4.000000e-16 5.000000e-01 -5.000000e-16 6.000000e-01 -6.000000e-16 7.000000e-01 -7.000000e-16 8.000000e-01 -8.000000e-16 9.000000e-01 -9.000000e-16 1.000000e+00 -1.000000e-15 1.100000e+00 -1.100000e-15 1.200000e+00 -1.200000e-15 1.300000e+00 -1.300000e-15 1.400000e+00 -1.400000e-15 1.500000e+00 -1.500000e-15 1.600000e+00 -1.600000e-15 1.700000e+00 -1.700000e-15 1.800000e+00 -1.800000e-15 2.000000e-01 -2.000000e-16 3.000000e-01 -3.000000e-16 4.000000e-01 -4.000000e-16 5.000000e-01 -5.000000e-16 6.000000e-01 -6.000000e-16 7.000000e-01 -7.000000e-16 8.000000e-01 -8.000000e-16 9.000000e-01 -9.000000e-16 1.000000e+00 -1.000000e-15 1.100000e+00 -1.100000e-15 1.200000e+00 -1.200000e-15 1.300000e+00 -1.300000e-15 1.400000e+00 -1.400000e-15 1.500000e+00 -1.500000e-15 1.600000e+00 -1.600000e-15 1.700000e+00 -1.700000e-15 1.800000e+00 -1.800000e-15 2.000000e-01 -2.000000e-16 3.000000e-01 -3.000000e-16 4.000000e-01 -4.000000e-16 5.000000e-01 -5.000000e-16 6.000000e-01 -6.000000e-16 7.000000e-01 -7.000000e-16 8.000000e-01 -8.000000e-16 9.000000e-01 -9.000000e-16 1.000000e+00 -1.000000e-15 1.100000e+00 -1.100000e-15 1.200000e+00 -1.200000e-15 1.300000e+00 -1.300000e-15 1.400000e+00 -1.400000e-15 1.500000e+00 -1.500000e-15 1.600000e+00 -1.600000e-15 1.700000e+00 -1.700000e-15 1.800000e+00 -1.800000e-15 2.000000e-01 -2.000000e-16 3.000000e-01 -3.000000e-16 4.000000e-01 -4.000000e-16 5.000000e-01 -5.000000e-16 6.000000e-01 -6.000000e-16 7.000000e-01 -7.000000e-16 8.000000e-01 -8.000000e-16 9.000000e-01 -9.000000e-16 1.000000e+00 -1.000000e-15 1.100000e+00 -1.100000e-15 1.200000e+00 -1.200000e-15 1.300000e+00 -1.300000e-15 1.400000e+00 -1.400000e-15 1.500000e+00 -1.500000e-15 1.600000e+00 -1.600000e-15 1.700000e+00 -1.700000e-15 1.800000e+00 -1.800000e-15 2.000000e-01 -2.000000e-16 3.000000e-01 -3.000000e-16 4.000000e-01 -4.000000e-16 5.000000e-01 -5.000000e-16 6.000000e-01 -6.000000e-16 7.000000e-01 -7.000000e-16 8.000000e-01 -8.000000e-16 9.000000e-01 -9.000000e-16 1.000000e+00 -1.000000e-15 1.100000e+00 -1.100000e-15 1.200000e+00 -1.200000e-15 1.300000e+00 -1.300000e-15 1.400000e+00 -1.400000e-15 1.500000e+00 -1.500000e-15 1.600000e+00 -1.600000e-15 1.700000e+00 -1.700000e-15 1.800000e+00 -1.800000e-15 2.000000e-01 -2.000000e-16 3.000000e-01 -3.000000e-16 4.000000e-01 -4.000000e-16 5.000000e-01 -5.000000e-16 6.000000e-01 -6.000000e-16 7.000000e-01 -7.000000e-16 8.000000e-01 -8.000000e-16 9.000000e-01 -9.000000e-16 1.000000e+00 -1.000000e-15 1.100000e+00 -1.100000e-15 1.200000e+00 -1.200000e-15 1.300000e+00 -1.300000e-15 1.400000e+00 -1.400000e-15 1.500000e+00 -1.500000e-15 1.600000e+00 -1.600000e-15 1.700000e+00 -1.700000e-15 1.800000e+00 -1.800000e-15 2.000000e-01 -2.000000e-16 3.000000e-01 -3.000000e-16 4.000000e-01 -4.000000e-16 5.000000e-01 -5.000000e-16 6.000000e-01 -6.000000e-16 7.000000e-01 -7.000000e-16 8.000000e-01 -8.000000e-16 9.000000e-01 -9.000000e-16 1.000000e+00 -1.000000e-15 1.100000e+00 -1.100000e-15 1.200000e+00 -1.200000e-15 1.300000e+00 -1.300000e-15 1.400000e+00 -1.400000e-15 1.500000e+00 -1.500000e-15 1.600000e+00 -1.600000e-15 1.700000e+00 -1.700000e-15 1.800000e+00 -1.800000e-15 2.000000e-01 -2.000000e-16 3.000000e-01 -3.000000e-16 4.000000e-01 -4.000000e-16 5.000000e-01 -5.000000e-16 6.000000e-01 -6.000000e-16 7.000000e-01 -7.000000e-16 8.000000e-01 -8.000000e-16 9.000000e-01 -9.000000e-16 1.000000e+00 -1.000000e-15 1.100000e+00 -1.100000e-15 1.200000e+00 -1.200000e-15 1.300000e+00 -1.300000e-15 1.400000e+00 -1.400000e-15 1.500000e+00 -1.500000e-15 1.600000e+00 -1.600000e-15 1.700000e+00 -1.700000e-15 1.800000e+00 -1.800000e-15 2.000000e-01 -2.000000e-16 3.000000e-01 -3.000000e-16 4.000000e-01 -4.000000e-16 5.000000e-01 -5.000000e-16 6.000000e-01 -6.000000e-16 7.000000e-01 -7.000000e-16 8.000000e-01 -8.000000e-16 9.000000e-01 -9.000000e-16 1.000000e+00 -1.000000e-15 1.100000e+00 -1.100000e-15 1.200000e+00 -1.200000e-15 1.300000e+00 -1.300000e-15 1.400000e+00 -1.400000e-15 1.500000e+00 -1.500000e-15 1.600000e+00 -1.600000e-15 1.700000e+00 -1.700000e-15 1.800000e+00 -1.800000e-15 2.000000e-01 -2.000000e-16 3.000000e-01 -3.000000e-16 4.000000e-01 -4.000000e-16 5.000000e-01 -5.000000e-16 6.000000e-01 -6.000000e-16 7.000000e-01 -7.000000e-16 8.000000e-01 -8.000000e-16 9.000000e-01 -9.000000e-16 1.000000e+00 -1.000000e-15 1.100000e+00 -1.100000e-15 1.200000e+00 -1.200000e-15 1.300000e+00 -1.300000e-15 1.400000e+00 -1.400000e-15 1.500000e+00 -1.500000e-15 1.600000e+00 -1.600000e-15 1.700000e+00 -1.700000e-15 1.800000e+00 -1.800000e-15 2.000000e-01 -2.000000e-16 3.000000e-01 -3.000000e-16 4.000000e-01 -4.000000e-16 5.000000e-01 -5.000000e-16 6.000000e-01 -6.000000e-16 7.000000e-01 -7.000000e-16 8.000000e-01 -8.000000e-16 9.000000e-01 -9.000000e-16 1.000000e+00 -1.000000e-15 1.100000e+00 -1.100000e-15 1.200000e+00 -1.200000e-15 1.300000e+00 -1.300000e-15 1.400000e+00 -1.400000e-15 1.500000e+00 -1.500000e-15 1.600000e+00 -1.600000e-15 1.700000e+00 -1.700000e-15 1.800000e+00 -1.800000e-15 2.000000e-01 -2.000000e-16 3.000000e-01 -3.000000e-16 4.000000e-01 -4.000000e-16 5.000000e-01 -5.000000e-16 6.000000e-01 -6.000000e-16 7.000000e-01 -7.000000e-16 8.000000e-01 -8.000000e-16 9.000000e-01 -9.000000e-16 1.000000e+00 -1.000000e-15 1.100000e+00 -1.100000e-15 1.200000e+00 -1.200000e-15 1.300000e+00 -1.300000e-15 1.400000e+00 -1.400000e-15 1.500000e+00 -1.500000e-15 1.600000e+00 -1.600000e-15 1.700000e+00 -1.700000e-15 1.800000e+00 -1.800000e-15 2.000000e-01 -2.000000e-16 3.000000e-01 -3.000000e-16 4.000000e-01 -4.000000e-16 5.000000e-01 -5.000000e-16 6.000000e-01 -6.000000e-16 7.000000e-01 -7.000000e-16 8.000000e-01 -8.000000e-16 9.000000e-01 -9.000000e-16 1.000000e+00 -1.000000e-15 1.100000e+00 -1.100000e-15 1.200000e+00 -1.200000e-15 1.300000e+00 -1.300000e-15 1.400000e+00 -1.400000e-15 1.500000e+00 -1.500000e-15 1.600000e+00 -1.600000e-15 1.700000e+00 -1.700000e-15 1.800000e+00 -1.800000e-15 2.000000e-01 -2.000000e-16 3.000000e-01 -3.000000e-16 4.000000e-01 -4.000000e-16 5.000000e-01 -5.000000e-16 6.000000e-01 -6.000000e-16 7.000000e-01 -7.000000e-16 8.000000e-01 -8.000000e-16 9.000000e-01 -9.000000e-16 1.000000e+00 -1.000000e-15 1.100000e+00 -1.100000e-15 1.200000e+00 -1.200000e-15 1.300000e+00 -1.300000e-15 1.400000e+00 -1.400000e-15 1.500000e+00 -1.500000e-15 1.600000e+00 -1.600000e-15 1.700000e+00 -1.700000e-15 1.800000e+00 -1.800000e-15 2.000000e-01 -2.000000e-16 3.000000e-01 -3.000000e-16 4.000000e-01 -4.000000e-16 5.000000e-01 -5.000000e-16 6.000000e-01 -6.000000e-16 7.000000e-01 -7.000000e-16 8.000000e-01 -8.000000e-16 9.000000e-01 -9.000000e-16 1.000000e+00 -1.000000e-15 1.100000e+00 -1.100000e-15 1.200000e+00 -1.200000e-15 1.300000e+00 -1.300000e-15 1.400000e+00 -1.400000e-15 1.500000e+00 -1.500000e-15 1.600000e+00 -1.600000e-15 1.700000e+00 -1.700000e-15 1.800000e+00 -1.800000e-15 2.000000e-01 -2.000000e-16 3.000000e-01 -3.000000e-16 4.000000e-01 -4.000000e-16 5.000000e-01 -5.000000e-16 6.000000e-01 -6.000000e-16 7.000000e-01 -7.000000e-16 8.000000e-01 -8.000000e-16 9.000000e-01 -9.000000e-16 1.000000e+00 -1.000000e-15 1.100000e+00 -1.100000e-15 1.200000e+00 -1.200000e-15 1.300000e+00 -1.300000e-15 1.400000e+00 -1.400000e-15 1.500000e+00 -1.500000e-15 1.600000e+00 -1.600000e-15 1.700000e+00 -1.700000e-15 1.800000e+00 -1.800000e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/10_dcSweep_COGIDL=0.standard0000644000175000017500000003372713546075722025173 0ustar carstencarstenV(d) I(d) I(b) 2.000000e-01 1.031423e-06 -8.357176e-11 3.000000e-01 1.188107e-06 -4.391570e-10 4.000000e-01 1.364874e-06 -1.462508e-09 5.000000e-01 1.557485e-06 -3.674970e-09 6.000000e-01 1.761610e-06 -7.584140e-09 7.000000e-01 1.974746e-06 -1.354086e-08 8.000000e-01 2.195597e-06 -2.169250e-08 9.000000e-01 2.423442e-06 -3.203182e-08 1.000000e+00 2.657827e-06 -4.447691e-08 1.100000e+00 2.898448e-06 -5.893228e-08 1.200000e+00 3.145092e-06 -7.531895e-08 1.300000e+00 3.397609e-06 -9.358284e-08 1.400000e+00 3.655896e-06 -1.136925e-07 1.500000e+00 3.919879e-06 -1.356337e-07 1.600000e+00 4.189503e-06 -1.594038e-07 1.700000e+00 4.464729e-06 -1.850077e-07 1.800000e+00 4.745525e-06 -2.124546e-07 2.000000e-01 3.625489e-04 -2.499923e-11 3.000000e-01 3.836436e-04 -1.598849e-10 4.000000e-01 4.033953e-04 -6.159265e-10 5.000000e-01 4.229029e-04 -1.731230e-09 6.000000e-01 4.423792e-04 -3.904251e-09 7.000000e-01 4.618477e-04 -7.489497e-09 8.000000e-01 4.813174e-04 -1.272872e-08 9.000000e-01 5.008038e-04 -1.974701e-08 1.000000e+00 5.203246e-04 -2.858868e-08 1.100000e+00 5.398967e-04 -3.925761e-08 1.200000e+00 5.595340e-04 -5.174462e-08 1.300000e+00 5.792481e-04 -6.604119e-08 1.400000e+00 5.990480e-04 -8.214422e-08 1.500000e+00 6.189407e-04 -1.000565e-07 1.600000e+00 6.389320e-04 -1.197853e-07 1.700000e+00 6.590260e-04 -1.413412e-07 1.800000e+00 6.792263e-04 -1.647365e-07 2.000000e-01 1.846855e-03 -3.955921e-12 3.000000e-01 1.974260e-03 -3.713309e-11 4.000000e-01 2.031600e-03 -1.860791e-10 5.000000e-01 2.082672e-03 -6.326508e-10 6.000000e-01 2.130366e-03 -1.646546e-09 7.000000e-01 2.175741e-03 -3.530079e-09 8.000000e-01 2.219471e-03 -6.554020e-09 9.000000e-01 2.261993e-03 -1.092310e-08 1.000000e+00 2.303604e-03 -1.677591e-08 1.100000e+00 2.344511e-03 -2.420202e-08 1.200000e+00 2.384864e-03 -3.326050e-08 1.300000e+00 2.424772e-03 -4.399343e-08 1.400000e+00 2.464317e-03 -5.643380e-08 1.500000e+00 2.503563e-03 -7.060975e-08 1.600000e+00 2.542559e-03 -8.654646e-08 1.700000e+00 2.581344e-03 -1.042670e-07 1.800000e+00 2.619950e-03 -1.237927e-07 2.000000e-01 3.343576e-03 -1.412325e-13 3.000000e-01 3.817799e-03 -3.405915e-12 4.000000e-01 4.017738e-03 -3.004430e-11 5.000000e-01 4.104539e-03 -1.479593e-10 6.000000e-01 4.168575e-03 -4.986518e-10 7.000000e-01 4.228357e-03 -1.291141e-09 8.000000e-01 4.284869e-03 -2.764952e-09 9.000000e-01 4.338711e-03 -5.149148e-09 1.000000e+00 4.390433e-03 -8.638407e-09 1.100000e+00 4.440487e-03 -1.338774e-08 1.200000e+00 4.489227e-03 -1.951758e-08 1.300000e+00 4.536916e-03 -2.712178e-08 1.400000e+00 4.583757e-03 -3.627474e-08 1.500000e+00 4.629899e-03 -4.703687e-08 1.600000e+00 4.675460e-03 -5.945826e-08 1.700000e+00 4.720529e-03 -7.358120e-08 1.800000e+00 4.765179e-03 -8.944195e-08 2.000000e-01 4.575745e-03 -2.230055e-16 3.000000e-01 5.436588e-03 -2.435248e-14 4.000000e-01 5.883336e-03 -1.130306e-12 5.000000e-01 6.122649e-03 -1.378676e-11 6.000000e-01 6.251933e-03 -8.090980e-11 7.000000e-01 6.328676e-03 -3.024543e-10 8.000000e-01 6.392837e-03 -8.378408e-10 9.000000e-01 6.453952e-03 -1.883733e-09 1.000000e+00 6.512530e-03 -3.644615e-09 1.100000e+00 6.568847e-03 -6.311214e-09 1.200000e+00 6.623226e-03 -1.005034e-08 1.300000e+00 6.675982e-03 -1.500297e-08 1.400000e+00 6.727390e-03 -2.128645e-08 1.500000e+00 6.777680e-03 -2.899811e-08 1.600000e+00 6.827038e-03 -3.821886e-08 1.700000e+00 6.875613e-03 -4.901635e-08 1.800000e+00 6.923523e-03 -6.144752e-08 2.000000e-01 5.870243e-03 -2.000000e-16 3.000000e-01 7.364527e-03 -3.000000e-16 4.000000e-01 8.250873e-03 -4.000002e-16 5.000000e-01 8.791206e-03 -9.432078e-16 6.000000e-01 9.132925e-03 -1.574606e-13 7.000000e-01 9.355002e-03 -4.175390e-12 8.000000e-01 9.502595e-03 -3.522104e-11 9.000000e-01 9.604011e-03 -1.596554e-10 1.000000e+00 9.676654e-03 -4.962552e-10 1.100000e+00 9.739828e-03 -1.204510e-09 1.200000e+00 9.800796e-03 -2.463643e-09 1.300000e+00 9.859962e-03 -4.453857e-09 1.400000e+00 9.917434e-03 -7.344176e-09 1.500000e+00 9.973358e-03 -1.128647e-08 1.600000e+00 1.002790e-02 -1.641368e-08 1.700000e+00 1.008124e-02 -2.284040e-08 1.800000e+00 1.013352e-02 -3.066465e-08 2.000000e-01 6.544617e-03 -2.000000e-16 3.000000e-01 8.629425e-03 -3.000000e-16 4.000000e-01 1.002415e-02 -4.000000e-16 5.000000e-01 1.095009e-02 -5.000000e-16 6.000000e-01 1.157533e-02 -6.000000e-16 7.000000e-01 1.200797e-02 -7.000010e-16 8.000000e-01 1.231437e-02 -1.976755e-15 9.000000e-01 1.253558e-02 -3.129946e-13 1.000000e+00 1.269838e-02 -6.866102e-12 1.100000e+00 1.282132e-02 -5.067109e-11 1.200000e+00 1.291696e-02 -2.088579e-10 1.300000e+00 1.299134e-02 -6.064997e-10 1.400000e+00 1.305478e-02 -1.401704e-09 1.500000e+00 1.311590e-02 -2.766695e-09 1.600000e+00 1.317556e-02 -4.872670e-09 1.700000e+00 1.323384e-02 -7.880325e-09 1.800000e+00 1.329083e-02 -1.193511e-08 2.000000e-01 6.168542e-06 -1.010111e-10 3.000000e-01 6.993049e-06 -5.221931e-10 4.000000e-01 7.900549e-06 -1.715959e-09 5.000000e-01 8.877411e-06 -4.263871e-09 6.000000e-01 9.902548e-06 -8.715984e-09 7.000000e-01 1.096311e-05 -1.543405e-08 8.000000e-01 1.205254e-05 -2.454828e-08 9.000000e-01 1.316753e-05 -3.601991e-08 1.000000e+00 1.430632e-05 -4.973414e-08 1.100000e+00 1.546788e-05 -6.556801e-08 1.200000e+00 1.665155e-05 -8.342238e-08 1.300000e+00 1.785687e-05 -1.032293e-07 1.400000e+00 1.908350e-05 -1.249483e-07 1.500000e+00 2.033119e-05 -1.485591e-07 1.600000e+00 2.159972e-05 -1.740555e-07 1.700000e+00 2.288890e-05 -2.014396e-07 1.800000e+00 2.419859e-05 -2.307191e-07 2.000000e-01 3.314500e-04 -3.157035e-11 3.000000e-01 3.516445e-04 -1.969242e-10 4.000000e-01 3.692615e-04 -7.438721e-10 5.000000e-01 3.862642e-04 -2.057899e-09 6.000000e-01 4.030353e-04 -4.580242e-09 7.000000e-01 4.196856e-04 -8.689191e-09 8.000000e-01 4.362679e-04 -1.462800e-08 9.000000e-01 4.528196e-04 -2.250769e-08 1.000000e+00 4.693703e-04 -3.235220e-08 1.100000e+00 4.859433e-04 -4.414528e-08 1.200000e+00 5.025569e-04 -5.786086e-08 1.300000e+00 5.192253e-04 -7.347737e-08 1.400000e+00 5.359597e-04 -9.098197e-08 1.500000e+00 5.527689e-04 -1.103703e-07 1.600000e+00 5.696598e-04 -1.316443e-07 1.700000e+00 5.866380e-04 -1.548106e-07 1.800000e+00 6.037080e-04 -1.798783e-07 2.000000e-01 1.414259e-03 -5.374643e-12 3.000000e-01 1.567979e-03 -4.833572e-11 4.000000e-01 1.628986e-03 -2.347030e-10 5.000000e-01 1.678047e-03 -7.788310e-10 6.000000e-01 1.722926e-03 -1.988198e-09 7.000000e-01 1.764991e-03 -4.195855e-09 8.000000e-01 1.805087e-03 -7.688558e-09 9.000000e-01 1.843776e-03 -1.267264e-08 1.000000e+00 1.881432e-03 -1.927898e-08 1.100000e+00 1.918313e-03 -2.758546e-08 1.200000e+00 1.954596e-03 -3.763900e-08 1.300000e+00 1.990413e-03 -4.947069e-08 1.400000e+00 2.025857e-03 -6.310431e-08 1.500000e+00 2.061002e-03 -7.856037e-08 1.600000e+00 2.095902e-03 -9.585787e-08 1.700000e+00 2.130603e-03 -1.150149e-07 1.800000e+00 2.165138e-03 -1.360485e-07 2.000000e-01 2.542714e-03 -2.218104e-13 3.000000e-01 3.063220e-03 -4.895299e-12 4.000000e-01 3.310856e-03 -4.073095e-11 5.000000e-01 3.420396e-03 -1.924416e-10 6.000000e-01 3.491905e-03 -6.287645e-10 7.000000e-01 3.556334e-03 -1.589291e-09 8.000000e-01 3.616449e-03 -3.338520e-09 9.000000e-01 3.673011e-03 -6.120169e-09 1.000000e+00 3.726728e-03 -1.013368e-08 1.100000e+00 3.778201e-03 -1.553198e-08 1.200000e+00 3.827907e-03 -2.242969e-08 1.300000e+00 3.876207e-03 -3.091338e-08 1.400000e+00 3.923377e-03 -4.105004e-08 1.500000e+00 3.969624e-03 -5.289307e-08 1.600000e+00 4.015107e-03 -6.648627e-08 1.700000e+00 4.059949e-03 -8.186642e-08 1.800000e+00 4.104247e-03 -9.906491e-08 2.000000e-01 3.486631e-03 -2.551739e-16 3.000000e-01 4.388014e-03 -4.368423e-14 4.000000e-01 4.924867e-03 -1.767327e-12 5.000000e-01 5.232529e-03 -1.978481e-11 6.000000e-01 5.399700e-03 -1.096310e-10 7.000000e-01 5.495664e-03 -3.933095e-10 8.000000e-01 5.570695e-03 -1.056383e-09 9.000000e-01 5.640527e-03 -2.318658e-09 1.000000e+00 5.706723e-03 -4.400611e-09 1.100000e+00 5.769682e-03 -7.501340e-09 1.200000e+00 5.829837e-03 -1.178999e-08 1.300000e+00 5.887624e-03 -1.740590e-08 1.400000e+00 5.943435e-03 -2.446247e-08 1.500000e+00 5.997600e-03 -3.305202e-08 1.600000e+00 6.050387e-03 -4.325009e-08 1.700000e+00 6.102016e-03 -5.511900e-08 1.800000e+00 6.152663e-03 -6.871069e-08 2.000000e-01 4.523458e-03 -2.000000e-16 3.000000e-01 5.961592e-03 -3.000000e-16 4.000000e-01 6.939779e-03 -4.000010e-16 5.000000e-01 7.596286e-03 -1.540811e-15 6.000000e-01 8.035751e-03 -2.821553e-13 7.000000e-01 8.327590e-03 -6.520127e-12 8.000000e-01 8.519006e-03 -5.052293e-11 9.000000e-01 8.645415e-03 -2.162978e-10 1.000000e+00 8.735121e-03 -6.452915e-10 1.100000e+00 8.810858e-03 -1.518661e-09 1.200000e+00 8.882455e-03 -3.032434e-09 1.300000e+00 8.951291e-03 -5.377693e-09 1.400000e+00 9.017601e-03 -8.729080e-09 1.500000e+00 9.081596e-03 -1.324009e-08 1.600000e+00 9.143514e-03 -1.904255e-08 1.700000e+00 9.203596e-03 -2.624829e-08 1.800000e+00 9.262063e-03 -3.495156e-08 2.000000e-01 5.146662e-03 -2.000000e-16 3.000000e-01 7.031863e-03 -3.000000e-16 4.000000e-01 8.439639e-03 -4.000000e-16 5.000000e-01 9.465363e-03 -5.000000e-16 6.000000e-01 1.020835e-02 -6.000000e-16 7.000000e-01 1.074777e-02 -7.000050e-16 8.000000e-01 1.114061e-02 -3.556711e-15 9.000000e-01 1.142684e-02 -5.607744e-13 1.000000e+00 1.163539e-02 -1.072015e-11 1.100000e+00 1.178842e-02 -7.268128e-11 1.200000e+00 1.190317e-02 -2.829505e-10 1.300000e+00 1.199275e-02 -7.886388e-10 1.400000e+00 1.206906e-02 -1.767282e-09 1.500000e+00 1.214088e-02 -3.405450e-09 1.600000e+00 1.221035e-02 -5.883379e-09 1.700000e+00 1.227778e-02 -9.366335e-09 1.800000e+00 1.234333e-02 -1.400101e-08 2.000000e-01 2.757259e-05 -1.167501e-10 3.000000e-01 3.089003e-05 -5.961097e-10 4.000000e-01 3.432808e-05 -1.939067e-09 5.000000e-01 3.797211e-05 -4.777481e-09 6.000000e-01 4.176753e-05 -9.695398e-09 7.000000e-01 4.567397e-05 -1.706130e-08 8.000000e-01 4.967057e-05 -2.698863e-08 9.000000e-01 5.374731e-05 -3.941057e-08 1.000000e+00 5.789925e-05 -5.418385e-08 1.100000e+00 6.212376e-05 -7.116231e-08 1.200000e+00 6.641931e-05 -9.023002e-08 1.300000e+00 7.078486e-05 -1.113078e-07 1.400000e+00 7.521966e-05 -1.343479e-07 1.500000e+00 7.972310e-05 -1.593256e-07 1.600000e+00 8.429466e-05 -1.862317e-07 1.700000e+00 8.893388e-05 -2.150668e-07 1.800000e+00 9.364035e-05 -2.458372e-07 2.000000e-01 3.233979e-04 -3.772563e-11 3.000000e-01 3.491753e-04 -2.308894e-10 4.000000e-01 3.669813e-04 -8.592668e-10 5.000000e-01 3.832653e-04 -2.348611e-09 6.000000e-01 3.989996e-04 -5.175240e-09 7.000000e-01 4.144464e-04 -9.735457e-09 8.000000e-01 4.297238e-04 -1.627147e-08 9.000000e-01 4.449024e-04 -2.488053e-08 1.000000e+00 4.600301e-04 -3.556822e-08 1.100000e+00 4.751410e-04 -4.830073e-08 1.200000e+00 4.902604e-04 -6.303764e-08 1.300000e+00 5.054073e-04 -7.974649e-08 1.400000e+00 5.205961e-04 -9.840651e-08 1.500000e+00 5.358383e-04 -1.190076e-07 1.600000e+00 5.511427e-04 -1.415476e-07 1.700000e+00 5.665166e-04 -1.660301e-07 1.800000e+00 5.819659e-04 -1.924619e-07 2.000000e-01 1.006788e-03 -6.789385e-12 3.000000e-01 1.176557e-03 -5.910440e-11 4.000000e-01 1.246390e-03 -2.802022e-10 5.000000e-01 1.291248e-03 -9.128232e-10 6.000000e-01 1.330238e-03 -2.296286e-09 7.000000e-01 1.366190e-03 -4.788312e-09 8.000000e-01 1.400055e-03 -8.687139e-09 9.000000e-01 1.432435e-03 -1.419841e-08 1.000000e+00 1.463737e-03 -2.144489e-08 1.100000e+00 1.494246e-03 -3.049357e-08 1.200000e+00 1.524157e-03 -4.138053e-08 1.300000e+00 1.553612e-03 -5.412742e-08 1.400000e+00 1.582713e-03 -6.875022e-08 1.500000e+00 1.611537e-03 -8.526318e-08 1.600000e+00 1.640141e-03 -1.036803e-07 1.700000e+00 1.668572e-03 -1.240157e-07 1.800000e+00 1.696865e-03 -1.462832e-07 2.000000e-01 1.720602e-03 -3.128548e-13 3.000000e-01 2.182212e-03 -6.454063e-12 4.000000e-01 2.443001e-03 -5.136777e-11 5.000000e-01 2.573625e-03 -2.351712e-10 6.000000e-01 2.648908e-03 -7.504850e-10 7.000000e-01 2.710124e-03 -1.862555e-09 8.000000e-01 2.766326e-03 -3.855720e-09 9.000000e-01 2.818915e-03 -6.984241e-09 1.000000e+00 2.868551e-03 -1.144977e-08 1.100000e+00 2.915803e-03 -1.740197e-08 1.200000e+00 2.961154e-03 -2.494955e-08 1.300000e+00 3.004988e-03 -3.417231e-08 1.400000e+00 3.047602e-03 -4.513064e-08 1.500000e+00 3.089227e-03 -5.787195e-08 1.600000e+00 3.130040e-03 -7.243477e-08 1.700000e+00 3.170181e-03 -8.885133e-08 1.800000e+00 3.209758e-03 -1.071491e-07 2.000000e-01 2.344551e-03 -3.073317e-16 3.000000e-01 3.101925e-03 -6.827024e-14 4.000000e-01 3.621184e-03 -2.484117e-12 5.000000e-01 3.954178e-03 -2.605381e-11 6.000000e-01 4.151658e-03 -1.382052e-10 7.000000e-01 4.267092e-03 -4.805709e-10 8.000000e-01 4.348382e-03 -1.260817e-09 9.000000e-01 4.419818e-03 -2.717273e-09 1.000000e+00 4.486880e-03 -5.082304e-09 1.100000e+00 4.550444e-03 -8.560380e-09 1.200000e+00 4.610920e-03 -1.332116e-08 1.300000e+00 4.668716e-03 -1.950149e-08 1.400000e+00 4.724227e-03 -2.721070e-08 1.500000e+00 4.777809e-03 -3.653642e-08 1.600000e+00 4.829764e-03 -4.754940e-08 1.700000e+00 4.880342e-03 -6.030743e-08 1.800000e+00 4.929753e-03 -7.485822e-08 2.000000e-01 3.084402e-03 -2.000000e-16 3.000000e-01 4.235437e-03 -3.000000e-16 4.000000e-01 5.122679e-03 -4.000034e-16 5.000000e-01 5.785658e-03 -2.492623e-15 6.000000e-01 6.267956e-03 -4.400792e-13 7.000000e-01 6.608144e-03 -9.155390e-12 8.000000e-01 6.840111e-03 -6.651016e-11 9.000000e-01 6.995611e-03 -2.726433e-10 1.000000e+00 7.104437e-03 -7.884259e-10 1.100000e+00 7.191525e-03 -1.812526e-09 1.200000e+00 7.270756e-03 -3.553734e-09 1.300000e+00 7.346167e-03 -6.210728e-09 1.400000e+00 7.418541e-03 -9.961443e-09 1.500000e+00 7.488140e-03 -1.495958e-08 1.600000e+00 7.555198e-03 -2.133519e-08 1.700000e+00 7.619958e-03 -2.919715e-08 1.800000e+00 7.682667e-03 -3.863622e-08 2.000000e-01 3.603565e-03 -2.000000e-16 3.000000e-01 5.071371e-03 -3.000000e-16 4.000000e-01 6.281326e-03 -4.000000e-16 5.000000e-01 7.251718e-03 -5.000000e-16 6.000000e-01 8.015715e-03 -6.000000e-16 7.000000e-01 8.608979e-03 -7.000165e-16 8.000000e-01 9.063670e-03 -6.067924e-15 9.000000e-01 9.407070e-03 -8.744318e-13 1.000000e+00 9.662614e-03 -1.505112e-11 1.100000e+00 9.851179e-03 -9.567617e-11 1.200000e+00 9.991500e-03 -3.566535e-10 1.300000e+00 1.010011e-02 -9.635639e-10 1.400000e+00 1.019104e-02 -2.109251e-09 1.500000e+00 1.027396e-02 -3.990872e-09 1.600000e+00 1.035307e-02 -6.794747e-09 1.700000e+00 1.042946e-02 -1.068867e-08 1.800000e+00 1.050346e-02 -1.581933e-08 tmpk8ny_4pz/tests/hisim/nmos/reference/50_acFreq_COGIDL=0.standard0000644000175000017500000002533013546075722024775 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258.925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584.893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995.262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511.886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162.278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981.072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011.872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309.573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943.282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589.25 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848.93 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952.62 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118.86 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622.78 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810.72 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118.72 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095.73 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432.82 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 125892.5 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 158489.3 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 199526.2 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 251188.6 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 316227.8 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 398107.2 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 501187.2 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 630957.3 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 794328.2 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 1000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589250 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848930 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952620 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118860 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622780 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810720 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118720 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095730 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432820 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258.925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584.893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 1995.262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511.886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162.278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981.072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011.872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309.573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943.282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589.25 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848.93 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 19952.62 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118.86 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622.78 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810.72 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118.72 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095.73 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432.82 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 125892.5 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 158489.3 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 199526.2 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 251188.6 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 316227.8 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 398107.2 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 501187.2 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 630957.3 1.95109670680967e-14 1.51047556203098e-14 3.63962547928741e-15 794328.2 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 1000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 1995262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589250 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848930 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 19952620 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118860 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622780 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810720 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118720 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095730 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432820 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258.925 1.92253810991621e-14 1.48903692202894e-14 3.56434127432084e-15 1584.893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995.262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511.886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162.278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981.072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011.872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309.573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943.282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 12589.25 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848.93 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952.62 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118.86 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622.78 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810.72 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118.72 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095.73 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432.82 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 125892.5 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 158489.3 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 199526.2 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 251188.6 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 316227.8 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 398107.2 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 501187.2 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 630957.3 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 794328.2 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 1000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258925 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 1584893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000000 1.92253759986944e-14 1.4890367771438e-14 3.56434020406966e-15 12589250 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848930 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952620 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118860 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622780 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810720 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118720 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095730 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432820 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/4_dcSweep_NSUBPFAC.standard0000644000175000017500000002211413546075722025165 0ustar carstencarstenV(d) I(d) 2.000000e-01 2.377921e-06 3.000000e-01 2.716730e-06 4.000000e-01 3.093264e-06 5.000000e-01 3.499661e-06 6.000000e-01 3.926471e-06 7.000000e-01 4.367966e-06 8.000000e-01 4.821226e-06 9.000000e-01 5.284808e-06 1.000000e+00 5.757969e-06 1.100000e+00 6.240292e-06 1.200000e+00 6.731513e-06 1.300000e+00 7.231449e-06 1.400000e+00 7.739958e-06 1.500000e+00 8.256922e-06 1.600000e+00 8.782244e-06 1.700000e+00 9.315833e-06 1.800000e+00 9.857613e-06 2.000000e-01 4.944996e-04 3.000000e-01 5.217992e-04 4.000000e-01 5.468345e-04 5.000000e-01 5.712256e-04 6.000000e-01 5.953740e-04 7.000000e-01 6.193756e-04 8.000000e-01 6.432754e-04 9.000000e-01 6.671118e-04 1.000000e+00 6.909190e-04 1.100000e+00 7.147261e-04 1.200000e+00 7.385564e-04 1.300000e+00 7.624283e-04 1.400000e+00 7.863565e-04 1.500000e+00 8.103524e-04 1.600000e+00 8.344248e-04 1.700000e+00 8.585810e-04 1.800000e+00 8.828266e-04 2.000000e-01 2.039435e-03 3.000000e-01 2.201227e-03 4.000000e-01 2.264869e-03 5.000000e-01 2.319638e-03 6.000000e-01 2.370576e-03 7.000000e-01 2.418817e-03 8.000000e-01 2.465121e-03 9.000000e-01 2.509999e-03 1.000000e+00 2.553799e-03 1.100000e+00 2.596766e-03 1.200000e+00 2.639077e-03 1.300000e+00 2.680859e-03 1.400000e+00 2.722210e-03 1.500000e+00 2.763202e-03 1.600000e+00 2.803893e-03 1.700000e+00 2.844329e-03 1.800000e+00 2.884545e-03 2.000000e-01 3.514212e-03 3.000000e-01 4.029672e-03 4.000000e-01 4.257069e-03 5.000000e-01 4.357262e-03 6.000000e-01 4.423703e-03 7.000000e-01 4.485157e-03 8.000000e-01 4.543291e-03 9.000000e-01 4.598647e-03 1.000000e+00 4.651751e-03 1.100000e+00 4.703062e-03 1.200000e+00 4.752949e-03 1.300000e+00 4.801695e-03 1.400000e+00 4.849518e-03 1.500000e+00 4.896582e-03 1.600000e+00 4.943013e-03 1.700000e+00 4.988911e-03 1.800000e+00 5.034352e-03 2.000000e-01 4.721366e-03 3.000000e-01 5.625796e-03 4.000000e-01 6.100237e-03 5.000000e-01 6.359450e-03 6.000000e-01 6.503438e-03 7.000000e-01 6.587943e-03 8.000000e-01 6.653411e-03 9.000000e-01 6.715410e-03 1.000000e+00 6.774919e-03 1.100000e+00 6.832165e-03 1.200000e+00 6.887427e-03 1.300000e+00 6.941005e-03 1.400000e+00 6.993173e-03 1.500000e+00 7.044165e-03 1.600000e+00 7.094173e-03 1.700000e+00 7.143353e-03 1.800000e+00 7.191829e-03 2.000000e-01 5.976283e-03 3.000000e-01 7.516995e-03 4.000000e-01 8.436176e-03 5.000000e-01 8.999216e-03 6.000000e-01 9.357478e-03 7.000000e-01 9.592490e-03 8.000000e-01 9.750440e-03 9.000000e-01 9.860172e-03 1.000000e+00 9.938729e-03 1.100000e+00 1.000296e-02 1.200000e+00 1.006442e-02 1.300000e+00 1.012413e-02 1.400000e+00 1.018217e-02 1.500000e+00 1.023866e-02 1.600000e+00 1.029375e-02 1.700000e+00 1.034761e-02 1.800000e+00 1.040038e-02 2.000000e-01 6.615957e-03 3.000000e-01 8.743019e-03 4.000000e-01 1.017359e-02 5.000000e-01 1.112712e-02 6.000000e-01 1.177301e-02 7.000000e-01 1.222133e-02 8.000000e-01 1.254009e-02 9.000000e-01 1.277142e-02 1.000000e+00 1.294261e-02 1.100000e+00 1.307245e-02 1.200000e+00 1.317403e-02 1.300000e+00 1.325423e-02 1.400000e+00 1.331945e-02 1.500000e+00 1.338101e-02 1.600000e+00 1.344107e-02 1.700000e+00 1.349978e-02 1.800000e+00 1.355720e-02 2.000000e-01 1.131585e-05 3.000000e-01 1.272513e-05 4.000000e-01 1.425028e-05 5.000000e-01 1.588031e-05 6.000000e-01 1.758384e-05 7.000000e-01 1.934080e-05 8.000000e-01 2.114096e-05 9.000000e-01 2.297935e-05 1.000000e+00 2.485351e-05 1.100000e+00 2.676211e-05 1.200000e+00 2.870436e-05 1.300000e+00 3.067972e-05 1.400000e+00 3.268777e-05 1.500000e+00 3.472819e-05 1.600000e+00 3.680068e-05 1.700000e+00 3.890499e-05 1.800000e+00 4.104088e-05 2.000000e-01 4.344395e-04 3.000000e-01 4.610114e-04 4.000000e-01 4.833241e-04 5.000000e-01 5.045319e-04 6.000000e-01 5.252555e-04 7.000000e-01 5.457036e-04 8.000000e-01 5.659784e-04 9.000000e-01 5.861465e-04 1.000000e+00 6.062570e-04 1.100000e+00 6.263467e-04 1.200000e+00 6.464438e-04 1.300000e+00 6.665699e-04 1.400000e+00 6.867416e-04 1.500000e+00 7.069722e-04 1.600000e+00 7.272720e-04 1.700000e+00 7.476493e-04 1.800000e+00 7.681107e-04 2.000000e-01 1.566117e-03 3.000000e-01 1.759854e-03 4.000000e-01 1.832485e-03 5.000000e-01 1.886975e-03 6.000000e-01 1.936517e-03 7.000000e-01 1.982711e-03 8.000000e-01 2.026514e-03 9.000000e-01 2.068589e-03 1.000000e+00 2.109390e-03 1.100000e+00 2.149230e-03 1.200000e+00 2.188329e-03 1.300000e+00 2.226845e-03 1.400000e+00 2.264894e-03 1.500000e+00 2.302563e-03 1.600000e+00 2.339920e-03 1.700000e+00 2.377019e-03 1.800000e+00 2.413900e-03 2.000000e-01 2.679917e-03 3.000000e-01 3.248829e-03 4.000000e-01 3.532630e-03 5.000000e-01 3.662091e-03 6.000000e-01 3.739347e-03 7.000000e-01 3.807108e-03 8.000000e-01 3.870326e-03 9.000000e-01 3.929769e-03 1.000000e+00 3.986117e-03 1.100000e+00 4.039990e-03 1.200000e+00 4.091894e-03 1.300000e+00 4.142225e-03 1.400000e+00 4.191288e-03 1.500000e+00 4.239313e-03 1.600000e+00 4.286478e-03 1.700000e+00 4.332922e-03 1.800000e+00 4.378753e-03 2.000000e-01 3.604487e-03 3.000000e-01 4.552621e-03 4.000000e-01 5.125334e-03 5.000000e-01 5.461575e-03 6.000000e-01 5.650395e-03 7.000000e-01 5.758065e-03 8.000000e-01 5.836628e-03 9.000000e-01 5.908532e-03 1.000000e+00 5.976729e-03 1.100000e+00 6.041626e-03 1.200000e+00 6.103611e-03 1.300000e+00 6.163101e-03 1.400000e+00 6.220489e-03 1.500000e+00 6.276115e-03 1.600000e+00 6.330261e-03 1.700000e+00 6.383158e-03 1.800000e+00 6.434994e-03 2.000000e-01 4.612268e-03 3.000000e-01 6.093634e-03 4.000000e-01 7.107539e-03 5.000000e-01 7.792430e-03 6.000000e-01 8.254886e-03 7.000000e-01 8.565998e-03 8.000000e-01 8.773441e-03 9.000000e-01 8.912176e-03 1.000000e+00 9.009483e-03 1.100000e+00 9.087875e-03 1.200000e+00 9.160742e-03 1.300000e+00 9.230765e-03 1.400000e+00 9.298258e-03 1.500000e+00 9.363410e-03 1.600000e+00 9.426440e-03 1.700000e+00 9.487577e-03 1.800000e+00 9.547042e-03 2.000000e-01 5.210372e-03 3.000000e-01 7.132360e-03 4.000000e-01 8.574363e-03 5.000000e-01 9.629447e-03 6.000000e-01 1.039675e-02 7.000000e-01 1.095631e-02 8.000000e-01 1.136616e-02 9.000000e-01 1.166707e-02 1.000000e+00 1.188828e-02 1.100000e+00 1.205193e-02 1.200000e+00 1.217525e-02 1.300000e+00 1.227128e-02 1.400000e+00 1.235071e-02 1.500000e+00 1.242366e-02 1.600000e+00 1.249398e-02 1.700000e+00 1.256226e-02 1.800000e+00 1.262863e-02 2.000000e-01 4.141890e-05 3.000000e-01 4.611315e-05 4.000000e-01 5.085763e-05 5.000000e-01 5.584109e-05 6.000000e-01 6.100935e-05 7.000000e-01 6.631514e-05 8.000000e-01 7.173378e-05 9.000000e-01 7.725377e-05 1.000000e+00 8.286980e-05 1.100000e+00 8.857935e-05 1.200000e+00 9.438104e-05 1.300000e+00 1.002740e-04 1.400000e+00 1.062577e-04 1.500000e+00 1.123316e-04 1.600000e+00 1.184951e-04 1.700000e+00 1.247479e-04 1.800000e+00 1.310896e-04 2.000000e-01 3.998310e-04 3.000000e-01 4.344185e-04 4.000000e-01 4.567196e-04 5.000000e-01 4.766481e-04 6.000000e-01 4.956828e-04 7.000000e-01 5.142347e-04 8.000000e-01 5.324917e-04 9.000000e-01 5.505646e-04 1.000000e+00 5.685261e-04 1.100000e+00 5.864270e-04 1.200000e+00 6.043040e-04 1.300000e+00 6.221842e-04 1.400000e+00 6.400883e-04 1.500000e+00 6.580324e-04 1.600000e+00 6.760288e-04 1.700000e+00 6.940878e-04 1.800000e+00 7.122173e-04 2.000000e-01 1.107672e-03 3.000000e-01 1.313759e-03 4.000000e-01 1.400708e-03 5.000000e-01 1.452542e-03 6.000000e-01 1.496620e-03 7.000000e-01 1.537060e-03 8.000000e-01 1.574975e-03 9.000000e-01 1.611057e-03 1.000000e+00 1.645795e-03 1.100000e+00 1.679533e-03 1.200000e+00 1.712515e-03 1.300000e+00 1.744916e-03 1.400000e+00 1.776863e-03 1.500000e+00 1.808450e-03 1.600000e+00 1.839750e-03 1.700000e+00 1.870820e-03 1.800000e+00 1.901703e-03 2.000000e-01 1.814700e-03 3.000000e-01 2.318652e-03 4.000000e-01 2.615333e-03 5.000000e-01 2.770341e-03 6.000000e-01 2.856508e-03 7.000000e-01 2.922967e-03 8.000000e-01 2.983474e-03 9.000000e-01 3.040070e-03 1.000000e+00 3.093431e-03 1.100000e+00 3.144130e-03 1.200000e+00 3.192675e-03 1.300000e+00 3.239486e-03 1.400000e+00 3.284893e-03 1.500000e+00 3.329157e-03 1.600000e+00 3.372480e-03 1.700000e+00 3.415022e-03 1.800000e+00 3.456908e-03 2.000000e-01 2.427717e-03 3.000000e-01 3.225134e-03 4.000000e-01 3.780408e-03 5.000000e-01 4.145236e-03 6.000000e-01 4.368698e-03 7.000000e-01 4.500972e-03 8.000000e-01 4.589978e-03 9.000000e-01 4.665425e-03 1.000000e+00 4.735860e-03 1.100000e+00 4.802645e-03 1.200000e+00 4.866194e-03 1.300000e+00 4.926891e-03 1.400000e+00 4.985126e-03 1.500000e+00 5.041263e-03 1.600000e+00 5.095617e-03 1.700000e+00 5.148458e-03 1.800000e+00 5.200008e-03 2.000000e-01 3.150915e-03 3.000000e-01 4.336970e-03 4.000000e-01 5.257213e-03 5.000000e-01 5.950171e-03 6.000000e-01 6.459501e-03 7.000000e-01 6.824024e-03 8.000000e-01 7.077166e-03 9.000000e-01 7.249500e-03 1.000000e+00 7.369561e-03 1.100000e+00 7.462414e-03 1.200000e+00 7.544679e-03 1.300000e+00 7.622484e-03 1.400000e+00 7.697132e-03 1.500000e+00 7.768944e-03 1.600000e+00 7.838140e-03 1.700000e+00 7.904953e-03 1.800000e+00 7.969619e-03 2.000000e-01 3.655219e-03 3.000000e-01 5.152339e-03 4.000000e-01 6.391607e-03 5.000000e-01 7.389833e-03 6.000000e-01 8.179454e-03 7.000000e-01 8.796040e-03 8.000000e-01 9.271983e-03 9.000000e-01 9.634751e-03 1.000000e+00 9.907659e-03 1.100000e+00 1.011119e-02 1.200000e+00 1.026363e-02 1.300000e+00 1.038106e-02 1.400000e+00 1.047733e-02 1.500000e+00 1.056312e-02 1.600000e+00 1.064415e-02 1.700000e+00 1.072225e-02 1.800000e+00 1.079790e-02 tmpk8ny_4pz/tests/hisim/nmos/reference/68_acFreq_WPE.standard0000644000175000017500000002526413546075722024331 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97245177312192e-14 1.52598443802765e-14 3.70121027202983e-15 1258.925 1.97245303430088e-14 1.52598481302169e-14 3.70121256584962e-15 1584.893 1.97245250427587e-14 1.52598421364931e-14 3.70121079187702e-15 1995.262 1.97245251978684e-14 1.52598460934474e-14 3.70121139177673e-15 2511.886 1.9724526268394e-14 1.52598437599128e-14 3.70121163013297e-15 3162.278 1.97245193961899e-14 1.52598406348e-14 3.70121036370851e-15 3981.072 1.97245217305455e-14 1.52598445713325e-14 3.70121059272944e-15 5011.872 1.97245231232673e-14 1.52598462073355e-14 3.70121224119131e-15 6309.573 1.97245240702423e-14 1.52598450775688e-14 3.70121075511493e-15 7943.282 1.9724524153902e-14 1.52598445050781e-14 3.70121185911515e-15 10000 1.97245177312192e-14 1.52598443802765e-14 3.70121027202983e-15 12589.25 1.97245303430088e-14 1.52598481302169e-14 3.70121256584962e-15 15848.93 1.97245250427587e-14 1.52598421364931e-14 3.70121079187702e-15 19952.62 1.97245251978684e-14 1.52598460934474e-14 3.70121139177673e-15 25118.86 1.9724526268394e-14 1.52598437599128e-14 3.70121163013297e-15 31622.78 1.97245193961899e-14 1.52598406348e-14 3.70121036370851e-15 39810.72 1.97245217305455e-14 1.52598445713325e-14 3.70121059272944e-15 50118.72 1.97245231232673e-14 1.52598462073355e-14 3.70121224119131e-15 63095.73 1.97245240702423e-14 1.52598450775688e-14 3.70121075511493e-15 79432.82 1.9724524153902e-14 1.52598445050781e-14 3.70121185911515e-15 100000 1.97245177312193e-14 1.52598443802765e-14 3.70121027202983e-15 125892.5 1.97245303430088e-14 1.52598481302168e-14 3.70121256584962e-15 158489.3 1.97245250427587e-14 1.52598421364931e-14 3.70121079187702e-15 199526.2 1.97245251978684e-14 1.52598460934474e-14 3.70121139177673e-15 251188.6 1.9724526268394e-14 1.52598437599128e-14 3.70121163013297e-15 316227.8 1.97245193961899e-14 1.52598406348e-14 3.70121036370851e-15 398107.2 1.97245217305455e-14 1.52598445713325e-14 3.70121059272944e-15 501187.2 1.97245231232673e-14 1.52598462073355e-14 3.70121224119131e-15 630957.3 1.97245240702423e-14 1.52598450775688e-14 3.70121075511493e-15 794328.2 1.9724524153902e-14 1.52598445050781e-14 3.70121185911515e-15 1000000 1.97245177312192e-14 1.52598443802765e-14 3.70121027202983e-15 1258925 1.97245303430088e-14 1.52598481302168e-14 3.70121256584962e-15 1584893 1.97245250427587e-14 1.52598421364931e-14 3.70121079187702e-15 1995262 1.97245251978684e-14 1.52598460934474e-14 3.70121139177673e-15 2511886 1.9724526268394e-14 1.52598437599128e-14 3.70121163013297e-15 3162278 1.97245193961899e-14 1.52598406348e-14 3.70121036370851e-15 3981072 1.97245217305455e-14 1.52598445713325e-14 3.70121059272944e-15 5011872 1.97245231232673e-14 1.52598462073355e-14 3.70121224119131e-15 6309573 1.97245240702423e-14 1.52598450775688e-14 3.70121075511493e-15 7943282 1.9724524153902e-14 1.52598445050781e-14 3.70121185911515e-15 10000000 1.97245177312192e-14 1.52598443802765e-14 3.70121027202983e-15 12589250 1.97245303430088e-14 1.52598481302168e-14 3.70121256584962e-15 15848930 1.97245250427587e-14 1.52598421364931e-14 3.70121079187702e-15 19952620 1.97245251978684e-14 1.52598460934474e-14 3.70121139177673e-15 25118860 1.9724526268394e-14 1.52598437599128e-14 3.70121163013297e-15 31622780 1.97245193961899e-14 1.52598406348e-14 3.70121036370851e-15 39810720 1.97245217305455e-14 1.52598445713325e-14 3.70121059272944e-15 50118720 1.97245231232673e-14 1.52598462073355e-14 3.70121224119131e-15 63095730 1.97245240702423e-14 1.52598450775688e-14 3.70121075511493e-15 79432820 1.9724524153902e-14 1.52598445050781e-14 3.70121185911515e-15 100000000 1.97245177312193e-14 1.52598443802765e-14 3.70121027202983e-15 1000 1.95115047553851e-14 1.51048099586612e-14 3.63962208370156e-15 1258.925 1.95115104418154e-14 1.51048176822445e-14 3.63962389803694e-15 1584.893 1.95115141547767e-14 1.51048137521509e-14 3.63962220630835e-15 1995.262 1.95115089245534e-14 1.51048120440877e-14 3.63962292714869e-15 2511.886 1.95115138135371e-14 1.51048127136164e-14 3.63962309493129e-15 3162.278 1.95115060617702e-14 1.5104806546494e-14 3.63962201018267e-15 3981.072 1.95115074260375e-14 1.51048102315089e-14 3.63962182199656e-15 5011.872 1.95115098135168e-14 1.5104812250429e-14 3.63962227797463e-15 6309.573 1.95115093918445e-14 1.51048111139026e-14 3.63962295685137e-15 7943.282 1.95115089465876e-14 1.51048106931515e-14 3.63962190428663e-15 10000 1.95115047553851e-14 1.51048099586612e-14 3.63962208370156e-15 12589.25 1.95115104418154e-14 1.51048176822445e-14 3.63962389803694e-15 15848.93 1.95115141547767e-14 1.51048137521509e-14 3.63962220630835e-15 19952.62 1.95115089245534e-14 1.51048120440877e-14 3.63962292714869e-15 25118.86 1.95115138135371e-14 1.51048127136164e-14 3.63962309493129e-15 31622.78 1.95115060617702e-14 1.5104806546494e-14 3.63962201018267e-15 39810.72 1.95115074260375e-14 1.51048102315089e-14 3.63962182199656e-15 50118.72 1.95115098135168e-14 1.5104812250429e-14 3.63962227797463e-15 63095.73 1.95115093918445e-14 1.51048111139026e-14 3.63962295685137e-15 79432.82 1.95115089465876e-14 1.51048106931515e-14 3.63962190428663e-15 100000 1.95115047553851e-14 1.51048099586612e-14 3.63962208370156e-15 125892.5 1.95115104418154e-14 1.51048176822445e-14 3.63962389803694e-15 158489.3 1.95115141547767e-14 1.51048137521509e-14 3.63962220630835e-15 199526.2 1.95115089245534e-14 1.51048120440877e-14 3.63962292714869e-15 251188.6 1.95115138135371e-14 1.51048127136164e-14 3.63962309493129e-15 316227.8 1.95115060617702e-14 1.5104806546494e-14 3.63962201018267e-15 398107.2 1.95115074260375e-14 1.51048102315089e-14 3.63962182199656e-15 501187.2 1.95115098135167e-14 1.5104812250429e-14 3.63962227797463e-15 630957.3 1.95115093918445e-14 1.51048111139026e-14 3.63962295685137e-15 794328.2 1.95115089465876e-14 1.51048106931515e-14 3.63962190428663e-15 1000000 1.95115047553851e-14 1.51048099586612e-14 3.63962208370156e-15 1258925 1.95115104418154e-14 1.51048176822445e-14 3.63962389803694e-15 1584893 1.95115141547767e-14 1.51048137521509e-14 3.63962220630835e-15 1995262 1.95115089245534e-14 1.51048120440877e-14 3.63962292714869e-15 2511886 1.95115138135371e-14 1.51048127136164e-14 3.63962309493129e-15 3162278 1.95115060617702e-14 1.5104806546494e-14 3.63962201018267e-15 3981072 1.95115074260375e-14 1.51048102315089e-14 3.63962182199656e-15 5011872 1.95115098135168e-14 1.5104812250429e-14 3.63962227797463e-15 6309573 1.95115093918445e-14 1.51048111139026e-14 3.63962295685137e-15 7943282 1.95115089465876e-14 1.51048106931515e-14 3.63962190428663e-15 10000000 1.95115047553851e-14 1.51048099586612e-14 3.63962208370156e-15 12589250 1.95115104418154e-14 1.51048176822445e-14 3.63962389803694e-15 15848930 1.95115141547767e-14 1.51048137521509e-14 3.63962220630835e-15 19952620 1.95115089245534e-14 1.51048120440877e-14 3.63962292714869e-15 25118860 1.95115138135371e-14 1.51048127136164e-14 3.63962309493129e-15 31622780 1.95115060617702e-14 1.5104806546494e-14 3.63962201018267e-15 39810720 1.95115074260375e-14 1.51048102315089e-14 3.63962182199656e-15 50118720 1.95115098135167e-14 1.5104812250429e-14 3.63962227797463e-15 63095730 1.95115093918445e-14 1.51048111139026e-14 3.63962295685137e-15 79432820 1.95115089465876e-14 1.51048106931515e-14 3.63962190428663e-15 100000000 1.95115047553851e-14 1.51048099586612e-14 3.63962208370156e-15 1000 1.92258534635237e-14 1.48903247996034e-14 3.5643370209708e-15 1258.925 1.92258615001262e-14 1.48903312938975e-14 3.56433748168165e-15 1584.893 1.92258594442573e-14 1.48903266902799e-14 3.5643373379696e-15 1995.262 1.92258573325789e-14 1.48903280683092e-14 3.56433696974639e-15 2511.886 1.92258582760503e-14 1.48903302897085e-14 3.56433723604628e-15 3162.278 1.9225857616247e-14 1.48903235992388e-14 3.56433605976248e-15 3981.072 1.92258572545811e-14 1.48903247398668e-14 3.56433621909066e-15 5011.872 1.92258587714322e-14 1.48903254813883e-14 3.5643361295889e-15 6309.573 1.92258586453439e-14 1.48903258552956e-14 3.56433580847439e-15 7943.282 1.92258597091326e-14 1.48903248125281e-14 3.56433705563421e-15 10000 1.92258534635237e-14 1.48903247996034e-14 3.5643370209708e-15 12589.25 1.92258615001262e-14 1.48903312938975e-14 3.56433748168165e-15 15848.93 1.92258594442573e-14 1.48903266902799e-14 3.5643373379696e-15 19952.62 1.92258573325789e-14 1.48903280683092e-14 3.56433696974639e-15 25118.86 1.92258582760503e-14 1.48903302897085e-14 3.56433723604628e-15 31622.78 1.9225857616247e-14 1.48903235992388e-14 3.56433605976247e-15 39810.72 1.92258572545811e-14 1.48903247398668e-14 3.56433621909066e-15 50118.72 1.92258587714322e-14 1.48903254813883e-14 3.5643361295889e-15 63095.73 1.92258586453439e-14 1.48903258552956e-14 3.56433580847439e-15 79432.82 1.92258597091326e-14 1.48903248125281e-14 3.56433705563421e-15 100000 1.92258534635237e-14 1.48903247996034e-14 3.5643370209708e-15 125892.5 1.92258615001262e-14 1.48903312938975e-14 3.56433748168165e-15 158489.3 1.92258594442573e-14 1.48903266902799e-14 3.5643373379696e-15 199526.2 1.92258573325789e-14 1.48903280683092e-14 3.56433696974639e-15 251188.6 1.92258582760503e-14 1.48903302897085e-14 3.56433723604628e-15 316227.8 1.9225857616247e-14 1.48903235992388e-14 3.56433605976247e-15 398107.2 1.92258572545811e-14 1.48903247398668e-14 3.56433621909066e-15 501187.2 1.92258587714322e-14 1.48903254813883e-14 3.5643361295889e-15 630957.3 1.92258586453439e-14 1.48903258552956e-14 3.56433580847439e-15 794328.2 1.92258597091326e-14 1.48903248125281e-14 3.56433705563421e-15 1000000 1.92258534635237e-14 1.48903247996034e-14 3.5643370209708e-15 1258925 1.92258615001262e-14 1.48903312938975e-14 3.56433748168165e-15 1584893 1.92258594442573e-14 1.48903266902799e-14 3.5643373379696e-15 1995262 1.92258573325789e-14 1.48903280683092e-14 3.56433696974639e-15 2511886 1.92258582760503e-14 1.48903302897085e-14 3.56433723604628e-15 3162278 1.9225857616247e-14 1.48903235992388e-14 3.56433605976247e-15 3981072 1.92258572545811e-14 1.48903247398668e-14 3.56433621909066e-15 5011872 1.92258587714322e-14 1.48903254813883e-14 3.5643361295889e-15 6309573 1.92258586453439e-14 1.48903258552956e-14 3.56433580847439e-15 7943282 1.92258597091326e-14 1.48903248125281e-14 3.56433705563421e-15 10000000 1.92258534635237e-14 1.48903247996034e-14 3.5643370209708e-15 12589250 1.92258615001262e-14 1.48903312938975e-14 3.56433748168165e-15 15848930 1.92258594442573e-14 1.48903266902799e-14 3.5643373379696e-15 19952620 1.92258573325789e-14 1.48903280683092e-14 3.56433696974639e-15 25118860 1.92258582760503e-14 1.48903302897085e-14 3.56433723604628e-15 31622780 1.9225857616247e-14 1.48903235992387e-14 3.56433605976247e-15 39810720 1.92258572545811e-14 1.48903247398668e-14 3.56433621909066e-15 50118720 1.92258587714322e-14 1.48903254813883e-14 3.5643361295889e-15 63095730 1.92258586453439e-14 1.48903258552956e-14 3.56433580847439e-15 79432820 1.92258597091326e-14 1.48903248125281e-14 3.56433705563421e-15 100000000 1.92258534635237e-14 1.48903247996034e-14 3.5643370209708e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/64_acFreq_COTHRML=0.standard0000644000175000017500000002533013546075722025151 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258.925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584.893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995.262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511.886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162.278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981.072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011.872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309.573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943.282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589.25 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848.93 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952.62 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118.86 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622.78 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810.72 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118.72 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095.73 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432.82 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 125892.5 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 158489.3 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 199526.2 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 251188.6 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 316227.8 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 398107.2 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 501187.2 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 630957.3 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 794328.2 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 1000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589250 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848930 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952620 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118860 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622780 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810720 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118720 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095730 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432820 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258.925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584.893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 1995.262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511.886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162.278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981.072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011.872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309.573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943.282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589.25 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848.93 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 19952.62 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118.86 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622.78 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810.72 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118.72 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095.73 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432.82 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 125892.5 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 158489.3 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 199526.2 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 251188.6 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 316227.8 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 398107.2 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 501187.2 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 630957.3 1.95109670680967e-14 1.51047556203098e-14 3.63962547928741e-15 794328.2 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 1000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 1995262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589250 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848930 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 19952620 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118860 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622780 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810720 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118720 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095730 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432820 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258.925 1.92253810991621e-14 1.48903692202894e-14 3.56434127432084e-15 1584.893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995.262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511.886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162.278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981.072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011.872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309.573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943.282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 12589.25 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848.93 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952.62 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118.86 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622.78 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810.72 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118.72 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095.73 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432.82 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 125892.5 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 158489.3 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 199526.2 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 251188.6 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 316227.8 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 398107.2 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 501187.2 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 630957.3 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 794328.2 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 1000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258925 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 1584893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000000 1.92253759986944e-14 1.4890367771438e-14 3.56434020406966e-15 12589250 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848930 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952620 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118860 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622780 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810720 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118720 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095730 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432820 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/38_acVd_WPE.standard0000644000175000017500000000714513546075722024000 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 0.2 4.879851e-03 1.416144e-02 1.30788235411485e-14 1.08328529330422e-14 0.3 6.985424e-03 7.388579e-03 1.3689053706371e-14 9.78265664869697e-15 0.4 8.361339e-03 4.040217e-03 1.4335683881449e-14 8.34336825900336e-15 0.5 9.285978e-03 2.283486e-03 1.48936340325164e-14 6.52389676637352e-15 0.6 9.933689e-03 1.306736e-03 1.51394940990841e-14 4.95404134132831e-15 0.7 1.037048e-02 7.755157e-04 1.51357540980715e-14 4.16004712635091e-15 0.8 1.052015e-02 6.124483e-04 1.51122340917033e-14 3.91560506016716e-15 0.9 1.054200e-02 5.889516e-04 1.51105540912485e-14 3.86454304634189e-15 1 1.056237e-02 5.697613e-04 1.51101340911347e-14 3.81650103333431e-15 1.1 1.058429e-02 5.512717e-04 1.51099340910806e-14 3.76311101887873e-15 1.2 1.060618e-02 5.344853e-04 1.51098340910535e-14 3.70233400242309e-15 1.3 1.062701e-02 5.198808e-04 1.51097740910373e-14 3.63109698313535e-15 1.4 1.064634e-02 5.074430e-04 1.51097440910291e-14 3.54443995967259e-15 1.5 1.066411e-02 4.969315e-04 1.51097240910237e-14 3.44464393265238e-15 1.6 1.068038e-02 4.880476e-04 1.5109714091021e-14 3.3389759040423e-15 1.7 1.069530e-02 4.805076e-04 1.5109714091021e-14 3.23308687537238e-15 1.8 1.070905e-02 4.740676e-04 1.51097040910183e-14 3.12226384536656e-15 0.2 3.802179e-03 1.353322e-02 1.29089134951447e-14 1.06701728889959e-14 0.3 5.653421e-03 8.425204e-03 1.35017636556614e-14 9.62854760697128e-15 0.4 7.120299e-03 5.133327e-03 1.41256838245905e-14 8.22952522817987e-15 0.5 8.263516e-03 3.045152e-03 1.46691139717266e-14 6.49103975747734e-15 0.6 9.142693e-03 1.729019e-03 1.49303940424693e-14 4.96365234393053e-15 0.7 9.730382e-03 9.956798e-04 1.49472540470343e-14 4.17615813071304e-15 0.8 9.970185e-03 7.355513e-04 1.4921514040065e-14 3.88341205145076e-15 0.9 1.002678e-02 6.832700e-04 1.49169940388412e-14 3.80813003106782e-15 1 1.006579e-02 6.526906e-04 1.49165040387086e-14 3.75546601680881e-15 1.1 1.010527e-02 6.245027e-04 1.49163740386734e-14 3.70016600183609e-15 1.2 1.014417e-02 5.990423e-04 1.49163140386571e-14 3.64064698572106e-15 1.3 1.018118e-02 5.768489e-04 1.4916284038649e-14 3.57439896778412e-15 1.4 1.021570e-02 5.578740e-04 1.49162640386436e-14 3.49655594670778e-15 1.5 1.024762e-02 5.417749e-04 1.49162440386382e-14 3.40802292273708e-15 1.6 1.027705e-02 5.281263e-04 1.49162440386382e-14 3.31269389692633e-15 1.7 1.030420e-02 5.165185e-04 1.49162340386355e-14 3.21602087075168e-15 1.8 1.032934e-02 5.065936e-04 1.49162340386355e-14 3.12047484488218e-15 0.2 2.623289e-03 1.051300e-02 1.2659463427605e-14 1.04773128367782e-14 0.3 3.990953e-03 7.639791e-03 1.32204935795063e-14 9.47513056543295e-15 0.4 5.249032e-03 5.286341e-03 1.38072237383661e-14 8.17120821239028e-15 0.5 6.366432e-03 3.458554e-03 1.43340138809968e-14 6.57902178129885e-15 0.6 7.312467e-03 2.113288e-03 1.46338439621771e-14 5.10068038103147e-15 0.7 8.008252e-03 1.253243e-03 1.4692113977954e-14 4.24013914803618e-15 0.8 8.387748e-03 8.463849e-04 1.46720639725253e-14 3.88369205152657e-15 0.9 8.530158e-03 7.234575e-04 1.46599939692573e-14 3.74999301532697e-15 1 8.602435e-03 6.789282e-04 1.4657543968594e-14 3.68240499702722e-15 1.1 8.665151e-03 6.462217e-04 1.46571439684857e-14 3.62352398108493e-15 1.2 8.725938e-03 6.168982e-04 1.4657063968464e-14 3.56533496533e-15 1.3 8.784369e-03 5.907493e-04 1.46570339684559e-14 3.50426994879638e-15 1.4 8.839689e-03 5.679178e-04 1.46570239684532e-14 3.43490793001631e-15 1.5 8.891586e-03 5.482380e-04 1.46570139684505e-14 3.35751390906154e-15 1.6 8.940083e-03 5.313680e-04 1.46570139684505e-14 3.27387988641726e-15 1.7 8.985378e-03 5.169168e-04 1.46570039684478e-14 3.18717686294204e-15 1.8 9.027750e-03 5.045096e-04 1.46570039684478e-14 3.10078283955048e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/5_dcSweep_NSUBPDLT.standard0000644000175000017500000002211413546075722025220 0ustar carstencarstenV(d) I(d) 2.000000e-01 1.337063e-06 3.000000e-01 1.535975e-06 4.000000e-01 1.758852e-06 5.000000e-01 2.000059e-06 6.000000e-01 2.253617e-06 7.000000e-01 2.515974e-06 8.000000e-01 2.785327e-06 9.000000e-01 3.060787e-06 1.000000e+00 3.341892e-06 1.100000e+00 3.628379e-06 1.200000e+00 3.920085e-06 1.300000e+00 4.216892e-06 1.400000e+00 4.518709e-06 1.500000e+00 4.825464e-06 1.600000e+00 5.137092e-06 1.700000e+00 5.453538e-06 1.800000e+00 5.774752e-06 2.000000e-01 4.016649e-04 3.000000e-01 4.246362e-04 4.000000e-01 4.460038e-04 5.000000e-01 4.670163e-04 6.000000e-01 4.879395e-04 7.000000e-01 5.088164e-04 8.000000e-01 5.296654e-04 9.000000e-01 5.505083e-04 1.000000e+00 5.713674e-04 1.100000e+00 5.922629e-04 1.200000e+00 6.132115e-04 1.300000e+00 6.342266e-04 1.400000e+00 6.553189e-04 1.500000e+00 6.764967e-04 1.600000e+00 6.977664e-04 1.700000e+00 7.191334e-04 1.800000e+00 7.406014e-04 2.000000e-01 1.907345e-03 3.000000e-01 2.045017e-03 4.000000e-01 2.104176e-03 5.000000e-01 2.156429e-03 6.000000e-01 2.205155e-03 7.000000e-01 2.251443e-03 8.000000e-01 2.295994e-03 9.000000e-01 2.339268e-03 1.000000e+00 2.381578e-03 1.100000e+00 2.423145e-03 1.200000e+00 2.464124e-03 1.300000e+00 2.504631e-03 1.400000e+00 2.544753e-03 1.500000e+00 2.584556e-03 1.600000e+00 2.624091e-03 1.700000e+00 2.663401e-03 1.800000e+00 2.702518e-03 2.000000e-01 3.397269e-03 3.000000e-01 3.884456e-03 4.000000e-01 4.093012e-03 5.000000e-01 4.183701e-03 6.000000e-01 4.248438e-03 7.000000e-01 4.308762e-03 8.000000e-01 4.365795e-03 9.000000e-01 4.420119e-03 1.000000e+00 4.472278e-03 1.100000e+00 4.522730e-03 1.200000e+00 4.571830e-03 1.300000e+00 4.619852e-03 1.400000e+00 4.666999e-03 1.500000e+00 4.713429e-03 1.600000e+00 4.759261e-03 1.700000e+00 4.804586e-03 1.800000e+00 4.849479e-03 2.000000e-01 4.621637e-03 3.000000e-01 5.496112e-03 4.000000e-01 5.951545e-03 5.000000e-01 6.197130e-03 6.000000e-01 6.331009e-03 7.000000e-01 6.409969e-03 8.000000e-01 6.474500e-03 9.000000e-01 6.535903e-03 1.000000e+00 6.594780e-03 1.100000e+00 6.651392e-03 1.200000e+00 6.706049e-03 1.300000e+00 6.759062e-03 1.400000e+00 6.810706e-03 1.500000e+00 6.861213e-03 1.600000e+00 6.910770e-03 1.700000e+00 6.959529e-03 1.800000e+00 7.007610e-03 2.000000e-01 5.903753e-03 3.000000e-01 7.412579e-03 4.000000e-01 8.309179e-03 5.000000e-01 8.856604e-03 6.000000e-01 9.203506e-03 7.000000e-01 9.429650e-03 8.000000e-01 9.580497e-03 9.000000e-01 9.684530e-03 1.000000e+00 9.758878e-03 1.100000e+00 9.822324e-03 1.200000e+00 9.883451e-03 1.300000e+00 9.942791e-03 1.400000e+00 1.000044e-02 1.500000e+00 1.005654e-02 1.600000e+00 1.011126e-02 1.700000e+00 1.016475e-02 1.800000e+00 1.021718e-02 2.000000e-01 6.567229e-03 3.000000e-01 8.665315e-03 4.000000e-01 1.007126e-02 5.000000e-01 1.100581e-02 6.000000e-01 1.163749e-02 7.000000e-01 1.207504e-02 8.000000e-01 1.238530e-02 9.000000e-01 1.260969e-02 1.000000e+00 1.277512e-02 1.100000e+00 1.290023e-02 1.200000e+00 1.299775e-02 1.300000e+00 1.307390e-02 1.400000e+00 1.313778e-02 1.500000e+00 1.319903e-02 1.600000e+00 1.325881e-02 1.700000e+00 1.331723e-02 1.800000e+00 1.337436e-02 2.000000e-01 7.457345e-06 3.000000e-01 8.432428e-06 4.000000e-01 9.499796e-06 5.000000e-01 1.064535e-05 6.000000e-01 1.184464e-05 7.000000e-01 1.308254e-05 8.000000e-01 1.435138e-05 9.000000e-01 1.564742e-05 1.000000e+00 1.696878e-05 1.100000e+00 1.831443e-05 1.200000e+00 1.968375e-05 1.300000e+00 2.107629e-05 1.400000e+00 2.249173e-05 1.500000e+00 2.392980e-05 1.600000e+00 2.539025e-05 1.700000e+00 2.687290e-05 1.800000e+00 2.837754e-05 2.000000e-01 3.620732e-04 3.000000e-01 3.841213e-04 4.000000e-01 4.031417e-04 5.000000e-01 4.214109e-04 6.000000e-01 4.393785e-04 7.000000e-01 4.571820e-04 8.000000e-01 4.748874e-04 9.000000e-01 4.925403e-04 1.000000e+00 5.101755e-04 1.100000e+00 5.278202e-04 1.200000e+00 5.454955e-04 1.300000e+00 5.632176e-04 1.400000e+00 5.809994e-04 1.500000e+00 5.988509e-04 1.600000e+00 6.167800e-04 1.700000e+00 6.347930e-04 1.800000e+00 6.528951e-04 2.000000e-01 1.461821e-03 3.000000e-01 1.627574e-03 4.000000e-01 1.691898e-03 5.000000e-01 1.742644e-03 6.000000e-01 1.788976e-03 7.000000e-01 1.832326e-03 8.000000e-01 1.873577e-03 9.000000e-01 1.913322e-03 1.000000e+00 1.951961e-03 1.100000e+00 1.989768e-03 1.200000e+00 2.026932e-03 1.300000e+00 2.063594e-03 1.400000e+00 2.099853e-03 1.500000e+00 2.135788e-03 1.600000e+00 2.171456e-03 1.700000e+00 2.206906e-03 1.800000e+00 2.242173e-03 2.000000e-01 2.585880e-03 3.000000e-01 3.121587e-03 4.000000e-01 3.380497e-03 5.000000e-01 3.495926e-03 6.000000e-01 3.569097e-03 7.000000e-01 3.634580e-03 8.000000e-01 3.695677e-03 9.000000e-01 3.753147e-03 1.000000e+00 3.807690e-03 1.100000e+00 3.859915e-03 1.200000e+00 3.910309e-03 1.300000e+00 3.959245e-03 1.400000e+00 4.007006e-03 1.500000e+00 4.053807e-03 1.600000e+00 4.099814e-03 1.700000e+00 4.145153e-03 1.800000e+00 4.189927e-03 2.000000e-01 3.523768e-03 3.000000e-01 4.439819e-03 4.000000e-01 4.987939e-03 5.000000e-01 5.304586e-03 6.000000e-01 5.478467e-03 7.000000e-01 5.577856e-03 8.000000e-01 5.653900e-03 9.000000e-01 5.724389e-03 1.000000e+00 5.791222e-03 1.100000e+00 5.854794e-03 1.200000e+00 5.915524e-03 1.300000e+00 5.973845e-03 1.400000e+00 6.030149e-03 1.500000e+00 6.084768e-03 1.600000e+00 6.137977e-03 1.700000e+00 6.189999e-03 1.800000e+00 6.241012e-03 2.000000e-01 4.551500e-03 3.000000e-01 6.003214e-03 4.000000e-01 6.992596e-03 5.000000e-01 7.658000e-03 6.000000e-01 8.104687e-03 7.000000e-01 8.402588e-03 8.000000e-01 8.599026e-03 9.000000e-01 8.729246e-03 1.000000e+00 8.821189e-03 1.100000e+00 8.897664e-03 1.200000e+00 8.969656e-03 1.300000e+00 9.038869e-03 1.400000e+00 9.105553e-03 1.500000e+00 9.169911e-03 1.600000e+00 9.232177e-03 1.700000e+00 9.292587e-03 1.800000e+00 9.351363e-03 2.000000e-01 5.166821e-03 3.000000e-01 7.063602e-03 4.000000e-01 8.482120e-03 5.000000e-01 9.517040e-03 6.000000e-01 1.026764e-02 7.000000e-01 1.081337e-02 8.000000e-01 1.121155e-02 9.000000e-01 1.150239e-02 1.000000e+00 1.171492e-02 1.100000e+00 1.187127e-02 1.200000e+00 1.198868e-02 1.300000e+00 1.208021e-02 1.400000e+00 1.215738e-02 1.500000e+00 1.222953e-02 1.600000e+00 1.229927e-02 1.700000e+00 1.236697e-02 1.800000e+00 1.243277e-02 2.000000e-01 3.135561e-05 3.000000e-01 3.505615e-05 4.000000e-01 3.886232e-05 5.000000e-01 4.288483e-05 6.000000e-01 4.706777e-05 7.000000e-01 5.136814e-05 8.000000e-01 5.576372e-05 9.000000e-01 6.024401e-05 1.000000e+00 6.480401e-05 1.100000e+00 6.944119e-05 1.200000e+00 7.415411e-05 1.300000e+00 7.894182e-05 1.400000e+00 8.380363e-05 1.500000e+00 8.873896e-05 1.600000e+00 9.374731e-05 1.700000e+00 9.882820e-05 1.800000e+00 1.039812e-04 2.000000e-01 3.464297e-04 3.000000e-01 3.747027e-04 4.000000e-01 3.938286e-04 5.000000e-01 4.111956e-04 6.000000e-01 4.279158e-04 7.000000e-01 4.442929e-04 8.000000e-01 4.604645e-04 9.000000e-01 4.765122e-04 1.000000e+00 4.924908e-04 1.100000e+00 5.084392e-04 1.200000e+00 5.243858e-04 1.300000e+00 5.403520e-04 1.400000e+00 5.563541e-04 1.500000e+00 5.724047e-04 1.600000e+00 5.885138e-04 1.700000e+00 6.046894e-04 1.800000e+00 6.209381e-04 2.000000e-01 1.038326e-03 3.000000e-01 1.219146e-03 4.000000e-01 1.293943e-03 5.000000e-01 1.340878e-03 6.000000e-01 1.381425e-03 7.000000e-01 1.418751e-03 8.000000e-01 1.453855e-03 9.000000e-01 1.487367e-03 1.000000e+00 1.519721e-03 1.100000e+00 1.551218e-03 1.200000e+00 1.582070e-03 1.300000e+00 1.612427e-03 1.400000e+00 1.642399e-03 1.500000e+00 1.672069e-03 1.600000e+00 1.701497e-03 1.700000e+00 1.730734e-03 1.800000e+00 1.759817e-03 2.000000e-01 1.750178e-03 3.000000e-01 2.225055e-03 4.000000e-01 2.496999e-03 5.000000e-01 2.634966e-03 6.000000e-01 2.713408e-03 7.000000e-01 2.776216e-03 8.000000e-01 2.833760e-03 9.000000e-01 2.887595e-03 1.000000e+00 2.938385e-03 1.100000e+00 2.986704e-03 1.200000e+00 3.033042e-03 1.300000e+00 3.077794e-03 1.400000e+00 3.121269e-03 1.500000e+00 3.163706e-03 1.600000e+00 3.205292e-03 1.700000e+00 3.246171e-03 1.800000e+00 3.286456e-03 2.000000e-01 2.370733e-03 3.000000e-01 3.140684e-03 4.000000e-01 3.671250e-03 5.000000e-01 4.014218e-03 6.000000e-01 4.219735e-03 7.000000e-01 4.340210e-03 8.000000e-01 4.423741e-03 9.000000e-01 4.496400e-03 1.000000e+00 4.564519e-03 1.100000e+00 4.629093e-03 1.200000e+00 4.690528e-03 1.300000e+00 4.749227e-03 1.400000e+00 4.805585e-03 1.500000e+00 4.859958e-03 1.600000e+00 4.912655e-03 1.700000e+00 4.963931e-03 1.800000e+00 5.014001e-03 2.000000e-01 3.105372e-03 3.000000e-01 4.267422e-03 4.000000e-01 5.165031e-03 5.000000e-01 5.837424e-03 6.000000e-01 6.328217e-03 7.000000e-01 6.676047e-03 8.000000e-01 6.914628e-03 9.000000e-01 7.075317e-03 1.000000e+00 7.187509e-03 1.100000e+00 7.276273e-03 1.200000e+00 7.356416e-03 1.300000e+00 7.432575e-03 1.400000e+00 7.505664e-03 1.500000e+00 7.575957e-03 1.600000e+00 7.643684e-03 1.700000e+00 7.709084e-03 1.800000e+00 7.772400e-03 2.000000e-01 3.619872e-03 3.000000e-01 5.096911e-03 4.000000e-01 6.316083e-03 5.000000e-01 7.295217e-03 6.000000e-01 8.067258e-03 7.000000e-01 8.667846e-03 8.000000e-01 9.129215e-03 9.000000e-01 9.478701e-03 1.000000e+00 9.739687e-03 1.100000e+00 9.932920e-03 1.200000e+00 1.007698e-02 1.300000e+00 1.018826e-02 1.400000e+00 1.028075e-02 1.500000e+00 1.036452e-02 1.600000e+00 1.044421e-02 1.700000e+00 1.052114e-02 1.800000e+00 1.059566e-02 tmpk8ny_4pz/tests/hisim/nmos/reference/66_acFreq_COIGN=0.standard0000644000175000017500000002533013546075722024702 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258.925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584.893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995.262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511.886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162.278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981.072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011.872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309.573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943.282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589.25 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848.93 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952.62 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118.86 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622.78 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810.72 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118.72 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095.73 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432.82 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 125892.5 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 158489.3 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 199526.2 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 251188.6 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 316227.8 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 398107.2 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 501187.2 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 630957.3 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 794328.2 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 1000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589250 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848930 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952620 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118860 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622780 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810720 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118720 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095730 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432820 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258.925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584.893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 1995.262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511.886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162.278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981.072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011.872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309.573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943.282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589.25 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848.93 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 19952.62 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118.86 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622.78 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810.72 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118.72 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095.73 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432.82 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 125892.5 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 158489.3 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 199526.2 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 251188.6 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 316227.8 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 398107.2 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 501187.2 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 630957.3 1.95109670680967e-14 1.51047556203098e-14 3.63962547928741e-15 794328.2 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 1000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 1995262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589250 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848930 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 19952620 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118860 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622780 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810720 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118720 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095730 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432820 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258.925 1.92253810991621e-14 1.48903692202894e-14 3.56434127432084e-15 1584.893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995.262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511.886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162.278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981.072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011.872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309.573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943.282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 12589.25 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848.93 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952.62 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118.86 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622.78 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810.72 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118.72 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095.73 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432.82 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 125892.5 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 158489.3 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 199526.2 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 251188.6 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 316227.8 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 398107.2 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 501187.2 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 630957.3 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 794328.2 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 1000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258925 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 1584893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000000 1.92253759986944e-14 1.4890367771438e-14 3.56434020406966e-15 12589250 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848930 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952620 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118860 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622780 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810720 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118720 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095730 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432820 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/60_acFreq_CORBNET=0.standard0000644000175000017500000002533013546075722025131 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258.925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584.893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995.262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511.886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162.278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981.072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011.872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309.573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943.282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589.25 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848.93 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952.62 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118.86 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622.78 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810.72 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118.72 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095.73 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432.82 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 125892.5 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 158489.3 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 199526.2 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 251188.6 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 316227.8 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 398107.2 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 501187.2 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 630957.3 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 794328.2 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 1000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589250 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848930 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952620 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118860 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622780 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810720 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118720 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095730 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432820 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258.925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584.893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 1995.262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511.886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162.278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981.072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011.872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309.573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943.282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589.25 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848.93 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 19952.62 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118.86 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622.78 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810.72 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118.72 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095.73 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432.82 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 125892.5 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 158489.3 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 199526.2 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 251188.6 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 316227.8 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 398107.2 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 501187.2 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 630957.3 1.95109670680967e-14 1.51047556203098e-14 3.63962547928741e-15 794328.2 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 1000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 1995262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589250 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848930 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 19952620 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118860 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622780 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810720 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118720 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095730 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432820 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258.925 1.92253810991621e-14 1.48903692202894e-14 3.56434127432084e-15 1584.893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995.262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511.886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162.278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981.072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011.872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309.573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943.282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 12589.25 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848.93 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952.62 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118.86 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622.78 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810.72 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118.72 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095.73 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432.82 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 125892.5 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 158489.3 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 199526.2 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 251188.6 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 316227.8 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 398107.2 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 501187.2 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 630957.3 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 794328.2 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 1000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258925 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 1584893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000000 1.92253759986944e-14 1.4890367771438e-14 3.56434020406966e-15 12589250 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848930 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952620 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118860 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622780 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810720 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118720 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095730 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432820 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/77_noise_COIGN=1_T150.standard0000644000175000017500000000710013546075722025325 0ustar carstencarstenFreq N(g) 1000 6.103109e-39 1258.925 9.672776e-39 1584.893 1.533032e-38 1995.262 2.429692e-38 2511.886 3.850802e-38 3162.278 6.103109e-38 3981.072 9.672776e-38 5011.872 1.533032e-37 6309.573 2.429692e-37 7943.282 3.850802e-37 10000 6.103109e-37 12589.25 9.672776e-37 15848.93 1.533032e-36 19952.62 2.429692e-36 25118.86 3.850802e-36 31622.78 6.103109e-36 39810.72 9.672776e-36 50118.72 1.533032e-35 63095.73 2.429692e-35 79432.82 3.850802e-35 100000 6.103109e-35 125892.5 9.672776e-35 158489.3 1.533032e-34 199526.2 2.429692e-34 251188.6 3.850802e-34 316227.8 6.103109e-34 398107.2 9.672776e-34 501187.2 1.533032e-33 630957.3 2.429692e-33 794328.2 3.850802e-33 1000000 6.103109e-33 1258925 9.672776e-33 1584893 1.533032e-32 1995262 2.429692e-32 2511886 3.850802e-32 3162278 6.103109e-32 3981072 9.672776e-32 5011872 1.533032e-31 6309573 2.429692e-31 7943282 3.850802e-31 10000000 6.103109e-31 12589250 9.672776e-31 15848930 1.533032e-30 19952620 2.429692e-30 25118860 3.850802e-30 31622780 6.103109e-30 39810720 9.672776e-30 50118720 1.533032e-29 63095730 2.429692e-29 79432820 3.850802e-29 100000000 6.103109e-29 125892500 9.672776e-29 158489300 1.533032e-28 199526200 2.429692e-28 251188600 3.850802e-28 316227800 6.103109e-28 398107200 9.672776e-28 501187200 1.533032e-27 630957300 2.429692e-27 794328200 3.850802e-27 1000000000 6.103109e-27 1258925000 9.672776e-27 1584893000 1.533032e-26 1995262000 2.429692e-26 2511886000 3.850802e-26 3162278000 6.103109e-26 3981072000 9.672776e-26 5011872000 1.533032e-25 6309573000 2.429692e-25 7943282000 3.850802e-25 10000000000 6.103109e-25 12589250000 9.672776e-25 15848930000 1.533032e-24 19952620000 2.429692e-24 25118860000 3.850802e-24 31622780000 6.103109e-24 39810720000 9.672776e-24 50118720000 1.533032e-23 63095730000 2.429692e-23 79432820000 3.850802e-23 100000000000 6.103109e-23 1000 2.514259e-39 1258.925 3.984833e-39 1584.893 6.315534e-39 1995.262 1.000945e-38 2511.886 1.58639e-38 3162.278 2.514259e-38 3981.072 3.984833e-38 5011.872 6.315534e-38 6309.573 1.000945e-37 7943.282 1.58639e-37 10000 2.514259e-37 12589.25 3.984833e-37 15848.93 6.315534e-37 19952.62 1.000945e-36 25118.86 1.58639e-36 31622.78 2.514259e-36 39810.72 3.984833e-36 50118.72 6.315534e-36 63095.73 1.000945e-35 79432.82 1.58639e-35 100000 2.514259e-35 125892.5 3.984833e-35 158489.3 6.315534e-35 199526.2 1.000945e-34 251188.6 1.58639e-34 316227.8 2.514259e-34 398107.2 3.984833e-34 501187.2 6.315534e-34 630957.3 1.000945e-33 794328.2 1.58639e-33 1000000 2.514259e-33 1258925 3.984833e-33 1584893 6.315534e-33 1995262 1.000945e-32 2511886 1.58639e-32 3162278 2.514259e-32 3981072 3.984833e-32 5011872 6.315534e-32 6309573 1.000945e-31 7943282 1.58639e-31 10000000 2.514259e-31 12589250 3.984833e-31 15848930 6.315534e-31 19952620 1.000945e-30 25118860 1.58639e-30 31622780 2.514259e-30 39810720 3.984833e-30 50118720 6.315534e-30 63095730 1.000945e-29 79432820 1.58639e-29 100000000 2.514259e-29 125892500 3.984833e-29 158489300 6.315534e-29 199526200 1.000945e-28 251188600 1.58639e-28 316227800 2.514259e-28 398107200 3.984833e-28 501187200 6.315534e-28 630957300 1.000945e-27 794328200 1.58639e-27 1000000000 2.514259e-27 1258925000 3.984833e-27 1584893000 6.315534e-27 1995262000 1.000945e-26 2511886000 1.58639e-26 3162278000 2.514259e-26 3981072000 3.984833e-26 5011872000 6.315534e-26 6309573000 1.000945e-25 7943282000 1.58639e-25 10000000000 2.514259e-25 12589250000 3.984833e-25 15848930000 6.315534e-25 19952620000 1.000945e-24 25118860000 1.58639e-24 31622780000 2.514259e-24 39810720000 3.984833e-24 50118720000 6.315534e-24 63095730000 1.000945e-23 79432820000 1.58639e-23 100000000000 2.514259e-23 tmpk8ny_4pz/tests/hisim/nmos/reference/76_noise_COIGN=1_T-55.standard0000644000175000017500000000710013546075722025325 0ustar carstencarstenFreq N(g) 1000 4.557841e-39 1258.925 7.223691e-39 1584.893 1.144878e-38 1995.262 1.814509e-38 2511.886 2.875803e-38 3162.278 4.557841e-38 3981.072 7.223691e-38 5011.872 1.144878e-37 6309.573 1.814509e-37 7943.282 2.875803e-37 10000 4.557841e-37 12589.25 7.223691e-37 15848.93 1.144878e-36 19952.62 1.814509e-36 25118.86 2.875803e-36 31622.78 4.557841e-36 39810.72 7.223691e-36 50118.72 1.144878e-35 63095.73 1.814509e-35 79432.82 2.875803e-35 100000 4.557841e-35 125892.5 7.223691e-35 158489.3 1.144878e-34 199526.2 1.814509e-34 251188.6 2.875803e-34 316227.8 4.557841e-34 398107.2 7.223691e-34 501187.2 1.144878e-33 630957.3 1.814509e-33 794328.2 2.875803e-33 1000000 4.557841e-33 1258925 7.223691e-33 1584893 1.144878e-32 1995262 1.814509e-32 2511886 2.875803e-32 3162278 4.557841e-32 3981072 7.223691e-32 5011872 1.144878e-31 6309573 1.814509e-31 7943282 2.875803e-31 10000000 4.557841e-31 12589250 7.223691e-31 15848930 1.144878e-30 19952620 1.814509e-30 25118860 2.875803e-30 31622780 4.557841e-30 39810720 7.223691e-30 50118720 1.144878e-29 63095730 1.814509e-29 79432820 2.875803e-29 100000000 4.557841e-29 125892500 7.223691e-29 158489300 1.144878e-28 199526200 1.814509e-28 251188600 2.875803e-28 316227800 4.557841e-28 398107200 7.223691e-28 501187200 1.144878e-27 630957300 1.814509e-27 794328200 2.875803e-27 1000000000 4.557841e-27 1258925000 7.223691e-27 1584893000 1.144878e-26 1995262000 1.814509e-26 2511886000 2.875803e-26 3162278000 4.557841e-26 3981072000 7.223691e-26 5011872000 1.144878e-25 6309573000 1.814509e-25 7943282000 2.875803e-25 10000000000 4.557841e-25 12589250000 7.223691e-25 15848930000 1.144878e-24 19952620000 1.814509e-24 25118860000 2.875803e-24 31622780000 4.557841e-24 39810720000 7.223691e-24 50118720000 1.144878e-23 63095730000 1.814509e-23 79432820000 2.875803e-23 100000000000 4.557841e-23 1000 1.491104e-39 1258.925 2.36324e-39 1584.893 3.745483e-39 1995.262 5.936191e-39 2511.886 9.408228e-39 3162.278 1.491104e-38 3981.072 2.36324e-38 5011.872 3.745483e-38 6309.573 5.936191e-38 7943.282 9.408228e-38 10000 1.491104e-37 12589.25 2.36324e-37 15848.93 3.745483e-37 19952.62 5.936191e-37 25118.86 9.408228e-37 31622.78 1.491104e-36 39810.72 2.36324e-36 50118.72 3.745483e-36 63095.73 5.936191e-36 79432.82 9.408228e-36 100000 1.491104e-35 125892.5 2.36324e-35 158489.3 3.745483e-35 199526.2 5.936191e-35 251188.6 9.408228e-35 316227.8 1.491104e-34 398107.2 2.36324e-34 501187.2 3.745483e-34 630957.3 5.936191e-34 794328.2 9.408228e-34 1000000 1.491104e-33 1258925 2.36324e-33 1584893 3.745483e-33 1995262 5.936191e-33 2511886 9.408228e-33 3162278 1.491104e-32 3981072 2.36324e-32 5011872 3.745483e-32 6309573 5.936191e-32 7943282 9.408228e-32 10000000 1.491104e-31 12589250 2.36324e-31 15848930 3.745483e-31 19952620 5.936191e-31 25118860 9.408228e-31 31622780 1.491104e-30 39810720 2.36324e-30 50118720 3.745483e-30 63095730 5.936191e-30 79432820 9.408228e-30 100000000 1.491104e-29 125892500 2.36324e-29 158489300 3.745483e-29 199526200 5.936191e-29 251188600 9.408228e-29 316227800 1.491104e-28 398107200 2.36324e-28 501187200 3.745483e-28 630957300 5.936191e-28 794328200 9.408228e-28 1000000000 1.491104e-27 1258925000 2.36324e-27 1584893000 3.745483e-27 1995262000 5.936191e-27 2511886000 9.408228e-27 3162278000 1.491104e-26 3981072000 2.36324e-26 5011872000 3.745483e-26 6309573000 5.936191e-26 7943282000 9.408228e-26 10000000000 1.491104e-25 12589250000 2.36324e-25 15848930000 3.745483e-25 19952620000 5.936191e-25 25118860000 9.408228e-25 31622780000 1.491104e-24 39810720000 2.36324e-24 50118720000 3.745483e-24 63095730000 5.936191e-24 79432820000 9.408228e-24 100000000000 1.491104e-23 tmpk8ny_4pz/tests/hisim/nmos/reference/1_dcSweep_CORSRD=0.standard0000644000175000017500000002211413546075722025132 0ustar carstencarstenV(d) I(d) 2.000000e-01 9.408604e-07 3.000000e-01 1.068973e-06 4.000000e-01 1.210646e-06 5.000000e-01 1.362996e-06 6.000000e-01 1.522555e-06 7.000000e-01 1.687251e-06 8.000000e-01 1.856050e-06 9.000000e-01 2.028447e-06 1.000000e+00 2.204191e-06 1.100000e+00 2.383140e-06 1.200000e+00 2.565207e-06 1.300000e+00 2.750330e-06 1.400000e+00 2.938461e-06 1.500000e+00 3.129560e-06 1.600000e+00 3.323593e-06 1.700000e+00 3.520530e-06 1.800000e+00 3.720342e-06 2.000000e-01 3.393750e-04 3.000000e-01 3.533368e-04 4.000000e-01 3.645137e-04 5.000000e-01 3.745042e-04 6.000000e-01 3.838737e-04 7.000000e-01 3.928446e-04 8.000000e-01 4.015291e-04 9.000000e-01 4.099962e-04 1.000000e+00 4.182933e-04 1.100000e+00 4.264546e-04 1.200000e+00 4.345060e-04 1.300000e+00 4.424673e-04 1.400000e+00 4.503542e-04 1.500000e+00 4.581793e-04 1.600000e+00 4.659528e-04 1.700000e+00 4.736831e-04 1.800000e+00 4.813773e-04 2.000000e-01 1.802899e-03 3.000000e-01 1.906688e-03 4.000000e-01 1.944793e-03 5.000000e-01 1.975184e-03 6.000000e-01 2.001128e-03 7.000000e-01 2.024136e-03 8.000000e-01 2.045107e-03 9.000000e-01 2.064588e-03 1.000000e+00 2.082933e-03 1.100000e+00 2.100380e-03 1.200000e+00 2.117098e-03 1.300000e+00 2.133210e-03 1.400000e+00 2.148807e-03 1.500000e+00 2.163961e-03 1.600000e+00 2.178727e-03 1.700000e+00 2.193150e-03 1.800000e+00 2.207268e-03 2.000000e-01 3.304185e-03 3.000000e-01 3.751705e-03 4.000000e-01 3.917309e-03 5.000000e-01 3.972614e-03 6.000000e-01 4.010042e-03 7.000000e-01 4.042764e-03 8.000000e-01 4.071826e-03 9.000000e-01 4.097975e-03 1.000000e+00 4.121830e-03 1.100000e+00 4.143880e-03 1.200000e+00 4.164498e-03 1.300000e+00 4.183960e-03 1.400000e+00 4.202474e-03 1.500000e+00 4.220197e-03 1.600000e+00 4.237249e-03 1.700000e+00 4.253725e-03 1.800000e+00 4.269699e-03 2.000000e-01 4.540777e-03 3.000000e-01 5.378380e-03 4.000000e-01 5.795345e-03 5.000000e-01 5.997784e-03 6.000000e-01 6.085450e-03 7.000000e-01 6.127639e-03 8.000000e-01 6.162085e-03 9.000000e-01 6.193414e-03 1.000000e+00 6.222041e-03 1.100000e+00 6.248289e-03 1.200000e+00 6.272504e-03 1.300000e+00 6.295017e-03 1.400000e+00 6.316113e-03 1.500000e+00 6.336026e-03 1.600000e+00 6.354945e-03 1.700000e+00 6.373023e-03 1.800000e+00 6.390379e-03 2.000000e-01 5.841119e-03 3.000000e-01 7.315103e-03 4.000000e-01 8.176375e-03 5.000000e-01 8.686829e-03 6.000000e-01 8.993831e-03 7.000000e-01 9.176306e-03 8.000000e-01 9.279799e-03 9.000000e-01 9.335679e-03 1.000000e+00 9.371395e-03 1.100000e+00 9.402841e-03 1.200000e+00 9.432240e-03 1.300000e+00 9.459766e-03 1.400000e+00 9.485533e-03 1.500000e+00 9.509697e-03 1.600000e+00 9.532435e-03 1.700000e+00 9.553920e-03 1.800000e+00 9.574310e-03 2.000000e-01 6.520667e-03 3.000000e-01 8.587452e-03 4.000000e-01 9.959776e-03 5.000000e-01 1.085945e-02 6.000000e-01 1.145491e-02 7.000000e-01 1.185439e-02 8.000000e-01 1.212419e-02 9.000000e-01 1.230529e-02 1.000000e+00 1.242450e-02 1.100000e+00 1.250091e-02 1.200000e+00 1.254942e-02 1.300000e+00 1.258381e-02 1.400000e+00 1.261424e-02 1.500000e+00 1.264298e-02 1.600000e+00 1.267023e-02 1.700000e+00 1.269606e-02 1.800000e+00 1.272057e-02 2.000000e-01 5.716772e-06 3.000000e-01 6.399379e-06 4.000000e-01 7.135159e-06 5.000000e-01 7.919051e-06 6.000000e-01 8.736241e-06 7.000000e-01 9.577413e-06 8.000000e-01 1.043791e-05 9.000000e-01 1.131553e-05 1.000000e+00 1.220921e-05 1.100000e+00 1.311838e-05 1.200000e+00 1.404271e-05 1.300000e+00 1.498198e-05 1.400000e+00 1.593601e-05 1.500000e+00 1.690466e-05 1.600000e+00 1.788780e-05 1.700000e+00 1.888533e-05 1.800000e+00 1.989713e-05 2.000000e-01 3.141671e-04 3.000000e-01 3.288369e-04 4.000000e-01 3.399251e-04 5.000000e-01 3.496815e-04 6.000000e-01 3.587490e-04 7.000000e-01 3.673869e-04 8.000000e-01 3.757251e-04 9.000000e-01 3.838413e-04 1.000000e+00 3.917872e-04 1.100000e+00 3.995991e-04 1.200000e+00 4.073042e-04 1.300000e+00 4.149231e-04 1.400000e+00 4.224717e-04 1.500000e+00 4.299629e-04 1.600000e+00 4.374072e-04 1.700000e+00 4.448130e-04 1.800000e+00 4.521874e-04 2.000000e-01 1.383411e-03 3.000000e-01 1.518442e-03 4.000000e-01 1.563720e-03 5.000000e-01 1.596730e-03 6.000000e-01 1.624718e-03 7.000000e-01 1.649354e-03 8.000000e-01 1.671657e-03 9.000000e-01 1.692274e-03 1.000000e+00 1.711622e-03 1.100000e+00 1.729985e-03 1.200000e+00 1.747557e-03 1.300000e+00 1.764479e-03 1.400000e+00 1.780854e-03 1.500000e+00 1.796762e-03 1.600000e+00 1.812264e-03 1.700000e+00 1.827409e-03 1.800000e+00 1.842238e-03 2.000000e-01 2.513511e-03 3.000000e-01 3.012077e-03 4.000000e-01 3.231985e-03 5.000000e-01 3.314213e-03 6.000000e-01 3.362826e-03 7.000000e-01 3.404533e-03 8.000000e-01 3.441545e-03 9.000000e-01 3.474725e-03 1.000000e+00 3.504845e-03 1.100000e+00 3.532544e-03 1.200000e+00 3.558316e-03 1.300000e+00 3.582536e-03 1.400000e+00 3.605487e-03 1.500000e+00 3.627381e-03 1.600000e+00 3.648382e-03 1.700000e+00 3.668618e-03 1.800000e+00 3.688190e-03 2.000000e-01 3.460182e-03 3.000000e-01 4.341547e-03 4.000000e-01 4.852390e-03 5.000000e-01 5.128265e-03 6.000000e-01 5.260032e-03 7.000000e-01 5.324199e-03 8.000000e-01 5.372483e-03 9.000000e-01 5.416003e-03 1.000000e+00 5.455700e-03 1.100000e+00 5.491990e-03 1.200000e+00 5.525335e-03 1.300000e+00 5.556191e-03 1.400000e+00 5.584961e-03 1.500000e+00 5.611982e-03 1.600000e+00 5.637528e-03 1.700000e+00 5.661821e-03 1.800000e+00 5.685041e-03 2.000000e-01 4.500978e-03 3.000000e-01 5.921557e-03 4.000000e-01 6.877164e-03 5.000000e-01 7.506324e-03 6.000000e-01 7.913973e-03 7.000000e-01 8.169822e-03 8.000000e-01 8.321749e-03 9.000000e-01 8.407558e-03 1.000000e+00 8.461806e-03 1.100000e+00 8.507625e-03 1.200000e+00 8.550113e-03 1.300000e+00 8.589784e-03 1.400000e+00 8.626824e-03 1.500000e+00 8.661458e-03 1.600000e+00 8.693932e-03 1.700000e+00 8.724496e-03 1.800000e+00 8.753376e-03 2.000000e-01 5.127736e-03 3.000000e-01 6.997508e-03 4.000000e-01 8.385228e-03 5.000000e-01 9.386749e-03 6.000000e-01 1.010188e-02 7.000000e-01 1.061010e-02 8.000000e-01 1.096852e-02 9.000000e-01 1.121722e-02 1.000000e+00 1.138536e-02 1.100000e+00 1.149572e-02 1.200000e+00 1.156745e-02 1.300000e+00 1.161841e-02 1.400000e+00 1.166240e-02 1.500000e+00 1.170358e-02 1.600000e+00 1.174251e-02 1.700000e+00 1.177934e-02 1.800000e+00 1.181422e-02 2.000000e-01 2.606553e-05 3.000000e-01 2.889988e-05 4.000000e-01 3.176278e-05 5.000000e-01 3.476426e-05 6.000000e-01 3.787138e-05 7.000000e-01 4.105637e-05 8.000000e-01 4.430507e-05 9.000000e-01 4.761106e-05 1.000000e+00 5.097150e-05 1.100000e+00 5.438506e-05 1.200000e+00 5.785108e-05 1.300000e+00 6.136914e-05 1.400000e+00 6.493895e-05 1.500000e+00 6.856026e-05 1.600000e+00 7.223282e-05 1.700000e+00 7.595642e-05 1.800000e+00 7.973083e-05 2.000000e-01 3.108870e-04 3.000000e-01 3.320208e-04 4.000000e-01 3.447882e-04 5.000000e-01 3.555338e-04 6.000000e-01 3.653860e-04 7.000000e-01 3.747140e-04 8.000000e-01 3.836927e-04 9.000000e-01 3.924224e-04 1.000000e+00 4.009674e-04 1.100000e+00 4.093716e-04 1.200000e+00 4.176666e-04 1.300000e+00 4.258759e-04 1.400000e+00 4.340178e-04 1.500000e+00 4.421063e-04 1.600000e+00 4.501530e-04 1.700000e+00 4.581673e-04 1.800000e+00 4.661567e-04 2.000000e-01 9.880042e-04 3.000000e-01 1.144809e-03 4.000000e-01 1.202357e-03 5.000000e-01 1.235686e-03 6.000000e-01 1.262805e-03 7.000000e-01 1.286505e-03 8.000000e-01 1.307834e-03 9.000000e-01 1.327449e-03 1.000000e+00 1.345790e-03 1.100000e+00 1.363158e-03 1.200000e+00 1.379759e-03 1.300000e+00 1.395742e-03 1.400000e+00 1.411215e-03 1.500000e+00 1.426259e-03 1.600000e+00 1.440936e-03 1.700000e+00 1.455297e-03 1.800000e+00 1.469378e-03 2.000000e-01 1.702108e-03 3.000000e-01 2.148654e-03 4.000000e-01 2.390162e-03 5.000000e-01 2.500205e-03 6.000000e-01 2.557298e-03 7.000000e-01 2.601526e-03 8.000000e-01 2.640637e-03 9.000000e-01 2.675888e-03 1.000000e+00 2.707968e-03 1.100000e+00 2.737478e-03 1.200000e+00 2.764917e-03 1.300000e+00 2.790679e-03 1.400000e+00 2.815070e-03 1.500000e+00 2.838324e-03 1.600000e+00 2.860625e-03 1.700000e+00 2.882113e-03 1.800000e+00 2.902902e-03 2.000000e-01 2.327336e-03 3.000000e-01 3.070348e-03 4.000000e-01 3.570389e-03 5.000000e-01 3.879816e-03 6.000000e-01 4.050962e-03 7.000000e-01 4.140736e-03 8.000000e-01 4.199810e-03 9.000000e-01 4.250488e-03 1.000000e+00 4.296832e-03 1.100000e+00 4.339503e-03 1.200000e+00 4.378912e-03 1.300000e+00 4.415483e-03 1.400000e+00 4.449627e-03 1.500000e+00 4.481707e-03 1.600000e+00 4.512032e-03 1.700000e+00 4.540858e-03 1.800000e+00 4.568396e-03 2.000000e-01 3.069264e-03 3.000000e-01 4.207416e-03 4.000000e-01 5.077281e-03 5.000000e-01 5.718597e-03 6.000000e-01 6.175393e-03 7.000000e-01 6.486771e-03 8.000000e-01 6.687395e-03 9.000000e-01 6.810525e-03 1.000000e+00 6.888916e-03 1.100000e+00 6.949551e-03 1.200000e+00 7.004247e-03 1.300000e+00 7.055395e-03 1.400000e+00 7.103419e-03 1.500000e+00 7.148541e-03 1.600000e+00 7.190996e-03 1.700000e+00 7.231041e-03 1.800000e+00 7.268927e-03 2.000000e-01 3.590368e-03 3.000000e-01 5.046723e-03 4.000000e-01 6.241093e-03 5.000000e-01 7.191972e-03 6.000000e-01 7.932933e-03 7.000000e-01 8.500009e-03 8.000000e-01 8.925661e-03 9.000000e-01 9.237463e-03 1.000000e+00 9.459218e-03 1.100000e+00 9.612409e-03 1.200000e+00 9.716965e-03 1.300000e+00 9.791691e-03 1.400000e+00 9.852682e-03 1.500000e+00 9.908369e-03 1.600000e+00 9.960938e-03 1.700000e+00 1.001085e-02 1.800000e+00 1.005828e-02 tmpk8ny_4pz/tests/hisim/nmos/reference/65_acFreq_COTHRML=1.standard0000644000175000017500000002533013546075722025153 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258.925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584.893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995.262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511.886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162.278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981.072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011.872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309.573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943.282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589.25 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848.93 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952.62 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118.86 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622.78 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810.72 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118.72 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095.73 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432.82 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 125892.5 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 158489.3 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 199526.2 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 251188.6 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 316227.8 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 398107.2 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 501187.2 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 630957.3 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 794328.2 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 1000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589250 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848930 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952620 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118860 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622780 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810720 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118720 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095730 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432820 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258.925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584.893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 1995.262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511.886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162.278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981.072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011.872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309.573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943.282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589.25 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848.93 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 19952.62 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118.86 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622.78 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810.72 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118.72 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095.73 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432.82 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 125892.5 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 158489.3 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 199526.2 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 251188.6 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 316227.8 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 398107.2 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 501187.2 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 630957.3 1.95109670680967e-14 1.51047556203098e-14 3.63962547928741e-15 794328.2 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 1000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 1995262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589250 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848930 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 19952620 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118860 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622780 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810720 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118720 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095730 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432820 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258.925 1.92253810991621e-14 1.48903692202894e-14 3.56434127432084e-15 1584.893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995.262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511.886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162.278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981.072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011.872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309.573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943.282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 12589.25 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848.93 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952.62 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118.86 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622.78 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810.72 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118.72 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095.73 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432.82 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 125892.5 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 158489.3 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 199526.2 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 251188.6 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 316227.8 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 398107.2 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 501187.2 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 630957.3 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 794328.2 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 1000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258925 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 1584893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000000 1.92253759986944e-14 1.4890367771438e-14 3.56434020406966e-15 12589250 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848930 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952620 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118860 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622780 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810720 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118720 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095730 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432820 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/55_acFreq_COADOV=1.standard0000644000175000017500000002533013546075722025015 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258.925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584.893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995.262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511.886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162.278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981.072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011.872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309.573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943.282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589.25 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848.93 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952.62 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118.86 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622.78 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810.72 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118.72 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095.73 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432.82 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 125892.5 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 158489.3 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 199526.2 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 251188.6 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 316227.8 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 398107.2 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 501187.2 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 630957.3 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 794328.2 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 1000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589250 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848930 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952620 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118860 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622780 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810720 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118720 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095730 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432820 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258.925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584.893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 1995.262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511.886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162.278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981.072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011.872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309.573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943.282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589.25 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848.93 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 19952.62 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118.86 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622.78 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810.72 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118.72 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095.73 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432.82 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 125892.5 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 158489.3 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 199526.2 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 251188.6 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 316227.8 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 398107.2 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 501187.2 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 630957.3 1.95109670680967e-14 1.51047556203098e-14 3.63962547928741e-15 794328.2 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 1000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 1995262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589250 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848930 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 19952620 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118860 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622780 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810720 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118720 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095730 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432820 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258.925 1.92253810991621e-14 1.48903692202894e-14 3.56434127432084e-15 1584.893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995.262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511.886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162.278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981.072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011.872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309.573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943.282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 12589.25 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848.93 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952.62 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118.86 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622.78 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810.72 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118.72 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095.73 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432.82 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 125892.5 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 158489.3 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 199526.2 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 251188.6 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 316227.8 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 398107.2 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 501187.2 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 630957.3 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 794328.2 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 1000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258925 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 1584893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000000 1.92253759986944e-14 1.4890367771438e-14 3.56434020406966e-15 12589250 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848930 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952620 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118860 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622780 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810720 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118720 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095730 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432820 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/49_acFreq_COIIGS=1.standard0000644000175000017500000002533013546075722025022 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258.925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584.893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995.262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511.886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162.278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981.072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011.872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309.573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943.282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589.25 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848.93 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952.62 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118.86 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622.78 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810.72 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118.72 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095.73 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432.82 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 125892.5 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 158489.3 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 199526.2 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 251188.6 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 316227.8 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 398107.2 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 501187.2 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 630957.3 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 794328.2 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 1000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589250 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848930 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952620 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118860 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622780 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810720 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118720 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095730 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432820 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258.925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584.893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 1995.262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511.886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162.278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981.072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011.872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309.573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943.282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589.25 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848.93 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 19952.62 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118.86 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622.78 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810.72 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118.72 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095.73 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432.82 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 125892.5 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 158489.3 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 199526.2 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 251188.6 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 316227.8 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 398107.2 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 501187.2 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 630957.3 1.95109670680967e-14 1.51047556203098e-14 3.63962547928741e-15 794328.2 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 1000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 1995262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589250 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848930 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 19952620 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118860 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622780 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810720 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118720 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095730 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432820 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258.925 1.92253810991621e-14 1.48903692202894e-14 3.56434127432084e-15 1584.893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995.262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511.886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162.278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981.072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011.872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309.573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943.282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 12589.25 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848.93 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952.62 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118.86 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622.78 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810.72 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118.72 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095.73 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432.82 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 125892.5 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 158489.3 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 199526.2 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 251188.6 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 316227.8 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 398107.2 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 501187.2 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 630957.3 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 794328.2 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 1000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258925 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 1584893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000000 1.92253759986944e-14 1.4890367771438e-14 3.56434020406966e-15 12589250 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848930 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952620 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118860 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622780 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810720 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118720 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095730 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432820 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/53_acFreq_COSTI=1.standard0000644000175000017500000002533013546075722024721 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258.925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584.893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995.262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511.886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162.278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981.072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011.872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309.573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943.282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589.25 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848.93 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952.62 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118.86 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622.78 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810.72 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118.72 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095.73 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432.82 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 125892.5 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 158489.3 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 199526.2 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 251188.6 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 316227.8 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 398107.2 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 501187.2 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 630957.3 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 794328.2 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 1000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589250 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848930 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952620 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118860 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622780 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810720 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118720 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095730 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432820 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258.925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584.893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 1995.262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511.886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162.278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981.072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011.872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309.573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943.282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589.25 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848.93 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 19952.62 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118.86 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622.78 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810.72 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118.72 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095.73 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432.82 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 125892.5 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 158489.3 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 199526.2 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 251188.6 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 316227.8 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 398107.2 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 501187.2 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 630957.3 1.95109670680967e-14 1.51047556203098e-14 3.63962547928741e-15 794328.2 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 1000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 1995262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589250 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848930 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 19952620 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118860 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622780 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810720 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118720 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095730 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432820 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258.925 1.92253810991621e-14 1.48903692202894e-14 3.56434127432084e-15 1584.893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995.262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511.886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162.278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981.072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011.872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309.573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943.282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 12589.25 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848.93 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952.62 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118.86 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622.78 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810.72 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118.72 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095.73 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432.82 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 125892.5 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 158489.3 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 199526.2 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 251188.6 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 316227.8 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 398107.2 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 501187.2 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 630957.3 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 794328.2 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 1000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258925 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 1584893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000000 1.92253759986944e-14 1.4890367771438e-14 3.56434020406966e-15 12589250 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848930 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952620 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118860 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622780 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810720 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118720 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095730 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432820 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/61_acFreq_CORBNET=1.standard0000644000175000017500000002533013546075722025133 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258.925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584.893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995.262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511.886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162.278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981.072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011.872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309.573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943.282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589.25 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848.93 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952.62 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118.86 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622.78 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810.72 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118.72 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095.73 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432.82 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 125892.5 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 158489.3 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 199526.2 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 251188.6 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 316227.8 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 398107.2 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 501187.2 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 630957.3 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 794328.2 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 1000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589250 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848930 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952620 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118860 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622780 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810720 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118720 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095730 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432820 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258.925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584.893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 1995.262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511.886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162.278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981.072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011.872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309.573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943.282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589.25 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848.93 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 19952.62 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118.86 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622.78 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810.72 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118.72 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095.73 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432.82 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 125892.5 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 158489.3 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 199526.2 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 251188.6 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 316227.8 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 398107.2 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 501187.2 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 630957.3 1.95109670680967e-14 1.51047556203098e-14 3.63962547928741e-15 794328.2 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 1000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 1995262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589250 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848930 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 19952620 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118860 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622780 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810720 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118720 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095730 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432820 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258.925 1.92253810991621e-14 1.48903692202894e-14 3.56434127432084e-15 1584.893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995.262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511.886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162.278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981.072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011.872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309.573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943.282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 12589.25 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848.93 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952.62 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118.86 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622.78 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810.72 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118.72 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095.73 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432.82 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 125892.5 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 158489.3 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 199526.2 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 251188.6 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 316227.8 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 398107.2 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 501187.2 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 630957.3 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 794328.2 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 1000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258925 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 1584893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000000 1.92253759986944e-14 1.4890367771438e-14 3.56434020406966e-15 12589250 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848930 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952620 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118860 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622780 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810720 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118720 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095730 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432820 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/80_noise_COIGN=0_T150.standard0000644000175000017500000000353213546075722025323 0ustar carstencarstenFreq N(g) 1000 0 1258.925 0 1584.893 0 1995.262 0 2511.886 0 3162.278 0 3981.072 0 5011.872 0 6309.573 0 7943.282 0 10000 0 12589.25 0 15848.93 0 19952.62 0 25118.86 0 31622.78 0 39810.72 0 50118.72 0 63095.73 0 79432.82 0 100000 0 125892.5 0 158489.3 0 199526.2 0 251188.6 0 316227.8 0 398107.2 0 501187.2 0 630957.3 0 794328.2 0 1000000 0 1258925 0 1584893 0 1995262 0 2511886 0 3162278 0 3981072 0 5011872 0 6309573 0 7943282 0 10000000 0 12589250 0 15848930 0 19952620 0 25118860 0 31622780 0 39810720 0 50118720 0 63095730 0 79432820 0 100000000 0 125892500 0 158489300 0 199526200 0 251188600 0 316227800 0 398107200 0 501187200 0 630957300 0 794328200 0 1000000000 0 1258925000 0 1584893000 0 1995262000 0 2511886000 0 3162278000 0 3981072000 0 5011872000 0 6309573000 0 7943282000 0 10000000000 0 12589250000 0 15848930000 0 19952620000 0 25118860000 0 31622780000 0 39810720000 0 50118720000 0 63095730000 0 79432820000 0 100000000000 0 1000 0 1258.925 0 1584.893 0 1995.262 0 2511.886 0 3162.278 0 3981.072 0 5011.872 0 6309.573 0 7943.282 0 10000 0 12589.25 0 15848.93 0 19952.62 0 25118.86 0 31622.78 0 39810.72 0 50118.72 0 63095.73 0 79432.82 0 100000 0 125892.5 0 158489.3 0 199526.2 0 251188.6 0 316227.8 0 398107.2 0 501187.2 0 630957.3 0 794328.2 0 1000000 0 1258925 0 1584893 0 1995262 0 2511886 0 3162278 0 3981072 0 5011872 0 6309573 0 7943282 0 10000000 0 12589250 0 15848930 0 19952620 0 25118860 0 31622780 0 39810720 0 50118720 0 63095730 0 79432820 0 100000000 0 125892500 0 158489300 0 199526200 0 251188600 0 316227800 0 398107200 0 501187200 0 630957300 0 794328200 0 1000000000 0 1258925000 0 1584893000 0 1995262000 0 2511886000 0 3162278000 0 3981072000 0 5011872000 0 6309573000 0 7943282000 0 10000000000 0 12589250000 0 15848930000 0 19952620000 0 25118860000 0 31622780000 0 39810720000 0 50118720000 0 63095730000 0 79432820000 0 100000000000 0 tmpk8ny_4pz/tests/hisim/nmos/reference/75_noise_COIGN=1_T27.standard0000644000175000017500000000712013546075722025250 0ustar carstencarstenFreq N(g) 1000 5.562967e-39 1258.925 8.816708e-39 1584.893 1.397354e-38 1995.262 2.214657e-38 2511.886 3.509995e-38 3162.278 5.562967e-38 3981.072 8.816708e-38 5011.872 1.397354e-37 6309.573 2.214657e-37 7943.282 3.509995e-37 10000 5.562967e-37 12589.25 8.816708e-37 15848.93 1.397354e-36 19952.62 2.214657e-36 25118.86 3.509995e-36 31622.78 5.562967e-36 39810.72 8.816708e-36 50118.72 1.397354e-35 63095.73 2.214657e-35 79432.82 3.509995e-35 100000 5.562967e-35 125892.5 8.816708e-35 158489.3 1.397354e-34 199526.2 2.214657e-34 251188.6 3.509995e-34 316227.8 5.562967e-34 398107.2 8.816708e-34 501187.2 1.397354e-33 630957.3 2.214657e-33 794328.2 3.509995e-33 1000000 5.562967e-33 1258925 8.816708e-33 1584893 1.397354e-32 1995262 2.214657e-32 2511886 3.509995e-32 3162278 5.562967e-32 3981072 8.816708e-32 5011872 1.397354e-31 6309573 2.214657e-31 7943282 3.509995e-31 10000000 5.562967e-31 12589250 8.816708e-31 15848930 1.397354e-30 19952620 2.214657e-30 25118860 3.509995e-30 31622780 5.562967e-30 39810720 8.816708e-30 50118720 1.397354e-29 63095730 2.214657e-29 79432820 3.509995e-29 100000000 5.562967e-29 125892500 8.816708e-29 158489300 1.397354e-28 199526200 2.214657e-28 251188600 3.509995e-28 316227800 5.562967e-28 398107200 8.816708e-28 501187200 1.397354e-27 630957300 2.214657e-27 794328200 3.509995e-27 1000000000 5.562967e-27 1258925000 8.816708e-27 1584893000 1.397354e-26 1995262000 2.214657e-26 2511886000 3.509995e-26 3162278000 5.562967e-26 3981072000 8.816708e-26 5011872000 1.397354e-25 6309573000 2.214657e-25 7943282000 3.509995e-25 10000000000 5.562967e-25 12589250000 8.816708e-25 15848930000 1.397354e-24 19952620000 2.214657e-24 25118860000 3.509995e-24 31622780000 5.562967e-24 39810720000 8.816708e-24 50118720000 1.397354e-23 63095730000 2.214657e-23 79432820000 3.509995e-23 100000000000 5.562967e-23 1000 1.769373e-39 1258.925 2.804268e-39 1584.893 4.444465e-39 1995.262 7.044002e-39 2511.886 1.116399e-38 3162.278 1.769373e-38 3981.072 2.804268e-38 5011.872 4.444465e-38 6309.573 7.044002e-38 7943.282 1.116399e-37 10000 1.769373e-37 12589.25 2.804268e-37 15848.93 4.444465e-37 19952.62 7.044002e-37 25118.86 1.116399e-36 31622.78 1.769373e-36 39810.72 2.804268e-36 50118.72 4.444465e-36 63095.73 7.044002e-36 79432.82 1.116399e-35 100000 1.769373e-35 125892.5 2.804268e-35 158489.3 4.444465e-35 199526.2 7.044002e-35 251188.6 1.116399e-34 316227.8 1.769373e-34 398107.2 2.804268e-34 501187.2 4.444465e-34 630957.3 7.044002e-34 794328.2 1.116399e-33 1000000 1.769373e-33 1258925 2.804268e-33 1584893 4.444465e-33 1995262 7.044002e-33 2511886 1.116399e-32 3162278 1.769373e-32 3981072 2.804268e-32 5011872 4.444465e-32 6309573 7.044002e-32 7943282 1.116399e-31 10000000 1.769373e-31 12589250 2.804268e-31 15848930 4.444465e-31 19952620 7.044002e-31 25118860 1.116399e-30 31622780 1.769373e-30 39810720 2.804268e-30 50118720 4.444465e-30 63095730 7.044002e-30 79432820 1.116399e-29 100000000 1.769373e-29 125892500 2.804268e-29 158489300 4.444465e-29 199526200 7.044002e-29 251188600 1.116399e-28 316227800 1.769373e-28 398107200 2.804268e-28 501187200 4.444465e-28 630957300 7.044002e-28 794328200 1.116399e-27 1000000000 1.769373e-27 1258925000 2.804268e-27 1584893000 4.444465e-27 1995262000 7.044002e-27 2511886000 1.116399e-26 3162278000 1.769373e-26 3981072000 2.804268e-26 5011872000 4.444465e-26 6309573000 7.044002e-26 7943282000 1.116399e-25 10000000000 1.769373e-25 12589250000 2.804268e-25 15848930000 4.444465e-25 19952620000 7.044002e-25 25118860000 1.116399e-24 31622780000 1.769373e-24 39810720000 2.804268e-24 50118720000 4.444465e-24 63095730000 7.044002e-24 79432820000 1.116399e-23 100000000000 1.769373e-23 tmpk8ny_4pz/tests/hisim/nmos/reference/15_dcSweep_COISTI=1_NSUBP.standard0000644000175000017500000002211413546075722026165 0ustar carstencarstenV(d) I(d) 2.000000e-01 2.776518e-03 3.000000e-01 3.383362e-03 4.000000e-01 3.441007e-03 5.000000e-01 3.484573e-03 6.000000e-01 3.539688e-03 7.000000e-01 3.600423e-03 8.000000e-01 3.662767e-03 9.000000e-01 3.724859e-03 1.000000e+00 3.785942e-03 1.100000e+00 3.845766e-03 1.200000e+00 3.904302e-03 1.300000e+00 3.961609e-03 1.400000e+00 4.017778e-03 1.500000e+00 4.072907e-03 1.600000e+00 4.127091e-03 1.700000e+00 4.180417e-03 1.800000e+00 4.232961e-03 2.000000e-01 2.619845e-03 3.000000e-01 3.688184e-03 4.000000e-01 4.450605e-03 5.000000e-01 4.734741e-03 6.000000e-01 4.854411e-03 7.000000e-01 4.941763e-03 8.000000e-01 5.020659e-03 9.000000e-01 5.095650e-03 1.000000e+00 5.167939e-03 1.100000e+00 5.238034e-03 1.200000e+00 5.306255e-03 1.300000e+00 5.372846e-03 1.400000e+00 5.438004e-03 1.500000e+00 5.501892e-03 1.600000e+00 5.564650e-03 1.700000e+00 5.626393e-03 1.800000e+00 5.687221e-03 2.000000e-01 3.536210e-03 3.000000e-01 4.301845e-03 4.000000e-01 4.984888e-03 5.000000e-01 5.577260e-03 6.000000e-01 5.958840e-03 7.000000e-01 6.154274e-03 8.000000e-01 6.266841e-03 9.000000e-01 6.349930e-03 1.000000e+00 6.421557e-03 1.100000e+00 6.487725e-03 1.200000e+00 6.550702e-03 1.300000e+00 6.611496e-03 1.400000e+00 6.670637e-03 1.500000e+00 6.728445e-03 1.600000e+00 6.785136e-03 1.700000e+00 6.840867e-03 1.800000e+00 6.895758e-03 2.000000e-01 4.704289e-03 3.000000e-01 5.617019e-03 4.000000e-01 6.221398e-03 5.000000e-01 6.718391e-03 6.000000e-01 7.167402e-03 7.000000e-01 7.532337e-03 8.000000e-01 7.781100e-03 9.000000e-01 7.936800e-03 1.000000e+00 8.041628e-03 1.100000e+00 8.122510e-03 1.200000e+00 8.191964e-03 1.300000e+00 8.255443e-03 1.400000e+00 8.315416e-03 1.500000e+00 8.373091e-03 1.600000e+00 8.429121e-03 1.700000e+00 8.483888e-03 1.800000e+00 8.537638e-03 2.000000e-01 5.708686e-03 3.000000e-01 6.946204e-03 4.000000e-01 7.697147e-03 5.000000e-01 8.219985e-03 6.000000e-01 8.636236e-03 7.000000e-01 9.002000e-03 8.000000e-01 9.321898e-03 9.000000e-01 9.579569e-03 1.000000e+00 9.768201e-03 1.100000e+00 9.901746e-03 1.200000e+00 1.000085e-02 1.300000e+00 1.008073e-02 1.400000e+00 1.015003e-02 1.500000e+00 1.021326e-02 1.600000e+00 1.027277e-02 1.700000e+00 1.032981e-02 1.800000e+00 1.038512e-02 2.000000e-01 6.728198e-03 3.000000e-01 8.563255e-03 4.000000e-01 9.716924e-03 5.000000e-01 1.047894e-02 6.000000e-01 1.102053e-02 7.000000e-01 1.143566e-02 8.000000e-01 1.177631e-02 9.000000e-01 1.207146e-02 1.000000e+00 1.233233e-02 1.100000e+00 1.255385e-02 1.200000e+00 1.273596e-02 1.300000e+00 1.288102e-02 1.400000e+00 1.299576e-02 1.500000e+00 1.308896e-02 1.600000e+00 1.316806e-02 1.700000e+00 1.323815e-02 1.800000e+00 1.330246e-02 2.000000e-01 7.186030e-03 3.000000e-01 9.571871e-03 4.000000e-01 1.122103e-02 5.000000e-01 1.235823e-02 6.000000e-01 1.316385e-02 7.000000e-01 1.375800e-02 8.000000e-01 1.421597e-02 9.000000e-01 1.458446e-02 1.000000e+00 1.489268e-02 1.100000e+00 1.515902e-02 1.200000e+00 1.539416e-02 1.300000e+00 1.560163e-02 1.400000e+00 1.577728e-02 1.500000e+00 1.592392e-02 1.600000e+00 1.604739e-02 1.700000e+00 1.615160e-02 1.800000e+00 1.624102e-02 2.000000e-01 2.630710e-03 3.000000e-01 3.385754e-03 4.000000e-01 3.496266e-03 5.000000e-01 3.557088e-03 6.000000e-01 3.621641e-03 7.000000e-01 3.688703e-03 8.000000e-01 3.755929e-03 9.000000e-01 3.822196e-03 1.000000e+00 3.887096e-03 1.100000e+00 3.950556e-03 1.200000e+00 4.012636e-03 1.300000e+00 4.073444e-03 1.400000e+00 4.133100e-03 1.500000e+00 4.191720e-03 1.600000e+00 4.249408e-03 1.700000e+00 4.306258e-03 1.800000e+00 4.362353e-03 2.000000e-01 2.415312e-03 3.000000e-01 3.458638e-03 4.000000e-01 4.267875e-03 5.000000e-01 4.610501e-03 6.000000e-01 4.752515e-03 7.000000e-01 4.849913e-03 8.000000e-01 4.935305e-03 9.000000e-01 5.015465e-03 1.000000e+00 5.092282e-03 1.100000e+00 5.166534e-03 1.200000e+00 5.238671e-03 1.300000e+00 5.309005e-03 1.400000e+00 5.377778e-03 1.500000e+00 5.445185e-03 1.600000e+00 5.511385e-03 1.700000e+00 5.576509e-03 1.800000e+00 5.640671e-03 2.000000e-01 3.059882e-03 3.000000e-01 3.935937e-03 4.000000e-01 4.692176e-03 5.000000e-01 5.362625e-03 6.000000e-01 5.821785e-03 7.000000e-01 6.068568e-03 8.000000e-01 6.210568e-03 9.000000e-01 6.312978e-03 1.000000e+00 6.399439e-03 1.100000e+00 6.478135e-03 1.200000e+00 6.552241e-03 1.300000e+00 6.623204e-03 1.400000e+00 6.691794e-03 1.500000e+00 6.758480e-03 1.600000e+00 6.823579e-03 1.700000e+00 6.887322e-03 1.800000e+00 6.949883e-03 2.000000e-01 3.883827e-03 3.000000e-01 4.956681e-03 4.000000e-01 5.720055e-03 5.000000e-01 6.330379e-03 6.000000e-01 6.870173e-03 7.000000e-01 7.319246e-03 8.000000e-01 7.635340e-03 9.000000e-01 7.837100e-03 1.000000e+00 7.972665e-03 1.100000e+00 8.075708e-03 1.200000e+00 8.162654e-03 1.300000e+00 8.240881e-03 1.400000e+00 8.313819e-03 1.500000e+00 8.383196e-03 1.600000e+00 8.449968e-03 1.700000e+00 8.514715e-03 1.800000e+00 8.577818e-03 2.000000e-01 4.608158e-03 3.000000e-01 5.976526e-03 4.000000e-01 6.923684e-03 5.000000e-01 7.616770e-03 6.000000e-01 8.161797e-03 7.000000e-01 8.623422e-03 8.000000e-01 9.025976e-03 9.000000e-01 9.354980e-03 1.000000e+00 9.599260e-03 1.100000e+00 9.773196e-03 1.200000e+00 9.901567e-03 1.300000e+00 1.000370e-02 1.400000e+00 1.009097e-02 1.500000e+00 1.016942e-02 1.600000e+00 1.024228e-02 1.700000e+00 1.031132e-02 1.800000e+00 1.037759e-02 2.000000e-01 5.391561e-03 3.000000e-01 7.221980e-03 4.000000e-01 8.542586e-03 5.000000e-01 9.502672e-03 6.000000e-01 1.022283e-02 7.000000e-01 1.078503e-02 8.000000e-01 1.124229e-02 9.000000e-01 1.162849e-02 1.000000e+00 1.196237e-02 1.100000e+00 1.224830e-02 1.200000e+00 1.248433e-02 1.300000e+00 1.267231e-02 1.400000e+00 1.282040e-02 1.500000e+00 1.293964e-02 1.600000e+00 1.303964e-02 1.700000e+00 1.312711e-02 1.800000e+00 1.320635e-02 2.000000e-01 5.820947e-03 3.000000e-01 8.037049e-03 4.000000e-01 9.746967e-03 5.000000e-01 1.104290e-02 6.000000e-01 1.202939e-02 7.000000e-01 1.279361e-02 8.000000e-01 1.339991e-02 9.000000e-01 1.389336e-02 1.000000e+00 1.430499e-02 1.100000e+00 1.465598e-02 1.200000e+00 1.495994e-02 1.300000e+00 1.522394e-02 1.400000e+00 1.544974e-02 1.500000e+00 1.563917e-02 1.600000e+00 1.579737e-02 1.700000e+00 1.592981e-02 1.800000e+00 1.604235e-02 2.000000e-01 2.221746e-03 3.000000e-01 3.099937e-03 4.000000e-01 3.309544e-03 5.000000e-01 3.388891e-03 6.000000e-01 3.459121e-03 7.000000e-01 3.528384e-03 8.000000e-01 3.596523e-03 9.000000e-01 3.663200e-03 1.000000e+00 3.728344e-03 1.100000e+00 3.792031e-03 1.200000e+00 3.854394e-03 1.300000e+00 3.915577e-03 1.400000e+00 3.975714e-03 1.500000e+00 4.034928e-03 1.600000e+00 4.093325e-03 1.700000e+00 4.150998e-03 1.800000e+00 4.208029e-03 2.000000e-01 2.044677e-03 3.000000e-01 2.952223e-03 4.000000e-01 3.739191e-03 5.000000e-01 4.158972e-03 6.000000e-01 4.334390e-03 7.000000e-01 4.440275e-03 8.000000e-01 4.527019e-03 9.000000e-01 4.606302e-03 1.000000e+00 4.681432e-03 1.100000e+00 4.753677e-03 1.200000e+00 4.823684e-03 1.300000e+00 4.891857e-03 1.400000e+00 4.958485e-03 1.500000e+00 5.023787e-03 1.600000e+00 5.087935e-03 1.700000e+00 5.151071e-03 1.800000e+00 5.213311e-03 2.000000e-01 2.405365e-03 3.000000e-01 3.263584e-03 4.000000e-01 4.001027e-03 5.000000e-01 4.664868e-03 6.000000e-01 5.168290e-03 7.000000e-01 5.465379e-03 8.000000e-01 5.636390e-03 9.000000e-01 5.754233e-03 1.000000e+00 5.850055e-03 1.100000e+00 5.935315e-03 1.200000e+00 6.014531e-03 1.300000e+00 6.089749e-03 1.400000e+00 6.162041e-03 1.500000e+00 6.232046e-03 1.600000e+00 6.300185e-03 1.700000e+00 6.366756e-03 1.800000e+00 6.431983e-03 2.000000e-01 2.887011e-03 3.000000e-01 3.913444e-03 4.000000e-01 4.723688e-03 5.000000e-01 5.386595e-03 6.000000e-01 5.961618e-03 7.000000e-01 6.453333e-03 8.000000e-01 6.821711e-03 9.000000e-01 7.067665e-03 1.000000e+00 7.233845e-03 1.100000e+00 7.357988e-03 1.200000e+00 7.460605e-03 1.300000e+00 7.551395e-03 1.400000e+00 7.634978e-03 1.500000e+00 7.713714e-03 1.600000e+00 7.788917e-03 1.700000e+00 7.861390e-03 1.800000e+00 7.931659e-03 2.000000e-01 3.339084e-03 3.000000e-01 4.578616e-03 4.000000e-01 5.559168e-03 5.000000e-01 6.339671e-03 6.000000e-01 6.973688e-03 7.000000e-01 7.506176e-03 8.000000e-01 7.965425e-03 9.000000e-01 8.349404e-03 1.000000e+00 8.645025e-03 1.100000e+00 8.860807e-03 1.200000e+00 9.020968e-03 1.300000e+00 9.147461e-03 1.400000e+00 9.254233e-03 1.500000e+00 9.349059e-03 1.600000e+00 9.436170e-03 1.700000e+00 9.517942e-03 1.800000e+00 9.595781e-03 2.000000e-01 3.883695e-03 3.000000e-01 5.432115e-03 4.000000e-01 6.699412e-03 5.000000e-01 7.724536e-03 6.000000e-01 8.555558e-03 7.000000e-01 9.235807e-03 8.000000e-01 9.800231e-03 9.000000e-01 1.027611e-02 1.000000e+00 1.068272e-02 1.100000e+00 1.103015e-02 1.200000e+00 1.132057e-02 1.300000e+00 1.155531e-02 1.400000e+00 1.174212e-02 1.500000e+00 1.189295e-02 1.600000e+00 1.201899e-02 1.700000e+00 1.212849e-02 1.800000e+00 1.222686e-02 2.000000e-01 4.253904e-03 3.000000e-01 6.054562e-03 4.000000e-01 7.588851e-03 5.000000e-01 8.870270e-03 6.000000e-01 9.931537e-03 7.000000e-01 1.081056e-02 8.000000e-01 1.154258e-02 9.000000e-01 1.215712e-02 1.000000e+00 1.267774e-02 1.100000e+00 1.312277e-02 1.200000e+00 1.350572e-02 1.300000e+00 1.383548e-02 1.400000e+00 1.411760e-02 1.500000e+00 1.435637e-02 1.600000e+00 1.455658e-02 1.700000e+00 1.472448e-02 1.800000e+00 1.486704e-02 tmpk8ny_4pz/tests/hisim/nmos/reference/70_acFreq_CODFM=1.standard0000644000175000017500000002527313546075722024675 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97107189976532e-14 1.52567074363481e-14 3.70129780724853e-15 1258.925 1.97107251363558e-14 1.52567128818195e-14 3.70129853233794e-15 1584.893 1.9710717293797e-14 1.52567090327287e-14 3.70129815727045e-15 1995.262 1.97107256040532e-14 1.52567112724246e-14 3.70129753953003e-15 2511.886 1.97107199642465e-14 1.52567137396058e-14 3.70129780073251e-15 3162.278 1.97107191277139e-14 1.52567051252229e-14 3.70129692994403e-15 3981.072 1.97107173577912e-14 1.52567063052994e-14 3.70129694501774e-15 5011.872 1.97107189690986e-14 1.52567087552263e-14 3.70129798127932e-15 6309.573 1.97107213002513e-14 1.52567096895756e-14 3.70129651794016e-15 7943.282 1.97107190597621e-14 1.52567088051755e-14 3.70129801572589e-15 10000 1.97107189976532e-14 1.52567074363481e-14 3.70129780724853e-15 12589.25 1.97107251363558e-14 1.52567128818195e-14 3.70129853233794e-15 15848.93 1.9710717293797e-14 1.52567090327287e-14 3.70129815727045e-15 19952.62 1.97107256040532e-14 1.52567112724246e-14 3.70129753953003e-15 25118.86 1.97107199642465e-14 1.52567137396058e-14 3.70129780073251e-15 31622.78 1.97107191277139e-14 1.52567051252229e-14 3.70129692994403e-15 39810.72 1.97107173577912e-14 1.52567063052994e-14 3.70129694501774e-15 50118.72 1.97107189690986e-14 1.52567087552263e-14 3.70129798127932e-15 63095.73 1.97107213002513e-14 1.52567096895756e-14 3.70129651794016e-15 79432.82 1.97107190597621e-14 1.52567088051755e-14 3.70129801572589e-15 100000 1.97107189976532e-14 1.52567074363481e-14 3.70129780724853e-15 125892.5 1.97107251363558e-14 1.52567128818195e-14 3.70129853233794e-15 158489.3 1.9710717293797e-14 1.52567090327288e-14 3.70129815727045e-15 199526.2 1.97107256040532e-14 1.52567112724246e-14 3.70129753953003e-15 251188.6 1.97107199642465e-14 1.52567137396058e-14 3.70129780073251e-15 316227.8 1.97107191277139e-14 1.52567051252229e-14 3.70129692994402e-15 398107.2 1.97107173577912e-14 1.52567063052994e-14 3.70129694501774e-15 501187.2 1.97107189690986e-14 1.52567087552263e-14 3.70129798127932e-15 630957.3 1.97107213002513e-14 1.52567096895756e-14 3.70129651794016e-15 794328.2 1.97107190597621e-14 1.52567088051755e-14 3.70129801572589e-15 1000000 1.97107189976532e-14 1.52567074363481e-14 3.70129780724853e-15 1258925 1.97107251363558e-14 1.52567128818195e-14 3.70129853233794e-15 1584893 1.9710717293797e-14 1.52567090327287e-14 3.70129815727045e-15 1995262 1.97107256040532e-14 1.52567112724246e-14 3.70129753953003e-15 2511886 1.97107199642465e-14 1.52567137396058e-14 3.70129780073251e-15 3162278 1.97107191277139e-14 1.52567051252229e-14 3.70129692994403e-15 3981072 1.97107173577912e-14 1.52567063052994e-14 3.70129694501774e-15 5011872 1.97107189690986e-14 1.52567087552263e-14 3.70129798127932e-15 6309573 1.97107213002513e-14 1.52567096895756e-14 3.70129651794016e-15 7943282 1.97107190597621e-14 1.52567088051755e-14 3.70129801572589e-15 10000000 1.97107189976532e-14 1.52567074363481e-14 3.70129780724853e-15 12589250 1.97107251363558e-14 1.52567128818195e-14 3.70129853233794e-15 15848930 1.9710717293797e-14 1.52567090327287e-14 3.70129815727045e-15 19952620 1.97107256040532e-14 1.52567112724246e-14 3.70129753953003e-15 25118860 1.97107199642465e-14 1.52567137396058e-14 3.70129780073251e-15 31622780 1.97107191277139e-14 1.52567051252229e-14 3.70129692994402e-15 39810720 1.97107173577912e-14 1.52567063052994e-14 3.70129694501774e-15 50118720 1.97107189690986e-14 1.52567087552263e-14 3.70129798127932e-15 63095730 1.97107213002514e-14 1.52567096895757e-14 3.70129651794016e-15 79432820 1.97107190597621e-14 1.52567088051755e-14 3.70129801572589e-15 100000000 1.97107189976532e-14 1.52567074363481e-14 3.70129780724853e-15 1000 1.94987246134548e-14 1.51033250430422e-14 3.63970166117311e-15 1258.925 1.94987292477438e-14 1.51033259108296e-14 3.63970227924687e-15 1584.893 1.9498730689738e-14 1.51033275362627e-14 3.63970153810238e-15 1995.262 1.94987303411477e-14 1.51033283883365e-14 3.63970189592254e-15 2511.886 1.94987276172225e-14 1.51033300724184e-14 3.63970229584999e-15 3162.278 1.94987224432694e-14 1.51033218348965e-14 3.63970102703718e-15 3981.072 1.949872249002e-14 1.51033230532104e-14 3.63970097826083e-15 5011.872 1.94987250137276e-14 1.51033260889036e-14 3.639701666945e-15 6309.573 1.94987256860122e-14 1.51033253990772e-14 3.6397011523685e-15 7943.282 1.94987257099239e-14 1.51033259943478e-14 3.63970204997104e-15 10000 1.94987246134548e-14 1.51033250430422e-14 3.63970166117311e-15 12589.25 1.94987292477438e-14 1.51033259108296e-14 3.63970227924687e-15 15848.93 1.9498730689738e-14 1.51033275362627e-14 3.63970153810238e-15 19952.62 1.94987303411477e-14 1.51033283883365e-14 3.63970189592254e-15 25118.86 1.94987276172225e-14 1.51033300724184e-14 3.63970229584999e-15 31622.78 1.94987224432694e-14 1.51033218348965e-14 3.63970102703718e-15 39810.72 1.949872249002e-14 1.51033230532104e-14 3.63970097826083e-15 50118.72 1.94987250137276e-14 1.51033260889036e-14 3.639701666945e-15 63095.73 1.94987256860122e-14 1.51033253990772e-14 3.6397011523685e-15 79432.82 1.94987257099239e-14 1.51033259943478e-14 3.63970204997104e-15 100000 1.94987246134548e-14 1.51033250430422e-14 3.63970166117311e-15 125892.5 1.94987292477438e-14 1.51033259108296e-14 3.63970227924687e-15 158489.3 1.9498730689738e-14 1.51033275362627e-14 3.63970153810238e-15 199526.2 1.94987303411477e-14 1.51033283883365e-14 3.63970189592254e-15 251188.6 1.94987276172225e-14 1.51033300724183e-14 3.63970229584999e-15 316227.8 1.94987224432694e-14 1.51033218348965e-14 3.63970102703718e-15 398107.2 1.949872249002e-14 1.51033230532104e-14 3.63970097826083e-15 501187.2 1.94987250137276e-14 1.51033260889036e-14 3.639701666945e-15 630957.3 1.94987256860122e-14 1.51033253990772e-14 3.6397011523685e-15 794328.2 1.94987257099239e-14 1.51033259943478e-14 3.63970204997104e-15 1000000 1.94987246134548e-14 1.51033250430422e-14 3.63970166117311e-15 1258925 1.94987292477438e-14 1.51033259108296e-14 3.63970227924687e-15 1584893 1.9498730689738e-14 1.51033275362627e-14 3.63970153810238e-15 1995262 1.94987303411477e-14 1.51033283883365e-14 3.63970189592254e-15 2511886 1.94987276172225e-14 1.51033300724183e-14 3.63970229584999e-15 3162278 1.94987224432694e-14 1.51033218348965e-14 3.63970102703718e-15 3981072 1.949872249002e-14 1.51033230532104e-14 3.63970097826083e-15 5011872 1.94987250137276e-14 1.51033260889036e-14 3.639701666945e-15 6309573 1.94987256860122e-14 1.51033253990772e-14 3.6397011523685e-15 7943282 1.94987257099239e-14 1.51033259943478e-14 3.63970204997104e-15 10000000 1.94987246134548e-14 1.51033250430422e-14 3.63970166117311e-15 12589250 1.94987292477438e-14 1.51033259108296e-14 3.63970227924687e-15 15848930 1.9498730689738e-14 1.51033275362627e-14 3.63970153810238e-15 19952620 1.94987303411477e-14 1.51033283883365e-14 3.63970189592254e-15 25118860 1.94987276172225e-14 1.51033300724184e-14 3.63970229584999e-15 31622780 1.94987224432694e-14 1.51033218348965e-14 3.63970102703718e-15 39810720 1.949872249002e-14 1.51033230532104e-14 3.63970097826083e-15 50118720 1.94987250137276e-14 1.51033260889036e-14 3.639701666945e-15 63095730 1.94987256860122e-14 1.51033253990772e-14 3.6397011523685e-15 79432820 1.94987257099239e-14 1.51033259943478e-14 3.63970204997104e-15 100000000 1.94987246134548e-14 1.51033250430422e-14 3.63970166117311e-15 1000 1.92145375470699e-14 1.4891139672912e-14 3.56442137309064e-15 1258.925 1.92145467932082e-14 1.48911403902581e-14 3.56442344816996e-15 1584.893 1.92145421111083e-14 1.48911400922187e-14 3.56442269496319e-15 1995.262 1.92145384749929e-14 1.48911416859792e-14 3.56442231983531e-15 2511.886 1.92145420487867e-14 1.48911413071159e-14 3.56442277303848e-15 3162.278 1.92145385776611e-14 1.48911389323872e-14 3.56442161941386e-15 3981.072 1.92145355101154e-14 1.48911402892563e-14 3.56442177182073e-15 5011.872 1.92145410798156e-14 1.48911416000037e-14 3.56442186967691e-15 6309.573 1.92145404748488e-14 1.48911406021354e-14 3.56442157129963e-15 7943.282 1.92145391312094e-14 1.4891140294867e-14 3.56442120860284e-15 10000 1.92145375470699e-14 1.4891139672912e-14 3.56442137309064e-15 12589.25 1.92145467932082e-14 1.48911403902581e-14 3.56442344816996e-15 15848.93 1.92145421111083e-14 1.48911400922187e-14 3.56442269496319e-15 19952.62 1.92145384749929e-14 1.48911416859792e-14 3.5644223198353e-15 25118.86 1.92145420487867e-14 1.48911413071159e-14 3.56442277303848e-15 31622.78 1.92145385776611e-14 1.48911389323872e-14 3.56442161941386e-15 39810.72 1.92145355101154e-14 1.48911402892563e-14 3.56442177182073e-15 50118.72 1.92145410798156e-14 1.48911416000037e-14 3.56442186967691e-15 63095.73 1.92145404748488e-14 1.48911406021354e-14 3.56442157129963e-15 79432.82 1.92145391312094e-14 1.4891140294867e-14 3.56442120860284e-15 100000 1.92145375470699e-14 1.4891139672912e-14 3.56442137309064e-15 125892.5 1.92145467932082e-14 1.48911403902581e-14 3.56442344816996e-15 158489.3 1.92145421111083e-14 1.48911400922187e-14 3.56442269496319e-15 199526.2 1.92145384749929e-14 1.48911416859792e-14 3.5644223198353e-15 251188.6 1.92145420487867e-14 1.48911413071159e-14 3.56442277303848e-15 316227.8 1.92145385776611e-14 1.48911389323872e-14 3.56442161941386e-15 398107.2 1.92145355101154e-14 1.48911402892563e-14 3.56442177182073e-15 501187.2 1.92145410798156e-14 1.48911416000037e-14 3.56442186967691e-15 630957.3 1.92145404748488e-14 1.48911406021354e-14 3.56442157129963e-15 794328.2 1.92145391312094e-14 1.4891140294867e-14 3.56442120860284e-15 1000000 1.92145375470699e-14 1.4891139672912e-14 3.56442137309064e-15 1258925 1.92145467932082e-14 1.48911403902581e-14 3.56442344816996e-15 1584893 1.92145421111083e-14 1.48911400922187e-14 3.56442269496319e-15 1995262 1.92145384749929e-14 1.48911416859792e-14 3.56442231983531e-15 2511886 1.92145420487867e-14 1.48911413071159e-14 3.56442277303848e-15 3162278 1.92145385776611e-14 1.48911389323872e-14 3.56442161941386e-15 3981072 1.92145355101154e-14 1.48911402892563e-14 3.56442177182073e-15 5011872 1.92145410798156e-14 1.48911416000037e-14 3.56442186967691e-15 6309573 1.92145404748488e-14 1.48911406021354e-14 3.56442157129963e-15 7943282 1.92145391312094e-14 1.4891140294867e-14 3.56442120860284e-15 10000000 1.92145375470699e-14 1.4891139672912e-14 3.56442137309064e-15 12589250 1.92145467932082e-14 1.48911403902581e-14 3.56442344816996e-15 15848930 1.92145421111083e-14 1.48911400922187e-14 3.56442269496319e-15 19952620 1.92145384749929e-14 1.48911416859792e-14 3.5644223198353e-15 25118860 1.92145420487867e-14 1.48911413071159e-14 3.56442277303848e-15 31622780 1.92145385776611e-14 1.48911389323872e-14 3.56442161941386e-15 39810720 1.92145355101154e-14 1.48911402892563e-14 3.56442177182073e-15 50118720 1.92145410798156e-14 1.48911416000037e-14 3.56442186967691e-15 63095730 1.92145404748488e-14 1.48911406021354e-14 3.56442157129963e-15 79432820 1.92145391312094e-14 1.4891140294867e-14 3.56442120860284e-15 100000000 1.92145375470699e-14 1.4891139672912e-14 3.56442137309064e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/56_acFreq_CONQS=0.standard0000644000175000017500000002533013546075722024725 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258.925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584.893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995.262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511.886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162.278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981.072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011.872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309.573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943.282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589.25 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848.93 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952.62 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118.86 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622.78 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810.72 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118.72 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095.73 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432.82 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 125892.5 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 158489.3 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 199526.2 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 251188.6 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 316227.8 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 398107.2 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 501187.2 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 630957.3 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 794328.2 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 1000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589250 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848930 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952620 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118860 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622780 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810720 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118720 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095730 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432820 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258.925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584.893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 1995.262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511.886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162.278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981.072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011.872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309.573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943.282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589.25 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848.93 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 19952.62 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118.86 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622.78 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810.72 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118.72 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095.73 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432.82 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 125892.5 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 158489.3 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 199526.2 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 251188.6 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 316227.8 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 398107.2 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 501187.2 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 630957.3 1.95109670680967e-14 1.51047556203098e-14 3.63962547928741e-15 794328.2 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 1000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 1995262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589250 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848930 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 19952620 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118860 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622780 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810720 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118720 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095730 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432820 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258.925 1.92253810991621e-14 1.48903692202894e-14 3.56434127432084e-15 1584.893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995.262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511.886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162.278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981.072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011.872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309.573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943.282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 12589.25 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848.93 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952.62 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118.86 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622.78 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810.72 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118.72 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095.73 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432.82 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 125892.5 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 158489.3 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 199526.2 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 251188.6 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 316227.8 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 398107.2 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 501187.2 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 630957.3 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 794328.2 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 1000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258925 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 1584893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000000 1.92253759986944e-14 1.4890367771438e-14 3.56434020406966e-15 12589250 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848930 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952620 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118860 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622780 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810720 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118720 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095730 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432820 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/46_acFreq_COISUB=0.standard0000644000175000017500000002533013546075722025025 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258.925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584.893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995.262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511.886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162.278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981.072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011.872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309.573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943.282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589.25 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848.93 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952.62 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118.86 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622.78 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810.72 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118.72 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095.73 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432.82 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 125892.5 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 158489.3 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 199526.2 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 251188.6 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 316227.8 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 398107.2 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 501187.2 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 630957.3 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 794328.2 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 1000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589250 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848930 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952620 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118860 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622780 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810720 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118720 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095730 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432820 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258.925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584.893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 1995.262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511.886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162.278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981.072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011.872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309.573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943.282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589.25 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848.93 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 19952.62 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118.86 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622.78 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810.72 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118.72 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095.73 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432.82 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 125892.5 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 158489.3 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 199526.2 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 251188.6 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 316227.8 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 398107.2 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 501187.2 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 630957.3 1.95109670680967e-14 1.51047556203098e-14 3.63962547928741e-15 794328.2 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 1000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 1995262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589250 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848930 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 19952620 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118860 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622780 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810720 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118720 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095730 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432820 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258.925 1.92253810991621e-14 1.48903692202894e-14 3.56434127432084e-15 1584.893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995.262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511.886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162.278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981.072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011.872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309.573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943.282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 12589.25 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848.93 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952.62 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118.86 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622.78 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810.72 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118.72 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095.73 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432.82 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 125892.5 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 158489.3 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 199526.2 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 251188.6 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 316227.8 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 398107.2 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 501187.2 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 630957.3 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 794328.2 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 1000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258925 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 1584893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000000 1.92253759986944e-14 1.4890367771438e-14 3.56434020406966e-15 12589250 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848930 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952620 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118860 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622780 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810720 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118720 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095730 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432820 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/20_dcSweep_CORG=1.standard0000644000175000017500000002211413546075722024752 0ustar carstencarstenV(d) I(d) 2.000000e-01 1.031340e-06 3.000000e-01 1.187668e-06 4.000000e-01 1.363411e-06 5.000000e-01 1.553811e-06 6.000000e-01 1.754026e-06 7.000000e-01 1.961205e-06 8.000000e-01 2.173905e-06 9.000000e-01 2.391410e-06 1.000000e+00 2.613350e-06 1.100000e+00 2.839516e-06 1.200000e+00 3.069773e-06 1.300000e+00 3.304026e-06 1.400000e+00 3.542204e-06 1.500000e+00 3.784246e-06 1.600000e+00 4.030100e-06 1.700000e+00 4.279721e-06 1.800000e+00 4.533070e-06 2.000000e-01 3.625488e-04 3.000000e-01 3.836434e-04 4.000000e-01 4.033947e-04 5.000000e-01 4.229012e-04 6.000000e-01 4.423753e-04 7.000000e-01 4.618402e-04 8.000000e-01 4.813047e-04 9.000000e-01 5.007840e-04 1.000000e+00 5.202960e-04 1.100000e+00 5.398574e-04 1.200000e+00 5.594823e-04 1.300000e+00 5.791821e-04 1.400000e+00 5.989658e-04 1.500000e+00 6.188407e-04 1.600000e+00 6.388122e-04 1.700000e+00 6.588847e-04 1.800000e+00 6.790616e-04 2.000000e-01 1.846855e-03 3.000000e-01 1.974260e-03 4.000000e-01 2.031600e-03 5.000000e-01 2.082672e-03 6.000000e-01 2.130364e-03 7.000000e-01 2.175738e-03 8.000000e-01 2.219464e-03 9.000000e-01 2.261982e-03 1.000000e+00 2.303587e-03 1.100000e+00 2.344487e-03 1.200000e+00 2.384830e-03 1.300000e+00 2.424728e-03 1.400000e+00 2.464261e-03 1.500000e+00 2.503492e-03 1.600000e+00 2.542472e-03 1.700000e+00 2.581239e-03 1.800000e+00 2.619826e-03 2.000000e-01 3.343576e-03 3.000000e-01 3.817799e-03 4.000000e-01 4.017737e-03 5.000000e-01 4.104539e-03 6.000000e-01 4.168574e-03 7.000000e-01 4.228356e-03 8.000000e-01 4.284866e-03 9.000000e-01 4.338706e-03 1.000000e+00 4.390424e-03 1.100000e+00 4.440474e-03 1.200000e+00 4.489207e-03 1.300000e+00 4.536889e-03 1.400000e+00 4.583720e-03 1.500000e+00 4.629852e-03 1.600000e+00 4.675400e-03 1.700000e+00 4.720456e-03 1.800000e+00 4.765089e-03 2.000000e-01 4.575745e-03 3.000000e-01 5.436588e-03 4.000000e-01 5.883336e-03 5.000000e-01 6.122649e-03 6.000000e-01 6.251933e-03 7.000000e-01 6.328676e-03 8.000000e-01 6.392836e-03 9.000000e-01 6.453950e-03 1.000000e+00 6.512526e-03 1.100000e+00 6.568841e-03 1.200000e+00 6.623216e-03 1.300000e+00 6.675967e-03 1.400000e+00 6.727368e-03 1.500000e+00 6.777651e-03 1.600000e+00 6.827000e-03 1.700000e+00 6.875564e-03 1.800000e+00 6.923462e-03 2.000000e-01 5.870243e-03 3.000000e-01 7.364527e-03 4.000000e-01 8.250873e-03 5.000000e-01 8.791206e-03 6.000000e-01 9.132925e-03 7.000000e-01 9.355002e-03 8.000000e-01 9.502595e-03 9.000000e-01 9.604011e-03 1.000000e+00 9.676653e-03 1.100000e+00 9.739827e-03 1.200000e+00 9.800793e-03 1.300000e+00 9.859958e-03 1.400000e+00 9.917427e-03 1.500000e+00 9.973346e-03 1.600000e+00 1.002789e-02 1.700000e+00 1.008122e-02 1.800000e+00 1.013349e-02 2.000000e-01 6.544617e-03 3.000000e-01 8.629425e-03 4.000000e-01 1.002415e-02 5.000000e-01 1.095009e-02 6.000000e-01 1.157533e-02 7.000000e-01 1.200797e-02 8.000000e-01 1.231437e-02 9.000000e-01 1.253558e-02 1.000000e+00 1.269838e-02 1.100000e+00 1.282132e-02 1.200000e+00 1.291696e-02 1.300000e+00 1.299134e-02 1.400000e+00 1.305478e-02 1.500000e+00 1.311590e-02 1.600000e+00 1.317555e-02 1.700000e+00 1.323383e-02 1.800000e+00 1.329082e-02 2.000000e-01 6.168441e-06 3.000000e-01 6.992527e-06 4.000000e-01 7.898833e-06 5.000000e-01 8.873147e-06 6.000000e-01 9.893832e-06 7.000000e-01 1.094768e-05 8.000000e-01 1.202799e-05 9.000000e-01 1.313151e-05 1.000000e+00 1.425659e-05 1.100000e+00 1.540231e-05 1.200000e+00 1.656813e-05 1.300000e+00 1.775364e-05 1.400000e+00 1.895856e-05 1.500000e+00 2.018263e-05 1.600000e+00 2.142567e-05 1.700000e+00 2.268746e-05 1.800000e+00 2.396787e-05 2.000000e-01 3.314500e-04 3.000000e-01 3.516443e-04 4.000000e-01 3.692608e-04 5.000000e-01 3.862621e-04 6.000000e-01 4.030308e-04 7.000000e-01 4.196770e-04 8.000000e-01 4.362533e-04 9.000000e-01 4.527971e-04 1.000000e+00 4.693380e-04 1.100000e+00 4.858992e-04 1.200000e+00 5.024990e-04 1.300000e+00 5.191518e-04 1.400000e+00 5.358687e-04 1.500000e+00 5.526585e-04 1.600000e+00 5.695281e-04 1.700000e+00 5.864832e-04 1.800000e+00 6.035282e-04 2.000000e-01 1.414259e-03 3.000000e-01 1.567979e-03 4.000000e-01 1.628986e-03 5.000000e-01 1.678046e-03 6.000000e-01 1.722925e-03 7.000000e-01 1.764987e-03 8.000000e-01 1.805080e-03 9.000000e-01 1.843763e-03 1.000000e+00 1.881413e-03 1.100000e+00 1.918285e-03 1.200000e+00 1.954559e-03 1.300000e+00 1.990363e-03 1.400000e+00 2.025794e-03 1.500000e+00 2.060923e-03 1.600000e+00 2.095806e-03 1.700000e+00 2.130488e-03 1.800000e+00 2.165002e-03 2.000000e-01 2.542714e-03 3.000000e-01 3.063220e-03 4.000000e-01 3.310856e-03 5.000000e-01 3.420396e-03 6.000000e-01 3.491904e-03 7.000000e-01 3.556333e-03 8.000000e-01 3.616445e-03 9.000000e-01 3.673005e-03 1.000000e+00 3.726718e-03 1.100000e+00 3.778185e-03 1.200000e+00 3.827884e-03 1.300000e+00 3.876176e-03 1.400000e+00 3.923336e-03 1.500000e+00 3.969571e-03 1.600000e+00 4.015041e-03 1.700000e+00 4.059867e-03 1.800000e+00 4.104148e-03 2.000000e-01 3.486631e-03 3.000000e-01 4.388014e-03 4.000000e-01 4.924867e-03 5.000000e-01 5.232529e-03 6.000000e-01 5.399700e-03 7.000000e-01 5.495663e-03 8.000000e-01 5.570693e-03 9.000000e-01 5.640525e-03 1.000000e+00 5.706719e-03 1.100000e+00 5.769675e-03 1.200000e+00 5.829825e-03 1.300000e+00 5.887607e-03 1.400000e+00 5.943411e-03 1.500000e+00 5.997567e-03 1.600000e+00 6.050344e-03 1.700000e+00 6.101961e-03 1.800000e+00 6.152594e-03 2.000000e-01 4.523458e-03 3.000000e-01 5.961592e-03 4.000000e-01 6.939779e-03 5.000000e-01 7.596286e-03 6.000000e-01 8.035751e-03 7.000000e-01 8.327590e-03 8.000000e-01 8.519006e-03 9.000000e-01 8.645414e-03 1.000000e+00 8.735120e-03 1.100000e+00 8.810856e-03 1.200000e+00 8.882452e-03 1.300000e+00 8.951286e-03 1.400000e+00 9.017592e-03 1.500000e+00 9.081583e-03 1.600000e+00 9.143495e-03 1.700000e+00 9.203569e-03 1.800000e+00 9.262028e-03 2.000000e-01 5.146662e-03 3.000000e-01 7.031863e-03 4.000000e-01 8.439639e-03 5.000000e-01 9.465363e-03 6.000000e-01 1.020835e-02 7.000000e-01 1.074777e-02 8.000000e-01 1.114061e-02 9.000000e-01 1.142684e-02 1.000000e+00 1.163539e-02 1.100000e+00 1.178842e-02 1.200000e+00 1.190317e-02 1.300000e+00 1.199275e-02 1.400000e+00 1.206906e-02 1.500000e+00 1.214087e-02 1.600000e+00 1.221034e-02 1.700000e+00 1.227777e-02 1.800000e+00 1.234331e-02 2.000000e-01 2.757247e-05 3.000000e-01 3.088943e-05 4.000000e-01 3.432614e-05 5.000000e-01 3.796733e-05 6.000000e-01 4.175784e-05 7.000000e-01 4.565691e-05 8.000000e-01 4.964358e-05 9.000000e-01 5.370790e-05 1.000000e+00 5.784506e-05 1.100000e+00 6.205260e-05 1.200000e+00 6.632908e-05 1.300000e+00 7.067356e-05 1.400000e+00 7.508532e-05 1.500000e+00 7.956378e-05 1.600000e+00 8.410843e-05 1.700000e+00 8.871881e-05 1.800000e+00 9.339451e-05 2.000000e-01 3.233979e-04 3.000000e-01 3.491751e-04 4.000000e-01 3.669805e-04 5.000000e-01 3.832630e-04 6.000000e-01 3.989944e-04 7.000000e-01 4.144367e-04 8.000000e-01 4.297076e-04 9.000000e-01 4.448775e-04 1.000000e+00 4.599945e-04 1.100000e+00 4.750927e-04 1.200000e+00 4.901974e-04 1.300000e+00 5.053275e-04 1.400000e+00 5.204977e-04 1.500000e+00 5.357192e-04 1.600000e+00 5.510012e-04 1.700000e+00 5.663506e-04 1.800000e+00 5.817735e-04 2.000000e-01 1.006788e-03 3.000000e-01 1.176557e-03 4.000000e-01 1.246390e-03 5.000000e-01 1.291247e-03 6.000000e-01 1.330236e-03 7.000000e-01 1.366185e-03 8.000000e-01 1.400047e-03 9.000000e-01 1.432420e-03 1.000000e+00 1.463716e-03 1.100000e+00 1.494215e-03 1.200000e+00 1.524116e-03 1.300000e+00 1.553558e-03 1.400000e+00 1.582644e-03 1.500000e+00 1.611452e-03 1.600000e+00 1.640038e-03 1.700000e+00 1.668448e-03 1.800000e+00 1.696719e-03 2.000000e-01 1.720602e-03 3.000000e-01 2.182212e-03 4.000000e-01 2.443001e-03 5.000000e-01 2.573625e-03 6.000000e-01 2.648907e-03 7.000000e-01 2.710122e-03 8.000000e-01 2.766323e-03 9.000000e-01 2.818908e-03 1.000000e+00 2.868539e-03 1.100000e+00 2.915786e-03 1.200000e+00 2.961129e-03 1.300000e+00 3.004954e-03 1.400000e+00 3.047557e-03 1.500000e+00 3.089169e-03 1.600000e+00 3.129968e-03 1.700000e+00 3.170092e-03 1.800000e+00 3.209650e-03 2.000000e-01 2.344551e-03 3.000000e-01 3.101925e-03 4.000000e-01 3.621184e-03 5.000000e-01 3.954178e-03 6.000000e-01 4.151658e-03 7.000000e-01 4.267092e-03 8.000000e-01 4.348380e-03 9.000000e-01 4.419815e-03 1.000000e+00 4.486875e-03 1.100000e+00 4.550435e-03 1.200000e+00 4.610906e-03 1.300000e+00 4.668696e-03 1.400000e+00 4.724200e-03 1.500000e+00 4.777773e-03 1.600000e+00 4.829716e-03 1.700000e+00 4.880282e-03 1.800000e+00 4.929678e-03 2.000000e-01 3.084402e-03 3.000000e-01 4.235437e-03 4.000000e-01 5.122679e-03 5.000000e-01 5.785658e-03 6.000000e-01 6.267956e-03 7.000000e-01 6.608144e-03 8.000000e-01 6.840111e-03 9.000000e-01 6.995611e-03 1.000000e+00 7.104437e-03 1.100000e+00 7.191523e-03 1.200000e+00 7.270752e-03 1.300000e+00 7.346161e-03 1.400000e+00 7.418531e-03 1.500000e+00 7.488125e-03 1.600000e+00 7.555176e-03 1.700000e+00 7.619929e-03 1.800000e+00 7.682628e-03 2.000000e-01 3.603565e-03 3.000000e-01 5.071371e-03 4.000000e-01 6.281326e-03 5.000000e-01 7.251718e-03 6.000000e-01 8.015715e-03 7.000000e-01 8.608979e-03 8.000000e-01 9.063670e-03 9.000000e-01 9.407070e-03 1.000000e+00 9.662614e-03 1.100000e+00 9.851179e-03 1.200000e+00 9.991500e-03 1.300000e+00 1.010011e-02 1.400000e+00 1.019103e-02 1.500000e+00 1.027396e-02 1.600000e+00 1.035306e-02 1.700000e+00 1.042945e-02 1.800000e+00 1.050344e-02 tmpk8ny_4pz/tests/hisim/nmos/reference/67_acFreq_COIGN=1.standard0000644000175000017500000002533013546075722024704 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258.925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584.893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995.262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511.886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162.278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981.072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011.872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309.573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943.282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589.25 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848.93 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952.62 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118.86 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622.78 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810.72 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118.72 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095.73 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432.82 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 125892.5 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 158489.3 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 199526.2 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 251188.6 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 316227.8 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 398107.2 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 501187.2 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 630957.3 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 794328.2 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 1000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589250 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848930 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952620 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118860 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622780 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810720 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118720 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095730 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432820 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258.925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584.893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 1995.262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511.886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162.278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981.072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011.872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309.573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943.282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589.25 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848.93 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 19952.62 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118.86 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622.78 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810.72 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118.72 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095.73 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432.82 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 125892.5 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 158489.3 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 199526.2 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 251188.6 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 316227.8 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 398107.2 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 501187.2 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 630957.3 1.95109670680967e-14 1.51047556203098e-14 3.63962547928741e-15 794328.2 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 1000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 1995262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589250 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848930 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 19952620 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118860 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622780 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810720 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118720 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095730 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432820 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258.925 1.92253810991621e-14 1.48903692202894e-14 3.56434127432084e-15 1584.893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995.262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511.886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162.278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981.072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011.872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309.573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943.282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 12589.25 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848.93 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952.62 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118.86 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622.78 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810.72 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118.72 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095.73 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432.82 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 125892.5 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 158489.3 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 199526.2 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 251188.6 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 316227.8 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 398107.2 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 501187.2 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 630957.3 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 794328.2 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 1000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258925 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 1584893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000000 1.92253759986944e-14 1.4890367771438e-14 3.56434020406966e-15 12589250 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848930 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952620 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118860 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622780 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810720 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118720 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095730 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432820 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/57_acFreq_CONQS=1.standard0000644000175000017500000002533013546075722024727 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258.925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584.893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995.262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511.886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162.278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981.072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011.872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309.573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943.282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589.25 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848.93 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952.62 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118.86 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622.78 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810.72 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118.72 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095.73 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432.82 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 125892.5 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 158489.3 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 199526.2 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 251188.6 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 316227.8 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 398107.2 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 501187.2 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 630957.3 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 794328.2 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 1000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589250 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848930 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952620 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118860 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622780 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810720 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118720 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095730 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432820 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258.925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584.893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 1995.262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511.886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162.278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981.072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011.872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309.573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943.282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589.25 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848.93 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 19952.62 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118.86 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622.78 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810.72 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118.72 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095.73 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432.82 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 125892.5 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 158489.3 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 199526.2 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 251188.6 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 316227.8 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 398107.2 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 501187.2 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 630957.3 1.95109670680967e-14 1.51047556203098e-14 3.63962547928741e-15 794328.2 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 1000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 1995262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589250 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848930 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 19952620 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118860 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622780 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810720 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118720 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095730 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432820 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258.925 1.92253810991621e-14 1.48903692202894e-14 3.56434127432084e-15 1584.893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995.262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511.886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162.278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981.072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011.872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309.573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943.282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 12589.25 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848.93 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952.62 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118.86 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622.78 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810.72 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118.72 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095.73 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432.82 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 125892.5 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 158489.3 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 199526.2 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 251188.6 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 316227.8 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 398107.2 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 501187.2 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 630957.3 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 794328.2 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 1000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258925 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 1584893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000000 1.92253759986944e-14 1.4890367771438e-14 3.56434020406966e-15 12589250 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848930 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952620 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118860 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622780 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810720 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118720 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095730 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432820 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/9_dcSweep_COIIGS=1.standard0000644000175000017500000002221113546075722025122 0ustar carstencarstenV(d) I(g) 2.000000e-01 1.294879e-10 3.000000e-01 1.062457e-10 4.000000e-01 9.661922e-11 5.000000e-01 8.477424e-11 6.000000e-01 4.447812e-11 7.000000e-01 -3.588654e-11 8.000000e-01 -1.711020e-10 9.000000e-01 -3.798938e-10 1.000000e+00 -6.858542e-10 1.100000e+00 -1.118549e-09 1.200000e+00 -1.714853e-09 1.300000e+00 -2.520551e-09 1.400000e+00 -3.592273e-09 1.500000e+00 -4.999809e-09 1.600000e+00 -6.828894e-09 1.700000e+00 -9.184537e-09 1.800000e+00 -1.219501e-08 2.000000e-01 1.048413e-09 3.000000e-01 8.902004e-10 4.000000e-01 7.740073e-10 5.000000e-01 6.878050e-10 6.000000e-01 6.277899e-10 7.000000e-01 5.737892e-10 8.000000e-01 4.972432e-10 9.000000e-01 3.851718e-10 1.000000e+00 2.219098e-10 1.100000e+00 -1.189086e-11 1.200000e+00 -3.402899e-10 1.300000e+00 -7.932195e-10 1.400000e+00 -1.407848e-09 1.500000e+00 -2.230204e-09 1.600000e+00 -3.317118e-09 1.700000e+00 -4.738551e-09 1.800000e+00 -6.580382e-09 2.000000e-01 5.424797e-09 3.000000e-01 4.749972e-09 4.000000e-01 4.257447e-09 5.000000e-01 3.857698e-09 6.000000e-01 3.521469e-09 7.000000e-01 3.235692e-09 8.000000e-01 2.995727e-09 9.000000e-01 2.779745e-09 1.000000e+00 2.557175e-09 1.100000e+00 2.313066e-09 1.200000e+00 2.029991e-09 1.300000e+00 1.687082e-09 1.400000e+00 1.258983e-09 1.500000e+00 7.146564e-10 1.600000e+00 1.599328e-11 1.700000e+00 -8.838420e-10 1.800000e+00 -2.042375e-09 2.000000e-01 1.783805e-08 3.000000e-01 1.592959e-08 4.000000e-01 1.440888e-08 5.000000e-01 1.321847e-08 6.000000e-01 1.221723e-08 7.000000e-01 1.132808e-08 8.000000e-01 1.053320e-08 9.000000e-01 9.823775e-09 1.000000e+00 9.194892e-09 1.100000e+00 8.622393e-09 1.200000e+00 8.072742e-09 1.300000e+00 7.528010e-09 1.400000e+00 6.968008e-09 1.500000e+00 6.369389e-09 1.600000e+00 5.704608e-09 1.700000e+00 4.940703e-09 1.800000e+00 4.037876e-09 2.000000e-01 4.421270e-08 3.000000e-01 4.089926e-08 4.000000e-01 3.770064e-08 5.000000e-01 3.481002e-08 6.000000e-01 3.227784e-08 7.000000e-01 3.011882e-08 8.000000e-01 2.820524e-08 9.000000e-01 2.645761e-08 1.000000e+00 2.486374e-08 1.100000e+00 2.341389e-08 1.200000e+00 2.209940e-08 1.300000e+00 2.089157e-08 1.400000e+00 1.975234e-08 1.500000e+00 1.865957e-08 1.600000e+00 1.758922e-08 1.700000e+00 1.651450e-08 1.800000e+00 1.540476e-08 2.000000e-01 1.264813e-07 3.000000e-01 1.207976e-07 4.000000e-01 1.146565e-07 5.000000e-01 1.082692e-07 6.000000e-01 1.019045e-07 7.000000e-01 9.580990e-08 8.000000e-01 9.010313e-08 9.000000e-01 8.482697e-08 1.000000e+00 8.016744e-08 1.100000e+00 7.594916e-08 1.200000e+00 7.204134e-08 1.300000e+00 6.842883e-08 1.400000e+00 6.509389e-08 1.500000e+00 6.201739e-08 1.600000e+00 5.916014e-08 1.700000e+00 5.647436e-08 1.800000e+00 5.392916e-08 2.000000e-01 2.877325e-07 3.000000e-01 2.791106e-07 4.000000e-01 2.693053e-07 5.000000e-01 2.585567e-07 6.000000e-01 2.471882e-07 7.000000e-01 2.355453e-07 8.000000e-01 2.239715e-07 9.000000e-01 2.127479e-07 1.000000e+00 2.020315e-07 1.100000e+00 1.918645e-07 1.200000e+00 1.823129e-07 1.300000e+00 1.736706e-07 1.400000e+00 1.658331e-07 1.500000e+00 1.585247e-07 1.600000e+00 1.517087e-07 1.700000e+00 1.453554e-07 1.800000e+00 1.394320e-07 2.000000e-01 1.539218e-10 3.000000e-01 1.250793e-10 4.000000e-01 1.121186e-10 5.000000e-01 9.809885e-11 6.000000e-01 5.622763e-11 7.000000e-01 -2.537602e-11 8.000000e-01 -1.616190e-10 9.000000e-01 -3.712902e-10 1.000000e+00 -6.780173e-10 1.100000e+00 -1.111389e-09 1.200000e+00 -1.708294e-09 1.300000e+00 -2.514531e-09 1.400000e+00 -3.586737e-09 1.500000e+00 -4.994710e-09 1.600000e+00 -6.824191e-09 1.700000e+00 -9.180193e-09 1.800000e+00 -1.219099e-08 2.000000e-01 1.438804e-09 3.000000e-01 1.225671e-09 4.000000e-01 1.069733e-09 5.000000e-01 9.531075e-10 6.000000e-01 8.684829e-10 7.000000e-01 7.937623e-10 8.000000e-01 6.993198e-10 9.000000e-01 5.715384e-10 1.000000e+00 3.943358e-10 1.100000e+00 1.480668e-10 1.200000e+00 -1.915520e-10 1.300000e+00 -6.546287e-10 1.400000e+00 -1.278474e-09 1.500000e+00 -2.109232e-09 1.600000e+00 -3.203833e-09 1.700000e+00 -4.632319e-09 1.800000e+00 -6.480640e-09 2.000000e-01 6.980681e-09 3.000000e-01 6.122520e-09 4.000000e-01 5.498142e-09 5.000000e-01 4.991555e-09 6.000000e-01 4.564365e-09 7.000000e-01 4.199405e-09 8.000000e-01 3.889614e-09 9.000000e-01 3.611516e-09 1.000000e+00 3.333308e-09 1.100000e+00 3.039080e-09 1.200000e+00 2.710635e-09 1.300000e+00 2.326474e-09 1.400000e+00 1.860719e-09 1.500000e+00 1.281896e-09 1.600000e+00 5.515270e-10 1.700000e+00 -3.775363e-10 1.800000e+00 -1.563088e-09 2.000000e-01 2.195501e-08 3.000000e-01 1.963353e-08 4.000000e-01 1.779300e-08 5.000000e-01 1.633409e-08 6.000000e-01 1.510378e-08 7.000000e-01 1.401539e-08 8.000000e-01 1.304270e-08 9.000000e-01 1.217348e-08 1.000000e+00 1.140030e-08 1.100000e+00 1.069697e-08 1.200000e+00 1.002825e-08 1.300000e+00 9.374764e-09 1.400000e+00 8.715093e-09 1.500000e+00 8.024842e-09 1.600000e+00 7.275563e-09 1.700000e+00 6.433523e-09 1.800000e+00 5.458253e-09 2.000000e-01 5.281593e-08 3.000000e-01 4.876487e-08 4.000000e-01 4.494204e-08 5.000000e-01 4.152781e-08 6.000000e-01 3.855669e-08 7.000000e-01 3.597213e-08 8.000000e-01 3.368784e-08 9.000000e-01 3.161180e-08 1.000000e+00 2.972109e-08 1.100000e+00 2.800151e-08 1.200000e+00 2.644089e-08 1.300000e+00 2.500760e-08 1.400000e+00 2.366115e-08 1.500000e+00 2.237732e-08 1.600000e+00 2.113031e-08 1.700000e+00 1.989182e-08 1.800000e+00 1.862987e-08 2.000000e-01 1.464652e-07 3.000000e-01 1.392890e-07 4.000000e-01 1.318547e-07 5.000000e-01 1.243101e-07 6.000000e-01 1.169164e-07 7.000000e-01 1.099206e-07 8.000000e-01 1.034314e-07 9.000000e-01 9.745124e-08 1.000000e+00 9.206512e-08 1.100000e+00 8.720563e-08 1.200000e+00 8.272828e-08 1.300000e+00 7.859660e-08 1.400000e+00 7.478539e-08 1.500000e+00 7.126999e-08 1.600000e+00 6.800670e-08 1.700000e+00 6.494404e-08 1.800000e+00 6.204800e-08 2.000000e-01 3.258580e-07 3.000000e-01 3.144272e-07 4.000000e-01 3.022583e-07 5.000000e-01 2.894017e-07 6.000000e-01 2.761295e-07 7.000000e-01 2.627696e-07 8.000000e-01 2.496570e-07 9.000000e-01 2.370639e-07 1.000000e+00 2.251332e-07 1.100000e+00 2.138882e-07 1.200000e+00 2.033512e-07 1.300000e+00 1.936806e-07 1.400000e+00 1.848861e-07 1.500000e+00 1.767391e-07 1.600000e+00 1.691561e-07 1.700000e+00 1.620944e-07 1.800000e+00 1.555136e-07 2.000000e-01 2.273831e-10 3.000000e-01 1.822931e-10 4.000000e-01 1.595193e-10 5.000000e-01 1.390317e-10 6.000000e-01 9.244179e-11 7.000000e-01 7.108425e-12 8.000000e-01 -1.322380e-10 9.000000e-01 -3.445713e-10 1.000000e+00 -6.536240e-10 1.100000e+00 -1.089051e-09 1.200000e+00 -1.687788e-09 1.300000e+00 -2.495666e-09 1.400000e+00 -3.569350e-09 1.500000e+00 -4.978660e-09 1.600000e+00 -6.809352e-09 1.700000e+00 -9.166458e-09 1.800000e+00 -1.217827e-08 2.000000e-01 1.991349e-09 3.000000e-01 1.703767e-09 4.000000e-01 1.493171e-09 5.000000e-01 1.334183e-09 6.000000e-01 1.215012e-09 7.000000e-01 1.111059e-09 8.000000e-01 9.912873e-10 9.000000e-01 8.412245e-10 1.000000e+00 6.442187e-10 1.100000e+00 3.802158e-10 1.200000e+00 2.462120e-11 1.300000e+00 -4.529187e-10 1.400000e+00 -1.089913e-09 1.500000e+00 -1.932672e-09 1.600000e+00 -3.038260e-09 1.700000e+00 -4.476837e-09 1.800000e+00 -6.334451e-09 2.000000e-01 8.724467e-09 3.000000e-01 7.648332e-09 4.000000e-01 6.881986e-09 5.000000e-01 6.260759e-09 6.000000e-01 5.735183e-09 7.000000e-01 5.283867e-09 8.000000e-01 4.897437e-09 9.000000e-01 4.550848e-09 1.000000e+00 4.211095e-09 1.100000e+00 3.861295e-09 1.200000e+00 3.482452e-09 1.300000e+00 3.052401e-09 1.400000e+00 2.544705e-09 1.500000e+00 1.927420e-09 1.600000e+00 1.161668e-09 1.700000e+00 1.999581e-10 1.800000e+00 -1.015796e-09 2.000000e-01 2.595206e-08 3.000000e-01 2.322923e-08 4.000000e-01 2.107633e-08 5.000000e-01 1.936809e-08 6.000000e-01 1.791820e-08 7.000000e-01 1.664013e-08 8.000000e-01 1.549844e-08 9.000000e-01 1.447698e-08 1.000000e+00 1.356592e-08 1.100000e+00 1.273724e-08 1.200000e+00 1.195413e-08 1.300000e+00 1.119594e-08 1.400000e+00 1.044012e-08 1.500000e+00 9.661324e-09 1.600000e+00 8.830277e-09 1.700000e+00 7.912528e-09 1.800000e+00 6.866988e-09 2.000000e-01 6.047354e-08 3.000000e-01 5.565539e-08 4.000000e-01 5.128203e-08 5.000000e-01 4.742404e-08 6.000000e-01 4.408651e-08 7.000000e-01 4.115018e-08 8.000000e-01 3.853565e-08 9.000000e-01 3.617275e-08 1.000000e+00 3.402466e-08 1.100000e+00 3.207158e-08 1.200000e+00 3.029788e-08 1.300000e+00 2.866925e-08 1.400000e+00 2.714302e-08 1.500000e+00 2.569319e-08 1.600000e+00 2.429245e-08 1.700000e+00 2.291121e-08 1.800000e+00 2.151642e-08 2.000000e-01 1.629783e-07 3.000000e-01 1.539468e-07 4.000000e-01 1.452223e-07 5.000000e-01 1.366905e-07 6.000000e-01 1.284998e-07 7.000000e-01 1.208398e-07 8.000000e-01 1.137929e-07 9.000000e-01 1.073188e-07 1.000000e+00 1.013964e-07 1.100000e+00 9.601697e-08 1.200000e+00 9.109154e-08 1.300000e+00 8.655806e-08 1.400000e+00 8.238042e-08 1.500000e+00 7.852837e-08 1.600000e+00 7.495415e-08 1.700000e+00 7.160309e-08 1.800000e+00 6.843857e-08 2.000000e-01 3.560584e-07 3.000000e-01 3.407164e-07 4.000000e-01 3.258449e-07 5.000000e-01 3.109562e-07 6.000000e-01 2.960811e-07 7.000000e-01 2.814190e-07 8.000000e-01 2.672265e-07 9.000000e-01 2.537247e-07 1.000000e+00 2.410252e-07 1.100000e+00 2.291253e-07 1.200000e+00 2.179916e-07 1.300000e+00 2.076558e-07 1.400000e+00 1.981598e-07 1.500000e+00 1.894090e-07 1.600000e+00 1.812918e-07 1.700000e+00 1.737428e-07 1.800000e+00 1.667125e-07 tmpk8ny_4pz/tests/hisim/nmos/reference/8_dcSweep_COIIGS=0.standard0000644000175000017500000002211413546075722025122 0ustar carstencarstenV(d) I(g) 2.000000e-01 0.000000e+00 3.000000e-01 0.000000e+00 4.000000e-01 0.000000e+00 5.000000e-01 0.000000e+00 6.000000e-01 0.000000e+00 7.000000e-01 0.000000e+00 8.000000e-01 0.000000e+00 9.000000e-01 0.000000e+00 1.000000e+00 0.000000e+00 1.100000e+00 0.000000e+00 1.200000e+00 0.000000e+00 1.300000e+00 0.000000e+00 1.400000e+00 0.000000e+00 1.500000e+00 0.000000e+00 1.600000e+00 0.000000e+00 1.700000e+00 0.000000e+00 1.800000e+00 0.000000e+00 2.000000e-01 0.000000e+00 3.000000e-01 0.000000e+00 4.000000e-01 0.000000e+00 5.000000e-01 0.000000e+00 6.000000e-01 0.000000e+00 7.000000e-01 0.000000e+00 8.000000e-01 0.000000e+00 9.000000e-01 0.000000e+00 1.000000e+00 0.000000e+00 1.100000e+00 0.000000e+00 1.200000e+00 0.000000e+00 1.300000e+00 0.000000e+00 1.400000e+00 0.000000e+00 1.500000e+00 0.000000e+00 1.600000e+00 0.000000e+00 1.700000e+00 0.000000e+00 1.800000e+00 0.000000e+00 2.000000e-01 0.000000e+00 3.000000e-01 0.000000e+00 4.000000e-01 0.000000e+00 5.000000e-01 0.000000e+00 6.000000e-01 0.000000e+00 7.000000e-01 0.000000e+00 8.000000e-01 0.000000e+00 9.000000e-01 0.000000e+00 1.000000e+00 0.000000e+00 1.100000e+00 0.000000e+00 1.200000e+00 0.000000e+00 1.300000e+00 0.000000e+00 1.400000e+00 0.000000e+00 1.500000e+00 0.000000e+00 1.600000e+00 0.000000e+00 1.700000e+00 0.000000e+00 1.800000e+00 0.000000e+00 2.000000e-01 0.000000e+00 3.000000e-01 0.000000e+00 4.000000e-01 0.000000e+00 5.000000e-01 0.000000e+00 6.000000e-01 0.000000e+00 7.000000e-01 0.000000e+00 8.000000e-01 0.000000e+00 9.000000e-01 0.000000e+00 1.000000e+00 0.000000e+00 1.100000e+00 0.000000e+00 1.200000e+00 0.000000e+00 1.300000e+00 0.000000e+00 1.400000e+00 0.000000e+00 1.500000e+00 0.000000e+00 1.600000e+00 0.000000e+00 1.700000e+00 0.000000e+00 1.800000e+00 0.000000e+00 2.000000e-01 0.000000e+00 3.000000e-01 0.000000e+00 4.000000e-01 0.000000e+00 5.000000e-01 0.000000e+00 6.000000e-01 0.000000e+00 7.000000e-01 0.000000e+00 8.000000e-01 0.000000e+00 9.000000e-01 0.000000e+00 1.000000e+00 0.000000e+00 1.100000e+00 0.000000e+00 1.200000e+00 0.000000e+00 1.300000e+00 0.000000e+00 1.400000e+00 0.000000e+00 1.500000e+00 0.000000e+00 1.600000e+00 0.000000e+00 1.700000e+00 0.000000e+00 1.800000e+00 0.000000e+00 2.000000e-01 0.000000e+00 3.000000e-01 0.000000e+00 4.000000e-01 0.000000e+00 5.000000e-01 0.000000e+00 6.000000e-01 0.000000e+00 7.000000e-01 0.000000e+00 8.000000e-01 0.000000e+00 9.000000e-01 0.000000e+00 1.000000e+00 0.000000e+00 1.100000e+00 0.000000e+00 1.200000e+00 0.000000e+00 1.300000e+00 0.000000e+00 1.400000e+00 0.000000e+00 1.500000e+00 0.000000e+00 1.600000e+00 0.000000e+00 1.700000e+00 0.000000e+00 1.800000e+00 0.000000e+00 2.000000e-01 0.000000e+00 3.000000e-01 0.000000e+00 4.000000e-01 0.000000e+00 5.000000e-01 0.000000e+00 6.000000e-01 0.000000e+00 7.000000e-01 0.000000e+00 8.000000e-01 0.000000e+00 9.000000e-01 0.000000e+00 1.000000e+00 0.000000e+00 1.100000e+00 0.000000e+00 1.200000e+00 0.000000e+00 1.300000e+00 0.000000e+00 1.400000e+00 0.000000e+00 1.500000e+00 0.000000e+00 1.600000e+00 0.000000e+00 1.700000e+00 0.000000e+00 1.800000e+00 0.000000e+00 2.000000e-01 0.000000e+00 3.000000e-01 0.000000e+00 4.000000e-01 0.000000e+00 5.000000e-01 0.000000e+00 6.000000e-01 0.000000e+00 7.000000e-01 0.000000e+00 8.000000e-01 0.000000e+00 9.000000e-01 0.000000e+00 1.000000e+00 0.000000e+00 1.100000e+00 0.000000e+00 1.200000e+00 0.000000e+00 1.300000e+00 0.000000e+00 1.400000e+00 0.000000e+00 1.500000e+00 0.000000e+00 1.600000e+00 0.000000e+00 1.700000e+00 0.000000e+00 1.800000e+00 0.000000e+00 2.000000e-01 0.000000e+00 3.000000e-01 0.000000e+00 4.000000e-01 0.000000e+00 5.000000e-01 0.000000e+00 6.000000e-01 0.000000e+00 7.000000e-01 0.000000e+00 8.000000e-01 0.000000e+00 9.000000e-01 0.000000e+00 1.000000e+00 0.000000e+00 1.100000e+00 0.000000e+00 1.200000e+00 0.000000e+00 1.300000e+00 0.000000e+00 1.400000e+00 0.000000e+00 1.500000e+00 0.000000e+00 1.600000e+00 0.000000e+00 1.700000e+00 0.000000e+00 1.800000e+00 0.000000e+00 2.000000e-01 0.000000e+00 3.000000e-01 0.000000e+00 4.000000e-01 0.000000e+00 5.000000e-01 0.000000e+00 6.000000e-01 0.000000e+00 7.000000e-01 0.000000e+00 8.000000e-01 0.000000e+00 9.000000e-01 0.000000e+00 1.000000e+00 0.000000e+00 1.100000e+00 0.000000e+00 1.200000e+00 0.000000e+00 1.300000e+00 0.000000e+00 1.400000e+00 0.000000e+00 1.500000e+00 0.000000e+00 1.600000e+00 0.000000e+00 1.700000e+00 0.000000e+00 1.800000e+00 0.000000e+00 2.000000e-01 0.000000e+00 3.000000e-01 0.000000e+00 4.000000e-01 0.000000e+00 5.000000e-01 0.000000e+00 6.000000e-01 0.000000e+00 7.000000e-01 0.000000e+00 8.000000e-01 0.000000e+00 9.000000e-01 0.000000e+00 1.000000e+00 0.000000e+00 1.100000e+00 0.000000e+00 1.200000e+00 0.000000e+00 1.300000e+00 0.000000e+00 1.400000e+00 0.000000e+00 1.500000e+00 0.000000e+00 1.600000e+00 0.000000e+00 1.700000e+00 0.000000e+00 1.800000e+00 0.000000e+00 2.000000e-01 0.000000e+00 3.000000e-01 0.000000e+00 4.000000e-01 0.000000e+00 5.000000e-01 0.000000e+00 6.000000e-01 0.000000e+00 7.000000e-01 0.000000e+00 8.000000e-01 0.000000e+00 9.000000e-01 0.000000e+00 1.000000e+00 0.000000e+00 1.100000e+00 0.000000e+00 1.200000e+00 0.000000e+00 1.300000e+00 0.000000e+00 1.400000e+00 0.000000e+00 1.500000e+00 0.000000e+00 1.600000e+00 0.000000e+00 1.700000e+00 0.000000e+00 1.800000e+00 0.000000e+00 2.000000e-01 0.000000e+00 3.000000e-01 0.000000e+00 4.000000e-01 0.000000e+00 5.000000e-01 0.000000e+00 6.000000e-01 0.000000e+00 7.000000e-01 0.000000e+00 8.000000e-01 0.000000e+00 9.000000e-01 0.000000e+00 1.000000e+00 0.000000e+00 1.100000e+00 0.000000e+00 1.200000e+00 0.000000e+00 1.300000e+00 0.000000e+00 1.400000e+00 0.000000e+00 1.500000e+00 0.000000e+00 1.600000e+00 0.000000e+00 1.700000e+00 0.000000e+00 1.800000e+00 0.000000e+00 2.000000e-01 0.000000e+00 3.000000e-01 0.000000e+00 4.000000e-01 0.000000e+00 5.000000e-01 0.000000e+00 6.000000e-01 0.000000e+00 7.000000e-01 0.000000e+00 8.000000e-01 0.000000e+00 9.000000e-01 0.000000e+00 1.000000e+00 0.000000e+00 1.100000e+00 0.000000e+00 1.200000e+00 0.000000e+00 1.300000e+00 0.000000e+00 1.400000e+00 0.000000e+00 1.500000e+00 0.000000e+00 1.600000e+00 0.000000e+00 1.700000e+00 0.000000e+00 1.800000e+00 0.000000e+00 2.000000e-01 0.000000e+00 3.000000e-01 0.000000e+00 4.000000e-01 0.000000e+00 5.000000e-01 0.000000e+00 6.000000e-01 0.000000e+00 7.000000e-01 0.000000e+00 8.000000e-01 0.000000e+00 9.000000e-01 0.000000e+00 1.000000e+00 0.000000e+00 1.100000e+00 0.000000e+00 1.200000e+00 0.000000e+00 1.300000e+00 0.000000e+00 1.400000e+00 0.000000e+00 1.500000e+00 0.000000e+00 1.600000e+00 0.000000e+00 1.700000e+00 0.000000e+00 1.800000e+00 0.000000e+00 2.000000e-01 0.000000e+00 3.000000e-01 0.000000e+00 4.000000e-01 0.000000e+00 5.000000e-01 0.000000e+00 6.000000e-01 0.000000e+00 7.000000e-01 0.000000e+00 8.000000e-01 0.000000e+00 9.000000e-01 0.000000e+00 1.000000e+00 0.000000e+00 1.100000e+00 0.000000e+00 1.200000e+00 0.000000e+00 1.300000e+00 0.000000e+00 1.400000e+00 0.000000e+00 1.500000e+00 0.000000e+00 1.600000e+00 0.000000e+00 1.700000e+00 0.000000e+00 1.800000e+00 0.000000e+00 2.000000e-01 0.000000e+00 3.000000e-01 0.000000e+00 4.000000e-01 0.000000e+00 5.000000e-01 0.000000e+00 6.000000e-01 0.000000e+00 7.000000e-01 0.000000e+00 8.000000e-01 0.000000e+00 9.000000e-01 0.000000e+00 1.000000e+00 0.000000e+00 1.100000e+00 0.000000e+00 1.200000e+00 0.000000e+00 1.300000e+00 0.000000e+00 1.400000e+00 0.000000e+00 1.500000e+00 0.000000e+00 1.600000e+00 0.000000e+00 1.700000e+00 0.000000e+00 1.800000e+00 0.000000e+00 2.000000e-01 0.000000e+00 3.000000e-01 0.000000e+00 4.000000e-01 0.000000e+00 5.000000e-01 0.000000e+00 6.000000e-01 0.000000e+00 7.000000e-01 0.000000e+00 8.000000e-01 0.000000e+00 9.000000e-01 0.000000e+00 1.000000e+00 0.000000e+00 1.100000e+00 0.000000e+00 1.200000e+00 0.000000e+00 1.300000e+00 0.000000e+00 1.400000e+00 0.000000e+00 1.500000e+00 0.000000e+00 1.600000e+00 0.000000e+00 1.700000e+00 0.000000e+00 1.800000e+00 0.000000e+00 2.000000e-01 0.000000e+00 3.000000e-01 0.000000e+00 4.000000e-01 0.000000e+00 5.000000e-01 0.000000e+00 6.000000e-01 0.000000e+00 7.000000e-01 0.000000e+00 8.000000e-01 0.000000e+00 9.000000e-01 0.000000e+00 1.000000e+00 0.000000e+00 1.100000e+00 0.000000e+00 1.200000e+00 0.000000e+00 1.300000e+00 0.000000e+00 1.400000e+00 0.000000e+00 1.500000e+00 0.000000e+00 1.600000e+00 0.000000e+00 1.700000e+00 0.000000e+00 1.800000e+00 0.000000e+00 2.000000e-01 0.000000e+00 3.000000e-01 0.000000e+00 4.000000e-01 0.000000e+00 5.000000e-01 0.000000e+00 6.000000e-01 0.000000e+00 7.000000e-01 0.000000e+00 8.000000e-01 0.000000e+00 9.000000e-01 0.000000e+00 1.000000e+00 0.000000e+00 1.100000e+00 0.000000e+00 1.200000e+00 0.000000e+00 1.300000e+00 0.000000e+00 1.400000e+00 0.000000e+00 1.500000e+00 0.000000e+00 1.600000e+00 0.000000e+00 1.700000e+00 0.000000e+00 1.800000e+00 0.000000e+00 2.000000e-01 0.000000e+00 3.000000e-01 0.000000e+00 4.000000e-01 0.000000e+00 5.000000e-01 0.000000e+00 6.000000e-01 0.000000e+00 7.000000e-01 0.000000e+00 8.000000e-01 0.000000e+00 9.000000e-01 0.000000e+00 1.000000e+00 0.000000e+00 1.100000e+00 0.000000e+00 1.200000e+00 0.000000e+00 1.300000e+00 0.000000e+00 1.400000e+00 0.000000e+00 1.500000e+00 0.000000e+00 1.600000e+00 0.000000e+00 1.700000e+00 0.000000e+00 1.800000e+00 0.000000e+00 tmpk8ny_4pz/tests/hisim/nmos/reference/78_noise_COIGN=0_T27.standard0000644000175000017500000000353213546075722025255 0ustar carstencarstenFreq N(g) 1000 0 1258.925 0 1584.893 0 1995.262 0 2511.886 0 3162.278 0 3981.072 0 5011.872 0 6309.573 0 7943.282 0 10000 0 12589.25 0 15848.93 0 19952.62 0 25118.86 0 31622.78 0 39810.72 0 50118.72 0 63095.73 0 79432.82 0 100000 0 125892.5 0 158489.3 0 199526.2 0 251188.6 0 316227.8 0 398107.2 0 501187.2 0 630957.3 0 794328.2 0 1000000 0 1258925 0 1584893 0 1995262 0 2511886 0 3162278 0 3981072 0 5011872 0 6309573 0 7943282 0 10000000 0 12589250 0 15848930 0 19952620 0 25118860 0 31622780 0 39810720 0 50118720 0 63095730 0 79432820 0 100000000 0 125892500 0 158489300 0 199526200 0 251188600 0 316227800 0 398107200 0 501187200 0 630957300 0 794328200 0 1000000000 0 1258925000 0 1584893000 0 1995262000 0 2511886000 0 3162278000 0 3981072000 0 5011872000 0 6309573000 0 7943282000 0 10000000000 0 12589250000 0 15848930000 0 19952620000 0 25118860000 0 31622780000 0 39810720000 0 50118720000 0 63095730000 0 79432820000 0 100000000000 0 1000 0 1258.925 0 1584.893 0 1995.262 0 2511.886 0 3162.278 0 3981.072 0 5011.872 0 6309.573 0 7943.282 0 10000 0 12589.25 0 15848.93 0 19952.62 0 25118.86 0 31622.78 0 39810.72 0 50118.72 0 63095.73 0 79432.82 0 100000 0 125892.5 0 158489.3 0 199526.2 0 251188.6 0 316227.8 0 398107.2 0 501187.2 0 630957.3 0 794328.2 0 1000000 0 1258925 0 1584893 0 1995262 0 2511886 0 3162278 0 3981072 0 5011872 0 6309573 0 7943282 0 10000000 0 12589250 0 15848930 0 19952620 0 25118860 0 31622780 0 39810720 0 50118720 0 63095730 0 79432820 0 100000000 0 125892500 0 158489300 0 199526200 0 251188600 0 316227800 0 398107200 0 501187200 0 630957300 0 794328200 0 1000000000 0 1258925000 0 1584893000 0 1995262000 0 2511886000 0 3162278000 0 3981072000 0 5011872000 0 6309573000 0 7943282000 0 10000000000 0 12589250000 0 15848930000 0 19952620000 0 25118860000 0 31622780000 0 39810720000 0 50118720000 0 63095730000 0 79432820000 0 100000000000 0 tmpk8ny_4pz/tests/hisim/nmos/reference/37_acVd_CORSRD=-1_PT.standard0000644000175000017500000000715113546075722025173 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 0.2 2.981183e-04 6.624533e-03 4.50667722020252e-15 1.91789951927966e-14 0.3 7.228280e-04 5.802760e-03 4.87705832048482e-15 1.80057748751421e-14 0.4 1.521539e-03 4.403135e-03 5.46649948007859e-15 1.58876343016463e-14 0.5 2.631484e-03 2.650752e-03 6.16153666826294e-15 1.26209334171728e-14 0.6 3.641972e-03 1.230120e-03 6.67211580650447e-15 8.26135423679771e-15 0.7 4.284295e-03 4.380828e-04 6.72746982149181e-15 4.89639032571905e-15 0.8 4.436893e-03 2.718120e-04 6.68556681014639e-15 4.3112261672833e-15 0.9 4.463202e-03 2.505177e-04 6.67079580614707e-15 4.23409814640055e-15 1 4.485262e-03 2.346918e-04 6.655578802027e-15 4.16623812802715e-15 1.1 4.504190e-03 2.223320e-04 6.6401987978628e-15 4.09812310958471e-15 1.2 4.520184e-03 2.128538e-04 6.62500979375031e-15 4.02666009023579e-15 1.3 4.533800e-03 2.055653e-04 6.6100267896936e-15 3.94969706939772e-15 1.4 4.545603e-03 1.998828e-04 6.59482878557867e-15 3.8603610452096e-15 1.5 4.556053e-03 1.953670e-04 6.57930678137602e-15 3.75822001755447e-15 1.6 4.565494e-03 1.917033e-04 6.56367877714467e-15 3.64867198789386e-15 1.7 4.574179e-03 1.886706e-04 6.54826877297234e-15 3.53879695814472e-15 1.8 4.582287e-03 1.861137e-04 6.53294176882249e-15 3.42723292793827e-15 0.2 3.984419e-04 5.862564e-03 5.1700093998026e-15 1.80146948775572e-14 0.3 8.332407e-04 5.062916e-03 5.52423249571005e-15 1.6783164544115e-14 0.4 1.510161e-03 3.925654e-03 6.00231662515342e-15 1.48565440224741e-14 0.5 2.378976e-03 2.601972e-03 6.52736276731195e-15 1.20501832626397e-14 0.6 3.259114e-03 1.395236e-03 6.93603787796252e-15 8.24708723293486e-15 0.7 3.921029e-03 5.803831e-04 7.00269989601155e-15 5.14546739315775e-15 0.8 4.154284e-03 3.218400e-04 6.95092688199378e-15 4.34316617593119e-15 0.9 4.199923e-03 2.828464e-04 6.92651387538386e-15 4.21807614206252e-15 1 4.231139e-03 2.610418e-04 6.90404086929919e-15 4.13711112014089e-15 1.1 4.258617e-03 2.435140e-04 6.88147086318826e-15 4.05902909899984e-15 1.2 4.282235e-03 2.297868e-04 6.85950085723979e-15 3.98161607803993e-15 1.3 4.302424e-03 2.191625e-04 6.83840485152795e-15 3.90358905691377e-15 1.4 4.319851e-03 2.108893e-04 6.81783984595989e-15 3.81793803372338e-15 1.5 4.335141e-03 2.043486e-04 6.79764984049336e-15 3.72349500815252e-15 1.6 4.348794e-03 1.990805e-04 6.77783083512727e-15 3.6225709808269e-15 1.7 4.361190e-03 1.947557e-04 6.75852082989901e-15 3.51999895305508e-15 1.8 4.372608e-03 1.911409e-04 6.73980882483265e-15 3.41939592581637e-15 0.2 4.823963e-04 5.243518e-03 5.82218457638188e-15 1.62468943989176e-14 0.3 8.762399e-04 4.264966e-03 6.31398870953999e-15 1.52521941295981e-14 0.4 1.405987e-03 3.352197e-03 6.75151982800345e-15 1.36100436849787e-14 0.5 2.044322e-03 2.393637e-03 7.17796794346614e-15 1.12951030581984e-14 0.6 2.719598e-03 1.475311e-03 7.52467003733725e-15 8.25217423431218e-15 0.7 3.298284e-03 7.559779e-04 7.62785706527559e-15 5.53836549953663e-15 0.8 3.608915e-03 4.025429e-04 7.57934605214102e-15 4.4498112048058e-15 0.9 3.702410e-03 3.115645e-04 7.54115704180118e-15 4.18876413412617e-15 1 3.743193e-03 2.821260e-04 7.51230103398829e-15 4.08474410596229e-15 1.1 3.776566e-03 2.615221e-04 7.48427802640093e-15 3.99882408269907e-15 1.2 3.806331e-03 2.447403e-04 7.45678501895708e-15 3.91767106072653e-15 1.3 3.832574e-03 2.312272e-04 7.43033101179454e-15 3.83990503967105e-15 1.4 3.855606e-03 2.204519e-04 7.40482300488814e-15 3.75816301753904e-15 1.5 3.875926e-03 2.118395e-04 7.38023199823002e-15 3.67119599399233e-15 1.6 3.894040e-03 2.048885e-04 7.35650899180691e-15 3.57966296920937e-15 1.7 3.910380e-03 1.992045e-04 7.33364198561557e-15 3.48585594381071e-15 1.8 3.925296e-03 1.944901e-04 7.31165297966195e-15 3.39284291862703e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/63_acFreq_COFLICK=1.standard0000644000175000017500000002533013546075722025113 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258.925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584.893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995.262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511.886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162.278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981.072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011.872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309.573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943.282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589.25 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848.93 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952.62 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118.86 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622.78 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810.72 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118.72 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095.73 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432.82 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 125892.5 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 158489.3 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 199526.2 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 251188.6 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 316227.8 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 398107.2 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 501187.2 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 630957.3 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 794328.2 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 1000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589250 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848930 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952620 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118860 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622780 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810720 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118720 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095730 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432820 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258.925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584.893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 1995.262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511.886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162.278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981.072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011.872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309.573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943.282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589.25 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848.93 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 19952.62 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118.86 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622.78 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810.72 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118.72 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095.73 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432.82 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 125892.5 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 158489.3 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 199526.2 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 251188.6 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 316227.8 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 398107.2 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 501187.2 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 630957.3 1.95109670680967e-14 1.51047556203098e-14 3.63962547928741e-15 794328.2 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 1000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 1995262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589250 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848930 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 19952620 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118860 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622780 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810720 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118720 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095730 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432820 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258.925 1.92253810991621e-14 1.48903692202894e-14 3.56434127432084e-15 1584.893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995.262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511.886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162.278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981.072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011.872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309.573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943.282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 12589.25 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848.93 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952.62 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118.86 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622.78 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810.72 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118.72 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095.73 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432.82 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 125892.5 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 158489.3 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 199526.2 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 251188.6 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 316227.8 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 398107.2 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 501187.2 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 630957.3 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 794328.2 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 1000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258925 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 1584893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000000 1.92253759986944e-14 1.4890367771438e-14 3.56434020406966e-15 12589250 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848930 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952620 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118860 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622780 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810720 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118720 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095730 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432820 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/52_acFreq_COSTI=0.standard0000644000175000017500000002533013546075722024717 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258.925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584.893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995.262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511.886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162.278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981.072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011.872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309.573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943.282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589.25 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848.93 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952.62 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118.86 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622.78 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810.72 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118.72 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095.73 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432.82 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 125892.5 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 158489.3 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 199526.2 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 251188.6 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 316227.8 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 398107.2 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 501187.2 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 630957.3 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 794328.2 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 1000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589250 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848930 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952620 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 25118860 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622780 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810720 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118720 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095730 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432820 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 100000000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258.925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584.893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 1995.262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511.886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162.278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981.072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011.872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309.573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943.282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589.25 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848.93 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 19952.62 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118.86 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622.78 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810.72 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118.72 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095.73 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432.82 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 125892.5 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 158489.3 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 199526.2 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 251188.6 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 316227.8 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 398107.2 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 501187.2 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 630957.3 1.95109670680967e-14 1.51047556203098e-14 3.63962547928741e-15 794328.2 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 1000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 1995262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589250 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848930 1.95109718868175e-14 1.51047535001555e-14 3.63962622310804e-15 19952620 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118860 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 31622780 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810720 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118720 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095730 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 79432820 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 100000000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258.925 1.92253810991621e-14 1.48903692202894e-14 3.56434127432084e-15 1584.893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995.262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511.886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162.278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981.072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011.872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309.573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943.282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 12589.25 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848.93 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952.62 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118.86 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622.78 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810.72 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118.72 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095.73 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432.82 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 125892.5 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 158489.3 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 199526.2 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 251188.6 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 316227.8 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 398107.2 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 501187.2 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 630957.3 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 794328.2 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 1000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258925 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 1584893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000000 1.92253759986944e-14 1.4890367771438e-14 3.56434020406966e-15 12589250 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848930 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952620 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118860 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622780 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810720 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 50118720 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095730 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 79432820 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 100000000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/59_acFreq_CORG=1.standard0000644000175000017500000002530113546075722024576 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 1258.925 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 1584.893 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 1995.262 1.97239429028692e-14 1.52597184671462e-14 3.70121458243426e-15 2511.886 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 3162.278 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 3981.072 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 5011.872 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 6309.573 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 7943.282 1.97239370867637e-14 1.52597182756252e-14 3.70121386275726e-15 10000 1.97239288579298e-14 1.52597186478714e-14 3.70121345512869e-15 12589.25 1.97239361628689e-14 1.52597217089105e-14 3.70121509427575e-15 15848.93 1.97239426068025e-14 1.52597216325022e-14 3.70121480867672e-15 19952.62 1.97239349262254e-14 1.52597184671462e-14 3.70121458243426e-15 25118.86 1.97239370135589e-14 1.52597233745163e-14 3.70121479816972e-15 31622.78 1.97239355773923e-14 1.52597148117833e-14 3.70121388675298e-15 39810.72 1.97239340552502e-14 1.52597166420165e-14 3.70121379096234e-15 50118.72 1.97239356448865e-14 1.52597191849829e-14 3.70121541675013e-15 63095.73 1.97239363426458e-14 1.5259718955767e-14 3.70121327755096e-15 79432.82 1.97239350831216e-14 1.52597182756252e-14 3.70121386275726e-15 100000 1.97239288579298e-14 1.52597154647725e-14 3.70121345512869e-15 125892.5 1.97239361628689e-14 1.52597217089105e-14 3.70121383006268e-15 158489.3 1.97239325648033e-14 1.5259711590503e-14 3.70121280027687e-15 199526.2 1.97239269495816e-14 1.52597104905024e-14 3.70121218944112e-15 251188.6 1.97239180053384e-14 1.52597043662959e-14 3.70121099652562e-15 316227.8 1.97239003469476e-14 1.525968964718e-14 3.70120734395611e-15 398107.2 1.97238820839655e-14 1.52596766641052e-14 3.70120379648453e-15 501187.2 1.97238530803573e-14 1.52596556738066e-14 3.70119953895605e-15 630957.3 1.97238026535359e-14 1.52596155358895e-14 3.70119057562664e-15 794328.2 1.97237247007e-14 1.52595539769721e-14 3.70117378991505e-15 1000000 1.97235946325493e-14 1.52594576337647e-14 3.70115138470089e-15 1258925 1.97234051933823e-14 1.52593045185996e-14 3.70111522144373e-15 1584893 1.97230890368667e-14 1.52590689025513e-14 3.70105614508865e-15 1995262 1.9722594850063e-14 1.52586815034491e-14 3.70096331815381e-15 2511886 1.97218144289378e-14 1.52580759954074e-14 3.70081625914683e-15 3162278 1.97205685534643e-14 1.52571127917971e-14 3.70058225520894e-15 3981072 1.97186010018895e-14 1.52555909215756e-14 3.70021274406466e-15 5011872 1.9715482307321e-14 1.5253177533824e-14 3.69962763734263e-15 6309573 1.97105422072928e-14 1.52493567885297e-14 3.69870093125876e-15 7943282 1.97027145095314e-14 1.52433004321734e-14 3.69723262588409e-15 10000000 1.96903153339488e-14 1.52337111386208e-14 3.69490614473396e-15 12589250 1.96707254350278e-14 1.52185462894335e-14 3.6912278110744e-15 15848930 1.96397203591359e-14 1.51945590994023e-14 3.68541071026515e-15 19952620 1.95907887875183e-14 1.51567080888055e-14 3.67622934098493e-15 25118860 1.95137441114076e-14 1.50971017121719e-14 3.66177210705072e-15 31622780 1.9392865022826e-14 1.50035794130665e-14 3.63908801729963e-15 39810720 1.92043251515824e-14 1.4857714757661e-14 3.60370886476335e-15 50118720 1.89129074502151e-14 1.46322541676119e-14 3.54902358498303e-15 63095730 1.84687318119808e-14 1.42886113510042e-14 3.46567324534855e-15 79432820 1.78059586912473e-14 1.37758469760843e-14 3.34130363776826e-15 100000000 1.6847728472856e-14 1.30345001772298e-14 3.16149198676375e-15 1000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 1258.925 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 1584.893 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 1995.262 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 2511.886 1.95109689112165e-14 1.51047556889549e-14 3.63962626296804e-15 3162.278 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 3981.072 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 5011.872 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 6309.573 1.95109670680966e-14 1.51047556203098e-14 3.63962547928741e-15 7943.282 1.95109659595757e-14 1.51047565948145e-14 3.63962591157085e-15 10000 1.95109636285785e-14 1.51047558459806e-14 3.63962526680042e-15 12589.25 1.95109668301981e-14 1.51047544715913e-14 3.63962642646307e-15 15848.93 1.95109718868175e-14 1.51047535001555e-14 3.63962622310805e-15 19952.62 1.95109665127734e-14 1.5104756207581e-14 3.63962611780622e-15 25118.86 1.95109689112165e-14 1.51047556889549e-14 3.63962562936069e-15 31622.78 1.95109625063379e-14 1.51047511843666e-14 3.63962502993507e-15 39810.72 1.95109637264445e-14 1.51047542624331e-14 3.63962502022946e-15 50118.72 1.95109667929594e-14 1.51047550903703e-14 3.63962545353344e-15 63095.73 1.95109645456606e-14 1.51047556203098e-14 3.63962547928741e-15 79432.82 1.95109639559336e-14 1.51047545911724e-14 3.63962591157085e-15 100000 1.95109636285785e-14 1.51047526628817e-14 3.63962526680042e-15 125892.5 1.95109668301981e-14 1.51047544715913e-14 3.63962516225e-15 158489.3 1.95109618448182e-14 1.51047535001555e-14 3.6396242147082e-15 199526.2 1.95109585361296e-14 1.51047482309371e-14 3.63962372481307e-15 251188.6 1.9510949902996e-14 1.51047430168079e-14 3.63962182771659e-15 316227.8 1.95109323088139e-14 1.51047260197633e-14 3.63961899043027e-15 398107.2 1.95109117551598e-14 1.51047142845219e-14 3.63961542553076e-15 501187.2 1.95108842284302e-14 1.5104691579194e-14 3.63960957573937e-15 630957.3 1.95108359014228e-14 1.51046547228684e-14 3.63960025492704e-15 794328.2 1.95107595844383e-14 1.51045963034457e-14 3.63958784237076e-15 1000000 1.95106453186924e-14 1.5104502789621e-14 3.63956478792205e-15 1258925 1.95104485028421e-14 1.51043625655417e-14 3.63953034627024e-15 1584893 1.95101484428794e-14 1.5104120854203e-14 3.6394725805196e-15 1995262 1.9509674296474e-14 1.51037511504592e-14 3.63938362783397e-15 2511886 1.95089096873303e-14 1.51031653345075e-14 3.63924229691419e-15 3162278 1.95077062066647e-14 1.51022296911112e-14 3.63901705311819e-15 3981072 1.95057985803111e-14 1.51007564713082e-14 3.63866155256836e-15 5011872 1.95027833778932e-14 1.50984198505344e-14 3.63809800974343e-15 6309573 1.94979992244338e-14 1.50947188473212e-14 3.63720646312855e-15 7943282 1.94904226170188e-14 1.5088851683743e-14 3.63579294421385e-15 10000000 1.94784323582106e-14 1.5079564801588e-14 3.6335550972709e-15 12589250 1.9459450147862e-14 1.50648685494391e-14 3.63001587875463e-15 15848930 1.94294408949484e-14 1.50416395349015e-14 3.6244176152517e-15 19952620 1.93820719252244e-14 1.50049683933451e-14 3.61558052499933e-15 25118860 1.93074669026768e-14 1.49472092214807e-14 3.60166367861767e-15 31622780 1.91903855913677e-14 1.48565728332285e-14 3.579823866539e-15 39810720 1.90077177818509e-14 1.47151575239382e-14 3.54574848925544e-15 50118720 1.87252319242494e-14 1.4496467272683e-14 3.49305118531006e-15 63095730 1.82943179722473e-14 1.41628679145921e-14 3.41266929691669e-15 79432820 1.76505622200988e-14 1.36644925621622e-14 3.29258107257209e-15 100000000 1.67181763491792e-14 1.29426725497141e-14 3.11865225073171e-15 1000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 1258.925 1.92253810991621e-14 1.48903692202894e-14 3.56434127432084e-15 1584.893 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 1995.262 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 2511.886 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 3162.278 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 3981.072 1.92253775196461e-14 1.48903687155692e-14 3.56433941732356e-15 5011.872 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 6309.573 1.9225379382497e-14 1.48903687367082e-14 3.56434085334647e-15 7943.282 1.92253788350262e-14 1.48903688926545e-14 3.56433905927632e-15 10000 1.92253759986944e-14 1.48903677714381e-14 3.56434020406966e-15 12589.25 1.9225381099162e-14 1.48903692202894e-14 3.56434127432084e-15 15848.93 1.92253774282935e-14 1.48903668582769e-14 3.56434035056938e-15 19952.62 1.92253787339494e-14 1.48903679515283e-14 3.56434016040392e-15 25118.86 1.92253830705381e-14 1.48903683061494e-14 3.56434040408303e-15 31622.78 1.92253744558627e-14 1.48903688955248e-14 3.56433958280694e-15 39810.72 1.9225373521855e-14 1.48903687155692e-14 3.56433941732356e-15 50118.72 1.92253792620511e-14 1.48903699392117e-14 3.56433930514772e-15 63095.73 1.92253768600609e-14 1.48903687367082e-14 3.56434085334647e-15 79432.82 1.92253768313841e-14 1.48903668890124e-14 3.56433905927632e-15 100000 1.92253759986944e-14 1.48903661798886e-14 3.56433861252023e-15 125892.5 1.9225381099162e-14 1.48903692202894e-14 3.56434001010777e-15 158489.3 1.92253673862943e-14 1.48903668582769e-14 3.56433834216953e-15 199526.2 1.92253707573056e-14 1.48903599748845e-14 3.56433776741077e-15 251188.6 1.92253640623177e-14 1.48903556340024e-14 3.56433660243893e-15 316227.8 1.92253442583387e-14 1.48903437309214e-14 3.56433354330214e-15 398107.2 1.92253255483615e-14 1.48903287376579e-14 3.56433022240397e-15 501187.2 1.92252998730807e-14 1.48903096035942e-14 3.56432660291246e-15 630957.3 1.92252557831312e-14 1.48902728841389e-14 3.56431815142214e-15 794328.2 1.92251824780994e-14 1.48902166158542e-14 3.56430299371834e-15 1000000 1.92250576888083e-14 1.4890127447474e-14 3.56428131674072e-15 1258925 1.92248880560673e-14 1.48899899563704e-14 3.56424898676721e-15 1584893 1.92245941523524e-14 1.48897643383222e-14 3.56419474158033e-15 1995262 1.92241423541567e-14 1.48894107542695e-14 3.56411043306179e-15 2511886 1.92234125516809e-14 1.48888476485104e-14 3.56397544624967e-15 3162278 1.92222590779682e-14 1.48879530936034e-14 3.56376130022201e-15 3981072 1.92204362498157e-14 1.48865388316715e-14 3.56342352337685e-15 5011872 1.92175483340134e-14 1.48843046218751e-14 3.56288807476927e-15 6309573 1.92129715196342e-14 1.48807607778458e-14 3.56204039168131e-15 7943282 1.92057231059241e-14 1.48751452199005e-14 3.5606964379198e-15 10000000 1.91942452918257e-14 1.48662557975596e-14 3.55856765428372e-15 12589250 1.91760894318177e-14 1.48521899857729e-14 3.55520227808507e-15 15848930 1.91473711781594e-14 1.48299541908198e-14 3.54987786325693e-15 19952620 1.91020358905018e-14 1.47948396650943e-14 3.54147271788981e-15 25118860 1.90306248434228e-14 1.47395254044338e-14 3.52823302205225e-15 31622780 1.89185223155585e-14 1.46527043156654e-14 3.50744996401823e-15 39810720 1.87435477421086e-14 1.4517182909642e-14 3.47500957419589e-15 50118720 1.84727654717814e-14 1.43074580120149e-14 3.42480842637598e-15 63095730 1.80592647701999e-14 1.39871953792764e-14 3.34814538310683e-15 79432820 1.74405344431708e-14 1.35079780587161e-14 3.23343355747602e-15 100000000 1.6542278306074e-14 1.28122673555423e-14 3.06689983788651e-15 tmpk8ny_4pz/tests/hisim/nmos/reference/39_acVd_VFBCL.standard0000644000175000017500000000720013546075722024172 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 0.2 -3.550473e-04 8.460926e-03 5.64989252973306e-14 5.32825144264733e-14 0.3 -5.086342e-04 8.428771e-03 5.73527755285142e-14 5.22972241597016e-14 0.4 -6.319028e-04 8.311268e-03 5.82507157716355e-14 5.12161338669917e-14 0.5 -7.154253e-04 8.108938e-03 5.91952760273793e-14 5.00271535450701e-14 0.6 -7.519597e-04 7.826939e-03 6.01872062959487e-14 4.87185331907555e-14 0.7 -7.370877e-04 7.474338e-03 6.12258965771787e-14 4.72783828008284e-14 0.8 -6.694710e-04 7.063017e-03 6.23093968705411e-14 4.56945123719886e-14 0.9 -5.507079e-04 6.606440e-03 6.34344071751425e-14 4.3954301900819e-14 1 -3.848571e-04 6.118428e-03 6.45960474896617e-14 4.20447113837891e-14 1.1 -1.777524e-04 5.612095e-03 6.57874878122494e-14 3.99529408174331e-14 1.2 6.374208e-05 5.099095e-03 6.69990781402928e-14 3.76690301990543e-14 1.3 3.323964e-04 4.589231e-03 6.82171384700879e-14 3.51852395265571e-14 1.4 6.210973e-04 4.090429e-03 6.94226287964797e-14 3.24994587993703e-14 1.5 9.230987e-04 3.609011e-03 7.05902091126072e-14 2.96299580224404e-14 1.6 1.232052e-03 3.150139e-03 7.1688499409974e-14 2.66189772072042e-14 1.7 1.541895e-03 2.718273e-03 7.2682429679085e-14 2.35302263709115e-14 1.8 1.846721e-03 2.317458e-03 7.35379999107344e-14 2.04399055341936e-14 0.2 -2.072529e-04 7.313681e-03 5.61919352142117e-14 5.2962784339905e-14 0.3 -2.897088e-04 7.268580e-03 5.70409954440984e-14 5.19674840704231e-14 0.4 -3.496875e-04 7.164594e-03 5.79334456857332e-14 5.08763637749975e-14 0.5 -3.816963e-04 7.001598e-03 5.88717759397902e-14 4.96774334503819e-14 0.6 -3.813964e-04 6.782160e-03 5.98566962064617e-14 4.83590930934355e-14 0.7 -3.459220e-04 6.511148e-03 6.08875364855662e-14 4.69097227010121e-14 0.8 -2.740346e-04 6.195182e-03 6.19622767765568e-14 4.53176022699386e-14 0.9 -1.661009e-04 5.842038e-03 6.3077517078513e-14 4.35708417969955e-14 1 -2.391313e-05 5.460037e-03 6.42283373901026e-14 4.16575912789746e-14 1.1 1.496040e-04 5.057481e-03 6.54078077094494e-14 3.95668907129083e-14 1.2 3.507349e-04 4.642208e-03 6.66062680339377e-14 3.72910800967227e-14 1.3 5.752934e-04 4.221323e-03 6.78101283598881e-14 3.48239894287471e-14 1.4 8.188595e-04 3.801139e-03 6.90006086822159e-14 3.21645987087055e-14 1.5 1.076892e-03 3.387291e-03 7.01528889942008e-14 2.93306279413955e-14 1.6 1.344715e-03 2.984980e-03 7.12364392875768e-14 2.63612171374146e-14 1.7 1.617431e-03 2.599216e-03 7.22173395531598e-14 2.33191863137715e-14 1.8 1.889857e-03 2.234921e-03 7.30628397820827e-14 2.02859454925083e-14 0.2 -5.920285e-05 5.793272e-03 5.57381250913406e-14 5.25060242162352e-14 0.3 -7.188946e-05 5.732906e-03 5.65768953184413e-14 5.15014739442488e-14 0.4 -6.963197e-05 5.638625e-03 5.74580155570084e-14 5.04018336465164e-14 0.5 -5.001920e-05 5.509970e-03 5.83839358077054e-14 4.91953933198674e-14 0.6 -1.109296e-05 5.347765e-03 5.93553060707081e-14 4.7870932961264e-14 0.7 4.853562e-05 5.153918e-03 6.03713863458163e-14 4.64173925677116e-14 0.8 1.296189e-04 4.931193e-03 6.14300966324667e-14 4.48239521362806e-14 0.9 2.322586e-04 4.683001e-03 6.25279369297118e-14 4.30800116641011e-14 1 3.559416e-04 4.413192e-03 6.36598872361923e-14 4.1175591148471e-14 1.1 4.996149e-04 4.125851e-03 6.48190275500346e-14 3.91022805871131e-14 1.2 6.617797e-04 3.825125e-03 6.59957878686476e-14 3.68552699787252e-14 1.3 8.405786e-04 3.515118e-03 6.717697818846e-14 3.4429949322059e-14 1.4 1.033847e-03 3.199865e-03 6.83446385046091e-14 3.18261086170578e-14 1.5 1.239112e-03 2.883398e-03 6.94752888107376e-14 2.90612078684488e-14 1.6 1.453528e-03 2.569856e-03 7.05403190990992e-14 2.61711670859577e-14 1.7 1.673803e-03 2.263591e-03 7.1508029361111e-14 2.32133562851175e-14 1.8 1.896145e-03 1.969158e-03 7.23477695884743e-14 2.02647454867683e-14 tmpk8ny_4pz/tests/hisim/nmos/reference/79_noise_COIGN=0_T-55.standard0000644000175000017500000000353213546075722025334 0ustar carstencarstenFreq N(g) 1000 0 1258.925 0 1584.893 0 1995.262 0 2511.886 0 3162.278 0 3981.072 0 5011.872 0 6309.573 0 7943.282 0 10000 0 12589.25 0 15848.93 0 19952.62 0 25118.86 0 31622.78 0 39810.72 0 50118.72 0 63095.73 0 79432.82 0 100000 0 125892.5 0 158489.3 0 199526.2 0 251188.6 0 316227.8 0 398107.2 0 501187.2 0 630957.3 0 794328.2 0 1000000 0 1258925 0 1584893 0 1995262 0 2511886 0 3162278 0 3981072 0 5011872 0 6309573 0 7943282 0 10000000 0 12589250 0 15848930 0 19952620 0 25118860 0 31622780 0 39810720 0 50118720 0 63095730 0 79432820 0 100000000 0 125892500 0 158489300 0 199526200 0 251188600 0 316227800 0 398107200 0 501187200 0 630957300 0 794328200 0 1000000000 0 1258925000 0 1584893000 0 1995262000 0 2511886000 0 3162278000 0 3981072000 0 5011872000 0 6309573000 0 7943282000 0 10000000000 0 12589250000 0 15848930000 0 19952620000 0 25118860000 0 31622780000 0 39810720000 0 50118720000 0 63095730000 0 79432820000 0 100000000000 0 1000 0 1258.925 0 1584.893 0 1995.262 0 2511.886 0 3162.278 0 3981.072 0 5011.872 0 6309.573 0 7943.282 0 10000 0 12589.25 0 15848.93 0 19952.62 0 25118.86 0 31622.78 0 39810.72 0 50118.72 0 63095.73 0 79432.82 0 100000 0 125892.5 0 158489.3 0 199526.2 0 251188.6 0 316227.8 0 398107.2 0 501187.2 0 630957.3 0 794328.2 0 1000000 0 1258925 0 1584893 0 1995262 0 2511886 0 3162278 0 3981072 0 5011872 0 6309573 0 7943282 0 10000000 0 12589250 0 15848930 0 19952620 0 25118860 0 31622780 0 39810720 0 50118720 0 63095730 0 79432820 0 100000000 0 125892500 0 158489300 0 199526200 0 251188600 0 316227800 0 398107200 0 501187200 0 630957300 0 794328200 0 1000000000 0 1258925000 0 1584893000 0 1995262000 0 2511886000 0 3162278000 0 3981072000 0 5011872000 0 6309573000 0 7943282000 0 10000000000 0 12589250000 0 15848930000 0 19952620000 0 25118860000 0 31622780000 0 39810720000 0 50118720000 0 63095730000 0 79432820000 0 100000000000 0 tmpk8ny_4pz/tests/hisim/nmos/reference/3_dcSweep_CORSRD=-1_PT.standard0000644000175000017500000002211413546075722025615 0ustar carstencarstenV(d) I(d) 2.000000e-01 5.818315e-05 3.000000e-01 6.296530e-05 4.000000e-01 6.781327e-05 5.000000e-01 7.283577e-05 6.000000e-01 7.799522e-05 7.000000e-01 8.325347e-05 8.000000e-01 8.858995e-05 9.000000e-01 9.399547e-05 1.000000e+00 9.946639e-05 1.100000e+00 1.050014e-04 1.200000e+00 1.106001e-04 1.300000e+00 1.162626e-04 1.400000e+00 1.219886e-04 1.500000e+00 1.277783e-04 1.600000e+00 1.336316e-04 1.700000e+00 1.395482e-04 1.800000e+00 1.455280e-04 2.000000e-01 1.090945e-03 3.000000e-01 1.136870e-03 4.000000e-01 1.174579e-03 5.000000e-01 1.209976e-03 6.000000e-01 1.244137e-03 7.000000e-01 1.277487e-03 8.000000e-01 1.310238e-03 9.000000e-01 1.342531e-03 1.000000e+00 1.374470e-03 1.100000e+00 1.406135e-03 1.200000e+00 1.437586e-03 1.300000e+00 1.468871e-03 1.400000e+00 1.500026e-03 1.500000e+00 1.531080e-03 1.600000e+00 1.562057e-03 1.700000e+00 1.592975e-03 1.800000e+00 1.623850e-03 2.000000e-01 2.667554e-03 3.000000e-01 2.942130e-03 4.000000e-01 3.030329e-03 5.000000e-01 3.087473e-03 6.000000e-01 3.140510e-03 7.000000e-01 3.190620e-03 8.000000e-01 3.238476e-03 9.000000e-01 3.284611e-03 1.000000e+00 3.329426e-03 1.100000e+00 3.373215e-03 1.200000e+00 3.416194e-03 1.300000e+00 3.458523e-03 1.400000e+00 3.500321e-03 1.500000e+00 3.541678e-03 1.600000e+00 3.582663e-03 1.700000e+00 3.623332e-03 1.800000e+00 3.663729e-03 2.000000e-01 4.031267e-03 3.000000e-01 4.673137e-03 4.000000e-01 4.972441e-03 5.000000e-01 5.109668e-03 6.000000e-01 5.180517e-03 7.000000e-01 5.240022e-03 8.000000e-01 5.296737e-03 9.000000e-01 5.351026e-03 1.000000e+00 5.403198e-03 1.100000e+00 5.453605e-03 1.200000e+00 5.502571e-03 1.300000e+00 5.550368e-03 1.400000e+00 5.597214e-03 1.500000e+00 5.643277e-03 1.600000e+00 5.688689e-03 1.700000e+00 5.733553e-03 1.800000e+00 5.777950e-03 2.000000e-01 5.115145e-03 3.000000e-01 6.162811e-03 4.000000e-01 6.721051e-03 5.000000e-01 7.030913e-03 6.000000e-01 7.206338e-03 7.000000e-01 7.307526e-03 8.000000e-01 7.373532e-03 9.000000e-01 7.432905e-03 1.000000e+00 7.490261e-03 1.100000e+00 7.545728e-03 1.200000e+00 7.599430e-03 1.300000e+00 7.651568e-03 1.400000e+00 7.702365e-03 1.500000e+00 7.752027e-03 1.600000e+00 7.800730e-03 1.700000e+00 7.848623e-03 1.800000e+00 7.895827e-03 2.000000e-01 6.186026e-03 3.000000e-01 7.877862e-03 4.000000e-01 8.906449e-03 5.000000e-01 9.540656e-03 6.000000e-01 9.944746e-03 7.000000e-01 1.020985e-02 8.000000e-01 1.038757e-02 9.000000e-01 1.050988e-02 1.000000e+00 1.059652e-02 1.100000e+00 1.066083e-02 1.200000e+00 1.071991e-02 1.300000e+00 1.077749e-02 1.400000e+00 1.083366e-02 1.500000e+00 1.088846e-02 1.600000e+00 1.094198e-02 1.700000e+00 1.099436e-02 1.800000e+00 1.104572e-02 2.000000e-01 6.677462e-03 3.000000e-01 8.927910e-03 4.000000e-01 1.047683e-02 5.000000e-01 1.152187e-02 6.000000e-01 1.223287e-02 7.000000e-01 1.272637e-02 8.000000e-01 1.307639e-02 9.000000e-01 1.332940e-02 1.000000e+00 1.351542e-02 1.100000e+00 1.365509e-02 1.200000e+00 1.376301e-02 1.300000e+00 1.384807e-02 1.400000e+00 1.391445e-02 1.500000e+00 1.397408e-02 1.600000e+00 1.403222e-02 1.700000e+00 1.408916e-02 1.800000e+00 1.414496e-02 2.000000e-01 9.627360e-05 3.000000e-01 1.032322e-04 4.000000e-01 1.099340e-04 5.000000e-01 1.167258e-04 6.000000e-01 1.236199e-04 7.000000e-01 1.305933e-04 8.000000e-01 1.376329e-04 9.000000e-01 1.447345e-04 1.000000e+00 1.518983e-04 1.100000e+00 1.591262e-04 1.200000e+00 1.664199e-04 1.300000e+00 1.737814e-04 1.400000e+00 1.812122e-04 1.500000e+00 1.887132e-04 1.600000e+00 1.962856e-04 1.700000e+00 2.039299e-04 1.800000e+00 2.116465e-04 2.000000e-01 8.860018e-04 3.000000e-01 9.402540e-04 4.000000e-01 9.752843e-04 5.000000e-01 1.006961e-03 6.000000e-01 1.036949e-03 7.000000e-01 1.065883e-03 8.000000e-01 1.094095e-03 9.000000e-01 1.121789e-03 1.000000e+00 1.149102e-03 1.100000e+00 1.176130e-03 1.200000e+00 1.202944e-03 1.300000e+00 1.229597e-03 1.400000e+00 1.256129e-03 1.500000e+00 1.282572e-03 1.600000e+00 1.308950e-03 1.700000e+00 1.335283e-03 1.800000e+00 1.361588e-03 2.000000e-01 2.052841e-03 3.000000e-01 2.373291e-03 4.000000e-01 2.489061e-03 5.000000e-01 2.551313e-03 6.000000e-01 2.605860e-03 7.000000e-01 2.656462e-03 8.000000e-01 2.704057e-03 9.000000e-01 2.749375e-03 1.000000e+00 2.792973e-03 1.100000e+00 2.835256e-03 1.200000e+00 2.876518e-03 1.300000e+00 2.916971e-03 1.400000e+00 2.956773e-03 1.500000e+00 2.996041e-03 1.600000e+00 3.034866e-03 1.700000e+00 3.073317e-03 1.800000e+00 3.111451e-03 2.000000e-01 3.083554e-03 3.000000e-01 3.786523e-03 4.000000e-01 4.161279e-03 5.000000e-01 4.342682e-03 6.000000e-01 4.432853e-03 7.000000e-01 4.500759e-03 8.000000e-01 4.563776e-03 9.000000e-01 4.623265e-03 1.000000e+00 4.679693e-03 1.100000e+00 4.733567e-03 1.200000e+00 4.785356e-03 1.300000e+00 4.835455e-03 1.400000e+00 4.884179e-03 1.500000e+00 4.931777e-03 1.600000e+00 4.978439e-03 1.700000e+00 5.024318e-03 1.800000e+00 5.069533e-03 2.000000e-01 3.917295e-03 3.000000e-01 4.995416e-03 4.000000e-01 5.661775e-03 5.000000e-01 6.064050e-03 6.000000e-01 6.297811e-03 7.000000e-01 6.429491e-03 8.000000e-01 6.512216e-03 9.000000e-01 6.581943e-03 1.000000e+00 6.647983e-03 1.100000e+00 6.711105e-03 1.200000e+00 6.771552e-03 1.300000e+00 6.829627e-03 1.400000e+00 6.885662e-03 1.500000e+00 6.939962e-03 1.600000e+00 6.992792e-03 1.700000e+00 7.044376e-03 1.800000e+00 7.094898e-03 2.000000e-01 4.797466e-03 3.000000e-01 6.392368e-03 4.000000e-01 7.502976e-03 5.000000e-01 8.261698e-03 6.000000e-01 8.778376e-03 7.000000e-01 9.128979e-03 8.000000e-01 9.364601e-03 9.000000e-01 9.522033e-03 1.000000e+00 9.629351e-03 1.100000e+00 9.708997e-03 1.200000e+00 9.779233e-03 1.300000e+00 9.846503e-03 1.400000e+00 9.911523e-03 1.500000e+00 9.974431e-03 1.600000e+00 1.003539e-02 1.700000e+00 1.009458e-02 1.800000e+00 1.015219e-02 2.000000e-01 5.293205e-03 3.000000e-01 7.299151e-03 4.000000e-01 8.829759e-03 5.000000e-01 9.963145e-03 6.000000e-01 1.079350e-02 7.000000e-01 1.140160e-02 8.000000e-01 1.184808e-02 9.000000e-01 1.217628e-02 1.000000e+00 1.241744e-02 1.100000e+00 1.259513e-02 1.200000e+00 1.272768e-02 1.300000e+00 1.282904e-02 1.400000e+00 1.290971e-02 1.500000e+00 1.298058e-02 1.600000e+00 1.304831e-02 1.700000e+00 1.311412e-02 1.800000e+00 1.317819e-02 2.000000e-01 1.518277e-04 3.000000e-01 1.661344e-04 4.000000e-01 1.759193e-04 5.000000e-01 1.853188e-04 6.000000e-01 1.946994e-04 7.000000e-01 2.040984e-04 8.000000e-01 2.135251e-04 9.000000e-01 2.229887e-04 1.000000e+00 2.324981e-04 1.100000e+00 2.420614e-04 1.200000e+00 2.516855e-04 1.300000e+00 2.613756e-04 1.400000e+00 2.711361e-04 1.500000e+00 2.809704e-04 1.600000e+00 2.908811e-04 1.700000e+00 3.008705e-04 1.800000e+00 3.109401e-04 2.000000e-01 7.005818e-04 3.000000e-01 7.797945e-04 4.000000e-01 8.155337e-04 5.000000e-01 8.439002e-04 6.000000e-01 8.698607e-04 7.000000e-01 8.944710e-04 8.000000e-01 9.181989e-04 9.000000e-01 9.413181e-04 1.000000e+00 9.640040e-04 1.100000e+00 9.863753e-04 1.200000e+00 1.008515e-03 1.300000e+00 1.030484e-03 1.400000e+00 1.052326e-03 1.500000e+00 1.074075e-03 1.600000e+00 1.095759e-03 1.700000e+00 1.117398e-03 1.800000e+00 1.139010e-03 2.000000e-01 1.419718e-03 3.000000e-01 1.737577e-03 4.000000e-01 1.881045e-03 5.000000e-01 1.949518e-03 6.000000e-01 2.000255e-03 7.000000e-01 2.045882e-03 8.000000e-01 2.088299e-03 9.000000e-01 2.128286e-03 1.000000e+00 2.166422e-03 1.100000e+00 2.203143e-03 1.200000e+00 2.238774e-03 1.300000e+00 2.273553e-03 1.400000e+00 2.307655e-03 1.500000e+00 2.341212e-03 1.600000e+00 2.374324e-03 1.700000e+00 2.407069e-03 1.800000e+00 2.439507e-03 2.000000e-01 2.079277e-03 3.000000e-01 2.697195e-03 4.000000e-01 3.081074e-03 5.000000e-01 3.294626e-03 6.000000e-01 3.406365e-03 7.000000e-01 3.478549e-03 8.000000e-01 3.540633e-03 9.000000e-01 3.598479e-03 1.000000e+00 3.653019e-03 1.100000e+00 3.704751e-03 1.200000e+00 3.754141e-03 1.300000e+00 3.801604e-03 1.400000e+00 3.847488e-03 1.500000e+00 3.892073e-03 1.600000e+00 3.935584e-03 1.700000e+00 3.978197e-03 1.800000e+00 4.020055e-03 2.000000e-01 2.639825e-03 3.000000e-01 3.540765e-03 4.000000e-01 4.180466e-03 5.000000e-01 4.612998e-03 6.000000e-01 4.887449e-03 7.000000e-01 5.051491e-03 8.000000e-01 5.152581e-03 9.000000e-01 5.229055e-03 1.000000e+00 5.298230e-03 1.100000e+00 5.363729e-03 1.200000e+00 5.426152e-03 1.300000e+00 5.485815e-03 1.400000e+00 5.543047e-03 1.500000e+00 5.598172e-03 1.600000e+00 5.651489e-03 1.700000e+00 5.703259e-03 1.800000e+00 5.753703e-03 2.000000e-01 3.290082e-03 3.000000e-01 4.559644e-03 4.000000e-01 5.554571e-03 5.000000e-01 6.311943e-03 6.000000e-01 6.874742e-03 7.000000e-01 7.282454e-03 8.000000e-01 7.569099e-03 9.000000e-01 7.765294e-03 1.000000e+00 7.899356e-03 1.100000e+00 7.996750e-03 1.200000e+00 8.077690e-03 1.300000e+00 8.152601e-03 1.400000e+00 8.224309e-03 1.500000e+00 8.293370e-03 1.600000e+00 8.359996e-03 1.700000e+00 8.424382e-03 1.800000e+00 8.486733e-03 2.000000e-01 3.733602e-03 3.000000e-01 5.292365e-03 4.000000e-01 6.592829e-03 5.000000e-01 7.649151e-03 6.000000e-01 8.490635e-03 7.000000e-01 9.151546e-03 8.000000e-01 9.664259e-03 9.000000e-01 1.005679e-02 1.000000e+00 1.035305e-02 1.100000e+00 1.057404e-02 1.200000e+00 1.073851e-02 1.300000e+00 1.086289e-02 1.400000e+00 1.096132e-02 1.500000e+00 1.104558e-02 1.600000e+00 1.112353e-02 1.700000e+00 1.119832e-02 1.800000e+00 1.127075e-02 tmpk8ny_4pz/tests/hisim/nmos/qaSpec0000644000175000017500000006355313546075722017562 0ustar carstencarsten // // Test specification for HiSIM (version 2.7.0) // // // Simulator specific information // These arguments are added to the model card // specification to invoke the desired model in // different simulators (which can have different // names or levels for the same model) and to switch // between nType and pType polarities. // It is assumed that there are no polarity specific // parameters. // `ifdef spice nTypeSelectionArguments nmos level=61 version=270 pTypeSelectionArguments pmos level=61 version=270 `endif `ifdef ngspice nTypeSelectionArguments nmos level=68 version=270 pTypeSelectionArguments pmos level=68 version=270 `endif `ifdef hspice nTypeSelectionArguments nmos level=68 version=2.7.0 pTypeSelectionArguments pmos level=68 version=2.7.0 `endif // // General test-independent information // keyLetter m pins d g s b linearScale w l ps pd areaScale as ad temperature 27 -50 150 symmetricPins d s scaleParameters m // // Specific tests // test 1_dcSweep_CORSRD=0 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 biasList V(g)=0.4,0.6,0.8,1.0,1.2,1.5,1.8 biasSweep V(d)=0.2,1.800000000001,0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 modelParameters CORSRD=0 GDLD=0.001 test 2_dcSweep_CORSRD=-1_GDLD temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=-1.0 biasList V(g)=0.4,0.6,0.8,1.0,1.2,1.5,1.8 biasSweep V(d)=0.2,1.800000000001,0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 instanceParameters NRD=0.1 NRS=0.01 modelParameters CORSRD=-1 RSH=1 GDLD=0.0001 test 3_dcSweep_CORSRD=-1_PT temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0.5 biasList V(g)=0.4,0.6,0.8,1.0,1.2,1.5,1.8 biasSweep V(d)=0.2,1.800000000001,0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 instanceParameters NRD=0.01 NRS=0.1 AD=1e-8 AS=1e-8 PD=1e-3 PS=1e-3 modelParameters CORSRD=-1 RSH=10 PT4P=0.1 test 4_dcSweep_NSUBPFAC temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 biasList V(g)=0.4,0.6,0.8,1.0,1.2,1.5,1.8 biasSweep V(d)=0.2,1.800000000001,0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 modelParameters NSUBPL=0.1 NSUBPFAC=0.6 test 5_dcSweep_NSUBPDLT temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 biasList V(g)=0.4,0.6,0.8,1.0,1.2,1.5,1.8 biasSweep V(d)=0.2,1.800000000001,0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 modelParameters NSUBPL=0.1 NSUBPFAC=0.8 NSUBPDLT=0.001 test 6_dcSweep_COISUB=0 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 biasList V(g)=0.4,0.6,0.8,1.0,1.2,1.5,1.8 biasSweep V(d)=0.2,1.800000000001,0.1 outputs I(b) instanceParameters W=10e-6 L=100e-9 modelParameters COISUB=0 SUB1=1 SVGS=1 SVDS=1 SUB1L=0.1 SUB2L=0.1 SLG=1 SVBS=1 test 7_dcSweep_COISUB=1 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 biasList V(g)=0.4,0.6,0.8,1.0,1.2,1.5,1.8 biasSweep V(d)=0.2,1.800000000001,0.1 outputs I(d) I(b) instanceParameters W=10e-6 L=100e-9 modelParameters COISUB=1 SUB1=1 SVGS=1 SVDS=1 SUB1L=0.1 SUB2L=0.1 SLG=1 SVBS=1 test 8_dcSweep_COIIGS=0 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 biasList V(g)=0.4,0.6,0.8,1.0,1.2,1.5,1.8 biasSweep V(d)=0.2,1.800000000001,0.1 outputs I(g) instanceParameters W=10e-6 L=100e-9 modelParameters COIIGS=0 test 9_dcSweep_COIIGS=1 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 biasList V(g)=0.4,0.6,0.8,1.0,1.2,1.5,1.8 biasSweep V(d)=0.2,1.800000000001,0.1 outputs I(g) instanceParameters W=10e-6 L=100e-9 modelParameters COIIGS=1 test 10_dcSweep_COGIDL=0 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 biasList V(g)=0.4,0.6,0.8,1.0,1.2,1.5,1.8 biasSweep V(d)=0.2,1.800000000001,0.1 outputs I(d) I(b) instanceParameters W=10e-6 L=100e-9 modelParameters COGIDL=1 GIDL6=-1.0 GIDL7=1.05 test 11_dcSweep_COGIDL=1 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 biasList V(g)=0.4,0.6,0.8,1.0,1.2,1.5,1.8 biasSweep V(d)=0.2,1.800000000001,0.1 outputs I(d) I(b) instanceParameters W=10e-6 L=100e-9 modelParameters COGIDL=1 GIDL6=-1.0 test 12_dcSweep_COGIDL=1 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 biasList V(g)=0.4,0.6,0.8,1.0,1.2,1.5,1.8 biasSweep V(d)=0.2,1.800000000001,0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 modelParameters COGIDL=1 GIDL7=1.05 test 13_dcSweep_COISTI=0 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 biasList V(g)=0.4,0.6,0.8,1.0,1.2,1.5,1.8 biasSweep V(d)=0.2,1.800000000001,0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 modelParameters COISTI=0 WSTI=0.1E-4 instanceParameters SA=1e-6 SB=2e-6 SD=1e-6 NF=5 modelParameters NSUBPSTI1=2e-6 NSUBPSTI2=1e-6 NSUBPSTI3=1.5 test 14_dcSweep_COISTI=1_NSUBC temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 biasList V(g)=0.4,0.6,0.8,1.0,1.2,1.5,1.8 biasSweep V(d)=0.2,1.800000000001,0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 modelParameters COISTI=1 WSTI=0.1E-4 instanceParameters SA=1e-6 SB=2e-6 SD=1e-6 NF=5 modelParameters NSUBCSTI1=2e-6 NSUBCSTI2=1e-6 NSUBCSTI3=1.4 test 15_dcSweep_COISTI=1_NSUBP temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 biasList V(g)=0.4,0.6,0.8,1.0,1.2,1.5,1.8 biasSweep V(d)=0.2,1.800000000001,0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 modelParameters COISTI=1 WSTI=0.1E-4 instanceParameters SA=1e-6 SB=2e-6 SD=1e-6 NF=2 modelParameters NSUBPSTI1=2e-6 NSUBPSTI2=1e-6 NSUBPSTI3=1.5 test 16_dcSweep_WPE temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 biasList V(g)=0.4,0.6,0.8,1.0,1.2,1.5,1.8 biasSweep V(d)=0.2,1.800000000001,0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 modelParameters WEB=-1200 WEC=-1200 NSUBCWPE=1E-16 NSUBPWPE=1E16 NPEXTWPE=1E16 instanceParameters SCA=4.244122e-01 SCB=2.561023e-09 SCC=3.215142e-18 test 19_dcSweep_CORG=0 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 biasList V(g)=0.4,0.6,0.8,1.0,1.2,1.5,1.8 biasSweep V(d)=0.2,1.800000000001,0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 NGCON=0.1 modelParameters CORG=0 RSHG=10 test 20_dcSweep_CORG=1 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 biasList V(g)=0.4,0.6,0.8,1.0,1.2,1.5,1.8 biasSweep V(d)=0.2,1.800000000001,0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 NGCON=0.1 modelParameters CORG=1 RSHG=10 test 21_dcSweep_CORBNET=0 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 biasList V(g)=0.4,0.6,0.8,1.0,1.2,1.5,1.8 biasSweep V(d)=0.2,1.800000000001,0.1 outputs I(d) I(b) instanceParameters W=10e-6 L=100e-9 modelParameters CORBNET=0 test 22_dcSweep_CORBNET=1 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 biasList V(g)=0.4,0.6,0.8,1.0,1.2,1.5,1.8 biasSweep V(d)=0.2,1.800000000001,0.1 outputs I(d) I(b) instanceParameters W=10e-6 L=100e-9 modelParameters CORBNET=1 test 23_dcSweep_CODFM=0 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 biasList V(g)=0.4,0.6,0.8,1.0,1.2,1.5,1.8 biasSweep V(d)=0.2,1.800000000001,0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 NSUBCDFM=1E17 modelParameters CODFM=0 test 24_dcSweep_CODFM=1 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 biasList V(g)=0.4,0.6,0.8,1.0,1.2,1.5,1.8 biasSweep V(d)=0.2,1.800000000001,0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 NSUBCDFM=1E17 modelParameters CODFM=1 test 25_dcSweep_VFBCL temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 biasList V(g)=0.4,0.6,0.8,1.0,1.2,1.5,1.8 biasSweep V(d)=0.2,1.800000000001,0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 modelParameters VFBCL=0.8 VFBCLP=1.2 test 35_acVd_CORSRD=0 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(g)=1.2 biasSweep V(d)=0.2,1.800000000001,0.1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters CORSRD=0 GDLD=0.001 test 36_acVd_CORSRD=-1_GDLD temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=-1.0 V(g)=1.2 biasSweep V(d)=0.2,1.800000000001,0.1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 instanceParameters NRD=1 NRS=0.1 modelParameters CORSRD=-1 RSH=10 GDLD=0.001 test 37_acVd_CORSRD=-1_PT temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0.5 V(g)=1.2 biasSweep V(d)=0.2,1.800000000001,0.1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 instanceParameters NRD=0.1 NRS=1 AD=1e-8 AS=1e-8 PD=1e-3 PS=1e-3 modelParameters CORSRD=-1 RSH=100 PT4P=0.1 test 38_acVd_WPE temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0.5 V(g)=1.2 biasSweep V(d)=0.2,1.800000000001,0.1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters WEB=-1200 WEC=-1200 NSUBCWPE=1E-16 NSUBPWPE=2E16 NPEXTWPE=3E16 instanceParameters SCA=4.25e-01 SCB=2.56e-09 SCC=3.2e-18 test 39_acVd_VFBCL temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0.5 V(g)=1.2 biasSweep V(d)=0.2,1.800000000001,0.1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=10e-6 L=500e-9 modelParameters VFBCL=0.8 VFBCLP=1.2 test 45_acFreq_COOVLP=1 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COOVLP=1 test 46_acFreq_COISUB=0 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COISUB=0 SUB1=1 SVGS=1 SVDS=1 SUB1L=0.1 SUB2L=0.1 SLG=1 SVBS=1 test 47_acFreq_COISUB=1 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COISUB=1 SUB1=1 SVGS=1 SVDS=1 SUB1L=0.1 SUB2L=0.1 SLG=1 SVBS=1 test 48_acFreq_COIIGS=0 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COIIGS=0 test 49_acFreq_COIIGS=1 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COIIGS=1 test 50_acFreq_COGIDL=0 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COGIDL=0 GIDL6=-1.0 GIDL7=1.05 test 51_acFreq_COGIDL=1 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COGIDL=1 GIDL6=-1.0 GIDL7=1.05 test 52_acFreq_COSTI=0 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COISTI=0 test 53_acFreq_COSTI=1 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COISTI=1 test 54_acFreq_COADOV=0 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COADOV=0 test 55_acFreq_COADOV=1 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COADOV=1 test 56_acFreq_CONQS=0 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters CONQS=0 test 57_acFreq_CONQS=1 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters CONQS=1 test 58_acFreq_CORG=0 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 NGCON=0.1 modelParameters CORG=0 RSHG=10 test 59_acFreq_CORG=1 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 NGCON=0.1 modelParameters CORG=1 RSHG=10 test 60_acFreq_CORBNET=0 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters CORBNET=0 test 61_acFreq_CORBNET=1 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters CORBNET=1 test 62_acFreq_COFLICK=0 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COFLICK=0 test 63_acFreq_COFLICK=1 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COFLICK=1 test 64_acFreq_COTHRML=0 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COTHRML=0 test 65_acFreq_COTHRML=1 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COTHRML=1 test 66_acFreq_COIGN=0 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COIGN=0 test 67_acFreq_COIGN=1 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COIGN=1 test 68_acFreq_WPE temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters WEB=-1200 WEC=-1200 NSUBCWPE=1E-16 NSUBPWPE=1E16 NPEXTWPE=1E16 instanceParameters SCA=4.25e-01 SCB=2.56e-09 SCC=3.2e-18 test 69_acFreq_CODFM=0 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 NSUBCDFM=1E17 modelParameters CODFM=0 test 70_acFreq_CODFM=1 temperature -55 27 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.5 V(g)=1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 NSUBCDFM=1E17 modelParameters CODFM=1 test 75_noise_COIGN=1_T27 temperature 27 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.0 biasList V(g)=0.5,1.0 freq dec 10 1e3 1e11 outputs N(g) instanceParameters W=10e-6 L=100e-9 modelParameters COIIGS=0 COTHRML=1 COIGN=1 test 76_noise_COIGN=1_T-55 temperature -55 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.0 biasList V(g)=0.5,1.0 freq dec 10 1e3 1e11 outputs N(g) instanceParameters W=10e-6 L=100e-9 modelParameters COIIGS=0 COTHRML=1 COIGN=1 test 77_noise_COIGN=1_T150 temperature 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.0 biasList V(g)=0.5,1.0 freq dec 10 1e3 1e11 outputs N(g) instanceParameters W=10e-6 L=100e-9 modelParameters COIIGS=0 COTHRML=1 COIGN=1 test 78_noise_COIGN=0_T27 temperature 27 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.0 biasList V(g)=0.5,1.0 freq dec 10 1e3 1e11 outputs N(g) instanceParameters W=10e-6 L=100e-9 modelParameters COIIGS=0 COTHRML=1 COIGN=0 COFLICK=1 FALPH=1.0 test 79_noise_COIGN=0_T-55 temperature -55 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.0 biasList V(g)=0.5,1.0 freq dec 10 1e3 1e11 outputs N(g) instanceParameters W=10e-6 L=100e-9 modelParameters COIIGS=0 COTHRML=1 COIGN=0 COFLICK=1 FALPH=1.0 test 80_noise_COIGN=0_T150 temperature 150 modelParameters parameters/nmosParameters biases V(s)=0 V(b)=0 V(d)=1.0 biasList V(g)=0.5,1.0 freq dec 10 1e3 1e11 outputs N(g) instanceParameters W=10e-6 L=100e-9 modelParameters COIIGS=0 COTHRML=1 COIGN=0 COFLICK=1 FALPH=1.0 tmpk8ny_4pz/tests/hisim/nmos/run0000755000175000017500000000023613546075722017142 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmpk8ny_4pz/tests/hisim/pmos/0000755000175000017500000000000013546075722016411 5ustar carstencarstentmpk8ny_4pz/tests/hisim/pmos/parameters/0000755000175000017500000000000013546075722020554 5ustar carstencarstentmpk8ny_4pz/tests/hisim/pmos/parameters/pmosParameters0000644000175000017500000000732513546075722023510 0ustar carstencarsten+ CORSRD = ( 0 ) + CORG = ( 0 ) + COADOV = ( 1 ) + COISUB = ( 0 ) + COIIGS = ( 0 ) + COGIDL = ( 0 ) + COOVLP = ( 1 ) + COFLICK = ( 0 ) + COISTI = ( 0 ) + CONQS = ( 0 ) + COTHRML = ( 0 ) + COIGN = ( 0 ) + CODFM = ( 0 ) + CORBNET = ( 0 ) + COQY = ( 0 ) + CORECIP = ( 1 ) + VMAX = ( 2.003E+06 ) + BGTMP1 = ( 0.000695 ) + BGTMP2 = ( -6.934E-07 ) + EG0 = ( 1.024 ) + TOX = ( 1.6E-09 ) + XLD = ( 3.88E-09 ) + LOVER = ( 1.9E-08 ) + DDLTMAX = ( 10 ) + DDLTSLP = ( 2.72 ) + DDLTICT = ( 1.278 ) + VFBOVER = ( 0.0 ) + NOVER = ( 1.7E+19 ) + XWD = ( -7.244E-09 ) + XL = ( 0 ) + XW = ( 0 ) + SAREF = ( 0 ) + SBREF = ( 0 ) + LL = ( 0 ) + LLD = ( 0 ) + LLN = ( 0 ) + WL = ( 0 ) + WL1 = ( 5.129E-08 ) + WL1P = ( 0 ) + WL2 = ( -0.0007244 ) + WL2P = ( 0.837 ) + WLD = ( 0 ) + WLN = ( 0 ) + RSH = ( 0 ) + RSHG = ( 0 ) + XQY = ( 10E-09 ) + XQY1 = ( 0 ) + XQY2 = ( 0 ) + RS = ( 5E-05 ) + RD = ( 5E-05 ) + VFBC = ( -0.9409 ) + VBI = ( 1.1 ) + NSUBC = ( 6.73E+16 ) + PARL2 = ( 3E-09 ) + LP = ( 1E-07 ) + NSUBP = ( 1.025E+18 ) + NSUBPW = ( -0.0007244 ) + NSUBPWP = ( 2.116 ) + SCP1 = ( 0 ) + SCP2 = ( 0 ) + SCP3 = ( 6.166E-08 ) + SC1 = ( 0 ) + SC2 = ( 0 ) + SC3 = ( 1.175E-07 ) + PGD1 = ( 0 ) + PGD2 = ( 0 ) + PGD4 = ( 0.129 ) + BB = ( 1 ) + NDEP = ( 0.7994 ) + NDEPL = ( 0.02291 ) + NDEPLP = ( 1.242 ) + NINV = ( 0.5 ) + MUECB0 = ( 1E+05 ) + MUECB1 = ( 6.95 ) + MUEPH0 = ( 0.3 ) + MUEPH1 = ( 5538 ) + MUEPHW = ( -0.1233 ) + MUEPWP = ( 0.2553 ) + MUEPHL = ( -0.7652 ) + MUEPLP = ( 3.774 ) + MUEPHS = ( 1.776E-07 ) + MUEPSP = ( 3 ) + VTMP = ( -0.8463 ) + WVTH0 = ( -0.00558 ) + MUESR0 = ( 2 ) + MUESR1 = ( 4.111E+14 ) + MUESRL = ( 0.001759 ) + MUESRW = ( -5.248E-06 ) + MUESWP = ( 3 ) + MUESLP = ( 1 ) + MUETMP = ( 0.9632 ) + SUB1 = ( 0 ) + SUB2 = ( 0 ) + SVGS = ( 0 ) + SVBS = ( 0 ) + SVBSL = ( 0 ) + SVDS = ( 0 ) + SLG = ( 0 ) + SUB1L = ( 0 ) + SUB2L = ( 0 ) + SVGSL = ( 0 ) + SVGSLP = ( 0 ) + SVGSWP = ( 0 ) + SVGSW = ( 0 ) + SVBSLP = ( 0 ) + SLGL = ( 0 ) + SLGLP = ( 0 ) + SUB1LP = ( 0 ) + NSTI = ( 5.176E+16 ) + WSTI = ( 0 ) + WSTIL = ( 0 ) + WSTILP = ( 0 ) + WSTIW = ( 0 ) + WSTIWP = ( 0 ) + SCSTI1 = ( 0 ) + SCSTI2 = ( 0 ) + VTHSTI = ( 0 ) + VDSTI = ( 0 ) + MUESTI1 = ( 0 ) + MUESTI2 = ( 0 ) + MUESTI3 = ( 0 ) + NSUBPSTI1 = ( 0 ) + NSUBPSTI2 = ( 0 ) + NSUBPSTI3 = ( 0 ) + LPEXT = ( 3.656E-06 ) + NPEXT = ( 2.809E+17 ) + SCP21 = ( 0.7031 ) + SCP22 = ( 0 ) + BS1 = ( 0 ) + BS2 = ( 0.9 ) + TPOLY = ( 0 ) + CGBO = ( 0 ) + CLM1 = ( 0.95 ) + CLM2 = ( 3.726 ) + CLM3 = ( 1 ) + CLM5 = ( 0.7568 ) + CLM6 = ( 16.51 ) + VOVER = ( 3.384 ) + VOVERP = ( 0.5 ) + WFC = ( 1E-14 ) + QME1 = ( 1E-12 ) + QME2 = ( 2.0 ) + QME3 = ( 0 ) + VOVERS = ( -0.1423 ) + VOVERSP = ( 0.3 ) + GIDL1 = ( 0.185 ) + GIDL2 = ( 1.4E+07 ) + GIDL3 = ( 0.88 ) + GIDL4 = ( 0.45 ) + GIDL5 = ( 0 ) + GLEAK1 = ( 1.15E+06 ) + GLEAK2 = ( 4.7E+07 ) + GLEAK3 = ( 0.07 ) + GLEAK4 = ( 0.3 ) + GLEAK5 = ( 1.1E+06 ) + GLEAK6 = ( 0.88 ) + GLEAK7 = ( 5.4E-07 ) + GLKSD1 = ( 5E-14 ) + GLKSD2 = ( 3.5E+06 ) + GLKSD3 = ( 0.55 ) + GLKB1 = ( 0 ) + GLKB2 = ( 0 ) + GLKB3 = ( 0 ) + EGIG = ( 0 ) + IGTEMP2 = ( 0 ) + IGTEMP3 = ( 0 ) + VZADD0 = ( 0.1 ) + PZADD0 = ( 0.1 ) + NFTRP = ( 0 ) + NFALP = ( 0 ) + CIT = ( 0 ) + KAPPA = ( 3.9 ) + CGSO = ( 0 ) + CGDO = ( 0 ) + TNOM = ( 25 ) + OVSLP = ( 2.318E-07 ) + OVMAG = ( 5.201 ) + IBPC1 = ( 0 ) + IBPC2 = ( 0 ) + DLY1 = ( 1.995E-09 ) + DLY2 = ( 0.195 ) + DLY3 = ( 8.511E-08 ) + GDL = ( 0.02028 ) + GDLP = ( 0.3548 ) + SC4 = ( 0 ) + MUEPLD = ( 1.0e-6 ) + NINVD = ( 0 ) + NSUBPL = ( 0.3483 ) + NSUBPFAC = ( 0.7309 ) + NSUBCW = ( 0 ) + NSUBCWP = ( 0 ) + NSUBCMAX = ( 1E+18 ) + QYRAT = ( 0.5 ) + PTL = ( 1.899 ) + PT2 = ( 6.931 ) + PTP = ( 4 ) + PTLP = ( 0.7645 ) + PT4 = ( 10 ) + PT4P = ( 0 ) + GDLD = ( 0 ) + MUEPHL2 = ( 0 ) + MUEPLP2 = ( 1 ) + NSUBCW2 = ( 0 ) + NSUBCWP2 = ( 1 ) + MUEPHW2 = ( 0 ) + MUEPWP2 = ( 1 ) + SC3VBS = ( -2.5 ) tmpk8ny_4pz/tests/hisim/pmos/reference/0000755000175000017500000000000013546075722020347 5ustar carstencarstentmpk8ny_4pz/tests/hisim/pmos/reference/7_dcSweep_COISUB=1.standard0000644000175000017500000003447413546075722025147 0ustar carstencarstenV(d) I(d) I(b) -2.000000e-01 -1.172852e-04 7.028908e-05 -3.000000e-01 -1.365443e-04 8.297984e-05 -4.000000e-01 -1.586244e-04 9.829218e-05 -5.000000e-01 -1.837526e-04 1.163033e-04 -6.000000e-01 -2.118185e-04 1.368943e-04 -7.000000e-01 -2.427316e-04 1.599893e-04 -8.000000e-01 -2.764973e-04 1.855986e-04 -9.000000e-01 -3.131935e-04 2.137952e-04 -1.000000e+00 -3.529413e-04 2.446901e-04 -1.100000e+00 -3.958881e-04 2.784177e-04 -1.200000e+00 -4.421988e-04 3.151281e-04 -1.300000e+00 -4.920519e-04 3.549841e-04 -1.400000e+00 -5.456385e-04 3.981598e-04 -1.500000e+00 -6.031616e-04 4.448406e-04 -1.600000e+00 -6.648367e-04 4.952231e-04 -1.700000e+00 -7.308928e-04 5.495161e-04 -1.800000e+00 -8.015727e-04 6.079412e-04 -2.000000e-01 -8.331983e-04 5.095030e-04 -3.000000e-01 -9.762189e-04 6.039347e-04 -4.000000e-01 -1.088298e-03 6.830796e-04 -5.000000e-01 -1.211124e-03 7.739309e-04 -6.000000e-01 -1.343185e-03 8.747349e-04 -7.000000e-01 -1.483409e-03 9.841042e-04 -8.000000e-01 -1.631455e-03 1.101389e-03 -9.000000e-01 -1.787397e-03 1.226428e-03 -1.000000e+00 -1.951511e-03 1.359328e-03 -1.100000e+00 -2.124158e-03 1.500325e-03 -1.200000e+00 -2.305729e-03 1.649716e-03 -1.300000e+00 -2.496618e-03 1.807823e-03 -1.400000e+00 -2.697222e-03 1.974983e-03 -1.500000e+00 -2.907937e-03 2.151543e-03 -1.600000e+00 -3.129163e-03 2.337859e-03 -1.700000e+00 -3.361303e-03 2.534295e-03 -1.800000e+00 -3.604768e-03 2.741226e-03 -2.000000e-01 -1.655057e-03 1.018815e-03 -3.000000e-01 -2.202781e-03 1.377571e-03 -4.000000e-01 -2.578698e-03 1.640209e-03 -5.000000e-01 -2.840829e-03 1.834063e-03 -6.000000e-01 -3.097512e-03 2.030601e-03 -7.000000e-01 -3.374711e-03 2.248920e-03 -8.000000e-01 -3.667756e-03 2.484500e-03 -9.000000e-01 -3.973348e-03 2.733932e-03 -1.000000e+00 -4.290104e-03 2.995526e-03 -1.100000e+00 -4.617797e-03 3.268719e-03 -1.200000e+00 -4.956739e-03 3.553524e-03 -1.300000e+00 -5.307450e-03 3.850214e-03 -1.400000e+00 -5.670497e-03 4.159160e-03 -1.500000e+00 -6.046443e-03 4.480769e-03 -1.600000e+00 -6.435827e-03 4.815455e-03 -1.700000e+00 -6.839159e-03 5.163626e-03 -1.800000e+00 -7.256927e-03 5.525690e-03 -2.000000e-01 -2.339651e-03 1.445359e-03 -3.000000e-01 -3.283324e-03 2.061630e-03 -4.000000e-01 -4.080191e-03 2.608894e-03 -5.000000e-01 -4.724058e-03 3.075173e-03 -6.000000e-01 -5.223761e-03 3.456572e-03 -7.000000e-01 -5.637266e-03 3.782353e-03 -8.000000e-01 -6.058064e-03 4.120930e-03 -9.000000e-01 -6.508868e-03 4.490935e-03 -1.000000e+00 -6.982911e-03 4.885681e-03 -1.100000e+00 -7.474652e-03 5.299698e-03 -1.200000e+00 -7.981222e-03 5.729990e-03 -1.300000e+00 -8.501555e-03 6.175259e-03 -1.400000e+00 -9.035540e-03 6.635128e-03 -1.500000e+00 -9.583499e-03 7.109669e-03 -1.600000e+00 -1.014594e-02 7.599160e-03 -1.700000e+00 -1.072342e-02 8.103964e-03 -1.800000e+00 -1.131650e-02 8.624480e-03 -2.000000e-01 -2.888669e-03 1.789008e-03 -3.000000e-01 -4.165304e-03 2.622306e-03 -4.000000e-01 -5.330077e-03 3.417719e-03 -5.000000e-01 -6.372668e-03 4.161720e-03 -6.000000e-01 -7.281015e-03 4.837752e-03 -7.000000e-01 -8.051290e-03 5.435042e-03 -8.000000e-01 -8.701377e-03 5.958114e-03 -9.000000e-01 -9.282850e-03 6.435504e-03 -1.000000e+00 -9.878247e-03 6.931381e-03 -1.100000e+00 -1.051189e-02 7.467101e-03 -1.200000e+00 -1.117536e-02 8.034110e-03 -1.300000e+00 -1.186140e-02 8.625247e-03 -1.400000e+00 -1.256597e-02 9.236470e-03 -1.500000e+00 -1.328725e-02 9.865823e-03 -1.600000e+00 -1.402458e-02 1.051249e-02 -1.700000e+00 -1.477794e-02 1.117626e-02 -1.800000e+00 -1.554760e-02 1.185719e-02 -2.000000e-01 -3.492012e-03 2.168724e-03 -3.000000e-01 -5.155863e-03 3.255084e-03 -4.000000e-01 -6.762670e-03 4.348806e-03 -5.000000e-01 -8.296246e-03 5.434191e-03 -6.000000e-01 -9.739075e-03 6.491764e-03 -7.000000e-01 -1.107685e-02 7.504086e-03 -8.000000e-01 -1.229989e-02 8.457642e-03 -9.000000e-01 -1.340549e-02 9.344709e-03 -1.000000e+00 -1.440201e-02 1.016624e-02 -1.100000e+00 -1.531101e-02 1.093333e-02 -1.200000e+00 -1.616971e-02 1.166863e-02 -1.300000e+00 -1.704066e-02 1.242087e-02 -1.400000e+00 -1.795682e-02 1.322015e-02 -1.500000e+00 -1.890997e-02 1.405790e-02 -1.600000e+00 -1.989134e-02 1.492533e-02 -1.700000e+00 -2.089597e-02 1.581748e-02 -1.800000e+00 -2.192133e-02 1.673181e-02 -2.000000e-01 -3.881343e-03 2.415661e-03 -3.000000e-01 -5.814136e-03 3.678405e-03 -4.000000e-01 -7.742962e-03 4.989594e-03 -5.000000e-01 -9.648150e-03 6.332995e-03 -6.000000e-01 -1.150709e-02 7.686755e-03 -7.000000e-01 -1.330064e-02 9.030705e-03 -8.000000e-01 -1.501438e-02 1.034832e-02 -9.000000e-01 -1.663803e-02 1.162666e-02 -1.000000e+00 -1.816525e-02 1.285626e-02 -1.100000e+00 -1.959458e-02 1.403186e-02 -1.200000e+00 -2.093103e-02 1.515361e-02 -1.300000e+00 -2.218703e-02 1.622776e-02 -1.400000e+00 -2.338174e-02 1.726620e-02 -1.500000e+00 -2.454078e-02 1.828600e-02 -1.600000e+00 -2.570218e-02 1.931514e-02 -1.700000e+00 -2.690357e-02 2.038638e-02 -1.800000e+00 -2.814547e-02 2.149973e-02 -2.000000e-01 -1.990026e-04 1.184648e-04 -3.000000e-01 -2.309365e-04 1.393125e-04 -4.000000e-01 -2.662635e-04 1.637638e-04 -5.000000e-01 -3.058735e-04 1.922187e-04 -6.000000e-01 -3.496572e-04 2.244783e-04 -7.000000e-01 -3.975014e-04 2.604019e-04 -8.000000e-01 -4.494153e-04 2.999797e-04 -9.000000e-01 -5.055061e-04 3.432981e-04 -1.000000e+00 -5.659395e-04 3.905013e-04 -1.100000e+00 -6.309153e-04 4.417669e-04 -1.200000e+00 -7.006544e-04 4.972937e-04 -1.300000e+00 -7.753940e-04 5.572970e-04 -1.400000e+00 -8.553851e-04 6.220052e-04 -1.500000e+00 -9.408925e-04 6.916601e-04 -1.600000e+00 -1.032195e-03 7.665168e-04 -1.700000e+00 -1.129586e-03 8.468440e-04 -1.800000e+00 -1.233375e-03 9.329254e-04 -2.000000e-01 -7.541177e-04 4.573637e-04 -3.000000e-01 -9.315588e-04 5.728257e-04 -4.000000e-01 -1.047596e-03 6.538359e-04 -5.000000e-01 -1.165084e-03 7.401614e-04 -6.000000e-01 -1.292023e-03 8.365988e-04 -7.000000e-01 -1.426788e-03 9.414169e-04 -8.000000e-01 -1.568628e-03 1.053642e-03 -9.000000e-01 -1.717469e-03 1.172960e-03 -1.000000e+00 -1.873552e-03 1.299411e-03 -1.100000e+00 -2.037235e-03 1.433203e-03 -1.200000e+00 -2.208908e-03 1.574611e-03 -1.300000e+00 -2.388964e-03 1.723939e-03 -1.400000e+00 -2.577787e-03 1.881501e-03 -1.500000e+00 -2.775756e-03 2.047619e-03 -1.600000e+00 -2.983245e-03 2.222619e-03 -1.700000e+00 -3.200627e-03 2.406834e-03 -1.800000e+00 -3.428279e-03 2.600603e-03 -2.000000e-01 -1.334988e-03 8.157656e-04 -3.000000e-01 -1.815175e-03 1.127215e-03 -4.000000e-01 -2.177476e-03 1.376339e-03 -5.000000e-01 -2.440730e-03 1.568691e-03 -6.000000e-01 -2.666082e-03 1.740408e-03 -7.000000e-01 -2.903558e-03 1.926655e-03 -8.000000e-01 -3.156980e-03 2.129618e-03 -9.000000e-01 -3.422703e-03 2.345807e-03 -1.000000e+00 -3.698656e-03 2.573093e-03 -1.100000e+00 -3.984143e-03 2.810581e-03 -1.200000e+00 -4.279197e-03 3.058078e-03 -1.300000e+00 -4.584171e-03 3.315725e-03 -1.400000e+00 -4.899534e-03 3.583807e-03 -1.500000e+00 -5.225779e-03 3.862670e-03 -1.600000e+00 -5.563394e-03 4.152674e-03 -1.700000e+00 -5.912846e-03 4.454186e-03 -1.800000e+00 -6.274582e-03 4.767569e-03 -2.000000e-01 -1.840802e-03 1.130018e-03 -3.000000e-01 -2.611010e-03 1.629517e-03 -4.000000e-01 -3.283259e-03 2.087222e-03 -5.000000e-01 -3.850368e-03 2.492943e-03 -6.000000e-01 -4.311944e-03 2.839740e-03 -7.000000e-01 -4.692636e-03 3.137749e-03 -8.000000e-01 -5.048749e-03 3.423447e-03 -9.000000e-01 -5.424635e-03 3.730923e-03 -1.000000e+00 -5.822927e-03 4.061543e-03 -1.100000e+00 -6.238465e-03 4.410338e-03 -1.200000e+00 -6.667931e-03 4.774079e-03 -1.300000e+00 -7.109810e-03 5.151181e-03 -1.400000e+00 -7.563637e-03 5.541034e-03 -1.500000e+00 -8.029479e-03 5.943530e-03 -1.600000e+00 -8.507652e-03 6.358811e-03 -1.700000e+00 -8.998581e-03 6.787140e-03 -1.800000e+00 -9.502728e-03 7.228834e-03 -2.000000e-01 -2.266133e-03 1.395779e-03 -3.000000e-01 -3.289685e-03 2.060144e-03 -4.000000e-01 -4.241194e-03 2.705895e-03 -5.000000e-01 -5.110149e-03 3.321432e-03 -6.000000e-01 -5.885110e-03 3.892876e-03 -7.000000e-01 -6.560338e-03 4.410305e-03 -8.000000e-01 -7.143666e-03 4.873744e-03 -9.000000e-01 -7.662048e-03 5.297394e-03 -1.000000e+00 -8.164068e-03 5.714635e-03 -1.100000e+00 -8.690706e-03 6.158536e-03 -1.200000e+00 -9.245077e-03 6.630944e-03 -1.300000e+00 -9.821086e-03 7.125858e-03 -1.400000e+00 -1.041459e-02 7.639255e-03 -1.500000e+00 -1.102345e-02 8.169027e-03 -1.600000e+00 -1.164674e-02 8.714192e-03 -1.700000e+00 -1.228421e-02 9.274365e-03 -1.800000e+00 -1.293590e-02 9.849484e-03 -2.000000e-01 -2.765650e-03 1.709904e-03 -3.000000e-01 -4.098181e-03 2.576175e-03 -4.000000e-01 -5.399565e-03 3.458038e-03 -5.000000e-01 -6.655799e-03 4.342816e-03 -6.000000e-01 -7.850842e-03 5.214042e-03 -7.000000e-01 -8.971473e-03 6.056885e-03 -8.000000e-01 -1.000872e-02 6.859932e-03 -9.000000e-01 -1.095912e-02 7.616282e-03 -1.000000e+00 -1.182704e-02 8.325270e-03 -1.100000e+00 -1.262635e-02 8.993764e-03 -1.200000e+00 -1.338050e-02 9.636357e-03 -1.300000e+00 -1.412426e-02 1.027772e-02 -1.400000e+00 -1.489294e-02 1.094655e-02 -1.500000e+00 -1.569393e-02 1.164872e-02 -1.600000e+00 -1.652141e-02 1.237821e-02 -1.700000e+00 -1.737075e-02 1.313045e-02 -1.800000e+00 -1.823938e-02 1.390295e-02 -2.000000e-01 -3.122399e-03 1.936093e-03 -3.000000e-01 -4.685358e-03 2.953699e-03 -4.000000e-01 -6.256263e-03 4.017931e-03 -5.000000e-01 -7.819891e-03 5.116555e-03 -6.000000e-01 -9.357030e-03 6.231698e-03 -7.000000e-01 -1.085067e-02 7.346331e-03 -8.000000e-01 -1.228771e-02 8.446323e-03 -9.000000e-01 -1.365877e-02 9.520633e-03 -1.000000e+00 -1.495807e-02 1.056126e-02 -1.100000e+00 -1.618378e-02 1.156359e-02 -1.200000e+00 -1.733895e-02 1.252709e-02 -1.300000e+00 -1.843216e-02 1.345582e-02 -1.400000e+00 -1.947710e-02 1.435818e-02 -1.500000e+00 -2.049171e-02 1.524624e-02 -1.600000e+00 -2.149843e-02 1.613606e-02 -1.700000e+00 -2.252282e-02 1.704744e-02 -1.800000e+00 -2.357819e-02 1.799127e-02 -2.000000e-01 -2.960746e-04 1.745436e-04 -3.000000e-01 -3.601336e-04 2.151541e-04 -4.000000e-01 -4.204899e-04 2.560502e-04 -5.000000e-01 -4.869574e-04 3.030630e-04 -6.000000e-01 -5.600763e-04 3.563132e-04 -7.000000e-01 -6.397021e-04 4.155682e-04 -8.000000e-01 -7.258677e-04 4.807949e-04 -9.000000e-01 -8.187615e-04 5.521234e-04 -1.000000e+00 -9.186582e-04 6.297779e-04 -1.100000e+00 -1.025878e-03 7.140344e-04 -1.200000e+00 -1.140765e-03 8.051990e-04 -1.300000e+00 -1.263684e-03 9.035992e-04 -1.400000e+00 -1.395014e-03 1.009580e-03 -1.500000e+00 -1.535148e-03 1.123501e-03 -1.600000e+00 -1.684498e-03 1.245742e-03 -1.700000e+00 -1.843493e-03 1.376695e-03 -1.800000e+00 -2.012579e-03 1.516775e-03 -2.000000e-01 -6.703689e-04 4.019823e-04 -3.000000e-01 -8.783842e-04 5.348976e-04 -4.000000e-01 -1.025956e-03 6.353838e-04 -5.000000e-01 -1.151187e-03 7.257746e-04 -6.000000e-01 -1.281357e-03 8.234339e-04 -7.000000e-01 -1.420526e-03 9.305374e-04 -8.000000e-01 -1.567679e-03 1.045925e-03 -9.000000e-01 -1.722246e-03 1.168900e-03 -1.000000e+00 -1.884230e-03 1.299301e-03 -1.100000e+00 -2.053915e-03 1.437255e-03 -1.200000e+00 -2.231690e-03 1.583015e-03 -1.300000e+00 -2.417966e-03 1.736887e-03 -1.400000e+00 -2.613159e-03 1.899197e-03 -1.500000e+00 -2.817670e-03 2.070281e-03 -1.600000e+00 -3.031899e-03 2.250476e-03 -1.700000e+00 -3.256235e-03 2.440125e-03 -1.800000e+00 -3.491070e-03 2.639575e-03 -2.000000e-01 -1.057025e-03 6.395301e-04 -3.000000e-01 -1.468412e-03 9.032799e-04 -4.000000e-01 -1.807383e-03 1.132545e-03 -5.000000e-01 -2.077832e-03 1.325885e-03 -6.000000e-01 -2.300638e-03 1.493149e-03 -7.000000e-01 -2.511753e-03 1.657307e-03 -8.000000e-01 -2.733544e-03 1.833847e-03 -9.000000e-01 -2.968083e-03 2.023605e-03 -1.000000e+00 -3.213270e-03 2.224496e-03 -1.100000e+00 -3.467784e-03 2.435200e-03 -1.200000e+00 -3.731187e-03 2.655186e-03 -1.300000e+00 -4.003534e-03 2.884372e-03 -1.400000e+00 -4.285110e-03 3.122904e-03 -1.500000e+00 -4.576298e-03 3.371034e-03 -1.600000e+00 -4.877510e-03 3.629060e-03 -1.700000e+00 -5.189163e-03 3.897300e-03 -1.800000e+00 -5.511666e-03 4.176080e-03 -2.000000e-01 -1.411390e-03 8.590830e-04 -3.000000e-01 -2.022460e-03 1.251932e-03 -4.000000e-01 -2.573714e-03 1.623555e-03 -5.000000e-01 -3.059632e-03 1.966778e-03 -6.000000e-01 -3.476960e-03 2.275030e-03 -7.000000e-01 -3.833712e-03 2.549656e-03 -8.000000e-01 -4.153402e-03 2.803980e-03 -9.000000e-01 -4.468602e-03 3.060540e-03 -1.000000e+00 -4.798832e-03 3.333663e-03 -1.100000e+00 -5.145476e-03 3.623645e-03 -1.200000e+00 -5.505825e-03 3.927804e-03 -1.300000e+00 -5.877991e-03 4.244333e-03 -1.400000e+00 -6.261085e-03 4.572338e-03 -1.500000e+00 -6.654833e-03 4.911475e-03 -1.600000e+00 -7.059291e-03 5.261704e-03 -1.700000e+00 -7.474689e-03 5.623145e-03 -1.800000e+00 -7.901343e-03 5.996003e-03 -2.000000e-01 -1.724244e-03 1.054285e-03 -3.000000e-01 -2.517555e-03 1.565559e-03 -4.000000e-01 -3.268260e-03 2.071295e-03 -5.000000e-01 -3.968205e-03 2.563051e-03 -6.000000e-01 -4.608402e-03 3.030498e-03 -7.000000e-01 -5.183503e-03 3.465821e-03 -8.000000e-01 -5.695684e-03 3.866911e-03 -9.000000e-01 -6.157509e-03 4.239665e-03 -1.000000e+00 -6.591565e-03 4.598316e-03 -1.100000e+00 -7.025693e-03 4.962951e-03 -1.200000e+00 -7.477402e-03 5.346823e-03 -1.300000e+00 -7.948381e-03 5.750466e-03 -1.400000e+00 -8.435853e-03 6.171037e-03 -1.500000e+00 -8.937661e-03 6.606471e-03 -1.600000e+00 -9.452623e-03 7.055631e-03 -1.700000e+00 -9.980191e-03 7.517960e-03 -1.800000e+00 -1.052019e-02 7.993234e-03 -2.000000e-01 -2.115268e-03 1.300150e-03 -3.000000e-01 -3.142670e-03 1.964411e-03 -4.000000e-01 -4.155567e-03 2.647117e-03 -5.000000e-01 -5.143758e-03 3.339280e-03 -6.000000e-01 -6.094587e-03 4.028385e-03 -7.000000e-01 -6.997420e-03 4.703016e-03 -8.000000e-01 -7.845050e-03 5.354438e-03 -9.000000e-01 -8.634298e-03 5.977212e-03 -1.000000e+00 -9.367039e-03 6.570002e-03 -1.100000e+00 -1.005111e-02 7.136298e-03 -1.200000e+00 -1.070001e-02 7.684312e-03 -1.300000e+00 -1.133168e-02 8.226224e-03 -1.400000e+00 -1.196623e-02 8.776740e-03 -1.500000e+00 -1.261846e-02 9.347130e-03 -1.600000e+00 -1.329200e-02 9.939623e-03 -1.700000e+00 -1.398511e-02 1.055216e-02 -1.800000e+00 -1.469580e-02 1.118274e-02 -2.000000e-01 -2.419718e-03 1.493325e-03 -3.000000e-01 -3.634317e-03 2.280727e-03 -4.000000e-01 -4.861638e-03 3.108809e-03 -5.000000e-01 -6.091233e-03 3.969243e-03 -6.000000e-01 -7.308479e-03 4.848639e-03 -7.000000e-01 -8.499880e-03 5.733842e-03 -8.000000e-01 -9.654813e-03 6.613797e-03 -9.000000e-01 -1.076569e-02 7.479894e-03 -1.000000e+00 -1.182783e-02 8.325957e-03 -1.100000e+00 -1.283959e-02 9.148373e-03 -1.200000e+00 -1.380270e-02 9.946388e-03 -1.300000e+00 -1.472258e-02 1.072232e-02 -1.400000e+00 -1.560798e-02 1.148137e-02 -1.500000e+00 -1.647021e-02 1.223095e-02 -1.600000e+00 -1.732200e-02 1.297988e-02 -1.700000e+00 -1.817666e-02 1.373773e-02 -1.800000e+00 -1.904565e-02 1.451296e-02 tmpk8ny_4pz/tests/hisim/pmos/reference/69_acFreq_CODFM=0.standard0000644000175000017500000002530213546075722024677 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1258.925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584.893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995.262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511.886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162.278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981.072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011.872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309.573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943.282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 10000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589.25 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848.93 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952.62 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118.86 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622.78 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810.72 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118.72 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095.73 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432.82 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 125892.5 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 158489.3 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 199526.2 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 251188.6 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 316227.8 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 398107.2 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 501187.2 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 630957.3 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 794328.2 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 1000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 1258925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 10000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589250 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848930 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952620 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118860 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622780 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810720 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118720 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095730 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432820 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258.925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584.893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995.262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511.886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162.278 2.08988054797393e-14 1.68486984597449e-14 3.40873274812869e-15 3981.072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011.872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309.573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943.282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589.25 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848.93 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952.62 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118.86 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622.78 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810.72 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118.72 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095.73 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432.82 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 125892.5 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 158489.3 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 199526.2 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 251188.6 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 316227.8 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 398107.2 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 501187.2 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 630957.3 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 794328.2 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 1000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162278 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 3981072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589250 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848930 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952620 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118860 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622780 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810720 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118720 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095730 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432820 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258.925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584.893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995.262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511.886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162.278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981.072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011.872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309.573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943.282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589.25 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848.93 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952.62 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118.86 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622.78 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810.72 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118.72 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095.73 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432.82 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 125892.5 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 158489.3 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 199526.2 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 251188.6 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 316227.8 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 398107.2 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 501187.2 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 630957.3 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 794328.2 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 1000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589250 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848930 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952620 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118860 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622780 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810720 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118720 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095730 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432820 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/22_dcSweep_CORBNET=1.standard0000644000175000017500000003447413546075722025334 0ustar carstencarstenV(d) I(d) I(b) -2.000000e-01 -4.699615e-05 2.000000e-16 -3.000000e-01 -5.356444e-05 3.000000e-16 -4.000000e-01 -6.033219e-05 4.000000e-16 -5.000000e-01 -6.744931e-05 5.000000e-16 -6.000000e-01 -7.492420e-05 6.000000e-16 -7.000000e-01 -8.274226e-05 7.000000e-16 -8.000000e-01 -9.089871e-05 8.000000e-16 -9.000000e-01 -9.939829e-05 9.000000e-16 -1.000000e+00 -1.082512e-04 1.000000e-15 -1.100000e+00 -1.174704e-04 1.100000e-15 -1.200000e+00 -1.270707e-04 1.200000e-15 -1.300000e+00 -1.370679e-04 1.300000e-15 -1.400000e+00 -1.474787e-04 1.400000e-15 -1.500000e+00 -1.583210e-04 1.500000e-15 -1.600000e+00 -1.696137e-04 1.600000e-15 -1.700000e+00 -1.813767e-04 1.700000e-15 -1.800000e+00 -1.936315e-04 1.800000e-15 -2.000000e-01 -3.236954e-04 2.000000e-16 -3.000000e-01 -3.722842e-04 3.000000e-16 -4.000000e-01 -4.052186e-04 4.000000e-16 -5.000000e-01 -4.371928e-04 5.000000e-16 -6.000000e-01 -4.684500e-04 6.000000e-16 -7.000000e-01 -4.993045e-04 7.000000e-16 -8.000000e-01 -5.300657e-04 8.000000e-16 -9.000000e-01 -5.609683e-04 9.000000e-16 -1.000000e+00 -5.921825e-04 1.000000e-15 -1.100000e+00 -6.238328e-04 1.100000e-15 -1.200000e+00 -6.560127e-04 1.200000e-15 -1.300000e+00 -6.887951e-04 1.300000e-15 -1.400000e+00 -7.222391e-04 1.400000e-15 -1.500000e+00 -7.563944e-04 1.500000e-15 -1.600000e+00 -7.913044e-04 1.600000e-15 -1.700000e+00 -8.270083e-04 1.700000e-15 -1.800000e+00 -8.635422e-04 1.800000e-15 -2.000000e-01 -6.362416e-04 2.000000e-16 -3.000000e-01 -8.252108e-04 3.000000e-16 -4.000000e-01 -9.384887e-04 4.000000e-16 -5.000000e-01 -1.006766e-03 5.000000e-16 -6.000000e-01 -1.066911e-03 6.000000e-16 -7.000000e-01 -1.125791e-03 7.000000e-16 -8.000000e-01 -1.183256e-03 8.000000e-16 -9.000000e-01 -1.239416e-03 9.000000e-16 -1.000000e+00 -1.294578e-03 1.000000e-15 -1.100000e+00 -1.349078e-03 1.100000e-15 -1.200000e+00 -1.403215e-03 1.200000e-15 -1.300000e+00 -1.457236e-03 1.300000e-15 -1.400000e+00 -1.511337e-03 1.400000e-15 -1.500000e+00 -1.565674e-03 1.500000e-15 -1.600000e+00 -1.620372e-03 1.600000e-15 -1.700000e+00 -1.675532e-03 1.700000e-15 -1.800000e+00 -1.731237e-03 1.800000e-15 -2.000000e-01 -8.942919e-04 2.000000e-16 -3.000000e-01 -1.221693e-03 3.000000e-16 -4.000000e-01 -1.471297e-03 4.000000e-16 -5.000000e-01 -1.648885e-03 5.000000e-16 -6.000000e-01 -1.767189e-03 6.000000e-16 -7.000000e-01 -1.854914e-03 7.000000e-16 -8.000000e-01 -1.937134e-03 8.000000e-16 -9.000000e-01 -2.017933e-03 9.000000e-16 -1.000000e+00 -2.097230e-03 1.000000e-15 -1.100000e+00 -2.174954e-03 1.100000e-15 -1.200000e+00 -2.251232e-03 1.200000e-15 -1.300000e+00 -2.326297e-03 1.300000e-15 -1.400000e+00 -2.400412e-03 1.400000e-15 -1.500000e+00 -2.473830e-03 1.500000e-15 -1.600000e+00 -2.546779e-03 1.600000e-15 -1.700000e+00 -2.619455e-03 1.700000e-15 -1.800000e+00 -2.692024e-03 1.800000e-15 -2.000000e-01 -1.099660e-03 2.000000e-16 -3.000000e-01 -1.542998e-03 3.000000e-16 -4.000000e-01 -1.912357e-03 4.000000e-16 -5.000000e-01 -2.210948e-03 5.000000e-16 -6.000000e-01 -2.443263e-03 6.000000e-16 -7.000000e-01 -2.616248e-03 7.000000e-16 -8.000000e-01 -2.743263e-03 8.000000e-16 -9.000000e-01 -2.847346e-03 9.000000e-16 -1.000000e+00 -2.946865e-03 1.000000e-15 -1.100000e+00 -3.044792e-03 1.100000e-15 -1.200000e+00 -3.141252e-03 1.200000e-15 -1.300000e+00 -3.236151e-03 1.300000e-15 -1.400000e+00 -3.329502e-03 1.400000e-15 -1.500000e+00 -3.421422e-03 1.500000e-15 -1.600000e+00 -3.512085e-03 1.600000e-15 -1.700000e+00 -3.601685e-03 1.700000e-15 -1.800000e+00 -3.690419e-03 1.800000e-15 -2.000000e-01 -1.323288e-03 2.000000e-16 -3.000000e-01 -1.900779e-03 3.000000e-16 -4.000000e-01 -2.413864e-03 4.000000e-16 -5.000000e-01 -2.862055e-03 5.000000e-16 -6.000000e-01 -3.247311e-03 6.000000e-16 -7.000000e-01 -3.572769e-03 7.000000e-16 -8.000000e-01 -3.842246e-03 8.000000e-16 -9.000000e-01 -4.060779e-03 9.000000e-16 -1.000000e+00 -4.235768e-03 1.000000e-15 -1.100000e+00 -4.377686e-03 1.100000e-15 -1.200000e+00 -4.501075e-03 1.200000e-15 -1.300000e+00 -4.619790e-03 1.300000e-15 -1.400000e+00 -4.736666e-03 1.400000e-15 -1.500000e+00 -4.852063e-03 1.500000e-15 -1.600000e+00 -4.966006e-03 1.600000e-15 -1.700000e+00 -5.078485e-03 1.700000e-15 -1.800000e+00 -5.189527e-03 1.800000e-15 -2.000000e-01 -1.465681e-03 2.000000e-16 -3.000000e-01 -2.135731e-03 3.000000e-16 -4.000000e-01 -2.753367e-03 4.000000e-16 -5.000000e-01 -3.315155e-03 5.000000e-16 -6.000000e-01 -3.820331e-03 6.000000e-16 -7.000000e-01 -4.269931e-03 7.000000e-16 -8.000000e-01 -4.666054e-03 8.000000e-16 -9.000000e-01 -5.011370e-03 9.000000e-16 -1.000000e+00 -5.308993e-03 1.000000e-15 -1.100000e+00 -5.562716e-03 1.100000e-15 -1.200000e+00 -5.777420e-03 1.200000e-15 -1.300000e+00 -5.959268e-03 1.300000e-15 -1.400000e+00 -6.115539e-03 1.400000e-15 -1.500000e+00 -6.254781e-03 1.500000e-15 -1.600000e+00 -6.387042e-03 1.600000e-15 -1.700000e+00 -6.517185e-03 1.700000e-15 -1.800000e+00 -6.645738e-03 1.800000e-15 -2.000000e-01 -8.053777e-05 2.000000e-16 -3.000000e-01 -9.162409e-05 3.000000e-16 -4.000000e-01 -1.024997e-04 4.000000e-16 -5.000000e-01 -1.136548e-04 5.000000e-16 -6.000000e-01 -1.251789e-04 6.000000e-16 -7.000000e-01 -1.370995e-04 7.000000e-16 -8.000000e-01 -1.494356e-04 8.000000e-16 -9.000000e-01 -1.622080e-04 9.000000e-16 -1.000000e+00 -1.754382e-04 1.000000e-15 -1.100000e+00 -1.891484e-04 1.100000e-15 -1.200000e+00 -2.033607e-04 1.200000e-15 -1.300000e+00 -2.180970e-04 1.300000e-15 -1.400000e+00 -2.333799e-04 1.400000e-15 -1.500000e+00 -2.492324e-04 1.500000e-15 -1.600000e+00 -2.656781e-04 1.600000e-15 -1.700000e+00 -2.827418e-04 1.700000e-15 -1.800000e+00 -3.004492e-04 1.800000e-15 -2.000000e-01 -2.967540e-04 2.000000e-16 -3.000000e-01 -3.587330e-04 3.000000e-16 -4.000000e-01 -3.937602e-04 4.000000e-16 -5.000000e-01 -4.249225e-04 5.000000e-16 -6.000000e-01 -4.554245e-04 6.000000e-16 -7.000000e-01 -4.853715e-04 7.000000e-16 -8.000000e-01 -5.149862e-04 8.000000e-16 -9.000000e-01 -5.445097e-04 9.000000e-16 -1.000000e+00 -5.741407e-04 1.000000e-15 -1.100000e+00 -6.040315e-04 1.100000e-15 -1.200000e+00 -6.342969e-04 1.200000e-15 -1.300000e+00 -6.650254e-04 1.300000e-15 -1.400000e+00 -6.962867e-04 1.400000e-15 -1.500000e+00 -7.281374e-04 1.500000e-15 -1.600000e+00 -7.606255e-04 1.600000e-15 -1.700000e+00 -7.937927e-04 1.700000e-15 -1.800000e+00 -8.276765e-04 1.800000e-15 -2.000000e-01 -5.192224e-04 2.000000e-16 -3.000000e-01 -6.879597e-04 3.000000e-16 -4.000000e-01 -8.011363e-04 4.000000e-16 -5.000000e-01 -8.720396e-04 5.000000e-16 -6.000000e-01 -9.256745e-04 6.000000e-16 -7.000000e-01 -9.769033e-04 7.000000e-16 -8.000000e-01 -1.027362e-03 8.000000e-16 -9.000000e-01 -1.076896e-03 9.000000e-16 -1.000000e+00 -1.125564e-03 1.000000e-15 -1.100000e+00 -1.173562e-03 1.100000e-15 -1.200000e+00 -1.221119e-03 1.200000e-15 -1.300000e+00 -1.268446e-03 1.300000e-15 -1.400000e+00 -1.315726e-03 1.400000e-15 -1.500000e+00 -1.363110e-03 1.500000e-15 -1.600000e+00 -1.410721e-03 1.600000e-15 -1.700000e+00 -1.458660e-03 1.700000e-15 -1.800000e+00 -1.507013e-03 1.800000e-15 -2.000000e-01 -7.107833e-04 2.000000e-16 -3.000000e-01 -9.814930e-04 3.000000e-16 -4.000000e-01 -1.196037e-03 4.000000e-16 -5.000000e-01 -1.357425e-03 5.000000e-16 -6.000000e-01 -1.472204e-03 6.000000e-16 -7.000000e-01 -1.554887e-03 7.000000e-16 -8.000000e-01 -1.625302e-03 8.000000e-16 -9.000000e-01 -1.693712e-03 9.000000e-16 -1.000000e+00 -1.761384e-03 1.000000e-15 -1.100000e+00 -1.828127e-03 1.100000e-15 -1.200000e+00 -1.893853e-03 1.200000e-15 -1.300000e+00 -1.958629e-03 1.300000e-15 -1.400000e+00 -2.022603e-03 1.400000e-15 -1.500000e+00 -2.085948e-03 1.500000e-15 -1.600000e+00 -2.148840e-03 1.600000e-15 -1.700000e+00 -2.211441e-03 1.700000e-15 -1.800000e+00 -2.273894e-03 1.800000e-15 -2.000000e-01 -8.703534e-04 2.000000e-16 -3.000000e-01 -1.229542e-03 3.000000e-16 -4.000000e-01 -1.535299e-03 4.000000e-16 -5.000000e-01 -1.788717e-03 5.000000e-16 -6.000000e-01 -1.992234e-03 6.000000e-16 -7.000000e-01 -2.150032e-03 7.000000e-16 -8.000000e-01 -2.269922e-03 8.000000e-16 -9.000000e-01 -2.364654e-03 9.000000e-16 -1.000000e+00 -2.449433e-03 1.000000e-15 -1.100000e+00 -2.532170e-03 1.100000e-15 -1.200000e+00 -2.614133e-03 1.200000e-15 -1.300000e+00 -2.695229e-03 1.300000e-15 -1.400000e+00 -2.775330e-03 1.400000e-15 -1.500000e+00 -2.854418e-03 1.500000e-15 -1.600000e+00 -2.932552e-03 1.600000e-15 -1.700000e+00 -3.009841e-03 1.700000e-15 -1.800000e+00 -3.086415e-03 1.800000e-15 -2.000000e-01 -1.055746e-03 2.000000e-16 -3.000000e-01 -1.522006e-03 3.000000e-16 -4.000000e-01 -1.941527e-03 4.000000e-16 -5.000000e-01 -2.312983e-03 5.000000e-16 -6.000000e-01 -2.636801e-03 6.000000e-16 -7.000000e-01 -2.914587e-03 7.000000e-16 -8.000000e-01 -3.148785e-03 8.000000e-16 -9.000000e-01 -3.342837e-03 9.000000e-16 -1.000000e+00 -3.501773e-03 1.000000e-15 -1.100000e+00 -3.632590e-03 1.100000e-15 -1.200000e+00 -3.744148e-03 1.200000e-15 -1.300000e+00 -3.846545e-03 1.300000e-15 -1.400000e+00 -3.946382e-03 1.400000e-15 -1.500000e+00 -4.045210e-03 1.500000e-15 -1.600000e+00 -4.143203e-03 1.600000e-15 -1.700000e+00 -4.240296e-03 1.700000e-15 -1.800000e+00 -4.336435e-03 1.800000e-15 -2.000000e-01 -1.186306e-03 2.000000e-16 -3.000000e-01 -1.731660e-03 3.000000e-16 -4.000000e-01 -2.238332e-03 4.000000e-16 -5.000000e-01 -2.703337e-03 5.000000e-16 -6.000000e-01 -3.125332e-03 6.000000e-16 -7.000000e-01 -3.504342e-03 7.000000e-16 -8.000000e-01 -3.841383e-03 8.000000e-16 -9.000000e-01 -4.138137e-03 9.000000e-16 -1.000000e+00 -4.396808e-03 1.000000e-15 -1.100000e+00 -4.620185e-03 1.100000e-15 -1.200000e+00 -4.811857e-03 1.200000e-15 -1.300000e+00 -4.976335e-03 1.300000e-15 -1.400000e+00 -5.118917e-03 1.400000e-15 -1.500000e+00 -5.245465e-03 1.500000e-15 -1.600000e+00 -5.362370e-03 1.600000e-15 -1.700000e+00 -5.475384e-03 1.700000e-15 -1.800000e+00 -5.586920e-03 1.800000e-15 -2.000000e-01 -1.215310e-04 2.000000e-16 -3.000000e-01 -1.449795e-04 3.000000e-16 -4.000000e-01 -1.644397e-04 4.000000e-16 -5.000000e-01 -1.838944e-04 5.000000e-16 -6.000000e-01 -2.037631e-04 6.000000e-16 -7.000000e-01 -2.241339e-04 7.000000e-16 -8.000000e-01 -2.450728e-04 8.000000e-16 -9.000000e-01 -2.666381e-04 9.000000e-16 -1.000000e+00 -2.888803e-04 1.000000e-15 -1.100000e+00 -3.118434e-04 1.100000e-15 -1.200000e+00 -3.355664e-04 1.200000e-15 -1.300000e+00 -3.600852e-04 1.300000e-15 -1.400000e+00 -3.854342e-04 1.400000e-15 -1.500000e+00 -4.116469e-04 1.500000e-15 -1.600000e+00 -4.387567e-04 1.600000e-15 -1.700000e+00 -4.667976e-04 1.700000e-15 -1.800000e+00 -4.958045e-04 1.800000e-15 -2.000000e-01 -2.683866e-04 2.000000e-16 -3.000000e-01 -3.434866e-04 3.000000e-16 -4.000000e-01 -3.905718e-04 4.000000e-16 -5.000000e-01 -4.254121e-04 5.000000e-16 -6.000000e-01 -4.579229e-04 6.000000e-16 -7.000000e-01 -4.899888e-04 7.000000e-16 -8.000000e-01 -5.217546e-04 8.000000e-16 -9.000000e-01 -5.533460e-04 9.000000e-16 -1.000000e+00 -5.849287e-04 1.000000e-15 -1.100000e+00 -6.166606e-04 1.100000e-15 -1.200000e+00 -6.486752e-04 1.200000e-15 -1.300000e+00 -6.810800e-04 1.300000e-15 -1.400000e+00 -7.139613e-04 1.400000e-15 -1.500000e+00 -7.473894e-04 1.500000e-15 -1.600000e+00 -7.814225e-04 1.600000e-15 -1.700000e+00 -8.161101e-04 1.700000e-15 -1.800000e+00 -8.514956e-04 1.800000e-15 -2.000000e-01 -4.174948e-04 2.000000e-16 -3.000000e-01 -5.651320e-04 3.000000e-16 -4.000000e-01 -6.748377e-04 4.000000e-16 -5.000000e-01 -7.519469e-04 5.000000e-16 -6.000000e-01 -8.074889e-04 6.000000e-16 -7.000000e-01 -8.544460e-04 7.000000e-16 -8.000000e-01 -8.996975e-04 8.000000e-16 -9.000000e-01 -9.444786e-04 9.000000e-16 -1.000000e+00 -9.887737e-04 1.000000e-15 -1.100000e+00 -1.032583e-03 1.100000e-15 -1.200000e+00 -1.076001e-03 1.200000e-15 -1.300000e+00 -1.119162e-03 1.300000e-15 -1.400000e+00 -1.162206e-03 1.400000e-15 -1.500000e+00 -1.205264e-03 1.500000e-15 -1.600000e+00 -1.248450e-03 1.600000e-15 -1.700000e+00 -1.291863e-03 1.700000e-15 -1.800000e+00 -1.335586e-03 1.800000e-15 -2.000000e-01 -5.523075e-04 2.000000e-16 -3.000000e-01 -7.705283e-04 3.000000e-16 -4.000000e-01 -9.501590e-04 4.000000e-16 -5.000000e-01 -1.092854e-03 5.000000e-16 -6.000000e-01 -1.201930e-03 6.000000e-16 -7.000000e-01 -1.284056e-03 7.000000e-16 -8.000000e-01 -1.349422e-03 8.000000e-16 -9.000000e-01 -1.408062e-03 9.000000e-16 -1.000000e+00 -1.465169e-03 1.000000e-15 -1.100000e+00 -1.521831e-03 1.100000e-15 -1.200000e+00 -1.578020e-03 1.200000e-15 -1.300000e+00 -1.633658e-03 1.300000e-15 -1.400000e+00 -1.688747e-03 1.400000e-15 -1.500000e+00 -1.743357e-03 1.500000e-15 -1.600000e+00 -1.797587e-03 1.600000e-15 -1.700000e+00 -1.851545e-03 1.700000e-15 -1.800000e+00 -1.905340e-03 1.800000e-15 -2.000000e-01 -6.699586e-04 2.000000e-16 -3.000000e-01 -9.519966e-04 3.000000e-16 -4.000000e-01 -1.196965e-03 4.000000e-16 -5.000000e-01 -1.405155e-03 5.000000e-16 -6.000000e-01 -1.577904e-03 6.000000e-16 -7.000000e-01 -1.717682e-03 7.000000e-16 -8.000000e-01 -1.828773e-03 8.000000e-16 -9.000000e-01 -1.917844e-03 9.000000e-16 -1.000000e+00 -1.993249e-03 1.000000e-15 -1.100000e+00 -2.062742e-03 1.100000e-15 -1.200000e+00 -2.130579e-03 1.200000e-15 -1.300000e+00 -2.197915e-03 1.300000e-15 -1.400000e+00 -2.264816e-03 1.400000e-15 -1.500000e+00 -2.331190e-03 1.500000e-15 -1.600000e+00 -2.396992e-03 1.600000e-15 -1.700000e+00 -2.462231e-03 1.700000e-15 -1.800000e+00 -2.526956e-03 1.800000e-15 -2.000000e-01 -8.151175e-04 2.000000e-16 -3.000000e-01 -1.178259e-03 3.000000e-16 -4.000000e-01 -1.508450e-03 4.000000e-16 -5.000000e-01 -1.804478e-03 5.000000e-16 -6.000000e-01 -2.066202e-03 6.000000e-16 -7.000000e-01 -2.294404e-03 7.000000e-16 -8.000000e-01 -2.490612e-03 8.000000e-16 -9.000000e-01 -2.657086e-03 9.000000e-16 -1.000000e+00 -2.797037e-03 1.000000e-15 -1.100000e+00 -2.914811e-03 1.100000e-15 -1.200000e+00 -3.015698e-03 1.200000e-15 -1.300000e+00 -3.105458e-03 1.300000e-15 -1.400000e+00 -3.189490e-03 1.400000e-15 -1.500000e+00 -3.271330e-03 1.500000e-15 -1.600000e+00 -3.352374e-03 1.600000e-15 -1.700000e+00 -3.432950e-03 1.700000e-15 -1.800000e+00 -3.513054e-03 1.800000e-15 -2.000000e-01 -9.263926e-04 2.000000e-16 -3.000000e-01 -1.353590e-03 3.000000e-16 -4.000000e-01 -1.752829e-03 4.000000e-16 -5.000000e-01 -2.121990e-03 5.000000e-16 -6.000000e-01 -2.459839e-03 6.000000e-16 -7.000000e-01 -2.766039e-03 7.000000e-16 -8.000000e-01 -3.041016e-03 8.000000e-16 -9.000000e-01 -3.285795e-03 9.000000e-16 -1.000000e+00 -3.501875e-03 1.000000e-15 -1.100000e+00 -3.691217e-03 1.100000e-15 -1.200000e+00 -3.856317e-03 1.200000e-15 -1.300000e+00 -4.000255e-03 1.300000e-15 -1.400000e+00 -4.126613e-03 1.400000e-15 -1.500000e+00 -4.239259e-03 1.500000e-15 -1.600000e+00 -4.342117e-03 1.600000e-15 -1.700000e+00 -4.438929e-03 1.700000e-15 -1.800000e+00 -4.532697e-03 1.800000e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/13_dcSweep_COISTI=0.standard0000644000175000017500000002342613546075722025224 0ustar carstencarstenV(d) I(d) -2.000000e-01 -7.671720e-05 -3.000000e-01 -8.750760e-05 -4.000000e-01 -9.839927e-05 -5.000000e-01 -1.096746e-04 -6.000000e-01 -1.214329e-04 -7.000000e-01 -1.337036e-04 -8.000000e-01 -1.465092e-04 -9.000000e-01 -1.598760e-04 -1.000000e+00 -1.738341e-04 -1.100000e+00 -1.884156e-04 -1.200000e+00 -2.036541e-04 -1.300000e+00 -2.195848e-04 -1.400000e+00 -2.362445e-04 -1.500000e+00 -2.536722e-04 -1.600000e+00 -2.719089e-04 -1.700000e+00 -2.909984e-04 -1.800000e+00 -3.109877e-04 -2.000000e-01 -3.735170e-04 -3.000000e-01 -4.411706e-04 -4.000000e-01 -4.820511e-04 -5.000000e-01 -5.213854e-04 -6.000000e-01 -5.599214e-04 -7.000000e-01 -5.978262e-04 -8.000000e-01 -6.354516e-04 -9.000000e-01 -6.731147e-04 -1.000000e+00 -7.110618e-04 -1.100000e+00 -7.494784e-04 -1.200000e+00 -7.885051e-04 -1.300000e+00 -8.282518e-04 -1.400000e+00 -8.688068e-04 -1.500000e+00 -9.102444e-04 -1.600000e+00 -9.526286e-04 -1.700000e+00 -9.960171e-04 -1.800000e+00 -1.040463e-03 -2.000000e-01 -6.731124e-04 -3.000000e-01 -8.831757e-04 -4.000000e-01 -1.018174e-03 -5.000000e-01 -1.100156e-03 -6.000000e-01 -1.167342e-03 -7.000000e-01 -1.233273e-03 -8.000000e-01 -1.298048e-03 -9.000000e-01 -1.361519e-03 -1.000000e+00 -1.423865e-03 -1.100000e+00 -1.485391e-03 -1.200000e+00 -1.546414e-03 -1.300000e+00 -1.607213e-03 -1.400000e+00 -1.668022e-03 -1.500000e+00 -1.729031e-03 -1.600000e+00 -1.790396e-03 -1.700000e+00 -1.852244e-03 -1.800000e+00 -1.914680e-03 -2.000000e-01 -9.194967e-04 -3.000000e-01 -1.260861e-03 -4.000000e-01 -1.526052e-03 -5.000000e-01 -1.721399e-03 -6.000000e-01 -1.856905e-03 -7.000000e-01 -1.954409e-03 -8.000000e-01 -2.042273e-03 -9.000000e-01 -2.128766e-03 -1.000000e+00 -2.214102e-03 -1.100000e+00 -2.298049e-03 -1.200000e+00 -2.380586e-03 -1.300000e+00 -2.461862e-03 -1.400000e+00 -2.542097e-03 -1.500000e+00 -2.621535e-03 -1.600000e+00 -2.700407e-03 -1.700000e+00 -2.778923e-03 -1.800000e+00 -2.857264e-03 -2.000000e-01 -1.116167e-03 -3.000000e-01 -1.567927e-03 -4.000000e-01 -1.946271e-03 -5.000000e-01 -2.255360e-03 -6.000000e-01 -2.500430e-03 -7.000000e-01 -2.687940e-03 -8.000000e-01 -2.828405e-03 -9.000000e-01 -2.939745e-03 -1.000000e+00 -3.043431e-03 -1.100000e+00 -3.145591e-03 -1.200000e+00 -3.246577e-03 -1.300000e+00 -3.346242e-03 -1.400000e+00 -3.444497e-03 -1.500000e+00 -3.541373e-03 -1.600000e+00 -3.636987e-03 -1.700000e+00 -3.731498e-03 -1.800000e+00 -3.825086e-03 -2.000000e-01 -1.331406e-03 -3.000000e-01 -1.911876e-03 -4.000000e-01 -2.427318e-03 -5.000000e-01 -2.878016e-03 -6.000000e-01 -3.266738e-03 -7.000000e-01 -3.597327e-03 -8.000000e-01 -3.874049e-03 -9.000000e-01 -4.101811e-03 -1.000000e+00 -4.287040e-03 -1.100000e+00 -4.438398e-03 -1.200000e+00 -4.567288e-03 -1.300000e+00 -4.688091e-03 -1.400000e+00 -4.807259e-03 -1.500000e+00 -4.925123e-03 -1.600000e+00 -5.041746e-03 -1.700000e+00 -5.157081e-03 -1.800000e+00 -5.271108e-03 -2.000000e-01 -1.469381e-03 -3.000000e-01 -2.139572e-03 -4.000000e-01 -2.755963e-03 -5.000000e-01 -3.315680e-03 -6.000000e-01 -3.818670e-03 -7.000000e-01 -4.266639e-03 -8.000000e-01 -4.662262e-03 -9.000000e-01 -5.008667e-03 -1.000000e+00 -5.309239e-03 -1.100000e+00 -5.567743e-03 -1.200000e+00 -5.788646e-03 -1.300000e+00 -5.977359e-03 -1.400000e+00 -6.140184e-03 -1.500000e+00 -6.284185e-03 -1.600000e+00 -6.417784e-03 -1.700000e+00 -6.548574e-03 -1.800000e+00 -6.677946e-03 -2.000000e-01 -1.119629e-04 -3.000000e-01 -1.283640e-04 -4.000000e-01 -1.440160e-04 -5.000000e-01 -1.598812e-04 -6.000000e-01 -1.761382e-04 -7.000000e-01 -1.928897e-04 -8.000000e-01 -2.102071e-04 -9.000000e-01 -2.281484e-04 -1.000000e+00 -2.467648e-04 -1.100000e+00 -2.661027e-04 -1.200000e+00 -2.862065e-04 -1.300000e+00 -3.071193e-04 -1.400000e+00 -3.288841e-04 -1.500000e+00 -3.515448e-04 -1.600000e+00 -3.751467e-04 -1.700000e+00 -3.997370e-04 -1.800000e+00 -4.253653e-04 -2.000000e-01 -3.330469e-04 -3.000000e-01 -4.129017e-04 -4.000000e-01 -4.581474e-04 -5.000000e-01 -4.958055e-04 -6.000000e-01 -5.328842e-04 -7.000000e-01 -5.694311e-04 -8.000000e-01 -6.055474e-04 -9.000000e-01 -6.414763e-04 -1.000000e+00 -6.774617e-04 -1.100000e+00 -7.137069e-04 -1.200000e+00 -7.503730e-04 -1.300000e+00 -7.875867e-04 -1.400000e+00 -8.254492e-04 -1.500000e+00 -8.640435e-04 -1.600000e+00 -9.034397e-04 -1.700000e+00 -9.436992e-04 -1.800000e+00 -9.848767e-04 -2.000000e-01 -5.465604e-04 -3.000000e-01 -7.315495e-04 -4.000000e-01 -8.620827e-04 -5.000000e-01 -9.477369e-04 -6.000000e-01 -1.009643e-03 -7.000000e-01 -1.066914e-03 -8.000000e-01 -1.123705e-03 -9.000000e-01 -1.179826e-03 -1.000000e+00 -1.235142e-03 -1.100000e+00 -1.289752e-03 -1.200000e+00 -1.343849e-03 -1.300000e+00 -1.397650e-03 -1.400000e+00 -1.451354e-03 -1.500000e+00 -1.505137e-03 -1.600000e+00 -1.559146e-03 -1.700000e+00 -1.613507e-03 -1.800000e+00 -1.668323e-03 -2.000000e-01 -7.297485e-04 -3.000000e-01 -1.011999e-03 -4.000000e-01 -1.239455e-03 -5.000000e-01 -1.415301e-03 -6.000000e-01 -1.544942e-03 -7.000000e-01 -1.639449e-03 -8.000000e-01 -1.716588e-03 -9.000000e-01 -1.790152e-03 -1.000000e+00 -1.863218e-03 -1.100000e+00 -1.935680e-03 -1.200000e+00 -2.007309e-03 -1.300000e+00 -2.078061e-03 -1.400000e+00 -2.148013e-03 -1.500000e+00 -2.217305e-03 -1.600000e+00 -2.286099e-03 -1.700000e+00 -2.354555e-03 -1.800000e+00 -2.422826e-03 -2.000000e-01 -8.826431e-04 -3.000000e-01 -1.249376e-03 -4.000000e-01 -1.563557e-03 -5.000000e-01 -1.826601e-03 -6.000000e-01 -2.041265e-03 -7.000000e-01 -2.211503e-03 -8.000000e-01 -2.343707e-03 -9.000000e-01 -2.448074e-03 -1.000000e+00 -2.538362e-03 -1.100000e+00 -2.625299e-03 -1.200000e+00 -2.711582e-03 -1.300000e+00 -2.797298e-03 -1.400000e+00 -2.882247e-03 -1.500000e+00 -2.966322e-03 -1.600000e+00 -3.049517e-03 -1.700000e+00 -3.131893e-03 -1.800000e+00 -3.213550e-03 -2.000000e-01 -1.060985e-03 -3.000000e-01 -1.530425e-03 -4.000000e-01 -1.953354e-03 -5.000000e-01 -2.328704e-03 -6.000000e-01 -2.657244e-03 -7.000000e-01 -2.940927e-03 -8.000000e-01 -3.182431e-03 -9.000000e-01 -3.385126e-03 -1.000000e+00 -3.553470e-03 -1.100000e+00 -3.693411e-03 -1.200000e+00 -3.812374e-03 -1.300000e+00 -3.919136e-03 -1.400000e+00 -4.021840e-03 -1.500000e+00 -4.123500e-03 -1.600000e+00 -4.224509e-03 -1.700000e+00 -4.324828e-03 -1.800000e+00 -4.424365e-03 -2.000000e-01 -1.187290e-03 -3.000000e-01 -1.733120e-03 -4.000000e-01 -2.240011e-03 -5.000000e-01 -2.705150e-03 -6.000000e-01 -3.127495e-03 -7.000000e-01 -3.507393e-03 -8.000000e-01 -3.846166e-03 -9.000000e-01 -4.145754e-03 -1.000000e+00 -4.408518e-03 -1.100000e+00 -4.637227e-03 -1.200000e+00 -4.835207e-03 -1.300000e+00 -5.006472e-03 -1.400000e+00 -5.155690e-03 -1.500000e+00 -5.287983e-03 -1.600000e+00 -5.408818e-03 -1.700000e+00 -5.523880e-03 -1.800000e+00 -5.637040e-03 -2.000000e-01 -1.503023e-04 -3.000000e-01 -1.835684e-04 -4.000000e-01 -2.098299e-04 -5.000000e-01 -2.358280e-04 -6.000000e-01 -2.623288e-04 -7.000000e-01 -2.894437e-04 -8.000000e-01 -3.172846e-04 -9.000000e-01 -3.459618e-04 -1.000000e+00 -3.755715e-04 -1.100000e+00 -4.061964e-04 -1.200000e+00 -4.379086e-04 -1.300000e+00 -4.707739e-04 -1.400000e+00 -5.048539e-04 -1.500000e+00 -5.402087e-04 -1.600000e+00 -5.768982e-04 -1.700000e+00 -6.149831e-04 -1.800000e+00 -6.545258e-04 -2.000000e-01 -2.945294e-04 -3.000000e-01 -3.842717e-04 -4.000000e-01 -4.441024e-04 -5.000000e-01 -4.874819e-04 -6.000000e-01 -5.266939e-04 -7.000000e-01 -5.655417e-04 -8.000000e-01 -6.042748e-04 -9.000000e-01 -6.429109e-04 -1.000000e+00 -6.815736e-04 -1.100000e+00 -7.204264e-04 -1.200000e+00 -7.596277e-04 -1.300000e+00 -7.993151e-04 -1.400000e+00 -8.396046e-04 -1.500000e+00 -8.805934e-04 -1.600000e+00 -9.223635e-04 -1.700000e+00 -9.649863e-04 -1.800000e+00 -1.008524e-03 -2.000000e-01 -4.373079e-04 -3.000000e-01 -5.972148e-04 -4.000000e-01 -7.203201e-04 -5.000000e-01 -8.107467e-04 -6.000000e-01 -8.770425e-04 -7.000000e-01 -9.313064e-04 -8.000000e-01 -9.825497e-04 -9.000000e-01 -1.033468e-03 -1.000000e+00 -1.084178e-03 -1.100000e+00 -1.134567e-03 -1.200000e+00 -1.184641e-03 -1.300000e+00 -1.234492e-03 -1.400000e+00 -1.284244e-03 -1.500000e+00 -1.334031e-03 -1.600000e+00 -1.383977e-03 -1.700000e+00 -1.434195e-03 -1.800000e+00 -1.484785e-03 -2.000000e-01 -5.661807e-04 -3.000000e-01 -7.934805e-04 -4.000000e-01 -9.834086e-04 -5.000000e-01 -1.137551e-03 -6.000000e-01 -1.258776e-03 -7.000000e-01 -1.352355e-03 -8.000000e-01 -1.426744e-03 -9.000000e-01 -1.491685e-03 -1.000000e+00 -1.553989e-03 -1.100000e+00 -1.615918e-03 -1.200000e+00 -1.677652e-03 -1.300000e+00 -1.739049e-03 -1.400000e+00 -1.800032e-03 -1.500000e+00 -1.860611e-03 -1.600000e+00 -1.920848e-03 -1.700000e+00 -1.980834e-03 -1.800000e+00 -2.040668e-03 -2.000000e-01 -6.788649e-04 -3.000000e-01 -9.671320e-04 -4.000000e-01 -1.219356e-03 -5.000000e-01 -1.435831e-03 -6.000000e-01 -1.617931e-03 -7.000000e-01 -1.767987e-03 -8.000000e-01 -1.889647e-03 -9.000000e-01 -1.988427e-03 -1.000000e+00 -2.071522e-03 -1.100000e+00 -2.146506e-03 -1.200000e+00 -2.218812e-03 -1.300000e+00 -2.290553e-03 -1.400000e+00 -2.362077e-03 -1.500000e+00 -2.433296e-03 -1.600000e+00 -2.504107e-03 -1.700000e+00 -2.574468e-03 -1.800000e+00 -2.644388e-03 -2.000000e-01 -8.183730e-04 -3.000000e-01 -1.184378e-03 -4.000000e-01 -1.518123e-03 -5.000000e-01 -1.818419e-03 -6.000000e-01 -2.085193e-03 -7.000000e-01 -2.319317e-03 -8.000000e-01 -2.522379e-03 -9.000000e-01 -2.696574e-03 -1.000000e+00 -2.844805e-03 -1.100000e+00 -2.970853e-03 -1.200000e+00 -3.079324e-03 -1.300000e+00 -3.175316e-03 -1.400000e+00 -3.263947e-03 -1.500000e+00 -3.349363e-03 -1.600000e+00 -3.433703e-03 -1.700000e+00 -3.517640e-03 -1.800000e+00 -3.601273e-03 -2.000000e-01 -9.258234e-04 -3.000000e-01 -1.353530e-03 -4.000000e-01 -1.753666e-03 -5.000000e-01 -2.124133e-03 -6.000000e-01 -2.463769e-03 -7.000000e-01 -2.772334e-03 -8.000000e-01 -3.050355e-03 -9.000000e-01 -3.298947e-03 -1.000000e+00 -3.519662e-03 -1.100000e+00 -3.714427e-03 -1.200000e+00 -3.885575e-03 -1.300000e+00 -4.035892e-03 -1.400000e+00 -4.168586e-03 -1.500000e+00 -4.287135e-03 -1.600000e+00 -4.395089e-03 -1.700000e+00 -4.495897e-03 -1.800000e+00 -4.592658e-03 tmpk8ny_4pz/tests/hisim/pmos/reference/62_acFreq_COFLICK=0.standard0000644000175000017500000002530213546075722025112 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1258.925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584.893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995.262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511.886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162.278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981.072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011.872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309.573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943.282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 10000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589.25 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848.93 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952.62 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118.86 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622.78 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810.72 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118.72 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095.73 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432.82 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 125892.5 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 158489.3 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 199526.2 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 251188.6 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 316227.8 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 398107.2 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 501187.2 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 630957.3 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 794328.2 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 1000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 1258925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 10000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589250 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848930 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952620 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118860 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622780 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810720 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118720 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095730 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432820 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258.925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584.893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995.262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511.886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162.278 2.08988054797393e-14 1.68486984597449e-14 3.40873274812869e-15 3981.072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011.872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309.573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943.282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589.25 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848.93 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952.62 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118.86 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622.78 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810.72 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118.72 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095.73 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432.82 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 125892.5 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 158489.3 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 199526.2 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 251188.6 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 316227.8 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 398107.2 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 501187.2 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 630957.3 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 794328.2 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 1000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162278 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 3981072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589250 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848930 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952620 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118860 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622780 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810720 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118720 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095730 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432820 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258.925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584.893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995.262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511.886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162.278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981.072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011.872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309.573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943.282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589.25 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848.93 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952.62 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118.86 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622.78 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810.72 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118.72 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095.73 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432.82 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 125892.5 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 158489.3 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 199526.2 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 251188.6 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 316227.8 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 398107.2 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 501187.2 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 630957.3 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 794328.2 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 1000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589250 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848930 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952620 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118860 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622780 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810720 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118720 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095730 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432820 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/23_dcSweep_CODFM=0.standard0000644000175000017500000002342613546075722025063 0ustar carstencarstenV(d) I(d) -2.000000e-01 -4.699615e-05 -3.000000e-01 -5.356444e-05 -4.000000e-01 -6.033219e-05 -5.000000e-01 -6.744931e-05 -6.000000e-01 -7.492420e-05 -7.000000e-01 -8.274226e-05 -8.000000e-01 -9.089871e-05 -9.000000e-01 -9.939829e-05 -1.000000e+00 -1.082512e-04 -1.100000e+00 -1.174704e-04 -1.200000e+00 -1.270707e-04 -1.300000e+00 -1.370679e-04 -1.400000e+00 -1.474787e-04 -1.500000e+00 -1.583210e-04 -1.600000e+00 -1.696137e-04 -1.700000e+00 -1.813767e-04 -1.800000e+00 -1.936315e-04 -2.000000e-01 -3.236954e-04 -3.000000e-01 -3.722842e-04 -4.000000e-01 -4.052186e-04 -5.000000e-01 -4.371928e-04 -6.000000e-01 -4.684500e-04 -7.000000e-01 -4.993045e-04 -8.000000e-01 -5.300657e-04 -9.000000e-01 -5.609683e-04 -1.000000e+00 -5.921825e-04 -1.100000e+00 -6.238328e-04 -1.200000e+00 -6.560127e-04 -1.300000e+00 -6.887951e-04 -1.400000e+00 -7.222391e-04 -1.500000e+00 -7.563944e-04 -1.600000e+00 -7.913044e-04 -1.700000e+00 -8.270083e-04 -1.800000e+00 -8.635422e-04 -2.000000e-01 -6.362416e-04 -3.000000e-01 -8.252108e-04 -4.000000e-01 -9.384887e-04 -5.000000e-01 -1.006766e-03 -6.000000e-01 -1.066911e-03 -7.000000e-01 -1.125791e-03 -8.000000e-01 -1.183256e-03 -9.000000e-01 -1.239416e-03 -1.000000e+00 -1.294578e-03 -1.100000e+00 -1.349078e-03 -1.200000e+00 -1.403215e-03 -1.300000e+00 -1.457236e-03 -1.400000e+00 -1.511337e-03 -1.500000e+00 -1.565674e-03 -1.600000e+00 -1.620372e-03 -1.700000e+00 -1.675532e-03 -1.800000e+00 -1.731237e-03 -2.000000e-01 -8.942919e-04 -3.000000e-01 -1.221693e-03 -4.000000e-01 -1.471297e-03 -5.000000e-01 -1.648885e-03 -6.000000e-01 -1.767189e-03 -7.000000e-01 -1.854914e-03 -8.000000e-01 -1.937134e-03 -9.000000e-01 -2.017933e-03 -1.000000e+00 -2.097230e-03 -1.100000e+00 -2.174954e-03 -1.200000e+00 -2.251232e-03 -1.300000e+00 -2.326297e-03 -1.400000e+00 -2.400412e-03 -1.500000e+00 -2.473830e-03 -1.600000e+00 -2.546779e-03 -1.700000e+00 -2.619455e-03 -1.800000e+00 -2.692024e-03 -2.000000e-01 -1.099660e-03 -3.000000e-01 -1.542998e-03 -4.000000e-01 -1.912357e-03 -5.000000e-01 -2.210948e-03 -6.000000e-01 -2.443263e-03 -7.000000e-01 -2.616248e-03 -8.000000e-01 -2.743263e-03 -9.000000e-01 -2.847346e-03 -1.000000e+00 -2.946865e-03 -1.100000e+00 -3.044792e-03 -1.200000e+00 -3.141252e-03 -1.300000e+00 -3.236151e-03 -1.400000e+00 -3.329502e-03 -1.500000e+00 -3.421422e-03 -1.600000e+00 -3.512085e-03 -1.700000e+00 -3.601685e-03 -1.800000e+00 -3.690419e-03 -2.000000e-01 -1.323288e-03 -3.000000e-01 -1.900779e-03 -4.000000e-01 -2.413864e-03 -5.000000e-01 -2.862055e-03 -6.000000e-01 -3.247311e-03 -7.000000e-01 -3.572769e-03 -8.000000e-01 -3.842246e-03 -9.000000e-01 -4.060779e-03 -1.000000e+00 -4.235768e-03 -1.100000e+00 -4.377686e-03 -1.200000e+00 -4.501075e-03 -1.300000e+00 -4.619790e-03 -1.400000e+00 -4.736666e-03 -1.500000e+00 -4.852063e-03 -1.600000e+00 -4.966006e-03 -1.700000e+00 -5.078485e-03 -1.800000e+00 -5.189527e-03 -2.000000e-01 -1.465681e-03 -3.000000e-01 -2.135731e-03 -4.000000e-01 -2.753367e-03 -5.000000e-01 -3.315155e-03 -6.000000e-01 -3.820331e-03 -7.000000e-01 -4.269931e-03 -8.000000e-01 -4.666054e-03 -9.000000e-01 -5.011370e-03 -1.000000e+00 -5.308993e-03 -1.100000e+00 -5.562716e-03 -1.200000e+00 -5.777420e-03 -1.300000e+00 -5.959268e-03 -1.400000e+00 -6.115539e-03 -1.500000e+00 -6.254781e-03 -1.600000e+00 -6.387042e-03 -1.700000e+00 -6.517185e-03 -1.800000e+00 -6.645738e-03 -2.000000e-01 -8.053777e-05 -3.000000e-01 -9.162409e-05 -4.000000e-01 -1.024997e-04 -5.000000e-01 -1.136548e-04 -6.000000e-01 -1.251789e-04 -7.000000e-01 -1.370995e-04 -8.000000e-01 -1.494356e-04 -9.000000e-01 -1.622080e-04 -1.000000e+00 -1.754382e-04 -1.100000e+00 -1.891484e-04 -1.200000e+00 -2.033607e-04 -1.300000e+00 -2.180970e-04 -1.400000e+00 -2.333799e-04 -1.500000e+00 -2.492324e-04 -1.600000e+00 -2.656781e-04 -1.700000e+00 -2.827418e-04 -1.800000e+00 -3.004492e-04 -2.000000e-01 -2.967540e-04 -3.000000e-01 -3.587330e-04 -4.000000e-01 -3.937602e-04 -5.000000e-01 -4.249225e-04 -6.000000e-01 -4.554245e-04 -7.000000e-01 -4.853715e-04 -8.000000e-01 -5.149862e-04 -9.000000e-01 -5.445097e-04 -1.000000e+00 -5.741407e-04 -1.100000e+00 -6.040315e-04 -1.200000e+00 -6.342969e-04 -1.300000e+00 -6.650254e-04 -1.400000e+00 -6.962867e-04 -1.500000e+00 -7.281374e-04 -1.600000e+00 -7.606255e-04 -1.700000e+00 -7.937927e-04 -1.800000e+00 -8.276765e-04 -2.000000e-01 -5.192224e-04 -3.000000e-01 -6.879597e-04 -4.000000e-01 -8.011363e-04 -5.000000e-01 -8.720396e-04 -6.000000e-01 -9.256745e-04 -7.000000e-01 -9.769033e-04 -8.000000e-01 -1.027362e-03 -9.000000e-01 -1.076896e-03 -1.000000e+00 -1.125564e-03 -1.100000e+00 -1.173562e-03 -1.200000e+00 -1.221119e-03 -1.300000e+00 -1.268446e-03 -1.400000e+00 -1.315726e-03 -1.500000e+00 -1.363110e-03 -1.600000e+00 -1.410721e-03 -1.700000e+00 -1.458660e-03 -1.800000e+00 -1.507013e-03 -2.000000e-01 -7.107833e-04 -3.000000e-01 -9.814930e-04 -4.000000e-01 -1.196037e-03 -5.000000e-01 -1.357425e-03 -6.000000e-01 -1.472204e-03 -7.000000e-01 -1.554887e-03 -8.000000e-01 -1.625302e-03 -9.000000e-01 -1.693712e-03 -1.000000e+00 -1.761384e-03 -1.100000e+00 -1.828127e-03 -1.200000e+00 -1.893853e-03 -1.300000e+00 -1.958629e-03 -1.400000e+00 -2.022603e-03 -1.500000e+00 -2.085948e-03 -1.600000e+00 -2.148840e-03 -1.700000e+00 -2.211441e-03 -1.800000e+00 -2.273894e-03 -2.000000e-01 -8.703534e-04 -3.000000e-01 -1.229542e-03 -4.000000e-01 -1.535299e-03 -5.000000e-01 -1.788717e-03 -6.000000e-01 -1.992234e-03 -7.000000e-01 -2.150032e-03 -8.000000e-01 -2.269922e-03 -9.000000e-01 -2.364654e-03 -1.000000e+00 -2.449433e-03 -1.100000e+00 -2.532170e-03 -1.200000e+00 -2.614133e-03 -1.300000e+00 -2.695229e-03 -1.400000e+00 -2.775330e-03 -1.500000e+00 -2.854418e-03 -1.600000e+00 -2.932552e-03 -1.700000e+00 -3.009841e-03 -1.800000e+00 -3.086415e-03 -2.000000e-01 -1.055746e-03 -3.000000e-01 -1.522006e-03 -4.000000e-01 -1.941527e-03 -5.000000e-01 -2.312983e-03 -6.000000e-01 -2.636801e-03 -7.000000e-01 -2.914587e-03 -8.000000e-01 -3.148785e-03 -9.000000e-01 -3.342837e-03 -1.000000e+00 -3.501773e-03 -1.100000e+00 -3.632590e-03 -1.200000e+00 -3.744148e-03 -1.300000e+00 -3.846545e-03 -1.400000e+00 -3.946382e-03 -1.500000e+00 -4.045210e-03 -1.600000e+00 -4.143203e-03 -1.700000e+00 -4.240296e-03 -1.800000e+00 -4.336435e-03 -2.000000e-01 -1.186306e-03 -3.000000e-01 -1.731660e-03 -4.000000e-01 -2.238332e-03 -5.000000e-01 -2.703337e-03 -6.000000e-01 -3.125332e-03 -7.000000e-01 -3.504342e-03 -8.000000e-01 -3.841383e-03 -9.000000e-01 -4.138137e-03 -1.000000e+00 -4.396808e-03 -1.100000e+00 -4.620185e-03 -1.200000e+00 -4.811857e-03 -1.300000e+00 -4.976335e-03 -1.400000e+00 -5.118917e-03 -1.500000e+00 -5.245465e-03 -1.600000e+00 -5.362370e-03 -1.700000e+00 -5.475384e-03 -1.800000e+00 -5.586920e-03 -2.000000e-01 -1.215310e-04 -3.000000e-01 -1.449795e-04 -4.000000e-01 -1.644397e-04 -5.000000e-01 -1.838944e-04 -6.000000e-01 -2.037631e-04 -7.000000e-01 -2.241339e-04 -8.000000e-01 -2.450728e-04 -9.000000e-01 -2.666381e-04 -1.000000e+00 -2.888803e-04 -1.100000e+00 -3.118434e-04 -1.200000e+00 -3.355664e-04 -1.300000e+00 -3.600852e-04 -1.400000e+00 -3.854342e-04 -1.500000e+00 -4.116469e-04 -1.600000e+00 -4.387567e-04 -1.700000e+00 -4.667976e-04 -1.800000e+00 -4.958045e-04 -2.000000e-01 -2.683866e-04 -3.000000e-01 -3.434866e-04 -4.000000e-01 -3.905718e-04 -5.000000e-01 -4.254121e-04 -6.000000e-01 -4.579229e-04 -7.000000e-01 -4.899888e-04 -8.000000e-01 -5.217546e-04 -9.000000e-01 -5.533460e-04 -1.000000e+00 -5.849287e-04 -1.100000e+00 -6.166606e-04 -1.200000e+00 -6.486752e-04 -1.300000e+00 -6.810800e-04 -1.400000e+00 -7.139613e-04 -1.500000e+00 -7.473894e-04 -1.600000e+00 -7.814225e-04 -1.700000e+00 -8.161101e-04 -1.800000e+00 -8.514956e-04 -2.000000e-01 -4.174948e-04 -3.000000e-01 -5.651320e-04 -4.000000e-01 -6.748377e-04 -5.000000e-01 -7.519469e-04 -6.000000e-01 -8.074889e-04 -7.000000e-01 -8.544460e-04 -8.000000e-01 -8.996975e-04 -9.000000e-01 -9.444786e-04 -1.000000e+00 -9.887737e-04 -1.100000e+00 -1.032583e-03 -1.200000e+00 -1.076001e-03 -1.300000e+00 -1.119162e-03 -1.400000e+00 -1.162206e-03 -1.500000e+00 -1.205264e-03 -1.600000e+00 -1.248450e-03 -1.700000e+00 -1.291863e-03 -1.800000e+00 -1.335586e-03 -2.000000e-01 -5.523075e-04 -3.000000e-01 -7.705283e-04 -4.000000e-01 -9.501590e-04 -5.000000e-01 -1.092854e-03 -6.000000e-01 -1.201930e-03 -7.000000e-01 -1.284056e-03 -8.000000e-01 -1.349422e-03 -9.000000e-01 -1.408062e-03 -1.000000e+00 -1.465169e-03 -1.100000e+00 -1.521831e-03 -1.200000e+00 -1.578020e-03 -1.300000e+00 -1.633658e-03 -1.400000e+00 -1.688747e-03 -1.500000e+00 -1.743357e-03 -1.600000e+00 -1.797587e-03 -1.700000e+00 -1.851545e-03 -1.800000e+00 -1.905340e-03 -2.000000e-01 -6.699586e-04 -3.000000e-01 -9.519966e-04 -4.000000e-01 -1.196965e-03 -5.000000e-01 -1.405155e-03 -6.000000e-01 -1.577904e-03 -7.000000e-01 -1.717682e-03 -8.000000e-01 -1.828773e-03 -9.000000e-01 -1.917844e-03 -1.000000e+00 -1.993249e-03 -1.100000e+00 -2.062742e-03 -1.200000e+00 -2.130579e-03 -1.300000e+00 -2.197915e-03 -1.400000e+00 -2.264816e-03 -1.500000e+00 -2.331190e-03 -1.600000e+00 -2.396992e-03 -1.700000e+00 -2.462231e-03 -1.800000e+00 -2.526956e-03 -2.000000e-01 -8.151175e-04 -3.000000e-01 -1.178259e-03 -4.000000e-01 -1.508450e-03 -5.000000e-01 -1.804478e-03 -6.000000e-01 -2.066202e-03 -7.000000e-01 -2.294404e-03 -8.000000e-01 -2.490612e-03 -9.000000e-01 -2.657086e-03 -1.000000e+00 -2.797037e-03 -1.100000e+00 -2.914811e-03 -1.200000e+00 -3.015698e-03 -1.300000e+00 -3.105458e-03 -1.400000e+00 -3.189490e-03 -1.500000e+00 -3.271330e-03 -1.600000e+00 -3.352374e-03 -1.700000e+00 -3.432950e-03 -1.800000e+00 -3.513054e-03 -2.000000e-01 -9.263926e-04 -3.000000e-01 -1.353590e-03 -4.000000e-01 -1.752829e-03 -5.000000e-01 -2.121990e-03 -6.000000e-01 -2.459839e-03 -7.000000e-01 -2.766039e-03 -8.000000e-01 -3.041016e-03 -9.000000e-01 -3.285795e-03 -1.000000e+00 -3.501875e-03 -1.100000e+00 -3.691217e-03 -1.200000e+00 -3.856317e-03 -1.300000e+00 -4.000255e-03 -1.400000e+00 -4.126613e-03 -1.500000e+00 -4.239259e-03 -1.600000e+00 -4.342117e-03 -1.700000e+00 -4.438929e-03 -1.800000e+00 -4.532697e-03 tmpk8ny_4pz/tests/hisim/pmos/reference/25_dcSweep_VFBCL.standard0000644000175000017500000002342613546075722024714 0ustar carstencarstenV(d) I(d) -2.000000e-01 -6.351651e-04 -3.000000e-01 -9.559341e-04 -4.000000e-01 -1.278874e-03 -5.000000e-01 -1.603965e-03 -6.000000e-01 -1.931169e-03 -7.000000e-01 -2.260437e-03 -8.000000e-01 -2.591715e-03 -9.000000e-01 -2.924948e-03 -1.000000e+00 -3.260077e-03 -1.100000e+00 -3.597038e-03 -1.200000e+00 -3.935766e-03 -1.300000e+00 -4.276192e-03 -1.400000e+00 -4.618241e-03 -1.500000e+00 -4.961838e-03 -1.600000e+00 -5.306903e-03 -1.700000e+00 -5.653353e-03 -1.800000e+00 -6.001104e-03 -2.000000e-01 -6.257151e-04 -3.000000e-01 -9.416755e-04 -4.000000e-01 -1.259751e-03 -5.000000e-01 -1.579925e-03 -6.000000e-01 -1.902161e-03 -7.000000e-01 -2.226413e-03 -8.000000e-01 -2.552632e-03 -9.000000e-01 -2.880765e-03 -1.000000e+00 -3.210757e-03 -1.100000e+00 -3.542549e-03 -1.200000e+00 -3.876080e-03 -1.300000e+00 -4.211284e-03 -1.400000e+00 -4.548093e-03 -1.500000e+00 -4.886435e-03 -1.600000e+00 -5.226236e-03 -1.700000e+00 -5.567417e-03 -1.800000e+00 -5.909899e-03 -2.000000e-01 -6.165245e-04 -3.000000e-01 -9.278089e-04 -4.000000e-01 -1.241155e-03 -5.000000e-01 -1.556548e-03 -6.000000e-01 -1.873953e-03 -7.000000e-01 -2.193328e-03 -8.000000e-01 -2.514627e-03 -9.000000e-01 -2.837800e-03 -1.000000e+00 -3.162796e-03 -1.100000e+00 -3.489560e-03 -1.200000e+00 -3.818034e-03 -1.300000e+00 -4.148157e-03 -1.400000e+00 -4.479864e-03 -1.500000e+00 -4.813088e-03 -1.600000e+00 -5.147759e-03 -1.700000e+00 -5.483805e-03 -1.800000e+00 -5.821149e-03 -2.000000e-01 -6.075836e-04 -3.000000e-01 -9.143196e-04 -4.000000e-01 -1.223065e-03 -5.000000e-01 -1.533808e-03 -6.000000e-01 -1.846514e-03 -7.000000e-01 -2.161146e-03 -8.000000e-01 -2.477659e-03 -9.000000e-01 -2.796008e-03 -1.000000e+00 -3.116144e-03 -1.100000e+00 -3.438015e-03 -1.200000e+00 -3.761568e-03 -1.300000e+00 -4.086743e-03 -1.400000e+00 -4.413483e-03 -1.500000e+00 -4.741722e-03 -1.600000e+00 -5.071396e-03 -1.700000e+00 -5.402435e-03 -1.800000e+00 -5.734770e-03 -2.000000e-01 -5.988829e-04 -3.000000e-01 -9.011933e-04 -4.000000e-01 -1.205463e-03 -5.000000e-01 -1.511681e-03 -6.000000e-01 -1.819817e-03 -7.000000e-01 -2.129834e-03 -8.000000e-01 -2.441691e-03 -9.000000e-01 -2.755346e-03 -1.000000e+00 -3.070752e-03 -1.100000e+00 -3.387861e-03 -1.200000e+00 -3.706623e-03 -1.300000e+00 -4.026982e-03 -1.400000e+00 -4.348884e-03 -1.500000e+00 -4.672267e-03 -1.600000e+00 -4.997071e-03 -1.700000e+00 -5.323231e-03 -1.800000e+00 -5.650679e-03 -2.000000e-01 -5.862625e-04 -3.000000e-01 -8.821547e-04 -4.000000e-01 -1.179934e-03 -5.000000e-01 -1.479592e-03 -6.000000e-01 -1.781100e-03 -7.000000e-01 -2.084426e-03 -8.000000e-01 -2.389531e-03 -9.000000e-01 -2.696378e-03 -1.000000e+00 -3.004924e-03 -1.100000e+00 -3.315126e-03 -1.200000e+00 -3.626937e-03 -1.300000e+00 -3.940308e-03 -1.400000e+00 -4.255187e-03 -1.500000e+00 -4.571520e-03 -1.600000e+00 -4.889250e-03 -1.700000e+00 -5.208318e-03 -1.800000e+00 -5.528664e-03 -2.000000e-01 -5.741336e-04 -3.000000e-01 -8.638589e-04 -4.000000e-01 -1.155403e-03 -5.000000e-01 -1.448758e-03 -6.000000e-01 -1.743900e-03 -7.000000e-01 -2.040797e-03 -8.000000e-01 -2.339417e-03 -9.000000e-01 -2.639724e-03 -1.000000e+00 -2.941679e-03 -1.100000e+00 -3.245243e-03 -1.200000e+00 -3.550373e-03 -1.300000e+00 -3.857024e-03 -1.400000e+00 -4.165150e-03 -1.500000e+00 -4.474700e-03 -1.600000e+00 -4.785622e-03 -1.700000e+00 -5.097863e-03 -1.800000e+00 -5.411367e-03 -2.000000e-01 -6.225004e-04 -3.000000e-01 -9.367471e-04 -4.000000e-01 -1.253036e-03 -5.000000e-01 -1.571348e-03 -6.000000e-01 -1.891644e-03 -7.000000e-01 -2.213876e-03 -8.000000e-01 -2.537992e-03 -9.000000e-01 -2.863937e-03 -1.000000e+00 -3.191653e-03 -1.100000e+00 -3.521079e-03 -1.200000e+00 -3.852149e-03 -1.300000e+00 -4.184797e-03 -1.400000e+00 -4.518951e-03 -1.500000e+00 -4.854537e-03 -1.600000e+00 -5.191477e-03 -1.700000e+00 -5.529691e-03 -1.800000e+00 -5.869097e-03 -2.000000e-01 -6.135776e-04 -3.000000e-01 -9.232893e-04 -4.000000e-01 -1.234994e-03 -5.000000e-01 -1.548676e-03 -6.000000e-01 -1.864298e-03 -7.000000e-01 -2.181815e-03 -8.000000e-01 -2.501179e-03 -9.000000e-01 -2.822337e-03 -1.000000e+00 -3.145236e-03 -1.100000e+00 -3.469819e-03 -1.200000e+00 -3.796023e-03 -1.300000e+00 -4.123787e-03 -1.400000e+00 -4.453043e-03 -1.500000e+00 -4.783721e-03 -1.600000e+00 -5.115749e-03 -1.700000e+00 -5.449051e-03 -1.800000e+00 -5.783549e-03 -2.000000e-01 -6.048858e-04 -3.000000e-01 -9.101804e-04 -4.000000e-01 -1.217421e-03 -5.000000e-01 -1.526593e-03 -6.000000e-01 -1.837662e-03 -7.000000e-01 -2.150587e-03 -8.000000e-01 -2.465320e-03 -9.000000e-01 -2.781815e-03 -1.000000e+00 -3.100020e-03 -1.100000e+00 -3.419882e-03 -1.200000e+00 -3.741343e-03 -1.300000e+00 -4.064343e-03 -1.400000e+00 -4.388821e-03 -1.500000e+00 -4.714709e-03 -1.600000e+00 -5.041941e-03 -1.700000e+00 -5.370445e-03 -1.800000e+00 -5.700147e-03 -2.000000e-01 -5.964171e-04 -3.000000e-01 -8.974083e-04 -4.000000e-01 -1.200300e-03 -5.000000e-01 -1.505078e-03 -6.000000e-01 -1.811712e-03 -7.000000e-01 -2.120162e-03 -8.000000e-01 -2.430384e-03 -9.000000e-01 -2.742334e-03 -1.000000e+00 -3.055964e-03 -1.100000e+00 -3.371224e-03 -1.200000e+00 -3.688059e-03 -1.300000e+00 -4.006414e-03 -1.400000e+00 -4.326230e-03 -1.500000e+00 -4.647444e-03 -1.600000e+00 -4.969994e-03 -1.700000e+00 -5.293811e-03 -1.800000e+00 -5.618827e-03 -2.000000e-01 -5.881636e-04 -3.000000e-01 -8.849613e-04 -4.000000e-01 -1.183615e-03 -5.000000e-01 -1.484112e-03 -6.000000e-01 -1.786424e-03 -7.000000e-01 -2.090513e-03 -8.000000e-01 -2.396339e-03 -9.000000e-01 -2.703859e-03 -1.000000e+00 -3.013030e-03 -1.100000e+00 -3.323802e-03 -1.200000e+00 -3.636127e-03 -1.300000e+00 -3.949951e-03 -1.400000e+00 -4.265218e-03 -1.500000e+00 -4.581871e-03 -1.600000e+00 -4.899849e-03 -1.700000e+00 -5.219089e-03 -1.800000e+00 -5.539525e-03 -2.000000e-01 -5.761712e-04 -3.000000e-01 -8.668761e-04 -4.000000e-01 -1.159372e-03 -5.000000e-01 -1.453650e-03 -6.000000e-01 -1.749683e-03 -7.000000e-01 -2.047437e-03 -8.000000e-01 -2.346875e-03 -9.000000e-01 -2.647959e-03 -1.000000e+00 -2.950649e-03 -1.100000e+00 -3.254899e-03 -1.200000e+00 -3.560665e-03 -1.300000e+00 -3.867899e-03 -1.400000e+00 -4.176550e-03 -1.500000e+00 -4.486564e-03 -1.600000e+00 -4.797886e-03 -1.700000e+00 -5.110459e-03 -1.800000e+00 -5.424223e-03 -2.000000e-01 -5.646228e-04 -3.000000e-01 -8.494616e-04 -4.000000e-01 -1.136030e-03 -5.000000e-01 -1.424320e-03 -6.000000e-01 -1.714308e-03 -7.000000e-01 -2.005963e-03 -8.000000e-01 -2.299251e-03 -9.000000e-01 -2.594138e-03 -1.000000e+00 -2.890585e-03 -1.100000e+00 -3.188553e-03 -1.200000e+00 -3.488001e-03 -1.300000e+00 -3.788883e-03 -1.400000e+00 -4.091155e-03 -1.500000e+00 -4.394766e-03 -1.600000e+00 -4.699667e-03 -1.700000e+00 -5.005804e-03 -1.800000e+00 -5.313122e-03 -2.000000e-01 -6.046918e-04 -3.000000e-01 -9.097744e-04 -4.000000e-01 -1.216723e-03 -5.000000e-01 -1.525518e-03 -6.000000e-01 -1.836122e-03 -7.000000e-01 -2.148485e-03 -8.000000e-01 -2.462559e-03 -9.000000e-01 -2.778287e-03 -1.000000e+00 -3.095615e-03 -1.100000e+00 -3.414481e-03 -1.200000e+00 -3.734824e-03 -1.300000e+00 -4.056577e-03 -1.400000e+00 -4.379672e-03 -1.500000e+00 -4.704036e-03 -1.600000e+00 -5.029595e-03 -1.700000e+00 -5.356273e-03 -1.800000e+00 -5.683988e-03 -2.000000e-01 -5.964899e-04 -3.000000e-01 -8.974115e-04 -4.000000e-01 -1.200159e-03 -5.000000e-01 -1.504717e-03 -6.000000e-01 -1.811047e-03 -7.000000e-01 -2.119105e-03 -8.000000e-01 -2.428843e-03 -9.000000e-01 -2.740212e-03 -1.000000e+00 -3.053157e-03 -1.100000e+00 -3.367623e-03 -1.200000e+00 -3.683551e-03 -1.300000e+00 -4.000878e-03 -1.400000e+00 -4.319539e-03 -1.500000e+00 -4.639468e-03 -1.600000e+00 -4.960594e-03 -1.700000e+00 -5.282845e-03 -1.800000e+00 -5.606144e-03 -2.000000e-01 -5.884817e-04 -3.000000e-01 -8.853405e-04 -4.000000e-01 -1.183987e-03 -5.000000e-01 -1.484406e-03 -6.000000e-01 -1.786562e-03 -7.000000e-01 -2.090416e-03 -8.000000e-01 -2.395920e-03 -9.000000e-01 -2.703029e-03 -1.000000e+00 -3.011692e-03 -1.100000e+00 -3.321856e-03 -1.200000e+00 -3.633466e-03 -1.300000e+00 -3.946464e-03 -1.400000e+00 -4.260788e-03 -1.500000e+00 -4.576376e-03 -1.600000e+00 -4.893160e-03 -1.700000e+00 -5.211072e-03 -1.800000e+00 -5.530042e-03 -2.000000e-01 -5.806614e-04 -3.000000e-01 -8.735529e-04 -4.000000e-01 -1.168194e-03 -5.000000e-01 -1.464571e-03 -6.000000e-01 -1.762652e-03 -7.000000e-01 -2.062398e-03 -8.000000e-01 -2.363767e-03 -9.000000e-01 -2.666714e-03 -1.000000e+00 -2.971192e-03 -1.100000e+00 -3.277151e-03 -1.200000e+00 -3.584540e-03 -1.300000e+00 -3.893303e-03 -1.400000e+00 -4.203384e-03 -1.500000e+00 -4.514721e-03 -1.600000e+00 -4.827253e-03 -1.700000e+00 -5.140915e-03 -1.800000e+00 -5.455640e-03 -2.000000e-01 -5.730235e-04 -3.000000e-01 -8.620403e-04 -4.000000e-01 -1.152770e-03 -5.000000e-01 -1.445199e-03 -6.000000e-01 -1.739300e-03 -7.000000e-01 -2.035034e-03 -8.000000e-01 -2.332362e-03 -9.000000e-01 -2.631242e-03 -1.000000e+00 -2.931630e-03 -1.100000e+00 -3.233479e-03 -1.200000e+00 -3.536741e-03 -1.300000e+00 -3.841362e-03 -1.400000e+00 -4.147291e-03 -1.500000e+00 -4.454468e-03 -1.600000e+00 -4.762837e-03 -1.700000e+00 -5.072336e-03 -1.800000e+00 -5.382901e-03 -2.000000e-01 -5.618969e-04 -3.000000e-01 -8.452693e-04 -4.000000e-01 -1.130300e-03 -5.000000e-01 -1.416980e-03 -6.000000e-01 -1.705281e-03 -7.000000e-01 -1.995169e-03 -8.000000e-01 -2.286609e-03 -9.000000e-01 -2.579563e-03 -1.000000e+00 -2.873989e-03 -1.100000e+00 -3.169845e-03 -1.200000e+00 -3.467087e-03 -1.300000e+00 -3.765666e-03 -1.400000e+00 -4.065534e-03 -1.500000e+00 -4.366639e-03 -1.600000e+00 -4.668926e-03 -1.700000e+00 -4.972339e-03 -1.800000e+00 -5.276821e-03 -2.000000e-01 -5.511510e-04 -3.000000e-01 -8.290726e-04 -4.000000e-01 -1.108601e-03 -5.000000e-01 -1.389727e-03 -6.000000e-01 -1.672427e-03 -7.000000e-01 -1.956669e-03 -8.000000e-01 -2.242422e-03 -9.000000e-01 -2.529649e-03 -1.000000e+00 -2.818314e-03 -1.100000e+00 -3.108377e-03 -1.200000e+00 -3.399798e-03 -1.300000e+00 -3.692533e-03 -1.400000e+00 -3.986537e-03 -1.500000e+00 -4.281761e-03 -1.600000e+00 -4.578158e-03 -1.700000e+00 -4.875674e-03 -1.800000e+00 -5.174256e-03 tmpk8ny_4pz/tests/hisim/pmos/reference/51_acFreq_COGIDL=1.standard0000644000175000017500000002530213546075722025000 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1258.925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584.893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995.262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511.886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162.278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981.072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011.872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309.573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943.282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 10000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589.25 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848.93 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952.62 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118.86 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622.78 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810.72 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118.72 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095.73 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432.82 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 125892.5 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 158489.3 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 199526.2 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 251188.6 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 316227.8 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 398107.2 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 501187.2 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 630957.3 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 794328.2 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 1000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 1258925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 10000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589250 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848930 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952620 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118860 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622780 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810720 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118720 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095730 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432820 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258.925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584.893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995.262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511.886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162.278 2.08988054797393e-14 1.68486984597449e-14 3.40873274812869e-15 3981.072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011.872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309.573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943.282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589.25 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848.93 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952.62 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118.86 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622.78 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810.72 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118.72 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095.73 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432.82 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 125892.5 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 158489.3 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 199526.2 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 251188.6 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 316227.8 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 398107.2 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 501187.2 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 630957.3 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 794328.2 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 1000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162278 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 3981072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589250 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848930 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952620 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118860 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622780 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810720 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118720 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095730 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432820 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258.925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584.893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995.262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511.886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162.278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981.072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011.872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309.573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943.282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589.25 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848.93 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952.62 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118.86 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622.78 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810.72 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118.72 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095.73 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432.82 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 125892.5 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 158489.3 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 199526.2 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 251188.6 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 316227.8 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 398107.2 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 501187.2 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 630957.3 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 794328.2 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 1000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589250 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848930 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952620 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118860 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622780 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810720 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118720 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095730 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432820 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/54_acFreq_COADOV=0.standard0000644000175000017500000002530513546075722025017 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.35669196168057e-14 1.29198624632701e-14 4.38164221713175e-18 1258.925 1.35669277748042e-14 1.29198656025324e-14 4.38164490614454e-18 1584.893 1.35669217357971e-14 1.29198655144543e-14 4.38164360610996e-18 1995.262 1.35669230915003e-14 1.29198657211564e-14 4.38164383754387e-18 2511.886 1.35669209547044e-14 1.2919862121088e-14 4.3816438300667e-18 3162.278 1.35669171091701e-14 1.29198596632842e-14 4.38164261643059e-18 3981.072 1.35669199526265e-14 1.29198614678969e-14 4.38164303754885e-18 5011.872 1.35669208719186e-14 1.29198626566591e-14 4.38164240403752e-18 6309.573 1.35669196990797e-14 1.29198644070349e-14 4.38164292079278e-18 7943.282 1.35669212023169e-14 1.29198630155745e-14 4.38164270884676e-18 10000 1.35669196168057e-14 1.29198624632701e-14 4.38164221713175e-18 12589.25 1.35669277748042e-14 1.29198656025324e-14 4.38164490614454e-18 15848.93 1.35669217357971e-14 1.29198655144543e-14 4.38164360610996e-18 19952.62 1.35669230915003e-14 1.29198657211564e-14 4.38164383754387e-18 25118.86 1.35669209547044e-14 1.2919862121088e-14 4.3816438300667e-18 31622.78 1.35669171091701e-14 1.29198596632842e-14 4.38164261643059e-18 39810.72 1.35669199526265e-14 1.29198614678969e-14 4.38164303754885e-18 50118.72 1.35669208719186e-14 1.29198626566591e-14 4.38164240403752e-18 63095.73 1.35669196990797e-14 1.29198644070349e-14 4.38164292079278e-18 79432.82 1.35669212023169e-14 1.29198630155745e-14 4.38164270884676e-18 100000 1.35669196168057e-14 1.29198624632701e-14 4.38164221713175e-18 125892.5 1.35669277748042e-14 1.29198656025324e-14 4.38164490614454e-18 158489.3 1.35669217357971e-14 1.29198655144543e-14 4.38164360610996e-18 199526.2 1.35669230915003e-14 1.29198657211564e-14 4.38164383754387e-18 251188.6 1.35669209547044e-14 1.2919862121088e-14 4.3816438300667e-18 316227.8 1.35669171091701e-14 1.29198596632842e-14 4.38164261643059e-18 398107.2 1.35669199526265e-14 1.29198614678969e-14 4.38164303754885e-18 501187.2 1.35669208719186e-14 1.29198626566591e-14 4.38164240403752e-18 630957.3 1.35669196990797e-14 1.29198644070349e-14 4.38164292079278e-18 794328.2 1.35669212023169e-14 1.29198630155745e-14 4.38164270884676e-18 1000000 1.35669196168057e-14 1.29198624632701e-14 4.38164221713175e-18 1258925 1.35669277748042e-14 1.29198656025324e-14 4.38164490614454e-18 1584893 1.35669217357971e-14 1.29198655144543e-14 4.38164360610995e-18 1995262 1.35669230915003e-14 1.29198657211564e-14 4.38164383754387e-18 2511886 1.35669209547044e-14 1.2919862121088e-14 4.3816438300667e-18 3162278 1.35669171091701e-14 1.29198596632842e-14 4.38164261643059e-18 3981072 1.35669199526265e-14 1.29198614678969e-14 4.38164303754885e-18 5011872 1.35669208719186e-14 1.29198626566591e-14 4.38164240403752e-18 6309573 1.35669196990797e-14 1.29198644070349e-14 4.38164292079278e-18 7943282 1.35669212023169e-14 1.29198630155745e-14 4.38164270884676e-18 10000000 1.35669196168057e-14 1.29198624632701e-14 4.38164221713175e-18 12589250 1.35669277748042e-14 1.29198656025324e-14 4.38164490614454e-18 15848930 1.35669217357971e-14 1.29198655144543e-14 4.38164360610996e-18 19952620 1.35669230915003e-14 1.29198657211564e-14 4.38164383754387e-18 25118860 1.35669209547044e-14 1.2919862121088e-14 4.3816438300667e-18 31622780 1.35669171091701e-14 1.29198596632842e-14 4.38164261643059e-18 39810720 1.35669199526265e-14 1.29198614678969e-14 4.38164303754885e-18 50118720 1.35669208719186e-14 1.29198626566591e-14 4.38164240403752e-18 63095730 1.35669196990797e-14 1.29198644070349e-14 4.38164292079278e-18 79432820 1.35669212023169e-14 1.29198630155745e-14 4.38164270884676e-18 100000000 1.35669196168057e-14 1.29198624632701e-14 4.38164221713175e-18 1000 1.34398041553076e-14 1.279272472008e-14 5.70371368150637e-18 1258.925 1.34398111512731e-14 1.279272369474e-14 5.70371468045593e-18 1584.893 1.34398101093556e-14 1.27927237620151e-14 5.70371397889315e-18 1995.262 1.3439807295524e-14 1.27927259952487e-14 5.70371352417664e-18 2511.886 1.34398066482307e-14 1.27927288063938e-14 5.70371371913377e-18 3162.278 1.34398006318182e-14 1.27927230542497e-14 5.70371336935356e-18 3981.072 1.34398021882281e-14 1.27927237145428e-14 5.70371256255342e-18 5011.872 1.34398032525547e-14 1.27927259839423e-14 5.70371327880486e-18 6309.573 1.34398040574638e-14 1.27927260634947e-14 5.70371218590939e-18 7943.282 1.34398041359132e-14 1.27927259127496e-14 5.70371389705458e-18 10000 1.34398041553076e-14 1.279272472008e-14 5.70371368150637e-18 12589.25 1.34398111512731e-14 1.279272369474e-14 5.70371468045593e-18 15848.93 1.34398101093556e-14 1.27927237620151e-14 5.70371397889315e-18 19952.62 1.3439807295524e-14 1.27927259952487e-14 5.70371352417664e-18 25118.86 1.34398066482307e-14 1.27927288063938e-14 5.70371371913377e-18 31622.78 1.34398006318182e-14 1.27927230542497e-14 5.70371336935356e-18 39810.72 1.34398021882281e-14 1.27927237145428e-14 5.70371256255342e-18 50118.72 1.34398032525547e-14 1.27927259839423e-14 5.70371327880486e-18 63095.73 1.34398040574638e-14 1.27927260634947e-14 5.70371218590939e-18 79432.82 1.34398041359132e-14 1.27927259127496e-14 5.70371389705458e-18 100000 1.34398041553076e-14 1.279272472008e-14 5.70371368150637e-18 125892.5 1.34398111512731e-14 1.279272369474e-14 5.70371468045593e-18 158489.3 1.34398101093556e-14 1.27927237620151e-14 5.70371397889315e-18 199526.2 1.3439807295524e-14 1.27927259952487e-14 5.70371352417664e-18 251188.6 1.34398066482307e-14 1.27927288063938e-14 5.70371371913377e-18 316227.8 1.34398006318182e-14 1.27927230542497e-14 5.70371336935356e-18 398107.2 1.34398021882281e-14 1.27927237145428e-14 5.70371256255342e-18 501187.2 1.34398032525547e-14 1.27927259839423e-14 5.70371327880486e-18 630957.3 1.34398040574638e-14 1.27927260634947e-14 5.7037121859094e-18 794328.2 1.34398041359132e-14 1.27927259127496e-14 5.70371389705458e-18 1000000 1.34398041553076e-14 1.279272472008e-14 5.70371368150637e-18 1258925 1.34398111512731e-14 1.279272369474e-14 5.70371468045593e-18 1584893 1.34398101093556e-14 1.27927237620151e-14 5.70371397889315e-18 1995262 1.3439807295524e-14 1.27927259952487e-14 5.70371352417664e-18 2511886 1.34398066482307e-14 1.27927288063938e-14 5.70371371913377e-18 3162278 1.34398006318182e-14 1.27927230542497e-14 5.70371336935356e-18 3981072 1.34398021882281e-14 1.27927237145428e-14 5.70371256255342e-18 5011872 1.34398032525547e-14 1.27927259839423e-14 5.70371327880486e-18 6309573 1.34398040574638e-14 1.27927260634947e-14 5.70371218590939e-18 7943282 1.34398041359132e-14 1.27927259127496e-14 5.70371389705458e-18 10000000 1.34398041553076e-14 1.279272472008e-14 5.70371368150637e-18 12589250 1.34398111512731e-14 1.279272369474e-14 5.70371468045593e-18 15848930 1.34398101093556e-14 1.27927237620151e-14 5.70371397889315e-18 19952620 1.3439807295524e-14 1.27927259952487e-14 5.70371352417664e-18 25118860 1.34398066482307e-14 1.27927288063938e-14 5.70371371913377e-18 31622780 1.34398006318182e-14 1.27927230542497e-14 5.70371336935356e-18 39810720 1.34398021882281e-14 1.27927237145428e-14 5.70371256255342e-18 50118720 1.34398032525547e-14 1.27927259839423e-14 5.70371327880486e-18 63095730 1.34398040574638e-14 1.27927260634947e-14 5.7037121859094e-18 79432820 1.34398041359132e-14 1.27927259127496e-14 5.70371389705458e-18 100000000 1.34398041553076e-14 1.279272472008e-14 5.70371368150637e-18 1000 1.32836779307828e-14 1.26180585362344e-14 2.78529903932687e-17 1258.925 1.32836808379355e-14 1.26180625463182e-14 2.78530031507588e-17 1584.893 1.32836771050964e-14 1.26180632691492e-14 2.78529912055158e-17 1995.262 1.32836804459605e-14 1.26180614254386e-14 2.78529964602242e-17 2511.886 1.32836794612195e-14 1.26180622683338e-14 2.78529925872609e-17 3162.278 1.32836743997269e-14 1.26180555424116e-14 2.78529882528179e-17 3981.072 1.32836764514273e-14 1.26180562225048e-14 2.78529865595469e-17 5011.872 1.32836769034158e-14 1.26180607224415e-14 2.78529914953146e-17 6309.573 1.32836778789939e-14 1.26180599801575e-14 2.78529909569953e-17 7943.282 1.32836783390365e-14 1.26180584117842e-14 2.78529896308628e-17 10000 1.32836779307828e-14 1.26180585362344e-14 2.78529903932687e-17 12589.25 1.32836808379355e-14 1.26180625463182e-14 2.78530031507588e-17 15848.93 1.32836771050965e-14 1.26180632691492e-14 2.78529912055158e-17 19952.62 1.32836804459605e-14 1.26180614254386e-14 2.78529964602242e-17 25118.86 1.32836794612195e-14 1.26180622683338e-14 2.78529925872609e-17 31622.78 1.32836743997269e-14 1.26180555424116e-14 2.78529882528179e-17 39810.72 1.32836764514273e-14 1.26180562225048e-14 2.78529865595469e-17 50118.72 1.32836769034158e-14 1.26180607224415e-14 2.78529914953146e-17 63095.73 1.32836778789939e-14 1.26180599801575e-14 2.78529909569953e-17 79432.82 1.32836783390365e-14 1.26180584117842e-14 2.78529896308628e-17 100000 1.32836779307828e-14 1.26180585362344e-14 2.78529903932687e-17 125892.5 1.32836808379355e-14 1.26180625463182e-14 2.78530031507588e-17 158489.3 1.32836771050964e-14 1.26180632691492e-14 2.78529912055158e-17 199526.2 1.32836804459605e-14 1.26180614254386e-14 2.78529964602242e-17 251188.6 1.32836794612195e-14 1.26180622683338e-14 2.78529925872609e-17 316227.8 1.32836743997269e-14 1.26180555424116e-14 2.78529882528179e-17 398107.2 1.32836764514273e-14 1.26180562225048e-14 2.78529865595469e-17 501187.2 1.32836769034158e-14 1.26180607224415e-14 2.78529914953146e-17 630957.3 1.32836778789939e-14 1.26180599801575e-14 2.78529909569953e-17 794328.2 1.32836783390365e-14 1.26180584117842e-14 2.78529896308628e-17 1000000 1.32836779307828e-14 1.26180585362344e-14 2.78529903932687e-17 1258925 1.32836808379355e-14 1.26180625463182e-14 2.78530031507588e-17 1584893 1.32836771050964e-14 1.26180632691492e-14 2.78529912055158e-17 1995262 1.32836804459605e-14 1.26180614254386e-14 2.78529964602242e-17 2511886 1.32836794612195e-14 1.26180622683338e-14 2.78529925872609e-17 3162278 1.32836743997269e-14 1.26180555424116e-14 2.78529882528179e-17 3981072 1.32836764514273e-14 1.26180562225048e-14 2.78529865595469e-17 5011872 1.32836769034158e-14 1.26180607224415e-14 2.78529914953146e-17 6309573 1.32836778789939e-14 1.26180599801575e-14 2.78529909569953e-17 7943282 1.32836783390365e-14 1.26180584117842e-14 2.78529896308628e-17 10000000 1.32836779307828e-14 1.26180585362344e-14 2.78529903932687e-17 12589250 1.32836808379355e-14 1.26180625463182e-14 2.78530031507588e-17 15848930 1.32836771050964e-14 1.26180632691492e-14 2.78529912055158e-17 19952620 1.32836804459605e-14 1.26180614254386e-14 2.78529964602242e-17 25118860 1.32836794612195e-14 1.26180622683338e-14 2.78529925872609e-17 31622780 1.32836743997269e-14 1.26180555424116e-14 2.78529882528179e-17 39810720 1.32836764514273e-14 1.26180562225048e-14 2.78529865595469e-17 50118720 1.32836769034158e-14 1.26180607224415e-14 2.78529914953146e-17 63095730 1.32836778789939e-14 1.26180599801575e-14 2.78529909569953e-17 79432820 1.32836783390365e-14 1.26180584117842e-14 2.78529896308628e-17 100000000 1.32836779307828e-14 1.26180585362344e-14 2.78529903932687e-17 tmpk8ny_4pz/tests/hisim/pmos/reference/19_dcSweep_CORG=0.standard0000644000175000017500000002342613546075722024772 0ustar carstencarstenV(d) I(d) -2.000000e-01 -4.699615e-05 -3.000000e-01 -5.356444e-05 -4.000000e-01 -6.033219e-05 -5.000000e-01 -6.744931e-05 -6.000000e-01 -7.492420e-05 -7.000000e-01 -8.274226e-05 -8.000000e-01 -9.089871e-05 -9.000000e-01 -9.939829e-05 -1.000000e+00 -1.082512e-04 -1.100000e+00 -1.174704e-04 -1.200000e+00 -1.270707e-04 -1.300000e+00 -1.370679e-04 -1.400000e+00 -1.474787e-04 -1.500000e+00 -1.583210e-04 -1.600000e+00 -1.696137e-04 -1.700000e+00 -1.813767e-04 -1.800000e+00 -1.936315e-04 -2.000000e-01 -3.236954e-04 -3.000000e-01 -3.722842e-04 -4.000000e-01 -4.052186e-04 -5.000000e-01 -4.371928e-04 -6.000000e-01 -4.684500e-04 -7.000000e-01 -4.993045e-04 -8.000000e-01 -5.300657e-04 -9.000000e-01 -5.609683e-04 -1.000000e+00 -5.921825e-04 -1.100000e+00 -6.238328e-04 -1.200000e+00 -6.560127e-04 -1.300000e+00 -6.887951e-04 -1.400000e+00 -7.222391e-04 -1.500000e+00 -7.563944e-04 -1.600000e+00 -7.913044e-04 -1.700000e+00 -8.270083e-04 -1.800000e+00 -8.635422e-04 -2.000000e-01 -6.362416e-04 -3.000000e-01 -8.252108e-04 -4.000000e-01 -9.384887e-04 -5.000000e-01 -1.006766e-03 -6.000000e-01 -1.066911e-03 -7.000000e-01 -1.125791e-03 -8.000000e-01 -1.183256e-03 -9.000000e-01 -1.239416e-03 -1.000000e+00 -1.294578e-03 -1.100000e+00 -1.349078e-03 -1.200000e+00 -1.403215e-03 -1.300000e+00 -1.457236e-03 -1.400000e+00 -1.511337e-03 -1.500000e+00 -1.565674e-03 -1.600000e+00 -1.620372e-03 -1.700000e+00 -1.675532e-03 -1.800000e+00 -1.731237e-03 -2.000000e-01 -8.942919e-04 -3.000000e-01 -1.221693e-03 -4.000000e-01 -1.471297e-03 -5.000000e-01 -1.648885e-03 -6.000000e-01 -1.767189e-03 -7.000000e-01 -1.854914e-03 -8.000000e-01 -1.937134e-03 -9.000000e-01 -2.017933e-03 -1.000000e+00 -2.097230e-03 -1.100000e+00 -2.174954e-03 -1.200000e+00 -2.251232e-03 -1.300000e+00 -2.326297e-03 -1.400000e+00 -2.400412e-03 -1.500000e+00 -2.473830e-03 -1.600000e+00 -2.546779e-03 -1.700000e+00 -2.619455e-03 -1.800000e+00 -2.692024e-03 -2.000000e-01 -1.099660e-03 -3.000000e-01 -1.542998e-03 -4.000000e-01 -1.912357e-03 -5.000000e-01 -2.210948e-03 -6.000000e-01 -2.443263e-03 -7.000000e-01 -2.616248e-03 -8.000000e-01 -2.743263e-03 -9.000000e-01 -2.847346e-03 -1.000000e+00 -2.946865e-03 -1.100000e+00 -3.044792e-03 -1.200000e+00 -3.141252e-03 -1.300000e+00 -3.236151e-03 -1.400000e+00 -3.329502e-03 -1.500000e+00 -3.421422e-03 -1.600000e+00 -3.512085e-03 -1.700000e+00 -3.601685e-03 -1.800000e+00 -3.690419e-03 -2.000000e-01 -1.323288e-03 -3.000000e-01 -1.900779e-03 -4.000000e-01 -2.413864e-03 -5.000000e-01 -2.862055e-03 -6.000000e-01 -3.247311e-03 -7.000000e-01 -3.572769e-03 -8.000000e-01 -3.842246e-03 -9.000000e-01 -4.060779e-03 -1.000000e+00 -4.235768e-03 -1.100000e+00 -4.377686e-03 -1.200000e+00 -4.501075e-03 -1.300000e+00 -4.619790e-03 -1.400000e+00 -4.736666e-03 -1.500000e+00 -4.852063e-03 -1.600000e+00 -4.966006e-03 -1.700000e+00 -5.078485e-03 -1.800000e+00 -5.189527e-03 -2.000000e-01 -1.465681e-03 -3.000000e-01 -2.135731e-03 -4.000000e-01 -2.753367e-03 -5.000000e-01 -3.315155e-03 -6.000000e-01 -3.820331e-03 -7.000000e-01 -4.269931e-03 -8.000000e-01 -4.666054e-03 -9.000000e-01 -5.011370e-03 -1.000000e+00 -5.308993e-03 -1.100000e+00 -5.562716e-03 -1.200000e+00 -5.777420e-03 -1.300000e+00 -5.959268e-03 -1.400000e+00 -6.115539e-03 -1.500000e+00 -6.254781e-03 -1.600000e+00 -6.387042e-03 -1.700000e+00 -6.517185e-03 -1.800000e+00 -6.645738e-03 -2.000000e-01 -8.053777e-05 -3.000000e-01 -9.162409e-05 -4.000000e-01 -1.024997e-04 -5.000000e-01 -1.136548e-04 -6.000000e-01 -1.251789e-04 -7.000000e-01 -1.370995e-04 -8.000000e-01 -1.494356e-04 -9.000000e-01 -1.622080e-04 -1.000000e+00 -1.754382e-04 -1.100000e+00 -1.891484e-04 -1.200000e+00 -2.033607e-04 -1.300000e+00 -2.180970e-04 -1.400000e+00 -2.333799e-04 -1.500000e+00 -2.492324e-04 -1.600000e+00 -2.656781e-04 -1.700000e+00 -2.827418e-04 -1.800000e+00 -3.004492e-04 -2.000000e-01 -2.967540e-04 -3.000000e-01 -3.587330e-04 -4.000000e-01 -3.937602e-04 -5.000000e-01 -4.249225e-04 -6.000000e-01 -4.554245e-04 -7.000000e-01 -4.853715e-04 -8.000000e-01 -5.149862e-04 -9.000000e-01 -5.445097e-04 -1.000000e+00 -5.741407e-04 -1.100000e+00 -6.040315e-04 -1.200000e+00 -6.342969e-04 -1.300000e+00 -6.650254e-04 -1.400000e+00 -6.962867e-04 -1.500000e+00 -7.281374e-04 -1.600000e+00 -7.606255e-04 -1.700000e+00 -7.937927e-04 -1.800000e+00 -8.276765e-04 -2.000000e-01 -5.192224e-04 -3.000000e-01 -6.879597e-04 -4.000000e-01 -8.011363e-04 -5.000000e-01 -8.720396e-04 -6.000000e-01 -9.256745e-04 -7.000000e-01 -9.769033e-04 -8.000000e-01 -1.027362e-03 -9.000000e-01 -1.076896e-03 -1.000000e+00 -1.125564e-03 -1.100000e+00 -1.173562e-03 -1.200000e+00 -1.221119e-03 -1.300000e+00 -1.268446e-03 -1.400000e+00 -1.315726e-03 -1.500000e+00 -1.363110e-03 -1.600000e+00 -1.410721e-03 -1.700000e+00 -1.458660e-03 -1.800000e+00 -1.507013e-03 -2.000000e-01 -7.107833e-04 -3.000000e-01 -9.814930e-04 -4.000000e-01 -1.196037e-03 -5.000000e-01 -1.357425e-03 -6.000000e-01 -1.472204e-03 -7.000000e-01 -1.554887e-03 -8.000000e-01 -1.625302e-03 -9.000000e-01 -1.693712e-03 -1.000000e+00 -1.761384e-03 -1.100000e+00 -1.828127e-03 -1.200000e+00 -1.893853e-03 -1.300000e+00 -1.958629e-03 -1.400000e+00 -2.022603e-03 -1.500000e+00 -2.085948e-03 -1.600000e+00 -2.148840e-03 -1.700000e+00 -2.211441e-03 -1.800000e+00 -2.273894e-03 -2.000000e-01 -8.703534e-04 -3.000000e-01 -1.229542e-03 -4.000000e-01 -1.535299e-03 -5.000000e-01 -1.788717e-03 -6.000000e-01 -1.992234e-03 -7.000000e-01 -2.150032e-03 -8.000000e-01 -2.269922e-03 -9.000000e-01 -2.364654e-03 -1.000000e+00 -2.449433e-03 -1.100000e+00 -2.532170e-03 -1.200000e+00 -2.614133e-03 -1.300000e+00 -2.695229e-03 -1.400000e+00 -2.775330e-03 -1.500000e+00 -2.854418e-03 -1.600000e+00 -2.932552e-03 -1.700000e+00 -3.009841e-03 -1.800000e+00 -3.086415e-03 -2.000000e-01 -1.055746e-03 -3.000000e-01 -1.522006e-03 -4.000000e-01 -1.941527e-03 -5.000000e-01 -2.312983e-03 -6.000000e-01 -2.636801e-03 -7.000000e-01 -2.914587e-03 -8.000000e-01 -3.148785e-03 -9.000000e-01 -3.342837e-03 -1.000000e+00 -3.501773e-03 -1.100000e+00 -3.632590e-03 -1.200000e+00 -3.744148e-03 -1.300000e+00 -3.846545e-03 -1.400000e+00 -3.946382e-03 -1.500000e+00 -4.045210e-03 -1.600000e+00 -4.143203e-03 -1.700000e+00 -4.240296e-03 -1.800000e+00 -4.336435e-03 -2.000000e-01 -1.186306e-03 -3.000000e-01 -1.731660e-03 -4.000000e-01 -2.238332e-03 -5.000000e-01 -2.703337e-03 -6.000000e-01 -3.125332e-03 -7.000000e-01 -3.504342e-03 -8.000000e-01 -3.841383e-03 -9.000000e-01 -4.138137e-03 -1.000000e+00 -4.396808e-03 -1.100000e+00 -4.620185e-03 -1.200000e+00 -4.811857e-03 -1.300000e+00 -4.976335e-03 -1.400000e+00 -5.118917e-03 -1.500000e+00 -5.245465e-03 -1.600000e+00 -5.362370e-03 -1.700000e+00 -5.475384e-03 -1.800000e+00 -5.586920e-03 -2.000000e-01 -1.215310e-04 -3.000000e-01 -1.449795e-04 -4.000000e-01 -1.644397e-04 -5.000000e-01 -1.838944e-04 -6.000000e-01 -2.037631e-04 -7.000000e-01 -2.241339e-04 -8.000000e-01 -2.450728e-04 -9.000000e-01 -2.666381e-04 -1.000000e+00 -2.888803e-04 -1.100000e+00 -3.118434e-04 -1.200000e+00 -3.355664e-04 -1.300000e+00 -3.600852e-04 -1.400000e+00 -3.854342e-04 -1.500000e+00 -4.116469e-04 -1.600000e+00 -4.387567e-04 -1.700000e+00 -4.667976e-04 -1.800000e+00 -4.958045e-04 -2.000000e-01 -2.683866e-04 -3.000000e-01 -3.434866e-04 -4.000000e-01 -3.905718e-04 -5.000000e-01 -4.254121e-04 -6.000000e-01 -4.579229e-04 -7.000000e-01 -4.899888e-04 -8.000000e-01 -5.217546e-04 -9.000000e-01 -5.533460e-04 -1.000000e+00 -5.849287e-04 -1.100000e+00 -6.166606e-04 -1.200000e+00 -6.486752e-04 -1.300000e+00 -6.810800e-04 -1.400000e+00 -7.139613e-04 -1.500000e+00 -7.473894e-04 -1.600000e+00 -7.814225e-04 -1.700000e+00 -8.161101e-04 -1.800000e+00 -8.514956e-04 -2.000000e-01 -4.174948e-04 -3.000000e-01 -5.651320e-04 -4.000000e-01 -6.748377e-04 -5.000000e-01 -7.519469e-04 -6.000000e-01 -8.074889e-04 -7.000000e-01 -8.544460e-04 -8.000000e-01 -8.996975e-04 -9.000000e-01 -9.444786e-04 -1.000000e+00 -9.887737e-04 -1.100000e+00 -1.032583e-03 -1.200000e+00 -1.076001e-03 -1.300000e+00 -1.119162e-03 -1.400000e+00 -1.162206e-03 -1.500000e+00 -1.205264e-03 -1.600000e+00 -1.248450e-03 -1.700000e+00 -1.291863e-03 -1.800000e+00 -1.335586e-03 -2.000000e-01 -5.523075e-04 -3.000000e-01 -7.705283e-04 -4.000000e-01 -9.501590e-04 -5.000000e-01 -1.092854e-03 -6.000000e-01 -1.201930e-03 -7.000000e-01 -1.284056e-03 -8.000000e-01 -1.349422e-03 -9.000000e-01 -1.408062e-03 -1.000000e+00 -1.465169e-03 -1.100000e+00 -1.521831e-03 -1.200000e+00 -1.578020e-03 -1.300000e+00 -1.633658e-03 -1.400000e+00 -1.688747e-03 -1.500000e+00 -1.743357e-03 -1.600000e+00 -1.797587e-03 -1.700000e+00 -1.851545e-03 -1.800000e+00 -1.905340e-03 -2.000000e-01 -6.699586e-04 -3.000000e-01 -9.519966e-04 -4.000000e-01 -1.196965e-03 -5.000000e-01 -1.405155e-03 -6.000000e-01 -1.577904e-03 -7.000000e-01 -1.717682e-03 -8.000000e-01 -1.828773e-03 -9.000000e-01 -1.917844e-03 -1.000000e+00 -1.993249e-03 -1.100000e+00 -2.062742e-03 -1.200000e+00 -2.130579e-03 -1.300000e+00 -2.197915e-03 -1.400000e+00 -2.264816e-03 -1.500000e+00 -2.331190e-03 -1.600000e+00 -2.396992e-03 -1.700000e+00 -2.462231e-03 -1.800000e+00 -2.526956e-03 -2.000000e-01 -8.151175e-04 -3.000000e-01 -1.178259e-03 -4.000000e-01 -1.508450e-03 -5.000000e-01 -1.804478e-03 -6.000000e-01 -2.066202e-03 -7.000000e-01 -2.294404e-03 -8.000000e-01 -2.490612e-03 -9.000000e-01 -2.657086e-03 -1.000000e+00 -2.797037e-03 -1.100000e+00 -2.914811e-03 -1.200000e+00 -3.015698e-03 -1.300000e+00 -3.105458e-03 -1.400000e+00 -3.189490e-03 -1.500000e+00 -3.271330e-03 -1.600000e+00 -3.352374e-03 -1.700000e+00 -3.432950e-03 -1.800000e+00 -3.513054e-03 -2.000000e-01 -9.263926e-04 -3.000000e-01 -1.353590e-03 -4.000000e-01 -1.752829e-03 -5.000000e-01 -2.121990e-03 -6.000000e-01 -2.459839e-03 -7.000000e-01 -2.766039e-03 -8.000000e-01 -3.041016e-03 -9.000000e-01 -3.285795e-03 -1.000000e+00 -3.501875e-03 -1.100000e+00 -3.691217e-03 -1.200000e+00 -3.856317e-03 -1.300000e+00 -4.000255e-03 -1.400000e+00 -4.126613e-03 -1.500000e+00 -4.239259e-03 -1.600000e+00 -4.342117e-03 -1.700000e+00 -4.438929e-03 -1.800000e+00 -4.532697e-03 tmpk8ny_4pz/tests/hisim/pmos/reference/47_acFreq_COISUB=1.standard0000644000175000017500000002530213546075722025030 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1258.925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584.893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995.262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511.886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162.278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981.072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011.872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309.573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943.282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 10000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589.25 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848.93 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952.62 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118.86 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622.78 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810.72 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118.72 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095.73 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432.82 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 125892.5 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 158489.3 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 199526.2 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 251188.6 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 316227.8 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 398107.2 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 501187.2 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 630957.3 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 794328.2 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 1000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 1258925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 10000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589250 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848930 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952620 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118860 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622780 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810720 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118720 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095730 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432820 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258.925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584.893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995.262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511.886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162.278 2.08988054797393e-14 1.68486984597449e-14 3.40873274812869e-15 3981.072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011.872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309.573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943.282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589.25 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848.93 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952.62 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118.86 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622.78 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810.72 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118.72 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095.73 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432.82 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 125892.5 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 158489.3 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 199526.2 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 251188.6 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 316227.8 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 398107.2 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 501187.2 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 630957.3 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 794328.2 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 1000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162278 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 3981072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589250 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848930 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952620 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118860 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622780 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810720 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118720 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095730 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432820 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258.925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584.893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995.262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511.886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162.278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981.072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011.872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309.573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943.282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589.25 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848.93 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952.62 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118.86 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622.78 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810.72 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118.72 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095.73 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432.82 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 125892.5 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 158489.3 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 199526.2 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 251188.6 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 316227.8 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 398107.2 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 501187.2 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 630957.3 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 794328.2 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 1000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589250 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848930 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952620 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118860 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622780 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810720 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118720 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095730 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432820 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/16_dcSweep_WPE.standard0000644000175000017500000002342613546075722024513 0ustar carstencarstenV(d) I(d) -2.000000e-01 -4.641622e-05 -3.000000e-01 -5.290611e-05 -4.000000e-01 -5.959665e-05 -5.000000e-01 -6.663491e-05 -6.000000e-01 -7.402805e-05 -7.000000e-01 -8.176100e-05 -8.000000e-01 -8.982866e-05 -9.000000e-01 -9.823552e-05 -1.000000e+00 -1.069915e-04 -1.100000e+00 -1.161093e-04 -1.200000e+00 -1.256035e-04 -1.300000e+00 -1.354894e-04 -1.400000e+00 -1.457837e-04 -1.500000e+00 -1.565038e-04 -1.600000e+00 -1.676684e-04 -1.700000e+00 -1.792970e-04 -1.800000e+00 -1.914106e-04 -2.000000e-01 -3.223862e-04 -3.000000e-01 -3.705740e-04 -4.000000e-01 -4.033330e-04 -5.000000e-01 -4.351397e-04 -6.000000e-01 -4.662344e-04 -7.000000e-01 -4.969319e-04 -8.000000e-01 -5.275397e-04 -9.000000e-01 -5.582905e-04 -1.000000e+00 -5.893529e-04 -1.100000e+00 -6.208502e-04 -1.200000e+00 -6.528751e-04 -1.300000e+00 -6.854998e-04 -1.400000e+00 -7.187827e-04 -1.500000e+00 -7.527731e-04 -1.600000e+00 -7.875141e-04 -1.700000e+00 -8.230443e-04 -1.800000e+00 -8.593999e-04 -2.000000e-01 -6.350008e-04 -3.000000e-01 -8.233416e-04 -4.000000e-01 -9.360531e-04 -5.000000e-01 -1.004012e-03 -6.000000e-01 -1.063963e-03 -7.000000e-01 -1.122649e-03 -8.000000e-01 -1.179918e-03 -9.000000e-01 -1.235885e-03 -1.000000e+00 -1.290858e-03 -1.100000e+00 -1.345174e-03 -1.200000e+00 -1.399129e-03 -1.300000e+00 -1.452971e-03 -1.400000e+00 -1.506894e-03 -1.500000e+00 -1.561053e-03 -1.600000e+00 -1.615572e-03 -1.700000e+00 -1.670552e-03 -1.800000e+00 -1.726076e-03 -2.000000e-01 -8.931705e-04 -3.000000e-01 -1.219990e-03 -4.000000e-01 -1.469011e-03 -5.000000e-01 -1.646029e-03 -6.000000e-01 -1.763855e-03 -7.000000e-01 -1.851311e-03 -8.000000e-01 -1.933336e-03 -9.000000e-01 -2.013939e-03 -1.000000e+00 -2.093037e-03 -1.100000e+00 -2.170560e-03 -1.200000e+00 -2.246638e-03 -1.300000e+00 -2.321507e-03 -1.400000e+00 -2.395429e-03 -1.500000e+00 -2.468657e-03 -1.600000e+00 -2.541417e-03 -1.700000e+00 -2.613906e-03 -1.800000e+00 -2.686291e-03 -2.000000e-01 -1.098652e-03 -3.000000e-01 -1.541458e-03 -4.000000e-01 -1.910282e-03 -5.000000e-01 -2.208338e-03 -6.000000e-01 -2.440120e-03 -7.000000e-01 -2.612598e-03 -8.000000e-01 -2.739200e-03 -9.000000e-01 -2.843043e-03 -1.000000e+00 -2.942371e-03 -1.100000e+00 -3.040108e-03 -1.200000e+00 -3.136374e-03 -1.300000e+00 -3.231076e-03 -1.400000e+00 -3.324231e-03 -1.500000e+00 -3.415956e-03 -1.600000e+00 -3.506424e-03 -1.700000e+00 -3.595833e-03 -1.800000e+00 -3.684377e-03 -2.000000e-01 -1.322430e-03 -3.000000e-01 -1.899458e-03 -4.000000e-01 -2.412072e-03 -5.000000e-01 -2.859788e-03 -6.000000e-01 -3.244570e-03 -7.000000e-01 -3.569554e-03 -8.000000e-01 -3.838558e-03 -9.000000e-01 -4.056630e-03 -1.000000e+00 -4.231194e-03 -1.100000e+00 -4.372757e-03 -1.200000e+00 -4.495916e-03 -1.300000e+00 -4.614453e-03 -1.400000e+00 -4.731151e-03 -1.500000e+00 -4.846368e-03 -1.600000e+00 -4.960129e-03 -1.700000e+00 -5.072423e-03 -1.800000e+00 -5.183280e-03 -2.000000e-01 -1.464950e-03 -3.000000e-01 -2.134599e-03 -4.000000e-01 -2.751822e-03 -5.000000e-01 -3.313188e-03 -6.000000e-01 -3.817938e-03 -7.000000e-01 -4.267112e-03 -8.000000e-01 -4.662809e-03 -9.000000e-01 -5.007700e-03 -1.000000e+00 -5.304899e-03 -1.100000e+00 -5.558205e-03 -1.200000e+00 -5.772511e-03 -1.300000e+00 -5.953992e-03 -1.400000e+00 -6.109943e-03 -1.500000e+00 -6.248940e-03 -1.600000e+00 -6.381031e-03 -1.700000e+00 -6.511008e-03 -1.800000e+00 -6.639395e-03 -2.000000e-01 -7.987137e-05 -3.000000e-01 -9.085765e-05 -4.000000e-01 -1.016418e-04 -5.000000e-01 -1.127065e-04 -6.000000e-01 -1.241393e-04 -7.000000e-01 -1.359664e-04 -8.000000e-01 -1.482060e-04 -9.000000e-01 -1.608784e-04 -1.000000e+00 -1.740049e-04 -1.100000e+00 -1.876070e-04 -1.200000e+00 -2.017064e-04 -1.300000e+00 -2.163251e-04 -1.400000e+00 -2.314851e-04 -1.500000e+00 -2.472090e-04 -1.600000e+00 -2.635203e-04 -1.700000e+00 -2.804433e-04 -1.800000e+00 -2.980035e-04 -2.000000e-01 -2.957676e-04 -3.000000e-01 -3.573364e-04 -4.000000e-01 -3.921527e-04 -5.000000e-01 -4.231669e-04 -6.000000e-01 -4.535211e-04 -7.000000e-01 -4.833226e-04 -8.000000e-01 -5.127950e-04 -9.000000e-01 -5.421783e-04 -1.000000e+00 -5.716701e-04 -1.100000e+00 -6.014214e-04 -1.200000e+00 -6.315463e-04 -1.300000e+00 -6.621324e-04 -1.400000e+00 -6.932486e-04 -1.500000e+00 -7.249514e-04 -1.600000e+00 -7.572881e-04 -1.700000e+00 -7.903002e-04 -1.800000e+00 -8.240247e-04 -2.000000e-01 -5.182834e-04 -3.000000e-01 -6.865355e-04 -4.000000e-01 -7.992469e-04 -5.000000e-01 -8.697982e-04 -6.000000e-01 -9.232361e-04 -7.000000e-01 -9.743031e-04 -8.000000e-01 -1.024596e-03 -9.000000e-01 -1.073961e-03 -1.000000e+00 -1.122462e-03 -1.100000e+00 -1.170294e-03 -1.200000e+00 -1.217688e-03 -1.300000e+00 -1.264854e-03 -1.400000e+00 -1.311973e-03 -1.500000e+00 -1.359197e-03 -1.600000e+00 -1.406648e-03 -1.700000e+00 -1.454426e-03 -1.800000e+00 -1.502617e-03 -2.000000e-01 -7.099220e-04 -3.000000e-01 -9.801755e-04 -4.000000e-01 -1.194259e-03 -5.000000e-01 -1.355188e-03 -6.000000e-01 -1.469548e-03 -7.000000e-01 -1.551926e-03 -8.000000e-01 -1.622152e-03 -9.000000e-01 -1.690398e-03 -1.000000e+00 -1.757902e-03 -1.100000e+00 -1.824472e-03 -1.200000e+00 -1.890024e-03 -1.300000e+00 -1.954627e-03 -1.400000e+00 -2.018427e-03 -1.500000e+00 -2.081602e-03 -1.600000e+00 -2.144324e-03 -1.700000e+00 -2.206755e-03 -1.800000e+00 -2.269041e-03 -2.000000e-01 -8.695681e-04 -3.000000e-01 -1.228335e-03 -4.000000e-01 -1.533662e-03 -5.000000e-01 -1.786646e-03 -6.000000e-01 -1.989728e-03 -7.000000e-01 -2.147105e-03 -8.000000e-01 -2.266620e-03 -9.000000e-01 -2.361076e-03 -1.000000e+00 -2.445672e-03 -1.100000e+00 -2.528247e-03 -1.200000e+00 -2.610045e-03 -1.300000e+00 -2.690971e-03 -1.400000e+00 -2.770901e-03 -1.500000e+00 -2.849815e-03 -1.600000e+00 -2.927776e-03 -1.700000e+00 -3.004892e-03 -1.800000e+00 -3.081294e-03 -2.000000e-01 -1.055064e-03 -3.000000e-01 -1.520952e-03 -4.000000e-01 -1.940089e-03 -5.000000e-01 -2.311154e-03 -6.000000e-01 -2.634577e-03 -7.000000e-01 -2.911967e-03 -8.000000e-01 -3.145769e-03 -9.000000e-01 -3.339432e-03 -1.000000e+00 -3.498001e-03 -1.100000e+00 -3.628495e-03 -1.200000e+00 -3.739796e-03 -1.300000e+00 -3.842012e-03 -1.400000e+00 -3.941692e-03 -1.500000e+00 -4.040364e-03 -1.600000e+00 -4.138198e-03 -1.700000e+00 -4.235128e-03 -1.800000e+00 -4.331102e-03 -2.000000e-01 -1.185713e-03 -3.000000e-01 -1.730740e-03 -4.000000e-01 -2.237072e-03 -5.000000e-01 -2.701725e-03 -6.000000e-01 -3.123363e-03 -7.000000e-01 -3.502013e-03 -8.000000e-01 -3.838690e-03 -9.000000e-01 -4.135081e-03 -1.000000e+00 -4.393390e-03 -1.100000e+00 -4.616410e-03 -1.200000e+00 -4.807739e-03 -1.300000e+00 -4.971894e-03 -1.400000e+00 -5.114186e-03 -1.500000e+00 -5.240488e-03 -1.600000e+00 -5.357202e-03 -1.700000e+00 -5.470062e-03 -1.800000e+00 -5.581449e-03 -2.000000e-01 -1.208707e-04 -3.000000e-01 -1.441316e-04 -4.000000e-01 -1.634607e-04 -5.000000e-01 -1.827895e-04 -6.000000e-01 -2.025319e-04 -7.000000e-01 -2.227747e-04 -8.000000e-01 -2.435828e-04 -9.000000e-01 -2.650136e-04 -1.000000e+00 -2.871168e-04 -1.100000e+00 -3.099356e-04 -1.200000e+00 -3.335088e-04 -1.300000e+00 -3.578717e-04 -1.400000e+00 -3.830582e-04 -1.500000e+00 -4.091013e-04 -1.600000e+00 -4.360343e-04 -1.700000e+00 -4.638906e-04 -1.800000e+00 -4.927047e-04 -2.000000e-01 -2.676524e-04 -3.000000e-01 -3.423971e-04 -4.000000e-01 -3.892042e-04 -5.000000e-01 -4.238673e-04 -6.000000e-01 -4.562316e-04 -7.000000e-01 -4.881506e-04 -8.000000e-01 -5.197683e-04 -9.000000e-01 -5.512118e-04 -1.000000e+00 -5.826467e-04 -1.100000e+00 -6.142307e-04 -1.200000e+00 -6.460963e-04 -1.300000e+00 -6.783503e-04 -1.400000e+00 -7.110786e-04 -1.500000e+00 -7.443508e-04 -1.600000e+00 -7.782247e-04 -1.700000e+00 -8.127493e-04 -1.800000e+00 -8.479677e-04 -2.000000e-01 -4.167972e-04 -3.000000e-01 -5.640670e-04 -4.000000e-01 -6.734075e-04 -5.000000e-01 -7.501865e-04 -6.000000e-01 -8.054820e-04 -7.000000e-01 -8.522706e-04 -8.000000e-01 -8.973748e-04 -9.000000e-01 -9.420056e-04 -1.000000e+00 -9.861470e-04 -1.100000e+00 -1.029802e-03 -1.200000e+00 -1.073064e-03 -1.300000e+00 -1.116070e-03 -1.400000e+00 -1.158960e-03 -1.500000e+00 -1.201863e-03 -1.600000e+00 -1.244894e-03 -1.700000e+00 -1.288151e-03 -1.800000e+00 -1.331716e-03 -2.000000e-01 -5.516606e-04 -3.000000e-01 -7.695340e-04 -4.000000e-01 -9.488097e-04 -5.000000e-01 -1.091148e-03 -6.000000e-01 -1.199881e-03 -7.000000e-01 -1.281709e-03 -8.000000e-01 -1.346851e-03 -9.000000e-01 -1.405328e-03 -1.000000e+00 -1.462289e-03 -1.100000e+00 -1.518804e-03 -1.200000e+00 -1.574843e-03 -1.300000e+00 -1.630325e-03 -1.400000e+00 -1.685260e-03 -1.500000e+00 -1.739714e-03 -1.600000e+00 -1.793787e-03 -1.700000e+00 -1.847589e-03 -1.800000e+00 -1.901229e-03 -2.000000e-01 -6.693615e-04 -3.000000e-01 -9.510757e-04 -4.000000e-01 -1.195710e-03 -5.000000e-01 -1.403560e-03 -6.000000e-01 -1.575967e-03 -7.000000e-01 -1.715408e-03 -8.000000e-01 -1.826184e-03 -9.000000e-01 -1.914983e-03 -1.000000e+00 -1.990178e-03 -1.100000e+00 -2.059511e-03 -1.200000e+00 -2.127205e-03 -1.300000e+00 -2.194399e-03 -1.400000e+00 -2.261153e-03 -1.500000e+00 -2.327378e-03 -1.600000e+00 -2.393027e-03 -1.700000e+00 -2.458113e-03 -1.800000e+00 -2.522684e-03 -2.000000e-01 -8.145887e-04 -3.000000e-01 -1.177441e-03 -4.000000e-01 -1.507330e-03 -5.000000e-01 -1.803048e-03 -6.000000e-01 -2.064456e-03 -7.000000e-01 -2.292340e-03 -8.000000e-01 -2.488230e-03 -9.000000e-01 -2.654389e-03 -1.000000e+00 -2.794039e-03 -1.100000e+00 -2.911534e-03 -1.200000e+00 -3.012177e-03 -1.300000e+00 -3.101737e-03 -1.400000e+00 -3.185609e-03 -1.500000e+00 -3.267309e-03 -1.600000e+00 -3.348216e-03 -1.700000e+00 -3.428654e-03 -1.800000e+00 -3.508617e-03 -2.000000e-01 -9.259241e-04 -3.000000e-01 -1.352863e-03 -4.000000e-01 -1.751832e-03 -5.000000e-01 -2.120711e-03 -6.000000e-01 -2.458272e-03 -7.000000e-01 -2.764178e-03 -8.000000e-01 -3.038859e-03 -9.000000e-01 -3.283341e-03 -1.000000e+00 -3.499125e-03 -1.100000e+00 -3.688174e-03 -1.200000e+00 -3.852989e-03 -1.300000e+00 -3.996656e-03 -1.400000e+00 -4.122764e-03 -1.500000e+00 -4.235185e-03 -1.600000e+00 -4.337848e-03 -1.700000e+00 -4.434496e-03 -1.800000e+00 -4.528122e-03 tmpk8ny_4pz/tests/hisim/pmos/reference/14_dcSweep_COISTI=1_NSUBC.standard0000644000175000017500000002342613546075722026160 0ustar carstencarstenV(d) I(d) -2.000000e-01 -9.149765e-04 -3.000000e-01 -1.312071e-03 -4.000000e-01 -1.433168e-03 -5.000000e-01 -1.496034e-03 -6.000000e-01 -1.555059e-03 -7.000000e-01 -1.614410e-03 -8.000000e-01 -1.674240e-03 -9.000000e-01 -1.734532e-03 -1.000000e+00 -1.795358e-03 -1.100000e+00 -1.856851e-03 -1.200000e+00 -1.919158e-03 -1.300000e+00 -1.982431e-03 -1.400000e+00 -2.046820e-03 -1.500000e+00 -2.112466e-03 -1.600000e+00 -2.179509e-03 -1.700000e+00 -2.248084e-03 -1.800000e+00 -2.318324e-03 -2.000000e-01 -9.232297e-04 -3.000000e-01 -1.327337e-03 -4.000000e-01 -1.710863e-03 -5.000000e-01 -1.958674e-03 -6.000000e-01 -2.093061e-03 -7.000000e-01 -2.189930e-03 -8.000000e-01 -2.275584e-03 -9.000000e-01 -2.356945e-03 -1.000000e+00 -2.436286e-03 -1.100000e+00 -2.514620e-03 -1.200000e+00 -2.592523e-03 -1.300000e+00 -2.670375e-03 -1.400000e+00 -2.748455e-03 -1.500000e+00 -2.826978e-03 -1.600000e+00 -2.906118e-03 -1.700000e+00 -2.986021e-03 -1.800000e+00 -3.066812e-03 -2.000000e-01 -1.095416e-03 -3.000000e-01 -1.532864e-03 -4.000000e-01 -1.908293e-03 -5.000000e-01 -2.251935e-03 -6.000000e-01 -2.549626e-03 -7.000000e-01 -2.763046e-03 -8.000000e-01 -2.913534e-03 -9.000000e-01 -3.033796e-03 -1.000000e+00 -3.140514e-03 -1.100000e+00 -3.240484e-03 -1.200000e+00 -3.336646e-03 -1.300000e+00 -3.430477e-03 -1.400000e+00 -3.522832e-03 -1.500000e+00 -3.614269e-03 -1.600000e+00 -3.705181e-03 -1.700000e+00 -3.795862e-03 -1.800000e+00 -3.886539e-03 -2.000000e-01 -1.266181e-03 -3.000000e-01 -1.788446e-03 -4.000000e-01 -2.239391e-03 -5.000000e-01 -2.625167e-03 -6.000000e-01 -2.956214e-03 -7.000000e-01 -3.254331e-03 -8.000000e-01 -3.511588e-03 -9.000000e-01 -3.714657e-03 -1.000000e+00 -3.876238e-03 -1.100000e+00 -4.013410e-03 -1.200000e+00 -4.137132e-03 -1.300000e+00 -4.253089e-03 -1.400000e+00 -4.364192e-03 -1.500000e+00 -4.472039e-03 -1.600000e+00 -4.577602e-03 -1.700000e+00 -4.681523e-03 -1.800000e+00 -4.784263e-03 -2.000000e-01 -1.410458e-03 -3.000000e-01 -2.013890e-03 -4.000000e-01 -2.546215e-03 -5.000000e-01 -3.012144e-03 -6.000000e-01 -3.416584e-03 -7.000000e-01 -3.764445e-03 -8.000000e-01 -4.064268e-03 -9.000000e-01 -4.332522e-03 -1.000000e+00 -4.569253e-03 -1.100000e+00 -4.768351e-03 -1.200000e+00 -4.937569e-03 -1.300000e+00 -5.086916e-03 -1.400000e+00 -5.223801e-03 -1.500000e+00 -5.352736e-03 -1.600000e+00 -5.476335e-03 -1.700000e+00 -5.596153e-03 -1.800000e+00 -5.713172e-03 -2.000000e-01 -1.569615e-03 -3.000000e-01 -2.272355e-03 -4.000000e-01 -2.911045e-03 -5.000000e-01 -3.486223e-03 -6.000000e-01 -4.001100e-03 -7.000000e-01 -4.459595e-03 -8.000000e-01 -4.865291e-03 -9.000000e-01 -5.221495e-03 -1.000000e+00 -5.532079e-03 -1.100000e+00 -5.802606e-03 -1.200000e+00 -6.043859e-03 -1.300000e+00 -6.264340e-03 -1.400000e+00 -6.461017e-03 -1.500000e+00 -6.637501e-03 -1.600000e+00 -6.799003e-03 -1.700000e+00 -6.949893e-03 -1.800000e+00 -7.093283e-03 -2.000000e-01 -1.666869e-03 -3.000000e-01 -2.438619e-03 -4.000000e-01 -3.157347e-03 -5.000000e-01 -3.820091e-03 -6.000000e-01 -4.427010e-03 -7.000000e-01 -4.980095e-03 -8.000000e-01 -5.482150e-03 -9.000000e-01 -5.936103e-03 -1.000000e+00 -6.344668e-03 -1.100000e+00 -6.710377e-03 -1.200000e+00 -7.035842e-03 -1.300000e+00 -7.324036e-03 -1.400000e+00 -7.578767e-03 -1.500000e+00 -7.806338e-03 -1.600000e+00 -8.016639e-03 -1.700000e+00 -8.211786e-03 -1.800000e+00 -8.392274e-03 -2.000000e-01 -9.251483e-04 -3.000000e-01 -1.400997e-03 -4.000000e-01 -1.622351e-03 -5.000000e-01 -1.714781e-03 -6.000000e-01 -1.788269e-03 -7.000000e-01 -1.858537e-03 -8.000000e-01 -1.927932e-03 -9.000000e-01 -1.997102e-03 -1.000000e+00 -2.066400e-03 -1.100000e+00 -2.136103e-03 -1.200000e+00 -2.206440e-03 -1.300000e+00 -2.277614e-03 -1.400000e+00 -2.349806e-03 -1.500000e+00 -2.423179e-03 -1.600000e+00 -2.497883e-03 -1.700000e+00 -2.574062e-03 -1.800000e+00 -2.651853e-03 -2.000000e-01 -9.004562e-04 -3.000000e-01 -1.309167e-03 -4.000000e-01 -1.709083e-03 -5.000000e-01 -2.018699e-03 -6.000000e-01 -2.197293e-03 -7.000000e-01 -2.313527e-03 -8.000000e-01 -2.408984e-03 -9.000000e-01 -2.496530e-03 -1.000000e+00 -2.580343e-03 -1.100000e+00 -2.662153e-03 -1.200000e+00 -2.742868e-03 -1.300000e+00 -2.823050e-03 -1.400000e+00 -2.903088e-03 -1.500000e+00 -2.983268e-03 -1.600000e+00 -3.063816e-03 -1.700000e+00 -3.144912e-03 -1.800000e+00 -3.226709e-03 -2.000000e-01 -9.965683e-04 -3.000000e-01 -1.424684e-03 -4.000000e-01 -1.809940e-03 -5.000000e-01 -2.162401e-03 -6.000000e-01 -2.481521e-03 -7.000000e-01 -2.728326e-03 -8.000000e-01 -2.902116e-03 -9.000000e-01 -3.034214e-03 -1.000000e+00 -3.146682e-03 -1.100000e+00 -3.249490e-03 -1.200000e+00 -3.346952e-03 -1.300000e+00 -3.441139e-03 -1.400000e+00 -3.533199e-03 -1.500000e+00 -3.623852e-03 -1.600000e+00 -3.713591e-03 -1.700000e+00 -3.802780e-03 -1.800000e+00 -3.891698e-03 -2.000000e-01 -1.107086e-03 -3.000000e-01 -1.588163e-03 -4.000000e-01 -2.020564e-03 -5.000000e-01 -2.406972e-03 -6.000000e-01 -2.750770e-03 -7.000000e-01 -3.058797e-03 -8.000000e-01 -3.331277e-03 -9.000000e-01 -3.552663e-03 -1.000000e+00 -3.726767e-03 -1.100000e+00 -3.870138e-03 -1.200000e+00 -3.996051e-03 -1.300000e+00 -4.111994e-03 -1.400000e+00 -4.221847e-03 -1.500000e+00 -4.327689e-03 -1.600000e+00 -4.430727e-03 -1.700000e+00 -4.531736e-03 -1.800000e+00 -4.631251e-03 -2.000000e-01 -1.208704e-03 -3.000000e-01 -1.745351e-03 -4.000000e-01 -2.233061e-03 -5.000000e-01 -2.673490e-03 -6.000000e-01 -3.069016e-03 -7.000000e-01 -3.421711e-03 -8.000000e-01 -3.734234e-03 -9.000000e-01 -4.011272e-03 -1.000000e+00 -4.256918e-03 -1.100000e+00 -4.466025e-03 -1.200000e+00 -4.641572e-03 -1.300000e+00 -4.793285e-03 -1.400000e+00 -4.929741e-03 -1.500000e+00 -5.056552e-03 -1.600000e+00 -5.177031e-03 -1.700000e+00 -5.293124e-03 -1.800000e+00 -5.406020e-03 -2.000000e-01 -1.331359e-03 -3.000000e-01 -1.940890e-03 -4.000000e-01 -2.506041e-03 -5.000000e-01 -3.025747e-03 -6.000000e-01 -3.501024e-03 -7.000000e-01 -3.933831e-03 -8.000000e-01 -4.326181e-03 -9.000000e-01 -4.679760e-03 -1.000000e+00 -4.996085e-03 -1.100000e+00 -5.276891e-03 -1.200000e+00 -5.525501e-03 -1.300000e+00 -5.748477e-03 -1.400000e+00 -5.948324e-03 -1.500000e+00 -6.126086e-03 -1.600000e+00 -6.286551e-03 -1.700000e+00 -6.434602e-03 -1.800000e+00 -6.573938e-03 -2.000000e-01 -1.416524e-03 -3.000000e-01 -2.081044e-03 -4.000000e-01 -2.708319e-03 -5.000000e-01 -3.295318e-03 -6.000000e-01 -3.841061e-03 -7.000000e-01 -4.346056e-03 -8.000000e-01 -4.811693e-03 -9.000000e-01 -5.239702e-03 -1.000000e+00 -5.631767e-03 -1.100000e+00 -5.989354e-03 -1.200000e+00 -6.313729e-03 -1.300000e+00 -6.606069e-03 -1.400000e+00 -6.867794e-03 -1.500000e+00 -7.101516e-03 -1.600000e+00 -7.312506e-03 -1.700000e+00 -7.506751e-03 -1.800000e+00 -7.685915e-03 -2.000000e-01 -8.934599e-04 -3.000000e-01 -1.377643e-03 -4.000000e-01 -1.735261e-03 -5.000000e-01 -1.897501e-03 -6.000000e-01 -1.998268e-03 -7.000000e-01 -2.085511e-03 -8.000000e-01 -2.168610e-03 -9.000000e-01 -2.250053e-03 -1.000000e+00 -2.330872e-03 -1.100000e+00 -2.411661e-03 -1.200000e+00 -2.492827e-03 -1.300000e+00 -2.574679e-03 -1.400000e+00 -2.657462e-03 -1.500000e+00 -2.741383e-03 -1.600000e+00 -2.826623e-03 -1.700000e+00 -2.913344e-03 -1.800000e+00 -3.001695e-03 -2.000000e-01 -8.555843e-04 -3.000000e-01 -1.260704e-03 -4.000000e-01 -1.657924e-03 -5.000000e-01 -2.015303e-03 -6.000000e-01 -2.261883e-03 -7.000000e-01 -2.416649e-03 -8.000000e-01 -2.531899e-03 -9.000000e-01 -2.631799e-03 -1.000000e+00 -2.724740e-03 -1.100000e+00 -2.813973e-03 -1.200000e+00 -2.901054e-03 -1.300000e+00 -2.986875e-03 -1.400000e+00 -3.072022e-03 -1.500000e+00 -3.156910e-03 -1.600000e+00 -3.241853e-03 -1.700000e+00 -3.327094e-03 -1.800000e+00 -3.412832e-03 -2.000000e-01 -8.989893e-04 -3.000000e-01 -1.307696e-03 -4.000000e-01 -1.691009e-03 -5.000000e-01 -2.050515e-03 -6.000000e-01 -2.383159e-03 -7.000000e-01 -2.664810e-03 -8.000000e-01 -2.874339e-03 -9.000000e-01 -3.028710e-03 -1.000000e+00 -3.153469e-03 -1.100000e+00 -3.263485e-03 -1.200000e+00 -3.365607e-03 -1.300000e+00 -3.463025e-03 -1.400000e+00 -3.557394e-03 -1.500000e+00 -3.649692e-03 -1.600000e+00 -3.740562e-03 -1.700000e+00 -3.830467e-03 -1.800000e+00 -3.919755e-03 -2.000000e-01 -9.628973e-04 -3.000000e-01 -1.399928e-03 -4.000000e-01 -1.806559e-03 -5.000000e-01 -2.184082e-03 -6.000000e-01 -2.533154e-03 -7.000000e-01 -2.853139e-03 -8.000000e-01 -3.139621e-03 -9.000000e-01 -3.382188e-03 -1.000000e+00 -3.575894e-03 -1.100000e+00 -3.731643e-03 -1.200000e+00 -3.863959e-03 -1.300000e+00 -3.982748e-03 -1.400000e+00 -4.093482e-03 -1.500000e+00 -4.199073e-03 -1.600000e+00 -4.301143e-03 -1.700000e+00 -4.400675e-03 -1.800000e+00 -4.498319e-03 -2.000000e-01 -1.028399e-03 -3.000000e-01 -1.499709e-03 -4.000000e-01 -1.939645e-03 -5.000000e-01 -2.348615e-03 -6.000000e-01 -2.727738e-03 -7.000000e-01 -3.077715e-03 -8.000000e-01 -3.398289e-03 -9.000000e-01 -3.687902e-03 -1.000000e+00 -3.944159e-03 -1.100000e+00 -4.165063e-03 -1.200000e+00 -4.350970e-03 -1.300000e+00 -4.508722e-03 -1.400000e+00 -4.647331e-03 -1.500000e+00 -4.773710e-03 -1.600000e+00 -4.892211e-03 -1.700000e+00 -5.005412e-03 -1.800000e+00 -5.114851e-03 -2.000000e-01 -1.115540e-03 -3.000000e-01 -1.636187e-03 -4.000000e-01 -2.127702e-03 -5.000000e-01 -2.588805e-03 -6.000000e-01 -3.019541e-03 -7.000000e-01 -3.420759e-03 -8.000000e-01 -3.793482e-03 -9.000000e-01 -4.138384e-03 -1.000000e+00 -4.455486e-03 -1.100000e+00 -4.744042e-03 -1.200000e+00 -5.002969e-03 -1.300000e+00 -5.232579e-03 -1.400000e+00 -5.435832e-03 -1.500000e+00 -5.616015e-03 -1.600000e+00 -5.776779e-03 -1.700000e+00 -5.922867e-03 -1.800000e+00 -6.058530e-03 -2.000000e-01 -1.183506e-03 -3.000000e-01 -1.745004e-03 -4.000000e-01 -2.281435e-03 -5.000000e-01 -2.790466e-03 -6.000000e-01 -3.270917e-03 -7.000000e-01 -3.722612e-03 -8.000000e-01 -4.146094e-03 -9.000000e-01 -4.542269e-03 -1.000000e+00 -4.912066e-03 -1.100000e+00 -5.256173e-03 -1.200000e+00 -5.574869e-03 -1.300000e+00 -5.867959e-03 -1.400000e+00 -6.134933e-03 -1.500000e+00 -6.375629e-03 -1.600000e+00 -6.591361e-03 -1.700000e+00 -6.785628e-03 -1.800000e+00 -6.962758e-03 tmpk8ny_4pz/tests/hisim/pmos/reference/21_dcSweep_CORBNET=0.standard0000644000175000017500000003447413546075722025332 0ustar carstencarstenV(d) I(d) I(b) -2.000000e-01 -4.699615e-05 2.000000e-16 -3.000000e-01 -5.356444e-05 3.000000e-16 -4.000000e-01 -6.033219e-05 4.000000e-16 -5.000000e-01 -6.744931e-05 5.000000e-16 -6.000000e-01 -7.492420e-05 6.000000e-16 -7.000000e-01 -8.274226e-05 7.000000e-16 -8.000000e-01 -9.089871e-05 8.000000e-16 -9.000000e-01 -9.939829e-05 9.000000e-16 -1.000000e+00 -1.082512e-04 1.000000e-15 -1.100000e+00 -1.174704e-04 1.100000e-15 -1.200000e+00 -1.270707e-04 1.200000e-15 -1.300000e+00 -1.370679e-04 1.300000e-15 -1.400000e+00 -1.474787e-04 1.400000e-15 -1.500000e+00 -1.583210e-04 1.500000e-15 -1.600000e+00 -1.696137e-04 1.600000e-15 -1.700000e+00 -1.813767e-04 1.700000e-15 -1.800000e+00 -1.936315e-04 1.800000e-15 -2.000000e-01 -3.236954e-04 2.000000e-16 -3.000000e-01 -3.722842e-04 3.000000e-16 -4.000000e-01 -4.052186e-04 4.000000e-16 -5.000000e-01 -4.371928e-04 5.000000e-16 -6.000000e-01 -4.684500e-04 6.000000e-16 -7.000000e-01 -4.993045e-04 7.000000e-16 -8.000000e-01 -5.300657e-04 8.000000e-16 -9.000000e-01 -5.609683e-04 9.000000e-16 -1.000000e+00 -5.921825e-04 1.000000e-15 -1.100000e+00 -6.238328e-04 1.100000e-15 -1.200000e+00 -6.560127e-04 1.200000e-15 -1.300000e+00 -6.887951e-04 1.300000e-15 -1.400000e+00 -7.222391e-04 1.400000e-15 -1.500000e+00 -7.563944e-04 1.500000e-15 -1.600000e+00 -7.913044e-04 1.600000e-15 -1.700000e+00 -8.270083e-04 1.700000e-15 -1.800000e+00 -8.635422e-04 1.800000e-15 -2.000000e-01 -6.362416e-04 2.000000e-16 -3.000000e-01 -8.252108e-04 3.000000e-16 -4.000000e-01 -9.384887e-04 4.000000e-16 -5.000000e-01 -1.006766e-03 5.000000e-16 -6.000000e-01 -1.066911e-03 6.000000e-16 -7.000000e-01 -1.125791e-03 7.000000e-16 -8.000000e-01 -1.183256e-03 8.000000e-16 -9.000000e-01 -1.239416e-03 9.000000e-16 -1.000000e+00 -1.294578e-03 1.000000e-15 -1.100000e+00 -1.349078e-03 1.100000e-15 -1.200000e+00 -1.403215e-03 1.200000e-15 -1.300000e+00 -1.457236e-03 1.300000e-15 -1.400000e+00 -1.511337e-03 1.400000e-15 -1.500000e+00 -1.565674e-03 1.500000e-15 -1.600000e+00 -1.620372e-03 1.600000e-15 -1.700000e+00 -1.675532e-03 1.700000e-15 -1.800000e+00 -1.731237e-03 1.800000e-15 -2.000000e-01 -8.942919e-04 2.000000e-16 -3.000000e-01 -1.221693e-03 3.000000e-16 -4.000000e-01 -1.471297e-03 4.000000e-16 -5.000000e-01 -1.648885e-03 5.000000e-16 -6.000000e-01 -1.767189e-03 6.000000e-16 -7.000000e-01 -1.854914e-03 7.000000e-16 -8.000000e-01 -1.937134e-03 8.000000e-16 -9.000000e-01 -2.017933e-03 9.000000e-16 -1.000000e+00 -2.097230e-03 1.000000e-15 -1.100000e+00 -2.174954e-03 1.100000e-15 -1.200000e+00 -2.251232e-03 1.200000e-15 -1.300000e+00 -2.326297e-03 1.300000e-15 -1.400000e+00 -2.400412e-03 1.400000e-15 -1.500000e+00 -2.473830e-03 1.500000e-15 -1.600000e+00 -2.546779e-03 1.600000e-15 -1.700000e+00 -2.619455e-03 1.700000e-15 -1.800000e+00 -2.692024e-03 1.800000e-15 -2.000000e-01 -1.099660e-03 2.000000e-16 -3.000000e-01 -1.542998e-03 3.000000e-16 -4.000000e-01 -1.912357e-03 4.000000e-16 -5.000000e-01 -2.210948e-03 5.000000e-16 -6.000000e-01 -2.443263e-03 6.000000e-16 -7.000000e-01 -2.616248e-03 7.000000e-16 -8.000000e-01 -2.743263e-03 8.000000e-16 -9.000000e-01 -2.847346e-03 9.000000e-16 -1.000000e+00 -2.946865e-03 1.000000e-15 -1.100000e+00 -3.044792e-03 1.100000e-15 -1.200000e+00 -3.141252e-03 1.200000e-15 -1.300000e+00 -3.236151e-03 1.300000e-15 -1.400000e+00 -3.329502e-03 1.400000e-15 -1.500000e+00 -3.421422e-03 1.500000e-15 -1.600000e+00 -3.512085e-03 1.600000e-15 -1.700000e+00 -3.601685e-03 1.700000e-15 -1.800000e+00 -3.690419e-03 1.800000e-15 -2.000000e-01 -1.323288e-03 2.000000e-16 -3.000000e-01 -1.900779e-03 3.000000e-16 -4.000000e-01 -2.413864e-03 4.000000e-16 -5.000000e-01 -2.862055e-03 5.000000e-16 -6.000000e-01 -3.247311e-03 6.000000e-16 -7.000000e-01 -3.572769e-03 7.000000e-16 -8.000000e-01 -3.842246e-03 8.000000e-16 -9.000000e-01 -4.060779e-03 9.000000e-16 -1.000000e+00 -4.235768e-03 1.000000e-15 -1.100000e+00 -4.377686e-03 1.100000e-15 -1.200000e+00 -4.501075e-03 1.200000e-15 -1.300000e+00 -4.619790e-03 1.300000e-15 -1.400000e+00 -4.736666e-03 1.400000e-15 -1.500000e+00 -4.852063e-03 1.500000e-15 -1.600000e+00 -4.966006e-03 1.600000e-15 -1.700000e+00 -5.078485e-03 1.700000e-15 -1.800000e+00 -5.189527e-03 1.800000e-15 -2.000000e-01 -1.465681e-03 2.000000e-16 -3.000000e-01 -2.135731e-03 3.000000e-16 -4.000000e-01 -2.753367e-03 4.000000e-16 -5.000000e-01 -3.315155e-03 5.000000e-16 -6.000000e-01 -3.820331e-03 6.000000e-16 -7.000000e-01 -4.269931e-03 7.000000e-16 -8.000000e-01 -4.666054e-03 8.000000e-16 -9.000000e-01 -5.011370e-03 9.000000e-16 -1.000000e+00 -5.308993e-03 1.000000e-15 -1.100000e+00 -5.562716e-03 1.100000e-15 -1.200000e+00 -5.777420e-03 1.200000e-15 -1.300000e+00 -5.959268e-03 1.300000e-15 -1.400000e+00 -6.115539e-03 1.400000e-15 -1.500000e+00 -6.254781e-03 1.500000e-15 -1.600000e+00 -6.387042e-03 1.600000e-15 -1.700000e+00 -6.517185e-03 1.700000e-15 -1.800000e+00 -6.645738e-03 1.800000e-15 -2.000000e-01 -8.053777e-05 2.000000e-16 -3.000000e-01 -9.162409e-05 3.000000e-16 -4.000000e-01 -1.024997e-04 4.000000e-16 -5.000000e-01 -1.136548e-04 5.000000e-16 -6.000000e-01 -1.251789e-04 6.000000e-16 -7.000000e-01 -1.370995e-04 7.000000e-16 -8.000000e-01 -1.494356e-04 8.000000e-16 -9.000000e-01 -1.622080e-04 9.000000e-16 -1.000000e+00 -1.754382e-04 1.000000e-15 -1.100000e+00 -1.891484e-04 1.100000e-15 -1.200000e+00 -2.033607e-04 1.200000e-15 -1.300000e+00 -2.180970e-04 1.300000e-15 -1.400000e+00 -2.333799e-04 1.400000e-15 -1.500000e+00 -2.492324e-04 1.500000e-15 -1.600000e+00 -2.656781e-04 1.600000e-15 -1.700000e+00 -2.827418e-04 1.700000e-15 -1.800000e+00 -3.004492e-04 1.800000e-15 -2.000000e-01 -2.967540e-04 2.000000e-16 -3.000000e-01 -3.587330e-04 3.000000e-16 -4.000000e-01 -3.937602e-04 4.000000e-16 -5.000000e-01 -4.249225e-04 5.000000e-16 -6.000000e-01 -4.554245e-04 6.000000e-16 -7.000000e-01 -4.853715e-04 7.000000e-16 -8.000000e-01 -5.149862e-04 8.000000e-16 -9.000000e-01 -5.445097e-04 9.000000e-16 -1.000000e+00 -5.741407e-04 1.000000e-15 -1.100000e+00 -6.040315e-04 1.100000e-15 -1.200000e+00 -6.342969e-04 1.200000e-15 -1.300000e+00 -6.650254e-04 1.300000e-15 -1.400000e+00 -6.962867e-04 1.400000e-15 -1.500000e+00 -7.281374e-04 1.500000e-15 -1.600000e+00 -7.606255e-04 1.600000e-15 -1.700000e+00 -7.937927e-04 1.700000e-15 -1.800000e+00 -8.276765e-04 1.800000e-15 -2.000000e-01 -5.192224e-04 2.000000e-16 -3.000000e-01 -6.879597e-04 3.000000e-16 -4.000000e-01 -8.011363e-04 4.000000e-16 -5.000000e-01 -8.720396e-04 5.000000e-16 -6.000000e-01 -9.256745e-04 6.000000e-16 -7.000000e-01 -9.769033e-04 7.000000e-16 -8.000000e-01 -1.027362e-03 8.000000e-16 -9.000000e-01 -1.076896e-03 9.000000e-16 -1.000000e+00 -1.125564e-03 1.000000e-15 -1.100000e+00 -1.173562e-03 1.100000e-15 -1.200000e+00 -1.221119e-03 1.200000e-15 -1.300000e+00 -1.268446e-03 1.300000e-15 -1.400000e+00 -1.315726e-03 1.400000e-15 -1.500000e+00 -1.363110e-03 1.500000e-15 -1.600000e+00 -1.410721e-03 1.600000e-15 -1.700000e+00 -1.458660e-03 1.700000e-15 -1.800000e+00 -1.507013e-03 1.800000e-15 -2.000000e-01 -7.107833e-04 2.000000e-16 -3.000000e-01 -9.814930e-04 3.000000e-16 -4.000000e-01 -1.196037e-03 4.000000e-16 -5.000000e-01 -1.357425e-03 5.000000e-16 -6.000000e-01 -1.472204e-03 6.000000e-16 -7.000000e-01 -1.554887e-03 7.000000e-16 -8.000000e-01 -1.625302e-03 8.000000e-16 -9.000000e-01 -1.693712e-03 9.000000e-16 -1.000000e+00 -1.761384e-03 1.000000e-15 -1.100000e+00 -1.828127e-03 1.100000e-15 -1.200000e+00 -1.893853e-03 1.200000e-15 -1.300000e+00 -1.958629e-03 1.300000e-15 -1.400000e+00 -2.022603e-03 1.400000e-15 -1.500000e+00 -2.085948e-03 1.500000e-15 -1.600000e+00 -2.148840e-03 1.600000e-15 -1.700000e+00 -2.211441e-03 1.700000e-15 -1.800000e+00 -2.273894e-03 1.800000e-15 -2.000000e-01 -8.703534e-04 2.000000e-16 -3.000000e-01 -1.229542e-03 3.000000e-16 -4.000000e-01 -1.535299e-03 4.000000e-16 -5.000000e-01 -1.788717e-03 5.000000e-16 -6.000000e-01 -1.992234e-03 6.000000e-16 -7.000000e-01 -2.150032e-03 7.000000e-16 -8.000000e-01 -2.269922e-03 8.000000e-16 -9.000000e-01 -2.364654e-03 9.000000e-16 -1.000000e+00 -2.449433e-03 1.000000e-15 -1.100000e+00 -2.532170e-03 1.100000e-15 -1.200000e+00 -2.614133e-03 1.200000e-15 -1.300000e+00 -2.695229e-03 1.300000e-15 -1.400000e+00 -2.775330e-03 1.400000e-15 -1.500000e+00 -2.854418e-03 1.500000e-15 -1.600000e+00 -2.932552e-03 1.600000e-15 -1.700000e+00 -3.009841e-03 1.700000e-15 -1.800000e+00 -3.086415e-03 1.800000e-15 -2.000000e-01 -1.055746e-03 2.000000e-16 -3.000000e-01 -1.522006e-03 3.000000e-16 -4.000000e-01 -1.941527e-03 4.000000e-16 -5.000000e-01 -2.312983e-03 5.000000e-16 -6.000000e-01 -2.636801e-03 6.000000e-16 -7.000000e-01 -2.914587e-03 7.000000e-16 -8.000000e-01 -3.148785e-03 8.000000e-16 -9.000000e-01 -3.342837e-03 9.000000e-16 -1.000000e+00 -3.501773e-03 1.000000e-15 -1.100000e+00 -3.632590e-03 1.100000e-15 -1.200000e+00 -3.744148e-03 1.200000e-15 -1.300000e+00 -3.846545e-03 1.300000e-15 -1.400000e+00 -3.946382e-03 1.400000e-15 -1.500000e+00 -4.045210e-03 1.500000e-15 -1.600000e+00 -4.143203e-03 1.600000e-15 -1.700000e+00 -4.240296e-03 1.700000e-15 -1.800000e+00 -4.336435e-03 1.800000e-15 -2.000000e-01 -1.186306e-03 2.000000e-16 -3.000000e-01 -1.731660e-03 3.000000e-16 -4.000000e-01 -2.238332e-03 4.000000e-16 -5.000000e-01 -2.703337e-03 5.000000e-16 -6.000000e-01 -3.125332e-03 6.000000e-16 -7.000000e-01 -3.504342e-03 7.000000e-16 -8.000000e-01 -3.841383e-03 8.000000e-16 -9.000000e-01 -4.138137e-03 9.000000e-16 -1.000000e+00 -4.396808e-03 1.000000e-15 -1.100000e+00 -4.620185e-03 1.100000e-15 -1.200000e+00 -4.811857e-03 1.200000e-15 -1.300000e+00 -4.976335e-03 1.300000e-15 -1.400000e+00 -5.118917e-03 1.400000e-15 -1.500000e+00 -5.245465e-03 1.500000e-15 -1.600000e+00 -5.362370e-03 1.600000e-15 -1.700000e+00 -5.475384e-03 1.700000e-15 -1.800000e+00 -5.586920e-03 1.800000e-15 -2.000000e-01 -1.215310e-04 2.000000e-16 -3.000000e-01 -1.449795e-04 3.000000e-16 -4.000000e-01 -1.644397e-04 4.000000e-16 -5.000000e-01 -1.838944e-04 5.000000e-16 -6.000000e-01 -2.037631e-04 6.000000e-16 -7.000000e-01 -2.241339e-04 7.000000e-16 -8.000000e-01 -2.450728e-04 8.000000e-16 -9.000000e-01 -2.666381e-04 9.000000e-16 -1.000000e+00 -2.888803e-04 1.000000e-15 -1.100000e+00 -3.118434e-04 1.100000e-15 -1.200000e+00 -3.355664e-04 1.200000e-15 -1.300000e+00 -3.600852e-04 1.300000e-15 -1.400000e+00 -3.854342e-04 1.400000e-15 -1.500000e+00 -4.116469e-04 1.500000e-15 -1.600000e+00 -4.387567e-04 1.600000e-15 -1.700000e+00 -4.667976e-04 1.700000e-15 -1.800000e+00 -4.958045e-04 1.800000e-15 -2.000000e-01 -2.683866e-04 2.000000e-16 -3.000000e-01 -3.434866e-04 3.000000e-16 -4.000000e-01 -3.905718e-04 4.000000e-16 -5.000000e-01 -4.254121e-04 5.000000e-16 -6.000000e-01 -4.579229e-04 6.000000e-16 -7.000000e-01 -4.899888e-04 7.000000e-16 -8.000000e-01 -5.217546e-04 8.000000e-16 -9.000000e-01 -5.533460e-04 9.000000e-16 -1.000000e+00 -5.849287e-04 1.000000e-15 -1.100000e+00 -6.166606e-04 1.100000e-15 -1.200000e+00 -6.486752e-04 1.200000e-15 -1.300000e+00 -6.810800e-04 1.300000e-15 -1.400000e+00 -7.139613e-04 1.400000e-15 -1.500000e+00 -7.473894e-04 1.500000e-15 -1.600000e+00 -7.814225e-04 1.600000e-15 -1.700000e+00 -8.161101e-04 1.700000e-15 -1.800000e+00 -8.514956e-04 1.800000e-15 -2.000000e-01 -4.174948e-04 2.000000e-16 -3.000000e-01 -5.651320e-04 3.000000e-16 -4.000000e-01 -6.748377e-04 4.000000e-16 -5.000000e-01 -7.519469e-04 5.000000e-16 -6.000000e-01 -8.074889e-04 6.000000e-16 -7.000000e-01 -8.544460e-04 7.000000e-16 -8.000000e-01 -8.996975e-04 8.000000e-16 -9.000000e-01 -9.444786e-04 9.000000e-16 -1.000000e+00 -9.887737e-04 1.000000e-15 -1.100000e+00 -1.032583e-03 1.100000e-15 -1.200000e+00 -1.076001e-03 1.200000e-15 -1.300000e+00 -1.119162e-03 1.300000e-15 -1.400000e+00 -1.162206e-03 1.400000e-15 -1.500000e+00 -1.205264e-03 1.500000e-15 -1.600000e+00 -1.248450e-03 1.600000e-15 -1.700000e+00 -1.291863e-03 1.700000e-15 -1.800000e+00 -1.335586e-03 1.800000e-15 -2.000000e-01 -5.523075e-04 2.000000e-16 -3.000000e-01 -7.705283e-04 3.000000e-16 -4.000000e-01 -9.501590e-04 4.000000e-16 -5.000000e-01 -1.092854e-03 5.000000e-16 -6.000000e-01 -1.201930e-03 6.000000e-16 -7.000000e-01 -1.284056e-03 7.000000e-16 -8.000000e-01 -1.349422e-03 8.000000e-16 -9.000000e-01 -1.408062e-03 9.000000e-16 -1.000000e+00 -1.465169e-03 1.000000e-15 -1.100000e+00 -1.521831e-03 1.100000e-15 -1.200000e+00 -1.578020e-03 1.200000e-15 -1.300000e+00 -1.633658e-03 1.300000e-15 -1.400000e+00 -1.688747e-03 1.400000e-15 -1.500000e+00 -1.743357e-03 1.500000e-15 -1.600000e+00 -1.797587e-03 1.600000e-15 -1.700000e+00 -1.851545e-03 1.700000e-15 -1.800000e+00 -1.905340e-03 1.800000e-15 -2.000000e-01 -6.699586e-04 2.000000e-16 -3.000000e-01 -9.519966e-04 3.000000e-16 -4.000000e-01 -1.196965e-03 4.000000e-16 -5.000000e-01 -1.405155e-03 5.000000e-16 -6.000000e-01 -1.577904e-03 6.000000e-16 -7.000000e-01 -1.717682e-03 7.000000e-16 -8.000000e-01 -1.828773e-03 8.000000e-16 -9.000000e-01 -1.917844e-03 9.000000e-16 -1.000000e+00 -1.993249e-03 1.000000e-15 -1.100000e+00 -2.062742e-03 1.100000e-15 -1.200000e+00 -2.130579e-03 1.200000e-15 -1.300000e+00 -2.197915e-03 1.300000e-15 -1.400000e+00 -2.264816e-03 1.400000e-15 -1.500000e+00 -2.331190e-03 1.500000e-15 -1.600000e+00 -2.396992e-03 1.600000e-15 -1.700000e+00 -2.462231e-03 1.700000e-15 -1.800000e+00 -2.526956e-03 1.800000e-15 -2.000000e-01 -8.151175e-04 2.000000e-16 -3.000000e-01 -1.178259e-03 3.000000e-16 -4.000000e-01 -1.508450e-03 4.000000e-16 -5.000000e-01 -1.804478e-03 5.000000e-16 -6.000000e-01 -2.066202e-03 6.000000e-16 -7.000000e-01 -2.294404e-03 7.000000e-16 -8.000000e-01 -2.490612e-03 8.000000e-16 -9.000000e-01 -2.657086e-03 9.000000e-16 -1.000000e+00 -2.797037e-03 1.000000e-15 -1.100000e+00 -2.914811e-03 1.100000e-15 -1.200000e+00 -3.015698e-03 1.200000e-15 -1.300000e+00 -3.105458e-03 1.300000e-15 -1.400000e+00 -3.189490e-03 1.400000e-15 -1.500000e+00 -3.271330e-03 1.500000e-15 -1.600000e+00 -3.352374e-03 1.600000e-15 -1.700000e+00 -3.432950e-03 1.700000e-15 -1.800000e+00 -3.513054e-03 1.800000e-15 -2.000000e-01 -9.263926e-04 2.000000e-16 -3.000000e-01 -1.353590e-03 3.000000e-16 -4.000000e-01 -1.752829e-03 4.000000e-16 -5.000000e-01 -2.121990e-03 5.000000e-16 -6.000000e-01 -2.459839e-03 6.000000e-16 -7.000000e-01 -2.766039e-03 7.000000e-16 -8.000000e-01 -3.041016e-03 8.000000e-16 -9.000000e-01 -3.285795e-03 9.000000e-16 -1.000000e+00 -3.501875e-03 1.000000e-15 -1.100000e+00 -3.691217e-03 1.100000e-15 -1.200000e+00 -3.856317e-03 1.200000e-15 -1.300000e+00 -4.000255e-03 1.300000e-15 -1.400000e+00 -4.126613e-03 1.400000e-15 -1.500000e+00 -4.239259e-03 1.500000e-15 -1.600000e+00 -4.342117e-03 1.600000e-15 -1.700000e+00 -4.438929e-03 1.700000e-15 -1.800000e+00 -4.532697e-03 1.800000e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/2_dcSweep_CORSRD=-1_GDLD.standard0000644000175000017500000002342613546075722026014 0ustar carstencarstenV(d) I(d) -2.000000e-01 -3.754267e-06 -3.000000e-01 -4.334728e-06 -4.000000e-01 -4.951132e-06 -5.000000e-01 -5.614432e-06 -6.000000e-01 -6.321155e-06 -7.000000e-01 -7.068014e-06 -8.000000e-01 -7.853847e-06 -9.000000e-01 -8.678935e-06 -1.000000e+00 -9.544353e-06 -1.100000e+00 -1.045162e-05 -1.200000e+00 -1.140252e-05 -1.300000e+00 -1.239906e-05 -1.400000e+00 -1.344343e-05 -1.500000e+00 -1.453801e-05 -1.600000e+00 -1.568537e-05 -1.700000e+00 -1.688827e-05 -1.800000e+00 -1.814973e-05 -2.000000e-01 -1.539299e-04 -3.000000e-01 -1.675824e-04 -4.000000e-01 -1.787195e-04 -5.000000e-01 -1.886299e-04 -6.000000e-01 -1.978655e-04 -7.000000e-01 -2.067413e-04 -8.000000e-01 -2.154311e-04 -9.000000e-01 -2.240399e-04 -1.000000e+00 -2.326366e-04 -1.100000e+00 -2.412701e-04 -1.200000e+00 -2.499771e-04 -1.300000e+00 -2.587862e-04 -1.400000e+00 -2.677212e-04 -1.500000e+00 -2.768025e-04 -1.600000e+00 -2.860480e-04 -1.700000e+00 -2.954741e-04 -1.800000e+00 -3.050962e-04 -2.000000e-01 -4.500062e-04 -3.000000e-01 -5.551879e-04 -4.000000e-01 -6.014239e-04 -5.000000e-01 -6.336069e-04 -6.000000e-01 -6.633621e-04 -7.000000e-01 -6.908955e-04 -8.000000e-01 -7.165839e-04 -9.000000e-01 -7.408611e-04 -1.000000e+00 -7.641003e-04 -1.100000e+00 -7.865929e-04 -1.200000e+00 -8.085581e-04 -1.300000e+00 -8.301605e-04 -1.400000e+00 -8.515246e-04 -1.500000e+00 -8.727460e-04 -1.600000e+00 -8.938998e-04 -1.700000e+00 -9.150463e-04 -1.800000e+00 -9.362348e-04 -2.000000e-01 -7.046222e-04 -3.000000e-01 -9.457608e-04 -4.000000e-01 -1.112367e-03 -5.000000e-01 -1.211047e-03 -6.000000e-01 -1.266678e-03 -7.000000e-01 -1.315971e-03 -8.000000e-01 -1.363287e-03 -9.000000e-01 -1.408245e-03 -1.000000e+00 -1.450881e-03 -1.100000e+00 -1.491419e-03 -1.200000e+00 -1.530169e-03 -1.300000e+00 -1.567446e-03 -1.400000e+00 -1.603534e-03 -1.500000e+00 -1.638671e-03 -1.600000e+00 -1.673057e-03 -1.700000e+00 -1.706854e-03 -1.800000e+00 -1.740195e-03 -2.000000e-01 -9.054077e-04 -3.000000e-01 -1.260917e-03 -4.000000e-01 -1.546740e-03 -5.000000e-01 -1.764419e-03 -6.000000e-01 -1.917675e-03 -7.000000e-01 -2.015415e-03 -8.000000e-01 -2.080291e-03 -9.000000e-01 -2.143046e-03 -1.000000e+00 -2.204600e-03 -1.100000e+00 -2.263880e-03 -1.200000e+00 -2.320816e-03 -1.300000e+00 -2.375462e-03 -1.400000e+00 -2.427988e-03 -1.500000e+00 -2.478619e-03 -1.600000e+00 -2.527599e-03 -1.700000e+00 -2.575161e-03 -1.800000e+00 -2.621514e-03 -2.000000e-01 -1.122399e-03 -3.000000e-01 -1.608580e-03 -4.000000e-01 -2.035800e-03 -5.000000e-01 -2.402372e-03 -6.000000e-01 -2.709037e-03 -7.000000e-01 -2.957850e-03 -8.000000e-01 -3.151871e-03 -9.000000e-01 -3.296049e-03 -1.000000e+00 -3.398957e-03 -1.100000e+00 -3.475753e-03 -1.200000e+00 -3.550987e-03 -1.300000e+00 -3.628277e-03 -1.400000e+00 -3.703523e-03 -1.500000e+00 -3.776571e-03 -1.600000e+00 -3.847420e-03 -1.700000e+00 -3.916122e-03 -1.800000e+00 -3.982778e-03 -2.000000e-01 -1.261518e-03 -3.000000e-01 -1.837125e-03 -4.000000e-01 -2.365818e-03 -5.000000e-01 -2.843657e-03 -6.000000e-01 -3.269063e-03 -7.000000e-01 -3.642131e-03 -8.000000e-01 -3.964024e-03 -9.000000e-01 -4.236585e-03 -1.000000e+00 -4.462265e-03 -1.100000e+00 -4.644420e-03 -1.200000e+00 -4.787836e-03 -1.300000e+00 -4.899147e-03 -1.400000e+00 -4.987547e-03 -1.500000e+00 -5.068215e-03 -1.600000e+00 -5.154598e-03 -1.700000e+00 -5.240897e-03 -1.800000e+00 -5.325173e-03 -2.000000e-01 -1.955498e-05 -3.000000e-01 -2.261923e-05 -4.000000e-01 -2.583450e-05 -5.000000e-01 -2.927051e-05 -6.000000e-01 -3.291566e-05 -7.000000e-01 -3.675570e-05 -8.000000e-01 -4.078545e-05 -9.000000e-01 -4.500635e-05 -1.000000e+00 -4.942347e-05 -1.100000e+00 -5.404385e-05 -1.200000e+00 -5.887574e-05 -1.300000e+00 -6.392827e-05 -1.400000e+00 -6.921136e-05 -1.500000e+00 -7.473571e-05 -1.600000e+00 -8.051279e-05 -1.700000e+00 -8.655495e-05 -1.800000e+00 -9.287545e-05 -2.000000e-01 -1.667845e-04 -3.000000e-01 -1.880297e-04 -4.000000e-01 -2.022851e-04 -5.000000e-01 -2.151923e-04 -6.000000e-01 -2.272833e-04 -7.000000e-01 -2.388913e-04 -8.000000e-01 -2.502435e-04 -9.000000e-01 -2.614890e-04 -1.000000e+00 -2.727282e-04 -1.100000e+00 -2.840318e-04 -1.200000e+00 -2.954514e-04 -1.300000e+00 -3.070272e-04 -1.400000e+00 -3.187912e-04 -1.500000e+00 -3.307707e-04 -1.600000e+00 -3.429892e-04 -1.700000e+00 -3.554682e-04 -1.800000e+00 -3.682275e-04 -2.000000e-01 -3.807781e-04 -3.000000e-01 -4.853990e-04 -4.000000e-01 -5.412322e-04 -5.000000e-01 -5.734060e-04 -6.000000e-01 -6.018821e-04 -7.000000e-01 -6.288815e-04 -8.000000e-01 -6.544023e-04 -9.000000e-01 -6.786357e-04 -1.000000e+00 -7.018523e-04 -1.100000e+00 -7.243088e-04 -1.200000e+00 -7.462188e-04 -1.300000e+00 -7.677516e-04 -1.400000e+00 -7.890392e-04 -1.500000e+00 -8.101850e-04 -1.600000e+00 -8.312706e-04 -1.700000e+00 -8.523617e-04 -1.800000e+00 -8.735123e-04 -2.000000e-01 -5.702827e-04 -3.000000e-01 -7.747496e-04 -4.000000e-01 -9.247151e-04 -5.000000e-01 -1.023696e-03 -6.000000e-01 -1.083124e-03 -7.000000e-01 -1.126634e-03 -8.000000e-01 -1.168484e-03 -9.000000e-01 -1.209089e-03 -1.000000e+00 -1.248137e-03 -1.100000e+00 -1.285586e-03 -1.200000e+00 -1.321561e-03 -1.300000e+00 -1.356261e-03 -1.400000e+00 -1.389898e-03 -1.500000e+00 -1.422670e-03 -1.600000e+00 -1.454750e-03 -1.700000e+00 -1.486287e-03 -1.800000e+00 -1.517404e-03 -2.000000e-01 -7.272829e-04 -3.000000e-01 -1.019127e-03 -4.000000e-01 -1.259385e-03 -5.000000e-01 -1.448583e-03 -6.000000e-01 -1.589020e-03 -7.000000e-01 -1.686028e-03 -8.000000e-01 -1.751270e-03 -9.000000e-01 -1.804574e-03 -1.000000e+00 -1.857729e-03 -1.100000e+00 -1.909957e-03 -1.200000e+00 -1.960728e-03 -1.300000e+00 -2.009886e-03 -1.400000e+00 -2.057435e-03 -1.500000e+00 -2.103472e-03 -1.600000e+00 -2.148144e-03 -1.700000e+00 -2.191613e-03 -1.800000e+00 -2.234041e-03 -2.000000e-01 -9.082769e-04 -3.000000e-01 -1.305053e-03 -4.000000e-01 -1.657439e-03 -5.000000e-01 -1.963701e-03 -6.000000e-01 -2.223843e-03 -7.000000e-01 -2.439057e-03 -8.000000e-01 -2.611505e-03 -9.000000e-01 -2.744723e-03 -1.000000e+00 -2.844506e-03 -1.100000e+00 -2.919861e-03 -1.200000e+00 -2.984356e-03 -1.300000e+00 -3.049929e-03 -1.400000e+00 -3.115798e-03 -1.500000e+00 -3.180442e-03 -1.600000e+00 -3.243606e-03 -1.700000e+00 -3.305223e-03 -1.800000e+00 -3.365297e-03 -2.000000e-01 -1.035575e-03 -3.000000e-01 -1.509290e-03 -4.000000e-01 -1.946786e-03 -5.000000e-01 -2.344963e-03 -6.000000e-01 -2.702241e-03 -7.000000e-01 -3.018281e-03 -8.000000e-01 -3.293675e-03 -9.000000e-01 -3.529699e-03 -1.000000e+00 -3.728229e-03 -1.100000e+00 -3.891870e-03 -1.200000e+00 -4.024239e-03 -1.300000e+00 -4.130193e-03 -1.400000e+00 -4.215973e-03 -1.500000e+00 -4.289845e-03 -1.600000e+00 -4.362307e-03 -1.700000e+00 -4.437396e-03 -1.800000e+00 -4.512205e-03 -2.000000e-01 -5.846707e-05 -3.000000e-01 -7.023460e-05 -4.000000e-01 -8.207367e-05 -5.000000e-01 -9.467920e-05 -6.000000e-01 -1.080361e-04 -7.000000e-01 -1.220926e-04 -8.000000e-01 -1.368280e-04 -9.000000e-01 -1.522446e-04 -1.000000e+00 -1.683574e-04 -1.100000e+00 -1.851879e-04 -1.200000e+00 -2.027615e-04 -1.300000e+00 -2.211063e-04 -1.400000e+00 -2.402528e-04 -1.500000e+00 -2.602339e-04 -1.600000e+00 -2.810847e-04 -1.700000e+00 -3.028430e-04 -1.800000e+00 -3.255492e-04 -2.000000e-01 -1.755673e-04 -3.000000e-01 -2.139969e-04 -4.000000e-01 -2.372536e-04 -5.000000e-01 -2.571418e-04 -6.000000e-01 -2.763153e-04 -7.000000e-01 -2.951067e-04 -8.000000e-01 -3.137039e-04 -9.000000e-01 -3.322773e-04 -1.000000e+00 -3.509646e-04 -1.100000e+00 -3.698719e-04 -1.200000e+00 -3.890803e-04 -1.300000e+00 -4.086532e-04 -1.400000e+00 -4.286422e-04 -1.500000e+00 -4.490905e-04 -1.600000e+00 -4.700358e-04 -1.700000e+00 -4.915124e-04 -1.800000e+00 -5.135522e-04 -2.000000e-01 -3.187757e-04 -3.000000e-01 -4.200687e-04 -4.000000e-01 -4.863724e-04 -5.000000e-01 -5.273349e-04 -6.000000e-01 -5.578856e-04 -7.000000e-01 -5.863105e-04 -8.000000e-01 -6.138948e-04 -9.000000e-01 -6.406421e-04 -1.000000e+00 -6.666107e-04 -1.100000e+00 -6.919433e-04 -1.200000e+00 -7.168041e-04 -1.300000e+00 -7.413462e-04 -1.400000e+00 -7.657013e-04 -1.500000e+00 -7.899788e-04 -1.600000e+00 -8.142686e-04 -1.700000e+00 -8.386451e-04 -1.800000e+00 -8.631701e-04 -2.000000e-01 -4.520527e-04 -3.000000e-01 -6.219850e-04 -4.000000e-01 -7.541327e-04 -5.000000e-01 -8.505157e-04 -6.000000e-01 -9.162792e-04 -7.000000e-01 -9.618878e-04 -8.000000e-01 -1.000158e-03 -9.000000e-01 -1.037151e-03 -1.000000e+00 -1.073452e-03 -1.100000e+00 -1.108869e-03 -1.200000e+00 -1.143316e-03 -1.300000e+00 -1.176829e-03 -1.400000e+00 -1.209508e-03 -1.500000e+00 -1.241482e-03 -1.600000e+00 -1.272878e-03 -1.700000e+00 -1.303819e-03 -1.800000e+00 -1.334413e-03 -2.000000e-01 -5.683511e-04 -3.000000e-01 -8.012639e-04 -4.000000e-01 -9.976646e-04 -5.000000e-01 -1.157759e-03 -6.000000e-01 -1.283041e-03 -7.000000e-01 -1.376634e-03 -8.000000e-01 -1.444425e-03 -9.000000e-01 -1.495785e-03 -1.000000e+00 -1.541363e-03 -1.100000e+00 -1.586280e-03 -1.200000e+00 -1.630723e-03 -1.300000e+00 -1.674363e-03 -1.400000e+00 -1.717034e-03 -1.500000e+00 -1.758688e-03 -1.600000e+00 -1.799356e-03 -1.700000e+00 -1.839111e-03 -1.800000e+00 -1.878049e-03 -2.000000e-01 -7.110119e-04 -3.000000e-01 -1.023798e-03 -4.000000e-01 -1.304292e-03 -5.000000e-01 -1.551180e-03 -6.000000e-01 -1.764275e-03 -7.000000e-01 -1.944317e-03 -8.000000e-01 -2.092836e-03 -9.000000e-01 -2.212260e-03 -1.000000e+00 -2.306272e-03 -1.100000e+00 -2.380108e-03 -1.200000e+00 -2.440595e-03 -1.300000e+00 -2.495570e-03 -1.400000e+00 -2.550297e-03 -1.500000e+00 -2.605143e-03 -1.600000e+00 -2.659431e-03 -1.700000e+00 -2.712869e-03 -1.800000e+00 -2.765344e-03 -2.000000e-01 -8.198897e-04 -3.000000e-01 -1.195403e-03 -4.000000e-01 -1.543703e-03 -5.000000e-01 -1.862654e-03 -6.000000e-01 -2.151021e-03 -7.000000e-01 -2.408404e-03 -8.000000e-01 -2.635122e-03 -9.000000e-01 -2.832075e-03 -1.000000e+00 -3.000670e-03 -1.100000e+00 -3.142845e-03 -1.200000e+00 -3.261185e-03 -1.300000e+00 -3.359012e-03 -1.400000e+00 -3.440361e-03 -1.500000e+00 -3.509921e-03 -1.600000e+00 -3.573031e-03 -1.700000e+00 -3.634821e-03 -1.800000e+00 -3.697412e-03 tmpk8ny_4pz/tests/hisim/pmos/reference/12_dcSweep_COGIDL=1.standard0000644000175000017500000002342613546075722025173 0ustar carstencarstenV(d) I(d) -2.000000e-01 -4.699615e-05 -3.000000e-01 -5.356444e-05 -4.000000e-01 -6.033220e-05 -5.000000e-01 -6.744937e-05 -6.000000e-01 -7.492440e-05 -7.000000e-01 -8.274273e-05 -8.000000e-01 -9.089962e-05 -9.000000e-01 -9.939983e-05 -1.000000e+00 -1.082536e-04 -1.100000e+00 -1.174739e-04 -1.200000e+00 -1.270754e-04 -1.300000e+00 -1.370740e-04 -1.400000e+00 -1.474865e-04 -1.500000e+00 -1.583306e-04 -1.600000e+00 -1.696254e-04 -1.700000e+00 -1.813907e-04 -1.800000e+00 -1.936478e-04 -2.000000e-01 -3.236954e-04 -3.000000e-01 -3.722842e-04 -4.000000e-01 -4.052186e-04 -5.000000e-01 -4.371928e-04 -6.000000e-01 -4.684500e-04 -7.000000e-01 -4.993046e-04 -8.000000e-01 -5.300660e-04 -9.000000e-01 -5.609689e-04 -1.000000e+00 -5.921836e-04 -1.100000e+00 -6.238345e-04 -1.200000e+00 -6.560152e-04 -1.300000e+00 -6.887987e-04 -1.400000e+00 -7.222439e-04 -1.500000e+00 -7.564006e-04 -1.600000e+00 -7.913122e-04 -1.700000e+00 -8.270178e-04 -1.800000e+00 -8.635538e-04 -2.000000e-01 -6.362416e-04 -3.000000e-01 -8.252108e-04 -4.000000e-01 -9.384887e-04 -5.000000e-01 -1.006766e-03 -6.000000e-01 -1.066911e-03 -7.000000e-01 -1.125791e-03 -8.000000e-01 -1.183256e-03 -9.000000e-01 -1.239416e-03 -1.000000e+00 -1.294578e-03 -1.100000e+00 -1.349078e-03 -1.200000e+00 -1.403216e-03 -1.300000e+00 -1.457238e-03 -1.400000e+00 -1.511340e-03 -1.500000e+00 -1.565678e-03 -1.600000e+00 -1.620377e-03 -1.700000e+00 -1.675538e-03 -1.800000e+00 -1.731244e-03 -2.000000e-01 -8.942919e-04 -3.000000e-01 -1.221693e-03 -4.000000e-01 -1.471297e-03 -5.000000e-01 -1.648885e-03 -6.000000e-01 -1.767189e-03 -7.000000e-01 -1.854914e-03 -8.000000e-01 -1.937134e-03 -9.000000e-01 -2.017933e-03 -1.000000e+00 -2.097230e-03 -1.100000e+00 -2.174954e-03 -1.200000e+00 -2.251232e-03 -1.300000e+00 -2.326297e-03 -1.400000e+00 -2.400413e-03 -1.500000e+00 -2.473832e-03 -1.600000e+00 -2.546781e-03 -1.700000e+00 -2.619458e-03 -1.800000e+00 -2.692029e-03 -2.000000e-01 -1.099660e-03 -3.000000e-01 -1.542998e-03 -4.000000e-01 -1.912357e-03 -5.000000e-01 -2.210948e-03 -6.000000e-01 -2.443263e-03 -7.000000e-01 -2.616248e-03 -8.000000e-01 -2.743263e-03 -9.000000e-01 -2.847346e-03 -1.000000e+00 -2.946865e-03 -1.100000e+00 -3.044792e-03 -1.200000e+00 -3.141252e-03 -1.300000e+00 -3.236151e-03 -1.400000e+00 -3.329502e-03 -1.500000e+00 -3.421423e-03 -1.600000e+00 -3.512086e-03 -1.700000e+00 -3.601687e-03 -1.800000e+00 -3.690421e-03 -2.000000e-01 -1.323288e-03 -3.000000e-01 -1.900779e-03 -4.000000e-01 -2.413864e-03 -5.000000e-01 -2.862055e-03 -6.000000e-01 -3.247311e-03 -7.000000e-01 -3.572769e-03 -8.000000e-01 -3.842246e-03 -9.000000e-01 -4.060779e-03 -1.000000e+00 -4.235768e-03 -1.100000e+00 -4.377686e-03 -1.200000e+00 -4.501075e-03 -1.300000e+00 -4.619790e-03 -1.400000e+00 -4.736666e-03 -1.500000e+00 -4.852063e-03 -1.600000e+00 -4.966007e-03 -1.700000e+00 -5.078485e-03 -1.800000e+00 -5.189527e-03 -2.000000e-01 -1.465681e-03 -3.000000e-01 -2.135731e-03 -4.000000e-01 -2.753367e-03 -5.000000e-01 -3.315155e-03 -6.000000e-01 -3.820331e-03 -7.000000e-01 -4.269931e-03 -8.000000e-01 -4.666054e-03 -9.000000e-01 -5.011370e-03 -1.000000e+00 -5.308993e-03 -1.100000e+00 -5.562716e-03 -1.200000e+00 -5.777420e-03 -1.300000e+00 -5.959268e-03 -1.400000e+00 -6.115539e-03 -1.500000e+00 -6.254781e-03 -1.600000e+00 -6.387042e-03 -1.700000e+00 -6.517185e-03 -1.800000e+00 -6.645738e-03 -2.000000e-01 -8.053777e-05 -3.000000e-01 -9.162409e-05 -4.000000e-01 -1.024998e-04 -5.000000e-01 -1.136549e-04 -6.000000e-01 -1.251791e-04 -7.000000e-01 -1.371000e-04 -8.000000e-01 -1.494365e-04 -9.000000e-01 -1.622095e-04 -1.000000e+00 -1.754406e-04 -1.100000e+00 -1.891519e-04 -1.200000e+00 -2.033654e-04 -1.300000e+00 -2.181032e-04 -1.400000e+00 -2.333878e-04 -1.500000e+00 -2.492421e-04 -1.600000e+00 -2.656898e-04 -1.700000e+00 -2.827557e-04 -1.800000e+00 -3.004656e-04 -2.000000e-01 -2.967540e-04 -3.000000e-01 -3.587330e-04 -4.000000e-01 -3.937602e-04 -5.000000e-01 -4.249225e-04 -6.000000e-01 -4.554245e-04 -7.000000e-01 -4.853716e-04 -8.000000e-01 -5.149864e-04 -9.000000e-01 -5.445102e-04 -1.000000e+00 -5.741418e-04 -1.100000e+00 -6.040332e-04 -1.200000e+00 -6.342995e-04 -1.300000e+00 -6.650290e-04 -1.400000e+00 -6.962915e-04 -1.500000e+00 -7.281436e-04 -1.600000e+00 -7.606333e-04 -1.700000e+00 -7.938023e-04 -1.800000e+00 -8.276881e-04 -2.000000e-01 -5.192224e-04 -3.000000e-01 -6.879597e-04 -4.000000e-01 -8.011363e-04 -5.000000e-01 -8.720396e-04 -6.000000e-01 -9.256745e-04 -7.000000e-01 -9.769033e-04 -8.000000e-01 -1.027362e-03 -9.000000e-01 -1.076896e-03 -1.000000e+00 -1.125564e-03 -1.100000e+00 -1.173563e-03 -1.200000e+00 -1.221120e-03 -1.300000e+00 -1.268448e-03 -1.400000e+00 -1.315729e-03 -1.500000e+00 -1.363113e-03 -1.600000e+00 -1.410725e-03 -1.700000e+00 -1.458667e-03 -1.800000e+00 -1.507021e-03 -2.000000e-01 -7.107833e-04 -3.000000e-01 -9.814930e-04 -4.000000e-01 -1.196037e-03 -5.000000e-01 -1.357425e-03 -6.000000e-01 -1.472204e-03 -7.000000e-01 -1.554887e-03 -8.000000e-01 -1.625302e-03 -9.000000e-01 -1.693712e-03 -1.000000e+00 -1.761384e-03 -1.100000e+00 -1.828127e-03 -1.200000e+00 -1.893853e-03 -1.300000e+00 -1.958630e-03 -1.400000e+00 -2.022604e-03 -1.500000e+00 -2.085950e-03 -1.600000e+00 -2.148843e-03 -1.700000e+00 -2.211444e-03 -1.800000e+00 -2.273899e-03 -2.000000e-01 -8.703534e-04 -3.000000e-01 -1.229542e-03 -4.000000e-01 -1.535299e-03 -5.000000e-01 -1.788717e-03 -6.000000e-01 -1.992234e-03 -7.000000e-01 -2.150032e-03 -8.000000e-01 -2.269922e-03 -9.000000e-01 -2.364654e-03 -1.000000e+00 -2.449433e-03 -1.100000e+00 -2.532170e-03 -1.200000e+00 -2.614133e-03 -1.300000e+00 -2.695229e-03 -1.400000e+00 -2.775331e-03 -1.500000e+00 -2.854418e-03 -1.600000e+00 -2.932553e-03 -1.700000e+00 -3.009842e-03 -1.800000e+00 -3.086417e-03 -2.000000e-01 -1.055746e-03 -3.000000e-01 -1.522006e-03 -4.000000e-01 -1.941527e-03 -5.000000e-01 -2.312983e-03 -6.000000e-01 -2.636801e-03 -7.000000e-01 -2.914587e-03 -8.000000e-01 -3.148785e-03 -9.000000e-01 -3.342837e-03 -1.000000e+00 -3.501773e-03 -1.100000e+00 -3.632590e-03 -1.200000e+00 -3.744148e-03 -1.300000e+00 -3.846545e-03 -1.400000e+00 -3.946382e-03 -1.500000e+00 -4.045210e-03 -1.600000e+00 -4.143203e-03 -1.700000e+00 -4.240297e-03 -1.800000e+00 -4.336436e-03 -2.000000e-01 -1.186306e-03 -3.000000e-01 -1.731660e-03 -4.000000e-01 -2.238332e-03 -5.000000e-01 -2.703337e-03 -6.000000e-01 -3.125332e-03 -7.000000e-01 -3.504342e-03 -8.000000e-01 -3.841383e-03 -9.000000e-01 -4.138137e-03 -1.000000e+00 -4.396808e-03 -1.100000e+00 -4.620185e-03 -1.200000e+00 -4.811857e-03 -1.300000e+00 -4.976335e-03 -1.400000e+00 -5.118917e-03 -1.500000e+00 -5.245465e-03 -1.600000e+00 -5.362370e-03 -1.700000e+00 -5.475384e-03 -1.800000e+00 -5.586920e-03 -2.000000e-01 -1.215310e-04 -3.000000e-01 -1.449795e-04 -4.000000e-01 -1.644397e-04 -5.000000e-01 -1.838944e-04 -6.000000e-01 -2.037633e-04 -7.000000e-01 -2.241344e-04 -8.000000e-01 -2.450737e-04 -9.000000e-01 -2.666396e-04 -1.000000e+00 -2.888827e-04 -1.100000e+00 -3.118468e-04 -1.200000e+00 -3.355710e-04 -1.300000e+00 -3.600914e-04 -1.400000e+00 -3.854420e-04 -1.500000e+00 -4.116565e-04 -1.600000e+00 -4.387684e-04 -1.700000e+00 -4.668115e-04 -1.800000e+00 -4.958208e-04 -2.000000e-01 -2.683866e-04 -3.000000e-01 -3.434866e-04 -4.000000e-01 -3.905718e-04 -5.000000e-01 -4.254121e-04 -6.000000e-01 -4.579229e-04 -7.000000e-01 -4.899889e-04 -8.000000e-01 -5.217549e-04 -9.000000e-01 -5.533466e-04 -1.000000e+00 -5.849297e-04 -1.100000e+00 -6.166623e-04 -1.200000e+00 -6.486777e-04 -1.300000e+00 -6.810835e-04 -1.400000e+00 -7.139661e-04 -1.500000e+00 -7.473956e-04 -1.600000e+00 -7.814303e-04 -1.700000e+00 -8.161197e-04 -1.800000e+00 -8.515072e-04 -2.000000e-01 -4.174948e-04 -3.000000e-01 -5.651320e-04 -4.000000e-01 -6.748377e-04 -5.000000e-01 -7.519469e-04 -6.000000e-01 -8.074889e-04 -7.000000e-01 -8.544460e-04 -8.000000e-01 -8.996976e-04 -9.000000e-01 -9.444788e-04 -1.000000e+00 -9.887740e-04 -1.100000e+00 -1.032584e-03 -1.200000e+00 -1.076002e-03 -1.300000e+00 -1.119164e-03 -1.400000e+00 -1.162209e-03 -1.500000e+00 -1.205268e-03 -1.600000e+00 -1.248455e-03 -1.700000e+00 -1.291869e-03 -1.800000e+00 -1.335594e-03 -2.000000e-01 -5.523075e-04 -3.000000e-01 -7.705283e-04 -4.000000e-01 -9.501590e-04 -5.000000e-01 -1.092854e-03 -6.000000e-01 -1.201930e-03 -7.000000e-01 -1.284056e-03 -8.000000e-01 -1.349422e-03 -9.000000e-01 -1.408062e-03 -1.000000e+00 -1.465169e-03 -1.100000e+00 -1.521831e-03 -1.200000e+00 -1.578021e-03 -1.300000e+00 -1.633658e-03 -1.400000e+00 -1.688748e-03 -1.500000e+00 -1.743359e-03 -1.600000e+00 -1.797589e-03 -1.700000e+00 -1.851548e-03 -1.800000e+00 -1.905345e-03 -2.000000e-01 -6.699586e-04 -3.000000e-01 -9.519966e-04 -4.000000e-01 -1.196965e-03 -5.000000e-01 -1.405155e-03 -6.000000e-01 -1.577904e-03 -7.000000e-01 -1.717682e-03 -8.000000e-01 -1.828773e-03 -9.000000e-01 -1.917844e-03 -1.000000e+00 -1.993249e-03 -1.100000e+00 -2.062742e-03 -1.200000e+00 -2.130579e-03 -1.300000e+00 -2.197915e-03 -1.400000e+00 -2.264816e-03 -1.500000e+00 -2.331191e-03 -1.600000e+00 -2.396993e-03 -1.700000e+00 -2.462232e-03 -1.800000e+00 -2.526958e-03 -2.000000e-01 -8.151175e-04 -3.000000e-01 -1.178259e-03 -4.000000e-01 -1.508450e-03 -5.000000e-01 -1.804478e-03 -6.000000e-01 -2.066202e-03 -7.000000e-01 -2.294404e-03 -8.000000e-01 -2.490612e-03 -9.000000e-01 -2.657086e-03 -1.000000e+00 -2.797037e-03 -1.100000e+00 -2.914811e-03 -1.200000e+00 -3.015698e-03 -1.300000e+00 -3.105458e-03 -1.400000e+00 -3.189490e-03 -1.500000e+00 -3.271330e-03 -1.600000e+00 -3.352374e-03 -1.700000e+00 -3.432950e-03 -1.800000e+00 -3.513055e-03 -2.000000e-01 -9.263926e-04 -3.000000e-01 -1.353590e-03 -4.000000e-01 -1.752829e-03 -5.000000e-01 -2.121990e-03 -6.000000e-01 -2.459839e-03 -7.000000e-01 -2.766039e-03 -8.000000e-01 -3.041016e-03 -9.000000e-01 -3.285795e-03 -1.000000e+00 -3.501875e-03 -1.100000e+00 -3.691217e-03 -1.200000e+00 -3.856317e-03 -1.300000e+00 -4.000255e-03 -1.400000e+00 -4.126613e-03 -1.500000e+00 -4.239259e-03 -1.600000e+00 -4.342117e-03 -1.700000e+00 -4.438929e-03 -1.800000e+00 -4.532697e-03 tmpk8ny_4pz/tests/hisim/pmos/reference/24_dcSweep_CODFM=1.standard0000644000175000017500000002342613546075722025065 0ustar carstencarstenV(d) I(d) -2.000000e-01 -3.770875e-05 -3.000000e-01 -4.300475e-05 -4.000000e-01 -4.848457e-05 -5.000000e-01 -5.426240e-05 -6.000000e-01 -6.033806e-05 -7.000000e-01 -6.669593e-05 -8.000000e-01 -7.333011e-05 -9.000000e-01 -8.024325e-05 -1.000000e+00 -8.744281e-05 -1.100000e+00 -9.493876e-05 -1.200000e+00 -1.027425e-04 -1.300000e+00 -1.108664e-04 -1.400000e+00 -1.193237e-04 -1.500000e+00 -1.281283e-04 -1.600000e+00 -1.372953e-04 -1.700000e+00 -1.468403e-04 -1.800000e+00 -1.567801e-04 -2.000000e-01 -2.788640e-04 -3.000000e-01 -3.195688e-04 -4.000000e-01 -3.478435e-04 -5.000000e-01 -3.753220e-04 -6.000000e-01 -4.022025e-04 -7.000000e-01 -4.287686e-04 -8.000000e-01 -4.552853e-04 -9.000000e-01 -4.819499e-04 -1.000000e+00 -5.089052e-04 -1.100000e+00 -5.362554e-04 -1.200000e+00 -5.640793e-04 -1.300000e+00 -5.924385e-04 -1.400000e+00 -6.213829e-04 -1.500000e+00 -6.509552e-04 -1.600000e+00 -6.811925e-04 -1.700000e+00 -7.121288e-04 -1.800000e+00 -7.437957e-04 -2.000000e-01 -5.599541e-04 -3.000000e-01 -7.255665e-04 -4.000000e-01 -8.238197e-04 -5.000000e-01 -8.833398e-04 -6.000000e-01 -9.364465e-04 -7.000000e-01 -9.884359e-04 -8.000000e-01 -1.039166e-03 -9.000000e-01 -1.088760e-03 -1.000000e+00 -1.137504e-03 -1.100000e+00 -1.185697e-03 -1.200000e+00 -1.233606e-03 -1.300000e+00 -1.281447e-03 -1.400000e+00 -1.329391e-03 -1.500000e+00 -1.377575e-03 -1.600000e+00 -1.426109e-03 -1.700000e+00 -1.475080e-03 -1.800000e+00 -1.524562e-03 -2.000000e-01 -7.951820e-04 -3.000000e-01 -1.086891e-03 -4.000000e-01 -1.309202e-03 -5.000000e-01 -1.466710e-03 -6.000000e-01 -1.571113e-03 -7.000000e-01 -1.649320e-03 -8.000000e-01 -1.723159e-03 -9.000000e-01 -1.795746e-03 -1.000000e+00 -1.866977e-03 -1.100000e+00 -1.936801e-03 -1.200000e+00 -2.005347e-03 -1.300000e+00 -2.072833e-03 -1.400000e+00 -2.139499e-03 -1.500000e+00 -2.205575e-03 -1.600000e+00 -2.271265e-03 -1.700000e+00 -2.336746e-03 -1.800000e+00 -2.402166e-03 -2.000000e-01 -9.854308e-04 -3.000000e-01 -1.383744e-03 -4.000000e-01 -1.716271e-03 -5.000000e-01 -1.985231e-03 -6.000000e-01 -2.194171e-03 -7.000000e-01 -2.349232e-03 -8.000000e-01 -2.462912e-03 -9.000000e-01 -2.557007e-03 -1.000000e+00 -2.647476e-03 -1.100000e+00 -2.736549e-03 -1.200000e+00 -2.824294e-03 -1.300000e+00 -2.910626e-03 -1.400000e+00 -2.995568e-03 -1.500000e+00 -3.079232e-03 -1.600000e+00 -3.161779e-03 -1.700000e+00 -3.243391e-03 -1.800000e+00 -3.324247e-03 -2.000000e-01 -1.198078e-03 -3.000000e-01 -1.721718e-03 -4.000000e-01 -2.187986e-03 -5.000000e-01 -2.596051e-03 -6.000000e-01 -2.947225e-03 -7.000000e-01 -3.243973e-03 -8.000000e-01 -3.489521e-03 -9.000000e-01 -3.688376e-03 -1.000000e+00 -3.847369e-03 -1.100000e+00 -3.976345e-03 -1.200000e+00 -4.089304e-03 -1.300000e+00 -4.198668e-03 -1.400000e+00 -4.306427e-03 -1.500000e+00 -4.412849e-03 -1.600000e+00 -4.517946e-03 -1.700000e+00 -4.621708e-03 -1.800000e+00 -4.724164e-03 -2.000000e-01 -1.339605e-03 -3.000000e-01 -1.952180e-03 -4.000000e-01 -2.517689e-03 -5.000000e-01 -3.032909e-03 -6.000000e-01 -3.496867e-03 -7.000000e-01 -3.910210e-03 -8.000000e-01 -4.274602e-03 -9.000000e-01 -4.592303e-03 -1.000000e+00 -4.866058e-03 -1.100000e+00 -5.099312e-03 -1.200000e+00 -5.296577e-03 -1.300000e+00 -5.463588e-03 -1.400000e+00 -5.607181e-03 -1.500000e+00 -5.735594e-03 -1.600000e+00 -5.858461e-03 -1.700000e+00 -5.979634e-03 -1.800000e+00 -6.099381e-03 -2.000000e-01 -6.673432e-05 -3.000000e-01 -7.588499e-05 -4.000000e-01 -8.490562e-05 -5.000000e-01 -9.418097e-05 -6.000000e-01 -1.037774e-04 -7.000000e-01 -1.137114e-04 -8.000000e-01 -1.239955e-04 -9.000000e-01 -1.346446e-04 -1.000000e+00 -1.456754e-04 -1.100000e+00 -1.571052e-04 -1.200000e+00 -1.689517e-04 -1.300000e+00 -1.812326e-04 -1.400000e+00 -1.939661e-04 -1.500000e+00 -2.071707e-04 -1.600000e+00 -2.208657e-04 -1.700000e+00 -2.350713e-04 -1.800000e+00 -2.498083e-04 -2.000000e-01 -2.565294e-04 -3.000000e-01 -3.089026e-04 -4.000000e-01 -3.387002e-04 -5.000000e-01 -3.654826e-04 -6.000000e-01 -3.916887e-04 -7.000000e-01 -4.174238e-04 -8.000000e-01 -4.428915e-04 -9.000000e-01 -4.683006e-04 -1.000000e+00 -4.938204e-04 -1.100000e+00 -5.195793e-04 -1.200000e+00 -5.456743e-04 -1.300000e+00 -5.721798e-04 -1.400000e+00 -5.991545e-04 -1.500000e+00 -6.266465e-04 -1.600000e+00 -6.546965e-04 -1.700000e+00 -6.833402e-04 -1.800000e+00 -7.126096e-04 -2.000000e-01 -4.558015e-04 -3.000000e-01 -6.032418e-04 -4.000000e-01 -7.014041e-04 -5.000000e-01 -7.625959e-04 -6.000000e-01 -8.094350e-04 -7.000000e-01 -8.543832e-04 -8.000000e-01 -8.986326e-04 -9.000000e-01 -9.420577e-04 -1.000000e+00 -9.847298e-04 -1.100000e+00 -1.026832e-03 -1.200000e+00 -1.068568e-03 -1.300000e+00 -1.110126e-03 -1.400000e+00 -1.151665e-03 -1.500000e+00 -1.193317e-03 -1.600000e+00 -1.235191e-03 -1.700000e+00 -1.277373e-03 -1.800000e+00 -1.319937e-03 -2.000000e-01 -6.292859e-04 -3.000000e-01 -8.688414e-04 -4.000000e-01 -1.058522e-03 -5.000000e-01 -1.200756e-03 -6.000000e-01 -1.301443e-03 -7.000000e-01 -1.374051e-03 -8.000000e-01 -1.436496e-03 -9.000000e-01 -1.497358e-03 -1.000000e+00 -1.557558e-03 -1.100000e+00 -1.616917e-03 -1.200000e+00 -1.675372e-03 -1.300000e+00 -1.732995e-03 -1.400000e+00 -1.789923e-03 -1.500000e+00 -1.846313e-03 -1.600000e+00 -1.902325e-03 -1.700000e+00 -1.958102e-03 -1.800000e+00 -2.013774e-03 -2.000000e-01 -7.757029e-04 -3.000000e-01 -1.095901e-03 -4.000000e-01 -1.368675e-03 -5.000000e-01 -1.594759e-03 -6.000000e-01 -1.776094e-03 -7.000000e-01 -1.916338e-03 -8.000000e-01 -2.022653e-03 -9.000000e-01 -2.106900e-03 -1.000000e+00 -2.182907e-03 -1.100000e+00 -2.257295e-03 -1.200000e+00 -2.331004e-03 -1.300000e+00 -2.403930e-03 -1.400000e+00 -2.475965e-03 -1.500000e+00 -2.547096e-03 -1.600000e+00 -2.617386e-03 -1.700000e+00 -2.686935e-03 -1.800000e+00 -2.755863e-03 -2.000000e-01 -9.493495e-04 -3.000000e-01 -1.368551e-03 -4.000000e-01 -1.746103e-03 -5.000000e-01 -2.080739e-03 -6.000000e-01 -2.372655e-03 -7.000000e-01 -2.623105e-03 -8.000000e-01 -2.834148e-03 -9.000000e-01 -3.008831e-03 -1.000000e+00 -3.151739e-03 -1.100000e+00 -3.269323e-03 -1.200000e+00 -3.369851e-03 -1.300000e+00 -3.462714e-03 -1.400000e+00 -3.553562e-03 -1.500000e+00 -3.643558e-03 -1.600000e+00 -3.732807e-03 -1.700000e+00 -3.821246e-03 -1.800000e+00 -3.908825e-03 -2.000000e-01 -1.075700e-03 -3.000000e-01 -1.569799e-03 -4.000000e-01 -2.029113e-03 -5.000000e-01 -2.451016e-03 -6.000000e-01 -2.834228e-03 -7.000000e-01 -3.178642e-03 -8.000000e-01 -3.485045e-03 -9.000000e-01 -3.754854e-03 -1.000000e+00 -3.989998e-03 -1.100000e+00 -4.192982e-03 -1.200000e+00 -4.367083e-03 -1.300000e+00 -4.516446e-03 -1.400000e+00 -4.645965e-03 -1.500000e+00 -4.761108e-03 -1.600000e+00 -4.867919e-03 -1.700000e+00 -4.971639e-03 -1.800000e+00 -5.074169e-03 -2.000000e-01 -1.029424e-04 -3.000000e-01 -1.224425e-04 -4.000000e-01 -1.387914e-04 -5.000000e-01 -1.551727e-04 -6.000000e-01 -1.719196e-04 -7.000000e-01 -1.891019e-04 -8.000000e-01 -2.067710e-04 -9.000000e-01 -2.249725e-04 -1.000000e+00 -2.437466e-04 -1.100000e+00 -2.631282e-04 -1.200000e+00 -2.831490e-04 -1.300000e+00 -3.038381e-04 -1.400000e+00 -3.252235e-04 -1.500000e+00 -3.473327e-04 -1.600000e+00 -3.701932e-04 -1.700000e+00 -3.938329e-04 -1.800000e+00 -4.182805e-04 -2.000000e-01 -2.326826e-04 -3.000000e-01 -2.968909e-04 -4.000000e-01 -3.368301e-04 -5.000000e-01 -3.666029e-04 -6.000000e-01 -3.945188e-04 -7.000000e-01 -4.220433e-04 -8.000000e-01 -4.493012e-04 -9.000000e-01 -4.764122e-04 -1.000000e+00 -5.035239e-04 -1.100000e+00 -5.307734e-04 -1.200000e+00 -5.582746e-04 -1.300000e+00 -5.861189e-04 -1.400000e+00 -6.143794e-04 -1.500000e+00 -6.431156e-04 -1.600000e+00 -6.723766e-04 -1.700000e+00 -7.022044e-04 -1.800000e+00 -7.326358e-04 -2.000000e-01 -3.658979e-04 -3.000000e-01 -4.946757e-04 -4.000000e-01 -5.898788e-04 -5.000000e-01 -6.563856e-04 -6.000000e-01 -7.042886e-04 -7.000000e-01 -7.450971e-04 -8.000000e-01 -7.845423e-04 -9.000000e-01 -8.235634e-04 -1.000000e+00 -8.621415e-04 -1.100000e+00 -9.002898e-04 -1.200000e+00 -9.380993e-04 -1.300000e+00 -9.756927e-04 -1.400000e+00 -1.013195e-03 -1.500000e+00 -1.050721e-03 -1.600000e+00 -1.088371e-03 -1.700000e+00 -1.126229e-03 -1.800000e+00 -1.164370e-03 -2.000000e-01 -4.873673e-04 -3.000000e-01 -6.795289e-04 -4.000000e-01 -8.374697e-04 -5.000000e-01 -9.626076e-04 -6.000000e-01 -1.057909e-03 -7.000000e-01 -1.129479e-03 -8.000000e-01 -1.186598e-03 -9.000000e-01 -1.238154e-03 -1.000000e+00 -1.288489e-03 -1.100000e+00 -1.338434e-03 -1.200000e+00 -1.387946e-03 -1.300000e+00 -1.436962e-03 -1.400000e+00 -1.485495e-03 -1.500000e+00 -1.533611e-03 -1.600000e+00 -1.581400e-03 -1.700000e+00 -1.628963e-03 -1.800000e+00 -1.676396e-03 -2.000000e-01 -5.944459e-04 -3.000000e-01 -8.443543e-04 -4.000000e-01 -1.061332e-03 -5.000000e-01 -1.245609e-03 -6.000000e-01 -1.398315e-03 -7.000000e-01 -1.521622e-03 -8.000000e-01 -1.619415e-03 -9.000000e-01 -1.697780e-03 -1.000000e+00 -1.764330e-03 -1.100000e+00 -1.825969e-03 -1.200000e+00 -1.886288e-03 -1.300000e+00 -1.946185e-03 -1.400000e+00 -2.005689e-03 -1.500000e+00 -2.064720e-03 -1.600000e+00 -2.123240e-03 -1.700000e+00 -2.181264e-03 -1.800000e+00 -2.238839e-03 -2.000000e-01 -7.286277e-04 -3.000000e-01 -1.052811e-03 -4.000000e-01 -1.347551e-03 -5.000000e-01 -1.611815e-03 -6.000000e-01 -1.845451e-03 -7.000000e-01 -2.049108e-03 -8.000000e-01 -2.224106e-03 -9.000000e-01 -2.372448e-03 -1.000000e+00 -2.497036e-03 -1.100000e+00 -2.601823e-03 -1.200000e+00 -2.691636e-03 -1.300000e+00 -2.771746e-03 -1.400000e+00 -2.847035e-03 -1.500000e+00 -2.920554e-03 -1.600000e+00 -2.993430e-03 -1.700000e+00 -3.065902e-03 -1.800000e+00 -3.137954e-03 -2.000000e-01 -8.339544e-04 -3.000000e-01 -1.217922e-03 -4.000000e-01 -1.576666e-03 -5.000000e-01 -1.908395e-03 -6.000000e-01 -2.212035e-03 -7.000000e-01 -2.487268e-03 -8.000000e-01 -2.734448e-03 -9.000000e-01 -2.954460e-03 -1.000000e+00 -3.148627e-03 -1.100000e+00 -3.318708e-03 -1.200000e+00 -3.466960e-03 -1.300000e+00 -3.596185e-03 -1.400000e+00 -3.709647e-03 -1.500000e+00 -3.810875e-03 -1.600000e+00 -3.903468e-03 -1.700000e+00 -3.990862e-03 -1.800000e+00 -4.075746e-03 tmpk8ny_4pz/tests/hisim/pmos/reference/58_acFreq_CORG=0.standard0000644000175000017500000002530213546075722024577 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1258.925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584.893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995.262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511.886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162.278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981.072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011.872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309.573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943.282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 10000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589.25 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848.93 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952.62 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118.86 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622.78 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810.72 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118.72 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095.73 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432.82 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 125892.5 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 158489.3 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 199526.2 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 251188.6 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 316227.8 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 398107.2 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 501187.2 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 630957.3 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 794328.2 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 1000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 1258925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 10000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589250 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848930 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952620 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118860 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622780 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810720 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118720 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095730 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432820 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258.925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584.893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995.262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511.886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162.278 2.08988054797393e-14 1.68486984597449e-14 3.40873274812869e-15 3981.072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011.872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309.573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943.282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589.25 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848.93 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952.62 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118.86 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622.78 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810.72 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118.72 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095.73 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432.82 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 125892.5 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 158489.3 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 199526.2 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 251188.6 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 316227.8 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 398107.2 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 501187.2 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 630957.3 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 794328.2 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 1000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162278 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 3981072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589250 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848930 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952620 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118860 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622780 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810720 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118720 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095730 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432820 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258.925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584.893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995.262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511.886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162.278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981.072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011.872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309.573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943.282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589.25 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848.93 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952.62 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118.86 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622.78 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810.72 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118.72 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095.73 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432.82 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 125892.5 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 158489.3 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 199526.2 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 251188.6 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 316227.8 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 398107.2 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 501187.2 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 630957.3 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 794328.2 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 1000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589250 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848930 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952620 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118860 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622780 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810720 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118720 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095730 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432820 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/45_acFreq_COOVLP=1.standard0000644000175000017500000002530213546075722025044 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1258.925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584.893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995.262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511.886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162.278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981.072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011.872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309.573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943.282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 10000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589.25 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848.93 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952.62 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118.86 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622.78 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810.72 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118.72 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095.73 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432.82 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 125892.5 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 158489.3 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 199526.2 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 251188.6 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 316227.8 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 398107.2 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 501187.2 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 630957.3 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 794328.2 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 1000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 1258925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 10000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589250 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848930 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952620 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118860 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622780 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810720 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118720 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095730 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432820 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258.925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584.893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995.262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511.886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162.278 2.08988054797393e-14 1.68486984597449e-14 3.40873274812869e-15 3981.072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011.872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309.573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943.282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589.25 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848.93 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952.62 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118.86 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622.78 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810.72 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118.72 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095.73 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432.82 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 125892.5 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 158489.3 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 199526.2 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 251188.6 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 316227.8 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 398107.2 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 501187.2 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 630957.3 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 794328.2 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 1000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162278 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 3981072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589250 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848930 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952620 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118860 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622780 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810720 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118720 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095730 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432820 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258.925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584.893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995.262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511.886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162.278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981.072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011.872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309.573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943.282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589.25 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848.93 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952.62 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118.86 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622.78 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810.72 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118.72 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095.73 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432.82 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 125892.5 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 158489.3 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 199526.2 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 251188.6 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 316227.8 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 398107.2 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 501187.2 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 630957.3 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 794328.2 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 1000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589250 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848930 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952620 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118860 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622780 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810720 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118720 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095730 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432820 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/36_acVd_CORSRD=-1_GDLD.standard0000644000175000017500000000723113546075722025362 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -0.2 8.010067e-04 3.788485e-03 1.47596239962326e-14 1.19242132285328e-14 -0.3 1.281060e-03 3.165814e-03 1.52120841187382e-14 1.1166483023374e-14 -0.4 1.800353e-03 2.528028e-03 1.57028942516271e-14 1.01148427386378e-14 -0.5 2.349318e-03 1.898307e-03 1.61853343822499e-14 8.66913734720676e-15 -0.6 2.912254e-03 1.299560e-03 1.65349044768975e-14 6.87980186273637e-15 -0.7 3.424736e-03 8.018339e-04 1.66216445003828e-14 5.26652042593339e-15 -0.8 3.689649e-03 5.827727e-04 1.65354544770465e-14 4.29159416196785e-15 -0.9 3.716078e-03 6.067361e-04 1.64749344606604e-14 3.91807106083484e-15 -1 3.798355e-03 5.857627e-04 1.646455445785e-14 3.81351003252448e-15 -1.1 3.883523e-03 5.626068e-04 1.64544444551126e-14 3.70293300258527e-15 -1.2 3.969563e-03 5.390661e-04 1.64421044517715e-14 3.57028296666969e-15 -1.3 4.054615e-03 5.164654e-04 1.64279644479431e-14 3.41977392591871e-15 -1.4 4.137039e-03 4.957748e-04 1.64107244432753e-14 3.23248687520993e-15 -1.5 4.215864e-03 4.774135e-04 1.63918844381742e-14 3.02826381991564e-15 -1.6 4.290669e-03 4.614314e-04 1.63734244331761e-14 2.83291376702376e-15 -1.7 4.361392e-03 4.476851e-04 1.63551444282267e-14 2.64292371558313e-15 -1.8 4.428175e-03 4.359498e-04 1.63391544238974e-14 2.48465367273082e-15 -0.2 6.553590e-04 3.093179e-03 1.45042239270819e-14 1.18844432177649e-14 -0.3 1.034488e-03 2.625745e-03 1.49520340483285e-14 1.11328230142604e-14 -0.4 1.438860e-03 2.144181e-03 1.54355041792301e-14 1.01266727418408e-14 -0.5 1.860693e-03 1.666513e-03 1.59159343093087e-14 8.7967693817637e-15 -0.6 2.288785e-03 1.210306e-03 1.62996144131917e-14 7.1664189403392e-15 -0.7 2.689575e-03 8.147817e-04 1.6464654457877e-14 5.58660151259674e-15 -0.8 2.981682e-03 5.572181e-04 1.64346444497517e-14 4.51903722354905e-15 -0.9 3.070796e-03 5.102860e-04 1.63577844289415e-14 3.95476107076882e-15 -1 3.116987e-03 5.117500e-04 1.63290344211573e-14 3.74448201383484e-15 -1.1 3.180550e-03 4.993573e-04 1.6318274418244e-14 3.61075097762658e-15 -1.2 3.248083e-03 4.838022e-04 1.6307674415374e-14 3.47110293981627e-15 -1.3 3.316925e-03 4.673461e-04 1.6296594412374e-14 3.33092790186326e-15 -1.4 3.385277e-03 4.513135e-04 1.62835944088542e-14 3.16528485701469e-15 -1.5 3.451893e-03 4.364667e-04 1.62693344049933e-14 2.9842108079881e-15 -1.6 3.516033e-03 4.231510e-04 1.62551944011648e-14 2.80892476052864e-15 -1.7 3.577334e-03 4.114546e-04 1.62414143974338e-14 2.64239771544071e-15 -1.8 3.635683e-03 4.013253e-04 1.62280143938057e-14 2.48413367259003e-15 -0.2 5.066285e-04 2.456055e-03 1.41993938445478e-14 1.18157031991532e-14 -0.3 7.895771e-04 2.119230e-03 1.46312739614813e-14 1.10874330019709e-14 -0.4 1.086245e-03 1.772887e-03 1.5096824087531e-14 1.01463727471747e-14 -0.5 1.390729e-03 1.429731e-03 1.55639542140085e-14 8.95305742407937e-15 -0.6 1.695415e-03 1.102074e-03 1.59679043233798e-14 7.51560503488286e-15 -0.7 1.984733e-03 8.094223e-04 1.6211284389276e-14 6.03270763338192e-15 -0.8 2.227072e-03 5.842342e-04 1.62624744031359e-14 4.86337631678036e-15 -0.9 2.379760e-03 4.619054e-04 1.62124443895901e-14 4.14704312283002e-15 -1 2.438655e-03 4.362268e-04 1.61575943747392e-14 3.74488801394477e-15 -1.1 2.476466e-03 4.338194e-04 1.61317443677402e-14 3.5198339530104e-15 -1.2 2.519878e-03 4.275462e-04 1.61197243644857e-14 3.35798690918961e-15 -1.3 2.566770e-03 4.185052e-04 1.61111743621708e-14 3.22792887397583e-15 -1.4 2.615147e-03 4.083044e-04 1.61020543597015e-14 3.08368483492112e-15 -1.5 2.663638e-03 3.979770e-04 1.60921843570291e-14 2.92757179265284e-15 -1.6 2.711290e-03 3.881454e-04 1.60821543543135e-14 2.77180175047742e-15 -1.7 2.757485e-03 3.791442e-04 1.60725043517007e-14 2.62627971107669e-15 -1.8 2.801856e-03 3.711217e-04 1.60631343491637e-14 2.48838667374155e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/11_dcSweep_COGIDL=1.standard0000644000175000017500000003447413546075722025177 0ustar carstencarstenV(d) I(d) I(b) -2.000000e-01 -4.699615e-05 1.157845e-13 -3.000000e-01 -5.356444e-05 1.565528e-12 -4.000000e-01 -6.033219e-05 9.717824e-12 -5.000000e-01 -6.744934e-05 3.783540e-11 -6.000000e-01 -7.492430e-05 1.078206e-10 -7.000000e-01 -8.274251e-05 2.462661e-10 -8.000000e-01 -9.089919e-05 4.785897e-10 -9.000000e-01 -9.939911e-05 8.251033e-10 -1.000000e+00 -1.082525e-04 1.300187e-09 -1.100000e+00 -1.174723e-04 1.913389e-09 -1.200000e+00 -1.270734e-04 2.670997e-09 -1.300000e+00 -1.370714e-04 3.577324e-09 -1.400000e+00 -1.474833e-04 4.635554e-09 -1.500000e+00 -1.583268e-04 5.848224e-09 -1.600000e+00 -1.696209e-04 7.217488e-09 -1.700000e+00 -1.813855e-04 8.745252e-09 -1.800000e+00 -1.936419e-04 1.043324e-08 -2.000000e-01 -3.236954e-04 3.074996e-16 -3.000000e-01 -3.722842e-04 2.406654e-14 -4.000000e-01 -4.052186e-04 5.485023e-13 -5.000000e-01 -4.371928e-04 4.469358e-12 -6.000000e-01 -4.684500e-04 2.026539e-11 -7.000000e-01 -4.993045e-04 6.338027e-11 -8.000000e-01 -5.300659e-04 1.541458e-10 -9.000000e-01 -5.609686e-04 3.139623e-10 -1.000000e+00 -5.921831e-04 5.622460e-10 -1.100000e+00 -6.238337e-04 9.150864e-10 -1.200000e+00 -6.560141e-04 1.385201e-09 -1.300000e+00 -6.887971e-04 1.982474e-09 -1.400000e+00 -7.222419e-04 2.714613e-09 -1.500000e+00 -7.563980e-04 3.587705e-09 -1.600000e+00 -7.913090e-04 4.606652e-09 -1.700000e+00 -8.270140e-04 5.775470e-09 -1.800000e+00 -8.635493e-04 7.097510e-09 -2.000000e-01 -6.362416e-04 2.000000e-16 -3.000000e-01 -8.252108e-04 3.000001e-16 -4.000000e-01 -9.384887e-04 5.643185e-16 -5.000000e-01 -1.006766e-03 4.170752e-14 -6.000000e-01 -1.066911e-03 8.739416e-13 -7.000000e-01 -1.125791e-03 6.359450e-12 -8.000000e-01 -1.183256e-03 2.602827e-11 -9.000000e-01 -1.239416e-03 7.499540e-11 -1.000000e+00 -1.294578e-03 1.715208e-10 -1.100000e+00 -1.349078e-03 3.342344e-10 -1.200000e+00 -1.403216e-03 5.802777e-10 -1.300000e+00 -1.457237e-03 9.244940e-10 -1.400000e+00 -1.511338e-03 1.379316e-09 -1.500000e+00 -1.565676e-03 1.954994e-09 -1.600000e+00 -1.620375e-03 2.659938e-09 -1.700000e+00 -1.675536e-03 3.501059e-09 -1.800000e+00 -1.731241e-03 4.484063e-09 -2.000000e-01 -8.942919e-04 2.000000e-16 -3.000000e-01 -1.221693e-03 3.000000e-16 -4.000000e-01 -1.471297e-03 4.000000e-16 -5.000000e-01 -1.648885e-03 5.000000e-16 -6.000000e-01 -1.767189e-03 6.500217e-16 -7.000000e-01 -1.854914e-03 3.160399e-14 -8.000000e-01 -1.937134e-03 8.133973e-13 -9.000000e-01 -2.017933e-03 6.237099e-12 -1.000000e+00 -2.097230e-03 2.568351e-11 -1.100000e+00 -2.174954e-03 7.353914e-11 -1.200000e+00 -2.251232e-03 1.668683e-10 -1.300000e+00 -2.326297e-03 3.230975e-10 -1.400000e+00 -2.400412e-03 5.585112e-10 -1.500000e+00 -2.473831e-03 8.875468e-10 -1.600000e+00 -2.546780e-03 1.322619e-09 -1.700000e+00 -2.619457e-03 1.874225e-09 -1.800000e+00 -2.692027e-03 2.551170e-09 -2.000000e-01 -1.099660e-03 2.000000e-16 -3.000000e-01 -1.542998e-03 3.000000e-16 -4.000000e-01 -1.912357e-03 4.000000e-16 -5.000000e-01 -2.210948e-03 5.000000e-16 -6.000000e-01 -2.443263e-03 6.000000e-16 -7.000000e-01 -2.616248e-03 7.000000e-16 -8.000000e-01 -2.743263e-03 8.043190e-16 -9.000000e-01 -2.847346e-03 1.436709e-14 -1.000000e+00 -2.946865e-03 5.470598e-13 -1.100000e+00 -3.044792e-03 4.929101e-12 -1.200000e+00 -3.141252e-03 2.183415e-11 -1.300000e+00 -3.236151e-03 6.492347e-11 -1.400000e+00 -3.329502e-03 1.505931e-10 -1.500000e+00 -3.421423e-03 2.957585e-10 -1.600000e+00 -3.512085e-03 5.164144e-10 -1.700000e+00 -3.601686e-03 8.269284e-10 -1.800000e+00 -3.690420e-03 1.239822e-09 -2.000000e-01 -1.323288e-03 2.000000e-16 -3.000000e-01 -1.900779e-03 3.000000e-16 -4.000000e-01 -2.413864e-03 4.000000e-16 -5.000000e-01 -2.862055e-03 5.000000e-16 -6.000000e-01 -3.247311e-03 6.000000e-16 -7.000000e-01 -3.572769e-03 7.000000e-16 -8.000000e-01 -3.842246e-03 8.000000e-16 -9.000000e-01 -4.060779e-03 9.000000e-16 -1.000000e+00 -4.235768e-03 1.000000e-15 -1.100000e+00 -4.377686e-03 1.100005e-15 -1.200000e+00 -4.501075e-03 2.864238e-15 -1.300000e+00 -4.619790e-03 2.003258e-13 -1.400000e+00 -4.736666e-03 2.700444e-12 -1.500000e+00 -4.852063e-03 1.452033e-11 -1.600000e+00 -4.966006e-03 4.804823e-11 -1.700000e+00 -5.078485e-03 1.189690e-10 -1.800000e+00 -5.189527e-03 2.439274e-10 -2.000000e-01 -1.465681e-03 2.000000e-16 -3.000000e-01 -2.135731e-03 3.000000e-16 -4.000000e-01 -2.753367e-03 4.000000e-16 -5.000000e-01 -3.315155e-03 5.000000e-16 -6.000000e-01 -3.820331e-03 6.000000e-16 -7.000000e-01 -4.269931e-03 7.000000e-16 -8.000000e-01 -4.666054e-03 8.000000e-16 -9.000000e-01 -5.011370e-03 9.000000e-16 -1.000000e+00 -5.308993e-03 1.000000e-15 -1.100000e+00 -5.562716e-03 1.100000e-15 -1.200000e+00 -5.777420e-03 1.200000e-15 -1.300000e+00 -5.959268e-03 1.300000e-15 -1.400000e+00 -6.115539e-03 1.400000e-15 -1.500000e+00 -6.254781e-03 1.560710e-15 -1.600000e+00 -6.387042e-03 4.821106e-14 -1.700000e+00 -6.517185e-03 1.179422e-12 -1.800000e+00 -6.645738e-03 8.412147e-12 -2.000000e-01 -8.053777e-05 1.157845e-13 -3.000000e-01 -9.162409e-05 1.565528e-12 -4.000000e-01 -1.024997e-04 9.717824e-12 -5.000000e-01 -1.136549e-04 3.783540e-11 -6.000000e-01 -1.251791e-04 1.078206e-10 -7.000000e-01 -1.370997e-04 2.462661e-10 -8.000000e-01 -1.494361e-04 4.785897e-10 -9.000000e-01 -1.622088e-04 8.251033e-10 -1.000000e+00 -1.754395e-04 1.300187e-09 -1.100000e+00 -1.891504e-04 1.913389e-09 -1.200000e+00 -2.033633e-04 2.670997e-09 -1.300000e+00 -2.181006e-04 3.577324e-09 -1.400000e+00 -2.333846e-04 4.635554e-09 -1.500000e+00 -2.492382e-04 5.848224e-09 -1.600000e+00 -2.656853e-04 7.217488e-09 -1.700000e+00 -2.827505e-04 8.745252e-09 -1.800000e+00 -3.004597e-04 1.043324e-08 -2.000000e-01 -2.967540e-04 3.074996e-16 -3.000000e-01 -3.587330e-04 2.406654e-14 -4.000000e-01 -3.937602e-04 5.485023e-13 -5.000000e-01 -4.249225e-04 4.469358e-12 -6.000000e-01 -4.554245e-04 2.026539e-11 -7.000000e-01 -4.853715e-04 6.338027e-11 -8.000000e-01 -5.149863e-04 1.541458e-10 -9.000000e-01 -5.445100e-04 3.139623e-10 -1.000000e+00 -5.741413e-04 5.622460e-10 -1.100000e+00 -6.040324e-04 9.150864e-10 -1.200000e+00 -6.342983e-04 1.385201e-09 -1.300000e+00 -6.650274e-04 1.982474e-09 -1.400000e+00 -6.962894e-04 2.714613e-09 -1.500000e+00 -7.281410e-04 3.587705e-09 -1.600000e+00 -7.606301e-04 4.606652e-09 -1.700000e+00 -7.937985e-04 5.775470e-09 -1.800000e+00 -8.276836e-04 7.097510e-09 -2.000000e-01 -5.192224e-04 2.000000e-16 -3.000000e-01 -6.879597e-04 3.000001e-16 -4.000000e-01 -8.011363e-04 5.643185e-16 -5.000000e-01 -8.720396e-04 4.170752e-14 -6.000000e-01 -9.256745e-04 8.739416e-13 -7.000000e-01 -9.769033e-04 6.359450e-12 -8.000000e-01 -1.027362e-03 2.602827e-11 -9.000000e-01 -1.076896e-03 7.499540e-11 -1.000000e+00 -1.125564e-03 1.715208e-10 -1.100000e+00 -1.173562e-03 3.342344e-10 -1.200000e+00 -1.221119e-03 5.802777e-10 -1.300000e+00 -1.268447e-03 9.244940e-10 -1.400000e+00 -1.315728e-03 1.379316e-09 -1.500000e+00 -1.363112e-03 1.954994e-09 -1.600000e+00 -1.410723e-03 2.659938e-09 -1.700000e+00 -1.458664e-03 3.501059e-09 -1.800000e+00 -1.507018e-03 4.484063e-09 -2.000000e-01 -7.107833e-04 2.000000e-16 -3.000000e-01 -9.814930e-04 3.000000e-16 -4.000000e-01 -1.196037e-03 4.000000e-16 -5.000000e-01 -1.357425e-03 5.000000e-16 -6.000000e-01 -1.472204e-03 6.500217e-16 -7.000000e-01 -1.554887e-03 3.160399e-14 -8.000000e-01 -1.625302e-03 8.133973e-13 -9.000000e-01 -1.693712e-03 6.237099e-12 -1.000000e+00 -1.761384e-03 2.568351e-11 -1.100000e+00 -1.828127e-03 7.353914e-11 -1.200000e+00 -1.893853e-03 1.668683e-10 -1.300000e+00 -1.958630e-03 3.230975e-10 -1.400000e+00 -2.022603e-03 5.585112e-10 -1.500000e+00 -2.085949e-03 8.875468e-10 -1.600000e+00 -2.148842e-03 1.322619e-09 -1.700000e+00 -2.211443e-03 1.874225e-09 -1.800000e+00 -2.273897e-03 2.551170e-09 -2.000000e-01 -8.703534e-04 2.000000e-16 -3.000000e-01 -1.229542e-03 3.000000e-16 -4.000000e-01 -1.535299e-03 4.000000e-16 -5.000000e-01 -1.788717e-03 5.000000e-16 -6.000000e-01 -1.992234e-03 6.000000e-16 -7.000000e-01 -2.150032e-03 7.000000e-16 -8.000000e-01 -2.269922e-03 8.043190e-16 -9.000000e-01 -2.364654e-03 1.436709e-14 -1.000000e+00 -2.449433e-03 5.470598e-13 -1.100000e+00 -2.532170e-03 4.929101e-12 -1.200000e+00 -2.614133e-03 2.183415e-11 -1.300000e+00 -2.695229e-03 6.492347e-11 -1.400000e+00 -2.775330e-03 1.505931e-10 -1.500000e+00 -2.854418e-03 2.957585e-10 -1.600000e+00 -2.932552e-03 5.164144e-10 -1.700000e+00 -3.009842e-03 8.269284e-10 -1.800000e+00 -3.086416e-03 1.239822e-09 -2.000000e-01 -1.055746e-03 2.000000e-16 -3.000000e-01 -1.522006e-03 3.000000e-16 -4.000000e-01 -1.941527e-03 4.000000e-16 -5.000000e-01 -2.312983e-03 5.000000e-16 -6.000000e-01 -2.636801e-03 6.000000e-16 -7.000000e-01 -2.914587e-03 7.000000e-16 -8.000000e-01 -3.148785e-03 8.000000e-16 -9.000000e-01 -3.342837e-03 9.000000e-16 -1.000000e+00 -3.501773e-03 1.000000e-15 -1.100000e+00 -3.632590e-03 1.100005e-15 -1.200000e+00 -3.744148e-03 2.864238e-15 -1.300000e+00 -3.846545e-03 2.003258e-13 -1.400000e+00 -3.946382e-03 2.700444e-12 -1.500000e+00 -4.045210e-03 1.452033e-11 -1.600000e+00 -4.143203e-03 4.804823e-11 -1.700000e+00 -4.240297e-03 1.189690e-10 -1.800000e+00 -4.336435e-03 2.439274e-10 -2.000000e-01 -1.186306e-03 2.000000e-16 -3.000000e-01 -1.731660e-03 3.000000e-16 -4.000000e-01 -2.238332e-03 4.000000e-16 -5.000000e-01 -2.703337e-03 5.000000e-16 -6.000000e-01 -3.125332e-03 6.000000e-16 -7.000000e-01 -3.504342e-03 7.000000e-16 -8.000000e-01 -3.841383e-03 8.000000e-16 -9.000000e-01 -4.138137e-03 9.000000e-16 -1.000000e+00 -4.396808e-03 1.000000e-15 -1.100000e+00 -4.620185e-03 1.100000e-15 -1.200000e+00 -4.811857e-03 1.200000e-15 -1.300000e+00 -4.976335e-03 1.300000e-15 -1.400000e+00 -5.118917e-03 1.400000e-15 -1.500000e+00 -5.245465e-03 1.560710e-15 -1.600000e+00 -5.362370e-03 4.821106e-14 -1.700000e+00 -5.475384e-03 1.179422e-12 -1.800000e+00 -5.586920e-03 8.412147e-12 -2.000000e-01 -1.215310e-04 1.157845e-13 -3.000000e-01 -1.449795e-04 1.565528e-12 -4.000000e-01 -1.644397e-04 9.717824e-12 -5.000000e-01 -1.838944e-04 3.783540e-11 -6.000000e-01 -2.037632e-04 1.078206e-10 -7.000000e-01 -2.241342e-04 2.462661e-10 -8.000000e-01 -2.450733e-04 4.785897e-10 -9.000000e-01 -2.666389e-04 8.251033e-10 -1.000000e+00 -2.888816e-04 1.300187e-09 -1.100000e+00 -3.118453e-04 1.913389e-09 -1.200000e+00 -3.355690e-04 2.670997e-09 -1.300000e+00 -3.600888e-04 3.577324e-09 -1.400000e+00 -3.854389e-04 4.635554e-09 -1.500000e+00 -4.116527e-04 5.848224e-09 -1.600000e+00 -4.387639e-04 7.217488e-09 -1.700000e+00 -4.668063e-04 8.745252e-09 -1.800000e+00 -4.958149e-04 1.043324e-08 -2.000000e-01 -2.683866e-04 3.074996e-16 -3.000000e-01 -3.434866e-04 2.406654e-14 -4.000000e-01 -3.905718e-04 5.485023e-13 -5.000000e-01 -4.254121e-04 4.469358e-12 -6.000000e-01 -4.579229e-04 2.026539e-11 -7.000000e-01 -4.899889e-04 6.338027e-11 -8.000000e-01 -5.217548e-04 1.541458e-10 -9.000000e-01 -5.533464e-04 3.139623e-10 -1.000000e+00 -5.849292e-04 5.622460e-10 -1.100000e+00 -6.166615e-04 9.150864e-10 -1.200000e+00 -6.486766e-04 1.385201e-09 -1.300000e+00 -6.810819e-04 1.982474e-09 -1.400000e+00 -7.139640e-04 2.714613e-09 -1.500000e+00 -7.473930e-04 3.587705e-09 -1.600000e+00 -7.814271e-04 4.606652e-09 -1.700000e+00 -8.161159e-04 5.775470e-09 -1.800000e+00 -8.515027e-04 7.097510e-09 -2.000000e-01 -4.174948e-04 2.000000e-16 -3.000000e-01 -5.651320e-04 3.000001e-16 -4.000000e-01 -6.748377e-04 5.643185e-16 -5.000000e-01 -7.519469e-04 4.170752e-14 -6.000000e-01 -8.074889e-04 8.739416e-13 -7.000000e-01 -8.544460e-04 6.359450e-12 -8.000000e-01 -8.996976e-04 2.602827e-11 -9.000000e-01 -9.444787e-04 7.499540e-11 -1.000000e+00 -9.887738e-04 1.715208e-10 -1.100000e+00 -1.032584e-03 3.342344e-10 -1.200000e+00 -1.076002e-03 5.802777e-10 -1.300000e+00 -1.119163e-03 9.244940e-10 -1.400000e+00 -1.162208e-03 1.379316e-09 -1.500000e+00 -1.205266e-03 1.954994e-09 -1.600000e+00 -1.248453e-03 2.659938e-09 -1.700000e+00 -1.291867e-03 3.501059e-09 -1.800000e+00 -1.335591e-03 4.484063e-09 -2.000000e-01 -5.523075e-04 2.000000e-16 -3.000000e-01 -7.705283e-04 3.000000e-16 -4.000000e-01 -9.501590e-04 4.000000e-16 -5.000000e-01 -1.092854e-03 5.000000e-16 -6.000000e-01 -1.201930e-03 6.500217e-16 -7.000000e-01 -1.284056e-03 3.160399e-14 -8.000000e-01 -1.349422e-03 8.133973e-13 -9.000000e-01 -1.408062e-03 6.237099e-12 -1.000000e+00 -1.465169e-03 2.568351e-11 -1.100000e+00 -1.521831e-03 7.353914e-11 -1.200000e+00 -1.578021e-03 1.668683e-10 -1.300000e+00 -1.633658e-03 3.230975e-10 -1.400000e+00 -1.688748e-03 5.585112e-10 -1.500000e+00 -1.743358e-03 8.875468e-10 -1.600000e+00 -1.797588e-03 1.322619e-09 -1.700000e+00 -1.851547e-03 1.874225e-09 -1.800000e+00 -1.905343e-03 2.551170e-09 -2.000000e-01 -6.699586e-04 2.000000e-16 -3.000000e-01 -9.519966e-04 3.000000e-16 -4.000000e-01 -1.196965e-03 4.000000e-16 -5.000000e-01 -1.405155e-03 5.000000e-16 -6.000000e-01 -1.577904e-03 6.000000e-16 -7.000000e-01 -1.717682e-03 7.000000e-16 -8.000000e-01 -1.828773e-03 8.043190e-16 -9.000000e-01 -1.917844e-03 1.436709e-14 -1.000000e+00 -1.993249e-03 5.470598e-13 -1.100000e+00 -2.062742e-03 4.929101e-12 -1.200000e+00 -2.130579e-03 2.183415e-11 -1.300000e+00 -2.197915e-03 6.492347e-11 -1.400000e+00 -2.264816e-03 1.505931e-10 -1.500000e+00 -2.331191e-03 2.957585e-10 -1.600000e+00 -2.396993e-03 5.164144e-10 -1.700000e+00 -2.462232e-03 8.269284e-10 -1.800000e+00 -2.526957e-03 1.239822e-09 -2.000000e-01 -8.151175e-04 2.000000e-16 -3.000000e-01 -1.178259e-03 3.000000e-16 -4.000000e-01 -1.508450e-03 4.000000e-16 -5.000000e-01 -1.804478e-03 5.000000e-16 -6.000000e-01 -2.066202e-03 6.000000e-16 -7.000000e-01 -2.294404e-03 7.000000e-16 -8.000000e-01 -2.490612e-03 8.000000e-16 -9.000000e-01 -2.657086e-03 9.000000e-16 -1.000000e+00 -2.797037e-03 1.000000e-15 -1.100000e+00 -2.914811e-03 1.100005e-15 -1.200000e+00 -3.015698e-03 2.864238e-15 -1.300000e+00 -3.105458e-03 2.003258e-13 -1.400000e+00 -3.189490e-03 2.700444e-12 -1.500000e+00 -3.271330e-03 1.452033e-11 -1.600000e+00 -3.352374e-03 4.804823e-11 -1.700000e+00 -3.432950e-03 1.189690e-10 -1.800000e+00 -3.513054e-03 2.439274e-10 -2.000000e-01 -9.263926e-04 2.000000e-16 -3.000000e-01 -1.353590e-03 3.000000e-16 -4.000000e-01 -1.752829e-03 4.000000e-16 -5.000000e-01 -2.121990e-03 5.000000e-16 -6.000000e-01 -2.459839e-03 6.000000e-16 -7.000000e-01 -2.766039e-03 7.000000e-16 -8.000000e-01 -3.041016e-03 8.000000e-16 -9.000000e-01 -3.285795e-03 9.000000e-16 -1.000000e+00 -3.501875e-03 1.000000e-15 -1.100000e+00 -3.691217e-03 1.100000e-15 -1.200000e+00 -3.856317e-03 1.200000e-15 -1.300000e+00 -4.000255e-03 1.300000e-15 -1.400000e+00 -4.126613e-03 1.400000e-15 -1.500000e+00 -4.239259e-03 1.560710e-15 -1.600000e+00 -4.342117e-03 4.821106e-14 -1.700000e+00 -4.438929e-03 1.179422e-12 -1.800000e+00 -4.532697e-03 8.412147e-12 tmpk8ny_4pz/tests/hisim/pmos/reference/48_acFreq_COIIGS=0.standard0000644000175000017500000002530213546075722025021 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1258.925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584.893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995.262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511.886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162.278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981.072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011.872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309.573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943.282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 10000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589.25 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848.93 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952.62 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118.86 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622.78 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810.72 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118.72 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095.73 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432.82 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 125892.5 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 158489.3 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 199526.2 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 251188.6 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 316227.8 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 398107.2 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 501187.2 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 630957.3 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 794328.2 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 1000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 1258925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 10000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589250 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848930 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952620 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118860 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622780 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810720 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118720 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095730 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432820 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258.925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584.893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995.262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511.886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162.278 2.08988054797393e-14 1.68486984597449e-14 3.40873274812869e-15 3981.072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011.872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309.573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943.282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589.25 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848.93 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952.62 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118.86 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622.78 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810.72 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118.72 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095.73 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432.82 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 125892.5 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 158489.3 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 199526.2 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 251188.6 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 316227.8 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 398107.2 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 501187.2 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 630957.3 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 794328.2 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 1000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162278 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 3981072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589250 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848930 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952620 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118860 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622780 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810720 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118720 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095730 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432820 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258.925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584.893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995.262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511.886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162.278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981.072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011.872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309.573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943.282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589.25 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848.93 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952.62 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118.86 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622.78 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810.72 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118.72 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095.73 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432.82 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 125892.5 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 158489.3 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 199526.2 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 251188.6 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 316227.8 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 398107.2 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 501187.2 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 630957.3 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 794328.2 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 1000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589250 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848930 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952620 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118860 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622780 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810720 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118720 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095730 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432820 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/35_acVd_CORSRD=0.standard0000644000175000017500000000723713546075722024517 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -0.2 9.150678e-04 4.675415e-03 1.44027738996139e-14 1.23120833335503e-14 -0.3 1.447685e-03 3.865036e-03 1.49525340484638e-14 1.1435343096169e-14 -0.4 2.008014e-03 3.069189e-03 1.55434342084526e-14 1.0306692790582e-14 -0.5 2.584135e-03 2.315011e-03 1.61351743686689e-14 8.86168939934107e-15 -0.6 3.163276e-03 1.619623e-03 1.66227345006779e-14 7.14742393519622e-15 -0.7 3.702488e-03 1.031764e-03 1.68652545663413e-14 5.55046250281194e-15 -0.8 4.084248e-03 6.628834e-04 1.68801945703863e-14 4.49893121810526e-15 -0.9 4.139660e-03 6.467982e-04 1.68230945549263e-14 3.91077105885833e-15 -1 4.202707e-03 6.342970e-04 1.68155645528875e-14 3.75718801727505e-15 -1.1 4.278822e-03 6.102845e-04 1.68164045531149e-14 3.63680798468163e-15 -1.2 4.356072e-03 5.856554e-04 1.68169445532611e-14 3.49670194674731e-15 -1.3 4.433529e-03 5.613020e-04 1.68172045533315e-14 3.3325749023092e-15 -1.4 4.509751e-03 5.382646e-04 1.6817324553364e-14 3.13315784831616e-15 -1.5 4.583618e-03 5.171742e-04 1.68173845533803e-14 2.92917479308686e-15 -1.6 4.654459e-03 4.982762e-04 1.68174045533857e-14 2.73212173973388e-15 -1.7 4.721960e-03 4.815709e-04 1.68174245533911e-14 2.55175369089845e-15 -1.8 4.786051e-03 4.669270e-04 1.68174345533938e-14 2.40298665061912e-15 -0.2 7.278371e-04 3.757703e-03 1.42233038510216e-14 1.22243933098078e-14 -0.3 1.140444e-03 3.175842e-03 1.47430839917543e-14 1.139202308444e-14 -0.4 1.572729e-03 2.591066e-03 1.53012841428895e-14 1.03409727998635e-14 -0.5 2.015606e-03 2.026121e-03 1.58639742952403e-14 9.02708644412305e-15 -0.6 2.459467e-03 1.497172e-03 1.63545844280751e-14 7.46869502218177e-15 -0.7 2.881036e-03 1.033514e-03 1.66544045092527e-14 5.91526960158506e-15 -0.8 3.226840e-03 6.895359e-04 1.67311745300385e-14 4.75867328843156e-15 -0.9 3.405505e-03 5.415092e-04 1.66932845197796e-14 4.06756310131046e-15 -1 3.444341e-03 5.417110e-04 1.66562145097428e-14 3.71382500553433e-15 -1.1 3.497872e-03 5.319536e-04 1.66514945084648e-14 3.55217096176579e-15 -1.2 3.558183e-03 5.163710e-04 1.66517045085217e-14 3.40950992313969e-15 -1.3 3.620597e-03 4.991822e-04 1.66520045086029e-14 3.26135188302525e-15 -1.4 3.683547e-03 4.817812e-04 1.66521545086435e-14 3.08725283588718e-15 -1.5 3.745794e-03 4.650802e-04 1.66522345086652e-14 2.90425178633884e-15 -1.6 3.806464e-03 4.495972e-04 1.66522645086733e-14 2.73138473953434e-15 -1.7 3.865019e-03 4.355656e-04 1.66522845086787e-14 2.56335769404028e-15 -1.8 3.921175e-03 4.230391e-04 1.66522945086814e-14 2.41266265323894e-15 -0.2 5.487890e-04 2.931054e-03 1.39915937882851e-14 1.21090932785898e-14 -0.3 8.516106e-04 2.527445e-03 1.44744639190243e-14 1.13304830677777e-14 -0.4 1.166181e-03 2.117438e-03 1.49930240594267e-14 1.03675728070656e-14 -0.5 1.486156e-03 1.716804e-03 1.55182242016269e-14 9.19663649002946e-15 -0.6 1.804691e-03 1.338077e-03 1.59976643314374e-14 7.82299211810925e-15 -0.7 2.110220e-03 9.972043e-04 1.63448244254325e-14 6.38159372784435e-15 -0.8 2.379951e-03 7.195488e-04 1.65006344676188e-14 5.15321539525556e-15 -0.9 2.580672e-03 5.343712e-04 1.65116944706133e-14 4.3202771697339e-15 -1 2.684286e-03 4.584274e-04 1.64722844599429e-14 3.80532303030782e-15 -1.1 2.726016e-03 4.476048e-04 1.64428344519692e-14 3.49399694601492e-15 -1.2 2.764650e-03 4.418289e-04 1.64344544497003e-14 3.31243089685512e-15 -1.3 2.807393e-03 4.328108e-04 1.64330444493185e-14 3.17421485943252e-15 -1.4 2.852313e-03 4.220591e-04 1.64328844492752e-14 3.02376181869671e-15 -1.5 2.898107e-03 4.106847e-04 1.64329044492806e-14 2.86482777566462e-15 -1.6 2.943814e-03 3.994204e-04 1.64329344492887e-14 2.70986373370743e-15 -1.7 2.988741e-03 3.887175e-04 1.64329544492941e-14 2.56607269477538e-15 -1.8 3.032420e-03 3.788244e-04 1.64329644492968e-14 2.42739165722688e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/6_dcSweep_COISUB=0.standard0000644000175000017500000002266113546075722025140 0ustar carstencarstenV(d) I(b) -2.000000e-01 2.000000e-16 -3.000000e-01 3.000000e-16 -4.000000e-01 4.000000e-16 -5.000000e-01 5.000000e-16 -6.000000e-01 6.000000e-16 -7.000000e-01 7.000000e-16 -8.000000e-01 8.000000e-16 -9.000000e-01 9.000000e-16 -1.000000e+00 1.000000e-15 -1.100000e+00 1.100000e-15 -1.200000e+00 1.200000e-15 -1.300000e+00 1.300000e-15 -1.400000e+00 1.400000e-15 -1.500000e+00 1.500000e-15 -1.600000e+00 1.600000e-15 -1.700000e+00 1.700000e-15 -1.800000e+00 1.800000e-15 -2.000000e-01 2.000000e-16 -3.000000e-01 3.000000e-16 -4.000000e-01 4.000000e-16 -5.000000e-01 5.000000e-16 -6.000000e-01 6.000000e-16 -7.000000e-01 7.000000e-16 -8.000000e-01 8.000000e-16 -9.000000e-01 9.000000e-16 -1.000000e+00 1.000000e-15 -1.100000e+00 1.100000e-15 -1.200000e+00 1.200000e-15 -1.300000e+00 1.300000e-15 -1.400000e+00 1.400000e-15 -1.500000e+00 1.500000e-15 -1.600000e+00 1.600000e-15 -1.700000e+00 1.700000e-15 -1.800000e+00 1.800000e-15 -2.000000e-01 2.000000e-16 -3.000000e-01 3.000000e-16 -4.000000e-01 4.000000e-16 -5.000000e-01 5.000000e-16 -6.000000e-01 6.000000e-16 -7.000000e-01 7.000000e-16 -8.000000e-01 8.000000e-16 -9.000000e-01 9.000000e-16 -1.000000e+00 1.000000e-15 -1.100000e+00 1.100000e-15 -1.200000e+00 1.200000e-15 -1.300000e+00 1.300000e-15 -1.400000e+00 1.400000e-15 -1.500000e+00 1.500000e-15 -1.600000e+00 1.600000e-15 -1.700000e+00 1.700000e-15 -1.800000e+00 1.800000e-15 -2.000000e-01 2.000000e-16 -3.000000e-01 3.000000e-16 -4.000000e-01 4.000000e-16 -5.000000e-01 5.000000e-16 -6.000000e-01 6.000000e-16 -7.000000e-01 7.000000e-16 -8.000000e-01 8.000000e-16 -9.000000e-01 9.000000e-16 -1.000000e+00 1.000000e-15 -1.100000e+00 1.100000e-15 -1.200000e+00 1.200000e-15 -1.300000e+00 1.300000e-15 -1.400000e+00 1.400000e-15 -1.500000e+00 1.500000e-15 -1.600000e+00 1.600000e-15 -1.700000e+00 1.700000e-15 -1.800000e+00 1.800000e-15 -2.000000e-01 2.000000e-16 -3.000000e-01 3.000000e-16 -4.000000e-01 4.000000e-16 -5.000000e-01 5.000000e-16 -6.000000e-01 6.000000e-16 -7.000000e-01 7.000000e-16 -8.000000e-01 8.000000e-16 -9.000000e-01 9.000000e-16 -1.000000e+00 1.000000e-15 -1.100000e+00 1.100000e-15 -1.200000e+00 1.200000e-15 -1.300000e+00 1.300000e-15 -1.400000e+00 1.400000e-15 -1.500000e+00 1.500000e-15 -1.600000e+00 1.600000e-15 -1.700000e+00 1.700000e-15 -1.800000e+00 1.800000e-15 -2.000000e-01 2.000000e-16 -3.000000e-01 3.000000e-16 -4.000000e-01 4.000000e-16 -5.000000e-01 5.000000e-16 -6.000000e-01 6.000000e-16 -7.000000e-01 7.000000e-16 -8.000000e-01 8.000000e-16 -9.000000e-01 9.000000e-16 -1.000000e+00 1.000000e-15 -1.100000e+00 1.100000e-15 -1.200000e+00 1.200000e-15 -1.300000e+00 1.300000e-15 -1.400000e+00 1.400000e-15 -1.500000e+00 1.500000e-15 -1.600000e+00 1.600000e-15 -1.700000e+00 1.700000e-15 -1.800000e+00 1.800000e-15 -2.000000e-01 2.000000e-16 -3.000000e-01 3.000000e-16 -4.000000e-01 4.000000e-16 -5.000000e-01 5.000000e-16 -6.000000e-01 6.000000e-16 -7.000000e-01 7.000000e-16 -8.000000e-01 8.000000e-16 -9.000000e-01 9.000000e-16 -1.000000e+00 1.000000e-15 -1.100000e+00 1.100000e-15 -1.200000e+00 1.200000e-15 -1.300000e+00 1.300000e-15 -1.400000e+00 1.400000e-15 -1.500000e+00 1.500000e-15 -1.600000e+00 1.600000e-15 -1.700000e+00 1.700000e-15 -1.800000e+00 1.800000e-15 -2.000000e-01 2.000000e-16 -3.000000e-01 3.000000e-16 -4.000000e-01 4.000000e-16 -5.000000e-01 5.000000e-16 -6.000000e-01 6.000000e-16 -7.000000e-01 7.000000e-16 -8.000000e-01 8.000000e-16 -9.000000e-01 9.000000e-16 -1.000000e+00 1.000000e-15 -1.100000e+00 1.100000e-15 -1.200000e+00 1.200000e-15 -1.300000e+00 1.300000e-15 -1.400000e+00 1.400000e-15 -1.500000e+00 1.500000e-15 -1.600000e+00 1.600000e-15 -1.700000e+00 1.700000e-15 -1.800000e+00 1.800000e-15 -2.000000e-01 2.000000e-16 -3.000000e-01 3.000000e-16 -4.000000e-01 4.000000e-16 -5.000000e-01 5.000000e-16 -6.000000e-01 6.000000e-16 -7.000000e-01 7.000000e-16 -8.000000e-01 8.000000e-16 -9.000000e-01 9.000000e-16 -1.000000e+00 1.000000e-15 -1.100000e+00 1.100000e-15 -1.200000e+00 1.200000e-15 -1.300000e+00 1.300000e-15 -1.400000e+00 1.400000e-15 -1.500000e+00 1.500000e-15 -1.600000e+00 1.600000e-15 -1.700000e+00 1.700000e-15 -1.800000e+00 1.800000e-15 -2.000000e-01 2.000000e-16 -3.000000e-01 3.000000e-16 -4.000000e-01 4.000000e-16 -5.000000e-01 5.000000e-16 -6.000000e-01 6.000000e-16 -7.000000e-01 7.000000e-16 -8.000000e-01 8.000000e-16 -9.000000e-01 9.000000e-16 -1.000000e+00 1.000000e-15 -1.100000e+00 1.100000e-15 -1.200000e+00 1.200000e-15 -1.300000e+00 1.300000e-15 -1.400000e+00 1.400000e-15 -1.500000e+00 1.500000e-15 -1.600000e+00 1.600000e-15 -1.700000e+00 1.700000e-15 -1.800000e+00 1.800000e-15 -2.000000e-01 2.000000e-16 -3.000000e-01 3.000000e-16 -4.000000e-01 4.000000e-16 -5.000000e-01 5.000000e-16 -6.000000e-01 6.000000e-16 -7.000000e-01 7.000000e-16 -8.000000e-01 8.000000e-16 -9.000000e-01 9.000000e-16 -1.000000e+00 1.000000e-15 -1.100000e+00 1.100000e-15 -1.200000e+00 1.200000e-15 -1.300000e+00 1.300000e-15 -1.400000e+00 1.400000e-15 -1.500000e+00 1.500000e-15 -1.600000e+00 1.600000e-15 -1.700000e+00 1.700000e-15 -1.800000e+00 1.800000e-15 -2.000000e-01 2.000000e-16 -3.000000e-01 3.000000e-16 -4.000000e-01 4.000000e-16 -5.000000e-01 5.000000e-16 -6.000000e-01 6.000000e-16 -7.000000e-01 7.000000e-16 -8.000000e-01 8.000000e-16 -9.000000e-01 9.000000e-16 -1.000000e+00 1.000000e-15 -1.100000e+00 1.100000e-15 -1.200000e+00 1.200000e-15 -1.300000e+00 1.300000e-15 -1.400000e+00 1.400000e-15 -1.500000e+00 1.500000e-15 -1.600000e+00 1.600000e-15 -1.700000e+00 1.700000e-15 -1.800000e+00 1.800000e-15 -2.000000e-01 2.000000e-16 -3.000000e-01 3.000000e-16 -4.000000e-01 4.000000e-16 -5.000000e-01 5.000000e-16 -6.000000e-01 6.000000e-16 -7.000000e-01 7.000000e-16 -8.000000e-01 8.000000e-16 -9.000000e-01 9.000000e-16 -1.000000e+00 1.000000e-15 -1.100000e+00 1.100000e-15 -1.200000e+00 1.200000e-15 -1.300000e+00 1.300000e-15 -1.400000e+00 1.400000e-15 -1.500000e+00 1.500000e-15 -1.600000e+00 1.600000e-15 -1.700000e+00 1.700000e-15 -1.800000e+00 1.800000e-15 -2.000000e-01 2.000000e-16 -3.000000e-01 3.000000e-16 -4.000000e-01 4.000000e-16 -5.000000e-01 5.000000e-16 -6.000000e-01 6.000000e-16 -7.000000e-01 7.000000e-16 -8.000000e-01 8.000000e-16 -9.000000e-01 9.000000e-16 -1.000000e+00 1.000000e-15 -1.100000e+00 1.100000e-15 -1.200000e+00 1.200000e-15 -1.300000e+00 1.300000e-15 -1.400000e+00 1.400000e-15 -1.500000e+00 1.500000e-15 -1.600000e+00 1.600000e-15 -1.700000e+00 1.700000e-15 -1.800000e+00 1.800000e-15 -2.000000e-01 2.000000e-16 -3.000000e-01 3.000000e-16 -4.000000e-01 4.000000e-16 -5.000000e-01 5.000000e-16 -6.000000e-01 6.000000e-16 -7.000000e-01 7.000000e-16 -8.000000e-01 8.000000e-16 -9.000000e-01 9.000000e-16 -1.000000e+00 1.000000e-15 -1.100000e+00 1.100000e-15 -1.200000e+00 1.200000e-15 -1.300000e+00 1.300000e-15 -1.400000e+00 1.400000e-15 -1.500000e+00 1.500000e-15 -1.600000e+00 1.600000e-15 -1.700000e+00 1.700000e-15 -1.800000e+00 1.800000e-15 -2.000000e-01 2.000000e-16 -3.000000e-01 3.000000e-16 -4.000000e-01 4.000000e-16 -5.000000e-01 5.000000e-16 -6.000000e-01 6.000000e-16 -7.000000e-01 7.000000e-16 -8.000000e-01 8.000000e-16 -9.000000e-01 9.000000e-16 -1.000000e+00 1.000000e-15 -1.100000e+00 1.100000e-15 -1.200000e+00 1.200000e-15 -1.300000e+00 1.300000e-15 -1.400000e+00 1.400000e-15 -1.500000e+00 1.500000e-15 -1.600000e+00 1.600000e-15 -1.700000e+00 1.700000e-15 -1.800000e+00 1.800000e-15 -2.000000e-01 2.000000e-16 -3.000000e-01 3.000000e-16 -4.000000e-01 4.000000e-16 -5.000000e-01 5.000000e-16 -6.000000e-01 6.000000e-16 -7.000000e-01 7.000000e-16 -8.000000e-01 8.000000e-16 -9.000000e-01 9.000000e-16 -1.000000e+00 1.000000e-15 -1.100000e+00 1.100000e-15 -1.200000e+00 1.200000e-15 -1.300000e+00 1.300000e-15 -1.400000e+00 1.400000e-15 -1.500000e+00 1.500000e-15 -1.600000e+00 1.600000e-15 -1.700000e+00 1.700000e-15 -1.800000e+00 1.800000e-15 -2.000000e-01 2.000000e-16 -3.000000e-01 3.000000e-16 -4.000000e-01 4.000000e-16 -5.000000e-01 5.000000e-16 -6.000000e-01 6.000000e-16 -7.000000e-01 7.000000e-16 -8.000000e-01 8.000000e-16 -9.000000e-01 9.000000e-16 -1.000000e+00 1.000000e-15 -1.100000e+00 1.100000e-15 -1.200000e+00 1.200000e-15 -1.300000e+00 1.300000e-15 -1.400000e+00 1.400000e-15 -1.500000e+00 1.500000e-15 -1.600000e+00 1.600000e-15 -1.700000e+00 1.700000e-15 -1.800000e+00 1.800000e-15 -2.000000e-01 2.000000e-16 -3.000000e-01 3.000000e-16 -4.000000e-01 4.000000e-16 -5.000000e-01 5.000000e-16 -6.000000e-01 6.000000e-16 -7.000000e-01 7.000000e-16 -8.000000e-01 8.000000e-16 -9.000000e-01 9.000000e-16 -1.000000e+00 1.000000e-15 -1.100000e+00 1.100000e-15 -1.200000e+00 1.200000e-15 -1.300000e+00 1.300000e-15 -1.400000e+00 1.400000e-15 -1.500000e+00 1.500000e-15 -1.600000e+00 1.600000e-15 -1.700000e+00 1.700000e-15 -1.800000e+00 1.800000e-15 -2.000000e-01 2.000000e-16 -3.000000e-01 3.000000e-16 -4.000000e-01 4.000000e-16 -5.000000e-01 5.000000e-16 -6.000000e-01 6.000000e-16 -7.000000e-01 7.000000e-16 -8.000000e-01 8.000000e-16 -9.000000e-01 9.000000e-16 -1.000000e+00 1.000000e-15 -1.100000e+00 1.100000e-15 -1.200000e+00 1.200000e-15 -1.300000e+00 1.300000e-15 -1.400000e+00 1.400000e-15 -1.500000e+00 1.500000e-15 -1.600000e+00 1.600000e-15 -1.700000e+00 1.700000e-15 -1.800000e+00 1.800000e-15 -2.000000e-01 2.000000e-16 -3.000000e-01 3.000000e-16 -4.000000e-01 4.000000e-16 -5.000000e-01 5.000000e-16 -6.000000e-01 6.000000e-16 -7.000000e-01 7.000000e-16 -8.000000e-01 8.000000e-16 -9.000000e-01 9.000000e-16 -1.000000e+00 1.000000e-15 -1.100000e+00 1.100000e-15 -1.200000e+00 1.200000e-15 -1.300000e+00 1.300000e-15 -1.400000e+00 1.400000e-15 -1.500000e+00 1.500000e-15 -1.600000e+00 1.600000e-15 -1.700000e+00 1.700000e-15 -1.800000e+00 1.800000e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/10_dcSweep_COGIDL=0.standard0000644000175000017500000003447413546075722025175 0ustar carstencarstenV(d) I(d) I(b) -2.000000e-01 -4.699615e-05 3.553410e-12 -3.000000e-01 -5.356446e-05 2.604381e-11 -4.000000e-01 -6.033229e-05 1.060519e-10 -5.000000e-01 -6.744961e-05 3.031405e-10 -6.000000e-01 -7.492488e-05 6.816477e-10 -7.000000e-01 -8.274355e-05 1.290438e-09 -8.000000e-01 -9.090086e-05 2.152985e-09 -9.000000e-01 -9.940156e-05 3.270759e-09 -1.000000e+00 -1.082558e-04 4.632738e-09 -1.100000e+00 -1.174767e-04 6.223881e-09 -1.200000e+00 -1.270787e-04 8.030011e-09 -1.300000e+00 -1.370779e-04 1.003970e-08 -1.400000e+00 -1.474909e-04 1.224448e-08 -1.500000e+00 -1.583356e-04 1.463841e-08 -1.600000e+00 -1.696309e-04 1.721747e-08 -1.700000e+00 -1.813967e-04 1.997900e-08 -1.800000e+00 -1.936544e-04 2.292131e-08 -2.000000e-01 -3.236954e-04 9.068226e-14 -3.000000e-01 -3.722842e-04 2.582050e-12 -4.000000e-01 -4.052187e-04 2.028808e-11 -5.000000e-01 -4.371929e-04 8.483953e-11 -6.000000e-01 -4.684502e-04 2.438000e-10 -7.000000e-01 -4.993050e-04 5.470330e-10 -8.000000e-01 -5.300668e-04 1.033158e-09 -9.000000e-01 -5.609701e-04 1.724361e-09 -1.000000e+00 -5.921851e-04 2.628901e-09 -1.100000e+00 -6.238365e-04 3.746428e-09 -1.200000e+00 -6.560177e-04 5.072606e-09 -1.300000e+00 -6.888017e-04 6.601981e-09 -1.400000e+00 -7.222475e-04 8.329402e-09 -1.500000e+00 -7.564047e-04 1.025054e-08 -1.600000e+00 -7.913168e-04 1.236199e-08 -1.700000e+00 -8.270229e-04 1.466113e-08 -1.800000e+00 -8.635594e-04 1.714602e-08 -2.000000e-01 -6.362416e-04 2.000000e-16 -3.000000e-01 -8.252108e-04 4.608147e-16 -4.000000e-01 -9.384887e-04 3.007756e-13 -5.000000e-01 -1.006766e-03 6.577786e-12 -6.000000e-01 -1.066911e-03 4.069423e-11 -7.000000e-01 -1.125791e-03 1.406359e-10 -8.000000e-01 -1.183256e-03 3.490034e-10 -9.000000e-01 -1.239417e-03 7.018357e-10 -1.000000e+00 -1.294579e-03 1.223940e-09 -1.100000e+00 -1.349080e-03 1.929691e-09 -1.200000e+00 -1.403218e-03 2.826014e-09 -1.300000e+00 -1.457240e-03 3.915316e-09 -1.400000e+00 -1.511342e-03 5.197610e-09 -1.500000e+00 -1.565681e-03 6.671811e-09 -1.600000e+00 -1.620381e-03 8.336449e-09 -1.700000e+00 -1.675542e-03 1.019003e-08 -1.800000e+00 -1.731249e-03 1.223120e-08 -2.000000e-01 -8.942919e-04 2.000000e-16 -3.000000e-01 -1.221693e-03 3.000000e-16 -4.000000e-01 -1.471297e-03 4.000000e-16 -5.000000e-01 -1.648885e-03 5.082379e-16 -6.000000e-01 -1.767189e-03 2.747811e-13 -7.000000e-01 -1.854914e-03 7.970863e-12 -8.000000e-01 -1.937134e-03 4.953345e-11 -9.000000e-01 -2.017933e-03 1.637565e-10 -1.000000e+00 -2.097231e-03 3.879594e-10 -1.100000e+00 -2.174955e-03 7.511815e-10 -1.200000e+00 -2.251233e-03 1.273343e-09 -1.300000e+00 -2.326299e-03 1.966987e-09 -1.400000e+00 -2.400414e-03 2.839496e-09 -1.500000e+00 -2.473834e-03 3.894923e-09 -1.600000e+00 -2.546784e-03 5.135295e-09 -1.700000e+00 -2.619461e-03 6.561454e-09 -1.800000e+00 -2.692033e-03 8.173579e-09 -2.000000e-01 -1.099660e-03 2.000000e-16 -3.000000e-01 -1.542998e-03 3.000000e-16 -4.000000e-01 -1.912357e-03 4.000000e-16 -5.000000e-01 -2.210948e-03 5.000000e-16 -6.000000e-01 -2.443263e-03 6.000000e-16 -7.000000e-01 -2.616248e-03 7.000015e-16 -8.000000e-01 -2.743263e-03 1.093928e-13 -9.000000e-01 -2.847346e-03 6.260229e-12 -1.000000e+00 -2.946866e-03 4.545125e-11 -1.100000e+00 -3.044793e-03 1.569013e-10 -1.200000e+00 -3.141253e-03 3.759662e-10 -1.300000e+00 -3.236151e-03 7.291703e-10 -1.400000e+00 -3.329503e-03 1.234825e-09 -1.500000e+00 -3.421424e-03 1.905019e-09 -1.600000e+00 -3.512088e-03 2.747505e-09 -1.700000e+00 -3.601689e-03 3.767150e-09 -1.800000e+00 -3.690424e-03 4.966940e-09 -2.000000e-01 -1.323288e-03 2.000000e-16 -3.000000e-01 -1.900779e-03 3.000000e-16 -4.000000e-01 -2.413864e-03 4.000000e-16 -5.000000e-01 -2.862055e-03 5.000000e-16 -6.000000e-01 -3.247311e-03 6.000000e-16 -7.000000e-01 -3.572769e-03 7.000000e-16 -8.000000e-01 -3.842246e-03 8.000000e-16 -9.000000e-01 -4.060779e-03 9.000000e-16 -1.000000e+00 -4.235768e-03 1.000000e-15 -1.100000e+00 -4.377686e-03 6.231963e-15 -1.200000e+00 -4.501075e-03 2.497943e-12 -1.300000e+00 -4.619790e-03 2.929002e-11 -1.400000e+00 -4.736666e-03 1.203504e-10 -1.500000e+00 -4.852063e-03 3.123339e-10 -1.600000e+00 -4.966007e-03 6.320425e-10 -1.700000e+00 -5.078486e-03 1.097812e-09 -1.800000e+00 -5.189528e-03 1.721951e-09 -2.000000e-01 -1.465681e-03 2.000000e-16 -3.000000e-01 -2.135731e-03 3.000000e-16 -4.000000e-01 -2.753367e-03 4.000000e-16 -5.000000e-01 -3.315155e-03 5.000000e-16 -6.000000e-01 -3.820331e-03 6.000000e-16 -7.000000e-01 -4.269931e-03 7.000000e-16 -8.000000e-01 -4.666054e-03 8.000000e-16 -9.000000e-01 -5.011370e-03 9.000000e-16 -1.000000e+00 -5.308993e-03 1.000000e-15 -1.100000e+00 -5.562716e-03 1.100000e-15 -1.200000e+00 -5.777420e-03 1.200000e-15 -1.300000e+00 -5.959268e-03 1.300000e-15 -1.400000e+00 -6.115539e-03 1.403994e-15 -1.500000e+00 -6.254781e-03 5.196828e-13 -1.600000e+00 -6.387042e-03 1.440883e-11 -1.700000e+00 -6.517185e-03 7.919809e-11 -1.800000e+00 -6.645738e-03 2.348776e-10 -2.000000e-01 -8.053778e-05 3.553410e-12 -3.000000e-01 -9.162411e-05 2.604381e-11 -4.000000e-01 -1.024998e-04 1.060519e-10 -5.000000e-01 -1.136551e-04 3.031405e-10 -6.000000e-01 -1.251796e-04 6.816477e-10 -7.000000e-01 -1.371008e-04 1.290438e-09 -8.000000e-01 -1.494378e-04 2.152985e-09 -9.000000e-01 -1.622112e-04 3.270759e-09 -1.000000e+00 -1.754428e-04 4.632738e-09 -1.100000e+00 -1.891547e-04 6.223881e-09 -1.200000e+00 -2.033687e-04 8.030011e-09 -1.300000e+00 -2.181071e-04 1.003970e-08 -1.400000e+00 -2.333922e-04 1.224448e-08 -1.500000e+00 -2.492470e-04 1.463841e-08 -1.600000e+00 -2.656953e-04 1.721747e-08 -1.700000e+00 -2.827618e-04 1.997900e-08 -1.800000e+00 -3.004721e-04 2.292131e-08 -2.000000e-01 -2.967540e-04 9.068226e-14 -3.000000e-01 -3.587330e-04 2.582050e-12 -4.000000e-01 -3.937602e-04 2.028808e-11 -5.000000e-01 -4.249226e-04 8.483953e-11 -6.000000e-01 -4.554247e-04 2.438000e-10 -7.000000e-01 -4.853720e-04 5.470330e-10 -8.000000e-01 -5.149872e-04 1.033158e-09 -9.000000e-01 -5.445114e-04 1.724361e-09 -1.000000e+00 -5.741434e-04 2.628901e-09 -1.100000e+00 -6.040352e-04 3.746428e-09 -1.200000e+00 -6.343020e-04 5.072606e-09 -1.300000e+00 -6.650320e-04 6.601981e-09 -1.400000e+00 -6.962950e-04 8.329402e-09 -1.500000e+00 -7.281476e-04 1.025054e-08 -1.600000e+00 -7.606378e-04 1.236199e-08 -1.700000e+00 -7.938074e-04 1.466113e-08 -1.800000e+00 -8.276937e-04 1.714602e-08 -2.000000e-01 -5.192224e-04 2.000000e-16 -3.000000e-01 -6.879597e-04 4.608147e-16 -4.000000e-01 -8.011363e-04 3.007756e-13 -5.000000e-01 -8.720396e-04 6.577786e-12 -6.000000e-01 -9.256745e-04 4.069423e-11 -7.000000e-01 -9.769034e-04 1.406359e-10 -8.000000e-01 -1.027362e-03 3.490034e-10 -9.000000e-01 -1.076897e-03 7.018357e-10 -1.000000e+00 -1.125565e-03 1.223940e-09 -1.100000e+00 -1.173564e-03 1.929691e-09 -1.200000e+00 -1.221122e-03 2.826014e-09 -1.300000e+00 -1.268450e-03 3.915316e-09 -1.400000e+00 -1.315731e-03 5.197610e-09 -1.500000e+00 -1.363116e-03 6.671811e-09 -1.600000e+00 -1.410729e-03 8.336449e-09 -1.700000e+00 -1.458671e-03 1.019003e-08 -1.800000e+00 -1.507026e-03 1.223120e-08 -2.000000e-01 -7.107833e-04 2.000000e-16 -3.000000e-01 -9.814930e-04 3.000000e-16 -4.000000e-01 -1.196037e-03 4.000000e-16 -5.000000e-01 -1.357425e-03 5.082379e-16 -6.000000e-01 -1.472204e-03 2.747811e-13 -7.000000e-01 -1.554887e-03 7.970863e-12 -8.000000e-01 -1.625302e-03 4.953345e-11 -9.000000e-01 -1.693712e-03 1.637565e-10 -1.000000e+00 -1.761385e-03 3.879594e-10 -1.100000e+00 -1.828127e-03 7.511815e-10 -1.200000e+00 -1.893854e-03 1.273343e-09 -1.300000e+00 -1.958631e-03 1.966987e-09 -1.400000e+00 -2.022606e-03 2.839496e-09 -1.500000e+00 -2.085952e-03 3.894923e-09 -1.600000e+00 -2.148845e-03 5.135295e-09 -1.700000e+00 -2.211447e-03 6.561454e-09 -1.800000e+00 -2.273902e-03 8.173579e-09 -2.000000e-01 -8.703534e-04 2.000000e-16 -3.000000e-01 -1.229542e-03 3.000000e-16 -4.000000e-01 -1.535299e-03 4.000000e-16 -5.000000e-01 -1.788717e-03 5.000000e-16 -6.000000e-01 -1.992234e-03 6.000000e-16 -7.000000e-01 -2.150032e-03 7.000015e-16 -8.000000e-01 -2.269922e-03 1.093928e-13 -9.000000e-01 -2.364654e-03 6.260229e-12 -1.000000e+00 -2.449433e-03 4.545125e-11 -1.100000e+00 -2.532170e-03 1.569013e-10 -1.200000e+00 -2.614133e-03 3.759662e-10 -1.300000e+00 -2.695229e-03 7.291703e-10 -1.400000e+00 -2.775332e-03 1.234825e-09 -1.500000e+00 -2.854419e-03 1.905019e-09 -1.600000e+00 -2.932554e-03 2.747505e-09 -1.700000e+00 -3.009845e-03 3.767150e-09 -1.800000e+00 -3.086420e-03 4.966940e-09 -2.000000e-01 -1.055746e-03 2.000000e-16 -3.000000e-01 -1.522006e-03 3.000000e-16 -4.000000e-01 -1.941527e-03 4.000000e-16 -5.000000e-01 -2.312983e-03 5.000000e-16 -6.000000e-01 -2.636801e-03 6.000000e-16 -7.000000e-01 -2.914587e-03 7.000000e-16 -8.000000e-01 -3.148785e-03 8.000000e-16 -9.000000e-01 -3.342837e-03 9.000000e-16 -1.000000e+00 -3.501773e-03 1.000000e-15 -1.100000e+00 -3.632590e-03 6.231963e-15 -1.200000e+00 -3.744148e-03 2.497943e-12 -1.300000e+00 -3.846545e-03 2.929002e-11 -1.400000e+00 -3.946382e-03 1.203504e-10 -1.500000e+00 -4.045211e-03 3.123339e-10 -1.600000e+00 -4.143204e-03 6.320425e-10 -1.700000e+00 -4.240298e-03 1.097812e-09 -1.800000e+00 -4.336437e-03 1.721951e-09 -2.000000e-01 -1.186306e-03 2.000000e-16 -3.000000e-01 -1.731660e-03 3.000000e-16 -4.000000e-01 -2.238332e-03 4.000000e-16 -5.000000e-01 -2.703337e-03 5.000000e-16 -6.000000e-01 -3.125332e-03 6.000000e-16 -7.000000e-01 -3.504342e-03 7.000000e-16 -8.000000e-01 -3.841383e-03 8.000000e-16 -9.000000e-01 -4.138137e-03 9.000000e-16 -1.000000e+00 -4.396808e-03 1.000000e-15 -1.100000e+00 -4.620185e-03 1.100000e-15 -1.200000e+00 -4.811857e-03 1.200000e-15 -1.300000e+00 -4.976335e-03 1.300000e-15 -1.400000e+00 -5.118917e-03 1.403994e-15 -1.500000e+00 -5.245465e-03 5.196828e-13 -1.600000e+00 -5.362370e-03 1.440883e-11 -1.700000e+00 -5.475385e-03 7.919809e-11 -1.800000e+00 -5.586920e-03 2.348776e-10 -2.000000e-01 -1.215310e-04 3.553410e-12 -3.000000e-01 -1.449795e-04 2.604381e-11 -4.000000e-01 -1.644398e-04 1.060519e-10 -5.000000e-01 -1.838947e-04 3.031405e-10 -6.000000e-01 -2.037637e-04 6.816477e-10 -7.000000e-01 -2.241352e-04 1.290438e-09 -8.000000e-01 -2.450750e-04 2.152985e-09 -9.000000e-01 -2.666414e-04 3.270759e-09 -1.000000e+00 -2.888850e-04 4.632738e-09 -1.100000e+00 -3.118496e-04 6.223881e-09 -1.200000e+00 -3.355744e-04 8.030011e-09 -1.300000e+00 -3.600953e-04 1.003970e-08 -1.400000e+00 -3.854465e-04 1.224448e-08 -1.500000e+00 -4.116615e-04 1.463841e-08 -1.600000e+00 -4.387739e-04 1.721747e-08 -1.700000e+00 -4.668176e-04 1.997900e-08 -1.800000e+00 -4.958274e-04 2.292131e-08 -2.000000e-01 -2.683866e-04 9.068226e-14 -3.000000e-01 -3.434867e-04 2.582050e-12 -4.000000e-01 -3.905718e-04 2.028808e-11 -5.000000e-01 -4.254122e-04 8.483953e-11 -6.000000e-01 -4.579231e-04 2.438000e-10 -7.000000e-01 -4.899894e-04 5.470330e-10 -8.000000e-01 -5.217557e-04 1.033158e-09 -9.000000e-01 -5.533478e-04 1.724361e-09 -1.000000e+00 -5.849313e-04 2.628901e-09 -1.100000e+00 -6.166644e-04 3.746428e-09 -1.200000e+00 -6.486803e-04 5.072606e-09 -1.300000e+00 -6.810866e-04 6.601981e-09 -1.400000e+00 -7.139696e-04 8.329402e-09 -1.500000e+00 -7.473997e-04 1.025054e-08 -1.600000e+00 -7.814349e-04 1.236199e-08 -1.700000e+00 -8.161248e-04 1.466113e-08 -1.800000e+00 -8.515127e-04 1.714602e-08 -2.000000e-01 -4.174948e-04 2.000000e-16 -3.000000e-01 -5.651320e-04 4.608147e-16 -4.000000e-01 -6.748377e-04 3.007756e-13 -5.000000e-01 -7.519469e-04 6.577786e-12 -6.000000e-01 -8.074889e-04 4.069423e-11 -7.000000e-01 -8.544461e-04 1.406359e-10 -8.000000e-01 -8.996979e-04 3.490034e-10 -9.000000e-01 -9.444793e-04 7.018357e-10 -1.000000e+00 -9.887749e-04 1.223940e-09 -1.100000e+00 -1.032585e-03 1.929691e-09 -1.200000e+00 -1.076004e-03 2.826014e-09 -1.300000e+00 -1.119166e-03 3.915316e-09 -1.400000e+00 -1.162212e-03 5.197610e-09 -1.500000e+00 -1.205271e-03 6.671811e-09 -1.600000e+00 -1.248459e-03 8.336449e-09 -1.700000e+00 -1.291873e-03 1.019003e-08 -1.800000e+00 -1.335599e-03 1.223120e-08 -2.000000e-01 -5.523075e-04 2.000000e-16 -3.000000e-01 -7.705283e-04 3.000000e-16 -4.000000e-01 -9.501590e-04 4.000000e-16 -5.000000e-01 -1.092854e-03 5.082379e-16 -6.000000e-01 -1.201930e-03 2.747811e-13 -7.000000e-01 -1.284056e-03 7.970863e-12 -8.000000e-01 -1.349422e-03 4.953345e-11 -9.000000e-01 -1.408062e-03 1.637565e-10 -1.000000e+00 -1.465169e-03 3.879594e-10 -1.100000e+00 -1.521832e-03 7.511815e-10 -1.200000e+00 -1.578022e-03 1.273343e-09 -1.300000e+00 -1.633660e-03 1.966987e-09 -1.400000e+00 -1.688750e-03 2.839496e-09 -1.500000e+00 -1.743361e-03 3.894923e-09 -1.600000e+00 -1.797592e-03 5.135295e-09 -1.700000e+00 -1.851551e-03 6.561454e-09 -1.800000e+00 -1.905348e-03 8.173579e-09 -2.000000e-01 -6.699586e-04 2.000000e-16 -3.000000e-01 -9.519966e-04 3.000000e-16 -4.000000e-01 -1.196965e-03 4.000000e-16 -5.000000e-01 -1.405155e-03 5.000000e-16 -6.000000e-01 -1.577904e-03 6.000000e-16 -7.000000e-01 -1.717682e-03 7.000015e-16 -8.000000e-01 -1.828773e-03 1.093928e-13 -9.000000e-01 -1.917844e-03 6.260229e-12 -1.000000e+00 -1.993249e-03 4.545125e-11 -1.100000e+00 -2.062742e-03 1.569013e-10 -1.200000e+00 -2.130579e-03 3.759662e-10 -1.300000e+00 -2.197916e-03 7.291703e-10 -1.400000e+00 -2.264817e-03 1.234825e-09 -1.500000e+00 -2.331192e-03 1.905019e-09 -1.600000e+00 -2.396995e-03 2.747505e-09 -1.700000e+00 -2.462235e-03 3.767150e-09 -1.800000e+00 -2.526961e-03 4.966940e-09 -2.000000e-01 -8.151175e-04 2.000000e-16 -3.000000e-01 -1.178259e-03 3.000000e-16 -4.000000e-01 -1.508450e-03 4.000000e-16 -5.000000e-01 -1.804478e-03 5.000000e-16 -6.000000e-01 -2.066202e-03 6.000000e-16 -7.000000e-01 -2.294404e-03 7.000000e-16 -8.000000e-01 -2.490612e-03 8.000000e-16 -9.000000e-01 -2.657086e-03 9.000000e-16 -1.000000e+00 -2.797037e-03 1.000000e-15 -1.100000e+00 -2.914811e-03 6.231963e-15 -1.200000e+00 -3.015698e-03 2.497943e-12 -1.300000e+00 -3.105458e-03 2.929002e-11 -1.400000e+00 -3.189490e-03 1.203504e-10 -1.500000e+00 -3.271331e-03 3.123339e-10 -1.600000e+00 -3.352375e-03 6.320425e-10 -1.700000e+00 -3.432951e-03 1.097812e-09 -1.800000e+00 -3.513056e-03 1.721951e-09 -2.000000e-01 -9.263926e-04 2.000000e-16 -3.000000e-01 -1.353590e-03 3.000000e-16 -4.000000e-01 -1.752829e-03 4.000000e-16 -5.000000e-01 -2.121990e-03 5.000000e-16 -6.000000e-01 -2.459839e-03 6.000000e-16 -7.000000e-01 -2.766039e-03 7.000000e-16 -8.000000e-01 -3.041016e-03 8.000000e-16 -9.000000e-01 -3.285795e-03 9.000000e-16 -1.000000e+00 -3.501875e-03 1.000000e-15 -1.100000e+00 -3.691217e-03 1.100000e-15 -1.200000e+00 -3.856317e-03 1.200000e-15 -1.300000e+00 -4.000255e-03 1.300000e-15 -1.400000e+00 -4.126613e-03 1.403994e-15 -1.500000e+00 -4.239259e-03 5.196828e-13 -1.600000e+00 -4.342117e-03 1.440883e-11 -1.700000e+00 -4.438929e-03 7.919809e-11 -1.800000e+00 -4.532698e-03 2.348776e-10 tmpk8ny_4pz/tests/hisim/pmos/reference/50_acFreq_COGIDL=0.standard0000644000175000017500000002530213546075722024776 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1258.925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584.893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995.262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511.886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162.278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981.072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011.872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309.573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943.282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 10000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589.25 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848.93 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952.62 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118.86 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622.78 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810.72 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118.72 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095.73 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432.82 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 125892.5 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 158489.3 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 199526.2 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 251188.6 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 316227.8 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 398107.2 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 501187.2 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 630957.3 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 794328.2 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 1000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 1258925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 10000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589250 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848930 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952620 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118860 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622780 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810720 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118720 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095730 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432820 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258.925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584.893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995.262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511.886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162.278 2.08988054797393e-14 1.68486984597449e-14 3.40873274812869e-15 3981.072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011.872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309.573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943.282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589.25 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848.93 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952.62 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118.86 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622.78 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810.72 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118.72 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095.73 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432.82 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 125892.5 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 158489.3 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 199526.2 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 251188.6 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 316227.8 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 398107.2 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 501187.2 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 630957.3 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 794328.2 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 1000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162278 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 3981072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589250 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848930 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952620 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118860 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622780 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810720 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118720 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095730 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432820 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258.925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584.893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995.262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511.886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162.278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981.072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011.872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309.573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943.282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589.25 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848.93 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952.62 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118.86 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622.78 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810.72 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118.72 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095.73 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432.82 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 125892.5 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 158489.3 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 199526.2 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 251188.6 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 316227.8 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 398107.2 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 501187.2 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 630957.3 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 794328.2 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 1000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589250 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848930 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952620 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118860 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622780 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810720 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118720 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095730 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432820 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/4_dcSweep_NSUBPFAC.standard0000644000175000017500000002342613546075722025176 0ustar carstencarstenV(d) I(d) -2.000000e-01 -2.628429e-05 -3.000000e-01 -3.006503e-05 -4.000000e-01 -3.405657e-05 -5.000000e-01 -3.831147e-05 -6.000000e-01 -4.280545e-05 -7.000000e-01 -4.751427e-05 -8.000000e-01 -5.242659e-05 -9.000000e-01 -5.754003e-05 -1.000000e+00 -6.285691e-05 -1.100000e+00 -6.838202e-05 -1.200000e+00 -7.412140e-05 -1.300000e+00 -8.008192e-05 -1.400000e+00 -8.627109e-05 -1.500000e+00 -9.269690e-05 -1.600000e+00 -9.936791e-05 -1.700000e+00 -1.062932e-04 -1.800000e+00 -1.134823e-04 -2.000000e-01 -2.691313e-04 -3.000000e-01 -3.030362e-04 -4.000000e-01 -3.291466e-04 -5.000000e-01 -3.545482e-04 -6.000000e-01 -3.794755e-04 -7.000000e-01 -4.042176e-04 -8.000000e-01 -4.289970e-04 -9.000000e-01 -4.539699e-04 -1.000000e+00 -4.792470e-04 -1.100000e+00 -5.049087e-04 -1.200000e+00 -5.310160e-04 -1.300000e+00 -5.576167e-04 -1.400000e+00 -5.847497e-04 -1.500000e+00 -6.124482e-04 -1.600000e+00 -6.407416e-04 -1.700000e+00 -6.696562e-04 -1.800000e+00 -6.992168e-04 -2.000000e-01 -5.836425e-04 -3.000000e-01 -7.461084e-04 -4.000000e-01 -8.363986e-04 -5.000000e-01 -8.927594e-04 -6.000000e-01 -9.450489e-04 -7.000000e-01 -9.960027e-04 -8.000000e-01 -1.045571e-03 -9.000000e-01 -1.094000e-03 -1.000000e+00 -1.141624e-03 -1.100000e+00 -1.188755e-03 -1.200000e+00 -1.235649e-03 -1.300000e+00 -1.282508e-03 -1.400000e+00 -1.329488e-03 -1.500000e+00 -1.376713e-03 -1.600000e+00 -1.424277e-03 -1.700000e+00 -1.472260e-03 -1.800000e+00 -1.520725e-03 -2.000000e-01 -8.466291e-04 -3.000000e-01 -1.149327e-03 -4.000000e-01 -1.374214e-03 -5.000000e-01 -1.527816e-03 -6.000000e-01 -1.626954e-03 -7.000000e-01 -1.704338e-03 -8.000000e-01 -1.778532e-03 -9.000000e-01 -1.851229e-03 -1.000000e+00 -1.922313e-03 -1.100000e+00 -1.991844e-03 -1.200000e+00 -2.060029e-03 -1.300000e+00 -2.127133e-03 -1.400000e+00 -2.193422e-03 -1.500000e+00 -2.259132e-03 -1.600000e+00 -2.324469e-03 -1.700000e+00 -2.389605e-03 -1.800000e+00 -2.454685e-03 -2.000000e-01 -1.056755e-03 -3.000000e-01 -1.477474e-03 -4.000000e-01 -1.824092e-03 -5.000000e-01 -2.099913e-03 -6.000000e-01 -2.309589e-03 -7.000000e-01 -2.461366e-03 -8.000000e-01 -2.571892e-03 -9.000000e-01 -2.666528e-03 -1.000000e+00 -2.758118e-03 -1.100000e+00 -2.848128e-03 -1.200000e+00 -2.936542e-03 -1.300000e+00 -3.023335e-03 -1.400000e+00 -3.108594e-03 -1.500000e+00 -3.192484e-03 -1.600000e+00 -3.275204e-03 -1.700000e+00 -3.356956e-03 -1.800000e+00 -3.437935e-03 -2.000000e-01 -1.286702e-03 -3.000000e-01 -1.844506e-03 -4.000000e-01 -2.337523e-03 -5.000000e-01 -2.765523e-03 -6.000000e-01 -3.130572e-03 -7.000000e-01 -3.435808e-03 -8.000000e-01 -3.685151e-03 -9.000000e-01 -3.884173e-03 -1.000000e+00 -4.041376e-03 -1.100000e+00 -4.168953e-03 -1.200000e+00 -4.283353e-03 -1.300000e+00 -4.394527e-03 -1.400000e+00 -4.503926e-03 -1.500000e+00 -4.611780e-03 -1.600000e+00 -4.718101e-03 -1.700000e+00 -4.822908e-03 -1.800000e+00 -4.926268e-03 -2.000000e-01 -1.434442e-03 -3.000000e-01 -2.087432e-03 -4.000000e-01 -2.687432e-03 -5.000000e-01 -3.231252e-03 -6.000000e-01 -3.718308e-03 -7.000000e-01 -4.149746e-03 -8.000000e-01 -4.527703e-03 -9.000000e-01 -4.854862e-03 -1.000000e+00 -5.134418e-03 -1.100000e+00 -5.370434e-03 -1.200000e+00 -5.568282e-03 -1.300000e+00 -5.734744e-03 -1.400000e+00 -5.877848e-03 -1.500000e+00 -6.007413e-03 -1.600000e+00 -6.132566e-03 -1.700000e+00 -6.255682e-03 -1.800000e+00 -6.377230e-03 -2.000000e-01 -5.517665e-05 -3.000000e-01 -6.262590e-05 -4.000000e-01 -7.012650e-05 -5.000000e-01 -7.792638e-05 -6.000000e-01 -8.604320e-05 -7.000000e-01 -9.446597e-05 -8.000000e-01 -1.031906e-04 -9.000000e-01 -1.122210e-04 -1.000000e+00 -1.215653e-04 -1.100000e+00 -1.312335e-04 -1.200000e+00 -1.412368e-04 -1.300000e+00 -1.515866e-04 -1.400000e+00 -1.622950e-04 -1.500000e+00 -1.733743e-04 -1.600000e+00 -1.848375e-04 -1.700000e+00 -1.966981e-04 -1.800000e+00 -2.089700e-04 -2.000000e-01 -2.554500e-04 -3.000000e-01 -3.013406e-04 -4.000000e-01 -3.285774e-04 -5.000000e-01 -3.538735e-04 -6.000000e-01 -3.785686e-04 -7.000000e-01 -4.028410e-04 -8.000000e-01 -4.269160e-04 -9.000000e-01 -4.509868e-04 -1.000000e+00 -4.751992e-04 -1.100000e+00 -4.996602e-04 -1.200000e+00 -5.244491e-04 -1.300000e+00 -5.496261e-04 -1.400000e+00 -5.752388e-04 -1.500000e+00 -6.013259e-04 -1.600000e+00 -6.279199e-04 -1.700000e+00 -6.550496e-04 -1.800000e+00 -6.827407e-04 -2.000000e-01 -4.794537e-04 -3.000000e-01 -6.277488e-04 -4.000000e-01 -7.216836e-04 -5.000000e-01 -7.788900e-04 -6.000000e-01 -8.249362e-04 -7.000000e-01 -8.695725e-04 -8.000000e-01 -9.132860e-04 -9.000000e-01 -9.560496e-04 -1.000000e+00 -9.980243e-04 -1.100000e+00 -1.039436e-03 -1.200000e+00 -1.080503e-03 -1.300000e+00 -1.121414e-03 -1.400000e+00 -1.162321e-03 -1.500000e+00 -1.203347e-03 -1.600000e+00 -1.244592e-03 -1.700000e+00 -1.286135e-03 -1.800000e+00 -1.328043e-03 -2.000000e-01 -6.742034e-04 -3.000000e-01 -9.255767e-04 -4.000000e-01 -1.120584e-03 -5.000000e-01 -1.262674e-03 -6.000000e-01 -1.360267e-03 -7.000000e-01 -1.431039e-03 -8.000000e-01 -1.493992e-03 -9.000000e-01 -1.555652e-03 -1.000000e+00 -1.616389e-03 -1.100000e+00 -1.676065e-03 -1.200000e+00 -1.734701e-03 -1.300000e+00 -1.792425e-03 -1.400000e+00 -1.849415e-03 -1.500000e+00 -1.905849e-03 -1.600000e+00 -1.961897e-03 -1.700000e+00 -2.017707e-03 -1.800000e+00 -2.073407e-03 -2.000000e-01 -8.369558e-04 -3.000000e-01 -1.178233e-03 -4.000000e-01 -1.465728e-03 -5.000000e-01 -1.700714e-03 -6.000000e-01 -1.885805e-03 -7.000000e-01 -2.025899e-03 -8.000000e-01 -2.130473e-03 -9.000000e-01 -2.214348e-03 -1.000000e+00 -2.291765e-03 -1.100000e+00 -2.367784e-03 -1.200000e+00 -2.442901e-03 -1.300000e+00 -2.516994e-03 -1.400000e+00 -2.590008e-03 -1.500000e+00 -2.661983e-03 -1.600000e+00 -2.733022e-03 -1.700000e+00 -2.803255e-03 -1.800000e+00 -2.872822e-03 -2.000000e-01 -1.026682e-03 -3.000000e-01 -1.477128e-03 -4.000000e-01 -1.880317e-03 -5.000000e-01 -2.235142e-03 -6.000000e-01 -2.542173e-03 -7.000000e-01 -2.803095e-03 -8.000000e-01 -3.020463e-03 -9.000000e-01 -3.198066e-03 -1.000000e+00 -3.341634e-03 -1.100000e+00 -3.459105e-03 -1.200000e+00 -3.560452e-03 -1.300000e+00 -3.655550e-03 -1.400000e+00 -3.748819e-03 -1.500000e+00 -3.841096e-03 -1.600000e+00 -3.932420e-03 -1.700000e+00 -4.022737e-03 -1.800000e+00 -4.112026e-03 -2.000000e-01 -1.161007e-03 -3.000000e-01 -1.692459e-03 -4.000000e-01 -2.184621e-03 -5.000000e-01 -2.634683e-03 -6.000000e-01 -3.041461e-03 -7.000000e-01 -3.405101e-03 -8.000000e-01 -3.726696e-03 -9.000000e-01 -4.007981e-03 -1.000000e+00 -4.251243e-03 -1.100000e+00 -4.459465e-03 -1.200000e+00 -4.636576e-03 -1.300000e+00 -4.787520e-03 -1.400000e+00 -4.918054e-03 -1.500000e+00 -5.034570e-03 -1.600000e+00 -5.143824e-03 -1.700000e+00 -5.250392e-03 -1.800000e+00 -5.355673e-03 -2.000000e-01 -9.510700e-05 -3.000000e-01 -1.117296e-04 -4.000000e-01 -1.262773e-04 -5.000000e-01 -1.410037e-04 -6.000000e-01 -1.561316e-04 -7.000000e-01 -1.716957e-04 -8.000000e-01 -1.877195e-04 -9.000000e-01 -2.042277e-04 -1.000000e+00 -2.212445e-04 -1.100000e+00 -2.387928e-04 -1.200000e+00 -2.568939e-04 -1.300000e+00 -2.755684e-04 -1.400000e+00 -2.948361e-04 -1.500000e+00 -3.147167e-04 -1.600000e+00 -3.352301e-04 -1.700000e+00 -3.563964e-04 -1.800000e+00 -3.782366e-04 -2.000000e-01 -2.376343e-04 -3.000000e-01 -2.982592e-04 -4.000000e-01 -3.346393e-04 -5.000000e-01 -3.627644e-04 -6.000000e-01 -3.895187e-04 -7.000000e-01 -4.158232e-04 -8.000000e-01 -4.418286e-04 -9.000000e-01 -4.676928e-04 -1.000000e+00 -4.935712e-04 -1.100000e+00 -5.195943e-04 -1.200000e+00 -5.458648e-04 -1.300000e+00 -5.724624e-04 -1.400000e+00 -5.994495e-04 -1.500000e+00 -6.268759e-04 -1.600000e+00 -6.547828e-04 -1.700000e+00 -6.832047e-04 -1.800000e+00 -7.121720e-04 -2.000000e-01 -3.880144e-04 -3.000000e-01 -5.202136e-04 -4.000000e-01 -6.147190e-04 -5.000000e-01 -6.784862e-04 -6.000000e-01 -7.244956e-04 -7.000000e-01 -7.649123e-04 -8.000000e-01 -8.042370e-04 -9.000000e-01 -8.429768e-04 -1.000000e+00 -8.811364e-04 -1.100000e+00 -9.187915e-04 -1.200000e+00 -9.560738e-04 -1.300000e+00 -9.931263e-04 -1.400000e+00 -1.030082e-03 -1.500000e+00 -1.067057e-03 -1.600000e+00 -1.104148e-03 -1.700000e+00 -1.141436e-03 -1.800000e+00 -1.178991e-03 -2.000000e-01 -5.248863e-04 -3.000000e-01 -7.284183e-04 -4.000000e-01 -8.930698e-04 -5.000000e-01 -1.020779e-03 -6.000000e-01 -1.115621e-03 -7.000000e-01 -1.185733e-03 -8.000000e-01 -1.242348e-03 -9.000000e-01 -1.294552e-03 -1.000000e+00 -1.345760e-03 -1.100000e+00 -1.396411e-03 -1.200000e+00 -1.446446e-03 -1.300000e+00 -1.495848e-03 -1.400000e+00 -1.544677e-03 -1.500000e+00 -1.593029e-03 -1.600000e+00 -1.641016e-03 -1.700000e+00 -1.688751e-03 -1.800000e+00 -1.736337e-03 -2.000000e-01 -6.446034e-04 -3.000000e-01 -9.129122e-04 -4.000000e-01 -1.143735e-03 -5.000000e-01 -1.337547e-03 -6.000000e-01 -1.495855e-03 -7.000000e-01 -1.621484e-03 -8.000000e-01 -1.719510e-03 -9.000000e-01 -1.797608e-03 -1.000000e+00 -1.864708e-03 -1.100000e+00 -1.927799e-03 -1.200000e+00 -1.989802e-03 -1.300000e+00 -2.051259e-03 -1.400000e+00 -2.112136e-03 -1.500000e+00 -2.172376e-03 -1.600000e+00 -2.231976e-03 -1.700000e+00 -2.290983e-03 -1.800000e+00 -2.349469e-03 -2.000000e-01 -7.926195e-04 -3.000000e-01 -1.143462e-03 -4.000000e-01 -1.460842e-03 -5.000000e-01 -1.743707e-03 -6.000000e-01 -1.992053e-03 -7.000000e-01 -2.206770e-03 -8.000000e-01 -2.389490e-03 -9.000000e-01 -2.542683e-03 -1.000000e+00 -2.669953e-03 -1.100000e+00 -2.776160e-03 -1.200000e+00 -2.867095e-03 -1.300000e+00 -2.948831e-03 -1.400000e+00 -3.026404e-03 -1.500000e+00 -3.102463e-03 -1.600000e+00 -3.177846e-03 -1.700000e+00 -3.252681e-03 -1.800000e+00 -3.326934e-03 -2.000000e-01 -9.064332e-04 -3.000000e-01 -1.322650e-03 -4.000000e-01 -1.710365e-03 -5.000000e-01 -2.067570e-03 -6.000000e-01 -2.393153e-03 -7.000000e-01 -2.686885e-03 -8.000000e-01 -2.949283e-03 -9.000000e-01 -3.181440e-03 -1.000000e+00 -3.384935e-03 -1.100000e+00 -3.561860e-03 -1.200000e+00 -3.714923e-03 -1.300000e+00 -3.847476e-03 -1.400000e+00 -3.963376e-03 -1.500000e+00 -4.066729e-03 -1.600000e+00 -4.161635e-03 -1.700000e+00 -4.251789e-03 -1.800000e+00 -4.339709e-03 tmpk8ny_4pz/tests/hisim/pmos/reference/68_acFreq_WPE.standard0000644000175000017500000002525313546075722024331 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.11181420749091e-14 1.69794769347475e-14 3.49557571935738e-15 1258.925 2.11181482556468e-14 1.69794813076605e-14 3.49557693315995e-15 1584.893 2.11181436559616e-14 1.69794842971798e-14 3.49557675654025e-15 1995.262 2.11181485702583e-14 1.69794828755604e-14 3.49557670465635e-15 2511.886 2.11181456338056e-14 1.69794794509797e-14 3.49557689925465e-15 3162.278 2.11181401625201e-14 1.69794789033442e-14 3.49557579428247e-15 3981.072 2.11181397233124e-14 1.69794784325439e-14 3.49557581085882e-15 5011.872 2.11181425136951e-14 1.69794811679452e-14 3.49557575456798e-15 6309.573 2.111814223353e-14 1.69794805312469e-14 3.49557672455949e-15 7943.282 2.11181474055108e-14 1.69794803644538e-14 3.49557606569293e-15 10000 2.11181420749091e-14 1.69794769347475e-14 3.49557571935738e-15 12589.25 2.11181482556468e-14 1.69794813076605e-14 3.49557693315995e-15 15848.93 2.11181436559616e-14 1.69794842971798e-14 3.49557675654025e-15 19952.62 2.11181485702583e-14 1.69794828755604e-14 3.49557670465635e-15 25118.86 2.11181456338056e-14 1.69794794509797e-14 3.49557689925465e-15 31622.78 2.11181401625201e-14 1.69794789033442e-14 3.49557579428247e-15 39810.72 2.11181397233124e-14 1.69794784325439e-14 3.49557581085882e-15 50118.72 2.11181425136951e-14 1.69794811679452e-14 3.49557575456798e-15 63095.73 2.111814223353e-14 1.69794805312469e-14 3.49557672455949e-15 79432.82 2.11181474055108e-14 1.69794803644538e-14 3.49557606569293e-15 100000 2.11181420749091e-14 1.69794769347475e-14 3.49557571935738e-15 125892.5 2.11181482556468e-14 1.69794813076605e-14 3.49557693315995e-15 158489.3 2.11181436559616e-14 1.69794842971798e-14 3.49557675654025e-15 199526.2 2.11181485702583e-14 1.69794828755603e-14 3.49557670465635e-15 251188.6 2.11181456338056e-14 1.69794794509797e-14 3.49557689925465e-15 316227.8 2.11181401625201e-14 1.69794789033442e-14 3.49557579428247e-15 398107.2 2.11181397233124e-14 1.69794784325439e-14 3.49557581085882e-15 501187.2 2.11181425136951e-14 1.69794811679452e-14 3.49557575456798e-15 630957.3 2.111814223353e-14 1.69794805312469e-14 3.49557672455949e-15 794328.2 2.11181474055108e-14 1.69794803644538e-14 3.49557606569293e-15 1000000 2.11181420749091e-14 1.69794769347475e-14 3.49557571935738e-15 1258925 2.11181482556468e-14 1.69794813076605e-14 3.49557693315995e-15 1584893 2.11181436559616e-14 1.69794842971798e-14 3.49557675654025e-15 1995262 2.11181485702583e-14 1.69794828755604e-14 3.49557670465635e-15 2511886 2.11181456338056e-14 1.69794794509797e-14 3.49557689925465e-15 3162278 2.11181401625201e-14 1.69794789033442e-14 3.49557579428247e-15 3981072 2.11181397233124e-14 1.69794784325439e-14 3.49557581085882e-15 5011872 2.11181425136951e-14 1.69794811679452e-14 3.49557575456798e-15 6309573 2.111814223353e-14 1.69794805312469e-14 3.49557672455949e-15 7943282 2.11181474055108e-14 1.69794803644538e-14 3.49557606569293e-15 10000000 2.11181420749091e-14 1.69794769347475e-14 3.49557571935738e-15 12589250 2.11181482556468e-14 1.69794813076605e-14 3.49557693315995e-15 15848930 2.11181436559616e-14 1.69794842971798e-14 3.49557675654025e-15 19952620 2.11181485702583e-14 1.69794828755604e-14 3.49557670465635e-15 25118860 2.11181456338056e-14 1.69794794509797e-14 3.49557689925465e-15 31622780 2.11181401625201e-14 1.69794789033442e-14 3.49557579428247e-15 39810720 2.11181397233124e-14 1.69794784325439e-14 3.49557581085882e-15 50118720 2.11181425136951e-14 1.69794811679452e-14 3.49557575456798e-15 63095730 2.111814223353e-14 1.69794805312469e-14 3.49557672455949e-15 79432820 2.11181474055108e-14 1.69794803644538e-14 3.49557606569293e-15 100000000 2.11181420749091e-14 1.69794769347475e-14 3.49557571935738e-15 1000 2.08997178310098e-14 1.68492563603097e-14 3.40866916268205e-15 1258.925 2.08997301646725e-14 1.68492673621239e-14 3.40866987032531e-15 1584.893 2.08997301723859e-14 1.68492596509724e-14 3.4086692782755e-15 1995.262 2.08997241324308e-14 1.68492561884928e-14 3.40866957486714e-15 2511.886 2.08997285082567e-14 1.6849260468493e-14 3.40867004797091e-15 3162.278 2.08997214713012e-14 1.68492520810186e-14 3.40866883003619e-15 3981.072 2.08997244029946e-14 1.68492543844414e-14 3.40866902893195e-15 5011.872 2.08997275784003e-14 1.68492578520602e-14 3.40867023647821e-15 6309.573 2.08997270195784e-14 1.68492572484342e-14 3.40866871336304e-15 7943.282 2.0899730379067e-14 1.68492576527791e-14 3.40867009280077e-15 10000 2.08997178310098e-14 1.68492563603097e-14 3.40866916268205e-15 12589.25 2.08997301646725e-14 1.68492673621239e-14 3.40866987032531e-15 15848.93 2.08997301723859e-14 1.68492596509724e-14 3.4086692782755e-15 19952.62 2.08997241324308e-14 1.68492561884928e-14 3.40866957486714e-15 25118.86 2.08997285082567e-14 1.6849260468493e-14 3.40867004797091e-15 31622.78 2.08997214713012e-14 1.68492520810186e-14 3.40866883003619e-15 39810.72 2.08997244029946e-14 1.68492543844414e-14 3.40866902893195e-15 50118.72 2.08997275784003e-14 1.68492578520602e-14 3.40867023647821e-15 63095.73 2.08997270195784e-14 1.68492572484342e-14 3.40866871336304e-15 79432.82 2.0899730379067e-14 1.68492576527791e-14 3.40867009280077e-15 100000 2.08997178310098e-14 1.68492563603097e-14 3.40866916268205e-15 125892.5 2.08997301646725e-14 1.68492673621239e-14 3.40866987032531e-15 158489.3 2.08997301723859e-14 1.68492596509724e-14 3.4086692782755e-15 199526.2 2.08997241324308e-14 1.68492561884928e-14 3.40866957486714e-15 251188.6 2.08997285082567e-14 1.6849260468493e-14 3.40867004797091e-15 316227.8 2.08997214713012e-14 1.68492520810186e-14 3.40866883003619e-15 398107.2 2.08997244029946e-14 1.68492543844414e-14 3.40866902893195e-15 501187.2 2.08997275784003e-14 1.68492578520602e-14 3.40867023647821e-15 630957.3 2.08997270195784e-14 1.68492572484342e-14 3.40866871336304e-15 794328.2 2.0899730379067e-14 1.68492576527791e-14 3.40867009280077e-15 1000000 2.08997178310098e-14 1.68492563603097e-14 3.40866916268205e-15 1258925 2.08997301646724e-14 1.68492673621239e-14 3.40866987032531e-15 1584893 2.08997301723859e-14 1.68492596509724e-14 3.4086692782755e-15 1995262 2.08997241324308e-14 1.68492561884928e-14 3.40866957486714e-15 2511886 2.08997285082567e-14 1.6849260468493e-14 3.40867004797091e-15 3162278 2.08997214713012e-14 1.68492520810186e-14 3.40866883003619e-15 3981072 2.08997244029946e-14 1.68492543844414e-14 3.40866902893195e-15 5011872 2.08997275784003e-14 1.68492578520602e-14 3.40867023647821e-15 6309573 2.08997270195784e-14 1.68492572484342e-14 3.40866871336304e-15 7943282 2.0899730379067e-14 1.68492576527791e-14 3.40867009280077e-15 10000000 2.08997178310098e-14 1.68492563603097e-14 3.40866916268205e-15 12589250 2.08997301646724e-14 1.68492673621239e-14 3.40866987032531e-15 15848930 2.08997301723859e-14 1.68492596509724e-14 3.4086692782755e-15 19952620 2.08997241324308e-14 1.68492561884928e-14 3.40866957486714e-15 25118860 2.08997285082567e-14 1.6849260468493e-14 3.40867004797091e-15 31622780 2.08997214713012e-14 1.68492520810186e-14 3.40866883003619e-15 39810720 2.08997244029946e-14 1.68492543844414e-14 3.40866902893195e-15 50118720 2.08997275784003e-14 1.68492578520602e-14 3.40867023647821e-15 63095730 2.08997270195784e-14 1.68492572484342e-14 3.40866871336304e-15 79432820 2.0899730379067e-14 1.68492576527791e-14 3.40867009280077e-15 100000000 2.08997178310098e-14 1.68492563603097e-14 3.40866916268205e-15 1000 2.06412502034286e-14 1.66784353598892e-14 3.32456373300514e-15 1258.925 2.0641249161717e-14 1.66784468929889e-14 3.32456556785237e-15 1584.893 2.06412491118231e-14 1.6678435201818e-14 3.324564522e-15 1995.262 2.06412489659639e-14 1.66784363610058e-14 3.32456464005324e-15 2511.886 2.06412483899936e-14 1.6678439927045e-14 3.32456500838704e-15 3162.278 2.06412407315524e-14 1.66784347534927e-14 3.32456419601874e-15 3981.072 2.06412432200231e-14 1.66784367652567e-14 3.32456389902541e-15 5011.872 2.06412466175367e-14 1.66784381922844e-14 3.32456556126326e-15 6309.573 2.06412454316253e-14 1.66784378800525e-14 3.32456565103901e-15 7943.282 2.06412405104171e-14 1.66784371446654e-14 3.32456521157881e-15 10000 2.06412502034286e-14 1.66784353598892e-14 3.32456373300514e-15 12589.25 2.0641249161717e-14 1.66784468929889e-14 3.32456556785237e-15 15848.93 2.06412491118231e-14 1.6678435201818e-14 3.324564522e-15 19952.62 2.06412489659639e-14 1.66784363610058e-14 3.32456464005324e-15 25118.86 2.06412483899936e-14 1.6678439927045e-14 3.32456500838704e-15 31622.78 2.06412407315524e-14 1.66784347534927e-14 3.32456419601874e-15 39810.72 2.06412432200231e-14 1.66784367652567e-14 3.32456389902541e-15 50118.72 2.06412466175367e-14 1.66784381922844e-14 3.32456556126326e-15 63095.73 2.06412454316253e-14 1.66784378800525e-14 3.32456565103901e-15 79432.82 2.06412405104171e-14 1.66784371446654e-14 3.32456521157881e-15 100000 2.06412502034286e-14 1.66784353598892e-14 3.32456373300514e-15 125892.5 2.0641249161717e-14 1.66784468929889e-14 3.32456556785237e-15 158489.3 2.06412491118231e-14 1.6678435201818e-14 3.324564522e-15 199526.2 2.06412489659639e-14 1.66784363610058e-14 3.32456464005324e-15 251188.6 2.06412483899936e-14 1.6678439927045e-14 3.32456500838704e-15 316227.8 2.06412407315524e-14 1.66784347534927e-14 3.32456419601874e-15 398107.2 2.06412432200231e-14 1.66784367652567e-14 3.32456389902541e-15 501187.2 2.06412466175367e-14 1.66784381922844e-14 3.32456556126326e-15 630957.3 2.06412454316253e-14 1.66784378800525e-14 3.32456565103901e-15 794328.2 2.06412405104171e-14 1.66784371446654e-14 3.32456521157881e-15 1000000 2.06412502034286e-14 1.66784353598892e-14 3.32456373300514e-15 1258925 2.0641249161717e-14 1.66784468929889e-14 3.32456556785237e-15 1584893 2.06412491118231e-14 1.6678435201818e-14 3.324564522e-15 1995262 2.06412489659639e-14 1.66784363610058e-14 3.32456464005324e-15 2511886 2.06412483899936e-14 1.6678439927045e-14 3.32456500838704e-15 3162278 2.06412407315524e-14 1.66784347534927e-14 3.32456419601874e-15 3981072 2.06412432200231e-14 1.66784367652567e-14 3.32456389902541e-15 5011872 2.06412466175367e-14 1.66784381922844e-14 3.32456556126326e-15 6309573 2.06412454316253e-14 1.66784378800525e-14 3.32456565103901e-15 7943282 2.06412405104171e-14 1.66784371446654e-14 3.32456521157881e-15 10000000 2.06412502034286e-14 1.66784353598892e-14 3.32456373300514e-15 12589250 2.0641249161717e-14 1.66784468929889e-14 3.32456556785237e-15 15848930 2.06412491118231e-14 1.6678435201818e-14 3.324564522e-15 19952620 2.06412489659639e-14 1.66784363610058e-14 3.32456464005324e-15 25118860 2.06412483899936e-14 1.6678439927045e-14 3.32456500838704e-15 31622780 2.06412407315524e-14 1.66784347534927e-14 3.32456419601874e-15 39810720 2.06412432200231e-14 1.66784367652567e-14 3.32456389902541e-15 50118720 2.06412466175367e-14 1.66784381922844e-14 3.32456556126326e-15 63095730 2.06412454316253e-14 1.66784378800525e-14 3.32456565103901e-15 79432820 2.06412405104171e-14 1.66784371446654e-14 3.32456521157881e-15 100000000 2.06412502034286e-14 1.66784353598892e-14 3.32456373300514e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/64_acFreq_COTHRML=0.standard0000644000175000017500000002530213546075722025152 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1258.925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584.893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995.262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511.886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162.278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981.072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011.872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309.573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943.282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 10000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589.25 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848.93 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952.62 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118.86 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622.78 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810.72 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118.72 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095.73 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432.82 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 125892.5 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 158489.3 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 199526.2 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 251188.6 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 316227.8 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 398107.2 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 501187.2 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 630957.3 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 794328.2 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 1000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 1258925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 10000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589250 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848930 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952620 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118860 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622780 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810720 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118720 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095730 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432820 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258.925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584.893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995.262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511.886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162.278 2.08988054797393e-14 1.68486984597449e-14 3.40873274812869e-15 3981.072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011.872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309.573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943.282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589.25 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848.93 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952.62 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118.86 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622.78 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810.72 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118.72 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095.73 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432.82 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 125892.5 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 158489.3 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 199526.2 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 251188.6 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 316227.8 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 398107.2 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 501187.2 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 630957.3 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 794328.2 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 1000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162278 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 3981072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589250 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848930 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952620 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118860 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622780 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810720 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118720 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095730 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432820 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258.925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584.893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995.262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511.886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162.278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981.072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011.872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309.573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943.282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589.25 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848.93 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952.62 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118.86 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622.78 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810.72 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118.72 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095.73 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432.82 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 125892.5 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 158489.3 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 199526.2 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 251188.6 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 316227.8 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 398107.2 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 501187.2 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 630957.3 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 794328.2 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 1000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589250 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848930 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952620 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118860 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622780 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810720 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118720 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095730 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432820 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/38_acVd_WPE.standard0000644000175000017500000000723013546075722023775 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -0.2 8.630335e-04 5.256786e-03 1.41559838327944e-14 1.23845433531692e-14 -0.3 1.372156e-03 4.469020e-03 1.46984539796706e-14 1.15507631274195e-14 -0.4 1.910046e-03 3.701688e-03 1.52818841376368e-14 1.04960928418629e-14 -0.5 2.464325e-03 2.977336e-03 1.5876464298622e-14 9.16424248125864e-15 -0.6 3.026369e-03 2.304682e-03 1.64037544413881e-14 7.56219504749731e-15 -0.7 3.571334e-03 1.712474e-03 1.67309945299898e-14 5.95607361263292e-15 -0.8 4.036725e-03 1.263681e-03 1.68165745531609e-14 4.78049029433861e-15 -0.9 4.317235e-03 1.042347e-03 1.67733445414562e-14 4.06220109985867e-15 -1 4.430695e-03 9.970745e-04 1.67436645334202e-14 3.76222801863965e-15 -1.1 4.515079e-03 9.797152e-04 1.67437145334338e-14 3.63677598467297e-15 -1.2 4.597998e-03 9.636041e-04 1.67444145336233e-14 3.49666694673783e-15 -1.3 4.681888e-03 9.469130e-04 1.67447645337181e-14 3.33254290230053e-15 -1.4 4.765760e-03 9.305448e-04 1.67449245337614e-14 3.13312684830777e-15 -1.5 4.848415e-03 9.153374e-04 1.6745004533783e-14 2.92914879307982e-15 -1.6 4.928964e-03 9.017724e-04 1.67450445337939e-14 2.73210173972847e-15 -1.7 5.006855e-03 8.900439e-04 1.67450645337993e-14 2.55174069089493e-15 -1.8 5.081808e-03 8.801623e-04 1.6745074533802e-14 2.40297665061641e-15 -0.2 6.927205e-04 4.206682e-03 1.39829837859539e-14 1.2292123328146e-14 -0.3 1.089148e-03 3.646827e-03 1.44981039254249e-14 1.14961031126201e-14 -0.4 1.506444e-03 3.087061e-03 1.50514440752442e-14 1.05061728445921e-14 -0.5 1.935820e-03 2.545967e-03 1.56167442283016e-14 9.28390351365739e-15 -0.6 2.370059e-03 2.034892e-03 1.61360443689044e-14 7.82616111896727e-15 -0.7 2.794790e-03 1.573051e-03 1.65044244686449e-14 6.29990070572561e-15 -0.8 3.176527e-03 1.197617e-03 1.66549645094043e-14 5.05176036778616e-15 -0.9 3.466134e-03 9.504195e-04 1.6653264508944e-14 4.25819515292492e-15 -1 3.625230e-03 8.501199e-04 1.66073244965056e-14 3.77786602287371e-15 -1.1 3.707799e-03 8.270577e-04 1.65916544922629e-14 3.55743496319104e-15 -1.2 3.775764e-03 8.173806e-04 1.65908744920517e-14 3.40985392323283e-15 -1.3 3.844194e-03 8.072597e-04 1.65911744921329e-14 3.26135388302579e-15 -1.4 3.913923e-03 7.961974e-04 1.6591374492187e-14 3.0872248358796e-15 -1.5 3.983947e-03 7.850680e-04 1.65914644922114e-14 2.9042257863318e-15 -1.6 4.053295e-03 7.745616e-04 1.65915144922249e-14 2.73136373952865e-15 -1.7 4.121257e-03 7.650846e-04 1.65915344922304e-14 2.56334369403649e-15 -1.8 4.187381e-03 7.568308e-04 1.65915544922358e-14 2.41265265323623e-15 -0.2 5.262641e-04 3.263947e-03 1.37581737250856e-14 1.21710032953523e-14 -0.3 8.189283e-04 2.877674e-03 1.42394738553997e-14 1.14214530924083e-14 -0.4 1.124576e-03 2.486939e-03 1.47561839953012e-14 1.0506452844668e-14 -0.5 1.437391e-03 2.103855e-03 1.5284784138422e-14 9.40508654646822e-15 -0.6 1.751827e-03 1.738143e-03 1.57844242737017e-14 8.11301219663345e-15 -0.7 2.059992e-03 1.401482e-03 1.618160438124e-14 6.71948281932929e-15 -0.8 2.346296e-03 1.112972e-03 1.64054144418375e-14 5.45284447638144e-15 -0.9 2.588301e-03 8.941830e-04 1.64662244583021e-14 4.52515322520498e-15 -1 2.766437e-03 7.569717e-04 1.64447944524999e-14 3.9303270641532e-15 -1.1 2.877304e-03 6.939224e-04 1.64091544428502e-14 3.54534795991843e-15 -1.2 2.945001e-03 6.737703e-04 1.63924244383204e-14 3.32339789982448e-15 -1.3 2.998591e-03 6.665290e-04 1.63887044373132e-14 3.17614685995562e-15 -1.4 3.050626e-03 6.606329e-04 1.63881144371535e-14 3.02410181878876e-15 -1.5 3.103433e-03 6.541666e-04 1.63880544371372e-14 2.86487877567843e-15 -1.6 3.156754e-03 6.473775e-04 1.63880744371427e-14 2.70986073370662e-15 -1.7 3.209958e-03 6.407282e-04 1.63880944371481e-14 2.5660616947724e-15 -1.8 3.262504e-03 6.345610e-04 1.63881144371535e-14 2.42738265722445e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/5_dcSweep_NSUBPDLT.standard0000644000175000017500000002342613546075722025231 0ustar carstencarstenV(d) I(d) -2.000000e-01 -1.877125e-05 -3.000000e-01 -2.153279e-05 -4.000000e-01 -2.448566e-05 -5.000000e-01 -2.765267e-05 -6.000000e-01 -3.100540e-05 -7.000000e-01 -3.452064e-05 -8.000000e-01 -3.818714e-05 -9.000000e-01 -4.200140e-05 -1.000000e+00 -4.596395e-05 -1.100000e+00 -5.007732e-05 -1.200000e+00 -5.434514e-05 -1.300000e+00 -5.877167e-05 -1.400000e+00 -6.336165e-05 -1.500000e+00 -6.812019e-05 -1.600000e+00 -7.305275e-05 -1.700000e+00 -7.816516e-05 -1.800000e+00 -8.346359e-05 -2.000000e-01 -2.428966e-04 -3.000000e-01 -2.711927e-04 -4.000000e-01 -2.943178e-04 -5.000000e-01 -3.168453e-04 -6.000000e-01 -3.390262e-04 -7.000000e-01 -3.611130e-04 -8.000000e-01 -3.832846e-04 -9.000000e-01 -4.056638e-04 -1.000000e+00 -4.283374e-04 -1.100000e+00 -4.513690e-04 -1.200000e+00 -4.748068e-04 -1.300000e+00 -4.986892e-04 -1.400000e+00 -5.230476e-04 -1.500000e+00 -5.479089e-04 -1.600000e+00 -5.732969e-04 -1.700000e+00 -5.992333e-04 -1.800000e+00 -6.257383e-04 -2.000000e-01 -5.574984e-04 -3.000000e-01 -7.069258e-04 -4.000000e-01 -7.867362e-04 -5.000000e-01 -8.382499e-04 -6.000000e-01 -8.868799e-04 -7.000000e-01 -9.341533e-04 -8.000000e-01 -9.801043e-04 -9.000000e-01 -1.025020e-03 -1.000000e+00 -1.069231e-03 -1.100000e+00 -1.113029e-03 -1.200000e+00 -1.156647e-03 -1.300000e+00 -1.200264e-03 -1.400000e+00 -1.244020e-03 -1.500000e+00 -1.288021e-03 -1.600000e+00 -1.332352e-03 -1.700000e+00 -1.377082e-03 -1.800000e+00 -1.422264e-03 -2.000000e-01 -8.228368e-04 -3.000000e-01 -1.113227e-03 -4.000000e-01 -1.325810e-03 -5.000000e-01 -1.467701e-03 -6.000000e-01 -1.558279e-03 -7.000000e-01 -1.631187e-03 -8.000000e-01 -1.701573e-03 -9.000000e-01 -1.770411e-03 -1.000000e+00 -1.837622e-03 -1.100000e+00 -1.903319e-03 -1.200000e+00 -1.967740e-03 -1.300000e+00 -2.031156e-03 -1.400000e+00 -2.093826e-03 -1.500000e+00 -2.155977e-03 -1.600000e+00 -2.217802e-03 -1.700000e+00 -2.279460e-03 -1.800000e+00 -2.341085e-03 -2.000000e-01 -1.035292e-03 -3.000000e-01 -1.444714e-03 -4.000000e-01 -1.779974e-03 -5.000000e-01 -2.044415e-03 -6.000000e-01 -2.242830e-03 -7.000000e-01 -2.384339e-03 -8.000000e-01 -2.487539e-03 -9.000000e-01 -2.577917e-03 -1.000000e+00 -2.665710e-03 -1.100000e+00 -2.751903e-03 -1.200000e+00 -2.836458e-03 -1.300000e+00 -2.919389e-03 -1.400000e+00 -3.000814e-03 -1.500000e+00 -3.080915e-03 -1.600000e+00 -3.159899e-03 -1.700000e+00 -3.237969e-03 -1.800000e+00 -3.315314e-03 -2.000000e-01 -1.268358e-03 -3.000000e-01 -1.816307e-03 -4.000000e-01 -2.299285e-03 -5.000000e-01 -2.717183e-03 -6.000000e-01 -3.072114e-03 -7.000000e-01 -3.367214e-03 -8.000000e-01 -3.606486e-03 -9.000000e-01 -3.795850e-03 -1.000000e+00 -3.944455e-03 -1.100000e+00 -4.065535e-03 -1.200000e+00 -4.175881e-03 -1.300000e+00 -4.283368e-03 -1.400000e+00 -4.389123e-03 -1.500000e+00 -4.493307e-03 -1.600000e+00 -4.595932e-03 -1.700000e+00 -4.697036e-03 -1.800000e+00 -4.796701e-03 -2.000000e-01 -1.418748e-03 -3.000000e-01 -2.063181e-03 -4.000000e-01 -2.654343e-03 -5.000000e-01 -3.189162e-03 -6.000000e-01 -3.667144e-03 -7.000000e-01 -4.089481e-03 -8.000000e-01 -4.458325e-03 -9.000000e-01 -4.776367e-03 -1.000000e+00 -5.046861e-03 -1.100000e+00 -5.274038e-03 -1.200000e+00 -5.463554e-03 -1.300000e+00 -5.622532e-03 -1.400000e+00 -5.759453e-03 -1.500000e+00 -5.884750e-03 -1.600000e+00 -6.006379e-03 -1.700000e+00 -6.126044e-03 -1.800000e+00 -6.244150e-03 -2.000000e-01 -4.474684e-05 -3.000000e-01 -5.078723e-05 -4.000000e-01 -5.695011e-05 -5.000000e-01 -6.340364e-05 -6.000000e-01 -7.014157e-05 -7.000000e-01 -7.714279e-05 -8.000000e-01 -8.439740e-05 -9.000000e-01 -9.190470e-05 -1.000000e+00 -9.966883e-05 -1.100000e+00 -1.076962e-04 -1.200000e+00 -1.159944e-04 -1.300000e+00 -1.245716e-04 -1.400000e+00 -1.334363e-04 -1.500000e+00 -1.425974e-04 -1.600000e+00 -1.520644e-04 -1.700000e+00 -1.618470e-04 -1.800000e+00 -1.719554e-04 -2.000000e-01 -2.353693e-04 -3.000000e-01 -2.743533e-04 -4.000000e-01 -2.984507e-04 -5.000000e-01 -3.211363e-04 -6.000000e-01 -3.432829e-04 -7.000000e-01 -3.650876e-04 -8.000000e-01 -3.867583e-04 -9.000000e-01 -4.084605e-04 -1.000000e+00 -4.303156e-04 -1.100000e+00 -4.524113e-04 -1.200000e+00 -4.748124e-04 -1.300000e+00 -4.975682e-04 -1.400000e+00 -5.207175e-04 -1.500000e+00 -5.442918e-04 -1.600000e+00 -5.683182e-04 -1.700000e+00 -5.928201e-04 -1.800000e+00 -6.178187e-04 -2.000000e-01 -4.597148e-04 -3.000000e-01 -5.979546e-04 -4.000000e-01 -6.827673e-04 -5.000000e-01 -7.341349e-04 -6.000000e-01 -7.768859e-04 -7.000000e-01 -8.184453e-04 -8.000000e-01 -8.590437e-04 -9.000000e-01 -8.987196e-04 -1.000000e+00 -9.376652e-04 -1.100000e+00 -9.761085e-04 -1.200000e+00 -1.014258e-03 -1.300000e+00 -1.052285e-03 -1.400000e+00 -1.090329e-03 -1.500000e+00 -1.128500e-03 -1.600000e+00 -1.166886e-03 -1.700000e+00 -1.205557e-03 -1.800000e+00 -1.244570e-03 -2.000000e-01 -6.559645e-04 -3.000000e-01 -8.977243e-04 -4.000000e-01 -1.083037e-03 -5.000000e-01 -1.215662e-03 -6.000000e-01 -1.305206e-03 -7.000000e-01 -1.370842e-03 -8.000000e-01 -1.430433e-03 -9.000000e-01 -1.488883e-03 -1.000000e+00 -1.546335e-03 -1.100000e+00 -1.602697e-03 -1.200000e+00 -1.658031e-03 -1.300000e+00 -1.712493e-03 -1.400000e+00 -1.766263e-03 -1.500000e+00 -1.819520e-03 -1.600000e+00 -1.872426e-03 -1.700000e+00 -1.925122e-03 -1.800000e+00 -1.977729e-03 -2.000000e-01 -8.202666e-04 -3.000000e-01 -1.152611e-03 -4.000000e-01 -1.431004e-03 -5.000000e-01 -1.656808e-03 -6.000000e-01 -1.832753e-03 -7.000000e-01 -1.964210e-03 -8.000000e-01 -2.061632e-03 -9.000000e-01 -2.140753e-03 -1.000000e+00 -2.214778e-03 -1.100000e+00 -2.287574e-03 -1.200000e+00 -2.359402e-03 -1.300000e+00 -2.430153e-03 -1.400000e+00 -2.499805e-03 -1.500000e+00 -2.568426e-03 -1.600000e+00 -2.636132e-03 -1.700000e+00 -2.703063e-03 -1.800000e+00 -2.769358e-03 -2.000000e-01 -1.012125e-03 -3.000000e-01 -1.454662e-03 -4.000000e-01 -1.849691e-03 -5.000000e-01 -2.196209e-03 -6.000000e-01 -2.494853e-03 -7.000000e-01 -2.747347e-03 -8.000000e-01 -2.956320e-03 -9.000000e-01 -3.125782e-03 -1.000000e+00 -3.261870e-03 -1.100000e+00 -3.373052e-03 -1.200000e+00 -3.469833e-03 -1.300000e+00 -3.561524e-03 -1.400000e+00 -3.651618e-03 -1.500000e+00 -3.740709e-03 -1.600000e+00 -3.828797e-03 -1.700000e+00 -3.915839e-03 -1.800000e+00 -4.001833e-03 -2.000000e-01 -1.148311e-03 -3.000000e-01 -1.672796e-03 -4.000000e-01 -2.157693e-03 -5.000000e-01 -2.600278e-03 -6.000000e-01 -2.999445e-03 -7.000000e-01 -3.355396e-03 -8.000000e-01 -3.669259e-03 -9.000000e-01 -3.942798e-03 -1.000000e+00 -4.178350e-03 -1.100000e+00 -4.379019e-03 -1.200000e+00 -4.548930e-03 -1.300000e+00 -4.693266e-03 -1.400000e+00 -4.818032e-03 -1.500000e+00 -4.929916e-03 -1.600000e+00 -5.035654e-03 -1.700000e+00 -5.139090e-03 -1.800000e+00 -5.241313e-03 -2.000000e-01 -8.324256e-05 -3.000000e-01 -9.722335e-05 -4.000000e-01 -1.097722e-04 -5.000000e-01 -1.225638e-04 -6.000000e-01 -1.357493e-04 -7.000000e-01 -1.493391e-04 -8.000000e-01 -1.633406e-04 -9.000000e-01 -1.777667e-04 -1.000000e+00 -1.926328e-04 -1.100000e+00 -2.079548e-04 -1.200000e+00 -2.237482e-04 -1.300000e+00 -2.400281e-04 -1.400000e+00 -2.568095e-04 -1.500000e+00 -2.741075e-04 -1.600000e+00 -2.919371e-04 -1.700000e+00 -3.103141e-04 -1.800000e+00 -3.292543e-04 -2.000000e-01 -2.226466e-04 -3.000000e-01 -2.765736e-04 -4.000000e-01 -3.084542e-04 -5.000000e-01 -3.337570e-04 -6.000000e-01 -3.579682e-04 -7.000000e-01 -3.817488e-04 -8.000000e-01 -4.052583e-04 -9.000000e-01 -4.286554e-04 -1.000000e+00 -4.520833e-04 -1.100000e+00 -4.756568e-04 -1.200000e+00 -4.994638e-04 -1.300000e+00 -5.235719e-04 -1.400000e+00 -5.480334e-04 -1.500000e+00 -5.728900e-04 -1.600000e+00 -5.981759e-04 -1.700000e+00 -6.239198e-04 -1.800000e+00 -6.501469e-04 -2.000000e-01 -3.734249e-04 -3.000000e-01 -4.980558e-04 -4.000000e-01 -5.852431e-04 -5.000000e-01 -6.429174e-04 -6.000000e-01 -6.848693e-04 -7.000000e-01 -7.224198e-04 -8.000000e-01 -7.590260e-04 -9.000000e-01 -7.950066e-04 -1.000000e+00 -8.303942e-04 -1.100000e+00 -8.652920e-04 -1.200000e+00 -8.998408e-04 -1.300000e+00 -9.341819e-04 -1.400000e+00 -9.684416e-04 -1.500000e+00 -1.002727e-03 -1.600000e+00 -1.037126e-03 -1.700000e+00 -1.071712e-03 -1.800000e+00 -1.106547e-03 -2.000000e-01 -5.112473e-04 -3.000000e-01 -7.075035e-04 -4.000000e-01 -8.647602e-04 -5.000000e-01 -9.851270e-04 -6.000000e-01 -1.073160e-03 -7.000000e-01 -1.137798e-03 -8.000000e-01 -1.190609e-03 -9.000000e-01 -1.239928e-03 -1.000000e+00 -1.288379e-03 -1.100000e+00 -1.336216e-03 -1.200000e+00 -1.383392e-03 -1.300000e+00 -1.429921e-03 -1.400000e+00 -1.475881e-03 -1.500000e+00 -1.521379e-03 -1.600000e+00 -1.566530e-03 -1.700000e+00 -1.611444e-03 -1.800000e+00 -1.656221e-03 -2.000000e-01 -6.319591e-04 -3.000000e-01 -8.934387e-04 -4.000000e-01 -1.117237e-03 -5.000000e-01 -1.303922e-03 -6.000000e-01 -1.455094e-03 -7.000000e-01 -1.573807e-03 -8.000000e-01 -1.665600e-03 -9.000000e-01 -1.738666e-03 -1.000000e+00 -1.802082e-03 -1.100000e+00 -1.862260e-03 -1.200000e+00 -1.921511e-03 -1.300000e+00 -1.980173e-03 -1.400000e+00 -2.038199e-03 -1.500000e+00 -2.095553e-03 -1.600000e+00 -2.152254e-03 -1.700000e+00 -2.208360e-03 -1.800000e+00 -2.263951e-03 -2.000000e-01 -7.813710e-04 -3.000000e-01 -1.126074e-03 -4.000000e-01 -1.437068e-03 -5.000000e-01 -1.713377e-03 -6.000000e-01 -1.955065e-03 -7.000000e-01 -2.163071e-03 -8.000000e-01 -2.339091e-03 -9.000000e-01 -2.485725e-03 -1.000000e+00 -2.606805e-03 -1.100000e+00 -2.707472e-03 -1.200000e+00 -2.793768e-03 -1.300000e+00 -2.871855e-03 -1.400000e+00 -2.946446e-03 -1.500000e+00 -3.019761e-03 -1.600000e+00 -3.092420e-03 -1.700000e+00 -3.164490e-03 -1.800000e+00 -3.235933e-03 -2.000000e-01 -8.964334e-04 -3.000000e-01 -1.307157e-03 -4.000000e-01 -1.689111e-03 -5.000000e-01 -2.040345e-03 -6.000000e-01 -2.359806e-03 -7.000000e-01 -2.647319e-03 -8.000000e-01 -2.903440e-03 -9.000000e-01 -3.129300e-03 -1.000000e+00 -3.326521e-03 -1.100000e+00 -3.497275e-03 -1.200000e+00 -3.644392e-03 -1.300000e+00 -3.771375e-03 -1.400000e+00 -3.882224e-03 -1.500000e+00 -3.981164e-03 -1.600000e+00 -4.072368e-03 -1.700000e+00 -4.159423e-03 -1.800000e+00 -4.244563e-03 tmpk8ny_4pz/tests/hisim/pmos/reference/66_acFreq_COIGN=0.standard0000644000175000017500000002530213546075722024703 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1258.925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584.893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995.262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511.886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162.278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981.072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011.872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309.573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943.282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 10000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589.25 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848.93 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952.62 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118.86 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622.78 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810.72 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118.72 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095.73 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432.82 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 125892.5 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 158489.3 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 199526.2 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 251188.6 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 316227.8 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 398107.2 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 501187.2 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 630957.3 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 794328.2 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 1000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 1258925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 10000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589250 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848930 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952620 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118860 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622780 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810720 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118720 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095730 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432820 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258.925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584.893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995.262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511.886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162.278 2.08988054797393e-14 1.68486984597449e-14 3.40873274812869e-15 3981.072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011.872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309.573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943.282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589.25 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848.93 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952.62 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118.86 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622.78 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810.72 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118.72 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095.73 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432.82 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 125892.5 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 158489.3 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 199526.2 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 251188.6 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 316227.8 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 398107.2 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 501187.2 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 630957.3 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 794328.2 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 1000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162278 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 3981072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589250 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848930 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952620 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118860 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622780 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810720 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118720 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095730 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432820 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258.925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584.893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995.262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511.886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162.278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981.072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011.872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309.573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943.282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589.25 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848.93 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952.62 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118.86 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622.78 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810.72 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118.72 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095.73 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432.82 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 125892.5 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 158489.3 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 199526.2 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 251188.6 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 316227.8 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 398107.2 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 501187.2 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 630957.3 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 794328.2 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 1000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589250 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848930 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952620 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118860 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622780 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810720 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118720 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095730 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432820 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/60_acFreq_CORBNET=0.standard0000644000175000017500000002530213546075722025132 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1258.925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584.893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995.262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511.886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162.278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981.072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011.872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309.573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943.282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 10000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589.25 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848.93 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952.62 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118.86 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622.78 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810.72 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118.72 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095.73 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432.82 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 125892.5 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 158489.3 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 199526.2 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 251188.6 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 316227.8 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 398107.2 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 501187.2 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 630957.3 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 794328.2 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 1000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 1258925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 10000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589250 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848930 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952620 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118860 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622780 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810720 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118720 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095730 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432820 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258.925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584.893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995.262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511.886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162.278 2.08988054797393e-14 1.68486984597449e-14 3.40873274812869e-15 3981.072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011.872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309.573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943.282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589.25 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848.93 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952.62 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118.86 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622.78 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810.72 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118.72 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095.73 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432.82 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 125892.5 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 158489.3 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 199526.2 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 251188.6 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 316227.8 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 398107.2 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 501187.2 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 630957.3 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 794328.2 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 1000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162278 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 3981072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589250 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848930 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952620 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118860 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622780 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810720 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118720 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095730 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432820 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258.925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584.893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995.262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511.886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162.278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981.072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011.872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309.573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943.282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589.25 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848.93 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952.62 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118.86 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622.78 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810.72 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118.72 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095.73 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432.82 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 125892.5 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 158489.3 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 199526.2 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 251188.6 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 316227.8 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 398107.2 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 501187.2 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 630957.3 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 794328.2 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 1000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589250 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848930 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952620 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118860 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622780 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810720 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118720 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095730 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432820 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/77_noise_COIGN=1_T150.standard0000644000175000017500000000712013546075722025331 0ustar carstencarstenFreq N(g) 1000 1.456735e-38 1258.925 2.308769e-38 1584.893 3.659152e-38 1995.262 5.799366e-38 2511.886 9.191375e-38 3162.278 1.456735e-37 3981.072 2.308769e-37 5011.872 3.659152e-37 6309.573 5.799366e-37 7943.282 9.191375e-37 10000 1.456735e-36 12589.25 2.308769e-36 15848.93 3.659152e-36 19952.62 5.799366e-36 25118.86 9.191375e-36 31622.78 1.456735e-35 39810.72 2.308769e-35 50118.72 3.659152e-35 63095.73 5.799366e-35 79432.82 9.191375e-35 100000 1.456735e-34 125892.5 2.308769e-34 158489.3 3.659152e-34 199526.2 5.799366e-34 251188.6 9.191375e-34 316227.8 1.456735e-33 398107.2 2.308769e-33 501187.2 3.659152e-33 630957.3 5.799366e-33 794328.2 9.191375e-33 1000000 1.456735e-32 1258925 2.308769e-32 1584893 3.659152e-32 1995262 5.799366e-32 2511886 9.191375e-32 3162278 1.456735e-31 3981072 2.308769e-31 5011872 3.659152e-31 6309573 5.799366e-31 7943282 9.191375e-31 10000000 1.456735e-30 12589250 2.308769e-30 15848930 3.659152e-30 19952620 5.799366e-30 25118860 9.191375e-30 31622780 1.456735e-29 39810720 2.308769e-29 50118720 3.659152e-29 63095730 5.799366e-29 79432820 9.191375e-29 100000000 1.456735e-28 125892500 2.308769e-28 158489300 3.659152e-28 199526200 5.799366e-28 251188600 9.191375e-28 316227800 1.456735e-27 398107200 2.308769e-27 501187200 3.659152e-27 630957300 5.799366e-27 794328200 9.191375e-27 1000000000 1.456735e-26 1258925000 2.308769e-26 1584893000 3.659152e-26 1995262000 5.799366e-26 2511886000 9.191375e-26 3162278000 1.456735e-25 3981072000 2.308769e-25 5011872000 3.659152e-25 6309573000 5.799366e-25 7943282000 9.191375e-25 10000000000 1.456735e-24 12589250000 2.308769e-24 15848930000 3.659152e-24 19952620000 5.799366e-24 25118860000 9.191375e-24 31622780000 1.456735e-23 39810720000 2.308769e-23 50118720000 3.659152e-23 63095730000 5.799366e-23 79432820000 9.191375e-23 100000000000 1.456735e-22 1000 9.424581e-39 1258.925 1.493695e-38 1584.893 2.367348e-38 1995.262 3.751993e-38 2511.886 5.946508e-38 3162.278 9.424581e-38 3981.072 1.493695e-37 5011.872 2.367348e-37 6309.573 3.751993e-37 7943.282 5.946508e-37 10000 9.424581e-37 12589.25 1.493695e-36 15848.93 2.367348e-36 19952.62 3.751993e-36 25118.86 5.946508e-36 31622.78 9.424581e-36 39810.72 1.493695e-35 50118.72 2.367348e-35 63095.73 3.751993e-35 79432.82 5.946508e-35 100000 9.424581e-35 125892.5 1.493695e-34 158489.3 2.367348e-34 199526.2 3.751993e-34 251188.6 5.946508e-34 316227.8 9.424581e-34 398107.2 1.493695e-33 501187.2 2.367348e-33 630957.3 3.751993e-33 794328.2 5.946508e-33 1000000 9.424581e-33 1258925 1.493695e-32 1584893 2.367348e-32 1995262 3.751993e-32 2511886 5.946508e-32 3162278 9.424581e-32 3981072 1.493695e-31 5011872 2.367348e-31 6309573 3.751993e-31 7943282 5.946508e-31 10000000 9.424581e-31 12589250 1.493695e-30 15848930 2.367348e-30 19952620 3.751993e-30 25118860 5.946508e-30 31622780 9.424581e-30 39810720 1.493695e-29 50118720 2.367348e-29 63095730 3.751993e-29 79432820 5.946508e-29 100000000 9.424581e-29 125892500 1.493695e-28 158489300 2.367348e-28 199526200 3.751993e-28 251188600 5.946508e-28 316227800 9.424581e-28 398107200 1.493695e-27 501187200 2.367348e-27 630957300 3.751993e-27 794328200 5.946508e-27 1000000000 9.424581e-27 1258925000 1.493695e-26 1584893000 2.367348e-26 1995262000 3.751993e-26 2511886000 5.946508e-26 3162278000 9.424581e-26 3981072000 1.493695e-25 5011872000 2.367348e-25 6309573000 3.751993e-25 7943282000 5.946508e-25 10000000000 9.424581e-25 12589250000 1.493695e-24 15848930000 2.367348e-24 19952620000 3.751993e-24 25118860000 5.946508e-24 31622780000 9.424581e-24 39810720000 1.493695e-23 50118720000 2.367348e-23 63095730000 3.751993e-23 79432820000 5.946508e-23 100000000000 9.424581e-23 tmpk8ny_4pz/tests/hisim/pmos/reference/76_noise_COIGN=1_T-55.standard0000644000175000017500000000710013546075722025327 0ustar carstencarstenFreq N(g) 1000 6.585602e-39 1258.925 1.043748e-38 1584.893 1.654228e-38 1995.262 2.621775e-38 2511.886 4.155234e-38 3162.278 6.585602e-38 3981.072 1.043748e-37 5011.872 1.654228e-37 6309.573 2.621775e-37 7943.282 4.155234e-37 10000 6.585602e-37 12589.25 1.043748e-36 15848.93 1.654228e-36 19952.62 2.621775e-36 25118.86 4.155234e-36 31622.78 6.585602e-36 39810.72 1.043748e-35 50118.72 1.654228e-35 63095.73 2.621775e-35 79432.82 4.155234e-35 100000 6.585602e-35 125892.5 1.043748e-34 158489.3 1.654228e-34 199526.2 2.621775e-34 251188.6 4.155234e-34 316227.8 6.585602e-34 398107.2 1.043748e-33 501187.2 1.654228e-33 630957.3 2.621775e-33 794328.2 4.155234e-33 1000000 6.585602e-33 1258925 1.043748e-32 1584893 1.654228e-32 1995262 2.621775e-32 2511886 4.155234e-32 3162278 6.585602e-32 3981072 1.043748e-31 5011872 1.654228e-31 6309573 2.621775e-31 7943282 4.155234e-31 10000000 6.585602e-31 12589250 1.043748e-30 15848930 1.654228e-30 19952620 2.621775e-30 25118860 4.155234e-30 31622780 6.585602e-30 39810720 1.043748e-29 50118720 1.654228e-29 63095730 2.621775e-29 79432820 4.155234e-29 100000000 6.585602e-29 125892500 1.043748e-28 158489300 1.654228e-28 199526200 2.621775e-28 251188600 4.155234e-28 316227800 6.585602e-28 398107200 1.043748e-27 501187200 1.654228e-27 630957300 2.621775e-27 794328200 4.155234e-27 1000000000 6.585602e-27 1258925000 1.043748e-26 1584893000 1.654228e-26 1995262000 2.621775e-26 2511886000 4.155234e-26 3162278000 6.585602e-26 3981072000 1.043748e-25 5011872000 1.654228e-25 6309573000 2.621775e-25 7943282000 4.155234e-25 10000000000 6.585602e-25 12589250000 1.043748e-24 15848930000 1.654228e-24 19952620000 2.621775e-24 25118860000 4.155234e-24 31622780000 6.585602e-24 39810720000 1.043748e-23 50118720000 1.654228e-23 63095730000 2.621775e-23 79432820000 4.155234e-23 100000000000 6.585602e-23 1000 3.477462e-39 1258.925 5.511407e-39 1584.893 8.734991e-39 1995.262 1.384403e-38 2511.886 2.19413e-38 3162.278 3.477462e-38 3981.072 5.511407e-38 5011.872 8.734991e-38 6309.573 1.384403e-37 7943.282 2.19413e-37 10000 3.477462e-37 12589.25 5.511407e-37 15848.93 8.734991e-37 19952.62 1.384403e-36 25118.86 2.19413e-36 31622.78 3.477462e-36 39810.72 5.511407e-36 50118.72 8.734991e-36 63095.73 1.384403e-35 79432.82 2.19413e-35 100000 3.477462e-35 125892.5 5.511407e-35 158489.3 8.734991e-35 199526.2 1.384403e-34 251188.6 2.19413e-34 316227.8 3.477462e-34 398107.2 5.511407e-34 501187.2 8.734991e-34 630957.3 1.384403e-33 794328.2 2.19413e-33 1000000 3.477462e-33 1258925 5.511407e-33 1584893 8.734991e-33 1995262 1.384403e-32 2511886 2.19413e-32 3162278 3.477462e-32 3981072 5.511407e-32 5011872 8.734991e-32 6309573 1.384403e-31 7943282 2.19413e-31 10000000 3.477462e-31 12589250 5.511407e-31 15848930 8.734991e-31 19952620 1.384403e-30 25118860 2.19413e-30 31622780 3.477462e-30 39810720 5.511407e-30 50118720 8.734991e-30 63095730 1.384403e-29 79432820 2.19413e-29 100000000 3.477462e-29 125892500 5.511407e-29 158489300 8.734991e-29 199526200 1.384403e-28 251188600 2.19413e-28 316227800 3.477462e-28 398107200 5.511407e-28 501187200 8.734991e-28 630957300 1.384403e-27 794328200 2.19413e-27 1000000000 3.477462e-27 1258925000 5.511407e-27 1584893000 8.734991e-27 1995262000 1.384403e-26 2511886000 2.19413e-26 3162278000 3.477462e-26 3981072000 5.511407e-26 5011872000 8.734991e-26 6309573000 1.384403e-25 7943282000 2.19413e-25 10000000000 3.477462e-25 12589250000 5.511407e-25 15848930000 8.734991e-25 19952620000 1.384403e-24 25118860000 2.19413e-24 31622780000 3.477462e-24 39810720000 5.511407e-24 50118720000 8.734991e-24 63095730000 1.384403e-23 79432820000 2.19413e-23 100000000000 3.477462e-23 tmpk8ny_4pz/tests/hisim/pmos/reference/1_dcSweep_CORSRD=0.standard0000644000175000017500000002342613546075722025143 0ustar carstencarstenV(d) I(d) -2.000000e-01 -3.825342e-05 -3.000000e-01 -4.167169e-05 -4.000000e-01 -4.460776e-05 -5.000000e-01 -4.736693e-05 -6.000000e-01 -5.007323e-05 -7.000000e-01 -5.277774e-05 -8.000000e-01 -5.550686e-05 -9.000000e-01 -5.827739e-05 -1.000000e+00 -6.110162e-05 -1.100000e+00 -6.398934e-05 -1.200000e+00 -6.694889e-05 -1.300000e+00 -6.998772e-05 -1.400000e+00 -7.311273e-05 -1.500000e+00 -7.633050e-05 -1.600000e+00 -7.964751e-05 -1.700000e+00 -8.307019e-05 -1.800000e+00 -8.660507e-05 -2.000000e-01 -3.006926e-04 -3.000000e-01 -3.352848e-04 -4.000000e-01 -3.558290e-04 -5.000000e-01 -3.739311e-04 -6.000000e-01 -3.901459e-04 -7.000000e-01 -4.050598e-04 -8.000000e-01 -4.191112e-04 -9.000000e-01 -4.325922e-04 -1.000000e+00 -4.456970e-04 -1.100000e+00 -4.585578e-04 -1.200000e+00 -4.712679e-04 -1.300000e+00 -4.838954e-04 -1.400000e+00 -4.964917e-04 -1.500000e+00 -5.090970e-04 -1.600000e+00 -5.217438e-04 -1.700000e+00 -5.344590e-04 -1.800000e+00 -5.472654e-04 -2.000000e-01 -6.141910e-04 -3.000000e-01 -7.837321e-04 -4.000000e-01 -8.714081e-04 -5.000000e-01 -9.150173e-04 -6.000000e-01 -9.530653e-04 -7.000000e-01 -9.886386e-04 -8.000000e-01 -1.021703e-03 -9.000000e-01 -1.052544e-03 -1.000000e+00 -1.081561e-03 -1.100000e+00 -1.109135e-03 -1.200000e+00 -1.135587e-03 -1.300000e+00 -1.161171e-03 -1.400000e+00 -1.186086e-03 -1.500000e+00 -1.210487e-03 -1.600000e+00 -1.234493e-03 -1.700000e+00 -1.258202e-03 -1.800000e+00 -1.281690e-03 -2.000000e-01 -8.743267e-04 -3.000000e-01 -1.183821e-03 -4.000000e-01 -1.408297e-03 -5.000000e-01 -1.553834e-03 -6.000000e-01 -1.635426e-03 -7.000000e-01 -1.689877e-03 -8.000000e-01 -1.742665e-03 -9.000000e-01 -1.793109e-03 -1.000000e+00 -1.841016e-03 -1.100000e+00 -1.886431e-03 -1.200000e+00 -1.929560e-03 -1.300000e+00 -1.970687e-03 -1.400000e+00 -2.010105e-03 -1.500000e+00 -2.048084e-03 -1.600000e+00 -2.084863e-03 -1.700000e+00 -2.120642e-03 -1.800000e+00 -2.155590e-03 -2.000000e-01 -1.081665e-03 -3.000000e-01 -1.508769e-03 -4.000000e-01 -1.855202e-03 -5.000000e-01 -2.124010e-03 -6.000000e-01 -2.320125e-03 -7.000000e-01 -2.451456e-03 -8.000000e-01 -2.533611e-03 -9.000000e-01 -2.597183e-03 -1.000000e+00 -2.661565e-03 -1.100000e+00 -2.723801e-03 -1.200000e+00 -2.783601e-03 -1.300000e+00 -2.840941e-03 -1.400000e+00 -2.895905e-03 -1.500000e+00 -2.948660e-03 -1.600000e+00 -2.999414e-03 -1.700000e+00 -3.048388e-03 -1.800000e+00 -3.095797e-03 -2.000000e-01 -1.307889e-03 -3.000000e-01 -1.871382e-03 -4.000000e-01 -2.364605e-03 -5.000000e-01 -2.786843e-03 -6.000000e-01 -3.140223e-03 -7.000000e-01 -3.428196e-03 -8.000000e-01 -3.654996e-03 -9.000000e-01 -3.826203e-03 -1.000000e+00 -3.949977e-03 -1.100000e+00 -4.038382e-03 -1.200000e+00 -4.111342e-03 -1.300000e+00 -4.187574e-03 -1.400000e+00 -4.262901e-03 -1.500000e+00 -4.335943e-03 -1.600000e+00 -4.406703e-03 -1.700000e+00 -4.475214e-03 -1.800000e+00 -4.541549e-03 -2.000000e-01 -1.452477e-03 -3.000000e-01 -2.110444e-03 -4.000000e-01 -2.710854e-03 -5.000000e-01 -3.250032e-03 -6.000000e-01 -3.727312e-03 -7.000000e-01 -4.143933e-03 -8.000000e-01 -4.502221e-03 -9.000000e-01 -4.805104e-03 -1.000000e+00 -5.055996e-03 -1.100000e+00 -5.259045e-03 -1.200000e+00 -5.419544e-03 -1.300000e+00 -5.544186e-03 -1.400000e+00 -5.641219e-03 -1.500000e+00 -5.721954e-03 -1.600000e+00 -5.803017e-03 -1.700000e+00 -5.887078e-03 -1.800000e+00 -5.969385e-03 -2.000000e-01 -7.048207e-05 -3.000000e-01 -7.777882e-05 -4.000000e-01 -8.414383e-05 -5.000000e-01 -9.018929e-05 -6.000000e-01 -9.614311e-05 -7.000000e-01 -1.021107e-04 -8.000000e-01 -1.081485e-04 -9.000000e-01 -1.142926e-04 -1.000000e+00 -1.205686e-04 -1.100000e+00 -1.269966e-04 -1.200000e+00 -1.335934e-04 -1.300000e+00 -1.403737e-04 -1.400000e+00 -1.473509e-04 -1.500000e+00 -1.545378e-04 -1.600000e+00 -1.619467e-04 -1.700000e+00 -1.695900e-04 -1.800000e+00 -1.774800e-04 -2.000000e-01 -2.800741e-04 -3.000000e-01 -3.295990e-04 -4.000000e-01 -3.530656e-04 -5.000000e-01 -3.725860e-04 -6.000000e-01 -3.904889e-04 -7.000000e-01 -4.070695e-04 -8.000000e-01 -4.226783e-04 -9.000000e-01 -4.376140e-04 -1.000000e+00 -4.520992e-04 -1.100000e+00 -4.662936e-04 -1.200000e+00 -4.803122e-04 -1.300000e+00 -4.942392e-04 -1.400000e+00 -5.081379e-04 -1.500000e+00 -5.220571e-04 -1.600000e+00 -5.360359e-04 -1.700000e+00 -5.501059e-04 -1.800000e+00 -5.642939e-04 -2.000000e-01 -5.031384e-04 -3.000000e-01 -6.576240e-04 -4.000000e-01 -7.515622e-04 -5.000000e-01 -8.009734e-04 -6.000000e-01 -8.355758e-04 -7.000000e-01 -8.681302e-04 -8.000000e-01 -8.990473e-04 -9.000000e-01 -9.282416e-04 -1.000000e+00 -9.558646e-04 -1.100000e+00 -9.821648e-04 -1.200000e+00 -1.007397e-03 -1.300000e+00 -1.031786e-03 -1.400000e+00 -1.055517e-03 -1.500000e+00 -1.078742e-03 -1.600000e+00 -1.101581e-03 -1.700000e+00 -1.124131e-03 -1.800000e+00 -1.146471e-03 -2.000000e-01 -6.959330e-04 -3.000000e-01 -9.532572e-04 -4.000000e-01 -1.148970e-03 -5.000000e-01 -1.286245e-03 -6.000000e-01 -1.372830e-03 -7.000000e-01 -1.426551e-03 -8.000000e-01 -1.471707e-03 -9.000000e-01 -1.515807e-03 -1.000000e+00 -1.558407e-03 -1.100000e+00 -1.599266e-03 -1.200000e+00 -1.638370e-03 -1.300000e+00 -1.675837e-03 -1.400000e+00 -1.711848e-03 -1.500000e+00 -1.746599e-03 -1.600000e+00 -1.780279e-03 -1.700000e+00 -1.813056e-03 -1.800000e+00 -1.845077e-03 -2.000000e-01 -8.567307e-04 -3.000000e-01 -1.203567e-03 -4.000000e-01 -1.491821e-03 -5.000000e-01 -1.722451e-03 -6.000000e-01 -1.898229e-03 -7.000000e-01 -2.024030e-03 -8.000000e-01 -2.108896e-03 -9.000000e-01 -2.168519e-03 -1.000000e+00 -2.222486e-03 -1.100000e+00 -2.276267e-03 -1.200000e+00 -2.328705e-03 -1.300000e+00 -2.379489e-03 -1.400000e+00 -2.428535e-03 -1.500000e+00 -2.475869e-03 -1.600000e+00 -2.521592e-03 -1.700000e+00 -2.565837e-03 -1.800000e+00 -2.608755e-03 -2.000000e-01 -1.043799e-03 -3.000000e-01 -1.499163e-03 -4.000000e-01 -1.903166e-03 -5.000000e-01 -2.254283e-03 -6.000000e-01 -2.553062e-03 -7.000000e-01 -2.801366e-03 -8.000000e-01 -3.001972e-03 -9.000000e-01 -3.158760e-03 -1.000000e+00 -3.277335e-03 -1.100000e+00 -3.365603e-03 -1.200000e+00 -3.434439e-03 -1.300000e+00 -3.497962e-03 -1.400000e+00 -3.562796e-03 -1.500000e+00 -3.626862e-03 -1.600000e+00 -3.689441e-03 -1.700000e+00 -3.750413e-03 -1.800000e+00 -3.809753e-03 -2.000000e-01 -1.175822e-03 -3.000000e-01 -1.711572e-03 -4.000000e-01 -2.204512e-03 -5.000000e-01 -2.651441e-03 -6.000000e-01 -3.051080e-03 -7.000000e-01 -3.403606e-03 -8.000000e-01 -3.710221e-03 -9.000000e-01 -3.972823e-03 -1.000000e+00 -4.193864e-03 -1.100000e+00 -4.376431e-03 -1.200000e+00 -4.524456e-03 -1.300000e+00 -4.642868e-03 -1.400000e+00 -4.737574e-03 -1.500000e+00 -4.815621e-03 -1.600000e+00 -4.886041e-03 -1.700000e+00 -4.957464e-03 -1.800000e+00 -5.029892e-03 -2.000000e-01 -1.121237e-04 -3.000000e-01 -1.309135e-04 -4.000000e-01 -1.455402e-04 -5.000000e-01 -1.596307e-04 -6.000000e-01 -1.736839e-04 -7.000000e-01 -1.878677e-04 -8.000000e-01 -2.022881e-04 -9.000000e-01 -2.170205e-04 -1.000000e+00 -2.321203e-04 -1.100000e+00 -2.476308e-04 -1.200000e+00 -2.635873e-04 -1.300000e+00 -2.800198e-04 -1.400000e+00 -2.969557e-04 -1.500000e+00 -3.144205e-04 -1.600000e+00 -3.324387e-04 -1.700000e+00 -3.510346e-04 -1.800000e+00 -3.702325e-04 -2.000000e-01 -2.568047e-04 -3.000000e-01 -3.224265e-04 -4.000000e-01 -3.586575e-04 -5.000000e-01 -3.832018e-04 -6.000000e-01 -4.052936e-04 -7.000000e-01 -4.263704e-04 -8.000000e-01 -4.466132e-04 -9.000000e-01 -4.662055e-04 -1.000000e+00 -4.853435e-04 -1.100000e+00 -5.041977e-04 -1.200000e+00 -5.229044e-04 -1.300000e+00 -5.415693e-04 -1.400000e+00 -5.602743e-04 -1.500000e+00 -5.790839e-04 -1.600000e+00 -5.980492e-04 -1.700000e+00 -6.172125e-04 -1.800000e+00 -6.366086e-04 -2.000000e-01 -4.062236e-04 -3.000000e-01 -5.438546e-04 -4.000000e-01 -6.398475e-04 -5.000000e-01 -7.004547e-04 -6.000000e-01 -7.391200e-04 -7.000000e-01 -7.705702e-04 -8.000000e-01 -8.004698e-04 -9.000000e-01 -8.293598e-04 -1.000000e+00 -8.571793e-04 -1.100000e+00 -8.839701e-04 -1.200000e+00 -9.098589e-04 -1.300000e+00 -9.349997e-04 -1.400000e+00 -9.595427e-04 -1.500000e+00 -9.836219e-04 -1.600000e+00 -1.007352e-03 -1.700000e+00 -1.030828e-03 -1.800000e+00 -1.054132e-03 -2.000000e-01 -5.417036e-04 -3.000000e-01 -7.503617e-04 -4.000000e-01 -9.165237e-04 -5.000000e-01 -1.041912e-03 -6.000000e-01 -1.130477e-03 -7.000000e-01 -1.190180e-03 -8.000000e-01 -1.233518e-03 -9.000000e-01 -1.272053e-03 -1.000000e+00 -1.309574e-03 -1.100000e+00 -1.346198e-03 -1.200000e+00 -1.381750e-03 -1.300000e+00 -1.416169e-03 -1.400000e+00 -1.449493e-03 -1.500000e+00 -1.481814e-03 -1.600000e+00 -1.513248e-03 -1.700000e+00 -1.543915e-03 -1.800000e+00 -1.573930e-03 -2.000000e-01 -6.600607e-04 -3.000000e-01 -9.331176e-04 -4.000000e-01 -1.165342e-03 -5.000000e-01 -1.356922e-03 -6.000000e-01 -1.509429e-03 -7.000000e-01 -1.625787e-03 -8.000000e-01 -1.710973e-03 -9.000000e-01 -1.772787e-03 -1.000000e+00 -1.821565e-03 -1.100000e+00 -1.866673e-03 -1.200000e+00 -1.911176e-03 -1.300000e+00 -1.954928e-03 -1.400000e+00 -1.997681e-03 -1.500000e+00 -2.039319e-03 -1.600000e+00 -2.079822e-03 -1.700000e+00 -2.119222e-03 -1.800000e+00 -2.157592e-03 -2.000000e-01 -8.062250e-04 -3.000000e-01 -1.161256e-03 -4.000000e-01 -1.479878e-03 -5.000000e-01 -1.760721e-03 -6.000000e-01 -2.003728e-03 -7.000000e-01 -2.209874e-03 -8.000000e-01 -2.380939e-03 -9.000000e-01 -2.519500e-03 -1.000000e+00 -2.629170e-03 -1.100000e+00 -2.714822e-03 -1.200000e+00 -2.782563e-03 -1.300000e+00 -2.839569e-03 -1.400000e+00 -2.892985e-03 -1.500000e+00 -2.946254e-03 -1.600000e+00 -2.999174e-03 -1.700000e+00 -3.051272e-03 -1.800000e+00 -3.102364e-03 -2.000000e-01 -9.184100e-04 -3.000000e-01 -1.338302e-03 -4.000000e-01 -1.727087e-03 -5.000000e-01 -2.082467e-03 -6.000000e-01 -2.403247e-03 -7.000000e-01 -2.689204e-03 -8.000000e-01 -2.940909e-03 -9.000000e-01 -3.159550e-03 -1.000000e+00 -3.346822e-03 -1.100000e+00 -3.504914e-03 -1.200000e+00 -3.636583e-03 -1.300000e+00 -3.745215e-03 -1.400000e+00 -3.834767e-03 -1.500000e+00 -3.909652e-03 -1.600000e+00 -3.974689e-03 -1.700000e+00 -4.035013e-03 -1.800000e+00 -4.094716e-03 tmpk8ny_4pz/tests/hisim/pmos/reference/65_acFreq_COTHRML=1.standard0000644000175000017500000002530213546075722025154 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1258.925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584.893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995.262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511.886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162.278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981.072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011.872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309.573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943.282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 10000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589.25 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848.93 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952.62 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118.86 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622.78 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810.72 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118.72 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095.73 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432.82 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 125892.5 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 158489.3 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 199526.2 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 251188.6 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 316227.8 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 398107.2 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 501187.2 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 630957.3 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 794328.2 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 1000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 1258925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 10000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589250 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848930 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952620 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118860 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622780 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810720 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118720 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095730 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432820 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258.925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584.893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995.262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511.886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162.278 2.08988054797393e-14 1.68486984597449e-14 3.40873274812869e-15 3981.072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011.872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309.573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943.282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589.25 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848.93 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952.62 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118.86 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622.78 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810.72 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118.72 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095.73 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432.82 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 125892.5 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 158489.3 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 199526.2 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 251188.6 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 316227.8 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 398107.2 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 501187.2 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 630957.3 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 794328.2 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 1000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162278 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 3981072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589250 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848930 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952620 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118860 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622780 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810720 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118720 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095730 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432820 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258.925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584.893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995.262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511.886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162.278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981.072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011.872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309.573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943.282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589.25 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848.93 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952.62 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118.86 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622.78 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810.72 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118.72 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095.73 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432.82 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 125892.5 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 158489.3 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 199526.2 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 251188.6 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 316227.8 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 398107.2 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 501187.2 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 630957.3 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 794328.2 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 1000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589250 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848930 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952620 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118860 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622780 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810720 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118720 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095730 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432820 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/55_acFreq_COADOV=1.standard0000644000175000017500000002530213546075722025016 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1258.925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584.893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995.262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511.886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162.278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981.072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011.872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309.573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943.282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 10000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589.25 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848.93 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952.62 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118.86 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622.78 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810.72 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118.72 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095.73 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432.82 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 125892.5 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 158489.3 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 199526.2 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 251188.6 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 316227.8 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 398107.2 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 501187.2 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 630957.3 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 794328.2 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 1000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 1258925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 10000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589250 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848930 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952620 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118860 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622780 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810720 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118720 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095730 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432820 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258.925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584.893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995.262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511.886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162.278 2.08988054797393e-14 1.68486984597449e-14 3.40873274812869e-15 3981.072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011.872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309.573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943.282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589.25 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848.93 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952.62 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118.86 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622.78 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810.72 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118.72 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095.73 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432.82 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 125892.5 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 158489.3 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 199526.2 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 251188.6 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 316227.8 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 398107.2 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 501187.2 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 630957.3 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 794328.2 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 1000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162278 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 3981072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589250 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848930 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952620 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118860 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622780 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810720 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118720 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095730 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432820 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258.925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584.893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995.262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511.886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162.278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981.072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011.872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309.573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943.282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589.25 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848.93 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952.62 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118.86 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622.78 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810.72 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118.72 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095.73 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432.82 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 125892.5 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 158489.3 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 199526.2 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 251188.6 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 316227.8 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 398107.2 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 501187.2 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 630957.3 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 794328.2 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 1000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589250 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848930 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952620 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118860 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622780 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810720 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118720 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095730 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432820 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/49_acFreq_COIIGS=1.standard0000644000175000017500000002530213546075722025023 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1258.925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584.893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995.262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511.886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162.278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981.072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011.872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309.573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943.282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 10000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589.25 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848.93 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952.62 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118.86 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622.78 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810.72 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118.72 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095.73 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432.82 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 125892.5 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 158489.3 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 199526.2 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 251188.6 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 316227.8 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 398107.2 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 501187.2 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 630957.3 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 794328.2 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 1000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 1258925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 10000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589250 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848930 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952620 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118860 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622780 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810720 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118720 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095730 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432820 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258.925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584.893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995.262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511.886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162.278 2.08988054797393e-14 1.68486984597449e-14 3.40873274812869e-15 3981.072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011.872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309.573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943.282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589.25 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848.93 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952.62 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118.86 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622.78 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810.72 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118.72 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095.73 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432.82 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 125892.5 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 158489.3 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 199526.2 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 251188.6 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 316227.8 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 398107.2 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 501187.2 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 630957.3 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 794328.2 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 1000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162278 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 3981072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589250 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848930 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952620 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118860 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622780 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810720 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118720 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095730 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432820 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258.925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584.893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995.262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511.886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162.278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981.072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011.872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309.573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943.282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589.25 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848.93 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952.62 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118.86 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622.78 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810.72 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118.72 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095.73 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432.82 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 125892.5 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 158489.3 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 199526.2 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 251188.6 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 316227.8 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 398107.2 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 501187.2 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 630957.3 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 794328.2 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 1000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589250 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848930 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952620 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118860 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622780 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810720 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118720 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095730 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432820 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/53_acFreq_COSTI=1.standard0000644000175000017500000002530213546075722024722 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1258.925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584.893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995.262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511.886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162.278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981.072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011.872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309.573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943.282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 10000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589.25 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848.93 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952.62 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118.86 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622.78 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810.72 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118.72 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095.73 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432.82 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 125892.5 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 158489.3 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 199526.2 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 251188.6 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 316227.8 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 398107.2 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 501187.2 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 630957.3 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 794328.2 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 1000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 1258925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 10000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589250 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848930 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952620 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118860 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622780 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810720 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118720 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095730 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432820 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258.925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584.893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995.262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511.886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162.278 2.08988054797393e-14 1.68486984597449e-14 3.40873274812869e-15 3981.072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011.872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309.573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943.282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589.25 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848.93 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952.62 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118.86 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622.78 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810.72 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118.72 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095.73 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432.82 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 125892.5 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 158489.3 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 199526.2 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 251188.6 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 316227.8 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 398107.2 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 501187.2 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 630957.3 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 794328.2 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 1000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162278 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 3981072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589250 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848930 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952620 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118860 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622780 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810720 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118720 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095730 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432820 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258.925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584.893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995.262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511.886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162.278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981.072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011.872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309.573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943.282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589.25 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848.93 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952.62 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118.86 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622.78 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810.72 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118.72 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095.73 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432.82 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 125892.5 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 158489.3 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 199526.2 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 251188.6 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 316227.8 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 398107.2 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 501187.2 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 630957.3 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 794328.2 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 1000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589250 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848930 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952620 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118860 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622780 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810720 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118720 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095730 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432820 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/61_acFreq_CORBNET=1.standard0000644000175000017500000002530213546075722025134 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1258.925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584.893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995.262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511.886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162.278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981.072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011.872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309.573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943.282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 10000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589.25 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848.93 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952.62 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118.86 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622.78 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810.72 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118.72 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095.73 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432.82 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 125892.5 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 158489.3 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 199526.2 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 251188.6 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 316227.8 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 398107.2 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 501187.2 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 630957.3 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 794328.2 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 1000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 1258925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 10000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589250 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848930 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952620 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118860 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622780 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810720 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118720 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095730 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432820 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258.925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584.893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995.262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511.886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162.278 2.08988054797393e-14 1.68486984597449e-14 3.40873274812869e-15 3981.072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011.872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309.573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943.282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589.25 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848.93 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952.62 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118.86 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622.78 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810.72 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118.72 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095.73 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432.82 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 125892.5 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 158489.3 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 199526.2 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 251188.6 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 316227.8 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 398107.2 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 501187.2 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 630957.3 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 794328.2 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 1000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162278 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 3981072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589250 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848930 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952620 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118860 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622780 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810720 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118720 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095730 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432820 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258.925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584.893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995.262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511.886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162.278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981.072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011.872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309.573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943.282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589.25 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848.93 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952.62 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118.86 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622.78 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810.72 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118.72 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095.73 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432.82 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 125892.5 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 158489.3 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 199526.2 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 251188.6 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 316227.8 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 398107.2 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 501187.2 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 630957.3 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 794328.2 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 1000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589250 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848930 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952620 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118860 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622780 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810720 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118720 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095730 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432820 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/80_noise_COIGN=0_T150.standard0000644000175000017500000000353213546075722025325 0ustar carstencarstenFreq N(g) 1000 0 1258.925 0 1584.893 0 1995.262 0 2511.886 0 3162.278 0 3981.072 0 5011.872 0 6309.573 0 7943.282 0 10000 0 12589.25 0 15848.93 0 19952.62 0 25118.86 0 31622.78 0 39810.72 0 50118.72 0 63095.73 0 79432.82 0 100000 0 125892.5 0 158489.3 0 199526.2 0 251188.6 0 316227.8 0 398107.2 0 501187.2 0 630957.3 0 794328.2 0 1000000 0 1258925 0 1584893 0 1995262 0 2511886 0 3162278 0 3981072 0 5011872 0 6309573 0 7943282 0 10000000 0 12589250 0 15848930 0 19952620 0 25118860 0 31622780 0 39810720 0 50118720 0 63095730 0 79432820 0 100000000 0 125892500 0 158489300 0 199526200 0 251188600 0 316227800 0 398107200 0 501187200 0 630957300 0 794328200 0 1000000000 0 1258925000 0 1584893000 0 1995262000 0 2511886000 0 3162278000 0 3981072000 0 5011872000 0 6309573000 0 7943282000 0 10000000000 0 12589250000 0 15848930000 0 19952620000 0 25118860000 0 31622780000 0 39810720000 0 50118720000 0 63095730000 0 79432820000 0 100000000000 0 1000 0 1258.925 0 1584.893 0 1995.262 0 2511.886 0 3162.278 0 3981.072 0 5011.872 0 6309.573 0 7943.282 0 10000 0 12589.25 0 15848.93 0 19952.62 0 25118.86 0 31622.78 0 39810.72 0 50118.72 0 63095.73 0 79432.82 0 100000 0 125892.5 0 158489.3 0 199526.2 0 251188.6 0 316227.8 0 398107.2 0 501187.2 0 630957.3 0 794328.2 0 1000000 0 1258925 0 1584893 0 1995262 0 2511886 0 3162278 0 3981072 0 5011872 0 6309573 0 7943282 0 10000000 0 12589250 0 15848930 0 19952620 0 25118860 0 31622780 0 39810720 0 50118720 0 63095730 0 79432820 0 100000000 0 125892500 0 158489300 0 199526200 0 251188600 0 316227800 0 398107200 0 501187200 0 630957300 0 794328200 0 1000000000 0 1258925000 0 1584893000 0 1995262000 0 2511886000 0 3162278000 0 3981072000 0 5011872000 0 6309573000 0 7943282000 0 10000000000 0 12589250000 0 15848930000 0 19952620000 0 25118860000 0 31622780000 0 39810720000 0 50118720000 0 63095730000 0 79432820000 0 100000000000 0 tmpk8ny_4pz/tests/hisim/pmos/reference/75_noise_COIGN=1_T27.standard0000644000175000017500000000710013546075722025250 0ustar carstencarstenFreq N(g) 1000 9.580197e-39 1258.925 1.518359e-38 1584.893 2.406437e-38 1995.262 3.813945e-38 2511.886 6.044696e-38 3162.278 9.580197e-38 3981.072 1.518359e-37 5011.872 2.406437e-37 6309.573 3.813945e-37 7943.282 6.044696e-37 10000 9.580197e-37 12589.25 1.518359e-36 15848.93 2.406437e-36 19952.62 3.813945e-36 25118.86 6.044696e-36 31622.78 9.580197e-36 39810.72 1.518359e-35 50118.72 2.406437e-35 63095.73 3.813945e-35 79432.82 6.044696e-35 100000 9.580197e-35 125892.5 1.518359e-34 158489.3 2.406437e-34 199526.2 3.813945e-34 251188.6 6.044696e-34 316227.8 9.580197e-34 398107.2 1.518359e-33 501187.2 2.406437e-33 630957.3 3.813945e-33 794328.2 6.044696e-33 1000000 9.580197e-33 1258925 1.518359e-32 1584893 2.406437e-32 1995262 3.813945e-32 2511886 6.044696e-32 3162278 9.580197e-32 3981072 1.518359e-31 5011872 2.406437e-31 6309573 3.813945e-31 7943282 6.044696e-31 10000000 9.580197e-31 12589250 1.518359e-30 15848930 2.406437e-30 19952620 3.813945e-30 25118860 6.044696e-30 31622780 9.580197e-30 39810720 1.518359e-29 50118720 2.406437e-29 63095730 3.813945e-29 79432820 6.044696e-29 100000000 9.580197e-29 125892500 1.518359e-28 158489300 2.406437e-28 199526200 3.813945e-28 251188600 6.044696e-28 316227800 9.580197e-28 398107200 1.518359e-27 501187200 2.406437e-27 630957300 3.813945e-27 794328200 6.044696e-27 1000000000 9.580197e-27 1258925000 1.518359e-26 1584893000 2.406437e-26 1995262000 3.813945e-26 2511886000 6.044696e-26 3162278000 9.580197e-26 3981072000 1.518359e-25 5011872000 2.406437e-25 6309573000 3.813945e-25 7943282000 6.044696e-25 10000000000 9.580197e-25 12589250000 1.518359e-24 15848930000 2.406437e-24 19952620000 3.813945e-24 25118860000 6.044696e-24 31622780000 9.580197e-24 39810720000 1.518359e-23 50118720000 2.406437e-23 63095730000 3.813945e-23 79432820000 6.044696e-23 100000000000 9.580197e-23 1000 5.573819e-39 1258.925 8.833907e-39 1584.893 1.40008e-38 1995.262 2.218977e-38 2511.886 3.516842e-38 3162.278 5.573819e-38 3981.072 8.833907e-38 5011.872 1.40008e-37 6309.573 2.218977e-37 7943.282 3.516842e-37 10000 5.573819e-37 12589.25 8.833907e-37 15848.93 1.40008e-36 19952.62 2.218977e-36 25118.86 3.516842e-36 31622.78 5.573819e-36 39810.72 8.833907e-36 50118.72 1.40008e-35 63095.73 2.218977e-35 79432.82 3.516842e-35 100000 5.573819e-35 125892.5 8.833907e-35 158489.3 1.40008e-34 199526.2 2.218977e-34 251188.6 3.516842e-34 316227.8 5.573819e-34 398107.2 8.833907e-34 501187.2 1.40008e-33 630957.3 2.218977e-33 794328.2 3.516842e-33 1000000 5.573819e-33 1258925 8.833907e-33 1584893 1.40008e-32 1995262 2.218977e-32 2511886 3.516842e-32 3162278 5.573819e-32 3981072 8.833907e-32 5011872 1.40008e-31 6309573 2.218977e-31 7943282 3.516842e-31 10000000 5.573819e-31 12589250 8.833907e-31 15848930 1.40008e-30 19952620 2.218977e-30 25118860 3.516842e-30 31622780 5.573819e-30 39810720 8.833907e-30 50118720 1.40008e-29 63095730 2.218977e-29 79432820 3.516842e-29 100000000 5.573819e-29 125892500 8.833907e-29 158489300 1.40008e-28 199526200 2.218977e-28 251188600 3.516842e-28 316227800 5.573819e-28 398107200 8.833907e-28 501187200 1.40008e-27 630957300 2.218977e-27 794328200 3.516842e-27 1000000000 5.573819e-27 1258925000 8.833907e-27 1584893000 1.40008e-26 1995262000 2.218977e-26 2511886000 3.516842e-26 3162278000 5.573819e-26 3981072000 8.833907e-26 5011872000 1.40008e-25 6309573000 2.218977e-25 7943282000 3.516842e-25 10000000000 5.573819e-25 12589250000 8.833907e-25 15848930000 1.40008e-24 19952620000 2.218977e-24 25118860000 3.516842e-24 31622780000 5.573819e-24 39810720000 8.833907e-24 50118720000 1.40008e-23 63095730000 2.218977e-23 79432820000 3.516842e-23 100000000000 5.573819e-23 tmpk8ny_4pz/tests/hisim/pmos/reference/15_dcSweep_COISTI=1_NSUBP.standard0000644000175000017500000002342613546075722026176 0ustar carstencarstenV(d) I(d) -2.000000e-01 -4.375632e-04 -3.000000e-01 -6.134099e-04 -4.000000e-01 -6.766302e-04 -5.000000e-01 -7.154321e-04 -6.000000e-01 -7.526338e-04 -7.000000e-01 -7.902214e-04 -8.000000e-01 -8.284049e-04 -9.000000e-01 -8.672720e-04 -1.000000e+00 -9.069252e-04 -1.100000e+00 -9.474784e-04 -1.200000e+00 -9.890482e-04 -1.300000e+00 -1.031750e-03 -1.400000e+00 -1.075696e-03 -1.500000e+00 -1.121000e-03 -1.600000e+00 -1.167774e-03 -1.700000e+00 -1.216132e-03 -1.800000e+00 -1.266192e-03 -2.000000e-01 -6.366620e-04 -3.000000e-01 -8.506634e-04 -4.000000e-01 -1.036636e-03 -5.000000e-01 -1.168707e-03 -6.000000e-01 -1.254491e-03 -7.000000e-01 -1.324263e-03 -8.000000e-01 -1.388928e-03 -9.000000e-01 -1.451609e-03 -1.000000e+00 -1.513492e-03 -1.100000e+00 -1.575189e-03 -1.200000e+00 -1.637082e-03 -1.300000e+00 -1.699444e-03 -1.400000e+00 -1.762476e-03 -1.500000e+00 -1.826343e-03 -1.600000e+00 -1.891178e-03 -1.700000e+00 -1.957096e-03 -1.800000e+00 -2.024199e-03 -2.000000e-01 -8.879574e-04 -3.000000e-01 -1.210855e-03 -4.000000e-01 -1.460519e-03 -5.000000e-01 -1.656579e-03 -6.000000e-01 -1.824409e-03 -7.000000e-01 -1.958360e-03 -8.000000e-01 -2.066388e-03 -9.000000e-01 -2.161324e-03 -1.000000e+00 -2.249915e-03 -1.100000e+00 -2.335082e-03 -1.200000e+00 -2.418234e-03 -1.300000e+00 -2.500181e-03 -1.400000e+00 -2.581452e-03 -1.500000e+00 -2.662427e-03 -1.600000e+00 -2.743392e-03 -1.700000e+00 -2.824571e-03 -1.800000e+00 -2.906144e-03 -2.000000e-01 -1.104019e-03 -3.000000e-01 -1.541268e-03 -4.000000e-01 -1.903273e-03 -5.000000e-01 -2.195426e-03 -6.000000e-01 -2.425460e-03 -7.000000e-01 -2.611833e-03 -8.000000e-01 -2.776108e-03 -9.000000e-01 -2.918263e-03 -1.000000e+00 -3.043099e-03 -1.100000e+00 -3.157259e-03 -1.200000e+00 -3.265076e-03 -1.300000e+00 -3.368889e-03 -1.400000e+00 -3.469996e-03 -1.500000e+00 -3.569197e-03 -1.600000e+00 -3.667039e-03 -1.700000e+00 -3.763928e-03 -1.800000e+00 -3.860181e-03 -2.000000e-01 -1.278380e-03 -3.000000e-01 -1.814836e-03 -4.000000e-01 -2.278695e-03 -5.000000e-01 -2.673493e-03 -6.000000e-01 -3.003780e-03 -7.000000e-01 -3.274543e-03 -8.000000e-01 -3.493694e-03 -9.000000e-01 -3.676408e-03 -1.000000e+00 -3.841892e-03 -1.100000e+00 -3.991947e-03 -1.200000e+00 -4.129284e-03 -1.300000e+00 -4.257837e-03 -1.400000e+00 -4.380498e-03 -1.500000e+00 -4.499073e-03 -1.600000e+00 -4.614666e-03 -1.700000e+00 -4.727993e-03 -1.800000e+00 -4.839556e-03 -2.000000e-01 -1.467635e-03 -3.000000e-01 -2.120312e-03 -4.000000e-01 -2.709416e-03 -5.000000e-01 -3.234423e-03 -6.000000e-01 -3.697549e-03 -7.000000e-01 -4.102175e-03 -8.000000e-01 -4.451947e-03 -9.000000e-01 -4.750729e-03 -1.000000e+00 -5.003334e-03 -1.100000e+00 -5.216406e-03 -1.200000e+00 -5.399848e-03 -1.300000e+00 -5.568512e-03 -1.400000e+00 -5.727837e-03 -1.500000e+00 -5.878265e-03 -1.600000e+00 -6.021903e-03 -1.700000e+00 -6.160489e-03 -1.800000e+00 -6.295254e-03 -2.000000e-01 -1.584796e-03 -3.000000e-01 -2.317035e-03 -4.000000e-01 -2.997592e-03 -5.000000e-01 -3.622839e-03 -6.000000e-01 -4.192069e-03 -7.000000e-01 -4.706489e-03 -8.000000e-01 -5.168369e-03 -9.000000e-01 -5.580438e-03 -1.000000e+00 -5.945574e-03 -1.100000e+00 -6.266811e-03 -1.200000e+00 -6.547601e-03 -1.300000e+00 -6.792107e-03 -1.400000e+00 -7.005380e-03 -1.500000e+00 -7.193750e-03 -1.600000e+00 -7.366152e-03 -1.700000e+00 -7.531367e-03 -1.800000e+00 -7.690260e-03 -2.000000e-01 -4.618781e-04 -3.000000e-01 -6.710798e-04 -4.000000e-01 -7.787772e-04 -5.000000e-01 -8.334222e-04 -6.000000e-01 -8.799336e-04 -7.000000e-01 -9.251193e-04 -8.000000e-01 -9.701958e-04 -9.000000e-01 -1.015593e-03 -1.000000e+00 -1.061573e-03 -1.100000e+00 -1.108333e-03 -1.200000e+00 -1.156041e-03 -1.300000e+00 -1.204842e-03 -1.400000e+00 -1.254868e-03 -1.500000e+00 -1.306243e-03 -1.600000e+00 -1.359083e-03 -1.700000e+00 -1.413505e-03 -1.800000e+00 -1.469625e-03 -2.000000e-01 -5.945111e-04 -3.000000e-01 -8.190441e-04 -4.000000e-01 -1.013039e-03 -5.000000e-01 -1.167397e-03 -6.000000e-01 -1.269611e-03 -7.000000e-01 -1.346317e-03 -8.000000e-01 -1.414083e-03 -9.000000e-01 -1.478256e-03 -1.000000e+00 -1.540746e-03 -1.100000e+00 -1.602456e-03 -1.200000e+00 -1.663920e-03 -1.300000e+00 -1.725498e-03 -1.400000e+00 -1.787455e-03 -1.500000e+00 -1.849993e-03 -1.600000e+00 -1.913273e-03 -1.700000e+00 -1.977433e-03 -1.800000e+00 -2.042586e-03 -2.000000e-01 -7.626544e-04 -3.000000e-01 -1.062408e-03 -4.000000e-01 -1.310839e-03 -5.000000e-01 -1.514445e-03 -6.000000e-01 -1.685904e-03 -7.000000e-01 -1.826550e-03 -8.000000e-01 -1.938106e-03 -9.000000e-01 -2.032639e-03 -1.000000e+00 -2.118757e-03 -1.100000e+00 -2.200448e-03 -1.200000e+00 -2.279548e-03 -1.300000e+00 -2.357033e-03 -1.400000e+00 -2.433513e-03 -1.500000e+00 -2.509412e-03 -1.600000e+00 -2.585050e-03 -1.700000e+00 -2.660674e-03 -1.800000e+00 -2.736485e-03 -2.000000e-01 -9.169463e-04 -3.000000e-01 -1.297238e-03 -4.000000e-01 -1.624681e-03 -5.000000e-01 -1.901761e-03 -6.000000e-01 -2.131880e-03 -7.000000e-01 -2.321951e-03 -8.000000e-01 -2.483871e-03 -9.000000e-01 -2.624051e-03 -1.000000e+00 -2.745316e-03 -1.100000e+00 -2.854015e-03 -1.200000e+00 -2.955250e-03 -1.300000e+00 -3.051936e-03 -1.400000e+00 -3.145640e-03 -1.500000e+00 -3.237266e-03 -1.600000e+00 -3.327396e-03 -1.700000e+00 -3.416446e-03 -1.800000e+00 -3.504736e-03 -2.000000e-01 -1.048769e-03 -3.000000e-01 -1.502312e-03 -4.000000e-01 -1.904783e-03 -5.000000e-01 -2.257181e-03 -6.000000e-01 -2.561732e-03 -7.000000e-01 -2.821125e-03 -8.000000e-01 -3.039204e-03 -9.000000e-01 -3.222463e-03 -1.000000e+00 -3.381584e-03 -1.100000e+00 -3.524806e-03 -1.200000e+00 -3.654539e-03 -1.300000e+00 -3.774470e-03 -1.400000e+00 -3.887879e-03 -1.500000e+00 -3.996916e-03 -1.600000e+00 -4.102874e-03 -1.700000e+00 -4.206550e-03 -1.800000e+00 -4.308471e-03 -2.000000e-01 -1.203003e-03 -3.000000e-01 -1.746979e-03 -4.000000e-01 -2.245985e-03 -5.000000e-01 -2.698461e-03 -6.000000e-01 -3.104815e-03 -7.000000e-01 -3.466654e-03 -8.000000e-01 -3.786128e-03 -9.000000e-01 -4.065645e-03 -1.000000e+00 -4.308065e-03 -1.100000e+00 -4.517112e-03 -1.200000e+00 -4.697949e-03 -1.300000e+00 -4.858374e-03 -1.400000e+00 -5.007024e-03 -1.500000e+00 -5.146824e-03 -1.600000e+00 -5.279402e-03 -1.700000e+00 -5.406632e-03 -1.800000e+00 -5.529933e-03 -2.000000e-01 -1.310222e-03 -3.000000e-01 -1.920981e-03 -4.000000e-01 -2.494585e-03 -5.000000e-01 -3.027771e-03 -6.000000e-01 -3.519096e-03 -7.000000e-01 -3.968573e-03 -8.000000e-01 -4.377224e-03 -9.000000e-01 -4.746662e-03 -1.000000e+00 -5.078788e-03 -1.100000e+00 -5.375668e-03 -1.200000e+00 -5.639590e-03 -1.300000e+00 -5.873201e-03 -1.400000e+00 -6.079658e-03 -1.500000e+00 -6.262877e-03 -1.600000e+00 -6.428023e-03 -1.700000e+00 -6.581686e-03 -1.800000e+00 -6.728668e-03 -2.000000e-01 -4.712709e-04 -3.000000e-01 -6.918118e-04 -4.000000e-01 -8.596201e-04 -5.000000e-01 -9.496997e-04 -6.000000e-01 -1.014898e-03 -7.000000e-01 -1.074532e-03 -8.000000e-01 -1.132629e-03 -9.000000e-01 -1.190430e-03 -1.000000e+00 -1.248539e-03 -1.100000e+00 -1.307339e-03 -1.200000e+00 -1.367110e-03 -1.300000e+00 -1.428068e-03 -1.400000e+00 -1.490393e-03 -1.500000e+00 -1.554243e-03 -1.600000e+00 -1.619760e-03 -1.700000e+00 -1.687076e-03 -1.800000e+00 -1.756318e-03 -2.000000e-01 -5.462149e-04 -3.000000e-01 -7.743822e-04 -4.000000e-01 -9.779886e-04 -5.000000e-01 -1.153287e-03 -6.000000e-01 -1.282752e-03 -7.000000e-01 -1.375919e-03 -8.000000e-01 -1.453326e-03 -9.000000e-01 -1.524436e-03 -1.000000e+00 -1.592625e-03 -1.100000e+00 -1.659309e-03 -1.200000e+00 -1.725251e-03 -1.300000e+00 -1.790940e-03 -1.400000e+00 -1.856726e-03 -1.500000e+00 -1.922874e-03 -1.600000e+00 -1.989595e-03 -1.700000e+00 -2.057060e-03 -1.800000e+00 -2.125410e-03 -2.000000e-01 -6.500533e-04 -3.000000e-01 -9.232995e-04 -4.000000e-01 -1.163669e-03 -5.000000e-01 -1.373184e-03 -6.000000e-01 -1.553898e-03 -7.000000e-01 -1.705164e-03 -8.000000e-01 -1.826375e-03 -9.000000e-01 -1.925800e-03 -1.000000e+00 -2.013478e-03 -1.100000e+00 -2.095143e-03 -1.200000e+00 -2.173455e-03 -1.300000e+00 -2.249705e-03 -1.400000e+00 -2.324620e-03 -1.500000e+00 -2.398680e-03 -1.600000e+00 -2.472233e-03 -1.700000e+00 -2.545552e-03 -1.800000e+00 -2.618856e-03 -2.000000e-01 -7.531617e-04 -3.000000e-01 -1.078711e-03 -4.000000e-01 -1.369440e-03 -5.000000e-01 -1.626553e-03 -6.000000e-01 -1.851568e-03 -7.000000e-01 -2.046254e-03 -8.000000e-01 -2.212915e-03 -9.000000e-01 -2.354807e-03 -1.000000e+00 -2.476023e-03 -1.100000e+00 -2.582206e-03 -1.200000e+00 -2.679105e-03 -1.300000e+00 -2.770512e-03 -1.400000e+00 -2.858506e-03 -1.500000e+00 -2.944215e-03 -1.600000e+00 -3.028300e-03 -1.700000e+00 -3.111196e-03 -1.800000e+00 -3.193222e-03 -2.000000e-01 -8.468388e-04 -3.000000e-01 -1.222895e-03 -4.000000e-01 -1.564814e-03 -5.000000e-01 -1.872659e-03 -6.000000e-01 -2.147478e-03 -7.000000e-01 -2.390696e-03 -8.000000e-01 -2.603875e-03 -9.000000e-01 -2.788912e-03 -1.000000e+00 -2.948626e-03 -1.100000e+00 -3.087842e-03 -1.200000e+00 -3.211745e-03 -1.300000e+00 -3.324407e-03 -1.400000e+00 -3.429464e-03 -1.500000e+00 -3.529565e-03 -1.600000e+00 -3.626349e-03 -1.700000e+00 -3.720789e-03 -1.800000e+00 -3.813479e-03 -2.000000e-01 -9.646310e-04 -3.000000e-01 -1.406965e-03 -4.000000e-01 -1.818654e-03 -5.000000e-01 -2.198234e-03 -6.000000e-01 -2.545425e-03 -7.000000e-01 -2.860879e-03 -8.000000e-01 -3.145790e-03 -9.000000e-01 -3.401574e-03 -1.000000e+00 -3.629726e-03 -1.100000e+00 -3.831873e-03 -1.200000e+00 -4.009994e-03 -1.300000e+00 -4.167045e-03 -1.400000e+00 -4.307632e-03 -1.500000e+00 -4.436876e-03 -1.600000e+00 -4.558090e-03 -1.700000e+00 -4.673392e-03 -1.800000e+00 -4.784449e-03 -2.000000e-01 -1.054963e-03 -3.000000e-01 -1.550165e-03 -4.000000e-01 -2.019382e-03 -5.000000e-01 -2.460253e-03 -6.000000e-01 -2.871391e-03 -7.000000e-01 -3.252355e-03 -8.000000e-01 -3.603480e-03 -9.000000e-01 -3.925639e-03 -1.000000e+00 -4.220006e-03 -1.100000e+00 -4.487890e-03 -1.200000e+00 -4.730659e-03 -1.300000e+00 -4.949739e-03 -1.400000e+00 -5.146683e-03 -1.500000e+00 -5.323386e-03 -1.600000e+00 -5.482425e-03 -1.700000e+00 -5.627318e-03 -1.800000e+00 -5.762187e-03 tmpk8ny_4pz/tests/hisim/pmos/reference/70_acFreq_CODFM=1.standard0000644000175000017500000002530713546075722024675 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.11246037655987e-14 1.69852542591817e-14 3.49529242355868e-15 1258.925 2.11246083844011e-14 1.69852587613605e-14 3.49529248522067e-15 1584.893 2.11246107034753e-14 1.69852584467456e-14 3.49529256796162e-15 1995.262 2.11246096517556e-14 1.69852579656888e-14 3.49529193847184e-15 2511.886 2.11246084287713e-14 1.69852579500079e-14 3.49529240955469e-15 3162.278 2.11246074655805e-14 1.69852516633522e-14 3.49529143426464e-15 3981.072 2.11246041515614e-14 1.69852552407194e-14 3.49529156790984e-15 5011.872 2.11246079514424e-14 1.69852575094297e-14 3.49529312983344e-15 6309.573 2.11246097595272e-14 1.69852569097701e-14 3.49529168928738e-15 7943.282 2.1124599133106e-14 1.69852568646578e-14 3.49529154851327e-15 10000 2.11246037655987e-14 1.69852542591817e-14 3.49529242355868e-15 12589.25 2.11246083844011e-14 1.69852587613605e-14 3.49529248522067e-15 15848.93 2.11246107034753e-14 1.69852584467456e-14 3.49529256796162e-15 19952.62 2.11246096517556e-14 1.69852579656888e-14 3.49529193847184e-15 25118.86 2.11246084287713e-14 1.69852579500079e-14 3.49529240955469e-15 31622.78 2.11246074655805e-14 1.69852516633522e-14 3.49529143426464e-15 39810.72 2.11246041515614e-14 1.69852552407194e-14 3.49529156790984e-15 50118.72 2.11246079514424e-14 1.69852575094297e-14 3.49529312983344e-15 63095.73 2.11246097595272e-14 1.69852569097701e-14 3.49529168928738e-15 79432.82 2.1124599133106e-14 1.69852568646578e-14 3.49529154851327e-15 100000 2.11246037655987e-14 1.69852542591817e-14 3.49529242355868e-15 125892.5 2.11246083844011e-14 1.69852587613605e-14 3.49529248522067e-15 158489.3 2.11246107034753e-14 1.69852584467456e-14 3.49529256796162e-15 199526.2 2.11246096517556e-14 1.69852579656888e-14 3.49529193847184e-15 251188.6 2.11246084287713e-14 1.69852579500079e-14 3.49529240955469e-15 316227.8 2.11246074655805e-14 1.69852516633522e-14 3.49529143426464e-15 398107.2 2.11246041515614e-14 1.69852552407194e-14 3.49529156790984e-15 501187.2 2.11246079514424e-14 1.69852575094297e-14 3.49529312983344e-15 630957.3 2.11246097595272e-14 1.69852569097701e-14 3.49529168928738e-15 794328.2 2.1124599133106e-14 1.69852568646578e-14 3.49529154851327e-15 1000000 2.11246037655987e-14 1.69852542591817e-14 3.49529242355868e-15 1258925 2.11246083844011e-14 1.69852587613605e-14 3.49529248522067e-15 1584893 2.11246107034753e-14 1.69852584467456e-14 3.49529256796162e-15 1995262 2.11246096517556e-14 1.69852579656888e-14 3.49529193847184e-15 2511886 2.11246084287713e-14 1.69852579500079e-14 3.49529240955469e-15 3162278 2.11246074655805e-14 1.69852516633522e-14 3.49529143426464e-15 3981072 2.11246041515614e-14 1.69852552407194e-14 3.49529156790984e-15 5011872 2.11246079514424e-14 1.69852575094297e-14 3.49529312983344e-15 6309573 2.11246097595272e-14 1.69852569097701e-14 3.49529168928738e-15 7943282 2.1124599133106e-14 1.69852568646578e-14 3.49529154851327e-15 10000000 2.11246037655986e-14 1.69852542591817e-14 3.49529242355868e-15 12589250 2.11246083844011e-14 1.69852587613605e-14 3.49529248522067e-15 15848930 2.11246107034753e-14 1.69852584467456e-14 3.49529256796162e-15 19952620 2.11246096517556e-14 1.69852579656888e-14 3.49529193847184e-15 25118860 2.11246084287713e-14 1.69852579500079e-14 3.49529240955469e-15 31622780 2.11246074655805e-14 1.69852516633522e-14 3.49529143426464e-15 39810720 2.11246041515614e-14 1.69852552407194e-14 3.49529156790984e-15 50118720 2.11246079514424e-14 1.69852575094297e-14 3.49529312983344e-15 63095730 2.11246097595272e-14 1.69852569097701e-14 3.49529168928738e-15 79432820 2.1124599133106e-14 1.69852568646578e-14 3.49529154851327e-15 100000000 2.11246037655987e-14 1.69852542591817e-14 3.49529242355868e-15 1000 2.09056861413757e-14 1.68547949523293e-14 3.40821238799538e-15 1258.925 2.0905697250332e-14 1.68548046153418e-14 3.40821475362247e-15 1584.893 2.09056951199373e-14 1.68548028345556e-14 3.40821337150979e-15 1995.262 2.0905690662011e-14 1.68547999559503e-14 3.40821331084042e-15 2511.886 2.09056907534163e-14 1.68547981967284e-14 3.40821385067921e-15 3162.278 2.09056854822947e-14 1.68547933266758e-14 3.40821284742353e-15 3981.072 2.0905689107353e-14 1.68547953229405e-14 3.4082128809646e-15 5011.872 2.09056912778548e-14 1.68547992021923e-14 3.40821295600885e-15 6309.573 2.09056900583683e-14 1.68547990404061e-14 3.40821215244046e-15 7943.282 2.09056811961346e-14 1.6854797723214e-14 3.40821326239962e-15 10000 2.09056861413758e-14 1.68547949523293e-14 3.40821238799538e-15 12589.25 2.0905697250332e-14 1.68548046153418e-14 3.40821475362247e-15 15848.93 2.09056951199373e-14 1.68548028345556e-14 3.40821337150979e-15 19952.62 2.0905690662011e-14 1.68547999559503e-14 3.40821331084042e-15 25118.86 2.09056907534163e-14 1.68547981967284e-14 3.40821385067921e-15 31622.78 2.09056854822947e-14 1.68547933266758e-14 3.40821284742353e-15 39810.72 2.0905689107353e-14 1.68547953229405e-14 3.4082128809646e-15 50118.72 2.09056912778548e-14 1.68547992021923e-14 3.40821295600885e-15 63095.73 2.09056900583683e-14 1.68547990404061e-14 3.40821215244046e-15 79432.82 2.09056811961346e-14 1.6854797723214e-14 3.40821326239962e-15 100000 2.09056861413757e-14 1.68547949523293e-14 3.40821238799538e-15 125892.5 2.0905697250332e-14 1.68548046153418e-14 3.40821475362247e-15 158489.3 2.09056951199373e-14 1.68548028345556e-14 3.40821337150979e-15 199526.2 2.0905690662011e-14 1.68547999559503e-14 3.40821331084042e-15 251188.6 2.09056907534163e-14 1.68547981967284e-14 3.40821385067921e-15 316227.8 2.09056854822947e-14 1.68547933266758e-14 3.40821284742353e-15 398107.2 2.0905689107353e-14 1.68547953229405e-14 3.4082128809646e-15 501187.2 2.09056912778548e-14 1.68547992021923e-14 3.40821295600885e-15 630957.3 2.09056900583683e-14 1.68547990404061e-14 3.40821215244046e-15 794328.2 2.09056811961346e-14 1.6854797723214e-14 3.40821326239962e-15 1000000 2.09056861413757e-14 1.68547949523293e-14 3.40821238799538e-15 1258925 2.0905697250332e-14 1.68548046153418e-14 3.40821475362247e-15 1584893 2.09056951199373e-14 1.68548028345556e-14 3.40821337150979e-15 1995262 2.0905690662011e-14 1.68547999559503e-14 3.40821331084042e-15 2511886 2.09056907534163e-14 1.68547981967284e-14 3.40821385067921e-15 3162278 2.09056854822947e-14 1.68547933266758e-14 3.40821284742353e-15 3981072 2.0905689107353e-14 1.68547953229405e-14 3.4082128809646e-15 5011872 2.09056912778548e-14 1.68547992021923e-14 3.40821295600885e-15 6309573 2.09056900583683e-14 1.68547990404061e-14 3.40821215244046e-15 7943282 2.09056811961346e-14 1.6854797723214e-14 3.40821326239962e-15 10000000 2.09056861413757e-14 1.68547949523293e-14 3.40821238799538e-15 12589250 2.0905697250332e-14 1.68548046153418e-14 3.40821475362247e-15 15848930 2.09056951199373e-14 1.68548028345556e-14 3.40821337150979e-15 19952620 2.0905690662011e-14 1.68547999559503e-14 3.40821331084042e-15 25118860 2.09056907534163e-14 1.68547981967284e-14 3.40821385067921e-15 31622780 2.09056854822947e-14 1.68547933266758e-14 3.40821284742353e-15 39810720 2.0905689107353e-14 1.68547953229405e-14 3.4082128809646e-15 50118720 2.09056912778548e-14 1.68547992021923e-14 3.40821295600885e-15 63095730 2.09056900583683e-14 1.68547990404061e-14 3.40821215244046e-15 79432820 2.09056811961346e-14 1.6854797723214e-14 3.40821326239962e-15 100000000 2.09056861413758e-14 1.68547949523293e-14 3.40821238799538e-15 1000 2.06433351331831e-14 1.66827484588469e-14 3.32139495808818e-15 1258.925 2.06433351132717e-14 1.66827578595353e-14 3.32139618570227e-15 1584.893 2.06433278056668e-14 1.66827532614933e-14 3.32139627123824e-15 1995.262 2.0643330870002e-14 1.66827517253145e-14 3.32139631712642e-15 2511.886 2.06433329581738e-14 1.66827547930957e-14 3.32139633803176e-15 3162.278 2.06433293936303e-14 1.66827479665065e-14 3.32139546916517e-15 3981.072 2.06433300669903e-14 1.66827503818804e-14 3.32139564955892e-15 5011.872 2.06433297841194e-14 1.66827537767139e-14 3.32139635356591e-15 6309.573 2.06433314862274e-14 1.66827512456746e-14 3.32139494894132e-15 7943.282 2.06433242982119e-14 1.66827509861289e-14 3.32139544976031e-15 10000 2.06433351331831e-14 1.66827484588469e-14 3.32139495808818e-15 12589.25 2.06433351132717e-14 1.66827578595353e-14 3.32139618570227e-15 15848.93 2.06433278056668e-14 1.66827532614933e-14 3.32139627123824e-15 19952.62 2.0643330870002e-14 1.66827517253145e-14 3.32139631712642e-15 25118.86 2.06433329581738e-14 1.66827547930957e-14 3.32139633803176e-15 31622.78 2.06433293936303e-14 1.66827479665065e-14 3.32139546916517e-15 39810.72 2.06433300669903e-14 1.66827503818804e-14 3.32139564955892e-15 50118.72 2.06433297841194e-14 1.6682753776714e-14 3.32139635356591e-15 63095.73 2.06433314862274e-14 1.66827512456746e-14 3.32139494894132e-15 79432.82 2.06433242982119e-14 1.66827509861289e-14 3.32139544976031e-15 100000 2.06433351331831e-14 1.66827484588469e-14 3.32139495808818e-15 125892.5 2.06433351132717e-14 1.66827578595353e-14 3.32139618570227e-15 158489.3 2.06433278056668e-14 1.66827532614933e-14 3.32139627123824e-15 199526.2 2.0643330870002e-14 1.66827517253145e-14 3.32139631712642e-15 251188.6 2.06433329581738e-14 1.66827547930957e-14 3.32139633803176e-15 316227.8 2.06433293936303e-14 1.66827479665065e-14 3.32139546916517e-15 398107.2 2.06433300669903e-14 1.66827503818804e-14 3.32139564955892e-15 501187.2 2.06433297841194e-14 1.66827537767139e-14 3.32139635356591e-15 630957.3 2.06433314862274e-14 1.66827512456746e-14 3.32139494894132e-15 794328.2 2.06433242982119e-14 1.66827509861289e-14 3.32139544976031e-15 1000000 2.06433351331831e-14 1.66827484588469e-14 3.32139495808818e-15 1258925 2.06433351132717e-14 1.66827578595353e-14 3.32139618570227e-15 1584893 2.06433278056668e-14 1.66827532614933e-14 3.32139627123824e-15 1995262 2.0643330870002e-14 1.66827517253145e-14 3.32139631712642e-15 2511886 2.06433329581738e-14 1.66827547930956e-14 3.32139633803176e-15 3162278 2.06433293936303e-14 1.66827479665065e-14 3.32139546916517e-15 3981072 2.06433300669903e-14 1.66827503818804e-14 3.32139564955892e-15 5011872 2.06433297841194e-14 1.66827537767139e-14 3.32139635356591e-15 6309573 2.06433314862274e-14 1.66827512456746e-14 3.32139494894132e-15 7943282 2.06433242982119e-14 1.66827509861289e-14 3.32139544976031e-15 10000000 2.06433351331831e-14 1.66827484588469e-14 3.32139495808818e-15 12589250 2.06433351132717e-14 1.66827578595353e-14 3.32139618570227e-15 15848930 2.06433278056668e-14 1.66827532614933e-14 3.32139627123824e-15 19952620 2.0643330870002e-14 1.66827517253145e-14 3.32139631712642e-15 25118860 2.06433329581738e-14 1.66827547930957e-14 3.32139633803176e-15 31622780 2.06433293936303e-14 1.66827479665065e-14 3.32139546916517e-15 39810720 2.06433300669903e-14 1.66827503818804e-14 3.32139564955892e-15 50118720 2.06433297841194e-14 1.6682753776714e-14 3.32139635356591e-15 63095730 2.06433314862274e-14 1.66827512456746e-14 3.32139494894132e-15 79432820 2.06433242982119e-14 1.66827509861289e-14 3.32139544976031e-15 100000000 2.06433351331831e-14 1.66827484588469e-14 3.32139495808818e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/56_acFreq_CONQS=0.standard0000644000175000017500000002530213546075722024726 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1258.925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584.893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995.262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511.886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162.278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981.072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011.872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309.573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943.282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 10000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589.25 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848.93 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952.62 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118.86 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622.78 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810.72 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118.72 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095.73 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432.82 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 125892.5 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 158489.3 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 199526.2 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 251188.6 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 316227.8 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 398107.2 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 501187.2 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 630957.3 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 794328.2 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 1000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 1258925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 10000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589250 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848930 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952620 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118860 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622780 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810720 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118720 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095730 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432820 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258.925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584.893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995.262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511.886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162.278 2.08988054797393e-14 1.68486984597449e-14 3.40873274812869e-15 3981.072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011.872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309.573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943.282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589.25 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848.93 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952.62 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118.86 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622.78 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810.72 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118.72 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095.73 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432.82 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 125892.5 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 158489.3 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 199526.2 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 251188.6 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 316227.8 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 398107.2 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 501187.2 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 630957.3 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 794328.2 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 1000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162278 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 3981072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589250 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848930 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952620 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118860 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622780 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810720 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118720 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095730 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432820 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258.925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584.893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995.262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511.886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162.278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981.072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011.872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309.573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943.282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589.25 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848.93 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952.62 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118.86 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622.78 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810.72 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118.72 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095.73 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432.82 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 125892.5 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 158489.3 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 199526.2 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 251188.6 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 316227.8 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 398107.2 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 501187.2 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 630957.3 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 794328.2 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 1000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589250 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848930 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952620 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118860 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622780 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810720 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118720 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095730 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432820 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/46_acFreq_COISUB=0.standard0000644000175000017500000002530213546075722025026 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1258.925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584.893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995.262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511.886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162.278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981.072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011.872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309.573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943.282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 10000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589.25 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848.93 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952.62 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118.86 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622.78 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810.72 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118.72 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095.73 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432.82 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 125892.5 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 158489.3 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 199526.2 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 251188.6 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 316227.8 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 398107.2 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 501187.2 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 630957.3 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 794328.2 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 1000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 1258925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 10000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589250 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848930 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952620 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118860 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622780 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810720 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118720 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095730 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432820 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258.925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584.893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995.262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511.886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162.278 2.08988054797393e-14 1.68486984597449e-14 3.40873274812869e-15 3981.072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011.872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309.573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943.282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589.25 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848.93 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952.62 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118.86 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622.78 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810.72 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118.72 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095.73 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432.82 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 125892.5 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 158489.3 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 199526.2 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 251188.6 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 316227.8 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 398107.2 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 501187.2 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 630957.3 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 794328.2 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 1000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162278 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 3981072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589250 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848930 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952620 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118860 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622780 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810720 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118720 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095730 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432820 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258.925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584.893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995.262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511.886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162.278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981.072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011.872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309.573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943.282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589.25 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848.93 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952.62 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118.86 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622.78 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810.72 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118.72 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095.73 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432.82 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 125892.5 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 158489.3 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 199526.2 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 251188.6 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 316227.8 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 398107.2 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 501187.2 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 630957.3 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 794328.2 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 1000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589250 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848930 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952620 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118860 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622780 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810720 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118720 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095730 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432820 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/20_dcSweep_CORG=1.standard0000644000175000017500000002342613546075722024763 0ustar carstencarstenV(d) I(d) -2.000000e-01 -4.699615e-05 -3.000000e-01 -5.356444e-05 -4.000000e-01 -6.033219e-05 -5.000000e-01 -6.744931e-05 -6.000000e-01 -7.492420e-05 -7.000000e-01 -8.274226e-05 -8.000000e-01 -9.089871e-05 -9.000000e-01 -9.939829e-05 -1.000000e+00 -1.082512e-04 -1.100000e+00 -1.174704e-04 -1.200000e+00 -1.270707e-04 -1.300000e+00 -1.370679e-04 -1.400000e+00 -1.474787e-04 -1.500000e+00 -1.583210e-04 -1.600000e+00 -1.696137e-04 -1.700000e+00 -1.813767e-04 -1.800000e+00 -1.936315e-04 -2.000000e-01 -3.236954e-04 -3.000000e-01 -3.722842e-04 -4.000000e-01 -4.052186e-04 -5.000000e-01 -4.371928e-04 -6.000000e-01 -4.684500e-04 -7.000000e-01 -4.993045e-04 -8.000000e-01 -5.300657e-04 -9.000000e-01 -5.609683e-04 -1.000000e+00 -5.921825e-04 -1.100000e+00 -6.238328e-04 -1.200000e+00 -6.560127e-04 -1.300000e+00 -6.887951e-04 -1.400000e+00 -7.222391e-04 -1.500000e+00 -7.563944e-04 -1.600000e+00 -7.913044e-04 -1.700000e+00 -8.270083e-04 -1.800000e+00 -8.635422e-04 -2.000000e-01 -6.362416e-04 -3.000000e-01 -8.252108e-04 -4.000000e-01 -9.384887e-04 -5.000000e-01 -1.006766e-03 -6.000000e-01 -1.066911e-03 -7.000000e-01 -1.125791e-03 -8.000000e-01 -1.183256e-03 -9.000000e-01 -1.239416e-03 -1.000000e+00 -1.294578e-03 -1.100000e+00 -1.349078e-03 -1.200000e+00 -1.403215e-03 -1.300000e+00 -1.457236e-03 -1.400000e+00 -1.511337e-03 -1.500000e+00 -1.565674e-03 -1.600000e+00 -1.620372e-03 -1.700000e+00 -1.675532e-03 -1.800000e+00 -1.731237e-03 -2.000000e-01 -8.942919e-04 -3.000000e-01 -1.221693e-03 -4.000000e-01 -1.471297e-03 -5.000000e-01 -1.648885e-03 -6.000000e-01 -1.767189e-03 -7.000000e-01 -1.854914e-03 -8.000000e-01 -1.937134e-03 -9.000000e-01 -2.017933e-03 -1.000000e+00 -2.097230e-03 -1.100000e+00 -2.174954e-03 -1.200000e+00 -2.251232e-03 -1.300000e+00 -2.326297e-03 -1.400000e+00 -2.400412e-03 -1.500000e+00 -2.473830e-03 -1.600000e+00 -2.546779e-03 -1.700000e+00 -2.619455e-03 -1.800000e+00 -2.692024e-03 -2.000000e-01 -1.099660e-03 -3.000000e-01 -1.542998e-03 -4.000000e-01 -1.912357e-03 -5.000000e-01 -2.210948e-03 -6.000000e-01 -2.443263e-03 -7.000000e-01 -2.616248e-03 -8.000000e-01 -2.743263e-03 -9.000000e-01 -2.847346e-03 -1.000000e+00 -2.946865e-03 -1.100000e+00 -3.044792e-03 -1.200000e+00 -3.141252e-03 -1.300000e+00 -3.236151e-03 -1.400000e+00 -3.329502e-03 -1.500000e+00 -3.421422e-03 -1.600000e+00 -3.512085e-03 -1.700000e+00 -3.601685e-03 -1.800000e+00 -3.690419e-03 -2.000000e-01 -1.323288e-03 -3.000000e-01 -1.900779e-03 -4.000000e-01 -2.413864e-03 -5.000000e-01 -2.862055e-03 -6.000000e-01 -3.247311e-03 -7.000000e-01 -3.572769e-03 -8.000000e-01 -3.842246e-03 -9.000000e-01 -4.060779e-03 -1.000000e+00 -4.235768e-03 -1.100000e+00 -4.377686e-03 -1.200000e+00 -4.501075e-03 -1.300000e+00 -4.619790e-03 -1.400000e+00 -4.736666e-03 -1.500000e+00 -4.852063e-03 -1.600000e+00 -4.966006e-03 -1.700000e+00 -5.078485e-03 -1.800000e+00 -5.189527e-03 -2.000000e-01 -1.465681e-03 -3.000000e-01 -2.135731e-03 -4.000000e-01 -2.753367e-03 -5.000000e-01 -3.315155e-03 -6.000000e-01 -3.820331e-03 -7.000000e-01 -4.269931e-03 -8.000000e-01 -4.666054e-03 -9.000000e-01 -5.011370e-03 -1.000000e+00 -5.308993e-03 -1.100000e+00 -5.562716e-03 -1.200000e+00 -5.777420e-03 -1.300000e+00 -5.959268e-03 -1.400000e+00 -6.115539e-03 -1.500000e+00 -6.254781e-03 -1.600000e+00 -6.387042e-03 -1.700000e+00 -6.517185e-03 -1.800000e+00 -6.645738e-03 -2.000000e-01 -8.053777e-05 -3.000000e-01 -9.162409e-05 -4.000000e-01 -1.024997e-04 -5.000000e-01 -1.136548e-04 -6.000000e-01 -1.251789e-04 -7.000000e-01 -1.370995e-04 -8.000000e-01 -1.494356e-04 -9.000000e-01 -1.622080e-04 -1.000000e+00 -1.754382e-04 -1.100000e+00 -1.891484e-04 -1.200000e+00 -2.033607e-04 -1.300000e+00 -2.180970e-04 -1.400000e+00 -2.333799e-04 -1.500000e+00 -2.492324e-04 -1.600000e+00 -2.656781e-04 -1.700000e+00 -2.827418e-04 -1.800000e+00 -3.004492e-04 -2.000000e-01 -2.967540e-04 -3.000000e-01 -3.587330e-04 -4.000000e-01 -3.937602e-04 -5.000000e-01 -4.249225e-04 -6.000000e-01 -4.554245e-04 -7.000000e-01 -4.853715e-04 -8.000000e-01 -5.149862e-04 -9.000000e-01 -5.445097e-04 -1.000000e+00 -5.741407e-04 -1.100000e+00 -6.040315e-04 -1.200000e+00 -6.342969e-04 -1.300000e+00 -6.650254e-04 -1.400000e+00 -6.962867e-04 -1.500000e+00 -7.281374e-04 -1.600000e+00 -7.606255e-04 -1.700000e+00 -7.937927e-04 -1.800000e+00 -8.276765e-04 -2.000000e-01 -5.192224e-04 -3.000000e-01 -6.879597e-04 -4.000000e-01 -8.011363e-04 -5.000000e-01 -8.720396e-04 -6.000000e-01 -9.256745e-04 -7.000000e-01 -9.769033e-04 -8.000000e-01 -1.027362e-03 -9.000000e-01 -1.076896e-03 -1.000000e+00 -1.125564e-03 -1.100000e+00 -1.173562e-03 -1.200000e+00 -1.221119e-03 -1.300000e+00 -1.268446e-03 -1.400000e+00 -1.315726e-03 -1.500000e+00 -1.363110e-03 -1.600000e+00 -1.410721e-03 -1.700000e+00 -1.458660e-03 -1.800000e+00 -1.507013e-03 -2.000000e-01 -7.107833e-04 -3.000000e-01 -9.814930e-04 -4.000000e-01 -1.196037e-03 -5.000000e-01 -1.357425e-03 -6.000000e-01 -1.472204e-03 -7.000000e-01 -1.554887e-03 -8.000000e-01 -1.625302e-03 -9.000000e-01 -1.693712e-03 -1.000000e+00 -1.761384e-03 -1.100000e+00 -1.828127e-03 -1.200000e+00 -1.893853e-03 -1.300000e+00 -1.958629e-03 -1.400000e+00 -2.022603e-03 -1.500000e+00 -2.085948e-03 -1.600000e+00 -2.148840e-03 -1.700000e+00 -2.211441e-03 -1.800000e+00 -2.273894e-03 -2.000000e-01 -8.703534e-04 -3.000000e-01 -1.229542e-03 -4.000000e-01 -1.535299e-03 -5.000000e-01 -1.788717e-03 -6.000000e-01 -1.992234e-03 -7.000000e-01 -2.150032e-03 -8.000000e-01 -2.269922e-03 -9.000000e-01 -2.364654e-03 -1.000000e+00 -2.449433e-03 -1.100000e+00 -2.532170e-03 -1.200000e+00 -2.614133e-03 -1.300000e+00 -2.695229e-03 -1.400000e+00 -2.775330e-03 -1.500000e+00 -2.854418e-03 -1.600000e+00 -2.932552e-03 -1.700000e+00 -3.009841e-03 -1.800000e+00 -3.086415e-03 -2.000000e-01 -1.055746e-03 -3.000000e-01 -1.522006e-03 -4.000000e-01 -1.941527e-03 -5.000000e-01 -2.312983e-03 -6.000000e-01 -2.636801e-03 -7.000000e-01 -2.914587e-03 -8.000000e-01 -3.148785e-03 -9.000000e-01 -3.342837e-03 -1.000000e+00 -3.501773e-03 -1.100000e+00 -3.632590e-03 -1.200000e+00 -3.744148e-03 -1.300000e+00 -3.846545e-03 -1.400000e+00 -3.946382e-03 -1.500000e+00 -4.045210e-03 -1.600000e+00 -4.143203e-03 -1.700000e+00 -4.240296e-03 -1.800000e+00 -4.336435e-03 -2.000000e-01 -1.186306e-03 -3.000000e-01 -1.731660e-03 -4.000000e-01 -2.238332e-03 -5.000000e-01 -2.703337e-03 -6.000000e-01 -3.125332e-03 -7.000000e-01 -3.504342e-03 -8.000000e-01 -3.841383e-03 -9.000000e-01 -4.138137e-03 -1.000000e+00 -4.396808e-03 -1.100000e+00 -4.620185e-03 -1.200000e+00 -4.811857e-03 -1.300000e+00 -4.976335e-03 -1.400000e+00 -5.118917e-03 -1.500000e+00 -5.245465e-03 -1.600000e+00 -5.362370e-03 -1.700000e+00 -5.475384e-03 -1.800000e+00 -5.586920e-03 -2.000000e-01 -1.215310e-04 -3.000000e-01 -1.449795e-04 -4.000000e-01 -1.644397e-04 -5.000000e-01 -1.838944e-04 -6.000000e-01 -2.037631e-04 -7.000000e-01 -2.241339e-04 -8.000000e-01 -2.450728e-04 -9.000000e-01 -2.666381e-04 -1.000000e+00 -2.888803e-04 -1.100000e+00 -3.118434e-04 -1.200000e+00 -3.355664e-04 -1.300000e+00 -3.600852e-04 -1.400000e+00 -3.854342e-04 -1.500000e+00 -4.116469e-04 -1.600000e+00 -4.387567e-04 -1.700000e+00 -4.667976e-04 -1.800000e+00 -4.958045e-04 -2.000000e-01 -2.683866e-04 -3.000000e-01 -3.434866e-04 -4.000000e-01 -3.905718e-04 -5.000000e-01 -4.254121e-04 -6.000000e-01 -4.579229e-04 -7.000000e-01 -4.899888e-04 -8.000000e-01 -5.217546e-04 -9.000000e-01 -5.533460e-04 -1.000000e+00 -5.849287e-04 -1.100000e+00 -6.166606e-04 -1.200000e+00 -6.486752e-04 -1.300000e+00 -6.810800e-04 -1.400000e+00 -7.139613e-04 -1.500000e+00 -7.473894e-04 -1.600000e+00 -7.814225e-04 -1.700000e+00 -8.161101e-04 -1.800000e+00 -8.514956e-04 -2.000000e-01 -4.174948e-04 -3.000000e-01 -5.651320e-04 -4.000000e-01 -6.748377e-04 -5.000000e-01 -7.519469e-04 -6.000000e-01 -8.074889e-04 -7.000000e-01 -8.544460e-04 -8.000000e-01 -8.996975e-04 -9.000000e-01 -9.444786e-04 -1.000000e+00 -9.887737e-04 -1.100000e+00 -1.032583e-03 -1.200000e+00 -1.076001e-03 -1.300000e+00 -1.119162e-03 -1.400000e+00 -1.162206e-03 -1.500000e+00 -1.205264e-03 -1.600000e+00 -1.248450e-03 -1.700000e+00 -1.291863e-03 -1.800000e+00 -1.335586e-03 -2.000000e-01 -5.523075e-04 -3.000000e-01 -7.705283e-04 -4.000000e-01 -9.501590e-04 -5.000000e-01 -1.092854e-03 -6.000000e-01 -1.201930e-03 -7.000000e-01 -1.284056e-03 -8.000000e-01 -1.349422e-03 -9.000000e-01 -1.408062e-03 -1.000000e+00 -1.465169e-03 -1.100000e+00 -1.521831e-03 -1.200000e+00 -1.578020e-03 -1.300000e+00 -1.633658e-03 -1.400000e+00 -1.688747e-03 -1.500000e+00 -1.743357e-03 -1.600000e+00 -1.797587e-03 -1.700000e+00 -1.851545e-03 -1.800000e+00 -1.905340e-03 -2.000000e-01 -6.699586e-04 -3.000000e-01 -9.519966e-04 -4.000000e-01 -1.196965e-03 -5.000000e-01 -1.405155e-03 -6.000000e-01 -1.577904e-03 -7.000000e-01 -1.717682e-03 -8.000000e-01 -1.828773e-03 -9.000000e-01 -1.917844e-03 -1.000000e+00 -1.993249e-03 -1.100000e+00 -2.062742e-03 -1.200000e+00 -2.130579e-03 -1.300000e+00 -2.197915e-03 -1.400000e+00 -2.264816e-03 -1.500000e+00 -2.331190e-03 -1.600000e+00 -2.396992e-03 -1.700000e+00 -2.462231e-03 -1.800000e+00 -2.526956e-03 -2.000000e-01 -8.151175e-04 -3.000000e-01 -1.178259e-03 -4.000000e-01 -1.508450e-03 -5.000000e-01 -1.804478e-03 -6.000000e-01 -2.066202e-03 -7.000000e-01 -2.294404e-03 -8.000000e-01 -2.490612e-03 -9.000000e-01 -2.657086e-03 -1.000000e+00 -2.797037e-03 -1.100000e+00 -2.914811e-03 -1.200000e+00 -3.015698e-03 -1.300000e+00 -3.105458e-03 -1.400000e+00 -3.189490e-03 -1.500000e+00 -3.271330e-03 -1.600000e+00 -3.352374e-03 -1.700000e+00 -3.432950e-03 -1.800000e+00 -3.513054e-03 -2.000000e-01 -9.263926e-04 -3.000000e-01 -1.353590e-03 -4.000000e-01 -1.752829e-03 -5.000000e-01 -2.121990e-03 -6.000000e-01 -2.459839e-03 -7.000000e-01 -2.766039e-03 -8.000000e-01 -3.041016e-03 -9.000000e-01 -3.285795e-03 -1.000000e+00 -3.501875e-03 -1.100000e+00 -3.691217e-03 -1.200000e+00 -3.856317e-03 -1.300000e+00 -4.000255e-03 -1.400000e+00 -4.126613e-03 -1.500000e+00 -4.239259e-03 -1.600000e+00 -4.342117e-03 -1.700000e+00 -4.438929e-03 -1.800000e+00 -4.532697e-03 tmpk8ny_4pz/tests/hisim/pmos/reference/67_acFreq_COIGN=1.standard0000644000175000017500000002530213546075722024705 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1258.925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584.893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995.262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511.886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162.278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981.072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011.872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309.573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943.282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 10000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589.25 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848.93 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952.62 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118.86 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622.78 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810.72 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118.72 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095.73 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432.82 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 125892.5 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 158489.3 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 199526.2 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 251188.6 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 316227.8 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 398107.2 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 501187.2 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 630957.3 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 794328.2 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 1000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 1258925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 10000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589250 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848930 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952620 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118860 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622780 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810720 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118720 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095730 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432820 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258.925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584.893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995.262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511.886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162.278 2.08988054797393e-14 1.68486984597449e-14 3.40873274812869e-15 3981.072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011.872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309.573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943.282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589.25 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848.93 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952.62 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118.86 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622.78 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810.72 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118.72 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095.73 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432.82 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 125892.5 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 158489.3 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 199526.2 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 251188.6 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 316227.8 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 398107.2 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 501187.2 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 630957.3 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 794328.2 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 1000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162278 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 3981072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589250 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848930 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952620 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118860 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622780 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810720 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118720 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095730 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432820 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258.925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584.893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995.262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511.886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162.278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981.072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011.872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309.573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943.282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589.25 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848.93 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952.62 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118.86 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622.78 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810.72 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118.72 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095.73 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432.82 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 125892.5 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 158489.3 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 199526.2 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 251188.6 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 316227.8 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 398107.2 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 501187.2 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 630957.3 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 794328.2 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 1000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589250 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848930 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952620 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118860 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622780 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810720 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118720 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095730 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432820 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/57_acFreq_CONQS=1.standard0000644000175000017500000002530313546075722024731 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1258.925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584.893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995.262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511.886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162.278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981.072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011.872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309.573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943.282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 10000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589.25 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848.93 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952.62 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118.86 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622.78 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810.72 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118.72 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095.73 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432.82 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 125892.5 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 158489.3 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 199526.2 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 251188.6 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 316227.8 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 398107.2 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 501187.2 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 630957.3 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 794328.2 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 1000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 1258925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 10000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589250 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848930 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952620 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118860 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622780 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810720 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118720 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095730 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432820 2.11171455844556e-14 1.69788612390417e-14 3.49561413489302e-15 100000000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258.925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584.893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995.262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511.886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162.278 2.08988054797393e-14 1.68486984597449e-14 3.40873274812869e-15 3981.072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011.872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309.573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943.282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589.25 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848.93 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952.62 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118.86 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622.78 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810.72 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118.72 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095.73 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432.82 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 125892.5 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 158489.3 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 199526.2 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 251188.6 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 316227.8 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 398107.2 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 501187.2 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 630957.3 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 794328.2 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 1000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162278 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 3981072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589250 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848930 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952620 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118860 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622780 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810720 2.08988049110359e-14 1.68486946936839e-14 3.40873299358995e-15 50118720 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095730 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432820 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258.925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584.893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995.262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511.886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162.278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981.072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011.872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309.573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943.282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589.25 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848.93 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952.62 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118.86 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622.78 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810.72 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118.72 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095.73 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432.82 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 125892.5 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 158489.3 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 199526.2 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 251188.6 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 316227.8 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 398107.2 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 501187.2 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 630957.3 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 794328.2 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 1000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589250 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848930 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952620 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118860 2.06409315863188e-14 1.66781041151497e-14 3.32505795490501e-15 31622780 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810720 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118720 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095730 2.06409276046847e-14 1.66781049184957e-14 3.3250575260661e-15 79432820 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/9_dcSweep_COIIGS=1.standard0000644000175000017500000002333513546075722025134 0ustar carstencarstenV(d) I(g) -2.000000e-01 -4.801261e-10 -3.000000e-01 -3.933269e-10 -4.000000e-01 -3.527743e-10 -5.000000e-01 -3.171287e-10 -6.000000e-01 -2.391916e-10 -7.000000e-01 -1.096159e-10 -8.000000e-01 8.102744e-11 -9.000000e-01 3.427750e-10 -1.000000e+00 6.865583e-10 -1.100000e+00 1.124389e-09 -1.200000e+00 1.669505e-09 -1.300000e+00 2.336507e-09 -1.400000e+00 3.141492e-09 -1.500000e+00 4.102203e-09 -1.600000e+00 5.238175e-09 -1.700000e+00 6.570907e-09 -1.800000e+00 8.124034e-09 -2.000000e-01 -2.235718e-09 -3.000000e-01 -1.899158e-09 -4.000000e-01 -1.664745e-09 -5.000000e-01 -1.492100e-09 -6.000000e-01 -1.374165e-09 -7.000000e-01 -1.269280e-09 -8.000000e-01 -1.129791e-09 -9.000000e-01 -9.455648e-10 -1.000000e+00 -7.062959e-10 -1.100000e+00 -4.011275e-10 -1.200000e+00 -1.841631e-11 -1.300000e+00 4.544506e-10 -1.400000e+00 1.031215e-09 -1.500000e+00 1.726902e-09 -1.600000e+00 2.557966e-09 -1.700000e+00 3.542453e-09 -1.800000e+00 4.700158e-09 -2.000000e-01 -7.013415e-09 -3.000000e-01 -5.946330e-09 -4.000000e-01 -5.216689e-09 -5.000000e-01 -4.702056e-09 -6.000000e-01 -4.290653e-09 -7.000000e-01 -3.948152e-09 -8.000000e-01 -3.672251e-09 -9.000000e-01 -3.422914e-09 -1.000000e+00 -3.152195e-09 -1.100000e+00 -2.848889e-09 -1.200000e+00 -2.501418e-09 -1.300000e+00 -2.097702e-09 -1.400000e+00 -1.624993e-09 -1.500000e+00 -1.069710e-09 -1.600000e+00 -4.172718e-10 -1.700000e+00 3.480739e-10 -1.800000e+00 1.243414e-09 -2.000000e-01 -1.718211e-08 -3.000000e-01 -1.485761e-08 -4.000000e-01 -1.305729e-08 -5.000000e-01 -1.167548e-08 -6.000000e-01 -1.061455e-08 -7.000000e-01 -9.779277e-09 -8.000000e-01 -9.070495e-09 -9.000000e-01 -8.449380e-09 -1.000000e+00 -7.915683e-09 -1.100000e+00 -7.429217e-09 -1.200000e+00 -6.940665e-09 -1.300000e+00 -6.437076e-09 -1.400000e+00 -5.905129e-09 -1.500000e+00 -5.331136e-09 -1.600000e+00 -4.700912e-09 -1.700000e+00 -3.999607e-09 -1.800000e+00 -3.211519e-09 -2.000000e-01 -3.575019e-08 -3.000000e-01 -3.142464e-08 -4.000000e-01 -2.792317e-08 -5.000000e-01 -2.505980e-08 -6.000000e-01 -2.271719e-08 -7.000000e-01 -2.080514e-08 -8.000000e-01 -1.922807e-08 -9.000000e-01 -1.791963e-08 -1.000000e+00 -1.678457e-08 -1.100000e+00 -1.576588e-08 -1.200000e+00 -1.486256e-08 -1.300000e+00 -1.403333e-08 -1.400000e+00 -1.322689e-08 -1.500000e+00 -1.242809e-08 -1.600000e+00 -1.162151e-08 -1.700000e+00 -1.079153e-08 -1.800000e+00 -9.922259e-09 -2.000000e-01 -8.753429e-08 -3.000000e-01 -7.817111e-08 -4.000000e-01 -7.034786e-08 -5.000000e-01 -6.375444e-08 -6.000000e-01 -5.814100e-08 -7.000000e-01 -5.333253e-08 -8.000000e-01 -4.920794e-08 -9.000000e-01 -4.566804e-08 -1.000000e+00 -4.261360e-08 -1.100000e+00 -3.995252e-08 -1.200000e+00 -3.763724e-08 -1.300000e+00 -3.560710e-08 -1.400000e+00 -3.375769e-08 -1.500000e+00 -3.207560e-08 -1.600000e+00 -3.051714e-08 -1.700000e+00 -2.902763e-08 -1.800000e+00 -2.758824e-08 -2.000000e-01 -1.813852e-07 -3.000000e-01 -1.635395e-07 -4.000000e-01 -1.482957e-07 -5.000000e-01 -1.352929e-07 -6.000000e-01 -1.241179e-07 -7.000000e-01 -1.144224e-07 -8.000000e-01 -1.059470e-07 -9.000000e-01 -9.850430e-08 -1.000000e+00 -9.195318e-08 -1.100000e+00 -8.617530e-08 -1.200000e+00 -8.106018e-08 -1.300000e+00 -7.650248e-08 -1.400000e+00 -7.241214e-08 -1.500000e+00 -6.873598e-08 -1.600000e+00 -6.546420e-08 -1.700000e+00 -6.249532e-08 -1.800000e+00 -5.975895e-08 -2.000000e-01 -5.278961e-10 -3.000000e-01 -4.310848e-10 -4.000000e-01 -3.842084e-10 -5.000000e-01 -3.441878e-10 -6.000000e-01 -2.629495e-10 -7.000000e-01 -1.307189e-10 -8.000000e-01 6.214652e-11 -9.000000e-01 3.257985e-10 -1.000000e+00 6.712383e-10 -1.100000e+00 1.110524e-09 -1.200000e+00 1.656927e-09 -1.300000e+00 2.325073e-09 -1.400000e+00 3.131081e-09 -1.500000e+00 4.092708e-09 -1.600000e+00 5.229505e-09 -1.700000e+00 6.562981e-09 -1.800000e+00 8.116780e-09 -2.000000e-01 -2.368238e-09 -3.000000e-01 -1.990074e-09 -4.000000e-01 -1.742425e-09 -5.000000e-01 -1.562524e-09 -6.000000e-01 -1.438333e-09 -7.000000e-01 -1.327852e-09 -8.000000e-01 -1.183359e-09 -9.000000e-01 -9.946687e-10 -1.000000e+00 -7.514134e-10 -1.100000e+00 -4.426761e-10 -1.200000e+00 -5.675867e-11 -1.300000e+00 4.189990e-10 -1.400000e+00 9.983796e-10 -1.500000e+00 1.696441e-09 -1.600000e+00 2.529667e-09 -1.700000e+00 3.516129e-09 -1.800000e+00 4.675642e-09 -2.000000e-01 -7.229221e-09 -3.000000e-01 -6.121787e-09 -4.000000e-01 -5.343436e-09 -5.000000e-01 -4.792465e-09 -6.000000e-01 -4.369123e-09 -7.000000e-01 -4.021120e-09 -8.000000e-01 -3.740028e-09 -9.000000e-01 -3.485743e-09 -1.000000e+00 -3.210437e-09 -1.100000e+00 -2.902939e-09 -1.200000e+00 -2.551658e-09 -1.300000e+00 -2.144479e-09 -1.400000e+00 -1.668616e-09 -1.500000e+00 -1.110454e-09 -1.600000e+00 -4.553798e-10 -1.700000e+00 3.123843e-10 -1.800000e+00 1.209949e-09 -2.000000e-01 -1.740938e-08 -3.000000e-01 -1.503413e-08 -4.000000e-01 -1.319221e-08 -5.000000e-01 -1.176700e-08 -6.000000e-01 -1.066609e-08 -7.000000e-01 -9.794214e-09 -8.000000e-01 -9.074755e-09 -9.000000e-01 -8.452845e-09 -1.000000e+00 -7.918397e-09 -1.100000e+00 -7.431050e-09 -1.200000e+00 -6.941677e-09 -1.300000e+00 -6.437394e-09 -1.400000e+00 -5.904880e-09 -1.500000e+00 -5.330425e-09 -1.600000e+00 -4.699823e-09 -1.700000e+00 -3.998205e-09 -1.800000e+00 -3.209855e-09 -2.000000e-01 -3.587676e-08 -3.000000e-01 -3.146113e-08 -4.000000e-01 -2.789666e-08 -5.000000e-01 -2.499159e-08 -6.000000e-01 -2.261542e-08 -7.000000e-01 -2.067348e-08 -8.000000e-01 -1.907347e-08 -9.000000e-01 -1.773229e-08 -1.000000e+00 -1.658813e-08 -1.100000e+00 -1.557781e-08 -1.200000e+00 -1.468307e-08 -1.300000e+00 -1.386175e-08 -1.400000e+00 -1.306276e-08 -1.500000e+00 -1.227107e-08 -1.600000e+00 -1.147128e-08 -1.700000e+00 -1.064778e-08 -1.800000e+00 -9.784673e-09 -2.000000e-01 -8.714653e-08 -3.000000e-01 -7.759980e-08 -4.000000e-01 -6.962980e-08 -5.000000e-01 -6.294320e-08 -6.000000e-01 -5.728255e-08 -7.000000e-01 -5.245711e-08 -8.000000e-01 -4.833109e-08 -9.000000e-01 -4.479760e-08 -1.000000e+00 -4.175721e-08 -1.100000e+00 -3.911517e-08 -1.200000e+00 -3.679765e-08 -1.300000e+00 -3.475947e-08 -1.400000e+00 -3.293851e-08 -1.500000e+00 -3.128978e-08 -1.600000e+00 -2.976314e-08 -1.700000e+00 -2.830378e-08 -1.800000e+00 -2.689306e-08 -2.000000e-01 -1.797838e-07 -3.000000e-01 -1.616464e-07 -4.000000e-01 -1.461315e-07 -5.000000e-01 -1.329294e-07 -6.000000e-01 -1.216361e-07 -7.000000e-01 -1.118922e-07 -8.000000e-01 -1.034202e-07 -9.000000e-01 -9.601457e-08 -1.000000e+00 -8.951935e-08 -1.100000e+00 -8.380719e-08 -1.200000e+00 -7.876426e-08 -1.300000e+00 -7.428481e-08 -1.400000e+00 -7.027538e-08 -1.500000e+00 -6.666449e-08 -1.600000e+00 -6.341138e-08 -1.700000e+00 -6.048319e-08 -1.800000e+00 -5.781519e-08 -2.000000e-01 -5.905777e-10 -3.000000e-01 -4.798739e-10 -4.000000e-01 -4.250848e-10 -5.000000e-01 -3.795678e-10 -6.000000e-01 -2.941309e-10 -7.000000e-01 -1.584921e-10 -8.000000e-01 3.724255e-11 -9.000000e-01 3.033627e-10 -1.000000e+00 6.509548e-10 -1.100000e+00 1.092135e-09 -1.200000e+00 1.640216e-09 -1.300000e+00 2.309857e-09 -1.400000e+00 3.117202e-09 -1.500000e+00 4.080030e-09 -1.600000e+00 5.217908e-09 -1.700000e+00 6.552361e-09 -1.800000e+00 8.107044e-09 -2.000000e-01 -2.603895e-09 -3.000000e-01 -2.163734e-09 -4.000000e-01 -1.882619e-09 -5.000000e-01 -1.687318e-09 -6.000000e-01 -1.551809e-09 -7.000000e-01 -1.431417e-09 -8.000000e-01 -1.278086e-09 -9.000000e-01 -1.081510e-09 -1.000000e+00 -8.312127e-10 -1.100000e+00 -5.161689e-10 -1.200000e+00 -1.245845e-10 -1.300000e+00 3.562840e-10 -1.400000e+00 9.402901e-10 -1.500000e+00 1.642551e-09 -1.600000e+00 2.479603e-09 -1.700000e+00 3.469559e-09 -1.800000e+00 4.632272e-09 -2.000000e-01 -7.722123e-09 -3.000000e-01 -6.534864e-09 -4.000000e-01 -5.677089e-09 -5.000000e-01 -5.060412e-09 -6.000000e-01 -4.597026e-09 -7.000000e-01 -4.228115e-09 -8.000000e-01 -3.931097e-09 -9.000000e-01 -3.662436e-09 -1.000000e+00 -3.374050e-09 -1.100000e+00 -3.054712e-09 -1.200000e+00 -2.692720e-09 -1.300000e+00 -2.275832e-09 -1.400000e+00 -1.791144e-09 -1.500000e+00 -1.224933e-09 -1.600000e+00 -5.624968e-10 -1.700000e+00 2.120221e-10 -1.800000e+00 1.115800e-09 -2.000000e-01 -1.825310e-08 -3.000000e-01 -1.574568e-08 -4.000000e-01 -1.379446e-08 -5.000000e-01 -1.227055e-08 -6.000000e-01 -1.108096e-08 -7.000000e-01 -1.013886e-08 -8.000000e-01 -9.368370e-09 -9.000000e-01 -8.718771e-09 -1.000000e+00 -8.164461e-09 -1.100000e+00 -7.659460e-09 -1.200000e+00 -7.154075e-09 -1.300000e+00 -6.635313e-09 -1.400000e+00 -6.089703e-09 -1.500000e+00 -5.503367e-09 -1.600000e+00 -4.861942e-09 -1.700000e+00 -4.150426e-09 -1.800000e+00 -3.352991e-09 -2.000000e-01 -3.718621e-08 -3.000000e-01 -3.254258e-08 -4.000000e-01 -2.879299e-08 -5.000000e-01 -2.574061e-08 -6.000000e-01 -2.324138e-08 -7.000000e-01 -2.119227e-08 -8.000000e-01 -1.950388e-08 -9.000000e-01 -1.809059e-08 -1.000000e+00 -1.688477e-08 -1.100000e+00 -1.583918e-08 -1.200000e+00 -1.492235e-08 -1.300000e+00 -1.408250e-08 -1.400000e+00 -1.326699e-08 -1.500000e+00 -1.246053e-08 -1.600000e+00 -1.164751e-08 -1.700000e+00 -1.081212e-08 -1.800000e+00 -9.938262e-09 -2.000000e-01 -8.938622e-08 -3.000000e-01 -7.938783e-08 -4.000000e-01 -7.102636e-08 -5.000000e-01 -6.402594e-08 -6.000000e-01 -5.812287e-08 -7.000000e-01 -5.311045e-08 -8.000000e-01 -4.883621e-08 -9.000000e-01 -4.518192e-08 -1.000000e+00 -4.204453e-08 -1.100000e+00 -3.932805e-08 -1.200000e+00 -3.694904e-08 -1.300000e+00 -3.484585e-08 -1.400000e+00 -3.297637e-08 -1.500000e+00 -3.130433e-08 -1.600000e+00 -2.976375e-08 -1.700000e+00 -2.829366e-08 -1.800000e+00 -2.687413e-08 -2.000000e-01 -1.832260e-07 -3.000000e-01 -1.643220e-07 -4.000000e-01 -1.480988e-07 -5.000000e-01 -1.342985e-07 -6.000000e-01 -1.225276e-07 -7.000000e-01 -1.124154e-07 -8.000000e-01 -1.036649e-07 -9.000000e-01 -9.604952e-08 -1.000000e+00 -8.939494e-08 -1.100000e+00 -8.356038e-08 -1.200000e+00 -7.842444e-08 -1.300000e+00 -7.387778e-08 -1.400000e+00 -6.982328e-08 -1.500000e+00 -6.618044e-08 -1.600000e+00 -6.288961e-08 -1.700000e+00 -5.991132e-08 -1.800000e+00 -5.721456e-08 tmpk8ny_4pz/tests/hisim/pmos/reference/8_dcSweep_COIIGS=0.standard0000644000175000017500000002266113546075722025133 0ustar carstencarstenV(d) I(g) -2.000000e-01 0.000000e+00 -3.000000e-01 0.000000e+00 -4.000000e-01 0.000000e+00 -5.000000e-01 0.000000e+00 -6.000000e-01 0.000000e+00 -7.000000e-01 0.000000e+00 -8.000000e-01 0.000000e+00 -9.000000e-01 0.000000e+00 -1.000000e+00 0.000000e+00 -1.100000e+00 0.000000e+00 -1.200000e+00 0.000000e+00 -1.300000e+00 0.000000e+00 -1.400000e+00 0.000000e+00 -1.500000e+00 0.000000e+00 -1.600000e+00 0.000000e+00 -1.700000e+00 0.000000e+00 -1.800000e+00 0.000000e+00 -2.000000e-01 0.000000e+00 -3.000000e-01 0.000000e+00 -4.000000e-01 0.000000e+00 -5.000000e-01 0.000000e+00 -6.000000e-01 0.000000e+00 -7.000000e-01 0.000000e+00 -8.000000e-01 0.000000e+00 -9.000000e-01 0.000000e+00 -1.000000e+00 0.000000e+00 -1.100000e+00 0.000000e+00 -1.200000e+00 0.000000e+00 -1.300000e+00 0.000000e+00 -1.400000e+00 0.000000e+00 -1.500000e+00 0.000000e+00 -1.600000e+00 0.000000e+00 -1.700000e+00 0.000000e+00 -1.800000e+00 0.000000e+00 -2.000000e-01 0.000000e+00 -3.000000e-01 0.000000e+00 -4.000000e-01 0.000000e+00 -5.000000e-01 0.000000e+00 -6.000000e-01 0.000000e+00 -7.000000e-01 0.000000e+00 -8.000000e-01 0.000000e+00 -9.000000e-01 0.000000e+00 -1.000000e+00 0.000000e+00 -1.100000e+00 0.000000e+00 -1.200000e+00 0.000000e+00 -1.300000e+00 0.000000e+00 -1.400000e+00 0.000000e+00 -1.500000e+00 0.000000e+00 -1.600000e+00 0.000000e+00 -1.700000e+00 0.000000e+00 -1.800000e+00 0.000000e+00 -2.000000e-01 0.000000e+00 -3.000000e-01 0.000000e+00 -4.000000e-01 0.000000e+00 -5.000000e-01 0.000000e+00 -6.000000e-01 0.000000e+00 -7.000000e-01 0.000000e+00 -8.000000e-01 0.000000e+00 -9.000000e-01 0.000000e+00 -1.000000e+00 0.000000e+00 -1.100000e+00 0.000000e+00 -1.200000e+00 0.000000e+00 -1.300000e+00 0.000000e+00 -1.400000e+00 0.000000e+00 -1.500000e+00 0.000000e+00 -1.600000e+00 0.000000e+00 -1.700000e+00 0.000000e+00 -1.800000e+00 0.000000e+00 -2.000000e-01 0.000000e+00 -3.000000e-01 0.000000e+00 -4.000000e-01 0.000000e+00 -5.000000e-01 0.000000e+00 -6.000000e-01 0.000000e+00 -7.000000e-01 0.000000e+00 -8.000000e-01 0.000000e+00 -9.000000e-01 0.000000e+00 -1.000000e+00 0.000000e+00 -1.100000e+00 0.000000e+00 -1.200000e+00 0.000000e+00 -1.300000e+00 0.000000e+00 -1.400000e+00 0.000000e+00 -1.500000e+00 0.000000e+00 -1.600000e+00 0.000000e+00 -1.700000e+00 0.000000e+00 -1.800000e+00 0.000000e+00 -2.000000e-01 0.000000e+00 -3.000000e-01 0.000000e+00 -4.000000e-01 0.000000e+00 -5.000000e-01 0.000000e+00 -6.000000e-01 0.000000e+00 -7.000000e-01 0.000000e+00 -8.000000e-01 0.000000e+00 -9.000000e-01 0.000000e+00 -1.000000e+00 0.000000e+00 -1.100000e+00 0.000000e+00 -1.200000e+00 0.000000e+00 -1.300000e+00 0.000000e+00 -1.400000e+00 0.000000e+00 -1.500000e+00 0.000000e+00 -1.600000e+00 0.000000e+00 -1.700000e+00 0.000000e+00 -1.800000e+00 0.000000e+00 -2.000000e-01 0.000000e+00 -3.000000e-01 0.000000e+00 -4.000000e-01 0.000000e+00 -5.000000e-01 0.000000e+00 -6.000000e-01 0.000000e+00 -7.000000e-01 0.000000e+00 -8.000000e-01 0.000000e+00 -9.000000e-01 0.000000e+00 -1.000000e+00 0.000000e+00 -1.100000e+00 0.000000e+00 -1.200000e+00 0.000000e+00 -1.300000e+00 0.000000e+00 -1.400000e+00 0.000000e+00 -1.500000e+00 0.000000e+00 -1.600000e+00 0.000000e+00 -1.700000e+00 0.000000e+00 -1.800000e+00 0.000000e+00 -2.000000e-01 0.000000e+00 -3.000000e-01 0.000000e+00 -4.000000e-01 0.000000e+00 -5.000000e-01 0.000000e+00 -6.000000e-01 0.000000e+00 -7.000000e-01 0.000000e+00 -8.000000e-01 0.000000e+00 -9.000000e-01 0.000000e+00 -1.000000e+00 0.000000e+00 -1.100000e+00 0.000000e+00 -1.200000e+00 0.000000e+00 -1.300000e+00 0.000000e+00 -1.400000e+00 0.000000e+00 -1.500000e+00 0.000000e+00 -1.600000e+00 0.000000e+00 -1.700000e+00 0.000000e+00 -1.800000e+00 0.000000e+00 -2.000000e-01 0.000000e+00 -3.000000e-01 0.000000e+00 -4.000000e-01 0.000000e+00 -5.000000e-01 0.000000e+00 -6.000000e-01 0.000000e+00 -7.000000e-01 0.000000e+00 -8.000000e-01 0.000000e+00 -9.000000e-01 0.000000e+00 -1.000000e+00 0.000000e+00 -1.100000e+00 0.000000e+00 -1.200000e+00 0.000000e+00 -1.300000e+00 0.000000e+00 -1.400000e+00 0.000000e+00 -1.500000e+00 0.000000e+00 -1.600000e+00 0.000000e+00 -1.700000e+00 0.000000e+00 -1.800000e+00 0.000000e+00 -2.000000e-01 0.000000e+00 -3.000000e-01 0.000000e+00 -4.000000e-01 0.000000e+00 -5.000000e-01 0.000000e+00 -6.000000e-01 0.000000e+00 -7.000000e-01 0.000000e+00 -8.000000e-01 0.000000e+00 -9.000000e-01 0.000000e+00 -1.000000e+00 0.000000e+00 -1.100000e+00 0.000000e+00 -1.200000e+00 0.000000e+00 -1.300000e+00 0.000000e+00 -1.400000e+00 0.000000e+00 -1.500000e+00 0.000000e+00 -1.600000e+00 0.000000e+00 -1.700000e+00 0.000000e+00 -1.800000e+00 0.000000e+00 -2.000000e-01 0.000000e+00 -3.000000e-01 0.000000e+00 -4.000000e-01 0.000000e+00 -5.000000e-01 0.000000e+00 -6.000000e-01 0.000000e+00 -7.000000e-01 0.000000e+00 -8.000000e-01 0.000000e+00 -9.000000e-01 0.000000e+00 -1.000000e+00 0.000000e+00 -1.100000e+00 0.000000e+00 -1.200000e+00 0.000000e+00 -1.300000e+00 0.000000e+00 -1.400000e+00 0.000000e+00 -1.500000e+00 0.000000e+00 -1.600000e+00 0.000000e+00 -1.700000e+00 0.000000e+00 -1.800000e+00 0.000000e+00 -2.000000e-01 0.000000e+00 -3.000000e-01 0.000000e+00 -4.000000e-01 0.000000e+00 -5.000000e-01 0.000000e+00 -6.000000e-01 0.000000e+00 -7.000000e-01 0.000000e+00 -8.000000e-01 0.000000e+00 -9.000000e-01 0.000000e+00 -1.000000e+00 0.000000e+00 -1.100000e+00 0.000000e+00 -1.200000e+00 0.000000e+00 -1.300000e+00 0.000000e+00 -1.400000e+00 0.000000e+00 -1.500000e+00 0.000000e+00 -1.600000e+00 0.000000e+00 -1.700000e+00 0.000000e+00 -1.800000e+00 0.000000e+00 -2.000000e-01 0.000000e+00 -3.000000e-01 0.000000e+00 -4.000000e-01 0.000000e+00 -5.000000e-01 0.000000e+00 -6.000000e-01 0.000000e+00 -7.000000e-01 0.000000e+00 -8.000000e-01 0.000000e+00 -9.000000e-01 0.000000e+00 -1.000000e+00 0.000000e+00 -1.100000e+00 0.000000e+00 -1.200000e+00 0.000000e+00 -1.300000e+00 0.000000e+00 -1.400000e+00 0.000000e+00 -1.500000e+00 0.000000e+00 -1.600000e+00 0.000000e+00 -1.700000e+00 0.000000e+00 -1.800000e+00 0.000000e+00 -2.000000e-01 0.000000e+00 -3.000000e-01 0.000000e+00 -4.000000e-01 0.000000e+00 -5.000000e-01 0.000000e+00 -6.000000e-01 0.000000e+00 -7.000000e-01 0.000000e+00 -8.000000e-01 0.000000e+00 -9.000000e-01 0.000000e+00 -1.000000e+00 0.000000e+00 -1.100000e+00 0.000000e+00 -1.200000e+00 0.000000e+00 -1.300000e+00 0.000000e+00 -1.400000e+00 0.000000e+00 -1.500000e+00 0.000000e+00 -1.600000e+00 0.000000e+00 -1.700000e+00 0.000000e+00 -1.800000e+00 0.000000e+00 -2.000000e-01 0.000000e+00 -3.000000e-01 0.000000e+00 -4.000000e-01 0.000000e+00 -5.000000e-01 0.000000e+00 -6.000000e-01 0.000000e+00 -7.000000e-01 0.000000e+00 -8.000000e-01 0.000000e+00 -9.000000e-01 0.000000e+00 -1.000000e+00 0.000000e+00 -1.100000e+00 0.000000e+00 -1.200000e+00 0.000000e+00 -1.300000e+00 0.000000e+00 -1.400000e+00 0.000000e+00 -1.500000e+00 0.000000e+00 -1.600000e+00 0.000000e+00 -1.700000e+00 0.000000e+00 -1.800000e+00 0.000000e+00 -2.000000e-01 0.000000e+00 -3.000000e-01 0.000000e+00 -4.000000e-01 0.000000e+00 -5.000000e-01 0.000000e+00 -6.000000e-01 0.000000e+00 -7.000000e-01 0.000000e+00 -8.000000e-01 0.000000e+00 -9.000000e-01 0.000000e+00 -1.000000e+00 0.000000e+00 -1.100000e+00 0.000000e+00 -1.200000e+00 0.000000e+00 -1.300000e+00 0.000000e+00 -1.400000e+00 0.000000e+00 -1.500000e+00 0.000000e+00 -1.600000e+00 0.000000e+00 -1.700000e+00 0.000000e+00 -1.800000e+00 0.000000e+00 -2.000000e-01 0.000000e+00 -3.000000e-01 0.000000e+00 -4.000000e-01 0.000000e+00 -5.000000e-01 0.000000e+00 -6.000000e-01 0.000000e+00 -7.000000e-01 0.000000e+00 -8.000000e-01 0.000000e+00 -9.000000e-01 0.000000e+00 -1.000000e+00 0.000000e+00 -1.100000e+00 0.000000e+00 -1.200000e+00 0.000000e+00 -1.300000e+00 0.000000e+00 -1.400000e+00 0.000000e+00 -1.500000e+00 0.000000e+00 -1.600000e+00 0.000000e+00 -1.700000e+00 0.000000e+00 -1.800000e+00 0.000000e+00 -2.000000e-01 0.000000e+00 -3.000000e-01 0.000000e+00 -4.000000e-01 0.000000e+00 -5.000000e-01 0.000000e+00 -6.000000e-01 0.000000e+00 -7.000000e-01 0.000000e+00 -8.000000e-01 0.000000e+00 -9.000000e-01 0.000000e+00 -1.000000e+00 0.000000e+00 -1.100000e+00 0.000000e+00 -1.200000e+00 0.000000e+00 -1.300000e+00 0.000000e+00 -1.400000e+00 0.000000e+00 -1.500000e+00 0.000000e+00 -1.600000e+00 0.000000e+00 -1.700000e+00 0.000000e+00 -1.800000e+00 0.000000e+00 -2.000000e-01 0.000000e+00 -3.000000e-01 0.000000e+00 -4.000000e-01 0.000000e+00 -5.000000e-01 0.000000e+00 -6.000000e-01 0.000000e+00 -7.000000e-01 0.000000e+00 -8.000000e-01 0.000000e+00 -9.000000e-01 0.000000e+00 -1.000000e+00 0.000000e+00 -1.100000e+00 0.000000e+00 -1.200000e+00 0.000000e+00 -1.300000e+00 0.000000e+00 -1.400000e+00 0.000000e+00 -1.500000e+00 0.000000e+00 -1.600000e+00 0.000000e+00 -1.700000e+00 0.000000e+00 -1.800000e+00 0.000000e+00 -2.000000e-01 0.000000e+00 -3.000000e-01 0.000000e+00 -4.000000e-01 0.000000e+00 -5.000000e-01 0.000000e+00 -6.000000e-01 0.000000e+00 -7.000000e-01 0.000000e+00 -8.000000e-01 0.000000e+00 -9.000000e-01 0.000000e+00 -1.000000e+00 0.000000e+00 -1.100000e+00 0.000000e+00 -1.200000e+00 0.000000e+00 -1.300000e+00 0.000000e+00 -1.400000e+00 0.000000e+00 -1.500000e+00 0.000000e+00 -1.600000e+00 0.000000e+00 -1.700000e+00 0.000000e+00 -1.800000e+00 0.000000e+00 -2.000000e-01 0.000000e+00 -3.000000e-01 0.000000e+00 -4.000000e-01 0.000000e+00 -5.000000e-01 0.000000e+00 -6.000000e-01 0.000000e+00 -7.000000e-01 0.000000e+00 -8.000000e-01 0.000000e+00 -9.000000e-01 0.000000e+00 -1.000000e+00 0.000000e+00 -1.100000e+00 0.000000e+00 -1.200000e+00 0.000000e+00 -1.300000e+00 0.000000e+00 -1.400000e+00 0.000000e+00 -1.500000e+00 0.000000e+00 -1.600000e+00 0.000000e+00 -1.700000e+00 0.000000e+00 -1.800000e+00 0.000000e+00 tmpk8ny_4pz/tests/hisim/pmos/reference/78_noise_COIGN=0_T27.standard0000644000175000017500000000353213546075722025257 0ustar carstencarstenFreq N(g) 1000 0 1258.925 0 1584.893 0 1995.262 0 2511.886 0 3162.278 0 3981.072 0 5011.872 0 6309.573 0 7943.282 0 10000 0 12589.25 0 15848.93 0 19952.62 0 25118.86 0 31622.78 0 39810.72 0 50118.72 0 63095.73 0 79432.82 0 100000 0 125892.5 0 158489.3 0 199526.2 0 251188.6 0 316227.8 0 398107.2 0 501187.2 0 630957.3 0 794328.2 0 1000000 0 1258925 0 1584893 0 1995262 0 2511886 0 3162278 0 3981072 0 5011872 0 6309573 0 7943282 0 10000000 0 12589250 0 15848930 0 19952620 0 25118860 0 31622780 0 39810720 0 50118720 0 63095730 0 79432820 0 100000000 0 125892500 0 158489300 0 199526200 0 251188600 0 316227800 0 398107200 0 501187200 0 630957300 0 794328200 0 1000000000 0 1258925000 0 1584893000 0 1995262000 0 2511886000 0 3162278000 0 3981072000 0 5011872000 0 6309573000 0 7943282000 0 10000000000 0 12589250000 0 15848930000 0 19952620000 0 25118860000 0 31622780000 0 39810720000 0 50118720000 0 63095730000 0 79432820000 0 100000000000 0 1000 0 1258.925 0 1584.893 0 1995.262 0 2511.886 0 3162.278 0 3981.072 0 5011.872 0 6309.573 0 7943.282 0 10000 0 12589.25 0 15848.93 0 19952.62 0 25118.86 0 31622.78 0 39810.72 0 50118.72 0 63095.73 0 79432.82 0 100000 0 125892.5 0 158489.3 0 199526.2 0 251188.6 0 316227.8 0 398107.2 0 501187.2 0 630957.3 0 794328.2 0 1000000 0 1258925 0 1584893 0 1995262 0 2511886 0 3162278 0 3981072 0 5011872 0 6309573 0 7943282 0 10000000 0 12589250 0 15848930 0 19952620 0 25118860 0 31622780 0 39810720 0 50118720 0 63095730 0 79432820 0 100000000 0 125892500 0 158489300 0 199526200 0 251188600 0 316227800 0 398107200 0 501187200 0 630957300 0 794328200 0 1000000000 0 1258925000 0 1584893000 0 1995262000 0 2511886000 0 3162278000 0 3981072000 0 5011872000 0 6309573000 0 7943282000 0 10000000000 0 12589250000 0 15848930000 0 19952620000 0 25118860000 0 31622780000 0 39810720000 0 50118720000 0 63095730000 0 79432820000 0 100000000000 0 tmpk8ny_4pz/tests/hisim/pmos/reference/37_acVd_CORSRD=-1_PT.standard0000644000175000017500000000723113546075722025174 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -0.2 3.070827e-04 3.168838e-03 9.46321356220637e-15 1.68777245697176e-14 -0.3 5.291150e-04 2.825787e-03 9.77419564640612e-15 1.60269443393651e-14 -0.4 8.001052e-04 2.438303e-03 1.01167527391549e-14 1.49046540355001e-14 -0.5 1.115874e-03 2.021390e-03 1.04844428387086e-14 1.3431373636603e-14 -0.6 1.469285e-03 1.589588e-03 1.08491229374474e-14 1.14664831046003e-14 -0.7 1.848942e-03 1.159338e-03 1.112244301145e-14 8.94694742242506e-15 -0.8 2.210602e-03 7.816956e-04 1.11623330222504e-14 6.50451776112657e-15 -0.9 2.440552e-03 5.688505e-04 1.10332729873068e-14 5.09558837965279e-15 -1 2.511867e-03 5.274743e-04 1.09398129620021e-14 4.69290827062539e-15 -1.1 2.557430e-03 5.123288e-04 1.08775529451449e-14 4.54927823173693e-15 -1.2 2.603894e-03 4.967127e-04 1.08137829278789e-14 4.38816018811352e-15 -1.3 2.651098e-03 4.808222e-04 1.07479629100579e-14 4.20927313967907e-15 -1.4 2.697314e-03 4.660078e-04 1.06800428916682e-14 3.99581908188545e-15 -1.5 2.741411e-03 4.529974e-04 1.06119628732353e-14 3.76966902065434e-15 -1.6 2.782891e-03 4.419930e-04 1.05456728552869e-14 3.55601796280738e-15 -1.7 2.821666e-03 4.329098e-04 1.04813228378639e-14 3.3514529074205e-15 -1.8 2.857869e-03 4.255407e-04 1.04204828213912e-14 3.18173586146887e-15 -0.2 2.915935e-04 2.732975e-03 9.95107969429825e-15 1.61176843639334e-14 -0.3 4.857969e-04 2.445072e-03 1.02601427779784e-14 1.53109441455049e-14 -0.4 7.128917e-04 2.129670e-03 1.0592242867896e-14 1.42711338639718e-14 -0.5 9.694648e-04 1.796161e-03 1.09460329636862e-14 1.29404335036788e-14 -0.6 1.250144e-03 1.454353e-03 1.13013030598771e-14 1.12279430400146e-14 -0.7 1.546903e-03 1.115750e-03 1.15935831390132e-14 9.09520346256603e-15 -0.8 1.836650e-03 8.082013e-04 1.17073731698224e-14 6.90403786929838e-15 -0.9 2.066424e-03 5.863588e-04 1.16347031501466e-14 5.37373445496205e-15 -1 2.182762e-03 4.940747e-04 1.15206431192644e-14 4.64186525680527e-15 -1.1 2.229434e-03 4.747444e-04 1.14507431003387e-14 4.39589919020889e-15 -1.2 2.266754e-03 4.648479e-04 1.13937830849165e-14 4.23321614616174e-15 -1.3 2.305611e-03 4.538406e-04 1.13365330694158e-14 4.07320910283914e-15 -1.4 2.345334e-03 4.423353e-04 1.1277303053379e-14 3.88769705261094e-15 -1.5 2.384596e-03 4.313781e-04 1.12172330371148e-14 3.68818899859327e-15 -1.6 2.422514e-03 4.215541e-04 1.11579430210618e-14 3.49665394673431e-15 -1.7 2.458635e-03 4.130870e-04 1.11000630053905e-14 3.31611189785177e-15 -1.8 2.492792e-03 4.059900e-04 1.10438629901741e-14 3.14630485187577e-15 -0.2 2.600396e-04 2.764567e-03 7.0775439162759e-15 1.42371738547769e-14 -0.3 4.383949e-04 2.254702e-03 8.24029523109589e-15 1.38747737566555e-14 -0.4 6.263702e-04 1.924817e-03 9.26224350779285e-15 1.31877335706364e-14 -0.5 8.260413e-04 1.624089e-03 1.01096427372299e-14 1.21788832974858e-14 -0.6 1.036667e-03 1.339680e-03 1.07959429230487e-14 1.08244229307597e-14 -0.7 1.254457e-03 1.071379e-03 1.13251930663454e-14 9.12920447177195e-15 -0.8 1.469055e-03 8.282637e-04 1.16571131562143e-14 7.288262973329e-15 -0.9 1.658075e-03 6.322471e-04 1.1772523187462e-14 5.75369355783764e-15 -1 1.794827e-03 5.055302e-04 1.17583531836254e-14 4.79799829907898e-15 -1.1 1.869935e-03 4.489661e-04 1.17209131734884e-14 4.29199216207561e-15 -1.2 1.907163e-03 4.320105e-04 1.17020831683901e-14 4.04541409531352e-15 -1.3 1.935030e-03 4.245511e-04 1.1690903165363e-14 3.89530805467165e-15 -1.4 1.962980e-03 4.173893e-04 1.16765031614642e-14 3.74010101264867e-15 -1.5 1.991791e-03 4.097803e-04 1.1657633156355e-14 3.57350296754152e-15 -1.6 2.020753e-03 4.022655e-04 1.16353331503172e-14 3.40738992256569e-15 -1.7 2.049184e-03 3.953078e-04 1.1610823143681e-14 3.25222688055462e-15 -1.8 2.076631e-03 3.891612e-04 1.15847831366306e-14 3.10585284092321e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/63_acFreq_COFLICK=1.standard0000644000175000017500000002530213546075722025114 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1258.925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584.893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995.262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511.886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162.278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981.072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011.872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309.573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943.282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 10000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589.25 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848.93 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952.62 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118.86 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622.78 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810.72 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118.72 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095.73 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432.82 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 125892.5 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 158489.3 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 199526.2 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 251188.6 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 316227.8 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 398107.2 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 501187.2 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 630957.3 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 794328.2 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 1000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 1258925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 10000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589250 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848930 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952620 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118860 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622780 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810720 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118720 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095730 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432820 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258.925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584.893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995.262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511.886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162.278 2.08988054797393e-14 1.68486984597449e-14 3.40873274812869e-15 3981.072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011.872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309.573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943.282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589.25 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848.93 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952.62 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118.86 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622.78 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810.72 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118.72 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095.73 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432.82 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 125892.5 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 158489.3 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 199526.2 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 251188.6 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 316227.8 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 398107.2 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 501187.2 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 630957.3 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 794328.2 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 1000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162278 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 3981072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589250 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848930 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952620 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118860 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622780 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810720 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118720 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095730 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432820 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258.925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584.893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995.262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511.886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162.278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981.072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011.872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309.573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943.282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589.25 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848.93 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952.62 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118.86 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622.78 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810.72 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118.72 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095.73 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432.82 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 125892.5 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 158489.3 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 199526.2 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 251188.6 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 316227.8 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 398107.2 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 501187.2 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 630957.3 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 794328.2 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 1000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589250 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848930 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952620 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118860 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622780 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810720 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118720 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095730 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432820 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/52_acFreq_COSTI=0.standard0000644000175000017500000002530213546075722024720 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1258.925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584.893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995.262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511.886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162.278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981.072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011.872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309.573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943.282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 10000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589.25 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848.93 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952.62 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118.86 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622.78 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810.72 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118.72 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095.73 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432.82 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 125892.5 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 158489.3 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 199526.2 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 251188.6 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 316227.8 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 398107.2 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 501187.2 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 630957.3 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 794328.2 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 1000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 1258925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 10000000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589250 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848930 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952620 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118860 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622780 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810720 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 50118720 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095730 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 79432820 2.11171455844556e-14 1.69788632426838e-14 3.49561413489302e-15 100000000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258.925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584.893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995.262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511.886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162.278 2.08988054797393e-14 1.68486984597449e-14 3.40873274812869e-15 3981.072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011.872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309.573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943.282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589.25 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848.93 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952.62 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118.86 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622.78 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810.72 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118.72 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095.73 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432.82 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 125892.5 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 158489.3 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 199526.2 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 251188.6 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 316227.8 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 398107.2 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 501187.2 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 630957.3 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 794328.2 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 1000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162278 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 3981072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589250 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848930 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952620 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118860 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622780 2.08988054797393e-14 1.68486984597449e-14 3.4087327481287e-15 39810720 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 50118720 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095730 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 79432820 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 100000000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258.925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584.893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995.262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511.886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162.278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981.072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011.872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309.573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943.282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589.25 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848.93 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952.62 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118.86 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622.78 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810.72 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118.72 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095.73 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432.82 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 125892.5 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 158489.3 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 199526.2 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 251188.6 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 316227.8 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 398107.2 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 501187.2 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 630957.3 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 794328.2 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 1000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589250 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848930 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952620 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118860 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 31622780 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810720 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 50118720 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095730 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 79432820 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 100000000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/59_acFreq_CORG=1.standard0000644000175000017500000002530213546075722024601 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 1258.925 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 1584.893 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 1995.262 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 2511.886 2.11171572063402e-14 1.69788648518506e-14 3.49561428208827e-15 3162.278 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 3981.072 2.11171482711135e-14 1.69788587749195e-14 3.49561378987451e-15 5011.872 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 6309.573 2.11171534386037e-14 1.6978862534418e-14 3.49561456110004e-15 7943.282 2.11171455844556e-14 1.69788632426838e-14 3.49561413489303e-15 10000 2.11171553142619e-14 1.69788562304694e-14 3.49561391654372e-15 12589.25 2.11171621694573e-14 1.69788618432594e-14 3.49561485955185e-15 15848.93 2.11171494980364e-14 1.69788616932266e-14 3.49561391193746e-15 19952.62 2.11171514897803e-14 1.69788606973421e-14 3.49561419488233e-15 25118.86 2.11171572063402e-14 1.69788648518506e-14 3.49561428208828e-15 31622.78 2.11171486771481e-14 1.69788598541018e-14 3.49561354118749e-15 39810.72 2.11171482711135e-14 1.69788587749195e-14 3.4956133900954e-15 50118.72 2.11171517393449e-14 1.69788619339763e-14 3.49561386127376e-15 63095.73 2.11171509161677e-14 1.6978862534418e-14 3.49561456110004e-15 79432.82 2.11171455844556e-14 1.69788612390417e-14 3.49561413489302e-15 100000 2.1117155314262e-14 1.69788562304694e-14 3.49561391654372e-15 125892.5 2.11171495273267e-14 1.69788618432594e-14 3.49561359533879e-15 158489.3 2.11171394560372e-14 1.69788516512274e-14 3.49561290773753e-15 199526.2 2.11171355364927e-14 1.69788527206983e-14 3.49561180188918e-15 251188.6 2.11171318620462e-14 1.69788458436301e-14 3.49561048044418e-15 316227.8 2.11171084137828e-14 1.69788246236571e-14 3.49560649509855e-15 398107.2 2.11170843064555e-14 1.69788068036349e-14 3.49560259605936e-15 501187.2 2.11170501214628e-14 1.69787793694471e-14 3.49559798347968e-15 630957.3 2.11169894802614e-14 1.69787313677441e-14 3.49558681430364e-15 794328.2 2.11168851109813e-14 1.69786528602623e-14 3.4955700547666e-15 1000000 2.11167415114099e-14 1.69785220050889e-14 3.49554547991819e-15 1258925 2.11165047786643e-14 1.69783435159033e-14 3.49550613722839e-15 1584893 2.11161151721142e-14 1.69780282072893e-14 3.49544219375037e-15 1995262 2.11155083011526e-14 1.69775365744673e-14 3.49534139366355e-15 2511886 2.11145404079864e-14 1.69767612754499e-14 3.49518216187586e-15 3162278 2.11130065834371e-14 1.69755280606186e-14 3.49492805739229e-15 3981072 2.11105878958775e-14 1.69735816906347e-14 3.49452719024676e-15 5011872 2.11067517842258e-14 1.69705006876164e-14 3.49389270839603e-15 6309573 2.11006743639783e-14 1.6965612177919e-14 3.4928852853087e-15 7943282 2.10910381277584e-14 1.69578730879363e-14 3.49129227886111e-15 10000000 2.10758068600467e-14 1.69456246783518e-14 3.48877025399077e-15 12589250 2.10517012170312e-14 1.69262452955581e-14 3.48478055359798e-15 15848930 2.10136064438226e-14 1.68956034774875e-14 3.4784732234264e-15 19952620 2.09535106417348e-14 1.68472859574683e-14 3.46852551245666e-15 25118860 2.08589685474579e-14 1.67712697398326e-14 3.45287556553674e-15 31622780 2.07108510573335e-14 1.66521830392801e-14 3.42835761569563e-15 39810720 2.04803801007393e-14 1.64668776567181e-14 3.39020603017982e-15 50118720 2.01254310725419e-14 1.61814854666505e-14 3.33145017277416e-15 63095730 1.95873968799981e-14 1.57488899314246e-14 3.24238720741072e-15 79432820 1.87912036152189e-14 1.51087258098351e-14 3.11059025969352e-15 100000000 1.76538800906051e-14 1.41942861207819e-14 2.92232507913127e-15 1000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 1258.925 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 1584.893 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 1995.262 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 2511.886 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 3162.278 2.08988054797393e-14 1.68486984597449e-14 3.40873274812869e-15 3981.072 2.08988049110359e-14 1.6848698691475e-14 3.40873299358995e-15 5011.872 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 6309.573 2.08988063304251e-14 1.68486997900702e-14 3.40873429669999e-15 7943.282 2.08988087036962e-14 1.68486986366303e-14 3.4087342093483e-15 10000 2.08988106478342e-14 1.68486993180089e-14 3.40873282465929e-15 12589.25 2.08988072891361e-14 1.68486984662453e-14 3.40873434519155e-15 15848.93 2.08988063084553e-14 1.68486972990147e-14 3.40873354707067e-15 19952.62 2.08988068183911e-14 1.68486978234251e-14 3.40873338801773e-15 25118.86 2.08988097775998e-14 1.68487028940254e-14 3.40873404231322e-15 31622.78 2.08988054797393e-14 1.68486934268242e-14 3.4087327481287e-15 39810.72 2.08988049110359e-14 1.68486946936839e-14 3.40873299358995e-15 50118.72 2.08988066663439e-14 1.68486989537088e-14 3.40873374765451e-15 63095.73 2.08988063304251e-14 1.68486972676341e-14 3.40873429669999e-15 79432.82 2.08988087036962e-14 1.68486966329882e-14 3.40873220570619e-15 100000 2.08987947323399e-14 1.68486993180089e-14 3.40873282465929e-15 125892.5 2.08988072891361e-14 1.68486984662453e-14 3.40873308097849e-15 158489.3 2.08987962664561e-14 1.68486872570155e-14 3.40873153867082e-15 199526.2 2.08987908651034e-14 1.68486898467813e-14 3.40873099502459e-15 251188.6 2.08987844333058e-14 1.68486775497314e-14 3.40872960706177e-15 316227.8 2.0898765216374e-14 1.68486632293002e-14 3.40872620533182e-15 398107.2 2.08987409463779e-14 1.68486467201904e-14 3.40872259933302e-15 501187.2 2.08987050484619e-14 1.68486163891796e-14 3.40871786986044e-15 630957.3 2.08986474169548e-14 1.68485711458323e-14 3.40870654990359e-15 794328.2 2.08985482302219e-14 1.6848494265135e-14 3.40869213286398e-15 1000000 2.08983968449821e-14 1.68483810081227e-14 3.40866757113262e-15 1258925 2.08981751826044e-14 1.68481927810199e-14 3.40863067972035e-15 1584893 2.08978021085309e-14 1.68478838970759e-14 3.40856885828305e-15 1995262 2.08972114896263e-14 1.68474135837695e-14 3.40847334942908e-15 2511886 2.08962753482015e-14 1.68466563422862e-14 3.40832029671394e-15 3162278 2.0894789209045e-14 1.68454572588337e-14 3.40807796514958e-15 3981072 2.08924404275651e-14 1.68435655276707e-14 3.40769516701392e-15 5011872 2.08887242671064e-14 1.68405726987012e-14 3.40708880818835e-15 6309573 2.08828342654429e-14 1.68358202316685e-14 3.40612862027444e-15 7943282 2.08735027038431e-14 1.68282975526632e-14 3.40460670660108e-15 10000000 2.08587354331636e-14 1.68163908645612e-14 3.4021963311465e-15 12589250 2.08353690776116e-14 1.67975484056976e-14 3.39838549705405e-15 15848930 2.07984264840037e-14 1.67677688271003e-14 3.39236107150185e-15 19952620 2.07401593493792e-14 1.67208003163541e-14 3.38285715545328e-15 25118860 2.06484841859259e-14 1.66468862810357e-14 3.36790375109863e-15 31622780 2.05048234168032e-14 1.65310658033664e-14 3.3444719137273e-15 39810720 2.02811981535234e-14 1.63507818024509e-14 3.30799745238293e-15 50118720 1.99365996431674e-14 1.60729639197071e-14 3.25179127990019e-15 63095730 1.94138003095404e-14 1.56514810190088e-14 3.16651989874538e-15 79432820 1.8639143208184e-14 1.50269491607453e-14 3.0401682504428e-15 100000000 1.75305031787202e-14 1.41331547071403e-14 2.85933951040265e-15 1000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 1258.925 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 1584.893 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 1995.262 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 2511.886 2.06409315863188e-14 1.66781104512232e-14 3.32505795490501e-15 3162.278 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 3981.072 2.06409273945242e-14 1.66781049485933e-14 3.32505722645022e-15 5011.872 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 6309.573 2.06409301271208e-14 1.66781049184957e-14 3.3250575260661e-15 7943.282 2.06409199276795e-14 1.66781045400751e-14 3.32505810753794e-15 10000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 12589.25 2.06409331084511e-14 1.66781055554617e-14 3.32505861094712e-15 15848.93 2.06409277678472e-14 1.6678103815843e-14 3.32505758416292e-15 19952.62 2.0640929900211e-14 1.6678109318609e-14 3.32505839430593e-15 25118.86 2.06409315863188e-14 1.66781041151497e-14 3.32505795490501e-15 31622.78 2.06409236575502e-14 1.66781025807285e-14 3.32505742224436e-15 39810.72 2.06409273945242e-14 1.66781009508022e-14 3.32505722645022e-15 50118.72 2.06409290616552e-14 1.66781047586088e-14 3.32505777287959e-15 63095.73 2.06409276046847e-14 1.66781049184957e-14 3.3250575260661e-15 79432.82 2.06409199276795e-14 1.6678102536433e-14 3.32505810753794e-15 100000 2.06409318935424e-14 1.66781011345087e-14 3.32505711332872e-15 125892.5 2.06409331084511e-14 1.66781055554617e-14 3.32505734673406e-15 158489.3 2.0640917725848e-14 1.66780937738437e-14 3.325056579963e-15 199526.2 2.06409139469233e-14 1.66780933653214e-14 3.32505600131278e-15 251188.6 2.06409062420249e-14 1.66780851069292e-14 3.32505415326092e-15 316227.8 2.06408884271055e-14 1.66780723832045e-14 3.32505087944749e-15 398107.2 2.06408634298662e-14 1.66780529773087e-14 3.32504763175152e-15 501187.2 2.0640830619332e-14 1.66780285451972e-14 3.32504189508551e-15 630957.3 2.06407762585226e-14 1.66779813191299e-14 3.32503230170574e-15 794328.2 2.06406794906263e-14 1.66779081831483e-14 3.32501803469574e-15 1000000 2.06405340061846e-14 1.66777987401168e-14 3.32499504290092e-15 1258925 2.06403262861807e-14 1.6677612512367e-14 3.32496000232817e-15 1584893 2.06399536939205e-14 1.66773205399019e-14 3.32490193317462e-15 1995262 2.0639390407953e-14 1.66768649621725e-14 3.32481032068301e-15 2511886 2.06384921980229e-14 1.66761335962925e-14 3.32466511834827e-15 3162278 2.0637058374476e-14 1.66749771369927e-14 3.32443434666547e-15 3981072 2.06347947829386e-14 1.66731516853895e-14 3.32406977204237e-15 5011872 2.06312150272402e-14 1.6670257952777e-14 3.3234922223838e-15 6309573 2.0625538222427e-14 1.66656693088365e-14 3.32257797144237e-15 7943282 2.06165556396182e-14 1.66584047308466e-14 3.32113096900175e-15 10000000 2.06023209043483e-14 1.66469067656626e-14 3.31883733815269e-15 12589250 2.05797957647021e-14 1.66287127510723e-14 3.31521039118275e-15 15848930 2.054421327312e-14 1.65999569777194e-14 3.30947742233451e-15 19952620 2.04880575213276e-14 1.65545830123535e-14 3.30043130416429e-15 25118860 2.03996855879645e-14 1.64831811501235e-14 3.28619628172558e-15 31622780 2.02611746942676e-14 1.63712605062656e-14 3.26388327808963e-15 39810720 2.00454723976348e-14 1.61969667889204e-14 3.22913502575758e-15 50118720 1.9712856120181e-14 1.59282124222436e-14 3.17555405164938e-15 63095730 1.92077223302425e-14 1.55200570566428e-14 3.0941814780949e-15 79432820 1.84580981143815e-14 1.49143524887148e-14 2.97342492810659e-15 100000000 1.73829028844968e-14 1.40455781081546e-14 2.80021981524173e-15 tmpk8ny_4pz/tests/hisim/pmos/reference/39_acVd_VFBCL.standard0000644000175000017500000000725113546075722024202 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -0.2 -4.155438e-05 2.520459e-03 5.76561156106449e-14 5.48672548555487e-14 -0.3 -5.749442e-05 2.511981e-03 5.84363758219037e-14 5.39677846120132e-14 -0.4 -6.916320e-05 2.494623e-03 5.92528760429747e-14 5.29878443466901e-14 -0.5 -7.578415e-05 2.467578e-03 6.01084362746214e-14 5.19164440566038e-14 -0.6 -7.663424e-05 2.430479e-03 6.1004416517212e-14 5.07427337388166e-14 -0.7 -7.107657e-05 2.383302e-03 6.19409767707897e-14 4.94555633903096e-14 -0.8 -5.858078e-05 2.326248e-03 6.29171470350921e-14 4.80430530078662e-14 -0.9 -3.873238e-05 2.259677e-03 6.39307573095315e-14 4.64922325879748e-14 -1 -1.123342e-05 2.184070e-03 6.49784475931982e-14 4.47887021267365e-14 -1.1 2.410310e-05 2.099996e-03 6.60555178848197e-14 4.29179016202091e-14 -1.2 6.736190e-05 2.008089e-03 6.71556881826956e-14 4.08743610669116e-14 -1.3 1.185327e-04 1.909038e-03 6.8270648484576e-14 3.86513504650218e-14 -1.4 1.775101e-04 1.803592e-03 6.93894287874906e-14 3.62361898111065e-14 -1.5 2.440794e-04 1.692585e-03 7.04976590875488e-14 3.36624891142658e-14 -1.6 3.178825e-04 1.576990e-03 7.15770893798093e-14 3.09523183804753e-14 -1.7 3.983621e-04 1.457987e-03 7.26056196582884e-14 2.81370776182365e-14 -1.8 4.846908e-04 1.337028e-03 7.35582699162226e-14 2.52673068412336e-14 -0.2 -1.602504e-05 2.186276e-03 5.7366495532229e-14 5.45981847826968e-14 -0.3 -1.963066e-05 2.172405e-03 5.81355457404527e-14 5.36997045394293e-14 -0.4 -1.964567e-05 2.152080e-03 5.89402459583288e-14 5.27213742745421e-14 -0.5 -1.557102e-05 2.124572e-03 5.97834161866208e-14 5.16521439850434e-14 -0.6 -6.929603e-06 2.089496e-03 6.06663864256888e-14 5.04810936679764e-14 -0.7 6.710486e-06 2.046726e-03 6.15893166755762e-14 4.91969033202762e-14 -0.8 2.571886e-05 1.996317e-03 6.25512169360149e-14 4.77876329387101e-14 -0.9 5.039149e-05 1.938459e-03 6.35499172064174e-14 4.62406725198639e-14 -1 8.094422e-05 1.873456e-03 6.45820374858685e-14 4.45433520603069e-14 -1.1 1.175103e-04 1.801708e-03 6.56428877730983e-14 4.26864415575403e-14 -1.2 1.601406e-04 1.723699e-03 6.67262880664337e-14 4.0675581013091e-14 -1.3 2.088041e-04 1.639986e-03 6.78241483636841e-14 3.85087504264122e-14 -1.4 2.633857e-04 1.551197e-03 6.89259686620068e-14 3.61668397923297e-14 -1.5 3.236756e-04 1.458047e-03 7.00182489577464e-14 3.36706191164671e-14 -1.6 3.893473e-04 1.361360e-03 7.10839792462976e-14 3.10495284067953e-14 -1.7 4.599226e-04 1.262113e-03 7.21027295221287e-14 2.83184976673568e-14 -1.8 5.347272e-04 1.161477e-03 7.30514697790042e-14 2.55225469103409e-14 -0.2 4.554976e-06 1.828164e-03 5.67913253764992e-14 5.42162746792929e-14 -0.3 1.054929e-05 1.810239e-03 5.75449955805587e-14 5.3320034436632e-14 -0.4 1.938799e-05 1.787937e-03 5.833320579397e-14 5.23451141726681e-14 -0.5 3.135973e-05 1.760664e-03 5.91588760175238e-14 5.12801938843363e-14 -0.6 4.674706e-05 1.728065e-03 6.00234362516073e-14 5.01139635685743e-14 -0.7 6.581116e-05 1.689980e-03 6.09270664962691e-14 4.88346432221927e-14 -0.8 8.877902e-05 1.646389e-03 6.18687967512467e-14 4.7429772841818e-14 -0.9 1.158333e-04 1.597380e-03 6.28464270159443e-14 4.58866924240222e-14 -1 1.471046e-04 1.543138e-03 6.38565972894524e-14 4.41947619659247e-14 -1.1 1.826656e-04 1.483935e-03 6.4894647570509e-14 4.23523014670704e-14 -1.2 2.225274e-04 1.420127e-03 6.59545078574708e-14 4.03810909333566e-14 -1.3 2.666370e-04 1.352140e-03 6.70283881482286e-14 3.82826803652028e-14 -1.4 3.148737e-04 1.280474e-03 6.81063784400991e-14 3.60278797547057e-14 -1.5 3.670424e-04 1.205698e-03 6.91759787296981e-14 3.36293291052876e-14 -1.6 4.228604e-04 1.128471e-03 7.02217190128368e-14 3.11105484233167e-14 -1.7 4.819387e-04 1.049552e-03 7.12252292845416e-14 2.849752771583e-14 -1.8 5.437581e-04 9.698234e-04 7.21658095392078e-14 2.58132469890493e-14 tmpk8ny_4pz/tests/hisim/pmos/reference/79_noise_COIGN=0_T-55.standard0000644000175000017500000000353213546075722025336 0ustar carstencarstenFreq N(g) 1000 0 1258.925 0 1584.893 0 1995.262 0 2511.886 0 3162.278 0 3981.072 0 5011.872 0 6309.573 0 7943.282 0 10000 0 12589.25 0 15848.93 0 19952.62 0 25118.86 0 31622.78 0 39810.72 0 50118.72 0 63095.73 0 79432.82 0 100000 0 125892.5 0 158489.3 0 199526.2 0 251188.6 0 316227.8 0 398107.2 0 501187.2 0 630957.3 0 794328.2 0 1000000 0 1258925 0 1584893 0 1995262 0 2511886 0 3162278 0 3981072 0 5011872 0 6309573 0 7943282 0 10000000 0 12589250 0 15848930 0 19952620 0 25118860 0 31622780 0 39810720 0 50118720 0 63095730 0 79432820 0 100000000 0 125892500 0 158489300 0 199526200 0 251188600 0 316227800 0 398107200 0 501187200 0 630957300 0 794328200 0 1000000000 0 1258925000 0 1584893000 0 1995262000 0 2511886000 0 3162278000 0 3981072000 0 5011872000 0 6309573000 0 7943282000 0 10000000000 0 12589250000 0 15848930000 0 19952620000 0 25118860000 0 31622780000 0 39810720000 0 50118720000 0 63095730000 0 79432820000 0 100000000000 0 1000 0 1258.925 0 1584.893 0 1995.262 0 2511.886 0 3162.278 0 3981.072 0 5011.872 0 6309.573 0 7943.282 0 10000 0 12589.25 0 15848.93 0 19952.62 0 25118.86 0 31622.78 0 39810.72 0 50118.72 0 63095.73 0 79432.82 0 100000 0 125892.5 0 158489.3 0 199526.2 0 251188.6 0 316227.8 0 398107.2 0 501187.2 0 630957.3 0 794328.2 0 1000000 0 1258925 0 1584893 0 1995262 0 2511886 0 3162278 0 3981072 0 5011872 0 6309573 0 7943282 0 10000000 0 12589250 0 15848930 0 19952620 0 25118860 0 31622780 0 39810720 0 50118720 0 63095730 0 79432820 0 100000000 0 125892500 0 158489300 0 199526200 0 251188600 0 316227800 0 398107200 0 501187200 0 630957300 0 794328200 0 1000000000 0 1258925000 0 1584893000 0 1995262000 0 2511886000 0 3162278000 0 3981072000 0 5011872000 0 6309573000 0 7943282000 0 10000000000 0 12589250000 0 15848930000 0 19952620000 0 25118860000 0 31622780000 0 39810720000 0 50118720000 0 63095730000 0 79432820000 0 100000000000 0 tmpk8ny_4pz/tests/hisim/pmos/reference/3_dcSweep_CORSRD=-1_PT.standard0000644000175000017500000002342613546075722025626 0ustar carstencarstenV(d) I(d) -2.000000e-01 -1.218445e-04 -3.000000e-01 -1.359275e-04 -4.000000e-01 -1.496661e-04 -5.000000e-01 -1.635169e-04 -6.000000e-01 -1.776681e-04 -7.000000e-01 -1.921813e-04 -8.000000e-01 -2.070855e-04 -9.000000e-01 -2.224045e-04 -1.000000e+00 -2.381612e-04 -1.100000e+00 -2.543779e-04 -1.200000e+00 -2.710759e-04 -1.300000e+00 -2.882757e-04 -1.400000e+00 -3.059976e-04 -1.500000e+00 -3.242613e-04 -1.600000e+00 -3.430869e-04 -1.700000e+00 -3.624946e-04 -1.800000e+00 -3.825050e-04 -2.000000e-01 -4.370968e-04 -3.000000e-01 -5.229236e-04 -4.000000e-01 -5.667245e-04 -5.000000e-01 -6.061559e-04 -6.000000e-01 -6.444297e-04 -7.000000e-01 -6.816705e-04 -8.000000e-01 -7.182260e-04 -9.000000e-01 -7.544260e-04 -1.000000e+00 -7.905273e-04 -1.100000e+00 -8.267201e-04 -1.200000e+00 -8.631441e-04 -1.300000e+00 -8.999037e-04 -1.400000e+00 -9.370789e-04 -1.500000e+00 -9.747324e-04 -1.600000e+00 -1.012915e-03 -1.700000e+00 -1.051670e-03 -1.800000e+00 -1.091033e-03 -2.000000e-01 -7.233047e-04 -3.000000e-01 -9.570462e-04 -4.000000e-01 -1.110404e-03 -5.000000e-01 -1.200296e-03 -6.000000e-01 -1.265381e-03 -7.000000e-01 -1.327526e-03 -8.000000e-01 -1.388138e-03 -9.000000e-01 -1.447117e-03 -1.000000e+00 -1.504653e-03 -1.100000e+00 -1.561056e-03 -1.200000e+00 -1.616641e-03 -1.300000e+00 -1.671685e-03 -1.400000e+00 -1.726415e-03 -1.500000e+00 -1.781015e-03 -1.600000e+00 -1.835631e-03 -1.700000e+00 -1.890382e-03 -1.800000e+00 -1.945363e-03 -2.000000e-01 -9.496160e-04 -3.000000e-01 -1.311036e-03 -4.000000e-01 -1.595941e-03 -5.000000e-01 -1.808179e-03 -6.000000e-01 -1.955089e-03 -7.000000e-01 -2.055126e-03 -8.000000e-01 -2.138023e-03 -9.000000e-01 -2.218092e-03 -1.000000e+00 -2.296572e-03 -1.100000e+00 -2.373350e-03 -1.200000e+00 -2.448454e-03 -1.300000e+00 -2.522053e-03 -1.400000e+00 -2.594383e-03 -1.500000e+00 -2.665687e-03 -1.600000e+00 -2.736197e-03 -1.700000e+00 -2.806116e-03 -1.800000e+00 -2.875621e-03 -2.000000e-01 -1.124405e-03 -3.000000e-01 -1.589375e-03 -4.000000e-01 -1.984279e-03 -5.000000e-01 -2.310637e-03 -6.000000e-01 -2.571506e-03 -7.000000e-01 -2.771379e-03 -8.000000e-01 -2.918910e-03 -9.000000e-01 -3.030147e-03 -1.000000e+00 -3.127385e-03 -1.100000e+00 -3.221593e-03 -1.200000e+00 -3.314176e-03 -1.300000e+00 -3.405134e-03 -1.400000e+00 -3.494437e-03 -1.500000e+00 -3.582151e-03 -1.600000e+00 -3.668413e-03 -1.700000e+00 -3.753397e-03 -1.800000e+00 -3.837286e-03 -2.000000e-01 -1.308714e-03 -3.000000e-01 -1.889471e-03 -4.000000e-01 -2.412276e-03 -5.000000e-01 -2.875216e-03 -6.000000e-01 -3.278747e-03 -7.000000e-01 -3.624681e-03 -8.000000e-01 -3.915597e-03 -9.000000e-01 -4.154963e-03 -1.000000e+00 -4.348045e-03 -1.100000e+00 -4.502801e-03 -1.200000e+00 -4.630145e-03 -1.300000e+00 -4.744241e-03 -1.400000e+00 -4.854615e-03 -1.500000e+00 -4.963178e-03 -1.600000e+00 -5.070216e-03 -1.700000e+00 -5.175741e-03 -1.800000e+00 -5.279767e-03 -2.000000e-01 -1.421464e-03 -3.000000e-01 -2.078994e-03 -4.000000e-01 -2.691296e-03 -5.000000e-01 -3.254323e-03 -6.000000e-01 -3.766191e-03 -7.000000e-01 -4.226654e-03 -8.000000e-01 -4.636595e-03 -9.000000e-01 -4.997616e-03 -1.000000e+00 -5.311824e-03 -1.100000e+00 -5.581907e-03 -1.200000e+00 -5.811476e-03 -1.300000e+00 -6.005412e-03 -1.400000e+00 -6.169864e-03 -1.500000e+00 -6.311975e-03 -1.600000e+00 -6.440098e-03 -1.700000e+00 -6.562593e-03 -1.800000e+00 -6.682794e-03 -2.000000e-01 -1.540854e-04 -3.000000e-01 -1.740702e-04 -4.000000e-01 -1.912281e-04 -5.000000e-01 -2.081408e-04 -6.000000e-01 -2.250953e-04 -7.000000e-01 -2.422435e-04 -8.000000e-01 -2.596794e-04 -9.000000e-01 -2.774674e-04 -1.000000e+00 -2.956561e-04 -1.100000e+00 -3.142841e-04 -1.200000e+00 -3.333834e-04 -1.300000e+00 -3.529818e-04 -1.400000e+00 -3.731041e-04 -1.500000e+00 -3.937738e-04 -1.600000e+00 -4.150128e-04 -1.700000e+00 -4.368430e-04 -1.800000e+00 -4.592857e-04 -2.000000e-01 -3.816322e-04 -3.000000e-01 -4.773564e-04 -4.000000e-01 -5.285764e-04 -5.000000e-01 -5.659175e-04 -6.000000e-01 -6.017025e-04 -7.000000e-01 -6.366047e-04 -8.000000e-01 -6.707288e-04 -9.000000e-01 -7.043162e-04 -1.000000e+00 -7.376125e-04 -1.100000e+00 -7.708213e-04 -1.200000e+00 -8.041007e-04 -1.300000e+00 -8.375716e-04 -1.400000e+00 -8.713266e-04 -1.500000e+00 -9.054384e-04 -1.600000e+00 -9.399648e-04 -1.700000e+00 -9.749534e-04 -1.800000e+00 -1.010444e-03 -2.000000e-01 -5.875623e-04 -3.000000e-01 -7.904656e-04 -4.000000e-01 -9.350831e-04 -5.000000e-01 -1.028969e-03 -6.000000e-01 -1.091689e-03 -7.000000e-01 -1.145720e-03 -8.000000e-01 -1.198439e-03 -9.000000e-01 -1.250127e-03 -1.000000e+00 -1.300706e-03 -1.100000e+00 -1.350293e-03 -1.200000e+00 -1.399089e-03 -1.300000e+00 -1.447307e-03 -1.400000e+00 -1.495145e-03 -1.500000e+00 -1.542770e-03 -1.600000e+00 -1.590321e-03 -1.700000e+00 -1.637915e-03 -1.800000e+00 -1.685646e-03 -2.000000e-01 -7.591090e-04 -3.000000e-01 -1.057009e-03 -4.000000e-01 -1.299117e-03 -5.000000e-01 -1.487327e-03 -6.000000e-01 -1.625701e-03 -7.000000e-01 -1.723918e-03 -8.000000e-01 -1.799047e-03 -9.000000e-01 -1.867397e-03 -1.000000e+00 -1.934412e-03 -1.100000e+00 -2.000436e-03 -1.200000e+00 -2.065332e-03 -1.300000e+00 -2.129094e-03 -1.400000e+00 -2.191823e-03 -1.500000e+00 -2.253670e-03 -1.600000e+00 -2.314799e-03 -1.700000e+00 -2.375372e-03 -1.800000e+00 -2.435536e-03 -2.000000e-01 -8.988419e-04 -3.000000e-01 -1.276973e-03 -4.000000e-01 -1.603716e-03 -5.000000e-01 -1.879229e-03 -6.000000e-01 -2.105047e-03 -7.000000e-01 -2.283977e-03 -8.000000e-01 -2.421393e-03 -9.000000e-01 -2.526785e-03 -1.000000e+00 -2.613566e-03 -1.100000e+00 -2.694097e-03 -1.200000e+00 -2.773085e-03 -1.300000e+00 -2.851111e-03 -1.400000e+00 -2.928079e-03 -1.500000e+00 -3.003931e-03 -1.600000e+00 -3.078689e-03 -1.700000e+00 -3.152434e-03 -1.800000e+00 -3.225279e-03 -2.000000e-01 -1.057433e-03 -3.000000e-01 -1.530133e-03 -4.000000e-01 -1.959651e-03 -5.000000e-01 -2.344038e-03 -6.000000e-01 -2.682905e-03 -7.000000e-01 -2.977028e-03 -8.000000e-01 -3.228018e-03 -9.000000e-01 -3.438324e-03 -1.000000e+00 -3.611682e-03 -1.100000e+00 -3.753623e-03 -1.200000e+00 -3.871454e-03 -1.300000e+00 -3.973907e-03 -1.400000e+00 -4.069629e-03 -1.500000e+00 -4.163150e-03 -1.600000e+00 -4.255597e-03 -1.700000e+00 -4.347080e-03 -1.800000e+00 -4.437555e-03 -2.000000e-01 -1.166138e-03 -3.000000e-01 -1.706727e-03 -4.000000e-01 -2.212695e-03 -5.000000e-01 -2.680901e-03 -6.000000e-01 -3.109493e-03 -7.000000e-01 -3.497779e-03 -8.000000e-01 -3.846010e-03 -9.000000e-01 -4.155140e-03 -1.000000e+00 -4.426670e-03 -1.100000e+00 -4.662648e-03 -1.200000e+00 -4.865835e-03 -1.300000e+00 -5.039902e-03 -1.400000e+00 -5.189417e-03 -1.500000e+00 -5.319598e-03 -1.600000e+00 -5.436065e-03 -1.700000e+00 -5.544638e-03 -1.800000e+00 -5.649781e-03 -2.000000e-01 -1.654692e-04 -3.000000e-01 -2.094031e-04 -4.000000e-01 -2.349961e-04 -5.000000e-01 -2.582449e-04 -6.000000e-01 -2.813171e-04 -7.000000e-01 -3.044869e-04 -8.000000e-01 -3.278945e-04 -9.000000e-01 -3.516537e-04 -1.000000e+00 -3.758533e-04 -1.100000e+00 -4.005623e-04 -1.200000e+00 -4.258344e-04 -1.300000e+00 -4.517134e-04 -1.400000e+00 -4.782360e-04 -1.500000e+00 -5.054347e-04 -1.600000e+00 -5.333388e-04 -1.700000e+00 -5.619762e-04 -1.800000e+00 -5.913735e-04 -2.000000e-01 -3.080695e-04 -3.000000e-01 -4.151926e-04 -4.000000e-01 -4.808854e-04 -5.000000e-01 -5.240919e-04 -6.000000e-01 -5.599783e-04 -7.000000e-01 -5.945207e-04 -8.000000e-01 -6.284802e-04 -9.000000e-01 -6.619558e-04 -1.000000e+00 -6.950898e-04 -1.100000e+00 -7.280487e-04 -1.200000e+00 -7.609862e-04 -1.300000e+00 -7.940313e-04 -1.400000e+00 -8.272883e-04 -1.500000e+00 -8.608409e-04 -1.600000e+00 -8.947567e-04 -1.700000e+00 -9.290910e-04 -1.800000e+00 -9.638900e-04 -2.000000e-01 -4.434637e-04 -3.000000e-01 -6.227153e-04 -4.000000e-01 -7.560811e-04 -5.000000e-01 -8.524280e-04 -6.000000e-01 -9.201583e-04 -7.000000e-01 -9.719527e-04 -8.000000e-01 -1.018589e-03 -9.000000e-01 -1.064098e-03 -1.000000e+00 -1.108967e-03 -1.100000e+00 -1.153180e-03 -1.200000e+00 -1.196781e-03 -1.300000e+00 -1.239878e-03 -1.400000e+00 -1.282603e-03 -1.500000e+00 -1.325088e-03 -1.600000e+00 -1.367454e-03 -1.700000e+00 -1.409804e-03 -1.800000e+00 -1.452230e-03 -2.000000e-01 -5.629485e-04 -3.000000e-01 -8.092158e-04 -4.000000e-01 -1.010565e-03 -5.000000e-01 -1.173502e-03 -6.000000e-01 -1.300677e-03 -7.000000e-01 -1.396887e-03 -8.000000e-01 -1.470480e-03 -9.000000e-01 -1.531684e-03 -1.000000e+00 -1.588523e-03 -1.100000e+00 -1.644238e-03 -1.200000e+00 -1.699339e-03 -1.300000e+00 -1.753784e-03 -1.400000e+00 -1.807546e-03 -1.500000e+00 -1.860661e-03 -1.600000e+00 -1.913208e-03 -1.700000e+00 -1.965288e-03 -1.800000e+00 -2.017003e-03 -2.000000e-01 -6.656144e-04 -3.000000e-01 -9.711487e-04 -4.000000e-01 -1.234262e-03 -5.000000e-01 -1.460278e-03 -6.000000e-01 -1.650370e-03 -7.000000e-01 -1.806325e-03 -8.000000e-01 -1.931324e-03 -9.000000e-01 -2.030671e-03 -1.000000e+00 -2.111648e-03 -1.100000e+00 -2.182172e-03 -1.200000e+00 -2.248471e-03 -1.300000e+00 -2.313464e-03 -1.400000e+00 -2.377829e-03 -1.500000e+00 -2.441580e-03 -1.600000e+00 -2.504666e-03 -1.700000e+00 -2.567075e-03 -1.800000e+00 -2.628838e-03 -2.000000e-01 -7.903125e-04 -3.000000e-01 -1.169679e-03 -4.000000e-01 -1.511585e-03 -5.000000e-01 -1.820144e-03 -6.000000e-01 -2.095176e-03 -7.000000e-01 -2.337005e-03 -8.000000e-01 -2.546658e-03 -9.000000e-01 -2.725838e-03 -1.000000e+00 -2.877080e-03 -1.100000e+00 -3.003988e-03 -1.200000e+00 -3.111202e-03 -1.300000e+00 -3.203996e-03 -1.400000e+00 -3.287707e-03 -1.500000e+00 -3.366829e-03 -1.600000e+00 -3.444056e-03 -1.700000e+00 -3.520450e-03 -1.800000e+00 -3.596247e-03 -2.000000e-01 -8.842512e-04 -3.000000e-01 -1.320751e-03 -4.000000e-01 -1.725088e-03 -5.000000e-01 -2.100770e-03 -6.000000e-01 -2.446728e-03 -7.000000e-01 -2.762281e-03 -8.000000e-01 -3.047423e-03 -9.000000e-01 -3.302739e-03 -1.000000e+00 -3.529298e-03 -1.100000e+00 -3.728625e-03 -1.200000e+00 -3.902750e-03 -1.300000e+00 -4.054291e-03 -1.400000e+00 -4.186436e-03 -1.500000e+00 -4.302774e-03 -1.600000e+00 -4.407034e-03 -1.700000e+00 -4.502853e-03 -1.800000e+00 -4.593496e-03 tmpk8ny_4pz/tests/hisim/pmos/qaSpec0000644000175000017500000006425713546075722017566 0ustar carstencarsten // // Test specification for HiSIM (version 2.7.0) // // // Simulator specific information // These arguments are added to the model card // specification to invoke the desired model in // different simulators (which can have different // names or levels for the same model) and to switch // between nType and pType polarities. // It is assumed that there are no polarity specific // parameters. // `ifdef spice nTypeSelectionArguments pmos level=61 version=270 pTypeSelectionArguments nmos level=61 version=270 `endif `ifdef ngspice nTypeSelectionArguments pmos level=68 version=270 pTypeSelectionArguments nmos level=68 version=270 `endif `ifdef hspice nTypeSelectionArguments pmos level=68 version=2.7.0 pTypeSelectionArguments nmos level=68 version=2.7.0 `endif // // General test-independent information // keyLetter m pins d g s b linearScale w l ps pd areaScale as ad temperature 27 -50 150 symmetricPins d s scaleParameters m // // Specific tests // test 1_dcSweep_CORSRD=0 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 biasList V(g)=-0.4,-0.6,-0.8,-1.0,-1.2,-1.5,-1.8 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 modelParameters CORSRD=0 GDLD=0.001 test 2_dcSweep_CORSRD=-1_GDLD temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=1.0 biasList V(g)=-0.4,-0.6,-0.8,-1.0,-1.2,-1.5,-1.8 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 instanceParameters NRD=0.1 NRS=0.01 modelParameters CORSRD=-1 RSH=1 GDLD=0.0001 test 3_dcSweep_CORSRD=-1_PT temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=-0.5 biasList V(g)=-0.4,-0.6,-0.8,-1.0,-1.2,-1.5,-1.8 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 instanceParameters NRD=0.01 NRS=0.1 AD=1e-8 AS=1e-8 PD=1e-3 PS=1e-3 modelParameters CORSRD=-1 RSH=10 PT4P=0.1 test 4_dcSweep_NSUBPFAC temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 biasList V(g)=-0.4,-0.6,-0.8,-1.0,-1.2,-1.5,-1.8 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 modelParameters NSUBPL=0.1 NSUBPFAC=0.6 test 5_dcSweep_NSUBPDLT temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 biasList V(g)=-0.4,-0.6,-0.8,-1.0,-1.2,-1.5,-1.8 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 modelParameters NSUBPL=0.1 NSUBPFAC=0.8 NSUBPDLT=0.0001 test 6_dcSweep_COISUB=0 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 biasList V(g)=-0.4,-0.6,-0.8,-1.0,-1.2,-1.5,-1.8 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs I(b) instanceParameters W=10e-6 L=100e-9 modelParameters COISUB=0 SUB1=1 SVGS=1 SVDS=1 SUB1L=0.1 SUB2L=0.1 SLG=1 SVBS=1 test 7_dcSweep_COISUB=1 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 biasList V(g)=-0.4,-0.6,-0.8,-1.0,-1.2,-1.5,-1.8 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs I(d) I(b) instanceParameters W=10e-6 L=100e-9 modelParameters COISUB=1 SUB1=1 SVGS=1 SVDS=1 SUB1L=0.1 SUB2L=0.1 SLG=1 SVBS=1 test 8_dcSweep_COIIGS=0 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 biasList V(g)=-0.4,-0.6,-0.8,-1.0,-1.2,-1.5,-1.8 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs I(g) instanceParameters W=10e-6 L=100e-9 modelParameters COIIGS=0 test 9_dcSweep_COIIGS=1 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 biasList V(g)=-0.4,-0.6,-0.8,-1.0,-1.2,-1.5,-1.8 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs I(g) instanceParameters W=10e-6 L=100e-9 modelParameters COIIGS=1 test 10_dcSweep_COGIDL=0 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 biasList V(g)=-0.4,-0.6,-0.8,-1.0,-1.2,-1.5,-1.8 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs I(d) I(b) instanceParameters W=10e-6 L=100e-9 modelParameters COGIDL=1 GIDL6=-1.0 GIDL7=1.05 test 11_dcSweep_COGIDL=1 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 biasList V(g)=-0.4,-0.6,-0.8,-1.0,-1.2,-1.5,-1.8 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs I(d) I(b) instanceParameters W=10e-6 L=100e-9 modelParameters COGIDL=1 GIDL6=-1.0 test 12_dcSweep_COGIDL=1 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 biasList V(g)=-0.4,-0.6,-0.8,-1.0,-1.2,-1.5,-1.8 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 modelParameters COGIDL=1 GIDL7=1.05 test 13_dcSweep_COISTI=0 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 biasList V(g)=-0.4,-0.6,-0.8,-1.0,-1.2,-1.5,-1.8 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 modelParameters COISTI=0 WSTI=0.1E-4 instanceParameters SA=1e-6 SB=2e-6 SD=1e-6 NF=5 modelParameters NSUBPSTI1=2e-6 NSUBPSTI2=1e-6 NSUBPSTI3=1.5 test 14_dcSweep_COISTI=1_NSUBC temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 biasList V(g)=-0.4,-0.6,-0.8,-1.0,-1.2,-1.5,-1.8 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 modelParameters COISTI=1 WSTI=0.1E-4 instanceParameters SA=1e-6 SB=2e-6 SD=1e-6 NF=5 modelParameters NSUBCSTI1=2e-6 NSUBCSTI2=1e-6 NSUBCSTI3=1.4 test 15_dcSweep_COISTI=1_NSUBP temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 biasList V(g)=-0.4,-0.6,-0.8,-1.0,-1.2,-1.5,-1.8 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 modelParameters COISTI=1 WSTI=0.1E-4 instanceParameters SA=1e-6 SB=2e-6 SD=1e-6 NF=2 modelParameters NSUBPSTI1=2e-6 NSUBPSTI2=1e-6 NSUBPSTI3=1.5 test 16_dcSweep_WPE temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 biasList V(g)=-0.4,-0.6,-0.8,-1.0,-1.2,-1.5,-1.8 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 modelParameters WEB=-1200 WEC=-1200 NSUBCWPE=1E-16 NSUBPWPE=1E16 NPEXTWPE=1E16 instanceParameters SCA=4.244122e-01 SCB=2.561023e-09 SCC=3.215142e-18 test 19_dcSweep_CORG=0 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 biasList V(g)=-0.4,-0.6,-0.8,-1.0,-1.2,-1.5,-1.8 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 NGCON=0.1 modelParameters CORG=0 RSHG=10 test 20_dcSweep_CORG=1 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 biasList V(g)=-0.4,-0.6,-0.8,-1.0,-1.2,-1.5,-1.8 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 NGCON=0.1 modelParameters CORG=1 RSHG=10 test 21_dcSweep_CORBNET=0 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 biasList V(g)=-0.4,-0.6,-0.8,-1.0,-1.2,-1.5,-1.8 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs I(d) I(b) instanceParameters W=10e-6 L=100e-9 modelParameters CORBNET=0 test 22_dcSweep_CORBNET=1 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 biasList V(g)=-0.4,-0.6,-0.8,-1.0,-1.2,-1.5,-1.8 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs I(d) I(b) instanceParameters W=10e-6 L=100e-9 modelParameters CORBNET=1 test 23_dcSweep_CODFM=0 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 biasList V(g)=-0.4,-0.6,-0.8,-1.0,-1.2,-1.5,-1.8 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 NSUBCDFM=1E17 modelParameters CODFM=0 test 24_dcSweep_CODFM=1 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 biasList V(g)=-0.4,-0.6,-0.8,-1.0,-1.2,-1.5,-1.8 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 NSUBCDFM=1E17 modelParameters CODFM=1 test 25_dcSweep_VFBCL temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 biasList V(g)=-0.4,-0.6,-0.8,-1.0,-1.2,-1.5,-1.8 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs I(d) instanceParameters W=10e-6 L=100e-9 modelParameters VFBCL=0.8 VFBCLP=1.2 test 35_acVd_CORSRD=0 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(g)=-1.2 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters CORSRD=0 GDLD=0.001 test 36_acVd_CORSRD=-1_GDLD temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=1.0 V(g)=-1.2 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 instanceParameters NRD=1 NRS=0.1 modelParameters CORSRD=-1 RSH=10 GDLD=0.001 test 37_acVd_CORSRD=-1_PT temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=-0.5 V(g)=-1.2 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 instanceParameters NRD=0.1 NRS=1 AD=1e-8 AS=1e-8 PD=1e-3 PS=1e-3 modelParameters CORSRD=-1 RSH=100 PT4P=0.1 test 38_acVd_WPE temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=-0.5 V(g)=-1.2 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters WEB=-1200 WEC=-1200 NSUBCWPE=1E-16 NSUBPWPE=2E16 NPEXTWPE=3E16 instanceParameters SCA=4.25e-01 SCB=2.56e-09 SCC=3.2e-18 test 39_acVd_VFBCL temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=-0.5 V(g)=-1.2 biasSweep V(d)=-0.2,-1.800000000001,-0.1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=10e-6 L=500e-9 modelParameters VFBCL=0.8 VFBCLP=1.2 test 45_acFreq_COOVLP=1 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COOVLP=1 test 46_acFreq_COISUB=0 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COISUB=0 SUB1=1 SVGS=1 SVDS=1 SUB1L=0.1 SUB2L=0.1 SLG=1 SVBS=1 test 47_acFreq_COISUB=1 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COISUB=1 SUB1=1 SVGS=1 SVDS=1 SUB1L=0.1 SUB2L=0.1 SLG=1 SVBS=1 test 48_acFreq_COIIGS=0 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COIIGS=0 test 49_acFreq_COIIGS=1 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COIIGS=1 test 50_acFreq_COGIDL=0 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COGIDL=0 GIDL6=-1.0 GIDL7=1.05 test 51_acFreq_COGIDL=1 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COGIDL=1 GIDL6=-1.0 GIDL7=1.05 test 52_acFreq_COSTI=0 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COISTI=0 test 53_acFreq_COSTI=1 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COISTI=1 test 54_acFreq_COADOV=0 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COADOV=0 test 55_acFreq_COADOV=1 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COADOV=1 test 56_acFreq_CONQS=0 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters CONQS=0 test 57_acFreq_CONQS=1 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters CONQS=1 test 58_acFreq_CORG=0 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 NGCON=0.1 modelParameters CORG=0 RSHG=10 test 59_acFreq_CORG=1 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 NGCON=0.1 modelParameters CORG=1 RSHG=10 test 60_acFreq_CORBNET=0 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters CORBNET=0 test 61_acFreq_CORBNET=1 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters CORBNET=1 test 62_acFreq_COFLICK=0 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COFLICK=0 test 63_acFreq_COFLICK=1 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COFLICK=1 test 64_acFreq_COTHRML=0 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COTHRML=0 test 65_acFreq_COTHRML=1 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COTHRML=1 test 66_acFreq_COIGN=0 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COIGN=0 test 67_acFreq_COIGN=1 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters COIGN=1 test 68_acFreq_WPE temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 modelParameters WEB=-1200 WEC=-1200 NSUBCWPE=1E-16 NSUBPWPE=1E16 NPEXTWPE=1E16 instanceParameters SCA=4.25e-01 SCB=2.56e-09 SCC=3.2e-18 test 69_acFreq_CODFM=0 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 NSUBCDFM=1E17 modelParameters CODFM=0 test 70_acFreq_CODFM=1 temperature -55 27 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.5 V(g)=-1.5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=10e-6 L=100e-9 NSUBCDFM=1E17 modelParameters CODFM=1 test 75_noise_COIGN=1_T27 temperature 27 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.0 biasList V(g)=-0.5,-1.0 freq dec 10 1e3 1e11 outputs N(g) instanceParameters W=10e-6 L=100e-9 modelParameters COIIGS=0 COTHRML=1 COIGN=1 test 76_noise_COIGN=1_T-55 temperature -55 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.0 biasList V(g)=-0.5,-1.0 freq dec 10 1e3 1e11 outputs N(g) instanceParameters W=10e-6 L=100e-9 modelParameters COIIGS=0 COTHRML=1 COIGN=1 test 77_noise_COIGN=1_T150 temperature 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.0 biasList V(g)=-0.5,-1.0 freq dec 10 1e3 1e11 outputs N(g) instanceParameters W=10e-6 L=100e-9 modelParameters COIIGS=0 COTHRML=1 COIGN=1 test 78_noise_COIGN=0_T27 temperature 27 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.0 biasList V(g)=-0.5,-1.0 freq dec 10 1e3 1e11 outputs N(g) instanceParameters W=10e-6 L=100e-9 modelParameters COIIGS=0 COTHRML=1 COIGN=0 COFLICK=1 FALPH=1.0 test 79_noise_COIGN=0_T-55 temperature -55 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.0 biasList V(g)=-0.5,-1.0 freq dec 10 1e3 1e11 outputs N(g) instanceParameters W=10e-6 L=100e-9 modelParameters COIIGS=0 COTHRML=1 COIGN=0 COFLICK=1 FALPH=1.0 test 80_noise_COIGN=0_T150 temperature 150 modelParameters parameters/pmosParameters biases V(s)=0 V(b)=0 V(d)=-1.0 biasList V(g)=-0.5,-1.0 freq dec 10 1e3 1e11 outputs N(g) instanceParameters W=10e-6 L=100e-9 modelParameters COIIGS=0 COTHRML=1 COIGN=0 COFLICK=1 FALPH=1.0 tmpk8ny_4pz/tests/hisim/pmos/run0000755000175000017500000000023613546075722017144 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmpk8ny_4pz/tests/bin/0000755000175000017500000000000013546075722015072 5ustar carstencarstentmpk8ny_4pz/tests/bin/check.sh0000644000175000017500000000362313546075722016507 0ustar carstencarsten#!/bin/sh # set -x if [ -z "$SPICE_SCRIPTS" ] ; then SPICE_SCRIPTS=`dirname $0` export SPICE_SCRIPTS if [ -z "$ngspice_vpath" ] ; then ngspice_vpath=. export ngspice_vpath fi fi # ls -ld $(realpath $SPICE_SCRIPTS) $SPICE_SCRIPTS/spinit # echo "---ngspice_vpath = $ngspice_vpath" SPICE=$1 TEST=$2 FILTER="CPU|Dynamic|Note|Circuit|Trying|Reference|Date|Doing|---|v-sweep|time|est|Error|Warning|Data|Index|trans|acan|oise|nalysis|ole|Total|memory|urrent|Got|Added|BSIM|bsim|B4SOI|b4soi|codemodel|^binary raw file|^ngspice.*done" testname=`basename $TEST .cir` testdir=`dirname $TEST` HOST_TYPE=`uname -srvm` case $HOST_TYPE in Linux*|Darwin*|CYGWIN*|MINGW*|MSYS*) $SPICE --batch $testdir/$testname.cir >$testname.test # contrary to the c standard windows may print floating point values # with three instead of two exponential digits sed -e 's/\([.0-9][eE][+-]\?\)0\([0-9]\{2\}\)/\1\2/g' \ <$testname.test | \ egrep -v "$FILTER" > $testname.test_tmp egrep -v "$FILTER" $testdir/$testname.out > $testname.out_tmp if diff -B -w -u $testname.out_tmp $testname.test_tmp; then rm $testname.test $testname.test_tmp $testname.out_tmp exit 0 fi rm -f $testname.test_tmp $testname.out_tmp ;; FreeBSD*|SunOS*|OpenBSD*) $SPICE --batch $testdir/$testname.cir >$testname.test &&\ sed -e '/^$/d' $testname.test | egrep -v "$FILTER" > $testname.test_tmp &&\ sed -e '/^$/d' $testdir/$testname.out | egrep -v "$FILTER" > $testname.out_tmp if diff -b -w $testname.out_tmp $testname.test_tmp; then rm $testname.test $testname.test_tmp $testname.out_tmp exit 0 fi rm -f $testname.test_tmp $testname.out_tmp ;; *) echo Unknown system type! echo $HOST_TYPE echo ./tests/bin/checks.sh may need updating for your system ;; esac exit 1 tmpk8ny_4pz/tests/bin/hspice.pm0000644000175000017500000006177513546075722016723 0ustar carstencarsten # # hspice DC, AC and noise test routines # # # Rel Date Who Comments # ==== ========== ============= ======== # 1.4 04/06/11 Geoffrey Coram Fixed version detection; fixed ac-freq result printing # 1.3 06/21/07 Rob Jones Verilog-A model support added # HSPICE version detection updated # 1.2 06/30/06 Colin McAndrew/ Floating node support added # Rob Jones Noise simulation added # HSPICE version detection improved # 1.0 04/13/06 Colin McAndrew Initial version # package simulate; if (defined($main::simulatorCommand)) { $simulatorCommand=$main::simulatorCommand; } else { $simulatorCommand="hspice"; } $netlistFile="hspiceCkt"; use strict; sub version { my($version,$vaVersion); $version="unknown"; $vaVersion="unknown"; if (!open(OF,">$simulate::netlistFile")) { die("ERROR: cannot open file $simulate::netlistFile, stopped"); } print OF ""; print OF "r1 1 0 1"; print OF "v1 1 0 1"; print OF ".op"; print OF ".end"; close(OF); if (!open(SIMULATE,"$simulate::simulatorCommand $simulate::netlistFile 2>/dev/null|")) { die("ERROR: cannot run $main::simulatorName, stopped"); } while () { chomp; if (s/.+HSPICE\s+-*\s*//) { ($version=$_)=~s/\s+.*//; last; } } close(SIMULATE); if (! $main::debug) { unlink($simulate::netlistFile); unlink("$simulate::netlistFile.st0"); if (defined($main::verilogaFile)) { unlink("$simulate::netlistFile.val"); } if (!opendir(DIRQA,".")) { die("ERROR: cannot open directory ., stopped"); } foreach (grep(/^$simulate::netlistFile\.ic/,readdir(DIRQA))) {unlink($_)} closedir(DIRQA); unlink("hspice.errors"); unlink("simout.tmp"); } return($version,$vaVersion); } sub runNoiseTest { my($variant,$outputFile)=@_; my($arg,$name,$value,$type,$pin,$noisePin); my(@BiasList,$i,@Field); my(@X,@Noise,$temperature,$biasVoltage,$sweepVoltage,$inData); # # Make up the netlist, using a subckt to encapsulate the # instance. This simplifies handling of the variants as # the actual instance is driven by voltage-controlled # voltage sources from the subckt pins, and the currents # are fed back to the subckt pins using current-controlled # current sources. Pin swapping, polarity reversal, and # m-factor scaling can all be handled by simple modifications # of this subckt. # @X=();@Noise=(); $noisePin=$main::Outputs[0]; foreach $temperature (@main::Temperature) { foreach $biasVoltage (split(/\s+/,$main::biasListSpec)) { if ($main::fMin == $main::fMax) { push(@X,@main::BiasSweepList); } foreach $sweepVoltage (@main::BiasSweepList) { if (!open(OF,">$simulate::netlistFile")) { die("ERROR: cannot open file $simulate::netlistFile, stopped"); } print OF "* Noise simulation for $main::simulatorName"; &generateCommonNetlistInfo($variant,$temperature); print OF "vin dummy 0 0 ac 1"; print OF "rin dummy 0 rmod"; print OF ".model rmod r res=1 noise=0"; foreach $pin (@main::Pin) { if ($main::isFloatingPin{$pin}) { print OF "i_$pin $pin 0 0"; } elsif ($pin eq $main::biasListPin) { if (defined($main::referencePinFor{$pin})) { print OF "v_${pin} ${pin} ${pin}_$main::referencePinFor{$pin} $biasVoltage"; print OF "e_${pin} ${pin}_$main::referencePinFor{$pin} 0 $main::referencePinFor{$pin} 0 1"; } else { print OF "v_$pin $pin 0 $biasVoltage"; } } elsif ($pin eq $main::biasSweepPin) { if (defined($main::referencePinFor{$pin})) { print OF "v_${pin} ${pin} ${pin}_$main::referencePinFor{$pin} $sweepVoltage"; print OF "e_${pin} ${pin}_$main::referencePinFor{$pin} 0 $main::referencePinFor{$pin} 0 1"; } else { print OF "v_$pin $pin 0 $sweepVoltage"; } } else { if (defined($main::referencePinFor{$pin})) { print OF "v_${pin} ${pin} ${pin}_$main::referencePinFor{$pin} $main::BiasFor{$pin}"; print OF "e_${pin} ${pin}_$main::referencePinFor{$pin} 0 $main::referencePinFor{$pin} 0 1"; } else { print OF "v_${pin} ${pin} 0 $main::BiasFor{$pin}"; } } } print OF "x1 ".join(" ",@main::Pin)." mysub"; if ($main::outputNoise == 2) { print OF ".ac $main::frequencySpec"; print OF ".noise v($noisePin,$main::Outputs[1]) vin"; } else { if (! $main::isFloatingPin{$noisePin}) { print OF "fn 0 n_$noisePin v_$noisePin 1"; print OF "rn 0 n_$noisePin rmod"; } print OF ".ac $main::frequencySpec"; if ($main::isFloatingPin{$noisePin}) { print OF ".noise v($noisePin) vin"; } else { print OF ".noise v(n_$noisePin) vin"; } } print OF ".print noise onoise"; print OF ".end"; close(OF); # # Run simulations and get the results # if (!open(SIMULATE,"$simulate::simulatorCommand $simulate::netlistFile 2>/dev/null|")) { die("ERROR: cannot run $main::simulatorName, stopped"); } $inData=0; while () { chomp;s/^\s+//;s/\s+$//;@Field=split; if (/freq\s+onoise/i) {$inData=1;;next} if ($#Field != 1) {$inData=0;} next if (!$inData); if ($main::fMin != $main::fMax) { push(@X,&modelQa::unScale($Field[0])); } push(@Noise,(&modelQa::unScale($Field[1]))**2); } close(SIMULATE); } } } # # Write the results to a file # if (!open(OF,">$outputFile")) { die("ERROR: cannot open file $outputFile, stopped"); } if ($main::fMin == $main::fMax) { printf OF ("V($main::biasSweepPin)"); } else { printf OF ("Freq"); } if ($main::outputNoise == 2) { print OF (" N($noisePin,$main::Outputs[1])"); } else { print OF (" N($noisePin)"); } for ($i=0;$i<=$#X;++$i) { if (defined($Noise[$i])) {printf OF ("$X[$i] $Noise[$i]\n")} } close(OF); # # Clean up, unless the debug flag was specified # if (! $main::debug) { unlink($simulate::netlistFile); unlink("$simulate::netlistFile.st0"); if (defined($main::verilogaFile)) { unlink("$simulate::netlistFile.val"); } if (!opendir(DIRQA,".")) { die("ERROR: cannot open directory ., stopped"); } foreach (grep(/^$simulate::netlistFile\.ic/,readdir(DIRQA))) {unlink($_)} closedir(DIRQA); } } sub runAcTest { my($variant,$outputFile)=@_; my($arg,$name,$value,$type,$pin,$mPin,$fPin,%NextPin,%PrevPin,$first_fPin); my(@BiasList,$i,$j,@Field); my(@X,$omega,%g,%c,%q,$twoPi,$temperature,$biasVoltage,$sweepVoltage); my($inData,$inResults,$outputLine); $twoPi=8.0*atan2(1.0,1.0); # # Make up the netlist, using a subckt to encapsulate the # instance. This simplifies handling of the variants as # the actual instance is driven by voltage-controlled # voltage sources from the subckt pins, and the currents # are fed back to the subckt pins using current-controlled # current sources. Pin swapping, polarity reversal, and # m-factor scaling can all be handled by simple modifications # of this subckt. # foreach $mPin (@main::Pin) { if ($main::needAcStimulusFor{$mPin}) { $first_fPin=$mPin; last; } } if (!open(OF,">$simulate::netlistFile")) { die("ERROR: cannot open file $simulate::netlistFile, stopped"); } print OF "* AC simulation for $main::simulatorName"; &generateCommonNetlistInfo($variant,$main::Temperature[0]); @BiasList=split(/\s+/,$main::biasListSpec); print OF ".param vbias=$BiasList[0]"; print OF ".param vsweep=$main::BiasSweepList[0]"; foreach $pin (@main::Pin) { if ($pin eq $first_fPin) { print OF ".param ac_$pin=1"; } else { print OF ".param ac_$pin=0"; } if ($main::isFloatingPin{$pin}) { print OF "i_$pin $pin 0 0"; } elsif ($pin eq $main::biasListPin) { if (defined($main::referencePinFor{$pin})) { print OF "v_${pin} ${pin} ${pin}_$main::referencePinFor{$pin} vbias ac ac_$pin"; print OF "e_${pin} ${pin}_$main::referencePinFor{$pin} 0 $main::referencePinFor{$pin} 0 1"; } else { print OF "v_${pin} ${pin} 0 vbias ac ac_$pin"; } } elsif ($pin eq $main::biasSweepPin) { if (defined($main::referencePinFor{$pin})) { print OF "v_${pin} ${pin} ${pin}_$main::referencePinFor{$pin} vsweep ac ac_$pin"; print OF "e_${pin} ${pin}_$main::referencePinFor{$pin} 0 $main::referencePinFor{$pin} 0 1"; } else { print OF "v_${pin} ${pin} 0 vsweep ac ac_$pin"; } } else { if (defined($main::referencePinFor{$pin})) { print OF "v_${pin} ${pin} ${pin}_$main::referencePinFor{$pin} $main::BiasFor{$pin} ac ac_$pin"; print OF "e_${pin} ${pin}_$main::referencePinFor{$pin} 0 $main::referencePinFor{$pin} 0 1"; } else { print OF "v_${pin} ${pin} 0 $main::BiasFor{$pin} ac ac_$pin"; } } } print OF "x1 ".join(" ",@main::Pin)." mysub"; print OF ".ac $main::frequencySpec"; foreach $pin (@main::Pin) {print OF ".print ac ir(v_$pin) ii(v_$pin)"} for ($i=0;$i<=$#main::Pin;++$i) { next if (!$main::needAcStimulusFor{$main::Pin[$i]}); $j=$i; while (1) { --$j; $j=$#main::Pin if ($j < 0); if ($main::needAcStimulusFor{$main::Pin[$j]}) { $PrevPin{$main::Pin[$i]}=$main::Pin[$j]; last; } } } foreach $temperature (@main::Temperature) { foreach $biasVoltage (@BiasList) { foreach $sweepVoltage (@main::BiasSweepList) { foreach $pin (@main::Pin) { next if (!$main::needAcStimulusFor{$pin}); next if ($temperature == $main::Temperature[0] && $biasVoltage == $BiasList[0] && $sweepVoltage == $main::BiasSweepList[0] && $pin eq $first_fPin); print OF ".alter"; if ($biasVoltage == $BiasList[0] && $sweepVoltage == $main::BiasSweepList[0] && $pin eq $first_fPin) { print OF ".temp $temperature"; } if ($sweepVoltage == $main::BiasSweepList[0] && $pin eq $main::Pin[0]) { print OF ".param vbias=$biasVoltage"; } if ($pin eq $first_fPin) { print OF ".param vsweep=$sweepVoltage"; } print OF ".param ac_$PrevPin{$pin}=0"; print OF ".param ac_$pin=1"; } } } } print OF ".end"; close(OF); # # Run simulations and get the results # foreach $mPin (@main::Pin) { foreach $fPin (@main::Pin) { @{$g{$mPin,$fPin}}=(); @{$c{$mPin,$fPin}}=(); @{$q{$mPin,$fPin}}=(); } } for ($i=0;$i<=$#main::Pin;++$i) { next if (!$main::needAcStimulusFor{$main::Pin[$i]}); $j=$i; while (1) { ++$j; $j=0 if ($j > $#main::Pin); if ($main::needAcStimulusFor{$main::Pin[$j]}) { $NextPin{$main::Pin[$i]}=$main::Pin[$j]; last; } } } if (!open(SIMULATE,"$simulate::simulatorCommand $simulate::netlistFile 2>/dev/null|")) { die("ERROR: cannot run $main::simulatorName, stopped"); } $inData=0;$inResults=0; if ($main::fMin == $main::fMax) { @X=(); foreach $temperature (@main::Temperature) { foreach $biasVoltage (split(/\s+/,$main::biasListSpec)) { push(@X,@main::BiasSweepList); } } } $fPin=$first_fPin; while () { chomp; if (/ac\s+analysis/i && /temp=/i) {$inResults=1;$inData=0;next} if (/info/i && /job\s+concluded/) {$inResults=0;$fPin=$NextPin{$fPin}} next if (!$inResults); s/^\s+//;s/\s+$//; if (/^v_([a-zA-z][a-zA-Z0-9]*)/) {$mPin=$1;$inData=1;next;} @Field=split; if ($#Field != 2 || &modelQa::unScale($Field[0]) !~ /^($main::number)$/ || &modelQa::unScale($Field[1]) !~ /^($main::number)$/ || &modelQa::unScale($Field[2]) !~ /^($main::number)$/) { $inData=0; next; } next if (! $inData); if (($main::fMin != $main::fMax) && ($fPin eq $first_fPin)) { push(@X,&modelQa::unScale($Field[0])); } $omega=$twoPi*&modelQa::unScale($Field[0]); push(@{$g{$mPin,$fPin}},&modelQa::unScale($Field[1])); if ($mPin eq $fPin) { push(@{$c{$mPin,$fPin}},&modelQa::unScale($Field[2])/$omega); } else { push(@{$c{$mPin,$fPin}},-1*&modelQa::unScale($Field[2])/$omega); } if (abs(&modelQa::unScale($Field[1])) > 1.0e-99) { push(@{$q{$mPin,$fPin}},&modelQa::unScale($Field[2])/&modelQa::unScale($Field[1])); } else { push(@{$q{$mPin,$fPin}},1.0e99); } } close(SIMULATE); # # Write the results to a file # if (!open(OF,">$outputFile")) { die("ERROR: cannot open file $outputFile, stopped"); } if ($main::fMin == $main::fMax) { printf OF ("V($main::biasSweepPin)"); } else { printf OF ("Freq"); } foreach (@main::Outputs) { ($type,$mPin,$fPin)=split(/\s+/,$_); printf OF (" $type($mPin,$fPin)"); } printf OF ("\n"); for ($i=0;$i<=$#X;++$i) { $outputLine="$X[$i]"; foreach (@main::Outputs) { ($type,$mPin,$fPin)=split(/\s+/,$_); if ($type eq "g") { if (defined(${$g{$mPin,$fPin}}[$i])) { $outputLine.=" ${$g{$mPin,$fPin}}[$i]"; } else { undef($outputLine);last; } } elsif ($type eq "c") { if (defined(${$c{$mPin,$fPin}}[$i])) { $outputLine.=" ${$c{$mPin,$fPin}}[$i]"; } else { undef($outputLine);last; } } else { if (defined(${$q{$mPin,$fPin}}[$i])) { $outputLine.=" ${$q{$mPin,$fPin}}[$i]"; } else { undef($outputLine);last; } } } if (defined($outputLine)) {printf OF ("$outputLine\n")} } close(OF); # # Clean up, unless the debug flag was specified # if (! $main::debug) { unlink($simulate::netlistFile); unlink("$simulate::netlistFile.st0"); if (defined($main::verilogaFile)) { unlink("$simulate::netlistFile.val"); } if (!opendir(DIRQA,".")) { die("ERROR: cannot open directory ., stopped"); } foreach (grep(/^$simulate::netlistFile\.ic/,readdir(DIRQA))) {unlink($_)} closedir(DIRQA); unlink("hspice.errors"); unlink("simout.tmp"); } } sub runDcTest { my($variant,$outputFile)=@_; my($arg,$name,$value,$i,$pin,@Field); my(@BiasList,$start,$stop,$step); my(@V,%DC,$temperature,$biasVoltage); my($inData,$inResults); # # Make up the netlist, using a subckt to encapsulate the # instance. This simplifies handling of the variants as # the actual instance is driven by voltage-controlled # voltage sources from the subckt pins, and the currents # are fed back to the subckt pins using current-controlled # current sources. Pin swapping, polarity reversal, and # m-factor scaling can all be handled by simple modifications # of this subckt. # if (!open(OF,">$simulate::netlistFile")) { die("ERROR: cannot open file $simulate::netlistFile, stopped"); } print OF "* DC simulation for $main::simulatorName"; &generateCommonNetlistInfo($variant,$main::Temperature[0]); @BiasList=split(/\s+/,$main::biasListSpec); ($start,$stop,$step)=split(/\s+/,$main::biasSweepSpec); $start-=$step; print OF ".param vbias=$BiasList[0]"; foreach $pin (@main::Pin) { if ($main::isFloatingPin{$pin}) { print OF "i_$pin $pin 0 0"; } elsif ($pin eq $main::biasListPin) { if (defined($main::referencePinFor{$pin})) { print OF "v_${pin} ${pin} ${pin}_$main::referencePinFor{$pin} vbias"; print OF "e_${pin} ${pin}_$main::referencePinFor{$pin} 0 $main::referencePinFor{$pin} 0 1"; } else { print OF "v_${pin} ${pin} 0 vbias"; } } elsif ($pin eq $main::biasSweepPin) { if (defined($main::referencePinFor{$pin})) { print OF "v_${pin} ${pin} ${pin}_$main::referencePinFor{$pin} $start"; print OF "e_${pin} ${pin}_$main::referencePinFor{$pin} 0 $main::referencePinFor{$pin} 0 1"; } else { print OF "v_${pin} ${pin} 0 $start"; } } else { if (defined($main::referencePinFor{$pin})) { print OF "v_${pin} ${pin} ${pin}_$main::referencePinFor{$pin} $main::BiasFor{$pin}"; print OF "e_${pin} ${pin}_$main::referencePinFor{$pin} 0 $main::referencePinFor{$pin} 0 1"; } else { print OF "v_${pin} ${pin} 0 $main::BiasFor{$pin}"; } } } print OF "x1 ".join(" ",@main::Pin)." mysub"; print OF ".dc v_$main::biasSweepPin $main::biasSweepSpec"; foreach $pin (@main::Outputs) { if ($main::isFloatingPin{$pin}) { print OF ".print v($pin)" } else { print OF ".print i(v_$pin)" } } foreach $temperature (@main::Temperature) { foreach $biasVoltage (@BiasList) { next if ($temperature == $main::Temperature[0] && $biasVoltage == $BiasList[0]); print OF ".alter"; if ($biasVoltage == $BiasList[0]) { print OF ".temp $temperature"; } print OF ".param vbias=$biasVoltage"; } } print OF ".end"; close(OF); # # Run simulations and get the results # if (!open(SIMULATE,"$simulate::simulatorCommand $simulate::netlistFile 2>/dev/null|")) { die("ERROR: cannot run $main::simulatorName, stopped"); } $inData=0;$inResults=0;@V=(); foreach $pin (@main::Outputs) {@{$DC{$pin}}=()} while () { chomp; if (/dc\s+transfer\s+curves/i) {$inResults=1;$inData=0;next} if (/job\s+concluded/) {$inResults=0} next if (!$inResults); s/^\s+//;s/\s+$//; if (/^volt\s+(current|voltage)/) { chomp($_=);s/^\s*(v_)?//;s/\s+$//;$pin=$_;$inData=1;next; } @Field=split; if ($#Field != 1 || &modelQa::unScale($Field[0]) !~ /^($main::number)$/ || &modelQa::unScale($Field[1]) !~ /^($main::number)$/) { $inData=0;next; } if ($pin eq $main::Outputs[0]) { push(@V,&modelQa::unScale($Field[0])); } push(@{$DC{$pin}},&modelQa::unScale($Field[1])); } close(SIMULATE); # # Write the results to a file # if (!open(OF,">$outputFile")) { die("ERROR: cannot open file $outputFile, stopped"); } printf OF ("V($main::biasSweepPin)"); foreach $pin (@main::Outputs) { if ($main::isFloatingPin{$pin}) { printf OF (" V($pin)"); } else { printf OF (" I($pin)"); } } printf OF ("\n"); for ($i=0;$i<=$#V;++$i) { next if (abs($V[$i]-$start) < abs(0.1*$step)); # this is dummy first bias point printf OF ("$V[$i]"); foreach $pin (@main::Outputs) { printf OF (" ${$DC{$pin}}[$i]") } printf OF ("\n"); } close(OF); # # Clean up, unless the debug flag was specified # if (! $main::debug) { unlink($simulate::netlistFile); unlink("$simulate::netlistFile.st0"); if (defined($main::verilogaFile)) { unlink("$simulate::netlistFile.val"); } if (!opendir(DIRQA,".")) { die("ERROR: cannot open directory ., stopped"); } foreach (grep(/^$simulate::netlistFile\.ic/,readdir(DIRQA))) {unlink($_)} closedir(DIRQA); unlink("hspice.errors"); unlink("simout.tmp"); } } sub generateCommonNetlistInfo { my($variant,$temperature) = @_; my(@Pin_x,$arg,$name,$value,$eFactor,$fFactor,$pin); print OF ".option tnom=27 reltol=1u vntol=1n abstol=1f"; # default for HSPICE is 25 print OF ".temp $temperature"; if ($variant=~/^scale$/) { print OF ".option scale=$main::scaleFactor"; } if ($variant=~/^shrink$/) { print OF ".option scale=".(1.0-$main::shrinkPercent*0.01); } if ($variant=~/_P/) { $eFactor=-1;$fFactor=1; } else { $eFactor=1;$fFactor=-1; } if ($variant=~/^m$/) { if ($main::outputNoise) { $fFactor/=sqrt($main::mFactor); } else { $fFactor/=$main::mFactor; } } if (defined($main::verilogaFile)) { print OF ".hdl \"$main::verilogaFile\""; } foreach $pin (@main::Pin) {push(@Pin_x,"${pin}_x")} print OF ".subckt mysub ".join(" ",@Pin_x); foreach $pin (@main::Pin) { if ($main::isFloatingPin{$pin}) { if ($main::outputNoise && $pin eq $main::Outputs[0]) { if ($variant =~ /^m$/) { $eFactor = sqrt($main::mFactor); } else { $eFactor = 1; } print OF "e_$pin ${pin}_x 0 ${pin} 0 $eFactor"; } else { # assumed "dt" thermal pin, no scaling sign change print OF "v_$pin ${pin} ${pin}_x 0"; } } elsif ($variant=~/^Flip/ && defined($main::flipPin{$pin})) { print OF "e_$pin ${pin}_v 0 $main::flipPin{$pin}_x 0 $eFactor"; print OF "v_$pin ${pin}_v ${pin} 0"; print OF "f_$pin $main::flipPin{$pin}_x 0 v_$pin $fFactor"; } else { print OF "e_$pin ${pin}_v 0 ${pin}_x 0 $eFactor"; print OF "v_$pin ${pin}_v ${pin} 0"; print OF "f_$pin ${pin}_x 0 v_$pin $fFactor"; } } if (defined($main::verilogaFile)) { if ($variant=~/_P/) { print OF "${main::keyLetter}1 ".join(" ",@main::Pin)." $main::pTypeSelectionArguments"; } else { print OF "${main::keyLetter}1 ".join(" ",@main::Pin)." $main::nTypeSelectionArguments"; } if ($variant=~/^scale$/) { print OF "+ scale=$main::scaleFactor"; } if ($variant=~/^shrink$/) { print OF "+ shrink=$main::shrinkPercent"; } } else { print OF "${main::keyLetter}1 ".join(" ",@main::Pin)." mymodel"; } foreach $arg (@main::InstanceParameters) { ($name,$value)=split(/=/,$arg); if ($variant=~/^scale$/) { if ($main::isLinearScale{$name}) { $value/=$main::scaleFactor; } elsif ($main::isAreaScale{$name}) { $value/=$main::scaleFactor**2; } } if ($variant=~/^shrink$/) { if ($main::isLinearScale{$name}) { $value/=(1.0-$main::shrinkPercent*0.01); } elsif ($main::isAreaScale{$name}) { $value/=(1.0-$main::shrinkPercent*0.01)**2; } } print OF "+ $name=$value"; } if ($variant eq "m") { print OF "+ m=$main::mFactor"; } if (!defined($main::verilogaFile)) { if ($variant=~/_P/) { print OF ".model mymodel $main::pTypeSelectionArguments"; } else { print OF ".model mymodel $main::nTypeSelectionArguments"; } } foreach $arg (@main::ModelParameters) { print OF "+ $arg"; } print OF ".ends"; } 1; tmpk8ny_4pz/tests/bin/ngspice.pm0000644000175000017500000004270113546075722017064 0ustar carstencarsten # # ngspice DC, AC and noise test routines # # # Rel Date Who Comments # ==== ========== ============= ======== # 1.1 07/05/17 Dietmar Warning Version detection included # 1.0 05/13/11 Dietmar Warning Initial version # package simulate; if (defined($main::simulatorCommand)) { $simulatorCommand=$main::simulatorCommand; } else { $simulatorCommand="ngspice"; } $netlistFile="ngspiceCkt"; use strict; sub version { my($version,$vaVersion); $version="unknown"; $vaVersion="unknown"; if (!open(OF,">$simulate::netlistFile")) { die("ERROR: cannot open file $simulate::netlistFile, stopped"); } print OF "version test"; print OF "r1 1 0 1"; print OF "v1 1 0 1"; print OF ".control"; print OF "version"; print OF ".endc"; print OF ".end"; close(OF); if (!open(SIMULATE,"$simulate::simulatorCommand < $simulate::netlistFile 2>/dev/null|")) { die("ERROR: cannot run $simulate::simulatorCommand, stopped"); } while () { chomp; # Check whether this line is the one we are looking for. # Also the term in parenthesis "()" stores the number to $1 which we can reuse later. if (m/.+ngspice-([0-9]+)/) { # Simple read the stored group from the matching in the if clause $version=$1; last; } } close(SIMULATE); return($version,$vaVersion); } sub runNoiseTest { my($variant,$outputFile)=@_; my($arg,$name,$value,$type,$pin,$noisePin); my(@BiasList,$i,@Field); my(@X,@Noise,$temperature,$biasVoltage,$sweepVoltage,$inData); # # Make up the netlist, using a subckt to encapsulate the # instance. This simplifies handling of the variants as # the actual instance is driven by voltage-controlled # voltage sources from the subckt pins, and the currents # are fed back to the subckt pins using current-controlled # current sources. Pin swapping, polarity reversal, and # m-factor scaling can all be handled by simple modifications # of this subckt. # @X=();@Noise=(); $noisePin=$main::Outputs[0]; if ($main::fMin == $main::fMax) { $main::frequencySpec="lin 0 $main::fMin ".(10*$main::fMin); # spice3f5 bug workaround } foreach $temperature (@main::Temperature) { foreach $biasVoltage (split(/\s+/,$main::biasListSpec)) { if ($main::fMin == $main::fMax) { push(@X,@main::BiasSweepList); } foreach $sweepVoltage (@main::BiasSweepList) { if (!open(OF,">$simulate::netlistFile")) { die("ERROR: cannot open file $simulate::netlistFile, stopped"); } print OF "* Noise simulation for $main::simulatorName"; &generateCommonNetlistInfo($variant,$temperature); print OF "vin dummy 0 0 ac 1"; print OF "rin dummy 0 1.0 noise=0"; foreach $pin (@main::Pin) { if ($main::isFloatingPin{$pin}) { print OF "i_$pin $pin 0 0"; } elsif ($pin eq $main::biasListPin) { print OF "v_$pin $pin 0 $biasVoltage"; } elsif ($pin eq $main::biasSweepPin) { print OF "v_$pin $pin 0 $sweepVoltage"; } else { print OF "v_$pin $pin 0 $main::BiasFor{$pin}"; } } print OF "x1 ".join(" ",@main::Pin)." mysub"; print OF "hn 0 n_$noisePin v_$noisePin 1"; print OF ".control"; print OF "set sqrnoise"; print OF ".endc"; print OF ".noise v(n_$noisePin) vin $main::frequencySpec"; print OF ".print noise all"; print OF ".end"; close(OF); # # Run simulations and get the results # if (!open(SIMULATE,"$simulate::simulatorCommand < $simulate::netlistFile 2>/dev/null|")) { die("ERROR: cannot run $simulate::simulatorCommand, stopped"); } $inData=0; while () { chomp;s/^\s+//;s/\s+$//;s/,/ /g; if (/Index\s+frequency\s+inoise_spectrum\s+onoise_spectrum/i) { $inData=1;;next; } @Field=split; if (/\*/ || ($#Field != 3)) {$inData=0} next if (!$inData); if ($main::fMin == $main::fMax) { push(@Noise,1*$Field[3]);$inData=0;next; # spice3f5 bug workaround } push(@X,1*$Field[1]); push(@Noise,1*$Field[3]); } close(SIMULATE); } } } # # Write the results to a file # if (!open(OF,">$outputFile")) { die("ERROR: cannot open file $outputFile, stopped"); } if ($main::fMin == $main::fMax) { printf OF ("V($main::biasSweepPin)"); } else { printf OF ("Freq"); } foreach (@main::Outputs) { printf OF (" N($_)"); } printf OF ("\n"); for ($i=0;$i<=$#X;++$i) { if (defined($Noise[$i])) {printf OF ("$X[$i] $Noise[$i]\n")} } close(OF); # # Clean up, unless the debug flag was specified # if (! $main::debug) { unlink($simulate::netlistFile); if (!opendir(DIRQA,".")) { die("ERROR: cannot open directory ., stopped"); } foreach (grep(/^$simulate::netlistFile\.ic/,readdir(DIRQA))) {unlink($_)} closedir(DIRQA); } } sub runAcTest { my($variant,$outputFile)=@_; my($arg,$name,$value,$type,$pin,$mPin,$fPin,%NextPin); my(@BiasList,$acStim,$i,@Field); my(@X,$omega,$twoPi,%g,%c,$temperature,$biasVoltage,$sweepVoltage,$inData,$outputLine); $twoPi=8.0*atan2(1.0,1.0); # # Make up the netlist, using a subckt to encapsulate the # instance. This simplifies handling of the variants as # the actual instance is driven by voltage-controlled # voltage sources from the subckt pins, and the currents # are fed back to the subckt pins using current-controlled # current sources. Pin swapping, polarity reversal, and # m-factor scaling can all be handled by simple modifications # of this subckt. # foreach $mPin (@main::Pin) { foreach $fPin (@main::Pin) { @{$g{$mPin,$fPin}}=(); @{$c{$mPin,$fPin}}=(); } } @X=(); foreach $temperature (@main::Temperature) { foreach $biasVoltage (split(/\s+/,$main::biasListSpec)) { if ($main::fMin == $main::fMax) { push(@X,@main::BiasSweepList); } foreach $sweepVoltage (@main::BiasSweepList) { if (!open(OF,">$simulate::netlistFile")) { die("ERROR: cannot open file $simulate::netlistFile, stopped"); } print OF "* AC simulation for $main::simulatorName"; &generateCommonNetlistInfo($variant,$temperature); foreach $fPin (@main::Pin) { foreach $mPin (@main::Pin) { if ($mPin eq $fPin) { $acStim=" ac 1"; } else { $acStim=""; } if ($main::isFloatingPin{$mPin}) { print OF "i_${mPin}_$fPin ${mPin}_$fPin 0 0"; } elsif ($mPin eq $main::biasListPin) { print OF "v_${mPin}_$fPin ${mPin}_$fPin 0 $biasVoltage$acStim"; } elsif ($mPin eq $main::biasSweepPin) { print OF "v_${mPin}_$fPin ${mPin}_$fPin 0 $sweepVoltage$acStim"; } else { print OF "v_${mPin}_$fPin ${mPin}_$fPin 0 $main::BiasFor{$mPin}$acStim"; } } print OF "x_$fPin ".join("_$fPin ",@main::Pin)."_$fPin mysub"; } print OF ".ac $main::frequencySpec"; foreach $mPin (@main::Pin) { foreach $fPin (@main::Pin) { print OF ".print ac i(v_${mPin}_$fPin)"; } } print OF ".end"; close(OF); # # Run simulations and get the results # if (!open(SIMULATE,"$simulate::simulatorCommand < $simulate::netlistFile 2>/dev/null|")) { die("ERROR: cannot run $simulate::simulatorCommand, stopped"); } $inData=0; while () { chomp;s/^\s+//;s/\s+$//;s/,/ /g; if (/^Index\s+frequency\s+v_([a-zA-Z][a-zA-Z0-9]*)_([a-zA-Z][a-zA-Z0-9]*)#branch/i) { $mPin=$1;$fPin=$2;;$inData=1;next; } @Field=split; if (/^\*/ || ($#Field != 3)) {$inData=0;} next if (!$inData); if (($main::fMin != $main::fMax) && ($mPin eq $fPin) && ($mPin eq $main::Pin[0])) { push(@X,1*$Field[1]); } push(@{$g{$mPin,$fPin}},$Field[2]); $omega=$twoPi*$Field[1]; if ($mPin eq $fPin) { push(@{$c{$mPin,$fPin}},$Field[3]/$omega); } else { push(@{$c{$mPin,$fPin}},-1*$Field[3]/$omega); } } close(SIMULATE); } } } # # Write the results to a file # if (!open(OF,">$outputFile")) { die("ERROR: cannot open file $outputFile, stopped"); } if ($main::fMin == $main::fMax) { printf OF ("V($main::biasSweepPin)"); } else { printf OF ("Freq"); } foreach (@main::Outputs) { ($type,$mPin,$fPin)=split(/\s+/,$_); printf OF (" $type($mPin,$fPin)"); } printf OF ("\n"); for ($i=0;$i<=$#X;++$i) { $outputLine="$X[$i]"; foreach (@main::Outputs) { ($type,$mPin,$fPin)=split(/\s+/,$_); if ($type eq "g") { if (defined(${$g{$mPin,$fPin}}[$i])) { $outputLine.=" ${$g{$mPin,$fPin}}[$i]"; } else { undef($outputLine);last; } } else { if (defined(${$c{$mPin,$fPin}}[$i])) { $outputLine.=" ${$c{$mPin,$fPin}}[$i]"; } else { undef($outputLine);last; } } } if (defined($outputLine)) {printf OF ("$outputLine\n")} } close(OF); # # Clean up, unless the debug flag was specified # if (! $main::debug) { unlink($simulate::netlistFile); if (!opendir(DIRQA,".")) { die("ERROR: cannot open directory ., stopped"); } foreach (grep(/^$simulate::netlistFile\.ic/,readdir(DIRQA))) {unlink($_)} closedir(DIRQA); } } sub runDcTest { my($variant,$outputFile)=@_; my($arg,$name,$value,$i,@Field,$pin); my($start,$stop,$step); my(@V,%DC,$temperature,$biasVoltage); my($inData,$inResults); # # Make up the netlist, using a subckt to encapsulate the # instance. This simplifies handling of the variants as # the actual instance is driven by voltage-controlled # voltage sources from the subckt pins, and the currents # are fed back to the subckt pins using current-controlled # current sources. Pin swapping, polarity reversal, and # m-factor scaling can all be handled by simple modifications # of this subckt. # @V=(); foreach $pin (@main::Outputs) {@{$DC{$pin}}=()} ($start,$stop,$step)=split(/\s+/,$main::biasSweepSpec); $start-=$step; foreach $temperature (@main::Temperature) { foreach $biasVoltage (split(/\s+/,$main::biasListSpec)) { if (!open(OF,">$simulate::netlistFile")) { die("ERROR: cannot open file $simulate::netlistFile, stopped"); } print OF "* DC simulation for $main::simulatorName"; &generateCommonNetlistInfo($variant,$temperature); foreach $pin (@main::Pin) { if ($main::isFloatingPin{$pin}) { print OF "i_$pin $pin 0 0"; } elsif ($pin eq $main::biasListPin) { print OF "v_$pin $pin 0 $biasVoltage"; } elsif ($pin eq $main::biasSweepPin) { print OF "v_$pin $pin 0 $start"; } else { print OF "v_$pin $pin 0 $main::BiasFor{$pin}"; } } print OF "x1 ".join(" ",@main::Pin)." mysub"; print OF ".dc v_$main::biasSweepPin $main::biasSweepSpec"; foreach $pin (@main::Outputs) { if ($main::isFloatingPin{$pin}) { print OF ".print dc v($pin)"; } else { print OF ".print dc i(v_$pin)"; } } print OF ".end"; close(OF); # # Run simulations and get the results # if (!open(SIMULATE,"$simulate::simulatorCommand < $simulate::netlistFile 2>/dev/null|")) { die("ERROR: cannot run $simulate::simulatorCommand, stopped"); } $inResults=0; while () { chomp;s/^\s+//;s/\s+$//;s/#branch//;s/\(/_/;s/\)//; if (/^Index\s+v-sweep\s+v_/i) {$inResults=1;($pin=$');;next} @Field=split; if ($#Field != 2) {$inResults=0} next if (!$inResults); if ($pin eq $main::Outputs[0]) { push(@V,$Field[1]); } push(@{$DC{$pin}},$Field[2]); } close(SIMULATE); } } # # Write the results to a file # if (!open(OF,">$outputFile")) { die("ERROR: cannot open file $outputFile, stopped"); } printf OF ("V($main::biasSweepPin)"); foreach $pin (@main::Outputs) { if ($main::isFloatingPin{$pin}) { printf OF (" V($pin)"); } else { printf OF (" I($pin)"); } } printf OF ("\n"); for ($i=0;$i<=$#V;++$i) { next if (abs($V[$i]-$start) < abs(0.1*$step)); # this is dummy first bias point printf OF ("$V[$i]"); foreach $pin (@main::Outputs) {printf OF (" ${$DC{$pin}}[$i]")} printf OF ("\n"); } close(OF); # # Clean up, unless the debug flag was specified # if (! $main::debug) { unlink($simulate::netlistFile); if (!opendir(DIRQA,".")) { die("ERROR: cannot open directory ., stopped"); } foreach (grep(/^$simulate::netlistFile\.ic/,readdir(DIRQA))) {unlink($_)} closedir(DIRQA); } } sub generateCommonNetlistInfo { my($variant,$temperature)=@_; my(@Pin_x,$arg,$name,$value,$eFactor,$fFactor,$pin); foreach $pin (@main::Pin) {push(@Pin_x,"${pin}_x")} print OF ".options temp=$temperature gmin=1e-15 abstol=1e-14 reltol=1e-8"; if ($variant=~/^scale$/) { die("ERROR: there is no scale or shrink option for ngspice, stopped"); } if ($variant=~/^shrink$/) { die("ERROR: there is no scale or shrink option for ngspice, stopped"); } if ($variant=~/_P/) { $eFactor=-1;$fFactor=1; } else { $eFactor=1;$fFactor=-1; } if ($variant=~/^m$/) { if ($main::outputNoise) { $fFactor/=sqrt($main::mFactor); } else { $fFactor/=$main::mFactor; } } if (defined($main::verilogaFile)) { die("ERROR: Verilog-A model support is not implemented for ngspice, stopped"); } print OF ".subckt mysub ".join(" ",@Pin_x); foreach $pin (@main::Pin) { if ($main::isFloatingPin{$pin}) { # assumed "dt" thermal pin, no scaling sign change print OF "v_$pin ${pin} ${pin}_x 0"; } elsif ($variant=~/^Flip/ && defined($main::flipPin{$pin})) { print OF "e_$pin ${pin}_v 0 $main::flipPin{$pin}_x 0 $eFactor"; print OF "v_$pin ${pin}_v ${pin} 0"; print OF "f_$pin $main::flipPin{$pin}_x 0 v_$pin $fFactor"; } else { print OF "e_$pin ${pin}_v 0 ${pin}_x 0 $eFactor"; print OF "v_$pin ${pin}_v ${pin} 0"; print OF "f_$pin ${pin}_x 0 v_$pin $fFactor"; } } print OF "${main::keyLetter}1 ".join(" ",@main::Pin)." mymodel"; foreach $arg (@main::InstanceParameters) { ($name,$value)=split(/=/,$arg); if ($variant=~/^scale$/) { if ($main::isLinearScale{$name}) { $value/=$main::scaleFactor; } elsif ($main::isAreaScale{$name}) { $value/=$main::scaleFactor**2; } } if ($variant=~/^shrink$/) { if ($main::isLinearScale{$name}) { $value/=(1.0-$main::shrinkPercent*0.01); } elsif ($main::isAreaScale{$name}) { $value/=(1.0-$main::shrinkPercent*0.01)**2; } } print OF "+ $name=$value"; } if ($variant eq "m") { print OF "+ m=$main::mFactor"; } if ($variant=~/_P/) { print OF ".model mymodel $main::pTypeSelectionArguments"; } else { print OF ".model mymodel $main::nTypeSelectionArguments"; } foreach $arg (@main::ModelParameters) { print OF "+ $arg"; } print OF ".ends"; } 1; tmpk8ny_4pz/tests/bin/spinit0000644000175000017500000000022013546075722016315 0ustar carstencarsten* due to a broken implementation of the ngspice frontend * this environment variable must be lower-case set sourcepath = ( $ngspice_vpath . ) tmpk8ny_4pz/tests/bin/runQaTests.pl0000755000175000017500000003006013546075722017542 0ustar carstencarsten#!/bin/sh eval 'exec perl -S -x -w $0 ${1+"$@"}' #!perl # # runQaTests.pl: program to run automated QA tests on compact models # # Rel Date Who Comments # ==== ========== ============= ======== # 1.2 06/30/06 Colin McAndrew Floating node support added # 1.0 04/13/06 Colin McAndrew Initial version # sub usage() { print " $prog: run model QA tests Usage: $prog [options] -s simulatorName qaSpecificationFile Files: qaSpecificationFile file with specifications for QA tests simulatorName name of simulator to be tested Options: -c version platform do not try to simulate, only compare results for version and platform -d debug mode (leave intermediate files around) -h print this help message -i print info on file formats and structure -l list tests and variants that are defined -lt list tests that are defined -lv list test variants that are defined -nw do not print warning messages -platform prints the hardware platform and operating system version -p plot results (limited, only standard test variant) -r re-use previously simulated results if they exist (default is to resimulate, even if results exist) -sv prints the simulator version being run -t TEST only run test TEST (can be a comma delimited list) -var VAR only run variant VAR (can be a comma delimited list) -v verbose mode -V really verbose mode, print out each difference detected "; } # End of usage sub info() { print " This program runs automated QA tests on a model. The test specifications are defined in the qaSpecificationFile Each test is run by setting up a netlist, running this is in the simulator in which the implementation of a model is being tested, and then collating the simulation results. Because the netlist formats, simulator commands, and output formats vary between simulators, a specific set of routines that run the tests must be provided for each simulator. Please see the documentation for more details. "; } # End of info # # Set program names and variables # $\="\n"; $,=" "; undef($number); $number='[+-]?\d+[\.]?\d*[eE][+-]?\d+|[+-]?[\.]\d+[eE][+-]?\d+|[+-]?\d+[\.]?\d*|[+-]?[\.]\d+'; undef($qaSpecFile); undef(@Setup); undef(@Test); undef(@Variants); undef(@TestVariants); $debug=0; $verbose=0; $reallyVerbose=0; $doPlot=0; $listTests=0; $listVariants=0; $onlyDoSimulatorVersion=0; $onlyDoPlatformVersion=0; $onlyDoComparison=0; $onlyTuple=0; $forceSimulation=1; $printWarnings=1; @prog=split("/",$0); $programDirectory=join("/",@prog[0..$#prog-1]); $prog=$prog[$#prog]; $srcdir=""; $resultsDirectory="results"; # # These variables are only defined once in this file, # and so generate unsightly warnings from the -w option # to perl, these undef's stop those warnings. # undef($dcClip);undef($dcNdigit);undef($dcRelTol); undef($acClip);undef($acNdigit);undef($acRelTol); undef($noiseClip);undef($noiseNdigit);undef($noiseRelTol); undef($mFactor);undef($shrinkPercent);undef($scaleFactor);undef(%TestSpec); undef($refrnceDirectory); undef($simulatorCommand); # # These are the tolerances used to compare results # $dcClip=1.0e-13; $dcNdigit=6; $dcRelTol=1.0e-6; $acClip=1.0e-20; $acNdigit=6; $acRelTol=1.0e-6; $noiseClip=1.0e-30; $noiseNdigit=5; $noiseRelTol=1.0e-5; # # These are the values used to test shrink, scale, and m # (if they are requested to be tested). # $scaleFactor=1.0e-6; $shrinkPercent=50; $sqrt_mFactor=10; $mFactor=$sqrt_mFactor*$sqrt_mFactor; # # Parse the command line arguments # for (;;) { if (!defined($ARGV[0])) { last; } elsif ($ARGV[0] =~ /^-c/) { shift(@ARGV); if ($#ARGV<0) {die("ERROR: no simulator version specified for -c option, stopped")} $version=$ARGV[0]; shift(@ARGV); if ($#ARGV<0) {die("ERROR: no platform specified for -c option, stopped")} $platform=$ARGV[0]; $onlyDoComparison=1; } elsif ($ARGV[0] =~ /^-d/i) { $debug=1;$verbose=1; } elsif ($ARGV[0] =~ /^-h/i) { &usage();exit(0); } elsif ($ARGV[0] =~ /^-i/i) { &usage();&info();exit(0); } elsif ($ARGV[0] =~ /^-lv/i) { $listVariants=1; } elsif ($ARGV[0] =~ /^-lt/i) { $listTests=1; } elsif ($ARGV[0] =~ /^-l/i) { $listTests=1;$listVariants=1; } elsif ($ARGV[0] =~ /^-platform/i) { $onlyDoPlatformVersion=1; } elsif ($ARGV[0] =~ /^-nw/i) { $printWarnings=0; } elsif ($ARGV[0] =~ /^-p/i) { $doPlot=1; } elsif ($ARGV[0] =~ /^-r/i) { $forceSimulation=0; } elsif ($ARGV[0] =~ /^-sv/i) { $onlyDoSimulatorVersion=1; } elsif ($ARGV[0] =~ /^--results=(.*)/i) { $resultsDirectory=$1; } elsif ($ARGV[0] =~ /^--executable=(.*)/i) { $simulatorCommand=$1; } elsif ($ARGV[0] =~ /^-s/) { shift(@ARGV); if ($#ARGV<0) {die("ERROR: no simulator specified for -s option, stopped")} $simulatorName=$ARGV[0]; } elsif ($ARGV[0] =~ /^--srcdir=(.*)/i) { $srcdir=$1; } elsif ($ARGV[0] =~ /^-t/) { shift(@ARGV); if ($#ARGV<0) {die("ERROR: no test(s) specified for -t option, stopped")} foreach (split(/,/,$ARGV[0])) {$doTest{$_}=1} } elsif ($ARGV[0] =~ /^-var/) { shift(@ARGV); if ($#ARGV<0) {die("ERROR: no variant(s) specified for -var option, stopped")} foreach (split(/,/,$ARGV[0])) {$doVariant{$_}=1} } elsif ($ARGV[0] =~ /^-v/) { $verbose=1; } elsif ($ARGV[0] =~ /^-V/) { $verbose=1;$reallyVerbose=1; } elsif ($ARGV[0] =~ /^--tuple/) { $onlyTuple=1; } elsif ($ARGV[0] =~ /^--version=(.*)/i) { $version=$1; } elsif ($ARGV[0] =~ /^--platform=(.*)/i) { $platform=$1; } elsif ($ARGV[0] =~ /^--vaVersion=(.*)/i) { $vaVersion=$1; } elsif ($ARGV[0] =~ /^-/) { &usage(); die("ERROR: unknown flag $ARGV[0], stopped"); } else { last; } shift(@ARGV); } if ($onlyDoSimulatorVersion && !defined($simulatorName) && defined($ARGV[0])) { $simulatorName=$ARGV[0]; # assume -sv simulatorName was specified } if ($#ARGV<0 && !$onlyDoPlatformVersion && !($onlyDoSimulatorVersion && defined($simulatorName)) && !$onlyTuple) { &usage();exit(0); } if (!$onlyDoPlatformVersion && !defined($simulatorName) && !$onlyTuple) { &usage();exit(0); } if(!defined($simulatorCommand)) { $simulatorCommand=$simulatorName; } # # Source perl modules with subroutines that are called to do all the work # if (! require "$programDirectory/modelQaTestRoutines.pm") { die("ERROR: problem sourcing modelQaTestRoutines.pm, stopped"); } if ($onlyTuple) { $platform = &modelQa::platform(); if (! -r "$programDirectory/$simulatorName.pm") { die("ERROR: there is no test routine Perl module for simulator $simulatorName, stopped"); } if (! require "$programDirectory/$simulatorName.pm") { die("ERROR: problem sourcing test routine Perl module for simulator $simulatorName, stopped"); } ($version,$vaVersion) = &simulate::version(); print "platform=$platform\n"; print "version=$version\n"; print "vaVersion=$vaVersion\n"; exit(0); } if (!$onlyDoComparison) { $platform=&modelQa::platform(); if ($onlyDoPlatformVersion) { print $platform;exit(0); } if (! -r "$programDirectory/$simulatorName.pm") { die("ERROR: there is no test routine Perl module for simulator $simulatorName, stopped"); } if (! require "$programDirectory/$simulatorName.pm") { die("ERROR: problem sourcing test routine Perl module for simulator $simulatorName, stopped"); } } # # Initial processing, set up directory names and process the QA specification file # if (!$onlyDoComparison) { if (!defined($version) || !defined($vaVersion)) { ($version,$vaVersion)=&simulate::version(); } if ($onlyDoSimulatorVersion) { if ($vaVersion eq "unknown") { print $version;exit(0); } else { print $version,$vaVersion;exit(0); } } } $qaSpecFile=$ARGV[0]; $refrnceDirectory=$main::srcdir . "reference"; undef(%Defined); $Defined{$simulatorName}=1; # any `ifdef's in the QA spec file for $simulatorName are automatically inlcuded &modelQa::readQaSpecFile(); &modelQa::processSetup(@Setup); # # List tests and variants, if that was all that was requested # (note that the Makefile uses output from -lt and -lv # options to loop over the tests and variants individually, # so the output for those needs to be on a single line) # if ($listTests || $listVariants) { if ($listTests && $listVariants) { print "\nTests:"; foreach (@Test) {print " ".$_} print "\nVariants:"; foreach (@Variants) {print " ".$_} } elsif ($listTests) { print @Test; } else { print @Variants; } exit(0); } # # Loop over and run all tests # Note that the "standard" variant test is compared # to the reference results, whereas the other variant # tests are compared to the "standard" variant result. # This is because there may be some slight differences # between implementations, which get flagged when standard # is compared to reference, however for the other variants # this would generate a sequence of identical and in-exact # comparison messages. Each variant should *exactly* match # the standard, hence this is checked, and gives cleaner # looking output when the standard differs from the reference. # if (!$onlyDoComparison) { if (! -d $resultsDirectory) {mkdir($resultsDirectory,0775)} $resultsDirectory.="/$simulatorName"; if (! -d $resultsDirectory) {mkdir($resultsDirectory,0775)} $resultsDirectory.="/$version"; if (! -d $resultsDirectory) {mkdir($resultsDirectory,0775)} $resultsDirectory.="/$platform"; if (! -d $resultsDirectory) {mkdir($resultsDirectory,0775)} } else { $resultsDirectory.="/$simulatorName/$version/$platform"; } if ($reallyVerbose) { $flag="-v"; } else { $flag=""; } foreach $test (@Test) { next if (%doTest && !$doTest{$test}); if ($verbose) {print "\n****** Running test ($simulatorName): $test"} undef($outputDc); undef($outputAc); undef($outputNoise); &modelQa::processTestSpec(@{$TestSpec{$test}}); foreach $variant (@TestVariants) { if ($variant eq "standard") { $refFile="$refrnceDirectory/$test.standard"; } else { $refFile="$resultsDirectory/$test.standard"; } next if (%doVariant && !$doVariant{$variant}); $simFile="$resultsDirectory/$test.$variant"; if ($outputDc) { if (($forceSimulation || ! -r $simFile) && !$onlyDoComparison) { &simulate::runDcTest($variant,$simFile); } $clip=$dcClip;$relTol=$dcRelTol;$ndigit=$dcNdigit; } if ($outputAc) { if (($forceSimulation || ! -r $simFile) && !$onlyDoComparison) { &simulate::runAcTest($variant,$simFile); } $clip=$acClip;$relTol=$acRelTol;$ndigit=$acNdigit; } if ($outputNoise) { if (($forceSimulation || ! -r $simFile) && !$onlyDoComparison) { &simulate::runNoiseTest($variant,$simFile); } $clip=$noiseClip;$relTol=$noiseRelTol;$ndigit=$noiseNdigit; } if (-r $refFile && -r $simFile) { $message=sprintf(" variant: %-20s************************ comparison failed\n",$variant); if (open(IF,"$programDirectory/compareSimulationResults.pl $flag -c $clip -r $relTol -n $ndigit $refFile $simFile|")) { while () {chomp;$message=$_;} close(IF); } print $message; } else { printf(" variant: %-20s************************ no results to compare to\n",$variant); } } } tmpk8ny_4pz/tests/bin/compareSimulationResults.pl0000755000175000017500000002214613546075722022514 0ustar carstencarsten#!/bin/sh eval 'exec perl -S -x -w $0 ${1+"$@"}' #!perl # # compareSimulationResults.pl: program to do a toleranced comparison of compact model simulation results # # Rel Date Who Comments # ==== ========== ============= ======== # 1.0 04/13/06 Colin McAndrew Initial version # sub usage() { print " $prog: compare simulation results between two files Usage: $prog [options] refFile simFile Files: refFile reference results file simFile simulated results file Options: -c CLIP match numbers n1 and n2 with abs(n1)) {chomp;push(@Ref,$_)} close(IF); return("ERROR: cannot open file $simFile") if (!open(IF,"$simFile")); while () {chomp;push(@Sim,$_)} close(IF); if ($main::verbose && $#Ref != $#Sim) {print STDERR "Reference points: $#Ref\nSimulated points: $#Sim"} return("FAIL (probably from some simulation failure)") if ($#Ref != $#Sim || $#Sim<1); if ($main::verbose && $Ref[0] ne $Sim[0]) {print STDERR "Reference quantities: $Ref[0]\nSimulated quantities: $Sim[0]"} return("FAIL (simulation output quantities differ)") if ($Ref[0] ne $Sim[0]); $maxAbsErr=0;$maxRelErr=0;$matchType=0; @ColNames=split(/\s+/,$Ref[0]); for ($j=1;$j<=$#Ref;++$j) { @RefRes=split(/\s+/,$Ref[$j]); @SimRes=split(/\s+/,$Sim[$j]); if ($main::verbose && $#RefRes != $#SimRes) {print STDERR "Line $j: Ref data: $#RefRes\tSim data: $#SimRes"} return("FAIL (number of quantities simulated are different)") if ($#RefRes != $#SimRes); for ($i=1;$i<=$#RefRes;++$i) { # ignore first column, this is the sweep variable if ($RefRes[$i] !~ /^$main::number$/ || $SimRes[$i] !~ /^$main::number$/) { return("FAIL (non-numeric results"); } next if ($RefRes[$i] == $SimRes[$i]); $matchType=1 if ($matchType<1); next if (abs($RefRes[$i]) < $clip && abs($SimRes[$i]) < $clip); #next if (abs($RefRes[$i]) < $clip || abs($SimRes[$i]) < $clip); if ($RefRes[$i]*$SimRes[$i] <= 0.0) { $matchType=2 if ($matchType<2); $absErr=abs($RefRes[$i]-$SimRes[$i]); $relErr=$absErr/(0.5*(abs($RefRes[$i])+abs($SimRes[$i])+$absErr)); $maxRelErr=$relErr if ($relErr > $maxRelErr); if ($main::verbose) {print STDERR $ColNames[$i],$RefRes[$i],$SimRes[$i],100*$relErr."\%"} next; } $lo=abs($RefRes[$i]); if (abs($SimRes[$i]) < $lo) { $hi=$lo; $lo=abs($SimRes[$i]); } else { $hi=abs($SimRes[$i]); } $mag=int(log($lo)/log(10))+1; if ($lo < 1) {$mag-=1} $lo=int(0.5+$lo*10**($nDigits+1-$mag)); $hi=int(0.5+$hi*10**($nDigits+1-$mag)); next if (abs($lo-$hi)<=10); $absErr=abs($RefRes[$i]-$SimRes[$i]); $relErr=$absErr/(0.5*(abs($RefRes[$i])+abs($SimRes[$i])+$absErr)); next if ($relErr<$relTol); if ($main::verbose) {print STDERR $ColNames[$i],$RefRes[$i],$SimRes[$i],100*$relErr."\%"} $matchType=2 if ($matchType<2); $maxRelErr=$relErr if ($relErr > $maxRelErr); } } if ($matchType==0) { return("MATCH (exact)"); } elsif ($matchType==1) { return("MATCH (within specified tolerances)"); } elsif ($matchType==2) { $mag=int(log($maxRelErr)/log(10)); $i=$maxRelErr/10**$mag; $maxRelErr=100*10**$mag*int(0.5+1e3*$i)/1e3; return("DIFFER (max rel error is $maxRelErr\%)"); } } tmpk8ny_4pz/tests/bin/run_cmc_check0000755000175000017500000001074713546075722017614 0ustar carstencarsten#!/bin/sh # # Example Script to run tests and check results. # # This is an example script for running QA tests on a # model and then checking the simulated results against # reference results. A separate target is defined for each # variant of the model. The program runQaTests.pl runs the # tests, and that program expects a perl module SIMULATOR.pm # to be provided for each simulator that is tested. # Examples of these are provided. # qaSpecFile="qaSpec" qaResultsDirectory="results" testProgramName="$(dirname $0)/runQaTests.pl" if [ -z "$testProgramFlags" ] ; then testProgramFlags="-nw" fi #testProgramFlags="-d -V" help() { cat <<-EOF Valid targets are: all run tests and compare results for all simulators ngspice run tests and compare results ngspice hspice run tests and compare results hspice clean remove all previously generated simulation results NOTE: if test results exist they are not resimulated NOTE: to force resimulation run "make clean" first EOF } run_test() { simname="$1" for i in $(${testProgramName} ${testProgramFlags} -s ${simname} --tuple) ; do case "${i%%=*}" in platform) localPlatform="${i#*=}";; version) localVersion="${i#*=}";; vaVersion) localVaVersion="${i#*=}";; esac done echo "" echo "******" echo "****** ${qaSpecFile} tests for ${simname}" echo "****** (for version ${localVersion} on platform ${localPlatform})" echo "******" for test in `${testProgramName} -lt -s ${simname} ${qaSpecFile}` ; do echo "" echo "****** Checking test (${simname}): ${test}" for variant in `${testProgramName} -lv -s ${simname} ${qaSpecFile}` ; do ${testProgramName} \ ${testProgramFlags} \ -s ${simname} \ -r -t ${test} \ -var ${variant} \ --version=${localVersion} \ --vaVersion=${localVaVersion} \ --platform=${platform} \ --results=${qaResultsDirectory} \ ${qaSpecFile} done done for version in `ls -C1 ${qaResultsDirectory}/${simname}` ; do for platform in `ls -C1 ${qaResultsDirectory}/${simname}/${version}` ; do if [ "${version}" = "${localVersion}" -a "${platform}" = "${localPlatform}" ] then break fi echo "" echo "******" echo "****** Comparing previously run ${qaSpecFile} tests for ${simname}" echo "****** (for version ${version} on platform ${platform})" echo "******" for test in `${testProgramName} -lt -s ${simname} ${qaSpecFile}` ; do echo "" echo "****** Checking test (${simname}): ${test}" for variant in `${testProgramName} -lv -s ${simname} ${qaSpecFile}` ; do ${testProgramName} \ -c ${version} ${platform} \ -s ${simname} \ -t ${test} \ -var ${variant} \ --version=${localVersion} \ --vaVersion=${localVaVersion} \ --platform=${platform} \ --results=${qaResultsDirectory} \ ${qaSpecFile} done done done done } ##### ##### tests ##### ngspice() { run_test ngspice } hspice() { run_test hspice } ##### ##### clean ##### clean() { rm -rf ${qaResultsDirectory}/ngspice ngspiceCkt* rm -rf ${qaResultsDirectory}/hspice hspiceCkt* } clean_ngspice() { rm -rf ${qaResultsDirectory}/ngspice ngspiceCkt* } clean_hspice() { rm -rf ${qaResultsDirectory}/hspice hspiceCkt* } all() { ngspice hspice } while test $# -gt 0; do case "$1" in --srcdir=* | --executable=*) testProgramFlags="$testProgramFlags $1" shift ;; --results) qaResultsDirectory="$2" shift ; shift ;; -qa) qaSpecFile="$2" shift ; shift ;; *) break ;; esac done for arg in $@ ; do case "$arg" in all | clean | clean_ngspice | ngspice | clean_hspice | hspice) "$arg" ;; *) help ;; esac done tmpk8ny_4pz/tests/bin/check_cmc.sh0000755000175000017500000000105113546075722017325 0ustar carstencarsten#!/bin/sh # cmc model check specific driver for the automake `check' target # arguments: # ngspice-executable subdirectory/qaSpec-file # (compile "./check_cmc.sh thexec nmos/qaSpec") executable="$1" qaspec="$2" subdir="$(dirname $2)" kind="$(basename $subdir)" echo "qaspec = $qaspec" echo "subdir = $subdir" echo "executable = $executable" echo "kind = $kind" mkdir -p "$kind" exec "$(dirname $0)/run_cmc_check" \ --executable="${executable}" \ --srcdir="${subdir}/" \ --results "$kind/results" \ -qa "${qaspec}" \ ngspice tmpk8ny_4pz/tests/bin/modelQaTestRoutines.pm0000644000175000017500000007360513546075722021416 0ustar carstencarsten # # perl module with subroutines used as part of compact model QA (runQaTests.pl) # # # Rel Date Who Comments # ==== ========== ============= ======== # 1.4 Colin McAndrew Q added as AC output option # Unused AC simulations skipped # 1.2 06/30/06 Colin McAndrew Floating node support added # Noise simulation added # Other general cleanup # 1.0 04/13/06 Colin McAndrew Initial version # package modelQa; #use strict; # hirearchical read cannot be done while "strict refs" is in use # # This subroutine processes the generic (not test specific) setup information. # It sets the information in global variables. # sub processSetup { my(@Setup)=@_; my(@Field,$pin,$temperature); undef(%main::isLinearScale); undef(%main::isAreaScale); undef(%main::DefaultTemperature); $main::doMfactorTest=0; $main::doScaleTest =0; $main::doShrinkTest =0; $main::doPinFlipTest=0; $main::doPNFlipTest =0; @main::Pin=(); foreach (@Setup) { @Field=split(/[\s,]+/,$_); if (s/^keyLetter\s+//i) { if ($_ !~ /^[a-zA-Z]$/) { die("ERROR: bad keyLetter specification, stopped"); } $main::keyLetter=$_; next; } if (s/^verilogaFile\s+//i) { $main::verilogaFile=$_; if (! -f $main::verilogaFile) { die("ERROR: cannot find file $main::verilogaFile, stopped"); } next; } if (s/^(pins|terminals)\s+//i) { push(@main::Pin,@Field[1..$#Field]); foreach $pin (@main::Pin) { $main::isPin{$pin}=1; if ($pin !~ /^[a-zA-Z][a-zA-Z0-9]*$/) { # underscores are not allowed die("ERROR: bad pin name specification $pin, stopped"); } } next; } if (/^symmetric(Pins|Terminals)/i) { if ($#Field != 2) { die("ERROR: bad symmetricPins specification, stopped"); } $main::isSymmetryPin{$Field[1]}=1; $main::isSymmetryPin{$Field[2]}=1; $main::flipPin{$Field[1]}=$Field[2]; $main::flipPin{$Field[2]}=$Field[1]; $main::doPinFlipTest=1; next; } if (s/^pTypeSelectionArguments\s+//i) { s/\s*=\s*/=/g; $main::pTypeSelectionArguments=$_; next; } if (s/^(nType|type|model)SelectionArguments\s+//i) { s/\s*=\s*/=/g; $main::nTypeSelectionArguments=$_; next; } if (/^checkPolarity/i) { if ($#Field<1 || ($Field[1] !~ /^[yn01]/i)) { die("ERROR: bad checkPolarity specification, stopped"); } if ($Field[1] =~ /^[y1]/i) { $main::doPNFlipTest=1; } else { $main::doPNFlipTest=0; } next; } if (/^scaleParameters/i) { foreach (@Field[1..$#Field]) { if (/^m$/i) {$main::doMfactorTest=1} if (/^scale$/i) {$main::doScaleTest =1} if (/^shrink$/i) {$main::doShrinkTest =1} } next; } if (/^linearScale/i) { foreach (@Field[1..$#Field]) { $main::isLinearScale{$_}=1; } next; } if (/^areaScale/i) { foreach (@Field[1..$#Field]) { $main::isAreaScale{$_}=1; } next; } if (/^temperature/i) { push(@main::DefaultTemperature,@Field[1..$#Field]); next; } if (/^float/i) { foreach (@Field[1..$#Field]) { $main::isGeneralFloatingPin{$_}=1; } next; } die("ERROR: unknown setup directive $Field[0], stopped"); } if ($#main::Pin < 1) { die("ERROR: there must be two or more device pins, stopped"); } foreach $pin (keys(%main::isSymmetryPin)) { if (!$main::isPin{$pin}) { die("ERROR: symmetry pin $pin is not a specified device pin, stopped"); } } foreach $pin (keys(%main::isGeneralFloatingPin)) { if (!$main::isPin{$pin}) { die("ERROR: floating pin $pin is not a specified device pin, stopped"); } } unless (@main::DefaultTemperature) { @main::DefaultTemperature=(27); } foreach $temperature (@main::DefaultTemperature) { if ($temperature!~/^$main::number$/) { die("ERROR: bad temperature value specified, stopped"); } } if ($main::simulatorName =~ /mica|ads/i && defined($main::verilogaFile)) { $main::keyLetter="a"; } if ($main::simulatorName =~ /hspice/i && defined($main::verilogaFile)) { $main::keyLetter="X"; } if ($main::simulatorName =~ /spectre/i && !defined($main::keyLetter)) { $main::keyLetter="x"; } if (!defined($main::keyLetter)) { die("ERROR: no keyLetter specified, stopped"); } # if (!defined($main::nTypeSelectionArguments)) { # die("ERROR: no model selection arguments specified, stopped"); #} @main::Variants=("standard"); if ($main::doPinFlipTest&&$main::doPNFlipTest) { push(@main::Variants,"Flip_N"); push(@main::Variants,"noFlip_P"); push(@main::Variants,"Flip_P"); if (!defined($main::pTypeSelectionArguments)) { die("ERROR: no pType model selection arguments specified, stopped"); } } elsif ($main::doPinFlipTest) { push(@main::Variants,"Flip_N"); } elsif ($main::doPNFlipTest) { push(@main::Variants,"noFlip_P"); if (!defined($main::pTypeSelectionArguments)) { die("ERROR: no pType model selection arguments specified, stopped"); } } if ($main::doShrinkTest ) {push(@main::Variants,"shrink")} if ($main::doScaleTest ) {push(@main::Variants,"scale")} if ($main::doMfactorTest) {push(@main::Variants,"m")} } # # This subroutine processes test specific setup information. # It sets the information in global variables. # sub processTestSpec { my(@Spec)=@_; my($i,$arg,$temperature,$bias,$pin,@Field,$oneOverTwoPi,$name,$value,%isAnalysisPin,%AlreadyHave,%IndexFor); $main::outputDc=0;$main::outputAc=0;$main::outputNoise=0; undef($main::biasSweepPin);undef($main::biasSweepSpec);undef(@main::BiasSweepList); undef($main::biasListPin);undef($main::biasListSpec); undef($main::frequencySpec); undef($main::Temperature); @main::InstanceParameters=(); @main::Outputs=(); @main::ModelParameters=(); @main::TestVariants=@main::Variants; undef(%main::BiasFor); if (%main::isGeneralFloatingPin) { %main::isFloatingPin=%main::isGeneralFloatingPin; } else { undef(%main::isFloatingPin); } undef(%isAnalysisPin); undef(@main::Temperature); undef(%main::referencePinFor); foreach $pin (@main::Pin) { $main::needAcStimulusFor{$pin}=0; } foreach (@Spec) { if (s/^output[s]?\s+//i) { s/\(/ /g;s/\)//g; @Field=split(/[\s,]+/,$_); for ($i=0;$i<=$#Field;++$i) { if ($Field[$i] =~ /^[IV]$/) { $main::outputDc=1; ++$i; if (!$main::isPin{$Field[$i]}) { die("ERROR: pin $Field[$i] listed for DC output is not a specified pin, stopped"); } push(@main::Outputs,$Field[$i]); } if ($Field[$i] =~ /^[CGQ]$/) { $main::outputAc=1; push(@main::Outputs,lc($Field[$i])); ++$i; if (!$main::isPin{$Field[$i]}) { die("ERROR: pin $Field[$i] listed for AC output is not a specified pin, stopped"); } $main::Outputs[$#main::Outputs].=" $Field[$i]"; $isAnalysisPin{$Field[$i]}=1; ++$i; if (!$main::isPin{$Field[$i]}) { die("ERROR: pin $Field[$i] listed for AC output is not a specified pin, stopped"); } $main::Outputs[$#main::Outputs].=" $Field[$i]"; $main::needAcStimulusFor{$Field[$i]}=1; $isAnalysisPin{$Field[$i]}=1; } if ($Field[$i] =~ /^N$/) { my($noi1,$noi2); $main::outputNoise=1; ++$i; $noi1 = $Field[$i]; $isAnalysisPin{$noi1}=1; if (!$main::isPin{$noi1}) { die("ERROR: pin $noi1 listed for noise output is not a specified pin, stopped"); } if ($#main::Outputs==0) { die("ERROR: can only specify one pin for noise output, stopped"); } push(@main::Outputs,$noi1); ++$i; if ($i <= $#Field) { $noi2 = $Field[$i]; $isAnalysisPin{$noi2}=1; if (!$main::isPin{$noi2}) { die("ERROR: pin $noi2 listed for noise output is not a specified pin, stopped"); } $main::outputNoise=2; push(@main::Outputs,$noi2); } } } next; } if (/^biases\s+/i) { s/V\s*\(\s*/V(/;s/\s*\)/)/; s/V\(([a-zA-Z0-9]+),([a-zA-Z0-9]+)\)/V($1_$2)/; # convert V(n1,n2) to V(n1_n2) @Field=split(/[\s,]+/,$_); for ($i=1;$i<=$#Field;++$i) { if ($Field[$i] !~ /=/) { die("ERROR: biases specifications must be V(pin)=number, stopped"); } $Field[$i]=~s/V\s*\(\s*//;$Field[$i]=~s/\s*\)//; ($pin,$bias)=split("=",$Field[$i]); if ($bias !~ /^$main::number$/) { die("ERROR: biases specifications must be V(pin)=number, stopped"); } if ($pin =~ s/_([a-zA-Z0-9]+)$//) { # this a V(n1,n2) pin (not ground) referenced bias $main::referencePinFor{$pin}=$1; } $main::BiasFor{$pin}=$bias; } next; } if (s/^(biasSweep|sweepBias)\s+//i) { if (defined($main::biasSweepSpec)) { die("ERROR: can only have one biasSweep specification, stopped"); } s/V\s*\(\s*//i;s/\s*\)//; @Field=split(/[=,\s]+/,$_); if ($#Field!=3) { die("ERROR: biasSweep specification must be V(pin)=start,stop,step, stopped"); } $main::biasSweepPin=$Field[0]; if (($Field[1] !~ /^$main::number$/) || ($Field[2] !~ /^$main::number$/) || ($Field[3] !~ /^$main::number$/)) { die("ERROR: biasSweep start,stop,step must be numbers, stopped"); } if ($Field[1] == $Field[2]) { die("ERROR: biasSweep start and stop must be different, stopped"); } if ($Field[3] == 0.0) { die("ERROR: biasStep must be non-zero, stopped"); } @main::BiasSweepList=(); if ($Field[2] > $Field[1]) { $Field[3]=abs($Field[3]); for ($bias=$Field[1];$bias<=$Field[2]+0.1*$Field[3];$bias+=$Field[3]) { push(@main::BiasSweepList,$bias); } } else { $Field[3]=-1.0*abs($Field[3]); for ($bias=$Field[1];$bias>=$Field[2]+0.1*$Field[3];$bias+=$Field[3]) { push(@main::BiasSweepList,$bias); } } $main::biasSweepSpec=join(" ",@Field[1..3]); $main::BiasFor{$main::biasSweepPin}=$Field[1]; next; } if (s/^(biasList|listBias)\s+//i) { if (defined($main::biasListSpec)) { die("ERROR: can only have one biasList specification, stopped"); } s/V\s*\(\s*//i;s/\s*\)//; @Field=split(/[=,\s]+/,$_); if ($#Field < 2) { die("ERROR: biasList specification must be V(pin)=val1,val2,..., stopped"); } $main::biasListPin=$Field[0]; for ($i=1;$i<=$#Field;++$i) { if ($Field[$i] !~ /^$main::number$/) { die("ERROR: biasList values must be numbers, stopped"); } } $main::biasListSpec=join(" ",@Field[1..$#Field]); $main::BiasFor{$main::biasListPin}=$Field[1]; next; } if (s/^verilogAfile\s+//i) { $main::verilogaFile=$_; if (! -f $main::verilogaFile) { die("ERROR: cannot find file $main::verilogaFile, stopped"); } next; } if (s/^(pins|terminals)\s+//i) { foreach $pin (@main::Pin) { $main::isPin{$pin}=0; } @main::Pin = split(/[\s,]+/,$_); foreach $pin (@main::Pin) { $main::isPin{$pin}=1; if ($pin !~ /^[a-zA-Z][a-zA-Z0-9]*$/) { # underscores are not allowed die("ERROR: bad pin name specification $pin, stopped"); } } next; } if (s/^instanceParameters\s+//i) { foreach $arg (split(/\s+/,$_)) { if ($arg !~ /.=./) { die("ERROR: instance parameters must be name=value pairs, stopped"); } ($name,$value)=split(/=/,$arg); $value=~s/\(//;$value=~s/\)//; # get rid of possible parens if ($value !~ /^$main::number$/) { die("ERROR: instance parameter value in $arg is not a number, stopped"); } push(@main::InstanceParameters,$arg); } next; } if (s/^modelParameters\s+//i) { foreach $arg (split(/\s+/,$_)) { $arg_file = $main::srcdir . $arg; if ($arg !~ /.=./ && ! -r $arg_file) { die("ERROR: model parameters must be name=value pairs or a file name, stopped"); } if (-r $arg_file) { if (!open(IF,"$arg_file")) { die("ERROR: cannot open file $arg_file, stopped"); } while () { chomp;s/\s*=\s*/=/g; s/^\+\s*//;s/^\s+//;s/\s+$//; ($name,$value)=split(/=/,$_); $value=~s/\(//;$value=~s/\)//; # get rid of possible parens if ($value !~ /^$main::number$/) { die("ERROR: model parameter value in $_ is not a number, stopped"); } if (!defined($AlreadyHave{$name})) { push(@main::ModelParameters,"$name=$value"); $AlreadyHave{$name}=1; $IndexFor{$name}=$#main::ModelParameters; } else { if ($AlreadyHave{$name} == 1 && $main::printWarnings) { printf("WARNING: parameter $name defined more than once, last value specified will be used\n"); } $AlreadyHave{$name}=2; $main::ModelParameters[$IndexFor{$name}]="$name=$value"; } } close(IF); } else { ($name,$value)=split(/=/,$arg); $value=~s/\(//;$value=~s/\)//; # get rid of possible parens if ($value !~ /^$main::number$/) { die("ERROR: model parameter value in $arg is not a number, stopped"); } if (!defined($AlreadyHave{$name})) { push(@main::ModelParameters,"$name=$value"); $AlreadyHave{$name}=1; $IndexFor{$name}=$#main::ModelParameters; } else { if ($AlreadyHave{$name} == 1 && $main::printWarnings) { printf("WARNING: parameter $name defined more than once, last value specified will be used\n"); } $AlreadyHave{$name}=2; $main::ModelParameters[$IndexFor{$name}]="$name=$value"; } } } next; } if (s/^freq[uency]*\s+//i) { if (!/^(lin|oct|dec)\s+(\d+)\s+($main::number)\s+($main::number)$/) { die("ERROR: bad frequency sweep specification, stopped"); } $main::fType=$1;$main::fSteps=$2;$main::fMin=$3;$main::fMax=$4; $main::frequencySpec=$_; next; } if (s/^temperature\s+//i) { push(@main::Temperature,split(/[,\s]+/,$_)); foreach $temperature (@main::Temperature) { if ($temperature !~ /^$main::number$/) { die("ERROR: bad temperature value specified, stopped"); } } next; } if (s/^float[ingpinode]*\s+//i) { @Field=split(/[\s,]+/,$_); if ($#Field < 0) { die("ERROR: bad floating pin specification, stopped"); } foreach (@Field) { if (!$main::isPin{$_}) { die("ERROR: floating pin $_ is not a specified device pin, stopped"); } $main::isFloatingPin{$_}=1; } next; } if (/^symmetric(Pins|Terminals)/i) { @Field=split(/[\s,]+/,$_); if ($#Field == 2) { die("ERROR: cannot add symmetric pin specification per test, stopped"); } else { @main::TestVariants=(); foreach $variant (@main::Variants) { if ($variant ne "Flip_N" && $variant ne "Flip_P") { push(@main::TestVariants,$variant); } } } next; } die("ERROR: unknown test directive\n$_\nstopped"); } unless (@main::Temperature) { @main::Temperature=@main::DefaultTemperature; } if (abs($main::outputDc+$main::outputAc+($main::outputNoise>0)-1) > 0.001) { die("ERROR: outputs specified must be one of DC, AC or noise, stopped"); } if ($main::outputDc && !defined($main::biasSweepSpec)) { die("ERROR: no bias sweep spec defined for DC testing, stopped"); } if ($main::outputNoise && !defined($main::frequencySpec)) { # default for noise is f=1 $main::frequencySpec="lin 1 1 1"; $main::fType="lin";$main::fSteps=1;$main::fMin=1;$main::fMax=1; } if ($main::outputAc && !defined($main::frequencySpec)) { # default for AC is omega=1 $oneOverTwoPi=1.0/(8.0*atan2(1.0,1.0)); $main::frequencySpec="lin 1 $oneOverTwoPi $oneOverTwoPi"; $main::fType="lin";$main::fSteps=1;$main::fMin=$oneOverTwoPi;$main::fMax=$oneOverTwoPi; } if ($main::outputAc && ($main::frequencySpec eq "lin") && ($main::simulatorName =~ /hspice|ads/i)) { # AC spec is number of points, not number of steps, for hspice and ads ++$main::fSteps if ($main::fMin != $main::fMax); $main::frequencySpec="$main::fType $main::fSteps $main::fMin $main::fMax"; } foreach $pin (@main::Pin) { if (!defined($main::BiasFor{$pin}) && !defined($main::isFloatingPin{$pin})) { die("ERROR: a bias must be specified for all non-floating pins, stopped"); } if ($main::isSymmetryPin{$pin} && $main::isFloatingPin{$pin}) { die("ERROR: a floating pin cannot be specified as a symmetry pin, stopped"); } if ($isAnalysisPin{$pin} && $main::isFloatingPin{$pin} && !main::outputNoise) { die("ERROR: a floating pin can only have its voltage measured in DC analyses, stopped"); } } if (!defined($main::biasListPin)) { # if not specified make a dummy bias list, to simplify processing later $main::biasListPin="dummyPinNameThatIsNeverUsed"; $main::biasListSpec="0"; } elsif (defined($main::isFloatingPin{$main::biasListPin})) { die("ERROR: a bias list cannot be specified for a floating pin, stopped"); } if (!defined($main::biasSweepPin)) { # if not specified make a dummy bias sweep, to simplify processing later if($main::biasListPin eq $main::Pin[0]) { $main::biasSweepPin=$main::Pin[1]; } else { $main::biasSweepPin=$main::Pin[0]; } if (!defined($main::BiasFor{$main::biasSweepPin})) { $main::biasSweepSpec="0 0 0"; @main::BiasSweepList="vin"; } else { $main::biasSweepSpec="$main::BiasFor{$main::biasSweepPin} $main::BiasFor{$main::biasSweepPin} 0"; @main::BiasSweepList=($main::BiasFor{$main::biasSweepPin}); } } elsif (defined($main::isFloatingPin{$main::biasSweepPin})) { die("ERROR: a bias sweep cannot be specified for a floating pin, stopped"); } } # # This subroutine reads in a test specification file. # It cleans up the syntax by getting rid of comments # and continutation lines, processing conditionals, # and splitting up the contents of the file into # global specifications and individual test specifications. # # On call: # $main::qaSpecFile must be set to the name of the file that # contains the qaSpec information # On return: # @main::Setup contains general, test-nonspecific information # @main::Test contains a list of the test defined in the qaSpec file # %main::TestSpec contains each test specification, hash keys are @main::Test elements # sub readQaSpecFile { my(@File,@RawFile,@Field); @RawFile=&readHierarchicalFile($main::qaSpecFile); foreach (@RawFile) { s%\s*//.*%%; # eliminate C++ style comments s/^\s+//;s/\s+$//; # eliminate leading and trailing white space next if (/^$/); # ignore blank lines s/\s*=\s*/=/g; # eliminate space around "=" in name=value pairs if (/^\+/) { # process a continuation line s/^\+\s*//; # eliminate continuation "+" and any following whitespace $File[$#File]=~s/\s*\\$//; # get rid of possible additional continuation on previous line $File[$#File].=" $_"; # add to previous line next; } if (($#File >= 0) && ($File[$#File] =~ /\\$/)) { # add to previous line if that had an end-of-line continuation $File[$#File]=~s/\s*\\$//; $File[$#File].=" $_"; } else { push(@File,$_); } } @File=&processIfdefs(\%main::Defined,@File); # process ifdef's to get conditional-free qaSpec @main::Test=();@main::Setup=(); foreach (@File) { # process the qaSpec if (/^test(name)?\s+/i) { @Field=split; if ($#Field < 1) { die("ERROR: no test name specified for a test directive, stopped"); } push(@main::Test,$Field[1]); @{$main::TestSpec{$main::Test[$#main::Test]}}=(); next; } if ($#main::Test >= 0) { push(@{$main::TestSpec{$main::Test[$#main::Test]}},$_); } else { push(@main::Setup,$_); } } } sub readHierarchicalFile { my($fileName,$hierarchyLevel)=@_; my(@File,$FH,$includeFileName); if (!defined($hierarchyLevel)) { $hierarchyLevel=0; } $FH="file".$hierarchyLevel; if (!open($FH,$fileName)) { die("ERROR: cannot open file $fileName, stopped"); } @File=(); while (<$FH>) { chomp; if (/^\s*\`include\s+/) { ($includeFileName=$')=~s/"//g; ++$hierarchyLevel; push(@File,&readHierarchicalFile($includeFileName,$hierarchyLevel)); --$hierarchyLevel; } else { push(@File,$_); } } close($FH); return(@File); } # # This subroutine processes the `ifdef statements (recursively, so nested `ifdef's are handled) # and returns the test specification with the appropriate blocks included and excluded. # Note that the simulator name is defined, so that # simulator specific directives are automatically included. # sub processIfdefs { my($defRef,@Input)=@_; my(%Defined,$i,$block,@Field,$start,$middle,$end,$ifdefLevel,$maxIfdefLevel); my(@Insert); %Defined=%$defRef; for ($i=0;$i<=$#Input;++$i) { if ($Input[$i] =~ /^`(define|undef)/) { @Field=split(/\s+/,$Input[$i]); if ($#Field > 0) { if ($Input[$i] =~ /^`define/) { $Defined{$Field[1]}=1; } else { $Defined{$Field[1]}=0; } } splice(@Input,$i,1); --$i; next; } if ($Input[$i] =~ /^`ifdef\s+/) { $start=$i; $ifdefLevel=1;$maxIfdefLevel=1; undef($middle); for ($end=$start+1;$end<=$#Input;++$end) { if ($Input[$end] =~ /^`ifdef/) { ++$ifdefLevel; if ($ifdefLevel > $maxIfdefLevel) {$maxIfdefLevel=$ifdefLevel} } if ($Input[$end] =~ /^`end/) {--$ifdefLevel} if ($Input[$end] =~ /^`else/ && $ifdefLevel == 1) {$middle=$end} last if ($ifdefLevel == 0); } if (($end > $#Input) && ($ifdefLevel > 0)) { die("ERROR: `ifdef not terminated, stopped"); } ($block=$Input[$i])=~s/^`ifdef\s+//; if ($maxIfdefLevel > 1) { if (!defined($middle)) {$middle=$end} @Insert=(); if ($Defined{$block}) { if ($start+1 <= $middle-1) { @Insert=&processIfdefs(\%Defined,@Input[$start+1..$middle-1]); } } else { if ($middle+1 <= $end-1) { @Insert=&processIfdefs(\%Defined,@Input[$middle+1..$end-1]); } } splice(@Input,$start,$end-$start+1,@Insert); } else { if (!defined($middle)) {$middle=$end} @Insert=(); if ($Defined{$block}) { if ($start+1 <= $middle-1) { @Insert=@Input[$start+1..$middle-1] } } else { if ($middle+1 <= $end-1) { @Insert=@Input[$middle+1..$end-1]; } } splice(@Input,$start,$end-$start+1,@Insert); } --$i; next; } if ($Input[$i] =~ /^`/) {die("ERROR: bad directive\n$Input[$i]\nstopped")} } return(@Input); } sub unScale { # # call: $Result=&unScale($Scalar); # # If $Scalar is a SPICE-like scaled number then $Result is the value # of that number, else $Result is just $Scalar. # my($String)=@_; my($Result); $Result=$String; if ($String =~ /^([+-]?[0-9]+[.]?[0-9]*|[+-]?[.][0-9]+)T/i) { $Result=$1*1e12; } elsif ($String =~ /^([+-]?[0-9]+[.]?[0-9]*|[+-]?[.][0-9]+)G/i) { $Result=$1*1e9; } elsif ($String =~ /^([+-]?[0-9]+[.]?[0-9]*|[+-]?[.][0-9]+)(M|meg|x)/) { $Result=$1*1e6; } elsif ($String =~ /^([+-]?[0-9]+[.]?[0-9]*|[+-]?[.][0-9]+)K/i) { $Result=$1*1e3; } elsif ($String =~ /^([+-]?[0-9]+[.]?[0-9]*|[+-]?[.][0-9]+)m/) { $Result=$1*1e-3; } if ($String =~ /^([+-]?[0-9]+[.]?[0-9]*|[+-]?[.][0-9]+)u/) { $Result=$1*1e-6; } elsif ($String =~ /^([+-]?[0-9]+[.]?[0-9]*|[+-]?[.][0-9]+)n/) { $Result=$1*1e-9; } elsif ($String =~ /^([+-]?[0-9]+[.]?[0-9]*|[+-]?[.][0-9]+)p/) { $Result=$1*1e-12; } elsif ($String =~ /^([+-]?[0-9]+[.]?[0-9]*|[+-]?[.][0-9]+)f/) { $Result=$1*1e-15; } elsif ($String =~ /^([+-]?[0-9]+[.]?[0-9]*|[+-]?[.][0-9]+)a/) { $Result=$1*1e-18; } return($Result); } sub platform { # # This subroutines returns a string that includes the processor # type, OS name, and OS version. This string is used as one level # of the directory hierarchy for storing test results, because # simulation results can vary with processor and OS. # # The UNIX uname command is used to get the appropriate information. # If the system appears to be Windows, then the perl Config module # information is used instead. However this information is generated # as part of the Perl build, and so may not relate to the machine # on which it is being run. # use Config; my($osName,$osVer,$archName)=($modelQa::Config{osname},$modelQa::Config{osvers},$modelQa::Config{archname}); my($platform); if ($osName !~ /win/i) { open(UNAME,"uname -p|") or die("ERROR: cannot determine processore and OS information, stopped"); chomp($archName=);close(UNAME); if ($archName eq "unknown") { open(UNAME,"uname -m|");chomp($archName=);close(UNAME); } open(UNAME,"uname -s|");chomp($osName=);close(UNAME); open(UNAME,"uname -r|");chomp($osVer =);close(UNAME); } $platform = "${archName}_${osName}_${osVer}"; $platform =~ s/\s+/-/g; $platform =~ s|[()/]||g; return($platform); } 1; tmpk8ny_4pz/tests/bin/maketest.sh0000644000175000017500000000043613546075722017246 0ustar carstencarsten#! /bin/sh # # Ngspice test driver. NGSPICE=$(src_dir)ngspice TEST=$1 DIFFPIPE="Analysis|CPU|memory|Date|Note|Mon|Tue|Wed|Thu|Fri|Sat|Sun" testname=$(basename $TEST .cir) testdir=$(dirname $TEST) $NGSPICE < $testdir/$testname.cir 2>&1 | egrep -v $DIFFPIPE > $testname.test exit 0 tmpk8ny_4pz/tests/polezero/0000755000175000017500000000000013546075722016161 5ustar carstencarstentmpk8ny_4pz/tests/polezero/Makefile.am0000644000175000017500000000053013546075722020213 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = \ filt_multistage.cir \ filt_rc.cir \ filt_bridge_t.cir \ pz2.cir \ pzt.cir \ simplepz.cir TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/polezero/pzt.out0000644000175000017500000000140113546075722017523 0ustar carstencarstenWarning: Source iin has no value, DC 0 assumed No. of Data Rows : 1 Circuit: test pz Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 test pz -------------------------------------------------------------------------------- Index pole(1) pole(2) -------------------------------------------------------------------------------- 0 -2.000000e+01, 0.000000e+00 -2.000000e+01, 0.000000e+00 test pz -------------------------------------------------------------------------------- Index pole(3) -------------------------------------------------------------------------------- 0 -2.000000e+01, 0.000000e+00 tmpk8ny_4pz/tests/polezero/pzt.cir0000644000175000017500000000042113546075722017472 0ustar carstencarstentest pz iin 1 0 ac r1 1 0 1Ohms l1 1 0 0.05H gm2 2 0 1 0 1 r2 2 0 1Ohms l2 2 0 0.05H gm3 3 0 2 0 1 r3 3 0 1Ohms l3 3 0 0.05H *gm4 4 0 3 0 1 *r4 4 0 1Ohms *l4 4 0 0.05H *gm5 5 0 4 0 1 *r5 5 0 10Ohms *l5 5 0 0.66mH .options noacct .pz 1 0 3 0 cur pol .print pz all .end tmpk8ny_4pz/tests/polezero/pz2.cir0000644000175000017500000000045513546075722017377 0ustar carstencarstentest pz iin 1 0 ac r1 1 0 1.019524e+9Ohms l1 1 0 1H gm2 2 0 1 0 1 r2 2 0 8.296965e+08Ohms l2 2 0 1H gm3 3 0 2 0 1 r3 3 0 8.652054e+07Ohms l3 3 0 1H gm4 4 0 3 0 1 r4 4 0 1.060594e+07Ohms l4 4 0 1H *gm5 5 0 4 0 1 *r5 5 0 10Ohms *l5 5 0 0.66mH .options noacct .pz 1 0 4 0 cur pol .print pz all .end tmpk8ny_4pz/tests/polezero/filt_multistage.cir0000644000175000017500000000026613546075722022060 0ustar carstencarstenMultistage filter v1 1 0 0 ac 1.0 r1 1 2 1k c1 2 0 10p e2 3 0 2 0 10 r2 3 4 1k c2 4 0 1.25p e3 5 0 4 0 10 r3 5 6 1k c3 6 0 .02p .options noacct .pz 1 0 6 0 vol pz .print pz all .end tmpk8ny_4pz/tests/polezero/pz2.out0000644000175000017500000000147513546075722017434 0ustar carstencarstenWarning: Source iin has no value, DC 0 assumed No. of Data Rows : 1 Circuit: test pz Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 test pz -------------------------------------------------------------------------------- Index pole(1) pole(2) -------------------------------------------------------------------------------- 0 -1.019524e+09, 0.000000e+00 -8.296965e+08, 0.000000e+00 test pz -------------------------------------------------------------------------------- Index pole(3) pole(4) -------------------------------------------------------------------------------- 0 -8.652054e+07, 0.000000e+00 -1.060594e+07, 0.000000e+00 tmpk8ny_4pz/tests/polezero/filt_rc.out0000644000175000017500000000060013546075722020330 0ustar carstencarsten No. of Data Rows : 1 Circuit: RC filter Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 RC filter -------------------------------------------------------------------------------- Index all -------------------------------------------------------------------------------- 0 -1.000000e+08, 0.000000e+00 tmpk8ny_4pz/tests/polezero/filt_rc.cir0000644000175000017500000000014513546075722020302 0ustar carstencarstenRC filter v1 1 0 0 ac 1.0 r1 1 2 1k c1 2 0 10p .options noacct .pz 1 0 2 0 vol pz .print pz all .end tmpk8ny_4pz/tests/polezero/simplepz.out0000644000175000017500000000076613546075722020566 0ustar carstencarsten No. of Data Rows : 1 Circuit: test circuit #1 for pz analysis:high pass filter Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 test circuit #1 for pz analysis:high pass filter -------------------------------------------------------------------------------- Index pole(1) zero(1) -------------------------------------------------------------------------------- 0 -5.000000e+08, 0.000000e+00 0.000000e+00, 0.000000e+00 tmpk8ny_4pz/tests/polezero/filt_bridge_t.cir0000644000175000017500000000020513546075722021452 0ustar carstencarstenBRIDGE-T FILTER V1 1 0 12 AC 1 C1 1 2 1U C2 2 3 1U R3 2 0 1K R4 1 3 1K * .options noacct .OP .PZ 1 0 3 0 VOL PZ .PRINT PZ ALL * .END tmpk8ny_4pz/tests/polezero/filt_bridge_t.out0000644000175000017500000000605213546075722021512 0ustar carstencarsten No. of Data Rows : 1 No. of Data Rows : 1 Circuit: BRIDGE-T FILTER Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Node Voltage ---- ------- ---- ------- V(3) 1.200000e+01 V(2) 0.000000e+00 V(1) 1.200000e+01 Source Current ------ ------- v1#branch 0.000000e+00 Capacitor models (Fixed capacitor) model C cap 0 cj 0 cjsw 0 defw 1e-05 defl 0 narrow 0 short 0 tc1 0 tc2 0 di 0 thick 0 Resistor models (Simple linear resistor) model R rsh 0 narrow 0 short 0 tc1 0 tc2 0 defw 1e-05 kf 0 af 0 Capacitor: Fixed capacitor device c2 c1 model C C capacitance 1e-06 1e-06 cap 1e-06 1e-06 c 1e-06 1e-06 dtemp 0 0 i 0 0 p 0 0 Resistor: Simple linear resistor device r4 r3 model R R resistance 1000 1000 ac 1000 1000 dtemp 0 0 noisy 1 1 i 0 0 p 0 0 Vsource: Independent voltage source device v1 dc 12 acmag 1 i 0 p -0 BRIDGE-T FILTER -------------------------------------------------------------------------------- Index pole(1) pole(2) -------------------------------------------------------------------------------- 0 -2.618034e+03, 0.000000e+00 -3.819660e+02, 0.000000e+00 BRIDGE-T FILTER -------------------------------------------------------------------------------- Index zero(1) zero(2) -------------------------------------------------------------------------------- 0 -1.000000e+03, 0.000000e+00 -1.000000e+03, 0.000000e+00 tmpk8ny_4pz/tests/polezero/filt_multistage.out0000644000175000017500000000134513546075722022111 0ustar carstencarsten No. of Data Rows : 1 Circuit: Multistage filter Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Multistage filter -------------------------------------------------------------------------------- Index pole(1) pole(2) -------------------------------------------------------------------------------- 0 -5.000000e+10, 0.000000e+00 -8.000000e+08, 0.000000e+00 Multistage filter -------------------------------------------------------------------------------- Index pole(3) -------------------------------------------------------------------------------- 0 -1.000000e+08, 0.000000e+00 tmpk8ny_4pz/tests/polezero/simplepz.cir0000644000175000017500000000021213546075722020516 0ustar carstencarstentest circuit #1 for pz analysis:high pass filter r1 1 0 1k r2 2 0 1k c1 1 2 1.0e-12 .options noacct .pz 1 0 2 0 cur pz .print pz all .end tmpk8ny_4pz/tests/hisimhv1/0000755000175000017500000000000013546075722016052 5ustar carstencarstentmpk8ny_4pz/tests/hisimhv1/Makefile.am0000644000175000017500000000050713546075722020110 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = nmos/qaSpec pmos/qaSpec TESTS_ENVIRONMENT = \ $(SHELL) $(top_srcdir)/tests/bin/check_cmc.sh \ $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ nmos pmos MAINTAINERCLEANFILES = Makefile.in clean-local: rm -rf nmos/results pmos/results ngspiceCkt tmpk8ny_4pz/tests/hisimhv1/nmos/0000755000175000017500000000000013546075722017026 5ustar carstencarstentmpk8ny_4pz/tests/hisimhv1/nmos/parameters/0000755000175000017500000000000013546075722021171 5ustar carstencarstentmpk8ny_4pz/tests/hisimhv1/nmos/parameters/nmosParameters0000644000175000017500000002007413546075722024117 0ustar carstencarsten CORSRD = ( 3 ) CORG = ( 0 ) COIPRV = ( 1 ) COPPRV = ( 1 ) COADOV = ( 1 ) COISUB = ( 0 ) COIIGS = ( 0 ) COGIDL = ( 0 ) COOVLP = ( 1 ) COOVLPS = ( 0 ) COFLICK = ( 0 ) COISTI = ( 0 ) CONQS = ( 0 ) COTHRML = ( 0 ) COIGN = ( 0 ) CODFM = ( 0 ) COQOVSM = ( 1 ) CORBNET = ( 0 ) COSELFHEAT = ( 0 ) COSUBNODE = ( 0 ) COSYM = ( 0 ) COTEMP = ( 0 ) COERRREP = ( 1 ) VERSION = ( 2 ) VMAX = ( 1e+07 ) VMAXT1 = ( 0 ) VMAXT2 = ( 0 ) BGTMP1 = ( 9.025e-05 ) BGTMP2 = ( 1e-07 ) EG0 = ( 1.1785 ) TOX = ( 7e-09 ) XLD = ( 0 ) RDOV11 = ( 0 ) RDOV12 = ( 1 ) RDOV13 = ( 1 ) RDSLP1 = ( 0 ) RDICT1 = ( 1 ) RDSLP2 = ( 1 ) RDICT2 = ( 0 ) SUBLD1 = ( 0 ) SUBLD1L = ( 0 ) SUBLD1LP = ( 1 ) SUBLD2 = ( 0 ) XPDV = ( 0 ) XPVDTH = ( 0 ) XPVDTHG = ( 0 ) DDLTMAX = ( 10 ) DDLTSLP = ( 0 ) DDLTICT = ( 10 ) VFBOVER = ( -0.5 ) NOVER = ( 1e+17 ) NOVERS = ( 0 ) XWD = ( 0 ) XL = ( 0 ) XW = ( 0 ) SAREF = ( 1e-06 ) SBREF = ( 1e-06 ) LL = ( 0 ) LLD = ( 0 ) LLN = ( 0 ) WL = ( 0 ) WL1 = ( 0 ) WL1P = ( 1 ) WL2 = ( 0 ) WL2P = ( 1 ) WLD = ( 0 ) WLN = ( 0 ) RSH = ( 0 ) RSHG = ( 0 ) XQY = ( 0 ) XQY1 = ( 0 ) XQY2 = ( 2 ) RS = ( 0 ) RD = ( 0.01 ) VFBC = ( -1 ) VBI = ( 1.1 ) NSUBC = ( 3e+17 ) PARL2 = ( 1e-08 ) LP = ( 1.5e-08 ) NSUBP = ( 1e+18 ) NSUBP0 = ( 0 ) NSUBWP = ( 1 ) SCP1 = ( 1 ) SCP2 = ( 0 ) SCP3 = ( 0 ) SC1 = ( 1 ) SC2 = ( 0 ) SC3 = ( 0 ) SC4 = ( 0 ) PGD1 = ( 0 ) PGD2 = ( 1 ) PGD4 = ( 0 ) NDEP = ( 1 ) NDEPL = ( 0 ) NDEPLP = ( 1 ) NINV = ( 0.5 ) MUECB0 = ( 1000 ) MUECB1 = ( 100 ) MUEPH0 = ( 0.3 ) MUEPH1 = ( 20000 ) MUEPHW = ( 0 ) MUEPWP = ( 1 ) MUEPHL = ( 0 ) MUEPLP = ( 1 ) MUEPHS = ( 0 ) MUEPSP = ( 1 ) VTMP = ( 0 ) WVTH0 = ( 0 ) MUESR0 = ( 2 ) MUESR1 = ( 6e+14 ) MUESRL = ( 0 ) MUESRW = ( 0 ) MUESWP = ( 1 ) MUESLP = ( 1 ) MUETMP = ( 1.5 ) BB = ( 2 ) SUB1 = ( 10 ) SUB2 = ( 25 ) SVGS = ( 0.8 ) SVBS = ( 0.5 ) SVBSL = ( 0 ) SVDS = ( 0.8 ) SLG = ( 3e-08 ) SUB1L = ( 0.0025 ) SUB2L = ( 2e-06 ) FN1 = ( 0 ) FN2 = ( 0.00017 ) FN3 = ( 0 ) FVBS = ( 0.012 ) SVGSL = ( 0 ) SVGSLP = ( 1 ) SVGSWP = ( 1 ) SVGSW = ( 0 ) SVBSLP = ( 1 ) SLGL = ( 0 ) SLGLP = ( 1 ) SUB1LP = ( 1 ) NSTI = ( 1e+17 ) WSTI = ( 0 ) WSTIL = ( 0 ) WSTILP = ( 1 ) WSTIW = ( 0 ) WSTIWP = ( 1 ) SCSTI1 = ( 0 ) SCSTI2 = ( 0 ) VTHSTI = ( 0 ) VDSTI = ( 0 ) MUESTI1 = ( 0 ) MUESTI2 = ( 0 ) MUESTI3 = ( 1 ) NSUBPSTI1 = ( 0 ) NSUBPSTI2 = ( 0 ) NSUBPSTI3 = ( 1 ) LPEXT = ( 1e-50 ) NPEXT = ( 5e+17 ) SCP21 = ( 0 ) SCP22 = ( 0 ) BS1 = ( 0 ) BS2 = ( 0.9 ) TPOLY = ( 2e-07 ) CGBO = ( 0 ) JS0 = ( 5e-07 ) JS0SW = ( 0 ) NJ = ( 1 ) NJSW = ( 1 ) XTI = ( 2 ) CJ = ( 0.0005 ) CJSW = ( 5e-10 ) CJSWG = ( 5e-10 ) MJ = ( 0.5 ) MJSW = ( 0.33 ) MJSWG = ( 0.33 ) PB = ( 1 ) PBSW = ( 1 ) PBSWG = ( 1 ) XTI2 = ( 0 ) CISB = ( 0 ) CVB = ( 0 ) CTEMP = ( 0 ) CISBK = ( 0 ) DIVX = ( 0 ) CLM1 = ( 0.05 ) CLM2 = ( 2 ) CLM3 = ( 1 ) CLM5 = ( 1 ) CLM6 = ( 0 ) VOVER = ( 0.3 ) VOVERP = ( 0.3 ) WFC = ( 0 ) NSUBCW = ( 0 ) NSUBCWP = ( 1 ) QME1 = ( 0 ) QME2 = ( 1 ) QME3 = ( 0 ) VOVERS = ( 0 ) VOVERSP = ( 0 ) GIDL1 = ( 2 ) GIDL2 = ( 3e+07 ) GIDL3 = ( 0.9 ) GIDL4 = ( 0 ) GIDL5 = ( 0.2 ) GLEAK1 = ( 50 ) GLEAK2 = ( 1e+07 ) GLEAK3 = ( 0.06 ) GLEAK4 = ( 4 ) GLEAK5 = ( 7500 ) GLEAK6 = ( 0.25 ) GLEAK7 = ( 1e-06 ) GLPART1 = ( 0.5 ) GLKSD1 = ( 1e-15 ) GLKSD2 = ( 1000 ) GLKSD3 = ( -1000 ) GLKB1 = ( 5e-16 ) GLKB2 = ( 1 ) GLKB3 = ( 0 ) EGIG = ( 0 ) IGTEMP2 = ( 0 ) IGTEMP3 = ( 0 ) VZADD0 = ( 0.01 ) PZADD0 = ( 0.005 ) NFTRP = ( 1e+10 ) NFALP = ( 1e-19 ) CIT = ( 0 ) FALPH = ( 1 ) KAPPA = ( 3.9 ) VDIFFJ = ( 0.0006 ) DLY1 = ( 1e-10 ) DLY2 = ( 0.7 ) DLY3 = ( 8e-07 ) TNOM = ( 27 ) OVSLP = ( 2.1e-07 ) OVMAG = ( 0.6 ) GBMIN = ( 1e-12 ) RBPB = ( 50 ) RBDB = ( 50 ) RBSB = ( 50 ) IBPC1 = ( 0 ) IBPC1L = ( 0 ) IBPC1LP = ( -1 ) IBPC2 = ( 0 ) MPHDFM = ( -0.3 ) PTL = ( 0 ) PTP = ( 3.5 ) PT2 = ( 0 ) PTLP = ( 1 ) GDL = ( 0 ) GDLP = ( 0 ) GDLD = ( 0 ) PT4 = ( 0 ) PT4P = ( 1 ) RDVG11 = ( 0 ) RDVG12 = ( 100 ) RTH0 = ( 0.1 ) CTH0 = ( 1e-07 ) POWRAT = ( 1 ) TCJBD = ( 0 ) TCJBS = ( 0 ) TCJBDSW = ( 0 ) TCJBSSW = ( 0 ) TCJBDSWG = ( 0 ) TCJBSSWG = ( 0 ) DLYOV = ( 0 ) QDFTVD = ( 1 ) XLDLD = ( 1e-06 ) RDVD = ( 0.07 ) RD20 = ( 0 ) RD21 = ( 1 ) RD22 = ( 0 ) RD22D = ( 0 ) RD23 = ( 0.005 ) RD24 = ( 0 ) RD25 = ( 0 ) RDVDL = ( 0 ) RDVDLP = ( 1 ) RDVDS = ( 0 ) RDVDSP = ( 1 ) RD23L = ( 0 ) RD23LP = ( 1 ) RD23S = ( 0 ) RD23SP = ( 1 ) RDS = ( 0 ) RDSP = ( 1 ) RDTEMP1 = ( 0 ) RDTEMP2 = ( 0 ) RDVDTEMP1 = ( 0 ) RDVDTEMP2 = ( 0 ) RTH0W = ( 0 ) RTH0WP = ( 1 ) CVDSOVER = ( 0 ) NINVD = ( 0 ) NINVDW = ( 0 ) NINVDWP = ( 1 ) NINVDT1 = ( 0 ) NINVDT2 = ( 0 ) RDVB = ( 0 ) RTH0NF = ( 0 ) RTHTEMP1 = ( 0 ) RTHTEMP2 = ( 0 ) PRATTEMP1 = ( 0 ) PRATTEMP2 = ( 0 ) RDVSUB = ( 1 ) RDVDSUB = ( 0.3 ) DDRIFT = ( 1e-06 ) VBISUB = ( 0.7 ) NSUBSUB = ( 1e+15 ) SHEMAX = ( 500 ) tmpk8ny_4pz/tests/hisimhv1/nmos/parameters/pmosParameters0000644000175000017500000002007013546075722024115 0ustar carstencarsten CORSRD = ( 3 ) CORG = ( 0 ) COIPRV = ( 1 ) COPPRV = ( 1 ) COADOV = ( 1 ) COISUB = ( 0 ) COIIGS = ( 0 ) COGIDL = ( 0 ) COOVLP = ( 1 ) COOVLPS = ( 0 ) COFLICK = ( 0 ) COISTI = ( 0 ) CONQS = ( 0 ) COTHRML = ( 0 ) COIGN = ( 0 ) CODFM = ( 0 ) COQOVSM = ( 1 ) CORBNET = ( 0 ) COSELFHEAT = ( 0 ) COSUBNODE = ( 0 ) COSYM = ( 0 ) COTEMP = ( 0 ) COERRREP = ( 1 ) VERSION = ( 2 ) VMAX = ( 1e+07 ) VMAXT1 = ( 0 ) VMAXT2 = ( 0 ) BGTMP1 = ( 9.025e-05 ) BGTMP2 = ( 1e-07 ) EG0 = ( 1.1785 ) TOX = ( 7e-09 ) XLD = ( 0 ) RDOV11 = ( 0 ) RDOV12 = ( 1 ) RDOV13 = ( 1 ) RDSLP1 = ( 0 ) RDICT1 = ( 1 ) RDSLP2 = ( 1 ) RDICT2 = ( 0 ) SUBLD1 = ( 0 ) SUBLD1L = ( 0 ) SUBLD1LP = ( 1 ) SUBLD2 = ( 0 ) XPDV = ( 0 ) XPVDTH = ( 0 ) XPVDTHG = ( 0 ) DDLTMAX = ( 10 ) DDLTSLP = ( 0 ) DDLTICT = ( 10 ) VFBOVER = ( -0.5 ) NOVER = ( 1e+17 ) NOVERS = ( 0 ) XWD = ( 0 ) XL = ( 0 ) XW = ( 0 ) SAREF = ( 1e-06 ) SBREF = ( 1e-06 ) LL = ( 0 ) LLD = ( 0 ) LLN = ( 0 ) WL = ( 0 ) WL1 = ( 0 ) WL1P = ( 1 ) WL2 = ( 0 ) WL2P = ( 1 ) WLD = ( 0 ) WLN = ( 0 ) RSH = ( 0 ) RSHG = ( 0 ) XQY = ( 0 ) XQY1 = ( 0 ) XQY2 = ( 2 ) RS = ( 0 ) RD = ( 0 ) VFBC = ( -1 ) VBI = ( 1.1 ) NSUBC = ( 3e+17 ) PARL2 = ( 1e-08 ) LP = ( 1.5e-08 ) NSUBP = ( 1e+18 ) NSUBP0 = ( 0 ) NSUBWP = ( 1 ) SCP1 = ( 1 ) SCP2 = ( 0 ) SCP3 = ( 0 ) SC1 = ( 1 ) SC2 = ( 0 ) SC3 = ( 0 ) SC4 = ( 0 ) PGD1 = ( 0 ) PGD2 = ( 1 ) PGD4 = ( 0 ) NDEP = ( 1 ) NDEPL = ( 0 ) NDEPLP = ( 1 ) NINV = ( 0.5 ) MUECB0 = ( 1000 ) MUECB1 = ( 100 ) MUEPH0 = ( 0.3 ) MUEPH1 = ( 9000 ) MUEPHW = ( 0 ) MUEPWP = ( 1 ) MUEPHL = ( 0 ) MUEPLP = ( 1 ) MUEPHS = ( 0 ) MUEPSP = ( 1 ) VTMP = ( 0 ) WVTH0 = ( 0 ) MUESR0 = ( 2 ) MUESR1 = ( 6e+14 ) MUESRL = ( 0 ) MUESRW = ( 0 ) MUESWP = ( 1 ) MUESLP = ( 1 ) MUETMP = ( 1.5 ) BB = ( 1 ) SUB1 = ( 10 ) SUB2 = ( 25 ) SVGS = ( 0.8 ) SVBS = ( 0.5 ) SVBSL = ( 0 ) SVDS = ( 0.8 ) SLG = ( 3e-08 ) SUB1L = ( 0.0025 ) SUB2L = ( 2e-06 ) FN1 = ( 0 ) FN2 = ( 0.00017 ) FN3 = ( 0 ) FVBS = ( 0.012 ) SVGSL = ( 0 ) SVGSLP = ( 1 ) SVGSWP = ( 1 ) SVGSW = ( 0 ) SVBSLP = ( 1 ) SLGL = ( 0 ) SLGLP = ( 1 ) SUB1LP = ( 1 ) NSTI = ( 1e+17 ) WSTI = ( 0 ) WSTIL = ( 0 ) WSTILP = ( 1 ) WSTIW = ( 0 ) WSTIWP = ( 1 ) SCSTI1 = ( 0 ) SCSTI2 = ( 0 ) VTHSTI = ( 0 ) VDSTI = ( 0 ) MUESTI1 = ( 0 ) MUESTI2 = ( 0 ) MUESTI3 = ( 1 ) NSUBPSTI1 = ( 0 ) NSUBPSTI2 = ( 0 ) NSUBPSTI3 = ( 1 ) LPEXT = ( 1e-50 ) NPEXT = ( 5e+17 ) SCP21 = ( 0 ) SCP22 = ( 0 ) BS1 = ( 0 ) BS2 = ( 0.9 ) TPOLY = ( 2e-07 ) CGBO = ( 0 ) JS0 = ( 5e-07 ) JS0SW = ( 0 ) NJ = ( 1 ) NJSW = ( 1 ) XTI = ( 2 ) CJ = ( 0.0005 ) CJSW = ( 5e-10 ) CJSWG = ( 5e-10 ) MJ = ( 0.5 ) MJSW = ( 0.33 ) MJSWG = ( 0.33 ) PB = ( 1 ) PBSW = ( 1 ) PBSWG = ( 1 ) XTI2 = ( 0 ) CISB = ( 0 ) CVB = ( 0 ) CTEMP = ( 0 ) CISBK = ( 0 ) DIVX = ( 0 ) CLM1 = ( 0.05 ) CLM2 = ( 2 ) CLM3 = ( 1 ) CLM5 = ( 1 ) CLM6 = ( 0 ) VOVER = ( 0.3 ) VOVERP = ( 0.3 ) WFC = ( 0 ) NSUBCW = ( 0 ) NSUBCWP = ( 1 ) QME1 = ( 0 ) QME2 = ( 1 ) QME3 = ( 0 ) VOVERS = ( 0 ) VOVERSP = ( 0 ) GIDL1 = ( 2 ) GIDL2 = ( 3e+07 ) GIDL3 = ( 0.9 ) GIDL4 = ( 0 ) GIDL5 = ( 0.2 ) GLEAK1 = ( 50 ) GLEAK2 = ( 1e+07 ) GLEAK3 = ( 0.06 ) GLEAK4 = ( 4 ) GLEAK5 = ( 7500 ) GLEAK6 = ( 0.25 ) GLEAK7 = ( 1e-06 ) GLPART1 = ( 0.5 ) GLKSD1 = ( 1e-15 ) GLKSD2 = ( 1000 ) GLKSD3 = ( -1000 ) GLKB1 = ( 5e-16 ) GLKB2 = ( 1 ) GLKB3 = ( 0 ) EGIG = ( 0 ) IGTEMP2 = ( 0 ) IGTEMP3 = ( 0 ) VZADD0 = ( 0.01 ) PZADD0 = ( 0.005 ) NFTRP = ( 1e+10 ) NFALP = ( 1e-19 ) CIT = ( 0 ) FALPH = ( 1 ) KAPPA = ( 3.9 ) VDIFFJ = ( 0.0006 ) DLY1 = ( 1e-10 ) DLY2 = ( 0.7 ) DLY3 = ( 8e-07 ) TNOM = ( 27 ) OVSLP = ( 2.1e-07 ) OVMAG = ( 0.6 ) GBMIN = ( 1e-12 ) RBPB = ( 50 ) RBDB = ( 50 ) RBSB = ( 50 ) IBPC1 = ( 0 ) IBPC1L = ( 0 ) IBPC1LP = ( -1 ) IBPC2 = ( 0 ) MPHDFM = ( -0.3 ) PTL = ( 0 ) PTP = ( 3.5 ) PT2 = ( 0 ) PTLP = ( 1 ) GDL = ( 0 ) GDLP = ( 0 ) GDLD = ( 0 ) PT4 = ( 0 ) PT4P = ( 1 ) RDVG11 = ( 0 ) RDVG12 = ( 100 ) RTH0 = ( 0.1 ) CTH0 = ( 1e-07 ) POWRAT = ( 1 ) TCJBD = ( 0 ) TCJBS = ( 0 ) TCJBDSW = ( 0 ) TCJBSSW = ( 0 ) TCJBDSWG = ( 0 ) TCJBSSWG = ( 0 ) DLYOV = ( 0 ) QDFTVD = ( 1 ) XLDLD = ( 1e-06 ) RDVD = ( 0.07 ) RD20 = ( 0 ) RD21 = ( 1 ) RD22 = ( 0 ) RD22D = ( 0 ) RD23 = ( 0.005 ) RD24 = ( 0 ) RD25 = ( 0 ) RDVDL = ( 0 ) RDVDLP = ( 1 ) RDVDS = ( 0 ) RDVDSP = ( 1 ) RD23L = ( 0 ) RD23LP = ( 1 ) RD23S = ( 0 ) RD23SP = ( 1 ) RDS = ( 0 ) RDSP = ( 1 ) RDTEMP1 = ( 0 ) RDTEMP2 = ( 0 ) RDVDTEMP1 = ( 0 ) RDVDTEMP2 = ( 0 ) RTH0W = ( 0 ) RTH0WP = ( 1 ) CVDSOVER = ( 0 ) NINVD = ( 0 ) NINVDW = ( 0 ) NINVDWP = ( 1 ) NINVDT1 = ( 0 ) NINVDT2 = ( 0 ) RDVB = ( 0 ) RTH0NF = ( 0 ) RTHTEMP1 = ( 0 ) RTHTEMP2 = ( 0 ) PRATTEMP1 = ( 0 ) PRATTEMP2 = ( 0 ) RDVSUB = ( 1 ) RDVDSUB = ( 0.3 ) DDRIFT = ( 1e-06 ) VBISUB = ( 0.7 ) NSUBSUB = ( 1e+15 ) SHEMAX = ( 500 ) tmpk8ny_4pz/tests/hisimhv1/nmos/reference/0000755000175000017500000000000013546075722020764 5ustar carstencarstentmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_NF_RD23.standard0000644000175000017500000000041613546075722024524 0ustar carstencarstenV(d) I(d) 1.000000e+00 2.321105e-05 3.000000e+00 2.912882e-05 5.000000e+00 3.064735e-05 7.000000e+00 3.130121e-05 9.000000e+00 3.163468e-05 1.100000e+01 3.183359e-05 1.300000e+01 3.197181e-05 1.500000e+01 3.207400e-05 1.700000e+01 3.215264e-05 1.900000e+01 3.221502e-05 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/acFreq_coadov.standard0000644000175000017500000000712613546075722025250 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.01305527193774e-13 1.00861484902547e-13 7.13924829636063e-15 1258.925 1.01305552036192e-13 1.00861509839782e-13 7.13925010563916e-15 1584.893 1.01305495942048e-13 1.00861539155432e-13 7.13924890114405e-15 1995.262 1.01305530256262e-13 1.00861470494591e-13 7.13924857621001e-15 2511.886 1.01305514942316e-13 1.00861482911728e-13 7.13924684432774e-15 3162.278 1.01305496002288e-13 1.00861491740817e-13 7.13924829902002e-15 3981.072 1.01305506287693e-13 1.0086147162745e-13 7.13924739526491e-15 5011.872 1.01305534114561e-13 1.00861495725461e-13 7.13924687003171e-15 6309.573 1.01305521156015e-13 1.00861496740536e-13 7.13924819124921e-15 7943.282 1.01305527609834e-13 1.00861480445349e-13 7.13924733068448e-15 10000 1.01305527193774e-13 1.00861484902547e-13 7.13924829636063e-15 12589.25 1.01305552036192e-13 1.00861509839782e-13 7.13925010563916e-15 15848.93 1.01305495942048e-13 1.00861539155432e-13 7.13924890114405e-15 19952.62 1.01305530256262e-13 1.00861470494591e-13 7.13924857621001e-15 25118.86 1.01305514942316e-13 1.00861482911728e-13 7.13924684432774e-15 31622.78 1.01305496002288e-13 1.00861491740817e-13 7.13924829902003e-15 39810.72 1.01305506287693e-13 1.0086147162745e-13 7.13924739526491e-15 50118.72 1.01305534114561e-13 1.00861495725461e-13 7.13924687003171e-15 63095.73 1.01305521156015e-13 1.00861496740536e-13 7.13924819124921e-15 79432.82 1.01305527609834e-13 1.00861480445349e-13 7.13924733068448e-15 100000 1.01305527193774e-13 1.00861484902547e-13 7.13924829636063e-15 125892.5 1.01305552036192e-13 1.00861509839782e-13 7.13925010563916e-15 158489.3 1.01305495942048e-13 1.00861539155432e-13 7.13924890114405e-15 199526.2 1.01305530256262e-13 1.00861470494591e-13 7.13924857621001e-15 251188.6 1.01305514942316e-13 1.00861482911728e-13 7.13924684432774e-15 316227.8 1.01305496002288e-13 1.00861491740817e-13 7.13924829902002e-15 398107.2 1.01305506287693e-13 1.0086147162745e-13 7.13924739526491e-15 501187.2 1.01305534114561e-13 1.00861495725461e-13 7.13924687003171e-15 630957.3 1.01305521156015e-13 1.00861496740536e-13 7.13924819124921e-15 794328.2 1.01305527609834e-13 1.00861480445349e-13 7.13924733068448e-15 1000000 1.01305527193774e-13 1.00861484902547e-13 7.13924829636063e-15 1258925 1.01305552036192e-13 1.00861509839782e-13 7.13925010563915e-15 1584893 1.01305495942048e-13 1.00861539155432e-13 7.13924890114405e-15 1995262 1.01305530256262e-13 1.00861470494591e-13 7.13924857621001e-15 2511886 1.01305514942316e-13 1.00861482911728e-13 7.13924684432774e-15 3162278 1.01305496002288e-13 1.0086144141161e-13 7.13924829902002e-15 3981072 1.01305506287693e-13 1.0086147162745e-13 7.13924739526491e-15 5011872 1.01305534114561e-13 1.00861495725461e-13 7.13924687003171e-15 6309573 1.01305521156015e-13 1.00861471516176e-13 7.13924819124921e-15 7943282 1.01305507573413e-13 1.00861480445349e-13 7.13924733068448e-15 10000000 1.01305511278279e-13 1.00861468987053e-13 7.1392467048112e-15 12589250 1.01305539394062e-13 1.00861484555521e-13 7.13924757721303e-15 15848930 1.01305495942048e-13 1.0086143873544e-13 7.13924488434435e-15 19952620 1.01305450489824e-13 1.00861470494591e-13 7.13924299255933e-15 25118860 1.01305451581582e-13 1.00861419550993e-13 7.13924050825424e-15 31622780 1.01305395343875e-13 1.00861340753197e-13 7.13923320025802e-15 39810720 1.01305306398136e-13 1.00861231759982e-13 7.13922340851816e-15 50118720 1.0130521655868e-13 1.00861146413992e-13 7.13921193888475e-15 63095730 1.01305067117529e-13 1.00860916580248e-13 7.13919269765641e-15 79432820 1.01304786262253e-13 1.00860598842821e-13 7.13915917043162e-15 100000000 1.013043335317e-13 1.00860084339048e-13 7.13910664846128e-15 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_COTEMP2.standard0000644000175000017500000000041613546075722024540 0ustar carstencarstenV(d) I(d) 1.000000e+00 2.079133e-03 3.000000e+00 5.804625e-03 5.000000e+00 9.029773e-03 7.000000e+00 1.181419e-02 9.000000e+00 1.418913e-02 1.100000e+01 1.615116e-02 1.300000e+01 1.764650e-02 1.500000e+01 1.857754e-02 1.700000e+01 1.894277e-02 1.900000e+01 1.899732e-02 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/acVd_corsrd1.standard0000644000175000017500000000544113546075722025024 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 1 -2.035623e-06 3.521348e-04 4.4845652142156e-13 2.0094405440648e-12 2 -2.375169e-06 3.432913e-04 4.74186028387936e-13 1.97443753458758e-12 3 -1.034401e-07 3.320039e-04 4.99999035376921e-13 1.9324885232297e-12 4 6.400735e-06 3.162612e-04 5.26053242431211e-13 1.87743350832331e-12 5 2.002517e-05 2.930459e-04 5.5195704944478e-13 1.79794648680186e-12 6 4.603392e-05 2.572712e-04 5.75900255927507e-13 1.66967645207219e-12 7 9.428761e-05 1.998002e-04 5.91476660144887e-13 1.4298823871469e-12 8 1.816076e-04 1.057624e-04 5.73180855191218e-13 9.10528346529523e-13 9 2.821196e-04 5.821502e-06 5.00225635438274e-13 2.93516879470976e-13 10 2.881964e-04 1.378355e-07 4.85463931441478e-13 2.03188555014188e-13 11 2.882331e-04 1.117077e-07 4.62826825312382e-13 5.77500156360687e-14 12 2.882617e-04 9.321049e-08 4.59834124502096e-13 3.83818603920562e-14 13 2.882841e-04 7.991394e-08 4.58754524209789e-13 3.12270584548623e-14 14 2.883019e-04 7.027093e-08 4.58163224049692e-13 2.72181273694268e-14 15 2.883164e-04 6.311701e-08 4.57781523946345e-13 2.4568586652052e-14 16 2.883284e-04 5.765762e-08 4.57512023873377e-13 2.2651136132894e-14 17 2.883386e-04 5.337124e-08 4.57310823818901e-13 2.11809257348281e-14 18 2.883475e-04 4.991655e-08 4.57154423776555e-13 2.00074654171086e-14 19 2.883554e-04 4.706715e-08 4.57029523742738e-13 1.90427351559036e-14 20 2.883625e-04 4.466970e-08 4.56927423715094e-13 1.82314149362351e-14 1 -6.475259e-07 3.362076e-04 4.75047028621056e-13 1.97393653445193e-12 2 7.905785e-07 3.249999e-04 5.01980435913393e-13 1.93329652344847e-12 3 5.274328e-06 3.110338e-04 5.29056043244232e-13 1.88422951016336e-12 4 1.439298e-05 2.923826e-04 5.56429650655756e-13 1.82003949278363e-12 5 3.074975e-05 2.663998e-04 5.83698158038823e-13 1.72891946811249e-12 6 5.866208e-05 2.290041e-04 6.09196664942655e-13 1.58654842956491e-12 7 1.054923e-04 1.734288e-04 6.27474169891369e-13 1.33309436094112e-12 8 1.811703e-04 9.126493e-05 6.17687567241604e-13 8.42126328009378e-13 9 2.600553e-04 1.193476e-05 5.65291553055155e-13 3.27484888667963e-13 10 2.726276e-04 1.344734e-07 5.41725946674664e-13 1.84555449969193e-13 11 2.726622e-04 1.096252e-07 5.2302614161161e-13 5.59183551401387e-14 12 2.726887e-04 9.234828e-08 5.20432740909436e-13 3.79098102642466e-14 13 2.727099e-04 7.965911e-08 5.19461040646344e-13 3.10027583941321e-14 14 2.727271e-04 7.025090e-08 5.18922040500407e-13 2.7086167333698e-14 15 2.727412e-04 6.315425e-08 5.18571740405562e-13 2.4481906628583e-14 16 2.727530e-04 5.767869e-08 5.18323340338306e-13 2.25902761164158e-14 17 2.727631e-04 5.335132e-08 5.18137240287919e-13 2.11362757227389e-14 18 2.727719e-04 4.985178e-08 5.17992340248686e-13 1.99736954079652e-14 19 2.727797e-04 4.696177e-08 5.17876240217252e-13 1.90166551488424e-14 20 2.727868e-04 4.453038e-08 5.17781340191557e-13 1.82109649306982e-14 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/acVd_corg.standard0000644000175000017500000000545013546075722024401 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 1 -3.719456e-05 2.001961e-03 8.45636728959834e-13 3.99201008085415e-13 2 -6.344656e-05 1.860782e-03 8.75348937004544e-13 3.7519170158479e-13 3 -7.958397e-05 1.731449e-03 9.0243354433782e-13 3.53446695697235e-13 4 -8.606804e-05 1.611350e-03 9.27292851068586e-13 3.33807390379808e-13 5 -8.298677e-05 1.498601e-03 9.5025825728657e-13 3.16047085571127e-13 6 -6.996785e-05 1.391540e-03 9.71592063062791e-13 2.99908281201476e-13 7 -4.601580e-05 1.288476e-03 9.91469168444604e-13 2.8510997719477e-13 8 -9.252445e-06 1.187503e-03 1.00994227344628e-12 2.71345773468052e-13 9 4.346999e-05 1.086328e-03 1.02689727803692e-12 2.58286669932243e-13 10 1.170972e-04 9.821022e-04 1.04200528212748e-12 2.45599066497019e-13 11 2.189517e-04 8.713132e-04 1.05472728557202e-12 2.33003863086813e-13 12 3.589122e-04 7.499949e-04 1.06446428820835e-12 2.20415659678502e-13 13 5.478103e-04 6.148481e-04 1.07101828998288e-12 2.08193756369368e-13 14 7.911893e-04 4.662964e-04 1.07537829116336e-12 1.97387853443623e-13 15 1.076429e-03 3.135070e-04 1.07989629238663e-12 1.89393151279022e-13 16 1.362132e-03 1.764524e-04 1.08539729387605e-12 1.84089949843157e-13 17 1.595043e-03 7.550012e-05 1.08167529286831e-12 1.75696347570553e-13 18 1.743551e-03 1.708521e-05 9.58509459520619e-13 1.12700930514269e-13 19 1.750185e-03 1.476975e-05 8.13299020204259e-13 4.21181714036787e-14 20 1.755474e-03 1.303604e-05 7.91139314204422e-13 3.10630084104451e-14 1 -1.577566e-05 1.808247e-03 8.1506402068214e-13 4.2915751619627e-13 2 -2.165610e-05 1.678742e-03 8.46560829210039e-13 4.05636709827909e-13 3 -1.802667e-05 1.559219e-03 8.75797737126059e-13 3.84093503994992e-13 4 -4.810949e-06 1.446903e-03 9.03062644508152e-13 3.64389298659993e-13 5 1.858540e-05 1.339693e-03 9.28580851417317e-13 3.46275393755574e-13 6 5.347203e-05 1.235550e-03 9.52487557890163e-13 3.29417489191223e-13 7 1.022151e-04 1.132162e-03 9.74761563920947e-13 3.13384184850136e-13 8 1.687494e-04 1.026660e-03 9.95115869431964e-13 2.9763498058597e-13 9 2.592313e-04 9.154084e-04 1.01286927423878e-12 2.81544776229477e-13 10 3.825214e-04 7.940424e-04 1.02689327803584e-12 2.6453967162527e-13 11 5.493403e-04 6.583689e-04 1.03588928047154e-12 2.46462866730897e-13 12 7.672824e-04 5.073296e-04 1.03935828141079e-12 2.28194061784538e-13 13 1.028630e-03 3.486552e-04 1.03889328128489e-12 2.11892057370699e-13 14 1.297403e-03 2.026290e-04 1.03698128076721e-12 1.99134353916495e-13 15 1.519646e-03 9.327865e-05 1.02903727861633e-12 1.85833950315353e-13 16 1.667050e-03 2.763522e-05 9.56265358913019e-13 1.3619163687448e-13 17 1.711568e-03 9.398962e-06 8.0858031892665e-13 4.68300426794384e-14 18 1.715209e-03 8.197387e-06 7.86562312965178e-13 3.31069289638455e-14 19 1.718227e-03 7.265461e-06 7.77757310581186e-13 2.7443007430314e-14 20 1.720863e-03 6.494054e-06 7.72797709238352e-13 2.41515565391393e-14 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/acVg_QOVADD.standard0000644000175000017500000000263013546075722024425 0ustar carstencarstenV(g) g(d,g) g(d,d) c(g,s) c(g,d) 1 5.446801e-04 1.180949e-07 6.28108870063217e-13 6.91798187307378e-14 2 9.331515e-04 5.920407e-04 8.16977221200148e-13 3.865825046689e-13 3 3.742364e-04 1.472331e-03 8.55626831664698e-13 4.30766216631833e-13 4 1.706854e-04 1.811299e-03 8.66072534492918e-13 4.05990009923567e-13 5 7.627386e-05 1.963189e-03 8.693396353775e-13 3.92185306185883e-13 6 2.599031e-05 2.030170e-03 8.68297835095428e-13 3.86645204685876e-13 7 -2.919041e-06 2.052387e-03 8.64562234083997e-13 3.86187804562033e-13 8 -2.024159e-05 2.048962e-03 8.5914493261724e-13 3.88846705281942e-13 9 -3.079768e-05 2.030164e-03 8.52694930870873e-13 3.93431306523243e-13 10 -3.719456e-05 2.001961e-03 8.45636728959834e-13 3.99201008085415e-13 1 4.962997e-04 1.591808e-07 6.29499270439674e-13 7.05029090889703e-14 2 6.481446e-04 4.917116e-04 7.60354305869246e-13 4.02106208872011e-13 3 3.364367e-04 1.132855e-03 7.90741514096715e-13 4.68807326931629e-13 4 1.878495e-04 1.453793e-03 8.0700401849986e-13 4.5369152283896e-13 5 1.068814e-04 1.629628e-03 8.16394421042352e-13 4.39748819063912e-13 6 5.836875e-05 1.728594e-03 8.21005522290828e-13 4.31124416728817e-13 7 2.754836e-05 1.782298e-03 8.22306622643106e-13 4.26822615564086e-13 8 7.237558e-06 1.807550e-03 8.21316222374951e-13 4.25633615242159e-13 9 -6.448065e-06 1.814162e-03 8.18738321676973e-13 4.26632115512507e-13 10 -1.577566e-05 1.808247e-03 8.1506402068214e-13 4.2915751619627e-13 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_rs2m.standard0000644000175000017500000001415213546075722024354 0ustar carstencarstenV(d) I(d) 1.000000e+00 5.329576e-12 2.000000e+00 5.332748e-12 3.000000e+00 5.334753e-12 4.000000e+00 5.336915e-12 5.000000e+00 5.338940e-12 6.000000e+00 5.340867e-12 7.000000e+00 5.342719e-12 8.000000e+00 5.344512e-12 9.000000e+00 5.346257e-12 1.000000e+01 5.347963e-12 1.100000e+01 5.349633e-12 1.200000e+01 5.351274e-12 1.300000e+01 5.352887e-12 1.400000e+01 5.354478e-12 1.500000e+01 5.356050e-12 1.600000e+01 5.357602e-12 1.700000e+01 5.359138e-12 1.800000e+01 5.360660e-12 1.900000e+01 5.362166e-12 2.000000e+01 5.363656e-12 1.000000e+00 2.024423e-06 2.000000e+00 2.025088e-06 3.000000e+00 2.025595e-06 4.000000e+00 2.026021e-06 5.000000e+00 2.026395e-06 6.000000e+00 2.026734e-06 7.000000e+00 2.027045e-06 8.000000e+00 2.027335e-06 9.000000e+00 2.027606e-06 1.000000e+01 2.027863e-06 1.100000e+01 2.028108e-06 1.200000e+01 2.028342e-06 1.300000e+01 2.028566e-06 1.400000e+01 2.028781e-06 1.500000e+01 2.028989e-06 1.600000e+01 2.029190e-06 1.700000e+01 2.029385e-06 1.800000e+01 2.029575e-06 1.900000e+01 2.029759e-06 2.000000e+01 2.029938e-06 1.000000e+00 3.060424e-04 2.000000e+00 5.193784e-04 3.000000e+00 5.334174e-04 4.000000e+00 5.335916e-04 5.000000e+00 5.337028e-04 6.000000e+00 5.337872e-04 7.000000e+00 5.338571e-04 8.000000e+00 5.339177e-04 9.000000e+00 5.339720e-04 1.000000e+01 5.340215e-04 1.100000e+01 5.340673e-04 1.200000e+01 5.341102e-04 1.300000e+01 5.341505e-04 1.400000e+01 5.341889e-04 1.500000e+01 5.342254e-04 1.600000e+01 5.342604e-04 1.700000e+01 5.342940e-04 1.800000e+01 5.343263e-04 1.900000e+01 5.343576e-04 2.000000e+01 5.343879e-04 1.000000e+00 3.826538e-04 2.000000e+00 7.568875e-04 3.000000e+00 1.122313e-03 4.000000e+00 1.478312e-03 5.000000e+00 1.823939e-03 6.000000e+00 2.157718e-03 7.000000e+00 2.477227e-03 8.000000e+00 2.778111e-03 9.000000e+00 3.051405e-03 1.000000e+01 3.275158e-03 1.100000e+01 3.391010e-03 1.200000e+01 3.398280e-03 1.300000e+01 3.401620e-03 1.400000e+01 3.404045e-03 1.500000e+01 3.405893e-03 1.600000e+01 3.407355e-03 1.700000e+01 3.408545e-03 1.800000e+01 3.409537e-03 1.900000e+01 3.410380e-03 2.000000e+01 3.411109e-03 1.000000e+00 1.673900e-15 2.000000e+00 2.674293e-15 3.000000e+00 3.673711e-15 4.000000e+00 4.674212e-15 5.000000e+00 5.674714e-15 6.000000e+00 6.674782e-15 7.000000e+00 7.674417e-15 8.000000e+00 8.675352e-15 9.000000e+00 9.675420e-15 1.000000e+01 1.067549e-14 1.100000e+01 1.167469e-14 1.200000e+01 1.267476e-14 1.300000e+01 1.367483e-14 1.400000e+01 1.467403e-14 1.500000e+01 1.567496e-14 1.600000e+01 1.667676e-14 1.700000e+01 1.767683e-14 1.800000e+01 1.867430e-14 1.900000e+01 1.967523e-14 2.000000e+01 2.067443e-14 1.000000e+00 8.417677e-08 2.000000e+00 8.420514e-08 3.000000e+00 8.422687e-08 4.000000e+00 8.424519e-08 5.000000e+00 8.426133e-08 6.000000e+00 8.427592e-08 7.000000e+00 8.428935e-08 8.000000e+00 8.430184e-08 9.000000e+00 8.431358e-08 1.000000e+01 8.432468e-08 1.100000e+01 8.433524e-08 1.200000e+01 8.434533e-08 1.300000e+01 8.435501e-08 1.400000e+01 8.436433e-08 1.500000e+01 8.437332e-08 1.600000e+01 8.438202e-08 1.700000e+01 8.439044e-08 1.800000e+01 8.439863e-08 1.900000e+01 8.440659e-08 2.000000e+01 8.441435e-08 1.000000e+00 3.379213e-04 2.000000e+00 6.017288e-04 3.000000e+00 6.402406e-04 4.000000e+00 6.405133e-04 5.000000e+00 6.406736e-04 6.000000e+00 6.407896e-04 7.000000e+00 6.408829e-04 8.000000e+00 6.409624e-04 9.000000e+00 6.410326e-04 1.000000e+01 6.410960e-04 1.100000e+01 6.411543e-04 1.200000e+01 6.412085e-04 1.300000e+01 6.412594e-04 1.400000e+01 6.413075e-04 1.500000e+01 6.413532e-04 1.600000e+01 6.413968e-04 1.700000e+01 6.414387e-04 1.800000e+01 6.414789e-04 1.900000e+01 6.415178e-04 2.000000e+01 6.415553e-04 1.000000e+00 3.994037e-04 2.000000e+00 7.913324e-04 3.000000e+00 1.175614e-03 4.000000e+00 1.551956e-03 5.000000e+00 1.919912e-03 6.000000e+00 2.278810e-03 7.000000e+00 2.627629e-03 8.000000e+00 2.964743e-03 9.000000e+00 3.287377e-03 1.000000e+01 3.590245e-03 1.100000e+01 3.861588e-03 1.200000e+01 4.069294e-03 1.300000e+01 4.133328e-03 1.400000e+01 4.140747e-03 1.500000e+01 4.145908e-03 1.600000e+01 4.149715e-03 1.700000e+01 4.152645e-03 1.800000e+01 4.154975e-03 1.900000e+01 4.156880e-03 2.000000e+01 4.158470e-03 1.000000e+00 1.520227e-08 2.000000e+00 1.520739e-08 3.000000e+00 1.521132e-08 4.000000e+00 1.521464e-08 5.000000e+00 1.521756e-08 6.000000e+00 1.522019e-08 7.000000e+00 1.522262e-08 8.000000e+00 1.522488e-08 9.000000e+00 1.522701e-08 1.000000e+01 1.522901e-08 1.100000e+01 1.523093e-08 1.200000e+01 1.523275e-08 1.300000e+01 1.523450e-08 1.400000e+01 1.523619e-08 1.500000e+01 1.523781e-08 1.600000e+01 1.523939e-08 1.700000e+01 1.524091e-08 1.800000e+01 1.524239e-08 1.900000e+01 1.524383e-08 2.000000e+01 1.524524e-08 1.000000e+00 1.267626e-05 2.000000e+00 1.268020e-05 3.000000e+00 1.268313e-05 4.000000e+00 1.268557e-05 5.000000e+00 1.268771e-05 6.000000e+00 1.268964e-05 7.000000e+00 1.269141e-05 8.000000e+00 1.269305e-05 9.000000e+00 1.269460e-05 1.000000e+01 1.269605e-05 1.100000e+01 1.269744e-05 1.200000e+01 1.269876e-05 1.300000e+01 1.270003e-05 1.400000e+01 1.270125e-05 1.500000e+01 1.270242e-05 1.600000e+01 1.270356e-05 1.700000e+01 1.270466e-05 1.800000e+01 1.270573e-05 1.900000e+01 1.270677e-05 2.000000e+01 1.270778e-05 1.000000e+00 2.656099e-04 2.000000e+00 4.310480e-04 3.000000e+00 4.384524e-04 4.000000e+00 4.385684e-04 5.000000e+00 4.386470e-04 6.000000e+00 4.387086e-04 7.000000e+00 4.387607e-04 8.000000e+00 4.388065e-04 9.000000e+00 4.388478e-04 1.000000e+01 4.388858e-04 1.100000e+01 4.389211e-04 1.200000e+01 4.389542e-04 1.300000e+01 4.389856e-04 1.400000e+01 4.390153e-04 1.500000e+01 4.390438e-04 1.600000e+01 4.390711e-04 1.700000e+01 4.390974e-04 1.800000e+01 4.391227e-04 1.900000e+01 4.391472e-04 2.000000e+01 4.391710e-04 1.000000e+00 3.554938e-04 2.000000e+00 7.007589e-04 3.000000e+00 1.034943e-03 4.000000e+00 1.356670e-03 5.000000e+00 1.663715e-03 6.000000e+00 1.952255e-03 7.000000e+00 2.214940e-03 8.000000e+00 2.435416e-03 9.000000e+00 2.574834e-03 1.000000e+01 2.599716e-03 1.100000e+01 2.601496e-03 1.200000e+01 2.602779e-03 1.300000e+01 2.603755e-03 1.400000e+01 2.604527e-03 1.500000e+01 2.605158e-03 1.600000e+01 2.605687e-03 1.700000e+01 2.606139e-03 1.800000e+01 2.606532e-03 1.900000e+01 2.606879e-03 2.000000e+01 2.607190e-03 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_coisti.standard0000644000175000017500000001112213546075722024755 0ustar carstencarstenV(d) I(d) 1.000000e+00 1.288484e-03 2.000000e+00 2.349614e-03 3.000000e+00 3.138094e-03 4.000000e+00 3.444499e-03 5.000000e+00 3.483143e-03 6.000000e+00 3.493871e-03 7.000000e+00 3.500365e-03 8.000000e+00 3.505233e-03 9.000000e+00 3.509185e-03 1.000000e+01 3.512544e-03 1.100000e+01 3.515490e-03 1.200000e+01 3.518129e-03 1.300000e+01 3.520534e-03 1.400000e+01 3.522751e-03 1.500000e+01 3.524817e-03 1.600000e+01 3.526757e-03 1.700000e+01 3.528590e-03 1.800000e+01 3.530332e-03 1.900000e+01 3.531994e-03 2.000000e+01 3.533586e-03 1.000000e+00 1.447814e-03 2.000000e+00 2.732452e-03 3.000000e+00 3.876897e-03 4.000000e+00 4.899993e-03 5.000000e+00 5.817167e-03 6.000000e+00 6.641004e-03 7.000000e+00 7.381662e-03 8.000000e+00 8.047109e-03 9.000000e+00 8.643163e-03 1.000000e+01 9.173227e-03 1.100000e+01 9.637530e-03 1.200000e+01 1.003158e-02 1.300000e+01 1.034383e-02 1.400000e+01 1.055521e-02 1.500000e+01 1.066539e-02 1.600000e+01 1.074093e-02 1.700000e+01 1.079930e-02 1.800000e+01 1.084606e-02 1.900000e+01 1.088482e-02 2.000000e+01 1.091772e-02 1.000000e+00 1.433444e-03 2.000000e+00 2.718675e-03 3.000000e+00 3.877305e-03 4.000000e+00 4.926946e-03 5.000000e+00 5.882100e-03 6.000000e+00 6.754820e-03 7.000000e+00 7.555196e-03 8.000000e+00 8.291745e-03 9.000000e+00 8.971697e-03 1.000000e+01 9.601232e-03 1.100000e+01 1.018566e-02 1.200000e+01 1.072957e-02 1.300000e+01 1.123695e-02 1.400000e+01 1.171127e-02 1.500000e+01 1.215558e-02 1.600000e+01 1.257255e-02 1.700000e+01 1.296455e-02 1.800000e+01 1.333367e-02 1.900000e+01 1.368178e-02 2.000000e+01 1.401054e-02 1.000000e+00 1.394454e-03 2.000000e+00 2.567046e-03 3.000000e+00 3.498897e-03 4.000000e+00 4.055387e-03 5.000000e+00 4.142007e-03 6.000000e+00 4.163506e-03 7.000000e+00 4.174639e-03 8.000000e+00 4.182412e-03 9.000000e+00 4.188415e-03 1.000000e+01 4.193323e-03 1.100000e+01 4.197494e-03 1.200000e+01 4.201138e-03 1.300000e+01 4.204388e-03 1.400000e+01 4.207334e-03 1.500000e+01 4.210038e-03 1.600000e+01 4.212544e-03 1.700000e+01 4.214887e-03 1.800000e+01 4.217091e-03 1.900000e+01 4.219177e-03 2.000000e+01 4.221160e-03 1.000000e+00 1.512512e-03 2.000000e+00 2.853163e-03 3.000000e+00 4.047150e-03 4.000000e+00 5.115057e-03 5.000000e+00 6.073755e-03 6.000000e+00 6.937107e-03 7.000000e+00 7.716521e-03 8.000000e+00 8.421364e-03 9.000000e+00 9.059244e-03 1.000000e+01 9.636180e-03 1.100000e+01 1.015662e-02 1.200000e+01 1.062328e-02 1.300000e+01 1.103667e-02 1.400000e+01 1.139424e-02 1.500000e+01 1.168919e-02 1.600000e+01 1.190991e-02 1.700000e+01 1.204840e-02 1.800000e+01 1.214906e-02 1.900000e+01 1.223176e-02 2.000000e+01 1.230075e-02 1.000000e+00 1.468296e-03 2.000000e+00 2.782438e-03 3.000000e+00 3.965237e-03 4.000000e+00 5.035234e-03 5.000000e+00 6.007656e-03 6.000000e+00 6.895120e-03 7.000000e+00 7.708166e-03 8.000000e+00 8.455668e-03 9.000000e+00 9.145146e-03 1.000000e+01 9.783014e-03 1.100000e+01 1.037477e-02 1.200000e+01 1.092518e-02 1.300000e+01 1.143833e-02 1.400000e+01 1.191783e-02 1.500000e+01 1.236681e-02 1.600000e+01 1.278803e-02 1.700000e+01 1.318392e-02 1.800000e+01 1.355664e-02 1.900000e+01 1.390810e-02 2.000000e+01 1.424000e-02 1.000000e+00 1.141819e-03 2.000000e+00 2.052322e-03 3.000000e+00 2.655293e-03 4.000000e+00 2.801429e-03 5.000000e+00 2.819232e-03 6.000000e+00 2.825129e-03 7.000000e+00 2.829057e-03 8.000000e+00 2.832169e-03 9.000000e+00 2.834800e-03 1.000000e+01 2.837108e-03 1.100000e+01 2.839182e-03 1.200000e+01 2.841076e-03 1.300000e+01 2.842830e-03 1.400000e+01 2.844469e-03 1.500000e+01 2.846013e-03 1.600000e+01 2.847475e-03 1.700000e+01 2.848869e-03 1.800000e+01 2.850202e-03 1.900000e+01 2.851482e-03 2.000000e+01 2.852714e-03 1.000000e+00 1.343679e-03 2.000000e+00 2.536251e-03 3.000000e+00 3.597442e-03 4.000000e+00 4.543309e-03 5.000000e+00 5.386723e-03 6.000000e+00 6.137608e-03 7.000000e+00 6.802885e-03 8.000000e+00 7.385865e-03 9.000000e+00 7.884714e-03 1.000000e+01 8.289424e-03 1.100000e+01 8.578680e-03 1.200000e+01 8.730734e-03 1.300000e+01 8.794960e-03 1.400000e+01 8.837414e-03 1.500000e+01 8.868123e-03 1.600000e+01 8.892041e-03 1.700000e+01 8.911622e-03 1.800000e+01 8.928155e-03 1.900000e+01 8.942405e-03 2.000000e+01 8.954876e-03 1.000000e+00 1.373111e-03 2.000000e+00 2.607723e-03 3.000000e+00 3.723556e-03 4.000000e+00 4.736732e-03 5.000000e+00 5.660586e-03 6.000000e+00 6.506243e-03 7.000000e+00 7.283057e-03 8.000000e+00 7.998948e-03 9.000000e+00 8.660666e-03 1.000000e+01 9.273995e-03 1.100000e+01 9.843918e-03 1.200000e+01 1.037475e-02 1.300000e+01 1.087025e-02 1.400000e+01 1.133369e-02 1.500000e+01 1.176796e-02 1.600000e+01 1.217558e-02 1.700000e+01 1.255880e-02 1.800000e+01 1.291958e-02 1.900000e+01 1.325970e-02 2.000000e+01 1.358072e-02 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_NF_RDS.standard0000644000175000017500000000041613546075722024502 0ustar carstencarstenV(d) I(d) 1.000000e+00 1.936901e-03 3.000000e+00 5.370127e-03 5.000000e+00 8.310972e-03 7.000000e+00 1.083999e-02 9.000000e+00 1.301241e-02 1.100000e+01 1.486146e-02 1.300000e+01 1.639589e-02 1.500000e+01 1.759343e-02 1.700000e+01 1.840155e-02 1.900000e+01 1.879527e-02 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_Ig1_vb0.standard0000644000175000017500000001112213546075722024652 0ustar carstencarstenV(g) I(d) 1.000000e+00 1.985791e-04 2.000000e+00 1.905495e-03 3.000000e+00 2.995490e-03 4.000000e+00 3.221923e-03 5.000000e+00 3.308489e-03 6.000000e+00 3.342406e-03 7.000000e+00 3.350467e-03 8.000000e+00 3.343975e-03 9.000000e+00 3.328604e-03 1.000000e+01 3.307535e-03 1.100000e+01 3.282699e-03 1.200000e+01 3.255332e-03 1.300000e+01 3.226266e-03 1.400000e+01 3.196076e-03 1.500000e+01 3.165171e-03 1.600000e+01 3.133849e-03 1.700000e+01 3.102328e-03 1.800000e+01 3.070774e-03 1.900000e+01 3.039310e-03 2.000000e+01 3.008029e-03 1.000000e+00 1.993696e-04 2.000000e+00 1.918195e-03 3.000000e+00 4.595441e-03 4.000000e+00 5.551464e-03 5.000000e+00 5.790825e-03 6.000000e+00 5.883976e-03 7.000000e+00 5.916620e-03 8.000000e+00 5.917978e-03 9.000000e+00 5.901130e-03 1.000000e+01 5.872900e-03 1.100000e+01 5.837227e-03 1.200000e+01 5.796551e-03 1.300000e+01 5.752465e-03 1.400000e+01 5.706054e-03 1.500000e+01 5.658082e-03 1.600000e+01 5.609098e-03 1.700000e+01 5.559504e-03 1.800000e+01 5.509604e-03 1.900000e+01 5.459624e-03 2.000000e+01 5.409739e-03 1.000000e+00 2.004556e-04 2.000000e+00 1.927784e-03 3.000000e+00 4.676996e-03 4.000000e+00 7.593537e-03 5.000000e+00 9.099142e-03 6.000000e+00 9.431103e-03 7.000000e+00 9.557222e-03 8.000000e+00 9.602359e-03 9.000000e+00 9.605954e-03 1.000000e+01 9.585332e-03 1.100000e+01 9.549470e-03 1.200000e+01 9.503533e-03 1.300000e+01 9.450721e-03 1.400000e+01 9.393124e-03 1.500000e+01 9.332169e-03 1.600000e+01 9.268862e-03 1.700000e+01 9.203931e-03 1.800000e+01 9.137912e-03 1.900000e+01 9.071214e-03 2.000000e+01 9.004144e-03 1.000000e+00 1.555802e-04 2.000000e+00 2.266374e-03 3.000000e+00 3.243131e-03 4.000000e+00 3.407560e-03 5.000000e+00 3.458892e-03 6.000000e+00 3.469311e-03 7.000000e+00 3.460312e-03 8.000000e+00 3.440752e-03 9.000000e+00 3.414987e-03 1.000000e+01 3.385424e-03 1.100000e+01 3.353497e-03 1.200000e+01 3.320112e-03 1.300000e+01 3.285868e-03 1.400000e+01 3.251173e-03 1.500000e+01 3.216311e-03 1.600000e+01 3.181485e-03 1.700000e+01 3.146841e-03 1.800000e+01 3.112484e-03 1.900000e+01 3.078492e-03 2.000000e+01 3.044920e-03 1.000000e+00 1.562223e-04 2.000000e+00 2.285952e-03 3.000000e+00 5.300935e-03 4.000000e+00 5.905785e-03 5.000000e+00 6.056768e-03 6.000000e+00 6.101078e-03 7.000000e+00 6.101263e-03 8.000000e+00 6.078996e-03 9.000000e+00 6.043970e-03 1.000000e+01 6.001214e-03 1.100000e+01 5.953607e-03 1.200000e+01 5.902920e-03 1.300000e+01 5.850296e-03 1.400000e+01 5.796506e-03 1.500000e+01 5.742084e-03 1.600000e+01 5.687411e-03 1.700000e+01 5.632759e-03 1.800000e+01 5.578329e-03 1.900000e+01 5.524271e-03 2.000000e+01 5.470694e-03 1.000000e+00 1.571120e-04 2.000000e+00 2.298375e-03 3.000000e+00 5.663006e-03 4.000000e+00 8.793192e-03 5.000000e+00 9.593453e-03 6.000000e+00 9.783670e-03 7.000000e+00 9.841325e-03 8.000000e+00 9.843124e-03 9.000000e+00 9.815938e-03 1.000000e+01 9.771962e-03 1.100000e+01 9.717594e-03 1.200000e+01 9.656536e-03 1.300000e+01 9.591077e-03 1.400000e+01 9.522713e-03 1.500000e+01 9.452458e-03 1.600000e+01 9.381021e-03 1.700000e+01 9.308913e-03 1.800000e+01 9.236508e-03 1.900000e+01 9.164082e-03 2.000000e+01 9.091845e-03 1.000000e+00 2.650470e-04 2.000000e+00 1.573396e-03 3.000000e+00 2.629240e-03 4.000000e+00 2.927808e-03 5.000000e+00 3.062055e-03 6.000000e+00 3.130052e-03 7.000000e+00 3.163917e-03 8.000000e+00 3.177778e-03 9.000000e+00 3.178945e-03 1.000000e+01 3.171625e-03 1.100000e+01 3.158422e-03 1.200000e+01 3.141043e-03 1.300000e+01 3.120653e-03 1.400000e+01 3.098073e-03 1.500000e+01 3.073901e-03 1.600000e+01 3.048577e-03 1.700000e+01 3.022436e-03 1.800000e+01 2.995731e-03 1.900000e+01 2.968659e-03 2.000000e+01 2.941376e-03 1.000000e+00 2.660431e-04 2.000000e+00 1.581964e-03 3.000000e+00 3.616453e-03 4.000000e+00 4.964386e-03 5.000000e+00 5.342245e-03 6.000000e+00 5.512473e-03 7.000000e+00 5.597273e-03 8.000000e+00 5.637182e-03 9.000000e+00 5.650376e-03 1.000000e+01 5.646408e-03 1.100000e+01 5.630844e-03 1.200000e+01 5.607166e-03 1.300000e+01 5.577675e-03 1.400000e+01 5.543953e-03 1.500000e+01 5.507129e-03 1.600000e+01 5.468023e-03 1.700000e+01 5.427250e-03 1.800000e+01 5.385276e-03 1.900000e+01 5.342459e-03 2.000000e+01 5.299080e-03 1.000000e+00 2.673907e-04 2.000000e+00 1.589278e-03 3.000000e+00 3.649857e-03 4.000000e+00 6.028447e-03 5.000000e+00 8.124130e-03 6.000000e+00 8.788602e-03 7.000000e+00 9.045584e-03 8.000000e+00 9.169542e-03 9.000000e+00 9.228187e-03 1.000000e+01 9.249059e-03 1.100000e+01 9.245998e-03 1.200000e+01 9.226853e-03 1.300000e+01 9.196460e-03 1.400000e+01 9.157973e-03 1.500000e+01 9.113550e-03 1.600000e+01 9.064714e-03 1.700000e+01 9.012578e-03 1.800000e+01 8.957969e-03 1.900000e+01 8.901515e-03 2.000000e+01 8.843703e-03 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_corbnet.standard0000644000175000017500000001112213546075722025117 0ustar carstencarstenV(d) I(d) 1.000000e+00 8.427493e-11 2.000000e+00 8.502166e-11 3.000000e+00 8.559899e-11 4.000000e+00 8.608885e-11 5.000000e+00 8.652282e-11 6.000000e+00 8.691710e-11 7.000000e+00 8.728132e-11 8.000000e+00 8.762174e-11 9.000000e+00 8.794271e-11 1.000000e+01 8.824740e-11 1.100000e+01 8.853821e-11 1.200000e+01 8.881699e-11 1.300000e+01 8.908523e-11 1.400000e+01 8.934411e-11 1.500000e+01 8.959463e-11 1.600000e+01 8.983760e-11 1.700000e+01 9.007374e-11 1.800000e+01 9.030364e-11 1.900000e+01 9.052780e-11 2.000000e+01 9.074668e-11 1.000000e+00 3.824582e-04 2.000000e+00 3.872716e-04 3.000000e+00 3.899717e-04 4.000000e+00 3.920482e-04 5.000000e+00 3.938115e-04 6.000000e+00 3.953758e-04 7.000000e+00 3.967985e-04 8.000000e+00 3.981135e-04 9.000000e+00 3.993430e-04 1.000000e+01 4.005023e-04 1.100000e+01 4.016026e-04 1.200000e+01 4.026526e-04 1.300000e+01 4.036587e-04 1.400000e+01 4.046264e-04 1.500000e+01 4.055600e-04 1.600000e+01 4.064629e-04 1.700000e+01 4.073382e-04 1.800000e+01 4.081884e-04 1.900000e+01 4.090156e-04 2.000000e+01 4.098218e-04 1.000000e+00 1.313690e-03 2.000000e+00 2.347157e-03 3.000000e+00 3.164447e-03 4.000000e+00 3.810876e-03 5.000000e+00 4.318091e-03 6.000000e+00 4.707608e-03 7.000000e+00 4.992312e-03 8.000000e+00 5.176031e-03 9.000000e+00 5.256913e-03 1.000000e+01 5.285761e-03 1.100000e+01 5.307974e-03 1.200000e+01 5.326141e-03 1.300000e+01 5.341379e-03 1.400000e+01 5.354412e-03 1.500000e+01 5.365753e-03 1.600000e+01 5.375774e-03 1.700000e+01 5.384749e-03 1.800000e+01 5.392880e-03 1.900000e+01 5.400322e-03 2.000000e+01 5.407191e-03 1.000000e+00 2.049879e-14 2.000000e+00 2.170616e-14 3.000000e+00 2.280467e-14 4.000000e+00 2.391837e-14 5.000000e+00 2.501905e-14 6.000000e+00 2.610932e-14 7.000000e+00 2.719353e-14 8.000000e+00 2.827079e-14 9.000000e+00 2.934458e-14 1.000000e+01 3.041838e-14 1.100000e+01 3.148350e-14 1.200000e+01 3.254862e-14 1.300000e+01 3.361027e-14 1.400000e+01 3.466845e-14 1.500000e+01 3.572490e-14 1.600000e+01 3.678134e-14 1.700000e+01 3.783605e-14 1.800000e+01 3.888730e-14 1.900000e+01 3.993854e-14 2.000000e+01 4.099325e-14 1.000000e+00 3.922065e-04 2.000000e+00 3.970399e-04 3.000000e+00 3.997849e-04 4.000000e+00 4.019062e-04 5.000000e+00 4.037124e-04 6.000000e+00 4.053174e-04 7.000000e+00 4.067788e-04 8.000000e+00 4.081306e-04 9.000000e+00 4.093951e-04 1.000000e+01 4.105879e-04 1.100000e+01 4.117205e-04 1.200000e+01 4.128014e-04 1.300000e+01 4.138375e-04 1.400000e+01 4.148341e-04 1.500000e+01 4.157957e-04 1.600000e+01 4.167259e-04 1.700000e+01 4.176277e-04 1.800000e+01 4.185036e-04 1.900000e+01 4.193560e-04 2.000000e+01 4.201868e-04 1.000000e+00 1.426564e-03 2.000000e+00 2.549029e-03 3.000000e+00 3.441418e-03 4.000000e+00 4.155033e-03 5.000000e+00 4.725668e-03 6.000000e+00 5.178750e-03 7.000000e+00 5.532618e-03 8.000000e+00 5.800272e-03 9.000000e+00 5.989773e-03 1.000000e+01 6.103805e-03 1.100000e+01 6.151794e-03 1.200000e+01 6.182322e-03 1.300000e+01 6.206745e-03 1.400000e+01 6.226910e-03 1.500000e+01 6.243895e-03 1.600000e+01 6.258437e-03 1.700000e+01 6.271069e-03 1.800000e+01 6.282187e-03 1.900000e+01 6.292084e-03 2.000000e+01 6.300985e-03 1.000000e+00 1.412627e-07 2.000000e+00 1.425121e-07 3.000000e+00 1.434774e-07 4.000000e+00 1.442961e-07 5.000000e+00 1.450211e-07 6.000000e+00 1.456797e-07 7.000000e+00 1.462878e-07 8.000000e+00 1.468562e-07 9.000000e+00 1.473919e-07 1.000000e+01 1.479004e-07 1.100000e+01 1.483856e-07 1.200000e+01 1.488507e-07 1.300000e+01 1.492981e-07 1.400000e+01 1.497299e-07 1.500000e+01 1.501476e-07 1.600000e+01 1.505527e-07 1.700000e+01 1.509464e-07 1.800000e+01 1.513296e-07 1.900000e+01 1.517032e-07 2.000000e+01 1.520680e-07 1.000000e+00 3.857960e-04 2.000000e+00 3.928454e-04 3.000000e+00 3.956170e-04 4.000000e+00 3.977213e-04 5.000000e+00 3.994967e-04 6.000000e+00 4.010658e-04 7.000000e+00 4.024894e-04 8.000000e+00 4.038030e-04 9.000000e+00 4.050296e-04 1.000000e+01 4.061850e-04 1.100000e+01 4.072808e-04 1.200000e+01 4.083257e-04 1.300000e+01 4.093265e-04 1.400000e+01 4.102887e-04 1.500000e+01 4.112165e-04 1.600000e+01 4.121136e-04 1.700000e+01 4.129830e-04 1.800000e+01 4.138273e-04 1.900000e+01 4.146486e-04 2.000000e+01 4.154488e-04 1.000000e+00 1.152181e-03 2.000000e+00 2.053654e-03 3.000000e+00 2.756607e-03 4.000000e+00 3.297830e-03 5.000000e+00 3.700826e-03 6.000000e+00 3.975984e-03 7.000000e+00 4.121625e-03 8.000000e+00 4.161127e-03 9.000000e+00 4.180754e-03 1.000000e+01 4.196570e-03 1.100000e+01 4.209784e-03 1.200000e+01 4.221087e-03 1.300000e+01 4.230955e-03 1.400000e+01 4.239725e-03 1.500000e+01 4.247638e-03 1.600000e+01 4.254868e-03 1.700000e+01 4.261545e-03 1.800000e+01 4.267766e-03 1.900000e+01 4.273603e-03 2.000000e+01 4.279116e-03 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_isub.standard0000644000175000017500000001605713546075722024441 0ustar carstencarstenV(d) I(d) I(b) 1.000000e+00 1.518719e-04 -1.012500e-15 2.000000e+00 1.761889e-04 -2.012500e-15 3.000000e+00 1.761972e-04 -3.012500e-15 4.000000e+00 1.762028e-04 -4.012500e-15 5.000000e+00 1.762072e-04 -5.012500e-15 6.000000e+00 1.762109e-04 -6.012500e-15 7.000000e+00 1.762141e-04 -7.012500e-15 8.000000e+00 1.762170e-04 -8.012500e-15 9.000000e+00 1.762197e-04 -9.012500e-15 1.000000e+01 1.762222e-04 -1.001250e-14 1.100000e+01 1.762245e-04 -1.101250e-14 1.200000e+01 1.762267e-04 -1.201263e-14 1.300000e+01 1.762288e-04 -1.301498e-14 1.400000e+01 1.762308e-04 -1.404502e-14 1.500000e+01 1.762328e-04 -1.532282e-14 1.600000e+01 1.762346e-04 -1.829188e-14 1.700000e+01 1.762364e-04 -3.047272e-14 1.800000e+01 1.762382e-04 -8.414281e-14 1.900000e+01 1.762399e-04 -2.968418e-13 2.000000e+01 1.762415e-04 -1.040571e-12 1.000000e+00 2.789950e-04 -1.012500e-15 2.000000e+00 4.975778e-04 -2.012500e-15 3.000000e+00 6.332986e-04 -3.012500e-15 4.000000e+00 6.722910e-04 -4.012500e-15 5.000000e+00 6.725799e-04 -5.012500e-15 6.000000e+00 6.725985e-04 -6.012500e-15 7.000000e+00 6.726136e-04 -7.012500e-15 8.000000e+00 6.726263e-04 -8.012500e-15 9.000000e+00 6.726373e-04 -9.012500e-15 1.000000e+01 6.726469e-04 -1.001250e-14 1.100000e+01 6.726556e-04 -1.101251e-14 1.200000e+01 6.726636e-04 -1.201280e-14 1.300000e+01 6.726709e-04 -1.301855e-14 1.400000e+01 6.726778e-04 -1.409502e-14 1.500000e+01 6.726842e-04 -1.582718e-14 1.600000e+01 6.726904e-04 -2.217324e-14 1.700000e+01 6.726962e-04 -5.431685e-14 1.800000e+01 6.727018e-04 -2.053307e-13 1.900000e+01 6.727072e-04 -8.211741e-13 2.000000e+01 6.727123e-04 -3.016794e-12 1.000000e+00 2.840616e-04 -1.012500e-15 2.000000e+00 5.552802e-04 -2.012500e-15 3.000000e+00 8.109610e-04 -3.012500e-15 4.000000e+00 1.045917e-03 -4.012500e-15 5.000000e+00 1.252147e-03 -5.012500e-15 6.000000e+00 1.418584e-03 -6.012500e-15 7.000000e+00 1.534375e-03 -7.012500e-15 8.000000e+00 1.598357e-03 -8.012500e-15 9.000000e+00 1.624099e-03 -9.012500e-15 1.000000e+01 1.629414e-03 -1.001250e-14 1.100000e+01 1.629450e-03 -1.101251e-14 1.200000e+01 1.629479e-03 -1.201273e-14 1.300000e+01 1.629505e-03 -1.301786e-14 1.400000e+01 1.629528e-03 -1.409298e-14 1.500000e+01 1.629549e-03 -1.587344e-14 1.600000e+01 1.629569e-03 -2.298167e-14 1.700000e+01 1.629586e-03 -6.174856e-14 1.800000e+01 1.629603e-03 -2.542890e-13 1.900000e+01 1.629618e-03 -1.076451e-12 2.000000e+01 1.629632e-03 -4.126705e-12 1.000000e+00 1.948196e-04 -1.000000e-15 2.000000e+00 2.210448e-04 -2.000000e-15 3.000000e+00 2.210555e-04 -3.000000e-15 4.000000e+00 2.210627e-04 -4.000000e-15 5.000000e+00 2.210683e-04 -5.000000e-15 6.000000e+00 2.210730e-04 -6.000000e-15 7.000000e+00 2.210771e-04 -7.000000e-15 8.000000e+00 2.210809e-04 -8.000000e-15 9.000000e+00 2.210843e-04 -9.000000e-15 1.000000e+01 2.210875e-04 -1.000000e-14 1.100000e+01 2.210904e-04 -1.100001e-14 1.200000e+01 2.210933e-04 -1.200018e-14 1.300000e+01 2.210960e-04 -1.300347e-14 1.400000e+01 2.210986e-04 -1.404478e-14 1.500000e+01 2.211010e-04 -1.542199e-14 1.600000e+01 2.211034e-04 -1.906807e-14 1.700000e+01 2.211057e-04 -3.496399e-14 1.800000e+01 2.211080e-04 -1.056275e-13 1.900000e+01 2.211101e-04 -3.849129e-13 2.000000e+01 2.211122e-04 -1.357146e-12 1.000000e+00 3.410644e-04 -1.000000e-15 2.000000e+00 6.137138e-04 -2.000000e-15 3.000000e+00 7.856298e-04 -3.000000e-15 4.000000e+00 8.332200e-04 -4.000000e-15 5.000000e+00 8.333090e-04 -5.000000e-15 6.000000e+00 8.333337e-04 -6.000000e-15 7.000000e+00 8.333537e-04 -7.000000e-15 8.000000e+00 8.333704e-04 -8.000000e-15 9.000000e+00 8.333847e-04 -9.000000e-15 1.000000e+01 8.333972e-04 -1.000000e-14 1.100000e+01 8.334085e-04 -1.100001e-14 1.200000e+01 8.334187e-04 -1.200036e-14 1.300000e+01 8.334282e-04 -1.300721e-14 1.400000e+01 8.334370e-04 -1.409836e-14 1.500000e+01 8.334453e-04 -1.597091e-14 1.600000e+01 8.334531e-04 -2.334288e-14 1.700000e+01 8.334605e-04 -6.147592e-14 1.800000e+01 8.334676e-04 -2.414285e-13 1.900000e+01 8.334745e-04 -9.763149e-13 2.000000e+01 8.334810e-04 -3.598569e-12 1.000000e+00 3.149909e-04 -1.000000e-15 2.000000e+00 6.183344e-04 -2.000000e-15 3.000000e+00 9.069055e-04 -3.000000e-15 4.000000e+00 1.174680e-03 -4.000000e-15 5.000000e+00 1.412239e-03 -5.000000e-15 6.000000e+00 1.606237e-03 -6.000000e-15 7.000000e+00 1.742836e-03 -7.000000e-15 8.000000e+00 1.818982e-03 -8.000000e-15 9.000000e+00 1.849601e-03 -9.000000e-15 1.000000e+01 1.855255e-03 -1.000000e-14 1.100000e+01 1.855296e-03 -1.100001e-14 1.200000e+01 1.855332e-03 -1.200023e-14 1.300000e+01 1.855363e-03 -1.300530e-14 1.400000e+01 1.855392e-03 -1.408042e-14 1.500000e+01 1.855417e-03 -1.586781e-14 1.600000e+01 1.855441e-03 -2.307822e-14 1.700000e+01 1.855462e-03 -6.274024e-14 1.800000e+01 1.855482e-03 -2.610142e-13 1.900000e+01 1.855501e-03 -1.112357e-12 2.000000e+01 1.855518e-03 -4.286400e-12 1.000000e+00 1.120775e-04 -1.619318e-11 2.000000e+00 1.358254e-04 -1.619418e-11 3.000000e+00 1.358325e-04 -1.619518e-11 4.000000e+00 1.358367e-04 -1.619618e-11 5.000000e+00 1.358400e-04 -1.619718e-11 6.000000e+00 1.358428e-04 -1.619818e-11 7.000000e+00 1.358452e-04 -1.619918e-11 8.000000e+00 1.358473e-04 -1.620018e-11 9.000000e+00 1.358493e-04 -1.620118e-11 1.000000e+01 1.358512e-04 -1.620218e-11 1.100000e+01 1.358529e-04 -1.620318e-11 1.200000e+01 1.358546e-04 -1.620418e-11 1.300000e+01 1.358562e-04 -1.620518e-11 1.400000e+01 1.358577e-04 -1.620620e-11 1.500000e+01 1.358591e-04 -1.620738e-11 1.600000e+01 1.358605e-04 -1.620967e-11 1.700000e+01 1.358619e-04 -1.621814e-11 1.800000e+01 1.358632e-04 -1.625491e-11 1.900000e+01 1.358644e-04 -1.640161e-11 2.000000e+01 1.358656e-04 -1.691976e-11 1.000000e+00 2.101604e-04 -1.619318e-11 2.000000e+00 3.718876e-04 -1.619418e-11 3.000000e+00 4.721462e-04 -1.619518e-11 4.000000e+00 5.040505e-04 -1.619618e-11 5.000000e+00 5.050335e-04 -1.619718e-11 6.000000e+00 5.050466e-04 -1.619818e-11 7.000000e+00 5.050574e-04 -1.619918e-11 8.000000e+00 5.050664e-04 -1.620018e-11 9.000000e+00 5.050742e-04 -1.620118e-11 1.000000e+01 5.050811e-04 -1.620218e-11 1.100000e+01 5.050874e-04 -1.620318e-11 1.200000e+01 5.050931e-04 -1.620418e-11 1.300000e+01 5.050984e-04 -1.620518e-11 1.400000e+01 5.051034e-04 -1.620624e-11 1.500000e+01 5.051081e-04 -1.620776e-11 1.600000e+01 5.051126e-04 -1.621263e-11 1.700000e+01 5.051168e-04 -1.623632e-11 1.800000e+01 5.051209e-04 -1.634740e-11 1.900000e+01 5.051248e-04 -1.680213e-11 2.000000e+01 5.051286e-04 -1.843029e-11 1.000000e+00 2.403973e-04 -1.619318e-11 2.000000e+00 4.671439e-04 -1.619418e-11 3.000000e+00 6.782375e-04 -1.619518e-11 4.000000e+00 8.697070e-04 -1.619618e-11 5.000000e+00 1.035498e-03 -1.619718e-11 6.000000e+00 1.167493e-03 -1.619818e-11 7.000000e+00 1.258338e-03 -1.619918e-11 8.000000e+00 1.308479e-03 -1.620018e-11 9.000000e+00 1.329123e-03 -1.620118e-11 1.000000e+01 1.334385e-03 -1.620218e-11 1.100000e+01 1.334550e-03 -1.620318e-11 1.200000e+01 1.334572e-03 -1.620418e-11 1.300000e+01 1.334591e-03 -1.620518e-11 1.400000e+01 1.334609e-03 -1.620625e-11 1.500000e+01 1.334624e-03 -1.620796e-11 1.600000e+01 1.334639e-03 -1.621445e-11 1.700000e+01 1.334652e-03 -1.624932e-11 1.800000e+01 1.334665e-03 -1.642162e-11 1.900000e+01 1.334677e-03 -1.715497e-11 2.000000e+01 1.334688e-03 -1.986815e-11 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_Ig1_vb2.standard0000644000175000017500000001112213546075722024654 0ustar carstencarstenV(g) I(d) 1.000000e+00 8.277973e-06 2.000000e+00 1.019759e-03 3.000000e+00 2.669177e-03 4.000000e+00 3.045926e-03 5.000000e+00 3.181211e-03 6.000000e+00 3.239139e-03 7.000000e+00 3.261559e-03 8.000000e+00 3.264717e-03 9.000000e+00 3.256364e-03 1.000000e+01 3.240699e-03 1.100000e+01 3.220203e-03 1.200000e+01 3.196441e-03 1.300000e+01 3.170444e-03 1.400000e+01 3.142923e-03 1.500000e+01 3.114376e-03 1.600000e+01 3.085165e-03 1.700000e+01 3.055555e-03 1.800000e+01 3.025745e-03 1.900000e+01 2.995886e-03 2.000000e+01 2.966091e-03 1.000000e+00 8.316599e-06 2.000000e+00 1.024554e-03 3.000000e+00 3.344144e-03 4.000000e+00 5.168148e-03 5.000000e+00 5.560160e-03 6.000000e+00 5.709322e-03 7.000000e+00 5.771401e-03 8.000000e+00 5.791093e-03 9.000000e+00 5.786917e-03 1.000000e+01 5.768091e-03 1.100000e+01 5.739766e-03 1.200000e+01 5.705059e-03 1.300000e+01 5.665971e-03 1.400000e+01 5.623845e-03 1.500000e+01 5.579615e-03 1.600000e+01 5.533949e-03 1.700000e+01 5.487336e-03 1.800000e+01 5.440139e-03 1.900000e+01 5.392634e-03 2.000000e+01 5.345029e-03 1.000000e+00 8.371307e-06 2.000000e+00 1.029885e-03 3.000000e+00 3.373023e-03 4.000000e+00 6.201529e-03 5.000000e+00 8.550239e-03 6.000000e+00 9.133880e-03 7.000000e+00 9.336276e-03 8.000000e+00 9.419813e-03 9.000000e+00 9.446901e-03 1.000000e+01 9.442337e-03 1.100000e+01 9.418292e-03 1.200000e+01 9.381523e-03 1.300000e+01 9.336111e-03 1.400000e+01 9.284674e-03 1.500000e+01 9.228971e-03 1.600000e+01 9.170230e-03 1.700000e+01 9.109331e-03 1.800000e+01 9.046922e-03 1.900000e+01 8.983486e-03 2.000000e+01 8.919395e-03 1.000000e+00 6.399773e-07 2.000000e+00 1.157321e-03 3.000000e+00 2.945478e-03 4.000000e+00 3.244574e-03 5.000000e+00 3.339006e-03 6.000000e+00 3.370681e-03 7.000000e+00 3.374490e-03 8.000000e+00 3.363629e-03 9.000000e+00 3.344267e-03 1.000000e+01 3.319690e-03 1.100000e+01 3.291813e-03 1.200000e+01 3.261825e-03 1.300000e+01 3.230499e-03 1.400000e+01 3.198360e-03 1.500000e+01 3.165772e-03 1.600000e+01 3.132993e-03 1.700000e+01 3.100210e-03 1.800000e+01 3.067561e-03 1.900000e+01 3.035144e-03 2.000000e+01 3.003036e-03 1.000000e+00 6.430230e-07 2.000000e+00 1.163017e-03 3.000000e+00 4.005798e-03 4.000000e+00 5.574744e-03 5.000000e+00 5.846419e-03 6.000000e+00 5.937607e-03 7.000000e+00 5.963043e-03 8.000000e+00 5.956807e-03 9.000000e+00 5.933050e-03 1.000000e+01 5.898785e-03 1.100000e+01 5.857904e-03 1.200000e+01 5.812748e-03 1.300000e+01 5.764805e-03 1.400000e+01 5.715064e-03 1.500000e+01 5.664209e-03 1.600000e+01 5.612720e-03 1.700000e+01 5.560945e-03 1.800000e+01 5.509139e-03 1.900000e+01 5.457492e-03 2.000000e+01 5.406145e-03 1.000000e+00 6.473524e-07 2.000000e+00 1.169176e-03 3.000000e+00 4.053144e-03 4.000000e+00 7.305558e-03 5.000000e+00 9.175690e-03 6.000000e+00 9.522790e-03 7.000000e+00 9.638728e-03 8.000000e+00 9.671755e-03 9.000000e+00 9.664350e-03 1.000000e+01 9.634238e-03 1.100000e+01 9.590281e-03 1.200000e+01 9.537437e-03 1.300000e+01 9.478706e-03 1.400000e+01 9.416011e-03 1.500000e+01 9.350643e-03 1.600000e+01 9.283494e-03 1.700000e+01 9.215204e-03 1.800000e+01 9.146238e-03 1.900000e+01 9.076942e-03 2.000000e+01 9.007577e-03 1.000000e+00 3.990444e-05 2.000000e+00 8.989226e-04 3.000000e+00 2.283549e-03 4.000000e+00 2.737109e-03 5.000000e+00 2.925146e-03 6.000000e+00 3.020275e-03 7.000000e+00 3.070458e-03 8.000000e+00 3.095249e-03 9.000000e+00 3.104304e-03 1.000000e+01 3.102996e-03 1.100000e+01 3.094570e-03 1.200000e+01 3.081114e-03 1.300000e+01 3.064031e-03 1.400000e+01 3.044298e-03 1.500000e+01 3.022619e-03 1.600000e+01 2.999510e-03 1.700000e+01 2.975360e-03 1.800000e+01 2.950462e-03 1.900000e+01 2.925045e-03 2.000000e+01 2.899286e-03 1.000000e+00 4.008269e-05 2.000000e+00 9.029680e-04 3.000000e+00 2.657556e-03 4.000000e+00 4.502427e-03 5.000000e+00 5.081802e-03 6.000000e+00 5.320959e-03 7.000000e+00 5.441216e-03 8.000000e+00 5.502859e-03 9.000000e+00 5.530844e-03 1.000000e+01 5.537685e-03 1.100000e+01 5.530441e-03 1.200000e+01 5.513427e-03 1.300000e+01 5.489442e-03 1.400000e+01 5.460384e-03 1.500000e+01 5.427590e-03 1.600000e+01 5.392024e-03 1.700000e+01 5.354404e-03 1.800000e+01 5.315269e-03 1.900000e+01 5.275033e-03 2.000000e+01 5.234018e-03 1.000000e+00 4.033278e-05 2.000000e+00 9.075286e-04 3.000000e+00 2.675274e-03 4.000000e+00 4.912510e-03 5.000000e+00 7.244708e-03 6.000000e+00 8.418932e-03 7.000000e+00 8.791683e-03 8.000000e+00 8.967464e-03 9.000000e+00 9.056175e-03 1.000000e+01 9.096909e-03 1.100000e+01 9.108081e-03 1.200000e+01 9.099737e-03 1.300000e+01 9.077897e-03 1.400000e+01 9.046410e-03 1.500000e+01 9.007866e-03 1.600000e+01 8.964076e-03 1.700000e+01 8.916344e-03 1.800000e+01 8.865635e-03 1.900000e+01 8.812678e-03 2.000000e+01 8.758030e-03 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_Ig1_vb1.standard0000644000175000017500000002746513546075722024674 0ustar carstencarstenV(g) I(d) I(g) I(s) I(b) 1.000000e+00 8.848587e-05 0.000000e+00 -8.848587e-05 -3.500000e-15 2.000000e+00 1.538878e-03 0.000000e+00 -1.538878e-03 -3.500000e-15 3.000000e+00 2.885873e-03 0.000000e+00 -2.885873e-03 -3.500000e-15 4.000000e+00 3.159342e-03 0.000000e+00 -3.159342e-03 -3.500000e-15 5.000000e+00 3.262378e-03 0.000000e+00 -3.262378e-03 -3.500000e-15 6.000000e+00 3.304638e-03 0.000000e+00 -3.304638e-03 -3.500000e-15 7.000000e+00 3.317765e-03 0.000000e+00 -3.317765e-03 -3.500000e-15 8.000000e+00 3.314714e-03 0.000000e+00 -3.314714e-03 -3.500000e-15 9.000000e+00 3.301865e-03 0.000000e+00 -3.301865e-03 -3.500000e-15 1.000000e+01 3.282750e-03 0.000000e+00 -3.282750e-03 -3.500000e-15 1.100000e+01 3.259492e-03 0.000000e+00 -3.259492e-03 -3.500000e-15 1.200000e+01 3.233443e-03 0.000000e+00 -3.233443e-03 -3.500000e-15 1.300000e+01 3.205504e-03 0.000000e+00 -3.205504e-03 -3.500000e-15 1.400000e+01 3.176296e-03 0.000000e+00 -3.176296e-03 -3.500000e-15 1.500000e+01 3.146262e-03 0.000000e+00 -3.146262e-03 -3.500000e-15 1.600000e+01 3.115722e-03 0.000000e+00 -3.115722e-03 -3.500000e-15 1.700000e+01 3.084911e-03 0.000000e+00 -3.084911e-03 -3.500000e-15 1.800000e+01 3.054005e-03 0.000000e+00 -3.054005e-03 -3.500000e-15 1.900000e+01 3.023139e-03 0.000000e+00 -3.023139e-03 -3.500000e-15 2.000000e+01 2.992412e-03 0.000000e+00 -2.992412e-03 -3.500000e-15 1.000000e+00 8.886497e-05 0.000000e+00 -8.886497e-05 -6.000000e-15 2.000000e+00 1.547414e-03 0.000000e+00 -1.547414e-03 -6.000000e-15 3.000000e+00 4.120343e-03 0.000000e+00 -4.120343e-03 -6.000000e-15 4.000000e+00 5.422130e-03 0.000000e+00 -5.422130e-03 -6.000000e-15 5.000000e+00 5.709200e-03 0.000000e+00 -5.709200e-03 -6.000000e-15 6.000000e+00 5.821161e-03 0.000000e+00 -5.821161e-03 -6.000000e-15 7.000000e+00 5.863956e-03 0.000000e+00 -5.863956e-03 -6.000000e-15 8.000000e+00 5.871733e-03 0.000000e+00 -5.871733e-03 -6.000000e-15 9.000000e+00 5.859370e-03 0.000000e+00 -5.859370e-03 -6.000000e-15 1.000000e+01 5.834496e-03 0.000000e+00 -5.834496e-03 -6.000000e-15 1.100000e+01 5.801462e-03 0.000000e+00 -5.801462e-03 -6.000000e-15 1.200000e+01 5.762942e-03 0.000000e+00 -5.762942e-03 -6.000000e-15 1.300000e+01 5.720669e-03 0.000000e+00 -5.720669e-03 -6.000000e-15 1.400000e+01 5.675820e-03 0.000000e+00 -5.675820e-03 -6.000000e-15 1.500000e+01 5.629216e-03 0.000000e+00 -5.629216e-03 -6.000000e-15 1.600000e+01 5.581449e-03 0.000000e+00 -5.581449e-03 -6.000000e-15 1.700000e+01 5.532951e-03 0.000000e+00 -5.532951e-03 -6.000000e-15 1.800000e+01 5.484046e-03 0.000000e+00 -5.484046e-03 -6.000000e-15 1.900000e+01 5.434979e-03 0.000000e+00 -5.434979e-03 -6.000000e-15 2.000000e+01 5.385937e-03 0.000000e+00 -5.385937e-03 -6.000000e-15 1.000000e+00 8.939377e-05 0.000000e+00 -8.939377e-05 -1.100000e-14 2.000000e+00 1.555133e-03 0.000000e+00 -1.555133e-03 -1.100000e-14 3.000000e+00 4.171109e-03 0.000000e+00 -4.171109e-03 -1.100000e-14 4.000000e+00 7.080983e-03 0.000000e+00 -7.080983e-03 -1.100000e-14 5.000000e+00 8.924036e-03 0.000000e+00 -8.924036e-03 -1.100000e-14 6.000000e+00 9.327953e-03 0.000000e+00 -9.327953e-03 -1.100000e-14 7.000000e+00 9.478952e-03 0.000000e+00 -9.478952e-03 -1.100000e-14 8.000000e+00 9.537086e-03 0.000000e+00 -9.537086e-03 -1.100000e-14 9.000000e+00 9.548782e-03 0.000000e+00 -9.548782e-03 -1.100000e-14 1.000000e+01 9.533764e-03 0.000000e+00 -9.533764e-03 -1.100000e-14 1.100000e+01 9.502063e-03 0.000000e+00 -9.502063e-03 -1.100000e-14 1.200000e+01 9.459377e-03 0.000000e+00 -9.459377e-03 -1.100000e-14 1.300000e+01 9.409204e-03 0.000000e+00 -9.409204e-03 -1.100000e-14 1.400000e+01 9.353814e-03 0.000000e+00 -9.353814e-03 -1.100000e-14 1.500000e+01 9.294749e-03 0.000000e+00 -9.294749e-03 -1.100000e-14 1.600000e+01 9.233091e-03 0.000000e+00 -9.233091e-03 -1.100000e-14 1.700000e+01 9.169619e-03 0.000000e+00 -9.169619e-03 -1.100000e-14 1.800000e+01 9.104911e-03 0.000000e+00 -9.104911e-03 -1.100000e-14 1.900000e+01 9.039400e-03 0.000000e+00 -9.039400e-03 -1.100000e-14 2.000000e+01 8.973415e-03 0.000000e+00 -8.973415e-03 -1.100000e-14 1.000000e+00 5.203525e-05 0.000000e+00 -5.203525e-05 -3.500000e-15 2.000000e+00 1.806793e-03 0.000000e+00 -1.806793e-03 -3.500000e-15 3.000000e+00 3.144128e-03 0.000000e+00 -3.144128e-03 -3.500000e-15 4.000000e+00 3.349982e-03 0.000000e+00 -3.349982e-03 -3.500000e-15 5.000000e+00 3.415675e-03 0.000000e+00 -3.415675e-03 -3.500000e-15 6.000000e+00 3.433387e-03 0.000000e+00 -3.433387e-03 -3.500000e-15 7.000000e+00 3.428858e-03 0.000000e+00 -3.428858e-03 -3.500000e-15 8.000000e+00 3.412369e-03 0.000000e+00 -3.412369e-03 -3.500000e-15 9.000000e+00 3.388886e-03 0.000000e+00 -3.388886e-03 -3.500000e-15 1.000000e+01 3.361113e-03 0.000000e+00 -3.361113e-03 -3.500000e-15 1.100000e+01 3.330649e-03 0.000000e+00 -3.330649e-03 -3.500000e-15 1.200000e+01 3.298499e-03 0.000000e+00 -3.298499e-03 -3.500000e-15 1.300000e+01 3.265321e-03 0.000000e+00 -3.265321e-03 -3.500000e-15 1.400000e+01 3.231562e-03 0.000000e+00 -3.231562e-03 -3.500000e-15 1.500000e+01 3.197537e-03 0.000000e+00 -3.197537e-03 -3.500000e-15 1.600000e+01 3.163466e-03 0.000000e+00 -3.163466e-03 -3.500000e-15 1.700000e+01 3.129510e-03 0.000000e+00 -3.129510e-03 -3.500000e-15 1.800000e+01 3.095786e-03 0.000000e+00 -3.095786e-03 -3.500000e-15 1.900000e+01 3.062379e-03 0.000000e+00 -3.062379e-03 -3.500000e-15 2.000000e+01 3.029352e-03 0.000000e+00 -3.029352e-03 -3.500000e-15 1.000000e+00 5.226590e-05 0.000000e+00 -5.226590e-05 -6.000000e-15 2.000000e+00 1.818392e-03 0.000000e+00 -1.818392e-03 -6.000000e-15 3.000000e+00 4.924265e-03 0.000000e+00 -4.924265e-03 -6.000000e-15 4.000000e+00 5.793684e-03 0.000000e+00 -5.793684e-03 -6.000000e-15 5.000000e+00 5.982473e-03 0.000000e+00 -5.982473e-03 -6.000000e-15 6.000000e+00 6.042414e-03 0.000000e+00 -6.042414e-03 -6.000000e-15 7.000000e+00 6.051241e-03 0.000000e+00 -6.051241e-03 -6.000000e-15 8.000000e+00 6.034549e-03 0.000000e+00 -6.034549e-03 -6.000000e-15 9.000000e+00 6.003487e-03 0.000000e+00 -6.003487e-03 -6.000000e-15 1.000000e+01 5.963745e-03 0.000000e+00 -5.963745e-03 -6.000000e-15 1.100000e+01 5.918544e-03 0.000000e+00 -5.918544e-03 -6.000000e-15 1.200000e+01 5.869847e-03 0.000000e+00 -5.869847e-03 -6.000000e-15 1.300000e+01 5.818916e-03 0.000000e+00 -5.818916e-03 -6.000000e-15 1.400000e+01 5.766598e-03 0.000000e+00 -5.766598e-03 -6.000000e-15 1.500000e+01 5.713476e-03 0.000000e+00 -5.713476e-03 -6.000000e-15 1.600000e+01 5.659967e-03 0.000000e+00 -5.659967e-03 -6.000000e-15 1.700000e+01 5.606371e-03 0.000000e+00 -5.606371e-03 -6.000000e-15 1.800000e+01 5.552906e-03 0.000000e+00 -5.552906e-03 -6.000000e-15 1.900000e+01 5.499735e-03 0.000000e+00 -5.499735e-03 -6.000000e-15 2.000000e+01 5.446981e-03 0.000000e+00 -5.446981e-03 -6.000000e-15 1.000000e+00 5.258989e-05 0.000000e+00 -5.258989e-05 -1.100000e-14 2.000000e+00 1.827872e-03 0.000000e+00 -1.827872e-03 -1.100000e-14 3.000000e+00 5.042815e-03 0.000000e+00 -5.042815e-03 -1.100000e-14 4.000000e+00 8.283665e-03 0.000000e+00 -8.283665e-03 -1.100000e-14 5.000000e+00 9.455421e-03 0.000000e+00 -9.455421e-03 -1.100000e-14 6.000000e+00 9.692748e-03 0.000000e+00 -9.692748e-03 -1.100000e-14 7.000000e+00 9.769504e-03 0.000000e+00 -9.769504e-03 -1.100000e-14 8.000000e+00 9.781859e-03 0.000000e+00 -9.781859e-03 -1.100000e-14 9.000000e+00 9.761476e-03 0.000000e+00 -9.761476e-03 -1.100000e-14 1.000000e+01 9.722325e-03 0.000000e+00 -9.722325e-03 -1.100000e-14 1.100000e+01 9.671615e-03 0.000000e+00 -9.671615e-03 -1.100000e-14 1.200000e+01 9.613464e-03 0.000000e+00 -9.613464e-03 -1.100000e-14 1.300000e+01 9.550401e-03 0.000000e+00 -9.550401e-03 -1.100000e-14 1.400000e+01 9.484066e-03 0.000000e+00 -9.484066e-03 -1.100000e-14 1.500000e+01 9.415567e-03 0.000000e+00 -9.415567e-03 -1.100000e-14 1.600000e+01 9.345677e-03 0.000000e+00 -9.345677e-03 -1.100000e-14 1.700000e+01 9.274950e-03 0.000000e+00 -9.274950e-03 -1.100000e-14 1.800000e+01 9.203792e-03 0.000000e+00 -9.203792e-03 -1.100000e-14 1.900000e+01 9.132504e-03 0.000000e+00 -9.132504e-03 -1.100000e-14 2.000000e+01 9.061313e-03 0.000000e+00 -9.061313e-03 -1.100000e-14 1.000000e+00 1.501726e-04 0.000000e+00 -1.501726e-04 -3.500000e-15 2.000000e+00 1.295209e-03 0.000000e+00 -1.295209e-03 -3.500000e-15 3.000000e+00 2.510540e-03 0.000000e+00 -2.510540e-03 -3.500000e-15 4.000000e+00 2.859179e-03 0.000000e+00 -2.859179e-03 -3.500000e-15 5.000000e+00 3.011997e-03 0.000000e+00 -3.011997e-03 -3.500000e-15 6.000000e+00 3.089590e-03 0.000000e+00 -3.089590e-03 -3.500000e-15 7.000000e+00 3.129304e-03 0.000000e+00 -3.129304e-03 -3.500000e-15 8.000000e+00 3.147118e-03 0.000000e+00 -3.147118e-03 -3.500000e-15 9.000000e+00 3.151157e-03 0.000000e+00 -3.151157e-03 -3.500000e-15 1.000000e+01 3.146037e-03 0.000000e+00 -3.146037e-03 -3.500000e-15 1.100000e+01 3.134590e-03 0.000000e+00 -3.134590e-03 -3.500000e-15 1.200000e+01 3.118659e-03 0.000000e+00 -3.118659e-03 -3.500000e-15 1.300000e+01 3.099493e-03 0.000000e+00 -3.099493e-03 -3.500000e-15 1.400000e+01 3.077971e-03 0.000000e+00 -3.077971e-03 -3.500000e-15 1.500000e+01 3.054727e-03 0.000000e+00 -3.054727e-03 -3.500000e-15 1.600000e+01 3.030230e-03 0.000000e+00 -3.030230e-03 -3.500000e-15 1.700000e+01 3.004832e-03 0.000000e+00 -3.004832e-03 -3.500000e-15 1.800000e+01 2.978804e-03 0.000000e+00 -2.978804e-03 -3.500000e-15 1.900000e+01 2.952353e-03 0.000000e+00 -2.952353e-03 -3.500000e-15 2.000000e+01 2.925642e-03 0.000000e+00 -2.925642e-03 -3.500000e-15 1.000000e+00 1.507822e-04 0.000000e+00 -1.507822e-04 -6.000000e-15 2.000000e+00 1.301585e-03 0.000000e+00 -1.301585e-03 -6.000000e-15 3.000000e+00 3.244201e-03 0.000000e+00 -3.244201e-03 -6.000000e-15 4.000000e+00 4.809067e-03 0.000000e+00 -4.809067e-03 -6.000000e-15 5.000000e+00 5.249687e-03 0.000000e+00 -5.249687e-03 -6.000000e-15 6.000000e+00 5.443283e-03 0.000000e+00 -5.443283e-03 -6.000000e-15 7.000000e+00 5.540438e-03 0.000000e+00 -5.540438e-03 -6.000000e-15 8.000000e+00 5.588033e-03 0.000000e+00 -5.588033e-03 -6.000000e-15 9.000000e+00 5.606508e-03 0.000000e+00 -5.606508e-03 -6.000000e-15 1.000000e+01 5.606428e-03 0.000000e+00 -5.606428e-03 -6.000000e-15 1.100000e+01 5.593874e-03 0.000000e+00 -5.593874e-03 -6.000000e-15 1.200000e+01 5.572618e-03 0.000000e+00 -5.572618e-03 -6.000000e-15 1.300000e+01 5.545137e-03 0.000000e+00 -5.545137e-03 -6.000000e-15 1.400000e+01 5.513124e-03 0.000000e+00 -5.513124e-03 -6.000000e-15 1.500000e+01 5.477780e-03 0.000000e+00 -5.477780e-03 -6.000000e-15 1.600000e+01 5.439978e-03 0.000000e+00 -5.439978e-03 -6.000000e-15 1.700000e+01 5.400369e-03 0.000000e+00 -5.400369e-03 -6.000000e-15 1.800000e+01 5.359445e-03 0.000000e+00 -5.359445e-03 -6.000000e-15 1.900000e+01 5.317585e-03 0.000000e+00 -5.317585e-03 -6.000000e-15 2.000000e+01 5.275083e-03 0.000000e+00 -5.275083e-03 -6.000000e-15 1.000000e+00 1.516215e-04 0.000000e+00 -1.516215e-04 -1.100000e-14 2.000000e+00 1.307760e-03 0.000000e+00 -1.307760e-03 -1.100000e-14 3.000000e+00 3.270018e-03 0.000000e+00 -3.270018e-03 -1.100000e-14 4.000000e+00 5.608699e-03 0.000000e+00 -5.608699e-03 -1.100000e-14 5.000000e+00 7.849353e-03 0.000000e+00 -7.849353e-03 -1.100000e-14 6.000000e+00 8.661598e-03 0.000000e+00 -8.661598e-03 -1.100000e-14 7.000000e+00 8.955745e-03 0.000000e+00 -8.955745e-03 -1.100000e-14 8.000000e+00 9.097235e-03 0.000000e+00 -9.097235e-03 -1.100000e-14 9.000000e+00 9.166278e-03 0.000000e+00 -9.166278e-03 -1.100000e-14 1.000000e+01 9.194107e-03 0.000000e+00 -9.194107e-03 -1.100000e-14 1.100000e+01 9.196074e-03 0.000000e+00 -9.196074e-03 -1.100000e-14 1.200000e+01 9.180772e-03 0.000000e+00 -9.180772e-03 -1.100000e-14 1.300000e+01 9.153438e-03 0.000000e+00 -9.153438e-03 -1.100000e-14 1.400000e+01 9.117466e-03 0.000000e+00 -9.117466e-03 -1.100000e-14 1.500000e+01 9.075162e-03 0.000000e+00 -9.075162e-03 -1.100000e-14 1.600000e+01 9.028152e-03 0.000000e+00 -9.028152e-03 -1.100000e-14 1.700000e+01 8.977614e-03 0.000000e+00 -8.977614e-03 -1.100000e-14 1.800000e+01 8.924423e-03 0.000000e+00 -8.924423e-03 -1.100000e-14 1.900000e+01 8.869243e-03 0.000000e+00 -8.869243e-03 -1.100000e-14 2.000000e+01 8.812586e-03 0.000000e+00 -8.812586e-03 -1.100000e-14 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/acFreq_conqs.standard0000644000175000017500000000711513546075722025116 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 7.74268744619241e-13 7.41817529187633e-13 2.78749219444268e-14 1258.925 7.74268934194311e-13 7.41817722646998e-13 2.78749372474098e-14 1584.893 7.74268870296669e-13 7.41817547216938e-13 2.78749329738658e-14 1995.262 7.74268886046093e-13 7.41817585744112e-13 2.78749322307397e-14 2511.886 7.74268814799872e-13 7.41817347176192e-13 2.7874934409777e-14 3162.278 7.74268542146252e-13 7.4181727625287e-13 2.78749267540166e-14 3981.072 7.74268598103075e-13 7.41817328204921e-13 2.78749264372404e-14 5011.872 7.74268878496736e-13 7.41817525410496e-13 2.78749282556086e-14 6309.573 7.7426880417895e-13 7.4181766457129e-13 2.78749361505116e-14 7943.282 7.74268823232781e-13 7.41817434885937e-13 2.78749295119706e-14 10000 7.74268744619241e-13 7.41817529187633e-13 2.78749219444268e-14 12589.25 7.74268934194311e-13 7.41817722646998e-13 2.78749372474098e-14 15848.93 7.74268870296669e-13 7.41817547216938e-13 2.78749329738658e-14 19952.62 7.74268886046093e-13 7.41817585744112e-13 2.78749322307397e-14 25118.86 7.74268814799872e-13 7.41817347176192e-13 2.7874934409777e-14 31622.78 7.74268542146252e-13 7.4181727625287e-13 2.78749267540166e-14 39810.72 7.74268598103075e-13 7.41817328204921e-13 2.78749264372404e-14 50118.72 7.74268878496736e-13 7.41817525410496e-13 2.78749282556086e-14 63095.73 7.7426880417895e-13 7.4181766457129e-13 2.78749361505116e-14 79432.82 7.74268823232781e-13 7.41817434885936e-13 2.78749295119706e-14 100000 7.74268744619241e-13 7.41817529187633e-13 2.78749219444268e-14 125892.5 7.74268934194311e-13 7.41817722646998e-13 2.78749372474098e-14 158489.3 7.74268769876677e-13 7.41817547216938e-13 2.78749329738658e-14 199526.2 7.74268806279655e-13 7.41817585744112e-13 2.78749322307397e-14 251188.6 7.74268814799872e-13 7.41817347176192e-13 2.7874934409777e-14 316227.8 7.74268542146252e-13 7.4181727625287e-13 2.78749267540166e-14 398107.2 7.74268598103075e-13 7.41817328204921e-13 2.78749264372404e-14 501187.2 7.74268878496736e-13 7.41817525410496e-13 2.78749282556086e-14 630957.3 7.7426880417895e-13 7.41817412327687e-13 2.78749361505116e-14 794328.2 7.7426862286857e-13 7.41817434885937e-13 2.78749295119706e-14 1000000 7.74268585464298e-13 7.4181737003269e-13 2.78749219444268e-14 1258925 7.74268807773005e-13 7.41817469804385e-13 2.78749372474098e-14 1584893 7.74268569036692e-13 7.41817245956961e-13 2.78749329738658e-14 1995262 7.74268487213902e-13 7.41817107145482e-13 2.78749322307397e-14 2511886 7.74268181192523e-13 7.41816713568842e-13 2.7874934409777e-14 3162278 7.74267535562118e-13 7.41816269668736e-13 2.78749217210959e-14 3981072 7.74266998986625e-13 7.41815329309358e-13 2.78749264372404e-14 5011872 7.74266338049684e-13 7.41814349851681e-13 2.78749282556086e-14 6309573 7.74264768281292e-13 7.41812367455614e-13 2.78749361505116e-14 7943282 7.74262611942239e-13 7.41809420317495e-13 2.78749295119706e-14 10000000 7.7425887701277e-13 7.41804637637243e-13 2.78749219444268e-14 12589250 7.74253257952324e-13 7.4179724239537e-13 2.78749246052792e-14 15848930 7.74243966138542e-13 7.41785111559377e-13 2.78749128898673e-14 19952620 7.74229481425604e-13 7.41766216157886e-13 2.78749003241644e-14 25118860 7.74206721279613e-13 7.41736245435445e-13 2.7874883721189e-14 31622780 7.74169896901128e-13 7.41688433483728e-13 2.78748462272859e-14 39810720 7.74112284470091e-13 7.41612641299326e-13 2.78747985079244e-14 50118720 7.74020549797404e-13 7.41493300855486e-13 2.7874731370962e-14 63095730 7.73875556400883e-13 7.41303592107082e-13 2.78746082338268e-14 79432820 7.73645890900688e-13 7.41003355096522e-13 2.7874428601443e-14 100000000 7.73282143127015e-13 7.40527737528816e-13 2.78741420852056e-14 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_Id1_vb0.standard0000644000175000017500000001112213546075722024647 0ustar carstencarstenV(d) I(d) 1.000000e+00 1.483197e-03 2.000000e+00 2.137180e-03 3.000000e+00 2.143397e-03 4.000000e+00 2.144559e-03 5.000000e+00 2.145380e-03 6.000000e+00 2.146027e-03 7.000000e+00 2.146573e-03 8.000000e+00 2.147052e-03 9.000000e+00 2.147484e-03 1.000000e+01 2.147880e-03 1.100000e+01 2.148249e-03 1.200000e+01 2.148594e-03 1.300000e+01 2.148921e-03 1.400000e+01 2.149232e-03 1.500000e+01 2.149528e-03 1.600000e+01 2.149813e-03 1.700000e+01 2.150086e-03 1.800000e+01 2.150350e-03 1.900000e+01 2.150606e-03 2.000000e+01 2.150854e-03 1.000000e+00 2.092671e-03 2.000000e+00 3.928416e-03 3.000000e+00 5.503285e-03 4.000000e+00 6.783673e-03 5.000000e+00 7.673230e-03 6.000000e+00 8.027259e-03 7.000000e+00 8.044472e-03 8.000000e+00 8.050638e-03 9.000000e+00 8.055362e-03 1.000000e+01 8.059129e-03 1.100000e+01 8.062227e-03 1.200000e+01 8.064840e-03 1.300000e+01 8.067092e-03 1.400000e+01 8.069068e-03 1.500000e+01 8.070828e-03 1.600000e+01 8.072415e-03 1.700000e+01 8.073862e-03 1.800000e+01 8.075192e-03 1.900000e+01 8.076424e-03 2.000000e+01 8.077574e-03 1.000000e+00 2.079133e-03 2.000000e+00 4.009372e-03 3.000000e+00 5.804625e-03 4.000000e+00 7.475340e-03 5.000000e+00 9.029773e-03 6.000000e+00 1.047444e-02 7.000000e+00 1.181419e-02 8.000000e+00 1.305209e-02 9.000000e+00 1.418913e-02 1.000000e+01 1.522374e-02 1.100000e+01 1.615116e-02 1.200000e+01 1.696285e-02 1.300000e+01 1.764650e-02 1.400000e+01 1.818798e-02 1.500000e+01 1.857754e-02 1.600000e+01 1.882021e-02 1.700000e+01 1.894277e-02 1.800000e+01 1.898150e-02 1.900000e+01 1.899732e-02 2.000000e+01 1.901119e-02 1.000000e+00 1.789699e-03 2.000000e+00 2.667999e-03 3.000000e+00 2.680550e-03 4.000000e+00 2.682262e-03 5.000000e+00 2.683427e-03 6.000000e+00 2.684323e-03 7.000000e+00 2.685065e-03 8.000000e+00 2.685709e-03 9.000000e+00 2.686283e-03 1.000000e+01 2.686806e-03 1.100000e+01 2.687290e-03 1.200000e+01 2.687742e-03 1.300000e+01 2.688167e-03 1.400000e+01 2.688570e-03 1.500000e+01 2.688954e-03 1.600000e+01 2.689322e-03 1.700000e+01 2.689675e-03 1.800000e+01 2.690015e-03 1.900000e+01 2.690343e-03 2.000000e+01 2.690661e-03 1.000000e+00 2.343809e-03 2.000000e+00 4.423109e-03 3.000000e+00 6.243335e-03 4.000000e+00 7.788994e-03 5.000000e+00 9.000021e-03 6.000000e+00 9.727465e-03 7.000000e+00 9.873946e-03 8.000000e+00 9.886132e-03 9.000000e+00 9.895108e-03 1.000000e+01 9.902056e-03 1.100000e+01 9.907626e-03 1.200000e+01 9.912219e-03 1.300000e+01 9.916096e-03 1.400000e+01 9.919433e-03 1.500000e+01 9.922352e-03 1.600000e+01 9.924942e-03 1.700000e+01 9.927266e-03 1.800000e+01 9.929374e-03 1.900000e+01 9.931301e-03 2.000000e+01 9.933078e-03 1.000000e+00 2.205821e-03 2.000000e+00 4.254090e-03 3.000000e+00 6.159871e-03 4.000000e+00 7.934865e-03 5.000000e+00 9.588646e-03 6.000000e+00 1.112915e-02 7.000000e+00 1.256286e-02 8.000000e+00 1.389478e-02 9.000000e+00 1.512837e-02 1.000000e+01 1.626525e-02 1.100000e+01 1.730493e-02 1.200000e+01 1.824423e-02 1.300000e+01 1.907685e-02 1.400000e+01 1.979306e-02 1.500000e+01 2.038048e-02 1.600000e+01 2.082765e-02 1.700000e+01 2.113148e-02 1.800000e+01 2.130623e-02 1.900000e+01 2.137803e-02 2.000000e+01 2.140123e-02 1.000000e+00 1.155934e-03 2.000000e+00 1.648010e-03 3.000000e+00 1.656307e-03 4.000000e+00 1.657093e-03 5.000000e+00 1.657663e-03 6.000000e+00 1.658121e-03 7.000000e+00 1.658512e-03 8.000000e+00 1.658858e-03 9.000000e+00 1.659172e-03 1.000000e+01 1.659461e-03 1.100000e+01 1.659731e-03 1.200000e+01 1.659985e-03 1.300000e+01 1.660226e-03 1.400000e+01 1.660456e-03 1.500000e+01 1.660675e-03 1.600000e+01 1.660886e-03 1.700000e+01 1.661089e-03 1.800000e+01 1.661285e-03 1.900000e+01 1.661475e-03 2.000000e+01 1.661659e-03 1.000000e+00 1.751105e-03 2.000000e+00 3.258901e-03 3.000000e+00 4.509626e-03 4.000000e+00 5.451600e-03 5.000000e+00 5.978067e-03 6.000000e+00 6.085526e-03 7.000000e+00 6.089432e-03 8.000000e+00 6.092337e-03 9.000000e+00 6.094650e-03 1.000000e+01 6.096555e-03 1.100000e+01 6.098168e-03 1.200000e+01 6.099564e-03 1.300000e+01 6.100797e-03 1.400000e+01 6.101901e-03 1.500000e+01 6.102905e-03 1.600000e+01 6.103826e-03 1.700000e+01 6.104680e-03 1.800000e+01 6.105476e-03 1.900000e+01 6.106225e-03 2.000000e+01 6.106932e-03 1.000000e+00 1.878924e-03 2.000000e+00 3.621433e-03 3.000000e+00 5.239715e-03 4.000000e+00 6.742267e-03 5.000000e+00 8.135223e-03 6.000000e+00 9.422678e-03 7.000000e+00 1.060658e-02 8.000000e+00 1.168631e-02 9.000000e+00 1.265799e-02 1.000000e+01 1.351375e-02 1.100000e+01 1.424128e-02 1.200000e+01 1.482527e-02 1.300000e+01 1.525323e-02 1.400000e+01 1.552673e-02 1.500000e+01 1.567091e-02 1.600000e+01 1.572832e-02 1.700000e+01 1.574223e-02 1.800000e+01 1.575099e-02 1.900000e+01 1.575870e-02 2.000000e+01 1.576557e-02 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/acVd_codfm.standard0000644000175000017500000000546613546075722024546 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 1 -5.624562e-05 2.187574e-03 8.61590633279424e-13 3.70339500271036e-13 2 -1.017225e-04 2.046821e-03 8.85492039750834e-13 3.44675593322421e-13 3 -1.375147e-04 1.916463e-03 9.06398045411226e-13 3.21818687133814e-13 4 -1.645527e-04 1.795261e-03 9.24825050400418e-13 3.01475481625802e-13 5 -1.836114e-04 1.682309e-03 9.41200154834049e-13 2.83350276718324e-13 6 -1.952973e-04 1.576809e-03 9.55877758808074e-13 2.67168372337003e-13 7 -2.000320e-04 1.477997e-03 9.69150962401852e-13 2.52682068414773e-13 8 -1.980303e-04 1.385113e-03 9.81258765680093e-13 2.39670364891797e-13 9 -1.892715e-04 1.297384e-03 9.92391468694321e-13 2.279368617149e-13 10 -1.734576e-04 1.214013e-03 1.00269427148385e-12 2.17307858837051e-13 11 -1.499548e-04 1.134158e-03 1.01227027407659e-12 2.07630356216825e-13 12 -1.177113e-04 1.056916e-03 1.02118227648956e-12 1.98770853818076e-13 13 -7.514648e-05 9.812935e-04 1.02945927873059e-12 1.90616751610317e-13 14 -2.000818e-05 9.061753e-04 1.03710428080051e-12 1.83079549569587e-13 15 5.079158e-05 8.302980e-04 1.0441142826985e-12 1.76102347680479e-13 16 1.413202e-04 7.522449e-04 1.05051428443133e-12 1.69671745939366e-13 17 2.566236e-04 6.705098e-04 1.05641128602797e-12 1.63833944358755e-13 18 4.022939e-04 5.837191e-04 1.06206328755827e-12 1.58706542970489e-13 19 5.830566e-04 4.911641e-04 1.0678922891365e-12 1.54454641819268e-13 20 7.996671e-04 3.937834e-04 1.07420929084685e-12 1.51141840922313e-13 1 -3.571674e-05 2.018006e-03 8.35073626099828e-13 3.96771207427536e-13 2 -6.217830e-05 1.889607e-03 8.61227033180977e-13 3.71511700588414e-13 3 -8.013023e-05 1.770214e-03 8.84652639523562e-13 3.48826394446268e-13 4 -9.013386e-05 1.658502e-03 9.05785545245389e-13 3.28476788936524e-13 5 -9.256727e-05 1.553526e-03 9.24989750445011e-13 3.10203283988893e-13 6 -8.759393e-05 1.454447e-03 9.42568355204495e-13 2.93752379534739e-13 7 -7.511303e-05 1.360423e-03 9.5876655959023e-13 2.78883175508837e-13 8 -5.468998e-05 1.270560e-03 9.73769763652413e-13 2.65367671849455e-13 9 -2.545988e-05 1.183868e-03 9.87698167423589e-13 2.52988668497786e-13 10 1.400504e-05 1.099229e-03 1.00059727091608e-12 2.41538465397593e-13 11 6.587264e-05 1.015343e-03 1.01242827411937e-12 2.3082036249562e-13 12 1.332705e-04 9.306918e-04 1.02306427699912e-12 2.20654359743131e-13 13 2.205119e-04 8.435066e-04 1.03229527949845e-12 2.1089325710027e-13 14 3.331993e-04 7.518230e-04 1.03987628155104e-12 2.01450554543617e-13 15 4.778665e-04 6.537351e-04 1.04560928310328e-12 1.9234205207745e-13 16 6.604444e-04 5.480812e-04 1.04946728414785e-12 1.83709649740189e-13 17 8.825212e-04 4.358121e-04 1.05152028470371e-12 1.75709647574154e-13 18 1.135204e-03 3.218396e-04 1.05084728452149e-12 1.67895845458533e-13 19 1.394269e-03 2.157934e-04 1.03961228147956e-12 1.56515142377158e-13 20 1.625189e-03 1.290120e-04 9.48277156750178e-13 1.10543829930224e-13 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_Id1_vb2.standard0000644000175000017500000001112213546075722024651 0ustar carstencarstenV(d) I(d) 1.000000e+00 1.108325e-03 2.000000e+00 1.340752e-03 3.000000e+00 1.341764e-03 4.000000e+00 1.342420e-03 5.000000e+00 1.342917e-03 6.000000e+00 1.343331e-03 7.000000e+00 1.343693e-03 8.000000e+00 1.344019e-03 9.000000e+00 1.344318e-03 1.000000e+01 1.344596e-03 1.100000e+01 1.344857e-03 1.200000e+01 1.345104e-03 1.300000e+01 1.345339e-03 1.400000e+01 1.345563e-03 1.500000e+01 1.345779e-03 1.600000e+01 1.345986e-03 1.700000e+01 1.346186e-03 1.800000e+01 1.346380e-03 1.900000e+01 1.346567e-03 2.000000e+01 1.346750e-03 1.000000e+00 1.907848e-03 2.000000e+00 3.569949e-03 3.000000e+00 4.961745e-03 4.000000e+00 6.015209e-03 5.000000e+00 6.579230e-03 6.000000e+00 6.651406e-03 7.000000e+00 6.656445e-03 8.000000e+00 6.660243e-03 9.000000e+00 6.663246e-03 1.000000e+01 6.665704e-03 1.100000e+01 6.667776e-03 1.200000e+01 6.669565e-03 1.300000e+01 6.671140e-03 1.400000e+01 6.672550e-03 1.500000e+01 6.673827e-03 1.600000e+01 6.674999e-03 1.700000e+01 6.676083e-03 1.800000e+01 6.677094e-03 1.900000e+01 6.678042e-03 2.000000e+01 6.678937e-03 1.000000e+00 1.977935e-03 2.000000e+00 3.824362e-03 3.000000e+00 5.547482e-03 4.000000e+00 7.154176e-03 5.000000e+00 8.650110e-03 6.000000e+00 1.003964e-02 7.000000e+00 1.132558e-02 8.000000e+00 1.250879e-02 9.000000e+00 1.358761e-02 1.000000e+01 1.455706e-02 1.100000e+01 1.540801e-02 1.200000e+01 1.612674e-02 1.300000e+01 1.669663e-02 1.400000e+01 1.710472e-02 1.500000e+01 1.735422e-02 1.600000e+01 1.747409e-02 1.700000e+01 1.750635e-02 1.800000e+01 1.751959e-02 1.900000e+01 1.753118e-02 2.000000e+01 1.754142e-02 1.000000e+00 1.336337e-03 2.000000e+00 1.620437e-03 3.000000e+00 1.621761e-03 4.000000e+00 1.622601e-03 5.000000e+00 1.623230e-03 6.000000e+00 1.623749e-03 7.000000e+00 1.624201e-03 8.000000e+00 1.624606e-03 9.000000e+00 1.624977e-03 1.000000e+01 1.625321e-03 1.100000e+01 1.625644e-03 1.200000e+01 1.625949e-03 1.300000e+01 1.626238e-03 1.400000e+01 1.626515e-03 1.500000e+01 1.626780e-03 1.600000e+01 1.627035e-03 1.700000e+01 1.627282e-03 1.800000e+01 1.627520e-03 1.900000e+01 1.627750e-03 2.000000e+01 1.627974e-03 1.000000e+00 2.142437e-03 2.000000e+00 4.034046e-03 3.000000e+00 5.659825e-03 4.000000e+00 6.971458e-03 5.000000e+00 7.836745e-03 6.000000e+00 8.077057e-03 7.000000e+00 8.086024e-03 8.000000e+00 8.092502e-03 9.000000e+00 8.097480e-03 1.000000e+01 8.101458e-03 1.100000e+01 8.104739e-03 1.200000e+01 8.107516e-03 1.300000e+01 8.109919e-03 1.400000e+01 8.112034e-03 1.500000e+01 8.113925e-03 1.600000e+01 8.115635e-03 1.700000e+01 8.117199e-03 1.800000e+01 8.118642e-03 1.900000e+01 8.119982e-03 2.000000e+01 8.121235e-03 1.000000e+00 2.099008e-03 2.000000e+00 4.059049e-03 3.000000e+00 5.889374e-03 4.000000e+00 7.597998e-03 5.000000e+00 9.191832e-03 6.000000e+00 1.067666e-02 7.000000e+00 1.205702e-02 8.000000e+00 1.333595e-02 9.000000e+00 1.451467e-02 1.000000e+01 1.559211e-02 1.100000e+01 1.656422e-02 1.200000e+01 1.742325e-02 1.300000e+01 1.815727e-02 1.400000e+01 1.875112e-02 1.500000e+01 1.919103e-02 1.600000e+01 1.947479e-02 1.700000e+01 1.962259e-02 1.800000e+01 1.966664e-02 1.900000e+01 1.968518e-02 2.000000e+01 1.970141e-02 1.000000e+00 8.733546e-04 2.000000e+00 1.080706e-03 3.000000e+00 1.081476e-03 4.000000e+00 1.081977e-03 5.000000e+00 1.082361e-03 6.000000e+00 1.082681e-03 7.000000e+00 1.082962e-03 8.000000e+00 1.083216e-03 9.000000e+00 1.083449e-03 1.000000e+01 1.083666e-03 1.100000e+01 1.083870e-03 1.200000e+01 1.084063e-03 1.300000e+01 1.084246e-03 1.400000e+01 1.084422e-03 1.500000e+01 1.084590e-03 1.600000e+01 1.084752e-03 1.700000e+01 1.084909e-03 1.800000e+01 1.085060e-03 1.900000e+01 1.085207e-03 2.000000e+01 1.085350e-03 1.000000e+00 1.590965e-03 2.000000e+00 2.948954e-03 3.000000e+00 4.041568e-03 4.000000e+00 4.789623e-03 5.000000e+00 5.085220e-03 6.000000e+00 5.101229e-03 7.000000e+00 5.103887e-03 8.000000e+00 5.105969e-03 9.000000e+00 5.107665e-03 1.000000e+01 5.109092e-03 1.100000e+01 5.110323e-03 1.200000e+01 5.111408e-03 1.300000e+01 5.112382e-03 1.400000e+01 5.113268e-03 1.500000e+01 5.114084e-03 1.600000e+01 5.114841e-03 1.700000e+01 5.115551e-03 1.800000e+01 5.116220e-03 1.900000e+01 5.116853e-03 2.000000e+01 5.117456e-03 1.000000e+00 1.786487e-03 2.000000e+00 3.452358e-03 3.000000e+00 5.004202e-03 4.000000e+00 6.447123e-03 5.000000e+00 7.784771e-03 6.000000e+00 9.019095e-03 7.000000e+00 1.014986e-02 8.000000e+00 1.117391e-02 9.000000e+00 1.208421e-02 1.000000e+01 1.286894e-02 1.100000e+01 1.351180e-02 1.200000e+01 1.399621e-02 1.300000e+01 1.431629e-02 1.400000e+01 1.449067e-02 1.500000e+01 1.456231e-02 1.600000e+01 1.457880e-02 1.700000e+01 1.458659e-02 1.800000e+01 1.459341e-02 1.900000e+01 1.459947e-02 2.000000e+01 1.460489e-02 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_corsrd0.standard0000644000175000017500000001112213546075722025037 0ustar carstencarstenV(d) I(d) 1.000000e+00 7.211208e-03 2.000000e+00 8.123820e-03 3.000000e+00 8.139259e-03 4.000000e+00 8.150097e-03 5.000000e+00 8.158595e-03 6.000000e+00 8.165777e-03 7.000000e+00 8.172116e-03 8.000000e+00 8.177862e-03 9.000000e+00 8.183162e-03 1.000000e+01 8.188110e-03 1.100000e+01 8.192770e-03 1.200000e+01 8.197189e-03 1.300000e+01 8.201400e-03 1.400000e+01 8.205433e-03 1.500000e+01 8.209308e-03 1.600000e+01 8.213043e-03 1.700000e+01 8.216652e-03 1.800000e+01 8.220147e-03 1.900000e+01 8.223539e-03 2.000000e+01 8.226836e-03 1.000000e+00 1.396225e-02 2.000000e+00 2.314123e-02 3.000000e+00 2.756707e-02 4.000000e+00 2.845216e-02 5.000000e+00 2.848107e-02 6.000000e+00 2.850448e-02 7.000000e+00 2.852425e-02 8.000000e+00 2.854129e-02 9.000000e+00 2.855629e-02 1.000000e+01 2.856975e-02 1.100000e+01 2.858203e-02 1.200000e+01 2.859338e-02 1.300000e+01 2.860398e-02 1.400000e+01 2.861396e-02 1.500000e+01 2.862342e-02 1.600000e+01 2.863244e-02 1.700000e+01 2.864107e-02 1.800000e+01 2.864937e-02 1.900000e+01 2.865736e-02 2.000000e+01 2.866509e-02 1.000000e+00 1.466091e-02 2.000000e+00 2.812430e-02 3.000000e+00 3.988189e-02 4.000000e+00 4.959011e-02 5.000000e+00 5.705111e-02 6.000000e+00 6.217965e-02 7.000000e+00 6.512622e-02 8.000000e+00 6.644022e-02 9.000000e+00 6.684971e-02 1.000000e+01 6.690021e-02 1.100000e+01 6.692923e-02 1.200000e+01 6.695595e-02 1.300000e+01 6.698069e-02 1.400000e+01 6.700368e-02 1.500000e+01 6.702510e-02 1.600000e+01 6.704513e-02 1.700000e+01 6.706395e-02 1.800000e+01 6.708170e-02 1.900000e+01 6.709850e-02 2.000000e+01 6.711446e-02 1.000000e+00 9.047060e-03 2.000000e+00 9.910232e-03 3.000000e+00 9.928166e-03 4.000000e+00 9.940803e-03 5.000000e+00 9.950726e-03 6.000000e+00 9.959120e-03 7.000000e+00 9.966537e-03 8.000000e+00 9.973264e-03 9.000000e+00 9.979472e-03 1.000000e+01 9.985269e-03 1.100000e+01 9.990730e-03 1.200000e+01 9.995909e-03 1.300000e+01 1.000085e-02 1.400000e+01 1.000558e-02 1.500000e+01 1.001012e-02 1.600000e+01 1.001450e-02 1.700000e+01 1.001873e-02 1.800000e+01 1.002283e-02 1.900000e+01 1.002681e-02 2.000000e+01 1.003068e-02 1.000000e+00 1.709091e-02 2.000000e+00 2.792020e-02 3.000000e+00 3.281677e-02 4.000000e+00 3.364926e-02 5.000000e+00 3.368013e-02 6.000000e+00 3.370546e-02 7.000000e+00 3.372688e-02 8.000000e+00 3.374535e-02 9.000000e+00 3.376160e-02 1.000000e+01 3.377620e-02 1.100000e+01 3.378951e-02 1.200000e+01 3.380181e-02 1.300000e+01 3.381331e-02 1.400000e+01 3.382413e-02 1.500000e+01 3.383439e-02 1.600000e+01 3.384416e-02 1.700000e+01 3.385353e-02 1.800000e+01 3.386252e-02 1.900000e+01 3.387119e-02 2.000000e+01 3.387958e-02 1.000000e+00 1.635923e-02 2.000000e+00 3.146777e-02 3.000000e+00 4.467981e-02 4.000000e+00 5.556107e-02 5.000000e+00 6.387317e-02 6.000000e+00 6.952771e-02 7.000000e+00 7.272070e-02 8.000000e+00 7.410509e-02 9.000000e+00 7.450562e-02 1.000000e+01 7.454308e-02 1.100000e+01 7.457408e-02 1.200000e+01 7.460266e-02 1.300000e+01 7.462913e-02 1.400000e+01 7.465372e-02 1.500000e+01 7.467664e-02 1.600000e+01 7.469808e-02 1.700000e+01 7.471821e-02 1.800000e+01 7.473720e-02 1.900000e+01 7.475518e-02 2.000000e+01 7.477226e-02 1.000000e+00 5.409558e-03 2.000000e+00 6.397699e-03 3.000000e+00 6.410318e-03 4.000000e+00 6.419065e-03 5.000000e+00 6.425901e-03 6.000000e+00 6.431663e-03 7.000000e+00 6.436740e-03 8.000000e+00 6.441337e-03 9.000000e+00 6.445572e-03 1.000000e+01 6.449523e-03 1.100000e+01 6.453241e-03 1.200000e+01 6.456765e-03 1.300000e+01 6.460123e-03 1.400000e+01 6.463337e-03 1.500000e+01 6.466425e-03 1.600000e+01 6.469400e-03 1.700000e+01 6.472274e-03 1.800000e+01 6.475057e-03 1.900000e+01 6.477758e-03 2.000000e+01 6.480383e-03 1.000000e+00 1.048765e-02 2.000000e+00 1.765102e-02 3.000000e+00 2.138742e-02 4.000000e+00 2.233198e-02 5.000000e+00 2.236731e-02 6.000000e+00 2.238728e-02 7.000000e+00 2.240410e-02 8.000000e+00 2.241858e-02 9.000000e+00 2.243132e-02 1.000000e+01 2.244276e-02 1.100000e+01 2.245318e-02 1.200000e+01 2.246281e-02 1.300000e+01 2.247180e-02 1.400000e+01 2.248027e-02 1.500000e+01 2.248829e-02 1.600000e+01 2.249593e-02 1.700000e+01 2.250325e-02 1.800000e+01 2.251028e-02 1.900000e+01 2.251706e-02 2.000000e+01 2.252361e-02 1.000000e+00 1.230073e-02 2.000000e+00 2.351040e-02 3.000000e+00 3.328542e-02 4.000000e+00 4.138906e-02 5.000000e+00 4.767421e-02 6.000000e+00 5.206478e-02 7.000000e+00 5.465878e-02 8.000000e+00 5.587164e-02 9.000000e+00 5.629094e-02 1.000000e+01 5.637278e-02 1.100000e+01 5.639868e-02 1.200000e+01 5.642242e-02 1.300000e+01 5.644438e-02 1.400000e+01 5.646478e-02 1.500000e+01 5.648378e-02 1.600000e+01 5.650156e-02 1.700000e+01 5.651825e-02 1.800000e+01 5.653399e-02 1.900000e+01 5.654890e-02 2.000000e+01 5.656306e-02 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/acFreq_nover.standard0000644000175000017500000000711713546075722025126 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 7.40071917771801e-13 7.17115886245056e-13 1.14024919682275e-14 1258.925 7.40072223670276e-13 7.171160107574e-13 1.14024964015382e-14 1584.893 7.40072046908196e-13 7.17115936214445e-13 1.14024893025577e-14 1995.262 7.40072056776147e-13 7.17115913982718e-13 1.14024926964839e-14 2511.886 7.40072392535436e-13 7.17116164652632e-13 1.1402492904229e-14 3162.278 7.40071859364656e-13 7.17115701606523e-13 1.14024894435302e-14 3981.072 7.40071892599789e-13 7.17115776402386e-13 1.14024918508587e-14 5011.872 7.40071920729898e-13 7.17115806056352e-13 1.14024949147701e-14 6309.573 7.40071886590531e-13 7.17115952954509e-13 1.14024930093677e-14 7943.282 7.40072062243654e-13 7.17115933857523e-13 1.14024928235915e-14 10000 7.40071917771801e-13 7.17115886245055e-13 1.14024919682275e-14 12589.25 7.40072223670276e-13 7.171160107574e-13 1.14024964015382e-14 15848.93 7.40072046908196e-13 7.17115936214445e-13 1.14024893025577e-14 19952.62 7.40072056776147e-13 7.17115913982718e-13 1.14024926964839e-14 25118.86 7.40072392535436e-13 7.17116164652632e-13 1.1402492904229e-14 31622.78 7.40071859364656e-13 7.17115701606523e-13 1.14024894435302e-14 39810.72 7.40071892599789e-13 7.17115776402386e-13 1.14024918508587e-14 50118.72 7.40071920729898e-13 7.17115806056352e-13 1.14024949147701e-14 63095.73 7.40071886590531e-13 7.17115952954509e-13 1.14024930093677e-14 79432.82 7.40072062243654e-13 7.17115933857523e-13 1.14024928235915e-14 100000 7.40071917771801e-13 7.17115886245055e-13 1.14024919682275e-14 125892.5 7.40072223670276e-13 7.171160107574e-13 1.14024964015382e-14 158489.3 7.40072046908196e-13 7.17115936214445e-13 1.14024893025577e-14 199526.2 7.40072056776147e-13 7.17115913982717e-13 1.14024926964839e-14 251188.6 7.40072392535436e-13 7.17116164652632e-13 1.1402492904229e-14 316227.8 7.40071859364656e-13 7.17115701606522e-13 1.14024894435302e-14 398107.2 7.40071892599789e-13 7.17115776402386e-13 1.14024918508587e-14 501187.2 7.40071920729898e-13 7.17115806056352e-13 1.140249491477e-14 630957.3 7.40071886590532e-13 7.17115952954509e-13 1.14024930093677e-14 794328.2 7.40072062243654e-13 7.17115933857523e-13 1.14024928235915e-14 1000000 7.40071917771801e-13 7.17115886245056e-13 1.14024919682275e-14 1258925 7.40072223670276e-13 7.171160107574e-13 1.14024964015382e-14 1584893 7.40072046908196e-13 7.17115936214445e-13 1.14024893025577e-14 1995262 7.40072056776147e-13 7.17115913982718e-13 1.14024926964839e-14 2511886 7.40072392535436e-13 7.17116164652632e-13 1.1402492904229e-14 3162278 7.40071859364656e-13 7.17115701606522e-13 1.14024894435302e-14 3981072 7.40071892599789e-13 7.17115776402386e-13 1.14024918508587e-14 5011872 7.40071920729898e-13 7.17115806056352e-13 1.14024949147701e-14 6309573 7.40071886590532e-13 7.17115952954509e-13 1.14024930093677e-14 7943282 7.40072062243654e-13 7.17115933857523e-13 1.14024928235915e-14 10000000 7.40071917771801e-13 7.17115886245055e-13 1.14024919682275e-14 12589250 7.40072223670276e-13 7.171160107574e-13 1.14024964015382e-14 15848930 7.40072046908196e-13 7.17115936214445e-13 1.14024893025577e-14 19952620 7.40072056776147e-13 7.17115913982718e-13 1.14024926964839e-14 25118860 7.40071758928086e-13 7.17116164652632e-13 1.1402492904229e-14 31622780 7.40071859364656e-13 7.17115701606522e-13 1.14024894435302e-14 39810720 7.40071892599789e-13 7.17115776402386e-13 1.14024878530676e-14 50118720 7.40071920729898e-13 7.17115488500471e-13 1.14024885636524e-14 63095730 7.40071634346928e-13 7.17115448467301e-13 1.14024829196236e-14 79432820 7.40071461151021e-13 7.17115132400679e-13 1.14024767944546e-14 100000000 7.40070962842143e-13 7.17114613005511e-13 1.14024665034366e-14 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_Ig1_vb0_jd.standard0000644000175000017500000002746513546075722025350 0ustar carstencarstenV(g) I(d) I(g) I(s) I(b) 1.000000e+00 1.985791e-04 0.000000e+00 -1.985791e-04 -2.510000e-15 2.000000e+00 1.905495e-03 0.000000e+00 -1.905495e-03 -2.510000e-15 3.000000e+00 2.995490e-03 0.000000e+00 -2.995490e-03 -2.510000e-15 4.000000e+00 3.221923e-03 0.000000e+00 -3.221923e-03 -2.510000e-15 5.000000e+00 3.308489e-03 0.000000e+00 -3.308489e-03 -2.510000e-15 6.000000e+00 3.342406e-03 0.000000e+00 -3.342406e-03 -2.510000e-15 7.000000e+00 3.350467e-03 0.000000e+00 -3.350467e-03 -2.510000e-15 8.000000e+00 3.343975e-03 0.000000e+00 -3.343975e-03 -2.510000e-15 9.000000e+00 3.328604e-03 0.000000e+00 -3.328604e-03 -2.510000e-15 1.000000e+01 3.307535e-03 0.000000e+00 -3.307535e-03 -2.510000e-15 1.100000e+01 3.282699e-03 0.000000e+00 -3.282699e-03 -2.510000e-15 1.200000e+01 3.255332e-03 0.000000e+00 -3.255332e-03 -2.510000e-15 1.300000e+01 3.226266e-03 0.000000e+00 -3.226266e-03 -2.510000e-15 1.400000e+01 3.196076e-03 0.000000e+00 -3.196076e-03 -2.510000e-15 1.500000e+01 3.165171e-03 0.000000e+00 -3.165171e-03 -2.510000e-15 1.600000e+01 3.133849e-03 0.000000e+00 -3.133849e-03 -2.510000e-15 1.700000e+01 3.102328e-03 0.000000e+00 -3.102328e-03 -2.510000e-15 1.800000e+01 3.070774e-03 0.000000e+00 -3.070774e-03 -2.510000e-15 1.900000e+01 3.039310e-03 0.000000e+00 -3.039310e-03 -2.510000e-15 2.000000e+01 3.008029e-03 0.000000e+00 -3.008029e-03 -2.510000e-15 1.000000e+00 1.993696e-04 0.000000e+00 -1.993696e-04 -5.010000e-15 2.000000e+00 1.918195e-03 0.000000e+00 -1.918195e-03 -5.010000e-15 3.000000e+00 4.595441e-03 0.000000e+00 -4.595441e-03 -5.010000e-15 4.000000e+00 5.551464e-03 0.000000e+00 -5.551464e-03 -5.010000e-15 5.000000e+00 5.790825e-03 0.000000e+00 -5.790825e-03 -5.010000e-15 6.000000e+00 5.883976e-03 0.000000e+00 -5.883976e-03 -5.010000e-15 7.000000e+00 5.916620e-03 0.000000e+00 -5.916620e-03 -5.010000e-15 8.000000e+00 5.917978e-03 0.000000e+00 -5.917978e-03 -5.010000e-15 9.000000e+00 5.901130e-03 0.000000e+00 -5.901130e-03 -5.010000e-15 1.000000e+01 5.872900e-03 0.000000e+00 -5.872900e-03 -5.010000e-15 1.100000e+01 5.837227e-03 0.000000e+00 -5.837227e-03 -5.010000e-15 1.200000e+01 5.796551e-03 0.000000e+00 -5.796551e-03 -5.010000e-15 1.300000e+01 5.752465e-03 0.000000e+00 -5.752465e-03 -5.010000e-15 1.400000e+01 5.706054e-03 0.000000e+00 -5.706054e-03 -5.010000e-15 1.500000e+01 5.658082e-03 0.000000e+00 -5.658082e-03 -5.010000e-15 1.600000e+01 5.609098e-03 0.000000e+00 -5.609098e-03 -5.010000e-15 1.700000e+01 5.559504e-03 0.000000e+00 -5.559504e-03 -5.010000e-15 1.800000e+01 5.509604e-03 0.000000e+00 -5.509604e-03 -5.010000e-15 1.900000e+01 5.459624e-03 0.000000e+00 -5.459624e-03 -5.010000e-15 2.000000e+01 5.409739e-03 0.000000e+00 -5.409739e-03 -5.010000e-15 1.000000e+00 2.004556e-04 0.000000e+00 -2.004556e-04 -1.001000e-14 2.000000e+00 1.927784e-03 0.000000e+00 -1.927784e-03 -1.001000e-14 3.000000e+00 4.676996e-03 0.000000e+00 -4.676996e-03 -1.001000e-14 4.000000e+00 7.593537e-03 0.000000e+00 -7.593537e-03 -1.001000e-14 5.000000e+00 9.099142e-03 0.000000e+00 -9.099142e-03 -1.001000e-14 6.000000e+00 9.431103e-03 0.000000e+00 -9.431103e-03 -1.001000e-14 7.000000e+00 9.557222e-03 0.000000e+00 -9.557222e-03 -1.001000e-14 8.000000e+00 9.602359e-03 0.000000e+00 -9.602359e-03 -1.001000e-14 9.000000e+00 9.605954e-03 0.000000e+00 -9.605954e-03 -1.001000e-14 1.000000e+01 9.585332e-03 0.000000e+00 -9.585332e-03 -1.001000e-14 1.100000e+01 9.549470e-03 0.000000e+00 -9.549470e-03 -1.001000e-14 1.200000e+01 9.503533e-03 0.000000e+00 -9.503533e-03 -1.001000e-14 1.300000e+01 9.450721e-03 0.000000e+00 -9.450721e-03 -1.001000e-14 1.400000e+01 9.393124e-03 0.000000e+00 -9.393124e-03 -1.001000e-14 1.500000e+01 9.332169e-03 0.000000e+00 -9.332169e-03 -1.001000e-14 1.600000e+01 9.268862e-03 0.000000e+00 -9.268862e-03 -1.001000e-14 1.700000e+01 9.203931e-03 0.000000e+00 -9.203931e-03 -1.001000e-14 1.800000e+01 9.137912e-03 0.000000e+00 -9.137912e-03 -1.001000e-14 1.900000e+01 9.071214e-03 0.000000e+00 -9.071214e-03 -1.001000e-14 2.000000e+01 9.004144e-03 0.000000e+00 -9.004144e-03 -1.001000e-14 1.000000e+00 1.555802e-04 0.000000e+00 -1.555802e-04 -2.500000e-15 2.000000e+00 2.266374e-03 0.000000e+00 -2.266374e-03 -2.500000e-15 3.000000e+00 3.243131e-03 0.000000e+00 -3.243131e-03 -2.500000e-15 4.000000e+00 3.407560e-03 0.000000e+00 -3.407560e-03 -2.500000e-15 5.000000e+00 3.458892e-03 0.000000e+00 -3.458892e-03 -2.500000e-15 6.000000e+00 3.469311e-03 0.000000e+00 -3.469311e-03 -2.500000e-15 7.000000e+00 3.460312e-03 0.000000e+00 -3.460312e-03 -2.500000e-15 8.000000e+00 3.440752e-03 0.000000e+00 -3.440752e-03 -2.500000e-15 9.000000e+00 3.414987e-03 0.000000e+00 -3.414987e-03 -2.500000e-15 1.000000e+01 3.385424e-03 0.000000e+00 -3.385424e-03 -2.500000e-15 1.100000e+01 3.353497e-03 0.000000e+00 -3.353497e-03 -2.500000e-15 1.200000e+01 3.320112e-03 0.000000e+00 -3.320112e-03 -2.500000e-15 1.300000e+01 3.285868e-03 0.000000e+00 -3.285868e-03 -2.500000e-15 1.400000e+01 3.251173e-03 0.000000e+00 -3.251173e-03 -2.500000e-15 1.500000e+01 3.216311e-03 0.000000e+00 -3.216311e-03 -2.500000e-15 1.600000e+01 3.181485e-03 0.000000e+00 -3.181485e-03 -2.500000e-15 1.700000e+01 3.146841e-03 0.000000e+00 -3.146841e-03 -2.500000e-15 1.800000e+01 3.112484e-03 0.000000e+00 -3.112484e-03 -2.500000e-15 1.900000e+01 3.078492e-03 0.000000e+00 -3.078492e-03 -2.500000e-15 2.000000e+01 3.044920e-03 0.000000e+00 -3.044920e-03 -2.500000e-15 1.000000e+00 1.562223e-04 0.000000e+00 -1.562223e-04 -5.000000e-15 2.000000e+00 2.285952e-03 0.000000e+00 -2.285952e-03 -5.000000e-15 3.000000e+00 5.300935e-03 0.000000e+00 -5.300935e-03 -5.000000e-15 4.000000e+00 5.905785e-03 0.000000e+00 -5.905785e-03 -5.000000e-15 5.000000e+00 6.056768e-03 0.000000e+00 -6.056768e-03 -5.000000e-15 6.000000e+00 6.101078e-03 0.000000e+00 -6.101078e-03 -5.000000e-15 7.000000e+00 6.101263e-03 0.000000e+00 -6.101263e-03 -5.000000e-15 8.000000e+00 6.078996e-03 0.000000e+00 -6.078996e-03 -5.000000e-15 9.000000e+00 6.043970e-03 0.000000e+00 -6.043970e-03 -5.000000e-15 1.000000e+01 6.001214e-03 0.000000e+00 -6.001214e-03 -5.000000e-15 1.100000e+01 5.953607e-03 0.000000e+00 -5.953607e-03 -5.000000e-15 1.200000e+01 5.902920e-03 0.000000e+00 -5.902920e-03 -5.000000e-15 1.300000e+01 5.850296e-03 0.000000e+00 -5.850296e-03 -5.000000e-15 1.400000e+01 5.796506e-03 0.000000e+00 -5.796506e-03 -5.000000e-15 1.500000e+01 5.742084e-03 0.000000e+00 -5.742084e-03 -5.000000e-15 1.600000e+01 5.687411e-03 0.000000e+00 -5.687411e-03 -5.000000e-15 1.700000e+01 5.632759e-03 0.000000e+00 -5.632759e-03 -5.000000e-15 1.800000e+01 5.578329e-03 0.000000e+00 -5.578329e-03 -5.000000e-15 1.900000e+01 5.524271e-03 0.000000e+00 -5.524271e-03 -5.000000e-15 2.000000e+01 5.470694e-03 0.000000e+00 -5.470694e-03 -5.000000e-15 1.000000e+00 1.571120e-04 0.000000e+00 -1.571120e-04 -1.000000e-14 2.000000e+00 2.298375e-03 0.000000e+00 -2.298375e-03 -1.000000e-14 3.000000e+00 5.663006e-03 0.000000e+00 -5.663006e-03 -1.000000e-14 4.000000e+00 8.793192e-03 0.000000e+00 -8.793192e-03 -1.000000e-14 5.000000e+00 9.593453e-03 0.000000e+00 -9.593453e-03 -1.000000e-14 6.000000e+00 9.783670e-03 0.000000e+00 -9.783670e-03 -1.000000e-14 7.000000e+00 9.841325e-03 0.000000e+00 -9.841325e-03 -1.000000e-14 8.000000e+00 9.843124e-03 0.000000e+00 -9.843124e-03 -1.000000e-14 9.000000e+00 9.815938e-03 0.000000e+00 -9.815938e-03 -1.000000e-14 1.000000e+01 9.771962e-03 0.000000e+00 -9.771962e-03 -1.000000e-14 1.100000e+01 9.717594e-03 0.000000e+00 -9.717594e-03 -1.000000e-14 1.200000e+01 9.656536e-03 0.000000e+00 -9.656536e-03 -1.000000e-14 1.300000e+01 9.591077e-03 0.000000e+00 -9.591077e-03 -1.000000e-14 1.400000e+01 9.522713e-03 0.000000e+00 -9.522713e-03 -1.000000e-14 1.500000e+01 9.452458e-03 0.000000e+00 -9.452458e-03 -1.000000e-14 1.600000e+01 9.381021e-03 0.000000e+00 -9.381021e-03 -1.000000e-14 1.700000e+01 9.308913e-03 0.000000e+00 -9.308913e-03 -1.000000e-14 1.800000e+01 9.236508e-03 0.000000e+00 -9.236508e-03 -1.000000e-14 1.900000e+01 9.164082e-03 0.000000e+00 -9.164082e-03 -1.000000e-14 2.000000e+01 9.091845e-03 0.000000e+00 -9.091845e-03 -1.000000e-14 1.000000e+00 2.650470e-04 0.000000e+00 -2.650470e-04 -1.295624e-11 2.000000e+00 1.573396e-03 0.000000e+00 -1.573396e-03 -1.295624e-11 3.000000e+00 2.629240e-03 0.000000e+00 -2.629240e-03 -1.295624e-11 4.000000e+00 2.927808e-03 0.000000e+00 -2.927808e-03 -1.295624e-11 5.000000e+00 3.062055e-03 0.000000e+00 -3.062055e-03 -1.295624e-11 6.000000e+00 3.130052e-03 0.000000e+00 -3.130052e-03 -1.295624e-11 7.000000e+00 3.163917e-03 0.000000e+00 -3.163917e-03 -1.295624e-11 8.000000e+00 3.177778e-03 0.000000e+00 -3.177778e-03 -1.295624e-11 9.000000e+00 3.178945e-03 0.000000e+00 -3.178945e-03 -1.295624e-11 1.000000e+01 3.171625e-03 0.000000e+00 -3.171625e-03 -1.295624e-11 1.100000e+01 3.158422e-03 0.000000e+00 -3.158422e-03 -1.295624e-11 1.200000e+01 3.141043e-03 0.000000e+00 -3.141043e-03 -1.295624e-11 1.300000e+01 3.120653e-03 0.000000e+00 -3.120653e-03 -1.295624e-11 1.400000e+01 3.098073e-03 0.000000e+00 -3.098073e-03 -1.295624e-11 1.500000e+01 3.073901e-03 0.000000e+00 -3.073901e-03 -1.295624e-11 1.600000e+01 3.048577e-03 0.000000e+00 -3.048577e-03 -1.295624e-11 1.700000e+01 3.022436e-03 0.000000e+00 -3.022436e-03 -1.295624e-11 1.800000e+01 2.995731e-03 0.000000e+00 -2.995731e-03 -1.295624e-11 1.900000e+01 2.968659e-03 0.000000e+00 -2.968659e-03 -1.295624e-11 2.000000e+01 2.941376e-03 0.000000e+00 -2.941376e-03 -1.295624e-11 1.000000e+00 2.660431e-04 0.000000e+00 -2.660431e-04 -1.295874e-11 2.000000e+00 1.581964e-03 0.000000e+00 -1.581964e-03 -1.295874e-11 3.000000e+00 3.616453e-03 0.000000e+00 -3.616453e-03 -1.295874e-11 4.000000e+00 4.964386e-03 0.000000e+00 -4.964386e-03 -1.295874e-11 5.000000e+00 5.342245e-03 0.000000e+00 -5.342245e-03 -1.295874e-11 6.000000e+00 5.512473e-03 0.000000e+00 -5.512473e-03 -1.295874e-11 7.000000e+00 5.597273e-03 0.000000e+00 -5.597273e-03 -1.295874e-11 8.000000e+00 5.637182e-03 0.000000e+00 -5.637182e-03 -1.295874e-11 9.000000e+00 5.650376e-03 0.000000e+00 -5.650376e-03 -1.295874e-11 1.000000e+01 5.646408e-03 0.000000e+00 -5.646408e-03 -1.295874e-11 1.100000e+01 5.630844e-03 0.000000e+00 -5.630844e-03 -1.295874e-11 1.200000e+01 5.607166e-03 0.000000e+00 -5.607166e-03 -1.295874e-11 1.300000e+01 5.577675e-03 0.000000e+00 -5.577675e-03 -1.295874e-11 1.400000e+01 5.543953e-03 0.000000e+00 -5.543953e-03 -1.295874e-11 1.500000e+01 5.507129e-03 0.000000e+00 -5.507129e-03 -1.295874e-11 1.600000e+01 5.468023e-03 0.000000e+00 -5.468023e-03 -1.295874e-11 1.700000e+01 5.427250e-03 0.000000e+00 -5.427250e-03 -1.295874e-11 1.800000e+01 5.385276e-03 0.000000e+00 -5.385276e-03 -1.295874e-11 1.900000e+01 5.342459e-03 0.000000e+00 -5.342459e-03 -1.295874e-11 2.000000e+01 5.299080e-03 0.000000e+00 -5.299080e-03 -1.295874e-11 1.000000e+00 2.673907e-04 0.000000e+00 -2.673907e-04 -1.296374e-11 2.000000e+00 1.589278e-03 0.000000e+00 -1.589278e-03 -1.296374e-11 3.000000e+00 3.649857e-03 0.000000e+00 -3.649857e-03 -1.296374e-11 4.000000e+00 6.028447e-03 0.000000e+00 -6.028447e-03 -1.296374e-11 5.000000e+00 8.124130e-03 0.000000e+00 -8.124130e-03 -1.296374e-11 6.000000e+00 8.788602e-03 0.000000e+00 -8.788602e-03 -1.296374e-11 7.000000e+00 9.045584e-03 0.000000e+00 -9.045584e-03 -1.296374e-11 8.000000e+00 9.169542e-03 0.000000e+00 -9.169542e-03 -1.296374e-11 9.000000e+00 9.228187e-03 0.000000e+00 -9.228187e-03 -1.296374e-11 1.000000e+01 9.249059e-03 0.000000e+00 -9.249059e-03 -1.296374e-11 1.100000e+01 9.245998e-03 0.000000e+00 -9.245998e-03 -1.296374e-11 1.200000e+01 9.226853e-03 0.000000e+00 -9.226853e-03 -1.296374e-11 1.300000e+01 9.196460e-03 0.000000e+00 -9.196460e-03 -1.296374e-11 1.400000e+01 9.157973e-03 0.000000e+00 -9.157973e-03 -1.296374e-11 1.500000e+01 9.113550e-03 0.000000e+00 -9.113550e-03 -1.296374e-11 1.600000e+01 9.064714e-03 0.000000e+00 -9.064714e-03 -1.296374e-11 1.700000e+01 9.012578e-03 0.000000e+00 -9.012578e-03 -1.296374e-11 1.800000e+01 8.957969e-03 0.000000e+00 -8.957969e-03 -1.296374e-11 1.900000e+01 8.901515e-03 0.000000e+00 -8.901515e-03 -1.296374e-11 2.000000e+01 8.843703e-03 0.000000e+00 -8.843703e-03 -1.296374e-11 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/acVd_coisti.standard0000644000175000017500000000545013546075722024741 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 1 -3.755550e-05 2.004920e-03 8.46052829072495e-13 3.98727307957158e-13 2 -6.418842e-05 1.863689e-03 8.75727837107133e-13 3.74689301448763e-13 3 -8.073613e-05 1.734333e-03 9.02765344427656e-13 3.52917495553952e-13 4 -8.767276e-05 1.614248e-03 9.2756795114307e-13 3.33252390229539e-13 5 -8.510410e-05 1.501555e-03 9.50466957343076e-13 3.1546708541409e-13 6 -7.268347e-05 1.394606e-03 9.71724663098693e-13 2.99304481037994e-13 7 -4.945379e-05 1.291727e-03 9.9151646845741e-13 2.84484677025468e-13 8 -1.359628e-05 1.191041e-03 1.00989827343436e-12 2.70703673294201e-13 9 3.794376e-05 1.090295e-03 1.02675827799928e-12 2.57635769756009e-13 10 1.099677e-04 9.867020e-04 1.04177928206629e-12 2.44952066321841e-13 11 2.095867e-04 8.768325e-04 1.05443628549323e-12 2.32376362916914e-13 12 3.464164e-04 7.568031e-04 1.06414228812117e-12 2.19819959517213e-13 13 5.311159e-04 6.233193e-04 1.07069128989434e-12 2.07623056214848e-13 14 7.695851e-04 4.765339e-04 1.07502629106806e-12 1.96799753284392e-13 15 1.050778e-03 3.248375e-04 1.07947029227129e-12 1.88739551102057e-13 16 1.335889e-03 1.871803e-04 1.08508029379022e-12 1.83469149675073e-13 17 1.572379e-03 8.395550e-05 1.08291029320269e-12 1.75817947603477e-13 18 1.733786e-03 2.009152e-05 9.77494564660919e-13 1.21418332874543e-13 19 1.743045e-03 1.660553e-05 8.159968209347e-13 4.32504117102377e-14 20 1.749922e-03 1.419596e-05 7.92187814488308e-13 3.14498885151945e-14 1 -1.626082e-05 1.812310e-03 8.15636520837147e-13 4.285109160212e-13 2 -2.266783e-05 1.682795e-03 8.47093329354215e-13 4.04944309640439e-13 3 -1.962163e-05 1.563307e-03 8.76275837255507e-13 3.83357803795798e-13 4 -7.067759e-06 1.451082e-03 9.03472244619053e-13 3.63612498449671e-13 5 1.555597e-05 1.344036e-03 9.28908151505935e-13 3.45460393534909e-13 6 4.951015e-05 1.240159e-03 9.52719557952978e-13 3.28569888961731e-13 7 9.708363e-05 1.137176e-03 9.74888863955414e-13 3.1251518461485e-13 8 1.620883e-04 1.032283e-03 9.95138669438137e-13 2.9676508035044e-13 9 2.504909e-04 9.219315e-04 1.01280727422199e-12 2.80707376002747e-13 10 3.708938e-04 8.018631e-04 1.02679727800984e-12 2.63779371419416e-13 11 5.337881e-04 6.679339e-04 1.03583828045773e-12 2.45816866555989e-13 12 7.469543e-04 5.188744e-04 1.03941428142595e-12 2.2765066163741e-13 13 1.004028e-03 3.616276e-04 1.03904228132523e-12 2.11375857230936e-13 14 1.271699e-03 2.152383e-04 1.03728328084897e-12 1.98655953786966e-13 15 1.497679e-03 1.032909e-04 1.03035327897265e-12 1.85952750347519e-13 16 1.650910e-03 3.444896e-05 9.68394162196945e-13 1.42823338670042e-13 17 1.705356e-03 1.182426e-05 8.11598919743949e-13 4.83992831043171e-14 18 1.711084e-03 9.651885e-06 7.8761061324901e-13 3.35706990894133e-14 19 1.715405e-03 8.149763e-06 7.78377610749135e-13 2.76785574940902e-14 20 1.718849e-03 7.045349e-06 7.73241809358594e-13 2.42975565786695e-14 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_corg.standard0000644000175000017500000001112213546075722024415 0ustar carstencarstenV(d) I(d) 1.000000e+00 8.427493e-11 2.000000e+00 8.502166e-11 3.000000e+00 8.559899e-11 4.000000e+00 8.608885e-11 5.000000e+00 8.652281e-11 6.000000e+00 8.691710e-11 7.000000e+00 8.728132e-11 8.000000e+00 8.762174e-11 9.000000e+00 8.794271e-11 1.000000e+01 8.824741e-11 1.100000e+01 8.853821e-11 1.200000e+01 8.881700e-11 1.300000e+01 8.908523e-11 1.400000e+01 8.934411e-11 1.500000e+01 8.959463e-11 1.600000e+01 8.983760e-11 1.700000e+01 9.007374e-11 1.800000e+01 9.030364e-11 1.900000e+01 9.052780e-11 2.000000e+01 9.074668e-11 1.000000e+00 3.824582e-04 2.000000e+00 3.872716e-04 3.000000e+00 3.899717e-04 4.000000e+00 3.920482e-04 5.000000e+00 3.938115e-04 6.000000e+00 3.953758e-04 7.000000e+00 3.967985e-04 8.000000e+00 3.981135e-04 9.000000e+00 3.993430e-04 1.000000e+01 4.005023e-04 1.100000e+01 4.016026e-04 1.200000e+01 4.026526e-04 1.300000e+01 4.036587e-04 1.400000e+01 4.046264e-04 1.500000e+01 4.055600e-04 1.600000e+01 4.064629e-04 1.700000e+01 4.073382e-04 1.800000e+01 4.081884e-04 1.900000e+01 4.090156e-04 2.000000e+01 4.098218e-04 1.000000e+00 1.313690e-03 2.000000e+00 2.347157e-03 3.000000e+00 3.164447e-03 4.000000e+00 3.810876e-03 5.000000e+00 4.318091e-03 6.000000e+00 4.707608e-03 7.000000e+00 4.992312e-03 8.000000e+00 5.176031e-03 9.000000e+00 5.256913e-03 1.000000e+01 5.285761e-03 1.100000e+01 5.307974e-03 1.200000e+01 5.326141e-03 1.300000e+01 5.341379e-03 1.400000e+01 5.354412e-03 1.500000e+01 5.365753e-03 1.600000e+01 5.375774e-03 1.700000e+01 5.384749e-03 1.800000e+01 5.392880e-03 1.900000e+01 5.400322e-03 2.000000e+01 5.407191e-03 1.000000e+00 2.049879e-14 2.000000e+00 2.170616e-14 3.000000e+00 2.280467e-14 4.000000e+00 2.391837e-14 5.000000e+00 2.501905e-14 6.000000e+00 2.610759e-14 7.000000e+00 2.719353e-14 8.000000e+00 2.827079e-14 9.000000e+00 2.934458e-14 1.000000e+01 3.041838e-14 1.100000e+01 3.148350e-14 1.200000e+01 3.254688e-14 1.300000e+01 3.360853e-14 1.400000e+01 3.467018e-14 1.500000e+01 3.572490e-14 1.600000e+01 3.678134e-14 1.700000e+01 3.783605e-14 1.800000e+01 3.888903e-14 1.900000e+01 3.994027e-14 2.000000e+01 4.098978e-14 1.000000e+00 3.922065e-04 2.000000e+00 3.970399e-04 3.000000e+00 3.997849e-04 4.000000e+00 4.019062e-04 5.000000e+00 4.037124e-04 6.000000e+00 4.053174e-04 7.000000e+00 4.067788e-04 8.000000e+00 4.081306e-04 9.000000e+00 4.093951e-04 1.000000e+01 4.105879e-04 1.100000e+01 4.117205e-04 1.200000e+01 4.128014e-04 1.300000e+01 4.138375e-04 1.400000e+01 4.148341e-04 1.500000e+01 4.157957e-04 1.600000e+01 4.167259e-04 1.700000e+01 4.176277e-04 1.800000e+01 4.185036e-04 1.900000e+01 4.193560e-04 2.000000e+01 4.201868e-04 1.000000e+00 1.426564e-03 2.000000e+00 2.549029e-03 3.000000e+00 3.441418e-03 4.000000e+00 4.155033e-03 5.000000e+00 4.725668e-03 6.000000e+00 5.178750e-03 7.000000e+00 5.532618e-03 8.000000e+00 5.800272e-03 9.000000e+00 5.989773e-03 1.000000e+01 6.103805e-03 1.100000e+01 6.151794e-03 1.200000e+01 6.182322e-03 1.300000e+01 6.206745e-03 1.400000e+01 6.226910e-03 1.500000e+01 6.243895e-03 1.600000e+01 6.258437e-03 1.700000e+01 6.271069e-03 1.800000e+01 6.282187e-03 1.900000e+01 6.292084e-03 2.000000e+01 6.300985e-03 1.000000e+00 1.412627e-07 2.000000e+00 1.425121e-07 3.000000e+00 1.434774e-07 4.000000e+00 1.442961e-07 5.000000e+00 1.450211e-07 6.000000e+00 1.456797e-07 7.000000e+00 1.462878e-07 8.000000e+00 1.468562e-07 9.000000e+00 1.473919e-07 1.000000e+01 1.479004e-07 1.100000e+01 1.483856e-07 1.200000e+01 1.488507e-07 1.300000e+01 1.492981e-07 1.400000e+01 1.497299e-07 1.500000e+01 1.501476e-07 1.600000e+01 1.505527e-07 1.700000e+01 1.509464e-07 1.800000e+01 1.513296e-07 1.900000e+01 1.517032e-07 2.000000e+01 1.520680e-07 1.000000e+00 3.857960e-04 2.000000e+00 3.928454e-04 3.000000e+00 3.956170e-04 4.000000e+00 3.977213e-04 5.000000e+00 3.994967e-04 6.000000e+00 4.010658e-04 7.000000e+00 4.024894e-04 8.000000e+00 4.038030e-04 9.000000e+00 4.050296e-04 1.000000e+01 4.061850e-04 1.100000e+01 4.072808e-04 1.200000e+01 4.083257e-04 1.300000e+01 4.093265e-04 1.400000e+01 4.102887e-04 1.500000e+01 4.112165e-04 1.600000e+01 4.121136e-04 1.700000e+01 4.129830e-04 1.800000e+01 4.138273e-04 1.900000e+01 4.146486e-04 2.000000e+01 4.154488e-04 1.000000e+00 1.152181e-03 2.000000e+00 2.053654e-03 3.000000e+00 2.756607e-03 4.000000e+00 3.297830e-03 5.000000e+00 3.700826e-03 6.000000e+00 3.975984e-03 7.000000e+00 4.121625e-03 8.000000e+00 4.161127e-03 9.000000e+00 4.180754e-03 1.000000e+01 4.196570e-03 1.100000e+01 4.209784e-03 1.200000e+01 4.221087e-03 1.300000e+01 4.230955e-03 1.400000e+01 4.239725e-03 1.500000e+01 4.247638e-03 1.600000e+01 4.254868e-03 1.700000e+01 4.261545e-03 1.800000e+01 4.267766e-03 1.900000e+01 4.273603e-03 2.000000e+01 4.279116e-03 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/acVd_corbnet.standard0000644000175000017500000000545013546075722025103 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 1 -3.719456e-05 2.001961e-03 8.45636728959834e-13 3.99201008085415e-13 2 -6.344656e-05 1.860782e-03 8.75348937004544e-13 3.7519170158479e-13 3 -7.958397e-05 1.731449e-03 9.0243354433782e-13 3.53446695697235e-13 4 -8.606804e-05 1.611350e-03 9.27292851068586e-13 3.33807390379808e-13 5 -8.298677e-05 1.498601e-03 9.5025825728657e-13 3.16047085571127e-13 6 -6.996785e-05 1.391540e-03 9.71592063062791e-13 2.99908281201476e-13 7 -4.601580e-05 1.288476e-03 9.91469168444604e-13 2.8510997719477e-13 8 -9.252445e-06 1.187503e-03 1.00994227344628e-12 2.71345773468052e-13 9 4.346999e-05 1.086328e-03 1.02689727803692e-12 2.58286669932243e-13 10 1.170972e-04 9.821022e-04 1.04200528212748e-12 2.45599066497019e-13 11 2.189517e-04 8.713132e-04 1.05472728557202e-12 2.33003863086813e-13 12 3.589122e-04 7.499949e-04 1.06446428820835e-12 2.20415659678502e-13 13 5.478103e-04 6.148481e-04 1.07101828998288e-12 2.08193756369368e-13 14 7.911893e-04 4.662964e-04 1.07537829116336e-12 1.97387853443623e-13 15 1.076429e-03 3.135070e-04 1.07989629238663e-12 1.89393151279022e-13 16 1.362132e-03 1.764524e-04 1.08539729387605e-12 1.84089949843157e-13 17 1.595043e-03 7.550012e-05 1.08167529286831e-12 1.75696347570553e-13 18 1.743551e-03 1.708521e-05 9.58509459520619e-13 1.12700930514269e-13 19 1.750185e-03 1.476975e-05 8.13299020204259e-13 4.21181714036787e-14 20 1.755474e-03 1.303604e-05 7.91139314204422e-13 3.10630084104451e-14 1 -1.577566e-05 1.808247e-03 8.1506402068214e-13 4.2915751619627e-13 2 -2.165610e-05 1.678742e-03 8.46560829210039e-13 4.05636709827909e-13 3 -1.802667e-05 1.559219e-03 8.75797737126059e-13 3.84093503994992e-13 4 -4.810949e-06 1.446903e-03 9.03062644508152e-13 3.64389298659993e-13 5 1.858540e-05 1.339693e-03 9.28580851417317e-13 3.46275393755574e-13 6 5.347203e-05 1.235550e-03 9.52487557890163e-13 3.29417489191223e-13 7 1.022151e-04 1.132162e-03 9.74761563920947e-13 3.13384184850136e-13 8 1.687494e-04 1.026660e-03 9.95115869431964e-13 2.9763498058597e-13 9 2.592313e-04 9.154084e-04 1.01286927423878e-12 2.81544776229477e-13 10 3.825214e-04 7.940424e-04 1.02689327803584e-12 2.6453967162527e-13 11 5.493403e-04 6.583689e-04 1.03588928047154e-12 2.46462866730897e-13 12 7.672824e-04 5.073296e-04 1.03935828141079e-12 2.28194061784538e-13 13 1.028630e-03 3.486552e-04 1.03889328128489e-12 2.11892057370699e-13 14 1.297403e-03 2.026290e-04 1.03698128076721e-12 1.99134353916495e-13 15 1.519646e-03 9.327865e-05 1.02903727861633e-12 1.85833950315353e-13 16 1.667050e-03 2.763522e-05 9.56265358913019e-13 1.3619163687448e-13 17 1.711568e-03 9.398962e-06 8.0858031892665e-13 4.68300426794384e-14 18 1.715209e-03 8.197387e-06 7.86562312965178e-13 3.31069289638455e-14 19 1.718227e-03 7.265461e-06 7.77757310581186e-13 2.7443007430314e-14 20 1.720863e-03 6.494054e-06 7.72797709238352e-13 2.41515565391393e-14 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_corsrd2.standard0000644000175000017500000001112213546075722025041 0ustar carstencarstenV(d) I(d) 1.000000e+00 7.159579e-03 2.000000e+00 8.058355e-03 3.000000e+00 8.073547e-03 4.000000e+00 8.084210e-03 5.000000e+00 8.092571e-03 6.000000e+00 8.099637e-03 7.000000e+00 8.105874e-03 8.000000e+00 8.111527e-03 9.000000e+00 8.116742e-03 1.000000e+01 8.121610e-03 1.100000e+01 8.126194e-03 1.200000e+01 8.130541e-03 1.300000e+01 8.134685e-03 1.400000e+01 8.138652e-03 1.500000e+01 8.142464e-03 1.600000e+01 8.146138e-03 1.700000e+01 8.149689e-03 1.800000e+01 8.153127e-03 1.900000e+01 8.156464e-03 2.000000e+01 8.159708e-03 1.000000e+00 1.376999e-02 2.000000e+00 2.261782e-02 3.000000e+00 2.682751e-02 4.000000e+00 2.766503e-02 5.000000e+00 2.769236e-02 6.000000e+00 2.771449e-02 7.000000e+00 2.773318e-02 8.000000e+00 2.774929e-02 9.000000e+00 2.776347e-02 1.000000e+01 2.777620e-02 1.100000e+01 2.778780e-02 1.200000e+01 2.779853e-02 1.300000e+01 2.780855e-02 1.400000e+01 2.781798e-02 1.500000e+01 2.782692e-02 1.600000e+01 2.783544e-02 1.700000e+01 2.784360e-02 1.800000e+01 2.785144e-02 1.900000e+01 2.785900e-02 2.000000e+01 2.786630e-02 1.000000e+00 1.444908e-02 2.000000e+00 2.735496e-02 3.000000e+00 3.835233e-02 4.000000e+00 4.724712e-02 5.000000e+00 5.397195e-02 6.000000e+00 5.853968e-02 7.000000e+00 6.114413e-02 8.000000e+00 6.230094e-02 9.000000e+00 6.266085e-02 1.000000e+01 6.270522e-02 1.100000e+01 6.273071e-02 1.200000e+01 6.275418e-02 1.300000e+01 6.277592e-02 1.400000e+01 6.279611e-02 1.500000e+01 6.281492e-02 1.600000e+01 6.283252e-02 1.700000e+01 6.284904e-02 1.800000e+01 6.286463e-02 1.900000e+01 6.287938e-02 2.000000e+01 6.289341e-02 1.000000e+00 8.965944e-03 2.000000e+00 9.812983e-03 3.000000e+00 9.830566e-03 4.000000e+00 9.842956e-03 5.000000e+00 9.852684e-03 6.000000e+00 9.860914e-03 7.000000e+00 9.868185e-03 8.000000e+00 9.874780e-03 9.000000e+00 9.880866e-03 1.000000e+01 9.886549e-03 1.100000e+01 9.891903e-03 1.200000e+01 9.896980e-03 1.300000e+01 9.901821e-03 1.400000e+01 9.906456e-03 1.500000e+01 9.910911e-03 1.600000e+01 9.915204e-03 1.700000e+01 9.919353e-03 1.800000e+01 9.923372e-03 1.900000e+01 9.927272e-03 2.000000e+01 9.931063e-03 1.000000e+00 1.680372e-02 2.000000e+00 2.716184e-02 3.000000e+00 3.177405e-02 4.000000e+00 3.255384e-02 5.000000e+00 3.258274e-02 6.000000e+00 3.260645e-02 7.000000e+00 3.262649e-02 8.000000e+00 3.264377e-02 9.000000e+00 3.265898e-02 1.000000e+01 3.267264e-02 1.100000e+01 3.268510e-02 1.200000e+01 3.269661e-02 1.300000e+01 3.270736e-02 1.400000e+01 3.271749e-02 1.500000e+01 3.272709e-02 1.600000e+01 3.273623e-02 1.700000e+01 3.274499e-02 1.800000e+01 3.275341e-02 1.900000e+01 3.276152e-02 2.000000e+01 3.276936e-02 1.000000e+00 1.609592e-02 2.000000e+00 3.050775e-02 3.000000e+00 4.276890e-02 4.000000e+00 5.263653e-02 5.000000e+00 6.003833e-02 6.000000e+00 6.500786e-02 7.000000e+00 6.779090e-02 8.000000e+00 6.899241e-02 9.000000e+00 6.933944e-02 1.000000e+01 6.937188e-02 1.100000e+01 6.939874e-02 1.200000e+01 6.942348e-02 1.300000e+01 6.944640e-02 1.400000e+01 6.946770e-02 1.500000e+01 6.948754e-02 1.600000e+01 6.950610e-02 1.700000e+01 6.952354e-02 1.800000e+01 6.953998e-02 1.900000e+01 6.955554e-02 2.000000e+01 6.957033e-02 1.000000e+00 5.380452e-03 2.000000e+00 6.357028e-03 3.000000e+00 6.369487e-03 4.000000e+00 6.378124e-03 5.000000e+00 6.384872e-03 6.000000e+00 6.390561e-03 7.000000e+00 6.395574e-03 8.000000e+00 6.400112e-03 9.000000e+00 6.404293e-03 1.000000e+01 6.408193e-03 1.100000e+01 6.411864e-03 1.200000e+01 6.415343e-03 1.300000e+01 6.418658e-03 1.400000e+01 6.421831e-03 1.500000e+01 6.424879e-03 1.600000e+01 6.427816e-03 1.700000e+01 6.430653e-03 1.800000e+01 6.433401e-03 1.900000e+01 6.436067e-03 2.000000e+01 6.438658e-03 1.000000e+00 1.037880e-02 2.000000e+00 1.734487e-02 3.000000e+00 2.093957e-02 4.000000e+00 2.184416e-02 5.000000e+00 2.187796e-02 6.000000e+00 2.189706e-02 7.000000e+00 2.191316e-02 8.000000e+00 2.192701e-02 9.000000e+00 2.193920e-02 1.000000e+01 2.195013e-02 1.100000e+01 2.196010e-02 1.200000e+01 2.196932e-02 1.300000e+01 2.197792e-02 1.400000e+01 2.198601e-02 1.500000e+01 2.199369e-02 1.600000e+01 2.200100e-02 1.700000e+01 2.200800e-02 1.800000e+01 2.201473e-02 1.900000e+01 2.202121e-02 2.000000e+01 2.202747e-02 1.000000e+00 1.215126e-02 2.000000e+00 2.297036e-02 3.000000e+00 3.221319e-02 4.000000e+00 3.974409e-02 5.000000e+00 4.550481e-02 6.000000e+00 4.948819e-02 7.000000e+00 5.182603e-02 8.000000e+00 5.291518e-02 9.000000e+00 5.329113e-02 1.000000e+01 5.336447e-02 1.100000e+01 5.338769e-02 1.200000e+01 5.340896e-02 1.300000e+01 5.342864e-02 1.400000e+01 5.344691e-02 1.500000e+01 5.346394e-02 1.600000e+01 5.347986e-02 1.700000e+01 5.349482e-02 1.800000e+01 5.350892e-02 1.900000e+01 5.352227e-02 2.000000e+01 5.353496e-02 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_COTEMP3.standard0000644000175000017500000000041613546075722024541 0ustar carstencarstenV(d) I(d) 1.000000e+00 2.079133e-03 3.000000e+00 5.804625e-03 5.000000e+00 9.029773e-03 7.000000e+00 1.181419e-02 9.000000e+00 1.418913e-02 1.100000e+01 1.615116e-02 1.300000e+01 1.764650e-02 1.500000e+01 1.857754e-02 1.700000e+01 1.894277e-02 1.900000e+01 1.899732e-02 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_ptl.standard0000644000175000017500000001112213546075722024262 0ustar carstencarstenV(d) I(d) 1.000000e+00 2.884483e-03 2.000000e+00 3.249528e-03 3.000000e+00 3.255704e-03 4.000000e+00 3.260039e-03 5.000000e+00 3.263438e-03 6.000000e+00 3.266311e-03 7.000000e+00 3.268846e-03 8.000000e+00 3.271145e-03 9.000000e+00 3.273265e-03 1.000000e+01 3.275244e-03 1.100000e+01 3.277108e-03 1.200000e+01 3.278875e-03 1.300000e+01 3.280560e-03 1.400000e+01 3.282173e-03 1.500000e+01 3.283723e-03 1.600000e+01 3.285217e-03 1.700000e+01 3.286661e-03 1.800000e+01 3.288059e-03 1.900000e+01 3.289416e-03 2.000000e+01 3.290735e-03 1.000000e+00 5.584900e-03 2.000000e+00 9.256490e-03 3.000000e+00 1.102683e-02 4.000000e+00 1.138086e-02 5.000000e+00 1.139243e-02 6.000000e+00 1.140179e-02 7.000000e+00 1.140970e-02 8.000000e+00 1.141652e-02 9.000000e+00 1.142252e-02 1.000000e+01 1.142790e-02 1.100000e+01 1.143281e-02 1.200000e+01 1.143735e-02 1.300000e+01 1.144159e-02 1.400000e+01 1.144559e-02 1.500000e+01 1.144937e-02 1.600000e+01 1.145298e-02 1.700000e+01 1.145643e-02 1.800000e+01 1.145975e-02 1.900000e+01 1.146295e-02 2.000000e+01 1.146604e-02 1.000000e+00 5.864366e-03 2.000000e+00 1.124972e-02 3.000000e+00 1.595276e-02 4.000000e+00 1.983604e-02 5.000000e+00 2.282045e-02 6.000000e+00 2.487186e-02 7.000000e+00 2.605049e-02 8.000000e+00 2.657609e-02 9.000000e+00 2.673989e-02 1.000000e+01 2.676008e-02 1.100000e+01 2.677169e-02 1.200000e+01 2.678238e-02 1.300000e+01 2.679228e-02 1.400000e+01 2.680147e-02 1.500000e+01 2.681004e-02 1.600000e+01 2.681805e-02 1.700000e+01 2.682558e-02 1.800000e+01 2.683268e-02 1.900000e+01 2.683940e-02 2.000000e+01 2.684579e-02 1.000000e+00 3.618824e-03 2.000000e+00 3.964093e-03 3.000000e+00 3.971266e-03 4.000000e+00 3.976321e-03 5.000000e+00 3.980290e-03 6.000000e+00 3.983648e-03 7.000000e+00 3.986615e-03 8.000000e+00 3.989306e-03 9.000000e+00 3.991789e-03 1.000000e+01 3.994108e-03 1.100000e+01 3.996292e-03 1.200000e+01 3.998364e-03 1.300000e+01 4.000339e-03 1.400000e+01 4.002230e-03 1.500000e+01 4.004048e-03 1.600000e+01 4.005800e-03 1.700000e+01 4.007493e-03 1.800000e+01 4.009133e-03 1.900000e+01 4.010724e-03 2.000000e+01 4.012271e-03 1.000000e+00 6.836362e-03 2.000000e+00 1.116808e-02 3.000000e+00 1.312671e-02 4.000000e+00 1.345970e-02 5.000000e+00 1.347205e-02 6.000000e+00 1.348218e-02 7.000000e+00 1.349075e-02 8.000000e+00 1.349814e-02 9.000000e+00 1.350464e-02 1.000000e+01 1.351048e-02 1.100000e+01 1.351580e-02 1.200000e+01 1.352073e-02 1.300000e+01 1.352532e-02 1.400000e+01 1.352965e-02 1.500000e+01 1.353375e-02 1.600000e+01 1.353767e-02 1.700000e+01 1.354141e-02 1.800000e+01 1.354501e-02 1.900000e+01 1.354848e-02 2.000000e+01 1.355183e-02 1.000000e+00 6.543694e-03 2.000000e+00 1.258711e-02 3.000000e+00 1.787192e-02 4.000000e+00 2.222443e-02 5.000000e+00 2.554927e-02 6.000000e+00 2.781108e-02 7.000000e+00 2.908828e-02 8.000000e+00 2.964204e-02 9.000000e+00 2.980225e-02 1.000000e+01 2.981723e-02 1.100000e+01 2.982963e-02 1.200000e+01 2.984106e-02 1.300000e+01 2.985165e-02 1.400000e+01 2.986149e-02 1.500000e+01 2.987065e-02 1.600000e+01 2.987923e-02 1.700000e+01 2.988728e-02 1.800000e+01 2.989488e-02 1.900000e+01 2.990207e-02 2.000000e+01 2.990890e-02 1.000000e+00 2.163823e-03 2.000000e+00 2.559079e-03 3.000000e+00 2.564127e-03 4.000000e+00 2.567626e-03 5.000000e+00 2.570360e-03 6.000000e+00 2.572665e-03 7.000000e+00 2.574696e-03 8.000000e+00 2.576535e-03 9.000000e+00 2.578229e-03 1.000000e+01 2.579809e-03 1.100000e+01 2.581296e-03 1.200000e+01 2.582706e-03 1.300000e+01 2.584049e-03 1.400000e+01 2.585335e-03 1.500000e+01 2.586570e-03 1.600000e+01 2.587760e-03 1.700000e+01 2.588910e-03 1.800000e+01 2.590023e-03 1.900000e+01 2.591103e-03 2.000000e+01 2.592153e-03 1.000000e+00 4.195061e-03 2.000000e+00 7.060410e-03 3.000000e+00 8.554967e-03 4.000000e+00 8.932792e-03 5.000000e+00 8.946925e-03 6.000000e+00 8.954912e-03 7.000000e+00 8.961640e-03 8.000000e+00 8.967433e-03 9.000000e+00 8.972530e-03 1.000000e+01 8.977102e-03 1.100000e+01 8.981272e-03 1.200000e+01 8.985124e-03 1.300000e+01 8.988721e-03 1.400000e+01 8.992106e-03 1.500000e+01 8.995316e-03 1.600000e+01 8.998374e-03 1.700000e+01 9.001301e-03 1.800000e+01 9.004114e-03 1.900000e+01 9.006825e-03 2.000000e+01 9.009445e-03 1.000000e+00 4.920291e-03 2.000000e+00 9.404162e-03 3.000000e+00 1.331417e-02 4.000000e+00 1.655562e-02 5.000000e+00 1.906969e-02 6.000000e+00 2.082591e-02 7.000000e+00 2.186351e-02 8.000000e+00 2.234866e-02 9.000000e+00 2.251638e-02 1.000000e+01 2.254911e-02 1.100000e+01 2.255947e-02 1.200000e+01 2.256897e-02 1.300000e+01 2.257775e-02 1.400000e+01 2.258591e-02 1.500000e+01 2.259351e-02 1.600000e+01 2.260062e-02 1.700000e+01 2.260730e-02 1.800000e+01 2.261360e-02 1.900000e+01 2.261956e-02 2.000000e+01 2.262522e-02 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_ld2.standard0000644000175000017500000001112213546075722024144 0ustar carstencarstenV(d) I(d) 1.000000e+00 1.483197e-03 2.000000e+00 2.137180e-03 3.000000e+00 2.143397e-03 4.000000e+00 2.144559e-03 5.000000e+00 2.145380e-03 6.000000e+00 2.146027e-03 7.000000e+00 2.146573e-03 8.000000e+00 2.147052e-03 9.000000e+00 2.147484e-03 1.000000e+01 2.147880e-03 1.100000e+01 2.148249e-03 1.200000e+01 2.148594e-03 1.300000e+01 2.148921e-03 1.400000e+01 2.149232e-03 1.500000e+01 2.149528e-03 1.600000e+01 2.149813e-03 1.700000e+01 2.150086e-03 1.800000e+01 2.150350e-03 1.900000e+01 2.150606e-03 2.000000e+01 2.150854e-03 1.000000e+00 2.092671e-03 2.000000e+00 3.928416e-03 3.000000e+00 5.503285e-03 4.000000e+00 6.783673e-03 5.000000e+00 7.673230e-03 6.000000e+00 8.027259e-03 7.000000e+00 8.044472e-03 8.000000e+00 8.050638e-03 9.000000e+00 8.055362e-03 1.000000e+01 8.059129e-03 1.100000e+01 8.062227e-03 1.200000e+01 8.064840e-03 1.300000e+01 8.067092e-03 1.400000e+01 8.069068e-03 1.500000e+01 8.070828e-03 1.600000e+01 8.072415e-03 1.700000e+01 8.073862e-03 1.800000e+01 8.075192e-03 1.900000e+01 8.076424e-03 2.000000e+01 8.077574e-03 1.000000e+00 2.079133e-03 2.000000e+00 4.009372e-03 3.000000e+00 5.804625e-03 4.000000e+00 7.475340e-03 5.000000e+00 9.029773e-03 6.000000e+00 1.047444e-02 7.000000e+00 1.181419e-02 8.000000e+00 1.305209e-02 9.000000e+00 1.418913e-02 1.000000e+01 1.522374e-02 1.100000e+01 1.615116e-02 1.200000e+01 1.696285e-02 1.300000e+01 1.764650e-02 1.400000e+01 1.818798e-02 1.500000e+01 1.857754e-02 1.600000e+01 1.882021e-02 1.700000e+01 1.894277e-02 1.800000e+01 1.898150e-02 1.900000e+01 1.899732e-02 2.000000e+01 1.901119e-02 1.000000e+00 1.789699e-03 2.000000e+00 2.667999e-03 3.000000e+00 2.680550e-03 4.000000e+00 2.682262e-03 5.000000e+00 2.683427e-03 6.000000e+00 2.684323e-03 7.000000e+00 2.685065e-03 8.000000e+00 2.685709e-03 9.000000e+00 2.686283e-03 1.000000e+01 2.686806e-03 1.100000e+01 2.687290e-03 1.200000e+01 2.687742e-03 1.300000e+01 2.688167e-03 1.400000e+01 2.688570e-03 1.500000e+01 2.688954e-03 1.600000e+01 2.689322e-03 1.700000e+01 2.689675e-03 1.800000e+01 2.690015e-03 1.900000e+01 2.690343e-03 2.000000e+01 2.690661e-03 1.000000e+00 2.343809e-03 2.000000e+00 4.423109e-03 3.000000e+00 6.243335e-03 4.000000e+00 7.788994e-03 5.000000e+00 9.000021e-03 6.000000e+00 9.727465e-03 7.000000e+00 9.873946e-03 8.000000e+00 9.886132e-03 9.000000e+00 9.895108e-03 1.000000e+01 9.902056e-03 1.100000e+01 9.907626e-03 1.200000e+01 9.912219e-03 1.300000e+01 9.916096e-03 1.400000e+01 9.919433e-03 1.500000e+01 9.922352e-03 1.600000e+01 9.924942e-03 1.700000e+01 9.927266e-03 1.800000e+01 9.929374e-03 1.900000e+01 9.931301e-03 2.000000e+01 9.933078e-03 1.000000e+00 2.205821e-03 2.000000e+00 4.254090e-03 3.000000e+00 6.159871e-03 4.000000e+00 7.934865e-03 5.000000e+00 9.588646e-03 6.000000e+00 1.112915e-02 7.000000e+00 1.256286e-02 8.000000e+00 1.389478e-02 9.000000e+00 1.512837e-02 1.000000e+01 1.626525e-02 1.100000e+01 1.730493e-02 1.200000e+01 1.824423e-02 1.300000e+01 1.907685e-02 1.400000e+01 1.979306e-02 1.500000e+01 2.038048e-02 1.600000e+01 2.082765e-02 1.700000e+01 2.113148e-02 1.800000e+01 2.130623e-02 1.900000e+01 2.137803e-02 2.000000e+01 2.140123e-02 1.000000e+00 1.155934e-03 2.000000e+00 1.648010e-03 3.000000e+00 1.656307e-03 4.000000e+00 1.657093e-03 5.000000e+00 1.657663e-03 6.000000e+00 1.658121e-03 7.000000e+00 1.658512e-03 8.000000e+00 1.658858e-03 9.000000e+00 1.659172e-03 1.000000e+01 1.659461e-03 1.100000e+01 1.659731e-03 1.200000e+01 1.659985e-03 1.300000e+01 1.660226e-03 1.400000e+01 1.660456e-03 1.500000e+01 1.660675e-03 1.600000e+01 1.660886e-03 1.700000e+01 1.661089e-03 1.800000e+01 1.661285e-03 1.900000e+01 1.661475e-03 2.000000e+01 1.661659e-03 1.000000e+00 1.751105e-03 2.000000e+00 3.258901e-03 3.000000e+00 4.509626e-03 4.000000e+00 5.451600e-03 5.000000e+00 5.978067e-03 6.000000e+00 6.085526e-03 7.000000e+00 6.089432e-03 8.000000e+00 6.092337e-03 9.000000e+00 6.094650e-03 1.000000e+01 6.096555e-03 1.100000e+01 6.098168e-03 1.200000e+01 6.099564e-03 1.300000e+01 6.100797e-03 1.400000e+01 6.101901e-03 1.500000e+01 6.102905e-03 1.600000e+01 6.103826e-03 1.700000e+01 6.104680e-03 1.800000e+01 6.105477e-03 1.900000e+01 6.106225e-03 2.000000e+01 6.106932e-03 1.000000e+00 1.878924e-03 2.000000e+00 3.621433e-03 3.000000e+00 5.239715e-03 4.000000e+00 6.742267e-03 5.000000e+00 8.135223e-03 6.000000e+00 9.422678e-03 7.000000e+00 1.060658e-02 8.000000e+00 1.168631e-02 9.000000e+00 1.265799e-02 1.000000e+01 1.351375e-02 1.100000e+01 1.424128e-02 1.200000e+01 1.482527e-02 1.300000e+01 1.525323e-02 1.400000e+01 1.552673e-02 1.500000e+01 1.567091e-02 1.600000e+01 1.572832e-02 1.700000e+01 1.574223e-02 1.800000e+01 1.575099e-02 1.900000e+01 1.575870e-02 2.000000e+01 1.576557e-02 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_codfm.standard0000644000175000017500000001112213546075722024553 0ustar carstencarstenV(d) I(d) 1.000000e+00 1.044443e-03 2.000000e+00 1.071011e-03 3.000000e+00 1.085732e-03 4.000000e+00 1.096944e-03 5.000000e+00 1.106440e-03 6.000000e+00 1.114862e-03 7.000000e+00 1.122525e-03 8.000000e+00 1.129612e-03 9.000000e+00 1.136243e-03 1.000000e+01 1.142499e-03 1.100000e+01 1.148443e-03 1.200000e+01 1.154118e-03 1.300000e+01 1.159560e-03 1.400000e+01 1.164798e-03 1.500000e+01 1.169854e-03 1.600000e+01 1.174748e-03 1.700000e+01 1.179494e-03 1.800000e+01 1.184107e-03 1.900000e+01 1.188598e-03 2.000000e+01 1.192977e-03 1.000000e+00 3.141509e-03 2.000000e+00 5.436189e-03 3.000000e+00 6.968254e-03 4.000000e+00 7.839727e-03 5.000000e+00 8.175284e-03 6.000000e+00 8.242174e-03 7.000000e+00 8.288124e-03 8.000000e+00 8.323817e-03 9.000000e+00 8.352740e-03 1.000000e+01 8.377062e-03 1.100000e+01 8.398145e-03 1.200000e+01 8.416862e-03 1.300000e+01 8.433784e-03 1.400000e+01 8.449301e-03 1.500000e+01 8.463686e-03 1.600000e+01 8.477139e-03 1.700000e+01 8.489807e-03 1.800000e+01 8.501806e-03 1.900000e+01 8.513224e-03 2.000000e+01 8.524132e-03 1.000000e+00 3.787526e-03 2.000000e+00 6.792992e-03 3.000000e+00 9.222228e-03 4.000000e+00 1.121612e-02 5.000000e+00 1.287312e-02 6.000000e+00 1.426376e-02 7.000000e+00 1.543978e-02 8.000000e+00 1.644009e-02 9.000000e+00 1.729460e-02 1.000000e+01 1.802687e-02 1.100000e+01 1.865584e-02 1.200000e+01 1.919703e-02 1.300000e+01 1.966335e-02 1.400000e+01 2.006570e-02 1.500000e+01 2.041330e-02 1.600000e+01 2.071398e-02 1.700000e+01 2.097440e-02 1.800000e+01 2.120020e-02 1.900000e+01 2.139611e-02 2.000000e+01 2.156614e-02 1.000000e+00 9.568433e-04 2.000000e+00 9.804443e-04 3.000000e+00 9.939254e-04 4.000000e+00 1.004306e-03 5.000000e+00 1.013147e-03 6.000000e+00 1.021013e-03 7.000000e+00 1.028185e-03 8.000000e+00 1.034829e-03 9.000000e+00 1.041052e-03 1.000000e+01 1.046929e-03 1.100000e+01 1.052516e-03 1.200000e+01 1.057855e-03 1.300000e+01 1.062977e-03 1.400000e+01 1.067908e-03 1.500000e+01 1.072671e-03 1.600000e+01 1.077281e-03 1.700000e+01 1.081755e-03 1.800000e+01 1.086104e-03 1.900000e+01 1.090339e-03 2.000000e+01 1.094469e-03 1.000000e+00 3.392371e-03 2.000000e+00 5.891820e-03 3.000000e+00 7.580861e-03 4.000000e+00 8.552116e-03 5.000000e+00 8.966113e-03 6.000000e+00 9.052601e-03 7.000000e+00 9.100367e-03 8.000000e+00 9.136460e-03 9.000000e+00 9.165011e-03 1.000000e+01 9.188492e-03 1.100000e+01 9.208455e-03 1.200000e+01 9.225887e-03 1.300000e+01 9.241429e-03 1.400000e+01 9.255512e-03 1.500000e+01 9.268437e-03 1.600000e+01 9.280420e-03 1.700000e+01 9.291620e-03 1.800000e+01 9.302158e-03 1.900000e+01 9.312128e-03 2.000000e+01 9.321605e-03 1.000000e+00 3.956933e-03 2.000000e+00 7.077937e-03 3.000000e+00 9.591176e-03 4.000000e+00 1.164937e-02 5.000000e+00 1.335774e-02 6.000000e+00 1.479086e-02 7.000000e+00 1.600306e-02 8.000000e+00 1.703493e-02 9.000000e+00 1.791755e-02 1.000000e+01 1.867529e-02 1.100000e+01 1.932771e-02 1.200000e+01 1.989081e-02 1.300000e+01 2.037790e-02 1.400000e+01 2.080018e-02 1.500000e+01 2.116711e-02 1.600000e+01 2.148676e-02 1.700000e+01 2.176596e-02 1.800000e+01 2.201050e-02 1.900000e+01 2.222528e-02 2.000000e+01 2.241445e-02 1.000000e+00 1.158961e-03 2.000000e+00 1.213405e-03 3.000000e+00 1.230132e-03 4.000000e+00 1.242600e-03 5.000000e+00 1.253050e-03 6.000000e+00 1.262261e-03 7.000000e+00 1.270609e-03 8.000000e+00 1.278309e-03 9.000000e+00 1.285497e-03 1.000000e+01 1.292269e-03 1.100000e+01 1.298694e-03 1.200000e+01 1.304821e-03 1.300000e+01 1.310692e-03 1.400000e+01 1.316338e-03 1.500000e+01 1.321785e-03 1.600000e+01 1.327053e-03 1.700000e+01 1.332160e-03 1.800000e+01 1.337121e-03 1.900000e+01 1.341948e-03 2.000000e+01 1.346654e-03 1.000000e+00 2.790180e-03 2.000000e+00 4.806292e-03 3.000000e+00 6.132850e-03 4.000000e+00 6.864333e-03 5.000000e+00 7.100807e-03 6.000000e+00 7.158633e-03 7.000000e+00 7.201443e-03 8.000000e+00 7.235499e-03 9.000000e+00 7.263766e-03 1.000000e+01 7.288061e-03 1.100000e+01 7.309517e-03 1.200000e+01 7.328861e-03 1.300000e+01 7.346577e-03 1.400000e+01 7.362995e-03 1.500000e+01 7.378354e-03 1.600000e+01 7.392826e-03 1.700000e+01 7.406546e-03 1.800000e+01 7.419615e-03 1.900000e+01 7.432114e-03 2.000000e+01 7.444109e-03 1.000000e+00 3.513750e-03 2.000000e+00 6.325524e-03 3.000000e+00 8.609048e-03 4.000000e+00 1.048754e-02 5.000000e+00 1.204914e-02 6.000000e+00 1.335804e-02 7.000000e+00 1.446201e-02 8.000000e+00 1.539738e-02 9.000000e+00 1.619241e-02 1.000000e+01 1.686950e-02 1.100000e+01 1.744679e-02 1.200000e+01 1.793918e-02 1.300000e+01 1.835906e-02 1.400000e+01 1.871677e-02 1.500000e+01 1.902098e-02 1.600000e+01 1.927893e-02 1.700000e+01 1.949664e-02 1.800000e+01 1.967914e-02 1.900000e+01 1.983068e-02 2.000000e+01 1.995498e-02 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/acFreq_coovlp.standard0000644000175000017500000000712013546075722025271 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 5.02490670837342e-13 2.43173155859993e-13 2.67753522735935e-13 1258.925 5.02490938237368e-13 2.43173279076519e-13 2.67753626512025e-13 1584.893 5.02490796853788e-13 2.43173237753903e-13 2.67753541405518e-13 1995.262 5.02490831374956e-13 2.43173251553875e-13 2.6775351879627e-13 2511.886 5.02490798926643e-13 2.43173241829612e-13 2.67753532070872e-13 3162.278 5.02490675000775e-13 2.43173161861449e-13 2.67753443119659e-13 3981.072 5.02490761850095e-13 2.43173200997294e-13 2.67753459817099e-13 5011.872 5.02490900207193e-13 2.43173211351486e-13 2.67753497336545e-13 6309.573 5.02490699147499e-13 2.4317322634074e-13 2.67753558335453e-13 7943.282 5.02490800107442e-13 2.43173226901849e-13 2.6775350758259e-13 10000 5.02490670837342e-13 2.43173155859993e-13 2.67753522735935e-13 12589.25 5.02490938237368e-13 2.43173279076519e-13 2.67753626512025e-13 15848.93 5.02490796853788e-13 2.43173237753903e-13 2.67753541405518e-13 19952.62 5.02490831374956e-13 2.43173251553875e-13 2.6775351879627e-13 25118.86 5.02490798926643e-13 2.43173241829612e-13 2.67753532070872e-13 31622.78 5.02490675000775e-13 2.43173161861449e-13 2.67753443119659e-13 39810.72 5.02490761850095e-13 2.43173200997294e-13 2.67753459817099e-13 50118.72 5.02490900207193e-13 2.43173211351486e-13 2.67753497336545e-13 63095.73 5.02490699147499e-13 2.4317322634074e-13 2.67753558335453e-13 79432.82 5.02490800107442e-13 2.43173226901849e-13 2.6775350758259e-13 100000 5.02490670837342e-13 2.43173155859993e-13 2.67753522735935e-13 125892.5 5.02490938237368e-13 2.43173279076519e-13 2.67753626512024e-13 158489.3 5.02490796853788e-13 2.43173237753903e-13 2.67753541405518e-13 199526.2 5.02490831374956e-13 2.43173251553875e-13 2.6775351879627e-13 251188.6 5.02490798926643e-13 2.43173241829612e-13 2.67753532070872e-13 316227.8 5.02490675000775e-13 2.43173161861449e-13 2.67753443119659e-13 398107.2 5.02490761850095e-13 2.43173200997294e-13 2.67753459817099e-13 501187.2 5.02490900207193e-13 2.43173211351486e-13 2.67753497336545e-13 630957.3 5.02490699147499e-13 2.4317322634074e-13 2.67753558335453e-13 794328.2 5.02490800107442e-13 2.43173226901849e-13 2.6775350758259e-13 1000000 5.02490670837342e-13 2.43173155859993e-13 2.67753522735935e-13 1258925 5.02490938237368e-13 2.43173279076519e-13 2.67753626512024e-13 1584893 5.02490796853788e-13 2.43173237753903e-13 2.67753541405518e-13 1995262 5.02490831374956e-13 2.43173251553875e-13 2.6775351879627e-13 2511886 5.02490798926643e-13 2.43173241829612e-13 2.67753532070872e-13 3162278 5.02490675000775e-13 2.43173161861449e-13 2.67753443119659e-13 3981072 5.02490761850095e-13 2.43173200997294e-13 2.67753459817099e-13 5011872 5.02490900207193e-13 2.43173211351486e-13 2.67753497336545e-13 6309573 5.02490699147499e-13 2.4317322634074e-13 2.67753558335453e-13 7943282 5.02490800107442e-13 2.43173226901849e-13 2.6775350758259e-13 10000000 5.02490670837342e-13 2.43173155859993e-13 2.67753522735935e-13 12589250 5.02490811816062e-13 2.43173279076519e-13 2.67753500090718e-13 15848930 5.02490796853788e-13 2.4317313733391e-13 2.67753541405518e-13 19952620 5.02490751608518e-13 2.43173171787436e-13 2.6775351879627e-13 25118860 5.02490672205173e-13 2.43173115108142e-13 2.67753532070872e-13 31622780 5.02490473683948e-13 2.43172910215416e-13 2.67753443119659e-13 39810720 5.02490362070983e-13 2.4317276124027e-13 2.67753419839188e-13 50118720 5.0249026509543e-13 2.43172576239723e-13 2.67753433825369e-13 63095730 5.02489942416688e-13 2.43172192141966e-13 2.67753306091849e-13 79432820 5.02489397557965e-13 2.43171623988161e-13 2.67753307218379e-13 100000000 5.02488442668139e-13 2.43170609380904e-13 2.67753204426049e-13 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_cosym.standard0000644000175000017500000003371413546075722024630 0ustar carstencarstenV(d) I(d) 1.000000e-01 2.678551e-05 6.000000e-01 1.545405e-04 1.100000e+00 2.696481e-04 1.600000e+00 3.667917e-04 2.100000e+00 4.347044e-04 2.600000e+00 4.539925e-04 3.100000e+00 4.540594e-04 3.600000e+00 4.541022e-04 4.100000e+00 4.541350e-04 4.600000e+00 4.541614e-04 5.100000e+00 4.541835e-04 5.600000e+00 4.542026e-04 6.100000e+00 4.542195e-04 6.600000e+00 4.542347e-04 7.100000e+00 4.542486e-04 7.600000e+00 4.542615e-04 8.100000e+00 4.542735e-04 8.600000e+00 4.542848e-04 9.100000e+00 4.542954e-04 9.600000e+00 4.543056e-04 1.010000e+01 4.543152e-04 1.060000e+01 4.543245e-04 1.110000e+01 4.543334e-04 1.160000e+01 4.543420e-04 1.210000e+01 4.543503e-04 1.260000e+01 4.543584e-04 1.310000e+01 4.543662e-04 1.360000e+01 4.543738e-04 1.410000e+01 4.543811e-04 1.460000e+01 4.543883e-04 1.510000e+01 4.543954e-04 1.560000e+01 4.544022e-04 1.610000e+01 4.544089e-04 1.660000e+01 4.544155e-04 1.710000e+01 4.544219e-04 1.760000e+01 4.544283e-04 1.810000e+01 4.544345e-04 1.860000e+01 4.544405e-04 1.910000e+01 4.544465e-04 1.960000e+01 4.544524e-04 2.010000e+01 4.544582e-04 2.060000e+01 4.544639e-04 2.110000e+01 4.544695e-04 2.160000e+01 4.544750e-04 2.210000e+01 4.544805e-04 2.260000e+01 4.544858e-04 2.310000e+01 4.544911e-04 2.360000e+01 4.544963e-04 2.410000e+01 4.545015e-04 2.460000e+01 4.545066e-04 2.510000e+01 4.545116e-04 2.560000e+01 4.545166e-04 2.610000e+01 4.545215e-04 2.660000e+01 4.545264e-04 2.710000e+01 4.545312e-04 2.760000e+01 4.545359e-04 2.810000e+01 4.545406e-04 2.860000e+01 4.545453e-04 2.910000e+01 4.545499e-04 2.960000e+01 4.545545e-04 3.010000e+01 4.545590e-04 1.000000e-01 3.145100e-05 6.000000e-01 1.870470e-04 1.100000e+00 3.397815e-04 1.600000e+00 4.894787e-04 2.100000e+00 6.359002e-04 2.600000e+00 7.787311e-04 3.100000e+00 9.175549e-04 3.600000e+00 1.051813e-03 4.100000e+00 1.180733e-03 4.600000e+00 1.303215e-03 5.100000e+00 1.417612e-03 5.600000e+00 1.521362e-03 6.100000e+00 1.610391e-03 6.600000e+00 1.678537e-03 7.100000e+00 1.718543e-03 7.600000e+00 1.728799e-03 8.100000e+00 1.729172e-03 8.600000e+00 1.729462e-03 9.100000e+00 1.729705e-03 9.600000e+00 1.729912e-03 1.010000e+01 1.730091e-03 1.060000e+01 1.730247e-03 1.110000e+01 1.730385e-03 1.160000e+01 1.730508e-03 1.210000e+01 1.730619e-03 1.260000e+01 1.730719e-03 1.310000e+01 1.730811e-03 1.360000e+01 1.730895e-03 1.410000e+01 1.730972e-03 1.460000e+01 1.731043e-03 1.510000e+01 1.731110e-03 1.560000e+01 1.731172e-03 1.610000e+01 1.731231e-03 1.660000e+01 1.731285e-03 1.710000e+01 1.731337e-03 1.760000e+01 1.731386e-03 1.810000e+01 1.731433e-03 1.860000e+01 1.731477e-03 1.910000e+01 1.731519e-03 1.960000e+01 1.731560e-03 2.010000e+01 1.731599e-03 2.060000e+01 1.731636e-03 2.110000e+01 1.731671e-03 2.160000e+01 1.731706e-03 2.210000e+01 1.731739e-03 2.260000e+01 1.731771e-03 2.310000e+01 1.731802e-03 2.360000e+01 1.731832e-03 2.410000e+01 1.731861e-03 2.460000e+01 1.731889e-03 2.510000e+01 1.731916e-03 2.560000e+01 1.731943e-03 2.610000e+01 1.731969e-03 2.660000e+01 1.731994e-03 2.710000e+01 1.732018e-03 2.760000e+01 1.732042e-03 2.810000e+01 1.732066e-03 2.860000e+01 1.732089e-03 2.910000e+01 1.732111e-03 2.960000e+01 1.732133e-03 3.010000e+01 1.732154e-03 1.000000e-01 3.085491e-05 6.000000e-01 1.844182e-04 1.100000e+00 3.368177e-04 1.600000e+00 4.880713e-04 2.100000e+00 6.381856e-04 2.600000e+00 7.871581e-04 3.100000e+00 9.349789e-04 3.600000e+00 1.081631e-03 4.100000e+00 1.227090e-03 4.600000e+00 1.371328e-03 5.100000e+00 1.514307e-03 5.600000e+00 1.655985e-03 6.100000e+00 1.796312e-03 6.600000e+00 1.935227e-03 7.100000e+00 2.072663e-03 7.600000e+00 2.208540e-03 8.100000e+00 2.342764e-03 8.600000e+00 2.475225e-03 9.100000e+00 2.605796e-03 9.600000e+00 2.734322e-03 1.010000e+01 2.860621e-03 1.060000e+01 2.984474e-03 1.110000e+01 3.105617e-03 1.160000e+01 3.223728e-03 1.210000e+01 3.338413e-03 1.260000e+01 3.449191e-03 1.310000e+01 3.555468e-03 1.360000e+01 3.656516e-03 1.410000e+01 3.751452e-03 1.460000e+01 3.839218e-03 1.510000e+01 3.918597e-03 1.560000e+01 3.988270e-03 1.610000e+01 4.046974e-03 1.660000e+01 4.093773e-03 1.710000e+01 4.128417e-03 1.760000e+01 4.151643e-03 1.810000e+01 4.165160e-03 1.860000e+01 4.170661e-03 1.910000e+01 4.171660e-03 1.960000e+01 4.172453e-03 2.010000e+01 4.173179e-03 2.060000e+01 4.173847e-03 2.110000e+01 4.174464e-03 2.160000e+01 4.175036e-03 2.210000e+01 4.175567e-03 2.260000e+01 4.176063e-03 2.310000e+01 4.176525e-03 2.360000e+01 4.176959e-03 2.410000e+01 4.177366e-03 2.460000e+01 4.177748e-03 2.510000e+01 4.178109e-03 2.560000e+01 4.178450e-03 2.610000e+01 4.178772e-03 2.660000e+01 4.179078e-03 2.710000e+01 4.179367e-03 2.760000e+01 4.179643e-03 2.810000e+01 4.179906e-03 2.860000e+01 4.180156e-03 2.910000e+01 4.180395e-03 2.960000e+01 4.180623e-03 3.010000e+01 4.180841e-03 1.000000e-01 3.015704e-05 6.000000e-01 1.756186e-04 1.100000e+00 3.102002e-04 1.600000e+00 4.294146e-04 2.100000e+00 5.237042e-04 2.600000e+00 5.687254e-04 3.100000e+00 5.694512e-04 3.600000e+00 5.695271e-04 4.100000e+00 5.695828e-04 4.600000e+00 5.696261e-04 5.100000e+00 5.696613e-04 5.600000e+00 5.696909e-04 6.100000e+00 5.697166e-04 6.600000e+00 5.697393e-04 7.100000e+00 5.697597e-04 7.600000e+00 5.697784e-04 8.100000e+00 5.697956e-04 8.600000e+00 5.698116e-04 9.100000e+00 5.698266e-04 9.600000e+00 5.698408e-04 1.010000e+01 5.698543e-04 1.060000e+01 5.698671e-04 1.110000e+01 5.698794e-04 1.160000e+01 5.698911e-04 1.210000e+01 5.699025e-04 1.260000e+01 5.699134e-04 1.310000e+01 5.699240e-04 1.360000e+01 5.699342e-04 1.410000e+01 5.699442e-04 1.460000e+01 5.699538e-04 1.510000e+01 5.699632e-04 1.560000e+01 5.699724e-04 1.610000e+01 5.699814e-04 1.660000e+01 5.699901e-04 1.710000e+01 5.699987e-04 1.760000e+01 5.700070e-04 1.810000e+01 5.700153e-04 1.860000e+01 5.700233e-04 1.910000e+01 5.700312e-04 1.960000e+01 5.700390e-04 2.010000e+01 5.700466e-04 2.060000e+01 5.700541e-04 2.110000e+01 5.700615e-04 2.160000e+01 5.700687e-04 2.210000e+01 5.700759e-04 2.260000e+01 5.700829e-04 2.310000e+01 5.700899e-04 2.360000e+01 5.700967e-04 2.410000e+01 5.701035e-04 2.460000e+01 5.701101e-04 2.510000e+01 5.701167e-04 2.560000e+01 5.701232e-04 2.610000e+01 5.701296e-04 2.660000e+01 5.701360e-04 2.710000e+01 5.701422e-04 2.760000e+01 5.701484e-04 2.810000e+01 5.701545e-04 2.860000e+01 5.701606e-04 2.910000e+01 5.701666e-04 2.960000e+01 5.701725e-04 3.010000e+01 5.701784e-04 1.000000e-01 3.381826e-05 6.000000e-01 2.015133e-04 1.100000e+00 3.668183e-04 1.600000e+00 5.296188e-04 2.100000e+00 6.897611e-04 2.600000e+00 8.470448e-04 3.100000e+00 1.001210e-03 3.600000e+00 1.151919e-03 4.100000e+00 1.298722e-03 4.600000e+00 1.441011e-03 5.100000e+00 1.577926e-03 5.600000e+00 1.708207e-03 6.100000e+00 1.829916e-03 6.600000e+00 1.939940e-03 7.100000e+00 2.033167e-03 7.600000e+00 2.101606e-03 8.100000e+00 2.135766e-03 8.600000e+00 2.139327e-03 9.100000e+00 2.139920e-03 9.600000e+00 2.140406e-03 1.010000e+01 2.140814e-03 1.060000e+01 2.141162e-03 1.110000e+01 2.141462e-03 1.160000e+01 2.141724e-03 1.210000e+01 2.141955e-03 1.260000e+01 2.142160e-03 1.310000e+01 2.142344e-03 1.360000e+01 2.142511e-03 1.410000e+01 2.142662e-03 1.460000e+01 2.142800e-03 1.510000e+01 2.142928e-03 1.560000e+01 2.143045e-03 1.610000e+01 2.143154e-03 1.660000e+01 2.143255e-03 1.710000e+01 2.143350e-03 1.760000e+01 2.143439e-03 1.810000e+01 2.143522e-03 1.860000e+01 2.143601e-03 1.910000e+01 2.143675e-03 1.960000e+01 2.143746e-03 2.010000e+01 2.143813e-03 2.060000e+01 2.143877e-03 2.110000e+01 2.143938e-03 2.160000e+01 2.143996e-03 2.210000e+01 2.144052e-03 2.260000e+01 2.144106e-03 2.310000e+01 2.144157e-03 2.360000e+01 2.144207e-03 2.410000e+01 2.144255e-03 2.460000e+01 2.144301e-03 2.510000e+01 2.144345e-03 2.560000e+01 2.144388e-03 2.610000e+01 2.144430e-03 2.660000e+01 2.144470e-03 2.710000e+01 2.144509e-03 2.760000e+01 2.144547e-03 2.810000e+01 2.144584e-03 2.860000e+01 2.144620e-03 2.910000e+01 2.144655e-03 2.960000e+01 2.144689e-03 3.010000e+01 2.144723e-03 1.000000e-01 3.210773e-05 6.000000e-01 1.919889e-04 1.100000e+00 3.507940e-04 1.600000e+00 5.085413e-04 2.100000e+00 6.652394e-04 2.600000e+00 8.208895e-04 3.100000e+00 9.754869e-04 3.600000e+00 1.129021e-03 4.100000e+00 1.281476e-03 4.600000e+00 1.432832e-03 5.100000e+00 1.583063e-03 5.600000e+00 1.732140e-03 6.100000e+00 1.880026e-03 6.600000e+00 2.026682e-03 7.100000e+00 2.172058e-03 7.600000e+00 2.316101e-03 8.100000e+00 2.458747e-03 8.600000e+00 2.599922e-03 9.100000e+00 2.739541e-03 9.600000e+00 2.877505e-03 1.010000e+01 3.013698e-03 1.060000e+01 3.147982e-03 1.110000e+01 3.280194e-03 1.160000e+01 3.410141e-03 1.210000e+01 3.537587e-03 1.260000e+01 3.662251e-03 1.310000e+01 3.783788e-03 1.360000e+01 3.901778e-03 1.410000e+01 4.015704e-03 1.460000e+01 4.124930e-03 1.510000e+01 4.228676e-03 1.560000e+01 4.325990e-03 1.610000e+01 4.415735e-03 1.660000e+01 4.496599e-03 1.710000e+01 4.567165e-03 1.760000e+01 4.626085e-03 1.810000e+01 4.672389e-03 1.860000e+01 4.705889e-03 1.910000e+01 4.727484e-03 1.960000e+01 4.738804e-03 2.010000e+01 4.741067e-03 2.060000e+01 4.742282e-03 2.110000e+01 4.743392e-03 2.160000e+01 4.744410e-03 2.210000e+01 4.745348e-03 2.260000e+01 4.746215e-03 2.310000e+01 4.747019e-03 2.360000e+01 4.747767e-03 2.410000e+01 4.748464e-03 2.460000e+01 4.749116e-03 2.510000e+01 4.749727e-03 2.560000e+01 4.750301e-03 2.610000e+01 4.750841e-03 2.660000e+01 4.751350e-03 2.710000e+01 4.751831e-03 2.760000e+01 4.752286e-03 2.810000e+01 4.752717e-03 2.860000e+01 4.753127e-03 2.910000e+01 4.753516e-03 2.960000e+01 4.753886e-03 3.010000e+01 4.754239e-03 1.000000e-01 2.252188e-05 6.000000e-01 1.284105e-04 1.100000e+00 2.207991e-04 1.600000e+00 2.946468e-04 2.100000e+00 3.403758e-04 2.600000e+00 3.500872e-04 3.100000e+00 3.501309e-04 3.600000e+00 3.501558e-04 4.100000e+00 3.501756e-04 4.600000e+00 3.501920e-04 5.100000e+00 3.502060e-04 5.600000e+00 3.502184e-04 6.100000e+00 3.502295e-04 6.600000e+00 3.502396e-04 7.100000e+00 3.502490e-04 7.600000e+00 3.502578e-04 8.100000e+00 3.502660e-04 8.600000e+00 3.502738e-04 9.100000e+00 3.502812e-04 9.600000e+00 3.502883e-04 1.010000e+01 3.502951e-04 1.060000e+01 3.503016e-04 1.110000e+01 3.503079e-04 1.160000e+01 3.503140e-04 1.210000e+01 3.503199e-04 1.260000e+01 3.503257e-04 1.310000e+01 3.503312e-04 1.360000e+01 3.503367e-04 1.410000e+01 3.503420e-04 1.460000e+01 3.503472e-04 1.510000e+01 3.503522e-04 1.560000e+01 3.503572e-04 1.610000e+01 3.503620e-04 1.660000e+01 3.503668e-04 1.710000e+01 3.503715e-04 1.760000e+01 3.503760e-04 1.810000e+01 3.503805e-04 1.860000e+01 3.503850e-04 1.910000e+01 3.503893e-04 1.960000e+01 3.503936e-04 2.010000e+01 3.503978e-04 2.060000e+01 3.504020e-04 2.110000e+01 3.504061e-04 2.160000e+01 3.504101e-04 2.210000e+01 3.504141e-04 2.260000e+01 3.504180e-04 2.310000e+01 3.504219e-04 2.360000e+01 3.504257e-04 2.410000e+01 3.504295e-04 2.460000e+01 3.504332e-04 2.510000e+01 3.504369e-04 2.560000e+01 3.504405e-04 2.610000e+01 3.504441e-04 2.660000e+01 3.504477e-04 2.710000e+01 3.504512e-04 2.760000e+01 3.504547e-04 2.810000e+01 3.504582e-04 2.860000e+01 3.504616e-04 2.910000e+01 3.504650e-04 2.960000e+01 3.504684e-04 3.010000e+01 3.504717e-04 1.000000e-01 2.791887e-05 6.000000e-01 1.654633e-04 1.100000e+00 2.994521e-04 1.600000e+00 4.296234e-04 2.100000e+00 5.556141e-04 2.600000e+00 6.769336e-04 3.100000e+00 7.929143e-04 3.600000e+00 9.026257e-04 4.100000e+00 1.004726e-03 4.600000e+00 1.097207e-03 5.100000e+00 1.177018e-03 5.600000e+00 1.239767e-03 6.100000e+00 1.280539e-03 6.600000e+00 1.297760e-03 7.100000e+00 1.299771e-03 7.600000e+00 1.299922e-03 8.100000e+00 1.300046e-03 8.600000e+00 1.300153e-03 9.100000e+00 1.300245e-03 9.600000e+00 1.300327e-03 1.010000e+01 1.300399e-03 1.060000e+01 1.300464e-03 1.110000e+01 1.300522e-03 1.160000e+01 1.300576e-03 1.210000e+01 1.300624e-03 1.260000e+01 1.300669e-03 1.310000e+01 1.300711e-03 1.360000e+01 1.300750e-03 1.410000e+01 1.300787e-03 1.460000e+01 1.300821e-03 1.510000e+01 1.300853e-03 1.560000e+01 1.300884e-03 1.610000e+01 1.300913e-03 1.660000e+01 1.300940e-03 1.710000e+01 1.300967e-03 1.760000e+01 1.300992e-03 1.810000e+01 1.301016e-03 1.860000e+01 1.301040e-03 1.910000e+01 1.301062e-03 1.960000e+01 1.301084e-03 2.010000e+01 1.301104e-03 2.060000e+01 1.301125e-03 2.110000e+01 1.301144e-03 2.160000e+01 1.301163e-03 2.210000e+01 1.301182e-03 2.260000e+01 1.301199e-03 2.310000e+01 1.301217e-03 2.360000e+01 1.301234e-03 2.410000e+01 1.301250e-03 2.460000e+01 1.301267e-03 2.510000e+01 1.301282e-03 2.560000e+01 1.301298e-03 2.610000e+01 1.301313e-03 2.660000e+01 1.301328e-03 2.710000e+01 1.301342e-03 2.760000e+01 1.301356e-03 2.810000e+01 1.301370e-03 2.860000e+01 1.301384e-03 2.910000e+01 1.301397e-03 2.960000e+01 1.301411e-03 3.010000e+01 1.301424e-03 1.000000e-01 2.877883e-05 6.000000e-01 1.718631e-04 1.100000e+00 3.136231e-04 1.600000e+00 4.540772e-04 2.100000e+00 5.932282e-04 2.600000e+00 7.310664e-04 3.100000e+00 8.675715e-04 3.600000e+00 1.002714e-03 4.100000e+00 1.136455e-03 4.600000e+00 1.268746e-03 5.100000e+00 1.399529e-03 5.600000e+00 1.528734e-03 6.100000e+00 1.656281e-03 6.600000e+00 1.782072e-03 7.100000e+00 1.905995e-03 7.600000e+00 2.027914e-03 8.100000e+00 2.147670e-03 8.600000e+00 2.265070e-03 9.100000e+00 2.379884e-03 9.600000e+00 2.491833e-03 1.010000e+01 2.600575e-03 1.060000e+01 2.705694e-03 1.110000e+01 2.806678e-03 1.160000e+01 2.902901e-03 1.210000e+01 2.993604e-03 1.260000e+01 3.077879e-03 1.310000e+01 3.154676e-03 1.360000e+01 3.222849e-03 1.410000e+01 3.281272e-03 1.460000e+01 3.329052e-03 1.510000e+01 3.365815e-03 1.560000e+01 3.391983e-03 1.610000e+01 3.408857e-03 1.660000e+01 3.418378e-03 1.710000e+01 3.422537e-03 1.760000e+01 3.423470e-03 1.810000e+01 3.423919e-03 1.860000e+01 3.424322e-03 1.910000e+01 3.424694e-03 1.960000e+01 3.425039e-03 2.010000e+01 3.425358e-03 2.060000e+01 3.425656e-03 2.110000e+01 3.425934e-03 2.160000e+01 3.426194e-03 2.210000e+01 3.426439e-03 2.260000e+01 3.426668e-03 2.310000e+01 3.426885e-03 2.360000e+01 3.427090e-03 2.410000e+01 3.427283e-03 2.460000e+01 3.427467e-03 2.510000e+01 3.427641e-03 2.560000e+01 3.427806e-03 2.610000e+01 3.427964e-03 2.660000e+01 3.428115e-03 2.710000e+01 3.428258e-03 2.760000e+01 3.428396e-03 2.810000e+01 3.428527e-03 2.860000e+01 3.428653e-03 2.910000e+01 3.428774e-03 2.960000e+01 3.428891e-03 3.010000e+01 3.429003e-03 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/acVd_coadov.standard0000644000175000017500000000545013546075722024722 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 1 -3.719456e-05 2.001961e-03 8.45636728959834e-13 3.99201008085415e-13 2 -6.344656e-05 1.860782e-03 8.75348937004544e-13 3.7519170158479e-13 3 -7.958397e-05 1.731449e-03 9.0243354433782e-13 3.53446695697235e-13 4 -8.606804e-05 1.611350e-03 9.27292851068586e-13 3.33807390379808e-13 5 -8.298677e-05 1.498601e-03 9.5025825728657e-13 3.16047085571127e-13 6 -6.996785e-05 1.391540e-03 9.71592063062791e-13 2.99908281201476e-13 7 -4.601580e-05 1.288476e-03 9.91469168444604e-13 2.8510997719477e-13 8 -9.252445e-06 1.187503e-03 1.00994227344628e-12 2.71345773468052e-13 9 4.346999e-05 1.086328e-03 1.02689727803692e-12 2.58286669932243e-13 10 1.170972e-04 9.821022e-04 1.04200528212748e-12 2.45599066497019e-13 11 2.189517e-04 8.713132e-04 1.05472728557202e-12 2.33003863086813e-13 12 3.589122e-04 7.499949e-04 1.06446428820835e-12 2.20415659678502e-13 13 5.478103e-04 6.148481e-04 1.07101828998288e-12 2.08193756369368e-13 14 7.911893e-04 4.662964e-04 1.07537829116336e-12 1.97387853443623e-13 15 1.076429e-03 3.135070e-04 1.07989629238663e-12 1.89393151279022e-13 16 1.362132e-03 1.764524e-04 1.08539729387605e-12 1.84089949843157e-13 17 1.595043e-03 7.550012e-05 1.08167529286831e-12 1.75696347570553e-13 18 1.743551e-03 1.708521e-05 9.58509459520619e-13 1.12700930514269e-13 19 1.750185e-03 1.476975e-05 8.13299020204259e-13 4.21181714036787e-14 20 1.755474e-03 1.303604e-05 7.91139314204422e-13 3.10630084104451e-14 1 -1.577566e-05 1.808247e-03 8.1506402068214e-13 4.2915751619627e-13 2 -2.165610e-05 1.678742e-03 8.46560829210039e-13 4.05636709827909e-13 3 -1.802667e-05 1.559219e-03 8.75797737126059e-13 3.84093503994992e-13 4 -4.810949e-06 1.446903e-03 9.03062644508152e-13 3.64389298659993e-13 5 1.858540e-05 1.339693e-03 9.28580851417317e-13 3.46275393755574e-13 6 5.347203e-05 1.235550e-03 9.52487557890163e-13 3.29417489191223e-13 7 1.022151e-04 1.132162e-03 9.74761563920947e-13 3.13384184850136e-13 8 1.687494e-04 1.026660e-03 9.95115869431964e-13 2.9763498058597e-13 9 2.592313e-04 9.154084e-04 1.01286927423878e-12 2.81544776229477e-13 10 3.825214e-04 7.940424e-04 1.02689327803584e-12 2.6453967162527e-13 11 5.493403e-04 6.583689e-04 1.03588928047154e-12 2.46462866730897e-13 12 7.672824e-04 5.073296e-04 1.03935828141079e-12 2.28194061784538e-13 13 1.028630e-03 3.486552e-04 1.03889328128489e-12 2.11892057370699e-13 14 1.297403e-03 2.026290e-04 1.03698128076721e-12 1.99134353916495e-13 15 1.519646e-03 9.327865e-05 1.02903727861633e-12 1.85833950315353e-13 16 1.667050e-03 2.763522e-05 9.56265358913019e-13 1.3619163687448e-13 17 1.711568e-03 9.398962e-06 8.0858031892665e-13 4.68300426794384e-14 18 1.715209e-03 8.197387e-06 7.86562312965178e-13 3.31069289638455e-14 19 1.718227e-03 7.265461e-06 7.77757310581186e-13 2.7443007430314e-14 20 1.720863e-03 6.494054e-06 7.72797709238352e-13 2.41515565391393e-14 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_gidl.standard0000644000175000017500000001605713546075722024416 0ustar carstencarstenV(d) I(d) I(b) 1.000000e+00 1.483197e-03 -1.012500e-15 2.000000e+00 2.137180e-03 -2.012500e-15 3.000000e+00 2.143397e-03 -3.012500e-15 4.000000e+00 2.144559e-03 -4.012500e-15 5.000000e+00 2.145380e-03 -7.134577e-15 6.000000e+00 2.146027e-03 -3.216281e-12 7.000000e+00 2.146573e-03 -1.140040e-10 8.000000e+00 2.147053e-03 -9.957733e-10 9.000000e+00 2.147488e-03 -4.383653e-09 1.000000e+01 2.147893e-03 -1.306871e-08 1.100000e+01 2.148279e-03 -3.050041e-08 1.200000e+01 2.148655e-03 -6.036198e-08 1.300000e+01 2.149027e-03 -1.062693e-07 1.400000e+01 2.149403e-03 -1.716003e-07 1.500000e+01 2.149788e-03 -2.594175e-07 1.600000e+01 2.150185e-03 -3.724481e-07 1.700000e+01 2.150599e-03 -5.130949e-07 1.800000e+01 2.151034e-03 -6.834625e-07 1.900000e+01 2.151491e-03 -8.853885e-07 2.000000e+01 2.151974e-03 -1.120476e-06 1.000000e+00 2.092671e-03 -1.012500e-15 2.000000e+00 3.928416e-03 -2.012500e-15 3.000000e+00 5.503285e-03 -3.012500e-15 4.000000e+00 6.783673e-03 -4.012500e-15 5.000000e+00 7.673230e-03 -5.012500e-15 6.000000e+00 8.027259e-03 -6.012500e-15 7.000000e+00 8.044472e-03 -7.012500e-15 8.000000e+00 8.050638e-03 -8.012500e-15 9.000000e+00 8.055362e-03 -9.012500e-15 1.000000e+01 8.059129e-03 -1.546174e-14 1.100000e+01 8.062227e-03 -3.251433e-12 1.200000e+01 8.064840e-03 -9.073184e-11 1.300000e+01 8.067093e-03 -7.336545e-10 1.400000e+01 8.069072e-03 -3.147805e-09 1.500000e+01 8.070838e-03 -9.326020e-09 1.600000e+01 8.072437e-03 -2.180416e-08 1.700000e+01 8.073905e-03 -4.337331e-08 1.800000e+01 8.075268e-03 -7.685215e-08 1.900000e+01 8.076549e-03 -1.249414e-07 2.000000e+01 8.077763e-03 -1.901454e-07 1.000000e+00 2.079133e-03 -1.012500e-15 2.000000e+00 4.009372e-03 -2.012500e-15 3.000000e+00 5.804625e-03 -3.012500e-15 4.000000e+00 7.475340e-03 -4.012500e-15 5.000000e+00 9.029773e-03 -5.012500e-15 6.000000e+00 1.047444e-02 -6.012500e-15 7.000000e+00 1.181419e-02 -7.012500e-15 8.000000e+00 1.305209e-02 -8.012500e-15 9.000000e+00 1.418913e-02 -9.012500e-15 1.000000e+01 1.522374e-02 -1.001250e-14 1.100000e+01 1.615116e-02 -1.101250e-14 1.200000e+01 1.696285e-02 -1.201250e-14 1.300000e+01 1.764650e-02 -1.301250e-14 1.400000e+01 1.818798e-02 -1.401250e-14 1.500000e+01 1.857754e-02 -1.501250e-14 1.600000e+01 1.882021e-02 -1.601250e-14 1.700000e+01 1.894277e-02 -1.701250e-14 1.800000e+01 1.898150e-02 -1.801250e-14 1.900000e+01 1.899732e-02 -1.901250e-14 2.000000e+01 1.901119e-02 -2.001250e-14 1.000000e+00 1.789699e-03 -1.000000e-15 2.000000e+00 2.667999e-03 -2.000000e-15 3.000000e+00 2.680550e-03 -3.000000e-15 4.000000e+00 2.682262e-03 -4.000000e-15 5.000000e+00 2.683427e-03 -5.340064e-15 6.000000e+00 2.684323e-03 -1.469489e-12 7.000000e+00 2.685066e-03 -7.212679e-11 8.000000e+00 2.685709e-03 -7.297479e-10 9.000000e+00 2.686287e-03 -3.479259e-09 1.000000e+01 2.686817e-03 -1.089022e-08 1.100000e+01 2.687316e-03 -2.624924e-08 1.200000e+01 2.687795e-03 -5.313875e-08 1.300000e+01 2.688262e-03 -9.512167e-08 1.400000e+01 2.688726e-03 -1.555547e-07 1.500000e+01 2.689192e-03 -2.374990e-07 1.600000e+01 2.689665e-03 -3.436913e-07 1.700000e+01 2.690151e-03 -4.765497e-07 1.800000e+01 2.690653e-03 -6.381966e-07 1.900000e+01 2.691174e-03 -8.304879e-07 2.000000e+01 2.691716e-03 -1.055045e-06 1.000000e+00 2.343809e-03 -1.000000e-15 2.000000e+00 4.423109e-03 -2.000000e-15 3.000000e+00 6.243335e-03 -3.000000e-15 4.000000e+00 7.788994e-03 -4.000000e-15 5.000000e+00 9.000021e-03 -5.000000e-15 6.000000e+00 9.727465e-03 -6.000000e-15 7.000000e+00 9.873946e-03 -7.000000e-15 8.000000e+00 9.886132e-03 -8.000000e-15 9.000000e+00 9.895108e-03 -9.000000e-15 1.000000e+01 9.902056e-03 -1.000024e-14 1.100000e+01 9.907626e-03 -6.346179e-14 1.200000e+01 9.912219e-03 -8.650253e-12 1.300000e+01 9.916097e-03 -1.524491e-10 1.400000e+01 9.919434e-03 -9.939540e-10 1.500000e+01 9.922356e-03 -3.794137e-09 1.600000e+01 9.924952e-03 -1.047955e-08 1.700000e+01 9.927290e-03 -2.341917e-08 1.800000e+01 9.929419e-03 -4.517910e-08 1.900000e+01 9.931379e-03 -7.833409e-08 2.000000e+01 9.933203e-03 -1.253475e-07 1.000000e+00 2.205821e-03 -1.000000e-15 2.000000e+00 4.254090e-03 -2.000000e-15 3.000000e+00 6.159871e-03 -3.000000e-15 4.000000e+00 7.934865e-03 -4.000000e-15 5.000000e+00 9.588646e-03 -5.000000e-15 6.000000e+00 1.112915e-02 -6.000000e-15 7.000000e+00 1.256286e-02 -7.000000e-15 8.000000e+00 1.389478e-02 -8.000000e-15 9.000000e+00 1.512837e-02 -9.000000e-15 1.000000e+01 1.626525e-02 -1.000000e-14 1.100000e+01 1.730493e-02 -1.100000e-14 1.200000e+01 1.824423e-02 -1.200000e-14 1.300000e+01 1.907685e-02 -1.300000e-14 1.400000e+01 1.979306e-02 -1.400000e-14 1.500000e+01 2.038048e-02 -1.500000e-14 1.600000e+01 2.082765e-02 -1.600000e-14 1.700000e+01 2.113148e-02 -1.700000e-14 1.800000e+01 2.130623e-02 -1.800000e-14 1.900000e+01 2.137803e-02 -1.900000e-14 2.000000e+01 2.140123e-02 -2.000000e-14 1.000000e+00 1.155934e-03 -1.619318e-11 2.000000e+00 1.648010e-03 -1.619418e-11 3.000000e+00 1.656307e-03 -1.619518e-11 4.000000e+00 1.657093e-03 -1.619618e-11 5.000000e+00 1.657663e-03 -1.620593e-11 6.000000e+00 1.658121e-03 -2.230478e-11 7.000000e+00 1.658512e-03 -1.836606e-10 8.000000e+00 1.658859e-03 -1.314079e-09 9.000000e+00 1.659177e-03 -5.364372e-09 1.000000e+01 1.659477e-03 -1.532193e-08 1.100000e+01 1.659766e-03 -3.477547e-08 1.200000e+01 1.660053e-03 -6.749176e-08 1.300000e+01 1.660343e-03 -1.171288e-07 1.400000e+01 1.660643e-03 -1.870797e-07 1.500000e+01 1.660955e-03 -2.804056e-07 1.600000e+01 1.661285e-03 -3.998237e-07 1.700000e+01 1.661636e-03 -5.477218e-07 1.800000e+01 1.662011e-03 -7.261880e-07 1.900000e+01 1.662411e-03 -9.370429e-07 2.000000e+01 1.662840e-03 -1.181874e-06 1.000000e+00 1.751105e-03 -1.619318e-11 2.000000e+00 3.258901e-03 -1.619418e-11 3.000000e+00 4.509626e-03 -1.619518e-11 4.000000e+00 5.451600e-03 -1.619618e-11 5.000000e+00 5.978067e-03 -1.619718e-11 6.000000e+00 6.085526e-03 -1.619818e-11 7.000000e+00 6.089432e-03 -1.619918e-11 8.000000e+00 6.092337e-03 -1.620018e-11 9.000000e+00 6.094650e-03 -1.620141e-11 1.000000e+01 6.096555e-03 -1.716645e-11 1.100000e+01 6.098168e-03 -6.566748e-11 1.200000e+01 6.099565e-03 -5.365686e-10 1.300000e+01 6.100799e-03 -2.575851e-09 1.400000e+01 6.101910e-03 -8.227709e-09 1.500000e+01 6.102925e-03 -2.020153e-08 1.600000e+01 6.103868e-03 -4.153598e-08 1.700000e+01 6.104755e-03 -7.532338e-08 1.800000e+01 6.105601e-03 -1.245323e-07 1.900000e+01 6.106416e-03 -1.919121e-07 2.000000e+01 6.107211e-03 -2.799532e-07 1.000000e+00 1.878924e-03 -1.619318e-11 2.000000e+00 3.621433e-03 -1.619418e-11 3.000000e+00 5.239715e-03 -1.619518e-11 4.000000e+00 6.742267e-03 -1.619618e-11 5.000000e+00 8.135223e-03 -1.619718e-11 6.000000e+00 9.422678e-03 -1.619818e-11 7.000000e+00 1.060658e-02 -1.619918e-11 8.000000e+00 1.168631e-02 -1.620018e-11 9.000000e+00 1.265799e-02 -1.620118e-11 1.000000e+01 1.351375e-02 -1.620218e-11 1.100000e+01 1.424128e-02 -1.620318e-11 1.200000e+01 1.482527e-02 -1.620418e-11 1.300000e+01 1.525323e-02 -1.620518e-11 1.400000e+01 1.552673e-02 -1.620618e-11 1.500000e+01 1.567091e-02 -1.620718e-11 1.600000e+01 1.572832e-02 -1.620818e-11 1.700000e+01 1.574223e-02 -1.620918e-11 1.800000e+01 1.575099e-02 -1.621018e-11 1.900000e+01 1.575870e-02 -1.621118e-11 2.000000e+01 1.576557e-02 -1.621225e-11 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_lg2.standard0000644000175000017500000001112213546075722024147 0ustar carstencarstenV(g) I(d) 1.000000e+00 1.234927e-05 2.000000e+00 1.243750e-04 3.000000e+00 3.150063e-04 4.000000e+00 4.290332e-04 5.000000e+00 4.749609e-04 6.000000e+00 4.949647e-04 7.000000e+00 5.022724e-04 8.000000e+00 5.025541e-04 9.000000e+00 4.986938e-04 1.000000e+01 4.923159e-04 1.100000e+01 4.843982e-04 1.200000e+01 4.755575e-04 1.300000e+01 4.661948e-04 1.400000e+01 4.565770e-04 1.500000e+01 4.468841e-04 1.600000e+01 4.372381e-04 1.700000e+01 4.277219e-04 1.800000e+01 4.183911e-04 1.900000e+01 4.092822e-04 2.000000e+01 4.004182e-04 1.000000e+00 1.236157e-05 2.000000e+00 1.245014e-04 3.000000e+00 3.193368e-04 4.000000e+00 5.548196e-04 5.000000e+00 7.673230e-04 6.000000e+00 8.577872e-04 7.000000e+00 8.943044e-04 8.000000e+00 9.076290e-04 9.000000e+00 9.088095e-04 1.000000e+01 9.029773e-04 1.100000e+01 8.928946e-04 1.200000e+01 8.801866e-04 1.300000e+01 8.658677e-04 1.400000e+01 8.505964e-04 1.500000e+01 8.348128e-04 1.600000e+01 8.188162e-04 1.700000e+01 8.028130e-04 1.800000e+01 7.869457e-04 1.900000e+01 7.713129e-04 2.000000e+01 7.559817e-04 1.000000e+00 1.237855e-05 2.000000e+00 1.246414e-04 3.000000e+00 3.197654e-04 4.000000e+00 5.560838e-04 5.000000e+00 8.059129e-04 6.000000e+00 1.052414e-03 7.000000e+00 1.284482e-03 8.000000e+00 1.434877e-03 9.000000e+00 1.498798e-03 1.000000e+01 1.522374e-03 1.100000e+01 1.526364e-03 1.200000e+01 1.519580e-03 1.300000e+01 1.506377e-03 1.400000e+01 1.489186e-03 1.500000e+01 1.469480e-03 1.600000e+01 1.448202e-03 1.700000e+01 1.425983e-03 1.800000e+01 1.403257e-03 1.900000e+01 1.380326e-03 2.000000e+01 1.357404e-03 1.000000e+00 9.645003e-06 2.000000e+00 1.508373e-04 3.000000e+00 3.918134e-04 4.000000e+00 5.012019e-04 5.000000e+00 5.365931e-04 6.000000e+00 5.475474e-04 7.000000e+00 5.474671e-04 8.000000e+00 5.417206e-04 9.000000e+00 5.329001e-04 1.000000e+01 5.224001e-04 1.100000e+01 5.110243e-04 1.200000e+01 4.992568e-04 1.300000e+01 4.873974e-04 1.400000e+01 4.756344e-04 1.500000e+01 4.640863e-04 1.600000e+01 4.528265e-04 1.700000e+01 4.418987e-04 1.800000e+01 4.313271e-04 1.900000e+01 4.211225e-04 2.000000e+01 4.112869e-04 1.000000e+00 9.654994e-06 2.000000e+00 1.510005e-04 3.000000e+00 4.028638e-04 4.000000e+00 6.940558e-04 5.000000e+00 9.000021e-04 6.000000e+00 9.628037e-04 7.000000e+00 9.813869e-04 8.000000e+00 9.816698e-04 9.000000e+00 9.727671e-04 1.000000e+01 9.588646e-04 1.100000e+01 9.421727e-04 1.200000e+01 9.239605e-04 1.300000e+01 9.049971e-04 1.400000e+01 8.857650e-04 1.500000e+01 8.665733e-04 1.600000e+01 8.476220e-04 1.700000e+01 8.290397e-04 1.800000e+01 8.109080e-04 1.900000e+01 7.932766e-04 2.000000e+01 7.761730e-04 1.000000e+00 9.668864e-06 2.000000e+00 1.511764e-04 3.000000e+00 4.034979e-04 4.000000e+00 6.963209e-04 5.000000e+00 9.902056e-04 6.000000e+00 1.265793e-03 7.000000e+00 1.495402e-03 8.000000e+00 1.594097e-03 9.000000e+00 1.624127e-03 1.000000e+01 1.626525e-03 1.100000e+01 1.615630e-03 1.200000e+01 1.597543e-03 1.300000e+01 1.575348e-03 1.400000e+01 1.550783e-03 1.500000e+01 1.524901e-03 1.600000e+01 1.498370e-03 1.700000e+01 1.471627e-03 1.800000e+01 1.444968e-03 1.900000e+01 1.418588e-03 2.000000e+01 1.392624e-03 1.000000e+00 1.653597e-05 2.000000e+00 1.012520e-04 3.000000e+00 2.386881e-04 4.000000e+00 3.401345e-04 5.000000e+00 3.918418e-04 6.000000e+00 4.200586e-04 7.000000e+00 4.353794e-04 8.000000e+00 4.428872e-04 9.000000e+00 4.453830e-04 1.000000e+01 4.445508e-04 1.100000e+01 4.414644e-04 1.200000e+01 4.368380e-04 1.300000e+01 4.311610e-04 1.400000e+01 4.247771e-04 1.500000e+01 4.179313e-04 1.600000e+01 4.108008e-04 1.700000e+01 4.035147e-04 1.800000e+01 3.961677e-04 1.900000e+01 3.888292e-04 2.000000e+01 3.815503e-04 1.000000e+00 1.655144e-05 2.000000e+00 1.013489e-04 3.000000e+00 2.411629e-04 4.000000e+00 4.154160e-04 5.000000e+00 5.978067e-04 6.000000e+00 7.087431e-04 7.000000e+00 7.647379e-04 8.000000e+00 7.939591e-04 9.000000e+00 8.083015e-04 1.000000e+01 8.135223e-04 1.100000e+01 8.128256e-04 1.200000e+01 8.081620e-04 1.300000e+01 8.007914e-04 1.400000e+01 7.915627e-04 1.500000e+01 7.810657e-04 1.600000e+01 7.697191e-04 1.700000e+01 7.578258e-04 1.800000e+01 7.456070e-04 1.900000e+01 7.332263e-04 2.000000e+01 7.208047e-04 1.000000e+00 1.657256e-05 2.000000e+00 1.014576e-04 3.000000e+00 2.414463e-04 4.000000e+00 4.161030e-04 5.000000e+00 6.096556e-04 6.000000e+00 8.106116e-04 7.000000e+00 1.010903e-03 8.000000e+00 1.188182e-03 9.000000e+00 1.296009e-03 1.000000e+01 1.351375e-03 1.100000e+01 1.378235e-03 1.200000e+01 1.388994e-03 1.300000e+01 1.389890e-03 1.400000e+01 1.384382e-03 1.500000e+01 1.374560e-03 1.600000e+01 1.361772e-03 1.700000e+01 1.346929e-03 1.800000e+01 1.330668e-03 1.900000e+01 1.313446e-03 2.000000e+01 1.295599e-03 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_corsrd1.standard0000644000175000017500000001112213546075722025040 0ustar carstencarstenV(d) I(d) 1.000000e+00 1.894348e-04 2.000000e+00 2.957130e-04 3.000000e+00 2.987000e-04 4.000000e+00 2.987222e-04 5.000000e+00 2.987380e-04 6.000000e+00 2.987508e-04 7.000000e+00 2.987619e-04 8.000000e+00 2.987719e-04 9.000000e+00 2.987809e-04 1.000000e+01 2.987894e-04 1.100000e+01 2.987973e-04 1.200000e+01 2.988048e-04 1.300000e+01 2.988119e-04 1.400000e+01 2.988186e-04 1.500000e+01 2.988251e-04 1.600000e+01 2.988314e-04 1.700000e+01 2.988374e-04 1.800000e+01 2.988432e-04 1.900000e+01 2.988489e-04 2.000000e+01 2.988544e-04 1.000000e+00 2.344131e-04 2.000000e+00 4.555884e-04 3.000000e+00 6.589428e-04 4.000000e+00 8.353988e-04 5.000000e+00 9.639406e-04 6.000000e+00 1.002492e-03 7.000000e+00 1.002556e-03 8.000000e+00 1.002602e-03 9.000000e+00 1.002640e-03 1.000000e+01 1.002671e-03 1.100000e+01 1.002698e-03 1.200000e+01 1.002722e-03 1.300000e+01 1.002744e-03 1.400000e+01 1.002764e-03 1.500000e+01 1.002783e-03 1.600000e+01 1.002801e-03 1.700000e+01 1.002818e-03 1.800000e+01 1.002834e-03 1.900000e+01 1.002849e-03 2.000000e+01 1.002864e-03 1.000000e+00 2.346478e-04 2.000000e+00 4.657617e-04 3.000000e+00 6.933105e-04 4.000000e+00 9.170145e-04 5.000000e+00 1.136379e-03 6.000000e+00 1.350667e-03 7.000000e+00 1.558833e-03 8.000000e+00 1.759367e-03 9.000000e+00 1.950016e-03 1.000000e+01 2.127211e-03 1.100000e+01 2.284872e-03 1.200000e+01 2.412256e-03 1.300000e+01 2.493427e-03 1.400000e+01 2.521410e-03 1.500000e+01 2.522214e-03 1.600000e+01 2.522295e-03 1.700000e+01 2.522366e-03 1.800000e+01 2.522429e-03 1.900000e+01 2.522486e-03 2.000000e+01 2.522537e-03 1.000000e+00 2.111316e-04 2.000000e+00 3.368447e-04 3.000000e+00 3.404601e-04 4.000000e+00 3.404847e-04 5.000000e+00 3.405021e-04 6.000000e+00 3.405161e-04 7.000000e+00 3.405283e-04 8.000000e+00 3.405391e-04 9.000000e+00 3.405490e-04 1.000000e+01 3.405582e-04 1.100000e+01 3.405669e-04 1.200000e+01 3.405750e-04 1.300000e+01 3.405828e-04 1.400000e+01 3.405902e-04 1.500000e+01 3.405973e-04 1.600000e+01 3.406041e-04 1.700000e+01 3.406107e-04 1.800000e+01 3.406170e-04 1.900000e+01 3.406232e-04 2.000000e+01 3.406292e-04 1.000000e+00 2.488122e-04 2.000000e+00 4.865324e-04 3.000000e+00 7.092498e-04 4.000000e+00 9.091819e-04 5.000000e+00 1.068388e-03 6.000000e+00 1.137962e-03 7.000000e+00 1.138213e-03 8.000000e+00 1.138267e-03 9.000000e+00 1.138310e-03 1.000000e+01 1.138345e-03 1.100000e+01 1.138375e-03 1.200000e+01 1.138402e-03 1.300000e+01 1.138426e-03 1.400000e+01 1.138449e-03 1.500000e+01 1.138469e-03 1.600000e+01 1.138489e-03 1.700000e+01 1.138508e-03 1.800000e+01 1.138525e-03 1.900000e+01 1.138542e-03 2.000000e+01 1.138559e-03 1.000000e+00 2.421843e-04 2.000000e+00 4.813894e-04 3.000000e+00 7.176391e-04 4.000000e+00 9.507360e-04 5.000000e+00 1.180296e-03 6.000000e+00 1.405733e-03 7.000000e+00 1.626208e-03 8.000000e+00 1.840519e-03 9.000000e+00 2.046898e-03 1.000000e+01 2.242604e-03 1.100000e+01 2.423056e-03 1.200000e+01 2.579963e-03 1.300000e+01 2.698130e-03 1.400000e+01 2.758174e-03 1.500000e+01 2.765975e-03 1.600000e+01 2.766071e-03 1.700000e+01 2.766154e-03 1.800000e+01 2.766227e-03 1.900000e+01 2.766291e-03 2.000000e+01 2.766349e-03 1.000000e+00 1.620620e-04 2.000000e+00 2.503876e-04 3.000000e+00 2.543151e-04 4.000000e+00 2.543343e-04 5.000000e+00 2.543482e-04 6.000000e+00 2.543596e-04 7.000000e+00 2.543693e-04 8.000000e+00 2.543781e-04 9.000000e+00 2.543861e-04 1.000000e+01 2.543935e-04 1.100000e+01 2.544005e-04 1.200000e+01 2.544071e-04 1.300000e+01 2.544133e-04 1.400000e+01 2.544193e-04 1.500000e+01 2.544250e-04 1.600000e+01 2.544305e-04 1.700000e+01 2.544358e-04 1.800000e+01 2.544409e-04 1.900000e+01 2.544459e-04 2.000000e+01 2.544507e-04 1.000000e+00 2.122191e-04 2.000000e+00 4.086269e-04 3.000000e+00 5.841211e-04 4.000000e+00 7.286575e-04 5.000000e+00 8.201859e-04 6.000000e+00 8.379271e-04 7.000000e+00 8.379773e-04 8.000000e+00 8.380152e-04 9.000000e+00 8.380461e-04 1.000000e+01 8.380723e-04 1.100000e+01 8.380952e-04 1.200000e+01 8.381157e-04 1.300000e+01 8.381345e-04 1.400000e+01 8.381520e-04 1.500000e+01 8.381683e-04 1.600000e+01 8.381837e-04 1.700000e+01 8.381984e-04 1.800000e+01 8.382124e-04 1.900000e+01 8.382258e-04 2.000000e+01 8.382387e-04 1.000000e+00 2.218687e-04 2.000000e+00 4.393353e-04 3.000000e+00 6.522981e-04 4.000000e+00 8.603610e-04 5.000000e+00 1.062868e-03 6.000000e+00 1.258864e-03 7.000000e+00 1.446987e-03 8.000000e+00 1.625252e-03 9.000000e+00 1.790630e-03 1.000000e+01 1.938219e-03 1.100000e+01 2.059879e-03 1.200000e+01 2.143877e-03 1.300000e+01 2.183053e-03 1.400000e+01 2.190138e-03 1.500000e+01 2.190226e-03 1.600000e+01 2.190291e-03 1.700000e+01 2.190348e-03 1.800000e+01 2.190400e-03 1.900000e+01 2.190447e-03 2.000000e+01 2.190490e-03 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/acFreq.standard0000644000175000017500000000711613546075722023714 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 4.9525166740575e-13 4.65907315618239e-13 6.02168138456251e-14 1258.925 4.95251927814678e-13 4.65907519870822e-13 6.02168322911258e-14 1584.893 4.95251820858143e-13 4.6590739192478e-13 6.02168183458266e-14 1995.262 4.95251787805531e-13 4.65907390272925e-13 6.02168169093902e-14 2511.886 4.95251834957638e-13 4.65907387694116e-13 6.02168196423467e-14 3162.278 4.95251674214084e-13 4.65907280579246e-13 6.02167819849624e-14 3981.072 4.95251561681125e-13 4.65907375045244e-13 6.0216808774635e-14 5011.872 4.95251896332547e-13 4.65907509990891e-13 6.02168198294957e-14 6309.573 4.95251812210378e-13 4.65907304825088e-13 6.0216803829077e-14 7943.282 4.95251841527138e-13 4.65907300636526e-13 6.02168188174867e-14 10000 4.9525166740575e-13 4.65907315618239e-13 6.02168138456251e-14 12589.25 4.95251927814678e-13 4.65907519870822e-13 6.02168322911258e-14 15848.93 4.95251820858143e-13 4.6590739192478e-13 6.02168183458266e-14 19952.62 4.95251787805531e-13 4.65907390272924e-13 6.02168169093902e-14 25118.86 4.95251834957638e-13 4.65907387694116e-13 6.02168196423467e-14 31622.78 4.95251674214084e-13 4.65907280579246e-13 6.02167819849624e-14 39810.72 4.95251561681125e-13 4.65907375045244e-13 6.0216808774635e-14 50118.72 4.95251896332547e-13 4.65907509990891e-13 6.02168198294957e-14 63095.73 4.95251812210378e-13 4.65907304825088e-13 6.0216803829077e-14 79432.82 4.95251841527138e-13 4.65907300636526e-13 6.02168188174867e-14 100000 4.9525166740575e-13 4.65907315618239e-13 6.02168138456251e-14 125892.5 4.95251927814678e-13 4.65907519870822e-13 6.02168322911258e-14 158489.3 4.95251820858143e-13 4.6590739192478e-13 6.02168183458266e-14 199526.2 4.95251787805531e-13 4.65907390272924e-13 6.02168169093902e-14 251188.6 4.95251834957638e-13 4.65907387694116e-13 6.02168196423467e-14 316227.8 4.95251674214084e-13 4.65907280579246e-13 6.02167819849624e-14 398107.2 4.95251561681125e-13 4.65907375045244e-13 6.0216808774635e-14 501187.2 4.95251896332547e-13 4.65907509990891e-13 6.02168198294957e-14 630957.3 4.95251812210378e-13 4.65907304825088e-13 6.0216803829077e-14 794328.2 4.95251841527138e-13 4.65907300636526e-13 6.02168188174867e-14 1000000 4.9525166740575e-13 4.65907315618239e-13 6.02168138456251e-14 1258925 4.95251927814678e-13 4.65907519870822e-13 6.02168322911258e-14 1584893 4.95251820858143e-13 4.6590739192478e-13 6.02168083038273e-14 1995262 4.95251787805531e-13 4.65907390272925e-13 6.02168169093902e-14 2511886 4.95251771596903e-13 4.65907387694116e-13 6.02168133062732e-14 3162278 4.95251623884877e-13 4.65907179920833e-13 6.02167819849624e-14 3981072 4.95251561681126e-13 4.65906975266131e-13 6.02167687967237e-14 5011872 4.95251578776666e-13 4.6590719243501e-13 6.02167880739076e-14 6309573 4.95251559966774e-13 4.65907052581484e-13 6.02167533803563e-14 7943282 4.95251240434505e-13 4.65906899908104e-13 6.02167386718023e-14 10000000 4.95250871631035e-13 4.65906519843523e-13 6.02166865216706e-14 12589250 4.95250663601615e-13 4.65906129236453e-13 6.02166300170357e-14 15848930 4.95249712038302e-13 4.65905283104939e-13 6.021650704385e-14 19952620 4.95248517381563e-13 4.65904119848957e-13 6.02163303341169e-14 25118860 4.95246639377371e-13 4.65902192113849e-13 6.02160466413802e-14 31622780 4.95243470553392e-13 4.65899026589348e-13 6.02155740840017e-14 39810720 4.95238768749526e-13 4.65894182334532e-13 6.02148498569838e-14 50118720 4.9523125520025e-13 4.65886551302712e-13 6.02137395374452e-14 63095730 4.95219020541905e-13 4.65874513156616e-13 6.02119355275269e-14 79432820 4.95199947196481e-13 4.65855205941658e-13 6.02090647225198e-14 100000000 4.95169543455115e-13 4.65824555047831e-13 6.02045270840184e-14 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_she.standard0000644000175000017500000001112213546075722024242 0ustar carstencarstenV(d) I(d) 1.000000e+00 1.271173e-03 2.000000e+00 2.304239e-03 3.000000e+00 3.028995e-03 4.000000e+00 3.193563e-03 5.000000e+00 3.204923e-03 6.000000e+00 3.211527e-03 7.000000e+00 3.215887e-03 8.000000e+00 3.219021e-03 9.000000e+00 3.221404e-03 1.000000e+01 3.223287e-03 1.100000e+01 3.224815e-03 1.200000e+01 3.226078e-03 1.300000e+01 3.227137e-03 1.400000e+01 3.228032e-03 1.500000e+01 3.228794e-03 1.600000e+01 3.229444e-03 1.700000e+01 3.230000e-03 1.800000e+01 3.230474e-03 1.900000e+01 3.230878e-03 2.000000e+01 3.231220e-03 1.000000e+00 1.442818e-03 2.000000e+00 2.722288e-03 3.000000e+00 3.861128e-03 4.000000e+00 4.877959e-03 5.000000e+00 5.787998e-03 6.000000e+00 6.603587e-03 7.000000e+00 7.334554e-03 8.000000e+00 7.988377e-03 9.000000e+00 8.570066e-03 1.000000e+01 9.081582e-03 1.100000e+01 9.520406e-03 1.200000e+01 9.876718e-03 1.300000e+01 1.012983e-02 1.400000e+01 1.025645e-02 1.500000e+01 1.031665e-02 1.600000e+01 1.036373e-02 1.700000e+01 1.040120e-02 1.800000e+01 1.043132e-02 1.900000e+01 1.045570e-02 2.000000e+01 1.047553e-02 1.000000e+00 1.431229e-03 2.000000e+00 2.714368e-03 3.000000e+00 3.870937e-03 4.000000e+00 4.918494e-03 5.000000e+00 5.871512e-03 6.000000e+00 6.742026e-03 7.000000e+00 7.540121e-03 8.000000e+00 8.274309e-03 9.000000e+00 8.951822e-03 1.000000e+01 9.578840e-03 1.100000e+01 1.016068e-02 1.200000e+01 1.070192e-02 1.300000e+01 1.120656e-02 1.400000e+01 1.167807e-02 1.500000e+01 1.211949e-02 1.600000e+01 1.253351e-02 1.700000e+01 1.292248e-02 1.800000e+01 1.328850e-02 1.900000e+01 1.363343e-02 2.000000e+01 1.395892e-02 1.000000e+00 1.382687e-03 2.000000e+00 2.536931e-03 3.000000e+00 3.431627e-03 4.000000e+00 3.856234e-03 5.000000e+00 3.880011e-03 6.000000e+00 3.892233e-03 7.000000e+00 3.899557e-03 8.000000e+00 3.904370e-03 9.000000e+00 3.907725e-03 1.000000e+01 3.910151e-03 1.100000e+01 3.911941e-03 1.200000e+01 3.913273e-03 1.300000e+01 3.914260e-03 1.400000e+01 3.914979e-03 1.500000e+01 3.915484e-03 1.600000e+01 3.915815e-03 1.700000e+01 3.916000e-03 1.800000e+01 3.916062e-03 1.900000e+01 3.916019e-03 2.000000e+01 3.915886e-03 1.000000e+00 1.509164e-03 2.000000e+00 2.846354e-03 3.000000e+00 4.036565e-03 4.000000e+00 5.100240e-03 5.000000e+00 6.054130e-03 6.000000e+00 6.911983e-03 7.000000e+00 7.685073e-03 8.000000e+00 8.382587e-03 9.000000e+00 9.011878e-03 1.000000e+01 9.578568e-03 1.100000e+01 1.008646e-02 1.200000e+01 1.053712e-02 1.300000e+01 1.092903e-02 1.400000e+01 1.125590e-02 1.500000e+01 1.150473e-02 1.600000e+01 1.165796e-02 1.700000e+01 1.174438e-02 1.800000e+01 1.181449e-02 1.900000e+01 1.187227e-02 2.000000e+01 1.192019e-02 1.000000e+00 1.466730e-03 2.000000e+00 2.779378e-03 3.000000e+00 3.960682e-03 4.000000e+00 5.029141e-03 5.000000e+00 5.999960e-03 6.000000e+00 6.885747e-03 7.000000e+00 7.697040e-03 8.000000e+00 8.442713e-03 9.000000e+00 9.130290e-03 1.000000e+01 9.766188e-03 1.100000e+01 1.035591e-02 1.200000e+01 1.090422e-02 1.300000e+01 1.141522e-02 1.400000e+01 1.189252e-02 1.500000e+01 1.233924e-02 1.600000e+01 1.275814e-02 1.700000e+01 1.315167e-02 1.800000e+01 1.352198e-02 1.900000e+01 1.387097e-02 2.000000e+01 1.420036e-02 1.000000e+00 1.116689e-03 2.000000e+00 1.985653e-03 3.000000e+00 2.490612e-03 4.000000e+00 2.532700e-03 5.000000e+00 2.538599e-03 6.000000e+00 2.542445e-03 7.000000e+00 2.545248e-03 8.000000e+00 2.547446e-03 9.000000e+00 2.549256e-03 1.000000e+01 2.550795e-03 1.100000e+01 2.552134e-03 1.200000e+01 2.553321e-03 1.300000e+01 2.554386e-03 1.400000e+01 2.555352e-03 1.500000e+01 2.556234e-03 1.600000e+01 2.557045e-03 1.700000e+01 2.557796e-03 1.800000e+01 2.558493e-03 1.900000e+01 2.559144e-03 2.000000e+01 2.559753e-03 1.000000e+00 1.335779e-03 2.000000e+00 2.520079e-03 3.000000e+00 3.572223e-03 4.000000e+00 4.507867e-03 5.000000e+00 5.339391e-03 6.000000e+00 6.076030e-03 7.000000e+00 6.723561e-03 8.000000e+00 7.283197e-03 9.000000e+00 7.748908e-03 1.000000e+01 8.102444e-03 1.100000e+01 8.311903e-03 1.200000e+01 8.379117e-03 1.300000e+01 8.410000e-03 1.400000e+01 8.433504e-03 1.500000e+01 8.451748e-03 1.600000e+01 8.466090e-03 1.700000e+01 8.477463e-03 1.800000e+01 8.486529e-03 1.900000e+01 8.493771e-03 2.000000e+01 8.499548e-03 1.000000e+00 1.369760e-03 2.000000e+00 2.601222e-03 3.000000e+00 3.713992e-03 4.000000e+00 4.724121e-03 5.000000e+00 5.644899e-03 6.000000e+00 6.487422e-03 7.000000e+00 7.261028e-03 8.000000e+00 7.973625e-03 9.000000e+00 8.631956e-03 1.000000e+01 9.241800e-03 1.100000e+01 9.808135e-03 1.200000e+01 1.033527e-02 1.300000e+01 1.082697e-02 1.400000e+01 1.128649e-02 1.500000e+01 1.171672e-02 1.600000e+01 1.212016e-02 1.700000e+01 1.249906e-02 1.800000e+01 1.285538e-02 1.900000e+01 1.319087e-02 2.000000e+01 1.350707e-02 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/noise2.standard0000644000175000017500000000424113546075722023706 0ustar carstencarstenFreq N(d) 1000 4.25554e-20 1258.925 3.228157e-20 1584.893 2.448808e-20 1995.262 1.857611e-20 2511.886 1.409142e-20 3162.278 1.068943e-20 3981.072 8.108764e-21 5011.872 6.151127e-21 6309.573 4.666107e-21 7943.282 3.539604e-21 10000 2.685064e-21 12589.25 2.036829e-21 15848.93 1.545093e-21 19952.62 1.172073e-21 25118.86 8.891083e-22 31622.78 6.744576e-22 39810.72 5.116284e-22 50118.72 3.881099e-22 63095.73 2.944114e-22 79432.82 2.233339e-22 100000 1.694161e-22 125892.5 1.285153e-22 158489.3 9.748879e-23 199526.2 7.395281e-23 251188.6 5.609894e-23 316227.8 4.25554e-23 398107.2 3.228157e-23 501187.2 2.448808e-23 630957.3 1.857611e-23 794328.2 1.409142e-23 1000000 1.068943e-23 1258925 8.108764e-24 1584893 6.151127e-24 1995262 4.666107e-24 2511886 3.539604e-24 3162278 2.685064e-24 3981072 2.036829e-24 5011872 1.545093e-24 6309573 1.172073e-24 7943282 8.891082e-25 10000000 6.744575e-25 12589250 5.116283e-25 15848930 3.881097e-25 19952620 2.944113e-25 25118860 2.233337e-25 31622780 1.694159e-25 39810720 1.28515e-25 50118720 9.748845e-26 63095730 7.39524e-26 79432820 5.609845e-26 100000000 4.255481e-26 1000 1.27367e-19 1258.925 9.661777e-20 1584.893 7.329208e-20 1995.262 5.559773e-20 2511.886 4.217519e-20 3162.278 3.199315e-20 3981.072 2.426929e-20 5011.872 1.841014e-20 6309.573 1.396552e-20 7943.282 1.059393e-20 10000 8.036316e-21 12589.25 6.096169e-21 15848.93 4.624417e-21 19952.62 3.507979e-21 25118.86 2.661074e-21 31622.78 2.018631e-21 39810.72 1.531289e-21 50118.72 1.161601e-21 63095.73 8.811646e-22 79432.82 6.684317e-22 100000 5.070573e-22 125892.5 3.846423e-22 158489.3 2.91781e-22 199526.2 2.213385e-22 251188.6 1.679024e-22 316227.8 1.27367e-22 398107.2 9.661777e-23 501187.2 7.329208e-23 630957.3 5.559773e-23 794328.2 4.217519e-23 1000000 3.199315e-23 1258925 2.426929e-23 1584893 1.841014e-23 1995262 1.396552e-23 2511886 1.059393e-23 3162278 8.036316e-24 3981072 6.096169e-24 5011872 4.624417e-24 6309573 3.507979e-24 7943282 2.661074e-24 10000000 2.018631e-24 12589250 1.531288e-24 15848930 1.1616e-24 19952620 8.811633e-25 25118860 6.684302e-25 31622780 5.070555e-25 39810720 3.846401e-25 50118720 2.917784e-25 63095730 2.213354e-25 79432820 1.678987e-25 100000000 1.273626e-25 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/acVg_LOVER.standard0000644000175000017500000000263613546075722024344 0ustar carstencarstenV(g) g(d,g) g(d,d) c(g,s) c(g,d) 1 5.446801e-04 1.180949e-07 1.0359692804932e-12 2.00094154176365e-13 2 9.331515e-04 5.920407e-04 1.39426937750452e-12 7.75765910042005e-13 3 3.742364e-04 1.472331e-03 1.46598939692303e-12 7.48481902654741e-13 4 1.706854e-04 1.811299e-03 1.48883740310922e-12 6.91451087213399e-13 5 7.627386e-05 1.963189e-03 1.49675540525306e-12 6.62848279469064e-13 6 2.599031e-05 2.030170e-03 1.49628840512661e-12 6.50916276238422e-13 7 -2.919041e-06 2.052387e-03 1.49078240363584e-12 6.48614475615199e-13 8 -2.024159e-05 2.048962e-03 1.48219340131033e-12 6.52067376550088e-13 9 -3.079768e-05 2.030164e-03 1.47172739847662e-12 6.59036378436975e-13 10 -3.719456e-05 2.001961e-03 1.46015739534399e-12 6.68163580908205e-13 1 4.962997e-04 1.591808e-07 1.03644828062289e-12 2.0406315525099e-13 2 6.481446e-04 4.917116e-04 1.2824443472274e-12 7.83513112139594e-13 3 3.364367e-04 1.132855e-03 1.35238136616316e-12 8.16008020937732e-13 4 1.878495e-04 1.453793e-03 1.38730437561871e-12 7.74227309625423e-13 5 1.068814e-04 1.629628e-03 1.40659638084211e-12 7.44448101562572e-13 6 5.836875e-05 1.728594e-03 1.41622738344974e-12 7.26750996771004e-13 7 2.754836e-05 1.782298e-03 1.41953838434621e-12 7.17630694301642e-13 8 7.237558e-06 1.807550e-03 1.41860738409414e-12 7.14389393424046e-13 9 -6.448065e-06 1.814162e-03 1.41478738305986e-12 7.15182493638781e-13 10 -1.577566e-05 1.808247e-03 1.40899338149111e-12 7.18756794606538e-13 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_Id1_vb0_jd.standard0000644000175000017500000001112213546075722025324 0ustar carstencarstenV(d) I(d) 1.000000e+00 1.483197e-03 2.000000e+00 2.137180e-03 3.000000e+00 2.143397e-03 4.000000e+00 2.144559e-03 5.000000e+00 2.145380e-03 6.000000e+00 2.146027e-03 7.000000e+00 2.146573e-03 8.000000e+00 2.147052e-03 9.000000e+00 2.147484e-03 1.000000e+01 2.147880e-03 1.100000e+01 2.148249e-03 1.200000e+01 2.148594e-03 1.300000e+01 2.148921e-03 1.400000e+01 2.149232e-03 1.500000e+01 2.149528e-03 1.600000e+01 2.149813e-03 1.700000e+01 2.150086e-03 1.800000e+01 2.150350e-03 1.900000e+01 2.150606e-03 2.000000e+01 2.150854e-03 1.000000e+00 2.092671e-03 2.000000e+00 3.928416e-03 3.000000e+00 5.503285e-03 4.000000e+00 6.783673e-03 5.000000e+00 7.673230e-03 6.000000e+00 8.027259e-03 7.000000e+00 8.044472e-03 8.000000e+00 8.050638e-03 9.000000e+00 8.055362e-03 1.000000e+01 8.059129e-03 1.100000e+01 8.062227e-03 1.200000e+01 8.064840e-03 1.300000e+01 8.067092e-03 1.400000e+01 8.069068e-03 1.500000e+01 8.070828e-03 1.600000e+01 8.072415e-03 1.700000e+01 8.073862e-03 1.800000e+01 8.075192e-03 1.900000e+01 8.076424e-03 2.000000e+01 8.077574e-03 1.000000e+00 2.079133e-03 2.000000e+00 4.009372e-03 3.000000e+00 5.804625e-03 4.000000e+00 7.475340e-03 5.000000e+00 9.029773e-03 6.000000e+00 1.047444e-02 7.000000e+00 1.181419e-02 8.000000e+00 1.305209e-02 9.000000e+00 1.418913e-02 1.000000e+01 1.522374e-02 1.100000e+01 1.615116e-02 1.200000e+01 1.696285e-02 1.300000e+01 1.764650e-02 1.400000e+01 1.818798e-02 1.500000e+01 1.857754e-02 1.600000e+01 1.882021e-02 1.700000e+01 1.894277e-02 1.800000e+01 1.898150e-02 1.900000e+01 1.899732e-02 2.000000e+01 1.901119e-02 1.000000e+00 1.789699e-03 2.000000e+00 2.667999e-03 3.000000e+00 2.680550e-03 4.000000e+00 2.682262e-03 5.000000e+00 2.683427e-03 6.000000e+00 2.684323e-03 7.000000e+00 2.685065e-03 8.000000e+00 2.685709e-03 9.000000e+00 2.686283e-03 1.000000e+01 2.686806e-03 1.100000e+01 2.687290e-03 1.200000e+01 2.687742e-03 1.300000e+01 2.688167e-03 1.400000e+01 2.688570e-03 1.500000e+01 2.688954e-03 1.600000e+01 2.689322e-03 1.700000e+01 2.689675e-03 1.800000e+01 2.690015e-03 1.900000e+01 2.690343e-03 2.000000e+01 2.690661e-03 1.000000e+00 2.343809e-03 2.000000e+00 4.423109e-03 3.000000e+00 6.243335e-03 4.000000e+00 7.788994e-03 5.000000e+00 9.000021e-03 6.000000e+00 9.727465e-03 7.000000e+00 9.873946e-03 8.000000e+00 9.886132e-03 9.000000e+00 9.895108e-03 1.000000e+01 9.902056e-03 1.100000e+01 9.907626e-03 1.200000e+01 9.912219e-03 1.300000e+01 9.916096e-03 1.400000e+01 9.919433e-03 1.500000e+01 9.922352e-03 1.600000e+01 9.924942e-03 1.700000e+01 9.927266e-03 1.800000e+01 9.929374e-03 1.900000e+01 9.931301e-03 2.000000e+01 9.933078e-03 1.000000e+00 2.205821e-03 2.000000e+00 4.254090e-03 3.000000e+00 6.159871e-03 4.000000e+00 7.934865e-03 5.000000e+00 9.588646e-03 6.000000e+00 1.112915e-02 7.000000e+00 1.256286e-02 8.000000e+00 1.389478e-02 9.000000e+00 1.512837e-02 1.000000e+01 1.626525e-02 1.100000e+01 1.730493e-02 1.200000e+01 1.824423e-02 1.300000e+01 1.907685e-02 1.400000e+01 1.979306e-02 1.500000e+01 2.038048e-02 1.600000e+01 2.082765e-02 1.700000e+01 2.113148e-02 1.800000e+01 2.130623e-02 1.900000e+01 2.137803e-02 2.000000e+01 2.140123e-02 1.000000e+00 1.155934e-03 2.000000e+00 1.648010e-03 3.000000e+00 1.656307e-03 4.000000e+00 1.657093e-03 5.000000e+00 1.657663e-03 6.000000e+00 1.658121e-03 7.000000e+00 1.658512e-03 8.000000e+00 1.658858e-03 9.000000e+00 1.659172e-03 1.000000e+01 1.659461e-03 1.100000e+01 1.659731e-03 1.200000e+01 1.659985e-03 1.300000e+01 1.660226e-03 1.400000e+01 1.660456e-03 1.500000e+01 1.660675e-03 1.600000e+01 1.660886e-03 1.700000e+01 1.661089e-03 1.800000e+01 1.661285e-03 1.900000e+01 1.661475e-03 2.000000e+01 1.661659e-03 1.000000e+00 1.751105e-03 2.000000e+00 3.258901e-03 3.000000e+00 4.509626e-03 4.000000e+00 5.451600e-03 5.000000e+00 5.978067e-03 6.000000e+00 6.085526e-03 7.000000e+00 6.089432e-03 8.000000e+00 6.092337e-03 9.000000e+00 6.094650e-03 1.000000e+01 6.096555e-03 1.100000e+01 6.098168e-03 1.200000e+01 6.099564e-03 1.300000e+01 6.100797e-03 1.400000e+01 6.101901e-03 1.500000e+01 6.102905e-03 1.600000e+01 6.103826e-03 1.700000e+01 6.104680e-03 1.800000e+01 6.105476e-03 1.900000e+01 6.106225e-03 2.000000e+01 6.106932e-03 1.000000e+00 1.878924e-03 2.000000e+00 3.621433e-03 3.000000e+00 5.239715e-03 4.000000e+00 6.742267e-03 5.000000e+00 8.135223e-03 6.000000e+00 9.422678e-03 7.000000e+00 1.060658e-02 8.000000e+00 1.168631e-02 9.000000e+00 1.265799e-02 1.000000e+01 1.351375e-02 1.100000e+01 1.424128e-02 1.200000e+01 1.482527e-02 1.300000e+01 1.525323e-02 1.400000e+01 1.552673e-02 1.500000e+01 1.567091e-02 1.600000e+01 1.572832e-02 1.700000e+01 1.574223e-02 1.800000e+01 1.575099e-02 1.900000e+01 1.575870e-02 2.000000e+01 1.576557e-02 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_NF_RTH0W.standard0000644000175000017500000000041613546075722024716 0ustar carstencarstenV(d) I(d) 1.000000e+00 2.070691e-03 3.000000e+00 5.611884e-03 5.000000e+00 8.285243e-03 7.000000e+00 1.011965e-02 9.000000e+00 1.118866e-02 1.100000e+01 1.153758e-02 1.300000e+01 1.130688e-02 1.500000e+01 1.086315e-02 1.700000e+01 1.043522e-02 1.900000e+01 1.005914e-02 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/noise1.standard0000644000175000017500000000425013546075722023705 0ustar carstencarstenFreq N(d) 1000 5.851826e-23 1258.925 5.851826e-23 1584.893 5.851826e-23 1995.262 5.851826e-23 2511.886 5.851826e-23 3162.278 5.851826e-23 3981.072 5.851826e-23 5011.872 5.851826e-23 6309.573 5.851826e-23 7943.282 5.851826e-23 10000 5.851826e-23 12589.25 5.851826e-23 15848.93 5.851826e-23 19952.62 5.851826e-23 25118.86 5.851826e-23 31622.78 5.851826e-23 39810.72 5.851826e-23 50118.72 5.851826e-23 63095.73 5.851826e-23 79432.82 5.851826e-23 100000 5.851826e-23 125892.5 5.851826e-23 158489.3 5.851826e-23 199526.2 5.851826e-23 251188.6 5.851826e-23 316227.8 5.851826e-23 398107.2 5.851826e-23 501187.2 5.851826e-23 630957.3 5.851826e-23 794328.2 5.851826e-23 1000000 5.851826e-23 1258925 5.851826e-23 1584893 5.851826e-23 1995262 5.851826e-23 2511886 5.851826e-23 3162278 5.851826e-23 3981072 5.851826e-23 5011872 5.851826e-23 6309573 5.851826e-23 7943282 5.851826e-23 10000000 5.851827e-23 12589250 5.851828e-23 15848930 5.851829e-23 19952620 5.851831e-23 25118860 5.851834e-23 31622780 5.851839e-23 39810720 5.851847e-23 50118720 5.85186e-23 63095730 5.851879e-23 79432820 5.851911e-23 100000000 5.851961e-23 1000 6.305361e-23 1258.925 6.305361e-23 1584.893 6.305361e-23 1995.262 6.305361e-23 2511.886 6.305361e-23 3162.278 6.305361e-23 3981.072 6.305361e-23 5011.872 6.305361e-23 6309.573 6.305361e-23 7943.282 6.305361e-23 10000 6.305361e-23 12589.25 6.305361e-23 15848.93 6.305361e-23 19952.62 6.305361e-23 25118.86 6.305361e-23 31622.78 6.305361e-23 39810.72 6.305361e-23 50118.72 6.305361e-23 63095.73 6.305361e-23 79432.82 6.305361e-23 100000 6.305361e-23 125892.5 6.305361e-23 158489.3 6.305361e-23 199526.2 6.305361e-23 251188.6 6.305361e-23 316227.8 6.305361e-23 398107.2 6.305361e-23 501187.2 6.305361e-23 630957.3 6.305361e-23 794328.2 6.305361e-23 1000000 6.305361e-23 1258925 6.305361e-23 1584893 6.305361e-23 1995262 6.305361e-23 2511886 6.305361e-23 3162278 6.305361e-23 3981072 6.305361e-23 5011872 6.305361e-23 6309573 6.305361e-23 7943282 6.305362e-23 10000000 6.305362e-23 12589250 6.305363e-23 15848930 6.305365e-23 19952620 6.305367e-23 25118860 6.30537e-23 31622780 6.305376e-23 39810720 6.305385e-23 50118720 6.305399e-23 63095730 6.305422e-23 79432820 6.305458e-23 100000000 6.305515e-23 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_COTEMP1.standard0000644000175000017500000000041613546075722024537 0ustar carstencarstenV(d) I(d) 1.000000e+00 2.079133e-03 3.000000e+00 5.804625e-03 5.000000e+00 9.029773e-03 7.000000e+00 1.181419e-02 9.000000e+00 1.418913e-02 1.100000e+01 1.615116e-02 1.300000e+01 1.764650e-02 1.500000e+01 1.857754e-02 1.700000e+01 1.894277e-02 1.900000e+01 1.899732e-02 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/acVd_corsrd2.standard0000644000175000017500000000547213546075722025031 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 1 -9.020265e-05 2.554367e-03 5.10985938351673e-13 7.30492797784113e-13 2 -1.766585e-04 2.543466e-03 5.23520841745552e-13 7.18035294411189e-13 3 -2.585846e-04 2.530068e-03 5.36781445335919e-13 7.04564890764019e-13 4 -3.343817e-04 2.508651e-03 5.507209491101e-13 6.89862986783414e-13 5 -4.017729e-04 2.474841e-03 5.65362553074378e-13 6.73639282390775e-13 6 -4.577285e-04 2.424254e-03 5.8079935725396e-13 6.55480677474254e-13 7 -4.982885e-04 2.351939e-03 5.97195161693196e-13 6.34797371874158e-13 8 -5.183633e-04 2.252144e-03 6.14759166448727e-13 6.10793365374969e-13 9 -5.116843e-04 2.118532e-03 6.33666671568016e-13 5.82517357719117e-13 10 -4.712726e-04 1.945294e-03 6.53899677046191e-13 5.49081648666252e-13 11 -3.909870e-04 1.729626e-03 6.7502018276466e-13 5.10136738121748e-13 12 -2.685479e-04 1.475496e-03 6.95983988440702e-13 4.66552626321159e-13 13 -1.092702e-04 1.196955e-03 7.15214993647581e-13 4.20924413967122e-13 14 7.220050e-05 9.174618e-04 7.31104297949679e-13 3.77230402136777e-13 15 2.551153e-04 6.630854e-04 7.42729201097172e-13 3.3937259188661e-13 16 4.199691e-04 4.530106e-04 7.50223803126368e-13 3.09446883784094e-13 17 5.548227e-04 2.941664e-04 7.54503104285008e-13 2.8696737769767e-13 18 6.567096e-04 1.826913e-04 7.56671704872166e-13 2.68696972750878e-13 19 7.290732e-04 1.090035e-04 7.57605705125051e-13 2.41052065265899e-13 20 7.784769e-04 6.224277e-05 7.57819505182938e-13 8.03687317601848e-14 1 -7.116119e-05 2.365440e-03 5.10512638223524e-13 7.29673397562256e-13 2 -1.376660e-04 2.345526e-03 5.23131741640202e-13 7.17192094182889e-13 3 -1.988118e-04 2.323299e-03 5.36495045258375e-13 7.03716890534419e-13 4 -2.532133e-04 2.293760e-03 5.50550049063828e-13 6.89026586556955e-13 5 -2.989485e-04 2.253106e-03 5.65317653062221e-13 6.72831582172087e-13 6 -3.335109e-04 2.197634e-03 5.80890357278599e-13 6.54722277268913e-13 7 -3.536785e-04 2.123237e-03 5.97431561757202e-13 6.34116071689693e-13 8 -3.553704e-04 2.025206e-03 6.15151066554835e-13 6.10228065221911e-13 9 -3.336366e-04 1.898434e-03 6.34227071719747e-13 5.82120657611708e-13 10 -2.830757e-04 1.738352e-03 6.54650077249365e-13 5.48914548621009e-13 11 -1.991201e-04 1.542970e-03 6.75999683029864e-13 5.10247938151856e-13 12 -8.047728e-05 1.315942e-03 6.97257588785535e-13 4.66934926424669e-13 13 6.790291e-05 1.069228e-03 7.16868894095381e-13 4.21461914112652e-13 14 2.334864e-04 8.225406e-04 7.33218198522027e-13 3.77675602257317e-13 15 3.987917e-04 5.978368e-04 7.45336001802975e-13 3.39381791889101e-13 16 5.473785e-04 4.114968e-04 7.53288703956204e-13 3.08629583562806e-13 17 6.691014e-04 2.697105e-04 7.57939505215429e-13 2.84827877118391e-13 18 7.613981e-04 1.694614e-04 7.60378005875663e-13 2.64222571539414e-13 19 8.272257e-04 1.026734e-04 7.61495306178177e-13 2.30544362420892e-13 20 8.721707e-04 6.009395e-05 7.61850006274214e-13 8.14669820575409e-14 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/acVd_cosym.standard0000644000175000017500000000544213546075722024602 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 1 4.408958e-05 6.046266e-04 3.15763085494233e-12 1.99601754043046e-12 2 1.317602e-04 4.645093e-04 3.39867892020715e-12 1.68688845673241e-12 3 2.891036e-04 2.666584e-04 3.62190398064631e-12 1.08428929357606e-12 4 4.970760e-04 4.691750e-05 3.65817399046657e-12 4.06781710137923e-13 5 5.487554e-04 1.768696e-07 3.59088997224913e-12 1.41835038402456e-13 6 5.488427e-04 1.363866e-07 3.56856196620372e-12 4.76827229103053e-14 7 5.489088e-04 1.101525e-07 3.56573996543966e-12 3.51606395198966e-14 8 5.489615e-04 9.183759e-08 3.56452896511177e-12 2.94901079845754e-14 9 5.490042e-04 7.873267e-08 3.56383996492522e-12 2.60809270615248e-14 10 5.490395e-04 6.911263e-08 3.56339396480447e-12 2.37436864287067e-14 11 5.490692e-04 6.185485e-08 3.56308296472026e-12 2.20134159602284e-14 12 5.490947e-04 5.623075e-08 3.56285696465907e-12 2.06659855954058e-14 13 5.491169e-04 5.176350e-08 3.56268596461277e-12 1.95782653009008e-14 14 5.491367e-04 4.813572e-08 3.5625549645773e-12 1.86763050566911e-14 15 5.491544e-04 4.513171e-08 3.56245296454969e-12 1.79125948499132e-14 16 5.491705e-04 4.260158e-08 3.56237196452775e-12 1.72550946718922e-14 17 5.491853e-04 4.043882e-08 3.56230796451043e-12 1.66812645165252e-14 18 5.491989e-04 3.856617e-08 3.56225696449662e-12 1.61747343793799e-14 19 5.492116e-04 3.692642e-08 3.56221696448579e-12 1.57233142571559e-14 20 5.492236e-04 3.547646e-08 3.56218596447739e-12 1.53176741473271e-14 1 4.831982e-05 4.594473e-04 3.0671258304377e-12 2.05635455676697e-12 2 1.265549e-04 3.437043e-04 3.31920889869029e-12 1.72225046630683e-12 3 2.486290e-04 1.911016e-04 3.57197796712862e-12 1.07841929198673e-12 4 3.911232e-04 3.656252e-05 3.64509698692592e-12 3.96627207388547e-13 5 4.302801e-04 1.153707e-07 3.58966897191854e-12 1.08838829468588e-13 6 4.303344e-04 8.911518e-08 3.57852496890125e-12 4.57398123842538e-14 7 4.303749e-04 7.291202e-08 3.57663696839007e-12 3.44701093329325e-14 8 4.304077e-04 6.148645e-08 3.57578996816074e-12 2.91303678871742e-14 9 4.304347e-04 5.324620e-08 3.5752989680278e-12 2.58609870019751e-14 10 4.304572e-04 4.715684e-08 3.57497796794088e-12 2.35970763890114e-14 11 4.304764e-04 4.253467e-08 3.57475396788024e-12 2.19104659323543e-14 12 4.304930e-04 3.893179e-08 3.57458996783583e-12 2.05912555751723e-14 13 4.305077e-04 3.605336e-08 3.57446596780226e-12 1.95229052859118e-14 14 4.305209e-04 3.370239e-08 3.57437096777654e-12 1.86348150454575e-14 15 4.305328e-04 3.174463e-08 3.57429596775623e-12 1.78813948414657e-14 16 4.305437e-04 3.008657e-08 3.57423696774026e-12 1.72317346655674e-14 17 4.305538e-04 2.866164e-08 3.5741909677278e-12 1.66640045118519e-14 18 4.305633e-04 2.742145e-08 3.57415396771778e-12 1.61623143760171e-14 19 4.305721e-04 2.633012e-08 3.57412496770993e-12 1.57147842548464e-14 20 4.305804e-04 2.536054e-08 3.5741019677037e-12 1.53123241458786e-14 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/acFreq_cosym.standard0000644000175000017500000000713113546075722025123 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.31510759095048e-12 2.08008826113497e-12 3.41498283927451e-13 1258.925 2.31510913566082e-12 2.08008813452404e-12 3.41498461457731e-13 1584.893 2.31510861510888e-12 2.08008767318194e-12 3.41498368740067e-13 1995.262 2.31510839918392e-12 2.08008855388099e-12 3.41498388611807e-13 2511.886 2.31510811510216e-12 2.0800879425648e-12 3.41498394520952e-13 3162.278 2.31510777427462e-12 2.08008749093504e-12 3.41498313230826e-13 3981.072 2.31510804749823e-12 2.08008790174315e-12 3.41498314023462e-13 5011.872 2.31510812825503e-12 2.08008787836074e-12 3.41498324740241e-13 6309.573 2.31510818999751e-12 2.08008803186219e-12 3.41498237076203e-13 7943.282 2.31510827634636e-12 2.08008706773448e-12 3.41498356909032e-13 10000 2.31510759095048e-12 2.08008826113497e-12 3.41498283927451e-13 12589.25 2.31510913566082e-12 2.08008813452404e-12 3.41498461457731e-13 15848.93 2.31510861510888e-12 2.08008767318194e-12 3.41498368740067e-13 19952.62 2.31510839918392e-12 2.08008855388099e-12 3.41498388611807e-13 25118.86 2.31510811510216e-12 2.0800879425648e-12 3.41498394520952e-13 31622.78 2.31510777427462e-12 2.08008749093504e-12 3.41498313230826e-13 39810.72 2.31510804749823e-12 2.08008790174315e-12 3.41498314023462e-13 50118.72 2.31510812825503e-12 2.08008787836074e-12 3.41498324740241e-13 63095.73 2.31510818999751e-12 2.08008803186219e-12 3.41498237076203e-13 79432.82 2.31510827634636e-12 2.08008706773448e-12 3.41498356909032e-13 100000 2.31510759095048e-12 2.08008826113497e-12 3.41498283927451e-13 125892.5 2.31510913566082e-12 2.08008813452404e-12 3.4149846145773e-13 158489.3 2.31510861510888e-12 2.08008767318194e-12 3.41498368740067e-13 199526.2 2.31510839918392e-12 2.08008855388099e-12 3.41498388611807e-13 251188.6 2.31510811510216e-12 2.0800879425648e-12 3.41498394520952e-13 316227.8 2.31510777427462e-12 2.08008749093504e-12 3.41498262901619e-13 398107.2 2.31510764771912e-12 2.08008750196403e-12 3.41498274045551e-13 501187.2 2.31510812825503e-12 2.08008787836074e-12 3.41498324740241e-13 630957.3 2.31510793775391e-12 2.08008777961858e-12 3.41498237076203e-13 794328.2 2.31510827634636e-12 2.08008706773448e-12 3.41498156544821e-13 1000000 2.31510759095048e-12 2.08008666958554e-12 3.41498124772507e-13 1258925 2.31510787144776e-12 2.08008813452404e-12 3.41498082193811e-13 1584893 2.31510660670903e-12 2.08008666898202e-12 3.41497866640105e-13 1995262 2.31510600619077e-12 2.08008616088785e-12 3.41497590947425e-13 2511886 2.31510431345807e-12 2.0800841409207e-12 3.41497127306253e-13 3162278 2.31510123147775e-12 2.08008145143024e-12 3.41496249733351e-13 3981072 2.31509725346219e-12 2.08007790726533e-12 3.41495075812651e-13 5011872 2.3150916153492e-12 2.08007263567842e-12 3.41493243846137e-13 6309573 2.31508170441913e-12 2.08006381647624e-12 3.41490165280887e-13 7943282 2.31506619986204e-12 2.08004899853438e-12 3.41485533599527e-13 10000000 2.31504233742381e-12 2.08002619070717e-12 3.41477912094735e-13 12589250 2.31500420597655e-12 2.07999205433121e-12 3.41466097603306e-13 15848930 2.31494191792142e-12 2.07993503479342e-12 3.41447054123926e-13 19952620 2.31484437227335e-12 2.07984526624437e-12 3.41417106611243e-13 25118860 2.31468993425144e-12 2.0797033429036e-12 3.41369582146782e-13 31622780 2.31444493862243e-12 2.07947750094989e-12 3.41294127639261e-13 39810720 2.31405782776972e-12 2.07912123584915e-12 3.41174852743546e-13 50118720 2.31344477054774e-12 2.07855694145603e-12 3.40986107103383e-13 63095730 2.31247401004475e-12 2.07766371858765e-12 3.40687021646912e-13 79432820 2.31093869711482e-12 2.07625009309325e-12 3.40214423044752e-13 100000000 2.30851539320762e-12 2.07401968315488e-12 3.39467944318427e-13 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/acVd_cvdsover.standard0000644000175000017500000000545313546075722025305 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 1 -3.719456e-05 2.001961e-03 8.22909022806209e-13 4.21435814105586e-13 2 -6.344656e-05 1.860782e-03 8.5105343042643e-13 3.98506807897457e-13 3 -7.958397e-05 1.731449e-03 8.76674237363375e-13 3.77683002259321e-13 4 -8.606804e-05 1.611350e-03 9.00137743716222e-13 3.58795797145528e-13 5 -8.298677e-05 1.498601e-03 9.21742049565682e-13 3.41601492490095e-13 6 -6.996785e-05 1.391540e-03 9.41714354973271e-13 3.25802488212445e-13 7 -4.601580e-05 1.288476e-03 9.60190059975649e-13 3.11012484207987e-13 8 -9.252445e-06 1.187503e-03 9.77171964573573e-13 2.96572080298185e-13 9 4.346999e-05 1.086328e-03 9.92475968717199e-13 2.79805375758526e-13 10 1.170972e-04 9.821022e-04 1.0056742722907e-12 2.3595826388673e-13 11 2.189517e-04 8.713132e-04 1.01608327510898e-12 2.17435758871681e-13 12 3.589122e-04 7.499949e-04 1.02290227695525e-12 2.02213154750094e-13 13 5.478103e-04 6.148481e-04 1.02568727770931e-12 1.8765585080864e-13 14 7.911893e-04 4.662964e-04 1.02524827759044e-12 1.74349447205874e-13 15 1.076429e-03 3.135070e-04 1.02411227728287e-12 1.63748244335552e-13 16 1.362132e-03 1.764524e-04 1.02406727727068e-12 1.56239842302619e-13 17 1.595043e-03 7.550012e-05 1.01737427545852e-12 1.47189239852129e-13 18 1.743551e-03 1.708521e-05 9.13019647204053e-13 9.40371554609702e-14 19 1.750185e-03 1.476975e-05 7.96826015744121e-13 3.73919901240445e-14 20 1.755474e-03 1.303604e-05 7.79098310944267e-13 2.8403837690463e-14 1 -1.577566e-05 1.808247e-03 7.94395515086052e-13 4.49170921614987e-13 2 -2.165610e-05 1.678742e-03 8.24289723180039e-13 4.26579115498157e-13 3 -1.802667e-05 1.559219e-03 8.52002030683268e-13 4.05799309871934e-13 4 -4.810949e-06 1.446903e-03 8.77786237664454e-13 3.8667140469297e-13 5 1.858540e-05 1.339693e-03 9.01833544175367e-13 3.68913199884859e-13 6 5.347203e-05 1.235550e-03 9.24241750242487e-13 3.5212189533854e-13 7 1.022151e-04 1.132162e-03 9.4494255584732e-13 3.35704890893564e-13 8 1.687494e-04 1.026660e-03 9.63584160894616e-13 3.18624586268997e-13 9 2.592313e-04 9.154084e-04 9.79389965174107e-13 2.97331380503769e-13 10 3.825214e-04 7.940424e-04 9.91092668342665e-13 2.51051967973416e-13 11 5.493403e-04 6.583689e-04 9.97213569999926e-13 2.26340161282586e-13 12 7.672824e-04 5.073296e-04 9.97095369967922e-13 2.04748955436673e-13 13 1.028630e-03 3.486552e-04 9.92412268699952e-13 1.85616650256518e-13 14 1.297403e-03 2.026290e-04 9.86369167063756e-13 1.70624146197232e-13 15 1.519646e-03 9.327865e-05 9.76391264362195e-13 1.56772342446796e-13 16 1.667050e-03 2.763522e-05 9.14501647605312e-13 1.14519831006744e-13 17 1.711568e-03 9.398962e-06 7.93886214948157e-13 4.15382912466736e-14 18 1.715209e-03 8.197387e-06 7.76262410176435e-13 3.03536782183908e-14 19 1.718227e-03 7.265461e-06 7.69218408269241e-13 2.56535069457989e-14 20 1.720863e-03 6.494054e-06 7.65250707194968e-13 2.28760961938029e-14 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/dcSw_Id1_vb1.standard0000644000175000017500000001112213546075722024650 0ustar carstencarstenV(d) I(d) 1.000000e+00 1.344481e-03 2.000000e+00 1.817705e-03 3.000000e+00 1.819270e-03 4.000000e+00 1.820209e-03 5.000000e+00 1.820892e-03 6.000000e+00 1.821442e-03 7.000000e+00 1.821912e-03 8.000000e+00 1.822331e-03 9.000000e+00 1.822710e-03 1.000000e+01 1.823061e-03 1.100000e+01 1.823389e-03 1.200000e+01 1.823697e-03 1.300000e+01 1.823989e-03 1.400000e+01 1.824268e-03 1.500000e+01 1.824534e-03 1.600000e+01 1.824790e-03 1.700000e+01 1.825037e-03 1.800000e+01 1.825275e-03 1.900000e+01 1.825506e-03 2.000000e+01 1.825730e-03 1.000000e+00 2.023252e-03 2.000000e+00 3.795915e-03 3.000000e+00 5.306194e-03 4.000000e+00 6.509229e-03 5.000000e+00 7.288389e-03 6.000000e+00 7.517400e-03 7.000000e+00 7.524635e-03 8.000000e+00 7.529773e-03 9.000000e+00 7.533757e-03 1.000000e+01 7.536965e-03 1.100000e+01 7.539626e-03 1.200000e+01 7.541891e-03 1.300000e+01 7.543857e-03 1.400000e+01 7.545596e-03 1.500000e+01 7.547154e-03 1.600000e+01 7.548568e-03 1.700000e+01 7.549864e-03 1.800000e+01 7.551061e-03 1.900000e+01 7.552177e-03 2.000000e+01 7.553222e-03 1.000000e+00 2.040903e-03 2.000000e+00 3.940369e-03 3.000000e+00 5.709654e-03 4.000000e+00 7.357679e-03 5.000000e+00 8.891662e-03 6.000000e+00 1.031730e-02 7.000000e+00 1.163871e-02 8.000000e+00 1.285822e-02 9.000000e+00 1.397594e-02 1.000000e+01 1.498923e-02 1.100000e+01 1.589193e-02 1.200000e+01 1.667382e-02 1.300000e+01 1.732091e-02 1.400000e+01 1.781862e-02 1.500000e+01 1.816005e-02 1.600000e+01 1.835750e-02 1.700000e+01 1.844502e-02 1.800000e+01 1.846602e-02 1.900000e+01 1.848017e-02 2.000000e+01 1.849264e-02 1.000000e+00 1.625003e-03 2.000000e+00 2.247370e-03 3.000000e+00 2.249575e-03 4.000000e+00 2.250877e-03 5.000000e+00 2.251799e-03 6.000000e+00 2.252528e-03 7.000000e+00 2.253145e-03 8.000000e+00 2.253689e-03 9.000000e+00 2.254179e-03 1.000000e+01 2.254630e-03 1.100000e+01 2.255049e-03 1.200000e+01 2.255443e-03 1.300000e+01 2.255815e-03 1.400000e+01 2.256169e-03 1.500000e+01 2.256508e-03 1.600000e+01 2.256832e-03 1.700000e+01 2.257145e-03 1.800000e+01 2.257446e-03 1.900000e+01 2.257738e-03 2.000000e+01 2.258021e-03 1.000000e+00 2.268583e-03 2.000000e+00 4.279968e-03 3.000000e+00 6.031926e-03 4.000000e+00 7.498564e-03 5.000000e+00 8.597766e-03 6.000000e+00 9.151633e-03 7.000000e+00 9.203406e-03 8.000000e+00 9.213006e-03 9.000000e+00 9.220197e-03 1.000000e+01 9.225830e-03 1.100000e+01 9.230393e-03 1.200000e+01 9.234190e-03 1.300000e+01 9.237424e-03 1.400000e+01 9.240230e-03 1.500000e+01 9.242704e-03 1.600000e+01 9.244915e-03 1.700000e+01 9.246912e-03 1.800000e+01 9.248735e-03 1.900000e+01 9.250411e-03 2.000000e+01 9.251965e-03 1.000000e+00 2.165577e-03 2.000000e+00 4.181480e-03 3.000000e+00 6.060102e-03 4.000000e+00 7.811571e-03 5.000000e+00 9.444391e-03 6.000000e+00 1.096568e-02 7.000000e+00 1.238120e-02 8.000000e+00 1.369530e-02 9.000000e+00 1.491069e-02 1.000000e+01 1.602814e-02 1.100000e+01 1.704605e-02 1.200000e+01 1.795985e-02 1.300000e+01 1.876144e-02 1.400000e+01 1.943913e-02 1.500000e+01 1.997931e-02 1.600000e+01 2.037181e-02 1.700000e+01 2.061960e-02 1.800000e+01 2.074601e-02 1.900000e+01 2.078207e-02 2.000000e+01 2.080246e-02 1.000000e+00 1.049049e-03 2.000000e+00 1.423399e-03 3.000000e+00 1.425182e-03 4.000000e+00 1.425851e-03 5.000000e+00 1.426345e-03 6.000000e+00 1.426749e-03 7.000000e+00 1.427097e-03 8.000000e+00 1.427408e-03 9.000000e+00 1.427692e-03 1.000000e+01 1.427955e-03 1.100000e+01 1.428201e-03 1.200000e+01 1.428433e-03 1.300000e+01 1.428653e-03 1.400000e+01 1.428863e-03 1.500000e+01 1.429064e-03 1.600000e+01 1.429257e-03 1.700000e+01 1.429444e-03 1.800000e+01 1.429624e-03 1.900000e+01 1.429799e-03 2.000000e+01 1.429968e-03 1.000000e+00 1.690376e-03 2.000000e+00 3.143395e-03 3.000000e+00 4.337904e-03 4.000000e+00 5.212580e-03 5.000000e+00 5.655411e-03 6.000000e+00 5.717550e-03 7.000000e+00 5.720893e-03 8.000000e+00 5.723457e-03 9.000000e+00 5.725517e-03 1.000000e+01 5.727226e-03 1.100000e+01 5.728683e-03 1.200000e+01 5.729953e-03 1.300000e+01 5.731081e-03 1.400000e+01 5.732098e-03 1.500000e+01 5.733027e-03 1.600000e+01 5.733883e-03 1.700000e+01 5.734679e-03 1.800000e+01 5.735426e-03 1.900000e+01 5.736129e-03 2.000000e+01 5.736795e-03 1.000000e+00 1.843809e-03 2.000000e+00 3.558120e-03 3.000000e+00 5.152469e-03 4.000000e+00 6.633887e-03 5.000000e+00 8.007515e-03 6.000000e+00 9.276642e-03 7.000000e+00 1.044245e-02 8.000000e+00 1.150346e-02 9.000000e+00 1.245476e-02 1.000000e+01 1.328720e-02 1.100000e+01 1.398705e-02 1.200000e+01 1.453824e-02 1.300000e+01 1.492966e-02 1.400000e+01 1.516787e-02 1.500000e+01 1.528456e-02 1.600000e+01 1.532443e-02 1.700000e+01 1.533439e-02 1.800000e+01 1.534240e-02 1.900000e+01 1.534949e-02 2.000000e+01 1.535580e-02 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/acVd.standard0000644000175000017500000000543713546075722023374 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 1 7.627386e-05 1.963189e-03 8.693396353775e-13 3.92185306185883e-13 2 2.051546e-04 1.707781e-03 9.19320148909942e-13 3.72321000807536e-13 3 4.124025e-04 1.436917e-03 9.66718161743161e-13 3.51596195196204e-13 4 7.628585e-04 1.108584e-03 1.00427427191164e-12 3.21464687037967e-13 5 1.409968e-03 6.400385e-04 1.00739027275531e-12 2.68038072572478e-13 6 2.334479e-03 8.808625e-05 9.82591266040873e-13 2.21204159891992e-13 7 2.489185e-03 7.141091e-06 8.40697427622497e-13 1.05625128598464e-13 8 2.495097e-03 5.340311e-06 7.60846006002376e-13 4.36430018165332e-14 9 2.499393e-03 4.185572e-06 7.47734402452352e-13 3.29458089202215e-14 10 2.502675e-03 3.394415e-06 7.41817700850379e-13 2.7874937547261e-14 11 2.505259e-03 2.830704e-06 7.38373099917739e-13 2.47692267063762e-14 12 2.507345e-03 2.416108e-06 7.36110299305076e-13 2.26181561239645e-14 13 2.509063e-03 2.102610e-06 7.34515598873304e-13 2.10153056899857e-14 14 2.510505e-03 1.859673e-06 7.33339398554842e-13 1.97614253504921e-14 15 2.511734e-03 1.667295e-06 7.32444398312517e-13 1.87458550755221e-14 16 2.512798e-03 1.512022e-06 7.31748398124072e-13 1.79015648469268e-14 17 2.513728e-03 1.384575e-06 7.31198497975184e-13 1.718524465298e-14 18 2.514551e-03 1.278409e-06 7.30759397856296e-13 1.65675244857296e-14 19 2.515287e-03 1.188805e-06 7.30406297760692e-13 1.60276943395682e-14 20 2.515949e-03 1.112297e-06 7.30121397683554e-13 1.55506242103994e-14 1 1.068814e-04 1.629628e-03 8.16394421042352e-13 4.39748819063912e-13 2 2.665547e-04 1.383873e-03 8.67675634926964e-13 4.16447812755062e-13 3 5.086929e-04 1.109586e-03 9.14421747583678e-13 3.86361004608928e-13 4 9.058120e-04 7.549322e-04 9.42344755143954e-13 3.3123598968359e-13 5 1.534057e-03 2.885468e-04 9.25340150539883e-13 2.49609367582825e-13 6 1.977815e-03 5.524291e-06 8.66021834479191e-13 1.70675346211095e-13 7 1.982984e-03 3.290271e-06 7.57399005069086e-13 5.34208444639268e-14 8 1.985343e-03 2.570965e-06 7.42083400922319e-13 3.64771398763448e-14 9 1.987136e-03 2.085657e-06 7.36431299391988e-13 2.99009380958095e-14 10 1.988546e-03 1.743308e-06 7.33377298565104e-13 2.61603570830308e-14 11 1.989682e-03 1.493999e-06 7.31449698043198e-13 2.36693864085897e-14 12 1.990618e-03 1.307213e-06 7.30124897684502e-13 2.18581859181992e-14 13 1.991404e-03 1.163592e-06 7.29164797424551e-13 2.04649055409625e-14 14 1.992075e-03 1.050550e-06 7.2844369722931e-13 1.93501352391336e-14 15 1.992657e-03 9.597029e-07 7.27888597079014e-13 1.84319549905322e-14 16 1.993169e-03 8.853353e-07 7.2745379696129e-13 1.76586347811524e-14 17 1.993623e-03 8.234619e-07 7.27108996867934e-13 1.69957046016612e-14 18 1.994032e-03 7.712420e-07 7.26833496793341e-13 1.64191544455577e-14 19 1.994402e-03 7.266098e-07 7.26612496733504e-13 1.59117443081742e-14 20 1.994740e-03 6.880347e-07 7.26435096685472e-13 1.54606641860423e-14 tmpk8ny_4pz/tests/hisimhv1/nmos/reference/acFreq_coiigs.standard0000644000175000017500000000711613546075722025251 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.58051914869882e-12 2.4917854932768e-12 5.03511968107163e-14 1258.925 2.5805192904171e-12 2.49178670391883e-12 5.03512043128726e-14 1584.893 2.58051865515062e-12 2.49178554142316e-12 5.03511967756998e-14 1995.262 2.58051925745557e-12 2.49178547623071e-12 5.03512001317281e-14 2511.886 2.58051926416235e-12 2.49178572288976e-12 5.03511983891969e-14 3162.278 2.58051834249338e-12 2.4917849313361e-12 5.03512005592255e-14 3981.072 2.58051860182658e-12 2.49178522913474e-12 5.03511797703395e-14 5011.872 2.58051879356465e-12 2.49178542382097e-12 5.03511842366211e-14 6309.573 2.58052017096042e-12 2.49178566383005e-12 5.03512033498618e-14 7943.282 2.58051872484516e-12 2.49178543034841e-12 5.03511856126851e-14 10000 2.58051914869882e-12 2.4917854932768e-12 5.03511968107163e-14 12589.25 2.5805192904171e-12 2.49178670391883e-12 5.03512043128726e-14 15848.93 2.58051865515062e-12 2.49178554142316e-12 5.03511967756998e-14 19952.62 2.58051925745557e-12 2.49178547623071e-12 5.03512001317281e-14 25118.86 2.58051926416235e-12 2.49178572288976e-12 5.03511983891969e-14 31622.78 2.58051834249338e-12 2.4917849313361e-12 5.03512005592255e-14 39810.72 2.58051860182658e-12 2.49178522913474e-12 5.03511797703395e-14 50118.72 2.58051879356465e-12 2.49178542382097e-12 5.03511842366211e-14 63095.73 2.58052017096042e-12 2.49178566383005e-12 5.03512033498618e-14 79432.82 2.58051872484516e-12 2.49178543034841e-12 5.03511856126851e-14 100000 2.58051914869882e-12 2.4917854932768e-12 5.03511968107162e-14 125892.5 2.5805192904171e-12 2.49178670391883e-12 5.03512043128726e-14 158489.3 2.58051865515062e-12 2.49178554142316e-12 5.03511967756998e-14 199526.2 2.58051925745557e-12 2.49178547623071e-12 5.03512001317281e-14 251188.6 2.58051926416235e-12 2.49178572288976e-12 5.03511983891969e-14 316227.8 2.58051834249338e-12 2.4917849313361e-12 5.03512005592255e-14 398107.2 2.58051860182658e-12 2.49178522913474e-12 5.03511797703395e-14 501187.2 2.58051879356465e-12 2.49178542382097e-12 5.03511842366211e-14 630957.3 2.58052017096042e-12 2.49178566383005e-12 5.03512033498618e-14 794328.2 2.58051872484516e-12 2.49178543034841e-12 5.03511856126851e-14 1000000 2.58051914869882e-12 2.4917854932768e-12 5.03511968107162e-14 1258925 2.5805192904171e-12 2.49178670391883e-12 5.03512043128726e-14 1584893 2.58051865515062e-12 2.49178554142316e-12 5.03511967756998e-14 1995262 2.58051925745557e-12 2.49178547623071e-12 5.03512001317281e-14 2511886 2.58051926416235e-12 2.49178572288976e-12 5.03511983891969e-14 3162278 2.58051834249338e-12 2.4917849313361e-12 5.03512005592255e-14 3981072 2.58051860182658e-12 2.49178522913474e-12 5.03511797703395e-14 5011872 2.58051879356465e-12 2.49178542382097e-12 5.03511842366211e-14 6309573 2.58051764852438e-12 2.49178541158644e-12 5.03512033498618e-14 7943282 2.58051872484516e-12 2.49178543034841e-12 5.03511856126851e-14 10000000 2.58051914869882e-12 2.4917854932768e-12 5.03511808952219e-14 12589250 2.5805192904171e-12 2.49178543970577e-12 5.0351191670742e-14 15848930 2.58051865515062e-12 2.49178453722324e-12 5.03511766917013e-14 19952620 2.58051845979119e-12 2.49178467856632e-12 5.0351160248509e-14 25118860 2.58051799694766e-12 2.49178382206771e-12 5.03511350284619e-14 31622780 2.58051632932511e-12 2.49178241487577e-12 5.03510999008121e-14 39810720 2.58051500381457e-12 2.4917808315645e-12 5.03510198586945e-14 50118720 2.58051307755878e-12 2.49177843759158e-12 5.03509301919159e-14 63095730 2.58051008121627e-12 2.49177406062428e-12 5.0350799760096e-14 79432820 2.58050469935039e-12 2.49176739756942e-12 5.03505644836309e-14 100000000 2.58049527545736e-12 2.49175684538704e-12 5.03501782190805e-14 tmpk8ny_4pz/tests/hisimhv1/nmos/qaSpec0000644000175000017500000004541513546075722020176 0ustar carstencarsten // // Test specification for HiSIM_HV (version 1.2.4) // // // Simulator specific information // These arguments are added to the model card // specification to invoke the desired model in // different simulators (which can have different // names or levels for the same model) and to switch // between nType and pType polarities. // It is assumed that there are no polarity specific // parameters. // `ifdef spice nTypeSelectionArguments nmos level=62 version=1.24 pTypeSelectionArguments pmos level=62 version=1.24 `endif `ifdef ngspice nTypeSelectionArguments nmos level=73 version=1.24 pTypeSelectionArguments pmos level=73 version=1.24 `endif `ifdef hspice nTypeSelectionArguments nmos level=73 version=1.2.4 pTypeSelectionArguments pmos level=73 version=1.2.4 `endif // // General test-independent information // keyLetter m pins d g s b linearScale w l ps pd areaScale as ad temperature 27 -50 150 //checkPolarity yes scaleParameters m // // Specific tests // test dcSw_Id1_vb0 biases V(s)=0 V(b)=0 biasList V(g)=2.5,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/nmosParameters test dcSw_Id1_vb1 biases V(s)=0 V(b)=-0.5 biasList V(g)=2.5,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/nmosParameters test dcSw_Id1_vb2 biases V(s)=0 V(b)=-1.5 biasList V(g)=2.5,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/nmosParameters test dcSw_Id1_vb0_jd biases V(s)=0 V(b)=0 biasList V(g)=2.5,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=50e-6 L=5e-6 AD=20e-12 AS=20e-12 PD=12e-6 PS=12e-6 modelParameters parameters/nmosParameters test dcSw_Ig1_vb0 biases V(s)=0 V(b)=0 biasList V(d)=2.5,5,10 biasSweep V(g)=1,20.000000001,1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/nmosParameters test dcSw_Ig1_vb1 biases V(s)=0 V(b)=-0.5 biasList V(d)=2.5,5,10 biasSweep V(g)=1,20.000000001,1 outputs I(d) I(g) I(s) I(b) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/nmosParameters test dcSw_Ig1_vb2 biases V(s)=0 V(b)=-1.5 biasList V(d)=2.5,5,10 biasSweep V(g)=1,20.000000001,1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/nmosParameters test dcSw_Ig1_vb0_jd biases V(s)=0 V(b)=0 biasList V(d)=2.5,5,10 biasSweep V(g)=1,20.000000001,1 outputs I(d) I(g) I(s) I(b) instanceParameters W=20e-6 L=2.0e-6 AD=20e-12 AS=20e-12 PD=12e-6 PS=12e-6 modelParameters parameters/nmosParameters test dcSw_ld2 biases V(s)=0 V(b)=0 biasList V(g)=2.5,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/nmosParameters test dcSw_lg2 biases V(s)=0 V(b)=0 biasList V(d)=2.5,5,10 biasSweep V(g)=1,20.000000001,1 outputs I(d) instanceParameters W=5e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/nmosParameters test dcSw_cosym biases V(s)=0 V(b)=0 biasList V(g)=2.5,5,10 biasSweep V(d)=0.1,30.1,0.5 outputs I(d) instanceParameters W=50e-6 L=20e-6 modelParameters parameters/nmosParameters modelParameters COSYM=1 RD=0.1 test dcSw_rs2m biases V(s)=0 V(b)=0 biasList V(g)=0.1,0.6,2,5 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=50e-6 L=10e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/nmosParameters modelParameters COSYM=1 RD=0.1 RS=2e-3 test dcSw_corsrd0 biases V(s)=0 V(b)=0 biasList V(g)=2.5,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=50e-6 L=2e-6 modelParameters parameters/nmosParameters modelParameters CORSRD=0 test dcSw_corsrd1 biases V(s)=0 V(b)=0 biasList V(g)=2.5,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=50e-6 L=20e-6 AD=20e-12 AS=20e-12 PD=12e-6 PS=12e-6 modelParameters parameters/nmosParameters modelParameters CORSRD=1 RD=0.1 RS=0.05 test dcSw_corsrd2 biases V(s)=0 V(b)=0 biasList V(g)=2.5,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=50e-6 L=2e-6 modelParameters parameters/nmosParameters modelParameters CORSRD=2 test dcSw_isub biases V(s)=0 V(b)=0 biasList V(g)=2.5,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) I(b) instanceParameters W=50e-6 L=50e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/nmosParameters modelParameters COISUB=1 SUB1=1 SVGS=1 SVDS=1 SUB1L=0.1 SUB2L=0.1 SLG=1 SVBS=1 test dcSw_gidl biases V(s)=0 V(b)=0 biasList V(g)=2.5,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) I(b) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/nmosParameters modelParameters COGIDL=1 test dcSw_she biases V(s)=0 V(b)=0 biasList V(g)=2.5,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/nmosParameters modelParameters COSELFHEAT=1 POWRAT=0.5 test dcSw_ptl biases V(s)=0 V(b)=0 biasList V(g)=2.5,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/nmosParameters modelParameters CORSRD=-1 RSH=10 PT4P=0.1 GDLD=0.0001 test dcSw_coisti biases V(s)=0 V(b)=0 biasList V(g)=2.5,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=20e-6 L=2e-6 instanceParameters SA=1e-6 SB=2e-6 SD=1e-6 NF=2 modelParameters parameters/nmosParameters modelParameters COISTI=1 WSTI=0.1E-4 modelParameters NSUBPSTI1=2e-6 NSUBPSTI2=1e-6 NSUBPSTI3=1.5 test dcSw_corg biases V(s)=0 V(b)=0 biasList V(g)=2.5,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters CORG=1 RSHG=10 test dcSw_corbnet biases V(s)=0 V(b)=0 biasList V(g)=2.5,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters CORBNET=1 test dcSw_codfm biases V(s)=0 V(b)=0 biasList V(g)=2.5,5,10 biasSweep V(d)=1,20.000000001,1 outputs I(d) instanceParameters W=50e-6 L=2e-6 NSUBCDFM=1E17 modelParameters CODFM=1 test dcSw_NF_RDS temperature 27 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.000000001,2 outputs I(d) instanceParameters W=50e-6 L=5e-6 NF=100 modelParameters parameters/nmosParameters modelParameters RD=0.01 RDS=1 RDSP=2.0 RDVDS=1 RDVDSP=1.5 test dcSw_NF_RD23 temperature 27 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.000000001,2 outputs I(d) instanceParameters W=1e-6 L=2e-6 NF=100 modelParameters parameters/nmosParameters modelParameters RD20=0.1 RD23=0.1 RD23L=0.1 RD23S=0.1 RD23SP=1.5 RD24=0.1 test dcSw_NF_RTH0W temperature 27 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.000000001,2 outputs I(d) instanceParameters W=50e-6 L=5e-6 NF=100 modelParameters parameters/nmosParameters modelParameters COSELFHEAT=1 RTH0=1 RTH0W=2.0 RTH0WP=2.5 test dcSw_COTEMP1 temperature 27 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.000000001,2 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/nmosParameters modelParameters COTEMP=1 test dcSw_COTEMP2 temperature 27 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.000000001,2 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/nmosParameters modelParameters COTEMP=2 test dcSw_COTEMP3 temperature 27 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.000000001,2 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/nmosParameters modelParameters COTEMP=3 test acVd temperature 27 150 biases V(s)=0 V(b)=0 V(g)=5 biasSweep V(d)=1,20.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/nmosParameters test acVd_corsrd1 temperature 27 150 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=10e-6 modelParameters parameters/nmosParameters modelParameters CORSRD=1 RD=0.01 RS=0.1 test acVd_corsrd2 temperature 27 150 biases V(s)=0 V(b)=0 V(g)=20 biasSweep V(d)=1,20.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/nmosParameters modelParameters CORSRD=2 test acVd_cosym temperature 27 150 biases V(s)=0 V(b)=0 V(g)=5 biasSweep V(d)=1,20.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=20e-6 modelParameters parameters/nmosParameters modelParameters COSYM=1 RD=0.01 test acVd_cvdsover temperature 27 150 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/nmosParameters modelParameters CVDSOVER=0.2 test acVd_coisti temperature 27 150 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 instanceParameters SA=1e-6 SB=2e-6 SD=1e-6 NF=2 modelParameters parameters/nmosParameters modelParameters COISTI=1 WSTI=0.1E-4 modelParameters NSUBPSTI1=2e-6 NSUBPSTI2=1e-6 NSUBPSTI3=1.5 test acVd_coadov temperature 27 150 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/nmosParameters modelParameters COADOV=1 test acVd_corg temperature 27 150 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/nmosParameters modelParameters CORG=1 RSHG=10 test acVd_corbnet temperature 27 150 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/nmosParameters modelParameters CORBNET=1 test acVd_codfm temperature 27 150 biases V(s)=0 V(b)=0 V(g)=10 biasSweep V(d)=1,20.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 NSUBCDFM=1E17 modelParameters parameters/nmosParameters modelParameters CODFM=1 test acVg_QOVADD temperature 27 150 biases V(s)=0 V(b)=0 V(d)=1 biasSweep V(g)=1,10.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/nmosParameters modelParameters QOVADD=1e-4 test acVg_LOVER temperature 27 150 biases V(s)=0 V(b)=0 V(d)=1 biasSweep V(g)=1,10.0000001,1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/nmosParameters modelParameters LOVERS=0 LOVER=1.6e-06 LOVERLD=3e-06 test acFreq temperature 27 biases V(s)=0 V(b)=0 V(d)=10 V(g)=10 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=50e-6 L=2e-6 modelParameters parameters/nmosParameters test acFreq_cosym temperature 27 biases V(s)=0 V(b)=0 V(d)=10 V(g)=10 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=50e-6 L=10e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/nmosParameters modelParameters COSYM=1 RD=0.01 test acFreq_coovlp temperature 27 biases V(s)=0 V(b)=0 V(d)=10 V(g)=10 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=50e-6 L=2e-6 modelParameters parameters/nmosParameters modelParameters COOVLP=0 test acFreq_nover temperature 27 biases V(s)=0 V(b)=0 V(d)=10 V(g)=5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/nmosParameters modelParameters NOVER=1E16 test acFreq_coadov temperature 27 biases V(s)=0 V(b)=0 V(d)=10 V(g)=5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/nmosParameters modelParameters COADOV=0 test acFreq_conqs temperature 27 biases V(s)=0 V(b)=0 V(d)=10 V(g)=5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/nmosParameters modelParameters CONQS=1 test acFreq_coiigs temperature 27 biases V(s)=0 V(b)=0 V(d)=10 V(g)=5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=100e-6 L=8e-6 modelParameters parameters/nmosParameters modelParameters COIIGS=1 test noise1 temperature 27 biases V(s)=0 V(b)=0 V(d)=20 biasList V(g)=5,10 freq dec 10 1e3 1e8 outputs N(d) instanceParameters W=100e-6 L=8e-6 modelParameters parameters/nmosParameters modelParameters COTHRML=1 COIGN=1 test noise2 temperature 27 biases V(s)=0 V(b)=0 V(d)=20 biasList V(g)=5,10 freq dec 10 1e3 1e8 outputs N(d) instanceParameters W=100e-6 L=8e-6 modelParameters parameters/nmosParameters modelParameters COFLICK=1 FALPH=1.2 tmpk8ny_4pz/tests/hisimhv1/nmos/run0000755000175000017500000000023613546075722017561 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmpk8ny_4pz/tests/hisimhv1/pmos/0000755000175000017500000000000013546075722017030 5ustar carstencarstentmpk8ny_4pz/tests/hisimhv1/pmos/parameters/0000755000175000017500000000000013546075722021173 5ustar carstencarstentmpk8ny_4pz/tests/hisimhv1/pmos/parameters/nmosParameters0000644000175000017500000002007413546075722024121 0ustar carstencarsten CORSRD = ( 3 ) CORG = ( 0 ) COIPRV = ( 1 ) COPPRV = ( 1 ) COADOV = ( 1 ) COISUB = ( 0 ) COIIGS = ( 0 ) COGIDL = ( 0 ) COOVLP = ( 1 ) COOVLPS = ( 0 ) COFLICK = ( 0 ) COISTI = ( 0 ) CONQS = ( 0 ) COTHRML = ( 0 ) COIGN = ( 0 ) CODFM = ( 0 ) COQOVSM = ( 1 ) CORBNET = ( 0 ) COSELFHEAT = ( 0 ) COSUBNODE = ( 0 ) COSYM = ( 0 ) COTEMP = ( 0 ) COERRREP = ( 1 ) VERSION = ( 2 ) VMAX = ( 1e+07 ) VMAXT1 = ( 0 ) VMAXT2 = ( 0 ) BGTMP1 = ( 9.025e-05 ) BGTMP2 = ( 1e-07 ) EG0 = ( 1.1785 ) TOX = ( 7e-09 ) XLD = ( 0 ) RDOV11 = ( 0 ) RDOV12 = ( 1 ) RDOV13 = ( 1 ) RDSLP1 = ( 0 ) RDICT1 = ( 1 ) RDSLP2 = ( 1 ) RDICT2 = ( 0 ) SUBLD1 = ( 0 ) SUBLD1L = ( 0 ) SUBLD1LP = ( 1 ) SUBLD2 = ( 0 ) XPDV = ( 0 ) XPVDTH = ( 0 ) XPVDTHG = ( 0 ) DDLTMAX = ( 10 ) DDLTSLP = ( 0 ) DDLTICT = ( 10 ) VFBOVER = ( -0.5 ) NOVER = ( 1e+17 ) NOVERS = ( 0 ) XWD = ( 0 ) XL = ( 0 ) XW = ( 0 ) SAREF = ( 1e-06 ) SBREF = ( 1e-06 ) LL = ( 0 ) LLD = ( 0 ) LLN = ( 0 ) WL = ( 0 ) WL1 = ( 0 ) WL1P = ( 1 ) WL2 = ( 0 ) WL2P = ( 1 ) WLD = ( 0 ) WLN = ( 0 ) RSH = ( 0 ) RSHG = ( 0 ) XQY = ( 0 ) XQY1 = ( 0 ) XQY2 = ( 2 ) RS = ( 0 ) RD = ( 0.01 ) VFBC = ( -1 ) VBI = ( 1.1 ) NSUBC = ( 3e+17 ) PARL2 = ( 1e-08 ) LP = ( 1.5e-08 ) NSUBP = ( 1e+18 ) NSUBP0 = ( 0 ) NSUBWP = ( 1 ) SCP1 = ( 1 ) SCP2 = ( 0 ) SCP3 = ( 0 ) SC1 = ( 1 ) SC2 = ( 0 ) SC3 = ( 0 ) SC4 = ( 0 ) PGD1 = ( 0 ) PGD2 = ( 1 ) PGD4 = ( 0 ) NDEP = ( 1 ) NDEPL = ( 0 ) NDEPLP = ( 1 ) NINV = ( 0.5 ) MUECB0 = ( 1000 ) MUECB1 = ( 100 ) MUEPH0 = ( 0.3 ) MUEPH1 = ( 20000 ) MUEPHW = ( 0 ) MUEPWP = ( 1 ) MUEPHL = ( 0 ) MUEPLP = ( 1 ) MUEPHS = ( 0 ) MUEPSP = ( 1 ) VTMP = ( 0 ) WVTH0 = ( 0 ) MUESR0 = ( 2 ) MUESR1 = ( 6e+14 ) MUESRL = ( 0 ) MUESRW = ( 0 ) MUESWP = ( 1 ) MUESLP = ( 1 ) MUETMP = ( 1.5 ) BB = ( 2 ) SUB1 = ( 10 ) SUB2 = ( 25 ) SVGS = ( 0.8 ) SVBS = ( 0.5 ) SVBSL = ( 0 ) SVDS = ( 0.8 ) SLG = ( 3e-08 ) SUB1L = ( 0.0025 ) SUB2L = ( 2e-06 ) FN1 = ( 0 ) FN2 = ( 0.00017 ) FN3 = ( 0 ) FVBS = ( 0.012 ) SVGSL = ( 0 ) SVGSLP = ( 1 ) SVGSWP = ( 1 ) SVGSW = ( 0 ) SVBSLP = ( 1 ) SLGL = ( 0 ) SLGLP = ( 1 ) SUB1LP = ( 1 ) NSTI = ( 1e+17 ) WSTI = ( 0 ) WSTIL = ( 0 ) WSTILP = ( 1 ) WSTIW = ( 0 ) WSTIWP = ( 1 ) SCSTI1 = ( 0 ) SCSTI2 = ( 0 ) VTHSTI = ( 0 ) VDSTI = ( 0 ) MUESTI1 = ( 0 ) MUESTI2 = ( 0 ) MUESTI3 = ( 1 ) NSUBPSTI1 = ( 0 ) NSUBPSTI2 = ( 0 ) NSUBPSTI3 = ( 1 ) LPEXT = ( 1e-50 ) NPEXT = ( 5e+17 ) SCP21 = ( 0 ) SCP22 = ( 0 ) BS1 = ( 0 ) BS2 = ( 0.9 ) TPOLY = ( 2e-07 ) CGBO = ( 0 ) JS0 = ( 5e-07 ) JS0SW = ( 0 ) NJ = ( 1 ) NJSW = ( 1 ) XTI = ( 2 ) CJ = ( 0.0005 ) CJSW = ( 5e-10 ) CJSWG = ( 5e-10 ) MJ = ( 0.5 ) MJSW = ( 0.33 ) MJSWG = ( 0.33 ) PB = ( 1 ) PBSW = ( 1 ) PBSWG = ( 1 ) XTI2 = ( 0 ) CISB = ( 0 ) CVB = ( 0 ) CTEMP = ( 0 ) CISBK = ( 0 ) DIVX = ( 0 ) CLM1 = ( 0.05 ) CLM2 = ( 2 ) CLM3 = ( 1 ) CLM5 = ( 1 ) CLM6 = ( 0 ) VOVER = ( 0.3 ) VOVERP = ( 0.3 ) WFC = ( 0 ) NSUBCW = ( 0 ) NSUBCWP = ( 1 ) QME1 = ( 0 ) QME2 = ( 1 ) QME3 = ( 0 ) VOVERS = ( 0 ) VOVERSP = ( 0 ) GIDL1 = ( 2 ) GIDL2 = ( 3e+07 ) GIDL3 = ( 0.9 ) GIDL4 = ( 0 ) GIDL5 = ( 0.2 ) GLEAK1 = ( 50 ) GLEAK2 = ( 1e+07 ) GLEAK3 = ( 0.06 ) GLEAK4 = ( 4 ) GLEAK5 = ( 7500 ) GLEAK6 = ( 0.25 ) GLEAK7 = ( 1e-06 ) GLPART1 = ( 0.5 ) GLKSD1 = ( 1e-15 ) GLKSD2 = ( 1000 ) GLKSD3 = ( -1000 ) GLKB1 = ( 5e-16 ) GLKB2 = ( 1 ) GLKB3 = ( 0 ) EGIG = ( 0 ) IGTEMP2 = ( 0 ) IGTEMP3 = ( 0 ) VZADD0 = ( 0.01 ) PZADD0 = ( 0.005 ) NFTRP = ( 1e+10 ) NFALP = ( 1e-19 ) CIT = ( 0 ) FALPH = ( 1 ) KAPPA = ( 3.9 ) VDIFFJ = ( 0.0006 ) DLY1 = ( 1e-10 ) DLY2 = ( 0.7 ) DLY3 = ( 8e-07 ) TNOM = ( 27 ) OVSLP = ( 2.1e-07 ) OVMAG = ( 0.6 ) GBMIN = ( 1e-12 ) RBPB = ( 50 ) RBDB = ( 50 ) RBSB = ( 50 ) IBPC1 = ( 0 ) IBPC1L = ( 0 ) IBPC1LP = ( -1 ) IBPC2 = ( 0 ) MPHDFM = ( -0.3 ) PTL = ( 0 ) PTP = ( 3.5 ) PT2 = ( 0 ) PTLP = ( 1 ) GDL = ( 0 ) GDLP = ( 0 ) GDLD = ( 0 ) PT4 = ( 0 ) PT4P = ( 1 ) RDVG11 = ( 0 ) RDVG12 = ( 100 ) RTH0 = ( 0.1 ) CTH0 = ( 1e-07 ) POWRAT = ( 1 ) TCJBD = ( 0 ) TCJBS = ( 0 ) TCJBDSW = ( 0 ) TCJBSSW = ( 0 ) TCJBDSWG = ( 0 ) TCJBSSWG = ( 0 ) DLYOV = ( 0 ) QDFTVD = ( 1 ) XLDLD = ( 1e-06 ) RDVD = ( 0.07 ) RD20 = ( 0 ) RD21 = ( 1 ) RD22 = ( 0 ) RD22D = ( 0 ) RD23 = ( 0.005 ) RD24 = ( 0 ) RD25 = ( 0 ) RDVDL = ( 0 ) RDVDLP = ( 1 ) RDVDS = ( 0 ) RDVDSP = ( 1 ) RD23L = ( 0 ) RD23LP = ( 1 ) RD23S = ( 0 ) RD23SP = ( 1 ) RDS = ( 0 ) RDSP = ( 1 ) RDTEMP1 = ( 0 ) RDTEMP2 = ( 0 ) RDVDTEMP1 = ( 0 ) RDVDTEMP2 = ( 0 ) RTH0W = ( 0 ) RTH0WP = ( 1 ) CVDSOVER = ( 0 ) NINVD = ( 0 ) NINVDW = ( 0 ) NINVDWP = ( 1 ) NINVDT1 = ( 0 ) NINVDT2 = ( 0 ) RDVB = ( 0 ) RTH0NF = ( 0 ) RTHTEMP1 = ( 0 ) RTHTEMP2 = ( 0 ) PRATTEMP1 = ( 0 ) PRATTEMP2 = ( 0 ) RDVSUB = ( 1 ) RDVDSUB = ( 0.3 ) DDRIFT = ( 1e-06 ) VBISUB = ( 0.7 ) NSUBSUB = ( 1e+15 ) SHEMAX = ( 500 ) tmpk8ny_4pz/tests/hisimhv1/pmos/parameters/pmosParameters0000644000175000017500000002007013546075722024117 0ustar carstencarsten CORSRD = ( 3 ) CORG = ( 0 ) COIPRV = ( 1 ) COPPRV = ( 1 ) COADOV = ( 1 ) COISUB = ( 0 ) COIIGS = ( 0 ) COGIDL = ( 0 ) COOVLP = ( 1 ) COOVLPS = ( 0 ) COFLICK = ( 0 ) COISTI = ( 0 ) CONQS = ( 0 ) COTHRML = ( 0 ) COIGN = ( 0 ) CODFM = ( 0 ) COQOVSM = ( 1 ) CORBNET = ( 0 ) COSELFHEAT = ( 0 ) COSUBNODE = ( 0 ) COSYM = ( 0 ) COTEMP = ( 0 ) COERRREP = ( 1 ) VERSION = ( 2 ) VMAX = ( 1e+07 ) VMAXT1 = ( 0 ) VMAXT2 = ( 0 ) BGTMP1 = ( 9.025e-05 ) BGTMP2 = ( 1e-07 ) EG0 = ( 1.1785 ) TOX = ( 7e-09 ) XLD = ( 0 ) RDOV11 = ( 0 ) RDOV12 = ( 1 ) RDOV13 = ( 1 ) RDSLP1 = ( 0 ) RDICT1 = ( 1 ) RDSLP2 = ( 1 ) RDICT2 = ( 0 ) SUBLD1 = ( 0 ) SUBLD1L = ( 0 ) SUBLD1LP = ( 1 ) SUBLD2 = ( 0 ) XPDV = ( 0 ) XPVDTH = ( 0 ) XPVDTHG = ( 0 ) DDLTMAX = ( 10 ) DDLTSLP = ( 0 ) DDLTICT = ( 10 ) VFBOVER = ( -0.5 ) NOVER = ( 1e+17 ) NOVERS = ( 0 ) XWD = ( 0 ) XL = ( 0 ) XW = ( 0 ) SAREF = ( 1e-06 ) SBREF = ( 1e-06 ) LL = ( 0 ) LLD = ( 0 ) LLN = ( 0 ) WL = ( 0 ) WL1 = ( 0 ) WL1P = ( 1 ) WL2 = ( 0 ) WL2P = ( 1 ) WLD = ( 0 ) WLN = ( 0 ) RSH = ( 0 ) RSHG = ( 0 ) XQY = ( 0 ) XQY1 = ( 0 ) XQY2 = ( 2 ) RS = ( 0 ) RD = ( 0 ) VFBC = ( -1 ) VBI = ( 1.1 ) NSUBC = ( 3e+17 ) PARL2 = ( 1e-08 ) LP = ( 1.5e-08 ) NSUBP = ( 1e+18 ) NSUBP0 = ( 0 ) NSUBWP = ( 1 ) SCP1 = ( 1 ) SCP2 = ( 0 ) SCP3 = ( 0 ) SC1 = ( 1 ) SC2 = ( 0 ) SC3 = ( 0 ) SC4 = ( 0 ) PGD1 = ( 0 ) PGD2 = ( 1 ) PGD4 = ( 0 ) NDEP = ( 1 ) NDEPL = ( 0 ) NDEPLP = ( 1 ) NINV = ( 0.5 ) MUECB0 = ( 1000 ) MUECB1 = ( 100 ) MUEPH0 = ( 0.3 ) MUEPH1 = ( 9000 ) MUEPHW = ( 0 ) MUEPWP = ( 1 ) MUEPHL = ( 0 ) MUEPLP = ( 1 ) MUEPHS = ( 0 ) MUEPSP = ( 1 ) VTMP = ( 0 ) WVTH0 = ( 0 ) MUESR0 = ( 2 ) MUESR1 = ( 6e+14 ) MUESRL = ( 0 ) MUESRW = ( 0 ) MUESWP = ( 1 ) MUESLP = ( 1 ) MUETMP = ( 1.5 ) BB = ( 1 ) SUB1 = ( 10 ) SUB2 = ( 25 ) SVGS = ( 0.8 ) SVBS = ( 0.5 ) SVBSL = ( 0 ) SVDS = ( 0.8 ) SLG = ( 3e-08 ) SUB1L = ( 0.0025 ) SUB2L = ( 2e-06 ) FN1 = ( 0 ) FN2 = ( 0.00017 ) FN3 = ( 0 ) FVBS = ( 0.012 ) SVGSL = ( 0 ) SVGSLP = ( 1 ) SVGSWP = ( 1 ) SVGSW = ( 0 ) SVBSLP = ( 1 ) SLGL = ( 0 ) SLGLP = ( 1 ) SUB1LP = ( 1 ) NSTI = ( 1e+17 ) WSTI = ( 0 ) WSTIL = ( 0 ) WSTILP = ( 1 ) WSTIW = ( 0 ) WSTIWP = ( 1 ) SCSTI1 = ( 0 ) SCSTI2 = ( 0 ) VTHSTI = ( 0 ) VDSTI = ( 0 ) MUESTI1 = ( 0 ) MUESTI2 = ( 0 ) MUESTI3 = ( 1 ) NSUBPSTI1 = ( 0 ) NSUBPSTI2 = ( 0 ) NSUBPSTI3 = ( 1 ) LPEXT = ( 1e-50 ) NPEXT = ( 5e+17 ) SCP21 = ( 0 ) SCP22 = ( 0 ) BS1 = ( 0 ) BS2 = ( 0.9 ) TPOLY = ( 2e-07 ) CGBO = ( 0 ) JS0 = ( 5e-07 ) JS0SW = ( 0 ) NJ = ( 1 ) NJSW = ( 1 ) XTI = ( 2 ) CJ = ( 0.0005 ) CJSW = ( 5e-10 ) CJSWG = ( 5e-10 ) MJ = ( 0.5 ) MJSW = ( 0.33 ) MJSWG = ( 0.33 ) PB = ( 1 ) PBSW = ( 1 ) PBSWG = ( 1 ) XTI2 = ( 0 ) CISB = ( 0 ) CVB = ( 0 ) CTEMP = ( 0 ) CISBK = ( 0 ) DIVX = ( 0 ) CLM1 = ( 0.05 ) CLM2 = ( 2 ) CLM3 = ( 1 ) CLM5 = ( 1 ) CLM6 = ( 0 ) VOVER = ( 0.3 ) VOVERP = ( 0.3 ) WFC = ( 0 ) NSUBCW = ( 0 ) NSUBCWP = ( 1 ) QME1 = ( 0 ) QME2 = ( 1 ) QME3 = ( 0 ) VOVERS = ( 0 ) VOVERSP = ( 0 ) GIDL1 = ( 2 ) GIDL2 = ( 3e+07 ) GIDL3 = ( 0.9 ) GIDL4 = ( 0 ) GIDL5 = ( 0.2 ) GLEAK1 = ( 50 ) GLEAK2 = ( 1e+07 ) GLEAK3 = ( 0.06 ) GLEAK4 = ( 4 ) GLEAK5 = ( 7500 ) GLEAK6 = ( 0.25 ) GLEAK7 = ( 1e-06 ) GLPART1 = ( 0.5 ) GLKSD1 = ( 1e-15 ) GLKSD2 = ( 1000 ) GLKSD3 = ( -1000 ) GLKB1 = ( 5e-16 ) GLKB2 = ( 1 ) GLKB3 = ( 0 ) EGIG = ( 0 ) IGTEMP2 = ( 0 ) IGTEMP3 = ( 0 ) VZADD0 = ( 0.01 ) PZADD0 = ( 0.005 ) NFTRP = ( 1e+10 ) NFALP = ( 1e-19 ) CIT = ( 0 ) FALPH = ( 1 ) KAPPA = ( 3.9 ) VDIFFJ = ( 0.0006 ) DLY1 = ( 1e-10 ) DLY2 = ( 0.7 ) DLY3 = ( 8e-07 ) TNOM = ( 27 ) OVSLP = ( 2.1e-07 ) OVMAG = ( 0.6 ) GBMIN = ( 1e-12 ) RBPB = ( 50 ) RBDB = ( 50 ) RBSB = ( 50 ) IBPC1 = ( 0 ) IBPC1L = ( 0 ) IBPC1LP = ( -1 ) IBPC2 = ( 0 ) MPHDFM = ( -0.3 ) PTL = ( 0 ) PTP = ( 3.5 ) PT2 = ( 0 ) PTLP = ( 1 ) GDL = ( 0 ) GDLP = ( 0 ) GDLD = ( 0 ) PT4 = ( 0 ) PT4P = ( 1 ) RDVG11 = ( 0 ) RDVG12 = ( 100 ) RTH0 = ( 0.1 ) CTH0 = ( 1e-07 ) POWRAT = ( 1 ) TCJBD = ( 0 ) TCJBS = ( 0 ) TCJBDSW = ( 0 ) TCJBSSW = ( 0 ) TCJBDSWG = ( 0 ) TCJBSSWG = ( 0 ) DLYOV = ( 0 ) QDFTVD = ( 1 ) XLDLD = ( 1e-06 ) RDVD = ( 0.07 ) RD20 = ( 0 ) RD21 = ( 1 ) RD22 = ( 0 ) RD22D = ( 0 ) RD23 = ( 0.005 ) RD24 = ( 0 ) RD25 = ( 0 ) RDVDL = ( 0 ) RDVDLP = ( 1 ) RDVDS = ( 0 ) RDVDSP = ( 1 ) RD23L = ( 0 ) RD23LP = ( 1 ) RD23S = ( 0 ) RD23SP = ( 1 ) RDS = ( 0 ) RDSP = ( 1 ) RDTEMP1 = ( 0 ) RDTEMP2 = ( 0 ) RDVDTEMP1 = ( 0 ) RDVDTEMP2 = ( 0 ) RTH0W = ( 0 ) RTH0WP = ( 1 ) CVDSOVER = ( 0 ) NINVD = ( 0 ) NINVDW = ( 0 ) NINVDWP = ( 1 ) NINVDT1 = ( 0 ) NINVDT2 = ( 0 ) RDVB = ( 0 ) RTH0NF = ( 0 ) RTHTEMP1 = ( 0 ) RTHTEMP2 = ( 0 ) PRATTEMP1 = ( 0 ) PRATTEMP2 = ( 0 ) RDVSUB = ( 1 ) RDVDSUB = ( 0.3 ) DDRIFT = ( 1e-06 ) VBISUB = ( 0.7 ) NSUBSUB = ( 1e+15 ) SHEMAX = ( 500 ) tmpk8ny_4pz/tests/hisimhv1/pmos/reference/0000755000175000017500000000000013546075722020766 5ustar carstencarstentmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_NF_RD23.standard0000644000175000017500000000044213546075722024525 0ustar carstencarstenV(d) I(d) -1.000000e+00 -2.832921e-05 -3.000000e+00 -3.132099e-05 -5.000000e+00 -3.192151e-05 -7.000000e+00 -3.211167e-05 -9.000000e+00 -3.215101e-05 -1.100000e+01 -3.215307e-05 -1.300000e+01 -3.215409e-05 -1.500000e+01 -3.215497e-05 -1.700000e+01 -3.215574e-05 -1.900000e+01 -3.215643e-05 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/acFreq_coadov.standard0000644000175000017500000000711613546075722025251 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 7.09538360249507e-14 6.90994422055155e-14 2.6779394809148e-32 1258.925 7.09538570497621e-14 6.90994587597535e-14 2.67794081330055e-32 1584.893 7.09538444424256e-14 6.90994486938721e-14 2.67794010662474e-32 1995.262 7.09538421415848e-14 6.90994559153561e-14 2.67794040146895e-32 2511.886 7.09538220751598e-14 6.90994434451303e-14 2.6779401958051e-32 3162.278 7.09538136246388e-14 6.90994340039284e-14 2.6779395813105e-32 3981.072 7.0953836310425e-14 6.90994209192287e-14 2.67793957441194e-32 5011.872 7.09538287612029e-14 6.90994611911909e-14 2.67794017467024e-32 6309.573 7.09538302857706e-14 6.90994362092865e-14 2.67793917312034e-32 7943.282 7.09538359760579e-14 6.90994451665539e-14 2.67793981153218e-32 10000 7.09538360249507e-14 6.90994422055155e-14 2.6779394809148e-32 12589.25 7.09538570497621e-14 6.90994587597535e-14 2.67794081330055e-32 15848.93 7.09538444424256e-14 6.90994486938721e-14 2.67794010662474e-32 19952.62 7.09538421415848e-14 6.90994559153561e-14 2.67794040146895e-32 25118.86 7.09538220751599e-14 6.90994434451303e-14 2.6779401958051e-32 31622.78 7.09538136246388e-14 6.90994340039284e-14 2.6779395813105e-32 39810.72 7.0953836310425e-14 6.90994209192287e-14 2.67793957441194e-32 50118.72 7.09538287612029e-14 6.90994611911909e-14 2.67794017467024e-32 63095.73 7.09538302857706e-14 6.90994362092865e-14 2.67793917312034e-32 79432.82 7.09538359760578e-14 6.90994451665539e-14 2.67793981153218e-32 100000 7.09538360249507e-14 6.90994422055155e-14 2.6779394809148e-32 125892.5 7.09538570497621e-14 6.90994587597535e-14 2.67794081330055e-32 158489.3 7.09538444424256e-14 6.90994486938721e-14 2.67794010662474e-32 199526.2 7.09538421415848e-14 6.90994559153561e-14 2.67794040146895e-32 251188.6 7.09538220751598e-14 6.90994434451303e-14 2.6779401958051e-32 316227.8 7.09538136246388e-14 6.90994340039284e-14 2.67793958131049e-32 398107.2 7.0953836310425e-14 6.90994209192287e-14 2.67793957441194e-32 501187.2 7.09538287612029e-14 6.90994611911909e-14 2.67794017467024e-32 630957.3 7.09538302857706e-14 6.90994362092865e-14 2.67793917312034e-32 794328.2 7.09538359760579e-14 6.90994451665539e-14 2.67793981153218e-32 1000000 7.09538360249507e-14 6.90994422055155e-14 2.6779394809148e-32 1258925 7.09538570497621e-14 6.90994587597535e-14 2.67794081330055e-32 1584893 7.09538444424256e-14 6.90994486938721e-14 2.67794010662474e-32 1995262 7.09538421415848e-14 6.90994559153561e-14 2.67794040146895e-32 2511886 7.09538220751598e-14 6.90994434451302e-14 2.6779401958051e-32 3162278 7.09538136246388e-14 6.90994340039284e-14 2.67793958131049e-32 3981072 7.0953836310425e-14 6.90994209192287e-14 2.67793957441194e-32 5011872 7.09538287612029e-14 6.90994611911909e-14 2.67794017467024e-32 6309573 7.09538302857706e-14 6.90994362092865e-14 2.67793917312034e-32 7943282 7.09538359760579e-14 6.90994451665539e-14 2.67793981153218e-32 10000000 7.09538360249507e-14 6.90994422055155e-14 2.6779394809148e-32 12589250 7.09538570497621e-14 6.90994587597535e-14 2.67794081330055e-32 15848930 7.09538444424256e-14 6.90994486938721e-14 2.67794010662474e-32 19952620 7.09538421415848e-14 6.90994559153561e-14 2.67794040146895e-32 25118860 7.09538220751599e-14 6.90994434451303e-14 2.6779401958051e-32 31622780 7.09538136246388e-14 6.90994340039284e-14 2.67793958131049e-32 39810720 7.0953836310425e-14 6.90994209192287e-14 2.67793957441194e-32 50118720 7.09538287612029e-14 6.90994611911909e-14 2.67794017467024e-32 63095730 7.09538302857706e-14 6.90994362092865e-14 2.67793917312034e-32 79432820 7.09538359760579e-14 6.90994451665539e-14 2.67793981153218e-32 100000000 7.09538360249507e-14 6.90994422055155e-14 2.6779394809148e-32 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_COTEMP2.standard0000644000175000017500000000044213546075722024541 0ustar carstencarstenV(d) I(d) -1.000000e+00 -2.233789e-03 -3.000000e+00 -5.903915e-03 -5.000000e+00 -8.614845e-03 -7.000000e+00 -1.037170e-02 -9.000000e+00 -1.116639e-02 -1.100000e+01 -1.132687e-02 -1.300000e+01 -1.133029e-02 -1.500000e+01 -1.133296e-02 -1.700000e+01 -1.133528e-02 -1.900000e+01 -1.133732e-02 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/acVd_corsrd1.standard0000644000175000017500000000551413546075722025027 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -1 4.962487e-07 3.083275e-04 5.27388842792831e-13 1.92446952105852e-12 -2 3.494142e-06 2.951627e-04 5.55865150502915e-13 1.87859250863712e-12 -3 1.001879e-05 2.788533e-04 5.84939458374911e-13 1.82188849328426e-12 -4 2.166844e-05 2.575321e-04 6.1479666645888e-13 1.74639447284392e-12 -5 4.089578e-05 2.287744e-04 6.4504947464996e-13 1.63804844350876e-12 -6 7.152863e-05 1.890112e-04 6.74110882518463e-13 1.46742439731156e-12 -7 1.196425e-04 1.326854e-04 6.96023588451424e-13 1.16387831512513e-12 -8 1.885388e-04 5.829101e-05 6.87407686118631e-13 6.58219578215823e-13 -9 2.445854e-04 2.501420e-06 6.45156574678958e-13 2.67902772535845e-13 -10 2.471485e-04 1.188152e-07 6.33232771450536e-13 1.85237350153821e-13 -11 2.471761e-04 9.976792e-08 6.15930966765997e-13 5.2414494191453e-14 -12 2.471984e-04 8.567930e-08 6.13944466228143e-13 3.68995099907033e-14 -13 2.472170e-04 7.484155e-08 6.13142966011134e-13 3.04984982576015e-14 -14 2.472326e-04 6.649372e-08 6.12686765887615e-13 2.67782472503273e-14 -15 2.472457e-04 6.001309e-08 6.12385965806172e-13 2.42728365719764e-14 -16 2.472569e-04 5.490974e-08 6.12170665747879e-13 2.24386860753722e-14 -17 2.472666e-04 5.082079e-08 6.12008265703908e-13 2.10213556916238e-14 -18 2.472751e-04 4.748507e-08 6.11881165669496e-13 1.98837453836108e-14 -19 2.472827e-04 4.471613e-08 6.11778865641797e-13 1.89445451293183e-14 -20 2.472895e-04 4.238037e-08 6.11694965619081e-13 1.81521049147616e-14 -1 2.608536e-06 2.786275e-04 5.79832456992168e-13 1.86186350410767e-12 -2 7.916285e-06 2.629871e-04 6.10161465203879e-13 1.80848448965507e-12 -3 1.677424e-05 2.444262e-04 6.41275873628241e-13 1.74288047189249e-12 -4 3.041381e-05 2.214829e-04 6.73404782327283e-13 1.65693144862142e-12 -5 5.058763e-05 1.924270e-04 7.06355291248777e-13 1.53659041603856e-12 -6 7.989576e-05 1.547964e-04 7.39217900146472e-13 1.35261336622597e-12 -7 1.220084e-04 1.052488e-04 7.66878307635648e-13 1.04362128256502e-12 -8 1.755570e-04 4.676944e-05 7.68260808009966e-13 6.00215062510847e-13 -9 2.160084e-04 6.016760e-06 7.41573500784261e-13 2.94145479641172e-13 -10 2.223540e-04 1.084990e-07 7.21382595317486e-13 1.56017742242485e-13 -11 2.223786e-04 9.146701e-08 7.09220692024597e-13 5.04473736588466e-14 -12 2.223980e-04 7.931659e-08 7.07619891591173e-13 3.62791098227273e-14 -13 2.224145e-04 6.982635e-08 7.06945691408631e-13 3.01811881716884e-14 -14 2.224285e-04 6.235654e-08 7.06555591303009e-13 2.65826571973704e-14 -15 2.224406e-04 5.644269e-08 7.06295991232722e-13 2.41395965359011e-14 -16 2.224510e-04 5.171274e-08 7.06108991182091e-13 2.23420560492092e-14 -17 2.224601e-04 4.787932e-08 7.05967191143698e-13 2.09482256718235e-14 -18 2.224681e-04 4.472707e-08 7.05855791113536e-13 1.98266653681562e-14 -19 2.224753e-04 4.209680e-08 7.05765891089195e-13 1.88989551169746e-14 -20 2.224817e-04 3.987110e-08 7.05691891069159e-13 1.81150449047275e-14 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/acVd_corg.standard0000644000175000017500000000551013546075722024400 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -1 2.670475e-06 2.092080e-03 5.65773653185685e-13 6.72729882144551e-13 -2 3.504811e-05 1.832258e-03 6.26080569514046e-13 6.12985565968517e-13 -3 9.600629e-05 1.589382e-03 6.79593984003037e-13 5.5888425132035e-13 -4 1.864544e-04 1.355423e-03 7.27175996886074e-13 5.07747737474916e-13 -5 3.105655e-04 1.121704e-03 7.69180008258844e-13 4.56029423471956e-13 -6 4.753885e-04 8.799598e-04 8.04333217776729e-13 4.00253208370303e-13 -7 6.842120e-04 6.297038e-04 8.29305924538198e-13 3.40575292212247e-13 -8 9.207582e-04 3.896816e-04 8.41748327907033e-13 2.85060177181287e-13 -9 1.141821e-03 1.952061e-04 8.45024428794051e-13 2.44811366283746e-13 -10 1.304090e-03 7.014926e-05 8.44422228631003e-13 2.19330459384679e-13 -11 1.402085e-03 4.455501e-06 8.23691823018155e-13 1.72197346623183e-13 -12 1.406696e-03 1.585491e-06 7.59085105525605e-13 5.221836413835e-14 -13 1.406928e-03 1.446764e-06 7.50354803161837e-13 3.53825795799878e-14 -14 1.407129e-03 1.336034e-06 7.47245702320035e-13 2.89591978408292e-14 -15 1.407314e-03 1.240775e-06 7.45609001876891e-13 2.53260568571404e-14 -16 1.407489e-03 1.156915e-06 7.44602301604322e-13 2.2913636203967e-14 -17 1.407653e-03 1.082647e-06 7.43929701422213e-13 2.11626857298895e-14 -18 1.407808e-03 1.016807e-06 7.43457501294363e-13 1.98173953656463e-14 -19 1.407953e-03 9.584296e-07 7.43115501201765e-13 1.87419750744715e-14 -20 1.408088e-03 9.066352e-07 7.42863201133453e-13 1.78567948348051e-14 -1 3.469082e-05 1.603909e-03 5.54791350212179e-13 6.80818384334548e-13 -2 8.804536e-05 1.406445e-03 6.08080664640493e-13 6.27962270023525e-13 -3 1.601666e-04 1.219133e-03 6.57031677894194e-13 5.77985856492193e-13 -4 2.528203e-04 1.034813e-03 7.02155090111555e-13 5.28068042976727e-13 -5 3.701239e-04 8.462339e-04 7.43548401318974e-13 4.74106728366466e-13 -6 5.173571e-04 6.477889e-04 7.79388611022867e-13 4.12314511635953e-13 -7 6.934892e-04 4.435939e-04 8.05192918009496e-13 3.44908593385507e-13 -8 8.780511e-04 2.563967e-04 8.17867621441227e-13 2.84620977062372e-13 -9 1.033712e-03 1.169279e-04 8.20869222253924e-13 2.42911765769421e-13 -10 1.134906e-03 3.672691e-05 8.17278121281618e-13 2.09964856848901e-13 -11 1.183633e-03 2.723835e-06 7.71263908823069e-13 9.08537545990505e-14 -12 1.185996e-03 1.207407e-06 7.51865403570839e-13 4.22882414497259e-14 -13 1.186188e-03 1.103059e-06 7.48261302595013e-13 3.2358968761332e-14 -14 1.186359e-03 1.017879e-06 7.4662900215306e-13 2.75150674498246e-14 -15 1.186517e-03 9.441985e-07 7.45693801899851e-13 2.45125366368763e-14 -16 1.186666e-03 8.795883e-07 7.4509510173775e-13 2.24190960700681e-14 -17 1.186805e-03 8.227375e-07 7.44686701627174e-13 2.08526256459394e-14 -18 1.186935e-03 7.726668e-07 7.44397501548872e-13 1.96236353131849e-14 -19 1.187056e-03 7.285251e-07 7.44187901492122e-13 1.86260950430965e-14 -20 1.187169e-03 6.895448e-07 7.44034501450588e-13 1.77954348181916e-14 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/acVg_QOVADD.standard0000644000175000017500000000265513546075722024436 0ustar carstencarstenV(g) g(d,g) g(d,d) c(g,s) c(g,d) -1 2.381478e-04 5.112603e-08 6.18132467362063e-13 6.75850182989386e-14 -2 6.280446e-04 1.094652e-04 6.70895281647825e-13 2.91960779049655e-13 -3 4.724781e-04 7.214749e-04 6.17132367091281e-13 5.59460251476304e-13 -4 3.382147e-04 1.182747e-03 5.93657160735267e-13 6.200169678723e-13 -5 2.363051e-04 1.512078e-03 5.83354357945738e-13 6.42560473976052e-13 -6 1.592312e-04 1.742774e-03 5.77597956387167e-13 6.53916877050848e-13 -7 1.012778e-04 1.899640e-03 5.73724655338454e-13 6.60833478923548e-13 -8 5.804490e-05 2.001318e-03 5.70711954522752e-13 6.65698580240795e-13 -9 2.607764e-05 2.061909e-03 5.68125953822581e-13 6.69510781272965e-13 -10 2.670475e-06 2.092080e-03 5.65773653185685e-13 6.72729882144551e-13 -1 2.054277e-04 6.391517e-08 6.19960967857137e-13 6.82626984824235e-14 -2 3.822190e-04 1.349016e-04 6.56660377793663e-13 3.36885791213298e-13 -3 3.049291e-04 5.129928e-04 6.02125063027988e-13 5.66263653318355e-13 -4 2.383916e-04 8.144732e-04 5.80251657105668e-13 6.24528869093916e-13 -5 1.848311e-04 1.049127e-03 5.70082554352339e-13 6.48605875612871e-13 -6 1.412825e-04 1.230659e-03 5.64449652827206e-13 6.61252579037021e-13 -7 1.057737e-04 1.369470e-03 5.60900551866272e-13 6.68909081110053e-13 -8 7.688987e-05 1.473742e-03 5.58395451188005e-13 6.74061382505061e-13 -9 5.350831e-05 1.550086e-03 5.56441950659086e-13 6.77841183528458e-13 -10 3.469082e-05 1.603909e-03 5.54791350212179e-13 6.80818384334548e-13 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_rs2m.standard0000644000175000017500000001511213546075722024353 0ustar carstencarstenV(d) I(d) -1.000000e+00 -2.521999e-12 -2.000000e+00 -2.524027e-12 -3.000000e+00 -2.525502e-12 -4.000000e+00 -2.527052e-12 -5.000000e+00 -2.528537e-12 -6.000000e+00 -2.529975e-12 -7.000000e+00 -2.531378e-12 -8.000000e+00 -2.532754e-12 -9.000000e+00 -2.534107e-12 -1.000000e+01 -2.535440e-12 -1.100000e+01 -2.536756e-12 -1.200000e+01 -2.538060e-12 -1.300000e+01 -2.539352e-12 -1.400000e+01 -2.540630e-12 -1.500000e+01 -2.541902e-12 -1.600000e+01 -2.543162e-12 -1.700000e+01 -2.544417e-12 -1.800000e+01 -2.545663e-12 -1.900000e+01 -2.546898e-12 -2.000000e+01 -2.548132e-12 -1.000000e+00 -9.425375e-07 -2.000000e+00 -9.428473e-07 -3.000000e+00 -9.430832e-07 -4.000000e+00 -9.432816e-07 -5.000000e+00 -9.434562e-07 -6.000000e+00 -9.436139e-07 -7.000000e+00 -9.437588e-07 -8.000000e+00 -9.438937e-07 -9.000000e+00 -9.440204e-07 -1.000000e+01 -9.441402e-07 -1.100000e+01 -9.442541e-07 -1.200000e+01 -9.443630e-07 -1.300000e+01 -9.444674e-07 -1.400000e+01 -9.445678e-07 -1.500000e+01 -9.446647e-07 -1.600000e+01 -9.447585e-07 -1.700000e+01 -9.448493e-07 -1.800000e+01 -9.449376e-07 -1.900000e+01 -9.450234e-07 -2.000000e+01 -9.451069e-07 -1.000000e+00 -1.907689e-04 -2.000000e+00 -2.388822e-04 -3.000000e+00 -2.389567e-04 -4.000000e+00 -2.390035e-04 -5.000000e+00 -2.390391e-04 -6.000000e+00 -2.390688e-04 -7.000000e+00 -2.390949e-04 -8.000000e+00 -2.391185e-04 -9.000000e+00 -2.391402e-04 -1.000000e+01 -2.391604e-04 -1.100000e+01 -2.391793e-04 -1.200000e+01 -2.391973e-04 -1.300000e+01 -2.392144e-04 -1.400000e+01 -2.392307e-04 -1.500000e+01 -2.392464e-04 -1.600000e+01 -2.392614e-04 -1.700000e+01 -2.392760e-04 -1.800000e+01 -2.392901e-04 -1.900000e+01 -2.393037e-04 -2.000000e+01 -2.393170e-04 -1.000000e+00 -3.143343e-04 -2.000000e+00 -6.150997e-04 -3.000000e+00 -9.000101e-04 -4.000000e+00 -1.165175e-03 -5.000000e+00 -1.403350e-03 -6.000000e+00 -1.598798e-03 -7.000000e+00 -1.715050e-03 -8.000000e+00 -1.730029e-03 -9.000000e+00 -1.730712e-03 -1.000000e+01 -1.731214e-03 -1.100000e+01 -1.731604e-03 -1.200000e+01 -1.731918e-03 -1.300000e+01 -1.732178e-03 -1.400000e+01 -1.732401e-03 -1.500000e+01 -1.732595e-03 -1.600000e+01 -1.732766e-03 -1.700000e+01 -1.732921e-03 -1.800000e+01 -1.733061e-03 -1.900000e+01 -1.733190e-03 -2.000000e+01 -1.733309e-03 -1.000000e+00 -1.343543e-15 -2.000000e+00 -2.343611e-15 -3.000000e+00 -3.343463e-15 -4.000000e+00 -4.343748e-15 -5.000000e+00 -5.343816e-15 -6.000000e+00 -6.344317e-15 -7.000000e+00 -7.345253e-15 -8.000000e+00 -8.344020e-15 -9.000000e+00 -9.344955e-15 -1.000000e+01 -1.034589e-14 -1.100000e+01 -1.134509e-14 -1.200000e+01 -1.234603e-14 -1.300000e+01 -1.334436e-14 -1.400000e+01 -1.434356e-14 -1.500000e+01 -1.534450e-14 -1.600000e+01 -1.634630e-14 -1.700000e+01 -1.734463e-14 -1.800000e+01 -1.834297e-14 -1.900000e+01 -1.934217e-14 -2.000000e+01 -2.034484e-14 -1.000000e+00 -4.271010e-08 -2.000000e+00 -4.272449e-08 -3.000000e+00 -4.273552e-08 -4.000000e+00 -4.274482e-08 -5.000000e+00 -4.275301e-08 -6.000000e+00 -4.276041e-08 -7.000000e+00 -4.276722e-08 -8.000000e+00 -4.277356e-08 -9.000000e+00 -4.277952e-08 -1.000000e+01 -4.278515e-08 -1.100000e+01 -4.279051e-08 -1.200000e+01 -4.279564e-08 -1.300000e+01 -4.280055e-08 -1.400000e+01 -4.280528e-08 -1.500000e+01 -4.280984e-08 -1.600000e+01 -4.281425e-08 -1.700000e+01 -4.281853e-08 -1.800000e+01 -4.282268e-08 -1.900000e+01 -4.282672e-08 -2.000000e+01 -4.283066e-08 -1.000000e+00 -2.329836e-04 -2.000000e+00 -3.052885e-04 -3.000000e+00 -3.053985e-04 -4.000000e+00 -3.054644e-04 -5.000000e+00 -3.055131e-04 -6.000000e+00 -3.055532e-04 -7.000000e+00 -3.055882e-04 -8.000000e+00 -3.056196e-04 -9.000000e+00 -3.056483e-04 -1.000000e+01 -3.056750e-04 -1.100000e+01 -3.057001e-04 -1.200000e+01 -3.057237e-04 -1.300000e+01 -3.057462e-04 -1.400000e+01 -3.057676e-04 -1.500000e+01 -3.057882e-04 -1.600000e+01 -3.058080e-04 -1.700000e+01 -3.058271e-04 -1.800000e+01 -3.058456e-04 -1.900000e+01 -3.058635e-04 -2.000000e+01 -3.058808e-04 -1.000000e+00 -3.465264e-04 -2.000000e+00 -6.822056e-04 -3.000000e+00 -1.005744e-03 -4.000000e+00 -1.315073e-03 -5.000000e+00 -1.606733e-03 -6.000000e+00 -1.874279e-03 -7.000000e+00 -2.103550e-03 -8.000000e+00 -2.258141e-03 -9.000000e+00 -2.287427e-03 -1.000000e+01 -2.288865e-03 -1.100000e+01 -2.289890e-03 -1.200000e+01 -2.290663e-03 -1.300000e+01 -2.291272e-03 -1.400000e+01 -2.291768e-03 -1.500000e+01 -2.292183e-03 -1.600000e+01 -2.292538e-03 -1.700000e+01 -2.292848e-03 -1.800000e+01 -2.293121e-03 -1.900000e+01 -2.293366e-03 -2.000000e+01 -2.293588e-03 -1.000000e+00 -6.715818e-09 -2.000000e+00 -6.718078e-09 -3.000000e+00 -6.719812e-09 -4.000000e+00 -6.721274e-09 -5.000000e+00 -6.722563e-09 -6.000000e+00 -6.723728e-09 -7.000000e+00 -6.724799e-09 -8.000000e+00 -6.725797e-09 -9.000000e+00 -6.726734e-09 -1.000000e+01 -6.727621e-09 -1.100000e+01 -6.728464e-09 -1.200000e+01 -6.729270e-09 -1.300000e+01 -6.730044e-09 -1.400000e+01 -6.730788e-09 -1.500000e+01 -6.731506e-09 -1.600000e+01 -6.732201e-09 -1.700000e+01 -6.732874e-09 -1.800000e+01 -6.733528e-09 -1.900000e+01 -6.734164e-09 -2.000000e+01 -6.734784e-09 -1.000000e+00 -5.427155e-06 -2.000000e+00 -5.428834e-06 -3.000000e+00 -5.430088e-06 -4.000000e+00 -5.431134e-06 -5.000000e+00 -5.432051e-06 -6.000000e+00 -5.432878e-06 -7.000000e+00 -5.433636e-06 -8.000000e+00 -5.434341e-06 -9.000000e+00 -5.435002e-06 -1.000000e+01 -5.435627e-06 -1.100000e+01 -5.436221e-06 -1.200000e+01 -5.436788e-06 -1.300000e+01 -5.437332e-06 -1.400000e+01 -5.437855e-06 -1.500000e+01 -5.438359e-06 -1.600000e+01 -5.438847e-06 -1.700000e+01 -5.439319e-06 -1.800000e+01 -5.439778e-06 -1.900000e+01 -5.440224e-06 -2.000000e+01 -5.440659e-06 -1.000000e+00 -1.491500e-04 -2.000000e+00 -1.860187e-04 -3.000000e+00 -1.860713e-04 -4.000000e+00 -1.861050e-04 -5.000000e+00 -1.861309e-04 -6.000000e+00 -1.861528e-04 -7.000000e+00 -1.861721e-04 -8.000000e+00 -1.861896e-04 -9.000000e+00 -1.862057e-04 -1.000000e+01 -1.862207e-04 -1.100000e+01 -1.862348e-04 -1.200000e+01 -1.862482e-04 -1.300000e+01 -1.862609e-04 -1.400000e+01 -1.862731e-04 -1.500000e+01 -1.862848e-04 -1.600000e+01 -1.862960e-04 -1.700000e+01 -1.863069e-04 -1.800000e+01 -1.863174e-04 -1.900000e+01 -1.863276e-04 -2.000000e+01 -1.863375e-04 -1.000000e+00 -2.686617e-04 -2.000000e+00 -5.200436e-04 -3.000000e+00 -7.504402e-04 -4.000000e+00 -9.530351e-04 -5.000000e+00 -1.113815e-03 -6.000000e+00 -1.205028e-03 -7.000000e+00 -1.218822e-03 -8.000000e+00 -1.219142e-03 -9.000000e+00 -1.219383e-03 -1.000000e+01 -1.219576e-03 -1.100000e+01 -1.219734e-03 -1.200000e+01 -1.219869e-03 -1.300000e+01 -1.219986e-03 -1.400000e+01 -1.220089e-03 -1.500000e+01 -1.220183e-03 -1.600000e+01 -1.220268e-03 -1.700000e+01 -1.220347e-03 -1.800000e+01 -1.220420e-03 -1.900000e+01 -1.220489e-03 -2.000000e+01 -1.220554e-03 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_coisti.standard0000644000175000017500000001167213546075722024771 0ustar carstencarstenV(d) I(d) -1.000000e+00 -1.311094e-03 -2.000000e+00 -1.550583e-03 -3.000000e+00 -1.562269e-03 -4.000000e+00 -1.564828e-03 -5.000000e+00 -1.566507e-03 -6.000000e+00 -1.567888e-03 -7.000000e+00 -1.569098e-03 -8.000000e+00 -1.570191e-03 -9.000000e+00 -1.571197e-03 -1.000000e+01 -1.572134e-03 -1.100000e+01 -1.573016e-03 -1.200000e+01 -1.573852e-03 -1.300000e+01 -1.574649e-03 -1.400000e+01 -1.575411e-03 -1.500000e+01 -1.576143e-03 -1.600000e+01 -1.576848e-03 -1.700000e+01 -1.577529e-03 -1.800000e+01 -1.578189e-03 -1.900000e+01 -1.578830e-03 -2.000000e+01 -1.579452e-03 -1.000000e+00 -2.607639e-03 -2.000000e+00 -4.163950e-03 -3.000000e+00 -5.079851e-03 -4.000000e+00 -5.525300e-03 -5.000000e+00 -5.631717e-03 -6.000000e+00 -5.647563e-03 -7.000000e+00 -5.655175e-03 -8.000000e+00 -5.659777e-03 -9.000000e+00 -5.663225e-03 -1.000000e+01 -5.666109e-03 -1.100000e+01 -5.668647e-03 -1.200000e+01 -5.670944e-03 -1.300000e+01 -5.673057e-03 -1.400000e+01 -5.675025e-03 -1.500000e+01 -5.676874e-03 -1.600000e+01 -5.678625e-03 -1.700000e+01 -5.680291e-03 -1.800000e+01 -5.681883e-03 -1.900000e+01 -5.683413e-03 -2.000000e+01 -5.684885e-03 -1.000000e+00 -3.240880e-03 -2.000000e+00 -5.573516e-03 -3.000000e+00 -7.321252e-03 -4.000000e+00 -8.681069e-03 -5.000000e+00 -9.769702e-03 -6.000000e+00 -1.065907e-02 -7.000000e+00 -1.139545e-02 -8.000000e+00 -1.200968e-02 -9.000000e+00 -1.252280e-02 -1.000000e+01 -1.294939e-02 -1.100000e+01 -1.329974e-02 -1.200000e+01 -1.358146e-02 -1.300000e+01 -1.380091e-02 -1.400000e+01 -1.396434e-02 -1.500000e+01 -1.407893e-02 -1.600000e+01 -1.415308e-02 -1.700000e+01 -1.419611e-02 -1.800000e+01 -1.421687e-02 -1.900000e+01 -1.422436e-02 -2.000000e+01 -1.422987e-02 -1.000000e+00 -1.710684e-03 -2.000000e+00 -1.965955e-03 -3.000000e+00 -1.977438e-03 -4.000000e+00 -1.980389e-03 -5.000000e+00 -1.982415e-03 -6.000000e+00 -1.984091e-03 -7.000000e+00 -1.985559e-03 -8.000000e+00 -1.986886e-03 -9.000000e+00 -1.988107e-03 -1.000000e+01 -1.989245e-03 -1.100000e+01 -1.990316e-03 -1.200000e+01 -1.991331e-03 -1.300000e+01 -1.992298e-03 -1.400000e+01 -1.993223e-03 -1.500000e+01 -1.994112e-03 -1.600000e+01 -1.994969e-03 -1.700000e+01 -1.995797e-03 -1.800000e+01 -1.996598e-03 -1.900000e+01 -1.997375e-03 -2.000000e+01 -1.998131e-03 -1.000000e+00 -3.336792e-03 -2.000000e+00 -5.209523e-03 -3.000000e+00 -6.301982e-03 -4.000000e+00 -6.865315e-03 -5.000000e+00 -7.030090e-03 -6.000000e+00 -7.048730e-03 -7.000000e+00 -7.058020e-03 -8.000000e+00 -7.063562e-03 -9.000000e+00 -7.067635e-03 -1.000000e+01 -7.071003e-03 -1.100000e+01 -7.073949e-03 -1.200000e+01 -7.076602e-03 -1.300000e+01 -7.079034e-03 -1.400000e+01 -7.081293e-03 -1.500000e+01 -7.083410e-03 -1.600000e+01 -7.085410e-03 -1.700000e+01 -7.087309e-03 -1.800000e+01 -7.089122e-03 -1.900000e+01 -7.090860e-03 -2.000000e+01 -7.092531e-03 -1.000000e+00 -3.799091e-03 -2.000000e+00 -6.432758e-03 -3.000000e+00 -8.358023e-03 -4.000000e+00 -9.833102e-03 -5.000000e+00 -1.100323e-02 -6.000000e+00 -1.195511e-02 -7.000000e+00 -1.274362e-02 -8.000000e+00 -1.340515e-02 -9.000000e+00 -1.396470e-02 -1.000000e+01 -1.443991e-02 -1.100000e+01 -1.484344e-02 -1.200000e+01 -1.518452e-02 -1.300000e+01 -1.546997e-02 -1.400000e+01 -1.570508e-02 -1.500000e+01 -1.589424e-02 -1.600000e+01 -1.604160e-02 -1.700000e+01 -1.615154e-02 -1.800000e+01 -1.622905e-02 -1.900000e+01 -1.627971e-02 -2.000000e+01 -1.630937e-02 -1.000000e+00 -9.533398e-04 -2.000000e+00 -1.184543e-03 -3.000000e+00 -1.197638e-03 -4.000000e+00 -1.199917e-03 -5.000000e+00 -1.201258e-03 -6.000000e+00 -1.202341e-03 -7.000000e+00 -1.203287e-03 -8.000000e+00 -1.204140e-03 -9.000000e+00 -1.204924e-03 -1.000000e+01 -1.205655e-03 -1.100000e+01 -1.206342e-03 -1.200000e+01 -1.206993e-03 -1.300000e+01 -1.207613e-03 -1.400000e+01 -1.208206e-03 -1.500000e+01 -1.208776e-03 -1.600000e+01 -1.209325e-03 -1.700000e+01 -1.209855e-03 -1.800000e+01 -1.210368e-03 -1.900000e+01 -1.210866e-03 -2.000000e+01 -1.211350e-03 -1.000000e+00 -1.872265e-03 -2.000000e+00 -3.065241e-03 -3.000000e+00 -3.780979e-03 -4.000000e+00 -4.116897e-03 -5.000000e+00 -4.192779e-03 -6.000000e+00 -4.206025e-03 -7.000000e+00 -4.212077e-03 -8.000000e+00 -4.215712e-03 -9.000000e+00 -4.218443e-03 -1.000000e+01 -4.220733e-03 -1.100000e+01 -4.222756e-03 -1.200000e+01 -4.224590e-03 -1.300000e+01 -4.226283e-03 -1.400000e+01 -4.227864e-03 -1.500000e+01 -4.229352e-03 -1.600000e+01 -4.230763e-03 -1.700000e+01 -4.232108e-03 -1.800000e+01 -4.233395e-03 -1.900000e+01 -4.234633e-03 -2.000000e+01 -4.235826e-03 -1.000000e+00 -2.548978e-03 -2.000000e+00 -4.469343e-03 -3.000000e+00 -5.953682e-03 -4.000000e+00 -7.130784e-03 -5.000000e+00 -8.082478e-03 -6.000000e+00 -8.861204e-03 -7.000000e+00 -9.501164e-03 -8.000000e+00 -1.002490e-02 -9.000000e+00 -1.044742e-02 -1.000000e+01 -1.077923e-02 -1.100000e+01 -1.102898e-02 -1.200000e+01 -1.120593e-02 -1.300000e+01 -1.132158e-02 -1.400000e+01 -1.138971e-02 -1.500000e+01 -1.142480e-02 -1.600000e+01 -1.143964e-02 -1.700000e+01 -1.144653e-02 -1.800000e+01 -1.145187e-02 -1.900000e+01 -1.145625e-02 -2.000000e+01 -1.145998e-02 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_NF_RDS.standard0000644000175000017500000000044213546075722024503 0ustar carstencarstenV(d) I(d) -1.000000e+00 -1.478361e-03 -3.000000e+00 -4.100815e-03 -5.000000e+00 -6.323941e-03 -7.000000e+00 -8.175053e-03 -9.000000e+00 -9.643959e-03 -1.100000e+01 -1.066606e-02 -1.300000e+01 -1.116940e-02 -1.500000e+01 -1.127656e-02 -1.700000e+01 -1.128575e-02 -1.900000e+01 -1.129292e-02 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_Ig1_vb0.standard0000644000175000017500000001167213546075722024666 0ustar carstencarstenV(g) I(d) -1.000000e+00 -8.820902e-05 -2.000000e+00 -8.417279e-04 -3.000000e+00 -2.132059e-03 -4.000000e+00 -3.568050e-03 -5.000000e+00 -4.604273e-03 -6.000000e+00 -5.316807e-03 -7.000000e+00 -5.805931e-03 -8.000000e+00 -6.134393e-03 -9.000000e+00 -6.345001e-03 -1.000000e+01 -6.468379e-03 -1.100000e+01 -6.526939e-03 -1.200000e+01 -6.537300e-03 -1.300000e+01 -6.511892e-03 -1.400000e+01 -6.460069e-03 -1.500000e+01 -6.388908e-03 -1.600000e+01 -6.303778e-03 -1.700000e+01 -6.208770e-03 -1.800000e+01 -6.107001e-03 -1.900000e+01 -6.000854e-03 -2.000000e+01 -5.892146e-03 -1.000000e+00 -8.855397e-05 -2.000000e+00 -8.444646e-04 -3.000000e+00 -2.139052e-03 -4.000000e+00 -3.731233e-03 -5.000000e+00 -5.471419e-03 -6.000000e+00 -7.075929e-03 -7.000000e+00 -8.178985e-03 -8.000000e+00 -8.908217e-03 -9.000000e+00 -9.393531e-03 -1.000000e+01 -9.711746e-03 -1.100000e+01 -9.910717e-03 -1.200000e+01 -1.002244e-02 -1.300000e+01 -1.006935e-02 -1.400000e+01 -1.006764e-02 -1.500000e+01 -1.002926e-02 -1.600000e+01 -9.963202e-03 -1.700000e+01 -9.876287e-03 -1.800000e+01 -9.773754e-03 -1.900000e+01 -9.659658e-03 -2.000000e+01 -9.537154e-03 -1.000000e+00 -8.903270e-05 -2.000000e+00 -8.477921e-04 -3.000000e+00 -2.146302e-03 -4.000000e+00 -3.743369e-03 -5.000000e+00 -5.489032e-03 -6.000000e+00 -7.287761e-03 -7.000000e+00 -9.076325e-03 -8.000000e+00 -1.077502e-02 -9.000000e+00 -1.204434e-02 -1.000000e+01 -1.285446e-02 -1.100000e+01 -1.336718e-02 -1.200000e+01 -1.369405e-02 -1.300000e+01 -1.389747e-02 -1.400000e+01 -1.401433e-02 -1.500000e+01 -1.406824e-02 -1.600000e+01 -1.407519e-02 -1.700000e+01 -1.404651e-02 -1.800000e+01 -1.399049e-02 -1.900000e+01 -1.391333e-02 -2.000000e+01 -1.381977e-02 -1.000000e+00 -7.424457e-05 -2.000000e+00 -1.059611e-03 -3.000000e+00 -2.757139e-03 -4.000000e+00 -4.562469e-03 -5.000000e+00 -5.756057e-03 -6.000000e+00 -6.507380e-03 -7.000000e+00 -6.973412e-03 -8.000000e+00 -7.246501e-03 -9.000000e+00 -7.386391e-03 -1.000000e+01 -7.433493e-03 -1.100000e+01 -7.415785e-03 -1.200000e+01 -7.352937e-03 -1.300000e+01 -7.258929e-03 -1.400000e+01 -7.143778e-03 -1.500000e+01 -7.014701e-03 -1.600000e+01 -6.876920e-03 -1.700000e+01 -6.734219e-03 -1.800000e+01 -6.589338e-03 -1.900000e+01 -6.444254e-03 -2.000000e+01 -6.300386e-03 -1.000000e+00 -7.454647e-05 -2.000000e+00 -1.062981e-03 -3.000000e+00 -2.765681e-03 -4.000000e+00 -4.775623e-03 -5.000000e+00 -6.881961e-03 -6.000000e+00 -8.630548e-03 -7.000000e+00 -9.701083e-03 -8.000000e+00 -1.034914e-02 -9.000000e+00 -1.073835e-02 -1.000000e+01 -1.095767e-02 -1.100000e+01 -1.106065e-02 -1.200000e+01 -1.108194e-02 -1.300000e+01 -1.104505e-02 -1.400000e+01 -1.096642e-02 -1.500000e+01 -1.085783e-02 -1.600000e+01 -1.072788e-02 -1.700000e+01 -1.058290e-02 -1.800000e+01 -1.042762e-02 -1.900000e+01 -1.026560e-02 -2.000000e+01 -1.009953e-02 -1.000000e+00 -7.496779e-05 -2.000000e+00 -1.067090e-03 -3.000000e+00 -2.774546e-03 -4.000000e+00 -4.790110e-03 -5.000000e+00 -6.902566e-03 -6.000000e+00 -8.995355e-03 -7.000000e+00 -1.099991e-02 -8.000000e+00 -1.270984e-02 -9.000000e+00 -1.376491e-02 -1.000000e+01 -1.437100e-02 -1.100000e+01 -1.472232e-02 -1.200000e+01 -1.491823e-02 -1.300000e+01 -1.501176e-02 -1.400000e+01 -1.503438e-02 -1.500000e+01 -1.500624e-02 -1.600000e+01 -1.494100e-02 -1.700000e+01 -1.484828e-02 -1.800000e+01 -1.473507e-02 -1.900000e+01 -1.460657e-02 -2.000000e+01 -1.446670e-02 -1.000000e+00 -1.108354e-04 -2.000000e+00 -6.616556e-04 -3.000000e+00 -1.568222e-03 -4.000000e+00 -2.589761e-03 -5.000000e+00 -3.388061e-03 -6.000000e+00 -3.988226e-03 -7.000000e+00 -4.441027e-03 -8.000000e+00 -4.780625e-03 -9.000000e+00 -5.031547e-03 -1.000000e+01 -5.212365e-03 -1.100000e+01 -5.337517e-03 -1.200000e+01 -5.418391e-03 -1.300000e+01 -5.464035e-03 -1.400000e+01 -5.481673e-03 -1.500000e+01 -5.477093e-03 -1.600000e+01 -5.454943e-03 -1.700000e+01 -5.418963e-03 -1.800000e+01 -5.372168e-03 -1.900000e+01 -5.316991e-03 -2.000000e+01 -5.255398e-03 -1.000000e+00 -1.112418e-04 -2.000000e+00 -6.638106e-04 -3.000000e+00 -1.573611e-03 -4.000000e+00 -2.723924e-03 -5.000000e+00 -4.029164e-03 -6.000000e+00 -5.328276e-03 -7.000000e+00 -6.339199e-03 -8.000000e+00 -7.075933e-03 -9.000000e+00 -7.614747e-03 -1.000000e+01 -8.009729e-03 -1.100000e+01 -8.296629e-03 -1.200000e+01 -8.500380e-03 -1.300000e+01 -8.639199e-03 -1.400000e+01 -8.726814e-03 -1.500000e+01 -8.773789e-03 -1.600000e+01 -8.788380e-03 -1.700000e+01 -8.777106e-03 -1.800000e+01 -8.745164e-03 -1.900000e+01 -8.696724e-03 -2.000000e+01 -8.635154e-03 -1.000000e+00 -1.118002e-04 -2.000000e+00 -6.664091e-04 -3.000000e+00 -1.579135e-03 -4.000000e+00 -2.733291e-03 -5.000000e+00 -4.043106e-03 -6.000000e+00 -5.445887e-03 -7.000000e+00 -6.895156e-03 -8.000000e+00 -8.353853e-03 -9.000000e+00 -9.664552e-03 -1.000000e+01 -1.064816e-02 -1.100000e+01 -1.133802e-02 -1.200000e+01 -1.182191e-02 -1.300000e+01 -1.216393e-02 -1.400000e+01 -1.240440e-02 -1.500000e+01 -1.256942e-02 -1.600000e+01 -1.267681e-02 -1.700000e+01 -1.273932e-02 -1.800000e+01 -1.276636e-02 -1.900000e+01 -1.276507e-02 -2.000000e+01 -1.274101e-02 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_corbnet.standard0000644000175000017500000001167213546075722025133 0ustar carstencarstenV(d) I(d) -1.000000e+00 -3.354098e-11 -2.000000e+00 -3.383878e-11 -3.000000e+00 -3.406916e-11 -4.000000e+00 -3.426472e-11 -5.000000e+00 -3.443804e-11 -6.000000e+00 -3.459556e-11 -7.000000e+00 -3.474112e-11 -8.000000e+00 -3.487721e-11 -9.000000e+00 -3.500555e-11 -1.000000e+01 -3.512742e-11 -1.100000e+01 -3.524376e-11 -1.200000e+01 -3.535532e-11 -1.300000e+01 -3.546268e-11 -1.400000e+01 -3.556631e-11 -1.500000e+01 -3.566662e-11 -1.600000e+01 -3.576393e-11 -1.700000e+01 -3.585851e-11 -1.800000e+01 -3.595061e-11 -1.900000e+01 -3.604043e-11 -2.000000e+01 -3.612814e-11 -1.000000e+00 -1.384896e-04 -2.000000e+00 -1.400620e-04 -3.000000e+00 -1.410094e-04 -4.000000e+00 -1.417548e-04 -5.000000e+00 -1.423937e-04 -6.000000e+00 -1.429634e-04 -7.000000e+00 -1.434832e-04 -8.000000e+00 -1.439648e-04 -9.000000e+00 -1.444157e-04 -1.000000e+01 -1.448415e-04 -1.100000e+01 -1.452461e-04 -1.200000e+01 -1.456326e-04 -1.300000e+01 -1.460032e-04 -1.400000e+01 -1.463598e-04 -1.500000e+01 -1.467041e-04 -1.600000e+01 -1.470373e-04 -1.700000e+01 -1.473604e-04 -1.800000e+01 -1.476744e-04 -1.900000e+01 -1.479801e-04 -2.000000e+01 -1.482780e-04 -1.000000e+00 -8.282968e-04 -2.000000e+00 -1.416356e-03 -3.000000e+00 -1.806901e-03 -4.000000e+00 -2.025164e-03 -5.000000e+00 -2.086313e-03 -6.000000e+00 -2.098271e-03 -7.000000e+00 -2.107567e-03 -8.000000e+00 -2.115227e-03 -9.000000e+00 -2.121718e-03 -1.000000e+01 -2.127364e-03 -1.100000e+01 -2.132388e-03 -1.200000e+01 -2.136941e-03 -1.300000e+01 -2.141129e-03 -1.400000e+01 -2.145025e-03 -1.500000e+01 -2.148682e-03 -1.600000e+01 -2.152140e-03 -1.700000e+01 -2.155429e-03 -1.800000e+01 -2.158573e-03 -1.900000e+01 -2.161589e-03 -2.000000e+01 -2.164494e-03 -1.000000e+00 -9.522114e-15 -2.000000e+00 -1.061304e-14 -3.000000e+00 -1.165561e-14 -4.000000e+00 -1.270511e-14 -5.000000e+00 -1.374942e-14 -6.000000e+00 -1.478938e-14 -7.000000e+00 -1.582501e-14 -8.000000e+00 -1.685978e-14 -9.000000e+00 -1.789020e-14 -1.000000e+01 -1.892410e-14 -1.100000e+01 -1.995105e-14 -1.200000e+01 -2.098148e-14 -1.300000e+01 -2.200844e-14 -1.400000e+01 -2.303366e-14 -1.500000e+01 -2.405715e-14 -1.600000e+01 -2.508237e-14 -1.700000e+01 -2.610412e-14 -1.800000e+01 -2.712934e-14 -1.900000e+01 -2.815109e-14 -2.000000e+01 -2.917284e-14 -1.000000e+00 -1.531826e-04 -2.000000e+00 -1.548935e-04 -3.000000e+00 -1.559316e-04 -4.000000e+00 -1.567517e-04 -5.000000e+00 -1.574564e-04 -6.000000e+00 -1.580856e-04 -7.000000e+00 -1.586603e-04 -8.000000e+00 -1.591930e-04 -9.000000e+00 -1.596922e-04 -1.000000e+01 -1.601637e-04 -1.100000e+01 -1.606118e-04 -1.200000e+01 -1.610399e-04 -1.300000e+01 -1.614505e-04 -1.400000e+01 -1.618458e-04 -1.500000e+01 -1.622274e-04 -1.600000e+01 -1.625967e-04 -1.700000e+01 -1.629549e-04 -1.800000e+01 -1.633030e-04 -1.900000e+01 -1.636418e-04 -2.000000e+01 -1.639722e-04 -1.000000e+00 -1.006066e-03 -2.000000e+00 -1.734666e-03 -3.000000e+00 -2.242420e-03 -4.000000e+00 -2.569395e-03 -5.000000e+00 -2.727485e-03 -6.000000e+00 -2.755213e-03 -7.000000e+00 -2.768167e-03 -8.000000e+00 -2.778612e-03 -9.000000e+00 -2.787310e-03 -1.000000e+01 -2.794738e-03 -1.100000e+01 -2.801233e-03 -1.200000e+01 -2.807030e-03 -1.300000e+01 -2.812291e-03 -1.400000e+01 -2.817132e-03 -1.500000e+01 -2.821635e-03 -1.600000e+01 -2.825859e-03 -1.700000e+01 -2.829851e-03 -1.800000e+01 -2.833645e-03 -1.900000e+01 -2.837267e-03 -2.000000e+01 -2.840741e-03 -1.000000e+00 -5.153792e-08 -2.000000e+00 -5.199379e-08 -3.000000e+00 -5.234600e-08 -4.000000e+00 -5.264470e-08 -5.000000e+00 -5.290925e-08 -6.000000e+00 -5.314953e-08 -7.000000e+00 -5.337144e-08 -8.000000e+00 -5.357880e-08 -9.000000e+00 -5.377427e-08 -1.000000e+01 -5.395980e-08 -1.100000e+01 -5.413685e-08 -1.200000e+01 -5.430654e-08 -1.300000e+01 -5.446979e-08 -1.400000e+01 -5.462733e-08 -1.500000e+01 -5.477975e-08 -1.600000e+01 -5.492757e-08 -1.700000e+01 -5.507121e-08 -1.800000e+01 -5.521103e-08 -1.900000e+01 -5.534735e-08 -2.000000e+01 -5.548045e-08 -1.000000e+00 -1.316245e-04 -2.000000e+00 -1.332005e-04 -3.000000e+00 -1.341081e-04 -4.000000e+00 -1.348149e-04 -5.000000e+00 -1.354174e-04 -6.000000e+00 -1.359529e-04 -7.000000e+00 -1.364404e-04 -8.000000e+00 -1.368914e-04 -9.000000e+00 -1.373133e-04 -1.000000e+01 -1.377113e-04 -1.100000e+01 -1.380892e-04 -1.200000e+01 -1.384499e-04 -1.300000e+01 -1.387957e-04 -1.400000e+01 -1.391284e-04 -1.500000e+01 -1.394494e-04 -1.600000e+01 -1.397599e-04 -1.700000e+01 -1.400610e-04 -1.800000e+01 -1.403535e-04 -1.900000e+01 -1.406382e-04 -2.000000e+01 -1.409157e-04 -1.000000e+00 -6.323339e-04 -2.000000e+00 -1.070690e-03 -3.000000e+00 -1.344481e-03 -4.000000e+00 -1.469613e-03 -5.000000e+00 -1.491043e-03 -6.000000e+00 -1.499170e-03 -7.000000e+00 -1.505686e-03 -8.000000e+00 -1.511120e-03 -9.000000e+00 -1.515790e-03 -1.000000e+01 -1.519910e-03 -1.100000e+01 -1.523622e-03 -1.200000e+01 -1.527021e-03 -1.300000e+01 -1.530175e-03 -1.400000e+01 -1.533129e-03 -1.500000e+01 -1.535919e-03 -1.600000e+01 -1.538570e-03 -1.700000e+01 -1.541102e-03 -1.800000e+01 -1.543530e-03 -1.900000e+01 -1.545868e-03 -2.000000e+01 -1.548124e-03 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_isub.standard0000644000175000017500000001634313546075722024441 0ustar carstencarstenV(d) I(d) I(b) -1.000000e+00 -6.865238e-05 1.012500e-15 -2.000000e+00 -7.823056e-05 2.012500e-15 -3.000000e+00 -7.823411e-05 3.012500e-15 -4.000000e+00 -7.823655e-05 4.012500e-15 -5.000000e+00 -7.823846e-05 5.012500e-15 -6.000000e+00 -7.824006e-05 6.012500e-15 -7.000000e+00 -7.824147e-05 7.012500e-15 -8.000000e+00 -7.824275e-05 8.012500e-15 -9.000000e+00 -7.824393e-05 9.012500e-15 -1.000000e+01 -7.824502e-05 1.001250e-14 -1.100000e+01 -7.824606e-05 1.101250e-14 -1.200000e+01 -7.824704e-05 1.201257e-14 -1.300000e+01 -7.824797e-05 1.301377e-14 -1.400000e+01 -7.824886e-05 1.402894e-14 -1.500000e+01 -7.824972e-05 1.516736e-14 -1.600000e+01 -7.825055e-05 1.713801e-14 -1.700000e+01 -7.825134e-05 2.359924e-14 -1.800000e+01 -7.825212e-05 5.012365e-14 -1.900000e+01 -7.825287e-05 1.530165e-13 -2.000000e+01 -7.825359e-05 5.093741e-13 -1.000000e+00 -1.486689e-04 1.012500e-15 -2.000000e+00 -2.573833e-04 2.012500e-15 -3.000000e+00 -3.177087e-04 3.012500e-15 -4.000000e+00 -3.309184e-04 4.012500e-15 -5.000000e+00 -3.309326e-04 5.012500e-15 -6.000000e+00 -3.309405e-04 6.012500e-15 -7.000000e+00 -3.309470e-04 7.012500e-15 -8.000000e+00 -3.309526e-04 8.012500e-15 -9.000000e+00 -3.309575e-04 9.012500e-15 -1.000000e+01 -3.309618e-04 1.001250e-14 -1.100000e+01 -3.309658e-04 1.101251e-14 -1.200000e+01 -3.309694e-04 1.201277e-14 -1.300000e+01 -3.309728e-04 1.301762e-14 -1.400000e+01 -3.309760e-04 1.407843e-14 -1.500000e+01 -3.309790e-04 1.563308e-14 -1.600000e+01 -3.309819e-04 2.052055e-14 -1.700000e+01 -3.309846e-04 4.339247e-14 -1.800000e+01 -3.309873e-04 1.466455e-13 -1.900000e+01 -3.309898e-04 5.560429e-13 -2.000000e+01 -3.309923e-04 1.982294e-12 -1.000000e+00 -1.882179e-04 1.012500e-15 -2.000000e+00 -3.634235e-04 2.012500e-15 -3.000000e+00 -5.236918e-04 3.012500e-15 -4.000000e+00 -6.655164e-04 4.012500e-15 -5.000000e+00 -7.837856e-04 5.012500e-15 -6.000000e+00 -8.723648e-04 6.012500e-15 -7.000000e+00 -9.277085e-04 7.012500e-15 -8.000000e+00 -9.541908e-04 8.012500e-15 -9.000000e+00 -9.626785e-04 9.012500e-15 -1.000000e+01 -9.633678e-04 1.001250e-14 -1.100000e+01 -9.633816e-04 1.101252e-14 -1.200000e+01 -9.633940e-04 1.201309e-14 -1.300000e+01 -9.634052e-04 1.302382e-14 -1.400000e+01 -9.634156e-04 1.416030e-14 -1.500000e+01 -9.634251e-04 1.642098e-14 -1.600000e+01 -9.634340e-04 2.636048e-14 -1.700000e+01 -9.634423e-04 7.819600e-14 -1.800000e+01 -9.634500e-04 3.191975e-13 -1.900000e+01 -9.634573e-04 1.287455e-12 -2.000000e+01 -9.634642e-04 4.692304e-12 -1.000000e+00 -9.385136e-05 1.000000e-15 -2.000000e+00 -1.042337e-04 2.000000e-15 -3.000000e+00 -1.042385e-04 3.000000e-15 -4.000000e+00 -1.042418e-04 4.000000e-15 -5.000000e+00 -1.042443e-04 5.000000e-15 -6.000000e+00 -1.042465e-04 6.000000e-15 -7.000000e+00 -1.042484e-04 7.000000e-15 -8.000000e+00 -1.042501e-04 8.000000e-15 -9.000000e+00 -1.042517e-04 9.000000e-15 -1.000000e+01 -1.042532e-04 1.000000e-14 -1.100000e+01 -1.042546e-04 1.100000e-14 -1.200000e+01 -1.042560e-04 1.200011e-14 -1.300000e+01 -1.042572e-04 1.300195e-14 -1.400000e+01 -1.042584e-04 1.402474e-14 -1.500000e+01 -1.042596e-04 1.522960e-14 -1.600000e+01 -1.042607e-04 1.764772e-14 -1.700000e+01 -1.042618e-04 2.654136e-14 -1.800000e+01 -1.042628e-04 6.410123e-14 -1.900000e+01 -1.042639e-04 2.099260e-13 -2.000000e+01 -1.042648e-04 7.126830e-13 -1.000000e+00 -1.997672e-04 1.000000e-15 -2.000000e+00 -3.474108e-04 2.000000e-15 -3.000000e+00 -4.284077e-04 3.000000e-15 -4.000000e+00 -4.439151e-04 4.000000e-15 -5.000000e+00 -4.439284e-04 5.000000e-15 -6.000000e+00 -4.439390e-04 6.000000e-15 -7.000000e+00 -4.439478e-04 7.000000e-15 -8.000000e+00 -4.439553e-04 8.000000e-15 -9.000000e+00 -4.439619e-04 9.000000e-15 -1.000000e+01 -4.439678e-04 1.000000e-14 -1.100000e+01 -4.439731e-04 1.100001e-14 -1.200000e+01 -4.439780e-04 1.200040e-14 -1.300000e+01 -4.439826e-04 1.300739e-14 -1.400000e+01 -4.439869e-04 1.409400e-14 -1.500000e+01 -4.439910e-04 1.587545e-14 -1.600000e+01 -4.439949e-04 2.230522e-14 -1.700000e+01 -4.439986e-04 5.363759e-14 -1.800000e+01 -4.440021e-04 1.956096e-13 -1.900000e+01 -4.440056e-04 7.568859e-13 -2.000000e+01 -4.440089e-04 2.705106e-12 -1.000000e+00 -2.269574e-04 1.000000e-15 -2.000000e+00 -4.407699e-04 2.000000e-15 -3.000000e+00 -6.387242e-04 3.000000e-15 -4.000000e+00 -8.159446e-04 4.000000e-15 -5.000000e+00 -9.652447e-04 5.000000e-15 -6.000000e+00 -1.077796e-03 6.000000e-15 -7.000000e+00 -1.148058e-03 7.000000e-15 -8.000000e+00 -1.181280e-03 8.000000e-15 -9.000000e+00 -1.191512e-03 9.000000e-15 -1.000000e+01 -1.191954e-03 1.000000e-14 -1.100000e+01 -1.191971e-03 1.100002e-14 -1.200000e+01 -1.191986e-03 1.200073e-14 -1.300000e+01 -1.192000e-03 1.301389e-14 -1.400000e+01 -1.192013e-03 1.418017e-14 -1.500000e+01 -1.192025e-03 1.670833e-14 -1.600000e+01 -1.192036e-03 2.850321e-14 -1.700000e+01 -1.192046e-03 9.071321e-14 -1.800000e+01 -1.192056e-03 3.800711e-13 -1.900000e+01 -1.192065e-03 1.541353e-12 -2.000000e+01 -1.192073e-03 5.620678e-12 -1.000000e+00 -4.796116e-05 1.619318e-11 -2.000000e+00 -5.727157e-05 1.619418e-11 -3.000000e+00 -5.727433e-05 1.619518e-11 -4.000000e+00 -5.727610e-05 1.619618e-11 -5.000000e+00 -5.727746e-05 1.619718e-11 -6.000000e+00 -5.727861e-05 1.619818e-11 -7.000000e+00 -5.727961e-05 1.619918e-11 -8.000000e+00 -5.728052e-05 1.620018e-11 -9.000000e+00 -5.728136e-05 1.620118e-11 -1.000000e+01 -5.728214e-05 1.620218e-11 -1.100000e+01 -5.728287e-05 1.620318e-11 -1.200000e+01 -5.728357e-05 1.620418e-11 -1.300000e+01 -5.728423e-05 1.620518e-11 -1.400000e+01 -5.728486e-05 1.620619e-11 -1.500000e+01 -5.728547e-05 1.620727e-11 -1.600000e+01 -5.728606e-05 1.620886e-11 -1.700000e+01 -5.728662e-05 1.621326e-11 -1.800000e+01 -5.728717e-05 1.623042e-11 -1.900000e+01 -5.728770e-05 1.629691e-11 -2.000000e+01 -5.728822e-05 1.652925e-11 -1.000000e+00 -1.018438e-04 1.619318e-11 -2.000000e+00 -1.760832e-04 1.619418e-11 -3.000000e+00 -2.185267e-04 1.619518e-11 -4.000000e+00 -2.299816e-04 1.619618e-11 -5.000000e+00 -2.301402e-04 1.619718e-11 -6.000000e+00 -2.301456e-04 1.619818e-11 -7.000000e+00 -2.301502e-04 1.619918e-11 -8.000000e+00 -2.301540e-04 1.620018e-11 -9.000000e+00 -2.301574e-04 1.620118e-11 -1.000000e+01 -2.301603e-04 1.620218e-11 -1.100000e+01 -2.301631e-04 1.620318e-11 -1.200000e+01 -2.301656e-04 1.620418e-11 -1.300000e+01 -2.301679e-04 1.620518e-11 -1.400000e+01 -2.301701e-04 1.620622e-11 -1.500000e+01 -2.301722e-04 1.620755e-11 -1.600000e+01 -2.301741e-04 1.621093e-11 -1.700000e+01 -2.301760e-04 1.622556e-11 -1.800000e+01 -2.301778e-04 1.629115e-11 -1.900000e+01 -2.301796e-04 1.655311e-11 -2.000000e+01 -2.301813e-04 1.747387e-11 -1.000000e+00 -1.430658e-04 1.619318e-11 -2.000000e+00 -2.744353e-04 1.619418e-11 -3.000000e+00 -3.930271e-04 1.619518e-11 -4.000000e+00 -4.967102e-04 1.619618e-11 -5.000000e+00 -5.823618e-04 1.619718e-11 -6.000000e+00 -6.463067e-04 1.619818e-11 -7.000000e+00 -6.866265e-04 1.619918e-11 -8.000000e+00 -7.065104e-04 1.620018e-11 -9.000000e+00 -7.134544e-04 1.620118e-11 -1.000000e+01 -7.145487e-04 1.620218e-11 -1.100000e+01 -7.145621e-04 1.620318e-11 -1.200000e+01 -7.145712e-04 1.620418e-11 -1.300000e+01 -7.145796e-04 1.620519e-11 -1.400000e+01 -7.145872e-04 1.620628e-11 -1.500000e+01 -7.145943e-04 1.620817e-11 -1.600000e+01 -7.146008e-04 1.621554e-11 -1.700000e+01 -7.146069e-04 1.625317e-11 -1.800000e+01 -7.146126e-04 1.642856e-11 -1.900000e+01 -7.146180e-04 1.713732e-11 -2.000000e+01 -7.146231e-04 1.964338e-11 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_Ig1_vb2.standard0000644000175000017500000001167213546075722024670 0ustar carstencarstenV(g) I(d) -1.000000e+00 -3.882036e-06 -2.000000e+00 -4.605660e-04 -3.000000e+00 -1.556449e-03 -4.000000e+00 -2.964006e-03 -5.000000e+00 -4.070613e-03 -6.000000e+00 -4.836572e-03 -7.000000e+00 -5.368056e-03 -8.000000e+00 -5.731867e-03 -9.000000e+00 -5.972922e-03 -1.000000e+01 -6.123070e-03 -1.100000e+01 -6.205500e-03 -1.200000e+01 -6.237355e-03 -1.300000e+01 -6.231431e-03 -1.400000e+01 -6.197361e-03 -1.500000e+01 -6.142430e-03 -1.600000e+01 -6.072184e-03 -1.700000e+01 -5.990853e-03 -1.800000e+01 -5.901678e-03 -1.900000e+01 -5.807146e-03 -2.000000e+01 -5.709167e-03 -1.000000e+00 -3.900137e-06 -2.000000e+00 -4.623099e-04 -3.000000e+00 -1.562302e-03 -4.000000e+00 -3.032624e-03 -5.000000e+00 -4.696793e-03 -6.000000e+00 -6.356100e-03 -7.000000e+00 -7.564140e-03 -8.000000e+00 -8.369377e-03 -9.000000e+00 -8.910562e-03 -1.000000e+01 -9.272457e-03 -1.100000e+01 -9.507098e-03 -1.200000e+01 -9.648846e-03 -1.300000e+01 -9.721579e-03 -1.400000e+01 -9.742458e-03 -1.500000e+01 -9.724111e-03 -1.600000e+01 -9.675991e-03 -1.700000e+01 -9.605277e-03 -1.800000e+01 -9.517475e-03 -1.900000e+01 -9.416849e-03 -2.000000e+01 -9.306719e-03 -1.000000e+00 -3.925783e-06 -2.000000e+00 -4.645499e-04 -3.000000e+00 -1.568565e-03 -4.000000e+00 -3.043942e-03 -5.000000e+00 -4.713911e-03 -6.000000e+00 -6.468634e-03 -7.000000e+00 -8.236952e-03 -8.000000e+00 -9.965217e-03 -9.000000e+00 -1.137222e-02 -1.000000e+01 -1.229835e-02 -1.100000e+01 -1.288875e-02 -1.200000e+01 -1.326988e-02 -1.300000e+01 -1.351383e-02 -1.400000e+01 -1.366259e-02 -1.500000e+01 -1.374253e-02 -1.600000e+01 -1.377134e-02 -1.700000e+01 -1.376139e-02 -1.800000e+01 -1.372169e-02 -1.900000e+01 -1.365895e-02 -2.000000e+01 -1.357828e-02 -1.000000e+00 -3.271228e-07 -2.000000e+00 -5.562170e-04 -3.000000e+00 -1.994770e-03 -4.000000e+00 -3.782064e-03 -5.000000e+00 -5.085561e-03 -6.000000e+00 -5.914757e-03 -7.000000e+00 -6.441038e-03 -8.000000e+00 -6.763529e-03 -9.000000e+00 -6.945287e-03 -1.000000e+01 -7.028624e-03 -1.100000e+01 -7.042725e-03 -1.200000e+01 -7.008083e-03 -1.300000e+01 -6.939268e-03 -1.400000e+01 -6.846744e-03 -1.500000e+01 -6.738078e-03 -1.600000e+01 -6.618776e-03 -1.700000e+01 -6.492853e-03 -1.800000e+01 -6.363247e-03 -1.900000e+01 -6.232105e-03 -2.000000e+01 -6.100988e-03 -1.000000e+00 -3.286795e-07 -2.000000e+00 -5.583047e-04 -3.000000e+00 -2.001951e-03 -4.000000e+00 -3.866126e-03 -5.000000e+00 -5.893251e-03 -6.000000e+00 -7.774190e-03 -7.000000e+00 -8.990122e-03 -8.000000e+00 -9.734499e-03 -9.000000e+00 -1.019292e-02 -1.000000e+01 -1.046566e-02 -1.100000e+01 -1.061179e-02 -1.200000e+01 -1.066906e-02 -1.300000e+01 -1.066286e-02 -1.400000e+01 -1.061088e-02 -1.500000e+01 -1.052575e-02 -1.600000e+01 -1.041666e-02 -1.700000e+01 -1.029040e-02 -1.800000e+01 -1.015205e-02 -1.900000e+01 -1.000542e-02 -2.000000e+01 -9.853406e-03 -1.000000e+00 -3.308922e-07 -2.000000e+00 -5.609990e-04 -3.000000e+00 -2.009634e-03 -4.000000e+00 -3.879713e-03 -5.000000e+00 -5.913276e-03 -6.000000e+00 -7.971610e-03 -7.000000e+00 -9.974620e-03 -8.000000e+00 -1.181523e-02 -9.000000e+00 -1.306426e-02 -1.000000e+01 -1.379450e-02 -1.100000e+01 -1.422506e-02 -1.200000e+01 -1.447655e-02 -1.300000e+01 -1.461200e-02 -1.400000e+01 -1.466782e-02 -1.500000e+01 -1.466691e-02 -1.600000e+01 -1.462459e-02 -1.700000e+01 -1.455157e-02 -1.800000e+01 -1.445556e-02 -1.900000e+01 -1.434227e-02 -2.000000e+01 -1.421600e-02 -1.000000e+00 -1.724809e-05 -2.000000e+00 -3.839416e-04 -3.000000e+00 -1.161608e-03 -4.000000e+00 -2.163505e-03 -5.000000e+00 -3.000013e-03 -6.000000e+00 -3.631944e-03 -7.000000e+00 -4.110789e-03 -8.000000e+00 -4.472537e-03 -9.000000e+00 -4.742822e-03 -1.000000e+01 -4.940906e-03 -1.100000e+01 -5.081679e-03 -1.200000e+01 -5.176833e-03 -1.300000e+01 -5.235627e-03 -1.400000e+01 -5.265441e-03 -1.500000e+01 -5.272174e-03 -1.600000e+01 -5.260564e-03 -1.700000e+01 -5.234423e-03 -1.800000e+01 -5.196825e-03 -1.900000e+01 -5.150255e-03 -2.000000e+01 -5.096723e-03 -1.000000e+00 -1.732492e-05 -2.000000e+00 -3.853879e-04 -3.000000e+00 -1.166119e-03 -4.000000e+00 -2.227823e-03 -5.000000e+00 -3.471769e-03 -6.000000e+00 -4.781000e-03 -7.000000e+00 -5.851809e-03 -8.000000e+00 -6.639378e-03 -9.000000e+00 -7.217503e-03 -1.000000e+01 -7.643988e-03 -1.100000e+01 -7.957067e-03 -1.200000e+01 -8.183169e-03 -1.300000e+01 -8.341458e-03 -1.400000e+01 -8.446299e-03 -1.500000e+01 -8.508702e-03 -1.600000e+01 -8.537245e-03 -1.700000e+01 -8.538689e-03 -1.800000e+01 -8.518415e-03 -1.900000e+01 -8.480735e-03 -2.000000e+01 -8.429132e-03 -1.000000e+00 -1.743289e-05 -2.000000e+00 -3.872276e-04 -3.000000e+00 -1.170917e-03 -4.000000e+00 -2.236550e-03 -5.000000e+00 -3.485248e-03 -6.000000e+00 -4.846438e-03 -7.000000e+00 -6.268917e-03 -8.000000e+00 -7.714700e-03 -9.000000e+00 -9.078288e-03 -1.000000e+01 -1.014253e-02 -1.100000e+01 -1.089874e-02 -1.200000e+01 -1.143129e-02 -1.300000e+01 -1.180994e-02 -1.400000e+01 -1.207921e-02 -1.500000e+01 -1.226771e-02 -1.600000e+01 -1.239481e-02 -1.700000e+01 -1.247419e-02 -1.800000e+01 -1.251594e-02 -1.900000e+01 -1.252765e-02 -2.000000e+01 -1.251521e-02 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_Ig1_vb1.standard0000644000175000017500000002746513546075722024676 0ustar carstencarstenV(g) I(d) I(g) I(s) I(b) -1.000000e+00 -4.004245e-05 0.000000e+00 4.004245e-05 3.500000e-15 -2.000000e+00 -6.845066e-04 0.000000e+00 6.845066e-04 3.500000e-15 -3.000000e+00 -1.908191e-03 0.000000e+00 1.908191e-03 3.500000e-15 -4.000000e+00 -3.342782e-03 0.000000e+00 3.342782e-03 3.500000e-15 -5.000000e+00 -4.405489e-03 0.000000e+00 4.405489e-03 3.500000e-15 -6.000000e+00 -5.138006e-03 0.000000e+00 5.138006e-03 3.500000e-15 -7.000000e+00 -5.643027e-03 0.000000e+00 5.643027e-03 3.500000e-15 -8.000000e+00 -5.984760e-03 0.000000e+00 5.984760e-03 3.500000e-15 -9.000000e+00 -6.206792e-03 0.000000e+00 6.206792e-03 3.500000e-15 -1.000000e+01 -6.340205e-03 0.000000e+00 6.340205e-03 3.500000e-15 -1.100000e+01 -6.407704e-03 0.000000e+00 6.407704e-03 3.500000e-15 -1.200000e+01 -6.426107e-03 0.000000e+00 6.426107e-03 3.500000e-15 -1.300000e+01 -6.407983e-03 0.000000e+00 6.407983e-03 3.500000e-15 -1.400000e+01 -6.362791e-03 0.000000e+00 6.362791e-03 3.500000e-15 -1.500000e+01 -6.297688e-03 0.000000e+00 6.297688e-03 3.500000e-15 -1.600000e+01 -6.218110e-03 0.000000e+00 6.218110e-03 3.500000e-15 -1.700000e+01 -6.128200e-03 0.000000e+00 6.128200e-03 3.500000e-15 -1.800000e+01 -6.031123e-03 0.000000e+00 6.031123e-03 3.500000e-15 -1.900000e+01 -5.929300e-03 0.000000e+00 5.929300e-03 3.500000e-15 -2.000000e+01 -5.824585e-03 0.000000e+00 5.824585e-03 3.500000e-15 -1.000000e+00 -4.021279e-05 0.000000e+00 4.021279e-05 6.000000e-15 -2.000000e+00 -6.868788e-04 0.000000e+00 6.868788e-04 6.000000e-15 -3.000000e+00 -1.914809e-03 0.000000e+00 1.914809e-03 6.000000e-15 -4.000000e+00 -3.466799e-03 0.000000e+00 3.466799e-03 6.000000e-15 -5.000000e+00 -5.183052e-03 0.000000e+00 5.183052e-03 6.000000e-15 -6.000000e+00 -6.814230e-03 0.000000e+00 6.814230e-03 6.000000e-15 -7.000000e+00 -7.955325e-03 0.000000e+00 7.955325e-03 6.000000e-15 -8.000000e+00 -8.711884e-03 0.000000e+00 8.711884e-03 6.000000e-15 -9.000000e+00 -9.217448e-03 0.000000e+00 9.217448e-03 6.000000e-15 -1.000000e+01 -9.551581e-03 0.000000e+00 9.551581e-03 6.000000e-15 -1.100000e+01 -9.763588e-03 0.000000e+00 9.763588e-03 6.000000e-15 -1.200000e+01 -9.886305e-03 0.000000e+00 9.886305e-03 6.000000e-15 -1.300000e+01 -9.942672e-03 0.000000e+00 9.942672e-03 6.000000e-15 -1.400000e+01 -9.949237e-03 0.000000e+00 9.949237e-03 6.000000e-15 -1.500000e+01 -9.918201e-03 0.000000e+00 9.918201e-03 6.000000e-15 -1.600000e+01 -9.858717e-03 0.000000e+00 9.858717e-03 6.000000e-15 -1.700000e+01 -9.777738e-03 0.000000e+00 9.777738e-03 6.000000e-15 -1.800000e+01 -9.680601e-03 0.000000e+00 9.680601e-03 6.000000e-15 -1.900000e+01 -9.571437e-03 0.000000e+00 9.571437e-03 6.000000e-15 -2.000000e+01 -9.453462e-03 0.000000e+00 9.453462e-03 6.000000e-15 -1.000000e+00 -4.045128e-05 0.000000e+00 4.045128e-05 1.100000e-14 -2.000000e+00 -6.898234e-04 0.000000e+00 6.898234e-04 1.100000e-14 -3.000000e+00 -1.921738e-03 0.000000e+00 1.921738e-03 1.100000e-14 -4.000000e+00 -3.478687e-03 0.000000e+00 3.478687e-03 1.100000e-14 -5.000000e+00 -5.200525e-03 0.000000e+00 5.200525e-03 1.100000e-14 -6.000000e+00 -6.986551e-03 0.000000e+00 6.986551e-03 1.100000e-14 -7.000000e+00 -8.770718e-03 0.000000e+00 8.770718e-03 1.100000e-14 -8.000000e+00 -1.048600e-02 0.000000e+00 1.048600e-02 1.100000e-14 -9.000000e+00 -1.180617e-02 0.000000e+00 1.180617e-02 1.100000e-14 -1.000000e+01 -1.265671e-02 0.000000e+00 1.265671e-02 1.100000e-14 -1.100000e+01 -1.319647e-02 0.000000e+00 1.319647e-02 1.100000e-14 -1.200000e+01 -1.354240e-02 0.000000e+00 1.354240e-02 1.100000e-14 -1.300000e+01 -1.376017e-02 0.000000e+00 1.376017e-02 1.100000e-14 -1.400000e+01 -1.388839e-02 0.000000e+00 1.388839e-02 1.100000e-14 -1.500000e+01 -1.395161e-02 0.000000e+00 1.395161e-02 1.100000e-14 -1.600000e+01 -1.396639e-02 0.000000e+00 1.396639e-02 1.100000e-14 -1.700000e+01 -1.394443e-02 0.000000e+00 1.394443e-02 1.100000e-14 -1.800000e+01 -1.389427e-02 0.000000e+00 1.389427e-02 1.100000e-14 -1.900000e+01 -1.382230e-02 0.000000e+00 1.382230e-02 1.100000e-14 -2.000000e+01 -1.373338e-02 0.000000e+00 1.373338e-02 1.100000e-14 -1.000000e+00 -2.548818e-05 0.000000e+00 2.548818e-05 3.500000e-15 -2.000000e+00 -8.514995e-04 0.000000e+00 8.514995e-04 3.500000e-15 -3.000000e+00 -2.460982e-03 0.000000e+00 2.460982e-03 3.500000e-15 -4.000000e+00 -4.272431e-03 0.000000e+00 4.272431e-03 3.500000e-15 -5.000000e+00 -5.506736e-03 0.000000e+00 5.506736e-03 3.500000e-15 -6.000000e+00 -6.287008e-03 0.000000e+00 6.287008e-03 3.500000e-15 -7.000000e+00 -6.775551e-03 0.000000e+00 6.775551e-03 3.500000e-15 -8.000000e+00 -7.067121e-03 0.000000e+00 7.067121e-03 3.500000e-15 -9.000000e+00 -7.222674e-03 0.000000e+00 7.222674e-03 3.500000e-15 -1.000000e+01 -7.283325e-03 0.000000e+00 7.283325e-03 3.500000e-15 -1.100000e+01 -7.277504e-03 0.000000e+00 7.277504e-03 3.500000e-15 -1.200000e+01 -7.225190e-03 0.000000e+00 7.225190e-03 3.500000e-15 -1.300000e+01 -7.140584e-03 0.000000e+00 7.140584e-03 3.500000e-15 -1.400000e+01 -7.033872e-03 0.000000e+00 7.033872e-03 3.500000e-15 -1.500000e+01 -6.912404e-03 0.000000e+00 6.912404e-03 3.500000e-15 -1.600000e+01 -6.781506e-03 0.000000e+00 6.781506e-03 3.500000e-15 -1.700000e+01 -6.645052e-03 0.000000e+00 6.645052e-03 3.500000e-15 -1.800000e+01 -6.505854e-03 0.000000e+00 6.505854e-03 3.500000e-15 -1.900000e+01 -6.365954e-03 0.000000e+00 6.365954e-03 3.500000e-15 -2.000000e+01 -6.226825e-03 0.000000e+00 6.226825e-03 3.500000e-15 -1.000000e+00 -2.560062e-05 0.000000e+00 2.560062e-05 6.000000e-15 -2.000000e+00 -8.543998e-04 0.000000e+00 8.543998e-04 6.000000e-15 -3.000000e+00 -2.469083e-03 0.000000e+00 2.469083e-03 6.000000e-15 -4.000000e+00 -4.431717e-03 0.000000e+00 4.431717e-03 6.000000e-15 -5.000000e+00 -6.514328e-03 0.000000e+00 6.514328e-03 6.000000e-15 -6.000000e+00 -8.320265e-03 0.000000e+00 8.320265e-03 6.000000e-15 -7.000000e+00 -9.442717e-03 0.000000e+00 9.442717e-03 6.000000e-15 -8.000000e+00 -1.012533e-02 0.000000e+00 1.012533e-02 6.000000e-15 -9.000000e+00 -1.053960e-02 0.000000e+00 1.053960e-02 6.000000e-15 -1.000000e+01 -1.077837e-02 0.000000e+00 1.077837e-02 6.000000e-15 -1.100000e+01 -1.089711e-02 0.000000e+00 1.089711e-02 6.000000e-15 -1.200000e+01 -1.093155e-02 0.000000e+00 1.093155e-02 6.000000e-15 -1.300000e+01 -1.090589e-02 0.000000e+00 1.090589e-02 6.000000e-15 -1.400000e+01 -1.083702e-02 0.000000e+00 1.083702e-02 6.000000e-15 -1.500000e+01 -1.073702e-02 0.000000e+00 1.073702e-02 6.000000e-15 -1.600000e+01 -1.061471e-02 0.000000e+00 1.061471e-02 6.000000e-15 -1.700000e+01 -1.047658e-02 0.000000e+00 1.047658e-02 6.000000e-15 -1.800000e+01 -1.032750e-02 0.000000e+00 1.032750e-02 6.000000e-15 -1.900000e+01 -1.017111e-02 0.000000e+00 1.017111e-02 6.000000e-15 -2.000000e+01 -1.001018e-02 0.000000e+00 1.001018e-02 6.000000e-15 -1.000000e+00 -2.575888e-05 0.000000e+00 2.575888e-05 1.100000e-14 -2.000000e+00 -8.580133e-04 0.000000e+00 8.580133e-04 1.100000e-14 -3.000000e+00 -2.477570e-03 0.000000e+00 2.477570e-03 1.100000e-14 -4.000000e+00 -4.445938e-03 0.000000e+00 4.445938e-03 1.100000e-14 -5.000000e+00 -6.534694e-03 0.000000e+00 6.534694e-03 1.100000e-14 -6.000000e+00 -8.619379e-03 0.000000e+00 8.619379e-03 1.100000e-14 -7.000000e+00 -1.062735e-02 0.000000e+00 1.062735e-02 1.100000e-14 -8.000000e+00 -1.239374e-02 0.000000e+00 1.239374e-02 1.100000e-14 -9.000000e+00 -1.351705e-02 0.000000e+00 1.351705e-02 1.100000e-14 -1.000000e+01 -1.416587e-02 0.000000e+00 1.416587e-02 1.100000e-14 -1.100000e+01 -1.454479e-02 0.000000e+00 1.454479e-02 1.100000e-14 -1.200000e+01 -1.476027e-02 0.000000e+00 1.476027e-02 1.100000e-14 -1.300000e+01 -1.486867e-02 0.000000e+00 1.486867e-02 1.100000e-14 -1.400000e+01 -1.490313e-02 0.000000e+00 1.490313e-02 1.100000e-14 -1.500000e+01 -1.488473e-02 0.000000e+00 1.488473e-02 1.100000e-14 -1.600000e+01 -1.482770e-02 0.000000e+00 1.482770e-02 1.100000e-14 -1.700000e+01 -1.474206e-02 0.000000e+00 1.474206e-02 1.100000e-14 -1.800000e+01 -1.463503e-02 0.000000e+00 1.463503e-02 1.100000e-14 -1.900000e+01 -1.451200e-02 0.000000e+00 1.451200e-02 1.100000e-14 -2.000000e+01 -1.437702e-02 0.000000e+00 1.437702e-02 1.100000e-14 -1.000000e+00 -6.349775e-05 0.000000e+00 6.349775e-05 3.500000e-15 -2.000000e+00 -5.474344e-04 0.000000e+00 5.474344e-04 3.500000e-15 -3.000000e+00 -1.409758e-03 0.000000e+00 1.409758e-03 3.500000e-15 -4.000000e+00 -2.429872e-03 0.000000e+00 2.429872e-03 3.500000e-15 -5.000000e+00 -3.242905e-03 0.000000e+00 3.242905e-03 3.500000e-15 -6.000000e+00 -3.855111e-03 0.000000e+00 3.855111e-03 3.500000e-15 -7.000000e+00 -4.317785e-03 0.000000e+00 4.317785e-03 3.500000e-15 -8.000000e+00 -4.665772e-03 0.000000e+00 4.665772e-03 3.500000e-15 -9.000000e+00 -4.924016e-03 0.000000e+00 4.924016e-03 3.500000e-15 -1.000000e+01 -5.111349e-03 0.000000e+00 5.111349e-03 3.500000e-15 -1.100000e+01 -5.242387e-03 0.000000e+00 5.242387e-03 3.500000e-15 -1.200000e+01 -5.328633e-03 0.000000e+00 5.328633e-03 3.500000e-15 -1.300000e+01 -5.379217e-03 0.000000e+00 5.379217e-03 3.500000e-15 -1.400000e+01 -5.401424e-03 0.000000e+00 5.401424e-03 3.500000e-15 -1.500000e+01 -5.401085e-03 0.000000e+00 5.401085e-03 3.500000e-15 -1.600000e+01 -5.382882e-03 0.000000e+00 5.382882e-03 3.500000e-15 -1.700000e+01 -5.350584e-03 0.000000e+00 5.350584e-03 3.500000e-15 -1.800000e+01 -5.307227e-03 0.000000e+00 5.307227e-03 3.500000e-15 -1.900000e+01 -5.255266e-03 0.000000e+00 5.255266e-03 3.500000e-15 -2.000000e+01 -5.196682e-03 0.000000e+00 5.196682e-03 3.500000e-15 -1.000000e+00 -6.375245e-05 0.000000e+00 6.375245e-05 6.000000e-15 -2.000000e+00 -5.493306e-04 0.000000e+00 5.493306e-04 6.000000e-15 -3.000000e+00 -1.414844e-03 0.000000e+00 1.414844e-03 6.000000e-15 -4.000000e+00 -2.535747e-03 0.000000e+00 2.535747e-03 6.000000e-15 -5.000000e+00 -3.821300e-03 0.000000e+00 3.821300e-03 6.000000e-15 -6.000000e+00 -5.128291e-03 0.000000e+00 5.128291e-03 6.000000e-15 -7.000000e+00 -6.161440e-03 0.000000e+00 6.161440e-03 6.000000e-15 -8.000000e+00 -6.916563e-03 0.000000e+00 6.916563e-03 6.000000e-15 -9.000000e+00 -7.469667e-03 0.000000e+00 7.469667e-03 6.000000e-15 -1.000000e+01 -7.876160e-03 0.000000e+00 7.876160e-03 6.000000e-15 -1.100000e+01 -8.172656e-03 0.000000e+00 8.172656e-03 6.000000e-15 -1.200000e+01 -8.384613e-03 0.000000e+00 8.384613e-03 6.000000e-15 -1.300000e+01 -8.530586e-03 0.000000e+00 8.530586e-03 6.000000e-15 -1.400000e+01 -8.624531e-03 0.000000e+00 8.624531e-03 6.000000e-15 -1.500000e+01 -8.677176e-03 0.000000e+00 8.677176e-03 6.000000e-15 -1.600000e+01 -8.696892e-03 0.000000e+00 8.696892e-03 6.000000e-15 -1.700000e+01 -8.690289e-03 0.000000e+00 8.690289e-03 6.000000e-15 -1.800000e+01 -8.662631e-03 0.000000e+00 8.662631e-03 6.000000e-15 -1.900000e+01 -8.618140e-03 0.000000e+00 8.618140e-03 6.000000e-15 -2.000000e+01 -8.560226e-03 0.000000e+00 8.560226e-03 6.000000e-15 -1.000000e+00 -6.410564e-05 0.000000e+00 6.410564e-05 1.100000e-14 -2.000000e+00 -5.516634e-04 0.000000e+00 5.516634e-04 1.100000e-14 -3.000000e+00 -1.420132e-03 0.000000e+00 1.420132e-03 1.100000e-14 -4.000000e+00 -2.544918e-03 0.000000e+00 2.544918e-03 1.100000e-14 -5.000000e+00 -3.835100e-03 0.000000e+00 3.835100e-03 1.100000e-14 -6.000000e+00 -5.225086e-03 0.000000e+00 5.225086e-03 1.100000e-14 -7.000000e+00 -6.666708e-03 0.000000e+00 6.666708e-03 1.100000e-14 -8.000000e+00 -8.123212e-03 0.000000e+00 8.123212e-03 1.100000e-14 -9.000000e+00 -9.455576e-03 0.000000e+00 9.455576e-03 1.100000e-14 -1.000000e+01 -1.046819e-02 0.000000e+00 1.046819e-02 1.100000e-14 -1.100000e+01 -1.118128e-02 0.000000e+00 1.118128e-02 1.100000e-14 -1.200000e+01 -1.168225e-02 0.000000e+00 1.168225e-02 1.100000e-14 -1.300000e+01 -1.203721e-02 0.000000e+00 1.203721e-02 1.100000e-14 -1.400000e+01 -1.228792e-02 0.000000e+00 1.228792e-02 1.100000e-14 -1.500000e+01 -1.246133e-02 0.000000e+00 1.246133e-02 1.100000e-14 -1.600000e+01 -1.257578e-02 0.000000e+00 1.257578e-02 1.100000e-14 -1.700000e+01 -1.264434e-02 0.000000e+00 1.264434e-02 1.100000e-14 -1.800000e+01 -1.267667e-02 0.000000e+00 1.267667e-02 1.100000e-14 -1.900000e+01 -1.268006e-02 0.000000e+00 1.268006e-02 1.100000e-14 -2.000000e+01 -1.266018e-02 0.000000e+00 1.266018e-02 1.100000e-14 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/acFreq_conqs.standard0000644000175000017500000000711613546075722025121 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 7.48574770606486e-13 7.12145318217353e-13 2.30420547734869e-14 1258.925 7.48574941471202e-13 7.12145630677093e-13 2.30420529798846e-14 1584.893 7.48574808508807e-13 7.12145447848215e-13 2.30420501232881e-14 1995.262 7.48574840026579e-13 7.12145427916785e-13 2.30420512474115e-14 2511.886 7.48574769559513e-13 7.1214551499514e-13 2.30420499983051e-14 3162.278 7.48574475543861e-13 7.12145189153236e-13 2.30420445493602e-14 3981.072 7.4857479454334e-13 7.12145322696797e-13 2.30420487176329e-14 5011.872 7.48574797012908e-13 7.12145421399134e-13 2.30420516461966e-14 6309.573 7.48574766225468e-13 7.12145492744878e-13 2.30420496023038e-14 7943.282 7.48574717902924e-13 7.1214529851029e-13 2.3042044559821e-14 10000 7.48574770606486e-13 7.12145318217352e-13 2.30420547734869e-14 12589.25 7.48574941471202e-13 7.12145630677093e-13 2.30420529798846e-14 15848.93 7.48574808508807e-13 7.12145447848215e-13 2.30420501232881e-14 19952.62 7.48574840026579e-13 7.12145427916785e-13 2.30420512474115e-14 25118.86 7.48574769559513e-13 7.1214551499514e-13 2.30420499983051e-14 31622.78 7.48574475543861e-13 7.12145189153235e-13 2.30420445493602e-14 39810.72 7.4857479454334e-13 7.12145322696797e-13 2.30420487176329e-14 50118.72 7.48574797012908e-13 7.12145421399134e-13 2.30420516461966e-14 63095.73 7.48574766225468e-13 7.12145492744878e-13 2.30420496023038e-14 79432.82 7.48574717902924e-13 7.1214529851029e-13 2.3042044559821e-14 100000 7.48574770606486e-13 7.12145318217353e-13 2.30420547734869e-14 125892.5 7.48574941471202e-13 7.12145630677093e-13 2.30420529798846e-14 158489.3 7.48574808508807e-13 7.12145447848215e-13 2.30420501232881e-14 199526.2 7.48574840026579e-13 7.12145427916785e-13 2.30420512474115e-14 251188.6 7.48574769559513e-13 7.1214551499514e-13 2.30420499983051e-14 316227.8 7.48574475543861e-13 7.12145189153235e-13 2.30420445493602e-14 398107.2 7.4857479454334e-13 7.12145322696797e-13 2.30420487176329e-14 501187.2 7.48574797012908e-13 7.12145421399134e-13 2.30420516461966e-14 630957.3 7.48574766225468e-13 7.12145240501275e-13 2.30420496023038e-14 794328.2 7.48574717902924e-13 7.1214529851029e-13 2.3042044559821e-14 1000000 7.48574611451543e-13 7.12145159062409e-13 2.30420547734869e-14 1258925 7.4857468862859e-13 7.12145251413174e-13 2.30420529798846e-14 1584893 7.48574406828837e-13 7.12144945748253e-13 2.30420501232881e-14 1995262 7.48574281661511e-13 7.12144710018841e-13 2.30420512474115e-14 2511886 7.48574135952163e-13 7.12144247780441e-13 2.30420499983051e-14 3162278 7.48572965667661e-13 7.12143175984968e-13 2.30420445493602e-14 3981072 7.48572395868665e-13 7.12142124463898e-13 2.30420487176329e-14 5011872 7.48570986342331e-13 7.12140658060911e-13 2.30420516461966e-14 6309573 7.48568964622585e-13 7.12137673193166e-13 2.30420496023038e-14 7943282 7.48565501149217e-13 7.12133076293417e-13 2.3042044559821e-14 10000000 7.48559969196778e-13 7.12126060469238e-13 2.30420547734869e-14 12589250 7.48551553529528e-13 7.12114910299651e-13 2.30420529798846e-14 15848930 7.48537653111601e-13 7.1209684457187e-13 2.30420501232881e-14 19952620 7.48515972395159e-13 7.12068373537447e-13 2.30420512474115e-14 25118860 7.48481629279124e-13 7.1202322877667e-13 2.30420499983051e-14 31622780 7.48426507676175e-13 7.11951924999523e-13 2.30420395164395e-14 39810720 7.48340124204308e-13 7.11838692117518e-13 2.30420367242595e-14 50118720 7.48203256631555e-13 7.11659560900441e-13 2.30420357684025e-14 63095730 7.47986281898188e-13 7.1137539302298e-13 2.30420269003795e-14 79432820 7.47642423229001e-13 7.1092568155775e-13 2.30420044869788e-14 100000000 7.47098290199422e-13 7.10213972982932e-13 2.30419911115096e-14 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_Id1_vb0.standard0000644000175000017500000001167213546075722024663 0ustar carstencarstenV(d) I(d) -1.000000e+00 -8.320516e-04 -2.000000e+00 -9.524288e-04 -3.000000e+00 -9.529480e-04 -4.000000e+00 -9.533076e-04 -5.000000e+00 -9.535873e-04 -6.000000e+00 -9.538227e-04 -7.000000e+00 -9.540299e-04 -8.000000e+00 -9.542174e-04 -9.000000e+00 -9.543902e-04 -1.000000e+01 -9.545513e-04 -1.100000e+01 -9.547030e-04 -1.200000e+01 -9.548467e-04 -1.300000e+01 -9.549837e-04 -1.400000e+01 -9.551148e-04 -1.500000e+01 -9.552406e-04 -1.600000e+01 -9.553620e-04 -1.700000e+01 -9.554791e-04 -1.800000e+01 -9.555926e-04 -1.900000e+01 -9.557027e-04 -2.000000e+01 -9.558097e-04 -1.000000e+00 -1.775374e-03 -2.000000e+00 -3.030177e-03 -3.000000e+00 -3.755070e-03 -4.000000e+00 -3.968650e-03 -5.000000e+00 -3.972502e-03 -6.000000e+00 -3.973609e-03 -7.000000e+00 -3.974534e-03 -8.000000e+00 -3.975325e-03 -9.000000e+00 -3.976015e-03 -1.000000e+01 -3.976630e-03 -1.100000e+01 -3.977188e-03 -1.200000e+01 -3.977700e-03 -1.300000e+01 -3.978177e-03 -1.400000e+01 -3.978624e-03 -1.500000e+01 -3.979047e-03 -1.600000e+01 -3.979449e-03 -1.700000e+01 -3.979834e-03 -1.800000e+01 -3.980202e-03 -1.900000e+01 -3.980557e-03 -2.000000e+01 -3.980900e-03 -1.000000e+00 -2.233789e-03 -2.000000e+00 -4.194166e-03 -3.000000e+00 -5.903915e-03 -4.000000e+00 -7.375917e-03 -5.000000e+00 -8.614845e-03 -6.000000e+00 -9.616574e-03 -7.000000e+00 -1.037170e-02 -8.000000e+00 -1.087916e-02 -9.000000e+00 -1.116639e-02 -1.000000e+01 -1.129310e-02 -1.100000e+01 -1.132687e-02 -1.200000e+01 -1.132877e-02 -1.300000e+01 -1.133029e-02 -1.400000e+01 -1.133168e-02 -1.500000e+01 -1.133296e-02 -1.600000e+01 -1.133416e-02 -1.700000e+01 -1.133528e-02 -1.800000e+01 -1.133633e-02 -1.900000e+01 -1.133732e-02 -2.000000e+01 -1.133825e-02 -1.000000e+00 -1.131917e-03 -2.000000e+00 -1.264181e-03 -3.000000e+00 -1.264869e-03 -4.000000e+00 -1.265348e-03 -5.000000e+00 -1.265721e-03 -6.000000e+00 -1.266035e-03 -7.000000e+00 -1.266312e-03 -8.000000e+00 -1.266562e-03 -9.000000e+00 -1.266793e-03 -1.000000e+01 -1.267009e-03 -1.100000e+01 -1.267212e-03 -1.200000e+01 -1.267404e-03 -1.300000e+01 -1.267587e-03 -1.400000e+01 -1.267763e-03 -1.500000e+01 -1.267931e-03 -1.600000e+01 -1.268094e-03 -1.700000e+01 -1.268251e-03 -1.800000e+01 -1.268403e-03 -1.900000e+01 -1.268550e-03 -2.000000e+01 -1.268693e-03 -1.000000e+00 -2.362838e-03 -2.000000e+00 -4.024752e-03 -3.000000e+00 -4.986194e-03 -4.000000e+00 -5.268643e-03 -5.000000e+00 -5.272333e-03 -6.000000e+00 -5.273779e-03 -7.000000e+00 -5.274992e-03 -8.000000e+00 -5.276028e-03 -9.000000e+00 -5.276934e-03 -1.000000e+01 -5.277740e-03 -1.100000e+01 -5.278470e-03 -1.200000e+01 -5.279141e-03 -1.300000e+01 -5.279764e-03 -1.400000e+01 -5.280349e-03 -1.500000e+01 -5.280901e-03 -1.600000e+01 -5.281426e-03 -1.700000e+01 -5.281928e-03 -1.800000e+01 -5.282409e-03 -1.900000e+01 -5.282872e-03 -2.000000e+01 -5.283319e-03 -1.000000e+00 -2.675656e-03 -2.000000e+00 -5.019945e-03 -3.000000e+00 -7.062823e-03 -4.000000e+00 -8.824272e-03 -5.000000e+00 -1.031574e-02 -6.000000e+00 -1.153877e-02 -7.000000e+00 -1.248684e-02 -8.000000e+00 -1.315597e-02 -9.000000e+00 -1.356490e-02 -1.000000e+01 -1.376763e-02 -1.100000e+01 -1.383800e-02 -1.200000e+01 -1.384304e-02 -1.300000e+01 -1.384486e-02 -1.400000e+01 -1.384653e-02 -1.500000e+01 -1.384808e-02 -1.600000e+01 -1.384952e-02 -1.700000e+01 -1.385087e-02 -1.800000e+01 -1.385213e-02 -1.900000e+01 -1.385332e-02 -2.000000e+01 -1.385444e-02 -1.000000e+00 -5.832950e-04 -2.000000e+00 -6.989392e-04 -3.000000e+00 -6.993235e-04 -4.000000e+00 -6.995840e-04 -5.000000e+00 -6.997860e-04 -6.000000e+00 -6.999555e-04 -7.000000e+00 -7.001045e-04 -8.000000e+00 -7.002391e-04 -9.000000e+00 -7.003630e-04 -1.000000e+01 -7.004785e-04 -1.100000e+01 -7.005872e-04 -1.200000e+01 -7.006901e-04 -1.300000e+01 -7.007881e-04 -1.400000e+01 -7.008818e-04 -1.500000e+01 -7.009719e-04 -1.600000e+01 -7.010586e-04 -1.700000e+01 -7.011423e-04 -1.800000e+01 -7.012234e-04 -1.900000e+01 -7.013021e-04 -2.000000e+01 -7.013785e-04 -1.000000e+00 -1.226445e-03 -2.000000e+00 -2.101138e-03 -3.000000e+00 -2.614233e-03 -4.000000e+00 -2.778258e-03 -5.000000e+00 -2.784821e-03 -6.000000e+00 -2.785605e-03 -7.000000e+00 -2.786257e-03 -8.000000e+00 -2.786813e-03 -9.000000e+00 -2.787298e-03 -1.000000e+01 -2.787731e-03 -1.100000e+01 -2.788123e-03 -1.200000e+01 -2.788484e-03 -1.300000e+01 -2.788819e-03 -1.400000e+01 -2.789134e-03 -1.500000e+01 -2.789432e-03 -1.600000e+01 -2.789716e-03 -1.700000e+01 -2.789986e-03 -1.800000e+01 -2.790246e-03 -1.900000e+01 -2.790497e-03 -2.000000e+01 -2.790738e-03 -1.000000e+00 -1.711050e-03 -2.000000e+00 -3.215038e-03 -3.000000e+00 -4.527289e-03 -4.000000e+00 -5.654309e-03 -5.000000e+00 -6.595485e-03 -6.000000e+00 -7.343386e-03 -7.000000e+00 -7.888909e-03 -8.000000e+00 -8.236114e-03 -9.000000e+00 -8.417870e-03 -1.000000e+01 -8.490039e-03 -1.100000e+01 -8.506484e-03 -1.200000e+01 -8.507941e-03 -1.300000e+01 -8.509093e-03 -1.400000e+01 -8.510153e-03 -1.500000e+01 -8.511133e-03 -1.600000e+01 -8.512044e-03 -1.700000e+01 -8.512895e-03 -1.800000e+01 -8.513692e-03 -1.900000e+01 -8.514442e-03 -2.000000e+01 -8.515151e-03 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/acVd_codfm.standard0000644000175000017500000000551213546075722024540 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -1 -4.362785e-05 2.584541e-03 5.66250653314835e-13 6.66285480399701e-13 -2 -5.157092e-05 2.304888e-03 6.29415670417039e-13 6.01906562968828e-13 -3 -2.571559e-05 2.038679e-03 6.83401885034042e-13 5.45745247762907e-13 -4 3.196951e-05 1.786228e-03 7.29579697536887e-13 4.96027234301538e-13 -5 1.213796e-04 1.544606e-03 7.69073908230117e-13 4.506760220225e-13 -6 2.453786e-04 1.308417e-03 8.02344417238252e-13 4.07481310327343e-13 -7 4.093767e-04 1.071853e-03 8.28873724421178e-13 3.64552398704153e-13 -8 6.177601e-04 8.323676e-04 8.47326329417301e-13 3.21300886993617e-13 -9 8.655068e-04 5.960634e-04 8.56750531968945e-13 2.79628375710603e-13 -10 1.128888e-03 3.806910e-04 8.58332732397333e-13 2.43480565923426e-13 -11 1.368648e-03 2.087171e-04 8.54443631344342e-13 2.14243258007297e-13 -12 1.551109e-03 9.249907e-05 8.32678525451344e-13 1.70690846215291e-13 -13 1.671689e-03 2.443615e-05 7.49164902839667e-13 5.78228956558013e-14 -14 1.714867e-03 2.178707e-06 7.28663597288849e-13 3.38788491728462e-14 -15 1.715146e-03 2.006236e-06 7.24548096174559e-13 2.78198675323505e-14 -16 1.715366e-03 1.874587e-06 7.22345895578303e-13 2.43752365997017e-14 -17 1.715568e-03 1.760901e-06 7.20969895205745e-13 2.20815159786668e-14 -18 1.715760e-03 1.659327e-06 7.2003489495259e-13 2.04138755271459e-14 -19 1.715944e-03 1.567494e-06 7.19365894771455e-13 1.91311151798329e-14 -20 1.716121e-03 1.484195e-06 7.18870894637432e-13 1.81048349019631e-14 -1 8.168830e-06 2.038089e-03 5.54334550088498e-13 6.75642282933096e-13 -2 3.920309e-05 1.822961e-03 6.09914365136976e-13 6.19407467707275e-13 -3 9.261444e-05 1.616013e-03 6.59064878444692e-13 5.68636753960882e-13 -4 1.685580e-04 1.415316e-03 7.02538290215308e-13 5.21695841251426e-13 -5 2.689156e-04 1.217262e-03 7.4091430060578e-13 4.76416628991881e-13 -6 3.978309e-04 1.016874e-03 7.74076509584593e-13 4.30259616494669e-13 -7 5.603714e-04 8.101821e-04 8.0069601679194e-13 3.81236003221311e-13 -8 7.570466e-04 5.992401e-04 8.18500521612588e-13 3.299355893315e-13 -9 9.742812e-04 3.977338e-04 8.26241023708363e-13 2.81039676092719e-13 -10 1.181068e-03 2.286650e-04 8.25370823472752e-13 2.39520964851346e-13 -11 1.344290e-03 1.096463e-04 8.12945920108655e-13 1.94548052674734e-13 -12 1.449992e-03 4.065497e-05 7.50855103297296e-13 7.50384303169825e-14 -13 1.509275e-03 6.195070e-06 7.29223797440525e-13 3.99665908211289e-14 -14 1.517531e-03 1.719803e-06 7.22831995709917e-13 2.98052280698956e-14 -15 1.517776e-03 1.583487e-06 7.20934095196052e-13 2.57870469819555e-14 -16 1.517974e-03 1.479730e-06 7.19794794887582e-13 2.31951662801925e-14 -17 1.518160e-03 1.388347e-06 7.19038994682945e-13 2.13439657789719e-14 -18 1.518338e-03 1.306534e-06 7.18508294539256e-13 1.99367853979716e-14 -19 1.518506e-03 1.232959e-06 7.18122094434691e-13 1.88204850957285e-14 -20 1.518666e-03 1.166732e-06 7.17834394356795e-13 1.7906924848378e-14 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_Id1_vb2.standard0000644000175000017500000001167213546075722024665 0ustar carstencarstenV(d) I(d) -1.000000e+00 -5.747765e-04 -2.000000e+00 -6.114036e-04 -3.000000e+00 -6.117682e-04 -4.000000e+00 -6.120233e-04 -5.000000e+00 -6.122266e-04 -6.000000e+00 -6.124007e-04 -7.000000e+00 -6.125558e-04 -8.000000e+00 -6.126971e-04 -9.000000e+00 -6.128280e-04 -1.000000e+01 -6.129505e-04 -1.100000e+01 -6.130660e-04 -1.200000e+01 -6.131757e-04 -1.300000e+01 -6.132804e-04 -1.400000e+01 -6.133807e-04 -1.500000e+01 -6.134772e-04 -1.600000e+01 -6.135702e-04 -1.700000e+01 -6.136601e-04 -1.800000e+01 -6.137472e-04 -1.900000e+01 -6.138318e-04 -2.000000e+01 -6.139140e-04 -1.000000e+00 -1.551123e-03 -2.000000e+00 -2.635829e-03 -3.000000e+00 -3.219252e-03 -4.000000e+00 -3.341785e-03 -5.000000e+00 -3.343092e-03 -6.000000e+00 -3.344122e-03 -7.000000e+00 -3.344981e-03 -8.000000e+00 -3.345715e-03 -9.000000e+00 -3.346357e-03 -1.000000e+01 -3.346932e-03 -1.100000e+01 -3.347455e-03 -1.200000e+01 -3.347937e-03 -1.300000e+01 -3.348387e-03 -1.400000e+01 -3.348810e-03 -1.500000e+01 -3.349211e-03 -1.600000e+01 -3.349592e-03 -1.700000e+01 -3.349958e-03 -1.800000e+01 -3.350309e-03 -1.900000e+01 -3.350647e-03 -2.000000e+01 -3.350974e-03 -1.000000e+00 -2.076870e-03 -2.000000e+00 -3.919149e-03 -3.000000e+00 -5.534099e-03 -4.000000e+00 -6.926281e-03 -5.000000e+00 -8.094641e-03 -6.000000e+00 -9.030651e-03 -7.000000e+00 -9.722278e-03 -8.000000e+00 -1.016988e-02 -9.000000e+00 -1.040719e-02 -1.000000e+01 -1.050000e-02 -1.100000e+01 -1.051593e-02 -1.200000e+01 -1.051760e-02 -1.300000e+01 -1.051910e-02 -1.400000e+01 -1.052048e-02 -1.500000e+01 -1.052177e-02 -1.600000e+01 -1.052296e-02 -1.700000e+01 -1.052407e-02 -1.800000e+01 -1.052511e-02 -1.900000e+01 -1.052610e-02 -2.000000e+01 -1.052702e-02 -1.000000e+00 -7.581204e-04 -2.000000e+00 -7.894585e-04 -3.000000e+00 -7.899295e-04 -4.000000e+00 -7.902600e-04 -5.000000e+00 -7.905239e-04 -6.000000e+00 -7.907502e-04 -7.000000e+00 -7.909520e-04 -8.000000e+00 -7.911360e-04 -9.000000e+00 -7.913064e-04 -1.000000e+01 -7.914660e-04 -1.100000e+01 -7.916166e-04 -1.200000e+01 -7.917597e-04 -1.300000e+01 -7.918962e-04 -1.400000e+01 -7.920271e-04 -1.500000e+01 -7.921529e-04 -1.600000e+01 -7.922743e-04 -1.700000e+01 -7.923916e-04 -1.800000e+01 -7.925053e-04 -1.900000e+01 -7.926157e-04 -2.000000e+01 -7.927230e-04 -1.000000e+00 -2.047457e-03 -2.000000e+00 -3.475251e-03 -3.000000e+00 -4.241467e-03 -4.000000e+00 -4.395057e-03 -5.000000e+00 -4.396727e-03 -6.000000e+00 -4.398065e-03 -7.000000e+00 -4.399183e-03 -8.000000e+00 -4.400139e-03 -9.000000e+00 -4.400976e-03 -1.000000e+01 -4.401723e-03 -1.100000e+01 -4.402403e-03 -1.200000e+01 -4.403030e-03 -1.300000e+01 -4.403614e-03 -1.400000e+01 -4.404164e-03 -1.500000e+01 -4.404684e-03 -1.600000e+01 -4.405180e-03 -1.700000e+01 -4.405654e-03 -1.800000e+01 -4.406109e-03 -1.900000e+01 -4.406548e-03 -2.000000e+01 -4.406972e-03 -1.000000e+00 -2.476522e-03 -2.000000e+00 -4.672645e-03 -3.000000e+00 -6.598257e-03 -4.000000e+00 -8.262231e-03 -5.000000e+00 -9.668211e-03 -6.000000e+00 -1.081151e-02 -7.000000e+00 -1.168108e-02 -8.000000e+00 -1.227270e-02 -9.000000e+00 -1.261174e-02 -1.000000e+01 -1.276178e-02 -1.100000e+01 -1.279746e-02 -1.200000e+01 -1.279947e-02 -1.300000e+01 -1.280127e-02 -1.400000e+01 -1.280293e-02 -1.500000e+01 -1.280447e-02 -1.600000e+01 -1.280590e-02 -1.700000e+01 -1.280724e-02 -1.800000e+01 -1.280849e-02 -1.900000e+01 -1.280967e-02 -2.000000e+01 -1.281078e-02 -1.000000e+00 -4.185127e-04 -2.000000e+00 -4.646365e-04 -3.000000e+00 -4.649131e-04 -4.000000e+00 -4.651050e-04 -5.000000e+00 -4.652574e-04 -6.000000e+00 -4.653875e-04 -7.000000e+00 -4.655031e-04 -8.000000e+00 -4.656084e-04 -9.000000e+00 -4.657058e-04 -1.000000e+01 -4.657968e-04 -1.100000e+01 -4.658827e-04 -1.200000e+01 -4.659641e-04 -1.300000e+01 -4.660419e-04 -1.400000e+01 -4.661163e-04 -1.500000e+01 -4.661878e-04 -1.600000e+01 -4.662568e-04 -1.700000e+01 -4.663234e-04 -1.800000e+01 -4.663880e-04 -1.900000e+01 -4.664506e-04 -2.000000e+01 -4.665115e-04 -1.000000e+00 -1.080056e-03 -2.000000e+00 -1.842071e-03 -3.000000e+00 -2.261827e-03 -4.000000e+00 -2.365225e-03 -5.000000e+00 -2.366718e-03 -6.000000e+00 -2.367453e-03 -7.000000e+00 -2.368063e-03 -8.000000e+00 -2.368584e-03 -9.000000e+00 -2.369040e-03 -1.000000e+01 -2.369448e-03 -1.100000e+01 -2.369819e-03 -1.200000e+01 -2.370162e-03 -1.300000e+01 -2.370481e-03 -1.400000e+01 -2.370782e-03 -1.500000e+01 -2.371066e-03 -1.600000e+01 -2.371338e-03 -1.700000e+01 -2.371597e-03 -1.800000e+01 -2.371847e-03 -1.900000e+01 -2.372087e-03 -2.000000e+01 -2.372319e-03 -1.000000e+00 -1.598983e-03 -2.000000e+00 -3.017691e-03 -3.000000e+00 -4.260500e-03 -4.000000e+00 -5.328334e-03 -5.000000e+00 -6.216909e-03 -6.000000e+00 -6.916205e-03 -7.000000e+00 -7.416151e-03 -8.000000e+00 -7.722906e-03 -9.000000e+00 -7.873851e-03 -1.000000e+01 -7.927362e-03 -1.100000e+01 -7.935933e-03 -1.200000e+01 -7.937217e-03 -1.300000e+01 -7.938369e-03 -1.400000e+01 -7.939427e-03 -1.500000e+01 -7.940407e-03 -1.600000e+01 -7.941317e-03 -1.700000e+01 -7.942166e-03 -1.800000e+01 -7.942963e-03 -1.900000e+01 -7.943712e-03 -2.000000e+01 -7.944421e-03 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_corsrd0.standard0000644000175000017500000001167213546075722025053 0ustar carstencarstenV(d) I(d) -1.000000e+00 -3.199260e-03 -2.000000e+00 -3.604275e-03 -3.000000e+00 -3.611206e-03 -4.000000e+00 -3.616073e-03 -5.000000e+00 -3.619889e-03 -6.000000e+00 -3.623114e-03 -7.000000e+00 -3.625961e-03 -8.000000e+00 -3.628542e-03 -9.000000e+00 -3.630922e-03 -1.000000e+01 -3.633145e-03 -1.100000e+01 -3.635238e-03 -1.200000e+01 -3.637223e-03 -1.300000e+01 -3.639115e-03 -1.400000e+01 -3.640927e-03 -1.500000e+01 -3.642668e-03 -1.600000e+01 -3.644346e-03 -1.700000e+01 -3.645968e-03 -1.800000e+01 -3.647539e-03 -1.900000e+01 -3.649063e-03 -2.000000e+01 -3.650545e-03 -1.000000e+00 -6.981472e-03 -2.000000e+00 -1.135687e-02 -3.000000e+00 -1.348080e-02 -4.000000e+00 -1.391234e-02 -5.000000e+00 -1.392721e-02 -6.000000e+00 -1.393927e-02 -7.000000e+00 -1.394946e-02 -8.000000e+00 -1.395824e-02 -9.000000e+00 -1.396597e-02 -1.000000e+01 -1.397292e-02 -1.100000e+01 -1.397925e-02 -1.200000e+01 -1.398510e-02 -1.300000e+01 -1.399057e-02 -1.400000e+01 -1.399572e-02 -1.500000e+01 -1.400060e-02 -1.600000e+01 -1.400525e-02 -1.700000e+01 -1.400971e-02 -1.800000e+01 -1.401399e-02 -1.900000e+01 -1.401811e-02 -2.000000e+01 -1.402210e-02 -1.000000e+00 -9.086312e-03 -2.000000e+00 -1.694179e-02 -3.000000e+00 -2.341290e-02 -4.000000e+00 -2.856862e-02 -5.000000e+00 -3.247829e-02 -6.000000e+00 -3.517187e-02 -7.000000e+00 -3.673570e-02 -8.000000e+00 -3.743767e-02 -9.000000e+00 -3.765059e-02 -1.000000e+01 -3.767748e-02 -1.100000e+01 -3.769417e-02 -1.200000e+01 -3.770955e-02 -1.300000e+01 -3.772380e-02 -1.400000e+01 -3.773703e-02 -1.500000e+01 -3.774937e-02 -1.600000e+01 -3.776091e-02 -1.700000e+01 -3.777174e-02 -1.800000e+01 -3.778197e-02 -1.900000e+01 -3.779164e-02 -2.000000e+01 -3.780084e-02 -1.000000e+00 -4.240899e-03 -2.000000e+00 -4.647045e-03 -3.000000e+00 -4.655604e-03 -4.000000e+00 -4.661636e-03 -5.000000e+00 -4.666374e-03 -6.000000e+00 -4.670383e-03 -7.000000e+00 -4.673925e-03 -8.000000e+00 -4.677138e-03 -9.000000e+00 -4.680103e-03 -1.000000e+01 -4.682873e-03 -1.100000e+01 -4.685482e-03 -1.200000e+01 -4.687956e-03 -1.300000e+01 -4.690316e-03 -1.400000e+01 -4.692575e-03 -1.500000e+01 -4.694747e-03 -1.600000e+01 -4.696840e-03 -1.700000e+01 -4.698863e-03 -1.800000e+01 -4.700823e-03 -1.900000e+01 -4.702725e-03 -2.000000e+01 -4.704574e-03 -1.000000e+00 -9.177450e-03 -2.000000e+00 -1.464443e-02 -3.000000e+00 -1.716774e-02 -4.000000e+00 -1.760665e-02 -5.000000e+00 -1.762398e-02 -6.000000e+00 -1.763821e-02 -7.000000e+00 -1.765024e-02 -8.000000e+00 -1.766061e-02 -9.000000e+00 -1.766975e-02 -1.000000e+01 -1.767795e-02 -1.100000e+01 -1.768544e-02 -1.200000e+01 -1.769236e-02 -1.300000e+01 -1.769882e-02 -1.400000e+01 -1.770491e-02 -1.500000e+01 -1.771068e-02 -1.600000e+01 -1.771619e-02 -1.700000e+01 -1.772146e-02 -1.800000e+01 -1.772652e-02 -1.900000e+01 -1.773140e-02 -2.000000e+01 -1.773612e-02 -1.000000e+00 -1.091233e-02 -2.000000e+00 -2.029259e-02 -3.000000e+00 -2.795379e-02 -4.000000e+00 -3.401877e-02 -5.000000e+00 -3.859294e-02 -6.000000e+00 -4.171931e-02 -7.000000e+00 -4.350660e-02 -8.000000e+00 -4.428675e-02 -9.000000e+00 -4.450606e-02 -1.000000e+01 -4.452828e-02 -1.100000e+01 -4.454698e-02 -1.200000e+01 -4.456422e-02 -1.300000e+01 -4.458020e-02 -1.400000e+01 -4.459504e-02 -1.500000e+01 -4.460887e-02 -1.600000e+01 -4.462182e-02 -1.700000e+01 -4.463397e-02 -1.800000e+01 -4.464544e-02 -1.900000e+01 -4.465630e-02 -2.000000e+01 -4.466662e-02 -1.000000e+00 -2.284658e-03 -2.000000e+00 -2.701467e-03 -3.000000e+00 -2.706839e-03 -4.000000e+00 -2.710563e-03 -5.000000e+00 -2.713473e-03 -6.000000e+00 -2.715927e-03 -7.000000e+00 -2.718088e-03 -8.000000e+00 -2.720046e-03 -9.000000e+00 -2.721849e-03 -1.000000e+01 -2.723531e-03 -1.100000e+01 -2.725115e-03 -1.200000e+01 -2.726616e-03 -1.300000e+01 -2.728046e-03 -1.400000e+01 -2.729414e-03 -1.500000e+01 -2.730729e-03 -1.600000e+01 -2.731996e-03 -1.700000e+01 -2.733221e-03 -1.800000e+01 -2.734406e-03 -1.900000e+01 -2.735556e-03 -2.000000e+01 -2.736674e-03 -1.000000e+00 -4.867622e-03 -2.000000e+00 -8.083649e-03 -3.000000e+00 -9.756523e-03 -4.000000e+00 -1.018403e-02 -5.000000e+00 -1.020007e-02 -6.000000e+00 -1.020950e-02 -7.000000e+00 -1.021743e-02 -8.000000e+00 -1.022427e-02 -9.000000e+00 -1.023028e-02 -1.000000e+01 -1.023568e-02 -1.100000e+01 -1.024060e-02 -1.200000e+01 -1.024515e-02 -1.300000e+01 -1.024940e-02 -1.400000e+01 -1.025339e-02 -1.500000e+01 -1.025718e-02 -1.600000e+01 -1.026079e-02 -1.700000e+01 -1.026425e-02 -1.800000e+01 -1.026757e-02 -1.900000e+01 -1.027077e-02 -2.000000e+01 -1.027387e-02 -1.000000e+00 -6.936274e-03 -2.000000e+00 -1.296982e-02 -3.000000e+00 -1.799657e-02 -4.000000e+00 -2.204097e-02 -5.000000e+00 -2.513667e-02 -6.000000e+00 -2.729862e-02 -7.000000e+00 -2.858611e-02 -8.000000e+00 -2.919222e-02 -9.000000e+00 -2.939822e-02 -1.000000e+01 -2.943707e-02 -1.100000e+01 -2.945100e-02 -1.200000e+01 -2.946377e-02 -1.300000e+01 -2.947559e-02 -1.400000e+01 -2.948657e-02 -1.500000e+01 -2.949680e-02 -1.600000e+01 -2.950637e-02 -1.700000e+01 -2.951536e-02 -1.800000e+01 -2.952383e-02 -1.900000e+01 -2.953186e-02 -2.000000e+01 -2.953949e-02 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/acFreq_nover.standard0000644000175000017500000000712313546075722025125 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 7.3188323679478e-13 7.07675769950503e-13 9.85097159704555e-15 1258.925 7.31883409973007e-13 7.07676005391223e-13 9.85097574884767e-15 1584.893 7.31883298623972e-13 7.07675854404319e-13 9.85097330582829e-15 1995.262 7.31883313993058e-13 7.07675954849426e-13 9.85097165960158e-15 2511.886 7.31883017542053e-13 7.07676048751169e-13 9.85097225122739e-15 3162.278 7.31883297435233e-13 7.0767595559864e-13 9.85097085703308e-15 3981.072 7.31883217038656e-13 7.07675792219159e-13 9.85097310203161e-15 5011.872 7.31883107213689e-13 7.07675822367039e-13 9.85097403782578e-15 6309.573 7.31883302485724e-13 7.07675736088464e-13 9.85097287264044e-15 7943.282 7.31883176938857e-13 7.07675774054843e-13 9.85097255548054e-15 10000 7.3188323679478e-13 7.07675769950503e-13 9.85097159704555e-15 12589.25 7.31883409973007e-13 7.07676005391223e-13 9.85097574884767e-15 15848.93 7.31883298623972e-13 7.07675854404319e-13 9.85097330582829e-15 19952.62 7.31883313993058e-13 7.07675954849426e-13 9.85097165960158e-15 25118.86 7.31883017542053e-13 7.07676048751169e-13 9.85097225122739e-15 31622.78 7.31883297435233e-13 7.0767595559864e-13 9.85097085703308e-15 39810.72 7.31883217038656e-13 7.07675792219159e-13 9.85097310203161e-15 50118.72 7.31883107213689e-13 7.07675822367039e-13 9.85097403782578e-15 63095.73 7.31883302485724e-13 7.07675736088464e-13 9.85097287264044e-15 79432.82 7.31883176938857e-13 7.07675774054843e-13 9.85097255548054e-15 100000 7.3188323679478e-13 7.07675769950503e-13 9.85097159704555e-15 125892.5 7.31883409973007e-13 7.07676005391223e-13 9.85097574884767e-15 158489.3 7.31883298623972e-13 7.07675854404319e-13 9.85097330582829e-15 199526.2 7.31883313993058e-13 7.07675954849426e-13 9.85097165960158e-15 251188.6 7.31883017542053e-13 7.07676048751169e-13 9.8509722512274e-15 316227.8 7.31883297435233e-13 7.0767595559864e-13 9.85097085703308e-15 398107.2 7.31883217038656e-13 7.07675792219159e-13 9.85097310203161e-15 501187.2 7.31883107213689e-13 7.07675822367039e-13 9.85097403782578e-15 630957.3 7.31883302485724e-13 7.07675736088464e-13 9.85097287264044e-15 794328.2 7.31883176938857e-13 7.07675774054844e-13 9.85097255548054e-15 1000000 7.3188323679478e-13 7.07675769950503e-13 9.85097159704555e-15 1258925 7.31883409973007e-13 7.07676005391223e-13 9.85097574884767e-15 1584893 7.31883298623972e-13 7.07675854404319e-13 9.85097330582829e-15 1995262 7.31883313993058e-13 7.07675954849426e-13 9.85097165960158e-15 2511886 7.31883017542053e-13 7.07676048751169e-13 9.85097225122739e-15 3162278 7.31883297435233e-13 7.0767595559864e-13 9.85097085703307e-15 3981072 7.31883217038656e-13 7.07675792219159e-13 9.85097310203161e-15 5011872 7.31883107213689e-13 7.07675822367039e-13 9.85097403782578e-15 6309573 7.31883302485724e-13 7.07675736088464e-13 9.85097287264044e-15 7943282 7.31883176938857e-13 7.07675774054843e-13 9.85097255548054e-15 10000000 7.3188323679478e-13 7.07675769950503e-13 9.85097159704554e-15 12589250 7.31883409973007e-13 7.07676005391223e-13 9.85097574884767e-15 15848930 7.31883298623972e-13 7.07675854404319e-13 9.85097330582829e-15 19952620 7.31883313993058e-13 7.07675954849426e-13 9.85097165960158e-15 25118860 7.31883017542053e-13 7.07676048751169e-13 9.8509722512274e-15 31622780 7.31883297435233e-13 7.0767595559864e-13 9.85097085703307e-15 39810720 7.31883217038656e-13 7.07675792219159e-13 9.8509731020316e-15 50118720 7.31883107213689e-13 7.07675822367039e-13 9.85097403782578e-15 63095730 7.31883302485724e-13 7.07675736088464e-13 9.85097287264044e-15 79432820 7.31883176938857e-13 7.07675774054843e-13 9.85097055183843e-15 100000000 7.31883077639837e-13 7.07675769950503e-13 9.85097000549612e-15 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_Ig1_vb0_jd.standard0000644000175000017500000002746513546075722025352 0ustar carstencarstenV(g) I(d) I(g) I(s) I(b) -1.000000e+00 -8.820902e-05 0.000000e+00 8.820902e-05 2.510000e-15 -2.000000e+00 -8.417279e-04 0.000000e+00 8.417279e-04 2.510000e-15 -3.000000e+00 -2.132059e-03 0.000000e+00 2.132059e-03 2.510000e-15 -4.000000e+00 -3.568050e-03 0.000000e+00 3.568050e-03 2.510000e-15 -5.000000e+00 -4.604273e-03 0.000000e+00 4.604273e-03 2.510000e-15 -6.000000e+00 -5.316807e-03 0.000000e+00 5.316807e-03 2.510000e-15 -7.000000e+00 -5.805931e-03 0.000000e+00 5.805931e-03 2.510000e-15 -8.000000e+00 -6.134393e-03 0.000000e+00 6.134393e-03 2.510000e-15 -9.000000e+00 -6.345001e-03 0.000000e+00 6.345001e-03 2.510000e-15 -1.000000e+01 -6.468379e-03 0.000000e+00 6.468379e-03 2.510000e-15 -1.100000e+01 -6.526939e-03 0.000000e+00 6.526939e-03 2.510000e-15 -1.200000e+01 -6.537300e-03 0.000000e+00 6.537300e-03 2.510000e-15 -1.300000e+01 -6.511892e-03 0.000000e+00 6.511892e-03 2.510000e-15 -1.400000e+01 -6.460069e-03 0.000000e+00 6.460069e-03 2.510000e-15 -1.500000e+01 -6.388908e-03 0.000000e+00 6.388908e-03 2.510000e-15 -1.600000e+01 -6.303778e-03 0.000000e+00 6.303778e-03 2.510000e-15 -1.700000e+01 -6.208770e-03 0.000000e+00 6.208770e-03 2.510000e-15 -1.800000e+01 -6.107001e-03 0.000000e+00 6.107001e-03 2.510000e-15 -1.900000e+01 -6.000854e-03 0.000000e+00 6.000854e-03 2.510000e-15 -2.000000e+01 -5.892146e-03 0.000000e+00 5.892146e-03 2.510000e-15 -1.000000e+00 -8.855397e-05 0.000000e+00 8.855397e-05 5.010000e-15 -2.000000e+00 -8.444646e-04 0.000000e+00 8.444646e-04 5.010000e-15 -3.000000e+00 -2.139052e-03 0.000000e+00 2.139052e-03 5.010000e-15 -4.000000e+00 -3.731233e-03 0.000000e+00 3.731233e-03 5.010000e-15 -5.000000e+00 -5.471419e-03 0.000000e+00 5.471419e-03 5.010000e-15 -6.000000e+00 -7.075929e-03 0.000000e+00 7.075929e-03 5.010000e-15 -7.000000e+00 -8.178985e-03 0.000000e+00 8.178985e-03 5.010000e-15 -8.000000e+00 -8.908217e-03 0.000000e+00 8.908217e-03 5.010000e-15 -9.000000e+00 -9.393531e-03 0.000000e+00 9.393531e-03 5.010000e-15 -1.000000e+01 -9.711746e-03 0.000000e+00 9.711746e-03 5.010000e-15 -1.100000e+01 -9.910717e-03 0.000000e+00 9.910717e-03 5.010000e-15 -1.200000e+01 -1.002244e-02 0.000000e+00 1.002244e-02 5.010000e-15 -1.300000e+01 -1.006935e-02 0.000000e+00 1.006935e-02 5.010000e-15 -1.400000e+01 -1.006764e-02 0.000000e+00 1.006764e-02 5.010000e-15 -1.500000e+01 -1.002926e-02 0.000000e+00 1.002926e-02 5.010000e-15 -1.600000e+01 -9.963202e-03 0.000000e+00 9.963202e-03 5.010000e-15 -1.700000e+01 -9.876287e-03 0.000000e+00 9.876287e-03 5.010000e-15 -1.800000e+01 -9.773754e-03 0.000000e+00 9.773754e-03 5.010000e-15 -1.900000e+01 -9.659658e-03 0.000000e+00 9.659658e-03 5.010000e-15 -2.000000e+01 -9.537154e-03 0.000000e+00 9.537154e-03 5.010000e-15 -1.000000e+00 -8.903270e-05 0.000000e+00 8.903270e-05 1.001000e-14 -2.000000e+00 -8.477921e-04 0.000000e+00 8.477921e-04 1.001000e-14 -3.000000e+00 -2.146302e-03 0.000000e+00 2.146302e-03 1.001000e-14 -4.000000e+00 -3.743369e-03 0.000000e+00 3.743369e-03 1.001000e-14 -5.000000e+00 -5.489032e-03 0.000000e+00 5.489032e-03 1.001000e-14 -6.000000e+00 -7.287761e-03 0.000000e+00 7.287761e-03 1.001000e-14 -7.000000e+00 -9.076325e-03 0.000000e+00 9.076325e-03 1.001000e-14 -8.000000e+00 -1.077502e-02 0.000000e+00 1.077502e-02 1.001000e-14 -9.000000e+00 -1.204434e-02 0.000000e+00 1.204434e-02 1.001000e-14 -1.000000e+01 -1.285446e-02 0.000000e+00 1.285446e-02 1.001000e-14 -1.100000e+01 -1.336718e-02 0.000000e+00 1.336718e-02 1.001000e-14 -1.200000e+01 -1.369405e-02 0.000000e+00 1.369405e-02 1.001000e-14 -1.300000e+01 -1.389747e-02 0.000000e+00 1.389747e-02 1.001000e-14 -1.400000e+01 -1.401433e-02 0.000000e+00 1.401433e-02 1.001000e-14 -1.500000e+01 -1.406824e-02 0.000000e+00 1.406824e-02 1.001000e-14 -1.600000e+01 -1.407519e-02 0.000000e+00 1.407519e-02 1.001000e-14 -1.700000e+01 -1.404651e-02 0.000000e+00 1.404651e-02 1.001000e-14 -1.800000e+01 -1.399049e-02 0.000000e+00 1.399049e-02 1.001000e-14 -1.900000e+01 -1.391333e-02 0.000000e+00 1.391333e-02 1.001000e-14 -2.000000e+01 -1.381977e-02 0.000000e+00 1.381977e-02 1.001000e-14 -1.000000e+00 -7.424457e-05 0.000000e+00 7.424457e-05 2.500000e-15 -2.000000e+00 -1.059611e-03 0.000000e+00 1.059611e-03 2.500000e-15 -3.000000e+00 -2.757139e-03 0.000000e+00 2.757139e-03 2.500000e-15 -4.000000e+00 -4.562469e-03 0.000000e+00 4.562469e-03 2.500000e-15 -5.000000e+00 -5.756057e-03 0.000000e+00 5.756057e-03 2.500000e-15 -6.000000e+00 -6.507380e-03 0.000000e+00 6.507380e-03 2.500000e-15 -7.000000e+00 -6.973412e-03 0.000000e+00 6.973412e-03 2.500000e-15 -8.000000e+00 -7.246501e-03 0.000000e+00 7.246501e-03 2.500000e-15 -9.000000e+00 -7.386391e-03 0.000000e+00 7.386391e-03 2.500000e-15 -1.000000e+01 -7.433493e-03 0.000000e+00 7.433493e-03 2.500000e-15 -1.100000e+01 -7.415785e-03 0.000000e+00 7.415785e-03 2.500000e-15 -1.200000e+01 -7.352937e-03 0.000000e+00 7.352937e-03 2.500000e-15 -1.300000e+01 -7.258929e-03 0.000000e+00 7.258929e-03 2.500000e-15 -1.400000e+01 -7.143778e-03 0.000000e+00 7.143778e-03 2.500000e-15 -1.500000e+01 -7.014701e-03 0.000000e+00 7.014701e-03 2.500000e-15 -1.600000e+01 -6.876920e-03 0.000000e+00 6.876920e-03 2.500000e-15 -1.700000e+01 -6.734219e-03 0.000000e+00 6.734219e-03 2.500000e-15 -1.800000e+01 -6.589338e-03 0.000000e+00 6.589338e-03 2.500000e-15 -1.900000e+01 -6.444254e-03 0.000000e+00 6.444254e-03 2.500000e-15 -2.000000e+01 -6.300386e-03 0.000000e+00 6.300386e-03 2.500000e-15 -1.000000e+00 -7.454647e-05 0.000000e+00 7.454647e-05 5.000000e-15 -2.000000e+00 -1.062981e-03 0.000000e+00 1.062981e-03 5.000000e-15 -3.000000e+00 -2.765681e-03 0.000000e+00 2.765681e-03 5.000000e-15 -4.000000e+00 -4.775623e-03 0.000000e+00 4.775623e-03 5.000000e-15 -5.000000e+00 -6.881961e-03 0.000000e+00 6.881961e-03 5.000000e-15 -6.000000e+00 -8.630548e-03 0.000000e+00 8.630548e-03 5.000000e-15 -7.000000e+00 -9.701083e-03 0.000000e+00 9.701083e-03 5.000000e-15 -8.000000e+00 -1.034914e-02 0.000000e+00 1.034914e-02 5.000000e-15 -9.000000e+00 -1.073835e-02 0.000000e+00 1.073835e-02 5.000000e-15 -1.000000e+01 -1.095767e-02 0.000000e+00 1.095767e-02 5.000000e-15 -1.100000e+01 -1.106065e-02 0.000000e+00 1.106065e-02 5.000000e-15 -1.200000e+01 -1.108194e-02 0.000000e+00 1.108194e-02 5.000000e-15 -1.300000e+01 -1.104505e-02 0.000000e+00 1.104505e-02 5.000000e-15 -1.400000e+01 -1.096642e-02 0.000000e+00 1.096642e-02 5.000000e-15 -1.500000e+01 -1.085783e-02 0.000000e+00 1.085783e-02 5.000000e-15 -1.600000e+01 -1.072788e-02 0.000000e+00 1.072788e-02 5.000000e-15 -1.700000e+01 -1.058290e-02 0.000000e+00 1.058290e-02 5.000000e-15 -1.800000e+01 -1.042762e-02 0.000000e+00 1.042762e-02 5.000000e-15 -1.900000e+01 -1.026560e-02 0.000000e+00 1.026560e-02 5.000000e-15 -2.000000e+01 -1.009953e-02 0.000000e+00 1.009953e-02 5.000000e-15 -1.000000e+00 -7.496779e-05 0.000000e+00 7.496779e-05 1.000000e-14 -2.000000e+00 -1.067090e-03 0.000000e+00 1.067090e-03 1.000000e-14 -3.000000e+00 -2.774546e-03 0.000000e+00 2.774546e-03 1.000000e-14 -4.000000e+00 -4.790110e-03 0.000000e+00 4.790110e-03 1.000000e-14 -5.000000e+00 -6.902566e-03 0.000000e+00 6.902566e-03 1.000000e-14 -6.000000e+00 -8.995355e-03 0.000000e+00 8.995355e-03 1.000000e-14 -7.000000e+00 -1.099991e-02 0.000000e+00 1.099991e-02 1.000000e-14 -8.000000e+00 -1.270984e-02 0.000000e+00 1.270984e-02 1.000000e-14 -9.000000e+00 -1.376491e-02 0.000000e+00 1.376491e-02 1.000000e-14 -1.000000e+01 -1.437100e-02 0.000000e+00 1.437100e-02 1.000000e-14 -1.100000e+01 -1.472232e-02 0.000000e+00 1.472232e-02 1.000000e-14 -1.200000e+01 -1.491823e-02 0.000000e+00 1.491823e-02 1.000000e-14 -1.300000e+01 -1.501176e-02 0.000000e+00 1.501176e-02 1.000000e-14 -1.400000e+01 -1.503438e-02 0.000000e+00 1.503438e-02 1.000000e-14 -1.500000e+01 -1.500624e-02 0.000000e+00 1.500624e-02 1.000000e-14 -1.600000e+01 -1.494100e-02 0.000000e+00 1.494100e-02 1.000000e-14 -1.700000e+01 -1.484828e-02 0.000000e+00 1.484828e-02 1.000000e-14 -1.800000e+01 -1.473507e-02 0.000000e+00 1.473507e-02 1.000000e-14 -1.900000e+01 -1.460657e-02 0.000000e+00 1.460657e-02 1.000000e-14 -2.000000e+01 -1.446670e-02 0.000000e+00 1.446670e-02 1.000000e-14 -1.000000e+00 -1.108354e-04 0.000000e+00 1.108354e-04 1.295624e-11 -2.000000e+00 -6.616556e-04 0.000000e+00 6.616556e-04 1.295624e-11 -3.000000e+00 -1.568222e-03 0.000000e+00 1.568222e-03 1.295624e-11 -4.000000e+00 -2.589761e-03 0.000000e+00 2.589761e-03 1.295624e-11 -5.000000e+00 -3.388061e-03 0.000000e+00 3.388061e-03 1.295624e-11 -6.000000e+00 -3.988226e-03 0.000000e+00 3.988226e-03 1.295624e-11 -7.000000e+00 -4.441027e-03 0.000000e+00 4.441027e-03 1.295624e-11 -8.000000e+00 -4.780625e-03 0.000000e+00 4.780625e-03 1.295624e-11 -9.000000e+00 -5.031547e-03 0.000000e+00 5.031547e-03 1.295624e-11 -1.000000e+01 -5.212365e-03 0.000000e+00 5.212365e-03 1.295624e-11 -1.100000e+01 -5.337517e-03 0.000000e+00 5.337517e-03 1.295624e-11 -1.200000e+01 -5.418391e-03 0.000000e+00 5.418391e-03 1.295624e-11 -1.300000e+01 -5.464035e-03 0.000000e+00 5.464035e-03 1.295624e-11 -1.400000e+01 -5.481673e-03 0.000000e+00 5.481673e-03 1.295624e-11 -1.500000e+01 -5.477093e-03 0.000000e+00 5.477093e-03 1.295624e-11 -1.600000e+01 -5.454943e-03 0.000000e+00 5.454943e-03 1.295624e-11 -1.700000e+01 -5.418963e-03 0.000000e+00 5.418963e-03 1.295624e-11 -1.800000e+01 -5.372168e-03 0.000000e+00 5.372168e-03 1.295624e-11 -1.900000e+01 -5.316991e-03 0.000000e+00 5.316991e-03 1.295624e-11 -2.000000e+01 -5.255398e-03 0.000000e+00 5.255398e-03 1.295624e-11 -1.000000e+00 -1.112418e-04 0.000000e+00 1.112418e-04 1.295874e-11 -2.000000e+00 -6.638106e-04 0.000000e+00 6.638106e-04 1.295874e-11 -3.000000e+00 -1.573611e-03 0.000000e+00 1.573611e-03 1.295874e-11 -4.000000e+00 -2.723924e-03 0.000000e+00 2.723924e-03 1.295874e-11 -5.000000e+00 -4.029164e-03 0.000000e+00 4.029164e-03 1.295874e-11 -6.000000e+00 -5.328276e-03 0.000000e+00 5.328276e-03 1.295874e-11 -7.000000e+00 -6.339199e-03 0.000000e+00 6.339199e-03 1.295874e-11 -8.000000e+00 -7.075933e-03 0.000000e+00 7.075933e-03 1.295874e-11 -9.000000e+00 -7.614747e-03 0.000000e+00 7.614747e-03 1.295874e-11 -1.000000e+01 -8.009729e-03 0.000000e+00 8.009729e-03 1.295874e-11 -1.100000e+01 -8.296629e-03 0.000000e+00 8.296629e-03 1.295874e-11 -1.200000e+01 -8.500380e-03 0.000000e+00 8.500380e-03 1.295874e-11 -1.300000e+01 -8.639199e-03 0.000000e+00 8.639199e-03 1.295874e-11 -1.400000e+01 -8.726814e-03 0.000000e+00 8.726814e-03 1.295874e-11 -1.500000e+01 -8.773789e-03 0.000000e+00 8.773789e-03 1.295874e-11 -1.600000e+01 -8.788380e-03 0.000000e+00 8.788380e-03 1.295874e-11 -1.700000e+01 -8.777106e-03 0.000000e+00 8.777106e-03 1.295874e-11 -1.800000e+01 -8.745164e-03 0.000000e+00 8.745164e-03 1.295874e-11 -1.900000e+01 -8.696724e-03 0.000000e+00 8.696724e-03 1.295874e-11 -2.000000e+01 -8.635154e-03 0.000000e+00 8.635154e-03 1.295874e-11 -1.000000e+00 -1.118002e-04 0.000000e+00 1.118002e-04 1.296374e-11 -2.000000e+00 -6.664091e-04 0.000000e+00 6.664091e-04 1.296374e-11 -3.000000e+00 -1.579135e-03 0.000000e+00 1.579135e-03 1.296374e-11 -4.000000e+00 -2.733291e-03 0.000000e+00 2.733291e-03 1.296374e-11 -5.000000e+00 -4.043106e-03 0.000000e+00 4.043106e-03 1.296374e-11 -6.000000e+00 -5.445887e-03 0.000000e+00 5.445887e-03 1.296374e-11 -7.000000e+00 -6.895156e-03 0.000000e+00 6.895156e-03 1.296374e-11 -8.000000e+00 -8.353853e-03 0.000000e+00 8.353853e-03 1.296374e-11 -9.000000e+00 -9.664552e-03 0.000000e+00 9.664552e-03 1.296374e-11 -1.000000e+01 -1.064816e-02 0.000000e+00 1.064816e-02 1.296374e-11 -1.100000e+01 -1.133802e-02 0.000000e+00 1.133802e-02 1.296374e-11 -1.200000e+01 -1.182191e-02 0.000000e+00 1.182191e-02 1.296374e-11 -1.300000e+01 -1.216393e-02 0.000000e+00 1.216393e-02 1.296374e-11 -1.400000e+01 -1.240440e-02 0.000000e+00 1.240440e-02 1.296374e-11 -1.500000e+01 -1.256942e-02 0.000000e+00 1.256942e-02 1.296374e-11 -1.600000e+01 -1.267681e-02 0.000000e+00 1.267681e-02 1.296374e-11 -1.700000e+01 -1.273932e-02 0.000000e+00 1.273932e-02 1.296374e-11 -1.800000e+01 -1.276636e-02 0.000000e+00 1.276636e-02 1.296374e-11 -1.900000e+01 -1.276507e-02 0.000000e+00 1.276507e-02 1.296374e-11 -2.000000e+01 -1.274101e-02 0.000000e+00 1.274101e-02 1.296374e-11 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/acVd_coisti.standard0000644000175000017500000000550713546075722024746 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -1 1.994577e-06 2.097669e-03 5.65879453214331e-13 6.72620782115012e-13 -2 3.369818e-05 1.837674e-03 6.26263869563675e-13 6.12786365914582e-13 -3 9.395791e-05 1.594717e-03 6.79829284066745e-13 5.58614651247354e-13 -4 1.836501e-04 1.360787e-03 7.27439296957364e-13 5.07432537389574e-13 -5 3.069096e-04 1.127225e-03 7.69449008331677e-13 4.55707023384665e-13 -6 4.707633e-04 8.857625e-04 8.0459441784745e-13 3.99978708295981e-13 -7 6.785834e-04 6.358008e-04 8.29566524608756e-13 3.40392892162861e-13 -8 9.144406e-04 3.957667e-04 8.42026727982411e-13 2.84942077149311e-13 -9 1.135673e-03 2.005963e-04 8.45319328873897e-13 2.4468196624871e-13 -10 1.299153e-03 7.418758e-05 8.44749528719621e-13 2.19225959356385e-13 -11 1.399116e-03 6.865173e-06 8.24553223251383e-13 1.73056446855788e-13 -12 1.405355e-03 2.802924e-06 7.59381505605856e-13 5.25526642288632e-14 -13 1.406347e-03 2.128331e-06 7.50476303194734e-13 3.54658496025335e-14 -14 1.407015e-03 1.715922e-06 7.47329102342616e-13 2.89970878510881e-14 -15 1.407475e-03 1.456338e-06 7.45675901895004e-13 2.53471968628642e-14 -16 1.407810e-03 1.282903e-06 7.44660201619999e-13 2.29265762074705e-14 -17 1.408069e-03 1.158954e-06 7.43981701436292e-13 2.11709457321259e-14 -18 1.408281e-03 1.064874e-06 7.43505301307305e-13 1.98227253670894e-14 -19 1.408461e-03 9.899989e-07 7.43160301213895e-13 1.8745345075384e-14 -20 1.408619e-03 9.282927e-07 7.42905801144987e-13 1.78587948353466e-14 -1 3.408622e-05 1.609980e-03 5.5490655024337e-13 6.80700684302681e-13 -2 8.682217e-05 1.412416e-03 6.08284364695646e-13 6.27745369964798e-13 -3 1.582913e-04 1.225086e-03 6.57298577966458e-13 5.7769085641232e-13 -4 2.502365e-04 1.040841e-03 7.02458790193783e-13 5.27724842883804e-13 -5 3.667551e-04 8.524378e-04 7.4386140140372e-13 4.73765228274003e-13 -6 5.131435e-04 6.542309e-04 7.79691211104798e-13 4.12045411563093e-13 -7 6.885268e-04 4.501622e-04 8.05491218090262e-13 3.44754193343702e-13 -8 8.728418e-04 2.626177e-04 8.1818212152638e-13 2.84524877036352e-13 -9 1.029193e-03 1.220590e-04 8.21204822344789e-13 2.42810965742129e-13 -10 1.131922e-03 4.027596e-05 8.17694921394468e-13 2.10061556875083e-13 -11 1.182558e-03 4.678392e-06 7.72063009039429e-13 9.22902149879784e-14 -12 1.186120e-03 2.237074e-06 7.5201070361018e-13 4.24318914886198e-14 -13 1.186964e-03 1.664381e-06 7.48350402619137e-13 3.24115687755737e-14 -14 1.187517e-03 1.326419e-06 7.46698602171905e-13 2.75419074570916e-14 -15 1.187894e-03 1.118344e-06 7.45753501916015e-13 2.45281966411163e-14 -16 1.188169e-03 9.814554e-07 7.45148601752235e-13 2.24288160726998e-14 -17 1.188382e-03 8.848031e-07 7.44736101640549e-13 2.08587756476045e-14 -18 1.188556e-03 8.121830e-07 7.44443901561435e-13 1.96274753142246e-14 -19 1.188705e-03 7.548785e-07 7.44232101504089e-13 1.86283550437084e-14 -20 1.188835e-03 7.079811e-07 7.44076901462068e-13 1.77965748185003e-14 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_corg.standard0000644000175000017500000001167213546075722024431 0ustar carstencarstenV(d) I(d) -1.000000e+00 -3.354098e-11 -2.000000e+00 -3.383878e-11 -3.000000e+00 -3.406916e-11 -4.000000e+00 -3.426472e-11 -5.000000e+00 -3.443804e-11 -6.000000e+00 -3.459556e-11 -7.000000e+00 -3.474112e-11 -8.000000e+00 -3.487721e-11 -9.000000e+00 -3.500555e-11 -1.000000e+01 -3.512742e-11 -1.100000e+01 -3.524376e-11 -1.200000e+01 -3.535532e-11 -1.300000e+01 -3.546268e-11 -1.400000e+01 -3.556631e-11 -1.500000e+01 -3.566662e-11 -1.600000e+01 -3.576393e-11 -1.700000e+01 -3.585851e-11 -1.800000e+01 -3.595061e-11 -1.900000e+01 -3.604043e-11 -2.000000e+01 -3.612814e-11 -1.000000e+00 -1.384896e-04 -2.000000e+00 -1.400620e-04 -3.000000e+00 -1.410094e-04 -4.000000e+00 -1.417548e-04 -5.000000e+00 -1.423937e-04 -6.000000e+00 -1.429634e-04 -7.000000e+00 -1.434832e-04 -8.000000e+00 -1.439648e-04 -9.000000e+00 -1.444157e-04 -1.000000e+01 -1.448415e-04 -1.100000e+01 -1.452461e-04 -1.200000e+01 -1.456326e-04 -1.300000e+01 -1.460032e-04 -1.400000e+01 -1.463598e-04 -1.500000e+01 -1.467041e-04 -1.600000e+01 -1.470373e-04 -1.700000e+01 -1.473604e-04 -1.800000e+01 -1.476744e-04 -1.900000e+01 -1.479801e-04 -2.000000e+01 -1.482780e-04 -1.000000e+00 -8.282968e-04 -2.000000e+00 -1.416356e-03 -3.000000e+00 -1.806901e-03 -4.000000e+00 -2.025164e-03 -5.000000e+00 -2.086313e-03 -6.000000e+00 -2.098271e-03 -7.000000e+00 -2.107567e-03 -8.000000e+00 -2.115227e-03 -9.000000e+00 -2.121718e-03 -1.000000e+01 -2.127364e-03 -1.100000e+01 -2.132388e-03 -1.200000e+01 -2.136941e-03 -1.300000e+01 -2.141129e-03 -1.400000e+01 -2.145025e-03 -1.500000e+01 -2.148682e-03 -1.600000e+01 -2.152140e-03 -1.700000e+01 -2.155429e-03 -1.800000e+01 -2.158573e-03 -1.900000e+01 -2.161589e-03 -2.000000e+01 -2.164494e-03 -1.000000e+00 -9.522114e-15 -2.000000e+00 -1.061304e-14 -3.000000e+00 -1.165561e-14 -4.000000e+00 -1.270511e-14 -5.000000e+00 -1.374942e-14 -6.000000e+00 -1.478938e-14 -7.000000e+00 -1.582501e-14 -8.000000e+00 -1.686064e-14 -9.000000e+00 -1.789020e-14 -1.000000e+01 -1.892410e-14 -1.100000e+01 -1.995105e-14 -1.200000e+01 -2.098148e-14 -1.300000e+01 -2.200844e-14 -1.400000e+01 -2.303366e-14 -1.500000e+01 -2.406061e-14 -1.600000e+01 -2.508237e-14 -1.700000e+01 -2.610412e-14 -1.800000e+01 -2.712934e-14 -1.900000e+01 -2.814936e-14 -2.000000e+01 -2.917284e-14 -1.000000e+00 -1.531826e-04 -2.000000e+00 -1.548935e-04 -3.000000e+00 -1.559316e-04 -4.000000e+00 -1.567517e-04 -5.000000e+00 -1.574564e-04 -6.000000e+00 -1.580856e-04 -7.000000e+00 -1.586603e-04 -8.000000e+00 -1.591930e-04 -9.000000e+00 -1.596922e-04 -1.000000e+01 -1.601637e-04 -1.100000e+01 -1.606118e-04 -1.200000e+01 -1.610399e-04 -1.300000e+01 -1.614505e-04 -1.400000e+01 -1.618458e-04 -1.500000e+01 -1.622274e-04 -1.600000e+01 -1.625967e-04 -1.700000e+01 -1.629549e-04 -1.800000e+01 -1.633030e-04 -1.900000e+01 -1.636418e-04 -2.000000e+01 -1.639722e-04 -1.000000e+00 -1.006066e-03 -2.000000e+00 -1.734666e-03 -3.000000e+00 -2.242420e-03 -4.000000e+00 -2.569395e-03 -5.000000e+00 -2.727485e-03 -6.000000e+00 -2.755213e-03 -7.000000e+00 -2.768167e-03 -8.000000e+00 -2.778612e-03 -9.000000e+00 -2.787310e-03 -1.000000e+01 -2.794738e-03 -1.100000e+01 -2.801233e-03 -1.200000e+01 -2.807030e-03 -1.300000e+01 -2.812291e-03 -1.400000e+01 -2.817132e-03 -1.500000e+01 -2.821635e-03 -1.600000e+01 -2.825859e-03 -1.700000e+01 -2.829851e-03 -1.800000e+01 -2.833645e-03 -1.900000e+01 -2.837267e-03 -2.000000e+01 -2.840741e-03 -1.000000e+00 -5.153792e-08 -2.000000e+00 -5.199379e-08 -3.000000e+00 -5.234600e-08 -4.000000e+00 -5.264470e-08 -5.000000e+00 -5.290925e-08 -6.000000e+00 -5.314953e-08 -7.000000e+00 -5.337144e-08 -8.000000e+00 -5.357880e-08 -9.000000e+00 -5.377427e-08 -1.000000e+01 -5.395980e-08 -1.100000e+01 -5.413685e-08 -1.200000e+01 -5.430654e-08 -1.300000e+01 -5.446979e-08 -1.400000e+01 -5.462733e-08 -1.500000e+01 -5.477975e-08 -1.600000e+01 -5.492757e-08 -1.700000e+01 -5.507121e-08 -1.800000e+01 -5.521103e-08 -1.900000e+01 -5.534735e-08 -2.000000e+01 -5.548045e-08 -1.000000e+00 -1.316245e-04 -2.000000e+00 -1.332005e-04 -3.000000e+00 -1.341081e-04 -4.000000e+00 -1.348149e-04 -5.000000e+00 -1.354174e-04 -6.000000e+00 -1.359529e-04 -7.000000e+00 -1.364404e-04 -8.000000e+00 -1.368914e-04 -9.000000e+00 -1.373133e-04 -1.000000e+01 -1.377113e-04 -1.100000e+01 -1.380892e-04 -1.200000e+01 -1.384499e-04 -1.300000e+01 -1.387957e-04 -1.400000e+01 -1.391284e-04 -1.500000e+01 -1.394494e-04 -1.600000e+01 -1.397599e-04 -1.700000e+01 -1.400610e-04 -1.800000e+01 -1.403535e-04 -1.900000e+01 -1.406382e-04 -2.000000e+01 -1.409157e-04 -1.000000e+00 -6.323339e-04 -2.000000e+00 -1.070690e-03 -3.000000e+00 -1.344481e-03 -4.000000e+00 -1.469613e-03 -5.000000e+00 -1.491043e-03 -6.000000e+00 -1.499170e-03 -7.000000e+00 -1.505686e-03 -8.000000e+00 -1.511120e-03 -9.000000e+00 -1.515790e-03 -1.000000e+01 -1.519910e-03 -1.100000e+01 -1.523622e-03 -1.200000e+01 -1.527021e-03 -1.300000e+01 -1.530175e-03 -1.400000e+01 -1.533129e-03 -1.500000e+01 -1.535919e-03 -1.600000e+01 -1.538570e-03 -1.700000e+01 -1.541102e-03 -1.800000e+01 -1.543530e-03 -1.900000e+01 -1.545868e-03 -2.000000e+01 -1.548124e-03 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/acVd_corbnet.standard0000644000175000017500000000551013546075722025102 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -1 2.670475e-06 2.092080e-03 5.65773653185685e-13 6.72729882144551e-13 -2 3.504811e-05 1.832258e-03 6.26080569514046e-13 6.12985565968517e-13 -3 9.600629e-05 1.589382e-03 6.79593984003037e-13 5.5888425132035e-13 -4 1.864544e-04 1.355423e-03 7.27175996886074e-13 5.07747737474916e-13 -5 3.105655e-04 1.121704e-03 7.69180008258844e-13 4.56029423471956e-13 -6 4.753885e-04 8.799598e-04 8.04333217776729e-13 4.00253208370303e-13 -7 6.842120e-04 6.297038e-04 8.29305924538198e-13 3.40575292212247e-13 -8 9.207582e-04 3.896816e-04 8.41748327907033e-13 2.85060177181287e-13 -9 1.141821e-03 1.952061e-04 8.45024428794051e-13 2.44811366283746e-13 -10 1.304090e-03 7.014926e-05 8.44422228631003e-13 2.19330459384679e-13 -11 1.402085e-03 4.455501e-06 8.23691823018155e-13 1.72197346623183e-13 -12 1.406696e-03 1.585491e-06 7.59085105525605e-13 5.221836413835e-14 -13 1.406928e-03 1.446764e-06 7.50354803161837e-13 3.53825795799878e-14 -14 1.407129e-03 1.336034e-06 7.47245702320035e-13 2.89591978408292e-14 -15 1.407314e-03 1.240775e-06 7.45609001876891e-13 2.53260568571404e-14 -16 1.407489e-03 1.156915e-06 7.44602301604322e-13 2.2913636203967e-14 -17 1.407653e-03 1.082647e-06 7.43929701422213e-13 2.11626857298895e-14 -18 1.407808e-03 1.016807e-06 7.43457501294363e-13 1.98173953656463e-14 -19 1.407953e-03 9.584296e-07 7.43115501201765e-13 1.87419750744715e-14 -20 1.408088e-03 9.066352e-07 7.42863201133453e-13 1.78567948348051e-14 -1 3.469082e-05 1.603909e-03 5.54791350212179e-13 6.80818384334548e-13 -2 8.804536e-05 1.406445e-03 6.08080664640493e-13 6.27962270023525e-13 -3 1.601666e-04 1.219133e-03 6.57031677894194e-13 5.77985856492193e-13 -4 2.528203e-04 1.034813e-03 7.02155090111555e-13 5.28068042976727e-13 -5 3.701239e-04 8.462339e-04 7.43548401318974e-13 4.74106728366466e-13 -6 5.173571e-04 6.477889e-04 7.79388611022867e-13 4.12314511635953e-13 -7 6.934892e-04 4.435939e-04 8.05192918009496e-13 3.44908593385507e-13 -8 8.780511e-04 2.563967e-04 8.17867621441227e-13 2.84620977062372e-13 -9 1.033712e-03 1.169279e-04 8.20869222253924e-13 2.42911765769421e-13 -10 1.134906e-03 3.672691e-05 8.17278121281618e-13 2.09964856848901e-13 -11 1.183633e-03 2.723835e-06 7.71263908823069e-13 9.08537545990505e-14 -12 1.185996e-03 1.207407e-06 7.51865403570839e-13 4.22882414497259e-14 -13 1.186188e-03 1.103059e-06 7.48261302595013e-13 3.2358968761332e-14 -14 1.186359e-03 1.017879e-06 7.4662900215306e-13 2.75150674498246e-14 -15 1.186517e-03 9.441985e-07 7.45693801899851e-13 2.45125366368763e-14 -16 1.186666e-03 8.795883e-07 7.4509510173775e-13 2.24190960700681e-14 -17 1.186805e-03 8.227375e-07 7.44686701627174e-13 2.08526256459394e-14 -18 1.186935e-03 7.726668e-07 7.44397501548872e-13 1.96236353131849e-14 -19 1.187056e-03 7.285251e-07 7.44187901492122e-13 1.86260950430965e-14 -20 1.187169e-03 6.895448e-07 7.44034501450588e-13 1.77954348181916e-14 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_corsrd2.standard0000644000175000017500000001167213546075722025055 0ustar carstencarstenV(d) I(d) -1.000000e+00 -3.199260e-03 -2.000000e+00 -3.604275e-03 -3.000000e+00 -3.611206e-03 -4.000000e+00 -3.616073e-03 -5.000000e+00 -3.619889e-03 -6.000000e+00 -3.623114e-03 -7.000000e+00 -3.625961e-03 -8.000000e+00 -3.628542e-03 -9.000000e+00 -3.630922e-03 -1.000000e+01 -3.633145e-03 -1.100000e+01 -3.635238e-03 -1.200000e+01 -3.637223e-03 -1.300000e+01 -3.639115e-03 -1.400000e+01 -3.640927e-03 -1.500000e+01 -3.642668e-03 -1.600000e+01 -3.644346e-03 -1.700000e+01 -3.645968e-03 -1.800000e+01 -3.647539e-03 -1.900000e+01 -3.649063e-03 -2.000000e+01 -3.650545e-03 -1.000000e+00 -6.981472e-03 -2.000000e+00 -1.135687e-02 -3.000000e+00 -1.348080e-02 -4.000000e+00 -1.391234e-02 -5.000000e+00 -1.392721e-02 -6.000000e+00 -1.393927e-02 -7.000000e+00 -1.394946e-02 -8.000000e+00 -1.395824e-02 -9.000000e+00 -1.396597e-02 -1.000000e+01 -1.397292e-02 -1.100000e+01 -1.397925e-02 -1.200000e+01 -1.398510e-02 -1.300000e+01 -1.399057e-02 -1.400000e+01 -1.399572e-02 -1.500000e+01 -1.400060e-02 -1.600000e+01 -1.400525e-02 -1.700000e+01 -1.400971e-02 -1.800000e+01 -1.401399e-02 -1.900000e+01 -1.401811e-02 -2.000000e+01 -1.402210e-02 -1.000000e+00 -9.086312e-03 -2.000000e+00 -1.694179e-02 -3.000000e+00 -2.341290e-02 -4.000000e+00 -2.856862e-02 -5.000000e+00 -3.247829e-02 -6.000000e+00 -3.517187e-02 -7.000000e+00 -3.673570e-02 -8.000000e+00 -3.743767e-02 -9.000000e+00 -3.765059e-02 -1.000000e+01 -3.767748e-02 -1.100000e+01 -3.769417e-02 -1.200000e+01 -3.770955e-02 -1.300000e+01 -3.772380e-02 -1.400000e+01 -3.773703e-02 -1.500000e+01 -3.774937e-02 -1.600000e+01 -3.776091e-02 -1.700000e+01 -3.777174e-02 -1.800000e+01 -3.778197e-02 -1.900000e+01 -3.779164e-02 -2.000000e+01 -3.780084e-02 -1.000000e+00 -4.240899e-03 -2.000000e+00 -4.647045e-03 -3.000000e+00 -4.655604e-03 -4.000000e+00 -4.661636e-03 -5.000000e+00 -4.666374e-03 -6.000000e+00 -4.670383e-03 -7.000000e+00 -4.673925e-03 -8.000000e+00 -4.677138e-03 -9.000000e+00 -4.680103e-03 -1.000000e+01 -4.682873e-03 -1.100000e+01 -4.685482e-03 -1.200000e+01 -4.687956e-03 -1.300000e+01 -4.690316e-03 -1.400000e+01 -4.692575e-03 -1.500000e+01 -4.694747e-03 -1.600000e+01 -4.696840e-03 -1.700000e+01 -4.698863e-03 -1.800000e+01 -4.700823e-03 -1.900000e+01 -4.702725e-03 -2.000000e+01 -4.704574e-03 -1.000000e+00 -9.177450e-03 -2.000000e+00 -1.464443e-02 -3.000000e+00 -1.716774e-02 -4.000000e+00 -1.760665e-02 -5.000000e+00 -1.762398e-02 -6.000000e+00 -1.763821e-02 -7.000000e+00 -1.765024e-02 -8.000000e+00 -1.766061e-02 -9.000000e+00 -1.766975e-02 -1.000000e+01 -1.767795e-02 -1.100000e+01 -1.768544e-02 -1.200000e+01 -1.769236e-02 -1.300000e+01 -1.769882e-02 -1.400000e+01 -1.770491e-02 -1.500000e+01 -1.771068e-02 -1.600000e+01 -1.771619e-02 -1.700000e+01 -1.772146e-02 -1.800000e+01 -1.772652e-02 -1.900000e+01 -1.773140e-02 -2.000000e+01 -1.773612e-02 -1.000000e+00 -1.091233e-02 -2.000000e+00 -2.029259e-02 -3.000000e+00 -2.795379e-02 -4.000000e+00 -3.401877e-02 -5.000000e+00 -3.859294e-02 -6.000000e+00 -4.171931e-02 -7.000000e+00 -4.350660e-02 -8.000000e+00 -4.428675e-02 -9.000000e+00 -4.450606e-02 -1.000000e+01 -4.452828e-02 -1.100000e+01 -4.454698e-02 -1.200000e+01 -4.456422e-02 -1.300000e+01 -4.458020e-02 -1.400000e+01 -4.459504e-02 -1.500000e+01 -4.460887e-02 -1.600000e+01 -4.462182e-02 -1.700000e+01 -4.463397e-02 -1.800000e+01 -4.464544e-02 -1.900000e+01 -4.465630e-02 -2.000000e+01 -4.466662e-02 -1.000000e+00 -2.284658e-03 -2.000000e+00 -2.701467e-03 -3.000000e+00 -2.706839e-03 -4.000000e+00 -2.710563e-03 -5.000000e+00 -2.713473e-03 -6.000000e+00 -2.715927e-03 -7.000000e+00 -2.718088e-03 -8.000000e+00 -2.720046e-03 -9.000000e+00 -2.721849e-03 -1.000000e+01 -2.723531e-03 -1.100000e+01 -2.725115e-03 -1.200000e+01 -2.726616e-03 -1.300000e+01 -2.728046e-03 -1.400000e+01 -2.729414e-03 -1.500000e+01 -2.730729e-03 -1.600000e+01 -2.731996e-03 -1.700000e+01 -2.733221e-03 -1.800000e+01 -2.734406e-03 -1.900000e+01 -2.735556e-03 -2.000000e+01 -2.736674e-03 -1.000000e+00 -4.867622e-03 -2.000000e+00 -8.083649e-03 -3.000000e+00 -9.756523e-03 -4.000000e+00 -1.018403e-02 -5.000000e+00 -1.020007e-02 -6.000000e+00 -1.020950e-02 -7.000000e+00 -1.021743e-02 -8.000000e+00 -1.022427e-02 -9.000000e+00 -1.023028e-02 -1.000000e+01 -1.023568e-02 -1.100000e+01 -1.024060e-02 -1.200000e+01 -1.024515e-02 -1.300000e+01 -1.024940e-02 -1.400000e+01 -1.025339e-02 -1.500000e+01 -1.025718e-02 -1.600000e+01 -1.026079e-02 -1.700000e+01 -1.026425e-02 -1.800000e+01 -1.026757e-02 -1.900000e+01 -1.027077e-02 -2.000000e+01 -1.027387e-02 -1.000000e+00 -6.936274e-03 -2.000000e+00 -1.296982e-02 -3.000000e+00 -1.799657e-02 -4.000000e+00 -2.204097e-02 -5.000000e+00 -2.513667e-02 -6.000000e+00 -2.729862e-02 -7.000000e+00 -2.858611e-02 -8.000000e+00 -2.919222e-02 -9.000000e+00 -2.939822e-02 -1.000000e+01 -2.943707e-02 -1.100000e+01 -2.945100e-02 -1.200000e+01 -2.946377e-02 -1.300000e+01 -2.947559e-02 -1.400000e+01 -2.948657e-02 -1.500000e+01 -2.949680e-02 -1.600000e+01 -2.950637e-02 -1.700000e+01 -2.951536e-02 -1.800000e+01 -2.952383e-02 -1.900000e+01 -2.953186e-02 -2.000000e+01 -2.953949e-02 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_COTEMP3.standard0000644000175000017500000000044213546075722024542 0ustar carstencarstenV(d) I(d) -1.000000e+00 -2.233789e-03 -3.000000e+00 -5.903915e-03 -5.000000e+00 -8.614845e-03 -7.000000e+00 -1.037170e-02 -9.000000e+00 -1.116639e-02 -1.100000e+01 -1.132687e-02 -1.300000e+01 -1.133029e-02 -1.500000e+01 -1.133296e-02 -1.700000e+01 -1.133528e-02 -1.900000e+01 -1.133732e-02 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_ptl.standard0000644000175000017500000001167213546075722024276 0ustar carstencarstenV(d) I(d) -1.000000e+00 -1.279704e-03 -2.000000e+00 -1.441710e-03 -3.000000e+00 -1.444483e-03 -4.000000e+00 -1.446429e-03 -5.000000e+00 -1.447955e-03 -6.000000e+00 -1.449245e-03 -7.000000e+00 -1.450384e-03 -8.000000e+00 -1.451417e-03 -9.000000e+00 -1.452369e-03 -1.000000e+01 -1.453258e-03 -1.100000e+01 -1.454095e-03 -1.200000e+01 -1.454889e-03 -1.300000e+01 -1.455646e-03 -1.400000e+01 -1.456371e-03 -1.500000e+01 -1.457067e-03 -1.600000e+01 -1.457739e-03 -1.700000e+01 -1.458387e-03 -1.800000e+01 -1.459015e-03 -1.900000e+01 -1.459625e-03 -2.000000e+01 -1.460218e-03 -1.000000e+00 -2.792589e-03 -2.000000e+00 -4.542747e-03 -3.000000e+00 -5.392319e-03 -4.000000e+00 -5.564937e-03 -5.000000e+00 -5.570885e-03 -6.000000e+00 -5.575709e-03 -7.000000e+00 -5.579784e-03 -8.000000e+00 -5.583297e-03 -9.000000e+00 -5.586390e-03 -1.000000e+01 -5.589166e-03 -1.100000e+01 -5.591699e-03 -1.200000e+01 -5.594041e-03 -1.300000e+01 -5.596228e-03 -1.400000e+01 -5.598287e-03 -1.500000e+01 -5.600239e-03 -1.600000e+01 -5.602101e-03 -1.700000e+01 -5.603882e-03 -1.800000e+01 -5.605595e-03 -1.900000e+01 -5.607246e-03 -2.000000e+01 -5.608842e-03 -1.000000e+00 -3.634525e-03 -2.000000e+00 -6.776715e-03 -3.000000e+00 -9.365161e-03 -4.000000e+00 -1.142745e-02 -5.000000e+00 -1.299132e-02 -6.000000e+00 -1.406875e-02 -7.000000e+00 -1.469428e-02 -8.000000e+00 -1.497507e-02 -9.000000e+00 -1.506024e-02 -1.000000e+01 -1.507099e-02 -1.100000e+01 -1.507767e-02 -1.200000e+01 -1.508382e-02 -1.300000e+01 -1.508952e-02 -1.400000e+01 -1.509481e-02 -1.500000e+01 -1.509975e-02 -1.600000e+01 -1.510436e-02 -1.700000e+01 -1.510870e-02 -1.800000e+01 -1.511279e-02 -1.900000e+01 -1.511666e-02 -2.000000e+01 -1.512034e-02 -1.000000e+00 -1.696360e-03 -2.000000e+00 -1.858818e-03 -3.000000e+00 -1.862242e-03 -4.000000e+00 -1.864655e-03 -5.000000e+00 -1.866550e-03 -6.000000e+00 -1.868153e-03 -7.000000e+00 -1.869570e-03 -8.000000e+00 -1.870855e-03 -9.000000e+00 -1.872041e-03 -1.000000e+01 -1.873149e-03 -1.100000e+01 -1.874193e-03 -1.200000e+01 -1.875183e-03 -1.300000e+01 -1.876126e-03 -1.400000e+01 -1.877030e-03 -1.500000e+01 -1.877899e-03 -1.600000e+01 -1.878736e-03 -1.700000e+01 -1.879545e-03 -1.800000e+01 -1.880329e-03 -1.900000e+01 -1.881090e-03 -2.000000e+01 -1.881830e-03 -1.000000e+00 -3.670980e-03 -2.000000e+00 -5.857771e-03 -3.000000e+00 -6.867098e-03 -4.000000e+00 -7.042662e-03 -5.000000e+00 -7.049592e-03 -6.000000e+00 -7.055282e-03 -7.000000e+00 -7.060095e-03 -8.000000e+00 -7.064245e-03 -9.000000e+00 -7.067900e-03 -1.000000e+01 -7.071182e-03 -1.100000e+01 -7.074176e-03 -1.200000e+01 -7.076944e-03 -1.300000e+01 -7.079530e-03 -1.400000e+01 -7.081965e-03 -1.500000e+01 -7.084274e-03 -1.600000e+01 -7.086475e-03 -1.700000e+01 -7.088583e-03 -1.800000e+01 -7.090609e-03 -1.900000e+01 -7.092562e-03 -2.000000e+01 -7.094449e-03 -1.000000e+00 -4.364930e-03 -2.000000e+00 -8.117035e-03 -3.000000e+00 -1.118152e-02 -4.000000e+00 -1.360751e-02 -5.000000e+00 -1.543718e-02 -6.000000e+00 -1.668772e-02 -7.000000e+00 -1.740264e-02 -8.000000e+00 -1.771470e-02 -9.000000e+00 -1.780242e-02 -1.000000e+01 -1.781131e-02 -1.100000e+01 -1.781879e-02 -1.200000e+01 -1.782569e-02 -1.300000e+01 -1.783208e-02 -1.400000e+01 -1.783802e-02 -1.500000e+01 -1.784355e-02 -1.600000e+01 -1.784873e-02 -1.700000e+01 -1.785359e-02 -1.800000e+01 -1.785818e-02 -1.900000e+01 -1.786252e-02 -2.000000e+01 -1.786665e-02 -1.000000e+00 -9.138632e-04 -2.000000e+00 -1.080587e-03 -3.000000e+00 -1.082736e-03 -4.000000e+00 -1.084225e-03 -5.000000e+00 -1.085389e-03 -6.000000e+00 -1.086371e-03 -7.000000e+00 -1.087235e-03 -8.000000e+00 -1.088018e-03 -9.000000e+00 -1.088740e-03 -1.000000e+01 -1.089413e-03 -1.100000e+01 -1.090046e-03 -1.200000e+01 -1.090646e-03 -1.300000e+01 -1.091218e-03 -1.400000e+01 -1.091766e-03 -1.500000e+01 -1.092292e-03 -1.600000e+01 -1.092799e-03 -1.700000e+01 -1.093288e-03 -1.800000e+01 -1.093762e-03 -1.900000e+01 -1.094223e-03 -2.000000e+01 -1.094670e-03 -1.000000e+00 -1.947049e-03 -2.000000e+00 -3.233460e-03 -3.000000e+00 -3.902609e-03 -4.000000e+00 -4.073613e-03 -5.000000e+00 -4.080030e-03 -6.000000e+00 -4.083798e-03 -7.000000e+00 -4.086974e-03 -8.000000e+00 -4.089708e-03 -9.000000e+00 -4.092113e-03 -1.000000e+01 -4.094272e-03 -1.100000e+01 -4.096241e-03 -1.200000e+01 -4.098060e-03 -1.300000e+01 -4.099758e-03 -1.400000e+01 -4.101357e-03 -1.500000e+01 -4.102873e-03 -1.600000e+01 -4.104318e-03 -1.700000e+01 -4.105700e-03 -1.800000e+01 -4.107029e-03 -1.900000e+01 -4.108310e-03 -2.000000e+01 -4.109548e-03 -1.000000e+00 -2.774510e-03 -2.000000e+00 -5.187927e-03 -3.000000e+00 -7.198630e-03 -4.000000e+00 -8.816388e-03 -5.000000e+00 -1.005467e-02 -6.000000e+00 -1.091945e-02 -7.000000e+00 -1.143444e-02 -8.000000e+00 -1.167689e-02 -9.000000e+00 -1.175929e-02 -1.000000e+01 -1.177483e-02 -1.100000e+01 -1.178040e-02 -1.200000e+01 -1.178551e-02 -1.300000e+01 -1.179024e-02 -1.400000e+01 -1.179463e-02 -1.500000e+01 -1.179872e-02 -1.600000e+01 -1.180255e-02 -1.700000e+01 -1.180614e-02 -1.800000e+01 -1.180953e-02 -1.900000e+01 -1.181274e-02 -2.000000e+01 -1.181579e-02 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_ld2.standard0000644000175000017500000001167213546075722024160 0ustar carstencarstenV(d) I(d) -1.000000e+00 -8.320516e-04 -2.000000e+00 -9.524288e-04 -3.000000e+00 -9.529480e-04 -4.000000e+00 -9.533076e-04 -5.000000e+00 -9.535873e-04 -6.000000e+00 -9.538227e-04 -7.000000e+00 -9.540299e-04 -8.000000e+00 -9.542174e-04 -9.000000e+00 -9.543902e-04 -1.000000e+01 -9.545513e-04 -1.100000e+01 -9.547030e-04 -1.200000e+01 -9.548467e-04 -1.300000e+01 -9.549837e-04 -1.400000e+01 -9.551148e-04 -1.500000e+01 -9.552406e-04 -1.600000e+01 -9.553620e-04 -1.700000e+01 -9.554791e-04 -1.800000e+01 -9.555926e-04 -1.900000e+01 -9.557027e-04 -2.000000e+01 -9.558097e-04 -1.000000e+00 -1.775374e-03 -2.000000e+00 -3.030177e-03 -3.000000e+00 -3.755070e-03 -4.000000e+00 -3.968650e-03 -5.000000e+00 -3.972502e-03 -6.000000e+00 -3.973609e-03 -7.000000e+00 -3.974534e-03 -8.000000e+00 -3.975325e-03 -9.000000e+00 -3.976015e-03 -1.000000e+01 -3.976630e-03 -1.100000e+01 -3.977188e-03 -1.200000e+01 -3.977700e-03 -1.300000e+01 -3.978177e-03 -1.400000e+01 -3.978624e-03 -1.500000e+01 -3.979047e-03 -1.600000e+01 -3.979449e-03 -1.700000e+01 -3.979834e-03 -1.800000e+01 -3.980202e-03 -1.900000e+01 -3.980557e-03 -2.000000e+01 -3.980900e-03 -1.000000e+00 -2.233789e-03 -2.000000e+00 -4.194166e-03 -3.000000e+00 -5.903915e-03 -4.000000e+00 -7.375917e-03 -5.000000e+00 -8.614845e-03 -6.000000e+00 -9.616574e-03 -7.000000e+00 -1.037170e-02 -8.000000e+00 -1.087916e-02 -9.000000e+00 -1.116639e-02 -1.000000e+01 -1.129310e-02 -1.100000e+01 -1.132687e-02 -1.200000e+01 -1.132877e-02 -1.300000e+01 -1.133029e-02 -1.400000e+01 -1.133168e-02 -1.500000e+01 -1.133296e-02 -1.600000e+01 -1.133416e-02 -1.700000e+01 -1.133528e-02 -1.800000e+01 -1.133633e-02 -1.900000e+01 -1.133732e-02 -2.000000e+01 -1.133825e-02 -1.000000e+00 -1.131917e-03 -2.000000e+00 -1.264181e-03 -3.000000e+00 -1.264869e-03 -4.000000e+00 -1.265348e-03 -5.000000e+00 -1.265721e-03 -6.000000e+00 -1.266035e-03 -7.000000e+00 -1.266312e-03 -8.000000e+00 -1.266562e-03 -9.000000e+00 -1.266793e-03 -1.000000e+01 -1.267009e-03 -1.100000e+01 -1.267212e-03 -1.200000e+01 -1.267404e-03 -1.300000e+01 -1.267587e-03 -1.400000e+01 -1.267763e-03 -1.500000e+01 -1.267931e-03 -1.600000e+01 -1.268094e-03 -1.700000e+01 -1.268251e-03 -1.800000e+01 -1.268403e-03 -1.900000e+01 -1.268550e-03 -2.000000e+01 -1.268693e-03 -1.000000e+00 -2.362838e-03 -2.000000e+00 -4.024752e-03 -3.000000e+00 -4.986194e-03 -4.000000e+00 -5.268643e-03 -5.000000e+00 -5.272333e-03 -6.000000e+00 -5.273779e-03 -7.000000e+00 -5.274992e-03 -8.000000e+00 -5.276028e-03 -9.000000e+00 -5.276934e-03 -1.000000e+01 -5.277740e-03 -1.100000e+01 -5.278470e-03 -1.200000e+01 -5.279141e-03 -1.300000e+01 -5.279764e-03 -1.400000e+01 -5.280349e-03 -1.500000e+01 -5.280901e-03 -1.600000e+01 -5.281426e-03 -1.700000e+01 -5.281928e-03 -1.800000e+01 -5.282409e-03 -1.900000e+01 -5.282872e-03 -2.000000e+01 -5.283319e-03 -1.000000e+00 -2.675656e-03 -2.000000e+00 -5.019945e-03 -3.000000e+00 -7.062823e-03 -4.000000e+00 -8.824272e-03 -5.000000e+00 -1.031574e-02 -6.000000e+00 -1.153877e-02 -7.000000e+00 -1.248684e-02 -8.000000e+00 -1.315597e-02 -9.000000e+00 -1.356490e-02 -1.000000e+01 -1.376763e-02 -1.100000e+01 -1.383800e-02 -1.200000e+01 -1.384304e-02 -1.300000e+01 -1.384486e-02 -1.400000e+01 -1.384653e-02 -1.500000e+01 -1.384808e-02 -1.600000e+01 -1.384952e-02 -1.700000e+01 -1.385087e-02 -1.800000e+01 -1.385213e-02 -1.900000e+01 -1.385332e-02 -2.000000e+01 -1.385444e-02 -1.000000e+00 -5.832950e-04 -2.000000e+00 -6.989393e-04 -3.000000e+00 -6.993235e-04 -4.000000e+00 -6.995840e-04 -5.000000e+00 -6.997860e-04 -6.000000e+00 -6.999555e-04 -7.000000e+00 -7.001045e-04 -8.000000e+00 -7.002391e-04 -9.000000e+00 -7.003631e-04 -1.000000e+01 -7.004786e-04 -1.100000e+01 -7.005872e-04 -1.200000e+01 -7.006901e-04 -1.300000e+01 -7.007881e-04 -1.400000e+01 -7.008818e-04 -1.500000e+01 -7.009719e-04 -1.600000e+01 -7.010586e-04 -1.700000e+01 -7.011424e-04 -1.800000e+01 -7.012234e-04 -1.900000e+01 -7.013021e-04 -2.000000e+01 -7.013785e-04 -1.000000e+00 -1.226445e-03 -2.000000e+00 -2.101138e-03 -3.000000e+00 -2.614233e-03 -4.000000e+00 -2.778258e-03 -5.000000e+00 -2.784821e-03 -6.000000e+00 -2.785605e-03 -7.000000e+00 -2.786257e-03 -8.000000e+00 -2.786813e-03 -9.000000e+00 -2.787298e-03 -1.000000e+01 -2.787731e-03 -1.100000e+01 -2.788123e-03 -1.200000e+01 -2.788484e-03 -1.300000e+01 -2.788819e-03 -1.400000e+01 -2.789134e-03 -1.500000e+01 -2.789432e-03 -1.600000e+01 -2.789716e-03 -1.700000e+01 -2.789986e-03 -1.800000e+01 -2.790246e-03 -1.900000e+01 -2.790497e-03 -2.000000e+01 -2.790738e-03 -1.000000e+00 -1.711050e-03 -2.000000e+00 -3.215038e-03 -3.000000e+00 -4.527289e-03 -4.000000e+00 -5.654309e-03 -5.000000e+00 -6.595485e-03 -6.000000e+00 -7.343386e-03 -7.000000e+00 -7.888909e-03 -8.000000e+00 -8.236114e-03 -9.000000e+00 -8.417870e-03 -1.000000e+01 -8.490039e-03 -1.100000e+01 -8.506484e-03 -1.200000e+01 -8.507941e-03 -1.300000e+01 -8.509093e-03 -1.400000e+01 -8.510153e-03 -1.500000e+01 -8.511133e-03 -1.600000e+01 -8.512044e-03 -1.700000e+01 -8.512895e-03 -1.800000e+01 -8.513692e-03 -1.900000e+01 -8.514442e-03 -2.000000e+01 -8.515151e-03 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_codfm.standard0000644000175000017500000001167213546075722024567 0ustar carstencarstenV(d) I(d) -1.000000e+00 -4.279320e-04 -2.000000e+00 -4.378554e-04 -3.000000e+00 -4.437505e-04 -4.000000e+00 -4.483563e-04 -5.000000e+00 -4.522991e-04 -6.000000e+00 -4.558169e-04 -7.000000e+00 -4.590304e-04 -8.000000e+00 -4.620115e-04 -9.000000e+00 -4.648073e-04 -1.000000e+01 -4.674507e-04 -1.100000e+01 -4.699661e-04 -1.200000e+01 -4.723716e-04 -1.300000e+01 -4.746816e-04 -1.400000e+01 -4.769076e-04 -1.500000e+01 -4.790590e-04 -1.600000e+01 -4.811434e-04 -1.700000e+01 -4.831672e-04 -1.800000e+01 -4.851361e-04 -1.900000e+01 -4.870547e-04 -2.000000e+01 -4.889270e-04 -1.000000e+00 -1.929583e-03 -2.000000e+00 -3.061003e-03 -3.000000e+00 -3.563021e-03 -4.000000e+00 -3.642511e-03 -5.000000e+00 -3.677191e-03 -6.000000e+00 -3.704107e-03 -7.000000e+00 -3.726005e-03 -8.000000e+00 -3.744605e-03 -9.000000e+00 -3.760950e-03 -1.000000e+01 -3.775677e-03 -1.100000e+01 -3.789188e-03 -1.200000e+01 -3.801748e-03 -1.300000e+01 -3.813539e-03 -1.400000e+01 -3.824694e-03 -1.500000e+01 -3.835310e-03 -1.600000e+01 -3.845461e-03 -1.700000e+01 -3.855207e-03 -1.800000e+01 -3.864593e-03 -1.900000e+01 -3.873660e-03 -2.000000e+01 -3.882438e-03 -1.000000e+00 -2.914582e-03 -2.000000e+00 -5.196177e-03 -3.000000e+00 -6.992315e-03 -4.000000e+00 -8.427303e-03 -5.000000e+00 -9.588984e-03 -6.000000e+00 -1.053865e-02 -7.000000e+00 -1.131949e-02 -8.000000e+00 -1.196214e-02 -9.000000e+00 -1.248818e-02 -1.000000e+01 -1.291243e-02 -1.100000e+01 -1.324479e-02 -1.200000e+01 -1.349226e-02 -1.300000e+01 -1.366211e-02 -1.400000e+01 -1.376605e-02 -1.500000e+01 -1.382387e-02 -1.600000e+01 -1.386873e-02 -1.700000e+01 -1.390959e-02 -1.800000e+01 -1.394663e-02 -1.900000e+01 -1.398062e-02 -2.000000e+01 -1.401201e-02 -1.000000e+00 -4.322339e-04 -2.000000e+00 -4.420707e-04 -3.000000e+00 -4.479797e-04 -4.000000e+00 -4.526242e-04 -5.000000e+00 -4.566135e-04 -6.000000e+00 -4.601800e-04 -7.000000e+00 -4.634422e-04 -8.000000e+00 -4.664712e-04 -9.000000e+00 -4.693138e-04 -1.000000e+01 -4.720027e-04 -1.100000e+01 -4.745623e-04 -1.200000e+01 -4.770108e-04 -1.300000e+01 -4.793626e-04 -1.400000e+01 -4.816292e-04 -1.500000e+01 -4.838201e-04 -1.600000e+01 -4.859430e-04 -1.700000e+01 -4.880045e-04 -1.800000e+01 -4.900100e-04 -1.900000e+01 -4.919644e-04 -2.000000e+01 -4.938717e-04 -1.000000e+00 -2.309353e-03 -2.000000e+00 -3.683856e-03 -3.000000e+00 -4.341712e-03 -4.000000e+00 -4.470013e-03 -5.000000e+00 -4.510900e-03 -6.000000e+00 -4.542422e-03 -7.000000e+00 -4.567783e-03 -8.000000e+00 -4.589070e-03 -9.000000e+00 -4.607593e-03 -1.000000e+01 -4.624153e-03 -1.100000e+01 -4.639254e-03 -1.200000e+01 -4.653225e-03 -1.300000e+01 -4.666293e-03 -1.400000e+01 -4.678618e-03 -1.500000e+01 -4.690317e-03 -1.600000e+01 -4.701480e-03 -1.700000e+01 -4.712177e-03 -1.800000e+01 -4.722463e-03 -1.900000e+01 -4.732384e-03 -2.000000e+01 -4.741976e-03 -1.000000e+00 -3.285916e-03 -2.000000e+00 -5.849125e-03 -3.000000e+00 -7.869277e-03 -4.000000e+00 -9.488250e-03 -5.000000e+00 -1.080518e-02 -6.000000e+00 -1.188950e-02 -7.000000e+00 -1.279079e-02 -8.000000e+00 -1.354504e-02 -9.000000e+00 -1.417878e-02 -1.000000e+01 -1.471163e-02 -1.100000e+01 -1.515808e-02 -1.200000e+01 -1.552864e-02 -1.300000e+01 -1.583080e-02 -1.400000e+01 -1.606991e-02 -1.500000e+01 -1.625041e-02 -1.600000e+01 -1.637756e-02 -1.700000e+01 -1.645966e-02 -1.800000e+01 -1.651135e-02 -1.900000e+01 -1.655814e-02 -2.000000e+01 -1.660004e-02 -1.000000e+00 -4.401284e-04 -2.000000e+00 -4.513799e-04 -3.000000e+00 -4.574663e-04 -4.000000e+00 -4.621570e-04 -5.000000e+00 -4.661444e-04 -6.000000e+00 -4.696869e-04 -7.000000e+00 -4.729139e-04 -8.000000e+00 -4.759017e-04 -9.000000e+00 -4.786997e-04 -1.000000e+01 -4.813422e-04 -1.100000e+01 -4.838544e-04 -1.200000e+01 -4.862551e-04 -1.300000e+01 -4.885592e-04 -1.400000e+01 -4.907783e-04 -1.500000e+01 -4.929221e-04 -1.600000e+01 -4.949983e-04 -1.700000e+01 -4.970137e-04 -1.800000e+01 -4.989737e-04 -1.900000e+01 -5.008831e-04 -2.000000e+01 -5.027461e-04 -1.000000e+00 -1.513818e-03 -2.000000e+00 -2.398039e-03 -3.000000e+00 -2.771170e-03 -4.000000e+00 -2.829363e-03 -5.000000e+00 -2.857414e-03 -6.000000e+00 -2.879238e-03 -7.000000e+00 -2.897157e-03 -8.000000e+00 -2.912521e-03 -9.000000e+00 -2.926126e-03 -1.000000e+01 -2.938456e-03 -1.100000e+01 -2.949819e-03 -1.200000e+01 -2.960418e-03 -1.300000e+01 -2.970396e-03 -1.400000e+01 -2.979857e-03 -1.500000e+01 -2.988878e-03 -1.600000e+01 -2.997518e-03 -1.700000e+01 -3.005824e-03 -1.800000e+01 -3.013834e-03 -1.900000e+01 -3.021580e-03 -2.000000e+01 -3.029087e-03 -1.000000e+00 -2.418614e-03 -2.000000e+00 -4.321294e-03 -3.000000e+00 -5.817348e-03 -4.000000e+00 -7.006328e-03 -5.000000e+00 -7.959492e-03 -6.000000e+00 -8.725843e-03 -7.000000e+00 -9.338529e-03 -8.000000e+00 -9.819270e-03 -9.000000e+00 -1.018184e-02 -1.000000e+01 -1.043638e-02 -1.100000e+01 -1.059599e-02 -1.200000e+01 -1.068324e-02 -1.300000e+01 -1.073075e-02 -1.400000e+01 -1.077058e-02 -1.500000e+01 -1.080655e-02 -1.600000e+01 -1.083929e-02 -1.700000e+01 -1.086936e-02 -1.800000e+01 -1.089712e-02 -1.900000e+01 -1.092289e-02 -2.000000e+01 -1.094691e-02 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/acFreq_coovlp.standard0000644000175000017500000000710513546075722025276 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 4.93037344682513e-13 2.2904879128036e-13 2.74005765520357e-13 1258.925 4.93037532212718e-13 2.29048985046296e-13 2.74005792217376e-13 1584.893 4.93037359184666e-13 2.29048864556025e-13 2.74005790555362e-13 1995.262 4.93037391713602e-13 2.29048848802172e-13 2.74005771758252e-13 2511.886 4.93037377270839e-13 2.2904886679267e-13 2.74005779314369e-13 3162.278 4.93037289777878e-13 2.29048823623518e-13 2.74005739809078e-13 3981.072 4.93037185177043e-13 2.29048845041375e-13 2.74005725291064e-13 5011.872 4.93037261614975e-13 2.2904886558742e-13 2.7400575982061e-13 6309.573 4.93037365614065e-13 2.29048870979551e-13 2.74005668295153e-13 7943.282 4.93037416266835e-13 2.2904895257371e-13 2.7400567242357e-13 10000 4.93037344682513e-13 2.2904879128036e-13 2.74005765520357e-13 12589.25 4.93037532212718e-13 2.29048985046296e-13 2.74005792217376e-13 15848.93 4.93037359184666e-13 2.29048864556025e-13 2.74005790555362e-13 19952.62 4.93037391713602e-13 2.29048848802172e-13 2.74005771758252e-13 25118.86 4.93037377270839e-13 2.2904886679267e-13 2.74005779314369e-13 31622.78 4.93037289777878e-13 2.29048823623518e-13 2.74005739809078e-13 39810.72 4.93037185177043e-13 2.29048845041375e-13 2.74005725291064e-13 50118.72 4.93037261614975e-13 2.2904886558742e-13 2.7400575982061e-13 63095.73 4.93037365614065e-13 2.29048870979551e-13 2.74005668295153e-13 79432.82 4.93037416266835e-13 2.2904895257371e-13 2.7400567242357e-13 100000 4.93037344682513e-13 2.2904879128036e-13 2.74005765520357e-13 125892.5 4.93037532212718e-13 2.29048985046296e-13 2.74005792217376e-13 158489.3 4.93037359184666e-13 2.29048864556025e-13 2.74005790555362e-13 199526.2 4.93037391713602e-13 2.29048848802172e-13 2.74005771758252e-13 251188.6 4.93037377270839e-13 2.2904886679267e-13 2.74005779314369e-13 316227.8 4.93037289777878e-13 2.29048823623518e-13 2.74005739809077e-13 398107.2 4.93037185177043e-13 2.29048845041375e-13 2.74005725291064e-13 501187.2 4.93037261614975e-13 2.2904886558742e-13 2.7400575982061e-13 630957.3 4.93037365614065e-13 2.29048870979551e-13 2.74005668295153e-13 794328.2 4.93037416266835e-13 2.2904895257371e-13 2.7400567242357e-13 1000000 4.93037344682513e-13 2.2904879128036e-13 2.74005765520357e-13 1258925 4.93037532212718e-13 2.29048985046296e-13 2.74005792217376e-13 1584893 4.93037359184666e-13 2.29048864556025e-13 2.74005790555362e-13 1995262 4.93037391713602e-13 2.29048848802172e-13 2.74005771758252e-13 2511886 4.93037377270839e-13 2.2904886679267e-13 2.74005779314369e-13 3162278 4.93037289777878e-13 2.29048823623518e-13 2.74005739809078e-13 3981072 4.93037185177043e-13 2.29048845041376e-13 2.74005725291064e-13 5011872 4.93037261614975e-13 2.2904886558742e-13 2.7400575982061e-13 6309573 4.93037365614065e-13 2.29048870979551e-13 2.74005668295153e-13 7943282 4.93037416266835e-13 2.29048752209499e-13 2.7400567242357e-13 10000000 4.93037344682512e-13 2.2904879128036e-13 2.74005765520357e-13 12589250 4.93037405791411e-13 2.2904885862499e-13 2.74005792217376e-13 15848930 4.93037359184666e-13 2.29048864556025e-13 2.74005790555362e-13 19952620 4.93037311947164e-13 2.29048848802172e-13 2.74005771758252e-13 25118860 4.93037313910104e-13 2.29048803431935e-13 2.74005779314369e-13 31622780 4.93037138790258e-13 2.29048672635898e-13 2.74005689479871e-13 39810720 4.93037185177043e-13 2.29048605173908e-13 2.74005685313153e-13 50118720 4.93036944059093e-13 2.29048548031538e-13 2.74005728065022e-13 63095730 4.93036861126858e-13 2.29048341267984e-13 2.74005668295153e-13 79432820 4.9303661480999e-13 2.29047950752655e-13 2.7400567242357e-13 100000000 4.93036071442968e-13 2.29047518040815e-13 2.74005606365414e-13 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_cosym.standard0000644000175000017500000003602613546075722024631 0ustar carstencarstenV(d) I(d) -1.000000e-01 -1.691752e-05 -6.000000e-01 -9.362260e-05 -1.100000e+00 -1.542831e-04 -1.600000e+00 -1.925183e-04 -2.100000e+00 -2.016541e-04 -2.600000e+00 -2.016737e-04 -3.100000e+00 -2.016870e-04 -3.600000e+00 -2.016977e-04 -4.100000e+00 -2.017065e-04 -4.600000e+00 -2.017142e-04 -5.100000e+00 -2.017210e-04 -5.600000e+00 -2.017271e-04 -6.100000e+00 -2.017327e-04 -6.600000e+00 -2.017380e-04 -7.100000e+00 -2.017429e-04 -7.600000e+00 -2.017475e-04 -8.100000e+00 -2.017519e-04 -8.600000e+00 -2.017561e-04 -9.100000e+00 -2.017601e-04 -9.600000e+00 -2.017640e-04 -1.010000e+01 -2.017678e-04 -1.060000e+01 -2.017714e-04 -1.110000e+01 -2.017749e-04 -1.160000e+01 -2.017783e-04 -1.210000e+01 -2.017816e-04 -1.260000e+01 -2.017849e-04 -1.310000e+01 -2.017880e-04 -1.360000e+01 -2.017911e-04 -1.410000e+01 -2.017941e-04 -1.460000e+01 -2.017971e-04 -1.510000e+01 -2.018000e-04 -1.560000e+01 -2.018028e-04 -1.610000e+01 -2.018056e-04 -1.660000e+01 -2.018083e-04 -1.710000e+01 -2.018110e-04 -1.760000e+01 -2.018136e-04 -1.810000e+01 -2.018162e-04 -1.860000e+01 -2.018188e-04 -1.910000e+01 -2.018213e-04 -1.960000e+01 -2.018238e-04 -2.010000e+01 -2.018262e-04 -2.060000e+01 -2.018286e-04 -2.110000e+01 -2.018310e-04 -2.160000e+01 -2.018334e-04 -2.210000e+01 -2.018357e-04 -2.260000e+01 -2.018380e-04 -2.310000e+01 -2.018402e-04 -2.360000e+01 -2.018424e-04 -2.410000e+01 -2.018447e-04 -2.460000e+01 -2.018468e-04 -2.510000e+01 -2.018490e-04 -2.560000e+01 -2.018511e-04 -2.610000e+01 -2.018532e-04 -2.660000e+01 -2.018553e-04 -2.710000e+01 -2.018574e-04 -2.760000e+01 -2.018594e-04 -2.810000e+01 -2.018615e-04 -2.860000e+01 -2.018635e-04 -2.910000e+01 -2.018655e-04 -2.960000e+01 -2.018674e-04 -3.010000e+01 -2.018694e-04 -1.000000e-01 -2.317270e-05 -6.000000e-01 -1.365541e-04 -1.100000e+00 -2.455559e-04 -1.600000e+00 -3.497325e-04 -2.100000e+00 -4.484681e-04 -2.600000e+00 -5.409125e-04 -3.100000e+00 -6.258614e-04 -3.600000e+00 -7.015457e-04 -4.100000e+00 -7.653165e-04 -4.600000e+00 -8.134664e-04 -5.100000e+00 -8.422726e-04 -5.600000e+00 -8.517203e-04 -6.100000e+00 -8.520011e-04 -6.600000e+00 -8.520615e-04 -7.100000e+00 -8.521132e-04 -7.600000e+00 -8.521582e-04 -8.100000e+00 -8.521979e-04 -8.600000e+00 -8.522332e-04 -9.100000e+00 -8.522650e-04 -9.600000e+00 -8.522938e-04 -1.010000e+01 -8.523202e-04 -1.060000e+01 -8.523444e-04 -1.110000e+01 -8.523669e-04 -1.160000e+01 -8.523878e-04 -1.210000e+01 -8.524074e-04 -1.260000e+01 -8.524259e-04 -1.310000e+01 -8.524433e-04 -1.360000e+01 -8.524599e-04 -1.410000e+01 -8.524756e-04 -1.460000e+01 -8.524906e-04 -1.510000e+01 -8.525051e-04 -1.560000e+01 -8.525189e-04 -1.610000e+01 -8.525322e-04 -1.660000e+01 -8.525450e-04 -1.710000e+01 -8.525574e-04 -1.760000e+01 -8.525694e-04 -1.810000e+01 -8.525811e-04 -1.860000e+01 -8.525924e-04 -1.910000e+01 -8.526034e-04 -1.960000e+01 -8.526141e-04 -2.010000e+01 -8.526245e-04 -2.060000e+01 -8.526347e-04 -2.110000e+01 -8.526446e-04 -2.160000e+01 -8.526543e-04 -2.210000e+01 -8.526638e-04 -2.260000e+01 -8.526731e-04 -2.310000e+01 -8.526822e-04 -2.360000e+01 -8.526912e-04 -2.410000e+01 -8.526999e-04 -2.460000e+01 -8.527086e-04 -2.510000e+01 -8.527170e-04 -2.560000e+01 -8.527253e-04 -2.610000e+01 -8.527335e-04 -2.660000e+01 -8.527416e-04 -2.710000e+01 -8.527495e-04 -2.760000e+01 -8.527573e-04 -2.810000e+01 -8.527650e-04 -2.860000e+01 -8.527726e-04 -2.910000e+01 -8.527801e-04 -2.960000e+01 -8.527874e-04 -3.010000e+01 -8.527947e-04 -1.000000e-01 -2.514541e-05 -6.000000e-01 -1.500042e-04 -1.100000e+00 -2.734321e-04 -1.600000e+00 -3.954305e-04 -2.100000e+00 -5.159805e-04 -2.600000e+00 -6.350467e-04 -3.100000e+00 -7.525787e-04 -3.600000e+00 -8.685117e-04 -4.100000e+00 -9.827659e-04 -4.600000e+00 -1.095245e-03 -5.100000e+00 -1.205835e-03 -5.600000e+00 -1.314398e-03 -6.100000e+00 -1.420771e-03 -6.600000e+00 -1.524757e-03 -7.100000e+00 -1.626120e-03 -7.600000e+00 -1.724572e-03 -8.100000e+00 -1.819758e-03 -8.600000e+00 -1.911245e-03 -9.100000e+00 -1.998498e-03 -9.600000e+00 -2.080863e-03 -1.010000e+01 -2.157547e-03 -1.060000e+01 -2.227618e-03 -1.110000e+01 -2.290038e-03 -1.160000e+01 -2.343750e-03 -1.210000e+01 -2.387867e-03 -1.260000e+01 -2.421931e-03 -1.310000e+01 -2.446182e-03 -1.360000e+01 -2.461684e-03 -1.410000e+01 -2.470161e-03 -1.460000e+01 -2.473446e-03 -1.510000e+01 -2.473807e-03 -1.560000e+01 -2.474006e-03 -1.610000e+01 -2.474188e-03 -1.660000e+01 -2.474356e-03 -1.710000e+01 -2.474511e-03 -1.760000e+01 -2.474655e-03 -1.810000e+01 -2.474790e-03 -1.860000e+01 -2.474916e-03 -1.910000e+01 -2.475034e-03 -1.960000e+01 -2.475145e-03 -2.010000e+01 -2.475249e-03 -2.060000e+01 -2.475348e-03 -2.110000e+01 -2.475441e-03 -2.160000e+01 -2.475529e-03 -2.210000e+01 -2.475613e-03 -2.260000e+01 -2.475693e-03 -2.310000e+01 -2.475769e-03 -2.360000e+01 -2.475842e-03 -2.410000e+01 -2.475911e-03 -2.460000e+01 -2.475977e-03 -2.510000e+01 -2.476041e-03 -2.560000e+01 -2.476102e-03 -2.610000e+01 -2.476160e-03 -2.660000e+01 -2.476217e-03 -2.710000e+01 -2.476271e-03 -2.760000e+01 -2.476323e-03 -2.810000e+01 -2.476374e-03 -2.860000e+01 -2.476423e-03 -2.910000e+01 -2.476470e-03 -2.960000e+01 -2.476516e-03 -3.010000e+01 -2.476560e-03 -1.000000e-01 -2.085755e-05 -6.000000e-01 -1.172180e-04 -1.100000e+00 -1.969225e-04 -1.600000e+00 -2.518767e-04 -2.100000e+00 -2.686082e-04 -2.600000e+00 -2.686397e-04 -3.100000e+00 -2.686602e-04 -3.600000e+00 -2.686764e-04 -4.100000e+00 -2.686897e-04 -4.600000e+00 -2.687009e-04 -5.100000e+00 -2.687108e-04 -5.600000e+00 -2.687196e-04 -6.100000e+00 -2.687277e-04 -6.600000e+00 -2.687351e-04 -7.100000e+00 -2.687421e-04 -7.600000e+00 -2.687486e-04 -8.100000e+00 -2.687548e-04 -8.600000e+00 -2.687607e-04 -9.100000e+00 -2.687663e-04 -9.600000e+00 -2.687717e-04 -1.010000e+01 -2.687769e-04 -1.060000e+01 -2.687820e-04 -1.110000e+01 -2.687868e-04 -1.160000e+01 -2.687916e-04 -1.210000e+01 -2.687961e-04 -1.260000e+01 -2.688006e-04 -1.310000e+01 -2.688050e-04 -1.360000e+01 -2.688092e-04 -1.410000e+01 -2.688134e-04 -1.460000e+01 -2.688174e-04 -1.510000e+01 -2.688214e-04 -1.560000e+01 -2.688253e-04 -1.610000e+01 -2.688291e-04 -1.660000e+01 -2.688329e-04 -1.710000e+01 -2.688366e-04 -1.760000e+01 -2.688402e-04 -1.810000e+01 -2.688438e-04 -1.860000e+01 -2.688473e-04 -1.910000e+01 -2.688507e-04 -1.960000e+01 -2.688541e-04 -2.010000e+01 -2.688575e-04 -2.060000e+01 -2.688608e-04 -2.110000e+01 -2.688640e-04 -2.160000e+01 -2.688672e-04 -2.210000e+01 -2.688704e-04 -2.260000e+01 -2.688735e-04 -2.310000e+01 -2.688766e-04 -2.360000e+01 -2.688797e-04 -2.410000e+01 -2.688827e-04 -2.460000e+01 -2.688857e-04 -2.510000e+01 -2.688886e-04 -2.560000e+01 -2.688915e-04 -2.610000e+01 -2.688944e-04 -2.660000e+01 -2.688972e-04 -2.710000e+01 -2.689001e-04 -2.760000e+01 -2.689029e-04 -2.810000e+01 -2.689056e-04 -2.860000e+01 -2.689084e-04 -2.910000e+01 -2.689111e-04 -2.960000e+01 -2.689138e-04 -3.010000e+01 -2.689164e-04 -1.000000e-01 -2.681869e-05 -6.000000e-01 -1.588001e-04 -1.100000e+00 -2.870662e-04 -1.600000e+00 -4.112647e-04 -2.100000e+00 -5.309162e-04 -2.600000e+00 -6.453698e-04 -3.100000e+00 -7.537245e-04 -3.600000e+00 -8.546860e-04 -4.100000e+00 -9.463102e-04 -4.600000e+00 -1.025572e-03 -5.100000e+00 -1.087871e-03 -5.600000e+00 -1.127484e-03 -6.100000e+00 -1.141485e-03 -6.600000e+00 -1.141839e-03 -7.100000e+00 -1.141955e-03 -7.600000e+00 -1.142053e-03 -8.100000e+00 -1.142137e-03 -8.600000e+00 -1.142210e-03 -9.100000e+00 -1.142274e-03 -9.600000e+00 -1.142331e-03 -1.010000e+01 -1.142383e-03 -1.060000e+01 -1.142429e-03 -1.110000e+01 -1.142472e-03 -1.160000e+01 -1.142510e-03 -1.210000e+01 -1.142546e-03 -1.260000e+01 -1.142580e-03 -1.310000e+01 -1.142611e-03 -1.360000e+01 -1.142640e-03 -1.410000e+01 -1.142668e-03 -1.460000e+01 -1.142694e-03 -1.510000e+01 -1.142719e-03 -1.560000e+01 -1.142742e-03 -1.610000e+01 -1.142765e-03 -1.660000e+01 -1.142786e-03 -1.710000e+01 -1.142807e-03 -1.760000e+01 -1.142827e-03 -1.810000e+01 -1.142846e-03 -1.860000e+01 -1.142864e-03 -1.910000e+01 -1.142882e-03 -1.960000e+01 -1.142899e-03 -2.010000e+01 -1.142916e-03 -2.060000e+01 -1.142932e-03 -2.110000e+01 -1.142948e-03 -2.160000e+01 -1.142963e-03 -2.210000e+01 -1.142978e-03 -2.260000e+01 -1.142992e-03 -2.310000e+01 -1.143007e-03 -2.360000e+01 -1.143020e-03 -2.410000e+01 -1.143034e-03 -2.460000e+01 -1.143047e-03 -2.510000e+01 -1.143060e-03 -2.560000e+01 -1.143073e-03 -2.610000e+01 -1.143085e-03 -2.660000e+01 -1.143098e-03 -2.710000e+01 -1.143110e-03 -2.760000e+01 -1.143121e-03 -2.810000e+01 -1.143133e-03 -2.860000e+01 -1.143144e-03 -2.910000e+01 -1.143156e-03 -2.960000e+01 -1.143167e-03 -3.010000e+01 -1.143178e-03 -1.000000e-01 -2.743351e-05 -6.000000e-01 -1.638452e-04 -1.100000e+00 -2.990142e-04 -1.600000e+00 -4.329480e-04 -2.100000e+00 -5.656380e-04 -2.600000e+00 -6.970623e-04 -3.100000e+00 -8.271876e-04 -3.600000e+00 -9.559696e-04 -4.100000e+00 -1.083353e-03 -4.600000e+00 -1.209271e-03 -5.100000e+00 -1.333645e-03 -5.600000e+00 -1.456381e-03 -6.100000e+00 -1.577367e-03 -6.600000e+00 -1.696475e-03 -7.100000e+00 -1.813547e-03 -7.600000e+00 -1.928398e-03 -8.100000e+00 -2.040804e-03 -8.600000e+00 -2.150495e-03 -9.100000e+00 -2.257137e-03 -9.600000e+00 -2.360324e-03 -1.010000e+01 -2.459552e-03 -1.060000e+01 -2.554200e-03 -1.110000e+01 -2.643506e-03 -1.160000e+01 -2.726545e-03 -1.210000e+01 -2.802231e-03 -1.260000e+01 -2.869351e-03 -1.310000e+01 -2.926683e-03 -1.360000e+01 -2.973212e-03 -1.410000e+01 -3.008455e-03 -1.460000e+01 -3.032774e-03 -1.510000e+01 -3.047499e-03 -1.560000e+01 -3.054585e-03 -1.610000e+01 -3.055733e-03 -1.660000e+01 -3.056098e-03 -1.710000e+01 -3.056430e-03 -1.760000e+01 -3.056735e-03 -1.810000e+01 -3.057016e-03 -1.860000e+01 -3.057277e-03 -1.910000e+01 -3.057518e-03 -1.960000e+01 -3.057743e-03 -2.010000e+01 -3.057954e-03 -2.060000e+01 -3.058150e-03 -2.110000e+01 -3.058335e-03 -2.160000e+01 -3.058509e-03 -2.210000e+01 -3.058673e-03 -2.260000e+01 -3.058828e-03 -2.310000e+01 -3.058974e-03 -2.360000e+01 -3.059113e-03 -2.410000e+01 -3.059245e-03 -2.460000e+01 -3.059371e-03 -2.510000e+01 -3.059490e-03 -2.560000e+01 -3.059604e-03 -2.610000e+01 -3.059713e-03 -2.660000e+01 -3.059818e-03 -2.710000e+01 -3.059918e-03 -2.760000e+01 -3.060014e-03 -2.810000e+01 -3.060106e-03 -2.860000e+01 -3.060194e-03 -2.910000e+01 -3.060279e-03 -2.960000e+01 -3.060362e-03 -3.010000e+01 -3.060441e-03 -1.000000e-01 -1.282362e-05 -6.000000e-01 -7.002568e-05 -1.100000e+00 -1.138577e-04 -1.600000e+00 -1.405862e-04 -2.100000e+00 -1.476239e-04 -2.600000e+00 -1.476668e-04 -3.100000e+00 -1.476756e-04 -3.600000e+00 -1.476826e-04 -4.100000e+00 -1.476886e-04 -4.600000e+00 -1.476938e-04 -5.100000e+00 -1.476984e-04 -5.600000e+00 -1.477026e-04 -6.100000e+00 -1.477065e-04 -6.600000e+00 -1.477101e-04 -7.100000e+00 -1.477135e-04 -7.600000e+00 -1.477167e-04 -8.100000e+00 -1.477197e-04 -8.600000e+00 -1.477227e-04 -9.100000e+00 -1.477255e-04 -9.600000e+00 -1.477282e-04 -1.010000e+01 -1.477308e-04 -1.060000e+01 -1.477333e-04 -1.110000e+01 -1.477358e-04 -1.160000e+01 -1.477382e-04 -1.210000e+01 -1.477405e-04 -1.260000e+01 -1.477428e-04 -1.310000e+01 -1.477450e-04 -1.360000e+01 -1.477472e-04 -1.410000e+01 -1.477493e-04 -1.460000e+01 -1.477513e-04 -1.510000e+01 -1.477534e-04 -1.560000e+01 -1.477554e-04 -1.610000e+01 -1.477573e-04 -1.660000e+01 -1.477592e-04 -1.710000e+01 -1.477611e-04 -1.760000e+01 -1.477630e-04 -1.810000e+01 -1.477648e-04 -1.860000e+01 -1.477666e-04 -1.910000e+01 -1.477684e-04 -1.960000e+01 -1.477701e-04 -2.010000e+01 -1.477718e-04 -2.060000e+01 -1.477735e-04 -2.110000e+01 -1.477752e-04 -2.160000e+01 -1.477769e-04 -2.210000e+01 -1.477785e-04 -2.260000e+01 -1.477801e-04 -2.310000e+01 -1.477817e-04 -2.360000e+01 -1.477833e-04 -2.410000e+01 -1.477848e-04 -2.460000e+01 -1.477864e-04 -2.510000e+01 -1.477879e-04 -2.560000e+01 -1.477894e-04 -2.610000e+01 -1.477909e-04 -2.660000e+01 -1.477923e-04 -2.710000e+01 -1.477938e-04 -2.760000e+01 -1.477952e-04 -2.810000e+01 -1.477967e-04 -2.860000e+01 -1.477981e-04 -2.910000e+01 -1.477995e-04 -2.960000e+01 -1.478009e-04 -3.010000e+01 -1.478022e-04 -1.000000e-01 -1.860060e-05 -6.000000e-01 -1.088450e-04 -1.100000e+00 -1.942516e-04 -1.600000e+00 -2.743590e-04 -2.100000e+00 -3.485154e-04 -2.600000e+00 -4.158089e-04 -3.100000e+00 -4.749410e-04 -3.600000e+00 -5.240596e-04 -4.100000e+00 -5.607798e-04 -4.600000e+00 -5.831341e-04 -5.100000e+00 -5.919380e-04 -5.600000e+00 -5.928997e-04 -6.100000e+00 -5.929328e-04 -6.600000e+00 -5.929600e-04 -7.100000e+00 -5.929840e-04 -7.600000e+00 -5.930054e-04 -8.100000e+00 -5.930246e-04 -8.600000e+00 -5.930421e-04 -9.100000e+00 -5.930581e-04 -9.600000e+00 -5.930729e-04 -1.010000e+01 -5.930865e-04 -1.060000e+01 -5.930993e-04 -1.110000e+01 -5.931113e-04 -1.160000e+01 -5.931226e-04 -1.210000e+01 -5.931333e-04 -1.260000e+01 -5.931435e-04 -1.310000e+01 -5.931533e-04 -1.360000e+01 -5.931626e-04 -1.410000e+01 -5.931715e-04 -1.460000e+01 -5.931801e-04 -1.510000e+01 -5.931884e-04 -1.560000e+01 -5.931965e-04 -1.610000e+01 -5.932043e-04 -1.660000e+01 -5.932118e-04 -1.710000e+01 -5.932191e-04 -1.760000e+01 -5.932263e-04 -1.810000e+01 -5.932333e-04 -1.860000e+01 -5.932400e-04 -1.910000e+01 -5.932467e-04 -1.960000e+01 -5.932532e-04 -2.010000e+01 -5.932595e-04 -2.060000e+01 -5.932657e-04 -2.110000e+01 -5.932718e-04 -2.160000e+01 -5.932778e-04 -2.210000e+01 -5.932837e-04 -2.260000e+01 -5.932894e-04 -2.310000e+01 -5.932951e-04 -2.360000e+01 -5.933007e-04 -2.410000e+01 -5.933062e-04 -2.460000e+01 -5.933116e-04 -2.510000e+01 -5.933169e-04 -2.560000e+01 -5.933221e-04 -2.610000e+01 -5.933273e-04 -2.660000e+01 -5.933324e-04 -2.710000e+01 -5.933374e-04 -2.760000e+01 -5.933424e-04 -2.810000e+01 -5.933473e-04 -2.860000e+01 -5.933521e-04 -2.910000e+01 -5.933569e-04 -2.960000e+01 -5.933616e-04 -3.010000e+01 -5.933662e-04 -1.000000e-01 -2.178414e-05 -6.000000e-01 -1.296821e-04 -1.100000e+00 -2.358934e-04 -1.600000e+00 -3.404134e-04 -2.100000e+00 -4.432108e-04 -2.600000e+00 -5.442324e-04 -3.100000e+00 -6.434052e-04 -3.600000e+00 -7.406368e-04 -4.100000e+00 -8.358138e-04 -4.600000e+00 -9.287993e-04 -5.100000e+00 -1.019428e-03 -5.600000e+00 -1.107500e-03 -6.100000e+00 -1.192775e-03 -6.600000e+00 -1.274958e-03 -7.100000e+00 -1.353689e-03 -7.600000e+00 -1.428530e-03 -8.100000e+00 -1.498946e-03 -8.600000e+00 -1.564295e-03 -9.100000e+00 -1.623835e-03 -9.600000e+00 -1.676752e-03 -1.010000e+01 -1.722243e-03 -1.060000e+01 -1.759673e-03 -1.110000e+01 -1.788774e-03 -1.160000e+01 -1.809838e-03 -1.210000e+01 -1.823779e-03 -1.260000e+01 -1.831996e-03 -1.310000e+01 -1.836079e-03 -1.360000e+01 -1.837454e-03 -1.410000e+01 -1.837642e-03 -1.460000e+01 -1.837734e-03 -1.510000e+01 -1.837818e-03 -1.560000e+01 -1.837896e-03 -1.610000e+01 -1.837968e-03 -1.660000e+01 -1.838036e-03 -1.710000e+01 -1.838100e-03 -1.760000e+01 -1.838160e-03 -1.810000e+01 -1.838216e-03 -1.860000e+01 -1.838269e-03 -1.910000e+01 -1.838320e-03 -1.960000e+01 -1.838368e-03 -2.010000e+01 -1.838414e-03 -2.060000e+01 -1.838457e-03 -2.110000e+01 -1.838499e-03 -2.160000e+01 -1.838538e-03 -2.210000e+01 -1.838576e-03 -2.260000e+01 -1.838612e-03 -2.310000e+01 -1.838647e-03 -2.360000e+01 -1.838681e-03 -2.410000e+01 -1.838713e-03 -2.460000e+01 -1.838744e-03 -2.510000e+01 -1.838774e-03 -2.560000e+01 -1.838803e-03 -2.610000e+01 -1.838832e-03 -2.660000e+01 -1.838859e-03 -2.710000e+01 -1.838885e-03 -2.760000e+01 -1.838911e-03 -2.810000e+01 -1.838935e-03 -2.860000e+01 -1.838960e-03 -2.910000e+01 -1.838983e-03 -2.960000e+01 -1.839006e-03 -3.010000e+01 -1.839028e-03 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/acVd_coadov.standard0000644000175000017500000000551013546075722024721 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -1 2.670475e-06 2.092080e-03 5.65773653185685e-13 6.72729882144551e-13 -2 3.504811e-05 1.832258e-03 6.26080569514046e-13 6.12985565968517e-13 -3 9.600629e-05 1.589382e-03 6.79593984003037e-13 5.5888425132035e-13 -4 1.864544e-04 1.355423e-03 7.27175996886074e-13 5.07747737474916e-13 -5 3.105655e-04 1.121704e-03 7.69180008258844e-13 4.56029423471956e-13 -6 4.753885e-04 8.799598e-04 8.04333217776729e-13 4.00253208370303e-13 -7 6.842120e-04 6.297038e-04 8.29305924538198e-13 3.40575292212247e-13 -8 9.207582e-04 3.896816e-04 8.41748327907033e-13 2.85060177181287e-13 -9 1.141821e-03 1.952061e-04 8.45024428794051e-13 2.44811366283746e-13 -10 1.304090e-03 7.014926e-05 8.44422228631003e-13 2.19330459384679e-13 -11 1.402085e-03 4.455501e-06 8.23691823018155e-13 1.72197346623183e-13 -12 1.406696e-03 1.585491e-06 7.59085105525605e-13 5.221836413835e-14 -13 1.406928e-03 1.446764e-06 7.50354803161837e-13 3.53825795799878e-14 -14 1.407129e-03 1.336034e-06 7.47245702320035e-13 2.89591978408292e-14 -15 1.407314e-03 1.240775e-06 7.45609001876891e-13 2.53260568571404e-14 -16 1.407489e-03 1.156915e-06 7.44602301604322e-13 2.2913636203967e-14 -17 1.407653e-03 1.082647e-06 7.43929701422213e-13 2.11626857298895e-14 -18 1.407808e-03 1.016807e-06 7.43457501294363e-13 1.98173953656463e-14 -19 1.407953e-03 9.584296e-07 7.43115501201765e-13 1.87419750744715e-14 -20 1.408088e-03 9.066352e-07 7.42863201133453e-13 1.78567948348051e-14 -1 3.469082e-05 1.603909e-03 5.54791350212179e-13 6.80818384334548e-13 -2 8.804536e-05 1.406445e-03 6.08080664640493e-13 6.27962270023525e-13 -3 1.601666e-04 1.219133e-03 6.57031677894194e-13 5.77985856492193e-13 -4 2.528203e-04 1.034813e-03 7.02155090111555e-13 5.28068042976727e-13 -5 3.701239e-04 8.462339e-04 7.43548401318974e-13 4.74106728366466e-13 -6 5.173571e-04 6.477889e-04 7.79388611022867e-13 4.12314511635953e-13 -7 6.934892e-04 4.435939e-04 8.05192918009496e-13 3.44908593385507e-13 -8 8.780511e-04 2.563967e-04 8.17867621441227e-13 2.84620977062372e-13 -9 1.033712e-03 1.169279e-04 8.20869222253924e-13 2.42911765769421e-13 -10 1.134906e-03 3.672691e-05 8.17278121281618e-13 2.09964856848901e-13 -11 1.183633e-03 2.723835e-06 7.71263908823069e-13 9.08537545990505e-14 -12 1.185996e-03 1.207407e-06 7.51865403570839e-13 4.22882414497259e-14 -13 1.186188e-03 1.103059e-06 7.48261302595013e-13 3.2358968761332e-14 -14 1.186359e-03 1.017879e-06 7.4662900215306e-13 2.75150674498246e-14 -15 1.186517e-03 9.441985e-07 7.45693801899851e-13 2.45125366368763e-14 -16 1.186666e-03 8.795883e-07 7.4509510173775e-13 2.24190960700681e-14 -17 1.186805e-03 8.227375e-07 7.44686701627174e-13 2.08526256459394e-14 -18 1.186935e-03 7.726668e-07 7.44397501548872e-13 1.96236353131849e-14 -19 1.187056e-03 7.285251e-07 7.44187901492122e-13 1.86260950430965e-14 -20 1.187169e-03 6.895448e-07 7.44034501450588e-13 1.77954348181916e-14 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_gidl.standard0000644000175000017500000001634313546075722024416 0ustar carstencarstenV(d) I(d) I(b) -1.000000e+00 -8.320516e-04 1.012500e-15 -2.000000e+00 -9.524288e-04 2.012500e-15 -3.000000e+00 -9.529480e-04 3.012500e-15 -4.000000e+00 -9.533076e-04 4.013399e-15 -5.000000e+00 -9.535873e-04 2.156866e-13 -6.000000e+00 -9.538227e-04 2.832757e-11 -7.000000e+00 -9.540303e-04 4.264586e-10 -8.000000e+00 -9.542199e-04 2.476235e-09 -9.000000e+00 -9.543989e-04 8.668704e-09 -1.000000e+01 -9.545737e-04 2.240159e-08 -1.100000e+01 -9.547505e-04 4.749738e-08 -1.200000e+01 -9.549345e-04 8.781551e-08 -1.300000e+01 -9.551307e-04 1.470158e-07 -1.400000e+01 -9.553432e-04 2.284417e-07 -1.500000e+01 -9.555757e-04 3.350808e-07 -1.600000e+01 -9.558315e-04 4.695672e-07 -1.700000e+01 -9.561133e-04 6.342065e-07 -1.800000e+01 -9.564236e-04 8.310089e-07 -1.900000e+01 -9.567644e-04 1.061724e-06 -2.000000e+01 -9.571375e-04 1.327877e-06 -1.000000e+00 -1.775374e-03 1.012500e-15 -2.000000e+00 -3.030177e-03 2.012500e-15 -3.000000e+00 -3.755070e-03 3.012500e-15 -4.000000e+00 -3.968650e-03 4.012500e-15 -5.000000e+00 -3.972502e-03 5.012500e-15 -6.000000e+00 -3.973609e-03 6.012500e-15 -7.000000e+00 -3.974534e-03 7.012559e-15 -8.000000e+00 -3.975325e-03 7.507360e-14 -9.000000e+00 -3.976015e-03 1.377276e-11 -1.000000e+01 -3.976630e-03 2.499247e-10 -1.100000e+01 -3.977189e-03 1.609820e-09 -1.200000e+01 -3.977706e-03 6.016553e-09 -1.300000e+01 -3.978193e-03 1.626068e-08 -1.400000e+01 -3.978660e-03 3.561776e-08 -1.500000e+01 -3.979115e-03 6.749708e-08 -1.600000e+01 -3.979565e-03 1.152054e-07 -1.700000e+01 -3.980016e-03 1.818167e-07 -1.800000e+01 -3.980472e-03 2.701156e-07 -1.900000e+01 -3.980940e-03 3.825848e-07 -2.000000e+01 -3.981421e-03 5.214173e-07 -1.000000e+00 -2.233789e-03 1.012500e-15 -2.000000e+00 -4.194166e-03 2.012500e-15 -3.000000e+00 -5.903915e-03 3.012500e-15 -4.000000e+00 -7.375917e-03 4.012500e-15 -5.000000e+00 -8.614845e-03 5.012500e-15 -6.000000e+00 -9.616574e-03 6.012500e-15 -7.000000e+00 -1.037170e-02 7.012500e-15 -8.000000e+00 -1.087916e-02 8.012500e-15 -9.000000e+00 -1.116639e-02 9.012500e-15 -1.000000e+01 -1.129310e-02 1.001250e-14 -1.100000e+01 -1.132687e-02 1.101250e-14 -1.200000e+01 -1.132877e-02 1.201250e-14 -1.300000e+01 -1.133029e-02 1.301250e-14 -1.400000e+01 -1.133168e-02 1.401250e-14 -1.500000e+01 -1.133296e-02 1.552664e-14 -1.600000e+01 -1.133416e-02 8.972617e-13 -1.700000e+01 -1.133528e-02 3.711024e-11 -1.800000e+01 -1.133633e-02 3.694794e-10 -1.900000e+01 -1.133732e-02 1.795163e-09 -2.000000e+01 -1.133825e-02 5.772306e-09 -1.000000e+00 -1.131917e-03 1.000000e-15 -2.000000e+00 -1.264181e-03 2.000000e-15 -3.000000e+00 -1.264869e-03 3.000000e-15 -4.000000e+00 -1.265348e-03 4.000606e-15 -5.000000e+00 -1.265721e-03 1.856435e-13 -6.000000e+00 -1.266035e-03 2.583926e-11 -7.000000e+00 -1.266312e-03 3.993707e-10 -8.000000e+00 -1.266565e-03 2.352015e-09 -9.000000e+00 -1.266802e-03 8.305874e-09 -1.000000e+01 -1.267030e-03 2.158991e-08 -1.100000e+01 -1.267258e-03 4.596806e-08 -1.200000e+01 -1.267489e-03 8.525390e-08 -1.300000e+01 -1.267730e-03 1.430727e-07 -1.400000e+01 -1.267986e-03 2.227428e-07 -1.500000e+01 -1.268259e-03 3.272334e-07 -1.600000e+01 -1.268553e-03 4.591655e-07 -1.700000e+01 -1.268872e-03 6.208355e-07 -1.800000e+01 -1.269217e-03 8.142468e-07 -1.900000e+01 -1.269591e-03 1.041145e-06 -2.000000e+01 -1.269996e-03 1.303050e-06 -1.000000e+00 -2.362838e-03 1.000000e-15 -2.000000e+00 -4.024752e-03 2.000000e-15 -3.000000e+00 -4.986194e-03 3.000000e-15 -4.000000e+00 -5.268643e-03 4.000000e-15 -5.000000e+00 -5.272333e-03 5.000000e-15 -6.000000e+00 -5.273779e-03 6.000000e-15 -7.000000e+00 -5.274992e-03 7.000001e-15 -8.000000e+00 -5.276028e-03 2.723094e-14 -9.000000e+00 -5.276934e-03 7.019548e-12 -1.000000e+01 -5.277740e-03 1.594475e-10 -1.100000e+01 -5.278471e-03 1.151564e-09 -1.200000e+01 -5.279145e-03 4.604535e-09 -1.300000e+01 -5.279777e-03 1.300265e-08 -1.400000e+01 -5.280378e-03 2.936335e-08 -1.500000e+01 -5.280958e-03 5.689869e-08 -1.600000e+01 -5.281525e-03 9.877279e-08 -1.700000e+01 -5.282086e-03 1.579600e-07 -1.800000e+01 -5.282646e-03 2.371769e-07 -1.900000e+01 -5.283210e-03 3.388611e-07 -2.000000e+01 -5.283784e-03 4.651762e-07 -1.000000e+00 -2.675656e-03 1.000000e-15 -2.000000e+00 -5.019945e-03 2.000000e-15 -3.000000e+00 -7.062823e-03 3.000000e-15 -4.000000e+00 -8.824272e-03 4.000000e-15 -5.000000e+00 -1.031574e-02 5.000000e-15 -6.000000e+00 -1.153877e-02 6.000000e-15 -7.000000e+00 -1.248684e-02 7.000000e-15 -8.000000e+00 -1.315597e-02 8.000000e-15 -9.000000e+00 -1.356490e-02 9.000000e-15 -1.000000e+01 -1.376763e-02 1.000000e-14 -1.100000e+01 -1.383800e-02 1.100000e-14 -1.200000e+01 -1.384304e-02 1.200000e-14 -1.300000e+01 -1.384486e-02 1.300000e-14 -1.400000e+01 -1.384653e-02 1.400000e-14 -1.500000e+01 -1.384808e-02 1.500002e-14 -1.600000e+01 -1.384952e-02 2.924330e-14 -1.700000e+01 -1.385087e-02 3.389387e-12 -1.800000e+01 -1.385213e-02 7.358076e-11 -1.900000e+01 -1.385332e-02 5.433409e-10 -2.000000e+01 -1.385445e-02 2.250962e-09 -1.000000e+00 -5.832950e-04 1.619318e-11 -2.000000e+00 -6.989393e-04 1.619418e-11 -3.000000e+00 -6.993235e-04 1.619518e-11 -4.000000e+00 -6.995840e-04 1.619618e-11 -5.000000e+00 -6.997860e-04 1.643541e-11 -6.000000e+00 -6.999555e-04 4.668783e-11 -7.000000e+00 -7.001049e-04 4.657439e-10 -8.000000e+00 -7.002417e-04 2.597112e-09 -9.000000e+00 -7.003720e-04 8.988527e-09 -1.000000e+01 -7.005016e-04 2.309388e-08 -1.100000e+01 -7.006360e-04 4.878324e-08 -1.200000e+01 -7.007800e-04 8.995327e-08 -1.300000e+01 -7.009384e-04 1.502916e-07 -1.400000e+01 -7.011150e-04 2.331622e-07 -1.500000e+01 -7.013134e-04 3.415671e-07 -1.600000e+01 -7.015367e-04 4.781513e-07 -1.700000e+01 -7.017875e-04 6.452277e-07 -1.800000e+01 -7.020682e-04 8.448117e-07 -1.900000e+01 -7.023807e-04 1.078657e-06 -2.000000e+01 -7.027267e-04 1.348290e-06 -1.000000e+00 -1.226445e-03 1.619318e-11 -2.000000e+00 -2.101138e-03 1.619418e-11 -3.000000e+00 -2.614233e-03 1.619518e-11 -4.000000e+00 -2.778258e-03 1.619618e-11 -5.000000e+00 -2.784821e-03 1.619718e-11 -6.000000e+00 -2.785605e-03 1.619818e-11 -7.000000e+00 -2.786257e-03 1.619918e-11 -8.000000e+00 -2.786813e-03 1.638294e-11 -9.000000e+00 -2.787298e-03 4.029109e-11 -1.000000e+01 -2.787731e-03 3.814379e-10 -1.100000e+01 -2.788125e-03 2.158625e-09 -1.200000e+01 -2.788491e-03 7.587625e-09 -1.300000e+01 -2.788839e-03 1.974205e-08 -1.400000e+01 -2.789176e-03 4.212897e-08 -1.500000e+01 -2.789511e-03 7.833087e-08 -1.600000e+01 -2.789847e-03 1.317778e-07 -1.700000e+01 -2.790192e-03 2.056287e-07 -1.800000e+01 -2.790549e-03 3.027252e-07 -1.900000e+01 -2.790922e-03 4.255875e-07 -2.000000e+01 -2.791315e-03 5.764323e-07 -1.000000e+00 -1.711050e-03 1.619318e-11 -2.000000e+00 -3.215038e-03 1.619418e-11 -3.000000e+00 -4.527289e-03 1.619518e-11 -4.000000e+00 -5.654309e-03 1.619618e-11 -5.000000e+00 -6.595485e-03 1.619718e-11 -6.000000e+00 -7.343386e-03 1.619818e-11 -7.000000e+00 -7.888909e-03 1.619918e-11 -8.000000e+00 -8.236114e-03 1.620018e-11 -9.000000e+00 -8.417870e-03 1.620118e-11 -1.000000e+01 -8.490039e-03 1.620218e-11 -1.100000e+01 -8.506484e-03 1.620318e-11 -1.200000e+01 -8.507941e-03 1.620418e-11 -1.300000e+01 -8.509093e-03 1.620518e-11 -1.400000e+01 -8.510153e-03 1.620618e-11 -1.500000e+01 -8.511133e-03 1.637184e-11 -1.600000e+01 -8.512044e-03 3.320506e-11 -1.700000e+01 -8.512895e-03 2.610029e-10 -1.800000e+01 -8.513693e-03 1.446589e-09 -1.900000e+01 -8.514447e-03 5.120987e-09 -2.000000e+01 -8.515164e-03 1.349577e-08 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_lg2.standard0000644000175000017500000001167213546075722024163 0ustar carstencarstenV(g) I(d) -1.000000e+00 -5.487017e-06 -2.000000e+00 -5.455733e-05 -3.000000e+00 -1.443980e-04 -4.000000e+00 -2.560554e-04 -5.000000e+00 -3.461238e-04 -6.000000e+00 -4.093760e-04 -7.000000e+00 -4.525605e-04 -8.000000e+00 -4.809726e-04 -9.000000e+00 -4.984787e-04 -1.000000e+01 -5.079381e-04 -1.100000e+01 -5.114804e-04 -1.200000e+01 -5.106971e-04 -1.300000e+01 -5.067779e-04 -1.400000e+01 -5.006133e-04 -1.500000e+01 -4.928693e-04 -1.600000e+01 -4.840441e-04 -1.700000e+01 -4.745101e-04 -1.800000e+01 -4.645451e-04 -1.900000e+01 -4.543556e-04 -2.000000e+01 -4.440949e-04 -1.000000e+00 -5.492463e-06 -2.000000e+00 -5.460539e-05 -3.000000e+00 -1.445366e-04 -4.000000e+00 -2.621513e-04 -5.000000e+00 -3.972502e-04 -6.000000e+00 -5.413423e-04 -7.000000e+00 -6.676593e-04 -8.000000e+00 -7.595630e-04 -9.000000e+00 -8.215824e-04 -1.000000e+01 -8.614845e-04 -1.100000e+01 -8.854179e-04 -1.200000e+01 -8.977741e-04 -1.300000e+01 -9.016918e-04 -1.400000e+01 -8.994475e-04 -1.500000e+01 -8.927147e-04 -1.600000e+01 -8.827353e-04 -1.700000e+01 -8.704377e-04 -1.800000e+01 -8.565191e-04 -1.900000e+01 -8.415052e-04 -2.000000e+01 -8.257925e-04 -1.000000e+00 -5.499995e-06 -2.000000e+00 -5.466379e-05 -3.000000e+00 -1.446790e-04 -4.000000e+00 -2.624125e-04 -5.000000e+00 -3.976630e-04 -6.000000e+00 -5.427911e-04 -7.000000e+00 -6.922216e-04 -8.000000e+00 -8.419930e-04 -9.000000e+00 -9.893694e-04 -1.000000e+01 -1.129310e-03 -1.100000e+01 -1.246561e-03 -1.200000e+01 -1.334697e-03 -1.300000e+01 -1.395127e-03 -1.400000e+01 -1.433206e-03 -1.500000e+01 -1.454534e-03 -1.600000e+01 -1.463600e-03 -1.700000e+01 -1.463712e-03 -1.800000e+01 -1.457268e-03 -1.900000e+01 -1.446016e-03 -2.000000e+01 -1.431244e-03 -1.000000e+00 -4.607813e-06 -2.000000e+00 -7.006423e-05 -3.000000e+00 -1.940431e-04 -4.000000e+00 -3.453925e-04 -5.000000e+00 -4.595769e-04 -6.000000e+00 -5.313458e-04 -7.000000e+00 -5.740652e-04 -8.000000e+00 -5.971579e-04 -9.000000e+00 -6.069533e-04 -1.000000e+01 -6.077627e-04 -1.100000e+01 -6.025483e-04 -1.200000e+01 -5.933559e-04 -1.300000e+01 -5.816030e-04 -1.400000e+01 -5.682737e-04 -1.500000e+01 -5.540512e-04 -1.600000e+01 -5.394091e-04 -1.700000e+01 -5.246738e-04 -1.800000e+01 -5.100681e-04 -1.900000e+01 -4.957419e-04 -2.000000e+01 -4.817935e-04 -1.000000e+00 -4.612571e-06 -2.000000e+00 -7.012661e-05 -3.000000e+00 -1.942285e-04 -4.000000e+00 -3.523119e-04 -5.000000e+00 -5.272333e-04 -6.000000e+00 -7.065357e-04 -7.000000e+00 -8.521796e-04 -8.000000e+00 -9.468966e-04 -9.000000e+00 -1.002462e-03 -1.000000e+01 -1.031574e-03 -1.100000e+01 -1.043002e-03 -1.200000e+01 -1.042520e-03 -1.300000e+01 -1.033990e-03 -1.400000e+01 -1.020050e-03 -1.500000e+01 -1.002533e-03 -1.600000e+01 -9.827211e-04 -1.700000e+01 -9.615230e-04 -1.800000e+01 -9.395817e-04 -1.900000e+01 -9.173533e-04 -2.000000e+01 -8.951601e-04 -1.000000e+00 -4.619188e-06 -2.000000e+00 -7.020277e-05 -3.000000e+00 -1.944199e-04 -4.000000e+00 -3.526600e-04 -5.000000e+00 -5.277740e-04 -6.000000e+00 -7.085448e-04 -7.000000e+00 -8.879189e-04 -8.000000e+00 -1.061658e-03 -9.000000e+00 -1.227374e-03 -1.000000e+01 -1.376763e-03 -1.100000e+01 -1.490678e-03 -1.200000e+01 -1.566629e-03 -1.300000e+01 -1.610903e-03 -1.400000e+01 -1.632012e-03 -1.500000e+01 -1.636979e-03 -1.600000e+01 -1.630812e-03 -1.700000e+01 -1.616967e-03 -1.800000e+01 -1.597833e-03 -1.900000e+01 -1.575085e-03 -2.000000e+01 -1.549918e-03 -1.000000e+00 -6.911398e-06 -2.000000e+00 -4.230165e-05 -3.000000e+00 -1.030984e-04 -4.000000e+00 -1.775210e-04 -5.000000e+00 -2.404567e-04 -6.000000e+00 -2.891047e-04 -7.000000e+00 -3.262222e-04 -8.000000e+00 -3.541609e-04 -9.000000e+00 -3.747531e-04 -1.000000e+01 -3.894560e-04 -1.100000e+01 -3.994436e-04 -1.200000e+01 -4.056662e-04 -1.300000e+01 -4.088942e-04 -1.400000e+01 -4.097508e-04 -1.500000e+01 -4.087400e-04 -1.600000e+01 -4.062686e-04 -1.700000e+01 -4.026645e-04 -1.800000e+01 -3.981915e-04 -1.900000e+01 -3.930616e-04 -2.000000e+01 -3.874451e-04 -1.000000e+00 -6.917829e-06 -2.000000e+00 -4.233808e-05 -3.000000e+00 -1.031973e-04 -4.000000e+00 -1.835801e-04 -5.000000e+00 -2.784822e-04 -6.000000e+00 -3.827742e-04 -7.000000e+00 -4.795388e-04 -8.000000e+00 -5.571967e-04 -9.000000e+00 -6.160369e-04 -1.000000e+01 -6.595486e-04 -1.100000e+01 -6.910476e-04 -1.200000e+01 -7.131431e-04 -1.300000e+01 -7.278459e-04 -1.400000e+01 -7.367185e-04 -1.500000e+01 -7.409878e-04 -1.600000e+01 -7.416249e-04 -1.700000e+01 -7.394027e-04 -1.800000e+01 -7.349388e-04 -1.900000e+01 -7.287282e-04 -2.000000e+01 -7.211684e-04 -1.000000e+00 -6.926636e-06 -2.000000e+00 -4.238190e-05 -3.000000e+00 -1.032976e-04 -4.000000e+00 -1.837625e-04 -5.000000e+00 -2.787731e-04 -6.000000e+00 -3.841649e-04 -7.000000e+00 -4.965204e-04 -8.000000e+00 -6.130807e-04 -9.000000e+00 -7.316536e-04 -1.000000e+01 -8.490039e-04 -1.100000e+01 -9.556243e-04 -1.200000e+01 -1.044681e-03 -1.300000e+01 -1.114037e-03 -1.400000e+01 -1.165328e-03 -1.500000e+01 -1.201701e-03 -1.600000e+01 -1.226289e-03 -1.700000e+01 -1.241686e-03 -1.800000e+01 -1.249923e-03 -1.900000e+01 -1.252563e-03 -2.000000e+01 -1.250818e-03 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_corsrd1.standard0000644000175000017500000001167213546075722025054 0ustar carstencarstenV(d) I(d) -1.000000e+00 -1.203453e-04 -2.000000e+00 -1.622652e-04 -3.000000e+00 -1.622874e-04 -4.000000e+00 -1.622998e-04 -5.000000e+00 -1.623090e-04 -6.000000e+00 -1.623167e-04 -7.000000e+00 -1.623234e-04 -8.000000e+00 -1.623294e-04 -9.000000e+00 -1.623349e-04 -1.000000e+01 -1.623400e-04 -1.100000e+01 -1.623449e-04 -1.200000e+01 -1.623494e-04 -1.300000e+01 -1.623538e-04 -1.400000e+01 -1.623579e-04 -1.500000e+01 -1.623619e-04 -1.600000e+01 -1.623657e-04 -1.700000e+01 -1.623694e-04 -1.800000e+01 -1.623730e-04 -1.900000e+01 -1.623765e-04 -2.000000e+01 -1.623799e-04 -1.000000e+00 -1.809063e-04 -2.000000e+00 -3.429863e-04 -3.000000e+00 -4.796184e-04 -4.000000e+00 -5.774106e-04 -5.000000e+00 -6.136568e-04 -6.000000e+00 -6.139745e-04 -7.000000e+00 -6.140078e-04 -8.000000e+00 -6.140346e-04 -9.000000e+00 -6.140571e-04 -1.000000e+01 -6.140764e-04 -1.100000e+01 -6.140936e-04 -1.200000e+01 -6.141092e-04 -1.300000e+01 -6.141235e-04 -1.400000e+01 -6.141369e-04 -1.500000e+01 -6.141494e-04 -1.600000e+01 -6.141613e-04 -1.700000e+01 -6.141726e-04 -1.800000e+01 -6.141835e-04 -1.900000e+01 -6.141939e-04 -2.000000e+01 -6.142039e-04 -1.000000e+00 -1.989812e-04 -2.000000e+00 -3.929189e-04 -3.000000e+00 -5.815321e-04 -4.000000e+00 -7.641981e-04 -5.000000e+00 -9.399577e-04 -6.000000e+00 -1.107426e-03 -7.000000e+00 -1.264587e-03 -8.000000e+00 -1.408391e-03 -9.000000e+00 -1.533996e-03 -1.000000e+01 -1.633783e-03 -1.100000e+01 -1.698360e-03 -1.200000e+01 -1.725317e-03 -1.300000e+01 -1.728602e-03 -1.400000e+01 -1.728662e-03 -1.500000e+01 -1.728715e-03 -1.600000e+01 -1.728762e-03 -1.700000e+01 -1.728805e-03 -1.800000e+01 -1.728843e-03 -1.900000e+01 -1.728879e-03 -2.000000e+01 -1.728911e-03 -1.000000e+00 -1.468271e-04 -2.000000e+00 -2.013246e-04 -3.000000e+00 -2.013487e-04 -4.000000e+00 -2.013639e-04 -5.000000e+00 -2.013751e-04 -6.000000e+00 -2.013844e-04 -7.000000e+00 -2.013924e-04 -8.000000e+00 -2.013997e-04 -9.000000e+00 -2.014063e-04 -1.000000e+01 -2.014125e-04 -1.100000e+01 -2.014183e-04 -1.200000e+01 -2.014238e-04 -1.300000e+01 -2.014291e-04 -1.400000e+01 -2.014341e-04 -1.500000e+01 -2.014389e-04 -1.600000e+01 -2.014435e-04 -1.700000e+01 -2.014480e-04 -1.800000e+01 -2.014523e-04 -1.900000e+01 -2.014564e-04 -2.000000e+01 -2.014605e-04 -1.000000e+00 -2.052445e-04 -2.000000e+00 -3.938116e-04 -3.000000e+00 -5.593785e-04 -4.000000e+00 -6.889684e-04 -5.000000e+00 -7.536999e-04 -6.000000e+00 -7.564306e-04 -7.000000e+00 -7.564728e-04 -8.000000e+00 -7.565064e-04 -9.000000e+00 -7.565340e-04 -1.000000e+01 -7.565577e-04 -1.100000e+01 -7.565785e-04 -1.200000e+01 -7.565973e-04 -1.300000e+01 -7.566145e-04 -1.400000e+01 -7.566306e-04 -1.500000e+01 -7.566456e-04 -1.600000e+01 -7.566598e-04 -1.700000e+01 -7.566733e-04 -1.800000e+01 -7.566863e-04 -1.900000e+01 -7.566987e-04 -2.000000e+01 -7.567106e-04 -1.000000e+00 -2.137870e-04 -2.000000e+00 -4.234311e-04 -3.000000e+00 -6.287521e-04 -4.000000e+00 -8.292666e-04 -5.000000e+00 -1.024203e-03 -6.000000e+00 -1.212436e-03 -7.000000e+00 -1.392345e-03 -8.000000e+00 -1.561509e-03 -9.000000e+00 -1.716119e-03 -1.000000e+01 -1.849837e-03 -1.100000e+01 -1.952321e-03 -1.200000e+01 -2.011587e-03 -1.300000e+01 -2.028454e-03 -1.400000e+01 -2.028572e-03 -1.500000e+01 -2.028638e-03 -1.600000e+01 -2.028696e-03 -1.700000e+01 -2.028748e-03 -1.800000e+01 -2.028795e-03 -1.900000e+01 -2.028838e-03 -2.000000e+01 -2.028878e-03 -1.000000e+00 -9.304844e-05 -2.000000e+00 -1.265542e-04 -3.000000e+00 -1.266459e-04 -4.000000e+00 -1.266556e-04 -5.000000e+00 -1.266630e-04 -6.000000e+00 -1.266690e-04 -7.000000e+00 -1.266743e-04 -8.000000e+00 -1.266791e-04 -9.000000e+00 -1.266834e-04 -1.000000e+01 -1.266875e-04 -1.100000e+01 -1.266913e-04 -1.200000e+01 -1.266949e-04 -1.300000e+01 -1.266983e-04 -1.400000e+01 -1.267016e-04 -1.500000e+01 -1.267047e-04 -1.600000e+01 -1.267078e-04 -1.700000e+01 -1.267107e-04 -1.800000e+01 -1.267135e-04 -1.900000e+01 -1.267162e-04 -2.000000e+01 -1.267189e-04 -1.000000e+00 -1.489649e-04 -2.000000e+00 -2.781192e-04 -3.000000e+00 -3.815273e-04 -4.000000e+00 -4.477781e-04 -5.000000e+00 -4.662788e-04 -6.000000e+00 -4.663788e-04 -7.000000e+00 -4.664035e-04 -8.000000e+00 -4.664237e-04 -9.000000e+00 -4.664407e-04 -1.000000e+01 -4.664555e-04 -1.100000e+01 -4.664688e-04 -1.200000e+01 -4.664808e-04 -1.300000e+01 -4.664919e-04 -1.400000e+01 -4.665023e-04 -1.500000e+01 -4.665121e-04 -1.600000e+01 -4.665214e-04 -1.700000e+01 -4.665302e-04 -1.800000e+01 -4.665387e-04 -1.900000e+01 -4.665468e-04 -2.000000e+01 -4.665546e-04 -1.000000e+00 -1.763550e-04 -2.000000e+00 -3.465767e-04 -3.000000e+00 -5.102995e-04 -4.000000e+00 -6.667726e-04 -5.000000e+00 -8.148621e-04 -6.000000e+00 -9.529304e-04 -7.000000e+00 -1.078568e-03 -8.000000e+00 -1.188116e-03 -9.000000e+00 -1.276120e-03 -1.000000e+01 -1.336107e-03 -1.100000e+01 -1.365954e-03 -1.200000e+01 -1.374071e-03 -1.300000e+01 -1.374392e-03 -1.400000e+01 -1.374436e-03 -1.500000e+01 -1.374476e-03 -1.600000e+01 -1.374511e-03 -1.700000e+01 -1.374543e-03 -1.800000e+01 -1.374573e-03 -1.900000e+01 -1.374600e-03 -2.000000e+01 -1.374626e-03 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/acFreq.standard0000644000175000017500000000711113546075722023711 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 5.43846446179998e-13 4.57908347333383e-13 1.3069665461906e-13 1258.925 5.4384650807587e-13 4.57908464554379e-13 1.30696748505527e-13 1584.893 5.43846461083932e-13 4.57908337006292e-13 1.30696720591892e-13 1995.262 5.43846459177461e-13 4.57908411846405e-13 1.30696670921676e-13 2511.886 5.43846477355508e-13 4.57908411709284e-13 1.30696659067503e-13 3162.278 5.43846335130416e-13 4.5790825844224e-13 1.30696645470146e-13 3981.072 5.4384631192074e-13 4.57908194783431e-13 1.30696666969292e-13 5011.872 5.43846520210658e-13 4.57908277335937e-13 1.30696664681974e-13 6309.573 5.43846542450687e-13 4.57908407910214e-13 1.30696668383617e-13 7943.282 5.4384637399246e-13 4.57908360603785e-13 1.30696673215932e-13 10000 5.43846446179998e-13 4.57908347333383e-13 1.3069665461906e-13 12589.25 5.4384650807587e-13 4.57908464554379e-13 1.30696748505527e-13 15848.93 5.43846461083932e-13 4.57908337006292e-13 1.30696720591892e-13 19952.62 5.43846459177461e-13 4.57908411846404e-13 1.30696670921676e-13 25118.86 5.43846477355508e-13 4.57908411709284e-13 1.30696659067503e-13 31622.78 5.43846335130416e-13 4.5790825844224e-13 1.30696645470146e-13 39810.72 5.4384631192074e-13 4.57908194783431e-13 1.30696666969292e-13 50118.72 5.43846520210658e-13 4.57908277335937e-13 1.30696664681974e-13 63095.73 5.43846542450687e-13 4.57908407910214e-13 1.30696668383617e-13 79432.82 5.4384637399246e-13 4.57908360603785e-13 1.30696673215932e-13 100000 5.43846446179998e-13 4.57908347333383e-13 1.3069665461906e-13 125892.5 5.4384650807587e-13 4.57908464554379e-13 1.30696748505527e-13 158489.3 5.43846461083932e-13 4.57908337006292e-13 1.30696720591892e-13 199526.2 5.43846459177461e-13 4.57908411846405e-13 1.30696670921676e-13 251188.6 5.43846477355508e-13 4.57908411709284e-13 1.30696659067503e-13 316227.8 5.43846335130416e-13 4.5790825844224e-13 1.30696645470146e-13 398107.2 5.4384631192074e-13 4.57908194783431e-13 1.30696666969292e-13 501187.2 5.43846520210658e-13 4.57908277335937e-13 1.30696664681974e-13 630957.3 5.43846542450687e-13 4.57908407910214e-13 1.30696668383617e-13 794328.2 5.4384637399246e-13 4.57908360603785e-13 1.30696673215932e-13 1000000 5.43846446179998e-13 4.57908347333383e-13 1.3069665461906e-13 1258925 5.4384650807587e-13 4.57908464554379e-13 1.30696748505527e-13 1584893 5.43846461083932e-13 4.57908337006291e-13 1.30696620171899e-13 1995262 5.43846379411023e-13 4.57908332079966e-13 1.30696670921676e-13 2511886 5.43846413994773e-13 4.57908284987814e-13 1.30696659067503e-13 3162278 5.43846335130416e-13 4.57908157783827e-13 1.30696595140939e-13 3981072 5.4384631192074e-13 4.57908194783431e-13 1.30696587013469e-13 5011872 5.43846202654776e-13 4.57907959780056e-13 1.30696569415209e-13 6309573 5.43845785719876e-13 4.57907903423007e-13 1.30696491813095e-13 7943282 5.43845572535616e-13 4.57907559146941e-13 1.30696392706036e-13 10000000 5.43845013785511e-13 4.57907074093839e-13 1.30696224900713e-13 12589250 5.43844232492356e-13 4.57906568234784e-13 1.30695989977689e-13 15848930 5.43842845964204e-13 4.57905223986526e-13 1.30695615971975e-13 19952620 5.43840715993908e-13 4.57903466327234e-13 1.30694916060035e-13 25118860 5.43837290048939e-13 4.57900618338884e-13 1.306939345559e-13 31622780 5.43831739660474e-13 4.578959277866e-13 1.30692266829163e-13 39810720 5.43823524511328e-13 4.57888605606919e-13 1.30689710812734e-13 50118720 5.43810001284286e-13 4.57877474415432e-13 1.30685709004062e-13 63095730 5.43788526421851e-13 4.57859220407505e-13 1.30679288799327e-13 79432820 5.43754807548019e-13 4.57830619289906e-13 1.30669123136915e-13 100000000 5.43701137716956e-13 4.5778516140743e-13 1.30652998418169e-13 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_she.standard0000644000175000017500000001167213546075722024256 0ustar carstencarstenV(d) I(d) -1.000000e+00 -1.248199e-03 -2.000000e+00 -1.435347e-03 -3.000000e+00 -1.437808e-03 -4.000000e+00 -1.439452e-03 -5.000000e+00 -1.440669e-03 -6.000000e+00 -1.441645e-03 -7.000000e+00 -1.442468e-03 -8.000000e+00 -1.443184e-03 -9.000000e+00 -1.443820e-03 -1.000000e+01 -1.444393e-03 -1.100000e+01 -1.444915e-03 -1.200000e+01 -1.445395e-03 -1.300000e+01 -1.445837e-03 -1.400000e+01 -1.446248e-03 -1.500000e+01 -1.446632e-03 -1.600000e+01 -1.446990e-03 -1.700000e+01 -1.447327e-03 -1.800000e+01 -1.447643e-03 -1.900000e+01 -1.447941e-03 -2.000000e+01 -1.448223e-03 -1.000000e+00 -2.568755e-03 -2.000000e+00 -4.091180e-03 -3.000000e+00 -4.972066e-03 -4.000000e+00 -5.379145e-03 -5.000000e+00 -5.453006e-03 -6.000000e+00 -5.453968e-03 -7.000000e+00 -5.454202e-03 -8.000000e+00 -5.453922e-03 -9.000000e+00 -5.453236e-03 -1.000000e+01 -5.452230e-03 -1.100000e+01 -5.450973e-03 -1.200000e+01 -5.449518e-03 -1.300000e+01 -5.447905e-03 -1.400000e+01 -5.446163e-03 -1.500000e+01 -5.444316e-03 -1.600000e+01 -5.442380e-03 -1.700000e+01 -5.440370e-03 -1.800000e+01 -5.438295e-03 -1.900000e+01 -5.436166e-03 -2.000000e+01 -5.433989e-03 -1.000000e+00 -3.220908e-03 -2.000000e+00 -5.536347e-03 -3.000000e+00 -7.267370e-03 -4.000000e+00 -8.610385e-03 -5.000000e+00 -9.681907e-03 -6.000000e+00 -1.055368e-02 -7.000000e+00 -1.127176e-02 -8.000000e+00 -1.186673e-02 -9.000000e+00 -1.235926e-02 -1.000000e+01 -1.276355e-02 -1.100000e+01 -1.308949e-02 -1.200000e+01 -1.334443e-02 -1.300000e+01 -1.353480e-02 -1.400000e+01 -1.366748e-02 -1.500000e+01 -1.375087e-02 -1.600000e+01 -1.379500e-02 -1.700000e+01 -1.381067e-02 -1.800000e+01 -1.380723e-02 -1.900000e+01 -1.379776e-02 -2.000000e+01 -1.378812e-02 -1.000000e+00 -1.645608e-03 -2.000000e+00 -1.847859e-03 -3.000000e+00 -1.850618e-03 -4.000000e+00 -1.852387e-03 -5.000000e+00 -1.853627e-03 -6.000000e+00 -1.854569e-03 -7.000000e+00 -1.855322e-03 -8.000000e+00 -1.855943e-03 -9.000000e+00 -1.856465e-03 -1.000000e+01 -1.856909e-03 -1.100000e+01 -1.857291e-03 -1.200000e+01 -1.857620e-03 -1.300000e+01 -1.857904e-03 -1.400000e+01 -1.858149e-03 -1.500000e+01 -1.858361e-03 -1.600000e+01 -1.858541e-03 -1.700000e+01 -1.858695e-03 -1.800000e+01 -1.858825e-03 -1.900000e+01 -1.858932e-03 -2.000000e+01 -1.859019e-03 -1.000000e+00 -3.299202e-03 -2.000000e+00 -5.139517e-03 -3.000000e+00 -6.198046e-03 -4.000000e+00 -6.722899e-03 -5.000000e+00 -6.849899e-03 -6.000000e+00 -6.849026e-03 -7.000000e+00 -6.847167e-03 -8.000000e+00 -6.844741e-03 -9.000000e+00 -6.841860e-03 -1.000000e+01 -6.838615e-03 -1.100000e+01 -6.835081e-03 -1.200000e+01 -6.831319e-03 -1.300000e+01 -6.827375e-03 -1.400000e+01 -6.823286e-03 -1.500000e+01 -6.819078e-03 -1.600000e+01 -6.814772e-03 -1.700000e+01 -6.810386e-03 -1.800000e+01 -6.805931e-03 -1.900000e+01 -6.801419e-03 -2.000000e+01 -6.796858e-03 -1.000000e+00 -3.781424e-03 -2.000000e+00 -6.399343e-03 -3.000000e+00 -8.308838e-03 -4.000000e+00 -9.767922e-03 -5.000000e+00 -1.092181e-02 -6.000000e+00 -1.185718e-02 -7.000000e+00 -1.262877e-02 -8.000000e+00 -1.327282e-02 -9.000000e+00 -1.381411e-02 -1.000000e+01 -1.426999e-02 -1.100000e+01 -1.465279e-02 -1.200000e+01 -1.497135e-02 -1.300000e+01 -1.523215e-02 -1.400000e+01 -1.544022e-02 -1.500000e+01 -1.559994e-02 -1.600000e+01 -1.571580e-02 -1.700000e+01 -1.579302e-02 -1.800000e+01 -1.583778e-02 -1.900000e+01 -1.585700e-02 -2.000000e+01 -1.585705e-02 -1.000000e+00 -8.960024e-04 -2.000000e+00 -1.077134e-03 -3.000000e+00 -1.079180e-03 -4.000000e+00 -1.080554e-03 -5.000000e+00 -1.081598e-03 -6.000000e+00 -1.082458e-03 -7.000000e+00 -1.083199e-03 -8.000000e+00 -1.083858e-03 -9.000000e+00 -1.084456e-03 -1.000000e+01 -1.085006e-03 -1.100000e+01 -1.085516e-03 -1.200000e+01 -1.085994e-03 -1.300000e+01 -1.086443e-03 -1.400000e+01 -1.086869e-03 -1.500000e+01 -1.087272e-03 -1.600000e+01 -1.087657e-03 -1.700000e+01 -1.088026e-03 -1.800000e+01 -1.088378e-03 -1.900000e+01 -1.088717e-03 -2.000000e+01 -1.089043e-03 -1.000000e+00 -1.833887e-03 -2.000000e+00 -2.992450e-03 -3.000000e+00 -3.673125e-03 -4.000000e+00 -3.972517e-03 -5.000000e+00 -4.020957e-03 -6.000000e+00 -4.023020e-03 -7.000000e+00 -4.024474e-03 -8.000000e+00 -4.025504e-03 -9.000000e+00 -4.026207e-03 -1.000000e+01 -4.026655e-03 -1.100000e+01 -4.026907e-03 -1.200000e+01 -4.027002e-03 -1.300000e+01 -4.026972e-03 -1.400000e+01 -4.026841e-03 -1.500000e+01 -4.026624e-03 -1.600000e+01 -4.026336e-03 -1.700000e+01 -4.025987e-03 -1.800000e+01 -4.025584e-03 -1.900000e+01 -4.025136e-03 -2.000000e+01 -4.024646e-03 -1.000000e+00 -2.527086e-03 -2.000000e+00 -4.428809e-03 -3.000000e+00 -5.895544e-03 -4.000000e+00 -7.055211e-03 -5.000000e+00 -7.989179e-03 -6.000000e+00 -8.749542e-03 -7.000000e+00 -9.370143e-03 -8.000000e+00 -9.873125e-03 -9.000000e+00 -1.027310e-02 -1.000000e+01 -1.058030e-02 -1.100000e+01 -1.080356e-02 -1.200000e+01 -1.095303e-02 -1.300000e+01 -1.104184e-02 -1.400000e+01 -1.108561e-02 -1.500000e+01 -1.110014e-02 -1.600000e+01 -1.109874e-02 -1.700000e+01 -1.109364e-02 -1.800000e+01 -1.108833e-02 -1.900000e+01 -1.108289e-02 -2.000000e+01 -1.107733e-02 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/noise2.standard0000644000175000017500000000424713546075722023716 0ustar carstencarstenFreq N(d) 1000 8.490341e-21 1258.925 6.440582e-21 1584.893 4.885681e-21 1995.262 3.706168e-21 2511.886 2.811416e-21 3162.278 2.132677e-21 3981.072 1.617801e-21 5011.872 1.227228e-21 6309.573 9.309474e-22 7943.282 7.061958e-22 10000 5.357043e-22 12589.25 4.063733e-22 15848.93 3.082657e-22 19952.62 2.338434e-22 25118.86 1.773884e-22 31622.78 1.345628e-22 39810.72 1.020764e-22 50118.72 7.743283e-23 63095.73 5.873881e-23 79432.82 4.455794e-23 100000 3.380066e-23 125892.5 2.564042e-23 158489.3 1.945025e-23 199526.2 1.475452e-23 251188.6 1.119245e-23 316227.8 8.490341e-24 398107.2 6.440582e-24 501187.2 4.885681e-24 630957.3 3.706168e-24 794328.2 2.811416e-24 1000000 2.132677e-24 1258925 1.617801e-24 1584893 1.227228e-24 1995262 9.309474e-25 2511886 7.061958e-25 3162278 5.357043e-25 3981072 4.063733e-25 5011872 3.082656e-25 6309573 2.338434e-25 7943282 1.773884e-25 10000000 1.345628e-25 12589250 1.020763e-25 15848930 7.743282e-26 19952620 5.87388e-26 25118860 4.455793e-26 31622780 3.380064e-26 39810720 2.56404e-26 50118720 1.945023e-26 63095730 1.47545e-26 79432820 1.119242e-26 100000000 8.490305e-27 1000 3.402915e-20 1258.925 2.581375e-20 1584.893 1.958173e-20 1995.262 1.485426e-20 2511.886 1.126811e-20 3162.278 8.547737e-21 3981.072 6.484122e-21 5011.872 4.918709e-21 6309.573 3.731222e-21 7943.282 2.830422e-21 10000 2.147094e-21 12589.25 1.628738e-21 15848.93 1.235524e-21 19952.62 9.372407e-22 25118.86 7.109698e-22 31622.78 5.393257e-22 39810.72 4.091204e-22 50118.72 3.103496e-22 63095.73 2.354242e-22 79432.82 1.785875e-22 100000 1.354725e-22 125892.5 1.027664e-22 158489.3 7.795629e-23 199526.2 5.913589e-23 251188.6 4.485916e-23 316227.8 3.402915e-23 398107.2 2.581375e-23 501187.2 1.958173e-23 630957.3 1.485426e-23 794328.2 1.126811e-23 1000000 8.547737e-24 1258925 6.484122e-24 1584893 4.918709e-24 1995262 3.731222e-24 2511886 2.830422e-24 3162278 2.147094e-24 3981072 1.628738e-24 5011872 1.235524e-24 6309573 9.372407e-25 7943282 7.109698e-25 10000000 5.393257e-25 12589250 4.091204e-25 15848930 3.103495e-25 19952620 2.354242e-25 25118860 1.785875e-25 31622780 1.354724e-25 39810720 1.027663e-25 50118720 7.795615e-26 63095730 5.913572e-26 79432820 4.485896e-26 100000000 3.402891e-26 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/acVg_LOVER.standard0000644000175000017500000000264613546075722024347 0ustar carstencarstenV(g) g(d,g) g(d,d) c(g,s) c(g,d) -1 2.381478e-04 5.112603e-08 1.00603927238952e-12 1.95309752880968e-13 -2 6.280446e-04 1.094652e-04 1.06717928894345e-12 7.2553519644182e-13 -3 4.724781e-04 7.214749e-04 1.02074827637205e-12 1.02168727662629e-12 -4 3.382147e-04 1.182747e-03 1.00235327139152e-12 1.08496329375855e-12 -5 2.363051e-04 1.512078e-03 9.9557146955532e-13 1.10690929970052e-12 -6 1.592312e-04 1.742774e-03 9.92190568639926e-13 1.11724730249958e-12 -7 1.012778e-04 1.899640e-03 9.89842968004303e-13 1.123350304152e-12 -8 5.804490e-05 2.001318e-03 9.87726467431251e-13 1.12772830533736e-12 -9 2.607764e-05 2.061909e-03 9.85572966848181e-13 1.13136130632101e-12 -10 2.670475e-06 2.092080e-03 9.83314066236574e-13 1.13465530721288e-12 -1 2.054277e-04 6.391517e-08 1.00783327287526e-12 1.97342653431385e-13 -2 3.822190e-04 1.349016e-04 1.05001128429514e-12 7.49111402825181e-13 -3 3.049291e-04 5.129928e-04 1.00028127083052e-12 1.02170327663062e-12 -4 2.383916e-04 8.144732e-04 9.81983365876281e-13 1.088695294769e-12 -5 1.848311e-04 1.049127e-03 9.74547463862978e-13 1.11529530197107e-12 -6 1.412825e-04 1.230659e-03 9.7099406290088e-13 1.12863330558239e-12 -7 1.057737e-04 1.369470e-03 9.6900196236151e-13 1.13637730767911e-12 -8 7.688987e-05 1.473742e-03 9.67633761991063e-13 1.14144930905238e-12 -9 5.350831e-05 1.550086e-03 9.66479061678423e-13 1.14514931005417e-12 -10 3.469082e-05 1.603909e-03 9.6535626137442e-13 1.14811131085615e-12 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_Id1_vb0_jd.standard0000644000175000017500000001167213546075722025340 0ustar carstencarstenV(d) I(d) -1.000000e+00 -8.320516e-04 -2.000000e+00 -9.524288e-04 -3.000000e+00 -9.529480e-04 -4.000000e+00 -9.533076e-04 -5.000000e+00 -9.535873e-04 -6.000000e+00 -9.538227e-04 -7.000000e+00 -9.540299e-04 -8.000000e+00 -9.542174e-04 -9.000000e+00 -9.543902e-04 -1.000000e+01 -9.545513e-04 -1.100000e+01 -9.547030e-04 -1.200000e+01 -9.548467e-04 -1.300000e+01 -9.549837e-04 -1.400000e+01 -9.551148e-04 -1.500000e+01 -9.552406e-04 -1.600000e+01 -9.553620e-04 -1.700000e+01 -9.554791e-04 -1.800000e+01 -9.555926e-04 -1.900000e+01 -9.557027e-04 -2.000000e+01 -9.558097e-04 -1.000000e+00 -1.775374e-03 -2.000000e+00 -3.030177e-03 -3.000000e+00 -3.755070e-03 -4.000000e+00 -3.968650e-03 -5.000000e+00 -3.972502e-03 -6.000000e+00 -3.973609e-03 -7.000000e+00 -3.974534e-03 -8.000000e+00 -3.975325e-03 -9.000000e+00 -3.976015e-03 -1.000000e+01 -3.976630e-03 -1.100000e+01 -3.977188e-03 -1.200000e+01 -3.977700e-03 -1.300000e+01 -3.978177e-03 -1.400000e+01 -3.978624e-03 -1.500000e+01 -3.979047e-03 -1.600000e+01 -3.979449e-03 -1.700000e+01 -3.979834e-03 -1.800000e+01 -3.980202e-03 -1.900000e+01 -3.980557e-03 -2.000000e+01 -3.980900e-03 -1.000000e+00 -2.233789e-03 -2.000000e+00 -4.194166e-03 -3.000000e+00 -5.903915e-03 -4.000000e+00 -7.375917e-03 -5.000000e+00 -8.614845e-03 -6.000000e+00 -9.616574e-03 -7.000000e+00 -1.037170e-02 -8.000000e+00 -1.087916e-02 -9.000000e+00 -1.116639e-02 -1.000000e+01 -1.129310e-02 -1.100000e+01 -1.132687e-02 -1.200000e+01 -1.132877e-02 -1.300000e+01 -1.133029e-02 -1.400000e+01 -1.133168e-02 -1.500000e+01 -1.133296e-02 -1.600000e+01 -1.133416e-02 -1.700000e+01 -1.133528e-02 -1.800000e+01 -1.133633e-02 -1.900000e+01 -1.133732e-02 -2.000000e+01 -1.133825e-02 -1.000000e+00 -1.131917e-03 -2.000000e+00 -1.264181e-03 -3.000000e+00 -1.264869e-03 -4.000000e+00 -1.265348e-03 -5.000000e+00 -1.265721e-03 -6.000000e+00 -1.266035e-03 -7.000000e+00 -1.266312e-03 -8.000000e+00 -1.266562e-03 -9.000000e+00 -1.266793e-03 -1.000000e+01 -1.267009e-03 -1.100000e+01 -1.267212e-03 -1.200000e+01 -1.267404e-03 -1.300000e+01 -1.267587e-03 -1.400000e+01 -1.267763e-03 -1.500000e+01 -1.267931e-03 -1.600000e+01 -1.268094e-03 -1.700000e+01 -1.268251e-03 -1.800000e+01 -1.268403e-03 -1.900000e+01 -1.268550e-03 -2.000000e+01 -1.268693e-03 -1.000000e+00 -2.362838e-03 -2.000000e+00 -4.024752e-03 -3.000000e+00 -4.986194e-03 -4.000000e+00 -5.268643e-03 -5.000000e+00 -5.272333e-03 -6.000000e+00 -5.273779e-03 -7.000000e+00 -5.274992e-03 -8.000000e+00 -5.276028e-03 -9.000000e+00 -5.276934e-03 -1.000000e+01 -5.277740e-03 -1.100000e+01 -5.278470e-03 -1.200000e+01 -5.279141e-03 -1.300000e+01 -5.279764e-03 -1.400000e+01 -5.280349e-03 -1.500000e+01 -5.280901e-03 -1.600000e+01 -5.281426e-03 -1.700000e+01 -5.281928e-03 -1.800000e+01 -5.282409e-03 -1.900000e+01 -5.282872e-03 -2.000000e+01 -5.283319e-03 -1.000000e+00 -2.675656e-03 -2.000000e+00 -5.019945e-03 -3.000000e+00 -7.062823e-03 -4.000000e+00 -8.824272e-03 -5.000000e+00 -1.031574e-02 -6.000000e+00 -1.153877e-02 -7.000000e+00 -1.248684e-02 -8.000000e+00 -1.315597e-02 -9.000000e+00 -1.356490e-02 -1.000000e+01 -1.376763e-02 -1.100000e+01 -1.383800e-02 -1.200000e+01 -1.384304e-02 -1.300000e+01 -1.384486e-02 -1.400000e+01 -1.384653e-02 -1.500000e+01 -1.384808e-02 -1.600000e+01 -1.384952e-02 -1.700000e+01 -1.385087e-02 -1.800000e+01 -1.385213e-02 -1.900000e+01 -1.385332e-02 -2.000000e+01 -1.385444e-02 -1.000000e+00 -5.832950e-04 -2.000000e+00 -6.989393e-04 -3.000000e+00 -6.993235e-04 -4.000000e+00 -6.995840e-04 -5.000000e+00 -6.997860e-04 -6.000000e+00 -6.999555e-04 -7.000000e+00 -7.001045e-04 -8.000000e+00 -7.002391e-04 -9.000000e+00 -7.003631e-04 -1.000000e+01 -7.004786e-04 -1.100000e+01 -7.005872e-04 -1.200000e+01 -7.006901e-04 -1.300000e+01 -7.007881e-04 -1.400000e+01 -7.008818e-04 -1.500000e+01 -7.009719e-04 -1.600000e+01 -7.010586e-04 -1.700000e+01 -7.011423e-04 -1.800000e+01 -7.012234e-04 -1.900000e+01 -7.013021e-04 -2.000000e+01 -7.013785e-04 -1.000000e+00 -1.226445e-03 -2.000000e+00 -2.101138e-03 -3.000000e+00 -2.614233e-03 -4.000000e+00 -2.778258e-03 -5.000000e+00 -2.784821e-03 -6.000000e+00 -2.785605e-03 -7.000000e+00 -2.786257e-03 -8.000000e+00 -2.786813e-03 -9.000000e+00 -2.787298e-03 -1.000000e+01 -2.787731e-03 -1.100000e+01 -2.788123e-03 -1.200000e+01 -2.788484e-03 -1.300000e+01 -2.788819e-03 -1.400000e+01 -2.789134e-03 -1.500000e+01 -2.789432e-03 -1.600000e+01 -2.789716e-03 -1.700000e+01 -2.789986e-03 -1.800000e+01 -2.790246e-03 -1.900000e+01 -2.790497e-03 -2.000000e+01 -2.790738e-03 -1.000000e+00 -1.711050e-03 -2.000000e+00 -3.215038e-03 -3.000000e+00 -4.527289e-03 -4.000000e+00 -5.654309e-03 -5.000000e+00 -6.595485e-03 -6.000000e+00 -7.343386e-03 -7.000000e+00 -7.888909e-03 -8.000000e+00 -8.236114e-03 -9.000000e+00 -8.417870e-03 -1.000000e+01 -8.490039e-03 -1.100000e+01 -8.506484e-03 -1.200000e+01 -8.507941e-03 -1.300000e+01 -8.509093e-03 -1.400000e+01 -8.510153e-03 -1.500000e+01 -8.511133e-03 -1.600000e+01 -8.512044e-03 -1.700000e+01 -8.512895e-03 -1.800000e+01 -8.513692e-03 -1.900000e+01 -8.514442e-03 -2.000000e+01 -8.515151e-03 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_NF_RTH0W.standard0000644000175000017500000000044213546075722024717 0ustar carstencarstenV(d) I(d) -1.000000e+00 -2.206257e-03 -3.000000e+00 -5.399355e-03 -5.000000e+00 -7.102485e-03 -7.000000e+00 -7.724843e-03 -9.000000e+00 -7.645141e-03 -1.100000e+01 -7.299899e-03 -1.300000e+01 -6.960064e-03 -1.500000e+01 -6.665935e-03 -1.700000e+01 -6.408090e-03 -1.900000e+01 -6.179498e-03 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/noise1.standard0000644000175000017500000000425113546075722023710 0ustar carstencarstenFreq N(d) 1000 2.669153e-23 1258.925 2.669153e-23 1584.893 2.669153e-23 1995.262 2.669153e-23 2511.886 2.669153e-23 3162.278 2.669153e-23 3981.072 2.669153e-23 5011.872 2.669153e-23 6309.573 2.669153e-23 7943.282 2.669153e-23 10000 2.669153e-23 12589.25 2.669153e-23 15848.93 2.669153e-23 19952.62 2.669153e-23 25118.86 2.669153e-23 31622.78 2.669153e-23 39810.72 2.669153e-23 50118.72 2.669153e-23 63095.73 2.669153e-23 79432.82 2.669153e-23 100000 2.669153e-23 125892.5 2.669153e-23 158489.3 2.669153e-23 199526.2 2.669153e-23 251188.6 2.669153e-23 316227.8 2.669153e-23 398107.2 2.669153e-23 501187.2 2.669153e-23 630957.3 2.669153e-23 794328.2 2.669153e-23 1000000 2.669153e-23 1258925 2.669153e-23 1584893 2.669153e-23 1995262 2.669153e-23 2511886 2.669153e-23 3162278 2.669153e-23 3981072 2.669153e-23 5011872 2.669153e-23 6309573 2.669154e-23 7943282 2.669155e-23 10000000 2.669156e-23 12589250 2.669158e-23 15848930 2.669161e-23 19952620 2.669166e-23 25118860 2.669174e-23 31622780 2.669187e-23 39810720 2.669207e-23 50118720 2.669238e-23 63095730 2.669288e-23 79432820 2.669368e-23 100000000 2.669494e-23 1000 3.467744e-23 1258.925 3.467744e-23 1584.893 3.467744e-23 1995.262 3.467744e-23 2511.886 3.467744e-23 3162.278 3.467744e-23 3981.072 3.467744e-23 5011.872 3.467744e-23 6309.573 3.467744e-23 7943.282 3.467744e-23 10000 3.467744e-23 12589.25 3.467744e-23 15848.93 3.467744e-23 19952.62 3.467744e-23 25118.86 3.467744e-23 31622.78 3.467744e-23 39810.72 3.467744e-23 50118.72 3.467744e-23 63095.73 3.467744e-23 79432.82 3.467744e-23 100000 3.467744e-23 125892.5 3.467744e-23 158489.3 3.467744e-23 199526.2 3.467744e-23 251188.6 3.467744e-23 316227.8 3.467744e-23 398107.2 3.467744e-23 501187.2 3.467744e-23 630957.3 3.467744e-23 794328.2 3.467744e-23 1000000 3.467744e-23 1258925 3.467744e-23 1584893 3.467745e-23 1995262 3.467745e-23 2511886 3.467745e-23 3162278 3.467745e-23 3981072 3.467745e-23 5011872 3.467745e-23 6309573 3.467746e-23 7943282 3.467747e-23 10000000 3.467748e-23 12589250 3.46775e-23 15848930 3.467753e-23 19952620 3.467758e-23 25118860 3.467765e-23 31622780 3.467778e-23 39810720 3.467797e-23 50118720 3.467828e-23 63095730 3.467876e-23 79432820 3.467954e-23 100000000 3.468076e-23 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_COTEMP1.standard0000644000175000017500000000044213546075722024540 0ustar carstencarstenV(d) I(d) -1.000000e+00 -2.233789e-03 -3.000000e+00 -5.903915e-03 -5.000000e+00 -8.614845e-03 -7.000000e+00 -1.037170e-02 -9.000000e+00 -1.116639e-02 -1.100000e+01 -1.132687e-02 -1.300000e+01 -1.133029e-02 -1.500000e+01 -1.133296e-02 -1.700000e+01 -1.133528e-02 -1.900000e+01 -1.133732e-02 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/acVd_corsrd2.standard0000644000175000017500000000553513546075722025033 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -1 -4.980383e-05 1.903795e-03 5.10985938351673e-13 7.30492797784113e-13 -2 -9.551997e-05 1.889314e-03 5.23520841745552e-13 7.18035294411189e-13 -3 -1.362369e-04 1.870947e-03 5.36781445335919e-13 7.04564890764019e-13 -4 -1.706036e-04 1.845005e-03 5.507209491101e-13 6.89862986783414e-13 -5 -1.969342e-04 1.808698e-03 5.65362553074378e-13 6.73639282390775e-13 -6 -2.131850e-04 1.759353e-03 5.8079935725396e-13 6.55480677474254e-13 -7 -2.168720e-04 1.694044e-03 5.97195161693196e-13 6.34797371874158e-13 -8 -2.049806e-04 1.609452e-03 6.14759166448727e-13 6.10793365374969e-13 -9 -1.739797e-04 1.502031e-03 6.33666671568016e-13 5.82517357719117e-13 -10 -1.201637e-04 1.368736e-03 6.53899677046191e-13 5.49081648666252e-13 -11 -4.064750e-05 1.208602e-03 6.7502018276466e-13 5.10136738121748e-13 -12 6.478759e-05 1.025064e-03 6.95983988440702e-13 4.66552626321159e-13 -13 1.915203e-04 8.279048e-04 7.15214993647581e-13 4.20924413967122e-13 -14 3.292535e-04 6.326653e-04 7.31104297949679e-13 3.77230402136777e-13 -15 4.642474e-04 4.562632e-04 7.42729201097172e-13 3.3937259188661e-13 -16 5.839879e-04 3.109996e-04 7.50223803126368e-13 3.09446883784094e-13 -17 6.810896e-04 2.011879e-04 7.54503104285008e-13 2.8696737769767e-13 -18 7.540813e-04 1.240908e-04 7.56671704872166e-13 2.68696972750878e-13 -19 8.056938e-04 7.317281e-05 7.57605705125051e-13 2.41052065265899e-13 -20 8.406738e-04 4.101768e-05 7.57819505182938e-13 8.03687317601848e-14 -1 -2.925274e-05 1.648285e-03 5.10512638223524e-13 7.29673397562256e-13 -2 -5.402909e-05 1.624584e-03 5.23131741640202e-13 7.17192094182889e-13 -3 -7.365975e-05 1.597723e-03 5.36495045258375e-13 7.03716890534419e-13 -4 -8.718059e-05 1.564740e-03 5.50550049063828e-13 6.89026586556955e-13 -5 -9.341818e-05 1.523525e-03 5.65317653062221e-13 6.72831582172087e-13 -6 -9.097426e-05 1.472122e-03 5.80890357278599e-13 6.54722277268913e-13 -7 -7.816777e-05 1.408435e-03 5.97431561757202e-13 6.34116071689693e-13 -8 -5.297721e-05 1.330110e-03 6.15151066554835e-13 6.10228065221911e-13 -9 -1.306677e-05 1.234684e-03 6.34227071719747e-13 5.82120657611708e-13 -10 4.394481e-05 1.120132e-03 6.54650077249365e-13 5.48914548621009e-13 -11 1.197508e-04 9.860324e-04 6.75999683029864e-13 5.10247938151856e-13 -12 2.140395e-04 8.352303e-04 6.97257588785535e-13 4.66934926424669e-13 -13 3.229770e-04 6.752204e-04 7.16868894095381e-13 4.21461914112652e-13 -14 4.386569e-04 5.177036e-04 7.33218198522027e-13 3.77675602257317e-13 -15 5.507238e-04 3.754273e-04 7.45336001802975e-13 3.39381791889101e-13 -16 6.497523e-04 2.577969e-04 7.53288703956204e-13 3.08629583562806e-13 -17 7.301391e-04 1.682780e-04 7.57939505215429e-13 2.84827877118391e-13 -18 7.907713e-04 1.049272e-04 7.60378005875663e-13 2.64222571539414e-13 -19 8.338085e-04 6.275200e-05 7.61495306178177e-13 2.30544362420892e-13 -20 8.629659e-04 3.599926e-05 7.61850006274214e-13 8.14669820575409e-14 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/acVd_cosym.standard0000644000175000017500000000550113546075722024600 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -1 4.450632e-05 3.181386e-04 3.00684981411771e-12 2.12437257518314e-12 -2 1.106412e-04 2.256178e-04 3.27937588790533e-12 1.73068846859145e-12 -3 2.063378e-04 1.076780e-04 3.55414496230026e-12 9.57663259291506e-13 -4 3.001422e-04 6.775617e-06 3.60545897619375e-12 3.2579718821101e-13 -5 3.072800e-04 6.516258e-08 3.56800396605264e-12 8.86659340066885e-14 -6 3.073081e-04 5.248233e-08 3.56262396459598e-12 4.36645518223679e-14 -7 3.073310e-04 4.363097e-08 3.56149396429003e-12 3.36696891162152e-14 -8 3.073499e-04 3.725052e-08 3.56096196414599e-12 2.86971577698807e-14 -9 3.073657e-04 3.259640e-08 3.5606469640607e-12 2.5588776928273e-14 -10 3.073791e-04 2.912930e-08 3.56043996400466e-12 2.34112063386863e-14 -11 3.073907e-04 2.647923e-08 3.56029396396513e-12 2.17767758961571e-14 -12 3.074009e-04 2.439995e-08 3.56018696393616e-12 2.04917155482214e-14 -13 3.074100e-04 2.272804e-08 3.56010496391395e-12 1.9447025265367e-14 -14 3.074182e-04 2.135385e-08 3.56004296389717e-12 1.85760350295425e-14 -15 3.074257e-04 2.020240e-08 3.5599939638839e-12 1.7835394829011e-14 -16 3.074327e-04 1.922133e-08 3.55995596387361e-12 1.71955446557688e-14 -17 3.074392e-04 1.837332e-08 3.55992496386522e-12 1.66355045041354e-14 -18 3.074453e-04 1.763116e-08 3.55990096385872e-12 1.61399543699631e-14 -19 3.074511e-04 1.697464e-08 3.55988296385385e-12 1.56974042501407e-14 -20 3.074566e-04 1.638846e-08 3.55986796384979e-12 1.52990341422803e-14 -1 3.615594e-05 2.206664e-04 2.93723879527022e-12 2.16208058539275e-12 -2 8.453247e-05 1.542483e-04 3.21831087137171e-12 1.75323347469561e-12 -3 1.485346e-04 7.432901e-05 3.52080895327439e-12 9.73987463711356e-13 -4 2.080388e-04 8.302170e-06 3.60828697695944e-12 3.37825991467861e-13 -5 2.165992e-04 4.302026e-08 3.57718196853763e-12 8.12541719999216e-14 -6 2.166172e-04 3.463434e-08 3.5740369676861e-12 4.28609916048005e-14 -7 2.166318e-04 2.889837e-08 3.57329896748629e-12 3.3349479029517e-14 -8 2.166440e-04 2.476762e-08 3.57294496739044e-12 2.85240077229996e-14 -9 2.166542e-04 2.174991e-08 3.57273496733358e-12 2.54813868991967e-14 -10 2.166629e-04 1.949675e-08 3.57259496729568e-12 2.33393863192407e-14 -11 2.166705e-04 1.777015e-08 3.57249596726887e-12 2.17265058825463e-14 -12 2.166772e-04 1.641188e-08 3.57242396724938e-12 2.04555555384309e-14 -13 2.166832e-04 1.531687e-08 3.57236896723449e-12 1.9420625258219e-14 -14 2.166887e-04 1.441457e-08 3.57232596722284e-12 1.8556665024298e-14 -15 2.166937e-04 1.365666e-08 3.57229296721391e-12 1.78212548251825e-14 -16 2.166984e-04 1.300942e-08 3.57226696720687e-12 1.71853946530206e-14 -17 2.167028e-04 1.244875e-08 3.57224696720145e-12 1.6628474502232e-14 -18 2.167069e-04 1.195706e-08 3.57223096719712e-12 1.61353943687284e-14 -19 2.167108e-04 1.152129e-08 3.5722179671936e-12 1.56948342494449e-14 -20 2.167145e-04 1.113151e-08 3.5722079671909e-12 1.5298084142023e-14 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/acFreq_cosym.standard0000644000175000017500000000711613546075722025130 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.19901838390982e-12 1.99297161993476e-12 2.80219492808551e-13 1258.925 2.19902024268229e-12 1.99297247653393e-12 2.80219652266905e-13 1584.893 2.19901908703856e-12 1.9929713213329e-12 2.80219578848099e-13 1995.262 2.19901951562967e-12 1.99297163835921e-12 2.80219577297002e-13 2511.886 2.1990192101186e-12 1.99297136724835e-12 2.80219566591746e-13 3162.278 2.19901892940192e-12 1.99297115718891e-12 2.80219484326167e-13 3981.072 2.19901898947603e-12 1.99297123578222e-12 2.80219492036497e-13 5011.872 2.19901922465553e-12 1.99297150316565e-12 2.80219534531837e-13 6309.573 2.19901912527093e-12 1.99297141520553e-12 2.80219437227101e-13 7943.282 2.19901925611767e-12 1.99297131351337e-12 2.80219567700244e-13 10000 2.19901838390982e-12 1.99297161993476e-12 2.8021949280855e-13 12589.25 2.19902024268229e-12 1.99297247653393e-12 2.80219652266905e-13 15848.93 2.19901908703856e-12 1.9929713213329e-12 2.80219578848099e-13 19952.62 2.19901951562967e-12 1.99297163835921e-12 2.80219577297002e-13 25118.86 2.1990192101186e-12 1.99297136724835e-12 2.80219566591746e-13 31622.78 2.19901892940192e-12 1.99297115718891e-12 2.80219484326167e-13 39810.72 2.19901898947603e-12 1.99297123578222e-12 2.80219492036497e-13 50118.72 2.19901922465553e-12 1.99297150316565e-12 2.80219534531837e-13 63095.73 2.19901912527093e-12 1.99297141520553e-12 2.80219437227101e-13 79432.82 2.19901925611767e-12 1.99297131351337e-12 2.80219567700244e-13 100000 2.19901838390982e-12 1.99297161993476e-12 2.8021949280855e-13 125892.5 2.19902024268229e-12 1.99297247653393e-12 2.80219652266905e-13 158489.3 2.19901908703856e-12 1.9929713213329e-12 2.80219578848099e-13 199526.2 2.19901951562967e-12 1.99297163835921e-12 2.80219577297002e-13 251188.6 2.1990192101186e-12 1.99297136724835e-12 2.80219566591746e-13 316227.8 2.19901892940192e-12 1.99297115718891e-12 2.80219484326167e-13 398107.2 2.19901898947603e-12 1.99297123578222e-12 2.80219492036497e-13 501187.2 2.19901922465553e-12 1.99297150316565e-12 2.80219534531837e-13 630957.3 2.19901912527093e-12 1.99297141520553e-12 2.80219437227101e-13 794328.2 2.19901925611767e-12 1.99297111314916e-12 2.80219567700244e-13 1000000 2.19901838390982e-12 1.99297161993476e-12 2.8021949280855e-13 1258925 2.19901897846923e-12 1.99297121232087e-12 2.80219399424292e-13 1584893 2.19901808283864e-12 1.99297031713298e-12 2.80219277588121e-13 1995262 2.1990179203009e-12 1.99297004303045e-12 2.80219178464811e-13 2511886 2.19901730929655e-12 1.9929694664263e-12 2.80218932984397e-13 3162278 2.19901490306539e-12 1.99296763414444e-12 2.80218477742033e-13 3981072 2.19901299278935e-12 1.99296563887464e-12 2.80217852942136e-13 5011872 2.19901001553497e-12 1.99296292915685e-12 2.80216930573608e-13 6309573 2.19900449514192e-12 1.99295779405093e-12 2.80215401329443e-13 7943282 2.19899521241235e-12 1.99294987454279e-12 2.8021295568128e-13 10000000 2.19898177827291e-12 1.99293660584728e-12 2.80209147737249e-13 12589250 2.19896208888137e-12 1.9929181153722e-12 2.80203091075773e-13 15848930 2.19892670064551e-12 1.99288596433932e-12 2.8019336923007e-13 19952620 2.19887354304769e-12 1.99283523774983e-12 2.80178098749118e-13 25118860 2.198787943436e-12 1.99275594074949e-12 2.80153861509594e-13 31622780 2.19865202948511e-12 1.99262891858338e-12 2.80115353197513e-13 39810720 2.19843771064647e-12 1.99242913530568e-12 2.80054463218861e-13 50118720 2.19809831259919e-12 1.9921125145062e-12 2.79958059019011e-13 63095730 2.19756065275471e-12 1.99161106545113e-12 2.79805253229932e-13 79432820 2.1967090567645e-12 1.99081719788058e-12 2.79563575273332e-13 100000000 2.19536418641643e-12 1.98956252105373e-12 2.79181484269705e-13 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/acVd_cvdsover.standard0000644000175000017500000000551013546075722025301 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -1 2.670475e-06 2.092080e-03 5.62744052365408e-13 6.7566848294019e-13 -2 3.504811e-05 1.832258e-03 6.20394167974428e-13 6.18319467412694e-13 -3 9.600629e-05 1.589382e-03 6.71561681828256e-13 5.66114553277986e-13 -4 1.864544e-04 1.355423e-03 7.17049294144225e-13 5.16391339815209e-13 -5 3.105655e-04 1.121704e-03 7.57156805003509e-13 4.65583826058853e-13 -6 4.753885e-04 8.799598e-04 7.90558014047032e-13 4.10153311050799e-13 -7 6.842120e-04 6.297038e-04 8.13859120355908e-13 3.50156494806399e-13 -8 9.207582e-04 3.896816e-04 8.24655723279136e-13 2.93453679453864e-13 -9 1.141821e-03 1.952061e-04 8.26357523739905e-13 2.49211367475065e-13 -10 1.304090e-03 7.014926e-05 8.24580023258639e-13 1.93312252340136e-13 -11 1.402085e-03 4.455501e-06 8.05442618077103e-13 1.46273339604145e-13 -12 1.406696e-03 1.585491e-06 7.53454904001203e-13 4.82685830689295e-14 -13 1.406928e-03 1.446764e-06 7.464707021102e-13 3.39119591818109e-14 -14 1.407129e-03 1.336034e-06 7.43983401436752e-13 2.82003176353591e-14 -15 1.407314e-03 1.240775e-06 7.42674001082227e-13 2.48850567377377e-14 -16 1.407489e-03 1.156915e-06 7.41868700864188e-13 2.26446261311313e-14 -17 1.407653e-03 1.082647e-06 7.41330600718495e-13 2.09976956852177e-14 -18 1.407808e-03 1.016807e-06 7.40952800616204e-13 1.97200753392964e-14 -19 1.407953e-03 9.584296e-07 7.40679200542126e-13 1.86910250606766e-14 -20 1.408088e-03 9.066352e-07 7.40477400487487e-13 1.78388748299532e-14 -1 3.469082e-05 1.603909e-03 5.5245934958078e-13 6.83062484942148e-13 -2 8.804536e-05 1.406445e-03 6.03666563445356e-13 6.32035371126335e-13 -3 1.601666e-04 1.219133e-03 6.50749276193206e-13 5.834982579847e-13 -4 2.528203e-04 1.034813e-03 6.94186787954102e-13 5.34628444752984e-13 -5 3.701239e-04 8.462339e-04 7.34051798747728e-13 4.8129093031162e-13 -6 5.173571e-04 6.477889e-04 7.68497608074081e-13 4.19629013616387e-13 -7 6.934892e-04 4.435939e-04 7.93012614711626e-13 3.51761695241014e-13 -8 8.780511e-04 2.563967e-04 8.04491617819616e-13 2.90183478568443e-13 -9 1.033712e-03 1.169279e-04 8.06505518364888e-13 2.44041966075427e-13 -10 1.134906e-03 3.672691e-05 8.02781517356599e-13 1.85078450110798e-13 -11 1.183633e-03 2.723835e-06 7.64223906916958e-13 8.11387419686684e-14 -12 1.185996e-03 1.207407e-06 7.48505102661023e-13 4.03369009213919e-14 -13 1.186188e-03 1.103059e-06 7.45621601880302e-13 3.15004285288785e-14 -14 1.186359e-03 1.017879e-06 7.44315701526724e-13 2.70500673239238e-14 -15 1.186517e-03 9.441985e-07 7.43567601324173e-13 2.42379765625379e-14 -16 1.186666e-03 8.795883e-07 7.43088601194481e-13 2.22519160248034e-14 -17 1.186805e-03 8.227375e-07 7.42761901106026e-13 2.07519956186934e-14 -18 1.186935e-03 7.726668e-07 7.42530501043373e-13 1.95670152978548e-14 -19 1.187056e-03 7.285251e-07 7.42362900997995e-13 1.85999750360244e-14 -20 1.187169e-03 6.895448e-07 7.42240100964746e-13 1.77912048170463e-14 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/dcSw_Id1_vb1.standard0000644000175000017500000001167213546075722024664 0ustar carstencarstenV(d) I(d) -1.000000e+00 -7.320648e-04 -2.000000e+00 -8.157521e-04 -3.000000e+00 -8.162158e-04 -4.000000e+00 -8.165375e-04 -5.000000e+00 -8.167897e-04 -6.000000e+00 -8.170032e-04 -7.000000e+00 -8.171920e-04 -8.000000e+00 -8.173634e-04 -9.000000e+00 -8.175215e-04 -1.000000e+01 -8.176692e-04 -1.100000e+01 -8.178083e-04 -1.200000e+01 -8.179402e-04 -1.300000e+01 -8.180660e-04 -1.400000e+01 -8.181865e-04 -1.500000e+01 -8.183022e-04 -1.600000e+01 -8.184137e-04 -1.700000e+01 -8.185215e-04 -1.800000e+01 -8.186259e-04 -1.900000e+01 -8.187272e-04 -2.000000e+01 -8.188256e-04 -1.000000e+00 -1.689481e-03 -2.000000e+00 -2.881973e-03 -3.000000e+00 -3.556340e-03 -4.000000e+00 -3.735746e-03 -5.000000e+00 -3.737774e-03 -6.000000e+00 -3.738857e-03 -7.000000e+00 -3.739761e-03 -8.000000e+00 -3.740533e-03 -9.000000e+00 -3.741208e-03 -1.000000e+01 -3.741811e-03 -1.100000e+01 -3.742357e-03 -1.200000e+01 -3.742860e-03 -1.300000e+01 -3.743329e-03 -1.400000e+01 -3.743769e-03 -1.500000e+01 -3.744185e-03 -1.600000e+01 -3.744581e-03 -1.700000e+01 -3.744960e-03 -1.800000e+01 -3.745323e-03 -1.900000e+01 -3.745673e-03 -2.000000e+01 -3.746011e-03 -1.000000e+00 -2.174154e-03 -2.000000e+00 -4.091471e-03 -3.000000e+00 -5.767509e-03 -4.000000e+00 -7.211674e-03 -5.000000e+00 -8.426425e-03 -6.000000e+00 -9.406016e-03 -7.000000e+00 -1.014001e-02 -8.000000e+00 -1.062755e-02 -9.000000e+00 -1.089788e-02 -1.000000e+01 -1.101277e-02 -1.100000e+01 -1.103967e-02 -1.200000e+01 -1.104139e-02 -1.300000e+01 -1.104290e-02 -1.400000e+01 -1.104429e-02 -1.500000e+01 -1.104558e-02 -1.600000e+01 -1.104678e-02 -1.700000e+01 -1.104790e-02 -1.800000e+01 -1.104894e-02 -1.900000e+01 -1.104993e-02 -2.000000e+01 -1.105086e-02 -1.000000e+00 -9.866132e-04 -2.000000e+00 -1.073163e-03 -3.000000e+00 -1.073773e-03 -4.000000e+00 -1.074197e-03 -5.000000e+00 -1.074531e-03 -6.000000e+00 -1.074813e-03 -7.000000e+00 -1.075063e-03 -8.000000e+00 -1.075290e-03 -9.000000e+00 -1.075500e-03 -1.000000e+01 -1.075696e-03 -1.100000e+01 -1.075880e-03 -1.200000e+01 -1.076056e-03 -1.300000e+01 -1.076222e-03 -1.400000e+01 -1.076382e-03 -1.500000e+01 -1.076536e-03 -1.600000e+01 -1.076684e-03 -1.700000e+01 -1.076827e-03 -1.800000e+01 -1.076966e-03 -1.900000e+01 -1.077100e-03 -2.000000e+01 -1.077231e-03 -1.000000e+00 -2.242004e-03 -2.000000e+00 -3.818162e-03 -3.000000e+00 -4.709921e-03 -4.000000e+00 -4.943232e-03 -5.000000e+00 -4.945220e-03 -6.000000e+00 -4.946631e-03 -7.000000e+00 -4.947813e-03 -8.000000e+00 -4.948824e-03 -9.000000e+00 -4.949708e-03 -1.000000e+01 -4.950495e-03 -1.100000e+01 -4.951209e-03 -1.200000e+01 -4.951866e-03 -1.300000e+01 -4.952477e-03 -1.400000e+01 -4.953051e-03 -1.500000e+01 -4.953593e-03 -1.600000e+01 -4.954109e-03 -1.700000e+01 -4.954602e-03 -1.800000e+01 -4.955075e-03 -1.900000e+01 -4.955531e-03 -2.000000e+01 -4.955971e-03 -1.000000e+00 -2.599989e-03 -2.000000e+00 -4.890235e-03 -3.000000e+00 -6.891407e-03 -4.000000e+00 -8.618870e-03 -5.000000e+00 -1.008106e-02 -6.000000e+00 -1.127724e-02 -7.000000e+00 -1.219920e-02 -8.000000e+00 -1.284257e-02 -9.000000e+00 -1.322791e-02 -1.000000e+01 -1.341232e-02 -1.100000e+01 -1.347039e-02 -1.200000e+01 -1.347312e-02 -1.300000e+01 -1.347494e-02 -1.400000e+01 -1.347661e-02 -1.500000e+01 -1.347816e-02 -1.600000e+01 -1.347960e-02 -1.700000e+01 -1.348094e-02 -1.800000e+01 -1.348220e-02 -1.900000e+01 -1.348339e-02 -2.000000e+01 -1.348451e-02 -1.000000e+00 -5.189763e-04 -2.000000e+00 -6.052942e-04 -3.000000e+00 -6.056384e-04 -4.000000e+00 -6.058743e-04 -5.000000e+00 -6.060587e-04 -6.000000e+00 -6.062144e-04 -7.000000e+00 -6.063517e-04 -8.000000e+00 -6.064763e-04 -9.000000e+00 -6.065911e-04 -1.000000e+01 -6.066982e-04 -1.100000e+01 -6.067990e-04 -1.200000e+01 -6.068946e-04 -1.300000e+01 -6.069857e-04 -1.400000e+01 -6.070729e-04 -1.500000e+01 -6.071566e-04 -1.600000e+01 -6.072373e-04 -1.700000e+01 -6.073153e-04 -1.800000e+01 -6.073908e-04 -1.900000e+01 -6.074640e-04 -2.000000e+01 -6.075351e-04 -1.000000e+00 -1.170181e-03 -2.000000e+00 -2.003538e-03 -3.000000e+00 -2.483286e-03 -4.000000e+00 -2.625041e-03 -5.000000e+00 -2.628988e-03 -6.000000e+00 -2.629756e-03 -7.000000e+00 -2.630395e-03 -8.000000e+00 -2.630940e-03 -9.000000e+00 -2.631416e-03 -1.000000e+01 -2.631841e-03 -1.100000e+01 -2.632227e-03 -1.200000e+01 -2.632582e-03 -1.300000e+01 -2.632913e-03 -1.400000e+01 -2.633224e-03 -1.500000e+01 -2.633518e-03 -1.600000e+01 -2.633798e-03 -1.700000e+01 -2.634066e-03 -1.800000e+01 -2.634323e-03 -1.900000e+01 -2.634570e-03 -2.000000e+01 -2.634809e-03 -1.000000e+00 -1.668348e-03 -2.000000e+00 -3.141225e-03 -3.000000e+00 -4.428777e-03 -4.000000e+00 -5.535156e-03 -5.000000e+00 -6.458318e-03 -6.000000e+00 -7.189864e-03 -7.000000e+00 -7.720248e-03 -8.000000e+00 -8.054009e-03 -9.000000e+00 -8.225348e-03 -1.000000e+01 -8.291025e-03 -1.100000e+01 -8.304464e-03 -1.200000e+01 -8.305819e-03 -1.300000e+01 -8.306972e-03 -1.400000e+01 -8.308033e-03 -1.500000e+01 -8.309014e-03 -1.600000e+01 -8.309926e-03 -1.700000e+01 -8.310778e-03 -1.800000e+01 -8.311576e-03 -1.900000e+01 -8.312327e-03 -2.000000e+01 -8.313036e-03 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/acVd.standard0000644000175000017500000000550513546075722023372 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -1 2.363051e-04 1.512078e-03 5.83354357945738e-13 6.42560473976052e-13 -2 5.558521e-04 9.958579e-04 6.65803080269089e-13 5.33218944371356e-13 -3 9.807483e-04 4.496003e-04 7.34447398854838e-13 3.64724298750695e-13 -4 1.378270e-03 3.066859e-05 7.4732040234026e-13 2.37191764220705e-13 -5 1.411098e-03 1.221697e-06 7.23224595816215e-13 9.25805450665866e-14 -6 1.411540e-03 1.006676e-06 7.14573693473946e-13 4.33542717383583e-14 -7 1.411914e-03 8.512117e-07 7.13114093078752e-13 3.32457790014397e-14 -8 1.412235e-03 7.354829e-07 7.12540692923502e-13 2.82819876574716e-14 -9 1.412510e-03 6.491423e-07 7.12272092850777e-13 2.51966068220912e-14 -10 1.412746e-03 5.838154e-07 7.121454928165e-13 2.30420562387373e-14 -11 1.412951e-03 5.333341e-07 7.12096292803179e-13 2.14282258017856e-14 -12 1.413133e-03 4.934093e-07 7.12093492802421e-13 2.01612054587344e-14 -13 1.413297e-03 4.611119e-07 7.12120092809623e-13 1.91322651801443e-14 -14 1.413445e-03 4.344371e-07 7.12166492822186e-13 1.82751149480671e-14 -15 1.413581e-03 4.119954e-07 7.12226492838431e-13 1.75467147508496e-14 -16 1.413708e-03 3.928073e-07 7.12295992857248e-13 1.69177645805586e-14 -17 1.413826e-03 3.761691e-07 7.12372292877907e-13 1.6367514431576e-14 -18 1.413938e-03 3.615658e-07 7.12453492899892e-13 1.58808142997998e-14 -19 1.414044e-03 3.486129e-07 7.12538192922825e-13 1.54463041821543e-14 -20 1.414145e-03 3.370186e-07 7.12625492946462e-13 1.50552640762784e-14 -1 1.848311e-04 1.049127e-03 5.70082554352339e-13 6.48605875612871e-13 -2 4.158298e-04 6.983210e-04 6.47126975212452e-13 5.42821146971194e-13 -3 7.053020e-04 3.251723e-04 7.18555294551982e-13 3.72481100850883e-13 -4 9.673315e-04 3.801324e-05 7.37504499682562e-13 2.34617763523783e-13 -5 1.007097e-03 8.694068e-07 7.19195194725237e-13 8.29371324555905e-14 -6 1.007426e-03 7.102577e-07 7.14438993437475e-13 4.26179415389936e-14 -7 1.007700e-03 5.988631e-07 7.13513693186946e-13 3.30473989477275e-14 -8 1.007932e-03 5.170333e-07 7.13143693086767e-13 2.82316876438526e-14 -9 1.008130e-03 4.563695e-07 7.12970493039872e-13 2.52062968247149e-14 -10 1.008301e-03 4.106030e-07 7.12890293018158e-13 2.30808562492425e-14 -11 1.008450e-03 3.752740e-07 7.12861093010252e-13 2.14826058165093e-14 -12 1.008582e-03 3.473342e-07 7.12862493010631e-13 2.02243854758406e-14 -13 1.008701e-03 3.247214e-07 7.12883593016344e-13 1.9200525198626e-14 -14 1.008809e-03 3.060318e-07 7.12917693025576e-13 1.83462849673367e-14 -15 1.008909e-03 2.902955e-07 7.12960893037273e-13 1.7619464770547e-14 -16 1.009002e-03 2.768300e-07 7.13010393050675e-13 1.69912446004536e-14 -17 1.009089e-03 2.651453e-07 7.13064393065296e-13 1.64411744515197e-14 -18 1.009171e-03 2.548829e-07 7.1312169308081e-13 1.59542943196948e-14 -19 1.009249e-03 2.457749e-07 7.13181293096947e-13 1.55193542019329e-14 -20 1.009324e-03 2.376182e-07 7.13242493113517e-13 1.51277340959e-14 tmpk8ny_4pz/tests/hisimhv1/pmos/reference/acFreq_coiigs.standard0000644000175000017500000000713213546075722025251 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 2.55649152694024e-12 2.46342408241782e-12 4.61403389883681e-14 1258.925 2.55649292114601e-12 2.46342408384006e-12 4.61403634410933e-14 1584.893 2.55649216775736e-12 2.46342392295589e-12 4.61403555263459e-14 1995.262 2.55649201092948e-12 2.46342451911514e-12 4.61403537870685e-14 2511.886 2.55649223985875e-12 2.46342419070765e-12 4.61403516571063e-14 3162.278 2.55649168250882e-12 2.46342341677883e-12 4.61403420530444e-14 3981.072 2.55649147738682e-12 2.46342369955736e-12 4.61403463563931e-14 5011.872 2.55649188045869e-12 2.46342419048844e-12 4.61403614923594e-14 6309.573 2.55649144527814e-12 2.46342414976812e-12 4.61403495282183e-14 7943.282 2.55649104865844e-12 2.46342387627711e-12 4.61403513900993e-14 10000 2.55649152694024e-12 2.46342408241782e-12 4.61403389883681e-14 12589.25 2.55649292114601e-12 2.46342408384006e-12 4.61403634410933e-14 15848.93 2.55649216775736e-12 2.46342392295589e-12 4.61403555263459e-14 19952.62 2.55649201092948e-12 2.46342451911514e-12 4.61403537870685e-14 25118.86 2.55649223985875e-12 2.46342419070765e-12 4.61403516571063e-14 31622.78 2.55649168250882e-12 2.46342341677883e-12 4.61403420530444e-14 39810.72 2.55649147738682e-12 2.46342369955736e-12 4.61403463563931e-14 50118.72 2.55649188045869e-12 2.46342419048844e-12 4.61403614923594e-14 63095.73 2.55649144527814e-12 2.46342414976812e-12 4.61403495282183e-14 79432.82 2.55649104865844e-12 2.46342387627711e-12 4.61403513900993e-14 100000 2.55649152694024e-12 2.46342408241782e-12 4.61403389883681e-14 125892.5 2.55649292114601e-12 2.46342408384006e-12 4.61403634410932e-14 158489.3 2.55649216775736e-12 2.46342392295589e-12 4.61403555263459e-14 199526.2 2.55649201092948e-12 2.46342451911514e-12 4.61403537870685e-14 251188.6 2.55649223985875e-12 2.46342419070765e-12 4.61403516571063e-14 316227.8 2.55649168250882e-12 2.46342341677883e-12 4.61403420530444e-14 398107.2 2.55649147738682e-12 2.46342369955736e-12 4.61403463563931e-14 501187.2 2.55649188045869e-12 2.46342419048844e-12 4.61403614923594e-14 630957.3 2.55649144527814e-12 2.46342414976812e-12 4.61403495282183e-14 794328.2 2.55649104865844e-12 2.46342387627711e-12 4.61403513900993e-14 1000000 2.55649152694024e-12 2.46342408241782e-12 4.61403389883681e-14 1258925 2.55649292114601e-12 2.46342408384006e-12 4.61403634410933e-14 1584893 2.55649216775736e-12 2.46342392295589e-12 4.61403555263459e-14 1995262 2.55649201092948e-12 2.46342451911514e-12 4.61403537870685e-14 2511886 2.55649223985875e-12 2.46342419070765e-12 4.61403516571063e-14 3162278 2.55649168250882e-12 2.46342341677883e-12 4.61403420530444e-14 3981072 2.55649147738682e-12 2.46342369955736e-12 4.61403463563931e-14 5011872 2.55649188045869e-12 2.46342419048844e-12 4.61403614923594e-14 6309573 2.55649144527814e-12 2.46342414976812e-12 4.61403495282183e-14 7943282 2.55649104865844e-12 2.46342387627711e-12 4.61403513900993e-14 10000000 2.55649152694024e-12 2.46342408241782e-12 4.61403389883681e-14 12589250 2.55649292114601e-12 2.46342408384006e-12 4.61403634410932e-14 15848930 2.55649216775736e-12 2.46342392295589e-12 4.61403454843466e-14 19952620 2.55649201092948e-12 2.46342451911514e-12 4.61403458104247e-14 25118860 2.55649223985875e-12 2.46342419070765e-12 4.61403453210328e-14 31622780 2.55649117921675e-12 2.46342341677883e-12 4.6140331987203e-14 39810720 2.5564910776077e-12 2.46342329977825e-12 4.61403063784819e-14 50118720 2.55649124534692e-12 2.46342323782079e-12 4.61403297367713e-14 63095730 2.55649144527814e-12 2.4634226363065e-12 4.61402990794976e-14 79432820 2.55649104865844e-12 2.463421872635e-12 4.61402712444149e-14 100000000 2.55648834384137e-12 2.46342089931896e-12 4.6140227579908e-14 tmpk8ny_4pz/tests/hisimhv1/pmos/qaSpec0000644000175000017500000004576013546075722020203 0ustar carstencarsten // // Test specification for HiSIM_HV (version 1.2.4) // // // Simulator specific information // These arguments are added to the model card // specification to invoke the desired model in // different simulators (which can have different // names or levels for the same model) and to switch // between nType and pType polarities. // It is assumed that there are no polarity specific // parameters. // `ifdef spice nTypeSelectionArguments pmos level=62 version=1.24 pTypeSelectionArguments nmos level=62 version=1.24 `endif `ifdef ngspice nTypeSelectionArguments pmos level=73 version=1.24 pTypeSelectionArguments nmos level=73 version=1.24 `endif `ifdef hspice nTypeSelectionArguments pmos level=73 version=1.2.4 pTypeSelectionArguments nmos level=73 version=1.2.4 `endif // // General test-independent information // keyLetter m pins d g s b linearScale w l ps pd areaScale as ad temperature 27 -50 150 //checkPolarity yes scaleParameters m // // Specific tests // test dcSw_Id1_vb0 biases V(s)=0 V(b)=0 biasList V(g)=-2.5,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/pmosParameters test dcSw_Id1_vb1 biases V(s)=0 V(b)=0.5 biasList V(g)=-2.5,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/pmosParameters test dcSw_Id1_vb2 biases V(s)=0 V(b)=1.5 biasList V(g)=-2.5,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/pmosParameters test dcSw_Id1_vb0_jd biases V(s)=0 V(b)=0 biasList V(g)=-2.5,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=50e-6 L=5e-6 AD=20e-12 AS=20e-12 PD=12e-6 PS=12e-6 modelParameters parameters/pmosParameters test dcSw_Ig1_vb0 biases V(s)=0 V(b)=0 biasList V(d)=-2.5,-5,-10 biasSweep V(g)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/pmosParameters test dcSw_Ig1_vb1 biases V(s)=0 V(b)=0.5 biasList V(d)=-2.5,-5,-10 biasSweep V(g)=-1,-20.000000001,-1 outputs I(d) I(g) I(s) I(b) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/pmosParameters test dcSw_Ig1_vb2 biases V(s)=0 V(b)=1.5 biasList V(d)=-2.5,-5,-10 biasSweep V(g)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/pmosParameters test dcSw_Ig1_vb0_jd biases V(s)=0 V(b)=0 biasList V(d)=-2.5,-5,-10 biasSweep V(g)=-1,-20.000000001,-1 outputs I(d) I(g) I(s) I(b) instanceParameters W=20e-6 L=2.0e-6 AD=20e-12 AS=20e-12 PD=12e-6 PS=12e-6 modelParameters parameters/pmosParameters test dcSw_ld2 biases V(s)=0 V(b)=0 biasList V(g)=-2.5,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/pmosParameters test dcSw_lg2 biases V(s)=0 V(b)=0 biasList V(d)=-2.5,-5,-10 biasSweep V(g)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=5e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/pmosParameters test dcSw_cosym biases V(s)=0 V(b)=0 biasList V(g)=-2.5,-5,-10 biasSweep V(d)=-0.1,-30.1,-0.5 outputs I(d) instanceParameters W=50e-6 L=20e-6 modelParameters parameters/pmosParameters modelParameters COSYM=1 RD=0.1 test dcSw_rs2m biases V(s)=0 V(b)=0 biasList V(g)=-0.1,-0.6,-2,-5 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=50e-6 L=10e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/pmosParameters modelParameters COSYM=1 RD=0.1 RS=2e-3 test dcSw_corsrd0 biases V(s)=0 V(b)=0 biasList V(g)=-2.5,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=50e-6 L=2e-6 modelParameters parameters/pmosParameters modelParameters CORSRD=0 test dcSw_corsrd1 biases V(s)=0 V(b)=0 biasList V(g)=-2.5,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=50e-6 L=20e-6 AD=20e-12 AS=20e-12 PD=12e-6 PS=12e-6 modelParameters parameters/pmosParameters modelParameters CORSRD=1 RD=0.1 RS=0.05 test dcSw_corsrd2 biases V(s)=0 V(b)=0 biasList V(g)=-2.5,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=50e-6 L=2e-6 modelParameters parameters/pmosParameters modelParameters CORSRD=2 test dcSw_isub biases V(s)=0 V(b)=0 biasList V(g)=-2.5,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) I(b) instanceParameters W=50e-6 L=50e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/pmosParameters modelParameters COISUB=1 SUB1=1 SVGS=1 SVDS=1 SUB1L=0.1 SUB2L=0.1 SLG=1 SVBS=1 test dcSw_gidl biases V(s)=0 V(b)=0 biasList V(g)=-2.5,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) I(b) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/pmosParameters modelParameters COGIDL=1 test dcSw_she biases V(s)=0 V(b)=0 biasList V(g)=-2.5,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/pmosParameters modelParameters COSELFHEAT=1 POWRAT=0.5 test dcSw_ptl biases V(s)=0 V(b)=0 biasList V(g)=-2.5,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/pmosParameters modelParameters CORSRD=-1 RSH=10 PT4P=0.1 GDLD=0.0001 test dcSw_coisti biases V(s)=0 V(b)=0 biasList V(g)=-2.5,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=20e-6 L=2e-6 instanceParameters SA=1e-6 SB=2e-6 SD=1e-6 NF=2 modelParameters parameters/pmosParameters modelParameters COISTI=1 WSTI=0.1E-4 modelParameters NSUBPSTI1=2e-6 NSUBPSTI2=1e-6 NSUBPSTI3=1.5 test dcSw_corg biases V(s)=0 V(b)=0 biasList V(g)=-2.5,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters CORG=1 RSHG=10 test dcSw_corbnet biases V(s)=0 V(b)=0 biasList V(g)=-2.5,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=20e-6 L=2e-6 modelParameters CORBNET=1 test dcSw_codfm biases V(s)=0 V(b)=0 biasList V(g)=-2.5,-5,-10 biasSweep V(d)=-1,-20.000000001,-1 outputs I(d) instanceParameters W=50e-6 L=2e-6 NSUBCDFM=1E17 modelParameters CODFM=1 test dcSw_NF_RDS temperature 27 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.000000001,-2 outputs I(d) instanceParameters W=50e-6 L=5e-6 NF=100 modelParameters parameters/pmosParameters modelParameters RD=0.01 RDS=1 RDSP=2.0 RDVDS=1 RDVDSP=1.5 test dcSw_NF_RD23 temperature 27 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.000000001,-2 outputs I(d) instanceParameters W=1e-6 L=2e-6 NF=100 modelParameters parameters/pmosParameters modelParameters RD20=0.1 RD23=0.1 RD23L=0.1 RD23S=0.1 RD23SP=1.5 RD24=0.1 test dcSw_NF_RTH0W temperature 27 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.000000001,-2 outputs I(d) instanceParameters W=50e-6 L=5e-6 NF=100 modelParameters parameters/pmosParameters modelParameters COSELFHEAT=1 RTH0=1 RTH0W=2.0 RTH0WP=2.5 test dcSw_COTEMP1 temperature 27 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.000000001,-2 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/pmosParameters modelParameters COTEMP=1 test dcSw_COTEMP2 temperature 27 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.000000001,-2 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/pmosParameters modelParameters COTEMP=2 test dcSw_COTEMP3 temperature 27 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.000000001,-2 outputs I(d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/pmosParameters modelParameters COTEMP=3 test acVd temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-5 biasSweep V(d)=-1,-20.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/pmosParameters test acVd_corsrd1 temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=10e-6 modelParameters parameters/pmosParameters modelParameters CORSRD=1 RD=0.01 RS=0.1 test acVd_corsrd2 temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-20 biasSweep V(d)=-1,-20.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/pmosParameters modelParameters CORSRD=2 test acVd_cosym temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-5 biasSweep V(d)=-1,-20.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=20e-6 modelParameters parameters/pmosParameters modelParameters COSYM=1 RD=0.01 test acVd_cvdsover temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/pmosParameters modelParameters CVDSOVER=0.2 test acVd_coisti temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 instanceParameters SA=1e-6 SB=2e-6 SD=1e-6 NF=2 modelParameters parameters/pmosParameters modelParameters COISTI=1 WSTI=0.1E-4 modelParameters NSUBPSTI1=2e-6 NSUBPSTI2=1e-6 NSUBPSTI3=1.5 test acVd_coadov temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/pmosParameters modelParameters COADOV=1 test acVd_corg temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/pmosParameters modelParameters CORG=1 RSHG=10 test acVd_corbnet temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/pmosParameters modelParameters CORBNET=1 test acVd_codfm temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-10 biasSweep V(d)=-1,-20.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 NSUBCDFM=1E17 modelParameters parameters/pmosParameters modelParameters CODFM=1 test acVg_QOVADD temperature 27 150 biases V(s)=0 V(b)=0 V(d)=-1 biasSweep V(g)=-1,-10.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/pmosParameters modelParameters QOVADD=1e-4 test acVg_LOVER temperature 27 150 biases V(s)=0 V(b)=0 V(d)=-1 biasSweep V(g)=-1,-10.0000001,-1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 modelParameters parameters/pmosParameters modelParameters LOVERS=0 LOVER=1.6e-06 LOVERLD=3e-06 test acFreq temperature 27 biases V(s)=0 V(b)=0 V(d)=-10 V(g)=-10 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=50e-6 L=2e-6 modelParameters parameters/pmosParameters test acFreq_cosym temperature 27 biases V(s)=0 V(b)=0 V(d)=-10 V(g)=-10 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=50e-6 L=10e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/pmosParameters modelParameters COSYM=1 RD=0.01 test acFreq_coovlp temperature 27 biases V(s)=0 V(b)=0 V(d)=-10 V(g)=-10 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=50e-6 L=2e-6 modelParameters parameters/pmosParameters modelParameters COOVLP=0 test acFreq_nover temperature 27 biases V(s)=0 V(b)=0 V(d)=-10 V(g)=-5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/pmosParameters modelParameters NOVER=1E16 test acFreq_coadov temperature 27 biases V(s)=0 V(b)=0 V(d)=-10 V(g)=-5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=20e-6 L=2e-6 modelParameters parameters/pmosParameters modelParameters COADOV=0 test acFreq_conqs temperature 27 biases V(s)=0 V(b)=0 V(d)=-10 V(g)=-5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=50e-6 L=5e-6 AD=25e-12 AS=25e-12 PD=10e-6 PS=10e-6 modelParameters parameters/pmosParameters modelParameters CONQS=1 test acFreq_coiigs temperature 27 biases V(s)=0 V(b)=0 V(d)=-10 V(g)=-5 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters W=100e-6 L=8e-6 modelParameters parameters/pmosParameters modelParameters COIIGS=1 test noise1 temperature 27 biases V(s)=0 V(b)=0 V(d)=-20 biasList V(g)=-5,-10 freq dec 10 1e3 1e8 outputs N(d) instanceParameters W=100e-6 L=8e-6 modelParameters parameters/pmosParameters modelParameters COTHRML=1 COIGN=1 test noise2 temperature 27 biases V(s)=0 V(b)=0 V(d)=-20 biasList V(g)=-5,-10 freq dec 10 1e3 1e8 outputs N(d) instanceParameters W=100e-6 L=8e-6 modelParameters parameters/pmosParameters modelParameters COFLICK=1 FALPH=1.2 tmpk8ny_4pz/tests/hisimhv1/pmos/run0000755000175000017500000000023613546075722017563 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmpk8ny_4pz/tests/ChangeLog0000644000175000017500000000125013546075722016072 0ustar carstencarsten2001-12-07 Paolo Nenzi * tests/: added mesa tests from macspice3f4 and corrected all other tests. 2001-12-04 Emmanuel Rouat * check.sh (testdir): turned that script into 'real' sh script (was bash, really) 2000-09-14 Arno W. Peters * diffpair.out, filters/lowpass.out, polezero/filt_bridge_t.out, polezero/filt_multistage.out, polezero/filt_rc.out, resistance/res_array.out, resistance/res_partition.out: Updated for new spice output. 2000-09-09 Arno W. Peters * fourbitadder.out, resistance/res_simple.out: Updated to correspond to the new output from ngspice. tmpk8ny_4pz/tests/bsim1/0000755000175000017500000000000013546075722015335 5ustar carstencarstentmpk8ny_4pz/tests/bsim1/Makefile.am0000644000175000017500000000037613546075722017377 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = \ test.cir TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/bsim1/test.out0000644000175000017500000015035613546075722017057 0ustar carstencarsten No. of Data Rows : 501 Circuit: Test of MOS BSIM1 implementation; DC transfer curve Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Test of MOS BSIM1 implementation; DC transfer curve -------------------------------------------------------------------------------- Index v-sweep v1#branch v2#branch v3#branch -------------------------------------------------------------------------------- 0 0.000000e+00 1.029690e-13 2.140597e-12 4.179260e-12 1 1.000000e-02 1.032273e-13 2.140597e-12 4.179260e-12 2 2.000000e-02 1.036387e-13 2.140597e-12 4.179260e-12 3 3.000000e-02 1.041220e-13 2.140597e-12 4.179260e-12 4 4.000000e-02 1.047426e-13 2.140597e-12 4.179260e-12 5 5.000000e-02 1.055384e-13 2.140597e-12 4.179260e-12 6 6.000000e-02 1.065598e-13 2.140597e-12 4.179260e-12 7 7.000000e-02 1.078704e-13 2.140597e-12 4.179260e-12 8 8.000000e-02 1.095526e-13 2.140597e-12 4.179260e-12 9 9.000000e-02 1.117108e-13 2.140597e-12 4.179260e-12 10 1.000000e-01 1.144812e-13 2.140597e-12 4.179260e-12 11 1.100000e-01 1.180363e-13 2.140597e-12 4.179260e-12 12 1.200000e-01 1.225983e-13 2.140597e-12 4.179260e-12 13 1.300000e-01 1.284530e-13 2.140597e-12 4.179260e-12 14 1.400000e-01 1.359664e-13 2.140597e-12 4.179260e-12 15 1.500000e-01 1.456081e-13 2.140597e-12 4.179260e-12 16 1.600000e-01 1.579815e-13 2.140597e-12 4.179260e-12 17 1.700000e-01 1.738607e-13 2.140597e-12 4.179260e-12 18 1.800000e-01 1.942384e-13 2.140597e-12 4.179260e-12 19 1.900000e-01 2.203893e-13 2.140597e-12 4.179260e-12 20 2.000000e-01 2.539490e-13 2.140597e-12 4.179260e-12 21 2.100000e-01 2.970167e-13 2.140597e-12 4.179260e-12 22 2.200000e-01 3.522858e-13 2.140598e-12 4.179260e-12 23 2.300000e-01 4.232128e-13 2.140598e-12 4.179260e-12 24 2.400000e-01 5.142343e-13 2.140598e-12 4.179260e-12 25 2.500000e-01 6.310428e-13 2.140599e-12 4.179260e-12 26 2.600000e-01 7.809437e-13 2.140599e-12 4.179260e-12 27 2.700000e-01 9.733137e-13 2.140600e-12 4.179260e-12 28 2.800000e-01 1.220183e-12 2.140601e-12 4.179260e-12 29 2.900000e-01 1.536993e-12 2.140602e-12 4.179260e-12 30 3.000000e-01 1.943558e-12 2.140605e-12 4.179260e-12 31 3.100000e-01 2.465306e-12 2.140607e-12 4.179260e-12 32 3.200000e-01 3.134869e-12 2.140610e-12 4.179260e-12 33 3.300000e-01 3.994123e-12 2.140614e-12 4.179260e-12 34 3.400000e-01 5.096810e-12 2.140619e-12 4.179260e-12 35 3.500000e-01 6.511895e-12 2.140625e-12 4.179260e-12 36 3.600000e-01 8.327881e-12 2.140634e-12 4.179260e-12 37 3.700000e-01 1.065834e-11 2.140646e-12 4.179260e-12 38 3.800000e-01 1.364903e-11 2.140660e-12 4.179260e-12 39 3.900000e-01 1.748697e-11 2.140679e-12 4.179260e-12 40 4.000000e-01 2.241220e-11 2.140705e-12 4.179260e-12 41 4.100000e-01 2.873272e-11 2.140737e-12 4.179260e-12 42 4.200000e-01 3.684378e-11 2.140780e-12 4.179260e-12 43 4.300000e-01 4.725259e-11 2.140836e-12 4.179260e-12 44 4.400000e-01 6.060999e-11 2.140908e-12 4.179260e-12 45 4.500000e-01 7.775113e-11 2.141002e-12 4.179260e-12 46 4.600000e-01 9.974764e-11 2.141125e-12 4.179260e-12 47 4.700000e-01 1.279745e-10 2.141286e-12 4.179260e-12 48 4.800000e-01 1.641960e-10 2.141494e-12 4.179260e-12 49 4.900000e-01 2.106755e-10 2.141766e-12 4.179260e-12 50 5.000000e-01 2.703167e-10 2.142121e-12 4.179260e-12 51 5.100000e-01 3.468443e-10 2.142583e-12 4.179260e-12 52 5.200000e-01 4.450357e-10 2.143185e-12 4.179260e-12 53 5.300000e-01 5.710171e-10 2.143970e-12 4.179260e-12 54 5.400000e-01 7.326434e-10 2.144993e-12 4.179260e-12 Index v-sweep v1#branch v2#branch v3#branch -------------------------------------------------------------------------------- 55 5.500000e-01 9.399828e-10 2.146326e-12 4.179260e-12 56 5.600000e-01 1.205937e-09 2.148063e-12 4.179261e-12 57 5.700000e-01 1.547029e-09 2.150327e-12 4.179261e-12 58 5.800000e-01 1.984413e-09 2.153278e-12 4.179262e-12 59 5.900000e-01 2.545148e-09 2.157122e-12 4.179262e-12 60 6.000000e-01 3.263817e-09 2.162133e-12 4.179262e-12 61 6.100000e-01 4.184566e-09 2.168662e-12 4.179263e-12 62 6.200000e-01 5.363670e-09 2.177172e-12 4.179264e-12 63 6.300000e-01 6.872717e-09 2.188261e-12 4.179266e-12 64 6.400000e-01 8.802558e-09 2.202713e-12 4.179267e-12 65 6.500000e-01 1.126812e-08 2.221546e-12 4.179270e-12 66 6.600000e-01 1.441419e-08 2.246090e-12 4.179273e-12 67 6.700000e-01 1.842219e-08 2.278075e-12 4.179277e-12 68 6.800000e-01 2.351792e-08 2.319757e-12 4.179282e-12 69 6.900000e-01 2.997991e-08 2.374078e-12 4.179289e-12 70 7.000000e-01 3.814771e-08 2.444868e-12 4.179299e-12 71 7.100000e-01 4.842908e-08 2.537121e-12 4.179312e-12 72 7.200000e-01 6.130388e-08 2.657346e-12 4.179329e-12 73 7.300000e-01 7.732184e-08 2.814021e-12 4.179352e-12 74 7.400000e-01 9.708992e-08 3.018199e-12 4.179381e-12 75 7.500000e-01 1.212443e-07 3.284283e-12 4.179421e-12 76 7.600000e-01 1.504017e-07 3.631042e-12 4.179473e-12 77 7.700000e-01 1.850865e-07 4.082936e-12 4.179543e-12 78 7.800000e-01 2.256347e-07 4.671840e-12 4.179635e-12 79 7.900000e-01 2.720848e-07 5.439297e-12 4.179758e-12 80 8.000000e-01 3.240742e-07 6.439440e-12 4.179920e-12 81 8.100000e-01 3.807731e-07 7.742818e-12 4.180135e-12 82 8.200000e-01 4.408848e-07 9.441368e-12 4.180420e-12 83 8.300000e-01 5.027355e-07 1.165490e-11 4.180798e-12 84 8.400000e-01 5.674928e-07 1.453955e-11 4.181300e-12 85 8.500000e-01 6.505536e-07 1.829878e-11 4.181964e-12 86 8.600000e-01 7.529665e-07 2.319775e-11 4.182846e-12 87 8.700000e-01 8.734589e-07 2.958198e-11 4.184015e-12 88 8.800000e-01 1.011230e-06 3.790175e-11 4.185566e-12 89 8.900000e-01 1.165941e-06 4.874383e-11 4.187622e-12 90 9.000000e-01 1.337638e-06 6.287281e-11 4.190348e-12 91 9.100000e-01 1.525369e-06 8.128501e-11 4.193964e-12 92 9.200000e-01 1.713052e-06 1.052787e-10 4.198758e-12 93 9.300000e-01 1.896207e-06 1.365453e-10 4.205116e-12 94 9.400000e-01 2.075469e-06 1.772889e-10 4.213547e-12 95 9.500000e-01 2.251436e-06 2.303807e-10 4.224726e-12 96 9.600000e-01 2.424650e-06 2.995612e-10 4.239551e-12 97 9.700000e-01 2.595580e-06 3.897023e-10 4.259209e-12 98 9.800000e-01 2.764623e-06 5.071492e-10 4.285278e-12 99 9.900000e-01 2.932109e-06 6.601637e-10 4.319847e-12 100 1.000000e+00 3.098311e-06 8.595007e-10 4.365687e-12 101 1.010000e+00 3.263446e-06 1.119156e-09 4.426475e-12 102 1.020000e+00 3.427691e-06 1.457333e-09 4.507082e-12 103 1.030000e+00 3.591186e-06 1.897698e-09 4.613973e-12 104 1.040000e+00 3.754043e-06 2.470994e-09 4.755718e-12 105 1.050000e+00 3.916350e-06 3.217117e-09 4.943679e-12 106 1.060000e+00 4.078176e-06 4.187779e-09 5.192929e-12 107 1.070000e+00 4.239577e-06 5.449890e-09 5.523450e-12 108 1.080000e+00 4.400596e-06 7.089848e-09 5.961741e-12 109 1.090000e+00 4.561266e-06 9.218890e-09 6.542943e-12 110 1.100000e+00 4.721615e-06 1.197971e-08 7.313654e-12 111 1.110000e+00 4.881662e-06 1.555446e-08 8.335663e-12 112 1.120000e+00 5.041425e-06 2.017422e-08 9.690910e-12 Index v-sweep v1#branch v2#branch v3#branch -------------------------------------------------------------------------------- 113 1.130000e+00 5.200916e-06 2.612964e-08 1.148805e-11 114 1.140000e+00 5.360145e-06 3.378235e-08 1.387116e-11 115 1.150000e+00 5.519122e-06 4.357571e-08 1.703130e-11 116 1.160000e+00 5.677851e-06 5.604277e-08 2.122182e-11 117 1.170000e+00 5.836339e-06 7.180765e-08 2.677866e-11 118 1.180000e+00 5.994588e-06 9.157492e-08 3.414730e-11 119 1.190000e+00 6.152603e-06 1.160997e-07 4.391841e-11 120 1.200000e+00 6.310387e-06 1.461308e-07 5.687524e-11 121 1.210000e+00 6.467940e-06 1.823195e-07 7.405631e-11 122 1.220000e+00 6.625266e-06 2.250958e-07 9.683860e-11 123 1.230000e+00 6.782365e-06 2.745216e-07 1.270478e-10 124 1.240000e+00 6.939239e-06 3.301523e-07 1.671042e-10 125 1.250000e+00 7.095890e-06 3.909487e-07 2.202167e-10 126 1.260000e+00 7.252317e-06 4.552882e-07 2.906385e-10 127 1.270000e+00 7.408522e-06 5.211018e-07 3.840069e-10 128 1.280000e+00 7.564506e-06 5.943443e-07 5.077924e-10 129 1.290000e+00 7.720269e-06 6.885987e-07 6.718925e-10 130 1.300000e+00 7.875811e-06 8.024296e-07 8.894161e-10 131 1.310000e+00 8.031135e-06 9.345693e-07 1.177720e-09 132 1.320000e+00 8.186239e-06 1.084353e-06 1.559771e-09 133 1.330000e+00 8.341126e-06 1.251658e-06 2.065942e-09 134 1.340000e+00 8.495794e-06 1.436637e-06 2.736363e-09 135 1.350000e+00 8.650245e-06 1.625407e-06 3.623988e-09 136 1.360000e+00 8.804479e-06 1.808956e-06 4.798590e-09 137 1.370000e+00 8.958497e-06 1.988043e-06 6.351899e-09 138 1.380000e+00 9.112299e-06 2.163394e-06 8.404185e-09 139 1.390000e+00 9.265886e-06 2.335659e-06 1.111254e-08 140 1.400000e+00 9.419257e-06 2.505399e-06 1.468114e-08 141 1.410000e+00 9.572415e-06 2.673085e-06 1.937359e-08 142 1.420000e+00 9.725358e-06 2.839103e-06 2.552721e-08 143 1.430000e+00 9.878088e-06 3.003763e-06 3.356857e-08 144 1.440000e+00 1.003060e-05 3.167315e-06 4.402840e-08 145 1.450000e+00 1.018291e-05 3.329955e-06 5.755277e-08 146 1.460000e+00 1.033500e-05 3.491836e-06 7.490465e-08 147 1.470000e+00 1.048688e-05 3.653081e-06 9.694747e-08 148 1.480000e+00 1.063855e-05 3.813782e-06 1.245992e-07 149 1.490000e+00 1.079001e-05 3.974013e-06 1.587447e-07 150 1.500000e+00 1.094125e-05 4.133829e-06 2.000981e-07 151 1.510000e+00 1.109229e-05 4.293275e-06 2.490193e-07 152 1.520000e+00 1.124312e-05 4.452384e-06 3.053127e-07 153 1.530000e+00 1.139374e-05 4.611183e-06 3.680621e-07 154 1.540000e+00 1.154415e-05 4.769691e-06 4.355775e-07 155 1.550000e+00 1.169435e-05 4.927925e-06 5.055123e-07 156 1.560000e+00 1.184435e-05 5.085895e-06 5.798000e-07 157 1.570000e+00 1.199413e-05 5.243613e-06 6.741507e-07 158 1.580000e+00 1.214371e-05 5.401085e-06 7.881829e-07 159 1.590000e+00 1.229309e-05 5.558317e-06 9.203181e-07 160 1.600000e+00 1.244225e-05 5.715313e-06 1.069754e-06 161 1.610000e+00 1.259121e-05 5.872077e-06 1.236378e-06 162 1.620000e+00 1.273997e-05 6.028613e-06 1.420444e-06 163 1.630000e+00 1.288852e-05 6.184921e-06 1.607826e-06 164 1.640000e+00 1.303687e-05 6.341005e-06 1.789563e-06 165 1.650000e+00 1.318501e-05 6.496865e-06 1.966567e-06 166 1.660000e+00 1.333295e-05 6.652503e-06 2.139683e-06 167 1.670000e+00 1.348069e-05 6.807921e-06 2.309651e-06 168 1.680000e+00 1.362822e-05 6.963118e-06 2.477093e-06 169 1.690000e+00 1.377555e-05 7.118096e-06 2.642517e-06 170 1.700000e+00 1.392268e-05 7.272855e-06 2.806329e-06 Index v-sweep v1#branch v2#branch v3#branch -------------------------------------------------------------------------------- 171 1.710000e+00 1.406961e-05 7.427397e-06 2.968852e-06 172 1.720000e+00 1.421634e-05 7.581722e-06 3.130336e-06 173 1.730000e+00 1.436287e-05 7.735830e-06 3.290974e-06 174 1.740000e+00 1.450919e-05 7.889722e-06 3.450916e-06 175 1.750000e+00 1.465532e-05 8.043399e-06 3.610275e-06 176 1.760000e+00 1.480125e-05 8.196861e-06 3.769140e-06 177 1.770000e+00 1.494697e-05 8.350108e-06 3.927576e-06 178 1.780000e+00 1.509250e-05 8.503141e-06 4.085634e-06 179 1.790000e+00 1.523783e-05 8.655961e-06 4.243352e-06 180 1.800000e+00 1.538297e-05 8.808568e-06 4.400759e-06 181 1.810000e+00 1.552790e-05 8.960962e-06 4.557878e-06 182 1.820000e+00 1.567264e-05 9.113144e-06 4.714725e-06 183 1.830000e+00 1.581719e-05 9.265115e-06 4.871314e-06 184 1.840000e+00 1.596153e-05 9.416874e-06 5.027653e-06 185 1.850000e+00 1.610568e-05 9.568422e-06 5.183751e-06 186 1.860000e+00 1.624964e-05 9.719760e-06 5.339613e-06 187 1.870000e+00 1.639340e-05 9.870889e-06 5.495244e-06 188 1.880000e+00 1.653696e-05 1.002181e-05 5.650647e-06 189 1.890000e+00 1.668034e-05 1.017252e-05 5.805825e-06 190 1.900000e+00 1.682351e-05 1.032302e-05 5.960780e-06 191 1.910000e+00 1.696650e-05 1.047331e-05 6.115514e-06 192 1.920000e+00 1.710929e-05 1.062340e-05 6.270029e-06 193 1.930000e+00 1.725189e-05 1.077327e-05 6.424325e-06 194 1.940000e+00 1.739429e-05 1.092295e-05 6.578403e-06 195 1.950000e+00 1.753651e-05 1.107241e-05 6.732265e-06 196 1.960000e+00 1.767853e-05 1.122167e-05 6.885912e-06 197 1.970000e+00 1.782036e-05 1.137072e-05 7.039343e-06 198 1.980000e+00 1.796201e-05 1.151957e-05 7.192559e-06 199 1.990000e+00 1.810346e-05 1.166821e-05 7.345562e-06 200 2.000000e+00 1.824472e-05 1.181665e-05 7.498352e-06 201 2.010000e+00 1.838579e-05 1.196489e-05 7.650928e-06 202 2.020000e+00 1.852667e-05 1.211292e-05 7.803292e-06 203 2.030000e+00 1.866736e-05 1.226075e-05 7.955445e-06 204 2.040000e+00 1.880787e-05 1.240837e-05 8.107386e-06 205 2.050000e+00 1.894819e-05 1.255580e-05 8.259116e-06 206 2.060000e+00 1.908832e-05 1.270302e-05 8.410636e-06 207 2.070000e+00 1.922826e-05 1.285004e-05 8.561945e-06 208 2.080000e+00 1.936801e-05 1.299686e-05 8.713046e-06 209 2.090000e+00 1.950758e-05 1.314348e-05 8.863937e-06 210 2.100000e+00 1.964697e-05 1.328990e-05 9.014619e-06 211 2.110000e+00 1.978616e-05 1.343612e-05 9.165093e-06 212 2.120000e+00 1.992517e-05 1.358214e-05 9.315360e-06 213 2.130000e+00 2.006400e-05 1.372796e-05 9.465419e-06 214 2.140000e+00 2.020264e-05 1.387358e-05 9.615271e-06 215 2.150000e+00 2.034110e-05 1.401901e-05 9.764916e-06 216 2.160000e+00 2.047937e-05 1.416423e-05 9.914356e-06 217 2.170000e+00 2.061746e-05 1.430926e-05 1.006359e-05 218 2.180000e+00 2.075537e-05 1.445409e-05 1.021262e-05 219 2.190000e+00 2.089310e-05 1.459873e-05 1.036144e-05 220 2.200000e+00 2.103064e-05 1.474317e-05 1.051006e-05 221 2.210000e+00 2.116800e-05 1.488741e-05 1.065848e-05 222 2.220000e+00 2.130517e-05 1.503146e-05 1.080669e-05 223 2.230000e+00 2.144217e-05 1.517532e-05 1.095470e-05 224 2.240000e+00 2.157899e-05 1.531898e-05 1.110250e-05 225 2.250000e+00 2.171562e-05 1.546244e-05 1.125011e-05 226 2.260000e+00 2.185208e-05 1.560571e-05 1.139751e-05 227 2.270000e+00 2.198835e-05 1.574879e-05 1.154471e-05 228 2.280000e+00 2.212444e-05 1.589168e-05 1.169171e-05 Index v-sweep v1#branch v2#branch v3#branch -------------------------------------------------------------------------------- 229 2.290000e+00 2.226036e-05 1.603437e-05 1.183851e-05 230 2.300000e+00 2.239610e-05 1.617687e-05 1.198511e-05 231 2.310000e+00 2.253166e-05 1.631918e-05 1.213151e-05 232 2.320000e+00 2.266704e-05 1.646130e-05 1.227771e-05 233 2.330000e+00 2.280224e-05 1.660322e-05 1.242371e-05 234 2.340000e+00 2.293726e-05 1.674496e-05 1.256951e-05 235 2.350000e+00 2.307211e-05 1.688650e-05 1.271511e-05 236 2.360000e+00 2.320678e-05 1.702786e-05 1.286052e-05 237 2.370000e+00 2.334127e-05 1.716903e-05 1.300573e-05 238 2.380000e+00 2.347559e-05 1.731000e-05 1.315074e-05 239 2.390000e+00 2.360973e-05 1.745079e-05 1.329555e-05 240 2.400000e+00 2.374370e-05 1.759139e-05 1.344017e-05 241 2.410000e+00 2.387749e-05 1.773180e-05 1.358460e-05 242 2.420000e+00 2.401111e-05 1.787203e-05 1.372882e-05 243 2.430000e+00 2.414455e-05 1.801207e-05 1.387286e-05 244 2.440000e+00 2.427782e-05 1.815192e-05 1.401669e-05 245 2.450000e+00 2.441092e-05 1.829158e-05 1.416034e-05 246 2.460000e+00 2.454384e-05 1.843106e-05 1.430379e-05 247 2.470000e+00 2.467659e-05 1.857035e-05 1.444704e-05 248 2.480000e+00 2.480917e-05 1.870946e-05 1.459011e-05 249 2.490000e+00 2.494157e-05 1.884838e-05 1.473298e-05 250 2.500000e+00 2.507380e-05 1.898712e-05 1.487566e-05 251 2.510000e+00 2.520586e-05 1.912567e-05 1.501815e-05 252 2.520000e+00 2.533775e-05 1.926404e-05 1.516044e-05 253 2.530000e+00 2.546947e-05 1.940223e-05 1.530255e-05 254 2.540000e+00 2.560101e-05 1.954023e-05 1.544446e-05 255 2.550000e+00 2.573239e-05 1.967805e-05 1.558618e-05 256 2.560000e+00 2.586360e-05 1.981569e-05 1.572772e-05 257 2.570000e+00 2.599463e-05 1.995314e-05 1.586906e-05 258 2.580000e+00 2.612550e-05 2.009042e-05 1.601021e-05 259 2.590000e+00 2.625620e-05 2.022751e-05 1.615118e-05 260 2.600000e+00 2.638673e-05 2.036442e-05 1.629196e-05 261 2.610000e+00 2.651709e-05 2.050115e-05 1.643255e-05 262 2.620000e+00 2.664729e-05 2.063770e-05 1.657295e-05 263 2.630000e+00 2.677731e-05 2.077407e-05 1.671316e-05 264 2.640000e+00 2.690717e-05 2.091026e-05 1.685319e-05 265 2.650000e+00 2.703686e-05 2.104628e-05 1.699303e-05 266 2.660000e+00 2.716639e-05 2.118211e-05 1.713269e-05 267 2.670000e+00 2.729575e-05 2.131776e-05 1.727216e-05 268 2.680000e+00 2.742494e-05 2.145324e-05 1.741144e-05 269 2.690000e+00 2.755396e-05 2.158854e-05 1.755054e-05 270 2.700000e+00 2.768282e-05 2.172366e-05 1.768945e-05 271 2.710000e+00 2.781152e-05 2.185860e-05 1.782818e-05 272 2.720000e+00 2.794005e-05 2.199337e-05 1.796673e-05 273 2.730000e+00 2.806842e-05 2.212796e-05 1.810509e-05 274 2.740000e+00 2.819662e-05 2.226238e-05 1.824327e-05 275 2.750000e+00 2.832466e-05 2.239662e-05 1.838127e-05 276 2.760000e+00 2.845253e-05 2.253068e-05 1.851908e-05 277 2.770000e+00 2.858024e-05 2.266457e-05 1.865671e-05 278 2.780000e+00 2.870779e-05 2.279829e-05 1.879416e-05 279 2.790000e+00 2.883518e-05 2.293183e-05 1.893143e-05 280 2.800000e+00 2.896240e-05 2.306519e-05 1.906852e-05 281 2.810000e+00 2.908946e-05 2.319838e-05 1.920542e-05 282 2.820000e+00 2.921636e-05 2.333140e-05 1.934215e-05 283 2.830000e+00 2.934310e-05 2.346425e-05 1.947870e-05 284 2.840000e+00 2.946968e-05 2.359692e-05 1.961506e-05 285 2.850000e+00 2.959610e-05 2.372942e-05 1.975125e-05 286 2.860000e+00 2.972235e-05 2.386175e-05 1.988726e-05 Index v-sweep v1#branch v2#branch v3#branch -------------------------------------------------------------------------------- 287 2.870000e+00 2.984845e-05 2.399391e-05 2.002309e-05 288 2.880000e+00 2.997438e-05 2.412590e-05 2.015874e-05 289 2.890000e+00 3.010016e-05 2.425771e-05 2.029422e-05 290 2.900000e+00 3.022578e-05 2.438936e-05 2.042951e-05 291 2.910000e+00 3.035124e-05 2.452083e-05 2.056463e-05 292 2.920000e+00 3.047653e-05 2.465214e-05 2.069957e-05 293 2.930000e+00 3.060168e-05 2.478327e-05 2.083434e-05 294 2.940000e+00 3.072666e-05 2.491424e-05 2.096893e-05 295 2.950000e+00 3.085148e-05 2.504503e-05 2.110334e-05 296 2.960000e+00 3.097615e-05 2.517566e-05 2.123758e-05 297 2.970000e+00 3.110066e-05 2.530612e-05 2.137165e-05 298 2.980000e+00 3.122502e-05 2.543641e-05 2.150553e-05 299 2.990000e+00 3.134921e-05 2.556654e-05 2.163925e-05 300 3.000000e+00 3.147326e-05 2.569649e-05 2.177279e-05 301 3.010000e+00 3.159714e-05 2.582628e-05 2.190616e-05 302 3.020000e+00 3.172087e-05 2.595591e-05 2.203935e-05 303 3.030000e+00 3.184444e-05 2.608536e-05 2.217237e-05 304 3.040000e+00 3.196786e-05 2.621465e-05 2.230522e-05 305 3.050000e+00 3.209113e-05 2.634378e-05 2.243789e-05 306 3.060000e+00 3.221424e-05 2.647274e-05 2.257040e-05 307 3.070000e+00 3.233719e-05 2.660153e-05 2.270273e-05 308 3.080000e+00 3.245999e-05 2.673016e-05 2.283489e-05 309 3.090000e+00 3.258264e-05 2.685863e-05 2.296688e-05 310 3.100000e+00 3.270514e-05 2.698693e-05 2.309869e-05 311 3.110000e+00 3.282748e-05 2.711506e-05 2.323034e-05 312 3.120000e+00 3.294967e-05 2.724304e-05 2.336182e-05 313 3.130000e+00 3.307170e-05 2.737085e-05 2.349313e-05 314 3.140000e+00 3.319359e-05 2.749849e-05 2.362427e-05 315 3.150000e+00 3.331532e-05 2.762598e-05 2.375524e-05 316 3.160000e+00 3.343690e-05 2.775330e-05 2.388604e-05 317 3.170000e+00 3.355833e-05 2.788046e-05 2.401667e-05 318 3.180000e+00 3.367960e-05 2.800746e-05 2.414713e-05 319 3.190000e+00 3.380073e-05 2.813430e-05 2.427743e-05 320 3.200000e+00 3.392171e-05 2.826097e-05 2.440756e-05 321 3.210000e+00 3.404253e-05 2.838749e-05 2.453752e-05 322 3.220000e+00 3.416321e-05 2.851384e-05 2.466732e-05 323 3.230000e+00 3.428374e-05 2.864004e-05 2.479695e-05 324 3.240000e+00 3.440411e-05 2.876607e-05 2.492641e-05 325 3.250000e+00 3.452434e-05 2.889195e-05 2.505571e-05 326 3.260000e+00 3.464442e-05 2.901767e-05 2.518484e-05 327 3.270000e+00 3.476435e-05 2.914322e-05 2.531380e-05 328 3.280000e+00 3.488413e-05 2.926862e-05 2.544260e-05 329 3.290000e+00 3.500377e-05 2.939386e-05 2.557124e-05 330 3.300000e+00 3.512326e-05 2.951895e-05 2.569971e-05 331 3.310000e+00 3.524259e-05 2.964387e-05 2.582802e-05 332 3.320000e+00 3.536179e-05 2.976864e-05 2.595617e-05 333 3.330000e+00 3.548083e-05 2.989325e-05 2.608415e-05 334 3.340000e+00 3.559973e-05 3.001770e-05 2.621197e-05 335 3.350000e+00 3.571848e-05 3.014200e-05 2.633962e-05 336 3.360000e+00 3.583709e-05 3.026614e-05 2.646712e-05 337 3.370000e+00 3.595555e-05 3.039012e-05 2.659445e-05 338 3.380000e+00 3.607386e-05 3.051395e-05 2.672162e-05 339 3.390000e+00 3.619203e-05 3.063762e-05 2.684863e-05 340 3.400000e+00 3.631006e-05 3.076114e-05 2.697547e-05 341 3.410000e+00 3.642793e-05 3.088451e-05 2.710216e-05 342 3.420000e+00 3.654567e-05 3.100772e-05 2.722868e-05 343 3.430000e+00 3.666326e-05 3.113077e-05 2.735505e-05 344 3.440000e+00 3.678071e-05 3.125367e-05 2.748126e-05 Index v-sweep v1#branch v2#branch v3#branch -------------------------------------------------------------------------------- 345 3.450000e+00 3.689801e-05 3.137642e-05 2.760730e-05 346 3.460000e+00 3.701517e-05 3.149901e-05 2.773319e-05 347 3.470000e+00 3.713219e-05 3.162146e-05 2.785892e-05 348 3.480000e+00 3.724906e-05 3.174374e-05 2.798449e-05 349 3.490000e+00 3.736579e-05 3.186588e-05 2.810990e-05 350 3.500000e+00 3.748238e-05 3.198786e-05 2.823515e-05 351 3.510000e+00 3.759882e-05 3.210970e-05 2.836024e-05 352 3.520000e+00 3.771513e-05 3.223138e-05 2.848518e-05 353 3.530000e+00 3.783129e-05 3.235290e-05 2.860996e-05 354 3.540000e+00 3.794731e-05 3.247428e-05 2.873458e-05 355 3.550000e+00 3.806319e-05 3.259551e-05 2.885905e-05 356 3.560000e+00 3.817893e-05 3.271659e-05 2.898336e-05 357 3.570000e+00 3.829453e-05 3.283751e-05 2.910751e-05 358 3.580000e+00 3.840999e-05 3.295829e-05 2.923151e-05 359 3.590000e+00 3.852531e-05 3.307892e-05 2.935535e-05 360 3.600000e+00 3.864048e-05 3.319939e-05 2.947904e-05 361 3.610000e+00 3.875552e-05 3.331972e-05 2.960258e-05 362 3.620000e+00 3.887042e-05 3.343990e-05 2.972595e-05 363 3.630000e+00 3.898518e-05 3.355993e-05 2.984918e-05 364 3.640000e+00 3.909980e-05 3.367981e-05 2.997225e-05 365 3.650000e+00 3.921429e-05 3.379955e-05 3.009516e-05 366 3.660000e+00 3.932863e-05 3.391914e-05 3.021793e-05 367 3.670000e+00 3.944284e-05 3.403857e-05 3.034054e-05 368 3.680000e+00 3.955691e-05 3.415787e-05 3.046299e-05 369 3.690000e+00 3.967084e-05 3.427701e-05 3.058530e-05 370 3.700000e+00 3.978463e-05 3.439601e-05 3.070745e-05 371 3.710000e+00 3.989829e-05 3.451486e-05 3.082945e-05 372 3.720000e+00 4.001181e-05 3.463357e-05 3.095130e-05 373 3.730000e+00 4.012519e-05 3.475213e-05 3.107299e-05 374 3.740000e+00 4.023844e-05 3.487054e-05 3.119454e-05 375 3.750000e+00 4.035155e-05 3.498881e-05 3.131594e-05 376 3.760000e+00 4.046453e-05 3.510694e-05 3.143718e-05 377 3.770000e+00 4.057737e-05 3.522492e-05 3.155827e-05 378 3.780000e+00 4.069007e-05 3.534275e-05 3.167922e-05 379 3.790000e+00 4.080264e-05 3.546045e-05 3.180001e-05 380 3.800000e+00 4.091508e-05 3.557799e-05 3.192066e-05 381 3.810000e+00 4.102738e-05 3.569540e-05 3.204115e-05 382 3.820000e+00 4.113954e-05 3.581266e-05 3.216150e-05 383 3.830000e+00 4.125157e-05 3.592977e-05 3.228170e-05 384 3.840000e+00 4.136347e-05 3.604675e-05 3.240175e-05 385 3.850000e+00 4.147523e-05 3.616358e-05 3.252165e-05 386 3.860000e+00 4.158686e-05 3.628027e-05 3.264140e-05 387 3.870000e+00 4.169836e-05 3.639681e-05 3.276101e-05 388 3.880000e+00 4.180972e-05 3.651322e-05 3.288047e-05 389 3.890000e+00 4.192096e-05 3.662948e-05 3.299978e-05 390 3.900000e+00 4.203206e-05 3.674560e-05 3.311895e-05 391 3.910000e+00 4.214302e-05 3.686158e-05 3.323796e-05 392 3.920000e+00 4.225386e-05 3.697742e-05 3.335684e-05 393 3.930000e+00 4.236456e-05 3.709312e-05 3.347556e-05 394 3.940000e+00 4.247513e-05 3.720868e-05 3.359414e-05 395 3.950000e+00 4.258557e-05 3.732410e-05 3.371258e-05 396 3.960000e+00 4.269588e-05 3.743938e-05 3.383087e-05 397 3.970000e+00 4.280606e-05 3.755452e-05 3.394902e-05 398 3.980000e+00 4.291611e-05 3.766952e-05 3.406702e-05 399 3.990000e+00 4.302602e-05 3.778438e-05 3.418488e-05 400 4.000000e+00 4.313581e-05 3.789911e-05 3.430259e-05 401 4.010000e+00 4.324547e-05 3.801369e-05 3.442016e-05 402 4.020000e+00 4.335500e-05 3.812814e-05 3.453758e-05 Index v-sweep v1#branch v2#branch v3#branch -------------------------------------------------------------------------------- 403 4.030000e+00 4.346440e-05 3.824244e-05 3.465486e-05 404 4.040000e+00 4.357366e-05 3.835661e-05 3.477200e-05 405 4.050000e+00 4.368280e-05 3.847065e-05 3.488900e-05 406 4.060000e+00 4.379182e-05 3.858454e-05 3.500585e-05 407 4.070000e+00 4.390070e-05 3.869830e-05 3.512257e-05 408 4.080000e+00 4.400945e-05 3.881192e-05 3.523914e-05 409 4.090000e+00 4.411808e-05 3.892540e-05 3.535556e-05 410 4.100000e+00 4.422658e-05 3.903875e-05 3.547185e-05 411 4.110000e+00 4.433495e-05 3.915196e-05 3.558800e-05 412 4.120000e+00 4.444319e-05 3.926504e-05 3.570400e-05 413 4.130000e+00 4.455131e-05 3.937798e-05 3.581987e-05 414 4.140000e+00 4.465930e-05 3.949079e-05 3.593559e-05 415 4.150000e+00 4.476716e-05 3.960346e-05 3.605117e-05 416 4.160000e+00 4.487490e-05 3.971599e-05 3.616662e-05 417 4.170000e+00 4.498251e-05 3.982839e-05 3.628192e-05 418 4.180000e+00 4.508999e-05 3.994066e-05 3.639708e-05 419 4.190000e+00 4.519735e-05 4.005279e-05 3.651211e-05 420 4.200000e+00 4.530458e-05 4.016479e-05 3.662700e-05 421 4.210000e+00 4.541169e-05 4.027666e-05 3.674174e-05 422 4.220000e+00 4.551867e-05 4.038839e-05 3.685635e-05 423 4.230000e+00 4.562553e-05 4.049999e-05 3.697083e-05 424 4.240000e+00 4.573226e-05 4.061145e-05 3.708516e-05 425 4.250000e+00 4.583887e-05 4.072278e-05 3.719935e-05 426 4.260000e+00 4.594535e-05 4.083398e-05 3.731341e-05 427 4.270000e+00 4.605171e-05 4.094505e-05 3.742733e-05 428 4.280000e+00 4.615795e-05 4.105599e-05 3.754112e-05 429 4.290000e+00 4.626406e-05 4.116679e-05 3.765477e-05 430 4.300000e+00 4.637005e-05 4.127746e-05 3.776828e-05 431 4.310000e+00 4.647591e-05 4.138801e-05 3.788165e-05 432 4.320000e+00 4.658166e-05 4.149842e-05 3.799489e-05 433 4.330000e+00 4.668727e-05 4.160870e-05 3.810800e-05 434 4.340000e+00 4.679277e-05 4.171884e-05 3.822096e-05 435 4.350000e+00 4.689815e-05 4.182886e-05 3.833380e-05 436 4.360000e+00 4.700340e-05 4.193875e-05 3.844649e-05 437 4.370000e+00 4.710853e-05 4.204851e-05 3.855906e-05 438 4.380000e+00 4.721354e-05 4.215814e-05 3.867149e-05 439 4.390000e+00 4.731843e-05 4.226764e-05 3.878378e-05 440 4.400000e+00 4.742319e-05 4.237701e-05 3.889594e-05 441 4.410000e+00 4.752784e-05 4.248625e-05 3.900797e-05 442 4.420000e+00 4.763236e-05 4.259536e-05 3.911986e-05 443 4.430000e+00 4.773676e-05 4.270435e-05 3.923162e-05 444 4.440000e+00 4.784105e-05 4.281320e-05 3.934325e-05 445 4.450000e+00 4.794521e-05 4.292193e-05 3.945474e-05 446 4.460000e+00 4.804925e-05 4.303053e-05 3.956611e-05 447 4.470000e+00 4.815317e-05 4.313900e-05 3.967734e-05 448 4.480000e+00 4.825698e-05 4.324735e-05 3.978843e-05 449 4.490000e+00 4.836066e-05 4.335557e-05 3.989940e-05 450 4.500000e+00 4.846422e-05 4.346366e-05 4.001023e-05 451 4.510000e+00 4.856767e-05 4.357162e-05 4.012094e-05 452 4.520000e+00 4.867100e-05 4.367946e-05 4.023151e-05 453 4.530000e+00 4.877420e-05 4.378717e-05 4.034195e-05 454 4.540000e+00 4.887729e-05 4.389476e-05 4.045226e-05 455 4.550000e+00 4.898027e-05 4.400221e-05 4.056244e-05 456 4.560000e+00 4.908312e-05 4.410955e-05 4.067249e-05 457 4.570000e+00 4.918585e-05 4.421676e-05 4.078241e-05 458 4.580000e+00 4.928847e-05 4.432384e-05 4.089220e-05 459 4.590000e+00 4.939097e-05 4.443080e-05 4.100186e-05 460 4.600000e+00 4.949336e-05 4.453763e-05 4.111139e-05 Index v-sweep v1#branch v2#branch v3#branch -------------------------------------------------------------------------------- 461 4.610000e+00 4.959562e-05 4.464434e-05 4.122079e-05 462 4.620000e+00 4.969777e-05 4.475093e-05 4.133006e-05 463 4.630000e+00 4.979981e-05 4.485739e-05 4.143921e-05 464 4.640000e+00 4.990172e-05 4.496372e-05 4.154822e-05 465 4.650000e+00 5.000352e-05 4.506994e-05 4.165711e-05 466 4.660000e+00 5.010521e-05 4.517603e-05 4.176587e-05 467 4.670000e+00 5.020678e-05 4.528199e-05 4.187450e-05 468 4.680000e+00 5.030823e-05 4.538784e-05 4.198301e-05 469 4.690000e+00 5.040957e-05 4.549356e-05 4.209138e-05 470 4.700000e+00 5.051079e-05 4.559916e-05 4.219963e-05 471 4.710000e+00 5.061190e-05 4.570463e-05 4.230776e-05 472 4.720000e+00 5.071289e-05 4.580999e-05 4.241575e-05 473 4.730000e+00 5.081377e-05 4.591522e-05 4.252362e-05 474 4.740000e+00 5.091453e-05 4.602033e-05 4.263137e-05 475 4.750000e+00 5.101518e-05 4.612532e-05 4.273899e-05 476 4.760000e+00 5.111572e-05 4.623018e-05 4.284648e-05 477 4.770000e+00 5.121614e-05 4.633493e-05 4.295385e-05 478 4.780000e+00 5.131645e-05 4.643955e-05 4.306109e-05 479 4.790000e+00 5.141664e-05 4.654406e-05 4.316821e-05 480 4.800000e+00 5.151672e-05 4.664844e-05 4.327520e-05 481 4.810000e+00 5.161669e-05 4.675271e-05 4.338207e-05 482 4.820000e+00 5.171654e-05 4.685685e-05 4.348881e-05 483 4.830000e+00 5.181629e-05 4.696088e-05 4.359543e-05 484 4.840000e+00 5.191592e-05 4.706478e-05 4.370193e-05 485 4.850000e+00 5.201544e-05 4.716856e-05 4.380830e-05 486 4.860000e+00 5.211484e-05 4.727223e-05 4.391454e-05 487 4.870000e+00 5.221413e-05 4.737578e-05 4.402067e-05 488 4.880000e+00 5.231332e-05 4.747920e-05 4.412667e-05 489 4.890000e+00 5.241239e-05 4.758251e-05 4.423255e-05 490 4.900000e+00 5.251135e-05 4.768570e-05 4.433831e-05 491 4.910000e+00 5.261019e-05 4.778878e-05 4.444394e-05 492 4.920000e+00 5.270893e-05 4.789173e-05 4.454945e-05 493 4.930000e+00 5.280756e-05 4.799457e-05 4.465484e-05 494 4.940000e+00 5.290607e-05 4.809729e-05 4.476011e-05 495 4.950000e+00 5.300448e-05 4.819989e-05 4.486525e-05 496 4.960000e+00 5.310277e-05 4.830237e-05 4.497028e-05 497 4.970000e+00 5.320096e-05 4.840474e-05 4.507518e-05 498 4.980000e+00 5.329903e-05 4.850699e-05 4.517996e-05 499 4.990000e+00 5.339700e-05 4.860913e-05 4.528462e-05 500 5.000000e+00 5.349485e-05 4.871115e-05 4.538917e-05 Test of MOS BSIM1 implementation; DC transfer curve -------------------------------------------------------------------------------- Index v-sweep v4#branch v5#branch -------------------------------------------------------------------------------- 0 0.000000e+00 6.217924e-12 8.256587e-12 1 1.000000e-02 6.217924e-12 8.256587e-12 2 2.000000e-02 6.217924e-12 8.256587e-12 3 3.000000e-02 6.217924e-12 8.256587e-12 4 4.000000e-02 6.217924e-12 8.256587e-12 5 5.000000e-02 6.217924e-12 8.256587e-12 6 6.000000e-02 6.217924e-12 8.256587e-12 7 7.000000e-02 6.217924e-12 8.256587e-12 8 8.000000e-02 6.217924e-12 8.256587e-12 9 9.000000e-02 6.217924e-12 8.256587e-12 10 1.000000e-01 6.217924e-12 8.256587e-12 11 1.100000e-01 6.217924e-12 8.256587e-12 12 1.200000e-01 6.217924e-12 8.256587e-12 13 1.300000e-01 6.217924e-12 8.256587e-12 14 1.400000e-01 6.217924e-12 8.256587e-12 15 1.500000e-01 6.217924e-12 8.256587e-12 16 1.600000e-01 6.217924e-12 8.256587e-12 17 1.700000e-01 6.217924e-12 8.256587e-12 18 1.800000e-01 6.217924e-12 8.256587e-12 19 1.900000e-01 6.217924e-12 8.256587e-12 20 2.000000e-01 6.217924e-12 8.256587e-12 21 2.100000e-01 6.217924e-12 8.256587e-12 22 2.200000e-01 6.217924e-12 8.256587e-12 23 2.300000e-01 6.217924e-12 8.256587e-12 24 2.400000e-01 6.217924e-12 8.256587e-12 25 2.500000e-01 6.217924e-12 8.256587e-12 26 2.600000e-01 6.217924e-12 8.256587e-12 27 2.700000e-01 6.217924e-12 8.256587e-12 28 2.800000e-01 6.217924e-12 8.256587e-12 29 2.900000e-01 6.217924e-12 8.256587e-12 30 3.000000e-01 6.217924e-12 8.256587e-12 31 3.100000e-01 6.217924e-12 8.256587e-12 32 3.200000e-01 6.217924e-12 8.256587e-12 33 3.300000e-01 6.217924e-12 8.256587e-12 34 3.400000e-01 6.217924e-12 8.256587e-12 35 3.500000e-01 6.217924e-12 8.256587e-12 36 3.600000e-01 6.217924e-12 8.256587e-12 37 3.700000e-01 6.217924e-12 8.256587e-12 38 3.800000e-01 6.217924e-12 8.256587e-12 39 3.900000e-01 6.217924e-12 8.256587e-12 40 4.000000e-01 6.217924e-12 8.256587e-12 41 4.100000e-01 6.217924e-12 8.256587e-12 42 4.200000e-01 6.217924e-12 8.256587e-12 43 4.300000e-01 6.217924e-12 8.256587e-12 44 4.400000e-01 6.217924e-12 8.256587e-12 45 4.500000e-01 6.217924e-12 8.256587e-12 46 4.600000e-01 6.217924e-12 8.256587e-12 47 4.700000e-01 6.217924e-12 8.256587e-12 48 4.800000e-01 6.217924e-12 8.256587e-12 49 4.900000e-01 6.217924e-12 8.256587e-12 50 5.000000e-01 6.217924e-12 8.256587e-12 51 5.100000e-01 6.217924e-12 8.256587e-12 52 5.200000e-01 6.217924e-12 8.256587e-12 53 5.300000e-01 6.217924e-12 8.256587e-12 54 5.400000e-01 6.217924e-12 8.256587e-12 Index v-sweep v4#branch v5#branch -------------------------------------------------------------------------------- 55 5.500000e-01 6.217924e-12 8.256587e-12 56 5.600000e-01 6.217924e-12 8.256587e-12 57 5.700000e-01 6.217924e-12 8.256587e-12 58 5.800000e-01 6.217924e-12 8.256587e-12 59 5.900000e-01 6.217924e-12 8.256587e-12 60 6.000000e-01 6.217924e-12 8.256587e-12 61 6.100000e-01 6.217924e-12 8.256587e-12 62 6.200000e-01 6.217924e-12 8.256587e-12 63 6.300000e-01 6.217924e-12 8.256587e-12 64 6.400000e-01 6.217924e-12 8.256587e-12 65 6.500000e-01 6.217924e-12 8.256587e-12 66 6.600000e-01 6.217924e-12 8.256587e-12 67 6.700000e-01 6.217924e-12 8.256587e-12 68 6.800000e-01 6.217924e-12 8.256587e-12 69 6.900000e-01 6.217924e-12 8.256587e-12 70 7.000000e-01 6.217924e-12 8.256587e-12 71 7.100000e-01 6.217924e-12 8.256587e-12 72 7.200000e-01 6.217924e-12 8.256587e-12 73 7.300000e-01 6.217924e-12 8.256587e-12 74 7.400000e-01 6.217924e-12 8.256587e-12 75 7.500000e-01 6.217924e-12 8.256587e-12 76 7.600000e-01 6.217924e-12 8.256587e-12 77 7.700000e-01 6.217924e-12 8.256587e-12 78 7.800000e-01 6.217924e-12 8.256587e-12 79 7.900000e-01 6.217924e-12 8.256587e-12 80 8.000000e-01 6.217924e-12 8.256587e-12 81 8.100000e-01 6.217924e-12 8.256587e-12 82 8.200000e-01 6.217924e-12 8.256587e-12 83 8.300000e-01 6.217925e-12 8.256587e-12 84 8.400000e-01 6.217925e-12 8.256587e-12 85 8.500000e-01 6.217925e-12 8.256587e-12 86 8.600000e-01 6.217925e-12 8.256587e-12 87 8.700000e-01 6.217926e-12 8.256587e-12 88 8.800000e-01 6.217927e-12 8.256587e-12 89 8.900000e-01 6.217928e-12 8.256587e-12 90 9.000000e-01 6.217929e-12 8.256587e-12 91 9.100000e-01 6.217931e-12 8.256587e-12 92 9.200000e-01 6.217934e-12 8.256587e-12 93 9.300000e-01 6.217938e-12 8.256587e-12 94 9.400000e-01 6.217943e-12 8.256587e-12 95 9.500000e-01 6.217949e-12 8.256587e-12 96 9.600000e-01 6.217958e-12 8.256587e-12 97 9.700000e-01 6.217971e-12 8.256587e-12 98 9.800000e-01 6.217988e-12 8.256587e-12 99 9.900000e-01 6.218010e-12 8.256587e-12 100 1.000000e+00 6.218041e-12 8.256587e-12 101 1.010000e+00 6.218082e-12 8.256587e-12 102 1.020000e+00 6.218138e-12 8.256587e-12 103 1.030000e+00 6.218214e-12 8.256587e-12 104 1.040000e+00 6.218316e-12 8.256588e-12 105 1.050000e+00 6.218455e-12 8.256588e-12 106 1.060000e+00 6.218642e-12 8.256588e-12 107 1.070000e+00 6.218895e-12 8.256588e-12 108 1.080000e+00 6.219237e-12 8.256589e-12 109 1.090000e+00 6.219701e-12 8.256589e-12 110 1.100000e+00 6.220328e-12 8.256590e-12 111 1.110000e+00 6.221175e-12 8.256591e-12 112 1.120000e+00 6.222321e-12 8.256592e-12 Index v-sweep v4#branch v5#branch -------------------------------------------------------------------------------- 113 1.130000e+00 6.223872e-12 8.256594e-12 114 1.140000e+00 6.225970e-12 8.256597e-12 115 1.150000e+00 6.228808e-12 8.256601e-12 116 1.160000e+00 6.232646e-12 8.256607e-12 117 1.170000e+00 6.237838e-12 8.256614e-12 118 1.180000e+00 6.244860e-12 8.256625e-12 119 1.190000e+00 6.254359e-12 8.256639e-12 120 1.200000e+00 6.267208e-12 8.256659e-12 121 1.210000e+00 6.284587e-12 8.256687e-12 122 1.220000e+00 6.308096e-12 8.256725e-12 123 1.230000e+00 6.339894e-12 8.256778e-12 124 1.240000e+00 6.382905e-12 8.256851e-12 125 1.250000e+00 6.441085e-12 8.256952e-12 126 1.260000e+00 6.519781e-12 8.257092e-12 127 1.270000e+00 6.626228e-12 8.257286e-12 128 1.280000e+00 6.770212e-12 8.257554e-12 129 1.290000e+00 6.964971e-12 8.257925e-12 130 1.300000e+00 7.228410e-12 8.258439e-12 131 1.310000e+00 7.584748e-12 8.259150e-12 132 1.320000e+00 8.066744e-12 8.260134e-12 133 1.330000e+00 8.718711e-12 8.261496e-12 134 1.340000e+00 9.600587e-12 8.263380e-12 135 1.350000e+00 1.079345e-11 8.265988e-12 136 1.360000e+00 1.240695e-11 8.269596e-12 137 1.370000e+00 1.458943e-11 8.274591e-12 138 1.380000e+00 1.754153e-11 8.281503e-12 139 1.390000e+00 2.153464e-11 8.291068e-12 140 1.400000e+00 2.693582e-11 8.304304e-12 141 1.410000e+00 3.424158e-11 8.322623e-12 142 1.420000e+00 4.412348e-11 8.347974e-12 143 1.430000e+00 5.748982e-11 8.383057e-12 144 1.440000e+00 7.556910e-11 8.431608e-12 145 1.450000e+00 1.000228e-10 8.498798e-12 146 1.460000e+00 1.330980e-10 8.591782e-12 147 1.470000e+00 1.778334e-10 8.720463e-12 148 1.480000e+00 2.383378e-10 8.898543e-12 149 1.490000e+00 3.201668e-10 9.144988e-12 150 1.500000e+00 4.308307e-10 9.486041e-12 151 1.510000e+00 5.804798e-10 9.958024e-12 152 1.520000e+00 7.828297e-10 1.061120e-11 153 1.530000e+00 1.056405e-09 1.151512e-11 154 1.540000e+00 1.426215e-09 1.276606e-11 155 1.550000e+00 1.925997e-09 1.449722e-11 156 1.560000e+00 2.601223e-09 1.689296e-11 157 1.570000e+00 3.513101e-09 2.020840e-11 158 1.580000e+00 4.743879e-09 2.479659e-11 159 1.590000e+00 6.403825e-09 3.114610e-11 160 1.600000e+00 8.640297e-09 3.993303e-11 161 1.610000e+00 1.164938e-08 5.209299e-11 162 1.620000e+00 1.569050e-08 6.892062e-11 163 1.630000e+00 2.110410e-08 9.220739e-11 164 1.640000e+00 2.833221e-08 1.244321e-10 165 1.650000e+00 3.794020e-08 1.690243e-10 166 1.660000e+00 5.063644e-08 2.307287e-10 167 1.670000e+00 6.728332e-08 3.161086e-10 168 1.680000e+00 8.888851e-08 4.342414e-10 169 1.690000e+00 1.165604e-07 5.976788e-10 170 1.700000e+00 1.514086e-07 8.237706e-10 Index v-sweep v4#branch v5#branch -------------------------------------------------------------------------------- 171 1.710000e+00 1.943720e-07 1.136489e-09 172 1.720000e+00 2.459753e-07 1.568934e-09 173 1.730000e+00 3.060479e-07 2.166773e-09 174 1.740000e+00 3.734868e-07 2.992934e-09 175 1.750000e+00 4.461793e-07 4.133990e-09 176 1.760000e+00 5.211812e-07 5.708769e-09 177 1.770000e+00 6.041395e-07 7.879859e-09 178 1.780000e+00 7.077868e-07 1.086875e-08 179 1.790000e+00 8.299072e-07 1.497532e-08 180 1.800000e+00 9.689552e-07 2.060216e-08 181 1.810000e+00 1.124372e-06 2.828337e-08 182 1.820000e+00 1.296396e-06 3.871572e-08 183 1.830000e+00 1.482828e-06 5.278700e-08 184 1.840000e+00 1.665859e-06 7.159068e-08 185 1.850000e+00 1.843285e-06 9.640828e-08 186 1.860000e+00 2.016160e-06 1.286319e-07 187 1.870000e+00 2.185406e-06 1.695951e-07 188 1.880000e+00 2.351792e-06 2.202892e-07 189 1.890000e+00 2.515935e-06 2.809837e-07 190 1.900000e+00 2.678324e-06 3.508379e-07 191 1.910000e+00 2.839336e-06 4.276739e-07 192 1.920000e+00 2.999261e-06 5.080913e-07 193 1.930000e+00 3.158318e-06 5.940911e-07 194 1.940000e+00 3.316671e-06 6.997354e-07 195 1.950000e+00 3.474446e-06 8.230332e-07 196 1.960000e+00 3.631734e-06 9.620904e-07 197 1.970000e+00 3.788604e-06 1.116319e-06 198 1.980000e+00 3.945109e-06 1.286153e-06 199 1.990000e+00 4.101287e-06 1.470205e-06 200 2.000000e+00 4.257165e-06 1.650950e-06 201 2.010000e+00 4.412767e-06 1.825788e-06 202 2.020000e+00 4.568106e-06 1.995959e-06 203 2.030000e+00 4.723196e-06 2.162507e-06 204 2.040000e+00 4.878045e-06 2.326270e-06 205 2.050000e+00 5.032659e-06 2.487903e-06 206 2.060000e+00 5.187045e-06 2.647906e-06 207 2.070000e+00 5.341205e-06 2.806654e-06 208 2.080000e+00 5.495143e-06 2.964426e-06 209 2.090000e+00 5.648861e-06 3.121428e-06 210 2.100000e+00 5.802361e-06 3.277810e-06 211 2.110000e+00 5.955645e-06 3.433685e-06 212 2.120000e+00 6.108713e-06 3.589131e-06 213 2.130000e+00 6.261566e-06 3.744208e-06 214 2.140000e+00 6.414206e-06 3.898959e-06 215 2.150000e+00 6.566633e-06 4.053414e-06 216 2.160000e+00 6.718848e-06 4.207596e-06 217 2.170000e+00 6.870852e-06 4.361521e-06 218 2.180000e+00 7.022644e-06 4.515202e-06 219 2.190000e+00 7.174226e-06 4.668648e-06 220 2.200000e+00 7.325598e-06 4.821865e-06 221 2.210000e+00 7.476760e-06 4.974857e-06 222 2.220000e+00 7.627714e-06 5.127629e-06 223 2.230000e+00 7.778459e-06 5.280183e-06 224 2.240000e+00 7.928996e-06 5.432521e-06 225 2.250000e+00 8.079325e-06 5.584645e-06 226 2.260000e+00 8.229447e-06 5.736557e-06 227 2.270000e+00 8.379362e-06 5.888256e-06 228 2.280000e+00 8.529071e-06 6.039745e-06 Index v-sweep v4#branch v5#branch -------------------------------------------------------------------------------- 229 2.290000e+00 8.678574e-06 6.191024e-06 230 2.300000e+00 8.827872e-06 6.342093e-06 231 2.310000e+00 8.976964e-06 6.492953e-06 232 2.320000e+00 9.125852e-06 6.643605e-06 233 2.330000e+00 9.274536e-06 6.794049e-06 234 2.340000e+00 9.423016e-06 6.944286e-06 235 2.350000e+00 9.571292e-06 7.094317e-06 236 2.360000e+00 9.719366e-06 7.244140e-06 237 2.370000e+00 9.867237e-06 7.393758e-06 238 2.380000e+00 1.001491e-05 7.543171e-06 239 2.390000e+00 1.016237e-05 7.692379e-06 240 2.400000e+00 1.030964e-05 7.841381e-06 241 2.410000e+00 1.045670e-05 7.990180e-06 242 2.420000e+00 1.060357e-05 8.138775e-06 243 2.430000e+00 1.075023e-05 8.287167e-06 244 2.440000e+00 1.089670e-05 8.435356e-06 245 2.450000e+00 1.104296e-05 8.583343e-06 246 2.460000e+00 1.118903e-05 8.731127e-06 247 2.470000e+00 1.133490e-05 8.878710e-06 248 2.480000e+00 1.148057e-05 9.026091e-06 249 2.490000e+00 1.162604e-05 9.173272e-06 250 2.500000e+00 1.177132e-05 9.320252e-06 251 2.510000e+00 1.191640e-05 9.467032e-06 252 2.520000e+00 1.206128e-05 9.613613e-06 253 2.530000e+00 1.220597e-05 9.759995e-06 254 2.540000e+00 1.235046e-05 9.906178e-06 255 2.550000e+00 1.249475e-05 1.005216e-05 256 2.560000e+00 1.263885e-05 1.019795e-05 257 2.570000e+00 1.278276e-05 1.034354e-05 258 2.580000e+00 1.292647e-05 1.048893e-05 259 2.590000e+00 1.306999e-05 1.063412e-05 260 2.600000e+00 1.321331e-05 1.077912e-05 261 2.610000e+00 1.335645e-05 1.092393e-05 262 2.620000e+00 1.349939e-05 1.106853e-05 263 2.630000e+00 1.364213e-05 1.121294e-05 264 2.640000e+00 1.378469e-05 1.135716e-05 265 2.650000e+00 1.392705e-05 1.150118e-05 266 2.660000e+00 1.406923e-05 1.164501e-05 267 2.670000e+00 1.421121e-05 1.178865e-05 268 2.680000e+00 1.435301e-05 1.193209e-05 269 2.690000e+00 1.449461e-05 1.207534e-05 270 2.700000e+00 1.463602e-05 1.221840e-05 271 2.710000e+00 1.477725e-05 1.236126e-05 272 2.720000e+00 1.491828e-05 1.250393e-05 273 2.730000e+00 1.505913e-05 1.264642e-05 274 2.740000e+00 1.519979e-05 1.278871e-05 275 2.750000e+00 1.534026e-05 1.293081e-05 276 2.760000e+00 1.548055e-05 1.307272e-05 277 2.770000e+00 1.562065e-05 1.321444e-05 278 2.780000e+00 1.576056e-05 1.335597e-05 279 2.790000e+00 1.590029e-05 1.349731e-05 280 2.800000e+00 1.603983e-05 1.363846e-05 281 2.810000e+00 1.617918e-05 1.377943e-05 282 2.820000e+00 1.631835e-05 1.392021e-05 283 2.830000e+00 1.645734e-05 1.406080e-05 284 2.840000e+00 1.659614e-05 1.420120e-05 285 2.850000e+00 1.673476e-05 1.434142e-05 286 2.860000e+00 1.687319e-05 1.448145e-05 Index v-sweep v4#branch v5#branch -------------------------------------------------------------------------------- 287 2.870000e+00 1.701144e-05 1.462129e-05 288 2.880000e+00 1.714951e-05 1.476095e-05 289 2.890000e+00 1.728740e-05 1.490042e-05 290 2.900000e+00 1.742510e-05 1.503971e-05 291 2.910000e+00 1.756263e-05 1.517881e-05 292 2.920000e+00 1.769997e-05 1.531773e-05 293 2.930000e+00 1.783713e-05 1.545647e-05 294 2.940000e+00 1.797411e-05 1.559502e-05 295 2.950000e+00 1.811091e-05 1.573339e-05 296 2.960000e+00 1.824753e-05 1.587158e-05 297 2.970000e+00 1.838397e-05 1.600958e-05 298 2.980000e+00 1.852023e-05 1.614740e-05 299 2.990000e+00 1.865631e-05 1.628505e-05 300 3.000000e+00 1.879222e-05 1.642251e-05 301 3.010000e+00 1.892794e-05 1.655978e-05 302 3.020000e+00 1.906349e-05 1.669688e-05 303 3.030000e+00 1.919886e-05 1.683380e-05 304 3.040000e+00 1.933405e-05 1.697054e-05 305 3.050000e+00 1.946907e-05 1.710710e-05 306 3.060000e+00 1.960391e-05 1.724348e-05 307 3.070000e+00 1.973858e-05 1.737968e-05 308 3.080000e+00 1.987307e-05 1.751570e-05 309 3.090000e+00 2.000738e-05 1.765154e-05 310 3.100000e+00 2.014152e-05 1.778721e-05 311 3.110000e+00 2.027548e-05 1.792270e-05 312 3.120000e+00 2.040927e-05 1.805801e-05 313 3.130000e+00 2.054289e-05 1.819315e-05 314 3.140000e+00 2.067633e-05 1.832811e-05 315 3.150000e+00 2.080960e-05 1.846289e-05 316 3.160000e+00 2.094269e-05 1.859750e-05 317 3.170000e+00 2.107562e-05 1.873193e-05 318 3.180000e+00 2.120837e-05 1.886619e-05 319 3.190000e+00 2.134095e-05 1.900027e-05 320 3.200000e+00 2.147336e-05 1.913418e-05 321 3.210000e+00 2.160559e-05 1.926792e-05 322 3.220000e+00 2.173766e-05 1.940148e-05 323 3.230000e+00 2.186955e-05 1.953486e-05 324 3.240000e+00 2.200128e-05 1.966808e-05 325 3.250000e+00 2.213283e-05 1.980112e-05 326 3.260000e+00 2.226422e-05 1.993399e-05 327 3.270000e+00 2.239543e-05 2.006669e-05 328 3.280000e+00 2.252648e-05 2.019922e-05 329 3.290000e+00 2.265736e-05 2.033157e-05 330 3.300000e+00 2.278807e-05 2.046376e-05 331 3.310000e+00 2.291861e-05 2.059577e-05 332 3.320000e+00 2.304898e-05 2.072762e-05 333 3.330000e+00 2.317919e-05 2.085929e-05 334 3.340000e+00 2.330923e-05 2.099079e-05 335 3.350000e+00 2.343910e-05 2.112213e-05 336 3.360000e+00 2.356881e-05 2.125330e-05 337 3.370000e+00 2.369835e-05 2.138429e-05 338 3.380000e+00 2.382773e-05 2.151512e-05 339 3.390000e+00 2.395694e-05 2.164578e-05 340 3.400000e+00 2.408598e-05 2.177628e-05 341 3.410000e+00 2.421486e-05 2.190660e-05 342 3.420000e+00 2.434358e-05 2.203676e-05 343 3.430000e+00 2.447213e-05 2.216676e-05 344 3.440000e+00 2.460051e-05 2.229658e-05 Index v-sweep v4#branch v5#branch -------------------------------------------------------------------------------- 345 3.450000e+00 2.472874e-05 2.242624e-05 346 3.460000e+00 2.485680e-05 2.255574e-05 347 3.470000e+00 2.498470e-05 2.268507e-05 348 3.480000e+00 2.511243e-05 2.281423e-05 349 3.490000e+00 2.524000e-05 2.294323e-05 350 3.500000e+00 2.536741e-05 2.307206e-05 351 3.510000e+00 2.549466e-05 2.320074e-05 352 3.520000e+00 2.562175e-05 2.332924e-05 353 3.530000e+00 2.574868e-05 2.345759e-05 354 3.540000e+00 2.587544e-05 2.358577e-05 355 3.550000e+00 2.600205e-05 2.371378e-05 356 3.560000e+00 2.612850e-05 2.384164e-05 357 3.570000e+00 2.625478e-05 2.396933e-05 358 3.580000e+00 2.638091e-05 2.409686e-05 359 3.590000e+00 2.650687e-05 2.422423e-05 360 3.600000e+00 2.663268e-05 2.435144e-05 361 3.610000e+00 2.675833e-05 2.447848e-05 362 3.620000e+00 2.688382e-05 2.460537e-05 363 3.630000e+00 2.700916e-05 2.473210e-05 364 3.640000e+00 2.713433e-05 2.485866e-05 365 3.650000e+00 2.725935e-05 2.498507e-05 366 3.660000e+00 2.738421e-05 2.511131e-05 367 3.670000e+00 2.750891e-05 2.523740e-05 368 3.680000e+00 2.763346e-05 2.536333e-05 369 3.690000e+00 2.775785e-05 2.548910e-05 370 3.700000e+00 2.788209e-05 2.561471e-05 371 3.710000e+00 2.800617e-05 2.574016e-05 372 3.720000e+00 2.813009e-05 2.586546e-05 373 3.730000e+00 2.825386e-05 2.599059e-05 374 3.740000e+00 2.837747e-05 2.611557e-05 375 3.750000e+00 2.850093e-05 2.624040e-05 376 3.760000e+00 2.862424e-05 2.636507e-05 377 3.770000e+00 2.874739e-05 2.648958e-05 378 3.780000e+00 2.887039e-05 2.661393e-05 379 3.790000e+00 2.899323e-05 2.673813e-05 380 3.800000e+00 2.911593e-05 2.686218e-05 381 3.810000e+00 2.923846e-05 2.698607e-05 382 3.820000e+00 2.936085e-05 2.710980e-05 383 3.830000e+00 2.948308e-05 2.723338e-05 384 3.840000e+00 2.960517e-05 2.735681e-05 385 3.850000e+00 2.972710e-05 2.748008e-05 386 3.860000e+00 2.984888e-05 2.760320e-05 387 3.870000e+00 2.997051e-05 2.772616e-05 388 3.880000e+00 3.009198e-05 2.784897e-05 389 3.890000e+00 3.021331e-05 2.797163e-05 390 3.900000e+00 3.033449e-05 2.809414e-05 391 3.910000e+00 3.045551e-05 2.821649e-05 392 3.920000e+00 3.057639e-05 2.833869e-05 393 3.930000e+00 3.069712e-05 2.846075e-05 394 3.940000e+00 3.081770e-05 2.858265e-05 395 3.950000e+00 3.093813e-05 2.870439e-05 396 3.960000e+00 3.105841e-05 2.882599e-05 397 3.970000e+00 3.117854e-05 2.894744e-05 398 3.980000e+00 3.129853e-05 2.906874e-05 399 3.990000e+00 3.141836e-05 2.918988e-05 400 4.000000e+00 3.153805e-05 2.931088e-05 401 4.010000e+00 3.165759e-05 2.943173e-05 402 4.020000e+00 3.177699e-05 2.955243e-05 Index v-sweep v4#branch v5#branch -------------------------------------------------------------------------------- 403 4.030000e+00 3.189624e-05 2.967298e-05 404 4.040000e+00 3.201534e-05 2.979338e-05 405 4.050000e+00 3.213430e-05 2.991363e-05 406 4.060000e+00 3.225311e-05 3.003374e-05 407 4.070000e+00 3.237177e-05 3.015369e-05 408 4.080000e+00 3.249029e-05 3.027350e-05 409 4.090000e+00 3.260867e-05 3.039317e-05 410 4.100000e+00 3.272690e-05 3.051268e-05 411 4.110000e+00 3.284498e-05 3.063205e-05 412 4.120000e+00 3.296292e-05 3.075127e-05 413 4.130000e+00 3.308072e-05 3.087035e-05 414 4.140000e+00 3.319838e-05 3.098928e-05 415 4.150000e+00 3.331589e-05 3.110807e-05 416 4.160000e+00 3.343325e-05 3.122671e-05 417 4.170000e+00 3.355048e-05 3.134520e-05 418 4.180000e+00 3.366756e-05 3.146355e-05 419 4.190000e+00 3.378450e-05 3.158176e-05 420 4.200000e+00 3.390129e-05 3.169982e-05 421 4.210000e+00 3.401795e-05 3.181774e-05 422 4.220000e+00 3.413446e-05 3.193551e-05 423 4.230000e+00 3.425083e-05 3.205314e-05 424 4.240000e+00 3.436706e-05 3.217063e-05 425 4.250000e+00 3.448315e-05 3.228797e-05 426 4.260000e+00 3.459910e-05 3.240517e-05 427 4.270000e+00 3.471491e-05 3.252223e-05 428 4.280000e+00 3.483058e-05 3.263915e-05 429 4.290000e+00 3.494611e-05 3.275592e-05 430 4.300000e+00 3.506150e-05 3.287256e-05 431 4.310000e+00 3.517675e-05 3.298905e-05 432 4.320000e+00 3.529186e-05 3.310540e-05 433 4.330000e+00 3.540683e-05 3.322161e-05 434 4.340000e+00 3.552166e-05 3.333768e-05 435 4.350000e+00 3.563636e-05 3.345361e-05 436 4.360000e+00 3.575091e-05 3.356940e-05 437 4.370000e+00 3.586533e-05 3.368505e-05 438 4.380000e+00 3.597962e-05 3.380056e-05 439 4.390000e+00 3.609376e-05 3.391593e-05 440 4.400000e+00 3.620777e-05 3.403116e-05 441 4.410000e+00 3.632164e-05 3.414625e-05 442 4.420000e+00 3.643537e-05 3.426120e-05 443 4.430000e+00 3.654897e-05 3.437602e-05 444 4.440000e+00 3.666243e-05 3.449070e-05 445 4.450000e+00 3.677576e-05 3.460523e-05 446 4.460000e+00 3.688894e-05 3.471964e-05 447 4.470000e+00 3.700200e-05 3.483390e-05 448 4.480000e+00 3.711492e-05 3.494803e-05 449 4.490000e+00 3.722770e-05 3.506202e-05 450 4.500000e+00 3.734035e-05 3.517587e-05 451 4.510000e+00 3.745287e-05 3.528959e-05 452 4.520000e+00 3.756525e-05 3.540317e-05 453 4.530000e+00 3.767750e-05 3.551662e-05 454 4.540000e+00 3.778961e-05 3.562993e-05 455 4.550000e+00 3.790159e-05 3.574310e-05 456 4.560000e+00 3.801344e-05 3.585614e-05 457 4.570000e+00 3.812515e-05 3.596905e-05 458 4.580000e+00 3.823673e-05 3.608182e-05 459 4.590000e+00 3.834818e-05 3.619445e-05 460 4.600000e+00 3.845950e-05 3.630695e-05 Index v-sweep v4#branch v5#branch -------------------------------------------------------------------------------- 461 4.610000e+00 3.857068e-05 3.641932e-05 462 4.620000e+00 3.868173e-05 3.653155e-05 463 4.630000e+00 3.879266e-05 3.664365e-05 464 4.640000e+00 3.890345e-05 3.675562e-05 465 4.650000e+00 3.901410e-05 3.686745e-05 466 4.660000e+00 3.912463e-05 3.697916e-05 467 4.670000e+00 3.923503e-05 3.709072e-05 468 4.680000e+00 3.934530e-05 3.720216e-05 469 4.690000e+00 3.945543e-05 3.731346e-05 470 4.700000e+00 3.956544e-05 3.742464e-05 471 4.710000e+00 3.967532e-05 3.753568e-05 472 4.720000e+00 3.978506e-05 3.764659e-05 473 4.730000e+00 3.989468e-05 3.775737e-05 474 4.740000e+00 4.000417e-05 3.786801e-05 475 4.750000e+00 4.011353e-05 3.797853e-05 476 4.760000e+00 4.022276e-05 3.808892e-05 477 4.770000e+00 4.033187e-05 3.819917e-05 478 4.780000e+00 4.044084e-05 3.830930e-05 479 4.790000e+00 4.054969e-05 3.841930e-05 480 4.800000e+00 4.065841e-05 3.852917e-05 481 4.810000e+00 4.076700e-05 3.863890e-05 482 4.820000e+00 4.087547e-05 3.874851e-05 483 4.830000e+00 4.098381e-05 3.885799e-05 484 4.840000e+00 4.109202e-05 3.896734e-05 485 4.850000e+00 4.120010e-05 3.907657e-05 486 4.860000e+00 4.130806e-05 3.918566e-05 487 4.870000e+00 4.141589e-05 3.929463e-05 488 4.880000e+00 4.152360e-05 3.940347e-05 489 4.890000e+00 4.163118e-05 3.951218e-05 490 4.900000e+00 4.173864e-05 3.962077e-05 491 4.910000e+00 4.184597e-05 3.972922e-05 492 4.920000e+00 4.195317e-05 3.983756e-05 493 4.930000e+00 4.206025e-05 3.994576e-05 494 4.940000e+00 4.216721e-05 4.005384e-05 495 4.950000e+00 4.227404e-05 4.016179e-05 496 4.960000e+00 4.238075e-05 4.026962e-05 497 4.970000e+00 4.248733e-05 4.037732e-05 498 4.980000e+00 4.259379e-05 4.048489e-05 499 4.990000e+00 4.270013e-05 4.059234e-05 500 5.000000e+00 4.280634e-05 4.069967e-05 tmpk8ny_4pz/tests/bsim1/test.cir0000644000175000017500000000660613546075722017023 0ustar carstencarstenTest of MOS BSIM1 implementation; DC transfer curve ****************************************************************** MN1 13 2 0 4 NMOS L=10U W=50.0U AD=100P AS=100P PD=40U PS=40U MN2 23 2 0 5 NMOS L=10U W=50.0U AD=100P AS=100P PD=40U PS=40U MN3 33 2 0 6 NMOS L=10U W=50.0U AD=100P AS=100P PD=40U PS=40U MN4 43 2 0 7 NMOS L=10U W=50.0U AD=100P AS=100P PD=40U PS=40U MN5 53 2 0 8 NMOS L=10U W=50.0U AD=100P AS=100P PD=40U PS=40U VDS 3 0 0.05 VGS 2 0 0 V1 3 13 0 V2 3 23 0 V3 3 33 0 V4 3 43 0 V5 3 53 0 VBS1 4 0 0 VBS2 5 0 -1 VBS3 6 0 -2 VBS4 7 0 -3 VBS5 8 0 -4 *************************************************************** *.OPTIONS LIMPTS=5000 ACCT .OPTIONS NOACCT .DC VGS 0 5 0.01 .PRINT DC I(V1) I(V2) I(V3) I(V4) I(V5) *.PLOT DC I(V1) I(V2) I(V3) I(V4) I(V5) *.OPTIONS LIMPTS=501 ACCT *VGS 2 0 PWL(0 0 5 5) *.TRAN 0 5 0.01 *.PRINT TRAN I(V1) I(V2) I(V3) I(V4) I(V5) ***** MODEL PARAMETERS TEMP2 ******************** .MODEL NMOS NMOS + LEVEL = 4.00000E+000 + TOX = 3.00000E-002 + VDD = 5.00000E+000 + TEMP = 2.70000E+001 + DL = 7.97991E-001 + DW = 4.77402E-001 + VFB = -1.0087E+000 + PHI = 7.96434E-001 + K1 = 1.31191E+000 + K2 = 1.46640E-001 + ETA = -1.0027E-003 + MUZ = 5.34334E+002 + U0 = 4.38497E-002 + U1 = -5.7332E-002 + X2E = -7.6911E-004 + X3E = 7.86777E-004 + X2MZ = 8.25434E+000 + MUS = 5.40612E+002 + X2MS = -1.2992E+001 + X3MS = -9.4035E+000 + X2U0 = 1.06821E-003 + X2U1 = -1.9209E-002 + X3U1 = 7.76925E-003 + LVFB = -2.1402E-001 + WVFB = 3.44354E-001 + LK1 = 3.23395E-001 + WK1 = -5.7698E-001 + LK2 = 1.68585E-001 + WK2 = -1.8796E-001 + LETA = -9.4847E-003 + WETA = 1.47316E-002 + LU0 = 6.38105E-002 + WU0 = -6.1053E-002 + LU1 = 1.01174E+000 + WU1 = 1.62706E-002 + LX2E = 9.62411E-003 + WX2E = -3.7951E-003 + LX3E = 7.35448E-004 + WX3E = -1.7796E-003 + LX2MZ = -2.4197E+001 + WX2MZ = 1.95696E+001 + LMUS = 6.21401E+002 + WMUS = -1.9190E+002 + LX2MS = -6.4900E+001 + WX2MS = 4.29043E+001 + LX3MS = 1.18239E+002 + WX3MS = -2.9747E+001 + LX2U0 = -8.0958E-003 + WX2U0 = 4.03379E-003 + LX2U1 = -7.4573E-002 + WX2U1 = 1.47520E-002 + LX3U1 = -1.0940E-001 + WX3U1 = -8.3353E-003 + N0 = 1.55 + NB = 0.09 + ND = 0.0 + LN0 = 0.0 + WN0 = 0.0 + LNB = 0.0 + WNB = 0.0 + LND = 0.0 + WND = 0.0 + CGDO = 2.70000E-010 + CGSO = 2.70000E-010 + CGBO = 1.40000E-010 + XPART = 1.0 + RSH = 35.0 + CJ = 2.75E-4 + CJSW = 1.90E-10 + JS = 1.0E-8 + PB = 0.7 + PBSW = 0.8 + MJ = 0.5 + MJSW = 0.33 + WDF = 0.0 ***** ***** .END tmpk8ny_4pz/tests/mos6/0000755000175000017500000000000013546075722015206 5ustar carstencarstentmpk8ny_4pz/tests/mos6/Makefile.am0000644000175000017500000000042413546075722017242 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = \ mos6inv.cir \ simpleinv.cir TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/mos6/simpleinv.out0000644000175000017500000006224713546075722017760 0ustar carstencarsten Circuit: *** NDINV * 4 Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Initial Transient Solution -------------------------- Node Voltage ---- ------- 100 5 1 0 11 -6.97413e-17 12 -6.97413e-17 vin#branch 0 vdd#branch 0 *** NDINV * 4 Transient Analysis Sat Aug 27 16:32:01 2005 -------------------------------------------------------------------------------- Index time v(1) -------------------------------------------------------------------------------- 0 0.000000e+00 0.000000e+00 1 5.000000e-12 1.250000e-02 2 1.000000e-11 2.500000e-02 3 2.000000e-11 5.000000e-02 4 4.000000e-11 1.000000e-01 5 8.000000e-11 2.000000e-01 6 1.600000e-10 4.000000e-01 7 3.200000e-10 8.000000e-01 8 6.400000e-10 1.600000e+00 9 1.140000e-09 2.850000e+00 10 1.640000e-09 4.100000e+00 11 2.000000e-09 5.000000e+00 12 2.050000e-09 5.000000e+00 13 2.150000e-09 5.000000e+00 14 2.350000e-09 5.000000e+00 15 2.750000e-09 5.000000e+00 16 3.250000e-09 5.000000e+00 17 3.750000e-09 5.000000e+00 18 4.250000e-09 5.000000e+00 19 4.750000e-09 5.000000e+00 20 5.250000e-09 5.000000e+00 21 5.750000e-09 5.000000e+00 22 6.250000e-09 5.000000e+00 23 6.750000e-09 5.000000e+00 24 7.250000e-09 5.000000e+00 25 7.750000e-09 5.000000e+00 26 8.250000e-09 5.000000e+00 27 8.750000e-09 5.000000e+00 28 9.250000e-09 5.000000e+00 29 9.750000e-09 5.000000e+00 30 1.025000e-08 5.000000e+00 31 1.075000e-08 5.000000e+00 32 1.125000e-08 5.000000e+00 33 1.175000e-08 5.000000e+00 34 1.225000e-08 5.000000e+00 35 1.275000e-08 5.000000e+00 36 1.325000e-08 5.000000e+00 37 1.375000e-08 5.000000e+00 38 1.425000e-08 5.000000e+00 39 1.475000e-08 5.000000e+00 40 1.525000e-08 5.000000e+00 41 1.575000e-08 5.000000e+00 42 1.625000e-08 5.000000e+00 43 1.675000e-08 5.000000e+00 44 1.725000e-08 5.000000e+00 45 1.775000e-08 5.000000e+00 46 1.825000e-08 5.000000e+00 47 1.875000e-08 5.000000e+00 48 1.925000e-08 5.000000e+00 49 1.975000e-08 5.000000e+00 50 2.025000e-08 5.000000e+00 51 2.075000e-08 5.000000e+00 52 2.125000e-08 5.000000e+00 53 2.175000e-08 5.000000e+00 54 2.225000e-08 5.000000e+00 Index time v(1) -------------------------------------------------------------------------------- 55 2.275000e-08 5.000000e+00 56 2.325000e-08 5.000000e+00 57 2.375000e-08 5.000000e+00 58 2.425000e-08 5.000000e+00 59 2.475000e-08 5.000000e+00 60 2.525000e-08 5.000000e+00 61 2.575000e-08 5.000000e+00 62 2.625000e-08 5.000000e+00 63 2.675000e-08 5.000000e+00 64 2.725000e-08 5.000000e+00 65 2.775000e-08 5.000000e+00 66 2.825000e-08 5.000000e+00 67 2.875000e-08 5.000000e+00 68 2.925000e-08 5.000000e+00 69 2.975000e-08 5.000000e+00 70 3.025000e-08 5.000000e+00 71 3.075000e-08 5.000000e+00 72 3.125000e-08 5.000000e+00 73 3.175000e-08 5.000000e+00 74 3.225000e-08 5.000000e+00 75 3.275000e-08 5.000000e+00 76 3.325000e-08 5.000000e+00 77 3.375000e-08 5.000000e+00 78 3.425000e-08 5.000000e+00 79 3.475000e-08 5.000000e+00 80 3.525000e-08 5.000000e+00 81 3.575000e-08 5.000000e+00 82 3.625000e-08 5.000000e+00 83 3.675000e-08 5.000000e+00 84 3.725000e-08 5.000000e+00 85 3.775000e-08 5.000000e+00 86 3.825000e-08 5.000000e+00 87 3.875000e-08 5.000000e+00 88 3.925000e-08 5.000000e+00 89 3.975000e-08 5.000000e+00 90 4.025000e-08 5.000000e+00 91 4.075000e-08 5.000000e+00 92 4.125000e-08 5.000000e+00 93 4.175000e-08 5.000000e+00 94 4.225000e-08 5.000000e+00 95 4.275000e-08 5.000000e+00 96 4.325000e-08 5.000000e+00 97 4.375000e-08 5.000000e+00 98 4.425000e-08 5.000000e+00 99 4.475000e-08 5.000000e+00 100 4.525000e-08 5.000000e+00 101 4.575000e-08 5.000000e+00 102 4.625000e-08 5.000000e+00 103 4.675000e-08 5.000000e+00 104 4.725000e-08 5.000000e+00 105 4.775000e-08 5.000000e+00 106 4.825000e-08 5.000000e+00 107 4.875000e-08 5.000000e+00 108 4.925000e-08 5.000000e+00 109 4.975000e-08 5.000000e+00 110 5.025000e-08 5.000000e+00 111 5.075000e-08 5.000000e+00 112 5.125000e-08 5.000000e+00 Index time v(1) -------------------------------------------------------------------------------- 113 5.175000e-08 5.000000e+00 114 5.225000e-08 5.000000e+00 115 5.275000e-08 5.000000e+00 116 5.325000e-08 5.000000e+00 117 5.375000e-08 5.000000e+00 118 5.425000e-08 5.000000e+00 119 5.475000e-08 5.000000e+00 120 5.525000e-08 5.000000e+00 121 5.575000e-08 5.000000e+00 122 5.625000e-08 5.000000e+00 123 5.675000e-08 5.000000e+00 124 5.725000e-08 5.000000e+00 125 5.775000e-08 5.000000e+00 126 5.825000e-08 5.000000e+00 127 5.875000e-08 5.000000e+00 128 5.925000e-08 5.000000e+00 129 5.975000e-08 5.000000e+00 130 6.025000e-08 5.000000e+00 131 6.075000e-08 5.000000e+00 132 6.125000e-08 5.000000e+00 133 6.175000e-08 5.000000e+00 134 6.225000e-08 5.000000e+00 135 6.275000e-08 5.000000e+00 136 6.325000e-08 5.000000e+00 137 6.375000e-08 5.000000e+00 138 6.425000e-08 5.000000e+00 139 6.475000e-08 5.000000e+00 140 6.525000e-08 5.000000e+00 141 6.575000e-08 5.000000e+00 142 6.625000e-08 5.000000e+00 143 6.675000e-08 5.000000e+00 144 6.725000e-08 5.000000e+00 145 6.775000e-08 5.000000e+00 146 6.825000e-08 5.000000e+00 147 6.875000e-08 5.000000e+00 148 6.925000e-08 5.000000e+00 149 6.975000e-08 5.000000e+00 150 7.025000e-08 5.000000e+00 151 7.075000e-08 5.000000e+00 152 7.125000e-08 5.000000e+00 153 7.175000e-08 5.000000e+00 154 7.225000e-08 5.000000e+00 155 7.275000e-08 5.000000e+00 156 7.325000e-08 5.000000e+00 157 7.375000e-08 5.000000e+00 158 7.425000e-08 5.000000e+00 159 7.475000e-08 5.000000e+00 160 7.525000e-08 5.000000e+00 161 7.575000e-08 5.000000e+00 162 7.625000e-08 5.000000e+00 163 7.675000e-08 5.000000e+00 164 7.725000e-08 5.000000e+00 165 7.775000e-08 5.000000e+00 166 7.825000e-08 5.000000e+00 167 7.875000e-08 5.000000e+00 168 7.925000e-08 5.000000e+00 169 7.975000e-08 5.000000e+00 170 8.025000e-08 5.000000e+00 Index time v(1) -------------------------------------------------------------------------------- 171 8.075000e-08 5.000000e+00 172 8.125000e-08 5.000000e+00 173 8.175000e-08 5.000000e+00 174 8.225000e-08 5.000000e+00 175 8.275000e-08 5.000000e+00 176 8.325000e-08 5.000000e+00 177 8.375000e-08 5.000000e+00 178 8.425000e-08 5.000000e+00 179 8.475000e-08 5.000000e+00 180 8.525000e-08 5.000000e+00 181 8.575000e-08 5.000000e+00 182 8.625000e-08 5.000000e+00 183 8.675000e-08 5.000000e+00 184 8.725000e-08 5.000000e+00 185 8.775000e-08 5.000000e+00 186 8.825000e-08 5.000000e+00 187 8.875000e-08 5.000000e+00 188 8.925000e-08 5.000000e+00 189 8.975000e-08 5.000000e+00 190 9.025000e-08 5.000000e+00 191 9.075000e-08 5.000000e+00 192 9.125000e-08 5.000000e+00 193 9.175000e-08 5.000000e+00 194 9.225000e-08 5.000000e+00 195 9.275000e-08 5.000000e+00 196 9.325000e-08 5.000000e+00 197 9.375000e-08 5.000000e+00 198 9.425000e-08 5.000000e+00 199 9.475000e-08 5.000000e+00 200 9.525000e-08 5.000000e+00 201 9.575000e-08 5.000000e+00 202 9.625000e-08 5.000000e+00 203 9.675000e-08 5.000000e+00 204 9.725000e-08 5.000000e+00 205 9.775000e-08 5.000000e+00 206 9.825000e-08 5.000000e+00 207 9.875000e-08 5.000000e+00 208 9.925000e-08 5.000000e+00 209 9.975000e-08 5.000000e+00 210 1.002500e-07 5.000000e+00 211 1.007500e-07 5.000000e+00 212 1.012500e-07 5.000000e+00 213 1.017500e-07 5.000000e+00 214 1.022500e-07 5.000000e+00 215 1.027500e-07 5.000000e+00 216 1.032500e-07 5.000000e+00 217 1.037500e-07 5.000000e+00 218 1.042500e-07 5.000000e+00 219 1.047500e-07 5.000000e+00 220 1.052500e-07 5.000000e+00 221 1.057500e-07 5.000000e+00 222 1.062500e-07 5.000000e+00 223 1.067500e-07 5.000000e+00 224 1.072500e-07 5.000000e+00 225 1.077500e-07 5.000000e+00 226 1.082500e-07 5.000000e+00 227 1.087500e-07 5.000000e+00 228 1.092500e-07 5.000000e+00 Index time v(1) -------------------------------------------------------------------------------- 229 1.097500e-07 5.000000e+00 230 1.102500e-07 5.000000e+00 231 1.107500e-07 5.000000e+00 232 1.112500e-07 5.000000e+00 233 1.117500e-07 5.000000e+00 234 1.122500e-07 5.000000e+00 235 1.127500e-07 5.000000e+00 236 1.132500e-07 5.000000e+00 237 1.137500e-07 5.000000e+00 238 1.142500e-07 5.000000e+00 239 1.147500e-07 5.000000e+00 240 1.152500e-07 5.000000e+00 241 1.157500e-07 5.000000e+00 242 1.162500e-07 5.000000e+00 243 1.167500e-07 5.000000e+00 244 1.172500e-07 5.000000e+00 245 1.177500e-07 5.000000e+00 246 1.182500e-07 5.000000e+00 247 1.187500e-07 5.000000e+00 248 1.192500e-07 5.000000e+00 249 1.197500e-07 5.000000e+00 250 1.202500e-07 5.000000e+00 251 1.207500e-07 5.000000e+00 252 1.212500e-07 5.000000e+00 253 1.217500e-07 5.000000e+00 254 1.222500e-07 5.000000e+00 255 1.227500e-07 5.000000e+00 256 1.232500e-07 5.000000e+00 257 1.237500e-07 5.000000e+00 258 1.242500e-07 5.000000e+00 259 1.247500e-07 5.000000e+00 260 1.252500e-07 5.000000e+00 261 1.257500e-07 5.000000e+00 262 1.262500e-07 5.000000e+00 263 1.267500e-07 5.000000e+00 264 1.272500e-07 5.000000e+00 265 1.277500e-07 5.000000e+00 266 1.282500e-07 5.000000e+00 267 1.287500e-07 5.000000e+00 268 1.292500e-07 5.000000e+00 269 1.297500e-07 5.000000e+00 270 1.302500e-07 5.000000e+00 271 1.307500e-07 5.000000e+00 272 1.312500e-07 5.000000e+00 273 1.317500e-07 5.000000e+00 274 1.322500e-07 5.000000e+00 275 1.327500e-07 5.000000e+00 276 1.332500e-07 5.000000e+00 277 1.337500e-07 5.000000e+00 278 1.342500e-07 5.000000e+00 279 1.347500e-07 5.000000e+00 280 1.352500e-07 5.000000e+00 281 1.357500e-07 5.000000e+00 282 1.362500e-07 5.000000e+00 283 1.367500e-07 5.000000e+00 284 1.372500e-07 5.000000e+00 285 1.377500e-07 5.000000e+00 286 1.382500e-07 5.000000e+00 Index time v(1) -------------------------------------------------------------------------------- 287 1.387500e-07 5.000000e+00 288 1.392500e-07 5.000000e+00 289 1.397500e-07 5.000000e+00 290 1.402500e-07 5.000000e+00 291 1.407500e-07 5.000000e+00 292 1.412500e-07 5.000000e+00 293 1.417500e-07 5.000000e+00 294 1.422500e-07 5.000000e+00 295 1.427500e-07 5.000000e+00 296 1.432500e-07 5.000000e+00 297 1.437500e-07 5.000000e+00 298 1.442500e-07 5.000000e+00 299 1.447500e-07 5.000000e+00 300 1.452500e-07 5.000000e+00 301 1.457500e-07 5.000000e+00 302 1.462500e-07 5.000000e+00 303 1.467500e-07 5.000000e+00 304 1.472500e-07 5.000000e+00 305 1.477500e-07 5.000000e+00 306 1.482500e-07 5.000000e+00 307 1.487500e-07 5.000000e+00 308 1.492500e-07 5.000000e+00 309 1.497500e-07 5.000000e+00 310 1.500000e-07 5.000000e+00 *** NDINV * 4 Transient Analysis Sat Aug 27 16:32:01 2005 -------------------------------------------------------------------------------- Index time v(11) v(12) -------------------------------------------------------------------------------- 0 0.000000e+00 -6.974134e-17 -6.974134e-17 1 5.000000e-12 -2.301190e-19 -2.301190e-19 2 1.000000e-11 5.960820e-16 5.960820e-16 3 2.000000e-11 1.937113e-15 2.235461e-15 4 4.000000e-11 2.980001e-15 3.576901e-15 5 8.000000e-11 3.218990e-15 3.039871e-15 6 1.600000e-10 1.755070e-15 1.821422e-15 7 3.200000e-10 1.612877e-15 1.665574e-15 8 6.400000e-10 8.850733e-16 9.031725e-16 9 1.140000e-09 1.871906e-15 1.853606e-15 10 1.640000e-09 2.328445e-15 2.328445e-15 11 2.000000e-09 3.203473e-15 3.167152e-15 12 2.050000e-09 4.131995e-15 4.064132e-15 13 2.150000e-09 5.215717e-15 5.215717e-15 14 2.350000e-09 4.470615e-15 4.470615e-15 15 2.750000e-09 2.235307e-15 2.235307e-15 16 3.250000e-09 3.259823e-15 3.259823e-15 17 3.750000e-09 4.191201e-15 4.191201e-15 18 4.250000e-09 4.647740e-15 4.666040e-15 19 4.750000e-09 4.191201e-15 4.191201e-15 20 5.250000e-09 4.647740e-15 4.666040e-15 21 5.750000e-09 4.191201e-15 4.191201e-15 22 6.250000e-09 4.647740e-15 4.666040e-15 23 6.750000e-09 4.191201e-15 4.191201e-15 24 7.250000e-09 4.647740e-15 4.666040e-15 25 7.750000e-09 4.191201e-15 4.191201e-15 26 8.250000e-09 4.647740e-15 4.666040e-15 27 8.750000e-09 4.191201e-15 4.191201e-15 28 9.250000e-09 4.647740e-15 4.666040e-15 29 9.750000e-09 4.191201e-15 4.191201e-15 30 1.025000e-08 4.647740e-15 4.666040e-15 31 1.075000e-08 4.191201e-15 4.191201e-15 32 1.125000e-08 4.647740e-15 4.666040e-15 33 1.175000e-08 4.191201e-15 4.191201e-15 34 1.225000e-08 4.647740e-15 4.666040e-15 35 1.275000e-08 4.191201e-15 4.191201e-15 36 1.325000e-08 4.647740e-15 4.666040e-15 37 1.375000e-08 4.191201e-15 4.191201e-15 38 1.425000e-08 4.647740e-15 4.666040e-15 39 1.475000e-08 4.191201e-15 4.191201e-15 40 1.525000e-08 4.647740e-15 4.666040e-15 41 1.575000e-08 4.191201e-15 4.191201e-15 42 1.625000e-08 4.647740e-15 4.666040e-15 43 1.675000e-08 4.191201e-15 4.191201e-15 44 1.725000e-08 4.647740e-15 4.666040e-15 45 1.775000e-08 4.191201e-15 4.191201e-15 46 1.825000e-08 4.647740e-15 4.666040e-15 47 1.875000e-08 4.191201e-15 4.191201e-15 48 1.925000e-08 4.647740e-15 4.666040e-15 49 1.975000e-08 4.191201e-15 4.191201e-15 50 2.025000e-08 4.647740e-15 4.666040e-15 51 2.075000e-08 4.191201e-15 4.191201e-15 52 2.125000e-08 4.647740e-15 4.666040e-15 53 2.175000e-08 4.191201e-15 4.191201e-15 54 2.225000e-08 4.647740e-15 4.666040e-15 Index time v(11) v(12) -------------------------------------------------------------------------------- 55 2.275000e-08 4.191201e-15 4.191201e-15 56 2.325000e-08 4.647740e-15 4.666040e-15 57 2.375000e-08 4.191201e-15 4.191201e-15 58 2.425000e-08 4.647740e-15 4.666040e-15 59 2.475000e-08 4.191201e-15 4.191201e-15 60 2.525000e-08 4.647740e-15 4.666040e-15 61 2.575000e-08 4.191201e-15 4.191201e-15 62 2.625000e-08 4.647740e-15 4.666040e-15 63 2.675000e-08 4.191201e-15 4.191201e-15 64 2.725000e-08 4.647740e-15 4.666040e-15 65 2.775000e-08 4.191201e-15 4.191201e-15 66 2.825000e-08 4.647740e-15 4.666040e-15 67 2.875000e-08 4.191201e-15 4.191201e-15 68 2.925000e-08 4.647740e-15 4.666040e-15 69 2.975000e-08 4.191201e-15 4.191201e-15 70 3.025000e-08 4.647740e-15 4.666040e-15 71 3.075000e-08 4.191201e-15 4.191201e-15 72 3.125000e-08 4.647740e-15 4.666040e-15 73 3.175000e-08 4.191201e-15 4.191201e-15 74 3.225000e-08 4.647740e-15 4.666040e-15 75 3.275000e-08 4.191201e-15 4.191201e-15 76 3.325000e-08 4.647740e-15 4.666040e-15 77 3.375000e-08 4.191201e-15 4.191201e-15 78 3.425000e-08 4.647740e-15 4.666040e-15 79 3.475000e-08 4.191201e-15 4.191201e-15 80 3.525000e-08 4.647740e-15 4.666040e-15 81 3.575000e-08 4.191201e-15 4.191201e-15 82 3.625000e-08 4.647740e-15 4.666040e-15 83 3.675000e-08 4.191201e-15 4.191201e-15 84 3.725000e-08 4.647740e-15 4.666040e-15 85 3.775000e-08 4.191201e-15 4.191201e-15 86 3.825000e-08 4.647740e-15 4.666040e-15 87 3.875000e-08 4.191201e-15 4.191201e-15 88 3.925000e-08 4.647740e-15 4.666040e-15 89 3.975000e-08 4.191201e-15 4.191201e-15 90 4.025000e-08 4.647740e-15 4.666040e-15 91 4.075000e-08 4.191201e-15 4.191201e-15 92 4.125000e-08 4.647740e-15 4.666040e-15 93 4.175000e-08 4.191201e-15 4.191201e-15 94 4.225000e-08 4.647740e-15 4.666040e-15 95 4.275000e-08 4.191201e-15 4.191201e-15 96 4.325000e-08 4.647740e-15 4.666040e-15 97 4.375000e-08 4.191201e-15 4.191201e-15 98 4.425000e-08 4.647740e-15 4.666040e-15 99 4.475000e-08 4.191201e-15 4.191201e-15 100 4.525000e-08 4.647740e-15 4.666040e-15 101 4.575000e-08 4.191201e-15 4.191201e-15 102 4.625000e-08 4.647740e-15 4.666040e-15 103 4.675000e-08 4.191201e-15 4.191201e-15 104 4.725000e-08 4.647740e-15 4.666040e-15 105 4.775000e-08 4.191201e-15 4.191201e-15 106 4.825000e-08 4.647740e-15 4.666040e-15 107 4.875000e-08 4.191201e-15 4.191201e-15 108 4.925000e-08 4.647740e-15 4.666040e-15 109 4.975000e-08 4.191201e-15 4.191201e-15 110 5.025000e-08 4.647740e-15 4.666040e-15 111 5.075000e-08 4.191201e-15 4.191201e-15 112 5.125000e-08 4.647740e-15 4.666040e-15 Index time v(11) v(12) -------------------------------------------------------------------------------- 113 5.175000e-08 4.191201e-15 4.191201e-15 114 5.225000e-08 4.647740e-15 4.666040e-15 115 5.275000e-08 4.191201e-15 4.191201e-15 116 5.325000e-08 4.647740e-15 4.666040e-15 117 5.375000e-08 4.191201e-15 4.191201e-15 118 5.425000e-08 4.647740e-15 4.666040e-15 119 5.475000e-08 4.191201e-15 4.191201e-15 120 5.525000e-08 4.647740e-15 4.666040e-15 121 5.575000e-08 4.191201e-15 4.191201e-15 122 5.625000e-08 4.647740e-15 4.666040e-15 123 5.675000e-08 4.191201e-15 4.191201e-15 124 5.725000e-08 4.647740e-15 4.666040e-15 125 5.775000e-08 4.191201e-15 4.191201e-15 126 5.825000e-08 4.647740e-15 4.666040e-15 127 5.875000e-08 4.191201e-15 4.191201e-15 128 5.925000e-08 4.647740e-15 4.666040e-15 129 5.975000e-08 4.191201e-15 4.191201e-15 130 6.025000e-08 4.647740e-15 4.666040e-15 131 6.075000e-08 4.191201e-15 4.191201e-15 132 6.125000e-08 4.647740e-15 4.666040e-15 133 6.175000e-08 4.191201e-15 4.191201e-15 134 6.225000e-08 4.647740e-15 4.666040e-15 135 6.275000e-08 4.191201e-15 4.191201e-15 136 6.325000e-08 4.647740e-15 4.666040e-15 137 6.375000e-08 4.191201e-15 4.191201e-15 138 6.425000e-08 4.647740e-15 4.666040e-15 139 6.475000e-08 4.191201e-15 4.191201e-15 140 6.525000e-08 4.647740e-15 4.666040e-15 141 6.575000e-08 4.191201e-15 4.191201e-15 142 6.625000e-08 4.647740e-15 4.666040e-15 143 6.675000e-08 4.191201e-15 4.191201e-15 144 6.725000e-08 4.647740e-15 4.666040e-15 145 6.775000e-08 4.191201e-15 4.191201e-15 146 6.825000e-08 4.647740e-15 4.666040e-15 147 6.875000e-08 4.191201e-15 4.191201e-15 148 6.925000e-08 4.647740e-15 4.666040e-15 149 6.975000e-08 4.191201e-15 4.191201e-15 150 7.025000e-08 4.647740e-15 4.666040e-15 151 7.075000e-08 4.191201e-15 4.191201e-15 152 7.125000e-08 4.647740e-15 4.666040e-15 153 7.175000e-08 4.191201e-15 4.191201e-15 154 7.225000e-08 4.647740e-15 4.666040e-15 155 7.275000e-08 4.191201e-15 4.191201e-15 156 7.325000e-08 4.647740e-15 4.666040e-15 157 7.375000e-08 4.191201e-15 4.191201e-15 158 7.425000e-08 4.647740e-15 4.666040e-15 159 7.475000e-08 4.191201e-15 4.191201e-15 160 7.525000e-08 4.647740e-15 4.666040e-15 161 7.575000e-08 4.191201e-15 4.191201e-15 162 7.625000e-08 4.647740e-15 4.666040e-15 163 7.675000e-08 4.191201e-15 4.191201e-15 164 7.725000e-08 4.647740e-15 4.666040e-15 165 7.775000e-08 4.191201e-15 4.191201e-15 166 7.825000e-08 4.647740e-15 4.666040e-15 167 7.875000e-08 4.191201e-15 4.191201e-15 168 7.925000e-08 4.647740e-15 4.666040e-15 169 7.975000e-08 4.191201e-15 4.191201e-15 170 8.025000e-08 4.647740e-15 4.666040e-15 Index time v(11) v(12) -------------------------------------------------------------------------------- 171 8.075000e-08 4.191201e-15 4.191201e-15 172 8.125000e-08 4.647740e-15 4.666040e-15 173 8.175000e-08 4.191201e-15 4.191201e-15 174 8.225000e-08 4.647740e-15 4.666040e-15 175 8.275000e-08 4.191201e-15 4.191201e-15 176 8.325000e-08 4.647740e-15 4.666040e-15 177 8.375000e-08 4.191201e-15 4.191201e-15 178 8.425000e-08 4.647740e-15 4.666040e-15 179 8.475000e-08 4.191201e-15 4.191201e-15 180 8.525000e-08 4.647740e-15 4.666040e-15 181 8.575000e-08 4.191201e-15 4.191201e-15 182 8.625000e-08 4.647740e-15 4.666040e-15 183 8.675000e-08 4.191201e-15 4.191201e-15 184 8.725000e-08 4.647740e-15 4.666040e-15 185 8.775000e-08 4.191201e-15 4.191201e-15 186 8.825000e-08 4.647740e-15 4.666040e-15 187 8.875000e-08 4.191201e-15 4.191201e-15 188 8.925000e-08 4.647740e-15 4.666040e-15 189 8.975000e-08 4.191201e-15 4.191201e-15 190 9.025000e-08 4.647740e-15 4.666040e-15 191 9.075000e-08 4.191201e-15 4.191201e-15 192 9.125000e-08 4.647740e-15 4.666040e-15 193 9.175000e-08 4.191201e-15 4.191201e-15 194 9.225000e-08 4.647740e-15 4.666040e-15 195 9.275000e-08 4.191201e-15 4.191201e-15 196 9.325000e-08 4.647740e-15 4.666040e-15 197 9.375000e-08 4.191201e-15 4.191201e-15 198 9.425000e-08 4.647740e-15 4.666040e-15 199 9.475000e-08 4.191201e-15 4.191201e-15 200 9.525000e-08 4.647740e-15 4.666040e-15 201 9.575000e-08 4.191201e-15 4.191201e-15 202 9.625000e-08 4.647740e-15 4.666040e-15 203 9.675000e-08 4.191201e-15 4.191201e-15 204 9.725000e-08 4.647740e-15 4.666040e-15 205 9.775000e-08 4.191201e-15 4.191201e-15 206 9.825000e-08 4.647740e-15 4.666040e-15 207 9.875000e-08 4.191201e-15 4.191201e-15 208 9.925000e-08 4.647740e-15 4.666040e-15 209 9.975000e-08 4.191201e-15 4.191201e-15 210 1.002500e-07 4.647740e-15 4.666040e-15 211 1.007500e-07 4.191201e-15 4.191201e-15 212 1.012500e-07 4.647740e-15 4.666040e-15 213 1.017500e-07 4.191201e-15 4.191201e-15 214 1.022500e-07 4.647740e-15 4.666040e-15 215 1.027500e-07 4.191201e-15 4.191201e-15 216 1.032500e-07 4.647740e-15 4.666040e-15 217 1.037500e-07 4.191201e-15 4.191201e-15 218 1.042500e-07 4.647740e-15 4.666040e-15 219 1.047500e-07 4.191201e-15 4.191201e-15 220 1.052500e-07 4.647740e-15 4.666040e-15 221 1.057500e-07 4.191201e-15 4.191201e-15 222 1.062500e-07 4.647740e-15 4.666040e-15 223 1.067500e-07 4.191201e-15 4.191201e-15 224 1.072500e-07 4.647740e-15 4.666040e-15 225 1.077500e-07 4.191201e-15 4.191201e-15 226 1.082500e-07 4.647740e-15 4.666040e-15 227 1.087500e-07 4.191201e-15 4.191201e-15 228 1.092500e-07 4.647740e-15 4.666040e-15 Index time v(11) v(12) -------------------------------------------------------------------------------- 229 1.097500e-07 4.191201e-15 4.191201e-15 230 1.102500e-07 4.647740e-15 4.666040e-15 231 1.107500e-07 4.191201e-15 4.191201e-15 232 1.112500e-07 4.647740e-15 4.666040e-15 233 1.117500e-07 4.191201e-15 4.191201e-15 234 1.122500e-07 4.647740e-15 4.666040e-15 235 1.127500e-07 4.191201e-15 4.191201e-15 236 1.132500e-07 4.647740e-15 4.666040e-15 237 1.137500e-07 4.191201e-15 4.191201e-15 238 1.142500e-07 4.647740e-15 4.666040e-15 239 1.147500e-07 4.191201e-15 4.191201e-15 240 1.152500e-07 4.647740e-15 4.666040e-15 241 1.157500e-07 4.191201e-15 4.191201e-15 242 1.162500e-07 4.647740e-15 4.666040e-15 243 1.167500e-07 4.191201e-15 4.191201e-15 244 1.172500e-07 4.647740e-15 4.666040e-15 245 1.177500e-07 4.191201e-15 4.191201e-15 246 1.182500e-07 4.647740e-15 4.666040e-15 247 1.187500e-07 4.191201e-15 4.191201e-15 248 1.192500e-07 4.647740e-15 4.666040e-15 249 1.197500e-07 4.191201e-15 4.191201e-15 250 1.202500e-07 4.647740e-15 4.666040e-15 251 1.207500e-07 4.191201e-15 4.191201e-15 252 1.212500e-07 4.647740e-15 4.666040e-15 253 1.217500e-07 4.191201e-15 4.191201e-15 254 1.222500e-07 4.647740e-15 4.666040e-15 255 1.227500e-07 4.191201e-15 4.191201e-15 256 1.232500e-07 4.647740e-15 4.666040e-15 257 1.237500e-07 4.191201e-15 4.191201e-15 258 1.242500e-07 4.647740e-15 4.666040e-15 259 1.247500e-07 4.191201e-15 4.191201e-15 260 1.252500e-07 4.647740e-15 4.666040e-15 261 1.257500e-07 4.191201e-15 4.191201e-15 262 1.262500e-07 4.647740e-15 4.666040e-15 263 1.267500e-07 4.191201e-15 4.191201e-15 264 1.272500e-07 4.647740e-15 4.666040e-15 265 1.277500e-07 4.191201e-15 4.191201e-15 266 1.282500e-07 4.647740e-15 4.666040e-15 267 1.287500e-07 4.191201e-15 4.191201e-15 268 1.292500e-07 4.647740e-15 4.666040e-15 269 1.297500e-07 4.191201e-15 4.191201e-15 270 1.302500e-07 4.647740e-15 4.666040e-15 271 1.307500e-07 4.191201e-15 4.191201e-15 272 1.312500e-07 4.647740e-15 4.666040e-15 273 1.317500e-07 4.191201e-15 4.191201e-15 274 1.322500e-07 4.647740e-15 4.666040e-15 275 1.327500e-07 4.191201e-15 4.191201e-15 276 1.332500e-07 4.647740e-15 4.666040e-15 277 1.337500e-07 4.191201e-15 4.191201e-15 278 1.342500e-07 4.647740e-15 4.666040e-15 279 1.347500e-07 4.191201e-15 4.191201e-15 280 1.352500e-07 4.647740e-15 4.666040e-15 281 1.357500e-07 4.191201e-15 4.191201e-15 282 1.362500e-07 4.647740e-15 4.666040e-15 283 1.367500e-07 4.191201e-15 4.191201e-15 284 1.372500e-07 4.647740e-15 4.666040e-15 285 1.377500e-07 4.191201e-15 4.191201e-15 286 1.382500e-07 4.647740e-15 4.666040e-15 Index time v(11) v(12) -------------------------------------------------------------------------------- 287 1.387500e-07 4.191201e-15 4.191201e-15 288 1.392500e-07 4.647740e-15 4.666040e-15 289 1.397500e-07 4.191201e-15 4.191201e-15 290 1.402500e-07 4.647740e-15 4.666040e-15 291 1.407500e-07 4.191201e-15 4.191201e-15 292 1.412500e-07 4.647740e-15 4.666040e-15 293 1.417500e-07 4.191201e-15 4.191201e-15 294 1.422500e-07 4.647740e-15 4.666040e-15 295 1.427500e-07 4.191201e-15 4.191201e-15 296 1.432500e-07 4.647740e-15 4.666040e-15 297 1.437500e-07 4.191201e-15 4.191201e-15 298 1.442500e-07 4.647740e-15 4.666040e-15 299 1.447500e-07 4.191201e-15 4.191201e-15 300 1.452500e-07 4.647740e-15 4.666040e-15 301 1.457500e-07 4.191201e-15 4.191201e-15 302 1.462500e-07 4.647740e-15 4.666040e-15 303 1.467500e-07 4.191201e-15 4.191201e-15 304 1.472500e-07 4.647740e-15 4.666040e-15 305 1.477500e-07 4.191201e-15 4.191201e-15 306 1.482500e-07 4.647740e-15 4.666040e-15 307 1.487500e-07 4.191201e-15 4.191201e-15 308 1.492500e-07 4.647740e-15 4.666040e-15 309 1.497500e-07 4.191201e-15 4.191201e-15 310 1.500000e-07 4.558415e-15 4.522521e-15 CPU time since last call: 0.029 seconds. Total CPU time: 0.029 seconds. Current dynamic memory usage = 135168, Dynamic memory limit = -491521. tmpk8ny_4pz/tests/mos6/simpleinv.cir0000644000175000017500000000245113546075722017715 0ustar carstencarsten*** NDINV * 4 VDD 100 0 5 VIN 1 0 DC 0 PWL(0 0 150N 5) MP10 11 1 100 100 p12l5 L=1.0U W=5U MN11 11 1 0 0 N10L5 L=1.0U W=5U .TRAN 0.5N 150N .PRINT TRAN V(1) V(11) .OPTIONS NOACCT **** LEVEL 1 NMOS **** .MODEL N10L1 NMOS + LEVEL=1 TPG=1 + KP=2.33082E-05 + LAMBDA=0.013333 VT0=0.69486 GAMMA=0.60309 PHI=1 + TOX=1.9800000E-08 LD=0.1U NSUB=4.9999999E+16 + NSS=0.0000000E+00 + CJ=4.091E-4 MJ=0.307 PB=1.0 + CJSW=3.078E-10 MJSW=1.0E-2 + CGSO=3.93E-10 CGDO=3.93E-10 **** LEVEL 6 NMOS **** .MODEL N10L5 NMOS + LEVEL=6 TPG=1 + KC=3.8921e-05 NC=1.1739 KV=0.91602 NV=0.87225 + LAMBDA0=0.013333 LAMBDA1=0.0046901 VT0=0.69486 GAMMA=0.60309 PHI=1 + TOX=1.9800000E-08 LD=0.1U NSUB=4.9999999E+16 + NSS=0.0000000E+00 + CJ=4.091E-4 MJ=0.307 PB=1.0 + CJSW=3.078E-10 MJSW=1.0E-2 + CGSO=3.93E-10 CGDO=3.93E-10 **** LEVEL 6 PMOS **** .MODEL P12L5 PMOS + LEVEL=6 TPG=-1 + KC=6.42696E-06 NC=1.6536 KV=0.92145 NV=0.88345 + LAMBDA0=0.018966 LAMBDA1=0.0084012 VT0=-0.60865 GAMMA=0.89213 PHI=1 + TOX=1.9800000E-08 LD=0.28U NSUB=4.9999999E+17 + NSS=0.0000000E+00 + CJ=6.852E-4 MJ=0.429 PB=1.0 + CJSW=5.217E-10 MJSW=0.351 + CGSO=7.29E-10 CGDO=7.29E-10 .END tmpk8ny_4pz/tests/mos6/mos6inv.cir0000644000175000017500000000704313546075722017312 0ustar carstencarsten*** NDINV * 4 XNDINV1 1 11 12 13 2 100 NDINV XNDINV2 2 21 22 23 3 100 NDINV XNDINV3 3 31 32 33 4 100 NDINV XNDINV4 4 41 42 43 5 100 NDINV .SUBCKT NDINV 10 11 21 31 41 100 MP11 11 100 100 100 P12L5 L=1.2U W=5U MP12 11 100 100 100 P12L5 L=1.2U W=5U MP13 11 100 100 100 P12L5 L=1.2U W=5U MP14 11 10 100 100 P12L5 L=1.2U W=5U MN11 11 100 12 0 N10L5 L=1.0U W=5U MN12 12 100 13 0 N10L5 L=1.0U W=5U MN13 13 100 14 0 N10L5 L=1.0U W=5U MN14 14 10 0 0 N10L5 L=1.0U W=5U MP21 23 0 100 100 P12L5 L=1.2U W=20U MP22 22 11 23 100 P12L5 L=1.2U W=20U MP23 21 0 22 100 P12L5 L=1.2U W=20U MN21 21 0 0 0 N10L5 L=1.0U W=5U MN22 21 11 0 0 N10L5 L=1.0U W=5U MN23 21 0 0 0 N10L5 L=1.0U W=5U MP31 31 21 100 100 P12L5 L=1.2U W=10U MP32 31 100 100 100 P12L5 L=1.2U W=10U MN31 31 21 32 0 N10L5 L=1.0U W=5U MN32 32 100 0 0 N10L5 L=1.0U W=5U MP41 41 31 100 100 P12L5 L=1.2U W=10U MN41 41 31 0 0 N10L5 L=1.0U W=5U C11 11 0 1P C21 21 0 1P C31 31 0 1P C41 41 0 1P .ENDS VDD 100 0 5 VIN 1 0 DC 0 PWL(0 0 2N 5) .TRAN 0.5N 150N .PRINT TRAN V(1) V(2) V(3) V(4) V(5) .PRINT TRAN V(11) V(12) V(13) V(41) V(42) V(43) .OPTIONS NOACCT **** LEVEL 1 NMOS **** .MODEL N10L1 NMOS + LEVEL=1 TPG=1 + KP=2.33082E-05 + LAMBDA=0.013333 VT0=0.69486 GAMMA=0.60309 PHI=1 + TOX=1.9800000E-08 XJ=0.2U LD=0.1U NSUB=4.9999999E+16 + NSS=0.0000000E+00 + CJ=4.091E-4 MJ=0.307 PB=1.0 + CJSW=3.078E-10 MJSW=1.0E-2 + CGSO=3.93E-10 CGDO=3.93E-10 **** LEVEL 1 PMOS **** .MODEL P12L1 PMOS + LEVEL=1 TPG=-1 + KP=7.69968E-06 + LAMBDA=0.018966 VT0=-0.60865 GAMMA=0.89213 PHI=1 + TOX=1.9800000E-08 XJ=0.4U LD=0.28U NSUB=4.9999999E+17 + NSS=0.0000000E+00 + CJ=6.852E-4 MJ=0.429 PB=1.0 + CJSW=5.217E-10 MJSW=0.351 + CGSO=7.29E-10 CGDO=7.29E-10 **** LEVEL 3 NMOS **** .MODEL N10L3 NMOS + LEVEL=3 TPG=+1 + GAMMA=1.140501 THETA=0.8109787 KAPPA=0.1579183 ETA=5.0622310E-02 + DELTA=0.000000E+00 UO=812.5126 VMAX=1186662. VTO=0.8 + TOX=1.9800000E-08 XJ=0.2U LD=0.1U NSUB=4.9999999E+16 + NSS=0.0000000E+00 + CJ=4.091E-4 MJ=0.307 PB=1.0 + CJSW=3.078E-10 MJSW=1.0E-2 + CGSO=3.93E-10 CGDO=3.93E-10 **** LEVEL 3 PMOS **** .MODEL P12L3 PMOS + LEVEL=3 TPG=-1 + GAMMA=1.211640 THETA=0.1184638 KAPPA=0.2162577 ETA=2.7580135E-02 + DELTA=0.000000E+00 UO=89.16160 VMAX=5.9000000E+07 VTO=-0.8 + TOX=1.9800000E-08 XJ=0.4U LD=0.28U NSUB=4.9999999E+17 + NSS=0.0000000E+00 + CJ=6.852E-4 MJ=0.429 PB=1.0 + CJSW=5.217E-10 MJSW=0.351 + CGSO=7.29E-10 CGDO=7.29E-10 **** LEVEL 6 NMOS **** .MODEL N10L5 NMOS + LEVEL=6 TPG=1 + KC=3.8921e-05 NC=1.1739 KV=0.91602 NV=0.87225 + LAMBDA0=0.013333 LAMBDA1=0.0046901 VT0=0.69486 GAMMA=0.60309 PHI=1 + TOX=1.9800000E-08 XJ=0.2U LD=0.1U NSUB=4.9999999E+16 + NSS=0.0000000E+00 + CJ=4.091E-4 MJ=0.307 PB=1.0 + CJSW=3.078E-10 MJSW=1.0E-2 + CGSO=3.93E-10 CGDO=3.93E-10 **** LEVEL 6 PMOS **** .MODEL P12L5 PMOS + LEVEL=6 TPG=-1 + KC=6.42696E-06 NC=1.6536 KV=0.92145 NV=0.88345 + LAMBDA0=0.018966 LAMBDA1=0.0084012 VT0=-0.60865 GAMMA=0.89213 PHI=1 + TOX=1.9800000E-08 XJ=0.4U LD=0.28U NSUB=4.9999999E+17 + NSS=0.0000000E+00 + CJ=6.852E-4 MJ=0.429 PB=1.0 + CJSW=5.217E-10 MJSW=0.351 + CGSO=7.29E-10 CGDO=7.29E-10 .END tmpk8ny_4pz/tests/mos6/mos6inv.out0000644000175000017500000022272013546075722017345 0ustar carstencarsten Circuit: *** NDINV * 4 Error on line 79 : .model n10l5 nmos level=6 tpg=1 kc=3.8921e-05 nc=1.1739 kv=0.91602 nv=0.87225 lambda0=0.013333 lambda1=0.0046901 vt0=0.69486 gamma=0.60309 phi=1 tox=1.9800000e-08 xj=0.2u ld=0.1u nsub=4.9999999e+16 nss=0.0000000e+00 cj=4.091e-4 mj=0.307 pb=1.0 cjsw=3.078e-10 mjsw=1.0e-2 cgso=3.93e-10 cgdo=3.93e-10 unrecognized parameter (xj) - ignored unrecognized parameter (0.2u) - ignored Error on line 89 : .model p12l5 pmos level=6 tpg=-1 kc=6.42696e-06 nc=1.6536 kv=0.92145 nv=0.88345 lambda0=0.018966 lambda1=0.0084012 vt0=-0.60865 gamma=0.89213 phi=1 tox=1.9800000e-08 xj=0.4u ld=0.28u nsub=4.9999999e+17 nss=0.0000000e+00 cj=6.852e-4 mj=0.429 pb=1.0 cjsw=5.217e-10 mjsw=0.351 cgso=7.29e-10 cgdo=7.29e-10 unrecognized parameter (xj) - ignored unrecognized parameter (0.4u) - ignored Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Initial Transient Solution -------------------------- Node Voltage ---- ------- 11 5 100 5 1 0 ndinv1:12 3.61293 ndinv1:13 3.61293 ndinv1:14 3.61293 ndinv1:23 5 ndinv1:22 1.59002 12 1.43643e-08 13 5 ndinv1:32 7.47791e-206 2 6.07304e-09 21 5 ndinv2:12 3.61293 ndinv2:13 3.61293 ndinv2:14 3.61293 ndinv2:23 5 ndinv2:22 1.59002 22 1.43643e-08 23 5 ndinv2:32 1.44672e-207 3 6.07304e-09 31 5 ndinv3:12 3.61293 ndinv3:13 3.61293 ndinv3:14 3.61293 ndinv3:23 5 ndinv3:22 1.59004 32 1.43643e-08 33 5 ndinv3:32 -1.04135e-115 4 6.07304e-09 41 5 ndinv4:12 3.61293 ndinv4:13 3.61293 ndinv4:14 3.61292 ndinv4:23 5 ndinv4:22 1.59083 42 1.43624e-08 43 5 ndinv4:32 -8.95202e-88 5 6.07304e-09 vin#branch 0 vdd#branch -1.94468e-10 *** NDINV * 4 Transient Analysis Sat Aug 27 16:31:59 2005 -------------------------------------------------------------------------------- Index time v(1) v(2) v(3) -------------------------------------------------------------------------------- 0 0.000000e+00 0.000000e+00 6.073044e-09 6.073044e-09 1 5.000000e-12 1.250000e-02 6.139822e-09 6.072904e-09 2 1.000000e-11 2.500000e-02 6.205723e-09 6.072764e-09 3 2.000000e-11 5.000000e-02 6.335817e-09 6.072487e-09 4 4.000000e-11 1.000000e-01 6.586155e-09 6.071944e-09 5 8.000000e-11 2.000000e-01 7.050473e-09 6.070894e-09 6 1.600000e-10 4.000000e-01 7.851233e-09 6.068933e-09 7 1.800000e-10 4.500000e-01 8.022372e-09 6.068477e-09 8 2.200000e-10 5.500000e-01 8.347904e-09 6.067584e-09 9 3.000000e-10 7.500000e-01 8.906914e-09 6.065922e-09 10 4.600000e-10 1.150000e+00 8.847684e-09 6.063046e-09 11 6.354757e-10 1.588689e+00 2.139844e-09 6.060504e-09 12 8.960570e-10 2.240143e+00 -2.797049e-08 6.057707e-09 13 1.196298e-09 2.990745e+00 -7.162840e-08 6.055650e-09 14 1.610915e-09 4.027287e+00 -1.028679e-07 6.054302e-09 15 2.000000e-09 5.000000e+00 -1.013340e-07 6.054152e-09 16 2.050000e-09 5.000000e+00 -9.996482e-08 6.054198e-09 17 2.150000e-09 5.000000e+00 -9.664682e-08 6.054308e-09 18 2.350000e-09 5.000000e+00 -8.697821e-08 6.054635e-09 19 2.750000e-09 5.000000e+00 -6.068391e-08 6.055602e-09 20 3.250000e-09 5.000000e+00 -1.882771e-08 6.057179e-09 21 3.750000e-09 5.000000e+00 1.235013e-06 6.058939e-09 22 4.235270e-09 5.000000e+00 3.912871e-06 6.060666e-09 23 4.735270e-09 5.000000e+00 6.554394e-06 6.062365e-09 24 5.235270e-09 5.000000e+00 8.532872e-06 6.063933e-09 25 5.735270e-09 5.000000e+00 1.002130e-05 6.065354e-09 26 6.235270e-09 5.000000e+00 1.111304e-05 6.066620e-09 27 6.735270e-09 5.000000e+00 1.196879e-05 6.067738e-09 28 7.235270e-09 5.000000e+00 1.276181e-05 6.068715e-09 29 7.735270e-09 5.000000e+00 1.370884e-05 6.069564e-09 30 8.235270e-09 5.000000e+00 1.509320e-05 6.070298e-09 31 8.735270e-09 5.000000e+00 -8.270615e-06 6.070852e-09 32 9.235270e-09 5.000000e+00 -9.734072e-05 6.071194e-09 33 9.735270e-09 5.000000e+00 -2.608076e-04 6.071459e-09 34 1.023527e-08 5.000000e+00 -4.879628e-04 6.071756e-09 35 1.073527e-08 5.000000e+00 -7.726609e-04 6.072090e-09 36 1.123527e-08 5.000000e+00 -1.111678e-03 6.072442e-09 37 1.173527e-08 5.000000e+00 -1.504544e-03 6.072788e-09 38 1.223527e-08 5.000000e+00 -1.953972e-03 6.073101e-09 39 1.273527e-08 5.000000e+00 -2.467429e-03 6.073355e-09 40 1.323527e-08 5.000000e+00 -3.059960e-03 6.073525e-09 41 1.373527e-08 5.000000e+00 -3.080746e-03 6.075686e-09 42 1.423527e-08 5.000000e+00 -1.009192e-04 6.085247e-09 43 1.473527e-08 5.000000e+00 9.300835e-03 6.103709e-09 44 1.523527e-08 5.000000e+00 2.838013e-02 6.127487e-09 45 1.573527e-08 5.000000e+00 6.031830e-02 6.153155e-09 46 1.623527e-08 5.000000e+00 1.082457e-01 6.178334e-09 47 1.673527e-08 5.000000e+00 1.753935e-01 6.202842e-09 48 1.723527e-08 5.000000e+00 2.648652e-01 6.226900e-09 49 1.773527e-08 5.000000e+00 3.799908e-01 6.252582e-09 50 1.823527e-08 5.000000e+00 5.262788e-01 6.288956e-09 51 1.873527e-08 5.000000e+00 7.165873e-01 6.362975e-09 52 1.923527e-08 5.000000e+00 9.669387e-01 3.221768e-09 53 1.973527e-08 5.000000e+00 1.279988e+00 -9.466130e-09 54 2.023527e-08 5.000000e+00 1.646110e+00 -2.914678e-08 Index time v(1) v(2) v(3) -------------------------------------------------------------------------------- 55 2.073527e-08 5.000000e+00 2.055672e+00 -4.890039e-08 56 2.123527e-08 5.000000e+00 2.490459e+00 -6.124372e-08 57 2.173527e-08 5.000000e+00 2.921621e+00 -5.678892e-08 58 2.223527e-08 5.000000e+00 3.322401e+00 -4.025824e-08 59 2.273527e-08 5.000000e+00 3.676345e+00 -2.338167e-08 60 2.323527e-08 5.000000e+00 3.975577e+00 2.605919e-07 61 2.373527e-08 5.000000e+00 4.219430e+00 1.954364e-06 62 2.423527e-08 5.000000e+00 4.412595e+00 4.625093e-06 63 2.473527e-08 5.000000e+00 4.562194e+00 6.877824e-06 64 2.523527e-08 5.000000e+00 4.676060e+00 8.653036e-06 65 2.573527e-08 5.000000e+00 4.761559e+00 1.001376e-05 66 2.623527e-08 5.000000e+00 4.825116e+00 1.105411e-05 67 2.673527e-08 5.000000e+00 4.871993e+00 1.190898e-05 68 2.723527e-08 5.000000e+00 4.906381e+00 1.274668e-05 69 2.773527e-08 5.000000e+00 4.931497e+00 1.378134e-05 70 2.823527e-08 5.000000e+00 4.949798e+00 1.530806e-05 71 2.873527e-08 5.000000e+00 4.963105e+00 -1.643185e-05 72 2.923527e-08 5.000000e+00 4.972781e+00 -1.202357e-04 73 2.973527e-08 5.000000e+00 4.979812e+00 -2.954300e-04 74 3.023527e-08 5.000000e+00 4.984931e+00 -5.325541e-04 75 3.073527e-08 5.000000e+00 4.988658e+00 -8.261722e-04 76 3.123527e-08 5.000000e+00 4.991387e+00 -1.173738e-03 77 3.173527e-08 5.000000e+00 4.993388e+00 -1.575335e-03 78 3.223527e-08 5.000000e+00 4.994866e+00 -2.034343e-03 79 3.273527e-08 5.000000e+00 4.995961e+00 -2.559227e-03 80 3.323527e-08 5.000000e+00 4.996780e+00 -3.166701e-03 81 3.373527e-08 5.000000e+00 4.997395e+00 -2.908868e-03 82 3.423527e-08 5.000000e+00 4.997863e+00 9.072562e-04 83 3.473527e-08 5.000000e+00 4.998219e+00 1.167933e-02 84 3.523527e-08 5.000000e+00 4.998496e+00 3.265866e-02 85 3.573527e-08 5.000000e+00 4.998711e+00 6.700389e-02 86 3.623527e-08 5.000000e+00 4.998883e+00 1.178548e-01 87 3.673527e-08 5.000000e+00 4.999020e+00 1.884152e-01 88 3.723527e-08 5.000000e+00 4.999133e+00 2.818719e-01 89 3.773527e-08 5.000000e+00 4.999226e+00 4.017420e-01 90 3.823527e-08 5.000000e+00 4.999306e+00 5.541445e-01 91 3.873527e-08 5.000000e+00 4.999373e+00 7.536218e-01 92 3.923527e-08 5.000000e+00 4.999432e+00 1.015237e+00 93 3.973527e-08 5.000000e+00 4.999483e+00 1.337798e+00 94 4.023527e-08 5.000000e+00 4.999530e+00 1.711780e+00 95 4.073527e-08 5.000000e+00 4.999570e+00 2.127673e+00 96 4.123527e-08 5.000000e+00 4.999608e+00 2.564605e+00 97 4.173527e-08 5.000000e+00 4.999641e+00 2.992192e+00 98 4.223527e-08 5.000000e+00 4.999672e+00 3.385894e+00 99 4.273527e-08 5.000000e+00 4.999700e+00 3.730914e+00 100 4.323527e-08 5.000000e+00 4.999726e+00 4.020600e+00 101 4.373527e-08 5.000000e+00 4.999749e+00 4.255476e+00 102 4.423527e-08 5.000000e+00 4.999771e+00 4.440719e+00 103 4.473527e-08 5.000000e+00 4.999790e+00 4.583745e+00 104 4.523527e-08 5.000000e+00 4.999808e+00 4.692305e+00 105 4.573527e-08 5.000000e+00 4.999825e+00 4.773688e+00 106 4.623527e-08 5.000000e+00 4.999840e+00 4.834075e+00 107 4.673527e-08 5.000000e+00 4.999854e+00 4.878587e+00 108 4.723527e-08 5.000000e+00 4.999867e+00 4.911196e+00 109 4.773527e-08 5.000000e+00 4.999878e+00 4.935015e+00 110 4.823527e-08 5.000000e+00 4.999889e+00 4.952351e+00 111 4.873527e-08 5.000000e+00 4.999898e+00 4.964968e+00 112 4.923527e-08 5.000000e+00 4.999908e+00 4.974130e+00 Index time v(1) v(2) v(3) -------------------------------------------------------------------------------- 113 4.973527e-08 5.000000e+00 4.999916e+00 4.980800e+00 114 5.023527e-08 5.000000e+00 4.999923e+00 4.985645e+00 115 5.073527e-08 5.000000e+00 4.999930e+00 4.989185e+00 116 5.123527e-08 5.000000e+00 4.999936e+00 4.991768e+00 117 5.173527e-08 5.000000e+00 4.999942e+00 4.993673e+00 118 5.223527e-08 5.000000e+00 4.999947e+00 4.995073e+00 119 5.273527e-08 5.000000e+00 4.999952e+00 4.996119e+00 120 5.323527e-08 5.000000e+00 4.999956e+00 4.996895e+00 121 5.373527e-08 5.000000e+00 4.999960e+00 4.997486e+00 122 5.423527e-08 5.000000e+00 4.999964e+00 4.997929e+00 123 5.473527e-08 5.000000e+00 4.999967e+00 4.998273e+00 124 5.523527e-08 5.000000e+00 4.999970e+00 4.998535e+00 125 5.573527e-08 5.000000e+00 4.999972e+00 4.998745e+00 126 5.623527e-08 5.000000e+00 4.999975e+00 4.998907e+00 127 5.673527e-08 5.000000e+00 4.999977e+00 4.999042e+00 128 5.723527e-08 5.000000e+00 4.999979e+00 4.999149e+00 129 5.773527e-08 5.000000e+00 4.999981e+00 4.999242e+00 130 5.823527e-08 5.000000e+00 4.999983e+00 4.999317e+00 131 5.873527e-08 5.000000e+00 4.999984e+00 4.999385e+00 132 5.923527e-08 5.000000e+00 4.999986e+00 4.999440e+00 133 5.973527e-08 5.000000e+00 4.999987e+00 4.999493e+00 134 6.023527e-08 5.000000e+00 4.999988e+00 4.999536e+00 135 6.073527e-08 5.000000e+00 4.999989e+00 4.999578e+00 136 6.123527e-08 5.000000e+00 4.999990e+00 4.999613e+00 137 6.173527e-08 5.000000e+00 4.999991e+00 4.999648e+00 138 6.223527e-08 5.000000e+00 4.999992e+00 4.999676e+00 139 6.273527e-08 5.000000e+00 4.999993e+00 4.999705e+00 140 6.323527e-08 5.000000e+00 4.999993e+00 4.999729e+00 141 6.373238e-08 5.000000e+00 4.999994e+00 4.999754e+00 142 6.423238e-08 5.000000e+00 4.999994e+00 4.999773e+00 143 6.473238e-08 5.000000e+00 4.999995e+00 4.999794e+00 144 6.523238e-08 5.000000e+00 4.999995e+00 4.999811e+00 145 6.573238e-08 5.000000e+00 4.999996e+00 4.999828e+00 146 6.623238e-08 5.000000e+00 4.999996e+00 4.999842e+00 147 6.673238e-08 5.000000e+00 4.999997e+00 4.999857e+00 148 6.723238e-08 5.000000e+00 4.999997e+00 4.999868e+00 149 6.773238e-08 5.000000e+00 4.999997e+00 4.999881e+00 150 6.823238e-08 5.000000e+00 4.999997e+00 4.999890e+00 151 6.873238e-08 5.000000e+00 4.999998e+00 4.999901e+00 152 6.923238e-08 5.000000e+00 4.999998e+00 4.999908e+00 153 6.973238e-08 5.000000e+00 4.999998e+00 4.999917e+00 154 7.023238e-08 5.000000e+00 4.999998e+00 4.999924e+00 155 7.073238e-08 5.000000e+00 4.999998e+00 4.999931e+00 156 7.123238e-08 5.000000e+00 4.999999e+00 4.999937e+00 157 7.173238e-08 5.000000e+00 4.999999e+00 4.999943e+00 158 7.223238e-08 5.000000e+00 4.999999e+00 4.999947e+00 159 7.273238e-08 5.000000e+00 4.999999e+00 4.999953e+00 160 7.323238e-08 5.000000e+00 4.999999e+00 4.999956e+00 161 7.373238e-08 5.000000e+00 4.999999e+00 4.999961e+00 162 7.423238e-08 5.000000e+00 4.999999e+00 4.999964e+00 163 7.473238e-08 5.000000e+00 4.999999e+00 4.999968e+00 164 7.523238e-08 5.000000e+00 4.999999e+00 4.999970e+00 165 7.573238e-08 5.000000e+00 4.999999e+00 4.999973e+00 166 7.623238e-08 5.000000e+00 4.999999e+00 4.999975e+00 167 7.673238e-08 5.000000e+00 4.999999e+00 4.999978e+00 168 7.723238e-08 5.000000e+00 5.000000e+00 4.999979e+00 169 7.773238e-08 5.000000e+00 5.000000e+00 4.999982e+00 170 7.823238e-08 5.000000e+00 5.000000e+00 4.999983e+00 Index time v(1) v(2) v(3) -------------------------------------------------------------------------------- 171 7.873238e-08 5.000000e+00 5.000000e+00 4.999985e+00 172 7.923238e-08 5.000000e+00 5.000000e+00 4.999986e+00 173 7.973238e-08 5.000000e+00 5.000000e+00 4.999987e+00 174 8.023238e-08 5.000000e+00 5.000000e+00 4.999988e+00 175 8.073238e-08 5.000000e+00 5.000000e+00 4.999990e+00 176 8.123238e-08 5.000000e+00 5.000000e+00 4.999990e+00 177 8.173238e-08 5.000000e+00 5.000000e+00 4.999991e+00 178 8.223238e-08 5.000000e+00 5.000000e+00 4.999992e+00 179 8.273238e-08 5.000000e+00 5.000000e+00 4.999993e+00 180 8.323238e-08 5.000000e+00 5.000000e+00 4.999993e+00 181 8.373238e-08 5.000000e+00 5.000000e+00 4.999994e+00 182 8.423238e-08 5.000000e+00 5.000000e+00 4.999994e+00 183 8.473238e-08 5.000000e+00 5.000000e+00 4.999995e+00 184 8.523238e-08 5.000000e+00 5.000000e+00 4.999995e+00 185 8.573238e-08 5.000000e+00 5.000000e+00 4.999996e+00 186 8.623238e-08 5.000000e+00 5.000000e+00 4.999996e+00 187 8.673238e-08 5.000000e+00 5.000000e+00 4.999997e+00 188 8.723238e-08 5.000000e+00 5.000000e+00 4.999997e+00 189 8.773238e-08 5.000000e+00 5.000000e+00 4.999997e+00 190 8.823238e-08 5.000000e+00 5.000000e+00 4.999997e+00 191 8.873238e-08 5.000000e+00 5.000000e+00 4.999998e+00 192 8.923238e-08 5.000000e+00 5.000000e+00 4.999998e+00 193 8.973238e-08 5.000000e+00 5.000000e+00 4.999998e+00 194 9.023238e-08 5.000000e+00 5.000000e+00 4.999998e+00 195 9.073238e-08 5.000000e+00 5.000000e+00 4.999998e+00 196 9.123238e-08 5.000000e+00 5.000000e+00 4.999998e+00 197 9.173238e-08 5.000000e+00 5.000000e+00 4.999999e+00 198 9.223238e-08 5.000000e+00 5.000000e+00 4.999999e+00 199 9.273238e-08 5.000000e+00 5.000000e+00 4.999999e+00 200 9.323238e-08 5.000000e+00 5.000000e+00 4.999999e+00 201 9.373238e-08 5.000000e+00 5.000000e+00 4.999999e+00 202 9.423238e-08 5.000000e+00 5.000000e+00 4.999999e+00 203 9.473238e-08 5.000000e+00 5.000000e+00 4.999999e+00 204 9.523238e-08 5.000000e+00 5.000000e+00 4.999999e+00 205 9.573238e-08 5.000000e+00 5.000000e+00 4.999999e+00 206 9.623238e-08 5.000000e+00 5.000000e+00 4.999999e+00 207 9.673238e-08 5.000000e+00 5.000000e+00 5.000000e+00 208 9.723238e-08 5.000000e+00 5.000000e+00 4.999999e+00 209 9.773238e-08 5.000000e+00 5.000000e+00 5.000000e+00 210 9.823238e-08 5.000000e+00 5.000000e+00 5.000000e+00 211 9.873238e-08 5.000000e+00 5.000000e+00 5.000000e+00 212 9.923238e-08 5.000000e+00 5.000000e+00 5.000000e+00 213 9.973238e-08 5.000000e+00 5.000000e+00 5.000000e+00 214 1.002324e-07 5.000000e+00 5.000000e+00 5.000000e+00 215 1.007324e-07 5.000000e+00 5.000000e+00 5.000000e+00 216 1.012324e-07 5.000000e+00 5.000000e+00 5.000000e+00 217 1.017324e-07 5.000000e+00 5.000000e+00 5.000000e+00 218 1.022324e-07 5.000000e+00 5.000000e+00 5.000000e+00 219 1.027324e-07 5.000000e+00 5.000000e+00 5.000000e+00 220 1.032324e-07 5.000000e+00 5.000000e+00 5.000000e+00 221 1.037324e-07 5.000000e+00 5.000000e+00 5.000000e+00 222 1.042324e-07 5.000000e+00 5.000000e+00 5.000000e+00 223 1.047324e-07 5.000000e+00 5.000000e+00 5.000000e+00 224 1.052324e-07 5.000000e+00 5.000000e+00 5.000000e+00 225 1.057324e-07 5.000000e+00 5.000000e+00 5.000000e+00 226 1.062324e-07 5.000000e+00 5.000000e+00 5.000000e+00 227 1.067324e-07 5.000000e+00 5.000000e+00 5.000000e+00 228 1.072324e-07 5.000000e+00 5.000000e+00 5.000000e+00 Index time v(1) v(2) v(3) -------------------------------------------------------------------------------- 229 1.077324e-07 5.000000e+00 5.000000e+00 5.000000e+00 230 1.082324e-07 5.000000e+00 5.000000e+00 5.000000e+00 231 1.087324e-07 5.000000e+00 5.000000e+00 5.000000e+00 232 1.092324e-07 5.000000e+00 5.000000e+00 5.000000e+00 233 1.097324e-07 5.000000e+00 5.000000e+00 5.000000e+00 234 1.102324e-07 5.000000e+00 5.000000e+00 5.000000e+00 235 1.107324e-07 5.000000e+00 5.000000e+00 5.000000e+00 236 1.112324e-07 5.000000e+00 5.000000e+00 5.000000e+00 237 1.117324e-07 5.000000e+00 5.000000e+00 5.000000e+00 238 1.122324e-07 5.000000e+00 5.000000e+00 5.000000e+00 239 1.127324e-07 5.000000e+00 5.000000e+00 5.000000e+00 240 1.132324e-07 5.000000e+00 5.000000e+00 5.000000e+00 241 1.137324e-07 5.000000e+00 5.000000e+00 5.000000e+00 242 1.142324e-07 5.000000e+00 5.000000e+00 5.000000e+00 243 1.147324e-07 5.000000e+00 5.000000e+00 5.000000e+00 244 1.152324e-07 5.000000e+00 5.000000e+00 5.000000e+00 245 1.157324e-07 5.000000e+00 5.000000e+00 5.000000e+00 246 1.162324e-07 5.000000e+00 5.000000e+00 5.000000e+00 247 1.167324e-07 5.000000e+00 5.000000e+00 5.000000e+00 248 1.172324e-07 5.000000e+00 5.000000e+00 5.000000e+00 249 1.177324e-07 5.000000e+00 5.000000e+00 5.000000e+00 250 1.182324e-07 5.000000e+00 5.000000e+00 5.000000e+00 251 1.187324e-07 5.000000e+00 5.000000e+00 5.000000e+00 252 1.192324e-07 5.000000e+00 5.000000e+00 5.000000e+00 253 1.197324e-07 5.000000e+00 5.000000e+00 5.000000e+00 254 1.202324e-07 5.000000e+00 5.000000e+00 5.000000e+00 255 1.207324e-07 5.000000e+00 5.000000e+00 5.000000e+00 256 1.212324e-07 5.000000e+00 5.000000e+00 5.000000e+00 257 1.217324e-07 5.000000e+00 5.000000e+00 5.000000e+00 258 1.222324e-07 5.000000e+00 5.000000e+00 5.000000e+00 259 1.227324e-07 5.000000e+00 5.000000e+00 5.000000e+00 260 1.232324e-07 5.000000e+00 5.000000e+00 5.000000e+00 261 1.237324e-07 5.000000e+00 5.000000e+00 5.000000e+00 262 1.242324e-07 5.000000e+00 5.000000e+00 5.000000e+00 263 1.247324e-07 5.000000e+00 5.000000e+00 5.000000e+00 264 1.252324e-07 5.000000e+00 5.000000e+00 5.000000e+00 265 1.257324e-07 5.000000e+00 5.000000e+00 5.000000e+00 266 1.262324e-07 5.000000e+00 5.000000e+00 5.000000e+00 267 1.267324e-07 5.000000e+00 5.000000e+00 5.000000e+00 268 1.272324e-07 5.000000e+00 5.000000e+00 5.000000e+00 269 1.277324e-07 5.000000e+00 5.000000e+00 5.000000e+00 270 1.282324e-07 5.000000e+00 5.000000e+00 5.000000e+00 271 1.287324e-07 5.000000e+00 5.000000e+00 5.000000e+00 272 1.292324e-07 5.000000e+00 5.000000e+00 5.000000e+00 273 1.297324e-07 5.000000e+00 5.000000e+00 5.000000e+00 274 1.302324e-07 5.000000e+00 5.000000e+00 5.000000e+00 275 1.307324e-07 5.000000e+00 5.000000e+00 5.000000e+00 276 1.312324e-07 5.000000e+00 5.000000e+00 5.000000e+00 277 1.317324e-07 5.000000e+00 5.000000e+00 5.000000e+00 278 1.322324e-07 5.000000e+00 5.000000e+00 5.000000e+00 279 1.327324e-07 5.000000e+00 5.000000e+00 5.000000e+00 280 1.332324e-07 5.000000e+00 5.000000e+00 5.000000e+00 281 1.337324e-07 5.000000e+00 5.000000e+00 5.000000e+00 282 1.342324e-07 5.000000e+00 5.000000e+00 5.000000e+00 283 1.347324e-07 5.000000e+00 5.000000e+00 5.000000e+00 284 1.352324e-07 5.000000e+00 5.000000e+00 5.000000e+00 285 1.357324e-07 5.000000e+00 5.000000e+00 5.000000e+00 286 1.362324e-07 5.000000e+00 5.000000e+00 5.000000e+00 Index time v(1) v(2) v(3) -------------------------------------------------------------------------------- 287 1.367324e-07 5.000000e+00 5.000000e+00 5.000000e+00 288 1.372324e-07 5.000000e+00 5.000000e+00 5.000000e+00 289 1.377324e-07 5.000000e+00 5.000000e+00 5.000000e+00 290 1.382324e-07 5.000000e+00 5.000000e+00 5.000000e+00 291 1.387324e-07 5.000000e+00 5.000000e+00 5.000000e+00 292 1.392324e-07 5.000000e+00 5.000000e+00 5.000000e+00 293 1.397324e-07 5.000000e+00 5.000000e+00 5.000000e+00 294 1.402324e-07 5.000000e+00 5.000000e+00 5.000000e+00 295 1.407324e-07 5.000000e+00 5.000000e+00 5.000000e+00 296 1.412324e-07 5.000000e+00 5.000000e+00 5.000000e+00 297 1.417324e-07 5.000000e+00 5.000000e+00 5.000000e+00 298 1.422324e-07 5.000000e+00 5.000000e+00 5.000000e+00 299 1.427324e-07 5.000000e+00 5.000000e+00 5.000000e+00 300 1.432324e-07 5.000000e+00 5.000000e+00 5.000000e+00 301 1.437324e-07 5.000000e+00 5.000000e+00 5.000000e+00 302 1.442324e-07 5.000000e+00 5.000000e+00 5.000000e+00 303 1.447324e-07 5.000000e+00 5.000000e+00 5.000000e+00 304 1.452324e-07 5.000000e+00 5.000000e+00 5.000000e+00 305 1.457324e-07 5.000000e+00 5.000000e+00 5.000000e+00 306 1.462324e-07 5.000000e+00 5.000000e+00 5.000000e+00 307 1.467324e-07 5.000000e+00 5.000000e+00 5.000000e+00 308 1.472324e-07 5.000000e+00 5.000000e+00 5.000000e+00 309 1.477324e-07 5.000000e+00 5.000000e+00 5.000000e+00 310 1.482324e-07 5.000000e+00 5.000000e+00 5.000000e+00 311 1.487324e-07 5.000000e+00 5.000000e+00 5.000000e+00 312 1.492324e-07 5.000000e+00 5.000000e+00 5.000000e+00 313 1.497324e-07 5.000000e+00 5.000000e+00 5.000000e+00 314 1.500000e-07 5.000000e+00 5.000000e+00 5.000000e+00 *** NDINV * 4 Transient Analysis Sat Aug 27 16:31:59 2005 -------------------------------------------------------------------------------- Index time v(4) v(5) -------------------------------------------------------------------------------- 0 0.000000e+00 6.073044e-09 6.073044e-09 1 5.000000e-12 6.074070e-09 6.075023e-09 2 1.000000e-11 6.074841e-09 6.076979e-09 3 2.000000e-11 6.075882e-09 6.080845e-09 4 4.000000e-11 6.075067e-09 6.088305e-09 5 8.000000e-11 6.062977e-09 6.102179e-09 6 1.600000e-10 6.005455e-09 6.126056e-09 7 1.800000e-10 5.984303e-09 6.131117e-09 8 2.200000e-10 5.938848e-09 6.140691e-09 9 3.000000e-10 5.832994e-09 6.156750e-09 10 4.600000e-10 5.591204e-09 6.178361e-09 11 6.354757e-10 5.318662e-09 6.189094e-09 12 8.960570e-10 4.963465e-09 6.187994e-09 13 1.196298e-09 4.662199e-09 6.171242e-09 14 1.610915e-09 4.434390e-09 6.136917e-09 15 2.000000e-09 4.381255e-09 6.103192e-09 16 2.050000e-09 4.384395e-09 6.099145e-09 17 2.150000e-09 4.393783e-09 6.091250e-09 18 2.350000e-09 4.429256e-09 6.076749e-09 19 2.750000e-09 4.550185e-09 6.053239e-09 20 3.250000e-09 4.760318e-09 6.033865e-09 21 3.750000e-09 4.999218e-09 6.024055e-09 22 4.235270e-09 5.233483e-09 6.021391e-09 23 4.735270e-09 5.462145e-09 6.023353e-09 24 5.235270e-09 5.669884e-09 6.028150e-09 25 5.735270e-09 5.853093e-09 6.034321e-09 26 6.235270e-09 6.011012e-09 6.040868e-09 27 6.735270e-09 6.144549e-09 6.047167e-09 28 7.235270e-09 6.255530e-09 6.052870e-09 29 7.735270e-09 6.346215e-09 6.057816e-09 30 8.235270e-09 6.418996e-09 6.061968e-09 31 8.735270e-09 6.476223e-09 6.065364e-09 32 9.235270e-09 6.520103e-09 6.068078e-09 33 9.735270e-09 6.552645e-09 6.070203e-09 34 1.023527e-08 6.575646e-09 6.071833e-09 35 1.073527e-08 6.590684e-09 6.073058e-09 36 1.123527e-08 6.599134e-09 6.073957e-09 37 1.173527e-08 6.602180e-09 6.074598e-09 38 1.223527e-08 6.600833e-09 6.075039e-09 39 1.273527e-08 6.595957e-09 6.075326e-09 40 1.323527e-08 6.588278e-09 6.075497e-09 41 1.373527e-08 6.578408e-09 6.075582e-09 42 1.423527e-08 6.566861e-09 6.075603e-09 43 1.473527e-08 6.554062e-09 6.075579e-09 44 1.523527e-08 6.540364e-09 6.075523e-09 45 1.573527e-08 6.526060e-09 6.075446e-09 46 1.623527e-08 6.511387e-09 6.075356e-09 47 1.673527e-08 6.496539e-09 6.075257e-09 48 1.723527e-08 6.481672e-09 6.075155e-09 49 1.773527e-08 6.466912e-09 6.075052e-09 50 1.823527e-08 6.452358e-09 6.074950e-09 51 1.873527e-08 6.438086e-09 6.074851e-09 52 1.923527e-08 6.424154e-09 6.074755e-09 53 1.973527e-08 6.410608e-09 6.074664e-09 54 2.023527e-08 6.397477e-09 6.074577e-09 Index time v(4) v(5) -------------------------------------------------------------------------------- 55 2.073527e-08 6.384784e-09 6.074494e-09 56 2.123527e-08 6.372542e-09 6.074417e-09 57 2.173527e-08 6.360756e-09 6.074343e-09 58 2.223527e-08 6.349427e-09 6.074274e-09 59 2.273527e-08 6.338553e-09 6.074209e-09 60 2.323527e-08 6.328127e-09 6.074148e-09 61 2.373527e-08 6.318142e-09 6.074091e-09 62 2.423527e-08 6.308583e-09 6.074037e-09 63 2.473527e-08 6.299432e-09 6.073986e-09 64 2.523527e-08 6.290681e-09 6.073939e-09 65 2.573527e-08 6.282316e-09 6.073894e-09 66 2.623527e-08 6.274325e-09 6.073852e-09 67 2.673527e-08 6.266691e-09 6.073812e-09 68 2.723527e-08 6.259400e-09 6.073775e-09 69 2.773527e-08 6.252436e-09 6.073740e-09 70 2.823527e-08 6.245784e-09 6.073707e-09 71 2.873527e-08 6.239327e-09 6.073676e-09 72 2.923527e-08 6.233037e-09 6.073647e-09 73 2.973527e-08 6.227055e-09 6.073619e-09 74 3.023527e-08 6.221432e-09 6.073593e-09 75 3.073527e-08 6.216144e-09 6.073568e-09 76 3.123527e-08 6.211152e-09 6.073545e-09 77 3.173527e-08 6.206412e-09 6.073522e-09 78 3.223527e-08 6.201883e-09 6.073501e-09 79 3.273527e-08 6.197522e-09 6.073482e-09 80 3.323527e-08 6.193291e-09 6.073463e-09 81 3.373527e-08 6.192183e-09 6.073445e-09 82 3.423527e-08 6.199374e-09 6.073428e-09 83 3.473527e-08 6.215351e-09 6.073412e-09 84 3.523527e-08 6.236269e-09 6.073397e-09 85 3.573527e-08 6.258586e-09 6.073382e-09 86 3.623527e-08 6.280442e-09 6.073369e-09 87 3.673527e-08 6.301694e-09 6.073356e-09 88 3.723527e-08 6.323074e-09 6.073343e-09 89 3.773527e-08 6.347110e-09 6.073331e-09 90 3.823527e-08 6.384166e-09 6.073320e-09 91 3.873527e-08 6.396054e-09 6.073309e-09 92 3.923527e-08 1.916059e-09 6.073299e-09 93 3.973527e-08 -1.251828e-08 6.073289e-09 94 4.023527e-08 -3.246496e-08 6.073280e-09 95 4.073527e-08 -5.198099e-08 6.073271e-09 96 4.123527e-08 -6.218081e-08 6.073263e-09 97 4.173527e-08 -5.438362e-08 6.073255e-09 98 4.223527e-08 -3.691745e-08 6.073247e-09 99 4.273527e-08 -2.048270e-08 6.073240e-09 100 4.323527e-08 4.536342e-07 6.073234e-09 101 4.373527e-08 2.389435e-06 6.073232e-09 102 4.423527e-08 5.051698e-06 6.073227e-09 103 4.473527e-08 7.210572e-06 6.073217e-09 104 4.523527e-08 8.913870e-06 6.073207e-09 105 4.573527e-08 1.021079e-05 6.073198e-09 106 4.623527e-08 1.121000e-05 6.073191e-09 107 4.673527e-08 1.204929e-05 6.073186e-09 108 4.723527e-08 1.290470e-05 6.073182e-09 109 4.773527e-08 1.400041e-05 6.073179e-09 110 4.823527e-08 1.564110e-05 6.073177e-09 111 4.873527e-08 -2.492327e-05 6.073041e-09 112 4.923527e-08 -1.441149e-04 6.072791e-09 Index time v(4) v(5) -------------------------------------------------------------------------------- 113 4.973527e-08 -3.316988e-04 6.072613e-09 114 5.023527e-08 -5.796825e-04 6.072539e-09 115 5.073527e-08 -8.831043e-04 6.072553e-09 116 5.123527e-08 -1.240060e-03 6.072628e-09 117 5.173527e-08 -1.651258e-03 6.072729e-09 118 5.223527e-08 -2.120868e-03 6.072826e-09 119 5.273527e-08 -2.658516e-03 6.072888e-09 120 5.323527e-08 -3.272275e-03 6.072915e-09 121 5.373527e-08 -2.657163e-03 6.077114e-09 122 5.423527e-08 2.147889e-03 6.090509e-09 123 5.473527e-08 1.446824e-02 6.112227e-09 124 5.523527e-08 3.754811e-02 6.138358e-09 125 5.573527e-08 7.452673e-02 6.165419e-09 126 5.623527e-08 1.285604e-01 6.191718e-09 127 5.673527e-08 2.028717e-01 6.217174e-09 128 5.723527e-08 3.006303e-01 6.242438e-09 129 5.773527e-08 4.255621e-01 6.270797e-09 130 5.823527e-08 5.847010e-01 6.315279e-09 131 5.873527e-08 7.940434e-01 5.929827e-09 132 5.923527e-08 1.066846e+00 -1.991201e-10 133 5.973527e-08 1.398994e+00 -1.615934e-08 134 6.023527e-08 1.780890e+00 -3.644218e-08 135 6.073527e-08 2.201954e+00 -5.545878e-08 136 6.123527e-08 2.639562e+00 -6.301759e-08 137 6.173527e-08 3.062822e+00 -5.202595e-08 138 6.223527e-08 3.448962e+00 -3.369832e-08 139 6.273527e-08 3.784754e+00 -1.750238e-08 140 6.323527e-08 4.064780e+00 6.940108e-07 141 6.373238e-08 4.289513e+00 2.885196e-06 142 6.423238e-08 4.467189e+00 5.536599e-06 143 6.473238e-08 4.603967e+00 7.620437e-06 144 6.523238e-08 4.707524e+00 9.251302e-06 145 6.573238e-08 4.785027e+00 1.047989e-05 146 6.623238e-08 4.842447e+00 1.143097e-05 147 6.673238e-08 4.884738e+00 1.224973e-05 148 6.723238e-08 4.915689e+00 1.312274e-05 149 6.773238e-08 4.938293e+00 1.428822e-05 150 6.823238e-08 4.954733e+00 1.093300e-05 151 6.873238e-08 4.966703e+00 -4.169129e-05 152 6.923238e-08 4.975388e+00 -1.743849e-04 153 6.973238e-08 4.981718e+00 -3.746080e-04 154 7.023238e-08 4.986311e+00 -6.346954e-04 155 7.073238e-08 4.989673e+00 -9.499326e-04 156 7.123238e-08 4.992124e+00 -1.318746e-03 157 7.173238e-08 4.993938e+00 -1.742337e-03 158 7.223238e-08 4.995268e+00 -2.225687e-03 159 7.273238e-08 4.996266e+00 -2.779776e-03 160 7.323238e-08 4.997004e+00 -3.327745e-03 161 7.373238e-08 4.997570e+00 -2.230166e-03 162 7.423238e-08 4.997991e+00 3.715083e-03 163 7.473238e-08 4.998323e+00 1.783986e-02 164 7.523238e-08 4.998572e+00 4.339968e-02 165 7.573238e-08 4.998776e+00 8.353844e-02 166 7.623238e-08 4.998931e+00 1.414471e-01 167 7.673238e-08 4.999063e+00 2.203863e-01 168 7.723238e-08 4.999165e+00 3.235990e-01 169 7.773238e-08 4.999256e+00 4.552552e-01 170 7.823238e-08 4.999328e+00 6.238792e-01 Index time v(4) v(5) -------------------------------------------------------------------------------- 171 7.873238e-08 4.999395e+00 8.474177e-01 172 7.923238e-08 4.999449e+00 1.136642e+00 173 7.973238e-08 4.999501e+00 1.485583e+00 174 8.023238e-08 4.999543e+00 1.884351e+00 175 8.073238e-08 4.999585e+00 2.320626e+00 176 8.123238e-08 4.999619e+00 2.766788e+00 177 8.173238e-08 4.999653e+00 3.189668e+00 178 8.223238e-08 4.999681e+00 3.568872e+00 179 8.273238e-08 4.999710e+00 3.892860e+00 180 8.323238e-08 4.999733e+00 4.158449e+00 181 8.373238e-08 4.999758e+00 4.369344e+00 182 8.423238e-08 4.999777e+00 4.532646e+00 183 8.473238e-08 4.999797e+00 4.656650e+00 184 8.523238e-08 4.999813e+00 4.749416e+00 185 8.573238e-08 4.999831e+00 4.818029e+00 186 8.623238e-08 4.999844e+00 4.868346e+00 187 8.673238e-08 4.999859e+00 4.905011e+00 188 8.723238e-08 4.999870e+00 4.931600e+00 189 8.773238e-08 4.999883e+00 4.950814e+00 190 8.823238e-08 4.999892e+00 4.964664e+00 191 8.873238e-08 4.999902e+00 4.974627e+00 192 8.923238e-08 4.999910e+00 4.981785e+00 193 8.973238e-08 4.999919e+00 4.986923e+00 194 9.023238e-08 4.999925e+00 4.990609e+00 195 9.073238e-08 4.999933e+00 4.993253e+00 196 9.123238e-08 4.999938e+00 4.995149e+00 197 9.173238e-08 4.999944e+00 4.996509e+00 198 9.223238e-08 4.999948e+00 4.997485e+00 199 9.273238e-08 4.999954e+00 4.998186e+00 200 9.323238e-08 4.999957e+00 4.998689e+00 201 9.373238e-08 4.999962e+00 4.999051e+00 202 9.423238e-08 4.999964e+00 4.999312e+00 203 9.473238e-08 4.999968e+00 4.999500e+00 204 9.523238e-08 4.999970e+00 4.999636e+00 205 9.573238e-08 4.999974e+00 4.999734e+00 206 9.623238e-08 4.999975e+00 4.999805e+00 207 9.673238e-08 4.999978e+00 4.999856e+00 208 9.723238e-08 4.999980e+00 4.999894e+00 209 9.773238e-08 4.999982e+00 4.999921e+00 210 9.823238e-08 4.999983e+00 4.999942e+00 211 9.873238e-08 4.999985e+00 4.999956e+00 212 9.923238e-08 4.999986e+00 4.999967e+00 213 9.973238e-08 4.999988e+00 4.999975e+00 214 1.002324e-07 4.999988e+00 4.999981e+00 215 1.007324e-07 4.999990e+00 4.999986e+00 216 1.012324e-07 4.999990e+00 4.999989e+00 217 1.017324e-07 4.999992e+00 4.999992e+00 218 1.022324e-07 4.999992e+00 4.999993e+00 219 1.027324e-07 4.999993e+00 4.999995e+00 220 1.032324e-07 4.999993e+00 4.999996e+00 221 1.037324e-07 4.999994e+00 4.999997e+00 222 1.042324e-07 4.999994e+00 4.999998e+00 223 1.047324e-07 4.999995e+00 4.999998e+00 224 1.052324e-07 4.999995e+00 4.999998e+00 225 1.057324e-07 4.999996e+00 4.999999e+00 226 1.062324e-07 4.999996e+00 4.999999e+00 227 1.067324e-07 4.999997e+00 4.999999e+00 228 1.072324e-07 4.999997e+00 4.999999e+00 Index time v(4) v(5) -------------------------------------------------------------------------------- 229 1.077324e-07 4.999997e+00 4.999999e+00 230 1.082324e-07 4.999997e+00 5.000000e+00 231 1.087324e-07 4.999998e+00 5.000000e+00 232 1.092324e-07 4.999998e+00 5.000000e+00 233 1.097324e-07 4.999998e+00 5.000000e+00 234 1.102324e-07 4.999998e+00 5.000000e+00 235 1.107324e-07 4.999999e+00 5.000000e+00 236 1.112324e-07 4.999998e+00 5.000000e+00 237 1.117324e-07 4.999999e+00 5.000000e+00 238 1.122324e-07 4.999999e+00 5.000000e+00 239 1.127324e-07 4.999999e+00 5.000000e+00 240 1.132324e-07 4.999999e+00 5.000000e+00 241 1.137324e-07 4.999999e+00 5.000000e+00 242 1.142324e-07 4.999999e+00 5.000000e+00 243 1.147324e-07 4.999999e+00 5.000000e+00 244 1.152324e-07 4.999999e+00 5.000000e+00 245 1.157324e-07 4.999999e+00 5.000000e+00 246 1.162324e-07 4.999999e+00 5.000000e+00 247 1.167324e-07 5.000000e+00 5.000000e+00 248 1.172324e-07 4.999999e+00 5.000000e+00 249 1.177324e-07 5.000000e+00 5.000000e+00 250 1.182324e-07 5.000000e+00 5.000000e+00 251 1.187324e-07 5.000000e+00 5.000000e+00 252 1.192324e-07 5.000000e+00 5.000000e+00 253 1.197324e-07 5.000000e+00 5.000000e+00 254 1.202324e-07 5.000000e+00 5.000000e+00 255 1.207324e-07 5.000000e+00 5.000000e+00 256 1.212324e-07 5.000000e+00 5.000000e+00 257 1.217324e-07 5.000000e+00 5.000000e+00 258 1.222324e-07 5.000000e+00 5.000000e+00 259 1.227324e-07 5.000000e+00 5.000000e+00 260 1.232324e-07 5.000000e+00 5.000000e+00 261 1.237324e-07 5.000000e+00 5.000000e+00 262 1.242324e-07 5.000000e+00 5.000000e+00 263 1.247324e-07 5.000000e+00 5.000000e+00 264 1.252324e-07 5.000000e+00 5.000000e+00 265 1.257324e-07 5.000000e+00 5.000000e+00 266 1.262324e-07 5.000000e+00 5.000000e+00 267 1.267324e-07 5.000000e+00 5.000000e+00 268 1.272324e-07 5.000000e+00 5.000000e+00 269 1.277324e-07 5.000000e+00 5.000000e+00 270 1.282324e-07 5.000000e+00 5.000000e+00 271 1.287324e-07 5.000000e+00 5.000000e+00 272 1.292324e-07 5.000000e+00 5.000000e+00 273 1.297324e-07 5.000000e+00 5.000000e+00 274 1.302324e-07 5.000000e+00 5.000000e+00 275 1.307324e-07 5.000000e+00 5.000000e+00 276 1.312324e-07 5.000000e+00 5.000000e+00 277 1.317324e-07 5.000000e+00 5.000000e+00 278 1.322324e-07 5.000000e+00 5.000000e+00 279 1.327324e-07 5.000000e+00 5.000000e+00 280 1.332324e-07 5.000000e+00 5.000000e+00 281 1.337324e-07 5.000000e+00 5.000000e+00 282 1.342324e-07 5.000000e+00 5.000000e+00 283 1.347324e-07 5.000000e+00 5.000000e+00 284 1.352324e-07 5.000000e+00 5.000000e+00 285 1.357324e-07 5.000000e+00 5.000000e+00 286 1.362324e-07 5.000000e+00 5.000000e+00 Index time v(4) v(5) -------------------------------------------------------------------------------- 287 1.367324e-07 5.000000e+00 5.000000e+00 288 1.372324e-07 5.000000e+00 5.000000e+00 289 1.377324e-07 5.000000e+00 5.000000e+00 290 1.382324e-07 5.000000e+00 5.000000e+00 291 1.387324e-07 5.000000e+00 5.000000e+00 292 1.392324e-07 5.000000e+00 5.000000e+00 293 1.397324e-07 5.000000e+00 5.000000e+00 294 1.402324e-07 5.000000e+00 5.000000e+00 295 1.407324e-07 5.000000e+00 5.000000e+00 296 1.412324e-07 5.000000e+00 5.000000e+00 297 1.417324e-07 5.000000e+00 5.000000e+00 298 1.422324e-07 5.000000e+00 5.000000e+00 299 1.427324e-07 5.000000e+00 5.000000e+00 300 1.432324e-07 5.000000e+00 5.000000e+00 301 1.437324e-07 5.000000e+00 5.000000e+00 302 1.442324e-07 5.000000e+00 5.000000e+00 303 1.447324e-07 5.000000e+00 5.000000e+00 304 1.452324e-07 5.000000e+00 5.000000e+00 305 1.457324e-07 5.000000e+00 5.000000e+00 306 1.462324e-07 5.000000e+00 5.000000e+00 307 1.467324e-07 5.000000e+00 5.000000e+00 308 1.472324e-07 5.000000e+00 5.000000e+00 309 1.477324e-07 5.000000e+00 5.000000e+00 310 1.482324e-07 5.000000e+00 5.000000e+00 311 1.487324e-07 5.000000e+00 5.000000e+00 312 1.492324e-07 5.000000e+00 5.000000e+00 313 1.497324e-07 5.000000e+00 5.000000e+00 314 1.500000e-07 5.000000e+00 5.000000e+00 *** NDINV * 4 Transient Analysis Sat Aug 27 16:31:59 2005 -------------------------------------------------------------------------------- Index time v(11) v(12) v(13) -------------------------------------------------------------------------------- 0 0.000000e+00 5.000000e+00 1.436434e-08 5.000000e+00 1 5.000000e-12 5.000075e+00 4.021338e-07 5.000000e+00 2 1.000000e-11 5.000151e+00 7.876029e-07 5.000000e+00 3 2.000000e-11 5.000301e+00 1.554144e-06 5.000000e+00 4 4.000000e-11 5.000600e+00 3.062415e-06 5.000000e+00 5 8.000000e-11 5.001192e+00 5.990654e-06 5.000000e+00 6 1.600000e-10 5.002354e+00 1.154810e-05 5.000000e+00 7 1.800000e-10 5.002640e+00 1.287078e-05 5.000000e+00 8 2.200000e-10 5.003209e+00 1.547886e-05 5.000000e+00 9 3.000000e-10 5.004329e+00 2.049335e-05 5.000000e+00 10 4.600000e-10 5.005385e+00 2.422345e-05 5.000000e+00 11 6.354757e-10 4.997795e+00 -1.483841e-05 5.000000e+00 12 8.960570e-10 4.951031e+00 -2.309236e-04 4.999997e+00 13 1.196298e-09 4.853434e+00 -6.335196e-04 4.999992e+00 14 1.610915e-09 4.690296e+00 -1.185522e-03 4.999987e+00 15 2.000000e-09 4.525725e+00 -1.620535e-03 4.999985e+00 16 2.050000e-09 4.503409e+00 -1.672707e-03 4.999984e+00 17 2.150000e-09 4.458701e+00 -1.773878e-03 4.999984e+00 18 2.350000e-09 4.369211e+00 -1.956847e-03 4.999984e+00 19 2.750000e-09 4.191207e+00 -2.253421e-03 4.999984e+00 20 3.250000e-09 3.972133e+00 -2.471205e-03 4.999986e+00 21 3.750000e-09 3.754213e+00 7.201591e-03 5.000107e+00 22 4.235270e-09 3.541345e+00 3.404688e-02 5.000405e+00 23 4.735270e-09 3.322945e+00 7.485626e-02 5.000788e+00 24 5.235270e-09 3.108515e+00 1.259311e-01 5.001193e+00 25 5.735270e-09 2.899931e+00 1.871548e-01 5.001614e+00 26 6.235270e-09 2.698778e+00 2.580704e-01 5.002044e+00 27 6.735270e-09 2.506126e+00 3.387948e-01 5.002487e+00 28 7.235270e-09 2.322720e+00 4.299599e-01 5.002952e+00 29 7.735270e-09 2.148988e+00 5.330997e-01 5.003457e+00 30 8.235270e-09 1.985130e+00 6.510900e-01 5.004035e+00 31 8.735270e-09 1.831366e+00 7.882694e-01 5.002250e+00 32 9.235270e-09 1.687553e+00 9.513371e-01 4.993314e+00 33 9.735270e-09 1.553313e+00 1.145283e+00 4.974259e+00 34 1.023527e-08 1.428288e+00 1.369010e+00 4.943742e+00 35 1.073527e-08 1.312216e+00 1.618282e+00 4.900352e+00 36 1.123527e-08 1.205314e+00 1.886938e+00 4.842628e+00 37 1.173527e-08 1.107315e+00 2.167613e+00 4.769004e+00 38 1.223527e-08 1.017558e+00 2.452720e+00 4.677693e+00 39 1.273527e-08 9.354099e-01 2.735015e+00 4.566461e+00 40 1.323527e-08 8.601669e-01 3.008279e+00 4.432252e+00 41 1.373527e-08 7.912086e-01 3.267342e+00 4.270277e+00 42 1.423527e-08 7.278925e-01 3.508622e+00 4.073417e+00 43 1.473527e-08 6.695803e-01 3.728175e+00 3.839105e+00 44 1.523527e-08 6.157243e-01 3.922636e+00 3.572315e+00 45 1.573527e-08 5.659199e-01 4.091940e+00 3.279530e+00 46 1.623527e-08 5.198575e-01 4.237773e+00 2.966540e+00 47 1.673527e-08 4.772475e-01 4.361956e+00 2.641521e+00 48 1.723527e-08 4.378463e-01 4.467058e+00 2.318434e+00 49 1.773527e-08 4.014416e-01 4.555665e+00 2.011645e+00 50 1.823527e-08 3.678301e-01 4.629775e+00 1.729933e+00 51 1.873527e-08 3.368271e-01 4.691684e+00 1.476833e+00 52 1.923527e-08 3.082641e-01 4.743394e+00 1.253311e+00 53 1.973527e-08 2.819761e-01 4.786587e+00 1.058913e+00 54 2.023527e-08 2.578077e-01 4.822622e+00 8.916622e-01 Index time v(11) v(12) v(13) -------------------------------------------------------------------------------- 55 2.073527e-08 2.356058e-01 4.852643e+00 7.489893e-01 56 2.123527e-08 2.152269e-01 4.877629e+00 6.285023e-01 57 2.173527e-08 1.965346e-01 4.898405e+00 5.274318e-01 58 2.223527e-08 1.794043e-01 4.915663e+00 4.425382e-01 59 2.273527e-08 1.637162e-01 4.929981e+00 3.711124e-01 60 2.323527e-08 1.493579e-01 4.941857e+00 3.109320e-01 61 2.373527e-08 1.362234e-01 4.951700e+00 2.601935e-01 62 2.423527e-08 1.242150e-01 4.959859e+00 2.174243e-01 63 2.473527e-08 1.132406e-01 4.966620e+00 1.814128e-01 64 2.523527e-08 1.032159e-01 4.972226e+00 1.511401e-01 65 2.573527e-08 9.406177e-02 4.976874e+00 1.257414e-01 66 2.623527e-08 8.570590e-02 4.980730e+00 1.044714e-01 67 2.673527e-08 7.808078e-02 4.983929e+00 8.669479e-02 68 2.723527e-08 7.112475e-02 4.986586e+00 7.186399e-02 69 2.773527e-08 6.478052e-02 4.988793e+00 5.951331e-02 70 2.823527e-08 5.899584e-02 4.990628e+00 4.924276e-02 71 2.873527e-08 5.372230e-02 4.992153e+00 4.071504e-02 72 2.923527e-08 4.891583e-02 4.993423e+00 3.364193e-02 73 2.973527e-08 4.453553e-02 4.994480e+00 2.778232e-02 74 3.023527e-08 4.054442e-02 4.995362e+00 2.293158e-02 75 3.073527e-08 3.690844e-02 4.996097e+00 1.892058e-02 76 3.123527e-08 3.359656e-02 4.996711e+00 1.560534e-02 77 3.173527e-08 3.058011e-02 4.997224e+00 1.286768e-02 78 3.223527e-08 2.783316e-02 4.997653e+00 1.060729e-02 79 3.273527e-08 2.533175e-02 4.998012e+00 8.742555e-03 80 3.323527e-08 2.305425e-02 4.998313e+00 7.204043e-03 81 3.373527e-08 2.098071e-02 4.998566e+00 5.935801e-03 82 3.423527e-08 1.909308e-02 4.998779e+00 4.889957e-03 83 3.473527e-08 1.737471e-02 4.998957e+00 4.028321e-03 84 3.523527e-08 1.581056e-02 4.999108e+00 3.317978e-03 85 3.573527e-08 1.438680e-02 4.999235e+00 2.733031e-03 86 3.623527e-08 1.309098e-02 4.999343e+00 2.250876e-03 87 3.673527e-08 1.191159e-02 4.999434e+00 1.854010e-03 88 3.723527e-08 1.083828e-02 4.999512e+00 1.526892e-03 89 3.773527e-08 9.861485e-03 4.999577e+00 1.257747e-03 90 3.823527e-08 8.972603e-03 4.999634e+00 1.035876e-03 91 3.873527e-08 8.163711e-03 4.999681e+00 8.534011e-04 92 3.923527e-08 7.427668e-03 4.999723e+00 7.029363e-04 93 3.973527e-08 6.757891e-03 4.999758e+00 5.792426e-04 94 4.023527e-08 6.148456e-03 4.999788e+00 4.772013e-04 95 4.073527e-08 5.593910e-03 4.999814e+00 3.933578e-04 96 4.123527e-08 5.089350e-03 4.999836e+00 3.241444e-04 97 4.173527e-08 4.630254e-03 4.999856e+00 2.673091e-04 98 4.223527e-08 4.212552e-03 4.999873e+00 2.203475e-04 99 4.273527e-08 3.832497e-03 4.999887e+00 1.818147e-04 100 4.323527e-08 3.486719e-03 4.999900e+00 1.499356e-04 101 4.373527e-08 3.172113e-03 4.999911e+00 1.238047e-04 102 4.423527e-08 2.885887e-03 4.999921e+00 1.021495e-04 103 4.473527e-08 2.625471e-03 4.999930e+00 8.442258e-05 104 4.523527e-08 2.388551e-03 4.999937e+00 6.969912e-05 105 4.573527e-08 2.172997e-03 4.999944e+00 5.766792e-05 106 4.623527e-08 1.976895e-03 4.999950e+00 4.764584e-05 107 4.673527e-08 1.798481e-03 4.999955e+00 3.947571e-05 108 4.723527e-08 1.636169e-03 4.999960e+00 3.264382e-05 109 4.773527e-08 1.488499e-03 4.999964e+00 2.709194e-05 110 4.823527e-08 1.354157e-03 4.999967e+00 2.242621e-05 111 4.873527e-08 1.231936e-03 4.999971e+00 1.865058e-05 112 4.923527e-08 1.120747e-03 4.999974e+00 1.545692e-05 Index time v(11) v(12) v(13) -------------------------------------------------------------------------------- 113 4.973527e-08 1.019590e-03 4.999976e+00 1.288694e-05 114 5.023527e-08 9.275644e-04 4.999978e+00 1.069476e-05 115 5.073527e-08 8.438437e-04 4.999981e+00 8.943698e-06 116 5.123527e-08 7.676794e-04 4.999982e+00 7.433738e-06 117 5.173527e-08 6.983897e-04 4.999984e+00 6.239340e-06 118 5.223527e-08 6.353537e-04 4.999986e+00 5.194899e-06 119 5.273527e-08 5.780082e-04 4.999987e+00 4.379252e-06 120 5.323527e-08 5.258380e-04 4.999988e+00 3.653120e-06 121 5.373527e-08 4.783781e-04 4.999989e+00 3.095455e-06 122 5.423527e-08 4.352011e-04 4.999990e+00 2.587527e-06 123 5.473527e-08 3.959229e-04 4.999991e+00 2.205804e-06 124 5.523527e-08 3.601888e-04 4.999992e+00 1.847922e-06 125 5.573527e-08 3.276821e-04 4.999993e+00 1.586363e-06 126 5.623527e-08 2.981080e-04 4.999993e+00 1.332053e-06 127 5.673527e-08 2.712056e-04 4.999994e+00 1.152698e-06 128 5.723527e-08 2.467297e-04 4.999995e+00 9.702059e-07 129 5.773527e-08 2.244654e-04 4.999995e+00 8.471847e-07 130 5.823527e-08 2.042089e-04 4.999996e+00 7.147658e-07 131 5.873527e-08 1.857832e-04 4.999996e+00 6.304246e-07 132 5.923527e-08 1.690186e-04 4.999996e+00 5.331456e-07 133 5.973527e-08 1.537699e-04 4.999997e+00 4.754167e-07 134 6.023527e-08 1.398953e-04 4.999997e+00 4.029861e-07 135 6.073527e-08 1.272757e-04 4.999997e+00 3.636051e-07 136 6.123527e-08 1.157929e-04 4.999997e+00 3.089023e-07 137 6.173527e-08 1.053493e-04 4.999998e+00 2.821965e-07 138 6.223527e-08 9.584594e-05 4.999998e+00 2.402689e-07 139 6.273527e-08 8.720305e-05 4.999998e+00 2.223353e-07 140 6.323527e-08 7.933793e-05 4.999998e+00 1.897184e-07 141 6.373238e-08 7.222484e-05 4.999998e+00 1.779729e-07 142 6.423238e-08 6.571193e-05 4.999999e+00 1.522142e-07 143 6.473238e-08 5.978948e-05 4.999999e+00 1.445612e-07 144 6.523238e-08 5.439923e-05 4.999999e+00 1.239437e-07 145 6.573238e-08 4.949808e-05 4.999999e+00 1.192169e-07 146 6.623238e-08 4.503694e-05 4.999999e+00 1.024974e-07 147 6.673238e-08 4.098099e-05 4.999999e+00 9.979507e-08 148 6.723238e-08 3.728879e-05 4.999999e+00 8.607359e-08 149 6.773238e-08 3.393232e-05 4.999999e+00 8.476562e-08 150 6.823238e-08 3.087650e-05 4.999999e+00 7.338280e-08 151 6.873238e-08 2.809890e-05 4.999999e+00 7.302765e-08 152 6.923238e-08 2.556974e-05 4.999999e+00 6.349463e-08 153 6.973238e-08 2.327121e-05 4.999999e+00 6.378195e-08 154 7.023238e-08 2.117793e-05 5.000000e+00 5.573143e-08 155 7.073238e-08 1.927585e-05 5.000000e+00 5.644263e-08 156 7.123238e-08 1.754331e-05 5.000000e+00 4.959491e-08 157 7.173238e-08 1.596933e-05 5.000000e+00 5.057589e-08 158 7.223238e-08 1.453533e-05 5.000000e+00 4.471500e-08 159 7.273238e-08 1.323288e-05 5.000000e+00 4.585714e-08 160 7.323238e-08 1.204597e-05 5.000000e+00 4.081410e-08 161 7.373238e-08 1.096822e-05 5.000000e+00 4.204103e-08 162 7.423238e-08 9.985800e-06 5.000000e+00 3.768184e-08 163 7.473238e-08 9.094012e-06 5.000000e+00 3.894019e-08 164 7.523238e-08 8.280828e-06 5.000000e+00 3.515731e-08 165 7.573238e-08 7.542929e-06 5.000000e+00 3.641014e-08 166 7.623238e-08 6.869814e-06 5.000000e+00 3.311626e-08 167 7.673238e-08 6.259266e-06 5.000000e+00 3.433841e-08 168 7.723238e-08 5.702076e-06 5.000000e+00 3.146191e-08 169 7.773238e-08 5.196916e-06 5.000000e+00 3.263672e-08 170 7.823238e-08 4.735672e-06 5.000000e+00 3.011831e-08 Index time v(11) v(12) v(13) -------------------------------------------------------------------------------- 171 7.873238e-08 4.317724e-06 5.000000e+00 3.123523e-08 172 7.923238e-08 3.935889e-06 5.000000e+00 2.902540e-08 173 7.973238e-08 3.590110e-06 5.000000e+00 3.007828e-08 174 8.023238e-08 3.273999e-06 5.000000e+00 2.813539e-08 175 8.073238e-08 2.987942e-06 5.000000e+00 2.912124e-08 176 8.123238e-08 2.726229e-06 5.000000e+00 2.741006e-08 177 8.173238e-08 2.489592e-06 5.000000e+00 2.832814e-08 178 8.223238e-08 2.272903e-06 5.000000e+00 2.681868e-08 179 8.273238e-08 2.077160e-06 5.000000e+00 2.766982e-08 180 8.323238e-08 1.897738e-06 5.000000e+00 2.633643e-08 181 8.373238e-08 1.735833e-06 5.000000e+00 2.712257e-08 182 8.423238e-08 1.587257e-06 5.000000e+00 2.594322e-08 183 8.473238e-08 1.453352e-06 5.000000e+00 2.666703e-08 184 8.523238e-08 1.330309e-06 5.000000e+00 2.562274e-08 185 8.573238e-08 1.219571e-06 5.000000e+00 2.628736e-08 186 8.623238e-08 1.117664e-06 5.000000e+00 2.536169e-08 187 8.673238e-08 1.026095e-06 5.000000e+00 2.597054e-08 188 8.723238e-08 9.416830e-07 5.000000e+00 2.514924e-08 189 8.773238e-08 8.659739e-07 5.000000e+00 2.570585e-08 190 8.823238e-08 7.960450e-07 5.000000e+00 2.497652e-08 191 8.873238e-08 7.334576e-07 5.000000e+00 2.548447e-08 192 8.923238e-08 6.755184e-07 5.000000e+00 2.483630e-08 193 8.973238e-08 6.237866e-07 5.000000e+00 2.529910e-08 194 9.023238e-08 5.757737e-07 5.000000e+00 2.472265e-08 195 9.073238e-08 5.330223e-07 5.000000e+00 2.514370e-08 196 9.123238e-08 4.932277e-07 5.000000e+00 2.463070e-08 197 9.173238e-08 4.579051e-07 5.000000e+00 2.501329e-08 198 9.223238e-08 4.249151e-07 5.000000e+00 2.455647e-08 199 9.273238e-08 3.957374e-07 5.000000e+00 2.490372e-08 200 9.323238e-08 3.683818e-07 5.000000e+00 2.449671e-08 201 9.373238e-08 3.442865e-07 5.000000e+00 2.481154e-08 202 9.423238e-08 3.215970e-07 5.000000e+00 2.444874e-08 203 9.473238e-08 3.017049e-07 5.000000e+00 2.473391e-08 204 9.523238e-08 2.828797e-07 5.000000e+00 2.441037e-08 205 9.573238e-08 2.664634e-07 5.000000e+00 2.466844e-08 206 9.623238e-08 2.508390e-07 5.000000e+00 2.437979e-08 207 9.673238e-08 2.372967e-07 5.000000e+00 2.461317e-08 208 9.723238e-08 2.243237e-07 5.000000e+00 2.435556e-08 209 9.773238e-08 2.131575e-07 5.000000e+00 2.456643e-08 210 9.823238e-08 2.023811e-07 5.000000e+00 2.433645e-08 211 9.873238e-08 1.931789e-07 5.000000e+00 2.452687e-08 212 9.923238e-08 1.842228e-07 5.000000e+00 2.432149e-08 213 9.973238e-08 1.766438e-07 5.000000e+00 2.449332e-08 214 1.002324e-07 1.691962e-07 5.000000e+00 2.430988e-08 215 1.007324e-07 1.629585e-07 5.000000e+00 2.446484e-08 216 1.012324e-07 1.567613e-07 5.000000e+00 2.430095e-08 217 1.017324e-07 1.516317e-07 5.000000e+00 2.444062e-08 218 1.022324e-07 1.464713e-07 5.000000e+00 2.429418e-08 219 1.027324e-07 1.422569e-07 5.000000e+00 2.442000e-08 220 1.032324e-07 1.379563e-07 5.000000e+00 2.428912e-08 221 1.037324e-07 1.344975e-07 5.000000e+00 2.440241e-08 222 1.042324e-07 1.309102e-07 5.000000e+00 2.428544e-08 223 1.047324e-07 1.280751e-07 5.000000e+00 2.438739e-08 224 1.052324e-07 1.250797e-07 5.000000e+00 2.428283e-08 225 1.057324e-07 1.227592e-07 5.000000e+00 2.437454e-08 226 1.062324e-07 1.202552e-07 5.000000e+00 2.428107e-08 227 1.067324e-07 1.183591e-07 5.000000e+00 2.436352e-08 228 1.072324e-07 1.162632e-07 5.000000e+00 2.427997e-08 Index time v(11) v(12) v(13) -------------------------------------------------------------------------------- 229 1.077324e-07 1.147170e-07 5.000000e+00 2.435407e-08 230 1.082324e-07 1.129601e-07 5.000000e+00 2.427938e-08 231 1.087324e-07 1.117021e-07 5.000000e+00 2.434595e-08 232 1.092324e-07 1.102272e-07 5.000000e+00 2.427918e-08 233 1.097324e-07 1.092064e-07 5.000000e+00 2.433895e-08 234 1.102324e-07 1.079660e-07 5.000000e+00 2.427927e-08 235 1.107324e-07 1.071404e-07 5.000000e+00 2.433292e-08 236 1.112324e-07 1.060953e-07 5.000000e+00 2.427957e-08 237 1.117324e-07 1.054301e-07 5.000000e+00 2.432771e-08 238 1.122324e-07 1.045476e-07 5.000000e+00 2.428003e-08 239 1.127324e-07 1.040141e-07 5.000000e+00 2.432320e-08 240 1.132324e-07 1.032673e-07 5.000000e+00 2.428060e-08 241 1.137324e-07 1.028418e-07 5.000000e+00 2.431929e-08 242 1.142324e-07 1.022082e-07 5.000000e+00 2.428123e-08 243 1.147324e-07 1.018711e-07 5.000000e+00 2.431590e-08 244 1.152324e-07 1.013321e-07 5.000000e+00 2.428190e-08 245 1.157324e-07 1.010674e-07 5.000000e+00 2.431296e-08 246 1.162324e-07 1.006075e-07 5.000000e+00 2.428259e-08 247 1.167324e-07 1.004018e-07 5.000000e+00 2.431040e-08 248 1.172324e-07 1.000082e-07 5.000000e+00 2.428328e-08 249 1.177324e-07 9.985059e-08 5.000000e+00 2.430816e-08 250 1.182324e-07 9.951262e-08 5.000000e+00 2.428396e-08 251 1.187324e-07 9.939404e-08 5.000000e+00 2.430621e-08 252 1.192324e-07 9.910283e-08 5.000000e+00 2.428462e-08 253 1.197324e-07 9.901587e-08 5.000000e+00 2.430451e-08 254 1.202324e-07 9.876403e-08 5.000000e+00 2.428524e-08 255 1.207324e-07 9.870258e-08 5.000000e+00 2.430302e-08 256 1.212324e-07 9.848395e-08 5.000000e+00 2.428584e-08 257 1.217324e-07 9.844299e-08 5.000000e+00 2.430172e-08 258 1.222324e-07 9.825246e-08 5.000000e+00 2.428640e-08 259 1.227324e-07 9.822788e-08 5.000000e+00 2.430057e-08 260 1.232324e-07 9.806116e-08 5.000000e+00 2.428692e-08 261 1.237324e-07 9.804958e-08 5.000000e+00 2.429957e-08 262 1.242324e-07 9.790310e-08 5.000000e+00 2.428741e-08 263 1.247324e-07 9.790177e-08 5.000000e+00 2.429869e-08 264 1.252324e-07 9.777254e-08 5.000000e+00 2.428786e-08 265 1.257324e-07 9.777920e-08 5.000000e+00 2.429791e-08 266 1.262324e-07 9.766472e-08 5.000000e+00 2.428828e-08 267 1.267324e-07 9.767754e-08 5.000000e+00 2.429723e-08 268 1.272324e-07 9.757571e-08 5.000000e+00 2.428866e-08 269 1.277324e-07 9.759320e-08 5.000000e+00 2.429663e-08 270 1.282324e-07 9.750226e-08 5.000000e+00 2.428902e-08 271 1.287324e-07 9.752320e-08 5.000000e+00 2.429610e-08 272 1.292324e-07 9.744166e-08 5.000000e+00 2.428934e-08 273 1.297324e-07 9.746507e-08 5.000000e+00 2.429563e-08 274 1.302324e-07 9.739169e-08 5.000000e+00 2.428963e-08 275 1.307324e-07 9.741679e-08 5.000000e+00 2.429522e-08 276 1.312324e-07 9.735051e-08 5.000000e+00 2.428990e-08 277 1.317324e-07 9.737667e-08 5.000000e+00 2.429485e-08 278 1.322324e-07 9.731659e-08 5.000000e+00 2.429014e-08 279 1.327324e-07 9.734331e-08 5.000000e+00 2.429453e-08 280 1.332324e-07 9.728867e-08 5.000000e+00 2.429036e-08 281 1.337324e-07 9.731555e-08 5.000000e+00 2.429425e-08 282 1.342324e-07 9.726571e-08 5.000000e+00 2.429056e-08 283 1.347324e-07 9.729244e-08 5.000000e+00 2.429400e-08 284 1.352324e-07 9.724684e-08 5.000000e+00 2.429074e-08 285 1.357324e-07 9.727318e-08 5.000000e+00 2.429378e-08 286 1.362324e-07 9.723136e-08 5.000000e+00 2.429090e-08 Index time v(11) v(12) v(13) -------------------------------------------------------------------------------- 287 1.367324e-07 9.725712e-08 5.000000e+00 2.429358e-08 288 1.372324e-07 9.721866e-08 5.000000e+00 2.429104e-08 289 1.377324e-07 9.724371e-08 5.000000e+00 2.429341e-08 290 1.382324e-07 9.720826e-08 5.000000e+00 2.429117e-08 291 1.387324e-07 9.723251e-08 5.000000e+00 2.429325e-08 292 1.392324e-07 9.719977e-08 5.000000e+00 2.429129e-08 293 1.397324e-07 9.722313e-08 5.000000e+00 2.429312e-08 294 1.402324e-07 9.719283e-08 5.000000e+00 2.429140e-08 295 1.407324e-07 9.721528e-08 5.000000e+00 2.429300e-08 296 1.412324e-07 9.718719e-08 5.000000e+00 2.429149e-08 297 1.417324e-07 9.720868e-08 5.000000e+00 2.429289e-08 298 1.422324e-07 9.718261e-08 5.000000e+00 2.429158e-08 299 1.427324e-07 9.720314e-08 5.000000e+00 2.429280e-08 300 1.432324e-07 9.717890e-08 5.000000e+00 2.429165e-08 301 1.437324e-07 9.719848e-08 5.000000e+00 2.429272e-08 302 1.442324e-07 9.717591e-08 5.000000e+00 2.429172e-08 303 1.447324e-07 9.719454e-08 5.000000e+00 2.429265e-08 304 1.452324e-07 9.717350e-08 5.000000e+00 2.429178e-08 305 1.457324e-07 9.719121e-08 5.000000e+00 2.429258e-08 306 1.462324e-07 9.717159e-08 5.000000e+00 2.429183e-08 307 1.467324e-07 9.718838e-08 5.000000e+00 2.429253e-08 308 1.472324e-07 9.717006e-08 5.000000e+00 2.429188e-08 309 1.477324e-07 9.718598e-08 5.000000e+00 2.429248e-08 310 1.482324e-07 9.716886e-08 5.000000e+00 2.429192e-08 311 1.487324e-07 9.718394e-08 5.000000e+00 2.429243e-08 312 1.492324e-07 9.716793e-08 5.000000e+00 2.429196e-08 313 1.497324e-07 9.718219e-08 5.000000e+00 2.429239e-08 314 1.500000e-07 9.716765e-08 5.000000e+00 2.429200e-08 *** NDINV * 4 Transient Analysis Sat Aug 27 16:31:59 2005 -------------------------------------------------------------------------------- Index time v(41) v(42) v(43) -------------------------------------------------------------------------------- 0 0.000000e+00 5.000000e+00 1.436238e-08 5.000000e+00 1 5.000000e-12 5.000000e+00 2.562350e-08 5.000000e+00 2 1.000000e-11 5.000000e+00 3.683353e-08 5.000000e+00 3 2.000000e-11 5.000000e+00 5.915273e-08 5.000000e+00 4 4.000000e-11 5.000000e+00 1.031959e-07 5.000000e+00 5 8.000000e-11 5.000000e+00 1.889638e-07 5.000000e+00 6 1.600000e-10 5.000000e+00 3.515952e-07 5.000000e+00 7 1.800000e-10 5.000000e+00 3.900968e-07 5.000000e+00 8 2.200000e-10 5.000000e+00 4.657306e-07 5.000000e+00 9 3.000000e-10 5.000000e+00 6.090363e-07 5.000000e+00 10 4.600000e-10 5.000000e+00 8.662008e-07 5.000000e+00 11 6.354757e-10 5.000000e+00 1.107426e-06 5.000000e+00 12 8.960570e-10 4.999999e+00 1.398952e-06 5.000000e+00 13 1.196298e-09 4.999999e+00 1.652997e-06 5.000000e+00 14 1.610915e-09 4.999999e+00 1.893683e-06 5.000000e+00 15 2.000000e-09 4.999999e+00 2.031785e-06 5.000000e+00 16 2.050000e-09 4.999999e+00 2.044075e-06 5.000000e+00 17 2.150000e-09 4.999999e+00 2.066866e-06 5.000000e+00 18 2.350000e-09 4.999999e+00 2.102547e-06 5.000000e+00 19 2.750000e-09 4.999999e+00 2.141602e-06 5.000000e+00 20 3.250000e-09 4.999999e+00 2.145167e-06 5.000000e+00 21 3.750000e-09 4.999999e+00 2.115212e-06 5.000000e+00 22 4.235270e-09 4.999999e+00 2.066388e-06 5.000000e+00 23 4.735270e-09 4.999999e+00 2.004236e-06 5.000000e+00 24 5.235270e-09 4.999999e+00 1.935644e-06 5.000000e+00 25 5.735270e-09 4.999999e+00 1.864323e-06 5.000000e+00 26 6.235270e-09 4.999999e+00 1.792651e-06 5.000000e+00 27 6.735270e-09 4.999999e+00 1.722118e-06 5.000000e+00 28 7.235270e-09 4.999999e+00 1.653628e-06 5.000000e+00 29 7.735270e-09 4.999999e+00 1.587696e-06 5.000000e+00 30 8.235270e-09 4.999999e+00 1.524587e-06 5.000000e+00 31 8.735270e-09 4.999999e+00 1.464400e-06 5.000000e+00 32 9.235270e-09 4.999999e+00 1.407133e-06 5.000000e+00 33 9.735270e-09 4.999999e+00 1.352719e-06 5.000000e+00 34 1.023527e-08 4.999999e+00 1.301054e-06 5.000000e+00 35 1.073527e-08 4.999999e+00 1.252013e-06 5.000000e+00 36 1.123527e-08 4.999999e+00 1.205462e-06 5.000000e+00 37 1.173527e-08 4.999999e+00 1.161263e-06 5.000000e+00 38 1.223527e-08 4.999999e+00 1.119283e-06 5.000000e+00 39 1.273527e-08 4.999999e+00 1.079390e-06 5.000000e+00 40 1.323527e-08 4.999999e+00 1.041460e-06 5.000000e+00 41 1.373527e-08 4.999999e+00 1.005376e-06 5.000000e+00 42 1.423527e-08 4.999999e+00 9.710274e-07 5.000000e+00 43 1.473527e-08 4.999999e+00 9.383102e-07 5.000000e+00 44 1.523527e-08 4.999999e+00 9.071280e-07 5.000000e+00 45 1.573527e-08 4.999999e+00 8.773903e-07 5.000000e+00 46 1.623527e-08 4.999999e+00 8.490130e-07 5.000000e+00 47 1.673527e-08 4.999999e+00 8.219177e-07 5.000000e+00 48 1.723527e-08 4.999999e+00 7.960313e-07 5.000000e+00 49 1.773527e-08 4.999999e+00 7.712854e-07 5.000000e+00 50 1.823527e-08 4.999999e+00 7.476166e-07 5.000000e+00 51 1.873527e-08 4.999999e+00 7.249653e-07 5.000000e+00 52 1.923527e-08 4.999999e+00 7.032763e-07 5.000000e+00 53 1.973527e-08 4.999999e+00 6.824976e-07 5.000000e+00 54 2.023527e-08 4.999999e+00 6.625807e-07 5.000000e+00 Index time v(41) v(42) v(43) -------------------------------------------------------------------------------- 55 2.073527e-08 4.999999e+00 6.434803e-07 5.000000e+00 56 2.123527e-08 4.999999e+00 6.251540e-07 5.000000e+00 57 2.173527e-08 4.999999e+00 6.075618e-07 5.000000e+00 58 2.223527e-08 4.999999e+00 5.906666e-07 5.000000e+00 59 2.273527e-08 4.999999e+00 5.744331e-07 5.000000e+00 60 2.323527e-08 4.999999e+00 5.588286e-07 5.000000e+00 61 2.373527e-08 4.999999e+00 5.438219e-07 5.000000e+00 62 2.423527e-08 4.999999e+00 5.293841e-07 5.000000e+00 63 2.473527e-08 4.999999e+00 5.154878e-07 5.000000e+00 64 2.523527e-08 4.999999e+00 5.021071e-07 5.000000e+00 65 2.573527e-08 4.999999e+00 4.892177e-07 5.000000e+00 66 2.623527e-08 5.000000e+00 4.767968e-07 5.000000e+00 67 2.673527e-08 5.000000e+00 4.648226e-07 5.000000e+00 68 2.723527e-08 5.000000e+00 4.532748e-07 5.000000e+00 69 2.773527e-08 5.000000e+00 4.421340e-07 5.000000e+00 70 2.823527e-08 5.000000e+00 4.313820e-07 5.000000e+00 71 2.873527e-08 5.000000e+00 4.210016e-07 5.000000e+00 72 2.923527e-08 5.000000e+00 4.109764e-07 5.000000e+00 73 2.973527e-08 5.000000e+00 4.012910e-07 5.000000e+00 74 3.023527e-08 5.000000e+00 3.919308e-07 5.000000e+00 75 3.073527e-08 5.000000e+00 3.828817e-07 5.000000e+00 76 3.123527e-08 5.000000e+00 3.741308e-07 5.000000e+00 77 3.173527e-08 5.000000e+00 3.656654e-07 5.000000e+00 78 3.223527e-08 5.000000e+00 3.574738e-07 5.000000e+00 79 3.273527e-08 5.000000e+00 3.495447e-07 5.000000e+00 80 3.323527e-08 5.000000e+00 3.418674e-07 5.000000e+00 81 3.373527e-08 5.000000e+00 3.344317e-07 5.000000e+00 82 3.423527e-08 5.000000e+00 3.272279e-07 5.000000e+00 83 3.473527e-08 5.000000e+00 3.202468e-07 5.000000e+00 84 3.523527e-08 5.000000e+00 3.134797e-07 5.000000e+00 85 3.573527e-08 5.000000e+00 3.069182e-07 5.000000e+00 86 3.623527e-08 5.000000e+00 3.005543e-07 5.000000e+00 87 3.673527e-08 5.000000e+00 2.943806e-07 5.000000e+00 88 3.723527e-08 5.000000e+00 2.883897e-07 5.000000e+00 89 3.773527e-08 5.000000e+00 2.825748e-07 5.000000e+00 90 3.823527e-08 5.000000e+00 2.769292e-07 5.000000e+00 91 3.873527e-08 5.000000e+00 2.714468e-07 5.000000e+00 92 3.923527e-08 5.000000e+00 2.661214e-07 5.000000e+00 93 3.973527e-08 5.000000e+00 2.609471e-07 5.000000e+00 94 4.023527e-08 5.000000e+00 2.559187e-07 5.000000e+00 95 4.073527e-08 5.000000e+00 2.510311e-07 5.000000e+00 96 4.123527e-08 5.000000e+00 2.462794e-07 5.000000e+00 97 4.173527e-08 5.000000e+00 2.416591e-07 5.000000e+00 98 4.223527e-08 5.000000e+00 2.371650e-07 5.000000e+00 99 4.273527e-08 5.000000e+00 2.327925e-07 5.000000e+00 100 4.323527e-08 5.000000e+00 2.285489e-07 5.000000e+00 101 4.373527e-08 5.000000e+00 2.244506e-07 5.000000e+00 102 4.423527e-08 5.000000e+00 2.204626e-07 5.000000e+00 103 4.473527e-08 5.000000e+00 2.165502e-07 5.000000e+00 104 4.523527e-08 5.000000e+00 2.127227e-07 5.000000e+00 105 4.573527e-08 5.000000e+00 2.089846e-07 5.000000e+00 106 4.623527e-08 5.000000e+00 2.053389e-07 5.000000e+00 107 4.673527e-08 5.000000e+00 2.017871e-07 5.000000e+00 108 4.723527e-08 5.000000e+00 1.983302e-07 5.000000e+00 109 4.773527e-08 5.000000e+00 1.949691e-07 5.000000e+00 110 4.823527e-08 5.000000e+00 1.917050e-07 5.000000e+00 111 4.873527e-08 5.000000e+00 1.874695e-07 5.000000e+00 112 4.923527e-08 4.999999e+00 1.817704e-07 5.000000e+00 Index time v(41) v(42) v(43) -------------------------------------------------------------------------------- 113 4.973527e-08 4.999998e+00 1.754222e-07 5.000000e+00 114 5.023527e-08 4.999997e+00 1.688391e-07 5.000000e+00 115 5.073527e-08 4.999995e+00 1.622753e-07 5.000000e+00 116 5.123527e-08 4.999994e+00 1.558807e-07 5.000000e+00 117 5.173527e-08 4.999992e+00 1.496973e-07 5.000000e+00 118 5.223527e-08 4.999990e+00 1.436628e-07 5.000000e+00 119 5.273527e-08 4.999988e+00 1.375889e-07 5.000000e+00 120 5.323527e-08 4.999985e+00 1.313805e-07 5.000000e+00 121 5.373527e-08 4.999990e+00 1.581281e-07 5.000000e+00 122 5.423527e-08 5.000018e+00 2.778349e-07 5.000000e+00 123 5.473527e-08 5.000084e+00 5.314870e-07 5.000000e+00 124 5.523527e-08 5.000201e+00 9.386964e-07 5.000000e+00 125 5.573527e-08 5.000378e+00 1.509576e-06 5.000000e+00 126 5.623527e-08 5.000625e+00 2.254716e-06 5.000000e+00 127 5.673527e-08 5.000951e+00 3.189877e-06 5.000000e+00 128 5.723527e-08 5.001363e+00 4.335638e-06 5.000000e+00 129 5.773527e-08 5.001875e+00 5.735936e-06 5.000000e+00 130 5.823527e-08 5.002515e+00 7.527478e-06 5.000000e+00 131 5.873527e-08 5.002557e+00 6.287840e-06 5.000000e+00 132 5.923527e-08 4.991720e+00 -4.199799e-05 4.999999e+00 133 5.973527e-08 4.952418e+00 -1.978542e-04 4.999998e+00 134 6.023527e-08 4.874456e+00 -4.702047e-04 4.999995e+00 135 6.073527e-08 4.752034e+00 -8.478336e-04 4.999992e+00 136 6.123527e-08 4.594488e+00 -1.259188e-03 4.999989e+00 137 6.173527e-08 4.422671e+00 -1.606621e-03 4.999988e+00 138 6.223527e-08 4.241183e+00 -1.893983e-03 4.999988e+00 139 6.273527e-08 4.048069e+00 -2.152141e-03 4.999988e+00 140 6.323527e-08 3.845027e+00 3.128803e-03 5.000055e+00 141 6.373238e-08 3.635138e+00 2.347570e-02 5.000287e+00 142 6.423238e-08 3.420332e+00 5.860337e-02 5.000634e+00 143 6.473238e-08 3.206902e+00 1.040992e-01 5.001012e+00 144 6.523238e-08 2.997576e+00 1.598930e-01 5.001415e+00 145 6.573238e-08 2.794290e+00 2.254884e-01 5.001831e+00 146 6.623238e-08 2.598535e+00 3.008256e-01 5.002261e+00 147 6.673238e-08 2.411324e+00 3.862450e-01 5.002710e+00 148 6.723238e-08 2.233347e+00 4.828159e-01 5.003190e+00 149 6.773238e-08 2.064978e+00 5.926653e-01 5.003726e+00 150 6.823238e-08 1.906488e+00 7.194470e-01 5.003867e+00 151 6.873238e-08 1.757968e+00 8.684762e-01 4.999187e+00 152 6.923238e-08 1.619089e+00 1.046528e+00 4.985146e+00 153 6.973238e-08 1.489543e+00 1.255962e+00 4.960367e+00 154 7.023238e-08 1.369102e+00 1.493058e+00 4.923432e+00 155 7.073238e-08 1.257672e+00 1.752802e+00 4.872926e+00 156 7.123238e-08 1.155305e+00 2.028432e+00 4.807330e+00 157 7.173238e-08 1.061541e+00 2.312196e+00 4.724976e+00 158 7.223238e-08 9.756765e-01 2.596602e+00 4.623885e+00 159 7.273238e-08 8.970774e-01 2.874937e+00 4.501471e+00 160 7.323238e-08 8.250815e-01 3.141435e+00 4.353865e+00 161 7.373238e-08 7.590429e-01 3.391794e+00 4.175130e+00 162 7.423238e-08 6.982908e-01 3.622713e+00 3.959390e+00 163 7.473238e-08 6.422682e-01 3.829909e+00 3.707803e+00 164 7.523238e-08 5.904753e-01 4.011410e+00 3.427083e+00 165 7.573238e-08 5.425685e-01 4.168573e+00 3.123403e+00 166 7.623238e-08 4.982549e-01 4.303314e+00 2.802591e+00 167 7.673238e-08 4.572711e-01 4.417740e+00 2.476153e+00 168 7.723238e-08 4.193845e-01 4.514252e+00 2.159822e+00 169 7.773238e-08 3.843894e-01 4.595162e+00 1.865054e+00 170 7.823238e-08 3.520942e-01 4.662788e+00 1.597796e+00 Index time v(41) v(42) v(43) -------------------------------------------------------------------------------- 171 7.873238e-08 3.223269e-01 4.719318e+00 1.360289e+00 172 7.923238e-08 2.949163e-01 4.766526e+00 1.152358e+00 173 7.973238e-08 2.697023e-01 4.805907e+00 9.721881e-01 174 8.023238e-08 2.465283e-01 4.838720e+00 8.176079e-01 175 8.073238e-08 2.252496e-01 4.866038e+00 6.862371e-01 176 8.123238e-08 2.057246e-01 4.888765e+00 5.757461e-01 177 8.173238e-08 1.878242e-01 4.907656e+00 4.832360e-01 178 8.223238e-08 1.714235e-01 4.923336e+00 4.050886e-01 179 8.273238e-08 1.564077e-01 4.936345e+00 3.390605e-01 180 8.323238e-08 1.426676e-01 4.947131e+00 2.835923e-01 181 8.373238e-08 1.301033e-01 4.956073e+00 2.369319e-01 182 8.423238e-08 1.186185e-01 4.963483e+00 1.976818e-01 183 8.473238e-08 1.081262e-01 4.969626e+00 1.646930e-01 184 8.523238e-08 9.854330e-02 4.974718e+00 1.370097e-01 185 8.573238e-08 8.979512e-02 4.978942e+00 1.138236e-01 186 8.623238e-08 8.181077e-02 4.982446e+00 9.444649e-02 187 8.673238e-08 7.452642e-02 4.985355e+00 7.828091e-02 188 8.723238e-08 6.788188e-02 4.987771e+00 6.481909e-02 189 8.773238e-08 6.182299e-02 4.989778e+00 5.362510e-02 190 8.823238e-08 5.629885e-02 4.991447e+00 4.433126e-02 191 8.873238e-08 5.126373e-02 4.992836e+00 3.662346e-02 192 8.923238e-08 4.667478e-02 4.993992e+00 3.023912e-02 193 8.973238e-08 4.249350e-02 4.994955e+00 2.495497e-02 194 9.023238e-08 3.868394e-02 4.995758e+00 2.058599e-02 195 9.073238e-08 3.521379e-02 4.996428e+00 1.697531e-02 196 9.123238e-08 3.205297e-02 4.996987e+00 1.399403e-02 197 9.173238e-08 2.917443e-02 4.997455e+00 1.153287e-02 198 9.223238e-08 2.655306e-02 4.997846e+00 9.502804e-03 199 9.273238e-08 2.416623e-02 4.998175e+00 7.828207e-03 200 9.323238e-08 2.199305e-02 4.998450e+00 6.448012e-03 201 9.373238e-08 2.001460e-02 4.998681e+00 5.310098e-03 202 9.423238e-08 1.821353e-02 4.998875e+00 4.372808e-03 203 9.473238e-08 1.657405e-02 4.999039e+00 3.600314e-03 204 9.523238e-08 1.508175e-02 4.999177e+00 2.964336e-03 205 9.573238e-08 1.372346e-02 4.999294e+00 2.440273e-03 206 9.623238e-08 1.248725e-02 4.999392e+00 2.009011e-03 207 9.673238e-08 1.136214e-02 4.999476e+00 1.653655e-03 208 9.723238e-08 1.033826e-02 4.999547e+00 1.361344e-03 209 9.773238e-08 9.406436e-03 4.999608e+00 1.120464e-03 210 9.823238e-08 8.558531e-03 4.999659e+00 9.224013e-04 211 9.873238e-08 7.786888e-03 4.999704e+00 7.591510e-04 212 9.923238e-08 7.084798e-03 4.999741e+00 6.249824e-04 213 9.973238e-08 6.445866e-03 4.999774e+00 5.143553e-04 214 1.002324e-07 5.864573e-03 4.999802e+00 4.234857e-04 215 1.007324e-07 5.335572e-03 4.999826e+00 3.485198e-04 216 1.012324e-07 4.854332e-03 4.999847e+00 2.869848e-04 217 1.017324e-07 4.416377e-03 4.999865e+00 2.361809e-04 218 1.022324e-07 4.017996e-03 4.999880e+00 1.945160e-04 219 1.027324e-07 3.655438e-03 4.999894e+00 1.600813e-04 220 1.032324e-07 3.325670e-03 4.999906e+00 1.318734e-04 221 1.037324e-07 3.025541e-03 4.999917e+00 1.085281e-04 222 1.042324e-07 2.752581e-03 4.999926e+00 8.943323e-05 223 1.047324e-07 2.504141e-03 4.999934e+00 7.360058e-05 224 1.052324e-07 2.278213e-03 4.999941e+00 6.067650e-05 225 1.057324e-07 2.072565e-03 4.999947e+00 4.993388e-05 226 1.062324e-07 1.885573e-03 4.999953e+00 4.118805e-05 227 1.067324e-07 1.715349e-03 4.999957e+00 3.389456e-05 228 1.072324e-07 1.560587e-03 4.999962e+00 2.797770e-05 Index time v(41) v(42) v(43) -------------------------------------------------------------------------------- 229 1.077324e-07 1.419688e-03 4.999966e+00 2.302192e-05 230 1.082324e-07 1.291605e-03 4.999969e+00 1.902039e-05 231 1.087324e-07 1.174979e-03 4.999972e+00 1.564951e-05 232 1.092324e-07 1.068980e-03 4.999975e+00 1.294464e-05 233 1.097324e-07 9.724459e-04 4.999977e+00 1.064870e-05 234 1.102324e-07 8.847245e-04 4.999980e+00 8.821602e-06 235 1.107324e-07 8.048211e-04 4.999982e+00 7.255082e-06 236 1.112324e-07 7.322278e-04 4.999983e+00 6.022118e-06 237 1.117324e-07 6.660896e-04 4.999985e+00 4.950902e-06 238 1.122324e-07 6.060171e-04 4.999986e+00 4.120011e-06 239 1.127324e-07 5.512721e-04 4.999988e+00 3.385409e-06 240 1.132324e-07 5.015623e-04 4.999989e+00 2.826546e-06 241 1.137324e-07 4.562471e-04 4.999990e+00 2.320958e-06 242 1.142324e-07 4.151136e-04 4.999991e+00 1.946068e-06 243 1.147324e-07 3.776034e-04 4.999992e+00 1.596510e-06 244 1.152324e-07 3.435677e-04 4.999992e+00 1.345971e-06 245 1.157324e-07 3.125174e-04 4.999993e+00 1.102906e-06 246 1.162324e-07 2.843556e-04 4.999994e+00 9.363514e-07 247 1.167324e-07 2.586520e-04 4.999994e+00 7.661366e-07 248 1.172324e-07 2.353514e-04 4.999995e+00 6.562366e-07 249 1.177324e-07 2.140730e-04 4.999995e+00 5.360015e-07 250 1.182324e-07 1.947952e-04 4.999996e+00 4.642580e-07 251 1.187324e-07 1.771796e-04 4.999996e+00 3.784379e-07 252 1.192324e-07 1.612309e-04 4.999996e+00 3.323331e-07 253 1.197324e-07 1.466468e-04 4.999997e+00 2.703196e-07 254 1.202324e-07 1.334530e-04 4.999997e+00 2.413860e-07 255 1.207324e-07 1.213781e-04 4.999997e+00 1.959355e-07 256 1.212324e-07 1.104640e-04 4.999998e+00 1.784493e-07 257 1.217324e-07 1.004659e-04 4.999998e+00 1.446040e-07 258 1.222324e-07 9.143827e-05 4.999998e+00 1.346994e-07 259 1.227324e-07 8.315926e-05 4.999998e+00 1.090560e-07 260 1.232324e-07 7.569258e-05 4.999998e+00 1.041255e-07 261 1.237324e-07 6.883649e-05 4.999998e+00 8.433922e-08 262 1.242324e-07 6.266144e-05 4.999999e+00 8.262760e-08 263 1.247324e-07 5.698317e-05 4.999999e+00 6.707496e-08 264 1.252324e-07 5.187685e-05 4.999999e+00 6.740387e-08 265 1.257324e-07 4.717357e-05 4.999999e+00 5.495464e-08 266 1.262324e-07 4.295150e-05 4.999999e+00 5.653612e-08 267 1.267324e-07 3.905531e-05 4.999999e+00 4.639770e-08 268 1.272324e-07 3.556486e-05 4.999999e+00 4.870778e-08 269 1.277324e-07 3.233681e-05 4.999999e+00 4.031954e-08 270 1.282324e-07 2.945163e-05 4.999999e+00 4.301262e-08 271 1.287324e-07 2.677673e-05 4.999999e+00 3.597389e-08 272 1.292324e-07 2.439229e-05 4.999999e+00 3.882470e-08 273 1.297324e-07 2.217534e-05 4.999999e+00 3.284567e-08 274 1.302324e-07 2.020514e-05 5.000000e+00 3.570989e-08 275 1.307324e-07 1.836735e-05 5.000000e+00 3.057801e-08 276 1.312324e-07 1.673980e-05 5.000000e+00 3.336569e-08 277 1.317324e-07 1.521598e-05 5.000000e+00 2.892263e-08 278 1.322324e-07 1.387184e-05 5.000000e+00 3.158009e-08 279 1.327324e-07 1.260801e-05 5.000000e+00 2.770595e-08 280 1.332324e-07 1.149827e-05 5.000000e+00 3.020359e-08 281 1.337324e-07 1.044975e-05 5.000000e+00 2.680595e-08 282 1.342324e-07 9.533852e-06 5.000000e+00 2.912997e-08 283 1.347324e-07 8.663663e-06 5.000000e+00 2.613631e-08 284 1.352324e-07 7.908050e-06 5.000000e+00 2.828316e-08 285 1.357324e-07 7.185580e-06 5.000000e+00 2.563555e-08 286 1.362324e-07 6.562488e-06 5.000000e+00 2.760817e-08 Index time v(41) v(42) v(43) -------------------------------------------------------------------------------- 287 1.367324e-07 5.962395e-06 5.000000e+00 2.525960e-08 288 1.372324e-07 5.448852e-06 5.000000e+00 2.706486e-08 289 1.377324e-07 4.950158e-06 5.000000e+00 2.497656e-08 290 1.382324e-07 4.527159e-06 5.000000e+00 2.662364e-08 291 1.387324e-07 4.112497e-06 5.000000e+00 2.476318e-08 292 1.392324e-07 3.764319e-06 5.000000e+00 2.626242e-08 293 1.397324e-07 3.419310e-06 5.000000e+00 2.460239e-08 294 1.402324e-07 3.132949e-06 5.000000e+00 2.596457e-08 295 1.407324e-07 2.845685e-06 5.000000e+00 2.448151e-08 296 1.412324e-07 2.610383e-06 5.000000e+00 2.571738e-08 297 1.417324e-07 2.371007e-06 5.000000e+00 2.439108e-08 298 1.422324e-07 2.177866e-06 5.000000e+00 2.551106e-08 299 1.427324e-07 1.978213e-06 5.000000e+00 2.432395e-08 300 1.432324e-07 1.819874e-06 5.000000e+00 2.533797e-08 301 1.437324e-07 1.653184e-06 5.000000e+00 2.427472e-08 302 1.442324e-07 1.523562e-06 5.000000e+00 2.519211e-08 303 1.447324e-07 1.384234e-06 5.000000e+00 2.423923e-08 304 1.452324e-07 1.278297e-06 5.000000e+00 2.506868e-08 305 1.457324e-07 1.161691e-06 5.000000e+00 2.421432e-08 306 1.462324e-07 1.075281e-06 5.000000e+00 2.496386e-08 307 1.467324e-07 9.775538e-07 5.000000e+00 2.419751e-08 308 1.472324e-07 9.072309e-07 5.000000e+00 2.487455e-08 309 1.477324e-07 8.251979e-07 5.000000e+00 2.418689e-08 310 1.482324e-07 7.681210e-07 5.000000e+00 2.479821e-08 311 1.487324e-07 6.991421e-07 5.000000e+00 2.418098e-08 312 1.492324e-07 6.529633e-07 5.000000e+00 2.473279e-08 313 1.497324e-07 5.948504e-07 5.000000e+00 2.417862e-08 314 1.500000e-07 5.780658e-07 5.000000e+00 2.467159e-08 CPU time since last call: 0.560 seconds. Total CPU time: 0.560 seconds. Current dynamic memory usage = 270336, Dynamic memory limit = -491521. tmpk8ny_4pz/tests/mesa/0000755000175000017500000000000013546075722015247 5ustar carstencarstentmpk8ny_4pz/tests/mesa/mesa11.out0000644000175000017500000002363713546075722017102 0ustar carstencarsten Circuit: * Mesa Level 2 test Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Node Voltage ---- ------- ---- ------- V(3) 0.000000e+00 V(2) 0.000000e+00 V(1) 0.000000e+00 Source Current ------ ------- vds#branch 0.000000e+00 vids#branch 0.000000e+00 vgs#branch 0.000000e+00 MESA models (GaAs MESFET model) model mesmod type nmf vto -1.26 lambda 0.045 lambdahf 0.045 beta 0.0085 vs 150000 rd 0 rs 0 rg 0 ri 0 rf 0 rdi 0 rsi 0 phib 8.01096e-20 phib1 0 tphib 0 astar 40000 ggr 40 del 0.04 xchi 0.033 tggr 0.033 n 1 eta 1.73 m 2.5 mc 3 alpha 0 sigma0 0.081 vsigmat 1.01 vsigma 0.1 mu 0.23 theta 0 mu1 0 mu2 0 d 1.2e-07 nd 2e+23 du 3.5e-08 ndu 1e+22 th 1e-08 ndelta 6e+24 delta 5 tc 0 tvto 0 alphat 0 tlambda 1.79769e+308 teta0 1.79769e+308 teta1 0 tmu 300.15 xtm0 0 xtm1 0 xtm2 0 ks 0 vsg 0 tf 300.15 flo 0 delfo 0 ag 0 rtc1 0 rtc2 0 zeta 1 level 2 nmax 2e+16 gamma 3 epsi 1.08411e-10 cas 1 cbs 1 gd 2.51987e-312 gs 2.51987e-312 vcrit 2.51987e-312 MESA: GaAs MESFET model device z1 model mesmod off 0 l 1e-06 w 2e-05 m 1 icvds 0 icvgs 0 td 27 ts 27 dtemp 0 dnode 2 gnode 3 snode 0 dprimenode 2 sprimenode 0 gprimenode 3 vgs 0 vgd 0 cg 0 cd 0 cgd 0 gm 0 gds 0.00641271 ggs 6.40329e-09 ggd 6.40329e-09 qgs 1.52287e-14 cqgs 0 qgd 1.52287e-14 cqgd 0 cs -0 p 0 Vsource: Independent voltage source device vgs vids vds dc 0 0 0 acmag 0 0 0 i 0 0 0 p -0 -0 -0 * Mesa Level 2 test DC transfer characteristic Sat Aug 27 16:29:59 2005 -------------------------------------------------------------------------------- Index v-sweep vids#branch -------------------------------------------------------------------------------- 0 0.000000e+00 6.287335e-09 1 5.000000e-02 8.247766e-06 2 1.000000e-01 9.608412e-06 3 1.500000e-01 1.042152e-05 4 2.000000e-01 1.119220e-05 5 2.500000e-01 1.198395e-05 6 3.000000e-01 1.281268e-05 7 3.500000e-01 1.368463e-05 8 4.000000e-01 1.460330e-05 9 4.500000e-01 1.557114e-05 10 5.000000e-01 1.659018e-05 11 5.500000e-01 1.766219e-05 12 6.000000e-01 1.878878e-05 13 6.500000e-01 1.997145e-05 14 7.000000e-01 2.121159e-05 15 7.500000e-01 2.251051e-05 16 8.000000e-01 2.386942e-05 17 8.500000e-01 2.528944e-05 18 9.000000e-01 2.677159e-05 19 9.500000e-01 2.831681e-05 20 1.000000e+00 2.992592e-05 21 1.050000e+00 3.159969e-05 22 1.100000e+00 3.333876e-05 23 1.150000e+00 3.514371e-05 24 1.200000e+00 3.701500e-05 25 1.250000e+00 3.895303e-05 26 1.300000e+00 4.095811e-05 27 1.350000e+00 4.303049e-05 28 1.400000e+00 4.517034e-05 29 1.450000e+00 4.737775e-05 30 1.500000e+00 4.965278e-05 31 1.550000e+00 5.199542e-05 32 1.600000e+00 5.440564e-05 33 1.650000e+00 5.688333e-05 34 1.700000e+00 5.942841e-05 35 1.750000e+00 6.204072e-05 36 1.800000e+00 6.472013e-05 37 1.850000e+00 6.746649e-05 38 1.900000e+00 7.027964e-05 39 1.950000e+00 7.315944e-05 40 2.000000e+00 7.610576e-05 41 0.000000e+00 2.351178e-09 42 5.000000e-02 1.018087e-04 43 1.000000e-01 1.847282e-04 44 1.500000e-01 2.386501e-04 45 2.000000e-01 2.712839e-04 46 2.500000e-01 2.921130e-04 47 3.000000e-01 3.067955e-04 48 3.500000e-01 3.182098e-04 49 4.000000e-01 3.278093e-04 50 4.500000e-01 3.363569e-04 51 5.000000e-01 3.442738e-04 52 5.500000e-01 3.518038e-04 53 6.000000e-01 3.590950e-04 54 6.500000e-01 3.662405e-04 Index v-sweep vids#branch -------------------------------------------------------------------------------- 55 7.000000e-01 3.733014e-04 56 7.500000e-01 3.803188e-04 57 8.000000e-01 3.873212e-04 58 8.500000e-01 3.943289e-04 59 9.000000e-01 4.013566e-04 60 9.500000e-01 4.084152e-04 61 1.000000e+00 4.155130e-04 62 1.050000e+00 4.226565e-04 63 1.100000e+00 4.298504e-04 64 1.150000e+00 4.370990e-04 65 1.200000e+00 4.444052e-04 66 1.250000e+00 4.517719e-04 67 1.300000e+00 4.592011e-04 68 1.350000e+00 4.666948e-04 69 1.400000e+00 4.742544e-04 70 1.450000e+00 4.818814e-04 71 1.500000e+00 4.895770e-04 72 1.550000e+00 4.973421e-04 73 1.600000e+00 5.051779e-04 74 1.650000e+00 5.130851e-04 75 1.700000e+00 5.210646e-04 76 1.750000e+00 5.291171e-04 77 1.800000e+00 5.372433e-04 78 1.850000e+00 5.454439e-04 79 1.900000e+00 5.537195e-04 80 1.950000e+00 5.620708e-04 81 2.000000e+00 5.704982e-04 82 0.000000e+00 7.393328e-10 83 5.000000e-02 2.028727e-04 84 1.000000e-01 3.953294e-04 85 1.500000e-01 5.615118e-04 86 2.000000e-01 6.933551e-04 87 2.500000e-01 7.926170e-04 88 3.000000e-01 8.660732e-04 89 3.500000e-01 9.209439e-04 90 4.000000e-01 9.629829e-04 91 4.500000e-01 9.962679e-04 92 5.000000e-01 1.023556e-03 93 5.500000e-01 1.046686e-03 94 6.000000e-01 1.066890e-03 95 6.500000e-01 1.085002e-03 96 7.000000e-01 1.101595e-03 97 7.500000e-01 1.117072e-03 98 8.000000e-01 1.131718e-03 99 8.500000e-01 1.145739e-03 100 9.000000e-01 1.159289e-03 101 9.500000e-01 1.172479e-03 102 1.000000e+00 1.185396e-03 103 1.050000e+00 1.198106e-03 104 1.100000e+00 1.210659e-03 105 1.150000e+00 1.223096e-03 106 1.200000e+00 1.235447e-03 107 1.250000e+00 1.247739e-03 108 1.300000e+00 1.259991e-03 109 1.350000e+00 1.272221e-03 110 1.400000e+00 1.284441e-03 111 1.450000e+00 1.296664e-03 112 1.500000e+00 1.308898e-03 Index v-sweep vids#branch -------------------------------------------------------------------------------- 113 1.550000e+00 1.321152e-03 114 1.600000e+00 1.333432e-03 115 1.650000e+00 1.345744e-03 116 1.700000e+00 1.358093e-03 117 1.750000e+00 1.370482e-03 118 1.800000e+00 1.382916e-03 119 1.850000e+00 1.395398e-03 120 1.900000e+00 1.407930e-03 121 1.950000e+00 1.420515e-03 122 2.000000e+00 1.433155e-03 123 0.000000e+00 7.163208e-25 124 5.000000e-02 3.203183e-04 125 1.000000e-01 6.320067e-04 126 1.500000e-01 9.201977e-04 127 2.000000e-01 1.172110e-03 128 2.500000e-01 1.381625e-03 129 3.000000e-01 1.549618e-03 130 3.500000e-01 1.681428e-03 131 4.000000e-01 1.783965e-03 132 4.500000e-01 1.863838e-03 133 5.000000e-01 1.926569e-03 134 5.500000e-01 1.976453e-03 135 6.000000e-01 2.016720e-03 136 6.500000e-01 2.049754e-03 137 7.000000e-01 2.077307e-03 138 7.500000e-01 2.100670e-03 139 8.000000e-01 2.120796e-03 140 8.500000e-01 2.138397e-03 141 9.000000e-01 2.154010e-03 142 9.500000e-01 2.168042e-03 143 1.000000e+00 2.180803e-03 144 1.050000e+00 2.192537e-03 145 1.100000e+00 2.203432e-03 146 1.150000e+00 2.213637e-03 147 1.200000e+00 2.223270e-03 148 1.250000e+00 2.232427e-03 149 1.300000e+00 2.241184e-03 150 1.350000e+00 2.249604e-03 151 1.400000e+00 2.257737e-03 152 1.450000e+00 2.265627e-03 153 1.500000e+00 2.273307e-03 154 1.550000e+00 2.280808e-03 155 1.600000e+00 2.288153e-03 156 1.650000e+00 2.295363e-03 157 1.700000e+00 2.302457e-03 158 1.750000e+00 2.309448e-03 159 1.800000e+00 2.316350e-03 160 1.850000e+00 2.323173e-03 161 1.900000e+00 2.329927e-03 162 1.950000e+00 2.336620e-03 163 2.000000e+00 2.343260e-03 CPU time since last call: 0.020 seconds. Total CPU time: 0.020 seconds. Current dynamic memory usage = 135168, Dynamic memory limit = -491521. tmpk8ny_4pz/tests/mesa/mesosc.out0000644000175000017500000002141413546075722017273 0ustar carstencarsten Circuit: * Mesfet Ring Oscillator with ungated load Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Initial Transient Solution -------------------------- Node Voltage ---- ------- 1 1.6 inv01:1 1.59501 inv01:2 0.437524 3 0.432531 2 0.432531 inv02:1 1.59501 inv02:2 0.437524 4 0.432531 inv03:1 1.59501 inv03:2 0.437524 5 0.432531 inv04:1 1.59501 inv04:2 0.437524 6 0.432531 inv05:1 1.59501 inv05:2 0.437524 7 0.432531 inv06:1 1.59501 inv06:2 0.437524 8 0.432531 inv07:1 1.59501 inv07:2 0.437524 9 0.432531 inv08:1 1.59501 inv08:2 0.437524 10 0.432531 inv09:1 1.59501 inv09:2 0.437524 11 0.432531 inv10:1 1.59501 inv10:2 0.437524 12 0.432531 inv11:1 1.59501 inv11:2 0.437524 2000 0.432531 vnoise#branch 9.80682e-06 vdd#branch -0.00274651 * Mesfet Ring Oscillator with ungated load Transient Analysis Sat Aug 27 16:30:01 2005 -------------------------------------------------------------------------------- Index time v(8) -------------------------------------------------------------------------------- 0 1.010000e-09 3.973848e-01 1 1.030000e-09 2.946213e-01 2 1.050000e-09 2.117183e-01 3 1.070000e-09 1.572352e-01 4 1.090000e-09 1.293192e-01 5 1.110000e-09 1.186605e-01 6 1.130000e-09 1.156710e-01 7 1.150000e-09 1.151043e-01 8 1.170000e-09 1.149294e-01 9 1.190000e-09 1.149571e-01 10 1.210000e-09 1.149146e-01 11 1.230000e-09 1.149612e-01 12 1.250000e-09 1.149192e-01 13 1.270000e-09 1.149617e-01 14 1.290000e-09 1.149206e-01 15 1.310000e-09 1.149627e-01 16 1.330000e-09 1.149168e-01 17 1.350000e-09 1.148248e-01 18 1.370000e-09 1.143587e-01 19 1.390000e-09 1.170171e-01 20 1.410000e-09 1.427645e-01 21 1.430000e-09 2.162080e-01 22 1.450000e-09 3.304212e-01 23 1.470000e-09 4.572213e-01 24 1.490000e-09 5.419430e-01 25 1.510000e-09 5.605499e-01 26 1.530000e-09 5.567488e-01 27 1.550000e-09 5.560529e-01 28 1.570000e-09 5.549377e-01 29 1.590000e-09 5.544867e-01 30 1.610000e-09 5.542368e-01 31 1.630000e-09 5.542268e-01 32 1.650000e-09 5.541876e-01 33 1.670000e-09 5.542118e-01 34 1.690000e-09 5.541883e-01 35 1.710000e-09 5.542116e-01 36 1.730000e-09 5.541894e-01 37 1.750000e-09 5.542108e-01 38 1.770000e-09 5.541899e-01 39 1.790000e-09 5.542212e-01 40 1.810000e-09 5.542194e-01 41 1.830000e-09 5.535081e-01 42 1.850000e-09 5.466508e-01 43 1.870000e-09 5.192679e-01 44 1.890000e-09 4.533623e-01 45 1.910000e-09 3.527150e-01 46 1.930000e-09 2.559344e-01 47 1.950000e-09 1.850210e-01 48 1.970000e-09 1.425134e-01 49 1.990000e-09 1.233454e-01 50 2.010000e-09 1.168258e-01 51 2.030000e-09 1.153294e-01 52 2.050000e-09 1.149963e-01 53 2.070000e-09 1.149410e-01 54 2.090000e-09 1.149339e-01 Index time v(8) -------------------------------------------------------------------------------- 55 2.110000e-09 1.149387e-01 56 2.130000e-09 1.149395e-01 57 2.150000e-09 1.149412e-01 58 2.170000e-09 1.149403e-01 59 2.190000e-09 1.149421e-01 60 2.210000e-09 1.149422e-01 61 2.230000e-09 1.149126e-01 62 2.250000e-09 1.146328e-01 63 2.270000e-09 1.145618e-01 64 2.290000e-09 1.230533e-01 65 2.310000e-09 1.689218e-01 66 2.330000e-09 2.619914e-01 67 2.350000e-09 3.862801e-01 68 2.370000e-09 5.027828e-01 69 2.390000e-09 5.565733e-01 70 2.410000e-09 5.584197e-01 71 2.430000e-09 5.565958e-01 72 2.450000e-09 5.554524e-01 73 2.470000e-09 5.547149e-01 74 2.490000e-09 5.543379e-01 75 2.510000e-09 5.542264e-01 76 2.530000e-09 5.542074e-01 77 2.550000e-09 5.541971e-01 78 2.570000e-09 5.542022e-01 79 2.590000e-09 5.541978e-01 80 2.610000e-09 5.542025e-01 81 2.630000e-09 5.541984e-01 82 2.650000e-09 5.542017e-01 83 2.670000e-09 5.542008e-01 84 2.690000e-09 5.542258e-01 85 2.710000e-09 5.541322e-01 86 2.730000e-09 5.518485e-01 87 2.750000e-09 5.380756e-01 88 2.770000e-09 4.951082e-01 89 2.790000e-09 4.104882e-01 90 2.810000e-09 3.069971e-01 91 2.830000e-09 2.206906e-01 92 2.850000e-09 1.625597e-01 93 2.870000e-09 1.316728e-01 94 2.890000e-09 1.194356e-01 95 2.910000e-09 1.158426e-01 96 2.930000e-09 1.151376e-01 97 2.950000e-09 1.149409e-01 98 2.970000e-09 1.149521e-01 99 2.990000e-09 1.149196e-01 100 3.010000e-09 1.149554e-01 101 3.030000e-09 1.149246e-01 102 3.050000e-09 1.149563e-01 103 3.070000e-09 1.149258e-01 104 3.090000e-09 1.149571e-01 105 3.110000e-09 1.149250e-01 106 3.130000e-09 1.148554e-01 107 3.150000e-09 1.144055e-01 108 3.170000e-09 1.160567e-01 109 3.190000e-09 1.366474e-01 110 3.210000e-09 2.038127e-01 111 3.230000e-09 3.138210e-01 112 3.250000e-09 4.413671e-01 Index time v(8) -------------------------------------------------------------------------------- 113 3.270000e-09 5.349460e-01 114 3.290000e-09 5.606761e-01 115 3.310000e-09 5.569116e-01 116 3.330000e-09 5.562200e-01 117 3.350000e-09 5.550389e-01 118 3.370000e-09 5.545266e-01 119 3.390000e-09 5.542611e-01 120 3.410000e-09 5.542180e-01 121 3.430000e-09 5.542000e-01 122 3.450000e-09 5.542001e-01 123 3.470000e-09 5.541998e-01 124 3.490000e-09 5.542002e-01 125 3.510000e-09 5.542006e-01 126 3.530000e-09 5.541999e-01 127 3.550000e-09 5.542004e-01 128 3.570000e-09 5.542078e-01 129 3.590000e-09 5.542334e-01 130 3.610000e-09 5.537349e-01 131 3.630000e-09 5.482902e-01 132 3.650000e-09 5.245726e-01 133 3.670000e-09 4.641217e-01 134 3.690000e-09 3.659878e-01 135 3.710000e-09 2.669325e-01 136 3.730000e-09 1.924121e-01 137 3.750000e-09 1.464063e-01 138 3.770000e-09 1.248475e-01 139 3.790000e-09 1.172628e-01 140 3.810000e-09 1.154039e-01 141 3.830000e-09 1.150264e-01 142 3.850000e-09 1.149325e-01 143 3.870000e-09 1.149447e-01 144 3.890000e-09 1.149275e-01 145 3.910000e-09 1.149499e-01 146 3.930000e-09 1.149307e-01 147 3.950000e-09 1.149506e-01 148 3.970000e-09 1.149318e-01 149 3.990000e-09 1.149522e-01 150 4.010000e-09 1.149130e-01 151 4.030000e-09 1.146998e-01 152 4.050000e-09 1.144243e-01 153 4.070000e-09 1.207562e-01 154 4.090000e-09 1.605792e-01 155 4.110000e-09 2.482373e-01 156 4.130000e-09 3.702713e-01 157 4.150000e-09 4.910421e-01 158 4.170000e-09 5.536346e-01 159 4.190000e-09 5.591043e-01 160 4.210000e-09 5.566311e-01 161 4.230000e-09 5.556161e-01 162 4.250000e-09 5.547671e-01 163 4.270000e-09 5.543790e-01 164 4.290000e-09 5.542225e-01 165 4.310000e-09 5.542175e-01 166 4.330000e-09 5.541894e-01 167 4.350000e-09 5.542097e-01 168 4.370000e-09 5.541904e-01 169 4.390000e-09 5.542097e-01 170 4.410000e-09 5.541913e-01 Index time v(8) -------------------------------------------------------------------------------- 171 4.430000e-09 5.542087e-01 172 4.450000e-09 5.541931e-01 173 4.470000e-09 5.542283e-01 174 4.490000e-09 5.541734e-01 175 4.510000e-09 5.524994e-01 176 4.530000e-09 5.410704e-01 177 4.550000e-09 5.030130e-01 178 4.570000e-09 4.236057e-01 179 4.590000e-09 3.200270e-01 180 4.610000e-09 2.303651e-01 181 4.630000e-09 1.685070e-01 182 4.650000e-09 1.343938e-01 183 4.670000e-09 1.203763e-01 184 4.690000e-09 1.160548e-01 185 4.710000e-09 1.151851e-01 186 4.730000e-09 1.149496e-01 187 4.750000e-09 1.149523e-01 188 4.770000e-09 1.149197e-01 189 4.790000e-09 1.149544e-01 190 4.810000e-09 1.149251e-01 191 4.830000e-09 1.149557e-01 192 4.850000e-09 1.149263e-01 193 4.870000e-09 1.149564e-01 194 4.890000e-09 1.149272e-01 195 4.910000e-09 1.148833e-01 196 4.930000e-09 1.144652e-01 197 4.950000e-09 1.153822e-01 198 4.970000e-09 1.315164e-01 199 4.990000e-09 1.923383e-01 200 5.000000e-09 2.420187e-01 CPU time since last call: 0.262 seconds. Total CPU time: 0.262 seconds. Current dynamic memory usage = 135168, Dynamic memory limit = -491521. tmpk8ny_4pz/tests/mesa/Makefile.am0000644000175000017500000000063513546075722017307 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = \ mesa11.cir \ mesa13.cir \ mesa14.cir \ mesa15.cir \ mesa21.cir \ mesa.cir \ mesgout.cir \ mesinv.cir \ mesosc.cir TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ $(TESTS:.cir=.out) EXTRA_DIST += mesa12.cir mesa-12.cir MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/mesa/mesa.out0000644000175000017500000000616013546075722016730 0ustar carstencarsten No. of Data Rows : 61 Circuit: * DCFL GaAs MESFET Gate\ Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 * DCFL GaAs MESFET Gate\ -------------------------------------------------------------------------------- Index v-sweep v(2) vin#branch -------------------------------------------------------------------------------- 0 0.000000e+00 2.992148e+00 1.222711e-07 1 5.000000e-02 2.986117e+00 1.099223e-07 2 1.000000e-01 2.978089e+00 9.838581e-08 3 1.500000e-01 2.968344e+00 8.771709e-08 4 2.000000e-01 2.957063e+00 7.792446e-08 5 2.500000e-01 2.944276e+00 6.897685e-08 6 3.000000e-01 2.929921e+00 6.082601e-08 7 3.500000e-01 2.913878e+00 5.341906e-08 8 4.000000e-01 2.895974e+00 4.670231e-08 9 4.500000e-01 2.875963e+00 4.062162e-08 10 5.000000e-01 2.853472e+00 3.512199e-08 11 5.500000e-01 2.827936e+00 3.014710e-08 12 6.000000e-01 2.798466e+00 2.563865e-08 13 6.500000e-01 2.763633e+00 2.153539e-08 14 7.000000e-01 2.721042e+00 1.777166e-08 15 7.500000e-01 2.666534e+00 1.427672e-08 16 8.000000e-01 2.592776e+00 1.095453e-08 17 8.500000e-01 2.488055e+00 7.822913e-09 18 9.000000e-01 2.340785e+00 5.018723e-09 19 9.500000e-01 2.154051e+00 2.856783e-09 20 1.000000e+00 1.945616e+00 1.453815e-09 21 1.050000e+00 1.727796e+00 6.363649e-10 22 1.100000e+00 1.500026e+00 1.869188e-10 23 1.150000e+00 1.255138e+00 -4.361641e-11 24 1.200000e+00 9.959858e-01 -1.421819e-10 25 1.250000e+00 7.599885e-01 -1.684468e-10 26 1.300000e+00 5.955970e-01 -1.674650e-10 27 1.350000e+00 4.965957e-01 -1.608019e-10 28 1.400000e+00 4.345031e-01 -1.536029e-10 29 1.450000e+00 3.919482e-01 -1.465786e-10 30 1.500000e+00 3.604794e-01 -1.397780e-10 31 1.550000e+00 3.358282e-01 -1.333493e-10 32 1.600000e+00 3.156600e-01 -1.271415e-10 33 1.650000e+00 2.985995e-01 -1.211587e-10 34 1.700000e+00 2.837831e-01 -1.153968e-10 35 1.750000e+00 2.706382e-01 -1.098514e-10 36 1.800000e+00 2.587662e-01 -1.045190e-10 37 1.850000e+00 2.478763e-01 -9.939633e-11 38 1.900000e+00 2.377452e-01 -9.448009e-11 39 1.950000e+00 2.281901e-01 -8.976643e-11 40 2.000000e+00 2.190482e-01 -8.525076e-11 41 2.050000e+00 2.101552e-01 -8.089527e-11 42 2.100000e+00 2.013138e-01 -7.678203e-11 43 2.150000e+00 1.922195e-01 -7.285071e-11 44 2.200000e+00 1.821999e-01 -6.900423e-11 45 2.250000e+00 1.673580e-01 -6.520504e-11 46 2.300000e+00 1.621071e-01 -6.190646e-11 47 2.350000e+00 1.618962e-01 -5.892842e-11 48 2.400000e+00 1.617131e-01 -5.608609e-11 49 2.450000e+00 1.615536e-01 -5.338217e-11 50 2.500000e+00 1.614140e-01 -5.081092e-11 51 2.550000e+00 1.612915e-01 -4.836807e-11 52 2.600000e+00 1.611837e-01 -4.604928e-11 53 2.650000e+00 1.610885e-01 -4.385014e-11 54 2.700000e+00 1.610043e-01 -4.176620e-11 Index v-sweep v(2) vin#branch -------------------------------------------------------------------------------- 55 2.750000e+00 1.609295e-01 -3.979304e-11 56 2.800000e+00 1.608629e-01 -3.792624e-11 57 2.850000e+00 1.608035e-01 -3.616145e-11 58 2.900000e+00 1.607505e-01 -3.449435e-11 59 2.950000e+00 1.607029e-01 -3.292073e-11 60 3.000000e+00 1.606602e-01 -3.143645e-11 tmpk8ny_4pz/tests/mesa/mesosc.cir0000644000175000017500000000140413546075722017236 0ustar carstencarsten* Mesfet Ring Oscillator with ungated load * Taken form macspice3f4 * .subckt mesinv 10 20 3 * Node 10: Power Supply * Node 20: Input * Node 30: Output rdl 10 1 20 bl1 1 2 i=0.00025*tanh(v(1,2)/0.00025/2240)*(1+v(1,2)*0.027) rsl 2 3 20 zd 3 20 0 driver l=0.7u w=20u ci 3 0 20f .ends mesinv .options noacct .model driver nmf level=2 n=1.44 rd=20 rs=20 vs=1.9e5 + mu=0.25 d=1e-7 vto=0.15 m=2 lambda=0.15 sigma0=0.02 + vsigmat=0.5 vdd 1 0 dc 1.6 xinv01 1 2 3 mesinv xinv02 1 3 4 mesinv xinv03 1 4 5 mesinv xinv04 1 5 6 mesinv xinv05 1 6 7 mesinv xinv06 1 7 8 mesinv xinv07 1 8 9 mesinv xinv08 1 9 10 mesinv xinv09 1 10 11 mesinv xinv10 1 11 12 mesinv xinv11 1 12 2000 mesinv vnoise 2000 2 dc 0 pwl(0 0 0.2n 0 0.3n 0.1 0.4n 0) .tran 1p 5n 1n 20p .print tran V(8) .end tmpk8ny_4pz/tests/mesa/mesa11.cir0000644000175000017500000000052513546075722017037 0ustar carstencarsten* Mesa Level 2 test * Taken from macspice3f4 archive. vds 1 0 vids 1 2 dc 0 vgs 3 0 dc 0 z1 2 3 0 mesmod l=1u w=20u .options noacct .op .dc vds 0 2 0.05 vgs -1.2 0 0.4 .print DC vids#branch .model mesmod nmf level=2 *d=0.12u mu=0.23 vs=1.5e5 m=2.5 *+ vto=-1.26 eta=1.73 lambda=0.045 sigma0=0.081 vsigma=0.1 *+ vsigmat=1 rd=31 rs=31 .end tmpk8ny_4pz/tests/mesa/mesa21.out0000644000175000017500000000002713546075722017067 0ustar carstencarsten Circuit: * Mesa Test tmpk8ny_4pz/tests/mesa/mesa15.out0000644000175000017500000000455413546075722017103 0ustar carstencarsten No. of Data Rows : 61 Circuit: * MESA1 subtreshold characteristics (T=400) Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 * MESA1 subtreshold characteristics (T=400) -------------------------------------------------------------------------------- Index v-sweep vids#branch -------------------------------------------------------------------------------- 0 -3.000000e+00 4.125058e-03 1 -2.950000e+00 3.942958e-03 2 -2.900000e+00 3.766587e-03 3 -2.850000e+00 3.596946e-03 4 -2.800000e+00 3.433522e-03 5 -2.750000e+00 3.276251e-03 6 -2.700000e+00 3.124552e-03 7 -2.650000e+00 2.978683e-03 8 -2.600000e+00 2.838366e-03 9 -2.550000e+00 2.703433e-03 10 -2.500000e+00 2.574384e-03 11 -2.450000e+00 2.449566e-03 12 -2.400000e+00 2.329928e-03 13 -2.350000e+00 2.214931e-03 14 -2.300000e+00 2.104618e-03 15 -2.250000e+00 1.998770e-03 16 -2.200000e+00 1.897275e-03 17 -2.150000e+00 1.799981e-03 18 -2.100000e+00 1.706755e-03 19 -2.050000e+00 1.617460e-03 20 -2.000000e+00 1.531966e-03 21 -1.950000e+00 1.450143e-03 22 -1.900000e+00 1.371869e-03 23 -1.850000e+00 1.297023e-03 24 -1.800000e+00 1.225492e-03 25 -1.750000e+00 1.157170e-03 26 -1.700000e+00 1.091960e-03 27 -1.650000e+00 1.029781e-03 28 -1.600000e+00 9.705674e-04 29 -1.550000e+00 9.142803e-04 30 -1.500000e+00 8.609121e-04 31 -1.450000e+00 8.104967e-04 32 -1.400000e+00 7.631213e-04 33 -1.350000e+00 7.189419e-04 34 -1.300000e+00 6.782043e-04 35 -1.250000e+00 6.412581e-04 36 -1.200000e+00 6.085381e-04 37 -1.150000e+00 5.804802e-04 38 -1.100000e+00 5.573615e-04 39 -1.050000e+00 5.391139e-04 40 -1.000000e+00 5.252192e-04 41 -9.500000e-01 5.147888e-04 42 -9.000000e-01 5.068118e-04 43 -8.500000e-01 5.004243e-04 44 -8.000000e-01 4.950491e-04 45 -7.500000e-01 4.903881e-04 46 -7.000000e-01 4.863376e-04 47 -6.500000e-01 4.828977e-04 48 -6.000000e-01 4.801090e-04 49 -5.500000e-01 4.780166e-04 50 -5.000000e-01 4.766538e-04 51 -4.500000e-01 4.760375e-04 52 -4.000000e-01 4.761694e-04 53 -3.500000e-01 4.770400e-04 54 -3.000000e-01 4.786337e-04 Index v-sweep vids#branch -------------------------------------------------------------------------------- 55 -2.500000e-01 4.809264e-04 56 -2.000000e-01 4.838645e-04 57 -1.500000e-01 4.873061e-04 58 -1.000000e-01 4.908923e-04 59 -5.000000e-02 4.937627e-04 60 -2.289835e-15 4.939069e-04 tmpk8ny_4pz/tests/mesa/mesa21.cir0000644000175000017500000000052313546075722017036 0ustar carstencarsten* Mesa Test * Taken from macspice3f4 z1 3 2 0 mesmod l=1u w=150u vgs 2 0 dc 0 vds 1 0 dc 0 vids 1 3 dc 0 .model mesmod nmf level=3 rdi=2.7 rsi=2.7 mu=0.2 m=2.2 vto=-2.04 + eta=1.5 lambda=0.04 tc=0.001 sigma0=0.02 vsigma=0.1 vsigmat=1.37 + delta=5 beta=0.0085 .options noacct .dc vds 0 4 0.05 vgs -1.5 0.5 0.5 .print vids#branch .end tmpk8ny_4pz/tests/mesa/mesa12.cir0000644000175000017500000000047413546075722017043 0ustar carstencarsten* MESA1 transient test * Taken from macspice3f4 * * This netlist shows convergence problems in ngspice rd 1 3 10k z1 3 2 0 mesa1 l=1u w=20u vgs 2 0 dc 0 pulse(-3 0 0 0.5n 0.5n 2n 4n) vdd 1 0 5v .model mesa1 nmf(level=2 rd=31 rs=31) .options noacct .dc vgs -2 0 0.02 .tran 0.1n 5n .print tran v(2) v(3) .print tmpk8ny_4pz/tests/mesa/mesa13.cir0000644000175000017500000000033213546075722017035 0ustar carstencarsten* MESA1 - Gate Leakage Test * Taken from macspice3f4 * z1 0 2 0 mesmod l=1u w=20u vgs 1 0 dc 0 vig 1 2 dc 0 .model mesmod nmf(level=2 rd=31 rs=31 rg=10) .options noacct .dc vgs -3 0.4 0.05 .print vig#branch .end tmpk8ny_4pz/tests/mesa/mesa13.out0000644000175000017500000000005013546075722017064 0ustar carstencarsten Circuit: * MESA1 - Gate Leakage Test tmpk8ny_4pz/tests/mesa/mesgout.cir0000644000175000017500000000063413546075722017434 0ustar carstencarsten* Simulation of MESFET output conductance * Taken from macspice3f4 * rd 1 2 20 z1 3 4 0 driver l=1u w=10u rs 5 0 20 vgs 4 0 dc 0.5 ac 0.01 vds 1 0 dc 1.0 vid 2 3 dc 0 .model driver nmf + level=2 *+ jsdf=1e-100 + n=1.44 + rd=0 + rs=0 + vs=1.5e5 + mu=0.25 + d=2e-7 + vto=0.1 + m=2 + lambda=0 + sigma0=0 + delfo=5 + flo=0.5 + tf=100000 + lambdahf=120 .options noacct .ac DEC 10 0.001 1e6 .print ac V(3) .end tmpk8ny_4pz/tests/mesa/mesgout.out0000644000175000017500000001347513546075722017475 0ustar carstencarsten No. of Data Rows : 91 Circuit: * Simulation of MESFET output conductance Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 * Simulation of MESFET output conductance -------------------------------------------------------------------------------- Index frequency v(3) -------------------------------------------------------------------------------- 0 1.000000e-03, 0.000000e+00 -8.965836e-04, 6.902362e-19 1 1.258925e-03, 0.000000e+00 -8.966291e-04, 8.689560e-19 2 1.584893e-03, 0.000000e+00 -8.966864e-04, 1.093951e-18 3 1.995262e-03, 0.000000e+00 -8.967585e-04, 1.377203e-18 4 2.511886e-03, 0.000000e+00 -8.968492e-04, 1.733796e-18 5 3.162278e-03, 0.000000e+00 -8.969635e-04, 2.182721e-18 6 3.981072e-03, 0.000000e+00 -8.971074e-04, 2.747884e-18 7 5.011872e-03, 0.000000e+00 -8.972885e-04, 3.459383e-18 8 6.309573e-03, 0.000000e+00 -8.975165e-04, 4.355108e-18 9 7.943282e-03, 0.000000e+00 -8.978035e-04, 5.482761e-18 10 1.000000e-02, 0.000000e+00 -8.981649e-04, 6.902395e-18 11 1.258925e-02, 0.000000e+00 -8.986199e-04, 8.689612e-18 12 1.584893e-02, 0.000000e+00 -8.991926e-04, 1.093959e-17 13 1.995262e-02, 0.000000e+00 -8.999137e-04, 1.377216e-17 14 2.511886e-02, 0.000000e+00 -9.008215e-04, 1.733817e-17 15 3.162278e-02, 0.000000e+00 -9.019645e-04, 2.182754e-17 16 3.981072e-02, 0.000000e+00 -9.034034e-04, 2.747936e-17 17 5.011872e-02, 0.000000e+00 -9.052150e-04, 3.459464e-17 18 6.309573e-02, 0.000000e+00 -9.074958e-04, 4.355236e-17 19 7.943282e-02, 0.000000e+00 -9.103672e-04, 5.482962e-17 20 1.000000e-01, 0.000000e+00 -9.139824e-04, 6.902710e-17 21 1.258925e-01, 0.000000e+00 -9.185336e-04, 8.690104e-17 22 1.584893e-01, 0.000000e+00 -9.242630e-04, 1.094036e-16 23 1.995262e-01, 0.000000e+00 -9.314747e-04, 1.377335e-16 24 2.511886e-01, 0.000000e+00 -9.405505e-04, 1.733999e-16 25 3.162278e-01, 0.000000e+00 -9.519685e-04, 2.183031e-16 26 3.981072e-01, 0.000000e+00 -9.663249e-04, 2.748353e-16 27 5.011872e-01, 0.000000e+00 -9.843591e-04, 3.460081e-16 28 6.309573e-01, 0.000000e+00 -1.006979e-03, 4.356124e-16 29 7.943282e-01, 0.000000e+00 -1.035279e-03, 5.484192e-16 30 1.000000e+00, 0.000000e+00 -1.070545e-03, 6.904308e-16 31 1.258925e+00, 0.000000e+00 -1.114211e-03, 8.691951e-16 32 1.584893e+00, 0.000000e+00 -1.167731e-03, 1.094197e-15 33 1.995262e+00, 0.000000e+00 -1.232294e-03, 1.377343e-15 34 2.511886e+00, 0.000000e+00 -1.308280e-03, 1.733570e-15 35 3.162278e+00, 0.000000e+00 -1.394424e-03, 2.181614e-15 36 3.981072e+00, 0.000000e+00 -1.486819e-03, 2.745011e-15 37 5.011872e+00, 0.000000e+00 -1.578371e-03, 3.453445e-15 38 6.309573e+00, 0.000000e+00 -1.659776e-03, 4.344535e-15 39 7.943282e+00, 0.000000e+00 -1.722639e-03, 5.466032e-15 40 1.000000e+01, 0.000000e+00 -1.763385e-03, 6.878303e-15 41 1.258925e+01, 0.000000e+00 -1.784787e-03, 8.657178e-15 42 1.584893e+01, 0.000000e+00 -1.793547e-03, 1.089764e-14 43 1.995262e+01, 0.000000e+00 -1.796207e-03, 1.371889e-14 44 2.511886e+01, 0.000000e+00 -1.796769e-03, 1.727095e-14 45 3.162278e+01, 0.000000e+00 -1.796845e-03, 2.174281e-14 46 3.981072e+01, 0.000000e+00 -1.796851e-03, 2.737258e-14 47 5.011872e+01, 0.000000e+00 -1.796851e-03, 3.446003e-14 48 6.309573e+01, 0.000000e+00 -1.796851e-03, 4.338261e-14 49 7.943282e+01, 0.000000e+00 -1.796851e-03, 5.461547e-14 50 1.000000e+02, 0.000000e+00 -1.796851e-03, 6.875681e-14 51 1.258925e+02, 0.000000e+00 -1.796851e-03, 8.655969e-14 52 1.584893e+02, 0.000000e+00 -1.796851e-03, 1.089722e-13 53 1.995262e+02, 0.000000e+00 -1.796851e-03, 1.371879e-13 54 2.511886e+02, 0.000000e+00 -1.796851e-03, 1.727093e-13 Index frequency v(3) -------------------------------------------------------------------------------- 55 3.162278e+02, 0.000000e+00 -1.796851e-03, 2.174281e-13 56 3.981072e+02, 0.000000e+00 -1.796851e-03, 2.737258e-13 57 5.011872e+02, 0.000000e+00 -1.796851e-03, 3.446003e-13 58 6.309573e+02, 0.000000e+00 -1.796851e-03, 4.338261e-13 59 7.943282e+02, 0.000000e+00 -1.796851e-03, 5.461547e-13 60 1.000000e+03, 0.000000e+00 -1.796851e-03, 6.875681e-13 61 1.258925e+03, 0.000000e+00 -1.796851e-03, 8.655969e-13 62 1.584893e+03, 0.000000e+00 -1.796851e-03, 1.089722e-12 63 1.995262e+03, 0.000000e+00 -1.796851e-03, 1.371879e-12 64 2.511886e+03, 0.000000e+00 -1.796851e-03, 1.727093e-12 65 3.162278e+03, 0.000000e+00 -1.796851e-03, 2.174281e-12 66 3.981072e+03, 0.000000e+00 -1.796851e-03, 2.737258e-12 67 5.011872e+03, 0.000000e+00 -1.796851e-03, 3.446003e-12 68 6.309573e+03, 0.000000e+00 -1.796851e-03, 4.338261e-12 69 7.943282e+03, 0.000000e+00 -1.796851e-03, 5.461547e-12 70 1.000000e+04, 0.000000e+00 -1.796851e-03, 6.875681e-12 71 1.258925e+04, 0.000000e+00 -1.796851e-03, 8.655969e-12 72 1.584893e+04, 0.000000e+00 -1.796851e-03, 1.089722e-11 73 1.995262e+04, 0.000000e+00 -1.796851e-03, 1.371879e-11 74 2.511886e+04, 0.000000e+00 -1.796851e-03, 1.727093e-11 75 3.162278e+04, 0.000000e+00 -1.796851e-03, 2.174281e-11 76 3.981072e+04, 0.000000e+00 -1.796851e-03, 2.737258e-11 77 5.011872e+04, 0.000000e+00 -1.796851e-03, 3.446003e-11 78 6.309573e+04, 0.000000e+00 -1.796851e-03, 4.338261e-11 79 7.943282e+04, 0.000000e+00 -1.796851e-03, 5.461547e-11 80 1.000000e+05, 0.000000e+00 -1.796851e-03, 6.875681e-11 81 1.258925e+05, 0.000000e+00 -1.796851e-03, 8.655969e-11 82 1.584893e+05, 0.000000e+00 -1.796851e-03, 1.089722e-10 83 1.995262e+05, 0.000000e+00 -1.796851e-03, 1.371879e-10 84 2.511886e+05, 0.000000e+00 -1.796851e-03, 1.727093e-10 85 3.162278e+05, 0.000000e+00 -1.796851e-03, 2.174281e-10 86 3.981072e+05, 0.000000e+00 -1.796851e-03, 2.737258e-10 87 5.011872e+05, 0.000000e+00 -1.796851e-03, 3.446003e-10 88 6.309573e+05, 0.000000e+00 -1.796851e-03, 4.338261e-10 89 7.943282e+05, 0.000000e+00 -1.796851e-03, 5.461547e-10 90 1.000000e+06, 0.000000e+00 -1.796851e-03, 6.875681e-10 tmpk8ny_4pz/tests/mesa/mesinv.out0000644000175000017500000000674413546075722017314 0ustar carstencarsten No. of Data Rows : 101 Circuit: * Mesfet Inverter with ungated load/Wload=2e-6 Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 * Mesfet Inverter with ungated load/Wload=2e-6 -------------------------------------------------------------------------------- Index v-sweep v(70) -------------------------------------------------------------------------------- 0 0.000000e+00 5.924361e-01 1 1.000000e-02 5.924266e-01 2 2.000000e-02 5.924150e-01 3 3.000000e-02 5.924009e-01 4 4.000000e-02 5.923837e-01 5 5.000000e-02 5.923628e-01 6 6.000000e-02 5.923376e-01 7 7.000000e-02 5.923072e-01 8 8.000000e-02 5.922706e-01 9 9.000000e-02 5.922268e-01 10 1.000000e-01 5.921744e-01 11 1.100000e-01 5.921119e-01 12 1.200000e-01 5.920374e-01 13 1.300000e-01 5.919488e-01 14 1.400000e-01 5.918436e-01 15 1.500000e-01 5.917188e-01 16 1.600000e-01 5.915710e-01 17 1.700000e-01 5.913965e-01 18 1.800000e-01 5.911910e-01 19 1.900000e-01 5.909499e-01 20 2.000000e-01 5.906683e-01 21 2.100000e-01 5.903409e-01 22 2.200000e-01 5.899623e-01 23 2.300000e-01 5.895270e-01 24 2.400000e-01 5.890297e-01 25 2.500000e-01 5.884650e-01 26 2.600000e-01 5.878277e-01 27 2.700000e-01 5.871130e-01 28 2.800000e-01 5.863164e-01 29 2.900000e-01 5.854336e-01 30 3.000000e-01 5.844607e-01 31 3.100000e-01 5.833937e-01 32 3.200000e-01 5.822289e-01 33 3.300000e-01 5.809625e-01 34 3.400000e-01 5.795903e-01 35 3.500000e-01 5.781078e-01 36 3.600000e-01 5.765096e-01 37 3.700000e-01 5.747896e-01 38 3.800000e-01 5.729403e-01 39 3.900000e-01 5.709526e-01 40 4.000000e-01 5.688158e-01 41 4.100000e-01 5.665165e-01 42 4.200000e-01 5.640386e-01 43 4.300000e-01 5.613624e-01 44 4.400000e-01 5.584637e-01 45 4.500000e-01 5.553124e-01 46 4.600000e-01 5.518714e-01 47 4.700000e-01 5.480934e-01 48 4.800000e-01 5.439182e-01 49 4.900000e-01 5.392621e-01 50 5.000000e-01 5.340299e-01 51 5.100000e-01 5.280748e-01 52 5.200000e-01 5.211960e-01 53 5.300000e-01 5.130993e-01 54 5.400000e-01 5.033337e-01 Index v-sweep v(70) -------------------------------------------------------------------------------- 55 5.500000e-01 4.911731e-01 56 5.600000e-01 4.753954e-01 57 5.700000e-01 4.539721e-01 58 5.800000e-01 4.244146e-01 59 5.900000e-01 3.876544e-01 60 6.000000e-01 3.514842e-01 61 6.100000e-01 3.221191e-01 62 6.200000e-01 3.002657e-01 63 6.300000e-01 2.846143e-01 64 6.400000e-01 2.737513e-01 65 6.500000e-01 2.665589e-01 66 6.600000e-01 2.622081e-01 67 6.700000e-01 2.600876e-01 68 6.800000e-01 2.597415e-01 69 6.900000e-01 2.608243e-01 70 7.000000e-01 2.630617e-01 71 7.100000e-01 2.662670e-01 72 7.200000e-01 2.702653e-01 73 7.300000e-01 2.749264e-01 74 7.400000e-01 2.801461e-01 75 7.500000e-01 2.858398e-01 76 7.600000e-01 2.919383e-01 77 7.700000e-01 2.983843e-01 78 7.800000e-01 3.051304e-01 79 7.900000e-01 3.121367e-01 80 8.000000e-01 3.193695e-01 81 8.100000e-01 3.268000e-01 82 8.200000e-01 3.344035e-01 83 8.300000e-01 3.421583e-01 84 8.400000e-01 3.500453e-01 85 8.500000e-01 3.580472e-01 86 8.600000e-01 3.661485e-01 87 8.700000e-01 3.743345e-01 88 8.800000e-01 3.825912e-01 89 8.900000e-01 3.909052e-01 90 9.000000e-01 3.992629e-01 91 9.100000e-01 4.076504e-01 92 9.200000e-01 4.160534e-01 93 9.300000e-01 4.244569e-01 94 9.400000e-01 4.328449e-01 95 9.500000e-01 4.412004e-01 96 9.600000e-01 4.495055e-01 97 9.700000e-01 4.577417e-01 98 9.800000e-01 4.658899e-01 99 9.900000e-01 4.739313e-01 100 1.000000e+00 4.818480e-01 tmpk8ny_4pz/tests/mesa/mesa14.out0000644000175000017500000000443513546075722017100 0ustar carstencarsten No. of Data Rows : 61 Circuit: * MESA1 - DCFL GaAs MESFET Gate Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 * MESA1 - DCFL GaAs MESFET Gate -------------------------------------------------------------------------------- Index v-sweep v(2) -------------------------------------------------------------------------------- 0 0.000000e+00 2.992148e+00 1 5.000000e-02 2.986117e+00 2 1.000000e-01 2.978089e+00 3 1.500000e-01 2.968344e+00 4 2.000000e-01 2.957064e+00 5 2.500000e-01 2.944286e+00 6 3.000000e-01 2.929989e+00 7 3.500000e-01 2.914359e+00 8 4.000000e-01 2.898823e+00 9 4.500000e-01 2.886783e+00 10 5.000000e-01 2.879374e+00 11 5.500000e-01 2.875031e+00 12 6.000000e-01 2.872467e+00 13 6.500000e-01 2.870977e+00 14 7.000000e-01 2.870188e+00 15 7.500000e-01 2.869878e+00 16 8.000000e-01 2.869932e+00 17 8.500000e-01 2.870249e+00 18 9.000000e-01 2.870769e+00 19 9.500000e-01 2.871450e+00 20 1.000000e+00 2.872259e+00 21 1.050000e+00 2.873172e+00 22 1.100000e+00 2.874171e+00 23 1.150000e+00 2.875241e+00 24 1.200000e+00 2.876369e+00 25 1.250000e+00 2.877545e+00 26 1.300000e+00 2.878763e+00 27 1.350000e+00 2.880015e+00 28 1.400000e+00 2.881295e+00 29 1.450000e+00 2.882599e+00 30 1.500000e+00 2.883922e+00 31 1.550000e+00 2.885262e+00 32 1.600000e+00 2.886614e+00 33 1.650000e+00 2.887978e+00 34 1.700000e+00 2.889349e+00 35 1.750000e+00 2.890728e+00 36 1.800000e+00 2.892110e+00 37 1.850000e+00 2.893497e+00 38 1.900000e+00 2.894884e+00 39 1.950000e+00 2.896273e+00 40 2.000000e+00 2.897662e+00 41 2.050000e+00 2.899049e+00 42 2.100000e+00 2.900435e+00 43 2.150000e+00 2.901819e+00 44 2.200000e+00 2.903200e+00 45 2.250000e+00 2.904578e+00 46 2.300000e+00 2.905952e+00 47 2.350000e+00 2.907324e+00 48 2.400000e+00 2.908692e+00 49 2.450000e+00 2.910057e+00 50 2.500000e+00 2.911419e+00 51 2.550000e+00 2.912780e+00 52 2.600000e+00 2.914141e+00 53 2.650000e+00 2.915503e+00 54 2.700000e+00 2.916868e+00 Index v-sweep v(2) -------------------------------------------------------------------------------- 55 2.750000e+00 2.918241e+00 56 2.800000e+00 2.919625e+00 57 2.850000e+00 2.921029e+00 58 2.900000e+00 2.922462e+00 59 2.950000e+00 2.923940e+00 60 3.000000e+00 2.925488e+00 tmpk8ny_4pz/tests/mesa/mesa15.cir0000644000175000017500000000040213546075722017035 0ustar carstencarsten* MESA1 subtreshold characteristics (T=400) * Taken form macspice3f4 vds 1 0 dc 0.1 vids 1 2 dc 0 vgs 3 0 dc 0 z1 2 3 0 mesmod l=1u w=20u ts=400 td=400 .model mesmod nmf level=2 rd=31 rs=31 .options noacct .dc vgs -3 0 0.05 .print DC vids#branch .end tmpk8ny_4pz/tests/mesa/mesa.cir0000644000175000017500000000045513546075722016677 0ustar carstencarsten* DCFL GaAs MESFET Gate\ * Taken from macspice3f4 vdd 1 0 dc 3 vin 3 0 dc 0 z1 2 3 0 enha l=1u w=10u z2 1 2 2 depl l=1u w=10u .model enha nmf level=2 rd=31 rs=31 vto=0.1 astar=0 .model depl nmf level=2 rd=31 rs=31 vto=-1.0 astar=0 .options noacct .dc vin 0 3.0 0.05 .print dc v(2) vin#branch .end tmpk8ny_4pz/tests/mesa/mesinv.cir0000644000175000017500000000131413546075722017246 0ustar carstencarsten* Mesfet Inverter with ungated load/Wload=2e-6 * Taken from macspice3f4 package * * Output node is 70 * bl1 10 40 i=0.0005*tanh(v(10,40)/0.0005/1120)*(1+v(10,40)*0.027) bl2 20 50 i=0.0005*tanh(v(20,50)/0.0005/1120)*(1+v(20,50)*0.027) zd1 70 2 0 driver l=0.7u w=20u zd2 80 70 0 driver l=0.7u w=20u rdl1 1 10 20 rdl2 1 20 20 rsl1 40 70 20 rsl2 50 80 20 vin 1000 0 dc 0 vdd 2000 0 dc 1.6 visrc 2000 1 dc 0 vig 1000 2 dc 0 .model driver nmf + level=2 + n=1.44 + rd=20 + rs=20 + ri=10 + rf=10 + vs=1.9e5 + mu=0.25 + d=1e-7 + vto=0.15 + m=2 + lambda=0.15 + sigma0=0.02 + vsigmat=0.5 *.nodeset v(10)=1.6 v(40)=1.6 v(70)=1.6 v(20)=0.2 v(50)=0.2 *+ v(80)=0.2 .options noacct .dc vin 0 1 0.01 .print dc v(70) .end tmpk8ny_4pz/tests/mesa/mesa-12.cir0000644000175000017500000000056313546075722017117 0ustar carstencarsten* MESA1 transient test - * Taken from macspice3f4 * * This netlist shows convergence problems in ngspice. * Paolo Nenzi (rework-14) rd 1 3 10k z1 3 2 0 mesa1 l=1u w=20u vgs 2 0 dc 0 pulse(-3 0 0 0.5n 0.5n 2n 4n) vdd 1 0 5v .model mesa1 nmf(level=2 rd=31 rs=31) .options noacct .dc vgs -2 0 0.02 .tran 0.1n 5n .print v(3) v(2) .end .control run plot v(2) v(3) .endc tmpk8ny_4pz/tests/mesa/mesa14.cir0000644000175000017500000000047713546075722017050 0ustar carstencarsten* MESA1 - DCFL GaAs MESFET Gate * Taken from macspice3f4 * * Removed: jsdf = 0 in modelcards vdd 1 0 dc 3 vin 3 0 dc 0 z1 2 3 0 enha l=1u w=10u z2 1 2 2 depl l=1u w=10u .model enha nmf level=2 rd=31 rs=31 vto=0.1 .model depl nmf level=2 rd=31 rs=31 vto=-1.0 .options noacct .dc vin 0 3.0 0.05 .print DC V(2) .end tmpk8ny_4pz/tests/bsim4/0000755000175000017500000000000013546075722015340 5ustar carstencarstentmpk8ny_4pz/tests/bsim4/Makefile.am0000644000175000017500000000052113546075722017372 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = nmos/qaSpec pmos/qaSpec TESTS_ENVIRONMENT = \ $(SHELL) $(top_srcdir)/tests/bin/check_cmc.sh \ $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ nmos pmos MAINTAINERCLEANFILES = Makefile.in clean-local: rm -rf nmos/results pmos/results ngspiceCkt bsim4.out tmpk8ny_4pz/tests/bsim4/nmos/0000755000175000017500000000000013546075722016314 5ustar carstencarstentmpk8ny_4pz/tests/bsim4/nmos/parameters/0000755000175000017500000000000013546075722020457 5ustar carstencarstentmpk8ny_4pz/tests/bsim4/nmos/parameters/nmosParameters0000644000175000017500000000756413546075722023416 0ustar carstencarsten+ binunit = (1) + paramchk= (1) + mobmod = (0) + capmod = (2) + igcmod = (1) + igbmod = (1) + geomod = (1) + diomod = (1) + rdsmod = (0) + rbodymod= (1) + rgatemod= (1) + permod = (1) + acnqsmod= (0) + trnqsmod= (0) + tnom = (27) + toxe = (1.85e-9) + toxp = (1.2e-9) + toxm = (1.85e-9) + dtox = (0.65e-9) + epsrox = (3.9) + wint = (5e-009) + lint = (5.25e-009) + ll = (0) + wl = (0) + lln = (1) + wln = (1) + lw = (0) + ww = (0) + lwn = (1) + wwn = (1) + lwl = (0) + wwl = (0) + xpart = (0) + toxref = (1.85e-9) + xl = (-30e-9) + vth0 = (0.423) + k1 = (0.4) + k2 = (0.01) + k3 = (0) + k3b = (0) + w0 = (2.5e-006) + dvt0 = (1) + dvt1 = (2) + dvt2 = (-0.032) + dvt0w = (0) + dvt1w = (0) + dvt2w = (0) + dsub = (0.1) + minv = (0.05) + voffl = (0) + dvtp0 = (1.0e-009) + dvtp1 = (0.1) + lpe0 = (0) + lpeb = (0) + xj = (1.96e-008) + ngate = (2e+020) + ndep = (2.54e+018) + nsd = (2e+020) + phin = (0) + cdsc = (0.000) + cdscb = (0) + cdscd = (0) + cit = (0) + voff = (-0.13) + nfactor = (1.9) + eta0 = (0.0058) + etab = (0) + vfb = (-0.55) + u0 = (0.0491) + ua = (6e-010) + ub = (1.2e-018) + uc = (0) + vsat = (124340) + a0 = (1.0) + ags = (1e-020) + a1 = (0) + a2 = (1.0) + b0 = (0) + b1 = (0) + keta = (0.04) + dwg = (0) + dwb = (0) + pclm = (0.04) + pdiblc1 = (0.001) + pdiblc2 = (0.001) + pdiblcb = (-0.005) + drout = (0.5) + pvag = (1e-020) + delta = (0.01) + pscbe1 = (8.14e+008) + pscbe2 = (1e-007) + fprout = (0.2) + pdits = (0.08) + pditsd = (0.23) + pditsl = (2.3e+006) + rsh = (5) + rdsw = (165) + rsw = (85) + rdw = (85) + rdswmin = (0) + rdwmin = (0) + rswmin = (0) + prwg = (0) + prwb = (6.8e-011) + wr = (1) + alpha0 = (0.074) + alpha1 = (0.005) + beta0 = (30) + agidl = (0.0002) + bgidl = (2.1e+009) + cgidl = (0.0002) + egidl = (0.8) + aigbacc = (0.012) + bigbacc = (0.0028) + cigbacc = (0.002) + nigbacc = (1) + aigbinv = (0.014) + bigbinv = (0.004) + cigbinv = (0.004) + eigbinv = (1.1) + nigbinv = (3) + aigc = (0.012) + bigc = (0.0028) + cigc = (0.002) + aigsd = (0.012) + bigsd = (0.0028) + cigsd = (0.002) + nigc = (1) + poxedge = (1) + pigcd = (1) + ntox = (1) + xrcrg1 = (12) + xrcrg2 = (5) + cgso = (1.5e-010) + cgdo = (1.5e-010) + cgbo = (2.56e-011) + cgdl = (2.653e-10) + cgsl = (2.653e-10) + ckappas = (0.03) + ckappad = (0.03) + acde = (1) + moin = (15) + noff = (0.9) + voffcv = (0.02) + kt1 = (-0.11) + kt1l = (0) + kt2 = (0.022) + ute = (-1.5) + ua1 = (4.31e-009) + ub1 = (7.61e-018) + uc1 = (-5.6e-011) + prt = (0) + at = (33000) + fnoimod = (1) + tnoimod = (0) + jss = (0.0001) + jsws = (1e-011) + jswgs = (1e-010) + njs = (1) + ijthsfwd= (0.01) + ijthsrev= (0.001) + bvs = (10) + xjbvs = (1) + jsd = (0.0001) + jswd = (1e-011) + jswgd = (1e-010) + njd = (1) + ijthdfwd= (0.01) + ijthdrev= (0.001) + bvd = (10) + xjbvd = (1) + pbs = (1) + cjs = (0.0005) + mjs = (0.5) + pbsws = (1) + cjsws = (5e-010) + mjsws = (0.33) + pbswgs = (1) + cjswgs = (3e-010) + mjswgs = (0.33) + pbd = (1) + cjd = (0.0005) + mjd = (0.5) + pbswd = (1) + cjswd = (5e-010) + mjswd = (0.33) + pbswgd = (1) + cjswgd = (5e-010) + mjswgd = (0.33) + tpb = (0.005) + tcj = (0.001) + tpbsw = (0.005) + tcjsw = (0.001) + tpbswg = (0.005) + tcjswg = (0.001) + xtis = (3) + xtid = (3) + dmcg = (0e-006) + dmci = (0e-006) + dmdg = (0e-006) + dmcgt = (0e-007) + dwj = (0.0e-008) + xgw = (0e-007) + xgl = (0e-008) + rshg = (0.4) + gbmin = (1e-010) + rbpb = (5) + rbpd = (15) + rbps = (15) + rbdb = (15) + rbsb = (15) + ngcon = (1) tmpk8ny_4pz/tests/bsim4/nmos/reference/0000755000175000017500000000000013546075722020252 5ustar carstencarstentmpk8ny_4pz/tests/bsim4/nmos/reference/acFreq_diomod.standard0000644000175000017500000000712113546075722024531 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 1258.925 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 1584.893 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 1995.262 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 2511.886 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 3162.278 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 3981.072 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 5011.872 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 6309.573 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 7943.282 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 10000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 12589.25 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 15848.93 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 19952.62 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 25118.86 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 31622.78 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 39810.72 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 50118.72 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 63095.73 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 79432.82 1.39210168579019e-14 1.01277256219657e-14 3.71918252520243e-15 100000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 125892.5 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 158489.3 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 199526.2 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 251188.6 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 316227.8 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 398107.2 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 501187.2 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 630957.3 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 794328.2 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 1000000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 1258925 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 1584893 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 1995262 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 2511886 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 3162278 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 3981072 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 5011872 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 6309573 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 7943282 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 10000000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 12589250 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 15848930 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 19952620 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 25118860 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 31622780 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 39810720 1.39210123081412e-14 1.0127724190444e-14 3.71918106361498e-15 50118720 1.39210147331426e-14 1.01277239885519e-14 3.71918272852533e-15 63095730 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 79432820 1.39210148542597e-14 1.01277236183236e-14 3.71918052156032e-15 100000000 1.39210139003943e-14 1.01277229444892e-14 3.71918045665434e-15 tmpk8ny_4pz/tests/bsim4/nmos/reference/dcSweep_lw5.standard0000644000175000017500000002575213546075722024170 0ustar carstencarstenV(d) I(d) 1.000000e-01 1.149429e-08 2.000000e-01 1.247534e-08 3.000000e-01 1.329857e-08 4.000000e-01 1.413686e-08 5.000000e-01 1.502052e-08 6.000000e-01 1.596994e-08 7.000000e-01 1.701131e-08 8.000000e-01 1.818573e-08 9.000000e-01 1.956119e-08 1.000000e+00 2.125125e-08 1.100000e+00 2.344521e-08 1.200000e+00 2.645689e-08 1.000000e-01 1.360213e-07 2.000000e-01 1.472968e-07 3.000000e-01 1.565955e-07 4.000000e-01 1.659445e-07 5.000000e-01 1.756266e-07 6.000000e-01 1.857448e-07 7.000000e-01 1.963647e-07 8.000000e-01 2.075490e-07 9.000000e-01 2.193755e-07 1.000000e+00 2.319551e-07 1.100000e+00 2.454562e-07 1.200000e+00 2.601396e-07 1.000000e-01 1.338538e-06 2.000000e-01 1.445381e-06 3.000000e-01 1.529632e-06 4.000000e-01 1.613157e-06 5.000000e-01 1.698833e-06 6.000000e-01 1.787581e-06 7.000000e-01 1.879870e-06 8.000000e-01 1.976038e-06 9.000000e-01 2.076408e-06 1.000000e+00 2.181371e-06 1.100000e+00 2.291446e-06 1.200000e+00 2.407346e-06 1.000000e-01 9.822916e-06 2.000000e-01 1.066363e-05 3.000000e-01 1.121864e-05 4.000000e-01 1.174675e-05 5.000000e-01 1.227716e-05 6.000000e-01 1.281795e-05 7.000000e-01 1.337249e-05 8.000000e-01 1.394268e-05 9.000000e-01 1.453000e-05 1.000000e+00 1.513609e-05 1.100000e+00 1.576318e-05 1.200000e+00 1.641433e-05 1.000000e-01 4.265986e-05 2.000000e-01 4.852153e-05 3.000000e-01 5.074433e-05 4.000000e-01 5.258304e-05 5.000000e-01 5.433130e-05 6.000000e-01 5.605614e-05 7.000000e-01 5.778127e-05 8.000000e-01 5.951744e-05 9.000000e-01 6.127100e-05 1.000000e+00 6.304741e-05 1.100000e+00 6.485338e-05 1.200000e+00 6.669810e-05 1.000000e-01 9.627068e-05 2.000000e-01 1.239810e-04 3.000000e-01 1.305981e-04 4.000000e-01 1.345198e-04 5.000000e-01 1.378469e-04 6.000000e-01 1.409615e-04 7.000000e-01 1.439808e-04 8.000000e-01 1.469530e-04 9.000000e-01 1.499023e-04 1.000000e+00 1.528452e-04 1.100000e+00 1.557972e-04 1.200000e+00 1.587780e-04 1.000000e-01 1.459225e-04 2.000000e-01 2.133861e-04 3.000000e-01 2.322790e-04 4.000000e-01 2.396628e-04 5.000000e-01 2.448265e-04 6.000000e-01 2.492856e-04 7.000000e-01 2.534356e-04 8.000000e-01 2.574223e-04 9.000000e-01 2.613125e-04 1.000000e+00 2.651443e-04 1.100000e+00 2.689473e-04 1.200000e+00 2.727532e-04 1.000000e-01 1.850127e-04 2.000000e-01 2.939305e-04 3.000000e-01 3.378957e-04 4.000000e-01 3.522660e-04 5.000000e-01 3.600688e-04 6.000000e-01 3.660761e-04 7.000000e-01 3.713709e-04 8.000000e-01 3.763085e-04 9.000000e-01 3.810383e-04 1.000000e+00 3.856367e-04 1.100000e+00 3.901537e-04 1.200000e+00 3.946346e-04 1.000000e-01 2.153281e-04 2.000000e-01 3.595699e-04 3.000000e-01 4.366559e-04 4.000000e-01 4.649502e-04 5.000000e-01 4.771391e-04 6.000000e-01 4.852127e-04 7.000000e-01 4.918358e-04 8.000000e-01 4.977864e-04 9.000000e-01 5.033644e-04 1.000000e+00 5.087107e-04 1.100000e+00 5.139064e-04 1.200000e+00 5.190138e-04 1.000000e-01 2.391687e-04 2.000000e-01 4.123735e-04 3.000000e-01 5.222333e-04 4.000000e-01 5.731505e-04 5.000000e-01 5.931026e-04 6.000000e-01 6.042051e-04 7.000000e-01 6.125020e-04 8.000000e-01 6.196119e-04 9.000000e-01 6.261035e-04 1.000000e+00 6.322250e-04 1.100000e+00 6.381061e-04 1.200000e+00 6.438328e-04 1.000000e-01 2.582195e-04 2.000000e-01 4.552150e-04 3.000000e-01 5.935717e-04 4.000000e-01 6.725014e-04 5.000000e-01 7.057956e-04 6.000000e-01 7.216486e-04 7.000000e-01 7.321959e-04 8.000000e-01 7.407024e-04 9.000000e-01 7.482199e-04 1.000000e+00 7.551735e-04 1.100000e+00 7.617692e-04 1.200000e+00 7.681286e-04 1.000000e-01 2.736504e-04 2.000000e-01 4.903544e-04 3.000000e-01 6.526914e-04 4.000000e-01 7.595598e-04 5.000000e-01 8.127970e-04 6.000000e-01 8.363690e-04 7.000000e-01 8.501229e-04 8.000000e-01 8.603950e-04 9.000000e-01 8.691069e-04 1.000000e+00 8.769792e-04 1.100000e+00 8.843375e-04 1.200000e+00 8.913572e-04 1.000000e-01 1.589619e-09 2.000000e-01 1.742794e-09 3.000000e-01 1.884972e-09 4.000000e-01 2.038006e-09 5.000000e-01 2.211790e-09 6.000000e-01 2.419695e-09 7.000000e-01 2.683958e-09 8.000000e-01 3.042621e-09 9.000000e-01 3.560643e-09 1.000000e+00 4.348095e-09 1.100000e+00 5.589887e-09 1.200000e+00 7.594149e-09 1.000000e-01 4.676745e-08 2.000000e-01 5.110393e-08 3.000000e-01 5.500675e-08 4.000000e-01 5.901980e-08 5.000000e-01 6.324394e-08 6.000000e-01 6.772684e-08 7.000000e-01 7.250779e-08 8.000000e-01 7.763178e-08 9.000000e-01 8.316033e-08 1.000000e+00 8.918533e-08 1.100000e+00 9.584958e-08 1.200000e+00 1.033791e-07 1.000000e-01 1.019841e-06 2.000000e-01 1.104912e-06 3.000000e-01 1.178447e-06 4.000000e-01 1.252562e-06 5.000000e-01 1.329289e-06 6.000000e-01 1.409376e-06 7.000000e-01 1.493245e-06 8.000000e-01 1.581229e-06 9.000000e-01 1.673658e-06 1.000000e+00 1.770929e-06 1.100000e+00 1.873563e-06 1.200000e+00 1.982263e-06 1.000000e-01 1.229357e-05 2.000000e-01 1.322893e-05 3.000000e-01 1.394715e-05 4.000000e-01 1.464189e-05 5.000000e-01 1.534295e-05 6.000000e-01 1.605969e-05 7.000000e-01 1.679632e-05 8.000000e-01 1.755533e-05 9.000000e-01 1.833883e-05 1.000000e+00 1.914917e-05 1.100000e+00 1.998953e-05 1.200000e+00 2.086427e-05 1.000000e-01 7.075172e-05 2.000000e-01 7.683093e-05 3.000000e-01 8.004721e-05 4.000000e-01 8.281237e-05 5.000000e-01 8.544356e-05 6.000000e-01 8.802922e-05 7.000000e-01 9.060376e-05 8.000000e-01 9.318377e-05 9.000000e-01 9.577982e-05 1.000000e+00 9.840174e-05 1.100000e+00 1.010617e-04 1.200000e+00 1.037761e-04 1.000000e-01 1.798139e-04 2.000000e-01 2.049883e-04 3.000000e-01 2.126744e-04 4.000000e-01 2.179648e-04 5.000000e-01 2.225330e-04 6.000000e-01 2.267911e-04 7.000000e-01 2.308885e-04 8.000000e-01 2.348930e-04 9.000000e-01 2.388428e-04 1.000000e+00 2.427674e-04 1.100000e+00 2.466972e-04 1.200000e+00 2.506701e-04 1.000000e-01 2.818658e-04 2.000000e-01 3.514128e-04 3.000000e-01 3.670060e-04 4.000000e-01 3.752748e-04 5.000000e-01 3.816141e-04 6.000000e-01 3.871758e-04 7.000000e-01 3.923429e-04 8.000000e-01 3.972793e-04 9.000000e-01 4.020700e-04 1.000000e+00 4.067725e-04 1.100000e+00 4.114392e-04 1.200000e+00 4.161301e-04 1.000000e-01 3.572200e-04 2.000000e-01 4.913102e-04 3.000000e-01 5.215700e-04 4.000000e-01 5.340897e-04 5.000000e-01 5.425319e-04 6.000000e-01 5.494705e-04 7.000000e-01 5.556852e-04 8.000000e-01 5.614894e-04 9.000000e-01 5.670361e-04 1.000000e+00 5.724186e-04 1.100000e+00 5.777131e-04 1.200000e+00 5.830008e-04 1.000000e-01 4.117858e-04 2.000000e-01 6.153769e-04 3.000000e-01 6.712412e-04 4.000000e-01 6.901814e-04 5.000000e-01 7.013326e-04 6.000000e-01 7.098756e-04 7.000000e-01 7.172374e-04 8.000000e-01 7.239554e-04 9.000000e-01 7.302779e-04 1.000000e+00 7.363449e-04 1.100000e+00 7.422595e-04 1.200000e+00 7.481234e-04 1.000000e-01 4.511425e-04 2.000000e-01 7.174393e-04 3.000000e-01 8.124952e-04 4.000000e-01 8.415356e-04 5.000000e-01 8.563940e-04 6.000000e-01 8.669477e-04 7.000000e-01 8.756782e-04 8.000000e-01 8.834571e-04 9.000000e-01 8.906667e-04 1.000000e+00 8.975087e-04 1.100000e+00 9.041184e-04 1.200000e+00 9.106183e-04 1.000000e-01 4.757475e-04 2.000000e-01 7.915916e-04 3.000000e-01 9.377246e-04 4.000000e-01 9.833060e-04 5.000000e-01 1.003427e-03 6.000000e-01 1.016496e-03 7.000000e-01 1.026804e-03 8.000000e-01 1.035746e-03 9.000000e-01 1.043902e-03 1.000000e+00 1.051558e-03 1.100000e+00 1.058891e-03 1.200000e+00 1.066046e-03 1.000000e-01 4.929847e-04 2.000000e-01 8.463012e-04 3.000000e-01 1.046246e-03 4.000000e-01 1.117766e-03 5.000000e-01 1.145641e-03 6.000000e-01 1.161954e-03 7.000000e-01 1.174101e-03 8.000000e-01 1.184306e-03 9.000000e-01 1.193438e-03 1.000000e+00 1.201903e-03 1.100000e+00 1.209935e-03 1.200000e+00 1.217704e-03 1.000000e-01 7.210660e-08 2.000000e-01 7.795435e-08 3.000000e-01 8.200794e-08 4.000000e-01 8.596347e-08 5.000000e-01 9.000300e-08 6.000000e-01 9.418832e-08 7.000000e-01 9.856383e-08 8.000000e-01 1.031819e-07 9.000000e-01 1.081204e-07 1.000000e+00 1.135040e-07 1.100000e+00 1.195371e-07 1.200000e+00 1.265540e-07 1.000000e-01 3.966887e-07 2.000000e-01 4.288275e-07 3.000000e-01 4.504183e-07 4.000000e-01 4.713126e-07 5.000000e-01 4.925118e-07 6.000000e-01 5.142993e-07 7.000000e-01 5.368115e-07 8.000000e-01 5.601488e-07 9.000000e-01 5.844176e-07 1.000000e+00 6.097618e-07 1.100000e+00 6.363956e-07 1.200000e+00 6.646449e-07 1.000000e-01 1.971860e-06 2.000000e-01 2.143305e-06 3.000000e-01 2.247441e-06 4.000000e-01 2.346448e-06 5.000000e-01 2.446128e-06 6.000000e-01 2.547998e-06 7.000000e-01 2.652698e-06 8.000000e-01 2.760615e-06 9.000000e-01 2.872075e-06 1.000000e+00 2.987460e-06 1.100000e+00 3.107288e-06 1.200000e+00 3.232291e-06 1.000000e-01 8.286145e-06 2.000000e-01 9.290391e-06 3.000000e-01 9.727362e-06 4.000000e-01 1.011818e-05 5.000000e-01 1.050339e-05 6.000000e-01 1.089203e-05 7.000000e-01 1.128743e-05 8.000000e-01 1.169123e-05 9.000000e-01 1.210457e-05 1.000000e+00 1.252859e-05 1.100000e+00 1.296481e-05 1.200000e+00 1.341533e-05 1.000000e-01 2.415191e-05 2.000000e-01 3.013403e-05 3.000000e-01 3.167499e-05 4.000000e-01 3.278275e-05 5.000000e-01 3.381054e-05 6.000000e-01 3.481840e-05 7.000000e-01 3.582462e-05 8.000000e-01 3.683684e-05 9.000000e-01 3.785914e-05 1.000000e+00 3.889464e-05 1.100000e+00 3.994688e-05 1.200000e+00 4.102069e-05 1.000000e-01 4.568324e-05 2.000000e-01 6.629789e-05 3.000000e-01 7.202148e-05 4.000000e-01 7.451437e-05 5.000000e-01 7.647602e-05 6.000000e-01 7.828944e-05 7.000000e-01 8.004681e-05 8.000000e-01 8.178098e-05 9.000000e-01 8.350691e-05 1.000000e+00 8.523328e-05 1.100000e+00 8.696738e-05 1.200000e+00 8.871783e-05 1.000000e-01 6.551533e-05 2.000000e-01 1.051244e-04 3.000000e-01 1.225142e-04 4.000000e-01 1.284816e-04 5.000000e-01 1.318176e-04 6.000000e-01 1.345378e-04 7.000000e-01 1.370416e-04 8.000000e-01 1.394472e-04 9.000000e-01 1.418013e-04 1.000000e+00 1.441270e-04 1.100000e+00 1.464389e-04 1.200000e+00 1.487504e-04 1.000000e-01 8.131624e-05 2.000000e-01 1.377811e-04 3.000000e-01 1.710723e-04 4.000000e-01 1.855774e-04 5.000000e-01 1.916754e-04 6.000000e-01 1.956348e-04 7.000000e-01 1.989582e-04 8.000000e-01 2.020212e-04 9.000000e-01 2.049521e-04 1.000000e+00 2.078069e-04 1.100000e+00 2.106149e-04 1.200000e+00 2.133971e-04 1.000000e-01 9.350719e-05 2.000000e-01 1.636528e-04 3.000000e-01 2.116416e-04 4.000000e-01 2.389559e-04 5.000000e-01 2.510948e-04 6.000000e-01 2.572294e-04 7.000000e-01 2.616454e-04 8.000000e-01 2.654512e-04 9.000000e-01 2.689764e-04 1.000000e+00 2.723477e-04 1.100000e+00 2.756243e-04 1.200000e+00 2.788406e-04 1.000000e-01 1.029511e-04 2.000000e-01 1.840822e-04 3.000000e-01 2.443819e-04 4.000000e-01 2.846920e-04 5.000000e-01 3.067660e-04 6.000000e-01 3.171775e-04 7.000000e-01 3.233305e-04 8.000000e-01 3.280989e-04 9.000000e-01 3.323028e-04 1.000000e+00 3.362219e-04 1.100000e+00 3.399744e-04 1.200000e+00 3.436199e-04 1.000000e-01 1.103422e-04 2.000000e-01 2.003411e-04 3.000000e-01 2.708262e-04 4.000000e-01 3.224884e-04 5.000000e-01 3.559562e-04 6.000000e-01 3.737906e-04 7.000000e-01 3.830422e-04 8.000000e-01 3.892272e-04 9.000000e-01 3.942830e-04 1.000000e+00 3.988244e-04 1.100000e+00 4.030858e-04 1.200000e+00 4.071741e-04 1.000000e-01 1.161707e-04 2.000000e-01 2.133751e-04 3.000000e-01 2.923075e-04 4.000000e-01 3.535797e-04 5.000000e-01 3.976306e-04 6.000000e-01 4.251323e-04 7.000000e-01 4.397981e-04 8.000000e-01 4.483034e-04 9.000000e-01 4.545389e-04 1.000000e+00 4.598386e-04 1.100000e+00 4.646714e-04 1.200000e+00 4.692330e-04 tmpk8ny_4pz/tests/bsim4/nmos/reference/dcSweep_lw4.standard0000644000175000017500000002575213546075722024167 0ustar carstencarstenV(d) I(d) 1.000000e-01 5.331971e-08 2.000000e-01 8.897618e-08 3.000000e-01 1.445255e-07 4.000000e-01 2.324586e-07 5.000000e-01 3.709946e-07 6.000000e-01 5.874979e-07 7.000000e-01 9.225496e-07 8.000000e-01 1.435278e-06 9.000000e-01 2.210167e-06 1.000000e+00 3.365416e-06 1.100000e+00 5.062696e-06 1.200000e+00 7.517724e-06 1.000000e-01 6.119196e-07 2.000000e-01 9.905371e-07 3.000000e-01 1.552400e-06 4.000000e-01 2.395901e-06 5.000000e-01 3.647899e-06 6.000000e-01 5.478017e-06 7.000000e-01 8.106593e-06 8.000000e-01 1.180803e-05 9.000000e-01 1.690615e-05 1.000000e+00 2.375850e-05 1.100000e+00 3.272913e-05 1.200000e+00 4.415566e-05 1.000000e-01 5.553754e-06 2.000000e-01 8.489335e-06 3.000000e-01 1.245806e-05 4.000000e-01 1.787381e-05 5.000000e-01 2.510443e-05 6.000000e-01 3.449430e-05 7.000000e-01 4.632549e-05 8.000000e-01 6.077882e-05 9.000000e-01 7.791298e-05 1.000000e+00 9.767071e-05 1.100000e+00 1.199106e-04 1.200000e+00 1.444555e-04 1.000000e-01 3.338041e-05 2.000000e-01 4.693132e-05 3.000000e-01 6.209029e-05 4.000000e-01 7.970871e-05 5.000000e-01 9.980418e-05 6.000000e-01 1.222121e-04 7.000000e-01 1.466830e-04 8.000000e-01 1.729332e-04 9.000000e-01 2.006827e-04 1.000000e+00 2.296879e-04 1.100000e+00 2.597690e-04 1.200000e+00 2.908320e-04 1.000000e-01 1.070945e-04 2.000000e-01 1.417039e-04 3.000000e-01 1.699445e-04 4.000000e-01 1.983869e-04 5.000000e-01 2.276177e-04 6.000000e-01 2.576299e-04 7.000000e-01 2.883134e-04 8.000000e-01 3.195483e-04 9.000000e-01 3.512353e-04 1.000000e+00 3.833135e-04 1.100000e+00 4.157787e-04 1.200000e+00 4.487018e-04 1.000000e-01 1.954910e-04 2.000000e-01 2.677165e-04 3.000000e-01 3.066976e-04 4.000000e-01 3.409222e-04 5.000000e-01 3.741036e-04 6.000000e-01 4.070165e-04 7.000000e-01 4.398907e-04 8.000000e-01 4.728060e-04 9.000000e-01 5.057967e-04 1.000000e+00 5.388977e-04 1.100000e+00 5.721769e-04 1.200000e+00 6.057653e-04 1.000000e-01 2.634599e-04 2.000000e-01 3.910880e-04 3.000000e-01 4.463149e-04 4.000000e-01 4.858349e-04 5.000000e-01 5.217509e-04 6.000000e-01 5.564363e-04 7.000000e-01 5.906005e-04 8.000000e-01 6.245213e-04 9.000000e-01 6.583316e-04 1.000000e+00 6.921192e-04 1.100000e+00 7.259827e-04 1.200000e+00 7.600737e-04 1.000000e-01 3.108415e-04 2.000000e-01 4.950972e-04 3.000000e-01 5.793861e-04 4.000000e-01 6.271525e-04 5.000000e-01 6.664548e-04 6.000000e-01 7.030731e-04 7.000000e-01 7.385677e-04 8.000000e-01 7.735107e-04 9.000000e-01 8.081606e-04 1.000000e+00 8.426631e-04 1.100000e+00 8.771428e-04 1.200000e+00 9.117621e-04 1.000000e-01 3.446417e-04 2.000000e-01 5.759262e-04 3.000000e-01 7.010859e-04 4.000000e-01 7.631775e-04 5.000000e-01 8.075090e-04 6.000000e-01 8.466490e-04 7.000000e-01 8.837492e-04 8.000000e-01 9.198720e-04 9.000000e-01 9.554670e-04 1.000000e+00 9.907643e-04 1.100000e+00 1.025924e-03 1.200000e+00 1.061120e-03 1.000000e-01 3.696827e-04 2.000000e-01 6.377157e-04 3.000000e-01 8.068301e-04 4.000000e-01 8.923253e-04 5.000000e-01 9.445347e-04 6.000000e-01 9.871388e-04 7.000000e-01 1.026248e-03 8.000000e-01 1.063760e-03 9.000000e-01 1.100427e-03 1.000000e+00 1.136607e-03 1.100000e+00 1.172512e-03 1.200000e+00 1.208335e-03 1.000000e-01 3.888399e-04 2.000000e-01 6.857289e-04 3.000000e-01 8.941749e-04 4.000000e-01 1.012100e-03 5.000000e-01 1.076829e-03 6.000000e-01 1.124372e-03 7.000000e-01 1.166064e-03 8.000000e-01 1.205240e-03 9.000000e-01 1.243132e-03 1.000000e+00 1.280289e-03 1.100000e+00 1.317010e-03 1.200000e+00 1.353514e-03 1.000000e-01 4.038704e-04 2.000000e-01 7.238530e-04 3.000000e-01 9.646281e-04 4.000000e-01 1.119271e-03 5.000000e-01 1.203161e-03 6.000000e-01 1.257969e-03 7.000000e-01 1.303086e-03 8.000000e-01 1.344299e-03 9.000000e-01 1.383610e-03 1.000000e+00 1.421861e-03 1.100000e+00 1.459475e-03 1.200000e+00 1.496722e-03 1.000000e-01 7.253008e-09 2.000000e-01 1.363056e-08 3.000000e-01 2.513485e-08 4.000000e-01 4.597577e-08 5.000000e-01 8.347298e-08 6.000000e-01 1.502492e-07 7.000000e-01 2.675966e-07 8.000000e-01 4.704440e-07 9.000000e-01 8.142412e-07 1.000000e+00 1.383845e-06 1.100000e+00 2.304184e-06 1.200000e+00 3.752350e-06 1.000000e-01 2.056557e-07 2.000000e-01 3.706552e-07 3.000000e-01 6.482426e-07 4.000000e-01 1.110415e-06 5.000000e-01 1.861948e-06 6.000000e-01 3.051087e-06 7.000000e-01 4.878520e-06 8.000000e-01 7.603977e-06 9.000000e-01 1.154857e-05 1.000000e+00 1.708965e-05 1.100000e+00 2.464390e-05 1.200000e+00 3.463612e-05 1.000000e-01 3.926838e-06 2.000000e-01 6.310276e-06 3.000000e-01 9.721176e-06 4.000000e-01 1.453533e-05 5.000000e-01 2.113942e-05 6.000000e-01 2.992111e-05 7.000000e-01 4.122224e-05 8.000000e-01 5.528397e-05 9.000000e-01 7.220577e-05 1.000000e+00 9.193778e-05 1.100000e+00 1.143123e-04 1.200000e+00 1.391053e-04 1.000000e-01 3.445623e-05 2.000000e-01 4.799481e-05 3.000000e-01 6.369901e-05 4.000000e-01 8.202275e-05 5.000000e-01 1.028957e-04 6.000000e-01 1.260800e-04 7.000000e-01 1.512578e-04 8.000000e-01 1.780910e-04 9.000000e-01 2.062686e-04 1.000000e+00 2.355412e-04 1.100000e+00 2.657468e-04 1.200000e+00 2.968280e-04 1.000000e-01 1.264253e-04 2.000000e-01 1.584346e-04 3.000000e-01 1.871156e-04 4.000000e-01 2.160551e-04 5.000000e-01 2.455882e-04 6.000000e-01 2.756839e-04 7.000000e-01 3.062525e-04 8.000000e-01 3.372097e-04 9.000000e-01 3.684987e-04 1.000000e+00 4.001059e-04 1.100000e+00 4.320777e-04 1.200000e+00 4.645373e-04 1.000000e-01 2.448845e-04 2.000000e-01 3.026768e-04 3.000000e-01 3.389341e-04 4.000000e-01 3.720946e-04 5.000000e-01 4.044457e-04 6.000000e-01 4.365546e-04 7.000000e-01 4.686169e-04 8.000000e-01 5.007161e-04 9.000000e-01 5.329029e-04 1.000000e+00 5.652372e-04 1.100000e+00 5.978206e-04 1.200000e+00 6.308243e-04 1.000000e-01 3.393237e-04 2.000000e-01 4.461536e-04 3.000000e-01 4.919784e-04 4.000000e-01 5.286373e-04 5.000000e-01 5.629120e-04 6.000000e-01 5.963158e-04 7.000000e-01 6.293563e-04 8.000000e-01 6.622493e-04 9.000000e-01 6.951100e-04 1.000000e+00 7.280314e-04 1.100000e+00 7.611347e-04 1.200000e+00 7.946085e-04 1.000000e-01 4.020023e-04 2.000000e-01 5.766992e-04 3.000000e-01 6.402229e-04 4.000000e-01 6.819615e-04 5.000000e-01 7.186123e-04 6.000000e-01 7.534885e-04 7.000000e-01 7.876006e-04 8.000000e-01 8.213519e-04 9.000000e-01 8.549388e-04 1.000000e+00 8.884914e-04 1.100000e+00 9.221467e-04 1.200000e+00 9.561025e-04 1.000000e-01 4.437532e-04 2.000000e-01 6.868020e-04 3.000000e-01 7.815231e-04 4.000000e-01 8.314547e-04 5.000000e-01 8.713858e-04 6.000000e-01 9.081001e-04 7.000000e-01 9.434694e-04 8.000000e-01 9.781897e-04 9.000000e-01 1.012578e-03 1.000000e+00 1.046816e-03 1.100000e+00 1.081063e-03 1.200000e+00 1.115521e-03 1.000000e-01 4.729423e-04 2.000000e-01 7.730274e-04 3.000000e-01 9.130515e-04 4.000000e-01 9.764972e-04 5.000000e-01 1.021130e-03 6.000000e-01 1.060199e-03 7.000000e-01 1.097063e-03 8.000000e-01 1.132882e-03 9.000000e-01 1.168152e-03 1.000000e+00 1.203132e-03 1.100000e+00 1.238010e-03 1.200000e+00 1.272997e-03 1.000000e-01 4.926794e-04 2.000000e-01 8.364022e-04 3.000000e-01 1.029685e-03 4.000000e-01 1.115445e-03 5.000000e-01 1.167297e-03 6.000000e-01 1.209621e-03 7.000000e-01 1.248381e-03 8.000000e-01 1.285474e-03 9.000000e-01 1.321718e-03 1.000000e+00 1.357502e-03 1.100000e+00 1.393056e-03 1.200000e+00 1.428606e-03 1.000000e-01 5.069600e-04 2.000000e-01 8.832488e-04 3.000000e-01 1.127113e-03 4.000000e-01 1.245856e-03 5.000000e-01 1.308717e-03 6.000000e-01 1.355484e-03 7.000000e-01 1.396678e-03 8.000000e-01 1.435437e-03 9.000000e-01 1.472947e-03 1.000000e+00 1.509749e-03 1.100000e+00 1.546143e-03 1.200000e+00 1.582366e-03 1.000000e-01 3.058227e-07 2.000000e-01 4.579271e-07 3.000000e-01 6.611960e-07 4.000000e-01 9.459418e-07 5.000000e-01 1.345257e-06 6.000000e-01 1.903056e-06 7.000000e-01 2.677997e-06 8.000000e-01 3.747736e-06 9.000000e-01 5.213841e-06 1.000000e+00 7.207304e-06 1.100000e+00 9.894394e-06 1.200000e+00 1.348234e-05 1.000000e-01 1.642811e-06 2.000000e-01 2.417971e-06 3.000000e-01 3.419406e-06 4.000000e-01 4.780597e-06 5.000000e-01 6.628138e-06 6.000000e-01 9.116354e-06 7.000000e-01 1.243250e-05 8.000000e-01 1.679676e-05 9.000000e-01 2.245762e-05 1.000000e+00 2.968257e-05 1.100000e+00 3.874525e-05 1.200000e+00 4.991178e-05 1.000000e-01 7.756362e-06 2.000000e-01 1.118603e-05 3.000000e-01 1.531244e-05 4.000000e-01 2.060909e-05 5.000000e-01 2.735577e-05 6.000000e-01 3.581099e-05 7.000000e-01 4.620769e-05 8.000000e-01 5.873568e-05 9.000000e-01 7.352677e-05 1.000000e+00 9.064899e-05 1.100000e+00 1.101131e-04 1.200000e+00 1.318915e-04 1.000000e-01 2.908525e-05 2.000000e-01 4.123688e-05 3.000000e-01 5.336531e-05 4.000000e-01 6.734633e-05 5.000000e-01 8.344204e-05 6.000000e-01 1.017036e-04 7.000000e-01 1.220886e-04 8.000000e-01 1.444927e-04 9.000000e-01 1.687711e-04 1.000000e+00 1.947621e-04 1.100000e+00 2.223135e-04 1.200000e+00 2.513096e-04 1.000000e-01 7.242838e-05 2.000000e-01 1.058366e-04 3.000000e-01 1.294402e-04 4.000000e-01 1.530978e-04 5.000000e-01 1.779715e-04 6.000000e-01 2.041815e-04 7.000000e-01 2.316565e-04 8.000000e-01 2.602739e-04 9.000000e-01 2.899020e-04 1.000000e+00 3.204228e-04 1.100000e+00 3.517517e-04 1.200000e+00 3.838592e-04 1.000000e-01 1.210824e-04 2.000000e-01 1.908208e-04 3.000000e-01 2.296732e-04 4.000000e-01 2.611616e-04 5.000000e-01 2.916626e-04 6.000000e-01 3.223333e-04 7.000000e-01 3.534389e-04 8.000000e-01 3.850300e-04 9.000000e-01 4.170929e-04 1.000000e+00 4.496000e-04 1.100000e+00 4.825408e-04 1.200000e+00 5.159487e-04 1.000000e-01 1.604644e-04 2.000000e-01 2.687708e-04 3.000000e-01 3.324013e-04 4.000000e-01 3.732002e-04 5.000000e-01 4.082324e-04 6.000000e-01 4.418592e-04 7.000000e-01 4.751619e-04 8.000000e-01 5.084875e-04 9.000000e-01 5.419653e-04 1.000000e+00 5.756487e-04 1.100000e+00 6.095754e-04 1.200000e+00 6.438085e-04 1.000000e-01 1.894288e-04 2.000000e-01 3.293770e-04 3.000000e-01 4.233496e-04 4.000000e-01 4.799223e-04 5.000000e-01 5.210005e-04 6.000000e-01 5.577295e-04 7.000000e-01 5.930701e-04 8.000000e-01 6.279281e-04 9.000000e-01 6.626481e-04 1.000000e+00 6.973834e-04 1.100000e+00 7.322199e-04 1.200000e+00 7.672409e-04 1.000000e-01 2.106844e-04 2.000000e-01 3.752841e-04 3.000000e-01 4.969861e-04 4.000000e-01 5.764990e-04 5.000000e-01 6.276934e-04 6.000000e-01 6.687737e-04 7.000000e-01 7.065887e-04 8.000000e-01 7.431658e-04 9.000000e-01 7.792286e-04 1.000000e+00 8.150865e-04 1.100000e+00 8.508958e-04 1.200000e+00 8.867673e-04 1.000000e-01 2.266169e-04 2.000000e-01 4.105551e-04 3.000000e-01 5.549708e-04 4.000000e-01 6.593826e-04 5.000000e-01 7.266866e-04 6.000000e-01 7.745947e-04 7.000000e-01 8.157768e-04 8.000000e-01 8.544615e-04 9.000000e-01 8.920705e-04 1.000000e+00 9.291761e-04 1.100000e+00 9.660484e-04 1.200000e+00 1.002845e-03 1.000000e-01 2.388129e-04 2.000000e-01 4.381439e-04 3.000000e-01 6.009455e-04 4.000000e-01 7.275168e-04 5.000000e-01 8.156905e-04 6.000000e-01 8.744627e-04 7.000000e-01 9.205481e-04 8.000000e-01 9.619595e-04 9.000000e-01 1.001410e-03 1.000000e+00 1.039926e-03 1.100000e+00 1.077963e-03 1.200000e+00 1.115761e-03 1.000000e-01 2.482945e-04 2.000000e-01 4.600317e-04 3.000000e-01 6.378671e-04 4.000000e-01 7.827636e-04 5.000000e-01 8.923938e-04 6.000000e-01 9.669302e-04 7.000000e-01 1.020455e-03 8.000000e-01 1.065585e-03 9.000000e-01 1.107313e-03 1.000000e+00 1.147461e-03 1.100000e+00 1.186790e-03 1.200000e+00 1.225672e-03 tmpk8ny_4pz/tests/bsim4/nmos/reference/acFreq_igcmod.standard0000644000175000017500000000712113546075722024520 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.3922782111812e-14 1.01293001699752e-14 3.71935711864117e-15 1258.925 1.39227911100381e-14 1.01293036326864e-14 3.71935781594949e-15 1584.893 1.39227800630373e-14 1.01293043862984e-14 3.71935668451249e-15 1995.262 1.39227851024121e-14 1.01293006925459e-14 3.71935745881153e-15 2511.886 1.39227865225986e-14 1.0129303287753e-14 3.71935751101773e-15 3162.278 1.39227798309548e-14 1.01293014359027e-14 3.71935655918272e-15 3981.072 1.39227833296095e-14 1.01292993201472e-14 3.71935656664536e-15 5011.872 1.39227835194026e-14 1.0129302241283e-14 3.71935738426015e-15 6309.573 1.39227824526521e-14 1.01293009873275e-14 3.71935715996044e-15 7943.282 1.39227840702431e-14 1.01293004846644e-14 3.71935684206603e-15 10000 1.3922782111812e-14 1.01293001699752e-14 3.71935711864117e-15 12589.25 1.39227911100381e-14 1.01293036326864e-14 3.71935781594949e-15 15848.93 1.39227800630373e-14 1.01293043862984e-14 3.71935668451249e-15 19952.62 1.39227851024121e-14 1.01293006925459e-14 3.71935745881153e-15 25118.86 1.39227865225986e-14 1.0129303287753e-14 3.71935751101773e-15 31622.78 1.39227798309548e-14 1.01293014359027e-14 3.71935655918272e-15 39810.72 1.39227833296095e-14 1.01292993201472e-14 3.71935656664536e-15 50118.72 1.39227835194026e-14 1.0129302241283e-14 3.71935738426015e-15 63095.73 1.39227824526521e-14 1.01293009873275e-14 3.71935715996044e-15 79432.82 1.39227840702431e-14 1.01293004846644e-14 3.71935684206603e-15 100000 1.3922782111812e-14 1.01293001699752e-14 3.71935711864117e-15 125892.5 1.39227911100381e-14 1.01293036326864e-14 3.71935781594949e-15 158489.3 1.39227800630373e-14 1.01293043862984e-14 3.71935668451249e-15 199526.2 1.39227851024121e-14 1.01293006925459e-14 3.71935745881153e-15 251188.6 1.39227865225986e-14 1.0129303287753e-14 3.71935751101773e-15 316227.8 1.39227798309548e-14 1.01293014359027e-14 3.71935655918271e-15 398107.2 1.39227833296095e-14 1.01292993201472e-14 3.71935656664536e-15 501187.2 1.39227835194026e-14 1.0129302241283e-14 3.71935738426015e-15 630957.3 1.39227824526521e-14 1.01293009873275e-14 3.71935715996044e-15 794328.2 1.39227840702431e-14 1.01293004846644e-14 3.71935684206603e-15 1000000 1.3922782111812e-14 1.01293001699752e-14 3.71935711864117e-15 1258925 1.39227911100381e-14 1.01293036326864e-14 3.71935781594949e-15 1584893 1.39227800630373e-14 1.01293043862984e-14 3.71935668451249e-15 1995262 1.39227851024121e-14 1.01293006925459e-14 3.71935745881153e-15 2511886 1.39227865225986e-14 1.0129303287753e-14 3.71935751101773e-15 3162278 1.39227798309548e-14 1.01293014359027e-14 3.71935655918271e-15 3981072 1.39227833296095e-14 1.01292993201472e-14 3.71935656664536e-15 5011872 1.39227835194026e-14 1.0129302241283e-14 3.71935738426015e-15 6309573 1.39227824526521e-14 1.01293009873275e-14 3.71935715996044e-15 7943282 1.39227840702431e-14 1.01293004846644e-14 3.71935684206603e-15 10000000 1.3922782111812e-14 1.01293001699752e-14 3.71935711864117e-15 12589250 1.39227911100381e-14 1.01293036326864e-14 3.71935781594949e-15 15848930 1.39227800630373e-14 1.01293043862984e-14 3.71935668451249e-15 19952620 1.39227851024121e-14 1.01293006925459e-14 3.71935745881153e-15 25118860 1.39227865225986e-14 1.0129303287753e-14 3.71935751101773e-15 31622780 1.39227798309548e-14 1.01293014359027e-14 3.71935605589065e-15 39810720 1.39227793318184e-14 1.01292993201472e-14 3.71935656664536e-15 50118720 1.39227835194026e-14 1.01292990657242e-14 3.71935738426015e-15 63095730 1.39227824526521e-14 1.01293009873275e-14 3.71935715996044e-15 79432820 1.3922782066601e-14 1.01293004846644e-14 3.71935684206603e-15 100000000 1.39227805202626e-14 1.01292985784258e-14 3.71935552709174e-15 tmpk8ny_4pz/tests/bsim4/nmos/reference/dcSweep_sb.standard0000644000175000017500000002575213546075722024065 0ustar carstencarstenV(d) I(d) 1.000000e-01 5.381036e-07 2.000000e-01 8.979352e-07 3.000000e-01 1.458523e-06 4.000000e-01 2.345919e-06 5.000000e-01 3.743979e-06 6.000000e-01 5.928842e-06 7.000000e-01 9.309998e-06 8.000000e-01 1.448406e-05 9.000000e-01 2.230339e-05 1.000000e+00 3.396036e-05 1.100000e+00 5.108560e-05 1.200000e+00 7.585441e-05 1.000000e-01 6.175374e-06 2.000000e-01 9.996042e-06 3.000000e-01 1.566575e-05 4.000000e-01 2.417709e-05 5.000000e-01 3.680960e-05 6.000000e-01 5.527369e-05 7.000000e-01 8.179037e-05 8.000000e-01 1.191243e-04 9.000000e-01 1.705364e-04 1.000000e+00 2.396239e-04 1.100000e+00 3.300467e-04 1.200000e+00 4.451953e-04 1.000000e-01 5.603719e-05 2.000000e-01 8.564974e-05 3.000000e-01 1.256776e-04 4.000000e-01 1.802895e-04 5.000000e-01 2.531861e-04 6.000000e-01 3.478281e-04 7.000000e-01 4.670448e-04 8.000000e-01 6.126440e-04 9.000000e-01 7.852036e-04 1.000000e+00 9.841360e-04 1.100000e+00 1.208010e-03 1.200000e+00 1.455038e-03 1.000000e-01 3.365708e-04 2.000000e-01 4.731344e-04 3.000000e-01 6.258448e-04 4.000000e-01 8.032825e-04 5.000000e-01 1.005617e-03 6.000000e-01 1.231184e-03 7.000000e-01 1.477470e-03 8.000000e-01 1.741619e-03 9.000000e-01 2.020814e-03 1.000000e+00 2.312608e-03 1.100000e+00 2.615194e-03 1.200000e+00 2.927631e-03 1.000000e-01 1.078590e-03 2.000000e-01 1.427275e-03 3.000000e-01 1.711529e-03 4.000000e-01 1.997733e-03 5.000000e-01 2.291821e-03 6.000000e-01 2.593736e-03 7.000000e-01 2.902373e-03 8.000000e-01 3.216532e-03 9.000000e-01 3.535218e-03 1.000000e+00 3.857820e-03 1.100000e+00 4.184298e-03 1.200000e+00 4.515363e-03 1.000000e-01 1.966489e-03 2.000000e-01 2.694690e-03 3.000000e-01 3.087158e-03 4.000000e-01 3.431488e-03 5.000000e-01 3.765245e-03 6.000000e-01 4.096264e-03 7.000000e-01 4.426871e-03 8.000000e-01 4.757875e-03 9.000000e-01 5.089625e-03 1.000000e+00 5.422472e-03 1.100000e+00 5.757099e-03 1.200000e+00 6.094820e-03 1.000000e-01 2.647620e-03 2.000000e-01 3.934138e-03 3.000000e-01 4.490970e-03 4.000000e-01 4.888747e-03 5.000000e-01 5.250041e-03 6.000000e-01 5.598883e-03 7.000000e-01 5.942449e-03 8.000000e-01 6.283548e-03 9.000000e-01 6.623523e-03 1.000000e+00 6.963260e-03 1.100000e+00 7.303747e-03 1.200000e+00 7.646505e-03 1.000000e-01 3.121627e-03 2.000000e-01 4.977198e-03 3.000000e-01 5.828211e-03 4.000000e-01 6.309533e-03 5.000000e-01 6.705044e-03 6.000000e-01 7.073379e-03 7.000000e-01 7.430342e-03 8.000000e-01 7.781726e-03 9.000000e-01 8.130143e-03 1.000000e+00 8.477066e-03 1.100000e+00 8.823745e-03 1.200000e+00 9.171809e-03 1.000000e-01 3.459366e-03 2.000000e-01 5.786304e-03 3.000000e-01 7.049916e-03 4.000000e-01 7.676678e-03 5.000000e-01 8.123155e-03 6.000000e-01 8.516979e-03 7.000000e-01 8.890143e-03 8.000000e-01 9.253415e-03 9.000000e-01 9.611348e-03 1.000000e+00 9.966270e-03 1.100000e+00 1.031979e-02 1.200000e+00 1.067365e-02 1.000000e-01 3.709371e-03 2.000000e-01 6.404043e-03 3.000000e-01 8.109684e-03 4.000000e-01 8.973978e-03 5.000000e-01 9.500490e-03 6.000000e-01 9.929411e-03 7.000000e-01 1.032288e-02 8.000000e-01 1.070018e-02 9.000000e-01 1.106892e-02 1.000000e+00 1.143272e-02 1.100000e+00 1.179374e-02 1.200000e+00 1.215392e-02 1.000000e-01 3.900511e-03 2.000000e-01 6.883659e-03 3.000000e-01 8.983496e-03 4.000000e-01 1.017591e-02 5.000000e-01 1.082983e-02 6.000000e-01 1.130891e-02 7.000000e-01 1.172853e-02 8.000000e-01 1.212265e-02 9.000000e-01 1.250374e-02 1.000000e+00 1.287741e-02 1.100000e+00 1.324664e-02 1.200000e+00 1.361368e-02 1.000000e-01 4.050406e-03 2.000000e-01 7.264261e-03 3.000000e-01 9.687450e-03 4.000000e-01 1.124967e-02 5.000000e-01 1.209852e-02 6.000000e-01 1.265156e-02 7.000000e-01 1.310595e-02 8.000000e-01 1.352068e-02 9.000000e-01 1.391611e-02 1.000000e+00 1.430081e-02 1.100000e+00 1.467905e-02 1.200000e+00 1.505357e-02 1.000000e-01 7.321028e-08 2.000000e-01 1.375764e-07 3.000000e-01 2.536872e-07 4.000000e-01 4.640314e-07 5.000000e-01 8.424837e-07 6.000000e-01 1.516439e-06 7.000000e-01 2.700786e-06 8.000000e-01 4.748026e-06 9.000000e-01 8.217731e-06 1.000000e+00 1.396616e-05 1.100000e+00 2.325376e-05 1.200000e+00 3.786694e-05 1.000000e-01 2.075842e-06 2.000000e-01 3.741078e-06 3.000000e-01 6.542583e-06 4.000000e-01 1.120680e-05 5.000000e-01 1.879079e-05 6.000000e-01 3.078970e-05 7.000000e-01 4.922683e-05 8.000000e-01 7.671926e-05 9.000000e-01 1.165001e-04 1.000000e+00 1.723658e-04 1.100000e+00 2.485040e-04 1.200000e+00 3.491799e-04 1.000000e-01 3.962783e-05 2.000000e-01 6.367046e-05 3.000000e-01 9.807032e-05 4.000000e-01 1.466088e-04 5.000000e-01 2.131723e-04 6.000000e-01 3.016524e-04 7.000000e-01 4.154759e-04 8.000000e-01 5.570550e-04 9.000000e-01 7.273784e-04 1.000000e+00 9.259365e-04 1.100000e+00 1.151040e-03 1.200000e+00 1.400437e-03 1.000000e-01 3.472832e-04 2.000000e-01 4.836094e-04 3.000000e-01 6.416803e-04 4.000000e-01 8.260673e-04 5.000000e-01 1.036062e-03 6.000000e-01 1.269272e-03 7.000000e-01 1.522506e-03 8.000000e-01 1.792368e-03 9.000000e-01 2.075732e-03 1.000000e+00 2.370096e-03 1.100000e+00 2.673833e-03 1.200000e+00 2.986366e-03 1.000000e-01 1.272216e-03 2.000000e-01 1.594399e-03 3.000000e-01 1.882878e-03 4.000000e-01 2.173914e-03 5.000000e-01 2.470903e-03 6.000000e-01 2.773539e-03 7.000000e-01 3.080925e-03 8.000000e-01 3.392216e-03 9.000000e-01 3.706839e-03 1.000000e+00 4.024657e-03 1.100000e+00 4.346137e-03 1.200000e+00 4.672512e-03 1.000000e-01 2.461389e-03 2.000000e-01 3.044287e-03 3.000000e-01 3.409153e-03 4.000000e-01 3.742685e-03 5.000000e-01 4.068030e-03 6.000000e-01 4.390920e-03 7.000000e-01 4.713334e-03 8.000000e-01 5.036113e-03 9.000000e-01 5.359768e-03 1.000000e+00 5.684901e-03 1.100000e+00 6.012529e-03 1.200000e+00 6.344369e-03 1.000000e-01 3.406496e-03 2.000000e-01 4.485676e-03 3.000000e-01 4.947536e-03 4.000000e-01 5.316437e-03 5.000000e-01 5.661196e-03 6.000000e-01 5.997142e-03 7.000000e-01 6.329412e-03 8.000000e-01 6.660187e-03 9.000000e-01 6.990627e-03 1.000000e+00 7.321669e-03 1.100000e+00 7.654527e-03 1.200000e+00 7.991088e-03 1.000000e-01 4.031881e-03 2.000000e-01 5.795369e-03 3.000000e-01 6.437274e-03 4.000000e-01 6.857711e-03 5.000000e-01 7.226512e-03 6.000000e-01 7.577328e-03 7.000000e-01 7.920407e-03 8.000000e-01 8.259831e-03 9.000000e-01 8.597587e-03 1.000000e+00 8.934983e-03 1.100000e+00 9.273395e-03 1.200000e+00 9.614801e-03 1.000000e-01 4.447752e-03 2.000000e-01 6.897105e-03 3.000000e-01 7.856388e-03 4.000000e-01 8.360232e-03 5.000000e-01 8.762310e-03 6.000000e-01 9.131724e-03 7.000000e-01 9.487499e-03 8.000000e-01 9.836697e-03 9.000000e-01 1.018253e-02 1.000000e+00 1.052683e-02 1.100000e+00 1.087119e-02 1.200000e+00 1.121766e-02 1.000000e-01 4.738214e-03 2.000000e-01 7.757390e-03 3.000000e-01 9.175754e-03 4.000000e-01 9.817568e-03 5.000000e-01 1.026749e-02 6.000000e-01 1.066078e-02 7.000000e-01 1.103168e-02 8.000000e-01 1.139197e-02 9.000000e-01 1.174669e-02 1.000000e+00 1.209847e-02 1.100000e+00 1.244919e-02 1.200000e+00 1.280097e-02 1.000000e-01 4.934493e-03 2.000000e-01 8.388412e-03 3.000000e-01 1.034314e-02 4.000000e-01 1.121284e-02 5.000000e-01 1.173643e-02 6.000000e-01 1.216280e-02 7.000000e-01 1.255290e-02 8.000000e-01 1.292607e-02 9.000000e-01 1.329063e-02 1.000000e+00 1.365051e-02 1.100000e+00 1.400805e-02 1.200000e+00 1.436550e-02 1.000000e-01 5.076453e-03 2.000000e-01 8.854427e-03 3.000000e-01 1.131542e-02 4.000000e-01 1.252094e-02 5.000000e-01 1.315716e-02 6.000000e-01 1.362882e-02 7.000000e-01 1.404363e-02 8.000000e-01 1.443366e-02 9.000000e-01 1.481101e-02 1.000000e+00 1.518117e-02 1.100000e+00 1.554718e-02 1.200000e+00 1.591142e-02 1.000000e-01 3.086192e-06 2.000000e-01 4.621116e-06 3.000000e-01 6.672341e-06 4.000000e-01 9.545743e-06 5.000000e-01 1.357522e-05 6.000000e-01 1.920386e-05 7.000000e-01 2.702344e-05 8.000000e-01 3.781735e-05 9.000000e-01 5.261004e-05 1.000000e+00 7.272259e-05 1.100000e+00 9.983155e-05 1.200000e+00 1.360261e-04 1.000000e-01 1.657772e-05 2.000000e-01 2.439951e-05 3.000000e-01 3.450415e-05 4.000000e-01 4.823817e-05 5.000000e-01 6.687828e-05 6.000000e-01 9.198042e-05 7.000000e-01 1.254321e-04 8.000000e-01 1.694518e-04 9.000000e-01 2.265423e-04 1.000000e+00 2.993961e-04 1.100000e+00 3.907660e-04 1.200000e+00 5.033272e-04 1.000000e-01 7.825845e-05 2.000000e-01 1.128577e-04 3.000000e-01 1.544802e-04 4.000000e-01 2.079002e-04 5.000000e-01 2.759354e-04 6.000000e-01 3.611870e-04 7.000000e-01 4.659963e-04 8.000000e-01 5.922686e-04 9.000000e-01 7.413231e-04 1.000000e+00 9.138362e-04 1.100000e+00 1.109908e-03 1.200000e+00 1.329252e-03 1.000000e-01 2.933428e-04 2.000000e-01 4.158853e-04 3.000000e-01 5.381511e-04 4.000000e-01 6.790645e-04 5.000000e-01 8.412619e-04 6.000000e-01 1.025251e-03 7.000000e-01 1.230599e-03 8.000000e-01 1.456246e-03 9.000000e-01 1.700731e-03 1.000000e+00 1.962420e-03 1.100000e+00 2.239778e-03 1.200000e+00 2.531640e-03 1.000000e-01 7.299964e-04 2.000000e-01 1.066847e-03 3.000000e-01 1.304685e-03 4.000000e-01 1.542987e-03 5.000000e-01 1.793489e-03 6.000000e-01 2.057408e-03 7.000000e-01 2.334023e-03 8.000000e-01 2.622101e-03 9.000000e-01 2.920318e-03 1.000000e+00 3.227483e-03 1.100000e+00 3.542747e-03 1.200000e+00 3.865813e-03 1.000000e-01 1.219490e-03 2.000000e-01 1.922472e-03 3.000000e-01 2.314048e-03 4.000000e-01 2.631167e-03 5.000000e-01 2.938244e-03 6.000000e-01 3.246975e-03 7.000000e-01 3.560041e-03 8.000000e-01 3.877959e-03 9.000000e-01 4.200591e-03 1.000000e+00 4.527666e-03 1.100000e+00 4.859074e-03 1.200000e+00 5.195153e-03 1.000000e-01 1.615186e-03 2.000000e-01 2.706375e-03 3.000000e-01 3.347917e-03 4.000000e-01 3.758968e-03 5.000000e-01 4.111663e-03 6.000000e-01 4.450107e-03 7.000000e-01 4.785232e-03 8.000000e-01 5.120549e-03 9.000000e-01 5.457365e-03 1.000000e+00 5.796222e-03 1.100000e+00 6.137501e-03 1.200000e+00 6.481837e-03 1.000000e-01 1.905921e-03 2.000000e-01 3.315208e-03 3.000000e-01 4.262445e-03 4.000000e-01 4.832844e-03 5.000000e-01 5.246577e-03 6.000000e-01 5.616272e-03 7.000000e-01 5.971894e-03 8.000000e-01 6.322603e-03 9.000000e-01 6.671887e-03 1.000000e+00 7.021296e-03 1.100000e+00 7.371697e-03 1.200000e+00 7.723929e-03 1.000000e-01 2.119122e-03 2.000000e-01 3.776007e-03 3.000000e-01 5.002170e-03 4.000000e-01 5.804055e-03 5.000000e-01 6.320089e-03 6.000000e-01 6.733725e-03 7.000000e-01 7.114284e-03 8.000000e-01 7.482293e-03 9.000000e-01 7.845076e-03 1.000000e+00 8.205761e-03 1.100000e+00 8.565930e-03 1.200000e+00 8.926699e-03 1.000000e-01 2.278844e-03 2.000000e-01 4.129832e-03 3.000000e-01 5.584225e-03 4.000000e-01 6.636839e-03 5.000000e-01 7.315731e-03 6.000000e-01 7.798441e-03 7.000000e-01 8.213004e-03 8.000000e-01 8.602258e-03 9.000000e-01 8.980606e-03 1.000000e+00 9.353841e-03 1.100000e+00 9.724694e-03 1.200000e+00 1.009476e-02 1.000000e-01 2.401058e-03 2.000000e-01 4.406463e-03 3.000000e-01 6.045474e-03 4.000000e-01 7.320852e-03 5.000000e-01 8.210303e-03 6.000000e-01 8.802992e-03 7.000000e-01 9.267156e-03 8.000000e-01 9.683942e-03 9.000000e-01 1.008085e-02 1.000000e+00 1.046829e-02 1.100000e+00 1.085086e-02 1.200000e+00 1.123099e-02 1.000000e-01 2.496042e-03 2.000000e-01 4.625850e-03 3.000000e-01 6.415743e-03 4.000000e-01 7.875165e-03 5.000000e-01 8.980567e-03 6.000000e-01 9.732659e-03 7.000000e-01 1.027217e-02 8.000000e-01 1.072657e-02 9.000000e-01 1.114648e-02 1.000000e+00 1.155035e-02 1.100000e+00 1.194594e-02 1.200000e+00 1.233698e-02 tmpk8ny_4pz/tests/bsim4/nmos/reference/dcSweep_sa.standard0000644000175000017500000002575213546075722024064 0ustar carstencarstenV(d) I(d) 1.000000e-01 5.381036e-07 2.000000e-01 8.979352e-07 3.000000e-01 1.458523e-06 4.000000e-01 2.345919e-06 5.000000e-01 3.743979e-06 6.000000e-01 5.928842e-06 7.000000e-01 9.309998e-06 8.000000e-01 1.448406e-05 9.000000e-01 2.230339e-05 1.000000e+00 3.396036e-05 1.100000e+00 5.108560e-05 1.200000e+00 7.585441e-05 1.000000e-01 6.175374e-06 2.000000e-01 9.996042e-06 3.000000e-01 1.566575e-05 4.000000e-01 2.417709e-05 5.000000e-01 3.680960e-05 6.000000e-01 5.527369e-05 7.000000e-01 8.179037e-05 8.000000e-01 1.191243e-04 9.000000e-01 1.705364e-04 1.000000e+00 2.396239e-04 1.100000e+00 3.300467e-04 1.200000e+00 4.451953e-04 1.000000e-01 5.603719e-05 2.000000e-01 8.564974e-05 3.000000e-01 1.256776e-04 4.000000e-01 1.802895e-04 5.000000e-01 2.531861e-04 6.000000e-01 3.478281e-04 7.000000e-01 4.670448e-04 8.000000e-01 6.126440e-04 9.000000e-01 7.852036e-04 1.000000e+00 9.841360e-04 1.100000e+00 1.208010e-03 1.200000e+00 1.455038e-03 1.000000e-01 3.365708e-04 2.000000e-01 4.731344e-04 3.000000e-01 6.258448e-04 4.000000e-01 8.032825e-04 5.000000e-01 1.005617e-03 6.000000e-01 1.231184e-03 7.000000e-01 1.477470e-03 8.000000e-01 1.741619e-03 9.000000e-01 2.020814e-03 1.000000e+00 2.312608e-03 1.100000e+00 2.615194e-03 1.200000e+00 2.927631e-03 1.000000e-01 1.078590e-03 2.000000e-01 1.427275e-03 3.000000e-01 1.711529e-03 4.000000e-01 1.997733e-03 5.000000e-01 2.291821e-03 6.000000e-01 2.593736e-03 7.000000e-01 2.902373e-03 8.000000e-01 3.216532e-03 9.000000e-01 3.535218e-03 1.000000e+00 3.857820e-03 1.100000e+00 4.184298e-03 1.200000e+00 4.515363e-03 1.000000e-01 1.966489e-03 2.000000e-01 2.694690e-03 3.000000e-01 3.087158e-03 4.000000e-01 3.431488e-03 5.000000e-01 3.765245e-03 6.000000e-01 4.096264e-03 7.000000e-01 4.426871e-03 8.000000e-01 4.757875e-03 9.000000e-01 5.089625e-03 1.000000e+00 5.422472e-03 1.100000e+00 5.757099e-03 1.200000e+00 6.094820e-03 1.000000e-01 2.647620e-03 2.000000e-01 3.934138e-03 3.000000e-01 4.490970e-03 4.000000e-01 4.888747e-03 5.000000e-01 5.250041e-03 6.000000e-01 5.598883e-03 7.000000e-01 5.942449e-03 8.000000e-01 6.283548e-03 9.000000e-01 6.623523e-03 1.000000e+00 6.963260e-03 1.100000e+00 7.303747e-03 1.200000e+00 7.646505e-03 1.000000e-01 3.121627e-03 2.000000e-01 4.977198e-03 3.000000e-01 5.828211e-03 4.000000e-01 6.309533e-03 5.000000e-01 6.705044e-03 6.000000e-01 7.073379e-03 7.000000e-01 7.430342e-03 8.000000e-01 7.781726e-03 9.000000e-01 8.130143e-03 1.000000e+00 8.477066e-03 1.100000e+00 8.823745e-03 1.200000e+00 9.171809e-03 1.000000e-01 3.459366e-03 2.000000e-01 5.786304e-03 3.000000e-01 7.049916e-03 4.000000e-01 7.676678e-03 5.000000e-01 8.123155e-03 6.000000e-01 8.516979e-03 7.000000e-01 8.890143e-03 8.000000e-01 9.253415e-03 9.000000e-01 9.611348e-03 1.000000e+00 9.966270e-03 1.100000e+00 1.031979e-02 1.200000e+00 1.067365e-02 1.000000e-01 3.709371e-03 2.000000e-01 6.404043e-03 3.000000e-01 8.109684e-03 4.000000e-01 8.973978e-03 5.000000e-01 9.500490e-03 6.000000e-01 9.929411e-03 7.000000e-01 1.032288e-02 8.000000e-01 1.070018e-02 9.000000e-01 1.106892e-02 1.000000e+00 1.143272e-02 1.100000e+00 1.179374e-02 1.200000e+00 1.215392e-02 1.000000e-01 3.900511e-03 2.000000e-01 6.883659e-03 3.000000e-01 8.983496e-03 4.000000e-01 1.017591e-02 5.000000e-01 1.082983e-02 6.000000e-01 1.130891e-02 7.000000e-01 1.172853e-02 8.000000e-01 1.212265e-02 9.000000e-01 1.250374e-02 1.000000e+00 1.287741e-02 1.100000e+00 1.324664e-02 1.200000e+00 1.361368e-02 1.000000e-01 4.050406e-03 2.000000e-01 7.264261e-03 3.000000e-01 9.687450e-03 4.000000e-01 1.124967e-02 5.000000e-01 1.209852e-02 6.000000e-01 1.265156e-02 7.000000e-01 1.310595e-02 8.000000e-01 1.352068e-02 9.000000e-01 1.391611e-02 1.000000e+00 1.430081e-02 1.100000e+00 1.467905e-02 1.200000e+00 1.505357e-02 1.000000e-01 7.321028e-08 2.000000e-01 1.375764e-07 3.000000e-01 2.536872e-07 4.000000e-01 4.640314e-07 5.000000e-01 8.424837e-07 6.000000e-01 1.516439e-06 7.000000e-01 2.700786e-06 8.000000e-01 4.748026e-06 9.000000e-01 8.217731e-06 1.000000e+00 1.396616e-05 1.100000e+00 2.325376e-05 1.200000e+00 3.786694e-05 1.000000e-01 2.075842e-06 2.000000e-01 3.741078e-06 3.000000e-01 6.542583e-06 4.000000e-01 1.120680e-05 5.000000e-01 1.879079e-05 6.000000e-01 3.078970e-05 7.000000e-01 4.922683e-05 8.000000e-01 7.671926e-05 9.000000e-01 1.165001e-04 1.000000e+00 1.723658e-04 1.100000e+00 2.485040e-04 1.200000e+00 3.491799e-04 1.000000e-01 3.962783e-05 2.000000e-01 6.367046e-05 3.000000e-01 9.807032e-05 4.000000e-01 1.466088e-04 5.000000e-01 2.131723e-04 6.000000e-01 3.016524e-04 7.000000e-01 4.154759e-04 8.000000e-01 5.570550e-04 9.000000e-01 7.273784e-04 1.000000e+00 9.259365e-04 1.100000e+00 1.151040e-03 1.200000e+00 1.400437e-03 1.000000e-01 3.472832e-04 2.000000e-01 4.836094e-04 3.000000e-01 6.416803e-04 4.000000e-01 8.260673e-04 5.000000e-01 1.036062e-03 6.000000e-01 1.269272e-03 7.000000e-01 1.522506e-03 8.000000e-01 1.792368e-03 9.000000e-01 2.075732e-03 1.000000e+00 2.370096e-03 1.100000e+00 2.673833e-03 1.200000e+00 2.986366e-03 1.000000e-01 1.272216e-03 2.000000e-01 1.594399e-03 3.000000e-01 1.882878e-03 4.000000e-01 2.173914e-03 5.000000e-01 2.470903e-03 6.000000e-01 2.773539e-03 7.000000e-01 3.080925e-03 8.000000e-01 3.392216e-03 9.000000e-01 3.706839e-03 1.000000e+00 4.024657e-03 1.100000e+00 4.346137e-03 1.200000e+00 4.672512e-03 1.000000e-01 2.461389e-03 2.000000e-01 3.044287e-03 3.000000e-01 3.409153e-03 4.000000e-01 3.742685e-03 5.000000e-01 4.068030e-03 6.000000e-01 4.390920e-03 7.000000e-01 4.713334e-03 8.000000e-01 5.036113e-03 9.000000e-01 5.359768e-03 1.000000e+00 5.684901e-03 1.100000e+00 6.012529e-03 1.200000e+00 6.344369e-03 1.000000e-01 3.406496e-03 2.000000e-01 4.485676e-03 3.000000e-01 4.947536e-03 4.000000e-01 5.316437e-03 5.000000e-01 5.661196e-03 6.000000e-01 5.997142e-03 7.000000e-01 6.329412e-03 8.000000e-01 6.660187e-03 9.000000e-01 6.990627e-03 1.000000e+00 7.321669e-03 1.100000e+00 7.654527e-03 1.200000e+00 7.991088e-03 1.000000e-01 4.031881e-03 2.000000e-01 5.795369e-03 3.000000e-01 6.437274e-03 4.000000e-01 6.857711e-03 5.000000e-01 7.226512e-03 6.000000e-01 7.577328e-03 7.000000e-01 7.920407e-03 8.000000e-01 8.259831e-03 9.000000e-01 8.597587e-03 1.000000e+00 8.934983e-03 1.100000e+00 9.273395e-03 1.200000e+00 9.614801e-03 1.000000e-01 4.447752e-03 2.000000e-01 6.897105e-03 3.000000e-01 7.856388e-03 4.000000e-01 8.360232e-03 5.000000e-01 8.762310e-03 6.000000e-01 9.131724e-03 7.000000e-01 9.487499e-03 8.000000e-01 9.836697e-03 9.000000e-01 1.018253e-02 1.000000e+00 1.052683e-02 1.100000e+00 1.087119e-02 1.200000e+00 1.121766e-02 1.000000e-01 4.738214e-03 2.000000e-01 7.757390e-03 3.000000e-01 9.175754e-03 4.000000e-01 9.817568e-03 5.000000e-01 1.026749e-02 6.000000e-01 1.066078e-02 7.000000e-01 1.103168e-02 8.000000e-01 1.139197e-02 9.000000e-01 1.174669e-02 1.000000e+00 1.209847e-02 1.100000e+00 1.244919e-02 1.200000e+00 1.280097e-02 1.000000e-01 4.934493e-03 2.000000e-01 8.388412e-03 3.000000e-01 1.034314e-02 4.000000e-01 1.121284e-02 5.000000e-01 1.173643e-02 6.000000e-01 1.216280e-02 7.000000e-01 1.255290e-02 8.000000e-01 1.292607e-02 9.000000e-01 1.329063e-02 1.000000e+00 1.365051e-02 1.100000e+00 1.400805e-02 1.200000e+00 1.436550e-02 1.000000e-01 5.076453e-03 2.000000e-01 8.854427e-03 3.000000e-01 1.131542e-02 4.000000e-01 1.252094e-02 5.000000e-01 1.315716e-02 6.000000e-01 1.362882e-02 7.000000e-01 1.404363e-02 8.000000e-01 1.443366e-02 9.000000e-01 1.481101e-02 1.000000e+00 1.518117e-02 1.100000e+00 1.554718e-02 1.200000e+00 1.591142e-02 1.000000e-01 3.086192e-06 2.000000e-01 4.621116e-06 3.000000e-01 6.672341e-06 4.000000e-01 9.545743e-06 5.000000e-01 1.357522e-05 6.000000e-01 1.920386e-05 7.000000e-01 2.702344e-05 8.000000e-01 3.781735e-05 9.000000e-01 5.261004e-05 1.000000e+00 7.272259e-05 1.100000e+00 9.983155e-05 1.200000e+00 1.360261e-04 1.000000e-01 1.657772e-05 2.000000e-01 2.439951e-05 3.000000e-01 3.450415e-05 4.000000e-01 4.823817e-05 5.000000e-01 6.687828e-05 6.000000e-01 9.198042e-05 7.000000e-01 1.254321e-04 8.000000e-01 1.694518e-04 9.000000e-01 2.265423e-04 1.000000e+00 2.993961e-04 1.100000e+00 3.907660e-04 1.200000e+00 5.033272e-04 1.000000e-01 7.825845e-05 2.000000e-01 1.128577e-04 3.000000e-01 1.544802e-04 4.000000e-01 2.079002e-04 5.000000e-01 2.759354e-04 6.000000e-01 3.611870e-04 7.000000e-01 4.659963e-04 8.000000e-01 5.922686e-04 9.000000e-01 7.413231e-04 1.000000e+00 9.138362e-04 1.100000e+00 1.109908e-03 1.200000e+00 1.329252e-03 1.000000e-01 2.933428e-04 2.000000e-01 4.158853e-04 3.000000e-01 5.381511e-04 4.000000e-01 6.790645e-04 5.000000e-01 8.412619e-04 6.000000e-01 1.025251e-03 7.000000e-01 1.230599e-03 8.000000e-01 1.456246e-03 9.000000e-01 1.700731e-03 1.000000e+00 1.962420e-03 1.100000e+00 2.239778e-03 1.200000e+00 2.531640e-03 1.000000e-01 7.299964e-04 2.000000e-01 1.066847e-03 3.000000e-01 1.304685e-03 4.000000e-01 1.542987e-03 5.000000e-01 1.793489e-03 6.000000e-01 2.057408e-03 7.000000e-01 2.334023e-03 8.000000e-01 2.622101e-03 9.000000e-01 2.920318e-03 1.000000e+00 3.227483e-03 1.100000e+00 3.542747e-03 1.200000e+00 3.865813e-03 1.000000e-01 1.219490e-03 2.000000e-01 1.922472e-03 3.000000e-01 2.314048e-03 4.000000e-01 2.631167e-03 5.000000e-01 2.938244e-03 6.000000e-01 3.246975e-03 7.000000e-01 3.560041e-03 8.000000e-01 3.877959e-03 9.000000e-01 4.200591e-03 1.000000e+00 4.527666e-03 1.100000e+00 4.859074e-03 1.200000e+00 5.195153e-03 1.000000e-01 1.615186e-03 2.000000e-01 2.706375e-03 3.000000e-01 3.347917e-03 4.000000e-01 3.758968e-03 5.000000e-01 4.111663e-03 6.000000e-01 4.450107e-03 7.000000e-01 4.785232e-03 8.000000e-01 5.120549e-03 9.000000e-01 5.457365e-03 1.000000e+00 5.796222e-03 1.100000e+00 6.137501e-03 1.200000e+00 6.481837e-03 1.000000e-01 1.905921e-03 2.000000e-01 3.315208e-03 3.000000e-01 4.262445e-03 4.000000e-01 4.832844e-03 5.000000e-01 5.246577e-03 6.000000e-01 5.616272e-03 7.000000e-01 5.971894e-03 8.000000e-01 6.322603e-03 9.000000e-01 6.671887e-03 1.000000e+00 7.021296e-03 1.100000e+00 7.371697e-03 1.200000e+00 7.723929e-03 1.000000e-01 2.119122e-03 2.000000e-01 3.776007e-03 3.000000e-01 5.002170e-03 4.000000e-01 5.804055e-03 5.000000e-01 6.320089e-03 6.000000e-01 6.733725e-03 7.000000e-01 7.114284e-03 8.000000e-01 7.482293e-03 9.000000e-01 7.845076e-03 1.000000e+00 8.205761e-03 1.100000e+00 8.565930e-03 1.200000e+00 8.926699e-03 1.000000e-01 2.278844e-03 2.000000e-01 4.129832e-03 3.000000e-01 5.584225e-03 4.000000e-01 6.636839e-03 5.000000e-01 7.315731e-03 6.000000e-01 7.798441e-03 7.000000e-01 8.213004e-03 8.000000e-01 8.602258e-03 9.000000e-01 8.980606e-03 1.000000e+00 9.353841e-03 1.100000e+00 9.724694e-03 1.200000e+00 1.009476e-02 1.000000e-01 2.401058e-03 2.000000e-01 4.406463e-03 3.000000e-01 6.045474e-03 4.000000e-01 7.320852e-03 5.000000e-01 8.210303e-03 6.000000e-01 8.802992e-03 7.000000e-01 9.267156e-03 8.000000e-01 9.683942e-03 9.000000e-01 1.008085e-02 1.000000e+00 1.046829e-02 1.100000e+00 1.085086e-02 1.200000e+00 1.123099e-02 1.000000e-01 2.496042e-03 2.000000e-01 4.625850e-03 3.000000e-01 6.415743e-03 4.000000e-01 7.875165e-03 5.000000e-01 8.980567e-03 6.000000e-01 9.732659e-03 7.000000e-01 1.027217e-02 8.000000e-01 1.072657e-02 9.000000e-01 1.114648e-02 1.000000e+00 1.155035e-02 1.100000e+00 1.194594e-02 1.200000e+00 1.233698e-02 tmpk8ny_4pz/tests/bsim4/nmos/reference/acFreq_acnqsmod.standard0000644000175000017500000000712113546075722025063 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 1258.925 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 1584.893 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 1995.262 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 2511.886 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 3162.278 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 3981.072 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 5011.872 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 6309.573 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 7943.282 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 10000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 12589.25 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 15848.93 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 19952.62 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 25118.86 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 31622.78 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 39810.72 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 50118.72 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 63095.73 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 79432.82 1.39210168579019e-14 1.01277256219657e-14 3.71918252520243e-15 100000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 125892.5 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 158489.3 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 199526.2 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 251188.6 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 316227.8 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 398107.2 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 501187.2 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 630957.3 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 794328.2 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 1000000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 1258925 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 1584893 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 1995262 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 2511886 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 3162278 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 3981072 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 5011872 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 6309573 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 7943282 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 10000000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 12589250 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 15848930 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 19952620 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 25118860 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 31622780 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 39810720 1.39210123081412e-14 1.0127724190444e-14 3.71918106361498e-15 50118720 1.39210147331426e-14 1.01277239885519e-14 3.71918272852533e-15 63095730 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 79432820 1.39210148542597e-14 1.01277236183236e-14 3.71918052156032e-15 100000000 1.39210139003943e-14 1.01277229444892e-14 3.71918045665434e-15 tmpk8ny_4pz/tests/bsim4/nmos/reference/dcSweep_lw8.standard0000644000175000017500000002575213546075722024173 0ustar carstencarstenV(d) I(d) 1.000000e-01 6.850047e-09 2.000000e-01 7.434756e-09 3.000000e-01 7.925406e-09 4.000000e-01 8.425031e-09 5.000000e-01 8.951689e-09 6.000000e-01 9.517537e-09 7.000000e-01 1.013818e-08 8.000000e-01 1.083813e-08 9.000000e-01 1.165788e-08 1.000000e+00 1.266511e-08 1.100000e+00 1.397265e-08 1.200000e+00 1.576752e-08 1.000000e-01 8.106201e-08 2.000000e-01 8.778191e-08 3.000000e-01 9.332360e-08 4.000000e-01 9.889525e-08 5.000000e-01 1.046654e-07 6.000000e-01 1.106955e-07 7.000000e-01 1.170245e-07 8.000000e-01 1.236899e-07 9.000000e-01 1.307380e-07 1.000000e+00 1.382349e-07 1.100000e+00 1.462810e-07 1.200000e+00 1.550318e-07 1.000000e-01 7.977290e-07 2.000000e-01 8.614055e-07 3.000000e-01 9.116182e-07 4.000000e-01 9.613989e-07 5.000000e-01 1.012461e-06 6.000000e-01 1.065354e-06 7.000000e-01 1.120358e-06 8.000000e-01 1.177674e-06 9.000000e-01 1.237494e-06 1.000000e+00 1.300052e-06 1.100000e+00 1.365657e-06 1.200000e+00 1.434734e-06 1.000000e-01 5.855150e-06 2.000000e-01 6.356234e-06 3.000000e-01 6.687078e-06 4.000000e-01 7.001899e-06 5.000000e-01 7.318099e-06 6.000000e-01 7.640492e-06 7.000000e-01 7.971087e-06 8.000000e-01 8.311011e-06 9.000000e-01 8.661152e-06 1.000000e+00 9.022493e-06 1.100000e+00 9.396350e-06 1.200000e+00 9.784555e-06 1.000000e-01 2.543882e-05 2.000000e-01 2.893223e-05 3.000000e-01 3.025755e-05 4.000000e-01 3.135408e-05 5.000000e-01 3.239675e-05 6.000000e-01 3.342549e-05 7.000000e-01 3.445443e-05 8.000000e-01 3.548998e-05 9.000000e-01 3.653592e-05 1.000000e+00 3.759551e-05 1.100000e+00 3.867274e-05 1.200000e+00 3.977311e-05 1.000000e-01 5.744129e-05 2.000000e-01 7.395720e-05 3.000000e-01 7.790161e-05 4.000000e-01 8.024066e-05 5.000000e-01 8.222553e-05 6.000000e-01 8.408384e-05 7.000000e-01 8.588545e-05 8.000000e-01 8.765897e-05 9.000000e-01 8.941893e-05 1.000000e+00 9.117503e-05 1.100000e+00 9.293668e-05 1.200000e+00 9.471548e-05 1.000000e-01 8.711366e-05 2.000000e-01 1.273409e-04 3.000000e-01 1.385968e-04 4.000000e-01 1.429993e-04 5.000000e-01 1.460798e-04 6.000000e-01 1.487407e-04 7.000000e-01 1.512175e-04 8.000000e-01 1.535970e-04 9.000000e-01 1.559189e-04 1.000000e+00 1.582062e-04 1.100000e+00 1.604763e-04 1.200000e+00 1.627481e-04 1.000000e-01 1.104969e-04 2.000000e-01 1.754765e-04 3.000000e-01 2.016701e-04 4.000000e-01 2.102320e-04 5.000000e-01 2.148854e-04 6.000000e-01 2.184698e-04 7.000000e-01 2.216300e-04 8.000000e-01 2.245772e-04 9.000000e-01 2.274007e-04 1.000000e+00 2.301459e-04 1.100000e+00 2.328427e-04 1.200000e+00 2.355179e-04 1.000000e-01 1.286449e-04 2.000000e-01 2.147372e-04 3.000000e-01 2.606848e-04 4.000000e-01 2.775324e-04 5.000000e-01 2.847968e-04 6.000000e-01 2.896127e-04 7.000000e-01 2.935652e-04 8.000000e-01 2.971171e-04 9.000000e-01 3.004470e-04 1.000000e+00 3.036389e-04 1.100000e+00 3.067411e-04 1.200000e+00 3.097907e-04 1.000000e-01 1.429253e-04 2.000000e-01 2.463416e-04 3.000000e-01 3.118604e-04 4.000000e-01 3.421789e-04 5.000000e-01 3.540602e-04 6.000000e-01 3.606793e-04 7.000000e-01 3.656294e-04 8.000000e-01 3.698727e-04 9.000000e-01 3.737480e-04 1.000000e+00 3.774027e-04 1.100000e+00 3.809142e-04 1.200000e+00 3.843337e-04 1.000000e-01 1.543419e-04 2.000000e-01 2.719969e-04 3.000000e-01 3.545498e-04 4.000000e-01 4.015717e-04 5.000000e-01 4.213855e-04 6.000000e-01 4.308296e-04 7.000000e-01 4.371196e-04 8.000000e-01 4.421955e-04 9.000000e-01 4.466827e-04 1.000000e+00 4.508340e-04 1.100000e+00 4.547721e-04 1.200000e+00 4.585695e-04 1.000000e-01 1.635926e-04 2.000000e-01 2.930489e-04 3.000000e-01 3.899457e-04 4.000000e-01 4.536518e-04 5.000000e-01 4.853331e-04 6.000000e-01 4.993636e-04 7.000000e-01 5.075607e-04 8.000000e-01 5.136881e-04 9.000000e-01 5.188873e-04 1.000000e+00 5.235866e-04 1.100000e+00 5.279798e-04 1.200000e+00 5.321714e-04 1.000000e-01 9.473330e-10 2.000000e-01 1.038666e-09 3.000000e-01 1.123439e-09 4.000000e-01 1.214680e-09 5.000000e-01 1.318286e-09 6.000000e-01 1.442226e-09 7.000000e-01 1.599754e-09 8.000000e-01 1.813538e-09 9.000000e-01 2.122295e-09 1.000000e+00 2.591620e-09 1.100000e+00 3.331713e-09 1.200000e+00 4.526207e-09 1.000000e-01 2.786996e-08 2.000000e-01 3.045456e-08 3.000000e-01 3.278055e-08 4.000000e-01 3.517217e-08 5.000000e-01 3.768957e-08 6.000000e-01 4.036116e-08 7.000000e-01 4.321037e-08 8.000000e-01 4.626402e-08 9.000000e-01 4.955875e-08 1.000000e+00 5.314934e-08 1.100000e+00 5.712088e-08 1.200000e+00 6.160807e-08 1.000000e-01 6.077730e-07 2.000000e-01 6.584788e-07 3.000000e-01 7.023067e-07 4.000000e-01 7.464789e-07 5.000000e-01 7.922078e-07 6.000000e-01 8.399387e-07 7.000000e-01 8.899246e-07 8.000000e-01 9.423625e-07 9.000000e-01 9.974499e-07 1.000000e+00 1.055424e-06 1.100000e+00 1.116594e-06 1.200000e+00 1.181379e-06 1.000000e-01 7.328904e-06 2.000000e-01 7.886578e-06 3.000000e-01 8.314845e-06 4.000000e-01 8.729128e-06 5.000000e-01 9.147186e-06 6.000000e-01 9.574605e-06 7.000000e-01 1.001389e-05 8.000000e-01 1.046654e-05 9.000000e-01 1.093379e-05 1.000000e+00 1.141707e-05 1.100000e+00 1.191825e-05 1.200000e+00 1.243994e-05 1.000000e-01 4.221886e-05 2.000000e-01 4.584360e-05 3.000000e-01 4.776282e-05 4.000000e-01 4.941323e-05 5.000000e-01 5.098384e-05 6.000000e-01 5.252736e-05 7.000000e-01 5.406428e-05 8.000000e-01 5.560453e-05 9.000000e-01 5.715437e-05 1.000000e+00 5.871970e-05 1.100000e+00 6.030776e-05 1.200000e+00 6.192838e-05 1.000000e-01 1.074099e-04 2.000000e-01 1.224041e-04 3.000000e-01 1.269891e-04 4.000000e-01 1.301473e-04 5.000000e-01 1.328751e-04 6.000000e-01 1.354181e-04 7.000000e-01 1.378653e-04 8.000000e-01 1.402571e-04 9.000000e-01 1.426163e-04 1.000000e+00 1.449605e-04 1.100000e+00 1.473079e-04 1.200000e+00 1.496811e-04 1.000000e-01 1.685346e-04 2.000000e-01 2.099357e-04 3.000000e-01 2.192247e-04 4.000000e-01 2.241581e-04 5.000000e-01 2.279427e-04 6.000000e-01 2.312640e-04 7.000000e-01 2.343502e-04 8.000000e-01 2.372988e-04 9.000000e-01 2.401606e-04 1.000000e+00 2.429697e-04 1.100000e+00 2.457576e-04 1.200000e+00 2.485601e-04 1.000000e-01 2.137623e-04 2.000000e-01 2.936300e-04 3.000000e-01 3.116218e-04 4.000000e-01 3.190833e-04 5.000000e-01 3.241207e-04 6.000000e-01 3.282632e-04 7.000000e-01 3.319746e-04 8.000000e-01 3.354413e-04 9.000000e-01 3.387545e-04 1.000000e+00 3.419699e-04 1.100000e+00 3.451329e-04 1.200000e+00 3.482921e-04 1.000000e-01 2.465626e-04 2.000000e-01 3.679540e-04 3.000000e-01 4.011188e-04 4.000000e-01 4.123893e-04 5.000000e-01 4.190378e-04 6.000000e-01 4.241360e-04 7.000000e-01 4.285314e-04 8.000000e-01 4.325433e-04 9.000000e-01 4.363196e-04 1.000000e+00 4.399437e-04 1.100000e+00 4.434771e-04 1.200000e+00 4.469805e-04 1.000000e-01 2.702455e-04 2.000000e-01 4.292101e-04 3.000000e-01 4.856244e-04 4.000000e-01 5.028727e-04 5.000000e-01 5.117219e-04 6.000000e-01 5.180164e-04 7.000000e-01 5.232272e-04 8.000000e-01 5.278719e-04 9.000000e-01 5.321776e-04 1.000000e+00 5.362643e-04 1.100000e+00 5.402128e-04 1.200000e+00 5.440963e-04 1.000000e-01 2.850621e-04 2.000000e-01 4.737969e-04 3.000000e-01 5.606187e-04 4.000000e-01 5.876419e-04 5.000000e-01 5.996085e-04 6.000000e-01 6.073970e-04 7.000000e-01 6.135465e-04 8.000000e-01 6.188846e-04 9.000000e-01 6.237544e-04 1.000000e+00 6.283269e-04 1.100000e+00 6.327072e-04 1.200000e+00 6.369819e-04 1.000000e-01 2.954463e-04 2.000000e-01 5.067273e-04 3.000000e-01 6.257193e-04 4.000000e-01 6.680746e-04 5.000000e-01 6.846245e-04 6.000000e-01 6.943362e-04 7.000000e-01 7.015785e-04 8.000000e-01 7.076684e-04 9.000000e-01 7.131198e-04 1.000000e+00 7.181750e-04 1.100000e+00 7.229719e-04 1.200000e+00 7.276133e-04 1.000000e-01 4.297218e-08 2.000000e-01 4.645720e-08 3.000000e-01 4.887300e-08 4.000000e-01 5.123035e-08 5.000000e-01 5.363777e-08 6.000000e-01 5.613206e-08 7.000000e-01 5.873971e-08 8.000000e-01 6.149193e-08 9.000000e-01 6.443505e-08 1.000000e+00 6.764347e-08 1.100000e+00 7.123897e-08 1.200000e+00 7.542080e-08 1.000000e-01 2.364095e-07 2.000000e-01 2.555627e-07 3.000000e-01 2.684300e-07 4.000000e-01 2.808822e-07 5.000000e-01 2.935161e-07 6.000000e-01 3.065007e-07 7.000000e-01 3.199171e-07 8.000000e-01 3.338253e-07 9.000000e-01 3.482886e-07 1.000000e+00 3.633929e-07 1.100000e+00 3.792657e-07 1.200000e+00 3.961013e-07 1.000000e-01 1.175178e-06 2.000000e-01 1.277351e-06 3.000000e-01 1.339414e-06 4.000000e-01 1.398421e-06 5.000000e-01 1.457829e-06 6.000000e-01 1.518542e-06 7.000000e-01 1.580943e-06 8.000000e-01 1.645261e-06 9.000000e-01 1.711690e-06 1.000000e+00 1.780459e-06 1.100000e+00 1.851876e-06 1.200000e+00 1.926378e-06 1.000000e-01 4.938772e-06 2.000000e-01 5.537252e-06 3.000000e-01 5.797693e-06 4.000000e-01 6.030638e-06 5.000000e-01 6.260243e-06 6.000000e-01 6.491899e-06 7.000000e-01 6.727582e-06 8.000000e-01 6.968276e-06 9.000000e-01 7.214655e-06 1.000000e+00 7.467404e-06 1.100000e+00 7.727422e-06 1.200000e+00 7.995970e-06 1.000000e-01 1.439788e-05 2.000000e-01 1.796299e-05 3.000000e-01 1.888141e-05 4.000000e-01 1.954176e-05 5.000000e-01 2.015447e-05 6.000000e-01 2.075532e-05 7.000000e-01 2.135520e-05 8.000000e-01 2.195867e-05 9.000000e-01 2.256815e-05 1.000000e+00 2.318551e-05 1.100000e+00 2.381285e-05 1.200000e+00 2.445306e-05 1.000000e-01 2.724008e-05 2.000000e-01 3.952769e-05 3.000000e-01 4.293844e-05 4.000000e-01 4.442440e-05 5.000000e-01 4.559393e-05 6.000000e-01 4.667517e-05 7.000000e-01 4.772304e-05 8.000000e-01 4.875710e-05 9.000000e-01 4.978627e-05 1.000000e+00 5.081571e-05 1.100000e+00 5.184978e-05 1.200000e+00 5.289361e-05 1.000000e-01 3.907417e-05 2.000000e-01 6.268909e-05 3.000000e-01 7.305261e-05 4.000000e-01 7.660867e-05 5.000000e-01 7.859738e-05 6.000000e-01 8.021932e-05 7.000000e-01 8.171241e-05 8.000000e-01 8.314698e-05 9.000000e-01 8.455092e-05 1.000000e+00 8.593794e-05 1.100000e+00 8.731675e-05 1.200000e+00 8.869533e-05 1.000000e-01 4.850647e-05 2.000000e-01 8.217771e-05 3.000000e-01 1.020222e-04 4.000000e-01 1.106651e-04 5.000000e-01 1.142992e-04 6.000000e-01 1.166598e-04 7.000000e-01 1.186416e-04 8.000000e-01 1.204682e-04 9.000000e-01 1.222163e-04 1.000000e+00 1.239190e-04 1.100000e+00 1.255938e-04 1.200000e+00 1.272533e-04 1.000000e-01 5.578604e-05 2.000000e-01 9.762218e-05 3.000000e-01 1.262337e-04 4.000000e-01 1.425119e-04 5.000000e-01 1.497443e-04 6.000000e-01 1.534006e-04 7.000000e-01 1.560337e-04 8.000000e-01 1.583033e-04 9.000000e-01 1.604058e-04 1.000000e+00 1.624166e-04 1.100000e+00 1.643710e-04 1.200000e+00 1.662895e-04 1.000000e-01 6.142659e-05 2.000000e-01 1.098209e-04 3.000000e-01 1.457784e-04 4.000000e-01 1.698068e-04 5.000000e-01 1.829594e-04 6.000000e-01 1.891628e-04 7.000000e-01 1.928305e-04 8.000000e-01 1.956738e-04 9.000000e-01 1.981810e-04 1.000000e+00 2.005186e-04 1.100000e+00 2.027569e-04 1.200000e+00 2.049315e-04 1.000000e-01 6.584188e-05 2.000000e-01 1.195313e-04 3.000000e-01 1.615682e-04 4.000000e-01 1.923691e-04 5.000000e-01 2.123146e-04 6.000000e-01 2.229397e-04 7.000000e-01 2.284526e-04 8.000000e-01 2.321398e-04 9.000000e-01 2.351547e-04 1.000000e+00 2.378633e-04 1.100000e+00 2.404051e-04 1.200000e+00 2.428439e-04 1.000000e-01 6.932423e-05 2.000000e-01 1.273169e-04 3.000000e-01 1.743968e-04 4.000000e-01 2.109326e-04 5.000000e-01 2.371906e-04 6.000000e-01 2.535772e-04 7.000000e-01 2.623142e-04 8.000000e-01 2.673831e-04 9.000000e-01 2.711008e-04 1.000000e+00 2.742614e-04 1.100000e+00 2.771440e-04 1.200000e+00 2.798650e-04 tmpk8ny_4pz/tests/bsim4/nmos/reference/acFreq_geomod.standard0000644000175000017500000000712113546075722024530 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 1258.925 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 1584.893 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 1995.262 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 2511.886 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 3162.278 1.39210132757997e-14 1.01277210988125e-14 3.71918141354341e-15 3981.072 1.39210163059323e-14 1.0127724190444e-14 3.71918146339409e-15 5011.872 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 6309.573 1.39210167474267e-14 1.01277244648048e-14 3.71918311187393e-15 7943.282 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 10000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 12589.25 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 15848.93 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 19952.62 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 25118.86 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 31622.78 1.39210132757997e-14 1.01277210988125e-14 3.71918141354341e-15 39810.72 1.39210163059323e-14 1.0127724190444e-14 3.71918146339409e-15 50118.72 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 63095.73 1.39210167474267e-14 1.01277244648048e-14 3.71918311187393e-15 79432.82 1.39210168579019e-14 1.01277256219657e-14 3.71918252520243e-15 100000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 125892.5 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 158489.3 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 199526.2 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 251188.6 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 316227.8 1.39210132757997e-14 1.01277210988125e-14 3.71918141354341e-15 398107.2 1.39210163059323e-14 1.0127724190444e-14 3.71918146339409e-15 501187.2 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 630957.3 1.39210167474267e-14 1.01277244648048e-14 3.71918311187393e-15 794328.2 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 1000000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 1258925 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 1584893 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 1995262 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 2511886 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 3162278 1.39210132757997e-14 1.01277210988125e-14 3.71918141354341e-15 3981072 1.39210163059323e-14 1.0127724190444e-14 3.71918146339409e-15 5011872 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 6309573 1.39210167474267e-14 1.01277244648048e-14 3.71918311187393e-15 7943282 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 10000000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 12589250 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 15848930 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 19952620 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 25118860 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 31622780 1.39210132757997e-14 1.01277210988125e-14 3.71918141354341e-15 39810720 1.39210123081412e-14 1.0127724190444e-14 3.71918146339409e-15 50118720 1.39210147331426e-14 1.01277239885519e-14 3.71918272852533e-15 63095730 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 79432820 1.39210148542597e-14 1.01277236183236e-14 3.71918052156032e-15 100000000 1.39210139003943e-14 1.01277229444892e-14 3.71918045665434e-15 tmpk8ny_4pz/tests/bsim4/nmos/reference/acFreq_mobmod.standard0000644000175000017500000000712113546075722024533 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 1258.925 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 1584.893 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 1995.262 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 2511.886 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 3162.278 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 3981.072 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 5011.872 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 6309.573 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 7943.282 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 10000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 12589.25 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 15848.93 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 19952.62 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 25118.86 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 31622.78 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 39810.72 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 50118.72 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 63095.73 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 79432.82 1.39210168579019e-14 1.01277256219657e-14 3.71918252520243e-15 100000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 125892.5 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 158489.3 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 199526.2 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 251188.6 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 316227.8 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 398107.2 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 501187.2 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 630957.3 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 794328.2 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 1000000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 1258925 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 1584893 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 1995262 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 2511886 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 3162278 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 3981072 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 5011872 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 6309573 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 7943282 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 10000000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 12589250 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 15848930 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 19952620 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 25118860 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 31622780 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 39810720 1.39210123081412e-14 1.0127724190444e-14 3.71918106361498e-15 50118720 1.39210147331426e-14 1.01277239885519e-14 3.71918272852533e-15 63095730 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 79432820 1.39210148542597e-14 1.01277236183236e-14 3.71918052156032e-15 100000000 1.39210139003943e-14 1.01277229444892e-14 3.71918045665434e-15 tmpk8ny_4pz/tests/bsim4/nmos/reference/dcSweep_lw6.standard0000644000175000017500000002575213546075722024171 0ustar carstencarstenV(d) I(d) 1.000000e-01 3.387168e-09 2.000000e-01 3.486693e-09 3.000000e-01 3.538651e-09 4.000000e-01 3.590092e-09 5.000000e-01 3.652093e-09 6.000000e-01 3.737644e-09 7.000000e-01 3.868319e-09 8.000000e-01 4.081383e-09 9.000000e-01 4.440910e-09 1.000000e+00 5.055935e-09 1.100000e+00 6.110125e-09 1.200000e+00 7.910081e-09 1.000000e-01 4.016512e-08 2.000000e-01 4.133539e-08 3.000000e-01 4.190240e-08 4.000000e-01 4.239192e-08 5.000000e-01 4.286248e-08 6.000000e-01 4.333428e-08 7.000000e-01 4.382417e-08 8.000000e-01 4.435572e-08 9.000000e-01 4.496757e-08 1.000000e+00 4.572515e-08 1.100000e+00 4.673920e-08 1.200000e+00 4.819557e-08 1.000000e-01 3.996115e-07 2.000000e-01 4.116805e-07 3.000000e-01 4.171567e-07 4.000000e-01 4.217786e-07 5.000000e-01 4.261357e-07 6.000000e-01 4.303758e-07 7.000000e-01 4.345581e-07 8.000000e-01 4.387193e-07 9.000000e-01 4.428966e-07 1.000000e+00 4.471422e-07 1.100000e+00 4.515379e-07 1.200000e+00 4.562158e-07 1.000000e-01 3.076039e-06 2.000000e-01 3.201140e-06 3.000000e-01 3.242915e-06 4.000000e-01 3.275489e-06 5.000000e-01 3.305330e-06 6.000000e-01 3.333931e-06 7.000000e-01 3.361820e-06 8.000000e-01 3.389242e-06 9.000000e-01 3.416353e-06 1.000000e+00 3.443295e-06 1.100000e+00 3.470244e-06 1.200000e+00 3.497436e-06 1.000000e-01 1.473286e-05 2.000000e-01 1.632500e-05 3.000000e-01 1.659003e-05 4.000000e-01 1.674751e-05 5.000000e-01 1.687909e-05 6.000000e-01 1.700008e-05 7.000000e-01 1.711534e-05 8.000000e-01 1.722688e-05 9.000000e-01 1.733579e-05 1.000000e+00 1.744281e-05 1.100000e+00 1.754870e-05 1.200000e+00 1.765430e-05 1.000000e-01 3.626889e-05 2.000000e-01 4.716350e-05 3.000000e-01 4.880842e-05 4.000000e-01 4.937620e-05 5.000000e-01 4.976055e-05 6.000000e-01 5.008436e-05 7.000000e-01 5.037944e-05 8.000000e-01 5.065757e-05 9.000000e-01 5.092421e-05 1.000000e+00 5.118252e-05 1.100000e+00 5.143489e-05 1.200000e+00 5.168373e-05 1.000000e-01 5.865960e-05 2.000000e-01 8.797465e-05 3.000000e-01 9.613954e-05 4.000000e-01 9.805879e-05 5.000000e-01 9.898104e-05 6.000000e-01 9.965097e-05 7.000000e-01 1.002205e-04 8.000000e-01 1.007376e-04 9.000000e-01 1.012220e-04 1.000000e+00 1.016835e-04 1.100000e+00 1.021283e-04 1.200000e+00 1.025616e-04 1.000000e-01 7.818133e-05 2.000000e-01 1.270489e-04 3.000000e-01 1.493737e-04 4.000000e-01 1.556867e-04 5.000000e-01 1.578333e-04 6.000000e-01 1.590869e-04 7.000000e-01 1.600493e-04 8.000000e-01 1.608792e-04 9.000000e-01 1.616342e-04 1.000000e+00 1.623403e-04 1.100000e+00 1.630114e-04 1.200000e+00 1.636573e-04 1.000000e-01 9.461684e-05 2.000000e-01 1.609310e-04 3.000000e-01 2.002623e-04 4.000000e-01 2.166113e-04 5.000000e-01 2.217742e-04 6.000000e-01 2.240989e-04 7.000000e-01 2.256433e-04 8.000000e-01 2.268829e-04 9.000000e-01 2.279682e-04 1.000000e+00 2.289605e-04 1.100000e+00 2.298896e-04 1.200000e+00 2.307730e-04 1.000000e-01 1.084097e-04 2.000000e-01 1.897978e-04 3.000000e-01 2.451268e-04 4.000000e-01 2.756792e-04 5.000000e-01 2.875757e-04 6.000000e-01 2.920656e-04 7.000000e-01 2.945409e-04 8.000000e-01 2.963390e-04 9.000000e-01 2.978339e-04 1.000000e+00 2.991616e-04 1.100000e+00 3.003827e-04 1.200000e+00 3.015290e-04 1.000000e-01 1.200114e-04 2.000000e-01 2.143478e-04 3.000000e-01 2.838134e-04 4.000000e-01 3.290653e-04 5.000000e-01 3.520053e-04 6.000000e-01 3.609541e-04 7.000000e-01 3.650586e-04 8.000000e-01 3.676691e-04 9.000000e-01 3.696906e-04 1.000000e+00 3.714184e-04 1.100000e+00 3.729722e-04 1.200000e+00 3.744099e-04 1.000000e-01 1.297937e-04 2.000000e-01 2.352487e-04 3.000000e-01 3.170449e-04 4.000000e-01 3.757248e-04 5.000000e-01 4.117686e-04 6.000000e-01 4.286767e-04 7.000000e-01 4.358113e-04 8.000000e-01 4.396989e-04 9.000000e-01 4.424349e-04 1.000000e+00 4.446552e-04 1.100000e+00 4.465947e-04 1.200000e+00 4.483576e-04 1.000000e-01 5.110981e-10 2.000000e-01 5.265241e-10 3.000000e-01 5.385486e-10 4.000000e-01 5.557668e-10 5.000000e-01 5.853113e-10 6.000000e-01 6.392053e-10 7.000000e-01 7.386715e-10 8.000000e-01 9.208084e-10 9.000000e-01 1.249581e-09 1.000000e+00 1.833918e-09 1.100000e+00 2.857360e-09 1.200000e+00 4.626343e-09 1.000000e-01 1.506588e-08 2.000000e-01 1.549451e-08 3.000000e-01 1.574080e-08 4.000000e-01 1.596041e-08 5.000000e-01 1.617645e-08 6.000000e-01 1.640079e-08 7.000000e-01 1.664736e-08 8.000000e-01 1.693836e-08 9.000000e-01 1.731152e-08 1.000000e+00 1.783143e-08 1.100000e+00 1.860775e-08 1.200000e+00 1.982496e-08 1.000000e-01 3.333665e-07 2.000000e-01 3.427399e-07 3.000000e-01 3.479381e-07 4.000000e-01 3.524597e-07 5.000000e-01 3.567559e-07 6.000000e-01 3.609530e-07 7.000000e-01 3.651050e-07 8.000000e-01 3.692472e-07 9.000000e-01 3.734161e-07 1.000000e+00 3.776631e-07 1.100000e+00 3.820685e-07 1.200000e+00 3.867624e-07 1.000000e-01 4.409916e-06 2.000000e-01 4.549003e-06 3.000000e-01 4.613720e-06 4.000000e-01 4.666788e-06 5.000000e-01 4.715892e-06 6.000000e-01 4.763107e-06 7.000000e-01 4.809231e-06 8.000000e-01 4.854657e-06 9.000000e-01 4.899635e-06 1.000000e+00 4.944394e-06 1.100000e+00 4.989193e-06 1.200000e+00 5.034373e-06 1.000000e-01 3.276923e-05 2.000000e-01 3.473857e-05 3.000000e-01 3.528737e-05 4.000000e-01 3.565285e-05 5.000000e-01 3.596077e-05 6.000000e-01 3.624233e-05 7.000000e-01 3.650893e-05 8.000000e-01 3.676583e-05 9.000000e-01 3.701597e-05 1.000000e+00 3.726147e-05 1.100000e+00 3.750428e-05 1.200000e+00 3.774659e-05 1.000000e-01 1.060174e-04 2.000000e-01 1.229820e-04 3.000000e-01 1.260125e-04 4.000000e-01 1.274768e-04 5.000000e-01 1.285260e-04 6.000000e-01 1.294035e-04 7.000000e-01 1.301904e-04 8.000000e-01 1.309216e-04 9.000000e-01 1.316148e-04 1.000000e+00 1.322812e-04 1.100000e+00 1.329294e-04 1.200000e+00 1.335678e-04 1.000000e-01 1.928595e-04 2.000000e-01 2.520158e-04 3.000000e-01 2.628258e-04 4.000000e-01 2.667859e-04 5.000000e-01 2.692050e-04 6.000000e-01 2.710510e-04 7.000000e-01 2.726158e-04 8.000000e-01 2.740166e-04 9.000000e-01 2.753102e-04 1.000000e+00 2.765289e-04 1.100000e+00 2.776950e-04 1.200000e+00 2.788278e-04 1.000000e-01 2.726163e-04 2.000000e-01 3.919856e-04 3.000000e-01 4.197299e-04 4.000000e-01 4.281748e-04 5.000000e-01 4.326754e-04 6.000000e-01 4.358440e-04 7.000000e-01 4.384002e-04 8.000000e-01 4.406158e-04 9.000000e-01 4.426162e-04 1.000000e+00 4.444691e-04 1.100000e+00 4.462181e-04 1.200000e+00 4.478973e-04 1.000000e-01 3.431522e-04 2.000000e-01 5.272810e-04 3.000000e-01 5.829881e-04 4.000000e-01 5.985278e-04 5.000000e-01 6.059000e-04 6.000000e-01 6.107348e-04 7.000000e-01 6.144688e-04 8.000000e-01 6.176156e-04 9.000000e-01 6.204026e-04 1.000000e+00 6.229481e-04 1.100000e+00 6.253240e-04 1.200000e+00 6.275831e-04 1.000000e-01 4.015139e-04 2.000000e-01 6.467036e-04 3.000000e-01 7.406066e-04 4.000000e-01 7.666908e-04 5.000000e-01 7.778476e-04 6.000000e-01 7.846971e-04 7.000000e-01 7.897812e-04 8.000000e-01 7.939607e-04 9.000000e-01 7.976023e-04 1.000000e+00 8.008901e-04 1.100000e+00 8.039314e-04 1.200000e+00 8.068008e-04 1.000000e-01 4.358717e-04 2.000000e-01 7.295452e-04 3.000000e-01 8.713007e-04 4.000000e-01 9.141999e-04 5.000000e-01 9.305872e-04 6.000000e-01 9.398592e-04 7.000000e-01 9.464209e-04 8.000000e-01 9.516633e-04 9.000000e-01 9.561495e-04 1.000000e+00 9.601509e-04 1.100000e+00 9.638187e-04 1.200000e+00 9.672524e-04 1.000000e-01 4.589476e-04 2.000000e-01 7.901983e-04 3.000000e-01 9.817880e-04 4.000000e-01 1.050485e-03 5.000000e-01 1.074582e-03 6.000000e-01 1.086995e-03 7.000000e-01 1.095297e-03 8.000000e-01 1.101712e-03 9.000000e-01 1.107090e-03 1.000000e+00 1.111823e-03 1.100000e+00 1.116119e-03 1.200000e+00 1.120108e-03 1.000000e-01 2.098994e-08 2.000000e-01 2.175432e-08 3.000000e-01 2.202791e-08 4.000000e-01 2.225555e-08 5.000000e-01 2.248073e-08 6.000000e-01 2.272358e-08 7.000000e-01 2.300811e-08 8.000000e-01 2.337271e-08 9.000000e-01 2.388211e-08 1.000000e+00 2.464597e-08 1.100000e+00 2.584870e-08 1.200000e+00 2.779783e-08 1.000000e-01 1.157640e-07 2.000000e-01 1.201233e-07 3.000000e-01 1.216045e-07 4.000000e-01 1.227906e-07 5.000000e-01 1.238972e-07 6.000000e-01 1.249778e-07 7.000000e-01 1.260604e-07 8.000000e-01 1.271734e-07 9.000000e-01 1.283585e-07 1.000000e+00 1.296836e-07 1.100000e+00 1.312627e-07 1.200000e+00 1.332854e-07 1.000000e-01 5.808668e-07 2.000000e-01 6.067459e-07 3.000000e-01 6.142572e-07 4.000000e-01 6.200324e-07 5.000000e-01 6.253292e-07 6.000000e-01 6.304186e-07 7.000000e-01 6.353965e-07 8.000000e-01 6.403149e-07 9.000000e-01 6.452189e-07 1.000000e+00 6.501663e-07 1.100000e+00 6.552452e-07 1.200000e+00 6.605956e-07 1.000000e-01 2.505218e-06 2.000000e-01 2.704454e-06 3.000000e-01 2.741355e-06 4.000000e-01 2.766049e-06 5.000000e-01 2.787807e-06 6.000000e-01 2.808350e-06 7.000000e-01 2.828219e-06 8.000000e-01 2.847646e-06 9.000000e-01 2.866765e-06 1.000000e+00 2.885695e-06 1.100000e+00 2.904576e-06 1.200000e+00 2.923604e-06 1.000000e-01 7.590415e-06 2.000000e-01 9.217881e-06 3.000000e-01 9.421109e-06 4.000000e-01 9.510444e-06 5.000000e-01 9.580216e-06 6.000000e-01 9.643256e-06 7.000000e-01 9.702930e-06 8.000000e-01 9.760497e-06 9.000000e-01 9.816568e-06 1.000000e+00 9.871538e-06 1.100000e+00 9.925780e-06 1.200000e+00 9.979733e-06 1.000000e-01 1.485147e-05 2.000000e-01 2.134906e-05 3.000000e-01 2.271908e-05 4.000000e-01 2.303502e-05 5.000000e-01 2.321448e-05 6.000000e-01 2.336016e-05 7.000000e-01 2.349207e-05 8.000000e-01 2.361641e-05 9.000000e-01 2.373574e-05 1.000000e+00 2.385140e-05 1.100000e+00 2.396434e-05 1.200000e+00 2.407548e-05 1.000000e-01 2.184939e-05 2.000000e-01 3.501407e-05 3.000000e-01 4.047284e-05 4.000000e-01 4.180234e-05 5.000000e-01 4.225087e-05 6.000000e-01 4.253808e-05 7.000000e-01 4.277591e-05 8.000000e-01 4.299133e-05 9.000000e-01 4.319367e-05 1.000000e+00 4.338707e-05 1.100000e+00 4.357382e-05 1.200000e+00 4.375565e-05 1.000000e-01 2.762985e-05 2.000000e-01 4.688675e-05 3.000000e-01 5.810748e-05 4.000000e-01 6.260093e-05 5.000000e-01 6.389643e-05 6.000000e-01 6.446073e-05 7.000000e-01 6.485364e-05 8.000000e-01 6.518527e-05 9.000000e-01 6.548659e-05 1.000000e+00 6.576934e-05 1.100000e+00 6.603902e-05 1.200000e+00 6.629891e-05 1.000000e-01 3.220987e-05 2.000000e-01 5.651696e-05 3.000000e-01 7.310798e-05 4.000000e-01 8.239668e-05 5.000000e-01 8.604102e-05 6.000000e-01 8.729045e-05 7.000000e-01 8.794688e-05 8.000000e-01 8.843509e-05 9.000000e-01 8.885508e-05 1.000000e+00 8.923871e-05 1.100000e+00 8.959903e-05 1.200000e+00 8.994256e-05 1.000000e-01 3.582404e-05 2.000000e-01 6.424603e-05 3.000000e-01 8.538893e-05 4.000000e-01 9.944898e-05 5.000000e-01 1.069756e-04 6.000000e-01 1.099391e-04 7.000000e-01 1.111459e-04 8.000000e-01 1.118760e-04 9.000000e-01 1.124480e-04 1.000000e+00 1.129488e-04 1.100000e+00 1.134091e-04 1.200000e+00 1.138423e-04 1.000000e-01 3.868466e-05 2.000000e-01 7.046093e-05 3.000000e-01 9.540292e-05 4.000000e-01 1.136414e-04 5.000000e-01 1.253955e-04 6.000000e-01 1.314169e-04 7.000000e-01 1.338747e-04 8.000000e-01 1.350508e-04 9.000000e-01 1.358419e-04 1.000000e+00 1.364876e-04 1.100000e+00 1.370616e-04 1.200000e+00 1.375923e-04 1.000000e-01 4.094852e-05 2.000000e-01 7.546698e-05 3.000000e-01 1.035758e-04 4.000000e-01 1.253764e-04 5.000000e-01 1.409943e-04 6.000000e-01 1.507054e-04 7.000000e-01 1.555103e-04 8.000000e-01 1.576108e-04 9.000000e-01 1.587687e-04 1.000000e+00 1.596120e-04 1.100000e+00 1.603227e-04 1.200000e+00 1.609627e-04 tmpk8ny_4pz/tests/bsim4/nmos/reference/dcSweep_nrd.standard0000644000175000017500000002575213546075722024244 0ustar carstencarstenV(d) I(d) 1.000000e-01 5.380875e-07 2.000000e-01 8.978955e-07 3.000000e-01 1.458421e-06 4.000000e-01 2.345660e-06 5.000000e-01 3.743329e-06 6.000000e-01 5.927241e-06 7.000000e-01 9.306128e-06 8.000000e-01 1.447490e-05 9.000000e-01 2.228221e-05 1.000000e+00 3.391265e-05 1.100000e+00 5.098101e-05 1.200000e+00 7.563179e-05 1.000000e-01 6.173361e-06 2.000000e-01 9.991457e-06 3.000000e-01 1.565494e-05 4.000000e-01 2.415217e-05 5.000000e-01 3.675368e-05 6.000000e-01 5.515202e-05 7.000000e-01 8.153454e-05 8.000000e-01 1.186059e-04 9.000000e-01 1.695279e-04 1.000000e+00 2.377478e-04 1.100000e+00 3.267189e-04 1.200000e+00 4.395727e-04 1.000000e-01 5.588748e-05 2.000000e-01 8.535991e-05 3.000000e-01 1.250946e-04 4.000000e-01 1.791609e-04 5.000000e-01 2.511031e-04 6.000000e-01 3.441760e-04 7.000000e-01 4.609778e-04 8.000000e-01 6.030987e-04 9.000000e-01 7.709481e-04 1.000000e+00 9.638486e-04 1.100000e+00 1.180345e-03 1.200000e+00 1.418649e-03 1.000000e-01 3.317756e-04 2.000000e-01 4.665572e-04 3.000000e-01 6.157450e-04 4.000000e-01 7.883764e-04 5.000000e-01 9.846270e-04 6.000000e-01 1.202900e-03 7.000000e-01 1.440815e-03 8.000000e-01 1.695694e-03 9.000000e-01 1.964891e-03 1.000000e+00 2.246077e-03 1.100000e+00 2.537461e-03 1.200000e+00 2.837975e-03 1.000000e-01 1.024423e-03 2.000000e-01 1.386550e-03 3.000000e-01 1.664458e-03 4.000000e-01 1.941587e-03 5.000000e-01 2.225660e-03 6.000000e-01 2.517060e-03 7.000000e-01 2.814887e-03 8.000000e-01 3.118049e-03 9.000000e-01 3.425587e-03 1.000000e+00 3.736828e-03 1.100000e+00 4.051531e-03 1.200000e+00 4.370040e-03 1.000000e-01 1.738184e-03 2.000000e-01 2.567525e-03 3.000000e-01 2.979124e-03 4.000000e-01 3.319113e-03 5.000000e-01 3.644153e-03 6.000000e-01 3.965137e-03 7.000000e-01 4.285181e-03 8.000000e-01 4.605360e-03 9.000000e-01 4.926091e-03 1.000000e+00 5.247639e-03 1.100000e+00 5.570417e-03 1.200000e+00 5.895248e-03 1.000000e-01 2.194322e-03 2.000000e-01 3.602922e-03 3.000000e-01 4.289546e-03 4.000000e-01 4.709042e-03 5.000000e-01 5.069260e-03 6.000000e-01 5.411071e-03 7.000000e-01 5.745484e-03 8.000000e-01 6.076481e-03 9.000000e-01 6.405821e-03 1.000000e+00 6.734450e-03 1.100000e+00 7.063124e-03 1.200000e+00 7.392812e-03 1.000000e-01 2.473712e-03 2.000000e-01 4.323525e-03 3.000000e-01 5.451934e-03 4.000000e-01 6.038055e-03 5.000000e-01 6.454820e-03 6.000000e-01 6.823879e-03 7.000000e-01 7.175027e-03 8.000000e-01 7.517945e-03 9.000000e-01 7.856596e-03 1.000000e+00 8.192911e-03 1.100000e+00 8.528077e-03 1.200000e+00 8.863205e-03 1.000000e-01 2.656560e-03 2.000000e-01 4.804414e-03 3.000000e-01 6.362760e-03 4.000000e-01 7.258324e-03 5.000000e-01 7.783813e-03 6.000000e-01 8.196621e-03 7.000000e-01 8.571197e-03 8.000000e-01 8.929397e-03 9.000000e-01 9.279352e-03 1.000000e+00 9.624712e-03 1.100000e+00 9.967423e-03 1.200000e+00 1.030888e-02 1.000000e-01 2.784036e-03 2.000000e-01 5.140062e-03 3.000000e-01 7.019712e-03 4.000000e-01 8.303579e-03 5.000000e-01 9.033631e-03 6.000000e-01 9.522398e-03 7.000000e-01 9.932167e-03 8.000000e-01 1.031095e-02 9.000000e-01 1.067503e-02 1.000000e+00 1.103117e-02 1.100000e+00 1.138263e-02 1.200000e+00 1.173136e-02 1.000000e-01 2.877248e-03 2.000000e-01 5.385535e-03 3.000000e-01 7.495553e-03 4.000000e-01 9.123763e-03 5.000000e-01 1.016319e-02 6.000000e-01 1.078745e-02 7.000000e-01 1.125328e-02 8.000000e-01 1.166111e-02 9.000000e-01 1.204343e-02 1.000000e+00 1.241263e-02 1.100000e+00 1.277429e-02 1.200000e+00 1.313136e-02 1.000000e-01 2.947857e-03 2.000000e-01 5.571708e-03 3.000000e-01 7.852511e-03 4.000000e-01 9.740056e-03 5.000000e-01 1.111904e-02 6.000000e-01 1.196624e-02 7.000000e-01 1.252533e-02 8.000000e-01 1.297636e-02 9.000000e-01 1.338318e-02 1.000000e+00 1.376867e-02 1.100000e+00 1.414242e-02 1.200000e+00 1.450910e-02 1.000000e-01 7.320992e-08 2.000000e-01 1.375752e-07 3.000000e-01 2.536833e-07 4.000000e-01 4.640185e-07 5.000000e-01 8.424416e-07 6.000000e-01 1.516305e-06 7.000000e-01 2.700370e-06 8.000000e-01 4.746771e-06 9.000000e-01 8.214087e-06 1.000000e+00 1.395601e-05 1.100000e+00 2.322681e-05 1.200000e+00 3.779884e-05 1.000000e-01 2.075575e-06 2.000000e-01 3.740280e-06 3.000000e-01 6.540236e-06 4.000000e-01 1.120018e-05 5.000000e-01 1.877296e-05 6.000000e-01 3.074411e-05 7.000000e-01 4.911654e-05 8.000000e-01 7.646691e-05 9.000000e-01 1.159545e-04 1.000000e+00 1.712506e-04 1.100000e+00 2.463507e-04 1.200000e+00 3.452503e-04 1.000000e-01 3.954727e-05 2.000000e-01 6.348925e-05 3.000000e-01 9.767210e-05 4.000000e-01 1.457811e-04 5.000000e-01 2.115505e-04 6.000000e-01 2.986577e-04 7.000000e-01 4.102715e-04 8.000000e-01 5.485458e-04 9.000000e-01 7.142624e-04 1.000000e+00 9.068051e-04 1.100000e+00 1.124473e-03 1.200000e+00 1.365043e-03 1.000000e-01 3.427185e-04 2.000000e-01 4.767016e-04 3.000000e-01 6.309354e-04 4.000000e-01 8.101518e-04 5.000000e-01 1.013669e-03 6.000000e-01 1.239217e-03 7.000000e-01 1.483799e-03 8.000000e-01 1.744243e-03 9.000000e-01 2.017605e-03 1.000000e+00 2.301475e-03 1.100000e+00 2.594189e-03 1.200000e+00 2.894971e-03 1.000000e-01 1.219889e-03 2.000000e-01 1.548963e-03 3.000000e-01 1.830137e-03 4.000000e-01 2.111971e-03 5.000000e-01 2.399107e-03 6.000000e-01 2.691576e-03 7.000000e-01 2.988616e-03 8.000000e-01 3.289430e-03 9.000000e-01 3.593418e-03 1.000000e+00 3.900304e-03 1.100000e+00 4.210279e-03 1.200000e+00 4.524133e-03 1.000000e-01 2.196479e-03 2.000000e-01 2.919382e-03 3.000000e-01 3.294841e-03 4.000000e-01 3.623331e-03 5.000000e-01 3.940310e-03 6.000000e-01 4.253705e-03 7.000000e-01 4.566108e-03 8.000000e-01 4.878563e-03 9.000000e-01 5.191599e-03 1.000000e+00 5.505663e-03 1.100000e+00 5.821419e-03 1.200000e+00 6.139998e-03 1.000000e-01 2.764937e-03 2.000000e-01 4.190351e-03 3.000000e-01 4.750559e-03 4.000000e-01 5.132056e-03 5.000000e-01 5.474134e-03 6.000000e-01 5.802868e-03 7.000000e-01 6.126140e-03 8.000000e-01 6.447035e-03 9.000000e-01 6.767010e-03 1.000000e+00 7.086954e-03 1.100000e+00 7.407719e-03 1.200000e+00 7.730499e-03 1.000000e-01 3.061769e-03 2.000000e-01 5.134067e-03 3.000000e-01 6.104264e-03 4.000000e-01 6.591181e-03 5.000000e-01 6.972431e-03 6.000000e-01 7.321626e-03 7.000000e-01 7.658161e-03 8.000000e-01 7.988881e-03 9.000000e-01 8.316761e-03 1.000000e+00 8.643354e-03 1.100000e+00 8.969773e-03 1.200000e+00 9.297260e-03 1.000000e-01 3.236713e-03 2.000000e-01 5.731819e-03 3.000000e-01 7.262796e-03 4.000000e-01 7.975924e-03 5.000000e-01 8.427283e-03 6.000000e-01 8.807506e-03 7.000000e-01 9.161923e-03 8.000000e-01 9.504907e-03 9.000000e-01 9.842176e-03 1.000000e+00 1.017644e-02 1.100000e+00 1.050931e-02 1.200000e+00 1.084215e-02 1.000000e-01 3.350023e-03 2.000000e-01 6.113374e-03 3.000000e-01 8.135135e-03 4.000000e-01 9.242220e-03 5.000000e-01 9.826531e-03 6.000000e-01 1.025689e-02 7.000000e-01 1.063660e-02 8.000000e-01 1.099536e-02 9.000000e-01 1.134395e-02 1.000000e+00 1.168711e-02 1.100000e+00 1.202730e-02 1.200000e+00 1.236619e-02 1.000000e-01 3.420661e-03 2.000000e-01 6.359339e-03 3.000000e-01 8.725159e-03 4.000000e-01 1.030768e-02 5.000000e-01 1.114086e-02 6.000000e-01 1.165925e-02 7.000000e-01 1.207822e-02 8.000000e-01 1.245900e-02 9.000000e-01 1.282189e-02 1.000000e+00 1.317551e-02 1.100000e+00 1.352406e-02 1.200000e+00 1.386983e-02 1.000000e-01 3.469479e-03 2.000000e-01 6.529737e-03 3.000000e-01 9.125911e-03 4.000000e-01 1.111396e-02 5.000000e-01 1.232032e-02 6.000000e-01 1.299356e-02 7.000000e-01 1.347425e-02 8.000000e-01 1.388643e-02 9.000000e-01 1.426918e-02 1.000000e+00 1.463717e-02 1.100000e+00 1.499688e-02 1.200000e+00 1.535167e-02 1.000000e-01 3.085739e-06 2.000000e-01 4.620314e-06 3.000000e-01 6.670732e-06 4.000000e-01 9.542510e-06 5.000000e-01 1.356879e-05 6.000000e-01 1.919118e-05 7.000000e-01 2.699872e-05 8.000000e-01 3.776978e-05 9.000000e-01 5.251975e-05 1.000000e+00 7.255372e-05 1.100000e+00 9.952082e-05 1.200000e+00 1.354643e-04 1.000000e-01 1.656499e-05 2.000000e-01 2.437836e-05 3.000000e-01 3.446376e-05 4.000000e-01 4.816139e-05 5.000000e-01 6.673436e-05 6.000000e-01 9.171534e-05 7.000000e-01 1.249538e-04 8.000000e-01 1.686086e-04 9.000000e-01 2.250941e-04 1.000000e+00 2.969792e-04 1.100000e+00 3.868540e-04 1.200000e+00 4.971908e-04 1.000000e-01 7.797402e-05 2.000000e-01 1.124442e-04 3.000000e-01 1.537586e-04 4.000000e-01 2.066576e-04 5.000000e-01 2.738541e-04 6.000000e-01 3.578121e-04 7.000000e-01 4.607085e-04 8.000000e-01 5.842736e-04 9.000000e-01 7.296583e-04 1.000000e+00 8.973907e-04 1.100000e+00 1.087451e-03 1.200000e+00 1.299448e-03 1.000000e-01 2.888343e-04 2.000000e-01 4.111468e-04 3.000000e-01 5.312287e-04 4.000000e-01 6.689862e-04 5.000000e-01 8.270206e-04 6.000000e-01 1.005767e-03 7.000000e-01 1.204758e-03 8.000000e-01 1.422951e-03 9.000000e-01 1.658938e-03 1.000000e+00 1.911152e-03 1.100000e+00 2.178099e-03 1.200000e+00 2.458581e-03 1.000000e-01 6.951611e-04 2.000000e-01 1.040200e-03 3.000000e-01 1.274877e-03 4.000000e-01 1.506393e-03 5.000000e-01 1.748711e-03 6.000000e-01 2.003481e-03 7.000000e-01 2.270173e-03 8.000000e-01 2.547693e-03 9.000000e-01 2.834823e-03 1.000000e+00 3.130426e-03 1.100000e+00 3.433617e-03 1.200000e+00 3.743935e-03 1.000000e-01 1.111404e-03 2.000000e-01 1.826566e-03 3.000000e-01 2.237844e-03 4.000000e-01 2.552126e-03 5.000000e-01 2.850762e-03 6.000000e-01 3.149336e-03 7.000000e-01 3.451445e-03 8.000000e-01 3.757921e-03 9.000000e-01 4.068769e-03 1.000000e+00 4.383752e-03 1.100000e+00 4.702676e-03 1.200000e+00 5.025622e-03 1.000000e-01 1.419423e-03 2.000000e-01 2.481508e-03 3.000000e-01 3.182462e-03 4.000000e-01 3.621693e-03 5.000000e-01 3.974354e-03 6.000000e-01 4.305167e-03 7.000000e-01 4.630173e-03 8.000000e-01 4.954289e-03 9.000000e-01 5.279319e-03 1.000000e+00 5.605986e-03 1.100000e+00 5.934646e-03 1.200000e+00 6.265679e-03 1.000000e-01 1.630621e-03 2.000000e-01 2.948451e-03 3.000000e-01 3.943216e-03 4.000000e-01 4.602814e-03 5.000000e-01 5.047088e-03 6.000000e-01 5.418761e-03 7.000000e-01 5.767757e-03 8.000000e-01 6.108691e-03 9.000000e-01 6.446771e-03 1.000000e+00 6.784188e-03 1.100000e+00 7.122006e-03 1.200000e+00 7.460918e-03 1.000000e-01 1.777694e-03 2.000000e-01 3.280620e-03 3.000000e-01 4.503371e-03 4.000000e-01 5.419234e-03 5.000000e-01 6.030223e-03 6.000000e-01 6.472322e-03 7.000000e-01 6.855535e-03 8.000000e-01 7.217506e-03 9.000000e-01 7.570743e-03 1.000000e+00 7.920198e-03 1.100000e+00 8.268142e-03 1.200000e+00 8.615807e-03 1.000000e-01 1.883649e-03 2.000000e-01 3.523871e-03 3.000000e-01 4.917940e-03 4.000000e-01 6.049642e-03 5.000000e-01 6.882300e-03 6.000000e-01 7.450190e-03 7.000000e-01 7.889418e-03 8.000000e-01 8.281127e-03 9.000000e-01 8.653654e-03 1.000000e+00 9.017445e-03 1.100000e+00 9.376995e-03 1.200000e+00 9.734522e-03 1.000000e-01 1.962289e-03 2.000000e-01 3.707003e-03 3.000000e-01 5.232587e-03 4.000000e-01 6.530381e-03 5.000000e-01 7.572396e-03 6.000000e-01 8.325223e-03 7.000000e-01 8.860091e-03 8.000000e-01 9.297494e-03 9.000000e-01 9.696216e-03 1.000000e+00 1.007781e-02 1.100000e+00 1.045094e-02 1.200000e+00 1.081962e-02 1.000000e-01 2.021922e-03 2.000000e-01 3.847792e-03 3.000000e-01 5.476542e-03 4.000000e-01 6.903376e-03 5.000000e-01 8.112314e-03 6.000000e-01 9.064805e-03 7.000000e-01 9.748193e-03 8.000000e-01 1.025959e-02 9.000000e-01 1.069637e-02 1.000000e+00 1.110123e-02 1.100000e+00 1.149080e-02 1.200000e+00 1.187230e-02 tmpk8ny_4pz/tests/bsim4/nmos/reference/dcSweep_nrs.standard0000644000175000017500000002575213546075722024263 0ustar carstencarstenV(d) I(d) 1.000000e-01 5.379965e-07 2.000000e-01 8.976445e-07 3.000000e-01 1.457767e-06 4.000000e-01 2.343991e-06 5.000000e-01 3.739145e-06 6.000000e-01 5.916948e-06 7.000000e-01 9.281309e-06 8.000000e-01 1.441639e-05 9.000000e-01 2.214765e-05 1.000000e+00 3.361163e-05 1.100000e+00 5.032776e-05 1.200000e+00 7.426033e-05 1.000000e-01 6.162301e-06 2.000000e-01 9.963138e-06 3.000000e-01 1.558724e-05 4.000000e-01 2.399592e-05 5.000000e-01 3.640452e-05 6.000000e-01 5.439750e-05 7.000000e-01 7.996238e-05 8.000000e-01 1.154592e-04 9.000000e-01 1.635023e-04 1.000000e+00 2.267502e-04 1.100000e+00 3.076401e-04 1.200000e+00 4.081501e-04 1.000000e-01 5.512512e-05 2.000000e-01 8.366124e-05 3.000000e-01 1.216461e-04 4.000000e-01 1.725410e-04 5.000000e-01 2.390606e-04 6.000000e-01 3.234418e-04 7.000000e-01 4.272062e-04 8.000000e-01 5.510006e-04 9.000000e-01 6.946121e-04 1.000000e+00 8.571526e-04 1.100000e+00 1.037349e-03 1.200000e+00 1.233866e-03 1.000000e-01 3.133128e-04 2.000000e-01 4.329380e-04 3.000000e-01 5.629606e-04 4.000000e-01 7.108426e-04 5.000000e-01 8.765283e-04 6.000000e-01 1.058699e-03 7.000000e-01 1.255591e-03 8.000000e-01 1.465323e-03 9.000000e-01 1.686091e-03 1.000000e+00 1.916338e-03 1.100000e+00 2.154888e-03 1.200000e+00 2.401077e-03 1.000000e-01 9.329030e-04 2.000000e-01 1.221460e-03 3.000000e-01 1.448797e-03 4.000000e-01 1.676354e-03 5.000000e-01 1.909703e-03 6.000000e-01 2.149187e-03 7.000000e-01 2.394182e-03 8.000000e-01 2.643899e-03 9.000000e-01 2.897622e-03 1.000000e+00 3.154837e-03 1.100000e+00 3.415363e-03 1.200000e+00 3.679468e-03 1.000000e-01 1.616213e-03 2.000000e-01 2.242151e-03 3.000000e-01 2.558467e-03 4.000000e-01 2.833233e-03 5.000000e-01 3.099808e-03 6.000000e-01 3.364737e-03 7.000000e-01 3.629820e-03 8.000000e-01 3.895622e-03 9.000000e-01 4.162324e-03 1.000000e+00 4.430061e-03 1.100000e+00 4.699143e-03 1.200000e+00 4.970248e-03 1.000000e-01 2.095921e-03 2.000000e-01 3.225520e-03 3.000000e-01 3.703076e-03 4.000000e-01 4.025923e-03 5.000000e-01 4.316776e-03 6.000000e-01 4.597595e-03 7.000000e-01 4.874390e-03 8.000000e-01 5.149385e-03 9.000000e-01 5.423583e-03 1.000000e+00 5.697566e-03 1.100000e+00 5.971899e-03 1.200000e+00 6.247414e-03 1.000000e-01 2.400964e-03 2.000000e-01 3.999944e-03 3.000000e-01 4.787716e-03 4.000000e-01 5.195721e-03 5.000000e-01 5.517885e-03 6.000000e-01 5.815578e-03 7.000000e-01 6.103645e-03 8.000000e-01 6.387138e-03 9.000000e-01 6.668216e-03 1.000000e+00 6.948001e-03 1.100000e+00 7.227302e-03 1.200000e+00 7.507043e-03 1.000000e-01 2.602137e-03 2.000000e-01 4.549317e-03 3.000000e-01 5.738248e-03 4.000000e-01 6.315430e-03 5.000000e-01 6.689771e-03 6.000000e-01 7.010777e-03 7.000000e-01 7.312716e-03 8.000000e-01 7.606000e-03 9.000000e-01 7.894736e-03 1.000000e+00 8.180882e-03 1.100000e+00 8.465610e-03 1.200000e+00 8.749967e-03 1.000000e-01 2.742160e-03 2.000000e-01 4.939163e-03 3.000000e-01 6.497892e-03 4.000000e-01 7.354720e-03 5.000000e-01 7.823422e-03 6.000000e-01 8.180101e-03 7.000000e-01 8.500650e-03 8.000000e-01 8.806006e-03 9.000000e-01 9.103701e-03 1.000000e+00 9.397062e-03 1.100000e+00 9.687855e-03 1.200000e+00 9.977350e-03 1.000000e-01 2.844140e-03 2.000000e-01 5.224797e-03 3.000000e-01 7.071651e-03 4.000000e-01 8.268984e-03 5.000000e-01 8.904567e-03 6.000000e-01 9.319343e-03 7.000000e-01 9.666244e-03 8.000000e-01 9.987055e-03 9.000000e-01 1.029548e-02 1.000000e+00 1.059712e-02 1.100000e+00 1.089472e-02 1.200000e+00 1.118993e-02 1.000000e-01 2.921053e-03 2.000000e-01 5.440796e-03 3.000000e-01 7.505589e-03 4.000000e-01 9.019955e-03 5.000000e-01 9.908143e-03 6.000000e-01 1.042073e-02 7.000000e-01 1.080692e-02 8.000000e-01 1.114830e-02 9.000000e-01 1.146991e-02 1.000000e+00 1.178121e-02 1.100000e+00 1.208648e-02 1.200000e+00 1.238806e-02 1.000000e-01 7.320763e-08 2.000000e-01 1.375672e-07 3.000000e-01 2.536562e-07 4.000000e-01 4.639291e-07 5.000000e-01 8.421515e-07 6.000000e-01 1.515383e-06 7.000000e-01 2.697513e-06 8.000000e-01 4.738197e-06 9.000000e-01 8.189309e-06 1.000000e+00 1.388749e-05 1.100000e+00 2.304639e-05 1.200000e+00 3.734813e-05 1.000000e-01 2.073869e-06 2.000000e-01 3.734885e-06 3.000000e-01 6.524268e-06 4.000000e-01 1.115517e-05 5.000000e-01 1.865231e-05 6.000000e-01 3.043781e-05 7.000000e-01 4.838219e-05 8.000000e-01 7.480771e-05 9.000000e-01 1.124247e-04 1.000000e+00 1.641836e-04 1.100000e+00 2.330380e-04 1.200000e+00 3.216545e-04 1.000000e-01 3.906029e-05 2.000000e-01 6.231507e-05 3.000000e-01 9.509337e-05 4.000000e-01 1.404919e-04 5.000000e-01 2.013758e-04 6.000000e-01 2.802853e-04 7.000000e-01 3.791093e-04 8.000000e-01 4.988203e-04 9.000000e-01 6.393948e-04 1.000000e+00 7.999581e-04 1.100000e+00 9.790977e-04 1.200000e+00 1.175253e-03 1.000000e-01 3.204831e-04 2.000000e-01 4.379066e-04 3.000000e-01 5.703264e-04 4.000000e-01 7.214180e-04 5.000000e-01 8.905130e-04 6.000000e-01 1.075931e-03 7.000000e-01 1.275616e-03 8.000000e-01 1.487456e-03 9.000000e-01 1.709509e-03 1.000000e+00 1.940178e-03 1.100000e+00 2.178346e-03 1.200000e+00 2.423488e-03 1.000000e-01 1.080832e-03 2.000000e-01 1.339881e-03 3.000000e-01 1.567304e-03 4.000000e-01 1.796404e-03 5.000000e-01 2.030407e-03 6.000000e-01 2.269303e-03 7.000000e-01 2.512484e-03 8.000000e-01 2.759287e-03 9.000000e-01 3.009186e-03 1.000000e+00 3.261908e-03 1.100000e+00 3.517544e-03 1.200000e+00 3.776665e-03 1.000000e-01 1.993869e-03 2.000000e-01 2.500042e-03 3.000000e-01 2.791704e-03 4.000000e-01 3.057104e-03 5.000000e-01 3.316419e-03 6.000000e-01 3.574226e-03 7.000000e-01 3.831971e-03 8.000000e-01 4.090206e-03 9.000000e-01 4.349206e-03 1.000000e+00 4.609265e-03 1.100000e+00 4.870904e-03 1.200000e+00 5.135052e-03 1.000000e-01 2.625921e-03 2.000000e-01 3.654465e-03 3.000000e-01 4.043192e-03 4.000000e-01 4.340508e-03 5.000000e-01 4.616787e-03 6.000000e-01 4.885859e-03 7.000000e-01 5.151994e-03 8.000000e-01 5.416915e-03 9.000000e-01 5.681476e-03 1.000000e+00 5.946269e-03 1.100000e+00 6.211981e-03 1.200000e+00 6.479649e-03 1.000000e-01 2.976211e-03 2.000000e-01 4.647702e-03 3.000000e-01 5.253838e-03 4.000000e-01 5.602811e-03 5.000000e-01 5.900447e-03 6.000000e-01 6.181853e-03 7.000000e-01 6.456582e-03 8.000000e-01 6.728192e-03 9.000000e-01 6.998310e-03 1.000000e+00 7.267878e-03 1.100000e+00 7.537721e-03 1.200000e+00 7.808925e-03 1.000000e-01 3.181040e-03 2.000000e-01 5.377007e-03 3.000000e-01 6.381095e-03 4.000000e-01 6.830052e-03 5.000000e-01 7.160783e-03 6.000000e-01 7.458666e-03 7.000000e-01 7.743889e-03 8.000000e-01 8.023241e-03 9.000000e-01 8.299601e-03 1.000000e+00 8.574448e-03 1.100000e+00 8.848821e-03 1.200000e+00 9.123855e-03 1.000000e-01 3.312704e-03 2.000000e-01 5.863574e-03 3.000000e-01 7.364701e-03 4.000000e-01 8.007609e-03 5.000000e-01 8.393785e-03 6.000000e-01 8.715181e-03 7.000000e-01 9.013849e-03 8.000000e-01 9.302457e-03 9.000000e-01 9.585960e-03 1.000000e+00 9.866698e-03 1.100000e+00 1.014607e-02 1.200000e+00 1.042530e-02 1.000000e-01 3.395457e-03 2.000000e-01 6.185849e-03 3.000000e-01 8.140228e-03 4.000000e-01 9.108512e-03 5.000000e-01 9.592645e-03 6.000000e-01 9.949383e-03 7.000000e-01 1.026594e-02 8.000000e-01 1.056588e-02 9.000000e-01 1.085767e-02 1.000000e+00 1.114502e-02 1.100000e+00 1.142990e-02 1.200000e+00 1.171375e-02 1.000000e-01 3.450885e-03 2.000000e-01 6.401733e-03 3.000000e-01 8.694006e-03 4.000000e-01 1.007813e-02 5.000000e-01 1.073855e-02 6.000000e-01 1.115393e-02 7.000000e-01 1.149707e-02 8.000000e-01 1.181246e-02 9.000000e-01 1.211458e-02 1.000000e+00 1.240945e-02 1.100000e+00 1.270046e-02 1.200000e+00 1.298940e-02 1.000000e-01 3.083677e-06 2.000000e-01 4.615741e-06 3.000000e-01 6.661318e-06 4.000000e-01 9.523514e-06 5.000000e-01 1.353097e-05 6.000000e-01 1.911684e-05 7.000000e-01 2.685444e-05 8.000000e-01 3.749360e-05 9.000000e-01 5.199906e-05 1.000000e+00 7.158858e-05 1.100000e+00 9.776538e-05 1.200000e+00 1.323382e-04 1.000000e-01 1.651002e-05 2.000000e-01 2.426124e-05 3.000000e-01 3.423446e-05 4.000000e-01 4.772411e-05 5.000000e-01 6.591750e-05 6.000000e-01 9.022107e-05 7.000000e-01 1.222822e-04 8.000000e-01 1.639536e-04 9.000000e-01 2.172126e-04 1.000000e+00 2.840472e-04 1.100000e+00 3.663319e-04 1.200000e+00 4.657269e-04 1.000000e-01 7.690764e-05 2.000000e-01 1.102800e-04 3.000000e-01 1.498751e-04 4.000000e-01 1.999814e-04 5.000000e-01 2.627877e-04 6.000000e-01 3.401199e-04 7.000000e-01 4.334449e-04 8.000000e-01 5.437799e-04 9.000000e-01 6.716476e-04 1.000000e+00 8.171105e-04 1.100000e+00 9.798850e-04 1.200000e+00 1.159512e-03 1.000000e-01 2.779883e-04 2.000000e-01 3.895711e-04 3.000000e-01 4.977448e-04 4.000000e-01 6.200823e-04 5.000000e-01 7.585247e-04 6.000000e-01 9.131908e-04 7.000000e-01 1.083544e-03 8.000000e-01 1.268687e-03 9.000000e-01 1.467525e-03 1.000000e+00 1.678921e-03 1.100000e+00 1.901848e-03 1.200000e+00 2.135545e-03 1.000000e-01 6.587778e-04 2.000000e-01 9.524869e-04 3.000000e-01 1.151383e-03 4.000000e-01 1.348011e-03 5.000000e-01 1.553057e-03 6.000000e-01 1.767864e-03 7.000000e-01 1.992106e-03 8.000000e-01 2.225028e-03 9.000000e-01 2.465783e-03 1.000000e+00 2.713580e-03 1.100000e+00 2.967828e-03 1.200000e+00 3.228269e-03 1.000000e-01 1.061203e-03 2.000000e-01 1.667641e-03 3.000000e-01 1.993712e-03 4.000000e-01 2.252433e-03 5.000000e-01 2.502188e-03 6.000000e-01 2.753096e-03 7.000000e-01 3.007487e-03 8.000000e-01 3.265862e-03 9.000000e-01 3.528165e-03 1.000000e+00 3.794191e-03 1.100000e+00 4.063802e-03 1.200000e+00 4.337119e-03 1.000000e-01 1.372063e-03 2.000000e-01 2.309241e-03 3.000000e-01 2.858481e-03 4.000000e-01 3.199054e-03 5.000000e-01 3.487488e-03 6.000000e-01 3.763841e-03 7.000000e-01 4.037542e-03 8.000000e-01 4.311504e-03 9.000000e-01 4.586782e-03 1.000000e+00 4.863784e-03 1.100000e+00 5.142738e-03 1.200000e+00 5.423983e-03 1.000000e-01 1.590846e-03 2.000000e-01 2.793869e-03 3.000000e-01 3.615329e-03 4.000000e-01 4.106804e-03 5.000000e-01 4.450670e-03 6.000000e-01 4.754285e-03 7.000000e-01 5.045658e-03 8.000000e-01 5.332877e-03 9.000000e-01 5.618901e-03 1.000000e+00 5.904999e-03 1.100000e+00 6.191823e-03 1.200000e+00 6.479901e-03 1.000000e-01 1.744988e-03 2.000000e-01 3.148599e-03 3.000000e-01 4.209402e-03 4.000000e-01 4.918764e-03 5.000000e-01 5.363732e-03 6.000000e-01 5.707908e-03 7.000000e-01 6.021053e-03 8.000000e-01 6.322941e-03 9.000000e-01 6.620236e-03 1.000000e+00 6.915670e-03 1.100000e+00 7.210554e-03 1.200000e+00 7.505696e-03 1.000000e-01 1.856576e-03 2.000000e-01 3.411996e-03 3.000000e-01 4.662437e-03 4.000000e-01 5.593280e-03 5.000000e-01 6.202333e-03 6.000000e-01 6.616067e-03 7.000000e-01 6.960757e-03 8.000000e-01 7.281238e-03 9.000000e-01 7.591711e-03 1.000000e+00 7.897580e-03 1.100000e+00 8.201277e-03 1.200000e+00 8.504099e-03 1.000000e-01 1.939597e-03 2.000000e-01 3.611808e-03 3.000000e-01 5.011611e-03 4.000000e-01 6.128574e-03 5.000000e-01 6.936023e-03 6.000000e-01 7.466797e-03 7.000000e-01 7.861630e-03 8.000000e-01 8.207734e-03 9.000000e-01 8.534566e-03 1.000000e+00 8.852565e-03 1.100000e+00 9.166117e-03 1.200000e+00 9.477367e-03 1.000000e-01 2.002664e-03 2.000000e-01 3.766208e-03 3.000000e-01 5.284998e-03 4.000000e-01 6.551554e-03 5.000000e-01 7.544527e-03 6.000000e-01 8.239467e-03 7.000000e-01 8.716582e-03 8.000000e-01 9.100608e-03 9.000000e-01 9.448904e-03 1.000000e+00 9.781519e-03 1.100000e+00 1.010632e-02 1.200000e+00 1.042688e-02 tmpk8ny_4pz/tests/bsim4/nmos/reference/dcSweep_lw1_vb2.standard0000644000175000017500000002575213546075722024735 0ustar carstencarstenV(d) I(d) 1.000000e-01 1.549169e-07 2.000000e-01 2.641927e-07 3.000000e-01 4.390648e-07 4.000000e-01 7.235566e-07 5.000000e-01 1.184989e-06 6.000000e-01 1.928926e-06 7.000000e-01 3.119289e-06 8.000000e-01 5.007102e-06 9.000000e-01 7.970739e-06 1.000000e+00 1.257088e-05 1.100000e+00 1.962351e-05 1.200000e+00 3.029423e-05 1.000000e-01 2.033788e-06 2.000000e-01 3.391291e-06 3.000000e-01 5.485073e-06 4.000000e-01 8.751749e-06 5.000000e-01 1.379890e-05 6.000000e-01 2.149358e-05 7.000000e-01 3.304710e-05 8.000000e-01 5.010524e-05 9.000000e-01 7.483254e-05 1.000000e+00 1.099685e-04 1.100000e+00 1.588232e-04 1.200000e+00 2.251811e-04 1.000000e-01 2.211723e-05 2.000000e-01 3.504179e-05 3.000000e-01 5.347300e-05 4.000000e-01 7.998321e-05 5.000000e-01 1.174548e-04 6.000000e-01 1.692306e-04 7.000000e-01 2.389273e-04 8.000000e-01 3.300830e-04 9.000000e-01 4.457197e-04 1.000000e+00 5.879544e-04 1.100000e+00 7.578067e-04 1.200000e+00 9.552887e-04 1.000000e-01 1.673044e-04 2.000000e-01 2.453267e-04 3.000000e-01 3.414335e-04 4.000000e-01 4.615502e-04 5.000000e-01 6.078400e-04 6.000000e-01 7.808339e-04 7.000000e-01 9.796953e-04 8.000000e-01 1.202520e-03 9.000000e-01 1.446753e-03 1.000000e+00 1.709657e-03 1.100000e+00 1.988765e-03 1.200000e+00 2.282267e-03 1.000000e-01 7.115628e-04 2.000000e-01 9.585952e-04 3.000000e-01 1.191983e-03 4.000000e-01 1.439996e-03 5.000000e-01 1.703737e-03 6.000000e-01 1.981426e-03 7.000000e-01 2.270821e-03 8.000000e-01 2.569791e-03 9.000000e-01 2.876545e-03 1.000000e+00 3.189793e-03 1.100000e+00 3.508906e-03 1.200000e+00 3.834074e-03 1.000000e-01 1.588603e-03 2.000000e-01 2.132371e-03 3.000000e-01 2.477301e-03 4.000000e-01 2.799195e-03 5.000000e-01 3.118413e-03 6.000000e-01 3.438901e-03 7.000000e-01 3.761500e-03 8.000000e-01 4.086250e-03 9.000000e-01 4.413033e-03 1.000000e+00 4.741885e-03 1.100000e+00 5.073261e-03 1.200000e+00 5.408275e-03 1.000000e-01 2.354932e-03 2.000000e-01 3.395318e-03 3.000000e-01 3.871208e-03 4.000000e-01 4.243974e-03 5.000000e-01 4.592880e-03 6.000000e-01 4.933839e-03 7.000000e-01 5.271719e-03 8.000000e-01 5.608423e-03 9.000000e-01 5.944862e-03 1.000000e+00 6.281688e-03 1.100000e+00 6.619758e-03 1.200000e+00 6.960492e-03 1.000000e-01 2.899057e-03 2.000000e-01 4.515784e-03 3.000000e-01 5.228908e-03 4.000000e-01 5.670111e-03 5.000000e-01 6.049759e-03 6.000000e-01 6.409339e-03 7.000000e-01 6.760466e-03 8.000000e-01 7.107516e-03 9.000000e-01 7.452503e-03 1.000000e+00 7.796616e-03 1.100000e+00 8.140968e-03 1.200000e+00 8.487116e-03 1.000000e-01 3.283872e-03 2.000000e-01 5.408688e-03 3.000000e-01 6.492547e-03 4.000000e-01 7.050713e-03 5.000000e-01 7.473753e-03 6.000000e-01 7.856332e-03 7.000000e-01 8.222647e-03 8.000000e-01 8.581107e-03 9.000000e-01 8.935353e-03 1.000000e+00 9.287307e-03 1.100000e+00 9.638393e-03 1.200000e+00 9.990278e-03 1.000000e-01 3.565848e-03 2.000000e-01 6.092912e-03 3.000000e-01 7.613750e-03 4.000000e-01 8.370193e-03 5.000000e-01 8.860053e-03 6.000000e-01 9.273541e-03 7.000000e-01 9.658487e-03 8.000000e-01 1.003017e-02 9.000000e-01 1.039478e-02 1.000000e+00 1.075534e-02 1.100000e+00 1.111374e-02 1.200000e+00 1.147180e-02 1.000000e-01 3.779585e-03 2.000000e-01 6.621528e-03 3.000000e-01 8.555729e-03 4.000000e-01 9.606393e-03 5.000000e-01 1.020245e-02 6.000000e-01 1.065937e-02 7.000000e-01 1.106795e-02 8.000000e-01 1.145529e-02 9.000000e-01 1.183165e-02 1.000000e+00 1.220170e-02 1.100000e+00 1.256806e-02 1.200000e+00 1.293278e-02 1.000000e-01 3.946062e-03 2.000000e-01 7.038543e-03 3.000000e-01 9.319745e-03 4.000000e-01 1.072809e-02 5.000000e-01 1.149030e-02 6.000000e-01 1.201053e-02 7.000000e-01 1.245008e-02 8.000000e-01 1.285641e-02 9.000000e-01 1.324627e-02 1.000000e+00 1.362688e-02 1.100000e+00 1.400192e-02 1.200000e+00 1.437388e-02 1.000000e-01 1.398883e-08 2.000000e-01 2.688799e-08 3.000000e-01 5.085329e-08 4.000000e-01 9.565674e-08 5.000000e-01 1.791388e-07 6.000000e-01 3.337892e-07 7.000000e-01 6.180054e-07 8.000000e-01 1.134919e-06 9.000000e-01 2.062663e-06 1.000000e+00 3.700704e-06 1.100000e+00 6.536753e-06 1.200000e+00 1.133752e-05 1.000000e-01 4.732332e-07 2.000000e-01 8.872678e-07 3.000000e-01 1.623732e-06 4.000000e-01 2.926781e-06 5.000000e-01 5.191634e-06 6.000000e-01 9.040383e-06 7.000000e-01 1.541127e-05 8.000000e-01 2.565554e-05 9.000000e-01 4.163258e-05 1.000000e+00 6.579607e-05 1.100000e+00 1.012637e-04 1.200000e+00 1.518526e-04 1.000000e-01 1.227846e-05 2.000000e-01 2.101535e-05 3.000000e-01 3.455450e-05 4.000000e-01 5.514848e-05 5.000000e-01 8.555575e-05 6.000000e-01 1.291000e-04 7.000000e-01 1.895785e-04 8.000000e-01 2.710115e-04 9.000000e-01 3.772102e-04 1.000000e+00 5.112358e-04 1.100000e+00 6.749365e-04 1.200000e+00 8.687905e-04 1.000000e-01 1.582206e-04 2.000000e-01 2.332534e-04 3.000000e-01 3.289213e-04 4.000000e-01 4.499556e-04 5.000000e-01 5.986614e-04 6.000000e-01 7.756208e-04 7.000000e-01 9.797485e-04 8.000000e-01 1.208611e-03 9.000000e-01 1.458997e-03 1.000000e+00 1.727573e-03 1.100000e+00 2.011478e-03 1.200000e+00 2.308773e-03 1.000000e-01 8.227345e-04 2.000000e-01 1.065401e-03 3.000000e-01 1.309225e-03 4.000000e-01 1.567751e-03 5.000000e-01 1.840303e-03 6.000000e-01 2.124550e-03 7.000000e-01 2.418121e-03 8.000000e-01 2.719011e-03 9.000000e-01 3.025739e-03 1.000000e+00 3.337462e-03 1.100000e+00 3.654091e-03 1.200000e+00 3.976407e-03 1.000000e-01 1.986456e-03 2.000000e-01 2.435507e-03 3.000000e-01 2.769233e-03 4.000000e-01 3.087580e-03 5.000000e-01 3.403205e-03 6.000000e-01 3.719079e-03 7.000000e-01 4.036061e-03 8.000000e-01 4.354428e-03 9.000000e-01 4.674369e-03 1.000000e+00 4.996293e-03 1.100000e+00 5.321083e-03 1.200000e+00 5.650335e-03 1.000000e-01 3.071984e-03 2.000000e-01 3.898693e-03 3.000000e-01 4.310257e-03 4.000000e-01 4.661837e-03 5.000000e-01 4.997239e-03 6.000000e-01 5.326833e-03 7.000000e-01 5.654209e-03 8.000000e-01 5.980928e-03 9.000000e-01 6.307861e-03 1.000000e+00 6.635808e-03 1.100000e+00 6.965919e-03 1.200000e+00 7.300030e-03 1.000000e-01 3.825472e-03 2.000000e-01 5.271833e-03 3.000000e-01 5.817325e-03 4.000000e-01 6.210966e-03 5.000000e-01 6.567499e-03 6.000000e-01 6.910753e-03 7.000000e-01 7.248319e-03 8.000000e-01 7.583314e-03 9.000000e-01 7.917310e-03 1.000000e+00 8.251433e-03 1.100000e+00 8.586988e-03 1.200000e+00 8.925928e-03 1.000000e-01 4.318175e-03 2.000000e-01 6.471644e-03 3.000000e-01 7.264433e-03 4.000000e-01 7.724080e-03 5.000000e-01 8.108973e-03 6.000000e-01 8.468913e-03 7.000000e-01 8.818260e-03 8.000000e-01 9.162524e-03 9.000000e-01 9.504283e-03 1.000000e+00 9.845105e-03 1.100000e+00 1.018647e-02 1.200000e+00 1.053041e-02 1.000000e-01 4.644752e-03 2.000000e-01 7.432977e-03 3.000000e-01 8.626238e-03 4.000000e-01 9.195691e-03 5.000000e-01 9.620930e-03 6.000000e-01 1.000197e-02 7.000000e-01 1.036522e-02 8.000000e-01 1.071994e-02 9.000000e-01 1.107023e-02 1.000000e+00 1.141829e-02 1.100000e+00 1.176586e-02 1.200000e+00 1.211502e-02 1.000000e-01 4.862884e-03 2.000000e-01 8.142085e-03 3.000000e-01 9.853006e-03 4.000000e-01 1.060666e-02 5.000000e-01 1.109372e-02 6.000000e-01 1.150475e-02 7.000000e-01 1.188662e-02 8.000000e-01 1.225473e-02 9.000000e-01 1.261541e-02 1.000000e+00 1.297171e-02 1.100000e+00 1.332592e-02 1.200000e+00 1.368062e-02 1.000000e-01 5.020845e-03 2.000000e-01 8.665560e-03 3.000000e-01 1.090638e-02 4.000000e-01 1.194616e-02 5.000000e-01 1.252532e-02 6.000000e-01 1.297498e-02 7.000000e-01 1.337853e-02 8.000000e-01 1.376150e-02 9.000000e-01 1.413381e-02 1.000000e+00 1.450012e-02 1.100000e+00 1.486312e-02 1.200000e+00 1.522516e-02 1.000000e-01 1.309182e-06 2.000000e-01 1.990022e-06 3.000000e-01 2.918422e-06 4.000000e-01 4.243177e-06 5.000000e-01 6.136104e-06 6.000000e-01 8.832020e-06 7.000000e-01 1.265365e-05 8.000000e-01 1.804166e-05 9.000000e-01 2.559266e-05 1.000000e+00 3.610728e-05 1.100000e+00 5.064983e-05 1.200000e+00 7.062035e-05 1.000000e-01 7.710403e-06 2.000000e-01 1.153333e-05 3.000000e-01 1.659810e-05 4.000000e-01 2.363321e-05 5.000000e-01 3.339860e-05 6.000000e-01 4.687147e-05 7.000000e-01 6.530867e-05 8.000000e-01 9.029501e-05 9.000000e-01 1.237762e-04 1.000000e+00 1.680660e-04 1.100000e+00 2.258181e-04 1.200000e+00 2.999590e-04 1.000000e-01 4.038163e-05 2.000000e-01 5.913272e-05 3.000000e-01 8.268553e-05 4.000000e-01 1.139533e-04 5.000000e-01 1.552219e-04 6.000000e-01 2.089534e-04 7.000000e-01 2.777424e-04 8.000000e-01 3.641563e-04 9.000000e-01 4.705376e-04 1.000000e+00 5.988248e-04 1.100000e+00 7.504461e-04 1.200000e+00 9.263256e-04 1.000000e-01 1.741545e-04 2.000000e-01 2.494661e-04 3.000000e-01 3.319787e-04 4.000000e-01 4.318070e-04 5.000000e-01 5.516452e-04 6.000000e-01 6.929655e-04 7.000000e-01 8.564339e-04 8.000000e-01 1.041993e-03 9.000000e-01 1.248974e-03 1.000000e+00 1.476273e-03 1.100000e+00 1.722613e-03 1.200000e+00 1.986827e-03 1.000000e-01 5.189929e-04 2.000000e-01 7.490467e-04 3.000000e-01 9.350452e-04 4.000000e-01 1.132398e-03 5.000000e-01 1.346668e-03 6.000000e-01 1.578042e-03 7.000000e-01 1.825514e-03 8.000000e-01 2.087673e-03 9.000000e-01 2.363004e-03 1.000000e+00 2.650089e-03 1.100000e+00 2.947807e-03 1.200000e+00 3.255553e-03 1.000000e-01 9.900130e-04 2.000000e-01 1.528231e-03 3.000000e-01 1.845181e-03 4.000000e-01 2.125125e-03 5.000000e-01 2.405266e-03 6.000000e-01 2.691847e-03 7.000000e-01 2.985941e-03 8.000000e-01 3.287352e-03 9.000000e-01 3.595531e-03 1.000000e+00 3.909914e-03 1.100000e+00 4.230164e-03 1.200000e+00 4.556408e-03 1.000000e-01 1.406799e-03 2.000000e-01 2.324601e-03 3.000000e-01 2.850812e-03 4.000000e-01 3.213269e-03 5.000000e-01 3.540278e-03 6.000000e-01 3.860413e-03 7.000000e-01 4.180745e-03 8.000000e-01 4.503474e-03 9.000000e-01 4.829321e-03 1.000000e+00 5.158513e-03 1.100000e+00 5.491234e-03 1.200000e+00 5.827973e-03 1.000000e-01 1.722457e-03 2.000000e-01 2.971142e-03 3.000000e-01 3.784027e-03 4.000000e-01 4.278334e-03 5.000000e-01 4.659055e-03 6.000000e-01 5.009628e-03 7.000000e-01 5.351311e-03 8.000000e-01 5.690711e-03 9.000000e-01 6.030350e-03 1.000000e+00 6.371333e-03 1.100000e+00 6.714293e-03 1.200000e+00 7.059927e-03 1.000000e-01 1.956168e-03 2.000000e-01 3.466717e-03 3.000000e-01 4.561536e-03 4.000000e-01 5.262180e-03 5.000000e-01 5.728748e-03 6.000000e-01 6.118582e-03 7.000000e-01 6.484092e-03 8.000000e-01 6.840785e-03 9.000000e-01 7.194290e-03 1.000000e+00 7.547035e-03 1.100000e+00 7.900264e-03 1.200000e+00 8.254914e-03 1.000000e-01 2.132016e-03 2.000000e-01 3.849031e-03 3.000000e-01 5.180663e-03 4.000000e-01 6.123871e-03 5.000000e-01 6.731316e-03 6.000000e-01 7.180727e-03 7.000000e-01 7.577222e-03 8.000000e-01 7.954208e-03 9.000000e-01 8.323057e-03 1.000000e+00 8.688414e-03 1.100000e+00 9.052499e-03 1.200000e+00 9.416652e-03 1.000000e-01 2.267090e-03 2.000000e-01 4.148913e-03 3.000000e-01 5.673549e-03 4.000000e-01 6.842683e-03 5.000000e-01 7.644437e-03 6.000000e-01 8.188788e-03 7.000000e-01 8.629235e-03 8.000000e-01 9.031727e-03 9.000000e-01 9.418370e-03 1.000000e+00 9.797652e-03 1.100000e+00 1.017339e-02 1.200000e+00 1.054763e-02 1.000000e-01 2.372565e-03 2.000000e-01 4.387560e-03 3.000000e-01 6.070448e-03 4.000000e-01 7.429536e-03 5.000000e-01 8.442709e-03 6.000000e-01 9.129436e-03 7.000000e-01 9.635870e-03 8.000000e-01 1.007243e-02 9.000000e-01 1.048064e-02 1.000000e+00 1.087574e-02 1.100000e+00 1.126420e-02 1.200000e+00 1.164921e-02 tmpk8ny_4pz/tests/bsim4/nmos/reference/acFreq_capmod.standard0000644000175000017500000000712013546075722024520 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.27855086349603e-14 8.74639172860373e-15 3.90941676858265e-15 1258.925 1.27855176802783e-14 8.74639360469591e-15 3.90941707948425e-15 1584.893 1.27855136065573e-14 8.74639154849043e-15 3.9094165832204e-15 1995.262 1.27855071325881e-14 8.74638995281137e-15 3.90941695120153e-15 2511.886 1.2785512018682e-14 8.74639188654937e-15 3.90941690602856e-15 3162.278 1.27855058460095e-14 8.7463907247575e-15 3.90941574901257e-15 3981.072 1.27855077015624e-14 8.74639140980387e-15 3.90941595429336e-15 5011.872 1.27855111143146e-14 8.74639083517931e-15 3.90941775489597e-15 6309.573 1.27855093739947e-14 8.74639056501407e-15 3.90941767042744e-15 7943.282 1.27855087938683e-14 8.74639070741948e-15 3.90941632172277e-15 10000 1.27855086349603e-14 8.74639172860373e-15 3.90941676858265e-15 12589.25 1.27855176802783e-14 8.74639360469591e-15 3.90941707948425e-15 15848.93 1.27855136065573e-14 8.74639154849043e-15 3.9094165832204e-15 19952.62 1.27855071325881e-14 8.74638995281137e-15 3.90941695120153e-15 25118.86 1.2785512018682e-14 8.74639188654937e-15 3.90941690602856e-15 31622.78 1.27855058460095e-14 8.7463907247575e-15 3.90941574901257e-15 39810.72 1.27855077015624e-14 8.74639140980387e-15 3.90941595429336e-15 50118.72 1.27855111143146e-14 8.74639083517931e-15 3.90941775489598e-15 63095.73 1.27855093739947e-14 8.74639056501407e-15 3.90941767042744e-15 79432.82 1.27855087938683e-14 8.74639070741947e-15 3.90941632172277e-15 100000 1.27855086349603e-14 8.74639172860373e-15 3.90941676858265e-15 125892.5 1.27855176802783e-14 8.74639360469591e-15 3.90941707948425e-15 158489.3 1.27855136065573e-14 8.74639154849043e-15 3.9094165832204e-15 199526.2 1.27855071325881e-14 8.74638995281137e-15 3.90941695120153e-15 251188.6 1.2785512018682e-14 8.74639188654937e-15 3.90941690602856e-15 316227.8 1.27855058460095e-14 8.7463907247575e-15 3.90941574901257e-15 398107.2 1.27855077015624e-14 8.74639140980387e-15 3.90941595429336e-15 501187.2 1.27855111143146e-14 8.74639083517931e-15 3.90941775489598e-15 630957.3 1.27855093739947e-14 8.74639056501407e-15 3.90941767042744e-15 794328.2 1.27855087938683e-14 8.74639070741948e-15 3.90941632172277e-15 1000000 1.27855086349603e-14 8.74639172860373e-15 3.90941676858265e-15 1258925 1.27855176802783e-14 8.74639360469591e-15 3.90941707948425e-15 1584893 1.27855136065573e-14 8.74639154849043e-15 3.9094165832204e-15 1995262 1.27855071325881e-14 8.74638995281137e-15 3.90941695120153e-15 2511886 1.2785512018682e-14 8.74639188654937e-15 3.90941690602856e-15 3162278 1.27855058460095e-14 8.7463907247575e-15 3.90941574901257e-15 3981072 1.27855077015624e-14 8.74639140980387e-15 3.90941595429336e-15 5011872 1.27855111143146e-14 8.74639083517931e-15 3.90941775489598e-15 6309573 1.27855093739947e-14 8.74639056501407e-15 3.90941767042744e-15 7943282 1.27855087938683e-14 8.74639070741947e-15 3.90941632172277e-15 10000000 1.27855086349603e-14 8.74639172860373e-15 3.90941676858265e-15 12589250 1.27855176802783e-14 8.74639360469591e-15 3.90941707948425e-15 15848930 1.27855136065573e-14 8.74639154849043e-15 3.9094165832204e-15 19952620 1.27855071325881e-14 8.74638995281137e-15 3.90941695120153e-15 25118860 1.2785512018682e-14 8.74639188654937e-15 3.90941690602856e-15 31622780 1.27855058460095e-14 8.7463907247575e-15 3.90941574901257e-15 39810720 1.27855077015624e-14 8.74639140980387e-15 3.90941595429336e-15 50118720 1.27855079387558e-14 8.74639083517931e-15 3.90941775489597e-15 63095730 1.27855093739947e-14 8.74639056501407e-15 3.90941767042744e-15 79432820 1.27855087938683e-14 8.74639070741947e-15 3.90941632172277e-15 100000000 1.27855070434108e-14 8.7463901370543e-15 3.90941517703322e-15 tmpk8ny_4pz/tests/bsim4/nmos/reference/dcSweep_sca.standard0000644000175000017500000002575213546075722024227 0ustar carstencarstenV(d) I(d) 1.000000e-01 3.194245e-07 2.000000e-01 5.349761e-07 3.000000e-01 8.727947e-07 4.000000e-01 1.411225e-06 5.000000e-01 2.266346e-06 6.000000e-01 3.615319e-06 7.000000e-01 5.725692e-06 8.000000e-01 8.995444e-06 9.000000e-01 1.400661e-05 1.000000e+00 2.159514e-05 1.100000e+00 3.293878e-05 1.200000e+00 4.966367e-05 1.000000e-01 3.775307e-06 2.000000e-01 6.164861e-06 3.000000e-01 9.759303e-06 4.000000e-01 1.523320e-05 5.000000e-01 2.348645e-05 6.000000e-01 3.576078e-05 7.000000e-01 5.373053e-05 8.000000e-01 7.958068e-05 9.000000e-01 1.160494e-04 1.000000e+00 1.664013e-04 1.100000e+00 2.342991e-04 1.200000e+00 3.235693e-04 1.000000e-01 3.643516e-05 2.000000e-01 5.648338e-05 3.000000e-01 8.426550e-05 4.000000e-01 1.231435e-04 5.000000e-01 1.765234e-04 6.000000e-01 2.480111e-04 7.000000e-01 3.410859e-04 8.000000e-01 4.586614e-04 9.000000e-01 6.026894e-04 1.000000e+00 7.739561e-04 1.100000e+00 9.721555e-04 1.200000e+00 1.196227e-03 1.000000e-01 2.425315e-04 2.000000e-01 3.476566e-04 3.000000e-01 4.712089e-04 4.000000e-01 6.199899e-04 5.000000e-01 7.950805e-04 6.000000e-01 9.957697e-04 7.000000e-01 1.220188e-03 8.000000e-01 1.465757e-03 9.000000e-01 1.729625e-03 1.000000e+00 2.009082e-03 1.100000e+00 2.301917e-03 1.200000e+00 2.606721e-03 1.000000e-01 8.908390e-04 2.000000e-01 1.186098e-03 3.000000e-01 1.446278e-03 4.000000e-01 1.715287e-03 5.000000e-01 1.996171e-03 6.000000e-01 2.287860e-03 7.000000e-01 2.588620e-03 8.000000e-01 2.896759e-03 9.000000e-01 3.210877e-03 1.000000e+00 3.530032e-03 1.100000e+00 3.853904e-03 1.200000e+00 4.182961e-03 1.000000e-01 1.786195e-03 2.000000e-01 2.417708e-03 3.000000e-01 2.786398e-03 4.000000e-01 3.120561e-03 5.000000e-01 3.448159e-03 6.000000e-01 3.774926e-03 7.000000e-01 4.102417e-03 8.000000e-01 4.431053e-03 9.000000e-01 4.760957e-03 1.000000e+00 5.092335e-03 1.100000e+00 5.425770e-03 1.200000e+00 5.762492e-03 1.000000e-01 2.513095e-03 2.000000e-01 3.676540e-03 3.000000e-01 4.190746e-03 4.000000e-01 4.576088e-03 5.000000e-01 4.931582e-03 6.000000e-01 5.276873e-03 7.000000e-01 5.617921e-03 8.000000e-01 5.957073e-03 9.000000e-01 6.295457e-03 1.000000e+00 6.633852e-03 1.100000e+00 6.973188e-03 1.200000e+00 7.314951e-03 1.000000e-01 3.021240e-03 2.000000e-01 4.761970e-03 3.000000e-01 5.541005e-03 4.000000e-01 6.001312e-03 5.000000e-01 6.388764e-03 6.000000e-01 6.752718e-03 7.000000e-01 7.106755e-03 8.000000e-01 7.455929e-03 9.000000e-01 7.802548e-03 1.000000e+00 8.147947e-03 1.100000e+00 8.493313e-03 1.200000e+00 8.840252e-03 1.000000e-01 3.380936e-03 2.000000e-01 5.613076e-03 3.000000e-01 6.785321e-03 4.000000e-01 7.375581e-03 5.000000e-01 7.809703e-03 6.000000e-01 8.197624e-03 7.000000e-01 8.567149e-03 8.000000e-01 8.927803e-03 9.000000e-01 9.283665e-03 1.000000e+00 9.636856e-03 1.100000e+00 9.988897e-03 1.200000e+00 1.034150e-02 1.000000e-01 3.645468e-03 2.000000e-01 6.262665e-03 3.000000e-01 7.876778e-03 4.000000e-01 8.683938e-03 5.000000e-01 9.190803e-03 6.000000e-01 9.611455e-03 7.000000e-01 1.000030e-02 8.000000e-01 1.037446e-02 9.000000e-01 1.074082e-02 1.000000e+00 1.110268e-02 1.100000e+00 1.146207e-02 1.200000e+00 1.182086e-02 1.000000e-01 3.846706e-03 2.000000e-01 6.765145e-03 3.000000e-01 8.784649e-03 4.000000e-01 9.903138e-03 5.000000e-01 1.052581e-02 6.000000e-01 1.099289e-02 7.000000e-01 1.140647e-02 8.000000e-01 1.179678e-02 9.000000e-01 1.217513e-02 1.000000e+00 1.254662e-02 1.100000e+00 1.291405e-02 1.200000e+00 1.327956e-02 1.000000e-01 4.003931e-03 2.000000e-01 7.162447e-03 3.000000e-01 9.517807e-03 4.000000e-01 1.100129e-02 5.000000e-01 1.180342e-02 6.000000e-01 1.233855e-02 7.000000e-01 1.278478e-02 8.000000e-01 1.319480e-02 9.000000e-01 1.358700e-02 1.000000e+00 1.396924e-02 1.100000e+00 1.434549e-02 1.200000e+00 1.471834e-02 1.000000e-01 3.774068e-08 2.000000e-01 7.102982e-08 3.000000e-01 1.313685e-07 4.000000e-01 2.413768e-07 5.000000e-01 4.410135e-07 6.000000e-01 8.005822e-07 7.000000e-01 1.441728e-06 8.000000e-01 2.570389e-06 9.000000e-01 4.526057e-06 1.000000e+00 7.851213e-06 1.100000e+00 1.338297e-05 1.200000e+00 2.236659e-05 1.000000e-01 1.109973e-06 2.000000e-01 2.024215e-06 3.000000e-01 3.594553e-06 4.000000e-01 6.273005e-06 5.000000e-01 1.075058e-05 6.000000e-01 1.805480e-05 7.000000e-01 2.964830e-05 8.000000e-01 4.752016e-05 9.000000e-01 7.425673e-05 1.000000e+00 1.130761e-04 1.100000e+00 1.678001e-04 1.200000e+00 2.427255e-04 1.000000e-01 2.378618e-05 2.000000e-01 3.924284e-05 3.000000e-01 6.215629e-05 4.000000e-01 9.558973e-05 5.000000e-01 1.429938e-04 6.000000e-01 2.081860e-04 7.000000e-01 2.950542e-04 8.000000e-01 4.070881e-04 9.000000e-01 5.468497e-04 1.000000e+00 7.155771e-04 1.100000e+00 9.131094e-04 1.200000e+00 1.138205e-03 1.000000e-01 2.465519e-04 2.000000e-01 3.519877e-04 3.000000e-01 4.797797e-04 4.000000e-01 6.343694e-04 5.000000e-01 8.163649e-04 6.000000e-01 1.024552e-03 7.000000e-01 1.256443e-03 8.000000e-01 1.508835e-03 9.000000e-01 1.778373e-03 1.000000e+00 2.062070e-03 1.100000e+00 2.357693e-03 1.200000e+00 2.664044e-03 1.000000e-01 1.053075e-03 2.000000e-01 1.336666e-03 3.000000e-01 1.605239e-03 4.000000e-01 1.882249e-03 5.000000e-01 2.168886e-03 6.000000e-01 2.463828e-03 7.000000e-01 2.765484e-03 8.000000e-01 3.072486e-03 9.000000e-01 3.383864e-03 1.000000e+00 3.699179e-03 1.100000e+00 4.018661e-03 1.200000e+00 4.343353e-03 1.000000e-01 2.242300e-03 2.000000e-01 2.755377e-03 3.000000e-01 3.105115e-03 4.000000e-01 3.431666e-03 5.000000e-01 3.752663e-03 6.000000e-01 4.072450e-03 7.000000e-01 4.392462e-03 8.000000e-01 4.713273e-03 9.000000e-01 5.035248e-03 1.000000e+00 5.358905e-03 1.100000e+00 5.685207e-03 1.200000e+00 6.015823e-03 1.000000e-01 3.257971e-03 2.000000e-01 4.209654e-03 3.000000e-01 4.645664e-03 4.000000e-01 5.006023e-03 5.000000e-01 5.346271e-03 6.000000e-01 5.679173e-03 7.000000e-01 6.009085e-03 8.000000e-01 6.337880e-03 9.000000e-01 6.666582e-03 1.000000e+00 6.996063e-03 1.100000e+00 7.327513e-03 1.200000e+00 7.662804e-03 1.000000e-01 3.941745e-03 2.000000e-01 5.551897e-03 3.000000e-01 6.143620e-03 4.000000e-01 6.550427e-03 5.000000e-01 6.913098e-03 6.000000e-01 7.260146e-03 7.000000e-01 7.600456e-03 8.000000e-01 7.937625e-03 9.000000e-01 8.273435e-03 1.000000e+00 8.609106e-03 1.100000e+00 8.945986e-03 1.200000e+00 9.286048e-03 1.000000e-01 4.391521e-03 2.000000e-01 6.702511e-03 3.000000e-01 7.576126e-03 4.000000e-01 8.057090e-03 5.000000e-01 8.450413e-03 6.000000e-01 8.815013e-03 7.000000e-01 9.167495e-03 8.000000e-01 9.514128e-03 9.000000e-01 9.857806e-03 1.000000e+00 1.020023e-02 1.100000e+00 1.054295e-02 1.200000e+00 1.088799e-02 1.000000e-01 4.698232e-03 2.000000e-01 7.612089e-03 3.000000e-01 8.917198e-03 4.000000e-01 9.520554e-03 5.000000e-01 9.957526e-03 6.000000e-01 1.034452e-02 7.000000e-01 1.071145e-02 8.000000e-01 1.106882e-02 9.000000e-01 1.142116e-02 1.000000e+00 1.177091e-02 1.100000e+00 1.211988e-02 1.200000e+00 1.247016e-02 1.000000e-01 4.903511e-03 2.000000e-01 8.278579e-03 3.000000e-01 1.011388e-02 4.000000e-01 1.092289e-02 5.000000e-01 1.142735e-02 6.000000e-01 1.184573e-02 7.000000e-01 1.223154e-02 8.000000e-01 1.260204e-02 9.000000e-01 1.296419e-02 1.000000e+00 1.332188e-02 1.100000e+00 1.367754e-02 1.200000e+00 1.403341e-02 1.000000e-01 5.052329e-03 2.000000e-01 8.770655e-03 3.000000e-01 1.112619e-02 4.000000e-01 1.224612e-02 5.000000e-01 1.285220e-02 6.000000e-01 1.331227e-02 7.000000e-01 1.372112e-02 8.000000e-01 1.410735e-02 9.000000e-01 1.448194e-02 1.000000e+00 1.484993e-02 1.100000e+00 1.521421e-02 1.200000e+00 1.557714e-02 1.000000e-01 2.100400e-06 2.000000e-01 3.152937e-06 3.000000e-01 4.566057e-06 4.000000e-01 6.554707e-06 5.000000e-01 9.357541e-06 6.000000e-01 1.329469e-05 7.000000e-01 1.879870e-05 8.000000e-01 2.644998e-05 9.000000e-01 3.702001e-05 1.000000e+00 5.152370e-05 1.100000e+00 7.128093e-05 1.200000e+00 9.798599e-05 1.000000e-01 1.151414e-05 2.000000e-01 1.701076e-05 3.000000e-01 2.417235e-05 4.000000e-01 3.398056e-05 5.000000e-01 4.740602e-05 6.000000e-01 6.566487e-05 7.000000e-01 9.028050e-05 8.000000e-01 1.231163e-04 9.000000e-01 1.663799e-04 1.000000e+00 2.225915e-04 1.100000e+00 2.945110e-04 1.200000e+00 3.850348e-04 1.000000e-01 5.613912e-05 2.000000e-01 8.132631e-05 3.000000e-01 1.122726e-04 4.000000e-01 1.526535e-04 5.000000e-01 2.050174e-04 6.000000e-01 2.719455e-04 7.000000e-01 3.559983e-04 8.000000e-01 4.595378e-04 9.000000e-01 5.845364e-04 1.000000e+00 7.324381e-04 1.100000e+00 9.041206e-04 1.200000e+00 1.099981e-03 1.000000e-01 2.240443e-04 2.000000e-01 3.184859e-04 3.000000e-01 4.178594e-04 4.000000e-01 5.354796e-04 5.000000e-01 6.739973e-04 6.000000e-01 8.344823e-04 7.000000e-01 1.017123e-03 8.000000e-01 1.221408e-03 9.000000e-01 1.446282e-03 1.000000e+00 1.690369e-03 1.100000e+00 1.952228e-03 1.200000e+00 2.230644e-03 1.000000e-01 6.123026e-04 2.000000e-01 8.862255e-04 3.000000e-01 1.095067e-03 4.000000e-01 1.311476e-03 5.000000e-01 1.543150e-03 6.000000e-01 1.790583e-03 7.000000e-01 2.052818e-03 8.000000e-01 2.328460e-03 9.000000e-01 2.616025e-03 1.000000e+00 2.914151e-03 1.100000e+00 3.221799e-03 1.200000e+00 3.538474e-03 1.000000e-01 1.097628e-03 2.000000e-01 1.708142e-03 3.000000e-01 2.057339e-03 4.000000e-01 2.355110e-03 5.000000e-01 2.649073e-03 6.000000e-01 2.947505e-03 7.000000e-01 3.252076e-03 8.000000e-01 3.562849e-03 9.000000e-01 3.879425e-03 1.000000e+00 4.201344e-03 1.100000e+00 4.528359e-03 1.200000e+00 4.860682e-03 1.000000e-01 1.509092e-03 2.000000e-01 2.508270e-03 3.000000e-01 3.085464e-03 4.000000e-01 3.470157e-03 5.000000e-01 3.810141e-03 6.000000e-01 4.140124e-03 7.000000e-01 4.468713e-03 8.000000e-01 4.798637e-03 9.000000e-01 5.130857e-03 1.000000e+00 5.465731e-03 1.100000e+00 5.803531e-03 1.200000e+00 6.144814e-03 1.000000e-01 1.815316e-03 2.000000e-01 3.142726e-03 3.000000e-01 4.018102e-03 4.000000e-01 4.546380e-03 5.000000e-01 4.942685e-03 6.000000e-01 5.302960e-03 7.000000e-01 5.652029e-03 8.000000e-01 5.997566e-03 9.000000e-01 6.342505e-03 1.000000e+00 6.688143e-03 1.100000e+00 7.035223e-03 1.200000e+00 7.384511e-03 1.000000e-01 2.040121e-03 2.000000e-01 3.624225e-03 3.000000e-01 4.782518e-03 4.000000e-01 5.529314e-03 5.000000e-01 6.018141e-03 6.000000e-01 6.419250e-03 7.000000e-01 6.792216e-03 8.000000e-01 7.154655e-03 9.000000e-01 7.512924e-03 1.000000e+00 7.869757e-03 1.100000e+00 8.226552e-03 1.200000e+00 8.584333e-03 1.000000e-01 2.208349e-03 2.000000e-01 3.993630e-03 3.000000e-01 5.385945e-03 4.000000e-01 6.380545e-03 5.000000e-01 7.019873e-03 6.000000e-01 7.484288e-03 7.000000e-01 7.889232e-03 8.000000e-01 8.272097e-03 9.000000e-01 8.645548e-03 1.000000e+00 9.014728e-03 1.100000e+00 9.382082e-03 1.200000e+00 9.749071e-03 1.000000e-01 2.337014e-03 2.000000e-01 4.282252e-03 3.000000e-01 5.864151e-03 4.000000e-01 7.084381e-03 5.000000e-01 7.925878e-03 6.000000e-01 8.491463e-03 7.000000e-01 8.942529e-03 8.000000e-01 9.351571e-03 9.000000e-01 9.742971e-03 1.000000e+00 1.012604e-02 1.100000e+00 1.050493e-02 1.200000e+00 1.088187e-02 1.000000e-01 2.437090e-03 2.000000e-01 4.511196e-03 3.000000e-01 6.248041e-03 4.000000e-01 7.656137e-03 5.000000e-01 8.712035e-03 6.000000e-01 9.427409e-03 7.000000e-01 9.948211e-03 8.000000e-01 1.039266e-02 9.000000e-01 1.080611e-02 1.000000e+00 1.120515e-02 1.100000e+00 1.159680e-02 1.200000e+00 1.198448e-02 tmpk8ny_4pz/tests/bsim4/nmos/reference/dcSweep_lw2.standard0000644000175000017500000002575213546075722024165 0ustar carstencarstenV(d) I(d) 1.000000e-01 1.159898e-07 2.000000e-01 1.258884e-07 3.000000e-01 1.341947e-07 4.000000e-01 1.426531e-07 5.000000e-01 1.515692e-07 6.000000e-01 1.611490e-07 7.000000e-01 1.716567e-07 8.000000e-01 1.835072e-07 9.000000e-01 1.973865e-07 1.000000e+00 2.144406e-07 1.100000e+00 2.365800e-07 1.200000e+00 2.669719e-07 1.000000e-01 1.372604e-06 2.000000e-01 1.486382e-06 3.000000e-01 1.580213e-06 4.000000e-01 1.674553e-06 5.000000e-01 1.772254e-06 6.000000e-01 1.874356e-06 7.000000e-01 1.981521e-06 8.000000e-01 2.094382e-06 9.000000e-01 2.213723e-06 1.000000e+00 2.340666e-06 1.100000e+00 2.476911e-06 1.200000e+00 2.625093e-06 1.000000e-01 1.350673e-05 2.000000e-01 1.458482e-05 3.000000e-01 1.543493e-05 4.000000e-01 1.627772e-05 5.000000e-01 1.714220e-05 6.000000e-01 1.803767e-05 7.000000e-01 1.896888e-05 8.000000e-01 1.993922e-05 9.000000e-01 2.095197e-05 1.000000e+00 2.201105e-05 1.100000e+00 2.312173e-05 1.200000e+00 2.429121e-05 1.000000e-01 9.909726e-05 2.000000e-01 1.075796e-04 3.000000e-01 1.131783e-04 4.000000e-01 1.185054e-04 5.000000e-01 1.238555e-04 6.000000e-01 1.293102e-04 7.000000e-01 1.349035e-04 8.000000e-01 1.406546e-04 9.000000e-01 1.465783e-04 1.000000e+00 1.526915e-04 1.100000e+00 1.590162e-04 1.200000e+00 1.655837e-04 1.000000e-01 4.301279e-04 2.000000e-01 4.892754e-04 3.000000e-01 5.116913e-04 4.000000e-01 5.302290e-04 5.000000e-01 5.478528e-04 6.000000e-01 5.652396e-04 7.000000e-01 5.826287e-04 8.000000e-01 6.001286e-04 9.000000e-01 6.178032e-04 1.000000e+00 6.357080e-04 1.100000e+00 6.539103e-04 1.200000e+00 6.725030e-04 1.000000e-01 9.699114e-04 2.000000e-01 1.249494e-03 3.000000e-01 1.316247e-03 4.000000e-01 1.355778e-03 5.000000e-01 1.389303e-03 6.000000e-01 1.420683e-03 7.000000e-01 1.451101e-03 8.000000e-01 1.481043e-03 9.000000e-01 1.510753e-03 1.000000e+00 1.540396e-03 1.100000e+00 1.570132e-03 1.200000e+00 1.600157e-03 1.000000e-01 1.469080e-03 2.000000e-01 2.149353e-03 3.000000e-01 2.340077e-03 4.000000e-01 2.414540e-03 5.000000e-01 2.466573e-03 6.000000e-01 2.511491e-03 7.000000e-01 2.553289e-03 8.000000e-01 2.593437e-03 9.000000e-01 2.632611e-03 1.000000e+00 2.671195e-03 1.100000e+00 2.709488e-03 1.200000e+00 2.747809e-03 1.000000e-01 1.861557e-03 2.000000e-01 2.959059e-03 3.000000e-01 3.402884e-03 4.000000e-01 3.547944e-03 5.000000e-01 3.626607e-03 6.000000e-01 3.687127e-03 7.000000e-01 3.740452e-03 8.000000e-01 3.790170e-03 9.000000e-01 3.837790e-03 1.000000e+00 3.884085e-03 1.100000e+00 3.929557e-03 1.200000e+00 3.974663e-03 1.000000e-01 2.165623e-03 2.000000e-01 3.618186e-03 3.000000e-01 4.395876e-03 4.000000e-01 4.681721e-03 5.000000e-01 4.804712e-03 6.000000e-01 4.886082e-03 7.000000e-01 4.952794e-03 8.000000e-01 5.012714e-03 9.000000e-01 5.068871e-03 1.000000e+00 5.122690e-03 1.100000e+00 5.174988e-03 1.200000e+00 5.226394e-03 1.000000e-01 2.404557e-03 2.000000e-01 4.147945e-03 3.000000e-01 5.255447e-03 4.000000e-01 5.769832e-03 5.000000e-01 5.971380e-03 6.000000e-01 6.083358e-03 7.000000e-01 6.166958e-03 8.000000e-01 6.238561e-03 9.000000e-01 6.303920e-03 1.000000e+00 6.365542e-03 1.100000e+00 6.424737e-03 1.200000e+00 6.482373e-03 1.000000e-01 2.595367e-03 2.000000e-01 4.577450e-03 3.000000e-01 5.971347e-03 4.000000e-01 6.768185e-03 5.000000e-01 7.104788e-03 6.000000e-01 7.264840e-03 7.000000e-01 7.371176e-03 8.000000e-01 7.456870e-03 9.000000e-01 7.532568e-03 1.000000e+00 7.602571e-03 1.100000e+00 7.668960e-03 1.200000e+00 7.732962e-03 1.000000e-01 2.749840e-03 2.000000e-01 4.929531e-03 3.000000e-01 6.564210e-03 4.000000e-01 7.642194e-03 5.000000e-01 8.180430e-03 6.000000e-01 8.418688e-03 7.000000e-01 8.557465e-03 8.000000e-01 8.660992e-03 9.000000e-01 8.748738e-03 1.000000e+00 8.827999e-03 1.100000e+00 8.902069e-03 1.200000e+00 8.972721e-03 1.000000e-01 1.604107e-08 2.000000e-01 1.758569e-08 3.000000e-01 1.901948e-08 4.000000e-01 2.056286e-08 5.000000e-01 2.231564e-08 6.000000e-01 2.441276e-08 7.000000e-01 2.707861e-08 8.000000e-01 3.069705e-08 9.000000e-01 3.592361e-08 1.000000e+00 4.386904e-08 1.100000e+00 5.639925e-08 1.200000e+00 7.662362e-08 1.000000e-01 4.719615e-07 2.000000e-01 5.157151e-07 3.000000e-01 5.550968e-07 4.000000e-01 5.955919e-07 5.000000e-01 6.382177e-07 6.000000e-01 6.834550e-07 7.000000e-01 7.317004e-07 8.000000e-01 7.834078e-07 9.000000e-01 8.391982e-07 1.000000e+00 8.999994e-07 1.100000e+00 9.672531e-07 1.200000e+00 1.043241e-06 1.000000e-01 1.029136e-05 2.000000e-01 1.114965e-05 3.000000e-01 1.189161e-05 4.000000e-01 1.263943e-05 5.000000e-01 1.341362e-05 6.000000e-01 1.422170e-05 7.000000e-01 1.506796e-05 8.000000e-01 1.595572e-05 9.000000e-01 1.688834e-05 1.000000e+00 1.786983e-05 1.100000e+00 1.890542e-05 1.200000e+00 2.000225e-05 1.000000e-01 1.239978e-04 2.000000e-01 1.334309e-04 3.000000e-01 1.406730e-04 4.000000e-01 1.476780e-04 5.000000e-01 1.547464e-04 6.000000e-01 1.619728e-04 7.000000e-01 1.693995e-04 8.000000e-01 1.770518e-04 9.000000e-01 1.849506e-04 1.000000e+00 1.931200e-04 1.100000e+00 2.015918e-04 1.200000e+00 2.104101e-04 1.000000e-01 7.127256e-04 2.000000e-01 7.740298e-04 3.000000e-01 8.064293e-04 4.000000e-01 8.342755e-04 5.000000e-01 8.607691e-04 6.000000e-01 8.868025e-04 7.000000e-01 9.127226e-04 8.000000e-01 9.386969e-04 9.000000e-01 9.648318e-04 1.000000e+00 9.912265e-04 1.100000e+00 1.018004e-03 1.200000e+00 1.045329e-03 1.000000e-01 1.808846e-03 2.000000e-01 2.063075e-03 3.000000e-01 2.140535e-03 4.000000e-01 2.193798e-03 5.000000e-01 2.239774e-03 6.000000e-01 2.282622e-03 7.000000e-01 2.323847e-03 8.000000e-01 2.364136e-03 9.000000e-01 2.403874e-03 1.000000e+00 2.443356e-03 1.100000e+00 2.482890e-03 1.200000e+00 2.522856e-03 1.000000e-01 2.831711e-03 2.000000e-01 3.534537e-03 3.000000e-01 3.691977e-03 4.000000e-01 3.775291e-03 5.000000e-01 3.839109e-03 6.000000e-01 3.895077e-03 7.000000e-01 3.947064e-03 8.000000e-01 3.996724e-03 9.000000e-01 4.044916e-03 1.000000e+00 4.092217e-03 1.100000e+00 4.139155e-03 1.200000e+00 4.186335e-03 1.000000e-01 3.584886e-03 2.000000e-01 4.938940e-03 3.000000e-01 5.245240e-03 4.000000e-01 5.371570e-03 5.000000e-01 5.456618e-03 6.000000e-01 5.526466e-03 7.000000e-01 5.589005e-03 8.000000e-01 5.647400e-03 9.000000e-01 5.703199e-03 1.000000e+00 5.757340e-03 1.100000e+00 5.810592e-03 1.200000e+00 5.863770e-03 1.000000e-01 4.129173e-03 2.000000e-01 6.182136e-03 3.000000e-01 6.748766e-03 4.000000e-01 6.940280e-03 5.000000e-01 7.052741e-03 6.000000e-01 7.138790e-03 7.000000e-01 7.212896e-03 8.000000e-01 7.280499e-03 9.000000e-01 7.344109e-03 1.000000e+00 7.405140e-03 1.100000e+00 7.464630e-03 1.200000e+00 7.523602e-03 1.000000e-01 4.521195e-03 2.000000e-01 7.202279e-03 3.000000e-01 8.166777e-03 4.000000e-01 8.461160e-03 5.000000e-01 8.611228e-03 6.000000e-01 8.717613e-03 7.000000e-01 8.805533e-03 8.000000e-01 8.883831e-03 9.000000e-01 8.956377e-03 1.000000e+00 9.025210e-03 1.100000e+00 9.091695e-03 1.200000e+00 9.157063e-03 1.000000e-01 4.766047e-03 2.000000e-01 7.941639e-03 3.000000e-01 9.422191e-03 4.000000e-01 9.885377e-03 5.000000e-01 1.008899e-02 6.000000e-01 1.022086e-02 7.000000e-01 1.032473e-02 8.000000e-01 1.041477e-02 9.000000e-01 1.049685e-02 1.000000e+00 1.057388e-02 1.100000e+00 1.064765e-02 1.200000e+00 1.071961e-02 1.000000e-01 4.937484e-03 2.000000e-01 8.486386e-03 3.000000e-01 1.050758e-02 4.000000e-01 1.123534e-02 5.000000e-01 1.151807e-02 6.000000e-01 1.168290e-02 7.000000e-01 1.180540e-02 8.000000e-01 1.190820e-02 9.000000e-01 1.200013e-02 1.000000e+00 1.208533e-02 1.100000e+00 1.216613e-02 1.200000e+00 1.224428e-02 1.000000e-01 7.276311e-07 2.000000e-01 7.866404e-07 3.000000e-01 8.275444e-07 4.000000e-01 8.674589e-07 5.000000e-01 9.082211e-07 6.000000e-01 9.504545e-07 7.000000e-01 9.946073e-07 8.000000e-01 1.041208e-06 9.000000e-01 1.091043e-06 1.000000e+00 1.145370e-06 1.100000e+00 1.206253e-06 1.200000e+00 1.277068e-06 1.000000e-01 4.002973e-06 2.000000e-01 4.327286e-06 3.000000e-01 4.545155e-06 4.000000e-01 4.755996e-06 5.000000e-01 4.969914e-06 6.000000e-01 5.189768e-06 7.000000e-01 5.416936e-06 8.000000e-01 5.652430e-06 9.000000e-01 5.897325e-06 1.000000e+00 6.153075e-06 1.100000e+00 6.421843e-06 1.200000e+00 6.706924e-06 1.000000e-01 1.989720e-05 2.000000e-01 2.162725e-05 3.000000e-01 2.267803e-05 4.000000e-01 2.367704e-05 5.000000e-01 2.468284e-05 6.000000e-01 2.571073e-05 7.000000e-01 2.676717e-05 8.000000e-01 2.785607e-05 9.000000e-01 2.898073e-05 1.000000e+00 3.014499e-05 1.100000e+00 3.135409e-05 1.200000e+00 3.261543e-05 1.000000e-01 8.360182e-05 2.000000e-01 9.373583e-05 3.000000e-01 9.814469e-05 4.000000e-01 1.020877e-04 5.000000e-01 1.059739e-04 6.000000e-01 1.098948e-04 7.000000e-01 1.138838e-04 8.000000e-01 1.179575e-04 9.000000e-01 1.221274e-04 1.000000e+00 1.264051e-04 1.100000e+00 1.308058e-04 1.200000e+00 1.353508e-04 1.000000e-01 2.436161e-04 2.000000e-01 3.039808e-04 3.000000e-01 3.195287e-04 4.000000e-01 3.307033e-04 5.000000e-01 3.410702e-04 6.000000e-01 3.512358e-04 7.000000e-01 3.613845e-04 8.000000e-01 3.715936e-04 9.000000e-01 3.819042e-04 1.000000e+00 3.923479e-04 1.100000e+00 4.029603e-04 1.200000e+00 4.137902e-04 1.000000e-01 4.606492e-04 2.000000e-01 6.686213e-04 3.000000e-01 7.263837e-04 4.000000e-01 7.515324e-04 5.000000e-01 7.713167e-04 6.000000e-01 7.896038e-04 7.000000e-01 8.073247e-04 8.000000e-01 8.248112e-04 9.000000e-01 8.422140e-04 1.000000e+00 8.596211e-04 1.100000e+00 8.771058e-04 1.200000e+00 8.947552e-04 1.000000e-01 6.604315e-04 2.000000e-01 1.059904e-03 3.000000e-01 1.235385e-03 4.000000e-01 1.295608e-03 5.000000e-01 1.329258e-03 6.000000e-01 1.356688e-03 7.000000e-01 1.381933e-03 8.000000e-01 1.406186e-03 9.000000e-01 1.429919e-03 1.000000e+00 1.453365e-03 1.100000e+00 1.476671e-03 1.200000e+00 1.499972e-03 1.000000e-01 8.195210e-04 2.000000e-01 1.388834e-03 3.000000e-01 1.724676e-03 4.000000e-01 1.871078e-03 5.000000e-01 1.932613e-03 6.000000e-01 1.972547e-03 7.000000e-01 2.006056e-03 8.000000e-01 2.036935e-03 9.000000e-01 2.066480e-03 1.000000e+00 2.095256e-03 1.100000e+00 2.123561e-03 1.200000e+00 2.151603e-03 1.000000e-01 9.422133e-04 2.000000e-01 1.649309e-03 3.000000e-01 2.133281e-03 4.000000e-01 2.408907e-03 5.000000e-01 2.531440e-03 6.000000e-01 2.593336e-03 7.000000e-01 2.637869e-03 8.000000e-01 2.676238e-03 9.000000e-01 2.711774e-03 1.000000e+00 2.745754e-03 1.100000e+00 2.778779e-03 1.200000e+00 2.811195e-03 1.000000e-01 1.037228e-03 2.000000e-01 1.854921e-03 3.000000e-01 2.462910e-03 4.000000e-01 2.869553e-03 5.000000e-01 3.092358e-03 6.000000e-01 3.197451e-03 7.000000e-01 3.259522e-03 8.000000e-01 3.307603e-03 9.000000e-01 3.349982e-03 1.000000e+00 3.389486e-03 1.100000e+00 3.427306e-03 1.200000e+00 3.464046e-03 1.000000e-01 1.111571e-03 2.000000e-01 2.018513e-03 3.000000e-01 2.729071e-03 4.000000e-01 3.250100e-03 5.000000e-01 3.587815e-03 6.000000e-01 3.767858e-03 7.000000e-01 3.861229e-03 8.000000e-01 3.923613e-03 9.000000e-01 3.974587e-03 1.000000e+00 4.020366e-03 1.100000e+00 4.063315e-03 1.200000e+00 4.104518e-03 1.000000e-01 1.170186e-03 2.000000e-01 2.149627e-03 3.000000e-01 2.945225e-03 4.000000e-01 3.563050e-03 5.000000e-01 4.007432e-03 6.000000e-01 4.285017e-03 7.000000e-01 4.433077e-03 8.000000e-01 4.518899e-03 9.000000e-01 4.581783e-03 1.000000e+00 4.635212e-03 1.100000e+00 4.683924e-03 1.200000e+00 4.729898e-03 tmpk8ny_4pz/tests/bsim4/nmos/reference/acFreq_wpemod.standard0000644000175000017500000000712113546075722024551 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 1258.925 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 1584.893 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 1995.262 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 2511.886 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 3162.278 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 3981.072 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 5011.872 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 6309.573 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 7943.282 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 10000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 12589.25 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 15848.93 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 19952.62 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 25118.86 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 31622.78 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 39810.72 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 50118.72 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 63095.73 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 79432.82 1.39210168579019e-14 1.01277256219657e-14 3.71918252520243e-15 100000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 125892.5 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 158489.3 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 199526.2 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 251188.6 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 316227.8 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 398107.2 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 501187.2 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 630957.3 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 794328.2 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 1000000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 1258925 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 1584893 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 1995262 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 2511886 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 3162278 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 3981072 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 5011872 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 6309573 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 7943282 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 10000000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 12589250 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 15848930 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 19952620 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 25118860 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 31622780 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 39810720 1.39210123081412e-14 1.0127724190444e-14 3.71918106361498e-15 50118720 1.39210147331426e-14 1.01277239885519e-14 3.71918272852533e-15 63095730 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 79432820 1.39210148542597e-14 1.01277236183236e-14 3.71918052156032e-15 100000000 1.39210139003943e-14 1.01277229444892e-14 3.71918045665434e-15 tmpk8ny_4pz/tests/bsim4/nmos/reference/dcSweep_scc.standard0000644000175000017500000002575213546075722024231 0ustar carstencarstenV(d) I(d) 1.000000e-01 5.381036e-07 2.000000e-01 8.979352e-07 3.000000e-01 1.458523e-06 4.000000e-01 2.345919e-06 5.000000e-01 3.743979e-06 6.000000e-01 5.928842e-06 7.000000e-01 9.309998e-06 8.000000e-01 1.448406e-05 9.000000e-01 2.230339e-05 1.000000e+00 3.396036e-05 1.100000e+00 5.108560e-05 1.200000e+00 7.585441e-05 1.000000e-01 6.175374e-06 2.000000e-01 9.996042e-06 3.000000e-01 1.566575e-05 4.000000e-01 2.417709e-05 5.000000e-01 3.680960e-05 6.000000e-01 5.527369e-05 7.000000e-01 8.179037e-05 8.000000e-01 1.191243e-04 9.000000e-01 1.705364e-04 1.000000e+00 2.396239e-04 1.100000e+00 3.300467e-04 1.200000e+00 4.451953e-04 1.000000e-01 5.603719e-05 2.000000e-01 8.564974e-05 3.000000e-01 1.256776e-04 4.000000e-01 1.802895e-04 5.000000e-01 2.531861e-04 6.000000e-01 3.478281e-04 7.000000e-01 4.670448e-04 8.000000e-01 6.126440e-04 9.000000e-01 7.852036e-04 1.000000e+00 9.841360e-04 1.100000e+00 1.208010e-03 1.200000e+00 1.455038e-03 1.000000e-01 3.365708e-04 2.000000e-01 4.731344e-04 3.000000e-01 6.258448e-04 4.000000e-01 8.032825e-04 5.000000e-01 1.005617e-03 6.000000e-01 1.231184e-03 7.000000e-01 1.477470e-03 8.000000e-01 1.741619e-03 9.000000e-01 2.020814e-03 1.000000e+00 2.312608e-03 1.100000e+00 2.615194e-03 1.200000e+00 2.927631e-03 1.000000e-01 1.078590e-03 2.000000e-01 1.427275e-03 3.000000e-01 1.711529e-03 4.000000e-01 1.997733e-03 5.000000e-01 2.291821e-03 6.000000e-01 2.593736e-03 7.000000e-01 2.902373e-03 8.000000e-01 3.216532e-03 9.000000e-01 3.535218e-03 1.000000e+00 3.857820e-03 1.100000e+00 4.184298e-03 1.200000e+00 4.515363e-03 1.000000e-01 1.966489e-03 2.000000e-01 2.694690e-03 3.000000e-01 3.087158e-03 4.000000e-01 3.431488e-03 5.000000e-01 3.765245e-03 6.000000e-01 4.096264e-03 7.000000e-01 4.426871e-03 8.000000e-01 4.757875e-03 9.000000e-01 5.089625e-03 1.000000e+00 5.422472e-03 1.100000e+00 5.757099e-03 1.200000e+00 6.094820e-03 1.000000e-01 2.647620e-03 2.000000e-01 3.934138e-03 3.000000e-01 4.490970e-03 4.000000e-01 4.888747e-03 5.000000e-01 5.250041e-03 6.000000e-01 5.598883e-03 7.000000e-01 5.942449e-03 8.000000e-01 6.283548e-03 9.000000e-01 6.623523e-03 1.000000e+00 6.963260e-03 1.100000e+00 7.303747e-03 1.200000e+00 7.646505e-03 1.000000e-01 3.121627e-03 2.000000e-01 4.977198e-03 3.000000e-01 5.828211e-03 4.000000e-01 6.309533e-03 5.000000e-01 6.705044e-03 6.000000e-01 7.073379e-03 7.000000e-01 7.430342e-03 8.000000e-01 7.781726e-03 9.000000e-01 8.130143e-03 1.000000e+00 8.477066e-03 1.100000e+00 8.823745e-03 1.200000e+00 9.171809e-03 1.000000e-01 3.459366e-03 2.000000e-01 5.786304e-03 3.000000e-01 7.049916e-03 4.000000e-01 7.676678e-03 5.000000e-01 8.123155e-03 6.000000e-01 8.516979e-03 7.000000e-01 8.890143e-03 8.000000e-01 9.253415e-03 9.000000e-01 9.611348e-03 1.000000e+00 9.966270e-03 1.100000e+00 1.031979e-02 1.200000e+00 1.067365e-02 1.000000e-01 3.709371e-03 2.000000e-01 6.404043e-03 3.000000e-01 8.109684e-03 4.000000e-01 8.973978e-03 5.000000e-01 9.500490e-03 6.000000e-01 9.929411e-03 7.000000e-01 1.032288e-02 8.000000e-01 1.070018e-02 9.000000e-01 1.106892e-02 1.000000e+00 1.143272e-02 1.100000e+00 1.179374e-02 1.200000e+00 1.215392e-02 1.000000e-01 3.900511e-03 2.000000e-01 6.883659e-03 3.000000e-01 8.983496e-03 4.000000e-01 1.017591e-02 5.000000e-01 1.082983e-02 6.000000e-01 1.130891e-02 7.000000e-01 1.172853e-02 8.000000e-01 1.212265e-02 9.000000e-01 1.250374e-02 1.000000e+00 1.287741e-02 1.100000e+00 1.324664e-02 1.200000e+00 1.361368e-02 1.000000e-01 4.050406e-03 2.000000e-01 7.264261e-03 3.000000e-01 9.687450e-03 4.000000e-01 1.124967e-02 5.000000e-01 1.209852e-02 6.000000e-01 1.265156e-02 7.000000e-01 1.310595e-02 8.000000e-01 1.352068e-02 9.000000e-01 1.391611e-02 1.000000e+00 1.430081e-02 1.100000e+00 1.467905e-02 1.200000e+00 1.505357e-02 1.000000e-01 7.321028e-08 2.000000e-01 1.375764e-07 3.000000e-01 2.536872e-07 4.000000e-01 4.640314e-07 5.000000e-01 8.424837e-07 6.000000e-01 1.516439e-06 7.000000e-01 2.700786e-06 8.000000e-01 4.748026e-06 9.000000e-01 8.217731e-06 1.000000e+00 1.396616e-05 1.100000e+00 2.325376e-05 1.200000e+00 3.786694e-05 1.000000e-01 2.075842e-06 2.000000e-01 3.741078e-06 3.000000e-01 6.542583e-06 4.000000e-01 1.120680e-05 5.000000e-01 1.879079e-05 6.000000e-01 3.078970e-05 7.000000e-01 4.922683e-05 8.000000e-01 7.671926e-05 9.000000e-01 1.165001e-04 1.000000e+00 1.723658e-04 1.100000e+00 2.485040e-04 1.200000e+00 3.491799e-04 1.000000e-01 3.962783e-05 2.000000e-01 6.367046e-05 3.000000e-01 9.807032e-05 4.000000e-01 1.466088e-04 5.000000e-01 2.131723e-04 6.000000e-01 3.016524e-04 7.000000e-01 4.154759e-04 8.000000e-01 5.570550e-04 9.000000e-01 7.273784e-04 1.000000e+00 9.259365e-04 1.100000e+00 1.151040e-03 1.200000e+00 1.400437e-03 1.000000e-01 3.472832e-04 2.000000e-01 4.836094e-04 3.000000e-01 6.416803e-04 4.000000e-01 8.260673e-04 5.000000e-01 1.036062e-03 6.000000e-01 1.269272e-03 7.000000e-01 1.522506e-03 8.000000e-01 1.792368e-03 9.000000e-01 2.075732e-03 1.000000e+00 2.370096e-03 1.100000e+00 2.673833e-03 1.200000e+00 2.986366e-03 1.000000e-01 1.272216e-03 2.000000e-01 1.594399e-03 3.000000e-01 1.882878e-03 4.000000e-01 2.173914e-03 5.000000e-01 2.470903e-03 6.000000e-01 2.773539e-03 7.000000e-01 3.080925e-03 8.000000e-01 3.392216e-03 9.000000e-01 3.706839e-03 1.000000e+00 4.024657e-03 1.100000e+00 4.346137e-03 1.200000e+00 4.672512e-03 1.000000e-01 2.461389e-03 2.000000e-01 3.044287e-03 3.000000e-01 3.409153e-03 4.000000e-01 3.742685e-03 5.000000e-01 4.068030e-03 6.000000e-01 4.390920e-03 7.000000e-01 4.713334e-03 8.000000e-01 5.036113e-03 9.000000e-01 5.359768e-03 1.000000e+00 5.684901e-03 1.100000e+00 6.012529e-03 1.200000e+00 6.344369e-03 1.000000e-01 3.406496e-03 2.000000e-01 4.485676e-03 3.000000e-01 4.947536e-03 4.000000e-01 5.316437e-03 5.000000e-01 5.661196e-03 6.000000e-01 5.997142e-03 7.000000e-01 6.329412e-03 8.000000e-01 6.660187e-03 9.000000e-01 6.990627e-03 1.000000e+00 7.321669e-03 1.100000e+00 7.654527e-03 1.200000e+00 7.991088e-03 1.000000e-01 4.031881e-03 2.000000e-01 5.795369e-03 3.000000e-01 6.437274e-03 4.000000e-01 6.857711e-03 5.000000e-01 7.226512e-03 6.000000e-01 7.577328e-03 7.000000e-01 7.920407e-03 8.000000e-01 8.259831e-03 9.000000e-01 8.597587e-03 1.000000e+00 8.934983e-03 1.100000e+00 9.273395e-03 1.200000e+00 9.614801e-03 1.000000e-01 4.447752e-03 2.000000e-01 6.897105e-03 3.000000e-01 7.856388e-03 4.000000e-01 8.360232e-03 5.000000e-01 8.762310e-03 6.000000e-01 9.131724e-03 7.000000e-01 9.487499e-03 8.000000e-01 9.836697e-03 9.000000e-01 1.018253e-02 1.000000e+00 1.052683e-02 1.100000e+00 1.087119e-02 1.200000e+00 1.121766e-02 1.000000e-01 4.738214e-03 2.000000e-01 7.757390e-03 3.000000e-01 9.175754e-03 4.000000e-01 9.817568e-03 5.000000e-01 1.026749e-02 6.000000e-01 1.066078e-02 7.000000e-01 1.103168e-02 8.000000e-01 1.139197e-02 9.000000e-01 1.174669e-02 1.000000e+00 1.209847e-02 1.100000e+00 1.244919e-02 1.200000e+00 1.280097e-02 1.000000e-01 4.934493e-03 2.000000e-01 8.388412e-03 3.000000e-01 1.034314e-02 4.000000e-01 1.121284e-02 5.000000e-01 1.173643e-02 6.000000e-01 1.216280e-02 7.000000e-01 1.255290e-02 8.000000e-01 1.292607e-02 9.000000e-01 1.329063e-02 1.000000e+00 1.365051e-02 1.100000e+00 1.400805e-02 1.200000e+00 1.436550e-02 1.000000e-01 5.076453e-03 2.000000e-01 8.854427e-03 3.000000e-01 1.131542e-02 4.000000e-01 1.252094e-02 5.000000e-01 1.315716e-02 6.000000e-01 1.362882e-02 7.000000e-01 1.404363e-02 8.000000e-01 1.443366e-02 9.000000e-01 1.481101e-02 1.000000e+00 1.518117e-02 1.100000e+00 1.554718e-02 1.200000e+00 1.591142e-02 1.000000e-01 3.086192e-06 2.000000e-01 4.621116e-06 3.000000e-01 6.672341e-06 4.000000e-01 9.545743e-06 5.000000e-01 1.357522e-05 6.000000e-01 1.920386e-05 7.000000e-01 2.702344e-05 8.000000e-01 3.781735e-05 9.000000e-01 5.261004e-05 1.000000e+00 7.272259e-05 1.100000e+00 9.983155e-05 1.200000e+00 1.360261e-04 1.000000e-01 1.657772e-05 2.000000e-01 2.439951e-05 3.000000e-01 3.450415e-05 4.000000e-01 4.823817e-05 5.000000e-01 6.687828e-05 6.000000e-01 9.198042e-05 7.000000e-01 1.254321e-04 8.000000e-01 1.694518e-04 9.000000e-01 2.265423e-04 1.000000e+00 2.993961e-04 1.100000e+00 3.907660e-04 1.200000e+00 5.033272e-04 1.000000e-01 7.825845e-05 2.000000e-01 1.128577e-04 3.000000e-01 1.544802e-04 4.000000e-01 2.079002e-04 5.000000e-01 2.759354e-04 6.000000e-01 3.611870e-04 7.000000e-01 4.659963e-04 8.000000e-01 5.922686e-04 9.000000e-01 7.413231e-04 1.000000e+00 9.138362e-04 1.100000e+00 1.109908e-03 1.200000e+00 1.329252e-03 1.000000e-01 2.933428e-04 2.000000e-01 4.158853e-04 3.000000e-01 5.381511e-04 4.000000e-01 6.790645e-04 5.000000e-01 8.412619e-04 6.000000e-01 1.025251e-03 7.000000e-01 1.230599e-03 8.000000e-01 1.456246e-03 9.000000e-01 1.700731e-03 1.000000e+00 1.962420e-03 1.100000e+00 2.239778e-03 1.200000e+00 2.531640e-03 1.000000e-01 7.299964e-04 2.000000e-01 1.066847e-03 3.000000e-01 1.304685e-03 4.000000e-01 1.542987e-03 5.000000e-01 1.793489e-03 6.000000e-01 2.057408e-03 7.000000e-01 2.334023e-03 8.000000e-01 2.622101e-03 9.000000e-01 2.920318e-03 1.000000e+00 3.227483e-03 1.100000e+00 3.542747e-03 1.200000e+00 3.865813e-03 1.000000e-01 1.219490e-03 2.000000e-01 1.922472e-03 3.000000e-01 2.314048e-03 4.000000e-01 2.631167e-03 5.000000e-01 2.938244e-03 6.000000e-01 3.246975e-03 7.000000e-01 3.560041e-03 8.000000e-01 3.877959e-03 9.000000e-01 4.200591e-03 1.000000e+00 4.527666e-03 1.100000e+00 4.859074e-03 1.200000e+00 5.195153e-03 1.000000e-01 1.615186e-03 2.000000e-01 2.706375e-03 3.000000e-01 3.347917e-03 4.000000e-01 3.758968e-03 5.000000e-01 4.111663e-03 6.000000e-01 4.450107e-03 7.000000e-01 4.785232e-03 8.000000e-01 5.120549e-03 9.000000e-01 5.457365e-03 1.000000e+00 5.796222e-03 1.100000e+00 6.137501e-03 1.200000e+00 6.481837e-03 1.000000e-01 1.905921e-03 2.000000e-01 3.315208e-03 3.000000e-01 4.262445e-03 4.000000e-01 4.832844e-03 5.000000e-01 5.246577e-03 6.000000e-01 5.616272e-03 7.000000e-01 5.971894e-03 8.000000e-01 6.322603e-03 9.000000e-01 6.671887e-03 1.000000e+00 7.021296e-03 1.100000e+00 7.371697e-03 1.200000e+00 7.723929e-03 1.000000e-01 2.119122e-03 2.000000e-01 3.776007e-03 3.000000e-01 5.002170e-03 4.000000e-01 5.804055e-03 5.000000e-01 6.320089e-03 6.000000e-01 6.733725e-03 7.000000e-01 7.114284e-03 8.000000e-01 7.482293e-03 9.000000e-01 7.845076e-03 1.000000e+00 8.205761e-03 1.100000e+00 8.565930e-03 1.200000e+00 8.926699e-03 1.000000e-01 2.278844e-03 2.000000e-01 4.129832e-03 3.000000e-01 5.584225e-03 4.000000e-01 6.636839e-03 5.000000e-01 7.315731e-03 6.000000e-01 7.798441e-03 7.000000e-01 8.213004e-03 8.000000e-01 8.602258e-03 9.000000e-01 8.980606e-03 1.000000e+00 9.353841e-03 1.100000e+00 9.724694e-03 1.200000e+00 1.009476e-02 1.000000e-01 2.401058e-03 2.000000e-01 4.406463e-03 3.000000e-01 6.045474e-03 4.000000e-01 7.320852e-03 5.000000e-01 8.210303e-03 6.000000e-01 8.802992e-03 7.000000e-01 9.267156e-03 8.000000e-01 9.683942e-03 9.000000e-01 1.008085e-02 1.000000e+00 1.046829e-02 1.100000e+00 1.085086e-02 1.200000e+00 1.123099e-02 1.000000e-01 2.496042e-03 2.000000e-01 4.625850e-03 3.000000e-01 6.415743e-03 4.000000e-01 7.875165e-03 5.000000e-01 8.980567e-03 6.000000e-01 9.732659e-03 7.000000e-01 1.027217e-02 8.000000e-01 1.072657e-02 9.000000e-01 1.114648e-02 1.000000e+00 1.155035e-02 1.100000e+00 1.194594e-02 1.200000e+00 1.233698e-02 tmpk8ny_4pz/tests/bsim4/nmos/reference/dcSweep_lw7.standard0000644000175000017500000002575213546075722024172 0ustar carstencarstenV(d) I(d) 1.000000e-01 3.177379e-08 2.000000e-01 5.302250e-08 3.000000e-01 8.612569e-08 4.000000e-01 1.385272e-07 5.000000e-01 2.210844e-07 6.000000e-01 3.501053e-07 7.000000e-01 5.497751e-07 8.000000e-01 8.553350e-07 9.000000e-01 1.317142e-06 1.000000e+00 2.005658e-06 1.100000e+00 3.017278e-06 1.200000e+00 4.480652e-06 1.000000e-01 3.646553e-07 2.000000e-01 5.902927e-07 3.000000e-01 9.251402e-07 4.000000e-01 1.427848e-06 5.000000e-01 2.174045e-06 6.000000e-01 3.264873e-06 7.000000e-01 4.831752e-06 8.000000e-01 7.038400e-06 9.000000e-01 1.007812e-05 1.000000e+00 1.416445e-05 1.100000e+00 1.951500e-05 1.200000e+00 2.633173e-05 1.000000e-01 3.310041e-06 2.000000e-01 5.059972e-06 3.000000e-01 7.426052e-06 4.000000e-01 1.065528e-05 5.000000e-01 1.496737e-05 6.000000e-01 2.056820e-05 7.000000e-01 2.762660e-05 8.000000e-01 3.625109e-05 9.000000e-01 4.647729e-05 1.000000e+00 5.827151e-05 1.100000e+00 7.154968e-05 1.200000e+00 8.620628e-05 1.000000e-01 1.990511e-05 2.000000e-01 2.798868e-05 3.000000e-01 3.703411e-05 4.000000e-01 4.754926e-05 5.000000e-01 5.954499e-05 6.000000e-01 7.292330e-05 7.000000e-01 8.753548e-05 8.000000e-01 1.032121e-04 9.000000e-01 1.197858e-04 1.000000e+00 1.371112e-04 1.100000e+00 1.550806e-04 1.200000e+00 1.736379e-04 1.000000e-01 6.391579e-05 2.000000e-01 8.456601e-05 3.000000e-01 1.014279e-04 4.000000e-01 1.184139e-04 5.000000e-01 1.358728e-04 6.000000e-01 1.538001e-04 7.000000e-01 1.721297e-04 8.000000e-01 1.907898e-04 9.000000e-01 2.097209e-04 1.000000e+00 2.288865e-04 1.100000e+00 2.482841e-04 1.200000e+00 2.679560e-04 1.000000e-01 1.167770e-04 2.000000e-01 1.598476e-04 3.000000e-01 1.831179e-04 4.000000e-01 2.035597e-04 5.000000e-01 2.233817e-04 6.000000e-01 2.430450e-04 7.000000e-01 2.626862e-04 8.000000e-01 2.823527e-04 9.000000e-01 3.020648e-04 1.000000e+00 3.218433e-04 1.100000e+00 3.417289e-04 1.200000e+00 3.617998e-04 1.000000e-01 1.574929e-04 2.000000e-01 2.336135e-04 3.000000e-01 2.665466e-04 4.000000e-01 2.901437e-04 5.000000e-01 3.115981e-04 6.000000e-01 3.323205e-04 7.000000e-01 3.527331e-04 8.000000e-01 3.730011e-04 9.000000e-01 3.932036e-04 1.000000e+00 4.133931e-04 1.100000e+00 4.336285e-04 1.200000e+00 4.540005e-04 1.000000e-01 1.859126e-04 2.000000e-01 2.958846e-04 3.000000e-01 3.460967e-04 4.000000e-01 3.745939e-04 5.000000e-01 3.980642e-04 6.000000e-01 4.199392e-04 7.000000e-01 4.411458e-04 8.000000e-01 4.620244e-04 9.000000e-01 4.827285e-04 1.000000e+00 5.033453e-04 1.100000e+00 5.239490e-04 1.200000e+00 5.446370e-04 1.000000e-01 2.062040e-04 2.000000e-01 3.443439e-04 3.000000e-01 4.189043e-04 4.000000e-01 4.558998e-04 5.000000e-01 4.823580e-04 6.000000e-01 5.057339e-04 7.000000e-01 5.278974e-04 8.000000e-01 5.494798e-04 9.000000e-01 5.707481e-04 1.000000e+00 5.918395e-04 1.100000e+00 6.128493e-04 1.200000e+00 6.338818e-04 1.000000e-01 2.212463e-04 2.000000e-01 3.814234e-04 3.000000e-01 4.822443e-04 4.000000e-01 5.331266e-04 5.000000e-01 5.642560e-04 6.000000e-01 5.896901e-04 7.000000e-01 6.130493e-04 8.000000e-01 6.354599e-04 9.000000e-01 6.573677e-04 1.000000e+00 6.789852e-04 1.100000e+00 7.004401e-04 1.200000e+00 7.218470e-04 1.000000e-01 2.327596e-04 2.000000e-01 4.102534e-04 3.000000e-01 5.346325e-04 4.000000e-01 6.048016e-04 5.000000e-01 6.433448e-04 6.000000e-01 6.717080e-04 7.000000e-01 6.966024e-04 8.000000e-01 7.200034e-04 9.000000e-01 7.426411e-04 1.000000e+00 7.648420e-04 1.100000e+00 7.867833e-04 1.200000e+00 8.085968e-04 1.000000e-01 2.417960e-04 2.000000e-01 4.331557e-04 3.000000e-01 5.769283e-04 4.000000e-01 6.690082e-04 5.000000e-01 7.189005e-04 6.000000e-01 7.515654e-04 7.000000e-01 7.784921e-04 8.000000e-01 8.031039e-04 9.000000e-01 8.265861e-04 1.000000e+00 8.494388e-04 1.100000e+00 8.719128e-04 1.200000e+00 8.941691e-04 1.000000e-01 4.321583e-09 2.000000e-01 8.121870e-09 3.000000e-01 1.497699e-08 4.000000e-01 2.739556e-08 5.000000e-01 4.973925e-08 6.000000e-01 8.952984e-08 7.000000e-01 1.594553e-07 8.000000e-01 2.803305e-07 9.000000e-01 4.852009e-07 1.000000e+00 8.246412e-07 1.100000e+00 1.373121e-06 1.200000e+00 2.236223e-06 1.000000e-01 1.225365e-07 2.000000e-01 2.208589e-07 3.000000e-01 3.862723e-07 4.000000e-01 6.616865e-07 5.000000e-01 1.109556e-06 6.000000e-01 1.818260e-06 7.000000e-01 2.907482e-06 8.000000e-01 4.532181e-06 9.000000e-01 6.884040e-06 1.000000e+00 1.018848e-05 1.100000e+00 1.469457e-05 1.200000e+00 2.065647e-05 1.000000e-01 2.340125e-06 2.000000e-01 3.760925e-06 3.000000e-01 5.794524e-06 4.000000e-01 8.665346e-06 5.000000e-01 1.260453e-05 6.000000e-01 1.784398e-05 7.000000e-01 2.458845e-05 8.000000e-01 3.298258e-05 9.000000e-01 4.308635e-05 1.000000e+00 5.487031e-05 1.100000e+00 6.823449e-05 1.200000e+00 8.304495e-05 1.000000e-01 2.055255e-05 2.000000e-01 2.863374e-05 3.000000e-01 3.801034e-05 4.000000e-01 4.895325e-05 5.000000e-01 6.142054e-05 6.000000e-01 7.527001e-05 7.000000e-01 9.031164e-05 8.000000e-01 1.063433e-04 9.000000e-01 1.231789e-04 1.000000e+00 1.406693e-04 1.100000e+00 1.587176e-04 1.200000e+00 1.772896e-04 1.000000e-01 7.549961e-05 2.000000e-01 9.461194e-05 3.000000e-01 1.117460e-04 4.000000e-01 1.290364e-04 5.000000e-01 1.466822e-04 6.000000e-01 1.646646e-04 7.000000e-01 1.829298e-04 8.000000e-01 2.014274e-04 9.000000e-01 2.201234e-04 1.000000e+00 2.390097e-04 1.100000e+00 2.581141e-04 1.200000e+00 2.775105e-04 1.000000e-01 1.463693e-04 2.000000e-01 1.808234e-04 3.000000e-01 2.024755e-04 4.000000e-01 2.222857e-04 5.000000e-01 2.416145e-04 6.000000e-01 2.607993e-04 7.000000e-01 2.799568e-04 8.000000e-01 2.991365e-04 9.000000e-01 3.183687e-04 1.000000e+00 3.376893e-04 1.100000e+00 3.571592e-04 1.200000e+00 3.768810e-04 1.000000e-01 2.029990e-04 2.000000e-01 2.666127e-04 3.000000e-01 2.939469e-04 4.000000e-01 3.158392e-04 5.000000e-01 3.363141e-04 6.000000e-01 3.562712e-04 7.000000e-01 3.760121e-04 8.000000e-01 3.956656e-04 9.000000e-01 4.153000e-04 1.000000e+00 4.349712e-04 1.100000e+00 4.547517e-04 1.200000e+00 4.747545e-04 1.000000e-01 2.406680e-04 2.000000e-01 3.447483e-04 3.000000e-01 3.825668e-04 4.000000e-01 4.074742e-04 5.000000e-01 4.293625e-04 6.000000e-01 4.501964e-04 7.000000e-01 4.705763e-04 8.000000e-01 4.907416e-04 9.000000e-01 5.108095e-04 1.000000e+00 5.308575e-04 1.100000e+00 5.509676e-04 1.200000e+00 5.712585e-04 1.000000e-01 2.657917e-04 2.000000e-01 4.107750e-04 3.000000e-01 4.670721e-04 4.000000e-01 4.968301e-04 5.000000e-01 5.206655e-04 6.000000e-01 5.425928e-04 7.000000e-01 5.637214e-04 8.000000e-01 5.844645e-04 9.000000e-01 6.050103e-04 1.000000e+00 6.254676e-04 1.100000e+00 6.459305e-04 1.200000e+00 6.665216e-04 1.000000e-01 2.833692e-04 2.000000e-01 4.625960e-04 3.000000e-01 5.458032e-04 4.000000e-01 5.835450e-04 5.000000e-01 6.101651e-04 6.000000e-01 6.334904e-04 7.000000e-01 6.555085e-04 8.000000e-01 6.769060e-04 9.000000e-01 6.979774e-04 1.000000e+00 7.188769e-04 1.100000e+00 7.397166e-04 1.200000e+00 7.606234e-04 1.000000e-01 2.952604e-04 2.000000e-01 5.007422e-04 3.000000e-01 6.157313e-04 4.000000e-01 6.666514e-04 5.000000e-01 6.975387e-04 6.000000e-01 7.227935e-04 7.000000e-01 7.459377e-04 8.000000e-01 7.680931e-04 9.000000e-01 7.897454e-04 1.000000e+00 8.111238e-04 1.100000e+00 8.323672e-04 1.200000e+00 8.536095e-04 1.000000e-01 3.038666e-04 2.000000e-01 5.289597e-04 3.000000e-01 6.742725e-04 4.000000e-01 7.447155e-04 5.000000e-01 7.820955e-04 6.000000e-01 8.099783e-04 7.000000e-01 8.345665e-04 8.000000e-01 8.577123e-04 9.000000e-01 8.801180e-04 1.000000e+00 9.021035e-04 1.100000e+00 9.238472e-04 1.200000e+00 9.454912e-04 1.000000e-01 1.822508e-07 2.000000e-01 2.728966e-07 3.000000e-01 3.940342e-07 4.000000e-01 5.637287e-07 5.000000e-01 8.017030e-07 6.000000e-01 1.134132e-06 7.000000e-01 1.595978e-06 8.000000e-01 2.233535e-06 9.000000e-01 3.107352e-06 1.000000e+00 4.295535e-06 1.100000e+00 5.897243e-06 1.200000e+00 8.036083e-06 1.000000e-01 9.790373e-07 2.000000e-01 1.441014e-06 3.000000e-01 2.037861e-06 4.000000e-01 2.849147e-06 5.000000e-01 3.950350e-06 6.000000e-01 5.433499e-06 7.000000e-01 7.410284e-06 8.000000e-01 1.001207e-05 9.000000e-01 1.338716e-05 1.000000e+00 1.769527e-05 1.100000e+00 2.309987e-05 1.200000e+00 2.976003e-05 1.000000e-01 4.622928e-06 2.000000e-01 6.667277e-06 3.000000e-01 9.127183e-06 4.000000e-01 1.228500e-05 5.000000e-01 1.630771e-05 6.000000e-01 2.134972e-05 7.000000e-01 2.755024e-05 8.000000e-01 3.502285e-05 9.000000e-01 4.384657e-05 1.000000e+00 5.406240e-05 1.100000e+00 6.567721e-05 1.200000e+00 7.867480e-05 1.000000e-01 1.734037e-05 2.000000e-01 2.458569e-05 3.000000e-01 3.181905e-05 4.000000e-01 4.015852e-05 5.000000e-01 4.976070e-05 6.000000e-01 6.065638e-05 7.000000e-01 7.282068e-05 8.000000e-01 8.619153e-05 9.000000e-01 1.006827e-04 1.000000e+00 1.161980e-04 1.100000e+00 1.326465e-04 1.200000e+00 1.499594e-04 1.000000e-01 4.320259e-05 2.000000e-01 6.312432e-05 3.000000e-01 7.720624e-05 4.000000e-01 9.132383e-05 5.000000e-01 1.061692e-04 6.000000e-01 1.218142e-04 7.000000e-01 1.382160e-04 8.000000e-01 1.553014e-04 9.000000e-01 1.729919e-04 1.000000e+00 1.912170e-04 1.100000e+00 2.099262e-04 1.200000e+00 2.291018e-04 1.000000e-01 7.226301e-05 2.000000e-01 1.138568e-04 3.000000e-01 1.370322e-04 4.000000e-01 1.558256e-04 5.000000e-01 1.740340e-04 6.000000e-01 1.923462e-04 7.000000e-01 2.109198e-04 8.000000e-01 2.297848e-04 9.000000e-01 2.489330e-04 1.000000e+00 2.683480e-04 1.100000e+00 2.880231e-04 1.200000e+00 3.079785e-04 1.000000e-01 9.580794e-05 2.000000e-01 1.604296e-04 3.000000e-01 1.983748e-04 4.000000e-01 2.227178e-04 5.000000e-01 2.436312e-04 6.000000e-01 2.637102e-04 7.000000e-01 2.835981e-04 8.000000e-01 3.035015e-04 9.000000e-01 3.234971e-04 1.000000e+00 3.436168e-04 1.100000e+00 3.638829e-04 1.200000e+00 3.843333e-04 1.000000e-01 1.131375e-04 2.000000e-01 1.966690e-04 3.000000e-01 2.527179e-04 4.000000e-01 2.864535e-04 5.000000e-01 3.109689e-04 6.000000e-01 3.328990e-04 7.000000e-01 3.540045e-04 8.000000e-01 3.748242e-04 9.000000e-01 3.955631e-04 1.000000e+00 4.163125e-04 1.100000e+00 4.371234e-04 1.200000e+00 4.580457e-04 1.000000e-01 1.258618e-04 2.000000e-01 2.241354e-04 3.000000e-01 2.967488e-04 4.000000e-01 3.441557e-04 5.000000e-01 3.746903e-04 6.000000e-01 3.992122e-04 7.000000e-01 4.217937e-04 8.000000e-01 4.436399e-04 9.000000e-01 4.651814e-04 1.000000e+00 4.866020e-04 1.100000e+00 5.079948e-04 1.200000e+00 5.294259e-04 1.000000e-01 1.354032e-04 2.000000e-01 2.452476e-04 3.000000e-01 3.314400e-04 4.000000e-01 3.937084e-04 5.000000e-01 4.338303e-04 6.000000e-01 4.624135e-04 7.000000e-01 4.870005e-04 8.000000e-01 5.101038e-04 9.000000e-01 5.325682e-04 1.000000e+00 5.547343e-04 1.100000e+00 5.767623e-04 1.200000e+00 5.987466e-04 1.000000e-01 1.427092e-04 2.000000e-01 2.617670e-04 3.000000e-01 3.589568e-04 4.000000e-01 4.344683e-04 5.000000e-01 4.870287e-04 6.000000e-01 5.220709e-04 7.000000e-01 5.495745e-04 8.000000e-01 5.743020e-04 9.000000e-01 5.978645e-04 1.000000e+00 6.208723e-04 1.100000e+00 6.435963e-04 1.200000e+00 6.661785e-04 1.000000e-01 1.483904e-04 2.000000e-01 2.748764e-04 3.000000e-01 3.810618e-04 4.000000e-01 4.675325e-04 5.000000e-01 5.329044e-04 6.000000e-01 5.773264e-04 7.000000e-01 6.092508e-04 8.000000e-01 6.361910e-04 9.000000e-01 6.611105e-04 1.000000e+00 6.850911e-04 1.100000e+00 7.085860e-04 1.200000e+00 7.318156e-04 tmpk8ny_4pz/tests/bsim4/nmos/reference/dcSweep_lw3.standard0000644000175000017500000002575213546075722024166 0ustar carstencarstenV(d) I(d) 1.000000e-01 3.417891e-08 2.000000e-01 3.518229e-08 3.000000e-01 3.570569e-08 4.000000e-01 3.622387e-08 5.000000e-01 3.684861e-08 6.000000e-01 3.771099e-08 7.000000e-01 3.902872e-08 8.000000e-01 4.117783e-08 9.000000e-01 4.480489e-08 1.000000e+00 5.101018e-08 1.100000e+00 6.164706e-08 1.200000e+00 7.980941e-08 1.000000e-01 4.053036e-07 2.000000e-01 4.171118e-07 3.000000e-01 4.228325e-07 4.000000e-01 4.277713e-07 5.000000e-01 4.325188e-07 6.000000e-01 4.372787e-07 7.000000e-01 4.422213e-07 8.000000e-01 4.475843e-07 9.000000e-01 4.537576e-07 1.000000e+00 4.614017e-07 1.100000e+00 4.716339e-07 1.200000e+00 4.863297e-07 1.000000e-01 4.032407e-06 2.000000e-01 4.154196e-06 3.000000e-01 4.209454e-06 4.000000e-01 4.256092e-06 5.000000e-01 4.300058e-06 6.000000e-01 4.342844e-06 7.000000e-01 4.385046e-06 8.000000e-01 4.427035e-06 9.000000e-01 4.469187e-06 1.000000e+00 4.512029e-06 1.100000e+00 4.556386e-06 1.200000e+00 4.603592e-06 1.000000e-01 3.103754e-05 2.000000e-01 3.230004e-05 3.000000e-01 3.272160e-05 4.000000e-01 3.305029e-05 5.000000e-01 3.335140e-05 6.000000e-01 3.364000e-05 7.000000e-01 3.392140e-05 8.000000e-01 3.419809e-05 9.000000e-01 3.447164e-05 1.000000e+00 3.474349e-05 1.100000e+00 3.501542e-05 1.200000e+00 3.528980e-05 1.000000e-01 1.486263e-04 2.000000e-01 1.646949e-04 3.000000e-01 1.673699e-04 4.000000e-01 1.689590e-04 5.000000e-01 1.702866e-04 6.000000e-01 1.715074e-04 7.000000e-01 1.726703e-04 8.000000e-01 1.737956e-04 9.000000e-01 1.748943e-04 1.000000e+00 1.759740e-04 1.100000e+00 1.770422e-04 1.200000e+00 1.781076e-04 1.000000e-01 3.657661e-04 2.000000e-01 4.756979e-04 3.000000e-01 4.923040e-04 4.000000e-01 4.980347e-04 5.000000e-01 5.019132e-04 6.000000e-01 5.051800e-04 7.000000e-01 5.081569e-04 8.000000e-01 5.109625e-04 9.000000e-01 5.136521e-04 1.000000e+00 5.162576e-04 1.100000e+00 5.188032e-04 1.200000e+00 5.213131e-04 1.000000e-01 5.913764e-04 2.000000e-01 8.870825e-04 3.000000e-01 9.695018e-04 4.000000e-01 9.888794e-04 5.000000e-01 9.981876e-04 6.000000e-01 1.004947e-03 7.000000e-01 1.010693e-03 8.000000e-01 1.015909e-03 9.000000e-01 1.020794e-03 1.000000e+00 1.025448e-03 1.100000e+00 1.029935e-03 1.200000e+00 1.034305e-03 1.000000e-01 7.879559e-04 2.000000e-01 1.280731e-03 3.000000e-01 1.506010e-03 4.000000e-01 1.569756e-03 5.000000e-01 1.591428e-03 6.000000e-01 1.604079e-03 7.000000e-01 1.613789e-03 8.000000e-01 1.622160e-03 9.000000e-01 1.629775e-03 1.000000e+00 1.636895e-03 1.100000e+00 1.643663e-03 1.200000e+00 1.650176e-03 1.000000e-01 9.533694e-04 2.000000e-01 1.621886e-03 3.000000e-01 2.018632e-03 4.000000e-01 2.183682e-03 5.000000e-01 2.235821e-03 6.000000e-01 2.259289e-03 7.000000e-01 2.274873e-03 8.000000e-01 2.287377e-03 9.000000e-01 2.298324e-03 1.000000e+00 2.308330e-03 1.100000e+00 2.317699e-03 1.200000e+00 2.326606e-03 1.000000e-01 1.092123e-03 2.000000e-01 1.912405e-03 3.000000e-01 2.470351e-03 4.000000e-01 2.778672e-03 5.000000e-01 2.898816e-03 6.000000e-01 2.944157e-03 7.000000e-01 2.969141e-03 8.000000e-01 2.987282e-03 9.000000e-01 3.002360e-03 1.000000e+00 3.015750e-03 1.100000e+00 3.028063e-03 1.200000e+00 3.039621e-03 1.000000e-01 1.208790e-03 2.000000e-01 2.159380e-03 3.000000e-01 2.859700e-03 4.000000e-01 3.316195e-03 5.000000e-01 3.547801e-03 6.000000e-01 3.638192e-03 7.000000e-01 3.679634e-03 8.000000e-01 3.705979e-03 9.000000e-01 3.726371e-03 1.000000e+00 3.743797e-03 1.100000e+00 3.759465e-03 1.200000e+00 3.773961e-03 1.000000e-01 1.307128e-03 2.000000e-01 2.369572e-03 3.000000e-01 3.194023e-03 4.000000e-01 3.785799e-03 5.000000e-01 4.149559e-03 6.000000e-01 4.320333e-03 7.000000e-01 4.392398e-03 8.000000e-01 4.431642e-03 9.000000e-01 4.459249e-03 1.000000e+00 4.481644e-03 1.100000e+00 4.501202e-03 1.200000e+00 4.518977e-03 1.000000e-01 5.156597e-09 2.000000e-01 5.311340e-09 3.000000e-01 5.431766e-09 4.000000e-01 5.604603e-09 5.000000e-01 5.901825e-09 6.000000e-01 6.444756e-09 7.000000e-01 7.447553e-09 8.000000e-01 9.284572e-09 9.000000e-01 1.260128e-08 1.000000e+00 1.849687e-08 1.100000e+00 2.882342e-08 1.200000e+00 4.667314e-08 1.000000e-01 1.520292e-07 2.000000e-01 1.563532e-07 3.000000e-01 1.588375e-07 4.000000e-01 1.610527e-07 5.000000e-01 1.632318e-07 6.000000e-01 1.654947e-07 7.000000e-01 1.679820e-07 8.000000e-01 1.709175e-07 9.000000e-01 1.746822e-07 1.000000e+00 1.799278e-07 1.100000e+00 1.877609e-07 1.200000e+00 2.000431e-07 1.000000e-01 3.363951e-06 2.000000e-01 3.458531e-06 3.000000e-01 3.510981e-06 4.000000e-01 3.556606e-06 5.000000e-01 3.599958e-06 6.000000e-01 3.642308e-06 7.000000e-01 3.684204e-06 8.000000e-01 3.726002e-06 9.000000e-01 3.768069e-06 1.000000e+00 3.810924e-06 1.100000e+00 3.855381e-06 1.200000e+00 3.902749e-06 1.000000e-01 4.449250e-05 2.000000e-01 4.589608e-05 3.000000e-01 4.654908e-05 4.000000e-01 4.708452e-05 5.000000e-01 4.757995e-05 6.000000e-01 4.805631e-05 7.000000e-01 4.852166e-05 8.000000e-01 4.897997e-05 9.000000e-01 4.943376e-05 1.000000e+00 4.988534e-05 1.100000e+00 5.033733e-05 1.200000e+00 5.079317e-05 1.000000e-01 3.304115e-04 2.000000e-01 3.502898e-04 3.000000e-01 3.558274e-04 4.000000e-01 3.595142e-04 5.000000e-01 3.626197e-04 6.000000e-01 3.654591e-04 7.000000e-01 3.681476e-04 8.000000e-01 3.707381e-04 9.000000e-01 3.732604e-04 1.000000e+00 3.757359e-04 1.100000e+00 3.781843e-04 1.200000e+00 3.806275e-04 1.000000e-01 1.067806e-03 2.000000e-01 1.239056e-03 3.000000e-01 1.269642e-03 4.000000e-01 1.284411e-03 5.000000e-01 1.294990e-03 6.000000e-01 1.303835e-03 7.000000e-01 1.311765e-03 8.000000e-01 1.319133e-03 9.000000e-01 1.326119e-03 1.000000e+00 1.332834e-03 1.100000e+00 1.339366e-03 1.200000e+00 1.345797e-03 1.000000e-01 1.940049e-03 2.000000e-01 2.536987e-03 3.000000e-01 2.646179e-03 4.000000e-01 2.686134e-03 5.000000e-01 2.710522e-03 6.000000e-01 2.729124e-03 7.000000e-01 2.744889e-03 8.000000e-01 2.759000e-03 9.000000e-01 2.772029e-03 1.000000e+00 2.784302e-03 1.100000e+00 2.796046e-03 1.200000e+00 2.807453e-03 1.000000e-01 2.739170e-03 2.000000e-01 3.942837e-03 3.000000e-01 4.223444e-03 4.000000e-01 4.308727e-03 5.000000e-01 4.354118e-03 6.000000e-01 4.386051e-03 7.000000e-01 4.411800e-03 8.000000e-01 4.434113e-03 9.000000e-01 4.454255e-03 1.000000e+00 4.472911e-03 1.100000e+00 4.490518e-03 1.200000e+00 4.507421e-03 1.000000e-01 3.444340e-03 2.000000e-01 5.299298e-03 3.000000e-01 5.863319e-03 4.000000e-01 6.020506e-03 5.000000e-01 6.094921e-03 6.000000e-01 6.143665e-03 7.000000e-01 6.181285e-03 8.000000e-01 6.212975e-03 9.000000e-01 6.241035e-03 1.000000e+00 6.266659e-03 1.100000e+00 6.290572e-03 1.200000e+00 6.313308e-03 1.000000e-01 4.026704e-03 2.000000e-01 6.494312e-03 3.000000e-01 7.445346e-03 4.000000e-01 7.709748e-03 5.000000e-01 7.822514e-03 6.000000e-01 7.891619e-03 7.000000e-01 7.942859e-03 8.000000e-01 7.984956e-03 9.000000e-01 8.021622e-03 1.000000e+00 8.054716e-03 1.100000e+00 8.085324e-03 1.200000e+00 8.114197e-03 1.000000e-01 4.369090e-03 2.000000e-01 7.321643e-03 3.000000e-01 8.755714e-03 4.000000e-01 9.191384e-03 5.000000e-01 9.357304e-03 6.000000e-01 9.450945e-03 7.000000e-01 9.517118e-03 8.000000e-01 9.569939e-03 9.000000e-01 9.615118e-03 1.000000e+00 9.655401e-03 1.100000e+00 9.692316e-03 1.200000e+00 9.726868e-03 1.000000e-01 4.598859e-03 2.000000e-01 7.926540e-03 3.000000e-01 9.861378e-03 4.000000e-01 1.055964e-02 5.000000e-01 1.080411e-02 6.000000e-01 1.092964e-02 7.000000e-01 1.101344e-02 8.000000e-01 1.107811e-02 9.000000e-01 1.113228e-02 1.000000e+00 1.117994e-02 1.100000e+00 1.122318e-02 1.200000e+00 1.126332e-02 1.000000e-01 2.118076e-07 2.000000e-01 2.195201e-07 3.000000e-01 2.222800e-07 4.000000e-01 2.245762e-07 5.000000e-01 2.268475e-07 6.000000e-01 2.292972e-07 7.000000e-01 2.321676e-07 8.000000e-01 2.358458e-07 9.000000e-01 2.409853e-07 1.000000e+00 2.486926e-07 1.100000e+00 2.608286e-07 1.200000e+00 2.804966e-07 1.000000e-01 1.168165e-06 2.000000e-01 1.212154e-06 3.000000e-01 1.227100e-06 4.000000e-01 1.239068e-06 5.000000e-01 1.250234e-06 6.000000e-01 1.261137e-06 7.000000e-01 1.272060e-06 8.000000e-01 1.283291e-06 9.000000e-01 1.295249e-06 1.000000e+00 1.308621e-06 1.100000e+00 1.324555e-06 1.200000e+00 1.344967e-06 1.000000e-01 5.861414e-06 2.000000e-01 6.122565e-06 3.000000e-01 6.198362e-06 4.000000e-01 6.256637e-06 5.000000e-01 6.310087e-06 6.000000e-01 6.361441e-06 7.000000e-01 6.411672e-06 8.000000e-01 6.461303e-06 9.000000e-01 6.510787e-06 1.000000e+00 6.560711e-06 1.100000e+00 6.611963e-06 1.200000e+00 6.665955e-06 1.000000e-01 2.527873e-05 2.000000e-01 2.728931e-05 3.000000e-01 2.766170e-05 4.000000e-01 2.791089e-05 5.000000e-01 2.813044e-05 6.000000e-01 2.833774e-05 7.000000e-01 2.853822e-05 8.000000e-01 2.873425e-05 9.000000e-01 2.892717e-05 1.000000e+00 2.911818e-05 1.100000e+00 2.930871e-05 1.200000e+00 2.950072e-05 1.000000e-01 7.658438e-05 2.000000e-01 9.300748e-05 3.000000e-01 9.505858e-05 4.000000e-01 9.596014e-05 5.000000e-01 9.666420e-05 6.000000e-01 9.730031e-05 7.000000e-01 9.790244e-05 8.000000e-01 9.848330e-05 9.000000e-01 9.904905e-05 1.000000e+00 9.960370e-05 1.100000e+00 1.001510e-04 1.200000e+00 1.006954e-04 1.000000e-01 1.498292e-04 2.000000e-01 2.153914e-04 3.000000e-01 2.292186e-04 4.000000e-01 2.324076e-04 5.000000e-01 2.342187e-04 6.000000e-01 2.356887e-04 7.000000e-01 2.370197e-04 8.000000e-01 2.382743e-04 9.000000e-01 2.394783e-04 1.000000e+00 2.406452e-04 1.100000e+00 2.417848e-04 1.200000e+00 2.429062e-04 1.000000e-01 2.204046e-04 2.000000e-01 3.532240e-04 3.000000e-01 4.083106e-04 4.000000e-01 4.217307e-04 5.000000e-01 4.262581e-04 6.000000e-01 4.291567e-04 7.000000e-01 4.315566e-04 8.000000e-01 4.337302e-04 9.000000e-01 4.357717e-04 1.000000e+00 4.377230e-04 1.100000e+00 4.396071e-04 1.200000e+00 4.414417e-04 1.000000e-01 2.786906e-04 2.000000e-01 4.729554e-04 3.000000e-01 5.861725e-04 4.000000e-01 6.315240e-04 5.000000e-01 6.446022e-04 6.000000e-01 6.502983e-04 7.000000e-01 6.542636e-04 8.000000e-01 6.576099e-04 9.000000e-01 6.606502e-04 1.000000e+00 6.635029e-04 1.100000e+00 6.662238e-04 1.200000e+00 6.688458e-04 1.000000e-01 3.248649e-04 2.000000e-01 5.700565e-04 3.000000e-01 7.374416e-04 4.000000e-01 8.311755e-04 5.000000e-01 8.679623e-04 6.000000e-01 8.805760e-04 7.000000e-01 8.872020e-04 8.000000e-01 8.921289e-04 9.000000e-01 8.963667e-04 1.000000e+00 9.002375e-04 1.100000e+00 9.038728e-04 1.200000e+00 9.073386e-04 1.000000e-01 3.612974e-04 2.000000e-01 6.479781e-04 3.000000e-01 8.612683e-04 4.000000e-01 1.003133e-03 5.000000e-01 1.079095e-03 6.000000e-01 1.109013e-03 7.000000e-01 1.121197e-03 8.000000e-01 1.128566e-03 9.000000e-01 1.134338e-03 1.000000e+00 1.139392e-03 1.100000e+00 1.144035e-03 1.200000e+00 1.148405e-03 1.000000e-01 3.901306e-04 2.000000e-01 7.106275e-04 3.000000e-01 9.622258e-04 4.000000e-01 1.146232e-03 5.000000e-01 1.264843e-03 6.000000e-01 1.325622e-03 7.000000e-01 1.350437e-03 8.000000e-01 1.362310e-03 9.000000e-01 1.370294e-03 1.000000e+00 1.376810e-03 1.100000e+00 1.382602e-03 1.200000e+00 1.387956e-03 1.000000e-01 4.129468e-04 2.000000e-01 7.610863e-04 3.000000e-01 1.044614e-03 4.000000e-01 1.264541e-03 5.000000e-01 1.422123e-03 6.000000e-01 1.520129e-03 7.000000e-01 1.568635e-03 8.000000e-01 1.589843e-03 9.000000e-01 1.601531e-03 1.000000e+00 1.610043e-03 1.100000e+00 1.617214e-03 1.200000e+00 1.623671e-03 tmpk8ny_4pz/tests/bsim4/nmos/reference/acFreq.standard0000644000175000017500000000712113546075722023176 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 1258.925 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 1584.893 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 1995.262 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 2511.886 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 3162.278 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 3981.072 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 5011.872 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 6309.573 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 7943.282 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 10000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 12589.25 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 15848.93 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 19952.62 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 25118.86 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 31622.78 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 39810.72 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 50118.72 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 63095.73 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 79432.82 1.39210168579019e-14 1.01277256219657e-14 3.71918252520243e-15 100000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 125892.5 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 158489.3 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 199526.2 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 251188.6 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 316227.8 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 398107.2 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 501187.2 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 630957.3 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 794328.2 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 1000000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 1258925 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 1584893 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 1995262 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 2511886 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 3162278 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 3981072 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 5011872 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 6309573 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 7943282 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 10000000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 12589250 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 15848930 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 19952620 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 25118860 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 31622780 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 39810720 1.39210123081412e-14 1.0127724190444e-14 3.71918106361498e-15 50118720 1.39210147331426e-14 1.01277239885519e-14 3.71918272852533e-15 63095730 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 79432820 1.39210148542597e-14 1.01277236183236e-14 3.71918052156032e-15 100000000 1.39210139003943e-14 1.01277229444892e-14 3.71918045665434e-15 tmpk8ny_4pz/tests/bsim4/nmos/reference/acFreq_trnqsmod.standard0000644000175000017500000000712113546075722025125 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 1258.925 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 1584.893 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 1995.262 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 2511.886 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 3162.278 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 3981.072 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 5011.872 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 6309.573 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 7943.282 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 10000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 12589.25 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 15848.93 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 19952.62 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 25118.86 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 31622.78 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 39810.72 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 50118.72 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 63095.73 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 79432.82 1.39210168579019e-14 1.01277256219657e-14 3.71918252520243e-15 100000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 125892.5 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 158489.3 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 199526.2 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 251188.6 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 316227.8 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 398107.2 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 501187.2 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 630957.3 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 794328.2 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 1000000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 1258925 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 1584893 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 1995262 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 2511886 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 3162278 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 3981072 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 5011872 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 6309573 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 7943282 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 10000000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 12589250 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 15848930 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 19952620 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 25118860 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 31622780 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 39810720 1.39210123081412e-14 1.0127724190444e-14 3.71918106361498e-15 50118720 1.39210147331426e-14 1.01277239885519e-14 3.71918272852533e-15 63095730 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 79432820 1.39210148542597e-14 1.01277236183236e-14 3.71918052156032e-15 100000000 1.39210139003943e-14 1.01277229444892e-14 3.71918045665434e-15 tmpk8ny_4pz/tests/bsim4/nmos/reference/noise2.standard0000644000175000017500000000635213546075722023201 0ustar carstencarstenFreq N(d) 1000 6.834301e-16 1258.925 5.305107e-16 1584.893 4.118075e-16 1995.262 3.196645e-16 2511.886 2.481387e-16 3162.278 1.92617e-16 3981.072 1.495185e-16 5011.872 1.160633e-16 6309.573 9.00939e-17 7943.282 6.99352e-17 10000 5.428706e-17 12589.25 4.214024e-17 15848.93 3.271131e-17 19952.62 2.539212e-17 25118.86 1.971063e-17 31622.78 1.530039e-17 39810.72 1.187695e-17 50118.72 9.219513e-18 63095.73 7.156687e-18 79432.82 5.555424e-18 100000 4.312448e-18 125892.5 3.347592e-18 158489.3 2.598625e-18 199526.2 2.017242e-18 251188.6 1.565945e-18 316227.8 1.215627e-18 398107.2 9.436934e-19 501187.2 7.326058e-19 630957.3 5.687497e-19 794328.2 4.415569e-19 1000000 3.428239e-19 1258925 2.661826e-19 1584893 2.066901e-19 1995262 1.605091e-19 2511886 1.246613e-19 3162278 9.683458e-20 3981072 7.523414e-20 5011872 5.846686e-20 6309573 4.545131e-20 7943282 3.534803e-20 10000000 2.750538e-20 12589250 2.141755e-20 15848930 1.669189e-20 19952620 1.302361e-20 25118860 1.017611e-20 31622780 7.965756e-21 39810720 6.249972e-21 50118720 4.9181e-21 63095730 3.884238e-21 79432820 3.081706e-21 100000000 2.458742e-21 1000 1.430849e-15 1258.925 1.110693e-15 1584.893 8.621719e-16 1995.262 6.692585e-16 2511.886 5.195101e-16 3162.278 4.032683e-16 3981.072 3.130359e-16 5011.872 2.429933e-16 6309.573 1.886229e-16 7943.282 1.46418e-16 10000 1.136566e-16 12589.25 8.822569e-17 15848.93 6.8485e-17 19952.62 5.316134e-17 25118.86 4.12664e-17 31622.78 3.203299e-17 39810.72 2.486557e-17 50118.72 1.930189e-17 63095.73 1.49831e-17 79432.82 1.163065e-17 100000 9.028317e-18 125892.5 7.008265e-18 158489.3 5.440207e-18 199526.2 4.223005e-18 251188.6 3.278156e-18 316227.8 2.54472e-18 398107.2 1.975392e-18 501187.2 1.533453e-18 630957.3 1.190399e-18 794328.2 9.241047e-19 1000000 7.173943e-19 1258925 5.569359e-19 1584893 4.323806e-19 1995262 3.356949e-19 2511886 2.606428e-19 3162278 2.023839e-19 3981072 1.571606e-19 5011872 1.220561e-19 6309573 9.48064e-20 7943282 7.365387e-20 10000000 5.723428e-20 12589250 4.448862e-20 15848930 3.459483e-20 19952620 2.691481e-20 25118860 2.095322e-20 31622780 1.632555e-20 39810720 1.273333e-20 50118720 9.944887e-21 63095730 7.780363e-21 79432820 6.100158e-21 100000000 4.795903e-21 1000 2.290817e-15 1258.925 1.77824e-15 1584.893 1.380354e-15 1995.262 1.071496e-15 2511.886 8.317455e-16 3162.278 6.456401e-16 3981.072 5.011763e-16 5011.872 3.890367e-16 6309.573 3.019887e-16 7943.282 2.344179e-16 10000 1.819663e-16 12589.25 1.412509e-16 15848.93 1.096456e-16 19952.62 8.511216e-17 25118.86 6.606813e-17 31622.78 5.128525e-17 39810.72 3.981008e-17 50118.72 3.090252e-17 63095.73 2.398805e-17 79432.82 1.862071e-17 100000 1.445433e-17 125892.5 1.122019e-17 158489.3 8.709696e-18 199526.2 6.760934e-18 251188.6 5.248212e-18 316227.8 4.073966e-18 398107.2 3.162462e-18 501187.2 2.454909e-18 630957.3 1.905673e-18 794328.2 1.47933e-18 1000000 1.148383e-18 1258925 8.914856e-19 1584893 6.920701e-19 1995262 5.372744e-19 2511886 4.171146e-19 3162278 3.23841e-19 3981072 2.514376e-19 5011872 1.952346e-19 6309573 1.516073e-19 7943282 1.177417e-19 10000000 9.145359e-20 12589250 7.104754e-20 15848930 5.52074e-20 19952620 4.291154e-20 25118860 3.336691e-20 31622780 2.595792e-20 39810720 2.020672e-20 50118720 1.574236e-20 63095730 1.227691e-20 79432820 9.586873e-21 100000000 7.498736e-21 tmpk8ny_4pz/tests/bsim4/nmos/reference/dcSweep_lw9.standard0000644000175000017500000002575213546075722024174 0ustar carstencarstenV(d) I(d) 1.000000e-01 2.018647e-09 2.000000e-01 2.078000e-09 3.000000e-01 2.109005e-09 4.000000e-01 2.139702e-09 5.000000e-01 2.176693e-09 6.000000e-01 2.227718e-09 7.000000e-01 2.305635e-09 8.000000e-01 2.432653e-09 9.000000e-01 2.646957e-09 1.000000e+00 3.013527e-09 1.100000e+00 3.641822e-09 1.200000e+00 4.714564e-09 1.000000e-01 2.393675e-08 2.000000e-01 2.463422e-08 3.000000e-01 2.497218e-08 4.000000e-01 2.526395e-08 5.000000e-01 2.554443e-08 6.000000e-01 2.582564e-08 7.000000e-01 2.611763e-08 8.000000e-01 2.643445e-08 9.000000e-01 2.679913e-08 1.000000e+00 2.725066e-08 1.100000e+00 2.785503e-08 1.200000e+00 2.872301e-08 1.000000e-01 2.381539e-07 2.000000e-01 2.453465e-07 3.000000e-01 2.486101e-07 4.000000e-01 2.513646e-07 5.000000e-01 2.539613e-07 6.000000e-01 2.564883e-07 7.000000e-01 2.589809e-07 8.000000e-01 2.614608e-07 9.000000e-01 2.639504e-07 1.000000e+00 2.664807e-07 1.100000e+00 2.691004e-07 1.200000e+00 2.718882e-07 1.000000e-01 1.833304e-06 2.000000e-01 1.907854e-06 3.000000e-01 1.932750e-06 4.000000e-01 1.952162e-06 5.000000e-01 1.969947e-06 6.000000e-01 1.986993e-06 7.000000e-01 2.003615e-06 8.000000e-01 2.019958e-06 9.000000e-01 2.036116e-06 1.000000e+00 2.052174e-06 1.100000e+00 2.068235e-06 1.200000e+00 2.084442e-06 1.000000e-01 8.782013e-06 2.000000e-01 9.730754e-06 3.000000e-01 9.888672e-06 4.000000e-01 9.982523e-06 5.000000e-01 1.006094e-05 6.000000e-01 1.013306e-05 7.000000e-01 1.020176e-05 8.000000e-01 1.026825e-05 9.000000e-01 1.033316e-05 1.000000e+00 1.039695e-05 1.100000e+00 1.046007e-05 1.200000e+00 1.052301e-05 1.000000e-01 2.162442e-05 2.000000e-01 2.811736e-05 3.000000e-01 2.909735e-05 4.000000e-01 2.943565e-05 5.000000e-01 2.966472e-05 6.000000e-01 2.985772e-05 7.000000e-01 3.003361e-05 8.000000e-01 3.019941e-05 9.000000e-01 3.035836e-05 1.000000e+00 3.051235e-05 1.100000e+00 3.066280e-05 1.200000e+00 3.081115e-05 1.000000e-01 3.498293e-05 2.000000e-01 5.245827e-05 3.000000e-01 5.732297e-05 4.000000e-01 5.846630e-05 5.000000e-01 5.901584e-05 6.000000e-01 5.941512e-05 7.000000e-01 5.975463e-05 8.000000e-01 6.006289e-05 9.000000e-01 6.035164e-05 1.000000e+00 6.062679e-05 1.100000e+00 6.089203e-05 1.200000e+00 6.115037e-05 1.000000e-01 4.663516e-05 2.000000e-01 7.577320e-05 3.000000e-01 8.907778e-05 4.000000e-01 9.283822e-05 5.000000e-01 9.411700e-05 6.000000e-01 9.486406e-05 7.000000e-01 9.543773e-05 8.000000e-01 9.593246e-05 9.000000e-01 9.638257e-05 1.000000e+00 9.680353e-05 1.100000e+00 9.720372e-05 1.200000e+00 9.758883e-05 1.000000e-01 5.644916e-05 2.000000e-01 9.599827e-05 3.000000e-01 1.194442e-04 4.000000e-01 1.291843e-04 5.000000e-01 1.322594e-04 6.000000e-01 1.336444e-04 7.000000e-01 1.345648e-04 8.000000e-01 1.353037e-04 9.000000e-01 1.359508e-04 1.000000e+00 1.365424e-04 1.100000e+00 1.370964e-04 1.200000e+00 1.376232e-04 1.000000e-01 6.468790e-05 2.000000e-01 1.132355e-04 3.000000e-01 1.462257e-04 4.000000e-01 1.644326e-04 5.000000e-01 1.715181e-04 6.000000e-01 1.741924e-04 7.000000e-01 1.756673e-04 8.000000e-01 1.767390e-04 9.000000e-01 1.776302e-04 1.000000e+00 1.784218e-04 1.100000e+00 1.791499e-04 1.200000e+00 1.798335e-04 1.000000e-01 7.161981e-05 2.000000e-01 1.278994e-04 3.000000e-01 1.693265e-04 4.000000e-01 1.963006e-04 5.000000e-01 2.099663e-04 6.000000e-01 2.152955e-04 7.000000e-01 2.177404e-04 8.000000e-01 2.192961e-04 9.000000e-01 2.205011e-04 1.000000e+00 2.215312e-04 1.100000e+00 2.224577e-04 1.200000e+00 2.233151e-04 1.000000e-01 7.746597e-05 2.000000e-01 1.403869e-04 3.000000e-01 1.891752e-04 4.000000e-01 2.241614e-04 5.000000e-01 2.456397e-04 6.000000e-01 2.557091e-04 7.000000e-01 2.599579e-04 8.000000e-01 2.622740e-04 9.000000e-01 2.639047e-04 1.000000e+00 2.652283e-04 1.100000e+00 2.663847e-04 1.200000e+00 2.674359e-04 1.000000e-01 3.046316e-10 2.000000e-01 3.138656e-10 3.000000e-01 3.210723e-10 4.000000e-01 3.313741e-10 5.000000e-01 3.490218e-10 6.000000e-01 3.811809e-10 7.000000e-01 4.404991e-10 8.000000e-01 5.490857e-10 9.000000e-01 7.450611e-10 1.000000e+00 1.093343e-09 1.100000e+00 1.703314e-09 1.200000e+00 2.757596e-09 1.000000e-01 8.978622e-09 2.000000e-01 9.234120e-09 3.000000e-01 9.380943e-09 4.000000e-01 9.511864e-09 5.000000e-01 9.640658e-09 6.000000e-01 9.774396e-09 7.000000e-01 9.921384e-09 8.000000e-01 1.009484e-08 9.000000e-01 1.031727e-08 1.000000e+00 1.062716e-08 1.100000e+00 1.108986e-08 1.200000e+00 1.181530e-08 1.000000e-01 1.986739e-07 2.000000e-01 2.042603e-07 3.000000e-01 2.073583e-07 4.000000e-01 2.100531e-07 5.000000e-01 2.126136e-07 6.000000e-01 2.151150e-07 7.000000e-01 2.175895e-07 8.000000e-01 2.200581e-07 9.000000e-01 2.225427e-07 1.000000e+00 2.250737e-07 1.100000e+00 2.276993e-07 1.200000e+00 2.304967e-07 1.000000e-01 2.628463e-06 2.000000e-01 2.711349e-06 3.000000e-01 2.749920e-06 4.000000e-01 2.781550e-06 5.000000e-01 2.810817e-06 6.000000e-01 2.838959e-06 7.000000e-01 2.866451e-06 8.000000e-01 2.893526e-06 9.000000e-01 2.920335e-06 1.000000e+00 2.947013e-06 1.100000e+00 2.973716e-06 1.200000e+00 3.000645e-06 1.000000e-01 1.954051e-05 2.000000e-01 2.071391e-05 3.000000e-01 2.104097e-05 4.000000e-01 2.125885e-05 5.000000e-01 2.144242e-05 6.000000e-01 2.161030e-05 7.000000e-01 2.176926e-05 8.000000e-01 2.192244e-05 9.000000e-01 2.207160e-05 1.000000e+00 2.221799e-05 1.100000e+00 2.236278e-05 1.200000e+00 2.250726e-05 1.000000e-01 6.327012e-05 2.000000e-01 7.337757e-05 3.000000e-01 7.518337e-05 4.000000e-01 7.605636e-05 5.000000e-01 7.668206e-05 6.000000e-01 7.720543e-05 7.000000e-01 7.767482e-05 8.000000e-01 7.811098e-05 9.000000e-01 7.852454e-05 1.000000e+00 7.892212e-05 1.100000e+00 7.930888e-05 1.200000e+00 7.968973e-05 1.000000e-01 1.152037e-04 2.000000e-01 1.504583e-04 3.000000e-01 1.568959e-04 4.000000e-01 1.592563e-04 5.000000e-01 1.606989e-04 6.000000e-01 1.618001e-04 7.000000e-01 1.627338e-04 8.000000e-01 1.635697e-04 9.000000e-01 1.643417e-04 1.000000e+00 1.650691e-04 1.100000e+00 1.657651e-04 1.200000e+00 1.664412e-04 1.000000e-01 1.629872e-04 2.000000e-01 2.341641e-04 3.000000e-01 2.506702e-04 4.000000e-01 2.557001e-04 5.000000e-01 2.583834e-04 6.000000e-01 2.602736e-04 7.000000e-01 2.617989e-04 8.000000e-01 2.631213e-04 9.000000e-01 2.643153e-04 1.000000e+00 2.654215e-04 1.100000e+00 2.664656e-04 1.200000e+00 2.674682e-04 1.000000e-01 2.053160e-04 2.000000e-01 3.151822e-04 3.000000e-01 3.482980e-04 4.000000e-01 3.575424e-04 5.000000e-01 3.619349e-04 6.000000e-01 3.648182e-04 7.000000e-01 3.670461e-04 8.000000e-01 3.689243e-04 9.000000e-01 3.705880e-04 1.000000e+00 3.721078e-04 1.100000e+00 3.735264e-04 1.200000e+00 3.748754e-04 1.000000e-01 2.403883e-04 2.000000e-01 3.867980e-04 3.000000e-01 4.426058e-04 4.000000e-01 4.580988e-04 5.000000e-01 4.647397e-04 6.000000e-01 4.688223e-04 7.000000e-01 4.718550e-04 8.000000e-01 4.743492e-04 9.000000e-01 4.765231e-04 1.000000e+00 4.784861e-04 1.100000e+00 4.803021e-04 1.200000e+00 4.820158e-04 1.000000e-01 2.610561e-04 2.000000e-01 4.365498e-04 3.000000e-01 5.208658e-04 4.000000e-01 5.463099e-04 5.000000e-01 5.560516e-04 6.000000e-01 5.615739e-04 7.000000e-01 5.654863e-04 8.000000e-01 5.686140e-04 9.000000e-01 5.712916e-04 1.000000e+00 5.736805e-04 1.100000e+00 5.758705e-04 1.200000e+00 5.779211e-04 1.000000e-01 2.749458e-04 2.000000e-01 4.730137e-04 3.000000e-01 5.871188e-04 4.000000e-01 6.278362e-04 5.000000e-01 6.421397e-04 6.000000e-01 6.495253e-04 7.000000e-01 6.544726e-04 8.000000e-01 6.582986e-04 9.000000e-01 6.615077e-04 1.000000e+00 6.643325e-04 1.100000e+00 6.668973e-04 1.200000e+00 6.692794e-04 1.000000e-01 1.250916e-08 2.000000e-01 1.296473e-08 3.000000e-01 1.312782e-08 4.000000e-01 1.326352e-08 5.000000e-01 1.339776e-08 6.000000e-01 1.354253e-08 7.000000e-01 1.371214e-08 8.000000e-01 1.392946e-08 9.000000e-01 1.423309e-08 1.000000e+00 1.468836e-08 1.100000e+00 1.540517e-08 1.200000e+00 1.656682e-08 1.000000e-01 6.899065e-08 2.000000e-01 7.158857e-08 3.000000e-01 7.247135e-08 4.000000e-01 7.317828e-08 5.000000e-01 7.383782e-08 6.000000e-01 7.448184e-08 7.000000e-01 7.512704e-08 8.000000e-01 7.579039e-08 9.000000e-01 7.649669e-08 1.000000e+00 7.728648e-08 1.100000e+00 7.822758e-08 1.200000e+00 7.943308e-08 1.000000e-01 3.461758e-07 2.000000e-01 3.615984e-07 3.000000e-01 3.660748e-07 4.000000e-01 3.695165e-07 5.000000e-01 3.726733e-07 6.000000e-01 3.757064e-07 7.000000e-01 3.786731e-07 8.000000e-01 3.816044e-07 9.000000e-01 3.845270e-07 1.000000e+00 3.874755e-07 1.100000e+00 3.905024e-07 1.200000e+00 3.936911e-07 1.000000e-01 1.493061e-06 2.000000e-01 1.611793e-06 3.000000e-01 1.633784e-06 4.000000e-01 1.648500e-06 5.000000e-01 1.661467e-06 6.000000e-01 1.673710e-06 7.000000e-01 1.685551e-06 8.000000e-01 1.697129e-06 9.000000e-01 1.708524e-06 1.000000e+00 1.719806e-06 1.100000e+00 1.731059e-06 1.200000e+00 1.742399e-06 1.000000e-01 4.524009e-06 2.000000e-01 5.493891e-06 3.000000e-01 5.614991e-06 4.000000e-01 5.668228e-06 5.000000e-01 5.709809e-06 6.000000e-01 5.747380e-06 7.000000e-01 5.782944e-06 8.000000e-01 5.817254e-06 9.000000e-01 5.850672e-06 1.000000e+00 5.883434e-06 1.100000e+00 5.915762e-06 1.200000e+00 5.947919e-06 1.000000e-01 8.852434e-06 2.000000e-01 1.272492e-05 3.000000e-01 1.354128e-05 4.000000e-01 1.372954e-05 5.000000e-01 1.383648e-05 6.000000e-01 1.392330e-05 7.000000e-01 1.400192e-05 8.000000e-01 1.407602e-05 9.000000e-01 1.414715e-05 1.000000e+00 1.421608e-05 1.100000e+00 1.428340e-05 1.200000e+00 1.434964e-05 1.000000e-01 1.302465e-05 2.000000e-01 2.087132e-05 3.000000e-01 2.412441e-05 4.000000e-01 2.491655e-05 5.000000e-01 2.518379e-05 6.000000e-01 2.535494e-05 7.000000e-01 2.549668e-05 8.000000e-01 2.562507e-05 9.000000e-01 2.574567e-05 1.000000e+00 2.586094e-05 1.100000e+00 2.597225e-05 1.200000e+00 2.608063e-05 1.000000e-01 1.647150e-05 2.000000e-01 2.795022e-05 3.000000e-01 3.463775e-05 4.000000e-01 3.731529e-05 5.000000e-01 3.808711e-05 6.000000e-01 3.842333e-05 7.000000e-01 3.865747e-05 8.000000e-01 3.885511e-05 9.000000e-01 3.903470e-05 1.000000e+00 3.920322e-05 1.100000e+00 3.936396e-05 1.200000e+00 3.951887e-05 1.000000e-01 1.920284e-05 2.000000e-01 3.369276e-05 3.000000e-01 4.358178e-05 4.000000e-01 4.911733e-05 5.000000e-01 5.128867e-05 6.000000e-01 5.203301e-05 7.000000e-01 5.242413e-05 8.000000e-01 5.271506e-05 9.000000e-01 5.296536e-05 1.000000e+00 5.319402e-05 1.100000e+00 5.340878e-05 1.200000e+00 5.361354e-05 1.000000e-01 2.135839e-05 2.000000e-01 3.830209e-05 3.000000e-01 5.090502e-05 4.000000e-01 5.928483e-05 5.000000e-01 6.376980e-05 6.000000e-01 6.553532e-05 7.000000e-01 6.625430e-05 8.000000e-01 6.668930e-05 9.000000e-01 6.703020e-05 1.000000e+00 6.732868e-05 1.100000e+00 6.760300e-05 1.200000e+00 6.786118e-05 1.000000e-01 2.306463e-05 2.000000e-01 4.200871e-05 3.000000e-01 5.687696e-05 4.000000e-01 6.774786e-05 5.000000e-01 7.475273e-05 6.000000e-01 7.834039e-05 7.000000e-01 7.980459e-05 8.000000e-01 8.050526e-05 9.000000e-01 8.097662e-05 1.000000e+00 8.136143e-05 1.100000e+00 8.170352e-05 1.200000e+00 8.201982e-05 1.000000e-01 2.441501e-05 2.000000e-01 4.499455e-05 3.000000e-01 6.175127e-05 4.000000e-01 7.474608e-05 5.000000e-01 8.405434e-05 6.000000e-01 8.984112e-05 7.000000e-01 9.270371e-05 8.000000e-01 9.395498e-05 9.000000e-01 9.464480e-05 1.000000e+00 9.514734e-05 1.100000e+00 9.557089e-05 1.200000e+00 9.595230e-05 tmpk8ny_4pz/tests/bsim4/nmos/reference/noise1.standard0000644000175000017500000000634613546075722023203 0ustar carstencarstenFreq N(d) 1000 1.356683e-19 1258.925 1.0549e-19 1584.893 8.206413e-20 1995.262 6.387989e-20 2511.886 4.976442e-20 3162.278 3.880733e-20 3981.072 3.030192e-20 5011.872 2.369962e-20 6309.573 1.85746e-20 7943.282 1.459632e-20 10000 1.15082e-20 12589.25 9.111045e-21 15848.93 7.250264e-21 19952.62 5.805839e-21 25118.86 4.684607e-21 31622.78 3.814254e-21 39810.72 3.138646e-21 50118.72 2.614206e-21 63095.73 2.207112e-21 79432.82 1.891106e-21 100000 1.645807e-21 125892.5 1.455395e-21 158489.3 1.307588e-21 199526.2 1.192853e-21 251188.6 1.10379e-21 316227.8 1.034656e-21 398107.2 9.809901e-22 501187.2 9.393324e-22 630957.3 9.069957e-22 794328.2 8.818945e-22 1000000 8.624097e-22 1258925 8.472847e-22 1584893 8.35544e-22 1995262 8.264303e-22 2511886 8.193558e-22 3162278 8.138642e-22 3981072 8.096014e-22 5011872 8.062924e-22 6309573 8.037238e-22 7943282 8.0173e-22 10000000 8.001823e-22 12589250 7.989808e-22 15848930 7.980482e-22 19952620 7.973243e-22 25118860 7.967624e-22 31622780 7.963261e-22 39810720 7.959875e-22 50118720 7.957247e-22 63095730 7.955207e-22 79432820 7.953623e-22 100000000 7.952393e-22 1000 2.314194e-19 1258.925 1.798308e-19 1584.893 1.397852e-19 1995.262 1.087e-19 2511.886 8.45702e-20 3162.278 6.58395e-20 3981.072 5.129985e-20 5011.872 4.001348e-20 6309.573 3.125248e-20 7943.282 2.445177e-20 10000 1.917274e-20 12589.25 1.507491e-20 15848.93 1.189398e-20 19952.62 9.424798e-21 25118.86 7.508099e-21 31622.78 6.020266e-21 39810.72 4.865341e-21 50118.72 3.968833e-21 63095.73 3.272922e-21 79432.82 2.732722e-21 100000 2.313394e-21 125892.5 1.987892e-21 158489.3 1.735222e-21 199526.2 1.539087e-21 251188.6 1.386839e-21 316227.8 1.268656e-21 398107.2 1.176917e-21 501187.2 1.105705e-21 630957.3 1.050427e-21 794328.2 1.007517e-21 1000000 9.742086e-22 1258925 9.48353e-22 1584893 9.282827e-22 1995262 9.127032e-22 2511886 9.006097e-22 3162278 8.912221e-22 3981072 8.83935e-22 5011872 8.782784e-22 6309573 8.738875e-22 7943282 8.704791e-22 10000000 8.678333e-22 12589250 8.657795e-22 15848930 8.641853e-22 19952620 8.629477e-22 25118860 8.619871e-22 31622780 8.612414e-22 39810720 8.606626e-22 50118720 8.602133e-22 63095730 8.598645e-22 79432820 8.595938e-22 100000000 8.593836e-22 1000 3.310087e-19 1258.925 2.571433e-19 1584.893 1.998056e-19 1995.262 1.552973e-19 2511.886 1.207479e-19 3162.278 9.392897e-20 3981.072 7.311089e-20 5011.872 5.695091e-20 6309.573 4.440677e-20 7943.282 3.466942e-20 10000 2.711083e-20 12589.25 2.12435e-20 15848.93 1.6689e-20 19952.62 1.315358e-20 25118.86 1.040922e-20 31622.78 8.27892e-21 39810.72 6.625281e-21 50118.72 5.341648e-21 63095.73 4.345232e-21 79432.82 3.571767e-21 100000 2.971367e-21 125892.5 2.505308e-21 158489.3 2.143531e-21 199526.2 1.862703e-21 251188.6 1.644711e-21 316227.8 1.475495e-21 398107.2 1.344142e-21 501187.2 1.242179e-21 630957.3 1.163031e-21 794328.2 1.101592e-21 1000000 1.053901e-21 1258925 1.016881e-21 1584893 9.881436e-22 1995262 9.658366e-22 2511886 9.485209e-22 3162278 9.350796e-22 3981072 9.246458e-22 5011872 9.165467e-22 6309573 9.102597e-22 7943282 9.053795e-22 10000000 9.015912e-22 12589250 8.986506e-22 15848930 8.963679e-22 19952620 8.94596e-22 25118860 8.932206e-22 31622780 8.921529e-22 39810720 8.913241e-22 50118720 8.906808e-22 63095730 8.901814e-22 79432820 8.897937e-22 100000000 8.894928e-22 tmpk8ny_4pz/tests/bsim4/nmos/reference/dcSweep_scb.standard0000644000175000017500000002575213546075722024230 0ustar carstencarstenV(d) I(d) 1.000000e-01 5.381036e-07 2.000000e-01 8.979352e-07 3.000000e-01 1.458523e-06 4.000000e-01 2.345919e-06 5.000000e-01 3.743979e-06 6.000000e-01 5.928842e-06 7.000000e-01 9.309998e-06 8.000000e-01 1.448406e-05 9.000000e-01 2.230339e-05 1.000000e+00 3.396036e-05 1.100000e+00 5.108560e-05 1.200000e+00 7.585441e-05 1.000000e-01 6.175374e-06 2.000000e-01 9.996042e-06 3.000000e-01 1.566575e-05 4.000000e-01 2.417709e-05 5.000000e-01 3.680960e-05 6.000000e-01 5.527369e-05 7.000000e-01 8.179037e-05 8.000000e-01 1.191243e-04 9.000000e-01 1.705364e-04 1.000000e+00 2.396239e-04 1.100000e+00 3.300467e-04 1.200000e+00 4.451953e-04 1.000000e-01 5.603719e-05 2.000000e-01 8.564974e-05 3.000000e-01 1.256776e-04 4.000000e-01 1.802895e-04 5.000000e-01 2.531861e-04 6.000000e-01 3.478281e-04 7.000000e-01 4.670448e-04 8.000000e-01 6.126440e-04 9.000000e-01 7.852036e-04 1.000000e+00 9.841360e-04 1.100000e+00 1.208010e-03 1.200000e+00 1.455038e-03 1.000000e-01 3.365708e-04 2.000000e-01 4.731344e-04 3.000000e-01 6.258448e-04 4.000000e-01 8.032825e-04 5.000000e-01 1.005617e-03 6.000000e-01 1.231184e-03 7.000000e-01 1.477470e-03 8.000000e-01 1.741619e-03 9.000000e-01 2.020814e-03 1.000000e+00 2.312608e-03 1.100000e+00 2.615194e-03 1.200000e+00 2.927631e-03 1.000000e-01 1.078590e-03 2.000000e-01 1.427275e-03 3.000000e-01 1.711529e-03 4.000000e-01 1.997733e-03 5.000000e-01 2.291821e-03 6.000000e-01 2.593736e-03 7.000000e-01 2.902373e-03 8.000000e-01 3.216532e-03 9.000000e-01 3.535218e-03 1.000000e+00 3.857820e-03 1.100000e+00 4.184298e-03 1.200000e+00 4.515363e-03 1.000000e-01 1.966489e-03 2.000000e-01 2.694690e-03 3.000000e-01 3.087158e-03 4.000000e-01 3.431488e-03 5.000000e-01 3.765245e-03 6.000000e-01 4.096264e-03 7.000000e-01 4.426871e-03 8.000000e-01 4.757875e-03 9.000000e-01 5.089625e-03 1.000000e+00 5.422472e-03 1.100000e+00 5.757099e-03 1.200000e+00 6.094820e-03 1.000000e-01 2.647620e-03 2.000000e-01 3.934138e-03 3.000000e-01 4.490970e-03 4.000000e-01 4.888747e-03 5.000000e-01 5.250041e-03 6.000000e-01 5.598883e-03 7.000000e-01 5.942449e-03 8.000000e-01 6.283548e-03 9.000000e-01 6.623523e-03 1.000000e+00 6.963260e-03 1.100000e+00 7.303747e-03 1.200000e+00 7.646505e-03 1.000000e-01 3.121627e-03 2.000000e-01 4.977198e-03 3.000000e-01 5.828211e-03 4.000000e-01 6.309533e-03 5.000000e-01 6.705044e-03 6.000000e-01 7.073379e-03 7.000000e-01 7.430342e-03 8.000000e-01 7.781726e-03 9.000000e-01 8.130143e-03 1.000000e+00 8.477066e-03 1.100000e+00 8.823745e-03 1.200000e+00 9.171809e-03 1.000000e-01 3.459366e-03 2.000000e-01 5.786304e-03 3.000000e-01 7.049916e-03 4.000000e-01 7.676678e-03 5.000000e-01 8.123155e-03 6.000000e-01 8.516979e-03 7.000000e-01 8.890143e-03 8.000000e-01 9.253415e-03 9.000000e-01 9.611348e-03 1.000000e+00 9.966270e-03 1.100000e+00 1.031979e-02 1.200000e+00 1.067365e-02 1.000000e-01 3.709371e-03 2.000000e-01 6.404043e-03 3.000000e-01 8.109684e-03 4.000000e-01 8.973978e-03 5.000000e-01 9.500490e-03 6.000000e-01 9.929411e-03 7.000000e-01 1.032288e-02 8.000000e-01 1.070018e-02 9.000000e-01 1.106892e-02 1.000000e+00 1.143272e-02 1.100000e+00 1.179374e-02 1.200000e+00 1.215392e-02 1.000000e-01 3.900511e-03 2.000000e-01 6.883659e-03 3.000000e-01 8.983496e-03 4.000000e-01 1.017591e-02 5.000000e-01 1.082983e-02 6.000000e-01 1.130891e-02 7.000000e-01 1.172853e-02 8.000000e-01 1.212265e-02 9.000000e-01 1.250374e-02 1.000000e+00 1.287741e-02 1.100000e+00 1.324664e-02 1.200000e+00 1.361368e-02 1.000000e-01 4.050406e-03 2.000000e-01 7.264261e-03 3.000000e-01 9.687450e-03 4.000000e-01 1.124967e-02 5.000000e-01 1.209852e-02 6.000000e-01 1.265156e-02 7.000000e-01 1.310595e-02 8.000000e-01 1.352068e-02 9.000000e-01 1.391611e-02 1.000000e+00 1.430081e-02 1.100000e+00 1.467905e-02 1.200000e+00 1.505357e-02 1.000000e-01 7.321028e-08 2.000000e-01 1.375764e-07 3.000000e-01 2.536872e-07 4.000000e-01 4.640314e-07 5.000000e-01 8.424837e-07 6.000000e-01 1.516439e-06 7.000000e-01 2.700786e-06 8.000000e-01 4.748026e-06 9.000000e-01 8.217731e-06 1.000000e+00 1.396616e-05 1.100000e+00 2.325376e-05 1.200000e+00 3.786694e-05 1.000000e-01 2.075842e-06 2.000000e-01 3.741078e-06 3.000000e-01 6.542583e-06 4.000000e-01 1.120680e-05 5.000000e-01 1.879079e-05 6.000000e-01 3.078970e-05 7.000000e-01 4.922683e-05 8.000000e-01 7.671926e-05 9.000000e-01 1.165001e-04 1.000000e+00 1.723658e-04 1.100000e+00 2.485040e-04 1.200000e+00 3.491799e-04 1.000000e-01 3.962783e-05 2.000000e-01 6.367046e-05 3.000000e-01 9.807032e-05 4.000000e-01 1.466088e-04 5.000000e-01 2.131723e-04 6.000000e-01 3.016524e-04 7.000000e-01 4.154759e-04 8.000000e-01 5.570550e-04 9.000000e-01 7.273784e-04 1.000000e+00 9.259365e-04 1.100000e+00 1.151040e-03 1.200000e+00 1.400437e-03 1.000000e-01 3.472832e-04 2.000000e-01 4.836094e-04 3.000000e-01 6.416803e-04 4.000000e-01 8.260673e-04 5.000000e-01 1.036062e-03 6.000000e-01 1.269272e-03 7.000000e-01 1.522506e-03 8.000000e-01 1.792368e-03 9.000000e-01 2.075732e-03 1.000000e+00 2.370096e-03 1.100000e+00 2.673833e-03 1.200000e+00 2.986366e-03 1.000000e-01 1.272216e-03 2.000000e-01 1.594399e-03 3.000000e-01 1.882878e-03 4.000000e-01 2.173914e-03 5.000000e-01 2.470903e-03 6.000000e-01 2.773539e-03 7.000000e-01 3.080925e-03 8.000000e-01 3.392216e-03 9.000000e-01 3.706839e-03 1.000000e+00 4.024657e-03 1.100000e+00 4.346137e-03 1.200000e+00 4.672512e-03 1.000000e-01 2.461389e-03 2.000000e-01 3.044287e-03 3.000000e-01 3.409153e-03 4.000000e-01 3.742685e-03 5.000000e-01 4.068030e-03 6.000000e-01 4.390920e-03 7.000000e-01 4.713334e-03 8.000000e-01 5.036113e-03 9.000000e-01 5.359768e-03 1.000000e+00 5.684901e-03 1.100000e+00 6.012529e-03 1.200000e+00 6.344369e-03 1.000000e-01 3.406496e-03 2.000000e-01 4.485676e-03 3.000000e-01 4.947536e-03 4.000000e-01 5.316437e-03 5.000000e-01 5.661196e-03 6.000000e-01 5.997142e-03 7.000000e-01 6.329412e-03 8.000000e-01 6.660187e-03 9.000000e-01 6.990627e-03 1.000000e+00 7.321669e-03 1.100000e+00 7.654527e-03 1.200000e+00 7.991088e-03 1.000000e-01 4.031881e-03 2.000000e-01 5.795369e-03 3.000000e-01 6.437274e-03 4.000000e-01 6.857711e-03 5.000000e-01 7.226512e-03 6.000000e-01 7.577328e-03 7.000000e-01 7.920407e-03 8.000000e-01 8.259831e-03 9.000000e-01 8.597587e-03 1.000000e+00 8.934983e-03 1.100000e+00 9.273395e-03 1.200000e+00 9.614801e-03 1.000000e-01 4.447752e-03 2.000000e-01 6.897105e-03 3.000000e-01 7.856388e-03 4.000000e-01 8.360232e-03 5.000000e-01 8.762310e-03 6.000000e-01 9.131724e-03 7.000000e-01 9.487499e-03 8.000000e-01 9.836697e-03 9.000000e-01 1.018253e-02 1.000000e+00 1.052683e-02 1.100000e+00 1.087119e-02 1.200000e+00 1.121766e-02 1.000000e-01 4.738214e-03 2.000000e-01 7.757390e-03 3.000000e-01 9.175754e-03 4.000000e-01 9.817568e-03 5.000000e-01 1.026749e-02 6.000000e-01 1.066078e-02 7.000000e-01 1.103168e-02 8.000000e-01 1.139197e-02 9.000000e-01 1.174669e-02 1.000000e+00 1.209847e-02 1.100000e+00 1.244919e-02 1.200000e+00 1.280097e-02 1.000000e-01 4.934493e-03 2.000000e-01 8.388412e-03 3.000000e-01 1.034314e-02 4.000000e-01 1.121284e-02 5.000000e-01 1.173643e-02 6.000000e-01 1.216280e-02 7.000000e-01 1.255290e-02 8.000000e-01 1.292607e-02 9.000000e-01 1.329063e-02 1.000000e+00 1.365051e-02 1.100000e+00 1.400805e-02 1.200000e+00 1.436550e-02 1.000000e-01 5.076453e-03 2.000000e-01 8.854427e-03 3.000000e-01 1.131542e-02 4.000000e-01 1.252094e-02 5.000000e-01 1.315716e-02 6.000000e-01 1.362882e-02 7.000000e-01 1.404363e-02 8.000000e-01 1.443366e-02 9.000000e-01 1.481101e-02 1.000000e+00 1.518117e-02 1.100000e+00 1.554718e-02 1.200000e+00 1.591142e-02 1.000000e-01 3.086192e-06 2.000000e-01 4.621116e-06 3.000000e-01 6.672341e-06 4.000000e-01 9.545743e-06 5.000000e-01 1.357522e-05 6.000000e-01 1.920386e-05 7.000000e-01 2.702344e-05 8.000000e-01 3.781735e-05 9.000000e-01 5.261004e-05 1.000000e+00 7.272259e-05 1.100000e+00 9.983155e-05 1.200000e+00 1.360261e-04 1.000000e-01 1.657772e-05 2.000000e-01 2.439951e-05 3.000000e-01 3.450415e-05 4.000000e-01 4.823817e-05 5.000000e-01 6.687828e-05 6.000000e-01 9.198042e-05 7.000000e-01 1.254321e-04 8.000000e-01 1.694518e-04 9.000000e-01 2.265423e-04 1.000000e+00 2.993961e-04 1.100000e+00 3.907660e-04 1.200000e+00 5.033272e-04 1.000000e-01 7.825845e-05 2.000000e-01 1.128577e-04 3.000000e-01 1.544802e-04 4.000000e-01 2.079002e-04 5.000000e-01 2.759354e-04 6.000000e-01 3.611870e-04 7.000000e-01 4.659963e-04 8.000000e-01 5.922686e-04 9.000000e-01 7.413231e-04 1.000000e+00 9.138362e-04 1.100000e+00 1.109908e-03 1.200000e+00 1.329252e-03 1.000000e-01 2.933428e-04 2.000000e-01 4.158853e-04 3.000000e-01 5.381511e-04 4.000000e-01 6.790645e-04 5.000000e-01 8.412619e-04 6.000000e-01 1.025251e-03 7.000000e-01 1.230599e-03 8.000000e-01 1.456246e-03 9.000000e-01 1.700731e-03 1.000000e+00 1.962420e-03 1.100000e+00 2.239778e-03 1.200000e+00 2.531640e-03 1.000000e-01 7.299964e-04 2.000000e-01 1.066847e-03 3.000000e-01 1.304685e-03 4.000000e-01 1.542987e-03 5.000000e-01 1.793489e-03 6.000000e-01 2.057408e-03 7.000000e-01 2.334023e-03 8.000000e-01 2.622101e-03 9.000000e-01 2.920318e-03 1.000000e+00 3.227483e-03 1.100000e+00 3.542747e-03 1.200000e+00 3.865813e-03 1.000000e-01 1.219490e-03 2.000000e-01 1.922472e-03 3.000000e-01 2.314048e-03 4.000000e-01 2.631167e-03 5.000000e-01 2.938244e-03 6.000000e-01 3.246975e-03 7.000000e-01 3.560041e-03 8.000000e-01 3.877959e-03 9.000000e-01 4.200591e-03 1.000000e+00 4.527666e-03 1.100000e+00 4.859074e-03 1.200000e+00 5.195153e-03 1.000000e-01 1.615186e-03 2.000000e-01 2.706375e-03 3.000000e-01 3.347917e-03 4.000000e-01 3.758968e-03 5.000000e-01 4.111663e-03 6.000000e-01 4.450107e-03 7.000000e-01 4.785232e-03 8.000000e-01 5.120549e-03 9.000000e-01 5.457365e-03 1.000000e+00 5.796222e-03 1.100000e+00 6.137501e-03 1.200000e+00 6.481837e-03 1.000000e-01 1.905921e-03 2.000000e-01 3.315208e-03 3.000000e-01 4.262445e-03 4.000000e-01 4.832844e-03 5.000000e-01 5.246577e-03 6.000000e-01 5.616272e-03 7.000000e-01 5.971894e-03 8.000000e-01 6.322603e-03 9.000000e-01 6.671887e-03 1.000000e+00 7.021296e-03 1.100000e+00 7.371697e-03 1.200000e+00 7.723929e-03 1.000000e-01 2.119122e-03 2.000000e-01 3.776007e-03 3.000000e-01 5.002170e-03 4.000000e-01 5.804055e-03 5.000000e-01 6.320089e-03 6.000000e-01 6.733725e-03 7.000000e-01 7.114284e-03 8.000000e-01 7.482293e-03 9.000000e-01 7.845076e-03 1.000000e+00 8.205761e-03 1.100000e+00 8.565930e-03 1.200000e+00 8.926699e-03 1.000000e-01 2.278844e-03 2.000000e-01 4.129832e-03 3.000000e-01 5.584225e-03 4.000000e-01 6.636839e-03 5.000000e-01 7.315731e-03 6.000000e-01 7.798441e-03 7.000000e-01 8.213004e-03 8.000000e-01 8.602258e-03 9.000000e-01 8.980606e-03 1.000000e+00 9.353841e-03 1.100000e+00 9.724694e-03 1.200000e+00 1.009476e-02 1.000000e-01 2.401058e-03 2.000000e-01 4.406463e-03 3.000000e-01 6.045474e-03 4.000000e-01 7.320852e-03 5.000000e-01 8.210303e-03 6.000000e-01 8.802992e-03 7.000000e-01 9.267156e-03 8.000000e-01 9.683942e-03 9.000000e-01 1.008085e-02 1.000000e+00 1.046829e-02 1.100000e+00 1.085086e-02 1.200000e+00 1.123099e-02 1.000000e-01 2.496042e-03 2.000000e-01 4.625850e-03 3.000000e-01 6.415743e-03 4.000000e-01 7.875165e-03 5.000000e-01 8.980567e-03 6.000000e-01 9.732659e-03 7.000000e-01 1.027217e-02 8.000000e-01 1.072657e-02 9.000000e-01 1.114648e-02 1.000000e+00 1.155035e-02 1.100000e+00 1.194594e-02 1.200000e+00 1.233698e-02 tmpk8ny_4pz/tests/bsim4/nmos/reference/acFreq_xpart.standard0000644000175000017500000000712113546075722024414 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 1258.925 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 1584.893 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 1995.262 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 2511.886 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 3162.278 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 3981.072 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 5011.872 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 6309.573 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 7943.282 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 10000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 12589.25 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 15848.93 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 19952.62 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 25118.86 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 31622.78 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 39810.72 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 50118.72 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 63095.73 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 79432.82 1.39210168579019e-14 1.01277256219657e-14 3.71918252520243e-15 100000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 125892.5 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 158489.3 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 199526.2 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 251188.6 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 316227.8 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 398107.2 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 501187.2 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 630957.3 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 794328.2 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 1000000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 1258925 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 1584893 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 1995262 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 2511886 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 3162278 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 3981072 1.39210163059323e-14 1.0127724190444e-14 3.71918106361498e-15 5011872 1.39210179087015e-14 1.01277239885519e-14 3.71918272852533e-15 6309573 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 7943282 1.39210168579019e-14 1.01277256219658e-14 3.71918252520243e-15 10000000 1.39210154919437e-14 1.01277245360386e-14 3.71918204820377e-15 12589250 1.39210212117493e-14 1.01277284232093e-14 3.71918335454673e-15 15848930 1.39210126711702e-14 1.0127727792417e-14 3.71918195372563e-15 19952620 1.39210142874832e-14 1.01277292937126e-14 3.7191819726474e-15 25118860 1.39210187580933e-14 1.01277256054525e-14 3.71918200178189e-15 31622780 1.39210132757997e-14 1.01277210988125e-14 3.71918091025135e-15 39810720 1.39210123081412e-14 1.0127724190444e-14 3.71918106361498e-15 50118720 1.39210147331426e-14 1.01277239885519e-14 3.71918272852533e-15 63095730 1.39210167474267e-14 1.01277244648048e-14 3.71918058943789e-15 79432820 1.39210148542597e-14 1.01277236183236e-14 3.71918052156032e-15 100000000 1.39210139003943e-14 1.01277229444892e-14 3.71918045665434e-15 tmpk8ny_4pz/tests/bsim4/nmos/reference/dcSweep_lw1.standard0000644000175000017500000002575213546075722024164 0ustar carstencarstenV(d) I(d) 1.000000e-01 5.381036e-07 2.000000e-01 8.979352e-07 3.000000e-01 1.458523e-06 4.000000e-01 2.345919e-06 5.000000e-01 3.743979e-06 6.000000e-01 5.928842e-06 7.000000e-01 9.309998e-06 8.000000e-01 1.448406e-05 9.000000e-01 2.230339e-05 1.000000e+00 3.396036e-05 1.100000e+00 5.108560e-05 1.200000e+00 7.585441e-05 1.000000e-01 6.175374e-06 2.000000e-01 9.996042e-06 3.000000e-01 1.566575e-05 4.000000e-01 2.417709e-05 5.000000e-01 3.680960e-05 6.000000e-01 5.527369e-05 7.000000e-01 8.179037e-05 8.000000e-01 1.191243e-04 9.000000e-01 1.705364e-04 1.000000e+00 2.396239e-04 1.100000e+00 3.300467e-04 1.200000e+00 4.451953e-04 1.000000e-01 5.603719e-05 2.000000e-01 8.564974e-05 3.000000e-01 1.256776e-04 4.000000e-01 1.802895e-04 5.000000e-01 2.531861e-04 6.000000e-01 3.478281e-04 7.000000e-01 4.670448e-04 8.000000e-01 6.126440e-04 9.000000e-01 7.852036e-04 1.000000e+00 9.841360e-04 1.100000e+00 1.208010e-03 1.200000e+00 1.455038e-03 1.000000e-01 3.365708e-04 2.000000e-01 4.731344e-04 3.000000e-01 6.258448e-04 4.000000e-01 8.032825e-04 5.000000e-01 1.005617e-03 6.000000e-01 1.231184e-03 7.000000e-01 1.477470e-03 8.000000e-01 1.741619e-03 9.000000e-01 2.020814e-03 1.000000e+00 2.312608e-03 1.100000e+00 2.615194e-03 1.200000e+00 2.927631e-03 1.000000e-01 1.078590e-03 2.000000e-01 1.427275e-03 3.000000e-01 1.711529e-03 4.000000e-01 1.997733e-03 5.000000e-01 2.291821e-03 6.000000e-01 2.593736e-03 7.000000e-01 2.902373e-03 8.000000e-01 3.216532e-03 9.000000e-01 3.535218e-03 1.000000e+00 3.857820e-03 1.100000e+00 4.184298e-03 1.200000e+00 4.515363e-03 1.000000e-01 1.966489e-03 2.000000e-01 2.694690e-03 3.000000e-01 3.087158e-03 4.000000e-01 3.431488e-03 5.000000e-01 3.765245e-03 6.000000e-01 4.096264e-03 7.000000e-01 4.426871e-03 8.000000e-01 4.757875e-03 9.000000e-01 5.089625e-03 1.000000e+00 5.422472e-03 1.100000e+00 5.757099e-03 1.200000e+00 6.094820e-03 1.000000e-01 2.647620e-03 2.000000e-01 3.934138e-03 3.000000e-01 4.490970e-03 4.000000e-01 4.888747e-03 5.000000e-01 5.250041e-03 6.000000e-01 5.598883e-03 7.000000e-01 5.942449e-03 8.000000e-01 6.283548e-03 9.000000e-01 6.623523e-03 1.000000e+00 6.963260e-03 1.100000e+00 7.303747e-03 1.200000e+00 7.646505e-03 1.000000e-01 3.121627e-03 2.000000e-01 4.977198e-03 3.000000e-01 5.828211e-03 4.000000e-01 6.309533e-03 5.000000e-01 6.705044e-03 6.000000e-01 7.073379e-03 7.000000e-01 7.430342e-03 8.000000e-01 7.781726e-03 9.000000e-01 8.130143e-03 1.000000e+00 8.477066e-03 1.100000e+00 8.823745e-03 1.200000e+00 9.171809e-03 1.000000e-01 3.459366e-03 2.000000e-01 5.786304e-03 3.000000e-01 7.049916e-03 4.000000e-01 7.676678e-03 5.000000e-01 8.123155e-03 6.000000e-01 8.516979e-03 7.000000e-01 8.890143e-03 8.000000e-01 9.253415e-03 9.000000e-01 9.611348e-03 1.000000e+00 9.966270e-03 1.100000e+00 1.031979e-02 1.200000e+00 1.067365e-02 1.000000e-01 3.709371e-03 2.000000e-01 6.404043e-03 3.000000e-01 8.109684e-03 4.000000e-01 8.973978e-03 5.000000e-01 9.500490e-03 6.000000e-01 9.929411e-03 7.000000e-01 1.032288e-02 8.000000e-01 1.070018e-02 9.000000e-01 1.106892e-02 1.000000e+00 1.143272e-02 1.100000e+00 1.179374e-02 1.200000e+00 1.215392e-02 1.000000e-01 3.900511e-03 2.000000e-01 6.883659e-03 3.000000e-01 8.983496e-03 4.000000e-01 1.017591e-02 5.000000e-01 1.082983e-02 6.000000e-01 1.130891e-02 7.000000e-01 1.172853e-02 8.000000e-01 1.212265e-02 9.000000e-01 1.250374e-02 1.000000e+00 1.287741e-02 1.100000e+00 1.324664e-02 1.200000e+00 1.361368e-02 1.000000e-01 4.050406e-03 2.000000e-01 7.264261e-03 3.000000e-01 9.687450e-03 4.000000e-01 1.124967e-02 5.000000e-01 1.209852e-02 6.000000e-01 1.265156e-02 7.000000e-01 1.310595e-02 8.000000e-01 1.352068e-02 9.000000e-01 1.391611e-02 1.000000e+00 1.430081e-02 1.100000e+00 1.467905e-02 1.200000e+00 1.505357e-02 1.000000e-01 7.321028e-08 2.000000e-01 1.375764e-07 3.000000e-01 2.536872e-07 4.000000e-01 4.640314e-07 5.000000e-01 8.424837e-07 6.000000e-01 1.516439e-06 7.000000e-01 2.700786e-06 8.000000e-01 4.748026e-06 9.000000e-01 8.217731e-06 1.000000e+00 1.396616e-05 1.100000e+00 2.325376e-05 1.200000e+00 3.786694e-05 1.000000e-01 2.075842e-06 2.000000e-01 3.741078e-06 3.000000e-01 6.542583e-06 4.000000e-01 1.120680e-05 5.000000e-01 1.879079e-05 6.000000e-01 3.078970e-05 7.000000e-01 4.922683e-05 8.000000e-01 7.671926e-05 9.000000e-01 1.165001e-04 1.000000e+00 1.723658e-04 1.100000e+00 2.485040e-04 1.200000e+00 3.491799e-04 1.000000e-01 3.962783e-05 2.000000e-01 6.367046e-05 3.000000e-01 9.807032e-05 4.000000e-01 1.466088e-04 5.000000e-01 2.131723e-04 6.000000e-01 3.016524e-04 7.000000e-01 4.154759e-04 8.000000e-01 5.570550e-04 9.000000e-01 7.273784e-04 1.000000e+00 9.259365e-04 1.100000e+00 1.151040e-03 1.200000e+00 1.400437e-03 1.000000e-01 3.472832e-04 2.000000e-01 4.836094e-04 3.000000e-01 6.416803e-04 4.000000e-01 8.260673e-04 5.000000e-01 1.036062e-03 6.000000e-01 1.269272e-03 7.000000e-01 1.522506e-03 8.000000e-01 1.792368e-03 9.000000e-01 2.075732e-03 1.000000e+00 2.370096e-03 1.100000e+00 2.673833e-03 1.200000e+00 2.986366e-03 1.000000e-01 1.272216e-03 2.000000e-01 1.594399e-03 3.000000e-01 1.882878e-03 4.000000e-01 2.173914e-03 5.000000e-01 2.470903e-03 6.000000e-01 2.773539e-03 7.000000e-01 3.080925e-03 8.000000e-01 3.392216e-03 9.000000e-01 3.706839e-03 1.000000e+00 4.024657e-03 1.100000e+00 4.346137e-03 1.200000e+00 4.672512e-03 1.000000e-01 2.461389e-03 2.000000e-01 3.044287e-03 3.000000e-01 3.409153e-03 4.000000e-01 3.742685e-03 5.000000e-01 4.068030e-03 6.000000e-01 4.390920e-03 7.000000e-01 4.713334e-03 8.000000e-01 5.036113e-03 9.000000e-01 5.359768e-03 1.000000e+00 5.684901e-03 1.100000e+00 6.012529e-03 1.200000e+00 6.344369e-03 1.000000e-01 3.406496e-03 2.000000e-01 4.485676e-03 3.000000e-01 4.947536e-03 4.000000e-01 5.316437e-03 5.000000e-01 5.661196e-03 6.000000e-01 5.997142e-03 7.000000e-01 6.329412e-03 8.000000e-01 6.660187e-03 9.000000e-01 6.990627e-03 1.000000e+00 7.321669e-03 1.100000e+00 7.654527e-03 1.200000e+00 7.991088e-03 1.000000e-01 4.031881e-03 2.000000e-01 5.795369e-03 3.000000e-01 6.437274e-03 4.000000e-01 6.857711e-03 5.000000e-01 7.226512e-03 6.000000e-01 7.577328e-03 7.000000e-01 7.920407e-03 8.000000e-01 8.259831e-03 9.000000e-01 8.597587e-03 1.000000e+00 8.934983e-03 1.100000e+00 9.273395e-03 1.200000e+00 9.614801e-03 1.000000e-01 4.447752e-03 2.000000e-01 6.897105e-03 3.000000e-01 7.856388e-03 4.000000e-01 8.360232e-03 5.000000e-01 8.762310e-03 6.000000e-01 9.131724e-03 7.000000e-01 9.487499e-03 8.000000e-01 9.836697e-03 9.000000e-01 1.018253e-02 1.000000e+00 1.052683e-02 1.100000e+00 1.087119e-02 1.200000e+00 1.121766e-02 1.000000e-01 4.738214e-03 2.000000e-01 7.757390e-03 3.000000e-01 9.175754e-03 4.000000e-01 9.817568e-03 5.000000e-01 1.026749e-02 6.000000e-01 1.066078e-02 7.000000e-01 1.103168e-02 8.000000e-01 1.139197e-02 9.000000e-01 1.174669e-02 1.000000e+00 1.209847e-02 1.100000e+00 1.244919e-02 1.200000e+00 1.280097e-02 1.000000e-01 4.934493e-03 2.000000e-01 8.388412e-03 3.000000e-01 1.034314e-02 4.000000e-01 1.121284e-02 5.000000e-01 1.173643e-02 6.000000e-01 1.216280e-02 7.000000e-01 1.255290e-02 8.000000e-01 1.292607e-02 9.000000e-01 1.329063e-02 1.000000e+00 1.365051e-02 1.100000e+00 1.400805e-02 1.200000e+00 1.436550e-02 1.000000e-01 5.076453e-03 2.000000e-01 8.854427e-03 3.000000e-01 1.131542e-02 4.000000e-01 1.252094e-02 5.000000e-01 1.315716e-02 6.000000e-01 1.362882e-02 7.000000e-01 1.404363e-02 8.000000e-01 1.443366e-02 9.000000e-01 1.481101e-02 1.000000e+00 1.518117e-02 1.100000e+00 1.554718e-02 1.200000e+00 1.591142e-02 1.000000e-01 3.086192e-06 2.000000e-01 4.621116e-06 3.000000e-01 6.672341e-06 4.000000e-01 9.545743e-06 5.000000e-01 1.357522e-05 6.000000e-01 1.920386e-05 7.000000e-01 2.702344e-05 8.000000e-01 3.781735e-05 9.000000e-01 5.261004e-05 1.000000e+00 7.272259e-05 1.100000e+00 9.983155e-05 1.200000e+00 1.360261e-04 1.000000e-01 1.657772e-05 2.000000e-01 2.439951e-05 3.000000e-01 3.450415e-05 4.000000e-01 4.823817e-05 5.000000e-01 6.687828e-05 6.000000e-01 9.198042e-05 7.000000e-01 1.254321e-04 8.000000e-01 1.694518e-04 9.000000e-01 2.265423e-04 1.000000e+00 2.993961e-04 1.100000e+00 3.907660e-04 1.200000e+00 5.033272e-04 1.000000e-01 7.825845e-05 2.000000e-01 1.128577e-04 3.000000e-01 1.544802e-04 4.000000e-01 2.079002e-04 5.000000e-01 2.759354e-04 6.000000e-01 3.611870e-04 7.000000e-01 4.659963e-04 8.000000e-01 5.922686e-04 9.000000e-01 7.413231e-04 1.000000e+00 9.138362e-04 1.100000e+00 1.109908e-03 1.200000e+00 1.329252e-03 1.000000e-01 2.933428e-04 2.000000e-01 4.158853e-04 3.000000e-01 5.381511e-04 4.000000e-01 6.790645e-04 5.000000e-01 8.412619e-04 6.000000e-01 1.025251e-03 7.000000e-01 1.230599e-03 8.000000e-01 1.456246e-03 9.000000e-01 1.700731e-03 1.000000e+00 1.962420e-03 1.100000e+00 2.239778e-03 1.200000e+00 2.531640e-03 1.000000e-01 7.299964e-04 2.000000e-01 1.066847e-03 3.000000e-01 1.304685e-03 4.000000e-01 1.542987e-03 5.000000e-01 1.793489e-03 6.000000e-01 2.057408e-03 7.000000e-01 2.334023e-03 8.000000e-01 2.622101e-03 9.000000e-01 2.920318e-03 1.000000e+00 3.227483e-03 1.100000e+00 3.542747e-03 1.200000e+00 3.865813e-03 1.000000e-01 1.219490e-03 2.000000e-01 1.922472e-03 3.000000e-01 2.314048e-03 4.000000e-01 2.631167e-03 5.000000e-01 2.938244e-03 6.000000e-01 3.246975e-03 7.000000e-01 3.560041e-03 8.000000e-01 3.877959e-03 9.000000e-01 4.200591e-03 1.000000e+00 4.527666e-03 1.100000e+00 4.859074e-03 1.200000e+00 5.195153e-03 1.000000e-01 1.615186e-03 2.000000e-01 2.706375e-03 3.000000e-01 3.347917e-03 4.000000e-01 3.758968e-03 5.000000e-01 4.111663e-03 6.000000e-01 4.450107e-03 7.000000e-01 4.785232e-03 8.000000e-01 5.120549e-03 9.000000e-01 5.457365e-03 1.000000e+00 5.796222e-03 1.100000e+00 6.137501e-03 1.200000e+00 6.481837e-03 1.000000e-01 1.905921e-03 2.000000e-01 3.315208e-03 3.000000e-01 4.262445e-03 4.000000e-01 4.832844e-03 5.000000e-01 5.246577e-03 6.000000e-01 5.616272e-03 7.000000e-01 5.971894e-03 8.000000e-01 6.322603e-03 9.000000e-01 6.671887e-03 1.000000e+00 7.021296e-03 1.100000e+00 7.371697e-03 1.200000e+00 7.723929e-03 1.000000e-01 2.119122e-03 2.000000e-01 3.776007e-03 3.000000e-01 5.002170e-03 4.000000e-01 5.804055e-03 5.000000e-01 6.320089e-03 6.000000e-01 6.733725e-03 7.000000e-01 7.114284e-03 8.000000e-01 7.482293e-03 9.000000e-01 7.845076e-03 1.000000e+00 8.205761e-03 1.100000e+00 8.565930e-03 1.200000e+00 8.926699e-03 1.000000e-01 2.278844e-03 2.000000e-01 4.129832e-03 3.000000e-01 5.584225e-03 4.000000e-01 6.636839e-03 5.000000e-01 7.315731e-03 6.000000e-01 7.798441e-03 7.000000e-01 8.213004e-03 8.000000e-01 8.602258e-03 9.000000e-01 8.980606e-03 1.000000e+00 9.353841e-03 1.100000e+00 9.724694e-03 1.200000e+00 1.009476e-02 1.000000e-01 2.401058e-03 2.000000e-01 4.406463e-03 3.000000e-01 6.045474e-03 4.000000e-01 7.320852e-03 5.000000e-01 8.210303e-03 6.000000e-01 8.802992e-03 7.000000e-01 9.267156e-03 8.000000e-01 9.683942e-03 9.000000e-01 1.008085e-02 1.000000e+00 1.046829e-02 1.100000e+00 1.085086e-02 1.200000e+00 1.123099e-02 1.000000e-01 2.496042e-03 2.000000e-01 4.625850e-03 3.000000e-01 6.415743e-03 4.000000e-01 7.875165e-03 5.000000e-01 8.980567e-03 6.000000e-01 9.732659e-03 7.000000e-01 1.027217e-02 8.000000e-01 1.072657e-02 9.000000e-01 1.114648e-02 1.000000e+00 1.155035e-02 1.100000e+00 1.194594e-02 1.200000e+00 1.233698e-02 tmpk8ny_4pz/tests/bsim4/nmos/reference/noise3.standard0000644000175000017500000000636113546075722023202 0ustar carstencarstenFreq N(d) 1000 6.834969e-16 1258.925 5.305627e-16 1584.893 4.118479e-16 1995.262 3.19696e-16 2511.886 2.481632e-16 3162.278 1.926362e-16 3981.072 1.495335e-16 5011.872 1.160751e-16 6309.573 9.010313e-17 7943.282 6.994248e-17 10000 5.429282e-17 12589.25 4.214483e-17 15848.93 3.271498e-17 19952.62 2.539508e-17 25118.86 1.971304e-17 31622.78 1.530237e-17 39810.72 1.18786e-17 50118.72 9.220904e-18 63095.73 7.157878e-18 79432.82 5.55646e-18 100000 4.313364e-18 125892.5 3.348414e-18 158489.3 2.599375e-18 199526.2 2.017935e-18 251188.6 1.566594e-18 316227.8 1.216242e-18 398107.2 9.442821e-19 501187.2 7.331741e-19 630957.3 5.693021e-19 794328.2 4.42097e-19 1000000 3.433544e-19 1258925 2.667057e-19 1584893 2.072073e-19 1995262 1.610219e-19 2511886 1.251707e-19 3162278 9.734121e-20 3981072 7.573867e-20 5011872 5.896977e-20 6309573 4.595295e-20 7943282 3.584869e-20 10000000 2.800528e-20 12589250 2.191686e-20 15848930 1.719074e-20 19952620 1.352211e-20 25118860 1.067434e-20 31622780 8.463766e-21 39810720 6.747815e-21 50118720 5.415814e-21 63095730 4.381852e-21 79432820 3.579241e-21 100000000 2.956217e-21 1000 1.430988e-15 1258.925 1.1108e-15 1584.893 8.622558e-16 1995.262 6.693238e-16 2511.886 5.195609e-16 3162.278 4.033078e-16 3981.072 3.130667e-16 5011.872 2.430173e-16 6309.573 1.886417e-16 7943.282 1.464328e-16 10000 1.136682e-16 12589.25 8.823481e-17 15848.93 6.849221e-17 19952.62 5.316707e-17 25118.86 4.127098e-17 31622.78 3.203667e-17 39810.72 2.486856e-17 50118.72 1.930434e-17 63095.73 1.498513e-17 79432.82 1.163236e-17 100000 9.029777e-18 125892.5 7.00953e-18 158489.3 5.44132e-18 199526.2 4.224001e-18 251188.6 3.279061e-18 316227.8 2.545553e-18 398107.2 1.976171e-18 501187.2 1.534189e-18 630957.3 1.191102e-18 794328.2 9.247815e-19 1000000 7.180511e-19 1258925 5.575772e-19 1584893 4.330098e-19 1995262 3.363148e-19 2511886 2.612555e-19 3162278 2.029909e-19 3981072 1.577633e-19 5011872 1.226554e-19 6309573 9.540303e-20 7943282 7.424845e-20 10000000 5.782728e-20 12589250 4.508038e-20 15848930 3.518564e-20 19952620 2.750488e-20 25118860 2.154271e-20 31622780 1.691459e-20 39810720 1.332203e-20 50118720 1.053331e-20 63095730 8.368581e-21 79432820 6.688214e-21 100000000 5.383833e-21 1000 2.291031e-15 1258.925 1.778407e-15 1584.893 1.380483e-15 1995.262 1.071596e-15 2511.886 8.318237e-16 3162.278 6.45701e-16 3981.072 5.012237e-16 5011.872 3.890737e-16 6309.573 3.020175e-16 7943.282 2.344404e-16 10000 1.819839e-16 12589.25 1.412647e-16 15848.93 1.096565e-16 19952.62 8.512074e-17 25118.86 6.607493e-17 31622.78 5.129067e-17 39810.72 3.981443e-17 50118.72 3.090604e-17 63095.73 2.399092e-17 79432.82 1.862308e-17 100000 1.445631e-17 125892.5 1.122187e-17 158489.3 8.711143e-18 199526.2 6.762198e-18 251188.6 5.249336e-18 316227.8 4.074981e-18 398107.2 3.163391e-18 501187.2 2.455772e-18 630957.3 1.906485e-18 794328.2 1.480102e-18 1000000 1.149124e-18 1258925 8.922027e-19 1584893 6.927686e-19 1995262 5.379584e-19 2511886 4.177874e-19 3162278 3.245051e-19 3981072 2.520949e-19 5011872 1.958868e-19 6309573 1.522553e-19 7943282 1.183865e-19 10000000 9.209601e-20 12589250 7.168806e-20 15848930 5.584644e-20 19952620 4.354943e-20 25118860 3.400391e-20 31622780 2.659423e-20 39810720 2.084249e-20 50118720 1.637772e-20 63095730 1.291195e-20 79432820 1.022165e-20 100000000 8.133323e-21 tmpk8ny_4pz/tests/bsim4/nmos/reference/dcSweep_lw1_vb1.standard0000644000175000017500000002575213546075722024734 0ustar carstencarstenV(d) I(d) 1.000000e-01 2.865069e-07 2.000000e-01 4.837065e-07 3.000000e-01 7.953930e-07 4.000000e-01 1.296081e-06 5.000000e-01 2.097284e-06 6.000000e-01 3.370397e-06 7.000000e-01 5.375901e-06 8.000000e-01 8.503451e-06 9.000000e-01 1.332571e-05 1.000000e+00 2.066852e-05 1.100000e+00 3.169935e-05 1.200000e+00 4.803433e-05 1.000000e-01 3.533485e-06 2.000000e-01 5.810320e-06 3.000000e-01 9.258704e-06 4.000000e-01 1.454107e-05 5.000000e-01 2.254737e-05 6.000000e-01 3.450993e-05 7.000000e-01 5.209492e-05 8.000000e-01 7.748160e-05 9.000000e-01 1.134066e-04 1.000000e+00 1.631385e-04 1.100000e+00 2.303502e-04 1.200000e+00 3.188834e-04 1.000000e-01 3.525185e-05 2.000000e-01 5.488996e-05 3.000000e-01 8.220786e-05 4.000000e-01 1.205488e-04 5.000000e-01 1.733213e-04 6.000000e-01 2.441420e-04 7.000000e-01 3.365068e-04 8.000000e-01 4.533470e-04 9.000000e-01 5.966283e-04 1.000000e+00 7.671431e-04 1.100000e+00 9.645831e-04 1.200000e+00 1.187877e-03 1.000000e-01 2.390241e-04 2.000000e-01 3.433220e-04 3.000000e-01 4.661172e-04 4.000000e-01 6.141409e-04 5.000000e-01 7.884655e-04 6.000000e-01 9.883743e-04 7.000000e-01 1.211992e-03 8.000000e-01 1.456737e-03 9.000000e-01 1.719756e-03 1.000000e+00 1.998343e-03 1.100000e+00 2.290295e-03 1.200000e+00 2.594208e-03 1.000000e-01 8.843269e-04 2.000000e-01 1.178359e-03 3.000000e-01 1.437563e-03 4.000000e-01 1.705625e-03 5.000000e-01 1.985564e-03 6.000000e-01 2.276317e-03 7.000000e-01 2.576158e-03 8.000000e-01 2.883410e-03 9.000000e-01 3.196688e-03 1.000000e+00 3.515058e-03 1.100000e+00 3.838207e-03 1.200000e+00 4.166604e-03 1.000000e-01 1.776535e-03 2.000000e-01 2.405935e-03 3.000000e-01 2.773458e-03 4.000000e-01 3.106640e-03 5.000000e-01 3.433373e-03 6.000000e-01 3.759373e-03 7.000000e-01 4.086189e-03 8.000000e-01 4.414242e-03 9.000000e-01 4.743650e-03 1.000000e+00 5.074615e-03 1.100000e+00 5.407712e-03 1.200000e+00 5.744162e-03 1.000000e-01 2.502105e-03 2.000000e-01 3.661539e-03 3.000000e-01 4.174635e-03 4.000000e-01 4.559249e-03 5.000000e-01 4.914206e-03 6.000000e-01 5.259089e-03 7.000000e-01 5.599831e-03 8.000000e-01 5.938763e-03 9.000000e-01 6.277003e-03 1.000000e+00 6.615319e-03 1.100000e+00 6.954632e-03 1.200000e+00 7.296415e-03 1.000000e-01 3.010811e-03 2.000000e-01 4.745730e-03 3.000000e-01 5.523609e-03 4.000000e-01 5.983465e-03 5.000000e-01 6.370668e-03 6.000000e-01 6.734498e-03 7.000000e-01 7.088498e-03 8.000000e-01 7.437704e-03 9.000000e-01 7.784410e-03 1.000000e+00 8.129940e-03 1.100000e+00 8.475473e-03 1.200000e+00 8.822603e-03 1.000000e-01 3.371728e-03 2.000000e-01 5.597253e-03 3.000000e-01 6.767933e-03 4.000000e-01 7.358041e-03 5.000000e-01 7.792129e-03 6.000000e-01 8.180108e-03 7.000000e-01 8.549760e-03 8.000000e-01 8.910592e-03 9.000000e-01 9.266671e-03 1.000000e+00 9.620112e-03 1.100000e+00 9.972426e-03 1.200000e+00 1.032532e-02 1.000000e-01 3.637508e-03 2.000000e-01 6.248093e-03 3.000000e-01 7.859918e-03 4.000000e-01 8.667322e-03 5.000000e-01 9.174390e-03 6.000000e-01 9.595238e-03 7.000000e-01 9.984308e-03 8.000000e-01 1.035874e-02 9.000000e-01 1.072540e-02 1.000000e+00 1.108757e-02 1.100000e+00 1.144729e-02 1.200000e+00 1.180642e-02 1.000000e-01 3.839830e-03 2.000000e-01 6.752043e-03 3.000000e-01 8.768517e-03 4.000000e-01 9.887526e-03 5.000000e-01 1.051080e-02 6.000000e-01 1.097823e-02 7.000000e-01 1.139213e-02 8.000000e-01 1.178277e-02 9.000000e-01 1.216146e-02 1.000000e+00 1.253331e-02 1.100000e+00 1.290111e-02 1.200000e+00 1.326699e-02 1.000000e-01 3.997953e-03 2.000000e-01 7.150749e-03 3.000000e-01 9.502602e-03 4.000000e-01 1.098642e-02 5.000000e-01 1.178976e-02 6.000000e-01 1.232552e-02 7.000000e-01 1.277219e-02 8.000000e-01 1.318259e-02 9.000000e-01 1.357518e-02 1.000000e+00 1.395781e-02 1.100000e+00 1.433445e-02 1.200000e+00 1.470769e-02 1.000000e-01 3.162869e-08 2.000000e-01 6.017752e-08 3.000000e-01 1.125124e-07 4.000000e-01 2.089734e-07 5.000000e-01 3.859045e-07 6.000000e-01 7.079164e-07 7.000000e-01 1.287905e-06 8.000000e-01 2.318737e-06 9.000000e-01 4.120941e-06 1.000000e+00 7.210242e-06 1.100000e+00 1.238694e-05 1.200000e+00 2.084686e-05 1.000000e-01 9.874537e-07 2.000000e-01 1.818780e-06 3.000000e-01 3.260546e-06 4.000000e-01 5.740978e-06 5.000000e-01 9.919558e-06 6.000000e-01 1.678210e-05 7.000000e-01 2.773798e-05 8.000000e-01 4.471201e-05 9.000000e-01 7.022037e-05 1.000000e+00 1.074176e-04 1.100000e+00 1.600894e-04 1.200000e+00 2.325495e-04 1.000000e-01 2.220603e-05 2.000000e-01 3.685601e-05 3.000000e-01 5.868537e-05 4.000000e-01 9.068038e-05 5.000000e-01 1.362468e-04 6.000000e-01 1.992049e-04 7.000000e-01 2.835143e-04 8.000000e-01 3.928099e-04 9.000000e-01 5.298466e-04 1.000000e+00 6.960524e-04 1.100000e+00 8.914018e-04 1.200000e+00 1.114705e-03 1.000000e-01 2.367692e-04 2.000000e-01 3.393460e-04 3.000000e-01 4.644221e-04 4.000000e-01 6.164780e-04 5.000000e-01 7.962513e-04 6.000000e-01 1.002606e-03 7.000000e-01 1.233063e-03 8.000000e-01 1.484370e-03 9.000000e-01 1.753100e-03 1.000000e+00 2.036186e-03 1.100000e+00 2.331327e-03 1.200000e+00 2.637273e-03 1.000000e-01 1.033617e-03 2.000000e-01 1.314556e-03 3.000000e-01 1.581880e-03 4.000000e-01 1.858070e-03 5.000000e-01 2.144112e-03 6.000000e-01 2.438596e-03 7.000000e-01 2.739881e-03 8.000000e-01 3.046571e-03 9.000000e-01 3.357683e-03 1.000000e+00 3.672768e-03 1.100000e+00 3.992048e-03 1.200000e+00 4.316560e-03 1.000000e-01 2.223766e-03 2.000000e-01 2.732542e-03 3.000000e-01 3.081176e-03 4.000000e-01 3.407151e-03 5.000000e-01 3.727757e-03 6.000000e-01 4.047250e-03 7.000000e-01 4.367035e-03 8.000000e-01 4.687670e-03 9.000000e-01 5.009514e-03 1.000000e+00 5.333078e-03 1.100000e+00 5.659319e-03 1.200000e+00 5.989896e-03 1.000000e-01 3.243805e-03 2.000000e-01 4.188063e-03 3.000000e-01 4.622450e-03 4.000000e-01 4.982179e-03 5.000000e-01 5.322088e-03 6.000000e-01 5.654787e-03 7.000000e-01 5.984576e-03 8.000000e-01 6.313306e-03 9.000000e-01 6.641987e-03 1.000000e+00 6.971483e-03 1.100000e+00 7.302975e-03 1.200000e+00 7.638327e-03 1.000000e-01 3.931698e-03 2.000000e-01 5.532538e-03 3.000000e-01 6.121803e-03 4.000000e-01 6.527863e-03 5.000000e-01 6.890219e-03 6.000000e-01 7.237125e-03 7.000000e-01 7.577385e-03 8.000000e-01 7.914562e-03 9.000000e-01 8.250423e-03 1.000000e+00 8.586177e-03 1.100000e+00 8.923164e-03 1.200000e+00 9.263349e-03 1.000000e-01 4.384473e-03 2.000000e-01 6.686096e-03 3.000000e-01 7.556199e-03 4.000000e-01 8.036209e-03 5.000000e-01 8.429198e-03 6.000000e-01 8.793683e-03 7.000000e-01 9.146156e-03 8.000000e-01 9.492841e-03 9.000000e-01 9.836614e-03 1.000000e+00 1.017917e-02 1.100000e+00 1.052203e-02 1.200000e+00 1.086724e-02 1.000000e-01 4.692829e-03 2.000000e-01 7.598375e-03 3.000000e-01 8.899351e-03 4.000000e-01 9.501572e-03 5.000000e-01 9.938161e-03 6.000000e-01 1.032504e-02 7.000000e-01 1.069199e-02 8.000000e-01 1.104944e-02 9.000000e-01 1.140191e-02 1.000000e+00 1.175181e-02 1.100000e+00 1.210095e-02 1.200000e+00 1.245143e-02 1.000000e-01 4.899205e-03 2.000000e-01 8.266946e-03 3.000000e-01 1.009776e-02 4.000000e-01 1.090549e-02 5.000000e-01 1.140961e-02 6.000000e-01 1.182796e-02 7.000000e-01 1.221387e-02 8.000000e-01 1.258456e-02 9.000000e-01 1.294692e-02 1.000000e+00 1.330478e-02 1.100000e+00 1.366065e-02 1.200000e+00 1.401672e-02 1.000000e-01 5.048886e-03 2.000000e-01 8.760874e-03 3.000000e-01 1.111182e-02 4.000000e-01 1.223039e-02 5.000000e-01 1.283616e-02 6.000000e-01 1.329621e-02 7.000000e-01 1.370517e-02 8.000000e-01 1.409158e-02 9.000000e-01 1.446638e-02 1.000000e+00 1.483462e-02 1.100000e+00 1.519917e-02 1.200000e+00 1.556238e-02 1.000000e-01 1.999198e-06 2.000000e-01 3.017469e-06 3.000000e-01 4.392889e-06 4.000000e-01 6.338460e-06 5.000000e-01 9.093871e-06 6.000000e-01 1.298222e-05 7.000000e-01 1.844168e-05 8.000000e-01 2.606210e-05 9.000000e-01 3.662954e-05 1.000000e+00 5.118025e-05 1.100000e+00 7.106358e-05 1.200000e+00 9.801233e-05 1.000000e-01 1.127121e-05 2.000000e-01 1.672909e-05 3.000000e-01 2.387478e-05 4.000000e-01 3.369901e-05 5.000000e-01 4.719262e-05 6.000000e-01 6.560019e-05 7.000000e-01 9.048181e-05 8.000000e-01 1.237448e-04 9.000000e-01 1.676442e-04 1.000000e+00 2.247446e-04 1.100000e+00 2.978381e-04 1.200000e+00 3.898314e-04 1.000000e-01 5.617709e-05 2.000000e-01 8.165649e-05 3.000000e-01 1.130421e-04 4.000000e-01 1.540625e-04 5.000000e-01 2.073069e-04 6.000000e-01 2.753830e-04 7.000000e-01 3.608551e-04 8.000000e-01 4.660581e-04 9.000000e-01 5.929047e-04 1.000000e+00 7.427512e-04 1.100000e+00 9.163708e-04 1.200000e+00 1.114054e-03 1.000000e-01 2.268044e-04 2.000000e-01 3.230856e-04 3.000000e-01 4.241157e-04 4.000000e-01 5.435021e-04 5.000000e-01 6.838485e-04 6.000000e-01 8.461343e-04 7.000000e-01 1.030450e-03 8.000000e-01 1.236196e-03 9.000000e-01 1.462248e-03 1.000000e+00 1.707183e-03 1.100000e+00 1.969543e-03 1.200000e+00 2.248119e-03 1.000000e-01 6.184398e-04 2.000000e-01 8.973873e-04 3.000000e-01 1.108265e-03 4.000000e-01 1.325956e-03 5.000000e-01 1.558490e-03 6.000000e-01 1.806420e-03 7.000000e-01 2.068815e-03 8.000000e-01 2.344312e-03 9.000000e-01 2.631465e-03 1.000000e+00 2.928954e-03 1.100000e+00 3.235785e-03 1.200000e+00 3.551502e-03 1.000000e-01 1.101566e-03 2.000000e-01 1.718523e-03 3.000000e-01 2.070432e-03 4.000000e-01 2.368542e-03 5.000000e-01 2.662181e-03 6.000000e-01 2.959986e-03 7.000000e-01 3.263749e-03 8.000000e-01 3.573601e-03 9.000000e-01 3.889189e-03 1.000000e+00 4.210091e-03 1.100000e+00 4.536082e-03 1.200000e+00 4.867395e-03 1.000000e-01 1.508926e-03 2.000000e-01 2.511340e-03 3.000000e-01 3.092487e-03 4.000000e-01 3.477971e-03 5.000000e-01 3.817526e-03 6.000000e-01 4.146771e-03 7.000000e-01 4.474535e-03 8.000000e-01 4.803625e-03 9.000000e-01 5.135035e-03 1.000000e+00 5.469145e-03 1.100000e+00 5.806232e-03 1.200000e+00 6.146857e-03 1.000000e-01 1.812457e-03 2.000000e-01 3.139840e-03 3.000000e-01 4.018057e-03 4.000000e-01 4.548485e-03 5.000000e-01 4.945014e-03 6.000000e-01 5.304947e-03 7.000000e-01 5.653550e-03 8.000000e-01 5.998613e-03 9.000000e-01 6.343110e-03 1.000000e+00 6.688356e-03 1.100000e+00 7.035095e-03 1.200000e+00 7.384092e-03 1.000000e-01 2.036060e-03 2.000000e-01 3.618342e-03 3.000000e-01 4.777492e-03 4.000000e-01 5.527036e-03 5.000000e-01 6.017170e-03 6.000000e-01 6.418515e-03 7.000000e-01 6.791426e-03 8.000000e-01 7.153747e-03 9.000000e-01 7.511901e-03 1.000000e+00 7.868648e-03 1.100000e+00 8.225391e-03 1.200000e+00 8.583153e-03 1.000000e-01 2.203950e-03 2.000000e-01 3.986619e-03 3.000000e-01 5.378450e-03 4.000000e-01 6.375130e-03 5.000000e-01 7.016911e-03 6.000000e-01 7.482316e-03 7.000000e-01 7.887623e-03 8.000000e-01 8.270672e-03 9.000000e-01 8.644259e-03 1.000000e+00 9.013573e-03 1.100000e+00 9.381075e-03 1.200000e+00 9.748228e-03 1.000000e-01 2.332683e-03 2.000000e-01 4.275045e-03 3.000000e-01 5.855764e-03 4.000000e-01 7.077033e-03 5.000000e-01 7.921461e-03 6.000000e-01 8.489052e-03 7.000000e-01 8.940992e-03 8.000000e-01 9.350504e-03 9.000000e-01 9.742243e-03 1.000000e+00 1.012560e-02 1.100000e+00 1.050479e-02 1.200000e+00 1.088201e-02 1.000000e-01 2.432991e-03 2.000000e-01 4.504209e-03 3.000000e-01 6.239551e-03 4.000000e-01 7.647901e-03 5.000000e-01 8.706308e-03 6.000000e-01 9.424716e-03 7.000000e-01 9.947133e-03 8.000000e-01 1.039241e-02 9.000000e-01 1.080639e-02 1.000000e+00 1.120587e-02 1.100000e+00 1.159791e-02 1.200000e+00 1.198596e-02 tmpk8ny_4pz/tests/bsim4/nmos/reference/acVd.standard0000644000175000017500000000332713546075722022656 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) 0.1 1.333979e-03 3.616213e-02 9.19499248958434e-15 5.89443559594416e-15 0.2 3.406870e-03 2.820723e-02 9.88390667611086e-15 4.98450134957549e-15 0.3 6.306278e-03 2.009141e-02 1.00680827259773e-14 4.71367427624788e-15 0.4 9.996485e-03 1.133818e-02 1.01034727355593e-14 4.65338025992301e-15 0.5 1.232492e-02 6.470022e-03 1.0114322738497e-14 4.62728925285876e-15 0.6 1.322301e-02 4.878001e-03 1.01195127399022e-14 4.60422124661299e-15 0.7 1.362641e-02 4.294504e-03 1.01227327407741e-14 4.57414623847005e-15 0.8 1.385609e-02 4.030639e-03 1.01249327413697e-14 4.52787122594089e-15 0.9 1.401116e-02 3.891239e-03 1.01264327417759e-14 4.45030620493983e-15 1 1.412822e-02 3.809463e-03 1.01273727420304e-14 4.31401116803735e-15 1.1 1.422267e-02 3.759746e-03 1.01277927421441e-14 4.07757910402234e-15 1.2 1.430079e-02 3.734764e-03 1.01277227421251e-14 3.71918300698503e-15 0.1 8.384251e-04 2.307719e-02 9.0321554454955e-15 5.95008461101137e-15 0.2 1.956853e-03 1.956437e-02 9.74008663717096e-15 5.02796536134356e-15 0.3 3.323944e-03 1.625305e-02 9.94564569282697e-15 4.73224628127633e-15 0.4 4.986992e-03 1.289427e-02 9.98599170375083e-15 4.66636326343822e-15 0.5 7.043919e-03 9.168328e-03 9.9984937071358e-15 4.63890125600276e-15 0.6 8.853895e-03 6.165402e-03 1.00046527088034e-14 4.6153542496273e-15 0.7 9.777520e-03 4.837968e-03 1.0008632709881e-14 4.58503924141938e-15 0.8 1.022243e-02 4.325359e-03 1.00115327106662e-14 4.53860722884771e-15 0.9 1.048149e-02 4.100620e-03 1.00137127112564e-14 4.4609172078128e-15 1 1.066000e-02 3.988943e-03 1.00153027116869e-14 4.32451517088135e-15 1.1 1.079776e-02 3.928684e-03 1.00163727119766e-14 4.08798510683981e-15 1.2 1.091164e-02 3.895692e-03 1.00169527121337e-14 3.72949500977705e-15 tmpk8ny_4pz/tests/bsim4/nmos/reference/noise4.standard0000644000175000017500000000635313546075722023204 0ustar carstencarstenFreq N(d) 1000 1.351598e-19 1258.925 1.04984e-19 1584.893 8.156012e-20 1995.262 6.337738e-20 2511.886 4.926309e-20 3162.278 3.830691e-20 3981.072 2.98022e-20 5011.872 2.320045e-20 6309.573 1.807586e-20 7943.282 1.409791e-20 10000 1.101004e-20 12589.25 8.613089e-21 15848.93 6.752463e-21 19952.62 5.308157e-21 25118.86 4.187018e-21 31622.78 3.316738e-21 39810.72 2.641185e-21 50118.72 2.11679e-21 63095.73 1.709729e-21 79432.82 1.393749e-21 100000 1.148471e-21 125892.5 9.580741e-22 158489.3 8.102793e-22 199526.2 6.95554e-22 251188.6 6.064988e-22 316227.8 5.3737e-22 398107.2 4.837089e-22 501187.2 4.420547e-22 630957.3 4.097207e-22 794328.2 3.846216e-22 1000000 3.651384e-22 1258925 3.500147e-22 1584893 3.382749e-22 1995262 3.291619e-22 2511886 3.22088e-22 3162278 3.165969e-22 3981072 3.123345e-22 5011872 3.090258e-22 6309573 3.064574e-22 7943282 3.044637e-22 10000000 3.029161e-22 12589250 3.017148e-22 15848930 3.007823e-22 19952620 3.000584e-22 25118860 2.994965e-22 31622780 2.990603e-22 39810720 2.987217e-22 50118720 2.984589e-22 63095730 2.982549e-22 79432820 2.980965e-22 100000000 2.979736e-22 1000 2.308127e-19 1258.925 1.792284e-19 1584.893 1.391862e-19 1995.262 1.081036e-19 2511.886 8.397574e-20 3162.278 6.52466e-20 3981.072 5.070816e-20 5011.872 3.942274e-20 6309.573 3.066246e-20 7943.282 2.386232e-20 10000 1.858373e-20 12589.25 1.448624e-20 15848.93 1.130557e-20 19952.62 8.836593e-21 25118.86 6.920053e-21 31622.78 5.432345e-21 39810.72 4.277515e-21 50118.72 3.381082e-21 63095.73 2.685228e-21 79432.82 2.145074e-21 100000 1.725781e-21 125892.5 1.400306e-21 158489.3 1.147657e-21 199526.2 9.515383e-22 251188.6 7.993022e-22 316227.8 6.811293e-22 398107.2 5.893979e-22 501187.2 5.181917e-22 630957.3 4.629181e-22 794328.2 4.200121e-22 1000000 3.867064e-22 1258925 3.60853e-22 1584893 3.407844e-22 1995262 3.252062e-22 2511886 3.131136e-22 3162278 3.037268e-22 3981072 2.964403e-22 5011872 2.907842e-22 6309573 2.863937e-22 7943282 2.829855e-22 10000000 2.8034e-22 12589250 2.782864e-22 15848930 2.766923e-22 19952620 2.754548e-22 25118860 2.744943e-22 31622780 2.737487e-22 39810720 2.731699e-22 50118720 2.727206e-22 63095730 2.723719e-22 79432820 2.721011e-22 100000000 2.71891e-22 1000 3.303481e-19 1258.925 2.564887e-19 1584.893 1.991556e-19 1995.262 1.546509e-19 2511.886 1.201043e-19 3162.278 9.328754e-20 3981.072 7.247114e-20 5011.872 5.631247e-20 6309.573 4.376934e-20 7943.282 3.403278e-20 10000 2.64748e-20 12589.25 2.060794e-20 15848.93 1.605381e-20 19952.62 1.251868e-20 25118.86 9.77454e-21 31622.78 7.644412e-21 39810.72 5.990906e-21 50118.72 4.707377e-21 63095.73 3.711042e-21 79432.82 2.937639e-21 100000 2.337287e-21 125892.5 1.871266e-21 158489.3 1.509519e-21 199526.2 1.228713e-21 251188.6 1.010738e-21 316227.8 8.415364e-22 398107.2 7.101938e-22 501187.2 6.082395e-22 630957.3 5.290977e-22 794328.2 4.676641e-22 1000000 4.199765e-22 1258925 3.829591e-22 1584893 3.542245e-22 1995262 3.319193e-22 2511886 3.14605e-22 3162278 3.011648e-22 3981072 2.907319e-22 5011872 2.826334e-22 6309573 2.763469e-22 7943282 2.714671e-22 10000000 2.676791e-22 12589250 2.647387e-22 15848930 2.624562e-22 19952620 2.606845e-22 25118860 2.593091e-22 31622780 2.582415e-22 39810720 2.574128e-22 50118720 2.567695e-22 63095730 2.562702e-22 79432820 2.558826e-22 100000000 2.555817e-22 tmpk8ny_4pz/tests/bsim4/nmos/qaSpec0000644000175000017500000003243113546075722017456 0ustar carstencarsten // // Test specification for bsim4 (version 4.5.0) // // // Simulator specific information // These arguments are added to the model card // specification to invoke the desired model in // different simulators (which can have different // names or levels for the same model) and to switch // between nType and pType polarities. // It is assumed that there are no polarity specific // parameters. // `ifdef spice nTypeSelectionArguments nmos level=14 version=4.5.0 pTypeSelectionArguments pmos level=14 version=4.5.0 `endif `ifdef ngspice nTypeSelectionArguments nmos level=14 version=4.8.1 pTypeSelectionArguments pmos level=14 version=4.8.1 `endif `ifdef hspice nTypeSelectionArguments nmos level=54 version=4.7 pTypeSelectionArguments pmos level=54 version=4.7 `endif // // General test-independent information // keyLetter m pins d g s b linearScale w l ps pd areaScale as ad temperature 27 -50 150 checkPolarity no symmetricPins d s scaleParameters m // // Specific tests // test dcSweep_lw1 biases V(s)=0 V(b)=0 biasList V(g)=0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2 biasSweep V(d)=0.1,1.2,0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/nmosParameters test dcSweep_lw1_vb1 biases V(s)=0 V(b)=-0.1 biasList V(g)=0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2 biasSweep V(d)=0.1,1.2,0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/nmosParameters test dcSweep_lw1_vb2 biases V(s)=0 V(b)=-0.2 biasList V(g)=0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2 biasSweep V(d)=0.1,1.2,0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/nmosParameters test dcSweep_lw2 biases V(s)=0 V(b)=0 biasList V(g)=0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2 biasSweep V(d)=0.1,1.2,0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters test dcSweep_lw3 biases V(s)=0 V(b)=0 biasList V(g)=0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2 biasSweep V(d)=0.1,1.2,0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.24e-6 modelParameters parameters/nmosParameters test dcSweep_lw4 biases V(s)=0 V(b)=0 biasList V(g)=0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2 biasSweep V(d)=0.1,1.2,0.1 outputs I(d) instanceParameters w=1.0e-6 l=0.06e-6 modelParameters parameters/nmosParameters test dcSweep_lw5 biases V(s)=0 V(b)=0 biasList V(g)=0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2 biasSweep V(d)=0.1,1.2,0.1 outputs I(d) instanceParameters w=1.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters test dcSweep_lw6 biases V(s)=0 V(b)=0 biasList V(g)=0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2 biasSweep V(d)=0.1,1.2,0.1 outputs I(d) instanceParameters w=1.0e-6 l=0.24e-6 modelParameters parameters/nmosParameters test dcSweep_lw7 biases V(s)=0 V(b)=0 biasList V(g)=0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2 biasSweep V(d)=0.1,1.2,0.1 outputs I(d) instanceParameters w=0.6e-6 l=0.06e-6 modelParameters parameters/nmosParameters test dcSweep_lw8 biases V(s)=0 V(b)=0 biasList V(g)=0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2 biasSweep V(d)=0.1,1.2,0.1 outputs I(d) instanceParameters w=0.6e-6 l=0.1e-6 modelParameters parameters/nmosParameters test dcSweep_lw9 biases V(s)=0 V(b)=0 biasList V(g)=0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2 biasSweep V(d)=0.1,1.2,0.1 outputs I(d) instanceParameters w=0.6e-6 l=0.24e-6 modelParameters parameters/nmosParameters test dcSweep_sa biases V(s)=0 V(b)=0 biasList V(g)=0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2 biasSweep V(d)=0.1,1.2,0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.06e-6 sa=0.3e-6 modelParameters parameters/nmosParameters test dcSweep_sb biases V(s)=0 V(b)=0 biasList V(g)=0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2 biasSweep V(d)=0.1,1.2,0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.06e-6 sb=0.4e-6 modelParameters parameters/nmosParameters test dcSweep_sca biases V(s)=0 V(b)=0 biasList V(g)=0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2 biasSweep V(d)=0.1,1.2,0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.06e-6 sca=5.0 modelParameters parameters/nmosParameters modelParameters wpemod=1 kvth0we=4.11e-03 lkvth0we=-2.1e-10 wkvth0we=-1.66e-10 pkvth0we=1.2e-17 k2we=1.77e-03 lk2we=1.89e-11 wk2we=-1.5e-10 test dcSweep_scb biases V(s)=0 V(b)=0 biasList V(g)=0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2 biasSweep V(d)=0.1,1.2,0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.06e-6 scb=0.01 modelParameters parameters/nmosParameters modelParameters wpemod=1 kvth0we=4.11e-03 lkvth0we=-2.1e-10 wkvth0we=-1.66e-10 pkvth0we=1.2e-17 k2we=1.77e-03 lk2we=1.89e-11 wk2we=-1.5e-10 test dcSweep_scc biases V(s)=0 V(b)=0 biasList V(g)=0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2 biasSweep V(d)=0.1,1.2,0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.06e-6 scc=0.0001 modelParameters parameters/nmosParameters modelParameters wpemod=1 kvth0we=4.11e-03 lkvth0we=-2.1e-10 wkvth0we=-1.66e-10 pkvth0we=1.2e-17 k2we=1.77e-03 lk2we=1.89e-11 wk2we=-1.5e-10 test dcSweep_nrs biases V(s)=0 V(b)=0 biasList V(g)=0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2 biasSweep V(d)=0.1,1.2,0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.06e-6 nrs=2.0 modelParameters parameters/nmosParameters test dcSweep_nrd biases V(s)=0 V(b)=0 biasList V(g)=0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2 biasSweep V(d)=0.1,1.2,0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.06e-6 nrd=2.0 modelParameters parameters/nmosParameters test acVd temperature 27 150 biases V(s)=0 V(b)=0 V(g)=1.2 biasSweep V(d)=0.1,1.2,0.1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/nmosParameters test acFreq temperature 27 biases V(s)=0 V(b)=0 V(d)=1.2 V(g)=1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/nmosParameters test acFreq_mobmod temperature 27 biases V(s)=0 V(b)=0 V(d)=1.2 V(g)=1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/nmosParameters modelParameters mobmod=1 test acFreq_capmod temperature 27 biases V(s)=0 V(b)=0 V(d)=1.2 V(g)=1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/nmosParameters modelParameters capmod=1 test acFreq_trnqsmod temperature 27 biases V(s)=0 V(b)=0 V(d)=1.2 V(g)=1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/nmosParameters modelParameters trnqsmod=1 test acFreq_acnqsmod temperature 27 biases V(s)=0 V(b)=0 V(d)=1.2 V(g)=1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/nmosParameters modelParameters acnqsmod=1 test acFreq_xpart temperature 27 biases V(s)=0 V(b)=0 V(d)=1.2 V(g)=1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/nmosParameters modelParameters xpart=1 test acFreq_geomod temperature 27 biases V(s)=0 V(b)=0 V(d)=1.2 V(g)=1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/nmosParameters modelParameters geomod=0 test acFreq_wpemod temperature 27 biases V(s)=0 V(b)=0 V(d)=1.2 V(g)=1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/nmosParameters modelParameters wpemod=1 kvth0we=4.11e-03 lkvth0we=-2.1e-10 wkvth0we=-1.66e-10 pkvth0we=1.2e-17 k2we=1.77e-03 lk2we=1.89e-11 wk2we=-1.5e-10 test acFreq_igcmod temperature 27 biases V(s)=0 V(b)=0 V(d)=1.2 V(g)=1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/nmosParameters modelParameters igcmod=0 test acFreq_diomod temperature 27 biases V(s)=0 V(b)=0 V(d)=1.2 V(g)=1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/nmosParameters modelParameters diomod=0 test noise1 temperature 27 biases V(s)=0 V(b)=0 V(d)=1.0 biasList V(g)=0.6,0.8,1.0 freq dec 10 1e3 1e8 outputs N(d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/nmosParameters modelParameters fnoimod=0 tnoimod=0 kf=1e-30 af=1.2 ef=1.1 test noise2 temperature 27 biases V(s)=0 V(b)=0 V(d)=1.0 biasList V(g)=0.6,0.8,1.0 freq dec 10 1e3 1e8 outputs N(d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/nmosParameters modelParameters fnoimod=1 tnoimod=1 noia=6.25e41 noib=3.125e26 noic=8.75 em=4.1e7 ef=1.1 test noise3 temperature 27 biases V(s)=0 V(b)=0 V(d)=1.0 biasList V(g)=0.6,0.8,1.0 freq dec 10 1e3 1e8 outputs N(d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/nmosParameters modelParameters fnoimod=1 tnoimod=0 noia=6.25e41 noib=3.125e26 noic=8.75 em=4.1e7 ef=1.1 test noise4 temperature 27 biases V(s)=0 V(b)=0 V(d)=1.0 biasList V(g)=0.6,0.8,1.0 freq dec 10 1e3 1e8 outputs N(d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/nmosParameters modelParameters fnoimod=0 tnoimod=1 kf=1e-30 af=1.2 ef=1.1 tmpk8ny_4pz/tests/bsim4/nmos/run0000755000175000017500000000023613546075722017047 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmpk8ny_4pz/tests/bsim4/pmos/0000755000175000017500000000000013546075722016316 5ustar carstencarstentmpk8ny_4pz/tests/bsim4/pmos/parameters/0000755000175000017500000000000013546075722020461 5ustar carstencarstentmpk8ny_4pz/tests/bsim4/pmos/parameters/pmosParameters0000644000175000017500000000762513546075722023420 0ustar carstencarsten+ binunit = (1) + paramchk= (1) + mobmod = (0) + capmod = (2) + igcmod = (1) + igbmod = (1) + geomod = (1) + diomod = (1) + rdsmod = (0) + rbodymod= (1) + rgatemod= (1) + permod = (1) + acnqsmod= (0) + trnqsmod= (0) + tnom = (27) + toxe = (1.95e-009) + toxp = (1.2e-009) + toxm = (1.95e-009) + dtox = (0.75e-9) + epsrox = (3.9) + wint = (5e-009) + lint = (5.25e-009) + ll = (0) + wl = (0) + lln = (1) + wln = (1) + lw = (0) + ww = (0) + lwn = (1) + wwn = (1) + lwl = (0) + wwl = (0) + xpart = (0) + toxref = (1.95e-009) + xl = (-30e-9) + vth0 = (-0.365) + k1 = (0.4) + k2 = (-0.01) + k3 = (0) + k3b = (0) + w0 = (2.5e-006) + dvt0 = (1) + dvt1 = (2) + dvt2 = (-0.032) + dvt0w = (0) + dvt1w = (0) + dvt2w = (0) + dsub = (0.1) + minv = (0.05) + voffl = (0) + dvtp0 = (1e-009) + dvtp1 = (0.05) + lpe0 = (0) + lpeb = (0) + xj = (1.96e-008) + ngate = (2e+020) + ndep = (1.87e+018) + nsd = (2e+020) + phin = (0) + cdsc = (0.000) + cdscb = (0) + cdscd = (0) + cit = (0) + voff = (-0.126) + nfactor = (1.9) + eta0 = (0.0058) + etab = (0) + vfb = (0.55) + u0 = (0.00574) + ua = (2.0e-009) + ub = (0.5e-018) + uc = (0) + vsat = (70000) + a0 = (1.0) + ags = (1e-020) + a1 = (0) + a2 = (1) + b0 = (-1e-020) + b1 = (0) + keta = (-0.047) + dwg = (0) + dwb = (0) + pclm = (0.12) + pdiblc1 = (0.001) + pdiblc2 = (0.001) + pdiblcb = (3.4e-008) + drout = (0.56) + pvag = (1e-020) + delta = (0.01) + pscbe1 = (8.14e+008) + pscbe2 = (9.58e-007) + fprout = (0.2) + pdits = (0.08) + pditsd = (0.23) + pditsl = (2.3e+006) + rsh = (5) + rdsw = (165) + rsw = (85) + rdw = (85) + rdswmin = (0) + rdwmin = (0) + rswmin = (0) + prwg = (3.22e-008) + prwb = (6.8e-011) + wr = (1) + alpha0 = (0.074) + alpha1 = (0.005) + beta0 = (30) + agidl = (0.0002) + bgidl = (2.1e+009) + cgidl = (0.0002) + egidl = (0.8) + aigbacc = (0.012) + bigbacc = (0.0028) + cigbacc = (0.002) + nigbacc = (1) + aigbinv = (0.014) + bigbinv = (0.004) + cigbinv = (0.004) + eigbinv = (1.1) + nigbinv = (3) + aigc = (0.69) + bigc = (0.0012) + cigc = (0.0008) + aigsd = (0.0087) + bigsd = (0.0012) + cigsd = (0.0008) + nigc = (1) + poxedge = (1) + pigcd = (1) + ntox = (1) + xrcrg1 = (12) + xrcrg2 = (5) + cgso = (1.5e-010) + cgdo = (1.5e-010) + cgbo = (2.56e-011) + cgdl = (2.653e-10) + cgsl = (2.653e-10) + ckappas = (0.03) + ckappad = (0.03) + acde = (1) + moin = (15) + noff = (0.9) + voffcv = (0.02) + kt1 = (-0.11) + kt1l = (0) + kt2 = (0.022) + ute = (-1.5) + ua1 = (4.31e-009) + ub1 = (7.61e-018) + uc1 = (-5.6e-011) + prt = (0) + at = (33000) + fnoimod = (1) + tnoimod = (0) + jss = (0.0001) + jsws = (1e-011) + jswgs = (1e-010) + njs = (1) + ijthsfwd= (0.01) + ijthsrev= (0.001) + bvs = (10) + xjbvs = (1) + jsd = (0.0001) + jswd = (1e-011) + jswgd = (1e-010) + njd = (1) + ijthdfwd= (0.01) + ijthdrev= (0.001) + bvd = (10) + xjbvd = (1) + pbs = (1) + cjs = (0.0005) + mjs = (0.5) + pbsws = (1) + cjsws = (5e-010) + mjsws = (0.33) + pbswgs = (1) + cjswgs = (3e-010) + mjswgs = (0.33) + pbd = (1) + cjd = (0.0005) + mjd = (0.5) + pbswd = (1) + cjswd = (5e-010) + mjswd = (0.33) + pbswgd = (1) + cjswgd = (5e-010) + mjswgd = (0.33) + tpb = (0.005) + tcj = (0.001) + tpbsw = (0.005) + tcjsw = (0.001) + tpbswg = (0.005) + tcjswg = (0.001) + xtis = (3) + xtid = (3) + dmcg = (0e-006) + dmci = (0e-006) + dmdg = (0e-006) + dmcgt = (0e-007) + dwj = (0.0e-008) + xgw = (0e-007) + xgl = (0e-008) + rshg = (0.4) + gbmin = (1e-010) + rbpb = (5) + rbpd = (15) + rbps = (15) + rbdb = (15) + rbsb = (15) + ngcon = (1) tmpk8ny_4pz/tests/bsim4/pmos/reference/0000755000175000017500000000000013546075722020254 5ustar carstencarstentmpk8ny_4pz/tests/bsim4/pmos/reference/acFreq_diomod.standard0000644000175000017500000000710513546075722024535 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 1258.925 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 1584.893 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 1995.262 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 2511.886 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 3162.278 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 3981.072 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 5011.872 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 6309.573 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 7943.282 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 10000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 12589.25 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 15848.93 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 19952.62 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 25118.86 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 31622.78 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 39810.72 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 50118.72 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 63095.73 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 79432.82 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 100000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 125892.5 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 158489.3 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 199526.2 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 251188.6 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 316227.8 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 398107.2 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 501187.2 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 630957.3 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 794328.2 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 1000000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 1258925 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 1584893 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 1995262 1.42948476769301e-14 1.06448391595228e-14 3.54785483061325e-15 2511886 1.42948470943482e-14 1.06448442438161e-14 3.54785520806153e-15 3162278 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 3981072 1.42948417584395e-14 1.06448384724498e-14 3.54785452562003e-15 5011872 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 6309573 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 7943282 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 10000000 1.42948449884757e-14 1.06448396362868e-14 3.5478549350642e-15 12589250 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 15848930 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 19952620 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 25118860 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 31622780 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 39810720 1.42948417584395e-14 1.06448384724498e-14 3.54785412584092e-15 50118720 1.42948446924018e-14 1.06448383371022e-14 3.54785497933912e-15 63095730 1.429484429045e-14 1.0644838986873e-14 3.54785421141287e-15 79432820 1.4294844380989e-14 1.06448396032868e-14 3.54785509563488e-15 100000000 1.42948418053768e-14 1.06448380447374e-14 3.54785334351477e-15 tmpk8ny_4pz/tests/bsim4/pmos/reference/dcSweep_lw5.standard0000644000175000017500000002751213546075722024166 0ustar carstencarstenV(d) I(d) -1.000000e-01 -3.204186e-09 -2.000000e-01 -3.544047e-09 -3.000000e-01 -3.841997e-09 -4.000000e-01 -4.147868e-09 -5.000000e-01 -4.469678e-09 -6.000000e-01 -4.811041e-09 -7.000000e-01 -5.174606e-09 -8.000000e-01 -5.563086e-09 -9.000000e-01 -5.980181e-09 -1.000000e+00 -6.431766e-09 -1.100000e+00 -6.927246e-09 -1.200000e+00 -7.480951e-09 -1.000000e-01 -3.844189e-08 -2.000000e-01 -4.236935e-08 -3.000000e-01 -4.574047e-08 -4.000000e-01 -4.917021e-08 -5.000000e-01 -5.275225e-08 -6.000000e-01 -5.652530e-08 -7.000000e-01 -6.051512e-08 -8.000000e-01 -6.474654e-08 -9.000000e-01 -6.925368e-08 -1.000000e+00 -7.409262e-08 -1.100000e+00 -7.935553e-08 -1.200000e+00 -8.518433e-08 -1.000000e-01 -3.733153e-07 -2.000000e-01 -4.112940e-07 -3.000000e-01 -4.416300e-07 -4.000000e-01 -4.719539e-07 -5.000000e-01 -5.032644e-07 -6.000000e-01 -5.359222e-07 -7.000000e-01 -5.701373e-07 -8.000000e-01 -6.060933e-07 -9.000000e-01 -6.440391e-07 -1.000000e+00 -6.843995e-07 -1.100000e+00 -7.278946e-07 -1.200000e+00 -7.756529e-07 -1.000000e-01 -2.581324e-06 -2.000000e-01 -2.921444e-06 -3.000000e-01 -3.110886e-06 -4.000000e-01 -3.288349e-06 -5.000000e-01 -3.465802e-06 -6.000000e-01 -3.646421e-06 -7.000000e-01 -3.831575e-06 -8.000000e-01 -4.022128e-06 -9.000000e-01 -4.219060e-06 -1.000000e+00 -4.424105e-06 -1.100000e+00 -4.640443e-06 -1.200000e+00 -4.873335e-06 -1.000000e-01 -8.966803e-06 -2.000000e-01 -1.158048e-05 -3.000000e-01 -1.233278e-05 -4.000000e-01 -1.288472e-05 -5.000000e-01 -1.339735e-05 -6.000000e-01 -1.389857e-05 -7.000000e-01 -1.439757e-05 -8.000000e-01 -1.489861e-05 -9.000000e-01 -1.540462e-05 -1.000000e+00 -1.591949e-05 -1.100000e+00 -1.645034e-05 -1.200000e+00 -1.700979e-05 -1.000000e-01 -1.738042e-05 -2.000000e-01 -2.618201e-05 -3.000000e-01 -2.912541e-05 -4.000000e-01 -3.041357e-05 -5.000000e-01 -3.141216e-05 -6.000000e-01 -3.232577e-05 -7.000000e-01 -3.320369e-05 -8.000000e-01 -3.406444e-05 -9.000000e-01 -3.491730e-05 -1.000000e+00 -3.576945e-05 -1.100000e+00 -3.663112e-05 -1.200000e+00 -3.752069e-05 -1.000000e-01 -2.556255e-05 -2.000000e-01 -4.194092e-05 -3.000000e-01 -5.019281e-05 -4.000000e-01 -5.344170e-05 -5.000000e-01 -5.523671e-05 -6.000000e-01 -5.667801e-05 -7.000000e-01 -5.798940e-05 -8.000000e-01 -5.923761e-05 -9.000000e-01 -6.045042e-05 -1.000000e+00 -6.164299e-05 -1.100000e+00 -6.282871e-05 -1.200000e+00 -6.402813e-05 -1.000000e-01 -3.297760e-05 -2.000000e-01 -5.665123e-05 -3.000000e-01 -7.163846e-05 -4.000000e-01 -7.925133e-05 -5.000000e-01 -8.276007e-05 -6.000000e-01 -8.500917e-05 -7.000000e-01 -8.687026e-05 -8.000000e-01 -8.856548e-05 -9.000000e-01 -9.017220e-05 -1.000000e+00 -9.172561e-05 -1.100000e+00 -9.324691e-05 -1.200000e+00 -9.475800e-05 -1.000000e-01 -3.961042e-05 -2.000000e-01 -6.998872e-05 -3.000000e-01 -9.162548e-05 -4.000000e-01 -1.051678e-04 -5.000000e-01 -1.122207e-04 -6.000000e-01 -1.159711e-04 -7.000000e-01 -1.186272e-04 -8.000000e-01 -1.208810e-04 -9.000000e-01 -1.229425e-04 -1.000000e+00 -1.248939e-04 -1.100000e+00 -1.267760e-04 -1.200000e+00 -1.286165e-04 -1.000000e-01 -4.553464e-05 -2.000000e-01 -8.200403e-05 -3.000000e-01 -1.098360e-04 -4.000000e-01 -1.294875e-04 -5.000000e-01 -1.416854e-04 -6.000000e-01 -1.483169e-04 -7.000000e-01 -1.523005e-04 -8.000000e-01 -1.553237e-04 -9.000000e-01 -1.579423e-04 -1.000000e+00 -1.603499e-04 -1.100000e+00 -1.626300e-04 -1.200000e+00 -1.648274e-04 -1.000000e-01 -5.082962e-05 -2.000000e-01 -9.281172e-05 -3.000000e-01 -1.263298e-04 -4.000000e-01 -1.517655e-04 -5.000000e-01 -1.695657e-04 -6.000000e-01 -1.805898e-04 -7.000000e-01 -1.869381e-04 -8.000000e-01 -1.911469e-04 -9.000000e-01 -1.945031e-04 -1.000000e+00 -1.974594e-04 -1.100000e+00 -2.001921e-04 -1.200000e+00 -2.027835e-04 -1.000000e-01 -5.556791e-05 -2.000000e-01 -1.025331e-04 -3.000000e-01 -1.412430e-04 -4.000000e-01 -1.720347e-04 -5.000000e-01 -1.952574e-04 -6.000000e-01 -2.113745e-04 -7.000000e-01 -2.214230e-04 -8.000000e-01 -2.276018e-04 -9.000000e-01 -2.320269e-04 -1.000000e+00 -2.356866e-04 -1.100000e+00 -2.389552e-04 -1.200000e+00 -2.419920e-04 -1.000000e-01 -4.818451e-10 -2.000000e-01 -5.423122e-10 -3.000000e-01 -5.997088e-10 -4.000000e-01 -6.604632e-10 -5.000000e-01 -7.260459e-10 -6.000000e-01 -7.973631e-10 -7.000000e-01 -8.752575e-10 -8.000000e-01 -9.607020e-10 -9.000000e-01 -1.055006e-09 -1.000000e+00 -1.160100e-09 -1.100000e+00 -1.278889e-09 -1.200000e+00 -1.415676e-09 -1.000000e-01 -1.428179e-08 -2.000000e-01 -1.596441e-08 -3.000000e-01 -1.752784e-08 -4.000000e-01 -1.915991e-08 -5.000000e-01 -2.089844e-08 -6.000000e-01 -2.276263e-08 -7.000000e-01 -2.476750e-08 -8.000000e-01 -2.692859e-08 -9.000000e-01 -2.926661e-08 -1.000000e+00 -3.181342e-08 -1.100000e+00 -3.461902e-08 -1.200000e+00 -3.775886e-08 -1.000000e-01 -2.739817e-07 -2.000000e-01 -3.029861e-07 -3.000000e-01 -3.285551e-07 -4.000000e-01 -3.546387e-07 -5.000000e-01 -3.819294e-07 -6.000000e-01 -4.107216e-07 -7.000000e-01 -4.412122e-07 -8.000000e-01 -4.735910e-07 -9.000000e-01 -5.081189e-07 -1.000000e+00 -5.452224e-07 -1.100000e+00 -5.855985e-07 -1.200000e+00 -6.303158e-07 -1.000000e-01 -3.199015e-06 -2.000000e-01 -3.549781e-06 -3.000000e-01 -3.804390e-06 -4.000000e-01 -4.051641e-06 -5.000000e-01 -4.302597e-06 -6.000000e-01 -4.560750e-06 -7.000000e-01 -4.827777e-06 -8.000000e-01 -5.104900e-06 -9.000000e-01 -5.393695e-06 -1.000000e+00 -5.696985e-06 -1.100000e+00 -6.019781e-06 -1.200000e+00 -6.370125e-06 -1.000000e-01 -1.702046e-05 -2.000000e-01 -2.034438e-05 -3.000000e-01 -2.156220e-05 -4.000000e-01 -2.255491e-05 -5.000000e-01 -2.349268e-05 -6.000000e-01 -2.441406e-05 -7.000000e-01 -2.533323e-05 -8.000000e-01 -2.625728e-05 -9.000000e-01 -2.719197e-05 -1.000000e+00 -2.814609e-05 -1.100000e+00 -2.913569e-05 -1.200000e+00 -3.018779e-05 -1.000000e-01 -4.040202e-05 -2.000000e-01 -5.615518e-05 -3.000000e-01 -6.053890e-05 -4.000000e-01 -6.290769e-05 -5.000000e-01 -6.485343e-05 -6.000000e-01 -6.664710e-05 -7.000000e-01 -6.836968e-05 -8.000000e-01 -7.005500e-05 -9.000000e-01 -7.172208e-05 -1.000000e+00 -7.338936e-05 -1.100000e+00 -7.508614e-05 -1.200000e+00 -7.686299e-05 -1.000000e-01 -6.633104e-05 -2.000000e-01 -1.024375e-04 -3.000000e-01 -1.162094e-04 -4.000000e-01 -1.214900e-04 -5.000000e-01 -1.249191e-04 -6.000000e-01 -1.277851e-04 -7.000000e-01 -1.304046e-04 -8.000000e-01 -1.328920e-04 -9.000000e-01 -1.353006e-04 -1.000000e+00 -1.376663e-04 -1.100000e+00 -1.400313e-04 -1.200000e+00 -1.424661e-04 -1.000000e-01 -9.295052e-05 -2.000000e-01 -1.520253e-04 -3.000000e-01 -1.822560e-04 -4.000000e-01 -1.940763e-04 -5.000000e-01 -2.000150e-04 -6.000000e-01 -2.043350e-04 -7.000000e-01 -2.080290e-04 -8.000000e-01 -2.114094e-04 -9.000000e-01 -2.146061e-04 -1.000000e+00 -2.176892e-04 -1.100000e+00 -2.207186e-04 -1.200000e+00 -2.237803e-04 -1.000000e-01 -1.200743e-04 -2.000000e-01 -2.030999e-04 -3.000000e-01 -2.535561e-04 -4.000000e-01 -2.772145e-04 -5.000000e-01 -2.876123e-04 -6.000000e-01 -2.940363e-04 -7.000000e-01 -2.990824e-04 -8.000000e-01 -3.034951e-04 -9.000000e-01 -3.075557e-04 -1.000000e+00 -3.113979e-04 -1.100000e+00 -3.151104e-04 -1.200000e+00 -3.187954e-04 -1.000000e-01 -1.478816e-04 -2.000000e-01 -2.556092e-04 -3.000000e-01 -3.278300e-04 -4.000000e-01 -3.678635e-04 -5.000000e-01 -3.857251e-04 -6.000000e-01 -3.952607e-04 -7.000000e-01 -4.020506e-04 -8.000000e-01 -4.076805e-04 -9.000000e-01 -4.127025e-04 -1.000000e+00 -4.173584e-04 -1.100000e+00 -4.217843e-04 -1.200000e+00 -4.261046e-04 -1.000000e-01 -1.766773e-04 -2.000000e-01 -3.099655e-04 -3.000000e-01 -4.048656e-04 -4.000000e-01 -4.639356e-04 -5.000000e-01 -4.927207e-04 -6.000000e-01 -5.067557e-04 -7.000000e-01 -5.157961e-04 -8.000000e-01 -5.228657e-04 -9.000000e-01 -5.289612e-04 -1.000000e+00 -5.344916e-04 -1.100000e+00 -5.396655e-04 -1.200000e+00 -5.446396e-04 -1.000000e-01 -2.068457e-04 -2.000000e-01 -3.667895e-04 -3.000000e-01 -4.852581e-04 -4.000000e-01 -5.647569e-04 -5.000000e-01 -6.074006e-04 -6.000000e-01 -6.275522e-04 -7.000000e-01 -6.394254e-04 -8.000000e-01 -6.481746e-04 -9.000000e-01 -6.554574e-04 -1.000000e+00 -6.619210e-04 -1.100000e+00 -6.678746e-04 -1.200000e+00 -6.735205e-04 -1.000000e-01 -1.646353e-08 -2.000000e-01 -1.805210e-08 -3.000000e-01 -1.923747e-08 -4.000000e-01 -2.041482e-08 -5.000000e-01 -2.162576e-08 -6.000000e-01 -2.288432e-08 -7.000000e-01 -2.419863e-08 -8.000000e-01 -2.557595e-08 -9.000000e-01 -2.702642e-08 -1.000000e+00 -2.856755e-08 -1.100000e+00 -3.022929e-08 -1.200000e+00 -3.205860e-08 -1.000000e-01 -9.299005e-08 -2.000000e-01 -1.021284e-07 -3.000000e-01 -1.086376e-07 -4.000000e-01 -1.150509e-07 -5.000000e-01 -1.216178e-07 -6.000000e-01 -1.284179e-07 -7.000000e-01 -1.354945e-07 -8.000000e-01 -1.428843e-07 -9.000000e-01 -1.506376e-07 -1.000000e+00 -1.588430e-07 -1.100000e+00 -1.676534e-07 -1.200000e+00 -1.773110e-07 -1.000000e-01 -4.725658e-07 -2.000000e-01 -5.272905e-07 -3.000000e-01 -5.598586e-07 -4.000000e-01 -5.911810e-07 -5.000000e-01 -6.229273e-07 -6.000000e-01 -6.555539e-07 -7.000000e-01 -6.892791e-07 -8.000000e-01 -7.242635e-07 -9.000000e-01 -7.607107e-07 -1.000000e+00 -7.989819e-07 -1.100000e+00 -8.397239e-07 -1.200000e+00 -8.839866e-07 -1.000000e-01 -1.861466e-06 -2.000000e-01 -2.243691e-06 -3.000000e-01 -2.378747e-06 -4.000000e-01 -2.496079e-06 -5.000000e-01 -2.611345e-06 -6.000000e-01 -2.727524e-06 -7.000000e-01 -2.845714e-06 -8.000000e-01 -2.966513e-06 -9.000000e-01 -3.090485e-06 -1.000000e+00 -3.218568e-06 -1.100000e+00 -3.352551e-06 -1.200000e+00 -3.495526e-06 -1.000000e-01 -4.580434e-06 -2.000000e-01 -6.498154e-06 -3.000000e-01 -7.029842e-06 -4.000000e-01 -7.336282e-06 -5.000000e-01 -7.611189e-06 -6.000000e-01 -7.878273e-06 -7.000000e-01 -8.143629e-06 -8.000000e-01 -8.409751e-06 -9.000000e-01 -8.678111e-06 -1.000000e+00 -8.950321e-06 -1.100000e+00 -9.229301e-06 -1.200000e+00 -9.520525e-06 -1.000000e-01 -7.685418e-06 -2.000000e-01 -1.233413e-05 -3.000000e-01 -1.436739e-05 -4.000000e-01 -1.512863e-05 -5.000000e-01 -1.563462e-05 -6.000000e-01 -1.608737e-05 -7.000000e-01 -1.652168e-05 -8.000000e-01 -1.694795e-05 -9.000000e-01 -1.737078e-05 -1.000000e+00 -1.779305e-05 -1.100000e+00 -1.821821e-05 -1.200000e+00 -1.865257e-05 -1.000000e-01 -1.044604e-05 -2.000000e-01 -1.784732e-05 -3.000000e-01 -2.234020e-05 -4.000000e-01 -2.443419e-05 -5.000000e-01 -2.539439e-05 -6.000000e-01 -2.608342e-05 -7.000000e-01 -2.669999e-05 -8.000000e-01 -2.728692e-05 -9.000000e-01 -2.785853e-05 -1.000000e+00 -2.842153e-05 -1.100000e+00 -2.898049e-05 -1.200000e+00 -2.954132e-05 -1.000000e-01 -1.271671e-05 -2.000000e-01 -2.249349e-05 -3.000000e-01 -2.940665e-05 -4.000000e-01 -3.361863e-05 -5.000000e-01 -3.570517e-05 -6.000000e-01 -3.681766e-05 -7.000000e-01 -3.766482e-05 -8.000000e-01 -3.842725e-05 -9.000000e-01 -3.915091e-05 -1.000000e+00 -3.985269e-05 -1.100000e+00 -4.054103e-05 -1.200000e+00 -4.122224e-05 -1.000000e-01 -1.456028e-05 -2.000000e-01 -2.632371e-05 -3.000000e-01 -3.534564e-05 -4.000000e-01 -4.170489e-05 -5.000000e-01 -4.559557e-05 -6.000000e-01 -4.764454e-05 -7.000000e-01 -4.887591e-05 -8.000000e-01 -4.985974e-05 -9.000000e-01 -5.075270e-05 -1.000000e+00 -5.160022e-05 -1.100000e+00 -5.242051e-05 -1.200000e+00 -5.322324e-05 -1.000000e-01 -1.606175e-05 -2.000000e-01 -2.948072e-05 -3.000000e-01 -4.030080e-05 -4.000000e-01 -4.857406e-05 -5.000000e-01 -5.438568e-05 -6.000000e-01 -5.796661e-05 -7.000000e-01 -5.997581e-05 -8.000000e-01 -6.130510e-05 -9.000000e-01 -6.240831e-05 -1.000000e+00 -6.341850e-05 -1.100000e+00 -6.437869e-05 -1.200000e+00 -6.530741e-05 -1.000000e-01 -1.728909e-05 -2.000000e-01 -3.208902e-05 -3.000000e-01 -4.443583e-05 -4.000000e-01 -5.436899e-05 -5.000000e-01 -6.193953e-05 -6.000000e-01 -6.724305e-05 -7.000000e-01 -7.054965e-05 -8.000000e-01 -7.252838e-05 -9.000000e-01 -7.394161e-05 -1.000000e+00 -7.514985e-05 -1.100000e+00 -7.626534e-05 -1.200000e+00 -7.732781e-05 -1.000000e-01 -1.829328e-05 -2.000000e-01 -3.424539e-05 -3.000000e-01 -4.788648e-05 -4.000000e-01 -5.924826e-05 -5.000000e-01 -6.836727e-05 -6.000000e-01 -7.529575e-05 -7.000000e-01 -8.014340e-05 -8.000000e-01 -8.321822e-05 -9.000000e-01 -8.517791e-05 -1.000000e+00 -8.666464e-05 -1.100000e+00 -8.796563e-05 -1.200000e+00 -8.917550e-05 tmpk8ny_4pz/tests/bsim4/pmos/reference/dcSweep_lw4.standard0000644000175000017500000002751213546075722024165 0ustar carstencarstenV(d) I(d) -1.000000e-01 -2.041952e-08 -2.000000e-01 -3.915554e-08 -3.000000e-01 -7.218667e-08 -4.000000e-01 -1.306852e-07 -5.000000e-01 -2.330793e-07 -6.000000e-01 -4.098467e-07 -7.000000e-01 -7.106064e-07 -8.000000e-01 -1.214593e-06 -9.000000e-01 -2.045255e-06 -1.000000e+00 -3.388825e-06 -1.100000e+00 -5.515303e-06 -1.200000e+00 -8.799914e-06 -1.000000e-01 -2.326008e-07 -2.000000e-01 -4.259754e-07 -3.000000e-01 -7.462865e-07 -4.000000e-01 -1.278970e-06 -5.000000e-01 -2.149563e-06 -6.000000e-01 -3.537794e-06 -7.000000e-01 -5.682471e-06 -8.000000e-01 -8.872407e-06 -9.000000e-01 -1.342267e-05 -1.000000e+00 -1.964655e-05 -1.100000e+00 -2.784280e-05 -1.200000e+00 -3.831701e-05 -1.000000e-01 -2.068971e-06 -2.000000e-01 -3.575567e-06 -3.000000e-01 -5.792157e-06 -4.000000e-01 -9.025908e-06 -5.000000e-01 -1.355519e-05 -6.000000e-01 -1.962481e-05 -7.000000e-01 -2.741851e-05 -8.000000e-01 -3.704516e-05 -9.000000e-01 -4.854660e-05 -1.000000e+00 -6.192997e-05 -1.100000e+00 -7.722516e-05 -1.200000e+00 -9.456475e-05 -1.000000e-01 -1.163619e-05 -2.000000e-01 -1.859482e-05 -3.000000e-01 -2.633971e-05 -4.000000e-01 -3.563348e-05 -5.000000e-01 -4.657727e-05 -6.000000e-01 -5.916404e-05 -7.000000e-01 -7.334078e-05 -8.000000e-01 -8.903258e-05 -9.000000e-01 -1.061625e-04 -1.000000e+00 -1.246804e-04 -1.100000e+00 -1.446128e-04 -1.200000e+00 -1.661395e-04 -1.000000e-01 -3.195616e-05 -2.000000e-01 -5.159415e-05 -3.000000e-01 -6.688566e-05 -4.000000e-01 -8.236630e-05 -5.000000e-01 -9.883228e-05 -6.000000e-01 -1.164107e-04 -7.000000e-01 -1.351035e-04 -8.000000e-01 -1.548784e-04 -9.000000e-01 -1.756969e-04 -1.000000e+00 -1.975400e-04 -1.100000e+00 -2.204574e-04 -1.200000e+00 -2.446516e-04 -1.000000e-01 -5.454207e-05 -2.000000e-01 -9.239985e-05 -3.000000e-01 -1.183873e-04 -4.000000e-01 -1.400078e-04 -5.000000e-01 -1.610565e-04 -6.000000e-01 -1.824865e-04 -7.000000e-01 -2.045637e-04 -8.000000e-01 -2.273733e-04 -9.000000e-01 -2.509397e-04 -1.000000e+00 -2.752750e-04 -1.100000e+00 -3.004336e-04 -1.200000e+00 -3.266032e-04 -1.000000e-01 -7.489789e-05 -2.000000e-01 -1.311518e-04 -3.000000e-01 -1.716660e-04 -4.000000e-01 -2.016516e-04 -5.000000e-01 -2.276551e-04 -6.000000e-01 -2.527282e-04 -7.000000e-01 -2.778121e-04 -8.000000e-01 -3.032367e-04 -9.000000e-01 -3.291358e-04 -1.000000e+00 -3.555727e-04 -1.100000e+00 -3.826120e-04 -1.200000e+00 -4.104147e-04 -1.000000e-01 -9.250506e-05 -2.000000e-01 -1.654993e-04 -3.000000e-01 -2.213889e-04 -4.000000e-01 -2.629267e-04 -5.000000e-01 -2.955437e-04 -6.000000e-01 -3.247288e-04 -7.000000e-01 -3.528621e-04 -8.000000e-01 -3.807861e-04 -9.000000e-01 -4.088411e-04 -1.000000e+00 -4.371848e-04 -1.100000e+00 -4.659157e-04 -1.200000e+00 -4.951762e-04 -1.000000e-01 -1.076920e-04 -2.000000e-01 -1.955970e-04 -3.000000e-01 -2.659366e-04 -4.000000e-01 -3.205831e-04 -5.000000e-01 -3.623504e-04 -6.000000e-01 -3.968287e-04 -7.000000e-01 -4.284150e-04 -8.000000e-01 -4.589401e-04 -9.000000e-01 -4.891278e-04 -1.000000e+00 -5.193025e-04 -1.100000e+00 -5.496354e-04 -1.200000e+00 -5.802741e-04 -1.000000e-01 -1.208438e-04 -2.000000e-01 -2.219709e-04 -3.000000e-01 -3.054532e-04 -4.000000e-01 -3.729458e-04 -5.000000e-01 -4.258569e-04 -6.000000e-01 -4.675386e-04 -7.000000e-01 -5.034253e-04 -8.000000e-01 -5.368827e-04 -9.000000e-01 -5.693195e-04 -1.000000e+00 -6.013469e-04 -1.100000e+00 -6.332653e-04 -1.200000e+00 -6.652639e-04 -1.000000e-01 -1.322875e-04 -2.000000e-01 -2.451399e-04 -3.000000e-01 -3.404777e-04 -4.000000e-01 -4.198652e-04 -5.000000e-01 -4.843795e-04 -6.000000e-01 -5.353210e-04 -7.000000e-01 -5.768996e-04 -8.000000e-01 -6.139138e-04 -9.000000e-01 -6.488732e-04 -1.000000e+00 -6.828716e-04 -1.100000e+00 -7.164236e-04 -1.200000e+00 -7.498096e-04 -1.000000e-01 -1.422910e-04 -2.000000e-01 -2.655582e-04 -3.000000e-01 -3.715714e-04 -4.000000e-01 -4.618098e-04 -5.000000e-01 -5.373396e-04 -6.000000e-01 -5.986988e-04 -7.000000e-01 -6.477691e-04 -8.000000e-01 -6.893486e-04 -9.000000e-01 -7.273048e-04 -1.000000e+00 -7.635032e-04 -1.100000e+00 -7.988045e-04 -1.200000e+00 -8.336460e-04 -1.000000e-01 -3.844165e-09 -2.000000e-01 -8.748076e-09 -3.000000e-01 -1.908707e-08 -4.000000e-01 -4.061302e-08 -5.000000e-01 -8.428539e-08 -6.000000e-01 -1.702276e-07 -7.000000e-01 -3.339609e-07 -8.000000e-01 -6.363065e-07 -9.000000e-01 -1.179540e-06 -1.000000e+00 -2.133499e-06 -1.100000e+00 -3.774223e-06 -1.200000e+00 -6.532192e-06 -1.000000e-01 -1.041948e-07 -2.000000e-01 -2.162157e-07 -3.000000e-01 -4.235645e-07 -4.000000e-01 -8.003944e-07 -5.000000e-01 -1.467705e-06 -6.000000e-01 -2.618717e-06 -7.000000e-01 -4.544312e-06 -8.000000e-01 -7.642727e-06 -9.000000e-01 -1.239347e-05 -1.000000e+00 -1.929416e-05 -1.100000e+00 -2.879679e-05 -1.200000e+00 -4.130098e-05 -1.000000e-01 -1.702720e-06 -2.000000e-01 -3.148124e-06 -3.000000e-01 -5.479059e-06 -4.000000e-01 -9.140690e-06 -5.000000e-01 -1.459721e-05 -6.000000e-01 -2.225404e-05 -7.000000e-01 -3.237069e-05 -8.000000e-01 -4.502413e-05 -9.000000e-01 -6.014225e-05 -1.000000e+00 -7.759348e-05 -1.100000e+00 -9.730749e-05 -1.200000e+00 -1.194068e-04 -1.000000e-01 -1.536196e-05 -2.000000e-01 -2.469768e-05 -3.000000e-01 -3.590272e-05 -4.000000e-01 -4.942907e-05 -5.000000e-01 -6.519592e-05 -6.000000e-01 -8.299704e-05 -7.000000e-01 -1.025904e-04 -8.000000e-01 -1.237440e-04 -9.000000e-01 -1.462721e-04 -1.000000e+00 -1.700847e-04 -1.100000e+00 -1.952642e-04 -1.200000e+00 -2.221699e-04 -1.000000e-01 -5.640405e-05 -2.000000e-01 -8.360761e-05 -3.000000e-01 -1.057298e-04 -4.000000e-01 -1.280513e-04 -5.000000e-01 -1.511868e-04 -6.000000e-01 -1.751880e-04 -7.000000e-01 -2.000029e-04 -8.000000e-01 -2.255631e-04 -9.000000e-01 -2.518216e-04 -1.000000e+00 -2.788069e-04 -1.100000e+00 -3.067168e-04 -1.200000e+00 -3.360477e-04 -1.000000e-01 -1.079042e-04 -2.000000e-01 -1.644216e-04 -3.000000e-01 -1.980714e-04 -4.000000e-01 -2.268315e-04 -5.000000e-01 -2.546192e-04 -6.000000e-01 -2.823044e-04 -7.000000e-01 -3.101556e-04 -8.000000e-01 -3.382707e-04 -9.000000e-01 -3.667013e-04 -1.000000e+00 -3.955370e-04 -1.100000e+00 -4.250223e-04 -1.200000e+00 -4.557140e-04 -1.000000e-01 -1.563831e-04 -2.000000e-01 -2.486607e-04 -3.000000e-01 -2.990588e-04 -4.000000e-01 -3.346210e-04 -5.000000e-01 -3.663526e-04 -6.000000e-01 -3.968403e-04 -7.000000e-01 -4.268763e-04 -8.000000e-01 -4.567754e-04 -9.000000e-01 -4.866949e-04 -1.000000e+00 -5.167756e-04 -1.100000e+00 -5.472837e-04 -1.200000e+00 -5.787959e-04 -1.000000e-01 -2.000056e-04 -2.000000e-01 -3.284420e-04 -3.000000e-01 -4.018430e-04 -4.000000e-01 -4.464042e-04 -5.000000e-01 -4.823395e-04 -6.000000e-01 -5.154170e-04 -7.000000e-01 -5.473058e-04 -8.000000e-01 -5.786388e-04 -9.000000e-01 -6.097138e-04 -1.000000e+00 -6.407330e-04 -1.100000e+00 -6.719785e-04 -1.200000e+00 -7.040233e-04 -1.000000e-01 -2.393178e-04 -2.000000e-01 -4.020670e-04 -3.000000e-01 -5.024266e-04 -4.000000e-01 -5.594171e-04 -5.000000e-01 -6.004233e-04 -6.000000e-01 -6.362186e-04 -7.000000e-01 -6.698761e-04 -8.000000e-01 -7.024940e-04 -9.000000e-01 -7.345612e-04 -1.000000e+00 -7.663616e-04 -1.100000e+00 -7.981975e-04 -1.200000e+00 -8.306262e-04 -1.000000e-01 -2.751096e-04 -2.000000e-01 -4.699763e-04 -3.000000e-01 -5.985240e-04 -4.000000e-01 -6.718143e-04 -5.000000e-01 -7.192672e-04 -6.000000e-01 -7.581378e-04 -7.000000e-01 -7.936246e-04 -8.000000e-01 -8.274901e-04 -9.000000e-01 -8.604797e-04 -1.000000e+00 -8.929859e-04 -1.100000e+00 -9.253421e-04 -1.200000e+00 -9.580867e-04 -1.000000e-01 -3.080887e-04 -2.000000e-01 -5.330546e-04 -3.000000e-01 -6.893183e-04 -4.000000e-01 -7.822343e-04 -5.000000e-01 -8.379450e-04 -6.000000e-01 -8.804322e-04 -7.000000e-01 -9.179037e-04 -8.000000e-01 -9.530466e-04 -9.000000e-01 -9.869434e-04 -1.000000e+00 -1.020127e-03 -1.100000e+00 -1.052977e-03 -1.200000e+00 -1.086017e-03 -1.000000e-01 -3.388430e-04 -2.000000e-01 -5.921747e-04 -3.000000e-01 -7.750015e-04 -4.000000e-01 -8.896897e-04 -5.000000e-01 -9.557552e-04 -6.000000e-01 -1.002556e-03 -7.000000e-01 -1.042235e-03 -8.000000e-01 -1.078726e-03 -9.000000e-01 -1.113547e-03 -1.000000e+00 -1.147408e-03 -1.100000e+00 -1.180752e-03 -1.200000e+00 -1.214095e-03 -1.000000e-01 -8.553844e-08 -2.000000e-01 -1.425441e-07 -3.000000e-01 -2.281096e-07 -4.000000e-01 -3.607792e-07 -5.000000e-01 -5.661282e-07 -6.000000e-01 -8.822956e-07 -7.000000e-01 -1.365583e-06 -8.000000e-01 -2.097480e-06 -9.000000e-01 -3.193178e-06 -1.000000e+00 -4.811687e-06 -1.100000e+00 -7.168261e-06 -1.200000e+00 -1.055105e-05 -1.000000e-01 -4.695674e-07 -2.000000e-01 -7.701525e-07 -3.000000e-01 -1.204510e-06 -4.000000e-01 -1.854864e-06 -5.000000e-01 -2.819206e-06 -6.000000e-01 -4.225170e-06 -7.000000e-01 -6.231511e-06 -8.000000e-01 -9.024280e-06 -9.000000e-01 -1.280894e-05 -1.000000e+00 -1.780286e-05 -1.100000e+00 -2.423584e-05 -1.200000e+00 -3.236696e-05 -1.000000e-01 -2.247633e-06 -2.000000e-01 -3.638124e-06 -3.000000e-01 -5.427077e-06 -4.000000e-01 -7.870163e-06 -5.000000e-01 -1.113851e-05 -6.000000e-01 -1.539427e-05 -7.000000e-01 -2.078431e-05 -8.000000e-01 -2.743186e-05 -9.000000e-01 -3.543349e-05 -1.000000e+00 -4.486666e-05 -1.100000e+00 -5.581284e-05 -1.200000e+00 -6.839956e-05 -1.000000e-01 -7.726195e-06 -2.000000e-01 -1.270897e-05 -3.000000e-01 -1.755949e-05 -4.000000e-01 -2.330434e-05 -5.000000e-01 -3.012592e-05 -6.000000e-01 -3.809740e-05 -7.000000e-01 -4.725763e-05 -8.000000e-01 -5.762512e-05 -9.000000e-01 -6.920622e-05 -1.000000e+00 -8.200689e-05 -1.100000e+00 -9.605551e-05 -1.200000e+00 -1.114439e-04 -1.000000e-01 -1.659256e-05 -2.000000e-01 -2.893733e-05 -3.000000e-01 -3.849114e-05 -4.000000e-01 -4.782198e-05 -5.000000e-01 -5.789107e-05 -6.000000e-01 -6.888590e-05 -7.000000e-01 -8.085771e-05 -8.000000e-01 -9.382554e-05 -9.000000e-01 -1.077978e-04 -1.000000e+00 -1.227824e-04 -1.100000e+00 -1.388032e-04 -1.200000e+00 -1.559350e-04 -1.000000e-01 -2.566077e-05 -2.000000e-01 -4.651730e-05 -3.000000e-01 -6.284746e-05 -4.000000e-01 -7.630903e-05 -5.000000e-01 -8.922251e-05 -6.000000e-01 -1.025759e-04 -7.000000e-01 -1.166350e-04 -8.000000e-01 -1.314941e-04 -9.000000e-01 -1.471983e-04 -1.000000e+00 -1.637746e-04 -1.100000e+00 -1.812497e-04 -1.200000e+00 -1.996782e-04 -1.000000e-01 -3.332954e-05 -2.000000e-01 -6.170392e-05 -3.000000e-01 -8.517022e-05 -4.000000e-01 -1.042306e-04 -5.000000e-01 -1.205829e-04 -6.000000e-01 -1.362615e-04 -7.000000e-01 -1.521916e-04 -8.000000e-01 -1.686800e-04 -9.000000e-01 -1.858519e-04 -1.000000e+00 -2.037715e-04 -1.100000e+00 -2.224793e-04 -1.200000e+00 -2.420185e-04 -1.000000e-01 -3.949474e-05 -2.000000e-01 -7.411909e-05 -3.000000e-01 -1.038883e-04 -4.000000e-01 -1.289538e-04 -5.000000e-01 -1.499616e-04 -6.000000e-01 -1.685795e-04 -7.000000e-01 -1.865356e-04 -8.000000e-01 -2.046401e-04 -9.000000e-01 -2.232025e-04 -1.000000e+00 -2.423621e-04 -1.100000e+00 -2.621938e-04 -1.200000e+00 -2.827479e-04 -1.000000e-01 -4.443499e-05 -2.000000e-01 -8.421148e-05 -3.000000e-01 -1.193368e-04 -4.000000e-01 -1.498707e-04 -5.000000e-01 -1.760321e-04 -6.000000e-01 -1.985731e-04 -7.000000e-01 -2.190750e-04 -8.000000e-01 -2.389765e-04 -9.000000e-01 -2.589683e-04 -1.000000e+00 -2.793444e-04 -1.100000e+00 -3.002477e-04 -1.200000e+00 -3.217589e-04 -1.000000e-01 -4.841832e-05 -2.000000e-01 -9.244720e-05 -3.000000e-01 -1.320876e-04 -4.000000e-01 -1.673663e-04 -5.000000e-01 -1.983692e-04 -6.000000e-01 -2.253727e-04 -7.000000e-01 -2.492057e-04 -8.000000e-01 -2.713224e-04 -9.000000e-01 -2.929096e-04 -1.000000e+00 -3.145533e-04 -1.100000e+00 -3.365252e-04 -1.200000e+00 -3.589664e-04 -1.000000e-01 -5.164535e-05 -2.000000e-01 -9.918884e-05 -3.000000e-01 -1.426251e-04 -4.000000e-01 -1.819638e-04 -5.000000e-01 -2.172425e-04 -6.000000e-01 -2.485688e-04 -7.000000e-01 -2.762748e-04 -8.000000e-01 -3.012361e-04 -9.000000e-01 -3.247572e-04 -1.000000e+00 -3.478162e-04 -1.100000e+00 -3.709121e-04 -1.200000e+00 -3.942930e-04 -1.000000e-01 -5.426334e-05 -2.000000e-01 -1.047110e-04 -3.000000e-01 -1.513319e-04 -4.000000e-01 -1.941249e-04 -5.000000e-01 -2.331044e-04 -6.000000e-01 -2.683159e-04 -7.000000e-01 -2.998905e-04 -8.000000e-01 -3.282140e-04 -9.000000e-01 -3.541784e-04 -1.000000e+00 -3.789321e-04 -1.100000e+00 -4.032843e-04 -1.200000e+00 -4.276625e-04 tmpk8ny_4pz/tests/bsim4/pmos/reference/acFreq_igcmod.standard0000644000175000017500000000710413546075722024523 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.42948465800251e-14 1.06448412278362e-14 3.54785493506421e-15 1258.925 1.4294849014615e-14 1.0644844663114e-14 3.54785593597329e-15 1584.893 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 1995.262 1.42948476769301e-14 1.06448471361666e-14 3.54785562827763e-15 2511.886 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 3162.278 1.42948435243749e-14 1.06448385988508e-14 3.54785475444577e-15 3981.072 1.42948457562307e-14 1.0644842470241e-14 3.54785452562003e-15 5011.872 1.42948478679606e-14 1.0644841512661e-14 3.54785497933912e-15 6309.573 1.42948493353221e-14 1.0644841509309e-14 3.54785421141287e-15 7943.282 1.42948483882732e-14 1.06448416069289e-14 3.54785509563488e-15 10000 1.42948465800251e-14 1.06448412278362e-14 3.54785493506421e-15 12589.25 1.4294849014615e-14 1.0644844663114e-14 3.54785593597329e-15 15848.93 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 19952.62 1.42948476769301e-14 1.06448471361666e-14 3.54785562827763e-15 25118.86 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 31622.78 1.42948435243749e-14 1.06448385988508e-14 3.54785475444577e-15 39810.72 1.42948457562307e-14 1.0644842470241e-14 3.54785452562003e-15 50118.72 1.42948478679606e-14 1.0644841512661e-14 3.54785497933912e-15 63095.73 1.42948493353221e-14 1.0644841509309e-14 3.54785421141287e-15 79432.82 1.42948483882732e-14 1.06448416069289e-14 3.54785509563488e-15 100000 1.42948465800251e-14 1.06448412278362e-14 3.54785493506421e-15 125892.5 1.4294849014615e-14 1.0644844663114e-14 3.54785593597329e-15 158489.3 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 199526.2 1.42948476769301e-14 1.06448471361666e-14 3.54785562827763e-15 251188.6 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 316227.8 1.42948435243749e-14 1.06448385988508e-14 3.54785475444577e-15 398107.2 1.42948457562307e-14 1.0644842470241e-14 3.54785452562003e-15 501187.2 1.42948478679606e-14 1.0644841512661e-14 3.54785497933912e-15 630957.3 1.42948493353221e-14 1.0644841509309e-14 3.54785421141287e-15 794328.2 1.42948483882732e-14 1.06448416069289e-14 3.54785509563488e-15 1000000 1.42948465800251e-14 1.06448412278362e-14 3.54785493506421e-15 1258925 1.4294849014615e-14 1.0644844663114e-14 3.54785593597329e-15 1584893 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 1995262 1.42948476769301e-14 1.06448471361666e-14 3.54785562827763e-15 2511886 1.42948470943482e-14 1.06448442438161e-14 3.54785520806153e-15 3162278 1.42948435243749e-14 1.06448385988508e-14 3.54785475444577e-15 3981072 1.42948457562307e-14 1.0644842470241e-14 3.54785452562003e-15 5011872 1.42948478679606e-14 1.0644841512661e-14 3.54785497933912e-15 6309573 1.42948493353221e-14 1.0644841509309e-14 3.54785421141287e-15 7943282 1.42948483882732e-14 1.06448416069289e-14 3.54785509563488e-15 10000000 1.42948465800251e-14 1.06448412278362e-14 3.5478549350642e-15 12589250 1.4294849014615e-14 1.0644844663114e-14 3.54785593597329e-15 15848930 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 19952620 1.42948476769301e-14 1.06448471361666e-14 3.54785562827763e-15 25118860 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 31622780 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 39810720 1.42948457562307e-14 1.0644842470241e-14 3.54785452562003e-15 50118720 1.42948478679606e-14 1.0644841512661e-14 3.54785497933912e-15 63095730 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 79432820 1.42948463846311e-14 1.06448416069289e-14 3.54785509563488e-15 100000000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 tmpk8ny_4pz/tests/bsim4/pmos/reference/dcSweep_sb.standard0000644000175000017500000002751213546075722024063 0ustar carstencarstenV(d) I(d) -1.000000e-01 -2.060620e-07 -2.000000e-01 -3.951414e-07 -3.000000e-01 -7.284812e-07 -4.000000e-01 -1.318828e-06 -5.000000e-01 -2.352149e-06 -6.000000e-01 -4.136004e-06 -7.000000e-01 -7.171094e-06 -8.000000e-01 -1.225693e-05 -9.000000e-01 -2.063911e-05 -1.000000e+00 -3.419648e-05 -1.100000e+00 -5.565272e-05 -1.200000e+00 -8.879236e-05 -1.000000e-01 -2.347263e-06 -2.000000e-01 -4.298730e-06 -3.000000e-01 -7.531125e-06 -4.000000e-01 -1.290654e-05 -5.000000e-01 -2.169163e-05 -6.000000e-01 -3.569962e-05 -7.000000e-01 -5.733945e-05 -8.000000e-01 -8.952389e-05 -9.000000e-01 -1.354296e-04 -1.000000e+00 -1.982138e-04 -1.100000e+00 -2.808861e-04 -1.200000e+00 -3.865233e-04 -1.000000e-01 -2.087763e-05 -2.000000e-01 -3.608031e-05 -3.000000e-01 -5.844587e-05 -4.000000e-01 -9.107256e-05 -5.000000e-01 -1.367670e-04 -6.000000e-01 -1.979962e-04 -7.000000e-01 -2.766100e-04 -8.000000e-01 -3.737024e-04 -9.000000e-01 -4.896906e-04 -1.000000e+00 -6.246421e-04 -1.100000e+00 -7.788533e-04 -1.200000e+00 -9.536559e-04 -1.000000e-01 -1.173971e-04 -2.000000e-01 -1.876023e-04 -3.000000e-01 -2.657281e-04 -4.000000e-01 -3.594677e-04 -5.000000e-01 -4.698381e-04 -6.000000e-01 -5.967650e-04 -7.000000e-01 -7.397098e-04 -8.000000e-01 -8.979140e-04 -9.000000e-01 -1.070598e-03 -1.000000e+00 -1.257254e-03 -1.100000e+00 -1.458147e-03 -1.200000e+00 -1.675083e-03 -1.000000e-01 -3.223010e-04 -2.000000e-01 -5.203969e-04 -3.000000e-01 -6.746175e-04 -4.000000e-01 -8.307146e-04 -5.000000e-01 -9.967252e-04 -6.000000e-01 -1.173932e-03 -7.000000e-01 -1.362352e-03 -8.000000e-01 -1.561660e-03 -9.000000e-01 -1.771465e-03 -1.000000e+00 -1.991574e-03 -1.100000e+00 -2.222486e-03 -1.200000e+00 -2.466237e-03 -1.000000e-01 -5.499072e-04 -2.000000e-01 -9.317058e-04 -3.000000e-01 -1.193799e-03 -4.000000e-01 -1.411782e-03 -5.000000e-01 -1.623952e-03 -6.000000e-01 -1.839935e-03 -7.000000e-01 -2.062417e-03 -8.000000e-01 -2.292256e-03 -9.000000e-01 -2.529699e-03 -1.000000e+00 -2.774867e-03 -1.100000e+00 -3.028306e-03 -1.200000e+00 -3.291904e-03 -1.000000e-01 -7.549085e-04 -2.000000e-01 -1.322081e-03 -3.000000e-01 -1.730657e-03 -4.000000e-01 -2.033007e-03 -5.000000e-01 -2.295108e-03 -6.000000e-01 -2.547775e-03 -7.000000e-01 -2.800515e-03 -8.000000e-01 -3.056660e-03 -9.000000e-01 -3.317561e-03 -1.000000e+00 -3.583857e-03 -1.100000e+00 -3.856198e-03 -1.200000e+00 -4.136201e-03 -1.000000e-01 -9.321283e-04 -2.000000e-01 -1.667897e-03 -3.000000e-01 -2.231426e-03 -4.000000e-01 -2.650298e-03 -5.000000e-01 -2.979104e-03 -6.000000e-01 -3.273205e-03 -7.000000e-01 -3.556646e-03 -8.000000e-01 -3.837940e-03 -9.000000e-01 -4.120525e-03 -1.000000e+00 -4.405992e-03 -1.100000e+00 -4.695334e-03 -1.200000e+00 -4.989985e-03 -1.000000e-01 -1.084914e-03 -2.000000e-01 -1.970779e-03 -3.000000e-01 -2.679855e-03 -4.000000e-01 -3.230879e-03 -5.000000e-01 -3.652013e-03 -6.000000e-01 -3.999503e-03 -7.000000e-01 -4.317736e-03 -8.000000e-01 -4.625217e-03 -9.000000e-01 -4.929260e-03 -1.000000e+00 -5.233142e-03 -1.100000e+00 -5.538591e-03 -1.200000e+00 -5.847092e-03 -1.000000e-01 -1.217168e-03 -2.000000e-01 -2.236077e-03 -3.000000e-01 -3.077471e-03 -4.000000e-01 -3.757915e-03 -5.000000e-01 -4.291448e-03 -6.000000e-01 -4.711643e-03 -7.000000e-01 -5.073252e-03 -8.000000e-01 -5.410278e-03 -9.000000e-01 -5.736964e-03 -1.000000e+00 -6.059488e-03 -1.100000e+00 -6.380883e-03 -1.200000e+00 -6.703059e-03 -1.000000e-01 -1.332205e-03 -2.000000e-01 -2.469050e-03 -3.000000e-01 -3.429755e-03 -4.000000e-01 -4.229975e-03 -5.000000e-01 -4.880452e-03 -6.000000e-01 -5.394102e-03 -7.000000e-01 -5.813170e-03 -8.000000e-01 -6.186070e-03 -9.000000e-01 -6.538175e-03 -1.000000e+00 -6.880543e-03 -1.100000e+00 -7.218378e-03 -1.200000e+00 -7.554508e-03 -1.000000e-01 -1.432734e-03 -2.000000e-01 -2.674297e-03 -3.000000e-01 -3.742399e-03 -4.000000e-01 -4.651838e-03 -5.000000e-01 -5.413264e-03 -6.000000e-01 -6.031974e-03 -7.000000e-01 -6.526695e-03 -8.000000e-01 -6.945684e-03 -9.000000e-01 -7.328012e-03 -1.000000e+00 -7.692549e-03 -1.100000e+00 -8.047997e-03 -1.200000e+00 -8.398777e-03 -1.000000e-01 -3.879333e-08 -2.000000e-01 -8.828187e-08 -3.000000e-01 -1.926200e-07 -4.000000e-01 -4.098542e-07 -5.000000e-01 -8.505837e-07 -6.000000e-01 -1.717885e-06 -7.000000e-01 -3.370215e-06 -8.000000e-01 -6.421315e-06 -9.000000e-01 -1.190317e-05 -1.000000e+00 -2.152934e-05 -1.100000e+00 -3.808451e-05 -1.200000e+00 -6.591065e-05 -1.000000e-01 -1.051498e-06 -2.000000e-01 -2.181980e-06 -3.000000e-01 -4.274449e-06 -4.000000e-01 -8.077164e-06 -5.000000e-01 -1.481100e-05 -6.000000e-01 -2.642530e-05 -7.000000e-01 -4.585425e-05 -8.000000e-01 -7.711395e-05 -9.000000e-01 -1.250385e-04 -1.000000e+00 -1.946418e-04 -1.100000e+00 -2.904750e-04 -1.200000e+00 -4.165579e-04 -1.000000e-01 -1.718215e-05 -2.000000e-01 -3.176679e-05 -3.000000e-01 -5.528474e-05 -4.000000e-01 -9.222502e-05 -5.000000e-01 -1.472663e-04 -6.000000e-01 -2.244918e-04 -7.000000e-01 -3.265108e-04 -8.000000e-01 -4.540905e-04 -9.000000e-01 -6.064951e-04 -1.000000e+00 -7.823903e-04 -1.100000e+00 -9.810606e-04 -1.200000e+00 -1.203735e-03 -1.000000e-01 -1.549685e-04 -2.000000e-01 -2.491282e-04 -3.000000e-01 -3.621175e-04 -4.000000e-01 -4.984905e-04 -5.000000e-01 -6.574256e-04 -6.000000e-01 -8.368378e-04 -7.000000e-01 -1.034283e-03 -8.000000e-01 -1.247420e-03 -9.000000e-01 -1.474375e-03 -1.000000e+00 -1.714239e-03 -1.100000e+00 -1.967841e-03 -1.200000e+00 -2.238793e-03 -1.000000e-01 -5.686264e-04 -2.000000e-01 -8.429179e-04 -3.000000e-01 -1.065867e-03 -4.000000e-01 -1.290773e-03 -5.000000e-01 -1.523843e-03 -6.000000e-01 -1.765604e-03 -7.000000e-01 -2.015531e-03 -8.000000e-01 -2.272937e-03 -9.000000e-01 -2.537349e-03 -1.000000e+00 -2.809054e-03 -1.100000e+00 -3.090040e-03 -1.200000e+00 -3.385297e-03 -1.000000e-01 -1.086977e-03 -2.000000e-01 -1.656781e-03 -3.000000e-01 -1.995893e-03 -4.000000e-01 -2.285579e-03 -5.000000e-01 -2.565411e-03 -6.000000e-01 -2.844174e-03 -7.000000e-01 -3.124581e-03 -8.000000e-01 -3.407622e-03 -9.000000e-01 -3.693818e-03 -1.000000e+00 -3.984069e-03 -1.100000e+00 -4.280833e-03 -1.200000e+00 -4.589701e-03 -1.000000e-01 -1.574189e-03 -2.000000e-01 -2.504213e-03 -3.000000e-01 -3.012338e-03 -4.000000e-01 -3.370575e-03 -5.000000e-01 -3.690079e-03 -6.000000e-01 -3.997000e-03 -7.000000e-01 -4.299341e-03 -8.000000e-01 -4.600280e-03 -9.000000e-01 -4.901406e-03 -1.000000e+00 -5.204133e-03 -1.100000e+00 -5.511135e-03 -1.200000e+00 -5.828196e-03 -1.000000e-01 -2.011992e-03 -2.000000e-01 -3.305813e-03 -3.000000e-01 -4.046128e-03 -4.000000e-01 -4.495270e-03 -5.000000e-01 -4.857153e-03 -6.000000e-01 -5.190136e-03 -7.000000e-01 -5.511099e-03 -8.000000e-01 -5.826437e-03 -9.000000e-01 -6.139159e-03 -1.000000e+00 -6.451299e-03 -1.100000e+00 -6.765687e-03 -1.200000e+00 -7.088064e-03 -1.000000e-01 -2.406050e-03 -2.000000e-01 -4.044688e-03 -3.000000e-01 -5.056892e-03 -4.000000e-01 -5.631826e-03 -5.000000e-01 -6.044962e-03 -6.000000e-01 -6.405357e-03 -7.000000e-01 -6.744132e-03 -8.000000e-01 -7.072396e-03 -9.000000e-01 -7.395090e-03 -1.000000e+00 -7.715076e-03 -1.100000e+00 -8.035387e-03 -1.200000e+00 -8.361602e-03 -1.000000e-01 -2.764419e-03 -2.000000e-01 -4.725470e-03 -3.000000e-01 -6.021583e-03 -4.000000e-01 -6.761599e-03 -5.000000e-01 -7.240069e-03 -6.000000e-01 -7.631563e-03 -7.000000e-01 -7.988799e-03 -8.000000e-01 -8.329639e-03 -9.000000e-01 -8.661621e-03 -1.000000e+00 -8.988710e-03 -1.100000e+00 -9.314254e-03 -1.200000e+00 -9.643637e-03 -1.000000e-01 -3.094289e-03 -2.000000e-01 -5.357200e-03 -3.000000e-01 -6.932087e-03 -4.000000e-01 -7.870787e-03 -5.000000e-01 -8.433142e-03 -6.000000e-01 -8.861304e-03 -7.000000e-01 -9.238622e-03 -8.000000e-01 -9.592364e-03 -9.000000e-01 -9.933499e-03 -1.000000e+00 -1.026742e-02 -1.100000e+00 -1.059795e-02 -1.200000e+00 -1.093030e-02 -1.000000e-01 -3.401616e-03 -2.000000e-01 -5.948752e-03 -3.000000e-01 -7.790505e-03 -4.000000e-01 -8.949355e-03 -5.000000e-01 -9.617087e-03 -6.000000e-01 -1.008911e-02 -7.000000e-01 -1.048881e-02 -8.000000e-01 -1.085620e-02 -9.000000e-01 -1.120669e-02 -1.000000e+00 -1.154744e-02 -1.100000e+00 -1.188296e-02 -1.200000e+00 -1.221838e-02 -1.000000e-01 -8.631823e-07 -2.000000e-01 -1.438465e-06 -3.000000e-01 -2.301954e-06 -4.000000e-01 -3.640786e-06 -5.000000e-01 -5.713048e-06 -6.000000e-01 -8.903592e-06 -7.000000e-01 -1.378053e-05 -8.000000e-01 -2.116612e-05 -9.000000e-01 -3.222254e-05 -1.000000e+00 -4.855402e-05 -1.100000e+00 -7.233194e-05 -1.200000e+00 -1.064627e-04 -1.000000e-01 -4.738432e-06 -2.000000e-01 -7.771790e-06 -3.000000e-01 -1.215502e-05 -4.000000e-01 -1.871780e-05 -5.000000e-01 -2.844887e-05 -6.000000e-01 -4.263590e-05 -7.000000e-01 -6.288044e-05 -8.000000e-01 -9.105910e-05 -9.000000e-01 -1.292439e-04 -1.000000e+00 -1.796264e-04 -1.100000e+00 -2.445230e-04 -1.200000e+00 -3.265444e-04 -1.000000e-01 -2.268007e-05 -2.000000e-01 -3.671152e-05 -3.000000e-01 -5.476309e-05 -4.000000e-01 -7.941424e-05 -5.000000e-01 -1.123910e-04 -6.000000e-01 -1.553284e-04 -7.000000e-01 -2.097071e-04 -8.000000e-01 -2.767683e-04 -9.000000e-01 -3.574843e-04 -1.000000e+00 -4.526342e-04 -1.100000e+00 -5.630370e-04 -1.200000e+00 -6.899760e-04 -1.000000e-01 -7.795475e-05 -2.000000e-01 -1.282318e-04 -3.000000e-01 -1.771714e-04 -4.000000e-01 -2.351306e-04 -5.000000e-01 -3.039484e-04 -6.000000e-01 -3.843620e-04 -7.000000e-01 -4.767616e-04 -8.000000e-01 -5.813319e-04 -9.000000e-01 -6.981353e-04 -1.000000e+00 -8.272296e-04 -1.100000e+00 -9.688989e-04 -1.200000e+00 -1.124067e-03 -1.000000e-01 -1.673901e-04 -2.000000e-01 -2.919364e-04 -3.000000e-01 -3.883247e-04 -4.000000e-01 -4.824540e-04 -5.000000e-01 -5.840218e-04 -6.000000e-01 -6.949196e-04 -7.000000e-01 -8.156634e-04 -8.000000e-01 -9.464442e-04 -9.000000e-01 -1.087345e-03 -1.000000e+00 -1.238445e-03 -1.100000e+00 -1.399981e-03 -1.200000e+00 -1.572708e-03 -1.000000e-01 -2.588371e-04 -2.000000e-01 -4.692309e-04 -3.000000e-01 -6.339755e-04 -4.000000e-01 -7.697756e-04 -5.000000e-01 -9.000296e-04 -6.000000e-01 -1.034706e-03 -7.000000e-01 -1.176490e-03 -8.000000e-01 -1.326331e-03 -9.000000e-01 -1.484682e-03 -1.000000e+00 -1.651817e-03 -1.100000e+00 -1.828002e-03 -1.200000e+00 -2.013786e-03 -1.000000e-01 -3.361522e-04 -2.000000e-01 -6.223509e-04 -3.000000e-01 -8.590640e-04 -4.000000e-01 -1.051343e-03 -5.000000e-01 -1.216291e-03 -6.000000e-01 -1.374418e-03 -7.000000e-01 -1.535064e-03 -8.000000e-01 -1.701326e-03 -9.000000e-01 -1.874467e-03 -1.000000e+00 -2.055136e-03 -1.100000e+00 -2.243738e-03 -1.200000e+00 -2.440708e-03 -1.000000e-01 -3.982960e-04 -2.000000e-01 -7.475021e-04 -3.000000e-01 -1.047766e-03 -4.000000e-01 -1.300607e-03 -5.000000e-01 -1.512522e-03 -6.000000e-01 -1.700307e-03 -7.000000e-01 -1.881387e-03 -8.000000e-01 -2.063944e-03 -9.000000e-01 -2.251100e-03 -1.000000e+00 -2.444264e-03 -1.100000e+00 -2.644189e-03 -1.200000e+00 -2.851384e-03 -1.000000e-01 -4.480843e-04 -2.000000e-01 -8.492217e-04 -3.000000e-01 -1.203480e-03 -4.000000e-01 -1.511457e-03 -5.000000e-01 -1.775348e-03 -6.000000e-01 -2.002718e-03 -7.000000e-01 -2.209489e-03 -8.000000e-01 -2.410171e-03 -9.000000e-01 -2.611741e-03 -1.000000e+00 -2.817167e-03 -1.100000e+00 -3.027893e-03 -1.200000e+00 -3.244733e-03 -1.000000e-01 -4.882235e-04 -2.000000e-01 -9.322170e-04 -3.000000e-01 -1.331985e-03 -4.000000e-01 -1.687793e-03 -5.000000e-01 -2.000500e-03 -6.000000e-01 -2.272881e-03 -7.000000e-01 -2.513269e-03 -8.000000e-01 -2.736309e-03 -9.000000e-01 -2.953975e-03 -1.000000e+00 -3.172185e-03 -1.100000e+00 -3.393685e-03 -1.200000e+00 -3.619898e-03 -1.000000e-01 -5.207382e-04 -2.000000e-01 -1.000148e-03 -3.000000e-01 -1.438171e-03 -4.000000e-01 -1.834903e-03 -5.000000e-01 -2.190712e-03 -6.000000e-01 -2.506681e-03 -7.000000e-01 -2.786141e-03 -8.000000e-01 -3.037894e-03 -9.000000e-01 -3.275081e-03 -1.000000e+00 -3.507574e-03 -1.100000e+00 -3.740411e-03 -1.200000e+00 -3.976102e-03 -1.000000e-01 -5.471142e-04 -2.000000e-01 -1.055787e-03 -3.000000e-01 -1.525902e-03 -4.000000e-01 -1.957446e-03 -5.000000e-01 -2.350558e-03 -6.000000e-01 -2.705694e-03 -7.000000e-01 -3.024166e-03 -8.000000e-01 -3.309845e-03 -9.000000e-01 -3.571700e-03 -1.000000e+00 -3.821301e-03 -1.100000e+00 -4.066818e-03 -1.200000e+00 -4.312571e-03 tmpk8ny_4pz/tests/bsim4/pmos/reference/dcSweep_sa.standard0000644000175000017500000002751213546075722024062 0ustar carstencarstenV(d) I(d) -1.000000e-01 -2.060620e-07 -2.000000e-01 -3.951414e-07 -3.000000e-01 -7.284812e-07 -4.000000e-01 -1.318828e-06 -5.000000e-01 -2.352149e-06 -6.000000e-01 -4.136004e-06 -7.000000e-01 -7.171094e-06 -8.000000e-01 -1.225693e-05 -9.000000e-01 -2.063911e-05 -1.000000e+00 -3.419648e-05 -1.100000e+00 -5.565272e-05 -1.200000e+00 -8.879236e-05 -1.000000e-01 -2.347263e-06 -2.000000e-01 -4.298730e-06 -3.000000e-01 -7.531125e-06 -4.000000e-01 -1.290654e-05 -5.000000e-01 -2.169163e-05 -6.000000e-01 -3.569962e-05 -7.000000e-01 -5.733945e-05 -8.000000e-01 -8.952389e-05 -9.000000e-01 -1.354296e-04 -1.000000e+00 -1.982138e-04 -1.100000e+00 -2.808861e-04 -1.200000e+00 -3.865233e-04 -1.000000e-01 -2.087763e-05 -2.000000e-01 -3.608031e-05 -3.000000e-01 -5.844587e-05 -4.000000e-01 -9.107256e-05 -5.000000e-01 -1.367670e-04 -6.000000e-01 -1.979962e-04 -7.000000e-01 -2.766100e-04 -8.000000e-01 -3.737024e-04 -9.000000e-01 -4.896906e-04 -1.000000e+00 -6.246421e-04 -1.100000e+00 -7.788533e-04 -1.200000e+00 -9.536559e-04 -1.000000e-01 -1.173971e-04 -2.000000e-01 -1.876023e-04 -3.000000e-01 -2.657281e-04 -4.000000e-01 -3.594677e-04 -5.000000e-01 -4.698381e-04 -6.000000e-01 -5.967650e-04 -7.000000e-01 -7.397098e-04 -8.000000e-01 -8.979140e-04 -9.000000e-01 -1.070598e-03 -1.000000e+00 -1.257254e-03 -1.100000e+00 -1.458147e-03 -1.200000e+00 -1.675083e-03 -1.000000e-01 -3.223010e-04 -2.000000e-01 -5.203969e-04 -3.000000e-01 -6.746175e-04 -4.000000e-01 -8.307146e-04 -5.000000e-01 -9.967252e-04 -6.000000e-01 -1.173932e-03 -7.000000e-01 -1.362352e-03 -8.000000e-01 -1.561660e-03 -9.000000e-01 -1.771465e-03 -1.000000e+00 -1.991574e-03 -1.100000e+00 -2.222486e-03 -1.200000e+00 -2.466237e-03 -1.000000e-01 -5.499072e-04 -2.000000e-01 -9.317058e-04 -3.000000e-01 -1.193799e-03 -4.000000e-01 -1.411782e-03 -5.000000e-01 -1.623952e-03 -6.000000e-01 -1.839935e-03 -7.000000e-01 -2.062417e-03 -8.000000e-01 -2.292256e-03 -9.000000e-01 -2.529699e-03 -1.000000e+00 -2.774867e-03 -1.100000e+00 -3.028306e-03 -1.200000e+00 -3.291904e-03 -1.000000e-01 -7.549085e-04 -2.000000e-01 -1.322081e-03 -3.000000e-01 -1.730657e-03 -4.000000e-01 -2.033007e-03 -5.000000e-01 -2.295108e-03 -6.000000e-01 -2.547775e-03 -7.000000e-01 -2.800515e-03 -8.000000e-01 -3.056660e-03 -9.000000e-01 -3.317561e-03 -1.000000e+00 -3.583857e-03 -1.100000e+00 -3.856198e-03 -1.200000e+00 -4.136201e-03 -1.000000e-01 -9.321283e-04 -2.000000e-01 -1.667897e-03 -3.000000e-01 -2.231426e-03 -4.000000e-01 -2.650298e-03 -5.000000e-01 -2.979104e-03 -6.000000e-01 -3.273205e-03 -7.000000e-01 -3.556646e-03 -8.000000e-01 -3.837940e-03 -9.000000e-01 -4.120525e-03 -1.000000e+00 -4.405992e-03 -1.100000e+00 -4.695334e-03 -1.200000e+00 -4.989985e-03 -1.000000e-01 -1.084914e-03 -2.000000e-01 -1.970779e-03 -3.000000e-01 -2.679855e-03 -4.000000e-01 -3.230879e-03 -5.000000e-01 -3.652013e-03 -6.000000e-01 -3.999503e-03 -7.000000e-01 -4.317736e-03 -8.000000e-01 -4.625217e-03 -9.000000e-01 -4.929260e-03 -1.000000e+00 -5.233142e-03 -1.100000e+00 -5.538591e-03 -1.200000e+00 -5.847092e-03 -1.000000e-01 -1.217168e-03 -2.000000e-01 -2.236077e-03 -3.000000e-01 -3.077471e-03 -4.000000e-01 -3.757915e-03 -5.000000e-01 -4.291448e-03 -6.000000e-01 -4.711643e-03 -7.000000e-01 -5.073252e-03 -8.000000e-01 -5.410278e-03 -9.000000e-01 -5.736964e-03 -1.000000e+00 -6.059488e-03 -1.100000e+00 -6.380883e-03 -1.200000e+00 -6.703059e-03 -1.000000e-01 -1.332205e-03 -2.000000e-01 -2.469050e-03 -3.000000e-01 -3.429755e-03 -4.000000e-01 -4.229975e-03 -5.000000e-01 -4.880452e-03 -6.000000e-01 -5.394102e-03 -7.000000e-01 -5.813170e-03 -8.000000e-01 -6.186070e-03 -9.000000e-01 -6.538175e-03 -1.000000e+00 -6.880543e-03 -1.100000e+00 -7.218378e-03 -1.200000e+00 -7.554508e-03 -1.000000e-01 -1.432734e-03 -2.000000e-01 -2.674297e-03 -3.000000e-01 -3.742399e-03 -4.000000e-01 -4.651838e-03 -5.000000e-01 -5.413264e-03 -6.000000e-01 -6.031974e-03 -7.000000e-01 -6.526695e-03 -8.000000e-01 -6.945684e-03 -9.000000e-01 -7.328012e-03 -1.000000e+00 -7.692549e-03 -1.100000e+00 -8.047997e-03 -1.200000e+00 -8.398777e-03 -1.000000e-01 -3.879333e-08 -2.000000e-01 -8.828187e-08 -3.000000e-01 -1.926200e-07 -4.000000e-01 -4.098542e-07 -5.000000e-01 -8.505837e-07 -6.000000e-01 -1.717885e-06 -7.000000e-01 -3.370215e-06 -8.000000e-01 -6.421315e-06 -9.000000e-01 -1.190317e-05 -1.000000e+00 -2.152934e-05 -1.100000e+00 -3.808451e-05 -1.200000e+00 -6.591065e-05 -1.000000e-01 -1.051498e-06 -2.000000e-01 -2.181980e-06 -3.000000e-01 -4.274449e-06 -4.000000e-01 -8.077164e-06 -5.000000e-01 -1.481100e-05 -6.000000e-01 -2.642530e-05 -7.000000e-01 -4.585425e-05 -8.000000e-01 -7.711395e-05 -9.000000e-01 -1.250385e-04 -1.000000e+00 -1.946418e-04 -1.100000e+00 -2.904750e-04 -1.200000e+00 -4.165579e-04 -1.000000e-01 -1.718215e-05 -2.000000e-01 -3.176679e-05 -3.000000e-01 -5.528474e-05 -4.000000e-01 -9.222502e-05 -5.000000e-01 -1.472663e-04 -6.000000e-01 -2.244918e-04 -7.000000e-01 -3.265108e-04 -8.000000e-01 -4.540905e-04 -9.000000e-01 -6.064951e-04 -1.000000e+00 -7.823903e-04 -1.100000e+00 -9.810606e-04 -1.200000e+00 -1.203735e-03 -1.000000e-01 -1.549685e-04 -2.000000e-01 -2.491282e-04 -3.000000e-01 -3.621175e-04 -4.000000e-01 -4.984905e-04 -5.000000e-01 -6.574256e-04 -6.000000e-01 -8.368378e-04 -7.000000e-01 -1.034283e-03 -8.000000e-01 -1.247420e-03 -9.000000e-01 -1.474375e-03 -1.000000e+00 -1.714239e-03 -1.100000e+00 -1.967841e-03 -1.200000e+00 -2.238793e-03 -1.000000e-01 -5.686264e-04 -2.000000e-01 -8.429179e-04 -3.000000e-01 -1.065867e-03 -4.000000e-01 -1.290773e-03 -5.000000e-01 -1.523843e-03 -6.000000e-01 -1.765604e-03 -7.000000e-01 -2.015531e-03 -8.000000e-01 -2.272937e-03 -9.000000e-01 -2.537349e-03 -1.000000e+00 -2.809054e-03 -1.100000e+00 -3.090040e-03 -1.200000e+00 -3.385297e-03 -1.000000e-01 -1.086977e-03 -2.000000e-01 -1.656781e-03 -3.000000e-01 -1.995893e-03 -4.000000e-01 -2.285579e-03 -5.000000e-01 -2.565411e-03 -6.000000e-01 -2.844174e-03 -7.000000e-01 -3.124581e-03 -8.000000e-01 -3.407622e-03 -9.000000e-01 -3.693818e-03 -1.000000e+00 -3.984069e-03 -1.100000e+00 -4.280833e-03 -1.200000e+00 -4.589701e-03 -1.000000e-01 -1.574189e-03 -2.000000e-01 -2.504213e-03 -3.000000e-01 -3.012338e-03 -4.000000e-01 -3.370575e-03 -5.000000e-01 -3.690079e-03 -6.000000e-01 -3.997000e-03 -7.000000e-01 -4.299341e-03 -8.000000e-01 -4.600280e-03 -9.000000e-01 -4.901406e-03 -1.000000e+00 -5.204133e-03 -1.100000e+00 -5.511135e-03 -1.200000e+00 -5.828196e-03 -1.000000e-01 -2.011992e-03 -2.000000e-01 -3.305813e-03 -3.000000e-01 -4.046128e-03 -4.000000e-01 -4.495270e-03 -5.000000e-01 -4.857153e-03 -6.000000e-01 -5.190136e-03 -7.000000e-01 -5.511099e-03 -8.000000e-01 -5.826437e-03 -9.000000e-01 -6.139159e-03 -1.000000e+00 -6.451299e-03 -1.100000e+00 -6.765687e-03 -1.200000e+00 -7.088064e-03 -1.000000e-01 -2.406050e-03 -2.000000e-01 -4.044688e-03 -3.000000e-01 -5.056892e-03 -4.000000e-01 -5.631826e-03 -5.000000e-01 -6.044962e-03 -6.000000e-01 -6.405357e-03 -7.000000e-01 -6.744132e-03 -8.000000e-01 -7.072396e-03 -9.000000e-01 -7.395090e-03 -1.000000e+00 -7.715076e-03 -1.100000e+00 -8.035387e-03 -1.200000e+00 -8.361602e-03 -1.000000e-01 -2.764419e-03 -2.000000e-01 -4.725470e-03 -3.000000e-01 -6.021583e-03 -4.000000e-01 -6.761599e-03 -5.000000e-01 -7.240069e-03 -6.000000e-01 -7.631563e-03 -7.000000e-01 -7.988799e-03 -8.000000e-01 -8.329639e-03 -9.000000e-01 -8.661621e-03 -1.000000e+00 -8.988710e-03 -1.100000e+00 -9.314254e-03 -1.200000e+00 -9.643637e-03 -1.000000e-01 -3.094289e-03 -2.000000e-01 -5.357200e-03 -3.000000e-01 -6.932087e-03 -4.000000e-01 -7.870787e-03 -5.000000e-01 -8.433142e-03 -6.000000e-01 -8.861304e-03 -7.000000e-01 -9.238622e-03 -8.000000e-01 -9.592364e-03 -9.000000e-01 -9.933499e-03 -1.000000e+00 -1.026742e-02 -1.100000e+00 -1.059795e-02 -1.200000e+00 -1.093030e-02 -1.000000e-01 -3.401616e-03 -2.000000e-01 -5.948752e-03 -3.000000e-01 -7.790505e-03 -4.000000e-01 -8.949355e-03 -5.000000e-01 -9.617087e-03 -6.000000e-01 -1.008911e-02 -7.000000e-01 -1.048881e-02 -8.000000e-01 -1.085620e-02 -9.000000e-01 -1.120669e-02 -1.000000e+00 -1.154744e-02 -1.100000e+00 -1.188296e-02 -1.200000e+00 -1.221838e-02 -1.000000e-01 -8.631823e-07 -2.000000e-01 -1.438465e-06 -3.000000e-01 -2.301954e-06 -4.000000e-01 -3.640786e-06 -5.000000e-01 -5.713048e-06 -6.000000e-01 -8.903592e-06 -7.000000e-01 -1.378053e-05 -8.000000e-01 -2.116612e-05 -9.000000e-01 -3.222254e-05 -1.000000e+00 -4.855402e-05 -1.100000e+00 -7.233194e-05 -1.200000e+00 -1.064627e-04 -1.000000e-01 -4.738432e-06 -2.000000e-01 -7.771790e-06 -3.000000e-01 -1.215502e-05 -4.000000e-01 -1.871780e-05 -5.000000e-01 -2.844887e-05 -6.000000e-01 -4.263590e-05 -7.000000e-01 -6.288044e-05 -8.000000e-01 -9.105910e-05 -9.000000e-01 -1.292439e-04 -1.000000e+00 -1.796264e-04 -1.100000e+00 -2.445230e-04 -1.200000e+00 -3.265444e-04 -1.000000e-01 -2.268007e-05 -2.000000e-01 -3.671152e-05 -3.000000e-01 -5.476309e-05 -4.000000e-01 -7.941424e-05 -5.000000e-01 -1.123910e-04 -6.000000e-01 -1.553284e-04 -7.000000e-01 -2.097071e-04 -8.000000e-01 -2.767683e-04 -9.000000e-01 -3.574843e-04 -1.000000e+00 -4.526342e-04 -1.100000e+00 -5.630370e-04 -1.200000e+00 -6.899760e-04 -1.000000e-01 -7.795475e-05 -2.000000e-01 -1.282318e-04 -3.000000e-01 -1.771714e-04 -4.000000e-01 -2.351306e-04 -5.000000e-01 -3.039484e-04 -6.000000e-01 -3.843620e-04 -7.000000e-01 -4.767616e-04 -8.000000e-01 -5.813319e-04 -9.000000e-01 -6.981353e-04 -1.000000e+00 -8.272296e-04 -1.100000e+00 -9.688989e-04 -1.200000e+00 -1.124067e-03 -1.000000e-01 -1.673901e-04 -2.000000e-01 -2.919364e-04 -3.000000e-01 -3.883247e-04 -4.000000e-01 -4.824540e-04 -5.000000e-01 -5.840218e-04 -6.000000e-01 -6.949196e-04 -7.000000e-01 -8.156634e-04 -8.000000e-01 -9.464442e-04 -9.000000e-01 -1.087345e-03 -1.000000e+00 -1.238445e-03 -1.100000e+00 -1.399981e-03 -1.200000e+00 -1.572708e-03 -1.000000e-01 -2.588371e-04 -2.000000e-01 -4.692309e-04 -3.000000e-01 -6.339755e-04 -4.000000e-01 -7.697756e-04 -5.000000e-01 -9.000296e-04 -6.000000e-01 -1.034706e-03 -7.000000e-01 -1.176490e-03 -8.000000e-01 -1.326331e-03 -9.000000e-01 -1.484682e-03 -1.000000e+00 -1.651817e-03 -1.100000e+00 -1.828002e-03 -1.200000e+00 -2.013786e-03 -1.000000e-01 -3.361522e-04 -2.000000e-01 -6.223509e-04 -3.000000e-01 -8.590640e-04 -4.000000e-01 -1.051343e-03 -5.000000e-01 -1.216291e-03 -6.000000e-01 -1.374418e-03 -7.000000e-01 -1.535064e-03 -8.000000e-01 -1.701326e-03 -9.000000e-01 -1.874467e-03 -1.000000e+00 -2.055136e-03 -1.100000e+00 -2.243738e-03 -1.200000e+00 -2.440708e-03 -1.000000e-01 -3.982960e-04 -2.000000e-01 -7.475021e-04 -3.000000e-01 -1.047766e-03 -4.000000e-01 -1.300607e-03 -5.000000e-01 -1.512522e-03 -6.000000e-01 -1.700307e-03 -7.000000e-01 -1.881387e-03 -8.000000e-01 -2.063944e-03 -9.000000e-01 -2.251100e-03 -1.000000e+00 -2.444264e-03 -1.100000e+00 -2.644189e-03 -1.200000e+00 -2.851384e-03 -1.000000e-01 -4.480843e-04 -2.000000e-01 -8.492217e-04 -3.000000e-01 -1.203480e-03 -4.000000e-01 -1.511457e-03 -5.000000e-01 -1.775348e-03 -6.000000e-01 -2.002718e-03 -7.000000e-01 -2.209489e-03 -8.000000e-01 -2.410171e-03 -9.000000e-01 -2.611741e-03 -1.000000e+00 -2.817167e-03 -1.100000e+00 -3.027893e-03 -1.200000e+00 -3.244733e-03 -1.000000e-01 -4.882235e-04 -2.000000e-01 -9.322170e-04 -3.000000e-01 -1.331985e-03 -4.000000e-01 -1.687793e-03 -5.000000e-01 -2.000500e-03 -6.000000e-01 -2.272881e-03 -7.000000e-01 -2.513269e-03 -8.000000e-01 -2.736309e-03 -9.000000e-01 -2.953975e-03 -1.000000e+00 -3.172185e-03 -1.100000e+00 -3.393685e-03 -1.200000e+00 -3.619898e-03 -1.000000e-01 -5.207382e-04 -2.000000e-01 -1.000148e-03 -3.000000e-01 -1.438171e-03 -4.000000e-01 -1.834903e-03 -5.000000e-01 -2.190712e-03 -6.000000e-01 -2.506681e-03 -7.000000e-01 -2.786141e-03 -8.000000e-01 -3.037894e-03 -9.000000e-01 -3.275081e-03 -1.000000e+00 -3.507574e-03 -1.100000e+00 -3.740411e-03 -1.200000e+00 -3.976102e-03 -1.000000e-01 -5.471142e-04 -2.000000e-01 -1.055787e-03 -3.000000e-01 -1.525902e-03 -4.000000e-01 -1.957446e-03 -5.000000e-01 -2.350558e-03 -6.000000e-01 -2.705694e-03 -7.000000e-01 -3.024166e-03 -8.000000e-01 -3.309845e-03 -9.000000e-01 -3.571700e-03 -1.000000e+00 -3.821301e-03 -1.100000e+00 -4.066818e-03 -1.200000e+00 -4.312571e-03 tmpk8ny_4pz/tests/bsim4/pmos/reference/acFreq_acnqsmod.standard0000644000175000017500000000710513546075722025067 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 1258.925 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 1584.893 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 1995.262 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 2511.886 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 3162.278 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 3981.072 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 5011.872 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 6309.573 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 7943.282 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 10000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 12589.25 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 15848.93 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 19952.62 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 25118.86 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 31622.78 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 39810.72 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 50118.72 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 63095.73 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 79432.82 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 100000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 125892.5 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 158489.3 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 199526.2 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 251188.6 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 316227.8 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 398107.2 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 501187.2 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 630957.3 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 794328.2 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 1000000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 1258925 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 1584893 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 1995262 1.42948476769301e-14 1.06448391595228e-14 3.54785483061325e-15 2511886 1.42948470943482e-14 1.06448442438161e-14 3.54785520806153e-15 3162278 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 3981072 1.42948417584395e-14 1.06448384724498e-14 3.54785452562003e-15 5011872 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 6309573 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 7943282 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 10000000 1.42948449884757e-14 1.06448396362868e-14 3.5478549350642e-15 12589250 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 15848930 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 19952620 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 25118860 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 31622780 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 39810720 1.42948417584395e-14 1.06448384724498e-14 3.54785412584092e-15 50118720 1.42948446924018e-14 1.06448383371022e-14 3.54785497933912e-15 63095730 1.429484429045e-14 1.0644838986873e-14 3.54785421141287e-15 79432820 1.4294844380989e-14 1.06448396032868e-14 3.54785509563488e-15 100000000 1.42948418053768e-14 1.06448380447374e-14 3.54785334351477e-15 tmpk8ny_4pz/tests/bsim4/pmos/reference/dcSweep_lw8.standard0000644000175000017500000002751213546075722024171 0ustar carstencarstenV(d) I(d) -1.000000e-01 -1.909578e-09 -2.000000e-01 -2.112148e-09 -3.000000e-01 -2.289747e-09 -4.000000e-01 -2.472068e-09 -5.000000e-01 -2.663889e-09 -6.000000e-01 -2.867362e-09 -7.000000e-01 -3.084067e-09 -8.000000e-01 -3.315620e-09 -9.000000e-01 -3.564226e-09 -1.000000e+00 -3.833387e-09 -1.100000e+00 -4.128706e-09 -1.200000e+00 -4.458725e-09 -1.000000e-01 -2.290954e-08 -2.000000e-01 -2.525003e-08 -3.000000e-01 -2.725904e-08 -4.000000e-01 -2.930300e-08 -5.000000e-01 -3.143773e-08 -6.000000e-01 -3.368630e-08 -7.000000e-01 -3.606406e-08 -8.000000e-01 -3.858580e-08 -9.000000e-01 -4.127185e-08 -1.000000e+00 -4.415563e-08 -1.100000e+00 -4.729209e-08 -1.200000e+00 -5.076579e-08 -1.000000e-01 -2.224797e-07 -2.000000e-01 -2.451120e-07 -3.000000e-01 -2.631904e-07 -4.000000e-01 -2.812619e-07 -5.000000e-01 -2.999215e-07 -6.000000e-01 -3.193840e-07 -7.000000e-01 -3.397747e-07 -8.000000e-01 -3.612029e-07 -9.000000e-01 -3.838170e-07 -1.000000e+00 -4.078700e-07 -1.100000e+00 -4.337913e-07 -1.200000e+00 -4.622533e-07 -1.000000e-01 -1.538412e-06 -2.000000e-01 -1.741096e-06 -3.000000e-01 -1.853994e-06 -4.000000e-01 -1.959756e-06 -5.000000e-01 -2.065513e-06 -6.000000e-01 -2.173158e-06 -7.000000e-01 -2.283506e-06 -8.000000e-01 -2.397073e-06 -9.000000e-01 -2.514442e-06 -1.000000e+00 -2.636646e-06 -1.100000e+00 -2.765581e-06 -1.200000e+00 -2.904382e-06 -1.000000e-01 -5.344429e-06 -2.000000e-01 -6.902034e-06 -3.000000e-01 -7.350351e-06 -4.000000e-01 -7.679298e-06 -5.000000e-01 -7.984827e-06 -6.000000e-01 -8.283562e-06 -7.000000e-01 -8.580979e-06 -8.000000e-01 -8.879611e-06 -9.000000e-01 -9.181209e-06 -1.000000e+00 -9.488086e-06 -1.100000e+00 -9.804496e-06 -1.200000e+00 -1.013795e-05 -1.000000e-01 -1.036014e-05 -2.000000e-01 -1.560589e-05 -3.000000e-01 -1.735988e-05 -4.000000e-01 -1.812756e-05 -5.000000e-01 -1.872273e-05 -6.000000e-01 -1.926728e-05 -7.000000e-01 -1.979057e-05 -8.000000e-01 -2.030363e-05 -9.000000e-01 -2.081200e-05 -1.000000e+00 -2.131995e-05 -1.100000e+00 -2.183357e-05 -1.200000e+00 -2.236383e-05 -1.000000e-01 -1.523874e-05 -2.000000e-01 -2.500121e-05 -3.000000e-01 -2.991898e-05 -4.000000e-01 -3.185497e-05 -5.000000e-01 -3.292473e-05 -6.000000e-01 -3.378381e-05 -7.000000e-01 -3.456550e-05 -8.000000e-01 -3.530955e-05 -9.000000e-01 -3.603251e-05 -1.000000e+00 -3.674342e-05 -1.100000e+00 -3.745025e-05 -1.200000e+00 -3.816525e-05 -1.000000e-01 -1.966074e-05 -2.000000e-01 -3.377286e-05 -3.000000e-01 -4.270555e-05 -4.000000e-01 -4.724213e-05 -5.000000e-01 -4.933297e-05 -6.000000e-01 -5.067342e-05 -7.000000e-01 -5.178276e-05 -8.000000e-01 -5.279329e-05 -9.000000e-01 -5.375111e-05 -1.000000e+00 -5.467715e-05 -1.100000e+00 -5.558408e-05 -1.200000e+00 -5.648492e-05 -1.000000e-01 -2.361687e-05 -2.000000e-01 -4.172715e-05 -3.000000e-01 -5.462430e-05 -4.000000e-01 -6.269512e-05 -5.000000e-01 -6.689775e-05 -6.000000e-01 -6.913268e-05 -7.000000e-01 -7.071578e-05 -8.000000e-01 -7.205929e-05 -9.000000e-01 -7.328819e-05 -1.000000e+00 -7.445156e-05 -1.100000e+00 -7.557359e-05 -1.200000e+00 -7.667085e-05 -1.000000e-01 -2.715085e-05 -2.000000e-01 -4.889391e-05 -3.000000e-01 -6.548520e-05 -4.000000e-01 -7.719815e-05 -5.000000e-01 -8.446709e-05 -6.000000e-01 -8.841852e-05 -7.000000e-01 -9.079252e-05 -8.000000e-01 -9.259452e-05 -9.000000e-01 -9.415557e-05 -1.000000e+00 -9.559088e-05 -1.100000e+00 -9.695023e-05 -1.200000e+00 -9.826031e-05 -1.000000e-01 -3.030985e-05 -2.000000e-01 -5.534118e-05 -3.000000e-01 -7.532355e-05 -4.000000e-01 -9.048539e-05 -5.000000e-01 -1.010940e-04 -6.000000e-01 -1.076629e-04 -7.000000e-01 -1.114456e-04 -8.000000e-01 -1.139540e-04 -9.000000e-01 -1.159546e-04 -1.000000e+00 -1.177170e-04 -1.100000e+00 -1.193462e-04 -1.200000e+00 -1.208912e-04 -1.000000e-01 -3.313705e-05 -2.000000e-01 -6.114109e-05 -3.000000e-01 -8.422007e-05 -4.000000e-01 -1.025759e-04 -5.000000e-01 -1.164176e-04 -6.000000e-01 -1.260222e-04 -7.000000e-01 -1.320095e-04 -8.000000e-01 -1.356915e-04 -9.000000e-01 -1.383289e-04 -1.000000e+00 -1.405105e-04 -1.100000e+00 -1.424591e-04 -1.200000e+00 -1.442697e-04 -1.000000e-01 -2.871943e-10 -2.000000e-01 -3.232690e-10 -3.000000e-01 -3.575143e-10 -4.000000e-01 -3.937609e-10 -5.000000e-01 -4.328849e-10 -6.000000e-01 -4.754263e-10 -7.000000e-01 -5.218874e-10 -8.000000e-01 -5.728480e-10 -9.000000e-01 -6.290884e-10 -1.000000e+00 -6.917588e-10 -1.100000e+00 -7.625913e-10 -1.200000e+00 -8.441491e-10 -1.000000e-01 -8.511226e-09 -2.000000e-01 -9.513992e-09 -3.000000e-01 -1.044575e-08 -4.000000e-01 -1.141841e-08 -5.000000e-01 -1.245451e-08 -6.000000e-01 -1.356551e-08 -7.000000e-01 -1.476034e-08 -8.000000e-01 -1.604827e-08 -9.000000e-01 -1.744164e-08 -1.000000e+00 -1.895944e-08 -1.100000e+00 -2.063147e-08 -1.200000e+00 -2.250268e-08 -1.000000e-01 -1.632800e-07 -2.000000e-01 -1.805648e-07 -3.000000e-01 -1.958026e-07 -4.000000e-01 -2.113472e-07 -5.000000e-01 -2.276112e-07 -6.000000e-01 -2.447701e-07 -7.000000e-01 -2.629412e-07 -8.000000e-01 -2.822376e-07 -9.000000e-01 -3.028148e-07 -1.000000e+00 -3.249270e-07 -1.100000e+00 -3.489895e-07 -1.200000e+00 -3.756392e-07 -1.000000e-01 -1.906572e-06 -2.000000e-01 -2.115611e-06 -3.000000e-01 -2.267354e-06 -4.000000e-01 -2.414715e-06 -5.000000e-01 -2.564286e-06 -6.000000e-01 -2.718148e-06 -7.000000e-01 -2.877299e-06 -8.000000e-01 -3.042468e-06 -9.000000e-01 -3.214595e-06 -1.000000e+00 -3.395362e-06 -1.100000e+00 -3.587755e-06 -1.200000e+00 -3.796569e-06 -1.000000e-01 -1.014571e-05 -2.000000e-01 -1.212658e-05 -3.000000e-01 -1.285244e-05 -4.000000e-01 -1.344417e-05 -5.000000e-01 -1.400318e-05 -6.000000e-01 -1.455243e-05 -7.000000e-01 -1.510038e-05 -8.000000e-01 -1.565123e-05 -9.000000e-01 -1.620843e-05 -1.000000e+00 -1.677722e-05 -1.100000e+00 -1.736716e-05 -1.200000e+00 -1.799436e-05 -1.000000e-01 -2.408957e-05 -2.000000e-01 -3.347873e-05 -3.000000e-01 -3.609126e-05 -4.000000e-01 -3.750334e-05 -5.000000e-01 -3.866338e-05 -6.000000e-01 -3.973282e-05 -7.000000e-01 -4.075990e-05 -8.000000e-01 -4.176478e-05 -9.000000e-01 -4.275881e-05 -1.000000e+00 -4.375295e-05 -1.100000e+00 -4.476471e-05 -1.200000e+00 -4.582420e-05 -1.000000e-01 -3.956118e-05 -2.000000e-01 -6.108634e-05 -3.000000e-01 -6.929329e-05 -4.000000e-01 -7.244075e-05 -5.000000e-01 -7.448525e-05 -6.000000e-01 -7.619421e-05 -7.000000e-01 -7.775638e-05 -8.000000e-01 -7.923974e-05 -9.000000e-01 -8.067620e-05 -1.000000e+00 -8.208704e-05 -1.100000e+00 -8.349756e-05 -1.200000e+00 -8.494969e-05 -1.000000e-01 -5.545414e-05 -2.000000e-01 -9.068156e-05 -3.000000e-01 -1.086991e-04 -4.000000e-01 -1.157426e-04 -5.000000e-01 -1.192829e-04 -6.000000e-01 -1.218590e-04 -7.000000e-01 -1.240621e-04 -8.000000e-01 -1.260783e-04 -9.000000e-01 -1.279850e-04 -1.000000e+00 -1.298241e-04 -1.100000e+00 -1.316311e-04 -1.200000e+00 -1.334575e-04 -1.000000e-01 -7.165790e-05 -2.000000e-01 -1.211813e-04 -3.000000e-01 -1.512605e-04 -4.000000e-01 -1.653564e-04 -5.000000e-01 -1.715529e-04 -6.000000e-01 -1.753832e-04 -7.000000e-01 -1.783927e-04 -8.000000e-01 -1.810249e-04 -9.000000e-01 -1.834472e-04 -1.000000e+00 -1.857393e-04 -1.100000e+00 -1.879542e-04 -1.200000e+00 -1.901527e-04 -1.000000e-01 -8.828028e-05 -2.000000e-01 -1.525561e-04 -3.000000e-01 -1.956213e-04 -4.000000e-01 -2.194755e-04 -5.000000e-01 -2.301159e-04 -6.000000e-01 -2.357998e-04 -7.000000e-01 -2.398489e-04 -8.000000e-01 -2.432071e-04 -9.000000e-01 -2.462031e-04 -1.000000e+00 -2.489809e-04 -1.100000e+00 -2.516217e-04 -1.200000e+00 -2.541995e-04 -1.000000e-01 -1.055044e-04 -2.000000e-01 -1.850539e-04 -3.000000e-01 -2.416577e-04 -4.000000e-01 -2.768613e-04 -5.000000e-01 -2.940035e-04 -6.000000e-01 -3.023655e-04 -7.000000e-01 -3.077555e-04 -8.000000e-01 -3.119721e-04 -9.000000e-01 -3.156085e-04 -1.000000e+00 -3.189082e-04 -1.100000e+00 -3.219955e-04 -1.200000e+00 -3.249637e-04 -1.000000e-01 -1.235615e-04 -2.000000e-01 -2.190483e-04 -3.000000e-01 -2.897286e-04 -4.000000e-01 -3.371172e-04 -5.000000e-01 -3.625076e-04 -6.000000e-01 -3.745067e-04 -7.000000e-01 -3.815828e-04 -8.000000e-01 -3.868003e-04 -9.000000e-01 -3.911447e-04 -1.000000e+00 -3.950011e-04 -1.100000e+00 -3.985537e-04 -1.200000e+00 -4.019230e-04 -1.000000e-01 -9.811573e-09 -2.000000e-01 -1.075826e-08 -3.000000e-01 -1.146470e-08 -4.000000e-01 -1.216637e-08 -5.000000e-01 -1.288806e-08 -6.000000e-01 -1.363813e-08 -7.000000e-01 -1.442142e-08 -8.000000e-01 -1.524228e-08 -9.000000e-01 -1.610672e-08 -1.000000e+00 -1.702519e-08 -1.100000e+00 -1.801554e-08 -1.200000e+00 -1.910575e-08 -1.000000e-01 -5.541807e-08 -2.000000e-01 -6.086378e-08 -3.000000e-01 -6.474285e-08 -4.000000e-01 -6.856484e-08 -5.000000e-01 -7.247839e-08 -6.000000e-01 -7.653087e-08 -7.000000e-01 -8.074817e-08 -8.000000e-01 -8.515214e-08 -9.000000e-01 -8.977280e-08 -1.000000e+00 -9.466279e-08 -1.100000e+00 -9.991339e-08 -1.200000e+00 -1.056689e-07 -1.000000e-01 -2.816308e-07 -2.000000e-01 -3.142424e-07 -3.000000e-01 -3.336507e-07 -4.000000e-01 -3.523170e-07 -5.000000e-01 -3.712361e-07 -6.000000e-01 -3.906799e-07 -7.000000e-01 -4.107786e-07 -8.000000e-01 -4.316277e-07 -9.000000e-01 -4.533486e-07 -1.000000e+00 -4.761565e-07 -1.100000e+00 -5.004370e-07 -1.200000e+00 -5.268157e-07 -1.000000e-01 -1.109383e-06 -2.000000e-01 -1.337165e-06 -3.000000e-01 -1.417647e-06 -4.000000e-01 -1.487570e-06 -5.000000e-01 -1.556263e-06 -6.000000e-01 -1.625501e-06 -7.000000e-01 -1.695938e-06 -8.000000e-01 -1.767930e-06 -9.000000e-01 -1.841813e-06 -1.000000e+00 -1.918147e-06 -1.100000e+00 -1.997997e-06 -1.200000e+00 -2.083205e-06 -1.000000e-01 -2.729901e-06 -2.000000e-01 -3.872787e-06 -3.000000e-01 -4.189628e-06 -4.000000e-01 -4.372245e-06 -5.000000e-01 -4.536076e-06 -6.000000e-01 -4.695249e-06 -7.000000e-01 -4.853394e-06 -8.000000e-01 -5.011997e-06 -9.000000e-01 -5.171935e-06 -1.000000e+00 -5.334167e-06 -1.100000e+00 -5.500435e-06 -1.200000e+00 -5.674001e-06 -1.000000e-01 -4.580607e-06 -2.000000e-01 -7.351172e-06 -3.000000e-01 -8.562881e-06 -4.000000e-01 -9.016502e-06 -5.000000e-01 -9.318039e-06 -6.000000e-01 -9.587859e-06 -7.000000e-01 -9.846696e-06 -8.000000e-01 -1.010075e-05 -9.000000e-01 -1.035275e-05 -1.000000e+00 -1.060442e-05 -1.100000e+00 -1.085782e-05 -1.200000e+00 -1.111670e-05 -1.000000e-01 -6.226162e-06 -2.000000e-01 -1.063738e-05 -3.000000e-01 -1.331501e-05 -4.000000e-01 -1.456286e-05 -5.000000e-01 -1.513505e-05 -6.000000e-01 -1.554566e-05 -7.000000e-01 -1.591311e-05 -8.000000e-01 -1.626291e-05 -9.000000e-01 -1.660359e-05 -1.000000e+00 -1.693913e-05 -1.100000e+00 -1.727228e-05 -1.200000e+00 -1.760654e-05 -1.000000e-01 -7.579746e-06 -2.000000e-01 -1.340694e-05 -3.000000e-01 -1.752715e-05 -4.000000e-01 -2.003731e-05 -5.000000e-01 -2.128068e-05 -6.000000e-01 -2.194361e-05 -7.000000e-01 -2.244845e-05 -8.000000e-01 -2.290284e-05 -9.000000e-01 -2.333413e-05 -1.000000e+00 -2.375239e-05 -1.100000e+00 -2.416265e-05 -1.200000e+00 -2.456866e-05 -1.000000e-01 -8.678775e-06 -2.000000e-01 -1.569022e-05 -3.000000e-01 -2.106741e-05 -4.000000e-01 -2.485741e-05 -5.000000e-01 -2.717601e-05 -6.000000e-01 -2.839696e-05 -7.000000e-01 -2.913072e-05 -8.000000e-01 -2.971702e-05 -9.000000e-01 -3.024919e-05 -1.000000e+00 -3.075431e-05 -1.100000e+00 -3.124321e-05 -1.200000e+00 -3.172164e-05 -1.000000e-01 -9.573895e-06 -2.000000e-01 -1.757225e-05 -3.000000e-01 -2.402132e-05 -4.000000e-01 -2.895219e-05 -5.000000e-01 -3.241572e-05 -6.000000e-01 -3.454966e-05 -7.000000e-01 -3.574689e-05 -8.000000e-01 -3.653900e-05 -9.000000e-01 -3.719644e-05 -1.000000e+00 -3.779849e-05 -1.100000e+00 -3.837076e-05 -1.200000e+00 -3.892429e-05 -1.000000e-01 -1.030562e-05 -2.000000e-01 -1.912723e-05 -3.000000e-01 -2.648641e-05 -4.000000e-01 -3.240673e-05 -5.000000e-01 -3.691867e-05 -6.000000e-01 -4.007931e-05 -7.000000e-01 -4.204970e-05 -8.000000e-01 -4.322876e-05 -9.000000e-01 -4.407090e-05 -1.000000e+00 -4.479094e-05 -1.100000e+00 -4.545575e-05 -1.200000e+00 -4.608898e-05 -1.000000e-01 -1.090430e-05 -2.000000e-01 -2.041282e-05 -3.000000e-01 -2.854356e-05 -4.000000e-01 -3.531550e-05 -5.000000e-01 -4.075046e-05 -6.000000e-01 -4.487965e-05 -7.000000e-01 -4.776852e-05 -8.000000e-01 -4.960075e-05 -9.000000e-01 -5.076846e-05 -1.000000e+00 -5.165440e-05 -1.100000e+00 -5.242972e-05 -1.200000e+00 -5.315077e-05 tmpk8ny_4pz/tests/bsim4/pmos/reference/acFreq_geomod.standard0000644000175000017500000000710513546075722024534 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 1258.925 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 1584.893 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 1995.262 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 2511.886 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 3162.278 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 3981.072 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 5011.872 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 6309.573 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 7943.282 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 10000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 12589.25 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 15848.93 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 19952.62 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 25118.86 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 31622.78 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 39810.72 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 50118.72 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 63095.73 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 79432.82 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 100000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 125892.5 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 158489.3 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 199526.2 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 251188.6 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 316227.8 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 398107.2 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 501187.2 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 630957.3 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 794328.2 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 1000000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 1258925 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 1584893 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 1995262 1.42948476769301e-14 1.06448391595228e-14 3.54785483061325e-15 2511886 1.42948470943482e-14 1.06448442438161e-14 3.54785520806153e-15 3162278 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 3981072 1.42948417584395e-14 1.06448384724498e-14 3.54785452562003e-15 5011872 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 6309573 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 7943282 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 10000000 1.42948449884757e-14 1.06448396362868e-14 3.5478549350642e-15 12589250 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 15848930 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 19952620 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 25118860 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 31622780 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 39810720 1.42948417584395e-14 1.06448384724498e-14 3.54785412584092e-15 50118720 1.42948446924018e-14 1.06448383371022e-14 3.54785497933912e-15 63095730 1.429484429045e-14 1.0644838986873e-14 3.54785421141287e-15 79432820 1.4294844380989e-14 1.06448396032868e-14 3.54785509563488e-15 100000000 1.42948418053768e-14 1.06448380447374e-14 3.54785334351477e-15 tmpk8ny_4pz/tests/bsim4/pmos/reference/acFreq_mobmod.standard0000644000175000017500000000710513546075722024537 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 1258.925 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 1584.893 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 1995.262 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 2511.886 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 3162.278 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 3981.072 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 5011.872 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 6309.573 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 7943.282 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 10000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 12589.25 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 15848.93 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 19952.62 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 25118.86 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 31622.78 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 39810.72 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 50118.72 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 63095.73 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 79432.82 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 100000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 125892.5 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 158489.3 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 199526.2 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 251188.6 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 316227.8 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 398107.2 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 501187.2 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 630957.3 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 794328.2 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 1000000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 1258925 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 1584893 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 1995262 1.42948476769301e-14 1.06448391595228e-14 3.54785483061325e-15 2511886 1.42948470943482e-14 1.06448442438161e-14 3.54785520806153e-15 3162278 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 3981072 1.42948417584395e-14 1.06448384724498e-14 3.54785452562003e-15 5011872 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 6309573 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 7943282 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 10000000 1.42948449884757e-14 1.06448396362868e-14 3.5478549350642e-15 12589250 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 15848930 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 19952620 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 25118860 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 31622780 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 39810720 1.42948417584395e-14 1.06448384724498e-14 3.54785412584092e-15 50118720 1.42948446924018e-14 1.06448383371022e-14 3.54785497933912e-15 63095730 1.429484429045e-14 1.0644838986873e-14 3.54785421141287e-15 79432820 1.4294844380989e-14 1.06448396032868e-14 3.54785509563488e-15 100000000 1.42948418053768e-14 1.06448380447374e-14 3.54785334351477e-15 tmpk8ny_4pz/tests/bsim4/pmos/reference/dcSweep_lw6.standard0000644000175000017500000002751213546075722024167 0ustar carstencarstenV(d) I(d) -1.000000e-01 -8.851744e-10 -2.000000e-01 -9.137113e-10 -3.000000e-01 -9.286886e-10 -4.000000e-01 -9.418268e-10 -5.000000e-01 -9.544625e-10 -6.000000e-01 -9.670447e-10 -7.000000e-01 -9.798797e-10 -8.000000e-01 -9.933088e-10 -9.000000e-01 -1.007816e-09 -1.000000e+00 -1.024134e-09 -1.100000e+00 -1.043368e-09 -1.200000e+00 -1.067131e-09 -1.000000e-01 -1.065005e-08 -2.000000e-01 -1.099361e-08 -3.000000e-01 -1.116814e-08 -4.000000e-01 -1.131895e-08 -5.000000e-01 -1.146166e-08 -6.000000e-01 -1.160049e-08 -7.000000e-01 -1.173726e-08 -8.000000e-01 -1.187318e-08 -9.000000e-01 -1.200976e-08 -1.000000e+00 -1.214936e-08 -1.100000e+00 -1.229576e-08 -1.200000e+00 -1.245442e-08 -1.000000e-01 -1.042842e-07 -2.000000e-01 -1.080409e-07 -3.000000e-01 -1.096885e-07 -4.000000e-01 -1.110690e-07 -5.000000e-01 -1.123597e-07 -6.000000e-01 -1.136059e-07 -7.000000e-01 -1.148258e-07 -8.000000e-01 -1.160301e-07 -9.000000e-01 -1.172306e-07 -1.000000e+00 -1.184463e-07 -1.100000e+00 -1.197074e-07 -1.200000e+00 -1.210579e-07 -1.000000e-01 -7.406254e-07 -2.000000e-01 -7.923773e-07 -3.000000e-01 -8.047208e-07 -4.000000e-01 -8.137286e-07 -5.000000e-01 -8.217974e-07 -6.000000e-01 -8.294293e-07 -7.000000e-01 -8.368018e-07 -8.000000e-01 -8.440047e-07 -9.000000e-01 -8.511163e-07 -1.000000e+00 -8.582498e-07 -1.100000e+00 -8.655897e-07 -1.200000e+00 -8.734129e-07 -1.000000e-01 -2.674163e-06 -2.000000e-01 -3.308884e-06 -3.000000e-01 -3.393766e-06 -4.000000e-01 -3.431993e-06 -5.000000e-01 -3.462032e-06 -6.000000e-01 -3.489044e-06 -7.000000e-01 -3.514444e-06 -8.000000e-01 -3.538806e-06 -9.000000e-01 -3.562471e-06 -1.000000e+00 -3.585803e-06 -1.100000e+00 -3.609361e-06 -1.200000e+00 -3.634034e-06 -1.000000e-01 -5.309366e-06 -2.000000e-01 -7.835704e-06 -3.000000e-01 -8.458825e-06 -4.000000e-01 -8.602062e-06 -5.000000e-01 -8.681703e-06 -6.000000e-01 -8.745787e-06 -7.000000e-01 -8.803272e-06 -8.000000e-01 -8.856987e-06 -9.000000e-01 -8.908184e-06 -1.000000e+00 -8.957698e-06 -1.100000e+00 -9.006507e-06 -1.200000e+00 -9.056162e-06 -1.000000e-01 -7.927870e-06 -2.000000e-01 -1.290014e-05 -3.000000e-01 -1.517555e-05 -4.000000e-01 -1.579887e-05 -5.000000e-01 -1.600377e-05 -6.000000e-01 -1.613278e-05 -7.000000e-01 -1.623875e-05 -8.000000e-01 -1.633392e-05 -9.000000e-01 -1.642261e-05 -1.000000e+00 -1.650687e-05 -1.100000e+00 -1.658822e-05 -1.200000e+00 -1.666862e-05 -1.000000e-01 -1.034247e-05 -2.000000e-01 -1.771482e-05 -3.000000e-01 -2.222086e-05 -4.000000e-01 -2.422494e-05 -5.000000e-01 -2.484823e-05 -6.000000e-01 -2.511226e-05 -7.000000e-01 -2.529386e-05 -8.000000e-01 -2.544606e-05 -9.000000e-01 -2.558331e-05 -1.000000e+00 -2.571118e-05 -1.100000e+00 -2.583255e-05 -1.200000e+00 -2.594982e-05 -1.000000e-01 -1.253506e-05 -2.000000e-01 -2.214139e-05 -3.000000e-01 -2.888515e-05 -4.000000e-01 -3.289799e-05 -5.000000e-01 -3.465695e-05 -6.000000e-01 -3.528530e-05 -7.000000e-01 -3.560573e-05 -8.000000e-01 -3.584103e-05 -9.000000e-01 -3.604182e-05 -1.000000e+00 -3.622382e-05 -1.100000e+00 -3.639357e-05 -1.200000e+00 -3.655479e-05 -1.000000e-01 -1.451957e-05 -2.000000e-01 -2.617713e-05 -3.000000e-01 -3.502471e-05 -4.000000e-01 -4.113399e-05 -5.000000e-01 -4.467592e-05 -6.000000e-01 -4.623402e-05 -7.000000e-01 -4.687448e-05 -8.000000e-01 -4.724910e-05 -9.000000e-01 -4.753809e-05 -1.000000e+00 -4.778856e-05 -1.100000e+00 -4.801678e-05 -1.200000e+00 -4.823004e-05 -1.000000e-01 -1.631432e-05 -2.000000e-01 -2.984567e-05 -3.000000e-01 -4.063840e-05 -4.000000e-01 -4.874407e-05 -5.000000e-01 -5.424439e-05 -6.000000e-01 -5.736094e-05 -7.000000e-01 -5.876426e-05 -8.000000e-01 -5.942317e-05 -9.000000e-01 -5.985006e-05 -1.000000e+00 -6.019203e-05 -1.100000e+00 -6.049235e-05 -1.200000e+00 -6.076737e-05 -1.000000e-01 -1.793730e-05 -2.000000e-01 -3.317636e-05 -3.000000e-01 -4.575628e-05 -4.000000e-01 -5.571920e-05 -5.000000e-01 -6.311817e-05 -6.000000e-01 -6.805034e-05 -7.000000e-01 -7.079689e-05 -8.000000e-01 -7.208629e-05 -9.000000e-01 -7.276847e-05 -1.000000e+00 -7.324580e-05 -1.100000e+00 -7.363957e-05 -1.200000e+00 -7.398927e-05 -1.000000e-01 -1.306758e-10 -2.000000e-01 -1.349132e-10 -3.000000e-01 -1.376098e-10 -4.000000e-01 -1.401412e-10 -5.000000e-01 -1.427458e-10 -6.000000e-01 -1.455803e-10 -7.000000e-01 -1.488321e-10 -8.000000e-01 -1.527676e-10 -9.000000e-01 -1.577838e-10 -1.000000e+00 -1.644739e-10 -1.100000e+00 -1.737165e-10 -1.200000e+00 -1.867989e-10 -1.000000e-01 -3.888893e-09 -2.000000e-01 -4.010035e-09 -3.000000e-01 -4.083409e-09 -4.000000e-01 -4.149025e-09 -5.000000e-01 -4.211999e-09 -6.000000e-01 -4.273860e-09 -7.000000e-01 -4.335336e-09 -8.000000e-01 -4.397002e-09 -9.000000e-01 -4.459606e-09 -1.000000e+00 -4.524328e-09 -1.100000e+00 -4.592998e-09 -1.200000e+00 -4.668267e-09 -1.000000e-01 -7.554141e-08 -2.000000e-01 -7.789396e-08 -3.000000e-01 -7.921612e-08 -4.000000e-01 -8.037441e-08 -5.000000e-01 -8.147429e-08 -6.000000e-01 -8.254556e-08 -7.000000e-01 -8.360079e-08 -8.000000e-01 -8.464811e-08 -9.000000e-01 -8.569704e-08 -1.000000e+00 -8.676289e-08 -1.100000e+00 -8.786980e-08 -1.200000e+00 -8.905243e-08 -1.000000e-01 -9.149297e-07 -2.000000e-01 -9.541848e-07 -3.000000e-01 -9.690792e-07 -4.000000e-01 -9.810294e-07 -5.000000e-01 -9.920087e-07 -6.000000e-01 -1.002511e-06 -7.000000e-01 -1.012729e-06 -8.000000e-01 -1.022770e-06 -9.000000e-01 -1.032739e-06 -1.000000e+00 -1.042796e-06 -1.100000e+00 -1.053197e-06 -1.200000e+00 -1.064315e-06 -1.000000e-01 -5.238940e-06 -2.000000e-01 -5.993105e-06 -3.000000e-01 -6.111235e-06 -4.000000e-01 -6.179364e-06 -5.000000e-01 -6.235736e-06 -6.000000e-01 -6.287146e-06 -7.000000e-01 -6.335768e-06 -8.000000e-01 -6.382579e-06 -9.000000e-01 -6.428239e-06 -1.000000e+00 -6.473527e-06 -1.100000e+00 -6.519655e-06 -1.200000e+00 -6.568474e-06 -1.000000e-01 -1.315554e-05 -2.000000e-01 -1.811872e-05 -3.000000e-01 -1.902190e-05 -4.000000e-01 -1.929236e-05 -5.000000e-01 -1.946727e-05 -6.000000e-01 -1.961230e-05 -7.000000e-01 -1.974313e-05 -8.000000e-01 -1.986548e-05 -9.000000e-01 -1.998217e-05 -1.000000e+00 -2.009536e-05 -1.100000e+00 -2.020779e-05 -1.200000e+00 -2.032374e-05 -1.000000e-01 -2.256086e-05 -2.000000e-01 -3.520045e-05 -3.000000e-01 -3.973220e-05 -4.000000e-01 -4.083007e-05 -5.000000e-01 -4.129718e-05 -6.000000e-01 -4.162291e-05 -7.000000e-01 -4.189532e-05 -8.000000e-01 -4.214010e-05 -9.000000e-01 -4.236766e-05 -1.000000e+00 -4.258364e-05 -1.100000e+00 -4.279292e-05 -1.200000e+00 -4.300215e-05 -1.000000e-01 -3.293108e-05 -2.000000e-01 -5.479113e-05 -3.000000e-01 -6.643999e-05 -4.000000e-01 -7.053566e-05 -5.000000e-01 -7.184151e-05 -6.000000e-01 -7.253458e-05 -7.000000e-01 -7.304719e-05 -8.000000e-01 -7.348141e-05 -9.000000e-01 -7.387198e-05 -1.000000e+00 -7.423438e-05 -1.100000e+00 -7.457801e-05 -1.200000e+00 -7.491218e-05 -1.000000e-01 -4.432823e-05 -2.000000e-01 -7.650026e-05 -3.000000e-01 -9.720398e-05 -4.000000e-01 -1.076182e-04 -5.000000e-01 -1.113712e-04 -6.000000e-01 -1.129021e-04 -7.000000e-01 -1.138451e-04 -8.000000e-01 -1.145762e-04 -9.000000e-01 -1.152041e-04 -1.000000e+00 -1.157710e-04 -1.100000e+00 -1.162974e-04 -1.200000e+00 -1.167979e-04 -1.000000e-01 -5.699939e-05 -2.000000e-01 -1.006689e-04 -3.000000e-01 -1.317115e-04 -4.000000e-01 -1.508804e-04 -5.000000e-01 -1.599582e-04 -6.000000e-01 -1.634977e-04 -7.000000e-01 -1.652727e-04 -8.000000e-01 -1.664875e-04 -9.000000e-01 -1.674657e-04 -1.000000e+00 -1.683177e-04 -1.100000e+00 -1.690909e-04 -1.200000e+00 -1.698113e-04 -1.000000e-01 -7.132756e-05 -2.000000e-01 -1.279644e-04 -3.000000e-01 -1.706894e-04 -4.000000e-01 -2.002083e-04 -5.000000e-01 -2.174206e-04 -6.000000e-01 -2.251976e-04 -7.000000e-01 -2.286487e-04 -8.000000e-01 -2.306870e-04 -9.000000e-01 -2.321945e-04 -1.000000e+00 -2.334473e-04 -1.100000e+00 -2.345528e-04 -1.200000e+00 -2.355627e-04 -1.000000e-01 -8.786494e-05 -2.000000e-01 -1.593858e-04 -3.000000e-01 -2.154595e-04 -4.000000e-01 -2.568613e-04 -5.000000e-01 -2.842555e-04 -6.000000e-01 -2.990298e-04 -7.000000e-01 -3.056952e-04 -8.000000e-01 -3.091615e-04 -9.000000e-01 -3.114826e-04 -1.000000e+00 -3.133036e-04 -1.100000e+00 -3.148573e-04 -1.200000e+00 -3.162459e-04 -1.000000e-01 -4.640355e-09 -2.000000e-01 -4.822512e-09 -3.000000e-01 -4.891408e-09 -4.000000e-01 -4.948173e-09 -5.000000e-01 -5.001233e-09 -6.000000e-01 -5.052668e-09 -7.000000e-01 -5.103393e-09 -8.000000e-01 -5.154099e-09 -9.000000e-01 -5.205641e-09 -1.000000e+00 -5.259363e-09 -1.100000e+00 -5.317366e-09 -1.200000e+00 -5.382742e-09 -1.000000e-01 -2.627194e-08 -2.000000e-01 -2.738400e-08 -3.000000e-01 -2.777175e-08 -4.000000e-01 -2.808548e-08 -5.000000e-01 -2.837635e-08 -6.000000e-01 -2.865619e-08 -7.000000e-01 -2.892949e-08 -8.000000e-01 -2.919894e-08 -9.000000e-01 -2.946745e-08 -1.000000e+00 -2.973969e-08 -1.100000e+00 -3.002326e-08 -1.200000e+00 -3.032939e-08 -1.000000e-01 -1.345232e-07 -2.000000e-01 -1.425209e-07 -3.000000e-01 -1.445843e-07 -4.000000e-01 -1.461498e-07 -5.000000e-01 -1.475751e-07 -6.000000e-01 -1.489346e-07 -7.000000e-01 -1.502545e-07 -8.000000e-01 -1.515487e-07 -9.000000e-01 -1.528305e-07 -1.000000e+00 -1.541204e-07 -1.100000e+00 -1.554526e-07 -1.200000e+00 -1.568781e-07 -1.000000e-01 -5.400808e-07 -2.000000e-01 -6.188510e-07 -3.000000e-01 -6.300021e-07 -4.000000e-01 -6.366069e-07 -5.000000e-01 -6.422686e-07 -6.000000e-01 -6.475449e-07 -7.000000e-01 -6.526023e-07 -8.000000e-01 -6.575143e-07 -9.000000e-01 -6.623343e-07 -1.000000e+00 -6.671333e-07 -1.100000e+00 -6.720295e-07 -1.200000e+00 -6.772087e-07 -1.000000e-01 -1.355374e-06 -2.000000e-01 -1.850606e-06 -3.000000e-01 -1.930986e-06 -4.000000e-01 -1.954752e-06 -5.000000e-01 -1.971417e-06 -6.000000e-01 -1.986030e-06 -7.000000e-01 -1.999665e-06 -8.000000e-01 -2.012694e-06 -9.000000e-01 -2.025304e-06 -1.000000e+00 -2.037664e-06 -1.100000e+00 -2.050021e-06 -1.200000e+00 -2.062792e-06 -1.000000e-01 -2.300547e-06 -2.000000e-01 -3.613173e-06 -3.000000e-01 -4.085899e-06 -4.000000e-01 -4.188990e-06 -5.000000e-01 -4.230897e-06 -6.000000e-01 -4.261947e-06 -7.000000e-01 -4.289320e-06 -8.000000e-01 -4.314796e-06 -9.000000e-01 -4.339043e-06 -1.000000e+00 -4.362430e-06 -1.100000e+00 -4.385322e-06 -1.200000e+00 -4.408293e-06 -1.000000e-01 -3.147973e-06 -2.000000e-01 -5.309322e-06 -3.000000e-01 -6.521346e-06 -4.000000e-01 -6.968416e-06 -5.000000e-01 -7.092713e-06 -6.000000e-01 -7.153714e-06 -7.000000e-01 -7.200656e-06 -8.000000e-01 -7.242270e-06 -9.000000e-01 -7.280974e-06 -1.000000e+00 -7.317732e-06 -1.100000e+00 -7.353118e-06 -1.200000e+00 -7.387760e-06 -1.000000e-01 -3.848755e-06 -2.000000e-01 -6.748594e-06 -3.000000e-01 -8.715155e-06 -4.000000e-01 -9.798269e-06 -5.000000e-01 -1.020953e-05 -6.000000e-01 -1.034863e-05 -7.000000e-01 -1.042716e-05 -8.000000e-01 -1.048973e-05 -9.000000e-01 -1.054564e-05 -1.000000e+00 -1.059772e-05 -1.100000e+00 -1.064716e-05 -1.200000e+00 -1.069475e-05 -1.000000e-01 -4.419870e-06 -2.000000e-01 -7.939405e-06 -3.000000e-01 -1.056811e-05 -4.000000e-01 -1.232470e-05 -5.000000e-01 -1.327374e-05 -6.000000e-01 -1.364685e-05 -7.000000e-01 -1.379606e-05 -8.000000e-01 -1.389007e-05 -9.000000e-01 -1.396736e-05 -1.000000e+00 -1.403705e-05 -1.100000e+00 -1.410213e-05 -1.200000e+00 -1.416398e-05 -1.000000e-01 -4.886312e-06 -2.000000e-01 -8.923250e-06 -3.000000e-01 -1.211769e-05 -4.000000e-01 -1.447973e-05 -5.000000e-01 -1.603241e-05 -6.000000e-01 -1.685661e-05 -7.000000e-01 -1.719558e-05 -8.000000e-01 -1.735244e-05 -9.000000e-01 -1.746016e-05 -1.000000e+00 -1.755113e-05 -1.100000e+00 -1.763386e-05 -1.200000e+00 -1.771138e-05 -1.000000e-01 -5.268402e-06 -2.000000e-01 -9.737502e-06 -3.000000e-01 -1.341267e-05 -4.000000e-01 -1.630069e-05 -5.000000e-01 -1.841280e-05 -6.000000e-01 -1.977762e-05 -7.000000e-01 -2.049272e-05 -8.000000e-01 -2.080393e-05 -9.000000e-01 -2.096731e-05 -1.000000e+00 -2.108731e-05 -1.100000e+00 -2.119091e-05 -1.200000e+00 -2.128588e-05 -1.000000e-01 -5.581509e-06 -2.000000e-01 -1.041153e-05 -3.000000e-01 -1.449442e-05 -4.000000e-01 -1.783528e-05 -5.000000e-01 -2.044104e-05 -6.000000e-01 -2.232467e-05 -7.000000e-01 -2.352151e-05 -8.000000e-01 -2.414485e-05 -9.000000e-01 -2.443464e-05 -1.000000e+00 -2.460398e-05 -1.100000e+00 -2.473504e-05 -1.200000e+00 -2.485027e-05 tmpk8ny_4pz/tests/bsim4/pmos/reference/dcSweep_nrd.standard0000644000175000017500000002751213546075722024242 0ustar carstencarstenV(d) I(d) -1.000000e-01 -2.060590e-07 -2.000000e-01 -3.951316e-07 -3.000000e-01 -7.284492e-07 -4.000000e-01 -1.318726e-06 -5.000000e-01 -2.351833e-06 -6.000000e-01 -4.135051e-06 -7.000000e-01 -7.168302e-06 -8.000000e-01 -1.224900e-05 -9.000000e-01 -2.061727e-05 -1.000000e+00 -3.413855e-05 -1.100000e+00 -5.550543e-05 -1.200000e+00 -8.843438e-05 -1.000000e-01 -2.346897e-06 -2.000000e-01 -4.297668e-06 -3.000000e-01 -7.528014e-06 -4.000000e-01 -1.289774e-05 -5.000000e-01 -2.166771e-05 -6.000000e-01 -3.563773e-05 -7.000000e-01 -5.718867e-05 -8.000000e-01 -8.918101e-05 -9.000000e-01 -1.347059e-04 -1.000000e+00 -1.967958e-04 -1.100000e+00 -2.782898e-04 -1.200000e+00 -3.820241e-04 -1.000000e-01 -2.085014e-05 -2.000000e-01 -3.601479e-05 -3.000000e-01 -5.828858e-05 -4.000000e-01 -9.072184e-05 -5.000000e-01 -1.360461e-04 -6.000000e-01 -1.966295e-04 -7.000000e-01 -2.742109e-04 -8.000000e-01 -3.697766e-04 -9.000000e-01 -4.836448e-04 -1.000000e+00 -6.157816e-04 -1.100000e+00 -7.663336e-04 -1.200000e+00 -9.363438e-04 -1.000000e-01 -1.164883e-04 -2.000000e-01 -1.862745e-04 -3.000000e-01 -2.634782e-04 -4.000000e-01 -3.558483e-04 -5.000000e-01 -4.643437e-04 -6.000000e-01 -5.888399e-04 -7.000000e-01 -7.287671e-04 -8.000000e-01 -8.833454e-04 -9.000000e-01 -1.051774e-03 -1.000000e+00 -1.233477e-03 -1.100000e+00 -1.428531e-03 -1.200000e+00 -1.638299e-03 -1.000000e-01 -3.143640e-04 -2.000000e-01 -5.120308e-04 -3.000000e-01 -6.644926e-04 -4.000000e-01 -8.176154e-04 -5.000000e-01 -9.799676e-04 -6.000000e-01 -1.152925e-03 -7.000000e-01 -1.336530e-03 -8.000000e-01 -1.530467e-03 -9.000000e-01 -1.734339e-03 -1.000000e+00 -1.947883e-03 -1.100000e+00 -2.171358e-03 -1.200000e+00 -2.406214e-03 -1.000000e-01 -5.254638e-04 -2.000000e-01 -9.031904e-04 -3.000000e-01 -1.166777e-03 -4.000000e-01 -1.382391e-03 -5.000000e-01 -1.590078e-03 -6.000000e-01 -1.800607e-03 -7.000000e-01 -2.016965e-03 -8.000000e-01 -2.240113e-03 -9.000000e-01 -2.470331e-03 -1.000000e+00 -2.707704e-03 -1.100000e+00 -2.952543e-03 -1.200000e+00 -3.206079e-03 -1.000000e-01 -7.079570e-04 -2.000000e-01 -1.260033e-03 -3.000000e-01 -1.671698e-03 -4.000000e-01 -1.978063e-03 -5.000000e-01 -2.237852e-03 -6.000000e-01 -2.485184e-03 -7.000000e-01 -2.731235e-03 -8.000000e-01 -2.979875e-03 -9.000000e-01 -3.232655e-03 -1.000000e+00 -3.490268e-03 -1.100000e+00 -3.753206e-03 -1.200000e+00 -4.022466e-03 -1.000000e-01 -8.600478e-04 -2.000000e-01 -1.564721e-03 -3.000000e-01 -2.124958e-03 -4.000000e-01 -2.554615e-03 -5.000000e-01 -2.889458e-03 -6.000000e-01 -3.181466e-03 -7.000000e-01 -3.459115e-03 -8.000000e-01 -3.732910e-03 -9.000000e-01 -4.007013e-03 -1.000000e+00 -4.283298e-03 -1.100000e+00 -4.562767e-03 -1.200000e+00 -4.846378e-03 -1.000000e-01 -9.870780e-04 -2.000000e-01 -1.823059e-03 -3.000000e-01 -2.516984e-03 -4.000000e-01 -3.077020e-03 -5.000000e-01 -3.515577e-03 -6.000000e-01 -3.870187e-03 -7.000000e-01 -4.186494e-03 -8.000000e-01 -4.487945e-03 -9.000000e-01 -4.783974e-03 -1.000000e+00 -5.078702e-03 -1.100000e+00 -5.374162e-03 -1.200000e+00 -5.671635e-03 -1.000000e-01 -1.094071e-03 -2.000000e-01 -2.042970e-03 -3.000000e-01 -2.854372e-03 -4.000000e-01 -3.534946e-03 -5.000000e-01 -4.089750e-03 -6.000000e-01 -4.531624e-03 -7.000000e-01 -4.900574e-03 -8.000000e-01 -5.235727e-03 -9.000000e-01 -5.556251e-03 -1.000000e+00 -5.870441e-03 -1.100000e+00 -6.182210e-03 -1.200000e+00 -6.493666e-03 -1.000000e-01 -1.184956e-03 -2.000000e-01 -2.231285e-03 -3.000000e-01 -3.145536e-03 -4.000000e-01 -3.933549e-03 -5.000000e-01 -4.599401e-03 -6.000000e-01 -5.145152e-03 -7.000000e-01 -5.587326e-03 -8.000000e-01 -5.967207e-03 -9.000000e-01 -6.317380e-03 -1.000000e+00 -6.653500e-03 -1.100000e+00 -6.982795e-03 -1.200000e+00 -7.308909e-03 -1.000000e-01 -1.262757e-03 -2.000000e-01 -2.393539e-03 -3.000000e-01 -3.397949e-03 -4.000000e-01 -4.281122e-03 -5.000000e-01 -5.047053e-03 -6.000000e-01 -5.696694e-03 -7.000000e-01 -6.230746e-03 -8.000000e-01 -6.672102e-03 -9.000000e-01 -7.060729e-03 -1.000000e+00 -7.423188e-03 -1.100000e+00 -7.772319e-03 -1.200000e+00 -8.114402e-03 -1.000000e-01 -3.879320e-08 -2.000000e-01 -8.828125e-08 -3.000000e-01 -1.926172e-07 -4.000000e-01 -4.098417e-07 -5.000000e-01 -8.505319e-07 -6.000000e-01 -1.717682e-06 -7.000000e-01 -3.369466e-06 -8.000000e-01 -6.418716e-06 -9.000000e-01 -1.189461e-05 -1.000000e+00 -2.150243e-05 -1.100000e+00 -3.800360e-05 -1.200000e+00 -6.567854e-05 -1.000000e-01 -1.051411e-06 -2.000000e-01 -2.181649e-06 -3.000000e-01 -4.273257e-06 -4.000000e-01 -8.073117e-06 -5.000000e-01 -1.479802e-05 -6.000000e-01 -2.638589e-05 -7.000000e-01 -4.574189e-05 -8.000000e-01 -7.681680e-05 -9.000000e-01 -1.243196e-04 -1.000000e+00 -1.930633e-04 -1.100000e+00 -2.873177e-04 -1.200000e+00 -4.107317e-04 -1.000000e-01 -1.716214e-05 -2.000000e-01 -3.170871e-05 -3.000000e-01 -5.512260e-05 -4.000000e-01 -9.181041e-05 -5.000000e-01 -1.463096e-04 -6.000000e-01 -2.225100e-04 -7.000000e-01 -3.228176e-04 -8.000000e-01 -4.478362e-04 -9.000000e-01 -5.967288e-04 -1.000000e+00 -7.680722e-04 -1.100000e+00 -9.609659e-04 -1.200000e+00 -1.176189e-03 -1.000000e-01 -1.535391e-04 -2.000000e-01 -2.466250e-04 -3.000000e-01 -3.576746e-04 -4.000000e-01 -4.912500e-04 -5.000000e-01 -6.465057e-04 -6.000000e-01 -8.213878e-04 -7.000000e-01 -1.013520e-03 -8.000000e-01 -1.220632e-03 -9.000000e-01 -1.440871e-03 -1.000000e+00 -1.673199e-03 -1.100000e+00 -1.918014e-03 -1.200000e+00 -2.177989e-03 -1.000000e-01 -5.481566e-04 -2.000000e-01 -8.238938e-04 -3.000000e-01 -1.042758e-03 -4.000000e-01 -1.261976e-03 -5.000000e-01 -1.488592e-03 -6.000000e-01 -1.723339e-03 -7.000000e-01 -1.965789e-03 -8.000000e-01 -2.215300e-03 -9.000000e-01 -2.471356e-03 -1.000000e+00 -2.733975e-03 -1.100000e+00 -3.004420e-03 -1.200000e+00 -3.286220e-03 -1.000000e-01 -1.005168e-03 -2.000000e-01 -1.589641e-03 -3.000000e-01 -1.936616e-03 -4.000000e-01 -2.222609e-03 -5.000000e-01 -2.495846e-03 -6.000000e-01 -2.766945e-03 -7.000000e-01 -3.039112e-03 -8.000000e-01 -3.313511e-03 -9.000000e-01 -3.590654e-03 -1.000000e+00 -3.871123e-03 -1.100000e+00 -4.156427e-03 -1.200000e+00 -4.450216e-03 -1.000000e-01 -1.397794e-03 -2.000000e-01 -2.334843e-03 -3.000000e-01 -2.890699e-03 -4.000000e-01 -3.260480e-03 -5.000000e-01 -3.577921e-03 -6.000000e-01 -3.878770e-03 -7.000000e-01 -4.173458e-03 -8.000000e-01 -4.465936e-03 -9.000000e-01 -4.758027e-03 -1.000000e+00 -5.050911e-03 -1.100000e+00 -5.346218e-03 -1.200000e+00 -5.647400e-03 -1.000000e-01 -1.722724e-03 -2.000000e-01 -2.984381e-03 -3.000000e-01 -3.816156e-03 -4.000000e-01 -4.318980e-03 -5.000000e-01 -4.692805e-03 -6.000000e-01 -5.024972e-03 -7.000000e-01 -5.340668e-03 -8.000000e-01 -5.648781e-03 -9.000000e-01 -5.953187e-03 -1.000000e+00 -6.255978e-03 -1.100000e+00 -6.559019e-03 -1.200000e+00 -6.865483e-03 -1.000000e-01 -1.994664e-03 -2.000000e-01 -3.540576e-03 -3.000000e-01 -4.658145e-03 -4.000000e-01 -5.358128e-03 -5.000000e-01 -5.815052e-03 -6.000000e-01 -6.186191e-03 -7.000000e-01 -6.524767e-03 -8.000000e-01 -6.848418e-03 -9.000000e-01 -7.164325e-03 -1.000000e+00 -7.476010e-03 -1.100000e+00 -7.785833e-03 -1.200000e+00 -8.096776e-03 -1.000000e-01 -2.226586e-03 -2.000000e-01 -4.021010e-03 -3.000000e-01 -5.401930e-03 -4.000000e-01 -6.343063e-03 -5.000000e-01 -6.924642e-03 -6.000000e-01 -7.349059e-03 -7.000000e-01 -7.715281e-03 -8.000000e-01 -8.056025e-03 -9.000000e-01 -8.383767e-03 -1.000000e+00 -8.704214e-03 -1.100000e+00 -9.020600e-03 -1.200000e+00 -9.335927e-03 -1.000000e-01 -2.428199e-03 -2.000000e-01 -4.441863e-03 -3.000000e-01 -6.058273e-03 -4.000000e-01 -7.248613e-03 -5.000000e-01 -8.002602e-03 -6.000000e-01 -8.502638e-03 -7.000000e-01 -8.904391e-03 -8.000000e-01 -9.265229e-03 -9.000000e-01 -9.605998e-03 -1.000000e+00 -9.935666e-03 -1.100000e+00 -1.025884e-02 -1.200000e+00 -1.057883e-02 -1.000000e-01 -2.606621e-03 -2.000000e-01 -4.815947e-03 -3.000000e-01 -6.643301e-03 -4.000000e-01 -8.067514e-03 -5.000000e-01 -9.030315e-03 -6.000000e-01 -9.636580e-03 -7.000000e-01 -1.008548e-02 -8.000000e-01 -1.047089e-02 -9.000000e-01 -1.082661e-02 -1.000000e+00 -1.116641e-02 -1.100000e+00 -1.149687e-02 -1.200000e+00 -1.182202e-02 -1.000000e-01 -8.631383e-07 -2.000000e-01 -1.438366e-06 -3.000000e-01 -2.301709e-06 -4.000000e-01 -3.640184e-06 -5.000000e-01 -5.711589e-06 -6.000000e-01 -8.900103e-06 -7.000000e-01 -1.377231e-05 -8.000000e-01 -2.114710e-05 -9.000000e-01 -3.217948e-05 -1.000000e+00 -4.845894e-05 -1.100000e+00 -7.212736e-05 -1.200000e+00 -1.060340e-04 -1.000000e-01 -4.737109e-06 -2.000000e-01 -7.769023e-06 -3.000000e-01 -1.214855e-05 -4.000000e-01 -1.870292e-05 -5.000000e-01 -2.841559e-05 -6.000000e-01 -4.256391e-05 -7.000000e-01 -6.273073e-05 -8.000000e-01 -9.076158e-05 -9.000000e-01 -1.286798e-04 -1.000000e+00 -1.786064e-04 -1.100000e+00 -2.427563e-04 -1.200000e+00 -3.235907e-04 -1.000000e-01 -2.264715e-05 -2.000000e-01 -3.665516e-05 -3.000000e-01 -5.464813e-05 -4.000000e-01 -7.918854e-05 -5.000000e-01 -1.119696e-04 -6.000000e-01 -1.545812e-04 -7.000000e-01 -2.084480e-04 -8.000000e-01 -2.747473e-04 -9.000000e-01 -3.543813e-04 -1.000000e+00 -4.480516e-04 -1.100000e+00 -5.564743e-04 -1.200000e+00 -6.807697e-04 -1.000000e-01 -7.748470e-05 -2.000000e-01 -1.276434e-04 -3.000000e-01 -1.762398e-04 -4.000000e-01 -2.336562e-04 -5.000000e-01 -3.017051e-04 -6.000000e-01 -3.810797e-04 -7.000000e-01 -4.721262e-04 -8.000000e-01 -5.749879e-04 -9.000000e-01 -6.896855e-04 -1.000000e+00 -8.162278e-04 -1.100000e+00 -9.548108e-04 -1.200000e+00 -1.106185e-03 -1.000000e-01 -1.649832e-04 -2.000000e-01 -2.888676e-04 -3.000000e-01 -3.847763e-04 -4.000000e-01 -4.778144e-04 -5.000000e-01 -5.779060e-04 -6.000000e-01 -6.869890e-04 -7.000000e-01 -8.055666e-04 -8.000000e-01 -9.338043e-04 -9.000000e-01 -1.071758e-03 -1.000000e+00 -1.219468e-03 -1.100000e+00 -1.377097e-03 -1.200000e+00 -1.545230e-03 -1.000000e-01 -2.528861e-04 -2.000000e-01 -4.605974e-04 -3.000000e-01 -6.247999e-04 -4.000000e-01 -7.598710e-04 -5.000000e-01 -8.883462e-04 -6.000000e-01 -1.020659e-03 -7.000000e-01 -1.159647e-03 -8.000000e-01 -1.306281e-03 -9.000000e-01 -1.461004e-03 -1.000000e+00 -1.624066e-03 -1.100000e+00 -1.795681e-03 -1.200000e+00 -1.976261e-03 -1.000000e-01 -3.259797e-04 -2.000000e-01 -6.064203e-04 -3.000000e-01 -8.409978e-04 -4.000000e-01 -1.033147e-03 -5.000000e-01 -1.197206e-03 -6.000000e-01 -1.352986e-03 -7.000000e-01 -1.510484e-03 -8.000000e-01 -1.673053e-03 -9.000000e-01 -1.842023e-03 -1.000000e+00 -2.018048e-03 -1.100000e+00 -2.201516e-03 -1.200000e+00 -2.392780e-03 -1.000000e-01 -3.839099e-04 -2.000000e-01 -7.238735e-04 -3.000000e-01 -1.019374e-03 -4.000000e-01 -1.270966e-03 -5.000000e-01 -1.483126e-03 -6.000000e-01 -1.669770e-03 -7.000000e-01 -1.847957e-03 -8.000000e-01 -2.026639e-03 -9.000000e-01 -2.209270e-03 -1.000000e+00 -2.397361e-03 -1.100000e+00 -2.591695e-03 -1.200000e+00 -2.792758e-03 -1.000000e-01 -4.297909e-04 -2.000000e-01 -8.181662e-04 -3.000000e-01 -1.164623e-03 -4.000000e-01 -1.469061e-03 -5.000000e-01 -1.732569e-03 -6.000000e-01 -1.960345e-03 -7.000000e-01 -2.165598e-03 -8.000000e-01 -2.362838e-03 -9.000000e-01 -2.559856e-03 -1.000000e+00 -2.759986e-03 -1.100000e+00 -2.964809e-03 -1.200000e+00 -3.175183e-03 -1.000000e-01 -4.664338e-04 -2.000000e-01 -8.943124e-04 -3.000000e-01 -1.283157e-03 -4.000000e-01 -1.632680e-03 -5.000000e-01 -1.943031e-03 -6.000000e-01 -2.215712e-03 -7.000000e-01 -2.456426e-03 -8.000000e-01 -2.677486e-03 -9.000000e-01 -2.891165e-03 -1.000000e+00 -3.104188e-03 -1.100000e+00 -3.319685e-03 -1.200000e+00 -3.539237e-03 -1.000000e-01 -4.958883e-04 -2.000000e-01 -9.561013e-04 -3.000000e-01 -1.380178e-03 -4.000000e-01 -1.767763e-03 -5.000000e-01 -2.118708e-03 -6.000000e-01 -2.433348e-03 -7.000000e-01 -2.713545e-03 -8.000000e-01 -2.965351e-03 -9.000000e-01 -3.200046e-03 -1.000000e+00 -3.428017e-03 -1.100000e+00 -3.655075e-03 -1.200000e+00 -3.884114e-03 -1.000000e-01 -5.196299e-04 -2.000000e-01 -1.006341e-03 -3.000000e-01 -1.459686e-03 -4.000000e-01 -1.879286e-03 -5.000000e-01 -2.264875e-03 -6.000000e-01 -2.616396e-03 -7.000000e-01 -2.934366e-03 -8.000000e-01 -3.220975e-03 -9.000000e-01 -3.482461e-03 -1.000000e+00 -3.729035e-03 -1.100000e+00 -3.969510e-03 -1.200000e+00 -4.208930e-03 tmpk8ny_4pz/tests/bsim4/pmos/reference/dcSweep_nrs.standard0000644000175000017500000002751213546075722024261 0ustar carstencarstenV(d) I(d) -1.000000e-01 -2.060459e-07 -2.000000e-01 -3.950843e-07 -3.000000e-01 -7.282913e-07 -4.000000e-01 -1.318220e-06 -5.000000e-01 -2.350262e-06 -6.000000e-01 -4.130322e-06 -7.000000e-01 -7.154493e-06 -8.000000e-01 -1.220995e-05 -9.000000e-01 -2.051072e-05 -1.000000e+00 -3.385988e-05 -1.100000e+00 -5.481203e-05 -1.200000e+00 -8.680571e-05 -1.000000e-01 -2.345354e-06 -2.000000e-01 -4.292624e-06 -3.000000e-01 -7.512966e-06 -4.000000e-01 -1.285496e-05 -5.000000e-01 -2.155160e-05 -6.000000e-01 -3.533892e-05 -7.000000e-01 -5.646687e-05 -8.000000e-01 -8.756083e-05 -9.000000e-01 -1.313475e-04 -1.000000e+00 -1.903734e-04 -1.100000e+00 -2.669083e-04 -1.200000e+00 -3.631695e-04 -1.000000e-01 -2.074564e-05 -2.000000e-01 -3.571642e-05 -3.000000e-01 -5.755819e-05 -4.000000e-01 -8.909618e-05 -5.000000e-01 -1.327365e-04 -6.000000e-01 -1.904438e-04 -7.000000e-01 -2.635347e-04 -8.000000e-01 -3.526230e-04 -9.000000e-01 -4.577558e-04 -1.000000e+00 -5.787310e-04 -1.100000e+00 -7.155803e-04 -1.200000e+00 -8.691866e-04 -1.000000e-01 -1.143359e-04 -2.000000e-01 -1.810175e-04 -3.000000e-01 -2.540622e-04 -4.000000e-01 -3.406089e-04 -5.000000e-01 -4.413567e-04 -6.000000e-01 -5.560457e-04 -7.000000e-01 -6.840585e-04 -8.000000e-01 -8.246346e-04 -9.000000e-01 -9.770300e-04 -1.000000e+00 -1.140740e-03 -1.100000e+00 -1.315876e-03 -1.200000e+00 -1.503724e-03 -1.000000e-01 -3.062904e-04 -2.000000e-01 -4.895171e-04 -3.000000e-01 -6.291121e-04 -4.000000e-01 -7.690486e-04 -5.000000e-01 -9.168119e-04 -6.000000e-01 -1.073568e-03 -7.000000e-01 -1.239331e-03 -8.000000e-01 -1.413811e-03 -9.000000e-01 -1.596663e-03 -1.000000e+00 -1.787691e-03 -1.100000e+00 -1.987210e-03 -1.200000e+00 -2.196661e-03 -1.000000e-01 -5.128599e-04 -2.000000e-01 -8.628067e-04 -3.000000e-01 -1.097883e-03 -4.000000e-01 -1.290495e-03 -5.000000e-01 -1.476773e-03 -6.000000e-01 -1.665549e-03 -7.000000e-01 -1.859242e-03 -8.000000e-01 -2.058630e-03 -9.000000e-01 -2.263943e-03 -1.000000e+00 -2.475280e-03 -1.100000e+00 -2.693015e-03 -1.200000e+00 -2.918449e-03 -1.000000e-01 -6.933608e-04 -2.000000e-01 -1.209904e-03 -3.000000e-01 -1.577138e-03 -4.000000e-01 -1.844046e-03 -5.000000e-01 -2.072628e-03 -6.000000e-01 -2.291815e-03 -7.000000e-01 -2.510323e-03 -8.000000e-01 -2.731157e-03 -9.000000e-01 -2.955537e-03 -1.000000e+00 -3.184030e-03 -1.100000e+00 -3.417129e-03 -1.200000e+00 -3.655927e-03 -1.000000e-01 -8.449269e-04 -2.000000e-01 -1.510568e-03 -3.000000e-01 -2.017141e-03 -4.000000e-01 -2.389541e-03 -5.000000e-01 -2.677120e-03 -6.000000e-01 -2.931627e-03 -7.000000e-01 -3.175743e-03 -8.000000e-01 -3.417330e-03 -9.000000e-01 -3.659510e-03 -1.000000e+00 -3.903718e-03 -1.100000e+00 -4.150785e-03 -1.200000e+00 -4.401702e-03 -1.000000e-01 -9.721833e-04 -2.000000e-01 -1.768174e-03 -3.000000e-01 -2.404211e-03 -4.000000e-01 -2.896083e-03 -5.000000e-01 -3.268193e-03 -6.000000e-01 -3.570365e-03 -7.000000e-01 -3.844477e-03 -8.000000e-01 -4.108173e-03 -9.000000e-01 -4.368275e-03 -1.000000e+00 -4.627791e-03 -1.100000e+00 -4.888254e-03 -1.200000e+00 -5.150791e-03 -1.000000e-01 -1.079783e-03 -2.000000e-01 -1.989218e-03 -3.000000e-01 -2.741504e-03 -4.000000e-01 -3.349104e-03 -5.000000e-01 -3.824134e-03 -6.000000e-01 -4.193934e-03 -7.000000e-01 -4.507195e-03 -8.000000e-01 -4.796686e-03 -9.000000e-01 -5.076164e-03 -1.000000e+00 -5.351460e-03 -1.100000e+00 -5.625370e-03 -1.200000e+00 -5.899508e-03 -1.000000e-01 -1.171454e-03 -2.000000e-01 -2.179689e-03 -3.000000e-01 -3.035422e-03 -4.000000e-01 -3.749070e-03 -5.000000e-01 -4.329381e-03 -6.000000e-01 -4.786691e-03 -7.000000e-01 -5.154224e-03 -8.000000e-01 -5.476431e-03 -9.000000e-01 -5.778371e-03 -1.000000e+00 -6.070864e-03 -1.100000e+00 -6.358876e-03 -1.200000e+00 -6.644986e-03 -1.000000e-01 -1.250107e-03 -2.000000e-01 -2.344609e-03 -3.000000e-01 -3.292196e-03 -4.000000e-01 -4.101614e-03 -5.000000e-01 -4.780511e-03 -6.000000e-01 -5.333897e-03 -7.000000e-01 -5.774256e-03 -8.000000e-01 -6.140515e-03 -9.000000e-01 -6.470272e-03 -1.000000e+00 -6.782568e-03 -1.100000e+00 -7.086024e-03 -1.200000e+00 -7.384879e-03 -1.000000e-01 -3.879256e-08 -2.000000e-01 -8.827801e-08 -3.000000e-01 -1.926021e-07 -4.000000e-01 -4.097756e-07 -5.000000e-01 -8.502571e-07 -6.000000e-01 -1.716608e-06 -7.000000e-01 -3.365521e-06 -8.000000e-01 -6.405082e-06 -9.000000e-01 -1.185004e-05 -1.000000e+00 -2.136403e-05 -1.100000e+00 -3.759549e-05 -1.200000e+00 -6.454447e-05 -1.000000e-01 -1.051000e-06 -2.000000e-01 -2.179959e-06 -3.000000e-01 -4.267067e-06 -4.000000e-01 -8.052045e-06 -5.000000e-01 -1.473049e-05 -6.000000e-01 -2.618182e-05 -7.000000e-01 -4.516459e-05 -8.000000e-01 -7.531008e-05 -9.000000e-01 -1.207444e-04 -1.000000e+00 -1.854159e-04 -1.100000e+00 -2.725559e-04 -1.200000e+00 -3.847469e-04 -1.000000e-01 -1.707358e-05 -2.000000e-01 -3.142094e-05 -3.000000e-01 -5.430853e-05 -4.000000e-01 -8.973934e-05 -5.000000e-01 -1.415896e-04 -6.000000e-01 -2.128976e-04 -7.000000e-01 -3.052340e-04 -8.000000e-01 -4.186174e-04 -9.000000e-01 -5.519766e-04 -1.000000e+00 -7.039323e-04 -1.100000e+00 -8.736931e-04 -1.200000e+00 -1.061947e-03 -1.000000e-01 -1.487820e-04 -2.000000e-01 -2.357068e-04 -3.000000e-01 -3.374994e-04 -4.000000e-01 -4.583563e-04 -5.000000e-01 -5.972165e-04 -6.000000e-01 -7.522264e-04 -7.000000e-01 -9.213627e-04 -8.000000e-01 -1.102754e-03 -9.000000e-01 -1.294913e-03 -1.000000e+00 -1.497067e-03 -1.100000e+00 -1.709672e-03 -1.200000e+00 -1.935095e-03 -1.000000e-01 -5.194238e-04 -2.000000e-01 -7.600636e-04 -3.000000e-01 -9.512784e-04 -4.000000e-01 -1.142757e-03 -5.000000e-01 -1.340243e-03 -6.000000e-01 -1.544364e-03 -7.000000e-01 -1.754797e-03 -8.000000e-01 -1.971044e-03 -9.000000e-01 -2.192733e-03 -1.000000e+00 -2.419979e-03 -1.100000e+00 -2.654004e-03 -1.200000e+00 -2.897987e-03 -1.000000e-01 -9.562489e-04 -2.000000e-01 -1.455355e-03 -3.000000e-01 -1.744063e-03 -4.000000e-01 -1.987644e-03 -5.000000e-01 -2.222236e-03 -6.000000e-01 -2.455640e-03 -7.000000e-01 -2.690214e-03 -8.000000e-01 -2.926825e-03 -9.000000e-01 -3.165887e-03 -1.000000e+00 -3.407960e-03 -1.100000e+00 -3.654511e-03 -1.200000e+00 -3.908929e-03 -1.000000e-01 -1.341128e-03 -2.000000e-01 -2.154747e-03 -3.000000e-01 -2.599280e-03 -4.000000e-01 -2.902583e-03 -5.000000e-01 -3.170113e-03 -6.000000e-01 -3.426478e-03 -7.000000e-01 -3.678859e-03 -8.000000e-01 -3.930023e-03 -9.000000e-01 -4.181290e-03 -1.000000e+00 -4.433629e-03 -1.100000e+00 -4.688595e-03 -1.200000e+00 -4.949502e-03 -1.000000e-01 -1.664970e-03 -2.000000e-01 -2.785405e-03 -3.000000e-01 -3.451758e-03 -4.000000e-01 -3.844752e-03 -5.000000e-01 -4.150946e-03 -6.000000e-01 -4.429975e-03 -7.000000e-01 -4.698220e-03 -8.000000e-01 -4.961568e-03 -9.000000e-01 -5.222662e-03 -1.000000e+00 -5.483046e-03 -1.100000e+00 -5.744386e-03 -1.200000e+00 -6.009802e-03 -1.000000e-01 -1.938760e-03 -2.000000e-01 -3.337856e-03 -3.000000e-01 -4.256637e-03 -4.000000e-01 -4.786747e-03 -5.000000e-01 -5.146027e-03 -6.000000e-01 -5.451250e-03 -7.000000e-01 -5.735757e-03 -8.000000e-01 -6.010646e-03 -9.000000e-01 -6.280573e-03 -1.000000e+00 -6.547948e-03 -1.100000e+00 -6.814680e-03 -1.200000e+00 -7.083683e-03 -1.000000e-01 -2.173665e-03 -2.000000e-01 -3.822095e-03 -3.000000e-01 -4.990244e-03 -4.000000e-01 -5.705186e-03 -5.000000e-01 -6.141868e-03 -6.000000e-01 -6.480497e-03 -7.000000e-01 -6.783417e-03 -8.000000e-01 -7.070317e-03 -9.000000e-01 -7.348917e-03 -1.000000e+00 -7.622903e-03 -1.100000e+00 -7.894638e-03 -1.200000e+00 -8.166914e-03 -1.000000e-01 -2.378548e-03 -2.000000e-01 -4.250253e-03 -3.000000e-01 -5.650580e-03 -4.000000e-01 -6.578938e-03 -5.000000e-01 -7.126642e-03 -6.000000e-01 -7.510241e-03 -7.000000e-01 -7.835410e-03 -8.000000e-01 -8.135670e-03 -9.000000e-01 -8.423364e-03 -1.000000e+00 -8.704022e-03 -1.100000e+00 -8.980731e-03 -1.200000e+00 -9.256316e-03 -1.000000e-01 -2.560138e-03 -2.000000e-01 -4.632971e-03 -3.000000e-01 -6.246172e-03 -4.000000e-01 -7.393244e-03 -5.000000e-01 -8.088609e-03 -6.000000e-01 -8.533970e-03 -7.000000e-01 -8.887112e-03 -8.000000e-01 -9.202895e-03 -9.000000e-01 -9.500567e-03 -1.000000e+00 -9.788269e-03 -1.100000e+00 -1.007016e-02 -1.200000e+00 -1.034929e-02 -1.000000e-01 -8.629794e-07 -2.000000e-01 -1.437930e-06 -3.000000e-01 -2.300608e-06 -4.000000e-01 -3.637471e-06 -5.000000e-01 -5.705018e-06 -6.000000e-01 -8.884438e-06 -7.000000e-01 -1.373560e-05 -8.000000e-01 -2.106281e-05 -9.000000e-01 -3.199080e-05 -1.000000e+00 -4.804917e-05 -1.100000e+00 -7.126823e-05 -1.200000e+00 -1.043002e-04 -1.000000e-01 -4.732657e-06 -2.000000e-01 -7.757181e-06 -3.000000e-01 -1.212018e-05 -4.000000e-01 -1.863745e-05 -5.000000e-01 -2.826956e-05 -6.000000e-01 -4.225032e-05 -7.000000e-01 -6.208588e-05 -8.000000e-01 -8.949807e-05 -9.000000e-01 -1.263297e-04 -1.000000e+00 -1.744615e-04 -1.100000e+00 -2.358135e-04 -1.200000e+00 -3.125013e-04 -1.000000e-01 -2.255904e-05 -2.000000e-01 -3.642696e-05 -3.000000e-01 -5.416710e-05 -4.000000e-01 -7.824342e-05 -5.000000e-01 -1.102207e-04 -6.000000e-01 -1.515248e-04 -7.000000e-01 -2.033903e-04 -8.000000e-01 -2.667965e-04 -9.000000e-01 -3.424593e-04 -1.000000e+00 -4.309186e-04 -1.100000e+00 -5.327554e-04 -1.200000e+00 -6.489584e-04 -1.000000e-01 -7.678287e-05 -2.000000e-01 -1.256656e-04 -3.000000e-01 -1.727366e-04 -4.000000e-01 -2.280465e-04 -5.000000e-01 -2.932324e-04 -6.000000e-01 -3.688630e-04 -7.000000e-01 -4.551884e-04 -8.000000e-01 -5.522806e-04 -9.000000e-01 -6.601125e-04 -1.000000e+00 -7.786624e-04 -1.100000e+00 -9.081100e-04 -1.200000e+00 -1.049180e-03 -1.000000e-01 -1.631395e-04 -2.000000e-01 -2.827890e-04 -3.000000e-01 -3.741051e-04 -4.000000e-01 -4.625660e-04 -5.000000e-01 -5.574913e-04 -6.000000e-01 -6.606211e-04 -7.000000e-01 -7.723871e-04 -8.000000e-01 -8.929170e-04 -9.000000e-01 -1.022240e-03 -1.000000e+00 -1.160381e-03 -1.100000e+00 -1.307498e-03 -1.200000e+00 -1.464183e-03 -1.000000e-01 -2.502993e-04 -2.000000e-01 -4.514634e-04 -3.000000e-01 -6.071156e-04 -4.000000e-01 -7.340122e-04 -5.000000e-01 -8.549879e-04 -6.000000e-01 -9.795637e-04 -7.000000e-01 -1.110226e-03 -8.000000e-01 -1.247818e-03 -9.000000e-01 -1.392722e-03 -1.000000e+00 -1.545153e-03 -1.100000e+00 -1.705311e-03 -1.200000e+00 -1.873628e-03 -1.000000e-01 -3.231811e-04 -2.000000e-01 -5.961609e-04 -3.000000e-01 -8.200290e-04 -4.000000e-01 -1.000078e-03 -5.000000e-01 -1.153069e-03 -6.000000e-01 -1.298920e-03 -7.000000e-01 -1.446556e-03 -8.000000e-01 -1.598860e-03 -9.000000e-01 -1.756979e-03 -1.000000e+00 -1.921481e-03 -1.100000e+00 -2.092714e-03 -1.200000e+00 -2.271030e-03 -1.000000e-01 -3.811693e-04 -2.000000e-01 -7.135623e-04 -3.000000e-01 -9.976578e-04 -4.000000e-01 -1.235164e-03 -5.000000e-01 -1.432437e-03 -6.000000e-01 -1.605727e-03 -7.000000e-01 -1.771951e-03 -8.000000e-01 -1.938957e-03 -9.000000e-01 -2.109676e-03 -1.000000e+00 -2.285399e-03 -1.100000e+00 -2.466806e-03 -1.200000e+00 -2.654339e-03 -1.000000e-01 -4.272140e-04 -2.000000e-01 -8.082901e-04 -3.000000e-01 -1.143406e-03 -4.000000e-01 -1.433231e-03 -5.000000e-01 -1.679914e-03 -6.000000e-01 -1.890643e-03 -7.000000e-01 -2.080750e-03 -8.000000e-01 -2.264358e-03 -9.000000e-01 -2.448191e-03 -1.000000e+00 -2.635048e-03 -1.100000e+00 -2.826270e-03 -1.200000e+00 -3.022596e-03 -1.000000e-01 -4.640584e-04 -2.000000e-01 -8.850848e-04 -3.000000e-01 -1.263052e-03 -4.000000e-01 -1.598194e-03 -5.000000e-01 -1.891315e-03 -6.000000e-01 -2.144994e-03 -7.000000e-01 -2.367049e-03 -8.000000e-01 -2.571586e-03 -9.000000e-01 -2.770304e-03 -1.000000e+00 -2.968930e-03 -1.100000e+00 -3.170068e-03 -1.200000e+00 -3.375049e-03 -1.000000e-01 -4.937235e-04 -2.000000e-01 -9.476065e-04 -3.000000e-01 -1.361474e-03 -4.000000e-01 -1.735321e-03 -5.000000e-01 -2.069425e-03 -6.000000e-01 -2.364734e-03 -7.000000e-01 -2.624273e-03 -8.000000e-01 -2.856267e-03 -9.000000e-01 -3.073413e-03 -1.000000e+00 -3.285397e-03 -1.100000e+00 -3.497113e-03 -1.200000e+00 -3.710954e-03 -1.000000e-01 -5.176715e-04 -2.000000e-01 -9.985959e-04 -3.000000e-01 -1.442495e-03 -4.000000e-01 -1.849212e-03 -5.000000e-01 -2.218762e-03 -6.000000e-01 -2.551473e-03 -7.000000e-01 -2.848469e-03 -8.000000e-01 -3.113228e-03 -9.000000e-01 -3.354131e-03 -1.000000e+00 -3.582419e-03 -1.100000e+00 -3.806142e-03 -1.200000e+00 -4.029508e-03 tmpk8ny_4pz/tests/bsim4/pmos/reference/dcSweep_lw1_vb2.standard0000644000175000017500000002751213546075722024733 0ustar carstencarstenV(d) I(d) -1.000000e-01 -6.504608e-07 -2.000000e-01 -1.204893e-06 -3.000000e-01 -2.144027e-06 -4.000000e-01 -3.745793e-06 -5.000000e-01 -6.449776e-06 -6.000000e-01 -1.095571e-05 -7.000000e-01 -1.834946e-05 -8.000000e-01 -3.025027e-05 -9.000000e-01 -4.894713e-05 -1.000000e+00 -7.748064e-05 -1.100000e+00 -1.196542e-04 -1.200000e+00 -1.800360e-04 -1.000000e-01 -6.285030e-06 -2.000000e-01 -1.115544e-05 -3.000000e-01 -1.890285e-05 -4.000000e-01 -3.124528e-05 -5.000000e-01 -5.040224e-05 -6.000000e-01 -7.911186e-05 -7.000000e-01 -1.204166e-04 -8.000000e-01 -1.773095e-04 -9.000000e-01 -2.523861e-04 -1.000000e+00 -3.477018e-04 -1.100000e+00 -4.649952e-04 -1.200000e+00 -6.063232e-04 -1.000000e-01 -4.677418e-05 -2.000000e-01 -7.780661e-05 -3.000000e-01 -1.194277e-04 -4.000000e-01 -1.754794e-04 -5.000000e-01 -2.481853e-04 -6.000000e-01 -3.389287e-04 -7.000000e-01 -4.482956e-04 -8.000000e-01 -5.762012e-04 -9.000000e-01 -7.221436e-04 -1.000000e+00 -8.856155e-04 -1.100000e+00 -1.066720e-03 -1.200000e+00 -1.267002e-03 -1.000000e-01 -1.968468e-04 -2.000000e-01 -3.102625e-04 -3.000000e-01 -4.198095e-04 -4.000000e-01 -5.428732e-04 -5.000000e-01 -6.811746e-04 -6.000000e-01 -8.345211e-04 -7.000000e-01 -1.002249e-03 -8.000000e-01 -1.183559e-03 -9.000000e-01 -1.377701e-03 -1.000000e+00 -1.584254e-03 -1.100000e+00 -1.803655e-03 -1.200000e+00 -2.038038e-03 -1.000000e-01 -4.302212e-04 -2.000000e-01 -7.035451e-04 -3.000000e-01 -8.986121e-04 -4.000000e-01 -1.082392e-03 -5.000000e-01 -1.271595e-03 -6.000000e-01 -1.469501e-03 -7.000000e-01 -1.676815e-03 -8.000000e-01 -1.893542e-03 -9.000000e-01 -2.119481e-03 -1.000000e+00 -2.354564e-03 -1.100000e+00 -2.599407e-03 -1.200000e+00 -2.856249e-03 -1.000000e-01 -6.596603e-04 -2.000000e-01 -1.127826e-03 -3.000000e-01 -1.448273e-03 -4.000000e-01 -1.698904e-03 -5.000000e-01 -1.933434e-03 -6.000000e-01 -2.167680e-03 -7.000000e-01 -2.406173e-03 -8.000000e-01 -2.650481e-03 -9.000000e-01 -2.901186e-03 -1.000000e+00 -3.158587e-03 -1.100000e+00 -3.423342e-03 -1.200000e+00 -3.697471e-03 -1.000000e-01 -8.596131e-04 -2.000000e-01 -1.512815e-03 -3.000000e-01 -1.989050e-03 -4.000000e-01 -2.335082e-03 -5.000000e-01 -2.622819e-03 -6.000000e-01 -2.893690e-03 -7.000000e-01 -3.161280e-03 -8.000000e-01 -3.430340e-03 -9.000000e-01 -3.702821e-03 -1.000000e+00 -3.979654e-03 -1.100000e+00 -4.261648e-03 -1.200000e+00 -4.550535e-03 -1.000000e-01 -1.030756e-03 -2.000000e-01 -1.849513e-03 -3.000000e-01 -2.481855e-03 -4.000000e-01 -2.953123e-03 -5.000000e-01 -3.314284e-03 -6.000000e-01 -3.628511e-03 -7.000000e-01 -3.926796e-03 -8.000000e-01 -4.220289e-03 -9.000000e-01 -4.513457e-03 -1.000000e+00 -4.808364e-03 -1.100000e+00 -5.106244e-03 -1.200000e+00 -5.408666e-03 -1.000000e-01 -1.177673e-03 -2.000000e-01 -2.142871e-03 -3.000000e-01 -2.919248e-03 -4.000000e-01 -3.525596e-03 -5.000000e-01 -3.986326e-03 -6.000000e-01 -4.357848e-03 -7.000000e-01 -4.691989e-03 -8.000000e-01 -5.011608e-03 -9.000000e-01 -5.325727e-03 -1.000000e+00 -5.638359e-03 -1.100000e+00 -5.951588e-03 -1.200000e+00 -6.267089e-03 -1.000000e-01 -1.304522e-03 -2.000000e-01 -2.399066e-03 -3.000000e-01 -3.305539e-03 -4.000000e-01 -4.041125e-03 -5.000000e-01 -4.618519e-03 -6.000000e-01 -5.067917e-03 -7.000000e-01 -5.447641e-03 -8.000000e-01 -5.797367e-03 -9.000000e-01 -6.134026e-03 -1.000000e+00 -6.464916e-03 -1.100000e+00 -6.793592e-03 -1.200000e+00 -7.122228e-03 -1.000000e-01 -1.414653e-03 -2.000000e-01 -2.623589e-03 -3.000000e-01 -3.646982e-03 -4.000000e-01 -4.501152e-03 -5.000000e-01 -5.196703e-03 -6.000000e-01 -5.744043e-03 -7.000000e-01 -6.184489e-03 -8.000000e-01 -6.571311e-03 -9.000000e-01 -6.933661e-03 -1.000000e+00 -7.284269e-03 -1.100000e+00 -7.629083e-03 -1.200000e+00 -7.971301e-03 -1.000000e-01 -1.510747e-03 -2.000000e-01 -2.821080e-03 -3.000000e-01 -3.949494e-03 -4.000000e-01 -4.911391e-03 -5.000000e-01 -5.717641e-03 -6.000000e-01 -6.372483e-03 -7.000000e-01 -6.892217e-03 -8.000000e-01 -7.327033e-03 -9.000000e-01 -7.720263e-03 -1.000000e+00 -8.093144e-03 -1.100000e+00 -8.455434e-03 -1.200000e+00 -8.812057e-03 -1.000000e-01 -1.860338e-07 -2.000000e-01 -4.015024e-07 -3.000000e-01 -8.267465e-07 -4.000000e-01 -1.652860e-06 -5.000000e-01 -3.214666e-06 -6.000000e-01 -6.085980e-06 -7.000000e-01 -1.122693e-05 -8.000000e-01 -2.020265e-05 -9.000000e-01 -3.546687e-05 -1.000000e+00 -6.064302e-05 -1.100000e+00 -1.006761e-04 -1.200000e+00 -1.617738e-04 -1.000000e-01 -3.800043e-06 -2.000000e-01 -7.415283e-06 -3.000000e-01 -1.371848e-05 -4.000000e-01 -2.458248e-05 -5.000000e-01 -4.277168e-05 -6.000000e-01 -7.205865e-05 -7.000000e-01 -1.169589e-04 -8.000000e-01 -1.820364e-04 -9.000000e-01 -2.710513e-04 -1.000000e+00 -3.864827e-04 -1.100000e+00 -5.298437e-04 -1.200000e+00 -7.027916e-04 -1.000000e-01 -4.769044e-05 -2.000000e-01 -8.346255e-05 -3.000000e-01 -1.353244e-04 -4.000000e-01 -2.081038e-04 -5.000000e-01 -3.046932e-04 -6.000000e-01 -4.261599e-04 -7.000000e-01 -5.719124e-04 -8.000000e-01 -7.402333e-04 -9.000000e-01 -9.290099e-04 -1.000000e+00 -1.136582e-03 -1.100000e+00 -1.362720e-03 -1.200000e+00 -1.609722e-03 -1.000000e-01 -2.951141e-04 -2.000000e-01 -4.488619e-04 -3.000000e-01 -6.071785e-04 -4.000000e-01 -7.829845e-04 -5.000000e-01 -9.760055e-04 -6.000000e-01 -1.184475e-03 -7.000000e-01 -1.406481e-03 -8.000000e-01 -1.640323e-03 -9.000000e-01 -1.884764e-03 -1.000000e+00 -2.139497e-03 -1.100000e+00 -2.405979e-03 -1.200000e+00 -2.688578e-03 -1.000000e-01 -7.731792e-04 -2.000000e-01 -1.150013e-03 -3.000000e-01 -1.413895e-03 -4.000000e-01 -1.664381e-03 -5.000000e-01 -1.916751e-03 -6.000000e-01 -2.174029e-03 -7.000000e-01 -2.436810e-03 -8.000000e-01 -2.705048e-03 -9.000000e-01 -2.978681e-03 -1.000000e+00 -3.258283e-03 -1.100000e+00 -3.546108e-03 -1.200000e+00 -3.847514e-03 -1.000000e-01 -1.275854e-03 -2.000000e-01 -1.979238e-03 -3.000000e-01 -2.374282e-03 -4.000000e-01 -2.687719e-03 -5.000000e-01 -2.982114e-03 -6.000000e-01 -3.271519e-03 -7.000000e-01 -3.560340e-03 -8.000000e-01 -3.850312e-03 -9.000000e-01 -4.142331e-03 -1.000000e+00 -4.437495e-03 -1.100000e+00 -4.738379e-03 -1.200000e+00 -5.050734e-03 -1.000000e-01 -1.732442e-03 -2.000000e-01 -2.797507e-03 -3.000000e-01 -3.386085e-03 -4.000000e-01 -3.774639e-03 -5.000000e-01 -4.108876e-03 -6.000000e-01 -4.425139e-03 -7.000000e-01 -4.734281e-03 -8.000000e-01 -5.040546e-03 -9.000000e-01 -5.346002e-03 -1.000000e+00 -5.652277e-03 -1.100000e+00 -5.962108e-03 -1.200000e+00 -6.281310e-03 -1.000000e-01 -2.140553e-03 -2.000000e-01 -3.557268e-03 -3.000000e-01 -4.395593e-03 -4.000000e-01 -4.887683e-03 -5.000000e-01 -5.267349e-03 -6.000000e-01 -5.610118e-03 -7.000000e-01 -5.937571e-03 -8.000000e-01 -6.257689e-03 -9.000000e-01 -6.574142e-03 -1.000000e+00 -6.889244e-03 -1.100000e+00 -7.205885e-03 -1.200000e+00 -7.529756e-03 -1.000000e-01 -2.508028e-03 -2.000000e-01 -4.254145e-03 -3.000000e-01 -5.369807e-03 -4.000000e-01 -6.004049e-03 -5.000000e-01 -6.440574e-03 -6.000000e-01 -6.812397e-03 -7.000000e-01 -7.158115e-03 -8.000000e-01 -7.491197e-03 -9.000000e-01 -7.817503e-03 -1.000000e+00 -8.140281e-03 -1.100000e+00 -8.462656e-03 -1.200000e+00 -8.790112e-03 -1.000000e-01 -2.842834e-03 -2.000000e-01 -4.895899e-03 -3.000000e-01 -6.291831e-03 -4.000000e-01 -7.107234e-03 -5.000000e-01 -7.617378e-03 -6.000000e-01 -8.023034e-03 -7.000000e-01 -8.388231e-03 -8.000000e-01 -8.734300e-03 -9.000000e-01 -9.070059e-03 -1.000000e+00 -9.400003e-03 -1.100000e+00 -9.727635e-03 -1.200000e+00 -1.005824e-02 -1.000000e-01 -3.151688e-03 -2.000000e-01 -5.491916e-03 -3.000000e-01 -7.158472e-03 -4.000000e-01 -8.184565e-03 -5.000000e-01 -8.789544e-03 -6.000000e-01 -9.235792e-03 -7.000000e-01 -9.622592e-03 -8.000000e-01 -9.982252e-03 -9.000000e-01 -1.032752e-02 -1.000000e+00 -1.066449e-02 -1.100000e+00 -1.099725e-02 -1.200000e+00 -1.133093e-02 -1.000000e-01 -3.440059e-03 -2.000000e-01 -6.050726e-03 -3.000000e-01 -7.974523e-03 -4.000000e-01 -9.227110e-03 -5.000000e-01 -9.950513e-03 -6.000000e-01 -1.044592e-02 -7.000000e-01 -1.085715e-02 -8.000000e-01 -1.123139e-02 -9.000000e-01 -1.158649e-02 -1.000000e+00 -1.193060e-02 -1.100000e+00 -1.226855e-02 -1.200000e+00 -1.260545e-02 -1.000000e-01 -1.905942e-06 -2.000000e-01 -3.121983e-06 -3.000000e-01 -4.907343e-06 -4.000000e-01 -7.622389e-06 -5.000000e-01 -1.174332e-05 -6.000000e-01 -1.795529e-05 -7.000000e-01 -2.722516e-05 -8.000000e-01 -4.087422e-05 -9.000000e-01 -6.064440e-05 -1.000000e+00 -8.875799e-05 -1.100000e+00 -1.279914e-04 -1.200000e+00 -1.818105e-04 -1.000000e-01 -9.488380e-06 -2.000000e-01 -1.535598e-05 -3.000000e-01 -2.355275e-05 -4.000000e-01 -3.546012e-05 -5.000000e-01 -5.252561e-05 -6.000000e-01 -7.647319e-05 -7.000000e-01 -1.092535e-04 -8.000000e-01 -1.529319e-04 -9.000000e-01 -2.095622e-04 -1.000000e+00 -2.811211e-04 -1.100000e+00 -3.695940e-04 -1.200000e+00 -4.772881e-04 -1.000000e-01 -4.003316e-05 -2.000000e-01 -6.426861e-05 -3.000000e-01 -9.312513e-05 -4.000000e-01 -1.307199e-04 -5.000000e-01 -1.788725e-04 -6.000000e-01 -2.390500e-04 -7.000000e-01 -3.124214e-04 -8.000000e-01 -3.998383e-04 -9.000000e-01 -5.018657e-04 -1.000000e+00 -6.189168e-04 -1.100000e+00 -7.515481e-04 -1.200000e+00 -9.009610e-04 -1.000000e-01 -1.150663e-04 -2.000000e-01 -1.913694e-04 -3.000000e-01 -2.586736e-04 -4.000000e-01 -3.342465e-04 -5.000000e-01 -4.210548e-04 -6.000000e-01 -5.198397e-04 -7.000000e-01 -6.308583e-04 -8.000000e-01 -7.541590e-04 -9.000000e-01 -8.896903e-04 -1.000000e+00 -1.037424e-03 -1.100000e+00 -1.197601e-03 -1.200000e+00 -1.371193e-03 -1.000000e-01 -2.156999e-04 -2.000000e-01 -3.798430e-04 -3.000000e-01 -5.044183e-04 -4.000000e-01 -6.185661e-04 -5.000000e-01 -7.378355e-04 -6.000000e-01 -8.657059e-04 -7.000000e-01 -1.003086e-03 -8.000000e-01 -1.150297e-03 -9.000000e-01 -1.307475e-03 -1.000000e+00 -1.474711e-03 -1.100000e+00 -1.652243e-03 -1.200000e+00 -1.840856e-03 -1.000000e-01 -3.095907e-04 -2.000000e-01 -5.634153e-04 -3.000000e-01 -7.639308e-04 -4.000000e-01 -9.257794e-04 -5.000000e-01 -1.075163e-03 -6.000000e-01 -1.226439e-03 -7.000000e-01 -1.383837e-03 -8.000000e-01 -1.548806e-03 -9.000000e-01 -1.721998e-03 -1.000000e+00 -1.903776e-03 -1.100000e+00 -2.094438e-03 -1.200000e+00 -2.294557e-03 -1.000000e-01 -3.859968e-04 -2.000000e-01 -7.158238e-04 -3.000000e-01 -9.902254e-04 -4.000000e-01 -1.213636e-03 -5.000000e-01 -1.401872e-03 -6.000000e-01 -1.577894e-03 -7.000000e-01 -1.754155e-03 -8.000000e-01 -1.935014e-03 -9.000000e-01 -2.122212e-03 -1.000000e+00 -2.316602e-03 -1.100000e+00 -2.518687e-03 -1.200000e+00 -2.728949e-03 -1.000000e-01 -4.462926e-04 -2.000000e-01 -8.381970e-04 -3.000000e-01 -1.176122e-03 -4.000000e-01 -1.461629e-03 -5.000000e-01 -1.700534e-03 -6.000000e-01 -1.909043e-03 -7.000000e-01 -2.106719e-03 -8.000000e-01 -2.303937e-03 -9.000000e-01 -2.504797e-03 -1.000000e+00 -2.711116e-03 -1.100000e+00 -2.923842e-03 -1.200000e+00 -3.143578e-03 -1.000000e-01 -4.940040e-04 -2.000000e-01 -9.364929e-04 -3.000000e-01 -1.327724e-03 -4.000000e-01 -1.668423e-03 -5.000000e-01 -1.960704e-03 -6.000000e-01 -2.211532e-03 -7.000000e-01 -2.436799e-03 -8.000000e-01 -2.652817e-03 -9.000000e-01 -2.868120e-03 -1.000000e+00 -3.086416e-03 -1.100000e+00 -3.309489e-03 -1.200000e+00 -3.538323e-03 -1.000000e-01 -5.320450e-04 -2.000000e-01 -1.015879e-03 -3.000000e-01 -1.451637e-03 -4.000000e-01 -1.839697e-03 -5.000000e-01 -2.180973e-03 -6.000000e-01 -2.478100e-03 -7.000000e-01 -2.738990e-03 -8.000000e-01 -2.978637e-03 -9.000000e-01 -3.210474e-03 -1.000000e+00 -3.441537e-03 -1.100000e+00 -3.675131e-03 -1.200000e+00 -3.912959e-03 -1.000000e-01 -5.625153e-04 -2.000000e-01 -1.080202e-03 -3.000000e-01 -1.553093e-03 -4.000000e-01 -1.981366e-03 -5.000000e-01 -2.365458e-03 -6.000000e-01 -2.706464e-03 -7.000000e-01 -3.007572e-03 -8.000000e-01 -3.277379e-03 -9.000000e-01 -3.529579e-03 -1.000000e+00 -3.775192e-03 -1.100000e+00 -4.020066e-03 -1.200000e+00 -4.267137e-03 -1.000000e-01 -5.869329e-04 -2.000000e-01 -1.132326e-03 -3.000000e-01 -1.636125e-03 -4.000000e-01 -2.098375e-03 -5.000000e-01 -2.519272e-03 -6.000000e-01 -2.899311e-03 -7.000000e-01 -3.239799e-03 -8.000000e-01 -3.544502e-03 -9.000000e-01 -3.822389e-03 -1.000000e+00 -4.085655e-03 -1.100000e+00 -4.343352e-03 -1.200000e+00 -4.600393e-03 tmpk8ny_4pz/tests/bsim4/pmos/reference/acFreq_capmod.standard0000644000175000017500000000712213546075722024524 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.28436256539797e-14 8.84700948362642e-15 3.82639518406819e-15 1258.925 1.28436335548057e-14 8.84701232241686e-15 3.8263962076067e-15 1584.893 1.28436266561873e-14 8.84701037252411e-15 3.82639535866341e-15 1995.262 1.28436249594884e-14 8.84700733800495e-15 3.82639604228328e-15 2511.886 1.28436264847859e-14 8.84700873366342e-15 3.82639596861982e-15 3162.278 1.2843626013902e-14 8.84700887478394e-15 3.82639470281529e-15 3981.072 1.28436235911451e-14 8.84700781683537e-15 3.82639502533989e-15 5011.872 1.28436270161877e-14 8.84701159179101e-15 3.82639594523694e-15 6309.573 1.28436263002722e-14 8.84701053850413e-15 3.82639673316301e-15 7943.282 1.28436264369197e-14 8.84700960691453e-15 3.82639541088248e-15 10000 1.28436256539797e-14 8.84700948362642e-15 3.82639518406819e-15 12589.25 1.28436335548057e-14 8.84701232241686e-15 3.8263962076067e-15 15848.93 1.28436266561873e-14 8.84701037252411e-15 3.82639535866341e-15 19952.62 1.28436249594884e-14 8.84700733800495e-15 3.82639604228328e-15 25118.86 1.28436264847859e-14 8.84700873366342e-15 3.82639596861982e-15 31622.78 1.2843626013902e-14 8.84700887478394e-15 3.82639470281529e-15 39810.72 1.28436235911451e-14 8.84700781683537e-15 3.82639502533989e-15 50118.72 1.28436270161877e-14 8.84701159179101e-15 3.82639594523694e-15 63095.73 1.28436263002722e-14 8.84701053850413e-15 3.82639673316301e-15 79432.82 1.28436264369197e-14 8.84700960691453e-15 3.82639541088248e-15 100000 1.28436256539797e-14 8.84700948362642e-15 3.82639518406819e-15 125892.5 1.28436335548057e-14 8.84701232241686e-15 3.82639620760669e-15 158489.3 1.28436266561873e-14 8.84701037252411e-15 3.82639535866341e-15 199526.2 1.28436249594884e-14 8.84700733800495e-15 3.82639604228328e-15 251188.6 1.28436264847859e-14 8.84700873366342e-15 3.82639596861982e-15 316227.8 1.2843626013902e-14 8.84700887478394e-15 3.82639470281529e-15 398107.2 1.28436235911451e-14 8.84700781683537e-15 3.82639502533989e-15 501187.2 1.28436270161877e-14 8.847011591791e-15 3.82639594523694e-15 630957.3 1.28436263002722e-14 8.84701053850413e-15 3.82639673316301e-15 794328.2 1.28436264369197e-14 8.84700960691453e-15 3.82639541088248e-15 1000000 1.28436256539797e-14 8.84700948362642e-15 3.82639518406819e-15 1258925 1.28436335548057e-14 8.84701232241686e-15 3.82639620760669e-15 1584893 1.28436266561873e-14 8.84701037252411e-15 3.82639535866341e-15 1995262 1.28436249594884e-14 8.84700733800495e-15 3.82639604228328e-15 2511886 1.28436264847859e-14 8.84700873366342e-15 3.82639596861982e-15 3162278 1.2843626013902e-14 8.84700887478394e-15 3.82639470281529e-15 3981072 1.28436235911451e-14 8.84700781683537e-15 3.8263950253399e-15 5011872 1.28436270161877e-14 8.847011591791e-15 3.82639594523694e-15 6309573 1.28436263002722e-14 8.84701053850413e-15 3.82639673316301e-15 7943282 1.28436264369197e-14 8.84700960691453e-15 3.82639541088248e-15 10000000 1.28436256539797e-14 8.84700948362642e-15 3.82639518406819e-15 12589250 1.28436335548057e-14 8.84701232241686e-15 3.82639620760669e-15 15848930 1.28436266561873e-14 8.84701037252411e-15 3.82639535866341e-15 19952620 1.28436249594884e-14 8.84700733800495e-15 3.82639604228328e-15 25118860 1.28436264847859e-14 8.84700873366342e-15 3.82639596861982e-15 31622780 1.2843626013902e-14 8.84700887478394e-15 3.82639470281529e-15 39810720 1.28436235911451e-14 8.84700781683537e-15 3.82639502533989e-15 50118720 1.28436270161877e-14 8.847011591791e-15 3.82639594523694e-15 63095730 1.28436263002722e-14 8.84701053850413e-15 3.82639421072697e-15 79432820 1.28436244332776e-14 8.84700960691453e-15 3.82639541088248e-15 100000000 1.28436240624303e-14 8.84700789207699e-15 3.82639518406819e-15 tmpk8ny_4pz/tests/bsim4/pmos/reference/dcSweep_sca.standard0000644000175000017500000002751213546075722024225 0ustar carstencarstenV(d) I(d) -1.000000e-01 -3.541335e-07 -2.000000e-01 -6.742480e-07 -3.000000e-01 -1.232459e-06 -4.000000e-01 -2.209791e-06 -5.000000e-01 -3.900076e-06 -6.000000e-01 -6.781883e-06 -7.000000e-01 -1.161965e-05 -8.000000e-01 -1.960035e-05 -9.000000e-01 -3.249631e-05 -1.000000e+00 -5.282650e-05 -1.100000e+00 -8.398240e-05 -1.200000e+00 -1.303190e-04 -1.000000e-01 -3.858549e-06 -2.000000e-01 -6.996373e-06 -3.000000e-01 -1.211623e-05 -4.000000e-01 -2.048810e-05 -5.000000e-01 -3.387613e-05 -6.000000e-01 -5.463325e-05 -7.000000e-01 -8.561888e-05 -8.000000e-01 -1.299431e-04 -9.000000e-01 -1.906164e-04 -1.000000e+00 -2.702893e-04 -1.100000e+00 -3.712899e-04 -1.200000e+00 -4.960773e-04 -1.000000e-01 -3.209008e-05 -2.000000e-01 -5.455120e-05 -3.000000e-01 -8.615950e-05 -4.000000e-01 -1.304125e-04 -5.000000e-01 -1.898944e-04 -6.000000e-01 -2.665336e-04 -7.000000e-01 -3.614836e-04 -8.000000e-01 -4.751461e-04 -9.000000e-01 -6.073720e-04 -1.000000e+00 -7.578554e-04 -1.100000e+00 -9.267393e-04 -1.200000e+00 -1.115433e-03 -1.000000e-01 -1.563742e-04 -2.000000e-01 -2.479573e-04 -3.000000e-01 -3.424664e-04 -4.000000e-01 -4.518327e-04 -5.000000e-01 -5.772407e-04 -6.000000e-01 -7.184719e-04 -7.000000e-01 -8.748805e-04 -8.000000e-01 -1.045668e-03 -9.000000e-01 -1.230067e-03 -1.000000e+00 -1.427614e-03 -1.100000e+00 -1.638664e-03 -1.200000e+00 -1.865186e-03 -1.000000e-01 -3.776462e-04 -2.000000e-01 -6.148458e-04 -3.000000e-01 -7.902944e-04 -4.000000e-01 -9.611291e-04 -5.000000e-01 -1.139648e-03 -6.000000e-01 -1.328107e-03 -7.000000e-01 -1.526868e-03 -8.000000e-01 -1.735778e-03 -9.000000e-01 -1.954544e-03 -1.000000e+00 -2.183037e-03 -1.100000e+00 -2.421803e-03 -1.200000e+00 -2.672960e-03 -1.000000e-01 -6.062105e-04 -2.000000e-01 -1.033623e-03 -3.000000e-01 -1.326937e-03 -4.000000e-01 -1.562477e-03 -5.000000e-01 -1.786875e-03 -6.000000e-01 -2.012984e-03 -7.000000e-01 -2.244449e-03 -8.000000e-01 -2.482498e-03 -9.000000e-01 -2.727549e-03 -1.000000e+00 -2.979810e-03 -1.100000e+00 -3.239870e-03 -1.200000e+00 -3.509654e-03 -1.000000e-01 -8.083546e-04 -2.000000e-01 -1.420903e-03 -3.000000e-01 -1.866442e-03 -4.000000e-01 -2.193074e-03 -5.000000e-01 -2.469586e-03 -6.000000e-01 -2.732637e-03 -7.000000e-01 -2.993965e-03 -8.000000e-01 -3.257677e-03 -9.000000e-01 -3.525448e-03 -1.000000e+00 -3.798071e-03 -1.100000e+00 -4.076268e-03 -1.200000e+00 -4.361689e-03 -1.000000e-01 -9.823244e-04 -2.000000e-01 -1.761767e-03 -3.000000e-01 -2.363024e-03 -4.000000e-01 -2.811792e-03 -5.000000e-01 -3.159430e-03 -6.000000e-01 -3.465382e-03 -7.000000e-01 -3.757673e-03 -8.000000e-01 -4.046337e-03 -9.000000e-01 -4.335399e-03 -1.000000e+00 -4.626720e-03 -1.100000e+00 -4.921420e-03 -1.200000e+00 -5.220982e-03 -1.000000e-01 -1.132064e-03 -2.000000e-01 -2.059615e-03 -3.000000e-01 -2.805538e-03 -4.000000e-01 -3.388380e-03 -5.000000e-01 -3.833281e-03 -6.000000e-01 -4.195454e-03 -7.000000e-01 -4.523495e-03 -8.000000e-01 -4.838541e-03 -9.000000e-01 -5.148942e-03 -1.000000e+00 -5.458420e-03 -1.100000e+00 -5.768911e-03 -1.200000e+00 -6.081994e-03 -1.000000e-01 -1.261549e-03 -2.000000e-01 -2.320156e-03 -3.000000e-01 -3.197100e-03 -4.000000e-01 -3.909202e-03 -5.000000e-01 -4.469439e-03 -6.000000e-01 -4.908152e-03 -7.000000e-01 -5.281386e-03 -8.000000e-01 -5.626614e-03 -9.000000e-01 -5.959803e-03 -1.000000e+00 -6.287852e-03 -1.100000e+00 -6.614121e-03 -1.200000e+00 -6.940674e-03 -1.000000e-01 -1.374083e-03 -2.000000e-01 -2.548730e-03 -3.000000e-01 -3.543604e-03 -4.000000e-01 -4.374670e-03 -5.000000e-01 -5.052562e-03 -6.000000e-01 -5.588105e-03 -7.000000e-01 -6.021514e-03 -8.000000e-01 -6.403804e-03 -9.000000e-01 -6.762851e-03 -1.000000e+00 -7.110856e-03 -1.100000e+00 -7.453526e-03 -1.200000e+00 -7.793932e-03 -1.000000e-01 -1.472352e-03 -2.000000e-01 -2.749945e-03 -3.000000e-01 -3.850852e-03 -4.000000e-01 -4.790158e-03 -5.000000e-01 -5.578654e-03 -6.000000e-01 -6.220954e-03 -7.000000e-01 -6.733108e-03 -8.000000e-01 -7.163330e-03 -9.000000e-01 -7.553400e-03 -1.000000e+00 -7.923886e-03 -1.100000e+00 -8.284260e-03 -1.200000e+00 -8.639303e-03 -1.000000e-01 -7.820708e-08 -2.000000e-01 -1.759983e-07 -3.000000e-01 -3.783203e-07 -4.000000e-01 -7.898739e-07 -5.000000e-01 -1.602568e-06 -6.000000e-01 -3.156170e-06 -7.000000e-01 -6.033149e-06 -8.000000e-01 -1.120982e-05 -9.000000e-01 -2.029228e-05 -1.000000e+00 -3.584893e-05 -1.100000e+00 -6.179230e-05 -1.200000e+00 -1.036885e-04 -1.000000e-01 -1.945306e-06 -2.000000e-01 -3.936693e-06 -3.000000e-01 -7.522670e-06 -4.000000e-01 -1.388720e-05 -5.000000e-01 -2.490408e-05 -6.000000e-01 -4.340923e-05 -7.000000e-01 -7.331033e-05 -8.000000e-01 -1.193204e-04 -9.000000e-01 -1.862531e-04 -1.000000e+00 -2.782085e-04 -1.100000e+00 -3.982494e-04 -1.200000e+00 -5.489755e-04 -1.000000e-01 -2.841421e-05 -2.000000e-01 -5.139419e-05 -3.000000e-01 -8.687981e-05 -4.000000e-01 -1.399069e-04 -5.000000e-01 -2.146892e-04 -6.000000e-01 -3.139884e-04 -7.000000e-01 -4.386988e-04 -8.000000e-01 -5.880531e-04 -9.000000e-01 -7.603199e-04 -1.000000e+00 -9.537763e-04 -1.100000e+00 -1.167822e-03 -1.200000e+00 -1.404168e-03 -1.000000e-01 -2.173380e-04 -2.000000e-01 -3.396259e-04 -3.000000e-01 -4.759078e-04 -4.000000e-01 -6.333068e-04 -5.000000e-01 -8.108329e-04 -6.000000e-01 -1.006342e-03 -7.000000e-01 -1.217554e-03 -8.000000e-01 -1.442416e-03 -9.000000e-01 -1.679372e-03 -1.000000e+00 -1.927827e-03 -1.100000e+00 -2.188941e-03 -1.200000e+00 -2.466712e-03 -1.000000e-01 -6.699868e-04 -2.000000e-01 -9.944840e-04 -3.000000e-01 -1.238488e-03 -4.000000e-01 -1.477247e-03 -5.000000e-01 -1.721065e-03 -6.000000e-01 -1.971643e-03 -7.000000e-01 -2.229010e-03 -8.000000e-01 -2.492804e-03 -9.000000e-01 -2.762762e-03 -1.000000e+00 -3.039317e-03 -1.100000e+00 -3.324586e-03 -1.200000e+00 -3.623732e-03 -1.000000e-01 -1.182769e-03 -2.000000e-01 -1.821001e-03 -3.000000e-01 -2.188648e-03 -4.000000e-01 -2.491060e-03 -5.000000e-01 -2.779079e-03 -6.000000e-01 -3.064059e-03 -7.000000e-01 -3.349554e-03 -8.000000e-01 -3.636925e-03 -9.000000e-01 -3.926880e-03 -1.000000e+00 -4.220413e-03 -1.100000e+00 -4.520028e-03 -1.200000e+00 -4.831373e-03 -1.000000e-01 -1.655040e-03 -2.000000e-01 -2.655796e-03 -3.000000e-01 -3.206164e-03 -4.000000e-01 -3.580665e-03 -5.000000e-01 -3.908503e-03 -6.000000e-01 -4.220998e-03 -7.000000e-01 -4.527605e-03 -8.000000e-01 -4.832047e-03 -9.000000e-01 -5.136159e-03 -1.000000e+00 -5.441457e-03 -1.100000e+00 -5.750631e-03 -1.200000e+00 -6.069452e-03 -1.000000e-01 -2.078094e-03 -2.000000e-01 -3.436940e-03 -3.000000e-01 -4.230135e-03 -4.000000e-01 -4.702571e-03 -5.000000e-01 -5.074524e-03 -6.000000e-01 -5.413380e-03 -7.000000e-01 -5.738481e-03 -8.000000e-01 -6.057057e-03 -9.000000e-01 -6.372462e-03 -1.000000e+00 -6.686872e-03 -1.100000e+00 -7.003133e-03 -1.200000e+00 -7.326927e-03 -1.000000e-01 -2.458923e-03 -2.000000e-01 -4.154833e-03 -3.000000e-01 -5.223899e-03 -4.000000e-01 -5.831523e-03 -5.000000e-01 -6.257911e-03 -6.000000e-01 -6.625141e-03 -7.000000e-01 -6.968342e-03 -8.000000e-01 -7.299891e-03 -9.000000e-01 -7.625222e-03 -1.000000e+00 -7.947401e-03 -1.100000e+00 -8.269494e-03 -1.200000e+00 -8.596998e-03 -1.000000e-01 -2.805574e-03 -2.000000e-01 -4.816031e-03 -3.000000e-01 -6.167663e-03 -4.000000e-01 -6.949933e-03 -5.000000e-01 -7.446387e-03 -6.000000e-01 -7.846296e-03 -7.000000e-01 -8.208562e-03 -8.000000e-01 -8.552940e-03 -9.000000e-01 -8.887670e-03 -1.000000e+00 -9.217001e-03 -1.100000e+00 -9.544354e-03 -1.200000e+00 -9.875026e-03 -1.000000e-01 -3.125008e-03 -2.000000e-01 -5.429843e-03 -3.000000e-01 -7.056144e-03 -4.000000e-01 -8.044540e-03 -5.000000e-01 -8.631191e-03 -6.000000e-01 -9.070028e-03 -7.000000e-01 -9.453263e-03 -8.000000e-01 -9.810953e-03 -9.000000e-01 -1.015505e-02 -1.000000e+00 -1.049134e-02 -1.100000e+00 -1.082377e-02 -1.200000e+00 -1.115749e-02 -1.000000e-01 -3.422939e-03 -2.000000e-01 -6.004995e-03 -3.000000e-01 -7.893110e-03 -4.000000e-01 -9.105876e-03 -5.000000e-01 -9.805498e-03 -6.000000e-01 -1.029123e-02 -7.000000e-01 -1.069804e-02 -8.000000e-01 -1.106993e-02 -9.000000e-01 -1.142367e-02 -1.000000e+00 -1.176697e-02 -1.100000e+00 -1.210452e-02 -1.200000e+00 -1.244141e-02 -1.000000e-01 -1.295242e-06 -2.000000e-01 -2.154844e-06 -3.000000e-01 -3.439103e-06 -4.000000e-01 -5.422121e-06 -5.000000e-01 -8.477006e-06 -6.000000e-01 -1.315228e-05 -7.000000e-01 -2.024118e-05 -8.000000e-01 -3.085901e-05 -9.000000e-01 -4.652323e-05 -1.000000e+00 -6.923357e-05 -1.100000e+00 -1.015632e-04 -1.200000e+00 -1.467946e-04 -1.000000e-01 -6.953713e-06 -2.000000e-01 -1.139010e-05 -3.000000e-01 -1.771926e-05 -4.000000e-01 -2.707976e-05 -5.000000e-01 -4.074469e-05 -6.000000e-01 -6.028804e-05 -7.000000e-01 -8.755610e-05 -8.000000e-01 -1.245753e-04 -9.000000e-01 -1.734322e-04 -1.000000e+00 -2.361915e-04 -1.100000e+00 -3.149432e-04 -1.200000e+00 -4.120581e-04 -1.000000e-01 -3.172240e-05 -2.000000e-01 -5.130537e-05 -3.000000e-01 -7.544718e-05 -4.000000e-01 -1.075327e-04 -5.000000e-01 -1.493410e-04 -6.000000e-01 -2.023970e-04 -7.000000e-01 -2.679694e-04 -8.000000e-01 -3.470291e-04 -9.000000e-01 -4.402627e-04 -1.000000e+00 -5.481905e-04 -1.100000e+00 -6.714388e-04 -1.200000e+00 -8.112071e-04 -1.000000e-01 -9.878949e-05 -2.000000e-01 -1.640952e-04 -3.000000e-01 -2.237446e-04 -4.000000e-01 -2.920406e-04 -5.000000e-01 -3.713926e-04 -6.000000e-01 -4.624976e-04 -7.000000e-01 -5.656436e-04 -8.000000e-01 -6.809251e-04 -9.000000e-01 -8.083381e-04 -1.000000e+00 -9.478969e-04 -1.100000e+00 -1.099866e-03 -1.200000e+00 -1.265193e-03 -1.000000e-01 -1.947375e-04 -2.000000e-01 -3.424718e-04 -3.000000e-01 -4.553870e-04 -4.000000e-01 -5.610075e-04 -5.000000e-01 -6.726264e-04 -6.000000e-01 -7.930831e-04 -7.000000e-01 -9.231344e-04 -8.000000e-01 -1.063063e-03 -9.000000e-01 -1.212997e-03 -1.000000e+00 -1.373036e-03 -1.100000e+00 -1.543426e-03 -1.200000e+00 -1.724927e-03 -1.000000e-01 -2.869113e-04 -2.000000e-01 -5.220775e-04 -3.000000e-01 -7.078047e-04 -4.000000e-01 -8.588065e-04 -5.000000e-01 -9.999453e-04 -6.000000e-01 -1.143961e-03 -7.000000e-01 -1.294499e-03 -8.000000e-01 -1.452820e-03 -9.000000e-01 -1.619505e-03 -1.000000e+00 -1.794886e-03 -1.100000e+00 -1.979250e-03 -1.200000e+00 -2.173146e-03 -1.000000e-01 -3.630578e-04 -2.000000e-01 -6.735097e-04 -3.000000e-01 -9.319109e-04 -4.000000e-01 -1.142634e-03 -5.000000e-01 -1.321345e-03 -6.000000e-01 -1.489850e-03 -7.000000e-01 -1.659482e-03 -8.000000e-01 -1.834138e-03 -9.000000e-01 -2.015380e-03 -1.000000e+00 -2.203983e-03 -1.100000e+00 -2.400411e-03 -1.200000e+00 -2.605119e-03 -1.000000e-01 -4.237854e-04 -2.000000e-01 -7.963406e-04 -3.000000e-01 -1.117935e-03 -4.000000e-01 -1.390016e-03 -5.000000e-01 -1.618313e-03 -6.000000e-01 -1.818658e-03 -7.000000e-01 -2.009650e-03 -8.000000e-01 -2.200906e-03 -9.000000e-01 -2.396187e-03 -1.000000e+00 -2.597164e-03 -1.100000e+00 -2.804713e-03 -1.200000e+00 -3.019396e-03 -1.000000e-01 -4.722514e-04 -2.000000e-01 -8.957914e-04 -3.000000e-01 -1.270781e-03 -4.000000e-01 -1.597853e-03 -5.000000e-01 -1.879028e-03 -6.000000e-01 -2.121089e-03 -7.000000e-01 -2.339401e-03 -8.000000e-01 -2.549517e-03 -9.000000e-01 -2.759477e-03 -1.000000e+00 -2.972748e-03 -1.100000e+00 -3.191005e-03 -1.200000e+00 -3.415170e-03 -1.000000e-01 -5.111798e-04 -2.000000e-01 -9.766447e-04 -3.000000e-01 -1.396465e-03 -4.000000e-01 -1.770951e-03 -5.000000e-01 -2.100945e-03 -6.000000e-01 -2.388968e-03 -7.000000e-01 -2.642628e-03 -8.000000e-01 -2.876332e-03 -9.000000e-01 -3.102961e-03 -1.000000e+00 -3.329231e-03 -1.100000e+00 -3.558289e-03 -1.200000e+00 -3.791752e-03 -1.000000e-01 -5.425722e-04 -2.000000e-01 -1.042548e-03 -3.000000e-01 -1.499913e-03 -4.000000e-01 -1.914802e-03 -5.000000e-01 -2.287601e-03 -6.000000e-01 -2.619332e-03 -7.000000e-01 -2.913018e-03 -8.000000e-01 -3.176843e-03 -9.000000e-01 -3.423939e-03 -1.000000e+00 -3.664947e-03 -1.100000e+00 -3.905517e-03 -1.200000e+00 -4.148482e-03 -1.000000e-01 -5.678986e-04 -2.000000e-01 -1.096260e-03 -3.000000e-01 -1.585001e-03 -4.000000e-01 -2.034136e-03 -5.000000e-01 -2.443825e-03 -6.000000e-01 -2.814518e-03 -7.000000e-01 -3.147435e-03 -8.000000e-01 -3.446110e-03 -9.000000e-01 -3.719019e-03 -1.000000e+00 -3.977878e-03 -1.100000e+00 -4.231496e-03 -1.200000e+00 -4.484670e-03 tmpk8ny_4pz/tests/bsim4/pmos/reference/dcSweep_lw2.standard0000644000175000017500000002751213546075722024163 0ustar carstencarstenV(d) I(d) -1.000000e-01 -3.233288e-08 -2.000000e-01 -3.576179e-08 -3.000000e-01 -3.876764e-08 -4.000000e-01 -4.185338e-08 -5.000000e-01 -4.509995e-08 -6.000000e-01 -4.854383e-08 -7.000000e-01 -5.221175e-08 -8.000000e-01 -5.613109e-08 -9.000000e-01 -6.033919e-08 -1.000000e+00 -6.489534e-08 -1.100000e+00 -6.989444e-08 -1.200000e+00 -7.548110e-08 -1.000000e-01 -3.879199e-07 -2.000000e-01 -4.275542e-07 -3.000000e-01 -4.615729e-07 -4.000000e-01 -4.961827e-07 -5.000000e-01 -5.323291e-07 -6.000000e-01 -5.704031e-07 -7.000000e-01 -6.106643e-07 -8.000000e-01 -6.533636e-07 -9.000000e-01 -6.988452e-07 -1.000000e+00 -7.476750e-07 -1.100000e+00 -8.007832e-07 -1.200000e+00 -8.596019e-07 -1.000000e-01 -3.767116e-06 -2.000000e-01 -4.150390e-06 -3.000000e-01 -4.456521e-06 -4.000000e-01 -4.762525e-06 -5.000000e-01 -5.078482e-06 -6.000000e-01 -5.408033e-06 -7.000000e-01 -5.753298e-06 -8.000000e-01 -6.116129e-06 -9.000000e-01 -6.499039e-06 -1.000000e+00 -6.906314e-06 -1.100000e+00 -7.345220e-06 -1.200000e+00 -7.827147e-06 -1.000000e-01 -2.604683e-05 -2.000000e-01 -2.947927e-05 -3.000000e-01 -3.139096e-05 -4.000000e-01 -3.318169e-05 -5.000000e-01 -3.497229e-05 -6.000000e-01 -3.679482e-05 -7.000000e-01 -3.866310e-05 -8.000000e-01 -4.058584e-05 -9.000000e-01 -4.257295e-05 -1.000000e+00 -4.464191e-05 -1.100000e+00 -4.682483e-05 -1.200000e+00 -4.917476e-05 -1.000000e-01 -9.047001e-05 -2.000000e-01 -1.168453e-04 -3.000000e-01 -1.244372e-04 -4.000000e-01 -1.300065e-04 -5.000000e-01 -1.351788e-04 -6.000000e-01 -1.402360e-04 -7.000000e-01 -1.452706e-04 -8.000000e-01 -1.503258e-04 -9.000000e-01 -1.554311e-04 -1.000000e+00 -1.606257e-04 -1.100000e+00 -1.659817e-04 -1.200000e+00 -1.716260e-04 -1.000000e-01 -1.753361e-04 -2.000000e-01 -2.641439e-04 -3.000000e-01 -2.938489e-04 -4.000000e-01 -3.068481e-04 -5.000000e-01 -3.169235e-04 -6.000000e-01 -3.261410e-04 -7.000000e-01 -3.349980e-04 -8.000000e-01 -3.436816e-04 -9.000000e-01 -3.522855e-04 -1.000000e+00 -3.608822e-04 -1.100000e+00 -3.695749e-04 -1.200000e+00 -3.785490e-04 -1.000000e-01 -2.578466e-04 -2.000000e-01 -4.230822e-04 -3.000000e-01 -5.063517e-04 -4.000000e-01 -5.391412e-04 -5.000000e-01 -5.572540e-04 -6.000000e-01 -5.717953e-04 -7.000000e-01 -5.850250e-04 -8.000000e-01 -5.976168e-04 -9.000000e-01 -6.098510e-04 -1.000000e+00 -6.218809e-04 -1.100000e+00 -6.338417e-04 -1.200000e+00 -6.459405e-04 -1.000000e-01 -3.326044e-04 -2.000000e-01 -5.714107e-04 -3.000000e-01 -7.226247e-04 -4.000000e-01 -7.994543e-04 -5.000000e-01 -8.348660e-04 -6.000000e-01 -8.575595e-04 -7.000000e-01 -8.763349e-04 -8.000000e-01 -8.934355e-04 -9.000000e-01 -9.096427e-04 -1.000000e+00 -9.253115e-04 -1.100000e+00 -9.406563e-04 -1.200000e+00 -9.558979e-04 -1.000000e-01 -3.994618e-04 -2.000000e-01 -7.058684e-04 -3.000000e-01 -9.241455e-04 -4.000000e-01 -1.060796e-03 -5.000000e-01 -1.131980e-03 -6.000000e-01 -1.169829e-03 -7.000000e-01 -1.196628e-03 -8.000000e-01 -1.219364e-03 -9.000000e-01 -1.240157e-03 -1.000000e+00 -1.259841e-03 -1.100000e+00 -1.278823e-03 -1.200000e+00 -1.297386e-03 -1.000000e-01 -4.591654e-04 -2.000000e-01 -8.269742e-04 -3.000000e-01 -1.107719e-03 -4.000000e-01 -1.305988e-03 -5.000000e-01 -1.429087e-03 -6.000000e-01 -1.496021e-03 -7.000000e-01 -1.536220e-03 -8.000000e-01 -1.566720e-03 -9.000000e-01 -1.593135e-03 -1.000000e+00 -1.617419e-03 -1.100000e+00 -1.640415e-03 -1.200000e+00 -1.662577e-03 -1.000000e-01 -5.125188e-04 -2.000000e-01 -9.358894e-04 -3.000000e-01 -1.273959e-03 -4.000000e-01 -1.530556e-03 -5.000000e-01 -1.710166e-03 -6.000000e-01 -1.821431e-03 -7.000000e-01 -1.885505e-03 -8.000000e-01 -1.927974e-03 -9.000000e-01 -1.961831e-03 -1.000000e+00 -1.991651e-03 -1.100000e+00 -2.019212e-03 -1.200000e+00 -2.045347e-03 -1.000000e-01 -5.602556e-04 -2.000000e-01 -1.033843e-03 -3.000000e-01 -1.424243e-03 -4.000000e-01 -1.734841e-03 -5.000000e-01 -1.969137e-03 -6.000000e-01 -2.131782e-03 -7.000000e-01 -2.233208e-03 -8.000000e-01 -2.295569e-03 -9.000000e-01 -2.340215e-03 -1.000000e+00 -2.377132e-03 -1.100000e+00 -2.410100e-03 -1.200000e+00 -2.440727e-03 -1.000000e-01 -4.861490e-09 -2.000000e-01 -5.470787e-09 -3.000000e-01 -6.049086e-09 -4.000000e-01 -6.661268e-09 -5.000000e-01 -7.322173e-09 -6.000000e-01 -8.040945e-09 -7.000000e-01 -8.826089e-09 -8.000000e-01 -9.687422e-09 -9.000000e-01 -1.063816e-08 -1.000000e+00 -1.169778e-08 -1.100000e+00 -1.289560e-08 -1.200000e+00 -1.427504e-08 -1.000000e-01 -1.441195e-07 -2.000000e-01 -1.610988e-07 -3.000000e-01 -1.768751e-07 -4.000000e-01 -1.933439e-07 -5.000000e-01 -2.108869e-07 -6.000000e-01 -2.296980e-07 -7.000000e-01 -2.499287e-07 -8.000000e-01 -2.717359e-07 -9.000000e-01 -2.953286e-07 -1.000000e+00 -3.210281e-07 -1.100000e+00 -3.493392e-07 -1.200000e+00 -3.810232e-07 -1.000000e-01 -2.764771e-06 -2.000000e-01 -3.057466e-06 -3.000000e-01 -3.315487e-06 -4.000000e-01 -3.578699e-06 -5.000000e-01 -3.854089e-06 -6.000000e-01 -4.144631e-06 -7.000000e-01 -4.452310e-06 -8.000000e-01 -4.779044e-06 -9.000000e-01 -5.127462e-06 -1.000000e+00 -5.501871e-06 -1.100000e+00 -5.909302e-06 -1.200000e+00 -6.360539e-06 -1.000000e-01 -3.227895e-05 -2.000000e-01 -3.581859e-05 -3.000000e-01 -3.838767e-05 -4.000000e-01 -4.088243e-05 -5.000000e-01 -4.341454e-05 -6.000000e-01 -4.601925e-05 -7.000000e-01 -4.871348e-05 -8.000000e-01 -5.150955e-05 -9.000000e-01 -5.442337e-05 -1.000000e+00 -5.748343e-05 -1.100000e+00 -6.074028e-05 -1.200000e+00 -6.427507e-05 -1.000000e-01 -1.717015e-04 -2.000000e-01 -2.052441e-04 -3.000000e-01 -2.175312e-04 -4.000000e-01 -2.275456e-04 -5.000000e-01 -2.370054e-04 -6.000000e-01 -2.462997e-04 -7.000000e-01 -2.555715e-04 -8.000000e-01 -2.648924e-04 -9.000000e-01 -2.743205e-04 -1.000000e+00 -2.839445e-04 -1.100000e+00 -2.939263e-04 -1.200000e+00 -3.045386e-04 -1.000000e-01 -4.074283e-04 -2.000000e-01 -5.663710e-04 -3.000000e-01 -6.106066e-04 -4.000000e-01 -6.345011e-04 -5.000000e-01 -6.541250e-04 -6.000000e-01 -6.722138e-04 -7.000000e-01 -6.895849e-04 -8.000000e-01 -7.065799e-04 -9.000000e-01 -7.233906e-04 -1.000000e+00 -7.402031e-04 -1.100000e+00 -7.573129e-04 -1.200000e+00 -7.752300e-04 -1.000000e-01 -6.686431e-04 -2.000000e-01 -1.032825e-03 -3.000000e-01 -1.171809e-03 -4.000000e-01 -1.225086e-03 -5.000000e-01 -1.259669e-03 -6.000000e-01 -1.288567e-03 -7.000000e-01 -1.314978e-03 -8.000000e-01 -1.340054e-03 -9.000000e-01 -1.364336e-03 -1.000000e+00 -1.388184e-03 -1.100000e+00 -1.412026e-03 -1.200000e+00 -1.436571e-03 -1.000000e-01 -9.366012e-04 -2.000000e-01 -1.532234e-03 -3.000000e-01 -1.837260e-03 -4.000000e-01 -1.956558e-03 -5.000000e-01 -2.016461e-03 -6.000000e-01 -2.060020e-03 -7.000000e-01 -2.097258e-03 -8.000000e-01 -2.131331e-03 -9.000000e-01 -2.163552e-03 -1.000000e+00 -2.194626e-03 -1.100000e+00 -2.225158e-03 -1.200000e+00 -2.256014e-03 -1.000000e-01 -1.209414e-03 -2.000000e-01 -2.046225e-03 -3.000000e-01 -2.555163e-03 -4.000000e-01 -2.793977e-03 -5.000000e-01 -2.898902e-03 -6.000000e-01 -2.963686e-03 -7.000000e-01 -3.014553e-03 -8.000000e-01 -3.059028e-03 -9.000000e-01 -3.099950e-03 -1.000000e+00 -3.138668e-03 -1.100000e+00 -3.176077e-03 -1.200000e+00 -3.213207e-03 -1.000000e-01 -1.488871e-03 -2.000000e-01 -2.574240e-03 -3.000000e-01 -3.302455e-03 -4.000000e-01 -3.706522e-03 -5.000000e-01 -3.886863e-03 -6.000000e-01 -3.983061e-03 -7.000000e-01 -4.051518e-03 -8.000000e-01 -4.108259e-03 -9.000000e-01 -4.158866e-03 -1.000000e+00 -4.205778e-03 -1.100000e+00 -4.250370e-03 -1.200000e+00 -4.293893e-03 -1.000000e-01 -1.778015e-03 -2.000000e-01 -3.120389e-03 -3.000000e-01 -4.076939e-03 -4.000000e-01 -4.673000e-03 -5.000000e-01 -4.963754e-03 -6.000000e-01 -5.105433e-03 -7.000000e-01 -5.196608e-03 -8.000000e-01 -5.267869e-03 -9.000000e-01 -5.329293e-03 -1.000000e+00 -5.385013e-03 -1.100000e+00 -5.437136e-03 -1.200000e+00 -5.487240e-03 -1.000000e-01 -2.080672e-03 -2.000000e-01 -3.690854e-03 -3.000000e-01 -4.884534e-03 -4.000000e-01 -5.686503e-03 -5.000000e-01 -6.117350e-03 -6.000000e-01 -6.320937e-03 -7.000000e-01 -6.440746e-03 -8.000000e-01 -6.528958e-03 -9.000000e-01 -6.602354e-03 -1.000000e+00 -6.667477e-03 -1.100000e+00 -6.727453e-03 -1.200000e+00 -6.784320e-03 -1.000000e-01 -1.661327e-07 -2.000000e-01 -1.821634e-07 -3.000000e-01 -1.941248e-07 -4.000000e-01 -2.060050e-07 -5.000000e-01 -2.182241e-07 -6.000000e-01 -2.309237e-07 -7.000000e-01 -2.441858e-07 -8.000000e-01 -2.580838e-07 -9.000000e-01 -2.727198e-07 -1.000000e+00 -2.882708e-07 -1.100000e+00 -3.050388e-07 -1.200000e+00 -3.234978e-07 -1.000000e-01 -9.383597e-07 -2.000000e-01 -1.030582e-06 -3.000000e-01 -1.096270e-06 -4.000000e-01 -1.160988e-06 -5.000000e-01 -1.227256e-06 -6.000000e-01 -1.295876e-06 -7.000000e-01 -1.367286e-06 -8.000000e-01 -1.441857e-06 -9.000000e-01 -1.520097e-06 -1.000000e+00 -1.602897e-06 -1.100000e+00 -1.691804e-06 -1.200000e+00 -1.789260e-06 -1.000000e-01 -4.768603e-06 -2.000000e-01 -5.320873e-06 -3.000000e-01 -5.649539e-06 -4.000000e-01 -5.965623e-06 -5.000000e-01 -6.285981e-06 -6.000000e-01 -6.615219e-06 -7.000000e-01 -6.955542e-06 -8.000000e-01 -7.308571e-06 -9.000000e-01 -7.676360e-06 -1.000000e+00 -8.062553e-06 -1.100000e+00 -8.473680e-06 -1.200000e+00 -8.920334e-06 -1.000000e-01 -1.878334e-05 -2.000000e-01 -2.264054e-05 -3.000000e-01 -2.400350e-05 -4.000000e-01 -2.518752e-05 -5.000000e-01 -2.635067e-05 -6.000000e-01 -2.752303e-05 -7.000000e-01 -2.871566e-05 -8.000000e-01 -2.993462e-05 -9.000000e-01 -3.118559e-05 -1.000000e+00 -3.247804e-05 -1.100000e+00 -3.383002e-05 -1.200000e+00 -3.527273e-05 -1.000000e-01 -4.621737e-05 -2.000000e-01 -6.556885e-05 -3.000000e-01 -7.093462e-05 -4.000000e-01 -7.402709e-05 -5.000000e-01 -7.680118e-05 -6.000000e-01 -7.949626e-05 -7.000000e-01 -8.217386e-05 -8.000000e-01 -8.485916e-05 -9.000000e-01 -8.756703e-05 -1.000000e+00 -9.031372e-05 -1.100000e+00 -9.312872e-05 -1.200000e+00 -9.606726e-05 -1.000000e-01 -7.754354e-05 -2.000000e-01 -1.244505e-04 -3.000000e-01 -1.449687e-04 -4.000000e-01 -1.526513e-04 -5.000000e-01 -1.577575e-04 -6.000000e-01 -1.623262e-04 -7.000000e-01 -1.667086e-04 -8.000000e-01 -1.710098e-04 -9.000000e-01 -1.752762e-04 -1.000000e+00 -1.795370e-04 -1.100000e+00 -1.838268e-04 -1.200000e+00 -1.882095e-04 -1.000000e-01 -1.053930e-04 -2.000000e-01 -1.800707e-04 -3.000000e-01 -2.254065e-04 -4.000000e-01 -2.465385e-04 -5.000000e-01 -2.562293e-04 -6.000000e-01 -2.631827e-04 -7.000000e-01 -2.694044e-04 -8.000000e-01 -2.753267e-04 -9.000000e-01 -2.810943e-04 -1.000000e+00 -2.867749e-04 -1.100000e+00 -2.924147e-04 -1.200000e+00 -2.980734e-04 -1.000000e-01 -1.282981e-04 -2.000000e-01 -2.269403e-04 -3.000000e-01 -2.966946e-04 -4.000000e-01 -3.391977e-04 -5.000000e-01 -3.602555e-04 -6.000000e-01 -3.714833e-04 -7.000000e-01 -3.800324e-04 -8.000000e-01 -3.877260e-04 -9.000000e-01 -3.950278e-04 -1.000000e+00 -4.021088e-04 -1.100000e+00 -4.090540e-04 -1.200000e+00 -4.159271e-04 -1.000000e-01 -1.468937e-04 -2.000000e-01 -2.655765e-04 -3.000000e-01 -3.566049e-04 -4.000000e-01 -4.207721e-04 -5.000000e-01 -4.600347e-04 -6.000000e-01 -4.807141e-04 -7.000000e-01 -4.931418e-04 -8.000000e-01 -5.030701e-04 -9.000000e-01 -5.120805e-04 -1.000000e+00 -5.206322e-04 -1.100000e+00 -5.289088e-04 -1.200000e+00 -5.370081e-04 -1.000000e-01 -1.620379e-04 -2.000000e-01 -2.974201e-04 -3.000000e-01 -4.065879e-04 -4.000000e-01 -4.900647e-04 -5.000000e-01 -5.487084e-04 -6.000000e-01 -5.848467e-04 -7.000000e-01 -6.051253e-04 -8.000000e-01 -6.185410e-04 -9.000000e-01 -6.296740e-04 -1.000000e+00 -6.398674e-04 -1.100000e+00 -6.495559e-04 -1.200000e+00 -6.589265e-04 -1.000000e-01 -1.744167e-04 -2.000000e-01 -3.237280e-04 -3.000000e-01 -4.482963e-04 -4.000000e-01 -5.485182e-04 -5.000000e-01 -6.249070e-04 -6.000000e-01 -6.784256e-04 -7.000000e-01 -7.117967e-04 -8.000000e-01 -7.317681e-04 -9.000000e-01 -7.460309e-04 -1.000000e+00 -7.582237e-04 -1.100000e+00 -7.694796e-04 -1.200000e+00 -7.802000e-04 -1.000000e-01 -1.845443e-04 -2.000000e-01 -3.454769e-04 -3.000000e-01 -4.831003e-04 -4.000000e-01 -5.977334e-04 -5.000000e-01 -6.897433e-04 -6.000000e-01 -7.596558e-04 -7.000000e-01 -8.085760e-04 -8.000000e-01 -8.396092e-04 -9.000000e-01 -8.593885e-04 -1.000000e+00 -8.743930e-04 -1.100000e+00 -8.875215e-04 -1.200000e+00 -8.997297e-04 tmpk8ny_4pz/tests/bsim4/pmos/reference/acFreq_wpemod.standard0000644000175000017500000000710513546075722024555 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 1258.925 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 1584.893 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 1995.262 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 2511.886 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 3162.278 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 3981.072 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 5011.872 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 6309.573 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 7943.282 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 10000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 12589.25 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 15848.93 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 19952.62 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 25118.86 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 31622.78 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 39810.72 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 50118.72 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 63095.73 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 79432.82 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 100000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 125892.5 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 158489.3 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 199526.2 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 251188.6 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 316227.8 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 398107.2 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 501187.2 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 630957.3 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 794328.2 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 1000000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 1258925 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 1584893 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 1995262 1.42948476769301e-14 1.06448391595228e-14 3.54785483061325e-15 2511886 1.42948470943482e-14 1.06448442438161e-14 3.54785520806153e-15 3162278 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 3981072 1.42948417584395e-14 1.06448384724498e-14 3.54785452562003e-15 5011872 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 6309573 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 7943282 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 10000000 1.42948449884757e-14 1.06448396362868e-14 3.5478549350642e-15 12589250 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 15848930 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 19952620 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 25118860 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 31622780 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 39810720 1.42948417584395e-14 1.06448384724498e-14 3.54785412584092e-15 50118720 1.42948446924018e-14 1.06448383371022e-14 3.54785497933912e-15 63095730 1.429484429045e-14 1.0644838986873e-14 3.54785421141287e-15 79432820 1.4294844380989e-14 1.06448396032868e-14 3.54785509563488e-15 100000000 1.42948418053768e-14 1.06448380447374e-14 3.54785334351477e-15 tmpk8ny_4pz/tests/bsim4/pmos/reference/dcSweep_scc.standard0000644000175000017500000002751213546075722024227 0ustar carstencarstenV(d) I(d) -1.000000e-01 -2.060620e-07 -2.000000e-01 -3.951414e-07 -3.000000e-01 -7.284812e-07 -4.000000e-01 -1.318828e-06 -5.000000e-01 -2.352149e-06 -6.000000e-01 -4.136004e-06 -7.000000e-01 -7.171094e-06 -8.000000e-01 -1.225693e-05 -9.000000e-01 -2.063911e-05 -1.000000e+00 -3.419648e-05 -1.100000e+00 -5.565272e-05 -1.200000e+00 -8.879236e-05 -1.000000e-01 -2.347263e-06 -2.000000e-01 -4.298730e-06 -3.000000e-01 -7.531125e-06 -4.000000e-01 -1.290654e-05 -5.000000e-01 -2.169163e-05 -6.000000e-01 -3.569962e-05 -7.000000e-01 -5.733945e-05 -8.000000e-01 -8.952389e-05 -9.000000e-01 -1.354296e-04 -1.000000e+00 -1.982138e-04 -1.100000e+00 -2.808861e-04 -1.200000e+00 -3.865233e-04 -1.000000e-01 -2.087763e-05 -2.000000e-01 -3.608031e-05 -3.000000e-01 -5.844587e-05 -4.000000e-01 -9.107256e-05 -5.000000e-01 -1.367670e-04 -6.000000e-01 -1.979962e-04 -7.000000e-01 -2.766100e-04 -8.000000e-01 -3.737024e-04 -9.000000e-01 -4.896906e-04 -1.000000e+00 -6.246421e-04 -1.100000e+00 -7.788533e-04 -1.200000e+00 -9.536559e-04 -1.000000e-01 -1.173971e-04 -2.000000e-01 -1.876023e-04 -3.000000e-01 -2.657281e-04 -4.000000e-01 -3.594677e-04 -5.000000e-01 -4.698381e-04 -6.000000e-01 -5.967650e-04 -7.000000e-01 -7.397098e-04 -8.000000e-01 -8.979140e-04 -9.000000e-01 -1.070598e-03 -1.000000e+00 -1.257254e-03 -1.100000e+00 -1.458147e-03 -1.200000e+00 -1.675083e-03 -1.000000e-01 -3.223010e-04 -2.000000e-01 -5.203969e-04 -3.000000e-01 -6.746175e-04 -4.000000e-01 -8.307146e-04 -5.000000e-01 -9.967252e-04 -6.000000e-01 -1.173932e-03 -7.000000e-01 -1.362352e-03 -8.000000e-01 -1.561660e-03 -9.000000e-01 -1.771465e-03 -1.000000e+00 -1.991574e-03 -1.100000e+00 -2.222486e-03 -1.200000e+00 -2.466237e-03 -1.000000e-01 -5.499072e-04 -2.000000e-01 -9.317058e-04 -3.000000e-01 -1.193799e-03 -4.000000e-01 -1.411782e-03 -5.000000e-01 -1.623952e-03 -6.000000e-01 -1.839935e-03 -7.000000e-01 -2.062417e-03 -8.000000e-01 -2.292256e-03 -9.000000e-01 -2.529699e-03 -1.000000e+00 -2.774867e-03 -1.100000e+00 -3.028306e-03 -1.200000e+00 -3.291904e-03 -1.000000e-01 -7.549085e-04 -2.000000e-01 -1.322081e-03 -3.000000e-01 -1.730657e-03 -4.000000e-01 -2.033007e-03 -5.000000e-01 -2.295108e-03 -6.000000e-01 -2.547775e-03 -7.000000e-01 -2.800515e-03 -8.000000e-01 -3.056660e-03 -9.000000e-01 -3.317561e-03 -1.000000e+00 -3.583857e-03 -1.100000e+00 -3.856198e-03 -1.200000e+00 -4.136201e-03 -1.000000e-01 -9.321283e-04 -2.000000e-01 -1.667897e-03 -3.000000e-01 -2.231426e-03 -4.000000e-01 -2.650298e-03 -5.000000e-01 -2.979104e-03 -6.000000e-01 -3.273205e-03 -7.000000e-01 -3.556646e-03 -8.000000e-01 -3.837940e-03 -9.000000e-01 -4.120525e-03 -1.000000e+00 -4.405992e-03 -1.100000e+00 -4.695334e-03 -1.200000e+00 -4.989985e-03 -1.000000e-01 -1.084914e-03 -2.000000e-01 -1.970779e-03 -3.000000e-01 -2.679855e-03 -4.000000e-01 -3.230879e-03 -5.000000e-01 -3.652013e-03 -6.000000e-01 -3.999503e-03 -7.000000e-01 -4.317736e-03 -8.000000e-01 -4.625217e-03 -9.000000e-01 -4.929260e-03 -1.000000e+00 -5.233142e-03 -1.100000e+00 -5.538591e-03 -1.200000e+00 -5.847092e-03 -1.000000e-01 -1.217168e-03 -2.000000e-01 -2.236077e-03 -3.000000e-01 -3.077471e-03 -4.000000e-01 -3.757915e-03 -5.000000e-01 -4.291448e-03 -6.000000e-01 -4.711643e-03 -7.000000e-01 -5.073252e-03 -8.000000e-01 -5.410278e-03 -9.000000e-01 -5.736964e-03 -1.000000e+00 -6.059488e-03 -1.100000e+00 -6.380883e-03 -1.200000e+00 -6.703059e-03 -1.000000e-01 -1.332205e-03 -2.000000e-01 -2.469050e-03 -3.000000e-01 -3.429755e-03 -4.000000e-01 -4.229975e-03 -5.000000e-01 -4.880452e-03 -6.000000e-01 -5.394102e-03 -7.000000e-01 -5.813170e-03 -8.000000e-01 -6.186070e-03 -9.000000e-01 -6.538175e-03 -1.000000e+00 -6.880543e-03 -1.100000e+00 -7.218378e-03 -1.200000e+00 -7.554508e-03 -1.000000e-01 -1.432734e-03 -2.000000e-01 -2.674297e-03 -3.000000e-01 -3.742399e-03 -4.000000e-01 -4.651838e-03 -5.000000e-01 -5.413264e-03 -6.000000e-01 -6.031974e-03 -7.000000e-01 -6.526695e-03 -8.000000e-01 -6.945684e-03 -9.000000e-01 -7.328012e-03 -1.000000e+00 -7.692549e-03 -1.100000e+00 -8.047997e-03 -1.200000e+00 -8.398777e-03 -1.000000e-01 -3.879333e-08 -2.000000e-01 -8.828187e-08 -3.000000e-01 -1.926200e-07 -4.000000e-01 -4.098542e-07 -5.000000e-01 -8.505837e-07 -6.000000e-01 -1.717885e-06 -7.000000e-01 -3.370215e-06 -8.000000e-01 -6.421315e-06 -9.000000e-01 -1.190317e-05 -1.000000e+00 -2.152934e-05 -1.100000e+00 -3.808451e-05 -1.200000e+00 -6.591065e-05 -1.000000e-01 -1.051498e-06 -2.000000e-01 -2.181980e-06 -3.000000e-01 -4.274449e-06 -4.000000e-01 -8.077164e-06 -5.000000e-01 -1.481100e-05 -6.000000e-01 -2.642530e-05 -7.000000e-01 -4.585425e-05 -8.000000e-01 -7.711395e-05 -9.000000e-01 -1.250385e-04 -1.000000e+00 -1.946418e-04 -1.100000e+00 -2.904750e-04 -1.200000e+00 -4.165579e-04 -1.000000e-01 -1.718215e-05 -2.000000e-01 -3.176679e-05 -3.000000e-01 -5.528474e-05 -4.000000e-01 -9.222502e-05 -5.000000e-01 -1.472663e-04 -6.000000e-01 -2.244918e-04 -7.000000e-01 -3.265108e-04 -8.000000e-01 -4.540905e-04 -9.000000e-01 -6.064951e-04 -1.000000e+00 -7.823903e-04 -1.100000e+00 -9.810606e-04 -1.200000e+00 -1.203735e-03 -1.000000e-01 -1.549685e-04 -2.000000e-01 -2.491282e-04 -3.000000e-01 -3.621175e-04 -4.000000e-01 -4.984905e-04 -5.000000e-01 -6.574256e-04 -6.000000e-01 -8.368378e-04 -7.000000e-01 -1.034283e-03 -8.000000e-01 -1.247420e-03 -9.000000e-01 -1.474375e-03 -1.000000e+00 -1.714239e-03 -1.100000e+00 -1.967841e-03 -1.200000e+00 -2.238793e-03 -1.000000e-01 -5.686264e-04 -2.000000e-01 -8.429179e-04 -3.000000e-01 -1.065867e-03 -4.000000e-01 -1.290773e-03 -5.000000e-01 -1.523843e-03 -6.000000e-01 -1.765604e-03 -7.000000e-01 -2.015531e-03 -8.000000e-01 -2.272937e-03 -9.000000e-01 -2.537349e-03 -1.000000e+00 -2.809054e-03 -1.100000e+00 -3.090040e-03 -1.200000e+00 -3.385297e-03 -1.000000e-01 -1.086977e-03 -2.000000e-01 -1.656781e-03 -3.000000e-01 -1.995893e-03 -4.000000e-01 -2.285579e-03 -5.000000e-01 -2.565411e-03 -6.000000e-01 -2.844174e-03 -7.000000e-01 -3.124581e-03 -8.000000e-01 -3.407622e-03 -9.000000e-01 -3.693818e-03 -1.000000e+00 -3.984069e-03 -1.100000e+00 -4.280833e-03 -1.200000e+00 -4.589701e-03 -1.000000e-01 -1.574189e-03 -2.000000e-01 -2.504213e-03 -3.000000e-01 -3.012338e-03 -4.000000e-01 -3.370575e-03 -5.000000e-01 -3.690079e-03 -6.000000e-01 -3.997000e-03 -7.000000e-01 -4.299341e-03 -8.000000e-01 -4.600280e-03 -9.000000e-01 -4.901406e-03 -1.000000e+00 -5.204133e-03 -1.100000e+00 -5.511135e-03 -1.200000e+00 -5.828196e-03 -1.000000e-01 -2.011992e-03 -2.000000e-01 -3.305813e-03 -3.000000e-01 -4.046128e-03 -4.000000e-01 -4.495270e-03 -5.000000e-01 -4.857153e-03 -6.000000e-01 -5.190136e-03 -7.000000e-01 -5.511099e-03 -8.000000e-01 -5.826437e-03 -9.000000e-01 -6.139159e-03 -1.000000e+00 -6.451299e-03 -1.100000e+00 -6.765687e-03 -1.200000e+00 -7.088064e-03 -1.000000e-01 -2.406050e-03 -2.000000e-01 -4.044688e-03 -3.000000e-01 -5.056892e-03 -4.000000e-01 -5.631826e-03 -5.000000e-01 -6.044962e-03 -6.000000e-01 -6.405357e-03 -7.000000e-01 -6.744132e-03 -8.000000e-01 -7.072396e-03 -9.000000e-01 -7.395090e-03 -1.000000e+00 -7.715076e-03 -1.100000e+00 -8.035387e-03 -1.200000e+00 -8.361602e-03 -1.000000e-01 -2.764419e-03 -2.000000e-01 -4.725470e-03 -3.000000e-01 -6.021583e-03 -4.000000e-01 -6.761599e-03 -5.000000e-01 -7.240069e-03 -6.000000e-01 -7.631563e-03 -7.000000e-01 -7.988799e-03 -8.000000e-01 -8.329639e-03 -9.000000e-01 -8.661621e-03 -1.000000e+00 -8.988710e-03 -1.100000e+00 -9.314254e-03 -1.200000e+00 -9.643637e-03 -1.000000e-01 -3.094289e-03 -2.000000e-01 -5.357200e-03 -3.000000e-01 -6.932087e-03 -4.000000e-01 -7.870787e-03 -5.000000e-01 -8.433142e-03 -6.000000e-01 -8.861304e-03 -7.000000e-01 -9.238622e-03 -8.000000e-01 -9.592364e-03 -9.000000e-01 -9.933499e-03 -1.000000e+00 -1.026742e-02 -1.100000e+00 -1.059795e-02 -1.200000e+00 -1.093030e-02 -1.000000e-01 -3.401616e-03 -2.000000e-01 -5.948752e-03 -3.000000e-01 -7.790505e-03 -4.000000e-01 -8.949355e-03 -5.000000e-01 -9.617087e-03 -6.000000e-01 -1.008911e-02 -7.000000e-01 -1.048881e-02 -8.000000e-01 -1.085620e-02 -9.000000e-01 -1.120669e-02 -1.000000e+00 -1.154744e-02 -1.100000e+00 -1.188296e-02 -1.200000e+00 -1.221838e-02 -1.000000e-01 -8.631823e-07 -2.000000e-01 -1.438465e-06 -3.000000e-01 -2.301954e-06 -4.000000e-01 -3.640786e-06 -5.000000e-01 -5.713048e-06 -6.000000e-01 -8.903592e-06 -7.000000e-01 -1.378053e-05 -8.000000e-01 -2.116612e-05 -9.000000e-01 -3.222254e-05 -1.000000e+00 -4.855402e-05 -1.100000e+00 -7.233194e-05 -1.200000e+00 -1.064627e-04 -1.000000e-01 -4.738432e-06 -2.000000e-01 -7.771790e-06 -3.000000e-01 -1.215502e-05 -4.000000e-01 -1.871780e-05 -5.000000e-01 -2.844887e-05 -6.000000e-01 -4.263590e-05 -7.000000e-01 -6.288044e-05 -8.000000e-01 -9.105910e-05 -9.000000e-01 -1.292439e-04 -1.000000e+00 -1.796264e-04 -1.100000e+00 -2.445230e-04 -1.200000e+00 -3.265444e-04 -1.000000e-01 -2.268007e-05 -2.000000e-01 -3.671152e-05 -3.000000e-01 -5.476309e-05 -4.000000e-01 -7.941424e-05 -5.000000e-01 -1.123910e-04 -6.000000e-01 -1.553284e-04 -7.000000e-01 -2.097071e-04 -8.000000e-01 -2.767683e-04 -9.000000e-01 -3.574843e-04 -1.000000e+00 -4.526342e-04 -1.100000e+00 -5.630370e-04 -1.200000e+00 -6.899760e-04 -1.000000e-01 -7.795475e-05 -2.000000e-01 -1.282318e-04 -3.000000e-01 -1.771714e-04 -4.000000e-01 -2.351306e-04 -5.000000e-01 -3.039484e-04 -6.000000e-01 -3.843620e-04 -7.000000e-01 -4.767616e-04 -8.000000e-01 -5.813319e-04 -9.000000e-01 -6.981353e-04 -1.000000e+00 -8.272296e-04 -1.100000e+00 -9.688989e-04 -1.200000e+00 -1.124067e-03 -1.000000e-01 -1.673901e-04 -2.000000e-01 -2.919364e-04 -3.000000e-01 -3.883247e-04 -4.000000e-01 -4.824540e-04 -5.000000e-01 -5.840218e-04 -6.000000e-01 -6.949196e-04 -7.000000e-01 -8.156634e-04 -8.000000e-01 -9.464442e-04 -9.000000e-01 -1.087345e-03 -1.000000e+00 -1.238445e-03 -1.100000e+00 -1.399981e-03 -1.200000e+00 -1.572708e-03 -1.000000e-01 -2.588371e-04 -2.000000e-01 -4.692309e-04 -3.000000e-01 -6.339755e-04 -4.000000e-01 -7.697756e-04 -5.000000e-01 -9.000296e-04 -6.000000e-01 -1.034706e-03 -7.000000e-01 -1.176490e-03 -8.000000e-01 -1.326331e-03 -9.000000e-01 -1.484682e-03 -1.000000e+00 -1.651817e-03 -1.100000e+00 -1.828002e-03 -1.200000e+00 -2.013786e-03 -1.000000e-01 -3.361522e-04 -2.000000e-01 -6.223509e-04 -3.000000e-01 -8.590640e-04 -4.000000e-01 -1.051343e-03 -5.000000e-01 -1.216291e-03 -6.000000e-01 -1.374418e-03 -7.000000e-01 -1.535064e-03 -8.000000e-01 -1.701326e-03 -9.000000e-01 -1.874467e-03 -1.000000e+00 -2.055136e-03 -1.100000e+00 -2.243738e-03 -1.200000e+00 -2.440708e-03 -1.000000e-01 -3.982960e-04 -2.000000e-01 -7.475021e-04 -3.000000e-01 -1.047766e-03 -4.000000e-01 -1.300607e-03 -5.000000e-01 -1.512522e-03 -6.000000e-01 -1.700307e-03 -7.000000e-01 -1.881387e-03 -8.000000e-01 -2.063944e-03 -9.000000e-01 -2.251100e-03 -1.000000e+00 -2.444264e-03 -1.100000e+00 -2.644189e-03 -1.200000e+00 -2.851384e-03 -1.000000e-01 -4.480843e-04 -2.000000e-01 -8.492217e-04 -3.000000e-01 -1.203480e-03 -4.000000e-01 -1.511457e-03 -5.000000e-01 -1.775348e-03 -6.000000e-01 -2.002718e-03 -7.000000e-01 -2.209489e-03 -8.000000e-01 -2.410171e-03 -9.000000e-01 -2.611741e-03 -1.000000e+00 -2.817167e-03 -1.100000e+00 -3.027893e-03 -1.200000e+00 -3.244733e-03 -1.000000e-01 -4.882235e-04 -2.000000e-01 -9.322170e-04 -3.000000e-01 -1.331985e-03 -4.000000e-01 -1.687793e-03 -5.000000e-01 -2.000500e-03 -6.000000e-01 -2.272881e-03 -7.000000e-01 -2.513269e-03 -8.000000e-01 -2.736309e-03 -9.000000e-01 -2.953975e-03 -1.000000e+00 -3.172185e-03 -1.100000e+00 -3.393685e-03 -1.200000e+00 -3.619898e-03 -1.000000e-01 -5.207382e-04 -2.000000e-01 -1.000148e-03 -3.000000e-01 -1.438171e-03 -4.000000e-01 -1.834903e-03 -5.000000e-01 -2.190712e-03 -6.000000e-01 -2.506681e-03 -7.000000e-01 -2.786141e-03 -8.000000e-01 -3.037894e-03 -9.000000e-01 -3.275081e-03 -1.000000e+00 -3.507574e-03 -1.100000e+00 -3.740411e-03 -1.200000e+00 -3.976102e-03 -1.000000e-01 -5.471142e-04 -2.000000e-01 -1.055787e-03 -3.000000e-01 -1.525902e-03 -4.000000e-01 -1.957446e-03 -5.000000e-01 -2.350558e-03 -6.000000e-01 -2.705694e-03 -7.000000e-01 -3.024166e-03 -8.000000e-01 -3.309845e-03 -9.000000e-01 -3.571700e-03 -1.000000e+00 -3.821301e-03 -1.100000e+00 -4.066818e-03 -1.200000e+00 -4.312571e-03 tmpk8ny_4pz/tests/bsim4/pmos/reference/dcSweep_lw7.standard0000644000175000017500000002751213546075722024170 0ustar carstencarstenV(d) I(d) -1.000000e-01 -1.216875e-08 -2.000000e-01 -2.333397e-08 -3.000000e-01 -4.301806e-08 -4.000000e-01 -7.787888e-08 -5.000000e-01 -1.388985e-07 -6.000000e-01 -2.442399e-07 -7.000000e-01 -4.234739e-07 -8.000000e-01 -7.238225e-07 -9.000000e-01 -1.218862e-06 -1.000000e+00 -2.019596e-06 -1.100000e+00 -3.286972e-06 -1.200000e+00 -5.244690e-06 -1.000000e-01 -1.386159e-07 -2.000000e-01 -2.538531e-07 -3.000000e-01 -4.447384e-07 -4.000000e-01 -7.621892e-07 -5.000000e-01 -1.281027e-06 -6.000000e-01 -2.108380e-06 -7.000000e-01 -3.386604e-06 -8.000000e-01 -5.287892e-06 -9.000000e-01 -8.000130e-06 -1.000000e+00 -1.171020e-05 -1.100000e+00 -1.659638e-05 -1.200000e+00 -2.284109e-05 -1.000000e-01 -1.233031e-06 -2.000000e-01 -2.130912e-06 -3.000000e-01 -3.451990e-06 -4.000000e-01 -5.379385e-06 -5.000000e-01 -8.079099e-06 -6.000000e-01 -1.169717e-05 -7.000000e-01 -1.634329e-05 -8.000000e-01 -2.208254e-05 -9.000000e-01 -2.894007e-05 -1.000000e+00 -3.692035e-05 -1.100000e+00 -4.604142e-05 -1.200000e+00 -5.638255e-05 -1.000000e-01 -6.935692e-06 -2.000000e-01 -1.108336e-05 -3.000000e-01 -1.570018e-05 -4.000000e-01 -2.124078e-05 -5.000000e-01 -2.776556e-05 -6.000000e-01 -3.527050e-05 -7.000000e-01 -4.372414e-05 -8.000000e-01 -5.308196e-05 -9.000000e-01 -6.329823e-05 -1.000000e+00 -7.434318e-05 -1.100000e+00 -8.623284e-05 -1.200000e+00 -9.907448e-05 -1.000000e-01 -1.905184e-05 -2.000000e-01 -3.075832e-05 -3.000000e-01 -3.987514e-05 -4.000000e-01 -4.910609e-05 -5.000000e-01 -5.892555e-05 -6.000000e-01 -6.940931e-05 -7.000000e-01 -8.055851e-05 -8.000000e-01 -9.235402e-05 -9.000000e-01 -1.047730e-04 -1.000000e+00 -1.178040e-04 -1.100000e+00 -1.314771e-04 -1.200000e+00 -1.459130e-04 -1.000000e-01 -3.252554e-05 -2.000000e-01 -5.509692e-05 -3.000000e-01 -7.059064e-05 -4.000000e-01 -8.348387e-05 -5.000000e-01 -9.603815e-05 -6.000000e-01 -1.088212e-04 -7.000000e-01 -1.219913e-04 -8.000000e-01 -1.355994e-04 -9.000000e-01 -1.496600e-04 -1.000000e+00 -1.641802e-04 -1.100000e+00 -1.791928e-04 -1.200000e+00 -1.948098e-04 -1.000000e-01 -4.467466e-05 -2.000000e-01 -7.822079e-05 -3.000000e-01 -1.023765e-04 -4.000000e-01 -1.202569e-04 -5.000000e-01 -1.357670e-04 -6.000000e-01 -1.507246e-04 -7.000000e-01 -1.656902e-04 -8.000000e-01 -1.808603e-04 -9.000000e-01 -1.963146e-04 -1.000000e+00 -2.120909e-04 -1.100000e+00 -2.282277e-04 -1.200000e+00 -2.448212e-04 -1.000000e-01 -5.518770e-05 -2.000000e-01 -9.872479e-05 -3.000000e-01 -1.320523e-04 -4.000000e-01 -1.568195e-04 -5.000000e-01 -1.762724e-04 -6.000000e-01 -1.936833e-04 -7.000000e-01 -2.104693e-04 -8.000000e-01 -2.271321e-04 -9.000000e-01 -2.438744e-04 -1.000000e+00 -2.607901e-04 -1.100000e+00 -2.779380e-04 -1.200000e+00 -2.954031e-04 -1.000000e-01 -6.425894e-05 -2.000000e-01 -1.166982e-04 -3.000000e-01 -1.586491e-04 -4.000000e-01 -1.912342e-04 -5.000000e-01 -2.161406e-04 -6.000000e-01 -2.367070e-04 -7.000000e-01 -2.555532e-04 -8.000000e-01 -2.737688e-04 -9.000000e-01 -2.917849e-04 -1.000000e+00 -3.097945e-04 -1.100000e+00 -3.278997e-04 -1.200000e+00 -3.461886e-04 -1.000000e-01 -7.211696e-05 -2.000000e-01 -1.324529e-04 -3.000000e-01 -1.822496e-04 -4.000000e-01 -2.224996e-04 -5.000000e-01 -2.540494e-04 -6.000000e-01 -2.789081e-04 -7.000000e-01 -3.003181e-04 -8.000000e-01 -3.202832e-04 -9.000000e-01 -3.396418e-04 -1.000000e+00 -3.587580e-04 -1.100000e+00 -3.778104e-04 -1.200000e+00 -3.969119e-04 -1.000000e-01 -7.895632e-05 -2.000000e-01 -1.462969e-04 -3.000000e-01 -2.031731e-04 -4.000000e-01 -2.505231e-04 -5.000000e-01 -2.889942e-04 -6.000000e-01 -3.193707e-04 -7.000000e-01 -3.441717e-04 -8.000000e-01 -3.662574e-04 -9.000000e-01 -3.871211e-04 -1.000000e+00 -4.074138e-04 -1.100000e+00 -4.274418e-04 -1.200000e+00 -4.473721e-04 -1.000000e-01 -8.493638e-05 -2.000000e-01 -1.585002e-04 -3.000000e-01 -2.217529e-04 -4.000000e-01 -2.755817e-04 -5.000000e-01 -3.206268e-04 -6.000000e-01 -3.572145e-04 -7.000000e-01 -3.864780e-04 -8.000000e-01 -4.112834e-04 -9.000000e-01 -4.339338e-04 -1.000000e+00 -4.555391e-04 -1.100000e+00 -4.766112e-04 -1.200000e+00 -4.974106e-04 -1.000000e-01 -2.290871e-09 -2.000000e-01 -5.213246e-09 -3.000000e-01 -1.137451e-08 -4.000000e-01 -2.420232e-08 -5.000000e-01 -5.022773e-08 -6.000000e-01 -1.014429e-07 -7.000000e-01 -1.990164e-07 -8.000000e-01 -3.791953e-07 -9.000000e-01 -7.029342e-07 -1.000000e+00 -1.271462e-06 -1.100000e+00 -2.249321e-06 -1.200000e+00 -3.893146e-06 -1.000000e-01 -6.209245e-08 -2.000000e-01 -1.288485e-07 -3.000000e-01 -2.524143e-07 -4.000000e-01 -4.769827e-07 -5.000000e-01 -8.746704e-07 -6.000000e-01 -1.560647e-06 -7.000000e-01 -2.708314e-06 -8.000000e-01 -4.555112e-06 -9.000000e-01 -7.387011e-06 -1.000000e+00 -1.150089e-05 -1.100000e+00 -1.716657e-05 -1.200000e+00 -2.462276e-05 -1.000000e-01 -1.014745e-06 -2.000000e-01 -1.876183e-06 -3.000000e-01 -3.265470e-06 -4.000000e-01 -5.448044e-06 -5.000000e-01 -8.700780e-06 -6.000000e-01 -1.326565e-05 -7.000000e-01 -1.929770e-05 -8.000000e-01 -2.684324e-05 -9.000000e-01 -3.585965e-05 -1.000000e+00 -4.626880e-05 -1.100000e+00 -5.802904e-05 -1.200000e+00 -7.121376e-05 -1.000000e-01 -9.157188e-06 -2.000000e-01 -1.472293e-05 -3.000000e-01 -2.140417e-05 -4.000000e-01 -2.947060e-05 -5.000000e-01 -3.887431e-05 -6.000000e-01 -4.949258e-05 -7.000000e-01 -6.118123e-05 -8.000000e-01 -7.380206e-05 -9.000000e-01 -8.724435e-05 -1.000000e+00 -1.014544e-04 -1.100000e+00 -1.164816e-04 -1.200000e+00 -1.325404e-04 -1.000000e-01 -3.363828e-05 -2.000000e-01 -4.986001e-05 -3.000000e-01 -6.305638e-05 -4.000000e-01 -7.637393e-05 -5.000000e-01 -9.017878e-05 -6.000000e-01 -1.045016e-04 -7.000000e-01 -1.193113e-04 -8.000000e-01 -1.345669e-04 -9.000000e-01 -1.502405e-04 -1.000000e+00 -1.663491e-04 -1.100000e+00 -1.830109e-04 -1.200000e+00 -2.005224e-04 -1.000000e-01 -6.438883e-05 -2.000000e-01 -9.809314e-05 -3.000000e-01 -1.181666e-04 -4.000000e-01 -1.353297e-04 -5.000000e-01 -1.519152e-04 -6.000000e-01 -1.684411e-04 -7.000000e-01 -1.850672e-04 -8.000000e-01 -2.018520e-04 -9.000000e-01 -2.188260e-04 -1.000000e+00 -2.360429e-04 -1.100000e+00 -2.536489e-04 -1.200000e+00 -2.719768e-04 -1.000000e-01 -9.336758e-05 -2.000000e-01 -1.484113e-04 -3.000000e-01 -1.784657e-04 -4.000000e-01 -1.996866e-04 -5.000000e-01 -2.186279e-04 -6.000000e-01 -2.368294e-04 -7.000000e-01 -2.547626e-04 -8.000000e-01 -2.726151e-04 -9.000000e-01 -2.904807e-04 -1.000000e+00 -3.084434e-04 -1.100000e+00 -3.266625e-04 -1.200000e+00 -3.454832e-04 -1.000000e-01 -1.194700e-04 -2.000000e-01 -1.961102e-04 -3.000000e-01 -2.398702e-04 -4.000000e-01 -2.664499e-04 -5.000000e-01 -2.878984e-04 -6.000000e-01 -3.076464e-04 -7.000000e-01 -3.266871e-04 -8.000000e-01 -3.453973e-04 -9.000000e-01 -3.639543e-04 -1.000000e+00 -3.824789e-04 -1.100000e+00 -4.011399e-04 -1.200000e+00 -4.202807e-04 -1.000000e-01 -1.430150e-04 -2.000000e-01 -2.401670e-04 -3.000000e-01 -2.999995e-04 -4.000000e-01 -3.339704e-04 -5.000000e-01 -3.584373e-04 -6.000000e-01 -3.798055e-04 -7.000000e-01 -3.999020e-04 -8.000000e-01 -4.193797e-04 -9.000000e-01 -4.385298e-04 -1.000000e+00 -4.575216e-04 -1.100000e+00 -4.765360e-04 -1.200000e+00 -4.959071e-04 -1.000000e-01 -1.644693e-04 -2.000000e-01 -2.808361e-04 -3.000000e-01 -3.574906e-04 -4.000000e-01 -4.011489e-04 -5.000000e-01 -4.294456e-04 -6.000000e-01 -4.526439e-04 -7.000000e-01 -4.738303e-04 -8.000000e-01 -4.940522e-04 -9.000000e-01 -5.137529e-04 -1.000000e+00 -5.331661e-04 -1.100000e+00 -5.524914e-04 -1.200000e+00 -5.720517e-04 -1.000000e-01 -1.842526e-04 -2.000000e-01 -3.186397e-04 -3.000000e-01 -4.118513e-04 -4.000000e-01 -4.671770e-04 -5.000000e-01 -5.003707e-04 -6.000000e-01 -5.257166e-04 -7.000000e-01 -5.480836e-04 -8.000000e-01 -5.690663e-04 -9.000000e-01 -5.893076e-04 -1.000000e+00 -6.091249e-04 -1.100000e+00 -6.287450e-04 -1.200000e+00 -6.484816e-04 -1.000000e-01 -2.027144e-04 -2.000000e-01 -3.540951e-04 -3.000000e-01 -4.631888e-04 -4.000000e-01 -5.314693e-04 -5.000000e-01 -5.707951e-04 -6.000000e-01 -5.986973e-04 -7.000000e-01 -6.223749e-04 -8.000000e-01 -6.441593e-04 -9.000000e-01 -6.649509e-04 -1.000000e+00 -6.851713e-04 -1.100000e+00 -7.050855e-04 -1.200000e+00 -7.250025e-04 -1.000000e-01 -5.097651e-08 -2.000000e-01 -8.494769e-08 -3.000000e-01 -1.359389e-07 -4.000000e-01 -2.150012e-07 -5.000000e-01 -3.373765e-07 -6.000000e-01 -5.257938e-07 -7.000000e-01 -8.138076e-07 -8.000000e-01 -1.249986e-06 -9.000000e-01 -1.902984e-06 -1.000000e+00 -2.867583e-06 -1.100000e+00 -4.272096e-06 -1.200000e+00 -6.288305e-06 -1.000000e-01 -2.798402e-07 -2.000000e-01 -4.589687e-07 -3.000000e-01 -7.178212e-07 -4.000000e-01 -1.105400e-06 -5.000000e-01 -1.680110e-06 -6.000000e-01 -2.518026e-06 -7.000000e-01 -3.713780e-06 -8.000000e-01 -5.378285e-06 -9.000000e-01 -7.634045e-06 -1.000000e+00 -1.061069e-05 -1.100000e+00 -1.444528e-05 -1.200000e+00 -1.929236e-05 -1.000000e-01 -1.339525e-06 -2.000000e-01 -2.168195e-06 -3.000000e-01 -3.234365e-06 -4.000000e-01 -4.690425e-06 -5.000000e-01 -6.638396e-06 -6.000000e-01 -9.174961e-06 -7.000000e-01 -1.238773e-05 -8.000000e-01 -1.635021e-05 -9.000000e-01 -2.112007e-05 -1.000000e+00 -2.674359e-05 -1.100000e+00 -3.326944e-05 -1.200000e+00 -4.077379e-05 -1.000000e-01 -4.604919e-06 -2.000000e-01 -7.574617e-06 -3.000000e-01 -1.046561e-05 -4.000000e-01 -1.388982e-05 -5.000000e-01 -1.795600e-05 -6.000000e-01 -2.270781e-05 -7.000000e-01 -2.816849e-05 -8.000000e-01 -3.434915e-05 -9.000000e-01 -4.125368e-05 -1.000000e+00 -4.888569e-05 -1.100000e+00 -5.726221e-05 -1.200000e+00 -6.643811e-05 -1.000000e-01 -9.890413e-06 -2.000000e-01 -1.724844e-05 -3.000000e-01 -2.294292e-05 -4.000000e-01 -2.850492e-05 -5.000000e-01 -3.450738e-05 -6.000000e-01 -4.106204e-05 -7.000000e-01 -4.819950e-05 -8.000000e-01 -5.593115e-05 -9.000000e-01 -6.426208e-05 -1.000000e+00 -7.319706e-05 -1.100000e+00 -8.275036e-05 -1.200000e+00 -9.296679e-05 -1.000000e-01 -1.529731e-05 -2.000000e-01 -2.772992e-05 -3.000000e-01 -3.746385e-05 -4.000000e-01 -4.548812e-05 -5.000000e-01 -5.318644e-05 -6.000000e-01 -6.114759e-05 -7.000000e-01 -6.953005e-05 -8.000000e-01 -7.838992e-05 -9.000000e-01 -8.775410e-05 -1.000000e+00 -9.763887e-05 -1.100000e+00 -1.080601e-04 -1.200000e+00 -1.190504e-04 -1.000000e-01 -1.987064e-05 -2.000000e-01 -3.678608e-05 -3.000000e-01 -5.077468e-05 -4.000000e-01 -6.213640e-05 -5.000000e-01 -7.188447e-05 -6.000000e-01 -8.123190e-05 -7.000000e-01 -9.073013e-05 -8.000000e-01 -1.005618e-04 -9.000000e-01 -1.108017e-04 -1.000000e+00 -1.214880e-04 -1.100000e+00 -1.326448e-04 -1.200000e+00 -1.442980e-04 -1.000000e-01 -2.354786e-05 -2.000000e-01 -4.419067e-05 -3.000000e-01 -6.193779e-05 -4.000000e-01 -7.687990e-05 -5.000000e-01 -8.940292e-05 -6.000000e-01 -1.005022e-04 -7.000000e-01 -1.112082e-04 -8.000000e-01 -1.220037e-04 -9.000000e-01 -1.330729e-04 -1.000000e+00 -1.444990e-04 -1.100000e+00 -1.563263e-04 -1.200000e+00 -1.685851e-04 -1.000000e-01 -2.649482e-05 -2.000000e-01 -5.021067e-05 -3.000000e-01 -7.115215e-05 -4.000000e-01 -8.935519e-05 -5.000000e-01 -1.049508e-04 -6.000000e-01 -1.183882e-04 -7.000000e-01 -1.306114e-04 -8.000000e-01 -1.424781e-04 -9.000000e-01 -1.543996e-04 -1.000000e+00 -1.665511e-04 -1.100000e+00 -1.790178e-04 -1.200000e+00 -1.918476e-04 -1.000000e-01 -2.887119e-05 -2.000000e-01 -5.512368e-05 -3.000000e-01 -7.875823e-05 -4.000000e-01 -9.979105e-05 -5.000000e-01 -1.182737e-04 -6.000000e-01 -1.343715e-04 -7.000000e-01 -1.485798e-04 -8.000000e-01 -1.617664e-04 -9.000000e-01 -1.746389e-04 -1.000000e+00 -1.875462e-04 -1.100000e+00 -2.006500e-04 -1.200000e+00 -2.140345e-04 -1.000000e-01 -3.079651e-05 -2.000000e-01 -5.914572e-05 -3.000000e-01 -8.504455e-05 -4.000000e-01 -1.084991e-04 -5.000000e-01 -1.295317e-04 -6.000000e-01 -1.482072e-04 -7.000000e-01 -1.647241e-04 -8.000000e-01 -1.796056e-04 -9.000000e-01 -1.936303e-04 -1.000000e+00 -2.073811e-04 -1.100000e+00 -2.211550e-04 -1.200000e+00 -2.350998e-04 -1.000000e-01 -3.235857e-05 -2.000000e-01 -6.244045e-05 -3.000000e-01 -9.023913e-05 -4.000000e-01 -1.157542e-04 -5.000000e-01 -1.389942e-04 -6.000000e-01 -1.599868e-04 -7.000000e-01 -1.788103e-04 -8.000000e-01 -1.956957e-04 -9.000000e-01 -2.111760e-04 -1.000000e+00 -2.259363e-04 -1.100000e+00 -2.404588e-04 -1.200000e+00 -2.549980e-04 tmpk8ny_4pz/tests/bsim4/pmos/reference/dcSweep_lw3.standard0000644000175000017500000002751213546075722024164 0ustar carstencarstenV(d) I(d) -1.000000e-01 -8.931362e-09 -2.000000e-01 -9.218438e-09 -3.000000e-01 -9.368672e-09 -4.000000e-01 -9.500345e-09 -5.000000e-01 -9.626945e-09 -6.000000e-01 -9.753004e-09 -7.000000e-01 -9.881614e-09 -8.000000e-01 -1.001622e-08 -9.000000e-01 -1.016170e-08 -1.000000e+00 -1.032546e-08 -1.100000e+00 -1.051864e-08 -1.200000e+00 -1.075752e-08 -1.000000e-01 -1.074684e-07 -2.000000e-01 -1.109346e-07 -3.000000e-01 -1.126949e-07 -4.000000e-01 -1.142160e-07 -5.000000e-01 -1.156552e-07 -6.000000e-01 -1.170552e-07 -7.000000e-01 -1.184344e-07 -8.000000e-01 -1.198051e-07 -9.000000e-01 -1.211824e-07 -1.000000e+00 -1.225903e-07 -1.100000e+00 -1.240667e-07 -1.200000e+00 -1.256668e-07 -1.000000e-01 -1.052324e-06 -2.000000e-01 -1.090235e-06 -3.000000e-01 -1.106861e-06 -4.000000e-01 -1.120791e-06 -5.000000e-01 -1.133814e-06 -6.000000e-01 -1.146390e-06 -7.000000e-01 -1.158699e-06 -8.000000e-01 -1.170850e-06 -9.000000e-01 -1.182964e-06 -1.000000e+00 -1.195231e-06 -1.100000e+00 -1.207956e-06 -1.200000e+00 -1.221583e-06 -1.000000e-01 -7.473495e-06 -2.000000e-01 -7.995755e-06 -3.000000e-01 -8.120323e-06 -4.000000e-01 -8.211224e-06 -5.000000e-01 -8.292647e-06 -6.000000e-01 -8.369661e-06 -7.000000e-01 -8.444055e-06 -8.000000e-01 -8.516739e-06 -9.000000e-01 -8.588500e-06 -1.000000e+00 -8.660483e-06 -1.100000e+00 -8.734548e-06 -1.200000e+00 -8.813491e-06 -1.000000e-01 -2.698356e-05 -2.000000e-01 -3.338864e-05 -3.000000e-01 -3.424529e-05 -4.000000e-01 -3.463108e-05 -5.000000e-01 -3.493422e-05 -6.000000e-01 -3.520680e-05 -7.000000e-01 -3.546310e-05 -8.000000e-01 -3.570894e-05 -9.000000e-01 -3.594774e-05 -1.000000e+00 -3.618317e-05 -1.100000e+00 -3.642089e-05 -1.200000e+00 -3.666986e-05 -1.000000e-01 -5.357182e-05 -2.000000e-01 -7.906431e-05 -3.000000e-01 -8.535276e-05 -4.000000e-01 -8.679842e-05 -5.000000e-01 -8.760217e-05 -6.000000e-01 -8.824886e-05 -7.000000e-01 -8.882895e-05 -8.000000e-01 -8.937097e-05 -9.000000e-01 -8.988759e-05 -1.000000e+00 -9.038721e-05 -1.100000e+00 -9.087972e-05 -1.200000e+00 -9.138077e-05 -1.000000e-01 -7.998952e-05 -2.000000e-01 -1.301609e-04 -3.000000e-01 -1.531224e-04 -4.000000e-01 -1.594133e-04 -5.000000e-01 -1.614814e-04 -6.000000e-01 -1.627833e-04 -7.000000e-01 -1.638527e-04 -8.000000e-01 -1.648131e-04 -9.000000e-01 -1.657080e-04 -1.000000e+00 -1.665583e-04 -1.100000e+00 -1.673791e-04 -1.200000e+00 -1.681904e-04 -1.000000e-01 -1.043482e-04 -2.000000e-01 -1.787340e-04 -3.000000e-01 -2.242024e-04 -4.000000e-01 -2.444272e-04 -5.000000e-01 -2.507182e-04 -6.000000e-01 -2.533831e-04 -7.000000e-01 -2.552158e-04 -8.000000e-01 -2.567517e-04 -9.000000e-01 -2.581367e-04 -1.000000e+00 -2.594270e-04 -1.100000e+00 -2.606517e-04 -1.200000e+00 -2.618349e-04 -1.000000e-01 -1.264657e-04 -2.000000e-01 -2.233885e-04 -3.000000e-01 -2.914338e-04 -4.000000e-01 -3.319274e-04 -5.000000e-01 -3.496797e-04 -6.000000e-01 -3.560221e-04 -7.000000e-01 -3.592562e-04 -8.000000e-01 -3.616309e-04 -9.000000e-01 -3.636571e-04 -1.000000e+00 -3.654936e-04 -1.100000e+00 -3.672065e-04 -1.200000e+00 -3.688333e-04 -1.000000e-01 -1.464831e-04 -2.000000e-01 -2.640979e-04 -3.000000e-01 -3.533675e-04 -4.000000e-01 -4.150129e-04 -5.000000e-01 -4.507566e-04 -6.000000e-01 -4.664828e-04 -7.000000e-01 -4.729477e-04 -8.000000e-01 -4.767288e-04 -9.000000e-01 -4.796452e-04 -1.000000e+00 -4.821727e-04 -1.100000e+00 -4.844756e-04 -1.200000e+00 -4.866276e-04 -1.000000e-01 -1.645852e-04 -2.000000e-01 -3.011011e-04 -3.000000e-01 -4.099931e-04 -4.000000e-01 -4.917795e-04 -5.000000e-01 -5.472827e-04 -6.000000e-01 -5.787357e-04 -7.000000e-01 -5.929005e-04 -8.000000e-01 -5.995516e-04 -9.000000e-01 -6.038603e-04 -1.000000e+00 -6.073113e-04 -1.100000e+00 -6.103419e-04 -1.200000e+00 -6.131170e-04 -1.000000e-01 -1.809541e-04 -2.000000e-01 -3.346948e-04 -3.000000e-01 -4.616146e-04 -4.000000e-01 -5.621371e-04 -5.000000e-01 -6.367956e-04 -6.000000e-01 -6.865682e-04 -7.000000e-01 -7.142889e-04 -8.000000e-01 -7.273045e-04 -9.000000e-01 -7.341906e-04 -1.000000e+00 -7.390082e-04 -1.100000e+00 -7.429820e-04 -1.200000e+00 -7.465107e-04 -1.000000e-01 -1.317741e-09 -2.000000e-01 -1.359593e-09 -3.000000e-01 -1.385896e-09 -4.000000e-01 -1.410531e-09 -5.000000e-01 -1.435906e-09 -6.000000e-01 -1.463600e-09 -7.000000e-01 -1.495504e-09 -8.000000e-01 -1.534308e-09 -9.000000e-01 -1.584018e-09 -1.000000e+00 -1.650618e-09 -1.100000e+00 -1.742976e-09 -1.200000e+00 -1.874080e-09 -1.000000e-01 -3.924192e-08 -2.000000e-01 -4.046351e-08 -3.000000e-01 -4.120304e-08 -4.000000e-01 -4.186426e-08 -5.000000e-01 -4.249883e-08 -6.000000e-01 -4.312216e-08 -7.000000e-01 -4.374161e-08 -8.000000e-01 -4.436299e-08 -9.000000e-01 -4.499382e-08 -1.000000e+00 -4.564601e-08 -1.100000e+00 -4.633806e-08 -1.200000e+00 -4.709669e-08 -1.000000e-01 -7.622851e-07 -2.000000e-01 -7.860249e-07 -3.000000e-01 -7.993662e-07 -4.000000e-01 -8.110538e-07 -5.000000e-01 -8.221518e-07 -6.000000e-01 -8.329612e-07 -7.000000e-01 -8.436086e-07 -8.000000e-01 -8.541762e-07 -9.000000e-01 -8.647601e-07 -1.000000e+00 -8.755147e-07 -1.100000e+00 -8.866836e-07 -1.200000e+00 -8.986166e-07 -1.000000e-01 -9.232309e-06 -2.000000e-01 -9.628461e-06 -3.000000e-01 -9.778764e-06 -4.000000e-01 -9.899354e-06 -5.000000e-01 -1.001015e-05 -6.000000e-01 -1.011613e-05 -7.000000e-01 -1.021923e-05 -8.000000e-01 -1.032054e-05 -9.000000e-01 -1.042114e-05 -1.000000e+00 -1.052263e-05 -1.100000e+00 -1.062758e-05 -1.200000e+00 -1.073977e-05 -1.000000e-01 -5.286088e-05 -2.000000e-01 -6.047164e-05 -3.000000e-01 -6.166384e-05 -4.000000e-01 -6.235135e-05 -5.000000e-01 -6.292018e-05 -6.000000e-01 -6.343894e-05 -7.000000e-01 -6.392956e-05 -8.000000e-01 -6.440190e-05 -9.000000e-01 -6.486261e-05 -1.000000e+00 -6.531957e-05 -1.100000e+00 -6.578501e-05 -1.200000e+00 -6.627761e-05 -1.000000e-01 -1.327233e-04 -2.000000e-01 -1.828049e-04 -3.000000e-01 -1.919207e-04 -4.000000e-01 -1.946504e-04 -5.000000e-01 -1.964154e-04 -6.000000e-01 -1.978788e-04 -7.000000e-01 -1.991989e-04 -8.000000e-01 -2.004334e-04 -9.000000e-01 -2.016108e-04 -1.000000e+00 -2.027528e-04 -1.100000e+00 -2.038872e-04 -1.200000e+00 -2.050571e-04 -1.000000e-01 -2.275789e-04 -2.000000e-01 -3.551034e-04 -3.000000e-01 -4.008378e-04 -4.000000e-01 -4.119197e-04 -5.000000e-01 -4.166340e-04 -6.000000e-01 -4.199210e-04 -7.000000e-01 -4.226696e-04 -8.000000e-01 -4.251393e-04 -9.000000e-01 -4.274353e-04 -1.000000e+00 -4.296143e-04 -1.100000e+00 -4.317257e-04 -1.200000e+00 -4.338365e-04 -1.000000e-01 -3.321346e-04 -2.000000e-01 -5.526540e-04 -3.000000e-01 -6.701963e-04 -4.000000e-01 -7.115369e-04 -5.000000e-01 -7.247187e-04 -6.000000e-01 -7.317133e-04 -7.000000e-01 -7.368858e-04 -8.000000e-01 -7.412668e-04 -9.000000e-01 -7.452073e-04 -1.000000e+00 -7.488634e-04 -1.100000e+00 -7.523300e-04 -1.200000e+00 -7.557011e-04 -1.000000e-01 -4.470062e-04 -2.000000e-01 -7.714984e-04 -3.000000e-01 -9.803735e-04 -4.000000e-01 -1.085477e-03 -5.000000e-01 -1.123364e-03 -6.000000e-01 -1.138817e-03 -7.000000e-01 -1.148334e-03 -8.000000e-01 -1.155710e-03 -9.000000e-01 -1.162045e-03 -1.000000e+00 -1.167763e-03 -1.100000e+00 -1.173074e-03 -1.200000e+00 -1.178123e-03 -1.000000e-01 -5.746721e-04 -2.000000e-01 -1.015052e-03 -3.000000e-01 -1.328179e-03 -4.000000e-01 -1.521601e-03 -5.000000e-01 -1.613238e-03 -6.000000e-01 -1.648973e-03 -7.000000e-01 -1.666888e-03 -8.000000e-01 -1.679146e-03 -9.000000e-01 -1.689016e-03 -1.000000e+00 -1.697611e-03 -1.100000e+00 -1.705410e-03 -1.200000e+00 -1.712677e-03 -1.000000e-01 -7.189739e-04 -2.000000e-01 -1.290008e-03 -3.000000e-01 -1.720896e-03 -4.000000e-01 -2.018698e-03 -5.000000e-01 -2.192421e-03 -6.000000e-01 -2.270943e-03 -7.000000e-01 -2.305783e-03 -8.000000e-01 -2.326355e-03 -9.000000e-01 -2.341565e-03 -1.000000e+00 -2.354203e-03 -1.100000e+00 -2.365354e-03 -1.200000e+00 -2.375539e-03 -1.000000e-01 -8.854473e-04 -2.000000e-01 -1.606385e-03 -3.000000e-01 -2.171780e-03 -4.000000e-01 -2.589381e-03 -5.000000e-01 -2.865814e-03 -6.000000e-01 -3.014979e-03 -7.000000e-01 -3.082286e-03 -8.000000e-01 -3.117276e-03 -9.000000e-01 -3.140698e-03 -1.000000e+00 -3.159068e-03 -1.100000e+00 -3.174740e-03 -1.200000e+00 -3.188745e-03 -1.000000e-01 -4.682463e-08 -2.000000e-01 -4.866198e-08 -3.000000e-01 -4.935635e-08 -4.000000e-01 -4.992828e-08 -5.000000e-01 -5.046282e-08 -6.000000e-01 -5.098095e-08 -7.000000e-01 -5.149192e-08 -8.000000e-01 -5.200269e-08 -9.000000e-01 -5.252190e-08 -1.000000e+00 -5.306310e-08 -1.100000e+00 -5.364751e-08 -1.200000e+00 -5.430631e-08 -1.000000e-01 -2.651075e-07 -2.000000e-01 -2.763290e-07 -3.000000e-01 -2.802411e-07 -4.000000e-01 -2.834063e-07 -5.000000e-01 -2.863407e-07 -6.000000e-01 -2.891636e-07 -7.000000e-01 -2.919207e-07 -8.000000e-01 -2.946388e-07 -9.000000e-01 -2.973474e-07 -1.000000e+00 -3.000937e-07 -1.100000e+00 -3.029543e-07 -1.200000e+00 -3.060426e-07 -1.000000e-01 -1.357460e-06 -2.000000e-01 -1.438167e-06 -3.000000e-01 -1.458990e-06 -4.000000e-01 -1.474787e-06 -5.000000e-01 -1.489170e-06 -6.000000e-01 -1.502888e-06 -7.000000e-01 -1.516206e-06 -8.000000e-01 -1.529265e-06 -9.000000e-01 -1.542199e-06 -1.000000e+00 -1.555215e-06 -1.100000e+00 -1.568657e-06 -1.200000e+00 -1.583041e-06 -1.000000e-01 -5.449859e-06 -2.000000e-01 -6.244743e-06 -3.000000e-01 -6.357279e-06 -4.000000e-01 -6.423933e-06 -5.000000e-01 -6.481067e-06 -6.000000e-01 -6.534312e-06 -7.000000e-01 -6.585346e-06 -8.000000e-01 -6.634913e-06 -9.000000e-01 -6.683551e-06 -1.000000e+00 -6.731977e-06 -1.100000e+00 -6.781384e-06 -1.200000e+00 -6.833645e-06 -1.000000e-01 -1.367666e-05 -2.000000e-01 -1.867402e-05 -3.000000e-01 -1.948519e-05 -4.000000e-01 -1.972504e-05 -5.000000e-01 -1.989322e-05 -6.000000e-01 -2.004069e-05 -7.000000e-01 -2.017828e-05 -8.000000e-01 -2.030975e-05 -9.000000e-01 -2.043701e-05 -1.000000e+00 -2.056173e-05 -1.100000e+00 -2.068643e-05 -1.200000e+00 -2.081529e-05 -1.000000e-01 -2.321377e-05 -2.000000e-01 -3.645916e-05 -3.000000e-01 -4.122951e-05 -4.000000e-01 -4.226992e-05 -5.000000e-01 -4.269286e-05 -6.000000e-01 -4.300622e-05 -7.000000e-01 -4.328245e-05 -8.000000e-01 -4.353954e-05 -9.000000e-01 -4.378423e-05 -1.000000e+00 -4.402023e-05 -1.100000e+00 -4.425123e-05 -1.200000e+00 -4.448302e-05 -1.000000e-01 -3.176436e-05 -2.000000e-01 -5.357367e-05 -3.000000e-01 -6.580405e-05 -4.000000e-01 -7.031564e-05 -5.000000e-01 -7.157010e-05 -6.000000e-01 -7.218576e-05 -7.000000e-01 -7.265949e-05 -8.000000e-01 -7.307945e-05 -9.000000e-01 -7.347003e-05 -1.000000e+00 -7.384097e-05 -1.100000e+00 -7.419805e-05 -1.200000e+00 -7.454761e-05 -1.000000e-01 -3.883513e-05 -2.000000e-01 -6.809589e-05 -3.000000e-01 -8.793985e-05 -4.000000e-01 -9.886961e-05 -5.000000e-01 -1.030200e-04 -6.000000e-01 -1.044239e-04 -7.000000e-01 -1.052164e-04 -8.000000e-01 -1.058479e-04 -9.000000e-01 -1.064121e-04 -1.000000e+00 -1.069377e-04 -1.100000e+00 -1.074367e-04 -1.200000e+00 -1.079169e-04 -1.000000e-01 -4.459749e-05 -2.000000e-01 -8.011092e-05 -3.000000e-01 -1.066361e-04 -4.000000e-01 -1.243615e-04 -5.000000e-01 -1.339385e-04 -6.000000e-01 -1.377040e-04 -7.000000e-01 -1.392099e-04 -8.000000e-01 -1.401587e-04 -9.000000e-01 -1.409387e-04 -1.000000e+00 -1.416420e-04 -1.100000e+00 -1.422988e-04 -1.200000e+00 -1.429230e-04 -1.000000e-01 -4.930364e-05 -2.000000e-01 -9.003755e-05 -3.000000e-01 -1.222709e-04 -4.000000e-01 -1.461055e-04 -5.000000e-01 -1.617735e-04 -6.000000e-01 -1.700909e-04 -7.000000e-01 -1.735120e-04 -8.000000e-01 -1.750952e-04 -9.000000e-01 -1.761824e-04 -1.000000e+00 -1.771005e-04 -1.100000e+00 -1.779354e-04 -1.200000e+00 -1.787176e-04 -1.000000e-01 -5.315869e-05 -2.000000e-01 -9.825293e-05 -3.000000e-01 -1.353368e-04 -4.000000e-01 -1.644785e-04 -5.000000e-01 -1.857914e-04 -6.000000e-01 -1.995639e-04 -7.000000e-01 -2.067806e-04 -8.000000e-01 -2.099216e-04 -9.000000e-01 -2.115706e-04 -1.000000e+00 -2.127817e-04 -1.100000e+00 -2.138272e-04 -1.200000e+00 -2.147856e-04 -1.000000e-01 -5.631771e-05 -2.000000e-01 -1.050534e-04 -3.000000e-01 -1.462511e-04 -4.000000e-01 -1.799619e-04 -5.000000e-01 -2.062558e-04 -6.000000e-01 -2.252633e-04 -7.000000e-01 -2.373410e-04 -8.000000e-01 -2.436318e-04 -9.000000e-01 -2.465567e-04 -1.000000e+00 -2.482658e-04 -1.100000e+00 -2.495886e-04 -1.200000e+00 -2.507516e-04 tmpk8ny_4pz/tests/bsim4/pmos/reference/acFreq.standard0000644000175000017500000000710513546075722023202 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 1258.925 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 1584.893 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 1995.262 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 2511.886 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 3162.278 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 3981.072 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 5011.872 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 6309.573 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 7943.282 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 10000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 12589.25 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 15848.93 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 19952.62 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 25118.86 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 31622.78 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 39810.72 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 50118.72 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 63095.73 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 79432.82 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 100000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 125892.5 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 158489.3 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 199526.2 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 251188.6 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 316227.8 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 398107.2 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 501187.2 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 630957.3 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 794328.2 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 1000000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 1258925 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 1584893 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 1995262 1.42948476769301e-14 1.06448391595228e-14 3.54785483061325e-15 2511886 1.42948470943482e-14 1.06448442438161e-14 3.54785520806153e-15 3162278 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 3981072 1.42948417584395e-14 1.06448384724498e-14 3.54785452562003e-15 5011872 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 6309573 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 7943282 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 10000000 1.42948449884757e-14 1.06448396362868e-14 3.5478549350642e-15 12589250 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 15848930 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 19952620 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 25118860 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 31622780 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 39810720 1.42948417584395e-14 1.06448384724498e-14 3.54785412584092e-15 50118720 1.42948446924018e-14 1.06448383371022e-14 3.54785497933912e-15 63095730 1.429484429045e-14 1.0644838986873e-14 3.54785421141287e-15 79432820 1.4294844380989e-14 1.06448396032868e-14 3.54785509563488e-15 100000000 1.42948418053768e-14 1.06448380447374e-14 3.54785334351477e-15 tmpk8ny_4pz/tests/bsim4/pmos/reference/acFreq_trnqsmod.standard0000644000175000017500000000710513546075722025131 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 1258.925 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 1584.893 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 1995.262 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 2511.886 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 3162.278 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 3981.072 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 5011.872 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 6309.573 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 7943.282 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 10000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 12589.25 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 15848.93 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 19952.62 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 25118.86 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 31622.78 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 39810.72 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 50118.72 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 63095.73 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 79432.82 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 100000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 125892.5 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 158489.3 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 199526.2 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 251188.6 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 316227.8 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 398107.2 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 501187.2 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 630957.3 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 794328.2 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 1000000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 1258925 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 1584893 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 1995262 1.42948476769301e-14 1.06448391595228e-14 3.54785483061325e-15 2511886 1.42948470943482e-14 1.06448442438161e-14 3.54785520806153e-15 3162278 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 3981072 1.42948417584395e-14 1.06448384724498e-14 3.54785452562003e-15 5011872 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 6309573 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 7943282 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 10000000 1.42948449884757e-14 1.06448396362868e-14 3.5478549350642e-15 12589250 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 15848930 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 19952620 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 25118860 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 31622780 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 39810720 1.42948417584395e-14 1.06448384724498e-14 3.54785412584092e-15 50118720 1.42948446924018e-14 1.06448383371022e-14 3.54785497933912e-15 63095730 1.429484429045e-14 1.0644838986873e-14 3.54785421141287e-15 79432820 1.4294844380989e-14 1.06448396032868e-14 3.54785509563488e-15 100000000 1.42948418053768e-14 1.06448380447374e-14 3.54785334351477e-15 tmpk8ny_4pz/tests/bsim4/pmos/reference/noise2.standard0000644000175000017500000000635013546075722023201 0ustar carstencarstenFreq N(d) 1000 5.663364e-18 1258.925 4.396209e-18 1584.893 3.412583e-18 1995.262 2.649047e-18 2511.886 2.056354e-18 3162.278 1.596278e-18 3981.072 1.239145e-18 5011.872 9.619215e-19 6309.573 7.467277e-19 7943.282 5.796841e-19 10000 4.50017e-19 12589.25 3.493633e-19 15848.93 2.712312e-19 19952.62 2.105813e-19 25118.86 1.63502e-19 31622.78 1.269569e-19 39810.72 9.858882e-20 50118.72 7.656818e-20 63095.73 5.947473e-20 79432.82 4.620599e-20 100000 3.590617e-20 125892.5 2.791096e-20 158489.3 2.17047e-20 199526.2 1.688711e-20 251188.6 1.314747e-20 316227.8 1.024459e-20 398107.2 7.991233e-21 501187.2 6.242072e-21 630957.3 4.884291e-21 794328.2 3.830318e-21 1000000 3.012174e-21 1258925 2.377092e-21 1584893 1.884111e-21 1995262 1.501436e-21 2511886 1.204386e-21 3162278 9.738019e-22 3981072 7.948115e-22 5011872 6.558707e-22 6309573 5.480183e-22 7943282 4.642982e-22 10000000 3.993107e-22 12589250 3.488643e-22 15848930 3.097055e-22 19952620 2.793086e-22 25118860 2.55713e-22 31622780 2.373971e-22 39810720 2.231794e-22 50118720 2.121429e-22 63095730 2.035759e-22 79432820 1.969258e-22 100000000 1.917636e-22 1000 9.363832e-18 1258.925 7.268686e-18 1584.893 5.642335e-18 1995.262 4.379884e-18 2511.886 3.399911e-18 3162.278 2.639209e-18 3981.072 2.048717e-18 5011.872 1.590349e-18 6309.573 1.234542e-18 7943.282 9.583478e-19 10000 7.43953e-19 12589.25 5.775296e-19 15848.93 4.483439e-19 19952.62 3.480639e-19 25118.86 2.702219e-19 31622.78 2.097972e-19 39810.72 1.628927e-19 50118.72 1.264833e-19 63095.73 9.822052e-20 79432.82 7.628165e-20 100000 5.925166e-20 125892.5 4.603218e-20 158489.3 3.57706e-20 199526.2 2.780507e-20 251188.6 2.162186e-20 316227.8 1.682216e-20 398107.2 1.30964e-20 501187.2 1.020429e-20 630957.3 7.959305e-21 794328.2 6.216638e-21 1000000 4.863898e-21 1258925 3.813838e-21 1584893 2.998731e-21 1995262 2.366007e-21 2511886 1.874857e-21 3162278 1.493603e-21 3981072 1.197656e-21 5011872 9.679277e-22 6309573 7.896019e-22 7943282 6.511769e-22 10000000 5.43725e-22 12589250 4.603157e-22 15848930 3.955695e-22 19952620 3.453104e-22 25118860 3.06297e-22 31622780 2.760129e-22 39810720 2.52505e-22 50118720 2.34257e-22 63095730 2.200921e-22 79432820 2.090966e-22 100000000 2.005614e-22 1000 1.250569e-17 1258.925 9.707542e-18 1584.893 7.535489e-18 1995.262 5.849439e-18 2511.886 4.540647e-18 3162.278 3.524702e-18 3981.072 2.736077e-18 5011.872 2.123909e-18 6309.573 1.648716e-18 7943.282 1.279848e-18 10000 9.935157e-19 12589.25 7.71251e-19 15848.93 5.987186e-19 19952.62 4.647909e-19 25118.86 3.608299e-19 31622.78 2.801305e-19 39810.72 2.174878e-19 50118.72 1.688616e-19 63095.73 1.311156e-19 79432.82 1.018154e-19 100000 7.907123e-20 125892.5 6.141612e-20 158489.3 4.771139e-20 199526.2 3.707313e-20 251188.6 2.881521e-20 316227.8 2.240503e-20 398107.2 1.742914e-20 501187.2 1.356662e-20 630957.3 1.056836e-20 794328.2 8.24096e-21 1000000 6.434324e-21 1258925 5.031929e-21 1584893 3.943324e-21 1995262 3.098297e-21 2511886 2.442347e-21 3162278 1.933168e-21 3981072 1.537919e-21 5011872 1.231109e-21 6309573 9.929479e-22 7943282 8.080762e-22 10000000 6.6457e-22 12589250 5.531738e-22 15848930 4.667028e-22 19952620 3.9958e-22 25118860 3.47476e-22 31622780 3.070305e-22 39810720 2.756348e-22 50118720 2.512639e-22 63095730 2.323461e-22 79432820 2.176613e-22 100000000 2.062622e-22 tmpk8ny_4pz/tests/bsim4/pmos/reference/dcSweep_lw9.standard0000644000175000017500000002751213546075722024172 0ustar carstencarstenV(d) I(d) -1.000000e-01 -5.275661e-10 -2.000000e-01 -5.446124e-10 -3.000000e-01 -5.535783e-10 -4.000000e-01 -5.614483e-10 -5.000000e-01 -5.690189e-10 -6.000000e-01 -5.765577e-10 -7.000000e-01 -5.842471e-10 -8.000000e-01 -5.922906e-10 -9.000000e-01 -6.009764e-10 -1.000000e+00 -6.107417e-10 -1.100000e+00 -6.222447e-10 -1.200000e+00 -6.364469e-10 -1.000000e-01 -6.347013e-09 -2.000000e-01 -6.551789e-09 -3.000000e-01 -6.655834e-09 -4.000000e-01 -6.745753e-09 -5.000000e-01 -6.830841e-09 -6.000000e-01 -6.913618e-09 -7.000000e-01 -6.995162e-09 -8.000000e-01 -7.076207e-09 -9.000000e-01 -7.157640e-09 -1.000000e+00 -7.240880e-09 -1.100000e+00 -7.328169e-09 -1.200000e+00 -7.422760e-09 -1.000000e-01 -6.214910e-08 -2.000000e-01 -6.438787e-08 -3.000000e-01 -6.536976e-08 -4.000000e-01 -6.619246e-08 -5.000000e-01 -6.696168e-08 -6.000000e-01 -6.770443e-08 -7.000000e-01 -6.843145e-08 -8.000000e-01 -6.914919e-08 -9.000000e-01 -6.986471e-08 -1.000000e+00 -7.058925e-08 -1.100000e+00 -7.134084e-08 -1.200000e+00 -7.214573e-08 -1.000000e-01 -4.413867e-07 -2.000000e-01 -4.722271e-07 -3.000000e-01 -4.795829e-07 -4.000000e-01 -4.849510e-07 -5.000000e-01 -4.897596e-07 -6.000000e-01 -4.943079e-07 -7.000000e-01 -4.987016e-07 -8.000000e-01 -5.029943e-07 -9.000000e-01 -5.072325e-07 -1.000000e+00 -5.114839e-07 -1.100000e+00 -5.158582e-07 -1.200000e+00 -5.205205e-07 -1.000000e-01 -1.593744e-06 -2.000000e-01 -1.972005e-06 -3.000000e-01 -2.022586e-06 -4.000000e-01 -2.045367e-06 -5.000000e-01 -2.063268e-06 -6.000000e-01 -2.079366e-06 -7.000000e-01 -2.094503e-06 -8.000000e-01 -2.109022e-06 -9.000000e-01 -2.123126e-06 -1.000000e+00 -2.137030e-06 -1.100000e+00 -2.151070e-06 -1.200000e+00 -2.165775e-06 -1.000000e-01 -3.164364e-06 -2.000000e-01 -4.669985e-06 -3.000000e-01 -5.041313e-06 -4.000000e-01 -5.126666e-06 -5.000000e-01 -5.174124e-06 -6.000000e-01 -5.212314e-06 -7.000000e-01 -5.246573e-06 -8.000000e-01 -5.278585e-06 -9.000000e-01 -5.309097e-06 -1.000000e+00 -5.338605e-06 -1.100000e+00 -5.367695e-06 -1.200000e+00 -5.397288e-06 -1.000000e-01 -4.725123e-06 -2.000000e-01 -7.688542e-06 -3.000000e-01 -9.044574e-06 -4.000000e-01 -9.415999e-06 -5.000000e-01 -9.538095e-06 -6.000000e-01 -9.614968e-06 -7.000000e-01 -9.678119e-06 -8.000000e-01 -9.734841e-06 -9.000000e-01 -9.787696e-06 -1.000000e+00 -9.837912e-06 -1.100000e+00 -9.886396e-06 -1.200000e+00 -9.934313e-06 -1.000000e-01 -6.164423e-06 -2.000000e-01 -1.055839e-05 -3.000000e-01 -1.324388e-05 -4.000000e-01 -1.443816e-05 -5.000000e-01 -1.480955e-05 -6.000000e-01 -1.496688e-05 -7.000000e-01 -1.507509e-05 -8.000000e-01 -1.516579e-05 -9.000000e-01 -1.524759e-05 -1.000000e+00 -1.532380e-05 -1.100000e+00 -1.539613e-05 -1.200000e+00 -1.546602e-05 -1.000000e-01 -7.471456e-06 -2.000000e-01 -1.319704e-05 -3.000000e-01 -1.721630e-05 -4.000000e-01 -1.960776e-05 -5.000000e-01 -2.065591e-05 -6.000000e-01 -2.103031e-05 -7.000000e-01 -2.122124e-05 -8.000000e-01 -2.136145e-05 -9.000000e-01 -2.148111e-05 -1.000000e+00 -2.158958e-05 -1.100000e+00 -2.169075e-05 -1.200000e+00 -2.178683e-05 -1.000000e-01 -8.654504e-06 -2.000000e-01 -1.560284e-05 -3.000000e-01 -2.087610e-05 -4.000000e-01 -2.451710e-05 -5.000000e-01 -2.662785e-05 -6.000000e-01 -2.755625e-05 -7.000000e-01 -2.793786e-05 -8.000000e-01 -2.816108e-05 -9.000000e-01 -2.833329e-05 -1.000000e+00 -2.848256e-05 -1.100000e+00 -2.861857e-05 -1.200000e+00 -2.874567e-05 -1.000000e-01 -9.724471e-06 -2.000000e-01 -1.778983e-05 -3.000000e-01 -2.422258e-05 -4.000000e-01 -2.905355e-05 -5.000000e-01 -3.233151e-05 -6.000000e-01 -3.418867e-05 -7.000000e-01 -3.502481e-05 -8.000000e-01 -3.541740e-05 -9.000000e-01 -3.567177e-05 -1.000000e+00 -3.587556e-05 -1.100000e+00 -3.605454e-05 -1.200000e+00 -3.621844e-05 -1.000000e-01 -1.069207e-05 -2.000000e-01 -1.977548e-05 -3.000000e-01 -2.727361e-05 -4.000000e-01 -3.321165e-05 -5.000000e-01 -3.762131e-05 -6.000000e-01 -4.056058e-05 -7.000000e-01 -4.219716e-05 -8.000000e-01 -4.296540e-05 -9.000000e-01 -4.337186e-05 -1.000000e+00 -4.365629e-05 -1.100000e+00 -4.389095e-05 -1.200000e+00 -4.409935e-05 -1.000000e-01 -7.791733e-11 -2.000000e-01 -8.048299e-11 -3.000000e-01 -8.213042e-11 -4.000000e-01 -8.367939e-11 -5.000000e-01 -8.527202e-11 -6.000000e-01 -8.700169e-11 -7.000000e-01 -8.897997e-11 -8.000000e-01 -9.136578e-11 -9.000000e-01 -9.439564e-11 -1.000000e+00 -9.842303e-11 -1.100000e+00 -1.039717e-10 -1.200000e+00 -1.118086e-10 -1.000000e-01 -2.317647e-09 -2.000000e-01 -2.389881e-09 -3.000000e-01 -2.433648e-09 -4.000000e-01 -2.472792e-09 -5.000000e-01 -2.510362e-09 -6.000000e-01 -2.547269e-09 -7.000000e-01 -2.583946e-09 -8.000000e-01 -2.620737e-09 -9.000000e-01 -2.658086e-09 -1.000000e+00 -2.696698e-09 -1.100000e+00 -2.737662e-09 -1.200000e+00 -2.782560e-09 -1.000000e-01 -4.501947e-08 -2.000000e-01 -4.642148e-08 -3.000000e-01 -4.720945e-08 -4.000000e-01 -4.789977e-08 -5.000000e-01 -4.855529e-08 -6.000000e-01 -4.919376e-08 -7.000000e-01 -4.982267e-08 -8.000000e-01 -5.044686e-08 -9.000000e-01 -5.107202e-08 -1.000000e+00 -5.170726e-08 -1.100000e+00 -5.236697e-08 -1.200000e+00 -5.307181e-08 -1.000000e-01 -5.452682e-07 -2.000000e-01 -5.686614e-07 -3.000000e-01 -5.775375e-07 -4.000000e-01 -5.846593e-07 -5.000000e-01 -5.912026e-07 -6.000000e-01 -5.974618e-07 -7.000000e-01 -6.035513e-07 -8.000000e-01 -6.095350e-07 -9.000000e-01 -6.154762e-07 -1.000000e+00 -6.214703e-07 -1.100000e+00 -6.276691e-07 -1.200000e+00 -6.342948e-07 -1.000000e-01 -3.122406e-06 -2.000000e-01 -3.571834e-06 -3.000000e-01 -3.642228e-06 -4.000000e-01 -3.682829e-06 -5.000000e-01 -3.716424e-06 -6.000000e-01 -3.747063e-06 -7.000000e-01 -3.776041e-06 -8.000000e-01 -3.803940e-06 -9.000000e-01 -3.831153e-06 -1.000000e+00 -3.858144e-06 -1.100000e+00 -3.885636e-06 -1.200000e+00 -3.914732e-06 -1.000000e-01 -7.841399e-06 -2.000000e-01 -1.079931e-05 -3.000000e-01 -1.133749e-05 -4.000000e-01 -1.149865e-05 -5.000000e-01 -1.160289e-05 -6.000000e-01 -1.168932e-05 -7.000000e-01 -1.176730e-05 -8.000000e-01 -1.184022e-05 -9.000000e-01 -1.190977e-05 -1.000000e+00 -1.197723e-05 -1.100000e+00 -1.204424e-05 -1.200000e+00 -1.211335e-05 -1.000000e-01 -1.344889e-05 -2.000000e-01 -2.098248e-05 -3.000000e-01 -2.368300e-05 -4.000000e-01 -2.433714e-05 -5.000000e-01 -2.461548e-05 -6.000000e-01 -2.480960e-05 -7.000000e-01 -2.497195e-05 -8.000000e-01 -2.511785e-05 -9.000000e-01 -2.525348e-05 -1.000000e+00 -2.538222e-05 -1.100000e+00 -2.550696e-05 -1.200000e+00 -2.563167e-05 -1.000000e-01 -1.963304e-05 -2.000000e-01 -3.266373e-05 -3.000000e-01 -3.960621e-05 -4.000000e-01 -4.204656e-05 -5.000000e-01 -4.282460e-05 -6.000000e-01 -4.323760e-05 -7.000000e-01 -4.354310e-05 -8.000000e-01 -4.380190e-05 -9.000000e-01 -4.403470e-05 -1.000000e+00 -4.425072e-05 -1.100000e+00 -4.445554e-05 -1.200000e+00 -4.465474e-05 -1.000000e-01 -2.643123e-05 -2.000000e-01 -4.561116e-05 -3.000000e-01 -5.795167e-05 -4.000000e-01 -6.415751e-05 -5.000000e-01 -6.639344e-05 -6.000000e-01 -6.730556e-05 -7.000000e-01 -6.786754e-05 -8.000000e-01 -6.830323e-05 -9.000000e-01 -6.867751e-05 -1.000000e+00 -6.901541e-05 -1.100000e+00 -6.932924e-05 -1.200000e+00 -6.962758e-05 -1.000000e-01 -3.399140e-05 -2.000000e-01 -6.002916e-05 -3.000000e-01 -7.853458e-05 -4.000000e-01 -8.995883e-05 -5.000000e-01 -9.536738e-05 -6.000000e-01 -9.747602e-05 -7.000000e-01 -9.853363e-05 -8.000000e-01 -9.925762e-05 -9.000000e-01 -9.984071e-05 -1.000000e+00 -1.003486e-04 -1.100000e+00 -1.008095e-04 -1.200000e+00 -1.012390e-04 -1.000000e-01 -4.254279e-05 -2.000000e-01 -7.631723e-05 -3.000000e-01 -1.017904e-04 -4.000000e-01 -1.193855e-04 -5.000000e-01 -1.296419e-04 -6.000000e-01 -1.342746e-04 -7.000000e-01 -1.363306e-04 -8.000000e-01 -1.375453e-04 -9.000000e-01 -1.384438e-04 -1.000000e+00 -1.391905e-04 -1.100000e+00 -1.398496e-04 -1.200000e+00 -1.404516e-04 -1.000000e-01 -5.241613e-05 -2.000000e-01 -9.507353e-05 -3.000000e-01 -1.285104e-04 -4.000000e-01 -1.531921e-04 -5.000000e-01 -1.695179e-04 -6.000000e-01 -1.783194e-04 -7.000000e-01 -1.822897e-04 -8.000000e-01 -1.843549e-04 -9.000000e-01 -1.857382e-04 -1.000000e+00 -1.868236e-04 -1.100000e+00 -1.877499e-04 -1.200000e+00 -1.885778e-04 -1.000000e-01 -2.765498e-09 -2.000000e-01 -2.874091e-09 -3.000000e-01 -2.915188e-09 -4.000000e-01 -2.949057e-09 -5.000000e-01 -2.980718e-09 -6.000000e-01 -3.011411e-09 -7.000000e-01 -3.041681e-09 -8.000000e-01 -3.071939e-09 -9.000000e-01 -3.102697e-09 -1.000000e+00 -3.134753e-09 -1.100000e+00 -3.169360e-09 -1.200000e+00 -3.208362e-09 -1.000000e-01 -1.565703e-08 -2.000000e-01 -1.631978e-08 -3.000000e-01 -1.655089e-08 -4.000000e-01 -1.673789e-08 -5.000000e-01 -1.691128e-08 -6.000000e-01 -1.707808e-08 -7.000000e-01 -1.724100e-08 -8.000000e-01 -1.740162e-08 -9.000000e-01 -1.756167e-08 -1.000000e+00 -1.772396e-08 -1.100000e+00 -1.789299e-08 -1.200000e+00 -1.807547e-08 -1.000000e-01 -8.017046e-08 -2.000000e-01 -8.493660e-08 -3.000000e-01 -8.616626e-08 -4.000000e-01 -8.709923e-08 -5.000000e-01 -8.794867e-08 -6.000000e-01 -8.875889e-08 -7.000000e-01 -8.954553e-08 -8.000000e-01 -9.031686e-08 -9.000000e-01 -9.108077e-08 -1.000000e+00 -9.184956e-08 -1.100000e+00 -9.264349e-08 -1.200000e+00 -9.349307e-08 -1.000000e-01 -3.218684e-07 -2.000000e-01 -3.688113e-07 -3.000000e-01 -3.754564e-07 -4.000000e-01 -3.793924e-07 -5.000000e-01 -3.827664e-07 -6.000000e-01 -3.859109e-07 -7.000000e-01 -3.889248e-07 -8.000000e-01 -3.918522e-07 -9.000000e-01 -3.947247e-07 -1.000000e+00 -3.975847e-07 -1.100000e+00 -4.005027e-07 -1.200000e+00 -4.035892e-07 -1.000000e-01 -8.077612e-07 -2.000000e-01 -1.102899e-06 -3.000000e-01 -1.150799e-06 -4.000000e-01 -1.164962e-06 -5.000000e-01 -1.174892e-06 -6.000000e-01 -1.183601e-06 -7.000000e-01 -1.191726e-06 -8.000000e-01 -1.199491e-06 -9.000000e-01 -1.207006e-06 -1.000000e+00 -1.214372e-06 -1.100000e+00 -1.221736e-06 -1.200000e+00 -1.229347e-06 -1.000000e-01 -1.371070e-06 -2.000000e-01 -2.153351e-06 -3.000000e-01 -2.435071e-06 -4.000000e-01 -2.496504e-06 -5.000000e-01 -2.521475e-06 -6.000000e-01 -2.539979e-06 -7.000000e-01 -2.556291e-06 -8.000000e-01 -2.571473e-06 -9.000000e-01 -2.585924e-06 -1.000000e+00 -2.599861e-06 -1.100000e+00 -2.613504e-06 -1.200000e+00 -2.627193e-06 -1.000000e-01 -1.876133e-06 -2.000000e-01 -3.164239e-06 -3.000000e-01 -3.886558e-06 -4.000000e-01 -4.152983e-06 -5.000000e-01 -4.227050e-06 -6.000000e-01 -4.263400e-06 -7.000000e-01 -4.291373e-06 -8.000000e-01 -4.316172e-06 -9.000000e-01 -4.339237e-06 -1.000000e+00 -4.361143e-06 -1.100000e+00 -4.382232e-06 -1.200000e+00 -4.402876e-06 -1.000000e-01 -2.293803e-06 -2.000000e-01 -4.022045e-06 -3.000000e-01 -5.194054e-06 -4.000000e-01 -5.839540e-06 -5.000000e-01 -6.084621e-06 -6.000000e-01 -6.167508e-06 -7.000000e-01 -6.214300e-06 -8.000000e-01 -6.251585e-06 -9.000000e-01 -6.284905e-06 -1.000000e+00 -6.315941e-06 -1.100000e+00 -6.345407e-06 -1.200000e+00 -6.373768e-06 -1.000000e-01 -2.634197e-06 -2.000000e-01 -4.731779e-06 -3.000000e-01 -6.298423e-06 -4.000000e-01 -7.345286e-06 -5.000000e-01 -7.910860e-06 -6.000000e-01 -8.133198e-06 -7.000000e-01 -8.222106e-06 -8.000000e-01 -8.278124e-06 -9.000000e-01 -8.324183e-06 -1.000000e+00 -8.365711e-06 -1.100000e+00 -8.404499e-06 -1.200000e+00 -8.441357e-06 -1.000000e-01 -2.912206e-06 -2.000000e-01 -5.318166e-06 -3.000000e-01 -7.221984e-06 -4.000000e-01 -8.629693e-06 -5.000000e-01 -9.555021e-06 -6.000000e-01 -1.004619e-05 -7.000000e-01 -1.024818e-05 -8.000000e-01 -1.034165e-05 -9.000000e-01 -1.040584e-05 -1.000000e+00 -1.046004e-05 -1.100000e+00 -1.050935e-05 -1.200000e+00 -1.055554e-05 -1.000000e-01 -3.139942e-06 -2.000000e-01 -5.803478e-06 -3.000000e-01 -7.993816e-06 -4.000000e-01 -9.715003e-06 -5.000000e-01 -1.097375e-05 -6.000000e-01 -1.178711e-05 -7.000000e-01 -1.221326e-05 -8.000000e-01 -1.239870e-05 -9.000000e-01 -1.249605e-05 -1.000000e+00 -1.256755e-05 -1.100000e+00 -1.262929e-05 -1.200000e+00 -1.268588e-05 -1.000000e-01 -3.326563e-06 -2.000000e-01 -6.205216e-06 -3.000000e-01 -8.638564e-06 -4.000000e-01 -1.062964e-05 -5.000000e-01 -1.218260e-05 -6.000000e-01 -1.330517e-05 -7.000000e-01 -1.401841e-05 -8.000000e-01 -1.438987e-05 -9.000000e-01 -1.456254e-05 -1.000000e+00 -1.466344e-05 -1.100000e+00 -1.474154e-05 -1.200000e+00 -1.481021e-05 tmpk8ny_4pz/tests/bsim4/pmos/reference/noise1.standard0000644000175000017500000000634713546075722023206 0ustar carstencarstenFreq N(d) 1000 6.383766e-20 1258.925 4.960089e-20 1584.893 3.854963e-20 1995.262 2.997112e-20 2511.886 2.331208e-20 3162.278 1.814302e-20 3981.072 1.413055e-20 5011.872 1.101589e-20 6309.573 8.598135e-21 7943.282 6.721362e-21 10000 5.264523e-21 12589.25 4.133656e-21 15848.93 3.255823e-21 19952.62 2.574408e-21 25118.86 2.045462e-21 31622.78 1.634869e-21 39810.72 1.316147e-21 50118.72 1.06874e-21 63095.73 8.766915e-22 79432.82 7.276141e-22 100000 6.118933e-22 125892.5 5.220653e-22 158489.3 4.523366e-22 199526.2 3.982099e-22 251188.6 3.561942e-22 316227.8 3.235796e-22 398107.2 2.982626e-22 501187.2 2.786104e-22 630957.3 2.633554e-22 794328.2 2.515138e-22 1000000 2.423218e-22 1258925 2.351865e-22 1584893 2.296477e-22 1995262 2.253483e-22 2511886 2.220109e-22 3162278 2.194202e-22 3981072 2.174092e-22 5011872 2.158482e-22 6309573 2.146364e-22 7943282 2.136958e-22 10000000 2.129656e-22 12589250 2.123989e-22 15848930 2.119589e-22 19952620 2.116174e-22 25118860 2.113523e-22 31622780 2.111465e-22 39810720 2.109868e-22 50118720 2.108628e-22 63095730 2.107665e-22 79432820 2.106918e-22 100000000 2.106338e-22 1000 1.110689e-19 1258.925 8.627341e-20 1584.893 6.702595e-20 1995.262 5.208516e-20 2511.886 4.048742e-20 3162.278 3.14847e-20 3981.072 2.449637e-20 5011.872 1.90717e-20 6309.573 1.486081e-20 7943.282 1.159212e-20 10000 9.054814e-21 12589.25 7.085235e-21 15848.93 5.556354e-21 19952.62 4.369565e-21 25118.86 3.448324e-21 31622.78 2.733213e-21 39810.72 2.17811e-21 50118.72 1.747213e-21 63095.73 1.41273e-21 79432.82 1.153089e-21 100000 9.515437e-22 125892.5 7.950944e-22 158489.3 6.736512e-22 199526.2 5.793812e-22 251188.6 5.062044e-22 316227.8 4.494011e-22 398107.2 4.053077e-22 501187.2 3.710803e-22 630957.3 3.445114e-22 794328.2 3.238874e-22 1000000 3.07878e-22 1258925 2.954508e-22 1584893 2.858043e-22 1995262 2.783161e-22 2511886 2.725035e-22 3162278 2.679914e-22 3981072 2.64489e-22 5011872 2.617702e-22 6309573 2.596598e-22 7943282 2.580215e-22 10000000 2.567499e-22 12589250 2.557627e-22 15848930 2.549965e-22 19952620 2.544017e-22 25118860 2.5394e-22 31622780 2.535816e-22 39810720 2.533033e-22 50118720 2.530874e-22 63095730 2.529198e-22 79432820 2.527896e-22 100000000 2.526886e-22 1000 1.627136e-19 1258.925 1.263686e-19 1584.893 9.815594e-20 1995.262 7.625594e-20 2511.886 5.925613e-20 3162.278 4.606007e-20 3981.072 3.581667e-20 5011.872 2.786526e-20 6309.573 2.1693e-20 7943.282 1.69018e-20 10000 1.318264e-20 12589.25 1.029566e-20 15848.93 8.05465e-21 19952.62 6.315071e-21 25118.86 4.964728e-21 31622.78 3.916528e-21 39810.72 3.102865e-21 50118.72 2.471262e-21 63095.73 1.980982e-21 79432.82 1.600404e-21 100000 1.304981e-21 125892.5 1.07566e-21 158489.3 8.9765e-22 199526.2 7.594703e-22 251188.6 6.522087e-22 316227.8 5.689472e-22 398107.2 5.043157e-22 501187.2 4.541457e-22 630957.3 4.152014e-22 794328.2 3.84971e-22 1000000 3.615047e-22 1258925 3.432891e-22 1584893 3.291493e-22 1995262 3.181732e-22 2511886 3.096532e-22 3162278 3.030395e-22 3981072 2.979056e-22 5011872 2.939205e-22 6309573 2.90827e-22 7943282 2.884257e-22 10000000 2.865617e-22 12589250 2.851148e-22 15848930 2.839916e-22 19952620 2.831198e-22 25118860 2.82443e-22 31622780 2.819177e-22 39810720 2.815099e-22 50118720 2.811933e-22 63095730 2.809476e-22 79432820 2.807568e-22 100000000 2.806088e-22 tmpk8ny_4pz/tests/bsim4/pmos/reference/dcSweep_scb.standard0000644000175000017500000002751213546075722024226 0ustar carstencarstenV(d) I(d) -1.000000e-01 -2.060620e-07 -2.000000e-01 -3.951414e-07 -3.000000e-01 -7.284812e-07 -4.000000e-01 -1.318828e-06 -5.000000e-01 -2.352149e-06 -6.000000e-01 -4.136004e-06 -7.000000e-01 -7.171094e-06 -8.000000e-01 -1.225693e-05 -9.000000e-01 -2.063911e-05 -1.000000e+00 -3.419648e-05 -1.100000e+00 -5.565272e-05 -1.200000e+00 -8.879236e-05 -1.000000e-01 -2.347263e-06 -2.000000e-01 -4.298730e-06 -3.000000e-01 -7.531125e-06 -4.000000e-01 -1.290654e-05 -5.000000e-01 -2.169163e-05 -6.000000e-01 -3.569962e-05 -7.000000e-01 -5.733945e-05 -8.000000e-01 -8.952389e-05 -9.000000e-01 -1.354296e-04 -1.000000e+00 -1.982138e-04 -1.100000e+00 -2.808861e-04 -1.200000e+00 -3.865233e-04 -1.000000e-01 -2.087763e-05 -2.000000e-01 -3.608031e-05 -3.000000e-01 -5.844587e-05 -4.000000e-01 -9.107256e-05 -5.000000e-01 -1.367670e-04 -6.000000e-01 -1.979962e-04 -7.000000e-01 -2.766100e-04 -8.000000e-01 -3.737024e-04 -9.000000e-01 -4.896906e-04 -1.000000e+00 -6.246421e-04 -1.100000e+00 -7.788533e-04 -1.200000e+00 -9.536559e-04 -1.000000e-01 -1.173971e-04 -2.000000e-01 -1.876023e-04 -3.000000e-01 -2.657281e-04 -4.000000e-01 -3.594677e-04 -5.000000e-01 -4.698381e-04 -6.000000e-01 -5.967650e-04 -7.000000e-01 -7.397098e-04 -8.000000e-01 -8.979140e-04 -9.000000e-01 -1.070598e-03 -1.000000e+00 -1.257254e-03 -1.100000e+00 -1.458147e-03 -1.200000e+00 -1.675083e-03 -1.000000e-01 -3.223010e-04 -2.000000e-01 -5.203969e-04 -3.000000e-01 -6.746175e-04 -4.000000e-01 -8.307146e-04 -5.000000e-01 -9.967252e-04 -6.000000e-01 -1.173932e-03 -7.000000e-01 -1.362352e-03 -8.000000e-01 -1.561660e-03 -9.000000e-01 -1.771465e-03 -1.000000e+00 -1.991574e-03 -1.100000e+00 -2.222486e-03 -1.200000e+00 -2.466237e-03 -1.000000e-01 -5.499072e-04 -2.000000e-01 -9.317058e-04 -3.000000e-01 -1.193799e-03 -4.000000e-01 -1.411782e-03 -5.000000e-01 -1.623952e-03 -6.000000e-01 -1.839935e-03 -7.000000e-01 -2.062417e-03 -8.000000e-01 -2.292256e-03 -9.000000e-01 -2.529699e-03 -1.000000e+00 -2.774867e-03 -1.100000e+00 -3.028306e-03 -1.200000e+00 -3.291904e-03 -1.000000e-01 -7.549085e-04 -2.000000e-01 -1.322081e-03 -3.000000e-01 -1.730657e-03 -4.000000e-01 -2.033007e-03 -5.000000e-01 -2.295108e-03 -6.000000e-01 -2.547775e-03 -7.000000e-01 -2.800515e-03 -8.000000e-01 -3.056660e-03 -9.000000e-01 -3.317561e-03 -1.000000e+00 -3.583857e-03 -1.100000e+00 -3.856198e-03 -1.200000e+00 -4.136201e-03 -1.000000e-01 -9.321283e-04 -2.000000e-01 -1.667897e-03 -3.000000e-01 -2.231426e-03 -4.000000e-01 -2.650298e-03 -5.000000e-01 -2.979104e-03 -6.000000e-01 -3.273205e-03 -7.000000e-01 -3.556646e-03 -8.000000e-01 -3.837940e-03 -9.000000e-01 -4.120525e-03 -1.000000e+00 -4.405992e-03 -1.100000e+00 -4.695334e-03 -1.200000e+00 -4.989985e-03 -1.000000e-01 -1.084914e-03 -2.000000e-01 -1.970779e-03 -3.000000e-01 -2.679855e-03 -4.000000e-01 -3.230879e-03 -5.000000e-01 -3.652013e-03 -6.000000e-01 -3.999503e-03 -7.000000e-01 -4.317736e-03 -8.000000e-01 -4.625217e-03 -9.000000e-01 -4.929260e-03 -1.000000e+00 -5.233142e-03 -1.100000e+00 -5.538591e-03 -1.200000e+00 -5.847092e-03 -1.000000e-01 -1.217168e-03 -2.000000e-01 -2.236077e-03 -3.000000e-01 -3.077471e-03 -4.000000e-01 -3.757915e-03 -5.000000e-01 -4.291448e-03 -6.000000e-01 -4.711643e-03 -7.000000e-01 -5.073252e-03 -8.000000e-01 -5.410278e-03 -9.000000e-01 -5.736964e-03 -1.000000e+00 -6.059488e-03 -1.100000e+00 -6.380883e-03 -1.200000e+00 -6.703059e-03 -1.000000e-01 -1.332205e-03 -2.000000e-01 -2.469050e-03 -3.000000e-01 -3.429755e-03 -4.000000e-01 -4.229975e-03 -5.000000e-01 -4.880452e-03 -6.000000e-01 -5.394102e-03 -7.000000e-01 -5.813170e-03 -8.000000e-01 -6.186070e-03 -9.000000e-01 -6.538175e-03 -1.000000e+00 -6.880543e-03 -1.100000e+00 -7.218378e-03 -1.200000e+00 -7.554508e-03 -1.000000e-01 -1.432734e-03 -2.000000e-01 -2.674297e-03 -3.000000e-01 -3.742399e-03 -4.000000e-01 -4.651838e-03 -5.000000e-01 -5.413264e-03 -6.000000e-01 -6.031974e-03 -7.000000e-01 -6.526695e-03 -8.000000e-01 -6.945684e-03 -9.000000e-01 -7.328012e-03 -1.000000e+00 -7.692549e-03 -1.100000e+00 -8.047997e-03 -1.200000e+00 -8.398777e-03 -1.000000e-01 -3.879333e-08 -2.000000e-01 -8.828187e-08 -3.000000e-01 -1.926200e-07 -4.000000e-01 -4.098542e-07 -5.000000e-01 -8.505837e-07 -6.000000e-01 -1.717885e-06 -7.000000e-01 -3.370215e-06 -8.000000e-01 -6.421315e-06 -9.000000e-01 -1.190317e-05 -1.000000e+00 -2.152934e-05 -1.100000e+00 -3.808451e-05 -1.200000e+00 -6.591065e-05 -1.000000e-01 -1.051498e-06 -2.000000e-01 -2.181980e-06 -3.000000e-01 -4.274449e-06 -4.000000e-01 -8.077164e-06 -5.000000e-01 -1.481100e-05 -6.000000e-01 -2.642530e-05 -7.000000e-01 -4.585425e-05 -8.000000e-01 -7.711395e-05 -9.000000e-01 -1.250385e-04 -1.000000e+00 -1.946418e-04 -1.100000e+00 -2.904750e-04 -1.200000e+00 -4.165579e-04 -1.000000e-01 -1.718215e-05 -2.000000e-01 -3.176679e-05 -3.000000e-01 -5.528474e-05 -4.000000e-01 -9.222502e-05 -5.000000e-01 -1.472663e-04 -6.000000e-01 -2.244918e-04 -7.000000e-01 -3.265108e-04 -8.000000e-01 -4.540905e-04 -9.000000e-01 -6.064951e-04 -1.000000e+00 -7.823903e-04 -1.100000e+00 -9.810606e-04 -1.200000e+00 -1.203735e-03 -1.000000e-01 -1.549685e-04 -2.000000e-01 -2.491282e-04 -3.000000e-01 -3.621175e-04 -4.000000e-01 -4.984905e-04 -5.000000e-01 -6.574256e-04 -6.000000e-01 -8.368378e-04 -7.000000e-01 -1.034283e-03 -8.000000e-01 -1.247420e-03 -9.000000e-01 -1.474375e-03 -1.000000e+00 -1.714239e-03 -1.100000e+00 -1.967841e-03 -1.200000e+00 -2.238793e-03 -1.000000e-01 -5.686264e-04 -2.000000e-01 -8.429179e-04 -3.000000e-01 -1.065867e-03 -4.000000e-01 -1.290773e-03 -5.000000e-01 -1.523843e-03 -6.000000e-01 -1.765604e-03 -7.000000e-01 -2.015531e-03 -8.000000e-01 -2.272937e-03 -9.000000e-01 -2.537349e-03 -1.000000e+00 -2.809054e-03 -1.100000e+00 -3.090040e-03 -1.200000e+00 -3.385297e-03 -1.000000e-01 -1.086977e-03 -2.000000e-01 -1.656781e-03 -3.000000e-01 -1.995893e-03 -4.000000e-01 -2.285579e-03 -5.000000e-01 -2.565411e-03 -6.000000e-01 -2.844174e-03 -7.000000e-01 -3.124581e-03 -8.000000e-01 -3.407622e-03 -9.000000e-01 -3.693818e-03 -1.000000e+00 -3.984069e-03 -1.100000e+00 -4.280833e-03 -1.200000e+00 -4.589701e-03 -1.000000e-01 -1.574189e-03 -2.000000e-01 -2.504213e-03 -3.000000e-01 -3.012338e-03 -4.000000e-01 -3.370575e-03 -5.000000e-01 -3.690079e-03 -6.000000e-01 -3.997000e-03 -7.000000e-01 -4.299341e-03 -8.000000e-01 -4.600280e-03 -9.000000e-01 -4.901406e-03 -1.000000e+00 -5.204133e-03 -1.100000e+00 -5.511135e-03 -1.200000e+00 -5.828196e-03 -1.000000e-01 -2.011992e-03 -2.000000e-01 -3.305813e-03 -3.000000e-01 -4.046128e-03 -4.000000e-01 -4.495270e-03 -5.000000e-01 -4.857153e-03 -6.000000e-01 -5.190136e-03 -7.000000e-01 -5.511099e-03 -8.000000e-01 -5.826437e-03 -9.000000e-01 -6.139159e-03 -1.000000e+00 -6.451299e-03 -1.100000e+00 -6.765687e-03 -1.200000e+00 -7.088064e-03 -1.000000e-01 -2.406050e-03 -2.000000e-01 -4.044688e-03 -3.000000e-01 -5.056892e-03 -4.000000e-01 -5.631826e-03 -5.000000e-01 -6.044962e-03 -6.000000e-01 -6.405357e-03 -7.000000e-01 -6.744132e-03 -8.000000e-01 -7.072396e-03 -9.000000e-01 -7.395090e-03 -1.000000e+00 -7.715076e-03 -1.100000e+00 -8.035387e-03 -1.200000e+00 -8.361602e-03 -1.000000e-01 -2.764419e-03 -2.000000e-01 -4.725470e-03 -3.000000e-01 -6.021583e-03 -4.000000e-01 -6.761599e-03 -5.000000e-01 -7.240069e-03 -6.000000e-01 -7.631563e-03 -7.000000e-01 -7.988799e-03 -8.000000e-01 -8.329639e-03 -9.000000e-01 -8.661621e-03 -1.000000e+00 -8.988710e-03 -1.100000e+00 -9.314254e-03 -1.200000e+00 -9.643637e-03 -1.000000e-01 -3.094289e-03 -2.000000e-01 -5.357200e-03 -3.000000e-01 -6.932087e-03 -4.000000e-01 -7.870787e-03 -5.000000e-01 -8.433142e-03 -6.000000e-01 -8.861304e-03 -7.000000e-01 -9.238622e-03 -8.000000e-01 -9.592364e-03 -9.000000e-01 -9.933499e-03 -1.000000e+00 -1.026742e-02 -1.100000e+00 -1.059795e-02 -1.200000e+00 -1.093030e-02 -1.000000e-01 -3.401616e-03 -2.000000e-01 -5.948752e-03 -3.000000e-01 -7.790505e-03 -4.000000e-01 -8.949355e-03 -5.000000e-01 -9.617087e-03 -6.000000e-01 -1.008911e-02 -7.000000e-01 -1.048881e-02 -8.000000e-01 -1.085620e-02 -9.000000e-01 -1.120669e-02 -1.000000e+00 -1.154744e-02 -1.100000e+00 -1.188296e-02 -1.200000e+00 -1.221838e-02 -1.000000e-01 -8.631823e-07 -2.000000e-01 -1.438465e-06 -3.000000e-01 -2.301954e-06 -4.000000e-01 -3.640786e-06 -5.000000e-01 -5.713048e-06 -6.000000e-01 -8.903592e-06 -7.000000e-01 -1.378053e-05 -8.000000e-01 -2.116612e-05 -9.000000e-01 -3.222254e-05 -1.000000e+00 -4.855402e-05 -1.100000e+00 -7.233194e-05 -1.200000e+00 -1.064627e-04 -1.000000e-01 -4.738432e-06 -2.000000e-01 -7.771790e-06 -3.000000e-01 -1.215502e-05 -4.000000e-01 -1.871780e-05 -5.000000e-01 -2.844887e-05 -6.000000e-01 -4.263590e-05 -7.000000e-01 -6.288044e-05 -8.000000e-01 -9.105910e-05 -9.000000e-01 -1.292439e-04 -1.000000e+00 -1.796264e-04 -1.100000e+00 -2.445230e-04 -1.200000e+00 -3.265444e-04 -1.000000e-01 -2.268007e-05 -2.000000e-01 -3.671152e-05 -3.000000e-01 -5.476309e-05 -4.000000e-01 -7.941424e-05 -5.000000e-01 -1.123910e-04 -6.000000e-01 -1.553284e-04 -7.000000e-01 -2.097071e-04 -8.000000e-01 -2.767683e-04 -9.000000e-01 -3.574843e-04 -1.000000e+00 -4.526342e-04 -1.100000e+00 -5.630370e-04 -1.200000e+00 -6.899760e-04 -1.000000e-01 -7.795475e-05 -2.000000e-01 -1.282318e-04 -3.000000e-01 -1.771714e-04 -4.000000e-01 -2.351306e-04 -5.000000e-01 -3.039484e-04 -6.000000e-01 -3.843620e-04 -7.000000e-01 -4.767616e-04 -8.000000e-01 -5.813319e-04 -9.000000e-01 -6.981353e-04 -1.000000e+00 -8.272296e-04 -1.100000e+00 -9.688989e-04 -1.200000e+00 -1.124067e-03 -1.000000e-01 -1.673901e-04 -2.000000e-01 -2.919364e-04 -3.000000e-01 -3.883247e-04 -4.000000e-01 -4.824540e-04 -5.000000e-01 -5.840218e-04 -6.000000e-01 -6.949196e-04 -7.000000e-01 -8.156634e-04 -8.000000e-01 -9.464442e-04 -9.000000e-01 -1.087345e-03 -1.000000e+00 -1.238445e-03 -1.100000e+00 -1.399981e-03 -1.200000e+00 -1.572708e-03 -1.000000e-01 -2.588371e-04 -2.000000e-01 -4.692309e-04 -3.000000e-01 -6.339755e-04 -4.000000e-01 -7.697756e-04 -5.000000e-01 -9.000296e-04 -6.000000e-01 -1.034706e-03 -7.000000e-01 -1.176490e-03 -8.000000e-01 -1.326331e-03 -9.000000e-01 -1.484682e-03 -1.000000e+00 -1.651817e-03 -1.100000e+00 -1.828002e-03 -1.200000e+00 -2.013786e-03 -1.000000e-01 -3.361522e-04 -2.000000e-01 -6.223509e-04 -3.000000e-01 -8.590640e-04 -4.000000e-01 -1.051343e-03 -5.000000e-01 -1.216291e-03 -6.000000e-01 -1.374418e-03 -7.000000e-01 -1.535064e-03 -8.000000e-01 -1.701326e-03 -9.000000e-01 -1.874467e-03 -1.000000e+00 -2.055136e-03 -1.100000e+00 -2.243738e-03 -1.200000e+00 -2.440708e-03 -1.000000e-01 -3.982960e-04 -2.000000e-01 -7.475021e-04 -3.000000e-01 -1.047766e-03 -4.000000e-01 -1.300607e-03 -5.000000e-01 -1.512522e-03 -6.000000e-01 -1.700307e-03 -7.000000e-01 -1.881387e-03 -8.000000e-01 -2.063944e-03 -9.000000e-01 -2.251100e-03 -1.000000e+00 -2.444264e-03 -1.100000e+00 -2.644189e-03 -1.200000e+00 -2.851384e-03 -1.000000e-01 -4.480843e-04 -2.000000e-01 -8.492217e-04 -3.000000e-01 -1.203480e-03 -4.000000e-01 -1.511457e-03 -5.000000e-01 -1.775348e-03 -6.000000e-01 -2.002718e-03 -7.000000e-01 -2.209489e-03 -8.000000e-01 -2.410171e-03 -9.000000e-01 -2.611741e-03 -1.000000e+00 -2.817167e-03 -1.100000e+00 -3.027893e-03 -1.200000e+00 -3.244733e-03 -1.000000e-01 -4.882235e-04 -2.000000e-01 -9.322170e-04 -3.000000e-01 -1.331985e-03 -4.000000e-01 -1.687793e-03 -5.000000e-01 -2.000500e-03 -6.000000e-01 -2.272881e-03 -7.000000e-01 -2.513269e-03 -8.000000e-01 -2.736309e-03 -9.000000e-01 -2.953975e-03 -1.000000e+00 -3.172185e-03 -1.100000e+00 -3.393685e-03 -1.200000e+00 -3.619898e-03 -1.000000e-01 -5.207382e-04 -2.000000e-01 -1.000148e-03 -3.000000e-01 -1.438171e-03 -4.000000e-01 -1.834903e-03 -5.000000e-01 -2.190712e-03 -6.000000e-01 -2.506681e-03 -7.000000e-01 -2.786141e-03 -8.000000e-01 -3.037894e-03 -9.000000e-01 -3.275081e-03 -1.000000e+00 -3.507574e-03 -1.100000e+00 -3.740411e-03 -1.200000e+00 -3.976102e-03 -1.000000e-01 -5.471142e-04 -2.000000e-01 -1.055787e-03 -3.000000e-01 -1.525902e-03 -4.000000e-01 -1.957446e-03 -5.000000e-01 -2.350558e-03 -6.000000e-01 -2.705694e-03 -7.000000e-01 -3.024166e-03 -8.000000e-01 -3.309845e-03 -9.000000e-01 -3.571700e-03 -1.000000e+00 -3.821301e-03 -1.100000e+00 -4.066818e-03 -1.200000e+00 -4.312571e-03 tmpk8ny_4pz/tests/bsim4/pmos/reference/acFreq_xpart.standard0000644000175000017500000000710513546075722024420 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 1258.925 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 1584.893 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 1995.262 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 2511.886 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 3162.278 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 3981.072 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 5011.872 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 6309.573 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 7943.282 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 10000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 12589.25 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 15848.93 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 19952.62 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 25118.86 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 31622.78 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 39810.72 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 50118.72 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 63095.73 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 79432.82 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 100000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 125892.5 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 158489.3 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 199526.2 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 251188.6 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 316227.8 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 398107.2 1.42948457562307e-14 1.06448384724498e-14 3.54785452562003e-15 501187.2 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 630957.3 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 794328.2 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 1000000 1.42948449884757e-14 1.06448396362868e-14 3.54785493506421e-15 1258925 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 1584893 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 1995262 1.42948476769301e-14 1.06448391595228e-14 3.54785483061325e-15 2511886 1.42948470943482e-14 1.06448442438161e-14 3.54785520806153e-15 3162278 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 3981072 1.42948417584395e-14 1.06448384724498e-14 3.54785452562003e-15 5011872 1.42948446924018e-14 1.0644841512661e-14 3.54785497933912e-15 6309573 1.4294846812886e-14 1.0644841509309e-14 3.54785421141287e-15 7943282 1.42948463846311e-14 1.06448396032868e-14 3.54785509563488e-15 10000000 1.42948449884757e-14 1.06448396362868e-14 3.5478549350642e-15 12589250 1.4294849014615e-14 1.06448433989009e-14 3.54785593597329e-15 15848930 1.42948461770587e-14 1.06448405435312e-14 3.54785540460901e-15 19952620 1.42948476769301e-14 1.06448391595228e-14 3.54785483061324e-15 25118860 1.42948470943483e-14 1.06448442438161e-14 3.54785520806154e-15 31622780 1.42948435243749e-14 1.06448385988508e-14 3.5478542511537e-15 39810720 1.42948417584395e-14 1.06448384724498e-14 3.54785412584092e-15 50118720 1.42948446924018e-14 1.06448383371022e-14 3.54785497933912e-15 63095730 1.429484429045e-14 1.0644838986873e-14 3.54785421141287e-15 79432820 1.4294844380989e-14 1.06448396032868e-14 3.54785509563488e-15 100000000 1.42948418053768e-14 1.06448380447374e-14 3.54785334351477e-15 tmpk8ny_4pz/tests/bsim4/pmos/reference/dcSweep_lw1.standard0000644000175000017500000002751213546075722024162 0ustar carstencarstenV(d) I(d) -1.000000e-01 -2.060620e-07 -2.000000e-01 -3.951414e-07 -3.000000e-01 -7.284812e-07 -4.000000e-01 -1.318828e-06 -5.000000e-01 -2.352149e-06 -6.000000e-01 -4.136004e-06 -7.000000e-01 -7.171094e-06 -8.000000e-01 -1.225693e-05 -9.000000e-01 -2.063911e-05 -1.000000e+00 -3.419648e-05 -1.100000e+00 -5.565272e-05 -1.200000e+00 -8.879236e-05 -1.000000e-01 -2.347263e-06 -2.000000e-01 -4.298730e-06 -3.000000e-01 -7.531125e-06 -4.000000e-01 -1.290654e-05 -5.000000e-01 -2.169163e-05 -6.000000e-01 -3.569962e-05 -7.000000e-01 -5.733945e-05 -8.000000e-01 -8.952389e-05 -9.000000e-01 -1.354296e-04 -1.000000e+00 -1.982138e-04 -1.100000e+00 -2.808861e-04 -1.200000e+00 -3.865233e-04 -1.000000e-01 -2.087763e-05 -2.000000e-01 -3.608031e-05 -3.000000e-01 -5.844587e-05 -4.000000e-01 -9.107256e-05 -5.000000e-01 -1.367670e-04 -6.000000e-01 -1.979962e-04 -7.000000e-01 -2.766100e-04 -8.000000e-01 -3.737024e-04 -9.000000e-01 -4.896906e-04 -1.000000e+00 -6.246421e-04 -1.100000e+00 -7.788533e-04 -1.200000e+00 -9.536559e-04 -1.000000e-01 -1.173971e-04 -2.000000e-01 -1.876023e-04 -3.000000e-01 -2.657281e-04 -4.000000e-01 -3.594677e-04 -5.000000e-01 -4.698381e-04 -6.000000e-01 -5.967650e-04 -7.000000e-01 -7.397098e-04 -8.000000e-01 -8.979140e-04 -9.000000e-01 -1.070598e-03 -1.000000e+00 -1.257254e-03 -1.100000e+00 -1.458147e-03 -1.200000e+00 -1.675083e-03 -1.000000e-01 -3.223010e-04 -2.000000e-01 -5.203969e-04 -3.000000e-01 -6.746175e-04 -4.000000e-01 -8.307146e-04 -5.000000e-01 -9.967252e-04 -6.000000e-01 -1.173932e-03 -7.000000e-01 -1.362352e-03 -8.000000e-01 -1.561660e-03 -9.000000e-01 -1.771465e-03 -1.000000e+00 -1.991574e-03 -1.100000e+00 -2.222486e-03 -1.200000e+00 -2.466237e-03 -1.000000e-01 -5.499072e-04 -2.000000e-01 -9.317058e-04 -3.000000e-01 -1.193799e-03 -4.000000e-01 -1.411782e-03 -5.000000e-01 -1.623952e-03 -6.000000e-01 -1.839935e-03 -7.000000e-01 -2.062417e-03 -8.000000e-01 -2.292256e-03 -9.000000e-01 -2.529699e-03 -1.000000e+00 -2.774867e-03 -1.100000e+00 -3.028306e-03 -1.200000e+00 -3.291904e-03 -1.000000e-01 -7.549085e-04 -2.000000e-01 -1.322081e-03 -3.000000e-01 -1.730657e-03 -4.000000e-01 -2.033007e-03 -5.000000e-01 -2.295108e-03 -6.000000e-01 -2.547775e-03 -7.000000e-01 -2.800515e-03 -8.000000e-01 -3.056660e-03 -9.000000e-01 -3.317561e-03 -1.000000e+00 -3.583857e-03 -1.100000e+00 -3.856198e-03 -1.200000e+00 -4.136201e-03 -1.000000e-01 -9.321283e-04 -2.000000e-01 -1.667897e-03 -3.000000e-01 -2.231426e-03 -4.000000e-01 -2.650298e-03 -5.000000e-01 -2.979104e-03 -6.000000e-01 -3.273205e-03 -7.000000e-01 -3.556646e-03 -8.000000e-01 -3.837940e-03 -9.000000e-01 -4.120525e-03 -1.000000e+00 -4.405992e-03 -1.100000e+00 -4.695334e-03 -1.200000e+00 -4.989985e-03 -1.000000e-01 -1.084914e-03 -2.000000e-01 -1.970779e-03 -3.000000e-01 -2.679855e-03 -4.000000e-01 -3.230879e-03 -5.000000e-01 -3.652013e-03 -6.000000e-01 -3.999503e-03 -7.000000e-01 -4.317736e-03 -8.000000e-01 -4.625217e-03 -9.000000e-01 -4.929260e-03 -1.000000e+00 -5.233142e-03 -1.100000e+00 -5.538591e-03 -1.200000e+00 -5.847092e-03 -1.000000e-01 -1.217168e-03 -2.000000e-01 -2.236077e-03 -3.000000e-01 -3.077471e-03 -4.000000e-01 -3.757915e-03 -5.000000e-01 -4.291448e-03 -6.000000e-01 -4.711643e-03 -7.000000e-01 -5.073252e-03 -8.000000e-01 -5.410278e-03 -9.000000e-01 -5.736964e-03 -1.000000e+00 -6.059488e-03 -1.100000e+00 -6.380883e-03 -1.200000e+00 -6.703059e-03 -1.000000e-01 -1.332205e-03 -2.000000e-01 -2.469050e-03 -3.000000e-01 -3.429755e-03 -4.000000e-01 -4.229975e-03 -5.000000e-01 -4.880452e-03 -6.000000e-01 -5.394102e-03 -7.000000e-01 -5.813170e-03 -8.000000e-01 -6.186070e-03 -9.000000e-01 -6.538175e-03 -1.000000e+00 -6.880543e-03 -1.100000e+00 -7.218378e-03 -1.200000e+00 -7.554508e-03 -1.000000e-01 -1.432734e-03 -2.000000e-01 -2.674297e-03 -3.000000e-01 -3.742399e-03 -4.000000e-01 -4.651838e-03 -5.000000e-01 -5.413264e-03 -6.000000e-01 -6.031974e-03 -7.000000e-01 -6.526695e-03 -8.000000e-01 -6.945684e-03 -9.000000e-01 -7.328012e-03 -1.000000e+00 -7.692549e-03 -1.100000e+00 -8.047997e-03 -1.200000e+00 -8.398777e-03 -1.000000e-01 -3.879333e-08 -2.000000e-01 -8.828187e-08 -3.000000e-01 -1.926200e-07 -4.000000e-01 -4.098542e-07 -5.000000e-01 -8.505837e-07 -6.000000e-01 -1.717885e-06 -7.000000e-01 -3.370215e-06 -8.000000e-01 -6.421315e-06 -9.000000e-01 -1.190317e-05 -1.000000e+00 -2.152934e-05 -1.100000e+00 -3.808451e-05 -1.200000e+00 -6.591065e-05 -1.000000e-01 -1.051498e-06 -2.000000e-01 -2.181980e-06 -3.000000e-01 -4.274449e-06 -4.000000e-01 -8.077164e-06 -5.000000e-01 -1.481100e-05 -6.000000e-01 -2.642530e-05 -7.000000e-01 -4.585425e-05 -8.000000e-01 -7.711395e-05 -9.000000e-01 -1.250385e-04 -1.000000e+00 -1.946418e-04 -1.100000e+00 -2.904750e-04 -1.200000e+00 -4.165579e-04 -1.000000e-01 -1.718215e-05 -2.000000e-01 -3.176679e-05 -3.000000e-01 -5.528474e-05 -4.000000e-01 -9.222502e-05 -5.000000e-01 -1.472663e-04 -6.000000e-01 -2.244918e-04 -7.000000e-01 -3.265108e-04 -8.000000e-01 -4.540905e-04 -9.000000e-01 -6.064951e-04 -1.000000e+00 -7.823903e-04 -1.100000e+00 -9.810606e-04 -1.200000e+00 -1.203735e-03 -1.000000e-01 -1.549685e-04 -2.000000e-01 -2.491282e-04 -3.000000e-01 -3.621175e-04 -4.000000e-01 -4.984905e-04 -5.000000e-01 -6.574256e-04 -6.000000e-01 -8.368378e-04 -7.000000e-01 -1.034283e-03 -8.000000e-01 -1.247420e-03 -9.000000e-01 -1.474375e-03 -1.000000e+00 -1.714239e-03 -1.100000e+00 -1.967841e-03 -1.200000e+00 -2.238793e-03 -1.000000e-01 -5.686264e-04 -2.000000e-01 -8.429179e-04 -3.000000e-01 -1.065867e-03 -4.000000e-01 -1.290773e-03 -5.000000e-01 -1.523843e-03 -6.000000e-01 -1.765604e-03 -7.000000e-01 -2.015531e-03 -8.000000e-01 -2.272937e-03 -9.000000e-01 -2.537349e-03 -1.000000e+00 -2.809054e-03 -1.100000e+00 -3.090040e-03 -1.200000e+00 -3.385297e-03 -1.000000e-01 -1.086977e-03 -2.000000e-01 -1.656781e-03 -3.000000e-01 -1.995893e-03 -4.000000e-01 -2.285579e-03 -5.000000e-01 -2.565411e-03 -6.000000e-01 -2.844174e-03 -7.000000e-01 -3.124581e-03 -8.000000e-01 -3.407622e-03 -9.000000e-01 -3.693818e-03 -1.000000e+00 -3.984069e-03 -1.100000e+00 -4.280833e-03 -1.200000e+00 -4.589701e-03 -1.000000e-01 -1.574189e-03 -2.000000e-01 -2.504213e-03 -3.000000e-01 -3.012338e-03 -4.000000e-01 -3.370575e-03 -5.000000e-01 -3.690079e-03 -6.000000e-01 -3.997000e-03 -7.000000e-01 -4.299341e-03 -8.000000e-01 -4.600280e-03 -9.000000e-01 -4.901406e-03 -1.000000e+00 -5.204133e-03 -1.100000e+00 -5.511135e-03 -1.200000e+00 -5.828196e-03 -1.000000e-01 -2.011992e-03 -2.000000e-01 -3.305813e-03 -3.000000e-01 -4.046128e-03 -4.000000e-01 -4.495270e-03 -5.000000e-01 -4.857153e-03 -6.000000e-01 -5.190136e-03 -7.000000e-01 -5.511099e-03 -8.000000e-01 -5.826437e-03 -9.000000e-01 -6.139159e-03 -1.000000e+00 -6.451299e-03 -1.100000e+00 -6.765687e-03 -1.200000e+00 -7.088064e-03 -1.000000e-01 -2.406050e-03 -2.000000e-01 -4.044688e-03 -3.000000e-01 -5.056892e-03 -4.000000e-01 -5.631826e-03 -5.000000e-01 -6.044962e-03 -6.000000e-01 -6.405357e-03 -7.000000e-01 -6.744132e-03 -8.000000e-01 -7.072396e-03 -9.000000e-01 -7.395090e-03 -1.000000e+00 -7.715076e-03 -1.100000e+00 -8.035387e-03 -1.200000e+00 -8.361602e-03 -1.000000e-01 -2.764419e-03 -2.000000e-01 -4.725470e-03 -3.000000e-01 -6.021583e-03 -4.000000e-01 -6.761599e-03 -5.000000e-01 -7.240069e-03 -6.000000e-01 -7.631563e-03 -7.000000e-01 -7.988799e-03 -8.000000e-01 -8.329639e-03 -9.000000e-01 -8.661621e-03 -1.000000e+00 -8.988710e-03 -1.100000e+00 -9.314254e-03 -1.200000e+00 -9.643637e-03 -1.000000e-01 -3.094289e-03 -2.000000e-01 -5.357200e-03 -3.000000e-01 -6.932087e-03 -4.000000e-01 -7.870787e-03 -5.000000e-01 -8.433142e-03 -6.000000e-01 -8.861304e-03 -7.000000e-01 -9.238622e-03 -8.000000e-01 -9.592364e-03 -9.000000e-01 -9.933499e-03 -1.000000e+00 -1.026742e-02 -1.100000e+00 -1.059795e-02 -1.200000e+00 -1.093030e-02 -1.000000e-01 -3.401616e-03 -2.000000e-01 -5.948752e-03 -3.000000e-01 -7.790505e-03 -4.000000e-01 -8.949355e-03 -5.000000e-01 -9.617087e-03 -6.000000e-01 -1.008911e-02 -7.000000e-01 -1.048881e-02 -8.000000e-01 -1.085620e-02 -9.000000e-01 -1.120669e-02 -1.000000e+00 -1.154744e-02 -1.100000e+00 -1.188296e-02 -1.200000e+00 -1.221838e-02 -1.000000e-01 -8.631823e-07 -2.000000e-01 -1.438465e-06 -3.000000e-01 -2.301954e-06 -4.000000e-01 -3.640786e-06 -5.000000e-01 -5.713048e-06 -6.000000e-01 -8.903592e-06 -7.000000e-01 -1.378053e-05 -8.000000e-01 -2.116612e-05 -9.000000e-01 -3.222254e-05 -1.000000e+00 -4.855402e-05 -1.100000e+00 -7.233194e-05 -1.200000e+00 -1.064627e-04 -1.000000e-01 -4.738432e-06 -2.000000e-01 -7.771790e-06 -3.000000e-01 -1.215502e-05 -4.000000e-01 -1.871780e-05 -5.000000e-01 -2.844887e-05 -6.000000e-01 -4.263590e-05 -7.000000e-01 -6.288044e-05 -8.000000e-01 -9.105910e-05 -9.000000e-01 -1.292439e-04 -1.000000e+00 -1.796264e-04 -1.100000e+00 -2.445230e-04 -1.200000e+00 -3.265444e-04 -1.000000e-01 -2.268007e-05 -2.000000e-01 -3.671152e-05 -3.000000e-01 -5.476309e-05 -4.000000e-01 -7.941424e-05 -5.000000e-01 -1.123910e-04 -6.000000e-01 -1.553284e-04 -7.000000e-01 -2.097071e-04 -8.000000e-01 -2.767683e-04 -9.000000e-01 -3.574843e-04 -1.000000e+00 -4.526342e-04 -1.100000e+00 -5.630370e-04 -1.200000e+00 -6.899760e-04 -1.000000e-01 -7.795475e-05 -2.000000e-01 -1.282318e-04 -3.000000e-01 -1.771714e-04 -4.000000e-01 -2.351306e-04 -5.000000e-01 -3.039484e-04 -6.000000e-01 -3.843620e-04 -7.000000e-01 -4.767616e-04 -8.000000e-01 -5.813319e-04 -9.000000e-01 -6.981353e-04 -1.000000e+00 -8.272296e-04 -1.100000e+00 -9.688989e-04 -1.200000e+00 -1.124067e-03 -1.000000e-01 -1.673901e-04 -2.000000e-01 -2.919364e-04 -3.000000e-01 -3.883247e-04 -4.000000e-01 -4.824540e-04 -5.000000e-01 -5.840218e-04 -6.000000e-01 -6.949196e-04 -7.000000e-01 -8.156634e-04 -8.000000e-01 -9.464442e-04 -9.000000e-01 -1.087345e-03 -1.000000e+00 -1.238445e-03 -1.100000e+00 -1.399981e-03 -1.200000e+00 -1.572708e-03 -1.000000e-01 -2.588371e-04 -2.000000e-01 -4.692309e-04 -3.000000e-01 -6.339755e-04 -4.000000e-01 -7.697756e-04 -5.000000e-01 -9.000296e-04 -6.000000e-01 -1.034706e-03 -7.000000e-01 -1.176490e-03 -8.000000e-01 -1.326331e-03 -9.000000e-01 -1.484682e-03 -1.000000e+00 -1.651817e-03 -1.100000e+00 -1.828002e-03 -1.200000e+00 -2.013786e-03 -1.000000e-01 -3.361522e-04 -2.000000e-01 -6.223509e-04 -3.000000e-01 -8.590640e-04 -4.000000e-01 -1.051343e-03 -5.000000e-01 -1.216291e-03 -6.000000e-01 -1.374418e-03 -7.000000e-01 -1.535064e-03 -8.000000e-01 -1.701326e-03 -9.000000e-01 -1.874467e-03 -1.000000e+00 -2.055136e-03 -1.100000e+00 -2.243738e-03 -1.200000e+00 -2.440708e-03 -1.000000e-01 -3.982960e-04 -2.000000e-01 -7.475021e-04 -3.000000e-01 -1.047766e-03 -4.000000e-01 -1.300607e-03 -5.000000e-01 -1.512522e-03 -6.000000e-01 -1.700307e-03 -7.000000e-01 -1.881387e-03 -8.000000e-01 -2.063944e-03 -9.000000e-01 -2.251100e-03 -1.000000e+00 -2.444264e-03 -1.100000e+00 -2.644189e-03 -1.200000e+00 -2.851384e-03 -1.000000e-01 -4.480843e-04 -2.000000e-01 -8.492217e-04 -3.000000e-01 -1.203480e-03 -4.000000e-01 -1.511457e-03 -5.000000e-01 -1.775348e-03 -6.000000e-01 -2.002718e-03 -7.000000e-01 -2.209489e-03 -8.000000e-01 -2.410171e-03 -9.000000e-01 -2.611741e-03 -1.000000e+00 -2.817167e-03 -1.100000e+00 -3.027893e-03 -1.200000e+00 -3.244733e-03 -1.000000e-01 -4.882235e-04 -2.000000e-01 -9.322170e-04 -3.000000e-01 -1.331985e-03 -4.000000e-01 -1.687793e-03 -5.000000e-01 -2.000500e-03 -6.000000e-01 -2.272881e-03 -7.000000e-01 -2.513269e-03 -8.000000e-01 -2.736309e-03 -9.000000e-01 -2.953975e-03 -1.000000e+00 -3.172185e-03 -1.100000e+00 -3.393685e-03 -1.200000e+00 -3.619898e-03 -1.000000e-01 -5.207382e-04 -2.000000e-01 -1.000148e-03 -3.000000e-01 -1.438171e-03 -4.000000e-01 -1.834903e-03 -5.000000e-01 -2.190712e-03 -6.000000e-01 -2.506681e-03 -7.000000e-01 -2.786141e-03 -8.000000e-01 -3.037894e-03 -9.000000e-01 -3.275081e-03 -1.000000e+00 -3.507574e-03 -1.100000e+00 -3.740411e-03 -1.200000e+00 -3.976102e-03 -1.000000e-01 -5.471142e-04 -2.000000e-01 -1.055787e-03 -3.000000e-01 -1.525902e-03 -4.000000e-01 -1.957446e-03 -5.000000e-01 -2.350558e-03 -6.000000e-01 -2.705694e-03 -7.000000e-01 -3.024166e-03 -8.000000e-01 -3.309845e-03 -9.000000e-01 -3.571700e-03 -1.000000e+00 -3.821301e-03 -1.100000e+00 -4.066818e-03 -1.200000e+00 -4.312571e-03 tmpk8ny_4pz/tests/bsim4/pmos/reference/noise3.standard0000644000175000017500000000635213546075722023204 0ustar carstencarstenFreq N(d) 1000 5.663663e-18 1258.925 4.396449e-18 1584.893 3.412778e-18 1995.262 2.649206e-18 2511.886 2.056486e-18 3162.278 1.596388e-18 3981.072 1.239239e-18 5011.872 9.620027e-19 6309.573 7.467989e-19 7943.282 5.797476e-19 10000 4.500745e-19 12589.25 3.494161e-19 15848.93 2.712803e-19 19952.62 2.106276e-19 25118.86 1.635462e-19 31622.78 1.269993e-19 39810.72 9.862996e-20 50118.72 7.66083e-20 63095.73 5.951406e-20 79432.82 4.62447e-20 100000 3.59444e-20 125892.5 2.794882e-20 158489.3 2.174228e-20 199526.2 1.692447e-20 251188.6 1.318465e-20 316227.8 1.028163e-20 398107.2 8.028173e-21 501187.2 6.278931e-21 630957.3 4.921087e-21 794328.2 3.867065e-21 1000000 3.048883e-21 1258925 2.413771e-21 1584893 1.920768e-21 1995262 1.538075e-21 2511886 1.241012e-21 3162278 1.010417e-21 3981072 8.314178e-22 5011872 6.924706e-22 6309573 5.846132e-22 7943282 5.008892e-22 10000000 4.358987e-22 12589250 3.8545e-22 15848930 3.462894e-22 19952620 3.15891e-22 25118860 2.922944e-22 31622780 2.739776e-22 39810720 2.597592e-22 50118720 2.487222e-22 63095730 2.401548e-22 79432820 2.335044e-22 100000000 2.28342e-22 1000 9.364437e-18 1258.925 7.269174e-18 1584.893 5.642732e-18 1995.262 4.380211e-18 2511.886 3.400182e-18 3162.278 2.639438e-18 3981.072 2.048913e-18 5011.872 1.590519e-18 6309.573 1.234692e-18 7943.282 9.584828e-19 10000 7.44076e-19 12589.25 5.776433e-19 15848.93 4.484504e-19 19952.62 3.481648e-19 25118.86 2.703184e-19 31622.78 2.098903e-19 39810.72 1.629832e-19 50118.72 1.265717e-19 63095.73 9.830739e-20 79432.82 7.636729e-20 100000 5.933635e-20 125892.5 4.611613e-20 158489.3 3.585398e-20 199526.2 2.788801e-20 251188.6 2.170445e-20 316227.8 1.690448e-20 398107.2 1.317851e-20 501187.2 1.028624e-20 630957.3 8.041128e-21 794328.2 6.298364e-21 1000000 4.945548e-21 1258925 3.895429e-21 1584893 3.080277e-21 1995262 2.447517e-21 2511886 1.95634e-21 3162278 1.575064e-21 3981072 1.279101e-21 5011872 1.04936e-21 6309573 8.710237e-22 7943282 7.32591e-22 10000000 6.251331e-22 12589250 5.417191e-22 15848930 4.769693e-22 19952620 4.267075e-22 25118860 3.876918e-22 31622780 3.574061e-22 39810720 3.338968e-22 50118720 3.156478e-22 63095730 3.014821e-22 79432820 2.90486e-22 100000000 2.819503e-22 1000 1.250656e-17 1258.925 9.708241e-18 1584.893 7.536057e-18 1995.262 5.849905e-18 2511.886 4.541035e-18 3162.278 3.525028e-18 3981.072 2.736355e-18 5011.872 2.124151e-18 6309.573 1.648928e-18 7943.282 1.280039e-18 10000 9.936889e-19 12589.25 7.714108e-19 15848.93 5.988681e-19 19952.62 4.649323e-19 25118.86 3.60965e-19 31622.78 2.802607e-19 39810.72 2.176143e-19 50118.72 1.689851e-19 63095.73 1.312369e-19 79432.82 1.019349e-19 100000 7.918936e-20 125892.5 6.153319e-20 158489.3 4.782763e-20 199526.2 3.718873e-20 251188.6 2.893032e-20 316227.8 2.251975e-20 398107.2 1.754356e-20 501187.2 1.368081e-20 630957.3 1.068236e-20 794328.2 8.354825e-21 1000000 6.548081e-21 1258925 5.145601e-21 1584893 4.05693e-21 1995262 3.211852e-21 2511886 2.555863e-21 3162278 2.046654e-21 3981072 1.651381e-21 5011872 1.344552e-21 6309573 1.106377e-21 7943282 9.214937e-22 10000000 7.779789e-22 12589250 6.66576e-22 15848930 5.800998e-22 19952620 5.129729e-22 25118860 4.608658e-22 31622780 4.204179e-22 39810720 3.890202e-22 50118720 3.646479e-22 63095730 3.45729e-22 79432820 3.310432e-22 100000000 3.196434e-22 tmpk8ny_4pz/tests/bsim4/pmos/reference/dcSweep_lw1_vb1.standard0000644000175000017500000002751213546075722024732 0ustar carstencarstenV(d) I(d) -1.000000e-01 -3.629594e-07 -2.000000e-01 -6.847099e-07 -3.000000e-01 -1.241124e-06 -4.000000e-01 -2.208511e-06 -5.000000e-01 -3.871745e-06 -6.000000e-01 -6.693757e-06 -7.000000e-01 -1.141332e-05 -8.000000e-01 -1.917814e-05 -9.000000e-01 -3.170607e-05 -1.000000e+00 -5.144985e-05 -1.100000e+00 -8.173430e-05 -1.200000e+00 -1.268637e-04 -1.000000e-01 -3.819106e-06 -2.000000e-01 -6.886665e-06 -3.000000e-01 -1.187385e-05 -4.000000e-01 -2.001008e-05 -5.000000e-01 -3.300731e-05 -6.000000e-01 -5.316134e-05 -7.000000e-01 -8.328481e-05 -8.000000e-01 -1.264704e-04 -9.000000e-01 -1.857529e-04 -1.000000e+00 -2.638468e-04 -1.100000e+00 -3.631649e-04 -1.200000e+00 -4.862465e-04 -1.000000e-01 -3.126248e-05 -2.000000e-01 -5.306100e-05 -3.000000e-01 -8.380521e-05 -4.000000e-01 -1.269571e-04 -5.000000e-01 -1.851313e-04 -6.000000e-01 -2.603201e-04 -7.000000e-01 -3.537560e-04 -8.000000e-01 -4.659147e-04 -9.000000e-01 -5.967036e-04 -1.000000e+00 -7.458502e-04 -1.100000e+00 -9.135093e-04 -1.200000e+00 -1.101084e-03 -1.000000e-01 -1.531095e-04 -2.000000e-01 -2.425114e-04 -3.000000e-01 -3.354638e-04 -4.000000e-01 -4.433949e-04 -5.000000e-01 -5.674557e-04 -6.000000e-01 -7.074311e-04 -7.000000e-01 -8.626734e-04 -8.000000e-01 -1.032375e-03 -9.000000e-01 -1.215754e-03 -1.000000e+00 -1.412337e-03 -1.100000e+00 -1.622469e-03 -1.200000e+00 -1.848120e-03 -1.000000e-01 -3.735198e-04 -2.000000e-01 -6.067638e-04 -3.000000e-01 -7.799915e-04 -4.000000e-01 -9.494152e-04 -5.000000e-01 -1.126764e-03 -6.000000e-01 -1.314158e-03 -7.000000e-01 -1.511909e-03 -8.000000e-01 -1.719837e-03 -9.000000e-01 -1.937639e-03 -1.000000e+00 -2.165180e-03 -1.100000e+00 -2.403015e-03 -1.200000e+00 -2.653279e-03 -1.000000e-01 -6.026453e-04 -2.000000e-01 -1.025813e-03 -3.000000e-01 -1.315417e-03 -4.000000e-01 -1.548827e-03 -5.000000e-01 -1.771783e-03 -6.000000e-01 -1.996677e-03 -7.000000e-01 -2.227018e-03 -8.000000e-01 -2.463986e-03 -9.000000e-01 -2.707980e-03 -1.000000e+00 -2.959203e-03 -1.100000e+00 -3.218254e-03 -1.200000e+00 -3.487081e-03 -1.000000e-01 -8.053651e-04 -2.000000e-01 -1.413975e-03 -3.000000e-01 -1.855009e-03 -4.000000e-01 -2.178082e-03 -5.000000e-01 -2.452442e-03 -6.000000e-01 -2.713934e-03 -7.000000e-01 -2.973934e-03 -8.000000e-01 -3.236425e-03 -9.000000e-01 -3.503035e-03 -1.000000e+00 -3.774540e-03 -1.100000e+00 -4.051663e-03 -1.200000e+00 -4.336074e-03 -1.000000e-01 -9.797008e-04 -2.000000e-01 -1.755510e-03 -3.000000e-01 -2.352240e-03 -4.000000e-01 -2.796274e-03 -5.000000e-01 -3.140552e-03 -6.000000e-01 -3.444368e-03 -7.000000e-01 -3.735043e-03 -8.000000e-01 -4.022319e-03 -9.000000e-01 -4.310115e-03 -1.000000e+00 -4.600244e-03 -1.100000e+00 -4.893813e-03 -1.200000e+00 -5.192318e-03 -1.000000e-01 -1.129676e-03 -2.000000e-01 -2.053848e-03 -3.000000e-01 -2.795449e-03 -4.000000e-01 -3.373210e-03 -5.000000e-01 -3.813407e-03 -6.000000e-01 -4.172487e-03 -7.000000e-01 -4.498456e-03 -8.000000e-01 -4.811880e-03 -9.000000e-01 -5.120879e-03 -1.000000e+00 -5.429079e-03 -1.100000e+00 -5.738378e-03 -1.200000e+00 -6.050351e-03 -1.000000e-01 -1.259334e-03 -2.000000e-01 -2.314778e-03 -3.000000e-01 -3.187644e-03 -4.000000e-01 -3.894790e-03 -5.000000e-01 -4.449564e-03 -6.000000e-01 -4.883887e-03 -7.000000e-01 -5.254301e-03 -8.000000e-01 -5.597539e-03 -9.000000e-01 -5.929128e-03 -1.000000e+00 -6.255779e-03 -1.100000e+00 -6.580777e-03 -1.200000e+00 -6.906157e-03 -1.000000e-01 -1.372009e-03 -2.000000e-01 -2.543687e-03 -3.000000e-01 -3.534717e-03 -4.000000e-01 -4.361077e-03 -5.000000e-01 -5.033436e-03 -6.000000e-01 -5.563455e-03 -7.000000e-01 -5.992932e-03 -8.000000e-01 -6.372644e-03 -9.000000e-01 -6.729785e-03 -1.000000e+00 -7.076219e-03 -1.100000e+00 -7.417508e-03 -1.200000e+00 -7.756659e-03 -1.000000e-01 -1.470401e-03 -2.000000e-01 -2.745198e-03 -3.000000e-01 -3.842480e-03 -4.000000e-01 -4.777341e-03 -5.000000e-01 -5.560539e-03 -6.000000e-01 -6.196850e-03 -7.000000e-01 -6.703787e-03 -8.000000e-01 -7.130534e-03 -9.000000e-01 -7.518227e-03 -1.000000e+00 -7.886884e-03 -1.100000e+00 -8.245721e-03 -1.200000e+00 -8.599403e-03 -1.000000e-01 -8.405568e-08 -2.000000e-01 -1.867126e-07 -3.000000e-01 -3.966138e-07 -4.000000e-01 -8.194373e-07 -5.000000e-01 -1.647965e-06 -6.000000e-01 -3.222888e-06 -7.000000e-01 -6.128019e-06 -8.000000e-01 -1.134125e-05 -9.000000e-01 -2.046759e-05 -1.000000e+00 -3.606366e-05 -1.100000e+00 -6.200697e-05 -1.200000e+00 -1.037969e-04 -1.000000e-01 -1.992482e-06 -2.000000e-01 -4.007431e-06 -3.000000e-01 -7.623317e-06 -4.000000e-01 -1.402536e-05 -5.000000e-01 -2.508221e-05 -6.000000e-01 -4.360819e-05 -7.000000e-01 -7.346200e-05 -8.000000e-01 -1.192826e-04 -9.000000e-01 -1.858110e-04 -1.000000e+00 -2.771130e-04 -1.100000e+00 -3.962755e-04 -1.200000e+00 -5.459630e-04 -1.000000e-01 -2.858165e-05 -2.000000e-01 -5.156045e-05 -3.000000e-01 -8.694319e-05 -4.000000e-01 -1.396917e-04 -5.000000e-01 -2.139643e-04 -6.000000e-01 -3.125178e-04 -7.000000e-01 -4.362955e-04 -8.000000e-01 -5.846066e-04 -9.000000e-01 -7.557930e-04 -1.000000e+00 -9.481842e-04 -1.100000e+00 -1.161208e-03 -1.200000e+00 -1.396583e-03 -1.000000e-01 -2.165798e-04 -2.000000e-01 -3.378965e-04 -3.000000e-01 -4.731710e-04 -4.000000e-01 -6.295055e-04 -5.000000e-01 -8.059593e-04 -6.000000e-01 -1.000423e-03 -7.000000e-01 -1.210633e-03 -8.000000e-01 -1.434537e-03 -9.000000e-01 -1.670576e-03 -1.000000e+00 -1.918153e-03 -1.100000e+00 -2.178426e-03 -1.200000e+00 -2.455396e-03 -1.000000e-01 -6.673533e-04 -2.000000e-01 -9.891319e-04 -3.000000e-01 -1.231704e-03 -4.000000e-01 -1.469365e-03 -5.000000e-01 -1.712199e-03 -6.000000e-01 -1.961854e-03 -7.000000e-01 -2.218333e-03 -8.000000e-01 -2.481264e-03 -9.000000e-01 -2.750380e-03 -1.000000e+00 -3.026116e-03 -1.100000e+00 -3.310598e-03 -1.200000e+00 -3.609005e-03 -1.000000e-01 -1.179815e-03 -2.000000e-01 -1.813727e-03 -3.000000e-01 -2.178868e-03 -4.000000e-01 -2.479921e-03 -5.000000e-01 -2.766885e-03 -6.000000e-01 -3.050922e-03 -7.000000e-01 -3.335527e-03 -8.000000e-01 -3.622041e-03 -9.000000e-01 -3.911163e-03 -1.000000e+00 -4.203891e-03 -1.100000e+00 -4.502740e-03 -1.200000e+00 -4.813385e-03 -1.000000e-01 -1.652184e-03 -2.000000e-01 -2.648104e-03 -3.000000e-01 -3.194234e-03 -4.000000e-01 -3.566726e-03 -5.000000e-01 -3.893297e-03 -6.000000e-01 -4.204765e-03 -7.000000e-01 -4.510446e-03 -8.000000e-01 -4.814018e-03 -9.000000e-01 -5.117296e-03 -1.000000e+00 -5.421794e-03 -1.100000e+00 -5.730215e-03 -1.200000e+00 -6.048361e-03 -1.000000e-01 -2.075338e-03 -2.000000e-01 -3.429459e-03 -3.000000e-01 -4.216941e-03 -4.000000e-01 -4.686269e-03 -5.000000e-01 -5.056598e-03 -6.000000e-01 -5.394293e-03 -7.000000e-01 -5.718411e-03 -8.000000e-01 -6.036092e-03 -9.000000e-01 -6.350652e-03 -1.000000e+00 -6.664259e-03 -1.100000e+00 -6.979769e-03 -1.200000e+00 -7.302899e-03 -1.000000e-01 -2.456238e-03 -2.000000e-01 -4.147700e-03 -3.000000e-01 -5.210338e-03 -4.000000e-01 -5.813381e-03 -5.000000e-01 -6.237588e-03 -6.000000e-01 -6.603454e-03 -7.000000e-01 -6.945586e-03 -8.000000e-01 -7.276198e-03 -9.000000e-01 -7.600663e-03 -1.000000e+00 -7.922026e-03 -1.100000e+00 -8.243360e-03 -1.200000e+00 -8.570196e-03 -1.000000e-01 -2.802937e-03 -2.000000e-01 -4.809232e-03 -3.000000e-01 -6.154382e-03 -4.000000e-01 -6.930545e-03 -5.000000e-01 -7.424011e-03 -6.000000e-01 -7.822266e-03 -7.000000e-01 -8.183340e-03 -8.000000e-01 -8.526720e-03 -9.000000e-01 -8.860549e-03 -1.000000e+00 -9.189043e-03 -1.100000e+00 -9.515618e-03 -1.200000e+00 -9.845606e-03 -1.000000e-01 -3.122401e-03 -2.000000e-01 -5.423327e-03 -3.000000e-01 -7.043438e-03 -4.000000e-01 -8.024525e-03 -5.000000e-01 -8.607120e-03 -6.000000e-01 -9.043904e-03 -7.000000e-01 -9.425783e-03 -8.000000e-01 -9.782395e-03 -9.000000e-01 -1.012555e-02 -1.000000e+00 -1.046097e-02 -1.100000e+00 -1.079260e-02 -1.200000e+00 -1.112561e-02 -1.000000e-01 -3.420344e-03 -2.000000e-01 -5.998709e-03 -3.000000e-01 -7.881035e-03 -4.000000e-01 -9.085803e-03 -5.000000e-01 -9.780106e-03 -6.000000e-01 -1.026326e-02 -7.000000e-01 -1.066851e-02 -8.000000e-01 -1.103922e-02 -9.000000e-01 -1.139195e-02 -1.000000e+00 -1.173435e-02 -1.100000e+00 -1.207107e-02 -1.200000e+00 -1.240722e-02 -1.000000e-01 -1.273389e-06 -2.000000e-01 -2.104524e-06 -3.000000e-01 -3.339064e-06 -4.000000e-01 -5.235686e-06 -5.000000e-01 -8.144568e-06 -6.000000e-01 -1.257992e-05 -7.000000e-01 -1.928606e-05 -8.000000e-01 -2.931313e-05 -9.000000e-01 -4.409905e-05 -1.000000e+00 -6.555685e-05 -1.100000e+00 -9.617767e-05 -1.200000e+00 -1.391798e-04 -1.000000e-01 -6.672933e-06 -2.000000e-01 -1.087439e-05 -3.000000e-01 -1.685471e-05 -4.000000e-01 -2.568679e-05 -5.000000e-01 -3.857922e-05 -6.000000e-01 -5.704175e-05 -7.000000e-01 -8.286922e-05 -8.000000e-01 -1.180644e-04 -9.000000e-01 -1.647290e-04 -1.000000e+00 -2.249842e-04 -1.100000e+00 -3.010073e-04 -1.200000e+00 -3.952673e-04 -1.000000e-01 -3.012937e-05 -2.000000e-01 -4.855403e-05 -3.000000e-01 -7.142562e-05 -4.000000e-01 -1.019563e-04 -5.000000e-01 -1.419292e-04 -6.000000e-01 -1.929158e-04 -7.000000e-01 -2.562569e-04 -8.000000e-01 -3.330072e-04 -9.000000e-01 -4.239365e-04 -1.000000e+00 -5.296369e-04 -1.100000e+00 -6.507886e-04 -1.200000e+00 -7.886227e-04 -1.000000e-01 -9.491374e-05 -2.000000e-01 -1.569184e-04 -3.000000e-01 -2.143346e-04 -4.000000e-01 -2.806095e-04 -5.000000e-01 -3.580017e-04 -6.000000e-01 -4.472203e-04 -7.000000e-01 -5.485760e-04 -8.000000e-01 -6.621776e-04 -9.000000e-01 -7.880253e-04 -1.000000e+00 -9.261309e-04 -1.100000e+00 -1.076755e-03 -1.200000e+00 -1.240842e-03 -1.000000e-01 -1.901288e-04 -2.000000e-01 -3.332811e-04 -3.000000e-01 -4.427563e-04 -4.000000e-01 -5.462968e-04 -5.000000e-01 -6.563015e-04 -6.000000e-01 -7.753324e-04 -7.000000e-01 -9.040690e-04 -8.000000e-01 -1.042756e-03 -9.000000e-01 -1.191499e-03 -1.000000e+00 -1.350379e-03 -1.100000e+00 -1.519636e-03 -1.200000e+00 -1.700037e-03 -1.000000e-01 -2.829340e-04 -2.000000e-01 -5.139653e-04 -3.000000e-01 -6.956616e-04 -4.000000e-01 -8.436927e-04 -5.000000e-01 -9.829845e-04 -6.000000e-01 -1.125574e-03 -7.000000e-01 -1.274836e-03 -8.000000e-01 -1.431941e-03 -9.000000e-01 -1.597432e-03 -1.000000e+00 -1.771621e-03 -1.100000e+00 -1.954791e-03 -1.200000e+00 -2.147498e-03 -1.000000e-01 -3.598690e-04 -2.000000e-01 -6.668488e-04 -3.000000e-01 -9.215284e-04 -4.000000e-01 -1.128613e-03 -5.000000e-01 -1.304576e-03 -6.000000e-01 -1.471205e-03 -7.000000e-01 -1.639317e-03 -8.000000e-01 -1.812584e-03 -9.000000e-01 -1.992488e-03 -1.000000e+00 -2.179769e-03 -1.100000e+00 -2.374879e-03 -1.200000e+00 -2.578273e-03 -1.000000e-01 -4.211515e-04 -2.000000e-01 -7.907141e-04 -3.000000e-01 -1.108958e-03 -4.000000e-01 -1.377410e-03 -5.000000e-01 -1.602202e-03 -6.000000e-01 -1.799852e-03 -7.000000e-01 -1.988861e-03 -8.000000e-01 -2.178453e-03 -9.000000e-01 -2.372204e-03 -1.000000e+00 -2.571712e-03 -1.100000e+00 -2.777820e-03 -1.200000e+00 -2.991079e-03 -1.000000e-01 -4.699641e-04 -2.000000e-01 -8.908288e-04 -3.000000e-01 -1.262752e-03 -4.000000e-01 -1.586388e-03 -5.000000e-01 -1.863882e-03 -6.000000e-01 -2.102484e-03 -7.000000e-01 -2.318107e-03 -8.000000e-01 -2.526150e-03 -9.000000e-01 -2.734332e-03 -1.000000e+00 -2.945968e-03 -1.100000e+00 -3.162660e-03 -1.200000e+00 -3.385303e-03 -1.000000e-01 -5.091159e-04 -2.000000e-01 -9.721270e-04 -3.000000e-01 -1.389100e-03 -4.000000e-01 -1.760352e-03 -5.000000e-01 -2.086766e-03 -6.000000e-01 -2.371037e-03 -7.000000e-01 -2.621277e-03 -8.000000e-01 -2.852301e-03 -9.000000e-01 -3.076794e-03 -1.000000e+00 -3.301210e-03 -1.100000e+00 -3.528558e-03 -1.200000e+00 -3.760393e-03 -1.000000e-01 -5.406673e-04 -2.000000e-01 -1.038359e-03 -3.000000e-01 -1.493058e-03 -4.000000e-01 -1.904900e-03 -5.000000e-01 -2.274286e-03 -6.000000e-01 -2.602299e-03 -7.000000e-01 -2.892190e-03 -8.000000e-01 -3.152649e-03 -9.000000e-01 -3.397081e-03 -1.000000e+00 -3.635914e-03 -1.100000e+00 -3.874576e-03 -1.200000e+00 -4.115780e-03 -1.000000e-01 -5.661190e-04 -2.000000e-01 -1.092338e-03 -3.000000e-01 -1.578571e-03 -4.000000e-01 -2.024831e-03 -5.000000e-01 -2.431284e-03 -6.000000e-01 -2.798403e-03 -7.000000e-01 -3.127494e-03 -8.000000e-01 -3.422367e-03 -9.000000e-01 -3.691978e-03 -1.000000e+00 -3.948194e-03 -1.100000e+00 -4.199612e-03 -1.200000e+00 -4.450839e-03 tmpk8ny_4pz/tests/bsim4/pmos/reference/acVd.standard0000644000175000017500000000335713546075722022663 0ustar carstencarstenV(d) g(d,g) g(d,d) c(g,s) c(g,d) -0.1 9.404723e-04 1.333966e-02 9.59898959896832e-15 5.86023858668517e-15 -0.2 1.927414e-03 1.152112e-02 1.0286142785018e-14 4.96737934493963e-15 -0.3 2.945912e-03 9.865745e-03 1.05552928578916e-14 4.58337424096858e-15 -0.4 3.987041e-03 8.341388e-03 1.06125628733977e-14 4.49235321632424e-15 -0.5 5.052742e-03 6.893700e-03 1.06290028778489e-14 4.45886620725748e-15 -0.6 6.117196e-03 5.504070e-03 1.06362728798173e-14 4.43352420039602e-15 -0.7 6.964267e-03 4.483033e-03 1.06404628809518e-14 4.40262919203107e-15 -0.8 7.490822e-03 3.961785e-03 1.0643122881672e-14 4.3560671794242e-15 -0.9 7.825469e-03 3.714195e-03 1.06447528821133e-14 4.27845915841149e-15 -1 8.063188e-03 3.590168e-03 1.06455428823272e-14 4.14225712153419e-15 -1.1 8.247715e-03 3.525774e-03 1.06455628823326e-14 3.90600705756845e-15 -1.2 8.399123e-03 3.494179e-03 1.06448428821377e-14 3.54785596059748e-15 -0.1 2.370420e-04 5.279203e-03 9.44137855629444e-15 5.90823359968003e-15 -0.2 5.024911e-04 4.894057e-03 1.01368527445971e-14 5.01633735819523e-15 -0.3 7.958171e-04 4.508217e-03 1.04292828237738e-14 4.60689524733699e-15 -0.4 1.116122e-03 4.122871e-03 1.04935128411644e-14 4.50801222056398e-15 -0.5 1.461725e-03 3.740062e-03 1.05121028461977e-14 4.47259621097494e-15 -0.6 1.828680e-03 3.364585e-03 1.05205028484721e-14 4.44659820393587e-15 -0.7 2.205184e-03 3.010694e-03 1.05255728498448e-14 4.41538719548535e-15 -0.8 2.556675e-03 2.718193e-03 1.05290228507789e-14 4.36862118282325e-15 -0.9 2.830775e-03 2.539631e-03 1.0531412851426e-14 4.29085516176776e-15 -1 3.021053e-03 2.465853e-03 1.05329428518402e-14 4.1545151248531e-15 -1.1 3.157802e-03 2.451348e-03 1.05336928520433e-14 3.91813706085271e-15 -1.2 3.263290e-03 2.467347e-03 1.0533702852046e-14 3.55986496384897e-15 tmpk8ny_4pz/tests/bsim4/pmos/reference/noise4.standard0000644000175000017500000000635013546075722023203 0ustar carstencarstenFreq N(d) 1000 6.379833e-20 1258.925 4.956217e-20 1584.893 3.851139e-20 1995.262 2.993326e-20 2511.886 2.327451e-20 3162.278 1.810567e-20 3981.072 1.409337e-20 5011.872 1.097884e-20 6309.573 8.561194e-21 7943.282 6.684503e-21 10000 5.227727e-21 12589.25 4.096908e-21 15848.93 3.219114e-21 19952.62 2.537728e-21 25118.86 2.008805e-21 31622.78 1.59823e-21 39810.72 1.279522e-21 50118.72 1.032126e-21 63095.73 8.400851e-22 79432.82 6.910142e-22 100000 5.752983e-22 125892.5 4.854742e-22 158489.3 4.157485e-22 199526.2 3.616242e-22 251188.6 3.196103e-22 316227.8 2.869971e-22 398107.2 2.616813e-22 501187.2 2.420299e-22 630957.3 2.267756e-22 794328.2 2.149345e-22 1000000 2.057428e-22 1258925 1.986078e-22 1584893 1.930693e-22 1995262 1.887701e-22 2511886 1.854328e-22 3162278 1.828422e-22 3981072 1.808313e-22 5011872 1.792704e-22 6309573 1.780587e-22 7943282 1.771181e-22 10000000 1.76388e-22 12589250 1.758212e-22 15848930 1.753813e-22 19952620 1.750398e-22 25118860 1.747747e-22 31622780 1.745689e-22 39810720 1.744092e-22 50118720 1.742852e-22 63095730 1.741889e-22 79432820 1.741142e-22 100000000 1.740562e-22 1000 1.109819e-19 1258.925 8.618765e-20 1584.893 6.694117e-20 1995.262 5.200114e-20 2511.886 4.040398e-20 3162.278 3.140173e-20 3981.072 2.441375e-20 5011.872 1.898935e-20 6309.573 1.477868e-20 7943.282 1.151016e-20 10000 8.972979e-21 12589.25 7.0035e-21 15848.93 5.474698e-21 19952.62 4.287969e-21 25118.86 3.366774e-21 31622.78 2.6517e-21 39810.72 2.096625e-21 50118.72 1.66575e-21 63095.73 1.331284e-21 79432.82 1.071656e-21 100000 8.701209e-22 125892.5 7.136796e-22 158489.3 5.922425e-22 199526.2 4.979773e-22 251188.6 4.248042e-22 316227.8 3.680038e-22 398107.2 3.239126e-22 501187.2 2.89687e-22 630957.3 2.631195e-22 794328.2 2.424965e-22 1000000 2.26488e-22 1258925 2.140614e-22 1584893 2.044153e-22 1995262 1.969275e-22 2511886 1.911152e-22 3162278 1.866034e-22 3981072 1.831011e-22 5011872 1.803825e-22 6309573 1.782721e-22 7943282 1.76634e-22 10000000 1.753624e-22 12589250 1.743753e-22 15848930 1.736091e-22 19952620 1.730143e-22 25118860 1.725526e-22 31622780 1.721942e-22 39810720 1.71916e-22 50118720 1.717001e-22 63095730 1.715325e-22 79432820 1.714023e-22 100000000 1.713013e-22 1000 1.625916e-19 1258.925 1.262485e-19 1584.893 9.803737e-20 1995.262 7.613853e-20 2511.886 5.913962e-20 3162.278 4.594426e-20 3981.072 3.57014e-20 5011.872 2.775041e-20 6309.573 2.157848e-20 7943.282 1.678754e-20 10000 1.306858e-20 12589.25 1.018175e-20 15848.93 7.940859e-21 19952.62 6.201372e-21 25118.86 4.8511e-21 31622.78 3.802956e-21 39810.72 2.989337e-21 50118.72 2.357767e-21 63095.73 1.867513e-21 79432.82 1.486955e-21 100000 1.191548e-21 125892.5 9.622388e-22 158489.3 7.842383e-22 199526.2 6.46066e-22 251188.6 5.388101e-22 316227.8 4.55553e-22 398107.2 3.90925e-22 501187.2 3.407576e-22 630957.3 3.018153e-22 794328.2 2.715865e-22 1000000 2.481215e-22 1258925 2.299068e-22 1584893 2.157678e-22 1995262 2.047923e-22 2511886 1.962727e-22 3162278 1.896594e-22 3981072 1.845258e-22 5011872 1.805408e-22 6309573 1.774475e-22 7943282 1.750464e-22 10000000 1.731825e-22 12589250 1.717356e-22 15848930 1.706125e-22 19952620 1.697407e-22 25118860 1.69064e-22 31622780 1.685387e-22 39810720 1.681309e-22 50118720 1.678144e-22 63095730 1.675687e-22 79432820 1.673779e-22 100000000 1.672299e-22 tmpk8ny_4pz/tests/bsim4/pmos/qaSpec0000644000175000017500000003311513546075722017460 0ustar carstencarsten // // Test specification for bsim4 (version 4.5.0) // // // Simulator specific information // These arguments are added to the model card // specification to invoke the desired model in // different simulators (which can have different // names or levels for the same model) and to switch // between nType and pType polarities. // It is assumed that there are no polarity specific // parameters. // `ifdef spice nTypeSelectionArguments pmos level=14 version=4.5.0 pTypeSelectionArguments nmos level=14 version=4.5.0 `endif `ifdef ngspice nTypeSelectionArguments pmos level=14 version=4.8.1 pTypeSelectionArguments nmos level=14 version=4.8.1 `endif `ifdef hspice nTypeSelectionArguments pmos level=54 version=4.7 pTypeSelectionArguments nmos level=54 version=4.7 `endif // // General test-independent information // keyLetter m pins d g s b linearScale w l ps pd areaScale as ad temperature 27 -50 150 checkPolarity no symmetricPins d s scaleParameters m // // Specific tests // test dcSweep_lw1 biases V(s)=0 V(b)=0 biasList V(g)=-0.1,-0.2,-0.3,-0.4,-0.5,-0.6,-0.7,-0.8,-0.9,-1.0,-1.1,-1.2 biasSweep V(d)=-0.1,-1.2,-0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/pmosParameters test dcSweep_lw1_vb1 biases V(s)=0 V(b)=-0.1 biasList V(g)=-0.1,-0.2,-0.3,-0.4,-0.5,-0.6,-0.7,-0.8,-0.9,-1.0,-1.1,-1.2 biasSweep V(d)=-0.1,-1.2,-0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/pmosParameters test dcSweep_lw1_vb2 biases V(s)=0 V(b)=-0.2 biasList V(g)=-0.1,-0.2,-0.3,-0.4,-0.5,-0.6,-0.7,-0.8,-0.9,-1.0,-1.1,-1.2 biasSweep V(d)=-0.1,-1.2,-0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/pmosParameters test dcSweep_lw2 biases V(s)=0 V(b)=0 biasList V(g)=-0.1,-0.2,-0.3,-0.4,-0.5,-0.6,-0.7,-0.8,-0.9,-1.0,-1.1,-1.2 biasSweep V(d)=-0.1,-1.2,-0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/pmosParameters test dcSweep_lw3 biases V(s)=0 V(b)=0 biasList V(g)=-0.1,-0.2,-0.3,-0.4,-0.5,-0.6,-0.7,-0.8,-0.9,-1.0,-1.1,-1.2 biasSweep V(d)=-0.1,-1.2,-0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.24e-6 modelParameters parameters/pmosParameters test dcSweep_lw4 biases V(s)=0 V(b)=0 biasList V(g)=-0.1,-0.2,-0.3,-0.4,-0.5,-0.6,-0.7,-0.8,-0.9,-1.0,-1.1,-1.2 biasSweep V(d)=-0.1,-1.2,-0.1 outputs I(d) instanceParameters w=1.0e-6 l=0.06e-6 modelParameters parameters/pmosParameters test dcSweep_lw5 biases V(s)=0 V(b)=0 biasList V(g)=-0.1,-0.2,-0.3,-0.4,-0.5,-0.6,-0.7,-0.8,-0.9,-1.0,-1.1,-1.2 biasSweep V(d)=-0.1,-1.2,-0.1 outputs I(d) instanceParameters w=1.0e-6 l=0.1e-6 modelParameters parameters/pmosParameters test dcSweep_lw6 biases V(s)=0 V(b)=0 biasList V(g)=-0.1,-0.2,-0.3,-0.4,-0.5,-0.6,-0.7,-0.8,-0.9,-1.0,-1.1,-1.2 biasSweep V(d)=-0.1,-1.2,-0.1 outputs I(d) instanceParameters w=1.0e-6 l=0.24e-6 modelParameters parameters/pmosParameters test dcSweep_lw7 biases V(s)=0 V(b)=0 biasList V(g)=-0.1,-0.2,-0.3,-0.4,-0.5,-0.6,-0.7,-0.8,-0.9,-1.0,-1.1,-1.2 biasSweep V(d)=-0.1,-1.2,-0.1 outputs I(d) instanceParameters w=0.6e-6 l=0.06e-6 modelParameters parameters/pmosParameters test dcSweep_lw8 biases V(s)=0 V(b)=0 biasList V(g)=-0.1,-0.2,-0.3,-0.4,-0.5,-0.6,-0.7,-0.8,-0.9,-1.0,-1.1,-1.2 biasSweep V(d)=-0.1,-1.2,-0.1 outputs I(d) instanceParameters w=0.6e-6 l=0.1e-6 modelParameters parameters/pmosParameters test dcSweep_lw9 biases V(s)=0 V(b)=0 biasList V(g)=-0.1,-0.2,-0.3,-0.4,-0.5,-0.6,-0.7,-0.8,-0.9,-1.0,-1.1,-1.2 biasSweep V(d)=-0.1,-1.2,-0.1 outputs I(d) instanceParameters w=0.6e-6 l=0.24e-6 modelParameters parameters/pmosParameters test dcSweep_sa biases V(s)=0 V(b)=0 biasList V(g)=-0.1,-0.2,-0.3,-0.4,-0.5,-0.6,-0.7,-0.8,-0.9,-1.0,-1.1,-1.2 biasSweep V(d)=-0.1,-1.2,-0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.06e-6 sa=0.3e-6 modelParameters parameters/pmosParameters test dcSweep_sb biases V(s)=0 V(b)=0 biasList V(g)=-0.1,-0.2,-0.3,-0.4,-0.5,-0.6,-0.7,-0.8,-0.9,-1.0,-1.1,-1.2 biasSweep V(d)=-0.1,-1.2,-0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.06e-6 sb=0.4e-6 modelParameters parameters/pmosParameters test dcSweep_sca biases V(s)=0 V(b)=0 biasList V(g)=-0.1,-0.2,-0.3,-0.4,-0.5,-0.6,-0.7,-0.8,-0.9,-1.0,-1.1,-1.2 biasSweep V(d)=-0.1,-1.2,-0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.06e-6 sca=5.0 modelParameters parameters/pmosParameters modelParameters wpemod=1 kvth0we=4.11e-03 lkvth0we=-2.1e-10 wkvth0we=-1.66e-10 pkvth0we=1.2e-17 k2we=1.77e-03 lk2we=1.89e-11 wk2we=-1.5e-10 test dcSweep_scb biases V(s)=0 V(b)=0 biasList V(g)=-0.1,-0.2,-0.3,-0.4,-0.5,-0.6,-0.7,-0.8,-0.9,-1.0,-1.1,-1.2 biasSweep V(d)=-0.1,-1.2,-0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.06e-6 scb=0.01 modelParameters parameters/pmosParameters modelParameters wpemod=1 kvth0we=4.11e-03 lkvth0we=-2.1e-10 wkvth0we=-1.66e-10 pkvth0we=1.2e-17 k2we=1.77e-03 lk2we=1.89e-11 wk2we=-1.5e-10 test dcSweep_scc biases V(s)=0 V(b)=0 biasList V(g)=-0.1,-0.2,-0.3,-0.4,-0.5,-0.6,-0.7,-0.8,-0.9,-1.0,-1.1,-1.2 biasSweep V(d)=-0.1,-1.2,-0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.06e-6 scc=0.0001 modelParameters parameters/pmosParameters modelParameters wpemod=1 kvth0we=4.11e-03 lkvth0we=-2.1e-10 wkvth0we=-1.66e-10 pkvth0we=1.2e-17 k2we=1.77e-03 lk2we=1.89e-11 wk2we=-1.5e-10 test dcSweep_nrs biases V(s)=0 V(b)=0 biasList V(g)=-0.1,-0.2,-0.3,-0.4,-0.5,-0.6,-0.7,-0.8,-0.9,-1.0,-1.1,-1.2 biasSweep V(d)=-0.1,-1.2,-0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.06e-6 nrs=2.0 modelParameters parameters/pmosParameters test dcSweep_nrd biases V(s)=0 V(b)=0 biasList V(g)=-0.1,-0.2,-0.3,-0.4,-0.5,-0.6,-0.7,-0.8,-0.9,-1.0,-1.1,-1.2 biasSweep V(d)=-0.1,-1.2,-0.1 outputs I(d) instanceParameters w=10.0e-6 l=0.06e-6 nrd=2.0 modelParameters parameters/pmosParameters test acVd temperature 27 150 biases V(s)=0 V(b)=0 V(g)=-1.2 biasSweep V(d)=-0.1,-1.2,-0.1 outputs G(d,g) G(d,d) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/pmosParameters test acFreq temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.2 V(g)=-1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/pmosParameters test acFreq_mobmod temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.2 V(g)=-1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/pmosParameters modelParameters mobmod=1 test acFreq_capmod temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.2 V(g)=-1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/pmosParameters modelParameters capmod=1 test acFreq_trnqsmod temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.2 V(g)=-1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/pmosParameters modelParameters trnqsmod=1 test acFreq_acnqsmod temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.2 V(g)=-1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/pmosParameters modelParameters acnqsmod=1 test acFreq_xpart temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.2 V(g)=-1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/pmosParameters modelParameters xpart=1 test acFreq_geomod temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.2 V(g)=-1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/pmosParameters modelParameters geomod=0 test acFreq_wpemod temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.2 V(g)=-1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/pmosParameters modelParameters wpemod=1 kvth0we=4.11e-03 lkvth0we=-2.1e-10 wkvth0we=-1.66e-10 pkvth0we=1.2e-17 k2we=1.77e-03 lk2we=1.89e-11 wk2we=-1.5e-10 test acFreq_igcmod temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.2 V(g)=-1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/pmosParameters modelParameters igcmod=0 test acFreq_diomod temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.2 V(g)=-1.2 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/pmosParameters modelParameters diomod=0 test noise1 temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.0 biasList V(g)=-0.6,-0.8,-1.0 freq dec 10 1e3 1e8 outputs N(d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/pmosParameters modelParameters fnoimod=0 tnoimod=0 kf=1e-30 af=1.2 ef=1.1 test noise2 temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.0 biasList V(g)=-0.6,-0.8,-1.0 freq dec 10 1e3 1e8 outputs N(d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/pmosParameters modelParameters fnoimod=1 tnoimod=1 noia=6.188e40 noib=1.5e25 noic=8.75 em=4.1e7 ef=1.1 test noise3 temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.0 biasList V(g)=-0.6,-0.8,-1.0 freq dec 10 1e3 1e8 outputs N(d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/pmosParameters modelParameters fnoimod=1 tnoimod=0 noia=6.188e40 noib=1.5e25 noic=8.75 em=4.1e7 ef=1.1 test noise4 temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.0 biasList V(g)=-0.6,-0.8,-1.0 freq dec 10 1e3 1e8 outputs N(d) instanceParameters w=10.0e-6 l=0.06e-6 modelParameters parameters/pmosParameters modelParameters fnoimod=0 tnoimod=1 kf=1e-30 af=1.2 ef=1.1 tmpk8ny_4pz/tests/bsim4/pmos/run0000755000175000017500000000023613546075722017051 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmpk8ny_4pz/tests/README0000644000175000017500000000166313546075722015210 0ustar carstencarstenngspice test and example files: =============================== This directory is organized as a tree of subdirectories containing test files for devices and analyses implemented in ngspice. Some files comes from the original Spice3f5 package and others have been contributed by developers and users. File Extension Convention: .cir : Circuit file. This can be a simple circuit description or a spice2 input file. .out : .cir files have been run and results are recorded into this type of file. This is useful if want to test ngspice against known (hopefully correct results). REPLICATE TESTS To replicate tests you have to launch configure without any option and compile ngspice. In the future this will change. TO ADD NEW TESTS Take an existing test and adopt it to your liking. Add the test script and its supporting files to Makefile.am. Use `make check' to see your new test in action. tmpk8ny_4pz/tests/general/0000755000175000017500000000000013546075722015737 5ustar carstencarstentmpk8ny_4pz/tests/general/schmitt.out0000644000175000017500000005751513546075722020160 0ustar carstencarstenWarning: option lvlcod is obsolete. Warning: vin: no DC value, transient time 0 value used Circuit: schmitt ckt - ecl compatible schmitt trigger Warning -- Level not specified on line "(is=1.0e-16 bf=50 br=0.1 rb=50 rc=10 tf=0.12ns tr=5ns cje=0.4pf pe=0.8 me=0.4 cjc=0.5pf pc=0.8 mc=0.333 ccs=1pf va=50)" Using level 1. Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Initial Transient Solution -------------------------- Node Voltage ---- ------- 1 -1.6 8 -5 2 -1.6 3 -0.2597 5 -1.22059 6 -1.11059 4 -2.06799 7 -1.89185 vee#branch 0.041115 vin#branch -1.43429e-10 No. of Data Rows : 146 schmitt ckt - ecl compatible schmitt trigger * the original line is below *.opt acct list node lvlcod=2 .tran 10ns 1000ns vin 1 0 pulse(-1.6 -1.2 10ns 400ns 400ns 100ns 10000ns) vee 8 0 -5 rin 1 2 50 rc1 0 3 50 r1 3 5 185 r2 5 8 760 rc2 0 6 100 re 4 8 260 rth1 7 8 125 rth2 7 0 85 cload 7 0 5pf q1 3 2 4 qstd off q2 6 5 4 qstd q3 0 6 7 qstd q4 0 6 7 qstd .model qstd npn(is=1.0e-16 bf=50 br=0.1 rb=50 rc=10 tf=0.12ns tr=5ns + cje=0.4pf pe=0.8 me=0.4 cjc=0.5pf pc=0.8 mc=0.333 ccs=1pf va=50) s .opt list node lvlcod=2 .end schmitt ckt - ecl compatible schmitt trigger -------------------------------------------------------------------------------- Index time v(1) v(3) v(5) -------------------------------------------------------------------------------- 0 0.000000e+00 -1.600000e+00 -2.596995e-01 -1.220586e+00 1 5.000000e-11 -1.600000e+00 -2.596995e-01 -1.220586e+00 2 1.000000e-10 -1.600000e+00 -2.596995e-01 -1.220586e+00 3 2.000000e-10 -1.600000e+00 -2.596995e-01 -1.220586e+00 4 4.000000e-10 -1.600000e+00 -2.596995e-01 -1.220586e+00 5 8.000000e-10 -1.600000e+00 -2.596995e-01 -1.220586e+00 6 1.600000e-09 -1.600000e+00 -2.596995e-01 -1.220586e+00 7 3.200000e-09 -1.600000e+00 -2.596995e-01 -1.220586e+00 8 6.400000e-09 -1.600000e+00 -2.596995e-01 -1.220586e+00 9 1.000000e-08 -1.600000e+00 -2.596995e-01 -1.220586e+00 10 1.064000e-08 -1.599360e+00 -2.596840e-01 -1.220565e+00 11 1.192000e-08 -1.598080e+00 -2.596789e-01 -1.220566e+00 12 1.448000e-08 -1.595520e+00 -2.596848e-01 -1.220576e+00 13 1.960000e-08 -1.590400e+00 -2.596797e-01 -1.220566e+00 14 2.960000e-08 -1.580400e+00 -2.596847e-01 -1.220576e+00 15 3.960000e-08 -1.570400e+00 -2.596805e-01 -1.220567e+00 16 4.960000e-08 -1.560400e+00 -2.596852e-01 -1.220576e+00 17 5.960000e-08 -1.550400e+00 -2.596819e-01 -1.220568e+00 18 6.960000e-08 -1.540400e+00 -2.596867e-01 -1.220577e+00 19 7.960000e-08 -1.530400e+00 -2.596848e-01 -1.220570e+00 20 8.960000e-08 -1.520400e+00 -2.596904e-01 -1.220579e+00 21 9.960000e-08 -1.510400e+00 -2.596908e-01 -1.220575e+00 22 1.096000e-07 -1.500400e+00 -2.596988e-01 -1.220585e+00 23 1.196000e-07 -1.490400e+00 -2.597036e-01 -1.220584e+00 24 1.296000e-07 -1.480400e+00 -2.597172e-01 -1.220597e+00 25 1.396000e-07 -1.470400e+00 -2.597312e-01 -1.220603e+00 26 1.496000e-07 -1.460400e+00 -2.597574e-01 -1.220626e+00 27 1.596000e-07 -1.450400e+00 -2.597909e-01 -1.220646e+00 28 1.696000e-07 -1.440400e+00 -2.598451e-01 -1.220687e+00 29 1.796000e-07 -1.430400e+00 -2.599206e-01 -1.220737e+00 30 1.896000e-07 -1.420400e+00 -2.600364e-01 -1.220822e+00 31 1.996000e-07 -1.410400e+00 -2.602039e-01 -1.220937e+00 32 2.096000e-07 -1.400400e+00 -2.604565e-01 -1.221118e+00 33 2.196000e-07 -1.390400e+00 -2.608296e-01 -1.221378e+00 34 2.296000e-07 -1.380400e+00 -2.613935e-01 -1.221777e+00 35 2.396000e-07 -1.370400e+00 -2.622454e-01 -1.222374e+00 36 2.496000e-07 -1.360400e+00 -2.635633e-01 -1.223301e+00 37 2.596000e-07 -1.350400e+00 -2.656474e-01 -1.224758e+00 38 2.696000e-07 -1.340400e+00 -2.691142e-01 -1.227174e+00 39 2.796000e-07 -1.330400e+00 -2.754592e-01 -1.231549e+00 40 2.896000e-07 -1.320400e+00 -2.904897e-01 -1.241659e+00 41 2.908500e-07 -1.319150e+00 -2.937909e-01 -1.243775e+00 42 2.933500e-07 -1.316650e+00 -3.022121e-01 -1.249005e+00 43 2.983500e-07 -1.311650e+00 -3.530754e-01 -1.278494e+00 44 2.989377e-07 -1.311062e+00 -3.648930e-01 -1.284810e+00 45 3.001130e-07 -1.309887e+00 -3.946688e-01 -1.300264e+00 46 3.024637e-07 -1.307536e+00 -5.258934e-01 -1.365915e+00 47 3.053655e-07 -1.304634e+00 -7.414480e-01 -1.531865e+00 48 3.069708e-07 -1.303029e+00 -7.703435e-01 -1.613013e+00 49 3.085462e-07 -1.301454e+00 -7.548212e-01 -1.581753e+00 50 3.091916e-07 -1.300808e+00 -7.599894e-01 -1.587944e+00 51 3.100714e-07 -1.299929e+00 -7.615079e-01 -1.591739e+00 52 3.117780e-07 -1.298222e+00 -7.596986e-01 -1.589538e+00 53 3.133687e-07 -1.296631e+00 -7.619813e-01 -1.591363e+00 54 3.165501e-07 -1.293450e+00 -7.606503e-01 -1.590751e+00 Index time v(1) v(3) v(5) -------------------------------------------------------------------------------- 55 3.229128e-07 -1.287087e+00 -7.635697e-01 -1.592486e+00 56 3.329128e-07 -1.277087e+00 -7.635842e-01 -1.593180e+00 57 3.429128e-07 -1.267087e+00 -7.670469e-01 -1.595240e+00 58 3.529128e-07 -1.257087e+00 -7.671447e-01 -1.596085e+00 59 3.629128e-07 -1.247087e+00 -7.705213e-01 -1.598002e+00 60 3.729128e-07 -1.237087e+00 -7.707033e-01 -1.598978e+00 61 3.829128e-07 -1.227087e+00 -7.739950e-01 -1.600773e+00 62 3.929128e-07 -1.217087e+00 -7.742605e-01 -1.601861e+00 63 4.029128e-07 -1.207087e+00 -7.774693e-01 -1.603552e+00 64 4.100000e-07 -1.200000e+00 -7.773126e-01 -1.604332e+00 65 4.110000e-07 -1.200000e+00 -7.780130e-01 -1.604509e+00 66 4.130000e-07 -1.200000e+00 -7.781196e-01 -1.604633e+00 67 4.170000e-07 -1.200000e+00 -7.780251e-01 -1.604549e+00 68 4.250000e-07 -1.200000e+00 -7.781136e-01 -1.604617e+00 69 4.350000e-07 -1.200000e+00 -7.780286e-01 -1.604557e+00 70 4.450000e-07 -1.200000e+00 -7.781105e-01 -1.604611e+00 71 4.550000e-07 -1.200000e+00 -7.780316e-01 -1.604564e+00 72 4.650000e-07 -1.200000e+00 -7.781077e-01 -1.604605e+00 73 4.750000e-07 -1.200000e+00 -7.780343e-01 -1.604569e+00 74 4.850000e-07 -1.200000e+00 -7.781050e-01 -1.604600e+00 75 4.950000e-07 -1.200000e+00 -7.780370e-01 -1.604573e+00 76 5.050000e-07 -1.200000e+00 -7.781024e-01 -1.604596e+00 77 5.100000e-07 -1.200000e+00 -7.780406e-01 -1.604578e+00 78 5.110000e-07 -1.201000e+00 -7.779520e-01 -1.604563e+00 79 5.130000e-07 -1.203000e+00 -7.776242e-01 -1.604343e+00 80 5.170000e-07 -1.207000e+00 -7.769013e-01 -1.603735e+00 81 5.250000e-07 -1.215000e+00 -7.755126e-01 -1.602640e+00 82 5.350000e-07 -1.225000e+00 -7.737380e-01 -1.601196e+00 83 5.450000e-07 -1.235000e+00 -7.719955e-01 -1.599811e+00 84 5.550000e-07 -1.245000e+00 -7.702225e-01 -1.598373e+00 85 5.650000e-07 -1.255000e+00 -7.684778e-01 -1.596982e+00 86 5.750000e-07 -1.265000e+00 -7.667060e-01 -1.595549e+00 87 5.850000e-07 -1.275000e+00 -7.649587e-01 -1.594152e+00 88 5.950000e-07 -1.285000e+00 -7.631869e-01 -1.592723e+00 89 6.050000e-07 -1.295000e+00 -7.614357e-01 -1.591320e+00 90 6.150000e-07 -1.305000e+00 -7.596617e-01 -1.589892e+00 91 6.250000e-07 -1.315000e+00 -7.579034e-01 -1.588482e+00 92 6.350000e-07 -1.325000e+00 -7.561216e-01 -1.587050e+00 93 6.450000e-07 -1.335000e+00 -7.543482e-01 -1.585627e+00 94 6.550000e-07 -1.345000e+00 -7.525461e-01 -1.584183e+00 95 6.650000e-07 -1.355000e+00 -7.507383e-01 -1.582734e+00 96 6.750000e-07 -1.365000e+00 -7.488855e-01 -1.581254e+00 97 6.850000e-07 -1.375000e+00 -7.469963e-01 -1.579747e+00 98 6.950000e-07 -1.385000e+00 -7.450187e-01 -1.578179e+00 99 7.050000e-07 -1.395000e+00 -7.429314e-01 -1.576529e+00 100 7.150000e-07 -1.405000e+00 -7.406415e-01 -1.574739e+00 101 7.250000e-07 -1.415000e+00 -7.380496e-01 -1.572729e+00 102 7.350000e-07 -1.425000e+00 -7.349278e-01 -1.570349e+00 103 7.450000e-07 -1.435000e+00 -7.308991e-01 -1.567324e+00 104 7.550000e-07 -1.445000e+00 -7.250970e-01 -1.563064e+00 105 7.650000e-07 -1.455000e+00 -7.150970e-01 -1.555916e+00 106 7.750000e-07 -1.465000e+00 -6.840296e-01 -1.535033e+00 107 7.762500e-07 -1.466250e+00 -6.755682e-01 -1.529875e+00 108 7.787500e-07 -1.468750e+00 -6.497691e-01 -1.515033e+00 109 7.793750e-07 -1.469375e+00 -6.390606e-01 -1.509117e+00 110 7.806250e-07 -1.470625e+00 -6.119179e-01 -1.494579e+00 111 7.831250e-07 -1.473125e+00 -4.881476e-01 -1.431701e+00 112 7.857900e-07 -1.475790e+00 -2.833213e-01 -1.291740e+00 Index time v(1) v(3) v(5) -------------------------------------------------------------------------------- 113 7.875079e-07 -1.477508e+00 -2.519806e-01 -1.195893e+00 114 7.887109e-07 -1.478711e+00 -2.621152e-01 -1.226533e+00 115 7.894732e-07 -1.479473e+00 -2.594353e-01 -1.221026e+00 116 7.901883e-07 -1.480188e+00 -2.596381e-01 -1.219053e+00 117 7.915860e-07 -1.481586e+00 -2.598946e-01 -1.222134e+00 118 7.932408e-07 -1.483241e+00 -2.595996e-01 -1.219245e+00 119 7.954802e-07 -1.485480e+00 -2.598874e-01 -1.221860e+00 120 7.994272e-07 -1.489427e+00 -2.596034e-01 -1.219456e+00 121 8.061215e-07 -1.496122e+00 -2.598727e-01 -1.221737e+00 122 8.161215e-07 -1.506122e+00 -2.595949e-01 -1.219519e+00 123 8.261215e-07 -1.516122e+00 -2.598600e-01 -1.221674e+00 124 8.361215e-07 -1.526122e+00 -2.595899e-01 -1.219567e+00 125 8.461215e-07 -1.536122e+00 -2.598531e-01 -1.221618e+00 126 8.561215e-07 -1.546122e+00 -2.595885e-01 -1.219616e+00 127 8.661215e-07 -1.556122e+00 -2.598490e-01 -1.221567e+00 128 8.761215e-07 -1.566122e+00 -2.595885e-01 -1.219663e+00 129 8.861215e-07 -1.576122e+00 -2.598464e-01 -1.221519e+00 130 8.961215e-07 -1.586122e+00 -2.595892e-01 -1.219708e+00 131 9.061215e-07 -1.596122e+00 -2.598445e-01 -1.221474e+00 132 9.100000e-07 -1.600000e+00 -2.595910e-01 -1.219782e+00 133 9.110000e-07 -1.600000e+00 -2.596995e-01 -1.220535e+00 134 9.130000e-07 -1.600000e+00 -2.596983e-01 -1.220624e+00 135 9.155976e-07 -1.600000e+00 -2.597008e-01 -1.220555e+00 136 9.186319e-07 -1.600000e+00 -2.596984e-01 -1.220615e+00 137 9.247005e-07 -1.600000e+00 -2.597005e-01 -1.220560e+00 138 9.347005e-07 -1.600000e+00 -2.596987e-01 -1.220612e+00 139 9.447005e-07 -1.600000e+00 -2.597003e-01 -1.220562e+00 140 9.547005e-07 -1.600000e+00 -2.596989e-01 -1.220611e+00 141 9.647005e-07 -1.600000e+00 -2.597001e-01 -1.220563e+00 142 9.747005e-07 -1.600000e+00 -2.596991e-01 -1.220609e+00 143 9.847005e-07 -1.600000e+00 -2.596999e-01 -1.220564e+00 144 9.947005e-07 -1.600000e+00 -2.596993e-01 -1.220608e+00 145 1.000000e-06 -1.600000e+00 -2.596996e-01 -1.220566e+00 schmitt ckt - ecl compatible schmitt trigger -------------------------------------------------------------------------------- Index time v(6) -------------------------------------------------------------------------------- 0 0.000000e+00 -1.110593e+00 1 5.000000e-11 -1.110593e+00 2 1.000000e-10 -1.110593e+00 3 2.000000e-10 -1.110593e+00 4 4.000000e-10 -1.110593e+00 5 8.000000e-10 -1.110593e+00 6 1.600000e-09 -1.110593e+00 7 3.200000e-09 -1.110593e+00 8 6.400000e-09 -1.110593e+00 9 1.000000e-08 -1.110593e+00 10 1.064000e-08 -1.110574e+00 11 1.192000e-08 -1.110548e+00 12 1.448000e-08 -1.110543e+00 13 1.960000e-08 -1.110547e+00 14 2.960000e-08 -1.110542e+00 15 3.960000e-08 -1.110545e+00 16 4.960000e-08 -1.110539e+00 17 5.960000e-08 -1.110540e+00 18 6.960000e-08 -1.110534e+00 19 7.960000e-08 -1.110533e+00 20 8.960000e-08 -1.110525e+00 21 9.960000e-08 -1.110518e+00 22 1.096000e-07 -1.110504e+00 23 1.196000e-07 -1.110488e+00 24 1.296000e-07 -1.110461e+00 25 1.396000e-07 -1.110424e+00 26 1.496000e-07 -1.110368e+00 27 1.596000e-07 -1.110287e+00 28 1.696000e-07 -1.110166e+00 29 1.796000e-07 -1.109990e+00 30 1.896000e-07 -1.109729e+00 31 1.996000e-07 -1.109343e+00 32 2.096000e-07 -1.108769e+00 33 2.196000e-07 -1.107915e+00 34 2.296000e-07 -1.106632e+00 35 2.396000e-07 -1.104688e+00 36 2.496000e-07 -1.101690e+00 37 2.596000e-07 -1.096948e+00 38 2.696000e-07 -1.089084e+00 39 2.796000e-07 -1.074747e+00 40 2.896000e-07 -1.041148e+00 41 2.908500e-07 -1.033889e+00 42 2.933500e-07 -1.015594e+00 43 2.983500e-07 -9.080097e-01 44 2.989377e-07 -8.836122e-01 45 3.001130e-07 -8.228781e-01 46 3.024637e-07 -5.607994e-01 47 3.053655e-07 -1.162075e-01 48 3.069708e-07 -2.777315e-02 49 3.085462e-07 -4.560145e-02 50 3.091916e-07 -4.589713e-02 51 3.100714e-07 -4.390935e-02 52 3.117780e-07 -4.397798e-02 53 3.133687e-07 -4.398656e-02 54 3.165501e-07 -4.396146e-02 Index time v(6) -------------------------------------------------------------------------------- 55 3.229128e-07 -4.397825e-02 56 3.329128e-07 -4.394923e-02 57 3.429128e-07 -4.396739e-02 58 3.529128e-07 -4.394263e-02 59 3.629128e-07 -4.396234e-02 60 3.729128e-07 -4.394021e-02 61 3.829128e-07 -4.395989e-02 62 3.929128e-07 -4.393949e-02 63 4.029128e-07 -4.395860e-02 64 4.100000e-07 -4.393956e-02 65 4.110000e-07 -4.394856e-02 66 4.130000e-07 -4.394420e-02 67 4.170000e-07 -4.394332e-02 68 4.250000e-07 -4.394500e-02 69 4.350000e-07 -4.394311e-02 70 4.450000e-07 -4.394510e-02 71 4.550000e-07 -4.394307e-02 72 4.650000e-07 -4.394509e-02 73 4.750000e-07 -4.394310e-02 74 4.850000e-07 -4.394503e-02 75 4.950000e-07 -4.394318e-02 76 5.050000e-07 -4.394495e-02 77 5.100000e-07 -4.394331e-02 78 5.110000e-07 -4.394412e-02 79 5.130000e-07 -4.393933e-02 80 5.170000e-07 -4.393885e-02 81 5.250000e-07 -4.394047e-02 82 5.350000e-07 -4.393928e-02 83 5.450000e-07 -4.394162e-02 84 5.550000e-07 -4.394088e-02 85 5.650000e-07 -4.394414e-02 86 5.750000e-07 -4.394485e-02 87 5.850000e-07 -4.395010e-02 88 5.950000e-07 -4.395428e-02 89 6.050000e-07 -4.396441e-02 90 6.150000e-07 -4.397667e-02 91 6.250000e-07 -4.399868e-02 92 6.350000e-07 -4.402993e-02 93 6.450000e-07 -4.408066e-02 94 6.550000e-07 -4.415697e-02 95 6.650000e-07 -4.427686e-02 96 6.750000e-07 -4.446106e-02 97 6.850000e-07 -4.474806e-02 98 6.950000e-07 -4.519373e-02 99 7.050000e-07 -4.589066e-02 100 7.150000e-07 -4.698689e-02 101 7.250000e-07 -4.873044e-02 102 7.350000e-07 -5.155536e-02 103 7.450000e-07 -5.627755e-02 104 7.550000e-07 -6.465487e-02 105 7.650000e-07 -8.170330e-02 106 7.750000e-07 -1.417770e-01 107 7.762500e-07 -1.584564e-01 108 7.787500e-07 -2.093066e-01 109 7.793750e-07 -2.304399e-01 110 7.806250e-07 -2.840488e-01 111 7.831250e-07 -5.294524e-01 112 7.857900e-07 -9.812428e-01 Index time v(6) -------------------------------------------------------------------------------- 113 7.875079e-07 -1.132084e+00 114 7.887109e-07 -1.114840e+00 115 7.894732e-07 -1.108192e+00 116 7.901883e-07 -1.111046e+00 117 7.915860e-07 -1.110242e+00 118 7.932408e-07 -1.110831e+00 119 7.954802e-07 -1.110349e+00 120 7.994272e-07 -1.110812e+00 121 8.061215e-07 -1.110381e+00 122 8.161215e-07 -1.110831e+00 123 8.261215e-07 -1.110410e+00 124 8.361215e-07 -1.110842e+00 125 8.461215e-07 -1.110425e+00 126 8.561215e-07 -1.110844e+00 127 8.661215e-07 -1.110434e+00 128 8.761215e-07 -1.110842e+00 129 8.861215e-07 -1.110440e+00 130 8.961215e-07 -1.110838e+00 131 9.061215e-07 -1.110444e+00 132 9.100000e-07 -1.110830e+00 133 9.110000e-07 -1.110621e+00 134 9.130000e-07 -1.110583e+00 135 9.155976e-07 -1.110599e+00 136 9.186319e-07 -1.110587e+00 137 9.247005e-07 -1.110598e+00 138 9.347005e-07 -1.110588e+00 139 9.447005e-07 -1.110598e+00 140 9.547005e-07 -1.110587e+00 141 9.647005e-07 -1.110598e+00 142 9.747005e-07 -1.110587e+00 143 9.847005e-07 -1.110598e+00 144 9.947005e-07 -1.110587e+00 145 1.000000e-06 -1.110598e+00 -------------------------------------------------------------------------- schmitt ckt - ecl compatible schmitt trigger Legend: + = v(3) * = v(5) = = v(6) $ = v(1) -------------------------------------------------------------------------- time v(3) -2.00e+00 -1.00e+00 0.00e+00 ----------------------|------------------------|------------------------| 0.000e+00 -2.597e-01 . $ * = . + . 1.000e-08 -2.597e-01 . $ * = . + . 2.000e-08 -2.597e-01 . $ * = . + . 3.000e-08 -2.597e-01 . $ * = . + . 4.000e-08 -2.597e-01 . $ * = . + . 5.000e-08 -2.597e-01 . $ * = . + . 6.000e-08 -2.597e-01 . $ * = . + . 7.000e-08 -2.597e-01 . $ * = . + . 8.000e-08 -2.597e-01 . $ * = . + . 9.000e-08 -2.597e-01 . $ * = . + . 1.000e-07 -2.597e-01 . $ * = . + . 1.100e-07 -2.597e-01 . $ * = . + . 1.200e-07 -2.597e-01 . $ * = . + . 1.300e-07 -2.597e-01 . $ * = . + . 1.400e-07 -2.597e-01 . $ * = . + . 1.500e-07 -2.598e-01 . $ * = . + . 1.600e-07 -2.598e-01 . $ * = . + . 1.700e-07 -2.598e-01 . $ * = . + . 1.800e-07 -2.599e-01 . $ * = . + . 1.900e-07 -2.600e-01 . $ * = . + . 2.000e-07 -2.602e-01 . $ * = . + . 2.100e-07 -2.605e-01 . $ * = . + . 2.200e-07 -2.609e-01 . $ * = . + . 2.300e-07 -2.614e-01 . $ * = . + . 2.400e-07 -2.623e-01 . $ * = . + . 2.500e-07 -2.636e-01 . $ * = . + . 2.600e-07 -2.658e-01 . $ * = . + . 2.700e-07 -2.694e-01 . $ * = . + . 2.800e-07 -2.761e-01 . $ * = . + . 2.900e-07 -2.915e-01 . $* =. + . 3.000e-07 -3.918e-01 . X . = + . 3.100e-07 -7.614e-01 . * $ . + = . 3.200e-07 -7.622e-01 . * $ . + = . 3.300e-07 -7.636e-01 . * $ . + = . 3.400e-07 -7.660e-01 . * $ . + = . 3.500e-07 -7.671e-01 . * $ . + = . 3.600e-07 -7.695e-01 . * $ . + = . 3.700e-07 -7.707e-01 . * $ . + = . 3.800e-07 -7.730e-01 . * $ . + = . 3.900e-07 -7.742e-01 . * $ . + = . 4.000e-07 -7.765e-01 . * $ . + = . 4.100e-07 -7.773e-01 . * $ . + = . 4.200e-07 -7.781e-01 . * $ . + = . 4.300e-07 -7.781e-01 . * $ . + = . 4.400e-07 -7.781e-01 . * $ . + = . 4.500e-07 -7.781e-01 . * $ . + = . 4.600e-07 -7.781e-01 . * $ . + = . 4.700e-07 -7.781e-01 . * $ . + = . 4.800e-07 -7.781e-01 . * $ . + = . 4.900e-07 -7.781e-01 . * $ . + = . 5.000e-07 -7.781e-01 . * $ . + = . 5.100e-07 -7.780e-01 . * $ . + = . ----------------------|------------------------|------------------------| time v(3) -2.00e+00 -1.00e+00 0.00e+00 time v(3) -2.00e+00 -1.00e+00 0.00e+00 ----------------------|------------------------|------------------------| 5.200e-07 -7.764e-01 . * $ . + = . 5.300e-07 -7.746e-01 . * $ . + = . 5.400e-07 -7.729e-01 . * $ . + = . 5.500e-07 -7.711e-01 . * $ . + = . 5.600e-07 -7.694e-01 . * $ . + = . 5.700e-07 -7.676e-01 . * $ . + = . 5.800e-07 -7.658e-01 . * $ . + = . 5.900e-07 -7.641e-01 . * $ . + = . 6.000e-07 -7.623e-01 . * $ . + = . 6.100e-07 -7.605e-01 . * $ . + = . 6.200e-07 -7.588e-01 . * $ . + = . 6.300e-07 -7.570e-01 . * $ . + = . 6.400e-07 -7.552e-01 . * $ . + = . 6.500e-07 -7.534e-01 . * $ . + = . 6.600e-07 -7.516e-01 . * $ . + = . 6.700e-07 -7.498e-01 . * $ . + = . 6.800e-07 -7.479e-01 . * $ . + = . 6.900e-07 -7.460e-01 . * $ . + = . 7.000e-07 -7.440e-01 . * $ . + = . 7.100e-07 -7.418e-01 . * $ . + = . 7.200e-07 -7.393e-01 . * $ . + = . 7.300e-07 -7.365e-01 . * $ . + = . 7.400e-07 -7.329e-01 . * $ . + = . 7.500e-07 -7.280e-01 . * $ . + = . 7.600e-07 -7.201e-01 . * $ . + = . 7.700e-07 -6.996e-01 . * $ . + = . 7.800e-07 -6.255e-01 . *$ . + = . 7.900e-07 -2.596e-01 . $ * = . + . 8.000e-07 -2.596e-01 . $ * = . + . 8.100e-07 -2.598e-01 . $ * = . + . 8.200e-07 -2.597e-01 . $ * = . + . 8.300e-07 -2.598e-01 . $ * = . + . 8.400e-07 -2.597e-01 . $ * = . + . 8.500e-07 -2.598e-01 . $ * = . + . 8.600e-07 -2.597e-01 . $ * = . + . 8.700e-07 -2.597e-01 . $ * = . + . 8.800e-07 -2.597e-01 . $ * = . + . 8.900e-07 -2.597e-01 . $ * = . + . 9.000e-07 -2.597e-01 . $ * = . + . 9.100e-07 -2.596e-01 . $ * = . + . 9.200e-07 -2.597e-01 . $ * = . + . 9.300e-07 -2.597e-01 . $ * = . + . 9.400e-07 -2.597e-01 . $ * = . + . 9.500e-07 -2.597e-01 . $ * = . + . 9.600e-07 -2.597e-01 . $ * = . + . 9.700e-07 -2.597e-01 . $ * = . + . 9.800e-07 -2.597e-01 . $ * = . + . 9.900e-07 -2.597e-01 . $ * = . + . 1.000e-06 -2.597e-01 . $ * = . + . ----------------------|------------------------|------------------------| time v(3) -2.00e+00 -1.00e+00 0.00e+00 tmpk8ny_4pz/tests/general/fourbitadder.cir0000644000175000017500000000270513546075722021114 0ustar carstencarsten4 bit adder * Models: .MODEL dmod D .MODEL qmod NPN(level=1 BF=75 RB=100 CJE=1PF CJC=3PF) .options noacct .SUBCKT NAND 1 2 3 4 * noeuds: entrees(2) sortie vcc q1 9 5 1 qmod d1clamp 0 1 dmod q2 9 5 2 qmod d2clamp 0 2 dmod rb 4 5 4k r1 4 6 1.6k q3 6 9 8 qmod r2 8 0 1k rc 4 7 130 q4 7 6 10 qmod dvbedrop 10 3 dmod q5 3 8 0 qmod .ends NAND .SUBCKT ONEBIT 1 2 3 4 5 6 * noeuds entrees(2) ,carryin, sortie, carryout, vcc x1 1 2 7 6 NAND x2 1 7 8 6 NAND x3 2 7 9 6 NAND x4 8 9 10 6 NAND x5 3 10 11 6 NAND x6 3 11 12 6 NAND x7 10 11 13 6 NAND x8 12 13 4 6 NAND x9 11 7 5 6 NAND .ends ONEBIT .SUBCKT TWOBIT 1 2 3 4 5 6 7 8 9 * noeuds x1 1 2 7 5 10 9 ONEBIT x2 3 4 10 6 8 9 ONEBIT .ends TWOBIT .SUBCKT FOURBIT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 x1 1 2 3 4 9 10 13 16 15 TWOBIT x2 5 6 7 8 11 12 16 14 15 TWOBIT .ends FOURBIT * Inputs/Supplies: vcc 99 0 DC 5V VIN1A 1 0 DC 0 pulse(0 3 0 10ns 10ns 10ns 50ns) VIN1B 2 0 DC 0 pulse(0 3 0 10ns 10ns 20ns 100ns) VIN2A 3 0 DC 0 pulse(0 3 0 10ns 10ns 40ns 200ns) VIN2B 4 0 DC 0 pulse(0 3 0 10ns 10ns 80ns 400ns) VIN3A 5 0 DC 0 pulse(0 3 0 10ns 10ns 160ns 800ns) VIN3B 6 0 DC 0 pulse(0 3 0 10ns 10ns 320ns 1600ns) VIN4A 7 0 DC 0 pulse(0 3 0 10ns 10ns 640ns 3200ns) VIN4B 8 0 DC 0 pulse(0 3 0 10ns 10ns 1280ns 6400ns) * Circuit description: x1 1 2 3 4 5 6 7 8 9 10 11 12 0 13 99 FOURBIT rbit0 9 0 1k rbit1 10 0 1k rbit2 11 0 1k rbit3 12 0 1k rcout 13 0 1k * Analysys: .tran 1ns 6ns .print tran v(1) .end tmpk8ny_4pz/tests/general/diffpair.out0000644000175000017500000000001313546075722020246 0ustar carstencarstenTo be done tmpk8ny_4pz/tests/general/mosamp.out0000644000175000017500000036555313546075722020005 0ustar carstencarstenWarning: vin: no DC value, transient time 0 value used Circuit: mosamp - mos amplifier - transient Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Initial Transient Solution -------------------------- Node Voltage ---- ------- 15 15 1 9.64515 32 -20 2 -11.7354 30 -15 5 9.46394 4 -12.0678 20 0.0419716 8 -2.31455 6 9.69774 21 0 7 -11.9005 10 -10.3377 9 -12.9978 11 -12.0814 12 -8.894 13 -12.2724 14 -12.9655 16 -11.047 66 0.0419716 vb#branch 9.13779e-10 vddn#branch 0.00521512 vccp#branch -0.00521512 vin#branch 0 No. of Data Rows : 2463 mosamp - mos amplifier - transient -------------------------------------------------------------------------------- Index time v(20) v(66) -------------------------------------------------------------------------------- 0 0.000000e+00 4.197164e-02 4.197163e-02 1 1.000000e-11 4.197164e-02 4.197163e-02 2 2.000000e-11 4.197164e-02 4.197163e-02 3 4.000000e-11 4.197164e-02 4.197163e-02 4 8.000000e-11 4.197164e-02 4.197163e-02 5 1.600000e-10 4.197164e-02 4.197163e-02 6 3.200000e-10 4.197164e-02 4.197163e-02 7 6.400000e-10 4.197164e-02 4.197163e-02 8 1.000000e-09 4.197164e-02 4.197163e-02 9 1.064000e-09 1.462634e-01 4.218696e-02 10 1.192000e-09 3.375616e-01 4.300842e-02 11 1.334111e-09 4.713290e-01 4.465247e-02 12 1.469145e-09 5.350641e-01 4.662954e-02 13 1.646971e-09 6.075358e-01 4.960064e-02 14 2.000000e-09 7.392640e-01 5.657201e-02 15 2.035565e-09 7.242492e-01 5.732607e-02 16 2.106696e-09 6.948675e-01 5.879989e-02 17 2.248957e-09 6.398998e-01 6.155023e-02 18 2.533479e-09 5.441170e-01 6.634330e-02 19 3.102523e-09 3.995060e-01 7.365950e-02 20 3.738185e-09 2.937903e-01 7.917494e-02 21 4.587196e-09 2.089416e-01 8.381750e-02 22 5.860384e-09 1.434166e-01 8.753408e-02 23 7.163024e-09 1.108006e-01 8.916494e-02 24 8.520975e-09 9.059427e-02 8.966026e-02 25 9.898891e-09 7.791000e-02 8.942443e-02 26 1.174987e-08 7.096481e-02 8.855301e-02 27 1.422782e-08 7.675036e-02 8.742022e-02 28 1.762327e-08 9.956699e-02 8.749673e-02 29 2.120741e-08 1.249708e-01 9.020876e-02 30 2.551202e-08 1.466125e-01 9.613356e-02 31 3.088462e-08 1.692059e-01 1.059889e-01 32 3.889961e-08 2.134248e-01 1.255056e-01 33 4.735642e-08 2.684801e-01 1.531439e-01 34 6.191465e-08 3.670412e-01 2.154171e-01 35 7.815975e-08 4.917323e-01 3.034443e-01 36 1.106500e-07 7.744379e-01 5.268434e-01 37 1.756304e-07 1.418472e+00 1.096332e+00 38 1.881304e-07 1.551448e+00 1.220713e+00 39 2.131304e-07 1.812111e+00 1.471352e+00 40 2.139116e-07 1.820130e+00 1.479243e+00 41 2.154741e-07 1.836157e+00 1.495022e+00 42 2.158647e-07 1.840159e+00 1.498966e+00 43 2.166460e-07 1.848158e+00 1.506854e+00 44 2.182085e-07 1.864130e+00 1.522626e+00 45 2.182573e-07 1.864629e+00 1.523118e+00 46 2.183550e-07 1.865626e+00 1.524104e+00 47 2.185503e-07 1.867619e+00 1.526075e+00 48 2.189409e-07 1.871604e+00 1.530017e+00 49 2.190386e-07 1.872599e+00 1.531002e+00 50 2.192339e-07 1.874590e+00 1.532973e+00 51 2.196245e-07 1.878570e+00 1.536913e+00 52 2.197222e-07 1.879564e+00 1.537899e+00 53 2.199175e-07 1.881552e+00 1.539869e+00 54 2.203081e-07 1.885526e+00 1.543809e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 55 2.204058e-07 1.886519e+00 1.544794e+00 56 2.206011e-07 1.888505e+00 1.546763e+00 57 2.209917e-07 1.892473e+00 1.550703e+00 58 2.210894e-07 1.893465e+00 1.551687e+00 59 2.212847e-07 1.895447e+00 1.553656e+00 60 2.216753e-07 1.899410e+00 1.557594e+00 61 2.217729e-07 1.900399e+00 1.558579e+00 62 2.219683e-07 1.902379e+00 1.560547e+00 63 2.223589e-07 1.906335e+00 1.564484e+00 64 2.224565e-07 1.907323e+00 1.565468e+00 65 2.226519e-07 1.909299e+00 1.567436e+00 66 2.230425e-07 1.913249e+00 1.571372e+00 67 2.231401e-07 1.914236e+00 1.572356e+00 68 2.233354e-07 1.916209e+00 1.574323e+00 69 2.237261e-07 1.920152e+00 1.578257e+00 70 2.238237e-07 1.921137e+00 1.579241e+00 71 2.240190e-07 1.923106e+00 1.581207e+00 72 2.244097e-07 1.927042e+00 1.585140e+00 73 2.245073e-07 1.928026e+00 1.586123e+00 74 2.247026e-07 1.929992e+00 1.588089e+00 75 2.250933e-07 1.933921e+00 1.592020e+00 76 2.251909e-07 1.934902e+00 1.593003e+00 77 2.253862e-07 1.936864e+00 1.594968e+00 78 2.257769e-07 1.940786e+00 1.598897e+00 79 2.258745e-07 1.941766e+00 1.599879e+00 80 2.260698e-07 1.943725e+00 1.601843e+00 81 2.264604e-07 1.947639e+00 1.605771e+00 82 2.265581e-07 1.948617e+00 1.606753e+00 83 2.267534e-07 1.950572e+00 1.608716e+00 84 2.271440e-07 1.954479e+00 1.612642e+00 85 2.272417e-07 1.955455e+00 1.613623e+00 86 2.274370e-07 1.957406e+00 1.615585e+00 87 2.278276e-07 1.961306e+00 1.619509e+00 88 2.279253e-07 1.962280e+00 1.620490e+00 89 2.281206e-07 1.964227e+00 1.622451e+00 90 2.285112e-07 1.968119e+00 1.626372e+00 91 2.286089e-07 1.969091e+00 1.627352e+00 92 2.288042e-07 1.971035e+00 1.629313e+00 93 2.291948e-07 1.974919e+00 1.633232e+00 94 2.292925e-07 1.975889e+00 1.634211e+00 95 2.294878e-07 1.977828e+00 1.636170e+00 96 2.298784e-07 1.981705e+00 1.640087e+00 97 2.299761e-07 1.982673e+00 1.641066e+00 98 2.301714e-07 1.984608e+00 1.643024e+00 99 2.305620e-07 1.988476e+00 1.646939e+00 100 2.306597e-07 1.989442e+00 1.647917e+00 101 2.308550e-07 1.991374e+00 1.649873e+00 102 2.312456e-07 1.995234e+00 1.653785e+00 103 2.313433e-07 1.996198e+00 1.654763e+00 104 2.315386e-07 1.998125e+00 1.656718e+00 105 2.319292e-07 2.001977e+00 1.660628e+00 106 2.320269e-07 2.002939e+00 1.661605e+00 107 2.322222e-07 2.004862e+00 1.663558e+00 108 2.326128e-07 2.008705e+00 1.667465e+00 109 2.327104e-07 2.009665e+00 1.668441e+00 110 2.329058e-07 2.011584e+00 1.670393e+00 111 2.332964e-07 2.015418e+00 1.674297e+00 112 2.333940e-07 2.016376e+00 1.675273e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 113 2.335894e-07 2.018291e+00 1.677224e+00 114 2.339800e-07 2.022116e+00 1.681124e+00 115 2.340776e-07 2.023072e+00 1.682099e+00 116 2.342729e-07 2.024982e+00 1.684048e+00 117 2.346636e-07 2.028799e+00 1.687946e+00 118 2.347612e-07 2.029752e+00 1.688920e+00 119 2.349565e-07 2.031657e+00 1.690867e+00 120 2.353472e-07 2.035464e+00 1.694762e+00 121 2.354448e-07 2.036415e+00 1.695735e+00 122 2.356401e-07 2.038316e+00 1.697681e+00 123 2.360308e-07 2.042114e+00 1.701572e+00 124 2.361284e-07 2.043063e+00 1.702544e+00 125 2.363237e-07 2.044959e+00 1.704488e+00 126 2.367144e-07 2.048748e+00 1.708376e+00 127 2.368120e-07 2.049694e+00 1.709347e+00 128 2.370073e-07 2.051585e+00 1.711290e+00 129 2.373979e-07 2.055364e+00 1.715174e+00 130 2.374956e-07 2.056308e+00 1.716144e+00 131 2.376909e-07 2.058195e+00 1.718085e+00 132 2.380815e-07 2.061964e+00 1.721965e+00 133 2.381792e-07 2.062905e+00 1.722935e+00 134 2.383745e-07 2.064787e+00 1.724874e+00 135 2.387651e-07 2.068546e+00 1.728750e+00 136 2.388628e-07 2.069484e+00 1.729718e+00 137 2.390581e-07 2.071361e+00 1.731655e+00 138 2.394487e-07 2.075110e+00 1.735528e+00 139 2.395464e-07 2.076046e+00 1.736495e+00 140 2.397417e-07 2.077917e+00 1.738430e+00 141 2.401323e-07 2.081656e+00 1.742299e+00 142 2.402300e-07 2.082589e+00 1.743265e+00 143 2.404253e-07 2.084455e+00 1.745198e+00 144 2.408159e-07 2.088183e+00 1.749062e+00 145 2.409136e-07 2.089114e+00 1.750028e+00 146 2.411089e-07 2.090975e+00 1.751958e+00 147 2.414995e-07 2.094692e+00 1.755818e+00 148 2.415972e-07 2.095620e+00 1.756783e+00 149 2.417925e-07 2.097475e+00 1.758711e+00 150 2.421831e-07 2.101181e+00 1.762567e+00 151 2.422808e-07 2.102106e+00 1.763530e+00 152 2.424761e-07 2.103956e+00 1.765456e+00 153 2.428667e-07 2.107651e+00 1.769307e+00 154 2.429644e-07 2.108573e+00 1.770269e+00 155 2.431597e-07 2.110418e+00 1.772193e+00 156 2.435503e-07 2.114101e+00 1.776039e+00 157 2.436479e-07 2.115021e+00 1.777000e+00 158 2.438433e-07 2.116859e+00 1.778922e+00 159 2.442339e-07 2.120531e+00 1.782763e+00 160 2.443315e-07 2.121448e+00 1.783723e+00 161 2.445269e-07 2.123280e+00 1.785642e+00 162 2.449175e-07 2.126940e+00 1.789478e+00 163 2.450151e-07 2.127854e+00 1.790437e+00 164 2.452104e-07 2.129681e+00 1.792353e+00 165 2.456011e-07 2.133329e+00 1.796185e+00 166 2.456987e-07 2.134239e+00 1.797142e+00 167 2.458940e-07 2.136059e+00 1.799056e+00 168 2.462847e-07 2.139694e+00 1.802882e+00 169 2.463823e-07 2.140601e+00 1.803838e+00 170 2.465776e-07 2.142415e+00 1.805749e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 171 2.469683e-07 2.146039e+00 1.809570e+00 172 2.470659e-07 2.146944e+00 1.810525e+00 173 2.472612e-07 2.148753e+00 1.812433e+00 174 2.476519e-07 2.152368e+00 1.816249e+00 175 2.477495e-07 2.153271e+00 1.817202e+00 176 2.479448e-07 2.155076e+00 1.819108e+00 177 2.483354e-07 2.158684e+00 1.822917e+00 178 2.484331e-07 2.159585e+00 1.823869e+00 179 2.486284e-07 2.161388e+00 1.825773e+00 180 2.490190e-07 2.164989e+00 1.829577e+00 181 2.491167e-07 2.165889e+00 1.830527e+00 182 2.493120e-07 2.167688e+00 1.832428e+00 183 2.497026e-07 2.171284e+00 1.836226e+00 184 2.498003e-07 2.172182e+00 1.837176e+00 185 2.499956e-07 2.173979e+00 1.839073e+00 186 2.503862e-07 2.177569e+00 1.842867e+00 187 2.504839e-07 2.178466e+00 1.843814e+00 188 2.506792e-07 2.180259e+00 1.845709e+00 189 2.510698e-07 2.183844e+00 1.849497e+00 190 2.511675e-07 2.184740e+00 1.850443e+00 191 2.513628e-07 2.186531e+00 1.852336e+00 192 2.517534e-07 2.190110e+00 1.856118e+00 193 2.518511e-07 2.191005e+00 1.857063e+00 194 2.520464e-07 2.192793e+00 1.858952e+00 195 2.524370e-07 2.196367e+00 1.862729e+00 196 2.525347e-07 2.197261e+00 1.863673e+00 197 2.527300e-07 2.199046e+00 1.865560e+00 198 2.531206e-07 2.202615e+00 1.869331e+00 199 2.532183e-07 2.203507e+00 1.870273e+00 200 2.534136e-07 2.205290e+00 1.872157e+00 201 2.538042e-07 2.208854e+00 1.875923e+00 202 2.539019e-07 2.209745e+00 1.876864e+00 203 2.540972e-07 2.211525e+00 1.878745e+00 204 2.544878e-07 2.215084e+00 1.882506e+00 205 2.545854e-07 2.215973e+00 1.883445e+00 206 2.547808e-07 2.217751e+00 1.885324e+00 207 2.551714e-07 2.221305e+00 1.889079e+00 208 2.552690e-07 2.222193e+00 1.890017e+00 209 2.554644e-07 2.223968e+00 1.891893e+00 210 2.558550e-07 2.227517e+00 1.895643e+00 211 2.559526e-07 2.228404e+00 1.896579e+00 212 2.561479e-07 2.230177e+00 1.898453e+00 213 2.565386e-07 2.233720e+00 1.902197e+00 214 2.566362e-07 2.234605e+00 1.903132e+00 215 2.568315e-07 2.236376e+00 1.905003e+00 216 2.572222e-07 2.239914e+00 1.908742e+00 217 2.580034e-07 2.246983e+00 1.916210e+00 218 2.581987e-07 2.248748e+00 1.918075e+00 219 2.585894e-07 2.252276e+00 1.921803e+00 220 2.586870e-07 2.253158e+00 1.922734e+00 221 2.588823e-07 2.254921e+00 1.924597e+00 222 2.592729e-07 2.258444e+00 1.928319e+00 223 2.593706e-07 2.259324e+00 1.929249e+00 224 2.595659e-07 2.261085e+00 1.931109e+00 225 2.599565e-07 2.264603e+00 1.934826e+00 226 2.607378e-07 2.271635e+00 1.942252e+00 227 2.609331e-07 2.273393e+00 1.944106e+00 228 2.613237e-07 2.276910e+00 1.947813e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 229 2.614214e-07 2.277789e+00 1.948739e+00 230 2.616167e-07 2.279549e+00 1.950591e+00 231 2.620073e-07 2.283070e+00 1.954292e+00 232 2.621050e-07 2.283951e+00 1.955217e+00 233 2.623003e-07 2.285712e+00 1.957067e+00 234 2.626909e-07 2.289238e+00 1.960764e+00 235 2.627886e-07 2.290120e+00 1.961687e+00 236 2.629839e-07 2.291884e+00 1.963534e+00 237 2.633745e-07 2.295413e+00 1.967226e+00 238 2.634722e-07 2.296296e+00 1.968149e+00 239 2.636675e-07 2.298061e+00 1.969994e+00 240 2.640581e-07 2.301594e+00 1.973681e+00 241 2.641558e-07 2.302478e+00 1.974603e+00 242 2.643511e-07 2.304245e+00 1.976445e+00 243 2.647417e-07 2.307780e+00 1.980129e+00 244 2.648394e-07 2.308664e+00 1.981049e+00 245 2.650347e-07 2.310432e+00 1.982889e+00 246 2.654253e-07 2.313969e+00 1.986568e+00 247 2.655229e-07 2.314854e+00 1.987487e+00 248 2.657183e-07 2.316623e+00 1.989326e+00 249 2.661089e-07 2.320161e+00 1.993001e+00 250 2.662065e-07 2.321045e+00 1.993919e+00 251 2.664019e-07 2.322815e+00 1.995755e+00 252 2.667925e-07 2.326353e+00 1.999426e+00 253 2.675737e-07 2.333440e+00 2.006761e+00 254 2.677690e-07 2.335214e+00 2.008593e+00 255 2.681597e-07 2.338765e+00 2.012256e+00 256 2.682573e-07 2.339654e+00 2.013171e+00 257 2.684526e-07 2.341431e+00 2.015002e+00 258 2.688433e-07 2.344985e+00 2.018661e+00 259 2.689409e-07 2.345874e+00 2.019576e+00 260 2.691362e-07 2.347650e+00 2.021405e+00 261 2.695269e-07 2.351203e+00 2.025061e+00 262 2.696245e-07 2.352090e+00 2.025975e+00 263 2.698198e-07 2.353866e+00 2.027802e+00 264 2.702104e-07 2.357414e+00 2.031454e+00 265 2.703081e-07 2.358301e+00 2.032367e+00 266 2.705034e-07 2.360073e+00 2.034193e+00 267 2.708940e-07 2.363617e+00 2.037842e+00 268 2.709917e-07 2.364502e+00 2.038754e+00 269 2.711870e-07 2.366272e+00 2.040578e+00 270 2.715776e-07 2.369810e+00 2.044223e+00 271 2.716753e-07 2.370693e+00 2.045134e+00 272 2.718706e-07 2.372461e+00 2.046956e+00 273 2.722612e-07 2.375993e+00 2.050598e+00 274 2.723589e-07 2.376875e+00 2.051509e+00 275 2.725542e-07 2.378640e+00 2.053329e+00 276 2.729448e-07 2.382166e+00 2.056967e+00 277 2.730425e-07 2.383047e+00 2.057877e+00 278 2.732378e-07 2.384809e+00 2.059695e+00 279 2.736284e-07 2.388329e+00 2.063330e+00 280 2.737261e-07 2.389208e+00 2.064238e+00 281 2.739214e-07 2.390967e+00 2.066055e+00 282 2.743120e-07 2.394481e+00 2.069686e+00 283 2.744097e-07 2.395359e+00 2.070594e+00 284 2.746050e-07 2.397115e+00 2.072409e+00 285 2.749956e-07 2.400624e+00 2.076036e+00 286 2.750933e-07 2.401500e+00 2.076943e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 287 2.752886e-07 2.403253e+00 2.078756e+00 288 2.756792e-07 2.406755e+00 2.082380e+00 289 2.757769e-07 2.407630e+00 2.083285e+00 290 2.759722e-07 2.409380e+00 2.085096e+00 291 2.763628e-07 2.412877e+00 2.088716e+00 292 2.764604e-07 2.413750e+00 2.089621e+00 293 2.766558e-07 2.415497e+00 2.091430e+00 294 2.770464e-07 2.418988e+00 2.095046e+00 295 2.771440e-07 2.419860e+00 2.095950e+00 296 2.773394e-07 2.421604e+00 2.097757e+00 297 2.777300e-07 2.425089e+00 2.101370e+00 298 2.778276e-07 2.425959e+00 2.102272e+00 299 2.780229e-07 2.427700e+00 2.104078e+00 300 2.784136e-07 2.431179e+00 2.107686e+00 301 2.785112e-07 2.432048e+00 2.108588e+00 302 2.787065e-07 2.433786e+00 2.110391e+00 303 2.790972e-07 2.437260e+00 2.113996e+00 304 2.791948e-07 2.438127e+00 2.114897e+00 305 2.793901e-07 2.439862e+00 2.116698e+00 306 2.797808e-07 2.443329e+00 2.120299e+00 307 2.798784e-07 2.444195e+00 2.121199e+00 308 2.800737e-07 2.445927e+00 2.122998e+00 309 2.804644e-07 2.449388e+00 2.126595e+00 310 2.805620e-07 2.450253e+00 2.127494e+00 311 2.807573e-07 2.451982e+00 2.129291e+00 312 2.811479e-07 2.455437e+00 2.132884e+00 313 2.812456e-07 2.456300e+00 2.133782e+00 314 2.814409e-07 2.458026e+00 2.135577e+00 315 2.818315e-07 2.461476e+00 2.139166e+00 316 2.819292e-07 2.462337e+00 2.140062e+00 317 2.821245e-07 2.464060e+00 2.141856e+00 318 2.825151e-07 2.467504e+00 2.145440e+00 319 2.826128e-07 2.468364e+00 2.146336e+00 320 2.828081e-07 2.470084e+00 2.148127e+00 321 2.831987e-07 2.473522e+00 2.151708e+00 322 2.832964e-07 2.474381e+00 2.152602e+00 323 2.834917e-07 2.476098e+00 2.154391e+00 324 2.838823e-07 2.479530e+00 2.157968e+00 325 2.839800e-07 2.480387e+00 2.158862e+00 326 2.841753e-07 2.482102e+00 2.160649e+00 327 2.845659e-07 2.485528e+00 2.164221e+00 328 2.846636e-07 2.486384e+00 2.165113e+00 329 2.848589e-07 2.488096e+00 2.166898e+00 330 2.852495e-07 2.491517e+00 2.170466e+00 331 2.853472e-07 2.492372e+00 2.171358e+00 332 2.855425e-07 2.494080e+00 2.173141e+00 333 2.859331e-07 2.497496e+00 2.176705e+00 334 2.860308e-07 2.498349e+00 2.177595e+00 335 2.862261e-07 2.500055e+00 2.179376e+00 336 2.866167e-07 2.503466e+00 2.182936e+00 337 2.867144e-07 2.504318e+00 2.183825e+00 338 2.869097e-07 2.506021e+00 2.185604e+00 339 2.873003e-07 2.509426e+00 2.189159e+00 340 2.873979e-07 2.510276e+00 2.190047e+00 341 2.875933e-07 2.511977e+00 2.191824e+00 342 2.879839e-07 2.515377e+00 2.195375e+00 343 2.880815e-07 2.516226e+00 2.196262e+00 344 2.882769e-07 2.517924e+00 2.198037e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 345 2.886675e-07 2.521317e+00 2.201583e+00 346 2.887651e-07 2.522165e+00 2.202470e+00 347 2.889604e-07 2.523861e+00 2.204242e+00 348 2.893511e-07 2.527249e+00 2.207784e+00 349 2.894487e-07 2.528096e+00 2.208670e+00 350 2.896440e-07 2.529789e+00 2.210440e+00 351 2.900347e-07 2.533172e+00 2.213978e+00 352 2.901323e-07 2.534017e+00 2.214862e+00 353 2.903276e-07 2.535708e+00 2.216630e+00 354 2.907183e-07 2.539086e+00 2.220164e+00 355 2.908159e-07 2.539930e+00 2.221047e+00 356 2.910112e-07 2.541618e+00 2.222812e+00 357 2.914019e-07 2.544991e+00 2.226342e+00 358 2.914995e-07 2.545834e+00 2.227224e+00 359 2.916948e-07 2.547519e+00 2.228987e+00 360 2.920854e-07 2.550887e+00 2.232513e+00 361 2.921831e-07 2.551729e+00 2.233393e+00 362 2.923784e-07 2.553412e+00 2.235155e+00 363 2.927690e-07 2.556775e+00 2.238676e+00 364 2.928667e-07 2.557615e+00 2.239555e+00 365 2.930620e-07 2.559296e+00 2.241315e+00 366 2.934526e-07 2.562654e+00 2.244831e+00 367 2.935503e-07 2.563493e+00 2.245710e+00 368 2.937456e-07 2.565171e+00 2.247467e+00 369 2.941362e-07 2.568524e+00 2.250979e+00 370 2.942339e-07 2.569362e+00 2.251856e+00 371 2.944292e-07 2.571038e+00 2.253611e+00 372 2.948198e-07 2.574386e+00 2.257119e+00 373 2.949175e-07 2.575223e+00 2.257995e+00 374 2.951128e-07 2.576896e+00 2.259748e+00 375 2.955034e-07 2.580239e+00 2.263251e+00 376 2.956011e-07 2.581075e+00 2.264127e+00 377 2.957964e-07 2.582745e+00 2.265877e+00 378 2.961870e-07 2.586084e+00 2.269376e+00 379 2.962847e-07 2.586918e+00 2.270250e+00 380 2.964800e-07 2.588586e+00 2.271999e+00 381 2.968706e-07 2.591920e+00 2.275493e+00 382 2.969683e-07 2.592753e+00 2.276366e+00 383 2.971636e-07 2.594419e+00 2.278113e+00 384 2.975542e-07 2.597748e+00 2.281603e+00 385 2.976519e-07 2.598580e+00 2.282475e+00 386 2.978472e-07 2.600244e+00 2.284219e+00 387 2.982378e-07 2.603568e+00 2.287704e+00 388 2.983354e-07 2.604399e+00 2.288575e+00 389 2.985308e-07 2.606060e+00 2.290317e+00 390 2.989214e-07 2.609380e+00 2.293798e+00 391 2.990190e-07 2.610209e+00 2.294668e+00 392 2.992144e-07 2.611868e+00 2.296408e+00 393 2.996050e-07 2.615183e+00 2.299885e+00 394 2.997026e-07 2.616012e+00 2.300754e+00 395 2.998979e-07 2.617668e+00 2.302491e+00 396 3.002886e-07 2.620978e+00 2.305963e+00 397 3.003862e-07 2.621806e+00 2.306831e+00 398 3.005815e-07 2.623460e+00 2.308566e+00 399 3.009722e-07 2.626766e+00 2.312034e+00 400 3.010698e-07 2.627592e+00 2.312901e+00 401 3.012651e-07 2.629243e+00 2.314634e+00 402 3.016558e-07 2.632545e+00 2.318098e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 403 3.017534e-07 2.633370e+00 2.318963e+00 404 3.019487e-07 2.635019e+00 2.320694e+00 405 3.023394e-07 2.638316e+00 2.324153e+00 406 3.024370e-07 2.639140e+00 2.325018e+00 407 3.026323e-07 2.640787e+00 2.326746e+00 408 3.030229e-07 2.644079e+00 2.330201e+00 409 3.031206e-07 2.644902e+00 2.331064e+00 410 3.033159e-07 2.646547e+00 2.332790e+00 411 3.037065e-07 2.649834e+00 2.336241e+00 412 3.038042e-07 2.650656e+00 2.337103e+00 413 3.039995e-07 2.652299e+00 2.338827e+00 414 3.043901e-07 2.655582e+00 2.342274e+00 415 3.044878e-07 2.656402e+00 2.343135e+00 416 3.046831e-07 2.658043e+00 2.344856e+00 417 3.050737e-07 2.661321e+00 2.348298e+00 418 3.051714e-07 2.662141e+00 2.349158e+00 419 3.053667e-07 2.663779e+00 2.350878e+00 420 3.057573e-07 2.667053e+00 2.354315e+00 421 3.058550e-07 2.667871e+00 2.355174e+00 422 3.060503e-07 2.669507e+00 2.356892e+00 423 3.064409e-07 2.672777e+00 2.360325e+00 424 3.065386e-07 2.673594e+00 2.361183e+00 425 3.067339e-07 2.675228e+00 2.362898e+00 426 3.071245e-07 2.678494e+00 2.366327e+00 427 3.072222e-07 2.679310e+00 2.367183e+00 428 3.074175e-07 2.680941e+00 2.368896e+00 429 3.078081e-07 2.684202e+00 2.372321e+00 430 3.079058e-07 2.685017e+00 2.373176e+00 431 3.081011e-07 2.686647e+00 2.374887e+00 432 3.084917e-07 2.689903e+00 2.378307e+00 433 3.085894e-07 2.690717e+00 2.379161e+00 434 3.087847e-07 2.692344e+00 2.380870e+00 435 3.091753e-07 2.695597e+00 2.384286e+00 436 3.092729e-07 2.696409e+00 2.385139e+00 437 3.094683e-07 2.698034e+00 2.386846e+00 438 3.098589e-07 2.701282e+00 2.390257e+00 439 3.099565e-07 2.702094e+00 2.391109e+00 440 3.101519e-07 2.703717e+00 2.392813e+00 441 3.105425e-07 2.706961e+00 2.396220e+00 442 3.106401e-07 2.707771e+00 2.397071e+00 443 3.108354e-07 2.709392e+00 2.398774e+00 444 3.112261e-07 2.712631e+00 2.402176e+00 445 3.113237e-07 2.713441e+00 2.403026e+00 446 3.115190e-07 2.715059e+00 2.404726e+00 447 3.119097e-07 2.718295e+00 2.408124e+00 448 3.120073e-07 2.719103e+00 2.408973e+00 449 3.122026e-07 2.720719e+00 2.410671e+00 450 3.125933e-07 2.723950e+00 2.414065e+00 451 3.126909e-07 2.724758e+00 2.414913e+00 452 3.128862e-07 2.726372e+00 2.416608e+00 453 3.132769e-07 2.729599e+00 2.419998e+00 454 3.133745e-07 2.730405e+00 2.420845e+00 455 3.135698e-07 2.732017e+00 2.422538e+00 456 3.139604e-07 2.735239e+00 2.425923e+00 457 3.140581e-07 2.736045e+00 2.426769e+00 458 3.142534e-07 2.737655e+00 2.428460e+00 459 3.146440e-07 2.740873e+00 2.431841e+00 460 3.147417e-07 2.741677e+00 2.432686e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 461 3.149370e-07 2.743285e+00 2.434375e+00 462 3.153276e-07 2.746499e+00 2.437751e+00 463 3.154253e-07 2.747302e+00 2.438595e+00 464 3.156206e-07 2.748908e+00 2.440282e+00 465 3.160112e-07 2.752117e+00 2.443654e+00 466 3.161089e-07 2.752919e+00 2.444497e+00 467 3.163042e-07 2.754523e+00 2.446181e+00 468 3.166948e-07 2.757729e+00 2.449549e+00 469 3.167925e-07 2.758530e+00 2.450391e+00 470 3.169878e-07 2.760131e+00 2.452073e+00 471 3.173784e-07 2.763333e+00 2.455437e+00 472 3.174761e-07 2.764133e+00 2.456277e+00 473 3.176714e-07 2.765732e+00 2.457958e+00 474 3.180620e-07 2.768929e+00 2.461317e+00 475 3.181597e-07 2.769728e+00 2.462156e+00 476 3.183550e-07 2.771326e+00 2.463834e+00 477 3.187456e-07 2.774519e+00 2.467189e+00 478 3.188433e-07 2.775317e+00 2.468028e+00 479 3.190386e-07 2.776912e+00 2.469704e+00 480 3.194292e-07 2.780101e+00 2.473054e+00 481 3.195269e-07 2.780898e+00 2.473891e+00 482 3.197222e-07 2.782491e+00 2.475566e+00 483 3.201128e-07 2.785676e+00 2.478912e+00 484 3.202104e-07 2.786472e+00 2.479748e+00 485 3.204058e-07 2.788063e+00 2.481420e+00 486 3.207964e-07 2.791243e+00 2.484762e+00 487 3.208940e-07 2.792038e+00 2.485597e+00 488 3.210894e-07 2.793627e+00 2.487267e+00 489 3.214800e-07 2.796804e+00 2.490604e+00 490 3.215776e-07 2.797598e+00 2.491438e+00 491 3.217729e-07 2.799185e+00 2.493106e+00 492 3.221636e-07 2.802357e+00 2.496440e+00 493 3.222612e-07 2.803150e+00 2.497272e+00 494 3.224565e-07 2.804735e+00 2.498938e+00 495 3.228472e-07 2.807903e+00 2.502267e+00 496 3.229448e-07 2.808695e+00 2.503099e+00 497 3.231401e-07 2.810278e+00 2.504762e+00 498 3.235308e-07 2.813442e+00 2.508087e+00 499 3.236284e-07 2.814233e+00 2.508918e+00 500 3.238237e-07 2.815814e+00 2.510579e+00 501 3.242144e-07 2.818974e+00 2.513900e+00 502 3.243120e-07 2.819764e+00 2.514730e+00 503 3.245073e-07 2.821343e+00 2.516389e+00 504 3.248979e-07 2.824499e+00 2.519705e+00 505 3.249956e-07 2.825287e+00 2.520534e+00 506 3.251909e-07 2.826864e+00 2.522191e+00 507 3.255815e-07 2.830016e+00 2.525503e+00 508 3.256792e-07 2.830804e+00 2.526331e+00 509 3.258745e-07 2.832379e+00 2.527986e+00 510 3.262651e-07 2.835527e+00 2.531294e+00 511 3.263628e-07 2.836313e+00 2.532121e+00 512 3.265581e-07 2.837886e+00 2.533773e+00 513 3.269487e-07 2.841030e+00 2.537077e+00 514 3.270464e-07 2.841816e+00 2.537903e+00 515 3.272417e-07 2.843386e+00 2.539553e+00 516 3.276323e-07 2.846526e+00 2.542853e+00 517 3.277300e-07 2.847311e+00 2.543677e+00 518 3.279253e-07 2.848880e+00 2.545326e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 519 3.283159e-07 2.852016e+00 2.548621e+00 520 3.284136e-07 2.852799e+00 2.549445e+00 521 3.286089e-07 2.854366e+00 2.551091e+00 522 3.289995e-07 2.857498e+00 2.554383e+00 523 3.290972e-07 2.858280e+00 2.555205e+00 524 3.292925e-07 2.859845e+00 2.556849e+00 525 3.296831e-07 2.862973e+00 2.560136e+00 526 3.297808e-07 2.863755e+00 2.560958e+00 527 3.299761e-07 2.865317e+00 2.562600e+00 528 3.303667e-07 2.868441e+00 2.565883e+00 529 3.304644e-07 2.869222e+00 2.566703e+00 530 3.306597e-07 2.870783e+00 2.568343e+00 531 3.310503e-07 2.873902e+00 2.571622e+00 532 3.311479e-07 2.874682e+00 2.572441e+00 533 3.313433e-07 2.876241e+00 2.574079e+00 534 3.317339e-07 2.879357e+00 2.577354e+00 535 3.318315e-07 2.880135e+00 2.578172e+00 536 3.320269e-07 2.881692e+00 2.579808e+00 537 3.324175e-07 2.884804e+00 2.583078e+00 538 3.325151e-07 2.885582e+00 2.583896e+00 539 3.327104e-07 2.887137e+00 2.585530e+00 540 3.331011e-07 2.890244e+00 2.588796e+00 541 3.331987e-07 2.891021e+00 2.589612e+00 542 3.333940e-07 2.892574e+00 2.591244e+00 543 3.337847e-07 2.895678e+00 2.594506e+00 544 3.338823e-07 2.896454e+00 2.595321e+00 545 3.340776e-07 2.898004e+00 2.596951e+00 546 3.344683e-07 2.901104e+00 2.600209e+00 547 3.345659e-07 2.901879e+00 2.601023e+00 548 3.347612e-07 2.903428e+00 2.602650e+00 549 3.351519e-07 2.906524e+00 2.605904e+00 550 3.352495e-07 2.907298e+00 2.606717e+00 551 3.354448e-07 2.908845e+00 2.608343e+00 552 3.358354e-07 2.911937e+00 2.611593e+00 553 3.366167e-07 2.918114e+00 2.618085e+00 554 3.368120e-07 2.919657e+00 2.619706e+00 555 3.372026e-07 2.922741e+00 2.622947e+00 556 3.379839e-07 2.928904e+00 2.629423e+00 557 3.381792e-07 2.930443e+00 2.631040e+00 558 3.385698e-07 2.933519e+00 2.634274e+00 559 3.393511e-07 2.939665e+00 2.640733e+00 560 3.395464e-07 2.941200e+00 2.642346e+00 561 3.399370e-07 2.944269e+00 2.645571e+00 562 3.407183e-07 2.950400e+00 2.652014e+00 563 3.409136e-07 2.951931e+00 2.653623e+00 564 3.413042e-07 2.954992e+00 2.656840e+00 565 3.420854e-07 2.961107e+00 2.663267e+00 566 3.422808e-07 2.962634e+00 2.664872e+00 567 3.426714e-07 2.965687e+00 2.668081e+00 568 3.434526e-07 2.971788e+00 2.674492e+00 569 3.436479e-07 2.973311e+00 2.676093e+00 570 3.440386e-07 2.976357e+00 2.679293e+00 571 3.448198e-07 2.982441e+00 2.685688e+00 572 3.450151e-07 2.983960e+00 2.687285e+00 573 3.454058e-07 2.986998e+00 2.690477e+00 574 3.461870e-07 2.993067e+00 2.696856e+00 575 3.463823e-07 2.994583e+00 2.698449e+00 576 3.467729e-07 2.997613e+00 2.701633e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 577 3.475542e-07 3.003666e+00 2.707996e+00 578 3.477495e-07 3.005178e+00 2.709584e+00 579 3.481401e-07 3.008202e+00 2.712761e+00 580 3.489214e-07 3.014245e+00 2.719107e+00 581 3.491167e-07 3.015755e+00 2.720692e+00 582 3.495073e-07 3.018773e+00 2.723861e+00 583 3.502886e-07 3.024804e+00 2.730192e+00 584 3.504839e-07 3.026309e+00 2.731773e+00 585 3.508745e-07 3.029320e+00 2.734934e+00 586 3.516558e-07 3.035335e+00 2.741249e+00 587 3.518511e-07 3.036837e+00 2.742826e+00 588 3.522417e-07 3.039839e+00 2.745979e+00 589 3.530229e-07 3.045838e+00 2.752278e+00 590 3.532183e-07 3.047336e+00 2.753852e+00 591 3.536089e-07 3.050331e+00 2.756997e+00 592 3.543901e-07 3.056314e+00 2.763281e+00 593 3.545854e-07 3.057808e+00 2.764850e+00 594 3.549761e-07 3.060794e+00 2.767987e+00 595 3.557573e-07 3.066761e+00 2.774256e+00 596 3.559526e-07 3.068251e+00 2.775821e+00 597 3.563433e-07 3.071231e+00 2.778951e+00 598 3.571245e-07 3.077183e+00 2.785204e+00 599 3.573198e-07 3.078669e+00 2.786765e+00 600 3.577104e-07 3.081641e+00 2.789887e+00 601 3.584917e-07 3.087577e+00 2.796124e+00 602 3.586870e-07 3.089060e+00 2.797682e+00 603 3.590776e-07 3.092024e+00 2.800796e+00 604 3.598589e-07 3.097946e+00 2.807018e+00 605 3.600542e-07 3.099425e+00 2.808571e+00 606 3.604448e-07 3.102381e+00 2.811678e+00 607 3.612261e-07 3.108287e+00 2.817884e+00 608 3.614214e-07 3.109762e+00 2.819434e+00 609 3.618120e-07 3.112711e+00 2.822533e+00 610 3.625933e-07 3.118603e+00 2.828723e+00 611 3.627886e-07 3.120074e+00 2.830270e+00 612 3.631792e-07 3.123016e+00 2.833361e+00 613 3.639604e-07 3.128893e+00 2.839536e+00 614 3.641558e-07 3.130361e+00 2.841078e+00 615 3.645464e-07 3.133295e+00 2.844162e+00 616 3.653276e-07 3.139157e+00 2.850322e+00 617 3.655229e-07 3.140621e+00 2.851860e+00 618 3.659136e-07 3.143548e+00 2.854936e+00 619 3.666948e-07 3.149396e+00 2.861081e+00 620 3.668901e-07 3.150856e+00 2.862616e+00 621 3.672808e-07 3.153776e+00 2.865684e+00 622 3.680620e-07 3.159609e+00 2.871813e+00 623 3.682573e-07 3.161066e+00 2.873344e+00 624 3.686479e-07 3.163979e+00 2.876405e+00 625 3.694292e-07 3.169797e+00 2.882519e+00 626 3.696245e-07 3.171250e+00 2.884046e+00 627 3.700151e-07 3.174156e+00 2.887099e+00 628 3.707964e-07 3.179960e+00 2.893199e+00 629 3.709917e-07 3.181410e+00 2.894722e+00 630 3.713823e-07 3.184308e+00 2.897767e+00 631 3.721636e-07 3.190098e+00 2.903852e+00 632 3.723589e-07 3.191544e+00 2.905371e+00 633 3.727495e-07 3.194435e+00 2.908409e+00 634 3.735308e-07 3.200211e+00 2.914479e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 635 3.737261e-07 3.201653e+00 2.915994e+00 636 3.741167e-07 3.204537e+00 2.919025e+00 637 3.748979e-07 3.210299e+00 2.925079e+00 638 3.750933e-07 3.211737e+00 2.926591e+00 639 3.754839e-07 3.214614e+00 2.929614e+00 640 3.762651e-07 3.220363e+00 2.935654e+00 641 3.764604e-07 3.221798e+00 2.937162e+00 642 3.768511e-07 3.224667e+00 2.940178e+00 643 3.776323e-07 3.230401e+00 2.946203e+00 644 3.778276e-07 3.231833e+00 2.947707e+00 645 3.782183e-07 3.234696e+00 2.950715e+00 646 3.789995e-07 3.240415e+00 2.956725e+00 647 3.791948e-07 3.241844e+00 2.958226e+00 648 3.795854e-07 3.244699e+00 2.961227e+00 649 3.803667e-07 3.250405e+00 2.967222e+00 650 3.805620e-07 3.251830e+00 2.968719e+00 651 3.809526e-07 3.254678e+00 2.971713e+00 652 3.817339e-07 3.260370e+00 2.977693e+00 653 3.819292e-07 3.261791e+00 2.979187e+00 654 3.823198e-07 3.264633e+00 2.982173e+00 655 3.831011e-07 3.270311e+00 2.988139e+00 656 3.832964e-07 3.271729e+00 2.989629e+00 657 3.836870e-07 3.274563e+00 2.992608e+00 658 3.844683e-07 3.280228e+00 2.998559e+00 659 3.846636e-07 3.281642e+00 3.000045e+00 660 3.850542e-07 3.284470e+00 3.003017e+00 661 3.858354e-07 3.290120e+00 3.008954e+00 662 3.860308e-07 3.291531e+00 3.010436e+00 663 3.864214e-07 3.294352e+00 3.013400e+00 664 3.872026e-07 3.299988e+00 3.019323e+00 665 3.873979e-07 3.301396e+00 3.020802e+00 666 3.877886e-07 3.304210e+00 3.023759e+00 667 3.885698e-07 3.309833e+00 3.029667e+00 668 3.887651e-07 3.311237e+00 3.031142e+00 669 3.891558e-07 3.314044e+00 3.034092e+00 670 3.899370e-07 3.319653e+00 3.039986e+00 671 3.901323e-07 3.321054e+00 3.041457e+00 672 3.905229e-07 3.323854e+00 3.044400e+00 673 3.913042e-07 3.329450e+00 3.050279e+00 674 3.914995e-07 3.330847e+00 3.051747e+00 675 3.918901e-07 3.333641e+00 3.054683e+00 676 3.926714e-07 3.339223e+00 3.060548e+00 677 3.928667e-07 3.340617e+00 3.062013e+00 678 3.932573e-07 3.343404e+00 3.064941e+00 679 3.940386e-07 3.348973e+00 3.070792e+00 680 3.942339e-07 3.350363e+00 3.072253e+00 681 3.946245e-07 3.353143e+00 3.075174e+00 682 3.954058e-07 3.358699e+00 3.081011e+00 683 3.956011e-07 3.360086e+00 3.082468e+00 684 3.959917e-07 3.362859e+00 3.085382e+00 685 3.967729e-07 3.368401e+00 3.091205e+00 686 3.969683e-07 3.369785e+00 3.092659e+00 687 3.973589e-07 3.372552e+00 3.095566e+00 688 3.981401e-07 3.378080e+00 3.101374e+00 689 3.983354e-07 3.379461e+00 3.102825e+00 690 3.987261e-07 3.382221e+00 3.105725e+00 691 3.995073e-07 3.387736e+00 3.111519e+00 692 3.997026e-07 3.389114e+00 3.112966e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 693 4.000933e-07 3.391867e+00 3.115859e+00 694 4.008745e-07 3.397369e+00 3.121640e+00 695 4.010698e-07 3.398743e+00 3.123083e+00 696 4.014604e-07 3.401490e+00 3.125969e+00 697 4.022417e-07 3.406979e+00 3.131736e+00 698 4.024370e-07 3.408349e+00 3.133176e+00 699 4.028276e-07 3.411090e+00 3.136055e+00 700 4.036089e-07 3.416564e+00 3.141807e+00 701 4.038042e-07 3.417932e+00 3.143244e+00 702 4.041948e-07 3.420666e+00 3.146116e+00 703 4.049761e-07 3.426128e+00 3.151855e+00 704 4.051714e-07 3.427493e+00 3.153288e+00 705 4.055620e-07 3.430220e+00 3.156154e+00 706 4.063433e-07 3.435669e+00 3.161878e+00 707 4.065386e-07 3.437029e+00 3.163308e+00 708 4.069292e-07 3.439750e+00 3.166167e+00 709 4.077104e-07 3.445187e+00 3.171878e+00 710 4.079058e-07 3.446545e+00 3.173304e+00 711 4.082964e-07 3.449259e+00 3.176156e+00 712 4.090776e-07 3.454682e+00 3.181853e+00 713 4.092729e-07 3.456036e+00 3.183276e+00 714 4.096636e-07 3.458744e+00 3.186121e+00 715 4.104448e-07 3.464155e+00 3.191804e+00 716 4.106401e-07 3.465506e+00 3.193224e+00 717 4.110308e-07 3.468207e+00 3.196062e+00 718 4.118120e-07 3.473604e+00 3.201732e+00 719 4.120073e-07 3.474952e+00 3.203148e+00 720 4.123979e-07 3.477647e+00 3.205979e+00 721 4.131792e-07 3.483031e+00 3.211636e+00 722 4.133745e-07 3.484376e+00 3.213049e+00 723 4.137651e-07 3.487065e+00 3.215873e+00 724 4.145464e-07 3.492436e+00 3.221516e+00 725 4.147417e-07 3.493778e+00 3.222925e+00 726 4.151323e-07 3.496460e+00 3.225743e+00 727 4.159136e-07 3.501819e+00 3.231373e+00 728 4.161089e-07 3.503157e+00 3.232779e+00 729 4.164995e-07 3.505833e+00 3.235590e+00 730 4.172808e-07 3.511179e+00 3.241206e+00 731 4.174761e-07 3.512514e+00 3.242609e+00 732 4.178667e-07 3.515184e+00 3.245413e+00 733 4.186479e-07 3.520517e+00 3.251016e+00 734 4.188433e-07 3.521849e+00 3.252415e+00 735 4.192339e-07 3.524512e+00 3.255213e+00 736 4.200151e-07 3.529833e+00 3.260802e+00 737 4.202104e-07 3.531162e+00 3.262198e+00 738 4.206011e-07 3.533819e+00 3.264989e+00 739 4.213823e-07 3.539127e+00 3.270565e+00 740 4.215776e-07 3.540453e+00 3.271958e+00 741 4.219683e-07 3.543104e+00 3.274742e+00 742 4.227495e-07 3.548400e+00 3.280305e+00 743 4.229448e-07 3.549722e+00 3.281695e+00 744 4.233354e-07 3.552367e+00 3.284472e+00 745 4.241167e-07 3.557650e+00 3.290022e+00 746 4.243120e-07 3.558970e+00 3.291408e+00 747 4.247026e-07 3.561608e+00 3.294179e+00 748 4.254839e-07 3.566879e+00 3.299716e+00 749 4.256792e-07 3.568196e+00 3.301099e+00 750 4.260698e-07 3.570828e+00 3.303864e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 751 4.268511e-07 3.576086e+00 3.309387e+00 752 4.270464e-07 3.577400e+00 3.310767e+00 753 4.274370e-07 3.580026e+00 3.313525e+00 754 4.282183e-07 3.585272e+00 3.319035e+00 755 4.284136e-07 3.586582e+00 3.320412e+00 756 4.288042e-07 3.589202e+00 3.323163e+00 757 4.295854e-07 3.594436e+00 3.328661e+00 758 4.297808e-07 3.595743e+00 3.330034e+00 759 4.301714e-07 3.598357e+00 3.332779e+00 760 4.309526e-07 3.603578e+00 3.338264e+00 761 4.311479e-07 3.604882e+00 3.339633e+00 762 4.315386e-07 3.607490e+00 3.342372e+00 763 4.323198e-07 3.612699e+00 3.347844e+00 764 4.325151e-07 3.614000e+00 3.349210e+00 765 4.329058e-07 3.616602e+00 3.351942e+00 766 4.336870e-07 3.621799e+00 3.357401e+00 767 4.338823e-07 3.623097e+00 3.358765e+00 768 4.342729e-07 3.625693e+00 3.361490e+00 769 4.350542e-07 3.630878e+00 3.366936e+00 770 4.352495e-07 3.632173e+00 3.368297e+00 771 4.356401e-07 3.634762e+00 3.371016e+00 772 4.364214e-07 3.639935e+00 3.376449e+00 773 4.366167e-07 3.641227e+00 3.377806e+00 774 4.370073e-07 3.643810e+00 3.380519e+00 775 4.377886e-07 3.648971e+00 3.385940e+00 776 4.379839e-07 3.650260e+00 3.387294e+00 777 4.383745e-07 3.652837e+00 3.390000e+00 778 4.391558e-07 3.657986e+00 3.395408e+00 779 4.393511e-07 3.659272e+00 3.396759e+00 780 4.397417e-07 3.661844e+00 3.399459e+00 781 4.405229e-07 3.666980e+00 3.404854e+00 782 4.407183e-07 3.668264e+00 3.406202e+00 783 4.411089e-07 3.670829e+00 3.408896e+00 784 4.418901e-07 3.675954e+00 3.414278e+00 785 4.420854e-07 3.677234e+00 3.415623e+00 786 4.424761e-07 3.679793e+00 3.418310e+00 787 4.432573e-07 3.684906e+00 3.423680e+00 788 4.448198e-07 3.695112e+00 3.434399e+00 789 4.452104e-07 3.697658e+00 3.437073e+00 790 4.459917e-07 3.702748e+00 3.442418e+00 791 4.475542e-07 3.712907e+00 3.453087e+00 792 4.479448e-07 3.715441e+00 3.455749e+00 793 4.487261e-07 3.720508e+00 3.461069e+00 794 4.502886e-07 3.730622e+00 3.471689e+00 795 4.506792e-07 3.733144e+00 3.474338e+00 796 4.514604e-07 3.738186e+00 3.479634e+00 797 4.530229e-07 3.748252e+00 3.490204e+00 798 4.534136e-07 3.750763e+00 3.492841e+00 799 4.541948e-07 3.755783e+00 3.498113e+00 800 4.557573e-07 3.765802e+00 3.508634e+00 801 4.561479e-07 3.768302e+00 3.511259e+00 802 4.569292e-07 3.773298e+00 3.516506e+00 803 4.584917e-07 3.783274e+00 3.526979e+00 804 4.588823e-07 3.785762e+00 3.529592e+00 805 4.596636e-07 3.790735e+00 3.534814e+00 806 4.612261e-07 3.800664e+00 3.545239e+00 807 4.616167e-07 3.803141e+00 3.547840e+00 808 4.623979e-07 3.808091e+00 3.553039e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 809 4.639604e-07 3.817973e+00 3.563416e+00 810 4.643511e-07 3.820439e+00 3.566005e+00 811 4.651323e-07 3.825367e+00 3.571180e+00 812 4.666948e-07 3.835204e+00 3.581509e+00 813 4.670854e-07 3.837659e+00 3.584086e+00 814 4.678667e-07 3.842565e+00 3.589237e+00 815 4.694292e-07 3.852358e+00 3.599519e+00 816 4.698198e-07 3.854801e+00 3.602085e+00 817 4.706011e-07 3.859685e+00 3.607213e+00 818 4.721636e-07 3.869433e+00 3.617448e+00 819 4.725542e-07 3.871866e+00 3.620001e+00 820 4.733354e-07 3.876728e+00 3.625106e+00 821 4.748979e-07 3.886432e+00 3.635294e+00 822 4.752886e-07 3.888853e+00 3.637837e+00 823 4.760698e-07 3.893693e+00 3.642918e+00 824 4.776323e-07 3.903353e+00 3.653060e+00 825 4.780229e-07 3.905764e+00 3.655591e+00 826 4.788042e-07 3.910582e+00 3.660649e+00 827 4.803667e-07 3.920201e+00 3.670745e+00 828 4.807573e-07 3.922600e+00 3.673264e+00 829 4.815386e-07 3.927402e+00 3.678299e+00 830 4.831011e-07 3.937015e+00 3.688351e+00 831 4.834917e-07 3.939416e+00 3.690860e+00 832 4.842729e-07 3.944218e+00 3.695873e+00 833 4.858354e-07 3.953809e+00 3.705883e+00 834 4.862261e-07 3.956201e+00 3.708381e+00 835 4.870073e-07 3.960987e+00 3.713374e+00 836 4.885698e-07 3.970541e+00 3.723343e+00 837 4.889604e-07 3.972923e+00 3.725831e+00 838 4.897417e-07 3.977689e+00 3.730803e+00 839 4.913042e-07 3.987205e+00 3.740731e+00 840 4.916948e-07 3.989577e+00 3.743209e+00 841 4.924761e-07 3.994324e+00 3.748161e+00 842 4.940386e-07 4.003801e+00 3.758048e+00 843 4.944292e-07 4.006164e+00 3.760515e+00 844 4.952104e-07 4.010891e+00 3.765448e+00 845 4.967729e-07 4.020329e+00 3.775294e+00 846 4.971636e-07 4.022682e+00 3.777752e+00 847 4.979448e-07 4.027391e+00 3.782664e+00 848 4.995073e-07 4.036790e+00 3.792470e+00 849 4.998979e-07 4.039134e+00 3.794918e+00 850 5.006792e-07 4.043823e+00 3.799810e+00 851 5.022417e-07 4.053184e+00 3.809576e+00 852 5.026323e-07 4.055518e+00 3.812014e+00 853 5.034136e-07 4.060188e+00 3.816886e+00 854 5.049761e-07 4.069508e+00 3.826613e+00 855 5.053667e-07 4.071834e+00 3.829040e+00 856 5.061479e-07 4.076485e+00 3.833893e+00 857 5.077104e-07 4.085769e+00 3.843580e+00 858 5.081011e-07 4.088085e+00 3.845998e+00 859 5.088823e-07 4.092717e+00 3.850830e+00 860 5.104448e-07 4.101963e+00 3.860479e+00 861 5.108354e-07 4.104270e+00 3.862887e+00 862 5.116167e-07 4.108884e+00 3.867700e+00 863 5.131792e-07 4.118092e+00 3.877309e+00 864 5.163042e-07 4.136443e+00 3.896461e+00 865 5.170854e-07 4.141011e+00 3.901232e+00 866 5.186479e-07 4.150149e+00 3.910764e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 867 5.217729e-07 4.168356e+00 3.929761e+00 868 5.225542e-07 4.172887e+00 3.934494e+00 869 5.241167e-07 4.181952e+00 3.943949e+00 870 5.272417e-07 4.200018e+00 3.962795e+00 871 5.280229e-07 4.204511e+00 3.967490e+00 872 5.295854e-07 4.213502e+00 3.976869e+00 873 5.327104e-07 4.231387e+00 3.995563e+00 874 5.334917e-07 4.235823e+00 4.000220e+00 875 5.350542e-07 4.244685e+00 4.009521e+00 876 5.381792e-07 4.262322e+00 4.028054e+00 877 5.389604e-07 4.266716e+00 4.032669e+00 878 5.405229e-07 4.275492e+00 4.041889e+00 879 5.436479e-07 4.292964e+00 4.060257e+00 880 5.444292e-07 4.297314e+00 4.064832e+00 881 5.459917e-07 4.306009e+00 4.073969e+00 882 5.491167e-07 4.323338e+00 4.092176e+00 883 5.553667e-07 4.357736e+00 4.128314e+00 884 5.569292e-07 4.366254e+00 4.137280e+00 885 5.600542e-07 4.383266e+00 4.155167e+00 886 5.663042e-07 4.417070e+00 4.190674e+00 887 5.678667e-07 4.425432e+00 4.199484e+00 888 5.709917e-07 4.442141e+00 4.217058e+00 889 5.772417e-07 4.475349e+00 4.251946e+00 890 5.788042e-07 4.483579e+00 4.260603e+00 891 5.819292e-07 4.500015e+00 4.277874e+00 892 5.881792e-07 4.532643e+00 4.312160e+00 893 5.897417e-07 4.540717e+00 4.320667e+00 894 5.928667e-07 4.556788e+00 4.337637e+00 895 5.991167e-07 4.588411e+00 4.371291e+00 896 6.006792e-07 4.596159e+00 4.379628e+00 897 6.038042e-07 4.611601e+00 4.396247e+00 898 6.100542e-07 4.641945e+00 4.429141e+00 899 6.116167e-07 4.649358e+00 4.437274e+00 900 6.147417e-07 4.664162e+00 4.453478e+00 901 6.209917e-07 4.693293e+00 4.485502e+00 902 6.225542e-07 4.700416e+00 4.493409e+00 903 6.256792e-07 4.714649e+00 4.509157e+00 904 6.319292e-07 4.742634e+00 4.540251e+00 905 6.334917e-07 4.749526e+00 4.547923e+00 906 6.366167e-07 4.763260e+00 4.563200e+00 907 6.428667e-07 4.790300e+00 4.593352e+00 908 6.444292e-07 4.796946e+00 4.600790e+00 909 6.475542e-07 4.810171e+00 4.615597e+00 910 6.538042e-07 4.836202e+00 4.644805e+00 911 6.663042e-07 4.886912e+00 4.701645e+00 912 6.913042e-07 4.987591e+00 4.810401e+00 913 7.285230e-07 5.150329e+00 4.968960e+00 914 7.751505e-07 5.348776e+00 5.167278e+00 915 8.309494e-07 5.569133e+00 5.395699e+00 916 8.391144e-07 5.599918e+00 5.427755e+00 917 8.554445e-07 5.660759e+00 5.491224e+00 918 8.595270e-07 5.675622e+00 5.506841e+00 919 8.676920e-07 5.705320e+00 5.537911e+00 920 8.697332e-07 5.712674e+00 5.545617e+00 921 8.738157e-07 5.727371e+00 5.560987e+00 922 8.748363e-07 5.731034e+00 5.564815e+00 923 8.768776e-07 5.738351e+00 5.572461e+00 924 8.809601e-07 5.752904e+00 5.587692e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 925 8.819807e-07 5.756525e+00 5.591484e+00 926 8.840220e-07 5.763766e+00 5.599060e+00 927 8.881045e-07 5.778163e+00 5.614150e+00 928 8.891251e-07 5.781751e+00 5.617907e+00 929 8.911664e-07 5.788901e+00 5.625411e+00 930 8.952489e-07 5.803140e+00 5.640358e+00 931 8.962695e-07 5.806697e+00 5.644080e+00 932 8.983107e-07 5.813793e+00 5.651513e+00 933 9.023932e-07 5.827921e+00 5.666320e+00 934 9.034139e-07 5.831445e+00 5.670007e+00 935 9.054551e-07 5.838480e+00 5.677371e+00 936 9.095376e-07 5.852487e+00 5.692042e+00 937 9.105582e-07 5.855982e+00 5.695695e+00 938 9.125995e-07 5.862957e+00 5.702992e+00 939 9.166820e-07 5.876844e+00 5.717530e+00 940 9.177026e-07 5.880308e+00 5.721150e+00 941 9.197439e-07 5.887222e+00 5.728381e+00 942 9.238264e-07 5.900988e+00 5.742788e+00 943 9.248470e-07 5.904422e+00 5.746376e+00 944 9.268883e-07 5.911275e+00 5.753542e+00 945 9.273986e-07 5.912985e+00 5.755330e+00 946 9.284192e-07 5.916402e+00 5.758904e+00 947 9.304604e-07 5.923222e+00 5.766039e+00 948 9.309708e-07 5.924925e+00 5.767819e+00 949 9.319914e-07 5.928327e+00 5.771377e+00 950 9.340326e-07 5.935117e+00 5.778480e+00 951 9.345430e-07 5.936812e+00 5.780252e+00 952 9.355636e-07 5.940200e+00 5.783794e+00 953 9.376048e-07 5.946960e+00 5.790866e+00 954 9.381151e-07 5.948648e+00 5.792630e+00 955 9.391358e-07 5.952021e+00 5.796157e+00 956 9.411770e-07 5.958751e+00 5.803196e+00 957 9.416873e-07 5.960432e+00 5.804953e+00 958 9.427080e-07 5.963791e+00 5.808464e+00 959 9.447492e-07 5.970491e+00 5.815472e+00 960 9.452595e-07 5.972165e+00 5.817221e+00 961 9.462801e-07 5.975509e+00 5.820717e+00 962 9.483214e-07 5.982180e+00 5.827694e+00 963 9.488317e-07 5.983847e+00 5.829436e+00 964 9.498523e-07 5.987176e+00 5.832916e+00 965 9.518936e-07 5.993819e+00 5.839863e+00 966 9.524039e-07 5.995478e+00 5.841596e+00 967 9.534245e-07 5.998793e+00 5.845061e+00 968 9.554658e-07 6.005406e+00 5.851977e+00 969 9.559761e-07 6.007058e+00 5.853703e+00 970 9.569967e-07 6.010359e+00 5.857153e+00 971 9.590380e-07 6.016944e+00 5.864039e+00 972 9.595483e-07 6.018589e+00 5.865758e+00 973 9.605689e-07 6.021876e+00 5.869192e+00 974 9.626102e-07 6.028432e+00 5.876048e+00 975 9.631205e-07 6.030070e+00 5.877759e+00 976 9.641411e-07 6.033342e+00 5.881179e+00 977 9.661824e-07 6.039870e+00 5.888005e+00 978 9.666927e-07 6.041501e+00 5.889708e+00 979 9.677133e-07 6.044760e+00 5.893113e+00 980 9.697545e-07 6.051260e+00 5.899910e+00 981 9.702649e-07 6.052884e+00 5.901606e+00 982 9.712855e-07 6.056128e+00 5.904996e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 983 9.733267e-07 6.062600e+00 5.911763e+00 984 9.738370e-07 6.064217e+00 5.913451e+00 985 9.748577e-07 6.067448e+00 5.916827e+00 986 9.768989e-07 6.073892e+00 5.923565e+00 987 9.774092e-07 6.075502e+00 5.925246e+00 988 9.784299e-07 6.078720e+00 5.928607e+00 989 9.804711e-07 6.085136e+00 5.935315e+00 990 9.809814e-07 6.086740e+00 5.936989e+00 991 9.820021e-07 6.089944e+00 5.940336e+00 992 9.840433e-07 6.096332e+00 5.947016e+00 993 9.845536e-07 6.097930e+00 5.948683e+00 994 9.855742e-07 6.101120e+00 5.952014e+00 995 9.876155e-07 6.107481e+00 5.958666e+00 996 9.881258e-07 6.109072e+00 5.960325e+00 997 9.891464e-07 6.112249e+00 5.963643e+00 998 9.911877e-07 6.118592e+00 5.970266e+00 999 9.916980e-07 6.120171e+00 5.971919e+00 1000 9.927186e-07 6.123331e+00 5.975222e+00 1001 9.947599e-07 6.129642e+00 5.981817e+00 1002 9.952702e-07 6.131217e+00 5.983462e+00 1003 9.962908e-07 6.134365e+00 5.986751e+00 1004 9.983321e-07 6.140647e+00 5.993318e+00 1005 9.988424e-07 6.142216e+00 5.994956e+00 1006 9.998630e-07 6.145352e+00 5.998232e+00 1007 1.001904e-06 6.151606e+00 6.004770e+00 1008 1.002415e-06 6.153171e+00 6.006402e+00 1009 1.003435e-06 6.156294e+00 6.009663e+00 1010 1.005476e-06 6.162532e+00 6.016174e+00 1011 1.005987e-06 6.164084e+00 6.017798e+00 1012 1.007007e-06 6.167191e+00 6.021046e+00 1013 1.009049e-06 6.173397e+00 6.027529e+00 1014 1.009559e-06 6.174946e+00 6.029147e+00 1015 1.010580e-06 6.178041e+00 6.032381e+00 1016 1.012621e-06 6.184218e+00 6.038836e+00 1017 1.013131e-06 6.185762e+00 6.040447e+00 1018 1.014152e-06 6.188846e+00 6.043667e+00 1019 1.014407e-06 6.189617e+00 6.044472e+00 1020 1.014917e-06 6.191156e+00 6.046080e+00 1021 1.015938e-06 6.194232e+00 6.049293e+00 1022 1.017979e-06 6.200370e+00 6.055708e+00 1023 1.018489e-06 6.201905e+00 6.057309e+00 1024 1.019510e-06 6.204970e+00 6.060509e+00 1025 1.019765e-06 6.205736e+00 6.061308e+00 1026 1.020276e-06 6.207266e+00 6.062906e+00 1027 1.021296e-06 6.210323e+00 6.066099e+00 1028 1.023337e-06 6.216423e+00 6.072473e+00 1029 1.023848e-06 6.217948e+00 6.074064e+00 1030 1.024868e-06 6.220995e+00 6.077244e+00 1031 1.025123e-06 6.221755e+00 6.078038e+00 1032 1.025634e-06 6.223276e+00 6.079626e+00 1033 1.026654e-06 6.226315e+00 6.082799e+00 1034 1.026910e-06 6.227074e+00 6.083592e+00 1035 1.027420e-06 6.228591e+00 6.085176e+00 1036 1.028441e-06 6.231623e+00 6.088343e+00 1037 1.030482e-06 6.237672e+00 6.094664e+00 1038 1.030992e-06 6.239185e+00 6.096242e+00 1039 1.032013e-06 6.242207e+00 6.099395e+00 1040 1.032268e-06 6.242961e+00 6.100182e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 1041 1.032778e-06 6.244470e+00 6.101757e+00 1042 1.033799e-06 6.247483e+00 6.104904e+00 1043 1.034054e-06 6.248236e+00 6.105690e+00 1044 1.034564e-06 6.249741e+00 6.107261e+00 1045 1.035585e-06 6.252748e+00 6.110401e+00 1046 1.035840e-06 6.253499e+00 6.111186e+00 1047 1.036350e-06 6.255001e+00 6.112754e+00 1048 1.037371e-06 6.258002e+00 6.115887e+00 1049 1.037626e-06 6.258752e+00 6.116670e+00 1050 1.038136e-06 6.260251e+00 6.118235e+00 1051 1.039157e-06 6.263245e+00 6.121362e+00 1052 1.039412e-06 6.263994e+00 6.122143e+00 1053 1.039923e-06 6.265490e+00 6.123705e+00 1054 1.040943e-06 6.268478e+00 6.126826e+00 1055 1.041198e-06 6.269225e+00 6.127605e+00 1056 1.041709e-06 6.270718e+00 6.129163e+00 1057 1.042729e-06 6.273700e+00 6.132278e+00 1058 1.042984e-06 6.274445e+00 6.133055e+00 1059 1.043495e-06 6.275935e+00 6.134611e+00 1060 1.044515e-06 6.278911e+00 6.137718e+00 1061 1.044771e-06 6.279655e+00 6.138495e+00 1062 1.045281e-06 6.281142e+00 6.140047e+00 1063 1.046301e-06 6.284112e+00 6.143148e+00 1064 1.046557e-06 6.284855e+00 6.143923e+00 1065 1.047067e-06 6.286338e+00 6.145471e+00 1066 1.048088e-06 6.289303e+00 6.148566e+00 1067 1.048343e-06 6.290043e+00 6.149339e+00 1068 1.048853e-06 6.291524e+00 6.150885e+00 1069 1.049874e-06 6.294482e+00 6.153973e+00 1070 1.050129e-06 6.295222e+00 6.154745e+00 1071 1.050639e-06 6.296700e+00 6.156287e+00 1072 1.051660e-06 6.299652e+00 6.159369e+00 1073 1.051915e-06 6.300390e+00 6.160139e+00 1074 1.052425e-06 6.301865e+00 6.161679e+00 1075 1.053446e-06 6.304811e+00 6.164754e+00 1076 1.053701e-06 6.305547e+00 6.165523e+00 1077 1.054211e-06 6.307019e+00 6.167059e+00 1078 1.055232e-06 6.309959e+00 6.170128e+00 1079 1.055487e-06 6.310694e+00 6.170895e+00 1080 1.055997e-06 6.312163e+00 6.172428e+00 1081 1.057018e-06 6.315098e+00 6.175491e+00 1082 1.057273e-06 6.315831e+00 6.176256e+00 1083 1.057784e-06 6.317297e+00 6.177786e+00 1084 1.058804e-06 6.320226e+00 6.180843e+00 1085 1.059059e-06 6.320958e+00 6.181607e+00 1086 1.059570e-06 6.322421e+00 6.183134e+00 1087 1.060590e-06 6.325343e+00 6.186184e+00 1088 1.060845e-06 6.326074e+00 6.186946e+00 1089 1.061356e-06 6.327534e+00 6.188470e+00 1090 1.062376e-06 6.330451e+00 6.191514e+00 1091 1.062631e-06 6.331180e+00 6.192275e+00 1092 1.063142e-06 6.332637e+00 6.193795e+00 1093 1.064162e-06 6.335548e+00 6.196834e+00 1094 1.064418e-06 6.336275e+00 6.197593e+00 1095 1.064928e-06 6.337730e+00 6.199110e+00 1096 1.065949e-06 6.340635e+00 6.202142e+00 1097 1.066204e-06 6.341361e+00 6.202899e+00 1098 1.066714e-06 6.342813e+00 6.204414e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 1099 1.067735e-06 6.345712e+00 6.207440e+00 1100 1.067990e-06 6.346436e+00 6.208196e+00 1101 1.068500e-06 6.347885e+00 6.209707e+00 1102 1.069521e-06 6.350779e+00 6.212727e+00 1103 1.069776e-06 6.351502e+00 6.213481e+00 1104 1.070286e-06 6.352948e+00 6.214989e+00 1105 1.071307e-06 6.355835e+00 6.218003e+00 1106 1.071562e-06 6.356557e+00 6.218756e+00 1107 1.072072e-06 6.358000e+00 6.220261e+00 1108 1.073093e-06 6.360882e+00 6.223268e+00 1109 1.073348e-06 6.361603e+00 6.224020e+00 1110 1.073858e-06 6.363043e+00 6.225522e+00 1111 1.074879e-06 6.365919e+00 6.228523e+00 1112 1.075134e-06 6.366638e+00 6.229273e+00 1113 1.075644e-06 6.368075e+00 6.230772e+00 1114 1.076665e-06 6.370946e+00 6.233768e+00 1115 1.076920e-06 6.371663e+00 6.234516e+00 1116 1.077431e-06 6.373098e+00 6.236012e+00 1117 1.078451e-06 6.375963e+00 6.239001e+00 1118 1.078706e-06 6.376679e+00 6.239748e+00 1119 1.079217e-06 6.378111e+00 6.241241e+00 1120 1.080237e-06 6.380970e+00 6.244225e+00 1121 1.080492e-06 6.381685e+00 6.244970e+00 1122 1.081003e-06 6.383114e+00 6.246460e+00 1123 1.082023e-06 6.385967e+00 6.249437e+00 1124 1.082279e-06 6.386681e+00 6.250181e+00 1125 1.082789e-06 6.388107e+00 6.251668e+00 1126 1.083809e-06 6.390955e+00 6.254640e+00 1127 1.084065e-06 6.391667e+00 6.255382e+00 1128 1.084575e-06 6.393090e+00 6.256866e+00 1129 1.085596e-06 6.395933e+00 6.259831e+00 1130 1.085851e-06 6.396643e+00 6.260572e+00 1131 1.086361e-06 6.398064e+00 6.262053e+00 1132 1.087382e-06 6.400901e+00 6.265013e+00 1133 1.087637e-06 6.401610e+00 6.265752e+00 1134 1.088147e-06 6.403028e+00 6.267230e+00 1135 1.089168e-06 6.405859e+00 6.270184e+00 1136 1.089423e-06 6.406567e+00 6.270922e+00 1137 1.089933e-06 6.407982e+00 6.272397e+00 1138 1.090954e-06 6.410808e+00 6.275345e+00 1139 1.091209e-06 6.411514e+00 6.276081e+00 1140 1.091719e-06 6.412927e+00 6.277553e+00 1141 1.092740e-06 6.415747e+00 6.280495e+00 1142 1.092995e-06 6.416452e+00 6.281230e+00 1143 1.093505e-06 6.417862e+00 6.282700e+00 1144 1.094526e-06 6.420677e+00 6.285636e+00 1145 1.094781e-06 6.421380e+00 6.286369e+00 1146 1.095292e-06 6.422787e+00 6.287836e+00 1147 1.096312e-06 6.425597e+00 6.290766e+00 1148 1.096567e-06 6.426299e+00 6.291498e+00 1149 1.097078e-06 6.427703e+00 6.292961e+00 1150 1.098098e-06 6.430508e+00 6.295886e+00 1151 1.098353e-06 6.431209e+00 6.296616e+00 1152 1.098864e-06 6.432610e+00 6.298077e+00 1153 1.099884e-06 6.435409e+00 6.300996e+00 1154 1.100139e-06 6.436109e+00 6.301725e+00 1155 1.100650e-06 6.437507e+00 6.303183e+00 1156 1.101670e-06 6.440301e+00 6.306095e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 1157 1.101926e-06 6.440999e+00 6.306823e+00 1158 1.102436e-06 6.442395e+00 6.308278e+00 1159 1.103457e-06 6.445183e+00 6.311185e+00 1160 1.103712e-06 6.445880e+00 6.311911e+00 1161 1.104222e-06 6.447274e+00 6.313363e+00 1162 1.105243e-06 6.450057e+00 6.316265e+00 1163 1.105498e-06 6.450752e+00 6.316990e+00 1164 1.106008e-06 6.452143e+00 6.318439e+00 1165 1.107029e-06 6.454921e+00 6.321335e+00 1166 1.107284e-06 6.455615e+00 6.322058e+00 1167 1.107794e-06 6.457003e+00 6.323504e+00 1168 1.108815e-06 6.459775e+00 6.326395e+00 1169 1.109070e-06 6.460469e+00 6.327117e+00 1170 1.109580e-06 6.461854e+00 6.328560e+00 1171 1.110601e-06 6.464624e+00 6.331445e+00 1172 1.110856e-06 6.465315e+00 6.332165e+00 1173 1.111366e-06 6.466697e+00 6.333606e+00 1174 1.112387e-06 6.469460e+00 6.336485e+00 1175 1.112642e-06 6.470150e+00 6.337204e+00 1176 1.113152e-06 6.471529e+00 6.338642e+00 1177 1.114173e-06 6.474288e+00 6.341515e+00 1178 1.114428e-06 6.474976e+00 6.342233e+00 1179 1.114939e-06 6.476353e+00 6.343668e+00 1180 1.115959e-06 6.479106e+00 6.346536e+00 1181 1.116214e-06 6.479793e+00 6.347252e+00 1182 1.116725e-06 6.481167e+00 6.348684e+00 1183 1.117745e-06 6.483915e+00 6.351547e+00 1184 1.118000e-06 6.484601e+00 6.352262e+00 1185 1.118511e-06 6.485973e+00 6.353691e+00 1186 1.119531e-06 6.488716e+00 6.356548e+00 1187 1.119787e-06 6.489400e+00 6.357261e+00 1188 1.120297e-06 6.490769e+00 6.358688e+00 1189 1.121317e-06 6.493507e+00 6.361539e+00 1190 1.121573e-06 6.494191e+00 6.362251e+00 1191 1.122083e-06 6.495557e+00 6.363675e+00 1192 1.123104e-06 6.498290e+00 6.366521e+00 1193 1.123359e-06 6.498972e+00 6.367232e+00 1194 1.123869e-06 6.500336e+00 6.368653e+00 1195 1.124890e-06 6.503064e+00 6.371493e+00 1196 1.125145e-06 6.503745e+00 6.372203e+00 1197 1.125655e-06 6.505106e+00 6.373621e+00 1198 1.126676e-06 6.507829e+00 6.376456e+00 1199 1.126931e-06 6.508509e+00 6.377164e+00 1200 1.127441e-06 6.509868e+00 6.378580e+00 1201 1.128462e-06 6.512586e+00 6.381409e+00 1202 1.128717e-06 6.513264e+00 6.382116e+00 1203 1.129227e-06 6.514621e+00 6.383529e+00 1204 1.130248e-06 6.517334e+00 6.386353e+00 1205 1.130503e-06 6.518011e+00 6.387058e+00 1206 1.131013e-06 6.519365e+00 6.388469e+00 1207 1.132034e-06 6.522073e+00 6.391287e+00 1208 1.132289e-06 6.522749e+00 6.391991e+00 1209 1.132800e-06 6.524101e+00 6.393399e+00 1210 1.133820e-06 6.526804e+00 6.396212e+00 1211 1.134075e-06 6.527479e+00 6.396915e+00 1212 1.134586e-06 6.528828e+00 6.398320e+00 1213 1.135606e-06 6.531527e+00 6.401128e+00 1214 1.135861e-06 6.532200e+00 6.401829e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 1215 1.136372e-06 6.533547e+00 6.403232e+00 1216 1.137392e-06 6.536241e+00 6.406034e+00 1217 1.137647e-06 6.536913e+00 6.406734e+00 1218 1.138158e-06 6.538257e+00 6.408134e+00 1219 1.139178e-06 6.540947e+00 6.410931e+00 1220 1.139434e-06 6.541617e+00 6.411630e+00 1221 1.139944e-06 6.542960e+00 6.413027e+00 1222 1.140965e-06 6.545644e+00 6.415819e+00 1223 1.141220e-06 6.546314e+00 6.416517e+00 1224 1.141730e-06 6.547653e+00 6.417911e+00 1225 1.142751e-06 6.550333e+00 6.420698e+00 1226 1.143006e-06 6.551002e+00 6.421394e+00 1227 1.143516e-06 6.552339e+00 6.422786e+00 1228 1.144537e-06 6.555014e+00 6.425568e+00 1229 1.144792e-06 6.555682e+00 6.426262e+00 1230 1.145302e-06 6.557017e+00 6.427652e+00 1231 1.146323e-06 6.559687e+00 6.430428e+00 1232 1.146578e-06 6.560354e+00 6.431122e+00 1233 1.147088e-06 6.561686e+00 6.432508e+00 1234 1.148109e-06 6.564352e+00 6.435280e+00 1235 1.148364e-06 6.565017e+00 6.435972e+00 1236 1.148874e-06 6.566348e+00 6.437356e+00 1237 1.149895e-06 6.569007e+00 6.440122e+00 1238 1.150150e-06 6.569671e+00 6.440813e+00 1239 1.150660e-06 6.570998e+00 6.442195e+00 1240 1.151681e-06 6.573651e+00 6.444956e+00 1241 1.151936e-06 6.574313e+00 6.445645e+00 1242 1.152447e-06 6.575638e+00 6.447024e+00 1243 1.153467e-06 6.578287e+00 6.449780e+00 1244 1.153722e-06 6.578948e+00 6.450469e+00 1245 1.154233e-06 6.580271e+00 6.451845e+00 1246 1.155253e-06 6.582916e+00 6.454596e+00 1247 1.155508e-06 6.583576e+00 6.455283e+00 1248 1.156019e-06 6.584897e+00 6.456657e+00 1249 1.157039e-06 6.587538e+00 6.459402e+00 1250 1.157295e-06 6.588198e+00 6.460088e+00 1251 1.157805e-06 6.589517e+00 6.461459e+00 1252 1.158825e-06 6.592153e+00 6.464200e+00 1253 1.159081e-06 6.592811e+00 6.464884e+00 1254 1.159591e-06 6.594128e+00 6.466253e+00 1255 1.160612e-06 6.596760e+00 6.468989e+00 1256 1.160867e-06 6.597418e+00 6.469672e+00 1257 1.161377e-06 6.598733e+00 6.471038e+00 1258 1.162398e-06 6.601361e+00 6.473769e+00 1259 1.162653e-06 6.602017e+00 6.474451e+00 1260 1.163163e-06 6.603330e+00 6.475815e+00 1261 1.164184e-06 6.605954e+00 6.478540e+00 1262 1.164439e-06 6.606609e+00 6.479221e+00 1263 1.164949e-06 6.607920e+00 6.480583e+00 1264 1.165970e-06 6.610540e+00 6.483303e+00 1265 1.166225e-06 6.611194e+00 6.483983e+00 1266 1.166735e-06 6.612503e+00 6.485342e+00 1267 1.167756e-06 6.615118e+00 6.488058e+00 1268 1.168011e-06 6.615772e+00 6.488736e+00 1269 1.168521e-06 6.617078e+00 6.490093e+00 1270 1.169542e-06 6.619690e+00 6.492804e+00 1271 1.169797e-06 6.620343e+00 6.493481e+00 1272 1.170308e-06 6.621647e+00 6.494835e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 1273 1.171328e-06 6.624255e+00 6.497541e+00 1274 1.171583e-06 6.624906e+00 6.498218e+00 1275 1.172094e-06 6.626209e+00 6.499569e+00 1276 1.173114e-06 6.628813e+00 6.502271e+00 1277 1.173369e-06 6.629463e+00 6.502946e+00 1278 1.173880e-06 6.630764e+00 6.504295e+00 1279 1.174900e-06 6.633364e+00 6.506992e+00 1280 1.175155e-06 6.634013e+00 6.507665e+00 1281 1.175666e-06 6.635312e+00 6.509012e+00 1282 1.176686e-06 6.637908e+00 6.511705e+00 1283 1.176942e-06 6.638557e+00 6.512377e+00 1284 1.177452e-06 6.639854e+00 6.513722e+00 1285 1.178473e-06 6.642446e+00 6.516409e+00 1286 1.178728e-06 6.643094e+00 6.517081e+00 1287 1.179238e-06 6.644389e+00 6.518423e+00 1288 1.180259e-06 6.646978e+00 6.521106e+00 1289 1.180514e-06 6.647624e+00 6.521776e+00 1290 1.181024e-06 6.648918e+00 6.523116e+00 1291 1.182045e-06 6.651503e+00 6.525794e+00 1292 1.182300e-06 6.652149e+00 6.526463e+00 1293 1.182810e-06 6.653440e+00 6.527801e+00 1294 1.183831e-06 6.656022e+00 6.530475e+00 1295 1.184086e-06 6.656667e+00 6.531143e+00 1296 1.184596e-06 6.657957e+00 6.532478e+00 1297 1.185617e-06 6.660535e+00 6.535148e+00 1298 1.185872e-06 6.661180e+00 6.535815e+00 1299 1.186382e-06 6.662468e+00 6.537148e+00 1300 1.187403e-06 6.665043e+00 6.539813e+00 1301 1.187658e-06 6.665687e+00 6.540479e+00 1302 1.188168e-06 6.666973e+00 6.541810e+00 1303 1.189189e-06 6.669545e+00 6.544470e+00 1304 1.189444e-06 6.670188e+00 6.545135e+00 1305 1.189955e-06 6.671473e+00 6.546464e+00 1306 1.190975e-06 6.674042e+00 6.549120e+00 1307 1.191230e-06 6.674684e+00 6.549783e+00 1308 1.191741e-06 6.675968e+00 6.551110e+00 1309 1.192761e-06 6.678534e+00 6.553762e+00 1310 1.193016e-06 6.679176e+00 6.554425e+00 1311 1.193527e-06 6.680458e+00 6.555749e+00 1312 1.194547e-06 6.683021e+00 6.558397e+00 1313 1.194803e-06 6.683662e+00 6.559059e+00 1314 1.195313e-06 6.684943e+00 6.560381e+00 1315 1.196333e-06 6.687504e+00 6.563025e+00 1316 1.196589e-06 6.688144e+00 6.563685e+00 1317 1.197099e-06 6.689424e+00 6.565006e+00 1318 1.198120e-06 6.691983e+00 6.567645e+00 1319 1.200161e-06 6.697098e+00 6.572917e+00 1320 1.200671e-06 6.698376e+00 6.574234e+00 1321 1.201692e-06 6.700930e+00 6.576865e+00 1322 1.201947e-06 6.701568e+00 6.577523e+00 1323 1.202457e-06 6.702845e+00 6.578837e+00 1324 1.203478e-06 6.705397e+00 6.581465e+00 1325 1.203733e-06 6.706035e+00 6.582121e+00 1326 1.204243e-06 6.707311e+00 6.583434e+00 1327 1.205264e-06 6.709863e+00 6.586058e+00 1328 1.205519e-06 6.710501e+00 6.586714e+00 1329 1.206029e-06 6.711776e+00 6.588024e+00 1330 1.207050e-06 6.714327e+00 6.590645e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 1331 1.207305e-06 6.714965e+00 6.591299e+00 1332 1.207816e-06 6.716240e+00 6.592608e+00 1333 1.208836e-06 6.718790e+00 6.595225e+00 1334 1.209091e-06 6.719427e+00 6.595879e+00 1335 1.209602e-06 6.720702e+00 6.597186e+00 1336 1.210622e-06 6.723252e+00 6.599799e+00 1337 1.210877e-06 6.723889e+00 6.600452e+00 1338 1.211388e-06 6.725164e+00 6.601758e+00 1339 1.212408e-06 6.727714e+00 6.604368e+00 1340 1.212663e-06 6.728352e+00 6.605020e+00 1341 1.213174e-06 6.729627e+00 6.606324e+00 1342 1.214194e-06 6.732177e+00 6.608931e+00 1343 1.214450e-06 6.732815e+00 6.609582e+00 1344 1.214960e-06 6.734091e+00 6.610885e+00 1345 1.215981e-06 6.736642e+00 6.613488e+00 1346 1.216236e-06 6.737280e+00 6.614139e+00 1347 1.216746e-06 6.738557e+00 6.615440e+00 1348 1.217767e-06 6.741110e+00 6.618041e+00 1349 1.218022e-06 6.741749e+00 6.618691e+00 1350 1.218532e-06 6.743027e+00 6.619990e+00 1351 1.219553e-06 6.745583e+00 6.622588e+00 1352 1.219808e-06 6.746223e+00 6.623238e+00 1353 1.220318e-06 6.747502e+00 6.624536e+00 1354 1.221339e-06 6.750062e+00 6.627132e+00 1355 1.221594e-06 6.750703e+00 6.627780e+00 1356 1.222104e-06 6.751985e+00 6.629078e+00 1357 1.223125e-06 6.754552e+00 6.631671e+00 1358 1.223380e-06 6.755192e+00 6.632319e+00 1359 1.223890e-06 6.756472e+00 6.633615e+00 1360 1.224911e-06 6.759023e+00 6.636207e+00 1361 1.225166e-06 6.759661e+00 6.636854e+00 1362 1.225676e-06 6.760935e+00 6.638149e+00 1363 1.226697e-06 6.763470e+00 6.640738e+00 1364 1.226952e-06 6.764104e+00 6.641385e+00 1365 1.227463e-06 6.765371e+00 6.642678e+00 1366 1.227590e-06 6.765687e+00 6.643001e+00 1367 1.227845e-06 6.766319e+00 6.643648e+00 1368 1.228356e-06 6.767579e+00 6.644941e+00 1369 1.228483e-06 6.767894e+00 6.645264e+00 1370 1.228738e-06 6.768523e+00 6.645910e+00 1371 1.229249e-06 6.769777e+00 6.647202e+00 1372 1.229376e-06 6.770091e+00 6.647524e+00 1373 1.229631e-06 6.770717e+00 6.648170e+00 1374 1.230142e-06 6.771965e+00 6.649461e+00 1375 1.230269e-06 6.772276e+00 6.649783e+00 1376 1.230524e-06 6.772899e+00 6.650429e+00 1377 1.231035e-06 6.774140e+00 6.651718e+00 1378 1.231162e-06 6.774450e+00 6.652041e+00 1379 1.231417e-06 6.775069e+00 6.652685e+00 1380 1.231928e-06 6.776302e+00 6.653974e+00 1381 1.232055e-06 6.776609e+00 6.654296e+00 1382 1.232311e-06 6.777221e+00 6.654939e+00 1383 1.232821e-06 6.778438e+00 6.656227e+00 1384 1.232948e-06 6.778741e+00 6.656548e+00 1385 1.233204e-06 6.779345e+00 6.657191e+00 1386 1.233714e-06 6.780545e+00 6.658477e+00 1387 1.233841e-06 6.780843e+00 6.658798e+00 1388 1.234097e-06 6.781438e+00 6.659440e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 1389 1.234607e-06 6.782619e+00 6.660724e+00 1390 1.234735e-06 6.782913e+00 6.661044e+00 1391 1.234990e-06 6.783498e+00 6.661685e+00 1392 1.235500e-06 6.784661e+00 6.662966e+00 1393 1.235628e-06 6.784950e+00 6.663286e+00 1394 1.235883e-06 6.785526e+00 6.663926e+00 1395 1.236393e-06 6.786669e+00 6.665205e+00 1396 1.236521e-06 6.786954e+00 6.665524e+00 1397 1.236776e-06 6.787520e+00 6.666163e+00 1398 1.237286e-06 6.788645e+00 6.667439e+00 1399 1.237414e-06 6.788924e+00 6.667757e+00 1400 1.237669e-06 6.789481e+00 6.668394e+00 1401 1.238179e-06 6.790585e+00 6.669667e+00 1402 1.238307e-06 6.790860e+00 6.669985e+00 1403 1.238562e-06 6.791407e+00 6.670620e+00 1404 1.239072e-06 6.792491e+00 6.671889e+00 1405 1.239200e-06 6.792761e+00 6.672206e+00 1406 1.239455e-06 6.793298e+00 6.672839e+00 1407 1.239965e-06 6.794361e+00 6.674105e+00 1408 1.240093e-06 6.794625e+00 6.674421e+00 1409 1.240348e-06 6.795152e+00 6.675052e+00 1410 1.240858e-06 6.796194e+00 6.676313e+00 1411 1.240986e-06 6.796453e+00 6.676628e+00 1412 1.241241e-06 6.796968e+00 6.677258e+00 1413 1.241751e-06 6.797989e+00 6.678514e+00 1414 1.241879e-06 6.798242e+00 6.678828e+00 1415 1.242134e-06 6.798747e+00 6.679455e+00 1416 1.242644e-06 6.799744e+00 6.680707e+00 1417 1.242772e-06 6.799992e+00 6.681020e+00 1418 1.243027e-06 6.800485e+00 6.681645e+00 1419 1.243537e-06 6.801460e+00 6.682892e+00 1420 1.243665e-06 6.801702e+00 6.683203e+00 1421 1.243920e-06 6.802183e+00 6.683825e+00 1422 1.244430e-06 6.803134e+00 6.685067e+00 1423 1.244558e-06 6.803370e+00 6.685376e+00 1424 1.244813e-06 6.803840e+00 6.685996e+00 1425 1.245324e-06 6.804767e+00 6.687232e+00 1426 1.245451e-06 6.804996e+00 6.687540e+00 1427 1.245706e-06 6.805454e+00 6.688156e+00 1428 1.246217e-06 6.806356e+00 6.689386e+00 1429 1.246344e-06 6.806579e+00 6.689693e+00 1430 1.246599e-06 6.807024e+00 6.690306e+00 1431 1.247110e-06 6.807901e+00 6.691530e+00 1432 1.247237e-06 6.808118e+00 6.691835e+00 1433 1.247492e-06 6.808551e+00 6.692445e+00 1434 1.248003e-06 6.809402e+00 6.693662e+00 1435 1.248130e-06 6.809613e+00 6.693965e+00 1436 1.248385e-06 6.810032e+00 6.694572e+00 1437 1.248896e-06 6.810857e+00 6.695781e+00 1438 1.249023e-06 6.811061e+00 6.696083e+00 1439 1.249278e-06 6.811467e+00 6.696686e+00 1440 1.249789e-06 6.812266e+00 6.697888e+00 1441 1.249916e-06 6.812463e+00 6.698188e+00 1442 1.250171e-06 6.812856e+00 6.698787e+00 1443 1.250682e-06 6.813627e+00 6.699982e+00 1444 1.250809e-06 6.813818e+00 6.700279e+00 1445 1.251065e-06 6.814197e+00 6.700875e+00 1446 1.251575e-06 6.814941e+00 6.702061e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 1447 1.251702e-06 6.815125e+00 6.702357e+00 1448 1.251958e-06 6.815490e+00 6.702948e+00 1449 1.252468e-06 6.816207e+00 6.704126e+00 1450 1.252595e-06 6.816383e+00 6.704419e+00 1451 1.252851e-06 6.816735e+00 6.705006e+00 1452 1.253361e-06 6.817423e+00 6.706175e+00 1453 1.253489e-06 6.817592e+00 6.706466e+00 1454 1.253744e-06 6.817930e+00 6.707048e+00 1455 1.254254e-06 6.818589e+00 6.708208e+00 1456 1.254382e-06 6.818752e+00 6.708497e+00 1457 1.254637e-06 6.819074e+00 6.709075e+00 1458 1.255147e-06 6.819705e+00 6.710225e+00 1459 1.255275e-06 6.819860e+00 6.710512e+00 1460 1.255530e-06 6.820168e+00 6.711085e+00 1461 1.256040e-06 6.820770e+00 6.712225e+00 1462 1.256168e-06 6.820918e+00 6.712509e+00 1463 1.256423e-06 6.821211e+00 6.713077e+00 1464 1.256933e-06 6.821783e+00 6.714207e+00 1465 1.257061e-06 6.821924e+00 6.714489e+00 1466 1.257316e-06 6.822202e+00 6.715051e+00 1467 1.257826e-06 6.822744e+00 6.716171e+00 1468 1.257954e-06 6.822877e+00 6.716450e+00 1469 1.258209e-06 6.823141e+00 6.717007e+00 1470 1.258719e-06 6.823653e+00 6.718116e+00 1471 1.258847e-06 6.823778e+00 6.718392e+00 1472 1.259102e-06 6.824027e+00 6.718943e+00 1473 1.259612e-06 6.824508e+00 6.720041e+00 1474 1.259740e-06 6.824626e+00 6.720314e+00 1475 1.259995e-06 6.824859e+00 6.720860e+00 1476 1.260505e-06 6.825309e+00 6.721946e+00 1477 1.260633e-06 6.825420e+00 6.722217e+00 1478 1.260888e-06 6.825637e+00 6.722756e+00 1479 1.261398e-06 6.826057e+00 6.723831e+00 1480 1.261526e-06 6.826159e+00 6.724098e+00 1481 1.261781e-06 6.826361e+00 6.724632e+00 1482 1.262291e-06 6.826749e+00 6.725694e+00 1483 1.262419e-06 6.826844e+00 6.725958e+00 1484 1.262674e-06 6.827030e+00 6.726485e+00 1485 1.263184e-06 6.827387e+00 6.727535e+00 1486 1.263312e-06 6.827474e+00 6.727795e+00 1487 1.263567e-06 6.827644e+00 6.728317e+00 1488 1.264078e-06 6.827969e+00 6.729353e+00 1489 1.264205e-06 6.828048e+00 6.729611e+00 1490 1.264460e-06 6.828202e+00 6.730125e+00 1491 1.264971e-06 6.828495e+00 6.731148e+00 1492 1.265098e-06 6.828566e+00 6.731403e+00 1493 1.265353e-06 6.828705e+00 6.731910e+00 1494 1.265864e-06 6.828965e+00 6.732920e+00 1495 1.265991e-06 6.829028e+00 6.733171e+00 1496 1.266246e-06 6.829150e+00 6.733671e+00 1497 1.266757e-06 6.829378e+00 6.734667e+00 1498 1.266884e-06 6.829433e+00 6.734914e+00 1499 1.267139e-06 6.829539e+00 6.735408e+00 1500 1.267650e-06 6.829735e+00 6.736389e+00 1501 1.267777e-06 6.829781e+00 6.736633e+00 1502 1.268032e-06 6.829871e+00 6.737120e+00 1503 1.268543e-06 6.830033e+00 6.738086e+00 1504 1.268670e-06 6.830071e+00 6.738326e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 1505 1.268925e-06 6.830145e+00 6.738805e+00 1506 1.269436e-06 6.830275e+00 6.739757e+00 1507 1.269563e-06 6.830305e+00 6.739993e+00 1508 1.269819e-06 6.830361e+00 6.740465e+00 1509 1.270329e-06 6.830458e+00 6.741401e+00 1510 1.270456e-06 6.830480e+00 6.741634e+00 1511 1.270712e-06 6.830520e+00 6.742097e+00 1512 1.271222e-06 6.830583e+00 6.743018e+00 1513 1.271349e-06 6.830596e+00 6.743247e+00 1514 1.271605e-06 6.830620e+00 6.743703e+00 1515 1.272115e-06 6.830650e+00 6.744608e+00 1516 1.272243e-06 6.830655e+00 6.744832e+00 1517 1.272498e-06 6.830662e+00 6.745280e+00 1518 1.273008e-06 6.830658e+00 6.746169e+00 1519 1.273136e-06 6.830655e+00 6.746389e+00 1520 1.273391e-06 6.830645e+00 6.746829e+00 1521 1.273901e-06 6.830607e+00 6.747701e+00 1522 1.274029e-06 6.830595e+00 6.747917e+00 1523 1.274284e-06 6.830569e+00 6.748348e+00 1524 1.274794e-06 6.830497e+00 6.749204e+00 1525 1.274922e-06 6.830477e+00 6.749416e+00 1526 1.275177e-06 6.830433e+00 6.749838e+00 1527 1.275687e-06 6.830328e+00 6.750677e+00 1528 1.275815e-06 6.830299e+00 6.750884e+00 1529 1.276070e-06 6.830238e+00 6.751298e+00 1530 1.276580e-06 6.830099e+00 6.752119e+00 1531 1.276708e-06 6.830062e+00 6.752323e+00 1532 1.276963e-06 6.829984e+00 6.752728e+00 1533 1.277473e-06 6.829811e+00 6.753531e+00 1534 1.277601e-06 6.829765e+00 6.753730e+00 1535 1.277856e-06 6.829670e+00 6.754126e+00 1536 1.278366e-06 6.829462e+00 6.754911e+00 1537 1.278494e-06 6.829408e+00 6.755105e+00 1538 1.278749e-06 6.829296e+00 6.755493e+00 1539 1.279259e-06 6.829055e+00 6.756259e+00 1540 1.279387e-06 6.828993e+00 6.756449e+00 1541 1.279642e-06 6.828865e+00 6.756827e+00 1542 1.280152e-06 6.828592e+00 6.757575e+00 1543 1.280280e-06 6.828521e+00 6.757760e+00 1544 1.280535e-06 6.828377e+00 6.758129e+00 1545 1.281045e-06 6.828069e+00 6.758858e+00 1546 1.281173e-06 6.827990e+00 6.759038e+00 1547 1.281428e-06 6.827827e+00 6.759398e+00 1548 1.281938e-06 6.827484e+00 6.760108e+00 1549 1.282066e-06 6.827395e+00 6.760283e+00 1550 1.282321e-06 6.827215e+00 6.760633e+00 1551 1.282832e-06 6.826834e+00 6.761323e+00 1552 1.282959e-06 6.826736e+00 6.761494e+00 1553 1.283214e-06 6.826538e+00 6.761834e+00 1554 1.283725e-06 6.826121e+00 6.762505e+00 1555 1.283852e-06 6.826013e+00 6.762670e+00 1556 1.284107e-06 6.825796e+00 6.763000e+00 1557 1.284618e-06 6.825342e+00 6.763651e+00 1558 1.284745e-06 6.825225e+00 6.763812e+00 1559 1.285000e-06 6.824990e+00 6.764131e+00 1560 1.285511e-06 6.824499e+00 6.764762e+00 1561 1.285638e-06 6.824373e+00 6.764917e+00 1562 1.285893e-06 6.824118e+00 6.765227e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 1563 1.286404e-06 6.823590e+00 6.765837e+00 1564 1.286531e-06 6.823455e+00 6.765987e+00 1565 1.286786e-06 6.823182e+00 6.766286e+00 1566 1.287297e-06 6.822617e+00 6.766875e+00 1567 1.287424e-06 6.822473e+00 6.767020e+00 1568 1.287679e-06 6.822181e+00 6.767308e+00 1569 1.288190e-06 6.821579e+00 6.767876e+00 1570 1.288317e-06 6.821425e+00 6.768016e+00 1571 1.288573e-06 6.821115e+00 6.768293e+00 1572 1.289083e-06 6.820475e+00 6.768839e+00 1573 1.289210e-06 6.820312e+00 6.768974e+00 1574 1.289466e-06 6.819983e+00 6.769241e+00 1575 1.289976e-06 6.819306e+00 6.769765e+00 1576 1.290103e-06 6.819134e+00 6.769894e+00 1577 1.290359e-06 6.818787e+00 6.770150e+00 1578 1.290869e-06 6.818072e+00 6.770652e+00 1579 1.290997e-06 6.817891e+00 6.770775e+00 1580 1.291252e-06 6.817524e+00 6.771020e+00 1581 1.291762e-06 6.816773e+00 6.771500e+00 1582 1.291890e-06 6.816582e+00 6.771617e+00 1583 1.292145e-06 6.816197e+00 6.771851e+00 1584 1.292655e-06 6.815408e+00 6.772308e+00 1585 1.292783e-06 6.815207e+00 6.772420e+00 1586 1.293038e-06 6.814804e+00 6.772642e+00 1587 1.293548e-06 6.813977e+00 6.773076e+00 1588 1.293676e-06 6.813768e+00 6.773183e+00 1589 1.293931e-06 6.813345e+00 6.773393e+00 1590 1.294441e-06 6.812482e+00 6.773804e+00 1591 1.294569e-06 6.812263e+00 6.773905e+00 1592 1.294824e-06 6.811822e+00 6.774104e+00 1593 1.295334e-06 6.810920e+00 6.774491e+00 1594 1.295462e-06 6.810692e+00 6.774586e+00 1595 1.295717e-06 6.810232e+00 6.774773e+00 1596 1.296227e-06 6.809294e+00 6.775137e+00 1597 1.296355e-06 6.809056e+00 6.775225e+00 1598 1.296610e-06 6.808577e+00 6.775401e+00 1599 1.297120e-06 6.807601e+00 6.775741e+00 1600 1.297248e-06 6.807354e+00 6.775823e+00 1601 1.297503e-06 6.806857e+00 6.775986e+00 1602 1.298013e-06 6.805844e+00 6.776302e+00 1603 1.298141e-06 6.805587e+00 6.776379e+00 1604 1.298396e-06 6.805072e+00 6.776530e+00 1605 1.298906e-06 6.804021e+00 6.776821e+00 1606 1.299034e-06 6.803755e+00 6.776892e+00 1607 1.299289e-06 6.803221e+00 6.777031e+00 1608 1.299799e-06 6.802133e+00 6.777297e+00 1609 1.299927e-06 6.801858e+00 6.777362e+00 1610 1.300182e-06 6.801305e+00 6.777488e+00 1611 1.300692e-06 6.800180e+00 6.777730e+00 1612 1.300820e-06 6.799895e+00 6.777788e+00 1613 1.301075e-06 6.799324e+00 6.777902e+00 1614 1.301586e-06 6.798161e+00 6.778119e+00 1615 1.301713e-06 6.797867e+00 6.778170e+00 1616 1.301968e-06 6.797277e+00 6.778271e+00 1617 1.302479e-06 6.796078e+00 6.778463e+00 1618 1.302606e-06 6.795775e+00 6.778508e+00 1619 1.302861e-06 6.795166e+00 6.778597e+00 1620 1.303372e-06 6.793929e+00 6.778763e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 1621 1.303499e-06 6.793617e+00 6.778802e+00 1622 1.303754e-06 6.792990e+00 6.778877e+00 1623 1.304265e-06 6.791716e+00 6.779018e+00 1624 1.304392e-06 6.791395e+00 6.779050e+00 1625 1.304647e-06 6.790749e+00 6.779113e+00 1626 1.305158e-06 6.789438e+00 6.779227e+00 1627 1.305285e-06 6.789107e+00 6.779253e+00 1628 1.305540e-06 6.788443e+00 6.779302e+00 1629 1.306051e-06 6.787095e+00 6.779391e+00 1630 1.306178e-06 6.786755e+00 6.779410e+00 1631 1.306433e-06 6.786073e+00 6.779446e+00 1632 1.306944e-06 6.784688e+00 6.779508e+00 1633 1.307071e-06 6.784339e+00 6.779521e+00 1634 1.307327e-06 6.783638e+00 6.779544e+00 1635 1.307837e-06 6.782216e+00 6.779579e+00 1636 1.307964e-06 6.781858e+00 6.779585e+00 1637 1.308220e-06 6.781139e+00 6.779595e+00 1638 1.308730e-06 6.779680e+00 6.779604e+00 1639 1.308857e-06 6.779313e+00 6.779603e+00 1640 1.309113e-06 6.778575e+00 6.779600e+00 1641 1.309623e-06 6.777080e+00 6.779581e+00 1642 1.309751e-06 6.776704e+00 6.779574e+00 1643 1.310006e-06 6.775947e+00 6.779557e+00 1644 1.310516e-06 6.774416e+00 6.779511e+00 1645 1.310644e-06 6.774030e+00 6.779497e+00 1646 1.310899e-06 6.773256e+00 6.779466e+00 1647 1.311409e-06 6.771688e+00 6.779393e+00 1648 1.311537e-06 6.771293e+00 6.779372e+00 1649 1.311792e-06 6.770500e+00 6.779328e+00 1650 1.312302e-06 6.768896e+00 6.779227e+00 1651 1.312430e-06 6.768492e+00 6.779199e+00 1652 1.312685e-06 6.767681e+00 6.779141e+00 1653 1.313195e-06 6.766040e+00 6.779013e+00 1654 1.313323e-06 6.765627e+00 6.778978e+00 1655 1.313578e-06 6.764798e+00 6.778906e+00 1656 1.314088e-06 6.763121e+00 6.778751e+00 1657 1.314216e-06 6.762699e+00 6.778709e+00 1658 1.314471e-06 6.761851e+00 6.778623e+00 1659 1.314981e-06 6.760138e+00 6.778439e+00 1660 1.315109e-06 6.759707e+00 6.778390e+00 1661 1.315364e-06 6.758841e+00 6.778290e+00 1662 1.315874e-06 6.757092e+00 6.778078e+00 1663 1.316002e-06 6.756652e+00 6.778022e+00 1664 1.316257e-06 6.755769e+00 6.777908e+00 1665 1.316767e-06 6.753983e+00 6.777668e+00 1666 1.316895e-06 6.753534e+00 6.777605e+00 1667 1.317150e-06 6.752633e+00 6.777477e+00 1668 1.317660e-06 6.750811e+00 6.777208e+00 1669 1.317788e-06 6.750353e+00 6.777138e+00 1670 1.318043e-06 6.749434e+00 6.776995e+00 1671 1.318553e-06 6.747577e+00 6.776698e+00 1672 1.318681e-06 6.747110e+00 6.776621e+00 1673 1.318936e-06 6.746172e+00 6.776464e+00 1674 1.319446e-06 6.744280e+00 6.776138e+00 1675 1.319574e-06 6.743804e+00 6.776053e+00 1676 1.319829e-06 6.742849e+00 6.775882e+00 1677 1.320340e-06 6.740920e+00 6.775527e+00 1678 1.320467e-06 6.740435e+00 6.775435e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 1679 1.320722e-06 6.739462e+00 6.775250e+00 1680 1.321233e-06 6.737499e+00 6.774866e+00 1681 1.321360e-06 6.737005e+00 6.774767e+00 1682 1.321615e-06 6.736014e+00 6.774567e+00 1683 1.322126e-06 6.734015e+00 6.774154e+00 1684 1.322253e-06 6.733512e+00 6.774047e+00 1685 1.322508e-06 6.732504e+00 6.773832e+00 1686 1.323019e-06 6.730469e+00 6.773390e+00 1687 1.323146e-06 6.729958e+00 6.773277e+00 1688 1.323401e-06 6.728932e+00 6.773047e+00 1689 1.323912e-06 6.726862e+00 6.772576e+00 1690 1.324039e-06 6.726342e+00 6.772455e+00 1691 1.324294e-06 6.725298e+00 6.772210e+00 1692 1.324805e-06 6.723194e+00 6.771709e+00 1693 1.324932e-06 6.722664e+00 6.771581e+00 1694 1.325187e-06 6.721603e+00 6.771322e+00 1695 1.325698e-06 6.719464e+00 6.770791e+00 1696 1.325825e-06 6.718926e+00 6.770655e+00 1697 1.326081e-06 6.717847e+00 6.770382e+00 1698 1.326591e-06 6.715673e+00 6.769821e+00 1699 1.326718e-06 6.715126e+00 6.769678e+00 1700 1.326974e-06 6.714030e+00 6.769389e+00 1701 1.327484e-06 6.711821e+00 6.768799e+00 1702 1.327611e-06 6.711266e+00 6.768648e+00 1703 1.327867e-06 6.710153e+00 6.768345e+00 1704 1.328377e-06 6.707909e+00 6.767725e+00 1705 1.328505e-06 6.707345e+00 6.767566e+00 1706 1.328760e-06 6.706214e+00 6.767248e+00 1707 1.329270e-06 6.703936e+00 6.766598e+00 1708 1.329398e-06 6.703363e+00 6.766432e+00 1709 1.329653e-06 6.702216e+00 6.766098e+00 1710 1.330163e-06 6.699903e+00 6.765418e+00 1711 1.330291e-06 6.699322e+00 6.765245e+00 1712 1.330546e-06 6.698157e+00 6.764896e+00 1713 1.331056e-06 6.695810e+00 6.764185e+00 1714 1.331184e-06 6.695220e+00 6.764004e+00 1715 1.331439e-06 6.694038e+00 6.763641e+00 1716 1.331949e-06 6.691657e+00 6.762900e+00 1717 1.332077e-06 6.691059e+00 6.762711e+00 1718 1.332332e-06 6.689860e+00 6.762332e+00 1719 1.332842e-06 6.687445e+00 6.761561e+00 1720 1.332970e-06 6.686838e+00 6.761365e+00 1721 1.333225e-06 6.685622e+00 6.760971e+00 1722 1.333735e-06 6.683173e+00 6.760169e+00 1723 1.333863e-06 6.682558e+00 6.759965e+00 1724 1.334118e-06 6.681325e+00 6.759556e+00 1725 1.334628e-06 6.678842e+00 6.758724e+00 1726 1.334756e-06 6.678218e+00 6.758512e+00 1727 1.335011e-06 6.676969e+00 6.758087e+00 1728 1.335521e-06 6.674452e+00 6.757225e+00 1729 1.335649e-06 6.673820e+00 6.757006e+00 1730 1.335904e-06 6.672554e+00 6.756565e+00 1731 1.336414e-06 6.670004e+00 6.755672e+00 1732 1.336542e-06 6.669363e+00 6.755445e+00 1733 1.336797e-06 6.668080e+00 6.754990e+00 1734 1.337307e-06 6.665497e+00 6.754065e+00 1735 1.337435e-06 6.664848e+00 6.753831e+00 1736 1.337690e-06 6.663548e+00 6.753360e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 1737 1.338200e-06 6.660931e+00 6.752405e+00 1738 1.338328e-06 6.660274e+00 6.752163e+00 1739 1.338583e-06 6.658958e+00 6.751676e+00 1740 1.339094e-06 6.656308e+00 6.750690e+00 1741 1.339221e-06 6.655643e+00 6.750440e+00 1742 1.339476e-06 6.654310e+00 6.749938e+00 1743 1.339987e-06 6.651627e+00 6.748921e+00 1744 1.340114e-06 6.650954e+00 6.748664e+00 1745 1.340369e-06 6.649604e+00 6.748146e+00 1746 1.340880e-06 6.646888e+00 6.747098e+00 1747 1.341007e-06 6.646207e+00 6.746833e+00 1748 1.341262e-06 6.644841e+00 6.746300e+00 1749 1.341773e-06 6.642092e+00 6.745221e+00 1750 1.341900e-06 6.641403e+00 6.744948e+00 1751 1.342155e-06 6.640020e+00 6.744399e+00 1752 1.342666e-06 6.637239e+00 6.743289e+00 1753 1.342793e-06 6.636541e+00 6.743008e+00 1754 1.343048e-06 6.635143e+00 6.742444e+00 1755 1.343559e-06 6.632330e+00 6.741302e+00 1756 1.343686e-06 6.631623e+00 6.741014e+00 1757 1.343941e-06 6.630209e+00 6.740434e+00 1758 1.344452e-06 6.627363e+00 6.739261e+00 1759 1.344579e-06 6.626649e+00 6.738965e+00 1760 1.344835e-06 6.625218e+00 6.738370e+00 1761 1.345345e-06 6.622340e+00 6.737166e+00 1762 1.345472e-06 6.621618e+00 6.736861e+00 1763 1.345728e-06 6.620171e+00 6.736250e+00 1764 1.346238e-06 6.617261e+00 6.735015e+00 1765 1.346365e-06 6.616531e+00 6.734703e+00 1766 1.346621e-06 6.615068e+00 6.734076e+00 1767 1.347131e-06 6.612126e+00 6.732810e+00 1768 1.347259e-06 6.611388e+00 6.732490e+00 1769 1.347514e-06 6.609909e+00 6.731847e+00 1770 1.348024e-06 6.606935e+00 6.730549e+00 1771 1.348152e-06 6.606189e+00 6.730221e+00 1772 1.348407e-06 6.604695e+00 6.729563e+00 1773 1.348917e-06 6.601689e+00 6.728234e+00 1774 1.349045e-06 6.600935e+00 6.727898e+00 1775 1.349300e-06 6.599425e+00 6.727225e+00 1776 1.349810e-06 6.596388e+00 6.725864e+00 1777 1.350831e-06 6.590258e+00 6.723088e+00 1778 1.351086e-06 6.588714e+00 6.722380e+00 1779 1.351596e-06 6.585617e+00 6.720956e+00 1780 1.352617e-06 6.579375e+00 6.718055e+00 1781 1.352872e-06 6.577797e+00 6.717316e+00 1782 1.353382e-06 6.574635e+00 6.715829e+00 1783 1.354403e-06 6.568259e+00 6.712801e+00 1784 1.354658e-06 6.566652e+00 6.712030e+00 1785 1.355168e-06 6.563431e+00 6.710480e+00 1786 1.356189e-06 6.556933e+00 6.707326e+00 1787 1.356444e-06 6.555297e+00 6.706524e+00 1788 1.356954e-06 6.552015e+00 6.704911e+00 1789 1.357975e-06 6.545405e+00 6.701630e+00 1790 1.358230e-06 6.543735e+00 6.700797e+00 1791 1.358741e-06 6.540390e+00 6.699120e+00 1792 1.359761e-06 6.533649e+00 6.695713e+00 1793 1.360016e-06 6.531952e+00 6.694848e+00 1794 1.360527e-06 6.528549e+00 6.693108e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 1795 1.361547e-06 6.521690e+00 6.689575e+00 1796 1.361802e-06 6.519964e+00 6.688678e+00 1797 1.362313e-06 6.516502e+00 6.686875e+00 1798 1.363333e-06 6.509526e+00 6.683215e+00 1799 1.363589e-06 6.507770e+00 6.682287e+00 1800 1.364099e-06 6.504250e+00 6.680421e+00 1801 1.365119e-06 6.497208e+00 6.676635e+00 1802 1.365375e-06 6.495453e+00 6.675676e+00 1803 1.365885e-06 6.491938e+00 6.673748e+00 1804 1.366906e-06 6.484874e+00 6.669840e+00 1805 1.367161e-06 6.483101e+00 6.668850e+00 1806 1.367671e-06 6.479548e+00 6.666862e+00 1807 1.368692e-06 6.472405e+00 6.662834e+00 1808 1.368947e-06 6.470604e+00 6.661814e+00 1809 1.369457e-06 6.466999e+00 6.659766e+00 1810 1.370478e-06 6.459743e+00 6.655618e+00 1811 1.370733e-06 6.457919e+00 6.654568e+00 1812 1.371243e-06 6.454263e+00 6.652460e+00 1813 1.372264e-06 6.446903e+00 6.648193e+00 1814 1.372519e-06 6.445053e+00 6.647113e+00 1815 1.373029e-06 6.441345e+00 6.644946e+00 1816 1.374050e-06 6.433881e+00 6.640560e+00 1817 1.374305e-06 6.432005e+00 6.639450e+00 1818 1.374815e-06 6.428246e+00 6.637223e+00 1819 1.375836e-06 6.420679e+00 6.632718e+00 1820 1.376091e-06 6.418777e+00 6.631579e+00 1821 1.376602e-06 6.414966e+00 6.629292e+00 1822 1.377622e-06 6.407296e+00 6.624669e+00 1823 1.377877e-06 6.405368e+00 6.623500e+00 1824 1.378388e-06 6.401506e+00 6.621155e+00 1825 1.379408e-06 6.393734e+00 6.616413e+00 1826 1.379663e-06 6.391781e+00 6.615215e+00 1827 1.380174e-06 6.387867e+00 6.612810e+00 1828 1.381194e-06 6.379994e+00 6.607950e+00 1829 1.381449e-06 6.378015e+00 6.606723e+00 1830 1.381960e-06 6.374051e+00 6.604259e+00 1831 1.382980e-06 6.366086e+00 6.599282e+00 1832 1.383236e-06 6.364080e+00 6.598025e+00 1833 1.383746e-06 6.360062e+00 6.595503e+00 1834 1.384767e-06 6.351994e+00 6.590408e+00 1835 1.385022e-06 6.349963e+00 6.589122e+00 1836 1.385532e-06 6.345895e+00 6.586541e+00 1837 1.386553e-06 6.337727e+00 6.581330e+00 1838 1.386808e-06 6.335672e+00 6.580014e+00 1839 1.387318e-06 6.331555e+00 6.577375e+00 1840 1.388339e-06 6.323290e+00 6.572047e+00 1841 1.388594e-06 6.321210e+00 6.570703e+00 1842 1.389104e-06 6.317045e+00 6.568006e+00 1843 1.390125e-06 6.308683e+00 6.562562e+00 1844 1.390380e-06 6.306579e+00 6.561188e+00 1845 1.390890e-06 6.302366e+00 6.558433e+00 1846 1.391911e-06 6.293909e+00 6.552873e+00 1847 1.392166e-06 6.291781e+00 6.551471e+00 1848 1.392676e-06 6.287522e+00 6.548658e+00 1849 1.393697e-06 6.278970e+00 6.542983e+00 1850 1.393952e-06 6.276819e+00 6.541552e+00 1851 1.394462e-06 6.272513e+00 6.538682e+00 1852 1.395483e-06 6.263868e+00 6.532893e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 1853 1.395738e-06 6.261694e+00 6.531433e+00 1854 1.396249e-06 6.257342e+00 6.528505e+00 1855 1.397269e-06 6.248595e+00 6.522602e+00 1856 1.397524e-06 6.246401e+00 6.521113e+00 1857 1.398035e-06 6.242006e+00 6.518129e+00 1858 1.399055e-06 6.233180e+00 6.512111e+00 1859 1.399310e-06 6.230961e+00 6.510595e+00 1860 1.399821e-06 6.226518e+00 6.507554e+00 1861 1.400841e-06 6.217590e+00 6.501423e+00 1862 1.401097e-06 6.215351e+00 6.499878e+00 1863 1.401607e-06 6.210866e+00 6.496781e+00 1864 1.402627e-06 6.201859e+00 6.490538e+00 1865 1.402883e-06 6.199595e+00 6.488965e+00 1866 1.403393e-06 6.195063e+00 6.485811e+00 1867 1.404414e-06 6.185957e+00 6.479456e+00 1868 1.404669e-06 6.183673e+00 6.477855e+00 1869 1.405179e-06 6.179099e+00 6.474646e+00 1870 1.406200e-06 6.169907e+00 6.468179e+00 1871 1.406455e-06 6.167602e+00 6.466550e+00 1872 1.406965e-06 6.162985e+00 6.463285e+00 1873 1.407986e-06 6.153706e+00 6.456707e+00 1874 1.408241e-06 6.151379e+00 6.455051e+00 1875 1.408751e-06 6.146719e+00 6.451731e+00 1876 1.409772e-06 6.137355e+00 6.445043e+00 1877 1.410027e-06 6.135007e+00 6.443359e+00 1878 1.410537e-06 6.130304e+00 6.439983e+00 1879 1.411558e-06 6.120854e+00 6.433186e+00 1880 1.411813e-06 6.118485e+00 6.431475e+00 1881 1.412323e-06 6.113740e+00 6.428045e+00 1882 1.413344e-06 6.104206e+00 6.421138e+00 1883 1.415385e-06 6.085009e+00 6.407138e+00 1884 1.415896e-06 6.080168e+00 6.403592e+00 1885 1.416916e-06 6.070470e+00 6.396469e+00 1886 1.418957e-06 6.050950e+00 6.382039e+00 1887 1.419468e-06 6.046026e+00 6.378386e+00 1888 1.420488e-06 6.036165e+00 6.371049e+00 1889 1.422530e-06 6.016325e+00 6.356194e+00 1890 1.423040e-06 6.011322e+00 6.352435e+00 1891 1.424061e-06 6.001302e+00 6.344888e+00 1892 1.426102e-06 5.981136e+00 6.329613e+00 1893 1.426612e-06 5.976062e+00 6.325749e+00 1894 1.427633e-06 5.965893e+00 6.317993e+00 1895 1.429674e-06 5.945423e+00 6.302304e+00 1896 1.430184e-06 5.940274e+00 6.298338e+00 1897 1.431205e-06 5.929955e+00 6.290377e+00 1898 1.433246e-06 5.909187e+00 6.274279e+00 1899 1.433757e-06 5.903963e+00 6.270212e+00 1900 1.434777e-06 5.893495e+00 6.262047e+00 1901 1.436818e-06 5.872444e+00 6.245548e+00 1902 1.440901e-06 5.829826e+00 6.211869e+00 1903 1.441922e-06 5.819057e+00 6.203281e+00 1904 1.443963e-06 5.797434e+00 6.185994e+00 1905 1.448045e-06 5.753720e+00 6.150762e+00 1906 1.456210e-06 5.665056e+00 6.077770e+00 1907 1.472540e-06 5.481621e+00 5.922325e+00 1908 1.505200e-06 5.149691e+00 5.593618e+00 1909 1.552514e-06 4.897577e+00 5.188693e+00 1910 1.604422e-06 4.854093e+00 4.950324e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 1911 1.661802e-06 4.892522e+00 4.887660e+00 1912 1.727031e-06 4.963490e+00 4.922961e+00 1913 1.823652e-06 5.039949e+00 5.007159e+00 1914 1.923652e-06 5.053026e+00 5.049806e+00 1915 2.023652e-06 5.035913e+00 5.044020e+00 1916 2.123652e-06 5.024426e+00 5.029004e+00 1917 2.223652e-06 5.023541e+00 5.023559e+00 1918 2.323652e-06 5.026776e+00 5.025294e+00 1919 2.423652e-06 5.028190e+00 5.027667e+00 1920 2.523652e-06 5.028143e+00 5.028208e+00 1921 2.623652e-06 5.027587e+00 5.027836e+00 1922 2.723652e-06 5.027478e+00 5.027507e+00 1923 2.823652e-06 5.027435e+00 5.027452e+00 1924 2.923652e-06 5.027617e+00 5.027532e+00 1925 3.023652e-06 5.027525e+00 5.027574e+00 1926 3.123652e-06 5.027634e+00 5.027580e+00 1927 3.223652e-06 5.027490e+00 5.027561e+00 1928 3.323652e-06 5.027634e+00 5.027562e+00 1929 3.423652e-06 5.027478e+00 5.027555e+00 1930 3.523652e-06 5.027651e+00 5.027565e+00 1931 3.623652e-06 5.027466e+00 5.027558e+00 1932 3.723652e-06 5.027664e+00 5.027566e+00 1933 3.823652e-06 5.027452e+00 5.027558e+00 1934 3.923652e-06 5.027676e+00 5.027565e+00 1935 4.023652e-06 5.027441e+00 5.027558e+00 1936 4.123652e-06 5.027687e+00 5.027564e+00 1937 4.223652e-06 5.027431e+00 5.027559e+00 1938 4.323652e-06 5.027695e+00 5.027564e+00 1939 4.423652e-06 5.027425e+00 5.027560e+00 1940 4.523652e-06 5.027701e+00 5.027563e+00 1941 4.623652e-06 5.027420e+00 5.027561e+00 1942 4.723652e-06 5.027704e+00 5.027562e+00 1943 4.823652e-06 5.027419e+00 5.027562e+00 1944 4.923652e-06 5.027704e+00 5.027562e+00 1945 5.002000e-06 5.027421e+00 5.027562e+00 1946 5.002100e-06 4.865792e+00 5.027178e+00 1947 5.002300e-06 4.607623e+00 5.025788e+00 1948 5.002700e-06 4.338157e+00 5.020463e+00 1949 5.002967e-06 4.220505e+00 5.015671e+00 1950 5.003000e-06 4.208495e+00 5.015017e+00 1951 5.003004e-06 4.212342e+00 5.014934e+00 1952 5.003013e-06 4.220000e+00 5.014770e+00 1953 5.003030e-06 4.235103e+00 5.014446e+00 1954 5.003063e-06 4.264483e+00 5.013818e+00 1955 5.003131e-06 4.320086e+00 5.012635e+00 1956 5.003266e-06 4.419807e+00 5.010534e+00 1957 5.003535e-06 4.580955e+00 5.007219e+00 1958 5.004075e-06 4.794452e+00 5.003105e+00 1959 5.004566e-06 4.904196e+00 5.001319e+00 1960 5.005184e-06 4.982201e+00 5.000472e+00 1961 5.005941e-06 5.029819e+00 5.000571e+00 1962 5.006946e-06 5.058526e+00 5.001597e+00 1963 5.008407e-06 5.078596e+00 5.003873e+00 1964 5.009960e-06 5.093112e+00 5.006829e+00 1965 5.011833e-06 5.104317e+00 5.010809e+00 1966 5.013966e-06 5.103456e+00 5.015384e+00 1967 5.016601e-06 5.081973e+00 5.020054e+00 1968 5.019579e-06 5.043285e+00 5.022952e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 1969 5.023366e-06 5.000955e+00 5.022880e+00 1970 5.027342e-06 4.978992e+00 5.019916e+00 1971 5.031815e-06 4.968441e+00 5.015258e+00 1972 5.038411e-06 4.944511e+00 5.006714e+00 1973 5.046394e-06 4.900886e+00 4.992131e+00 1974 5.054862e-06 4.855516e+00 4.971226e+00 1975 5.071797e-06 4.756512e+00 4.915487e+00 1976 5.091522e-06 4.615728e+00 4.827278e+00 1977 5.124805e-06 4.343113e+00 4.625983e+00 1978 5.191371e-06 3.671380e+00 4.060557e+00 1979 5.203871e-06 3.529165e+00 3.930289e+00 1980 5.228871e-06 3.237572e+00 3.660166e+00 1981 5.235121e-06 3.162126e+00 3.589161e+00 1982 5.236683e-06 3.143223e+00 3.571343e+00 1983 5.239808e-06 3.105343e+00 3.535575e+00 1984 5.246058e-06 3.029139e+00 3.463273e+00 1985 5.246254e-06 3.026745e+00 3.460997e+00 1986 5.246644e-06 3.021962e+00 3.456443e+00 1987 5.246742e-06 3.020766e+00 3.455304e+00 1988 5.246937e-06 3.018373e+00 3.453025e+00 1989 5.247328e-06 3.013585e+00 3.448464e+00 1990 5.247426e-06 3.012388e+00 3.447323e+00 1991 5.247621e-06 3.009993e+00 3.445041e+00 1992 5.248012e-06 3.005201e+00 3.440474e+00 1993 5.248109e-06 3.004002e+00 3.439331e+00 1994 5.248305e-06 3.001605e+00 3.437046e+00 1995 5.248695e-06 2.996808e+00 3.432472e+00 1996 5.248793e-06 2.995608e+00 3.431328e+00 1997 5.248988e-06 2.993209e+00 3.429039e+00 1998 5.249379e-06 2.988407e+00 3.424459e+00 1999 5.249476e-06 2.987207e+00 3.423313e+00 2000 5.249672e-06 2.984805e+00 3.421021e+00 2001 5.250062e-06 2.979999e+00 3.416434e+00 2002 5.250160e-06 2.978797e+00 3.415286e+00 2003 5.250355e-06 2.976393e+00 3.412991e+00 2004 5.250746e-06 2.971583e+00 3.408398e+00 2005 5.250844e-06 2.970380e+00 3.407249e+00 2006 5.251039e-06 2.967974e+00 3.404950e+00 2007 5.251430e-06 2.963158e+00 3.400350e+00 2008 5.251527e-06 2.961954e+00 3.399200e+00 2009 5.251723e-06 2.959546e+00 3.396898e+00 2010 5.252113e-06 2.954726e+00 3.392292e+00 2011 5.252211e-06 2.953521e+00 3.391140e+00 2012 5.252406e-06 2.951111e+00 3.388835e+00 2013 5.252797e-06 2.946287e+00 3.384222e+00 2014 5.252894e-06 2.945080e+00 3.383068e+00 2015 5.253090e-06 2.942668e+00 3.380760e+00 2016 5.253480e-06 2.937839e+00 3.376141e+00 2017 5.253578e-06 2.936632e+00 3.374986e+00 2018 5.253773e-06 2.934217e+00 3.372674e+00 2019 5.254164e-06 2.929384e+00 3.368049e+00 2020 5.254262e-06 2.928176e+00 3.366892e+00 2021 5.254457e-06 2.925759e+00 3.364578e+00 2022 5.254848e-06 2.920922e+00 3.359946e+00 2023 5.254945e-06 2.919713e+00 3.358787e+00 2024 5.255140e-06 2.917293e+00 3.356470e+00 2025 5.255531e-06 2.912452e+00 3.351832e+00 2026 5.255629e-06 2.911242e+00 3.350672e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 2027 5.255824e-06 2.908820e+00 3.348351e+00 2028 5.256215e-06 2.903975e+00 3.343707e+00 2029 5.256312e-06 2.902764e+00 3.342545e+00 2030 5.256508e-06 2.900340e+00 3.340221e+00 2031 5.256898e-06 2.895491e+00 3.335571e+00 2032 5.256996e-06 2.894279e+00 3.334408e+00 2033 5.257191e-06 2.891853e+00 3.332081e+00 2034 5.257582e-06 2.887000e+00 3.327425e+00 2035 5.257680e-06 2.885787e+00 3.326260e+00 2036 5.257875e-06 2.883359e+00 3.323930e+00 2037 5.258265e-06 2.878502e+00 3.319267e+00 2038 5.258363e-06 2.877287e+00 3.318101e+00 2039 5.258558e-06 2.874858e+00 3.315768e+00 2040 5.258949e-06 2.869997e+00 3.311099e+00 2041 5.259047e-06 2.868781e+00 3.309931e+00 2042 5.259242e-06 2.866350e+00 3.307595e+00 2043 5.259633e-06 2.861485e+00 3.302921e+00 2044 5.259730e-06 2.860269e+00 3.301751e+00 2045 5.259926e-06 2.857835e+00 3.299412e+00 2046 5.260316e-06 2.852966e+00 3.294731e+00 2047 5.260414e-06 2.851749e+00 3.293560e+00 2048 5.260609e-06 2.849314e+00 3.291218e+00 2049 5.261000e-06 2.844441e+00 3.286532e+00 2050 5.261098e-06 2.843223e+00 3.285359e+00 2051 5.261293e-06 2.840786e+00 3.283014e+00 2052 5.261683e-06 2.835909e+00 3.278321e+00 2053 5.261781e-06 2.834690e+00 3.277148e+00 2054 5.261976e-06 2.832251e+00 3.274799e+00 2055 5.262367e-06 2.827370e+00 3.270101e+00 2056 5.262465e-06 2.826150e+00 3.268926e+00 2057 5.262660e-06 2.823709e+00 3.266574e+00 2058 5.263051e-06 2.818825e+00 3.261870e+00 2059 5.263148e-06 2.817604e+00 3.260693e+00 2060 5.263344e-06 2.815161e+00 3.258339e+00 2061 5.263734e-06 2.810273e+00 3.253629e+00 2062 5.263832e-06 2.809051e+00 3.252451e+00 2063 5.264027e-06 2.806607e+00 3.250094e+00 2064 5.264418e-06 2.801715e+00 3.245377e+00 2065 5.264515e-06 2.800492e+00 3.244198e+00 2066 5.264711e-06 2.798046e+00 3.241838e+00 2067 5.265101e-06 2.793150e+00 3.237116e+00 2068 5.265199e-06 2.791926e+00 3.235935e+00 2069 5.265394e-06 2.789478e+00 3.233572e+00 2070 5.265785e-06 2.784579e+00 3.228844e+00 2071 5.265883e-06 2.783354e+00 3.227662e+00 2072 5.266078e-06 2.780904e+00 3.225296e+00 2073 5.266469e-06 2.776001e+00 3.220562e+00 2074 5.266566e-06 2.774775e+00 3.219378e+00 2075 5.266762e-06 2.772323e+00 3.217010e+00 2076 5.267152e-06 2.767417e+00 3.212271e+00 2077 5.267250e-06 2.766190e+00 3.211085e+00 2078 5.267445e-06 2.763736e+00 3.208714e+00 2079 5.267836e-06 2.758827e+00 3.203969e+00 2080 5.267933e-06 2.757599e+00 3.202782e+00 2081 5.268129e-06 2.755143e+00 3.200408e+00 2082 5.268519e-06 2.750230e+00 3.195658e+00 2083 5.268617e-06 2.749001e+00 3.194470e+00 2084 5.268812e-06 2.746544e+00 3.192093e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 2085 5.269203e-06 2.741626e+00 3.187337e+00 2086 5.269301e-06 2.740397e+00 3.186147e+00 2087 5.269496e-06 2.737938e+00 3.183767e+00 2088 5.269887e-06 2.733017e+00 3.179005e+00 2089 5.269984e-06 2.731787e+00 3.177814e+00 2090 5.270180e-06 2.729326e+00 3.175432e+00 2091 5.270570e-06 2.724401e+00 3.170665e+00 2092 5.270668e-06 2.723170e+00 3.169472e+00 2093 5.270863e-06 2.720707e+00 3.167087e+00 2094 5.271254e-06 2.715779e+00 3.162314e+00 2095 5.271351e-06 2.714547e+00 3.161121e+00 2096 5.271547e-06 2.712083e+00 3.158733e+00 2097 5.271937e-06 2.707151e+00 3.153954e+00 2098 5.272035e-06 2.705918e+00 3.152759e+00 2099 5.272230e-06 2.703452e+00 3.150369e+00 2100 5.272621e-06 2.698517e+00 3.145585e+00 2101 5.272719e-06 2.697283e+00 3.144388e+00 2102 5.272914e-06 2.694815e+00 3.141995e+00 2103 5.273305e-06 2.689877e+00 3.137206e+00 2104 5.273402e-06 2.688642e+00 3.136008e+00 2105 5.273598e-06 2.686172e+00 3.133612e+00 2106 5.273988e-06 2.681231e+00 3.128817e+00 2107 5.274086e-06 2.679995e+00 3.127618e+00 2108 5.274281e-06 2.677523e+00 3.125219e+00 2109 5.274672e-06 2.672578e+00 3.120420e+00 2110 5.274769e-06 2.671342e+00 3.119219e+00 2111 5.274965e-06 2.668868e+00 3.116818e+00 2112 5.275355e-06 2.663920e+00 3.112012e+00 2113 5.275453e-06 2.662683e+00 3.110811e+00 2114 5.275648e-06 2.660208e+00 3.108406e+00 2115 5.276039e-06 2.655256e+00 3.103596e+00 2116 5.276137e-06 2.654018e+00 3.102393e+00 2117 5.276332e-06 2.651541e+00 3.099986e+00 2118 5.276723e-06 2.646586e+00 3.095170e+00 2119 5.276820e-06 2.645347e+00 3.093966e+00 2120 5.277015e-06 2.642869e+00 3.091557e+00 2121 5.277406e-06 2.637910e+00 3.086736e+00 2122 5.277504e-06 2.636670e+00 3.085530e+00 2123 5.277699e-06 2.634190e+00 3.083118e+00 2124 5.278090e-06 2.629228e+00 3.078292e+00 2125 5.278187e-06 2.627988e+00 3.077085e+00 2126 5.278383e-06 2.625506e+00 3.074670e+00 2127 5.278773e-06 2.620541e+00 3.069839e+00 2128 5.278871e-06 2.619300e+00 3.068630e+00 2129 5.279066e-06 2.616816e+00 3.066213e+00 2130 5.279457e-06 2.611848e+00 3.061377e+00 2131 5.279555e-06 2.610606e+00 3.060167e+00 2132 5.279750e-06 2.608121e+00 3.057748e+00 2133 5.280140e-06 2.603149e+00 3.052906e+00 2134 5.280238e-06 2.601906e+00 3.051695e+00 2135 5.280433e-06 2.599420e+00 3.049273e+00 2136 5.280824e-06 2.594445e+00 3.044426e+00 2137 5.280922e-06 2.593201e+00 3.043214e+00 2138 5.281117e-06 2.590713e+00 3.040789e+00 2139 5.281508e-06 2.585736e+00 3.035938e+00 2140 5.281605e-06 2.584491e+00 3.034724e+00 2141 5.281801e-06 2.582001e+00 3.032297e+00 2142 5.282191e-06 2.577020e+00 3.027440e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 2143 5.282289e-06 2.575774e+00 3.026226e+00 2144 5.282484e-06 2.573283e+00 3.023796e+00 2145 5.282875e-06 2.568299e+00 3.018934e+00 2146 5.282973e-06 2.567052e+00 3.017718e+00 2147 5.283168e-06 2.564559e+00 3.015286e+00 2148 5.283558e-06 2.559572e+00 3.010419e+00 2149 5.283656e-06 2.558325e+00 3.009202e+00 2150 5.283851e-06 2.555831e+00 3.006767e+00 2151 5.284242e-06 2.550840e+00 3.001896e+00 2152 5.284340e-06 2.549592e+00 3.000677e+00 2153 5.284535e-06 2.547096e+00 2.998240e+00 2154 5.284926e-06 2.542103e+00 2.993364e+00 2155 5.285023e-06 2.540854e+00 2.992144e+00 2156 5.285219e-06 2.538357e+00 2.989705e+00 2157 5.285609e-06 2.533360e+00 2.984823e+00 2158 5.285707e-06 2.532111e+00 2.983603e+00 2159 5.285902e-06 2.529612e+00 2.981160e+00 2160 5.286293e-06 2.524612e+00 2.976274e+00 2161 5.286390e-06 2.523362e+00 2.975052e+00 2162 5.286586e-06 2.520862e+00 2.972608e+00 2163 5.286976e-06 2.515859e+00 2.967717e+00 2164 5.287074e-06 2.514608e+00 2.966494e+00 2165 5.287269e-06 2.512106e+00 2.964047e+00 2166 5.287660e-06 2.507100e+00 2.959151e+00 2167 5.287758e-06 2.505849e+00 2.957927e+00 2168 5.287953e-06 2.503345e+00 2.955478e+00 2169 5.288344e-06 2.498337e+00 2.950577e+00 2170 5.288441e-06 2.497084e+00 2.949351e+00 2171 5.288637e-06 2.494579e+00 2.946900e+00 2172 5.289027e-06 2.489568e+00 2.941995e+00 2173 5.289125e-06 2.488315e+00 2.940768e+00 2174 5.289320e-06 2.485808e+00 2.938314e+00 2175 5.289711e-06 2.480794e+00 2.933404e+00 2176 5.289808e-06 2.479540e+00 2.932176e+00 2177 5.290004e-06 2.477032e+00 2.929720e+00 2178 5.290394e-06 2.472014e+00 2.924805e+00 2179 5.290492e-06 2.470760e+00 2.923576e+00 2180 5.290687e-06 2.468251e+00 2.921118e+00 2181 5.291078e-06 2.463230e+00 2.916199e+00 2182 5.291176e-06 2.461975e+00 2.914968e+00 2183 5.291371e-06 2.459464e+00 2.912507e+00 2184 5.291762e-06 2.454441e+00 2.907584e+00 2185 5.291859e-06 2.453185e+00 2.906352e+00 2186 5.292055e-06 2.450673e+00 2.903889e+00 2187 5.292445e-06 2.445647e+00 2.898961e+00 2188 5.292543e-06 2.444390e+00 2.897728e+00 2189 5.292738e-06 2.441876e+00 2.895263e+00 2190 5.293129e-06 2.436848e+00 2.890330e+00 2191 5.293226e-06 2.435590e+00 2.889096e+00 2192 5.293422e-06 2.433075e+00 2.886628e+00 2193 5.293812e-06 2.428043e+00 2.881691e+00 2194 5.293910e-06 2.426785e+00 2.880456e+00 2195 5.294105e-06 2.424269e+00 2.877986e+00 2196 5.294496e-06 2.419234e+00 2.873044e+00 2197 5.294594e-06 2.417976e+00 2.871808e+00 2198 5.294789e-06 2.415458e+00 2.869336e+00 2199 5.295180e-06 2.410420e+00 2.864390e+00 2200 5.295277e-06 2.409161e+00 2.863153e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 2201 5.295473e-06 2.406642e+00 2.860678e+00 2202 5.295863e-06 2.401602e+00 2.855728e+00 2203 5.295961e-06 2.400342e+00 2.854490e+00 2204 5.296156e-06 2.397821e+00 2.852013e+00 2205 5.296547e-06 2.392778e+00 2.847058e+00 2206 5.296644e-06 2.391517e+00 2.845819e+00 2207 5.296840e-06 2.388995e+00 2.843340e+00 2208 5.297230e-06 2.383950e+00 2.838380e+00 2209 5.297328e-06 2.382688e+00 2.837140e+00 2210 5.297523e-06 2.380165e+00 2.834659e+00 2211 5.297914e-06 2.375117e+00 2.829695e+00 2212 5.298695e-06 2.365013e+00 2.819760e+00 2213 5.298890e-06 2.362488e+00 2.817274e+00 2214 5.299281e-06 2.357436e+00 2.812302e+00 2215 5.299379e-06 2.356173e+00 2.811058e+00 2216 5.299574e-06 2.353646e+00 2.808571e+00 2217 5.299965e-06 2.348590e+00 2.803594e+00 2218 5.300746e-06 2.338471e+00 2.793633e+00 2219 5.300941e-06 2.335942e+00 2.791141e+00 2220 5.301332e-06 2.330882e+00 2.786156e+00 2221 5.301430e-06 2.329616e+00 2.784910e+00 2222 5.301625e-06 2.327085e+00 2.782416e+00 2223 5.302015e-06 2.322022e+00 2.777426e+00 2224 5.302797e-06 2.311887e+00 2.767441e+00 2225 5.302992e-06 2.309354e+00 2.764942e+00 2226 5.303383e-06 2.304287e+00 2.759945e+00 2227 5.303480e-06 2.303019e+00 2.758695e+00 2228 5.303676e-06 2.300485e+00 2.756195e+00 2229 5.304066e-06 2.295414e+00 2.751193e+00 2230 5.304848e-06 2.285264e+00 2.741183e+00 2231 5.305043e-06 2.282727e+00 2.738679e+00 2232 5.305433e-06 2.277652e+00 2.733669e+00 2233 5.305531e-06 2.276383e+00 2.732416e+00 2234 5.305726e-06 2.273844e+00 2.729910e+00 2235 5.306117e-06 2.268766e+00 2.724896e+00 2236 5.306898e-06 2.258602e+00 2.714862e+00 2237 5.307094e-06 2.256061e+00 2.712351e+00 2238 5.307484e-06 2.250978e+00 2.707330e+00 2239 5.307582e-06 2.249707e+00 2.706074e+00 2240 5.307777e-06 2.247165e+00 2.703562e+00 2241 5.308168e-06 2.242079e+00 2.698536e+00 2242 5.308949e-06 2.231901e+00 2.688478e+00 2243 5.309144e-06 2.229357e+00 2.685962e+00 2244 5.309535e-06 2.224267e+00 2.680928e+00 2245 5.310316e-06 2.214078e+00 2.670855e+00 2246 5.310512e-06 2.211532e+00 2.668335e+00 2247 5.310902e-06 2.206438e+00 2.663293e+00 2248 5.311000e-06 2.205164e+00 2.662033e+00 2249 5.311195e-06 2.202616e+00 2.659511e+00 2250 5.311586e-06 2.197518e+00 2.654466e+00 2251 5.312367e-06 2.187317e+00 2.644370e+00 2252 5.312562e-06 2.184767e+00 2.641844e+00 2253 5.312953e-06 2.179665e+00 2.636791e+00 2254 5.313734e-06 2.169454e+00 2.626680e+00 2255 5.313930e-06 2.166902e+00 2.624151e+00 2256 5.314320e-06 2.161796e+00 2.619091e+00 2257 5.315101e-06 2.151575e+00 2.608964e+00 2258 5.315297e-06 2.149022e+00 2.606431e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 2259 5.315687e-06 2.143912e+00 2.601364e+00 2260 5.316469e-06 2.133682e+00 2.591223e+00 2261 5.316664e-06 2.131126e+00 2.588687e+00 2262 5.317055e-06 2.126012e+00 2.583612e+00 2263 5.317836e-06 2.115774e+00 2.573457e+00 2264 5.318031e-06 2.113216e+00 2.570917e+00 2265 5.318422e-06 2.108097e+00 2.565835e+00 2266 5.319203e-06 2.097851e+00 2.555666e+00 2267 5.319398e-06 2.095290e+00 2.553122e+00 2268 5.319789e-06 2.090168e+00 2.548034e+00 2269 5.320570e-06 2.079913e+00 2.537851e+00 2270 5.320765e-06 2.077350e+00 2.535303e+00 2271 5.321156e-06 2.072224e+00 2.530208e+00 2272 5.321937e-06 2.061961e+00 2.520011e+00 2273 5.322133e-06 2.059396e+00 2.517460e+00 2274 5.322523e-06 2.054265e+00 2.512358e+00 2275 5.323305e-06 2.043994e+00 2.502147e+00 2276 5.323500e-06 2.041428e+00 2.499593e+00 2277 5.323890e-06 2.036292e+00 2.494484e+00 2278 5.324672e-06 2.026014e+00 2.484260e+00 2279 5.324867e-06 2.023445e+00 2.481703e+00 2280 5.325258e-06 2.018306e+00 2.476587e+00 2281 5.326039e-06 2.008020e+00 2.466350e+00 2282 5.326234e-06 2.005449e+00 2.463790e+00 2283 5.326625e-06 2.000305e+00 2.458668e+00 2284 5.327406e-06 1.990012e+00 2.448418e+00 2285 5.327601e-06 1.987439e+00 2.445854e+00 2286 5.327992e-06 1.982292e+00 2.440725e+00 2287 5.328773e-06 1.971990e+00 2.430463e+00 2288 5.328969e-06 1.969416e+00 2.427896e+00 2289 5.329359e-06 1.964265e+00 2.422761e+00 2290 5.330140e-06 1.953956e+00 2.412485e+00 2291 5.330336e-06 1.951379e+00 2.409915e+00 2292 5.330726e-06 1.946225e+00 2.404774e+00 2293 5.331508e-06 1.935909e+00 2.394486e+00 2294 5.331703e-06 1.933331e+00 2.391913e+00 2295 5.332094e-06 1.928172e+00 2.386766e+00 2296 5.332875e-06 1.917850e+00 2.376466e+00 2297 5.333070e-06 1.915269e+00 2.373889e+00 2298 5.333461e-06 1.910107e+00 2.368736e+00 2299 5.334242e-06 1.899778e+00 2.358424e+00 2300 5.334437e-06 1.897195e+00 2.355845e+00 2301 5.334828e-06 1.892030e+00 2.350686e+00 2302 5.335609e-06 1.881694e+00 2.340362e+00 2303 5.335805e-06 1.879110e+00 2.337780e+00 2304 5.336195e-06 1.873941e+00 2.332614e+00 2305 5.336976e-06 1.863598e+00 2.322279e+00 2306 5.337172e-06 1.861012e+00 2.319694e+00 2307 5.337562e-06 1.855840e+00 2.314523e+00 2308 5.338344e-06 1.845490e+00 2.304176e+00 2309 5.338539e-06 1.842903e+00 2.301588e+00 2310 5.338930e-06 1.837727e+00 2.296411e+00 2311 5.339711e-06 1.827372e+00 2.286053e+00 2312 5.339906e-06 1.824783e+00 2.283463e+00 2313 5.340297e-06 1.819604e+00 2.278280e+00 2314 5.341078e-06 1.809242e+00 2.267911e+00 2315 5.341273e-06 1.806651e+00 2.265318e+00 2316 5.341664e-06 1.801469e+00 2.260130e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 2317 5.342445e-06 1.791101e+00 2.249750e+00 2318 5.342640e-06 1.788508e+00 2.247153e+00 2319 5.343031e-06 1.783323e+00 2.241960e+00 2320 5.343812e-06 1.772949e+00 2.231569e+00 2321 5.344008e-06 1.770355e+00 2.228970e+00 2322 5.344398e-06 1.765167e+00 2.223772e+00 2323 5.345180e-06 1.754787e+00 2.213371e+00 2324 5.345375e-06 1.752192e+00 2.210769e+00 2325 5.345765e-06 1.747000e+00 2.205565e+00 2326 5.346547e-06 1.736614e+00 2.195153e+00 2327 5.346742e-06 1.734018e+00 2.192549e+00 2328 5.347133e-06 1.728824e+00 2.187340e+00 2329 5.347914e-06 1.718432e+00 2.176918e+00 2330 5.348109e-06 1.715834e+00 2.174312e+00 2331 5.348500e-06 1.710637e+00 2.169098e+00 2332 5.349281e-06 1.700239e+00 2.158666e+00 2333 5.349476e-06 1.697640e+00 2.156057e+00 2334 5.349867e-06 1.692440e+00 2.150838e+00 2335 5.350648e-06 1.682037e+00 2.140396e+00 2336 5.350844e-06 1.679436e+00 2.137784e+00 2337 5.351234e-06 1.674234e+00 2.132560e+00 2338 5.352015e-06 1.663826e+00 2.122109e+00 2339 5.352211e-06 1.661223e+00 2.119495e+00 2340 5.352601e-06 1.656018e+00 2.114266e+00 2341 5.353383e-06 1.645605e+00 2.103805e+00 2342 5.353578e-06 1.643001e+00 2.101188e+00 2343 5.353969e-06 1.637794e+00 2.095955e+00 2344 5.354750e-06 1.627375e+00 2.085485e+00 2345 5.354945e-06 1.624770e+00 2.082866e+00 2346 5.355336e-06 1.619560e+00 2.077628e+00 2347 5.356117e-06 1.609136e+00 2.067148e+00 2348 5.356312e-06 1.606530e+00 2.064527e+00 2349 5.356703e-06 1.601317e+00 2.059285e+00 2350 5.357484e-06 1.590889e+00 2.048796e+00 2351 5.357680e-06 1.588282e+00 2.046173e+00 2352 5.358070e-06 1.583066e+00 2.040926e+00 2353 5.358851e-06 1.572633e+00 2.030428e+00 2354 5.359047e-06 1.570025e+00 2.027802e+00 2355 5.359437e-06 1.564807e+00 2.022551e+00 2356 5.360219e-06 1.554369e+00 2.012045e+00 2357 5.360414e-06 1.551759e+00 2.009417e+00 2358 5.360805e-06 1.546539e+00 2.004161e+00 2359 5.361586e-06 1.536097e+00 1.993646e+00 2360 5.363148e-06 1.515201e+00 1.972602e+00 2361 5.363539e-06 1.509978e+00 1.967337e+00 2362 5.364320e-06 1.499529e+00 1.956806e+00 2363 5.364515e-06 1.496916e+00 1.954172e+00 2364 5.364906e-06 1.491689e+00 1.948904e+00 2365 5.365687e-06 1.481234e+00 1.938364e+00 2366 5.367250e-06 1.460312e+00 1.917271e+00 2367 5.367640e-06 1.455083e+00 1.911994e+00 2368 5.368422e-06 1.444621e+00 1.901439e+00 2369 5.368617e-06 1.442005e+00 1.898799e+00 2370 5.369008e-06 1.436772e+00 1.893519e+00 2371 5.369789e-06 1.426304e+00 1.882956e+00 2372 5.371351e-06 1.405360e+00 1.861817e+00 2373 5.371742e-06 1.400124e+00 1.856529e+00 2374 5.372523e-06 1.389650e+00 1.845952e+00 Index time v(20) v(66) -------------------------------------------------------------------------------- 2375 5.374086e-06 1.368689e+00 1.824783e+00 2376 5.374476e-06 1.363451e+00 1.819488e+00 2377 5.375258e-06 1.352970e+00 1.808896e+00 2378 5.376820e-06 1.331995e+00 1.787700e+00 2379 5.377211e-06 1.326753e+00 1.782399e+00 2380 5.377992e-06 1.316266e+00 1.771793e+00 2381 5.379555e-06 1.295277e+00 1.750570e+00 2382 5.382680e-06 1.253287e+00 1.708081e+00 2383 5.383461e-06 1.242788e+00 1.697448e+00 2384 5.385023e-06 1.221779e+00 1.676175e+00 2385 5.385414e-06 1.216526e+00 1.670854e+00 2386 5.386195e-06 1.206019e+00 1.660211e+00 2387 5.387758e-06 1.184997e+00 1.638915e+00 2388 5.388148e-06 1.179742e+00 1.633589e+00 2389 5.388930e-06 1.169229e+00 1.622934e+00 2390 5.390492e-06 1.148197e+00 1.601615e+00 2391 5.390883e-06 1.142939e+00 1.596283e+00 2392 5.391664e-06 1.132422e+00 1.585618e+00 2393 5.393226e-06 1.111381e+00 1.564278e+00 2394 5.396351e-06 1.069283e+00 1.521563e+00 2395 5.397133e-06 1.058759e+00 1.510876e+00 2396 5.398695e-06 1.037703e+00 1.489497e+00 2397 5.399086e-06 1.032439e+00 1.484150e+00 2398 5.399867e-06 1.021908e+00 1.473455e+00 2399 5.401430e-06 1.000844e+00 1.452058e+00 2400 5.404555e-06 9.587020e-01 1.409233e+00 2401 5.405336e-06 9.481667e-01 1.398519e+00 2402 5.406898e-06 9.270908e-01 1.377088e+00 2403 5.410023e-06 8.849251e-01 1.334200e+00 2404 5.416273e-06 8.005723e-01 1.248328e+00 2405 5.417836e-06 7.794783e-01 1.226837e+00 2406 5.420961e-06 7.372845e-01 1.183844e+00 2407 5.427211e-06 6.533200e-01 1.097825e+00 2408 5.439711e-06 4.856913e-01 9.258153e-01 2409 5.464711e-06 1.730899e-01 5.885845e-01 2410 5.510043e-06 -1.651308e-01 9.617715e-02 2411 5.565613e-06 -1.825486e-01 -1.603292e-01 2412 5.617687e-06 -3.367232e-02 -1.124220e-01 2413 5.648941e-06 4.390407e-02 -3.316333e-02 2414 5.680709e-06 8.863201e-02 3.446334e-02 2415 5.712167e-06 9.767176e-02 7.406640e-02 2416 5.762765e-06 7.592355e-02 8.552435e-02 2417 5.802174e-06 5.117343e-02 6.840534e-02 2418 5.845254e-06 3.497134e-02 4.757826e-02 2419 5.896545e-06 3.175880e-02 3.467337e-02 2420 5.954991e-06 3.769734e-02 3.472787e-02 2421 6.020007e-06 4.378044e-02 4.089681e-02 2422 6.097434e-06 4.392141e-02 4.418515e-02 2423 6.189792e-06 4.178732e-02 4.258954e-02 2424 6.289792e-06 4.116458e-02 4.121168e-02 2425 6.389792e-06 4.230278e-02 4.185739e-02 2426 6.489792e-06 4.200495e-02 4.222412e-02 2427 6.589792e-06 4.205075e-02 4.198136e-02 2428 6.689792e-06 4.175786e-02 4.188603e-02 2429 6.789792e-06 4.215918e-02 4.197570e-02 2430 6.889792e-06 4.183139e-02 4.199993e-02 2431 6.989792e-06 4.211023e-02 4.196391e-02 2432 7.089792e-06 4.182133e-02 4.196622e-02 Index time v(20) v(66) -------------------------------------------------------------------------------- 2433 7.189792e-06 4.211691e-02 4.196980e-02 2434 7.289792e-06 4.183660e-02 4.197840e-02 2435 7.389792e-06 4.209942e-02 4.196554e-02 2436 7.489792e-06 4.184869e-02 4.197607e-02 2437 7.589792e-06 4.208784e-02 4.196641e-02 2438 7.689792e-06 4.186288e-02 4.197748e-02 2439 7.789792e-06 4.207282e-02 4.196557e-02 2440 7.889792e-06 4.187751e-02 4.197743e-02 2441 7.989792e-06 4.205845e-02 4.196573e-02 2442 8.089792e-06 4.189191e-02 4.197742e-02 2443 8.189792e-06 4.204422e-02 4.196585e-02 2444 8.289792e-06 4.190571e-02 4.197712e-02 2445 8.389792e-06 4.203094e-02 4.196623e-02 2446 8.489792e-06 4.191844e-02 4.197669e-02 2447 8.589792e-06 4.201885e-02 4.196673e-02 2448 8.689792e-06 4.192984e-02 4.197614e-02 2449 8.789792e-06 4.200821e-02 4.196733e-02 2450 8.889792e-06 4.193971e-02 4.197552e-02 2451 8.989792e-06 4.199917e-02 4.196799e-02 2452 9.089792e-06 4.194796e-02 4.197488e-02 2453 9.189792e-06 4.199176e-02 4.196866e-02 2454 9.289792e-06 4.195458e-02 4.197423e-02 2455 9.389792e-06 4.198596e-02 4.196932e-02 2456 9.489792e-06 4.195963e-02 4.197361e-02 2457 9.589792e-06 4.198167e-02 4.196994e-02 2458 9.689792e-06 4.196323e-02 4.197303e-02 2459 9.789792e-06 4.197877e-02 4.197050e-02 2460 9.889792e-06 4.196552e-02 4.197252e-02 2461 9.989792e-06 4.197707e-02 4.197099e-02 2462 1.000000e-05 4.196484e-02 4.197098e-02 -------------------------------------------------------------------------- mosamp - mos amplifier - transient Legend: + = v(20) * = v(66) -------------------------------------------------------------------------- time v(20) -1.00e+00 1.00e+00 3.00e+00 5.00e+00 7.00e+00 ----------------------|-----------|-----------|-----------|-----------| 0.000e+00 4.197e-02 . X . . . . 1.000e-07 6.818e-01 . * + . . . . 2.000e-07 1.675e+00 . . * + . . . 3.000e-07 2.619e+00 . . * + . . . 4.000e-07 3.391e+00 . . * + . . 5.000e-07 4.040e+00 . . . * + . . 6.000e-07 4.593e+00 . . . *+ . . 7.000e-07 5.026e+00 . . . *+ . 8.000e-07 5.447e+00 . . . .*+ . 9.000e-07 5.820e+00 . . . . *+ . 1.000e-06 6.146e+00 . . . . *+ . 1.100e-06 6.436e+00 . . . . *+ . 1.200e-06 6.697e+00 . . . . *+ . 1.300e-06 6.802e+00 . . . . X . 1.400e-06 6.225e+00 . . . . + * . 1.500e-06 5.203e+00 . . . .+ * . 1.600e-06 4.858e+00 . . . X. . 1.700e-06 4.934e+00 . . . X. . 1.800e-06 5.021e+00 . . . *+ . 1.900e-06 5.050e+00 . . . X . 2.000e-06 5.040e+00 . . . X . 2.100e-06 5.027e+00 . . . X . 2.200e-06 5.024e+00 . . . X . 2.300e-06 5.026e+00 . . . X . 2.400e-06 5.028e+00 . . . X . 2.500e-06 5.028e+00 . . . X . 2.600e-06 5.028e+00 . . . X . 2.700e-06 5.028e+00 . . . X . 2.800e-06 5.027e+00 . . . X . 2.900e-06 5.028e+00 . . . X . 3.000e-06 5.028e+00 . . . X . 3.100e-06 5.028e+00 . . . X . 3.200e-06 5.028e+00 . . . X . 3.300e-06 5.028e+00 . . . X . 3.400e-06 5.028e+00 . . . X . 3.500e-06 5.028e+00 . . . X . 3.600e-06 5.028e+00 . . . X . 3.700e-06 5.028e+00 . . . X . 3.800e-06 5.028e+00 . . . X . 3.900e-06 5.028e+00 . . . X . 4.000e-06 5.027e+00 . . . X . 4.100e-06 5.028e+00 . . . X . 4.200e-06 5.027e+00 . . . X . 4.300e-06 5.028e+00 . . . X . 4.400e-06 5.027e+00 . . . X . 4.500e-06 5.028e+00 . . . X . 4.600e-06 5.027e+00 . . . X . 4.700e-06 5.028e+00 . . . X . 4.800e-06 5.027e+00 . . . X . 4.900e-06 5.028e+00 . . . X . 5.000e-06 5.027e+00 . . . X . 5.100e-06 4.546e+00 . . . +* . . ----------------------|-----------|-----------|-----------|-----------| time v(20) -1.00e+00 1.00e+00 3.00e+00 5.00e+00 7.00e+00 time v(20) -1.00e+00 1.00e+00 3.00e+00 5.00e+00 7.00e+00 ----------------------|-----------|-----------|-----------|-----------| 5.200e-06 3.573e+00 . . . + * . . 5.300e-06 2.348e+00 . . + * . . . 5.400e-06 1.020e+00 . + * . . . 5.500e-06 -9.020e-02 . + * . . . . 5.600e-06 -8.424e-02 . X . . . . 5.700e-06 9.418e-02 . X . . . . 5.800e-06 5.254e-02 . X . . . . 5.900e-06 3.211e-02 . X . . . . 6.000e-06 4.191e-02 . X . . . . 6.100e-06 4.386e-02 . X . . . . 6.200e-06 4.172e-02 . X . . . . 6.300e-06 4.128e-02 . X . . . . 6.400e-06 4.227e-02 . X . . . . 6.500e-06 4.201e-02 . X . . . . 6.600e-06 4.202e-02 . X . . . . 6.700e-06 4.180e-02 . X . . . . 6.800e-06 4.213e-02 . X . . . . 6.900e-06 4.186e-02 . X . . . . 7.000e-06 4.208e-02 . X . . . . 7.100e-06 4.185e-02 . X . . . . 7.200e-06 4.209e-02 . X . . . . 7.300e-06 4.186e-02 . X . . . . 7.400e-06 4.207e-02 . X . . . . 7.500e-06 4.187e-02 . X . . . . 7.600e-06 4.206e-02 . X . . . . 7.700e-06 4.188e-02 . X . . . . 7.800e-06 4.205e-02 . X . . . . 7.900e-06 4.190e-02 . X . . . . 8.000e-06 4.204e-02 . X . . . . 8.100e-06 4.191e-02 . X . . . . 8.200e-06 4.203e-02 . X . . . . 8.300e-06 4.192e-02 . X . . . . 8.400e-06 4.202e-02 . X . . . . 8.500e-06 4.193e-02 . X . . . . 8.600e-06 4.201e-02 . X . . . . 8.700e-06 4.194e-02 . X . . . . 8.800e-06 4.200e-02 . X . . . . 8.900e-06 4.195e-02 . X . . . . 9.000e-06 4.199e-02 . X . . . . 9.100e-06 4.195e-02 . X . . . . 9.200e-06 4.199e-02 . X . . . . 9.300e-06 4.196e-02 . X . . . . 9.400e-06 4.198e-02 . X . . . . 9.500e-06 4.196e-02 . X . . . . 9.600e-06 4.198e-02 . X . . . . 9.700e-06 4.196e-02 . X . . . . 9.800e-06 4.198e-02 . X . . . . 9.900e-06 4.197e-02 . X . . . . 1.000e-05 4.196e-02 . X . . . . ----------------------|-----------|-----------|-----------|-----------| time v(20) -1.00e+00 1.00e+00 3.00e+00 5.00e+00 7.00e+00 tmpk8ny_4pz/tests/general/Makefile.am0000644000175000017500000000056113546075722017775 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = \ mosamp.cir \ mosmem.cir \ rc.cir \ rca3040.cir \ rtlinv.cir \ schmitt.cir \ diffpair.cir \ fourbitadder.cir TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/general/schmitt.cir0000644000175000017500000000114613546075722020113 0ustar carstencarstenschmitt ckt - ecl compatible schmitt trigger .width in=72 .opt list node lvlcod=2 noacct * The original line is below *.opt acct list node lvlcod=2 .tran 10ns 1000ns vin 1 0 pulse(-1.6 -1.2 10ns 400ns 400ns 100ns 10000ns) vee 8 0 -5 rin 1 2 50 rc1 0 3 50 r1 3 5 185 r2 5 8 760 rc2 0 6 100 re 4 8 260 rth1 7 8 125 rth2 7 0 85 cload 7 0 5pf q1 3 2 4 qstd off q2 6 5 4 qstd q3 0 6 7 qstd q4 0 6 7 qstd .model qstd npn(level=1 is=1.0e-16 bf=50 br=0.1 rb=50 rc=10 tf=0.12ns tr=5ns + cje=0.4pf pe=0.8 me=0.4 cjc=0.5pf pc=0.8 mc=0.333 ccs=1pf va=50) .print tran v(1) v(3) v(5) v(6) .plot tran v(3) v(5) v(6) v(1) .end tmpk8ny_4pz/tests/general/mosamp.cir0000644000175000017500000000266013546075722017736 0ustar carstencarstenmosamp - mos amplifier - transient * The original options line (removed acct) * .options acct abstol=10n vntol=10n .options abstol=10n vntol=10n noacct .tran 0.1us 10us m1 15 15 1 32 m w=88.9u l=25.4u m2 1 1 2 32 m w=12.7u l=266.7u m3 2 2 30 32 m w=88.9u l=25.4u m4 15 5 4 32 m w=12.7u l=106.7u m5 4 4 30 32 m w=88.9u l=12.7u m6 15 15 5 32 m w=44.5u l=25.4u m7 5 20 8 32 m w=482.6u l=12.7u m8 8 2 30 32 m w=88.9u l=25.4u m9 15 15 6 32 m w=44.5u l=25.4u m10 6 21 8 32 m w=482.6u l=12.7u m11 15 6 7 32 m w=12.7u l=106.7u m12 7 4 30 32 m w=88.9u l=12.7u m13 15 10 9 32 m w=139.7u l=12.7u m14 9 11 30 32 m w=139.7u l=12.7u m15 15 15 12 32 m w=12.7u l=207.8u m16 12 12 11 32 m w=54.1u l=12.7u m17 11 11 30 32 m w=54.1u l=12.7u m18 15 15 10 32 m w=12.7u l=45.2u m19 10 12 13 32 m w=270.5u l=12.7u m20 13 7 30 32 m w=270.5u l=12.7u m21 15 10 14 32 m w=254u l=12.7u m22 14 11 30 32 m w=241.3u l=12.7u m23 15 20 16 32 m w=19u l=38.1u m24 16 14 30 32 m w=406.4u l=12.7u m25 15 15 20 32 m w=38.1u l=42.7u m26 20 16 30 32 m w=381u l=25.4u m27 20 15 66 32 m w=22.9u l=7.6u cc 7 9 40pf cl 66 0 70pf vin 21 0 pulse(0 5 1ns 1ns 1ns 5us 10us) vccp 15 0 dc +15 vddn 30 0 dc -15 vb 32 0 dc -20 .model m nmos(nsub=2.2e15 uo=575 ucrit=49k uexp=0.1 tox=0.11u xj=2.95u + level=2 cgso=1.5n cgdo=1.5n cbd=4.5f cbs=4.5f ld=2.4485u nss=3.2e10 + kp=2e-5 phi=0.6 ) .print tran v(20) v(66) .plot tran v(20) v(66) .end tmpk8ny_4pz/tests/general/mosmem.out0000644000175000017500000002405713546075722017775 0ustar carstencarsten Circuit: mosmem - mos memory cell Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Initial Transient Solution -------------------------- Node Voltage ---- ------- 9 5 7 2 1 0 2 2 3 2.66862 4 0.177782 5 2.66851 6 0.135199 8 2.66891 vwb#branch 0 vw#branch 0 vs#branch 0 vdd#branch -2.72229e-05 mosmem - mos memory cell * the original line is below *.opt acct list node .tran 20ns 2us vdd 9 0 dc 5 vs 7 0 pulse(2 0 520ns 20ns 20ns 500ns 2000ns) vw 1 0 pulse(0 2 20ns 20ns 500ns 200ns 2000ns) vwb 2 0 pulse(2 0 20ns 20ns 20ns 2000ns 2000ns) m1 3 1 0 0 mod w=250u l=5u m2 4 2 0 0 mod w=250u l=5u m3 9 9 3 0 mod w=5u l=5u m4 9 9 4 0 mod w=5u l=5u m5 5 7 3 0 mod w=50u l=5u m6 6 7 4 0 mod w=50u l=5u m7 5 6 0 0 mod w=250u l=5u m8 6 5 0 0 mod w=250u l=5u m9 9 9 5 0 mod w=5u l=5u m10 9 9 6 0 mod w=5u l=5u m11 8 4 0 0 mod w=250u l=5u m12 9 9 8 0 mod w=5u l=5u .model mod nmos(vto=0.5 phi=0.7 kp=1.0e-6 gamma=1.83 lambda=0.115 + level=1 cgso=1u cgdo=1u cbd=50p cbs=50p) .opt list node .opt abstol=1u .end -------------------------------------------------------------------------- mosmem - mos memory cell Transient Analysis Sat Aug 27 16:14:56 2005 Legend: + = v(6) * = v(5) = = v(7) $ = v(1) % = v(2) -------------------------------------------------------------------------- time v(6) -1.00e+00 0.00e+00 1.00e+00 2.00e+00 3.00e+00 ----------------------|-----------|-----------|-----------|-----------| 0.000e+00 1.352e-01 . $+ . X * . 2.000e-08 1.352e-01 . $+ . X * . 4.000e-08 1.350e-01 . %.+ . X * . 6.000e-08 1.346e-01 . %+ . X * . 8.000e-08 1.341e-01 . %+ . X * . 1.000e-07 1.337e-01 . %+ . X * . 1.200e-07 1.333e-01 . %+ . X * . 1.400e-07 1.328e-01 . %+ . X * . 1.600e-07 1.324e-01 . %+ . X * . 1.800e-07 1.320e-01 . %+ . X * . 2.000e-07 1.316e-01 . %+ . X * . 2.200e-07 1.311e-01 . %+ . X * . 2.400e-07 1.307e-01 . %+ . X * . 2.600e-07 1.303e-01 . %+ . $= * . 2.800e-07 1.299e-01 . %+ . $ = * . 3.000e-07 1.295e-01 . %+ . $ = * . 3.200e-07 1.291e-01 . %+ . $ = * . 3.400e-07 1.287e-01 . %+ . $ = * . 3.600e-07 1.283e-01 . %+ . $ = * . 3.800e-07 1.279e-01 . %+ . $ = * . 4.000e-07 1.275e-01 . %+ . $ = * . 4.200e-07 1.271e-01 . %+ . $ = * . 4.400e-07 1.268e-01 . %+ . $ = * . 4.600e-07 1.264e-01 . %+ .$ = * . 4.800e-07 1.260e-01 . %+ $ = * . 5.000e-07 1.256e-01 . %+ $. = * . 5.200e-07 1.252e-01 . %+ $ . = * . 5.400e-07 -1.087e-01 . +=% $ . . * . 5.600e-07 -1.079e-01 . + X $ . . * . 5.800e-07 -1.071e-01 . + X $ . . * . 6.000e-07 -1.063e-01 . + X $ . . * . 6.200e-07 -1.056e-01 . + X $ . . * . 6.400e-07 -1.048e-01 . + X $ . . * . 6.600e-07 -1.040e-01 . + X $ . . * . 6.800e-07 -1.032e-01 . + X $ . . * . 7.000e-07 -1.024e-01 . + X$ . . * . 7.200e-07 -1.016e-01 . + X . . * . 7.400e-07 -1.009e-01 . + X . . * . 7.600e-07 -1.001e-01 . + X . . * . 7.800e-07 -9.933e-02 . + X . . * . 8.000e-07 -9.856e-02 . + X . . * . 8.200e-07 -9.779e-02 . + X . . * . 8.400e-07 -9.703e-02 . + X . . * . 8.600e-07 -9.627e-02 . + X . . * . 8.800e-07 -9.551e-02 . + X . . * . 9.000e-07 -9.475e-02 . + X . . * . 9.200e-07 -9.399e-02 . + X . . * . 9.400e-07 -9.324e-02 . + X . . * . 9.600e-07 -9.249e-02 . + X . . * . 9.800e-07 -9.174e-02 . + X . . * . 1.000e-06 -9.100e-02 . + X . . * . 1.020e-06 -9.025e-02 . + X . . * . ----------------------|-----------|-----------|-----------|-----------| time v(6) -1.00e+00 0.00e+00 1.00e+00 2.00e+00 3.00e+00 time v(6) -1.00e+00 0.00e+00 1.00e+00 2.00e+00 3.00e+00 ----------------------|-----------|-----------|-----------|-----------| 1.040e-06 -8.951e-02 . + X . . * . 1.060e-06 1.455e-01 . X+ . =. * . 1.080e-06 1.451e-01 . X+ . = * . 1.100e-06 1.447e-01 . X+ . = * . 1.120e-06 1.443e-01 . X+ . = * . 1.140e-06 1.439e-01 . X+ . = * . 1.160e-06 1.435e-01 . X+ . = * . 1.180e-06 1.431e-01 . X+ . = * . 1.200e-06 1.427e-01 . X+ . = * . 1.220e-06 1.423e-01 . X+ . = * . 1.240e-06 1.419e-01 . X+ . = * . 1.260e-06 1.415e-01 . X+ . = * . 1.280e-06 1.411e-01 . X+ . = * . 1.300e-06 1.407e-01 . X+ . = * . 1.320e-06 1.404e-01 . X+ . = * . 1.340e-06 1.400e-01 . X+ . = * . 1.360e-06 1.396e-01 . X+ . = * . 1.380e-06 1.392e-01 . X+ . = * . 1.400e-06 1.389e-01 . X+ . = * . 1.420e-06 1.385e-01 . X+ . = * . 1.440e-06 1.381e-01 . X+ . = * . 1.460e-06 1.378e-01 . X+ . = * . 1.480e-06 1.374e-01 . X+ . = * . 1.500e-06 1.370e-01 . X+ . = * . 1.520e-06 1.367e-01 . X+ . = * . 1.540e-06 1.363e-01 . X+ . = * . 1.560e-06 1.360e-01 . X+ . = * . 1.580e-06 1.356e-01 . X+ . = * . 1.600e-06 1.353e-01 . X+ . = * . 1.620e-06 1.349e-01 . X+ . = * . 1.640e-06 1.346e-01 . X+ . = * . 1.660e-06 1.343e-01 . X+ . = * . 1.680e-06 1.339e-01 . X+ . = * . 1.700e-06 1.336e-01 . X+ . = * . 1.720e-06 1.332e-01 . X+ . = * . 1.740e-06 1.329e-01 . X+ . = * . 1.760e-06 1.326e-01 . X+ . = * . 1.780e-06 1.323e-01 . X+ . = * . 1.800e-06 1.319e-01 . X+ . = * . 1.820e-06 1.316e-01 . X+ . = * . 1.840e-06 1.313e-01 . X+ . = * . 1.860e-06 1.310e-01 . X+ . = * . 1.880e-06 1.307e-01 . X+ . = * . 1.900e-06 1.304e-01 . X+ . = * . 1.920e-06 1.300e-01 . X+ . = * . 1.940e-06 1.297e-01 . X+ . = * . 1.960e-06 1.294e-01 . X+ . = * . 1.980e-06 1.291e-01 . X+ . = * . 2.000e-06 1.288e-01 . X+ . = * . ----------------------|-----------|-----------|-----------|-----------| time v(6) -1.00e+00 0.00e+00 1.00e+00 2.00e+00 3.00e+00 CPU time since last call: 0.027 seconds. Total CPU time: 0.027 seconds. Current dynamic memory usage = 135168, Dynamic memory limit = -491521. tmpk8ny_4pz/tests/general/rca3040.cir0000644000175000017500000000202713546075722017513 0ustar carstencarstenrca3040 ckt - rca 3040 wideband amplifier .options noacct .ac dec 10 1 10ghz .dc vin -0.25 0.25 0.005 .tran 2.0ns 200ns vin 1 0 sin(0 0.1 50meg 0.5ns) ac 1 vcc 2 0 15.0 vee 3 0 -15.0 rs1 30 1 1k rs2 31 0 1k r1 5 3 4.8k r2 6 3 4.8k r3 9 3 811 r4 8 3 2.17k r5 8 0 820 r6 2 14 1.32k r7 2 12 4.5k r8 2 15 1.32k r9 16 0 5.25k r10 17 0 5.25k q1 2 30 5 qnl q2 2 31 6 qnl q3 10 5 7 qnl q4 11 6 7 qnl q5 14 12 10 qnl q6 15 12 11 qnl q7 12 12 13 qnl q8 13 13 0 qnl q9 7 8 9 qnl q10 2 15 16 qnl q11 2 14 17 qnl .model qnl npn level=1 bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf + cjc=2pf va=50 .end tmpk8ny_4pz/tests/general/mosmem.cir0000644000175000017500000000145313546075722017736 0ustar carstencarstenmosmem - mos memory cell .width in=72 .opt abstol=1u .opt list node noacct * The original line is below *.opt acct list node .tran 20ns 2us vdd 9 0 dc 5 vs 7 0 pulse(2 0 520ns 20ns 20ns 500ns 2000ns) vw 1 0 pulse(0 2 20ns 20ns 500ns 200ns 2000ns) vwb 2 0 pulse(2 0 20ns 20ns 20ns 2000ns 2000ns) m1 3 1 0 0 mod w=250u l=5u m2 4 2 0 0 mod w=250u l=5u m3 9 9 3 0 mod w=5u l=5u m4 9 9 4 0 mod w=5u l=5u m5 5 7 3 0 mod w=50u l=5u m6 6 7 4 0 mod w=50u l=5u m7 5 6 0 0 mod w=250u l=5u m8 6 5 0 0 mod w=250u l=5u m9 9 9 5 0 mod w=5u l=5u m10 9 9 6 0 mod w=5u l=5u m11 8 4 0 0 mod w=250u l=5u m12 9 9 8 0 mod w=5u l=5u .model mod nmos(vto=0.5 phi=0.7 kp=1.0e-6 gamma=1.83 lambda=0.115 + level=1 cgso=1u cgdo=1u cbd=50p cbs=50p) .print dc v(5) v(6) .plot dc v(6) .plot tran v(6) v(5) v(7) v(1) v(2) .end tmpk8ny_4pz/tests/general/rtlinv.cir0000644000175000017500000000075113546075722017757 0ustar carstencarstenrtlinv ckt - cascaded rtl inverters .width in=72 .opt list node lvlcod=2 noacct * The original line is below *.opt acct list node lvlcod=2 .dc vin 0.0 2.5 0.025 .tran 2ns 200ns vcc 6 0 5 vin 1 0 pulse(0 5 2ns 2ns 2ns 80ns) rb1 1 2 10k rc1 6 3 1k q1 3 2 0 qnd rb2 3 4 10k q2 5 4 0 qnd rc2 6 5 1k .model qnd npn(level=1 bf=50 rb=70 rc=40 ccs=2pf tf=0.1ns tr=10ns cje=0.9pf + cjc=1.5pf pc=0.85 va=50) .print dc v(3) v(5) .plot dc v(3) .print tran v(3) v(5) .plot tran v(3) v(5) v(1) .end tmpk8ny_4pz/tests/general/rc.cir0000644000175000017500000000026013546075722017040 0ustar carstencarstenBasic RC circuit r 1 2 1.0 *l 1 2 1.0 c 2 0 1.0 vin 1 0 pulse (0 1) ac 1 .options noacct .tran 0.1 7.0 *.ac dec 10 .01 10 .plot tran v(2) i(vin) *.plot ac vdb(2) xlog .end tmpk8ny_4pz/tests/general/rca3040.out0000644000175000017500000000025113546075722017542 0ustar carstencarsten Circuit: rca3040 ckt - rca 3040 wideband amplifier Warning -- Level not specified on line "bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf cjc=2pf va 50" Using level 1. tmpk8ny_4pz/tests/general/fourbitadder.out0000644000175000017500000000001313546075722021134 0ustar carstencarstenTo be done tmpk8ny_4pz/tests/general/diffpair.cir0000644000175000017500000000105113546075722020217 0ustar carstencarstensimple differential pair - CM and DM dc sensitivity * Models: .model qnl npn(level=1 bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf cjc=2pf va=50) .model qnr npn(level=1 bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf cjc=2pf va=50) .options noacct * Circuit description: q1 4 2 6 qnr q2 5 3 6 qnl rs1 11 2 1k rs2 3 1 1k rc1 4 8 10k rc2 5 8 10k q3 7 7 9 qnl q4 6 7 9 qnr rbias 7 8 20k * Inputs/Supplies: vcm 1 0 dc 0 sin(0 0.1 5meg) ac 1 vdm 1 11 dc 0 sin(0 0.1 5meg) ac 1 vcc 8 0 12 vee 9 0 -12 * Analysys: .tf v(5) vcm .tf v(5) vdm .sens v(5,4) .end tmpk8ny_4pz/tests/general/rtlinv.out0000644000175000017500000007042213546075722020013 0ustar carstencarstenWarning: option lvlcod is obsolete. Warning: vin: no DC value, transient time 0 value used No. of Data Rows : 101 Circuit: rtlinv ckt - cascaded rtl inverters Warning -- Level not specified on line "(bf=50 rb=70 rc=40 ccs=2pf tf=0.1ns tr=10ns cje=0.9pf cjc=1.5pf pc=0.85 va=50)" Using level 1. Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Initial Transient Solution -------------------------- Node Voltage ---- ------- 6 5 1 0 2 4.62228e-08 3 4.62218 4 0.844034 5 0.266506 vin#branch 4.62228e-12 vcc#branch -0.00511131 No. of Data Rows : 126 rtlinv ckt - cascaded rtl inverters * the original line is below *.opt acct list node lvlcod=2 .dc vin 0.0 2.5 0.025 .tran 2ns 200ns vcc 6 0 5 vin 1 0 pulse(0 5 2ns 2ns 2ns 80ns) rb1 1 2 10k rc1 6 3 1k q1 3 2 0 qnd rb2 3 4 10k q2 5 4 0 qnd rc2 6 5 1k .model qnd npn(bf=50 rb=70 rc=40 ccs=2pf tf=0.1ns tr=10ns cje=0.9pf + cjc=1.5pf pc=0.85 va=50) .opt list node lvlcod=2 .end rtlinv ckt - cascaded rtl inverters -------------------------------------------------------------------------------- Index v-sweep v(3) v(5) -------------------------------------------------------------------------------- 0 0.000000e+00 4.622185e+00 2.665056e-01 1 2.500000e-02 4.622185e+00 2.665056e-01 2 5.000000e-02 4.622185e+00 2.665056e-01 3 7.500000e-02 4.622185e+00 2.665056e-01 4 1.000000e-01 4.622185e+00 2.665056e-01 5 1.250000e-01 4.622185e+00 2.665056e-01 6 1.500000e-01 4.622185e+00 2.665056e-01 7 1.750000e-01 4.622185e+00 2.665056e-01 8 2.000000e-01 4.622185e+00 2.665056e-01 9 2.250000e-01 4.622185e+00 2.665056e-01 10 2.500000e-01 4.622185e+00 2.665056e-01 11 2.750000e-01 4.622185e+00 2.665056e-01 12 3.000000e-01 4.622185e+00 2.665056e-01 13 3.250000e-01 4.622185e+00 2.665056e-01 14 3.500000e-01 4.622185e+00 2.665056e-01 15 3.750000e-01 4.622185e+00 2.665056e-01 16 4.000000e-01 4.622184e+00 2.665056e-01 17 4.250000e-01 4.622184e+00 2.665056e-01 18 4.500000e-01 4.622181e+00 2.665057e-01 19 4.750000e-01 4.622176e+00 2.665057e-01 20 5.000000e-01 4.622160e+00 2.665058e-01 21 5.250000e-01 4.622121e+00 2.665061e-01 22 5.500000e-01 4.622016e+00 2.665069e-01 23 5.750000e-01 4.621742e+00 2.665091e-01 24 6.000000e-01 4.621028e+00 2.665147e-01 25 6.250000e-01 4.619189e+00 2.665290e-01 26 6.500000e-01 4.614596e+00 2.665650e-01 27 6.750000e-01 4.603869e+00 2.666492e-01 28 7.000000e-01 4.581809e+00 2.668234e-01 29 7.250000e-01 4.543818e+00 2.671271e-01 30 7.500000e-01 4.489147e+00 2.675721e-01 31 7.750000e-01 4.420497e+00 2.681451e-01 32 8.000000e-01 4.341435e+00 2.688255e-01 33 8.250000e-01 4.255111e+00 2.695948e-01 34 8.500000e-01 4.163237e+00 2.704464e-01 35 8.750000e-01 4.067545e+00 2.713721e-01 36 9.000000e-01 3.969081e+00 2.723692e-01 37 9.250000e-01 3.868550e+00 2.734382e-01 38 9.500000e-01 3.766469e+00 2.745817e-01 39 9.750000e-01 3.663221e+00 2.758039e-01 40 1.000000e+00 3.559095e+00 2.771109e-01 41 1.025000e+00 3.454314e+00 2.785106e-01 42 1.050000e+00 3.349052e+00 2.800130e-01 43 1.075000e+00 3.243447e+00 2.816308e-01 44 1.100000e+00 3.137610e+00 2.833796e-01 45 1.125000e+00 3.031633e+00 2.852791e-01 46 1.150000e+00 2.925589e+00 2.873546e-01 47 1.175000e+00 2.819539e+00 2.896385e-01 48 1.200000e+00 2.713536e+00 2.921738e-01 49 1.225000e+00 2.607624e+00 2.950186e-01 50 1.250000e+00 2.501838e+00 2.982544e-01 51 1.275000e+00 2.396211e+00 3.019999e-01 52 1.300000e+00 2.290769e+00 3.064379e-01 53 1.325000e+00 2.185536e+00 3.118709e-01 54 1.350000e+00 2.080531e+00 3.188521e-01 Index v-sweep v(3) v(5) -------------------------------------------------------------------------------- 55 1.375000e+00 1.975771e+00 3.287169e-01 56 1.400000e+00 1.871269e+00 3.450139e-01 57 1.425000e+00 1.767026e+00 3.947595e-01 58 1.450000e+00 1.662887e+00 7.886695e-01 59 1.475000e+00 1.558984e+00 1.250481e+00 60 1.500000e+00 1.455350e+00 1.718053e+00 61 1.525000e+00 1.351982e+00 2.190635e+00 62 1.550000e+00 1.248869e+00 2.667395e+00 63 1.575000e+00 1.145987e+00 3.146700e+00 64 1.600000e+00 1.043291e+00 3.625495e+00 65 1.625000e+00 9.406769e-01 4.097337e+00 66 1.650000e+00 8.378776e-01 4.545878e+00 67 1.675000e+00 7.336355e-01 4.895323e+00 68 1.700000e+00 6.255228e-01 4.996673e+00 69 1.725000e+00 5.166017e-01 4.999972e+00 70 1.750000e+00 4.251561e-01 4.999999e+00 71 1.775000e+00 3.861180e-01 5.000000e+00 72 1.800000e+00 3.685797e-01 5.000000e+00 73 1.825000e+00 3.578053e-01 5.000000e+00 74 1.850000e+00 3.501463e-01 5.000000e+00 75 1.875000e+00 3.441649e-01 5.000000e+00 76 1.900000e+00 3.393782e-01 5.000000e+00 77 1.925000e+00 3.353469e-01 5.000000e+00 78 1.950000e+00 3.318632e-01 5.000000e+00 79 1.975000e+00 3.288026e-01 5.000000e+00 80 2.000000e+00 3.260757e-01 5.000000e+00 81 2.025000e+00 3.236181e-01 5.000000e+00 82 2.050000e+00 3.213824e-01 5.000000e+00 83 2.075000e+00 3.193325e-01 5.000000e+00 84 2.100000e+00 3.174404e-01 5.000000e+00 85 2.125000e+00 3.156839e-01 5.000000e+00 86 2.150000e+00 3.140453e-01 5.000000e+00 87 2.175000e+00 3.125100e-01 5.000000e+00 88 2.200000e+00 3.110661e-01 5.000000e+00 89 2.225000e+00 3.097034e-01 5.000000e+00 90 2.250000e+00 3.084134e-01 5.000000e+00 91 2.275000e+00 3.071890e-01 5.000000e+00 92 2.300000e+00 3.060240e-01 5.000000e+00 93 2.325000e+00 3.049130e-01 5.000000e+00 94 2.350000e+00 3.038513e-01 5.000000e+00 95 2.375000e+00 3.028348e-01 5.000000e+00 96 2.400000e+00 3.018599e-01 5.000000e+00 97 2.425000e+00 3.009235e-01 5.000000e+00 98 2.450000e+00 3.000227e-01 5.000000e+00 99 2.475000e+00 2.991549e-01 5.000000e+00 100 2.500000e+00 2.983179e-01 5.000000e+00 -------------------------------------------------------------------------- rtlinv ckt - cascaded rtl inverters Legend: + = v(3) -------------------------------------------------------------------------- v-sweep v(3) 0.00e+00 1.00e+00 2.00e+00 3.00e+00 4.00e+00 5.00e+00 ----------------------|---------|---------|---------|---------|---------| 0.000e+00 4.622e+00 . . . . . + . 2.500e-02 4.622e+00 . . . . . + . 5.000e-02 4.622e+00 . . . . . + . 7.500e-02 4.622e+00 . . . . . + . 1.000e-01 4.622e+00 . . . . . + . 1.250e-01 4.622e+00 . . . . . + . 1.500e-01 4.622e+00 . . . . . + . 1.750e-01 4.622e+00 . . . . . + . 2.000e-01 4.622e+00 . . . . . + . 2.250e-01 4.622e+00 . . . . . + . 2.500e-01 4.622e+00 . . . . . + . 2.750e-01 4.622e+00 . . . . . + . 3.000e-01 4.622e+00 . . . . . + . 3.250e-01 4.622e+00 . . . . . + . 3.500e-01 4.622e+00 . . . . . + . 3.750e-01 4.622e+00 . . . . . + . 4.000e-01 4.622e+00 . . . . . + . 4.250e-01 4.622e+00 . . . . . + . 4.500e-01 4.622e+00 . . . . . + . 4.750e-01 4.622e+00 . . . . . + . 5.000e-01 4.622e+00 . . . . . + . 5.250e-01 4.622e+00 . . . . . + . 5.500e-01 4.622e+00 . . . . . + . 5.750e-01 4.622e+00 . . . . . + . 6.000e-01 4.621e+00 . . . . . + . 6.250e-01 4.619e+00 . . . . . + . 6.500e-01 4.615e+00 . . . . . + . 6.750e-01 4.604e+00 . . . . . + . 7.000e-01 4.582e+00 . . . . . + . 7.250e-01 4.544e+00 . . . . . + . 7.500e-01 4.489e+00 . . . . . + . 7.750e-01 4.420e+00 . . . . . + . 8.000e-01 4.341e+00 . . . . . + . 8.250e-01 4.255e+00 . . . . . + . 8.500e-01 4.163e+00 . . . . .+ . 8.750e-01 4.068e+00 . . . . + . 9.000e-01 3.969e+00 . . . . +. . 9.250e-01 3.869e+00 . . . . + . . 9.500e-01 3.766e+00 . . . . + . . 9.750e-01 3.663e+00 . . . . + . . 1.000e-00 3.559e+00 . . . . + . . 1.025e+00 3.454e+00 . . . . + . . 1.050e+00 3.349e+00 . . . . + . . 1.075e+00 3.243e+00 . . . . + . . 1.100e+00 3.138e+00 . . . .+ . . 1.125e+00 3.032e+00 . . . + . . 1.150e+00 2.926e+00 . . . +. . . 1.175e+00 2.820e+00 . . . + . . . 1.200e+00 2.714e+00 . . . + . . . 1.225e+00 2.608e+00 . . . + . . . 1.250e+00 2.502e+00 . . . + . . . 1.275e+00 2.396e+00 . . . + . . . ----------------------|---------|---------|---------|---------|---------| v-sweep v(3) 0.00e+00 1.00e+00 2.00e+00 3.00e+00 4.00e+00 5.00e+00 v-sweep v(3) 0.00e+00 1.00e+00 2.00e+00 3.00e+00 4.00e+00 5.00e+00 ----------------------|---------|---------|---------|---------|---------| 1.300e+00 2.291e+00 . . . + . . . 1.325e+00 2.186e+00 . . .+ . . . 1.350e+00 2.081e+00 . . + . . . 1.375e+00 1.976e+00 . . +. . . . 1.400e+00 1.871e+00 . . + . . . . 1.425e+00 1.767e+00 . . + . . . . 1.450e+00 1.663e+00 . . + . . . . 1.475e+00 1.559e+00 . . + . . . . 1.500e+00 1.455e+00 . . + . . . . 1.525e+00 1.352e+00 . . + . . . . 1.550e+00 1.249e+00 . . + . . . . 1.575e+00 1.146e+00 . .+ . . . . 1.600e+00 1.043e+00 . + . . . . 1.625e+00 9.407e-01 . +. . . . . 1.650e+00 8.379e-01 . + . . . . . 1.675e+00 7.336e-01 . + . . . . . 1.700e+00 6.255e-01 . + . . . . . 1.725e+00 5.166e-01 . + . . . . . 1.750e+00 4.252e-01 . + . . . . . 1.775e+00 3.861e-01 . + . . . . . 1.800e+00 3.686e-01 . + . . . . . 1.825e+00 3.578e-01 . + . . . . . 1.850e+00 3.501e-01 . + . . . . . 1.875e+00 3.442e-01 . + . . . . . 1.900e+00 3.394e-01 . + . . . . . 1.925e+00 3.353e-01 . + . . . . . 1.950e+00 3.319e-01 . + . . . . . 1.975e+00 3.288e-01 . + . . . . . 2.000e+00 3.261e-01 . + . . . . . 2.025e+00 3.236e-01 . + . . . . . 2.050e+00 3.214e-01 . + . . . . . 2.075e+00 3.193e-01 . + . . . . . 2.100e+00 3.174e-01 . + . . . . . 2.125e+00 3.157e-01 . + . . . . . 2.150e+00 3.140e-01 . + . . . . . 2.175e+00 3.125e-01 . + . . . . . 2.200e+00 3.111e-01 . + . . . . . 2.225e+00 3.097e-01 . + . . . . . 2.250e+00 3.084e-01 . + . . . . . 2.275e+00 3.072e-01 . + . . . . . 2.300e+00 3.060e-01 . + . . . . . 2.325e+00 3.049e-01 . + . . . . . 2.350e+00 3.039e-01 . + . . . . . 2.375e+00 3.028e-01 . + . . . . . 2.400e+00 3.019e-01 . + . . . . . 2.425e+00 3.009e-01 . + . . . . . 2.450e+00 3.000e-01 . + . . . . . 2.475e+00 2.992e-01 . + . . . . . 2.500e+00 2.983e-01 . + . . . . . ----------------------|---------|---------|---------|---------|---------| v-sweep v(3) 0.00e+00 1.00e+00 2.00e+00 3.00e+00 4.00e+00 5.00e+00 rtlinv ckt - cascaded rtl inverters -------------------------------------------------------------------------------- Index time v(3) v(5) -------------------------------------------------------------------------------- 0 0.000000e+00 4.622185e+00 2.665056e-01 1 1.000000e-11 4.622185e+00 2.665056e-01 2 2.000000e-11 4.622185e+00 2.665056e-01 3 4.000000e-11 4.622185e+00 2.665056e-01 4 8.000000e-11 4.622185e+00 2.665056e-01 5 1.600000e-10 4.622185e+00 2.665056e-01 6 3.200000e-10 4.622185e+00 2.665056e-01 7 6.400000e-10 4.622185e+00 2.665056e-01 8 1.280000e-09 4.622185e+00 2.665056e-01 9 2.000000e-09 4.622185e+00 2.665056e-01 10 2.048636e-09 4.622292e+00 2.665056e-01 11 2.145909e-09 4.622716e+00 2.665057e-01 12 2.340455e-09 4.624759e+00 2.665061e-01 13 2.587114e-09 4.629440e+00 2.665071e-01 14 3.080431e-09 4.644545e+00 2.665086e-01 15 4.000000e-09 4.686343e+00 2.664995e-01 16 4.098663e-09 4.691168e+00 2.664971e-01 17 4.295990e-09 4.700084e+00 2.664912e-01 18 4.690644e-09 4.714412e+00 2.664747e-01 19 5.479952e-09 4.732320e+00 2.664283e-01 20 7.058567e-09 4.476721e+00 2.663492e-01 21 9.058567e-09 3.777494e+00 2.667389e-01 22 1.105857e-08 3.097057e+00 2.681161e-01 23 1.305857e-08 2.493183e+00 2.704647e-01 24 1.505857e-08 1.942882e+00 2.737963e-01 25 1.705857e-08 1.455907e+00 2.783114e-01 26 1.905857e-08 1.028846e+00 2.843479e-01 27 2.105857e-08 6.684221e-01 2.927160e-01 28 2.305857e-08 3.865504e-01 3.052167e-01 29 2.505857e-08 3.120637e-01 3.264857e-01 30 2.642150e-08 3.003241e-01 3.539190e-01 31 2.791439e-08 2.912460e-01 4.152030e-01 32 2.985993e-08 2.849294e-01 5.324041e-01 33 3.185993e-08 2.798880e-01 6.658911e-01 34 3.385993e-08 2.768522e-01 8.075699e-01 35 3.585993e-08 2.742785e-01 9.565774e-01 36 3.785993e-08 2.727016e-01 1.110432e+00 37 3.985993e-08 2.712392e-01 1.268236e+00 38 4.185993e-08 2.703101e-01 1.428480e+00 39 4.385993e-08 2.694153e-01 1.590368e+00 40 4.585993e-08 2.688333e-01 1.752914e+00 41 4.785993e-08 2.682648e-01 1.915462e+00 42 4.985993e-08 2.678879e-01 2.077330e+00 43 5.185993e-08 2.675181e-01 2.238002e+00 44 5.385993e-08 2.672684e-01 2.396989e+00 45 5.585993e-08 2.670236e-01 2.553895e+00 46 5.785993e-08 2.668551e-01 2.708365e+00 47 5.985993e-08 2.666905e-01 2.860099e+00 48 6.185993e-08 2.665746e-01 3.008834e+00 49 6.385993e-08 2.664617e-01 3.154345e+00 50 6.585993e-08 2.663800e-01 3.296432e+00 51 6.785993e-08 2.663007e-01 3.434921e+00 52 6.985993e-08 2.662412e-01 3.569653e+00 53 7.185993e-08 2.661832e-01 3.700482e+00 54 7.385993e-08 2.661377e-01 3.827265e+00 Index time v(3) v(5) -------------------------------------------------------------------------------- 55 7.585993e-08 2.660928e-01 3.949856e+00 56 7.785993e-08 2.660554e-01 4.068096e+00 57 7.985993e-08 2.660177e-01 4.181800e+00 58 8.185993e-08 2.659838e-01 4.290736e+00 59 8.385993e-08 2.659483e-01 4.394605e+00 60 8.400000e-08 2.659461e-01 4.401679e+00 61 8.420000e-08 2.658476e-01 4.411705e+00 62 8.460000e-08 2.656650e-01 4.431649e+00 63 8.540000e-08 2.659440e-01 4.470861e+00 64 8.600000e-08 2.669478e-01 4.499650e+00 65 8.616000e-08 2.674482e-01 4.507212e+00 66 8.648000e-08 2.685925e-01 4.522250e+00 67 8.712000e-08 2.711586e-01 4.551782e+00 68 8.840000e-08 2.766641e-01 4.608515e+00 69 9.040000e-08 2.868187e-01 4.690369e+00 70 9.240000e-08 3.002319e-01 4.762941e+00 71 9.440000e-08 3.215014e-01 4.824945e+00 72 9.640000e-08 3.730608e-01 4.875067e+00 73 9.840000e-08 5.003724e-01 4.912320e+00 74 1.004000e-07 6.585253e-01 4.936784e+00 75 1.024000e-07 8.255393e-01 4.948062e+00 76 1.044000e-07 1.004664e+00 4.942422e+00 77 1.064000e-07 1.189052e+00 4.911196e+00 78 1.084000e-07 1.379227e+00 4.845888e+00 79 1.104000e-07 1.571729e+00 4.743773e+00 80 1.124000e-07 1.766218e+00 4.606239e+00 81 1.144000e-07 1.960818e+00 4.436508e+00 82 1.164000e-07 2.154920e+00 4.237980e+00 83 1.184000e-07 2.347408e+00 4.013552e+00 84 1.204000e-07 2.537674e+00 3.766132e+00 85 1.224000e-07 2.724980e+00 3.498795e+00 86 1.244000e-07 2.908794e+00 3.214774e+00 87 1.264000e-07 3.088567e+00 2.917435e+00 88 1.284000e-07 3.263821e+00 2.610287e+00 89 1.304000e-07 3.434065e+00 2.297009e+00 90 1.324000e-07 3.598787e+00 1.981491e+00 91 1.344000e-07 3.757385e+00 1.667916e+00 92 1.364000e-07 3.909087e+00 1.360891e+00 93 1.384000e-07 4.052794e+00 1.065680e+00 94 1.404000e-07 4.186796e+00 7.886125e-01 95 1.424000e-07 4.308264e+00 5.378801e-01 96 1.444000e-07 4.412172e+00 3.525202e-01 97 1.464000e-07 4.492524e+00 3.092198e-01 98 1.478480e-07 4.533853e+00 2.986970e-01 99 1.494971e-07 4.564713e+00 2.902041e-01 100 1.514971e-07 4.585411e+00 2.843710e-01 101 1.534971e-07 4.595409e+00 2.798330e-01 102 1.554971e-07 4.600406e+00 2.769721e-01 103 1.574971e-07 4.603236e+00 2.745779e-01 104 1.594971e-07 4.605141e+00 2.730352e-01 105 1.614971e-07 4.606640e+00 2.716522e-01 106 1.634971e-07 4.607947e+00 2.707299e-01 107 1.654971e-07 4.609152e+00 2.698775e-01 108 1.674971e-07 4.610282e+00 2.692960e-01 109 1.694971e-07 4.611343e+00 2.687520e-01 110 1.714971e-07 4.612334e+00 2.683744e-01 111 1.734971e-07 4.613254e+00 2.680198e-01 112 1.754971e-07 4.614104e+00 2.677698e-01 Index time v(3) v(5) -------------------------------------------------------------------------------- 113 1.774971e-07 4.614886e+00 2.675354e-01 114 1.794971e-07 4.615602e+00 2.673677e-01 115 1.814971e-07 4.616254e+00 2.672111e-01 116 1.834971e-07 4.616848e+00 2.670977e-01 117 1.854971e-07 4.617387e+00 2.669923e-01 118 1.874971e-07 4.617875e+00 2.669149e-01 119 1.894971e-07 4.618316e+00 2.668434e-01 120 1.914971e-07 4.618715e+00 2.667903e-01 121 1.934971e-07 4.619074e+00 2.667416e-01 122 1.954971e-07 4.619397e+00 2.667050e-01 123 1.974971e-07 4.619687e+00 2.666715e-01 124 1.994971e-07 4.619948e+00 2.666461e-01 125 2.000000e-07 4.620010e+00 2.666395e-01 -------------------------------------------------------------------------- rtlinv ckt - cascaded rtl inverters Legend: + = v(3) * = v(5) = = v(1) -------------------------------------------------------------------------- time v(3) 0.00e+00 1.00e+00 2.00e+00 3.00e+00 4.00e+00 5.00e+00 ----------------------|---------|---------|---------|---------|---------| 0.000e+00 4.622e+00 = * . . . . + . 2.000e-09 4.622e+00 = * . . . . + . 4.000e-09 4.686e+00 . * . . . . + = 6.000e-09 4.648e+00 . * . . . . + = 8.000e-09 4.148e+00 . * . . . .+ = 1.000e-08 3.457e+00 . * . . . + . = 1.200e-08 2.813e+00 . * . . + . . = 1.400e-08 2.234e+00 . * . . + . . = 1.600e-08 1.714e+00 . * . + . . . = 1.800e-08 1.255e+00 . * . + . . . = 2.000e-08 8.592e-01 . * + . . . . = 2.200e-08 5.357e-01 . * + . . . . = 2.400e-08 3.515e-01 . X . . . . = 2.600e-08 3.040e-01 . X . . . . = 2.800e-08 2.910e-01 . + * . . . . = 3.000e-08 2.846e-01 . + * . . . . = 3.200e-08 2.797e-01 . + * . . . . = 3.400e-08 2.767e-01 . + * . . . . = 3.600e-08 2.742e-01 . + *. . . . = 3.800e-08 2.726e-01 . + .* . . . = 4.000e-08 2.712e-01 . + . * . . . = 4.200e-08 2.702e-01 . + . * . . . = 4.400e-08 2.694e-01 . + . * . . . = 4.600e-08 2.688e-01 . + . * . . . = 4.800e-08 2.682e-01 . + . *. . . = 5.000e-08 2.679e-01 . + . * . . = 5.200e-08 2.675e-01 . + . . * . . = 5.400e-08 2.673e-01 . + . . * . . = 5.600e-08 2.670e-01 . + . . * . . = 5.800e-08 2.668e-01 . + . . * . . = 6.000e-08 2.667e-01 . + . . * . . = 6.200e-08 2.666e-01 . + . . * . = 6.400e-08 2.665e-01 . + . . .* . = 6.600e-08 2.664e-01 . + . . . * . = 6.800e-08 2.663e-01 . + . . . * . = 7.000e-08 2.662e-01 . + . . . * . = 7.200e-08 2.662e-01 . + . . . * . = 7.400e-08 2.661e-01 . + . . . * . = 7.600e-08 2.661e-01 . + . . . *. = 7.800e-08 2.661e-01 . + . . . * = 8.000e-08 2.660e-01 . + . . . .* = 8.200e-08 2.660e-01 . + . . . . * = 8.400e-08 2.659e-01 . + . . . . * =. 8.600e-08 2.669e-01 = + . . . . * . 8.800e-08 2.749e-01 = + . . . . * . 9.000e-08 2.848e-01 = + . . . . * . 9.200e-08 2.975e-01 = + . . . . * . 9.400e-08 3.172e-01 = + . . . . * . 9.600e-08 3.627e-01 = + . . . . * . 9.800e-08 4.749e-01 = + . . . . *. 1.000e-07 6.269e-01 = + . . . . *. 1.020e-07 7.921e-01 = + . . . . *. ----------------------|---------|---------|---------|---------|---------| time v(3) 0.00e+00 1.00e+00 2.00e+00 3.00e+00 4.00e+00 5.00e+00 time v(3) 0.00e+00 1.00e+00 2.00e+00 3.00e+00 4.00e+00 5.00e+00 ----------------------|---------|---------|---------|---------|---------| 1.040e-07 9.688e-01 = +. . . . *. 1.060e-07 1.152e+00 = .+ . . . *. 1.080e-07 1.341e+00 = . + . . . * . 1.100e-07 1.533e+00 = . + . . . * . 1.120e-07 1.727e+00 = . + . . . * . 1.140e-07 1.922e+00 = . +. . . * . 1.160e-07 2.116e+00 = . .+ . . * . 1.180e-07 2.309e+00 = . . + . * . 1.200e-07 2.500e+00 = . . + . * . . 1.220e-07 2.688e+00 = . . + . * . . 1.240e-07 2.872e+00 = . . + . * . . 1.260e-07 3.053e+00 = . . *+ . . 1.280e-07 3.229e+00 = . . * . + . . 1.300e-07 3.400e+00 = . . * . + . . 1.320e-07 3.566e+00 = . * . + . . 1.340e-07 3.726e+00 = . * . . + . . 1.360e-07 3.879e+00 = . * . . + . . 1.380e-07 4.024e+00 = .* . . + . 1.400e-07 4.160e+00 = * . . . .+ . 1.420e-07 4.284e+00 = * . . . . + . 1.440e-07 4.391e+00 = * . . . . + . 1.460e-07 4.476e+00 = * . . . . + . 1.480e-07 4.537e+00 = * . . . . + . 1.500e-07 4.570e+00 = * . . . . + . 1.520e-07 4.588e+00 = * . . . . + . 1.540e-07 4.597e+00 = * . . . . + . 1.560e-07 4.601e+00 = * . . . . + . 1.580e-07 4.604e+00 = * . . . . + . 1.600e-07 4.606e+00 = * . . . . + . 1.620e-07 4.607e+00 = * . . . . + . 1.640e-07 4.608e+00 = * . . . . + . 1.660e-07 4.609e+00 = * . . . . + . 1.680e-07 4.611e+00 = * . . . . + . 1.700e-07 4.612e+00 = * . . . . + . 1.720e-07 4.613e+00 = * . . . . + . 1.740e-07 4.613e+00 = * . . . . + . 1.760e-07 4.614e+00 = * . . . . + . 1.780e-07 4.615e+00 = * . . . . + . 1.800e-07 4.616e+00 = * . . . . + . 1.820e-07 4.616e+00 = * . . . . + . 1.840e-07 4.617e+00 = * . . . . + . 1.860e-07 4.618e+00 = * . . . . + . 1.880e-07 4.618e+00 = * . . . . + . 1.900e-07 4.618e+00 = * . . . . + . 1.920e-07 4.619e+00 = * . . . . + . 1.940e-07 4.619e+00 = * . . . . + . 1.960e-07 4.619e+00 = * . . . . + . 1.980e-07 4.620e+00 = * . . . . + . 2.000e-07 4.620e+00 = * . . . . + . ----------------------|---------|---------|---------|---------|---------| time v(3) 0.00e+00 1.00e+00 2.00e+00 3.00e+00 4.00e+00 5.00e+00 tmpk8ny_4pz/tests/general/rc.out0000644000175000017500000001500013546075722017070 0ustar carstencarstenWarning: vin: no DC value, transient time 0 value used Circuit: Basic RC circuit Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Initial Transient Solution -------------------------- Node Voltage ---- ------- 1 0 2 0 vin#branch 0 No. of Data Rows : 87 -------------------------------------------------------------------------- Basic RC circuit Legend: + = v(2) * = vin#branch -------------------------------------------------------------------------- time v(2) -1.00e+00 0.00e+00 1.00e+00 ----------------------|------------------------|------------------------| 0.000e+00 0.000e+00 . X . 1.000e-01 4.830e-02 .* .+ . 2.000e-01 1.385e-01 . * . + . 3.000e-01 2.204e-01 . * . + . 4.000e-01 2.947e-01 . * . + . 5.000e-01 3.619e-01 . * . + . 6.000e-01 4.226e-01 . * . + . 7.000e-01 4.776e-01 . * . + . 8.000e-01 5.274e-01 . * . + . 9.000e-01 5.724e-01 . * . + . 1.000e+00 6.131e-01 . * . + . 1.100e+00 6.500e-01 . * . + . 1.200e+00 6.833e-01 . * . + . 1.300e+00 7.135e-01 . * . + . 1.400e+00 7.407e-01 . * . + . 1.500e+00 7.654e-01 . * . + . 1.600e+00 7.878e-01 . * . + . 1.700e+00 8.080e-01 . * . + . 1.800e+00 8.263e-01 . * . + . 1.900e+00 8.428e-01 . * . + . 2.000e+00 8.578e-01 . * . + . 2.100e+00 8.713e-01 . * . + . 2.200e+00 8.836e-01 . * . + . 2.300e+00 8.947e-01 . * . + . 2.400e+00 9.047e-01 . * . + . 2.500e+00 9.138e-01 . * . + . 2.600e+00 9.220e-01 . * . + . 2.700e+00 9.294e-01 . * . + . 2.800e+00 9.361e-01 . * . + . 2.900e+00 9.422e-01 . * . + . 3.000e+00 9.477e-01 . * . + . 3.100e+00 9.527e-01 . * . + . 3.200e+00 9.572e-01 . * . + . 3.300e+00 9.613e-01 . *. +. 3.400e+00 9.650e-01 . *. +. 3.500e+00 9.683e-01 . *. +. 3.600e+00 9.713e-01 . *. +. 3.700e+00 9.741e-01 . *. +. 3.800e+00 9.765e-01 . *. +. 3.900e+00 9.788e-01 . *. +. 4.000e+00 9.808e-01 . *. +. 4.100e+00 9.826e-01 . *. +. 4.200e+00 9.843e-01 . *. +. 4.300e+00 9.858e-01 . *. +. 4.400e+00 9.871e-01 . *. +. 4.500e+00 9.884e-01 . *. +. 4.600e+00 9.895e-01 . *. +. 4.700e+00 9.905e-01 . *. +. 4.800e+00 9.914e-01 . *. +. 4.900e+00 9.922e-01 . *. +. 5.000e+00 9.929e-01 . *. +. 5.100e+00 9.936e-01 . *. +. ----------------------|------------------------|------------------------| time v(2) -1.00e+00 0.00e+00 1.00e+00 time v(2) -1.00e+00 0.00e+00 1.00e+00 ----------------------|------------------------|------------------------| 5.200e+00 9.942e-01 . *. +. 5.300e+00 9.948e-01 . *. +. 5.400e+00 9.953e-01 . *. +. 5.500e+00 9.957e-01 . *. +. 5.600e+00 9.961e-01 . *. +. 5.700e+00 9.965e-01 . *. +. 5.800e+00 9.968e-01 . *. +. 5.900e+00 9.971e-01 . *. +. 6.000e+00 9.974e-01 . *. +. 6.100e+00 9.977e-01 . *. +. 6.200e+00 9.979e-01 . *. +. 6.300e+00 9.981e-01 . *. +. 6.400e+00 9.983e-01 . *. +. 6.500e+00 9.984e-01 . *. +. 6.600e+00 9.986e-01 . *. +. 6.700e+00 9.987e-01 . *. +. 6.800e+00 9.988e-01 . *. +. 6.900e+00 9.989e-01 . *. +. 7.000e+00 9.990e-01 . *. +. ----------------------|------------------------|------------------------| time v(2) -1.00e+00 0.00e+00 1.00e+00 tmpk8ny_4pz/tests/sensitivity/0000755000175000017500000000000013546075722016714 5ustar carstencarstentmpk8ny_4pz/tests/sensitivity/diffpair.out0000644000175000017500000002516413546075722021241 0ustar carstencarsten Circuit: simple differential pair - CM and DM dc sensitivity Warning -- Level not specified on line "(bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf cjc=2pf va=50)" Using level 1. Warning -- Level not specified on line "(bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf cjc=2pf va=50)" Using level 1. Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Transfer function information: transfer_function = -1.10341e-01 output_impedance_at_v(5) = 9.446843e+03 vcm#input_impedance = 1.793366e+06 Transfer function information: transfer_function = -8.78493e+01 output_impedance_at_v(5) = 9.446843e+03 vdm#input_impedance = 8.940897e+03 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index q1:bf q1:br q1:eg q1:fc -------------------------------------------------------------------------------- 0 1.851978e-02 -1.909518e-08 -1.720287e-08 -3.819037e-08 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index q1:is q1:nc q1:ne q1:nf -------------------------------------------------------------------------------- 0 4.549980e+16 -9.547591e-09 -1.273012e-08 -1.339677e+02 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index q1:nr q1:rb q1:rbm q1:tnom -------------------------------------------------------------------------------- 0 -1.909518e-08 -1.487980e-03 1.410876e-04 -6.960475e-01 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index q1:vaf q1:xti q1_area q1_areab -------------------------------------------------------------------------------- 0 -1.143803e-02 -6.365061e-09 4.684669e+00 -1.909518e-08 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index q1_areac q1_m q1_temp q2:bf -------------------------------------------------------------------------------- 0 -1.909518e-08 4.684670e+00 2.497064e-01 -1.851978e-02 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index q2:br q2:eg q2:fc q2:is -------------------------------------------------------------------------------- 0 6.546832e-09 5.898047e-09 1.309366e-08 -4.549980e+16 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index q2:nc q2:ne q2:nf q2:nr -------------------------------------------------------------------------------- 0 3.273416e-09 4.364555e-09 1.339677e+02 6.546832e-09 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index q2:rb q2:rbm q2:tnom q2:vaf -------------------------------------------------------------------------------- 0 1.487980e-03 -1.410877e-04 6.960475e-01 1.143803e-02 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index q2:xti q2_area q2_areab q2_areac -------------------------------------------------------------------------------- 0 2.182277e-09 -4.684669e+00 6.546832e-09 6.546832e-09 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index q2_m q2_temp q3:bf q3:br -------------------------------------------------------------------------------- 0 -4.684670e+00 -2.497064e-01 3.308722e-18 3.534097e-22 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index q3:eg q3:fc q3:is q3:nc -------------------------------------------------------------------------------- 0 2.729032e-22 6.058452e-22 6.776264e+01 1.514613e-22 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index q3:ne q3:nf q3:nr q3:rb -------------------------------------------------------------------------------- 0 2.019484e-22 -2.168404e-13 3.534097e-22 -3.705769e-18 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index q3:rbm q3:tnom q3:vaf q3:xti -------------------------------------------------------------------------------- 0 9.693523e-23 -1.003891e-15 -4.135903e-21 1.009742e-22 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index q3_area q3_areab q3_areac q3_m -------------------------------------------------------------------------------- 0 7.623297e-15 3.029226e-22 3.029226e-22 7.623297e-15 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index q3_temp q4:bf q4:br q4:eg -------------------------------------------------------------------------------- 0 3.764591e-16 -5.955700e-18 1.135960e-22 1.023387e-22 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index q4:fc q4:is q4:nc q4:ne -------------------------------------------------------------------------------- 0 2.271919e-22 -6.776264e+01 5.679799e-23 7.573065e-23 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index q4:nf q4:nr q4:rb q4:rbm -------------------------------------------------------------------------------- 0 2.168404e-13 1.135960e-22 3.705769e-18 -7.940934e-19 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index q4:tnom q4:vaf q4:xti q4_area -------------------------------------------------------------------------------- 0 1.129377e-15 2.541099e-17 3.786532e-23 -7.623297e-15 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index q4_areab q4_areac q4_m q4_temp -------------------------------------------------------------------------------- 0 1.135960e-22 1.135960e-22 -7.623297e-15 -3.764591e-16 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index rbias rbias_m rbias_scale rc1 -------------------------------------------------------------------------------- 0 3.811648e-19 -6.776264e-15 7.623297e-15 6.031558e-04 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index rc1_m rc1_scale rc2 rc2_m -------------------------------------------------------------------------------- 0 -6.031564e+00 6.031558e+00 -6.031558e-04 6.031564e+00 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index rc2_scale rs1 rs1_m rs1_scale -------------------------------------------------------------------------------- 0 -6.031558e+00 -1.346892e-03 1.346894e+00 -1.346892e+00 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index rs2 rs2_m rs2_scale vcc -------------------------------------------------------------------------------- 0 1.346892e-03 -1.346894e+00 1.346892e+00 0.000000e+00 simple differential pair - CM and DM dc sensitivity Sensitivity Analysis Sat Aug 27 16:36:03 2005 -------------------------------------------------------------------------------- Index vcm vdm vee -------------------------------------------------------------------------------- 0 1.290931e-13 -1.758090e+02 4.235165e-16 CPU time since last call: 0.015 seconds. Total CPU time: 0.015 seconds. Current dynamic memory usage = 135168, Dynamic memory limit = -491521. tmpk8ny_4pz/tests/sensitivity/Makefile.am0000644000175000017500000000040013546075722020742 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = diffpair.cir TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/sensitivity/diffpair.cir0000644000175000017500000000107213546075722021177 0ustar carstencarstensimple differential pair - CM and DM dc sensitivity * Models: .model qnl npn(level=1 bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf cjc=2pf va=50) .model qnr npn(level=1 bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf cjc=2pf va=50) * Circuit description: q1 4 2 6 qnr q2 5 3 6 qnl rs1 11 2 1k rs2 3 1 1k rc1 4 8 10k rc2 5 8 10k q3 7 7 9 qnl q4 6 7 9 qnr rbias 7 8 20k * Inputs/Supplies: vcm 1 0 dc 0 sin(0 0.1 5meg) ac 1 vdm 1 11 dc 0 sin(0 0.1 5meg) ac 1 vcc 8 0 12 vee 9 0 -12 .options noacct * Analyses: .tf v(5) vcm .tf v(5) vdm .sens v(5,4) .print SENS all .end tmpk8ny_4pz/tests/bsim2/0000755000175000017500000000000013546075722015336 5ustar carstencarstentmpk8ny_4pz/tests/bsim2/Makefile.am0000644000175000017500000000037613546075722017400 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = \ test.cir TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/bsim2/test.out0000644000175000017500000015035613546075722017060 0ustar carstencarsten No. of Data Rows : 501 Circuit: Test of MOS BSIM2 implementation; DC transfer curve Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Test of MOS BSIM2 implementation; DC transfer curve -------------------------------------------------------------------------------- Index v-sweep v1#branch v2#branch v3#branch -------------------------------------------------------------------------------- 0 0.000000e+00 1.259693e-13 2.302983e-12 4.496301e-12 1 1.000000e-02 1.302716e-13 2.302983e-12 4.496301e-12 2 2.000000e-02 1.373029e-13 2.302983e-12 4.496301e-12 3 3.000000e-02 1.456488e-13 2.302983e-12 4.496301e-12 4 4.000000e-02 1.565151e-13 2.302983e-12 4.496301e-12 5 5.000000e-02 1.706627e-13 2.302983e-12 4.496301e-12 6 6.000000e-02 1.890826e-13 2.302983e-12 4.496301e-12 7 7.000000e-02 2.130649e-13 2.302983e-12 4.496301e-12 8 8.000000e-02 2.442892e-13 2.302983e-12 4.496301e-12 9 9.000000e-02 2.849426e-13 2.302983e-12 4.496301e-12 10 1.000000e-01 3.378722e-13 2.302983e-12 4.496301e-12 11 1.100000e-01 4.067852e-13 2.302983e-12 4.496301e-12 12 1.200000e-01 4.965080e-13 2.302984e-12 4.496301e-12 13 1.300000e-01 6.133245e-13 2.302984e-12 4.496301e-12 14 1.400000e-01 7.654162e-13 2.302984e-12 4.496301e-12 15 1.500000e-01 9.634350e-13 2.302984e-12 4.496301e-12 16 1.600000e-01 1.221249e-12 2.302984e-12 4.496301e-12 17 1.700000e-01 1.556915e-12 2.302984e-12 4.496301e-12 18 1.800000e-01 1.993941e-12 2.302984e-12 4.496301e-12 19 1.900000e-01 2.562934e-12 2.302985e-12 4.496301e-12 20 2.000000e-01 3.303743e-12 2.302985e-12 4.496301e-12 21 2.100000e-01 4.268249e-12 2.302986e-12 4.496301e-12 22 2.200000e-01 5.524001e-12 2.302986e-12 4.496301e-12 23 2.300000e-01 7.158943e-12 2.302988e-12 4.496301e-12 24 2.400000e-01 9.287574e-12 2.302989e-12 4.496301e-12 25 2.500000e-01 1.205897e-11 2.302991e-12 4.496301e-12 26 2.600000e-01 1.566721e-11 2.302994e-12 4.496301e-12 27 2.700000e-01 2.036499e-11 2.302998e-12 4.496301e-12 28 2.800000e-01 2.648131e-11 2.303003e-12 4.496301e-12 29 2.900000e-01 3.444448e-11 2.303010e-12 4.496301e-12 30 3.000000e-01 4.481219e-11 2.303020e-12 4.496301e-12 31 3.100000e-01 5.831048e-11 2.303033e-12 4.496301e-12 32 3.200000e-01 7.588463e-11 2.303051e-12 4.496301e-12 33 3.300000e-01 9.876535e-11 2.303075e-12 4.496301e-12 34 3.400000e-01 1.285550e-10 2.303109e-12 4.496301e-12 35 3.500000e-01 1.673396e-10 2.303154e-12 4.496301e-12 36 3.600000e-01 2.178352e-10 2.303216e-12 4.496301e-12 37 3.700000e-01 2.835780e-10 2.303300e-12 4.496301e-12 38 3.800000e-01 3.691718e-10 2.303414e-12 4.496301e-12 39 3.900000e-01 4.806104e-10 2.303570e-12 4.496301e-12 40 4.000000e-01 6.256975e-10 2.303783e-12 4.496301e-12 41 4.100000e-01 8.145931e-10 2.304072e-12 4.496301e-12 42 4.200000e-01 1.060525e-09 2.304467e-12 4.496301e-12 43 4.300000e-01 1.380714e-09 2.305004e-12 4.496301e-12 44 4.400000e-01 1.797583e-09 2.305736e-12 4.496301e-12 45 4.500000e-01 2.340321e-09 2.306732e-12 4.496301e-12 46 4.600000e-01 3.046935e-09 2.308090e-12 4.496301e-12 47 4.700000e-01 3.966905e-09 2.309939e-12 4.496301e-12 48 4.800000e-01 5.164650e-09 2.312459e-12 4.496301e-12 49 4.900000e-01 6.724041e-09 2.315890e-12 4.496301e-12 50 5.000000e-01 8.754271e-09 2.320563e-12 4.496301e-12 51 5.100000e-01 1.139750e-08 2.326930e-12 4.496301e-12 52 5.200000e-01 1.483882e-08 2.335601e-12 4.496301e-12 53 5.300000e-01 1.931920e-08 2.347413e-12 4.496301e-12 54 5.400000e-01 2.515234e-08 2.363502e-12 4.496302e-12 Index v-sweep v1#branch v2#branch v3#branch -------------------------------------------------------------------------------- 55 5.500000e-01 3.274663e-08 2.385418e-12 4.496302e-12 56 5.600000e-01 4.263352e-08 2.415269e-12 4.496302e-12 57 5.700000e-01 5.550402e-08 2.455930e-12 4.496303e-12 58 5.800000e-01 7.225504e-08 2.511316e-12 4.496303e-12 59 5.900000e-01 9.404698e-08 2.586757e-12 4.496304e-12 60 6.000000e-01 1.223738e-07 2.689517e-12 4.496306e-12 61 6.100000e-01 1.572873e-07 2.829488e-12 4.496307e-12 62 6.200000e-01 2.002926e-07 3.020145e-12 4.496310e-12 63 6.300000e-01 2.517814e-07 3.279842e-12 4.496314e-12 64 6.400000e-01 3.126978e-07 3.633577e-12 4.496319e-12 65 6.500000e-01 3.839934e-07 4.115405e-12 4.496326e-12 66 6.600000e-01 4.666328e-07 4.771708e-12 4.496335e-12 67 6.700000e-01 5.616018e-07 5.665665e-12 4.496349e-12 68 6.800000e-01 6.699178e-07 6.883333e-12 4.496367e-12 69 6.900000e-01 7.926400e-07 8.541928e-12 4.496394e-12 70 7.000000e-01 9.308780e-07 1.080111e-11 4.496430e-12 71 7.100000e-01 1.085235e-06 1.387836e-11 4.496481e-12 72 7.200000e-01 1.247053e-06 1.806990e-11 4.496552e-12 73 7.300000e-01 1.412965e-06 2.377922e-11 4.496650e-12 74 7.400000e-01 1.582945e-06 3.155591e-11 4.496788e-12 75 7.500000e-01 1.757007e-06 4.214855e-11 4.496979e-12 76 7.600000e-01 1.935187e-06 5.657681e-11 4.497246e-12 77 7.700000e-01 2.117544e-06 7.622956e-11 4.497618e-12 78 7.800000e-01 2.304143e-06 1.029986e-10 4.498136e-12 79 7.900000e-01 2.495056e-06 1.394606e-10 4.498858e-12 80 8.000000e-01 2.690354e-06 1.891255e-10 4.499863e-12 81 8.100000e-01 2.890108e-06 2.567739e-10 4.501264e-12 82 8.200000e-01 3.094386e-06 3.489176e-10 4.503215e-12 83 8.300000e-01 3.303248e-06 4.744261e-10 4.505935e-12 84 8.400000e-01 3.516751e-06 6.453805e-10 4.509723e-12 85 8.500000e-01 3.734945e-06 8.782365e-10 4.515001e-12 86 8.600000e-01 3.957875e-06 1.195408e-09 4.522354e-12 87 8.700000e-01 4.185580e-06 1.627425e-09 4.532599e-12 88 8.800000e-01 4.418092e-06 2.215871e-09 4.546873e-12 89 8.900000e-01 4.655441e-06 3.017387e-09 4.566759e-12 90 9.000000e-01 4.897649e-06 4.109124e-09 4.594465e-12 91 9.100000e-01 5.144734e-06 5.596166e-09 4.633066e-12 92 9.200000e-01 5.396712e-06 7.621648e-09 4.686846e-12 93 9.300000e-01 5.653592e-06 1.038053e-08 4.761774e-12 94 9.400000e-01 5.914953e-06 1.413836e-08 4.866164e-12 95 9.500000e-01 6.176618e-06 1.925684e-08 5.011603e-12 96 9.600000e-01 6.437567e-06 2.622863e-08 5.214232e-12 97 9.700000e-01 6.697839e-06 3.566853e-08 5.496538e-12 98 9.800000e-01 6.957467e-06 4.908019e-08 5.889853e-12 99 9.900000e-01 7.216476e-06 6.804759e-08 6.437826e-12 100 1.000000e+00 7.474892e-06 9.402971e-08 7.201271e-12 101 1.010000e+00 7.732735e-06 1.286499e-07 8.264915e-12 102 1.020000e+00 7.990023e-06 1.736387e-07 9.746800e-12 103 1.030000e+00 8.246771e-06 2.307718e-07 1.181138e-11 104 1.040000e+00 8.502992e-06 3.018185e-07 1.468779e-11 105 1.050000e+00 8.758699e-06 3.885136e-07 1.869523e-11 106 1.060000e+00 9.013901e-06 4.925555e-07 2.427844e-11 107 1.070000e+00 9.268607e-06 6.156224e-07 3.205703e-11 108 1.080000e+00 9.522827e-06 7.593962e-07 4.289423e-11 109 1.090000e+00 9.776566e-06 9.255811e-07 5.799271e-11 110 1.100000e+00 1.002983e-05 1.112764e-06 7.902802e-11 111 1.110000e+00 1.028263e-05 1.306884e-06 1.083346e-10 112 1.120000e+00 1.053496e-05 1.505782e-06 1.491646e-10 Index v-sweep v1#branch v2#branch v3#branch -------------------------------------------------------------------------------- 113 1.130000e+00 1.078683e-05 1.709260e-06 2.060492e-10 114 1.140000e+00 1.103825e-05 1.917180e-06 2.853010e-10 115 1.150000e+00 1.128921e-05 2.129443e-06 3.957149e-10 116 1.160000e+00 1.153973e-05 2.345967e-06 5.495437e-10 117 1.170000e+00 1.178980e-05 2.566671e-06 7.638582e-10 118 1.180000e+00 1.203943e-05 2.791470e-06 1.062441e-09 119 1.190000e+00 1.228861e-05 3.020269e-06 1.478427e-09 120 1.200000e+00 1.253735e-05 3.252962e-06 2.057977e-09 121 1.210000e+00 1.278566e-05 3.489428e-06 2.865405e-09 122 1.220000e+00 1.303353e-05 3.729534e-06 3.990310e-09 123 1.230000e+00 1.328096e-05 3.973134e-06 5.557524e-09 124 1.240000e+00 1.352796e-05 4.220073e-06 7.740957e-09 125 1.250000e+00 1.377453e-05 4.470186e-06 1.078290e-08 126 1.260000e+00 1.402066e-05 4.723297e-06 1.521755e-08 127 1.270000e+00 1.426637e-05 4.979224e-06 2.273792e-08 128 1.280000e+00 1.451164e-05 5.237781e-06 3.475798e-08 129 1.290000e+00 1.475648e-05 5.498772e-06 5.292783e-08 130 1.300000e+00 1.500089e-05 5.762001e-06 7.919551e-08 131 1.310000e+00 1.524488e-05 6.026981e-06 1.157383e-07 132 1.320000e+00 1.548843e-05 6.291599e-06 1.648661e-07 133 1.330000e+00 1.573155e-05 6.555496e-06 2.289142e-07 134 1.340000e+00 1.597425e-05 6.818705e-06 3.101612e-07 135 1.350000e+00 1.621652e-05 7.081256e-06 4.107971e-07 136 1.360000e+00 1.645836e-05 7.343173e-06 5.329379e-07 137 1.370000e+00 1.669978e-05 7.604476e-06 6.786644e-07 138 1.380000e+00 1.694076e-05 7.865185e-06 8.500585e-07 139 1.390000e+00 1.718132e-05 8.125314e-06 1.048173e-06 140 1.400000e+00 1.742145e-05 8.384878e-06 1.257451e-06 141 1.410000e+00 1.766115e-05 8.643888e-06 1.471788e-06 142 1.420000e+00 1.790043e-05 8.902354e-06 1.690904e-06 143 1.430000e+00 1.813927e-05 9.160286e-06 1.914600e-06 144 1.440000e+00 1.837769e-05 9.417691e-06 2.142713e-06 145 1.450000e+00 1.861568e-05 9.674577e-06 2.375090e-06 146 1.460000e+00 1.885325e-05 9.930949e-06 2.611573e-06 147 1.470000e+00 1.909038e-05 1.018681e-05 2.851989e-06 148 1.480000e+00 1.932708e-05 1.044217e-05 3.096147e-06 149 1.490000e+00 1.956336e-05 1.069703e-05 3.343838e-06 150 1.500000e+00 1.979921e-05 1.095140e-05 3.594831e-06 151 1.510000e+00 2.003463e-05 1.120527e-05 3.848881e-06 152 1.520000e+00 2.026961e-05 1.145866e-05 4.105726e-06 153 1.530000e+00 2.050417e-05 1.171156e-05 4.365092e-06 154 1.540000e+00 2.073830e-05 1.196397e-05 4.626693e-06 155 1.550000e+00 2.097200e-05 1.221590e-05 4.890233e-06 156 1.560000e+00 2.120527e-05 1.246735e-05 5.155411e-06 157 1.570000e+00 2.143810e-05 1.271832e-05 5.421918e-06 158 1.580000e+00 2.167051e-05 1.296882e-05 5.689439e-06 159 1.590000e+00 2.190248e-05 1.321884e-05 5.957658e-06 160 1.600000e+00 2.213403e-05 1.346838e-05 6.225785e-06 161 1.610000e+00 2.236514e-05 1.371745e-05 6.493162e-06 162 1.620000e+00 2.259582e-05 1.396604e-05 6.759821e-06 163 1.630000e+00 2.282606e-05 1.421417e-05 7.025791e-06 164 1.640000e+00 2.305588e-05 1.446182e-05 7.291094e-06 165 1.650000e+00 2.328526e-05 1.470899e-05 7.555751e-06 166 1.660000e+00 2.351421e-05 1.495570e-05 7.819779e-06 167 1.670000e+00 2.374272e-05 1.520194e-05 8.083194e-06 168 1.680000e+00 2.397080e-05 1.544771e-05 8.346007e-06 169 1.690000e+00 2.419844e-05 1.569300e-05 8.608231e-06 170 1.700000e+00 2.442566e-05 1.593783e-05 8.869875e-06 Index v-sweep v1#branch v2#branch v3#branch -------------------------------------------------------------------------------- 171 1.710000e+00 2.465243e-05 1.618218e-05 9.130948e-06 172 1.720000e+00 2.487877e-05 1.642607e-05 9.391456e-06 173 1.730000e+00 2.510468e-05 1.666949e-05 9.651407e-06 174 1.740000e+00 2.533015e-05 1.691243e-05 9.910806e-06 175 1.750000e+00 2.555519e-05 1.715491e-05 1.016966e-05 176 1.760000e+00 2.577978e-05 1.739692e-05 1.042797e-05 177 1.770000e+00 2.600395e-05 1.763845e-05 1.068574e-05 178 1.780000e+00 2.622767e-05 1.787952e-05 1.094298e-05 179 1.790000e+00 2.645096e-05 1.812012e-05 1.119968e-05 180 1.800000e+00 2.667381e-05 1.836024e-05 1.145586e-05 181 1.810000e+00 2.689623e-05 1.859990e-05 1.171150e-05 182 1.820000e+00 2.711820e-05 1.883908e-05 1.196663e-05 183 1.830000e+00 2.733974e-05 1.907780e-05 1.222123e-05 184 1.840000e+00 2.756084e-05 1.931604e-05 1.247530e-05 185 1.850000e+00 2.778150e-05 1.955381e-05 1.272886e-05 186 1.860000e+00 2.800172e-05 1.979112e-05 1.298190e-05 187 1.870000e+00 2.822151e-05 2.002794e-05 1.323442e-05 188 1.880000e+00 2.844085e-05 2.026430e-05 1.348643e-05 189 1.890000e+00 2.865976e-05 2.050019e-05 1.373791e-05 190 1.900000e+00 2.887822e-05 2.073560e-05 1.398889e-05 191 1.910000e+00 2.909625e-05 2.097054e-05 1.423934e-05 192 1.920000e+00 2.931384e-05 2.120501e-05 1.448929e-05 193 1.930000e+00 2.953098e-05 2.143900e-05 1.473872e-05 194 1.940000e+00 2.974769e-05 2.167252e-05 1.498763e-05 195 1.950000e+00 2.996395e-05 2.190557e-05 1.523604e-05 196 1.960000e+00 3.017978e-05 2.213814e-05 1.548393e-05 197 1.970000e+00 3.039516e-05 2.237024e-05 1.573130e-05 198 1.980000e+00 3.061010e-05 2.260186e-05 1.597817e-05 199 1.990000e+00 3.082460e-05 2.283301e-05 1.622452e-05 200 2.000000e+00 3.103866e-05 2.306368e-05 1.647036e-05 201 2.010000e+00 3.125227e-05 2.329388e-05 1.671568e-05 202 2.020000e+00 3.146545e-05 2.352361e-05 1.696050e-05 203 2.030000e+00 3.167818e-05 2.375285e-05 1.720480e-05 204 2.040000e+00 3.189047e-05 2.398162e-05 1.744858e-05 205 2.050000e+00 3.210232e-05 2.420992e-05 1.769186e-05 206 2.060000e+00 3.231372e-05 2.443773e-05 1.793462e-05 207 2.070000e+00 3.252469e-05 2.466507e-05 1.817687e-05 208 2.080000e+00 3.273521e-05 2.489194e-05 1.841860e-05 209 2.090000e+00 3.294528e-05 2.511832e-05 1.865983e-05 210 2.100000e+00 3.315492e-05 2.534423e-05 1.890053e-05 211 2.110000e+00 3.336411e-05 2.556966e-05 1.914073e-05 212 2.120000e+00 3.357285e-05 2.579461e-05 1.938041e-05 213 2.130000e+00 3.378116e-05 2.601909e-05 1.961957e-05 214 2.140000e+00 3.398902e-05 2.624308e-05 1.985822e-05 215 2.150000e+00 3.419643e-05 2.646660e-05 2.009636e-05 216 2.160000e+00 3.440340e-05 2.668963e-05 2.033398e-05 217 2.170000e+00 3.460993e-05 2.691219e-05 2.057109e-05 218 2.180000e+00 3.481602e-05 2.713427e-05 2.080768e-05 219 2.190000e+00 3.502166e-05 2.735586e-05 2.104375e-05 220 2.200000e+00 3.522686e-05 2.757698e-05 2.127931e-05 221 2.210000e+00 3.543161e-05 2.779762e-05 2.151435e-05 222 2.220000e+00 3.563592e-05 2.801778e-05 2.174887e-05 223 2.230000e+00 3.583978e-05 2.823745e-05 2.198288e-05 224 2.240000e+00 3.604320e-05 2.845665e-05 2.221637e-05 225 2.250000e+00 3.624617e-05 2.867536e-05 2.244935e-05 226 2.260000e+00 3.644870e-05 2.889360e-05 2.268180e-05 227 2.270000e+00 3.665079e-05 2.911135e-05 2.291374e-05 228 2.280000e+00 3.685243e-05 2.932862e-05 2.314516e-05 Index v-sweep v1#branch v2#branch v3#branch -------------------------------------------------------------------------------- 229 2.290000e+00 3.705363e-05 2.954541e-05 2.337607e-05 230 2.300000e+00 3.725438e-05 2.976172e-05 2.360645e-05 231 2.310000e+00 3.745469e-05 2.997754e-05 2.383632e-05 232 2.320000e+00 3.765455e-05 3.019289e-05 2.406566e-05 233 2.330000e+00 3.785397e-05 3.040775e-05 2.429449e-05 234 2.340000e+00 3.805295e-05 3.062213e-05 2.452280e-05 235 2.350000e+00 3.825148e-05 3.083603e-05 2.475058e-05 236 2.360000e+00 3.844956e-05 3.104944e-05 2.497785e-05 237 2.370000e+00 3.864720e-05 3.126237e-05 2.520460e-05 238 2.380000e+00 3.884440e-05 3.147482e-05 2.543083e-05 239 2.390000e+00 3.904115e-05 3.168679e-05 2.565654e-05 240 2.400000e+00 3.923746e-05 3.189827e-05 2.588172e-05 241 2.410000e+00 3.943332e-05 3.210927e-05 2.610639e-05 242 2.420000e+00 3.962874e-05 3.231979e-05 2.633053e-05 243 2.430000e+00 3.982371e-05 3.252982e-05 2.655416e-05 244 2.440000e+00 4.001824e-05 3.273937e-05 2.677726e-05 245 2.450000e+00 4.021233e-05 3.294844e-05 2.699984e-05 246 2.460000e+00 4.040597e-05 3.315703e-05 2.722190e-05 247 2.470000e+00 4.059916e-05 3.336513e-05 2.744344e-05 248 2.480000e+00 4.079192e-05 3.357274e-05 2.766445e-05 249 2.490000e+00 4.098422e-05 3.377988e-05 2.788495e-05 250 2.500000e+00 4.117609e-05 3.398653e-05 2.810492e-05 251 2.510000e+00 4.136751e-05 3.419270e-05 2.832437e-05 252 2.520000e+00 4.155849e-05 3.439838e-05 2.854330e-05 253 2.530000e+00 4.174902e-05 3.460358e-05 2.876170e-05 254 2.540000e+00 4.193911e-05 3.480830e-05 2.897958e-05 255 2.550000e+00 4.212876e-05 3.501253e-05 2.919694e-05 256 2.560000e+00 4.231796e-05 3.521628e-05 2.941378e-05 257 2.570000e+00 4.250672e-05 3.541955e-05 2.963009e-05 258 2.580000e+00 4.269503e-05 3.562233e-05 2.984588e-05 259 2.590000e+00 4.288291e-05 3.582463e-05 3.006115e-05 260 2.600000e+00 4.307034e-05 3.602645e-05 3.027590e-05 261 2.610000e+00 4.325733e-05 3.622778e-05 3.049012e-05 262 2.620000e+00 4.344387e-05 3.642863e-05 3.070382e-05 263 2.630000e+00 4.362997e-05 3.662899e-05 3.091699e-05 264 2.640000e+00 4.381563e-05 3.682888e-05 3.112964e-05 265 2.650000e+00 4.400085e-05 3.702828e-05 3.134177e-05 266 2.660000e+00 4.418563e-05 3.722719e-05 3.155338e-05 267 2.670000e+00 4.436996e-05 3.742563e-05 3.176446e-05 268 2.680000e+00 4.455385e-05 3.762358e-05 3.197502e-05 269 2.690000e+00 4.473731e-05 3.782105e-05 3.218506e-05 270 2.700000e+00 4.492031e-05 3.801803e-05 3.239457e-05 271 2.710000e+00 4.510288e-05 3.821454e-05 3.260356e-05 272 2.720000e+00 4.528501e-05 3.841056e-05 3.281202e-05 273 2.730000e+00 4.546670e-05 3.860609e-05 3.301997e-05 274 2.740000e+00 4.564794e-05 3.880115e-05 3.322739e-05 275 2.750000e+00 4.582875e-05 3.899572e-05 3.343429e-05 276 2.760000e+00 4.600911e-05 3.918982e-05 3.364066e-05 277 2.770000e+00 4.618904e-05 3.938343e-05 3.384651e-05 278 2.780000e+00 4.636852e-05 3.957655e-05 3.405184e-05 279 2.790000e+00 4.654757e-05 3.976920e-05 3.425665e-05 280 2.800000e+00 4.672618e-05 3.996137e-05 3.446093e-05 281 2.810000e+00 4.690434e-05 4.015305e-05 3.466469e-05 282 2.820000e+00 4.708207e-05 4.034425e-05 3.486793e-05 283 2.830000e+00 4.725936e-05 4.053497e-05 3.507065e-05 284 2.840000e+00 4.743621e-05 4.072521e-05 3.527284e-05 285 2.850000e+00 4.761262e-05 4.091498e-05 3.547451e-05 286 2.860000e+00 4.778860e-05 4.110426e-05 3.567566e-05 Index v-sweep v1#branch v2#branch v3#branch -------------------------------------------------------------------------------- 287 2.870000e+00 4.796413e-05 4.129306e-05 3.587629e-05 288 2.880000e+00 4.813923e-05 4.148137e-05 3.607639e-05 289 2.890000e+00 4.831390e-05 4.166921e-05 3.627598e-05 290 2.900000e+00 4.848812e-05 4.185658e-05 3.647504e-05 291 2.910000e+00 4.866191e-05 4.204346e-05 3.667359e-05 292 2.920000e+00 4.883526e-05 4.222986e-05 3.687161e-05 293 2.930000e+00 4.900818e-05 4.241578e-05 3.706911e-05 294 2.940000e+00 4.918066e-05 4.260123e-05 3.726609e-05 295 2.950000e+00 4.935270e-05 4.278619e-05 3.746255e-05 296 2.960000e+00 4.952431e-05 4.297068e-05 3.765848e-05 297 2.970000e+00 4.969548e-05 4.315469e-05 3.785390e-05 298 2.980000e+00 4.986622e-05 4.333822e-05 3.804880e-05 299 2.990000e+00 5.003653e-05 4.352127e-05 3.824318e-05 300 3.000000e+00 5.020640e-05 4.370385e-05 3.843704e-05 301 3.010000e+00 5.037583e-05 4.388595e-05 3.863038e-05 302 3.020000e+00 5.054483e-05 4.406758e-05 3.882321e-05 303 3.030000e+00 5.071340e-05 4.424872e-05 3.901551e-05 304 3.040000e+00 5.088154e-05 4.442939e-05 3.920729e-05 305 3.050000e+00 5.104924e-05 4.460959e-05 3.939856e-05 306 3.060000e+00 5.121651e-05 4.478931e-05 3.958931e-05 307 3.070000e+00 5.138335e-05 4.496855e-05 3.977954e-05 308 3.080000e+00 5.154976e-05 4.514732e-05 3.996925e-05 309 3.090000e+00 5.171574e-05 4.532562e-05 4.015845e-05 310 3.100000e+00 5.188128e-05 4.550344e-05 4.034713e-05 311 3.110000e+00 5.204640e-05 4.568079e-05 4.053529e-05 312 3.120000e+00 5.221108e-05 4.585766e-05 4.072294e-05 313 3.130000e+00 5.237533e-05 4.603406e-05 4.091007e-05 314 3.140000e+00 5.253916e-05 4.620998e-05 4.109669e-05 315 3.150000e+00 5.270255e-05 4.638544e-05 4.128279e-05 316 3.160000e+00 5.286552e-05 4.656042e-05 4.146837e-05 317 3.170000e+00 5.302806e-05 4.673493e-05 4.165344e-05 318 3.180000e+00 5.319017e-05 4.690897e-05 4.183800e-05 319 3.190000e+00 5.335185e-05 4.708254e-05 4.202204e-05 320 3.200000e+00 5.351310e-05 4.725563e-05 4.220557e-05 321 3.210000e+00 5.367393e-05 4.742826e-05 4.238859e-05 322 3.220000e+00 5.383433e-05 4.760041e-05 4.257109e-05 323 3.230000e+00 5.399430e-05 4.777210e-05 4.275308e-05 324 3.240000e+00 5.415385e-05 4.794331e-05 4.293456e-05 325 3.250000e+00 5.431297e-05 4.811406e-05 4.311553e-05 326 3.260000e+00 5.447167e-05 4.828434e-05 4.329598e-05 327 3.270000e+00 5.462994e-05 4.845415e-05 4.347593e-05 328 3.280000e+00 5.478779e-05 4.862349e-05 4.365536e-05 329 3.290000e+00 5.494522e-05 4.879236e-05 4.383429e-05 330 3.300000e+00 5.510222e-05 4.896077e-05 4.401270e-05 331 3.310000e+00 5.525879e-05 4.912871e-05 4.419061e-05 332 3.320000e+00 5.541495e-05 4.929619e-05 4.436800e-05 333 3.330000e+00 5.557068e-05 4.946320e-05 4.454489e-05 334 3.340000e+00 5.572599e-05 4.962974e-05 4.472127e-05 335 3.350000e+00 5.588088e-05 4.979582e-05 4.489714e-05 336 3.360000e+00 5.603535e-05 4.996143e-05 4.507251e-05 337 3.370000e+00 5.618939e-05 5.012658e-05 4.524736e-05 338 3.380000e+00 5.634302e-05 5.029127e-05 4.542172e-05 339 3.390000e+00 5.649623e-05 5.045549e-05 4.559556e-05 340 3.400000e+00 5.664901e-05 5.061925e-05 4.576890e-05 341 3.410000e+00 5.680138e-05 5.078255e-05 4.594174e-05 342 3.420000e+00 5.695333e-05 5.094538e-05 4.611407e-05 343 3.430000e+00 5.710486e-05 5.110776e-05 4.628590e-05 344 3.440000e+00 5.725598e-05 5.126967e-05 4.645722e-05 Index v-sweep v1#branch v2#branch v3#branch -------------------------------------------------------------------------------- 345 3.450000e+00 5.740667e-05 5.143112e-05 4.662804e-05 346 3.460000e+00 5.755695e-05 5.159211e-05 4.679836e-05 347 3.470000e+00 5.770682e-05 5.175265e-05 4.696818e-05 348 3.480000e+00 5.785626e-05 5.191272e-05 4.713749e-05 349 3.490000e+00 5.800530e-05 5.207234e-05 4.730631e-05 350 3.500000e+00 5.815391e-05 5.223149e-05 4.747462e-05 351 3.510000e+00 5.830212e-05 5.239019e-05 4.764243e-05 352 3.520000e+00 5.844991e-05 5.254843e-05 4.780975e-05 353 3.530000e+00 5.859728e-05 5.270622e-05 4.797657e-05 354 3.540000e+00 5.874424e-05 5.286355e-05 4.814288e-05 355 3.550000e+00 5.889079e-05 5.302042e-05 4.830870e-05 356 3.560000e+00 5.903693e-05 5.317684e-05 4.847402e-05 357 3.570000e+00 5.918266e-05 5.333281e-05 4.863885e-05 358 3.580000e+00 5.932797e-05 5.348832e-05 4.880318e-05 359 3.590000e+00 5.947288e-05 5.364337e-05 4.896701e-05 360 3.600000e+00 5.961737e-05 5.379798e-05 4.913035e-05 361 3.610000e+00 5.976146e-05 5.395213e-05 4.929320e-05 362 3.620000e+00 5.990513e-05 5.410582e-05 4.945555e-05 363 3.630000e+00 6.004840e-05 5.425907e-05 4.961740e-05 364 3.640000e+00 6.019126e-05 5.441187e-05 4.977877e-05 365 3.650000e+00 6.033371e-05 5.456421e-05 4.993964e-05 366 3.660000e+00 6.047575e-05 5.471611e-05 5.010002e-05 367 3.670000e+00 6.061739e-05 5.486755e-05 5.025991e-05 368 3.680000e+00 6.075862e-05 5.501855e-05 5.041931e-05 369 3.690000e+00 6.089944e-05 5.516910e-05 5.057821e-05 370 3.700000e+00 6.103986e-05 5.531920e-05 5.073663e-05 371 3.710000e+00 6.117988e-05 5.546886e-05 5.089456e-05 372 3.720000e+00 6.131949e-05 5.561806e-05 5.105201e-05 373 3.730000e+00 6.145870e-05 5.576683e-05 5.120896e-05 374 3.740000e+00 6.159750e-05 5.591514e-05 5.136543e-05 375 3.750000e+00 6.173590e-05 5.606301e-05 5.152141e-05 376 3.760000e+00 6.187390e-05 5.621044e-05 5.167691e-05 377 3.770000e+00 6.201150e-05 5.635742e-05 5.183192e-05 378 3.780000e+00 6.214869e-05 5.650396e-05 5.198645e-05 379 3.790000e+00 6.228549e-05 5.665006e-05 5.214049e-05 380 3.800000e+00 6.242189e-05 5.679571e-05 5.229405e-05 381 3.810000e+00 6.255788e-05 5.694093e-05 5.244713e-05 382 3.820000e+00 6.269348e-05 5.708570e-05 5.259973e-05 383 3.830000e+00 6.282868e-05 5.723003e-05 5.275184e-05 384 3.840000e+00 6.296348e-05 5.737393e-05 5.290348e-05 385 3.850000e+00 6.309789e-05 5.751738e-05 5.305463e-05 386 3.860000e+00 6.323190e-05 5.766039e-05 5.320531e-05 387 3.870000e+00 6.336551e-05 5.780297e-05 5.335551e-05 388 3.880000e+00 6.349872e-05 5.794511e-05 5.350523e-05 389 3.890000e+00 6.363154e-05 5.808681e-05 5.365447e-05 390 3.900000e+00 6.376397e-05 5.822808e-05 5.380324e-05 391 3.910000e+00 6.389600e-05 5.836891e-05 5.395153e-05 392 3.920000e+00 6.402764e-05 5.850931e-05 5.409934e-05 393 3.930000e+00 6.415889e-05 5.864927e-05 5.424668e-05 394 3.940000e+00 6.428974e-05 5.878880e-05 5.439355e-05 395 3.950000e+00 6.442020e-05 5.892790e-05 5.453994e-05 396 3.960000e+00 6.455027e-05 5.906656e-05 5.468586e-05 397 3.970000e+00 6.467995e-05 5.920479e-05 5.483131e-05 398 3.980000e+00 6.480924e-05 5.934259e-05 5.497629e-05 399 3.990000e+00 6.493815e-05 5.947996e-05 5.512080e-05 400 4.000000e+00 6.506666e-05 5.961690e-05 5.526484e-05 401 4.010000e+00 6.519478e-05 5.975342e-05 5.540841e-05 402 4.020000e+00 6.532252e-05 5.988950e-05 5.555151e-05 Index v-sweep v1#branch v2#branch v3#branch -------------------------------------------------------------------------------- 403 4.030000e+00 6.544986e-05 6.002515e-05 5.569415e-05 404 4.040000e+00 6.557683e-05 6.016038e-05 5.583631e-05 405 4.050000e+00 6.570340e-05 6.029518e-05 5.597802e-05 406 4.060000e+00 6.582959e-05 6.042955e-05 5.611925e-05 407 4.070000e+00 6.595540e-05 6.056350e-05 5.626003e-05 408 4.080000e+00 6.608082e-05 6.069703e-05 5.640033e-05 409 4.090000e+00 6.620585e-05 6.083013e-05 5.654018e-05 410 4.100000e+00 6.633051e-05 6.096281e-05 5.667956e-05 411 4.110000e+00 6.645478e-05 6.109506e-05 5.681848e-05 412 4.120000e+00 6.657867e-05 6.122689e-05 5.695694e-05 413 4.130000e+00 6.670218e-05 6.135830e-05 5.709494e-05 414 4.140000e+00 6.682530e-05 6.148929e-05 5.723248e-05 415 4.150000e+00 6.694805e-05 6.161986e-05 5.736957e-05 416 4.160000e+00 6.707042e-05 6.175001e-05 5.750619e-05 417 4.170000e+00 6.719241e-05 6.187974e-05 5.764236e-05 418 4.180000e+00 6.731402e-05 6.200906e-05 5.777807e-05 419 4.190000e+00 6.743525e-05 6.213795e-05 5.791332e-05 420 4.200000e+00 6.755610e-05 6.226643e-05 5.804812e-05 421 4.210000e+00 6.767658e-05 6.239450e-05 5.818247e-05 422 4.220000e+00 6.779668e-05 6.252214e-05 5.831636e-05 423 4.230000e+00 6.791641e-05 6.264938e-05 5.844980e-05 424 4.240000e+00 6.803576e-05 6.277619e-05 5.858279e-05 425 4.250000e+00 6.815474e-05 6.290260e-05 5.871532e-05 426 4.260000e+00 6.827334e-05 6.302859e-05 5.884741e-05 427 4.270000e+00 6.839157e-05 6.315417e-05 5.897905e-05 428 4.280000e+00 6.850943e-05 6.327934e-05 5.911024e-05 429 4.290000e+00 6.862692e-05 6.340410e-05 5.924098e-05 430 4.300000e+00 6.874404e-05 6.352845e-05 5.937127e-05 431 4.310000e+00 6.886078e-05 6.365239e-05 5.950112e-05 432 4.320000e+00 6.897716e-05 6.377592e-05 5.963052e-05 433 4.330000e+00 6.909316e-05 6.389905e-05 5.975947e-05 434 4.340000e+00 6.920880e-05 6.402176e-05 5.988799e-05 435 4.350000e+00 6.932407e-05 6.414407e-05 6.001605e-05 436 4.360000e+00 6.943897e-05 6.426598e-05 6.014368e-05 437 4.370000e+00 6.955350e-05 6.438747e-05 6.027087e-05 438 4.380000e+00 6.966767e-05 6.450857e-05 6.039761e-05 439 4.390000e+00 6.978147e-05 6.462926e-05 6.052391e-05 440 4.400000e+00 6.989491e-05 6.474955e-05 6.064978e-05 441 4.410000e+00 7.000798e-05 6.486943e-05 6.077520e-05 442 4.420000e+00 7.012069e-05 6.498892e-05 6.090019e-05 443 4.430000e+00 7.023304e-05 6.510800e-05 6.102474e-05 444 4.440000e+00 7.034502e-05 6.522669e-05 6.114886e-05 445 4.450000e+00 7.045665e-05 6.534497e-05 6.127254e-05 446 4.460000e+00 7.056791e-05 6.546285e-05 6.139578e-05 447 4.470000e+00 7.067881e-05 6.558034e-05 6.151860e-05 448 4.480000e+00 7.078935e-05 6.569743e-05 6.164098e-05 449 4.490000e+00 7.089953e-05 6.581413e-05 6.176292e-05 450 4.500000e+00 7.100935e-05 6.593042e-05 6.188444e-05 451 4.510000e+00 7.111881e-05 6.604633e-05 6.200552e-05 452 4.520000e+00 7.122792e-05 6.616183e-05 6.212618e-05 453 4.530000e+00 7.133667e-05 6.627695e-05 6.224641e-05 454 4.540000e+00 7.144506e-05 6.639167e-05 6.236621e-05 455 4.550000e+00 7.155310e-05 6.650600e-05 6.248558e-05 456 4.560000e+00 7.166078e-05 6.661994e-05 6.260452e-05 457 4.570000e+00 7.176811e-05 6.673349e-05 6.272304e-05 458 4.580000e+00 7.187508e-05 6.684664e-05 6.284114e-05 459 4.590000e+00 7.198170e-05 6.695941e-05 6.295881e-05 460 4.600000e+00 7.208797e-05 6.707179e-05 6.307606e-05 Index v-sweep v1#branch v2#branch v3#branch -------------------------------------------------------------------------------- 461 4.610000e+00 7.219389e-05 6.718378e-05 6.319289e-05 462 4.620000e+00 7.229946e-05 6.729539e-05 6.330929e-05 463 4.630000e+00 7.240467e-05 6.740660e-05 6.342528e-05 464 4.640000e+00 7.250954e-05 6.751744e-05 6.354084e-05 465 4.650000e+00 7.261405e-05 6.762788e-05 6.365599e-05 466 4.660000e+00 7.271822e-05 6.773795e-05 6.377072e-05 467 4.670000e+00 7.282204e-05 6.784763e-05 6.388503e-05 468 4.680000e+00 7.292551e-05 6.795692e-05 6.399892e-05 469 4.690000e+00 7.302864e-05 6.806584e-05 6.411240e-05 470 4.700000e+00 7.313142e-05 6.817437e-05 6.422547e-05 471 4.710000e+00 7.323385e-05 6.828253e-05 6.433812e-05 472 4.720000e+00 7.333594e-05 6.839030e-05 6.445036e-05 473 4.730000e+00 7.343769e-05 6.849770e-05 6.456218e-05 474 4.740000e+00 7.353909e-05 6.860471e-05 6.467360e-05 475 4.750000e+00 7.364015e-05 6.871135e-05 6.478460e-05 476 4.760000e+00 7.374087e-05 6.881761e-05 6.489520e-05 477 4.770000e+00 7.384124e-05 6.892350e-05 6.500538e-05 478 4.780000e+00 7.394128e-05 6.902901e-05 6.511516e-05 479 4.790000e+00 7.404097e-05 6.913415e-05 6.522453e-05 480 4.800000e+00 7.414033e-05 6.923891e-05 6.533350e-05 481 4.810000e+00 7.423934e-05 6.934330e-05 6.544206e-05 482 4.820000e+00 7.433802e-05 6.944731e-05 6.555021e-05 483 4.830000e+00 7.443636e-05 6.955096e-05 6.565796e-05 484 4.840000e+00 7.453437e-05 6.965423e-05 6.576531e-05 485 4.850000e+00 7.463203e-05 6.975714e-05 6.587226e-05 486 4.860000e+00 7.472937e-05 6.985967e-05 6.597880e-05 487 4.870000e+00 7.482636e-05 6.996184e-05 6.608495e-05 488 4.880000e+00 7.492302e-05 7.006364e-05 6.619069e-05 489 4.890000e+00 7.501935e-05 7.016507e-05 6.629604e-05 490 4.900000e+00 7.511535e-05 7.026614e-05 6.640099e-05 491 4.910000e+00 7.521101e-05 7.036684e-05 6.650554e-05 492 4.920000e+00 7.530634e-05 7.046717e-05 6.660970e-05 493 4.930000e+00 7.540134e-05 7.056714e-05 6.671346e-05 494 4.940000e+00 7.549601e-05 7.066675e-05 6.681683e-05 495 4.950000e+00 7.559035e-05 7.076599e-05 6.691980e-05 496 4.960000e+00 7.568436e-05 7.086488e-05 6.702239e-05 497 4.970000e+00 7.577805e-05 7.096340e-05 6.712458e-05 498 4.980000e+00 7.587140e-05 7.106156e-05 6.722638e-05 499 4.990000e+00 7.596443e-05 7.115936e-05 6.732778e-05 500 5.000000e+00 7.605713e-05 7.125681e-05 6.742881e-05 Test of MOS BSIM2 implementation; DC transfer curve -------------------------------------------------------------------------------- Index v-sweep v4#branch v5#branch -------------------------------------------------------------------------------- 0 0.000000e+00 6.689618e-12 8.882936e-12 1 1.000000e-02 6.689618e-12 8.882936e-12 2 2.000000e-02 6.689618e-12 8.882936e-12 3 3.000000e-02 6.689618e-12 8.882936e-12 4 4.000000e-02 6.689618e-12 8.882936e-12 5 5.000000e-02 6.689618e-12 8.882936e-12 6 6.000000e-02 6.689618e-12 8.882936e-12 7 7.000000e-02 6.689618e-12 8.882936e-12 8 8.000000e-02 6.689618e-12 8.882936e-12 9 9.000000e-02 6.689618e-12 8.882936e-12 10 1.000000e-01 6.689618e-12 8.882936e-12 11 1.100000e-01 6.689618e-12 8.882936e-12 12 1.200000e-01 6.689618e-12 8.882936e-12 13 1.300000e-01 6.689618e-12 8.882936e-12 14 1.400000e-01 6.689618e-12 8.882936e-12 15 1.500000e-01 6.689618e-12 8.882936e-12 16 1.600000e-01 6.689618e-12 8.882936e-12 17 1.700000e-01 6.689618e-12 8.882936e-12 18 1.800000e-01 6.689618e-12 8.882936e-12 19 1.900000e-01 6.689618e-12 8.882936e-12 20 2.000000e-01 6.689618e-12 8.882936e-12 21 2.100000e-01 6.689618e-12 8.882936e-12 22 2.200000e-01 6.689618e-12 8.882936e-12 23 2.300000e-01 6.689618e-12 8.882936e-12 24 2.400000e-01 6.689618e-12 8.882936e-12 25 2.500000e-01 6.689618e-12 8.882936e-12 26 2.600000e-01 6.689618e-12 8.882936e-12 27 2.700000e-01 6.689618e-12 8.882936e-12 28 2.800000e-01 6.689618e-12 8.882936e-12 29 2.900000e-01 6.689618e-12 8.882936e-12 30 3.000000e-01 6.689618e-12 8.882936e-12 31 3.100000e-01 6.689618e-12 8.882936e-12 32 3.200000e-01 6.689618e-12 8.882936e-12 33 3.300000e-01 6.689618e-12 8.882936e-12 34 3.400000e-01 6.689618e-12 8.882936e-12 35 3.500000e-01 6.689618e-12 8.882936e-12 36 3.600000e-01 6.689618e-12 8.882936e-12 37 3.700000e-01 6.689618e-12 8.882936e-12 38 3.800000e-01 6.689618e-12 8.882936e-12 39 3.900000e-01 6.689618e-12 8.882936e-12 40 4.000000e-01 6.689618e-12 8.882936e-12 41 4.100000e-01 6.689618e-12 8.882936e-12 42 4.200000e-01 6.689618e-12 8.882936e-12 43 4.300000e-01 6.689618e-12 8.882936e-12 44 4.400000e-01 6.689618e-12 8.882936e-12 45 4.500000e-01 6.689618e-12 8.882936e-12 46 4.600000e-01 6.689618e-12 8.882936e-12 47 4.700000e-01 6.689618e-12 8.882936e-12 48 4.800000e-01 6.689618e-12 8.882936e-12 49 4.900000e-01 6.689618e-12 8.882936e-12 50 5.000000e-01 6.689618e-12 8.882936e-12 51 5.100000e-01 6.689618e-12 8.882936e-12 52 5.200000e-01 6.689618e-12 8.882936e-12 53 5.300000e-01 6.689618e-12 8.882936e-12 54 5.400000e-01 6.689618e-12 8.882936e-12 Index v-sweep v4#branch v5#branch -------------------------------------------------------------------------------- 55 5.500000e-01 6.689618e-12 8.882936e-12 56 5.600000e-01 6.689618e-12 8.882936e-12 57 5.700000e-01 6.689618e-12 8.882936e-12 58 5.800000e-01 6.689618e-12 8.882936e-12 59 5.900000e-01 6.689618e-12 8.882936e-12 60 6.000000e-01 6.689618e-12 8.882936e-12 61 6.100000e-01 6.689618e-12 8.882936e-12 62 6.200000e-01 6.689618e-12 8.882936e-12 63 6.300000e-01 6.689618e-12 8.882936e-12 64 6.400000e-01 6.689618e-12 8.882936e-12 65 6.500000e-01 6.689618e-12 8.882936e-12 66 6.600000e-01 6.689618e-12 8.882936e-12 67 6.700000e-01 6.689618e-12 8.882936e-12 68 6.800000e-01 6.689618e-12 8.882936e-12 69 6.900000e-01 6.689618e-12 8.882936e-12 70 7.000000e-01 6.689618e-12 8.882936e-12 71 7.100000e-01 6.689618e-12 8.882936e-12 72 7.200000e-01 6.689618e-12 8.882936e-12 73 7.300000e-01 6.689618e-12 8.882936e-12 74 7.400000e-01 6.689618e-12 8.882936e-12 75 7.500000e-01 6.689618e-12 8.882936e-12 76 7.600000e-01 6.689618e-12 8.882936e-12 77 7.700000e-01 6.689618e-12 8.882936e-12 78 7.800000e-01 6.689618e-12 8.882936e-12 79 7.900000e-01 6.689618e-12 8.882936e-12 80 8.000000e-01 6.689619e-12 8.882936e-12 81 8.100000e-01 6.689619e-12 8.882936e-12 82 8.200000e-01 6.689619e-12 8.882936e-12 83 8.300000e-01 6.689619e-12 8.882936e-12 84 8.400000e-01 6.689619e-12 8.882936e-12 85 8.500000e-01 6.689619e-12 8.882936e-12 86 8.600000e-01 6.689620e-12 8.882936e-12 87 8.700000e-01 6.689620e-12 8.882936e-12 88 8.800000e-01 6.689621e-12 8.882936e-12 89 8.900000e-01 6.689622e-12 8.882936e-12 90 9.000000e-01 6.689623e-12 8.882936e-12 91 9.100000e-01 6.689625e-12 8.882936e-12 92 9.200000e-01 6.689628e-12 8.882936e-12 93 9.300000e-01 6.689632e-12 8.882936e-12 94 9.400000e-01 6.689638e-12 8.882936e-12 95 9.500000e-01 6.689645e-12 8.882936e-12 96 9.600000e-01 6.689657e-12 8.882936e-12 97 9.700000e-01 6.689672e-12 8.882936e-12 98 9.800000e-01 6.689695e-12 8.882936e-12 99 9.900000e-01 6.689726e-12 8.882936e-12 100 1.000000e+00 6.689771e-12 8.882936e-12 101 1.010000e+00 6.689834e-12 8.882936e-12 102 1.020000e+00 6.689923e-12 8.882936e-12 103 1.030000e+00 6.690049e-12 8.882936e-12 104 1.040000e+00 6.690228e-12 8.882936e-12 105 1.050000e+00 6.690479e-12 8.882936e-12 106 1.060000e+00 6.690836e-12 8.882936e-12 107 1.070000e+00 6.691339e-12 8.882936e-12 108 1.080000e+00 6.692051e-12 8.882936e-12 109 1.090000e+00 6.693057e-12 8.882936e-12 110 1.100000e+00 6.694479e-12 8.882936e-12 111 1.110000e+00 6.696489e-12 8.882937e-12 112 1.120000e+00 6.699330e-12 8.882937e-12 Index v-sweep v4#branch v5#branch -------------------------------------------------------------------------------- 113 1.130000e+00 6.703347e-12 8.882937e-12 114 1.140000e+00 6.709025e-12 8.882938e-12 115 1.150000e+00 6.717052e-12 8.882939e-12 116 1.160000e+00 6.728398e-12 8.882940e-12 117 1.170000e+00 6.744437e-12 8.882942e-12 118 1.180000e+00 6.767109e-12 8.882945e-12 119 1.190000e+00 6.799158e-12 8.882949e-12 120 1.200000e+00 6.844462e-12 8.882954e-12 121 1.210000e+00 6.908502e-12 8.882962e-12 122 1.220000e+00 6.999028e-12 8.882973e-12 123 1.230000e+00 7.126995e-12 8.882989e-12 124 1.240000e+00 7.307885e-12 8.883012e-12 125 1.250000e+00 7.563586e-12 8.883045e-12 126 1.260000e+00 7.925040e-12 8.883091e-12 127 1.270000e+00 8.435983e-12 8.883158e-12 128 1.280000e+00 9.158237e-12 8.883253e-12 129 1.290000e+00 1.017920e-11 8.883389e-12 130 1.300000e+00 1.162240e-11 8.883583e-12 131 1.310000e+00 1.366246e-11 8.883861e-12 132 1.320000e+00 1.654624e-11 8.884257e-12 133 1.330000e+00 2.062265e-11 8.884823e-12 134 1.340000e+00 2.638494e-11 8.885632e-12 135 1.350000e+00 3.453032e-11 8.886787e-12 136 1.360000e+00 4.604436e-11 8.888436e-12 137 1.370000e+00 6.232020e-11 8.890793e-12 138 1.380000e+00 8.532715e-11 8.894159e-12 139 1.390000e+00 1.178489e-10 8.898967e-12 140 1.400000e+00 1.638205e-10 8.905834e-12 141 1.410000e+00 2.288041e-10 8.915644e-12 142 1.420000e+00 3.206624e-10 8.929657e-12 143 1.430000e+00 4.505095e-10 8.949673e-12 144 1.440000e+00 6.340561e-10 8.978263e-12 145 1.450000e+00 8.935097e-10 9.019102e-12 146 1.460000e+00 1.260262e-09 9.077437e-12 147 1.470000e+00 1.778687e-09 9.160762e-12 148 1.480000e+00 2.511509e-09 9.279784e-12 149 1.490000e+00 3.547393e-09 9.449795e-12 150 1.500000e+00 5.018149e-09 9.692639e-12 151 1.510000e+00 7.859680e-09 1.003952e-11 152 1.520000e+00 1.340846e-08 1.053500e-11 153 1.530000e+00 2.310073e-08 1.124274e-11 154 1.540000e+00 3.879507e-08 1.225367e-11 155 1.550000e+00 6.271747e-08 1.369768e-11 156 1.560000e+00 9.738410e-08 1.576030e-11 157 1.570000e+00 1.454822e-07 1.870653e-11 158 1.580000e+00 2.097272e-07 2.291491e-11 159 1.590000e+00 2.927514e-07 2.892611e-11 160 1.600000e+00 3.970654e-07 3.751245e-11 161 1.610000e+00 5.250868e-07 4.977709e-11 162 1.620000e+00 6.791951e-07 6.729574e-11 163 1.630000e+00 8.617770e-07 9.231917e-11 164 1.640000e+00 1.072315e-06 1.280623e-10 165 1.650000e+00 1.292128e-06 1.791172e-10 166 1.660000e+00 1.517161e-06 2.520433e-10 167 1.670000e+00 1.747136e-06 3.562097e-10 168 1.680000e+00 1.981831e-06 5.049991e-10 169 1.690000e+00 2.221045e-06 7.175271e-10 170 1.700000e+00 2.464572e-06 1.021098e-09 Index v-sweep v4#branch v5#branch -------------------------------------------------------------------------------- 171 1.710000e+00 2.712188e-06 1.454712e-09 172 1.720000e+00 2.963647e-06 2.088159e-09 173 1.730000e+00 3.218677e-06 3.656526e-09 174 1.740000e+00 3.476985e-06 7.254985e-09 175 1.750000e+00 3.738257e-06 1.428567e-08 176 1.760000e+00 4.002161e-06 2.663718e-08 177 1.770000e+00 4.268348e-06 4.662594e-08 178 1.780000e+00 4.536460e-06 7.692251e-08 179 1.790000e+00 4.806126e-06 1.204321e-07 180 1.800000e+00 5.076967e-06 1.801301e-07 181 1.810000e+00 5.348601e-06 2.589179e-07 182 1.820000e+00 5.620636e-06 3.595650e-07 183 1.830000e+00 5.892680e-06 4.847378e-07 184 1.840000e+00 6.164321e-06 6.370655e-07 185 1.850000e+00 6.435219e-06 8.191936e-07 186 1.860000e+00 6.705372e-06 1.032161e-06 187 1.870000e+00 6.974807e-06 1.257083e-06 188 1.880000e+00 7.243544e-06 1.487569e-06 189 1.890000e+00 7.511603e-06 1.723318e-06 190 1.900000e+00 7.779001e-06 1.964079e-06 191 1.910000e+00 8.045750e-06 2.209610e-06 192 1.920000e+00 8.311864e-06 2.459658e-06 193 1.930000e+00 8.577353e-06 2.713944e-06 194 1.940000e+00 8.842225e-06 2.972165e-06 195 1.950000e+00 9.106489e-06 3.233988e-06 196 1.960000e+00 9.370151e-06 3.499058e-06 197 1.970000e+00 9.633217e-06 3.767000e-06 198 1.980000e+00 9.895692e-06 4.037419e-06 199 1.990000e+00 1.015758e-05 4.309908e-06 200 2.000000e+00 1.041889e-05 4.584046e-06 201 2.010000e+00 1.067962e-05 4.859404e-06 202 2.020000e+00 1.093977e-05 5.135547e-06 203 2.030000e+00 1.119935e-05 5.412034e-06 204 2.040000e+00 1.145836e-05 5.688419e-06 205 2.050000e+00 1.171680e-05 5.964256e-06 206 2.060000e+00 1.197468e-05 6.239176e-06 207 2.070000e+00 1.223199e-05 6.513283e-06 208 2.080000e+00 1.248873e-05 6.786629e-06 209 2.090000e+00 1.274492e-05 7.059239e-06 210 2.100000e+00 1.300054e-05 7.331131e-06 211 2.110000e+00 1.325560e-05 7.602321e-06 212 2.120000e+00 1.351010e-05 7.872823e-06 213 2.130000e+00 1.376404e-05 8.142648e-06 214 2.140000e+00 1.401743e-05 8.411807e-06 215 2.150000e+00 1.427026e-05 8.680308e-06 216 2.160000e+00 1.452252e-05 8.948160e-06 217 2.170000e+00 1.477424e-05 9.215368e-06 218 2.180000e+00 1.502539e-05 9.481939e-06 219 2.190000e+00 1.527599e-05 9.747877e-06 220 2.200000e+00 1.552603e-05 1.001319e-05 221 2.210000e+00 1.577551e-05 1.027787e-05 222 2.220000e+00 1.602444e-05 1.054193e-05 223 2.230000e+00 1.627281e-05 1.080538e-05 224 2.240000e+00 1.652063e-05 1.106821e-05 225 2.250000e+00 1.676789e-05 1.133042e-05 226 2.260000e+00 1.701459e-05 1.159203e-05 227 2.270000e+00 1.726074e-05 1.185302e-05 228 2.280000e+00 1.750632e-05 1.211340e-05 Index v-sweep v4#branch v5#branch -------------------------------------------------------------------------------- 229 2.290000e+00 1.775136e-05 1.237318e-05 230 2.300000e+00 1.799583e-05 1.263235e-05 231 2.310000e+00 1.823975e-05 1.289092e-05 232 2.320000e+00 1.848311e-05 1.314888e-05 233 2.330000e+00 1.872591e-05 1.340623e-05 234 2.340000e+00 1.896816e-05 1.366299e-05 235 2.350000e+00 1.920984e-05 1.391914e-05 236 2.360000e+00 1.945097e-05 1.417468e-05 237 2.370000e+00 1.969154e-05 1.442963e-05 238 2.380000e+00 1.993155e-05 1.468397e-05 239 2.390000e+00 2.017100e-05 1.493771e-05 240 2.400000e+00 2.040990e-05 1.519085e-05 241 2.410000e+00 2.064823e-05 1.544339e-05 242 2.420000e+00 2.088601e-05 1.569533e-05 243 2.430000e+00 2.112322e-05 1.594666e-05 244 2.440000e+00 2.135988e-05 1.619740e-05 245 2.450000e+00 2.159597e-05 1.644753e-05 246 2.460000e+00 2.183151e-05 1.669706e-05 247 2.470000e+00 2.206648e-05 1.694599e-05 248 2.480000e+00 2.230090e-05 1.719432e-05 249 2.490000e+00 2.253475e-05 1.744204e-05 250 2.500000e+00 2.276804e-05 1.768917e-05 251 2.510000e+00 2.300077e-05 1.793569e-05 252 2.520000e+00 2.323294e-05 1.818161e-05 253 2.530000e+00 2.346455e-05 1.842692e-05 254 2.540000e+00 2.369559e-05 1.867164e-05 255 2.550000e+00 2.392607e-05 1.891575e-05 256 2.560000e+00 2.415599e-05 1.915926e-05 257 2.570000e+00 2.438535e-05 1.940216e-05 258 2.580000e+00 2.461415e-05 1.964447e-05 259 2.590000e+00 2.484238e-05 1.988616e-05 260 2.600000e+00 2.507005e-05 2.012726e-05 261 2.610000e+00 2.529716e-05 2.036775e-05 262 2.620000e+00 2.552370e-05 2.060764e-05 263 2.630000e+00 2.574968e-05 2.084692e-05 264 2.640000e+00 2.597510e-05 2.108560e-05 265 2.650000e+00 2.619995e-05 2.132367e-05 266 2.660000e+00 2.642424e-05 2.156114e-05 267 2.670000e+00 2.664797e-05 2.179800e-05 268 2.680000e+00 2.687113e-05 2.203426e-05 269 2.690000e+00 2.709373e-05 2.226991e-05 270 2.700000e+00 2.731576e-05 2.250496e-05 271 2.710000e+00 2.753723e-05 2.273940e-05 272 2.720000e+00 2.775814e-05 2.297324e-05 273 2.730000e+00 2.797848e-05 2.320647e-05 274 2.740000e+00 2.819826e-05 2.343909e-05 275 2.750000e+00 2.841748e-05 2.367111e-05 276 2.760000e+00 2.863613e-05 2.390253e-05 277 2.770000e+00 2.885421e-05 2.413333e-05 278 2.780000e+00 2.907173e-05 2.436353e-05 279 2.790000e+00 2.928869e-05 2.459312e-05 280 2.800000e+00 2.950508e-05 2.482211e-05 281 2.810000e+00 2.972091e-05 2.505049e-05 282 2.820000e+00 2.993618e-05 2.527826e-05 283 2.830000e+00 3.015088e-05 2.550543e-05 284 2.840000e+00 3.036501e-05 2.573199e-05 285 2.850000e+00 3.057859e-05 2.595794e-05 286 2.860000e+00 3.079160e-05 2.618328e-05 Index v-sweep v4#branch v5#branch -------------------------------------------------------------------------------- 287 2.870000e+00 3.100404e-05 2.640802e-05 288 2.880000e+00 3.121592e-05 2.663215e-05 289 2.890000e+00 3.142724e-05 2.685568e-05 290 2.900000e+00 3.163799e-05 2.707860e-05 291 2.910000e+00 3.184818e-05 2.730091e-05 292 2.920000e+00 3.205781e-05 2.752261e-05 293 2.930000e+00 3.226687e-05 2.774371e-05 294 2.940000e+00 3.247537e-05 2.796420e-05 295 2.950000e+00 3.268331e-05 2.818408e-05 296 2.960000e+00 3.289068e-05 2.840336e-05 297 2.970000e+00 3.309750e-05 2.862203e-05 298 2.980000e+00 3.330374e-05 2.884009e-05 299 2.990000e+00 3.350943e-05 2.905755e-05 300 3.000000e+00 3.371456e-05 2.927440e-05 301 3.010000e+00 3.391912e-05 2.949065e-05 302 3.020000e+00 3.412312e-05 2.970629e-05 303 3.030000e+00 3.432656e-05 2.992132e-05 304 3.040000e+00 3.452943e-05 3.013575e-05 305 3.050000e+00 3.473175e-05 3.034957e-05 306 3.060000e+00 3.493351e-05 3.056279e-05 307 3.070000e+00 3.513470e-05 3.077540e-05 308 3.080000e+00 3.533533e-05 3.098741e-05 309 3.090000e+00 3.553541e-05 3.119881e-05 310 3.100000e+00 3.573492e-05 3.140960e-05 311 3.110000e+00 3.593388e-05 3.161980e-05 312 3.120000e+00 3.613227e-05 3.182938e-05 313 3.130000e+00 3.633011e-05 3.203837e-05 314 3.140000e+00 3.652738e-05 3.224675e-05 315 3.150000e+00 3.672410e-05 3.245453e-05 316 3.160000e+00 3.692026e-05 3.266170e-05 317 3.170000e+00 3.711586e-05 3.286827e-05 318 3.180000e+00 3.731090e-05 3.307424e-05 319 3.190000e+00 3.750539e-05 3.327960e-05 320 3.200000e+00 3.769932e-05 3.348437e-05 321 3.210000e+00 3.789269e-05 3.368853e-05 322 3.220000e+00 3.808551e-05 3.389209e-05 323 3.230000e+00 3.827777e-05 3.409505e-05 324 3.240000e+00 3.846948e-05 3.429740e-05 325 3.250000e+00 3.866062e-05 3.449916e-05 326 3.260000e+00 3.885122e-05 3.470032e-05 327 3.270000e+00 3.904126e-05 3.490088e-05 328 3.280000e+00 3.923075e-05 3.510083e-05 329 3.290000e+00 3.941968e-05 3.530019e-05 330 3.300000e+00 3.960806e-05 3.549895e-05 331 3.310000e+00 3.979588e-05 3.569711e-05 332 3.320000e+00 3.998316e-05 3.589468e-05 333 3.330000e+00 4.016988e-05 3.609164e-05 334 3.340000e+00 4.035605e-05 3.628801e-05 335 3.350000e+00 4.054167e-05 3.648379e-05 336 3.360000e+00 4.072674e-05 3.667896e-05 337 3.370000e+00 4.091126e-05 3.687354e-05 338 3.380000e+00 4.109523e-05 3.706753e-05 339 3.390000e+00 4.127865e-05 3.726092e-05 340 3.400000e+00 4.146152e-05 3.745372e-05 341 3.410000e+00 4.164384e-05 3.764592e-05 342 3.420000e+00 4.182561e-05 3.783753e-05 343 3.430000e+00 4.200684e-05 3.802854e-05 344 3.440000e+00 4.218752e-05 3.821897e-05 Index v-sweep v4#branch v5#branch -------------------------------------------------------------------------------- 345 3.450000e+00 4.236765e-05 3.840880e-05 346 3.460000e+00 4.254724e-05 3.859804e-05 347 3.470000e+00 4.272628e-05 3.878669e-05 348 3.480000e+00 4.290478e-05 3.897475e-05 349 3.490000e+00 4.308273e-05 3.916222e-05 350 3.500000e+00 4.326014e-05 3.934910e-05 351 3.510000e+00 4.343701e-05 3.953539e-05 352 3.520000e+00 4.361333e-05 3.972109e-05 353 3.530000e+00 4.378911e-05 3.990621e-05 354 3.540000e+00 4.396435e-05 4.009074e-05 355 3.550000e+00 4.413905e-05 4.027468e-05 356 3.560000e+00 4.431321e-05 4.045804e-05 357 3.570000e+00 4.448683e-05 4.064081e-05 358 3.580000e+00 4.465991e-05 4.082300e-05 359 3.590000e+00 4.483245e-05 4.100460e-05 360 3.600000e+00 4.500445e-05 4.118562e-05 361 3.610000e+00 4.517592e-05 4.136606e-05 362 3.620000e+00 4.534685e-05 4.154591e-05 363 3.630000e+00 4.551724e-05 4.172518e-05 364 3.640000e+00 4.568710e-05 4.190388e-05 365 3.650000e+00 4.585642e-05 4.208199e-05 366 3.660000e+00 4.602520e-05 4.225952e-05 367 3.670000e+00 4.619346e-05 4.243648e-05 368 3.680000e+00 4.636118e-05 4.261285e-05 369 3.690000e+00 4.652837e-05 4.278865e-05 370 3.700000e+00 4.669502e-05 4.296387e-05 371 3.710000e+00 4.686115e-05 4.313852e-05 372 3.720000e+00 4.702674e-05 4.331259e-05 373 3.730000e+00 4.719180e-05 4.348608e-05 374 3.740000e+00 4.735634e-05 4.365900e-05 375 3.750000e+00 4.752035e-05 4.383135e-05 376 3.760000e+00 4.768382e-05 4.400313e-05 377 3.770000e+00 4.784678e-05 4.417433e-05 378 3.780000e+00 4.800920e-05 4.434497e-05 379 3.790000e+00 4.817110e-05 4.451503e-05 380 3.800000e+00 4.833247e-05 4.468452e-05 381 3.810000e+00 4.849332e-05 4.485345e-05 382 3.820000e+00 4.865365e-05 4.502180e-05 383 3.830000e+00 4.881345e-05 4.518959e-05 384 3.840000e+00 4.897274e-05 4.535681e-05 385 3.850000e+00 4.913149e-05 4.552347e-05 386 3.860000e+00 4.928973e-05 4.568956e-05 387 3.870000e+00 4.944745e-05 4.585509e-05 388 3.880000e+00 4.960465e-05 4.602005e-05 389 3.890000e+00 4.976133e-05 4.618446e-05 390 3.900000e+00 4.991749e-05 4.634830e-05 391 3.910000e+00 5.007314e-05 4.651157e-05 392 3.920000e+00 5.022827e-05 4.667429e-05 393 3.930000e+00 5.038288e-05 4.683645e-05 394 3.940000e+00 5.053698e-05 4.699805e-05 395 3.950000e+00 5.069057e-05 4.715910e-05 396 3.960000e+00 5.084364e-05 4.731958e-05 397 3.970000e+00 5.099620e-05 4.747952e-05 398 3.980000e+00 5.114824e-05 4.763889e-05 399 3.990000e+00 5.129978e-05 4.779771e-05 400 4.000000e+00 5.145080e-05 4.795598e-05 401 4.010000e+00 5.160132e-05 4.811370e-05 402 4.020000e+00 5.175133e-05 4.827086e-05 Index v-sweep v4#branch v5#branch -------------------------------------------------------------------------------- 403 4.030000e+00 5.190083e-05 4.842747e-05 404 4.040000e+00 5.204982e-05 4.858354e-05 405 4.050000e+00 5.219831e-05 4.873905e-05 406 4.060000e+00 5.234629e-05 4.889402e-05 407 4.070000e+00 5.249376e-05 4.904843e-05 408 4.080000e+00 5.264074e-05 4.920231e-05 409 4.090000e+00 5.278721e-05 4.935563e-05 410 4.100000e+00 5.293317e-05 4.950841e-05 411 4.110000e+00 5.307864e-05 4.966065e-05 412 4.120000e+00 5.322360e-05 4.981235e-05 413 4.130000e+00 5.336807e-05 4.996350e-05 414 4.140000e+00 5.351203e-05 5.011411e-05 415 4.150000e+00 5.365550e-05 5.026419e-05 416 4.160000e+00 5.379847e-05 5.041372e-05 417 4.170000e+00 5.394095e-05 5.056271e-05 418 4.180000e+00 5.408293e-05 5.071117e-05 419 4.190000e+00 5.422441e-05 5.085909e-05 420 4.200000e+00 5.436540e-05 5.100648e-05 421 4.210000e+00 5.450590e-05 5.115333e-05 422 4.220000e+00 5.464590e-05 5.129965e-05 423 4.230000e+00 5.478542e-05 5.144544e-05 424 4.240000e+00 5.492444e-05 5.159069e-05 425 4.250000e+00 5.506297e-05 5.173541e-05 426 4.260000e+00 5.520102e-05 5.187961e-05 427 4.270000e+00 5.533858e-05 5.202327e-05 428 4.280000e+00 5.547565e-05 5.216641e-05 429 4.290000e+00 5.561223e-05 5.230902e-05 430 4.300000e+00 5.574833e-05 5.245110e-05 431 4.310000e+00 5.588394e-05 5.259266e-05 432 4.320000e+00 5.601907e-05 5.273370e-05 433 4.330000e+00 5.615372e-05 5.287421e-05 434 4.340000e+00 5.628789e-05 5.301420e-05 435 4.350000e+00 5.642157e-05 5.315368e-05 436 4.360000e+00 5.655478e-05 5.329263e-05 437 4.370000e+00 5.668751e-05 5.343106e-05 438 4.380000e+00 5.681975e-05 5.356897e-05 439 4.390000e+00 5.695153e-05 5.370637e-05 440 4.400000e+00 5.708282e-05 5.384325e-05 441 4.410000e+00 5.721364e-05 5.397962e-05 442 4.420000e+00 5.734398e-05 5.411547e-05 443 4.430000e+00 5.747385e-05 5.425081e-05 444 4.440000e+00 5.760325e-05 5.438563e-05 445 4.450000e+00 5.773218e-05 5.451995e-05 446 4.460000e+00 5.786064e-05 5.465376e-05 447 4.470000e+00 5.798862e-05 5.478706e-05 448 4.480000e+00 5.811614e-05 5.491985e-05 449 4.490000e+00 5.824318e-05 5.505213e-05 450 4.500000e+00 5.836977e-05 5.518391e-05 451 4.510000e+00 5.849588e-05 5.531518e-05 452 4.520000e+00 5.862153e-05 5.544595e-05 453 4.530000e+00 5.874671e-05 5.557622e-05 454 4.540000e+00 5.887144e-05 5.570599e-05 455 4.550000e+00 5.899569e-05 5.583525e-05 456 4.560000e+00 5.911949e-05 5.596402e-05 457 4.570000e+00 5.924283e-05 5.609228e-05 458 4.580000e+00 5.936570e-05 5.622005e-05 459 4.590000e+00 5.948812e-05 5.634733e-05 460 4.600000e+00 5.961008e-05 5.647411e-05 Index v-sweep v4#branch v5#branch -------------------------------------------------------------------------------- 461 4.610000e+00 5.973158e-05 5.660039e-05 462 4.620000e+00 5.985263e-05 5.672618e-05 463 4.630000e+00 5.997322e-05 5.685148e-05 464 4.640000e+00 6.009335e-05 5.697629e-05 465 4.650000e+00 6.021304e-05 5.710061e-05 466 4.660000e+00 6.033227e-05 5.722443e-05 467 4.670000e+00 6.045105e-05 5.734778e-05 468 4.680000e+00 6.056938e-05 5.747063e-05 469 4.690000e+00 6.068726e-05 5.759300e-05 470 4.700000e+00 6.080469e-05 5.771488e-05 471 4.710000e+00 6.092167e-05 5.783628e-05 472 4.720000e+00 6.103821e-05 5.795720e-05 473 4.730000e+00 6.115430e-05 5.807764e-05 474 4.740000e+00 6.126995e-05 5.819759e-05 475 4.750000e+00 6.138515e-05 5.831707e-05 476 4.760000e+00 6.149991e-05 5.843607e-05 477 4.770000e+00 6.161423e-05 5.855459e-05 478 4.780000e+00 6.172811e-05 5.867263e-05 479 4.790000e+00 6.184154e-05 5.879021e-05 480 4.800000e+00 6.195454e-05 5.890730e-05 481 4.810000e+00 6.206710e-05 5.902393e-05 482 4.820000e+00 6.217923e-05 5.914008e-05 483 4.830000e+00 6.229091e-05 5.925576e-05 484 4.840000e+00 6.240217e-05 5.937097e-05 485 4.850000e+00 6.251298e-05 5.948571e-05 486 4.860000e+00 6.262337e-05 5.959999e-05 487 4.870000e+00 6.273332e-05 5.971380e-05 488 4.880000e+00 6.284284e-05 5.982714e-05 489 4.890000e+00 6.295194e-05 5.994002e-05 490 4.900000e+00 6.306060e-05 6.005244e-05 491 4.910000e+00 6.316883e-05 6.016440e-05 492 4.920000e+00 6.327664e-05 6.027589e-05 493 4.930000e+00 6.338402e-05 6.038693e-05 494 4.940000e+00 6.349097e-05 6.049750e-05 495 4.950000e+00 6.359750e-05 6.060762e-05 496 4.960000e+00 6.370361e-05 6.071728e-05 497 4.970000e+00 6.380929e-05 6.082649e-05 498 4.980000e+00 6.391455e-05 6.093524e-05 499 4.990000e+00 6.401940e-05 6.104354e-05 500 5.000000e+00 6.412382e-05 6.115139e-05 tmpk8ny_4pz/tests/bsim2/test.cir0000644000175000017500000000664013546075722017022 0ustar carstencarstenTest of MOS BSIM2 implementation; DC transfer curve ****************************************************************** MN1 13 2 0 4 NMOS L=10U W=50.0U AD=100P AS=100P PD=40U PS=40U MN2 23 2 0 5 NMOS L=10U W=50.0U AD=100P AS=100P PD=40U PS=40U MN3 33 2 0 6 NMOS L=10U W=50.0U AD=100P AS=100P PD=40U PS=40U MN4 43 2 0 7 NMOS L=10U W=50.0U AD=100P AS=100P PD=40U PS=40U MN5 53 2 0 8 NMOS L=10U W=50.0U AD=100P AS=100P PD=40U PS=40U VDS 3 0 0.05 VGS 2 0 0 V1 3 13 0 V2 3 23 0 V3 3 33 0 V4 3 43 0 V5 3 53 0 VBS1 4 0 0 VBS2 5 0 -1 VBS3 6 0 -2 VBS4 7 0 -3 VBS5 8 0 -4 *************************************************************** *.OPTIONS LIMPTS=5000 ACCT .OPTIONS NOACCT .DC VGS 0 5 0.01 .PRINT DC I(V1) I(V2) I(V3) I(V4) I(V5) *.PLOT DC I(V1) I(V2) I(V3) I(V4) I(V5) *.OPTIONS LIMPTS=501 ACCT *VGS 2 0 PWL(0 0 5 5) *.TRAN 0 5 0.01 *.PRINT TRAN I(V1) I(V2) I(V3) I(V4) I(V5) ***** MODEL PARAMETERS TEMP2 ******************** * This file contains the BSIM2 process file parameters as they should * be input to the .model card of spice3c1. .model nmos nmos level=5 + vfb = -0.7919 lvfb = -0.0266 wvfb = 0.0000 + phi = 0.8039 lphi = 0.0042 wphi = 0.0000 + k1 = 0.7286 lk1 = 0.0309 wk1 = 0.0000 + k2 = -0.0506 lk2 = 0.0786 wk2 = 0.0000 + mu0 = 453.2926 dl = 0.1553 dw = 0.0000 + mu0b = -5.4925 lmu0b = -1.9192 wmu0b = 0.0000 + mus0 = 781.7117 lmus0 = 25.2769 wmus0 = 0.0000 + musb = 25.5724 lmusb = -10.0060 wmusb = 0.0000 + mu20 = 0.9390 lmu20 = -0.0840 wmu20 = 0.0000 + mu2b = 0.0753 lmu2b = -0.0148 wmu2b = 0.0000 + mu2g = 0.1804 lmu2g = 0.0181 wmu2g = 0.0000 + mu30 = 44.9689 lmu30 = -0.0933 wmu30 = 0.0000 + mu3b = 0.5871 lmu3b = 1.0793 wmu3b = 0.0000 + mu3g = -11.6723 lmu3g = 0.6804 wmu3g = 0.0000 + mu40 = 0.2682 lmu40 = 2.3969 wmu40 = 0.0000 + mu4b = -0.3179 lmu4b = 0.1264 wmu4b = 0.0000 + mu4g = -0.2654 lmu4g = -0.5702 wmu4g = 0.0000 + ua0 = 0.0441 lua0 = 0.2283 wua0 = 0.0000 + uab = -0.0045 luab = -0.0105 wuab = 0.0000 + ub0 = 0.0125 lub0 = -0.0051 wub0 = 0.0000 + ubb = -0.0015 lubb = 0.0010 wubb = 0.0000 + u10 = 0.1262 lu10 = 0.5563 wu10 = 0.0000 + u1d = -0.2967 lu1d = -0.0062 wu1d = 0.0000 + u1b = 0.0960 lu1b = -0.0345 wu1b = 0.0000 + eta0 = -0.0373 leta0 = 0.0271 weta0 = 0.0000 + etab = 0.0004 letab = -0.0041 wetab = 0.0000 + n0 = 0.8032 ln0 = 0.1734 wn0 = 0.0000 + nd = 0.0105 lnd = -0.0091 wnd = 0.0000 + nb = 0.5978 lnb = -0.1638 wnb = 0.0000 + vof0 = 1.4977 lvof0 = -0.1766 wvof0 = 0.0000 + vofd = 0.1795 lvofd = -0.1247 wvofd = 0.0000 + vofb = 0.8368 lvofb = -0.3432 wvofb = 0.0000 + ai0 = 32.0150 lai0 = 8.2816 wai0 = 0.0000 + aib = -19.5396 laib = 4.9347 waib = 0.0000 + bi0 = 37.6044 lbi0 = -1.8713 wbi0 = 0.0000 + bib = -2.5109 lbib = 0.7903 wbib = 0.0000 + vghigh = 0.2342 lvghigh = -0.0007 wvghigh = 0.0000 + vglow = -0.1023 lvglow = 0.0038 wvglow = 0.0000 + tox = 0.0150 temp = 27 vdd = 5.0 vgg = 5.0 vbb = -3.0 + cgdo = 1.0e-10 cgso = 1.0e-10 cgbo = 2.5e-11 + xpart = 0 + rsh = 0 cj = 0.0002 cjsw = 1.0e-10 + js = 5e-5 pb = 0.7 pbsw = 0.8 + mj = 0.5 mjsw = 0.33 wdf = 0 + dell = 0 ***** ***** .END tmpk8ny_4pz/tests/bsim3soifd/0000755000175000017500000000000013546075722016364 5ustar carstencarstentmpk8ny_4pz/tests/bsim3soifd/RampVg2.out0000644000175000017500000014273713546075722020411 0ustar carstencarsten Circuit: * BSIMSOI (FD) example Error on line 3 : .model n1 nmos level= 55 tnom = 27 tox = 4.5e-09 tsi = 5e-8 tbox = 8e-08 mobmod = 0 capmod = 3 shmod = 0 paramchk=0 wint = 0 lint = -2e-08 vth0 = .52 k1 = .39 k2 = .1 k3 = 0 kb1 = .95 k3b = 2.2 nlx = 7.2e-08 dvt0 = .55 dvt1 = .28 dvt2 = -1.4 dvt0w = 0 dvt1w = 0 dvt2w = 0 nch = 3.3e+17 nsub = 1e+15 ngate = 1e+20 dvbd0 = 60.0 dvbd1 = 1.1 vbsa = 0.0 kb3 = 2.2 delp = 0.02 abp = 0.9 mxc = 0.9 adice0 = 0.93 kbjt1 = 1.0e-08 edl = .0000005 ndiode = 1.13 ntun = 14.0 isbjt = 2e-6 isdif = 1e-6 istun = 0.0 isrec = 1e-5 xbjt = 0.01 xdif = 0.01 xrec = 0.01 xtun = 0.001 u0 = 352 ua = 1.3e-11 ub = 1.7e-18 uc = -4e-10 w0 = 1.16e-06 ags = .25 a1 = 0 a2 = 1 b0 = .01 b1 = 10 rdsw = 700 prwg = 0 prwb = -.2 wr = 1 rbody = 0.0 rbsh = 0.0 a0 = 1.4 keta = -.67 vsat = 135000 dwg = 0 dwb = 0 alpha0 = 0.0 alpha1 = 1.5 beta0 = 20.5 aii = 1.2 bii = 0.1e-7 cii = 0.8 dii = 0.6 voff = -.14 nfactor = .7 cdsc = .00002 cdscb = 0 cdscd = 0 cit = 0 pclm = 2.9 pvag = 12 pdiblc1 = .18 pdiblc2 = .004 pdiblcb = -.234 drout = .2 delta = .01 eta0 = .01 etab = 0 dsub = .3 rth0 94 = .006 clc = .0000001 cle = .6 cf = 1e-20 ckappa = .6 cgdl = 1e-20 cgsl = 1e-20 kt1 = -.3 kt1l = 0 kt2 = .022 ute = -1.5 ua1 = 4.31e-09 ub1 = -7.61e-18 uc1 = -5.6e-11 prt = 760 at = 22400 cgso = 1e-10 cgdo = 1e-10 cjswg = 5e-10 tt=3e-10 asd = 0.3 csdesw = 1e-12 Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Warning: Pd = 0 is less than W. Warning: Ps = 0 is less than W. Initial Transient Solution -------------------------- Node Voltage ---- ------- d 1.5 g 0 e 0 s 0 b 0 vb#branch 0 vs#branch 9.60282e-12 ve#branch 0 vg#branch 1.5e-20 vd#branch -9.60282e-12 No. of Data Rows : 1029 * BSIMSOI (FD) example -------------------------------------------------------------------------------- Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 0 0.000000e+00 0.000000e+00 0.000000e+00 1 1.000000e-14 0.000000e+00 0.000000e+00 2 2.000000e-14 0.000000e+00 0.000000e+00 3 4.000000e-14 0.000000e+00 0.000000e+00 4 8.000000e-14 0.000000e+00 0.000000e+00 5 1.600000e-13 0.000000e+00 0.000000e+00 6 3.200000e-13 0.000000e+00 0.000000e+00 7 6.400000e-13 0.000000e+00 0.000000e+00 8 1.280000e-12 0.000000e+00 0.000000e+00 9 2.280000e-12 0.000000e+00 0.000000e+00 10 3.280000e-12 0.000000e+00 0.000000e+00 11 4.280000e-12 0.000000e+00 0.000000e+00 12 5.280000e-12 0.000000e+00 0.000000e+00 13 6.280000e-12 0.000000e+00 0.000000e+00 14 7.280000e-12 0.000000e+00 0.000000e+00 15 8.280000e-12 0.000000e+00 0.000000e+00 16 9.280000e-12 0.000000e+00 0.000000e+00 17 1.028000e-11 0.000000e+00 0.000000e+00 18 1.128000e-11 0.000000e+00 0.000000e+00 19 1.228000e-11 0.000000e+00 0.000000e+00 20 1.328000e-11 0.000000e+00 0.000000e+00 21 1.428000e-11 0.000000e+00 0.000000e+00 22 1.528000e-11 0.000000e+00 0.000000e+00 23 1.628000e-11 0.000000e+00 0.000000e+00 24 1.728000e-11 0.000000e+00 0.000000e+00 25 1.828000e-11 0.000000e+00 0.000000e+00 26 1.928000e-11 0.000000e+00 0.000000e+00 27 2.000000e-11 0.000000e+00 0.000000e+00 28 2.010000e-11 0.000000e+00 2.000000e-04 29 2.030000e-11 0.000000e+00 6.000000e-04 30 2.070000e-11 0.000000e+00 1.400000e-03 31 2.150000e-11 0.000000e+00 3.000000e-03 32 2.250000e-11 0.000000e+00 5.000000e-03 33 2.350000e-11 0.000000e+00 7.000000e-03 34 2.450000e-11 0.000000e+00 9.000000e-03 35 2.550000e-11 0.000000e+00 1.100000e-02 36 2.650000e-11 0.000000e+00 1.300000e-02 37 2.750000e-11 0.000000e+00 1.500000e-02 38 2.850000e-11 0.000000e+00 1.700000e-02 39 2.950000e-11 0.000000e+00 1.900000e-02 40 3.050000e-11 0.000000e+00 2.100000e-02 41 3.150000e-11 0.000000e+00 2.300000e-02 42 3.250000e-11 0.000000e+00 2.500000e-02 43 3.350000e-11 0.000000e+00 2.700000e-02 44 3.450000e-11 0.000000e+00 2.900000e-02 45 3.550000e-11 0.000000e+00 3.100000e-02 46 3.650000e-11 0.000000e+00 3.300000e-02 47 3.750000e-11 0.000000e+00 3.500000e-02 48 3.850000e-11 0.000000e+00 3.700000e-02 49 3.950000e-11 0.000000e+00 3.900000e-02 50 4.050000e-11 0.000000e+00 4.100000e-02 51 4.150000e-11 0.000000e+00 4.300000e-02 52 4.250000e-11 0.000000e+00 4.500000e-02 53 4.350000e-11 0.000000e+00 4.700000e-02 54 4.450000e-11 0.000000e+00 4.900000e-02 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 55 4.550000e-11 0.000000e+00 5.100000e-02 56 4.650000e-11 0.000000e+00 5.300000e-02 57 4.750000e-11 0.000000e+00 5.500000e-02 58 4.850000e-11 0.000000e+00 5.700000e-02 59 4.950000e-11 0.000000e+00 5.900000e-02 60 5.050000e-11 0.000000e+00 6.100000e-02 61 5.150000e-11 0.000000e+00 6.300000e-02 62 5.250000e-11 0.000000e+00 6.500000e-02 63 5.350000e-11 0.000000e+00 6.700000e-02 64 5.450000e-11 0.000000e+00 6.900000e-02 65 5.550000e-11 0.000000e+00 7.100000e-02 66 5.650000e-11 0.000000e+00 7.300000e-02 67 5.750000e-11 0.000000e+00 7.500000e-02 68 5.850000e-11 0.000000e+00 7.700000e-02 69 5.950000e-11 0.000000e+00 7.900000e-02 70 6.050000e-11 0.000000e+00 8.100000e-02 71 6.150000e-11 0.000000e+00 8.300000e-02 72 6.250000e-11 0.000000e+00 8.500000e-02 73 6.350000e-11 0.000000e+00 8.700000e-02 74 6.450000e-11 0.000000e+00 8.900000e-02 75 6.550000e-11 0.000000e+00 9.100000e-02 76 6.650000e-11 0.000000e+00 9.300000e-02 77 6.750000e-11 0.000000e+00 9.500000e-02 78 6.850000e-11 0.000000e+00 9.700000e-02 79 6.950000e-11 0.000000e+00 9.900000e-02 80 7.050000e-11 0.000000e+00 1.010000e-01 81 7.150000e-11 0.000000e+00 1.030000e-01 82 7.250000e-11 0.000000e+00 1.050000e-01 83 7.350000e-11 0.000000e+00 1.070000e-01 84 7.450000e-11 0.000000e+00 1.090000e-01 85 7.550000e-11 0.000000e+00 1.110000e-01 86 7.650000e-11 0.000000e+00 1.130000e-01 87 7.750000e-11 0.000000e+00 1.150000e-01 88 7.850000e-11 0.000000e+00 1.170000e-01 89 7.950000e-11 0.000000e+00 1.190000e-01 90 8.050000e-11 0.000000e+00 1.210000e-01 91 8.150000e-11 0.000000e+00 1.230000e-01 92 8.250000e-11 0.000000e+00 1.250000e-01 93 8.350000e-11 0.000000e+00 1.270000e-01 94 8.450000e-11 0.000000e+00 1.290000e-01 95 8.550000e-11 0.000000e+00 1.310000e-01 96 8.650000e-11 0.000000e+00 1.330000e-01 97 8.750000e-11 0.000000e+00 1.350000e-01 98 8.850000e-11 0.000000e+00 1.370000e-01 99 8.950000e-11 0.000000e+00 1.390000e-01 100 9.050000e-11 0.000000e+00 1.410000e-01 101 9.150000e-11 0.000000e+00 1.430000e-01 102 9.250000e-11 0.000000e+00 1.450000e-01 103 9.350000e-11 0.000000e+00 1.470000e-01 104 9.450000e-11 0.000000e+00 1.490000e-01 105 9.550000e-11 0.000000e+00 1.510000e-01 106 9.650000e-11 0.000000e+00 1.530000e-01 107 9.750000e-11 0.000000e+00 1.550000e-01 108 9.850000e-11 0.000000e+00 1.570000e-01 109 9.950000e-11 0.000000e+00 1.590000e-01 110 1.005000e-10 0.000000e+00 1.610000e-01 111 1.015000e-10 0.000000e+00 1.630000e-01 112 1.025000e-10 0.000000e+00 1.650000e-01 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 113 1.035000e-10 0.000000e+00 1.670000e-01 114 1.045000e-10 0.000000e+00 1.690000e-01 115 1.055000e-10 0.000000e+00 1.710000e-01 116 1.065000e-10 0.000000e+00 1.730000e-01 117 1.075000e-10 0.000000e+00 1.750000e-01 118 1.085000e-10 0.000000e+00 1.770000e-01 119 1.095000e-10 0.000000e+00 1.790000e-01 120 1.105000e-10 0.000000e+00 1.810000e-01 121 1.115000e-10 0.000000e+00 1.830000e-01 122 1.125000e-10 0.000000e+00 1.850000e-01 123 1.135000e-10 0.000000e+00 1.870000e-01 124 1.145000e-10 0.000000e+00 1.890000e-01 125 1.155000e-10 0.000000e+00 1.910000e-01 126 1.165000e-10 0.000000e+00 1.930000e-01 127 1.175000e-10 0.000000e+00 1.950000e-01 128 1.185000e-10 0.000000e+00 1.970000e-01 129 1.195000e-10 0.000000e+00 1.990000e-01 130 1.200000e-10 0.000000e+00 2.000000e-01 131 1.201000e-10 0.000000e+00 2.000000e-01 132 1.203000e-10 0.000000e+00 2.000000e-01 133 1.207000e-10 0.000000e+00 2.000000e-01 134 1.215000e-10 0.000000e+00 2.000000e-01 135 1.225000e-10 0.000000e+00 2.000000e-01 136 1.235000e-10 0.000000e+00 2.000000e-01 137 1.245000e-10 0.000000e+00 2.000000e-01 138 1.255000e-10 0.000000e+00 2.000000e-01 139 1.265000e-10 0.000000e+00 2.000000e-01 140 1.275000e-10 0.000000e+00 2.000000e-01 141 1.285000e-10 0.000000e+00 2.000000e-01 142 1.295000e-10 0.000000e+00 2.000000e-01 143 1.305000e-10 0.000000e+00 2.000000e-01 144 1.315000e-10 0.000000e+00 2.000000e-01 145 1.325000e-10 0.000000e+00 2.000000e-01 146 1.335000e-10 0.000000e+00 2.000000e-01 147 1.345000e-10 0.000000e+00 2.000000e-01 148 1.355000e-10 0.000000e+00 2.000000e-01 149 1.365000e-10 0.000000e+00 2.000000e-01 150 1.375000e-10 0.000000e+00 2.000000e-01 151 1.385000e-10 0.000000e+00 2.000000e-01 152 1.395000e-10 0.000000e+00 2.000000e-01 153 1.405000e-10 0.000000e+00 2.000000e-01 154 1.415000e-10 0.000000e+00 2.000000e-01 155 1.425000e-10 0.000000e+00 2.000000e-01 156 1.435000e-10 0.000000e+00 2.000000e-01 157 1.445000e-10 0.000000e+00 2.000000e-01 158 1.455000e-10 0.000000e+00 2.000000e-01 159 1.465000e-10 0.000000e+00 2.000000e-01 160 1.475000e-10 0.000000e+00 2.000000e-01 161 1.485000e-10 0.000000e+00 2.000000e-01 162 1.495000e-10 0.000000e+00 2.000000e-01 163 1.505000e-10 0.000000e+00 2.000000e-01 164 1.515000e-10 0.000000e+00 2.000000e-01 165 1.525000e-10 0.000000e+00 2.000000e-01 166 1.535000e-10 0.000000e+00 2.000000e-01 167 1.545000e-10 0.000000e+00 2.000000e-01 168 1.555000e-10 0.000000e+00 2.000000e-01 169 1.565000e-10 0.000000e+00 2.000000e-01 170 1.575000e-10 0.000000e+00 2.000000e-01 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 171 1.585000e-10 0.000000e+00 2.000000e-01 172 1.595000e-10 0.000000e+00 2.000000e-01 173 1.605000e-10 0.000000e+00 2.000000e-01 174 1.615000e-10 0.000000e+00 2.000000e-01 175 1.625000e-10 0.000000e+00 2.000000e-01 176 1.635000e-10 0.000000e+00 2.000000e-01 177 1.645000e-10 0.000000e+00 2.000000e-01 178 1.655000e-10 0.000000e+00 2.000000e-01 179 1.665000e-10 0.000000e+00 2.000000e-01 180 1.675000e-10 0.000000e+00 2.000000e-01 181 1.685000e-10 0.000000e+00 2.000000e-01 182 1.695000e-10 0.000000e+00 2.000000e-01 183 1.705000e-10 0.000000e+00 2.000000e-01 184 1.715000e-10 0.000000e+00 2.000000e-01 185 1.725000e-10 0.000000e+00 2.000000e-01 186 1.735000e-10 0.000000e+00 2.000000e-01 187 1.745000e-10 0.000000e+00 2.000000e-01 188 1.755000e-10 0.000000e+00 2.000000e-01 189 1.765000e-10 0.000000e+00 2.000000e-01 190 1.775000e-10 0.000000e+00 2.000000e-01 191 1.785000e-10 0.000000e+00 2.000000e-01 192 1.795000e-10 0.000000e+00 2.000000e-01 193 1.805000e-10 0.000000e+00 2.000000e-01 194 1.815000e-10 0.000000e+00 2.000000e-01 195 1.825000e-10 0.000000e+00 2.000000e-01 196 1.835000e-10 0.000000e+00 2.000000e-01 197 1.845000e-10 0.000000e+00 2.000000e-01 198 1.855000e-10 0.000000e+00 2.000000e-01 199 1.865000e-10 0.000000e+00 2.000000e-01 200 1.875000e-10 0.000000e+00 2.000000e-01 201 1.885000e-10 0.000000e+00 2.000000e-01 202 1.895000e-10 0.000000e+00 2.000000e-01 203 1.905000e-10 0.000000e+00 2.000000e-01 204 1.915000e-10 0.000000e+00 2.000000e-01 205 1.925000e-10 0.000000e+00 2.000000e-01 206 1.935000e-10 0.000000e+00 2.000000e-01 207 1.945000e-10 0.000000e+00 2.000000e-01 208 1.955000e-10 0.000000e+00 2.000000e-01 209 1.965000e-10 0.000000e+00 2.000000e-01 210 1.975000e-10 0.000000e+00 2.000000e-01 211 1.985000e-10 0.000000e+00 2.000000e-01 212 1.995000e-10 0.000000e+00 2.000000e-01 213 2.005000e-10 0.000000e+00 2.000000e-01 214 2.015000e-10 0.000000e+00 2.000000e-01 215 2.025000e-10 0.000000e+00 2.000000e-01 216 2.035000e-10 0.000000e+00 2.000000e-01 217 2.045000e-10 0.000000e+00 2.000000e-01 218 2.055000e-10 0.000000e+00 2.000000e-01 219 2.065000e-10 0.000000e+00 2.000000e-01 220 2.075000e-10 0.000000e+00 2.000000e-01 221 2.085000e-10 0.000000e+00 2.000000e-01 222 2.095000e-10 0.000000e+00 2.000000e-01 223 2.105000e-10 0.000000e+00 2.000000e-01 224 2.115000e-10 0.000000e+00 2.000000e-01 225 2.125000e-10 0.000000e+00 2.000000e-01 226 2.135000e-10 0.000000e+00 2.000000e-01 227 2.145000e-10 0.000000e+00 2.000000e-01 228 2.155000e-10 0.000000e+00 2.000000e-01 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 229 2.165000e-10 0.000000e+00 2.000000e-01 230 2.175000e-10 0.000000e+00 2.000000e-01 231 2.185000e-10 0.000000e+00 2.000000e-01 232 2.195000e-10 0.000000e+00 2.000000e-01 233 2.205000e-10 0.000000e+00 2.000000e-01 234 2.215000e-10 0.000000e+00 2.000000e-01 235 2.225000e-10 0.000000e+00 2.000000e-01 236 2.235000e-10 0.000000e+00 2.000000e-01 237 2.245000e-10 0.000000e+00 2.000000e-01 238 2.255000e-10 0.000000e+00 2.000000e-01 239 2.265000e-10 0.000000e+00 2.000000e-01 240 2.275000e-10 0.000000e+00 2.000000e-01 241 2.285000e-10 0.000000e+00 2.000000e-01 242 2.295000e-10 0.000000e+00 2.000000e-01 243 2.305000e-10 0.000000e+00 2.000000e-01 244 2.315000e-10 0.000000e+00 2.000000e-01 245 2.325000e-10 0.000000e+00 2.000000e-01 246 2.335000e-10 0.000000e+00 2.000000e-01 247 2.345000e-10 0.000000e+00 2.000000e-01 248 2.355000e-10 0.000000e+00 2.000000e-01 249 2.365000e-10 0.000000e+00 2.000000e-01 250 2.375000e-10 0.000000e+00 2.000000e-01 251 2.385000e-10 0.000000e+00 2.000000e-01 252 2.395000e-10 0.000000e+00 2.000000e-01 253 2.405000e-10 0.000000e+00 2.000000e-01 254 2.415000e-10 0.000000e+00 2.000000e-01 255 2.425000e-10 0.000000e+00 2.000000e-01 256 2.435000e-10 0.000000e+00 2.000000e-01 257 2.445000e-10 0.000000e+00 2.000000e-01 258 2.455000e-10 0.000000e+00 2.000000e-01 259 2.465000e-10 0.000000e+00 2.000000e-01 260 2.475000e-10 0.000000e+00 2.000000e-01 261 2.485000e-10 0.000000e+00 2.000000e-01 262 2.495000e-10 0.000000e+00 2.000000e-01 263 2.505000e-10 0.000000e+00 2.000000e-01 264 2.515000e-10 0.000000e+00 2.000000e-01 265 2.525000e-10 0.000000e+00 2.000000e-01 266 2.535000e-10 0.000000e+00 2.000000e-01 267 2.545000e-10 0.000000e+00 2.000000e-01 268 2.555000e-10 0.000000e+00 2.000000e-01 269 2.565000e-10 0.000000e+00 2.000000e-01 270 2.575000e-10 0.000000e+00 2.000000e-01 271 2.585000e-10 0.000000e+00 2.000000e-01 272 2.595000e-10 0.000000e+00 2.000000e-01 273 2.605000e-10 0.000000e+00 2.000000e-01 274 2.615000e-10 0.000000e+00 2.000000e-01 275 2.625000e-10 0.000000e+00 2.000000e-01 276 2.635000e-10 0.000000e+00 2.000000e-01 277 2.645000e-10 0.000000e+00 2.000000e-01 278 2.655000e-10 0.000000e+00 2.000000e-01 279 2.665000e-10 0.000000e+00 2.000000e-01 280 2.675000e-10 0.000000e+00 2.000000e-01 281 2.685000e-10 0.000000e+00 2.000000e-01 282 2.695000e-10 0.000000e+00 2.000000e-01 283 2.705000e-10 0.000000e+00 2.000000e-01 284 2.715000e-10 0.000000e+00 2.000000e-01 285 2.725000e-10 0.000000e+00 2.000000e-01 286 2.735000e-10 0.000000e+00 2.000000e-01 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 287 2.745000e-10 0.000000e+00 2.000000e-01 288 2.755000e-10 0.000000e+00 2.000000e-01 289 2.765000e-10 0.000000e+00 2.000000e-01 290 2.775000e-10 0.000000e+00 2.000000e-01 291 2.785000e-10 0.000000e+00 2.000000e-01 292 2.795000e-10 0.000000e+00 2.000000e-01 293 2.805000e-10 0.000000e+00 2.000000e-01 294 2.815000e-10 0.000000e+00 2.000000e-01 295 2.825000e-10 0.000000e+00 2.000000e-01 296 2.835000e-10 0.000000e+00 2.000000e-01 297 2.845000e-10 0.000000e+00 2.000000e-01 298 2.855000e-10 0.000000e+00 2.000000e-01 299 2.865000e-10 0.000000e+00 2.000000e-01 300 2.875000e-10 0.000000e+00 2.000000e-01 301 2.885000e-10 0.000000e+00 2.000000e-01 302 2.895000e-10 0.000000e+00 2.000000e-01 303 2.905000e-10 0.000000e+00 2.000000e-01 304 2.915000e-10 0.000000e+00 2.000000e-01 305 2.925000e-10 0.000000e+00 2.000000e-01 306 2.935000e-10 0.000000e+00 2.000000e-01 307 2.945000e-10 0.000000e+00 2.000000e-01 308 2.955000e-10 0.000000e+00 2.000000e-01 309 2.965000e-10 0.000000e+00 2.000000e-01 310 2.975000e-10 0.000000e+00 2.000000e-01 311 2.985000e-10 0.000000e+00 2.000000e-01 312 2.995000e-10 0.000000e+00 2.000000e-01 313 3.005000e-10 0.000000e+00 2.000000e-01 314 3.015000e-10 0.000000e+00 2.000000e-01 315 3.025000e-10 0.000000e+00 2.000000e-01 316 3.035000e-10 0.000000e+00 2.000000e-01 317 3.045000e-10 0.000000e+00 2.000000e-01 318 3.055000e-10 0.000000e+00 2.000000e-01 319 3.065000e-10 0.000000e+00 2.000000e-01 320 3.075000e-10 0.000000e+00 2.000000e-01 321 3.085000e-10 0.000000e+00 2.000000e-01 322 3.095000e-10 0.000000e+00 2.000000e-01 323 3.105000e-10 0.000000e+00 2.000000e-01 324 3.115000e-10 0.000000e+00 2.000000e-01 325 3.125000e-10 0.000000e+00 2.000000e-01 326 3.135000e-10 0.000000e+00 2.000000e-01 327 3.145000e-10 0.000000e+00 2.000000e-01 328 3.155000e-10 0.000000e+00 2.000000e-01 329 3.165000e-10 0.000000e+00 2.000000e-01 330 3.175000e-10 0.000000e+00 2.000000e-01 331 3.185000e-10 0.000000e+00 2.000000e-01 332 3.195000e-10 0.000000e+00 2.000000e-01 333 3.200000e-10 0.000000e+00 2.000000e-01 334 3.201000e-10 0.000000e+00 1.998000e-01 335 3.203000e-10 0.000000e+00 1.994000e-01 336 3.207000e-10 0.000000e+00 1.986000e-01 337 3.215000e-10 0.000000e+00 1.970000e-01 338 3.225000e-10 0.000000e+00 1.950000e-01 339 3.235000e-10 0.000000e+00 1.930000e-01 340 3.245000e-10 0.000000e+00 1.910000e-01 341 3.255000e-10 0.000000e+00 1.890000e-01 342 3.265000e-10 0.000000e+00 1.870000e-01 343 3.275000e-10 0.000000e+00 1.850000e-01 344 3.285000e-10 0.000000e+00 1.830000e-01 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 345 3.295000e-10 0.000000e+00 1.810000e-01 346 3.305000e-10 0.000000e+00 1.790000e-01 347 3.315000e-10 0.000000e+00 1.770000e-01 348 3.325000e-10 0.000000e+00 1.750000e-01 349 3.335000e-10 0.000000e+00 1.730000e-01 350 3.345000e-10 0.000000e+00 1.710000e-01 351 3.355000e-10 0.000000e+00 1.690000e-01 352 3.365000e-10 0.000000e+00 1.670000e-01 353 3.375000e-10 0.000000e+00 1.650000e-01 354 3.385000e-10 0.000000e+00 1.630000e-01 355 3.395000e-10 0.000000e+00 1.610000e-01 356 3.405000e-10 0.000000e+00 1.590000e-01 357 3.415000e-10 0.000000e+00 1.570000e-01 358 3.425000e-10 0.000000e+00 1.550000e-01 359 3.435000e-10 0.000000e+00 1.530000e-01 360 3.445000e-10 0.000000e+00 1.510000e-01 361 3.455000e-10 0.000000e+00 1.490000e-01 362 3.465000e-10 0.000000e+00 1.470000e-01 363 3.475000e-10 0.000000e+00 1.450000e-01 364 3.485000e-10 0.000000e+00 1.430000e-01 365 3.495000e-10 0.000000e+00 1.410000e-01 366 3.505000e-10 0.000000e+00 1.390000e-01 367 3.515000e-10 0.000000e+00 1.370000e-01 368 3.525000e-10 0.000000e+00 1.350000e-01 369 3.535000e-10 0.000000e+00 1.330000e-01 370 3.545000e-10 0.000000e+00 1.310000e-01 371 3.555000e-10 0.000000e+00 1.290000e-01 372 3.565000e-10 0.000000e+00 1.270000e-01 373 3.575000e-10 0.000000e+00 1.250000e-01 374 3.585000e-10 0.000000e+00 1.230000e-01 375 3.595000e-10 0.000000e+00 1.210000e-01 376 3.605000e-10 0.000000e+00 1.190000e-01 377 3.615000e-10 0.000000e+00 1.170000e-01 378 3.625000e-10 0.000000e+00 1.150000e-01 379 3.635000e-10 0.000000e+00 1.130000e-01 380 3.645000e-10 0.000000e+00 1.110000e-01 381 3.655000e-10 0.000000e+00 1.090000e-01 382 3.665000e-10 0.000000e+00 1.070000e-01 383 3.675000e-10 0.000000e+00 1.050000e-01 384 3.685000e-10 0.000000e+00 1.030000e-01 385 3.695000e-10 0.000000e+00 1.010000e-01 386 3.705000e-10 0.000000e+00 9.900000e-02 387 3.715000e-10 0.000000e+00 9.700000e-02 388 3.725000e-10 0.000000e+00 9.500000e-02 389 3.735000e-10 0.000000e+00 9.300000e-02 390 3.745000e-10 0.000000e+00 9.100000e-02 391 3.755000e-10 0.000000e+00 8.900000e-02 392 3.765000e-10 0.000000e+00 8.700000e-02 393 3.775000e-10 0.000000e+00 8.500000e-02 394 3.785000e-10 0.000000e+00 8.300000e-02 395 3.795000e-10 0.000000e+00 8.100000e-02 396 3.805000e-10 0.000000e+00 7.900000e-02 397 3.815000e-10 0.000000e+00 7.700000e-02 398 3.825000e-10 0.000000e+00 7.500000e-02 399 3.835000e-10 0.000000e+00 7.300000e-02 400 3.845000e-10 0.000000e+00 7.100000e-02 401 3.855000e-10 0.000000e+00 6.900000e-02 402 3.865000e-10 0.000000e+00 6.700000e-02 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 403 3.875000e-10 0.000000e+00 6.500000e-02 404 3.885000e-10 0.000000e+00 6.300000e-02 405 3.895000e-10 0.000000e+00 6.100000e-02 406 3.905000e-10 0.000000e+00 5.900000e-02 407 3.915000e-10 0.000000e+00 5.700000e-02 408 3.925000e-10 0.000000e+00 5.500000e-02 409 3.935000e-10 0.000000e+00 5.300000e-02 410 3.945000e-10 0.000000e+00 5.100000e-02 411 3.955000e-10 0.000000e+00 4.900000e-02 412 3.965000e-10 0.000000e+00 4.700000e-02 413 3.975000e-10 0.000000e+00 4.500000e-02 414 3.985000e-10 0.000000e+00 4.300000e-02 415 3.995000e-10 0.000000e+00 4.100000e-02 416 4.005000e-10 0.000000e+00 3.900000e-02 417 4.015000e-10 0.000000e+00 3.700000e-02 418 4.025000e-10 0.000000e+00 3.500000e-02 419 4.035000e-10 0.000000e+00 3.300000e-02 420 4.045000e-10 0.000000e+00 3.100000e-02 421 4.055000e-10 0.000000e+00 2.900000e-02 422 4.065000e-10 0.000000e+00 2.700000e-02 423 4.075000e-10 0.000000e+00 2.500000e-02 424 4.085000e-10 0.000000e+00 2.300000e-02 425 4.095000e-10 0.000000e+00 2.100000e-02 426 4.105000e-10 0.000000e+00 1.900000e-02 427 4.115000e-10 0.000000e+00 1.700000e-02 428 4.125000e-10 0.000000e+00 1.500000e-02 429 4.135000e-10 0.000000e+00 1.300000e-02 430 4.145000e-10 0.000000e+00 1.100000e-02 431 4.155000e-10 0.000000e+00 9.000000e-03 432 4.165000e-10 0.000000e+00 7.000000e-03 433 4.175000e-10 0.000000e+00 5.000000e-03 434 4.185000e-10 0.000000e+00 3.000000e-03 435 4.195000e-10 0.000000e+00 1.000000e-03 436 4.200000e-10 0.000000e+00 3.230922e-17 437 4.201000e-10 0.000000e+00 0.000000e+00 438 4.203000e-10 0.000000e+00 0.000000e+00 439 4.207000e-10 0.000000e+00 0.000000e+00 440 4.215000e-10 0.000000e+00 0.000000e+00 441 4.225000e-10 0.000000e+00 0.000000e+00 442 4.235000e-10 0.000000e+00 0.000000e+00 443 4.245000e-10 0.000000e+00 0.000000e+00 444 4.255000e-10 0.000000e+00 0.000000e+00 445 4.265000e-10 0.000000e+00 0.000000e+00 446 4.275000e-10 0.000000e+00 0.000000e+00 447 4.285000e-10 0.000000e+00 0.000000e+00 448 4.295000e-10 0.000000e+00 0.000000e+00 449 4.305000e-10 0.000000e+00 0.000000e+00 450 4.315000e-10 0.000000e+00 0.000000e+00 451 4.325000e-10 0.000000e+00 0.000000e+00 452 4.335000e-10 0.000000e+00 0.000000e+00 453 4.345000e-10 0.000000e+00 0.000000e+00 454 4.355000e-10 0.000000e+00 0.000000e+00 455 4.365000e-10 0.000000e+00 0.000000e+00 456 4.375000e-10 0.000000e+00 0.000000e+00 457 4.385000e-10 0.000000e+00 0.000000e+00 458 4.395000e-10 0.000000e+00 0.000000e+00 459 4.405000e-10 0.000000e+00 0.000000e+00 460 4.415000e-10 0.000000e+00 0.000000e+00 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 461 4.425000e-10 0.000000e+00 0.000000e+00 462 4.435000e-10 0.000000e+00 0.000000e+00 463 4.445000e-10 0.000000e+00 0.000000e+00 464 4.455000e-10 0.000000e+00 0.000000e+00 465 4.465000e-10 0.000000e+00 0.000000e+00 466 4.475000e-10 0.000000e+00 0.000000e+00 467 4.485000e-10 0.000000e+00 0.000000e+00 468 4.495000e-10 0.000000e+00 0.000000e+00 469 4.505000e-10 0.000000e+00 0.000000e+00 470 4.515000e-10 0.000000e+00 0.000000e+00 471 4.525000e-10 0.000000e+00 0.000000e+00 472 4.535000e-10 0.000000e+00 0.000000e+00 473 4.545000e-10 0.000000e+00 0.000000e+00 474 4.555000e-10 0.000000e+00 0.000000e+00 475 4.565000e-10 0.000000e+00 0.000000e+00 476 4.575000e-10 0.000000e+00 0.000000e+00 477 4.585000e-10 0.000000e+00 0.000000e+00 478 4.595000e-10 0.000000e+00 0.000000e+00 479 4.605000e-10 0.000000e+00 0.000000e+00 480 4.615000e-10 0.000000e+00 0.000000e+00 481 4.625000e-10 0.000000e+00 0.000000e+00 482 4.635000e-10 0.000000e+00 0.000000e+00 483 4.645000e-10 0.000000e+00 0.000000e+00 484 4.655000e-10 0.000000e+00 0.000000e+00 485 4.665000e-10 0.000000e+00 0.000000e+00 486 4.675000e-10 0.000000e+00 0.000000e+00 487 4.685000e-10 0.000000e+00 0.000000e+00 488 4.695000e-10 0.000000e+00 0.000000e+00 489 4.705000e-10 0.000000e+00 0.000000e+00 490 4.715000e-10 0.000000e+00 0.000000e+00 491 4.725000e-10 0.000000e+00 0.000000e+00 492 4.735000e-10 0.000000e+00 0.000000e+00 493 4.745000e-10 0.000000e+00 0.000000e+00 494 4.755000e-10 0.000000e+00 0.000000e+00 495 4.765000e-10 0.000000e+00 0.000000e+00 496 4.775000e-10 0.000000e+00 0.000000e+00 497 4.785000e-10 0.000000e+00 0.000000e+00 498 4.795000e-10 0.000000e+00 0.000000e+00 499 4.805000e-10 0.000000e+00 0.000000e+00 500 4.815000e-10 0.000000e+00 0.000000e+00 501 4.825000e-10 0.000000e+00 0.000000e+00 502 4.835000e-10 0.000000e+00 0.000000e+00 503 4.845000e-10 0.000000e+00 0.000000e+00 504 4.855000e-10 0.000000e+00 0.000000e+00 505 4.865000e-10 0.000000e+00 0.000000e+00 506 4.875000e-10 0.000000e+00 0.000000e+00 507 4.885000e-10 0.000000e+00 0.000000e+00 508 4.895000e-10 0.000000e+00 0.000000e+00 509 4.905000e-10 0.000000e+00 0.000000e+00 510 4.915000e-10 0.000000e+00 0.000000e+00 511 4.925000e-10 0.000000e+00 0.000000e+00 512 4.935000e-10 0.000000e+00 0.000000e+00 513 4.945000e-10 0.000000e+00 0.000000e+00 514 4.955000e-10 0.000000e+00 0.000000e+00 515 4.965000e-10 0.000000e+00 0.000000e+00 516 4.975000e-10 0.000000e+00 0.000000e+00 517 4.985000e-10 0.000000e+00 0.000000e+00 518 4.995000e-10 0.000000e+00 0.000000e+00 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 519 5.005000e-10 0.000000e+00 0.000000e+00 520 5.015000e-10 0.000000e+00 0.000000e+00 521 5.025000e-10 0.000000e+00 0.000000e+00 522 5.035000e-10 0.000000e+00 0.000000e+00 523 5.045000e-10 0.000000e+00 0.000000e+00 524 5.055000e-10 0.000000e+00 0.000000e+00 525 5.065000e-10 0.000000e+00 0.000000e+00 526 5.075000e-10 0.000000e+00 0.000000e+00 527 5.085000e-10 0.000000e+00 0.000000e+00 528 5.095000e-10 0.000000e+00 0.000000e+00 529 5.105000e-10 0.000000e+00 0.000000e+00 530 5.115000e-10 0.000000e+00 0.000000e+00 531 5.125000e-10 0.000000e+00 0.000000e+00 532 5.135000e-10 0.000000e+00 0.000000e+00 533 5.145000e-10 0.000000e+00 0.000000e+00 534 5.155000e-10 0.000000e+00 0.000000e+00 535 5.165000e-10 0.000000e+00 0.000000e+00 536 5.175000e-10 0.000000e+00 0.000000e+00 537 5.185000e-10 0.000000e+00 0.000000e+00 538 5.195000e-10 0.000000e+00 0.000000e+00 539 5.205000e-10 0.000000e+00 0.000000e+00 540 5.215000e-10 0.000000e+00 0.000000e+00 541 5.225000e-10 0.000000e+00 0.000000e+00 542 5.235000e-10 0.000000e+00 0.000000e+00 543 5.245000e-10 0.000000e+00 0.000000e+00 544 5.255000e-10 0.000000e+00 0.000000e+00 545 5.265000e-10 0.000000e+00 0.000000e+00 546 5.275000e-10 0.000000e+00 0.000000e+00 547 5.285000e-10 0.000000e+00 0.000000e+00 548 5.295000e-10 0.000000e+00 0.000000e+00 549 5.305000e-10 0.000000e+00 0.000000e+00 550 5.315000e-10 0.000000e+00 0.000000e+00 551 5.325000e-10 0.000000e+00 0.000000e+00 552 5.335000e-10 0.000000e+00 0.000000e+00 553 5.345000e-10 0.000000e+00 0.000000e+00 554 5.355000e-10 0.000000e+00 0.000000e+00 555 5.365000e-10 0.000000e+00 0.000000e+00 556 5.375000e-10 0.000000e+00 0.000000e+00 557 5.385000e-10 0.000000e+00 0.000000e+00 558 5.395000e-10 0.000000e+00 0.000000e+00 559 5.405000e-10 0.000000e+00 0.000000e+00 560 5.415000e-10 0.000000e+00 0.000000e+00 561 5.425000e-10 0.000000e+00 0.000000e+00 562 5.435000e-10 0.000000e+00 0.000000e+00 563 5.445000e-10 0.000000e+00 0.000000e+00 564 5.455000e-10 0.000000e+00 0.000000e+00 565 5.465000e-10 0.000000e+00 0.000000e+00 566 5.475000e-10 0.000000e+00 0.000000e+00 567 5.485000e-10 0.000000e+00 0.000000e+00 568 5.495000e-10 0.000000e+00 0.000000e+00 569 5.505000e-10 0.000000e+00 0.000000e+00 570 5.515000e-10 0.000000e+00 0.000000e+00 571 5.525000e-10 0.000000e+00 0.000000e+00 572 5.535000e-10 0.000000e+00 0.000000e+00 573 5.545000e-10 0.000000e+00 0.000000e+00 574 5.555000e-10 0.000000e+00 0.000000e+00 575 5.565000e-10 0.000000e+00 0.000000e+00 576 5.575000e-10 0.000000e+00 0.000000e+00 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 577 5.585000e-10 0.000000e+00 0.000000e+00 578 5.595000e-10 0.000000e+00 0.000000e+00 579 5.605000e-10 0.000000e+00 0.000000e+00 580 5.615000e-10 0.000000e+00 0.000000e+00 581 5.625000e-10 0.000000e+00 0.000000e+00 582 5.635000e-10 0.000000e+00 0.000000e+00 583 5.645000e-10 0.000000e+00 0.000000e+00 584 5.655000e-10 0.000000e+00 0.000000e+00 585 5.665000e-10 0.000000e+00 0.000000e+00 586 5.675000e-10 0.000000e+00 0.000000e+00 587 5.685000e-10 0.000000e+00 0.000000e+00 588 5.695000e-10 0.000000e+00 0.000000e+00 589 5.705000e-10 0.000000e+00 0.000000e+00 590 5.715000e-10 0.000000e+00 0.000000e+00 591 5.725000e-10 0.000000e+00 0.000000e+00 592 5.735000e-10 0.000000e+00 0.000000e+00 593 5.745000e-10 0.000000e+00 0.000000e+00 594 5.755000e-10 0.000000e+00 0.000000e+00 595 5.765000e-10 0.000000e+00 0.000000e+00 596 5.775000e-10 0.000000e+00 0.000000e+00 597 5.785000e-10 0.000000e+00 0.000000e+00 598 5.795000e-10 0.000000e+00 0.000000e+00 599 5.805000e-10 0.000000e+00 0.000000e+00 600 5.815000e-10 0.000000e+00 0.000000e+00 601 5.825000e-10 0.000000e+00 0.000000e+00 602 5.835000e-10 0.000000e+00 0.000000e+00 603 5.845000e-10 0.000000e+00 0.000000e+00 604 5.855000e-10 0.000000e+00 0.000000e+00 605 5.865000e-10 0.000000e+00 0.000000e+00 606 5.875000e-10 0.000000e+00 0.000000e+00 607 5.885000e-10 0.000000e+00 0.000000e+00 608 5.895000e-10 0.000000e+00 0.000000e+00 609 5.905000e-10 0.000000e+00 0.000000e+00 610 5.915000e-10 0.000000e+00 0.000000e+00 611 5.925000e-10 0.000000e+00 0.000000e+00 612 5.935000e-10 0.000000e+00 0.000000e+00 613 5.945000e-10 0.000000e+00 0.000000e+00 614 5.955000e-10 0.000000e+00 0.000000e+00 615 5.965000e-10 0.000000e+00 0.000000e+00 616 5.975000e-10 0.000000e+00 0.000000e+00 617 5.985000e-10 0.000000e+00 0.000000e+00 618 5.995000e-10 0.000000e+00 0.000000e+00 619 6.005000e-10 0.000000e+00 0.000000e+00 620 6.015000e-10 0.000000e+00 0.000000e+00 621 6.025000e-10 0.000000e+00 0.000000e+00 622 6.035000e-10 0.000000e+00 0.000000e+00 623 6.045000e-10 0.000000e+00 0.000000e+00 624 6.055000e-10 0.000000e+00 0.000000e+00 625 6.065000e-10 0.000000e+00 0.000000e+00 626 6.075000e-10 0.000000e+00 0.000000e+00 627 6.085000e-10 0.000000e+00 0.000000e+00 628 6.095000e-10 0.000000e+00 0.000000e+00 629 6.105000e-10 0.000000e+00 0.000000e+00 630 6.115000e-10 0.000000e+00 0.000000e+00 631 6.125000e-10 0.000000e+00 0.000000e+00 632 6.135000e-10 0.000000e+00 0.000000e+00 633 6.145000e-10 0.000000e+00 0.000000e+00 634 6.155000e-10 0.000000e+00 0.000000e+00 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 635 6.165000e-10 0.000000e+00 0.000000e+00 636 6.175000e-10 0.000000e+00 0.000000e+00 637 6.185000e-10 0.000000e+00 0.000000e+00 638 6.195000e-10 0.000000e+00 0.000000e+00 639 6.200000e-10 0.000000e+00 7.108583e-17 640 6.201000e-10 0.000000e+00 2.000000e-04 641 6.203000e-10 0.000000e+00 6.000000e-04 642 6.207000e-10 0.000000e+00 1.400000e-03 643 6.215000e-10 0.000000e+00 3.000000e-03 644 6.225000e-10 0.000000e+00 5.000000e-03 645 6.235000e-10 0.000000e+00 7.000000e-03 646 6.245000e-10 0.000000e+00 9.000000e-03 647 6.255000e-10 0.000000e+00 1.100000e-02 648 6.265000e-10 0.000000e+00 1.300000e-02 649 6.275000e-10 0.000000e+00 1.500000e-02 650 6.285000e-10 0.000000e+00 1.700000e-02 651 6.295000e-10 0.000000e+00 1.900000e-02 652 6.305000e-10 0.000000e+00 2.100000e-02 653 6.315000e-10 0.000000e+00 2.300000e-02 654 6.325000e-10 0.000000e+00 2.500000e-02 655 6.335000e-10 0.000000e+00 2.700000e-02 656 6.345000e-10 0.000000e+00 2.900000e-02 657 6.355000e-10 0.000000e+00 3.100000e-02 658 6.365000e-10 0.000000e+00 3.300000e-02 659 6.375000e-10 0.000000e+00 3.500000e-02 660 6.385000e-10 0.000000e+00 3.700000e-02 661 6.395000e-10 0.000000e+00 3.900000e-02 662 6.405000e-10 0.000000e+00 4.100000e-02 663 6.415000e-10 0.000000e+00 4.300000e-02 664 6.425000e-10 0.000000e+00 4.500000e-02 665 6.435000e-10 0.000000e+00 4.700000e-02 666 6.445000e-10 0.000000e+00 4.900000e-02 667 6.455000e-10 0.000000e+00 5.100000e-02 668 6.465000e-10 0.000000e+00 5.300000e-02 669 6.475000e-10 0.000000e+00 5.500000e-02 670 6.485000e-10 0.000000e+00 5.700000e-02 671 6.495000e-10 0.000000e+00 5.900000e-02 672 6.505000e-10 0.000000e+00 6.100000e-02 673 6.515000e-10 0.000000e+00 6.300000e-02 674 6.525000e-10 0.000000e+00 6.500000e-02 675 6.535000e-10 0.000000e+00 6.700000e-02 676 6.545000e-10 0.000000e+00 6.900000e-02 677 6.555000e-10 0.000000e+00 7.100000e-02 678 6.565000e-10 0.000000e+00 7.300000e-02 679 6.575000e-10 0.000000e+00 7.500000e-02 680 6.585000e-10 0.000000e+00 7.700000e-02 681 6.595000e-10 0.000000e+00 7.900000e-02 682 6.605000e-10 0.000000e+00 8.100000e-02 683 6.615000e-10 0.000000e+00 8.300000e-02 684 6.625000e-10 0.000000e+00 8.500000e-02 685 6.635000e-10 0.000000e+00 8.700000e-02 686 6.645000e-10 0.000000e+00 8.900000e-02 687 6.655000e-10 0.000000e+00 9.100000e-02 688 6.665000e-10 0.000000e+00 9.300000e-02 689 6.675000e-10 0.000000e+00 9.500000e-02 690 6.685000e-10 0.000000e+00 9.700000e-02 691 6.695000e-10 0.000000e+00 9.900000e-02 692 6.705000e-10 0.000000e+00 1.010000e-01 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 693 6.715000e-10 0.000000e+00 1.030000e-01 694 6.725000e-10 0.000000e+00 1.050000e-01 695 6.735000e-10 0.000000e+00 1.070000e-01 696 6.745000e-10 0.000000e+00 1.090000e-01 697 6.755000e-10 0.000000e+00 1.110000e-01 698 6.765000e-10 0.000000e+00 1.130000e-01 699 6.775000e-10 0.000000e+00 1.150000e-01 700 6.785000e-10 0.000000e+00 1.170000e-01 701 6.795000e-10 0.000000e+00 1.190000e-01 702 6.805000e-10 0.000000e+00 1.210000e-01 703 6.815000e-10 0.000000e+00 1.230000e-01 704 6.825000e-10 0.000000e+00 1.250000e-01 705 6.835000e-10 0.000000e+00 1.270000e-01 706 6.845000e-10 0.000000e+00 1.290000e-01 707 6.855000e-10 0.000000e+00 1.310000e-01 708 6.865000e-10 0.000000e+00 1.330000e-01 709 6.875000e-10 0.000000e+00 1.350000e-01 710 6.885000e-10 0.000000e+00 1.370000e-01 711 6.895000e-10 0.000000e+00 1.390000e-01 712 6.905000e-10 0.000000e+00 1.410000e-01 713 6.915000e-10 0.000000e+00 1.430000e-01 714 6.925000e-10 0.000000e+00 1.450000e-01 715 6.935000e-10 0.000000e+00 1.470000e-01 716 6.945000e-10 0.000000e+00 1.490000e-01 717 6.955000e-10 0.000000e+00 1.510000e-01 718 6.965000e-10 0.000000e+00 1.530000e-01 719 6.975000e-10 0.000000e+00 1.550000e-01 720 6.985000e-10 0.000000e+00 1.570000e-01 721 6.995000e-10 0.000000e+00 1.590000e-01 722 7.005000e-10 0.000000e+00 1.610000e-01 723 7.015000e-10 0.000000e+00 1.630000e-01 724 7.025000e-10 0.000000e+00 1.650000e-01 725 7.035000e-10 0.000000e+00 1.670000e-01 726 7.045000e-10 0.000000e+00 1.690000e-01 727 7.055000e-10 0.000000e+00 1.710000e-01 728 7.065000e-10 0.000000e+00 1.730000e-01 729 7.075000e-10 0.000000e+00 1.750000e-01 730 7.085000e-10 0.000000e+00 1.770000e-01 731 7.095000e-10 0.000000e+00 1.790000e-01 732 7.105000e-10 0.000000e+00 1.810000e-01 733 7.115000e-10 0.000000e+00 1.830000e-01 734 7.125000e-10 0.000000e+00 1.850000e-01 735 7.135000e-10 0.000000e+00 1.870000e-01 736 7.145000e-10 0.000000e+00 1.890000e-01 737 7.155000e-10 0.000000e+00 1.910000e-01 738 7.165000e-10 0.000000e+00 1.930000e-01 739 7.175000e-10 0.000000e+00 1.950000e-01 740 7.185000e-10 0.000000e+00 1.970000e-01 741 7.195000e-10 0.000000e+00 1.990000e-01 742 7.200000e-10 0.000000e+00 2.000000e-01 743 7.201000e-10 0.000000e+00 2.000000e-01 744 7.203000e-10 0.000000e+00 2.000000e-01 745 7.207000e-10 0.000000e+00 2.000000e-01 746 7.215000e-10 0.000000e+00 2.000000e-01 747 7.225000e-10 0.000000e+00 2.000000e-01 748 7.235000e-10 0.000000e+00 2.000000e-01 749 7.245000e-10 0.000000e+00 2.000000e-01 750 7.255000e-10 0.000000e+00 2.000000e-01 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 751 7.265000e-10 0.000000e+00 2.000000e-01 752 7.275000e-10 0.000000e+00 2.000000e-01 753 7.285000e-10 0.000000e+00 2.000000e-01 754 7.295000e-10 0.000000e+00 2.000000e-01 755 7.305000e-10 0.000000e+00 2.000000e-01 756 7.315000e-10 0.000000e+00 2.000000e-01 757 7.325000e-10 0.000000e+00 2.000000e-01 758 7.335000e-10 0.000000e+00 2.000000e-01 759 7.345000e-10 0.000000e+00 2.000000e-01 760 7.355000e-10 0.000000e+00 2.000000e-01 761 7.365000e-10 0.000000e+00 2.000000e-01 762 7.375000e-10 0.000000e+00 2.000000e-01 763 7.385000e-10 0.000000e+00 2.000000e-01 764 7.395000e-10 0.000000e+00 2.000000e-01 765 7.405000e-10 0.000000e+00 2.000000e-01 766 7.415000e-10 0.000000e+00 2.000000e-01 767 7.425000e-10 0.000000e+00 2.000000e-01 768 7.435000e-10 0.000000e+00 2.000000e-01 769 7.445000e-10 0.000000e+00 2.000000e-01 770 7.455000e-10 0.000000e+00 2.000000e-01 771 7.465000e-10 0.000000e+00 2.000000e-01 772 7.475000e-10 0.000000e+00 2.000000e-01 773 7.485000e-10 0.000000e+00 2.000000e-01 774 7.495000e-10 0.000000e+00 2.000000e-01 775 7.505000e-10 0.000000e+00 2.000000e-01 776 7.515000e-10 0.000000e+00 2.000000e-01 777 7.525000e-10 0.000000e+00 2.000000e-01 778 7.535000e-10 0.000000e+00 2.000000e-01 779 7.545000e-10 0.000000e+00 2.000000e-01 780 7.555000e-10 0.000000e+00 2.000000e-01 781 7.565000e-10 0.000000e+00 2.000000e-01 782 7.575000e-10 0.000000e+00 2.000000e-01 783 7.585000e-10 0.000000e+00 2.000000e-01 784 7.595000e-10 0.000000e+00 2.000000e-01 785 7.605000e-10 0.000000e+00 2.000000e-01 786 7.615000e-10 0.000000e+00 2.000000e-01 787 7.625000e-10 0.000000e+00 2.000000e-01 788 7.635000e-10 0.000000e+00 2.000000e-01 789 7.645000e-10 0.000000e+00 2.000000e-01 790 7.655000e-10 0.000000e+00 2.000000e-01 791 7.665000e-10 0.000000e+00 2.000000e-01 792 7.675000e-10 0.000000e+00 2.000000e-01 793 7.685000e-10 0.000000e+00 2.000000e-01 794 7.695000e-10 0.000000e+00 2.000000e-01 795 7.705000e-10 0.000000e+00 2.000000e-01 796 7.715000e-10 0.000000e+00 2.000000e-01 797 7.725000e-10 0.000000e+00 2.000000e-01 798 7.735000e-10 0.000000e+00 2.000000e-01 799 7.745000e-10 0.000000e+00 2.000000e-01 800 7.755000e-10 0.000000e+00 2.000000e-01 801 7.765000e-10 0.000000e+00 2.000000e-01 802 7.775000e-10 0.000000e+00 2.000000e-01 803 7.785000e-10 0.000000e+00 2.000000e-01 804 7.795000e-10 0.000000e+00 2.000000e-01 805 7.805000e-10 0.000000e+00 2.000000e-01 806 7.815000e-10 0.000000e+00 2.000000e-01 807 7.825000e-10 0.000000e+00 2.000000e-01 808 7.835000e-10 0.000000e+00 2.000000e-01 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 809 7.845000e-10 0.000000e+00 2.000000e-01 810 7.855000e-10 0.000000e+00 2.000000e-01 811 7.865000e-10 0.000000e+00 2.000000e-01 812 7.875000e-10 0.000000e+00 2.000000e-01 813 7.885000e-10 0.000000e+00 2.000000e-01 814 7.895000e-10 0.000000e+00 2.000000e-01 815 7.905000e-10 0.000000e+00 2.000000e-01 816 7.915000e-10 0.000000e+00 2.000000e-01 817 7.925000e-10 0.000000e+00 2.000000e-01 818 7.935000e-10 0.000000e+00 2.000000e-01 819 7.945000e-10 0.000000e+00 2.000000e-01 820 7.955000e-10 0.000000e+00 2.000000e-01 821 7.965000e-10 0.000000e+00 2.000000e-01 822 7.975000e-10 0.000000e+00 2.000000e-01 823 7.985000e-10 0.000000e+00 2.000000e-01 824 7.995000e-10 0.000000e+00 2.000000e-01 825 8.005000e-10 0.000000e+00 2.000000e-01 826 8.015000e-10 0.000000e+00 2.000000e-01 827 8.025000e-10 0.000000e+00 2.000000e-01 828 8.035000e-10 0.000000e+00 2.000000e-01 829 8.045000e-10 0.000000e+00 2.000000e-01 830 8.055000e-10 0.000000e+00 2.000000e-01 831 8.065000e-10 0.000000e+00 2.000000e-01 832 8.075000e-10 0.000000e+00 2.000000e-01 833 8.085000e-10 0.000000e+00 2.000000e-01 834 8.095000e-10 0.000000e+00 2.000000e-01 835 8.105000e-10 0.000000e+00 2.000000e-01 836 8.115000e-10 0.000000e+00 2.000000e-01 837 8.125000e-10 0.000000e+00 2.000000e-01 838 8.135000e-10 0.000000e+00 2.000000e-01 839 8.145000e-10 0.000000e+00 2.000000e-01 840 8.155000e-10 0.000000e+00 2.000000e-01 841 8.165000e-10 0.000000e+00 2.000000e-01 842 8.175000e-10 0.000000e+00 2.000000e-01 843 8.185000e-10 0.000000e+00 2.000000e-01 844 8.195000e-10 0.000000e+00 2.000000e-01 845 8.205000e-10 0.000000e+00 2.000000e-01 846 8.215000e-10 0.000000e+00 2.000000e-01 847 8.225000e-10 0.000000e+00 2.000000e-01 848 8.235000e-10 0.000000e+00 2.000000e-01 849 8.245000e-10 0.000000e+00 2.000000e-01 850 8.255000e-10 0.000000e+00 2.000000e-01 851 8.265000e-10 0.000000e+00 2.000000e-01 852 8.275000e-10 0.000000e+00 2.000000e-01 853 8.285000e-10 0.000000e+00 2.000000e-01 854 8.295000e-10 0.000000e+00 2.000000e-01 855 8.305000e-10 0.000000e+00 2.000000e-01 856 8.315000e-10 0.000000e+00 2.000000e-01 857 8.325000e-10 0.000000e+00 2.000000e-01 858 8.335000e-10 0.000000e+00 2.000000e-01 859 8.345000e-10 0.000000e+00 2.000000e-01 860 8.355000e-10 0.000000e+00 2.000000e-01 861 8.365000e-10 0.000000e+00 2.000000e-01 862 8.375000e-10 0.000000e+00 2.000000e-01 863 8.385000e-10 0.000000e+00 2.000000e-01 864 8.395000e-10 0.000000e+00 2.000000e-01 865 8.405000e-10 0.000000e+00 2.000000e-01 866 8.415000e-10 0.000000e+00 2.000000e-01 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 867 8.425000e-10 0.000000e+00 2.000000e-01 868 8.435000e-10 0.000000e+00 2.000000e-01 869 8.445000e-10 0.000000e+00 2.000000e-01 870 8.455000e-10 0.000000e+00 2.000000e-01 871 8.465000e-10 0.000000e+00 2.000000e-01 872 8.475000e-10 0.000000e+00 2.000000e-01 873 8.485000e-10 0.000000e+00 2.000000e-01 874 8.495000e-10 0.000000e+00 2.000000e-01 875 8.505000e-10 0.000000e+00 2.000000e-01 876 8.515000e-10 0.000000e+00 2.000000e-01 877 8.525000e-10 0.000000e+00 2.000000e-01 878 8.535000e-10 0.000000e+00 2.000000e-01 879 8.545000e-10 0.000000e+00 2.000000e-01 880 8.555000e-10 0.000000e+00 2.000000e-01 881 8.565000e-10 0.000000e+00 2.000000e-01 882 8.575000e-10 0.000000e+00 2.000000e-01 883 8.585000e-10 0.000000e+00 2.000000e-01 884 8.595000e-10 0.000000e+00 2.000000e-01 885 8.605000e-10 0.000000e+00 2.000000e-01 886 8.615000e-10 0.000000e+00 2.000000e-01 887 8.625000e-10 0.000000e+00 2.000000e-01 888 8.635000e-10 0.000000e+00 2.000000e-01 889 8.645000e-10 0.000000e+00 2.000000e-01 890 8.655000e-10 0.000000e+00 2.000000e-01 891 8.665000e-10 0.000000e+00 2.000000e-01 892 8.675000e-10 0.000000e+00 2.000000e-01 893 8.685000e-10 0.000000e+00 2.000000e-01 894 8.695000e-10 0.000000e+00 2.000000e-01 895 8.705000e-10 0.000000e+00 2.000000e-01 896 8.715000e-10 0.000000e+00 2.000000e-01 897 8.725000e-10 0.000000e+00 2.000000e-01 898 8.735000e-10 0.000000e+00 2.000000e-01 899 8.745000e-10 0.000000e+00 2.000000e-01 900 8.755000e-10 0.000000e+00 2.000000e-01 901 8.765000e-10 0.000000e+00 2.000000e-01 902 8.775000e-10 0.000000e+00 2.000000e-01 903 8.785000e-10 0.000000e+00 2.000000e-01 904 8.795000e-10 0.000000e+00 2.000000e-01 905 8.805000e-10 0.000000e+00 2.000000e-01 906 8.815000e-10 0.000000e+00 2.000000e-01 907 8.825000e-10 0.000000e+00 2.000000e-01 908 8.835000e-10 0.000000e+00 2.000000e-01 909 8.845000e-10 0.000000e+00 2.000000e-01 910 8.855000e-10 0.000000e+00 2.000000e-01 911 8.865000e-10 0.000000e+00 2.000000e-01 912 8.875000e-10 0.000000e+00 2.000000e-01 913 8.885000e-10 0.000000e+00 2.000000e-01 914 8.895000e-10 0.000000e+00 2.000000e-01 915 8.905000e-10 0.000000e+00 2.000000e-01 916 8.915000e-10 0.000000e+00 2.000000e-01 917 8.925000e-10 0.000000e+00 2.000000e-01 918 8.935000e-10 0.000000e+00 2.000000e-01 919 8.945000e-10 0.000000e+00 2.000000e-01 920 8.955000e-10 0.000000e+00 2.000000e-01 921 8.965000e-10 0.000000e+00 2.000000e-01 922 8.975000e-10 0.000000e+00 2.000000e-01 923 8.985000e-10 0.000000e+00 2.000000e-01 924 8.995000e-10 0.000000e+00 2.000000e-01 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 925 9.005000e-10 0.000000e+00 2.000000e-01 926 9.015000e-10 0.000000e+00 2.000000e-01 927 9.025000e-10 0.000000e+00 2.000000e-01 928 9.035000e-10 0.000000e+00 2.000000e-01 929 9.045000e-10 0.000000e+00 2.000000e-01 930 9.055000e-10 0.000000e+00 2.000000e-01 931 9.065000e-10 0.000000e+00 2.000000e-01 932 9.075000e-10 0.000000e+00 2.000000e-01 933 9.085000e-10 0.000000e+00 2.000000e-01 934 9.095000e-10 0.000000e+00 2.000000e-01 935 9.105000e-10 0.000000e+00 2.000000e-01 936 9.115000e-10 0.000000e+00 2.000000e-01 937 9.125000e-10 0.000000e+00 2.000000e-01 938 9.135000e-10 0.000000e+00 2.000000e-01 939 9.145000e-10 0.000000e+00 2.000000e-01 940 9.155000e-10 0.000000e+00 2.000000e-01 941 9.165000e-10 0.000000e+00 2.000000e-01 942 9.175000e-10 0.000000e+00 2.000000e-01 943 9.185000e-10 0.000000e+00 2.000000e-01 944 9.195000e-10 0.000000e+00 2.000000e-01 945 9.200000e-10 0.000000e+00 2.000000e-01 946 9.201000e-10 0.000000e+00 1.998000e-01 947 9.203000e-10 0.000000e+00 1.994000e-01 948 9.207000e-10 0.000000e+00 1.986000e-01 949 9.215000e-10 0.000000e+00 1.970000e-01 950 9.225000e-10 0.000000e+00 1.950000e-01 951 9.235000e-10 0.000000e+00 1.930000e-01 952 9.245000e-10 0.000000e+00 1.910000e-01 953 9.255000e-10 0.000000e+00 1.890000e-01 954 9.265000e-10 0.000000e+00 1.870000e-01 955 9.275000e-10 0.000000e+00 1.850000e-01 956 9.285000e-10 0.000000e+00 1.830000e-01 957 9.295000e-10 0.000000e+00 1.810000e-01 958 9.305000e-10 0.000000e+00 1.790000e-01 959 9.315000e-10 0.000000e+00 1.770000e-01 960 9.325000e-10 0.000000e+00 1.750000e-01 961 9.335000e-10 0.000000e+00 1.730000e-01 962 9.345000e-10 0.000000e+00 1.710000e-01 963 9.355000e-10 0.000000e+00 1.690000e-01 964 9.365000e-10 0.000000e+00 1.670000e-01 965 9.375000e-10 0.000000e+00 1.650000e-01 966 9.385000e-10 0.000000e+00 1.630000e-01 967 9.395000e-10 0.000000e+00 1.610000e-01 968 9.405000e-10 0.000000e+00 1.590000e-01 969 9.415000e-10 0.000000e+00 1.570000e-01 970 9.425000e-10 0.000000e+00 1.550000e-01 971 9.435000e-10 0.000000e+00 1.530000e-01 972 9.445000e-10 0.000000e+00 1.510000e-01 973 9.455000e-10 0.000000e+00 1.490000e-01 974 9.465000e-10 0.000000e+00 1.470000e-01 975 9.475000e-10 0.000000e+00 1.450000e-01 976 9.485000e-10 0.000000e+00 1.430000e-01 977 9.495000e-10 0.000000e+00 1.410000e-01 978 9.505000e-10 0.000000e+00 1.390000e-01 979 9.515000e-10 0.000000e+00 1.370000e-01 980 9.525000e-10 0.000000e+00 1.350000e-01 981 9.535000e-10 0.000000e+00 1.330000e-01 982 9.545000e-10 0.000000e+00 1.310000e-01 Index time @m1[vbs] v(g)/10 -------------------------------------------------------------------------------- 983 9.555000e-10 0.000000e+00 1.290000e-01 984 9.565000e-10 0.000000e+00 1.270000e-01 985 9.575000e-10 0.000000e+00 1.250000e-01 986 9.585000e-10 0.000000e+00 1.230000e-01 987 9.595000e-10 0.000000e+00 1.210000e-01 988 9.605000e-10 0.000000e+00 1.190000e-01 989 9.615000e-10 0.000000e+00 1.170000e-01 990 9.625000e-10 0.000000e+00 1.150000e-01 991 9.635000e-10 0.000000e+00 1.130000e-01 992 9.645000e-10 0.000000e+00 1.110000e-01 993 9.655000e-10 0.000000e+00 1.090000e-01 994 9.665000e-10 0.000000e+00 1.070000e-01 995 9.675000e-10 0.000000e+00 1.050000e-01 996 9.685000e-10 0.000000e+00 1.030000e-01 997 9.695000e-10 0.000000e+00 1.010000e-01 998 9.705000e-10 0.000000e+00 9.900000e-02 999 9.715000e-10 0.000000e+00 9.700000e-02 1000 9.725000e-10 0.000000e+00 9.500000e-02 1001 9.735000e-10 0.000000e+00 9.300000e-02 1002 9.745000e-10 0.000000e+00 9.100000e-02 1003 9.755000e-10 0.000000e+00 8.900000e-02 1004 9.765000e-10 0.000000e+00 8.700000e-02 1005 9.775000e-10 0.000000e+00 8.500000e-02 1006 9.785000e-10 0.000000e+00 8.300000e-02 1007 9.795000e-10 0.000000e+00 8.100000e-02 1008 9.805000e-10 0.000000e+00 7.900000e-02 1009 9.815000e-10 0.000000e+00 7.700000e-02 1010 9.825000e-10 0.000000e+00 7.500000e-02 1011 9.835000e-10 0.000000e+00 7.300000e-02 1012 9.845000e-10 0.000000e+00 7.100000e-02 1013 9.855000e-10 0.000000e+00 6.900000e-02 1014 9.865000e-10 0.000000e+00 6.700000e-02 1015 9.875000e-10 0.000000e+00 6.500000e-02 1016 9.885000e-10 0.000000e+00 6.300000e-02 1017 9.895000e-10 0.000000e+00 6.100000e-02 1018 9.905000e-10 0.000000e+00 5.900000e-02 1019 9.915000e-10 0.000000e+00 5.700000e-02 1020 9.925000e-10 0.000000e+00 5.500000e-02 1021 9.935000e-10 0.000000e+00 5.300000e-02 1022 9.945000e-10 0.000000e+00 5.100000e-02 1023 9.955000e-10 0.000000e+00 4.900000e-02 1024 9.965000e-10 0.000000e+00 4.700000e-02 1025 9.975000e-10 0.000000e+00 4.500000e-02 1026 9.985000e-10 0.000000e+00 4.300000e-02 1027 9.995000e-10 0.000000e+00 4.100000e-02 1028 1.000000e-09 0.000000e+00 4.000000e-02 tmpk8ny_4pz/tests/bsim3soifd/Makefile.am0000644000175000017500000000060513546075722020421 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = \ t3.cir \ t4.cir \ t5.cir \ inv2.cir \ RampVg2.cir TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ nmosfd.mod \ pmosfd.mod \ $(TESTS) \ $(TESTS:.cir=.out) EXTRA_DIST += ring51.cir lib.h MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/bsim3soifd/lib.h0000644000175000017500000001042513546075722017305 0ustar carstencarsten .subckt dum ss mn1 ss ss ss ss ss n1 w=4u l=0.15u debug=1 AS=6p AD=6p PS=7u PD=7u .ends dum * XOR2 .subckt xnor2 dd ss sub A B out mn1 T1 A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn2 C1 B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn3 out A C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn4 out B C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn5 C2 T1 ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 T1 A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp2 T1 B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp3 out A C3 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp4 C3 B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp5 out T1 dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends xnor2 .subckt nor2 dd ss sub A B out mn1 out A ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn2 out B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 out A C1 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp2 C1 B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends nor2 .subckt nand2 dd ss sub A B out mn1 out A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn2 C1 B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 out A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp2 out B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends nand2 .subckt nor3 dd ss sub A B C out mn1 out A ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn2 out B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn3 out C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 out A C1 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp2 C1 B C2 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp3 C2 C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends nor3 .subckt nand3 dd ss sub A B C out mn1 out A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn2 C1 B C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn3 C2 C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 out A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp2 out B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp3 out C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends nand3 .subckt nor4 dd ss sub A B C D out mn1 out A ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn2 out B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn3 out C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn4 out C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 out A C1 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp2 C1 B C2 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp3 C2 C C3 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp4 C3 C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends nor4 .subckt nand4 dd ss sub A B C D out mn1 out A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn2 C1 B C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn3 C2 C C3 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mn4 C3 C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 out A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp2 out B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp3 out C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u mp4 out C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends nand4 .subckt inv1 dd ss sub in out mn1 out in ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u mp1 out in dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u .ends inv1 .subckt inv5 dd ss sub in out xinv1 dd ss sub in 1 inv1 xinv2 dd ss sub 1 2 inv1 xinv3 dd ss sub 2 3 inv1 xinv4 dd ss sub 3 4 inv1 xinv5 dd ss sub 4 out inv1 .ends inv5 .subckt inv25 dd ss sub in out xinv1 dd ss sub in 1 inv5 xinv2 dd ss sub 1 2 inv5 xinv3 dd ss sub 2 3 inv5 xinv4 dd ss sub 3 4 inv5 xinv5 dd ss sub 4 out inv5 .ends inv25 .subckt inv125 dd ss sub in out xinv1 dd ss sub in 1 inv25 xinv2 dd ss sub 1 2 inv25 xinv3 dd ss sub 2 3 inv25 xinv4 dd ss sub 3 4 inv25 xinv5 dd ss sub 4 out inv25 .ends inv125 .subckt inv625 dd ss sub in out xinv1 dd ss sub in 1 inv125 xinv2 dd ss sub 1 2 inv125 xinv3 dd ss sub 2 3 inv125 xinv4 dd ss sub 3 4 inv125 xinv5 dd ss sub 4 out inv125 .ends inv625 tmpk8ny_4pz/tests/bsim3soifd/inv2.cir0000644000175000017500000000046313546075722017744 0ustar carstencarsten* model = BSIMSOI (FD) * * * SOI Inverter - floating body vin in 0 dc 2.5 vdd dd 0 dc 2.5 vss ss 0 dc 0 ve e 0 dc 1.25 m1 out in dd e p1 w=20u l=0.25u m2 out in ss e n1 w=10u l=0.25u .option itl1=500 gmin=1e-25 noacct .dc vin 0 2.5 0.01 .print dc v(in), v(out) .include nmosfd.mod .include pmosfd.mod tmpk8ny_4pz/tests/bsim3soifd/t5.cir0000644000175000017500000000042413546075722017413 0ustar carstencarsten*model = BSIMSOI (FD) *Berkeley Spice Compatibility * * SOI NMOSFET, floating body simulation vd d 0 dc 0.05 vs s 0 dc 0 ve e 0 dc 0 vg g 0 dc 3 m1 d g s e n1 w=10u l=0.25u .option gmin=1e-25 itl1=500 noacct .dc vg 0 1.5 0.01 ve -4 4 1 .print dc i(vs) .include nmosfd.mod tmpk8ny_4pz/tests/bsim3soifd/nmosfd.mod0000644000175000017500000000405713546075722020361 0ustar carstencarsten*Model Card for BSIMFD2.0, floating body FD SOI NMOS *Released on 2/15/99 .Model N1 NMOS Level= 55 +TNOM = 27 TOX = 4.5E-09 TSI = 5e-8 TBOX = 8E-08 +MOBMOD = 0 CAPMOD = 3 SHMOD = 0 +PARAMCHK=0 WINT = 0 LINT = -2E-08 +VTH0 = .52 K1 = .39 K2 = .1 K3 = 0 +KB1 = .95 K3B = 2.2 NLX = 7.2E-08 +DVT0 = .55 DVT1 = .28 DVT2 = -1.4 +DVT0W = 0 DVT1W = 0 DVT2W = 0 +NCH = 3.3E+17 NSUB = 1E+15 NGATE = 1E+20 +DVBD0 = 60.0 DVBD1 = 1.1 VBSA = 0.0 +KB3 = 2.2 DELP = 0.02 +ABP = 0.9 MXC = 0.9 ADICE0 = 0.93 +KBJT1 = 1.0E-08 EDL = .0000005 +NDIODE = 1.13 NTUN = 14.0 +ISBJT = 2e-6 ISDIF = 1e-6 ISTUN = 0.0 ISREC = 1e-5 +XBJT = 0.01 XDIF = 0.01 XREC = 0.01 XTUN = 0.001 +U0 = 352 UA = 1.3E-11 UB = 1.7E-18 UC = -4E-10 +W0 = 1.16E-06 AGS = .25 A1 = 0 A2 = 1 +B0 = .01 B1 = 10 +RDSW = 700 PRWG = 0 PRWB = -.2 WR = 1 +RBODY = 0.0 RBSH = 0.0 +A0 = 1.4 KETA = -.67 VSAT = 135000 +DWG = 0 DWB = 0 +ALPHA0 = 0.0 ALPHA1 = 1.5 BETA0 = 20.5 +AII = 1.2 BII = 0.1e-7 CII = 0.8 DII = 0.6 +VOFF = -.14 NFACTOR = .7 CDSC = .00002 CDSCB = 0 +CDSCD = 0 CIT = 0 +PCLM = 2.9 PVAG = 12 PDIBLC1 = .18 PDIBLC2 = .004 +PDIBLCB = -.234 DROUT = .2 +DELTA = .01 ETA0 = .01 ETAB = 0 +DSUB = .3 RTH0 94 = .006 +CLC = .0000001 CLE = .6 CF = 1E-20 CKAPPA = .6 +CGDL = 1E-20 CGSL = 1E-20 KT1 = -.3 KT1L = 0 +KT2 = .022 UTE = -1.5 UA1 = 4.31E-09 UB1 = -7.61E-18 +UC1 = -5.6E-11 PRT = 760 AT = 22400 +CGSO = 1e-10 CGDO = 1e-10 CJSWG = 5e-10 TT=3e-10 +ASD = 0.3 CSDESW = 1e-12 tmpk8ny_4pz/tests/bsim3soifd/t3.out0000644000175000017500000025166413546075722017461 0ustar carstencarsten No. of Data Rows : 1806 Circuit: *model = BSIMSOI (FD) Error on line 3 : .model n1 nmos level= 55 tnom = 27 tox = 4.5e-09 tsi = 5e-8 tbox = 8e-08 mobmod = 0 capmod = 3 shmod = 0 paramchk=0 wint = 0 lint = -2e-08 vth0 = .52 k1 = .39 k2 = .1 k3 = 0 kb1 = .95 k3b = 2.2 nlx = 7.2e-08 dvt0 = .55 dvt1 = .28 dvt2 = -1.4 dvt0w = 0 dvt1w = 0 dvt2w = 0 nch = 3.3e+17 nsub = 1e+15 ngate = 1e+20 dvbd0 = 60.0 dvbd1 = 1.1 vbsa = 0.0 kb3 = 2.2 delp = 0.02 abp = 0.9 mxc = 0.9 adice0 = 0.93 kbjt1 = 1.0e-08 edl = .0000005 ndiode = 1.13 ntun = 14.0 isbjt = 2e-6 isdif = 1e-6 istun = 0.0 isrec = 1e-5 xbjt = 0.01 xdif = 0.01 xrec = 0.01 xtun = 0.001 u0 = 352 ua = 1.3e-11 ub = 1.7e-18 uc = -4e-10 w0 = 1.16e-06 ags = .25 a1 = 0 a2 = 1 b0 = .01 b1 = 10 rdsw = 700 prwg = 0 prwb = -.2 wr = 1 rbody = 0.0 rbsh = 0.0 a0 = 1.4 keta = -.67 vsat = 135000 dwg = 0 dwb = 0 alpha0 = 0.0 alpha1 = 1.5 beta0 = 20.5 aii = 1.2 bii = 0.1e-7 cii = 0.8 dii = 0.6 voff = -.14 nfactor = .7 cdsc = .00002 cdscb = 0 cdscd = 0 cit = 0 pclm = 2.9 pvag = 12 pdiblc1 = .18 pdiblc2 = .004 pdiblcb = -.234 drout = .2 delta = .01 eta0 = .01 etab = 0 dsub = .3 rth0 94 = .006 clc = .0000001 cle = .6 cf = 1e-20 ckappa = .6 cgdl = 1e-20 cgsl = 1e-20 kt1 = -.3 kt1l = 0 kt2 = .022 ute = -1.5 ua1 = 4.31e-09 ub1 = -7.61e-18 uc1 = -5.6e-11 prt = 760 at = 22400 cgso = 1e-10 cgdo = 1e-10 cjswg = 5e-10 tt=3e-10 asd = 0.3 csdesw = 1e-12 Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Warning: Pd = 0 is less than W. Warning: Ps = 0 is less than W. *model = BSIMSOI (FD) -------------------------------------------------------------------------------- Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 0 0.000000e+00 5.000000e-01 -1.250000e-19 1 1.000000e-02 5.000000e-01 3.403448e-06 2 2.000000e-02 5.000000e-01 6.447166e-06 3 3.000000e-02 5.000000e-01 9.138041e-06 4 4.000000e-02 5.000000e-01 1.148481e-05 5 5.000000e-02 5.000000e-01 1.349892e-05 6 6.000000e-02 5.000000e-01 1.519577e-05 7 7.000000e-02 5.000000e-01 1.659602e-05 8 8.000000e-02 5.000000e-01 1.772678e-05 9 9.000000e-02 5.000000e-01 1.862188e-05 10 1.000000e-01 5.000000e-01 1.932024e-05 11 1.100000e-01 5.000000e-01 1.986244e-05 12 1.200000e-01 5.000000e-01 2.028646e-05 13 1.300000e-01 5.000000e-01 2.062437e-05 14 1.400000e-01 5.000000e-01 2.090110e-05 15 1.500000e-01 5.000000e-01 2.113483e-05 16 1.600000e-01 5.000000e-01 2.133835e-05 17 1.700000e-01 5.000000e-01 2.152047e-05 18 1.800000e-01 5.000000e-01 2.168723e-05 19 1.900000e-01 5.000000e-01 2.184281e-05 20 2.000000e-01 5.000000e-01 2.199009e-05 21 2.100000e-01 5.000000e-01 2.213113e-05 22 2.200000e-01 5.000000e-01 2.226740e-05 23 2.300000e-01 5.000000e-01 2.239997e-05 24 2.400000e-01 5.000000e-01 2.252961e-05 25 2.500000e-01 5.000000e-01 2.265694e-05 26 2.600000e-01 5.000000e-01 2.278241e-05 27 2.700000e-01 5.000000e-01 2.290635e-05 28 2.800000e-01 5.000000e-01 2.302905e-05 29 2.900000e-01 5.000000e-01 2.315073e-05 30 3.000000e-01 5.000000e-01 2.327155e-05 31 3.100000e-01 5.000000e-01 2.339166e-05 32 3.200000e-01 5.000000e-01 2.351117e-05 33 3.300000e-01 5.000000e-01 2.363018e-05 34 3.400000e-01 5.000000e-01 2.374876e-05 35 3.500000e-01 5.000000e-01 2.386698e-05 36 3.600000e-01 5.000000e-01 2.398489e-05 37 3.700000e-01 5.000000e-01 2.410254e-05 38 3.800000e-01 5.000000e-01 2.421998e-05 39 3.900000e-01 5.000000e-01 2.433723e-05 40 4.000000e-01 5.000000e-01 2.445432e-05 41 4.100000e-01 5.000000e-01 2.457129e-05 42 4.200000e-01 5.000000e-01 2.468815e-05 43 4.300000e-01 5.000000e-01 2.480492e-05 44 4.400000e-01 5.000000e-01 2.492161e-05 45 4.500000e-01 5.000000e-01 2.503826e-05 46 4.600000e-01 5.000000e-01 2.515486e-05 47 4.700000e-01 5.000000e-01 2.527143e-05 48 4.800000e-01 5.000000e-01 2.538798e-05 49 4.900000e-01 5.000000e-01 2.550453e-05 50 5.000000e-01 5.000000e-01 2.562107e-05 51 5.100000e-01 5.000000e-01 2.573761e-05 52 5.200000e-01 5.000000e-01 2.585417e-05 53 5.300000e-01 5.000000e-01 2.597075e-05 54 5.400000e-01 5.000000e-01 2.608736e-05 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 55 5.500000e-01 5.000000e-01 2.620399e-05 56 5.600000e-01 5.000000e-01 2.632066e-05 57 5.700000e-01 5.000000e-01 2.643737e-05 58 5.800000e-01 5.000000e-01 2.655413e-05 59 5.900000e-01 5.000000e-01 2.667093e-05 60 6.000000e-01 5.000000e-01 2.678778e-05 61 6.100000e-01 5.000000e-01 2.690468e-05 62 6.200000e-01 5.000000e-01 2.702164e-05 63 6.300000e-01 5.000000e-01 2.713866e-05 64 6.400000e-01 5.000000e-01 2.725574e-05 65 6.500000e-01 5.000000e-01 2.737289e-05 66 6.600000e-01 5.000000e-01 2.749010e-05 67 6.700000e-01 5.000000e-01 2.760738e-05 68 6.800000e-01 5.000000e-01 2.772472e-05 69 6.900000e-01 5.000000e-01 2.784214e-05 70 7.000000e-01 5.000000e-01 2.795964e-05 71 7.100000e-01 5.000000e-01 2.807720e-05 72 7.200000e-01 5.000000e-01 2.819484e-05 73 7.300000e-01 5.000000e-01 2.831256e-05 74 7.400000e-01 5.000000e-01 2.843036e-05 75 7.500000e-01 5.000000e-01 2.854823e-05 76 7.600000e-01 5.000000e-01 2.866619e-05 77 7.700000e-01 5.000000e-01 2.878423e-05 78 7.800000e-01 5.000000e-01 2.890235e-05 79 7.900000e-01 5.000000e-01 2.902055e-05 80 8.000000e-01 5.000000e-01 2.913884e-05 81 8.100000e-01 5.000000e-01 2.925721e-05 82 8.200000e-01 5.000000e-01 2.937567e-05 83 8.300000e-01 5.000000e-01 2.949422e-05 84 8.400000e-01 5.000000e-01 2.961285e-05 85 8.500000e-01 5.000000e-01 2.973157e-05 86 8.600000e-01 5.000000e-01 2.985037e-05 87 8.700000e-01 5.000000e-01 2.996927e-05 88 8.800000e-01 5.000000e-01 3.008826e-05 89 8.900000e-01 5.000000e-01 3.020733e-05 90 9.000000e-01 5.000000e-01 3.032650e-05 91 9.100000e-01 5.000000e-01 3.044576e-05 92 9.200000e-01 5.000000e-01 3.056511e-05 93 9.300000e-01 5.000000e-01 3.068455e-05 94 9.400000e-01 5.000000e-01 3.080408e-05 95 9.500000e-01 5.000000e-01 3.092371e-05 96 9.600000e-01 5.000000e-01 3.104343e-05 97 9.700000e-01 5.000000e-01 3.116324e-05 98 9.800000e-01 5.000000e-01 3.128315e-05 99 9.900000e-01 5.000000e-01 3.140315e-05 100 1.000000e+00 5.000000e-01 3.152324e-05 101 1.010000e+00 5.000000e-01 3.164344e-05 102 1.020000e+00 5.000000e-01 3.176372e-05 103 1.030000e+00 5.000000e-01 3.188410e-05 104 1.040000e+00 5.000000e-01 3.200458e-05 105 1.050000e+00 5.000000e-01 3.212515e-05 106 1.060000e+00 5.000000e-01 3.224582e-05 107 1.070000e+00 5.000000e-01 3.236659e-05 108 1.080000e+00 5.000000e-01 3.248745e-05 109 1.090000e+00 5.000000e-01 3.260841e-05 110 1.100000e+00 5.000000e-01 3.272947e-05 111 1.110000e+00 5.000000e-01 3.285062e-05 112 1.120000e+00 5.000000e-01 3.297188e-05 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 113 1.130000e+00 5.000000e-01 3.309323e-05 114 1.140000e+00 5.000000e-01 3.321468e-05 115 1.150000e+00 5.000000e-01 3.333622e-05 116 1.160000e+00 5.000000e-01 3.345787e-05 117 1.170000e+00 5.000000e-01 3.357961e-05 118 1.180000e+00 5.000000e-01 3.370146e-05 119 1.190000e+00 5.000000e-01 3.382340e-05 120 1.200000e+00 5.000000e-01 3.394544e-05 121 1.210000e+00 5.000000e-01 3.406758e-05 122 1.220000e+00 5.000000e-01 3.418982e-05 123 1.230000e+00 5.000000e-01 3.431216e-05 124 1.240000e+00 5.000000e-01 3.443460e-05 125 1.250000e+00 5.000000e-01 3.455714e-05 126 1.260000e+00 5.000000e-01 3.467978e-05 127 1.270000e+00 5.000000e-01 3.480253e-05 128 1.280000e+00 5.000000e-01 3.492537e-05 129 1.290000e+00 5.000000e-01 3.504831e-05 130 1.300000e+00 5.000000e-01 3.517135e-05 131 1.310000e+00 5.000000e-01 3.529449e-05 132 1.320000e+00 5.000000e-01 3.541774e-05 133 1.330000e+00 5.000000e-01 3.554108e-05 134 1.340000e+00 5.000000e-01 3.566453e-05 135 1.350000e+00 5.000000e-01 3.578808e-05 136 1.360000e+00 5.000000e-01 3.591173e-05 137 1.370000e+00 5.000000e-01 3.603548e-05 138 1.380000e+00 5.000000e-01 3.615933e-05 139 1.390000e+00 5.000000e-01 3.628329e-05 140 1.400000e+00 5.000000e-01 3.640735e-05 141 1.410000e+00 5.000000e-01 3.653150e-05 142 1.420000e+00 5.000000e-01 3.665577e-05 143 1.430000e+00 5.000000e-01 3.678013e-05 144 1.440000e+00 5.000000e-01 3.690459e-05 145 1.450000e+00 5.000000e-01 3.702916e-05 146 1.460000e+00 5.000000e-01 3.715383e-05 147 1.470000e+00 5.000000e-01 3.727861e-05 148 1.480000e+00 5.000000e-01 3.740348e-05 149 1.490000e+00 5.000000e-01 3.752846e-05 150 1.500000e+00 5.000000e-01 3.765354e-05 151 1.510000e+00 5.000000e-01 3.777873e-05 152 1.520000e+00 5.000000e-01 3.790402e-05 153 1.530000e+00 5.000000e-01 3.802941e-05 154 1.540000e+00 5.000000e-01 3.815490e-05 155 1.550000e+00 5.000000e-01 3.828050e-05 156 1.560000e+00 5.000000e-01 3.840620e-05 157 1.570000e+00 5.000000e-01 3.853200e-05 158 1.580000e+00 5.000000e-01 3.865791e-05 159 1.590000e+00 5.000000e-01 3.878392e-05 160 1.600000e+00 5.000000e-01 3.891004e-05 161 1.610000e+00 5.000000e-01 3.903626e-05 162 1.620000e+00 5.000000e-01 3.916258e-05 163 1.630000e+00 5.000000e-01 3.928901e-05 164 1.640000e+00 5.000000e-01 3.941554e-05 165 1.650000e+00 5.000000e-01 3.954218e-05 166 1.660000e+00 5.000000e-01 3.966892e-05 167 1.670000e+00 5.000000e-01 3.979576e-05 168 1.680000e+00 5.000000e-01 3.992271e-05 169 1.690000e+00 5.000000e-01 4.004976e-05 170 1.700000e+00 5.000000e-01 4.017692e-05 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 171 1.710000e+00 5.000000e-01 4.030418e-05 172 1.720000e+00 5.000000e-01 4.043155e-05 173 1.730000e+00 5.000000e-01 4.055902e-05 174 1.740000e+00 5.000000e-01 4.068660e-05 175 1.750000e+00 5.000000e-01 4.081428e-05 176 1.760000e+00 5.000000e-01 4.094207e-05 177 1.770000e+00 5.000000e-01 4.106996e-05 178 1.780000e+00 5.000000e-01 4.119795e-05 179 1.790000e+00 5.000000e-01 4.132605e-05 180 1.800000e+00 5.000000e-01 4.145426e-05 181 1.810000e+00 5.000000e-01 4.158257e-05 182 1.820000e+00 5.000000e-01 4.171099e-05 183 1.830000e+00 5.000000e-01 4.183951e-05 184 1.840000e+00 5.000000e-01 4.196814e-05 185 1.850000e+00 5.000000e-01 4.209688e-05 186 1.860000e+00 5.000000e-01 4.222571e-05 187 1.870000e+00 5.000000e-01 4.235466e-05 188 1.880000e+00 5.000000e-01 4.248371e-05 189 1.890000e+00 5.000000e-01 4.261287e-05 190 1.900000e+00 5.000000e-01 4.274213e-05 191 1.910000e+00 5.000000e-01 4.287150e-05 192 1.920000e+00 5.000000e-01 4.300097e-05 193 1.930000e+00 5.000000e-01 4.313055e-05 194 1.940000e+00 5.000000e-01 4.326024e-05 195 1.950000e+00 5.000000e-01 4.339003e-05 196 1.960000e+00 5.000000e-01 4.351993e-05 197 1.970000e+00 5.000000e-01 4.364993e-05 198 1.980000e+00 5.000000e-01 4.378004e-05 199 1.990000e+00 5.000000e-01 4.391026e-05 200 2.000000e+00 5.000000e-01 4.404059e-05 201 2.010000e+00 5.000000e-01 4.417102e-05 202 2.020000e+00 5.000000e-01 4.430155e-05 203 2.030000e+00 5.000000e-01 4.443220e-05 204 2.040000e+00 5.000000e-01 4.456295e-05 205 2.050000e+00 5.000000e-01 4.469380e-05 206 2.060000e+00 5.000000e-01 4.482477e-05 207 2.070000e+00 5.000000e-01 4.495584e-05 208 2.080000e+00 5.000000e-01 4.508702e-05 209 2.090000e+00 5.000000e-01 4.521830e-05 210 2.100000e+00 5.000000e-01 4.534969e-05 211 2.110000e+00 5.000000e-01 4.548119e-05 212 2.120000e+00 5.000000e-01 4.561280e-05 213 2.130000e+00 5.000000e-01 4.574451e-05 214 2.140000e+00 5.000000e-01 4.587633e-05 215 2.150000e+00 5.000000e-01 4.600825e-05 216 2.160000e+00 5.000000e-01 4.614029e-05 217 2.170000e+00 5.000000e-01 4.627243e-05 218 2.180000e+00 5.000000e-01 4.640468e-05 219 2.190000e+00 5.000000e-01 4.653704e-05 220 2.200000e+00 5.000000e-01 4.666950e-05 221 2.210000e+00 5.000000e-01 4.680207e-05 222 2.220000e+00 5.000000e-01 4.693475e-05 223 2.230000e+00 5.000000e-01 4.706754e-05 224 2.240000e+00 5.000000e-01 4.720044e-05 225 2.250000e+00 5.000000e-01 4.733344e-05 226 2.260000e+00 5.000000e-01 4.746655e-05 227 2.270000e+00 5.000000e-01 4.759977e-05 228 2.280000e+00 5.000000e-01 4.773309e-05 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 229 2.290000e+00 5.000000e-01 4.786653e-05 230 2.300000e+00 5.000000e-01 4.800007e-05 231 2.310000e+00 5.000000e-01 4.813372e-05 232 2.320000e+00 5.000000e-01 4.826748e-05 233 2.330000e+00 5.000000e-01 4.840135e-05 234 2.340000e+00 5.000000e-01 4.853532e-05 235 2.350000e+00 5.000000e-01 4.866941e-05 236 2.360000e+00 5.000000e-01 4.880360e-05 237 2.370000e+00 5.000000e-01 4.893790e-05 238 2.380000e+00 5.000000e-01 4.907231e-05 239 2.390000e+00 5.000000e-01 4.920683e-05 240 2.400000e+00 5.000000e-01 4.934145e-05 241 2.410000e+00 5.000000e-01 4.947619e-05 242 2.420000e+00 5.000000e-01 4.961103e-05 243 2.430000e+00 5.000000e-01 4.974598e-05 244 2.440000e+00 5.000000e-01 4.988104e-05 245 2.450000e+00 5.000000e-01 5.001621e-05 246 2.460000e+00 5.000000e-01 5.015149e-05 247 2.470000e+00 5.000000e-01 5.028688e-05 248 2.480000e+00 5.000000e-01 5.042237e-05 249 2.490000e+00 5.000000e-01 5.055798e-05 250 2.500000e+00 5.000000e-01 5.069369e-05 251 2.510000e+00 5.000000e-01 5.082952e-05 252 2.520000e+00 5.000000e-01 5.096545e-05 253 2.530000e+00 5.000000e-01 5.110149e-05 254 2.540000e+00 5.000000e-01 5.123764e-05 255 2.550000e+00 5.000000e-01 5.137390e-05 256 2.560000e+00 5.000000e-01 5.151027e-05 257 2.570000e+00 5.000000e-01 5.164675e-05 258 2.580000e+00 5.000000e-01 5.178334e-05 259 2.590000e+00 5.000000e-01 5.192004e-05 260 2.600000e+00 5.000000e-01 5.205684e-05 261 2.610000e+00 5.000000e-01 5.219376e-05 262 2.620000e+00 5.000000e-01 5.233079e-05 263 2.630000e+00 5.000000e-01 5.246793e-05 264 2.640000e+00 5.000000e-01 5.260517e-05 265 2.650000e+00 5.000000e-01 5.274253e-05 266 2.660000e+00 5.000000e-01 5.287999e-05 267 2.670000e+00 5.000000e-01 5.301757e-05 268 2.680000e+00 5.000000e-01 5.315526e-05 269 2.690000e+00 5.000000e-01 5.329305e-05 270 2.700000e+00 5.000000e-01 5.343096e-05 271 2.710000e+00 5.000000e-01 5.356897e-05 272 2.720000e+00 5.000000e-01 5.370710e-05 273 2.730000e+00 5.000000e-01 5.384533e-05 274 2.740000e+00 5.000000e-01 5.398368e-05 275 2.750000e+00 5.000000e-01 5.412214e-05 276 2.760000e+00 5.000000e-01 5.426070e-05 277 2.770000e+00 5.000000e-01 5.439938e-05 278 2.780000e+00 5.000000e-01 5.453817e-05 279 2.790000e+00 5.000000e-01 5.467707e-05 280 2.800000e+00 5.000000e-01 5.481608e-05 281 2.810000e+00 5.000000e-01 5.495519e-05 282 2.820000e+00 5.000000e-01 5.509442e-05 283 2.830000e+00 5.000000e-01 5.523376e-05 284 2.840000e+00 5.000000e-01 5.537322e-05 285 2.850000e+00 5.000000e-01 5.551278e-05 286 2.860000e+00 5.000000e-01 5.565245e-05 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 287 2.870000e+00 5.000000e-01 5.579223e-05 288 2.880000e+00 5.000000e-01 5.593213e-05 289 2.890000e+00 5.000000e-01 5.607213e-05 290 2.900000e+00 5.000000e-01 5.621225e-05 291 2.910000e+00 5.000000e-01 5.635248e-05 292 2.920000e+00 5.000000e-01 5.649281e-05 293 2.930000e+00 5.000000e-01 5.663326e-05 294 2.940000e+00 5.000000e-01 5.677382e-05 295 2.950000e+00 5.000000e-01 5.691449e-05 296 2.960000e+00 5.000000e-01 5.705528e-05 297 2.970000e+00 5.000000e-01 5.719617e-05 298 2.980000e+00 5.000000e-01 5.733718e-05 299 2.990000e+00 5.000000e-01 5.747829e-05 300 3.000000e+00 5.000000e-01 5.761952e-05 301 0.000000e+00 1.000000e+00 -1.250000e-19 302 1.000000e-02 1.000000e+00 3.008580e-05 303 2.000000e-02 1.000000e+00 5.960829e-05 304 3.000000e-02 1.000000e+00 8.856943e-05 305 4.000000e-02 1.000000e+00 1.169712e-04 306 5.000000e-02 1.000000e+00 1.448155e-04 307 6.000000e-02 1.000000e+00 1.721043e-04 308 7.000000e-02 1.000000e+00 1.988396e-04 309 8.000000e-02 1.000000e+00 2.250233e-04 310 9.000000e-02 1.000000e+00 2.506572e-04 311 1.000000e-01 1.000000e+00 2.757434e-04 312 1.100000e-01 1.000000e+00 3.002837e-04 313 1.200000e-01 1.000000e+00 3.242801e-04 314 1.300000e-01 1.000000e+00 3.477344e-04 315 1.400000e-01 1.000000e+00 3.706486e-04 316 1.500000e-01 1.000000e+00 3.930246e-04 317 1.600000e-01 1.000000e+00 4.148643e-04 318 1.700000e-01 1.000000e+00 4.361695e-04 319 1.800000e-01 1.000000e+00 4.569423e-04 320 1.900000e-01 1.000000e+00 4.771844e-04 321 2.000000e-01 1.000000e+00 4.968978e-04 322 2.100000e-01 1.000000e+00 5.160845e-04 323 2.200000e-01 1.000000e+00 5.347463e-04 324 2.300000e-01 1.000000e+00 5.528852e-04 325 2.400000e-01 1.000000e+00 5.705031e-04 326 2.500000e-01 1.000000e+00 5.876020e-04 327 2.600000e-01 1.000000e+00 6.041839e-04 328 2.700000e-01 1.000000e+00 6.202509e-04 329 2.800000e-01 1.000000e+00 6.358049e-04 330 2.900000e-01 1.000000e+00 6.508481e-04 331 3.000000e-01 1.000000e+00 6.653826e-04 332 3.100000e-01 1.000000e+00 6.794107e-04 333 3.200000e-01 1.000000e+00 6.929346e-04 334 3.300000e-01 1.000000e+00 7.059569e-04 335 3.400000e-01 1.000000e+00 7.184800e-04 336 3.500000e-01 1.000000e+00 7.305067e-04 337 3.600000e-01 1.000000e+00 7.420398e-04 338 3.700000e-01 1.000000e+00 7.530826e-04 339 3.800000e-01 1.000000e+00 7.636386e-04 340 3.900000e-01 1.000000e+00 7.737116e-04 341 4.000000e-01 1.000000e+00 7.833060e-04 342 4.100000e-01 1.000000e+00 7.924269e-04 343 4.200000e-01 1.000000e+00 8.010800e-04 344 4.300000e-01 1.000000e+00 8.092719e-04 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 345 4.400000e-01 1.000000e+00 8.170104e-04 346 4.500000e-01 1.000000e+00 8.243044e-04 347 4.600000e-01 1.000000e+00 8.311646e-04 348 4.700000e-01 1.000000e+00 8.376029e-04 349 4.800000e-01 1.000000e+00 8.436332e-04 350 4.900000e-01 1.000000e+00 8.492713e-04 351 5.000000e-01 1.000000e+00 8.545347e-04 352 5.100000e-01 1.000000e+00 8.594425e-04 353 5.200000e-01 1.000000e+00 8.640154e-04 354 5.300000e-01 1.000000e+00 8.682749e-04 355 5.400000e-01 1.000000e+00 8.722434e-04 356 5.500000e-01 1.000000e+00 8.759433e-04 357 5.600000e-01 1.000000e+00 8.793968e-04 358 5.700000e-01 1.000000e+00 8.826255e-04 359 5.800000e-01 1.000000e+00 8.856499e-04 360 5.900000e-01 1.000000e+00 8.884892e-04 361 6.000000e-01 1.000000e+00 8.911615e-04 362 6.100000e-01 1.000000e+00 8.936831e-04 363 6.200000e-01 1.000000e+00 8.960691e-04 364 6.300000e-01 1.000000e+00 8.983330e-04 365 6.400000e-01 1.000000e+00 9.004869e-04 366 6.500000e-01 1.000000e+00 9.025418e-04 367 6.600000e-01 1.000000e+00 9.045075e-04 368 6.700000e-01 1.000000e+00 9.063926e-04 369 6.800000e-01 1.000000e+00 9.082048e-04 370 6.900000e-01 1.000000e+00 9.099511e-04 371 7.000000e-01 1.000000e+00 9.116375e-04 372 7.100000e-01 1.000000e+00 9.132696e-04 373 7.200000e-01 1.000000e+00 9.148522e-04 374 7.300000e-01 1.000000e+00 9.163896e-04 375 7.400000e-01 1.000000e+00 9.178858e-04 376 7.500000e-01 1.000000e+00 9.193442e-04 377 7.600000e-01 1.000000e+00 9.207679e-04 378 7.700000e-01 1.000000e+00 9.221598e-04 379 7.800000e-01 1.000000e+00 9.235224e-04 380 7.900000e-01 1.000000e+00 9.248579e-04 381 8.000000e-01 1.000000e+00 9.261684e-04 382 8.100000e-01 1.000000e+00 9.274558e-04 383 8.200000e-01 1.000000e+00 9.287217e-04 384 8.300000e-01 1.000000e+00 9.299677e-04 385 8.400000e-01 1.000000e+00 9.311952e-04 386 8.500000e-01 1.000000e+00 9.324054e-04 387 8.600000e-01 1.000000e+00 9.335995e-04 388 8.700000e-01 1.000000e+00 9.347785e-04 389 8.800000e-01 1.000000e+00 9.359435e-04 390 8.900000e-01 1.000000e+00 9.370953e-04 391 9.000000e-01 1.000000e+00 9.382348e-04 392 9.100000e-01 1.000000e+00 9.393626e-04 393 9.200000e-01 1.000000e+00 9.404796e-04 394 9.300000e-01 1.000000e+00 9.415863e-04 395 9.400000e-01 1.000000e+00 9.426833e-04 396 9.500000e-01 1.000000e+00 9.437712e-04 397 9.600000e-01 1.000000e+00 9.448504e-04 398 9.700000e-01 1.000000e+00 9.459216e-04 399 9.800000e-01 1.000000e+00 9.469850e-04 400 9.900000e-01 1.000000e+00 9.480412e-04 401 1.000000e+00 1.000000e+00 9.490904e-04 402 1.010000e+00 1.000000e+00 9.501331e-04 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 403 1.020000e+00 1.000000e+00 9.511695e-04 404 1.030000e+00 1.000000e+00 9.522000e-04 405 1.040000e+00 1.000000e+00 9.532249e-04 406 1.050000e+00 1.000000e+00 9.542445e-04 407 1.060000e+00 1.000000e+00 9.552589e-04 408 1.070000e+00 1.000000e+00 9.562685e-04 409 1.080000e+00 1.000000e+00 9.572735e-04 410 1.090000e+00 1.000000e+00 9.582740e-04 411 1.100000e+00 1.000000e+00 9.592703e-04 412 1.110000e+00 1.000000e+00 9.602625e-04 413 1.120000e+00 1.000000e+00 9.612509e-04 414 1.130000e+00 1.000000e+00 9.622356e-04 415 1.140000e+00 1.000000e+00 9.632167e-04 416 1.150000e+00 1.000000e+00 9.641945e-04 417 1.160000e+00 1.000000e+00 9.651690e-04 418 1.170000e+00 1.000000e+00 9.661404e-04 419 1.180000e+00 1.000000e+00 9.671088e-04 420 1.190000e+00 1.000000e+00 9.680743e-04 421 1.200000e+00 1.000000e+00 9.690370e-04 422 1.210000e+00 1.000000e+00 9.699971e-04 423 1.220000e+00 1.000000e+00 9.709546e-04 424 1.230000e+00 1.000000e+00 9.719097e-04 425 1.240000e+00 1.000000e+00 9.728624e-04 426 1.250000e+00 1.000000e+00 9.738129e-04 427 1.260000e+00 1.000000e+00 9.747611e-04 428 1.270000e+00 1.000000e+00 9.757073e-04 429 1.280000e+00 1.000000e+00 9.766513e-04 430 1.290000e+00 1.000000e+00 9.775935e-04 431 1.300000e+00 1.000000e+00 9.785337e-04 432 1.310000e+00 1.000000e+00 9.794721e-04 433 1.320000e+00 1.000000e+00 9.804087e-04 434 1.330000e+00 1.000000e+00 9.813436e-04 435 1.340000e+00 1.000000e+00 9.822769e-04 436 1.350000e+00 1.000000e+00 9.832086e-04 437 1.360000e+00 1.000000e+00 9.841387e-04 438 1.370000e+00 1.000000e+00 9.850673e-04 439 1.380000e+00 1.000000e+00 9.859945e-04 440 1.390000e+00 1.000000e+00 9.869203e-04 441 1.400000e+00 1.000000e+00 9.878447e-04 442 1.410000e+00 1.000000e+00 9.887678e-04 443 1.420000e+00 1.000000e+00 9.896896e-04 444 1.430000e+00 1.000000e+00 9.906102e-04 445 1.440000e+00 1.000000e+00 9.915296e-04 446 1.450000e+00 1.000000e+00 9.924479e-04 447 1.460000e+00 1.000000e+00 9.933650e-04 448 1.470000e+00 1.000000e+00 9.942810e-04 449 1.480000e+00 1.000000e+00 9.951960e-04 450 1.490000e+00 1.000000e+00 9.961099e-04 451 1.500000e+00 1.000000e+00 9.970229e-04 452 1.510000e+00 1.000000e+00 9.979348e-04 453 1.520000e+00 1.000000e+00 9.988458e-04 454 1.530000e+00 1.000000e+00 9.997559e-04 455 1.540000e+00 1.000000e+00 1.000665e-03 456 1.550000e+00 1.000000e+00 1.001573e-03 457 1.560000e+00 1.000000e+00 1.002481e-03 458 1.570000e+00 1.000000e+00 1.003388e-03 459 1.580000e+00 1.000000e+00 1.004294e-03 460 1.590000e+00 1.000000e+00 1.005199e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 461 1.600000e+00 1.000000e+00 1.006103e-03 462 1.610000e+00 1.000000e+00 1.007007e-03 463 1.620000e+00 1.000000e+00 1.007910e-03 464 1.630000e+00 1.000000e+00 1.008812e-03 465 1.640000e+00 1.000000e+00 1.009713e-03 466 1.650000e+00 1.000000e+00 1.010614e-03 467 1.660000e+00 1.000000e+00 1.011514e-03 468 1.670000e+00 1.000000e+00 1.012414e-03 469 1.680000e+00 1.000000e+00 1.013313e-03 470 1.690000e+00 1.000000e+00 1.014211e-03 471 1.700000e+00 1.000000e+00 1.015109e-03 472 1.710000e+00 1.000000e+00 1.016006e-03 473 1.720000e+00 1.000000e+00 1.016903e-03 474 1.730000e+00 1.000000e+00 1.017799e-03 475 1.740000e+00 1.000000e+00 1.018695e-03 476 1.750000e+00 1.000000e+00 1.019590e-03 477 1.760000e+00 1.000000e+00 1.020484e-03 478 1.770000e+00 1.000000e+00 1.021378e-03 479 1.780000e+00 1.000000e+00 1.022272e-03 480 1.790000e+00 1.000000e+00 1.023165e-03 481 1.800000e+00 1.000000e+00 1.024058e-03 482 1.810000e+00 1.000000e+00 1.024950e-03 483 1.820000e+00 1.000000e+00 1.025842e-03 484 1.830000e+00 1.000000e+00 1.026733e-03 485 1.840000e+00 1.000000e+00 1.027624e-03 486 1.850000e+00 1.000000e+00 1.028514e-03 487 1.860000e+00 1.000000e+00 1.029405e-03 488 1.870000e+00 1.000000e+00 1.030294e-03 489 1.880000e+00 1.000000e+00 1.031184e-03 490 1.890000e+00 1.000000e+00 1.032073e-03 491 1.900000e+00 1.000000e+00 1.032961e-03 492 1.910000e+00 1.000000e+00 1.033850e-03 493 1.920000e+00 1.000000e+00 1.034737e-03 494 1.930000e+00 1.000000e+00 1.035625e-03 495 1.940000e+00 1.000000e+00 1.036512e-03 496 1.950000e+00 1.000000e+00 1.037399e-03 497 1.960000e+00 1.000000e+00 1.038286e-03 498 1.970000e+00 1.000000e+00 1.039172e-03 499 1.980000e+00 1.000000e+00 1.040058e-03 500 1.990000e+00 1.000000e+00 1.040944e-03 501 2.000000e+00 1.000000e+00 1.041829e-03 502 2.010000e+00 1.000000e+00 1.042714e-03 503 2.020000e+00 1.000000e+00 1.043599e-03 504 2.030000e+00 1.000000e+00 1.044483e-03 505 2.040000e+00 1.000000e+00 1.045368e-03 506 2.050000e+00 1.000000e+00 1.046251e-03 507 2.060000e+00 1.000000e+00 1.047135e-03 508 2.070000e+00 1.000000e+00 1.048019e-03 509 2.080000e+00 1.000000e+00 1.048902e-03 510 2.090000e+00 1.000000e+00 1.049785e-03 511 2.100000e+00 1.000000e+00 1.050668e-03 512 2.110000e+00 1.000000e+00 1.051550e-03 513 2.120000e+00 1.000000e+00 1.052432e-03 514 2.130000e+00 1.000000e+00 1.053314e-03 515 2.140000e+00 1.000000e+00 1.054196e-03 516 2.150000e+00 1.000000e+00 1.055078e-03 517 2.160000e+00 1.000000e+00 1.055959e-03 518 2.170000e+00 1.000000e+00 1.056840e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 519 2.180000e+00 1.000000e+00 1.057721e-03 520 2.190000e+00 1.000000e+00 1.058602e-03 521 2.200000e+00 1.000000e+00 1.059482e-03 522 2.210000e+00 1.000000e+00 1.060363e-03 523 2.220000e+00 1.000000e+00 1.061243e-03 524 2.230000e+00 1.000000e+00 1.062123e-03 525 2.240000e+00 1.000000e+00 1.063003e-03 526 2.250000e+00 1.000000e+00 1.063882e-03 527 2.260000e+00 1.000000e+00 1.064762e-03 528 2.270000e+00 1.000000e+00 1.065641e-03 529 2.280000e+00 1.000000e+00 1.066520e-03 530 2.290000e+00 1.000000e+00 1.067399e-03 531 2.300000e+00 1.000000e+00 1.068278e-03 532 2.310000e+00 1.000000e+00 1.069157e-03 533 2.320000e+00 1.000000e+00 1.070035e-03 534 2.330000e+00 1.000000e+00 1.070913e-03 535 2.340000e+00 1.000000e+00 1.071792e-03 536 2.350000e+00 1.000000e+00 1.072670e-03 537 2.360000e+00 1.000000e+00 1.073547e-03 538 2.370000e+00 1.000000e+00 1.074425e-03 539 2.380000e+00 1.000000e+00 1.075303e-03 540 2.390000e+00 1.000000e+00 1.076180e-03 541 2.400000e+00 1.000000e+00 1.077057e-03 542 2.410000e+00 1.000000e+00 1.077935e-03 543 2.420000e+00 1.000000e+00 1.078812e-03 544 2.430000e+00 1.000000e+00 1.079688e-03 545 2.440000e+00 1.000000e+00 1.080565e-03 546 2.450000e+00 1.000000e+00 1.081442e-03 547 2.460000e+00 1.000000e+00 1.082318e-03 548 2.470000e+00 1.000000e+00 1.083195e-03 549 2.480000e+00 1.000000e+00 1.084071e-03 550 2.490000e+00 1.000000e+00 1.084947e-03 551 2.500000e+00 1.000000e+00 1.085823e-03 552 2.510000e+00 1.000000e+00 1.086699e-03 553 2.520000e+00 1.000000e+00 1.087575e-03 554 2.530000e+00 1.000000e+00 1.088451e-03 555 2.540000e+00 1.000000e+00 1.089327e-03 556 2.550000e+00 1.000000e+00 1.090202e-03 557 2.560000e+00 1.000000e+00 1.091077e-03 558 2.570000e+00 1.000000e+00 1.091953e-03 559 2.580000e+00 1.000000e+00 1.092828e-03 560 2.590000e+00 1.000000e+00 1.093703e-03 561 2.600000e+00 1.000000e+00 1.094578e-03 562 2.610000e+00 1.000000e+00 1.095453e-03 563 2.620000e+00 1.000000e+00 1.096328e-03 564 2.630000e+00 1.000000e+00 1.097203e-03 565 2.640000e+00 1.000000e+00 1.098077e-03 566 2.650000e+00 1.000000e+00 1.098952e-03 567 2.660000e+00 1.000000e+00 1.099826e-03 568 2.670000e+00 1.000000e+00 1.100701e-03 569 2.680000e+00 1.000000e+00 1.101575e-03 570 2.690000e+00 1.000000e+00 1.102449e-03 571 2.700000e+00 1.000000e+00 1.103323e-03 572 2.710000e+00 1.000000e+00 1.104198e-03 573 2.720000e+00 1.000000e+00 1.105072e-03 574 2.730000e+00 1.000000e+00 1.105945e-03 575 2.740000e+00 1.000000e+00 1.106819e-03 576 2.750000e+00 1.000000e+00 1.107693e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 577 2.760000e+00 1.000000e+00 1.108567e-03 578 2.770000e+00 1.000000e+00 1.109440e-03 579 2.780000e+00 1.000000e+00 1.110314e-03 580 2.790000e+00 1.000000e+00 1.111187e-03 581 2.800000e+00 1.000000e+00 1.112061e-03 582 2.810000e+00 1.000000e+00 1.112934e-03 583 2.820000e+00 1.000000e+00 1.113808e-03 584 2.830000e+00 1.000000e+00 1.114681e-03 585 2.840000e+00 1.000000e+00 1.115554e-03 586 2.850000e+00 1.000000e+00 1.116427e-03 587 2.860000e+00 1.000000e+00 1.117300e-03 588 2.870000e+00 1.000000e+00 1.118173e-03 589 2.880000e+00 1.000000e+00 1.119046e-03 590 2.890000e+00 1.000000e+00 1.119919e-03 591 2.900000e+00 1.000000e+00 1.120792e-03 592 2.910000e+00 1.000000e+00 1.121664e-03 593 2.920000e+00 1.000000e+00 1.122537e-03 594 2.930000e+00 1.000000e+00 1.123410e-03 595 2.940000e+00 1.000000e+00 1.124282e-03 596 2.950000e+00 1.000000e+00 1.125155e-03 597 2.960000e+00 1.000000e+00 1.126027e-03 598 2.970000e+00 1.000000e+00 1.126900e-03 599 2.980000e+00 1.000000e+00 1.127772e-03 600 2.990000e+00 1.000000e+00 1.128645e-03 601 3.000000e+00 1.000000e+00 1.129517e-03 602 0.000000e+00 1.500000e+00 -1.250000e-19 603 1.000000e-02 1.500000e+00 4.561848e-05 604 2.000000e-02 1.500000e+00 9.076433e-05 605 3.000000e-02 1.500000e+00 1.354387e-04 606 4.000000e-02 1.500000e+00 1.796427e-04 607 5.000000e-02 1.500000e+00 2.233776e-04 608 6.000000e-02 1.500000e+00 2.666444e-04 609 7.000000e-02 1.500000e+00 3.094443e-04 610 8.000000e-02 1.500000e+00 3.517785e-04 611 9.000000e-02 1.500000e+00 3.936480e-04 612 1.000000e-01 1.500000e+00 4.350541e-04 613 1.100000e-01 1.500000e+00 4.759977e-04 614 1.200000e-01 1.500000e+00 5.164801e-04 615 1.300000e-01 1.500000e+00 5.565023e-04 616 1.400000e-01 1.500000e+00 5.960655e-04 617 1.500000e-01 1.500000e+00 6.351707e-04 618 1.600000e-01 1.500000e+00 6.738191e-04 619 1.700000e-01 1.500000e+00 7.120117e-04 620 1.800000e-01 1.500000e+00 7.497497e-04 621 1.900000e-01 1.500000e+00 7.870342e-04 622 2.000000e-01 1.500000e+00 8.238661e-04 623 2.100000e-01 1.500000e+00 8.602466e-04 624 2.200000e-01 1.500000e+00 8.961768e-04 625 2.300000e-01 1.500000e+00 9.316577e-04 626 2.400000e-01 1.500000e+00 9.666905e-04 627 2.500000e-01 1.500000e+00 1.001276e-03 628 2.600000e-01 1.500000e+00 1.035415e-03 629 2.700000e-01 1.500000e+00 1.069110e-03 630 2.800000e-01 1.500000e+00 1.102360e-03 631 2.900000e-01 1.500000e+00 1.135168e-03 632 3.000000e-01 1.500000e+00 1.167533e-03 633 3.100000e-01 1.500000e+00 1.199457e-03 634 3.200000e-01 1.500000e+00 1.230942e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 635 3.300000e-01 1.500000e+00 1.261987e-03 636 3.400000e-01 1.500000e+00 1.292595e-03 637 3.500000e-01 1.500000e+00 1.322766e-03 638 3.600000e-01 1.500000e+00 1.352500e-03 639 3.700000e-01 1.500000e+00 1.381800e-03 640 3.800000e-01 1.500000e+00 1.410665e-03 641 3.900000e-01 1.500000e+00 1.439098e-03 642 4.000000e-01 1.500000e+00 1.467098e-03 643 4.100000e-01 1.500000e+00 1.494667e-03 644 4.200000e-01 1.500000e+00 1.521806e-03 645 4.300000e-01 1.500000e+00 1.548515e-03 646 4.400000e-01 1.500000e+00 1.574796e-03 647 4.500000e-01 1.500000e+00 1.600649e-03 648 4.600000e-01 1.500000e+00 1.626075e-03 649 4.700000e-01 1.500000e+00 1.651076e-03 650 4.800000e-01 1.500000e+00 1.675650e-03 651 4.900000e-01 1.500000e+00 1.699801e-03 652 5.000000e-01 1.500000e+00 1.723528e-03 653 5.100000e-01 1.500000e+00 1.746832e-03 654 5.200000e-01 1.500000e+00 1.769713e-03 655 5.300000e-01 1.500000e+00 1.792173e-03 656 5.400000e-01 1.500000e+00 1.814212e-03 657 5.500000e-01 1.500000e+00 1.835831e-03 658 5.600000e-01 1.500000e+00 1.857029e-03 659 5.700000e-01 1.500000e+00 1.877809e-03 660 5.800000e-01 1.500000e+00 1.898169e-03 661 5.900000e-01 1.500000e+00 1.918111e-03 662 6.000000e-01 1.500000e+00 1.937634e-03 663 6.100000e-01 1.500000e+00 1.956739e-03 664 6.200000e-01 1.500000e+00 1.975427e-03 665 6.300000e-01 1.500000e+00 1.993696e-03 666 6.400000e-01 1.500000e+00 2.011547e-03 667 6.500000e-01 1.500000e+00 2.028980e-03 668 6.600000e-01 1.500000e+00 2.045995e-03 669 6.700000e-01 1.500000e+00 2.062591e-03 670 6.800000e-01 1.500000e+00 2.078768e-03 671 6.900000e-01 1.500000e+00 2.094524e-03 672 7.000000e-01 1.500000e+00 2.109860e-03 673 7.100000e-01 1.500000e+00 2.124774e-03 674 7.200000e-01 1.500000e+00 2.139265e-03 675 7.300000e-01 1.500000e+00 2.153332e-03 676 7.400000e-01 1.500000e+00 2.166974e-03 677 7.500000e-01 1.500000e+00 2.180189e-03 678 7.600000e-01 1.500000e+00 2.192977e-03 679 7.700000e-01 1.500000e+00 2.205335e-03 680 7.800000e-01 1.500000e+00 2.217262e-03 681 7.900000e-01 1.500000e+00 2.228759e-03 682 8.000000e-01 1.500000e+00 2.239823e-03 683 8.100000e-01 1.500000e+00 2.250456e-03 684 8.200000e-01 1.500000e+00 2.260658e-03 685 8.300000e-01 1.500000e+00 2.270431e-03 686 8.400000e-01 1.500000e+00 2.279777e-03 687 8.500000e-01 1.500000e+00 2.288700e-03 688 8.600000e-01 1.500000e+00 2.297206e-03 689 8.700000e-01 1.500000e+00 2.305301e-03 690 8.800000e-01 1.500000e+00 2.312995e-03 691 8.900000e-01 1.500000e+00 2.320298e-03 692 9.000000e-01 1.500000e+00 2.327222e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 693 9.100000e-01 1.500000e+00 2.333779e-03 694 9.200000e-01 1.500000e+00 2.339985e-03 695 9.300000e-01 1.500000e+00 2.345856e-03 696 9.400000e-01 1.500000e+00 2.351408e-03 697 9.500000e-01 1.500000e+00 2.356658e-03 698 9.600000e-01 1.500000e+00 2.361624e-03 699 9.700000e-01 1.500000e+00 2.366323e-03 700 9.800000e-01 1.500000e+00 2.370773e-03 701 9.900000e-01 1.500000e+00 2.374989e-03 702 1.000000e+00 1.500000e+00 2.378989e-03 703 1.010000e+00 1.500000e+00 2.382787e-03 704 1.020000e+00 1.500000e+00 2.386399e-03 705 1.030000e+00 1.500000e+00 2.389838e-03 706 1.040000e+00 1.500000e+00 2.393117e-03 707 1.050000e+00 1.500000e+00 2.396248e-03 708 1.060000e+00 1.500000e+00 2.399242e-03 709 1.070000e+00 1.500000e+00 2.402109e-03 710 1.080000e+00 1.500000e+00 2.404860e-03 711 1.090000e+00 1.500000e+00 2.407503e-03 712 1.100000e+00 1.500000e+00 2.410045e-03 713 1.110000e+00 1.500000e+00 2.412495e-03 714 1.120000e+00 1.500000e+00 2.414860e-03 715 1.130000e+00 1.500000e+00 2.417144e-03 716 1.140000e+00 1.500000e+00 2.419355e-03 717 1.150000e+00 1.500000e+00 2.421498e-03 718 1.160000e+00 1.500000e+00 2.423576e-03 719 1.170000e+00 1.500000e+00 2.425596e-03 720 1.180000e+00 1.500000e+00 2.427560e-03 721 1.190000e+00 1.500000e+00 2.429472e-03 722 1.200000e+00 1.500000e+00 2.431336e-03 723 1.210000e+00 1.500000e+00 2.433156e-03 724 1.220000e+00 1.500000e+00 2.434933e-03 725 1.230000e+00 1.500000e+00 2.436671e-03 726 1.240000e+00 1.500000e+00 2.438372e-03 727 1.250000e+00 1.500000e+00 2.440039e-03 728 1.260000e+00 1.500000e+00 2.441673e-03 729 1.270000e+00 1.500000e+00 2.443276e-03 730 1.280000e+00 1.500000e+00 2.444851e-03 731 1.290000e+00 1.500000e+00 2.446398e-03 732 1.300000e+00 1.500000e+00 2.447920e-03 733 1.310000e+00 1.500000e+00 2.449418e-03 734 1.320000e+00 1.500000e+00 2.450893e-03 735 1.330000e+00 1.500000e+00 2.452346e-03 736 1.340000e+00 1.500000e+00 2.453779e-03 737 1.350000e+00 1.500000e+00 2.455192e-03 738 1.360000e+00 1.500000e+00 2.456588e-03 739 1.370000e+00 1.500000e+00 2.457966e-03 740 1.380000e+00 1.500000e+00 2.459327e-03 741 1.390000e+00 1.500000e+00 2.460673e-03 742 1.400000e+00 1.500000e+00 2.462003e-03 743 1.410000e+00 1.500000e+00 2.463320e-03 744 1.420000e+00 1.500000e+00 2.464623e-03 745 1.430000e+00 1.500000e+00 2.465913e-03 746 1.440000e+00 1.500000e+00 2.467191e-03 747 1.450000e+00 1.500000e+00 2.468457e-03 748 1.460000e+00 1.500000e+00 2.469713e-03 749 1.470000e+00 1.500000e+00 2.470957e-03 750 1.480000e+00 1.500000e+00 2.472191e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 751 1.490000e+00 1.500000e+00 2.473415e-03 752 1.500000e+00 1.500000e+00 2.474630e-03 753 1.510000e+00 1.500000e+00 2.475836e-03 754 1.520000e+00 1.500000e+00 2.477034e-03 755 1.530000e+00 1.500000e+00 2.478223e-03 756 1.540000e+00 1.500000e+00 2.479404e-03 757 1.550000e+00 1.500000e+00 2.480578e-03 758 1.560000e+00 1.500000e+00 2.481744e-03 759 1.570000e+00 1.500000e+00 2.482904e-03 760 1.580000e+00 1.500000e+00 2.484057e-03 761 1.590000e+00 1.500000e+00 2.485203e-03 762 1.600000e+00 1.500000e+00 2.486343e-03 763 1.610000e+00 1.500000e+00 2.487477e-03 764 1.620000e+00 1.500000e+00 2.488605e-03 765 1.630000e+00 1.500000e+00 2.489728e-03 766 1.640000e+00 1.500000e+00 2.490845e-03 767 1.650000e+00 1.500000e+00 2.491957e-03 768 1.660000e+00 1.500000e+00 2.493064e-03 769 1.670000e+00 1.500000e+00 2.494167e-03 770 1.680000e+00 1.500000e+00 2.495264e-03 771 1.690000e+00 1.500000e+00 2.496358e-03 772 1.700000e+00 1.500000e+00 2.497446e-03 773 1.710000e+00 1.500000e+00 2.498531e-03 774 1.720000e+00 1.500000e+00 2.499612e-03 775 1.730000e+00 1.500000e+00 2.500688e-03 776 1.740000e+00 1.500000e+00 2.501761e-03 777 1.750000e+00 1.500000e+00 2.502830e-03 778 1.760000e+00 1.500000e+00 2.503896e-03 779 1.770000e+00 1.500000e+00 2.504958e-03 780 1.780000e+00 1.500000e+00 2.506017e-03 781 1.790000e+00 1.500000e+00 2.507073e-03 782 1.800000e+00 1.500000e+00 2.508125e-03 783 1.810000e+00 1.500000e+00 2.509175e-03 784 1.820000e+00 1.500000e+00 2.510221e-03 785 1.830000e+00 1.500000e+00 2.511265e-03 786 1.840000e+00 1.500000e+00 2.512305e-03 787 1.850000e+00 1.500000e+00 2.513343e-03 788 1.860000e+00 1.500000e+00 2.514379e-03 789 1.870000e+00 1.500000e+00 2.515412e-03 790 1.880000e+00 1.500000e+00 2.516442e-03 791 1.890000e+00 1.500000e+00 2.517470e-03 792 1.900000e+00 1.500000e+00 2.518496e-03 793 1.910000e+00 1.500000e+00 2.519520e-03 794 1.920000e+00 1.500000e+00 2.520541e-03 795 1.930000e+00 1.500000e+00 2.521560e-03 796 1.940000e+00 1.500000e+00 2.522577e-03 797 1.950000e+00 1.500000e+00 2.523592e-03 798 1.960000e+00 1.500000e+00 2.524605e-03 799 1.970000e+00 1.500000e+00 2.525616e-03 800 1.980000e+00 1.500000e+00 2.526625e-03 801 1.990000e+00 1.500000e+00 2.527632e-03 802 2.000000e+00 1.500000e+00 2.528637e-03 803 2.010000e+00 1.500000e+00 2.529641e-03 804 2.020000e+00 1.500000e+00 2.530643e-03 805 2.030000e+00 1.500000e+00 2.531643e-03 806 2.040000e+00 1.500000e+00 2.532642e-03 807 2.050000e+00 1.500000e+00 2.533639e-03 808 2.060000e+00 1.500000e+00 2.534635e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 809 2.070000e+00 1.500000e+00 2.535629e-03 810 2.080000e+00 1.500000e+00 2.536621e-03 811 2.090000e+00 1.500000e+00 2.537613e-03 812 2.100000e+00 1.500000e+00 2.538602e-03 813 2.110000e+00 1.500000e+00 2.539591e-03 814 2.120000e+00 1.500000e+00 2.540578e-03 815 2.130000e+00 1.500000e+00 2.541563e-03 816 2.140000e+00 1.500000e+00 2.542548e-03 817 2.150000e+00 1.500000e+00 2.543531e-03 818 2.160000e+00 1.500000e+00 2.544513e-03 819 2.170000e+00 1.500000e+00 2.545494e-03 820 2.180000e+00 1.500000e+00 2.546474e-03 821 2.190000e+00 1.500000e+00 2.547452e-03 822 2.200000e+00 1.500000e+00 2.548429e-03 823 2.210000e+00 1.500000e+00 2.549406e-03 824 2.220000e+00 1.500000e+00 2.550381e-03 825 2.230000e+00 1.500000e+00 2.551355e-03 826 2.240000e+00 1.500000e+00 2.552328e-03 827 2.250000e+00 1.500000e+00 2.553300e-03 828 2.260000e+00 1.500000e+00 2.554271e-03 829 2.270000e+00 1.500000e+00 2.555241e-03 830 2.280000e+00 1.500000e+00 2.556211e-03 831 2.290000e+00 1.500000e+00 2.557179e-03 832 2.300000e+00 1.500000e+00 2.558146e-03 833 2.310000e+00 1.500000e+00 2.559113e-03 834 2.320000e+00 1.500000e+00 2.560078e-03 835 2.330000e+00 1.500000e+00 2.561043e-03 836 2.340000e+00 1.500000e+00 2.562007e-03 837 2.350000e+00 1.500000e+00 2.562970e-03 838 2.360000e+00 1.500000e+00 2.563933e-03 839 2.370000e+00 1.500000e+00 2.564894e-03 840 2.380000e+00 1.500000e+00 2.565855e-03 841 2.390000e+00 1.500000e+00 2.566815e-03 842 2.400000e+00 1.500000e+00 2.567774e-03 843 2.410000e+00 1.500000e+00 2.568733e-03 844 2.420000e+00 1.500000e+00 2.569690e-03 845 2.430000e+00 1.500000e+00 2.570647e-03 846 2.440000e+00 1.500000e+00 2.571604e-03 847 2.450000e+00 1.500000e+00 2.572560e-03 848 2.460000e+00 1.500000e+00 2.573515e-03 849 2.470000e+00 1.500000e+00 2.574469e-03 850 2.480000e+00 1.500000e+00 2.575423e-03 851 2.490000e+00 1.500000e+00 2.576376e-03 852 2.500000e+00 1.500000e+00 2.577328e-03 853 2.510000e+00 1.500000e+00 2.578280e-03 854 2.520000e+00 1.500000e+00 2.579232e-03 855 2.530000e+00 1.500000e+00 2.580182e-03 856 2.540000e+00 1.500000e+00 2.581132e-03 857 2.550000e+00 1.500000e+00 2.582082e-03 858 2.560000e+00 1.500000e+00 2.583031e-03 859 2.570000e+00 1.500000e+00 2.583979e-03 860 2.580000e+00 1.500000e+00 2.584927e-03 861 2.590000e+00 1.500000e+00 2.585875e-03 862 2.600000e+00 1.500000e+00 2.586822e-03 863 2.610000e+00 1.500000e+00 2.587768e-03 864 2.620000e+00 1.500000e+00 2.588714e-03 865 2.630000e+00 1.500000e+00 2.589659e-03 866 2.640000e+00 1.500000e+00 2.590604e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 867 2.650000e+00 1.500000e+00 2.591549e-03 868 2.660000e+00 1.500000e+00 2.592492e-03 869 2.670000e+00 1.500000e+00 2.593436e-03 870 2.680000e+00 1.500000e+00 2.594379e-03 871 2.690000e+00 1.500000e+00 2.595321e-03 872 2.700000e+00 1.500000e+00 2.596264e-03 873 2.710000e+00 1.500000e+00 2.597205e-03 874 2.720000e+00 1.500000e+00 2.598146e-03 875 2.730000e+00 1.500000e+00 2.599087e-03 876 2.740000e+00 1.500000e+00 2.600028e-03 877 2.750000e+00 1.500000e+00 2.600968e-03 878 2.760000e+00 1.500000e+00 2.601907e-03 879 2.770000e+00 1.500000e+00 2.602846e-03 880 2.780000e+00 1.500000e+00 2.603785e-03 881 2.790000e+00 1.500000e+00 2.604724e-03 882 2.800000e+00 1.500000e+00 2.605662e-03 883 2.810000e+00 1.500000e+00 2.606599e-03 884 2.820000e+00 1.500000e+00 2.607537e-03 885 2.830000e+00 1.500000e+00 2.608474e-03 886 2.840000e+00 1.500000e+00 2.609410e-03 887 2.850000e+00 1.500000e+00 2.610346e-03 888 2.860000e+00 1.500000e+00 2.611282e-03 889 2.870000e+00 1.500000e+00 2.612218e-03 890 2.880000e+00 1.500000e+00 2.613153e-03 891 2.890000e+00 1.500000e+00 2.614088e-03 892 2.900000e+00 1.500000e+00 2.615022e-03 893 2.910000e+00 1.500000e+00 2.615957e-03 894 2.920000e+00 1.500000e+00 2.616891e-03 895 2.930000e+00 1.500000e+00 2.617824e-03 896 2.940000e+00 1.500000e+00 2.618757e-03 897 2.950000e+00 1.500000e+00 2.619690e-03 898 2.960000e+00 1.500000e+00 2.620623e-03 899 2.970000e+00 1.500000e+00 2.621555e-03 900 2.980000e+00 1.500000e+00 2.622488e-03 901 2.990000e+00 1.500000e+00 2.623419e-03 902 3.000000e+00 1.500000e+00 2.624351e-03 903 0.000000e+00 2.000000e+00 -1.250000e-19 904 1.000000e-02 2.000000e+00 5.434813e-05 905 2.000000e-02 2.000000e+00 1.083028e-04 906 3.000000e-02 2.000000e+00 1.618647e-04 907 4.000000e-02 2.000000e+00 2.150347e-04 908 5.000000e-02 2.000000e+00 2.678135e-04 909 6.000000e-02 2.000000e+00 3.202018e-04 910 7.000000e-02 2.000000e+00 3.722004e-04 911 8.000000e-02 2.000000e+00 4.238099e-04 912 9.000000e-02 2.000000e+00 4.750312e-04 913 1.000000e-01 2.000000e+00 5.258649e-04 914 1.100000e-01 2.000000e+00 5.763119e-04 915 1.200000e-01 2.000000e+00 6.263728e-04 916 1.300000e-01 2.000000e+00 6.760483e-04 917 1.400000e-01 2.000000e+00 7.253392e-04 918 1.500000e-01 2.000000e+00 7.742462e-04 919 1.600000e-01 2.000000e+00 8.227700e-04 920 1.700000e-01 2.000000e+00 8.709114e-04 921 1.800000e-01 2.000000e+00 9.186710e-04 922 1.900000e-01 2.000000e+00 9.660496e-04 923 2.000000e-01 2.000000e+00 1.013048e-03 924 2.100000e-01 2.000000e+00 1.059667e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 925 2.200000e-01 2.000000e+00 1.105906e-03 926 2.300000e-01 2.000000e+00 1.151768e-03 927 2.400000e-01 2.000000e+00 1.197252e-03 928 2.500000e-01 2.000000e+00 1.242359e-03 929 2.600000e-01 2.000000e+00 1.287090e-03 930 2.700000e-01 2.000000e+00 1.331446e-03 931 2.800000e-01 2.000000e+00 1.375427e-03 932 2.900000e-01 2.000000e+00 1.419034e-03 933 3.000000e-01 2.000000e+00 1.462267e-03 934 3.100000e-01 2.000000e+00 1.505128e-03 935 3.200000e-01 2.000000e+00 1.547617e-03 936 3.300000e-01 2.000000e+00 1.589735e-03 937 3.400000e-01 2.000000e+00 1.631482e-03 938 3.500000e-01 2.000000e+00 1.672859e-03 939 3.600000e-01 2.000000e+00 1.713867e-03 940 3.700000e-01 2.000000e+00 1.754506e-03 941 3.800000e-01 2.000000e+00 1.794777e-03 942 3.900000e-01 2.000000e+00 1.834681e-03 943 4.000000e-01 2.000000e+00 1.874219e-03 944 4.100000e-01 2.000000e+00 1.913390e-03 945 4.200000e-01 2.000000e+00 1.952196e-03 946 4.300000e-01 2.000000e+00 1.990637e-03 947 4.400000e-01 2.000000e+00 2.028715e-03 948 4.500000e-01 2.000000e+00 2.066428e-03 949 4.600000e-01 2.000000e+00 2.103779e-03 950 4.700000e-01 2.000000e+00 2.140768e-03 951 4.800000e-01 2.000000e+00 2.177396e-03 952 4.900000e-01 2.000000e+00 2.213662e-03 953 5.000000e-01 2.000000e+00 2.249568e-03 954 5.100000e-01 2.000000e+00 2.285115e-03 955 5.200000e-01 2.000000e+00 2.320302e-03 956 5.300000e-01 2.000000e+00 2.355131e-03 957 5.400000e-01 2.000000e+00 2.389602e-03 958 5.500000e-01 2.000000e+00 2.423716e-03 959 5.600000e-01 2.000000e+00 2.457473e-03 960 5.700000e-01 2.000000e+00 2.490874e-03 961 5.800000e-01 2.000000e+00 2.523920e-03 962 5.900000e-01 2.000000e+00 2.556610e-03 963 6.000000e-01 2.000000e+00 2.588946e-03 964 6.100000e-01 2.000000e+00 2.620928e-03 965 6.200000e-01 2.000000e+00 2.652556e-03 966 6.300000e-01 2.000000e+00 2.683832e-03 967 6.400000e-01 2.000000e+00 2.714755e-03 968 6.500000e-01 2.000000e+00 2.745326e-03 969 6.600000e-01 2.000000e+00 2.775546e-03 970 6.700000e-01 2.000000e+00 2.805415e-03 971 6.800000e-01 2.000000e+00 2.834934e-03 972 6.900000e-01 2.000000e+00 2.864103e-03 973 7.000000e-01 2.000000e+00 2.892922e-03 974 7.100000e-01 2.000000e+00 2.921391e-03 975 7.200000e-01 2.000000e+00 2.949512e-03 976 7.300000e-01 2.000000e+00 2.977285e-03 977 7.400000e-01 2.000000e+00 3.004709e-03 978 7.500000e-01 2.000000e+00 3.031786e-03 979 7.600000e-01 2.000000e+00 3.058515e-03 980 7.700000e-01 2.000000e+00 3.084896e-03 981 7.800000e-01 2.000000e+00 3.110931e-03 982 7.900000e-01 2.000000e+00 3.136619e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 983 8.000000e-01 2.000000e+00 3.161960e-03 984 8.100000e-01 2.000000e+00 3.186955e-03 985 8.200000e-01 2.000000e+00 3.211603e-03 986 8.300000e-01 2.000000e+00 3.235905e-03 987 8.400000e-01 2.000000e+00 3.259860e-03 988 8.500000e-01 2.000000e+00 3.283468e-03 989 8.600000e-01 2.000000e+00 3.306730e-03 990 8.700000e-01 2.000000e+00 3.329644e-03 991 8.800000e-01 2.000000e+00 3.352211e-03 992 8.900000e-01 2.000000e+00 3.374431e-03 993 9.000000e-01 2.000000e+00 3.396302e-03 994 9.100000e-01 2.000000e+00 3.417825e-03 995 9.200000e-01 2.000000e+00 3.438998e-03 996 9.300000e-01 2.000000e+00 3.459820e-03 997 9.400000e-01 2.000000e+00 3.480292e-03 998 9.500000e-01 2.000000e+00 3.500411e-03 999 9.600000e-01 2.000000e+00 3.520176e-03 1000 9.700000e-01 2.000000e+00 3.539587e-03 1001 9.800000e-01 2.000000e+00 3.558641e-03 1002 9.900000e-01 2.000000e+00 3.577337e-03 1003 1.000000e+00 2.000000e+00 3.595673e-03 1004 1.010000e+00 2.000000e+00 3.613647e-03 1005 1.020000e+00 2.000000e+00 3.631256e-03 1006 1.030000e+00 2.000000e+00 3.648498e-03 1007 1.040000e+00 2.000000e+00 3.665370e-03 1008 1.050000e+00 2.000000e+00 3.681869e-03 1009 1.060000e+00 2.000000e+00 3.697992e-03 1010 1.070000e+00 2.000000e+00 3.713735e-03 1011 1.080000e+00 2.000000e+00 3.729095e-03 1012 1.090000e+00 2.000000e+00 3.744069e-03 1013 1.100000e+00 2.000000e+00 3.758651e-03 1014 1.110000e+00 2.000000e+00 3.772839e-03 1015 1.120000e+00 2.000000e+00 3.786629e-03 1016 1.130000e+00 2.000000e+00 3.800016e-03 1017 1.140000e+00 2.000000e+00 3.812997e-03 1018 1.150000e+00 2.000000e+00 3.825570e-03 1019 1.160000e+00 2.000000e+00 3.837731e-03 1020 1.170000e+00 2.000000e+00 3.849478e-03 1021 1.180000e+00 2.000000e+00 3.860810e-03 1022 1.190000e+00 2.000000e+00 3.871727e-03 1023 1.200000e+00 2.000000e+00 3.882230e-03 1024 1.210000e+00 2.000000e+00 3.892320e-03 1025 1.220000e+00 2.000000e+00 3.902000e-03 1026 1.230000e+00 2.000000e+00 3.911277e-03 1027 1.240000e+00 2.000000e+00 3.920155e-03 1028 1.250000e+00 2.000000e+00 3.928642e-03 1029 1.260000e+00 2.000000e+00 3.936748e-03 1030 1.270000e+00 2.000000e+00 3.944482e-03 1031 1.280000e+00 2.000000e+00 3.951857e-03 1032 1.290000e+00 2.000000e+00 3.958885e-03 1033 1.300000e+00 2.000000e+00 3.965580e-03 1034 1.310000e+00 2.000000e+00 3.971955e-03 1035 1.320000e+00 2.000000e+00 3.978025e-03 1036 1.330000e+00 2.000000e+00 3.983804e-03 1037 1.340000e+00 2.000000e+00 3.989309e-03 1038 1.350000e+00 2.000000e+00 3.994553e-03 1039 1.360000e+00 2.000000e+00 3.999551e-03 1040 1.370000e+00 2.000000e+00 4.004317e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1041 1.380000e+00 2.000000e+00 4.008866e-03 1042 1.390000e+00 2.000000e+00 4.013210e-03 1043 1.400000e+00 2.000000e+00 4.017362e-03 1044 1.410000e+00 2.000000e+00 4.021334e-03 1045 1.420000e+00 2.000000e+00 4.025138e-03 1046 1.430000e+00 2.000000e+00 4.028784e-03 1047 1.440000e+00 2.000000e+00 4.032283e-03 1048 1.450000e+00 2.000000e+00 4.035643e-03 1049 1.460000e+00 2.000000e+00 4.038875e-03 1050 1.470000e+00 2.000000e+00 4.041986e-03 1051 1.480000e+00 2.000000e+00 4.044984e-03 1052 1.490000e+00 2.000000e+00 4.047877e-03 1053 1.500000e+00 2.000000e+00 4.050670e-03 1054 1.510000e+00 2.000000e+00 4.053371e-03 1055 1.520000e+00 2.000000e+00 4.055985e-03 1056 1.530000e+00 2.000000e+00 4.058518e-03 1057 1.540000e+00 2.000000e+00 4.060975e-03 1058 1.550000e+00 2.000000e+00 4.063359e-03 1059 1.560000e+00 2.000000e+00 4.065677e-03 1060 1.570000e+00 2.000000e+00 4.067931e-03 1061 1.580000e+00 2.000000e+00 4.070125e-03 1062 1.590000e+00 2.000000e+00 4.072263e-03 1063 1.600000e+00 2.000000e+00 4.074349e-03 1064 1.610000e+00 2.000000e+00 4.076385e-03 1065 1.620000e+00 2.000000e+00 4.078373e-03 1066 1.630000e+00 2.000000e+00 4.080318e-03 1067 1.640000e+00 2.000000e+00 4.082220e-03 1068 1.650000e+00 2.000000e+00 4.084083e-03 1069 1.660000e+00 2.000000e+00 4.085908e-03 1070 1.670000e+00 2.000000e+00 4.087697e-03 1071 1.680000e+00 2.000000e+00 4.089453e-03 1072 1.690000e+00 2.000000e+00 4.091177e-03 1073 1.700000e+00 2.000000e+00 4.092871e-03 1074 1.710000e+00 2.000000e+00 4.094535e-03 1075 1.720000e+00 2.000000e+00 4.096173e-03 1076 1.730000e+00 2.000000e+00 4.097784e-03 1077 1.740000e+00 2.000000e+00 4.099371e-03 1078 1.750000e+00 2.000000e+00 4.100934e-03 1079 1.760000e+00 2.000000e+00 4.102474e-03 1080 1.770000e+00 2.000000e+00 4.103993e-03 1081 1.780000e+00 2.000000e+00 4.105491e-03 1082 1.790000e+00 2.000000e+00 4.106970e-03 1083 1.800000e+00 2.000000e+00 4.108431e-03 1084 1.810000e+00 2.000000e+00 4.109873e-03 1085 1.820000e+00 2.000000e+00 4.111298e-03 1086 1.830000e+00 2.000000e+00 4.112707e-03 1087 1.840000e+00 2.000000e+00 4.114101e-03 1088 1.850000e+00 2.000000e+00 4.115479e-03 1089 1.860000e+00 2.000000e+00 4.116843e-03 1090 1.870000e+00 2.000000e+00 4.118193e-03 1091 1.880000e+00 2.000000e+00 4.119530e-03 1092 1.890000e+00 2.000000e+00 4.120855e-03 1093 1.900000e+00 2.000000e+00 4.122167e-03 1094 1.910000e+00 2.000000e+00 4.123467e-03 1095 1.920000e+00 2.000000e+00 4.124756e-03 1096 1.930000e+00 2.000000e+00 4.126035e-03 1097 1.940000e+00 2.000000e+00 4.127303e-03 1098 1.950000e+00 2.000000e+00 4.128561e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1099 1.960000e+00 2.000000e+00 4.129809e-03 1100 1.970000e+00 2.000000e+00 4.131048e-03 1101 1.980000e+00 2.000000e+00 4.132278e-03 1102 1.990000e+00 2.000000e+00 4.133499e-03 1103 2.000000e+00 2.000000e+00 4.134712e-03 1104 2.010000e+00 2.000000e+00 4.135917e-03 1105 2.020000e+00 2.000000e+00 4.137114e-03 1106 2.030000e+00 2.000000e+00 4.138303e-03 1107 2.040000e+00 2.000000e+00 4.139485e-03 1108 2.050000e+00 2.000000e+00 4.140661e-03 1109 2.060000e+00 2.000000e+00 4.141829e-03 1110 2.070000e+00 2.000000e+00 4.142991e-03 1111 2.080000e+00 2.000000e+00 4.144147e-03 1112 2.090000e+00 2.000000e+00 4.145296e-03 1113 2.100000e+00 2.000000e+00 4.146440e-03 1114 2.110000e+00 2.000000e+00 4.147577e-03 1115 2.120000e+00 2.000000e+00 4.148709e-03 1116 2.130000e+00 2.000000e+00 4.149836e-03 1117 2.140000e+00 2.000000e+00 4.150958e-03 1118 2.150000e+00 2.000000e+00 4.152074e-03 1119 2.160000e+00 2.000000e+00 4.153185e-03 1120 2.170000e+00 2.000000e+00 4.154292e-03 1121 2.180000e+00 2.000000e+00 4.155394e-03 1122 2.190000e+00 2.000000e+00 4.156491e-03 1123 2.200000e+00 2.000000e+00 4.157584e-03 1124 2.210000e+00 2.000000e+00 4.158673e-03 1125 2.220000e+00 2.000000e+00 4.159758e-03 1126 2.230000e+00 2.000000e+00 4.160839e-03 1127 2.240000e+00 2.000000e+00 4.161915e-03 1128 2.250000e+00 2.000000e+00 4.162988e-03 1129 2.260000e+00 2.000000e+00 4.164058e-03 1130 2.270000e+00 2.000000e+00 4.165123e-03 1131 2.280000e+00 2.000000e+00 4.166185e-03 1132 2.290000e+00 2.000000e+00 4.167244e-03 1133 2.300000e+00 2.000000e+00 4.168300e-03 1134 2.310000e+00 2.000000e+00 4.169352e-03 1135 2.320000e+00 2.000000e+00 4.170401e-03 1136 2.330000e+00 2.000000e+00 4.171447e-03 1137 2.340000e+00 2.000000e+00 4.172490e-03 1138 2.350000e+00 2.000000e+00 4.173530e-03 1139 2.360000e+00 2.000000e+00 4.174567e-03 1140 2.370000e+00 2.000000e+00 4.175602e-03 1141 2.380000e+00 2.000000e+00 4.176633e-03 1142 2.390000e+00 2.000000e+00 4.177663e-03 1143 2.400000e+00 2.000000e+00 4.178689e-03 1144 2.410000e+00 2.000000e+00 4.179713e-03 1145 2.420000e+00 2.000000e+00 4.180735e-03 1146 2.430000e+00 2.000000e+00 4.181754e-03 1147 2.440000e+00 2.000000e+00 4.182771e-03 1148 2.450000e+00 2.000000e+00 4.183786e-03 1149 2.460000e+00 2.000000e+00 4.184798e-03 1150 2.470000e+00 2.000000e+00 4.185808e-03 1151 2.480000e+00 2.000000e+00 4.186816e-03 1152 2.490000e+00 2.000000e+00 4.187822e-03 1153 2.500000e+00 2.000000e+00 4.188826e-03 1154 2.510000e+00 2.000000e+00 4.189828e-03 1155 2.520000e+00 2.000000e+00 4.190828e-03 1156 2.530000e+00 2.000000e+00 4.191826e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1157 2.540000e+00 2.000000e+00 4.192823e-03 1158 2.550000e+00 2.000000e+00 4.193817e-03 1159 2.560000e+00 2.000000e+00 4.194810e-03 1160 2.570000e+00 2.000000e+00 4.195801e-03 1161 2.580000e+00 2.000000e+00 4.196790e-03 1162 2.590000e+00 2.000000e+00 4.197778e-03 1163 2.600000e+00 2.000000e+00 4.198764e-03 1164 2.610000e+00 2.000000e+00 4.199748e-03 1165 2.620000e+00 2.000000e+00 4.200731e-03 1166 2.630000e+00 2.000000e+00 4.201712e-03 1167 2.640000e+00 2.000000e+00 4.202692e-03 1168 2.650000e+00 2.000000e+00 4.203670e-03 1169 2.660000e+00 2.000000e+00 4.204647e-03 1170 2.670000e+00 2.000000e+00 4.205622e-03 1171 2.680000e+00 2.000000e+00 4.206597e-03 1172 2.690000e+00 2.000000e+00 4.207569e-03 1173 2.700000e+00 2.000000e+00 4.208541e-03 1174 2.710000e+00 2.000000e+00 4.209511e-03 1175 2.720000e+00 2.000000e+00 4.210479e-03 1176 2.730000e+00 2.000000e+00 4.211447e-03 1177 2.740000e+00 2.000000e+00 4.212413e-03 1178 2.750000e+00 2.000000e+00 4.213378e-03 1179 2.760000e+00 2.000000e+00 4.214342e-03 1180 2.770000e+00 2.000000e+00 4.215305e-03 1181 2.780000e+00 2.000000e+00 4.216267e-03 1182 2.790000e+00 2.000000e+00 4.217227e-03 1183 2.800000e+00 2.000000e+00 4.218186e-03 1184 2.810000e+00 2.000000e+00 4.219145e-03 1185 2.820000e+00 2.000000e+00 4.220102e-03 1186 2.830000e+00 2.000000e+00 4.221058e-03 1187 2.840000e+00 2.000000e+00 4.222013e-03 1188 2.850000e+00 2.000000e+00 4.222967e-03 1189 2.860000e+00 2.000000e+00 4.223921e-03 1190 2.870000e+00 2.000000e+00 4.224873e-03 1191 2.880000e+00 2.000000e+00 4.225824e-03 1192 2.890000e+00 2.000000e+00 4.226774e-03 1193 2.900000e+00 2.000000e+00 4.227724e-03 1194 2.910000e+00 2.000000e+00 4.228672e-03 1195 2.920000e+00 2.000000e+00 4.229620e-03 1196 2.930000e+00 2.000000e+00 4.230567e-03 1197 2.940000e+00 2.000000e+00 4.231512e-03 1198 2.950000e+00 2.000000e+00 4.232458e-03 1199 2.960000e+00 2.000000e+00 4.233402e-03 1200 2.970000e+00 2.000000e+00 4.234345e-03 1201 2.980000e+00 2.000000e+00 4.235288e-03 1202 2.990000e+00 2.000000e+00 4.236229e-03 1203 3.000000e+00 2.000000e+00 4.237170e-03 1204 0.000000e+00 2.500000e+00 -1.250000e-19 1205 1.000000e-02 2.500000e+00 5.937829e-05 1206 2.000000e-02 2.500000e+00 1.184251e-04 1207 3.000000e-02 2.500000e+00 1.771408e-04 1208 4.000000e-02 2.500000e+00 2.355261e-04 1209 5.000000e-02 2.500000e+00 2.935814e-04 1210 6.000000e-02 2.500000e+00 3.513072e-04 1211 7.000000e-02 2.500000e+00 4.087041e-04 1212 8.000000e-02 2.500000e+00 4.657725e-04 1213 9.000000e-02 2.500000e+00 5.225130e-04 1214 1.000000e-01 2.500000e+00 5.789260e-04 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1215 1.100000e-01 2.500000e+00 6.350121e-04 1216 1.200000e-01 2.500000e+00 6.907717e-04 1217 1.300000e-01 2.500000e+00 7.462055e-04 1218 1.400000e-01 2.500000e+00 8.013137e-04 1219 1.500000e-01 2.500000e+00 8.560971e-04 1220 1.600000e-01 2.500000e+00 9.105560e-04 1221 1.700000e-01 2.500000e+00 9.646909e-04 1222 1.800000e-01 2.500000e+00 1.018502e-03 1223 1.900000e-01 2.500000e+00 1.071991e-03 1224 2.000000e-01 2.500000e+00 1.125157e-03 1225 2.100000e-01 2.500000e+00 1.178001e-03 1226 2.200000e-01 2.500000e+00 1.230524e-03 1227 2.300000e-01 2.500000e+00 1.282726e-03 1228 2.400000e-01 2.500000e+00 1.334607e-03 1229 2.500000e-01 2.500000e+00 1.386168e-03 1230 2.600000e-01 2.500000e+00 1.437410e-03 1231 2.700000e-01 2.500000e+00 1.488332e-03 1232 2.800000e-01 2.500000e+00 1.538936e-03 1233 2.900000e-01 2.500000e+00 1.589222e-03 1234 3.000000e-01 2.500000e+00 1.639190e-03 1235 3.100000e-01 2.500000e+00 1.688842e-03 1236 3.200000e-01 2.500000e+00 1.738176e-03 1237 3.300000e-01 2.500000e+00 1.787195e-03 1238 3.400000e-01 2.500000e+00 1.835897e-03 1239 3.500000e-01 2.500000e+00 1.884285e-03 1240 3.600000e-01 2.500000e+00 1.932358e-03 1241 3.700000e-01 2.500000e+00 1.980116e-03 1242 3.800000e-01 2.500000e+00 2.027561e-03 1243 3.900000e-01 2.500000e+00 2.074692e-03 1244 4.000000e-01 2.500000e+00 2.121511e-03 1245 4.100000e-01 2.500000e+00 2.168017e-03 1246 4.200000e-01 2.500000e+00 2.214211e-03 1247 4.300000e-01 2.500000e+00 2.260094e-03 1248 4.400000e-01 2.500000e+00 2.305666e-03 1249 4.500000e-01 2.500000e+00 2.350927e-03 1250 4.600000e-01 2.500000e+00 2.395878e-03 1251 4.700000e-01 2.500000e+00 2.440519e-03 1252 4.800000e-01 2.500000e+00 2.484852e-03 1253 4.900000e-01 2.500000e+00 2.528875e-03 1254 5.000000e-01 2.500000e+00 2.572590e-03 1255 5.100000e-01 2.500000e+00 2.615998e-03 1256 5.200000e-01 2.500000e+00 2.659098e-03 1257 5.300000e-01 2.500000e+00 2.701891e-03 1258 5.400000e-01 2.500000e+00 2.744377e-03 1259 5.500000e-01 2.500000e+00 2.786558e-03 1260 5.600000e-01 2.500000e+00 2.828433e-03 1261 5.700000e-01 2.500000e+00 2.870002e-03 1262 5.800000e-01 2.500000e+00 2.911267e-03 1263 5.900000e-01 2.500000e+00 2.952228e-03 1264 6.000000e-01 2.500000e+00 2.992885e-03 1265 6.100000e-01 2.500000e+00 3.033238e-03 1266 6.200000e-01 2.500000e+00 3.073289e-03 1267 6.300000e-01 2.500000e+00 3.113036e-03 1268 6.400000e-01 2.500000e+00 3.152482e-03 1269 6.500000e-01 2.500000e+00 3.191626e-03 1270 6.600000e-01 2.500000e+00 3.230468e-03 1271 6.700000e-01 2.500000e+00 3.269010e-03 1272 6.800000e-01 2.500000e+00 3.307251e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1273 6.900000e-01 2.500000e+00 3.345191e-03 1274 7.000000e-01 2.500000e+00 3.382833e-03 1275 7.100000e-01 2.500000e+00 3.420174e-03 1276 7.200000e-01 2.500000e+00 3.457217e-03 1277 7.300000e-01 2.500000e+00 3.493962e-03 1278 7.400000e-01 2.500000e+00 3.530408e-03 1279 7.500000e-01 2.500000e+00 3.566557e-03 1280 7.600000e-01 2.500000e+00 3.602408e-03 1281 7.700000e-01 2.500000e+00 3.637962e-03 1282 7.800000e-01 2.500000e+00 3.673219e-03 1283 7.900000e-01 2.500000e+00 3.708181e-03 1284 8.000000e-01 2.500000e+00 3.742846e-03 1285 8.100000e-01 2.500000e+00 3.777216e-03 1286 8.200000e-01 2.500000e+00 3.811290e-03 1287 8.300000e-01 2.500000e+00 3.845070e-03 1288 8.400000e-01 2.500000e+00 3.878555e-03 1289 8.500000e-01 2.500000e+00 3.911746e-03 1290 8.600000e-01 2.500000e+00 3.944644e-03 1291 8.700000e-01 2.500000e+00 3.977247e-03 1292 8.800000e-01 2.500000e+00 4.009557e-03 1293 8.900000e-01 2.500000e+00 4.041575e-03 1294 9.000000e-01 2.500000e+00 4.073300e-03 1295 9.100000e-01 2.500000e+00 4.104732e-03 1296 9.200000e-01 2.500000e+00 4.135872e-03 1297 9.300000e-01 2.500000e+00 4.166720e-03 1298 9.400000e-01 2.500000e+00 4.197277e-03 1299 9.500000e-01 2.500000e+00 4.227542e-03 1300 9.600000e-01 2.500000e+00 4.257516e-03 1301 9.700000e-01 2.500000e+00 4.287199e-03 1302 9.800000e-01 2.500000e+00 4.316591e-03 1303 9.900000e-01 2.500000e+00 4.345693e-03 1304 1.000000e+00 2.500000e+00 4.374504e-03 1305 1.010000e+00 2.500000e+00 4.403024e-03 1306 1.020000e+00 2.500000e+00 4.431255e-03 1307 1.030000e+00 2.500000e+00 4.459195e-03 1308 1.040000e+00 2.500000e+00 4.486845e-03 1309 1.050000e+00 2.500000e+00 4.514205e-03 1310 1.060000e+00 2.500000e+00 4.541274e-03 1311 1.070000e+00 2.500000e+00 4.568054e-03 1312 1.080000e+00 2.500000e+00 4.594543e-03 1313 1.090000e+00 2.500000e+00 4.620742e-03 1314 1.100000e+00 2.500000e+00 4.646651e-03 1315 1.110000e+00 2.500000e+00 4.672268e-03 1316 1.120000e+00 2.500000e+00 4.697595e-03 1317 1.130000e+00 2.500000e+00 4.722631e-03 1318 1.140000e+00 2.500000e+00 4.747375e-03 1319 1.150000e+00 2.500000e+00 4.771828e-03 1320 1.160000e+00 2.500000e+00 4.795988e-03 1321 1.170000e+00 2.500000e+00 4.819855e-03 1322 1.180000e+00 2.500000e+00 4.843429e-03 1323 1.190000e+00 2.500000e+00 4.866708e-03 1324 1.200000e+00 2.500000e+00 4.889693e-03 1325 1.210000e+00 2.500000e+00 4.912382e-03 1326 1.220000e+00 2.500000e+00 4.934774e-03 1327 1.230000e+00 2.500000e+00 4.956869e-03 1328 1.240000e+00 2.500000e+00 4.978664e-03 1329 1.250000e+00 2.500000e+00 5.000160e-03 1330 1.260000e+00 2.500000e+00 5.021353e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1331 1.270000e+00 2.500000e+00 5.042244e-03 1332 1.280000e+00 2.500000e+00 5.062829e-03 1333 1.290000e+00 2.500000e+00 5.083108e-03 1334 1.300000e+00 2.500000e+00 5.103078e-03 1335 1.310000e+00 2.500000e+00 5.122736e-03 1336 1.320000e+00 2.500000e+00 5.142081e-03 1337 1.330000e+00 2.500000e+00 5.161110e-03 1338 1.340000e+00 2.500000e+00 5.179819e-03 1339 1.350000e+00 2.500000e+00 5.198207e-03 1340 1.360000e+00 2.500000e+00 5.216269e-03 1341 1.370000e+00 2.500000e+00 5.234003e-03 1342 1.380000e+00 2.500000e+00 5.251403e-03 1343 1.390000e+00 2.500000e+00 5.268467e-03 1344 1.400000e+00 2.500000e+00 5.285191e-03 1345 1.410000e+00 2.500000e+00 5.301569e-03 1346 1.420000e+00 2.500000e+00 5.317599e-03 1347 1.430000e+00 2.500000e+00 5.333274e-03 1348 1.440000e+00 2.500000e+00 5.348590e-03 1349 1.450000e+00 2.500000e+00 5.363543e-03 1350 1.460000e+00 2.500000e+00 5.378128e-03 1351 1.470000e+00 2.500000e+00 5.392340e-03 1352 1.480000e+00 2.500000e+00 5.406176e-03 1353 1.490000e+00 2.500000e+00 5.419631e-03 1354 1.500000e+00 2.500000e+00 5.432701e-03 1355 1.510000e+00 2.500000e+00 5.445383e-03 1356 1.520000e+00 2.500000e+00 5.457675e-03 1357 1.530000e+00 2.500000e+00 5.469576e-03 1358 1.540000e+00 2.500000e+00 5.481083e-03 1359 1.550000e+00 2.500000e+00 5.492199e-03 1360 1.560000e+00 2.500000e+00 5.502923e-03 1361 1.570000e+00 2.500000e+00 5.513258e-03 1362 1.580000e+00 2.500000e+00 5.523208e-03 1363 1.590000e+00 2.500000e+00 5.532778e-03 1364 1.600000e+00 2.500000e+00 5.541972e-03 1365 1.610000e+00 2.500000e+00 5.550800e-03 1366 1.620000e+00 2.500000e+00 5.559268e-03 1367 1.630000e+00 2.500000e+00 5.567385e-03 1368 1.640000e+00 2.500000e+00 5.575163e-03 1369 1.650000e+00 2.500000e+00 5.582612e-03 1370 1.660000e+00 2.500000e+00 5.589743e-03 1371 1.670000e+00 2.500000e+00 5.596568e-03 1372 1.680000e+00 2.500000e+00 5.603099e-03 1373 1.690000e+00 2.500000e+00 5.609350e-03 1374 1.700000e+00 2.500000e+00 5.615333e-03 1375 1.710000e+00 2.500000e+00 5.621060e-03 1376 1.720000e+00 2.500000e+00 5.626544e-03 1377 1.730000e+00 2.500000e+00 5.631797e-03 1378 1.740000e+00 2.500000e+00 5.636832e-03 1379 1.750000e+00 2.500000e+00 5.641659e-03 1380 1.760000e+00 2.500000e+00 5.646290e-03 1381 1.770000e+00 2.500000e+00 5.650735e-03 1382 1.780000e+00 2.500000e+00 5.655006e-03 1383 1.790000e+00 2.500000e+00 5.659112e-03 1384 1.800000e+00 2.500000e+00 5.663062e-03 1385 1.810000e+00 2.500000e+00 5.666866e-03 1386 1.820000e+00 2.500000e+00 5.670530e-03 1387 1.830000e+00 2.500000e+00 5.674065e-03 1388 1.840000e+00 2.500000e+00 5.677476e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1389 1.850000e+00 2.500000e+00 5.680772e-03 1390 1.860000e+00 2.500000e+00 5.683958e-03 1391 1.870000e+00 2.500000e+00 5.687041e-03 1392 1.880000e+00 2.500000e+00 5.690026e-03 1393 1.890000e+00 2.500000e+00 5.692920e-03 1394 1.900000e+00 2.500000e+00 5.695728e-03 1395 1.910000e+00 2.500000e+00 5.698453e-03 1396 1.920000e+00 2.500000e+00 5.701101e-03 1397 1.930000e+00 2.500000e+00 5.703676e-03 1398 1.940000e+00 2.500000e+00 5.706181e-03 1399 1.950000e+00 2.500000e+00 5.708622e-03 1400 1.960000e+00 2.500000e+00 5.711000e-03 1401 1.970000e+00 2.500000e+00 5.713319e-03 1402 1.980000e+00 2.500000e+00 5.715583e-03 1403 1.990000e+00 2.500000e+00 5.717794e-03 1404 2.000000e+00 2.500000e+00 5.719955e-03 1405 2.010000e+00 2.500000e+00 5.722069e-03 1406 2.020000e+00 2.500000e+00 5.724137e-03 1407 2.030000e+00 2.500000e+00 5.726162e-03 1408 2.040000e+00 2.500000e+00 5.728147e-03 1409 2.050000e+00 2.500000e+00 5.730092e-03 1410 2.060000e+00 2.500000e+00 5.732001e-03 1411 2.070000e+00 2.500000e+00 5.733874e-03 1412 2.080000e+00 2.500000e+00 5.735713e-03 1413 2.090000e+00 2.500000e+00 5.737521e-03 1414 2.100000e+00 2.500000e+00 5.739298e-03 1415 2.110000e+00 2.500000e+00 5.741045e-03 1416 2.120000e+00 2.500000e+00 5.742764e-03 1417 2.130000e+00 2.500000e+00 5.744457e-03 1418 2.140000e+00 2.500000e+00 5.746124e-03 1419 2.150000e+00 2.500000e+00 5.747767e-03 1420 2.160000e+00 2.500000e+00 5.749386e-03 1421 2.170000e+00 2.500000e+00 5.750983e-03 1422 2.180000e+00 2.500000e+00 5.752558e-03 1423 2.190000e+00 2.500000e+00 5.754113e-03 1424 2.200000e+00 2.500000e+00 5.755648e-03 1425 2.210000e+00 2.500000e+00 5.757164e-03 1426 2.220000e+00 2.500000e+00 5.758661e-03 1427 2.230000e+00 2.500000e+00 5.760141e-03 1428 2.240000e+00 2.500000e+00 5.761604e-03 1429 2.250000e+00 2.500000e+00 5.763051e-03 1430 2.260000e+00 2.500000e+00 5.764483e-03 1431 2.270000e+00 2.500000e+00 5.765899e-03 1432 2.280000e+00 2.500000e+00 5.767301e-03 1433 2.290000e+00 2.500000e+00 5.768689e-03 1434 2.300000e+00 2.500000e+00 5.770063e-03 1435 2.310000e+00 2.500000e+00 5.771425e-03 1436 2.320000e+00 2.500000e+00 5.772774e-03 1437 2.330000e+00 2.500000e+00 5.774111e-03 1438 2.340000e+00 2.500000e+00 5.775436e-03 1439 2.350000e+00 2.500000e+00 5.776750e-03 1440 2.360000e+00 2.500000e+00 5.778054e-03 1441 2.370000e+00 2.500000e+00 5.779347e-03 1442 2.380000e+00 2.500000e+00 5.780629e-03 1443 2.390000e+00 2.500000e+00 5.781902e-03 1444 2.400000e+00 2.500000e+00 5.783166e-03 1445 2.410000e+00 2.500000e+00 5.784420e-03 1446 2.420000e+00 2.500000e+00 5.785666e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1447 2.430000e+00 2.500000e+00 5.786902e-03 1448 2.440000e+00 2.500000e+00 5.788131e-03 1449 2.450000e+00 2.500000e+00 5.789351e-03 1450 2.460000e+00 2.500000e+00 5.790564e-03 1451 2.470000e+00 2.500000e+00 5.791769e-03 1452 2.480000e+00 2.500000e+00 5.792967e-03 1453 2.490000e+00 2.500000e+00 5.794158e-03 1454 2.500000e+00 2.500000e+00 5.795341e-03 1455 2.510000e+00 2.500000e+00 5.796518e-03 1456 2.520000e+00 2.500000e+00 5.797689e-03 1457 2.530000e+00 2.500000e+00 5.798853e-03 1458 2.540000e+00 2.500000e+00 5.800011e-03 1459 2.550000e+00 2.500000e+00 5.801163e-03 1460 2.560000e+00 2.500000e+00 5.802310e-03 1461 2.570000e+00 2.500000e+00 5.803450e-03 1462 2.580000e+00 2.500000e+00 5.804586e-03 1463 2.590000e+00 2.500000e+00 5.805715e-03 1464 2.600000e+00 2.500000e+00 5.806840e-03 1465 2.610000e+00 2.500000e+00 5.807960e-03 1466 2.620000e+00 2.500000e+00 5.809074e-03 1467 2.630000e+00 2.500000e+00 5.810184e-03 1468 2.640000e+00 2.500000e+00 5.811290e-03 1469 2.650000e+00 2.500000e+00 5.812390e-03 1470 2.660000e+00 2.500000e+00 5.813487e-03 1471 2.670000e+00 2.500000e+00 5.814579e-03 1472 2.680000e+00 2.500000e+00 5.815667e-03 1473 2.690000e+00 2.500000e+00 5.816750e-03 1474 2.700000e+00 2.500000e+00 5.817830e-03 1475 2.710000e+00 2.500000e+00 5.818906e-03 1476 2.720000e+00 2.500000e+00 5.819978e-03 1477 2.730000e+00 2.500000e+00 5.821047e-03 1478 2.740000e+00 2.500000e+00 5.822111e-03 1479 2.750000e+00 2.500000e+00 5.823173e-03 1480 2.760000e+00 2.500000e+00 5.824231e-03 1481 2.770000e+00 2.500000e+00 5.825285e-03 1482 2.780000e+00 2.500000e+00 5.826336e-03 1483 2.790000e+00 2.500000e+00 5.827384e-03 1484 2.800000e+00 2.500000e+00 5.828429e-03 1485 2.810000e+00 2.500000e+00 5.829471e-03 1486 2.820000e+00 2.500000e+00 5.830510e-03 1487 2.830000e+00 2.500000e+00 5.831546e-03 1488 2.840000e+00 2.500000e+00 5.832579e-03 1489 2.850000e+00 2.500000e+00 5.833609e-03 1490 2.860000e+00 2.500000e+00 5.834637e-03 1491 2.870000e+00 2.500000e+00 5.835662e-03 1492 2.880000e+00 2.500000e+00 5.836684e-03 1493 2.890000e+00 2.500000e+00 5.837704e-03 1494 2.900000e+00 2.500000e+00 5.838721e-03 1495 2.910000e+00 2.500000e+00 5.839736e-03 1496 2.920000e+00 2.500000e+00 5.840748e-03 1497 2.930000e+00 2.500000e+00 5.841758e-03 1498 2.940000e+00 2.500000e+00 5.842766e-03 1499 2.950000e+00 2.500000e+00 5.843771e-03 1500 2.960000e+00 2.500000e+00 5.844775e-03 1501 2.970000e+00 2.500000e+00 5.845776e-03 1502 2.980000e+00 2.500000e+00 5.846775e-03 1503 2.990000e+00 2.500000e+00 5.847772e-03 1504 3.000000e+00 2.500000e+00 5.848767e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1505 0.000000e+00 3.000000e+00 -1.250000e-19 1506 1.000000e-02 3.000000e+00 6.224150e-05 1507 2.000000e-02 3.000000e+00 1.241998e-04 1508 3.000000e-02 3.000000e+00 1.858754e-04 1509 4.000000e-02 3.000000e+00 2.472685e-04 1510 5.000000e-02 3.000000e+00 3.083796e-04 1511 6.000000e-02 3.000000e+00 3.692090e-04 1512 7.000000e-02 3.000000e+00 4.297570e-04 1513 8.000000e-02 3.000000e+00 4.900241e-04 1514 9.000000e-02 3.000000e+00 5.500106e-04 1515 1.000000e-01 3.000000e+00 6.097168e-04 1516 1.100000e-01 3.000000e+00 6.691432e-04 1517 1.200000e-01 3.000000e+00 7.282900e-04 1518 1.300000e-01 3.000000e+00 7.871577e-04 1519 1.400000e-01 3.000000e+00 8.457466e-04 1520 1.500000e-01 3.000000e+00 9.040571e-04 1521 1.600000e-01 3.000000e+00 9.620894e-04 1522 1.700000e-01 3.000000e+00 1.019844e-03 1523 1.800000e-01 3.000000e+00 1.077321e-03 1524 1.900000e-01 3.000000e+00 1.134522e-03 1525 2.000000e-01 3.000000e+00 1.191445e-03 1526 2.100000e-01 3.000000e+00 1.248093e-03 1527 2.200000e-01 3.000000e+00 1.304464e-03 1528 2.300000e-01 3.000000e+00 1.360560e-03 1529 2.400000e-01 3.000000e+00 1.416380e-03 1530 2.500000e-01 3.000000e+00 1.471926e-03 1531 2.600000e-01 3.000000e+00 1.527197e-03 1532 2.700000e-01 3.000000e+00 1.582194e-03 1533 2.800000e-01 3.000000e+00 1.636917e-03 1534 2.900000e-01 3.000000e+00 1.691367e-03 1535 3.000000e-01 3.000000e+00 1.745543e-03 1536 3.100000e-01 3.000000e+00 1.799447e-03 1537 3.200000e-01 3.000000e+00 1.853078e-03 1538 3.300000e-01 3.000000e+00 1.906437e-03 1539 3.400000e-01 3.000000e+00 1.959525e-03 1540 3.500000e-01 3.000000e+00 2.012341e-03 1541 3.600000e-01 3.000000e+00 2.064886e-03 1542 3.700000e-01 3.000000e+00 2.117160e-03 1543 3.800000e-01 3.000000e+00 2.169164e-03 1544 3.900000e-01 3.000000e+00 2.220898e-03 1545 4.000000e-01 3.000000e+00 2.272362e-03 1546 4.100000e-01 3.000000e+00 2.323556e-03 1547 4.200000e-01 3.000000e+00 2.374482e-03 1548 4.300000e-01 3.000000e+00 2.425139e-03 1549 4.400000e-01 3.000000e+00 2.475528e-03 1550 4.500000e-01 3.000000e+00 2.525649e-03 1551 4.600000e-01 3.000000e+00 2.575502e-03 1552 4.700000e-01 3.000000e+00 2.625087e-03 1553 4.800000e-01 3.000000e+00 2.674406e-03 1554 4.900000e-01 3.000000e+00 2.723458e-03 1555 5.000000e-01 3.000000e+00 2.772244e-03 1556 5.100000e-01 3.000000e+00 2.820764e-03 1557 5.200000e-01 3.000000e+00 2.869018e-03 1558 5.300000e-01 3.000000e+00 2.917007e-03 1559 5.400000e-01 3.000000e+00 2.964730e-03 1560 5.500000e-01 3.000000e+00 3.012189e-03 1561 5.600000e-01 3.000000e+00 3.059384e-03 1562 5.700000e-01 3.000000e+00 3.106315e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1563 5.800000e-01 3.000000e+00 3.152982e-03 1564 5.900000e-01 3.000000e+00 3.199386e-03 1565 6.000000e-01 3.000000e+00 3.245526e-03 1566 6.100000e-01 3.000000e+00 3.291404e-03 1567 6.200000e-01 3.000000e+00 3.337020e-03 1568 6.300000e-01 3.000000e+00 3.382373e-03 1569 6.400000e-01 3.000000e+00 3.427465e-03 1570 6.500000e-01 3.000000e+00 3.472295e-03 1571 6.600000e-01 3.000000e+00 3.516864e-03 1572 6.700000e-01 3.000000e+00 3.561172e-03 1573 6.800000e-01 3.000000e+00 3.605220e-03 1574 6.900000e-01 3.000000e+00 3.649008e-03 1575 7.000000e-01 3.000000e+00 3.692535e-03 1576 7.100000e-01 3.000000e+00 3.735804e-03 1577 7.200000e-01 3.000000e+00 3.778813e-03 1578 7.300000e-01 3.000000e+00 3.821563e-03 1579 7.400000e-01 3.000000e+00 3.864054e-03 1580 7.500000e-01 3.000000e+00 3.906287e-03 1581 7.600000e-01 3.000000e+00 3.948263e-03 1582 7.700000e-01 3.000000e+00 3.989980e-03 1583 7.800000e-01 3.000000e+00 4.031440e-03 1584 7.900000e-01 3.000000e+00 4.072643e-03 1585 8.000000e-01 3.000000e+00 4.113589e-03 1586 8.100000e-01 3.000000e+00 4.154279e-03 1587 8.200000e-01 3.000000e+00 4.194712e-03 1588 8.300000e-01 3.000000e+00 4.234890e-03 1589 8.400000e-01 3.000000e+00 4.274812e-03 1590 8.500000e-01 3.000000e+00 4.314478e-03 1591 8.600000e-01 3.000000e+00 4.353890e-03 1592 8.700000e-01 3.000000e+00 4.393047e-03 1593 8.800000e-01 3.000000e+00 4.431949e-03 1594 8.900000e-01 3.000000e+00 4.470598e-03 1595 9.000000e-01 3.000000e+00 4.508992e-03 1596 9.100000e-01 3.000000e+00 4.547133e-03 1597 9.200000e-01 3.000000e+00 4.585020e-03 1598 9.300000e-01 3.000000e+00 4.622655e-03 1599 9.400000e-01 3.000000e+00 4.660036e-03 1600 9.500000e-01 3.000000e+00 4.697165e-03 1601 9.600000e-01 3.000000e+00 4.734042e-03 1602 9.700000e-01 3.000000e+00 4.770667e-03 1603 9.800000e-01 3.000000e+00 4.807040e-03 1604 9.900000e-01 3.000000e+00 4.843162e-03 1605 1.000000e+00 3.000000e+00 4.879032e-03 1606 1.010000e+00 3.000000e+00 4.914652e-03 1607 1.020000e+00 3.000000e+00 4.950021e-03 1608 1.030000e+00 3.000000e+00 4.985139e-03 1609 1.040000e+00 3.000000e+00 5.020007e-03 1610 1.050000e+00 3.000000e+00 5.054625e-03 1611 1.060000e+00 3.000000e+00 5.088994e-03 1612 1.070000e+00 3.000000e+00 5.123113e-03 1613 1.080000e+00 3.000000e+00 5.156982e-03 1614 1.090000e+00 3.000000e+00 5.190603e-03 1615 1.100000e+00 3.000000e+00 5.223975e-03 1616 1.110000e+00 3.000000e+00 5.257098e-03 1617 1.120000e+00 3.000000e+00 5.289972e-03 1618 1.130000e+00 3.000000e+00 5.322598e-03 1619 1.140000e+00 3.000000e+00 5.354977e-03 1620 1.150000e+00 3.000000e+00 5.387107e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1621 1.160000e+00 3.000000e+00 5.418989e-03 1622 1.170000e+00 3.000000e+00 5.450624e-03 1623 1.180000e+00 3.000000e+00 5.482012e-03 1624 1.190000e+00 3.000000e+00 5.513152e-03 1625 1.200000e+00 3.000000e+00 5.544045e-03 1626 1.210000e+00 3.000000e+00 5.574691e-03 1627 1.220000e+00 3.000000e+00 5.605091e-03 1628 1.230000e+00 3.000000e+00 5.635243e-03 1629 1.240000e+00 3.000000e+00 5.665149e-03 1630 1.250000e+00 3.000000e+00 5.694808e-03 1631 1.260000e+00 3.000000e+00 5.724221e-03 1632 1.270000e+00 3.000000e+00 5.753387e-03 1633 1.280000e+00 3.000000e+00 5.782307e-03 1634 1.290000e+00 3.000000e+00 5.810980e-03 1635 1.300000e+00 3.000000e+00 5.839407e-03 1636 1.310000e+00 3.000000e+00 5.867588e-03 1637 1.320000e+00 3.000000e+00 5.895522e-03 1638 1.330000e+00 3.000000e+00 5.923209e-03 1639 1.340000e+00 3.000000e+00 5.950650e-03 1640 1.350000e+00 3.000000e+00 5.977845e-03 1641 1.360000e+00 3.000000e+00 6.004792e-03 1642 1.370000e+00 3.000000e+00 6.031492e-03 1643 1.380000e+00 3.000000e+00 6.057945e-03 1644 1.390000e+00 3.000000e+00 6.084151e-03 1645 1.400000e+00 3.000000e+00 6.110109e-03 1646 1.410000e+00 3.000000e+00 6.135819e-03 1647 1.420000e+00 3.000000e+00 6.161280e-03 1648 1.430000e+00 3.000000e+00 6.186493e-03 1649 1.440000e+00 3.000000e+00 6.211457e-03 1650 1.450000e+00 3.000000e+00 6.236171e-03 1651 1.460000e+00 3.000000e+00 6.260635e-03 1652 1.470000e+00 3.000000e+00 6.284848e-03 1653 1.480000e+00 3.000000e+00 6.308810e-03 1654 1.490000e+00 3.000000e+00 6.332519e-03 1655 1.500000e+00 3.000000e+00 6.355976e-03 1656 1.510000e+00 3.000000e+00 6.379179e-03 1657 1.520000e+00 3.000000e+00 6.402127e-03 1658 1.530000e+00 3.000000e+00 6.424819e-03 1659 1.540000e+00 3.000000e+00 6.447254e-03 1660 1.550000e+00 3.000000e+00 6.469431e-03 1661 1.560000e+00 3.000000e+00 6.491349e-03 1662 1.570000e+00 3.000000e+00 6.513006e-03 1663 1.580000e+00 3.000000e+00 6.534400e-03 1664 1.590000e+00 3.000000e+00 6.555530e-03 1665 1.600000e+00 3.000000e+00 6.576393e-03 1666 1.610000e+00 3.000000e+00 6.596989e-03 1667 1.620000e+00 3.000000e+00 6.617314e-03 1668 1.630000e+00 3.000000e+00 6.637367e-03 1669 1.640000e+00 3.000000e+00 6.657144e-03 1670 1.650000e+00 3.000000e+00 6.676644e-03 1671 1.660000e+00 3.000000e+00 6.695864e-03 1672 1.670000e+00 3.000000e+00 6.714799e-03 1673 1.680000e+00 3.000000e+00 6.733448e-03 1674 1.690000e+00 3.000000e+00 6.751806e-03 1675 1.700000e+00 3.000000e+00 6.769871e-03 1676 1.710000e+00 3.000000e+00 6.787638e-03 1677 1.720000e+00 3.000000e+00 6.805103e-03 1678 1.730000e+00 3.000000e+00 6.822262e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1679 1.740000e+00 3.000000e+00 6.839111e-03 1680 1.750000e+00 3.000000e+00 6.855645e-03 1681 1.760000e+00 3.000000e+00 6.871859e-03 1682 1.770000e+00 3.000000e+00 6.887749e-03 1683 1.780000e+00 3.000000e+00 6.903311e-03 1684 1.790000e+00 3.000000e+00 6.918539e-03 1685 1.800000e+00 3.000000e+00 6.933428e-03 1686 1.810000e+00 3.000000e+00 6.947975e-03 1687 1.820000e+00 3.000000e+00 6.962175e-03 1688 1.830000e+00 3.000000e+00 6.976023e-03 1689 1.840000e+00 3.000000e+00 6.989515e-03 1690 1.850000e+00 3.000000e+00 7.002650e-03 1691 1.860000e+00 3.000000e+00 7.015423e-03 1692 1.870000e+00 3.000000e+00 7.027832e-03 1693 1.880000e+00 3.000000e+00 7.039877e-03 1694 1.890000e+00 3.000000e+00 7.051556e-03 1695 1.900000e+00 3.000000e+00 7.062869e-03 1696 1.910000e+00 3.000000e+00 7.073818e-03 1697 1.920000e+00 3.000000e+00 7.084404e-03 1698 1.930000e+00 3.000000e+00 7.094631e-03 1699 1.940000e+00 3.000000e+00 7.104502e-03 1700 1.950000e+00 3.000000e+00 7.114023e-03 1701 1.960000e+00 3.000000e+00 7.123198e-03 1702 1.970000e+00 3.000000e+00 7.132036e-03 1703 1.980000e+00 3.000000e+00 7.140543e-03 1704 1.990000e+00 3.000000e+00 7.148727e-03 1705 2.000000e+00 3.000000e+00 7.156598e-03 1706 2.010000e+00 3.000000e+00 7.164166e-03 1707 2.020000e+00 3.000000e+00 7.171439e-03 1708 2.030000e+00 3.000000e+00 7.178428e-03 1709 2.040000e+00 3.000000e+00 7.185144e-03 1710 2.050000e+00 3.000000e+00 7.191598e-03 1711 2.060000e+00 3.000000e+00 7.197799e-03 1712 2.070000e+00 3.000000e+00 7.203760e-03 1713 2.080000e+00 3.000000e+00 7.209490e-03 1714 2.090000e+00 3.000000e+00 7.215000e-03 1715 2.100000e+00 3.000000e+00 7.220300e-03 1716 2.110000e+00 3.000000e+00 7.225400e-03 1717 2.120000e+00 3.000000e+00 7.230311e-03 1718 2.130000e+00 3.000000e+00 7.235040e-03 1719 2.140000e+00 3.000000e+00 7.239598e-03 1720 2.150000e+00 3.000000e+00 7.243992e-03 1721 2.160000e+00 3.000000e+00 7.248232e-03 1722 2.170000e+00 3.000000e+00 7.252326e-03 1723 2.180000e+00 3.000000e+00 7.256280e-03 1724 2.190000e+00 3.000000e+00 7.260102e-03 1725 2.200000e+00 3.000000e+00 7.263798e-03 1726 2.210000e+00 3.000000e+00 7.267376e-03 1727 2.220000e+00 3.000000e+00 7.270842e-03 1728 2.230000e+00 3.000000e+00 7.274200e-03 1729 2.240000e+00 3.000000e+00 7.277458e-03 1730 2.250000e+00 3.000000e+00 7.280619e-03 1731 2.260000e+00 3.000000e+00 7.283690e-03 1732 2.270000e+00 3.000000e+00 7.286673e-03 1733 2.280000e+00 3.000000e+00 7.289575e-03 1734 2.290000e+00 3.000000e+00 7.292398e-03 1735 2.300000e+00 3.000000e+00 7.295148e-03 1736 2.310000e+00 3.000000e+00 7.297827e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1737 2.320000e+00 3.000000e+00 7.300439e-03 1738 2.330000e+00 3.000000e+00 7.302987e-03 1739 2.340000e+00 3.000000e+00 7.305474e-03 1740 2.350000e+00 3.000000e+00 7.307904e-03 1741 2.360000e+00 3.000000e+00 7.310279e-03 1742 2.370000e+00 3.000000e+00 7.312601e-03 1743 2.380000e+00 3.000000e+00 7.314873e-03 1744 2.390000e+00 3.000000e+00 7.317097e-03 1745 2.400000e+00 3.000000e+00 7.319276e-03 1746 2.410000e+00 3.000000e+00 7.321412e-03 1747 2.420000e+00 3.000000e+00 7.323506e-03 1748 2.430000e+00 3.000000e+00 7.325560e-03 1749 2.440000e+00 3.000000e+00 7.327576e-03 1750 2.450000e+00 3.000000e+00 7.329556e-03 1751 2.460000e+00 3.000000e+00 7.331501e-03 1752 2.470000e+00 3.000000e+00 7.333413e-03 1753 2.480000e+00 3.000000e+00 7.335293e-03 1754 2.490000e+00 3.000000e+00 7.337143e-03 1755 2.500000e+00 3.000000e+00 7.338963e-03 1756 2.510000e+00 3.000000e+00 7.340755e-03 1757 2.520000e+00 3.000000e+00 7.342520e-03 1758 2.530000e+00 3.000000e+00 7.344259e-03 1759 2.540000e+00 3.000000e+00 7.345973e-03 1760 2.550000e+00 3.000000e+00 7.347663e-03 1761 2.560000e+00 3.000000e+00 7.349331e-03 1762 2.570000e+00 3.000000e+00 7.350976e-03 1763 2.580000e+00 3.000000e+00 7.352600e-03 1764 2.590000e+00 3.000000e+00 7.354203e-03 1765 2.600000e+00 3.000000e+00 7.355787e-03 1766 2.610000e+00 3.000000e+00 7.357352e-03 1767 2.620000e+00 3.000000e+00 7.358898e-03 1768 2.630000e+00 3.000000e+00 7.360427e-03 1769 2.640000e+00 3.000000e+00 7.361939e-03 1770 2.650000e+00 3.000000e+00 7.363434e-03 1771 2.660000e+00 3.000000e+00 7.364913e-03 1772 2.670000e+00 3.000000e+00 7.366377e-03 1773 2.680000e+00 3.000000e+00 7.367827e-03 1774 2.690000e+00 3.000000e+00 7.369262e-03 1775 2.700000e+00 3.000000e+00 7.370683e-03 1776 2.710000e+00 3.000000e+00 7.372091e-03 1777 2.720000e+00 3.000000e+00 7.373486e-03 1778 2.730000e+00 3.000000e+00 7.374869e-03 1779 2.740000e+00 3.000000e+00 7.376239e-03 1780 2.750000e+00 3.000000e+00 7.377598e-03 1781 2.760000e+00 3.000000e+00 7.378945e-03 1782 2.770000e+00 3.000000e+00 7.380282e-03 1783 2.780000e+00 3.000000e+00 7.381608e-03 1784 2.790000e+00 3.000000e+00 7.382923e-03 1785 2.800000e+00 3.000000e+00 7.384229e-03 1786 2.810000e+00 3.000000e+00 7.385524e-03 1787 2.820000e+00 3.000000e+00 7.386811e-03 1788 2.830000e+00 3.000000e+00 7.388088e-03 1789 2.840000e+00 3.000000e+00 7.389356e-03 1790 2.850000e+00 3.000000e+00 7.390616e-03 1791 2.860000e+00 3.000000e+00 7.391868e-03 1792 2.870000e+00 3.000000e+00 7.393111e-03 1793 2.880000e+00 3.000000e+00 7.394347e-03 1794 2.890000e+00 3.000000e+00 7.395575e-03 Index v-sweep v(g) vs#branch -------------------------------------------------------------------------------- 1795 2.900000e+00 3.000000e+00 7.396795e-03 1796 2.910000e+00 3.000000e+00 7.398008e-03 1797 2.920000e+00 3.000000e+00 7.399214e-03 1798 2.930000e+00 3.000000e+00 7.400413e-03 1799 2.940000e+00 3.000000e+00 7.401606e-03 1800 2.950000e+00 3.000000e+00 7.402792e-03 1801 2.960000e+00 3.000000e+00 7.403972e-03 1802 2.970000e+00 3.000000e+00 7.405145e-03 1803 2.980000e+00 3.000000e+00 7.406313e-03 1804 2.990000e+00 3.000000e+00 7.407475e-03 1805 3.000000e+00 3.000000e+00 7.408631e-03 tmpk8ny_4pz/tests/bsim3soifd/t4.cir0000644000175000017500000000044413546075722017414 0ustar carstencarsten*model = BSIMSOI (FD) *Berkeley Spice Compatibility * * SOI NMOSFET, tied body simulation vd d 0 dc 0.05 vs s 0 dc 0 ve e 0 dc 0 vg g 0 dc 3 vb b 0 dc 0 m1 d g s e b n1 w=10u l=0.25u .option gmin=1e-25 itl1=500 noacct .dc vg 0 1.5 0.01 vb -0.3 0.5 0.1 .print dc i(vs) .include nmosfd.mod tmpk8ny_4pz/tests/bsim3soifd/pmosfd.mod0000644000175000017500000000403213546075722020354 0ustar carstencarsten*Model Card for BSIMFD2.0, floating body FD SOI PMOS *Released on 2/15/99 .Model P1 PMOS Level= 55 +TNOM = 27 TOX = 4.5E-09 TSI = 5e-8 TBOX = 8E-08 +MOBMOD = 2 CAPMOD = 3 SHMOD = 0 +WINT = 0 LINT = -2E-08 +VTH0 = -.52 K1 = .39 K2 = .1 K3 = 0 +KB1 = .95 K3B = 2.2 NLX = 7.2E-08 +DVT0 = .55 DVT1 = .28 DVT2 = -1.4 +DVT0W = 0 DVT1W = 0 DVT2W = 0 +NCH = 3.0E+17 NSUB = 1E+15 NGATE = 1E+20 +DVBD0 = 60.0 DVBD1 = 1.1 VBSA = -0.2 +KB3 = 2.2 DELP = 0.02 +ABP = 0.9 MXC = 0.9 ADICE0 = 0.93 +KBJT1 = 1.0E-08 EDL = .0000005 +NDIODE = 1.13 NTUN = 14.0 +ISBJT = 0.0 ISDIF = 1e-6 ISTUN = 0.0 ISREC = 0.0 +XBJT = 0.01 XDIF = 0.01 XREC = 0.01 XTUN = 0.001 +U0 = 145 UA = 1.3E-11 UB = 1.7E-18 UC = -4E-10 +W0 = 1.16E-06 AGS = .25 A1 = 0 A2 = 1 +B0 = .01 B1 = 10 +RDSW = 700 PRWG = 0 PRWB = -.2 WR = 1 +RBODY = 0.0 RBSH = 0.0 +A0 = 1.4 KETA = -.67 VSAT = 75000 +DWG = 0 DWB = 0 +ALPHA0 = 0.0 ALPHA1 = 1e-4 BETA0 = 19 +AII = 1.25 BII = 0.1e-7 CII = 0.8 DII = 0.6 +VOFF = -.14 NFACTOR = .7 CDSC = .00002 CDSCB = 0 +CDSCD = 0 CIT = 0 +PCLM = 2.9 PVAG = 12 PDIBLC1 = .18 PDIBLC2 = .004 +PDIBLCB = -.234 DROUT = .2 +DELTA = .01 ETA0 = .01 ETAB = 0 +DSUB = .3 RTH0 = .006 +CLC = .0000001 CLE = .6 CF = 1E-20 CKAPPA = .6 +CGDL = 1E-20 CGSL = 1E-20 KT1 = -.3 KT1L = 0 +KT2 = .022 UTE = -1.5 UA1 = 4.31E-09 UB1 = -7.61E-18 +UC1 = -5.6E-11 PRT = 760 AT = 22400 +CGSO = 1e-10 CGDO = 1e-10 CJSWG = 5e-10 TT=3e-10 +ASD = 0.3 CSDESW = 1e-12 tmpk8ny_4pz/tests/bsim3soifd/t5.out0000644000175000017500000013506713546075722017461 0ustar carstencarsten No. of Data Rows : 1359 Circuit: *model = BSIMSOI (FD) Error on line 3 : .model n1 nmos level= 55 tnom = 27 tox = 4.5e-09 tsi = 5e-8 tbox = 8e-08 mobmod = 0 capmod = 3 shmod = 0 paramchk=0 wint = 0 lint = -2e-08 vth0 = .52 k1 = .39 k2 = .1 k3 = 0 kb1 = .95 k3b = 2.2 nlx = 7.2e-08 dvt0 = .55 dvt1 = .28 dvt2 = -1.4 dvt0w = 0 dvt1w = 0 dvt2w = 0 nch = 3.3e+17 nsub = 1e+15 ngate = 1e+20 dvbd0 = 60.0 dvbd1 = 1.1 vbsa = 0.0 kb3 = 2.2 delp = 0.02 abp = 0.9 mxc = 0.9 adice0 = 0.93 kbjt1 = 1.0e-08 edl = .0000005 ndiode = 1.13 ntun = 14.0 isbjt = 2e-6 isdif = 1e-6 istun = 0.0 isrec = 1e-5 xbjt = 0.01 xdif = 0.01 xrec = 0.01 xtun = 0.001 u0 = 352 ua = 1.3e-11 ub = 1.7e-18 uc = -4e-10 w0 = 1.16e-06 ags = .25 a1 = 0 a2 = 1 b0 = .01 b1 = 10 rdsw = 700 prwg = 0 prwb = -.2 wr = 1 rbody = 0.0 rbsh = 0.0 a0 = 1.4 keta = -.67 vsat = 135000 dwg = 0 dwb = 0 alpha0 = 0.0 alpha1 = 1.5 beta0 = 20.5 aii = 1.2 bii = 0.1e-7 cii = 0.8 dii = 0.6 voff = -.14 nfactor = .7 cdsc = .00002 cdscb = 0 cdscd = 0 cit = 0 pclm = 2.9 pvag = 12 pdiblc1 = .18 pdiblc2 = .004 pdiblcb = -.234 drout = .2 delta = .01 eta0 = .01 etab = 0 dsub = .3 rth0 94 = .006 clc = .0000001 cle = .6 cf = 1e-20 ckappa = .6 cgdl = 1e-20 cgsl = 1e-20 kt1 = -.3 kt1l = 0 kt2 = .022 ute = -1.5 ua1 = 4.31e-09 ub1 = -7.61e-18 uc1 = -5.6e-11 prt = 760 at = 22400 cgso = 1e-10 cgdo = 1e-10 cjswg = 5e-10 tt=3e-10 asd = 0.3 csdesw = 1e-12 Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Warning: Pd = 0 is less than W. Warning: Ps = 0 is less than W. *model = BSIMSOI (FD) -------------------------------------------------------------------------------- Index v-sweep vs#branch -------------------------------------------------------------------------------- 0 0.000000e+00 2.494471e-14 1 1.000000e-02 3.379745e-14 2 2.000000e-02 5.069440e-14 3 3.000000e-02 7.223441e-14 4 4.000000e-02 1.028941e-13 5 5.000000e-02 1.465206e-13 6 6.000000e-02 2.085781e-13 7 7.000000e-02 2.968247e-13 8 8.000000e-02 4.222715e-13 9 9.000000e-02 6.005416e-13 10 1.000000e-01 8.537934e-13 11 1.100000e-01 1.213443e-12 12 1.200000e-01 1.724013e-12 13 1.300000e-01 2.448579e-12 14 1.400000e-01 3.476459e-12 15 1.500000e-01 4.934074e-12 16 1.600000e-01 7.000174e-12 17 1.700000e-01 9.926643e-12 18 1.800000e-01 1.406935e-11 19 1.900000e-01 1.993039e-11 20 2.000000e-01 2.821752e-11 21 2.100000e-01 3.992749e-11 22 2.200000e-01 5.646278e-11 23 2.300000e-01 7.979470e-11 24 2.400000e-01 1.126909e-10 25 2.500000e-01 1.590320e-10 26 2.600000e-01 2.242515e-10 27 2.700000e-01 3.159445e-10 28 2.800000e-01 4.447080e-10 29 2.900000e-01 6.252959e-10 30 3.000000e-01 8.782006e-10 31 3.100000e-01 1.231806e-09 32 3.200000e-01 1.725301e-09 33 3.300000e-01 2.412600e-09 34 3.400000e-01 3.367565e-09 35 3.500000e-01 4.690912e-09 36 3.600000e-01 6.519232e-09 37 3.700000e-01 9.036644e-09 38 3.800000e-01 1.248962e-08 39 3.900000e-01 1.720557e-08 40 4.000000e-01 2.361569e-08 41 4.100000e-01 3.228250e-08 42 4.200000e-01 4.393235e-08 43 4.300000e-01 5.949286e-08 44 4.400000e-01 8.013501e-08 45 4.500000e-01 1.073195e-07 46 4.600000e-01 1.428466e-07 47 4.700000e-01 1.889097e-07 48 4.800000e-01 2.481514e-07 49 4.900000e-01 3.237247e-07 50 5.000000e-01 4.193583e-07 51 5.100000e-01 5.394302e-07 52 5.200000e-01 6.890472e-07 53 5.300000e-01 8.741323e-07 54 5.400000e-01 1.101512e-06 Index v-sweep vs#branch -------------------------------------------------------------------------------- 55 5.500000e-01 1.378997e-06 56 5.600000e-01 1.715435e-06 57 5.700000e-01 2.120714e-06 58 5.800000e-01 2.605704e-06 59 5.900000e-01 3.182083e-06 60 6.000000e-01 3.862081e-06 61 6.100000e-01 4.658138e-06 62 6.200000e-01 5.582629e-06 63 6.300000e-01 6.647804e-06 64 6.400000e-01 7.865113e-06 65 6.500000e-01 9.242348e-06 66 6.600000e-01 1.078247e-05 67 6.700000e-01 1.248496e-05 68 6.800000e-01 1.434625e-05 69 6.900000e-01 1.635981e-05 70 7.000000e-01 1.851645e-05 71 7.100000e-01 2.080484e-05 72 7.200000e-01 2.321211e-05 73 7.300000e-01 2.572448e-05 74 7.400000e-01 2.832782e-05 75 7.500000e-01 3.100816e-05 76 7.600000e-01 3.375207e-05 77 7.700000e-01 3.654695e-05 78 7.800000e-01 3.938122e-05 79 7.900000e-01 4.224442e-05 80 8.000000e-01 4.512723e-05 81 8.100000e-01 4.802147e-05 82 8.200000e-01 5.092002e-05 83 8.300000e-01 5.381677e-05 84 8.400000e-01 5.670653e-05 85 8.500000e-01 5.958487e-05 86 8.600000e-01 6.244813e-05 87 8.700000e-01 6.529325e-05 88 8.800000e-01 6.811770e-05 89 8.900000e-01 7.091943e-05 90 9.000000e-01 7.369678e-05 91 9.100000e-01 7.644844e-05 92 9.200000e-01 7.917336e-05 93 9.300000e-01 8.187075e-05 94 9.400000e-01 8.454001e-05 95 9.500000e-01 8.718070e-05 96 9.600000e-01 8.979254e-05 97 9.700000e-01 9.237536e-05 98 9.800000e-01 9.492908e-05 99 9.900000e-01 9.745370e-05 100 1.000000e+00 9.994930e-05 101 1.010000e+00 1.024160e-04 102 1.020000e+00 1.048539e-04 103 1.030000e+00 1.072633e-04 104 1.040000e+00 1.096444e-04 105 1.050000e+00 1.119975e-04 106 1.060000e+00 1.143228e-04 107 1.070000e+00 1.166206e-04 108 1.080000e+00 1.188912e-04 109 1.090000e+00 1.211349e-04 110 1.100000e+00 1.233521e-04 111 1.110000e+00 1.255430e-04 112 1.120000e+00 1.277080e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 113 1.130000e+00 1.298474e-04 114 1.140000e+00 1.319616e-04 115 1.150000e+00 1.340507e-04 116 1.160000e+00 1.361153e-04 117 1.170000e+00 1.381556e-04 118 1.180000e+00 1.401718e-04 119 1.190000e+00 1.421644e-04 120 1.200000e+00 1.441337e-04 121 1.210000e+00 1.460799e-04 122 1.220000e+00 1.480034e-04 123 1.230000e+00 1.499044e-04 124 1.240000e+00 1.517833e-04 125 1.250000e+00 1.536404e-04 126 1.260000e+00 1.554759e-04 127 1.270000e+00 1.572902e-04 128 1.280000e+00 1.590835e-04 129 1.290000e+00 1.608561e-04 130 1.300000e+00 1.626083e-04 131 1.310000e+00 1.643403e-04 132 1.320000e+00 1.660525e-04 133 1.330000e+00 1.677451e-04 134 1.340000e+00 1.694183e-04 135 1.350000e+00 1.710724e-04 136 1.360000e+00 1.727076e-04 137 1.370000e+00 1.743243e-04 138 1.380000e+00 1.759226e-04 139 1.390000e+00 1.775028e-04 140 1.400000e+00 1.790651e-04 141 1.410000e+00 1.806098e-04 142 1.420000e+00 1.821371e-04 143 1.430000e+00 1.836472e-04 144 1.440000e+00 1.851404e-04 145 1.450000e+00 1.866168e-04 146 1.460000e+00 1.880767e-04 147 1.470000e+00 1.895202e-04 148 1.480000e+00 1.909477e-04 149 1.490000e+00 1.923593e-04 150 1.500000e+00 1.937552e-04 151 0.000000e+00 8.728369e-14 152 1.000000e-02 1.185890e-13 153 2.000000e-02 1.787169e-13 154 3.000000e-02 2.555988e-13 155 4.000000e-02 3.654283e-13 156 5.000000e-02 5.222700e-13 157 6.000000e-02 7.461674e-13 158 7.000000e-02 1.065674e-12 159 8.000000e-02 1.521448e-12 160 9.000000e-02 2.171364e-12 161 1.000000e-01 3.097759e-12 162 1.100000e-01 4.417728e-12 163 1.200000e-01 6.297701e-12 164 1.300000e-01 8.974120e-12 165 1.400000e-01 1.278269e-11 166 1.500000e-01 1.819974e-11 167 1.600000e-01 2.590033e-11 168 1.700000e-01 3.683771e-11 169 1.800000e-01 5.236104e-11 170 1.900000e-01 7.437674e-11 Index v-sweep vs#branch -------------------------------------------------------------------------------- 171 2.000000e-01 1.055750e-10 172 2.100000e-01 1.497472e-10 173 2.200000e-01 2.122290e-10 174 2.300000e-01 3.005170e-10 175 2.400000e-01 4.251248e-10 176 2.500000e-01 6.007661e-10 177 2.600000e-01 8.479832e-10 178 2.700000e-01 1.195378e-09 179 2.800000e-01 1.682650e-09 180 2.900000e-01 2.364702e-09 181 3.000000e-01 3.317155e-09 182 3.100000e-01 4.643674e-09 183 3.200000e-01 6.485609e-09 184 3.300000e-01 9.034525e-09 185 3.400000e-01 1.254826e-08 186 3.500000e-01 1.737115e-08 187 3.600000e-01 2.395917e-08 188 3.700000e-01 3.291032e-08 189 3.800000e-01 4.500082e-08 190 3.900000e-01 6.122707e-08 191 4.000000e-01 8.285314e-08 192 4.100000e-01 1.114633e-07 193 4.200000e-01 1.490193e-07 194 4.300000e-01 1.979209e-07 195 4.400000e-01 2.610715e-07 196 4.500000e-01 3.419474e-07 197 4.600000e-01 4.446734e-07 198 4.700000e-01 5.741062e-07 199 4.800000e-01 7.359242e-07 200 4.900000e-01 9.367238e-07 201 5.000000e-01 1.184113e-06 202 5.100000e-01 1.486791e-06 203 5.200000e-01 1.854588e-06 204 5.300000e-01 2.298443e-06 205 5.400000e-01 2.830278e-06 206 5.500000e-01 3.462743e-06 207 5.600000e-01 4.208798e-06 208 5.700000e-01 5.081108e-06 209 5.800000e-01 6.091255e-06 210 5.900000e-01 7.248896e-06 211 6.000000e-01 8.561544e-06 212 6.100000e-01 1.003471e-05 213 6.200000e-01 1.167098e-05 214 6.300000e-01 1.346937e-05 215 6.400000e-01 1.542542e-05 216 6.500000e-01 1.753156e-05 217 6.600000e-01 1.977766e-05 218 6.700000e-01 2.215162e-05 219 6.800000e-01 2.464004e-05 220 6.900000e-01 2.722881e-05 221 7.000000e-01 2.990369e-05 222 7.100000e-01 3.265074e-05 223 7.200000e-01 3.545670e-05 224 7.300000e-01 3.830922e-05 225 7.400000e-01 4.119703e-05 226 7.500000e-01 4.410998e-05 227 7.600000e-01 4.703909e-05 228 7.700000e-01 4.997650e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 229 7.800000e-01 5.291540e-05 230 7.900000e-01 5.584996e-05 231 8.000000e-01 5.877521e-05 232 8.100000e-01 6.168700e-05 233 8.200000e-01 6.458184e-05 234 8.300000e-01 6.745684e-05 235 8.400000e-01 7.030964e-05 236 8.500000e-01 7.313831e-05 237 8.600000e-01 7.594132e-05 238 8.700000e-01 7.871744e-05 239 8.800000e-01 8.146573e-05 240 8.900000e-01 8.418546e-05 241 9.000000e-01 8.687610e-05 242 9.100000e-01 8.953728e-05 243 9.200000e-01 9.216876e-05 244 9.300000e-01 9.477041e-05 245 9.400000e-01 9.734221e-05 246 9.500000e-01 9.988418e-05 247 9.600000e-01 1.023964e-04 248 9.700000e-01 1.048791e-04 249 9.800000e-01 1.073324e-04 250 9.900000e-01 1.097566e-04 251 1.000000e+00 1.121519e-04 252 1.010000e+00 1.145185e-04 253 1.020000e+00 1.168569e-04 254 1.030000e+00 1.191672e-04 255 1.040000e+00 1.214498e-04 256 1.050000e+00 1.237051e-04 257 1.060000e+00 1.259333e-04 258 1.070000e+00 1.281348e-04 259 1.080000e+00 1.303099e-04 260 1.090000e+00 1.324590e-04 261 1.100000e+00 1.345824e-04 262 1.110000e+00 1.366804e-04 263 1.120000e+00 1.387535e-04 264 1.130000e+00 1.408018e-04 265 1.140000e+00 1.428258e-04 266 1.150000e+00 1.448257e-04 267 1.160000e+00 1.468019e-04 268 1.170000e+00 1.487547e-04 269 1.180000e+00 1.506845e-04 270 1.190000e+00 1.525915e-04 271 1.200000e+00 1.544760e-04 272 1.210000e+00 1.563384e-04 273 1.220000e+00 1.581790e-04 274 1.230000e+00 1.599980e-04 275 1.240000e+00 1.617957e-04 276 1.250000e+00 1.635724e-04 277 1.260000e+00 1.653285e-04 278 1.270000e+00 1.670642e-04 279 1.280000e+00 1.687797e-04 280 1.290000e+00 1.704754e-04 281 1.300000e+00 1.721514e-04 282 1.310000e+00 1.738082e-04 283 1.320000e+00 1.754458e-04 284 1.330000e+00 1.770647e-04 285 1.340000e+00 1.786649e-04 286 1.350000e+00 1.802469e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 287 1.360000e+00 1.818107e-04 288 1.370000e+00 1.833567e-04 289 1.380000e+00 1.848851e-04 290 1.390000e+00 1.863962e-04 291 1.400000e+00 1.878901e-04 292 1.410000e+00 1.893670e-04 293 1.420000e+00 1.908273e-04 294 1.430000e+00 1.922711e-04 295 1.440000e+00 1.936986e-04 296 1.450000e+00 1.951100e-04 297 1.460000e+00 1.965056e-04 298 1.470000e+00 1.978856e-04 299 1.480000e+00 1.992501e-04 300 1.490000e+00 2.005993e-04 301 1.500000e+00 2.019335e-04 302 0.000000e+00 2.887436e-13 303 1.000000e-02 3.931018e-13 304 2.000000e-02 5.947625e-13 305 3.000000e-02 8.534623e-13 306 4.000000e-02 1.224537e-12 307 5.000000e-02 1.756691e-12 308 6.000000e-02 2.519400e-12 309 7.000000e-02 3.611844e-12 310 8.000000e-02 5.175864e-12 311 9.000000e-02 7.414014e-12 312 1.000000e-01 1.061536e-11 313 1.100000e-01 1.519217e-11 314 1.200000e-01 2.173201e-11 315 1.300000e-01 3.107171e-11 316 1.400000e-01 4.440208e-11 317 1.500000e-01 6.341614e-11 318 1.600000e-01 9.051711e-11 319 1.700000e-01 1.291030e-10 320 1.800000e-01 1.839867e-10 321 1.900000e-01 2.619706e-10 322 2.000000e-01 3.726502e-10 323 2.100000e-01 5.295336e-10 324 2.200000e-01 7.515928e-10 325 2.300000e-01 1.065404e-09 326 2.400000e-01 1.508086e-09 327 2.500000e-01 2.131297e-09 328 2.600000e-01 3.006656e-09 329 2.700000e-01 4.233000e-09 330 2.800000e-01 5.946025e-09 331 2.900000e-01 8.330945e-09 332 3.000000e-01 1.163887e-08 333 3.100000e-01 1.620772e-08 334 3.200000e-01 2.248837e-08 335 3.300000e-01 3.107690e-08 336 3.400000e-01 4.275325e-08 337 3.500000e-01 5.852676e-08 338 3.600000e-01 7.968840e-08 339 3.700000e-01 1.078692e-07 340 3.800000e-01 1.451046e-07 341 3.900000e-01 1.939032e-07 342 4.000000e-01 2.573212e-07 343 4.100000e-01 3.390415e-07 344 4.200000e-01 4.434590e-07 Index v-sweep vs#branch -------------------------------------------------------------------------------- 345 4.300000e-01 5.757735e-07 346 4.400000e-01 7.420905e-07 347 4.500000e-01 9.495256e-07 348 4.600000e-01 1.206306e-06 349 4.700000e-01 1.521853e-06 350 4.800000e-01 1.906814e-06 351 4.900000e-01 2.373019e-06 352 5.000000e-01 2.933310e-06 353 5.100000e-01 3.601183e-06 354 5.200000e-01 4.390191e-06 355 5.300000e-01 5.312956e-06 356 5.400000e-01 6.379594e-06 357 5.500000e-01 7.596206e-06 358 5.600000e-01 8.967049e-06 359 5.700000e-01 1.049743e-05 360 5.800000e-01 1.219063e-05 361 5.900000e-01 1.404581e-05 362 6.000000e-01 1.605825e-05 363 6.100000e-01 1.822001e-05 364 6.200000e-01 2.052060e-05 365 6.300000e-01 2.294763e-05 366 6.400000e-01 2.548749e-05 367 6.500000e-01 2.812594e-05 368 6.600000e-01 3.084868e-05 369 6.700000e-01 3.364181e-05 370 6.800000e-01 3.649209e-05 371 6.900000e-01 3.938724e-05 372 7.000000e-01 4.231608e-05 373 7.100000e-01 4.526855e-05 374 7.200000e-01 4.823576e-05 375 7.300000e-01 5.120992e-05 376 7.400000e-01 5.418430e-05 377 7.500000e-01 5.715315e-05 378 7.600000e-01 6.011157e-05 379 7.700000e-01 6.305543e-05 380 7.800000e-01 6.598132e-05 381 7.900000e-01 6.888638e-05 382 8.000000e-01 7.176829e-05 383 8.100000e-01 7.462517e-05 384 8.200000e-01 7.745550e-05 385 8.300000e-01 8.025809e-05 386 8.400000e-01 8.303203e-05 387 8.500000e-01 8.577660e-05 388 8.600000e-01 8.849131e-05 389 8.700000e-01 9.117580e-05 390 8.800000e-01 9.382987e-05 391 8.900000e-01 9.645339e-05 392 9.000000e-01 9.904636e-05 393 9.100000e-01 1.016088e-04 394 9.200000e-01 1.041409e-04 395 9.300000e-01 1.066428e-04 396 9.400000e-01 1.091147e-04 397 9.500000e-01 1.115569e-04 398 9.600000e-01 1.139695e-04 399 9.700000e-01 1.163530e-04 400 9.800000e-01 1.187076e-04 401 9.900000e-01 1.210336e-04 402 1.000000e+00 1.233314e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 403 1.010000e+00 1.256014e-04 404 1.020000e+00 1.278437e-04 405 1.030000e+00 1.300589e-04 406 1.040000e+00 1.322473e-04 407 1.050000e+00 1.344091e-04 408 1.060000e+00 1.365448e-04 409 1.070000e+00 1.386547e-04 410 1.080000e+00 1.407391e-04 411 1.090000e+00 1.427984e-04 412 1.100000e+00 1.448330e-04 413 1.110000e+00 1.468431e-04 414 1.120000e+00 1.488292e-04 415 1.130000e+00 1.507914e-04 416 1.140000e+00 1.527302e-04 417 1.150000e+00 1.546459e-04 418 1.160000e+00 1.565388e-04 419 1.170000e+00 1.584092e-04 420 1.180000e+00 1.602575e-04 421 1.190000e+00 1.620838e-04 422 1.200000e+00 1.638886e-04 423 1.210000e+00 1.656721e-04 424 1.220000e+00 1.674346e-04 425 1.230000e+00 1.691765e-04 426 1.240000e+00 1.708978e-04 427 1.250000e+00 1.725991e-04 428 1.260000e+00 1.742805e-04 429 1.270000e+00 1.759423e-04 430 1.280000e+00 1.775847e-04 431 1.290000e+00 1.792081e-04 432 1.300000e+00 1.808127e-04 433 1.310000e+00 1.823987e-04 434 1.320000e+00 1.839664e-04 435 1.330000e+00 1.855160e-04 436 1.340000e+00 1.870478e-04 437 1.350000e+00 1.885621e-04 438 1.360000e+00 1.900589e-04 439 1.370000e+00 1.915386e-04 440 1.380000e+00 1.930015e-04 441 1.390000e+00 1.944476e-04 442 1.400000e+00 1.958773e-04 443 1.410000e+00 1.972908e-04 444 1.420000e+00 1.986882e-04 445 1.430000e+00 2.000698e-04 446 1.440000e+00 2.014358e-04 447 1.450000e+00 2.027863e-04 448 1.460000e+00 2.041217e-04 449 1.470000e+00 2.054420e-04 450 1.480000e+00 2.067475e-04 451 1.490000e+00 2.080383e-04 452 1.500000e+00 2.093147e-04 453 0.000000e+00 9.877774e-13 454 1.000000e-02 1.344554e-12 455 2.000000e-02 2.033609e-12 456 3.000000e-02 2.917279e-12 457 4.000000e-02 4.184280e-12 458 5.000000e-02 6.000547e-12 459 6.000000e-02 8.603646e-12 460 7.000000e-02 1.233357e-11 Index v-sweep vs#branch -------------------------------------------------------------------------------- 461 8.000000e-02 1.767673e-11 462 9.000000e-02 2.532864e-11 463 1.000000e-01 3.628335e-11 464 1.100000e-01 5.196066e-11 465 1.200000e-01 7.438710e-11 466 1.300000e-01 1.064528e-10 467 1.400000e-01 1.522756e-10 468 1.500000e-01 2.177161e-10 469 1.600000e-01 3.110992e-10 470 1.700000e-01 4.442001e-10 471 1.800000e-01 6.336941e-10 472 1.900000e-01 9.031304e-10 473 2.000000e-01 1.285674e-09 474 2.100000e-01 1.827892e-09 475 2.200000e-01 2.594944e-09 476 2.300000e-01 3.677637e-09 477 2.400000e-01 5.201872e-09 478 2.500000e-01 7.340609e-09 479 2.600000e-01 1.033002e-08 480 2.700000e-01 1.449134e-08 481 2.800000e-01 2.025755e-08 482 2.900000e-01 2.820684e-08 483 3.000000e-01 3.910366e-08 484 3.100000e-01 5.394782e-08 485 3.200000e-01 7.403175e-08 486 3.300000e-01 1.010058e-07 487 3.400000e-01 1.369511e-07 488 3.500000e-01 1.844586e-07 489 3.600000e-01 2.467149e-07 490 3.700000e-01 3.275944e-07 491 3.800000e-01 4.317573e-07 492 3.900000e-01 5.647567e-07 493 4.000000e-01 7.331521e-07 494 4.100000e-01 9.446282e-07 495 4.200000e-01 1.208106e-06 496 4.300000e-01 1.533833e-06 497 4.400000e-01 1.933408e-06 498 4.500000e-01 2.419717e-06 499 4.600000e-01 3.006693e-06 500 4.700000e-01 3.708835e-06 501 4.800000e-01 4.540337e-06 502 4.900000e-01 5.513507e-06 503 5.000000e-01 6.636007e-06 504 5.100000e-01 7.908968e-06 505 5.200000e-01 9.333435e-06 506 5.300000e-01 1.091545e-05 507 5.400000e-01 1.265940e-05 508 5.500000e-01 1.456477e-05 509 5.600000e-01 1.662676e-05 510 5.700000e-01 1.883722e-05 511 5.800000e-01 2.118542e-05 512 5.900000e-01 2.365882e-05 513 6.000000e-01 2.624370e-05 514 6.100000e-01 2.892577e-05 515 6.200000e-01 3.169074e-05 516 6.300000e-01 3.452473e-05 517 6.400000e-01 3.741457e-05 518 6.500000e-01 4.034805e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 519 6.600000e-01 4.331403e-05 520 6.700000e-01 4.630253e-05 521 6.800000e-01 4.930472e-05 522 6.900000e-01 5.231286e-05 523 7.000000e-01 5.532027e-05 524 7.100000e-01 5.832123e-05 525 7.200000e-01 6.131086e-05 526 7.300000e-01 6.428508e-05 527 7.400000e-01 6.724048e-05 528 7.500000e-01 7.017423e-05 529 7.600000e-01 7.308403e-05 530 7.700000e-01 7.596801e-05 531 7.800000e-01 7.882467e-05 532 7.900000e-01 8.165283e-05 533 8.000000e-01 8.445159e-05 534 8.100000e-01 8.722027e-05 535 8.200000e-01 8.995836e-05 536 8.300000e-01 9.266554e-05 537 8.400000e-01 9.534161e-05 538 8.500000e-01 9.798646e-05 539 8.600000e-01 1.006001e-04 540 8.700000e-01 1.031826e-04 541 8.800000e-01 1.057341e-04 542 8.900000e-01 1.082548e-04 543 9.000000e-01 1.107449e-04 544 9.100000e-01 1.132047e-04 545 9.200000e-01 1.156344e-04 546 9.300000e-01 1.180344e-04 547 9.400000e-01 1.204049e-04 548 9.500000e-01 1.227464e-04 549 9.600000e-01 1.250591e-04 550 9.700000e-01 1.273434e-04 551 9.800000e-01 1.295997e-04 552 9.900000e-01 1.318284e-04 553 1.000000e+00 1.340297e-04 554 1.010000e+00 1.362041e-04 555 1.020000e+00 1.383519e-04 556 1.030000e+00 1.404734e-04 557 1.040000e+00 1.425691e-04 558 1.050000e+00 1.446393e-04 559 1.060000e+00 1.466843e-04 560 1.070000e+00 1.487045e-04 561 1.080000e+00 1.507002e-04 562 1.090000e+00 1.526718e-04 563 1.100000e+00 1.546196e-04 564 1.110000e+00 1.565439e-04 565 1.120000e+00 1.584451e-04 566 1.130000e+00 1.603234e-04 567 1.140000e+00 1.621793e-04 568 1.150000e+00 1.640130e-04 569 1.160000e+00 1.658247e-04 570 1.170000e+00 1.676150e-04 571 1.180000e+00 1.693839e-04 572 1.190000e+00 1.711318e-04 573 1.200000e+00 1.728591e-04 574 1.210000e+00 1.745660e-04 575 1.220000e+00 1.762527e-04 576 1.230000e+00 1.779195e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 577 1.240000e+00 1.795668e-04 578 1.250000e+00 1.811948e-04 579 1.260000e+00 1.828037e-04 580 1.270000e+00 1.843938e-04 581 1.280000e+00 1.859654e-04 582 1.290000e+00 1.875187e-04 583 1.300000e+00 1.890540e-04 584 1.310000e+00 1.905715e-04 585 1.320000e+00 1.920714e-04 586 1.330000e+00 1.935539e-04 587 1.340000e+00 1.950194e-04 588 1.350000e+00 1.964680e-04 589 1.360000e+00 1.979000e-04 590 1.370000e+00 1.993156e-04 591 1.380000e+00 2.007149e-04 592 1.390000e+00 2.020983e-04 593 1.400000e+00 2.034658e-04 594 1.410000e+00 2.048178e-04 595 1.420000e+00 2.061544e-04 596 1.430000e+00 2.074759e-04 597 1.440000e+00 2.087824e-04 598 1.450000e+00 2.100740e-04 599 1.460000e+00 2.113511e-04 600 1.470000e+00 2.126138e-04 601 1.480000e+00 2.138623e-04 602 1.490000e+00 2.150967e-04 603 1.500000e+00 2.163172e-04 604 0.000000e+00 3.802857e-12 605 1.000000e-02 5.179405e-12 606 2.000000e-02 7.840940e-12 607 3.000000e-02 1.125575e-11 608 4.000000e-02 1.615433e-11 609 5.000000e-02 2.317943e-11 610 6.000000e-02 3.325101e-11 611 7.000000e-02 4.768511e-11 612 8.000000e-02 6.836303e-11 613 9.000000e-02 9.797210e-11 614 1.000000e-01 1.403476e-10 615 1.100000e-01 2.009572e-10 616 1.200000e-01 2.875868e-10 617 1.300000e-01 4.113064e-10 618 1.400000e-01 5.878303e-10 619 1.500000e-01 8.394210e-10 620 1.600000e-01 1.197526e-09 621 1.700000e-01 1.706327e-09 622 1.800000e-01 2.427883e-09 623 1.900000e-01 3.448995e-09 624 2.000000e-01 4.890513e-09 625 2.100000e-01 6.919840e-09 626 2.200000e-01 9.767530e-09 627 2.300000e-01 1.374902e-08 628 2.400000e-01 1.929264e-08 629 2.500000e-01 2.697515e-08 630 2.600000e-01 3.756591e-08 631 2.700000e-01 5.208067e-08 632 2.800000e-01 7.184554e-08 633 2.900000e-01 9.857148e-08 634 3.000000e-01 1.344389e-07 Index v-sweep vs#branch -------------------------------------------------------------------------------- 635 3.100000e-01 1.821917e-07 636 3.200000e-01 2.452412e-07 637 3.300000e-01 3.277779e-07 638 3.400000e-01 4.348938e-07 639 3.500000e-01 5.727141e-07 640 3.600000e-01 7.485378e-07 641 3.700000e-01 9.709820e-07 642 3.800000e-01 1.250117e-06 643 3.900000e-01 1.597567e-06 644 4.000000e-01 2.026526e-06 645 4.100000e-01 2.551636e-06 646 4.200000e-01 3.188614e-06 647 4.300000e-01 3.953476e-06 648 4.400000e-01 4.861015e-06 649 4.500000e-01 5.921696e-06 650 4.600000e-01 7.136545e-06 651 4.700000e-01 8.498437e-06 652 4.800000e-01 1.000774e-05 653 4.900000e-01 1.167295e-05 654 5.000000e-01 1.349892e-05 655 5.100000e-01 1.548464e-05 656 5.200000e-01 1.762458e-05 657 5.300000e-01 1.990991e-05 658 5.400000e-01 2.232939e-05 659 5.500000e-01 2.487011e-05 660 5.600000e-01 2.751817e-05 661 5.700000e-01 3.025929e-05 662 5.800000e-01 3.307926e-05 663 5.900000e-01 3.596440e-05 664 6.000000e-01 3.890180e-05 665 6.100000e-01 4.187952e-05 666 6.200000e-01 4.488673e-05 667 6.300000e-01 4.791372e-05 668 6.400000e-01 5.095195e-05 669 6.500000e-01 5.399391e-05 670 6.600000e-01 5.703316e-05 671 6.700000e-01 6.006416e-05 672 6.800000e-01 6.308222e-05 673 6.900000e-01 6.608341e-05 674 7.000000e-01 6.906444e-05 675 7.100000e-01 7.202261e-05 676 7.200000e-01 7.495570e-05 677 7.300000e-01 7.786194e-05 678 7.400000e-01 8.073988e-05 679 7.500000e-01 8.358843e-05 680 7.600000e-01 8.640672e-05 681 7.700000e-01 8.919413e-05 682 7.800000e-01 9.195019e-05 683 7.900000e-01 9.467463e-05 684 8.000000e-01 9.736726e-05 685 8.100000e-01 1.000280e-04 686 8.200000e-01 1.026569e-04 687 8.300000e-01 1.052541e-04 688 8.400000e-01 1.078197e-04 689 8.500000e-01 1.103539e-04 690 8.600000e-01 1.128570e-04 691 8.700000e-01 1.153293e-04 692 8.800000e-01 1.177710e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 693 8.900000e-01 1.201824e-04 694 9.000000e-01 1.225640e-04 695 9.100000e-01 1.249160e-04 696 9.200000e-01 1.272388e-04 697 9.300000e-01 1.295329e-04 698 9.400000e-01 1.317985e-04 699 9.500000e-01 1.340360e-04 700 9.600000e-01 1.362458e-04 701 9.700000e-01 1.384283e-04 702 9.800000e-01 1.405838e-04 703 9.900000e-01 1.427128e-04 704 1.000000e+00 1.448155e-04 705 1.010000e+00 1.468924e-04 706 1.020000e+00 1.489438e-04 707 1.030000e+00 1.509700e-04 708 1.040000e+00 1.529715e-04 709 1.050000e+00 1.549486e-04 710 1.060000e+00 1.569015e-04 711 1.070000e+00 1.588307e-04 712 1.080000e+00 1.607365e-04 713 1.090000e+00 1.626192e-04 714 1.100000e+00 1.644792e-04 715 1.110000e+00 1.663167e-04 716 1.120000e+00 1.681320e-04 717 1.130000e+00 1.699256e-04 718 1.140000e+00 1.716977e-04 719 1.150000e+00 1.734485e-04 720 1.160000e+00 1.751784e-04 721 1.170000e+00 1.768877e-04 722 1.180000e+00 1.785767e-04 723 1.190000e+00 1.802456e-04 724 1.200000e+00 1.818947e-04 725 1.210000e+00 1.835244e-04 726 1.220000e+00 1.851347e-04 727 1.230000e+00 1.867262e-04 728 1.240000e+00 1.882988e-04 729 1.250000e+00 1.898531e-04 730 1.260000e+00 1.913891e-04 731 1.270000e+00 1.929072e-04 732 1.280000e+00 1.944075e-04 733 1.290000e+00 1.958904e-04 734 1.300000e+00 1.973560e-04 735 1.310000e+00 1.988046e-04 736 1.320000e+00 2.002365e-04 737 1.330000e+00 2.016517e-04 738 1.340000e+00 2.030506e-04 739 1.350000e+00 2.044334e-04 740 1.360000e+00 2.058003e-04 741 1.370000e+00 2.071515e-04 742 1.380000e+00 2.084872e-04 743 1.390000e+00 2.098076e-04 744 1.400000e+00 2.111129e-04 745 1.410000e+00 2.124033e-04 746 1.420000e+00 2.136790e-04 747 1.430000e+00 2.149402e-04 748 1.440000e+00 2.161871e-04 749 1.450000e+00 2.174198e-04 750 1.460000e+00 2.186386e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 751 1.470000e+00 2.198436e-04 752 1.480000e+00 2.210349e-04 753 1.490000e+00 2.222129e-04 754 1.500000e+00 2.233776e-04 755 0.000000e+00 1.825247e-11 756 1.000000e-02 2.627973e-11 757 2.000000e-02 3.782706e-11 758 3.000000e-02 5.443185e-11 759 4.000000e-02 7.829900e-11 760 5.000000e-02 1.125882e-10 761 6.000000e-02 1.618231e-10 762 7.000000e-02 2.324729e-10 763 8.000000e-02 3.337774e-10 764 9.000000e-02 4.789138e-10 765 1.000000e-01 6.866413e-10 766 1.100000e-01 9.836112e-10 767 1.200000e-01 1.407596e-09 768 1.300000e-01 2.011981e-09 769 1.400000e-01 2.871967e-09 770 1.500000e-01 4.093086e-09 771 1.600000e-01 5.822686e-09 772 1.700000e-01 8.264853e-09 773 1.800000e-01 1.170150e-08 774 1.900000e-01 1.651914e-08 775 2.000000e-01 2.324352e-08 776 2.100000e-01 3.258355e-08 777 2.200000e-01 4.548595e-08 778 2.300000e-01 6.320174e-08 779 2.400000e-01 8.736539e-08 780 2.500000e-01 1.200869e-07 781 2.600000e-01 1.640566e-07 782 2.700000e-01 2.226621e-07 783 2.800000e-01 3.001177e-07 784 2.900000e-01 4.016046e-07 785 3.000000e-01 5.334234e-07 786 3.100000e-01 7.031560e-07 787 3.200000e-01 9.198327e-07 788 3.300000e-01 1.194089e-06 789 3.400000e-01 1.538284e-06 790 3.500000e-01 1.966529e-06 791 3.600000e-01 2.494560e-06 792 3.700000e-01 3.139647e-06 793 3.800000e-01 3.919324e-06 794 3.900000e-01 4.849285e-06 795 4.000000e-01 5.939502e-06 796 4.100000e-01 7.187440e-06 797 4.200000e-01 8.579616e-06 798 4.300000e-01 1.011389e-05 799 4.400000e-01 1.180075e-05 800 4.500000e-01 1.364700e-05 801 4.600000e-01 1.565274e-05 802 4.700000e-01 1.781303e-05 803 4.800000e-01 2.011946e-05 804 4.900000e-01 2.256106e-05 805 5.000000e-01 2.512513e-05 806 5.100000e-01 2.779796e-05 807 5.200000e-01 3.056533e-05 808 5.300000e-01 3.341311e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 809 5.400000e-01 3.632757e-05 810 5.500000e-01 3.929576e-05 811 5.600000e-01 4.230564e-05 812 5.700000e-01 4.534622e-05 813 5.800000e-01 4.840766e-05 814 5.900000e-01 5.148121e-05 815 6.000000e-01 5.455922e-05 816 6.100000e-01 5.763504e-05 817 6.200000e-01 6.070299e-05 818 6.300000e-01 6.375822e-05 819 6.400000e-01 6.679664e-05 820 6.500000e-01 6.981484e-05 821 6.600000e-01 7.281000e-05 822 6.700000e-01 7.577981e-05 823 6.800000e-01 7.872239e-05 824 6.900000e-01 8.163625e-05 825 7.000000e-01 8.452021e-05 826 7.100000e-01 8.737338e-05 827 7.200000e-01 9.019506e-05 828 7.300000e-01 9.298480e-05 829 7.400000e-01 9.574225e-05 830 7.500000e-01 9.846724e-05 831 7.600000e-01 1.011597e-04 832 7.700000e-01 1.038196e-04 833 7.800000e-01 1.064471e-04 834 7.900000e-01 1.090424e-04 835 8.000000e-01 1.116056e-04 836 8.100000e-01 1.141370e-04 837 8.200000e-01 1.166368e-04 838 8.300000e-01 1.191055e-04 839 8.400000e-01 1.215433e-04 840 8.500000e-01 1.239505e-04 841 8.600000e-01 1.263276e-04 842 8.700000e-01 1.286749e-04 843 8.800000e-01 1.309927e-04 844 8.900000e-01 1.332816e-04 845 9.000000e-01 1.355417e-04 846 9.100000e-01 1.377736e-04 847 9.200000e-01 1.399777e-04 848 9.300000e-01 1.421542e-04 849 9.400000e-01 1.443036e-04 850 9.500000e-01 1.464262e-04 851 9.600000e-01 1.485226e-04 852 9.700000e-01 1.505929e-04 853 9.800000e-01 1.526376e-04 854 9.900000e-01 1.546570e-04 855 1.000000e+00 1.566516e-04 856 1.010000e+00 1.586216e-04 857 1.020000e+00 1.605674e-04 858 1.030000e+00 1.624893e-04 859 1.040000e+00 1.643878e-04 860 1.050000e+00 1.662631e-04 861 1.060000e+00 1.681155e-04 862 1.070000e+00 1.699454e-04 863 1.080000e+00 1.717531e-04 864 1.090000e+00 1.735389e-04 865 1.100000e+00 1.753032e-04 866 1.110000e+00 1.770461e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 867 1.120000e+00 1.787681e-04 868 1.130000e+00 1.804694e-04 869 1.140000e+00 1.821503e-04 870 1.150000e+00 1.838111e-04 871 1.160000e+00 1.854521e-04 872 1.170000e+00 1.870735e-04 873 1.180000e+00 1.886756e-04 874 1.190000e+00 1.902588e-04 875 1.200000e+00 1.918231e-04 876 1.210000e+00 1.933690e-04 877 1.220000e+00 1.948966e-04 878 1.230000e+00 1.964062e-04 879 1.240000e+00 1.978981e-04 880 1.250000e+00 1.993725e-04 881 1.260000e+00 2.008296e-04 882 1.270000e+00 2.022697e-04 883 1.280000e+00 2.036929e-04 884 1.290000e+00 2.050996e-04 885 1.300000e+00 2.064899e-04 886 1.310000e+00 2.078640e-04 887 1.320000e+00 2.092223e-04 888 1.330000e+00 2.105648e-04 889 1.340000e+00 2.118918e-04 890 1.350000e+00 2.132035e-04 891 1.360000e+00 2.145001e-04 892 1.370000e+00 2.157818e-04 893 1.380000e+00 2.170488e-04 894 1.390000e+00 2.183013e-04 895 1.400000e+00 2.195394e-04 896 1.410000e+00 2.207634e-04 897 1.420000e+00 2.219734e-04 898 1.430000e+00 2.231696e-04 899 1.440000e+00 2.243523e-04 900 1.450000e+00 2.255215e-04 901 1.460000e+00 2.266774e-04 902 1.470000e+00 2.278203e-04 903 1.480000e+00 2.289502e-04 904 1.490000e+00 2.300674e-04 905 1.500000e+00 2.311719e-04 906 0.000000e+00 1.258752e-10 907 1.000000e-02 1.823407e-10 908 2.000000e-02 2.639900e-10 909 3.000000e-02 3.819525e-10 910 4.000000e-02 5.522071e-10 911 5.000000e-02 7.976497e-10 912 6.000000e-02 1.151011e-09 913 7.000000e-02 1.658958e-09 914 8.000000e-02 2.387814e-09 915 9.000000e-02 3.431510e-09 916 1.000000e-01 4.922511e-09 917 1.100000e-01 7.046734e-09 918 1.200000e-01 1.006368e-08 919 1.300000e-01 1.433325e-08 920 1.400000e-01 2.035107e-08 921 1.500000e-01 2.879411e-08 922 1.600000e-01 4.057812e-08 923 1.700000e-01 5.692562e-08 924 1.800000e-01 7.945695e-08 Index v-sweep vs#branch -------------------------------------------------------------------------------- 925 1.900000e-01 1.102933e-07 926 2.000000e-01 1.521772e-07 927 2.100000e-01 2.086101e-07 928 2.200000e-01 2.840068e-07 929 2.300000e-01 3.838663e-07 930 2.400000e-01 5.149567e-07 931 2.500000e-01 6.855130e-07 932 2.600000e-01 9.054375e-07 933 2.700000e-01 1.186486e-06 934 2.800000e-01 1.542398e-06 935 2.900000e-01 1.988913e-06 936 3.000000e-01 2.543547e-06 937 3.100000e-01 3.224972e-06 938 3.200000e-01 4.051625e-06 939 3.300000e-01 5.038769e-06 940 3.400000e-01 6.192279e-06 941 3.500000e-01 7.500371e-06 942 3.600000e-01 8.944384e-06 943 3.700000e-01 1.052707e-05 944 3.800000e-01 1.226188e-05 945 3.900000e-01 1.415578e-05 946 4.000000e-01 1.620858e-05 947 4.100000e-01 1.841513e-05 948 4.200000e-01 2.076690e-05 949 4.300000e-01 2.325291e-05 950 4.400000e-01 2.586055e-05 951 4.500000e-01 2.857620e-05 952 4.600000e-01 3.138583e-05 953 4.700000e-01 3.427546e-05 954 4.800000e-01 3.723151e-05 955 4.900000e-01 4.024113e-05 956 5.000000e-01 4.329237e-05 957 5.100000e-01 4.637430e-05 958 5.200000e-01 4.947709e-05 959 5.300000e-01 5.259196e-05 960 5.400000e-01 5.571124e-05 961 5.500000e-01 5.882822e-05 962 5.600000e-01 6.193715e-05 963 5.700000e-01 6.503310e-05 964 5.800000e-01 6.811193e-05 965 5.900000e-01 7.117016e-05 966 6.000000e-01 7.420488e-05 967 6.100000e-01 7.721374e-05 968 6.200000e-01 8.019480e-05 969 6.300000e-01 8.314653e-05 970 6.400000e-01 8.606771e-05 971 6.500000e-01 8.895741e-05 972 6.600000e-01 9.181492e-05 973 6.700000e-01 9.463976e-05 974 6.800000e-01 9.743158e-05 975 6.900000e-01 1.001902e-04 976 7.000000e-01 1.029155e-04 977 7.100000e-01 1.056076e-04 978 7.200000e-01 1.082665e-04 979 7.300000e-01 1.108924e-04 980 7.400000e-01 1.134855e-04 981 7.500000e-01 1.160460e-04 982 7.600000e-01 1.185744e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 983 7.700000e-01 1.210708e-04 984 7.800000e-01 1.235356e-04 985 7.900000e-01 1.259693e-04 986 8.000000e-01 1.283721e-04 987 8.100000e-01 1.307445e-04 988 8.200000e-01 1.330868e-04 989 8.300000e-01 1.353995e-04 990 8.400000e-01 1.376829e-04 991 8.500000e-01 1.399375e-04 992 8.600000e-01 1.421636e-04 993 8.700000e-01 1.443616e-04 994 8.800000e-01 1.465320e-04 995 8.900000e-01 1.486751e-04 996 9.000000e-01 1.507913e-04 997 9.100000e-01 1.528811e-04 998 9.200000e-01 1.549447e-04 999 9.300000e-01 1.569825e-04 1000 9.400000e-01 1.589950e-04 1001 9.500000e-01 1.609825e-04 1002 9.600000e-01 1.629453e-04 1003 9.700000e-01 1.648838e-04 1004 9.800000e-01 1.667984e-04 1005 9.900000e-01 1.686894e-04 1006 1.000000e+00 1.705572e-04 1007 1.010000e+00 1.724020e-04 1008 1.020000e+00 1.742242e-04 1009 1.030000e+00 1.760242e-04 1010 1.040000e+00 1.778021e-04 1011 1.050000e+00 1.795585e-04 1012 1.060000e+00 1.812935e-04 1013 1.070000e+00 1.830074e-04 1014 1.080000e+00 1.847007e-04 1015 1.090000e+00 1.863735e-04 1016 1.100000e+00 1.880261e-04 1017 1.110000e+00 1.896588e-04 1018 1.120000e+00 1.912720e-04 1019 1.130000e+00 1.928658e-04 1020 1.140000e+00 1.944406e-04 1021 1.150000e+00 1.959966e-04 1022 1.160000e+00 1.975340e-04 1023 1.170000e+00 1.990532e-04 1024 1.180000e+00 2.005544e-04 1025 1.190000e+00 2.020377e-04 1026 1.200000e+00 2.035036e-04 1027 1.210000e+00 2.049521e-04 1028 1.220000e+00 2.063836e-04 1029 1.230000e+00 2.077982e-04 1030 1.240000e+00 2.091962e-04 1031 1.250000e+00 2.105779e-04 1032 1.260000e+00 2.119434e-04 1033 1.270000e+00 2.132929e-04 1034 1.280000e+00 2.146267e-04 1035 1.290000e+00 2.159450e-04 1036 1.300000e+00 2.172480e-04 1037 1.310000e+00 2.185359e-04 1038 1.320000e+00 2.198088e-04 1039 1.330000e+00 2.210670e-04 1040 1.340000e+00 2.223107e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1041 1.350000e+00 2.235401e-04 1042 1.360000e+00 2.247553e-04 1043 1.370000e+00 2.259565e-04 1044 1.380000e+00 2.271440e-04 1045 1.390000e+00 2.283178e-04 1046 1.400000e+00 2.294782e-04 1047 1.410000e+00 2.306253e-04 1048 1.420000e+00 2.317594e-04 1049 1.430000e+00 2.328805e-04 1050 1.440000e+00 2.339889e-04 1051 1.450000e+00 2.350846e-04 1052 1.460000e+00 2.361679e-04 1053 1.470000e+00 2.372390e-04 1054 1.480000e+00 2.382979e-04 1055 1.490000e+00 2.393448e-04 1056 1.500000e+00 2.403799e-04 1057 0.000000e+00 1.251192e-09 1058 1.000000e-02 1.813709e-09 1059 2.000000e-02 2.624757e-09 1060 3.000000e-02 3.791412e-09 1061 4.000000e-02 5.465157e-09 1062 5.000000e-02 7.859239e-09 1063 6.000000e-02 1.127214e-08 1064 7.000000e-02 1.611896e-08 1065 8.000000e-02 2.297285e-08 1066 9.000000e-02 3.261873e-08 1067 1.000000e-01 4.612204e-08 1068 1.100000e-01 6.491486e-08 1069 1.200000e-01 9.090182e-08 1070 1.300000e-01 1.265877e-07 1071 1.400000e-01 1.752284e-07 1072 1.500000e-01 2.410054e-07 1073 1.600000e-01 3.292206e-07 1074 1.700000e-01 4.464887e-07 1075 1.800000e-01 6.010065e-07 1076 1.900000e-01 8.027946e-07 1077 2.000000e-01 1.063932e-06 1078 2.100000e-01 1.398741e-06 1079 2.200000e-01 1.823838e-06 1080 2.300000e-01 2.357916e-06 1081 2.400000e-01 3.021002e-06 1082 2.500000e-01 3.832660e-06 1083 2.600000e-01 4.807913e-06 1084 2.700000e-01 5.948551e-06 1085 2.800000e-01 7.234720e-06 1086 2.900000e-01 8.646884e-06 1087 3.000000e-01 1.019402e-05 1088 3.100000e-01 1.189245e-05 1089 3.200000e-01 1.375032e-05 1090 3.300000e-01 1.576849e-05 1091 3.400000e-01 1.794291e-05 1092 3.500000e-01 2.026608e-05 1093 3.600000e-01 2.272796e-05 1094 3.700000e-01 2.531672e-05 1095 3.800000e-01 2.801933e-05 1096 3.900000e-01 3.082218e-05 1097 4.000000e-01 3.371147e-05 1098 4.100000e-01 3.667366e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1099 4.200000e-01 3.969573e-05 1100 4.300000e-01 4.276545e-05 1101 4.400000e-01 4.587149e-05 1102 4.500000e-01 4.900351e-05 1103 4.600000e-01 5.215223e-05 1104 4.700000e-01 5.530940e-05 1105 4.800000e-01 5.846777e-05 1106 4.900000e-01 6.162104e-05 1107 5.000000e-01 6.476375e-05 1108 5.100000e-01 6.789129e-05 1109 5.200000e-01 7.099974e-05 1110 5.300000e-01 7.408579e-05 1111 5.400000e-01 7.714674e-05 1112 5.500000e-01 8.018035e-05 1113 5.600000e-01 8.318482e-05 1114 5.700000e-01 8.615870e-05 1115 5.800000e-01 8.910087e-05 1116 5.900000e-01 9.201046e-05 1117 6.000000e-01 9.488686e-05 1118 6.100000e-01 9.772960e-05 1119 6.200000e-01 1.005384e-04 1120 6.300000e-01 1.033132e-04 1121 6.400000e-01 1.060538e-04 1122 6.500000e-01 1.087604e-04 1123 6.600000e-01 1.114332e-04 1124 6.700000e-01 1.140722e-04 1125 6.800000e-01 1.166777e-04 1126 6.900000e-01 1.192501e-04 1127 7.000000e-01 1.217896e-04 1128 7.100000e-01 1.242967e-04 1129 7.200000e-01 1.267716e-04 1130 7.300000e-01 1.292148e-04 1131 7.400000e-01 1.316267e-04 1132 7.500000e-01 1.340076e-04 1133 7.600000e-01 1.363580e-04 1134 7.700000e-01 1.386784e-04 1135 7.800000e-01 1.409690e-04 1136 7.900000e-01 1.432304e-04 1137 8.000000e-01 1.454630e-04 1138 8.100000e-01 1.476671e-04 1139 8.200000e-01 1.498432e-04 1140 8.300000e-01 1.519917e-04 1141 8.400000e-01 1.541130e-04 1142 8.500000e-01 1.562074e-04 1143 8.600000e-01 1.582755e-04 1144 8.700000e-01 1.603175e-04 1145 8.800000e-01 1.623338e-04 1146 8.900000e-01 1.643249e-04 1147 9.000000e-01 1.662910e-04 1148 9.100000e-01 1.682326e-04 1149 9.200000e-01 1.701500e-04 1150 9.300000e-01 1.720436e-04 1151 9.400000e-01 1.739137e-04 1152 9.500000e-01 1.757607e-04 1153 9.600000e-01 1.775848e-04 1154 9.700000e-01 1.793864e-04 1155 9.800000e-01 1.811659e-04 1156 9.900000e-01 1.829236e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1157 1.000000e+00 1.846597e-04 1158 1.010000e+00 1.863746e-04 1159 1.020000e+00 1.880686e-04 1160 1.030000e+00 1.897420e-04 1161 1.040000e+00 1.913950e-04 1162 1.050000e+00 1.930280e-04 1163 1.060000e+00 1.946413e-04 1164 1.070000e+00 1.962351e-04 1165 1.080000e+00 1.978096e-04 1166 1.090000e+00 1.993652e-04 1167 1.100000e+00 2.009022e-04 1168 1.110000e+00 2.024207e-04 1169 1.120000e+00 2.039211e-04 1170 1.130000e+00 2.054036e-04 1171 1.140000e+00 2.068684e-04 1172 1.150000e+00 2.083158e-04 1173 1.160000e+00 2.097460e-04 1174 1.170000e+00 2.111592e-04 1175 1.180000e+00 2.125558e-04 1176 1.190000e+00 2.139358e-04 1177 1.200000e+00 2.152996e-04 1178 1.210000e+00 2.166473e-04 1179 1.220000e+00 2.179792e-04 1180 1.230000e+00 2.192954e-04 1181 1.240000e+00 2.205963e-04 1182 1.250000e+00 2.218819e-04 1183 1.260000e+00 2.231525e-04 1184 1.270000e+00 2.244084e-04 1185 1.280000e+00 2.256496e-04 1186 1.290000e+00 2.268763e-04 1187 1.300000e+00 2.280889e-04 1188 1.310000e+00 2.292874e-04 1189 1.320000e+00 2.304720e-04 1190 1.330000e+00 2.316429e-04 1191 1.340000e+00 2.328004e-04 1192 1.350000e+00 2.339445e-04 1193 1.360000e+00 2.350754e-04 1194 1.370000e+00 2.361933e-04 1195 1.380000e+00 2.372985e-04 1196 1.390000e+00 2.383909e-04 1197 1.400000e+00 2.394708e-04 1198 1.410000e+00 2.405384e-04 1199 1.420000e+00 2.415938e-04 1200 1.430000e+00 2.426372e-04 1201 1.440000e+00 2.436687e-04 1202 1.450000e+00 2.446884e-04 1203 1.460000e+00 2.456966e-04 1204 1.470000e+00 2.466933e-04 1205 1.480000e+00 2.476787e-04 1206 1.490000e+00 2.486530e-04 1207 1.500000e+00 2.496162e-04 1208 0.000000e+00 8.743036e-09 1209 1.000000e-02 1.261676e-08 1210 2.000000e-02 1.814181e-08 1211 3.000000e-02 2.598346e-08 1212 4.000000e-02 3.705280e-08 1213 5.000000e-02 5.258576e-08 1214 6.000000e-02 7.424152e-08 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1215 7.000000e-02 1.042231e-07 1216 8.000000e-02 1.454217e-07 1217 9.000000e-02 2.015865e-07 1218 1.000000e-01 2.775194e-07 1219 1.100000e-01 3.792947e-07 1220 1.200000e-01 5.144985e-07 1221 1.300000e-01 6.924777e-07 1222 1.400000e-01 9.245763e-07 1223 1.500000e-01 1.224307e-06 1224 1.600000e-01 1.607340e-06 1225 1.700000e-01 2.091021e-06 1226 1.800000e-01 2.693299e-06 1227 1.900000e-01 3.429510e-06 1228 2.000000e-01 4.305019e-06 1229 2.100000e-01 5.307255e-06 1230 2.200000e-01 6.423287e-06 1231 2.300000e-01 7.665067e-06 1232 2.400000e-01 9.051983e-06 1233 2.500000e-01 1.059674e-05 1234 2.600000e-01 1.230554e-05 1235 2.700000e-01 1.417983e-05 1236 2.800000e-01 1.621724e-05 1237 2.900000e-01 1.841222e-05 1238 3.000000e-01 2.075660e-05 1239 3.100000e-01 2.324009e-05 1240 3.200000e-01 2.585087e-05 1241 3.300000e-01 2.857605e-05 1242 3.400000e-01 3.140217e-05 1243 3.500000e-01 3.431565e-05 1244 3.600000e-01 3.730308e-05 1245 3.700000e-01 4.035157e-05 1246 3.800000e-01 4.344893e-05 1247 3.900000e-01 4.658382e-05 1248 4.000000e-01 4.974585e-05 1249 4.100000e-01 5.292563e-05 1250 4.200000e-01 5.611474e-05 1251 4.300000e-01 5.930579e-05 1252 4.400000e-01 6.249225e-05 1253 4.500000e-01 6.566851e-05 1254 4.600000e-01 6.882974e-05 1255 4.700000e-01 7.197184e-05 1256 4.800000e-01 7.509135e-05 1257 4.900000e-01 7.818539e-05 1258 5.000000e-01 8.125160e-05 1259 5.100000e-01 8.428806e-05 1260 5.200000e-01 8.729323e-05 1261 5.300000e-01 9.026591e-05 1262 5.400000e-01 9.320517e-05 1263 5.500000e-01 9.611034e-05 1264 5.600000e-01 9.898095e-05 1265 5.700000e-01 1.018167e-04 1266 5.800000e-01 1.046175e-04 1267 5.900000e-01 1.073832e-04 1268 6.000000e-01 1.101139e-04 1269 6.100000e-01 1.128098e-04 1270 6.200000e-01 1.154711e-04 1271 6.300000e-01 1.180980e-04 1272 6.400000e-01 1.206910e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1273 6.500000e-01 1.232503e-04 1274 6.600000e-01 1.257763e-04 1275 6.700000e-01 1.282695e-04 1276 6.800000e-01 1.307302e-04 1277 6.900000e-01 1.331588e-04 1278 7.000000e-01 1.355559e-04 1279 7.100000e-01 1.379218e-04 1280 7.200000e-01 1.402571e-04 1281 7.300000e-01 1.425620e-04 1282 7.400000e-01 1.448372e-04 1283 7.500000e-01 1.470830e-04 1284 7.600000e-01 1.492998e-04 1285 7.700000e-01 1.514882e-04 1286 7.800000e-01 1.536484e-04 1287 7.900000e-01 1.557811e-04 1288 8.000000e-01 1.578864e-04 1289 8.100000e-01 1.599650e-04 1290 8.200000e-01 1.620171e-04 1291 8.300000e-01 1.640433e-04 1292 8.400000e-01 1.660438e-04 1293 8.500000e-01 1.680190e-04 1294 8.600000e-01 1.699694e-04 1295 8.700000e-01 1.718953e-04 1296 8.800000e-01 1.737970e-04 1297 8.900000e-01 1.756750e-04 1298 9.000000e-01 1.775295e-04 1299 9.100000e-01 1.793610e-04 1300 9.200000e-01 1.811697e-04 1301 9.300000e-01 1.829560e-04 1302 9.400000e-01 1.847203e-04 1303 9.500000e-01 1.864627e-04 1304 9.600000e-01 1.881838e-04 1305 9.700000e-01 1.898837e-04 1306 9.800000e-01 1.915627e-04 1307 9.900000e-01 1.932213e-04 1308 1.000000e+00 1.948596e-04 1309 1.010000e+00 1.964779e-04 1310 1.020000e+00 1.980766e-04 1311 1.030000e+00 1.996559e-04 1312 1.040000e+00 2.012161e-04 1313 1.050000e+00 2.027574e-04 1314 1.060000e+00 2.042802e-04 1315 1.070000e+00 2.057846e-04 1316 1.080000e+00 2.072709e-04 1317 1.090000e+00 2.087395e-04 1318 1.100000e+00 2.101904e-04 1319 1.110000e+00 2.116241e-04 1320 1.120000e+00 2.130406e-04 1321 1.130000e+00 2.144403e-04 1322 1.140000e+00 2.158234e-04 1323 1.150000e+00 2.171900e-04 1324 1.160000e+00 2.185405e-04 1325 1.170000e+00 2.198750e-04 1326 1.180000e+00 2.211937e-04 1327 1.190000e+00 2.224970e-04 1328 1.200000e+00 2.237849e-04 1329 1.210000e+00 2.250576e-04 1330 1.220000e+00 2.263155e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1331 1.230000e+00 2.275586e-04 1332 1.240000e+00 2.287872e-04 1333 1.250000e+00 2.300014e-04 1334 1.260000e+00 2.312015e-04 1335 1.270000e+00 2.323876e-04 1336 1.280000e+00 2.335600e-04 1337 1.290000e+00 2.347187e-04 1338 1.300000e+00 2.358640e-04 1339 1.310000e+00 2.369961e-04 1340 1.320000e+00 2.381150e-04 1341 1.330000e+00 2.392211e-04 1342 1.340000e+00 2.403144e-04 1343 1.350000e+00 2.413951e-04 1344 1.360000e+00 2.424634e-04 1345 1.370000e+00 2.435194e-04 1346 1.380000e+00 2.445633e-04 1347 1.390000e+00 2.455952e-04 1348 1.400000e+00 2.466153e-04 1349 1.410000e+00 2.476238e-04 1350 1.420000e+00 2.486207e-04 1351 1.430000e+00 2.496062e-04 1352 1.440000e+00 2.505806e-04 1353 1.450000e+00 2.515438e-04 1354 1.460000e+00 2.524961e-04 1355 1.470000e+00 2.534375e-04 1356 1.480000e+00 2.543683e-04 1357 1.490000e+00 2.552885e-04 1358 1.500000e+00 2.561983e-04 tmpk8ny_4pz/tests/bsim3soifd/RampVg2.cir0000644000175000017500000000047113546075722020343 0ustar carstencarsten* BSIMSOI (FD) example * * SOI, Ramp Vg Vd d 0 1.5 Vg g 0 0.0 PULSE 0V 2V .02n .1n .1n .2n .6n Ve e 0 0.0 Vs s 0 0.0 Vb b 0 0.0 m1 d g s e n1 w=10u l=0.25u debug=-1 .option gmin=1e-20 itl1=200 itl2=200 abstol=1e-9 noacct .tran 1p 1.0ns .print tran @m1[Vbs], V(g)/10 .include nmosfd.mod .end tmpk8ny_4pz/tests/bsim3soifd/ring51.cir0000644000175000017500000000064513546075722020175 0ustar carstencarsten* 51 stage Ring-Osc. vin in out 2 pulse 2 0 0.1n 5n 1 1 1 vdd dd 0 dc 0 pulse 0 2 0 1n 1 1 1 vss ss 0 dc 0 ve sub 0 dc 0 xinv1 dd ss sub in out25 inv25 xinv2 dd ss sub out25 out50 inv25 xinv5 dd ss sub out50 out inv1 xinv11 dd ss sub out buf inv1 cout buf ss 1pF xdum ss dum .option itl1=500 gmin=1e-15 itl4=10 noacct *.dc vdd 0 2 0.01 .tran 0.2n 50n .include nmosfd.mod .include pmosfd.mod .include lib.h .end tmpk8ny_4pz/tests/bsim3soifd/t3.cir0000644000175000017500000000043413546075722017412 0ustar carstencarsten*model = BSIMSOI (FD) *Berkeley Spice Compatibility * * SOI NMOSFET, floating body simulation vd d 0 dc 1.5 vs s 0 dc 0 ve e 0 dc 0 vg g 0 dc 3 m1 d g s e n1 w=10u l=0.25u .option gmin=1e-25 itl1=500 noacct .dc vd 0 3 0.01 vg 0.5 3 0.5 .print dc v(g), i(vs) .include nmosfd.mod tmpk8ny_4pz/tests/bsim3soifd/inv2.out0000644000175000017500000003330013546075722017772 0ustar carstencarsten No. of Data Rows : 251 Circuit: * model = BSIMSOI (FD) Error on line 3 : .model n1 nmos level= 55 tnom = 27 tox = 4.5e-09 tsi = 5e-8 tbox = 8e-08 mobmod = 0 capmod = 3 shmod = 0 paramchk=0 wint = 0 lint = -2e-08 vth0 = .52 k1 = .39 k2 = .1 k3 = 0 kb1 = .95 k3b = 2.2 nlx = 7.2e-08 dvt0 = .55 dvt1 = .28 dvt2 = -1.4 dvt0w = 0 dvt1w = 0 dvt2w = 0 nch = 3.3e+17 nsub = 1e+15 ngate = 1e+20 dvbd0 = 60.0 dvbd1 = 1.1 vbsa = 0.0 kb3 = 2.2 delp = 0.02 abp = 0.9 mxc = 0.9 adice0 = 0.93 kbjt1 = 1.0e-08 edl = .0000005 ndiode = 1.13 ntun = 14.0 isbjt = 2e-6 isdif = 1e-6 istun = 0.0 isrec = 1e-5 xbjt = 0.01 xdif = 0.01 xrec = 0.01 xtun = 0.001 u0 = 352 ua = 1.3e-11 ub = 1.7e-18 uc = -4e-10 w0 = 1.16e-06 ags = .25 a1 = 0 a2 = 1 b0 = .01 b1 = 10 rdsw = 700 prwg = 0 prwb = -.2 wr = 1 rbody = 0.0 rbsh = 0.0 a0 = 1.4 keta = -.67 vsat = 135000 dwg = 0 dwb = 0 alpha0 = 0.0 alpha1 = 1.5 beta0 = 20.5 aii = 1.2 bii = 0.1e-7 cii = 0.8 dii = 0.6 voff = -.14 nfactor = .7 cdsc = .00002 cdscb = 0 cdscd = 0 cit = 0 pclm = 2.9 pvag = 12 pdiblc1 = .18 pdiblc2 = .004 pdiblcb = -.234 drout = .2 delta = .01 eta0 = .01 etab = 0 dsub = .3 rth0 94 = .006 clc = .0000001 cle = .6 cf = 1e-20 ckappa = .6 cgdl = 1e-20 cgsl = 1e-20 kt1 = -.3 kt1l = 0 kt2 = .022 ute = -1.5 ua1 = 4.31e-09 ub1 = -7.61e-18 uc1 = -5.6e-11 prt = 760 at = 22400 cgso = 1e-10 cgdo = 1e-10 cjswg = 5e-10 tt=3e-10 asd = 0.3 csdesw = 1e-12 Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Warning: Pd = 0 is less than W. Warning: Ps = 0 is less than W. Warning: Pd = 0 is less than W. Warning: Ps = 0 is less than W. * model = BSIMSOI (FD) -------------------------------------------------------------------------------- Index v-sweep v(in) v(out) -------------------------------------------------------------------------------- 0 0.000000e+00 0.000000e+00 2.500000e+00 1 1.000000e-02 1.000000e-02 2.500000e+00 2 2.000000e-02 2.000000e-02 2.500000e+00 3 3.000000e-02 3.000000e-02 2.500000e+00 4 4.000000e-02 4.000000e-02 2.500000e+00 5 5.000000e-02 5.000000e-02 2.500000e+00 6 6.000000e-02 6.000000e-02 2.500000e+00 7 7.000000e-02 7.000000e-02 2.500000e+00 8 8.000000e-02 8.000000e-02 2.500000e+00 9 9.000000e-02 9.000000e-02 2.500000e+00 10 1.000000e-01 1.000000e-01 2.499999e+00 11 1.100000e-01 1.100000e-01 2.499999e+00 12 1.200000e-01 1.200000e-01 2.499999e+00 13 1.300000e-01 1.300000e-01 2.499999e+00 14 1.400000e-01 1.400000e-01 2.499998e+00 15 1.500000e-01 1.500000e-01 2.499997e+00 16 1.600000e-01 1.600000e-01 2.499996e+00 17 1.700000e-01 1.700000e-01 2.499994e+00 18 1.800000e-01 1.800000e-01 2.499991e+00 19 1.900000e-01 1.900000e-01 2.499988e+00 20 2.000000e-01 2.000000e-01 2.499983e+00 21 2.100000e-01 2.100000e-01 2.499976e+00 22 2.200000e-01 2.200000e-01 2.499967e+00 23 2.300000e-01 2.300000e-01 2.499955e+00 24 2.400000e-01 2.400000e-01 2.499938e+00 25 2.500000e-01 2.500000e-01 2.499915e+00 26 2.600000e-01 2.600000e-01 2.499885e+00 27 2.700000e-01 2.700000e-01 2.499846e+00 28 2.800000e-01 2.800000e-01 2.499794e+00 29 2.900000e-01 2.900000e-01 2.499726e+00 30 3.000000e-01 3.000000e-01 2.499639e+00 31 3.100000e-01 3.100000e-01 2.499527e+00 32 3.200000e-01 3.200000e-01 2.499386e+00 33 3.300000e-01 3.300000e-01 2.499207e+00 34 3.400000e-01 3.400000e-01 2.498983e+00 35 3.500000e-01 3.500000e-01 2.498704e+00 36 3.600000e-01 3.600000e-01 2.498361e+00 37 3.700000e-01 3.700000e-01 2.497944e+00 38 3.800000e-01 3.800000e-01 2.497443e+00 39 3.900000e-01 3.900000e-01 2.496858e+00 40 4.000000e-01 4.000000e-01 2.496188e+00 41 4.100000e-01 4.100000e-01 2.495427e+00 42 4.200000e-01 4.200000e-01 2.494563e+00 43 4.300000e-01 4.300000e-01 2.493585e+00 44 4.400000e-01 4.400000e-01 2.492485e+00 45 4.500000e-01 4.500000e-01 2.491259e+00 46 4.600000e-01 4.600000e-01 2.489902e+00 47 4.700000e-01 4.700000e-01 2.488412e+00 48 4.800000e-01 4.800000e-01 2.486790e+00 49 4.900000e-01 4.900000e-01 2.485036e+00 50 5.000000e-01 5.000000e-01 2.483154e+00 51 5.100000e-01 5.100000e-01 2.481145e+00 52 5.200000e-01 5.200000e-01 2.479013e+00 53 5.300000e-01 5.300000e-01 2.476763e+00 54 5.400000e-01 5.400000e-01 2.474398e+00 Index v-sweep v(in) v(out) -------------------------------------------------------------------------------- 55 5.500000e-01 5.500000e-01 2.471922e+00 56 5.600000e-01 5.600000e-01 2.469340e+00 57 5.700000e-01 5.700000e-01 2.466654e+00 58 5.800000e-01 5.800000e-01 2.463868e+00 59 5.900000e-01 5.900000e-01 2.460983e+00 60 6.000000e-01 6.000000e-01 2.458003e+00 61 6.100000e-01 6.100000e-01 2.454929e+00 62 6.200000e-01 6.200000e-01 2.451762e+00 63 6.300000e-01 6.300000e-01 2.448503e+00 64 6.400000e-01 6.400000e-01 2.445152e+00 65 6.500000e-01 6.500000e-01 2.441710e+00 66 6.600000e-01 6.600000e-01 2.438176e+00 67 6.700000e-01 6.700000e-01 2.434550e+00 68 6.800000e-01 6.800000e-01 2.430830e+00 69 6.900000e-01 6.900000e-01 2.427016e+00 70 7.000000e-01 7.000000e-01 2.423106e+00 71 7.100000e-01 7.100000e-01 2.419099e+00 72 7.200000e-01 7.200000e-01 2.414992e+00 73 7.300000e-01 7.300000e-01 2.410783e+00 74 7.400000e-01 7.400000e-01 2.406471e+00 75 7.500000e-01 7.500000e-01 2.402052e+00 76 7.600000e-01 7.600000e-01 2.397523e+00 77 7.700000e-01 7.700000e-01 2.392881e+00 78 7.800000e-01 7.800000e-01 2.388124e+00 79 7.900000e-01 7.900000e-01 2.383246e+00 80 8.000000e-01 8.000000e-01 2.378245e+00 81 8.100000e-01 8.100000e-01 2.373117e+00 82 8.200000e-01 8.200000e-01 2.367855e+00 83 8.300000e-01 8.300000e-01 2.362457e+00 84 8.400000e-01 8.400000e-01 2.356916e+00 85 8.500000e-01 8.500000e-01 2.351227e+00 86 8.600000e-01 8.600000e-01 2.345385e+00 87 8.700000e-01 8.700000e-01 2.339381e+00 88 8.800000e-01 8.800000e-01 2.333211e+00 89 8.900000e-01 8.900000e-01 2.326865e+00 90 9.000000e-01 9.000000e-01 2.320336e+00 91 9.100000e-01 9.100000e-01 2.313615e+00 92 9.200000e-01 9.200000e-01 2.306693e+00 93 9.300000e-01 9.300000e-01 2.299559e+00 94 9.400000e-01 9.400000e-01 2.292201e+00 95 9.500000e-01 9.500000e-01 2.284608e+00 96 9.600000e-01 9.600000e-01 2.276766e+00 97 9.700000e-01 9.700000e-01 2.268660e+00 98 9.800000e-01 9.800000e-01 2.260273e+00 99 9.900000e-01 9.900000e-01 2.251588e+00 100 1.000000e+00 1.000000e+00 2.242584e+00 101 1.010000e+00 1.010000e+00 2.233239e+00 102 1.020000e+00 1.020000e+00 2.223528e+00 103 1.030000e+00 1.030000e+00 2.213423e+00 104 1.040000e+00 1.040000e+00 2.202892e+00 105 1.050000e+00 1.050000e+00 2.191898e+00 106 1.060000e+00 1.060000e+00 2.180401e+00 107 1.070000e+00 1.070000e+00 2.168352e+00 108 1.080000e+00 1.080000e+00 2.155697e+00 109 1.090000e+00 1.090000e+00 2.142372e+00 110 1.100000e+00 1.100000e+00 2.128298e+00 111 1.110000e+00 1.110000e+00 2.113386e+00 112 1.120000e+00 1.120000e+00 2.097524e+00 Index v-sweep v(in) v(out) -------------------------------------------------------------------------------- 113 1.130000e+00 1.130000e+00 2.080576e+00 114 1.140000e+00 1.140000e+00 2.062370e+00 115 1.150000e+00 1.150000e+00 2.042688e+00 116 1.160000e+00 1.160000e+00 2.021241e+00 117 1.170000e+00 1.170000e+00 1.997637e+00 118 1.180000e+00 1.180000e+00 1.971318e+00 119 1.190000e+00 1.190000e+00 1.941447e+00 120 1.200000e+00 1.200000e+00 1.906669e+00 121 1.210000e+00 1.210000e+00 1.864529e+00 122 1.220000e+00 1.220000e+00 1.809832e+00 123 1.230000e+00 1.230000e+00 1.727450e+00 124 1.240000e+00 1.240000e+00 1.582257e+00 125 1.250000e+00 1.250000e+00 1.353559e+00 126 1.260000e+00 1.260000e+00 1.099299e+00 127 1.270000e+00 1.270000e+00 8.992398e-01 128 1.280000e+00 1.280000e+00 7.838568e-01 129 1.290000e+00 1.290000e+00 7.155737e-01 130 1.300000e+00 1.300000e+00 6.654759e-01 131 1.310000e+00 1.310000e+00 6.260490e-01 132 1.320000e+00 1.320000e+00 5.923392e-01 133 1.330000e+00 1.330000e+00 5.626805e-01 134 1.340000e+00 1.340000e+00 5.361032e-01 135 1.350000e+00 1.350000e+00 5.119443e-01 136 1.360000e+00 1.360000e+00 4.897461e-01 137 1.370000e+00 1.370000e+00 4.691783e-01 138 1.380000e+00 1.380000e+00 4.499932e-01 139 1.390000e+00 1.390000e+00 4.319993e-01 140 1.400000e+00 1.400000e+00 4.150451e-01 141 1.410000e+00 1.410000e+00 3.990082e-01 142 1.420000e+00 1.420000e+00 3.837883e-01 143 1.430000e+00 1.430000e+00 3.693017e-01 144 1.440000e+00 1.440000e+00 3.554781e-01 145 1.450000e+00 1.450000e+00 3.422574e-01 146 1.460000e+00 1.460000e+00 3.295882e-01 147 1.470000e+00 1.470000e+00 3.174258e-01 148 1.480000e+00 1.480000e+00 3.057313e-01 149 1.490000e+00 1.490000e+00 2.944704e-01 150 1.500000e+00 1.500000e+00 2.836131e-01 151 1.510000e+00 1.510000e+00 2.731324e-01 152 1.520000e+00 1.520000e+00 2.630044e-01 153 1.530000e+00 1.530000e+00 2.532078e-01 154 1.540000e+00 1.540000e+00 2.437231e-01 155 1.550000e+00 1.550000e+00 2.345330e-01 156 1.560000e+00 1.560000e+00 2.256218e-01 157 1.570000e+00 1.570000e+00 2.169751e-01 158 1.580000e+00 1.580000e+00 2.085799e-01 159 1.590000e+00 1.590000e+00 2.004242e-01 160 1.600000e+00 1.600000e+00 1.924973e-01 161 1.610000e+00 1.610000e+00 1.847892e-01 162 1.620000e+00 1.620000e+00 1.772907e-01 163 1.630000e+00 1.630000e+00 1.699934e-01 164 1.640000e+00 1.640000e+00 1.628896e-01 165 1.650000e+00 1.650000e+00 1.559723e-01 166 1.660000e+00 1.660000e+00 1.492349e-01 167 1.670000e+00 1.670000e+00 1.426714e-01 168 1.680000e+00 1.680000e+00 1.362764e-01 169 1.690000e+00 1.690000e+00 1.300448e-01 170 1.700000e+00 1.700000e+00 1.239721e-01 Index v-sweep v(in) v(out) -------------------------------------------------------------------------------- 171 1.710000e+00 1.710000e+00 1.180541e-01 172 1.720000e+00 1.720000e+00 1.122870e-01 173 1.730000e+00 1.730000e+00 1.066675e-01 174 1.740000e+00 1.740000e+00 1.011926e-01 175 1.750000e+00 1.750000e+00 9.585977e-02 176 1.760000e+00 1.760000e+00 9.066679e-02 177 1.770000e+00 1.770000e+00 8.561186e-02 178 1.780000e+00 1.780000e+00 8.069357e-02 179 1.790000e+00 1.790000e+00 7.591092e-02 180 1.800000e+00 1.800000e+00 7.126333e-02 181 1.810000e+00 1.810000e+00 6.675064e-02 182 1.820000e+00 1.820000e+00 6.237315e-02 183 1.830000e+00 1.830000e+00 5.813162e-02 184 1.840000e+00 1.840000e+00 5.402725e-02 185 1.850000e+00 1.850000e+00 5.006175e-02 186 1.860000e+00 1.860000e+00 4.623727e-02 187 1.870000e+00 1.870000e+00 4.255644e-02 188 1.880000e+00 1.880000e+00 3.902231e-02 189 1.890000e+00 1.890000e+00 3.563829e-02 190 1.900000e+00 1.900000e+00 3.240813e-02 191 1.910000e+00 1.910000e+00 2.933575e-02 192 1.920000e+00 1.920000e+00 2.642516e-02 193 1.930000e+00 1.930000e+00 2.368024e-02 194 1.940000e+00 1.940000e+00 2.110457e-02 195 1.950000e+00 1.950000e+00 1.870115e-02 196 1.960000e+00 1.960000e+00 1.647219e-02 197 1.970000e+00 1.970000e+00 1.441876e-02 198 1.980000e+00 1.980000e+00 1.254061e-02 199 1.990000e+00 1.990000e+00 1.083587e-02 200 2.000000e+00 2.000000e+00 9.300895e-03 201 2.010000e+00 2.010000e+00 7.930178e-03 202 2.020000e+00 2.020000e+00 6.716304e-03 203 2.030000e+00 2.030000e+00 5.649975e-03 204 2.040000e+00 2.040000e+00 4.720000e-03 205 2.050000e+00 2.050000e+00 3.913140e-03 206 2.060000e+00 2.060000e+00 3.214637e-03 207 2.070000e+00 2.070000e+00 2.612804e-03 208 2.080000e+00 2.080000e+00 2.102738e-03 209 2.090000e+00 2.090000e+00 1.678846e-03 210 2.100000e+00 2.100000e+00 1.331486e-03 211 2.110000e+00 2.110000e+00 1.049586e-03 212 2.120000e+00 2.120000e+00 8.225159e-04 213 2.130000e+00 2.130000e+00 6.407779e-04 214 2.140000e+00 2.140000e+00 4.961836e-04 215 2.150000e+00 2.150000e+00 3.818138e-04 216 2.160000e+00 2.160000e+00 2.918965e-04 217 2.170000e+00 2.170000e+00 2.216556e-04 218 2.180000e+00 2.180000e+00 1.671596e-04 219 2.190000e+00 2.190000e+00 1.251861e-04 220 2.200000e+00 2.200000e+00 9.310378e-05 221 2.210000e+00 2.210000e+00 6.877416e-05 222 2.220000e+00 2.220000e+00 5.047019e-05 223 2.230000e+00 2.230000e+00 3.680767e-05 224 2.240000e+00 2.240000e+00 2.668746e-05 225 2.250000e+00 2.250000e+00 1.924567e-05 226 2.260000e+00 2.260000e+00 1.381079e-05 227 2.270000e+00 2.270000e+00 9.866643e-06 228 2.280000e+00 2.280000e+00 7.020805e-06 Index v-sweep v(in) v(out) -------------------------------------------------------------------------------- 229 2.290000e+00 2.290000e+00 4.978102e-06 230 2.300000e+00 2.300000e+00 3.518681e-06 231 2.310000e+00 2.310000e+00 2.480280e-06 232 2.320000e+00 2.320000e+00 1.744116e-06 233 2.330000e+00 2.330000e+00 1.223875e-06 234 2.340000e+00 2.340000e+00 8.572430e-07 235 2.350000e+00 2.350000e+00 5.994986e-07 236 2.360000e+00 2.360000e+00 4.187151e-07 237 2.370000e+00 2.370000e+00 2.921310e-07 238 2.380000e+00 2.380000e+00 2.036254e-07 239 2.390000e+00 2.390000e+00 1.418205e-07 240 2.400000e+00 2.400000e+00 9.870679e-08 241 2.410000e+00 2.410000e+00 6.865905e-08 242 2.420000e+00 2.420000e+00 4.773382e-08 243 2.430000e+00 2.430000e+00 3.317125e-08 244 2.440000e+00 2.440000e+00 2.304252e-08 245 2.450000e+00 2.450000e+00 1.600116e-08 246 2.460000e+00 2.460000e+00 1.110821e-08 247 2.470000e+00 2.470000e+00 7.709443e-09 248 2.480000e+00 2.480000e+00 5.349346e-09 249 2.490000e+00 2.490000e+00 3.710973e-09 250 2.500000e+00 2.500000e+00 2.573910e-09 tmpk8ny_4pz/tests/bsim3soifd/t4.out0000644000175000017500000013506713546075722017460 0ustar carstencarsten No. of Data Rows : 1359 Circuit: *model = BSIMSOI (FD) Error on line 3 : .model n1 nmos level= 55 tnom = 27 tox = 4.5e-09 tsi = 5e-8 tbox = 8e-08 mobmod = 0 capmod = 3 shmod = 0 paramchk=0 wint = 0 lint = -2e-08 vth0 = .52 k1 = .39 k2 = .1 k3 = 0 kb1 = .95 k3b = 2.2 nlx = 7.2e-08 dvt0 = .55 dvt1 = .28 dvt2 = -1.4 dvt0w = 0 dvt1w = 0 dvt2w = 0 nch = 3.3e+17 nsub = 1e+15 ngate = 1e+20 dvbd0 = 60.0 dvbd1 = 1.1 vbsa = 0.0 kb3 = 2.2 delp = 0.02 abp = 0.9 mxc = 0.9 adice0 = 0.93 kbjt1 = 1.0e-08 edl = .0000005 ndiode = 1.13 ntun = 14.0 isbjt = 2e-6 isdif = 1e-6 istun = 0.0 isrec = 1e-5 xbjt = 0.01 xdif = 0.01 xrec = 0.01 xtun = 0.001 u0 = 352 ua = 1.3e-11 ub = 1.7e-18 uc = -4e-10 w0 = 1.16e-06 ags = .25 a1 = 0 a2 = 1 b0 = .01 b1 = 10 rdsw = 700 prwg = 0 prwb = -.2 wr = 1 rbody = 0.0 rbsh = 0.0 a0 = 1.4 keta = -.67 vsat = 135000 dwg = 0 dwb = 0 alpha0 = 0.0 alpha1 = 1.5 beta0 = 20.5 aii = 1.2 bii = 0.1e-7 cii = 0.8 dii = 0.6 voff = -.14 nfactor = .7 cdsc = .00002 cdscb = 0 cdscd = 0 cit = 0 pclm = 2.9 pvag = 12 pdiblc1 = .18 pdiblc2 = .004 pdiblcb = -.234 drout = .2 delta = .01 eta0 = .01 etab = 0 dsub = .3 rth0 94 = .006 clc = .0000001 cle = .6 cf = 1e-20 ckappa = .6 cgdl = 1e-20 cgsl = 1e-20 kt1 = -.3 kt1l = 0 kt2 = .022 ute = -1.5 ua1 = 4.31e-09 ub1 = -7.61e-18 uc1 = -5.6e-11 prt = 760 at = 22400 cgso = 1e-10 cgdo = 1e-10 cjswg = 5e-10 tt=3e-10 asd = 0.3 csdesw = 1e-12 Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Warning: Pd = 0 is less than W. Warning: Ps = 0 is less than W. *model = BSIMSOI (FD) -------------------------------------------------------------------------------- Index v-sweep vs#branch -------------------------------------------------------------------------------- 0 0.000000e+00 3.802857e-12 1 1.000000e-02 5.179405e-12 2 2.000000e-02 7.840940e-12 3 3.000000e-02 1.125575e-11 4 4.000000e-02 1.615433e-11 5 5.000000e-02 2.317943e-11 6 6.000000e-02 3.325101e-11 7 7.000000e-02 4.768511e-11 8 8.000000e-02 6.836303e-11 9 9.000000e-02 9.797210e-11 10 1.000000e-01 1.403476e-10 11 1.100000e-01 2.009572e-10 12 1.200000e-01 2.875868e-10 13 1.300000e-01 4.113064e-10 14 1.400000e-01 5.878303e-10 15 1.500000e-01 8.394210e-10 16 1.600000e-01 1.197526e-09 17 1.700000e-01 1.706327e-09 18 1.800000e-01 2.427883e-09 19 1.900000e-01 3.448995e-09 20 2.000000e-01 4.890513e-09 21 2.100000e-01 6.919840e-09 22 2.200000e-01 9.767530e-09 23 2.300000e-01 1.374902e-08 24 2.400000e-01 1.929264e-08 25 2.500000e-01 2.697515e-08 26 2.600000e-01 3.756591e-08 27 2.700000e-01 5.208067e-08 28 2.800000e-01 7.184554e-08 29 2.900000e-01 9.857148e-08 30 3.000000e-01 1.344389e-07 31 3.100000e-01 1.821917e-07 32 3.200000e-01 2.452412e-07 33 3.300000e-01 3.277779e-07 34 3.400000e-01 4.348938e-07 35 3.500000e-01 5.727141e-07 36 3.600000e-01 7.485378e-07 37 3.700000e-01 9.709820e-07 38 3.800000e-01 1.250117e-06 39 3.900000e-01 1.597567e-06 40 4.000000e-01 2.026526e-06 41 4.100000e-01 2.551636e-06 42 4.200000e-01 3.188614e-06 43 4.300000e-01 3.953476e-06 44 4.400000e-01 4.861015e-06 45 4.500000e-01 5.921696e-06 46 4.600000e-01 7.136545e-06 47 4.700000e-01 8.498437e-06 48 4.800000e-01 1.000774e-05 49 4.900000e-01 1.167295e-05 50 5.000000e-01 1.349892e-05 51 5.100000e-01 1.548464e-05 52 5.200000e-01 1.762458e-05 53 5.300000e-01 1.990991e-05 54 5.400000e-01 2.232939e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 55 5.500000e-01 2.487011e-05 56 5.600000e-01 2.751817e-05 57 5.700000e-01 3.025929e-05 58 5.800000e-01 3.307926e-05 59 5.900000e-01 3.596440e-05 60 6.000000e-01 3.890180e-05 61 6.100000e-01 4.187952e-05 62 6.200000e-01 4.488673e-05 63 6.300000e-01 4.791372e-05 64 6.400000e-01 5.095195e-05 65 6.500000e-01 5.399391e-05 66 6.600000e-01 5.703316e-05 67 6.700000e-01 6.006416e-05 68 6.800000e-01 6.308222e-05 69 6.900000e-01 6.608341e-05 70 7.000000e-01 6.906444e-05 71 7.100000e-01 7.202261e-05 72 7.200000e-01 7.495570e-05 73 7.300000e-01 7.786194e-05 74 7.400000e-01 8.073988e-05 75 7.500000e-01 8.358843e-05 76 7.600000e-01 8.640672e-05 77 7.700000e-01 8.919413e-05 78 7.800000e-01 9.195019e-05 79 7.900000e-01 9.467463e-05 80 8.000000e-01 9.736726e-05 81 8.100000e-01 1.000280e-04 82 8.200000e-01 1.026569e-04 83 8.300000e-01 1.052541e-04 84 8.400000e-01 1.078197e-04 85 8.500000e-01 1.103539e-04 86 8.600000e-01 1.128570e-04 87 8.700000e-01 1.153293e-04 88 8.800000e-01 1.177710e-04 89 8.900000e-01 1.201824e-04 90 9.000000e-01 1.225640e-04 91 9.100000e-01 1.249160e-04 92 9.200000e-01 1.272388e-04 93 9.300000e-01 1.295329e-04 94 9.400000e-01 1.317985e-04 95 9.500000e-01 1.340360e-04 96 9.600000e-01 1.362458e-04 97 9.700000e-01 1.384283e-04 98 9.800000e-01 1.405838e-04 99 9.900000e-01 1.427128e-04 100 1.000000e+00 1.448155e-04 101 1.010000e+00 1.468924e-04 102 1.020000e+00 1.489438e-04 103 1.030000e+00 1.509700e-04 104 1.040000e+00 1.529715e-04 105 1.050000e+00 1.549486e-04 106 1.060000e+00 1.569015e-04 107 1.070000e+00 1.588307e-04 108 1.080000e+00 1.607365e-04 109 1.090000e+00 1.626192e-04 110 1.100000e+00 1.644792e-04 111 1.110000e+00 1.663167e-04 112 1.120000e+00 1.681320e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 113 1.130000e+00 1.699256e-04 114 1.140000e+00 1.716977e-04 115 1.150000e+00 1.734485e-04 116 1.160000e+00 1.751784e-04 117 1.170000e+00 1.768877e-04 118 1.180000e+00 1.785767e-04 119 1.190000e+00 1.802456e-04 120 1.200000e+00 1.818947e-04 121 1.210000e+00 1.835244e-04 122 1.220000e+00 1.851347e-04 123 1.230000e+00 1.867262e-04 124 1.240000e+00 1.882988e-04 125 1.250000e+00 1.898531e-04 126 1.260000e+00 1.913891e-04 127 1.270000e+00 1.929072e-04 128 1.280000e+00 1.944075e-04 129 1.290000e+00 1.958904e-04 130 1.300000e+00 1.973560e-04 131 1.310000e+00 1.988046e-04 132 1.320000e+00 2.002365e-04 133 1.330000e+00 2.016517e-04 134 1.340000e+00 2.030506e-04 135 1.350000e+00 2.044334e-04 136 1.360000e+00 2.058003e-04 137 1.370000e+00 2.071515e-04 138 1.380000e+00 2.084872e-04 139 1.390000e+00 2.098076e-04 140 1.400000e+00 2.111129e-04 141 1.410000e+00 2.124033e-04 142 1.420000e+00 2.136790e-04 143 1.430000e+00 2.149402e-04 144 1.440000e+00 2.161871e-04 145 1.450000e+00 2.174198e-04 146 1.460000e+00 2.186386e-04 147 1.470000e+00 2.198436e-04 148 1.480000e+00 2.210349e-04 149 1.490000e+00 2.222129e-04 150 1.500000e+00 2.233776e-04 151 0.000000e+00 3.802857e-12 152 1.000000e-02 5.179405e-12 153 2.000000e-02 7.840940e-12 154 3.000000e-02 1.125575e-11 155 4.000000e-02 1.615433e-11 156 5.000000e-02 2.317943e-11 157 6.000000e-02 3.325101e-11 158 7.000000e-02 4.768511e-11 159 8.000000e-02 6.836303e-11 160 9.000000e-02 9.797210e-11 161 1.000000e-01 1.403476e-10 162 1.100000e-01 2.009572e-10 163 1.200000e-01 2.875868e-10 164 1.300000e-01 4.113064e-10 165 1.400000e-01 5.878303e-10 166 1.500000e-01 8.394210e-10 167 1.600000e-01 1.197526e-09 168 1.700000e-01 1.706327e-09 169 1.800000e-01 2.427883e-09 170 1.900000e-01 3.448995e-09 Index v-sweep vs#branch -------------------------------------------------------------------------------- 171 2.000000e-01 4.890513e-09 172 2.100000e-01 6.919840e-09 173 2.200000e-01 9.767530e-09 174 2.300000e-01 1.374902e-08 175 2.400000e-01 1.929264e-08 176 2.500000e-01 2.697515e-08 177 2.600000e-01 3.756591e-08 178 2.700000e-01 5.208067e-08 179 2.800000e-01 7.184554e-08 180 2.900000e-01 9.857148e-08 181 3.000000e-01 1.344389e-07 182 3.100000e-01 1.821917e-07 183 3.200000e-01 2.452412e-07 184 3.300000e-01 3.277779e-07 185 3.400000e-01 4.348938e-07 186 3.500000e-01 5.727141e-07 187 3.600000e-01 7.485378e-07 188 3.700000e-01 9.709820e-07 189 3.800000e-01 1.250117e-06 190 3.900000e-01 1.597567e-06 191 4.000000e-01 2.026526e-06 192 4.100000e-01 2.551636e-06 193 4.200000e-01 3.188614e-06 194 4.300000e-01 3.953476e-06 195 4.400000e-01 4.861015e-06 196 4.500000e-01 5.921696e-06 197 4.600000e-01 7.136545e-06 198 4.700000e-01 8.498437e-06 199 4.800000e-01 1.000774e-05 200 4.900000e-01 1.167295e-05 201 5.000000e-01 1.349892e-05 202 5.100000e-01 1.548464e-05 203 5.200000e-01 1.762458e-05 204 5.300000e-01 1.990991e-05 205 5.400000e-01 2.232939e-05 206 5.500000e-01 2.487011e-05 207 5.600000e-01 2.751817e-05 208 5.700000e-01 3.025929e-05 209 5.800000e-01 3.307926e-05 210 5.900000e-01 3.596440e-05 211 6.000000e-01 3.890180e-05 212 6.100000e-01 4.187952e-05 213 6.200000e-01 4.488673e-05 214 6.300000e-01 4.791372e-05 215 6.400000e-01 5.095195e-05 216 6.500000e-01 5.399391e-05 217 6.600000e-01 5.703316e-05 218 6.700000e-01 6.006416e-05 219 6.800000e-01 6.308222e-05 220 6.900000e-01 6.608341e-05 221 7.000000e-01 6.906444e-05 222 7.100000e-01 7.202261e-05 223 7.200000e-01 7.495570e-05 224 7.300000e-01 7.786194e-05 225 7.400000e-01 8.073988e-05 226 7.500000e-01 8.358843e-05 227 7.600000e-01 8.640672e-05 228 7.700000e-01 8.919413e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 229 7.800000e-01 9.195019e-05 230 7.900000e-01 9.467463e-05 231 8.000000e-01 9.736726e-05 232 8.100000e-01 1.000280e-04 233 8.200000e-01 1.026569e-04 234 8.300000e-01 1.052541e-04 235 8.400000e-01 1.078197e-04 236 8.500000e-01 1.103539e-04 237 8.600000e-01 1.128570e-04 238 8.700000e-01 1.153293e-04 239 8.800000e-01 1.177710e-04 240 8.900000e-01 1.201824e-04 241 9.000000e-01 1.225640e-04 242 9.100000e-01 1.249160e-04 243 9.200000e-01 1.272388e-04 244 9.300000e-01 1.295329e-04 245 9.400000e-01 1.317985e-04 246 9.500000e-01 1.340360e-04 247 9.600000e-01 1.362458e-04 248 9.700000e-01 1.384283e-04 249 9.800000e-01 1.405838e-04 250 9.900000e-01 1.427128e-04 251 1.000000e+00 1.448155e-04 252 1.010000e+00 1.468924e-04 253 1.020000e+00 1.489438e-04 254 1.030000e+00 1.509700e-04 255 1.040000e+00 1.529715e-04 256 1.050000e+00 1.549486e-04 257 1.060000e+00 1.569015e-04 258 1.070000e+00 1.588307e-04 259 1.080000e+00 1.607365e-04 260 1.090000e+00 1.626192e-04 261 1.100000e+00 1.644792e-04 262 1.110000e+00 1.663167e-04 263 1.120000e+00 1.681320e-04 264 1.130000e+00 1.699256e-04 265 1.140000e+00 1.716977e-04 266 1.150000e+00 1.734485e-04 267 1.160000e+00 1.751784e-04 268 1.170000e+00 1.768877e-04 269 1.180000e+00 1.785767e-04 270 1.190000e+00 1.802456e-04 271 1.200000e+00 1.818947e-04 272 1.210000e+00 1.835244e-04 273 1.220000e+00 1.851347e-04 274 1.230000e+00 1.867262e-04 275 1.240000e+00 1.882988e-04 276 1.250000e+00 1.898531e-04 277 1.260000e+00 1.913891e-04 278 1.270000e+00 1.929072e-04 279 1.280000e+00 1.944075e-04 280 1.290000e+00 1.958904e-04 281 1.300000e+00 1.973560e-04 282 1.310000e+00 1.988046e-04 283 1.320000e+00 2.002365e-04 284 1.330000e+00 2.016517e-04 285 1.340000e+00 2.030506e-04 286 1.350000e+00 2.044334e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 287 1.360000e+00 2.058003e-04 288 1.370000e+00 2.071515e-04 289 1.380000e+00 2.084872e-04 290 1.390000e+00 2.098076e-04 291 1.400000e+00 2.111129e-04 292 1.410000e+00 2.124033e-04 293 1.420000e+00 2.136790e-04 294 1.430000e+00 2.149402e-04 295 1.440000e+00 2.161871e-04 296 1.450000e+00 2.174198e-04 297 1.460000e+00 2.186386e-04 298 1.470000e+00 2.198436e-04 299 1.480000e+00 2.210349e-04 300 1.490000e+00 2.222129e-04 301 1.500000e+00 2.233776e-04 302 0.000000e+00 3.802857e-12 303 1.000000e-02 5.179405e-12 304 2.000000e-02 7.840940e-12 305 3.000000e-02 1.125575e-11 306 4.000000e-02 1.615433e-11 307 5.000000e-02 2.317943e-11 308 6.000000e-02 3.325101e-11 309 7.000000e-02 4.768511e-11 310 8.000000e-02 6.836303e-11 311 9.000000e-02 9.797210e-11 312 1.000000e-01 1.403476e-10 313 1.100000e-01 2.009572e-10 314 1.200000e-01 2.875868e-10 315 1.300000e-01 4.113064e-10 316 1.400000e-01 5.878303e-10 317 1.500000e-01 8.394210e-10 318 1.600000e-01 1.197526e-09 319 1.700000e-01 1.706327e-09 320 1.800000e-01 2.427883e-09 321 1.900000e-01 3.448995e-09 322 2.000000e-01 4.890513e-09 323 2.100000e-01 6.919840e-09 324 2.200000e-01 9.767530e-09 325 2.300000e-01 1.374902e-08 326 2.400000e-01 1.929264e-08 327 2.500000e-01 2.697515e-08 328 2.600000e-01 3.756591e-08 329 2.700000e-01 5.208067e-08 330 2.800000e-01 7.184554e-08 331 2.900000e-01 9.857148e-08 332 3.000000e-01 1.344389e-07 333 3.100000e-01 1.821917e-07 334 3.200000e-01 2.452412e-07 335 3.300000e-01 3.277779e-07 336 3.400000e-01 4.348938e-07 337 3.500000e-01 5.727141e-07 338 3.600000e-01 7.485378e-07 339 3.700000e-01 9.709820e-07 340 3.800000e-01 1.250117e-06 341 3.900000e-01 1.597567e-06 342 4.000000e-01 2.026526e-06 343 4.100000e-01 2.551636e-06 344 4.200000e-01 3.188614e-06 Index v-sweep vs#branch -------------------------------------------------------------------------------- 345 4.300000e-01 3.953476e-06 346 4.400000e-01 4.861015e-06 347 4.500000e-01 5.921696e-06 348 4.600000e-01 7.136545e-06 349 4.700000e-01 8.498437e-06 350 4.800000e-01 1.000774e-05 351 4.900000e-01 1.167295e-05 352 5.000000e-01 1.349892e-05 353 5.100000e-01 1.548464e-05 354 5.200000e-01 1.762458e-05 355 5.300000e-01 1.990991e-05 356 5.400000e-01 2.232939e-05 357 5.500000e-01 2.487011e-05 358 5.600000e-01 2.751817e-05 359 5.700000e-01 3.025929e-05 360 5.800000e-01 3.307926e-05 361 5.900000e-01 3.596440e-05 362 6.000000e-01 3.890180e-05 363 6.100000e-01 4.187952e-05 364 6.200000e-01 4.488673e-05 365 6.300000e-01 4.791372e-05 366 6.400000e-01 5.095195e-05 367 6.500000e-01 5.399391e-05 368 6.600000e-01 5.703316e-05 369 6.700000e-01 6.006416e-05 370 6.800000e-01 6.308222e-05 371 6.900000e-01 6.608341e-05 372 7.000000e-01 6.906444e-05 373 7.100000e-01 7.202261e-05 374 7.200000e-01 7.495570e-05 375 7.300000e-01 7.786194e-05 376 7.400000e-01 8.073988e-05 377 7.500000e-01 8.358843e-05 378 7.600000e-01 8.640672e-05 379 7.700000e-01 8.919413e-05 380 7.800000e-01 9.195019e-05 381 7.900000e-01 9.467463e-05 382 8.000000e-01 9.736726e-05 383 8.100000e-01 1.000280e-04 384 8.200000e-01 1.026569e-04 385 8.300000e-01 1.052541e-04 386 8.400000e-01 1.078197e-04 387 8.500000e-01 1.103539e-04 388 8.600000e-01 1.128570e-04 389 8.700000e-01 1.153293e-04 390 8.800000e-01 1.177710e-04 391 8.900000e-01 1.201824e-04 392 9.000000e-01 1.225640e-04 393 9.100000e-01 1.249160e-04 394 9.200000e-01 1.272388e-04 395 9.300000e-01 1.295329e-04 396 9.400000e-01 1.317985e-04 397 9.500000e-01 1.340360e-04 398 9.600000e-01 1.362458e-04 399 9.700000e-01 1.384283e-04 400 9.800000e-01 1.405838e-04 401 9.900000e-01 1.427128e-04 402 1.000000e+00 1.448155e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 403 1.010000e+00 1.468924e-04 404 1.020000e+00 1.489438e-04 405 1.030000e+00 1.509700e-04 406 1.040000e+00 1.529715e-04 407 1.050000e+00 1.549486e-04 408 1.060000e+00 1.569015e-04 409 1.070000e+00 1.588307e-04 410 1.080000e+00 1.607365e-04 411 1.090000e+00 1.626192e-04 412 1.100000e+00 1.644792e-04 413 1.110000e+00 1.663167e-04 414 1.120000e+00 1.681320e-04 415 1.130000e+00 1.699256e-04 416 1.140000e+00 1.716977e-04 417 1.150000e+00 1.734485e-04 418 1.160000e+00 1.751784e-04 419 1.170000e+00 1.768877e-04 420 1.180000e+00 1.785767e-04 421 1.190000e+00 1.802456e-04 422 1.200000e+00 1.818947e-04 423 1.210000e+00 1.835244e-04 424 1.220000e+00 1.851347e-04 425 1.230000e+00 1.867262e-04 426 1.240000e+00 1.882988e-04 427 1.250000e+00 1.898531e-04 428 1.260000e+00 1.913891e-04 429 1.270000e+00 1.929072e-04 430 1.280000e+00 1.944075e-04 431 1.290000e+00 1.958904e-04 432 1.300000e+00 1.973560e-04 433 1.310000e+00 1.988046e-04 434 1.320000e+00 2.002365e-04 435 1.330000e+00 2.016517e-04 436 1.340000e+00 2.030506e-04 437 1.350000e+00 2.044334e-04 438 1.360000e+00 2.058003e-04 439 1.370000e+00 2.071515e-04 440 1.380000e+00 2.084872e-04 441 1.390000e+00 2.098076e-04 442 1.400000e+00 2.111129e-04 443 1.410000e+00 2.124033e-04 444 1.420000e+00 2.136790e-04 445 1.430000e+00 2.149402e-04 446 1.440000e+00 2.161871e-04 447 1.450000e+00 2.174198e-04 448 1.460000e+00 2.186386e-04 449 1.470000e+00 2.198436e-04 450 1.480000e+00 2.210349e-04 451 1.490000e+00 2.222129e-04 452 1.500000e+00 2.233776e-04 453 0.000000e+00 3.802857e-12 454 1.000000e-02 5.179405e-12 455 2.000000e-02 7.840940e-12 456 3.000000e-02 1.125575e-11 457 4.000000e-02 1.615433e-11 458 5.000000e-02 2.317943e-11 459 6.000000e-02 3.325101e-11 460 7.000000e-02 4.768511e-11 Index v-sweep vs#branch -------------------------------------------------------------------------------- 461 8.000000e-02 6.836303e-11 462 9.000000e-02 9.797210e-11 463 1.000000e-01 1.403476e-10 464 1.100000e-01 2.009572e-10 465 1.200000e-01 2.875868e-10 466 1.300000e-01 4.113064e-10 467 1.400000e-01 5.878303e-10 468 1.500000e-01 8.394210e-10 469 1.600000e-01 1.197526e-09 470 1.700000e-01 1.706327e-09 471 1.800000e-01 2.427883e-09 472 1.900000e-01 3.448995e-09 473 2.000000e-01 4.890513e-09 474 2.100000e-01 6.919840e-09 475 2.200000e-01 9.767530e-09 476 2.300000e-01 1.374902e-08 477 2.400000e-01 1.929264e-08 478 2.500000e-01 2.697515e-08 479 2.600000e-01 3.756591e-08 480 2.700000e-01 5.208067e-08 481 2.800000e-01 7.184554e-08 482 2.900000e-01 9.857148e-08 483 3.000000e-01 1.344389e-07 484 3.100000e-01 1.821917e-07 485 3.200000e-01 2.452412e-07 486 3.300000e-01 3.277779e-07 487 3.400000e-01 4.348938e-07 488 3.500000e-01 5.727141e-07 489 3.600000e-01 7.485378e-07 490 3.700000e-01 9.709820e-07 491 3.800000e-01 1.250117e-06 492 3.900000e-01 1.597567e-06 493 4.000000e-01 2.026526e-06 494 4.100000e-01 2.551636e-06 495 4.200000e-01 3.188614e-06 496 4.300000e-01 3.953476e-06 497 4.400000e-01 4.861015e-06 498 4.500000e-01 5.921696e-06 499 4.600000e-01 7.136545e-06 500 4.700000e-01 8.498437e-06 501 4.800000e-01 1.000774e-05 502 4.900000e-01 1.167295e-05 503 5.000000e-01 1.349892e-05 504 5.100000e-01 1.548464e-05 505 5.200000e-01 1.762458e-05 506 5.300000e-01 1.990991e-05 507 5.400000e-01 2.232939e-05 508 5.500000e-01 2.487011e-05 509 5.600000e-01 2.751817e-05 510 5.700000e-01 3.025929e-05 511 5.800000e-01 3.307926e-05 512 5.900000e-01 3.596440e-05 513 6.000000e-01 3.890180e-05 514 6.100000e-01 4.187952e-05 515 6.200000e-01 4.488673e-05 516 6.300000e-01 4.791372e-05 517 6.400000e-01 5.095195e-05 518 6.500000e-01 5.399391e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 519 6.600000e-01 5.703316e-05 520 6.700000e-01 6.006416e-05 521 6.800000e-01 6.308222e-05 522 6.900000e-01 6.608341e-05 523 7.000000e-01 6.906444e-05 524 7.100000e-01 7.202261e-05 525 7.200000e-01 7.495570e-05 526 7.300000e-01 7.786194e-05 527 7.400000e-01 8.073988e-05 528 7.500000e-01 8.358843e-05 529 7.600000e-01 8.640672e-05 530 7.700000e-01 8.919413e-05 531 7.800000e-01 9.195019e-05 532 7.900000e-01 9.467463e-05 533 8.000000e-01 9.736726e-05 534 8.100000e-01 1.000280e-04 535 8.200000e-01 1.026569e-04 536 8.300000e-01 1.052541e-04 537 8.400000e-01 1.078197e-04 538 8.500000e-01 1.103539e-04 539 8.600000e-01 1.128570e-04 540 8.700000e-01 1.153293e-04 541 8.800000e-01 1.177710e-04 542 8.900000e-01 1.201824e-04 543 9.000000e-01 1.225640e-04 544 9.100000e-01 1.249160e-04 545 9.200000e-01 1.272388e-04 546 9.300000e-01 1.295329e-04 547 9.400000e-01 1.317985e-04 548 9.500000e-01 1.340360e-04 549 9.600000e-01 1.362458e-04 550 9.700000e-01 1.384283e-04 551 9.800000e-01 1.405838e-04 552 9.900000e-01 1.427128e-04 553 1.000000e+00 1.448155e-04 554 1.010000e+00 1.468924e-04 555 1.020000e+00 1.489438e-04 556 1.030000e+00 1.509700e-04 557 1.040000e+00 1.529715e-04 558 1.050000e+00 1.549486e-04 559 1.060000e+00 1.569015e-04 560 1.070000e+00 1.588307e-04 561 1.080000e+00 1.607365e-04 562 1.090000e+00 1.626192e-04 563 1.100000e+00 1.644792e-04 564 1.110000e+00 1.663167e-04 565 1.120000e+00 1.681320e-04 566 1.130000e+00 1.699256e-04 567 1.140000e+00 1.716977e-04 568 1.150000e+00 1.734485e-04 569 1.160000e+00 1.751784e-04 570 1.170000e+00 1.768877e-04 571 1.180000e+00 1.785767e-04 572 1.190000e+00 1.802456e-04 573 1.200000e+00 1.818947e-04 574 1.210000e+00 1.835244e-04 575 1.220000e+00 1.851347e-04 576 1.230000e+00 1.867262e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 577 1.240000e+00 1.882988e-04 578 1.250000e+00 1.898531e-04 579 1.260000e+00 1.913891e-04 580 1.270000e+00 1.929072e-04 581 1.280000e+00 1.944075e-04 582 1.290000e+00 1.958904e-04 583 1.300000e+00 1.973560e-04 584 1.310000e+00 1.988046e-04 585 1.320000e+00 2.002365e-04 586 1.330000e+00 2.016517e-04 587 1.340000e+00 2.030506e-04 588 1.350000e+00 2.044334e-04 589 1.360000e+00 2.058003e-04 590 1.370000e+00 2.071515e-04 591 1.380000e+00 2.084872e-04 592 1.390000e+00 2.098076e-04 593 1.400000e+00 2.111129e-04 594 1.410000e+00 2.124033e-04 595 1.420000e+00 2.136790e-04 596 1.430000e+00 2.149402e-04 597 1.440000e+00 2.161871e-04 598 1.450000e+00 2.174198e-04 599 1.460000e+00 2.186386e-04 600 1.470000e+00 2.198436e-04 601 1.480000e+00 2.210349e-04 602 1.490000e+00 2.222129e-04 603 1.500000e+00 2.233776e-04 604 0.000000e+00 3.802857e-12 605 1.000000e-02 5.179405e-12 606 2.000000e-02 7.840940e-12 607 3.000000e-02 1.125575e-11 608 4.000000e-02 1.615433e-11 609 5.000000e-02 2.317943e-11 610 6.000000e-02 3.325101e-11 611 7.000000e-02 4.768511e-11 612 8.000000e-02 6.836303e-11 613 9.000000e-02 9.797210e-11 614 1.000000e-01 1.403476e-10 615 1.100000e-01 2.009572e-10 616 1.200000e-01 2.875868e-10 617 1.300000e-01 4.113064e-10 618 1.400000e-01 5.878303e-10 619 1.500000e-01 8.394210e-10 620 1.600000e-01 1.197526e-09 621 1.700000e-01 1.706327e-09 622 1.800000e-01 2.427883e-09 623 1.900000e-01 3.448995e-09 624 2.000000e-01 4.890513e-09 625 2.100000e-01 6.919840e-09 626 2.200000e-01 9.767530e-09 627 2.300000e-01 1.374902e-08 628 2.400000e-01 1.929264e-08 629 2.500000e-01 2.697515e-08 630 2.600000e-01 3.756591e-08 631 2.700000e-01 5.208067e-08 632 2.800000e-01 7.184554e-08 633 2.900000e-01 9.857148e-08 634 3.000000e-01 1.344389e-07 Index v-sweep vs#branch -------------------------------------------------------------------------------- 635 3.100000e-01 1.821917e-07 636 3.200000e-01 2.452412e-07 637 3.300000e-01 3.277779e-07 638 3.400000e-01 4.348938e-07 639 3.500000e-01 5.727141e-07 640 3.600000e-01 7.485378e-07 641 3.700000e-01 9.709820e-07 642 3.800000e-01 1.250117e-06 643 3.900000e-01 1.597567e-06 644 4.000000e-01 2.026526e-06 645 4.100000e-01 2.551636e-06 646 4.200000e-01 3.188614e-06 647 4.300000e-01 3.953476e-06 648 4.400000e-01 4.861015e-06 649 4.500000e-01 5.921696e-06 650 4.600000e-01 7.136545e-06 651 4.700000e-01 8.498437e-06 652 4.800000e-01 1.000774e-05 653 4.900000e-01 1.167295e-05 654 5.000000e-01 1.349892e-05 655 5.100000e-01 1.548464e-05 656 5.200000e-01 1.762458e-05 657 5.300000e-01 1.990991e-05 658 5.400000e-01 2.232939e-05 659 5.500000e-01 2.487011e-05 660 5.600000e-01 2.751817e-05 661 5.700000e-01 3.025929e-05 662 5.800000e-01 3.307926e-05 663 5.900000e-01 3.596440e-05 664 6.000000e-01 3.890180e-05 665 6.100000e-01 4.187952e-05 666 6.200000e-01 4.488673e-05 667 6.300000e-01 4.791372e-05 668 6.400000e-01 5.095195e-05 669 6.500000e-01 5.399391e-05 670 6.600000e-01 5.703316e-05 671 6.700000e-01 6.006416e-05 672 6.800000e-01 6.308222e-05 673 6.900000e-01 6.608341e-05 674 7.000000e-01 6.906444e-05 675 7.100000e-01 7.202261e-05 676 7.200000e-01 7.495570e-05 677 7.300000e-01 7.786194e-05 678 7.400000e-01 8.073988e-05 679 7.500000e-01 8.358843e-05 680 7.600000e-01 8.640672e-05 681 7.700000e-01 8.919413e-05 682 7.800000e-01 9.195019e-05 683 7.900000e-01 9.467463e-05 684 8.000000e-01 9.736726e-05 685 8.100000e-01 1.000280e-04 686 8.200000e-01 1.026569e-04 687 8.300000e-01 1.052541e-04 688 8.400000e-01 1.078197e-04 689 8.500000e-01 1.103539e-04 690 8.600000e-01 1.128570e-04 691 8.700000e-01 1.153293e-04 692 8.800000e-01 1.177710e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 693 8.900000e-01 1.201824e-04 694 9.000000e-01 1.225640e-04 695 9.100000e-01 1.249160e-04 696 9.200000e-01 1.272388e-04 697 9.300000e-01 1.295329e-04 698 9.400000e-01 1.317985e-04 699 9.500000e-01 1.340360e-04 700 9.600000e-01 1.362458e-04 701 9.700000e-01 1.384283e-04 702 9.800000e-01 1.405838e-04 703 9.900000e-01 1.427128e-04 704 1.000000e+00 1.448155e-04 705 1.010000e+00 1.468924e-04 706 1.020000e+00 1.489438e-04 707 1.030000e+00 1.509700e-04 708 1.040000e+00 1.529715e-04 709 1.050000e+00 1.549486e-04 710 1.060000e+00 1.569015e-04 711 1.070000e+00 1.588307e-04 712 1.080000e+00 1.607365e-04 713 1.090000e+00 1.626192e-04 714 1.100000e+00 1.644792e-04 715 1.110000e+00 1.663167e-04 716 1.120000e+00 1.681320e-04 717 1.130000e+00 1.699256e-04 718 1.140000e+00 1.716977e-04 719 1.150000e+00 1.734485e-04 720 1.160000e+00 1.751784e-04 721 1.170000e+00 1.768877e-04 722 1.180000e+00 1.785767e-04 723 1.190000e+00 1.802456e-04 724 1.200000e+00 1.818947e-04 725 1.210000e+00 1.835244e-04 726 1.220000e+00 1.851347e-04 727 1.230000e+00 1.867262e-04 728 1.240000e+00 1.882988e-04 729 1.250000e+00 1.898531e-04 730 1.260000e+00 1.913891e-04 731 1.270000e+00 1.929072e-04 732 1.280000e+00 1.944075e-04 733 1.290000e+00 1.958904e-04 734 1.300000e+00 1.973560e-04 735 1.310000e+00 1.988046e-04 736 1.320000e+00 2.002365e-04 737 1.330000e+00 2.016517e-04 738 1.340000e+00 2.030506e-04 739 1.350000e+00 2.044334e-04 740 1.360000e+00 2.058003e-04 741 1.370000e+00 2.071515e-04 742 1.380000e+00 2.084872e-04 743 1.390000e+00 2.098076e-04 744 1.400000e+00 2.111129e-04 745 1.410000e+00 2.124033e-04 746 1.420000e+00 2.136790e-04 747 1.430000e+00 2.149402e-04 748 1.440000e+00 2.161871e-04 749 1.450000e+00 2.174198e-04 750 1.460000e+00 2.186386e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 751 1.470000e+00 2.198436e-04 752 1.480000e+00 2.210349e-04 753 1.490000e+00 2.222129e-04 754 1.500000e+00 2.233776e-04 755 0.000000e+00 3.802857e-12 756 1.000000e-02 5.179405e-12 757 2.000000e-02 7.840940e-12 758 3.000000e-02 1.125575e-11 759 4.000000e-02 1.615433e-11 760 5.000000e-02 2.317943e-11 761 6.000000e-02 3.325101e-11 762 7.000000e-02 4.768511e-11 763 8.000000e-02 6.836303e-11 764 9.000000e-02 9.797210e-11 765 1.000000e-01 1.403476e-10 766 1.100000e-01 2.009572e-10 767 1.200000e-01 2.875868e-10 768 1.300000e-01 4.113064e-10 769 1.400000e-01 5.878303e-10 770 1.500000e-01 8.394210e-10 771 1.600000e-01 1.197526e-09 772 1.700000e-01 1.706327e-09 773 1.800000e-01 2.427883e-09 774 1.900000e-01 3.448995e-09 775 2.000000e-01 4.890513e-09 776 2.100000e-01 6.919840e-09 777 2.200000e-01 9.767530e-09 778 2.300000e-01 1.374902e-08 779 2.400000e-01 1.929264e-08 780 2.500000e-01 2.697515e-08 781 2.600000e-01 3.756591e-08 782 2.700000e-01 5.208067e-08 783 2.800000e-01 7.184554e-08 784 2.900000e-01 9.857148e-08 785 3.000000e-01 1.344389e-07 786 3.100000e-01 1.821917e-07 787 3.200000e-01 2.452412e-07 788 3.300000e-01 3.277779e-07 789 3.400000e-01 4.348938e-07 790 3.500000e-01 5.727141e-07 791 3.600000e-01 7.485378e-07 792 3.700000e-01 9.709820e-07 793 3.800000e-01 1.250117e-06 794 3.900000e-01 1.597567e-06 795 4.000000e-01 2.026526e-06 796 4.100000e-01 2.551636e-06 797 4.200000e-01 3.188614e-06 798 4.300000e-01 3.953476e-06 799 4.400000e-01 4.861015e-06 800 4.500000e-01 5.921696e-06 801 4.600000e-01 7.136545e-06 802 4.700000e-01 8.498437e-06 803 4.800000e-01 1.000774e-05 804 4.900000e-01 1.167295e-05 805 5.000000e-01 1.349892e-05 806 5.100000e-01 1.548464e-05 807 5.200000e-01 1.762458e-05 808 5.300000e-01 1.990991e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 809 5.400000e-01 2.232939e-05 810 5.500000e-01 2.487011e-05 811 5.600000e-01 2.751817e-05 812 5.700000e-01 3.025929e-05 813 5.800000e-01 3.307926e-05 814 5.900000e-01 3.596440e-05 815 6.000000e-01 3.890180e-05 816 6.100000e-01 4.187952e-05 817 6.200000e-01 4.488673e-05 818 6.300000e-01 4.791372e-05 819 6.400000e-01 5.095195e-05 820 6.500000e-01 5.399391e-05 821 6.600000e-01 5.703316e-05 822 6.700000e-01 6.006416e-05 823 6.800000e-01 6.308222e-05 824 6.900000e-01 6.608341e-05 825 7.000000e-01 6.906444e-05 826 7.100000e-01 7.202261e-05 827 7.200000e-01 7.495570e-05 828 7.300000e-01 7.786194e-05 829 7.400000e-01 8.073988e-05 830 7.500000e-01 8.358843e-05 831 7.600000e-01 8.640672e-05 832 7.700000e-01 8.919413e-05 833 7.800000e-01 9.195019e-05 834 7.900000e-01 9.467463e-05 835 8.000000e-01 9.736726e-05 836 8.100000e-01 1.000280e-04 837 8.200000e-01 1.026569e-04 838 8.300000e-01 1.052541e-04 839 8.400000e-01 1.078197e-04 840 8.500000e-01 1.103539e-04 841 8.600000e-01 1.128570e-04 842 8.700000e-01 1.153293e-04 843 8.800000e-01 1.177710e-04 844 8.900000e-01 1.201824e-04 845 9.000000e-01 1.225640e-04 846 9.100000e-01 1.249160e-04 847 9.200000e-01 1.272388e-04 848 9.300000e-01 1.295329e-04 849 9.400000e-01 1.317985e-04 850 9.500000e-01 1.340360e-04 851 9.600000e-01 1.362458e-04 852 9.700000e-01 1.384283e-04 853 9.800000e-01 1.405838e-04 854 9.900000e-01 1.427128e-04 855 1.000000e+00 1.448155e-04 856 1.010000e+00 1.468924e-04 857 1.020000e+00 1.489438e-04 858 1.030000e+00 1.509700e-04 859 1.040000e+00 1.529715e-04 860 1.050000e+00 1.549486e-04 861 1.060000e+00 1.569015e-04 862 1.070000e+00 1.588307e-04 863 1.080000e+00 1.607365e-04 864 1.090000e+00 1.626192e-04 865 1.100000e+00 1.644792e-04 866 1.110000e+00 1.663167e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 867 1.120000e+00 1.681320e-04 868 1.130000e+00 1.699256e-04 869 1.140000e+00 1.716977e-04 870 1.150000e+00 1.734485e-04 871 1.160000e+00 1.751784e-04 872 1.170000e+00 1.768877e-04 873 1.180000e+00 1.785767e-04 874 1.190000e+00 1.802456e-04 875 1.200000e+00 1.818947e-04 876 1.210000e+00 1.835244e-04 877 1.220000e+00 1.851347e-04 878 1.230000e+00 1.867262e-04 879 1.240000e+00 1.882988e-04 880 1.250000e+00 1.898531e-04 881 1.260000e+00 1.913891e-04 882 1.270000e+00 1.929072e-04 883 1.280000e+00 1.944075e-04 884 1.290000e+00 1.958904e-04 885 1.300000e+00 1.973560e-04 886 1.310000e+00 1.988046e-04 887 1.320000e+00 2.002365e-04 888 1.330000e+00 2.016517e-04 889 1.340000e+00 2.030506e-04 890 1.350000e+00 2.044334e-04 891 1.360000e+00 2.058003e-04 892 1.370000e+00 2.071515e-04 893 1.380000e+00 2.084872e-04 894 1.390000e+00 2.098076e-04 895 1.400000e+00 2.111129e-04 896 1.410000e+00 2.124033e-04 897 1.420000e+00 2.136790e-04 898 1.430000e+00 2.149402e-04 899 1.440000e+00 2.161871e-04 900 1.450000e+00 2.174198e-04 901 1.460000e+00 2.186386e-04 902 1.470000e+00 2.198436e-04 903 1.480000e+00 2.210349e-04 904 1.490000e+00 2.222129e-04 905 1.500000e+00 2.233776e-04 906 0.000000e+00 3.802857e-12 907 1.000000e-02 5.179405e-12 908 2.000000e-02 7.840940e-12 909 3.000000e-02 1.125575e-11 910 4.000000e-02 1.615433e-11 911 5.000000e-02 2.317943e-11 912 6.000000e-02 3.325101e-11 913 7.000000e-02 4.768511e-11 914 8.000000e-02 6.836303e-11 915 9.000000e-02 9.797210e-11 916 1.000000e-01 1.403476e-10 917 1.100000e-01 2.009572e-10 918 1.200000e-01 2.875868e-10 919 1.300000e-01 4.113064e-10 920 1.400000e-01 5.878303e-10 921 1.500000e-01 8.394210e-10 922 1.600000e-01 1.197526e-09 923 1.700000e-01 1.706327e-09 924 1.800000e-01 2.427883e-09 Index v-sweep vs#branch -------------------------------------------------------------------------------- 925 1.900000e-01 3.448995e-09 926 2.000000e-01 4.890513e-09 927 2.100000e-01 6.919840e-09 928 2.200000e-01 9.767530e-09 929 2.300000e-01 1.374902e-08 930 2.400000e-01 1.929264e-08 931 2.500000e-01 2.697515e-08 932 2.600000e-01 3.756591e-08 933 2.700000e-01 5.208067e-08 934 2.800000e-01 7.184554e-08 935 2.900000e-01 9.857148e-08 936 3.000000e-01 1.344389e-07 937 3.100000e-01 1.821917e-07 938 3.200000e-01 2.452412e-07 939 3.300000e-01 3.277779e-07 940 3.400000e-01 4.348938e-07 941 3.500000e-01 5.727141e-07 942 3.600000e-01 7.485378e-07 943 3.700000e-01 9.709820e-07 944 3.800000e-01 1.250117e-06 945 3.900000e-01 1.597567e-06 946 4.000000e-01 2.026526e-06 947 4.100000e-01 2.551636e-06 948 4.200000e-01 3.188614e-06 949 4.300000e-01 3.953476e-06 950 4.400000e-01 4.861015e-06 951 4.500000e-01 5.921696e-06 952 4.600000e-01 7.136545e-06 953 4.700000e-01 8.498437e-06 954 4.800000e-01 1.000774e-05 955 4.900000e-01 1.167295e-05 956 5.000000e-01 1.349892e-05 957 5.100000e-01 1.548464e-05 958 5.200000e-01 1.762458e-05 959 5.300000e-01 1.990991e-05 960 5.400000e-01 2.232939e-05 961 5.500000e-01 2.487011e-05 962 5.600000e-01 2.751817e-05 963 5.700000e-01 3.025929e-05 964 5.800000e-01 3.307926e-05 965 5.900000e-01 3.596440e-05 966 6.000000e-01 3.890180e-05 967 6.100000e-01 4.187952e-05 968 6.200000e-01 4.488673e-05 969 6.300000e-01 4.791372e-05 970 6.400000e-01 5.095195e-05 971 6.500000e-01 5.399391e-05 972 6.600000e-01 5.703316e-05 973 6.700000e-01 6.006416e-05 974 6.800000e-01 6.308222e-05 975 6.900000e-01 6.608341e-05 976 7.000000e-01 6.906444e-05 977 7.100000e-01 7.202261e-05 978 7.200000e-01 7.495570e-05 979 7.300000e-01 7.786194e-05 980 7.400000e-01 8.073988e-05 981 7.500000e-01 8.358843e-05 982 7.600000e-01 8.640672e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 983 7.700000e-01 8.919413e-05 984 7.800000e-01 9.195019e-05 985 7.900000e-01 9.467463e-05 986 8.000000e-01 9.736726e-05 987 8.100000e-01 1.000280e-04 988 8.200000e-01 1.026569e-04 989 8.300000e-01 1.052541e-04 990 8.400000e-01 1.078197e-04 991 8.500000e-01 1.103539e-04 992 8.600000e-01 1.128570e-04 993 8.700000e-01 1.153293e-04 994 8.800000e-01 1.177710e-04 995 8.900000e-01 1.201824e-04 996 9.000000e-01 1.225640e-04 997 9.100000e-01 1.249160e-04 998 9.200000e-01 1.272388e-04 999 9.300000e-01 1.295329e-04 1000 9.400000e-01 1.317985e-04 1001 9.500000e-01 1.340360e-04 1002 9.600000e-01 1.362458e-04 1003 9.700000e-01 1.384283e-04 1004 9.800000e-01 1.405838e-04 1005 9.900000e-01 1.427128e-04 1006 1.000000e+00 1.448155e-04 1007 1.010000e+00 1.468924e-04 1008 1.020000e+00 1.489438e-04 1009 1.030000e+00 1.509700e-04 1010 1.040000e+00 1.529715e-04 1011 1.050000e+00 1.549486e-04 1012 1.060000e+00 1.569015e-04 1013 1.070000e+00 1.588307e-04 1014 1.080000e+00 1.607365e-04 1015 1.090000e+00 1.626192e-04 1016 1.100000e+00 1.644792e-04 1017 1.110000e+00 1.663167e-04 1018 1.120000e+00 1.681320e-04 1019 1.130000e+00 1.699256e-04 1020 1.140000e+00 1.716977e-04 1021 1.150000e+00 1.734485e-04 1022 1.160000e+00 1.751784e-04 1023 1.170000e+00 1.768877e-04 1024 1.180000e+00 1.785767e-04 1025 1.190000e+00 1.802456e-04 1026 1.200000e+00 1.818947e-04 1027 1.210000e+00 1.835244e-04 1028 1.220000e+00 1.851347e-04 1029 1.230000e+00 1.867262e-04 1030 1.240000e+00 1.882988e-04 1031 1.250000e+00 1.898531e-04 1032 1.260000e+00 1.913891e-04 1033 1.270000e+00 1.929072e-04 1034 1.280000e+00 1.944075e-04 1035 1.290000e+00 1.958904e-04 1036 1.300000e+00 1.973560e-04 1037 1.310000e+00 1.988046e-04 1038 1.320000e+00 2.002365e-04 1039 1.330000e+00 2.016517e-04 1040 1.340000e+00 2.030506e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1041 1.350000e+00 2.044334e-04 1042 1.360000e+00 2.058003e-04 1043 1.370000e+00 2.071515e-04 1044 1.380000e+00 2.084872e-04 1045 1.390000e+00 2.098076e-04 1046 1.400000e+00 2.111129e-04 1047 1.410000e+00 2.124033e-04 1048 1.420000e+00 2.136790e-04 1049 1.430000e+00 2.149402e-04 1050 1.440000e+00 2.161871e-04 1051 1.450000e+00 2.174198e-04 1052 1.460000e+00 2.186386e-04 1053 1.470000e+00 2.198436e-04 1054 1.480000e+00 2.210349e-04 1055 1.490000e+00 2.222129e-04 1056 1.500000e+00 2.233776e-04 1057 0.000000e+00 3.802857e-12 1058 1.000000e-02 5.179405e-12 1059 2.000000e-02 7.840940e-12 1060 3.000000e-02 1.125575e-11 1061 4.000000e-02 1.615433e-11 1062 5.000000e-02 2.317943e-11 1063 6.000000e-02 3.325101e-11 1064 7.000000e-02 4.768511e-11 1065 8.000000e-02 6.836303e-11 1066 9.000000e-02 9.797210e-11 1067 1.000000e-01 1.403476e-10 1068 1.100000e-01 2.009572e-10 1069 1.200000e-01 2.875868e-10 1070 1.300000e-01 4.113064e-10 1071 1.400000e-01 5.878303e-10 1072 1.500000e-01 8.394210e-10 1073 1.600000e-01 1.197526e-09 1074 1.700000e-01 1.706327e-09 1075 1.800000e-01 2.427883e-09 1076 1.900000e-01 3.448995e-09 1077 2.000000e-01 4.890513e-09 1078 2.100000e-01 6.919840e-09 1079 2.200000e-01 9.767530e-09 1080 2.300000e-01 1.374902e-08 1081 2.400000e-01 1.929264e-08 1082 2.500000e-01 2.697515e-08 1083 2.600000e-01 3.756591e-08 1084 2.700000e-01 5.208067e-08 1085 2.800000e-01 7.184554e-08 1086 2.900000e-01 9.857148e-08 1087 3.000000e-01 1.344389e-07 1088 3.100000e-01 1.821917e-07 1089 3.200000e-01 2.452412e-07 1090 3.300000e-01 3.277779e-07 1091 3.400000e-01 4.348938e-07 1092 3.500000e-01 5.727141e-07 1093 3.600000e-01 7.485378e-07 1094 3.700000e-01 9.709820e-07 1095 3.800000e-01 1.250117e-06 1096 3.900000e-01 1.597567e-06 1097 4.000000e-01 2.026526e-06 1098 4.100000e-01 2.551636e-06 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1099 4.200000e-01 3.188614e-06 1100 4.300000e-01 3.953476e-06 1101 4.400000e-01 4.861015e-06 1102 4.500000e-01 5.921696e-06 1103 4.600000e-01 7.136545e-06 1104 4.700000e-01 8.498437e-06 1105 4.800000e-01 1.000774e-05 1106 4.900000e-01 1.167295e-05 1107 5.000000e-01 1.349892e-05 1108 5.100000e-01 1.548464e-05 1109 5.200000e-01 1.762458e-05 1110 5.300000e-01 1.990991e-05 1111 5.400000e-01 2.232939e-05 1112 5.500000e-01 2.487011e-05 1113 5.600000e-01 2.751817e-05 1114 5.700000e-01 3.025929e-05 1115 5.800000e-01 3.307926e-05 1116 5.900000e-01 3.596440e-05 1117 6.000000e-01 3.890180e-05 1118 6.100000e-01 4.187952e-05 1119 6.200000e-01 4.488673e-05 1120 6.300000e-01 4.791372e-05 1121 6.400000e-01 5.095195e-05 1122 6.500000e-01 5.399391e-05 1123 6.600000e-01 5.703316e-05 1124 6.700000e-01 6.006416e-05 1125 6.800000e-01 6.308222e-05 1126 6.900000e-01 6.608341e-05 1127 7.000000e-01 6.906444e-05 1128 7.100000e-01 7.202261e-05 1129 7.200000e-01 7.495570e-05 1130 7.300000e-01 7.786194e-05 1131 7.400000e-01 8.073988e-05 1132 7.500000e-01 8.358843e-05 1133 7.600000e-01 8.640672e-05 1134 7.700000e-01 8.919413e-05 1135 7.800000e-01 9.195019e-05 1136 7.900000e-01 9.467463e-05 1137 8.000000e-01 9.736726e-05 1138 8.100000e-01 1.000280e-04 1139 8.200000e-01 1.026569e-04 1140 8.300000e-01 1.052541e-04 1141 8.400000e-01 1.078197e-04 1142 8.500000e-01 1.103539e-04 1143 8.600000e-01 1.128570e-04 1144 8.700000e-01 1.153293e-04 1145 8.800000e-01 1.177710e-04 1146 8.900000e-01 1.201824e-04 1147 9.000000e-01 1.225640e-04 1148 9.100000e-01 1.249160e-04 1149 9.200000e-01 1.272388e-04 1150 9.300000e-01 1.295329e-04 1151 9.400000e-01 1.317985e-04 1152 9.500000e-01 1.340360e-04 1153 9.600000e-01 1.362458e-04 1154 9.700000e-01 1.384283e-04 1155 9.800000e-01 1.405838e-04 1156 9.900000e-01 1.427128e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1157 1.000000e+00 1.448155e-04 1158 1.010000e+00 1.468924e-04 1159 1.020000e+00 1.489438e-04 1160 1.030000e+00 1.509700e-04 1161 1.040000e+00 1.529715e-04 1162 1.050000e+00 1.549486e-04 1163 1.060000e+00 1.569015e-04 1164 1.070000e+00 1.588307e-04 1165 1.080000e+00 1.607365e-04 1166 1.090000e+00 1.626192e-04 1167 1.100000e+00 1.644792e-04 1168 1.110000e+00 1.663167e-04 1169 1.120000e+00 1.681320e-04 1170 1.130000e+00 1.699256e-04 1171 1.140000e+00 1.716977e-04 1172 1.150000e+00 1.734485e-04 1173 1.160000e+00 1.751784e-04 1174 1.170000e+00 1.768877e-04 1175 1.180000e+00 1.785767e-04 1176 1.190000e+00 1.802456e-04 1177 1.200000e+00 1.818947e-04 1178 1.210000e+00 1.835244e-04 1179 1.220000e+00 1.851347e-04 1180 1.230000e+00 1.867262e-04 1181 1.240000e+00 1.882988e-04 1182 1.250000e+00 1.898531e-04 1183 1.260000e+00 1.913891e-04 1184 1.270000e+00 1.929072e-04 1185 1.280000e+00 1.944075e-04 1186 1.290000e+00 1.958904e-04 1187 1.300000e+00 1.973560e-04 1188 1.310000e+00 1.988046e-04 1189 1.320000e+00 2.002365e-04 1190 1.330000e+00 2.016517e-04 1191 1.340000e+00 2.030506e-04 1192 1.350000e+00 2.044334e-04 1193 1.360000e+00 2.058003e-04 1194 1.370000e+00 2.071515e-04 1195 1.380000e+00 2.084872e-04 1196 1.390000e+00 2.098076e-04 1197 1.400000e+00 2.111129e-04 1198 1.410000e+00 2.124033e-04 1199 1.420000e+00 2.136790e-04 1200 1.430000e+00 2.149402e-04 1201 1.440000e+00 2.161871e-04 1202 1.450000e+00 2.174198e-04 1203 1.460000e+00 2.186386e-04 1204 1.470000e+00 2.198436e-04 1205 1.480000e+00 2.210349e-04 1206 1.490000e+00 2.222129e-04 1207 1.500000e+00 2.233776e-04 1208 0.000000e+00 3.802857e-12 1209 1.000000e-02 5.179405e-12 1210 2.000000e-02 7.840940e-12 1211 3.000000e-02 1.125575e-11 1212 4.000000e-02 1.615433e-11 1213 5.000000e-02 2.317943e-11 1214 6.000000e-02 3.325101e-11 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1215 7.000000e-02 4.768511e-11 1216 8.000000e-02 6.836303e-11 1217 9.000000e-02 9.797210e-11 1218 1.000000e-01 1.403476e-10 1219 1.100000e-01 2.009572e-10 1220 1.200000e-01 2.875868e-10 1221 1.300000e-01 4.113064e-10 1222 1.400000e-01 5.878303e-10 1223 1.500000e-01 8.394210e-10 1224 1.600000e-01 1.197526e-09 1225 1.700000e-01 1.706327e-09 1226 1.800000e-01 2.427883e-09 1227 1.900000e-01 3.448995e-09 1228 2.000000e-01 4.890513e-09 1229 2.100000e-01 6.919840e-09 1230 2.200000e-01 9.767530e-09 1231 2.300000e-01 1.374902e-08 1232 2.400000e-01 1.929264e-08 1233 2.500000e-01 2.697515e-08 1234 2.600000e-01 3.756591e-08 1235 2.700000e-01 5.208067e-08 1236 2.800000e-01 7.184554e-08 1237 2.900000e-01 9.857148e-08 1238 3.000000e-01 1.344389e-07 1239 3.100000e-01 1.821917e-07 1240 3.200000e-01 2.452412e-07 1241 3.300000e-01 3.277779e-07 1242 3.400000e-01 4.348938e-07 1243 3.500000e-01 5.727141e-07 1244 3.600000e-01 7.485378e-07 1245 3.700000e-01 9.709820e-07 1246 3.800000e-01 1.250117e-06 1247 3.900000e-01 1.597567e-06 1248 4.000000e-01 2.026526e-06 1249 4.100000e-01 2.551636e-06 1250 4.200000e-01 3.188614e-06 1251 4.300000e-01 3.953476e-06 1252 4.400000e-01 4.861015e-06 1253 4.500000e-01 5.921696e-06 1254 4.600000e-01 7.136545e-06 1255 4.700000e-01 8.498437e-06 1256 4.800000e-01 1.000774e-05 1257 4.900000e-01 1.167295e-05 1258 5.000000e-01 1.349892e-05 1259 5.100000e-01 1.548464e-05 1260 5.200000e-01 1.762458e-05 1261 5.300000e-01 1.990991e-05 1262 5.400000e-01 2.232939e-05 1263 5.500000e-01 2.487011e-05 1264 5.600000e-01 2.751817e-05 1265 5.700000e-01 3.025929e-05 1266 5.800000e-01 3.307926e-05 1267 5.900000e-01 3.596440e-05 1268 6.000000e-01 3.890180e-05 1269 6.100000e-01 4.187952e-05 1270 6.200000e-01 4.488673e-05 1271 6.300000e-01 4.791372e-05 1272 6.400000e-01 5.095195e-05 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1273 6.500000e-01 5.399391e-05 1274 6.600000e-01 5.703316e-05 1275 6.700000e-01 6.006416e-05 1276 6.800000e-01 6.308222e-05 1277 6.900000e-01 6.608341e-05 1278 7.000000e-01 6.906444e-05 1279 7.100000e-01 7.202261e-05 1280 7.200000e-01 7.495570e-05 1281 7.300000e-01 7.786194e-05 1282 7.400000e-01 8.073988e-05 1283 7.500000e-01 8.358843e-05 1284 7.600000e-01 8.640672e-05 1285 7.700000e-01 8.919413e-05 1286 7.800000e-01 9.195019e-05 1287 7.900000e-01 9.467463e-05 1288 8.000000e-01 9.736726e-05 1289 8.100000e-01 1.000280e-04 1290 8.200000e-01 1.026569e-04 1291 8.300000e-01 1.052541e-04 1292 8.400000e-01 1.078197e-04 1293 8.500000e-01 1.103539e-04 1294 8.600000e-01 1.128570e-04 1295 8.700000e-01 1.153293e-04 1296 8.800000e-01 1.177710e-04 1297 8.900000e-01 1.201824e-04 1298 9.000000e-01 1.225640e-04 1299 9.100000e-01 1.249160e-04 1300 9.200000e-01 1.272388e-04 1301 9.300000e-01 1.295329e-04 1302 9.400000e-01 1.317985e-04 1303 9.500000e-01 1.340360e-04 1304 9.600000e-01 1.362458e-04 1305 9.700000e-01 1.384283e-04 1306 9.800000e-01 1.405838e-04 1307 9.900000e-01 1.427128e-04 1308 1.000000e+00 1.448155e-04 1309 1.010000e+00 1.468924e-04 1310 1.020000e+00 1.489438e-04 1311 1.030000e+00 1.509700e-04 1312 1.040000e+00 1.529715e-04 1313 1.050000e+00 1.549486e-04 1314 1.060000e+00 1.569015e-04 1315 1.070000e+00 1.588307e-04 1316 1.080000e+00 1.607365e-04 1317 1.090000e+00 1.626192e-04 1318 1.100000e+00 1.644792e-04 1319 1.110000e+00 1.663167e-04 1320 1.120000e+00 1.681320e-04 1321 1.130000e+00 1.699256e-04 1322 1.140000e+00 1.716977e-04 1323 1.150000e+00 1.734485e-04 1324 1.160000e+00 1.751784e-04 1325 1.170000e+00 1.768877e-04 1326 1.180000e+00 1.785767e-04 1327 1.190000e+00 1.802456e-04 1328 1.200000e+00 1.818947e-04 1329 1.210000e+00 1.835244e-04 1330 1.220000e+00 1.851347e-04 Index v-sweep vs#branch -------------------------------------------------------------------------------- 1331 1.230000e+00 1.867262e-04 1332 1.240000e+00 1.882988e-04 1333 1.250000e+00 1.898531e-04 1334 1.260000e+00 1.913891e-04 1335 1.270000e+00 1.929072e-04 1336 1.280000e+00 1.944075e-04 1337 1.290000e+00 1.958904e-04 1338 1.300000e+00 1.973560e-04 1339 1.310000e+00 1.988046e-04 1340 1.320000e+00 2.002365e-04 1341 1.330000e+00 2.016517e-04 1342 1.340000e+00 2.030506e-04 1343 1.350000e+00 2.044334e-04 1344 1.360000e+00 2.058003e-04 1345 1.370000e+00 2.071515e-04 1346 1.380000e+00 2.084872e-04 1347 1.390000e+00 2.098076e-04 1348 1.400000e+00 2.111129e-04 1349 1.410000e+00 2.124033e-04 1350 1.420000e+00 2.136790e-04 1351 1.430000e+00 2.149402e-04 1352 1.440000e+00 2.161871e-04 1353 1.450000e+00 2.174198e-04 1354 1.460000e+00 2.186386e-04 1355 1.470000e+00 2.198436e-04 1356 1.480000e+00 2.210349e-04 1357 1.490000e+00 2.222129e-04 1358 1.500000e+00 2.233776e-04 tmpk8ny_4pz/tests/vbic/0000755000175000017500000000000013546075722015245 5ustar carstencarstentmpk8ny_4pz/tests/vbic/FO.cir0000644000175000017500000000075513546075722016257 0ustar carstencarstenVBIC Output Test V1 V1_P V1_N 0.0 VB V1_N 0 0.5 VC Q1_C 0 0.0 Q1 Q1_C V1_P 0 N1 .OPTIONS NOACCT .DC VC 0 5 50M VB 700M 1 50M .print dc -i(vc) .print dc -i(vb) .MODEL N1 NPN LEVEL=4 + IS=1e-16 IBEI=1e-18 IBEN=5e-15 IBCI=2e-17 IBCN=5e-15 ISP=1e-15 RCX=10 + RCI=60 RBX=10 RBI=40 RE=2 RS=20 RBP=40 VEF=10 VER=4 IKF=2e-3 ITF=8e-2 + XTF=20 IKR=2e-4 IKP=2e-4 CJE=1e-13 CJC=2e-14 CJEP=1e-13 CJCP=4e-13 VO=2 + GAMM=2e-11 HRCF=2 QCO=1e-12 AVC1=2 AVC2=15 TF=10e-12 TR=100e-12 TD=2e-11 RTH=300 .END tmpk8ny_4pz/tests/vbic/Makefile.am0000644000175000017500000000053213546075722017301 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = CEamp.cir \ FG.cir \ FO.cir \ diffamp.cir \ noise_scale_test.cir \ temp.cir TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/vbic/FO.out0000644000175000017500000013412113546075722016304 0ustar carstencarsten No. of Data Rows : 707 Circuit: VBIC Output Test Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 VBIC Output Test -------------------------------------------------------------------------------- Index v-sweep -i(vc) -------------------------------------------------------------------------------- 0 0.000000e+00 -9.59413e-06 1 5.000000e-02 3.223394e-05 2 1.000000e-01 4.087358e-05 3 1.500000e-01 4.247839e-05 4 2.000000e-01 4.292372e-05 5 2.500000e-01 4.317855e-05 6 3.000000e-01 4.339787e-05 7 3.500000e-01 4.360545e-05 8 4.000000e-01 4.380588e-05 9 4.500000e-01 4.400068e-05 10 5.000000e-01 4.419072e-05 11 5.500000e-01 4.437666e-05 12 6.000000e-01 4.455900e-05 13 6.500000e-01 4.473817e-05 14 7.000000e-01 4.491451e-05 15 7.500000e-01 4.508833e-05 16 8.000000e-01 4.525988e-05 17 8.500000e-01 4.542936e-05 18 9.000000e-01 4.559698e-05 19 9.500000e-01 4.576289e-05 20 1.000000e+00 4.592724e-05 21 1.050000e+00 4.609017e-05 22 1.100000e+00 4.625180e-05 23 1.150000e+00 4.641224e-05 24 1.200000e+00 4.657158e-05 25 1.250000e+00 4.672992e-05 26 1.300000e+00 4.688735e-05 27 1.350000e+00 4.704395e-05 28 1.400000e+00 4.719980e-05 29 1.450000e+00 4.735498e-05 30 1.500000e+00 4.750956e-05 31 1.550000e+00 4.766361e-05 32 1.600000e+00 4.781721e-05 33 1.650000e+00 4.797042e-05 34 1.700000e+00 4.812332e-05 35 1.750000e+00 4.827598e-05 36 1.800000e+00 4.842847e-05 37 1.850000e+00 4.858086e-05 38 1.900000e+00 4.873323e-05 39 1.950000e+00 4.888565e-05 40 2.000000e+00 4.903819e-05 41 2.050000e+00 4.919094e-05 42 2.100000e+00 4.934396e-05 43 2.150000e+00 4.949734e-05 44 2.200000e+00 4.965117e-05 45 2.250000e+00 4.980551e-05 46 2.300000e+00 4.996046e-05 47 2.350000e+00 5.011610e-05 48 2.400000e+00 5.027252e-05 49 2.450000e+00 5.042981e-05 50 2.500000e+00 5.058805e-05 51 2.550000e+00 5.074734e-05 52 2.600000e+00 5.090776e-05 53 2.650000e+00 5.106943e-05 54 2.700000e+00 5.123242e-05 Index v-sweep -i(vc) -------------------------------------------------------------------------------- 55 2.750000e+00 5.139683e-05 56 2.800000e+00 5.156277e-05 57 2.850000e+00 5.173034e-05 58 2.900000e+00 5.189962e-05 59 2.950000e+00 5.207074e-05 60 3.000000e+00 5.224377e-05 61 3.050000e+00 5.241884e-05 62 3.100000e+00 5.259604e-05 63 3.150000e+00 5.277549e-05 64 3.200000e+00 5.295727e-05 65 3.250000e+00 5.314152e-05 66 3.300000e+00 5.332832e-05 67 3.350000e+00 5.351779e-05 68 3.400000e+00 5.371004e-05 69 3.450000e+00 5.390518e-05 70 3.500000e+00 5.410332e-05 71 3.550000e+00 5.430458e-05 72 3.600000e+00 5.450905e-05 73 3.650000e+00 5.471686e-05 74 3.700000e+00 5.492812e-05 75 3.750000e+00 5.514294e-05 76 3.800000e+00 5.536144e-05 77 3.850000e+00 5.558373e-05 78 3.900000e+00 5.580992e-05 79 3.950000e+00 5.604014e-05 80 4.000000e+00 5.627450e-05 81 4.050000e+00 5.651311e-05 82 4.100000e+00 5.675609e-05 83 4.150000e+00 5.700356e-05 84 4.200000e+00 5.725564e-05 85 4.250000e+00 5.751244e-05 86 4.300000e+00 5.777409e-05 87 4.350000e+00 5.804071e-05 88 4.400000e+00 5.831240e-05 89 4.450000e+00 5.858930e-05 90 4.500000e+00 5.887153e-05 91 4.550000e+00 5.915920e-05 92 4.600000e+00 5.945244e-05 93 4.650000e+00 5.975138e-05 94 4.700000e+00 6.005612e-05 95 4.750000e+00 6.036680e-05 96 4.800000e+00 6.068355e-05 97 4.850000e+00 6.100648e-05 98 4.900000e+00 6.133572e-05 99 4.950000e+00 6.167140e-05 100 5.000000e+00 6.201365e-05 101 0.000000e+00 -4.83286e-05 102 5.000000e-02 1.575417e-04 103 1.000000e-01 2.341276e-04 104 1.500000e-01 2.549434e-04 105 2.000000e-01 2.599039e-04 106 2.500000e-01 2.617231e-04 107 3.000000e-01 2.629601e-04 108 3.500000e-01 2.640671e-04 109 4.000000e-01 2.651181e-04 110 4.500000e-01 2.661304e-04 111 5.000000e-01 2.671112e-04 112 5.500000e-01 2.680652e-04 Index v-sweep -i(vc) -------------------------------------------------------------------------------- 113 6.000000e-01 2.689960e-04 114 6.500000e-01 2.699066e-04 115 7.000000e-01 2.707990e-04 116 7.500000e-01 2.716754e-04 117 8.000000e-01 2.725373e-04 118 8.500000e-01 2.733860e-04 119 9.000000e-01 2.742228e-04 120 9.500000e-01 2.750487e-04 121 1.000000e+00 2.758645e-04 122 1.050000e+00 2.766711e-04 123 1.100000e+00 2.774692e-04 124 1.150000e+00 2.782595e-04 125 1.200000e+00 2.790425e-04 126 1.250000e+00 2.798188e-04 127 1.300000e+00 2.805889e-04 128 1.350000e+00 2.813533e-04 129 1.400000e+00 2.821125e-04 130 1.450000e+00 2.828669e-04 131 1.500000e+00 2.836169e-04 132 1.550000e+00 2.843631e-04 133 1.600000e+00 2.851057e-04 134 1.650000e+00 2.858453e-04 135 1.700000e+00 2.865823e-04 136 1.750000e+00 2.873172e-04 137 1.800000e+00 2.880503e-04 138 1.850000e+00 2.887821e-04 139 1.900000e+00 2.895132e-04 140 1.950000e+00 2.902439e-04 141 2.000000e+00 2.909748e-04 142 2.050000e+00 2.917063e-04 143 2.100000e+00 2.924390e-04 144 2.150000e+00 2.931735e-04 145 2.200000e+00 2.939101e-04 146 2.250000e+00 2.946496e-04 147 2.300000e+00 2.953924e-04 148 2.350000e+00 2.961393e-04 149 2.400000e+00 2.968906e-04 150 2.450000e+00 2.976472e-04 151 2.500000e+00 2.984095e-04 152 2.550000e+00 2.991783e-04 153 2.600000e+00 2.999542e-04 154 2.650000e+00 3.007378e-04 155 2.700000e+00 3.015299e-04 156 2.750000e+00 3.023311e-04 157 2.800000e+00 3.031422e-04 158 2.850000e+00 3.039638e-04 159 2.900000e+00 3.047967e-04 160 2.950000e+00 3.056416e-04 161 3.000000e+00 3.064993e-04 162 3.050000e+00 3.073705e-04 163 3.100000e+00 3.082561e-04 164 3.150000e+00 3.091567e-04 165 3.200000e+00 3.100731e-04 166 3.250000e+00 3.110063e-04 167 3.300000e+00 3.119569e-04 168 3.350000e+00 3.129259e-04 169 3.400000e+00 3.139139e-04 170 3.450000e+00 3.149219e-04 Index v-sweep -i(vc) -------------------------------------------------------------------------------- 171 3.500000e+00 3.159508e-04 172 3.550000e+00 3.170013e-04 173 3.600000e+00 3.180743e-04 174 3.650000e+00 3.191708e-04 175 3.700000e+00 3.202916e-04 176 3.750000e+00 3.214375e-04 177 3.800000e+00 3.226095e-04 178 3.850000e+00 3.238085e-04 179 3.900000e+00 3.250355e-04 180 3.950000e+00 3.262913e-04 181 4.000000e+00 3.275769e-04 182 4.050000e+00 3.288933e-04 183 4.100000e+00 3.302414e-04 184 4.150000e+00 3.316222e-04 185 4.200000e+00 3.330367e-04 186 4.250000e+00 3.344859e-04 187 4.300000e+00 3.359707e-04 188 4.350000e+00 3.374924e-04 189 4.400000e+00 3.390518e-04 190 4.450000e+00 3.406500e-04 191 4.500000e+00 3.422882e-04 192 4.550000e+00 3.439673e-04 193 4.600000e+00 3.456886e-04 194 4.650000e+00 3.474531e-04 195 4.700000e+00 3.492619e-04 196 4.750000e+00 3.511164e-04 197 4.800000e+00 3.530175e-04 198 4.850000e+00 3.549666e-04 199 4.900000e+00 3.569648e-04 200 4.950000e+00 3.590135e-04 201 5.000000e+00 3.611139e-04 202 0.000000e+00 -1.78156e-04 203 5.000000e-02 4.603447e-04 204 1.000000e-01 8.779874e-04 205 1.500000e-01 1.083308e-03 206 2.000000e-01 1.167765e-03 207 2.500000e-01 1.198463e-03 208 3.000000e-01 1.208579e-03 209 3.500000e-01 1.212988e-03 210 4.000000e-01 1.216303e-03 211 4.500000e-01 1.219301e-03 212 5.000000e-01 1.222137e-03 213 5.500000e-01 1.224856e-03 214 6.000000e-01 1.227478e-03 215 6.500000e-01 1.230017e-03 216 7.000000e-01 1.232484e-03 217 7.500000e-01 1.234887e-03 218 8.000000e-01 1.237235e-03 219 8.500000e-01 1.239532e-03 220 9.000000e-01 1.241783e-03 221 9.500000e-01 1.243992e-03 222 1.000000e+00 1.246163e-03 223 1.050000e+00 1.248300e-03 224 1.100000e+00 1.250403e-03 225 1.150000e+00 1.252478e-03 226 1.200000e+00 1.254524e-03 227 1.250000e+00 1.256545e-03 228 1.300000e+00 1.258542e-03 Index v-sweep -i(vc) -------------------------------------------------------------------------------- 229 1.350000e+00 1.260517e-03 230 1.400000e+00 1.262472e-03 231 1.450000e+00 1.264408e-03 232 1.500000e+00 1.266328e-03 233 1.550000e+00 1.268233e-03 234 1.600000e+00 1.270124e-03 235 1.650000e+00 1.272003e-03 236 1.700000e+00 1.273873e-03 237 1.750000e+00 1.275734e-03 238 1.800000e+00 1.277590e-03 239 1.850000e+00 1.279441e-03 240 1.900000e+00 1.281291e-03 241 1.950000e+00 1.283141e-03 242 2.000000e+00 1.284993e-03 243 2.050000e+00 1.286851e-03 244 2.100000e+00 1.288716e-03 245 2.150000e+00 1.290591e-03 246 2.200000e+00 1.292479e-03 247 2.250000e+00 1.294383e-03 248 2.300000e+00 1.296305e-03 249 2.350000e+00 1.298249e-03 250 2.400000e+00 1.300218e-03 251 2.450000e+00 1.302215e-03 252 2.500000e+00 1.304243e-03 253 2.550000e+00 1.306307e-03 254 2.600000e+00 1.308408e-03 255 2.650000e+00 1.310551e-03 256 2.700000e+00 1.312740e-03 257 2.750000e+00 1.314978e-03 258 2.800000e+00 1.317269e-03 259 2.850000e+00 1.319618e-03 260 2.900000e+00 1.322028e-03 261 2.950000e+00 1.324503e-03 262 3.000000e+00 1.327047e-03 263 3.050000e+00 1.329665e-03 264 3.100000e+00 1.332361e-03 265 3.150000e+00 1.335139e-03 266 3.200000e+00 1.338004e-03 267 3.250000e+00 1.340960e-03 268 3.300000e+00 1.344012e-03 269 3.350000e+00 1.347164e-03 270 3.400000e+00 1.350421e-03 271 3.450000e+00 1.353787e-03 272 3.500000e+00 1.357269e-03 273 3.550000e+00 1.360870e-03 274 3.600000e+00 1.364595e-03 275 3.650000e+00 1.368449e-03 276 3.700000e+00 1.372438e-03 277 3.750000e+00 1.376567e-03 278 3.800000e+00 1.380840e-03 279 3.850000e+00 1.385263e-03 280 3.900000e+00 1.389842e-03 281 3.950000e+00 1.394581e-03 282 4.000000e+00 1.399487e-03 283 4.050000e+00 1.404565e-03 284 4.100000e+00 1.409821e-03 285 4.150000e+00 1.415260e-03 286 4.200000e+00 1.420889e-03 Index v-sweep -i(vc) -------------------------------------------------------------------------------- 287 4.250000e+00 1.426713e-03 288 4.300000e+00 1.432738e-03 289 4.350000e+00 1.438972e-03 290 4.400000e+00 1.445420e-03 291 4.450000e+00 1.452088e-03 292 4.500000e+00 1.458984e-03 293 4.550000e+00 1.466115e-03 294 4.600000e+00 1.473486e-03 295 4.650000e+00 1.481106e-03 296 4.700000e+00 1.488981e-03 297 4.750000e+00 1.497119e-03 298 4.800000e+00 1.505528e-03 299 4.850000e+00 1.514216e-03 300 4.900000e+00 1.523190e-03 301 4.950000e+00 1.532460e-03 302 5.000000e+00 1.542033e-03 303 0.000000e+00 -4.53981e-04 304 5.000000e-02 7.917497e-04 305 1.000000e-01 1.900450e-03 306 1.500000e-01 2.695620e-03 307 2.000000e-01 3.160991e-03 308 2.500000e-01 3.408652e-03 309 3.000000e-01 3.551886e-03 310 3.500000e-01 3.649750e-03 311 4.000000e-01 3.714913e-03 312 4.500000e-01 3.752032e-03 313 5.000000e-01 3.768584e-03 314 5.500000e-01 3.775571e-03 315 6.000000e-01 3.780471e-03 316 6.500000e-01 3.784779e-03 317 7.000000e-01 3.788810e-03 318 7.500000e-01 3.792648e-03 319 8.000000e-01 3.796330e-03 320 8.500000e-01 3.799882e-03 321 9.000000e-01 3.803320e-03 322 9.500000e-01 3.806659e-03 323 1.000000e+00 3.809910e-03 324 1.050000e+00 3.813082e-03 325 1.100000e+00 3.816183e-03 326 1.150000e+00 3.819219e-03 327 1.200000e+00 3.822196e-03 328 1.250000e+00 3.825118e-03 329 1.300000e+00 3.827991e-03 330 1.350000e+00 3.830817e-03 331 1.400000e+00 3.833602e-03 332 1.450000e+00 3.836347e-03 333 1.500000e+00 3.839057e-03 334 1.550000e+00 3.841735e-03 335 1.600000e+00 3.844385e-03 336 1.650000e+00 3.847009e-03 337 1.700000e+00 3.849612e-03 338 1.750000e+00 3.852197e-03 339 1.800000e+00 3.854768e-03 340 1.850000e+00 3.857331e-03 341 1.900000e+00 3.859890e-03 342 1.950000e+00 3.862450e-03 343 2.000000e+00 3.865017e-03 344 2.050000e+00 3.867596e-03 Index v-sweep -i(vc) -------------------------------------------------------------------------------- 345 2.100000e+00 3.870194e-03 346 2.150000e+00 3.872818e-03 347 2.200000e+00 3.875474e-03 348 2.250000e+00 3.878172e-03 349 2.300000e+00 3.880918e-03 350 2.350000e+00 3.883721e-03 351 2.400000e+00 3.886591e-03 352 2.450000e+00 3.889536e-03 353 2.500000e+00 3.892567e-03 354 2.550000e+00 3.895693e-03 355 2.600000e+00 3.898925e-03 356 2.650000e+00 3.902274e-03 357 2.700000e+00 3.905751e-03 358 2.750000e+00 3.909368e-03 359 2.800000e+00 3.913136e-03 360 2.850000e+00 3.917069e-03 361 2.900000e+00 3.921178e-03 362 2.950000e+00 3.925477e-03 363 3.000000e+00 3.929978e-03 364 3.050000e+00 3.934696e-03 365 3.100000e+00 3.939642e-03 366 3.150000e+00 3.944832e-03 367 3.200000e+00 3.950280e-03 368 3.250000e+00 3.955999e-03 369 3.300000e+00 3.962004e-03 370 3.350000e+00 3.968310e-03 371 3.400000e+00 3.974932e-03 372 3.450000e+00 3.981885e-03 373 3.500000e+00 3.989184e-03 374 3.550000e+00 3.996844e-03 375 3.600000e+00 4.004881e-03 376 3.650000e+00 4.013312e-03 377 3.700000e+00 4.022151e-03 378 3.750000e+00 4.031414e-03 379 3.800000e+00 4.041120e-03 380 3.850000e+00 4.051283e-03 381 3.900000e+00 4.061920e-03 382 3.950000e+00 4.073048e-03 383 4.000000e+00 4.084685e-03 384 4.050000e+00 4.096848e-03 385 4.100000e+00 4.109553e-03 386 4.150000e+00 4.122820e-03 387 4.200000e+00 4.136665e-03 388 4.250000e+00 4.151107e-03 389 4.300000e+00 4.166165e-03 390 4.350000e+00 4.181857e-03 391 4.400000e+00 4.198202e-03 392 4.450000e+00 4.215220e-03 393 4.500000e+00 4.232931e-03 394 4.550000e+00 4.251353e-03 395 4.600000e+00 4.270509e-03 396 4.650000e+00 4.290418e-03 397 4.700000e+00 4.311102e-03 398 4.750000e+00 4.332582e-03 399 4.800000e+00 4.354881e-03 400 4.850000e+00 4.378021e-03 401 4.900000e+00 4.402025e-03 402 4.950000e+00 4.426916e-03 Index v-sweep -i(vc) -------------------------------------------------------------------------------- 403 5.000000e+00 4.452719e-03 404 0.000000e+00 -8.55566e-04 405 5.000000e-02 9.351060e-04 406 1.000000e-01 2.735866e-03 407 1.500000e-01 4.344452e-03 408 2.000000e-01 5.597086e-03 409 2.500000e-01 6.432215e-03 410 3.000000e-01 6.924348e-03 411 3.500000e-01 7.216682e-03 412 4.000000e-01 7.427107e-03 413 4.500000e-01 7.609227e-03 414 5.000000e-01 7.775036e-03 415 5.500000e-01 7.925264e-03 416 6.000000e-01 8.058304e-03 417 6.500000e-01 8.172002e-03 418 7.000000e-01 8.264090e-03 419 7.500000e-01 8.332623e-03 420 8.000000e-01 8.376230e-03 421 8.500000e-01 8.399366e-03 422 9.000000e-01 8.409827e-03 423 9.500000e-01 8.415617e-03 424 1.000000e+00 8.420355e-03 425 1.050000e+00 8.424692e-03 426 1.100000e+00 8.428789e-03 427 1.150000e+00 8.432700e-03 428 1.200000e+00 8.436457e-03 429 1.250000e+00 8.440084e-03 430 1.300000e+00 8.443597e-03 431 1.350000e+00 8.447009e-03 432 1.400000e+00 8.450332e-03 433 1.450000e+00 8.453575e-03 434 1.500000e+00 8.456744e-03 435 1.550000e+00 8.459848e-03 436 1.600000e+00 8.462891e-03 437 1.650000e+00 8.465879e-03 438 1.700000e+00 8.468816e-03 439 1.750000e+00 8.471707e-03 440 1.800000e+00 8.474557e-03 441 1.850000e+00 8.477371e-03 442 1.900000e+00 8.480152e-03 443 1.950000e+00 8.482906e-03 444 2.000000e+00 8.485640e-03 445 2.050000e+00 8.488358e-03 446 2.100000e+00 8.491069e-03 447 2.150000e+00 8.493779e-03 448 2.200000e+00 8.496497e-03 449 2.250000e+00 8.499233e-03 450 2.300000e+00 8.501997e-03 451 2.350000e+00 8.504800e-03 452 2.400000e+00 8.507655e-03 453 2.450000e+00 8.510574e-03 454 2.500000e+00 8.513573e-03 455 2.550000e+00 8.516667e-03 456 2.600000e+00 8.519873e-03 457 2.650000e+00 8.523208e-03 458 2.700000e+00 8.526691e-03 459 2.750000e+00 8.530343e-03 460 2.800000e+00 8.534183e-03 Index v-sweep -i(vc) -------------------------------------------------------------------------------- 461 2.850000e+00 8.538234e-03 462 2.900000e+00 8.542518e-03 463 2.950000e+00 8.547058e-03 464 3.000000e+00 8.551880e-03 465 3.050000e+00 8.557009e-03 466 3.100000e+00 8.562470e-03 467 3.150000e+00 8.568290e-03 468 3.200000e+00 8.574497e-03 469 3.250000e+00 8.581119e-03 470 3.300000e+00 8.588184e-03 471 3.350000e+00 8.595721e-03 472 3.400000e+00 8.603760e-03 473 3.450000e+00 8.612331e-03 474 3.500000e+00 8.621464e-03 475 3.550000e+00 8.631191e-03 476 3.600000e+00 8.641541e-03 477 3.650000e+00 8.652548e-03 478 3.700000e+00 8.664242e-03 479 3.750000e+00 8.676655e-03 480 3.800000e+00 8.689819e-03 481 3.850000e+00 8.703767e-03 482 3.900000e+00 8.718532e-03 483 3.950000e+00 8.734145e-03 484 4.000000e+00 8.750639e-03 485 4.050000e+00 8.768048e-03 486 4.100000e+00 8.786404e-03 487 4.150000e+00 8.805740e-03 488 4.200000e+00 8.826090e-03 489 4.250000e+00 8.847486e-03 490 4.300000e+00 8.869962e-03 491 4.350000e+00 8.893551e-03 492 4.400000e+00 8.918287e-03 493 4.450000e+00 8.944202e-03 494 4.500000e+00 8.971332e-03 495 4.550000e+00 8.999708e-03 496 4.600000e+00 9.029366e-03 497 4.650000e+00 9.060339e-03 498 4.700000e+00 9.092661e-03 499 4.750000e+00 9.126365e-03 500 4.800000e+00 9.161487e-03 501 4.850000e+00 9.198061e-03 502 4.900000e+00 9.236121e-03 503 4.950000e+00 9.275701e-03 504 5.000000e+00 9.316838e-03 505 0.000000e+00 -1.32424e-03 506 5.000000e-02 8.711061e-04 507 1.000000e-01 3.147055e-03 508 1.500000e-01 5.352020e-03 509 2.000000e-01 7.339342e-03 510 2.500000e-01 8.976337e-03 511 3.000000e-01 1.016910e-02 512 3.500000e-01 1.093140e-02 513 4.000000e-01 1.138927e-02 514 4.500000e-01 1.169491e-02 515 5.000000e-01 1.194852e-02 516 5.500000e-01 1.218634e-02 517 6.000000e-01 1.241589e-02 518 6.500000e-01 1.263810e-02 Index v-sweep -i(vc) -------------------------------------------------------------------------------- 519 7.000000e-01 1.285268e-02 520 7.500000e-01 1.305909e-02 521 8.000000e-01 1.325670e-02 522 8.500000e-01 1.344476e-02 523 9.000000e-01 1.362245e-02 524 9.500000e-01 1.378881e-02 525 1.000000e+00 1.394275e-02 526 1.050000e+00 1.408304e-02 527 1.100000e+00 1.420829e-02 528 1.150000e+00 1.431697e-02 529 1.200000e+00 1.440746e-02 530 1.250000e+00 1.447827e-02 531 1.300000e+00 1.452845e-02 532 1.350000e+00 1.455814e-02 533 1.400000e+00 1.457338e-02 534 1.450000e+00 1.458058e-02 535 1.500000e+00 1.458571e-02 536 1.550000e+00 1.459022e-02 537 1.600000e+00 1.459443e-02 538 1.650000e+00 1.459842e-02 539 1.700000e+00 1.460224e-02 540 1.750000e+00 1.460591e-02 541 1.800000e+00 1.460947e-02 542 1.850000e+00 1.461291e-02 543 1.900000e+00 1.461626e-02 544 1.950000e+00 1.461952e-02 545 2.000000e+00 1.462270e-02 546 2.050000e+00 1.462581e-02 547 2.100000e+00 1.462886e-02 548 2.150000e+00 1.463186e-02 549 2.200000e+00 1.463480e-02 550 2.250000e+00 1.463769e-02 551 2.300000e+00 1.464054e-02 552 2.350000e+00 1.464335e-02 553 2.400000e+00 1.464613e-02 554 2.450000e+00 1.464889e-02 555 2.500000e+00 1.465163e-02 556 2.550000e+00 1.465437e-02 557 2.600000e+00 1.465711e-02 558 2.650000e+00 1.465986e-02 559 2.700000e+00 1.466264e-02 560 2.750000e+00 1.466545e-02 561 2.800000e+00 1.466832e-02 562 2.850000e+00 1.467127e-02 563 2.900000e+00 1.467431e-02 564 2.950000e+00 1.467746e-02 565 3.000000e+00 1.468075e-02 566 3.050000e+00 1.468420e-02 567 3.100000e+00 1.468784e-02 568 3.150000e+00 1.469169e-02 569 3.200000e+00 1.469579e-02 570 3.250000e+00 1.470017e-02 571 3.300000e+00 1.470486e-02 572 3.350000e+00 1.470990e-02 573 3.400000e+00 1.471532e-02 574 3.450000e+00 1.472116e-02 575 3.500000e+00 1.472747e-02 576 3.550000e+00 1.473428e-02 Index v-sweep -i(vc) -------------------------------------------------------------------------------- 577 3.600000e+00 1.474163e-02 578 3.650000e+00 1.474957e-02 579 3.700000e+00 1.475814e-02 580 3.750000e+00 1.476739e-02 581 3.800000e+00 1.477736e-02 582 3.850000e+00 1.478809e-02 583 3.900000e+00 1.479964e-02 584 3.950000e+00 1.481205e-02 585 4.000000e+00 1.482536e-02 586 4.050000e+00 1.483964e-02 587 4.100000e+00 1.485491e-02 588 4.150000e+00 1.487123e-02 589 4.200000e+00 1.488866e-02 590 4.250000e+00 1.490723e-02 591 4.300000e+00 1.492699e-02 592 4.350000e+00 1.494799e-02 593 4.400000e+00 1.497027e-02 594 4.450000e+00 1.499389e-02 595 4.500000e+00 1.501889e-02 596 4.550000e+00 1.504531e-02 597 4.600000e+00 1.507320e-02 598 4.650000e+00 1.510261e-02 599 4.700000e+00 1.513357e-02 600 4.750000e+00 1.516613e-02 601 4.800000e+00 1.520033e-02 602 4.850000e+00 1.523622e-02 603 4.900000e+00 1.527383e-02 604 4.950000e+00 1.531320e-02 605 5.000000e+00 1.535438e-02 606 0.000000e+00 -1.81663e-03 607 5.000000e-02 6.700150e-04 608 1.000000e-01 3.253324e-03 609 1.500000e-01 5.819300e-03 610 2.000000e-01 8.266816e-03 611 2.500000e-01 1.048359e-02 612 3.000000e-01 1.234002e-02 613 3.500000e-01 1.375164e-02 614 4.000000e-01 1.469364e-02 615 4.500000e-01 1.527001e-02 616 5.000000e-01 1.564200e-02 617 5.500000e-01 1.593530e-02 618 6.000000e-01 1.620678e-02 619 6.500000e-01 1.647120e-02 620 7.000000e-01 1.673121e-02 621 7.500000e-01 1.698714e-02 622 8.000000e-01 1.723895e-02 623 8.500000e-01 1.748652e-02 624 9.000000e-01 1.772970e-02 625 9.500000e-01 1.796834e-02 626 1.000000e+00 1.820225e-02 627 1.050000e+00 1.843125e-02 628 1.100000e+00 1.865511e-02 629 1.150000e+00 1.887359e-02 630 1.200000e+00 1.908641e-02 631 1.250000e+00 1.929326e-02 632 1.300000e+00 1.949378e-02 633 1.350000e+00 1.968756e-02 634 1.400000e+00 1.987417e-02 Index v-sweep -i(vc) -------------------------------------------------------------------------------- 635 1.450000e+00 2.005305e-02 636 1.500000e+00 2.022363e-02 637 1.550000e+00 2.038519e-02 638 1.600000e+00 2.053696e-02 639 1.650000e+00 2.067800e-02 640 1.700000e+00 2.080727e-02 641 1.750000e+00 2.092356e-02 642 1.800000e+00 2.102552e-02 643 1.850000e+00 2.111169e-02 644 1.900000e+00 2.118062e-02 645 1.950000e+00 2.123123e-02 646 2.000000e+00 2.126304e-02 647 2.050000e+00 2.128047e-02 648 2.100000e+00 2.128870e-02 649 2.150000e+00 2.129418e-02 650 2.200000e+00 2.129888e-02 651 2.250000e+00 2.130323e-02 652 2.300000e+00 2.130735e-02 653 2.350000e+00 2.131128e-02 654 2.400000e+00 2.131505e-02 655 2.450000e+00 2.131870e-02 656 2.500000e+00 2.132223e-02 657 2.550000e+00 2.132566e-02 658 2.600000e+00 2.132900e-02 659 2.650000e+00 2.133225e-02 660 2.700000e+00 2.133544e-02 661 2.750000e+00 2.133856e-02 662 2.800000e+00 2.134161e-02 663 2.850000e+00 2.134461e-02 664 2.900000e+00 2.134757e-02 665 2.950000e+00 2.135048e-02 666 3.000000e+00 2.135335e-02 667 3.050000e+00 2.135619e-02 668 3.100000e+00 2.135902e-02 669 3.150000e+00 2.136183e-02 670 3.200000e+00 2.136464e-02 671 3.250000e+00 2.136746e-02 672 3.300000e+00 2.137030e-02 673 3.350000e+00 2.137319e-02 674 3.400000e+00 2.137613e-02 675 3.450000e+00 2.137916e-02 676 3.500000e+00 2.138229e-02 677 3.550000e+00 2.138554e-02 678 3.600000e+00 2.138895e-02 679 3.650000e+00 2.139255e-02 680 3.700000e+00 2.139637e-02 681 3.750000e+00 2.140044e-02 682 3.800000e+00 2.140480e-02 683 3.850000e+00 2.140950e-02 684 3.900000e+00 2.141457e-02 685 3.950000e+00 2.142006e-02 686 4.000000e+00 2.142601e-02 687 4.050000e+00 2.143248e-02 688 4.100000e+00 2.143951e-02 689 4.150000e+00 2.144716e-02 690 4.200000e+00 2.145548e-02 691 4.250000e+00 2.146452e-02 692 4.300000e+00 2.147435e-02 Index v-sweep -i(vc) -------------------------------------------------------------------------------- 693 4.350000e+00 2.148501e-02 694 4.400000e+00 2.149656e-02 695 4.450000e+00 2.150907e-02 696 4.500000e+00 2.152258e-02 697 4.550000e+00 2.153716e-02 698 4.600000e+00 2.155287e-02 699 4.650000e+00 2.156976e-02 700 4.700000e+00 2.158790e-02 701 4.750000e+00 2.160733e-02 702 4.800000e+00 2.162812e-02 703 4.850000e+00 2.165031e-02 704 4.900000e+00 2.167398e-02 705 4.950000e+00 2.169916e-02 706 5.000000e+00 2.172591e-02 VBIC Output Test -------------------------------------------------------------------------------- Index v-sweep -i(vb) -------------------------------------------------------------------------------- 0 0.000000e+00 2.463096e-04 1 5.000000e-02 6.409446e-05 2 1.000000e-01 1.218731e-05 3 1.500000e-01 2.335858e-06 4 2.000000e-01 8.262651e-07 5 2.500000e-01 6.057296e-07 6 3.000000e-01 5.737509e-07 7 3.500000e-01 5.691084e-07 8 4.000000e-01 5.684258e-07 9 4.500000e-01 5.683175e-07 10 5.000000e-01 5.682930e-07 11 5.500000e-01 5.682809e-07 12 6.000000e-01 5.682707e-07 13 6.500000e-01 5.682609e-07 14 7.000000e-01 5.682510e-07 15 7.500000e-01 5.682407e-07 16 8.000000e-01 5.682293e-07 17 8.500000e-01 5.682162e-07 18 9.000000e-01 5.682000e-07 19 9.500000e-01 5.681790e-07 20 1.000000e+00 5.681507e-07 21 1.050000e+00 5.681117e-07 22 1.100000e+00 5.680576e-07 23 1.150000e+00 5.679830e-07 24 1.200000e+00 5.678808e-07 25 1.250000e+00 5.677426e-07 26 1.300000e+00 5.675581e-07 27 1.350000e+00 5.673154e-07 28 1.400000e+00 5.670005e-07 29 1.450000e+00 5.665971e-07 30 1.500000e+00 5.660869e-07 31 1.550000e+00 5.654491e-07 32 1.600000e+00 5.646607e-07 33 1.650000e+00 5.636960e-07 34 1.700000e+00 5.625269e-07 35 1.750000e+00 5.611226e-07 36 1.800000e+00 5.594498e-07 37 1.850000e+00 5.574728e-07 38 1.900000e+00 5.551529e-07 39 1.950000e+00 5.524490e-07 40 2.000000e+00 5.493177e-07 41 2.050000e+00 5.457126e-07 42 2.100000e+00 5.415853e-07 43 2.150000e+00 5.368846e-07 44 2.200000e+00 5.315571e-07 45 2.250000e+00 5.255471e-07 46 2.300000e+00 5.187967e-07 47 2.350000e+00 5.112457e-07 48 2.400000e+00 5.028318e-07 49 2.450000e+00 4.934908e-07 50 2.500000e+00 4.831565e-07 51 2.550000e+00 4.717609e-07 52 2.600000e+00 4.592339e-07 53 2.650000e+00 4.455041e-07 54 2.700000e+00 4.304983e-07 Index v-sweep -i(vb) -------------------------------------------------------------------------------- 55 2.750000e+00 4.141416e-07 56 2.800000e+00 3.963579e-07 57 2.850000e+00 3.770693e-07 58 2.900000e+00 3.561971e-07 59 2.950000e+00 3.336608e-07 60 3.000000e+00 3.093790e-07 61 3.050000e+00 2.832692e-07 62 3.100000e+00 2.552476e-07 63 3.150000e+00 2.252298e-07 64 3.200000e+00 1.931299e-07 65 3.250000e+00 1.588617e-07 66 3.300000e+00 1.223377e-07 67 3.350000e+00 8.346998e-08 68 3.400000e+00 4.216958e-08 69 3.450000e+00 -1.65294e-09 70 3.500000e+00 -4.80877e-08 71 3.550000e+00 -9.72255e-08 72 3.600000e+00 -1.49158e-07 73 3.650000e+00 -2.03976e-07 74 3.700000e+00 -2.61773e-07 75 3.750000e+00 -3.22641e-07 76 3.800000e+00 -3.86673e-07 77 3.850000e+00 -4.53964e-07 78 3.900000e+00 -5.24607e-07 79 3.950000e+00 -5.98696e-07 80 4.000000e+00 -6.76327e-07 81 4.050000e+00 -7.57594e-07 82 4.100000e+00 -8.42594e-07 83 4.150000e+00 -9.31420e-07 84 4.200000e+00 -1.02417e-06 85 4.250000e+00 -1.12094e-06 86 4.300000e+00 -1.22183e-06 87 4.350000e+00 -1.32693e-06 88 4.400000e+00 -1.43634e-06 89 4.450000e+00 -1.55016e-06 90 4.500000e+00 -1.66848e-06 91 4.550000e+00 -1.79141e-06 92 4.600000e+00 -1.91904e-06 93 4.650000e+00 -2.05147e-06 94 4.700000e+00 -2.18880e-06 95 4.750000e+00 -2.33113e-06 96 4.800000e+00 -2.47856e-06 97 4.850000e+00 -2.63119e-06 98 4.900000e+00 -2.78912e-06 99 4.950000e+00 -2.95245e-06 100 5.000000e+00 -3.12128e-06 101 0.000000e+00 7.258447e-04 102 5.000000e-02 2.609579e-04 103 1.000000e-01 7.203906e-05 104 1.500000e-01 1.652363e-05 105 2.000000e-01 5.769433e-06 106 2.500000e-01 4.111341e-06 107 3.000000e-01 3.868238e-06 108 3.500000e-01 3.832641e-06 109 4.000000e-01 3.827165e-06 110 4.500000e-01 3.826065e-06 111 5.000000e-01 3.825610e-06 112 5.500000e-01 3.825256e-06 Index v-sweep -i(vb) -------------------------------------------------------------------------------- 113 6.000000e-01 3.824923e-06 114 6.500000e-01 3.824600e-06 115 7.000000e-01 3.824283e-06 116 7.500000e-01 3.823971e-06 117 8.000000e-01 3.823660e-06 118 8.500000e-01 3.823349e-06 119 9.000000e-01 3.823032e-06 120 9.500000e-01 3.822703e-06 121 1.000000e+00 3.822352e-06 122 1.050000e+00 3.821966e-06 123 1.100000e+00 3.821525e-06 124 1.150000e+00 3.821006e-06 125 1.200000e+00 3.820378e-06 126 1.250000e+00 3.819602e-06 127 1.300000e+00 3.818631e-06 128 1.350000e+00 3.817408e-06 129 1.400000e+00 3.815866e-06 130 1.450000e+00 3.813924e-06 131 1.500000e+00 3.811492e-06 132 1.550000e+00 3.808466e-06 133 1.600000e+00 3.804729e-06 134 1.650000e+00 3.800148e-06 135 1.700000e+00 3.794578e-06 136 1.750000e+00 3.787859e-06 137 1.800000e+00 3.779816e-06 138 1.850000e+00 3.770260e-06 139 1.900000e+00 3.758985e-06 140 1.950000e+00 3.745771e-06 141 2.000000e+00 3.730385e-06 142 2.050000e+00 3.712578e-06 143 2.100000e+00 3.692085e-06 144 2.150000e+00 3.668630e-06 145 2.200000e+00 3.641921e-06 146 2.250000e+00 3.611654e-06 147 2.300000e+00 3.577510e-06 148 2.350000e+00 3.539159e-06 149 2.400000e+00 3.496259e-06 150 2.450000e+00 3.448454e-06 151 2.500000e+00 3.395378e-06 152 2.550000e+00 3.336656e-06 153 2.600000e+00 3.271898e-06 154 2.650000e+00 3.200707e-06 155 2.700000e+00 3.122677e-06 156 2.750000e+00 3.037390e-06 157 2.800000e+00 2.944421e-06 158 2.850000e+00 2.843338e-06 159 2.900000e+00 2.733697e-06 160 2.950000e+00 2.615050e-06 161 3.000000e+00 2.486940e-06 162 3.050000e+00 2.348904e-06 163 3.100000e+00 2.200471e-06 164 3.150000e+00 2.041166e-06 165 3.200000e+00 1.870505e-06 166 3.250000e+00 1.688001e-06 167 3.300000e+00 1.493159e-06 168 3.350000e+00 1.285480e-06 169 3.400000e+00 1.064461e-06 170 3.450000e+00 8.295904e-07 Index v-sweep -i(vb) -------------------------------------------------------------------------------- 171 3.500000e+00 5.803551e-07 172 3.550000e+00 3.162357e-07 173 3.600000e+00 3.670834e-08 174 3.650000e+00 -2.58756e-07 175 3.700000e+00 -5.70689e-07 176 3.750000e+00 -8.99630e-07 177 3.800000e+00 -1.24612e-06 178 3.850000e+00 -1.61071e-06 179 3.900000e+00 -1.99394e-06 180 3.950000e+00 -2.39638e-06 181 4.000000e+00 -2.81859e-06 182 4.050000e+00 -3.26113e-06 183 4.100000e+00 -3.72458e-06 184 4.150000e+00 -4.20950e-06 185 4.200000e+00 -4.71649e-06 186 4.250000e+00 -5.24614e-06 187 4.300000e+00 -5.79903e-06 188 4.350000e+00 -6.37577e-06 189 4.400000e+00 -6.97697e-06 190 4.450000e+00 -7.60323e-06 191 4.500000e+00 -8.25519e-06 192 4.550000e+00 -8.93347e-06 193 4.600000e+00 -9.63871e-06 194 4.650000e+00 -1.03715e-05 195 4.700000e+00 -1.11327e-05 196 4.750000e+00 -1.19227e-05 197 4.800000e+00 -1.27423e-05 198 4.850000e+00 -1.35922e-05 199 4.900000e+00 -1.44731e-05 200 4.950000e+00 -1.53857e-05 201 5.000000e+00 -1.63307e-05 202 0.000000e+00 1.740943e-03 203 5.000000e-02 8.284244e-04 204 1.000000e-01 3.365795e-04 205 1.500000e-01 1.170881e-04 206 2.000000e-01 4.387160e-05 207 2.500000e-01 2.733915e-05 208 3.000000e-01 2.446640e-05 209 3.500000e-01 2.402947e-05 210 4.000000e-01 2.395864e-05 211 4.500000e-01 2.394277e-05 212 5.000000e-01 2.393518e-05 213 5.500000e-01 2.392902e-05 214 6.000000e-01 2.392323e-05 215 6.500000e-01 2.391765e-05 216 7.000000e-01 2.391224e-05 217 7.500000e-01 2.390697e-05 218 8.000000e-01 2.390181e-05 219 8.500000e-01 2.389677e-05 220 9.000000e-01 2.389182e-05 221 9.500000e-01 2.388694e-05 222 1.000000e+00 2.388211e-05 223 1.050000e+00 2.387729e-05 224 1.100000e+00 2.387246e-05 225 1.150000e+00 2.386754e-05 226 1.200000e+00 2.386246e-05 227 1.250000e+00 2.385713e-05 228 1.300000e+00 2.385141e-05 Index v-sweep -i(vb) -------------------------------------------------------------------------------- 229 1.350000e+00 2.384515e-05 230 1.400000e+00 2.383816e-05 231 1.450000e+00 2.383020e-05 232 1.500000e+00 2.382099e-05 233 1.550000e+00 2.381022e-05 234 1.600000e+00 2.379750e-05 235 1.650000e+00 2.378240e-05 236 1.700000e+00 2.376445e-05 237 1.750000e+00 2.374311e-05 238 1.800000e+00 2.371777e-05 239 1.850000e+00 2.368777e-05 240 1.900000e+00 2.365239e-05 241 1.950000e+00 2.361086e-05 242 2.000000e+00 2.356232e-05 243 2.050000e+00 2.350587e-05 244 2.100000e+00 2.344056e-05 245 2.150000e+00 2.336535e-05 246 2.200000e+00 2.327917e-05 247 2.250000e+00 2.318087e-05 248 2.300000e+00 2.306927e-05 249 2.350000e+00 2.294310e-05 250 2.400000e+00 2.280108e-05 251 2.450000e+00 2.264186e-05 252 2.500000e+00 2.246402e-05 253 2.550000e+00 2.226614e-05 254 2.600000e+00 2.204671e-05 255 2.650000e+00 2.180419e-05 256 2.700000e+00 2.153703e-05 257 2.750000e+00 2.124359e-05 258 2.800000e+00 2.092223e-05 259 2.850000e+00 2.057126e-05 260 2.900000e+00 2.018895e-05 261 2.950000e+00 1.977355e-05 262 3.000000e+00 1.932327e-05 263 3.050000e+00 1.883629e-05 264 3.100000e+00 1.831076e-05 265 3.150000e+00 1.774480e-05 266 3.200000e+00 1.713651e-05 267 3.250000e+00 1.648396e-05 268 3.300000e+00 1.578519e-05 269 3.350000e+00 1.503822e-05 270 3.400000e+00 1.424104e-05 271 3.450000e+00 1.339161e-05 272 3.500000e+00 1.248788e-05 273 3.550000e+00 1.152776e-05 274 3.600000e+00 1.050914e-05 275 3.650000e+00 9.429886e-06 276 3.700000e+00 8.287836e-06 277 3.750000e+00 7.080800e-06 278 3.800000e+00 5.806561e-06 279 3.850000e+00 4.462870e-06 280 3.900000e+00 3.047453e-06 281 3.950000e+00 1.558000e-06 282 4.000000e+00 -7.82896e-09 283 4.050000e+00 -1.65241e-06 284 4.100000e+00 -3.37816e-06 285 4.150000e+00 -5.18751e-06 286 4.200000e+00 -7.08298e-06 Index v-sweep -i(vb) -------------------------------------------------------------------------------- 287 4.250000e+00 -9.06707e-06 288 4.300000e+00 -1.11424e-05 289 4.350000e+00 -1.33115e-05 290 4.400000e+00 -1.55772e-05 291 4.450000e+00 -1.79421e-05 292 4.500000e+00 -2.04090e-05 293 4.550000e+00 -2.29808e-05 294 4.600000e+00 -2.56603e-05 295 4.650000e+00 -2.84506e-05 296 4.700000e+00 -3.13546e-05 297 4.750000e+00 -3.43755e-05 298 4.800000e+00 -3.75165e-05 299 4.850000e+00 -4.07809e-05 300 4.900000e+00 -4.41719e-05 301 4.950000e+00 -4.76931e-05 302 5.000000e+00 -5.13480e-05 303 0.000000e+00 3.444223e-03 304 5.000000e-02 2.112135e-03 305 1.000000e-01 1.194955e-03 306 1.500000e-01 6.249858e-04 307 2.000000e-01 3.250190e-04 308 2.500000e-01 1.981412e-04 309 3.000000e-01 1.548921e-04 310 3.500000e-01 1.385804e-04 311 4.000000e-01 1.303892e-04 312 4.500000e-01 1.263212e-04 313 5.000000e-01 1.248589e-04 314 5.500000e-01 1.245459e-04 315 6.000000e-01 1.244517e-04 316 6.500000e-01 1.243983e-04 317 7.000000e-01 1.243534e-04 318 7.500000e-01 1.243114e-04 319 8.000000e-01 1.242712e-04 320 8.500000e-01 1.242325e-04 321 9.000000e-01 1.241950e-04 322 9.500000e-01 1.241587e-04 323 1.000000e+00 1.241233e-04 324 1.050000e+00 1.240887e-04 325 1.100000e+00 1.240549e-04 326 1.150000e+00 1.240218e-04 327 1.200000e+00 1.239893e-04 328 1.250000e+00 1.239573e-04 329 1.300000e+00 1.239256e-04 330 1.350000e+00 1.238940e-04 331 1.400000e+00 1.238625e-04 332 1.450000e+00 1.238307e-04 333 1.500000e+00 1.237983e-04 334 1.550000e+00 1.237648e-04 335 1.600000e+00 1.237299e-04 336 1.650000e+00 1.236928e-04 337 1.700000e+00 1.236529e-04 338 1.750000e+00 1.236093e-04 339 1.800000e+00 1.235611e-04 340 1.850000e+00 1.235070e-04 341 1.900000e+00 1.234459e-04 342 1.950000e+00 1.233764e-04 343 2.000000e+00 1.232967e-04 344 2.050000e+00 1.232053e-04 Index v-sweep -i(vb) -------------------------------------------------------------------------------- 345 2.100000e+00 1.231001e-04 346 2.150000e+00 1.229790e-04 347 2.200000e+00 1.228400e-04 348 2.250000e+00 1.226804e-04 349 2.300000e+00 1.224978e-04 350 2.350000e+00 1.222894e-04 351 2.400000e+00 1.220523e-04 352 2.450000e+00 1.217836e-04 353 2.500000e+00 1.214799e-04 354 2.550000e+00 1.211379e-04 355 2.600000e+00 1.207542e-04 356 2.650000e+00 1.203252e-04 357 2.700000e+00 1.198471e-04 358 2.750000e+00 1.193161e-04 359 2.800000e+00 1.187281e-04 360 2.850000e+00 1.180792e-04 361 2.900000e+00 1.173651e-04 362 2.950000e+00 1.165815e-04 363 3.000000e+00 1.157240e-04 364 3.050000e+00 1.147882e-04 365 3.100000e+00 1.137695e-04 366 3.150000e+00 1.126633e-04 367 3.200000e+00 1.114648e-04 368 3.250000e+00 1.101693e-04 369 3.300000e+00 1.087719e-04 370 3.350000e+00 1.072677e-04 371 3.400000e+00 1.056516e-04 372 3.450000e+00 1.039186e-04 373 3.500000e+00 1.020637e-04 374 3.550000e+00 1.000816e-04 375 3.600000e+00 9.796712e-05 376 3.650000e+00 9.571495e-05 377 3.700000e+00 9.331975e-05 378 3.750000e+00 9.077611e-05 379 3.800000e+00 8.807856e-05 380 3.850000e+00 8.522158e-05 381 3.900000e+00 8.219958e-05 382 3.950000e+00 7.900691e-05 383 4.000000e+00 7.563784e-05 384 4.050000e+00 7.208659e-05 385 4.100000e+00 6.834729e-05 386 4.150000e+00 6.441401e-05 387 4.200000e+00 6.028073e-05 388 4.250000e+00 5.594134e-05 389 4.300000e+00 5.138966e-05 390 4.350000e+00 4.661941e-05 391 4.400000e+00 4.162418e-05 392 4.450000e+00 3.639751e-05 393 4.500000e+00 3.093279e-05 394 4.550000e+00 2.522331e-05 395 4.600000e+00 1.926223e-05 396 4.650000e+00 1.304259e-05 397 4.700000e+00 6.557271e-06 398 4.750000e+00 -2.00957e-07 399 4.800000e+00 -7.23950e-06 400 4.850000e+00 -1.45659e-05 401 4.900000e+00 -2.21879e-05 402 4.950000e+00 -3.01134e-05 Index v-sweep -i(vb) -------------------------------------------------------------------------------- 403 5.000000e+00 -3.83505e-05 404 0.000000e+00 5.774025e-03 405 5.000000e-02 4.230122e-03 406 1.000000e-01 3.014145e-03 407 1.500000e-01 2.076428e-03 408 2.000000e-01 1.405804e-03 409 2.500000e-01 9.883110e-04 410 3.000000e-01 7.700755e-04 411 3.500000e-01 6.728677e-04 412 4.000000e-01 6.270260e-04 413 4.500000e-01 5.958865e-04 414 5.000000e-01 5.694908e-04 415 5.500000e-01 5.462222e-04 416 6.000000e-01 5.259914e-04 417 6.500000e-01 5.089844e-04 418 7.000000e-01 4.954405e-04 419 7.500000e-01 4.855695e-04 420 8.000000e-01 4.795216e-04 421 8.500000e-01 4.765981e-04 422 9.000000e-01 4.756053e-04 423 9.500000e-01 4.752941e-04 424 1.000000e+00 4.751059e-04 425 1.050000e+00 4.749467e-04 426 1.100000e+00 4.747984e-04 427 1.150000e+00 4.746571e-04 428 1.200000e+00 4.745215e-04 429 1.250000e+00 4.743907e-04 430 1.300000e+00 4.742639e-04 431 1.350000e+00 4.741409e-04 432 1.400000e+00 4.740210e-04 433 1.450000e+00 4.739041e-04 434 1.500000e+00 4.737898e-04 435 1.550000e+00 4.736778e-04 436 1.600000e+00 4.735679e-04 437 1.650000e+00 4.734597e-04 438 1.700000e+00 4.733529e-04 439 1.750000e+00 4.732472e-04 440 1.800000e+00 4.731419e-04 441 1.850000e+00 4.730367e-04 442 1.900000e+00 4.729306e-04 443 1.950000e+00 4.728229e-04 444 2.000000e+00 4.727124e-04 445 2.050000e+00 4.725979e-04 446 2.100000e+00 4.724779e-04 447 2.150000e+00 4.723506e-04 448 2.200000e+00 4.722139e-04 449 2.250000e+00 4.720657e-04 450 2.300000e+00 4.719034e-04 451 2.350000e+00 4.717240e-04 452 2.400000e+00 4.715243e-04 453 2.450000e+00 4.713009e-04 454 2.500000e+00 4.710500e-04 455 2.550000e+00 4.707674e-04 456 2.600000e+00 4.704487e-04 457 2.650000e+00 4.700891e-04 458 2.700000e+00 4.696837e-04 459 2.750000e+00 4.692270e-04 460 2.800000e+00 4.687134e-04 Index v-sweep -i(vb) -------------------------------------------------------------------------------- 461 2.850000e+00 4.681371e-04 462 2.900000e+00 4.674919e-04 463 2.950000e+00 4.667713e-04 464 3.000000e+00 4.659687e-04 465 3.050000e+00 4.650773e-04 466 3.100000e+00 4.640898e-04 467 3.150000e+00 4.629991e-04 468 3.200000e+00 4.617976e-04 469 3.250000e+00 4.604777e-04 470 3.300000e+00 4.590315e-04 471 3.350000e+00 4.574512e-04 472 3.400000e+00 4.557284e-04 473 3.450000e+00 4.538552e-04 474 3.500000e+00 4.518230e-04 475 3.550000e+00 4.496235e-04 476 3.600000e+00 4.472481e-04 477 3.650000e+00 4.446883e-04 478 3.700000e+00 4.419353e-04 479 3.750000e+00 4.389804e-04 480 3.800000e+00 4.358147e-04 481 3.850000e+00 4.324295e-04 482 3.900000e+00 4.288159e-04 483 3.950000e+00 4.249648e-04 484 4.000000e+00 4.208674e-04 485 4.050000e+00 4.165145e-04 486 4.100000e+00 4.118973e-04 487 4.150000e+00 4.070066e-04 488 4.200000e+00 4.018333e-04 489 4.250000e+00 3.963685e-04 490 4.300000e+00 3.906028e-04 491 4.350000e+00 3.845273e-04 492 4.400000e+00 3.781327e-04 493 4.450000e+00 3.714099e-04 494 4.500000e+00 3.643497e-04 495 4.550000e+00 3.569428e-04 496 4.600000e+00 3.491800e-04 497 4.650000e+00 3.410521e-04 498 4.700000e+00 3.325496e-04 499 4.750000e+00 3.236633e-04 500 4.800000e+00 3.143839e-04 501 4.850000e+00 3.047018e-04 502 4.900000e+00 2.946077e-04 503 4.950000e+00 2.840921e-04 504 5.000000e+00 2.731454e-04 505 0.000000e+00 8.578039e-03 506 5.000000e-02 6.983028e-03 507 1.000000e-01 5.648473e-03 508 1.500000e-01 4.514638e-03 509 2.000000e-01 3.578508e-03 510 2.500000e-01 2.843112e-03 511 3.000000e-01 2.329399e-03 512 3.500000e-01 2.021602e-03 513 4.000000e-01 1.862416e-03 514 4.500000e-01 1.782892e-03 515 5.000000e-01 1.732026e-03 516 5.500000e-01 1.688351e-03 517 6.000000e-01 1.647181e-03 518 6.500000e-01 1.607738e-03 Index v-sweep -i(vb) -------------------------------------------------------------------------------- 519 7.000000e-01 1.569947e-03 520 7.500000e-01 1.533854e-03 521 8.000000e-01 1.499541e-03 522 8.500000e-01 1.467101e-03 523 9.000000e-01 1.436648e-03 524 9.500000e-01 1.408313e-03 525 1.000000e+00 1.382249e-03 526 1.050000e+00 1.358636e-03 527 1.100000e+00 1.337677e-03 528 1.150000e+00 1.319601e-03 529 1.200000e+00 1.304655e-03 530 1.250000e+00 1.293071e-03 531 1.300000e+00 1.284997e-03 532 1.350000e+00 1.280414e-03 533 1.400000e+00 1.278303e-03 534 1.450000e+00 1.277560e-03 535 1.500000e+00 1.277142e-03 536 1.550000e+00 1.276800e-03 537 1.600000e+00 1.276487e-03 538 1.650000e+00 1.276190e-03 539 1.700000e+00 1.275906e-03 540 1.750000e+00 1.275632e-03 541 1.800000e+00 1.275368e-03 542 1.850000e+00 1.275112e-03 543 1.900000e+00 1.274863e-03 544 1.950000e+00 1.274621e-03 545 2.000000e+00 1.274384e-03 546 2.050000e+00 1.274153e-03 547 2.100000e+00 1.273926e-03 548 2.150000e+00 1.273703e-03 549 2.200000e+00 1.273484e-03 550 2.250000e+00 1.273268e-03 551 2.300000e+00 1.273054e-03 552 2.350000e+00 1.272842e-03 553 2.400000e+00 1.272630e-03 554 2.450000e+00 1.272417e-03 555 2.500000e+00 1.272202e-03 556 2.550000e+00 1.271983e-03 557 2.600000e+00 1.271759e-03 558 2.650000e+00 1.271526e-03 559 2.700000e+00 1.271282e-03 560 2.750000e+00 1.271024e-03 561 2.800000e+00 1.270748e-03 562 2.850000e+00 1.270451e-03 563 2.900000e+00 1.270128e-03 564 2.950000e+00 1.269774e-03 565 3.000000e+00 1.269384e-03 566 3.050000e+00 1.268952e-03 567 3.100000e+00 1.268473e-03 568 3.150000e+00 1.267939e-03 569 3.200000e+00 1.267343e-03 570 3.250000e+00 1.266678e-03 571 3.300000e+00 1.265937e-03 572 3.350000e+00 1.265111e-03 573 3.400000e+00 1.264191e-03 574 3.450000e+00 1.263169e-03 575 3.500000e+00 1.262034e-03 576 3.550000e+00 1.260779e-03 Index v-sweep -i(vb) -------------------------------------------------------------------------------- 577 3.600000e+00 1.259393e-03 578 3.650000e+00 1.257865e-03 579 3.700000e+00 1.256186e-03 580 3.750000e+00 1.254345e-03 581 3.800000e+00 1.252331e-03 582 3.850000e+00 1.250134e-03 583 3.900000e+00 1.247743e-03 584 3.950000e+00 1.245147e-03 585 4.000000e+00 1.242334e-03 586 4.050000e+00 1.239294e-03 587 4.100000e+00 1.236016e-03 588 4.150000e+00 1.232487e-03 589 4.200000e+00 1.228697e-03 590 4.250000e+00 1.224636e-03 591 4.300000e+00 1.220291e-03 592 4.350000e+00 1.215652e-03 593 4.400000e+00 1.210708e-03 594 4.450000e+00 1.205447e-03 595 4.500000e+00 1.199860e-03 596 4.550000e+00 1.193936e-03 597 4.600000e+00 1.187664e-03 598 4.650000e+00 1.181033e-03 599 4.700000e+00 1.174034e-03 600 4.750000e+00 1.166656e-03 601 4.800000e+00 1.158890e-03 602 4.850000e+00 1.150725e-03 603 4.900000e+00 1.142153e-03 604 4.950000e+00 1.133163e-03 605 5.000000e+00 1.123747e-03 606 0.000000e+00 1.172460e-02 607 5.000000e-02 1.014950e-02 608 1.000000e-01 8.786389e-03 609 1.500000e-01 7.579108e-03 610 2.000000e-01 6.511864e-03 611 2.500000e-01 5.586141e-03 612 3.000000e-01 4.831320e-03 613 3.500000e-01 4.270284e-03 614 4.000000e-01 3.910522e-03 615 4.500000e-01 3.710919e-03 616 5.000000e-01 3.607193e-03 617 5.500000e-01 3.543931e-03 618 6.000000e-01 3.491912e-03 619 6.500000e-01 3.442681e-03 620 7.000000e-01 3.394671e-03 621 7.500000e-01 3.347629e-03 622 8.000000e-01 3.301523e-03 623 8.500000e-01 3.256361e-03 624 9.000000e-01 3.212158e-03 625 9.500000e-01 3.168932e-03 626 1.000000e+00 3.126707e-03 627 1.050000e+00 3.085507e-03 628 1.100000e+00 3.045363e-03 629 1.150000e+00 3.006309e-03 630 1.200000e+00 2.968385e-03 631 1.250000e+00 2.931637e-03 632 1.300000e+00 2.896118e-03 633 1.350000e+00 2.861889e-03 634 1.400000e+00 2.829022e-03 Index v-sweep -i(vb) -------------------------------------------------------------------------------- 635 1.450000e+00 2.797599e-03 636 1.500000e+00 2.767714e-03 637 1.550000e+00 2.739481e-03 638 1.600000e+00 2.713027e-03 639 1.650000e+00 2.688503e-03 640 1.700000e+00 2.666082e-03 641 1.750000e+00 2.645966e-03 642 1.800000e+00 2.628380e-03 643 1.850000e+00 2.613572e-03 644 1.900000e+00 2.601789e-03 645 1.950000e+00 2.593221e-03 646 2.000000e+00 2.587957e-03 647 2.050000e+00 2.585229e-03 648 2.100000e+00 2.584126e-03 649 2.150000e+00 2.583492e-03 650 2.200000e+00 2.582973e-03 651 2.250000e+00 2.582498e-03 652 2.300000e+00 2.582049e-03 653 2.350000e+00 2.581621e-03 654 2.400000e+00 2.581209e-03 655 2.450000e+00 2.580812e-03 656 2.500000e+00 2.580427e-03 657 2.550000e+00 2.580053e-03 658 2.600000e+00 2.579690e-03 659 2.650000e+00 2.579335e-03 660 2.700000e+00 2.578988e-03 661 2.750000e+00 2.578648e-03 662 2.800000e+00 2.578315e-03 663 2.850000e+00 2.577987e-03 664 2.900000e+00 2.577664e-03 665 2.950000e+00 2.577346e-03 666 3.000000e+00 2.577030e-03 667 3.050000e+00 2.576716e-03 668 3.100000e+00 2.576403e-03 669 3.150000e+00 2.576088e-03 670 3.200000e+00 2.575770e-03 671 3.250000e+00 2.575445e-03 672 3.300000e+00 2.575113e-03 673 3.350000e+00 2.574768e-03 674 3.400000e+00 2.574408e-03 675 3.450000e+00 2.574027e-03 676 3.500000e+00 2.573623e-03 677 3.550000e+00 2.573188e-03 678 3.600000e+00 2.572718e-03 679 3.650000e+00 2.572206e-03 680 3.700000e+00 2.571646e-03 681 3.750000e+00 2.571029e-03 682 3.800000e+00 2.570348e-03 683 3.850000e+00 2.569595e-03 684 3.900000e+00 2.568760e-03 685 3.950000e+00 2.567835e-03 686 4.000000e+00 2.566809e-03 687 4.050000e+00 2.565673e-03 688 4.100000e+00 2.564415e-03 689 4.150000e+00 2.563025e-03 690 4.200000e+00 2.561491e-03 691 4.250000e+00 2.559803e-03 692 4.300000e+00 2.557948e-03 Index v-sweep -i(vb) -------------------------------------------------------------------------------- 693 4.350000e+00 2.555914e-03 694 4.400000e+00 2.553690e-03 695 4.450000e+00 2.551263e-03 696 4.500000e+00 2.548620e-03 697 4.550000e+00 2.545751e-03 698 4.600000e+00 2.542642e-03 699 4.650000e+00 2.539281e-03 700 4.700000e+00 2.535656e-03 701 4.750000e+00 2.531755e-03 702 4.800000e+00 2.527566e-03 703 4.850000e+00 2.523078e-03 704 4.900000e+00 2.518279e-03 705 4.950000e+00 2.513156e-03 706 5.000000e+00 2.507701e-03 tmpk8ny_4pz/tests/vbic/FG.cir0000644000175000017500000000075413546075722016246 0ustar carstencarstenVBIC Gummel Test V1 Q1_E 0 5.0 VC Q1_C 0 0.0 VB Q1_B 0 0.0 Q1 Q1_C Q1_B Q1_E P1 .DC V1 0.2 1.2 10m .OPTIONS GMIN=1e-13 NOACCT .print dc abs(i(vc)) abs(i(vb)) .MODEL P1 PNP LEVEL=4 + IS=1e-16 IBEI=1e-18 IBEN=5e-15 IBCI=2e-17 IBCN=5e-15 ISP=1e-15 RCX=10 + RCI=60 RBX=10 RBI=40 RE=2 RS=20 RBP=40 VEF=10 VER=4 IKF=2e-3 ITF=8e-2 + XTF=20 IKR=2e-4 IKP=2e-4 CJE=1e-13 CJC=2e-14 CJEP=1e-13 CJCP=4e-13 VO=2 + GAMM=2e-11 HRCF=2 QCO=1e-12 AVC1=2 AVC2=15 TF=10e-12 TR=100e-12 TD=2e-11 RTH=300 .END tmpk8ny_4pz/tests/vbic/noise_scale_test.out0000644000175000017500000001047713546075722021332 0ustar carstencarsten No. of Data Rows : 126 Circuit: VBIC Noise Scale Test Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 VBIC Noise Scale Test -------------------------------------------------------------------------------- Index frequency v(inoise_spectr -------------------------------------------------------------------------------- 0 1.000000e+03 6.606383e-14 1 1.096478e+03 5.075630e-14 2 1.202264e+03 3.904714e-14 3 1.318257e+03 3.008379e-14 4 1.445440e+03 2.321679e-14 5 1.584893e+03 1.795125e-14 6 1.737801e+03 1.390987e-14 7 1.905461e+03 1.080490e-14 8 2.089296e+03 8.416738e-15 9 2.290868e+03 6.577742e-15 10 2.511886e+03 5.159834e-15 11 2.754229e+03 4.065107e-15 12 3.019952e+03 3.218671e-15 13 3.311311e+03 2.563196e-15 14 3.630781e+03 2.054758e-15 15 3.981072e+03 1.659680e-15 16 4.365158e+03 1.352114e-15 17 4.786301e+03 1.112200e-15 18 5.248075e+03 9.246675e-16 19 5.754399e+03 7.777558e-16 20 6.309573e+03 6.623996e-16 21 6.918310e+03 5.716009e-16 22 7.585776e+03 4.999503e-16 23 8.317638e+03 4.432598e-16 24 9.120108e+03 3.982822e-16 25 1.000000e+04 3.624956e-16 26 1.096478e+04 3.339377e-16 27 1.202264e+04 3.110787e-16 28 1.318257e+04 2.927242e-16 29 1.445440e+04 2.779390e-16 30 1.584893e+04 2.659898e-16 31 1.737801e+04 2.563004e-16 32 1.905461e+04 2.484164e-16 33 2.089296e+04 2.419792e-16 34 2.290868e+04 2.367050e-16 35 2.511886e+04 2.323682e-16 36 2.754229e+04 2.287896e-16 37 3.019952e+04 2.258260e-16 38 3.311311e+04 2.233628e-16 39 3.630781e+04 2.213082e-16 40 3.981072e+04 2.195883e-16 41 4.365158e+04 2.181434e-16 42 4.786301e+04 2.169251e-16 43 5.248075e+04 2.158944e-16 44 5.754399e+04 2.150193e-16 45 6.309573e+04 2.142738e-16 46 6.918310e+04 2.136365e-16 47 7.585776e+04 2.130898e-16 48 8.317638e+04 2.126195e-16 49 9.120108e+04 2.122135e-16 50 1.000000e+05 2.118620e-16 51 1.096478e+05 2.115567e-16 52 1.202264e+05 2.112908e-16 53 1.318257e+05 2.110585e-16 54 1.445440e+05 2.108550e-16 Index frequency v(inoise_spectr -------------------------------------------------------------------------------- 55 1.584893e+05 2.106764e-16 56 1.737801e+05 2.105191e-16 57 1.905461e+05 2.103803e-16 58 2.089296e+05 2.102574e-16 59 2.290868e+05 2.101485e-16 60 2.511886e+05 2.100517e-16 61 2.754229e+05 2.099655e-16 62 3.019952e+05 2.098886e-16 63 3.311311e+05 2.098197e-16 64 3.630781e+05 2.097580e-16 65 3.981072e+05 2.097025e-16 66 4.365158e+05 2.096524e-16 67 4.786301e+05 2.096072e-16 68 5.248075e+05 2.095662e-16 69 5.754399e+05 2.095288e-16 70 6.309573e+05 2.094946e-16 71 6.918310e+05 2.094632e-16 72 7.585776e+05 2.094340e-16 73 8.317638e+05 2.094068e-16 74 9.120108e+05 2.093811e-16 75 1.000000e+06 2.093566e-16 76 1.096478e+06 2.093328e-16 77 1.202264e+06 2.093094e-16 78 1.318257e+06 2.092859e-16 79 1.445440e+06 2.092620e-16 80 1.584893e+06 2.092371e-16 81 1.737801e+06 2.092106e-16 82 1.905461e+06 2.091819e-16 83 2.089296e+06 2.091502e-16 84 2.290868e+06 2.091148e-16 85 2.511886e+06 2.090746e-16 86 2.754229e+06 2.090284e-16 87 3.019952e+06 2.089748e-16 88 3.311311e+06 2.089122e-16 89 3.630781e+06 2.088386e-16 90 3.981072e+06 2.087516e-16 91 4.365158e+06 2.086485e-16 92 4.786301e+06 2.085259e-16 93 5.248075e+06 2.083798e-16 94 5.754399e+06 2.082055e-16 95 6.309573e+06 2.079973e-16 96 6.918310e+06 2.077484e-16 97 7.585776e+06 2.074510e-16 98 8.317638e+06 2.070954e-16 99 9.120108e+06 2.066704e-16 100 1.000000e+07 2.061628e-16 101 1.096478e+07 2.055571e-16 102 1.202264e+07 2.048350e-16 103 1.318257e+07 2.039754e-16 104 1.445440e+07 2.029538e-16 105 1.584893e+07 2.017424e-16 106 1.737801e+07 2.003094e-16 107 1.905461e+07 1.986194e-16 108 2.089296e+07 1.966335e-16 109 2.290868e+07 1.943096e-16 110 2.511886e+07 1.916037e-16 111 2.754229e+07 1.884710e-16 112 3.019952e+07 1.848682e-16 Index frequency v(inoise_spectr -------------------------------------------------------------------------------- 113 3.311311e+07 1.807564e-16 114 3.630781e+07 1.761043e-16 115 3.981072e+07 1.708924e-16 116 4.365158e+07 1.651171e-16 117 4.786301e+07 1.587944e-16 118 5.248075e+07 1.519630e-16 119 5.754399e+07 1.446857e-16 120 6.309573e+07 1.370480e-16 121 6.918310e+07 1.291552e-16 122 7.585776e+07 1.211260e-16 123 8.317638e+07 1.130848e-16 124 9.120108e+07 1.051532e-16 125 1.000000e+08 9.744108e-17 tmpk8ny_4pz/tests/vbic/diffamp.out0000644000175000017500000006711013546075722017411 0ustar carstencarsten Circuit: vbic diffamp test Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 101 No. of Data Rows : 1 No. of Data Rows : 111 Node Voltage ---- ------- ---- ------- q10#collCI 1.010381e+00 q10#substrate 2.021916e-11 q11#collCI 6.578599e-01 q11#substrate 1.318851e-11 q12#collCI 1.942528e+00 q12#substrate 1.943144e-11 q13#collCI 2.619850e+00 q13#substrate 2.620494e-11 q1#collCI 2.614371e+00 q1#substrate 5.229312e-11 q2#collCI 2.614371e+00 q2#substrate 5.229312e-11 q3#collCI 1.576554e+00 q3#substrate 1.575451e+00 q4#collCI 1.576554e+00 q4#substrate 1.575451e+00 q5#collCI 2.616153e+00 q5#substrate 2.614704e+00 q6#collCI 2.616153e+00 q6#substrate 2.614704e+00 q7#collCI 2.622050e+00 q7#substrate 2.620602e+00 q8#collCI 2.623017e+00 q8#substrate 2.621623e+00 q9#collCI 1.944640e+00 q9#substrate 1.943247e+00 q8_b 2.621623e+00 e1_p 2.402856e-11 q6_c 2.614704e+00 q5_c 2.614704e+00 q5_b 2.620602e+00 q9_b 1.943247e+00 i1_n 6.585156e-01 q1_e 1.011054e+00 q4_c 1.575451e+00 q3_c 1.575451e+00 r3_n 1.649946e+00 v2_p 1.649946e+00 vcc 3.300000e+00 Source Current ------ ------- v1#branch -1.74308e-03 v2#branch -5.40529e-08 e1#branch -2.40286e-20 Resistor models (Simple linear resistor) model R rsh 0 narrow 0 short 0 tc1 0 tc2 0 defw 1e-05 kf 0 af 0 VBIC models (Vertical Bipolar Inter-Company Model) model p1 n1 type pnp npn tnom 27 27 rcx 10 10 rci 60 60 vo 2 2 gamm 2e-11 2e-11 hrcf 2 2 rbx 10 10 rbi 40 40 re 2 2 rs 20 20 rbp 40 40 is 1e-16 1e-16 nf 1 1 nr 1 1 fc 0.9 0.9 cbeo 0 0 cje 1e-13 1e-13 pe 0.75 0.75 me 0.33 0.33 aje -0.5 -0.5 cbco 0 0 cjc 2e-14 2e-14 qco 1e-12 1e-12 cjep 1e-13 1e-13 pc 0.75 0.75 mc 0.33 0.33 ajc -0.5 -0.5 cjcp 4e-13 4e-13 ps 0.75 0.75 ms 0.33 0.33 ajs -0.5 -0.5 ibei 1e-18 1e-18 wbe 1 1 nei 1 1 iben 5e-15 5e-15 nen 2 2 ibci 2e-17 2e-17 nci 1 1 ibcn 5e-15 5e-15 ncn 2 2 avc1 2 2 avc2 15 15 isp 1e-15 1e-15 wsp 1 1 nfp 1 1 ibeip 0 0 ibenp 0 0 ibcip 0 0 ncip 1 1 ibcnp 0 0 ncnp 2 2 vef 10 10 ver 4 4 ikf 0.002 0.002 ikr 0.0002 0.0002 ikp 0.0002 0.0002 tf 1e-11 1e-11 qtf 0 0 xtf 20 20 vtf 0 0 itf 0.08 0.08 tr 1e-10 1e-10 td 2e-11 2e-11 kfn 0 0 afn 1 1 bfn 1 1 xre 0 0 xrb 0 0 xrbi 0 0 xrc 0 0 xrci 0 0 xrs 0 0 xvo 0 0 ea 1.12 1.12 eaie 1.12 1.12 eaic 1.12 1.12 eais 1.12 1.12 eane 1.12 1.12 eanc 1.12 1.12 eans 1.12 1.12 xis 3 3 xii 3 3 xin 3 3 tnf 0 0 tavc 0 0 rth 300 300 cth 0 0 vrt 0 0 art 0.1 0.1 ccso 0 0 qbm 0 0 nkf 0.5 0.5 xikf 0 0 xrcx 0 0 xrbx 0 0 xrbp 0 0 isrr 1 1 xisr 0 0 dear 0 0 eap 1.12 1.12 vbbe 0 0 nbbe 1 1 ibbe 1e-06 1e-06 tvbbe1 0 0 tvbbe2 0 0 tnbbe 0 0 ebbe 0 0 dtemp 0 0 vers 1.2 1.2 vref 0 0 Isource: Independent current source device i1 dc 1e-05 acmag 0 pulse - sine - sin - exp - pwl - sffm - am - v -2.64142 p 2.64142e-05 Resistor: Simple linear resistor device rh r4 r3 model R R R resistance 1e+09 1000 1000 ac 1e+09 1000 1000 dtemp 0 0 0 noisy 1 1 1 i 9.48543e-11 0.00164991 0.00165009 p 8.99735e-12 0.00272221 0.00272279 Resistor: Simple linear resistor device r2 r1 model R R resistance 100000 100000 ac 100000 100000 dtemp 0 0 noisy 1 1 i 1.52842e-05 1.62327e-05 p 2.33606e-05 2.63501e-05 VBIC: Vertical Bipolar Inter-Company Model device q9 q8 q7 model p1 p1 p1 vbe 0.678348 0.678348 0.679406 vbc 0.00138433 0.00138433 0.00144097 ic 1.99274e-05 1.99274e-05 2.07423e-05 ib 2.49337e-07 2.49337e-07 2.58995e-07 ie -2.01767e-05 -2.01767e-05 -2.10013e-05 is -1.72796e-12 -1.72801e-12 -5.37674e-12 gm 0.000755557 0.000755557 0.000786168 go -1.60559e-06 -1.60559e-06 -1.66941e-06 gpi 5.55436e-05 5.55436e-05 5.62072e-05 gmu 4.10087e-06 4.10087e-06 4.10097e-06 gx 0.0307981 0.0307981 0.0308228 cbe 2.24502e-13 2.24502e-13 2.25802e-13 cbex 0 0 0 cbc 2.00122e-14 2.00122e-14 2.00127e-14 cbcx 3.89454e-22 3.89454e-22 3.89571e-22 cbep 1.00009e-13 1.00009e-13 1.00009e-13 cbcp 4.00035e-13 4.00035e-13 4.00037e-13 p 1.36592e-05 1.36592e-05 1.42385e-05 VBIC: Vertical Bipolar Inter-Company Model device q6 q5 q4 model p1 p1 p1 vbe 0.679406 0.679406 0.671179 vbc -0.0046728 -0.00417458 -0.413711 ic 2.07505e-05 2.07541e-05 1.5604e-05 ib 2.70491e-07 2.45601e-07 5.94526e-07 ie -2.10114e-05 -2.10109e-05 -1.58787e-05 is -1.20867e-11 -4.21673e-12 1.26423e-10 gm 0.000786538 0.000786519 0.000594898 go -1.66655e-06 -1.6668e-06 -1.13386e-06 gpi 5.62078e-05 5.6208e-05 5.15524e-05 gmu 4.08998e-06 4.09087e-06 3.54571e-06 gx 0.0308077 0.0308089 0.029688 cbe 2.25806e-13 2.25806e-13 2.16268e-13 cbex 0 0 0 cbc 1.9959e-14 1.99634e-14 1.7301e-14 cbcx 3.07555e-22 3.13534e-22 4.21718e-29 cbep 9.97413e-14 9.9763e-14 8.6482e-14 cbcp 4.00036e-13 4.00037e-13 4.00025e-13 p 1.43722e-05 1.43615e-05 1.71659e-05 VBIC: Vertical Bipolar Inter-Company Model device q3 q2 q1 model p1 n1 n1 vbe 0.671689 0.639269 0.639262 vbc -0.318814 -0.964177 -0.964683 ic 1.59257e-05 4.83217e-06 4.81776e-06 ib -1.98661e-07 -1.28929e-08 1.90204e-07 ie -1.60341e-05 -4.8265e-06 -4.94959e-06 is -1.85939e-10 2.2784e-08 -2.81806e-08 gm 0.000602367 0.000184325 0.000184281 go -1.17213e-06 -3.27084e-07 -3.26987e-07 gpi 5.18041e-05 4.102e-05 4.10185e-05 gmu 3.64642e-06 3.12218e-06 3.12188e-06 gx 0.0299053 0.0280441 0.028043 cbe 2.16794e-13 1.89845e-13 1.8984e-13 cbex 0 0 0 cbc 1.77935e-14 1.52252e-14 1.52237e-14 cbcx 1.65231e-27 2.47219e-38 2.42433e-38 cbep 8.89419e-14 7.61216e-14 7.61142e-14 cbcp 4.00031e-13 2.43754e-13 2.43742e-13 p 1.58473e-05 7.80877e-06 7.90711e-06 VBIC: Vertical Bipolar Inter-Company Model device q13 q12 q11 model n1 n1 n1 vbe 0.658555 0.658555 0.658557 vbc -1.96121 -1.28391 0.000652342 ic 2.15197e-05 2.0581e-05 9.39039e-06 ib 1.80371e-07 2.27861e-07 1.16442e-07 ie -2.16994e-05 -2.08068e-05 -9.50683e-06 is -1.56164e-09 -6.32007e-09 8.49745e-10 gm 0.00081573 0.000782531 0.000357808 go -1.31356e-06 -1.32719e-06 -7.69309e-07 gpi 9.26402e-05 9.25721e-05 4.62181e-05 gmu 5.48806e-06 5.92463e-06 4.09954e-06 gx 0.0532015 0.0555096 0.030407 cbe 4.08671e-13 4.08339e-13 2.03836e-13 cbex 0 0 0 cbc 2.6175e-14 2.87794e-14 2.00057e-14 cbcx 8.85305e-55 2.08978e-43 3.87955e-22 cbep 1.30865e-13 1.43882e-13 1.00004e-13 cbcp 4.87219e-13 5.24659e-13 3.24894e-13 p 5.64991e-05 4.01387e-05 6.25522e-06 VBIC: Vertical Bipolar Inter-Company Model device q10 model n1 vbe 0.658557 vbc -0.35138 ic 9.65603e-06 ib 8.40913e-08 ie -9.76707e-06 is 9.31075e-08 gm 0.000367535 go -7.15416e-07 gpi 4.6238e-05 gmu 3.61044e-06 gx 0.029587 cbe 2.03933e-13 cbex 0 cbc 1.76182e-14 cbcx 4.75995e-28 cbep 8.80758e-14 cbcp 3.01834e-13 p 9.91919e-06 VCVS: Voltage controlled voltage source device e1 i -9.48543e-11 v 0.0948543 p -8.99735e-12 Vsource: Independent voltage source device v2 v1 dc 0 3.3 acmag 1 0 pulse 0 - 0.01 1e+07 0 0 sine 0 - 0.01 1e+07 0 0 sin 0 - 0.01 1e+07 0 0 exp 0 - 0.01 1e+07 0 0 pwl 0 - 0.01 1e+07 0 0 sffm 0 - 0.01 1e+07 0 0 am 0 - 0.01 1e+07 0 0 i -1.90204e-07 -0.00174329 p 0 0.00575285 vbic diffamp test AC Analysis Sun Mar 8 16:34:50 2009 -------------------------------------------------------------------------------- Index frequency v(e1_p) -------------------------------------------------------------------------------- 0 1.000000e+05 -1.78122e+01, 1.371675e-01 1 1.096478e+05 -1.78120e+01, 1.503998e-01 2 1.202264e+05 -1.78117e+01, 1.649082e-01 3 1.318257e+05 -1.78115e+01, 1.808159e-01 4 1.445440e+05 -1.78111e+01, 1.982575e-01 5 1.584893e+05 -1.78108e+01, 2.173809e-01 6 1.737801e+05 -1.78103e+01, 2.383479e-01 7 1.905461e+05 -1.78097e+01, 2.613360e-01 8 2.089296e+05 -1.78090e+01, 2.865397e-01 9 2.290868e+05 -1.78082e+01, 3.141720e-01 10 2.511886e+05 -1.78072e+01, 3.444661e-01 11 2.754229e+05 -1.78060e+01, 3.776777e-01 12 3.019952e+05 -1.78046e+01, 4.140866e-01 13 3.311311e+05 -1.78029e+01, 4.539990e-01 14 3.630781e+05 -1.78008e+01, 4.977499e-01 15 3.981072e+05 -1.77984e+01, 5.457060e-01 16 4.365158e+05 -1.77954e+01, 5.982678e-01 17 4.786301e+05 -1.77918e+01, 6.558730e-01 18 5.248075e+05 -1.77875e+01, 7.189995e-01 19 5.754399e+05 -1.77824e+01, 7.881683e-01 20 6.309573e+05 -1.77761e+01, 8.639473e-01 21 6.918310e+05 -1.77687e+01, 9.469541e-01 22 7.585776e+05 -1.77597e+01, 1.037860e+00 23 8.317638e+05 -1.77490e+01, 1.137392e+00 24 9.120108e+05 -1.77361e+01, 1.246336e+00 25 1.000000e+06 -1.77205e+01, 1.365543e+00 26 1.096478e+06 -1.77019e+01, 1.495921e+00 27 1.202264e+06 -1.76796e+01, 1.638447e+00 28 1.318257e+06 -1.76528e+01, 1.794157e+00 29 1.445440e+06 -1.76207e+01, 1.964147e+00 30 1.584893e+06 -1.75822e+01, 2.149561e+00 31 1.737801e+06 -1.75361e+01, 2.351587e+00 32 1.905461e+06 -1.74810e+01, 2.571432e+00 33 2.089296e+06 -1.74151e+01, 2.810305e+00 34 2.290868e+06 -1.73365e+01, 3.069377e+00 35 2.511886e+06 -1.72427e+01, 3.349740e+00 36 2.754229e+06 -1.71311e+01, 3.652344e+00 37 3.019952e+06 -1.69986e+01, 3.977922e+00 38 3.311311e+06 -1.68416e+01, 4.326893e+00 39 3.630781e+06 -1.66560e+01, 4.699240e+00 40 3.981072e+06 -1.64375e+01, 5.094368e+00 41 4.365158e+06 -1.61811e+01, 5.510936e+00 42 4.786301e+06 -1.58817e+01, 5.946675e+00 43 5.248075e+06 -1.55339e+01, 6.398188e+00 44 5.754399e+06 -1.51324e+01, 6.860769e+00 45 6.309573e+06 -1.46722e+01, 7.328235e+00 46 6.918310e+06 -1.41491e+01, 7.792837e+00 47 7.585776e+06 -1.35598e+01, 8.245259e+00 48 8.317638e+06 -1.29031e+01, 8.674765e+00 49 9.120108e+06 -1.21796e+01, 9.069526e+00 50 1.000000e+07 -1.13928e+01, 9.417139e+00 51 1.096478e+07 -1.05490e+01, 9.705335e+00 52 1.202264e+07 -9.65760e+00, 9.922829e+00 53 1.318257e+07 -8.73084e+00, 1.006022e+01 54 1.445440e+07 -7.78314e+00, 1.011080e+01 Index frequency v(e1_p) -------------------------------------------------------------------------------- 55 1.584893e+07 -6.83041e+00, 1.007121e+01 56 1.737801e+07 -5.88896e+00, 9.941739e+00 57 1.905461e+07 -4.97449e+00, 9.726286e+00 58 2.089296e+07 -4.10109e+00, 9.431959e+00 59 2.290868e+07 -3.28048e+00, 9.068395e+00 60 2.511886e+07 -2.52156e+00, 8.646907e+00 61 2.754229e+07 -1.83028e+00, 8.179607e+00 62 3.019952e+07 -1.20977e+00, 7.678589e+00 63 3.311311e+07 -6.60683e-01, 7.155287e+00 64 3.630781e+07 -1.81694e-01, 6.620020e+00 65 3.981072e+07 2.300105e-01, 6.081735e+00 66 4.365158e+07 5.782313e-01, 5.547931e+00 67 4.786301e+07 8.673330e-01, 5.024706e+00 68 5.248075e+07 1.101910e+00, 4.516904e+00 69 5.754399e+07 1.286547e+00, 4.028308e+00 70 6.309573e+07 1.425678e+00, 3.561854e+00 71 6.918310e+07 1.523515e+00, 3.119830e+00 72 7.585776e+07 1.584052e+00, 2.704047e+00 73 8.317638e+07 1.611108e+00, 2.315972e+00 74 9.120108e+07 1.608400e+00, 1.956802e+00 75 1.000000e+08 1.579619e+00, 1.627491e+00 76 1.096478e+08 1.528490e+00, 1.328728e+00 77 1.202264e+08 1.458804e+00, 1.060881e+00 78 1.318257e+08 1.374403e+00, 8.239259e-01 79 1.445440e+08 1.279122e+00, 6.173743e-01 80 1.584893e+08 1.176692e+00, 4.402349e-01 81 1.737801e+08 1.070619e+00, 2.910099e-01 82 1.905461e+08 9.640633e-01, 1.677399e-01 83 2.089296e+08 8.597353e-01, 6.809260e-02 84 2.290868e+08 7.598256e-01, -1.05190e-02 85 2.511886e+08 6.659789e-01, -7.08039e-02 86 2.754229e+08 5.793090e-01, -1.15465e-01 87 3.019952e+08 5.004486e-01, -1.47089e-01 88 3.311311e+08 4.296214e-01, -1.68063e-01 89 3.630781e+08 3.667266e-01, -1.80522e-01 90 3.981072e+08 3.114226e-01, -1.86321e-01 91 4.365158e+08 2.632052e-01, -1.87033e-01 92 4.786301e+08 2.214725e-01, -1.83961e-01 93 5.248075e+08 1.855782e-01, -1.78163e-01 94 5.754399e+08 1.548704e-01, -1.70483e-01 95 6.309573e+08 1.287193e-01, -1.61581e-01 96 6.918310e+08 1.065355e-01, -1.51963e-01 97 7.585776e+08 8.777952e-02, -1.42010e-01 98 8.317638e+08 7.196718e-02, -1.32004e-01 99 9.120108e+08 5.866969e-02, -1.22147e-01 100 1.000000e+09 4.751187e-02, -1.12577e-01 vbic diffamp test Transient Analysis Sun Mar 8 16:34:50 2009 -------------------------------------------------------------------------------- Index time v(e1_p) -------------------------------------------------------------------------------- 0 0.000000e+00 2.402856e-11 1 1.000000e-11 1.377181e-07 2 2.000000e-11 2.571477e-07 3 4.000000e-11 5.104832e-07 4 8.000000e-11 1.342960e-06 5 1.600000e-10 4.687225e-06 6 3.200000e-10 1.590975e-05 7 6.400000e-10 4.054293e-05 8 1.280000e-09 6.771908e-06 9 2.560000e-09 -7.88582e-04 10 5.120000e-09 -6.13186e-03 11 1.024000e-08 -2.93223e-02 12 2.024000e-08 -9.24343e-02 13 3.024000e-08 -1.40407e-01 14 4.024000e-08 -1.42218e-01 15 5.024000e-08 -9.31278e-02 16 6.024000e-08 -1.00588e-02 17 7.024000e-08 7.634006e-02 18 8.024000e-08 1.336656e-01 19 9.024000e-08 1.404278e-01 20 1.002400e-07 9.323793e-02 21 1.102400e-07 9.243606e-03 22 1.202400e-07 -7.85336e-02 23 1.302400e-07 -1.35431e-01 24 1.402400e-07 -1.40413e-01 25 1.502400e-07 -9.24959e-02 26 1.602400e-07 -9.82027e-03 27 1.702400e-07 7.642091e-02 28 1.802400e-07 1.336985e-01 29 1.902400e-07 1.404375e-01 30 2.002400e-07 9.324286e-02 31 2.102400e-07 9.244434e-03 32 2.202400e-07 -7.85326e-02 33 2.302400e-07 -1.35432e-01 34 2.402400e-07 -1.40413e-01 35 2.502400e-07 -9.24960e-02 36 2.602400e-07 -9.82016e-03 37 2.702400e-07 7.642091e-02 38 2.802400e-07 1.336985e-01 39 2.902400e-07 1.404375e-01 40 3.002400e-07 9.324281e-02 41 3.102400e-07 9.244454e-03 42 3.202400e-07 -7.85325e-02 43 3.302400e-07 -1.35432e-01 44 3.402400e-07 -1.40413e-01 45 3.502400e-07 -9.24961e-02 46 3.602400e-07 -9.82014e-03 47 3.702400e-07 7.642092e-02 48 3.802400e-07 1.336985e-01 49 3.902400e-07 1.404376e-01 50 4.002400e-07 9.324278e-02 51 4.102400e-07 9.244469e-03 52 4.202400e-07 -7.85325e-02 53 4.302400e-07 -1.35432e-01 54 4.402400e-07 -1.40413e-01 Index time v(e1_p) -------------------------------------------------------------------------------- 55 4.502400e-07 -9.24961e-02 56 4.602400e-07 -9.82013e-03 57 4.702400e-07 7.642092e-02 58 4.802400e-07 1.336985e-01 59 4.902400e-07 1.404376e-01 60 5.002400e-07 9.324277e-02 61 5.102400e-07 9.244477e-03 62 5.202400e-07 -7.85325e-02 63 5.302400e-07 -1.35432e-01 64 5.402400e-07 -1.40413e-01 65 5.502400e-07 -9.24961e-02 66 5.602400e-07 -9.82013e-03 67 5.702400e-07 7.642092e-02 68 5.802400e-07 1.336985e-01 69 5.902400e-07 1.404376e-01 70 6.002400e-07 9.324276e-02 71 6.102400e-07 9.244480e-03 72 6.202400e-07 -7.85325e-02 73 6.302400e-07 -1.35432e-01 74 6.402400e-07 -1.40413e-01 75 6.502400e-07 -9.24961e-02 76 6.602400e-07 -9.82012e-03 77 6.702400e-07 7.642093e-02 78 6.802400e-07 1.336984e-01 79 6.902400e-07 1.404376e-01 80 7.002400e-07 9.324276e-02 81 7.102400e-07 9.244482e-03 82 7.202400e-07 -7.85325e-02 83 7.302400e-07 -1.35432e-01 84 7.402400e-07 -1.40413e-01 85 7.502400e-07 -9.24961e-02 86 7.602400e-07 -9.82012e-03 87 7.702400e-07 7.642093e-02 88 7.802400e-07 1.336984e-01 89 7.902400e-07 1.404376e-01 90 8.002400e-07 9.324275e-02 91 8.102400e-07 9.244483e-03 92 8.202400e-07 -7.85325e-02 93 8.302400e-07 -1.35432e-01 94 8.402400e-07 -1.40413e-01 95 8.502400e-07 -9.24961e-02 96 8.602400e-07 -9.82012e-03 97 8.702400e-07 7.642093e-02 98 8.802400e-07 1.336984e-01 99 8.902400e-07 1.404376e-01 100 9.002400e-07 9.324275e-02 101 9.102400e-07 9.244483e-03 102 9.202400e-07 -7.85325e-02 103 9.302400e-07 -1.35432e-01 104 9.402400e-07 -1.40413e-01 105 9.502400e-07 -9.24961e-02 106 9.602400e-07 -9.82012e-03 107 9.702400e-07 7.642093e-02 108 9.802400e-07 1.336984e-01 109 9.902400e-07 1.404376e-01 110 1.000000e-06 9.485434e-02 Total elapsed time: 0.180 seconds. Total DRAM available = 255.484375 MB. DRAM currently available = 133.890625 MB. Total ngspice program size = 14.214844 MB. tmpk8ny_4pz/tests/vbic/diffamp.cir0000644000175000017500000000235213546075722017354 0ustar carstencarstenVBIC DiffAmp Test V1 VCC 0 3.3 V2 V2_P R3_N AC 1 DC 0 Sine(0 10m 10Meg 0 0) R1 Q3_C 0 100k R2 Q4_C 0 100k R3 VCC R3_N 1K R4 R3_N 0 1K Q10 Q1_E I1_N 0 0 N1 Q11 I1_N I1_N 0 0 N1 Q12 Q9_B I1_N 0 0 N1 M=2 Q13 Q5_B I1_N 0 0 N1 M=2 Q1 Q5_C V2_P Q1_E 0 N1 Q2 Q6_C R3_N Q1_E 0 N1 Q3 Q3_C Q9_B Q5_C Q3_C P1 Q4 Q4_C Q9_B Q6_C Q4_C P1 I1 VCC I1_N 10u Q5 Q5_C Q5_B VCC Q5_C P1 Q6 Q6_C Q5_B VCC Q6_C P1 E1 E1_P 0 Q3_C Q4_C 1 RH E1_P 0 1G Q7 Q5_B Q5_B VCC Q5_B P1 Q8 Q8_B Q8_B VCC Q8_B P1 Q9 Q9_B Q9_B Q8_B Q9_B P1 .OPTIONS NOACCT .OP .TRAN 1n 1u 0 10n .AC DEC 25 100k 1G .print ac v(e1_p) .print tran v(e1_p) .MODEL N1 NPN LEVEL=4 + IS=1e-16 IBEI=1e-18 IBEN=5e-15 IBCI=2e-17 IBCN=5e-15 ISP=1e-15 RCX=10 + RCI=60 RBX=10 RBI=40 RE=2 RS=20 RBP=40 VEF=10 VER=4 IKF=2e-3 ITF=8e-2 + XTF=20 IKR=2e-4 IKP=2e-4 CJE=1e-13 CJC=2e-14 CJEP=1e-13 CJCP=4e-13 VO=2 + GAMM=2e-11 HRCF=2 QCO=1e-12 AVC1=2 AVC2=15 TF=10e-12 TR=100e-12 TD=2e-11 RTH=300 .MODEL P1 PNP LEVEL=4 + IS=1e-16 IBEI=1e-18 IBEN=5e-15 IBCI=2e-17 IBCN=5e-15 ISP=1e-15 RCX=10 + RCI=60 RBX=10 RBI=40 RE=2 RS=20 RBP=40 VEF=10 VER=4 IKF=2e-3 ITF=8e-2 + XTF=20 IKR=2e-4 IKP=2e-4 CJE=1e-13 CJC=2e-14 CJEP=1e-13 CJCP=4e-13 VO=2 + GAMM=2e-11 HRCF=2 QCO=1e-12 AVC1=2 AVC2=15 TF=10e-12 TR=100e-12 TD=2e-11 RTH=300 .END tmpk8ny_4pz/tests/vbic/CEamp.out0000644000175000017500000010517713546075722016776 0ustar carstencarsten Circuit: VBIC Pole Zero Test Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 VBIC Pole Zero Test AC Analysis Sat Aug 27 16:37:48 2005 ---------------------------------------------------------------- Index frequency db(i(vmeas)) ---------------------------------------------------------------- 0 1.000000e+05 3.267930e+01 1 1.023293e+05 3.267947e+01 2 1.047129e+05 3.267963e+01 3 1.071519e+05 3.267979e+01 4 1.096478e+05 3.267994e+01 5 1.122018e+05 3.268008e+01 6 1.148154e+05 3.268022e+01 7 1.174898e+05 3.268035e+01 8 1.202264e+05 3.268047e+01 9 1.230269e+05 3.268059e+01 10 1.258925e+05 3.268070e+01 11 1.288250e+05 3.268081e+01 12 1.318257e+05 3.268092e+01 13 1.348963e+05 3.268101e+01 14 1.380384e+05 3.268111e+01 15 1.412538e+05 3.268120e+01 16 1.445440e+05 3.268128e+01 17 1.479108e+05 3.268137e+01 18 1.513561e+05 3.268145e+01 19 1.548817e+05 3.268152e+01 20 1.584893e+05 3.268159e+01 21 1.621810e+05 3.268166e+01 22 1.659587e+05 3.268172e+01 23 1.698244e+05 3.268179e+01 24 1.737801e+05 3.268185e+01 25 1.778279e+05 3.268190e+01 26 1.819701e+05 3.268196e+01 27 1.862087e+05 3.268201e+01 28 1.905461e+05 3.268206e+01 29 1.949845e+05 3.268210e+01 30 1.995262e+05 3.268215e+01 31 2.041738e+05 3.268219e+01 32 2.089296e+05 3.268223e+01 33 2.137962e+05 3.268227e+01 34 2.187762e+05 3.268231e+01 35 2.238721e+05 3.268234e+01 36 2.290868e+05 3.268238e+01 37 2.344229e+05 3.268241e+01 38 2.398833e+05 3.268244e+01 39 2.454709e+05 3.268247e+01 40 2.511886e+05 3.268250e+01 41 2.570396e+05 3.268253e+01 42 2.630268e+05 3.268255e+01 43 2.691535e+05 3.268258e+01 44 2.754229e+05 3.268260e+01 45 2.818383e+05 3.268262e+01 46 2.884032e+05 3.268264e+01 47 2.951209e+05 3.268266e+01 48 3.019952e+05 3.268268e+01 49 3.090295e+05 3.268270e+01 50 3.162278e+05 3.268272e+01 51 3.235937e+05 3.268273e+01 52 3.311311e+05 3.268275e+01 53 3.388442e+05 3.268276e+01 54 3.467369e+05 3.268278e+01 Index frequency db(i(vmeas)) ---------------------------------------------------------------- 55 3.548134e+05 3.268279e+01 56 3.630781e+05 3.268280e+01 57 3.715352e+05 3.268282e+01 58 3.801894e+05 3.268283e+01 59 3.890451e+05 3.268284e+01 60 3.981072e+05 3.268285e+01 61 4.073803e+05 3.268286e+01 62 4.168694e+05 3.268287e+01 63 4.265795e+05 3.268288e+01 64 4.365158e+05 3.268288e+01 65 4.466836e+05 3.268289e+01 66 4.570882e+05 3.268290e+01 67 4.677351e+05 3.268291e+01 68 4.786301e+05 3.268291e+01 69 4.897788e+05 3.268292e+01 70 5.011872e+05 3.268292e+01 71 5.128614e+05 3.268293e+01 72 5.248075e+05 3.268293e+01 73 5.370318e+05 3.268294e+01 74 5.495409e+05 3.268294e+01 75 5.623413e+05 3.268294e+01 76 5.754399e+05 3.268295e+01 77 5.888437e+05 3.268295e+01 78 6.025596e+05 3.268295e+01 79 6.165950e+05 3.268295e+01 80 6.309573e+05 3.268296e+01 81 6.456542e+05 3.268296e+01 82 6.606934e+05 3.268296e+01 83 6.760830e+05 3.268296e+01 84 6.918310e+05 3.268296e+01 85 7.079458e+05 3.268296e+01 86 7.244360e+05 3.268296e+01 87 7.413102e+05 3.268296e+01 88 7.585776e+05 3.268296e+01 89 7.762471e+05 3.268296e+01 90 7.943282e+05 3.268296e+01 91 8.128305e+05 3.268295e+01 92 8.317638e+05 3.268295e+01 93 8.511380e+05 3.268295e+01 94 8.709636e+05 3.268295e+01 95 8.912509e+05 3.268294e+01 96 9.120108e+05 3.268294e+01 97 9.332543e+05 3.268294e+01 98 9.549926e+05 3.268293e+01 99 9.772372e+05 3.268293e+01 100 1.000000e+06 3.268292e+01 101 1.023293e+06 3.268292e+01 102 1.047129e+06 3.268291e+01 103 1.071519e+06 3.268290e+01 104 1.096478e+06 3.268290e+01 105 1.122018e+06 3.268289e+01 106 1.148154e+06 3.268288e+01 107 1.174898e+06 3.268287e+01 108 1.202264e+06 3.268286e+01 109 1.230269e+06 3.268285e+01 110 1.258925e+06 3.268285e+01 111 1.288250e+06 3.268283e+01 112 1.318257e+06 3.268282e+01 Index frequency db(i(vmeas)) ---------------------------------------------------------------- 113 1.348963e+06 3.268281e+01 114 1.380384e+06 3.268280e+01 115 1.412538e+06 3.268279e+01 116 1.445440e+06 3.268277e+01 117 1.479108e+06 3.268276e+01 118 1.513561e+06 3.268274e+01 119 1.548817e+06 3.268273e+01 120 1.584893e+06 3.268271e+01 121 1.621810e+06 3.268269e+01 122 1.659587e+06 3.268268e+01 123 1.698244e+06 3.268266e+01 124 1.737801e+06 3.268264e+01 125 1.778279e+06 3.268261e+01 126 1.819701e+06 3.268259e+01 127 1.862087e+06 3.268257e+01 128 1.905461e+06 3.268254e+01 129 1.949845e+06 3.268252e+01 130 1.995262e+06 3.268249e+01 131 2.041738e+06 3.268246e+01 132 2.089296e+06 3.268243e+01 133 2.137962e+06 3.268240e+01 134 2.187762e+06 3.268237e+01 135 2.238721e+06 3.268233e+01 136 2.290868e+06 3.268230e+01 137 2.344229e+06 3.268226e+01 138 2.398833e+06 3.268222e+01 139 2.454709e+06 3.268218e+01 140 2.511886e+06 3.268214e+01 141 2.570396e+06 3.268209e+01 142 2.630268e+06 3.268204e+01 143 2.691535e+06 3.268199e+01 144 2.754229e+06 3.268194e+01 145 2.818383e+06 3.268189e+01 146 2.884032e+06 3.268183e+01 147 2.951209e+06 3.268177e+01 148 3.019952e+06 3.268170e+01 149 3.090295e+06 3.268164e+01 150 3.162278e+06 3.268157e+01 151 3.235937e+06 3.268150e+01 152 3.311311e+06 3.268142e+01 153 3.388442e+06 3.268134e+01 154 3.467369e+06 3.268126e+01 155 3.548134e+06 3.268117e+01 156 3.630781e+06 3.268108e+01 157 3.715352e+06 3.268099e+01 158 3.801894e+06 3.268089e+01 159 3.890451e+06 3.268078e+01 160 3.981072e+06 3.268067e+01 161 4.073803e+06 3.268056e+01 162 4.168694e+06 3.268044e+01 163 4.265795e+06 3.268031e+01 164 4.365158e+06 3.268018e+01 165 4.466836e+06 3.268004e+01 166 4.570882e+06 3.267989e+01 167 4.677351e+06 3.267974e+01 168 4.786301e+06 3.267958e+01 169 4.897788e+06 3.267942e+01 170 5.011872e+06 3.267924e+01 Index frequency db(i(vmeas)) ---------------------------------------------------------------- 171 5.128614e+06 3.267906e+01 172 5.248075e+06 3.267887e+01 173 5.370318e+06 3.267867e+01 174 5.495409e+06 3.267846e+01 175 5.623413e+06 3.267824e+01 176 5.754399e+06 3.267802e+01 177 5.888437e+06 3.267778e+01 178 6.025596e+06 3.267752e+01 179 6.165950e+06 3.267726e+01 180 6.309573e+06 3.267699e+01 181 6.456542e+06 3.267670e+01 182 6.606934e+06 3.267639e+01 183 6.760830e+06 3.267608e+01 184 6.918310e+06 3.267575e+01 185 7.079458e+06 3.267540e+01 186 7.244360e+06 3.267504e+01 187 7.413102e+06 3.267466e+01 188 7.585776e+06 3.267426e+01 189 7.762471e+06 3.267384e+01 190 7.943282e+06 3.267341e+01 191 8.128305e+06 3.267295e+01 192 8.317638e+06 3.267247e+01 193 8.511380e+06 3.267197e+01 194 8.709636e+06 3.267145e+01 195 8.912509e+06 3.267090e+01 196 9.120108e+06 3.267032e+01 197 9.332543e+06 3.266972e+01 198 9.549926e+06 3.266909e+01 199 9.772372e+06 3.266843e+01 200 1.000000e+07 3.266774e+01 201 1.023293e+07 3.266702e+01 202 1.047129e+07 3.266626e+01 203 1.071519e+07 3.266547e+01 204 1.096478e+07 3.266464e+01 205 1.122018e+07 3.266377e+01 206 1.148154e+07 3.266286e+01 207 1.174898e+07 3.266191e+01 208 1.202264e+07 3.266091e+01 209 1.230269e+07 3.265987e+01 210 1.258925e+07 3.265877e+01 211 1.288250e+07 3.265763e+01 212 1.318257e+07 3.265643e+01 213 1.348963e+07 3.265518e+01 214 1.380384e+07 3.265387e+01 215 1.412538e+07 3.265249e+01 216 1.445440e+07 3.265106e+01 217 1.479108e+07 3.264955e+01 218 1.513561e+07 3.264798e+01 219 1.548817e+07 3.264633e+01 220 1.584893e+07 3.264460e+01 221 1.621810e+07 3.264279e+01 222 1.659587e+07 3.264090e+01 223 1.698244e+07 3.263892e+01 224 1.737801e+07 3.263685e+01 225 1.778279e+07 3.263468e+01 226 1.819701e+07 3.263241e+01 227 1.862087e+07 3.263004e+01 228 1.905461e+07 3.262755e+01 Index frequency db(i(vmeas)) ---------------------------------------------------------------- 229 1.949845e+07 3.262495e+01 230 1.995262e+07 3.262223e+01 231 2.041738e+07 3.261938e+01 232 2.089296e+07 3.261640e+01 233 2.137962e+07 3.261328e+01 234 2.187762e+07 3.261002e+01 235 2.238721e+07 3.260661e+01 236 2.290868e+07 3.260303e+01 237 2.344229e+07 3.259930e+01 238 2.398833e+07 3.259538e+01 239 2.454709e+07 3.259129e+01 240 2.511886e+07 3.258701e+01 241 2.570396e+07 3.258254e+01 242 2.630268e+07 3.257785e+01 243 2.691535e+07 3.257296e+01 244 2.754229e+07 3.256783e+01 245 2.818383e+07 3.256247e+01 246 2.884032e+07 3.255687e+01 247 2.951209e+07 3.255101e+01 248 3.019952e+07 3.254488e+01 249 3.090295e+07 3.253848e+01 250 3.162278e+07 3.253178e+01 251 3.235937e+07 3.252477e+01 252 3.311311e+07 3.251745e+01 253 3.388442e+07 3.250980e+01 254 3.467369e+07 3.250180e+01 255 3.548134e+07 3.249344e+01 256 3.630781e+07 3.248470e+01 257 3.715352e+07 3.247557e+01 258 3.801894e+07 3.246603e+01 259 3.890451e+07 3.245606e+01 260 3.981072e+07 3.244564e+01 261 4.073803e+07 3.243477e+01 262 4.168694e+07 3.242341e+01 263 4.265795e+07 3.241154e+01 264 4.365158e+07 3.239915e+01 265 4.466836e+07 3.238622e+01 266 4.570882e+07 3.237271e+01 267 4.677351e+07 3.235862e+01 268 4.786301e+07 3.234391e+01 269 4.897788e+07 3.232856e+01 270 5.011872e+07 3.231254e+01 271 5.128614e+07 3.229583e+01 272 5.248075e+07 3.227840e+01 273 5.370318e+07 3.226023e+01 274 5.495409e+07 3.224128e+01 275 5.623413e+07 3.222153e+01 276 5.754399e+07 3.220094e+01 277 5.888437e+07 3.217948e+01 278 6.025596e+07 3.215713e+01 279 6.165950e+07 3.213385e+01 280 6.309573e+07 3.210960e+01 281 6.456542e+07 3.208435e+01 282 6.606934e+07 3.205807e+01 283 6.760830e+07 3.203072e+01 284 6.918310e+07 3.200226e+01 285 7.079458e+07 3.197267e+01 286 7.244360e+07 3.194189e+01 Index frequency db(i(vmeas)) ---------------------------------------------------------------- 287 7.413102e+07 3.190989e+01 288 7.585776e+07 3.187664e+01 289 7.762471e+07 3.184209e+01 290 7.943282e+07 3.180620e+01 291 8.128305e+07 3.176894e+01 292 8.317638e+07 3.173026e+01 293 8.511380e+07 3.169012e+01 294 8.709636e+07 3.164849e+01 295 8.912509e+07 3.160532e+01 296 9.120108e+07 3.156056e+01 297 9.332543e+07 3.151419e+01 298 9.549926e+07 3.146616e+01 299 9.772372e+07 3.141642e+01 300 1.000000e+08 3.136495e+01 301 1.023293e+08 3.131170e+01 302 1.047129e+08 3.125662e+01 303 1.071519e+08 3.119969e+01 304 1.096478e+08 3.114087e+01 305 1.122018e+08 3.108011e+01 306 1.148154e+08 3.101739e+01 307 1.174898e+08 3.095268e+01 308 1.202264e+08 3.088592e+01 309 1.230269e+08 3.081711e+01 310 1.258925e+08 3.074620e+01 311 1.288250e+08 3.067317e+01 312 1.318257e+08 3.059799e+01 313 1.348963e+08 3.052064e+01 314 1.380384e+08 3.044109e+01 315 1.412538e+08 3.035933e+01 316 1.445440e+08 3.027533e+01 317 1.479108e+08 3.018908e+01 318 1.513561e+08 3.010057e+01 319 1.548817e+08 3.000977e+01 320 1.584893e+08 2.991669e+01 321 1.621810e+08 2.982131e+01 322 1.659587e+08 2.972363e+01 323 1.698244e+08 2.962365e+01 324 1.737801e+08 2.952137e+01 325 1.778279e+08 2.941678e+01 326 1.819701e+08 2.930990e+01 327 1.862087e+08 2.920074e+01 328 1.905461e+08 2.908929e+01 329 1.949845e+08 2.897558e+01 330 1.995262e+08 2.885961e+01 331 2.041738e+08 2.874141e+01 332 2.089296e+08 2.862099e+01 333 2.137962e+08 2.849838e+01 334 2.187762e+08 2.837358e+01 335 2.238721e+08 2.824664e+01 336 2.290868e+08 2.811758e+01 337 2.344229e+08 2.798642e+01 338 2.398833e+08 2.785320e+01 339 2.454709e+08 2.771794e+01 340 2.511886e+08 2.758068e+01 341 2.570396e+08 2.744146e+01 342 2.630268e+08 2.730030e+01 343 2.691535e+08 2.715724e+01 344 2.754229e+08 2.701233e+01 Index frequency db(i(vmeas)) ---------------------------------------------------------------- 345 2.818383e+08 2.686559e+01 346 2.884032e+08 2.671708e+01 347 2.951209e+08 2.656682e+01 348 3.019952e+08 2.641485e+01 349 3.090295e+08 2.626122e+01 350 3.162278e+08 2.610597e+01 351 3.235937e+08 2.594914e+01 352 3.311311e+08 2.579076e+01 353 3.388442e+08 2.563089e+01 354 3.467369e+08 2.546955e+01 355 3.548134e+08 2.530679e+01 356 3.630781e+08 2.514266e+01 357 3.715352e+08 2.497718e+01 358 3.801894e+08 2.481040e+01 359 3.890451e+08 2.464237e+01 360 3.981072e+08 2.447310e+01 361 4.073803e+08 2.430266e+01 362 4.168694e+08 2.413107e+01 363 4.265795e+08 2.395837e+01 364 4.365158e+08 2.378459e+01 365 4.466836e+08 2.360977e+01 366 4.570882e+08 2.343396e+01 367 4.677351e+08 2.325717e+01 368 4.786301e+08 2.307945e+01 369 4.897788e+08 2.290082e+01 370 5.011872e+08 2.272132e+01 371 5.128614e+08 2.254098e+01 372 5.248075e+08 2.235983e+01 373 5.370318e+08 2.217789e+01 374 5.495409e+08 2.199521e+01 375 5.623413e+08 2.181180e+01 376 5.754399e+08 2.162768e+01 377 5.888437e+08 2.144290e+01 378 6.025596e+08 2.125747e+01 379 6.165950e+08 2.107141e+01 380 6.309573e+08 2.088476e+01 381 6.456542e+08 2.069753e+01 382 6.606934e+08 2.050974e+01 383 6.760830e+08 2.032142e+01 384 6.918310e+08 2.013258e+01 385 7.079458e+08 1.994325e+01 386 7.244360e+08 1.975345e+01 387 7.413102e+08 1.956319e+01 388 7.585776e+08 1.937249e+01 389 7.762471e+08 1.918137e+01 390 7.943282e+08 1.898984e+01 391 8.128305e+08 1.879793e+01 392 8.317638e+08 1.860563e+01 393 8.511380e+08 1.841298e+01 394 8.709636e+08 1.821998e+01 395 8.912509e+08 1.802665e+01 396 9.120108e+08 1.783300e+01 397 9.332543e+08 1.763904e+01 398 9.549926e+08 1.744478e+01 399 9.772372e+08 1.725023e+01 400 1.000000e+09 1.705541e+01 401 1.023293e+09 1.686033e+01 402 1.047129e+09 1.666498e+01 Index frequency db(i(vmeas)) ---------------------------------------------------------------- 403 1.071519e+09 1.646940e+01 404 1.096478e+09 1.627357e+01 405 1.122018e+09 1.607751e+01 406 1.148154e+09 1.588124e+01 407 1.174898e+09 1.568474e+01 408 1.202264e+09 1.548804e+01 409 1.230269e+09 1.529114e+01 410 1.258925e+09 1.509405e+01 411 1.288250e+09 1.489676e+01 412 1.318257e+09 1.469930e+01 413 1.348963e+09 1.450165e+01 414 1.380384e+09 1.430384e+01 415 1.412538e+09 1.410585e+01 416 1.445440e+09 1.390770e+01 417 1.479108e+09 1.370940e+01 418 1.513561e+09 1.351093e+01 419 1.548817e+09 1.331232e+01 420 1.584893e+09 1.311355e+01 421 1.621810e+09 1.291464e+01 422 1.659587e+09 1.271558e+01 423 1.698244e+09 1.251638e+01 424 1.737801e+09 1.231705e+01 425 1.778279e+09 1.211757e+01 426 1.819701e+09 1.191796e+01 427 1.862087e+09 1.171822e+01 428 1.905461e+09 1.151834e+01 429 1.949845e+09 1.131833e+01 430 1.995262e+09 1.111819e+01 431 2.041738e+09 1.091792e+01 432 2.089296e+09 1.071752e+01 433 2.137962e+09 1.051699e+01 434 2.187762e+09 1.031634e+01 435 2.238721e+09 1.011555e+01 436 2.290868e+09 9.914631e+00 437 2.344229e+09 9.713585e+00 438 2.398833e+09 9.512408e+00 439 2.454709e+09 9.311102e+00 440 2.511886e+09 9.109664e+00 441 2.570396e+09 8.908095e+00 442 2.630268e+09 8.706393e+00 443 2.691535e+09 8.504558e+00 444 2.754229e+09 8.302589e+00 445 2.818383e+09 8.100485e+00 446 2.884032e+09 7.898245e+00 447 2.951209e+09 7.695869e+00 448 3.019952e+09 7.493355e+00 449 3.090295e+09 7.290702e+00 450 3.162278e+09 7.087910e+00 451 3.235937e+09 6.884978e+00 452 3.311311e+09 6.681906e+00 453 3.388442e+09 6.478692e+00 454 3.467369e+09 6.275337e+00 455 3.548134e+09 6.071840e+00 456 3.630781e+09 5.868202e+00 457 3.715352e+09 5.664422e+00 458 3.801894e+09 5.460502e+00 459 3.890451e+09 5.256441e+00 460 3.981072e+09 5.052242e+00 Index frequency db(i(vmeas)) ---------------------------------------------------------------- 461 4.073803e+09 4.847906e+00 462 4.168694e+09 4.643434e+00 463 4.265795e+09 4.438830e+00 464 4.365158e+09 4.234096e+00 465 4.466836e+09 4.029234e+00 466 4.570882e+09 3.824251e+00 467 4.677351e+09 3.619149e+00 468 4.786301e+09 3.413934e+00 469 4.897788e+09 3.208612e+00 470 5.011872e+09 3.003189e+00 471 5.128614e+09 2.797673e+00 472 5.248075e+09 2.592072e+00 473 5.370318e+09 2.386395e+00 474 5.495409e+09 2.180651e+00 475 5.623413e+09 1.974852e+00 476 5.754399e+09 1.769009e+00 477 5.888437e+09 1.563134e+00 478 6.025596e+09 1.357241e+00 479 6.165950e+09 1.151346e+00 480 6.309573e+09 9.454625e-01 481 6.456542e+09 7.396088e-01 482 6.606934e+09 5.338023e-01 483 6.760830e+09 3.280619e-01 484 6.918310e+09 1.224078e-01 485 7.079458e+09 -8.31388e-02 486 7.244360e+09 -2.88556e-01 487 7.413102e+09 -4.93820e-01 488 7.585776e+09 -6.98906e-01 489 7.762471e+09 -9.03789e-01 490 7.943282e+09 -1.10844e+00 491 8.128305e+09 -1.31284e+00 492 8.317638e+09 -1.51695e+00 493 8.511380e+09 -1.72074e+00 494 8.709636e+09 -1.92418e+00 495 8.912509e+09 -2.12725e+00 496 9.120108e+09 -2.32991e+00 497 9.332543e+09 -2.53212e+00 498 9.549926e+09 -2.73385e+00 499 9.772372e+09 -2.93507e+00 500 1.000000e+10 -3.13573e+00 VBIC Pole Zero Test AC Analysis Sat Aug 27 16:37:48 2005 ---------------------------------------------------------------- Index frequency ph(i(vmeas)) ---------------------------------------------------------------- 0 1.000000e+05 2.902630e-02 1 1.023293e+05 2.833836e-02 2 1.047129e+05 2.766541e-02 3 1.071519e+05 2.700710e-02 4 1.096478e+05 2.636307e-02 5 1.122018e+05 2.573300e-02 6 1.148154e+05 2.511655e-02 7 1.174898e+05 2.451338e-02 8 1.202264e+05 2.392319e-02 9 1.230269e+05 2.334567e-02 10 1.258925e+05 2.278050e-02 11 1.288250e+05 2.222740e-02 12 1.318257e+05 2.168606e-02 13 1.348963e+05 2.115620e-02 14 1.380384e+05 2.063755e-02 15 1.412538e+05 2.012982e-02 16 1.445440e+05 1.963275e-02 17 1.479108e+05 1.914609e-02 18 1.513561e+05 1.866956e-02 19 1.548817e+05 1.820292e-02 20 1.584893e+05 1.774592e-02 21 1.621810e+05 1.729832e-02 22 1.659587e+05 1.685989e-02 23 1.698244e+05 1.643038e-02 24 1.737801e+05 1.600958e-02 25 1.778279e+05 1.559726e-02 26 1.819701e+05 1.519321e-02 27 1.862087e+05 1.479720e-02 28 1.905461e+05 1.440904e-02 29 1.949845e+05 1.402851e-02 30 1.995262e+05 1.365541e-02 31 2.041738e+05 1.328954e-02 32 2.089296e+05 1.293072e-02 33 2.137962e+05 1.257876e-02 34 2.187762e+05 1.223345e-02 35 2.238721e+05 1.189463e-02 36 2.290868e+05 1.156212e-02 37 2.344229e+05 1.123573e-02 38 2.398833e+05 1.091529e-02 39 2.454709e+05 1.060064e-02 40 2.511886e+05 1.029161e-02 41 2.570396e+05 9.988034e-03 42 2.630268e+05 9.689751e-03 43 2.691535e+05 9.396603e-03 44 2.754229e+05 9.108435e-03 45 2.818383e+05 8.825095e-03 46 2.884032e+05 8.546432e-03 47 2.951209e+05 8.272300e-03 48 3.019952e+05 8.002552e-03 49 3.090295e+05 7.737045e-03 50 3.162278e+05 7.475640e-03 51 3.235937e+05 7.218197e-03 52 3.311311e+05 6.964581e-03 53 3.388442e+05 6.714656e-03 54 3.467369e+05 6.468290e-03 Index frequency ph(i(vmeas)) ---------------------------------------------------------------- 55 3.548134e+05 6.225353e-03 56 3.630781e+05 5.985716e-03 57 3.715352e+05 5.749252e-03 58 3.801894e+05 5.515836e-03 59 3.890451e+05 5.285344e-03 60 3.981072e+05 5.057653e-03 61 4.073803e+05 4.832643e-03 62 4.168694e+05 4.610195e-03 63 4.265795e+05 4.390191e-03 64 4.365158e+05 4.172515e-03 65 4.466836e+05 3.957050e-03 66 4.570882e+05 3.743683e-03 67 4.677351e+05 3.532301e-03 68 4.786301e+05 3.322791e-03 69 4.897788e+05 3.115042e-03 70 5.011872e+05 2.908945e-03 71 5.128614e+05 2.704390e-03 72 5.248075e+05 2.501269e-03 73 5.370318e+05 2.299474e-03 74 5.495409e+05 2.098897e-03 75 5.623413e+05 1.899434e-03 76 5.754399e+05 1.700977e-03 77 5.888437e+05 1.503422e-03 78 6.025596e+05 1.306664e-03 79 6.165950e+05 1.110599e-03 80 6.309573e+05 9.151228e-04 81 6.456542e+05 7.201316e-04 82 6.606934e+05 5.255221e-04 83 6.760830e+05 3.311912e-04 84 6.918310e+05 1.370359e-04 85 7.079458e+05 -5.70468e-05 86 7.244360e+05 -2.51160e-04 87 7.413102e+05 -4.45406e-04 88 7.585776e+05 -6.39888e-04 89 7.762471e+05 -8.34709e-04 90 7.943282e+05 -1.02997e-03 91 8.128305e+05 -1.22578e-03 92 8.317638e+05 -1.42224e-03 93 8.511380e+05 -1.61946e-03 94 8.709636e+05 -1.81753e-03 95 8.912509e+05 -2.01657e-03 96 9.120108e+05 -2.21667e-03 97 9.332543e+05 -2.41795e-03 98 9.549926e+05 -2.62051e-03 99 9.772372e+05 -2.82446e-03 100 1.000000e+06 -3.02991e-03 101 1.023293e+06 -3.23697e-03 102 1.047129e+06 -3.44574e-03 103 1.071519e+06 -3.65633e-03 104 1.096478e+06 -3.86887e-03 105 1.122018e+06 -4.08346e-03 106 1.148154e+06 -4.30021e-03 107 1.174898e+06 -4.51924e-03 108 1.202264e+06 -4.74066e-03 109 1.230269e+06 -4.96460e-03 110 1.258925e+06 -5.19118e-03 111 1.288250e+06 -5.42050e-03 112 1.318257e+06 -5.65270e-03 Index frequency ph(i(vmeas)) ---------------------------------------------------------------- 113 1.348963e+06 -5.88789e-03 114 1.380384e+06 -6.12620e-03 115 1.412538e+06 -6.36776e-03 116 1.445440e+06 -6.61270e-03 117 1.479108e+06 -6.86114e-03 118 1.513561e+06 -7.11322e-03 119 1.548817e+06 -7.36907e-03 120 1.584893e+06 -7.62883e-03 121 1.621810e+06 -7.89263e-03 122 1.659587e+06 -8.16061e-03 123 1.698244e+06 -8.43292e-03 124 1.737801e+06 -8.70970e-03 125 1.778279e+06 -8.99109e-03 126 1.819701e+06 -9.27725e-03 127 1.862087e+06 -9.56833e-03 128 1.905461e+06 -9.86448e-03 129 1.949845e+06 -1.01659e-02 130 1.995262e+06 -1.04726e-02 131 2.041738e+06 -1.07849e-02 132 2.089296e+06 -1.11030e-02 133 2.137962e+06 -1.14269e-02 134 2.187762e+06 -1.17569e-02 135 2.238721e+06 -1.20931e-02 136 2.290868e+06 -1.24357e-02 137 2.344229e+06 -1.27849e-02 138 2.398833e+06 -1.31408e-02 139 2.454709e+06 -1.35038e-02 140 2.511886e+06 -1.38739e-02 141 2.570396e+06 -1.42513e-02 142 2.630268e+06 -1.46363e-02 143 2.691535e+06 -1.50291e-02 144 2.754229e+06 -1.54298e-02 145 2.818383e+06 -1.58387e-02 146 2.884032e+06 -1.62559e-02 147 2.951209e+06 -1.66818e-02 148 3.019952e+06 -1.71166e-02 149 3.090295e+06 -1.75604e-02 150 3.162278e+06 -1.80135e-02 151 3.235937e+06 -1.84761e-02 152 3.311311e+06 -1.89485e-02 153 3.388442e+06 -1.94310e-02 154 3.467369e+06 -1.99237e-02 155 3.548134e+06 -2.04271e-02 156 3.630781e+06 -2.09412e-02 157 3.715352e+06 -2.14664e-02 158 3.801894e+06 -2.20030e-02 159 3.890451e+06 -2.25512e-02 160 3.981072e+06 -2.31114e-02 161 4.073803e+06 -2.36838e-02 162 4.168694e+06 -2.42687e-02 163 4.265795e+06 -2.48665e-02 164 4.365158e+06 -2.54774e-02 165 4.466836e+06 -2.61019e-02 166 4.570882e+06 -2.67401e-02 167 4.677351e+06 -2.73925e-02 168 4.786301e+06 -2.80594e-02 169 4.897788e+06 -2.87411e-02 170 5.011872e+06 -2.94380e-02 Index frequency ph(i(vmeas)) ---------------------------------------------------------------- 171 5.128614e+06 -3.01505e-02 172 5.248075e+06 -3.08790e-02 173 5.370318e+06 -3.16238e-02 174 5.495409e+06 -3.23853e-02 175 5.623413e+06 -3.31639e-02 176 5.754399e+06 -3.39601e-02 177 5.888437e+06 -3.47742e-02 178 6.025596e+06 -3.56066e-02 179 6.165950e+06 -3.64579e-02 180 6.309573e+06 -3.73285e-02 181 6.456542e+06 -3.82188e-02 182 6.606934e+06 -3.91292e-02 183 6.760830e+06 -4.00603e-02 184 6.918310e+06 -4.10126e-02 185 7.079458e+06 -4.19865e-02 186 7.244360e+06 -4.29826e-02 187 7.413102e+06 -4.40013e-02 188 7.585776e+06 -4.50433e-02 189 7.762471e+06 -4.61090e-02 190 7.943282e+06 -4.71990e-02 191 8.128305e+06 -4.83139e-02 192 8.317638e+06 -4.94542e-02 193 8.511380e+06 -5.06206e-02 194 8.709636e+06 -5.18137e-02 195 8.912509e+06 -5.30340e-02 196 9.120108e+06 -5.42823e-02 197 9.332543e+06 -5.55591e-02 198 9.549926e+06 -5.68651e-02 199 9.772372e+06 -5.82010e-02 200 1.000000e+07 -5.95675e-02 201 1.023293e+07 -6.09652e-02 202 1.047129e+07 -6.23950e-02 203 1.071519e+07 -6.38575e-02 204 1.096478e+07 -6.53536e-02 205 1.122018e+07 -6.68838e-02 206 1.148154e+07 -6.84492e-02 207 1.174898e+07 -7.00503e-02 208 1.202264e+07 -7.16881e-02 209 1.230269e+07 -7.33635e-02 210 1.258925e+07 -7.50771e-02 211 1.288250e+07 -7.68300e-02 212 1.318257e+07 -7.86230e-02 213 1.348963e+07 -8.04570e-02 214 1.380384e+07 -8.23330e-02 215 1.412538e+07 -8.42518e-02 216 1.445440e+07 -8.62144e-02 217 1.479108e+07 -8.82219e-02 218 1.513561e+07 -9.02752e-02 219 1.548817e+07 -9.23753e-02 220 1.584893e+07 -9.45234e-02 221 1.621810e+07 -9.67204e-02 222 1.659587e+07 -9.89674e-02 223 1.698244e+07 -1.01265e-01 224 1.737801e+07 -1.03616e-01 225 1.778279e+07 -1.06020e-01 226 1.819701e+07 -1.08478e-01 227 1.862087e+07 -1.10992e-01 228 1.905461e+07 -1.13563e-01 Index frequency ph(i(vmeas)) ---------------------------------------------------------------- 229 1.949845e+07 -1.16193e-01 230 1.995262e+07 -1.18881e-01 231 2.041738e+07 -1.21631e-01 232 2.089296e+07 -1.24442e-01 233 2.137962e+07 -1.27317e-01 234 2.187762e+07 -1.30256e-01 235 2.238721e+07 -1.33262e-01 236 2.290868e+07 -1.36335e-01 237 2.344229e+07 -1.39476e-01 238 2.398833e+07 -1.42688e-01 239 2.454709e+07 -1.45972e-01 240 2.511886e+07 -1.49329e-01 241 2.570396e+07 -1.52760e-01 242 2.630268e+07 -1.56268e-01 243 2.691535e+07 -1.59853e-01 244 2.754229e+07 -1.63517e-01 245 2.818383e+07 -1.67262e-01 246 2.884032e+07 -1.71090e-01 247 2.951209e+07 -1.75001e-01 248 3.019952e+07 -1.78998e-01 249 3.090295e+07 -1.83082e-01 250 3.162278e+07 -1.87255e-01 251 3.235937e+07 -1.91518e-01 252 3.311311e+07 -1.95873e-01 253 3.388442e+07 -2.00322e-01 254 3.467369e+07 -2.04867e-01 255 3.548134e+07 -2.09508e-01 256 3.630781e+07 -2.14248e-01 257 3.715352e+07 -2.19089e-01 258 3.801894e+07 -2.24032e-01 259 3.890451e+07 -2.29078e-01 260 3.981072e+07 -2.34230e-01 261 4.073803e+07 -2.39490e-01 262 4.168694e+07 -2.44857e-01 263 4.265795e+07 -2.50336e-01 264 4.365158e+07 -2.55926e-01 265 4.466836e+07 -2.61630e-01 266 4.570882e+07 -2.67449e-01 267 4.677351e+07 -2.73385e-01 268 4.786301e+07 -2.79439e-01 269 4.897788e+07 -2.85613e-01 270 5.011872e+07 -2.91907e-01 271 5.128614e+07 -2.98325e-01 272 5.248075e+07 -3.04866e-01 273 5.370318e+07 -3.11532e-01 274 5.495409e+07 -3.18325e-01 275 5.623413e+07 -3.25245e-01 276 5.754399e+07 -3.32294e-01 277 5.888437e+07 -3.39472e-01 278 6.025596e+07 -3.46781e-01 279 6.165950e+07 -3.54221e-01 280 6.309573e+07 -3.61793e-01 281 6.456542e+07 -3.69498e-01 282 6.606934e+07 -3.77336e-01 283 6.760830e+07 -3.85307e-01 284 6.918310e+07 -3.93413e-01 285 7.079458e+07 -4.01652e-01 286 7.244360e+07 -4.10025e-01 Index frequency ph(i(vmeas)) ---------------------------------------------------------------- 287 7.413102e+07 -4.18532e-01 288 7.585776e+07 -4.27172e-01 289 7.762471e+07 -4.35945e-01 290 7.943282e+07 -4.44851e-01 291 8.128305e+07 -4.53888e-01 292 8.317638e+07 -4.63056e-01 293 8.511380e+07 -4.72354e-01 294 8.709636e+07 -4.81779e-01 295 8.912509e+07 -4.91331e-01 296 9.120108e+07 -5.01008e-01 297 9.332543e+07 -5.10808e-01 298 9.549926e+07 -5.20729e-01 299 9.772372e+07 -5.30768e-01 300 1.000000e+08 -5.40922e-01 301 1.023293e+08 -5.51190e-01 302 1.047129e+08 -5.61568e-01 303 1.071519e+08 -5.72053e-01 304 1.096478e+08 -5.82641e-01 305 1.122018e+08 -5.93330e-01 306 1.148154e+08 -6.04114e-01 307 1.174898e+08 -6.14990e-01 308 1.202264e+08 -6.25954e-01 309 1.230269e+08 -6.37001e-01 310 1.258925e+08 -6.48127e-01 311 1.288250e+08 -6.59327e-01 312 1.318257e+08 -6.70595e-01 313 1.348963e+08 -6.81928e-01 314 1.380384e+08 -6.93319e-01 315 1.412538e+08 -7.04763e-01 316 1.445440e+08 -7.16255e-01 317 1.479108e+08 -7.27789e-01 318 1.513561e+08 -7.39359e-01 319 1.548817e+08 -7.50960e-01 320 1.584893e+08 -7.62585e-01 321 1.621810e+08 -7.74228e-01 322 1.659587e+08 -7.85884e-01 323 1.698244e+08 -7.97547e-01 324 1.737801e+08 -8.09210e-01 325 1.778279e+08 -8.20868e-01 326 1.819701e+08 -8.32514e-01 327 1.862087e+08 -8.44143e-01 328 1.905461e+08 -8.55748e-01 329 1.949845e+08 -8.67324e-01 330 1.995262e+08 -8.78865e-01 331 2.041738e+08 -8.90366e-01 332 2.089296e+08 -9.01821e-01 333 2.137962e+08 -9.13225e-01 334 2.187762e+08 -9.24571e-01 335 2.238721e+08 -9.35856e-01 336 2.290868e+08 -9.47075e-01 337 2.344229e+08 -9.58222e-01 338 2.398833e+08 -9.69293e-01 339 2.454709e+08 -9.80284e-01 340 2.511886e+08 -9.91190e-01 341 2.570396e+08 -1.00201e+00 342 2.630268e+08 -1.01273e+00 343 2.691535e+08 -1.02336e+00 344 2.754229e+08 -1.03389e+00 Index frequency ph(i(vmeas)) -------------------------------------------------------------------------------- 345 2.818383e+08 -1.04432e+00 346 2.884032e+08 -1.05465e+00 347 2.951209e+08 -1.06486e+00 348 3.019952e+08 -1.07497e+00 349 3.090295e+08 -1.08496e+00 350 3.162278e+08 -1.09484e+00 351 3.235937e+08 -1.10460e+00 352 3.311311e+08 -1.11424e+00 353 3.388442e+08 -1.12376e+00 354 3.467369e+08 -1.13317e+00 355 3.548134e+08 -1.14245e+00 356 3.630781e+08 -1.15161e+00 357 3.715352e+08 -1.16064e+00 358 3.801894e+08 -1.16955e+00 359 3.890451e+08 -1.17834e+00 360 3.981072e+08 -1.18700e+00 361 4.073803e+08 -1.19554e+00 362 4.168694e+08 -1.20395e+00 363 4.265795e+08 -1.21224e+00 364 4.365158e+08 -1.22041e+00 365 4.466836e+08 -1.22845e+00 366 4.570882e+08 -1.23637e+00 367 4.677351e+08 -1.24417e+00 368 4.786301e+08 -1.25185e+00 369 4.897788e+08 -1.25941e+00 370 5.011872e+08 -1.26685e+00 371 5.128614e+08 -1.27417e+00 372 5.248075e+08 -1.28138e+00 373 5.370318e+08 -1.28847e+00 374 5.495409e+08 -1.29545e+00 375 5.623413e+08 -1.30232e+00 376 5.754399e+08 -1.30908e+00 377 5.888437e+08 -1.31573e+00 378 6.025596e+08 -1.32227e+00 379 6.165950e+08 -1.32870e+00 380 6.309573e+08 -1.33504e+00 381 6.456542e+08 -1.34127e+00 382 6.606934e+08 -1.34740e+00 383 6.760830e+08 -1.35344e+00 384 6.918310e+08 -1.35938e+00 385 7.079458e+08 -1.36522e+00 386 7.244360e+08 -1.37097e+00 387 7.413102e+08 -1.37663e+00 388 7.585776e+08 -1.38221e+00 389 7.762471e+08 -1.38770e+00 390 7.943282e+08 -1.39310e+00 391 8.128305e+08 -1.39842e+00 392 8.317638e+08 -1.40366e+00 393 8.511380e+08 -1.40883e+00 394 8.709636e+08 -1.41391e+00 395 8.912509e+08 -1.41892e+00 396 9.120108e+08 -1.42387e+00 397 9.332543e+08 -1.42874e+00 398 9.549926e+08 -1.43354e+00 399 9.772372e+08 -1.43827e+00 400 1.000000e+09 -1.44295e+00 401 1.023293e+09 -1.44756e+00 402 1.047129e+09 -1.45211e+00 Index frequency ph(i(vmeas)) -------------------------------------------------------------------------------- 403 1.071519e+09 -1.45660e+00 404 1.096478e+09 -1.46104e+00 405 1.122018e+09 -1.46542e+00 406 1.148154e+09 -1.46975e+00 407 1.174898e+09 -1.47403e+00 408 1.202264e+09 -1.47826e+00 409 1.230269e+09 -1.48244e+00 410 1.258925e+09 -1.48658e+00 411 1.288250e+09 -1.49068e+00 412 1.318257e+09 -1.49473e+00 413 1.348963e+09 -1.49875e+00 414 1.380384e+09 -1.50273e+00 415 1.412538e+09 -1.50668e+00 416 1.445440e+09 -1.51059e+00 417 1.479108e+09 -1.51447e+00 418 1.513561e+09 -1.51832e+00 419 1.548817e+09 -1.52214e+00 420 1.584893e+09 -1.52593e+00 421 1.621810e+09 -1.52970e+00 422 1.659587e+09 -1.53345e+00 423 1.698244e+09 -1.53718e+00 424 1.737801e+09 -1.54088e+00 425 1.778279e+09 -1.54457e+00 426 1.819701e+09 -1.54825e+00 427 1.862087e+09 -1.55190e+00 428 1.905461e+09 -1.55555e+00 429 1.949845e+09 -1.55918e+00 430 1.995262e+09 -1.56281e+00 431 2.041738e+09 -1.56642e+00 432 2.089296e+09 -1.57003e+00 433 2.137962e+09 -1.57364e+00 434 2.187762e+09 -1.57724e+00 435 2.238721e+09 -1.58084e+00 436 2.290868e+09 -1.58443e+00 437 2.344229e+09 -1.58803e+00 438 2.398833e+09 -1.59163e+00 439 2.454709e+09 -1.59524e+00 440 2.511886e+09 -1.59885e+00 441 2.570396e+09 -1.60247e+00 442 2.630268e+09 -1.60609e+00 443 2.691535e+09 -1.60972e+00 444 2.754229e+09 -1.61337e+00 445 2.818383e+09 -1.61702e+00 446 2.884032e+09 -1.62069e+00 447 2.951209e+09 -1.62437e+00 448 3.019952e+09 -1.62807e+00 449 3.090295e+09 -1.63178e+00 450 3.162278e+09 -1.63551e+00 451 3.235937e+09 -1.63926e+00 452 3.311311e+09 -1.64303e+00 453 3.388442e+09 -1.64682e+00 454 3.467369e+09 -1.65063e+00 455 3.548134e+09 -1.65447e+00 456 3.630781e+09 -1.65832e+00 457 3.715352e+09 -1.66221e+00 458 3.801894e+09 -1.66611e+00 459 3.890451e+09 -1.67005e+00 460 3.981072e+09 -1.67401e+00 Index frequency ph(i(vmeas)) -------------------------------------------------------------------------------- 461 4.073803e+09 -1.67800e+00 462 4.168694e+09 -1.68202e+00 463 4.265795e+09 -1.68606e+00 464 4.365158e+09 -1.69014e+00 465 4.466836e+09 -1.69425e+00 466 4.570882e+09 -1.69839e+00 467 4.677351e+09 -1.70256e+00 468 4.786301e+09 -1.70676e+00 469 4.897788e+09 -1.71099e+00 470 5.011872e+09 -1.71526e+00 471 5.128614e+09 -1.71957e+00 472 5.248075e+09 -1.72391e+00 473 5.370318e+09 -1.72828e+00 474 5.495409e+09 -1.73269e+00 475 5.623413e+09 -1.73713e+00 476 5.754399e+09 -1.74162e+00 477 5.888437e+09 -1.74614e+00 478 6.025596e+09 -1.75069e+00 479 6.165950e+09 -1.75529e+00 480 6.309573e+09 -1.75992e+00 481 6.456542e+09 -1.76459e+00 482 6.606934e+09 -1.76931e+00 483 6.760830e+09 -1.77406e+00 484 6.918310e+09 -1.77886e+00 485 7.079458e+09 -1.78369e+00 486 7.244360e+09 -1.78857e+00 487 7.413102e+09 -1.79350e+00 488 7.585776e+09 -1.79847e+00 489 7.762471e+09 -1.80348e+00 490 7.943282e+09 -1.80854e+00 491 8.128305e+09 -1.81365e+00 492 8.317638e+09 -1.81881e+00 493 8.511380e+09 -1.82402e+00 494 8.709636e+09 -1.82928e+00 495 8.912509e+09 -1.83459e+00 496 9.120108e+09 -1.83996e+00 497 9.332543e+09 -1.84538e+00 498 9.549926e+09 -1.85086e+00 499 9.772372e+09 -1.85640e+00 500 1.000000e+10 -1.86201e+00 VBIC Pole Zero Test Pole-Zero Analysis Sat Aug 27 16:37:49 2005 -------------------------------------------------------------------------------- Index pole(1) pole(2) -------------------------------------------------------------------------------- 0 -1.21476e+12, 0.000000e+00 -5.49313e+11, 0.000000e+00 VBIC Pole Zero Test Pole-Zero Analysis Sat Aug 27 16:37:49 2005 -------------------------------------------------------------------------------- Index pole(3) pole(4) -------------------------------------------------------------------------------- 0 -5.61225e+10, 0.000000e+00 -1.05516e+09, 0.000000e+00 VBIC Pole Zero Test Pole-Zero Analysis Sat Aug 27 16:37:49 2005 -------------------------------------------------------------------------------- Index pole(5) zero(1) -------------------------------------------------------------------------------- 0 -1.86198e+04, 0.000000e+00 -1.37017e+12, 0.000000e+00 VBIC Pole Zero Test Pole-Zero Analysis Sat Aug 27 16:37:49 2005 -------------------------------------------------------------------------------- Index zero(2) zero(3) -------------------------------------------------------------------------------- 0 -4.81757e+11, 0.000000e+00 -6.42036e+10, 0.000000e+00 VBIC Pole Zero Test Pole-Zero Analysis Sat Aug 27 16:37:49 2005 -------------------------------------------------------------------------------- Index zero(4) -------------------------------------------------------------------------------- 0 2.452403e+11, 0.000000e+00 CPU time since last call: 0.039 seconds. Total CPU time: 0.039 seconds. Current dynamic memory usage = 135168, Dynamic memory limit = -491521. tmpk8ny_4pz/tests/vbic/temp.cir0000644000175000017500000000073013546075722016711 0ustar carstencarstenVBIC Temp test V1 1 0 1.0 VC 1 Q1_C 0.0 VB 1 Q1_B 0.0 Q1 Q1_C Q1_B 0 N1 .OPTIONS TEMP=150 NOACCT .DC V1 0.2 1.2 10m .print dc i(vc) i(vb) .MODEL N1 NPN LEVEL=4 + IS=1e-16 IBEI=1e-18 IBEN=5e-15 IBCI=2e-17 IBCN=5e-15 ISP=1e-15 RCX=10 + RCI=60 RBX=10 RBI=40 RE=2 RS=20 RBP=40 VEF=10 VER=4 IKF=2e-3 ITF=8e-2 + XTF=20 IKR=2e-4 IKP=2e-4 CJE=1e-13 CJC=2e-14 CJEP=1e-13 CJCP=4e-13 VO=2 + GAMM=2e-11 HRCF=2 QCO=1e-12 AVC1=2 AVC2=15 TF=10e-12 TR=100e-12 TD=2e-11 RTH=300 .END tmpk8ny_4pz/tests/vbic/noise_scale_test.cir0000644000175000017500000000116313546075722021270 0ustar carstencarstenVBIC Noise Scale Test V1 R3_P 0 5 V2 V2_P 0 5 AC 1 C1 R3_N V2_P 1n R4 R3_N 0 100k Q1 VOUT R3_N Q1_E N1 M=2 *Q2 VOUT R3_N Q1_E N1 R1 R3_P VOUT 100k R2 Q1_E 0 10k R3 R3_P R3_N 500k .OPTIONS NOACCT .NOISE v(vout) V2 DEC 25 1k 100Meg .print noise v(inoise_spectrum) .MODEL N1 NPN LEVEL=4 + IS=1e-16 IBEI=1e-18 IBEN=5e-15 IBCI=2e-17 IBCN=5e-15 ISP=1e-15 RCX=10 + RCI=60 RBX=10 RBI=40 RE=2 RS=20 RBP=40 VEF=10 VER=4 IKF=2e-3 ITF=8e-2 + XTF=20 IKR=2e-4 IKP=2e-4 CJE=1e-13 CJC=2e-14 CJEP=1e-13 CJCP=4e-13 VO=2 + GAMM=2e-11 HRCF=2 QCO=1e-12 AVC1=2 AVC2=15 TF=10e-12 TR=100e-12 TD=2e-11 + RTH=300 KFN=10e-15 AFN=1 BFN=1 .END tmpk8ny_4pz/tests/vbic/FG.out0000644000175000017500000001137013546075722016274 0ustar carstencarsten No. of Data Rows : 101 Circuit: VBIC Gummel Test Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 VBIC Gummel Test -------------------------------------------------------------------------------- Index v-sweep abs(i(vc)) abs(i(vb)) -------------------------------------------------------------------------------- 0 2.000000e-01 2.166461e-13 2.760909e-13 1 2.100000e-01 2.998733e-13 3.251377e-13 2 2.200000e-01 4.670645e-13 3.954716e-13 3 2.300000e-01 6.857418e-13 4.747722e-13 4 2.400000e-01 1.006772e-12 5.711617e-13 5 2.500000e-01 1.478056e-12 6.885693e-13 6 2.600000e-01 2.169912e-12 8.318968e-13 7 2.700000e-01 3.185560e-12 1.007289e-12 8 2.800000e-01 4.676518e-12 1.222494e-12 9 2.900000e-01 6.865197e-12 1.487339e-12 10 3.000000e-01 1.007807e-11 1.814379e-12 11 3.100000e-01 1.479434e-11 2.219777e-12 12 3.200000e-01 2.171739e-11 2.724510e-12 13 3.300000e-01 3.187965e-11 3.356044e-12 14 3.400000e-01 4.679648e-11 4.150665e-12 15 3.500000e-01 6.869202e-11 5.156762e-12 16 3.600000e-01 1.008307e-10 6.439466e-12 17 3.700000e-01 1.480035e-10 8.087255e-12 18 3.800000e-01 2.172422e-10 1.022139e-11 19 3.900000e-01 3.188665e-10 1.300949e-11 20 4.000000e-01 4.680213e-10 1.668506e-11 21 4.100000e-01 6.869325e-10 2.157582e-11 22 4.200000e-01 1.008217e-09 2.814469e-11 23 4.300000e-01 1.479738e-09 3.704953e-11 24 4.400000e-01 2.171731e-09 4.923009e-11 25 4.500000e-01 3.187259e-09 6.603491e-11 26 4.600000e-01 4.677547e-09 8.940696e-11 27 4.700000e-01 6.864483e-09 1.221551e-10 28 4.800000e-01 1.007362e-08 1.683521e-10 29 4.900000e-01 1.478260e-08 2.339177e-10 30 5.000000e-01 2.169216e-08 3.274743e-10 31 5.100000e-01 3.183025e-08 4.616036e-10 32 5.200000e-01 4.670483e-08 6.546910e-10 33 5.300000e-01 6.852774e-08 9.336370e-10 34 5.400000e-01 1.005431e-07 1.337840e-09 35 5.500000e-01 1.475084e-07 1.925055e-09 36 5.600000e-01 2.164000e-07 2.780000e-09 37 5.700000e-01 3.174460e-07 4.027026e-09 38 5.800000e-01 4.656395e-07 5.848731e-09 39 5.900000e-01 6.829517e-07 8.513358e-09 40 6.000000e-01 1.001570e-06 1.241507e-08 41 6.100000e-01 1.468623e-06 1.813318e-08 42 6.200000e-01 2.153075e-06 2.651926e-08 43 6.300000e-01 3.155745e-06 3.882508e-08 44 6.400000e-01 4.623832e-06 5.689068e-08 45 6.500000e-01 6.771854e-06 8.342025e-08 46 6.600000e-01 9.911619e-06 1.223866e-07 47 6.700000e-01 1.449465e-05 1.796231e-07 48 6.800000e-01 2.117135e-05 2.636875e-07 49 6.900000e-01 3.087205e-05 3.871177e-07 50 7.000000e-01 4.491451e-05 5.682497e-07 51 7.100000e-01 6.513891e-05 8.338272e-07 52 7.200000e-01 9.406600e-05 1.222716e-06 53 7.300000e-01 1.350610e-04 1.791123e-06 54 7.400000e-01 1.924693e-04 2.619821e-06 Index v-sweep abs(i(vc)) abs(i(vb)) -------------------------------------------------------------------------------- 55 7.500000e-01 2.716749e-04 3.823960e-06 56 7.600000e-01 3.790340e-04 5.566125e-06 57 7.700000e-01 5.216676e-04 8.073288e-06 58 7.800000e-01 7.071489e-04 1.165820e-05 59 7.900000e-01 9.431650e-04 1.674542e-05 60 8.000000e-01 1.237225e-03 2.390139e-05 61 8.100000e-01 1.596430e-03 3.386679e-05 62 8.200000e-01 2.027266e-03 4.758760e-05 63 8.300000e-01 2.535370e-03 6.623937e-05 64 8.400000e-01 3.125228e-03 9.123753e-05 65 8.500000e-01 3.799832e-03 1.242260e-04 66 8.600000e-01 4.560345e-03 1.670382e-04 67 8.700000e-01 5.405842e-03 2.216290e-04 68 8.800000e-01 6.333207e-03 2.899816e-04 69 8.900000e-01 7.337161e-03 3.740089e-04 70 9.000000e-01 8.409662e-03 4.755838e-04 71 9.100000e-01 9.530275e-03 5.981207e-04 72 9.200000e-01 1.065019e-02 7.494897e-04 73 9.300000e-01 1.173652e-02 9.348061e-04 74 9.400000e-01 1.278289e-02 1.154720e-03 75 9.500000e-01 1.379386e-02 1.407320e-03 76 9.600000e-01 1.475701e-02 1.693557e-03 77 9.700000e-01 1.567850e-02 2.010583e-03 78 9.800000e-01 1.656023e-02 2.356226e-03 79 9.900000e-01 1.740153e-02 2.728815e-03 80 1.000000e+00 1.820273e-02 3.126576e-03 81 1.010000e+00 1.896466e-02 3.547751e-03 82 1.020000e+00 1.968840e-02 3.990671e-03 83 1.030000e+00 2.037519e-02 4.453766e-03 84 1.040000e+00 2.102645e-02 4.935571e-03 85 1.050000e+00 2.164369e-02 5.434724e-03 86 1.060000e+00 2.222849e-02 5.949968e-03 87 1.070000e+00 2.278245e-02 6.480140e-03 88 1.080000e+00 2.330717e-02 7.024169e-03 89 1.090000e+00 2.380426e-02 7.581071e-03 90 1.100000e+00 2.427528e-02 8.149937e-03 91 1.110000e+00 2.472175e-02 8.729934e-03 92 1.120000e+00 2.514512e-02 9.320294e-03 93 1.130000e+00 2.554680e-02 9.920312e-03 94 1.140000e+00 2.592813e-02 1.052934e-02 95 1.150000e+00 2.629037e-02 1.114678e-02 96 1.160000e+00 2.663473e-02 1.177207e-02 97 1.170000e+00 2.696233e-02 1.240473e-02 98 1.180000e+00 2.727425e-02 1.304427e-02 99 1.190000e+00 2.757147e-02 1.369026e-02 100 1.200000e+00 2.785494e-02 1.434232e-02 tmpk8ny_4pz/tests/vbic/temp.out0000644000175000017500000001136513546075722016751 0ustar carstencarsten No. of Data Rows : 101 Circuit: VBIC Temp test Doing analysis at TEMP = 423.150000 and TNOM = 300.150000 VBIC Temp test -------------------------------------------------------------------------------- Index v-sweep vc#branch vb#branch -------------------------------------------------------------------------------- 0 2.000000e-01 1.868249e-08 1.079689e-09 1 2.100000e-01 2.453418e-08 1.153221e-09 2 2.200000e-01 3.221038e-08 1.247754e-09 3 2.300000e-01 4.227973e-08 1.369766e-09 4 2.400000e-01 5.548800e-08 1.527717e-09 5 2.500000e-01 7.281323e-08 1.732674e-09 6 2.600000e-01 9.553798e-08 1.999129e-09 7 2.700000e-01 1.253441e-07 2.346079e-09 8 2.800000e-01 1.644367e-07 2.798443e-09 9 2.900000e-01 2.157072e-07 3.388919e-09 10 3.000000e-01 2.829459e-07 4.160429e-09 11 3.100000e-01 3.711216e-07 5.169337e-09 12 3.200000e-01 4.867465e-07 6.489673e-09 13 3.300000e-01 6.383548e-07 8.218687e-09 14 3.400000e-01 8.371283e-07 1.048415e-08 15 3.500000e-01 1.097714e-06 1.345398e-08 16 3.600000e-01 1.439291e-06 1.734884e-08 17 3.700000e-01 1.886967e-06 2.245873e-08 18 3.800000e-01 2.473592e-06 2.916484e-08 19 3.900000e-01 3.242119e-06 3.796820e-08 20 4.000000e-01 4.248673e-06 4.952732e-08 21 4.100000e-01 5.566512e-06 6.470771e-08 22 4.200000e-01 7.291143e-06 8.464678e-08 23 4.300000e-01 9.546875e-06 1.108391e-07 24 4.400000e-01 1.249517e-05 1.452480e-07 25 4.500000e-01 1.634521e-05 1.904521e-07 26 4.600000e-01 2.136704e-05 2.498366e-07 27 4.700000e-01 2.790785e-05 3.278434e-07 28 4.800000e-01 3.641147e-05 4.302969e-07 29 4.900000e-01 4.744139e-05 5.648281e-07 30 5.000000e-01 6.170667e-05 7.414238e-07 31 5.100000e-01 8.008980e-05 9.731369e-07 32 5.200000e-01 1.036773e-04 1.276999e-06 33 5.300000e-01 1.337890e-04 1.675189e-06 34 5.400000e-01 1.719999e-04 2.196519e-06 35 5.500000e-01 2.201527e-04 2.878315e-06 36 5.600000e-01 2.803579e-04 3.768776e-06 37 5.700000e-01 3.549791e-04 4.929914e-06 38 5.800000e-01 4.466032e-04 6.441185e-06 39 5.900000e-01 5.580024e-04 8.403926e-06 40 6.000000e-01 6.920914e-04 1.094672e-05 41 6.100000e-01 8.518886e-04 1.423179e-05 42 6.200000e-01 1.040483e-03 1.846243e-05 43 6.300000e-01 1.261007e-03 2.389158e-05 44 6.400000e-01 1.516613e-03 3.083127e-05 45 6.500000e-01 1.810446e-03 3.966278e-05 46 6.600000e-01 2.145602e-03 5.084699e-05 47 6.700000e-01 2.525072e-03 6.493424e-05 48 6.800000e-01 2.951665e-03 8.257291e-05 49 6.900000e-01 3.427908e-03 1.045161e-04 50 7.000000e-01 3.955907e-03 1.316270e-04 51 7.100000e-01 4.537133e-03 1.648896e-04 52 7.200000e-01 5.171970e-03 2.054502e-04 53 7.300000e-01 5.858746e-03 2.547448e-04 54 7.400000e-01 6.592797e-03 3.146449e-04 Index v-sweep vc#branch vb#branch -------------------------------------------------------------------------------- 55 7.500000e-01 7.367415e-03 3.873157e-04 56 7.600000e-01 8.175267e-03 4.749688e-04 57 7.700000e-01 9.009833e-03 5.795844e-04 58 7.800000e-01 9.865982e-03 7.027482e-04 59 7.900000e-01 1.073875e-02 8.457598e-04 60 8.000000e-01 1.162295e-02 1.009677e-03 61 8.100000e-01 1.251340e-02 1.195290e-03 62 8.200000e-01 1.340500e-02 1.403121e-03 63 8.300000e-01 1.429291e-02 1.633450e-03 64 8.400000e-01 1.517255e-02 1.886337e-03 65 8.500000e-01 1.603975e-02 2.161654e-03 66 8.600000e-01 1.689074e-02 2.459116e-03 67 8.700000e-01 1.772222e-02 2.778308e-03 68 8.800000e-01 1.853135e-02 3.118714e-03 69 8.900000e-01 1.931576e-02 3.479738e-03 70 9.000000e-01 2.007353e-02 3.860724e-03 71 9.100000e-01 2.080318e-02 4.260973e-03 72 9.200000e-01 2.150364e-02 4.679752e-03 73 9.300000e-01 2.217421e-02 5.116308e-03 74 9.400000e-01 2.281456e-02 5.569875e-03 75 9.500000e-01 2.342467e-02 6.039681e-03 76 9.600000e-01 2.400479e-02 6.524953e-03 77 9.700000e-01 2.455544e-02 7.024925e-03 78 9.800000e-01 2.507733e-02 7.538840e-03 79 9.900000e-01 2.557136e-02 8.065956e-03 80 1.000000e+00 2.603855e-02 8.605550e-03 81 1.010000e+00 2.648003e-02 9.156921e-03 82 1.020000e+00 2.689700e-02 9.719393e-03 83 1.030000e+00 2.729072e-02 1.029232e-02 84 1.040000e+00 2.766244e-02 1.087508e-02 85 1.050000e+00 2.801343e-02 1.146708e-02 86 1.060000e+00 2.834495e-02 1.206777e-02 87 1.070000e+00 2.865820e-02 1.267662e-02 88 1.080000e+00 2.895436e-02 1.329314e-02 89 1.090000e+00 2.923457e-02 1.391687e-02 90 1.100000e+00 2.949988e-02 1.454736e-02 91 1.110000e+00 2.975132e-02 1.518422e-02 92 1.120000e+00 2.998984e-02 1.582707e-02 93 1.130000e+00 3.021634e-02 1.647555e-02 94 1.140000e+00 3.043165e-02 1.712934e-02 95 1.150000e+00 3.063654e-02 1.778813e-02 96 1.160000e+00 3.083176e-02 1.845164e-02 97 1.170000e+00 3.101797e-02 1.911962e-02 98 1.180000e+00 3.119579e-02 1.979180e-02 99 1.190000e+00 3.136580e-02 2.046798e-02 100 1.200000e+00 3.152854e-02 2.114793e-02 tmpk8ny_4pz/tests/vbic/CEamp.cir0000644000175000017500000000111013546075722016722 0ustar carstencarstenVBIC Pole Zero Test Vcc 3 0 5 Rc 2 3 1k Rb 3 1 200k I1 0 1 AC 1 DC 0 Vmeas 4 2 DC 0 Cshunt 4 0 .1u Q1 2 1 0 0 N1 .OPTIONS NOACCT .ac dec 100 0.1Meg 10G .print ac db(i(vmeas)) .print ac ph(i(vmeas)) .pz 1 0 4 0 cur pz .print pz all .MODEL N1 NPN LEVEL=4 + IS=1e-16 IBEI=1e-18 IBEN=5e-15 IBCI=2e-17 IBCN=5e-15 ISP=1e-15 RCX=10 + RCI=60 RBX=10 RBI=40 RE=2 RS=20 RBP=40 VEF=10 VER=4 IKF=2e-3 ITF=8e-2 + XTF=20 IKR=2e-4 IKP=2e-4 CJE=1e-13 CJC=2e-14 CJEP=1e-13 CJCP=4e-13 VO=2 + GAMM=2e-11 HRCF=2 QCO=1e-12 AVC1=2 AVC2=15 TF=10e-12 TR=100e-12 TD=2e-11 RTH=300 .END tmpk8ny_4pz/tests/resistance/0000755000175000017500000000000013546075722016462 5ustar carstencarstentmpk8ny_4pz/tests/resistance/Makefile.am0000644000175000017500000000045413546075722020521 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = \ res_array.cir \ res_simple.cir \ res_partition.cir TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/resistance/res_partition.cir0000644000175000017500000000025713546075722022047 0ustar carstencarsten* Resistive partition with different ratios for AC/DC (Print V(2)) vin 1 0 DC 1V AC 1V r1 1 2 5K r2 2 0 5K ac=15k .options noacct .OP .AC DEC 10 1 10K .print ac v(2) .END tmpk8ny_4pz/tests/resistance/res_array.cir0000644000175000017500000000071113546075722021147 0ustar carstencarstenA paralled resistor array Vin 1 0 DC 1 SIN (0 1 100MEG 1NS 0.0) AC 1 VR1 1 2 DC 0 R1 2 0 10K VR2 1 3 DC 0 R2 3 0 10K ac=5K VR3 1 4 DC 0 R3 4 0 rmodel1 L=11u W=2u ac=2.5k VR4 1 5 DC 0 R4 5 0 10K ac=5k m=2 .model rmodel1 R RSH = 1000 NARROW = 1u VR5 1 6 DC 0 R5 6 0 10 ac=5 scale=1K .options noacct .OP .TRAN 1ns 10ns .AC DEC 100 1MEG 100MEG .PRINT TRAN I(VR1), I(VR2), I(VR3), I(VR4),I(VR5) .PRINT AC I(VR1), I(VR2), I(VR3), I(VR4),I(VR5) .END tmpk8ny_4pz/tests/resistance/res_simple.out0000644000175000017500000000507213546075722021361 0ustar carstencarsten Circuit: A simple resistor with a voltage source Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Initial Transient Solution -------------------------- Node Voltage ---- ------- 1 1 v1#branch -0.0001 No. of Data Rows : 60 A simple resistor with a voltage source -------------------------------------------------------------------------------- Index time v1#branch -------------------------------------------------------------------------------- 0 0.000000e+00 -1.000000e-04 1 3.000000e-13 -1.000000e-04 2 6.000000e-13 -1.000000e-04 3 1.200000e-12 -1.000000e-04 4 2.400000e-12 -1.000000e-04 5 4.800000e-12 -1.000000e-04 6 9.600000e-12 -1.000000e-04 7 1.920000e-11 -1.000000e-04 8 3.840000e-11 -1.000000e-04 9 7.680000e-11 -1.000000e-04 10 1.536000e-10 -1.000000e-04 11 2.736000e-10 -1.000000e-04 12 3.936000e-10 -1.000000e-04 13 5.136000e-10 -1.000000e-04 14 6.336000e-10 -1.000000e-04 15 7.536000e-10 -1.000000e-04 16 8.736000e-10 -1.000000e-04 17 9.936000e-10 -1.000000e-04 18 1.113600e-09 -1.000000e-04 19 1.233600e-09 -1.000000e-04 20 1.353600e-09 -1.000000e-04 21 1.473600e-09 -1.000000e-04 22 1.593600e-09 -1.000000e-04 23 1.713600e-09 -1.000000e-04 24 1.833600e-09 -1.000000e-04 25 1.953600e-09 -1.000000e-04 26 2.073600e-09 -1.000000e-04 27 2.193600e-09 -1.000000e-04 28 2.313600e-09 -1.000000e-04 29 2.433600e-09 -1.000000e-04 30 2.553600e-09 -1.000000e-04 31 2.673600e-09 -1.000000e-04 32 2.793600e-09 -1.000000e-04 33 2.913600e-09 -1.000000e-04 34 3.033600e-09 -1.000000e-04 35 3.153600e-09 -1.000000e-04 36 3.273600e-09 -1.000000e-04 37 3.393600e-09 -1.000000e-04 38 3.513600e-09 -1.000000e-04 39 3.633600e-09 -1.000000e-04 40 3.753600e-09 -1.000000e-04 41 3.873600e-09 -1.000000e-04 42 3.993600e-09 -1.000000e-04 43 4.113600e-09 -1.000000e-04 44 4.233600e-09 -1.000000e-04 45 4.353600e-09 -1.000000e-04 46 4.473600e-09 -1.000000e-04 47 4.593600e-09 -1.000000e-04 48 4.713600e-09 -1.000000e-04 49 4.833600e-09 -1.000000e-04 50 4.953600e-09 -1.000000e-04 51 5.073600e-09 -1.000000e-04 52 5.193600e-09 -1.000000e-04 53 5.313600e-09 -1.000000e-04 54 5.433600e-09 -1.000000e-04 Index time v1#branch -------------------------------------------------------------------------------- 55 5.553600e-09 -1.000000e-04 56 5.673600e-09 -1.000000e-04 57 5.793600e-09 -1.000000e-04 58 5.913600e-09 -1.000000e-04 59 6.000000e-09 -1.000000e-04 tmpk8ny_4pz/tests/resistance/res_simple.cir0000644000175000017500000000016713546075722021327 0ustar carstencarstenA simple resistor with a voltage source R1 1 0 10k V1 1 0 DC 1 .options noacct .TRAN 1ns 6ns .PRINT TRAN I(V1) .END tmpk8ny_4pz/tests/resistance/res_array.out0000644000175000017500000021752113546075722021212 0ustar carstencarsten No. of Data Rows : 201 No. of Data Rows : 1 Circuit: A paralled resistor array Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Initial Transient Solution -------------------------- Node Voltage ---- ------- 1 0 2 0 3 0 4 0 5 0 6 0 vr5#branch 0 vr4#branch 0 vr3#branch 0 vr2#branch 0 vr1#branch 0 vin#branch 0 No. of Data Rows : 60 Node Voltage ---- ------- ---- ------- V(6) 1.000000e+00 V(5) 1.000000e+00 V(4) 1.000000e+00 V(3) 1.000000e+00 V(2) 1.000000e+00 V(1) 1.000000e+00 Source Current ------ ------- vin#branch -5.90909e-04 vr1#branch 1.000000e-04 vr2#branch 1.000000e-04 vr3#branch 9.090909e-05 vr4#branch 2.000000e-04 vr5#branch 1.000000e-04 Resistor models (Simple linear resistor) model rmodel1 R rsh 1000 0 narrow 1e-06 0 short 0 0 tc1 0 0 tc2 0 0 defw 1e-05 1e-05 kf 0 0 af 0 0 Resistor: Simple linear resistor device r3 r5 r4 model rmodel1 R R resistance 11000 10 5000 ac 2500 5 2500 dtemp 0 0 0 noisy 1 1 1 i -5.3435e-05 -5.87785e-05 -0.000117557 p 3.14083e-05 3.45492e-05 6.90983e-05 Resistor: Simple linear resistor device r2 r1 model R R resistance 10000 10000 ac 5000 10000 dtemp 0 0 noisy 1 1 i -5.87785e-05 -5.87785e-05 p 3.45492e-05 3.45492e-05 Vsource: Independent voltage source device vr5 vr4 vr3 dc 0 0 0 acmag 0 0 0 i -5.87785e-05 -0.000117557 -5.3435e-05 p 0 0 0 Vsource: Independent voltage source device vr2 vr1 vin dc 0 0 1 acmag 0 0 1 i -5.87785e-05 -5.87785e-05 0.000347328 p 0 0 0.000204154 A paralled resistor array -------------------------------------------------------------------------------- Index time vr1#branch vr2#branch vr3#branch -------------------------------------------------------------------------------- 0 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1 5.000000e-13 0.000000e+00 0.000000e+00 0.000000e+00 2 1.000000e-12 0.000000e+00 0.000000e+00 0.000000e+00 3 2.000000e-12 0.000000e+00 0.000000e+00 0.000000e+00 4 4.000000e-12 0.000000e+00 0.000000e+00 0.000000e+00 5 8.000000e-12 0.000000e+00 0.000000e+00 0.000000e+00 6 1.600000e-11 0.000000e+00 0.000000e+00 0.000000e+00 7 3.200000e-11 0.000000e+00 0.000000e+00 0.000000e+00 8 6.400000e-11 0.000000e+00 0.000000e+00 0.000000e+00 9 1.280000e-10 0.000000e+00 0.000000e+00 0.000000e+00 10 2.560000e-10 0.000000e+00 0.000000e+00 0.000000e+00 11 4.560000e-10 0.000000e+00 0.000000e+00 0.000000e+00 12 6.560000e-10 0.000000e+00 0.000000e+00 0.000000e+00 13 8.560000e-10 0.000000e+00 0.000000e+00 0.000000e+00 14 1.056000e-09 3.517858e-06 3.517858e-06 3.198053e-06 15 1.256000e-09 1.601568e-05 1.601568e-05 1.455971e-05 16 1.456000e-09 2.826093e-05 2.826093e-05 2.569176e-05 17 1.656000e-09 4.006049e-05 4.006049e-05 3.641863e-05 18 1.856000e-09 5.122827e-05 5.122827e-05 4.657116e-05 19 2.056000e-09 6.158815e-05 6.158815e-05 5.598923e-05 20 2.256000e-09 7.097675e-05 7.097675e-05 6.452432e-05 21 2.456000e-09 7.924600e-05 7.924600e-05 7.204182e-05 22 2.656000e-09 8.626549e-05 8.626549e-05 7.842318e-05 23 2.856000e-09 9.192453e-05 9.192453e-05 8.356776e-05 24 3.056000e-09 9.613386e-05 9.613386e-05 8.739442e-05 25 3.256000e-09 9.882711e-05 9.882711e-05 8.984282e-05 26 3.456000e-09 9.996179e-05 9.996179e-05 9.087435e-05 27 3.656000e-09 9.952001e-05 9.952001e-05 9.047274e-05 28 3.856000e-09 9.750874e-05 9.750874e-05 8.864431e-05 29 4.056000e-09 9.395971e-05 9.395971e-05 8.541792e-05 30 4.256000e-09 8.892887e-05 8.892887e-05 8.084443e-05 31 4.456000e-09 8.249557e-05 8.249557e-05 7.499597e-05 32 4.656000e-09 7.476127e-05 7.476127e-05 6.796479e-05 33 4.856000e-09 6.584793e-05 6.584793e-05 5.986176e-05 34 5.056000e-09 5.589614e-05 5.589614e-05 5.081467e-05 35 5.256000e-09 4.506283e-05 4.506283e-05 4.096621e-05 36 5.456000e-09 3.351885e-05 3.351885e-05 3.047168e-05 37 5.656000e-09 2.144626e-05 2.144626e-05 1.949660e-05 38 5.856000e-09 9.035447e-06 9.035447e-06 8.214043e-06 39 6.056000e-09 -3.517858e-06 -3.517858e-06 -3.198053e-06 40 6.256000e-09 -1.601568e-05 -1.601568e-05 -1.455971e-05 41 6.456000e-09 -2.826093e-05 -2.826093e-05 -2.569176e-05 42 6.656000e-09 -4.006049e-05 -4.006049e-05 -3.641863e-05 43 6.856000e-09 -5.122827e-05 -5.122827e-05 -4.657116e-05 44 7.056000e-09 -6.158815e-05 -6.158815e-05 -5.598923e-05 45 7.256000e-09 -7.097675e-05 -7.097675e-05 -6.452432e-05 46 7.456000e-09 -7.924600e-05 -7.924600e-05 -7.204182e-05 47 7.656000e-09 -8.626549e-05 -8.626549e-05 -7.842318e-05 48 7.856000e-09 -9.192453e-05 -9.192453e-05 -8.356776e-05 49 8.056000e-09 -9.613386e-05 -9.613386e-05 -8.739442e-05 50 8.256000e-09 -9.882711e-05 -9.882711e-05 -8.984282e-05 51 8.456000e-09 -9.996179e-05 -9.996179e-05 -9.087435e-05 52 8.656000e-09 -9.952001e-05 -9.952001e-05 -9.047274e-05 53 8.856000e-09 -9.750874e-05 -9.750874e-05 -8.864431e-05 54 9.056000e-09 -9.395971e-05 -9.395971e-05 -8.541792e-05 Index time vr1#branch vr2#branch vr3#branch -------------------------------------------------------------------------------- 55 9.256000e-09 -8.892887e-05 -8.892887e-05 -8.084443e-05 56 9.456000e-09 -8.249557e-05 -8.249557e-05 -7.499597e-05 57 9.656000e-09 -7.476127e-05 -7.476127e-05 -6.796479e-05 58 9.856000e-09 -6.584793e-05 -6.584793e-05 -5.986176e-05 59 1.000000e-08 -5.877853e-05 -5.877853e-05 -5.343502e-05 A paralled resistor array -------------------------------------------------------------------------------- Index time vr4#branch vr5#branch -------------------------------------------------------------------------------- 0 0.000000e+00 0.000000e+00 0.000000e+00 1 5.000000e-13 0.000000e+00 0.000000e+00 2 1.000000e-12 0.000000e+00 0.000000e+00 3 2.000000e-12 0.000000e+00 0.000000e+00 4 4.000000e-12 0.000000e+00 0.000000e+00 5 8.000000e-12 0.000000e+00 0.000000e+00 6 1.600000e-11 0.000000e+00 0.000000e+00 7 3.200000e-11 0.000000e+00 0.000000e+00 8 6.400000e-11 0.000000e+00 0.000000e+00 9 1.280000e-10 0.000000e+00 0.000000e+00 10 2.560000e-10 0.000000e+00 0.000000e+00 11 4.560000e-10 0.000000e+00 0.000000e+00 12 6.560000e-10 0.000000e+00 0.000000e+00 13 8.560000e-10 0.000000e+00 0.000000e+00 14 1.056000e-09 7.035716e-06 3.517858e-06 15 1.256000e-09 3.203137e-05 1.601568e-05 16 1.456000e-09 5.652187e-05 2.826093e-05 17 1.656000e-09 8.012098e-05 4.006049e-05 18 1.856000e-09 1.024565e-04 5.122827e-05 19 2.056000e-09 1.231763e-04 6.158815e-05 20 2.256000e-09 1.419535e-04 7.097675e-05 21 2.456000e-09 1.584920e-04 7.924600e-05 22 2.656000e-09 1.725310e-04 8.626549e-05 23 2.856000e-09 1.838491e-04 9.192453e-05 24 3.056000e-09 1.922677e-04 9.613386e-05 25 3.256000e-09 1.976542e-04 9.882711e-05 26 3.456000e-09 1.999236e-04 9.996179e-05 27 3.656000e-09 1.990400e-04 9.952001e-05 28 3.856000e-09 1.950175e-04 9.750874e-05 29 4.056000e-09 1.879194e-04 9.395971e-05 30 4.256000e-09 1.778577e-04 8.892887e-05 31 4.456000e-09 1.649911e-04 8.249557e-05 32 4.656000e-09 1.495225e-04 7.476127e-05 33 4.856000e-09 1.316959e-04 6.584793e-05 34 5.056000e-09 1.117923e-04 5.589614e-05 35 5.256000e-09 9.012565e-05 4.506283e-05 36 5.456000e-09 6.703770e-05 3.351885e-05 37 5.656000e-09 4.289252e-05 2.144626e-05 38 5.856000e-09 1.807089e-05 9.035447e-06 39 6.056000e-09 -7.035716e-06 -3.517858e-06 40 6.256000e-09 -3.203137e-05 -1.601568e-05 41 6.456000e-09 -5.652187e-05 -2.826093e-05 42 6.656000e-09 -8.012098e-05 -4.006049e-05 43 6.856000e-09 -1.024565e-04 -5.122827e-05 44 7.056000e-09 -1.231763e-04 -6.158815e-05 45 7.256000e-09 -1.419535e-04 -7.097675e-05 46 7.456000e-09 -1.584920e-04 -7.924600e-05 47 7.656000e-09 -1.725310e-04 -8.626549e-05 48 7.856000e-09 -1.838491e-04 -9.192453e-05 49 8.056000e-09 -1.922677e-04 -9.613386e-05 50 8.256000e-09 -1.976542e-04 -9.882711e-05 51 8.456000e-09 -1.999236e-04 -9.996179e-05 52 8.656000e-09 -1.990400e-04 -9.952001e-05 53 8.856000e-09 -1.950175e-04 -9.750874e-05 54 9.056000e-09 -1.879194e-04 -9.395971e-05 Index time vr4#branch vr5#branch -------------------------------------------------------------------------------- 55 9.256000e-09 -1.778577e-04 -8.892887e-05 56 9.456000e-09 -1.649911e-04 -8.249557e-05 57 9.656000e-09 -1.495225e-04 -7.476127e-05 58 9.856000e-09 -1.316959e-04 -6.584793e-05 59 1.000000e-08 -1.175571e-04 -5.877853e-05 A paralled resistor array -------------------------------------------------------------------------------- Index frequency vr1#branch -------------------------------------------------------------------------------- 0 1.000000e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 1 1.023293e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 2 1.047129e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 3 1.071519e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 4 1.096478e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 5 1.122018e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 6 1.148154e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 7 1.174898e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 8 1.202264e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 9 1.230269e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 10 1.258925e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 11 1.288250e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 12 1.318257e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 13 1.348963e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 14 1.380384e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 15 1.412538e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 16 1.445440e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 17 1.479108e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 18 1.513561e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 19 1.548817e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 20 1.584893e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 21 1.621810e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 22 1.659587e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 23 1.698244e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 24 1.737801e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 25 1.778279e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 26 1.819701e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 27 1.862087e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 28 1.905461e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 29 1.949845e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 30 1.995262e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 31 2.041738e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 32 2.089296e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 33 2.137962e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 34 2.187762e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 35 2.238721e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 36 2.290868e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 37 2.344229e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 38 2.398833e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 39 2.454709e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 40 2.511886e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 41 2.570396e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 42 2.630268e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 43 2.691535e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 44 2.754229e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 45 2.818383e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 46 2.884032e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 47 2.951209e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 48 3.019952e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 49 3.090295e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 50 3.162278e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 51 3.235937e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 52 3.311311e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 53 3.388442e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 54 3.467369e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 Index frequency vr1#branch -------------------------------------------------------------------------------- 55 3.548134e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 56 3.630781e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 57 3.715352e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 58 3.801894e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 59 3.890451e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 60 3.981072e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 61 4.073803e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 62 4.168694e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 63 4.265795e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 64 4.365158e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 65 4.466836e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 66 4.570882e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 67 4.677351e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 68 4.786301e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 69 4.897788e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 70 5.011872e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 71 5.128614e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 72 5.248075e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 73 5.370318e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 74 5.495409e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 75 5.623413e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 76 5.754399e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 77 5.888437e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 78 6.025596e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 79 6.165950e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 80 6.309573e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 81 6.456542e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 82 6.606934e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 83 6.760830e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 84 6.918310e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 85 7.079458e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 86 7.244360e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 87 7.413102e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 88 7.585776e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 89 7.762471e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 90 7.943282e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 91 8.128305e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 92 8.317638e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 93 8.511380e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 94 8.709636e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 95 8.912509e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 96 9.120108e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 97 9.332543e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 98 9.549926e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 99 9.772372e+06, 0.000000e+00 1.000000e-04, 0.000000e+00 100 1.000000e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 101 1.023293e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 102 1.047129e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 103 1.071519e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 104 1.096478e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 105 1.122018e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 106 1.148154e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 107 1.174898e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 108 1.202264e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 109 1.230269e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 110 1.258925e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 111 1.288250e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 112 1.318257e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 Index frequency vr1#branch -------------------------------------------------------------------------------- 113 1.348963e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 114 1.380384e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 115 1.412538e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 116 1.445440e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 117 1.479108e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 118 1.513561e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 119 1.548817e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 120 1.584893e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 121 1.621810e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 122 1.659587e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 123 1.698244e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 124 1.737801e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 125 1.778279e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 126 1.819701e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 127 1.862087e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 128 1.905461e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 129 1.949845e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 130 1.995262e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 131 2.041738e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 132 2.089296e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 133 2.137962e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 134 2.187762e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 135 2.238721e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 136 2.290868e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 137 2.344229e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 138 2.398833e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 139 2.454709e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 140 2.511886e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 141 2.570396e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 142 2.630268e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 143 2.691535e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 144 2.754229e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 145 2.818383e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 146 2.884032e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 147 2.951209e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 148 3.019952e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 149 3.090295e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 150 3.162278e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 151 3.235937e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 152 3.311311e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 153 3.388442e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 154 3.467369e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 155 3.548134e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 156 3.630781e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 157 3.715352e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 158 3.801894e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 159 3.890451e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 160 3.981072e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 161 4.073803e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 162 4.168694e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 163 4.265795e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 164 4.365158e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 165 4.466836e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 166 4.570882e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 167 4.677351e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 168 4.786301e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 169 4.897788e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 170 5.011872e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 Index frequency vr1#branch -------------------------------------------------------------------------------- 171 5.128614e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 172 5.248075e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 173 5.370318e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 174 5.495409e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 175 5.623413e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 176 5.754399e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 177 5.888437e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 178 6.025596e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 179 6.165950e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 180 6.309573e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 181 6.456542e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 182 6.606934e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 183 6.760830e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 184 6.918310e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 185 7.079458e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 186 7.244360e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 187 7.413102e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 188 7.585776e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 189 7.762471e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 190 7.943282e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 191 8.128305e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 192 8.317638e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 193 8.511380e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 194 8.709636e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 195 8.912509e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 196 9.120108e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 197 9.332543e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 198 9.549926e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 199 9.772372e+07, 0.000000e+00 1.000000e-04, 0.000000e+00 200 1.000000e+08, 0.000000e+00 1.000000e-04, 0.000000e+00 A paralled resistor array -------------------------------------------------------------------------------- Index frequency vr2#branch -------------------------------------------------------------------------------- 0 1.000000e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 1 1.023293e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 2 1.047129e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 3 1.071519e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 4 1.096478e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 5 1.122018e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 6 1.148154e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 7 1.174898e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 8 1.202264e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 9 1.230269e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 10 1.258925e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 11 1.288250e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 12 1.318257e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 13 1.348963e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 14 1.380384e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 15 1.412538e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 16 1.445440e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 17 1.479108e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 18 1.513561e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 19 1.548817e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 20 1.584893e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 21 1.621810e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 22 1.659587e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 23 1.698244e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 24 1.737801e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 25 1.778279e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 26 1.819701e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 27 1.862087e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 28 1.905461e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 29 1.949845e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 30 1.995262e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 31 2.041738e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 32 2.089296e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 33 2.137962e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 34 2.187762e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 35 2.238721e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 36 2.290868e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 37 2.344229e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 38 2.398833e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 39 2.454709e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 40 2.511886e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 41 2.570396e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 42 2.630268e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 43 2.691535e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 44 2.754229e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 45 2.818383e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 46 2.884032e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 47 2.951209e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 48 3.019952e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 49 3.090295e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 50 3.162278e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 51 3.235937e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 52 3.311311e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 53 3.388442e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 54 3.467369e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 Index frequency vr2#branch -------------------------------------------------------------------------------- 55 3.548134e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 56 3.630781e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 57 3.715352e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 58 3.801894e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 59 3.890451e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 60 3.981072e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 61 4.073803e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 62 4.168694e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 63 4.265795e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 64 4.365158e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 65 4.466836e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 66 4.570882e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 67 4.677351e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 68 4.786301e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 69 4.897788e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 70 5.011872e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 71 5.128614e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 72 5.248075e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 73 5.370318e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 74 5.495409e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 75 5.623413e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 76 5.754399e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 77 5.888437e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 78 6.025596e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 79 6.165950e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 80 6.309573e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 81 6.456542e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 82 6.606934e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 83 6.760830e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 84 6.918310e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 85 7.079458e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 86 7.244360e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 87 7.413102e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 88 7.585776e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 89 7.762471e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 90 7.943282e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 91 8.128305e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 92 8.317638e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 93 8.511380e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 94 8.709636e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 95 8.912509e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 96 9.120108e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 97 9.332543e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 98 9.549926e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 99 9.772372e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 100 1.000000e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 101 1.023293e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 102 1.047129e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 103 1.071519e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 104 1.096478e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 105 1.122018e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 106 1.148154e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 107 1.174898e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 108 1.202264e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 109 1.230269e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 110 1.258925e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 111 1.288250e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 112 1.318257e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 Index frequency vr2#branch -------------------------------------------------------------------------------- 113 1.348963e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 114 1.380384e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 115 1.412538e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 116 1.445440e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 117 1.479108e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 118 1.513561e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 119 1.548817e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 120 1.584893e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 121 1.621810e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 122 1.659587e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 123 1.698244e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 124 1.737801e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 125 1.778279e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 126 1.819701e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 127 1.862087e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 128 1.905461e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 129 1.949845e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 130 1.995262e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 131 2.041738e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 132 2.089296e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 133 2.137962e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 134 2.187762e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 135 2.238721e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 136 2.290868e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 137 2.344229e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 138 2.398833e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 139 2.454709e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 140 2.511886e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 141 2.570396e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 142 2.630268e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 143 2.691535e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 144 2.754229e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 145 2.818383e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 146 2.884032e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 147 2.951209e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 148 3.019952e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 149 3.090295e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 150 3.162278e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 151 3.235937e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 152 3.311311e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 153 3.388442e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 154 3.467369e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 155 3.548134e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 156 3.630781e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 157 3.715352e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 158 3.801894e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 159 3.890451e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 160 3.981072e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 161 4.073803e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 162 4.168694e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 163 4.265795e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 164 4.365158e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 165 4.466836e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 166 4.570882e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 167 4.677351e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 168 4.786301e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 169 4.897788e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 170 5.011872e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 Index frequency vr2#branch -------------------------------------------------------------------------------- 171 5.128614e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 172 5.248075e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 173 5.370318e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 174 5.495409e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 175 5.623413e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 176 5.754399e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 177 5.888437e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 178 6.025596e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 179 6.165950e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 180 6.309573e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 181 6.456542e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 182 6.606934e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 183 6.760830e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 184 6.918310e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 185 7.079458e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 186 7.244360e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 187 7.413102e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 188 7.585776e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 189 7.762471e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 190 7.943282e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 191 8.128305e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 192 8.317638e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 193 8.511380e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 194 8.709636e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 195 8.912509e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 196 9.120108e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 197 9.332543e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 198 9.549926e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 199 9.772372e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 200 1.000000e+08, 0.000000e+00 2.000000e-04, 0.000000e+00 A paralled resistor array -------------------------------------------------------------------------------- Index frequency vr3#branch -------------------------------------------------------------------------------- 0 1.000000e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 1 1.023293e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 2 1.047129e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 3 1.071519e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 4 1.096478e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 5 1.122018e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 6 1.148154e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 7 1.174898e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 8 1.202264e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 9 1.230269e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 10 1.258925e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 11 1.288250e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 12 1.318257e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 13 1.348963e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 14 1.380384e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 15 1.412538e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 16 1.445440e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 17 1.479108e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 18 1.513561e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 19 1.548817e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 20 1.584893e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 21 1.621810e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 22 1.659587e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 23 1.698244e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 24 1.737801e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 25 1.778279e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 26 1.819701e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 27 1.862087e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 28 1.905461e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 29 1.949845e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 30 1.995262e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 31 2.041738e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 32 2.089296e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 33 2.137962e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 34 2.187762e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 35 2.238721e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 36 2.290868e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 37 2.344229e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 38 2.398833e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 39 2.454709e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 40 2.511886e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 41 2.570396e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 42 2.630268e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 43 2.691535e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 44 2.754229e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 45 2.818383e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 46 2.884032e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 47 2.951209e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 48 3.019952e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 49 3.090295e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 50 3.162278e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 51 3.235937e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 52 3.311311e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 53 3.388442e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 54 3.467369e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 Index frequency vr3#branch -------------------------------------------------------------------------------- 55 3.548134e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 56 3.630781e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 57 3.715352e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 58 3.801894e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 59 3.890451e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 60 3.981072e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 61 4.073803e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 62 4.168694e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 63 4.265795e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 64 4.365158e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 65 4.466836e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 66 4.570882e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 67 4.677351e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 68 4.786301e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 69 4.897788e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 70 5.011872e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 71 5.128614e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 72 5.248075e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 73 5.370318e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 74 5.495409e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 75 5.623413e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 76 5.754399e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 77 5.888437e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 78 6.025596e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 79 6.165950e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 80 6.309573e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 81 6.456542e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 82 6.606934e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 83 6.760830e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 84 6.918310e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 85 7.079458e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 86 7.244360e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 87 7.413102e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 88 7.585776e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 89 7.762471e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 90 7.943282e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 91 8.128305e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 92 8.317638e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 93 8.511380e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 94 8.709636e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 95 8.912509e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 96 9.120108e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 97 9.332543e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 98 9.549926e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 99 9.772372e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 100 1.000000e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 101 1.023293e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 102 1.047129e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 103 1.071519e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 104 1.096478e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 105 1.122018e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 106 1.148154e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 107 1.174898e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 108 1.202264e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 109 1.230269e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 110 1.258925e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 111 1.288250e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 112 1.318257e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 Index frequency vr3#branch -------------------------------------------------------------------------------- 113 1.348963e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 114 1.380384e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 115 1.412538e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 116 1.445440e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 117 1.479108e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 118 1.513561e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 119 1.548817e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 120 1.584893e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 121 1.621810e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 122 1.659587e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 123 1.698244e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 124 1.737801e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 125 1.778279e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 126 1.819701e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 127 1.862087e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 128 1.905461e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 129 1.949845e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 130 1.995262e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 131 2.041738e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 132 2.089296e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 133 2.137962e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 134 2.187762e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 135 2.238721e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 136 2.290868e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 137 2.344229e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 138 2.398833e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 139 2.454709e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 140 2.511886e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 141 2.570396e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 142 2.630268e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 143 2.691535e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 144 2.754229e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 145 2.818383e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 146 2.884032e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 147 2.951209e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 148 3.019952e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 149 3.090295e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 150 3.162278e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 151 3.235937e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 152 3.311311e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 153 3.388442e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 154 3.467369e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 155 3.548134e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 156 3.630781e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 157 3.715352e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 158 3.801894e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 159 3.890451e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 160 3.981072e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 161 4.073803e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 162 4.168694e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 163 4.265795e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 164 4.365158e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 165 4.466836e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 166 4.570882e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 167 4.677351e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 168 4.786301e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 169 4.897788e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 170 5.011872e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 Index frequency vr3#branch -------------------------------------------------------------------------------- 171 5.128614e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 172 5.248075e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 173 5.370318e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 174 5.495409e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 175 5.623413e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 176 5.754399e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 177 5.888437e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 178 6.025596e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 179 6.165950e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 180 6.309573e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 181 6.456542e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 182 6.606934e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 183 6.760830e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 184 6.918310e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 185 7.079458e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 186 7.244360e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 187 7.413102e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 188 7.585776e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 189 7.762471e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 190 7.943282e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 191 8.128305e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 192 8.317638e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 193 8.511380e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 194 8.709636e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 195 8.912509e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 196 9.120108e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 197 9.332543e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 198 9.549926e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 199 9.772372e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 200 1.000000e+08, 0.000000e+00 4.000000e-04, 0.000000e+00 A paralled resistor array -------------------------------------------------------------------------------- Index frequency vr4#branch -------------------------------------------------------------------------------- 0 1.000000e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 1 1.023293e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 2 1.047129e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 3 1.071519e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 4 1.096478e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 5 1.122018e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 6 1.148154e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 7 1.174898e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 8 1.202264e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 9 1.230269e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 10 1.258925e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 11 1.288250e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 12 1.318257e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 13 1.348963e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 14 1.380384e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 15 1.412538e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 16 1.445440e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 17 1.479108e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 18 1.513561e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 19 1.548817e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 20 1.584893e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 21 1.621810e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 22 1.659587e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 23 1.698244e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 24 1.737801e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 25 1.778279e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 26 1.819701e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 27 1.862087e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 28 1.905461e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 29 1.949845e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 30 1.995262e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 31 2.041738e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 32 2.089296e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 33 2.137962e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 34 2.187762e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 35 2.238721e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 36 2.290868e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 37 2.344229e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 38 2.398833e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 39 2.454709e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 40 2.511886e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 41 2.570396e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 42 2.630268e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 43 2.691535e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 44 2.754229e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 45 2.818383e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 46 2.884032e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 47 2.951209e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 48 3.019952e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 49 3.090295e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 50 3.162278e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 51 3.235937e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 52 3.311311e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 53 3.388442e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 54 3.467369e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 Index frequency vr4#branch -------------------------------------------------------------------------------- 55 3.548134e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 56 3.630781e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 57 3.715352e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 58 3.801894e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 59 3.890451e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 60 3.981072e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 61 4.073803e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 62 4.168694e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 63 4.265795e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 64 4.365158e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 65 4.466836e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 66 4.570882e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 67 4.677351e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 68 4.786301e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 69 4.897788e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 70 5.011872e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 71 5.128614e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 72 5.248075e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 73 5.370318e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 74 5.495409e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 75 5.623413e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 76 5.754399e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 77 5.888437e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 78 6.025596e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 79 6.165950e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 80 6.309573e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 81 6.456542e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 82 6.606934e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 83 6.760830e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 84 6.918310e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 85 7.079458e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 86 7.244360e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 87 7.413102e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 88 7.585776e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 89 7.762471e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 90 7.943282e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 91 8.128305e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 92 8.317638e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 93 8.511380e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 94 8.709636e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 95 8.912509e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 96 9.120108e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 97 9.332543e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 98 9.549926e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 99 9.772372e+06, 0.000000e+00 4.000000e-04, 0.000000e+00 100 1.000000e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 101 1.023293e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 102 1.047129e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 103 1.071519e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 104 1.096478e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 105 1.122018e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 106 1.148154e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 107 1.174898e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 108 1.202264e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 109 1.230269e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 110 1.258925e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 111 1.288250e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 112 1.318257e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 Index frequency vr4#branch -------------------------------------------------------------------------------- 113 1.348963e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 114 1.380384e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 115 1.412538e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 116 1.445440e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 117 1.479108e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 118 1.513561e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 119 1.548817e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 120 1.584893e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 121 1.621810e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 122 1.659587e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 123 1.698244e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 124 1.737801e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 125 1.778279e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 126 1.819701e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 127 1.862087e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 128 1.905461e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 129 1.949845e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 130 1.995262e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 131 2.041738e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 132 2.089296e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 133 2.137962e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 134 2.187762e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 135 2.238721e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 136 2.290868e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 137 2.344229e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 138 2.398833e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 139 2.454709e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 140 2.511886e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 141 2.570396e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 142 2.630268e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 143 2.691535e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 144 2.754229e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 145 2.818383e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 146 2.884032e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 147 2.951209e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 148 3.019952e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 149 3.090295e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 150 3.162278e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 151 3.235937e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 152 3.311311e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 153 3.388442e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 154 3.467369e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 155 3.548134e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 156 3.630781e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 157 3.715352e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 158 3.801894e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 159 3.890451e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 160 3.981072e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 161 4.073803e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 162 4.168694e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 163 4.265795e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 164 4.365158e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 165 4.466836e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 166 4.570882e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 167 4.677351e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 168 4.786301e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 169 4.897788e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 170 5.011872e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 Index frequency vr4#branch -------------------------------------------------------------------------------- 171 5.128614e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 172 5.248075e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 173 5.370318e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 174 5.495409e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 175 5.623413e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 176 5.754399e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 177 5.888437e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 178 6.025596e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 179 6.165950e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 180 6.309573e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 181 6.456542e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 182 6.606934e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 183 6.760830e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 184 6.918310e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 185 7.079458e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 186 7.244360e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 187 7.413102e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 188 7.585776e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 189 7.762471e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 190 7.943282e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 191 8.128305e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 192 8.317638e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 193 8.511380e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 194 8.709636e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 195 8.912509e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 196 9.120108e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 197 9.332543e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 198 9.549926e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 199 9.772372e+07, 0.000000e+00 4.000000e-04, 0.000000e+00 200 1.000000e+08, 0.000000e+00 4.000000e-04, 0.000000e+00 A paralled resistor array -------------------------------------------------------------------------------- Index frequency vr5#branch -------------------------------------------------------------------------------- 0 1.000000e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 1 1.023293e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 2 1.047129e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 3 1.071519e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 4 1.096478e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 5 1.122018e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 6 1.148154e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 7 1.174898e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 8 1.202264e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 9 1.230269e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 10 1.258925e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 11 1.288250e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 12 1.318257e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 13 1.348963e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 14 1.380384e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 15 1.412538e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 16 1.445440e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 17 1.479108e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 18 1.513561e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 19 1.548817e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 20 1.584893e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 21 1.621810e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 22 1.659587e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 23 1.698244e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 24 1.737801e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 25 1.778279e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 26 1.819701e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 27 1.862087e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 28 1.905461e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 29 1.949845e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 30 1.995262e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 31 2.041738e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 32 2.089296e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 33 2.137962e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 34 2.187762e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 35 2.238721e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 36 2.290868e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 37 2.344229e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 38 2.398833e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 39 2.454709e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 40 2.511886e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 41 2.570396e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 42 2.630268e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 43 2.691535e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 44 2.754229e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 45 2.818383e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 46 2.884032e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 47 2.951209e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 48 3.019952e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 49 3.090295e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 50 3.162278e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 51 3.235937e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 52 3.311311e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 53 3.388442e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 54 3.467369e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 Index frequency vr5#branch -------------------------------------------------------------------------------- 55 3.548134e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 56 3.630781e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 57 3.715352e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 58 3.801894e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 59 3.890451e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 60 3.981072e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 61 4.073803e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 62 4.168694e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 63 4.265795e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 64 4.365158e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 65 4.466836e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 66 4.570882e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 67 4.677351e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 68 4.786301e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 69 4.897788e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 70 5.011872e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 71 5.128614e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 72 5.248075e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 73 5.370318e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 74 5.495409e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 75 5.623413e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 76 5.754399e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 77 5.888437e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 78 6.025596e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 79 6.165950e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 80 6.309573e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 81 6.456542e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 82 6.606934e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 83 6.760830e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 84 6.918310e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 85 7.079458e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 86 7.244360e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 87 7.413102e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 88 7.585776e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 89 7.762471e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 90 7.943282e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 91 8.128305e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 92 8.317638e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 93 8.511380e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 94 8.709636e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 95 8.912509e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 96 9.120108e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 97 9.332543e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 98 9.549926e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 99 9.772372e+06, 0.000000e+00 2.000000e-04, 0.000000e+00 100 1.000000e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 101 1.023293e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 102 1.047129e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 103 1.071519e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 104 1.096478e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 105 1.122018e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 106 1.148154e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 107 1.174898e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 108 1.202264e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 109 1.230269e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 110 1.258925e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 111 1.288250e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 112 1.318257e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 Index frequency vr5#branch -------------------------------------------------------------------------------- 113 1.348963e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 114 1.380384e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 115 1.412538e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 116 1.445440e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 117 1.479108e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 118 1.513561e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 119 1.548817e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 120 1.584893e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 121 1.621810e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 122 1.659587e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 123 1.698244e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 124 1.737801e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 125 1.778279e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 126 1.819701e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 127 1.862087e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 128 1.905461e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 129 1.949845e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 130 1.995262e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 131 2.041738e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 132 2.089296e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 133 2.137962e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 134 2.187762e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 135 2.238721e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 136 2.290868e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 137 2.344229e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 138 2.398833e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 139 2.454709e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 140 2.511886e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 141 2.570396e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 142 2.630268e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 143 2.691535e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 144 2.754229e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 145 2.818383e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 146 2.884032e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 147 2.951209e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 148 3.019952e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 149 3.090295e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 150 3.162278e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 151 3.235937e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 152 3.311311e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 153 3.388442e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 154 3.467369e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 155 3.548134e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 156 3.630781e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 157 3.715352e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 158 3.801894e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 159 3.890451e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 160 3.981072e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 161 4.073803e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 162 4.168694e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 163 4.265795e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 164 4.365158e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 165 4.466836e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 166 4.570882e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 167 4.677351e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 168 4.786301e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 169 4.897788e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 170 5.011872e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 Index frequency vr5#branch -------------------------------------------------------------------------------- 171 5.128614e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 172 5.248075e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 173 5.370318e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 174 5.495409e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 175 5.623413e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 176 5.754399e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 177 5.888437e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 178 6.025596e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 179 6.165950e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 180 6.309573e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 181 6.456542e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 182 6.606934e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 183 6.760830e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 184 6.918310e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 185 7.079458e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 186 7.244360e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 187 7.413102e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 188 7.585776e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 189 7.762471e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 190 7.943282e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 191 8.128305e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 192 8.317638e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 193 8.511380e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 194 8.709636e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 195 8.912509e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 196 9.120108e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 197 9.332543e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 198 9.549926e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 199 9.772372e+07, 0.000000e+00 2.000000e-04, 0.000000e+00 200 1.000000e+08, 0.000000e+00 2.000000e-04, 0.000000e+00 tmpk8ny_4pz/tests/resistance/res_partition.out0000644000175000017500000001013313546075722022073 0ustar carstencarsten No. of Data Rows : 41 No. of Data Rows : 1 Circuit: * Resistive partition with different ratios for AC/DC (Print V(2)) Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Node Voltage ---- ------- ---- ------- V(2) 5.000000e-01 V(1) 1.000000e+00 Source Current ------ ------- vin#branch -1.00000e-04 Resistor models (Simple linear resistor) model R rsh 0 narrow 0 short 0 tc1 0 tc2 0 defw 1e-05 kf 0 af 0 Resistor: Simple linear resistor device r2 r1 model R R resistance 5000 5000 ac 15000 5000 dtemp 0 0 noisy 1 1 i 0.0001 0.0001 p 5e-05 5e-05 Vsource: Independent voltage source device vin dc 1 acmag 1 i -0.0001 p 0.0001 * Resistive partition with different ratios for AC/DC (Print V(2)) -------------------------------------------------------------------------------- Index frequency v(2) -------------------------------------------------------------------------------- 0 1.000000e+00, 0.000000e+00 7.500000e-01, 0.000000e+00 1 1.258925e+00, 0.000000e+00 7.500000e-01, 0.000000e+00 2 1.584893e+00, 0.000000e+00 7.500000e-01, 0.000000e+00 3 1.995262e+00, 0.000000e+00 7.500000e-01, 0.000000e+00 4 2.511886e+00, 0.000000e+00 7.500000e-01, 0.000000e+00 5 3.162278e+00, 0.000000e+00 7.500000e-01, 0.000000e+00 6 3.981072e+00, 0.000000e+00 7.500000e-01, 0.000000e+00 7 5.011872e+00, 0.000000e+00 7.500000e-01, 0.000000e+00 8 6.309573e+00, 0.000000e+00 7.500000e-01, 0.000000e+00 9 7.943282e+00, 0.000000e+00 7.500000e-01, 0.000000e+00 10 1.000000e+01, 0.000000e+00 7.500000e-01, 0.000000e+00 11 1.258925e+01, 0.000000e+00 7.500000e-01, 0.000000e+00 12 1.584893e+01, 0.000000e+00 7.500000e-01, 0.000000e+00 13 1.995262e+01, 0.000000e+00 7.500000e-01, 0.000000e+00 14 2.511886e+01, 0.000000e+00 7.500000e-01, 0.000000e+00 15 3.162278e+01, 0.000000e+00 7.500000e-01, 0.000000e+00 16 3.981072e+01, 0.000000e+00 7.500000e-01, 0.000000e+00 17 5.011872e+01, 0.000000e+00 7.500000e-01, 0.000000e+00 18 6.309573e+01, 0.000000e+00 7.500000e-01, 0.000000e+00 19 7.943282e+01, 0.000000e+00 7.500000e-01, 0.000000e+00 20 1.000000e+02, 0.000000e+00 7.500000e-01, 0.000000e+00 21 1.258925e+02, 0.000000e+00 7.500000e-01, 0.000000e+00 22 1.584893e+02, 0.000000e+00 7.500000e-01, 0.000000e+00 23 1.995262e+02, 0.000000e+00 7.500000e-01, 0.000000e+00 24 2.511886e+02, 0.000000e+00 7.500000e-01, 0.000000e+00 25 3.162278e+02, 0.000000e+00 7.500000e-01, 0.000000e+00 26 3.981072e+02, 0.000000e+00 7.500000e-01, 0.000000e+00 27 5.011872e+02, 0.000000e+00 7.500000e-01, 0.000000e+00 28 6.309573e+02, 0.000000e+00 7.500000e-01, 0.000000e+00 29 7.943282e+02, 0.000000e+00 7.500000e-01, 0.000000e+00 30 1.000000e+03, 0.000000e+00 7.500000e-01, 0.000000e+00 31 1.258925e+03, 0.000000e+00 7.500000e-01, 0.000000e+00 32 1.584893e+03, 0.000000e+00 7.500000e-01, 0.000000e+00 33 1.995262e+03, 0.000000e+00 7.500000e-01, 0.000000e+00 34 2.511886e+03, 0.000000e+00 7.500000e-01, 0.000000e+00 35 3.162278e+03, 0.000000e+00 7.500000e-01, 0.000000e+00 36 3.981072e+03, 0.000000e+00 7.500000e-01, 0.000000e+00 37 5.011872e+03, 0.000000e+00 7.500000e-01, 0.000000e+00 38 6.309573e+03, 0.000000e+00 7.500000e-01, 0.000000e+00 39 7.943282e+03, 0.000000e+00 7.500000e-01, 0.000000e+00 40 1.000000e+04, 0.000000e+00 7.500000e-01, 0.000000e+00 tmpk8ny_4pz/tests/filters/0000755000175000017500000000000013546075722015772 5ustar carstencarstentmpk8ny_4pz/tests/filters/Makefile.am0000644000175000017500000000040113546075722020021 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = \ lowpass.cir TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/filters/lowpass.cir0000644000175000017500000000026713546075722020166 0ustar carstencarstenA Simple AC Run .OPTIONS LIST NODE POST TRANS noacct .OP .AC DEC 10 1k 1Meg .PRINT AC V(2) V1 1 0 DC 0 AC 1 SIN 0 1 1K 0 0 DISTOF1 0 DISTOF2 0 R1 1 2 10k R2 2 0 10k C1 2 0 1n .END tmpk8ny_4pz/tests/filters/lowpass.out0000644000175000017500000001056213546075722020217 0ustar carstencarsten No. of Data Rows : 31 No. of Data Rows : 1 Circuit: A Simple AC Run Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 a simple ac run .op .ac dec 10 1k 1meg v1 1 0 dc 0 ac 1 sin 0 1 1k 0 0 distof1 0 distof2 0 r1 1 2 10k r2 2 0 10k c1 2 0 1n .options list node post trans .end Node Voltage ---- ------- ---- ------- V(2) 0.000000e+00 V(1) 0.000000e+00 Source Current ------ ------- v1#branch 0.000000e+00 Capacitor models (Fixed capacitor) model C cap 0 cj 0 cjsw 0 defw 1e-05 defl 0 narrow 0 short 0 tc1 0 tc2 0 di 0 thick 0 Resistor models (Simple linear resistor) model R rsh 0 narrow 0 short 0 tc1 0 tc2 0 defw 1e-05 kf 0 af 0 Capacitor: Fixed capacitor device c1 model C capacitance 1e-09 cap 1e-09 c 1e-09 dtemp 0 i 0 p 0 Resistor: Simple linear resistor device r2 r1 model R R resistance 10000 10000 ac 10000 10000 dtemp 0 0 noisy 1 1 i 0 0 p 0 0 Vsource: Independent voltage source device v1 dc 0 acmag 1 i 0 p -0 A Simple AC Run -------------------------------------------------------------------------------- Index frequency v(2) -------------------------------------------------------------------------------- 0 1.000000e+03, 0.000000e+00 4.995070e-01, -1.569248e-02 1 1.258925e+03, 0.000000e+00 4.992191e-01, -1.974427e-02 2 1.584893e+03, 0.000000e+00 4.987635e-01, -2.483388e-02 3 1.995262e+03, 0.000000e+00 4.980431e-01, -3.121884e-02 4 2.511886e+03, 0.000000e+00 4.969056e-01, -3.921243e-02 5 3.162278e+03, 0.000000e+00 4.951134e-01, -4.918748e-02 6 3.981072e+03, 0.000000e+00 4.922993e-01, -6.157141e-02 7 5.011872e+03, 0.000000e+00 4.879042e-01, -7.682179e-02 8 6.309573e+03, 0.000000e+00 4.810969e-01, -9.536356e-02 9 7.943282e+03, 0.000000e+00 4.706888e-01, -1.174583e-01 10 1.000000e+04, 0.000000e+00 4.550849e-01, -1.429691e-01 11 1.258925e+04, 0.000000e+00 4.323679e-01, -1.710028e-01 12 1.584893e+04, 0.000000e+00 4.006689e-01, -1.994966e-01 13 1.995262e+04, 0.000000e+00 3.589592e-01, -2.250064e-01 14 2.511886e+04, 0.000000e+00 3.081227e-01, -2.431496e-01 15 3.162278e+04, 0.000000e+00 2.516406e-01, -2.499946e-01 16 3.981072e+04, 0.000000e+00 1.949905e-01, -2.438728e-01 17 5.011872e+04, 0.000000e+00 1.437140e-01, -2.262814e-01 18 6.309573e+04, 0.000000e+00 1.014372e-01, -2.010698e-01 19 7.943282e+04, 0.000000e+00 6.918213e-02, -1.726410e-01 20 1.000000e+05, 0.000000e+00 4.599983e-02, -1.445127e-01 21 1.258925e+05, 0.000000e+00 3.004398e-02, -1.188249e-01 22 1.584893e+05, 0.000000e+00 1.938636e-02, -9.652642e-02 23 1.995262e+05, 0.000000e+00 1.240953e-02, -7.778670e-02 24 2.511886e+05, 0.000000e+00 7.902266e-03, -6.235934e-02 25 3.162278e+05, 0.000000e+00 5.015244e-03, -4.982439e-02 26 3.981072e+05, 0.000000e+00 3.176162e-03, -3.972396e-02 27 5.011872e+05, 0.000000e+00 2.008732e-03, -3.162801e-02 28 6.309573e+05, 0.000000e+00 1.269306e-03, -2.516032e-02 29 7.943282e+05, 0.000000e+00 8.016290e-04, -2.000430e-02 30 1.000000e+06, 0.000000e+00 5.060931e-04, -1.589938e-02 tmpk8ny_4pz/tests/.gitignore0000644000175000017500000000011313546075722016305 0ustar carstencarsten*.test *.log *.out ngspiceCkt hspiceCkt /xspice/digital/spinit results/ tmpk8ny_4pz/tests/jfet/0000755000175000017500000000000013546075722015252 5ustar carstencarstentmpk8ny_4pz/tests/jfet/Makefile.am0000644000175000017500000000040413546075722017304 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = jfet_vds-vgs.cir TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ $(TESTS:.cir=.out) MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/tests/jfet/jfet_vds-vgs.out0000644000175000017500000001272713546075722020415 0ustar carstencarsten Circuit: * I-V Characteristics of JFET 2N4221 Doing analysis at TEMP = 300.150000 and TNOM = 300.150000 Node Voltage ---- ------- ---- ------- V(1) -2.00000e+00 V(2) 2.500000e+01 Source Current ------ ------- vd#branch -9.68268e-04 vg#branch 2.882635e-11 JFET models (Junction Field effect transistor) model modj type njf vt0 -3.5 beta 0.00041 lambda 0.002 rd 200 rs 0 cgs 0 cgd 0 pb 1 is 1e-14 fc 0.5 b 1 kf 2.51987e-312 af 2.51987e-312 JFET: Junction Field effect transistor device j1 model modj vgs -2 vgd -26.8063 ig -2.88263e-11 id 0.000968268 is -0.000968268 igd -2.68163e-11 gm 0.00129102 gds 1.845e-06 ggs 1e-12 ggd 1e-12 Vsource: Independent voltage source device vg vd dc -2 25 acmag 0 0 i 2.88263e-11 -0.000968268 p 5.76527e-11 0.0242067 * I-V Characteristics of JFET 2N4221 DC transfer characteristic Sat Aug 27 16:23:28 2005 -------------------------------------------------------------------------------- Index v-sweep vd#branch -------------------------------------------------------------------------------- 0 0.000000e+00 -2.781885e-12 1 1.000000e+00 -1.027008e-04 2 2.000000e+00 -1.029058e-04 3 3.000000e+00 -1.031108e-04 4 4.000000e+00 -1.033158e-04 5 5.000000e+00 -1.035208e-04 6 6.000000e+00 -1.037258e-04 7 7.000000e+00 -1.039307e-04 8 8.000000e+00 -1.041357e-04 9 9.000000e+00 -1.043407e-04 10 1.000000e+01 -1.045457e-04 11 1.100000e+01 -1.047507e-04 12 1.200000e+01 -1.049557e-04 13 1.300000e+01 -1.051607e-04 14 1.400000e+01 -1.053657e-04 15 1.500000e+01 -1.055707e-04 16 1.600000e+01 -1.057757e-04 17 1.700000e+01 -1.059807e-04 18 1.800000e+01 -1.061857e-04 19 1.900000e+01 -1.063907e-04 20 2.000000e+01 -1.065957e-04 21 2.100000e+01 -1.068006e-04 22 2.200000e+01 -1.070056e-04 23 2.300000e+01 -1.072106e-04 24 2.400000e+01 -1.074156e-04 25 2.500000e+01 -1.076206e-04 26 0.000000e+00 -1.613162e-12 27 1.000000e+00 -7.504957e-04 28 2.000000e+00 -9.258484e-04 29 3.000000e+00 -9.276927e-04 30 4.000000e+00 -9.295370e-04 31 5.000000e+00 -9.313813e-04 32 6.000000e+00 -9.332256e-04 33 7.000000e+00 -9.350700e-04 34 8.000000e+00 -9.369143e-04 35 9.000000e+00 -9.387586e-04 36 1.000000e+01 -9.406029e-04 37 1.100000e+01 -9.424472e-04 38 1.200000e+01 -9.442916e-04 39 1.300000e+01 -9.461359e-04 40 1.400000e+01 -9.479802e-04 41 1.500000e+01 -9.498245e-04 42 1.600000e+01 -9.516689e-04 43 1.700000e+01 -9.535132e-04 44 1.800000e+01 -9.553575e-04 45 1.900000e+01 -9.572018e-04 46 2.000000e+01 -9.590461e-04 47 2.100000e+01 -9.608905e-04 48 2.200000e+01 -9.627348e-04 49 2.300000e+01 -9.645791e-04 50 2.400000e+01 -9.664234e-04 51 2.500000e+01 -9.682677e-04 52 0.000000e+00 -7.163119e-13 53 1.000000e+00 -1.295970e-03 54 2.000000e+00 -2.206134e-03 Index v-sweep vd#branch -------------------------------------------------------------------------------- 55 3.000000e+00 -2.575143e-03 56 4.000000e+00 -2.580355e-03 57 5.000000e+00 -2.585475e-03 58 6.000000e+00 -2.590595e-03 59 7.000000e+00 -2.595714e-03 60 8.000000e+00 -2.600834e-03 61 9.000000e+00 -2.605954e-03 62 1.000000e+01 -2.611074e-03 63 1.100000e+01 -2.616193e-03 64 1.200000e+01 -2.621313e-03 65 1.300000e+01 -2.626433e-03 66 1.400000e+01 -2.631553e-03 67 1.500000e+01 -2.636672e-03 68 1.600000e+01 -2.641792e-03 69 1.700000e+01 -2.646912e-03 70 1.800000e+01 -2.652032e-03 71 1.900000e+01 -2.657151e-03 72 2.000000e+01 -2.662271e-03 73 2.100000e+01 -2.667391e-03 74 2.200000e+01 -2.672511e-03 75 2.300000e+01 -2.677630e-03 76 2.400000e+01 -2.682750e-03 77 2.500000e+01 -2.687870e-03 78 0.000000e+00 -5.309914e-28 79 1.000000e+00 -1.712315e-03 80 2.000000e+00 -3.166366e-03 81 3.000000e+00 -4.287135e-03 82 4.000000e+00 -4.956515e-03 83 5.000000e+00 -5.062554e-03 84 6.000000e+00 -5.072579e-03 85 7.000000e+00 -5.082604e-03 86 8.000000e+00 -5.092629e-03 87 9.000000e+00 -5.102654e-03 88 1.000000e+01 -5.112679e-03 89 1.100000e+01 -5.122703e-03 90 1.200000e+01 -5.132728e-03 91 1.300000e+01 -5.142753e-03 92 1.400000e+01 -5.152778e-03 93 1.500000e+01 -5.162803e-03 94 1.600000e+01 -5.172828e-03 95 1.700000e+01 -5.182853e-03 96 1.800000e+01 -5.192878e-03 97 1.900000e+01 -5.202902e-03 98 2.000000e+01 -5.212927e-03 99 2.100000e+01 -5.222952e-03 100 2.200000e+01 -5.232977e-03 101 2.300000e+01 -5.243002e-03 102 2.400000e+01 -5.253027e-03 103 2.500000e+01 -5.263052e-03 CPU time since last call: 0.014 seconds. Total CPU time: 0.014 seconds. Current dynamic memory usage = 131072, Dynamic memory limit = -491521. tmpk8ny_4pz/tests/jfet/jfet_vds-vgs.cir0000644000175000017500000000032113546075722020346 0ustar carstencarsten* I-V Characteristics of JFET 2N4221 * * j1 2 1 0 MODJ VD 2 0 25 VG 1 0 -2 * .model MODJ NJF LEVEL=1 VTO=-3.5 BETA=4.1E-4 LAMBDA=0.002 RD=200 * .options noacct .op .dc VD 0 25 1 VG -3 0 1 .print DC I(VD) .END tmpk8ny_4pz/compile_min.sh0000755000175000017500000000671513546075722016023 0ustar carstencarsten#!/bin/bash # ngspice build script for MINGW-w64, release version, 32 or 64 bit # compile_min.sh #Procedure: # Install MSYS, plus bison, flex, auto tools, perl, libiconv, libintl # Install MINGW-w64, activate OpenMP support # See either http://mingw-w64.sourceforge.net/ or http://tdm-gcc.tdragon.net/ # (allows to generate either 32 or 64 bit executables by setting flag -m32 or -m64) # set path to compiler in msys/xx/etc/fstab (e.g. c:/MinGW64 /mingw) # start compiling with # './compile_min.sh' or './compile_min.sh 64' # As an (more recent) alternative install MSYS2 and the tools cited above. # Options: # --adms and --enable-adms will install extra HICUM, EKV and MEXTRAM models via the # adms interface. # Please see http://ngspice.sourceforge.net/admshowto.html for more info on adms. # CIDER, XSPICE, and OpenMP may be selected at will. # --disable-debug will give O2 optimization (versus O0 for debug) and removes all debugging info. # --enable-oldapps will make ngnutmeg ngsconvert ngproc2mod ngmultidec ngmakeidx in addition to ngspice # ngspice as shared library: # Replace --with-wingui by --with-ngshared in line ../configure ... . # Add (optionally) --enable-relpath to avoid absolute paths when searching for code models. # It might be necessary to uncomment and run ./autogen.sh . if test "$1" = "64"; then if [ ! -d "release64" ]; then mkdir release64 if [ $? -ne 0 ]; then echo "mkdir release64 failed"; exit 1 ; fi fi else if [ ! -d "release" ]; then mkdir release if [ $? -ne 0 ]; then echo "mkdir release failed"; exit 1 ; fi fi fi # If compiling sources from git, you may need to uncomment the following two lines: #./autogen.sh #if [ $? -ne 0 ]; then echo "./autogen.sh failed"; exit 1 ; fi # Alternatively, if compiling sources from git, and want to add adms created devices, # you may need to uncomment the following two lines (and don't forget to add adms option # to the ../configure statement): #./autogen.sh --adms #if [ $? -ne 0 ]; then echo "./autogen.sh failed"; exit 1 ; fi echo if test "$1" = "64"; then cd release64 if [ $? -ne 0 ]; then echo "cd release64 failed"; exit 1 ; fi echo "configuring for 64 bit" echo # You may add --enable-adms to the following command for adding adms generated devices ../configure --with-wingui --enable-xspice --enable-cider --enable-openmp --disable-debug prefix="C:/Spice64" CFLAGS="-m64 -O2" LDFLAGS="-m64 -s" else cd release if [ $? -ne 0 ]; then echo "cd release failed"; exit 1 ; fi echo "configuring for 32 bit" echo # You may add --enable-adms to the following command for adding adms generated devices ../configure --with-wingui --enable-xspice --enable-cider --enable-openmp --disable-debug prefix="C:/Spice" CFLAGS="-m32 -O2" LDFLAGS="-m32 -s" fi if [ $? -ne 0 ]; then echo "../configure failed"; exit 1 ; fi echo # make clean is required for properly making the code models echo "cleaning (see make_clean.log)" make clean 2>&1 -j8 | tee make_clean.log exitcode=${PIPESTATUS[0]} if [ $exitcode -ne 0 ]; then echo "make clean failed"; exit 1 ; fi echo "compiling (see make.log)" make 2>&1 -j8 | tee make.log exitcode=${PIPESTATUS[0]} if [ $exitcode -ne 0 ]; then echo "make failed"; exit 1 ; fi # 32 bit: Install to C:\Spice # 64 bit: Install to C:\Spice64 echo "installing (see make_install.log)" make install 2>&1 | tee make_install.log exitcode=${PIPESTATUS[0]} if [ $exitcode -ne 0 ]; then echo "make install failed"; exit 1 ; fi echo "success" exit 0 tmpk8ny_4pz/.clang-format0000644000175000017500000000715013546075722015536 0ustar carstencarsten# Initially made using # clang-format -style=llvm -dump-config > .clang-format # Then lines were modified to get the desired results # # Incorporate these options by adding the flag -style=file # and putting this file in the directory of the file being formatted or # one of its parent directories # # See http://clang.llvm.org/docs/ClangFormat.html for usage and # http://clang.llvm.org/docs/ClangFormatStyleOptions.html for options # --- Language: Cpp # BasedOnStyle: LLVM AccessModifierOffset: 0 AlignAfterOpenBracket: DontAlign AlignConsecutiveAssignments: false AlignConsecutiveDeclarations: false AlignEscapedNewlinesLeft: false AlignOperands: false AlignTrailingComments: false AllowAllParametersOfDeclarationOnNextLine: false AllowShortBlocksOnASingleLine: false AllowShortCaseLabelsOnASingleLine: false AllowShortFunctionsOnASingleLine: None AllowShortIfStatementsOnASingleLine: false AllowShortLoopsOnASingleLine: false AlwaysBreakAfterDefinitionReturnType: None AlwaysBreakAfterReturnType: None AlwaysBreakBeforeMultilineStrings: false AlwaysBreakTemplateDeclarations: false BinPackArguments: true BinPackParameters: true BreakBeforeBraces: Custom BraceWrapping: AfterClass: false AfterControlStatement: false AfterEnum: false AfterFunction: true AfterNamespace: false AfterObjCDeclaration: false AfterStruct: false AfterUnion: false BeforeCatch: false BeforeElse: true IndentBraces: false BreakAfterJavaFieldAnnotations: false BreakBeforeBinaryOperators: None BreakBeforeBraces: Custom BreakBeforeTernaryOperators: false BreakConstructorInitializersBeforeComma: false BreakStringLiterals: true ColumnLimit: 78 CommentPragmas: '^ IWYU pragma:' # not sure what this should be ConstructorInitializerAllOnOneLineOrOnePerLine: false ConstructorInitializerIndentWidth: 4 ContinuationIndentWidth: 8 Cpp11BracedListStyle: true DerivePointerAlignment: false DisableFormat: false ExperimentalAutoDetectBinPacking: false ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] IncludeCategories: # need to consider more - Regex: '^"(llvm|llvm-c|clang|clang-c)/' Priority: 2 - Regex: '^(<|"(gtest|isl|json)/)' Priority: 3 - Regex: '.*' Priority: 1 IncludeIsMainRegex: '$' IndentCaseLabels: true IndentWidth: 4 IndentWrappedFunctionNames: false JavaScriptQuotes: Leave JavaScriptWrapImports: true KeepEmptyLinesAtTheStartOfBlocks: true MacroBlockBegin: '' MacroBlockEnd: '' MaxEmptyLinesToKeep: 4 NamespaceIndentation: None ObjCBlockIndentWidth: 2 # Not applicable (N/A) ObjCSpaceAfterProperty: false # N/A ObjCSpaceBeforeProtocolList: true # N/A PenaltyBreakBeforeFirstCallParameter: 19 # 19 was the original value PenaltyBreakComment: 300 # 300 was the original value PenaltyBreakFirstLessLess: 120 # 120 was the original value PenaltyBreakString: 1000 # 1000 was the original value PenaltyExcessCharacter: 10000000 # 1000000 was the original value PenaltyReturnTypeOnItsOwnLine: 60 # 60 was the original value PointerAlignment: Right ReflowComments: true SortIncludes: true SpaceAfterCStyleCast: true SpaceBeforeAssignmentOperators: true SpaceBeforeParens: ControlStatements SpaceInEmptyParentheses: false SpacesBeforeTrailingComments: 1 SpacesInAngles: false SpacesInContainerLiterals: true # N/A SpacesInCStyleCastParentheses: false SpacesInParentheses: false SpacesInSquareBrackets: false Standard: Cpp11 TabWidth: 8 # N/A since not using tabs UseTab: Never # ... generated by the command here. Not sure why tmpk8ny_4pz/configure.ac0000644000175000017500000013074413546075722015457 0ustar carstencarsten# configure.ac script for ngspice # # This file is part of ngspice. # # (Process this file with autoconf to produce a configure script.) # # This configure file has been updated to mostly follow the guidence in the # GNU Autoconf manual for version 2.59 # Initialisation # --------------- # Initialisation of configure AC_INIT([ngspice], [31], [http://ngspice.sourceforge.net/bugrep.html]) # Unique file in the source directory AC_CONFIG_SRCDIR([src/ngspice.c]) # Ensure a recent version of Autoconf is in use # Older versions may not work with this script and this will report the # problem to the user. (2.52 is a guess and might need some adjustment) AC_PREREQ([2.59]) # Revison stamp the generated ./configure script AC_REVISION([$Revision$]) # Create a configuration header AC_CONFIG_HEADER([src/include/ngspice/config.h]) # Initialise automake stuff AM_INIT_AUTOMAKE([-Wall -Werror nostdinc serial-tests]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) ext_CFLAGS="${CFLAGS+yes}" AC_PROG_CC AX_PROG_CC_FOR_BUILD m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) AC_SUBST([AM_CPPFLAGS], ['-I. -I$(srcdir) -I$(top_builddir)/src/include']) AC_CONFIG_MACRO_DIR([m4]) # Package Options # --------------- # --disable-debug: remove -g and -Wall option to the compiler AC_ARG_ENABLE([debug], [AS_HELP_STRING([--disable-debug], [Remove -g option for compilation (default is -g)])]) # --enable-oldapps: define OLDAPPS AC_ARG_ENABLE([oldapps], [AS_HELP_STRING([--enable-oldapps], [Enable making old, outdated apps.])]) # --enable-xspice: define XSPICE in the code. This is for xspice support AC_ARG_ENABLE([xspice], [AS_HELP_STRING([--enable-xspice], [Enable XSPICE enhancements])]) # --enable-cider: define CIDER in the code. This is for CIDER support AC_ARG_ENABLE([cider], [AS_HELP_STRING([--enable-cider], [Enable CIDER enhancements])]) # --enable-adms: define ADMS in the code. This is for the adms Verilog-A compiler support AC_ARG_ENABLE([adms], [AS_HELP_STRING([--enable-adms], [Enable ADMS code models, (experimental)])]) # --enable-pss: enable PSS Analysis AC_ARG_ENABLE([pss], [AS_HELP_STRING([--enable-pss], [Enable PSS Analysis, (experimental)])]) # --enable-relpath: Relative path for binary and data. Default is "no". # ngspice shared may want relative paths for spinit etc. AC_ARG_ENABLE([relpath], [AS_HELP_STRING([--enable-relpath], [Enable relative paths for spinit etc. Default=no])]) # --with-readline: Includes GNU readline support into CLI. Default is "no". AC_ARG_WITH([readline], [AS_HELP_STRING([--with-readline[=yes/no]], [Enable GNU readline support for CLI. Default=no.])]) # --with-editline: Includes BSD Editline support into CLI. Default is "no". AC_ARG_WITH([editline], [AS_HELP_STRING([--with-editline[=yes/no]], [Enable BSD editline support for CLI. Default=no.])]) # --with-tcl: define TCL_MODULE in the code. This is for tcl support AC_ARG_WITH([tcl], [AS_HELP_STRING([--with-tcl=tcldir], [Compiles the tcl module instead, experimental, see README.tcl])]) # --with-ngshared: define SHARED_MODULE in the code. This is for ngspice as shared library (or dll) AC_ARG_WITH([ngshared], [AS_HELP_STRING([--with-ngshared], [Compiles ngspice as shared library (dll)])]) # old options, not maintained, may even not work at all # --enable-ansi: try to force --ansi option to the compiler AC_ARG_ENABLE([ansi], [AS_HELP_STRING([--enable-ansi], [Force --ansi option for compilation])]) # --enable-gprof: add -pg option to the compiler (GCC) AC_ARG_ENABLE([gprof], [AS_HELP_STRING([--enable-gprof], [Produce gprof profiling data in 'gmon.out' (GCC only).])]) # --enable-nobypass: define NOBYPASS for the code AC_ARG_ENABLE([nobypass], [AS_HELP_STRING([--enable-nobypass], [Don't bypass recalculations of slowly changing variables])]) # --enable-capbypass: define CAPBYPASS for the code AC_ARG_ENABLE([capbypass], [AS_HELP_STRING([--enable-capbypass], [Bypass calculation of cbd/cbs in the mosfets if the vbs/vbd voltages are unchanged])]) # --enable-nodelimiting: define NODELIMITING for the code AC_ARG_ENABLE([nodelimiting], [AS_HELP_STRING([--enable-nodelimiting], [Experimental damping scheme.])]) # --enable-predictor: define PREDICTOR for the code AC_ARG_ENABLE([predictor], [AS_HELP_STRING([--enable-predictor], [Enable a predictor method for convergence.])]) # --enable-newpred: define NEWPRED for the code AC_ARG_ENABLE([newpred], [AS_HELP_STRING([--enable-newpred], [Enable NEWPRED whatever it is(?)])]) # --enable-newtrunc: define NEWTRUNC for the code AC_ARG_ENABLE([newtrunc], [AS_HELP_STRING([--enable-newtrunc], [Enable, how we want extrapolate capacitances.])]) # --enable-sense2: define WANT_SENSE2 for the code AC_ARG_ENABLE([sense2], [AS_HELP_STRING([--enable-sense2], [Use spice2 sensitivity analysis.])]) # --enable-ftedebug: enable frontend debug macros AC_ARG_ENABLE([ftedebug], [AS_HELP_STRING([--enable-ftedebug], [Enable ngspice frontend debug])]) # --enable-cpdebug: enable frontend debug macros AC_ARG_ENABLE([cpdebug], [AS_HELP_STRING([--enable-cpdebug], [Enable ngspice shell debug])]) # --enable-sensdebug: define SENSDEBUG for the code AC_ARG_ENABLE([sensdebug], [AS_HELP_STRING([--enable-sensdebug], [Debug sensitivity code *SENSDEBUG*])]) # --enable-asdebug: define ASDEBUG for the code AC_ARG_ENABLE([asdebug], [AS_HELP_STRING([--enable-asdebug], [Debug sensitivity code *ASDEBUG*])]) # --enable-stepdebug: define STEPDEBUG for the code AC_ARG_ENABLE([stepdebug], [AS_HELP_STRING([--enable-stepdebug], [Unknown debug option])]) # --enable-pzdebug: define PZDEBUG for the code AC_ARG_ENABLE([pzdebug], [AS_HELP_STRING([--enable-pzdebug], [Debug pole/zero code])]) # --enable-blktmsdebug: define D_DBG_BLOCKTIMES for the code AC_ARG_ENABLE([blktmsdebug], [AS_HELP_STRING([--enable-blktmsdebug], [Debug distortion code *BLOCKTIMES*])]) # --enable-smltmsdebug: define D_DBG_SMALLTIMES for the code AC_ARG_ENABLE([smltmsdebug], [AS_HELP_STRING([--enable-smltmsdebug], [Debug distortion code *SMALLTIMES*])]) # --enable-smoketest: a smoketest AC_ARG_ENABLE([smoketest], [AS_HELP_STRING([--enable-smoketest], [Enable smoketest compile])]) # --enable-experimental: define EXPERIMENTAL_CODE for the code AC_ARG_ENABLE([experimental], [AS_HELP_STRING([--enable-experimental], [Enable some experimental code])]) # --enable-expdevices: Enable the compilation of experimental devices AC_ARG_ENABLE([expdevices], [AS_HELP_STRING([--enable-expdevices], [Enable experimental devices (they do not compile)])]) # --enable-ndev: define NDEV in the code. An interface for external device i.e. numerical device AC_ARG_ENABLE([ndev], [AS_HELP_STRING([--enable-ndev], [Enable NDEV interface, (experimental)])]) # --enable-cluster: define CLUSTER in the code. This is for cluster support AC_ARG_ENABLE([cluster], [AS_HELP_STRING([--enable-cluster], [Enable cluster support, (experimental)])]) # --enable-help: try to force --ansi option to the compiler AC_ARG_ENABLE([help], [AS_HELP_STRING([--enable-help], [Force building nghelp (deprecated)])]) # --with-fftw3: Use fftw3 for Fourier transforms. Default is "yes". AC_ARG_WITH([fftw3], [AS_HELP_STRING([--with-fftw3[=yes/no]], [Use fftw3 for Fourier transforms. Default=yes.])]) # readline and editline cannot both be enabled if test "x$with_editline" = xyes; then if test "x$with_readline" = xyes; then AC_MSG_ERROR([Readline and editline cannot both be enabled]) fi fi # Enable maintainer commands only if requested AM_MAINTAINER_MODE([enable]) # Compiler checks # --------------- # Work on compiler options according to system: # Set default CFLAGS - only use -Wall if we have gcc # the above AC_PROG_CC may set CFLAGS to "-O2 -g" if test "x$ext_CFLAGS" != xyes; then if test "x$enable_debug" = xno; then AC_MSG_WARN([Removing debugging option!]) if test "x$GCC" = xyes; then CFLAGS="-O2 -s" else CFLAGS="-O2" fi else AC_DEFINE([NGDEBUG], [1], [Compile with debug info]) if test "x$GCC" = xyes; then CFLAGS="-g -O1" else CFLAGS="-g" fi fi if test "x$GCC" = xyes; then CFLAGS="$CFLAGS -Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs -Wold-style-definition -Wredundant-decls -Wconversion -Wno-unused-but-set-variable" fi fi # the profiling option if test "x$enable_gprof" = xyes; then # Probably other compilers support -pg or something similar; # feel free to extend this to include them. if test "x$GCC" = xyes; then if test "x$enable_shared" = xyes ; then AC_MSG_ERROR([Can't have --enable-gprof without --disable-shared (we recommend also using --enable-all-static).]) fi if test "x$enable_static" != xyes ; then AC_MSG_WARN([We recommend --enable-static with --enable-gprof.]) fi AC_MSG_NOTICE([Enabling gprof profiling data (to gmon.out).]) CFLAGS="$CFLAGS -pg" LDFLAGS="$LDFLAGS -pg" else AC_MSG_ERROR([We only support --enable-gprof with GCC right now.]) fi fi # Checks for ANSI-C header files. AC_HEADER_STDC AC_CHECK_HEADERS([strings.h]) if test "x$enable_ansi" = xyes; then AC_PROG_CC() AC_DIAGNOSE([obsolete], [AM_PROG_CC_STDC: your code should no longer depend upon `am_cv_prog_cc_stdc', but upon `ac_cv_prog_cc_stdc'. Remove this warning and the assignment when you adjust the code. You can also remove the above call to AC_PROG_CC if you already called it elsewhere.]) am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc if test "x$am_cv_prog_cc_stdc" != xyes ; then AC_MSG_WARN([Failed to find Ansi flag!]) fi fi if test "x$enable_smoketest" = xyes; then # CFLAGS="$CFLAGS -Werror" CFLAGS="$CFLAGS -pedantic -W -Wmissing-prototypes" CFLAGS="$CFLAGS -Wstrict-prototypes -Wtraditional" CFLAGS="$CFLAGS -Wconversion -Wshadow -Wpointer-arith" CFLAGS="$CFLAGS -Wcast-qual -Wcast-align -Wwrite-strings" CFLAGS="$CFLAGS -Waggregate-return -fshort-enums -fno-common" CFLAGS="$CFLAGS -Wnested-externs -Dinline= -g -O4" fi # Check system we're on , and tune accordingly AC_CANONICAL_HOST # Expand the prefix variable if test "x$prefix" = xNONE ; then # with the MS WINDOWS executable we suggest C:/Spice/bin as *.exe-path if test "x$with_wingui" = xyes; then dprefix="C:/Spice" prefix=$dprefix else dprefix=$ac_default_prefix fi else dprefix=$prefix fi ########################################################################## # # ngspice as shared library (ngspice.so or ngspice.dll) # ########################################################################## if test "x$with_ngshared" != x && test "x$with_ngshared" != xno ; then has_shared_module=true AC_DEFINE([SHARED_MODULE], [1], [shared ngspice module]) case $host_os in *mingw* | *msys* ) has_shwin=true has_no_help=true ;; *cygwin* ) has_shcyg=true AC_CHECK_LIB([pthread], [pthread_create]) ;; *) AC_CHECK_LIB([pthread], [pthread_create]) ;; esac if test "x$enable_debug" = xno; then case $host_os in *solaris* ) if test "x$GCC" = xyes; then CFLAGS="$CFLAGS -fvisibility=hidden" else CFLAGS="$CFLAGS -xldscope=hidden" fi ;; *mingw* | *msys* | *cygwin* ) ;; *) CFLAGS="$CFLAGS -fvisibility=hidden" ;; esac fi with_x=no with_windows=no AC_SUBST([STATIC], [-shared]) TCL_PACKAGE_PATH="" TCL_LIB_SPEC="" ########################################################################## # # tcl libraries test # ########################################################################## # # The tclSpice options # elif test "x$with_tcl" != x && test "x$with_tcl" != xno ; then has_tcl_module=true AC_DEFINE([TCL_MODULE], [1], [Tcl Module]) case $host_os in *mingw* | *msys* ) has_tclwin=true has_no_help=true AC_DEFINE([HAS_TCLWIN], [1], [Tcl Windows]) ;; *cygwin* ) has_tclcyg=true ;; *) ;; esac with_x=no AC_MSG_CHECKING([for tclConfig.sh]) tcl_config_sh="" if test "x$with_tcl" != xyes ; then for dir in \ $with_tcl do if test -r "$dir/tclConfig.sh" ; then tcl_config_sh="$dir/tclConfig.sh" break elif test -r "$dir/lib/tclConfig.sh" ; then tcl_config_sh="$dir/lib/tclConfig.sh" break elif test -r "$dir/unix/tclConfig.sh" ; then tcl_config_sh="$dir/unix/tclConfig.sh" break fi done else for dir in \ $prefix \ $exec_prefix do if test -r "$dir/tclConfig.sh" ; then tcl_config_sh="$dir/tclConfig.sh" break elif test -r "$dir/lib/tclConfig.sh" ; then tcl_config_sh="$dir/lib/tclConfig.sh" break elif test -r "$dir/unix/tclConfig.sh" ; then tcl_config_sh="$dir/unix/tclConfig.sh" break fi done if test "x$tcl_config_sh" = x ; then for dir in \ `ls -dr /usr/local/tcltk/tcl[[7-9]].[[0-9]]* 2>/dev/null` \ `ls -dr /usr/local/tcl/tcl[[7-9]].[[0-9]]* 2>/dev/null` \ `ls -dr /usr/local/tcl[[7-9]].[[0-9]]* 2>/dev/null` \ `ls -dr /usr/share/tcltk/tcl[[7-9]].[[0-9]]* 2>/dev/null` \ `ls -dr /usr/share/tcl/tcl[[7-9]].[[0-9]]* 2>/dev/null` \ `ls -dr /usr/share/tcl[[7-9]].[[0-9]]* 2>/dev/null` \ `ls -dr /usr/lib/tcl/tcl[[7-9]].[[0-9]]* 2>/dev/null` \ `ls -dr /usr/lib/tcl[[7-9]].[[0-9]]* 2>/dev/null` \ /usr/local/tcl \ /usr/local \ /usr \ /mingw do if test -r "$dir/tclConfig.sh" ; then echo "Automatic research of tclConfig.sh Found one, accepting it and stopping research." tcl_config_sh="$dir/tclConfig.sh" break elif test -r "$dir/lib/tclConfig.sh" ; then echo "Automatic research of tclConfig.sh Found one, accepting it and stopping research." tcl_config_sh="$dir/lib/tclConfig.sh" break fi done fi fi AC_MSG_RESULT([${tcl_config_sh}]) if test "x$tcl_config_sh" = x ; then echo "can't find Tcl configuration script \"tclConfig.sh\"" find /usr/ -name 'tclConfig.sh' -exec echo "Should you add --with-tcl={} to ./configure arguments?" \; | sed -re "s/\/tclConfig.sh/ /" exit 1 fi . $tcl_config_sh CFLAGS="$CFLAGS $TCL_INCLUDE_SPEC" CPPFLAGS="$CPPFLAGS $TCL_INCLUDE_SPEC" AC_CHECK_HEADERS([tcl.h blt.h], [], [AC_MSG_ERROR([Couldn't find Tcl/BLT headers])]) if test ! -x "$TCL_EXEC_PREFIX/bin/tclsh$TCL_VERSION" ; then AC_MSG_ERROR([Couldn't find $TCL_EXEC_PREFIX/bin/tclsh$TCL_VERSION]) fi AC_MSG_CHECKING([for TCL module BLT]) rm -f conftest.tcl cat > conftest.tcl << EOF package require BLT; exit; EOF if ($TCL_EXEC_PREFIX/bin/tclsh$TCL_VERSION conftest.tcl; exit) 2>/dev/null then AC_MSG_RESULT([Found]) else AC_MSG_ERROR([Couldn't find BLT]) fi rm -f conftest.tcl AC_SEARCH_LIBS([Blt_GetVector], [BLT BLT24 BLT25],, [AC_MSG_ERROR([Couldnt find BLT library.])]) AC_CHECK_LIB([pthread], [pthread_create]) if test -n "$libdir" ; then AC_SUBST([libdir]) echo "libraries in $libdir" fi if test -z "$libdir" ; then for TCL_PACKAGE_PATH_ELEMENT in $TCL_PACKAGE_PATH ; do if test -a "$TCL_PACKAGE_PATH_ELEMENT" ; then libdir=$TCL_PACKAGE_PATH_ELEMENT AC_SUBST([libdir]) echo "library in $libdir" break fi done fi AC_SUBST([STATIC], [-shared]) else TCL_PACKAGE_PATH="" TCL_LIB_SPEC="" AC_SUBST([STATIC], [-static]) fi AM_CONDITIONAL([SHARED_MODULE], [test "x$has_shared_module" = xtrue]) AM_CONDITIONAL([SHWIN], [test "x$has_shwin" = xtrue]) AM_CONDITIONAL([SHCYG], [test "x$has_shcyg" = xtrue]) AM_CONDITIONAL([TCL_MODULE], [test "x$has_tcl_module" = xtrue]) AM_CONDITIONAL([TCLWIN], [test "x$has_tclwin" = xtrue]) AM_CONDITIONAL([TCLCYG], [test "x$has_tclcyg" = xtrue]) AC_SUBST([TCL_PACKAGE_PATH]) AC_SUBST([TCL_LIB_SPEC]) ################################################################## # # #End of tcl libraries test # ################################################################# # Checks for programs AC_LIBTOOL_WIN32_DLL AC_LIBTOOL_DLOPEN AM_PROG_CC_C_O ## AM_PROG_LIBTOOL AC_PROG_LIBTOOL # --with-windows : the user wants to use generate the MS WINDOWS GUI executable # old command version, deprecated, use --with-wingui AC_ARG_WITH([windows], [AS_HELP_STRING([--with-windows], [MS WINDOWS GUI executable, deprecated])], [if test "x$with_windows" = xyes; then AC_DEFINE([HAS_WINGUI], [1], [define to specify MS Windows executable with simple GUI]) fi], [with_windows=no]) # --with-wingui : the user wants to use generate the MS WINDOWS GUI executable AC_MSG_CHECKING([whether windows code with gui is enabled]) AC_ARG_WITH([wingui], [AS_HELP_STRING([--with-wingui], [MS WINDOWS GUI executable])], [if test "x$with_wingui" = xyes; then AC_DEFINE([HAS_WINGUI], [1], [define to specify MS Windows executable with simple GUI]) fi], [if test "x$with_windows" = xyes; then with_wingui=yes else with_wingui=no fi]) AC_MSG_RESULT([$with_wingui]) AM_CONDITIONAL([WINGUI], [test "x$with_wingui" = xyes]) case $host_os in *mingw* | *msys* ) has_win32=yes if test "x$with_wingui" = xyes; then has_winconsole=no else if test "x$with_ngshared" = xyes; then has_winconsole=no else has_winconsole=yes fi fi ;; *cygwin* ) has_cyg=yes ;; *) has_win32=no has_cyg=no ;; esac AM_CONDITIONAL([WINCONSOLE], [test "x$has_winconsole" = xyes]) case $with_wingui in yes ) AC_DEFINE([X_DISPLAY_MISSING]) AC_MSG_RESULT([No X display!]) has_no_x=true if test "x$enable_help" = xyes; then has_no_help=false else has_no_help=true fi CFLAGS="$CFLAGS -mwindows" ;; * ) # Check for /proc (virtual process information file system) AC_CHECK_HEADERS([/proc/meminfo]) # Checks for X11 header files and libraries - X11 support can be disabled # by passing the '--without-x' option to configure: # Try to locate the X-Windows include files and libraries # will set no_x="yes" or no_x="" AC_PATH_X # will set X_CFLAGS, X_LIBS, and might define X_DISPLAY_MISSING AC_PATH_XTRA # Checks for typedefs, structures, and compiler characteristics. AC_HEADER_STDBOOL AC_TYPE_SIZE_T # Checks for library functions. AC_FUNC_ALLOCA AC_FUNC_MALLOC AC_FUNC_REALLOC AC_FUNC_CLOSEDIR_VOID AC_FUNC_SELECT_ARGTYPES AC_FUNC_SETVBUF_REVERSED AC_FUNC_VPRINTF # Check if the user wants to use the appropriate rpath commands to compile in # the shared library path for the X libraries. This is off by default since # that is how it has been historically. Using --enable-rpath will turn this on _use_rpath=no AC_MSG_CHECKING([if hardcoding of the X11 runtime library path is desired]) AC_ARG_ENABLE([rpath], [AS_HELP_STRING([--enable-rpath], [Enable hardcoding the X11 runtime library path])], [ if test "x$enable_rpath" = xno ; then AC_MSG_RESULT([no]) _use_rpath=no else AC_MSG_RESULT([yes]) _use_rpath=yes fi ], [ AC_MSG_RESULT([no]) _use_rpath=no ] ) if test "x$_use_rpath" = xyes ; then # Try to figure out if we need -Rpath for finding X11 libs # at runtime. Why autoconf doesn't already do this, I don't # know... xlib_path="" for p in $X_LDFLAGS ; do case $p in -L*) xlib_path="$xlib_path $p" ;; esac done _save_LIBS=$LIBS LIBS="$LIBS $X_LDFLAGS" rpath="" for fl in "-Wl,-rpath " "-Wl,--rpath " "-rpath " "--rpath " "-Wl,-R" "-R" "-R " ; do xlib_rpath=`echo $xlib_path | sed "s/-L/$fl/g"` LIBS="$_save_LIBS $X_LIBS $xlib_rpath" AC_MSG_CHECKING([if the compiler accepts ${fl}path for runtime libraries]) AC_LINK_IFELSE([AC_LANG_PROGRAM()], [AC_MSG_RESULT([yes]) rpath=$fl], [AC_MSG_RESULT([no])]) test -n "$rpath" && break done if test -n "$rpath"; then X_LDFLAGS="$X_LDFLAGS $xlib_rpath" fi LIBS=$_save_LIBS fi # Checks for X libraries - if X11 wasn't found then don't make following # tests and compile without X11 support - otherwise, check if the following # libraries are present (error if they are not) # In CYGWIN library ordering has to be changed. Is this compatible to LINUX? # XShmAttach is a struct in CYGWIN, not a function # SJB: 13th march 2005 # Library order is giving linker warnings on MacOSX # It's not clear to me which order is required for Cygwin (see comment above) # and neither can I find any authoritative answer for the correct link order # for MacOSX or Linux, but # -lXaw -lXmu -lXt -lXext -lX11 # seems to be the popular choice. # (The previous order was -lX11 -lXt -lXext -lXmu -lXaw) if test "x$no_x" != xyes ; then AC_CHECK_LIB([Xaw], [main], [X_LIBS="$X_LIBS -lXaw"], [AC_MSG_ERROR([Couldn't find Xaw library])], [$X_LIBS $X_EXTRA_LIBS]) AC_CHECK_LIB([Xmu], [main], [X_LIBS="$X_LIBS -lXmu"], [AC_MSG_ERROR([Couldn't find Xmu library])], [$X_LIBS $X_EXTRA_LIBS]) X_LIBS="$X_LIBS -lXt" AC_CHECK_LIB([Xext], [XShmAttach], [X_LIBS="$X_LIBS -lXext"], [AC_MSG_ERROR([Couldn't find Xext library])], [$X_LIBS $X_EXTRA_LIBS]) X_LIBS="$X_LIBS -lX11" has_no_x=false else AC_DEFINE([X_DISPLAY_MISSING]) AC_MSG_RESULT([No X display!]) has_no_x=true fi if test "x$enable_help" = xyes && test "x$no_x" != xyes ; then has_no_help=false else has_no_help=true fi ;; esac # end of case --with-windows AM_CONDITIONAL([NO_X], [test "x$has_no_x" = xtrue]) AM_CONDITIONAL([NO_HELP], [test "x$has_no_help" = xtrue]) # enabling making of the old and outdated applications # ngsconvert ngproc2mod ngmultidec ngmakeidx nghelp if test "x$enable_oldapps" = xyes ; then AC_MSG_RESULT([ngnutmeg ngsconvert ngproc2mod ngmultidec ngmakeidx nghelp are made.]) else AC_MSG_RESULT([ngnutmeg ngsconvert ngproc2mod ngmultidec ngmakeidx nghelp are not made.]) AC_MSG_RESULT([No internal help available.]) AC_DEFINE([NOINTHELP], [1], [Internal (old) help not available]) fi AM_CONDITIONAL([OLDAPPS], [test "x$enable_oldapps" = xyes]) # Check for a few typdefs: AC_TYPE_PID_T AC_TYPE_SIGNAL # sighandler_t is the type of the signal handler on GNU variants, # sig_t is the type of a signal handler on 4.4BSD's, # other systems use __sighandler_t. AC_CHECK_TYPES([sighandler_t, sig_t, __sighandler_t], [], [], [#include #include ]) # Check for a few libraries and headers: AC_HEADER_DIRENT AC_CHECK_HEADERS([unistd.h ctype.h pwd.h fcntl.h sys/ioctl.h stropts.h]) AC_HEADER_SYS_WAIT AC_HEADER_STAT AC_CHECK_HEADERS([arpa/inet.h netdb.h netinet/in.h stddef.h sys/file.h sys/param.h sys/socket.h sys/time.h sys/timeb.h sys/io.h]) # Check time and resources headers and functions: AC_HEADER_TIME AC_STRUCT_TM AC_STRUCT_TIMEZONE AC_CHECK_FUNCS([localtime]) AC_CHECK_FUNCS([ftime gettimeofday]) # Do not use time or getrusage function for CPU time measurement under OpenMP if test "x$enable_openmp" != xyes; then AC_CHECK_FUNCS([time getrusage]) fi AC_CHECK_FUNCS([utimes]) AC_CHECK_FUNCS([getrlimit ulimit], [break]) AC_CHECK_FUNCS([endpwent gethostbyname memset select socket strdup strerror strncasecmp strstr strtol]) # Look for termios first (posix) AC_CHECK_HEADERS([termios.h termio.h sgtty.h], [break]) AC_CHECK_FUNCS([isatty tcgetattr tcsetattr]) # Check for a few functions: AC_FUNC_FORK([]) AC_CHECK_FUNCS([access qsort dup2 popen tsearch tdestroy]) AC_CHECK_FUNCS([strchr index], [break]) AC_CHECK_FUNCS([strrchr rindex], [break]) AC_CHECK_FUNCS([getcwd getwd], [break]) AC_MSG_RESULT([Checking mathematical features of the system:]) # Look for math library: AC_CHECK_LIB([m], [sqrt]) AC_CHECK_HEADERS([float.h limits.h values.h ieeefp.h]) if test "x$with_fftw3" != xno; then AC_CHECK_HEADERS([fftw3.h]) AC_CHECK_LIB([fftw3], [fftw_plan_dft_1d], [AC_DEFINE([HAVE_LIBFFTW3], [], [Have fft routines in libfftw3]) LIBS="$LIBS -lfftw3"]) fi # Check for a few mathematical functions: AC_CHECK_FUNCS([erfc logb scalb scalbn asinh acosh atanh finite]) # According POSIX we should look for macros first AC_CHECK_DECLS([isinf], [], [], [[#include ]]) AC_CHECK_DECLS([isnan], [], [], [[#include ]]) # But may be we have still functions if test "x$ac_cv_have_decl_isinf" != xyes; then AC_CHECK_FUNC([isinf]) fi if test "x$ac_cv_have_decl_isnan" != xyes; then AC_CHECK_FUNC([isnan]) fi # If user enables garbage collection, look for garbage collector if test "x$TCL_PACKAGE_PATH" = x; then if test "x$enable_gc" = xyes; then AC_MSG_RESULT([Checking for the presence of the Garbage Collector:]) AC_CHECK_LIB([gc], [GC_malloc], [AC_DEFINE([HAVE_LIBGC], [], [Define if we want garbage collection enabled]) LIBS="$LIBS -lgc"]) fi fi # check, if we have sigsetjmp and siglongjmp. # A trivial AC_CHECK_FUNCS(sigsetjmp) won't do because sigsetjmp() might be a # macro declared in . (joze) AC_MSG_CHECKING([for sigsetjmp]) AC_TRY_LINK([#include ],[jmp_buf env; sigsetjmp(env, 1);], [AC_MSG_RESULT([yes]) AC_DEFINE([HAVE_SIGSETJMP], [], [Define if we have sigsetjmp().])], [AC_MSG_RESULT([no])]) # Check for the snprintf function: AC_CHECK_FUNCS([snprintf]) # Check for the dirname function: AC_CHECK_FUNCS([dirname], [], [AC_CHECK_LIB([gen], [dirname], [AC_DEFINE([HAVE_DIRNAME], [1], [Have dirname in libgen]) LIBS="$LIBS -lgen"])]) AC_CHECK_HEADERS([getopt.h]) AC_CHECK_FUNC([getopt_long], [getopt_long=true]) if test "x$getopt_long" = xtrue; then AC_DEFINE([HAVE_GETOPT_LONG], [1], [Have fcn getopt_long()]) fi AM_CONDITIONAL([RELPATH], [test "x$enable_relpath" = xyes]) if test "x$enable_relpath" = xyes; then AC_DEFINE_UNQUOTED([NGSPICEBINDIR], ["`echo ../bin`"], [Define the directory for executables]) AC_DEFINE_UNQUOTED([NGSPICEDATADIR], ["`echo ../share/ngspice`"], [Define the directory for architecture independent data files]) AC_DEFINE([HAS_RELPATH], [1], [rel. path of libraries and scripts]) else AC_DEFINE_UNQUOTED([NGSPICEBINDIR], ["`echo $dprefix/bin`"], [Define the directory for executables]) AC_DEFINE_UNQUOTED([NGSPICEDATADIR], ["`echo $dprefix/share/ngspice`"], [Define the directory for architecture independent data files]) fi # Create timestamp, may be overruled by setting env var SOURCE_DATE_EPOCH case $host_os in *freebsd* ) DATE_FMT="%Y-%m-%d" SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(date +%s)}" BUILD_DATE=$(date -u -d "@$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || date -u -r "$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || date -u "+$DATE_FMT") ;; *openbsd* ) DATE_FMT="%Y-%m-%d" SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(date +%s)}" BUILD_DATE=$(date -u -d "@$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || date -u -r "$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || date -u "+$DATE_FMT") ;; * ) BUILD_DATE="$(date --utc --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}")" ;; esac AC_DEFINE_UNQUOTED([NGSPICEBUILDDATE], ["$BUILD_DATE"], [Define the build date]) if test "x$with_wingui" = xyes; then AC_MSG_RESULT([WINDOWS GUI code enabled]) AC_CHECK_FUNCS([memmove]) fi # Recapitulate settings: AC_MSG_RESULT([Settings which were chosen:]) if test "x$enable_sense2" = xyes; then AC_DEFINE([WANT_SENSE2], [], [Define if we want spice2 sensitivity analysis]) AC_MSG_RESULT([Spice2 sensitivity analysis enabled]) AC_MSG_WARN([This feature is UNSUPPORTED]) fi if test "x$enable_nobypass" = xyes; then AC_DEFINE([NOBYPASS], [], [Define if we want NOBYPASS]) AC_MSG_RESULT([NOBYPASS option enabled]) fi if test "x$enable_capbypass" = xyes; then AC_DEFINE([CAPBYPASS], [], [Define if we want to bypass cbd/cbs calculation for non varying vbs/vbd]) AC_MSG_RESULT([CAPBYPASS option enabled]) fi if test "x$enable_nodelimiting" = xyes; then AC_DEFINE([NODELIMITING], [], [Experimental code never implemented to damp Newton iterations]) AC_MSG_RESULT([NODELIMITING option enabled]) fi if test "x$enable_predictor" = xyes; then AC_DEFINE([PREDICTOR], [], [Define if we want predictor algorithm]) AC_MSG_RESULT([PREDICTOR algorithm enabled]) fi if test "x$enable_newpred" = xyes; then AC_DEFINE([NEWPRED], [], [Define if you want to discover :)]) AC_MSG_RESULT([NEWPRED enabled]) fi if test "x$enable_newtrunc" = xyes; then AC_DEFINE([NEWTRUNC], [], [Do not trigger unwanted traps by default]) AC_MSG_RESULT([New truncation error calculation enabled]) fi if test "x$enable_experimental" = xyes; then AC_DEFINE([EXPERIMENTAL_CODE], [], [Define if we want some experimental code]) AC_MSG_RESULT([EXPERIMENTAL_CODE enabled]) fi if test "x$enable_cpdebug" = xyes; then AC_DEFINE([CPDEBUG], [], [Define if you want to debug ngspice shell]) AC_MSG_RESULT([WARNING: Shell debug is enabled]) fi if test "x$enable_ftedebug" = xyes; then AC_DEFINE([FTEDEBUG], [], [Define if you want to debug frontend]) AC_MSG_RESULT([WARNING: Frontend debug is enabled]) fi if test "x$enable_sensdebug" = xyes; then AC_DEFINE([SENSDEBUG], [], [Define if we want debug sensititvity analysis]) AC_MSG_RESULT([WARNING: Sensitivity code debug *SENSDEBUG* is enabled]) fi if test "x$enable_asdebug" = xyes; then AC_DEFINE([ASDEBUG], [], [Define if we want debug sensitivity analysis]) AC_MSG_RESULT([WARNING: Sensitivity code debug *ASDEBUG* is enabled]) fi if test "x$enable_stepdebug" = xyes; then AC_DEFINE([STEPDEBUG], [], [Define if we want stepdebug]) AC_MSG_RESULT([WARNING: STEPDEBUG debug is enabled]) fi if test "x$enable_pzdebug" = xyes; then AC_DEFINE([PZDEBUG], [], [Define if you want to debug pole-zero analysis]) AC_MSG_RESULT([WARNING: Pole/Zero analysis debug is enabled]) fi if test "x$enable_pss" = xyes; then AC_DEFINE([WITH_PSS], [], [Define if you want PSS analysis]) AC_MSG_RESULT([WARNING: PSS analysis enabled]) fi if test "x$enable_blktmsdebug" = xyes; then AC_DEFINE([D_DBG_BLOCKTIMES], [], [Define if we want debug distortion analysis (BLOCKTIMES)]) AC_MSG_RESULT([WARNING: Distortion analysis debug *D_DBG_BLOCKTIMES* is enabled]) fi if test "x$enable_smltmsdebug" = xyes; then AC_DEFINE([D_DBG_SMALLTIMES], [], [Define if we want debug distortion analysis (SMALLTIMES)]) AC_MSG_RESULT([WARNING: Distortion analysis debug *D_DBG_SMALLTIMES* is enabled]) fi AC_PROG_YACC AC_PATH_PROG([BISON], [bison]) AX_PROG_BISON_VERSION([2.7], [], [AC_DEFINE([OLD_BISON], [], [Bison is older than 2.7]), AC_MSG_WARN([Bison is older than 2.7])]) AC_PROG_LEX ################# XSPICE ################################################## # Add new code models to the build by pointing to them here. if test "x$enable_xspice" = xyes; then VIS_CFLAGS="" AC_MSG_RESULT([X-Spice features included]) AC_DEFINE([XSPICE], [1], [The xspice enhancements]) case $host_os in *mingw* | *msys* ) AC_DEFINE([IPC_DEBUG_VIA_STDIO], [1], [Client-Server only via stdio.]) XSPICEDLLIBS="" ;; *cygwin* ) AC_DEFINE([IPC_UNIX_SOCKETS], [1], [Client-Server via socket.]) XSPICEDLLIBS="" ;; *freebsd* ) AC_DEFINE([IPC_UNIX_SOCKETS], [1], [Client-Server via socket.]) XSPICEDLLIBS="-ldl" ;; *openbsd* ) AC_DEFINE([IPC_UNIX_SOCKETS], [1], [Client-Server via socket.]) XSPICEDLLIBS="-ldl" ;; *solaris* ) AC_DEFINE([IPC_UNIX_SOCKETS], [1], [Client-Server via socket.]) XSPICEDLLIBS="" if test "x$with_ngshared" != xyes ; then if test "x$enable_debug" = xno; then if test "x$GCC" = xyes; then VIS_CFLAGS="-fvisibility=hidden" else VIS_CFLAGS="-xldscope=hidden" fi fi fi ;; * ) AC_DEFINE([IPC_UNIX_SOCKETS], [1], [Client-Server via socket.]) XSPICEDLLIBS="-ldl" if test "x$with_ngshared" != xyes ; then if test "x$enable_debug" = xno; then VIS_CFLAGS="-fvisibility=hidden" fi fi ;; esac XSPICEINIT="" AC_CHECK_FUNCS([modf]) AC_CHECK_HEADERS([libintl.h malloc.h]) AC_SUBST([VIS_CFLAGS]) else XSPICEINIT="*" fi AC_SUBST([XSPICEINIT]) AC_SUBST([XSPICEDLLIBS]) AM_CONDITIONAL([XSPICE_WANTED], [test "x$enable_xspice" = xyes]) # Add CIDER enhancements to ngspice. if test "x$enable_cider" = xyes; then AC_MSG_RESULT([CIDER features enabled]) AC_DEFINE([CIDER], [1], [The CIDER enhancements]) fi AM_CONDITIONAL([CIDER_WANTED], [test "x$enable_cider" = xyes]) AM_CONDITIONAL([NUMDEV_WANTED], [test "x$enable_cider" = xyes]) AM_CONDITIONAL([PSS_WANTED], [test "x$enable_pss" = xyes]) AM_CONDITIONAL([SENSE2_WANTED], [test "x$enable_sense2" = xyes]) # adms option if test "x$enable_adms" = xyes ; then AC_MSG_RESULT([********************************** * ADMS support is experimental * **********************************]) AC_CHECK_PROGS([ADMSXML], [admsXml admsXml.exe]) if test "x$ADMSXML" = x; then AC_MSG_ERROR([If you want Verilog-A models you should install admsXml]) fi AC_DEFINE([ADMS], [1], [Support for Verilog-A models]) VLADEVDIR=" adms/ekv \ adms/hicum0 \ adms/hicum2 \ adms/mextram \ adms/psp102 " # The makefiles for adms (to be added to AC_CONFIG_FILES by ./autogen.sh --adms) #VLAMKF src/spicelib/devices/adms/ekv/Makefile #VLAMKF src/spicelib/devices/adms/hicum0/Makefile #VLAMKF src/spicelib/devices/adms/hicum2/Makefile #VLAMKF src/spicelib/devices/adms/mextram/Makefile #VLAMKF src/spicelib/devices/adms/psp102/Makefile NOTVLADEVDIR="" VLADEV=" spicelib/devices/adms/ekv/libekv.la \ spicelib/devices/adms/hicum0/libhicum0.la \ spicelib/devices/adms/hicum2/libhicum2.la \ spicelib/devices/adms/mextram/libbjt504t.la \ spicelib/devices/adms/psp102/libpsp102.la " else VLADEVDIR="" NOTVLADEVDIR="adms/admst" fi AC_SUBST([VLADEVDIR]) AC_SUBST([VLADEV]) AC_SUBST([NOTVLADEVDIR]) # NDEV option if test "x$enable_ndev" = xyes; then AC_MSG_RESULT([NDEV features enabled]) AC_DEFINE([NDEV], [], [The NDEV interface]) fi AM_CONDITIONAL([NDEV_WANTED], [test "x$enable_ndev" = xyes]) # Cluster option if test "x$enable_cluster" = xyes; then AC_MSG_RESULT([Cluster version is being compiled]) AC_DEFINE([CLUSTER], [], [Spice cluster support]) LIBS="$LIBS -lpthread" fi if test "x$enable_expdevices" = xyes; then AC_DEFINE([EXP_DEV], [], [Define if we want to enable experimental devices]) AC_MSG_RESULT([WARNING: Experimental devices enabled]) fi # ---- Option to include GNU readline support in ngspice CLI ---- # ---- Default: disabled. ---- # ---- Hope to see in the future readline replacement. ---- if test "x$with_readline" != xyes; then AC_MSG_RESULT([GNU readline disabled.]) else if test "x$with_tcl" = x || test "x$with_tcl" = xno ; then AC_MSG_RESULT([Checking for readline:]) AC_CHECK_HEADERS([readline/readline.h readline/history.h], [AC_DEFINE([HAVE_GNUREADLINE], [], [Define if we have GNU readline])], [AC_MSG_ERROR([Couldn't find GNU readline headers.])]) AC_SEARCH_LIBS([tputs], [ncurses tinfo termcap], [AC_DEFINE([HAVE_TERMCAP], [], [Define if we have ncurses/terminfo or termcap])], [AC_MSG_ERROR([Found neither ncurses/terminfo or termcap])]) AC_CHECK_LIB([readline], [readline], [LIBS="$LIBS -lreadline"], [AC_MSG_ERROR([Couldn't find readline libraries.])]) fi fi # ---- Option to include BSD editline support in ngspice CLI ---- # ---- Default: disabled. ---- if test "x$with_editline" != xyes; then AC_MSG_RESULT([BSD editline disabled.]) else AC_MSG_RESULT([Checking for editline:]) AC_CHECK_HEADERS([editline/readline.h], [AC_DEFINE([HAVE_BSDEDITLINE], [1], [Define to enable BSD editline])], [AC_MSG_ERROR([Couldn't find BSD editline headers.])]) AC_SEARCH_LIBS([tputs], [ncurses tinfo termcap], [AC_DEFINE([HAVE_TERMCAP], [], [Define if we have ncurses/terminfo or termcap])], [AC_MSG_ERROR([Found neither ncurses/terminfo or termcap])]) AC_CHECK_LIB([edit], [readline], [LIBS="$LIBS -ledit"], [AC_MSG_ERROR([Couldn't find editline libraries.])], [-lncurses]) fi # Use AC_CHECK_HEADERS so the HAVE_*_H symbol gets defined AC_CHECK_HEADERS([ncurses/termcap.h termcap.h]) # --enable-openmp: Use OpenMP on multi-core processors AC_ARG_ENABLE([openmp], [AS_HELP_STRING([--enable-openmp], [Use OpenMP parallel processing])]) # Add OpenMP to ngspice. : ${enable_openmp:=no} m4_ifdef([AC_OPENMP], [AC_OPENMP]) if test "x$enable_openmp" = xyes; then AC_DEFINE([USE_OMP], [1], [OpenMP parallel processing]) CFLAGS="$CFLAGS $OPENMP_CFLAGS" AC_MSG_RESULT([OpenMP feature enabled]) fi # Output Files # ------------ AC_CONFIG_FILES([Makefile man/Makefile man/man1/Makefile ngspice.pc src/Makefile src/spicelib/Makefile src/spicelib/analysis/Makefile src/spicelib/devices/Makefile src/spicelib/devices/asrc/Makefile src/spicelib/devices/bjt/Makefile src/spicelib/devices/bsim1/Makefile src/spicelib/devices/bsim2/Makefile src/spicelib/devices/bsim3/Makefile src/spicelib/devices/bsim3v0/Makefile src/spicelib/devices/bsim3v1/Makefile src/spicelib/devices/bsim3v32/Makefile src/spicelib/devices/bsim4/Makefile src/spicelib/devices/bsim4v5/Makefile src/spicelib/devices/bsim4v6/Makefile src/spicelib/devices/bsim4v7/Makefile src/spicelib/devices/bsim3soi_pd/Makefile src/spicelib/devices/bsim3soi_fd/Makefile src/spicelib/devices/bsim3soi_dd/Makefile src/spicelib/devices/bsimsoi/Makefile src/spicelib/devices/cap/Makefile src/spicelib/devices/cccs/Makefile src/spicelib/devices/ccvs/Makefile src/spicelib/devices/csw/Makefile src/spicelib/devices/cpl/Makefile src/spicelib/devices/dio/Makefile src/spicelib/devices/ind/Makefile src/spicelib/devices/isrc/Makefile src/spicelib/devices/hfet1/Makefile src/spicelib/devices/hfet2/Makefile src/spicelib/devices/hisim2/Makefile src/spicelib/devices/hisimhv1/Makefile src/spicelib/devices/hisimhv2/Makefile src/spicelib/devices/jfet/Makefile src/spicelib/devices/jfet2/Makefile src/spicelib/devices/ltra/Makefile src/spicelib/devices/mes/Makefile src/spicelib/devices/mesa/Makefile src/spicelib/devices/mos1/Makefile src/spicelib/devices/mos2/Makefile src/spicelib/devices/mos3/Makefile src/spicelib/devices/mos6/Makefile src/spicelib/devices/mos9/Makefile src/spicelib/devices/ndev/Makefile src/spicelib/devices/res/Makefile src/spicelib/devices/soi3/Makefile src/spicelib/devices/sw/Makefile src/spicelib/devices/tra/Makefile src/spicelib/devices/txl/Makefile src/spicelib/devices/urc/Makefile src/spicelib/devices/vbic/Makefile src/spicelib/devices/vccs/Makefile src/spicelib/devices/vcvs/Makefile src/spicelib/devices/vdmos/Makefile src/spicelib/devices/vsrc/Makefile src/spicelib/devices/nbjt/Makefile src/spicelib/devices/nbjt2/Makefile src/spicelib/devices/numd/Makefile src/spicelib/devices/numd2/Makefile src/spicelib/devices/numos/Makefile src/spicelib/parser/Makefile src/ciderlib/Makefile src/ciderlib/input/Makefile src/ciderlib/support/Makefile src/ciderlib/oned/Makefile src/ciderlib/twod/Makefile src/frontend/Makefile src/frontend/numparam/Makefile src/frontend/help/Makefile src/frontend/parser/Makefile src/frontend/plotting/Makefile src/frontend/trannoise/Makefile src/frontend/wdisp/Makefile src/include/ngspice/Makefile src/maths/Makefile src/maths/cmaths/Makefile src/maths/fft/Makefile src/maths/misc/Makefile src/maths/ni/Makefile src/maths/deriv/Makefile src/maths/poly/Makefile src/maths/sparse/Makefile src/misc/Makefile src/xspice/Makefile src/xspice/cm/Makefile src/xspice/cmpp/Makefile src/xspice/icm/makedefs src/xspice/icm/GNUmakefile src/xspice/mif/Makefile src/xspice/evt/Makefile src/xspice/enh/Makefile src/xspice/ipc/Makefile src/xspice/idn/Makefile src/unsupported/Makefile tests/Makefile tests/bsim1/Makefile tests/bsim2/Makefile tests/bsim3/Makefile tests/bsim3soidd/Makefile tests/bsim3soifd/Makefile tests/bsim3soipd/Makefile tests/bsim4/Makefile tests/bsimsoi/Makefile tests/filters/Makefile tests/general/Makefile tests/hfet/Makefile tests/hisim/Makefile tests/hisimhv1/Makefile tests/hisimhv2/Makefile tests/jfet/Makefile tests/mes/Makefile tests/mesa/Makefile tests/mos6/Makefile tests/polezero/Makefile tests/regression/Makefile tests/regression/subckt-processing/Makefile tests/regression/lib-processing/Makefile tests/regression/parser/Makefile tests/regression/func/Makefile tests/regression/model/Makefile tests/regression/misc/Makefile tests/regression/sens/Makefile tests/regression/temper/Makefile tests/regression/pipe/Makefile tests/regression/pz/Makefile tests/sensitivity/Makefile tests/transient/Makefile tests/transmission/Makefile tests/xspice/Makefile tests/xspice/digital/Makefile tests/xspice/digital/spinit tests/resistance/Makefile tests/vbic/Makefile]) AM_CONDITIONAL([CROSS_COMPILING], [test "x$cross_compiling" = xyes]) if test "x$cross_compiling" = xyes; then AC_CONFIG_COMMANDS([mkdir], [$MKDIR_P src/xspice/cmpp/build]) AC_SUBST([CMPP], ['$(top_builddir)/src/xspice/cmpp/build/cmpp$(BUILD_EXEEXT)']) else AC_SUBST([CMPP], ['$(top_builddir)/src/xspice/cmpp/cmpp$(EXEEXT)']) fi AC_OUTPUT tmpk8ny_4pz/ANALYSES0000644000175000017500000001015513546075722014324 0ustar carstencarsten12345678901234567890123456789012345678901234567890123456789012345678901234567890 ANALYSES ======== This file lists the analyses currently implemented into ngspice. Table of Contents 1 Noise analysis (NOISE) 1.1 Small signal noise 1.2 Transient noise 2 Operating point analysis (OP) 3 Operating point sweep Analysis (DC) 4 Pole-zero analysis (PZ) 5 Small-Signal distortion analysis (DISTO) 6 Small Signal frequency response analysis (AC) 7 Sensitivity analysis (SENS) 8 Transfer function analysis (TF) 9 Transient analysis (TRAN) 10 Periodic steady state analysis (PSS, experimental feature) 1 Noise analysis (NOISE) 1.1 Small signal noise The noise analysis does analysis device-generated noise for the given circuit. When provided with an input source and an output port, the analysis calculates the noise contributions of each device (and each noise generator within the device) to the output port voltage. It also calculates the input noise to the circuit, equivalent to the output noise referred to the specified input source. This is done for every frequency point in a specified range - the calculated value of the noise corresponds to the spectral density of the circuit variable viewed as a stationary gaussian stochastic process. 1.2 Transient noise Time domain noise analysis during transient simulation is enabled by providing voltage (and current) source options with white, 1/f and random telegraph signal noise signals. 2 Operating point analysis (OP) The operating point analysis determines the dc operating point of the circuit with inductors shorted and capacitors opened. 3 Operating point sweep Analysis (DC) The operating point sweep analysis determines the values of output variables while one or two specified independent voltage or current source is stepped over a user-specified range and the dc output variables are stored for each sequential source value. Resistance and temperature sweep are included. 4 Pole-zero analysis (PZ) The pole-zero analysis computes the poles and/or zeros in the small-signal ac transfer function. The program first computes the dc operating point and then determines the linearized, small-signal models for all the nonlinear devices in the circuit. This circuit is then used to find the poles and zeros of the transfer function. Unfortunately this code is (since its inception in spice3) not free of bugs. 5 Small-Signal distortion analysis (DISTO) The distortion analysis computes steady-state harmonic and intermodulation products for small input signal magnitudes. Not all devices are supported. 6 Small Signal frequency response analysis (AC) The ac small-signal computes the ac output variables as a function of frequency. The program first computes the dc operating point of the circuit and determines linearized, small-signal models for all of the nonlinear devices in the circuit. The resultant linear circuit is then analyzed over a user-specified range of frequencies. 7 Sensitivity analysis (SENS) Ngspice will calculate either the DC operating-point sensitivity or the AC small-signal sensitivity of an output variable with respect to all circuit variables, including model parameters. Spice calculates the difference in an output variable (either a node voltage or a branch current) by perturbing each parameter of each device independently. 8 Transfer function analysis (TF) The (small signal) transfer function analysis computes the dc small-signal value of a transfer function (ratio of output variable to input source), input resistance, and output resistance is also computed as a part of the dc solution. 9 Transient analysis (TRAN) The transient analysis computes the transient output variables as a function of time over a user-specified time interval. The initial conditions are automatically determined by a dc analysis. All sources which are not time dependent (for example, power supplies) are set to their dc value. 10 Periodic steady state analysis (PSS) The periodic steady state analysis computes solutions for oscillating circuits. Currently only the autonomous case is implemented. tmpk8ny_4pz/compile_linux.sh0000644000175000017500000000625413546075722016372 0ustar carstencarsten#!/bin/bash # ngspice build script for Linux, release version, 32 or 64 bit # compile_linux.sh # Procedure: # Install gcc, bison, flex, libtool, autoconf, automake, # libx11 and libx11-dev (headers), libXaw and libXaw-dev, libreadline and dev # Declare 'compile_linux.sh' executable and start compiling with # './compile_linux.sh' or './compile_min.sh 64' from the ngspice directory. # Options: # --adms and --enable-adms will install extra HICUM, EKV and MEXTRAM models via the # adms interface. You need to download and install the *.va files via ng-adms-va.tgz # Please see the ngspice manual, chapt. 13, for more info on adms. # CIDER, XSPICE, and OpenMP may be selected at will. # --disable-debug will give O2 optimization (versus O0 for debug) and removes all debugging info. # ngspice as shared library: # Replace --with-x by --with-ngshared in line ../configure ... . # Add (optionally) --enable-relpath to avoid absolute paths when searching for code models. # It might be necessary to uncomment and run ./autogen.sh . if test "$1" = "64"; then if [ ! -d "release64" ]; then mkdir release64 if [ $? -ne 0 ]; then echo "mkdir release64 failed"; exit 1 ; fi fi else if [ ! -d "release" ]; then mkdir release if [ $? -ne 0 ]; then echo "mkdir release failed"; exit 1 ; fi fi fi # If compiling sources from git, you may need to uncomment the following two lines: ./autogen.sh if [ $? -ne 0 ]; then echo "./autogen.sh failed"; exit 1 ; fi # Alternatively, if compiling sources from git, and want to add adms created devices, # you may need to uncomment the following two lines (and don't forget to add adms option # to the ../configure statement): #./autogen.sh --adms #if [ $? -ne 0 ]; then echo "./autogen.sh failed"; exit 1 ; fi echo if test "$1" = "64"; then cd release64 if [ $? -ne 0 ]; then echo "cd release64 failed"; exit 1 ; fi echo "configuring for 64 bit" echo # You may add --enable-adms to the following command for adding adms generated devices ../configure --with-x --enable-xspice --enable-cider --with-readline=yes --enable-openmp --disable-debug CFLAGS="-m64 -O2" LDFLAGS="-m64 -s" else cd release if [ $? -ne 0 ]; then echo "cd release failed"; exit 1 ; fi echo "configuring for 32 bit" echo # You may add --enable-adms to the following command for adding adms generated devices ../configure --with-x --enable-xspice --enable-cider --with-readline=yes --enable-openmp --disable-debug CFLAGS="-m32 -O2" LDFLAGS="-m32 -s" fi if [ $? -ne 0 ]; then echo "../configure failed"; exit 1 ; fi echo # make clean is required for properly making the code models echo "cleaning (see make_clean.log)" make clean 2>&1 -j8 | tee make_clean.log exitcode=${PIPESTATUS[0]} if [ $exitcode -ne 0 ]; then echo "make clean failed"; exit 1 ; fi echo "compiling (see make.log)" make 2>&1 -j8 | tee make.log exitcode=${PIPESTATUS[0]} if [ $exitcode -ne 0 ]; then echo "make failed"; exit 1 ; fi # 32 bit: Install to C:\Spice # 64 bit: Install to C:\Spice64 echo "installing (see make_install.log)" make install 2>&1 | tee make_install.log exitcode=${PIPESTATUS[0]} if [ $exitcode -ne 0 ]; then echo "make install failed"; exit 1 ; fi echo "success" exit 0 tmpk8ny_4pz/contrib/0000755000175000017500000000000013546075722014620 5ustar carstencarstentmpk8ny_4pz/contrib/mslib/0000755000175000017500000000000013546075722015726 5ustar carstencarstentmpk8ny_4pz/contrib/mslib/datadef.h0000644000175000017500000000332113546075722017466 0ustar carstencarsten/* * MW. Include for spice */ #ifndef ngspice_DATADEF_H #define ngspice_DATADEF_H /* * Program defaults * * *Directory for input file and input libraries */ #define DECKPATH "./" #define LIBPATH "/usr/local/lib/" /* * Name for output library file */ #define TMPLIBNAME ".lib" /* * * * * actual name is "deck.TMPLIBNAME" */ /* * Command for libraries, subckts and models declaration */ #define LIBINVL "*LIB" #define SUBINVL "*SUB" #define MODINVL "*MOD" /* * Keywords for subckt start, end and model */ #define SUBLINE ".SUBCKT" #define SUBEND ".ENDS" #define MODLINE ".MODEL" #define MODEND #define LIBMESSAGE "* MW Library include for Spice" #define BSIZE 255 #define MODDLINE 1 #define SUBDLINE 4 #define LIBDLINE 8 #define SUBLLINE 16 #define MODLLINE 32 #define ENDSLLINE 64 #define CONTLLINE 128 #define NORMLINE 0 #define WRITESUB 0xffff #define WRITEMOD 0x1111 #define NOWRITE 0x0 #define FAILED 0xffffff #define SUCCESS 0 #define IS_LIB 0x1 #define LIB_OPEN 0x2 #define IS_MOD 0x10 #define IS_SUB 0x100 #define FINDED 0x400 #define DUPLICATE 0x800 #define DECK_OPEN 0x20000 #define TLIB_OPEN 0x100000 #define NAMEVALID 0xfff #define NAMENOTV 0x0 struct LSData { char name[BSIZE]; FILE *filedes; int flag; struct LSData *prevLS; struct LSData *nextLS; }; struct LSData *LSinsert(struct LSData *LS, struct LSData *where); struct LSData *LSclear(struct LSData *LS); struct LSData *Backfree(struct LSData *LS); int readdeck(FILE * tdeck, struct LSData *lib, \ struct LSData *sub, struct LSData *mod); int readlib(struct LSData *lib, FILE * tlib, \ struct LSData *firstSUB, struct LSData *firstMOD); int checkname(struct LSData *smp, char *name); #endif tmpk8ny_4pz/contrib/mslib/libprm0000755000175000017500000000235413546075722017145 0ustar carstencarsten#!/bin/bash #set -x -v # MW. Lip / Param parsing program for spice # -n normal, -f full (keep everything), -r replace original file # -e new addition start with editor, then like normal export TMPLP=/tmp/LibPrm.$$- function trapper() { echo User break! echo Exiting . . . rm -f -v ${TMPLP}* unset TMPLP exit 1 } trap trapper SIGINT SIGQUIT function operror() { echo Incorrect parameters: $*, $# unset TMPLP exit 2 } function repnormpl() { mslib $1 ${TMPLP}1 sed -n -e 'p' -e "1r ${TMPLP}1" $1 >${TMPLP}2 spiceprm ${TMPLP}2 $2 } function keepall() { mslib $1 sed -n -e 'p' -e "1r $1.lib" $1 >${TMPLP}2 spiceprm ${TMPLP}2 $2 } function withedit() { joe $1 mslib $1 ${TMPLP}1 sed -n -e 'p' -e "1r ${TMPLP}1" $1 >${TMPLP}2 spiceprm ${TMPLP}2 $2 } # Main body if test $# -lt 2 -o $# -gt 3; then operror $*; fi if !(test -f $2); then operror $*; fi case $1$# in -r3) operror $*;; -n2) repnormpl $2 ${2%.cir}.ckt;; -n3) repnormpl $2 $3;; -r2) repnormpl $2 $2;; -f2) keepall $2 ${2%.cir}.ckt;; -f3) keepall $2 $3;; -e2) withedit $2 ${2%.cir}.ckt;; -e3) withedit $2 $3;; esac rm -f ${TMPLP}* unset TMPLP exit 0 tmpk8ny_4pz/contrib/mslib/libprm_readme0000644000175000017500000000142613546075722020456 0ustar carstencarstenSo, this is my idea of using parametrized subckts with spice3f4. First I create an input file like foo.cir and I include commands for mslib (*MOD, *SUB, *LIB) in it. Then I run "libprm -n foo.cir". Libprm then runs mslib first to get all models and subckts form given libraries and then runs spiceprm to evaluate all used parameters. This works quite right for me, and I hope that You will find my idea useful. Spiceprm is not my program (I get it from Internet), but I think that it will better to enclose all used programs in this packet. Spiceprm has it's own directory with very good readme and examples. If You want to find out more about libprm or mslib look for the source code. These are rather short and easy programs - they are all that I could write in quite short time. tmpk8ny_4pz/contrib/mslib/makefile0000644000175000017500000000036413546075722017431 0ustar carstencarsten# MW. Include libs for Spice CFLAGS= -O2 -s LDFLAGS= -s OBJS= inc_main.o inc_inp.o inc_LSD.o HDRS= datadef.h SRCC= inc_main.c inc_inp.c inc_LSD.c mslib: $(OBJS) $(CC) $(LDFLAGS) -o $@ $(OBJS) clean: $(RM) $(OBJS) mslib $(OBJS): $(HDRS) tmpk8ny_4pz/contrib/mslib/inc_main.c0000644000175000017500000000740113546075722017651 0ustar carstencarsten/* * MW. Include - main functions */ #include #include #include #include #include "datadef.h" struct LSData *firstLIB; struct LSData *firstSUB; struct LSData *firstMOD; struct LSData *deck; struct LSData *tmplib; int bsize, bsizer; char buf[BSIZE]; int main(int argc, char *argv[]) { /* * Initialize everything */ struct LSData *subp, *libp, *modp; char tch[BSIZE]; int mswritten; tmplib = LSinsert(NULL, NULL); deck = LSinsert(NULL, NULL); *tch = '\0'; mswritten = 0; switch (argc) { case 3: strcpy(tmplib->name, argv[--argc]); strcpy(tch, tmplib->name); case 2: strcpy(deck->name, argv[--argc]); if (!(*tch)) { sprintf(tmplib->name, "%s%s", deck->name, TMPLIBNAME); strcpy(tch, tmplib->name); } break; case 1: fprintf(stdout, "Usage: mslib deck [tmplib]\n"); return FAILED; default: fprintf(stderr, "mslib: Incorrect parameters count.\n"); return FAILED; } /* * Open deck */ if (!(deck->filedes = fopen(deck->name, "r"))) { sprintf(deck->name, "%s%s", DECKPATH, argv[1]); sprintf(tmplib->name, "%s%s", DECKPATH, tch); if (!(deck->filedes = fopen(deck->name, "r"))) { fprintf(stderr, "mslib: Can't open deck %s.\n", deck->name); LSclear(deck); LSclear(tmplib); return FAILED; } } bsizer = BSIZE; bsize = bsizer--; deck->flag = DECK_OPEN; /* * Create tmplib and write first line to it */ if (!(tmplib->filedes = fopen(tmplib->name, "w"))) { fprintf(stderr, "mslib: Can't creat tmplib %s.\n", tmplib->name); LSclear(tmplib); LSclear(deck); return FAILED; } tmplib->flag = TLIB_OPEN; fprintf(tmplib->filedes, "%s\n* Tmp library: %s,\n* For deck: %s.\n\n", \ LIBMESSAGE, tmplib->name, deck->name); firstLIB = LSinsert(NULL, NULL); firstSUB = LSinsert(NULL, NULL); firstMOD = LSinsert(NULL, NULL); /* * Find commands in deck */ readdeck(deck->filedes, firstLIB, firstSUB, firstMOD); if (firstLIB->flag = IS_LIB) { libp = firstLIB->nextLS; do { if (!(libp->filedes = fopen(libp->name, "r"))) { strcpy(tch, libp->name); sprintf(libp->name, "%s%s", LIBPATH, tch); if (!(libp->filedes = fopen(libp->name, "r"))) { libp->flag = FAILED; } } /* * Read libraries if everything is OK */ if (libp->flag != FAILED) { libp->flag = LIB_OPEN; modp = (firstMOD->flag == IS_MOD) ? firstMOD->nextLS : NULL; subp = (firstSUB->flag == IS_SUB) ? firstSUB->nextLS : NULL; mswritten += readlib(libp, tmplib->filedes, subp, modp); } libp = libp->nextLS; } while (libp); } fprintf(stdout, "mslib: Written %d items to tmplib %s.\n", \ mswritten, tmplib->name); if (libp = firstLIB->nextLS) { do { if (libp->flag != LIB_OPEN) fprintf(stderr, " Can't open lib %s.\n", libp->name); libp = libp->nextLS; } while (libp); } /* * Check is models or subckts were find and * * are not duplicated */ if (modp = firstMOD->nextLS) { do { switch (modp->flag) { case DUPLICATE: fprintf(stderr, " Model duplicated %s.\n", \ modp->name); break; default: fprintf(stderr, " Can't find model %s.\n", \ modp->name); break; case FINDED: } modp = modp->nextLS; } while (modp); } if (subp = firstSUB->nextLS) { do { switch (subp->flag) { case DUPLICATE: fprintf(stderr, " Subckt duplicated %s.\n", \ subp->name); break; default: fprintf(stderr, " Can't find subckt %s.\n", \ subp->name); break; case FINDED: } subp = subp->nextLS; } while (subp); } /* * Clear all data and close files */ LSclear(tmplib); LSclear(deck); LSclear(firstLIB); LSclear(firstSUB); return SUCCESS; } tmpk8ny_4pz/contrib/mslib/liblook0000755000175000017500000000300313546075722017303 0ustar carstencarsten#!/bin/bash #set -x -v # MW. Lib search / show program # usage liblook libname [text_to_find] [l_before] [l_after] LIBPATH=/usr/local/lib function trapper() { echo User break! echo Exiting . . . unset LIBPATH exit 1 } trap trapper SIGINT SIGQUIT function operror() { echo Incorrect parameters: $*, $# echo Usage: liblook libname [text_to_find] [l_before] [l_after] unset LIBPATH exit 2 } function showlib() { if test -f $LIBPATH/$1; then less $LIBPATH/$1; exit 0; fi if test -f [C./$1; then less ./$1; exit 0; fi echo Searching $1 in ~/ . . . less $(find ~/ -name $1) } function searchlib() { if test -f $LIBPATH/$1; then echo File: $1; echo; grep -B"$3" -A"$4" --ignore-case -e "$2" $LIBPATH/$1; echo; exit 0; fi if test -f ./$1; then echo File: $1; echo; grep -B"$3" -A"$4" --ignore-case -e "$2" ./$1; echo; exit 0; fi #if *.lib or sth like this echo Searching $1 in ~/ . . .;echo; if (grep -B"$3" -A"$4" --ignore-case -e "$2" $(find ~/ -name $1)); then echo; exit 0; fi echo Searching $1 in $LIBPATH;echo; if (grep -B"$3" -A"$4" --ignore-case -e "$2" $(find $LIBPATH -name $1)); then echo; exit 0; fi } # Main body if test $# -lt 1 -o $# -gt 4; then operror $*; fi case $# in 1) showlib $*;; 2) searchlib $1 $2 2 2;; 3) searchlib $1 $2 $3 2;; 4) searchlib $1 $2 $3 $4;; esac unset LIBPATH exit 0 tmpk8ny_4pz/contrib/mslib/inc_inp.c0000644000175000017500000000720613546075722017516 0ustar carstencarsten/* * MW. Include for spice */ #include #include #include #include #include "datadef.h" static int whatdline(char *tbuf, char *firstname); static int whatlline(char *tbuf, char *name); extern int bsizer; extern char buf[BSIZE]; /* * Read deck and search for *MOD, *LIB, *SUB commands */ int readdeck(FILE * tdeck, struct LSData *lib, \ struct LSData *sub, struct LSData *mod) { char firstname[BSIZE]; char *names, *smlp; struct LSData *which; while (fgets(buf, bsizer, tdeck)) { smlp = buf; /* * Ignore control chars at the end of line */ do { smlp++; } while ((!(iscntrl(*smlp))) && (*smlp != '\0')); *smlp = '\0'; switch (whatdline(buf, firstname)) { case LIBDLINE: lib->flag = IS_LIB; which = lib; break; case SUBDLINE: sub->flag = IS_SUB; which = sub; break; case MODDLINE: mod->flag = IS_MOD; which = mod; break; default: which = NULL; } /* * If we finded something */ if (which) { names = buf; strsep(&names, " "); while (smlp = strsep(&names, " ")) { if (*smlp) { which = LSinsert(NULL, which); strcpy(which->name, smlp); } } } } return ((lib->flag != IS_LIB) && (mod->flag != IS_MOD) \ &&(sub->flag != IS_SUB)) ? FAILED : SUCCESS; } /* * Read library and write specififed models/subckts to tmplib */ int readlib(struct LSData *lib, FILE * tlib, \ struct LSData *sub, struct LSData *mod) { char name[BSIZE]; int numi, wflag, nextsub; numi = 0; wflag = NOWRITE; nextsub = 0; while (fgets(buf, bsizer, lib->filedes)) { /* * Now we must check what line is it and if it should be written to tmplib */ switch (whatlline(buf, name)) { case (MODLLINE): if (wflag == WRITESUB) fputs(buf, tlib); else { if (mod) { if (checkname(mod, name)) { wflag = WRITEMOD; numi++; fprintf(tlib, "* Model: %s, from: %s.\n", \ name, lib->name); fputs(buf, tlib); } } } break; case (SUBLLINE): if (sub) { if (wflag==WRITESUB) { /* subckt inside subckt not so funny */ nextsub++; fputs(buf, tlib); break; } if (checkname(sub, name)) { wflag = WRITESUB; numi++; fprintf(tlib, "* Subckt: %s, from: %s.\n", \ name, lib->name); fputs(buf, tlib); } } break; case (NORMLINE): if (wflag == WRITEMOD) { wflag = NOWRITE; fputs("\n* End Model.\n\n", tlib); } if (wflag == WRITESUB) fputs(buf, tlib); break; case (ENDSLLINE): if (nextsub) { nextsub--; fputs(buf, tlib); break; } else { if (wflag == WRITESUB) { fprintf(tlib, "%s\n* End Subckt\n\n", buf); } wflag = NOWRITE; break; } case (CONTLLINE): if (wflag != NOWRITE) fputs(buf, tlib); } } return numi; } /* * Check what line in deck it is */ int whatdline(char *tbuf, char *firstname) { if (sscanf(tbuf, "*LIB %s", firstname) == 1) return LIBDLINE; if (sscanf(tbuf, "*SUB %s", firstname) == 1) return SUBDLINE; if (sscanf(tbuf, "*MOD %s", firstname) == 1) return MODDLINE; return NORMLINE; } /* * Check what line it is. If we have model or subckt line we also read its name */ int whatlline(char *tbuf, char *name) { if (sscanf(tbuf, ".SUBCKT %s %*s", name) == 1) return SUBLLINE; if (sscanf(tbuf, ".MODEL %s %*s", name) == 1) return MODLLINE; if (sscanf(tbuf, ".ENDS%c", name) == 1) return ENDSLLINE; if (sscanf(tbuf, "+%s", name) == 1) return CONTLLINE; return NORMLINE; } tmpk8ny_4pz/contrib/mslib/mslib_readme0000644000175000017500000000302613546075722020275 0ustar carstencarstenMslib can create a small tmp library which can be .include to spice deck or used as tmp file with libprm. You invoke it like this: mslib deck_name [tmp_lib_name]. If second argument is not given mslib uses deck_name.lib. Mslib then reads deck and looks for special commands in it. This commands are: *SUB name1 name2 ... - what subckts are used *MOD name1 name2 ... - what models are used *LIB name1 name2 ... - what libraries should be searched You can give full path for libraries or just the name. Mslib tries to find them in current directory and then in directory specified in datadef.h file. There are also some other default options defined there. Check them After all a tmp. library for the deck is created. It consist only the models and subckts that were specified in *MOD and *SUB commands. This is all. Mslib is _NOT_ a good program. It should automatically recognize what models or subckts were used and it should be written with flex or bison. Now it just indicates what is my level of programming in C. There are some options that You can set for mslib in datadef.h. I tried to document all of them there, so when want to know more look to the sources. And one more thing. There is a perl program "spiceprm" that lets You use parameters in subckts. Many Intusoft's libraries use this feature. To use parameters I have written a small shell script "libprm". This program automatic runs spiceprm and mslib on Your's deck to give a working spice input file. To see how this all works please read "libprm_readme" and spiceprm readme. tmpk8ny_4pz/contrib/mslib/inc_LSD.c0000644000175000017500000000306413546075722017350 0ustar carstencarsten/* * MW. Include for spice - LSData functions */ #include #include #include #include #include "datadef.h" char *Message = "Michael Widlok, all rights reserved \n" "mslib - MW include for Spice models/subckts\n"; /* * Add or cretate new LS structure just after where pointer */ struct LSData * LSinsert(struct LSData *LS, struct LSData *where) { if (!(LS)) { LS = (struct LSData *) malloc(sizeof(struct LSData)); if (!(LS)) { fprintf(stderr, "LSinsert: Can't allocate LSData srtucture.\n"); exit(FAILED); } LS->filedes = NULL; } /* * If where is given we must set nextLS and prevLS correctly */ if (where) { LS->prevLS = where; if (LS->nextLS = where->nextLS) where->nextLS->prevLS = LS; where->nextLS = LS; } else LS->nextLS = LS->prevLS = NULL; return LS; } /* * Clear all LS list from end. This also closes opened files */ struct LSData * LSclear(struct LSData *LS) { while (LS->nextLS) LS = LS->nextLS; return Backfree(LS); } /* * Used by LSclear */ struct LSData * Backfree(struct LSData *LS) { if (LS->filedes) fclose(LS->filedes); return (LS->prevLS) ? Backfree(LS->prevLS) : free(LS), LS; } /* * Check if sub/mod name should by included */ int checkname(struct LSData *smp, char *name) { do { if (!(strcmp(smp->name, name))) { if (smp->flag != FINDED) { smp->flag = FINDED; return NAMEVALID; } else { smp->flag = DUPLICATE; return NAMEVALID; } } smp = smp->nextLS; } while (smp); return NAMENOTV; } tmpk8ny_4pz/contrib/mslib/COPYING0000644000175000017500000000023113546075722016755 0ustar carstencarstenMslib is free for everyone who think that it might by useful for him. If someone makes it better please e-mail me. Michael Widlok widlok@uci.agh.edu.pl tmpk8ny_4pz/contrib/ChangeLog0000644000175000017500000000060613546075722016374 0ustar carstencarsten2000-10-10 Arno W. Peters * mslib, spiceprm: Michael Widlok released new version of his programs. 2000-03-22 Paolo Nenzi * mslib: Major update. M. Widlok sent the new version of it's programs. * spiceprm: Major update. See above line. 1999-09-14 Arno W. Peters * mslib: Added. * spiceprm: Added. tmpk8ny_4pz/contrib/vbic/0000755000175000017500000000000013546075722015543 5ustar carstencarstentmpk8ny_4pz/contrib/vbic/sgp2vbic0000644000175000017500000001750513546075722017215 0ustar carstencarsten#!/bin/bash -- # perl eval 'exec perl -S -x -w $0 ${1+"$@"}' if 0; # # sgp2vbic: program to convert an SGP .model card to VBIC # # Vers Date Who Comments # ==== ========== ============= ======== # 2.0 06/01/00 Colin McAndrew translated from shell/nawk version # sub usage() { print " $prog: convert SGP .model card to VBIC .model card Usage: $prog [options] modelFile Files: modelFile file with SGP .model card Options: -d debug mode -h print this help message -i print detailed information -v verbose mode -vbeif Vbe do fwd Early voltage map at Vbe ($Vbeif) -vceif Vce do fwd Early voltage map at Vce ($Vceif) -vbcir Vbc do rev Early voltage map at Vbc ($Vbcir) -vecir Vec do rev Early voltage map at Vec ($Vecir) "; } # End of: sub usage sub info() { print " This program maps an SGP .model card into a VBIC .model card. For many parameters there is a 1-to-1 mapping between the two, and the default VBIC parameters are such that the model extensions that are not part of SGP are turned off. There are two fundamental and non-mappable differences between the two models. First, the IRB emitter crowding based resistance modulation model is not supported in VBIC. This parameter is ignored. Second, the Early effect model is different, the bias dependence is substantially better in VBIC than in SGP. This means the models can be made to match only at specific biases. These biases can be specified by the -vxxi[fr] flags. "; } # End of: sub info # # Set program names and variables. # $\="\n"; $,=" "; $Debug=""; $Verbose=""; $Number='([+-]?[0-9]+[.]?[0-9]*|[+-]?[0-9]+[.]?[0-9]*[eE][+-]?[0-9]+|[+-]?[.][0-9]+|[+-]?[.][0-9]+[eE][+-]?[0-9]+)'; @prog=split("/",$0); $prog=$prog[$#prog]; $Pi=atan2(0,-1); $Vbeif=0.6; $Vceif=2.5; $Vbcir=0.5; $Vecir=2.5; # # Parse command line arguments, allow argument # flags to be any case. # for (;;){ if ($#ARGV < 0) { last; } elsif ($ARGV[0] =~ /^-d/i) { $Debug="-d";$Verbose="-v"; } elsif ($ARGV[0] =~ /^-h/i) { &usage();exit(0); } elsif ($ARGV[0] =~ /^-i/i) { &info();exit(0); } elsif ($ARGV[0] =~ /^-v$/i) { $Verbose="-v"; } elsif ($ARGV[0] =~ /^-vbeif$/i) { shift(@ARGV); if (!defined($ARGV[0])) { die("ERROR: no value specified for -vbeif flag, stopped"); } $Vbeif=$ARGV[0]; if ($Vbeif !~ /$Number/) { die("ERROR: value for -vbeif flag must be a number, stopped"); } } elsif ($ARGV[0] =~ /^-vceif$/i) { shift(@ARGV); if (!defined($ARGV[0])) { die("ERROR: no value specified for -vceif flag, stopped"); } $Vceif=$ARGV[0]; if ($Vceif !~ /$Number/) { die("ERROR: value for -vceif flag must be a number, stopped"); } } elsif ($ARGV[0] =~ /^-vbcir$/i) { shift(@ARGV); if (!defined($ARGV[0])) { die("ERROR: no value specified for -vbcir flag, stopped"); } $Vbcir=$ARGV[0]; if ($Vbcir !~ /$Number/) { die("ERROR: value for -vbcir flag must be a number, stopped"); } } elsif ($ARGV[0] =~ /^-vecir$/i) { shift(@ARGV); if (!defined($ARGV[0])) { die("ERROR: no value specified for -vecir flag, stopped"); } $Vecir=$ARGV[0]; if ($Vecir !~ /$Number/) { die("ERROR: value for -vecir flag must be a number, stopped"); } } elsif ($ARGV[0] =~ /^-/) { &usage(); die("ERROR: unknown flag $ARGV[0], stopped"); } else { last; } shift(@ARGV); } if ($#ARGV < 0) { &usage();exit(1); # exit if no file name is specified } $ModelFile=$ARGV[0]; sub QCDEPL { my($vj,$p,$m,$f)=@_; my($w,$xx,$cj,$qj); $w=1.0-$vj/$p; if($w>=1.0-$f){ $cj=$w**(-$m); $qj=$p*(1.0-$w*$cj)/(1.0-$m); } else { $xx=(1.0-$f)**(-(1.0+$m)); $cj=$xx*(1.0-$f*(1.0+$m)+$m*$vj/$p); $qj=$xx*((1.0-$f*(1.0+$m))*($vj-$f*$p)+0.5*$m*($vj*$vj-$f*$f*$p*$p)/$p)+$p*(1.0-$xx*(1.0-$f)**2)/(1.0-$m); } return($qj,$cj); } # # Parse model file # open(IF,"$ModelFile") || die("ERROR: cannot open file $ModelFile, stopped"); $inModel="no"; while () { chomp;tr/A-Z/a-z/; if ($_ =~ /^\s*$/) {next;} if ($_ =~ /^\s*\*/) {next;} last if ($_ !~ /^\+/ && $inModel eq "yes"); if ($_ =~ /^\s*\.mod/) { $inModel="yes";$model=$_;next; } if ($inModel eq "yes") { $_=~s/^\+\s*/ /;$model.=$_;next; } } close(IF); $model=~s/\s*=\s*/=/g; # # Set SGP parameters from .model card # $val{"is"}=1.0e-16; $val{"bf"}=100.0; $val{"nf"}=1.0; $val{"vaf"}=0.0; $val{"ikf"}=0.0; $val{"ise"}=0.0; $val{"ne"}=1.5; $val{"br"}=1.0; $val{"nr"}=1.0; $val{"var"}=0.0; $val{"ikr"}=0.0; $val{"isc"}=0.0; $val{"nc"}=2.0; $val{"rb"}=0.0; $val{"rbm"}=0.0; $val{"re"}=0.0; $val{"rc"}=0.0; $val{"cje"}=0.0; $val{"vje"}=0.75; $val{"mje"}=0.33; $val{"cjc"}=0.0; $val{"vjc"}=0.75; $val{"mjc"}=0.33; $val{"xcjc"}=1.0; $val{"cjs"}=0.0; $val{"vjs"}=0.75; $val{"mjs"}=0.0; $val{"fc"}=0.5; $val{"tf"}=0.0; $val{"xtf"}=0.0; $val{"vtf"}=0.0; $val{"itf"}=0.0; $val{"ptf"}=0.0; $val{"tr"}=0.0; $val{"kf"}=0.0; $val{"af"}=1.0; $val{"eg"}=1.11; $val{"xtb"}=0.0; $val{"xti"}=3.0; $alias{"va"}="vaf"; $alias{"ik"}="ikf"; $alias{"c2"}="ise"; $alias{"vb"}="var"; $alias{"c4"}="isc"; $alias{"pe"}="vje"; $alias{"me"}="mje"; $alias{"pc"}="vjc"; $alias{"mc"}="mjc"; $alias{"ccs"}="cjs"; $alias{"ps"}="vjs"; $alias{"ms"}="mjs"; $alias{"pt"}="xti"; @Field=split(/\s+/,$model); $name=$Field[1]; for ($i=3;$i<=$#Field;++$i) { die("ERROR: term $Field[$i] is not in name=value format, stopped") if ($Field[$i] !~ /=/); ($param,$value)=split(/=/,$Field[$i]); die("ERROR: parameter $param must be a number, stopped") if ($value !~ /$Number/); if (defined($alias{$param})) {$param=$alias{$param};} if ($param eq "irb") { print STDERR "* WARNING: IRB parameter is not supported in vbic"; next; } if (!defined($val{$param})) { print STDERR "* WARNING: parameter $param is not supported in vbic"; next; } $val{$param}=$value; if ($param eq "rbm") {$done{"rbm"}="yes";} } if (!defined($done{"rbm"})) {$val{"rbm"}=$val{"rb"};} if($val{"ise"}>1) {$val{"ise"}=$val{"ise"}*$val{"is"};} if($val{"isc"}>1) {$val{"isc"}=$val{"isc"}*$val{"is"};} $Vbcif=$Vbeif-$Vceif; $Vbeir=$Vbcir-$Vecir; ($qjbef,$cj )=&QCDEPL($Vbeif,$val{"vje"},$val{"mje"},$val{"fc"}); ($qjbcf,$cjbcf)=&QCDEPL($Vbcif,$val{"vjc"},$val{"mjc"},$val{"fc"}); ($qjber,$cjber)=&QCDEPL($Vbeir,$val{"vje"},$val{"mje"},$val{"fc"}); ($qjbcr,$cj )=&QCDEPL($Vbcir,$val{"vjc"},$val{"mjc"},$val{"fc"}); $ivaf=$val{"vaf"};if($ivaf>0){$ivaf=1/$ivaf;} $ivar=$val{"var"};if($ivar>0){$ivar=1/$ivar;} $godIf=$ivaf/(1-$Vbeif*$ivar-$Vbcif*$ivaf); if($godIf<1e-10) {$godIf=1e-10;} $godIr=$ivar/(1-$Vbeir*$ivar-$Vbcir*$ivaf); if($godIr<1e-10) {$godIr=1e-10;} $a11=$qjbcf-$cjbcf/$godIf; $a12=$qjbef; $r1=-1.0; $a21=$qjbcr; $a22=$qjber-$cjber/$godIr; $r2=-1.0; $det=$a11*$a22-$a12*$a21; $ivef=($r1*$a22-$r2*$a12)/$det; $iver=($r2*$a11-$r1*$a21)/$det; $vef=1/$ivef;$ver=1/$iver; print '.model '.$name.' vbic + rcx = '.$val{"rc"}.' + rci = '."0.0".' + rbx = '.$val{"rbm"}.' + rbi = '.($val{"rb"}-$val{"rbm"}).' + re = '.$val{"re"}.' + is = '.$val{"is"}.' + nf = '.$val{"nf"}.' + nr = '.$val{"nr"}.' + fc = '.$val{"fc"}.' + cje = '.$val{"cje"}.' + pe = '.$val{"vje"}.' + me = '.$val{"mje"}.' + cjc = '.($val{"cjc"}*$val{"xcjc"}).' + cjep = '.($val{"cjc"}*(1.0-$val{"xcjc"})).' + pc = '.$val{"vjc"}.' + mc = '.$val{"mjc"}.' + cjcp = '.$val{"cjs"}.' + ps = '.$val{"vjs"}.' + ms = '.$val{"mjs"}.' + ibei = '.($val{"is"}/$val{"bf"}).' + nei = '.$val{"nf"}.' + iben = '.$val{"ise"}.' + nen = '.$val{"ne"}.' + ibci = '.($val{"is"}/$val{"br"}).' + nci = '.$val{"nr"}.' + ibcn = '.$val{"isc"}.' + ncn = '.$val{"nc"}.' + vef = '.$vef.' + ver = '.$ver.' + ikf = '.$val{"ikf"}.' + ikr = '.$val{"ikr"}.' + tf = '.$val{"tf"}.' + xtf = '.$val{"xtf"}.' + vtf = '.$val{"vtf"}.' + itf = '.$val{"itf"}.' + tr = '.$val{"tr"}.' + td = '.($val{"tf"}*$val{"ptf"}*$Pi/180.0).' + ea = '.$val{"eg"}.' + eaie = '.$val{"eg"}.' + eaic = '.$val{"eg"}.' + eane = '.$val{"eg"}.' + eanc = '.$val{"eg"}.' + xis = '.$val{"xti"}.' + xii = '.($val{"xti"}-$val{"xtb"}).' + xin = '.($val{"xti"}-$val{"ne"}*$val{"xtb"}).' + kfn = '.$val{"kf"}.' + afn = '.$val{"af"}; tmpk8ny_4pz/contrib/vbic/README0000644000175000017500000000030313546075722016417 0ustar carstencarstenTwo scripts from Colin McAndrew for vbic model. sgp2vbic - converts a Spice Gummel-Poon model card to a vbic model card. vbis2sgb - converts a vbic model card to a Spice Gummel-Poom model card. tmpk8ny_4pz/contrib/vbic/vbic2sgp0000644000175000017500000001705513546075722017215 0ustar carstencarsten#!/bin/bash -- # perl eval 'exec perl -S -x -w $0 ${1+"$@"}' if 0; # # vbic2sgp: program to convert a VBIC .model card to SGP # # Vers Date Who Comments # ==== ========== ============= ======== # 1.0 07/17/00 Colin McAndrew modified sgp2vbic # sub usage() { print " $prog: convert VBIC .model card to SGP .model card Usage: $prog [options] modelFile Files: modelFile file with VBIC .model card Options: -d debug mode -h print this help message -i print detailed information -v verbose mode -vbeif Vbe do fwd Early voltage map at Vbe ($Vbeif) -vceif Vce do fwd Early voltage map at Vce ($Vceif) -vbcir Vbc do rev Early voltage map at Vbc ($Vbcir) -vecir Vec do rev Early voltage map at Vec ($Vecir) "; } # End of: sub usage sub info() { print " This program maps a VBIC .model card into an SGP .model card. For many parameters there is a 1-to-1 mapping between the two, and the default VBIC parameters are such that the model extensions that are not part of SGP are turned off. However if the extensions in VBIC are used, clearly they are not translated into SGP. In particular, note that using the separate ideality coefficients for base current in VBIC will give a model that will NOT translate into SGP properly. A simple calculation of BF(SGP)=IS(VBIC)/IBEI(VBIC) is done, that will not be accurate if NEI(VBIC) is not equal to NF(VBIC). The Early effect model is different between VBIC and SGP, the bias dependence is substantially better in VBIC than in SGP. This means the models can be made to match only at specific biases. These biases can be specified by the -vxxi[fr] flags. "; } # End of: sub info # # Set program names and variables. # $\="\n"; $,=" "; $Debug=""; $Verbose=""; $Number='([+-]?[0-9]+[.]?[0-9]*|[+-]?[0-9]+[.]?[0-9]*[eE][+-]?[0-9]+|[+-]?[.][0-9]+|[+-]?[.][0-9]+[eE][+-]?[0-9]+)'; @prog=split("/",$0); $prog=$prog[$#prog]; $Pi=atan2(0,-1); $Vbeif=0.6; $Vceif=2.5; $Vbcir=0.5; $Vecir=2.5; # # Parse command line arguments, allow argument # flags to be any case. # for (;;){ if ($#ARGV < 0) { last; } elsif ($ARGV[0] =~ /^-d/i) { $Debug="-d";$Verbose="-v"; } elsif ($ARGV[0] =~ /^-h/i) { &usage();exit(0); } elsif ($ARGV[0] =~ /^-i/i) { &info();exit(0); } elsif ($ARGV[0] =~ /^-v$/i) { $Verbose="-v"; } elsif ($ARGV[0] =~ /^-vbeif$/i) { shift(@ARGV); if (!defined($ARGV[0])) { die("ERROR: no value specified for -vbeif flag, stopped"); } $Vbeif=$ARGV[0]; if ($Vbeif !~ /$Number/) { die("ERROR: value for -vbeif flag must be a number, stopped"); } } elsif ($ARGV[0] =~ /^-vceif$/i) { shift(@ARGV); if (!defined($ARGV[0])) { die("ERROR: no value specified for -vceif flag, stopped"); } $Vceif=$ARGV[0]; if ($Vceif !~ /$Number/) { die("ERROR: value for -vceif flag must be a number, stopped"); } } elsif ($ARGV[0] =~ /^-vbcir$/i) { shift(@ARGV); if (!defined($ARGV[0])) { die("ERROR: no value specified for -vbcir flag, stopped"); } $Vbcir=$ARGV[0]; if ($Vbcir !~ /$Number/) { die("ERROR: value for -vbcir flag must be a number, stopped"); } } elsif ($ARGV[0] =~ /^-vecir$/i) { shift(@ARGV); if (!defined($ARGV[0])) { die("ERROR: no value specified for -vecir flag, stopped"); } $Vecir=$ARGV[0]; if ($Vecir !~ /$Number/) { die("ERROR: value for -vecir flag must be a number, stopped"); } } elsif ($ARGV[0] =~ /^-/) { &usage(); die("ERROR: unknown flag $ARGV[0], stopped"); } else { last; } shift(@ARGV); } if ($#ARGV < 0) { &usage();exit(1); # exit if no file name is specified } $ModelFile=$ARGV[0]; sub QCDEPL { my($vj,$p,$m,$f)=@_; my($w,$xx,$cj,$qj); $w=1.0-$vj/$p; if($w>=1.0-$f){ $cj=$w**(-$m); $qj=$p*(1.0-$w*$cj)/(1.0-$m); } else { $xx=(1.0-$f)**(-(1.0+$m)); $cj=$xx*(1.0-$f*(1.0+$m)+$m*$vj/$p); $qj=$xx*((1.0-$f*(1.0+$m))*($vj-$f*$p)+0.5*$m*($vj*$vj-$f*$f*$p*$p)/$p)+$p*(1.0-$xx*(1.0-$f)**2)/(1.0-$m); } return($qj,$cj); } # # Parse model file # open(IF,"$ModelFile") || die("ERROR: cannot open file $ModelFile, stopped"); $inModel="no"; while () { chomp;tr/A-Z/a-z/; if ($_ =~ /^\s*$/) {next;} if ($_ =~ /^\s*\*/) {next;} last if ($_ !~ /^\+/ && $inModel eq "yes"); if ($_ =~ /^\s*\.mod/) { $inModel="yes";$model=$_;next; } if ($inModel eq "yes") { $_=~s/^\+\s*/ /;$model.=$_;next; } } close(IF); $model=~s/\s*=\s*/=/g; # # Set VBIC parameters from .model card # $val{"is"}=1.0e-16; $val{"nf"}=1.0; $val{"nr"}=1.0; $val{"ibei"}=1.0e-18; $val{"nei"}=1.0; $val{"vef"}=0.0; $val{"ikf"}=0.0; $val{"iben"}=0.0; $val{"nen"}=1.5; $val{"ibci"}=1.0e-16; $val{"nci"}=1.0; $val{"ver"}=0.0; $val{"ikr"}=0.0; $val{"ibcn"}=0.0; $val{"ncn"}=2.0; $val{"rbx"}=0.0; $val{"rbi"}=0.0; $val{"re"}=0.0; $val{"rcx"}=0.0; $val{"rci"}=0.0; $val{"cje"}=0.0; $val{"vje"}=0.75; $val{"mje"}=0.33; $val{"fc"}=0.9; $val{"cjc"}=0.0; $val{"cjep"}=0.0; $val{"vjc"}=0.75; $val{"mjc"}=0.33; $val{"cjcp"}=0.0; $val{"vjs"}=0.75; $val{"mjs"}=0.0; $val{"tf"}=0.0; $val{"xtf"}=0.0; $val{"vtf"}=0.0; $val{"itf"}=0.0; $val{"tr"}=0.0; $val{"td"}=0.0; $val{"kfn"}=0.0; $val{"afn"}=1.0; $val{"ea"}=1.12; $val{"eaie"}=1.12; $val{"eaic"}=1.12; $val{"eane"}=1.12; $val{"eanc"}=1.12; $val{"xis"}=3; $val{"xii"}=3; $val{"xin"}=3; $alias{"ik"}="ikf"; $alias{"pe"}="vje"; $alias{"me"}="mje"; $alias{"pc"}="vjc"; $alias{"mc"}="mjc"; $alias{"ps"}="vjs"; $alias{"ms"}="mjs"; @Field=split(/\s+/,$model); $name=$Field[1]; for ($i=3;$i<=$#Field;++$i) { die("ERROR: term $Field[$i] is not in name=value format, stopped") if ($Field[$i] !~ /=/); ($param,$value)=split(/=/,$Field[$i]); die("ERROR: parameter $param must be a number, stopped") if ($value !~ /$Number/); if (defined($alias{$param})) {$param=$alias{$param};} if (!defined($val{$param})) { print STDERR "* WARNING: parameter $param is not supported in sgp"; next; } $val{$param}=$value; } $Vbcif=$Vbeif-$Vceif; $Vbeir=$Vbcir-$Vecir; ($qjbef,$cj )=&QCDEPL($Vbeif,$val{"vje"},$val{"mje"},$val{"fc"}); ($qjbcf,$cjbcf)=&QCDEPL($Vbcif,$val{"vjc"},$val{"mjc"},$val{"fc"}); ($qjber,$cjber)=&QCDEPL($Vbeir,$val{"vje"},$val{"mje"},$val{"fc"}); ($qjbcr,$cj )=&QCDEPL($Vbcir,$val{"vjc"},$val{"mjc"},$val{"fc"}); $ivef=$val{"vef"};if($ivef>0){$ivef=1/$ivef;} $iver=$val{"ver"};if($iver>0){$iver=1/$iver;} $godIf=$cjbcf*$ivef/(1+$qjbef*$iver+$qjbcf*$ivef); if($godIf<1e-10) {$godIf=1e-10;} $godIr=$cjber*$iver/(1+$qjber*$iver+$qjbcr*$ivef); if($godIr<1e-10) {$godIr=1e-10;} $a11=-$Vbcif-1.0/$godIf; $a12=-$Vbeif; $r1 =-1.0; $a21=-$Vbcir; $a22=-$Vbeir-1.0/$godIr; $r2 =-1.0; $det=$a11*$a22-$a12*$a21; $ivaf=($r1*$a22-$r2*$a12)/$det; $ivar=($r2*$a11-$r1*$a21)/$det; $vaf=1/$ivaf;$var=1/$ivar; print '.model '.$name.' sgp + rc = '.($val{"rcx"}+$val{"rci"}).' + rbm = '.$val{"rbx"}.' + rb = '.($val{"rbx"}+$val{"rbi"}).' + re = '.$val{"re"}.' + is = '.$val{"is"}.' + nf = '.$val{"nf"}.' + nr = '.$val{"nr"}.' + fc = '.$val{"fc"}.' + cje = '.$val{"cje"}.' + vje = '.$val{"vje"}.' + mje = '.$val{"mje"}.' + cjc = '.($val{"cjc"}+$val{"cjep"}).' + xcjc = '.($val{"cjc"}/($val{"cjc"}+$val{"cjep"})).' + pjc = '.$val{"vjc"}.' + mjc = '.$val{"mjc"}.' + cjs = '.$val{"cjcp"}.' + pjs = '.$val{"vjs"}.' + mjs = '.$val{"mjs"}.' + bf = '.($val{"is"}/$val{"ibei"}).' + ise = '.$val{"iben"}.' + ne = '.$val{"nen"}.' + br = '.($val{"is"}/$val{"ibci"}).' + isc = '.$val{"ibcn"}.' + nc = '.$val{"ncn"}.' + vaf = '.$vaf.' + var = '.$var.' + ikf = '.$val{"ikf"}.' + ikr = '.$val{"ikr"}.' + tf = '.$val{"tf"}.' + xtf = '.$val{"xtf"}.' + vtf = '.$val{"vtf"}.' + itf = '.$val{"itf"}.' + tr = '.$val{"tr"}.' + ptf = '.($val{"td"}*180.0/($val{"tf"}*$Pi)).' + eg = '.$val{"ea"}.' + xti = '.$val{"xis"}.' + xtb = '.($val{"xis"}-$val{"xii"}).' + kf = '.$val{"kfn"}.' + af = '.$val{"afn"}; tmpk8ny_4pz/contrib/spiceprm/0000755000175000017500000000000013546075722016442 5ustar carstencarstentmpk8ny_4pz/contrib/spiceprm/CHANGES0000644000175000017500000000133113546075722017433 0ustar carstencarsten------------------------------- MW. 01-10-2000 Bugs Fixes - ----------- .subckt inside another parametrized .subckt works right now. ---------------------------------------------------------------------- Version 0.11 January 2, 1996 ---------------------------------------------------------------------- No new features. Bug Fixes - ----------- 1. Duplicate name clash problem with parameterized subckt calls from within a .subckt....ends block. 2. Writing continuation lines to the output file occaisionally choked. ---------------------------------------------------------------------- Version 0.10 October 10, 1996 ---------------------------------------------------------------------- Original release. tmpk8ny_4pz/contrib/spiceprm/spiceprm-0.11.lsm0000644000175000017500000000136013546075722021356 0ustar carstencarstenBegin3 Title: spiceprm-0.11.tar.gz Version: 0.11 Entered-date: 02JAN97 Description: A Perl script preprocessor adding parameterized subcircuit capability to the Berkeley Spice circuit simulator. Should also work with any spice lacking this feature. Keywords: spice cad simulation preprocessor perl script Author: andy@moose.mv.com (Andy Borsa) Maintained-by: Primary-site: sunsite.unc.edu /pub/Linux/apps/circuits 15.6kB spiceprm-0.11.tar.gz Alternate-site: Original-site: Platforms: Linux or most any unix, Perl 4 or greater. Tested with Linux and Perl 5. Copying-policy: GNU General Public License. See file COPYING. End tmpk8ny_4pz/contrib/spiceprm/COPYING0000644000175000017500000004307013546075722017501 0ustar carstencarsten GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy 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 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. tmpk8ny_4pz/contrib/spiceprm/README0000644000175000017500000002150713546075722017327 0ustar carstencarsten------------------------------------------------------------------------ SPICEPRM - A Spice preprocessor for parameterized subcircuits (v 0.11) Copyright (C) 1996 Andrew J. Borsa ------------------------------------------------------------------------ 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 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ------------------------------------------------------------------------ Spiceprm was written in the course of moving my engineering activities to the Linux operating system. My previous MSDOS spice package permitted passing parameters to subcircuits. The raw Berkely Spice doesn't. Anyone used to this feature knows the frustration of trying to use a simulator without it. This script is the result of my desperation. It translates a circuit file containing parameterized subcircuits with math expressions into another circuit file meeting raw spice requirements. You then run spice on the translated output file. This is an alpha version. It probably has some bugs I haven't caught. But I have used it in a work environment enough to feel comfortable about releasing it for comments and improvement suggestions. What's So Great About Subcircuits With Parameters? -------------------------------------------------- 1. You can generalize a model once and then use it without having to recalculate values of it's internal elements every time. 2. Many electronic devices can be modelled by using mathematical expressions. The independent variables can be passed to the model as parameters, evaluated in equations, and used to set the behavior of a particular model instance. 3. They save mucho time and minimize human calculation error. Installation ------------ 1. Copy the executable script to an accessible directory. I keep mine in $HOME/bin so it's on my path. 2. Modify the top line if necessary to reflect the path to your Perl interpreter. For ex., #! /usr/bin/perl may have to become #! /usr/local/bin/perl or wherever the perl binary is located. Usage ----- spiceprm infile [outfile] infile: Circuit file name containing parameterized subcircuits. outfile: Transformed file meeting raw spice netlist conventions. Optional. If not given, output is produced on standard output (stdout). My file name convention: infile = *.cir, outfile = *.ckt infile == outfile isn't permitted for a coupla good reasons, the best being you don't want to trash your original source. Now source outfile from spice. I always check the output from a new infile just to make sure. This version only checks for a few obvious errors, so scanning outfile for reasonable looking values and netlist correctness is wise. Note that comment and blank lines are discarded in outfile and alphabetic characters are transformed to lower case. Parameterized Subcircuit Netlist Convention ------------------------------------------- Calling a parameterized subcircuit works similarly to a normal spice call except for the addition of a {} delimited list of parameter value assignments - Xname n1 n2 n3 ... ni subname {p1 = val1 ... pj = valj} p1 thru pj are the parameter assignments to be passed to the subcircuit. val is any valid spice value. {} (braces) must enclose the parameter assignment sequence. After running the preprocessor on this file, each call in the netlist will be replaced by the following - Xname n1 n2 n3 ... ni subname#k *{p1 = val1 ... pj = valj} where k is a digit or digits representing a subcircuit with that specific set of parameter substitutions. k will be incremented for each unique set of parameters and matched by a new .subckt listing named subname#k as follows - .subckt subname#k n1 n2 n3 ... ni ... listing with parameters substituted and equations evaluated .ends Creating Parameterized Subcircuits ---------------------------------- Below is a simple example. See the EXAMPLES file for a number of illustrative and useful models for Spice3. This model creates an RF power source specified using the natural output power units of dBm (dB referenced to 1 milliwatt). Note that the model parameters must be declared on the ".subckt" definition line inside curly braces {}. **************************************************************** * Sine wave RF power source. * Parameters: F = Frequency * R = Output resistance * P = Power in dBm * V = DC (EMF) .SUBCKT RFGEN 1 2 {F R P V} * + - Is 2 1 DC {V/R} SIN {V/R} {sqrt((10**(P/10))/(125*R))} {F} Ro 1 2 {R} .ENDS **************************************************************** Note that independent current source Is has it's literal spice parameters replaced by equations that calculate the required values from the passed parameters. Each equation must be enclosed by {} to inform the preprocessor that a substitution and calculation must be performed for whatever appears between the braces. Equations may span multiple lines by using the spice line continuation symbol "+" as the first character of the following line. .MODEL statements inside subcircuits may also use passed parameters. In fact, anything between {} inside a subcircuit will be evaluated and replaced with a result. Be careful in situations like the following: Bx 3 0 v = {v(1)*sgn(v(2))*frick/frack} WRONG!!! The Spice3 nonlinear source element "B" also accepts equations describing it's output dependency on functions of circuit voltages and currents. If "frick" and "frack" are parameters, you must separate them from the element's equation as follows - Bx 3 0 v = v(1)*sgn(v(2))*{frick/frack} Just remember that preprocessor equations and spice functions must never meld. The parameter substitution first replaces all parameters between any {} with their numerical values and then uses Perl's eval() function to produce a final numerical value. Theoretically at least, you could execute a Perl program within those braces. I haven't explored this yet so feel free. Realize though, that whatever's inside the braces gets a ";" appended at the end to make a valid Perl statement from the usual equation. Also, Perl's block delimiters are braces, so extra one's could confuse the current parsing which is simply oriented to equations. Ah well. Known Bugs, Anomalies, and Perl Gotcha's ---------------------------------------- 1. Minimal error checking! Be forewarned! 2. Don't use ".ends subckt_name" with parameters. Use ".ends" only. The preprocessor modifies subckt_name to subckt_name#k. 3. Spice unit representations like "k", "meg", etc, are not recognized inside the {} equation sections of .subckt listings. They may, however, be used in the parameter assignment section of a .subckt call. 4. "-" as part of .subckt name doesn't work but "_" does. Stick to alphanumeric names with optional underscore characters. 5. Equations must use Perl math operators and functions. The following lists operator differences I'm aware of - Exponentiation - Perl : ** Spice3 : ^ Logical AND, OR - Perl : &&, || Spice3 : &, | Equality, Inequality - Perl : ==, != Spice3 : =, <> These operators are the same for Perl and Spice3 - + - * / % ! < > <= >= These operators are unique to Perl - & | ^ ~ : bitwise AND, OR, exclusive OR, complement Perl math functions - abs(EXPR) : absolute value of EXPR atan2(Y,X) : arctangent of Y/X in the range of -pi to +pi cos(EXPR) : cosine of EXPR in radians exp(EXPR) : e raised to EXPR int(EXPR) : integer portion of EXPR log(EXPR) : natural logarithm (base e) of EXPR rand[(EXPR)]: returns a random fractional number between 0 and the value of EXPR. If EXPR is omitted, returns a value between 0 and 1. sin(EXPR) : sine of EXPR in radians sqrt(EXPR) : square root of EXPR Finally, if you could make use of a language allowing you to do neat things like this with minimal pain, give Perl a try. It's naturally suited for text processing and transformation tasks like pre and post processors, along with any math manipulation required. tmpk8ny_4pz/contrib/spiceprm/EXAMPLES0000644000175000017500000001240413546075722017604 0ustar carstencarsten**************************************************************** * Pi attenuator pad. * Parameters: R0 = impedance * DB = attenuation in dB (positive) .SUBCKT PIPAD 1 2 { R0 DB } R1 1 0 {R0*(1+2/(10**(DB/20)-1))} R2 1 2 {(R0/2)*(10**(DB/20)-10**(DB/-20))} R3 2 0 {R0*(1+2/(10**(DB/20)-1))} .ENDS **************************************************************** * PCB Via inductance + extra L. * H = substrate height in inches * D = via diameter in inches * L = extra inductance in henries. .SUBCKT VIA 1 2 { H D L } LV 1 2 {L+ + 5.08E-9*H*(log((2+sqrt(4+D*D/(H*H)))*H/D)+ + .75*(D/H-sqrt(4+D*D/(H*H))))} .ENDS **************************************************************** * Voltage-controlled oscillator. * Parameters: F = frequency @ Vc = 0 in Hz * KV = tuning sensitivity in Hz/volt * A = peak output amplitude * RO = output port resistance * Connections: Vc Out .SUBCKT VCO 20 2 { F KV A RO } RIN1 20 0 1E12 VSW 30 0 DC 0 PULSE 0 1 RSW 30 0 1E12 BIN 3 0 V=(V(20)+{F/KV})*V(30) R3 3 0 1E6 GSIN 2 0 22 0 {1/RO} RSIN 2 0 {RO} B1 1 0 I=-(V(22)*V(3)) B2 22 0 I=V(1)*V(3) R2 1 0 1E9 I1 0 1 PULSE {1E-9*A} 0 C2 1 0 {.159154943/KV} C1 22 0 {.159154943/KV} R1 22 0 1E9 .ENDS **************************************************************** * Ideal Frequency converter. * Parameters: F = Oscillator frequency * RI = input port resistance * RO = output port resistance * Connections: In Out .SUBCKT FCNVT 1 2 { F RI RO } RIN 1 0 {RI} VLO 3 0 DC 0 SIN 0 1 {F} RLO 3 0 1E12 BMIX 0 2 I=(V(1)*V(3))/{RO} RO 2 0 {RO} .ENDS **************************************************************** * Sine wave RF power source. * Parameters: F = Frequency * R = Output resistance * P = Power in dBm * V = DC (EMF) .SUBCKT RFGEN 1 2 { F R P V } * + - Is 2 1 DC {V/R} SIN {V/R} {sqrt((10**(P/10))/(125*R))} {F} Ro 1 2 {R} .ENDS **************************************************************** * Sine wave 2-tone RF power source. * Parameters: F1 = 1st tone frequency * F2 = 2nd tone frequency * R = output resistance * P = power per tone in dBm * V = DC (EMF) .SUBCKT 2TGEN 1 2 { F1 F2 R P V } * + - I1 2 1 DC {V/R} SIN {V/R} {sqrt((10**(P/10))/(125*R))} {F1} I2 2 1 DC 0 SIN 0 {sqrt((10**(P/10))/(125*R))} {F2} Ro 1 2 {R} .ENDS **************************************************************** * Transmission lines * All ports must have external connections. * Parameters: Z0 = impedance * L = length in inches * VP = velocity-of-propagation rel. to air * Connections: 1+ 1- 2+ 2- .SUBCKT TXL 1 2 3 4 { Z0 L VP } T1 1 2 3 4 Z0={Z0} TD={L/(1.180315E10*VP)} .ENDS **************************************************************** * Lossy transmission line. * All ports must have external connections. * Parameters: Z0 = impedance * L = length in inches * VP = velocity-of-propagation rel. to air * A = loss in dB/inch * Connections: 1+ 1- 2+ 2- .SUBCKT LTXL 1 2 3 4 { Z0 L VP A } O1 1 2 3 4 LOSSY .MODEL LOSSY LTRA LEN={L} + R={5.848492e-3*A*Z0} + L={Z0/(1.180315E10*VP)} + C={1/(1.180315E10*VP*Z0)} .ENDS **************************************************************** * 2 coupled transmission lines * All ports must have external connections. * Parameters: Z0E = even-mode impedance * Z0O = odd-mode impedance * L = length in inches * VP = velocity-of-propagation rel. to air * Connections: 1+ 1- 2+ 2- { Z0E Z0O L VP } .SUBCKT CPL2 1 2 3 4 T1 1 0 3 0 Z0={Z0E} TD={L/(1.180315E10*VP)} T2 1 2 3 4 Z0={2*Z0E*Z0O/(Z0E-Z0O)} TD={L/(1.180315E10*VP)} T3 2 0 4 0 Z0={Z0E} TD={L/(1.180315E10*VP)} .ENDS **************************************************************** * Generic Bipolar OpAmp - linear model * Parameters: G = open-loop gain in dB * FT = unity gain frequency in Hz * IOS = input offset current in amps * VOS = input offset voltage * IB = input bias current in amps .SUBCKT BIPOPA 2 3 6 7 4 { G FT IOS VOS IB } * - In + Out Vcc Vee RP 4 7 10K RXX 4 0 10MEG IBP 3 0 {IB-IOS} RIP 3 0 10MEG CIP 3 0 1.4PF IBN 2 0 {IB} RIN 2 0 10MEG CIN 2 0 1.4PF VOFST 2 10 {VOS} RID 10 3 200K EA 11 0 10 3 1 R1 11 12 5K R2 12 13 50K C1 12 0 {13E-6/FT} GA 0 14 0 13 {0.0135*(10**(G/20))} C2 13 14 {2.7E-6/FT} RO 14 0 75 L 14 6 {30/FT} RL 14 6 1000 CL 6 0 3PF .ENDS **************************************************************** * Generic FET OpAmp - linear model * Parameters: G = open-loop gain in dB * FT = unity gain frequency in Hz * VOS = input offset voltage .SUBCKT FETOPA 2 3 6 7 4 { G FT VOS } * - In + Out Vcc Vee RP 4 7 6K RXX 4 0 10MEG IBP 3 0 33E-12 RIP 3 0 1E12 CIP 3 0 3PF IBN 2 0 30E-12 RIN 2 0 1E12 CIN 2 0 3PF VOFST 2 10 {VOS} RID 10 3 1E12 EA 11 0 10 3 1 R1 11 12 5K R2 12 13 50K C1 12 0 {24E-6/FT} GA 0 14 0 13 {0.0135*(10**(G/20))} C2 13 14 {2.33E-6/FT} RO 14 0 75 L 14 6 {4E-6/FT} RL 14 6 100 CL 6 0 3PF .ENDS **************************************************************** tmpk8ny_4pz/contrib/spiceprm/spiceprm0000755000175000017500000002414413546075722020217 0ustar carstencarsten#!/usr/bin/env perl # spiceprm # Pass parameters to spice subcircuits. # Usage: spiceprm infile [outfile] # infile and outfile must be different. # Output written to STDOUT if outfile not given. $BANNER = "Spiceprm version 0.11, Copyright (C) 1996 Andrew J. Borsa"; # NOTES: # 1. Units not recognized inside .subckt {} expressions. # 2. Perl exponent operator: "**", Spice exp op: "^". # 3. "-" as part of subckt name doesn't work but "_" does. # Netlist convention # Xname n1 n2 n3 ... ni subname {p1 = val1 ... pj = valj} # p1 thru pj are the parameters to be passed to the subcircuit. # val is any valid spice value. # # .subckt name n1 n2 ... ni {p1 p2 ... pj} # parameter expressions must be enclosed in {}. # After substitution - # Xname n1 n2 n3 ... ni subname#k # *{p1 = val1 ... pj = valj} # .subckt subname#k n1 n2 n3 ... ni # ... listing with parameters substituted # .ends # %subckt: key = subname # value = startline, endline, listing(.subckt ... .ends) # Only for .subckts with parameters. # %subprm: key = subname # value = parameter name list # %subcall: key = Xname[#subname0#subname1...] # value = subname#k # NOTE: IF Xname is called from within a .subckt, it will have calling # .subckt names appended, delimited by #'s. # %sub: key = subname#k # value = p1 val1 ... pj valj, where val is a pure # numeric with no units. $MAXLEN = 70; # Max output file line length. $DMAXLEN = 10; # Amount to increment if necessary. $linenum = 0; %units = ('f','1e-15','p','1e-12','n','1e-9','u','1e-6','mil','25.4e-6', 'm','1e-3','k','1e3','meg','1e6','g','1e9','t','1e12'); $* = 1; # Pattern match with multi-line strings. ($infile, $outfile) = @ARGV; print "\n$BANNER\ninfile: $infile\noutfile: $outfile\n\n"; $#ARGV && ($infile eq $outfile) && die "Input and Output filenames must be different\n"; open(INFILE, $infile) || die "Can't open source file: $infile\n"; $hasprm = $depth = 0; &prm_scan; close(INFILE); open(INFILE, $infile) || die "Can't open source file: $infile\n"; unlink $outfile if $#ARGV; open(OUTFILE, $#ARGV ? ">$outfile" : ">-") || die "Can't open output file: $outfile\n"; $depth = 0; &prm_wr; close(INFILE); close(OUTFILE); # Get a line from the input file, combining any continuation lines into # one long line. Skip comment and blank lines. sub prm_getline { local($line); chop($line = defined($nxtline) ? $nxtline : ); $linenum = $.; while ($nxtline = ) { if ($line =~ /^\*|^\s/) { $line = ''; } if ($line eq '' || $nxtline =~ s/^(\+)/ /) { chop($nxtline); $line .= $nxtline; } else { last; } } $line; } # Scan the input file looking for subcircuit calls with parameter list and # any subcircuits with defined parameters. sub prm_scan { local(@w, @tmp, @list); local($xnm, $subnm, $i, $max, $m, $s, $n, $tmp, $start); local($sublist) = ''; PRM_SCAN: while ($_ = &prm_getline) { # skip .control - .endc blocks if (/^\.control/i) { while ($_ = &prm_getline) { next PRM_SCAN if (/^\.endc/i); } } tr/A-Z/a-z/; PRM_TST: { if (/^x/ && s/(\{([^\}]+)\})//) { @w = split(' '); @tmp = @w[0 .. $#w-1]; $xnm = $w[0] . $sublist; $subnm = $w[$#w]; $_ = $2; $i = 0; while (/(\w+)\s*\=\s*([+-]?\d*(\.\d*)?([Ee][+-]?\d+)?)([a-z]\w*)?/) { # 1 2 3 4 5 $prmval{$1} = $2*($5 ? &unit2mult($5) : 1); $_ = $'; $i += 2; } $max = -1; $m = ''; CHKDUP: foreach $s (keys %sub) { $s =~ /(\w+)\#(\d+)/; if ($subnm eq $1) { if ($max < $2) { $max = $2; } $n = (@w = split(' ', $sub{$s})); if ($n == $i) { for ($i = 0; $i < $n; $i += 2) { last if $w[$i+1] ne $prmval{$w[$i]}; } if ($i >= $n) { $m = 1; $subcall{$xnm} = $s; last CHKDUP; } } } } if ($m eq '') { foreach $n (keys %prmval) { $m = join(' ', $m, $n, $prmval{$n}); } $sub{($s = join('', $subnm, '#', $max+1))} = $m; $subcall{$xnm} = $s; } push(@list, join(' ', @tmp, $subcall{$xnm})) if $depth; undef %prmval; last PRM_TST; } if (/^\.subckt\s+(\w+)/) { $depth++; $tmp = $1; $sublist .= '#' . $1; if (s/(\{([^\}]+)\})//) { if ($hasprm) { print "Line $linenum: ", "Nested parameterized subckt definitions not permitted\n\n"; } else { $hasprm = 1; $start = $.; $subprm{$psubnm = $tmp} = $2; } } push(@list, $_); # With {} parameter defs removed. last PRM_TST; } if (/^\.ends/) { $sublist =~ s/(\#\w+)$//; if (--$depth == 0) { if ($hasprm) { $subckt{$psubnm} = join("\n",join(' ',$start,$.),@list,$_); } $hasprm = 0; undef @list; $sublist = ''; last PRM_TST; } # MW. 'last PRM_TST' should be inside 'if' loop to allow nestle subckts. } if ($depth) { push(@list, $_); last PRM_TST; } } } } # Write the output file. sub prm_wr { local(@w, @pnms, @list, @line); local($xnm, $subnm, $n, $m, $i, $s); local($sublist) = ''; PRMWR_SCAN: while ($_ = &prm_getline) { # write .control - .endc blocks if (/^\.control/i) { print OUTFILE "$_\n"; while ($_ = &prm_getline) { prm_wrline($_); next PRMWR_SCAN if (/^\.endc/i); } } tr/A-Z/a-z/; if (/^x/ && s/(\{([^\}]+)\})//) { @w = split(' '); $subnm = pop(@w); $xnm = $w[0] . $sublist; prm_wrline(join(' ', @w, $subcall{$xnm})); print OUTFILE "* $1\n"; if (!defined($subprm{$subnm})) { print "Line $linenum: Subckt \"$subnm\" has no defined parameters\n\n"; next PRMWR_SCAN; } $n = @pnms = sort(split(' ', $subprm{$subnm})); $m = (@w = split(' ', $sub{$subcall{$xnm}})); if ($n == $m/2) { for ($i = 0, undef(@list); $i < $m; $i += 2) { push(@list, $w[$i]); } for ($i = 0, @w = sort(@list); $i < $n; ++$i) { if ($pnms[$i] ne $w[$i]) { print "Line $linenum: ", "Undefined parameter \"$w[$i]\"", "in subckt \"$subnm\" call\n\n"; next PRMWR_SCAN; } } } else { print "Line $linenum: ", "Incorrect number of parameters in subckt \"$subnm\" call\n\n"; } next PRMWR_SCAN; } if (/^\.subckt\s+(\w+)/) { if ($s = $subckt{$1}) { $s =~ /\d+\s+(\d+)/; $n = $1; &prm_getline until $. == $n; } else { $depth++; $sublist .= '#' . $1; prm_wrline($_); } next PRMWR_SCAN; } if (/^\.end\b/) { foreach $s (keys %sub) { ($subnm = $s) =~ s/\#\d+//; @line = split(/\n/, $subckt{$subnm}); shift(@line); $line[0] =~ s/$subnm/$s/; %prmval = split(' ', $sub{$s}); foreach (@line) { s/\{([^\}]+)\}/&prm_eval($1, %prmval)/eg; prm_wrline($_); } } print OUTFILE ".end\n"; last PRMWR_SCAN; } if (/^\.ends/) { if (--$depth == 0) { $sublist = ''; } else { $sublist =~ s/(\#\w+)$//; } } prm_wrline($_); } } # Translate a possible unit into a multiplier factor. # Parameter is the unit letter string assumed lower case. sub unit2mult { local($u) = shift; $u = ($u =~ /^(mil|meg)/ ? $1 : substr($u, 0, 1)); $u = defined($units{$u}) ? $units{$u} : 1; } # Evaluate a parameter expression. # Arguments: expression, parameter & value assoc. array. sub prm_eval { local($x,%prm) = @_; foreach $key (keys %prm) { $x =~ s/\b$key\b/$prm{$key}/eg; } eval($x . ';'); } # Write an output file line with a max length. The line is split on # whitespace or '=' at a point less than or equal to the max length # and output as a spice continuation line. # If a splitting delimiter is not found within $MAXLEN, then allowable # length is increased, potentially up to the actual line length. # NOTE: outputs '\n'. # $MAXLEN sets the max value, $DMAXLEN the increment. # File handle = OUTFILE. sub prm_wrline { local($line) = shift; local($max, $s, $m); $max = $MAXLEN; until ($line eq '') { if (length($line) > $max) { $m = substr($line, 0, $max); if ($m =~ /((\s|\=)[^(\s|\=)]*)$/) { $s = $` . $2; $line = '+' . substr($line, length($s)); } else { $max += $DMAXLEN; next; } } else { $s = $line; $line = ''; } print OUTFILE "$s\n"; $max = $MAXLEN; } } tmpk8ny_4pz/contrib/scripts/0000755000175000017500000000000013546075722016307 5ustar carstencarstentmpk8ny_4pz/contrib/scripts/libprm0000755000175000017500000000170613546075722017526 0ustar carstencarsten#!/bin/bash #set -x -v # MW. Lip / Param parsing program for spice # -n normal, -f full (keep everything), -r replace original file export TMPLP=/tmp/LibPrm.$$- function trapper() { echo User break! echo Exiting . . . rm -f -v ${TMPLP}* unset TMPLP exit 1 } trap trapper SIGINT SIGQUIT function operror() { echo Incorrect parameters: $*, $# unset TMPLP exit 2 } function repnormpl() { mslib $1 ${TMPLP}1 sed -n -e 'p' -e "1r ${TMPLP}1" $1 >${TMPLP}2 spiceprm ${TMPLP}2 $2 } function keepall() { mslib $1 sed -n -e 'p' -e "1r $1.lib" $1 >${TMPLP}2 spiceprm ${TMPLP}2 $2 } # Main body if test $# -lt 2 -o $# -gt 3; then operror $*; fi case $1$# in -r3) operror $*;; -n2) repnormpl $2 ${2%.cir}.ckt;; -n3) repnormpl $2 $3;; -r2) repnormpl $2 $2;; -f2) keepall $2 ${2%.cir}.ckt;; -f3) keepall $2 $3;; esac rm -f ${TMPLP}* unset TMPLP exit 0 tmpk8ny_4pz/contrib/scripts/libprm_readme0000644000175000017500000000142313546075722021034 0ustar carstencarstenSo, this is my idea of using parametrized subckts with spice. First I create an input file like foo.cir and I include commands for mslib (*MOD, *SUB, *LIB) in it. Then I run "libprm -n foo.cir". Libprm then runs mslib first to get all models and subckts form given libraries and then runs spiceprm to evaluate all used parameters. This works quite right for me, and I hope that You will find my idea useful. Spiceprm is not my program (I get it from Internet), but I think that it will better to enclose all used programs in this packet. Spiceprm has it's own directory with very good readme and examples. If You want to find out more about libprm or mslib look for the source code. These are rather short and easy programs - they are all that I could write in quite short time. tmpk8ny_4pz/contrib/scripts/liblook0000755000175000017500000000302013546075722017663 0ustar carstencarsten#!/bin/bash #set -x -v # MW. Lib search / show program # usage liblook libname [text_to_find] [l_before] [l_after] LIBPATH=/usr/local/lib function trapper() { echo User break! echo Exiting . . . unset LIBPATH exit 1 } trap trapper SIGINT SIGQUIT function operror() { echo Incorrect parameters: $*, $# echo Usage: liblook libname [text_to_find] [l_before] [l_after] unset LIBPATH exit 2 } function showlib() { if test -f $LIBPATH/$1; then less $LIBPATH/$1; exit 0; fi if test -f [C./$1; then less ./$1; exit 0; fi echo Searching $1 in ~/ . . . less $(find ~/ -name $1) } function searchlib() { if test -f $LIBPATH/$1; then echo File: $LIBNMAE; echo; grep -B"$3" -A"$4" --ignore-case -e "$2" $LIBPATH/$LIBNAME1; echo; exit 0; fi if test -f ./$1; then echo File: $1; echo; grep -B"$3" -A"$4" --ignore-case -e "$2" ./$1; echo; exit 0; fi #if *.lib or sth like this echo Searching $1 in ~/ . . .;echo; if (grep -B"$3" -A"$4" --ignore-case -e "$2" $(find ~/ -name $1)); then echo; exit 0; fi echo Searching $1 in $LIBPATH;echo; if (grep -B"$3" -A"$4" --ignore-case -e "$2" $(find $LIBPATH -name $1)); then echo; exit 0; fi } # Main body if test $# -lt 1 -o $# -gt 4; then operror $*; fi case $# in 1) showlib $*;; 2) searchlib $1 $2 2 2;; 3) searchlib $1 $2 $3 2;; 4) searchlib $1 $2 $3 $4;; esac unset LIBPATH exit 0 tmpk8ny_4pz/contrib/scripts/liblook_readme0000644000175000017500000000052213546075722021201 0ustar carstencarstenLiblook is a script that can show specified model or sub-circuit entry in spice library. Common use look like this: liblook lib_name [text_to_find] [lines_before] [lines_after] lines_before and lines_after are used when you want to specify how many lines you want to see before or after given text. Look to he source for more details. tmpk8ny_4pz/contrib/scripts/COPYING0000644000175000017500000000024613546075722017344 0ustar carstencarstenThese scripts are free for everyone who think that they might by useful for him. If someone makes them better please e-mail me. Michael Widlok widlok@uci.agh.edu.pl tmpk8ny_4pz/.gitattributes0000644000175000017500000000017013546075722016051 0ustar carstencarsten# # do not change crlf line endings of visual studio project files # *.vcproj -text *.sln -text *.vcxproj -text tmpk8ny_4pz/DEVICES0000644000175000017500000005045213546075722014173 0ustar carstencarstenDEVICES ======= Table of contents 1. Introduction 2. Linear Devices 2.1 CAP - Linear capacitor 2.2 IND - Linear inductor 2.3 RES - Linear resistor 3. Distributed Elements 3.1 CPL - Simple Coupled Multiconductor Lines (Kspice) 3.2 LTRA - Lossy Transmission line 3.3 TRA - Transmission line 3.4 TXL - Simple Lossy Transmission Line (Kspice) 3.5 URC - Uniform distributed RC line 4. Voltage and current sources 4.1 ASRC - Arbitrary Source 4.2 CCCS - Current Controlled Current Source 4.3 CCVS - Current Controlled Voltage Source 4.4 ISRC - Independent Current Source 4.5 VCCS - Voltage Controlled Current Source 4.6 VCVS - Voltage Controlled Voltage Source 4.7 VSRC - Independent Voltage Source 5. Switches 5.1 CSW - Current controlled switch 5.2 SW - Voltage controlled switch 6. Diodes 6.1 DIO - Junction Diode 7. Bipolar devices 7.1 BJT - Bipolar Junction Transistor 7.2 BJT2 - Bipolar Junction Transistor 7.3 VBIC - Bipolar Junction Transistor 8. FET devices 8.1 JFET - Junction Field Effect transistor 9. HFET Devices 9.1 HFET1 - Heterostructure Field Effect Transistor Level 1 9.2 HFET2 - Heterostructure Field Effect Transistor Level 2 10. MES devices 10.1 MES - MESFET model 10.2 MESA - MESFET model (MacSpice3f4) 11. MOS devices 11.1 MOS1 - Level 1 MOS model 11.2 MOS2 - Level 2 MOS model 11.3 MOS3 - Level 3 MOS model 11.4 MOS6 - Level 6 MOS model 11.5 MOS9 - Level 9 MOS model 11.6 BSIM1 - BSIM model level 1 11.7 BSIM2 - BSIM model level 2 11.8 BSIM3 - BSIM model level 3 vers. 0 11.9 BSIM3 - BSIM model level 3 vers. 1 11.10 BSIM3 - BSIM model level 3 vers. 2 11.11 BSIM3 - BSIM model level 3 vers. 3 11.12 BSIM4 - BSIM model level 4 11.13 HiSIM2 - Hiroshima-University STARC IGFET Model 11.14 HiSIM_HV - Hiroshima-University STARC IGFET High Voltage Model 11.15 VDMOS - A simple PowerMOS transistor model derived from MOS1 12. SOI devices 12.1 BSIM3SOI_FD - SOI model (fully depleted devices) 12.2 BSIM3SOI_DD - SOI Model (dynamic depletion model) 12.3 BSIM3SOI_PD - SOI model (partially depleted devices) 12.4 BSIMSOI - SOI model (partially/full depleted devices) 12.5 SOI3 - STAG SOI3 Model 13. Verilog-A models 13.1 EKV MOS model 13.2 PSP MOS model 13.3 HICUM0 Bipolar Model 13.4 HICUM2 Bipolar Model 13.5 Mextram Bipolar Model 14. XSPICE code models ------------------ 1. Introduction This file contains the status of devices available in ngspice. This file will be updated every time the device specific code is altered or changed to reflect the current status of this important part of the simulator 2. Linear Devices 2.1 CAP - Linear capacitor Ver: N/A Class: C Level: 1 (and only) Dir: devices/cap Status: Enhancements over the original model: - Parallel Multiplier - Temperature difference from circuit temperature - Preliminary technology scaling support - Model capacitance - Cj calculation based on relative dielectric constant and insulator thickness 2.2 IND - Linear Inductor Ver: N/A Class: L Level: 1 (and only) Dir: devices/ind Status: Enhancements over the original model: - Parallel Multiplier - Temperature difference from circuit temperature - Preliminary technology scaling support - Model inductance - Inductance calculation for toroids or solenoids on the model line. 2.3 RES - Linear resistor Ver: N/A Class: R Level: 1 (and only) Dir: devices/res Status: Enhancements over the original model: - Parallel Multiplier - Different value for ac analysis - Temperature difference from circuit temperature - Noiseless resistor - Flicker noise - Preliminary technology scaling support 3. Distributed elements 3.1 CPL - Simple Coupled Multiconductor Lines (Kspice) Ver: N/A Class: P Level: 1 (and only) Dir: devices/cpl Status: This model comes from swec and kspice. It is not documented, if you have kspice docs, can you write a short description of its use ? - Does not implement parallel code switches - Probably a lot of memory leaks Enhancements over the original model: - Better integrated into ngspice adding CPLask, CPLmAsk and CPLunsetup functions 3.2 LTRA - Lossy Transmission line Ver: N/A Class: O Level: 1 (and only) Dir: devices/ltra Status: - Original spice model. - Does not implement parallel code switches. 3.3 TRA - Transmission line Ver: N/A Class: T Level: 1 (and only) Dir: devices/tra Status: - Original spice model. - Does not implement parallel code switches. 3.4 TXL - Simple Lossy Transmission Line (Kspice) Ver: N/A Class: Y Level: 1 (and only) Dir: devices/txl Status: This model comes from kspice. It is not documented, if you have kspice docs, can you write a short description of its use ? There is some code left out from compilation: TXLaccept and TXLfindBr. Any ideas ? - Does not implement parallel code switches 3.5 URC - Uniform distributed RC line Ver: N/A Class: U Level: 1 (and only) Dir: devices/urc Status: - Original spice model. - Does not implement parallel code switches. 4. Voltage and current sources 4.1 ASRC - Arbitrary Source Ver: N/A Class: B Level: 1 (and only) Dir: devices/asrc Status: The arbitrary source code has been corrected with the patch available on the Internet. There is still an issue to fix, the current of current-controlled generators. 4.2 CCCS - Current Controlled Current Source Ver: N/A Class: F Level: 1 (and only) Dir: devices/cccs Status: - Original spice model. 4.3 CCVS - Current Controlled Voltage Source Ver: N/A Class: H Level: 1 (and only) Dir: devices/ccvs Status: - Original spice model. 4.4 ISRC - Independent Current Source Ver: N/A Class: I Level: 1 (and only) Dir: devices/isrc Status: This is the original spice device improved by Alan Gillespie with the following features: - Source ramping - Check for non-monotonic series in PWL 4.5 VCCS - Voltage Controlled Current Source Ver: N/A Class: G Level: 1 (and only) Dir: devices/vccs Status: - Original spice model. 4.6 VCVS - Voltage Controlled Voltage Source Ver: N/A Class: E Level: 1 (and only) Dir: devices/vcvs Status: - Original spice model. 4.7 VSRC - Independent Voltage Source Ver: N/A Class: V Level: 1 (and only) Dir: devices/vsrc Status: This is the original spice device improved by Alan Gillespie with the following features: - Source ramping - Check for non-monotonic series in PWL 5. Switches 5.1 CSW - Current controlled switch Ver: N/A Class: W Level: 1 (and only) Dir: devices/csw Status: - This model comes from Jon Engelbert. 5.2 SW - Voltage controlled switch Ver: N/A Class: S Level: 1 (and only) Dir: devices/sw Status: - This model comes from Jon Engelbert. 6. Diodes 6.1 DIO - Junction Diode Ver: N/A Class: D Level: 1 (and only) Dir: devices/dio Status: Enhancements over the original model: - Parallel Multiplier - Temperature difference from circuit temperature - Forward and reverse knee currents - Periphery (sidewall) effects - Temperature correction of some parameters 7. Bipolar devices 7.1 BJT - Bipolar Junction Transistor Ver: N/A Class: Q Level: 1 Dir: devices/bjt Status: Enhancements over the original model: - Parallel Multiplier - Temperature difference from circuit temperature - Different area parameters for collector, base and emitter 7.2 BJT2 - Bipolar Junction Transistor Ver: N/A Class: Q Level: 2 Dir: devices/bjt2 Status: This is the BJT model written by Alan Gillespie to support lateral devices. The model has been hacked by Dietmar Warning fixing some bugs and adding some features (temp. dependency on resistors). Enhancements over the original model: - Parallel Multiplier - Temperature dependency on rc,rb,re - Temperature difference from circuit temperature - Different area parameters for collector, base and emitter 7.3 VBIC - Bipolar Junction Transistor Ver: N/A Class: Q Level: 4 & 9 Dir: devices/vbic Status: This is the Vertical Bipolar InterCompany model in version 1.2. The author of VBIC is Colin McAndrew mcandrew@ieee.org. Spice3 Implementation: Dietmar Warning DAnalyse GmbH Web Site: http://www.designers-guide.com/VBIC/index.html Notes: This is the 4 terminals model, without excess phase and thermal network. 8. FET devices 8.1 JFET - Junction Field Effect transistor Ver: N/A Class: J Level: 1 Dir: devices/jfet Status: This is the original spice JFET model. Enhancements over the original model: - Alan Gillespie's modified diode model - Parallel multiplier - Instance temperature as difference for circuit temperature 8.2 JFET2 - Junction Field Effect Transistor (PS model) Ver: N/A Class: J Level: 2 Dir: devices/jfet2 Status: This is the Parker Skellern model for MESFETs. Web Site: http://www.elec.mq.edu.au/cnerf/psmodel.htm Enhancements over the original model: - Parallel multiplier - Instance temperature as difference for circuit temperature 9. HFET Devices Added code from macspice3f4 HFET1&2 and MESA model Original note: Added device calls for Mesfet models and HFET models provided by Trond Ytterdal as of Nov 98 9.1 HFET1 - Heterostructure Field Effect Transistor Level 1 Ver: N/A Class: Z Level: 5 Dir: devices/hfet1 Status: This is the Heterostructure Field Effect Transistor model from: K. Lee, M. Shur, T. A. Fjeldly and T. Ytterdal "Semiconductor Device Modeling in VLSI", 1993, Prentice Hall, New Jersey Enhancements over the original model: - Parallel multiplier - Instance temperature as difference for circuit temperature - Added pole-zero analysis 9.2 HFET2 - Heterostructure Field Effect Transistor Level 2 Ver: N/A Class: Z Level: 6 Dir: devices/hfet2 Status: Simplified version of hfet1 Enhancements over the original model: - Parallel multiplier - Instance temperature as difference for circuit temperature - Added pole-zero analysis 10. MES devices 10.1 MES - MESFET model Ver: N/A Class: Z Level: 1 Dir: devices/mes Status: This is the original spice3 MESFET model (Statz). Enhancements over the original model: - Parallel multiplier - Alan Gillespie junction diodes implementation Added code from macspice3f4 HFET1&2 and MESA model Original note: Added device calls for Mesfet models and HFET models provided by Trond Ytterdal as of Nov 98 10.2 MESA - MESFET model (MacSpice3f4) Ver: N/A Class: Z Level: 2,3,4 Dir: devices/mesa Status: This is a multilevel model. It contains code for mesa levels 2,3 and 4 Enhancements over the original model: - Parallel multiplier - Instance temperature as difference from circuit temperature - Added pole-zero analysis 11. MOS devices 11.1 MOS1 - Level 1 MOS model Ver: N/A Class: M Level: 1 Dir: devices/mos1 Status: This is the so-called Schichman-Hodges model. Enhancements over the original model: - Parallel multiplier - Temperature difference from circuit temperature 11.2 MOS2 - Level 2 MOS model Ver: N/A Class: M Level: 2 Dir: devices/mos2 Status: This is the so-called Grove-Frohman model. Enhancements over the original model: - Parallel multiplier - Temperature difference from circuit temperature 11.3 MOS3 - Level 3 MOS model Ver: N/A Class: M Level: 3 Dir: devices/mos3 Status: Enhancements over the original model: - Parallel multiplier - Temperature difference from circuit temperature 11.4 MOS6 - Level 6 MOS model Ver: N/A Class: M Level: 6 Dir: devices/mos6 Status: Enhancements over the original model: - Parallel multiplier - Temperature difference from circuit temperature 11.5 MOS9 - Level 9 MOS model Ver: N/A Class: M Level: 9 Dir: devices/mos9 Status: This is a slightly modified Level 3 MOSFET model. (Whatever the implementer have had in mind.) Not to confuse with Philips level 9. Enhancements over the original model: - Temperature difference from circuit temperature 11.6 BSIM1 - BSIM model level 1 Ver: N/A Class: M Level: 4 Dir: devices/bsim1 Status: Enhancements over the original model: - Parallel multiplier - Noise analysis BUGS: Distortion analysis probably does not work with "parallel" devices. Equations are too intricate to deal with. Any one has ideas on the subject ? 11.7 BSIM2 - BSIM model level 2 Ver: N/A Class: M Level: 5 Dir: devices/bsim2 Status: Enhancements over the original model: - Parallel multiplier - Noise analysis 11.8 BSIM3v0 - BSIM model level 3 Ver: 3.0 Class: M Level: 8 & 49, version = 3.0 Dir: devices/bsim3v0 Status: TO BE TESTED AND IMPROVED 11.9 BSIM3v1 - BSIM model level 3 Ver: 3.1 Class: M Level: 8 & 49, version = 3.1 Dir: devices/bsim3v1 Status: TO BE TESTED AND IMPROVED This is the BSIM3v3.1 model modified by Serban Popescu. This is level 49 model. It is an implementation that supports "HDIF" and "M" parameters. 11.10 BSIM3 - BSIM model level 3 Ver: 3.2.4 Class: M Level: 8 & 49, version = 3.2.2, 3.2.3, 3.2.4 Dir: devices/bsim3v32 (level 3.2.4) Status: o.k. This is another BSIM3 model from Berkeley Device Group. You can find some test netlists with results for this model on its web site. Web site: http://www-device.eecs.berkeley.edu/~bsim3 Enhancements over the original model: - Parallel Multiplier - delvto, mulu0 instance parameter - ACM Area Calculation Method - Multirevision code (supports all 3v3.2 minor revisions) - NodesetFix 11.11 BSIM3 - BSIM model level 3 Ver: 3.3.0 Class: M Level: 8 & 49, version = 3.3.0 Dir: devices/bsim3 (level 3.3.0) Status: o.k. This is the actual BSIM3 model from Berkeley Device Group. You can find some test netlists with results for this model on its web site. Web site: http://www-device.eecs.berkeley.edu/~bsim3 Enhancements over the original model: - Parallel Multiplier - ACM Area Calculation Method - Multirevision code (supports all 3v3.2 minor revisions) - NodesetFix - Support for Multi-core processors using OpenMP 11.12 BSIM4 - BSIM model level 4 Ver: 4.2.0 - 4.6.5 Class: M Level: 14 & 54, version = 4.5, 4.6, 4.7, 4.8 Dir: devices/bsim4 (level 4.8.0) Status: o.k. This is the actual BSIM4 model from Berkeley Device Group. Test are available on its web site. Web site: http://www-device.eecs.berkeley.edu/~bsim3/bsim4.html Enhancements over the original model: - Parallel Multiplier - NodesetFix - Support for Multi-core processors using OpenMP 11.13 HiSIM2 - Hiroshima-university STARC IGFET Model Ver: 2.8.0 Class: M Level: 68 Dir: devices/hisim2 Status: TO BE TESTED. This is the HiSIM2 model available from Hiroshima University (Ultra-Small Device Engineering Laboratory) Web site: http://home.hiroshima-u.ac.jp/usdl/HiSIM.html Enhancements over the original model: - Support for Multi-core processors using OpenMP 11.14 HiSIM_HV - Hiroshima-University STARC IGFET High Voltage Model Ver: 1.2.4 and 2.2 Class: M Level: 73 Dir: devices/hisimhv Status: TO BE TESTED. This is the HiSIM_HV model version 1 and 2 available from Hiroshima University (Ultra-Small Device Engineering Laboratory) Web site: http://home.hiroshima-u.ac.jp/usdl/HiSIM.html 11.15 VDMOS - Simple PowerMOS model Ver: 1 Class: M Level: - Dir: devices/vdmos Status: TO BE TESTED. This is a simplified Power MOS model, derived from MOS1 and diode, similar to LTSPICE and SuperSpice VDMOS 12. SOI devices 12.1 BSIM3SOI_FD - SOI model (fully depleted devices) Ver: 2.1 Class: M Level: 55 Dir: devices/bsim3soi_fd Status: TO BE TESTED. FD model has been integrated. There is a bsim3soifd directory under the test hierarchy. Test circuits come from the bsim3soi Web site at: http://www-device.eecs.berkeley.edu/~bsimsoi 12.2 BSIM3SOI_DD - SOI Model (dynamic depletion model) Ver: 2.1 Class: M Level: 56 Dir: devices/bsim3soi_dd Status: TO BE TESTED. There is a bsim3soidd directory under the test hierarchy. Test circuits come from bsim3soi Web site at: http://www-device.eecs.berkeley.edu/~bsimsoi 12.3 BSIM3SOI_PD - SOI model (partially depleted devices) Ver: 2.2.1 Class: M Level: 57 Dir: devices/bsim3soi_pd Status: TO BE TESTED. PD model has been integrated. There is a bsim3soipd directory under the test hierarchy. Test circuits come from the bsim3soi Web site at: http://www-device.eecs.berkeley.edu/~bsimsoi 12.4 BSIMSOI - Berkeley SOI model (partially/full depleted devices) Ver: 4.3.1 Class: M Level: 10 & 58 Dir: devices/bsim3soi Status: o.k. This is the actual version from Berkeley. This version is backward compatible with its previous versions BSIMSOI3.x. Usable for partially/full depleted devices. Web site at: http://www-device.eecs.berkeley.edu/~bsimsoi Enhancements over the original model: - Parallel Multiplier - Support for Multi-core processors using OpenMP 12.5 SOI3 - STAG SOI3 Model Ver: 2.6 Class: M Level: 60 Dir: devices/soi3 Status: OBSOLETE 13. Verilog-A models Configuring ngspice with ADMS (see Readme.adms) following devices are available: 13.1 EKV MOS Model Ver: 2.6 Level: 44 Dir: devices/adms/ekv Status: TO BE TESTED EKV version based on a contribution of Ivan Riis Nielsen 11/2006 Web site at: http://legwww.epfl.ch/ekv/ (but EPFL is not publishing any usefull code) 13.2 PSP MOS Model Ver: 102.1 Level: 45 Dir: devices/adms/psp102 Status: TO BE TESTED Philips SimKit 2.5. 13.3 HICUM0 Bipolar Model Ver: Level_0 Version_1.12 Level: 7 Dir: devices/adms/hicum0 Status: TO BE TESTED A simplified version of HICUM Level2 model for BJT Web site at: http://www.iee.et.tu-dresden.de/iee/eb/hic_new 13.4 HICUM2 Bipolar Model Ver: Level_2 Version_2.22 Level: 8 Dir: devices/adms/hicum2 Status: TO BE TESTED Web site at: http://www.iee.et.tu-dresden.de/iee/eb/hic_new/hic_start.html 13.5 Mextram Bipolar Model Ver: 504.6.1 Level: 6 Dir: devices/adms/mextram Status: TO BE TESTED Web site at: http://mextram.ewi.tudelft.nl/ and http://mextram.sourceforge.net/ 14. XSpice code models, see ngspice manual chapt. 12 tmpk8ny_4pz/compile_min_shared.sh0000644000175000017500000000677113546075722017350 0ustar carstencarsten#!/bin/bash # ngspice build script for MINGW-w64, release version, 32 or 64 bit # compile_min.sh #Procedure: # Install MSYS, plus bison, flex, auto tools, perl, libiconv, libintl # Install MINGW-w64, activate OpenMP support # See either http://mingw-w64.sourceforge.net/ or http://tdm-gcc.tdragon.net/ # (allows to generate either 32 or 64 bit executables by setting flag -m32 or -m64) # set path to compiler in msys/xx/etc/fstab (e.g. c:/MinGW64 /mingw) # start compiling with # './compile_min.sh' or './compile_min.sh 64' # As an (more recent) alternative install MSYS2 and the tools cited above. # Options: # --adms and --enable-adms will install extra HICUM, EKV and MEXTRAM models via the # adms interface. # Please see http://ngspice.sourceforge.net/admshowto.html for more info on adms. # CIDER, XSPICE, and OpenMP may be selected at will. # --disable-debug will give O2 optimization (versus O0 for debug) and removes all debugging info. # To obtain debug executable, replace both -O2 and -s by -g in ./configure lines. # ngspice as shared library: # Replace --with-wingui by --with-ngshared in line ../configure ... . # Add (optionally) --enable-relpath to avoid absolute paths when searching for code models. # It might be necessary to uncomment and run ./autogen.sh . if test "$1" = "64"; then if [ ! -d "release64-sh" ]; then mkdir release64-sh if [ $? -ne 0 ]; then echo "mkdir release64-sh failed"; exit 1 ; fi fi else if [ ! -d "release-sh" ]; then mkdir release-sh if [ $? -ne 0 ]; then echo "mkdir release-sh failed"; exit 1 ; fi fi fi # If compiling sources from git, you may need to uncomment the following two lines: ./autogen.sh if [ $? -ne 0 ]; then echo "./autogen.sh failed"; exit 1 ; fi # Alternatively, if compiling sources from git, and want to add adms created devices, # you may need to uncomment the following two lines (and don't forget to add adms option # to the ../configure statement): #./autogen.sh --adms #if [ $? -ne 0 ]; then echo "./autogen.sh failed"; exit 1 ; fi echo if test "$1" = "64"; then cd release64-sh if [ $? -ne 0 ]; then echo "cd release64-sh failed"; exit 1 ; fi echo "configuring for 64 bit" echo # You may add --enable-adms to the following command for adding adms generated devices ../configure --with-ngshared --enable-xspice --enable-cider --enable-openmp --enable-relpath --disable-debug prefix="C:/Spice64" CFLAGS="-m64 -O2" LDFLAGS="-m64 -s" else cd release-sh if [ $? -ne 0 ]; then echo "cd release-sh failed"; exit 1 ; fi echo "configuring for 32 bit" echo # You may add --enable-adms to the following command for adding adms generated devices ../configure --with-ngshared --enable-xspice --enable-cider --enable-openmp --enable-relpath --disable-debug prefix="C:/Spice" CFLAGS="-m32 -O2" LDFLAGS="-m32 -s" fi if [ $? -ne 0 ]; then echo "../configure failed"; exit 1 ; fi echo # make clean is required for properly making the code models echo "cleaning (see make_clean.log)" make clean 2>&1 -j8 | tee make_clean.log exitcode=${PIPESTATUS[0]} if [ $exitcode -ne 0 ]; then echo "make clean failed"; exit 1 ; fi echo "compiling (see make.log)" make 2>&1 -j8 | tee make.log exitcode=${PIPESTATUS[0]} if [ $exitcode -ne 0 ]; then echo "make failed"; exit 1 ; fi # 32 bit: Install to C:\Spice # 64 bit: Install to C:\Spice64 echo "installing (see make_install.log)" make install 2>&1 | tee make_install.log exitcode=${PIPESTATUS[0]} if [ $exitcode -ne 0 ]; then echo "make install failed"; exit 1 ; fi echo "success" exit 0 tmpk8ny_4pz/INSTALL0000644000175000017500000006176013546075722014223 0ustar carstencarstenNgspice installation instructions ================================= Table of contents 1 Ngspice installation (LINUX) 1.1 Prerequisites 1.2 Install from tarball (e.g. ngspice-31.tar.gz) 1.3 Install from git repository 1.4 Advanced Install 1.4.1 Most useful options 1.4.2 Options Specific to Enable Ngspice as a shared library 1.4.3 Options Specific to Using Ngspice 1.4.4 Options Useful for Debugging Ngspice 2 Compilers and Options 3 Compiling For Multiple Architectures 4 Installation Names 5 Optional Features 6 Specifying the System Type 7 Sharing Defaults 8 Operation Controls 9 NGSPICE COMPILATION UNDER WINDOWS OS 9.1 How to make ngspice with MINGW and MSYS 9.2 make ngspice with MS Visual Studio 2015/2017 9.3 make ngspice with pure CYGWIN 9.4 ngspice console app with MINGW or CYGWIN 9.5 cross compiling ngspice for Windows from LINUX 10 NGSPICE COMPILATION UNDER macOS This file describes the procedures to install ngspice from sources. 1 Ngspice Installation (LINUX, maybe others) ==================== 1.1 Prerequisites Ngspice is written in C and thus a complete C compilation environment is needed. Almost any LINUX offers a complete C development environment. Ngspice is developed on GNU/Linux with gcc and GNU make. The following software must be installed in your system to compile ngspice: bison, flex, and X11 headers and libs. If you want to compile the source from the git repository you need additional software: autoconf, automake, libtool, texinfo, readline. The following software may be needed when enabling additional features: editline, tcl/tk, adms Please have a look at the actual ngspice manual, downloadable at http://ngspice.sourceforge.net/docs.html, which gives you much more information on ngspice and its usage. 1.2 Install from tarball (e.g. ngspice-31.tar.gz) This covers installation from a release distribution (for example ngspice-31.tar.gz, the so called tar ball). After downloading the tar ball to a local directory unpack it using: $ tar -zxvf ngspice-31.tar.gz Now change directories in to the top-level source directory (where this INSTALL file can be found). You should be able to do: $ mkdir release $ cd release $ ../configure --with-x --with-readline=yes --disable-debug $ make $ sudo make install The default install directory for executables is /usr/local/bin. A simple ../configure might be sufficient for a basic ngspice, but the preferred arguments to ../configure are --with-x --with-readline=yes and --disable-debug providing you with a comfortably working ngspice (see section 1.4 for details). See the section titled 'Advanced Install' for instructions about additional arguments that can be passed to ../configure to customise the build and installation. Do not use the script ./autogen.sh, because it is not required for compiling and installing ngspice from the tarball. A fully featured ngspice on LINUX may be obtained with the following commands: $ mkdir release $ cd release $ ../configure --with-x --enable-xspice --disable-debug --enable-cider --with-readline=yes --enable-openmp $ make 2>&1 | tee make.log $ sudo make install To remove the executables and libraries from the install directory, you may call $ sudo make uninstall 1.3 Install from the git repository This section describes how to install from source code taken directly from the git repository. It is intended for those who want to use the most recent enhancements of ngspice and for developers. For user install instructions using source from a released distributions, please see the sections titled 'Install from tarball' and 'Advanced Install'. Download ngspice sources from the git repository as described on the sourceforge project page (see http://ngspice.sourceforge.net/download.html and click on the git link) Now change directories in to the top-level source directory (where this INSTALL file can be found). The project uses the GNU build process. The compile output should go into a separate directory, so to e.g. maintain separate debug and release versions. $ ./autogen.sh $ mkdir debug $ cd debug $ ../configure --with-x --with-readline=yes $ make $ sudo make install See the section titled 'Advanced Install' for instructions about arguments that can be passed to ./configure to customise the build and installation. Preferred arguments to ./configure to obtain a comfortably working ngspice may be --with-readline=yes and --disable-debug (for a smaller and speed optimized executable). A fully featured ngspice on LINUX may be obtained with the following commands: $ ./autogen.sh --adms $ mkdir release $ cd release $ ../configure --with-x --enable-xspice --disable-debug --enable-cider --with-readline=yes --enable-openmp --enable-adms $ make 2>&1 | tee make.log $ sudo make install If a problem is found with the build process, please submit a report to the ngspice development team. Please provide information about your system and any ./configure arguments you are using, together with any error messages. Ideally you would have tried to fix the problem yourself first. If you have fixed the problem then the development team will love to hear from you. 1.4 Advanced Install Some extra options can be provided to './configure'. To get all available options do: $ ./configure --help Some of these options are generic to the GNU build process that is used by Ngspice, other are specific to Ngspice. The following sections provide some guidance and descriptions for many, but not all, of these options. 1.4.1 Most useful options: --enable-adms ADMS is an experimental model compiler that translates Verilog-A compact models into C code that can be compiled into ngspice. This is (as of ngspice-27) still experimental, some features (e.g. noise) are missing. If you want to use it, please refer to the ADMS section on ngspice web site. --enable-cider Cider is a mixed-level simulator that couples Spice3 and DSIM to simulate devices from their technological parameters. --enable-xspice Enable XSpice enhancements, A mixed signal simulator built upon spice3 with codemodel dynamic loading support. See the ngspice manual for details. --with-readline=yes Enable GNU readline support for the command line interface. --enable-openmp Compile ngspice for multi-core processors. Parallelization is done by OpenMP, for MOS models in BSIM3.3.0 BSIM4.6.0 and and BSOI4 only. See the ngspice manual for details. --disable-debug This option will remove the '-g' option passed to the compiler and add -O2 optimisation (instead of default O0). This speeds up simulating significantly, and is recommended for normal use. --enable-oldapps The old apllications ngsconvert ngproc2mod ngmultidec and ngmakeidx are made only per user request, by adding this flag. --with-fftw3=no Disable using fftw fast fourier transform library. Use internal fft instead. Default is 'yes'. 1.4.2 Options Specific to Enable Ngspice as a shared library --with-ngshared This option let you compile ngspice as a shared library or dll, allowing an application controlling ngspice. This option excludes using --with-x or --with-wingui. Useful additional options are --enable-xspice --enable-cider --enable-openmp. No graphics inetrface is provided, this has to be handled by the controlling application. --with-tcl=tcldir When configured with this option the tcl module "tclspice" is compiled and installed instead of plain ngspice. 1.4.3 Options Specific to Using Ngspice Most of the options now following are not well maintained, are not tested or even maybe obsolete. --enable-capbypass Bypass calculation of cbd/cbs in the mosfets if the vbs/vbd voltages are unchanged. --enable-cluster Clustering code for distributed simulation. This is a contribution never tested. This code comes from TCLspice implementation and is implemented for transient analysis only. --enable-expdevices Enable experimental devices. This option is used by developers to mask devices under development. Almost useless for users. --enable-experimental define EXPERIMENTAL_CODE to mark experimental parts the code (currently not used) --enable-help Force building nghelp. This is deprecated. --enable-ndev Enable NDEV interface, (experimental, needs updating) A TCP/IP interface to external device simulator such as GSS. For more information, please visit the homepage of GSS at http://gss-tcad.sourceforge.net --enable-newpred Enable the NEWPRED symbol in the code. --enable-newtrunc Enable the newtrunc option --enable-nodelimiting Experimental damping scheme --enable-nobypass Don't bypass recalculations of slowly changing variables --enable-predictor Enable a predictor method for convergence --enable-sense2 Use spice2 sensitivity analysis --enable-xgraph Compile the Xgraph plotting program. Xgraph is a plotting package for X11 and was once very popular. --with-editline=yes Enables the use of the BSD editline library (libedit). See http://www.thrysoee.dk/editline/ 1.4.4 Options Useful for Debugging Ngspice --enable-ansi Configure will try to find an option for your compiler so that it expects ansi-C. --enable-asdebug Debug sensitivity code *ASDEBUG*. --enable-blktmsdebug Debug distortion code *BLOCKTIMES* --enable-checkergcc Option for compilation with checkergcc. --enable-cpdebug Enable ngspice shell code debug. --disable-debug This option will remove the '-g' option passed to the compiler. This speeds up compilation a *lot*, and is recommended for normal use. --enable-ftedebug Enable ngspice frontend debug. --enable-pzdebug Debug pole/zero code. --enable-sensdebug Debug sensitivity code *SENSDEBUG*. --enable-smltmsdebug Debug distortion code *SMALLTIMES* --enable-smoketest Enable smoketest compile. --enable-stepdebug Turns on debugging of convergence stepping?? 2 Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure 3 Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. 4 Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. When installed on MinGW with MSYS alternative paths are not fully supported. See 'How to make ngspice with MINGW and MSYS' below for details. 5 Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. 6 Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. 7 Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. 8 Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. 9 NGSPICE COMPILATION UNDER WINDOWS OS ==================================== 9.1 How to make ngspice with MINGW and MSYS Creating ngspice with MINGW is a straight forward procedure, if you have MSYS/MINGW installed properly. You will need some enhancements to the standard install (FLEX and BISON have to be made available in MSYS). Some links are given below which describe the procedures. Installing from the tarball, e.g. ngspice-31.tar.gz, is now simple: After expanding, you may just run ./compile_min.sh from the ngspice-31 directory. The default installation location of ngspice is the Windows path C:\spice. The install path can be altered by passing --prefix=NEWPATH as an argument to ./configure during the build process. Put the install path you desire inside "", e.g. "D:/NewSpice". Be careful to use forward slashes "/", not backward slashes "\" (something still to be fixed). Then add --prefix="D:/NewSpice" as an argument to ./configure in the normal way. The procedure of compiling a distribution (for example, a tarball from the ngspice website), is as follows: $ cd ngspice-31 $ mkdir release $ cd release $ ../configure --with-wingui ...and other options $ make $ make install The most useful options are: --enable-xspice --enable-cider --disable-debug (-O2 optimization, no debug information) A fully featured ngspice on Windows may be obtained with the following commands: $ ./autogen.sh --adms $ mkdir release $ cd release $ ../configure --with-wingui --enable-cider --disable-debug --enable-openmp --enable-xspice --enable-adms $ make install However, to compile code extracted from the git repository the procedure is a little different. Firstly install git, e.g. from http://git-scm.com/download/win To obtain ngspice, you may do the following: Open the git command window. Go to a directory of your choice, e.g. D:\Spice $ cd /d/Spice Issue the command for downloading ngspice: $ git clone git://ngspice.git.sourceforge.net/gitroot/ngspice/ngspice This will create directory /ngspice . Go to directory ngspice $ cd /d/Spice/ngspice Start compiling, e.g. by calling $ ./autogen.sh --adms $ ./compile_min.sh Update the ngspice files: Go to directory ngspice $ cd /d/Spice/ngspice Issue command for update $ git pull Instead of calling ./compile_min.sh, you may choose to issue individual commands like: $ cd ngspice $ ./autogen.sh $ mkdir release $ cd release $ ../configure --enable-maintainer-mode --with-wingui ...and other options $ make $ make install MINGW and MSYS can be downloaded from http://www.mingw.org/. The making of ngspice and the code models *.cm for XSpice requires installation of BISON and FLEX to MSYS. A typical installation was tested with: bison-2.0-MSYS.tar.gz flex-2.5.4a-1-bin.zip libiconv-1.9.2-1-bin.zip libintl-0.14.4-bin.zip Bison 2.0 is now superseeded by newer releases (Bison 2.3, see http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=67879) The last three are from http://sourceforge.net/project/showfiles.php?group_id=23617. Installing from git needs more packages to MSYS in advance: git, automake, autoconf, libtool You may also look at http://www.mingw.org/wiki/HOWTO_Install_the_MinGW_GCC_Compiler_Suite http://www.mingw.org/wiki/MSYS http://www.mingw.org/wiki/HOWTO_Create_an_MSYS_Build_Environment. An alternative compiler setup is available at http://tdm-gcc.tdragon.net/ A modern environment is offered by MSYS2 (https://www.msys2.org/). The install tree generated during 'make install' is: C:\Spice\ bin\ ngspice.exe nghelp.exe ngmakeidx.exe ngnutmeg.exe cmpp.exe lib\ spice\ analog.cm digital.cm spice2poly.cm extradev.cm extravt.cm share\ info\ dir ngspice.info ngspice.info-1 .. ngspice.info-10 man\ man1\ cmpp.1 ngmakeidx.1 ngmultidec.1 ngnutmeg.1 ngproc2mod.1 ngsconvert.1 ngspice.1 ngspice\ helpdir\ ngspice.idx ngspice.txt scripts\ ciderinit devaxis devload setplot spectrum spinit 9.2 make ngspice with MS Visual Studio 2015/17/19 ngspice may be compiled with MS Visual Studio 2015 or newer. CIDER and XSPICE are included, the code models for XSPICE (*.cm) are made as well. There is currently no installation procedure provided, you may however install the executable manually as described in the installation tree below. The directory (visualc) with its files vngspice.sln (project starter) and vngspice.vcproj (project contents) allows to compile and link ngspice with MS Visual Studio 2015. Newer Visual Studio versions will translate the project files into their compatible format (tested with MS Visual Studio 2017). You may however deny the translation and compile in a VS 2015 compatibility mode. /visualc/include contains a dedicated config.h file. It contains the preprocessor definitions required to properly compile the code. strings.h has been necessary during setting up the project. Install Microsoft Visual Studio 2019 Community with C/C++. For example the German edition is available at no cost from https://www.visualstudio.com/de/vs/community/. Goto /ngspice/visualc. Start MS Visual Studio 2019 by double click onto vngspice.sln. After MS Visual Studio has opened up, select debug or release version by checking 'Erstellen' , 'Konfigurations-Manager' 'Debug' or 'Release'. Start making ngspice (called vngspice.exe) by selecting 'Erstellen' and 'vngspice neu erstellen'. Object files will be created and stored in visualc/debug or visualc/release. The executable will be stored to visualc/debug/bin or visualc/release/bin. An installation tree (as provided with MINGW make install) and also used by vngspice is (maybe created manually): C:\Spice64\ bin\ ngspice.exe lib\ spice\ analog.cm digital.cm spice2poly.cm extradev.cm extravt.cm share\ ngspice\ scripts\ spinit If you intend to install vngspice into another directory, e.g. D:\MySpice, you have to edit /visualc/include/config.h and alter the entries: #define NGSPICEBINDIR "C:/Spice/bin" #define NGSPICEDATADIR "C:/Spice/share/ngspice" to #define NGSPICEBINDIR "D:/MySpice/bin" #define NGSPICEDATADIR "D:/MySpice/share/ngspice" If the code model files *.cm are not available, you will get warning messages, but you may use ngspice in the normal way (of course without XSPICE extensions). 9.3 make ngspice with pure CYGWIN If you don't have libdl.a you may need to link libcygwin.a to libdl.a symbolically. for example: $ cd /lib $ ln -s libcygwin.a libdl.a. The procedure of compiling is the same as Linux. 9.4 ngspice console app with MINGW or CYGWIN Omitting the configure flag --with-wingui will yield a console ngspice. You then will not have any graphics interface. In CYGWIN you may add --with-x for the X11 graphics (not available in mingw). A typical configure command may look like ./configure --enable-adms --enable-xspice --enable-cider --enable-openmp --disable-debug CFLAGS=-m32 LDFLAGS=-m32 prefix=C:/Spice tested with TDM mingw. 9.5 cross compiling ngspice for Windows from LINUX Two scripts are available in the ngspice directory that allow cross compiling for NMS Windows, if you are running LINUX. ngspice.exe or ngspice.dll may be made. For details please see cross-compile.sh or cross-compile-shared.sh. 10 NGSPICE COMPILATION UNDER macOS ================================== 10.1 Use precompiled binary package 1. Install an X11 interface (like Xquartz) 2. Install the downloaded NGSPICE package 3. Open a terminal window and start using NGSPICE 10.2 Compile NGSPICE manually from a tarball 1. Install an X11 interface (like Xquartz) 2. Install MacPorts from http://www.macports.org 3. Execute this command: sudo port install bison flex ncurses xorg-libXaw 4. Configure NGSPICE invoking "./configure". A complete set of feature is: ./configure --enable-cider --enable-xspice --enable-openmp --enable-pss --enable-debug=no 5. Compile NGSPICE invoking "make" 6. Install NGSPICE invoking "make install" or "sudo make install" 10.3 Compile NGSPICE manually from git 1. Install an X11 interface (like Xquartz) 2. Install MacPorts from http://www.macports.org 3. Execute this command: sudo port install automake autoconf libtool bison flex ncurses xorg-libXaw 4. Execute this command: ./autogen.sh or ./autogen.sh --adms (if you want to enable ADMS) 5. Configure NGSPICE invoking "./configure". A complete set of feature is: ./configure --enable-cider --enable-xspice --enable-openmp --enable-pss --enable-debug=no ./configure --enable-adms --enable-cider --enable-xspice --enable-openmp --enable-pss --enable-debug=no (if you want to enable ADMS) 6. Compile NGSPICE invoking "make" 7. Install NGSPICE invoking "make install" or "sudo make install" tmpk8ny_4pz/man/0000755000175000017500000000000013546075722013733 5ustar carstencarstentmpk8ny_4pz/man/Makefile.am0000644000175000017500000000015613546075722015771 0ustar carstencarsten## Process this file with automake to produce Makefile.in SUBDIRS = man1 MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/man/man1/0000755000175000017500000000000013546075722014567 5ustar carstencarstentmpk8ny_4pz/man/man1/Makefile.am0000644000175000017500000000070313546075722016623 0ustar carstencarsten## Process this file with automake to produce Makefile.in man_MANS = if XSPICE_WANTED man_MANS += cmpp.1 endif XSPICE_WANTED if !TCL_MODULE if !SHARED_MODULE man_MANS += ngspice.1 if OLDAPPS man_MANS += ngnutmeg.1 ngsconvert.1 ngmultidec.1 ngmakeidx.1 ngproc2mod.1 endif OLDAPPS endif !SHARED_MODULE endif !TCL_MODULE EXTRA_DIST = ngspice.1 ngnutmeg.1 ngsconvert.1 ngmultidec.1 cmpp.1 ngmakeidx.1 ngproc2mod.1 MAINTAINERCLEANFILES = Makefile.in tmpk8ny_4pz/man/man1/ngsconvert.10000644000175000017500000001046113546075722017043 0ustar carstencarsten.\" Hey, EMACS: -*- nroff -*- .\" .\" Copyright (c) 1985 Wayne A. Christopher, U. C. Berkeley CAD Group .\" .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) .TH SCONVERT 1 "2014-10-28" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .UC 4 .SH NAME sconvert \- convert spice formats .SH SYNOPSIS .B sconvert fromtype fromfile totype tofile .br .B sconvert fromtype totype .br .B sconvert .br .SH DESCRIPTION .B Sconvert translates spice output files among three formats: the old binary format, a new binary format, and a new ascii format. The formats are specified by the .B fromtype and .B totype arguments: `o' for the old format, `b' for the new binary format, and `a' for the new ascii format. .B Fromtype specifies the format to be read, and .B totype specifies the format to be written. If .B fromfile and .B tofile are given, then they are used as the input and output, otherwise standard input and output are used. (Note that this second option is only available on \s-2UNIX\s+2 systems \- on VMS and other systems you must supply the filenames.) If no arguments are given, the parameters are prompted for. .PP Binary format is the preferred format for general use, as it is the most economical in terms of space and speed of access, and ascii is provided to make it easy to modify data files and transfer them between machines with different floating-point formats. The old format is provided only for backward compatibility. The three formats are as follows: .br .nf .B Old: What Size in Bytes title 80 date 8 time 8 numoutputs 2 the integer 4 2 variable names -- char[numoutputs][8] numoutputs * 8 types of output numoutputs * 2 node index numoutputs * 2 plot title numoutputs * 24 the actual data numpoints * numoutputs * 8 .B Ascii: Title: \fITitle Card String\fR Date: \fIDate\fR [ Plotname: \fIPlot Name\fR Flags: \fIcomplex\fR or \fIreal\fR No. Variables: \fInumoutputs\fR No. Points: \fInumpoints\fR Command: \fInutmeg command\fR Variables: 0 \fIvarname1\fR \fItypename1\fR 1 \fIvarname2\fR \fItypename2\fR etc... Values: 0 n n n n ... 1 n n n n ... And so forth... ] repeated one or more times .fi .PP If one of the flags is \fIcomplex\fR, the points look like r,i where r and i are floating point (in %e format). Otherwise they are in %e format. Only one of \fIreal\fR and \fIcomplex\fR should appear. .PP The lines are guaranteed to be less than 80 columns wide (unless the plot title or variable names are very long), so this format is safe to mail between systems like CMS. .PP Any number of \fBCommand:\fR lines may appear between the \fBNo. Points:\fR and the \fBVariables:\fR lines, and whenever the plot is loaded into \fBnutmeg\fR they will be executed. .nf .B Binary: \fITitle Card\fR (a NULL terminated string) \fIDate, Time\fR (a NULL terminated string) [ \fIPlot title\fR (a NULL terminated string) \fINumber of variables\fR (an int) \fINumber of data points\fR (an int) \fIflags\fR (a short) \fIvariable header struct\fR (repeated numoutputs times) \fIvariable name\fR (a NULL terminated string) \fIvariable type\fR (an int) \fIset of outputs\fR (repeated numpoints times) ] repeated one or more times. .fi .PP A set of outputs is a vector of doubles of length numoutputs, or a vector of real-imaginary pairs of doubles if the data is complex. .SH "SEE ALSO" nutmeg(1), spice(1), writedata(3) .SH AUTHOR Wayne Christopher (faustus@cad.berkeley.edu) .SH BUGS If variable names and the title and plotname strings have trailing blanks in them they will be stripped off when the file is read, if it is in ascii format. .PP If a plot title begins with "Title:" \fBnutmeg\fR will be fooled into thinking that this is an ascii format file. \fBSconvert\fR always requires the type to be specified, however. tmpk8ny_4pz/man/man1/ngspice.10000644000175000017500000001150013546075722016276 0ustar carstencarsten.\" Hey, EMACS: -*- nroff -*- .\" .\" Copyright (c) 1985 Wayne A. Christopher, U. C. Berkeley CAD Group .\" .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) .TH NGSPICE 1 "2014-10-28" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .ds = \-\^\- .SH "NAME" ngspice \- circuit simulator derived from SPICE3f5 .SH "SYNOPSIS" \fBngspice\fP [\fIoptions\fP] [\fIfile\fP ...] .SH "DESCRIPTION" This man page is just a small overview. The primary documentation of ngspice is in the ngspice User's Manual, which is available as a pdf file. .SH "OPTIONS" .TP \fB\-n\fP or \fB\*=no\-spiceinit\fP Don't try to source the file ".spiceinit" upon startup. Normally ngspice tries to find the file in the current directory, and if it is not found then in the user's home directory. .TP \fB\-q\fP or \fB\*=completion\fP Enable command completion. (defect) .TP \fB\-t\fP \fIterm\fP or \fB\*=term=\fP\fIterm\fP The program is being run on a terminal with \fBmfb\fP name \fIterm\fP. .TP \fB\-b\fP or \fB\*=batch\fP Run in batch mode. ngspice will read the standard input or the specified input file and do the simulation. Note that if the standard input is not a terminal, ngspice will default to batch mode, unless the \-i flag is given. .TP \fB\-s\fP or \fB\*=server\fP Run in server mode. This is like batch mode, except that a temporary rawfile is used and then written to the standard output, preceded by a line with a single "@", after the simulation is done. This mode is used by the ngspice daemon. .TP \fB\-i\fP or \fB\*=interactive\fP Run in interactive mode. This is useful if the standard input is not a terminal but interactive mode is desired. Command completion is not available unless the standard input is a terminal, however. .TP \fB\-r\fP \fIrawfile\fP or \fB\*=rawfile=\fP\fIfile\fP Use \fIrawfile\fP as the default file into which the results of the simulation are saved. .TP \fB\-c\fP \fIcircuitfile\fP or \fB\*=circuitfile=\fP\fIcircuitfile\fP Use \fIcircuitfile\fP as the default input deck. .TP \fB\-h\fP or \fB\*=help\fP Display a verbose help on the arguments available to the program. .TP \fB\-v\fP or \fB\*=version\fP Display a version number and copyright information of the program. .TP \fB\-a\fP or \fB\*=autorun\fP FIXME .TP \fB\-o\fP \fIoutfile\fP or \fB\*=output=\fP\fIoutfile\fP All logs generated during a batch run (\fB\-b\fP) will be saved in \fIoutfile\fP. .TP \fB\-p\fP or \fB\*=pipe\fP Allow a program (e.g., xcircuit) to act as a GUI frontend for ngspice through a pipe. Thus ngspice will assume that the pipe is a tty and allows one to run in interactive mode. .PP Further arguments are taken to be SPICE input decks, which are read and saved. (If batch mode is requested then they are run immediately.) .SH "ENVIRONMENT" .TP \fBSPICE_LIB_DIR\fP .TP \fBSPICE_EXEC_DIR\fP .TP \fBSPICE_HOST\fP .TP \fBSPICE_BUGADDR\fP .TP \fBSPICE_EDITOR\fP .TP \fBSPICE_ASCIIRAWFILE\fP default \fI0\fP Format of the rawfile. \fI0\fP for binary, and \fI1\fP for ascii. .TP \fBSPICE_NEWS\fP default \fI$SPICE_LIB_DIR/news\fP A file which is copied verbatim to stdout when ngspice starts in interactive mode. .TP \fBSPICE_MFBCAP\fP default \fI$SPICE_LIB_DIR/mfbcap\fP .TP \fBSPICE_HELP_DIR\fP default \fI$SPICE_LIB_DIR/helpdir\fP .TP \fBSPICE_SCRIPTS\fP default \fI$SPICE_LIB_DIR/scripts\fP In this directory the \fIspinit\fP file will be searched. .TP \fBSPICE_PATH\fP default \fI$SPICE_EXEC_DIR/ngspice\fP .PP various undocumented ngspice centric environment variables : .TP \fBNGSPICE_MEAS_PRECISION\fP .TP \fBSPICE_NO_DATASEG_CHECK\fP .PP Common environment variables : .TP \fBTERM\fP \fBLINES\fP \fBCOLS\fP \fBDISPLAY\fP \fBHOME\fP \fBPATH\fP \fBEDITOR\fP \fBSHELL\fP .TP \fBPOSIXLY_CORRECT\fP .SH "FILES" .TP \fI$SPICE_LIB_DIR/scripts/spinit\fP The System's Initialisation File. .TP \fI\&.spiceinit\fP or \fI$HOME/.spiceinit\fP The User's Initialisation File. .SH "SEE ALSO" sconvert(1), ngnutmeg(1), mfb(3), writedata(3), and .br ngspice User's Manual at \fBhttp://ngspice.sourceforge.net/docs.html\fP .SH "BUGS" Please report bugs to the ngspice project via .br \fBhttp://ngspice.sourceforge.net/bugrep.html\fP .SH "AUTHORS" \fBspice3\fP: Tom Quarles (quarles@cad.berkeley.edu) .br \fBnutmeg\fP: User interface: Wayne Christopher (faustus@cad.berkeley.edu) .br \fBngspice\fP: various authors (see \fBhttp://sourceforge.net/projects/ngspice/\fP) tmpk8ny_4pz/man/man1/ngnutmeg.10000644000175000017500000000547713546075722016512 0ustar carstencarsten.\" Hey, EMACS: -*- nroff -*- .\" .\" Copyright (c) 1985 Wayne A. Christopher, U. C. Berkeley CAD Group .\" .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) .TH NGNUTMEG 1 "2014-10-28" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .ds = \-\^\- .SH "NAME" ngnutmeg \- ngspice post-processor .SH "SYNOPSIS" \fBngnutmeg\fP [\fIoptions\fP] [\fIdatafile\fP ...] .SH "DESCRIPTION" This man page is just a small overview. The primary documentation of ngspice is in the ngspice User's Manual, which is available as a pdf file. .br \fBngnutmeg\fP is a post processor for ngspice \- it takes the raw output file created by \fBngspice \-r\fP and plots the data on a graphics terminal or a workstation display. Note that the raw output file is different from the data that ngspice writes to the standard output. .SH "OPTIONS" .TP \fB\-\fP .br Don't try to load the default data file ("rawspice") if no other files are given. .TP \fB\-n\fP or \fB\*=no\-spiceinit\fP Don't try to source the file ".spiceinit" upon startup. Normally \fBngnutmeg\fP tries to find the file in the current directory, and if it is not found then in the user's home directory. .TP \fB\-q\fP or \fB\*=completion\fP Enable command completion. (defect) .TP \fB\-t\fP \fIterm\fP or \fB\*=term=\fP\fIterm\fP The program is being run on a terminal with \fBmfb\fP name \fIterm\fP. .TP \fB\-h\fP or \fB\*=help\fP Display a verbose help on the arguments available to the program. .TP \fB\-v\fP or \fB\*=version\fP Display a version number and copyright information of the program. .PP Further arguments are taken to be data files in binary or ascii format (see \fBsconvert\fP(1)) which are loaded into ngnutmeg. If the file is in binary format, it may be only partially completed (useful for examining ngspice output before the simulation is finished). One file may contain any number of data sets from different analyses. .SH "ENVIRONMENT" See ngspice(1) .SH "FILES" See ngspice(1) .SH "SEE ALSO" sconvert(1), ngspice(1), mfb(3), writedata(3), and .br ngspice User's Manual at \fBhttp://ngspice.sourceforge.net/docs.html\fP .SH "BUGS" Please report bugs to the ngspice project via .br \fBhttp://ngspice.sourceforge.net/bugrep.html\fP .SH "AUTHOR" Wayne Christopher (faustus@cad.berkeley.edu) .br \fBngspice\fP: various authors (see \fBhttp://sourceforge.net/projects/ngspice/\fP) tmpk8ny_4pz/man/man1/ngproc2mod.10000644000175000017500000000263513546075722016731 0ustar carstencarsten.\" Hey, EMACS: -*- nroff -*- .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) .TH NGPROC2MOD 1 "2012-06-04" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME ngprog2mod \- program to process BSIM1 and BSIM2 files. .SH SYNOPSIS .B ngprog2mod .SH DESCRIPTION This manual page documents briefly the .B ngprog2mod command. .PP .\" TeX users may be more comfortable with the \fB\fP and .\" \fI\fP escape sequences to invode bold face and italics, .\" respectively. \fBngprog2mod\fP is a program that changes a BSIM1 or BSIM2 process file to an ngspice model file. .SH OPTIONS The program doesn't support any command lines arguments. Just run the program and it will ask for input. .br .SH AUTHOR ngprog2mod was written at the University of California. .PP This manual page was written by Gudjon I. Gudjonsson , for the Debian project (and may be used by others). tmpk8ny_4pz/man/man1/ngmakeidx.10000644000175000017500000000264413546075722016626 0ustar carstencarsten.\" Hey, EMACS: -*- nroff -*- .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) .TH ngmakeidx 1 "2012-06-02" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME ngmakeidx \- Changes .txt files to .idx .SH SYNOPSIS .B ngmakeidx .RI -o foo.idx foo.txt .br .SH DESCRIPTION This manual page documents briefly the .B ngmakeidx command. .PP .\" TeX users may be more comfortable with the \fB\fP and .\" \fI\fP escape sequences to invode bold face and italics, .\" respectively. \fBngmakeidx\fP reformats some type of .txt files and writes them as .idx files. .SH OPTIONS This program does not support normal command line options. It must be used in the following way: ngmakeidx \-o foo.idx foo.txt .SH AUTHOR ngmakeidx was written at the University of California. .PP This manual page was written by Gudjon I. Gudjonsson , for the Debian project (and may be used by others). tmpk8ny_4pz/man/man1/ngmultidec.10000644000175000017500000000635613546075722017016 0ustar carstencarsten.\" Hey, EMACS: -*- nroff -*- .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) .TH NGMULTIDEC 1 "2014-10-28" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME ngmultidec \- make ngpice sub-circuit for coupled transmission lines .SH SYNOPSIS .B ngmultidec [ .IR options ... ] .SH DESCRIPTION .I ngmultidec writes an ngspice input file to standard output which describes a sub-circuit for coupled lines using uncoupled simple lossy lines. .LP Each generated subcircuit models a 4-conductor transmission line with the following parameters: length .IR l , line capacitance .IR c , line resistance .IR r , line conductance .IR g , inductive_coeff_of_coupling .IR k , inter-line capacitance .IR cm , length .IR l . Derived parameters are: .IR lm , .IR ctot . The values of .IR l , .IR c , the model name, the number of conductors and the length of the line must be specified. .LP It is important to note that the model is a simplified one - the following assumptions are made: 1. The self-inductance l, the self-capacitance ctot (note: not c), the series resistance r and the parallel capacitance g are the same for all lines, and 2. Each line is coupled only to the two lines adjacent to it, with the same coupling parameters cm and lm. The first assumption implies that edge effects have to be neglected. The utility of these assumptions is that they make the sL+R and sC+G matrices symmetric, tridiagonal and Toeplitz, with useful consequences (see the paper referenced below). .LP It may be noted that a symmetric two-conductor line is represented accurately by this model. .LP Standard C language scientific (exponent) notation may be used for options' numeric values. .SH OPTIONS .TP .BI \-o "subcircuit_name" Set the subcircuit name .TP .BI \-l "line_inductance" Set the line inductance. .TP .BI \-c "line_capacitance" Set the line capacitance. .TP .BI \-r "line_resistance" Set the line resistance. .TP .BI \-g "line_conductance" Set the line conductance. .TP .BI \-k "inductive_coefficient_of_coupling" Set the value of the inductive coefficient of coupling, whose absolute value .I k must be less than 1.0. .TP .BI \-x "line-to-line-capacitance" Set the line-to-line capacitance. .TP .BI \-L "length" Set the length of the line. .TP .BI \-n "number" Set the number of conductors. .TP .B \-u Write a usage message to standard error. .SH EXAMPLE .RS .B ngmultidec -n4 -l9e9 -c20e-12 -r5.3 -x5e12 -k0.7 -otest -L5.4 > test.cir .RE .SH SEE ALSO .nf .IR "Efficient Transient Simulation of Lossy Interconnect" , J.S. Roychowdhury and D.O. Pederson, Proceedings of the Design Automation Conference, pp. 740-745. 1991. .B http://portal.acm.org/citation.cfm?doid=127601.127762 .fi .sp .IR ngnutmeg (1), .IR ngproc2mod (1), .IR ngsconvert (1), .IR ngspice (1), .IR nghelp (1). tmpk8ny_4pz/man/man1/cmpp.10000644000175000017500000000307713546075722015617 0ustar carstencarsten.\" Hey, EMACS: -*- nroff -*- .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) .TH CMPP 1 "2014-10-28" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME cmpp \- Code Model PreProcessor .SH SYNOPSIS .B cmpp .RI \-ifs .br .B cmpp .RI \-mod .RI [] .br .B cmpp .RI \-lst .br .SH DESCRIPTION This manual page documents briefly the .B cmpp command. .PP .\" TeX users may be more comfortable with the \fB\fP and .\" \fI\fP escape sequences to invode bold face and italics, .\" respectively. \fBcmpp\fP is a is a code model preprocessor for the XSpice program. .SH OPTIONS All options for this program start with one dash (`-'). A summary of options is included below. .TP .B \-ifs Process Interface Specification File .TP .B \-mod [] Process Model Definition File (default filename cfunc.mod) .TP .B \-lst Process Pathname List Files .br .SH AUTHOR cmpp was written by Bill Kuhn and Steve Tynor. .PP This manual page was written by Gudjon I. Gudjonsson , for the Debian project (and may be used by others). tmpk8ny_4pz/BUGS0000644000175000017500000000317513546075722013651 0ustar carstencarstenThis file contains a list of known but not yet fixed bugs in ngspice. =========================================================================== How to submit a bug report: There are two methods to report a bug you have discovered in ngspice: * Bug tracker: This is the preferred method of reporting a bug. Using the tracker on Sourceforge.net site will make your report open by everyone and the chances of finding a fix will increase. * ngspice-devel list: If you are a member of this list, you can write directly to the developers' list. Do not subscribe to the list only for sending bug reports. Before sending a bug report please note: all information you send to the bug tracking system or on the mailing lists is public. If you need to send sensitive information, send them to a developer directly but still write non sensitive data on the bug tracking system to keep track of bug history. * please refer to the sourceforge bug tracker at http://sourceforge.net/p/ngspice/bugs/ ------------------------------------------------------------------------------ OPEN BUGS: ------------------------------------------------------------------------------ * pole-zero analysis The pole-zero (.pz) analysis, which still uses the original spice3f5 algorithms, does not give correct results for all tested input files. The effort to correct that issue seems to be large. * voltage (and current) controlled switches need better timing The controlled switches (SW, CSW), which still stem from the original spice3f5 implementation, sometimes lead to wrong results when on and off ramp times differ considerably. tmpk8ny_4pz/README.adms0000644000175000017500000000556713546075722015000 0ustar carstencarstenThis document is covered by the Creative Commons Attribution Share-Alike (CC-BY-SA) v4.0. . *************** Verilog A Device models in ngspice ****************************************** 1 Introduction New compact device models today are released as Verilog-A code. Ngspice applies ADMS to translate the va code into ngspice C syntax. Currently a limited number of Verilog-A models is supported: HICUM level0 and level2 (HICUM model web page), MEXTRAM (MEXTRAM model web page), EKV (EKV model web page) and PSP (NXP PSP web site). 2 ADMS ADMS is a code generator that converts electrical compact device models specified in high-level description language into ready-to-compile C code for the API of spice simulators. Based on transformations specified in XML language, ADMS transforms Verilog-AMS code into other target languages. Here we use it to to translate the va code into ngspice C syntax. To make use of it, a set of ngspice specific XML files is distributed with ngspice in ngspice\ src\spicelib\devices\adms\admst. Their translation is done by the code generator executable admsXml (see below). 3 How to integrate a Verilog-A model into ngspice 3.1 How to setup a *.va model for ngspice Unfortunately most of the above named models’ licenses are not compatible to free software rules as defined by DFSG. Therefore since ngspice-28 the va model files are no longer part of the standard ngspice distribution. They may however be downloaded as a tar.gz archive from the ngspice-30 file distribution folder. After downloading, you may expand the zipped files into your ngspice top level folder. The models enable dc, ac, and tran simulations. Noise simulation is not supported. Other (foreign) va model files will not compile without code tweaking, due to the limited capabilities of our ADMS installation. 3.2 Adding admsXml to your build environment The actual admsXml code is maintained by the QUCS project and is available at GitHub. Information on how to compile and install admsXml for Linux or Cygwin is available on the GitHub page. For MS Windows users admsXml.exe is available for download from https://sourceforge.net/projects/mot-adms/. You may copy admsXml.exe to your MSYS2 setup into the folder msys64\mingw64\bin, if 64 bit compilation is intended. More information, though partially outdated, is obtainable from the ngspice web pages (http://ngspice.sourceforge.net/admshowto.html) and from README-old.adms. 3.3 Compile ngspice with ADMS In the top level ngspice folder there are two compile scripts compile_min.sh and compile_linux.sh. They contain information how to compile ngspice with ADMS. You will have to run autogen.sh with the adms flag ./autogen.sh --adms In addition you have to add --enable-adms to the ./configure command. Please check chapter 32.1 of the ngspice manual for perequisites and further details. Compiling ngspice with ADMS with MS Visual Studio is not supported. tmpk8ny_4pz/AUTHORS0000644000175000017500000000313513546075722014232 0ustar carstencarsten@c This file will be processed with texinfo. Spice was originally written at The University of California at Berkeley (USA). Since then, there have been many people working on the software, most of them releasing patches to the original code through the Internet. The following people have contributed in some way: Vera Albrecht, Cecil Aswell, Giles C. Billingsley, Phil Barker, Steven Borley, Krzysztof Blaszkowski, Stuart Brorson, Mansun Chan, Wayne A. Christopher, Al Davis, Glao S. Dezai, Jon Engelbert, Daniele Foci, Henrik Forstén, Noah Friedman, David A. Gates, Alan Gillespie, John Heidemann, Marcel Hendrix, Jeffrey M. Hsu, JianHui Huang, S. Hwang, Chris Inbody, Gordon M. Jacobs, Min-Chie Jeng, Beorn Johnson, Stefan Jones, Kenneth H. Keller, Francesco Lannutti, Robert Larice, Mathew Lew, Robert Lindsell, Weidong Liu, Kartikeya Mayaram, Richard D. McRoberts, Manfred Metzger, Wolfgang Muees, Paolo Nenzi, Gary W. Ng, Hong June Park, Arno Peters, Stefano Perticaroli, Serban-Mihai Popescu, Georg Post, Thomas L. Quarles, Emmanuel Rouat, Jean-Marc Routure, Jaijeet S. Roychowdhury, Lionel Sainte Cluque, Takayasu Sakurai, AMAKAWA Shuhei, Kanwar Jit Singh, Bill Swartz, Hitoshi Tanaka, Steve Tell, Andrew Tuckey, Andreas Unger, Holger Vogt, Dietmar Warning, Michael Widlok, Charles D.H. Williams, Antony Wilson, and many others... If someone helped in the development and has not been inserted in this list then this omission was unintentional. If you feel you should be on this list then please write to . Do not be shy, we would like to make a list as complete as possible. tmpk8ny_4pz/ngspice.pc.in0000644000175000017500000000033313546075722015540 0ustar carstencarstenprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: libngspice Description: General-purpose circuit simulator Version: @VERSION@ Libs: -L${libdir} -lngspice Cflags: -I${includedir} tmpk8ny_4pz/ChangeLog0000644000175000017500000247601313546075722014747 0ustar carstencarsten2017-08-25 h_vogt This ChangeLog is no longer maintained. Starting with ngspice-26, for code changes please refer to the git repository at https://sourceforge.net/p/ngspice/ngspice/ci/master/tree/. Especially the 'history' button on the top of the page will give all the change log information. There are still some other ChangeLog files in various subdirectories. All of them are no longer in use and are kept only for historical reasons. 2014-01-03 h_vogt * INSTALL, * configure.ac, * tests/bin/ngspice.pm, * visualc-shared/include/ngspice/config.h, * visualc/include/ngspice/config.h: ngspice-26: substitute 25 --> 26 2014-01-02 h_vogt * AUTHORS, * NEWS: ngspice-26: Henrik Forstén 2014-01-04 h_vogt * ANALYSES, * AUTHORS, * COPYING, * DEVICES, * FAQ, * INSTALL, * NEWS, * README, * README.tcl, * Stuarts_Poly_Notes: ngspice-26: update documentation 2014-01-04 h_vogt * ANALYSES, * AUTHORS, * BUGS, * COPYING, * DEVICES, * FAQ, * INSTALL, * NEWS, * README, * README.adms, * README.tcl, * Stuarts_Poly_Notes: whitespace 2014-01-11 h_vogt * tests/mos6/simpleinv.cir: mos6/simple inverter: true inverter circuit 2014-01-10 h_vogt * examples/Monte_Carlo/MC_2_circ.sp, * examples/Monte_Carlo/MC_2_control.sp: monte carlo with control script and MOS parameter set containing AGAUSS parameter variations (like commercial parameter libraries) 2014-01-10 rlar * src/frontend/plotting/x11.c: set X11 window title from `graph->plotname' in response to a bug report by Dominique Michel "#272 no title in plots" http://sourceforge.net/p/ngspice/bugs/272/ 2014-01-10 h_vogt * src/frontend/inpcom.c: inpcom.c: E, G source, improved search for 'vol' and 'cur' in response to a bug report by Marlize Schoeman "#274 VCVS Exxxx name and node names do not allow VOL as text" http://sourceforge.net/p/ngspice/bugs/274/ 2014-01-09 rlar * src/frontend/numparam/xpressn.c: parseunit(), support 'T' for "Tera" in response to a bug report by Andy Fierman "#273 T = Tera = 1e12 suffix is ignored when used in a parameter in a subcircuit." http://sourceforge.net/p/ngspice/bugs/273/ 2014-01-08 h_vogt * src/frontend/inp.c, * src/spicelib/parser/inp2q.c: inp.c, inp2q.c improve error message when we exit() in batch mode due to a missing model definition 2014-01-06 rlar * src/frontend/inp.c: workaround, avoid batch termination when there are .model issues these were introduced by commit "inp.c, evtinit.c: improved error message suggested by Calin Andrian" and caused ngspice checks to fail unexpectedly 2014-01-05 dwarning * tests/hisim/nmos/qaSpec, * tests/hisim/pmos/qaSpec, * tests/hisimhv1/nmos/qaSpec.basic, * tests/hisimhv1/pmos/qaSpec.basic: correct parameter names for hisim qa checks 2014-01-05 h_vogt * src/frontend/plotting/gnuplot.c: gnuplot.c: enable correct terminal for non MINGW/MSVC 2014-01-03 rlar * src/spicelib/analysis/noisean.c, * src/spicelib/analysis/tfanal.c: tfanal.c noisean.c, bug fix which was introduced in "CKTfndDev(), rewrite" the original CKTfndDev() was able to limit its search for an instance with given name to instances of a certain "type" (this was a speed optimisation which is of no use anymore, because we use a hashtable now) the new CKTfndDev() does not consider "type" thus, here in tfanal.c and noisean.c we have to check the "type" after CKTfndDev() since we no longer can limit its search to the given "type" 2014-01-04 h_vogt * src/frontend/variable.c: variable.c: prevent buffer overflow by limiting variable output to BSIZE_SP characters 2014-01-03 h_vogt * src/include/ngspice/cm.h: cm.h: add config.h to access #defines 2014-01-03 h_vogt * src/frontend/com_ghelp.c: com_ghelp.c: add info on non-availability of help to console versions w/o X display. 2013-12-30 rlar * src/xspice/icm/analog/square/cfunc.mod, * src/xspice/icm/analog/square/ifspec.ifs, * src/xspice/icm/analog/triangle/cfunc.mod, * src/xspice/icm/analog/triangle/ifspec.ifs: analog/{square,triangle}, store boolean tran_init in STATIC_VAR itself 2013-12-30 rlar * src/xspice/icm/analog/sine/cfunc.mod, * src/xspice/icm/analog/sine/ifspec.ifs, * src/xspice/icm/analog/square/cfunc.mod, * src/xspice/icm/analog/triangle/cfunc.mod, * src/xspice/icm/xtradev/core/cfunc.mod, * src/xspice/icm/xtradev/core/ifspec.ifs: analog/{sine,square,triangle}, xtradev/core, change array access avoid copy of parameter array, which would need to be freed to avoid a memory leak this is a modified and partial version of a patch provided by Krzysztof Blaszkowski 2013-12-30 rlar * src/xspice/icm/analog/sine/cfunc.mod, * src/xspice/icm/analog/sine/sin.h, * src/xspice/icm/analog/square/cfunc.mod, * src/xspice/icm/analog/square/square.h, * src/xspice/icm/analog/triangle/cfunc.mod, * src/xspice/icm/analog/triangle/triangle.h, * src/xspice/icm/xtradev/core/cfunc.mod, * src/xspice/icm/xtradev/core/core.h: analog/{sine,square,triangle}, xtradev/core, drop .h files 2013-12-30 rlar * src/xspice/icm/analog/sine/cfunc.mod, * src/xspice/icm/analog/sine/ifspec.ifs, * src/xspice/icm/analog/sine/sin.h, * src/xspice/icm/analog/square/cfunc.mod, * src/xspice/icm/analog/square/ifspec.ifs, * src/xspice/icm/analog/square/square.h, * src/xspice/icm/analog/triangle/cfunc.mod, * src/xspice/icm/analog/triangle/ifspec.ifs, * src/xspice/icm/analog/triangle/triangle.h, * src/xspice/icm/xtradev/core/cfunc.mod, * src/xspice/icm/xtradev/core/core.h, * src/xspice/icm/xtradev/core/ifspec.ifs: analog/{sine,square,triangle}, xtradev/core, whitespace cleanup 2013-12-16 dwarning * examples/various/FFT_Leakage.cir, * examples/various/FFT_tests.cir: two examples to show fft/ifft vector command 2013-12-03 dwarning * src/frontend/trannoise/1-f-code.c: 1-f-code.c, correct the printout for noise generation 2013-12-02 dwarning * src/frontend/trannoise/1-f-code.c, * src/spicelib/devices/isrc/isrcacct.c, * src/spicelib/devices/vsrc/vsrcacct.c: 1-f-code.c, use fftw3 2013-12-02 dwarning * src/frontend/com_fft.c: com_fft.c, set hanning as default window 2013-12-02 dwarning * src/frontend/com_fft.c: com_fft.c, rename variable `tlen' --> `length' 2013-11-25 dwarning * src/frontend/com_fft.c: com_fft.c, correct array size and relay to specific array order for r2c transformation 2013-11-24 dwarning * src/frontend/com_fft.c: com_fft.c, use FFTW3 for com_fft() and com_psd() 2013-11-24 dwarning * src/include/ngspice/fftext.h, * src/maths/fft/fftext.c: fftext.c, move the Bourke FFT code to fftext.c (rename macro) 2013-11-24 dwarning * src/frontend/com_fft.c, * src/include/ngspice/fftext.h, * src/maths/fft/fftext.c: fftext.c, move the Bourke FFT code to fftext.c (as a backup) 2013-11-21 dwarning * src/maths/cmaths/cmath4.c: cmath4.c, drop unused doubledouble() 2013-11-25 dwarning * src/maths/cmaths/cmath4.c: cmath4.c, correct array size and relay to specific array order for r2c transformation 2013-11-21 dwarning * src/maths/cmaths/cmath4.c: cmath4.c, correct scale for ifft 2013-11-21 dwarning * configure.ac, * src/maths/cmaths/cmath4.c: cmath4.c, use FFTW3 for cx_fft() and cx_ifft() 2013-12-29 h_vogt * visualc/.gitignore, * visualc/fftw3/fftw-3.3.3-dll32/README-ngspice.txt, * visualc/fftw3/fftw-3.3.3-dll64/README-ngspice.txt, * visualc/vngspice_fftw.sln, * visualc/vngspice_fftw.vcproj: VC project with FFTW3 library enabled 2013-11-21 dwarning * visualc/vngspice_fftw.sln, * visualc/vngspice_fftw.vcproj: visualc, copy to new project which uses the FFTW3 library 2013-11-24 dwarning * src/frontend/com_fft.c, * src/maths/cmaths/cmath4.c: cmath4.c, com_fft.c, cleanup 2013-11-24 dwarning * src/frontend/com_fft.c, * src/maths/cmaths/cmath4.c: cmath4.c, com_fft.c, rename `size' --> `N' and `mm' --> `M' 2013-12-31 rlar * .gitignore, * visualc-shared/.gitignore, * visualc/.gitignore: polish .gitignore 2013-12-31 h_vogt * visualc/vngspice.vcproj: bugfix: add CONFIG64 to console64/debug 2013-12-29 h_vogt * visualc/vngspice.sln, * visualc/vngspice.vcproj: VC project, output directory "64" 2013-12-30 h_vogt * src/maths/poly/polyfit.c: polyfit.c, speed up fitting process when degree == 1 this patch war provided by Henrik Forstén in "#14 Special case for polyfit, move initw()" http://sourceforge.net/p/ngspice/patches/14/ 2013-12-28 h_vogt * src/frontend/inpcom.c: inpcom.c: allow node names and .func parameters having equal string representation 2013-12-30 h_vogt * src/frontend/outitf.c, * src/main.c: main.c, suppress progress report when '-o' is used to redirect output 2013-12-30 h_vogt * src/main.c: main.c, fix stdout and stderr redirection and buffering with regard to '-o' and '-p' in response to a bug report from Johann Glaser "#259 Pipe mode: buffering" http://sourceforge.net/p/ngspice/bugs/259/ 2013-12-27 h_vogt * src/frontend/inpcom.c: inpcom.c: enable .include with $end-of-line in .control section 2013-12-27 dwarning * tests/bsim4/nmos/qaSpec, * tests/bsim4/pmos/qaSpec: correct bsim4 parameter mobmod 2013-12-22 h_vogt * src/include/ngspice/ngspice.h: C99 functions are only available in MSVC 2013 and newer. Still needs testing! 2013-12-16 rlar * src/spicelib/parser/ptfuncs.c: ptfuncs.c, drop inaccurate replacements for ashinh() acosh() and atanh() 2013-12-16 rlar * src/frontend/numparam/xpressn.c, * src/include/ngspice/ngspice.h, * tests/regression/parser/xpressn-1.cir, * visualc/msvc-compat.c: xpressn.c, introduce fortran style nint() rounding function 2013-12-22 rlar * configure.ac, * src/frontend/subckt.c, * tests/regression/Makefile.am, * tests/regression/subckt-processing/Makefile.am, * tests/regression/subckt-processing/model-scope-5.cir, * tests/regression/subckt-processing/model-scope-5.out: subckt.c, fix .model processing (scope) 2013-12-21 h_vogt * src/frontend/inpcom.c: enable parameter replacement in R, L, C lines, if equation is without {} and not in a subcircuit 2013-12-21 h_vogt * src/frontend/inpcom.c: inpcom.c: allow proper 'temper' substitution if device name and parameter name are the same, or if parameter name is the last token in the line. 2013-12-21 h_vogt * src/frontend/inp.c: inp.c: evaluate for 'temper' only the models which have been entered into the hash table ckt->MODnameHash 2013-12-17 h_vogt * src/spicelib/analysis/dctran.c: dctran.c bug fix, reported by Berk Özer 2013-12-14 h_vogt * src/frontend/inpcom.c: inpcom.c remove bug: parens around equation h, f add equation + temper capability to gain of F-Source 2013-12-13 h_vogt * src/frontend/inpcom.c: inpcom.c: H Source with equation and temper in transresistance 2013-12-17 h_vogt * visualc-shared/sharedspice.vcproj: sharedspice.vcproj, add soa 2013-12-07 dwarning * examples/various/modelcard.nmos, * examples/various/modelcard.pmos, * examples/various/nic_soa.cir: soa check example 2013-10-31 dwarning * src/spicelib/devices/vbic/Makefile.am, * src/spicelib/devices/vbic/vbic.c, * src/spicelib/devices/vbic/vbicdefs.h, * src/spicelib/devices/vbic/vbicext.h, * src/spicelib/devices/vbic/vbicinit.c, * src/spicelib/devices/vbic/vbicmask.c, * src/spicelib/devices/vbic/vbicmpar.c, * src/spicelib/devices/vbic/vbicsetup.c, * src/spicelib/devices/vbic/vbicsoachk.c, * visualc/vngspice.vcproj: devices/vbic, implement VBICsoaCheck() 2013-10-31 dwarning * src/spicelib/devices/hisim2/Makefile.am, * src/spicelib/devices/hisim2/hsm2.c, * src/spicelib/devices/hisim2/hsm2def.h, * src/spicelib/devices/hisim2/hsm2ext.h, * src/spicelib/devices/hisim2/hsm2init.c, * src/spicelib/devices/hisim2/hsm2mask.c, * src/spicelib/devices/hisim2/hsm2mpar.c, * src/spicelib/devices/hisim2/hsm2set.c, * src/spicelib/devices/hisim2/hsm2soachk.c, * visualc/vngspice.vcproj: devices/hisim2, implement HSM2soaCheck() 2013-10-30 dwarning * src/spicelib/devices/hisimhv1/Makefile.am, * src/spicelib/devices/hisimhv1/hsmhv.c, * src/spicelib/devices/hisimhv1/hsmhvdef.h, * src/spicelib/devices/hisimhv1/hsmhvext.h, * src/spicelib/devices/hisimhv1/hsmhvinit.c, * src/spicelib/devices/hisimhv1/hsmhvmask.c, * src/spicelib/devices/hisimhv1/hsmhvmpar.c, * src/spicelib/devices/hisimhv1/hsmhvset.c, * src/spicelib/devices/hisimhv1/hsmhvsoachk.c, * visualc/vngspice.vcproj: devices/hisimhv1, implement HSMHVsoaCheck() 2013-10-30 dwarning * src/spicelib/devices/bsimsoi/Makefile.am, * src/spicelib/devices/bsimsoi/b4soi.c, * src/spicelib/devices/bsimsoi/b4soidef.h, * src/spicelib/devices/bsimsoi/b4soiext.h, * src/spicelib/devices/bsimsoi/b4soiinit.c, * src/spicelib/devices/bsimsoi/b4soimask.c, * src/spicelib/devices/bsimsoi/b4soimpar.c, * src/spicelib/devices/bsimsoi/b4soiset.c, * src/spicelib/devices/bsimsoi/b4soisoachk.c, * visualc/vngspice.vcproj: devices/bsimsoi, implement B4SOIsoaCheck() 2013-10-30 dwarning * src/spicelib/devices/bsim4v6/Makefile.am, * src/spicelib/devices/bsim4v6/b4v6.c, * src/spicelib/devices/bsim4v6/b4v6mask.c, * src/spicelib/devices/bsim4v6/b4v6mpar.c, * src/spicelib/devices/bsim4v6/b4v6set.c, * src/spicelib/devices/bsim4v6/b4v6soachk.c, * src/spicelib/devices/bsim4v6/bsim4v6def.h, * src/spicelib/devices/bsim4v6/bsim4v6ext.h, * src/spicelib/devices/bsim4v6/bsim4v6init.c, * visualc/vngspice.vcproj: devices/bsim4v6, implement BSIM4v6soaCheck() 2013-10-30 dwarning * src/spicelib/devices/bsim4v5/Makefile.am, * src/spicelib/devices/bsim4v5/b4v5.c, * src/spicelib/devices/bsim4v5/b4v5mask.c, * src/spicelib/devices/bsim4v5/b4v5mpar.c, * src/spicelib/devices/bsim4v5/b4v5set.c, * src/spicelib/devices/bsim4v5/b4v5soachk.c, * src/spicelib/devices/bsim4v5/bsim4v5def.h, * src/spicelib/devices/bsim4v5/bsim4v5ext.h, * src/spicelib/devices/bsim4v5/bsim4v5init.c, * visualc/vngspice.vcproj: devices/bsim4v5, implement BSIM4v5soaCheck() 2013-10-30 dwarning * src/spicelib/devices/bsim4/Makefile.am, * src/spicelib/devices/bsim4/b4.c, * src/spicelib/devices/bsim4/b4mask.c, * src/spicelib/devices/bsim4/b4mpar.c, * src/spicelib/devices/bsim4/b4set.c, * src/spicelib/devices/bsim4/b4soachk.c, * src/spicelib/devices/bsim4/bsim4def.h, * src/spicelib/devices/bsim4/bsim4ext.h, * src/spicelib/devices/bsim4/bsim4init.c, * visualc/vngspice.vcproj: devices/bsim4, implement BSIM4soaCheck() 2013-10-30 dwarning * src/spicelib/devices/bsim3v32/Makefile.am, * src/spicelib/devices/bsim3v32/b3v32.c, * src/spicelib/devices/bsim3v32/b3v32mask.c, * src/spicelib/devices/bsim3v32/b3v32mpar.c, * src/spicelib/devices/bsim3v32/b3v32set.c, * src/spicelib/devices/bsim3v32/b3v32soachk.c, * src/spicelib/devices/bsim3v32/bsim3v32def.h, * src/spicelib/devices/bsim3v32/bsim3v32ext.h, * src/spicelib/devices/bsim3v32/bsim3v32init.c, * visualc/vngspice.vcproj: devices/bsim3v32, implement BSIM3v32soaCheck() 2013-10-30 dwarning * src/spicelib/devices/bsim3/Makefile.am, * src/spicelib/devices/bsim3/b3.c, * src/spicelib/devices/bsim3/b3mask.c, * src/spicelib/devices/bsim3/b3mpar.c, * src/spicelib/devices/bsim3/b3set.c, * src/spicelib/devices/bsim3/b3soachk.c, * src/spicelib/devices/bsim3/bsim3def.h, * src/spicelib/devices/bsim3/bsim3ext.h, * src/spicelib/devices/bsim3/bsim3init.c, * visualc/vngspice.vcproj: devices/bsim3, implement BSIM3soaCheck() 2013-11-01 dwarning * src/spicelib/devices/bjt/Makefile.am, * src/spicelib/devices/bjt/bjt.c, * src/spicelib/devices/bjt/bjtdefs.h, * src/spicelib/devices/bjt/bjtext.h, * src/spicelib/devices/bjt/bjtinit.c, * src/spicelib/devices/bjt/bjtmask.c, * src/spicelib/devices/bjt/bjtmpar.c, * src/spicelib/devices/bjt/bjtsetup.c, * src/spicelib/devices/bjt/bjtsoachk.c, * visualc/vngspice.vcproj: devices/bjt, implement BJTsoaCheck() 2013-10-30 dwarning * src/spicelib/devices/dio/Makefile.am, * src/spicelib/devices/dio/dio.c, * src/spicelib/devices/dio/diodefs.h, * src/spicelib/devices/dio/dioext.h, * src/spicelib/devices/dio/dioinit.c, * src/spicelib/devices/dio/diomask.c, * src/spicelib/devices/dio/diompar.c, * src/spicelib/devices/dio/diosetup.c, * src/spicelib/devices/dio/diosoachk.c, * visualc/vngspice.vcproj: devices/dio, implement DIOsoaCheck() 2013-10-30 dwarning * src/spicelib/devices/cap/Makefile.am, * src/spicelib/devices/cap/cap.c, * src/spicelib/devices/cap/capask.c, * src/spicelib/devices/cap/capdefs.h, * src/spicelib/devices/cap/capext.h, * src/spicelib/devices/cap/capinit.c, * src/spicelib/devices/cap/capmask.c, * src/spicelib/devices/cap/capmpar.c, * src/spicelib/devices/cap/capparam.c, * src/spicelib/devices/cap/capsetup.c, * src/spicelib/devices/cap/capsoachk.c, * visualc/vngspice.vcproj: devices/cap, implement CAPsoaCheck() 2013-10-30 dwarning * src/spicelib/devices/res/Makefile.am, * src/spicelib/devices/res/res.c, * src/spicelib/devices/res/resask.c, * src/spicelib/devices/res/resdefs.h, * src/spicelib/devices/res/resext.h, * src/spicelib/devices/res/resinit.c, * src/spicelib/devices/res/resmask.c, * src/spicelib/devices/res/resmpar.c, * src/spicelib/devices/res/resparam.c, * src/spicelib/devices/res/ressetup.c, * src/spicelib/devices/res/ressoachk.c, * visualc/vngspice.vcproj: devices/res, implement RESsoaCheck() 2013-11-01 rlar * src/include/ngspice/cktdefs.h, * src/spicelib/analysis/dcop.c, * src/spicelib/analysis/dctran.c, * src/spicelib/analysis/dctrcurv.c, * src/spicelib/devices/cktsoachk.c: introduce CKTsoaInit() 2013-10-30 dwarning * src/frontend/inp.c, * src/include/ngspice/cktdefs.h, * src/include/ngspice/ngspice.h, * src/main.c, * src/spicelib/analysis/dcop.c, * src/spicelib/analysis/dctran.c, * src/spicelib/analysis/dctrcurv.c, * src/spicelib/devices/Makefile.am, * src/spicelib/devices/cktsoachk.c, * src/spicelib/devices/devsup.c, * visualc/vngspice.vcproj: implement CKTsoaCheck() 2013-10-30 dwarning * src/include/ngspice/devdefs.h, * src/spicelib/devices/adms/admst/ngspiceMODULEinit.c.xml, * src/spicelib/devices/asrc/asrcinit.c, * src/spicelib/devices/bjt/bjtinit.c, * src/spicelib/devices/bsim1/bsim1init.c, * src/spicelib/devices/bsim2/bsim2init.c, * src/spicelib/devices/bsim3/bsim3init.c, * src/spicelib/devices/bsim3soi_dd/b3soiddinit.c, * src/spicelib/devices/bsim3soi_fd/b3soifdinit.c, * src/spicelib/devices/bsim3soi_pd/b3soipdinit.c, * src/spicelib/devices/bsim3v0/bsim3v0init.c, * src/spicelib/devices/bsim3v1/bsim3v1init.c, * src/spicelib/devices/bsim3v32/bsim3v32init.c, * src/spicelib/devices/bsim4/bsim4init.c, * src/spicelib/devices/bsim4v4/bsim4v4init.c, * src/spicelib/devices/bsim4v5/bsim4v5init.c, * src/spicelib/devices/bsim4v6/bsim4v6init.c, * src/spicelib/devices/bsimsoi/b4soiinit.c, * src/spicelib/devices/cap/capinit.c, * src/spicelib/devices/cccs/cccsinit.c, * src/spicelib/devices/ccvs/ccvsinit.c, * src/spicelib/devices/cpl/cplinit.c, * src/spicelib/devices/csw/cswinit.c, * src/spicelib/devices/dio/dioinit.c, * src/spicelib/devices/hfet1/hfetinit.c, * src/spicelib/devices/hfet2/hfet2init.c, * src/spicelib/devices/hisim2/hsm2init.c, * src/spicelib/devices/hisimhv1/hsmhvinit.c, * src/spicelib/devices/ind/indinit.c, * src/spicelib/devices/isrc/isrcinit.c, * src/spicelib/devices/jfet/jfetinit.c, * src/spicelib/devices/jfet2/jfet2init.c, * src/spicelib/devices/ltra/ltrainit.c, * src/spicelib/devices/mes/mesinit.c, * src/spicelib/devices/mesa/mesainit.c, * src/spicelib/devices/mos1/mos1init.c, * src/spicelib/devices/mos2/mos2init.c, * src/spicelib/devices/mos3/mos3init.c, * src/spicelib/devices/mos6/mos6init.c, * src/spicelib/devices/mos9/mos9init.c, * src/spicelib/devices/nbjt/nbjtinit.c, * src/spicelib/devices/nbjt2/nbt2init.c, * src/spicelib/devices/ndev/ndevinit.c, * src/spicelib/devices/numd/numdinit.c, * src/spicelib/devices/numd2/numd2init.c, * src/spicelib/devices/numos/numosinit.c, * src/spicelib/devices/res/resinit.c, * src/spicelib/devices/soi3/soi3init.c, * src/spicelib/devices/sw/swinit.c, * src/spicelib/devices/tra/trainit.c, * src/spicelib/devices/txl/txlinit.c, * src/spicelib/devices/urc/urcinit.c, * src/spicelib/devices/vbic/vbicinit.c, * src/spicelib/devices/vccs/vccsinit.c, * src/spicelib/devices/vcvs/vcvsinit.c, * src/spicelib/devices/vsrc/vsrcinit.c, * src/xspice/cmpp/writ_ifs.c: introduce new SPICEdev operation `DEVsoaCheck()' 2013-08-03 rlar * src/frontend/inpcom.c: inpcom.c, drop cp_tildexpand() in expand_this(), inp_pathresolve_at() shall do this 2013-08-04 rlar * src/frontend/inpcom.c: inpcom.c, rewrite .lib reading use canonical file names to remember known .lib files remember their directories in `habitat' use inp_pathresolve_at() to find .lib files with regard to `searchpath' and current directory 2013-07-31 rlar * src/frontend/inpcom.c: inpcom.c, recurse expand_section_ref() 2013-07-31 rlar * src/frontend/inpcom.c: inpcom.c, cleanup 2013-08-03 rlar * src/frontend/inpcom.c: inpcom.c, whitespace cleanup 2013-08-03 rlar * src/frontend/inpcom.c: inpcom.c, reorder 2013-08-03 rlar * src/frontend/inpcom.c: inpcom.c, abstraction, introduce expand_section_ref() 2013-08-03 rlar * src/frontend/inpcom.c: inpcom.c, simplify `.include' file processing using inp_pathresolve_at() 2013-08-03 rlar * src/frontend/inpcom.c: inpcom.c, introduce inp_pathresolve_at() 2013-10-24 h_vogt * src/misc/tilde.c: tilde.c, enable search for home dir under MS Windows 2013-10-31 rlar * src/frontend/inpcom.c: inpcom.c, introduce inp_pathresolve(), rewrite inp_pathopen() using this 2013-10-25 h_vogt * src/frontend/inpcom.c: inpcom.c, for mingw absolute pathnames may begin with /d/ allow this when variable 'mingwpath' is set in .spinit 2013-11-09 h_vogt * src/frontend/inpcom.c, * src/main.c: inpcom.c, remove variable "sourcefile" and references to "sourcefile" this will no longer be required for access to input file residing in the executable's directory 2013-10-31 rlar * src/frontend/inpcom.c: inpcom.c, fix inp_pathopen(), always try to fopen() relative to the current working directory first 2013-10-31 rlar * src/frontend/inpcom.c: inpcom.c, fix inp_pathopen(), relative path shall be expanded regarding "sourcepath" 2013-12-08 rlar * src/frontend/inpcom.c: inpcom.c, simplify using is_plain_filename(), fix incorrect comments 2013-12-08 rlar * src/frontend/inpcom.c: inpcom.c, implement is_absolute_pathname() and is_plain_filename() 2013-12-11 h_vogt * src/spicelib/devices/dev.c: remove redundant #include 2013-12-11 h_vogt * src/frontend/inp.c, * src/xspice/evt/evtinit.c: inp.c, evtinit.c: improved error message suggested by Calin Andrian 2013-12-11 h_vogt * src/frontend/inp.c: prevent crash, if due to input bug ckt is not created, reported by Andrian 2013-12-08 rlar * src/xspice/icm/GNUmakefile.in, * src/xspice/icm/makedefs.in: xspice, move `-lm' to the end of the linker command line 2013-12-07 h_vogt * src/frontend/numparam/xpressn.c, * src/include/ngspice/ngspice.h, * visualc-shared/sharedspice.vcproj, * visualc/msvc-compat.c, * visualc/vngspice.vcproj: replacements for functions missing in the msvc world 2013-12-05 Calin Andrian * src/xspice/mif/mifgetvalue.c: MIFget_boolean(), allow numeric values 0 and 1 too 2013-12-05 Anthony J. Bentley * src/maths/misc/randnumb.c: remove unnecessary include of sys/timeb.h. 2013-12-05 Anthony J. Bentley * man/man1/ngmultidec.1, * man/man1/ngnutmeg.1, * man/man1/ngsconvert.1, * man/man1/ngspice.1: man page fixes. - Start new sentences on a new line, so that troff gets inter-sentence spacing correct. - Remove unterminated quotation mark. - Replace no-longer-defined "spice" macro with a literal string. - Remove trailing whitespace. - Close literal contexts instead of letting them propagate throughout an entire section. 2013-11-09 rlar * configure.ac, * tests/regression/Makefile.am, * tests/regression/parser/Makefile.am, * tests/regression/parser/minus-minus.cir, * tests/regression/parser/minus-minus.out, * tests/regression/parser/xpressn-1.cir, * tests/regression/parser/xpressn-1.out, * tests/regression/parser/xpressn-2.cir, * tests/regression/parser/xpressn-2.out: tests/regression/parser check xpressn.c parser capability to parse {2--3} check .control parser capability to parse 2--3 check B parser capability to parse 2--3 check echo commands capability to print "--" check echo commands capability to print upper and lower case check xpressn.c parser capabilities check precision of some transcendental functions 2013-11-08 rlar * tests/regression/lib-processing/ex1a.out, * tests/regression/lib-processing/ex1b.out, * tests/regression/lib-processing/ex2a.out, * tests/regression/lib-processing/ex3a.out: tests/regression/lib-processing, fix upper/lower case 2013-11-09 rlar * src/frontend/numparam/spicenum.c, * src/frontend/numparam/xpressn.c: numparam, almost full precision for stringified double float numbers 2013-11-07 rlar * src/frontend/numparam/xpressn.c: xpressn.c, drop initkeys() 2013-11-07 rlar * src/frontend/numparam/xpressn.c: xpressn.c, drop "AND OR NOT DIV MOD DEFINED" keywords 2013-11-07 rlar * src/frontend/numparam/xpressn.c: xpressn.c, use C strings for the arguments of `keywords()' 2013-11-07 rlar * src/frontend/numparam/xpressn.c: xpressn.c, drop '&' and '|' operators, (we have '&&' and '||') 2013-11-07 rlar * src/frontend/inpcom.c: inpcom.c, exclude currently unused functions 2013-11-07 rlar * src/frontend/inpcom.c: inpcom.c, drop ternary_fcn code in inpcom.c, the extended "formula" shall process ternary expressions 2013-11-07 rlar * src/frontend/numparam/xpressn.c: xpressn.c, whitespace cleanup 2013-10-15 rlar * src/frontend/numparam/xpressn.c: xpressn.c, implement a?b:c in the "formula" parser 2013-12-01 rlar * src/frontend/numparam/xpressn.c: xpressn.c, drop XFU_V probably accidentally introduced in commit > Author: h_vogt > Date: Sun Feb 7 11:27:59 2010 +0000 > > improved numparam error message 2013-12-01 rlar * src/frontend/numparam/xpressn.c: xpressn.c, use enums instead of literals 2013-12-01 rlar * src/frontend/numparam/numparam.h, * src/frontend/numparam/xpressn.c: xpressn.c, drop "Defd" enum, to be incorporated into a bigger enum 2013-11-24 rlar * src/frontend/numparam/numparam.h, * src/frontend/numparam/xpressn.c: xpressn.c, fix semantics of `int(x)' and remove dangerous macros int(x) most probably shall be trunc(x) instead of floor(x) note trunc(x) was #defined beeing floor(x) note ln(x) was #defined beeing log(x) 2013-11-29 rlar * src/frontend/numparam/general.h, * src/frontend/numparam/mystring.c, * src/frontend/numparam/nupatest.c, * src/frontend/numparam/spicenum.c: fix an endless loop waiting for y/n when the input is at EOF reported by Calin Andrian Subject: [Ngspice-devel] Invaild number bug 2013-11-01 rlar * src/frontend/numparam/xpressn.c: xpressn.c, fix semantics of '&&' and '||' these shall interpret a value as a bool according to (value != 0) and these shall evaluate to either 1.0 or 0.0 2013-11-01 rlar * src/frontend/numparam/xpressn.c: xpressn.c, whitespace cleanup 2013-11-01 rlar * src/frontend/numparam/xpressn.c: xpressn.c, fix `truth' for ternary_fcn() 0.0 is `false', everything else is `true' 2013-11-23 rlar * src/frontend/parse-bison.c, * src/frontend/parse-bison.h, * src/spicelib/parser/inpptree-parser.c, * src/spicelib/parser/inpptree-parser.h: update bison generated files 2013-11-20 rlar * src/frontend/parse-bison.y, * src/spicelib/parser/inpptree-parser.y: .control and `B' parser, fix precedence of '-' versus '^' -2^2 shall be -(2^2) instead of (-2)^2 2013-11-23 h_vogt * src/frontend/trannoise/1-f-code_d.c, * src/frontend/trannoise/Makefile.am: remove unused code 2013-11-18 rlar * src/spicelib/devices/hisim2/hsm2eval.c, * src/spicelib/devices/hisimhv1/hsmhveval.c: devices/hisimhv1, devices/hisim2, avoid overlapping globals TMF1 ... TMF6 reported by James Jackson in message: [Ngspice-users] Problem building git head --with-ngspice Mac OS X 2013-11-16 rlar * src/maths/misc/isinf.c, * src/misc/dup2.c: avoid overlapping "Dummy" symbols reported by James Jackson in message: [Ngspice-users] Problem building git head --with-ngspice Mac OS X 2013-11-03 rlar * src/frontend/inpcom.c: inpcom.c, add missing condition `!comfile' for .title and .end processing 2013-11-03 dwarning * src/spicelib/analysis/cktsens.c: correct the step incrementing type to SENS_LINEAR 2013-11-02 h_vogt * src/frontend/inpcom.c: fix criterion to start `.lib' and `.global gnd' processing 2013-06-02 rlar * src/frontend/inpcom.c: inpcom.c: MSVC compatibility 2013-06-02 rlar * src/frontend/inpcom.c: inpcom.c, cleanup inp_readall() #7/7, drop misleading comment 2013-06-02 rlar * src/frontend/inpcom.c: inpcom.c, cleanup inp_readall() #6/7, tautology `call_depth == 0' 2013-06-02 rlar * src/frontend/inpcom.c: inpcom.c, cleanup inp_readall() #5/7, use `rv . line_number' itself 2013-06-02 rlar * src/frontend/inpcom.c: inpcom.c, cleanup inp_readall() #4/7, move inp_read() epilog to inp_readall() 2013-06-02 rlar * src/frontend/inpcom.c: inpcom.c, cleanup inp_readall() #3/7, return `line_number' too 2013-06-02 rlar * src/frontend/inpcom.c: inpcom.c, cleanup inp_readall() #2/7, move inp_read() prolog to inp_readall() 2013-06-02 rlar * src/frontend/device.c, * src/frontend/inp.c, * src/frontend/inpcom.c, * src/frontend/nutinp.c, * src/include/ngspice/fteext.h: inpcom.c, cleanup inp_readall() #1/7, introduce inp_read() 2013-11-02 rlar * src/frontend/inpcom.c: bug fix, .include and .lib files don't have a `title' line 2013-11-02 dwarning * src/spicelib/devices/cap/capask.c, * src/spicelib/devices/ind/indask.c: add missing tc1 and tc2 parameter entries in ask function 2013-11-02 dwarning * src/spicelib/devices/cap/capask.c, * src/spicelib/devices/ind/indask.c: whitespaces 2013-10-31 dwarning * src/spicelib/devices/vbic/vbicdefs.h: fix an overlap in parameter definitions 2013-10-28 rlar * src/main.c: cleanup getopt_long() options 2013-07-31 rlar * src/frontend/inpcom.c: read_a_lib(), drop call_depth, its always zero 2013-07-31 rlar * src/frontend/inpcom.c: expand_section_references(), drop call_depth, its always zero 2013-08-04 rlar * src/frontend/inpcom.c: harmonize delete_libs() 2013-10-20 h_vogt * src/frontend/inp.c, * src/frontend/measure.c, * src/frontend/numparam/spicenum.c, * src/frontend/runcoms2.c: bug reported by Yamamaya: revert deleting dicoS structure in inp.c and measure.c: still to be used by 'listing param' deletion moved to com_remcirc() 2013-10-20 h_vogt * src/frontend/inpcom.c: inpcom.c: patch provided by Krzysztof Blaszkowski Allow spaces like { token } during parameter substitution 2013-10-20 rlar * src/frontend/inpcom.c: inpcom.c, rewrite, collapsing find_lib() into read_a_lib() 2013-10-20 rlar * src/frontend/inpcom.c: inpcom.c: '$' as end-of-line comment delimiter outside of .control section, '$ ' inside of .control section, # untabify 2013-10-20 h_vogt * src/frontend/inpcom.c: inpcom.c: '$' as end-of-line comment delimiter outside of .control section, '$ ' inside of .control section 2013-10-19 h_vogt * src/frontend/inpcom.c: inpcom.c: allow special characters in function names 2013-10-19 rlar * src/frontend/inpcom.c: inpcom.c: patch provided by Simon Chang: correct function name substitution #2 2013-10-19 h_vogt * src/frontend/inpcom.c: inpcom.c: patch provided by Simon Chang: correct function name substitution 2013-10-18 rlar * src/misc/string.c: gettok_node(), use copy_substring() 2013-10-13 Krzysztof Blaszkowski * src/misc/string.c: gettok_node(), avoid segfault when *s == NULL 2013-10-13 Krzysztof Blaszkowski * src/frontend/inpcom.c: inpcom.c: avoid segfault when `TABLE' is used without parentheses 2013-10-17 rlar * src/frontend/inpcom.c: inp_stripcomments_line(), drop support for '--' comment style seems to be not common in the spice world, and interferes too much with mathematical expressions like {3--2} 2013-10-13 Krzysztof Blaszkowski * src/frontend/signal_handler.c, * src/main.c, * src/sharedspice.c, * src/tclspice.c: execute ft_sigintr_cleanup() outside of the signal handler to avoid execution of non-reentrant functions 2013-10-13 Krzysztof Blaszkowski * src/frontend/signal_handler.c, * src/frontend/signal_handler.h: abstraction, introduce ft_sigintr_cleanup() 2013-10-13 Krzysztof Blaszkowski * src/frontend/signal_handler.c: ft_sigintr(), reorder, side effect: if `ft_setflag' then gr_clean() won't be invoked and can't be invoked anyway from inside of the signal handler 2013-10-14 dwarning * src/spicelib/devices/bjt/bjtdefs.h: fix an overlap in parameter definitions 2013-10-11 Krzysztof Blaszkowski * src/maths/ni/nipred.c: nipred.c, cleanup 2013-10-11 Krzysztof Blaszkowski * src/maths/ni/nipred.c: nipred.c, bug fix NIpred() when running 'TRAPEZOIDAL' a long standing serious bug, allready in the very first commit from Date: Thu Apr 27 20:03:57 2000 +0000 Nipred() after evaluating TRAPEZOIDAL case fell through into GEAR case. see: http://sourceforge.net/p/ngspice/support-requests/18/ 2013-10-10 rlar * src/frontend/inpcom.c: revert, msvc doesn't support `#warning' 2013-10-09 h_vogt * src/frontend/inpcom.c: inpcom.c: improved character check around 'temper' 2013-10-08 rlar * src/frontend/numparam/xpressn.c: numparm, fix pow() implementation 2013-10-08 rlar * src/frontend/numparam/xpressn.c: numparm, cleanup formula() 2013-10-09 h_vogt * src/frontend/numparam/xpressn.c: xpressn.c: add domain check for acosh, atanh replacement functions 2013-10-08 rlar * src/frontend/numparam/xpressn.c: numparm, cleanup rewrite formula() 2013-10-08 h_vogt * src/frontend/numparam/xpressn.c: xpressn.c: asinh, acosh, atanh replacement functions added 2013-06-02 rlar * src/frontend/numparam/xpressn.c: xpressn.c, cleanup `maximize' operation 2013-10-08 rlar * src/frontend/numparam/xpressn.c: xpressn.c, cleanup char index bistromatic 2013-10-08 rlar * src/frontend/numparam/general.h, * src/frontend/numparam/mystring.c, * src/frontend/numparam/xpressn.c, * src/include/ngspice/dstring.h, * src/misc/dstring.c: sprinkle some constness 2013-10-07 rlar * src/frontend/numparam/xpressn.c: xpressn.c, use symbolic `state' constants 2013-10-07 rlar * src/frontend/numparam/xpressn.c: xpressn.c, prepare 2013-06-02 rlar * src/frontend/inpcom.c: inpcom.c, emphasize the inp_readall() tail processing 2013-03-06 rlar * src/frontend/inpcom.c: inpcom.c, delete_libs() can use line_free_x() now 2013-03-06 rlar * src/frontend/inp.c: line_free_x(), prevent stack overflow due to non-trivial recursion 2013-03-06 rlar * src/frontend/inpcom.c: inpcom.c, local scope for `ipc_status' 2013-10-05 rlar * src/frontend/inpcom.c: inp_fix_ternary_operator_str, pinpoint serious bugs 2013-10-05 rlar * src/frontend/inpcom.c: inp_fix_ternary_operator_str, use a local variable to improve readability 2013-10-05 rlar * src/frontend/inpcom.c: inp_fix_ternary_operator_str, use `copy_substring()' 2013-10-05 rlar * src/frontend/inpcom.c: inp_fix_ternary_operator_str, limit backward search 2013-10-05 rlar * src/frontend/inpcom.c: inp_fix_ternary_operator_str, cleanup 2013-10-04 rlar * src/frontend/numparam/xpressn.c: xpressn.c, tan, asin, acos, atan, asinh, acosh, atanh, pwr, tanh add tan() asin() acos() atan() asinh() acosh() atanh() rewrite pwr() and tanh() 2013-10-03 rlar * src/frontend/inpcom.c: inp_fix_ternary_operator_str(), rewrite 2013-10-03 rlar * src/frontend/inpcom.c: inp_search_opening_paren(), rewrite 2013-10-03 rlar * src/frontend/inpcom.c: inp_search_opening_paren(), cleanup 2013-10-03 rlar * src/frontend/inpcom.c: inp_search_opening_paren(), static scope instead of local C99 scope 2013-10-03 rlar * src/frontend/inpcom.c: inp_fix_ternary_operator_str(), abstraction, new function inp_search_opening_paren() 2013-10-03 rlar * src/frontend/inpcom.c: inp_fix_ternary_operator_str(), local scope for str_ptr3 2013-10-03 rlar * src/frontend/inpcom.c: cleanup 2013-10-03 rlar * src/frontend/inpcom.c: cleanup 2013-10-03 h_vogt * src/frontend/inpcom.c: inpcom.c: repeated call to inp_fix_ternary_operator_str in inp_fix_ternary_operator, only lines beginning with . selected, comments updated 2013-10-03 rlar * src/frontend/inpcom.c: inp_fix_ternary_operator_str(), rewrite using strchr() 2013-10-03 rlar * src/frontend/inpcom.c: inp_search_closing_paren(), finally fold them 2013-10-03 rlar * src/frontend/inpcom.c: inp_search_closing_paren(), rewrite, considering the assertion 2013-10-03 rlar * src/frontend/inpcom.c: inp_search_closing_paren(), increase similarity 2013-10-03 rlar * src/frontend/inpcom.c: inp_search_closing_paren(), rewrite 2013-10-03 rlar * src/frontend/inpcom.c: inp_search_closing_paren(), rewrite 2013-10-03 rlar * src/frontend/inpcom.c: inp_search_closing_paren(), rewrite 2013-10-03 rlar * src/frontend/inpcom.c: inp_search_closing_paren(), cleanup 2013-10-03 rlar * src/frontend/inpcom.c: inp_search_closing_paren(), drop found_paren, its always true 2013-10-03 rlar * src/frontend/inpcom.c: inp_search_closing_paren(), cleanup 2013-10-03 rlar * src/frontend/inpcom.c: inp_fix_ternary_operator_str(), cleanup 2013-10-03 rlar * src/frontend/inpcom.c: inp_search_closing_paren(), static scope instead of local C99 scope 2013-10-03 rlar * src/frontend/inpcom.c: inp_fix_ternary_operator_str(), abstraction, new function inp_search_closing_paren() 2013-10-03 rlar * src/frontend/inpcom.c: inp_fix_ternary_operator_str(), prepare for abstraction 2013-10-03 rlar * src/frontend/inpcom.c: inp_fix_ternary_operator_str(), local scope for `count' 2013-10-02 h_vogt * src/frontend/inpcom.c: inpcom.c: hot fix for ternary function for numparam 2013-10-02 rlar * src/tclspice.c: use Tcl_SetObjResult() instead of poking into Tcl_Interp.result 2013-10-01 rlar * src/frontend/outitf.c: avoid `enumerated type mixed with another type' compiler warning 2013-10-01 rlar * src/maths/sparse/spalloc.c: avoid a `constant expression' compiler warning 2013-10-01 h_vogt * src/frontend/inpcom.c: inpcom.c: some cleanups 2013-10-01 rlar * src/frontend/control.c, * src/main.c: avoid `unreachable code' warnings 2013-10-01 rlar * src/frontend/trannoise/FastNorm3.c: FastNorm3.c, use int32_t for some 32 bit specific operations 2013-10-01 rlar * src/xspice/evt/evtinit.c, * src/xspice/mif/mifgetmod.c: fix incorrect fprintf() usage 2013-10-01 h_vogt * src/frontend/inpcom.c: inpcom.c: plug a memory leak, add some comments 2013-09-30 dwarning * src/frontend/com_fft.c: remove unused variable sign 2013-09-29 h_vogt * src/spicelib/parser/inp2m.c: inp2m.c: plug memory leak 2013-09-29 h_vogt * src/spicelib/parser/inp2m.c: inp2m.c: indentation 2013-09-29 h_vogt * src/frontend/inpcom.c: inpcom.c: plug two memory leaks 2013-09-25 h_vogt * src/sharedspice.c, * src/spicelib/analysis/dctran.c: dctran.c, sharedspice.c: function sharedsync has modified parameter list 2013-09-16 dwarning * src/spicelib/devices/cap/capparam.c, * src/spicelib/devices/dio/dioparam.c, * src/spicelib/devices/res/resparam.c: allow geometry scaling by option `scale' 2013-09-16 dwarning * src/spicelib/devices/cpl/cplload.c: index `i' was definitively overwritten 2013-09-15 dwarning * examples/TransmissionLines/cpl_ibm3.sp: suppress a warning by inserting the default diode model 2013-09-14 h_vogt * src/frontend/inpcom.c: inpcom.c: exclude command 'echo' and some others from lower case letter transformation 2013-09-14 h_vogt * src/frontend/numparam/numparam.h, * src/frontend/numparam/xpressn.c: xpressn.c, numparam.h: fcn del_attrib with void* argument, required by nghash_free() 2013-09-14 h_vogt * src/frontend/inpcom.c: inpcom.c: move delete_libs to a safer place outside of recursions 2013-09-14 dwarning * src/spicelib/devices/bsim4/b4par.c, * src/spicelib/devices/bsimsoi/b4soipar.c, * src/spicelib/devices/hisim2/hsm2par.c, * src/spicelib/devices/hisimhv1/hsmhvpar.c, * src/spicelib/devices/mos1/mos1par.c, * src/spicelib/devices/mos2/mos2par.c, * src/spicelib/devices/mos3/mos3par.c: allow geometry scaling by option `scale' 2013-09-14 h_vogt * src/frontend/inpcom.c: inpcom.c: add fcn delete_libs to free libraries[] 2013-09-13 h_vogt * src/frontend/inpcom.c: inpcom.c: plug memory leak 2013-09-12 rlar * src/frontend/inpcom.c: inp_expand_macro_in_str() needs recursive invocation to expand macros 2013-09-12 rlar * src/frontend/inpcom.c: counteract the tfree(macro_str) introduced in 'inpcom.c: plug memory leaks' this one: commit 810f72f850f8177275f17fc635d97b71b911ec0d Author: h_vogt Date: Sun Sep 8 13:01:26 2013 +0200 inpcom.c: plug memory leaks 2013-09-11 h_vogt * src/frontend/inpcom.c: inpcom.c: fix a bug in ternary function 2013-09-11 h_vogt * src/frontend/inpcom.c: inpcom.c: cleanup 2013-09-10 h_vogt * src/frontend/inpcom.c: inpcom.c: further inprovement of 'temper', but still not there: problem with replacement of .func (nesting?) 2013-09-11 h_vogt * src/frontend/inpcom.c: inpcom.c: dynamic array size in `inp_split_multi_param_lines()' 2013-09-08 h_vogt * src/frontend/inpcom.c: inpcom.c: remove name_buf length limitation 2013-09-08 h_vogt * src/frontend/inp.c, * src/frontend/inpcom.c: inp.c, inpcom.c: improved debug printout debug-outx.txt 2013-09-08 h_vogt * src/spicelib/parser/inp2m.c: inp2m.c: plug a small memory leak 2013-09-08 h_vogt * src/frontend/inpcom.c: inpcom.c: plug memory leaks 2013-09-08 h_vogt * src/frontend/inpcom.c: inpcom.c: plug a memory leak 2013-09-07 h_vogt * src/frontend/inpcom.c: inpcom.c: `rewrite expand_section_references()' 2013-09-07 h_vogt * src/frontend/inpcom.c: inpcom.c: fix huge memory leak during library handling 2013-09-07 h_vogt * src/frontend/inpcom.c: inpcom.c: plug memory leak 2013-09-05 h_vogt * src/frontend/inpcom.c: inpcom.c: patch by Simon Chang added, severe trash code identified, to be repaired. 2013-09-05 h_vogt * src/frontend/inpcom.c: inpcom.c: comment added 2013-09-05 h_vogt * src/frontend/inp.c: inp.c: inp_parse_temper(), plug memory leak 2013-09-05 h_vogt * src/frontend/inpcom.c: inpcom.c: simplify a condition in `inp_fix_for_numparam()' 2013-09-05 h_vogt * src/frontend/inpcom.c: inpcom.c: modify only subckt used 2013-09-04 h_vogt * src/frontend/inpcom.c: inpcom.c: plug memory leaks in new TEMPER code 2013-09-04 h_vogt * src/frontend/inp.c, * src/frontend/inpcom.c, * src/include/ngspice/cktdefs.h, * src/spicelib/analysis/dctrcurv.c: allow 'temper' keyword in .param, .model and device instance lines inpcom.c: fcns inp_fix_temper_in_param(), inp_new_func(), inp_rem_func() to convert .param with 'temper' to .func, and replace all affected parameter tokens xxx by their func counterpart xxx() inpcom.c; fcns inp_temper_compat(), inp_modify_exp() added to prepare expression with 'temper' for numparam inp.c: fcns inp_parse_temper(), inp_parse_temper_trees() added inp_evaluate_temper() to prepare, parse and evaluate the expressions containing 'temper' cktdefs.h: add global variable to expressions with 'temper' dctrcurv.c: add fcn inp_evaluate_temper() when temp has changed 2013-09-03 h_vogt * src/include/ngspice/inpdefs.h, * src/spicelib/parser/inperrc.c: inperrc.c: new function `INPstrCat()' to concatenate two strings 2013-08-31 h_vogt * src/frontend/inpcom.c: inpcom.c: debug printout to debug-out.txt improved 2013-08-31 h_vogt * src/frontend/inpcom.c: inpcom.c: update some comments 2013-08-27 dwarning * src/frontend/com_fft.c: com_psd(), reuse the window function `fft_windows()' 2013-08-27 dwarning * src/frontend/com_fft.c, * src/frontend/inpcom.c: cleanup some compiler warnings 2013-08-27 dwarning * src/frontend/variable.c, * src/include/ngspice/cpextern.h: allow cshell $variable substitution with and without $&var 2013-08-27 h_vogt * src/spicelib/parser/inperrc.c: inperrc.c: comments added, white spaces 2013-08-27 h_vogt * src/frontend/inp.c: inp.c: comments added 2013-08-26 h_vogt * src/frontend/runcoms2.c, * src/spicelib/analysis/dctran.c: dctran.c, runcoms2.c: shared ngspice: remove plot data upon 'bg_halt' and 'remcirc' 2013-08-25 h_vogt * src/sharedspice.c: sharedspice.c: improve progress analysis 2013-08-25 h_vogt * src/frontend/misccoms.c: misccoms.c: add more deleting function in 'quit' for shared ngspice 2013-08-24 h_vogt * src/frontend/runcoms2.c: runcoms2.c: remove ci_options upon remcirc 2013-08-24 h_vogt * src/frontend/runcoms2.c: runcoms2.c: plug memory leak during remcirc 2013-08-24 h_vogt * src/spicelib/devices/bsim4/b4dest.c, * src/spicelib/devices/bsim4/b4set.c: BSIM 4.7.0 plug memory leak during remcirc 2013-08-24 h_vogt * src/spicelib/devices/bsim3v32/b3v32dest.c, * src/spicelib/devices/bsim3v32/b3v32set.c: BSIM 3.2.4 plug memory leak during remcirc 2013-08-24 h_vogt * src/spicelib/devices/bsim3/b3dest.c, * src/spicelib/devices/bsim3/b3set.c: BSIM 3.3.0 plug memory leak during remcirc 2013-08-21 h_vogt * src/frontend/runcoms2.c: runcoms2.c: plug memory leak during 'remcirc' 2013-08-21 h_vogt * src/frontend/outitf.c: outitf.c: plug memory leak 2013-08-21 h_vogt * src/frontend/numparam/numparam.h, * src/frontend/numparam/spicenum.c, * src/frontend/numparam/xpressn.c: spicenum.c, xpressn.c: plug setup memory leak by adding user defined delete function for hash table entries 2013-08-21 h_vogt * src/frontend/runcoms2.c: runcoms2.c: plug setup memory leak 2013-08-20 h_vogt * src/spicelib/devices/isrc/isrcdest.c, * src/spicelib/devices/vsrc/vsrcdest.c: vsrcdest.c, isrcdest.c: fix memory leak by freeing VSRCcoeffs, ISRCcoeffs 2013-08-20 dwarning * src/frontend/parse.c, * src/include/ngspice/fteext.h, * src/maths/cmaths/cmath1.c, * src/maths/cmaths/cmath1.h: introduce `cx_sortorder()' function 2013-08-20 h_vogt * src/frontend/runcoms2.c: runcoms2.c: set freed pointers to NULL 2013-08-20 h_vogt * src/frontend/breakp2.c: breakp2.c: plug some tiny memory leaks 2013-08-20 h_vogt * src/frontend/breakp.c: breakp.c: repair nonworking function dbfree() 2013-08-20 h_vogt * src/frontend/dotcards.c: dotcards.c: plug some memory leaks 2013-08-19 h_vogt * src/frontend/numparam/spicenum.c: spicenum.c: fix memory leak completely 2013-08-19 h_vogt * src/frontend/inp.c, * src/frontend/measure.c, * src/frontend/numparam/numpaif.h, * src/frontend/numparam/spicenum.c: remove memory leak freeing dicoS reported by Jonathan Knott 2013-08-15 dwarning * src/frontend/parse.c, * src/include/ngspice/fteext.h, * src/maths/cmaths/cmath1.c, * src/maths/cmaths/cmath1.h: introduce unwrap, minimum and maximum function 2013-08-15 dwarning * src/sharedspice.c: fix a bug on spurious output to console during fprintf reported by Evan Lavelle 2013-08-15 dwarning * src/maths/cmaths/cmath4.c: preserve vector length for fft by interpolation, window by default: none 2013-08-11 h_vogt * tests/bin/check.sh: apply patch `#17 Enable regression tests on OpenBSD' provided by Anthony J. Bentley on http://sourceforge.net/p/ngspice/patches/17/ 2013-08-10 h_vogt * src/include/ngspice/sharedspice.h, * src/sharedspice.c: sharedspice.c: modified callback interface enhanced function ngSpice_Init_Sync() three new callback functions for synchronization 2013-08-10 h_vogt * src/spicelib/analysis/dctran.c: dctran.c: synchronization option for shared library 2013-08-10 h_vogt * src/spicelib/devices/isrc/isrc.c, * src/spicelib/devices/isrc/isrcacct.c, * src/spicelib/devices/isrc/isrcdefs.h, * src/spicelib/devices/isrc/isrcload.c, * src/spicelib/devices/isrc/isrcpar.c: devices/isrc: EXTERNAL option for independent current source ISRC 2013-08-06 dwarning * src/frontend/evaluate.c, * src/frontend/parse.c, * src/include/ngspice/fteext.h, * src/maths/cmaths/cmath4.c, * src/maths/cmaths/cmath4.h: fft and ifft as vector functions 2013-08-09 dwarning * src/include/ngspice/fftext.h, * src/maths/fft/fftext.c: fix type of length in fft window function 2013-08-05 dwarning * src/maths/cmaths/cmath4.c: whitespace 2013-08-03 dwarning * src/maths/fft/fftext.c: specific MS adaption 2013-08-03 dwarning * src/frontend/com_fft.c, * src/include/ngspice/fftext.h, * src/maths/fft/fftext.c: move the `fft_windows()' function to fft/fftext.c 2013-07-30 h_vogt * src/frontend/inpcom.c: inpcom.c, rewrite .subckt parameter processing 2013-07-30 rlar * src/frontend/parser/lexical.c, * src/frontend/variable.c: fix the csh-problem $foo[$bar] and $foo[$&baz] 2013-07-30 rlar * src/frontend/parser/backq.c, * src/frontend/variable.c: cp_variablesubst() and cp_bquote(), rewrite 2013-07-30 rlar * src/frontend/parser/backq.c, * src/frontend/variable.c: cp_variablesubst() and cp_bquote(), rewrite 2013-07-28 rlar * src/frontend/shyu.c, * src/frontend/spiceif.c, * src/spicelib/parser/inp2dot.c, * src/spicelib/parser/inpdoopt.c: whitespace 2013-07-28 rlar * src/frontend/shyu.c, * src/frontend/spiceif.c, * src/include/ngspice/fteext.h, * src/spicelib/parser/inp2dot.c, * src/spicelib/parser/inpapnam.c, * src/spicelib/parser/inpdoopt.c: ft_find_analysis_parm(), change signature 2013-07-28 rlar * src/frontend/shyu.c, * src/frontend/spiceif.c, * src/spicelib/parser/inp2dot.c, * src/spicelib/parser/inpapnam.c, * src/spicelib/parser/inpdoopt.c: use type `IFparm' to abbreviate some expressions 2013-07-28 rlar * src/frontend/spiceif.c: if_getstat(), rewrite 2013-07-27 rlar * src/frontend/shyu.c, * src/frontend/spiceif.c, * src/include/ngspice/fteext.h, * src/spicelib/parser/inp2dot.c, * src/spicelib/parser/inpapnam.c, * src/spicelib/parser/inpdoopt.c: abstraction, new function `ft_find_analysis_parm()' 2013-07-27 rlar * src/frontend/shyu.c, * src/frontend/spiceif.c, * src/include/ngspice/fteext.h, * src/spicelib/parser/inp2dot.c, * src/spicelib/parser/inpdoopt.c: abstraction, new function `ft_find_analysis()' 2013-07-27 h_vogt * src/frontend/numparam/xpressn.c: bug fix, `#248 Subcircuit call cannot have a node with same name as the subcircuit' reported by Henrik Forstén http://sourceforge.net/p/ngspice/bugs/248/ 2013-07-27 h_vogt * BUGS: ./BUGS, update the list of known bugs 2013-07-26 h_vogt * src/spicelib/devices/vsrc/vsrc.c: bug fix, `#250 "<>" in op analysis' http://sourceforge.net/p/ngspice/bugs/250/ 2013-07-24 rlar * src/frontend/com_measure2.c, * src/frontend/com_sysinfo.c, * src/frontend/spiceif.c, * src/maths/ni/niiter.c, * src/sharedspice.c, * src/spicelib/analysis/dcpss.c, * src/spicelib/devices/cktinit.c, * src/spicelib/parser/inpgmod.c: cleanup some extra parentheses 2013-07-24 rlar * src/frontend/control.c, * src/spicelib/analysis/cktsens.c, * src/spicelib/analysis/dctrcurv.c, * src/spicelib/devices/asrc/asrcconv.c, * src/spicelib/devices/mos3/mos3dset.c, * src/spicelib/devices/mos9/mos9dset.c, * src/spicelib/parser/inp2dot.c, * src/spicelib/parser/inpapnam.c: cleanup some line wraps 2013-07-24 rlar * src/spicelib/parser/inpdoopt.c: inpdoopt.c, bug fix, `i' incremented twice when searching for "options" 2013-07-20 rlar * src/spicelib/parser/inpdomod.c: minor, prepare for automatic indentation 2013-07-20 rlar * src/ciderlib/input/boundary.c, * src/ciderlib/input/contact.c, * src/ciderlib/input/domain.c, * src/ciderlib/input/doping.c, * src/ciderlib/input/dopset.c, * src/ciderlib/input/electrod.c, * src/ciderlib/input/material.c, * src/ciderlib/input/mesh.c, * src/ciderlib/input/method.c, * src/ciderlib/input/mobility.c, * src/ciderlib/input/models.c, * src/ciderlib/input/optionsc.c, * src/ciderlib/input/output.c, * src/include/ngspice/numcards.h, * src/spicelib/parser/inpgmod.c: ciderlib, proper types for newCard(), setCardParm(), askCardQuest() 2013-07-18 rlar * src/ciderlib/input/bdryset.c, * src/ciderlib/input/contset.c, * src/ciderlib/input/domnset.c, * src/ciderlib/input/dopset.c, * src/ciderlib/input/elctset.c, * src/ciderlib/input/matlset.c, * src/ciderlib/input/meshset.c, * src/ciderlib/input/mobset.c, * src/ciderlib/input/modlset.c, * src/ciderlib/input/outpset.c, * src/ciderlib/oned/oneadmit.c, * src/ciderlib/oned/onecond.c, * src/ciderlib/oned/onecont.c, * src/ciderlib/oned/onedopng.c, * src/ciderlib/oned/onemesh.c, * src/ciderlib/oned/oneproj.c, * src/ciderlib/oned/onesetup.c, * src/ciderlib/oned/onesolve.c, * src/ciderlib/support/geominfo.c, * src/ciderlib/support/globals.c, * src/ciderlib/support/mater.c, * src/ciderlib/support/suprem.c, * src/ciderlib/twod/twoadmit.c, * src/ciderlib/twod/twoaval.c, * src/ciderlib/twod/twocond.c, * src/ciderlib/twod/twocont.c, * src/ciderlib/twod/twocurr.c, * src/ciderlib/twod/twodopng.c, * src/ciderlib/twod/twoelect.c, * src/ciderlib/twod/twofield.c, * src/ciderlib/twod/twomesh.c, * src/ciderlib/twod/twoncont.c, * src/ciderlib/twod/twopcont.c, * src/ciderlib/twod/twoprint.c, * src/ciderlib/twod/twoproj.c, * src/ciderlib/twod/tworead.c, * src/ciderlib/twod/twosetbc.c, * src/ciderlib/twod/twosetup.c, * src/ciderlib/twod/twosolve.c, * src/include/ngspice/macros.h, * src/spicelib/devices/nbjt/nbjtset.c, * src/spicelib/devices/nbjt/nbjttemp.c, * src/spicelib/devices/nbjt2/nbt2set.c, * src/spicelib/devices/nbjt2/nbt2temp.c, * src/spicelib/devices/ndev/ndevset.c, * src/spicelib/devices/ndev/ndevtemp.c, * src/spicelib/devices/numd/numdset.c, * src/spicelib/devices/numd/numdtemp.c, * src/spicelib/devices/numd2/nud2set.c, * src/spicelib/devices/numd2/nud2temp.c, * src/spicelib/devices/numos/nummset.c, * src/spicelib/devices/numos/nummtemp.c: drop `NIL' macro 2013-07-16 rlar * src/include/ngspice/memory.h, * src/spicelib/parser/inppas3.c: memory.h, polish macros 2013-07-18 Henrik Forstén * src/misc/dstring.c: dstring_append_char(), rewrite 2013-07-17 rlar * src/spicelib/analysis/cktmcrt.c: CKTmodCrt(), cleanup 2013-07-17 rlar * src/spicelib/analysis/cktmcrt.c: CKTmodCrt(), cleanup, always assign to `*modfast' for all invocations of CKTmodCrt() alias newModel() the following is true (modfast != NULL) && (*modfast == NULL) see (grep "git --no-pager grep -nH -e 'CKTmodCrt\\|newModel'") 2013-07-17 rlar * src/frontend/spiceif.c, * src/include/ngspice/inpdefs.h, * src/spicelib/parser/inpgmod.c, * src/spicelib/parser/inpmkmod.c, * src/xspice/mif/mifgetmod.c: drop `INPmodUsed' which is redundant to `INPmodfast' 2013-07-07 rlar * src/spicelib/analysis/cktdltm.c: nghash_delete() models and instances in CKTdltMod() 2013-07-17 rlar * src/tclspice.c: CKTfndMod(), cleanup 2013-07-17 rlar * src/frontend/spiceif.c, * src/spicelib/analysis/cktmcrt.c, * src/spicelib/devices/urc/urcsetup.c, * src/tclspice.c: CKTfndMod(), cleanup 2013-07-17 rlar * src/frontend/spiceif.c, * src/include/ngspice/cktdefs.h, * src/include/ngspice/ifsim.h, * src/spicelib/analysis/cktfndm.c, * src/spicelib/analysis/cktmcrt.c, * src/spicelib/devices/urc/urcsetup.c, * src/tclspice.c: CKTfndMod(), drop unused arguments `type' and `modfast' 2013-07-17 rlar * src/frontend/spiceif.c, * src/include/ngspice/cktdefs.h, * src/spicelib/analysis/cktdest.c, * src/spicelib/analysis/cktfndm.c, * src/spicelib/analysis/cktmcrt.c, * src/spicelib/devices/cktinit.c: CKTfndMod(), use a hashtable 2013-07-17 rlar * src/frontend/spiceif.c, * src/spicelib/analysis/cktmcrt.c, * src/spicelib/devices/urc/urcsetup.c, * src/tclspice.c: CKTfndMod(), cleanup 2013-07-17 rlar * src/frontend/spiceif.c, * src/include/ngspice/cktdefs.h, * src/include/ngspice/ifsim.h, * src/spicelib/analysis/cktfndm.c, * src/spicelib/analysis/cktmcrt.c, * src/spicelib/devices/urc/urcsetup.c, * src/tclspice.c: CKTfndMod(), dont pass the `type' argument by reference any more 2013-07-17 rlar * src/frontend/spiceif.c, * src/spicelib/analysis/cktmcrt.c, * src/spicelib/devices/urc/urcsetup.c: CKTfndMod(), cleanup 2013-07-17 rlar * src/frontend/spiceif.c, * src/spicelib/analysis/cktmcrt.c, * src/spicelib/devices/urc/urcsetup.c, * src/tclspice.c: CKTfndMod(), unuse the `type' argument 2013-07-17 rlar * src/spicelib/analysis/cktfndm.c: CKTfndMod(), this wont happen any more and `*type' will be overwritten anyway 2013-07-17 rlar * src/frontend/spiceif.c, * src/spicelib/analysis/cktmcrt.c, * src/spicelib/devices/urc/urcsetup.c: CKTfndMod(), rewrite error expressions 2013-07-17 rlar * src/frontend/spiceif.c, * src/include/ngspice/cktdefs.h, * src/include/ngspice/ifsim.h, * src/spicelib/analysis/cktfndm.c, * src/spicelib/analysis/cktmcrt.c, * src/spicelib/devices/urc/urcsetup.c, * src/tclspice.c: CKTfndMod(), return the found model instead of error code 2013-07-17 rlar * src/frontend/spiceif.c, * src/spicelib/analysis/cktmcrt.c, * src/spicelib/devices/urc/urcsetup.c, * src/tclspice.c: CKTfndMod(), express error return value outside of this function 2013-07-17 rlar * src/spicelib/analysis/cktfndm.c: CKTfndMod(), this will never happen, when this series of rewrites is finished 2013-07-17 rlar * src/frontend/spiceif.c, * src/spicelib/analysis/cktmcrt.c, * src/spicelib/devices/urc/urcsetup.c, * src/tclspice.c: CKTfndMod(), assert some facts 2013-07-17 rlar * src/frontend/spiceif.c, * src/spicelib/analysis/tfanal.c, * src/spicelib/devices/cktfinddev.c, * src/tclspice.c, * src/unsupported/snstart.c: CKTfndDev(), cleanup 2013-07-17 rlar * src/frontend/spiceif.c, * src/include/ngspice/cktdefs.h, * src/include/ngspice/ifsim.h, * src/spicelib/analysis/noisean.c, * src/spicelib/analysis/tfanal.c, * src/spicelib/devices/cktcrte.c, * src/spicelib/devices/cktfinddev.c, * src/spicelib/devices/ind/mutsetup.c, * src/spicelib/parser/inpaname.c, * src/tclspice.c, * src/unsupported/snstart.c: CKTfndDev(), drop `type' and `fast' argument 2013-07-17 rlar * src/frontend/spiceif.c, * src/spicelib/analysis/noisean.c, * src/spicelib/analysis/tfanal.c, * src/spicelib/devices/cktcrte.c, * src/tclspice.c, * src/unsupported/snstart.c: CKTfndDev(), rewrite invocations where `*fast == NULL' 2013-07-17 rlar * src/spicelib/devices/ind/mutsetup.c, * src/spicelib/parser/inpaname.c: CKTfndDev(), rewrite invocations where `type == NULL' 2013-07-04 rlar * src/frontend/spiceif.c, * src/spicelib/parser/inpaname.c, * src/tclspice.c, * src/unsupported/snstart.c: CKTfndDev(), unuse the type argument 2013-07-17 rlar * src/frontend/spiceif.c, * src/spicelib/analysis/noisean.c, * src/spicelib/analysis/tfanal.c, * src/spicelib/devices/cktcrte.c, * src/spicelib/devices/ind/mutsetup.c, * src/spicelib/parser/inpaname.c, * src/tclspice.c, * src/unsupported/snstart.c: CKTfndDev(), rewrite error expressions 2013-07-04 rlar * src/frontend/spiceif.c, * src/include/ngspice/cktdefs.h, * src/include/ngspice/ifsim.h, * src/spicelib/analysis/noisean.c, * src/spicelib/analysis/tfanal.c, * src/spicelib/devices/cktcrte.c, * src/spicelib/devices/cktfinddev.c, * src/spicelib/devices/ind/mutsetup.c, * src/spicelib/parser/inpaname.c, * src/tclspice.c, * src/unsupported/snstart.c: CKTfndDev(), return the found instance instead of error code now if (fast != NULL) CKTfndDev(,,fast, ) is equivalent to *fast = CKTfndDev(,,fast, ) 2013-07-17 rlar * src/frontend/spiceif.c, * src/spicelib/analysis/noisean.c, * src/spicelib/analysis/tfanal.c, * src/spicelib/devices/cktcrte.c, * src/spicelib/devices/ind/mutsetup.c, * src/spicelib/parser/inpaname.c, * src/tclspice.c, * src/unsupported/snstart.c: CKTfndDev(), express error return value outside of this function if (fast != NULL) then err = CKTfndDev(,, fast, ); is equivalent to err = CKTfndDev(,, fast, ); err = *fast ? OK : E_NODEV; 2013-07-17 rlar * src/frontend/spiceif.c, * src/spicelib/analysis/noisean.c, * src/spicelib/analysis/tfanal.c, * src/spicelib/devices/cktcrte.c, * src/spicelib/devices/ind/mutsetup.c, * src/spicelib/parser/inpaname.c, * src/tclspice.c, * src/unsupported/snstart.c: CKTfndDev(), assert some facts 2013-06-30 rlar * src/spicelib/analysis/noisean.c, * src/spicelib/analysis/tfanal.c, * src/spicelib/devices/ind/mutsetup.c: CKTfndDev(), unuse `type' argument 2013-06-30 rlar * src/spicelib/devices/cktcrte.c: CKTfndDev(), cleanup usage of `type' argument 2013-06-30 rlar * src/spicelib/devices/cktcrte.c, * src/spicelib/devices/ind/mutsetup.c: CKTfndDev(), cleanup usage of impossible error codes 2013-06-30 rlar * src/frontend/spiceif.c, * src/include/ngspice/cktdefs.h, * src/include/ngspice/ifsim.h, * src/spicelib/analysis/noisean.c, * src/spicelib/analysis/tfanal.c, * src/spicelib/devices/cktcrte.c, * src/spicelib/devices/cktfinddev.c, * src/spicelib/devices/ind/mutsetup.c, * src/spicelib/parser/inpaname.c, * src/tclspice.c, * src/unsupported/snstart.c: CKTfndDev(), drop unused argument `modfast' 2013-07-17 Henrik Forstén * src/spicelib/devices/cktfinddev.c: CKTfndDev(), rewrite 2013-07-17 Henrik Forstén * src/include/ngspice/cktdefs.h, * src/spicelib/analysis/cktdest.c, * src/spicelib/devices/cktcrte.c, * src/spicelib/devices/cktfinddev.c, * src/spicelib/devices/cktinit.c: CKTfndDev(), use a hashtable to speed up this function 2013-07-16 h_vogt * src/frontend/subckt.c: subckt.c: `A' device , no special translation when nodename starts with `v' 2013-07-14 rlar * src/spicelib/analysis/dcpss.c, * src/spicelib/analysis/dctran.c: simplify #ifdef nesting #4/4 2013-07-14 rlar * src/spicelib/analysis/dcpss.c, * src/spicelib/analysis/dctran.c: simplify #ifdef nesting #3/4 2013-07-14 rlar * src/spicelib/analysis/dcpss.c, * src/spicelib/analysis/dctran.c: simplify #ifdef nesting #2/4 2013-07-14 rlar * src/spicelib/analysis/dcpss.c, * src/spicelib/analysis/dctran.c: simplify #ifdef nesting #1/4 2013-07-14 h_vogt * src/include/ngspice/sharedspice.h, * src/sharedspice.c: sharedspice.c, .h: fcn to initialize Sync, fcn to set breakpoint, callback fcn to read vsrc external inputs 2013-07-14 h_vogt * src/spicelib/analysis/dctran.c: shared ngspice, dctran.c fcn to add breakpoints 2013-07-14 h_vogt * src/spicelib/devices/vsrc/vsrc.c, * src/spicelib/devices/vsrc/vsrcacct.c, * src/spicelib/devices/vsrc/vsrcdefs.h, * src/spicelib/devices/vsrc/vsrcload.c, * src/spicelib/devices/vsrc/vsrcpar.c: shared ngspice: external voltage source 2013-07-14 rlar * src/spicelib/analysis/acan.c, * src/spicelib/analysis/cktsens.c, * src/spicelib/analysis/distoan.c, * src/spicelib/analysis/noisean.c: cleanup OUTattributes() invocations checked for object file invariance 2013-07-14 rlar * src/frontend/spiceif.c, * src/spicelib/analysis/acan.c, * src/spicelib/analysis/cktmapn.c, * src/spicelib/analysis/cktmkcur.c, * src/spicelib/analysis/cktmkvol.c, * src/spicelib/analysis/cktnoise.c, * src/spicelib/analysis/cktsens.c, * src/spicelib/analysis/dcpss.c, * src/spicelib/analysis/dctran.c, * src/spicelib/analysis/dctrcurv.c, * src/spicelib/analysis/distoan.c, * src/spicelib/analysis/noisean.c, * src/spicelib/analysis/pzan.c, * src/spicelib/analysis/tfanal.c, * src/spicelib/parser/inp2c.c, * src/spicelib/parser/inp2d.c, * src/spicelib/parser/inp2j.c, * src/spicelib/parser/inp2l.c, * src/spicelib/parser/inp2o.c, * src/spicelib/parser/inp2r.c, * src/spicelib/parser/inp2s.c, * src/spicelib/parser/inp2u.c, * src/spicelib/parser/inp2w.c, * src/spicelib/parser/inp2z.c: cleanup IFnewUid() invocations checked for object file invariance 2013-07-14 rlar * src/frontend/spiceif.c, * src/spicelib/analysis/acan.c, * src/spicelib/analysis/cktsens.c, * src/spicelib/analysis/dcop.c, * src/spicelib/analysis/dcpss.c, * src/spicelib/analysis/dctran.c, * src/spicelib/analysis/dctrcurv.c, * src/spicelib/analysis/distoan.c, * src/spicelib/analysis/noisean.c, * src/spicelib/analysis/pzan.c, * src/spicelib/analysis/tfanal.c: cleanup OUTpBeginPlot() invocations checked for object file invariance 2013-07-14 rlar * src/maths/sparse/spsmp.c, * src/spicelib/parser/ifeval.c, * src/xspice/icm/xtradev/potentiometer/cfunc.mod: cleanup stuttered semicolon 2013-07-14 rlar * src/spicelib/analysis/noisean.c: noisean.c, cleanup comment 2013-07-14 rlar * src/include/ngspice/inpmacs.h: polish `PARSECALL' macro checked for object file invariance 2013-07-14 rlar * src/include/ngspice/inpmacs.h, * src/spicelib/parser/inp2d.c, * src/spicelib/parser/inp2m.c, * src/spicelib/parser/inp2p.c, * src/spicelib/parser/inp2q.c, * src/spicelib/parser/inp2y.c, * src/spicelib/parser/inp2z.c, * src/spicelib/parser/inppas3.c: polish `LITERR' macro checked for object file invariance 2013-07-14 rlar * src/include/ngspice/inpmacs.h, * src/spicelib/parser/inp2dot.c, * src/spicelib/parser/inp2p.c, * src/spicelib/parser/inp2r.c, * src/spicelib/parser/inp2y.c: polish `GCA' macro checked for object file invariance 2013-07-14 rlar * src/include/ngspice/inpmacs.h, * src/spicelib/parser/inp2m.c, * src/spicelib/parser/inp2p.c, * src/spicelib/parser/inp2y.c, * src/spicelib/parser/inppas3.c, * src/xspice/mif/mif_inp2.c: polish `IFC' macro checked for object file invariance, different code for inppas3.c, seems to be ok 2013-07-14 rlar * src/include/ngspice/macros.h, * src/spicelib/analysis/pzan.c: polish `MERROR' macro checked for object file invariance 2013-07-12 h_vogt * src/misc/misc_time.c, * src/misc/misc_time.h: misc_time.c: make timediff always available when timeb.h is found 2013-07-07 dwarning * src/spicelib/parser/inp2y.c: inp2y.c, TXL bug fix reported by John Reuben P on the ngspice-users mailing list need to insert instance names into the symbol table with INPinsert() 2013-06-30 rlar * src/frontend/spiceif.c, * src/include/ngspice/cktdefs.h, * src/include/ngspice/ifsim.h, * src/spicelib/analysis/noisean.c, * src/spicelib/analysis/tfanal.c, * src/spicelib/devices/cktcrte.c, * src/spicelib/devices/cktfinddev.c, * src/spicelib/devices/ind/mutsetup.c, * src/spicelib/parser/inpaname.c, * src/tclspice.c, * src/unsupported/snstart.c: CKTfndDev(), drop unused argument `modname' which is always NULL 2013-06-30 rlar * src/spicelib/analysis/noisean.c, * src/spicelib/analysis/tfanal.c, * src/spicelib/devices/ind/mutsetup.c, * src/spicelib/parser/inpaname.c, * src/unsupported/snstart.c: cleanup CKTfndDev(), findInstance() invocation 2013-06-30 rlar * src/frontend/spiceif.c: unify, use `ckt' instead of `ck' 2013-06-30 rlar * src/spicelib/devices/cktfinddev.c: CKTfndDev(), #6/6, cleanup 2013-06-30 rlar * src/spicelib/devices/cktfinddev.c: CKTfndDev(), #5/6, cleanup 2013-06-30 rlar * src/spicelib/devices/cktfinddev.c: CKTfndDev(), #4/6, cleanup 2013-06-30 rlar * src/spicelib/devices/cktfinddev.c: CKTfndDev(), #3/6, cleanup 2013-06-30 rlar * src/spicelib/devices/cktfinddev.c: CKTfndDev(), #2/6, cleanup 2013-06-30 rlar * src/spicelib/devices/cktfinddev.c: CKTfndDev(), #1/6, whitespace 2013-06-30 rlar * src/spicelib/devices/cktfinddev.c: abstraction, new function `find_instance()' 2013-06-29 Henrik Forstén * src/frontend/numparam/spicenum.c: numparm, speedup modernizeex() for the common case 2013-06-29 Henrik Forstén * src/spicelib/parser/inp2c.c, * src/spicelib/parser/inp2i.c, * src/spicelib/parser/inp2l.c, * src/spicelib/parser/inp2r.c, * src/spicelib/parser/inp2v.c: search just once for basic device types 2013-06-29 Henrik Forstén * src/frontend/inpcom.c: inpcom.c: fix "sytax" spelling 2013-06-27 dwarning * src/frontend/inpcom.c: allow format like .5 in b-sources 2013-06-25 dwarning * src/spicelib/devices/mos1/mos1temp.c, * src/spicelib/devices/mos2/mos2temp.c, * src/spicelib/devices/mos3/mos3temp.c, * src/spicelib/devices/mos6/mos6temp.c, * src/spicelib/devices/mos9/mos9temp.c: devices/mos*: prevent NaN in sqrt for negative value of model parameter `PHI' 2013-06-24 Henrik Forstén * src/maths/misc/equality.c: rewrite AlmostEqualUlps() to avoid compiler warnings concerning `strict-aliasing' 2013-06-23 Henrik Forstén * src/spicelib/parser/inpsymt.c: inpsymt.c, use "Daniel J. Bernstein" hash function instead of a simple sum. just for note, there is a wealth of newer hash functions. For example "The FNV Non-Cryptographic Hash Algorithm" from http://tools.ietf.org/html/draft-eastlake-fnv-03 2013-06-22 rlar * src/spicelib/analysis/cktmknod.c: avoid `(IFuid) 0' cast 2013-06-22 rlar * src/spicelib/analysis/cktsgen.c: convert K&R function definitions to ansi style 2013-06-15 rlar * src/spicelib/analysis/cktpzstr.c: fix for automatic indention this part of > commit f9144f90b3e121ec866bf437e95ebf7aa8aa890e > Author: pnenzi > Date: Tue May 23 20:04:32 2000 +0000 > > Applied Widlok patch is hostile to automatic indention 2013-06-21 h_vogt * src/sharedspice.c: sharedspice.c: preliminary fixes: ftime() usage, prevent crash if controlled_exit from worker thread 2013-06-09 dwarning * src/spicelib/devices/res/res.c, * src/spicelib/devices/res/resdefs.h, * src/spicelib/devices/res/resmask.c, * src/spicelib/devices/res/resmpar.c, * src/spicelib/devices/res/resparam.c, * src/spicelib/devices/res/restemp.c: devices/res: use model parameter `r' and `res' as default for instances w/o value and set minimal resistor value to 1 mOhm 2013-06-09 dwarning * src/spicelib/devices/res/resmask.c, * src/spicelib/devices/res/resmpar.c, * src/spicelib/devices/res/resparam.c: devices/res: whitespace cleanup 2013-06-09 h_vogt * src/maths/ni/nicomcof.c: nicomcof.c: xmu used to calculate trap integration coefficient 2013-06-09 h_vogt * src/spicelib/analysis/cktop.c: cktop.c: indentation 2013-06-08 rlar * src/frontend/inpcom.c: inpcom.c, whitespace 2013-06-08 rlar * src/frontend/inpcom.c: inpcom.c, cleanup 2013-06-08 rlar * src/frontend/inpcom.c: inpcom.c, use strchr(,'\0') 2013-06-08 rlar * src/frontend/inpcom.c: inpcom.c, use better skip_back functions 2013-06-08 rlar * src/frontend/inpcom.c: inpcom.c, rewrite `chk_for_line_continuation()' 2013-06-08 rlar * src/frontend/inpcom.c: inpcom.c, introduce better skip_back functions 2013-06-08 rlar * src/frontend/inpcom.c: inpcom.c, minor cleanup 2013-06-07 rlar * src/frontend/inpcom.c: inpcom.c, rewrite `inp_fix_param_values()' 2013-06-07 rlar * src/frontend/inpcom.c: inpcom.c, cleanup 2013-06-07 rlar * src/frontend/inpcom.c: inpcom.c, cleanup `inp_add_params_to_subckt()' 2013-06-07 rlar * src/frontend/inpcom.c: inpcom.c, minor rewrites 2013-06-06 rlar * src/spicelib/devices/asrc/asrcset.c, * src/spicelib/devices/bjt/bjtsetup.c, * src/spicelib/devices/bsim1/b1set.c, * src/spicelib/devices/bsim2/b2set.c, * src/spicelib/devices/bsim3/b3set.c, * src/spicelib/devices/bsim3soi_dd/b3soiddset.c, * src/spicelib/devices/bsim3soi_fd/b3soifdset.c, * src/spicelib/devices/bsim3soi_pd/b3soipdset.c, * src/spicelib/devices/bsim3v0/b3v0set.c, * src/spicelib/devices/bsim3v1/b3v1set.c, * src/spicelib/devices/bsim3v32/b3v32set.c, * src/spicelib/devices/bsim4/b4set.c, * src/spicelib/devices/bsim4v4/b4v4set.c, * src/spicelib/devices/bsim4v5/b4v5set.c, * src/spicelib/devices/bsim4v6/b4v6set.c, * src/spicelib/devices/bsimsoi/b4soiset.c, * src/spicelib/devices/cap/capsetup.c, * src/spicelib/devices/cccs/cccsset.c, * src/spicelib/devices/ccvs/ccvsset.c, * src/spicelib/devices/cpl/cplsetup.c, * src/spicelib/devices/csw/cswsetup.c, * src/spicelib/devices/dio/diosetup.c, * src/spicelib/devices/hfet1/hfetsetup.c, * src/spicelib/devices/hfet2/hfet2setup.c, * src/spicelib/devices/hisim2/hsm2set.c, * src/spicelib/devices/hisimhv1/hsmhvset.c, * src/spicelib/devices/ind/indsetup.c, * src/spicelib/devices/ind/mutsetup.c, * src/spicelib/devices/jfet/jfetset.c, * src/spicelib/devices/jfet2/jfet2set.c, * src/spicelib/devices/ltra/ltraset.c, * src/spicelib/devices/mes/messetup.c, * src/spicelib/devices/mesa/mesasetup.c, * src/spicelib/devices/mos1/mos1set.c, * src/spicelib/devices/mos2/mos2set.c, * src/spicelib/devices/mos3/mos3set.c, * src/spicelib/devices/mos6/mos6set.c, * src/spicelib/devices/mos9/mos9set.c, * src/spicelib/devices/nbjt/nbjtset.c, * src/spicelib/devices/nbjt2/nbt2set.c, * src/spicelib/devices/ndev/ndevset.c, * src/spicelib/devices/numd/numdset.c, * src/spicelib/devices/numd2/nud2set.c, * src/spicelib/devices/numos/nummset.c, * src/spicelib/devices/res/ressetup.c, * src/spicelib/devices/soi3/soi3set.c, * src/spicelib/devices/sw/swsetup.c, * src/spicelib/devices/tra/trasetup.c, * src/spicelib/devices/txl/txlsetup.c, * src/spicelib/devices/vbic/vbicsetup.c, * src/spicelib/devices/vccs/vccsset.c, * src/spicelib/devices/vcvs/vcvsset.c, * src/spicelib/devices/vsrc/vsrcpzs.c, * src/spicelib/devices/vsrc/vsrcset.c, * src/xspice/mif/mifsetup.c: rewrite `TSTALLOC()' macro for auto indentation checked for object code invariance 2013-06-05 h_vogt * src/frontend/inp.c: inp.c: skip title line when searching for .if in dotifeval() 2013-06-05 rlar * src/frontend/inpcom.c: inpcom.c, abstraction, new function `find_assignment()' 2013-06-05 rlar * src/frontend/inpcom.c: inpcom.c, cleanup 2013-06-05 rlar * src/frontend/inpcom.c: inpcom.c, abstraction, new function inp_split_multi_param_lines() 2013-06-05 rlar * src/frontend/inpcom.c: inpcom.c, cleanup `inp_split_multi_param_lines()' 2013-06-03 dwarning * src/spicelib/devices/bsim4/b4.c, * src/spicelib/devices/bsim4/b4mask.c, * src/spicelib/devices/bsim4/b4mpar.c, * src/spicelib/devices/bsim4/b4set.c, * src/spicelib/devices/bsim4/bsim4def.h, * src/spicelib/devices/bsim4v5/b4v5.c, * src/spicelib/devices/bsim4v5/b4v5mask.c, * src/spicelib/devices/bsim4v5/b4v5mpar.c, * src/spicelib/devices/bsim4v5/b4v5set.c, * src/spicelib/devices/bsim4v5/bsim4v5def.h, * src/spicelib/devices/bsim4v6/b4v6.c, * src/spicelib/devices/bsim4v6/b4v6mask.c, * src/spicelib/devices/bsim4v6/b4v6mpar.c, * src/spicelib/devices/bsim4v6/b4v6set.c, * src/spicelib/devices/bsim4v6/bsim4v6def.h: add `rgeomod' as model parameter for bsim4 2013-06-02 dwarning * src/spicelib/parser/inpptree.c: parser/*.c: correct the `pwr' derivative 2013-06-02 rlar * src/frontend/inpcom.c: inpcom.c, local scope for `newcard' 2013-06-02 h_vogt * src/frontend/inpcom.c: inpcom.c: G source, fix a bug and add `m' to TABLE 2013-06-02 rlar * src/frontend/inpcom.c: inpcom.c, rewrite `append' of some decks 2013-06-02 rlar * src/frontend/inpcom.c: inpcom.c, drop unused assignment 2013-06-02 rlar * src/frontend/inpcom.c: inpcom.c, rewrite deck allocation 2013-06-02 rlar * src/frontend/inpcom.c: inpcom.c, local scope for some vars 2013-06-02 h_vogt * src/frontend/inpcom.c: inpcom.c: multiplier `m' for behavioral G source 2013-06-01 h_vogt * src/frontend/inp.c, * src/frontend/inpcom.c: inp.c, inpcom.c: implement a very basic .if/.else block 2013-05-31 dwarning * src/include/ngspice/inpptree.h, * src/spicelib/parser/ifeval.c, * src/spicelib/parser/inpptree.c, * src/spicelib/parser/inpxx.h, * src/spicelib/parser/ptfuncs.c: parser/*.c: implement a signed power function `pwr' for controlled sources 2013-05-30 h_vogt * src/frontend/subckt.c: subckt.c: prevent crash if 5/6 MOS nodes w/o L, W 2013-05-30 h_vogt * src/frontend/subckt.c: subckt.c: MOS model in subckt w/o L, W 2013-05-30 rlar * src/frontend/inpcom.c: inpcom.c, reorder some statements 2013-05-30 rlar * src/frontend/inpcom.c: inpcom.c, local scope for `str' 2013-05-30 rlar * src/frontend/inpcom.c: inpcom.c, local scope for `global_card' 2013-05-30 rlar * src/frontend/inpcom.c: inpcom.c, drop variable `prev' 2013-05-30 rlar * src/frontend/inpcom.c: inpcom.c, get rid of the global `global' 2013-05-30 rlar * src/frontend/inpcom.c: inpcom.c, rewrite subckt_w_params business 2013-05-30 rlar * src/frontend/inpcom.c: inpcom.c, execute inp_fix_for_numparam() just once when call_depth == 0 2013-05-30 h_vogt * src/spicelib/devices/vccs/vccs.c, * src/spicelib/devices/vccs/vccsask.c, * src/spicelib/devices/vccs/vccsdefs.h, * src/spicelib/devices/vccs/vccspar.c: devices/vccs: implement multiplier `m' (G source) 2013-05-30 h_vogt * src/spicelib/devices/cccs/cccs.c, * src/spicelib/devices/cccs/cccsask.c, * src/spicelib/devices/cccs/cccsdefs.h, * src/spicelib/devices/cccs/cccspar.c: devices/cccs: implement multiplier `m' (F source) 2013-05-29 rlar * src/frontend/inpcom.c: inpcom.c, drop superflous initialisation 2013-05-29 rlar * src/frontend/inpcom.c: inpcom.c, improve readability of skip_back_non_ws() and skip_back_ws() 2013-05-29 rlar * src/frontend/inpcom.c: inpcom.c, cleanup 2013-05-29 rlar * src/frontend/inpcom.c: inpcom.c, drop some local variables 2013-05-29 rlar * src/frontend/inpcom.c: inpcom.c, simplify error processing 2013-05-26 rlar * src/frontend/inpcom.c: inpcom.c, simplify tfree() usage 2013-05-29 rlar * src/frontend/inpcom.c: inpcom.c, local scope for some variables 2013-05-29 Francesco Lannutti * src/spicelib/devices/vcvs/vcvsset.c: vcvsset.c, cleanup order of TSTALLOC() invocations 2013-05-26 dwarning * src/spicelib/parser/inpptree.c, * src/spicelib/parser/ptfuncs.c: inpptree.c, ptfuncs.c: whitespace cleanup 2013-05-26 rlar * src/frontend/inpcom.c: inpcom.c, cleanup deck loops #4/4 2013-05-26 rlar * src/frontend/inpcom.c: inpcom.c, cleanup deck loops #3/4 2013-05-26 rlar * src/frontend/inpcom.c: inpcom.c, cleanup deck loops #2/4 2013-05-26 rlar * src/frontend/inpcom.c: inpcom.c, cleanup deck loops #1/4 2013-05-26 h_vogt * src/frontend/numparam/numparam.h, * src/frontend/numparam/xpressn.c: xpressn.c: reduce number of (forbidden) keywords to what is actually used 2013-05-26 rlar * src/frontend/inpcom.c: inpcom.c, inp_chk_for_multi_in_vcvs() shrink scope of variables 2013-05-26 rlar * src/frontend/inpcom.c: inpcom.c, cleanup 2013-05-26 rlar * src/frontend/inpcom.c: inpcom.c, bug fix (incorrect check for mal formed line) 2013-05-26 rlar * src/frontend/inpcom.c: inpcom.c, cleanup 2013-05-26 rlar * src/frontend/inpcom.c: inpcom.c, simple cleanups 2013-05-25 rlar * src/frontend/inpcom.c: inpcom.c, change semantics of skip_back_non_ws() and skip_back_ws() 2013-05-25 rlar * src/frontend/inpcom.c: inpcom.c, unify skip_back() usage #2/2 2013-05-25 rlar * src/frontend/inpcom.c: inpcom.c, unify skip_back() usage #1/2 2013-05-25 rlar * src/frontend/inpcom.c: inpcom.c, cleanup inp_get_func_from_line() 2013-05-25 rlar * src/frontend/inpcom.c: inpcom.c, drop artifact, now this isn't any more a bug 2013-05-24 rlar * src/frontend/inpcom.c: inpcom.c, use a list to store the `.func' lookup table 2013-05-24 rlar * src/frontend/inpcom.c: inpcom.c, use a `rib cage' to store the .subckt lexical scoping of `.func' 2013-05-24 rlar * src/frontend/inpcom.c: inpcom.c, cleanup inp_expand_macros_in_deck() recursion 2013-05-23 dwarning * src/spicelib/devices/bsim3/b3.c, * src/spicelib/devices/bsim3/b3mask.c, * src/spicelib/devices/bsim3/b3mpar.c, * src/spicelib/devices/bsim3/b3set.c, * src/spicelib/devices/bsim3/bsim3def.h, * src/spicelib/devices/bsim3v32/b3v32.c, * src/spicelib/devices/bsim3v32/b3v32mask.c, * src/spicelib/devices/bsim3v32/b3v32mpar.c, * src/spicelib/devices/bsim3v32/b3v32set.c, * src/spicelib/devices/bsim3v32/bsim3v32def.h: devices/bsim3, devices/bsim3v32: add `nqsmod' as model parameter 2013-05-23 rlar * src/frontend/inpcom.c: bug fix, .func expansion for nested .subckt 2013-05-23 rlar * src/frontend/inpcom.c: inpcom.c, cleanup some while(struct line * ...) loops 2013-05-22 dwarning * src/spicelib/devices/hisimhv1/hsmhvset.c: devices/hisimhv1: correct the `qme2' rangecheck 2013-05-21 dwarning * src/spicelib/devices/bsim3/b3check.c, * src/spicelib/devices/bsim3/b3ld.c, * src/spicelib/devices/bsim3/b3mpar.c, * src/spicelib/devices/bsim3/b3temp.c: devices/bsim3: whitespace cleanup 2013-05-21 dwarning * src/spicelib/devices/bsim3/b3.c, * src/spicelib/devices/bsim3/b3mask.c, * src/spicelib/devices/bsim3/b3mpar.c, * src/spicelib/devices/bsim3/b3set.c, * src/spicelib/devices/bsim3/b3temp.c: devices/bsim3: complete the ACM parameter set with xl and xw 2013-05-21 dwarning * src/spicelib/devices/bsim3/b3.c, * src/spicelib/devices/bsim3/b3ask.c, * src/spicelib/devices/bsim3/b3check.c, * src/spicelib/devices/bsim3/b3ld.c, * src/spicelib/devices/bsim3/b3mask.c, * src/spicelib/devices/bsim3/b3mpar.c, * src/spicelib/devices/bsim3/b3par.c, * src/spicelib/devices/bsim3/b3set.c, * src/spicelib/devices/bsim3/b3temp.c, * src/spicelib/devices/bsim3/bsim3def.h: devices/bsim3: apply Area Calculation Method (ACM) to the bsim3v3.3 model 2013-05-21 dwarning * src/spicelib/devices/bsim3/b3temp.c: devices/bsim3: reposition sourceConductance block 2013-05-16 dwarning * src/spicelib/devices/bsim3/b3ld.c: devices/bsim3: reposition DrainSatCurrent block 2013-05-20 h_vogt * src/spicelib/devices/hisim2/hsm2set.c, * src/spicelib/devices/hisimhv1/hsmhvset.c: hsm2set, hsmhvset.c: error message 2013-05-20 h_vogt * src/spicelib/analysis/dctran.c: dctran.c, bug fix `#235 When Using .TRAN analysis with UIC, ...' add a breakpoint for UIC #235 When Using .TRAN analysis with UIC, unconnected pulse bug http://sourceforge.net/p/ngspice/bugs/235/ 2013-05-20 h_vogt * README.adms: README.adms Warning about outdated information 2013-05-20 Francesco Lannutti * src/spicelib/devices/vccs/vccsask.c, * src/spicelib/devices/vccs/vccsdefs.h, * src/spicelib/devices/vccs/vccsdel.c, * src/spicelib/devices/vccs/vccsdest.c, * src/spicelib/devices/vccs/vccsload.c, * src/spicelib/devices/vccs/vccsmdel.c, * src/spicelib/devices/vccs/vccspar.c, * src/spicelib/devices/vccs/vccspzld.c, * src/spicelib/devices/vccs/vccssacl.c, * src/spicelib/devices/vccs/vccsset.c, * src/spicelib/devices/vccs/vccssld.c, * src/spicelib/devices/vccs/vccssprt.c, * src/spicelib/devices/vccs/vccssset.c: unify, use #include "vccsext.h" the same way as in all other models 2013-05-20 Francesco Lannutti * configure.ac: configure.ac, cleanup `WARNING: PSS analysis enabled' 2013-05-19 rlar * src/frontend/inpcom.c: inpcom.c, cleanup 2013-05-19 rlar * src/frontend/inpcom.c: inpcom.c, abstraction, find_subckt_w_params() 2013-05-19 rlar * src/frontend/inpcom.c: inpcom.c, cleanup, emphasize a search in subckt_w_params[] 2013-05-19 rlar * src/frontend/inpcom.c: inpcom.c, abstraction, new_subckt_w_params() 2013-05-19 rlar * src/frontend/inpcom.c: inpcom.c, abstraction, new_lib() 2013-05-18 rlar * src/frontend/inpcom.c: inpcom.c, cleanup usage of free_function() 2013-05-18 rlar * src/frontend/inpcom.c: inpcom.c, abstraction, free_function() 2013-05-18 rlar * src/frontend/inpcom.c: inpcom.c, think in terms of struct functions instead of an integer 2013-05-18 rlar * src/frontend/inpcom.c: inpcom.c, emphasize a potential bug 2013-05-18 rlar * src/frontend/inpcom.c: inpcom.c, think in terms of struct library instead of an integer 2013-05-18 rlar * src/frontend/inpcom.c: inpcom.c, collect globals into a struct 2013-05-18 rlar * src/frontend/inpcom.c: inpcom.c, rename N_FUNCS and N_LIBRARY 2013-05-18 h_vogt * src/spicelib/analysis/traninit.c: traninit.c, cleanup indentation 2013-05-18 h_vogt * src/spicelib/devices/bsim4v4/b4v4getic.c: b4v4getic.c, cleanup indentation 2013-05-18 rlar * src/frontend/inpcom.c: inpcom.c: rewrite .lib processing 2013-05-18 h_vogt * src/frontend/inpcom.c: inpcom.c: debug output streamlined 2013-05-18 h_vogt * src/frontend/inpcom.c: inpcom.c: larger array size, debug output modified 2013-05-17 rlar * src/frontend/inpcom.c: inpcom.c: array bounds check 2013-05-16 dwarning * src/include/ngspice/devdefs.h, * src/spicelib/devices/bsim3v32/b3v32ld.c, * src/spicelib/devices/bsim3v32/b3v32set.c, * src/spicelib/devices/bsim3v32/b3v32temp.c, * src/spicelib/devices/bsim3v32/bsim3v32def.h: devices/bsim3v32: whitespace cleanup 2013-05-16 dwarning * src/include/ngspice/devdefs.h, * src/spicelib/devices/bsim3v32/b3v32.c, * src/spicelib/devices/bsim3v32/b3v32ask.c, * src/spicelib/devices/bsim3v32/b3v32check.c, * src/spicelib/devices/bsim3v32/b3v32ld.c, * src/spicelib/devices/bsim3v32/b3v32mask.c, * src/spicelib/devices/bsim3v32/b3v32mpar.c, * src/spicelib/devices/bsim3v32/b3v32par.c, * src/spicelib/devices/bsim3v32/b3v32set.c, * src/spicelib/devices/bsim3v32/b3v32temp.c, * src/spicelib/devices/bsim3v32/bsim3v32def.h, * src/spicelib/devices/devsup.c: devices/bsim3v32: apply Area Calculation Method (ACM) to the bsim3v3.2.4 model 2013-05-16 dwarning * src/spicelib/devices/bsim3v32/b3v32ld.c: devices/bsim3v32: reposition DrainSatCurrent block 2013-05-16 dwarning * src/spicelib/devices/bsim3v32/b3v32temp.c: devices/bsim3v32: remove duplicate `SourceSatCurrent' block 2013-05-16 dwarning * src/spicelib/devices/bsim3v32/b3v32temp.c: devices/bsim3v32: single out duplicate `SourceSatCurrent' block 2013-05-16 dwarning * src/spicelib/devices/bsim3v32/b3v32temp.c: devices/bsim3v32: remove duplicate `DrainSatCurrent' block 2013-05-16 dwarning * src/spicelib/devices/bsim3v32/b3v32temp.c: devices/bsim3v32: single out duplicate `DrainSatCurrent' block 2013-05-15 dwarning * src/spicelib/devices/bsim3v32/b3v32.c: devices/bsim3v32: correct `rdc' and `rsc' definition 2013-05-15 h_vogt * src/include/ngspice/defines.h, * src/winmain.c, * src/winmain.h: defines.h, winmain.c, .h: fix --with-wingui for CYGWIN 2013-05-15 h_vogt * src/frontend/inpcom.c: inpcom.c: disable `m' for E, H 2013-05-11 dwarning * src/spicelib/devices/bsim3v32/b3v32.c, * src/spicelib/devices/bsim3v32/b3v32acld.c, * src/spicelib/devices/bsim3v32/b3v32ask.c, * src/spicelib/devices/bsim3v32/b3v32check.c, * src/spicelib/devices/bsim3v32/b3v32cvtest.c, * src/spicelib/devices/bsim3v32/b3v32del.c, * src/spicelib/devices/bsim3v32/b3v32dest.c, * src/spicelib/devices/bsim3v32/b3v32getic.c, * src/spicelib/devices/bsim3v32/b3v32ld.c, * src/spicelib/devices/bsim3v32/b3v32mask.c, * src/spicelib/devices/bsim3v32/b3v32mdel.c, * src/spicelib/devices/bsim3v32/b3v32mpar.c, * src/spicelib/devices/bsim3v32/b3v32noi.c, * src/spicelib/devices/bsim3v32/b3v32par.c, * src/spicelib/devices/bsim3v32/b3v32pzld.c, * src/spicelib/devices/bsim3v32/b3v32temp.c, * src/spicelib/devices/bsim3v32/b3v32trunc.c, * src/spicelib/devices/bsim3v32/bsim3v32def.h, * src/spicelib/devices/bsim3v32/bsim3v32ext.h, * src/spicelib/devices/bsim3v32/bsim3v32init.c: devices/bsim3v32: whitespace cleanup 2013-05-11 dwarning * src/spicelib/devices/isrc/isrc.c, * src/spicelib/devices/isrc/isrcacld.c, * src/spicelib/devices/isrc/isrcask.c, * src/spicelib/devices/isrc/isrcdefs.h, * src/spicelib/devices/isrc/isrcload.c, * src/spicelib/devices/isrc/isrcpar.c, * src/spicelib/devices/isrc/isrctemp.c: devices/isrc: implement multiplier `m' for current sources 2013-05-11 dwarning * src/frontend/inpcom.c: allow Multiplier for current source in subckts 2013-05-11 h_vogt * src/frontend/inpcom.c: inpcom.c: add some some comments 2013-05-11 h_vogt * src/frontend/inpcom.c: inpcom.c: no multiplier 'm' added to V, I lines in subckt 2013-05-09 dwarning * src/spicelib/devices/cap/cap.c, * src/spicelib/devices/cap/capdefs.h, * src/spicelib/devices/cap/capmask.c, * src/spicelib/devices/cap/capmpar.c, * src/spicelib/devices/cap/capsetup.c: alternative geometry correction `del' for semiconductor capacitors 2013-05-09 dwarning * src/spicelib/devices/bsim3/b3check.c, * src/spicelib/devices/bsim3v32/b3v32check.c: someone gives version=3.30e+00 in bsim models 2013-05-09 h_vogt * src/frontend/measure.c: measure.c: disable autostop, if no .meas commands found 2013-05-09 h_vogt * src/frontend/subckt.c: subckt.c: enable correct model renaming for inductors 2013-05-09 h_vogt * src/spicelib/devices/ind/indacld.c, * src/spicelib/devices/ind/indload.c: devices/ind: implement multiplier `m' 2013-05-09 h_vogt * src/spicelib/devices/res/resload.c: resload.c: `m' already set in ressetup.c 2013-05-09 h_vogt * src/spicelib/devices/res/res.c, * src/spicelib/devices/res/resdefs.h, * src/spicelib/devices/res/resload.c, * src/spicelib/devices/res/resmpar.c, * src/spicelib/devices/res/resparam.c, * src/spicelib/devices/res/ressetup.c, * src/spicelib/devices/res/restemp.c: devices/res: whitespace cleanup 2013-05-09 h_vogt * src/spicelib/devices/ind/ind.c, * src/spicelib/devices/ind/inddefs.h, * src/spicelib/devices/ind/indload.c, * src/spicelib/devices/ind/indmpar.c, * src/spicelib/devices/ind/indparam.c, * src/spicelib/devices/ind/indtemp.c: devices/ind: whitespace cleanup 2013-05-08 h_vogt * src/spicelib/devices/cap/cap.c, * src/spicelib/devices/cap/capacld.c, * src/spicelib/devices/cap/capdefs.h, * src/spicelib/devices/cap/capload.c, * src/spicelib/devices/cap/capmask.c, * src/spicelib/devices/cap/capmpar.c, * src/spicelib/devices/cap/capparam.c, * src/spicelib/devices/cap/capsetup.c, * src/spicelib/devices/cap/captemp.c: devices/cap: whitespace cleanup 2013-05-09 h_vogt * src/spicelib/devices/ind/ind.c, * src/spicelib/devices/ind/inddefs.h, * src/spicelib/devices/ind/indparam.c, * src/spicelib/devices/ind/indtemp.c: devices/ind: implement `tc1', `tc2' instance parameters 2013-05-08 h_vogt * src/spicelib/devices/cap/cap.c, * src/spicelib/devices/cap/capdefs.h, * src/spicelib/devices/cap/capparam.c, * src/spicelib/devices/cap/captemp.c: devices/cap: implement `tc1', `tc2' instance parameters 2013-05-07 h_vogt * src/spicelib/devices/res/resload.c, * src/spicelib/devices/res/ressetup.c: move instance m-factor into ressetup 2013-05-07 h_vogt * src/spicelib/devices/res/resload.c, * src/spicelib/devices/res/restemp.c: resload.c, restemp.c: tc1, tc2 instance parameters override model parameters 2013-05-07 dwarning * src/spicelib/devices/bsim3/b3temp.c: bsim3: fix incorrect version printout 2013-05-07 dwarning * src/spicelib/devices/bsim3/b3.c, * src/spicelib/devices/bsim3/b3ask.c, * src/spicelib/devices/bsim3/b3ld.c, * src/spicelib/devices/bsim3/b3par.c, * src/spicelib/devices/bsim3/b3set.c, * src/spicelib/devices/bsim3/b3temp.c, * src/spicelib/devices/bsim3/bsim3def.h: this is the delvto/mulu0 instance extension to bsim3v3 2013-05-05 dwarning * src/spicelib/devices/bsim3/b3.c, * src/spicelib/devices/bsim3/b3ask.c, * src/spicelib/devices/bsim3/b3ld.c, * src/spicelib/devices/bsim3/b3par.c, * src/spicelib/devices/bsim3/b3set.c, * src/spicelib/devices/bsim3/b3temp.c, * src/spicelib/devices/bsim3/bsim3def.h: devices/bsim3: whitespace cleanup 2013-05-03 h_vogt * src/frontend/inpcom.c: inpcom.c: hot fix for nested ternary expressions 2013-05-01 dwarning * src/spicelib/devices/cap/cap.c, * src/spicelib/devices/res/res.c, * src/spicelib/devices/res/resdefs.h, * src/spicelib/devices/res/resmask.c, * src/spicelib/devices/res/resmpar.c, * src/spicelib/devices/res/restemp.c: devices/cap, devices/res: some parameter aliases for compatibility 2013-04-28 rlar * src/maths/sparse/spalloc.c, * src/maths/sparse/spbuild.c, * src/maths/sparse/spfactor.c, * src/maths/sparse/spoutput.c, * src/maths/sparse/spsmp.c, * src/maths/sparse/spsolve.c, * src/maths/sparse/sputils.c: sparse/*.c, whitespace 2013-04-28 rlar * src/maths/sparse/spalloc.c, * src/maths/sparse/sputils.c: sparse/*.c, rename `eMatrix' --> `Matrix' (comments) 2013-04-28 rlar * src/include/ngspice/smpdefs.h, * src/include/ngspice/spmatrix.h, * src/maths/sparse/spsmp.c: sparse/*.c, rename `eMatrix' --> `Matrix' (prototypes) 2013-04-28 rlar * src/maths/sparse/spalloc.c, * src/maths/sparse/sputils.c: sparse/*.c, rename `eMatrix' --> `Matrix' 2013-04-28 rlar * src/maths/sparse/spalloc.c, * src/maths/sparse/spbuild.c, * src/maths/sparse/spfactor.c, * src/maths/sparse/spoutput.c, * src/maths/sparse/spsmp.c, * src/maths/sparse/spsolve.c, * src/maths/sparse/sputils.c: sparse/*.c, simplify, drop the local copy `Matrix' 2013-04-28 rlar * src/maths/sparse/spfactor.c, * src/maths/sparse/sputils.c: sparse/*.c, unify, use local copy `Matrix' instead of `eMatrix' 2013-04-28 rlar * src/maths/sparse/spsmp.c: sparse/*.c, drop unnecessary (spREAL) cast 2013-04-28 rlar * src/maths/sparse/spoutput.c: sparse/*.c, drop unnecessary (double) cast 2013-04-28 rlar * src/maths/sparse/spfactor.c: sparse/*.c, drop unnecessary (int *) cast 2013-04-28 rlar * src/maths/sparse/spbuild.c: sparse/*.c, drop unnecessary (MatrixPtr) cast 2013-04-28 rlar * src/maths/sparse/spbuild.c: sparse/*.c, avoid (RealNumber *) casts by proper use of ElementPr 2013-04-28 rlar * src/maths/sparse/spalloc.c: sparse/*.c, drop unnecessary (void *) cast 2013-04-28 rlar * src/maths/sparse/sputils.c: sparse/*.c, drop unused artifacts 2013-04-25 dwarning * src/spicelib/analysis/dctran.c, * src/spicelib/devices/bjt/bjtsupd.c, * src/unsupported/cktsenup.c, * src/unsupported/cktsncom.c, * src/unsupported/cktsnld.c, * src/unsupported/cktsnprt.c, * src/unsupported/cktsnset.c, * src/unsupported/snstart.c: adapt the sense2 code to ngspice workaround, make the opaque struct MatrixElement partially visible this struct is private to the `sparse' world, and lives in "maths/sparse/spdefs.h" which can't be included here, because it is incompatible to the rest of ngspice. this is the same problem as in ciderlib/oned/oneprint.c ciderlib/twod/twoprint.c 2013-04-26 rlar * src/include/ngspice/smpdefs.h, * src/maths/sparse/spsmp.c: fix an incorrect typedef and cast which was of no consequence, because nobody made use of it. ancient, already in the very first commit of ngspice Date: Thu Apr 27 20:03:57 2000 +0000 2013-04-24 dwarning * src/spicelib/devices/dio/dioload.c: fix a wrong GMIN implementation 2013-04-23 rlar * src/frontend/inpcom.c: bug fix, preserve filename case for `codemodel', `load' and `use' reported and fixed by Emil Lambrache on the bug tracker http://sourceforge.net/p/ngspice/bugs/241/ "#241 case sensitivity not preserved for file names" 2013-04-23 dwarning * src/unsupported/Makefile.am: fix Makefile.am for SENSDEBUG code 2013-04-23 dwarning * src/spicelib/analysis/dctrcurv.c, * src/spicelib/devices/bjt/bjtsacl.c, * src/spicelib/devices/dio/diosload.c, * src/spicelib/devices/ind/indsacl.c, * src/spicelib/devices/ind/indsload.c, * src/spicelib/devices/vbic/vbicload.c: fix SENSDEBUG related code 2013-04-22 h_vogt * src/spicelib/devices/sw/swload.c: swload.c: reinstate the truncation code from swtrunc.c which was removed in the following commit: commit 0dae4607a01e2bbf93a925f5c37385ad9ce232f2 Date: Wed Apr 25 18:28:20 2001 +0000 Added a patch to csw and sw from Jon Engelbert dealing with negative histeresys 2013-04-22 h_vogt * src/spicelib/devices/txl/txldefs.h: txldefs.h: update some comments 2013-04-14 h_vogt * INSTALL: INSTALL add --with-ngshared 2013-04-13 h_vogt * src/include/ngspice/sharedspice.h, * src/sharedspice.c, * visualc-shared/sharedspice.vcproj: sharedspice.c, .h, .vcproj: comments, update für MS Visual Sudio build 2013-04-13 h_vogt * src/include/ngspice/sharedspice.h, * src/sharedspice.c: sharedspice.c, *.h: interface update, more comments 2013-04-12 h_vogt * src/sharedspice.c: sharedspice.c: improved comments 2013-04-07 h_vogt * src/sharedspice.c: sharedspice.c: remove bug causing sigsegv 2013-04-07 rlar * src/xspice/mif/mif_inp2.c: xpsice, fix premature tfree() invocation reported by "Heini X" on the ngspice-users mailing list this bug was introduced in : commit 0af75f3bd968f8a29f88221a81da6f9dafd2fceb : Date: Sat Aug 18 18:31:23 2012 +0200 : : subckt.c, mif_inp2.c: plug XSPICE setup memory leaks 2013-04-07 rlar * src/unsupported/sen2setp.c: sense2, cleanup, avoid (SENstruct *) casts 2013-04-07 rlar * src/unsupported/cktsenac.c, * src/unsupported/cktsenup.c, * src/unsupported/cktsncom.c, * src/unsupported/cktsndct.c, * src/unsupported/cktsnld.c, * src/unsupported/cktsnprt.c, * src/unsupported/cktsnset.c, * src/unsupported/sen2dest.c, * src/unsupported/sen2setp.c, * src/unsupported/snaskq.c, * src/unsupported/snstart.c: sense2, whitespace cleanup checked for object file invariance 2013-04-07 Francesco Lannutti * configure.ac, * src/Makefile.am, * src/include/ngspice/cktdefs.h, * src/spicelib/analysis/analysis.c, * src/spicelib/analysis/cktsetup.c, * src/spicelib/analysis/dcop.c, * src/spicelib/analysis/dctran.c, * src/spicelib/analysis/dctrcurv.c, * src/spicelib/parser/inp2dot.c, * src/unsupported/Makefile.am, * src/unsupported/cktsenac.c, * src/unsupported/cktsenup.c, * src/unsupported/cktsncom.c, * src/unsupported/cktsndct.c, * src/unsupported/cktsnld.c, * src/unsupported/cktsnprt.c, * src/unsupported/cktsnset.c, * src/unsupported/sen2dest.c, * src/unsupported/sen2setp.c, * src/unsupported/snaskq.c, * src/unsupported/snstart.c: fix sense2, which is unsupported code 2013-04-03 h_vogt * src/sharedspice.c: sharedspice.c: small updates 2013-04-01 h_vogt * src/xspice/icm/makedefs.in: icm/makedefs.in: add -lm for self-consistent shared libs 2013-04-01 h_vogt * src/sharedspice.c: sharedspice.c: fix sigsev fault under LINUX 2013-04-01 h_vogt * src/frontend/inp.c: inp.c: add function prototype 2013-04-01 Francesco Lannutti * src/spicelib/devices/mes/messetup.c: whitespace, align TSTALLOC calls in the setup routine of the MES model 2013-04-01 Francesco Lannutti * src/spicelib/devices/jfet2/jfet2set.c: whitespace, align TSTALLOC calls in the setup routine of the JFET2 model 2013-04-01 Francesco Lannutti * src/spicelib/devices/jfet/jfetset.c: whitespace, align TSTALLOC calls in the setup routine of the JFET model 2013-04-01 h_vogt * src/sharedspice.c: sharedspice.c: update stopping printsend thread 2013-04-01 Francesco Lannutti * src/spicelib/devices/bsim4v5/b4v5set.c: whitespaces 2013-03-31 Francesco Lannutti * src/spicelib/devices/bsim3soi_pd/b3soipdset.c: remove a duplicate entry in the setup routine of the BSIM3SOIPD model 2013-03-31 Francesco Lannutti * src/spicelib/devices/bsim3soi_dd/b3soiddset.c: remove a duplicate entry in the setup routine of the BSIM3SOIDD model 2013-03-26 h_vogt * src/sharedspice.c: sharedspice.c: command bg_pstop to stop printsend thread before unloading ngspice library 2013-03-25 h_vogt * src/sharedspice.c: sharedspice.c: thread handling updated 2013-03-24 h_vogt * src/misc/alloc.c, * src/sharedspice.c: alloc.c sharedspice.c: improve thread safety still much more to be done! 2013-03-23 h_vogt * src/sharedspice.c: sharedspice.c: correction for LINUX 2013-03-23 h_vogt * configure.ac: configure.ac: shared module added 2013-03-23 h_vogt * Makefile.am, * visualc-shared/include/inttypes.h, * visualc-shared/include/ngspice/config.h, * visualc-shared/include/stdint.h, * visualc-shared/include/strings.h, * visualc-shared/sharedspice.sln, * visualc-shared/sharedspice.vcproj: visualc-shared: support for compiling ngspice.dll with MS Visual Studio 2008 2013-03-23 h_vogt * src/xspice/icm/dlmain.c: icm/dlmain.c: restrict exported symbols under LINUX 2013-03-23 h_vogt * src/include/ngspice/ngspice.h: ngspice.h: add shared module 2013-03-23 h_vogt * src/frontend/misccoms.c: misccoms.c: special return value for shared module 2013-03-23 h_vogt * src/frontend/error.c: error.c: no exit, but callback if shared module 2013-03-23 h_vogt * src/frontend/display.c: display.c: exclude SHARED_MODULE if console 2013-03-23 h_vogt * src/Makefile.am, * src/include/ngspice/Makefile.am: src/Makefile.am include/ngspice/Makefile.am: add shared module 2013-03-23 h_vogt * src/frontend/outitf.c: outitf.c: prepare for feedback in shared ngspice 2013-03-23 h_vogt * src/include/ngspice/sharedspice.h, * src/sharedspice.c: main file and header for ngspice as shared module 2013-03-23 h_vogt * src/maths/cmaths/Makefile.am: new flag `SHARED_MODULE' for shared module 2013-03-23 h_vogt * src/spicelib/analysis/dctran.c: dctran.c: better rounding for status report 2013-03-23 h_vogt * INSTALL, * compile_min.sh, * configure.ac, * src/Makefile.am, * src/maths/cmaths/Makefile.am: --with-windows --> --with-wingui 2013-03-23 h_vogt * src/frontend/inp.c, * src/frontend/measure.c, * src/frontend/spec.c, * src/spicelib/analysis/acan.c, * src/spicelib/analysis/cktop.c, * src/spicelib/analysis/cktsetup.c, * src/spicelib/analysis/dcpss.c, * src/spicelib/analysis/dctran.c, * src/spicelib/analysis/dctrcurv.c, * src/spicelib/parser/inppas2.c: separate progress report from having Windows GUI 2013-03-23 h_vogt * src/frontend/inp.c, * src/frontend/measure.c, * src/frontend/spec.h, * src/include/ngspice/ngspice.h, * src/spicelib/analysis/acan.c, * src/spicelib/analysis/cktop.c, * src/spicelib/analysis/cktsetup.c, * src/spicelib/analysis/dcpss.c, * src/spicelib/analysis/dctran.c, * src/spicelib/analysis/dctrcurv.c, * src/spicelib/parser/inppas2.c: fix `SetAnalyse()' re-declaration 2013-03-23 h_vogt * configure.ac, * src/frontend/com_ghelp.c, * src/frontend/com_hardcopy.c, * src/frontend/com_sysinfo.c, * src/frontend/cpitf.c, * src/frontend/display.c, * src/frontend/error.c, * src/frontend/inp.c, * src/frontend/inpcom.c, * src/frontend/measure.c, * src/frontend/misccoms.c, * src/frontend/numparam/mystring.c, * src/frontend/outitf.c, * src/frontend/parser/input.c, * src/frontend/postcoms.c, * src/frontend/rawfile.c, * src/frontend/resource.c, * src/frontend/signal_handler.c, * src/frontend/spec.c, * src/frontend/spec.h, * src/frontend/wdisp/windisp.c, * src/frontend/wdisp/winprint.c, * src/include/ngspice/ngspice.h, * src/main.c, * src/maths/cmaths/cmath1.c, * src/maths/sparse/spoutput.c, * src/misc/alloc.c, * src/misc/ivars.c, * src/misc/util.c, * src/nghelp.c, * src/spicelib/analysis/acan.c, * src/spicelib/analysis/cktop.c, * src/spicelib/analysis/cktsetup.c, * src/spicelib/analysis/dcpss.c, * src/spicelib/analysis/dctran.c, * src/spicelib/analysis/dctrcurv.c, * src/spicelib/devices/dev.c, * src/spicelib/parser/inppas2.c, * src/winmain.c, * visualc/include/ngspice/config.h: HAS_WINDOWS --> HAS_WINGUI allow compilation on MS Windows without GUI 2013-03-16 rlar * FAQ: fix mailing list instructions 2013-03-06 h_vogt * src/frontend/commands.c, * src/frontend/cpitf.c, * src/frontend/device.c, * src/frontend/inp.c, * src/frontend/inp.h, * src/frontend/inpcom.c, * src/frontend/nutinp.c, * src/include/ngspice/fteext.h, * src/main.c: add command 'circbyline' to allow entering circuit line by line 2013-03-05 h_vogt * src/frontend/inp.c: inp.c: do not run all 'save' commands upfront, but cumulative when they appear in the .control section 2013-03-05 h_vogt * src/frontend/breakp2.c: breakp2.c: allow v(12) and i(vdd) in 'save' command 2013-03-05 h_vogt * src/frontend/runcoms2.c: runcoms2.c: update for dbs after remcirc 2013-03-05 h_vogt * src/tclspice.c: update 'alter' handling as in ngspice main.c 2013-03-05 h_vogt * src/frontend/breakp.c, * src/frontend/breakp2.c, * src/frontend/inp.c, * src/frontend/plotting/graf.c, * src/frontend/runcoms.c, * src/frontend/runcoms2.c, * src/include/ngspice/ftedefs.h: make database dbs local to each circuit 2013-02-25 rlar * src/frontend/inpcom.c: inpcom.c: cleanup comments 2013-02-25 rlar * src/frontend/inpcom.c: expand_libs(): think of `next' instead `prev' 2013-02-24 rlar * src/frontend/inpcom.c: expand_libs(): rename `tmp_ptr2' --> `next' 2013-02-24 rlar * src/frontend/inpcom.c: expand_libs(): reposition `keep_char' restorage 2013-02-24 rlar * src/frontend/inpcom.c: expand_libs(): shrink scope of `found_section' 2013-02-24 rlar * src/frontend/inpcom.c: expand_libs(): bug fix, missing check for .endl at the tail of a file 2013-02-25 rlar * src/frontend/inpcom.c: inpcom.c: rename local variable names 2013-02-24 rlar * src/frontend/inpcom.c: inpcom.c: rename local variable names 2013-02-24 rlar * src/frontend/inpcom.c: inpcom.c: rename local variable names 2013-02-24 rlar * src/frontend/inpcom.c: inpcom.c: rename found_lib_name --> found_section 2013-02-25 rlar * src/frontend/inpcom.c: inpcom.c: rename inp_determine_libraries() --> collect_section_references() 2013-02-25 rlar * src/frontend/inpcom.c: inpcom.c: rename expand_libs() --> expand_section_references() 2013-02-25 rlar * src/frontend/inpcom.c: inpcom.c: rename function argument names 2013-02-24 rlar * src/frontend/inpcom.c: inpcom.c: rename function argument names 2013-02-24 rlar * src/frontend/inpcom.c: inpcom.c: cleanup 2013-02-24 rlar * src/frontend/inpcom.c: inpcom.c: rename library_file[] --> library_name[] 2013-02-24 rlar * src/frontend/inpcom.c: inpcom.c: rename library_name[][] --> section_name[][] 2013-02-25 rlar * src/frontend/inpcom.c: inpcom.c: rename library_ll_ptr[][] --> section_ref[][] 2013-02-24 rlar * src/frontend/inpcom.c: inpcom.c: rename libraries[] -> library_deck[] 2013-02-24 rlar * src/frontend/inpcom.c: inpcom.c: rename num_lib_names --> num_sections 2013-02-25 rlar * src/frontend/inpcom.c: inpcom.c: rename new_lib_name() --> remember_section_ref() 2013-02-24 rlar * src/frontend/inpcom.c: inpcom.c: rename find_lib_name() --> find_section() 2013-02-25 rlar * src/frontend/inpcom.c: inpcom.c: static declaration of library related global variables 2013-02-22 h_vogt * src/frontend/inp.c, * src/frontend/runcoms.c, * src/frontend/runcoms2.c, * src/frontend/spiceif.c, * src/include/ngspice/ftedefs.h, * src/spicelib/parser/inpkmods.c: unique modtab for each circuit, store in ckt structure 2013-02-22 h_vogt * src/frontend/inp.c: inp.c: nullify `dbs' for use with 'source' command 2013-02-14 rlar * src/spicelib/analysis/cktdojob.c: fix bug `#233 cktdojob: Uninitialized variable: ANALmaxnum' this is WANT_SENSE2 specific http://sourceforge.net/p/ngspice/bugs/233/ 2013-02-14 rlar * src/spicelib/devices/soi3/soi3cap.c: fix bug `#232 soi3cap.c: wrong array index alpha_args[2]' though incorrect, this didn't lead to misbehavior. http://sourceforge.net/p/ngspice/bugs/232/ 2013-02-12 rlar * src/frontend/device.c, * src/frontend/inp.c, * src/frontend/inpcom.c, * src/frontend/nutinp.c, * src/include/ngspice/fteext.h: inp_readall() change function signature for readability 2013-02-09 rlar * src/frontend/inpcom.c: inpcom.c: abstract into new function read_a_lib() 2013-02-09 rlar * src/frontend/inpcom.c: inpcom.c: rewrite using new function find_lib() 2013-02-09 rlar * src/frontend/inpcom.c: inp_determine_libraries(): rewrite 2013-02-09 rlar * src/frontend/inpcom.c: inp_determine_libraries(): can happen at most once 2013-02-09 rlar * src/frontend/inpcom.c: inpcom.c: small cleanup 2013-02-09 rlar * src/frontend/inpcom.c: inpcom.c: comment .lib semantic 2013-02-09 rlar * src/frontend/inpcom.c: inp_readall(): rename local variables 2013-02-09 rlar * src/frontend/inpcom.c: inp_readall(): local scope for `tmp_ptr1' 2013-01-19 rlar * src/frontend/inpcom.c: inp_readall(): local scope for `fdo' 2013-02-03 rlar * src/maths/ni/niconv.c, * src/spicelib/analysis/cktncdump.c, * src/spicelib/analysis/ckttrunc.c, * src/spicelib/analysis/dcop.c, * src/spicelib/analysis/dcpss.c, * src/spicelib/analysis/dctran.c, * src/spicelib/parser/inppas3.c: use SP_VOLTAGE instead of literal value `3' (grep "git --no-pager grep -nH -e '->[ \t]*type.*[0-9]'") 2013-02-03 rlar * src/maths/ni/niiter.c, * src/spicelib/analysis/cktsetup.c: retire #define NODE_VOLTAGE, use SP_VOLTAGE instead (grep "git --no-pager grep -nH -e '\\(SP_\\|NODE_\\)\\(VOLTAGE\\|CURRENT\\)'") 2013-01-26 dwarning * src/spicelib/devices/jfet/jfet.c, * src/spicelib/devices/jfet/jfetdefs.h, * src/spicelib/devices/jfet/jfetmask.c, * src/spicelib/devices/jfet/jfetmpar.c, * src/spicelib/devices/jfet/jfetnoi.c, * src/spicelib/devices/jfet/jfetset.c: jfet: new noise model selector nlev=3 for correct noise in non-saturated region 2013-01-26 dwarning * src/spicelib/devices/jfet/jfetmask.c, * src/spicelib/devices/jfet/jfetmpar.c, * src/spicelib/devices/jfet/jfetnoi.c, * src/spicelib/devices/jfet/jfetset.c: jfet: whitespace cleanup 2013-01-26 rlar * src/ciderlib/oned/onecond.c, * src/ciderlib/oned/onecont.c, * src/ciderlib/oned/onesolve.c, * src/ciderlib/support/integuse.c, * src/ciderlib/twod/twocont.c, * src/ciderlib/twod/twoncont.c, * src/ciderlib/twod/twopcont.c, * src/ciderlib/twod/twosolve.c, * src/frontend/com_hardcopy.c, * src/frontend/device.c, * src/frontend/inpcom.c, * src/frontend/measure.c, * src/frontend/outitf.c, * src/frontend/parser/lexical.c, * src/frontend/vectors.c, * src/main.c, * src/maths/ni/niconv.c, * src/maths/ni/niinteg.c, * src/maths/ni/niiter.c, * src/maths/ni/niniter.c, * src/ngproc2mod.c, * src/spicelib/analysis/acan.c, * src/spicelib/analysis/cktbkdum.c, * src/spicelib/analysis/cktclrbk.c, * src/spicelib/analysis/cktdisto.c, * src/spicelib/analysis/cktic.c, * src/spicelib/analysis/cktload.c, * src/spicelib/analysis/cktnames.c, * src/spicelib/analysis/cktncdump.c, * src/spicelib/analysis/cktop.c, * src/spicelib/analysis/cktsetbk.c, * src/spicelib/analysis/cktterr.c, * src/spicelib/analysis/dcop.c, * src/spicelib/analysis/dcpss.c, * src/spicelib/analysis/dctran.c, * src/spicelib/analysis/distoan.c, * src/spicelib/analysis/nevalsrc.c, * src/spicelib/analysis/noisean.c, * src/spicelib/parser/inpeval.c, * src/spicelib/parser/inpgval.c, * src/unsupported/cktsncom.c, * src/unsupported/cktsnld.c, * src/unsupported/sen2setp.c, * src/unsupported/snstart.c, * src/xspice/cm/cmutil.c, * src/xspice/icm/analog/oneshot/cfunc.mod, * src/xspice/icm/analog/sine/cfunc.mod, * src/xspice/icm/analog/square/cfunc.mod, * src/xspice/icm/analog/triangle/cfunc.mod, * src/xspice/icm/xtradev/core/cfunc.mod, * src/xspice/mif/mifload.c, * src/xspice/mif/miftrunc.c: cleanup, use array operator checked for object file invariance on linux with ./configure --enable-debug=no --enable-maintainer-mode --with-readline=yes --enable-cider --enable-ndev --enable-pss --enable-xspice 2013-01-25 h_vogt * src/winmain.c: winmain.c: print buffer enlarged 2013-01-25 h_vogt * src/frontend/inp.c: inp.c: some comments added 2013-01-23 rlar * contrib/mslib/datadef.h, * src/conf.h, * src/frontend/arg.h, * src/frontend/aspice.h, * src/frontend/breakp.h, * src/frontend/breakp2.h, * src/frontend/circuits.h, * src/frontend/com_alias.h, * src/frontend/com_chdir.h, * src/frontend/com_dl.h, * src/frontend/com_echo.h, * src/frontend/com_fft.h, * src/frontend/com_rehash.h, * src/frontend/com_shell.h, * src/frontend/com_shift.h, * src/frontend/com_unset.h, * src/frontend/control.h, * src/frontend/cpitf.h, * src/frontend/define.h, * src/frontend/device.h, * src/frontend/dimens.h, * src/frontend/display.h, * src/frontend/dotcards.h, * src/frontend/fourier.h, * src/frontend/gens.h, * src/frontend/hpgl.h, * src/frontend/inp.h, * src/frontend/inpcom.h, * src/frontend/interp.h, * src/frontend/linear.h, * src/frontend/misccoms.h, * src/frontend/miscvars.h, * src/frontend/mw_coms.h, * src/frontend/newcoms.h, * src/frontend/numparam/numpaif.h, * src/frontend/nutinp.h, * src/frontend/nutmegif.h, * src/frontend/options.h, * src/frontend/outitf.h, * src/frontend/parser/backq.h, * src/frontend/parser/complete.h, * src/frontend/parser/cshpar.h, * src/frontend/parser/glob.h, * src/frontend/parser/input.h, * src/frontend/parser/lexical.h, * src/frontend/parser/numparse.h, * src/frontend/parser/unixcom.h, * src/frontend/plotting/clip.h, * src/frontend/plotting/gnuplot.h, * src/frontend/plotting/graf.h, * src/frontend/plotting/graphdb.h, * src/frontend/plotting/plot5.h, * src/frontend/plotting/plotcurv.h, * src/frontend/plotting/x11.h, * src/frontend/plotting/xgraph.h, * src/frontend/points.h, * src/frontend/postcoms.h, * src/frontend/postsc.h, * src/frontend/quote.h, * src/frontend/rawfile.h, * src/frontend/resource.h, * src/frontend/runcoms.h, * src/frontend/runcoms2.h, * src/frontend/shyu.h, * src/frontend/signal_handler.h, * src/frontend/spec.h, * src/frontend/spiceif.h, * src/frontend/streams.h, * src/frontend/subckt.h, * src/frontend/typesdef.h, * src/frontend/vectors.h, * src/frontend/wdisp/windisp.h, * src/frontend/wdisp/winprint.h, * src/frontend/where.h, * src/include/ngspice/acdefs.h, * src/include/ngspice/bdrydefs.h, * src/include/ngspice/carddefs.h, * src/include/ngspice/cluster.h, * src/include/ngspice/cm.h, * src/include/ngspice/cmconstants.h, * src/include/ngspice/cmproto.h, * src/include/ngspice/cmtypes.h, * src/include/ngspice/const.h, * src/include/ngspice/contdefs.h, * src/include/ngspice/cpdefs.h, * src/include/ngspice/cpextern.h, * src/include/ngspice/cpstd.h, * src/include/ngspice/defines.h, * src/include/ngspice/devdefs.h, * src/include/ngspice/dgen.h, * src/include/ngspice/distodef.h, * src/include/ngspice/dllitf.h, * src/include/ngspice/domndefs.h, * src/include/ngspice/dopdefs.h, * src/include/ngspice/dstring.h, * src/include/ngspice/elctdefs.h, * src/include/ngspice/enh.h, * src/include/ngspice/evt.h, * src/include/ngspice/evtproto.h, * src/include/ngspice/evtudn.h, * src/include/ngspice/ftedebug.h, * src/include/ngspice/ftedefs.h, * src/include/ngspice/ftedev.h, * src/include/ngspice/fteext.h, * src/include/ngspice/fteinp.h, * src/include/ngspice/fteinput.h, * src/include/ngspice/fteoptdefs.h, * src/include/ngspice/fteparse.h, * src/include/ngspice/gendefs.h, * src/include/ngspice/gendev.h, * src/include/ngspice/hash.h, * src/include/ngspice/iferrmsg.h, * src/include/ngspice/ifsim.h, * src/include/ngspice/inpdefs.h, * src/include/ngspice/inpptree.h, * src/include/ngspice/ipc.h, * src/include/ngspice/ipcproto.h, * src/include/ngspice/ipctiein.h, * src/include/ngspice/jobdefs.h, * src/include/ngspice/macros.h, * src/include/ngspice/material.h, * src/include/ngspice/matldefs.h, * src/include/ngspice/meshdefs.h, * src/include/ngspice/meshext.h, * src/include/ngspice/methdefs.h, * src/include/ngspice/mif.h, * src/include/ngspice/mifcmdat.h, * src/include/ngspice/mifdefs.h, * src/include/ngspice/mifparse.h, * src/include/ngspice/mifproto.h, * src/include/ngspice/miftypes.h, * src/include/ngspice/missing_math.h, * src/include/ngspice/mobdefs.h, * src/include/ngspice/modldefs.h, * src/include/ngspice/ngspice.h, * src/include/ngspice/noisedef.h, * src/include/ngspice/numcards.h, * src/include/ngspice/numconst.h, * src/include/ngspice/numenum.h, * src/include/ngspice/numgen.h, * src/include/ngspice/numglobs.h, * src/include/ngspice/onedev.h, * src/include/ngspice/onemesh.h, * src/include/ngspice/opdefs.h, * src/include/ngspice/optdefs.h, * src/include/ngspice/optndefs.h, * src/include/ngspice/outpdefs.h, * src/include/ngspice/profile.h, * src/include/ngspice/pssdefs.h, * src/include/ngspice/pzdefs.h, * src/include/ngspice/sen2defs.h, * src/include/ngspice/sensdefs.h, * src/include/ngspice/smpdefs.h, * src/include/ngspice/stringutil.h, * src/include/ngspice/swec.h, * src/include/ngspice/tclspice.h, * src/include/ngspice/tfdefs.h, * src/include/ngspice/trandefs.h, * src/include/ngspice/trcvdefs.h, * src/include/ngspice/tskdefs.h, * src/include/ngspice/twodev.h, * src/include/ngspice/twomesh.h, * src/include/ngspice/typedefs.h, * src/include/ngspice/wstdio.h, * src/maths/cmaths/cmath1.h, * src/maths/cmaths/cmath2.h, * src/maths/cmaths/cmath3.h, * src/maths/cmaths/cmath4.h, * src/maths/misc/accuracy.h, * src/maths/misc/bernoull.h, * src/maths/misc/norm.h, * src/maths/sparse/spconfig.h, * src/misc/alloc.h, * src/misc/dup2.h, * src/misc/ivars.h, * src/misc/misc_time.h, * src/misc/mktemp.h, * src/misc/printnum.h, * src/misc/tilde.h, * src/misc/util.h, * src/spicelib/parser/inpxx.h: unify #ifndef include wrapper 2013-01-23 rlar * src/frontend/com_chdir.h, * src/frontend/com_echo.h, * src/frontend/com_rehash.h, * src/frontend/com_shell.h, * src/frontend/com_shift.h, * src/frontend/com_unset.h, * src/frontend/control.h, * src/frontend/display.h, * src/frontend/gens.h, * src/frontend/spiceif.h, * src/frontend/streams.h, * src/frontend/wdisp/windisp.h, * src/frontend/wdisp/winprint.h, * src/include/ngspice/acdefs.h, * src/include/ngspice/bdrydefs.h, * src/include/ngspice/carddefs.h, * src/include/ngspice/cm.h, * src/include/ngspice/cmconstants.h, * src/include/ngspice/cmproto.h, * src/include/ngspice/cmtypes.h, * src/include/ngspice/contdefs.h, * src/include/ngspice/cpdefs.h, * src/include/ngspice/devdefs.h, * src/include/ngspice/dgen.h, * src/include/ngspice/distodef.h, * src/include/ngspice/domndefs.h, * src/include/ngspice/dopdefs.h, * src/include/ngspice/dstring.h, * src/include/ngspice/elctdefs.h, * src/include/ngspice/enh.h, * src/include/ngspice/evt.h, * src/include/ngspice/evtproto.h, * src/include/ngspice/evtudn.h, * src/include/ngspice/ftedebug.h, * src/include/ngspice/ftedefs.h, * src/include/ngspice/fteext.h, * src/include/ngspice/fteinp.h, * src/include/ngspice/fteoptdefs.h, * src/include/ngspice/fteparse.h, * src/include/ngspice/gendefs.h, * src/include/ngspice/gendev.h, * src/include/ngspice/hash.h, * src/include/ngspice/iferrmsg.h, * src/include/ngspice/ifsim.h, * src/include/ngspice/inpdefs.h, * src/include/ngspice/ipc.h, * src/include/ngspice/ipctiein.h, * src/include/ngspice/jobdefs.h, * src/include/ngspice/material.h, * src/include/ngspice/matldefs.h, * src/include/ngspice/meshdefs.h, * src/include/ngspice/meshext.h, * src/include/ngspice/methdefs.h, * src/include/ngspice/mif.h, * src/include/ngspice/mifcmdat.h, * src/include/ngspice/mifdefs.h, * src/include/ngspice/mifparse.h, * src/include/ngspice/mifproto.h, * src/include/ngspice/miftypes.h, * src/include/ngspice/missing_math.h, * src/include/ngspice/mobdefs.h, * src/include/ngspice/modldefs.h, * src/include/ngspice/ngspice.h, * src/include/ngspice/noisedef.h, * src/include/ngspice/numcards.h, * src/include/ngspice/numconst.h, * src/include/ngspice/numenum.h, * src/include/ngspice/numgen.h, * src/include/ngspice/numglobs.h, * src/include/ngspice/onedev.h, * src/include/ngspice/onemesh.h, * src/include/ngspice/opdefs.h, * src/include/ngspice/optdefs.h, * src/include/ngspice/optndefs.h, * src/include/ngspice/outpdefs.h, * src/include/ngspice/profile.h, * src/include/ngspice/sen2defs.h, * src/include/ngspice/smpdefs.h, * src/include/ngspice/tfdefs.h, * src/include/ngspice/trandefs.h, * src/include/ngspice/trcvdefs.h, * src/include/ngspice/tskdefs.h, * src/include/ngspice/twodev.h, * src/include/ngspice/twomesh.h, * src/include/ngspice/wstdio.h, * src/maths/misc/accuracy.h, * src/maths/misc/bernoull.h, * src/maths/misc/norm.h, * src/maths/sparse/spconfig.h: prepare for #ifndef include wrapper unification 2013-01-23 rlar * src/include/ngspice/cktdefs.h, * src/spicelib/devices/ndev/ndevexch.h: rename #ifndef include wrapper CKT_H 2013-01-22 rlar * src/ciderlib/oned/oneddefs.h, * src/ciderlib/oned/onedext.h, * src/ciderlib/twod/twoddefs.h, * src/ciderlib/twod/twodext.h, * src/frontend/com_ahelp.h, * src/frontend/com_asciiplot.h, * src/frontend/com_cdump.h, * src/frontend/com_commands.h, * src/frontend/com_compose.h, * src/frontend/com_display.h, * src/frontend/com_dl.h, * src/frontend/com_dump.h, * src/frontend/com_ghelp.h, * src/frontend/com_gnuplot.h, * src/frontend/com_hardcopy.h, * src/frontend/com_help.h, * src/frontend/com_history.h, * src/frontend/com_let.h, * src/frontend/com_measure2.h, * src/frontend/com_option.h, * src/frontend/com_plot.h, * src/frontend/com_set.h, * src/frontend/com_setscale.h, * src/frontend/com_state.h, * src/frontend/com_strcmp.h, * src/frontend/com_xgraph.h, * src/frontend/commands.h, * src/frontend/completion.h, * src/frontend/diff.h, * src/frontend/evaluate.h, * src/frontend/hcomp.h, * src/frontend/init.h, * src/frontend/parse.h, * src/frontend/plotting/agraf.h, * src/frontend/plotting/plotit.h, * src/frontend/plotting/plotting.h, * src/frontend/plotting/pvec.h, * src/frontend/terminal.h, * src/frontend/variable.h, * src/include/ngspice/bool.h, * src/include/ngspice/ciderinp.h, * src/include/ngspice/cidersupt.h, * src/include/ngspice/cluster.h, * src/include/ngspice/compatmode.h, * src/include/ngspice/complex.h, * src/include/ngspice/cpstd.h, * src/include/ngspice/defines.h, * src/include/ngspice/dllitf.h, * src/include/ngspice/dvec.h, * src/include/ngspice/fteinput.h, * src/include/ngspice/graph.h, * src/include/ngspice/grid.h, * src/include/ngspice/macros.h, * src/include/ngspice/memory.h, * src/include/ngspice/plot.h, * src/include/ngspice/pnode.h, * src/include/ngspice/sim.h, * src/include/ngspice/sperror.h, * src/include/ngspice/swec.h, * src/include/ngspice/wordlist.h, * src/maths/cmaths/cmath.h, * src/maths/poly/interpolate.h, * src/maths/poly/poly.h, * src/maths/poly/polyderiv.h, * src/maths/poly/polyeval.h, * src/maths/poly/polyfit.h, * src/maths/sparse/spdefs.h, * src/spicelib/analysis/analysis.h, * src/spicelib/parser/inppas1.h, * src/spicelib/parser/inppas2.h, * src/spicelib/parser/inppas3.h: avoid leading underscore in preprocessor macros 2013-01-22 rlar * src/frontend/com_measure2.h, * src/include/ngspice/complex.h, * src/include/ngspice/cpstd.h, * src/include/ngspice/defines.h, * src/include/ngspice/fteinput.h, * src/include/ngspice/macros.h: cleanup some preprocessor macros 2013-01-19 rlar * configure.ac, * tests/Makefile.am, * tests/bin/check.sh, * tests/regression/Makefile.am, * tests/regression/lib-processing/Makefile.am, * tests/regression/lib-processing/ex1.lib, * tests/regression/lib-processing/ex1a.cir, * tests/regression/lib-processing/ex1a.out, * tests/regression/lib-processing/ex1b.cir, * tests/regression/lib-processing/ex1b.out, * tests/regression/lib-processing/ex2.lib, * tests/regression/lib-processing/ex2a.cir, * tests/regression/lib-processing/ex2a.out, * tests/regression/lib-processing/ex3.lib, * tests/regression/lib-processing/ex3a.cir, * tests/regression/lib-processing/ex3a.out, * tests/regression/lib-processing/extra3.lib: check the .lib processing 2013-01-18 h_vogt * src/frontend/subckt.c: fix bug #229 `Node name "n" is sometimes toxic' Error: too few nodes for MOS or CPL: m6 1 n 2 vss nch.3 l=4.3e-07 ... http://sourceforge.net/p/ngspice/bugs/229/ 2013-01-16 Francesco Lannutti * autogen.sh: Restored the execution flag on configure when ADMS is enabled 2013-01-13 rlar * src/frontend/inpcom.c: inpcom.c: rewrite for readability 2013-01-12 rlar * src/frontend/inpcom.c: inpcom.c, bug fix, incorrect start value for `prev' this bug was introduced in the following commit, which `reused' variable prev, failing to preserve its initialization value NULL Author: pnenzi Date: Mon Oct 8 21:10:34 2007 +0000 Improvements in frontend by Phil Barker 2013-01-12 Francesco Lannutti * src/spicelib/analysis/dcpss.c: Fixed a memory leak in dcpss.c on the "err_conv" array 2013-01-11 Francesco Lannutti * configure.ac: Changed --enable-debug to --disable-debug in configure.ac to have it correctly displayed in the automatic completion 2013-01-07 Francesco Lannutti * INSTALL: Added Mac OS X compilation information 2013-01-02 rlar * ChangeLog: update ChangeLog from `git log' 2013-01-01 h_vogt * src/include/ngspice/ngspice.h, * src/misc/ivars.c: ivars.c: prevent crash in CYGWIN batch mode, if NGSPICE_INPUT_DIR given remove unused Default_MFB_Cap 2013-01-01 dwarning * src/spicelib/devices/bsimsoi/b4soinoi.c: b4soinoi.c: Correct the flicker noise model with device multiplier 2013-01-01 h_vogt * src/frontend/inp.c: inp.c: remove buf if .control section contains only 'save...' lines 2012-12-31 dwarning * DEVICES, * FAQ, * NEWS: update the hisim and hisimhv versions 2012-12-31 rlar * src/spicelib/devices/hisim2/hsm2init.c: fix commit "update hisim to version 2.7.0" missing #include "ngspice/config.h" thats required for consistent interpretation of the type struct IFdevice from ngspice/ifsim.h included from ngspice/devdefs.h (invisible XSPICE definition leading to different size and layout of this struct) 2012-12-31 rlar * tests/bin/check.sh: compare a little bit less when running `make check' windows ngspice emmits a user notice "binary raw file" when running ngspice don't compare that 2012-12-30 h_vogt * src/frontend/inpcom.c: inpcom.c: exit if 'poly' option is required, but XSPICE not available, remove memory leak 2012-12-30 h_vogt * src/spicelib/analysis/dcpss.c: dcpss.c: Allow XSPICE usage without excessive debug message 2012-12-30 h_vogt * src/frontend/com_dl.c: com_dl.c: exit upon codemodel load error 2012-12-28 h_vogt * src/spicelib/analysis/dcpss.c, * visualc/include/ngspice/config.h, * visualc/vngspice.vcproj: dcpss.c : compatibility to MS Visual Studio C vngspice.vcproj, config.h: add PSS to Vc project 2012-12-28 Stefano Perticaroli * configure.ac, * examples/pss/colpitt_osc_pss.cir, * examples/pss/compl_cross_quad_osc_pss.cir, * examples/pss/hartley_osc_pss.cir, * examples/pss/ring_osc_pss.cir, * examples/pss/vackar_osc_pss.cir, * examples/pss/vdp_osc_pss.cir, * src/frontend/commands.c, * src/frontend/outitf.c, * src/frontend/runcoms.c, * src/frontend/runcoms.h, * src/frontend/shyu.c, * src/frontend/spiceif.c, * src/frontend/typesdef.c, * src/include/ngspice/Makefile.am, * src/include/ngspice/cktdefs.h, * src/include/ngspice/pssdefs.h, * src/spicelib/analysis/Makefile.am, * src/spicelib/analysis/analysis.c, * src/spicelib/analysis/dcpss.c, * src/spicelib/analysis/pssaskq.c, * src/spicelib/analysis/pssinit.c, * src/spicelib/analysis/psssetp.c, * src/spicelib/parser/inp2dot.c, * visualc/vngspice.vcproj: next version of PSS2 which was reviewed and rewritten on branch `PSS-2-try-to-rebase+4' by Stefano Perticaroli and Francesco Lannutti 2012-12-28 rlar * configure.ac, * examples/pss/colpitt_osc_pss.cir, * examples/pss/compl_cross_quad_osc_pss.cir, * examples/pss/hartley_osc_pss.cir, * examples/pss/ring_osc_pss.cir, * examples/pss/vackar_osc_pss.cir, * examples/pss/vdp_osc_pss.cir, * src/frontend/commands.c, * src/frontend/runcoms.c, * src/frontend/runcoms.h, * src/frontend/shyu.c, * src/frontend/spiceif.c, * src/include/ngspice/Makefile.am, * src/include/ngspice/cktdefs.h, * src/include/ngspice/pssdefs.h, * src/spicelib/analysis/Makefile.am, * src/spicelib/analysis/analysis.c, * src/spicelib/analysis/dcpss.c, * src/spicelib/analysis/pssaskq.c, * src/spicelib/analysis/pssinit.c, * src/spicelib/analysis/psssetp.c, * src/spicelib/parser/inp2dot.c, * visualc/vngspice.vcproj: remove PSS2 2012-12-27 h_vogt * src/spicelib/parser/Makefile.am, * src/spicelib/parser/ifeval.c, * src/spicelib/parser/ifnewuid.c, * src/spicelib/parser/inp.h, * src/spicelib/parser/inp2b.c, * src/spicelib/parser/inp2c.c, * src/spicelib/parser/inp2d.c, * src/spicelib/parser/inp2dot.c, * src/spicelib/parser/inp2e.c, * src/spicelib/parser/inp2f.c, * src/spicelib/parser/inp2g.c, * src/spicelib/parser/inp2h.c, * src/spicelib/parser/inp2i.c, * src/spicelib/parser/inp2j.c, * src/spicelib/parser/inp2k.c, * src/spicelib/parser/inp2l.c, * src/spicelib/parser/inp2m.c, * src/spicelib/parser/inp2n.c, * src/spicelib/parser/inp2o.c, * src/spicelib/parser/inp2p.c, * src/spicelib/parser/inp2q.c, * src/spicelib/parser/inp2r.c, * src/spicelib/parser/inp2s.c, * src/spicelib/parser/inp2t.c, * src/spicelib/parser/inp2u.c, * src/spicelib/parser/inp2v.c, * src/spicelib/parser/inp2w.c, * src/spicelib/parser/inp2y.c, * src/spicelib/parser/inp2z.c, * src/spicelib/parser/inpaname.c, * src/spicelib/parser/inpapnam.c, * src/spicelib/parser/inpcfix.c, * src/spicelib/parser/inpdomod.c, * src/spicelib/parser/inpdpar.c, * src/spicelib/parser/inperrc.c, * src/spicelib/parser/inperror.c, * src/spicelib/parser/inpeval.c, * src/spicelib/parser/inpfindl.c, * src/spicelib/parser/inpfindv.c, * src/spicelib/parser/inpgmod.c, * src/spicelib/parser/inpgstr.c, * src/spicelib/parser/inpgtitl.c, * src/spicelib/parser/inpgtok.c, * src/spicelib/parser/inpgval.c, * src/spicelib/parser/inpkmods.c, * src/spicelib/parser/inplist.c, * src/spicelib/parser/inpmkmod.c, * src/spicelib/parser/inpmktmp.c, * src/spicelib/parser/inppas2.c, * src/spicelib/parser/inppname.c, * src/spicelib/parser/inpptree.c, * src/spicelib/parser/inpsymt.c, * src/spicelib/parser/inptyplk.c, * src/spicelib/parser/inpxx.h, * src/spicelib/parser/ptfuncs.c, * src/spicelib/parser/sperror.c, * visualc/vngspice.vcproj: rename spicelib/parser/inp.h to inpxx.h since we have another "inp.h" in src/frontend 2012-12-25 Francesco Lannutti * src/maths/ni/nipred.c: nipred.c, remove unused variable `temp' 2012-12-25 Francesco Lannutti * src/include/ngspice/cktdefs.h, * src/maths/ni/Makefile.am, * src/maths/ni/nipred.c, * src/maths/ni/nipred.h, * src/spicelib/analysis/dctran.c, * visualc/vngspice.vcproj: remove almost empty src/maths/ni/nipred.h 2012-12-25 dwarning * src/spicelib/devices/adms/admst/ngspiceMakefile.am.xml: distclean and maintainer-clean shall remove generated Makefile.am files in adms directories 2012-12-24 Francesco Lannutti * src/maths/ni/Makefile.am, * src/maths/ni/niaciter.c, * src/maths/ni/niaciter.h, * src/maths/ni/nicomcof.c, * src/maths/ni/nicomcof.h, * src/maths/ni/niconv.c, * src/maths/ni/niconv.h, * src/maths/ni/nidest.c, * src/maths/ni/nidest.h, * src/maths/ni/niditer.c, * src/maths/ni/niditer.h, * src/maths/ni/niinit.c, * src/maths/ni/niinit.h, * src/maths/ni/niinteg.c, * src/maths/ni/niinteg.h, * src/maths/ni/niiter.c, * src/maths/ni/niiter.h, * src/maths/ni/niniter.c, * src/maths/ni/niniter.h, * src/maths/ni/nipzmeth.c, * src/maths/ni/nipzmeth.h, * src/maths/ni/nireinit.c, * src/maths/ni/nireinit.h, * src/maths/ni/nisenre.c, * src/maths/ni/nisenre.h, * src/spicelib/analysis/noisean.c, * visualc/vngspice.vcproj: remove empty src/maths/ni/*.h include files 2012-12-23 h_vogt * src/tclspice.c, * tests/bin/ngspice.pm, * visualc/include/ngspice/config.h: tclspice.c, ngspice.pm, config.h in visualc: prepare ngspice-25 2012-12-23 h_vogt * configure.ac: configure.ac: prepare ngspice-25 2012-12-23 h_vogt * COPYING, * FAQ, * INSTALL, * NEWS, * README.tcl: prepare ngspice-25, Robert's patches and more 2012-12-15 rlar * configure.ac: configure.ac, defensive use of `AC_OPENMP' 2012-12-22 h_vogt * src/spicelib/parser/inpdpar.c: inpdpar.c: remove memory leak 2012-12-22 h_vogt * ANALYSES, * AUTHORS, * COPYING, * README: prepare ngspice-25 2012-12-22 h_vogt * src/spicelib/devices/isrc/isrcacct.c, * src/spicelib/devices/isrc/isrcload.c, * src/spicelib/devices/vsrc/vsrcacct.c, * src/spicelib/devices/vsrc/vsrcload.c: vsrc, isrc TRNOISE: allow repeated calls to 'tran' 2012-12-22 h_vogt * src/spicelib/analysis/cktntask.c: cktntask.c: remove meory leak 2012-12-22 h_vogt * FAQ, * INSTALL: FAQ, INSTALL: update to git, ngspice-25 2012-12-20 rlar * src/xspice/mif/mif_inp2.c: use enum Mif_Port_Type_t values instead of numericals 2012-12-19 dwarning * src/frontend/inp.c, * src/frontend/spiceif.c: remove of modtab after the job is done to issue additional source commands 2012-12-18 h_vogt * src/spicelib/devices/isrc/isrcload.c: isrcload.c: remove memory read beyond array boundary 2012-12-16 rlar * src/frontend/fourier.c: use enum dvec_flags values instead of numericals 2012-12-16 rlar * src/frontend/fourier.c, * src/frontend/vectors.c: use enum simulation_types values instead of numericals 2012-12-16 h_vogt * src/frontend/device.c: device.c: plug memory leak in 'alter' command 2012-12-15 h_vogt * src/frontend/plotting/plotit.c: plotit.c: remove memory leaks 2012-12-15 h_vogt * src/frontend/com_display.c: com_display.c: remove memory leak 2012-12-15 rlar * src/spicelib/parser/inperror.c: inperror.c, release errMsg when it has been consumed 2012-12-15 h_vogt * src/maths/ni/niiter.c: niiter.c: indentations 2012-12-15 h_vogt * src/main.c, * src/spicelib/parser/inperror.c: main.c, inperror.c: unify errMsg 2012-12-15 h_vogt * src/spicelib/parser/inperror.c: inperror.c: indentations 2012-12-09 h_vogt * src/frontend/com_measure2.c, * src/frontend/measure.c: com_measure.c, measure.c: remove memory leaks 2012-12-09 h_vogt * src/frontend/measure.c, * src/include/ngspice/fteext.h: measure.c, rewrite do_measure() 2012-12-09 h_vogt * src/frontend/evaluate.c: apply_func(), use arg->pn_value->v_name instead of recreated name 2012-12-09 h_vogt * src/frontend/diff.c: com_diff(), use hash tables for the vector search patch originally provided by Bill Swartz, 2010 reduces vector search time from O(n*n) to O(n) 2012-12-09 h_vogt * src/frontend/plotting/plotting.c, * src/frontend/vectors.c, * src/include/ngspice/plot.h: findvec(), use hash tables for the vector search patch originally provided by Bill Swartz, 2010 reduces vector search time from O(n) to O(1) 2012-12-09 h_vogt * src/include/ngspice/dstring.h, * src/misc/dstring.c: implement spice_dstring_append_lower() patch originally provided by Bill Swartz, 2010 2012-12-05 h_vogt * src/frontend/measure.c: measure.c: outputting 'meas' status in Windows GUI 2012-12-04 dwarning * src/spicelib/devices/jfet/jfet.c, * src/spicelib/devices/jfet/jfetdefs.h, * src/spicelib/devices/jfet/jfetdset.c, * src/spicelib/devices/jfet/jfetload.c, * src/spicelib/devices/jfet/jfetmask.c, * src/spicelib/devices/jfet/jfetmpar.c, * src/spicelib/devices/jfet/jfetset.c, * src/spicelib/devices/jfet/jfettemp.c: jfet model temperature extension, tcv and bex parameter 2012-12-02 rlar * src/main.c: allow Ctrl-d to quit based upon Cody Creagers patch, EOF Control-D support - ID: 3586069 http://sourceforge.net/tracker/?func=detail&aid=3586069&group_id=38962&atid=423917 2012-12-01 rlar * src/xspice/cmpp/cmpp.h, * src/xspice/cmpp/pp_lst.c, * src/xspice/cmpp/pp_mod.c, * src/xspice/cmpp/read_ifs.c, * src/xspice/cmpp/util.c, * src/xspice/cmpp/writ_ifs.c: cmpp, rewrite for proper report of error locations 2012-12-01 rlar * src/xspice/cmpp/cmpp.h, * src/xspice/cmpp/pp_lst.c, * src/xspice/cmpp/pp_mod.c, * src/xspice/cmpp/read_ifs.c, * src/xspice/cmpp/util.c, * src/xspice/cmpp/writ_ifs.c: cmpp, use for print_error() 2012-12-01 rlar * src/xspice/cmpp/pp_mod.c: cmpp, remove dead code 2012-12-01 rlar * src/xspice/cmpp/pp_mod.c: cmpp, don't exit(0) when reporting an error 2012-12-01 rlar * src/frontend/com_fft.c, * src/frontend/device.c, * src/frontend/gens.c, * src/frontend/inpcom.c, * src/frontend/plotting/graf.c, * src/frontend/plotting/grid.c, * src/frontend/rawfile.c, * src/maths/misc/norm.c, * src/spicelib/analysis/cktnames.c, * src/spicelib/analysis/cktpzstr.c, * src/spicelib/devices/asrc/asrcacld.c, * src/spicelib/parser/inpgtok.c: remove unused variables 2012-12-01 rlar * src/spicelib/devices/hisimhv1/hsmhvld.c, * src/spicelib/devices/hisimhv1/hsmhvnoi.c: hisimhv1, avoid warnings 2012-12-01 h_vogt * src/spicelib/devices/cpl/cplsetup.c: cplsetup.c: indentations etc. 2012-12-01 h_vogt * src/spicelib/devices/cpl/cplsetup.c: cplsetup.c: remove memory leaks 2012-12-01 h_vogt * src/frontend/inpcom.c: inpcom.c: remove memory leak 2012-12-01 rlar * src/spicelib/devices/ltra/ltraacct.c: ltraacct.c, shortcutting the bug fix use following fact at the artificial timestep time[-1] voltage[-1] === voltage[0] to shortcut the expressions 2012-12-01 rlar * src/spicelib/devices/ltra/ltraacct.c: ltraacct.c, bug fix reported by Gary Hennigan on tracker http://sourceforge.net/tracker/index.php?func=detail&aid=3591132&group_id=38962&atid=423915 access to uninitialized memory, trying to acquire the "time" of a projected auxiliary timestep in the past. now using the following auxiliary timestep t[-1] voltage(t[-1]) === voltage(t[0]) and t[-1] === t[0] - (t[1] - t[0]) the details are not understood, but thats certainly better than accessing uninitialized memory. 2012-11-27 h_vogt * src/frontend/inpcom.c: inpcom.c: plug memory leaks 2012-11-26 dwarning * tests/hisimhv1/nmos/reference/dcVsub_Id1_vb0.standard, * tests/hisimhv1/nmos/reference/dcVsub_Id1_vb0_jd.standard, * tests/hisimhv1/nmos/reference/dcVsub_Id1_vb1.standard, * tests/hisimhv1/nmos/reference/dcVsub_Id1_vb2.standard, * tests/hisimhv1/nmos/reference/dcVsub_Ig1_vb0.standard, * tests/hisimhv1/nmos/reference/dcVsub_Ig1_vb0_jd.standard, * tests/hisimhv1/nmos/reference/dcVsub_Ig1_vb1.standard, * tests/hisimhv1/nmos/reference/dcVsub_Ig1_vb2.standard, * tests/hisimhv1/pmos/reference/dcVsub_Id1_vb0.standard, * tests/hisimhv1/pmos/reference/dcVsub_Id1_vb0_jd.standard, * tests/hisimhv1/pmos/reference/dcVsub_Id1_vb1.standard, * tests/hisimhv1/pmos/reference/dcVsub_Id1_vb2.standard, * tests/hisimhv1/pmos/reference/dcVsub_Ig1_vb0.standard, * tests/hisimhv1/pmos/reference/dcVsub_Ig1_vb0_jd.standard, * tests/hisimhv1/pmos/reference/dcVsub_Ig1_vb1.standard, * tests/hisimhv1/pmos/reference/dcVsub_Ig1_vb2.standard: hisimhv update to version 1.2.3 2012-11-26 dwarning * src/spicelib/devices/hisimhv1/hisimhv.h, * src/spicelib/devices/hisimhv1/hsmhv.c, * src/spicelib/devices/hisimhv1/hsmhvacld.c, * src/spicelib/devices/hisimhv1/hsmhvask.c, * src/spicelib/devices/hisimhv1/hsmhvcvtest.c, * src/spicelib/devices/hisimhv1/hsmhvdef.h, * src/spicelib/devices/hisimhv1/hsmhvdel.c, * src/spicelib/devices/hisimhv1/hsmhvdest.c, * src/spicelib/devices/hisimhv1/hsmhveval.c, * src/spicelib/devices/hisimhv1/hsmhveval_qover.h, * src/spicelib/devices/hisimhv1/hsmhvevalenv.h, * src/spicelib/devices/hisimhv1/hsmhvext.h, * src/spicelib/devices/hisimhv1/hsmhvgetic.c, * src/spicelib/devices/hisimhv1/hsmhvitf.h, * src/spicelib/devices/hisimhv1/hsmhvld.c, * src/spicelib/devices/hisimhv1/hsmhvld_info_eval.h, * src/spicelib/devices/hisimhv1/hsmhvmask.c, * src/spicelib/devices/hisimhv1/hsmhvmdel.c, * src/spicelib/devices/hisimhv1/hsmhvmpar.c, * src/spicelib/devices/hisimhv1/hsmhvnoi.c, * src/spicelib/devices/hisimhv1/hsmhvpar.c, * src/spicelib/devices/hisimhv1/hsmhvpzld.c, * src/spicelib/devices/hisimhv1/hsmhvset.c, * src/spicelib/devices/hisimhv1/hsmhvtemp.c, * src/spicelib/devices/hisimhv1/hsmhvtemp_eval.h, * src/spicelib/devices/hisimhv1/hsmhvtrunc.c, * tests/hisimhv1/nmos/parameters/nmosParameters, * tests/hisimhv1/nmos/qaSpec, * tests/hisimhv1/nmos/qaSpec.basic, * tests/hisimhv1/nmos/reference/acFreq.standard, * tests/hisimhv1/nmos/reference/acFreq_coadov.standard, * tests/hisimhv1/nmos/reference/acFreq_coiigs.standard, * tests/hisimhv1/nmos/reference/acFreq_conqs.standard, * tests/hisimhv1/nmos/reference/acFreq_coovlp.standard, * tests/hisimhv1/nmos/reference/acFreq_cosym.standard, * tests/hisimhv1/nmos/reference/acFreq_nover.standard, * tests/hisimhv1/nmos/reference/acVd.standard, * tests/hisimhv1/nmos/reference/acVd_corsrd1.standard, * tests/hisimhv1/nmos/reference/acVd_corsrd2.standard, * tests/hisimhv1/nmos/reference/acVd_cosym.standard, * tests/hisimhv1/nmos/reference/acVd_cvdsover.standard, * tests/hisimhv1/nmos/reference/dcSw_Id1_vb0.standard, * tests/hisimhv1/nmos/reference/dcSw_Id1_vb0_jd.standard, * tests/hisimhv1/nmos/reference/dcSw_Id1_vb1.standard, * tests/hisimhv1/nmos/reference/dcSw_Id1_vb2.standard, * tests/hisimhv1/nmos/reference/dcSw_Ig1_vb0.standard, * tests/hisimhv1/nmos/reference/dcSw_Ig1_vb0_jd.standard, * tests/hisimhv1/nmos/reference/dcSw_Ig1_vb1.standard, * tests/hisimhv1/nmos/reference/dcSw_Ig1_vb2.standard, * tests/hisimhv1/nmos/reference/dcSw_corsrd0.standard, * tests/hisimhv1/nmos/reference/dcSw_corsrd1.standard, * tests/hisimhv1/nmos/reference/dcSw_corsrd2.standard, * tests/hisimhv1/nmos/reference/dcSw_cosym.standard, * tests/hisimhv1/nmos/reference/dcSw_gidl.standard, * tests/hisimhv1/nmos/reference/dcSw_isub.standard, * tests/hisimhv1/nmos/reference/dcSw_ld2.standard, * tests/hisimhv1/nmos/reference/dcSw_lg2.standard, * tests/hisimhv1/nmos/reference/dcSw_rs2m.standard, * tests/hisimhv1/nmos/reference/dcSw_she.standard, * tests/hisimhv1/nmos/reference/noise1.standard, * tests/hisimhv1/nmos/reference/noise2.standard, * tests/hisimhv1/pmos/parameters/pmosParameters, * tests/hisimhv1/pmos/qaSpec, * tests/hisimhv1/pmos/qaSpec.basic, * tests/hisimhv1/pmos/reference/acFreq.standard, * tests/hisimhv1/pmos/reference/acFreq_coadov.standard, * tests/hisimhv1/pmos/reference/acFreq_coiigs.standard, * tests/hisimhv1/pmos/reference/acFreq_conqs.standard, * tests/hisimhv1/pmos/reference/acFreq_coovlp.standard, * tests/hisimhv1/pmos/reference/acFreq_cosym.standard, * tests/hisimhv1/pmos/reference/acFreq_nover.standard, * tests/hisimhv1/pmos/reference/acVd.standard, * tests/hisimhv1/pmos/reference/acVd_corsrd1.standard, * tests/hisimhv1/pmos/reference/acVd_corsrd2.standard, * tests/hisimhv1/pmos/reference/acVd_cosym.standard, * tests/hisimhv1/pmos/reference/acVd_cvdsover.standard, * tests/hisimhv1/pmos/reference/dcSw_Id1_vb0.standard, * tests/hisimhv1/pmos/reference/dcSw_Id1_vb0_jd.standard, * tests/hisimhv1/pmos/reference/dcSw_Id1_vb1.standard, * tests/hisimhv1/pmos/reference/dcSw_Id1_vb2.standard, * tests/hisimhv1/pmos/reference/dcSw_Ig1_vb0.standard, * tests/hisimhv1/pmos/reference/dcSw_Ig1_vb0_jd.standard, * tests/hisimhv1/pmos/reference/dcSw_Ig1_vb1.standard, * tests/hisimhv1/pmos/reference/dcSw_Ig1_vb2.standard, * tests/hisimhv1/pmos/reference/dcSw_corsrd0.standard, * tests/hisimhv1/pmos/reference/dcSw_corsrd1.standard, * tests/hisimhv1/pmos/reference/dcSw_corsrd2.standard, * tests/hisimhv1/pmos/reference/dcSw_cosym.standard, * tests/hisimhv1/pmos/reference/dcSw_gidl.standard, * tests/hisimhv1/pmos/reference/dcSw_isub.standard, * tests/hisimhv1/pmos/reference/dcSw_ld2.standard, * tests/hisimhv1/pmos/reference/dcSw_lg2.standard, * tests/hisimhv1/pmos/reference/dcSw_rs2m.standard, * tests/hisimhv1/pmos/reference/dcSw_she.standard, * tests/hisimhv1/pmos/reference/noise1.standard, * tests/hisimhv1/pmos/reference/noise2.standard: hisimhv update to version 1.2.3 2012-11-25 h_vogt * src/frontend/inpcom.c: inpcom.c: prevent invalid memory read/write 2012-11-25 dwarning * configure.ac, * src/Makefile.am, * src/spicelib/devices/Makefile.am, * src/spicelib/devices/dev.c, * src/spicelib/devices/hisimhv1/Makefile.am, * tests/Makefile.am, * visualc/vngspice.vcproj: change model name from hisimhv to hisimhv1 2012-11-25 dwarning * src/spicelib/devices/hisimhv/Makefile.am, * src/spicelib/devices/hisimhv/hisimhv.h, * src/spicelib/devices/hisimhv/hsmhv.c, * src/spicelib/devices/hisimhv/hsmhvacld.c, * src/spicelib/devices/hisimhv/hsmhvask.c, * src/spicelib/devices/hisimhv/hsmhvcvtest.c, * src/spicelib/devices/hisimhv/hsmhvdef.h, * src/spicelib/devices/hisimhv/hsmhvdel.c, * src/spicelib/devices/hisimhv/hsmhvdest.c, * src/spicelib/devices/hisimhv/hsmhveval.c, * src/spicelib/devices/hisimhv/hsmhveval_qover.h, * src/spicelib/devices/hisimhv/hsmhvevalenv.h, * src/spicelib/devices/hisimhv/hsmhvext.h, * src/spicelib/devices/hisimhv/hsmhvgetic.c, * src/spicelib/devices/hisimhv/hsmhvinit.c, * src/spicelib/devices/hisimhv/hsmhvinit.h, * src/spicelib/devices/hisimhv/hsmhvitf.h, * src/spicelib/devices/hisimhv/hsmhvld.c, * src/spicelib/devices/hisimhv/hsmhvld_info_eval.h, * src/spicelib/devices/hisimhv/hsmhvmask.c, * src/spicelib/devices/hisimhv/hsmhvmdel.c, * src/spicelib/devices/hisimhv/hsmhvmpar.c, * src/spicelib/devices/hisimhv/hsmhvnoi.c, * src/spicelib/devices/hisimhv/hsmhvpar.c, * src/spicelib/devices/hisimhv/hsmhvpzld.c, * src/spicelib/devices/hisimhv/hsmhvset.c, * src/spicelib/devices/hisimhv/hsmhvtemp.c, * src/spicelib/devices/hisimhv/hsmhvtemp_eval.h, * src/spicelib/devices/hisimhv/hsmhvtrunc.c, * src/spicelib/devices/hisimhv1/Makefile.am, * src/spicelib/devices/hisimhv1/hisimhv.h, * src/spicelib/devices/hisimhv1/hsmhv.c, * src/spicelib/devices/hisimhv1/hsmhvacld.c, * src/spicelib/devices/hisimhv1/hsmhvask.c, * src/spicelib/devices/hisimhv1/hsmhvcvtest.c, * src/spicelib/devices/hisimhv1/hsmhvdef.h, * src/spicelib/devices/hisimhv1/hsmhvdel.c, * src/spicelib/devices/hisimhv1/hsmhvdest.c, * src/spicelib/devices/hisimhv1/hsmhveval.c, * src/spicelib/devices/hisimhv1/hsmhveval_qover.h, * src/spicelib/devices/hisimhv1/hsmhvevalenv.h, * src/spicelib/devices/hisimhv1/hsmhvext.h, * src/spicelib/devices/hisimhv1/hsmhvgetic.c, * src/spicelib/devices/hisimhv1/hsmhvinit.c, * src/spicelib/devices/hisimhv1/hsmhvinit.h, * src/spicelib/devices/hisimhv1/hsmhvitf.h, * src/spicelib/devices/hisimhv1/hsmhvld.c, * src/spicelib/devices/hisimhv1/hsmhvld_info_eval.h, * src/spicelib/devices/hisimhv1/hsmhvmask.c, * src/spicelib/devices/hisimhv1/hsmhvmdel.c, * src/spicelib/devices/hisimhv1/hsmhvmpar.c, * src/spicelib/devices/hisimhv1/hsmhvnoi.c, * src/spicelib/devices/hisimhv1/hsmhvpar.c, * src/spicelib/devices/hisimhv1/hsmhvpzld.c, * src/spicelib/devices/hisimhv1/hsmhvset.c, * src/spicelib/devices/hisimhv1/hsmhvtemp.c, * src/spicelib/devices/hisimhv1/hsmhvtemp_eval.h, * src/spicelib/devices/hisimhv1/hsmhvtrunc.c, * tests/hisimhv/Makefile.am, * tests/hisimhv/nmos/parameters/nmosParameters, * tests/hisimhv/nmos/qaSpec, * tests/hisimhv/nmos/qaSpec.basic, * tests/hisimhv/nmos/reference/acFreq.standard, * tests/hisimhv/nmos/reference/acFreq_coadov.standard, * tests/hisimhv/nmos/reference/acFreq_coiigs.standard, * tests/hisimhv/nmos/reference/acFreq_conqs.standard, * tests/hisimhv/nmos/reference/acFreq_coovlp.standard, * tests/hisimhv/nmos/reference/acFreq_cosym.standard, * tests/hisimhv/nmos/reference/acFreq_nover.standard, * tests/hisimhv/nmos/reference/acVd.standard, * tests/hisimhv/nmos/reference/acVd_corsrd1.standard, * tests/hisimhv/nmos/reference/acVd_corsrd2.standard, * tests/hisimhv/nmos/reference/acVd_cosym.standard, * tests/hisimhv/nmos/reference/acVd_cvdsover.standard, * tests/hisimhv/nmos/reference/dcSw_Id1_vb0.standard, * tests/hisimhv/nmos/reference/dcSw_Id1_vb0_jd.standard, * tests/hisimhv/nmos/reference/dcSw_Id1_vb1.standard, * tests/hisimhv/nmos/reference/dcSw_Id1_vb2.standard, * tests/hisimhv/nmos/reference/dcSw_Ig1_vb0.standard, * tests/hisimhv/nmos/reference/dcSw_Ig1_vb0_jd.standard, * tests/hisimhv/nmos/reference/dcSw_Ig1_vb1.standard, * tests/hisimhv/nmos/reference/dcSw_Ig1_vb2.standard, * tests/hisimhv/nmos/reference/dcSw_corsrd0.standard, * tests/hisimhv/nmos/reference/dcSw_corsrd1.standard, * tests/hisimhv/nmos/reference/dcSw_corsrd2.standard, * tests/hisimhv/nmos/reference/dcSw_cosym.standard, * tests/hisimhv/nmos/reference/dcSw_gidl.standard, * tests/hisimhv/nmos/reference/dcSw_isub.standard, * tests/hisimhv/nmos/reference/dcSw_ld2.standard, * tests/hisimhv/nmos/reference/dcSw_lg2.standard, * tests/hisimhv/nmos/reference/dcSw_rs2m.standard, * tests/hisimhv/nmos/reference/dcSw_she.standard, * tests/hisimhv/nmos/reference/noise1.standard, * tests/hisimhv/nmos/reference/noise2.standard, * tests/hisimhv/nmos/run, * tests/hisimhv/pmos/parameters/pmosParameters, * tests/hisimhv/pmos/qaSpec, * tests/hisimhv/pmos/qaSpec.basic, * tests/hisimhv/pmos/reference/acFreq.standard, * tests/hisimhv/pmos/reference/acFreq_coadov.standard, * tests/hisimhv/pmos/reference/acFreq_coiigs.standard, * tests/hisimhv/pmos/reference/acFreq_conqs.standard, * tests/hisimhv/pmos/reference/acFreq_coovlp.standard, * tests/hisimhv/pmos/reference/acFreq_cosym.standard, * tests/hisimhv/pmos/reference/acFreq_nover.standard, * tests/hisimhv/pmos/reference/acVd.standard, * tests/hisimhv/pmos/reference/acVd_corsrd1.standard, * tests/hisimhv/pmos/reference/acVd_corsrd2.standard, * tests/hisimhv/pmos/reference/acVd_cosym.standard, * tests/hisimhv/pmos/reference/acVd_cvdsover.standard, * tests/hisimhv/pmos/reference/dcSw_Id1_vb0.standard, * tests/hisimhv/pmos/reference/dcSw_Id1_vb0_jd.standard, * tests/hisimhv/pmos/reference/dcSw_Id1_vb1.standard, * tests/hisimhv/pmos/reference/dcSw_Id1_vb2.standard, * tests/hisimhv/pmos/reference/dcSw_Ig1_vb0.standard, * tests/hisimhv/pmos/reference/dcSw_Ig1_vb0_jd.standard, * tests/hisimhv/pmos/reference/dcSw_Ig1_vb1.standard, * tests/hisimhv/pmos/reference/dcSw_Ig1_vb2.standard, * tests/hisimhv/pmos/reference/dcSw_corsrd0.standard, * tests/hisimhv/pmos/reference/dcSw_corsrd1.standard, * tests/hisimhv/pmos/reference/dcSw_corsrd2.standard, * tests/hisimhv/pmos/reference/dcSw_cosym.standard, * tests/hisimhv/pmos/reference/dcSw_gidl.standard, * tests/hisimhv/pmos/reference/dcSw_isub.standard, * tests/hisimhv/pmos/reference/dcSw_ld2.standard, * tests/hisimhv/pmos/reference/dcSw_lg2.standard, * tests/hisimhv/pmos/reference/dcSw_rs2m.standard, * tests/hisimhv/pmos/reference/dcSw_she.standard, * tests/hisimhv/pmos/reference/noise1.standard, * tests/hisimhv/pmos/reference/noise2.standard, * tests/hisimhv/pmos/run, * tests/hisimhv1/Makefile.am, * tests/hisimhv1/nmos/parameters/nmosParameters, * tests/hisimhv1/nmos/qaSpec, * tests/hisimhv1/nmos/qaSpec.basic, * tests/hisimhv1/nmos/reference/acFreq.standard, * tests/hisimhv1/nmos/reference/acFreq_coadov.standard, * tests/hisimhv1/nmos/reference/acFreq_coiigs.standard, * tests/hisimhv1/nmos/reference/acFreq_conqs.standard, * tests/hisimhv1/nmos/reference/acFreq_coovlp.standard, * tests/hisimhv1/nmos/reference/acFreq_cosym.standard, * tests/hisimhv1/nmos/reference/acFreq_nover.standard, * tests/hisimhv1/nmos/reference/acVd.standard, * tests/hisimhv1/nmos/reference/acVd_corsrd1.standard, * tests/hisimhv1/nmos/reference/acVd_corsrd2.standard, * tests/hisimhv1/nmos/reference/acVd_cosym.standard, * tests/hisimhv1/nmos/reference/acVd_cvdsover.standard, * tests/hisimhv1/nmos/reference/dcSw_Id1_vb0.standard, * tests/hisimhv1/nmos/reference/dcSw_Id1_vb0_jd.standard, * tests/hisimhv1/nmos/reference/dcSw_Id1_vb1.standard, * tests/hisimhv1/nmos/reference/dcSw_Id1_vb2.standard, * tests/hisimhv1/nmos/reference/dcSw_Ig1_vb0.standard, * tests/hisimhv1/nmos/reference/dcSw_Ig1_vb0_jd.standard, * tests/hisimhv1/nmos/reference/dcSw_Ig1_vb1.standard, * tests/hisimhv1/nmos/reference/dcSw_Ig1_vb2.standard, * tests/hisimhv1/nmos/reference/dcSw_corsrd0.standard, * tests/hisimhv1/nmos/reference/dcSw_corsrd1.standard, * tests/hisimhv1/nmos/reference/dcSw_corsrd2.standard, * tests/hisimhv1/nmos/reference/dcSw_cosym.standard, * tests/hisimhv1/nmos/reference/dcSw_gidl.standard, * tests/hisimhv1/nmos/reference/dcSw_isub.standard, * tests/hisimhv1/nmos/reference/dcSw_ld2.standard, * tests/hisimhv1/nmos/reference/dcSw_lg2.standard, * tests/hisimhv1/nmos/reference/dcSw_rs2m.standard, * tests/hisimhv1/nmos/reference/dcSw_she.standard, * tests/hisimhv1/nmos/reference/noise1.standard, * tests/hisimhv1/nmos/reference/noise2.standard, * tests/hisimhv1/nmos/run, * tests/hisimhv1/pmos/parameters/pmosParameters, * tests/hisimhv1/pmos/qaSpec, * tests/hisimhv1/pmos/qaSpec.basic, * tests/hisimhv1/pmos/reference/acFreq.standard, * tests/hisimhv1/pmos/reference/acFreq_coadov.standard, * tests/hisimhv1/pmos/reference/acFreq_coiigs.standard, * tests/hisimhv1/pmos/reference/acFreq_conqs.standard, * tests/hisimhv1/pmos/reference/acFreq_coovlp.standard, * tests/hisimhv1/pmos/reference/acFreq_cosym.standard, * tests/hisimhv1/pmos/reference/acFreq_nover.standard, * tests/hisimhv1/pmos/reference/acVd.standard, * tests/hisimhv1/pmos/reference/acVd_corsrd1.standard, * tests/hisimhv1/pmos/reference/acVd_corsrd2.standard, * tests/hisimhv1/pmos/reference/acVd_cosym.standard, * tests/hisimhv1/pmos/reference/acVd_cvdsover.standard, * tests/hisimhv1/pmos/reference/dcSw_Id1_vb0.standard, * tests/hisimhv1/pmos/reference/dcSw_Id1_vb0_jd.standard, * tests/hisimhv1/pmos/reference/dcSw_Id1_vb1.standard, * tests/hisimhv1/pmos/reference/dcSw_Id1_vb2.standard, * tests/hisimhv1/pmos/reference/dcSw_Ig1_vb0.standard, * tests/hisimhv1/pmos/reference/dcSw_Ig1_vb0_jd.standard, * tests/hisimhv1/pmos/reference/dcSw_Ig1_vb1.standard, * tests/hisimhv1/pmos/reference/dcSw_Ig1_vb2.standard, * tests/hisimhv1/pmos/reference/dcSw_corsrd0.standard, * tests/hisimhv1/pmos/reference/dcSw_corsrd1.standard, * tests/hisimhv1/pmos/reference/dcSw_corsrd2.standard, * tests/hisimhv1/pmos/reference/dcSw_cosym.standard, * tests/hisimhv1/pmos/reference/dcSw_gidl.standard, * tests/hisimhv1/pmos/reference/dcSw_isub.standard, * tests/hisimhv1/pmos/reference/dcSw_ld2.standard, * tests/hisimhv1/pmos/reference/dcSw_lg2.standard, * tests/hisimhv1/pmos/reference/dcSw_rs2m.standard, * tests/hisimhv1/pmos/reference/dcSw_she.standard, * tests/hisimhv1/pmos/reference/noise1.standard, * tests/hisimhv1/pmos/reference/noise2.standard, * tests/hisimhv1/pmos/run: rename directories hisimhv --> hisimhv1 2012-11-21 dwarning * src/frontend/plotting/gnuplot.c: gnuplot.c: allow png terminal by gnuplot_terminal variable 2012-11-21 dwarning * tests/hisim/nmos/reference/10_dcSweep_COGIDL=0.standard, * tests/hisim/nmos/reference/11_dcSweep_COGIDL=1.standard, * tests/hisim/nmos/reference/12_dcSweep_COGIDL=1.standard, * tests/hisim/nmos/reference/13_dcSweep_COISTI=0.standard, * tests/hisim/nmos/reference/14_dcSweep_COISTI=1_NSUBC.standard, * tests/hisim/nmos/reference/15_dcSweep_COISTI=1_NSUBP.standard, * tests/hisim/nmos/reference/16_dcSweep_WPE.standard, * tests/hisim/nmos/reference/19_dcSweep_CORG=0.standard, * tests/hisim/nmos/reference/1_dcSweep_CORSRD=0.standard, * tests/hisim/nmos/reference/20_dcSweep_CORG=1.standard, * tests/hisim/nmos/reference/21_dcSweep_CORBNET=0.standard, * tests/hisim/nmos/reference/22_dcSweep_CORBNET=1.standard, * tests/hisim/nmos/reference/23_dcSweep_CODFM=0.standard, * tests/hisim/nmos/reference/24_dcSweep_CODFM=1.standard, * tests/hisim/nmos/reference/25_dcSweep_VFBCL.standard, * tests/hisim/nmos/reference/2_dcSweep_CORSRD=-1_GDLD.standard, * tests/hisim/nmos/reference/35_acVd_CORSRD=0.standard, * tests/hisim/nmos/reference/36_acVd_CORSRD=-1_GDLD.standard, * tests/hisim/nmos/reference/37_acVd_CORSRD=-1_PT.standard, * tests/hisim/nmos/reference/38_acVd_WPE.standard, * tests/hisim/nmos/reference/39_acVd_VFBCL.standard, * tests/hisim/nmos/reference/3_dcSweep_CORSRD=-1_PT.standard, * tests/hisim/nmos/reference/45_acFreq_COOVLP=1.standard, * tests/hisim/nmos/reference/46_acFreq_COISUB=0.standard, * tests/hisim/nmos/reference/47_acFreq_COISUB=1.standard, * tests/hisim/nmos/reference/48_acFreq_COIIGS=0.standard, * tests/hisim/nmos/reference/49_acFreq_COIIGS=1.standard, * tests/hisim/nmos/reference/4_dcSweep_NSUBPFAC.standard, * tests/hisim/nmos/reference/50_acFreq_COGIDL=0.standard, * tests/hisim/nmos/reference/51_acFreq_COGIDL=1.standard, * tests/hisim/nmos/reference/52_acFreq_COSTI=0.standard, * tests/hisim/nmos/reference/53_acFreq_COSTI=1.standard, * tests/hisim/nmos/reference/54_acFreq_COADOV=0.standard, * tests/hisim/nmos/reference/55_acFreq_COADOV=1.standard, * tests/hisim/nmos/reference/56_acFreq_CONQS=0.standard, * tests/hisim/nmos/reference/57_acFreq_CONQS=1.standard, * tests/hisim/nmos/reference/58_acFreq_CORG=0.standard, * tests/hisim/nmos/reference/59_acFreq_CORG=1.standard, * tests/hisim/nmos/reference/5_dcSweep_NSUBPDLT.standard, * tests/hisim/nmos/reference/60_acFreq_CORBNET=0.standard, * tests/hisim/nmos/reference/61_acFreq_CORBNET=1.standard, * tests/hisim/nmos/reference/62_acFreq_COFLICK=0.standard, * tests/hisim/nmos/reference/63_acFreq_COFLICK=1.standard, * tests/hisim/nmos/reference/64_acFreq_COTHRML=0.standard, * tests/hisim/nmos/reference/65_acFreq_COTHRML=1.standard, * tests/hisim/nmos/reference/66_acFreq_COIGN=0.standard, * tests/hisim/nmos/reference/67_acFreq_COIGN=1.standard, * tests/hisim/nmos/reference/68_acFreq_WPE.standard, * tests/hisim/nmos/reference/69_acFreq_CODFM=0.standard, * tests/hisim/nmos/reference/6_dcSweep_COISUB=0.standard, * tests/hisim/nmos/reference/70_acFreq_CODFM=1.standard, * tests/hisim/nmos/reference/75_noise_COIGN=1_T27.standard, * tests/hisim/nmos/reference/76_noise_COIGN=1_T-55.standard, * tests/hisim/nmos/reference/77_noise_COIGN=1_T150.standard, * tests/hisim/nmos/reference/78_noise_COIGN=0_T27.standard, * tests/hisim/nmos/reference/79_noise_COIGN=0_T-55.standard, * tests/hisim/nmos/reference/7_dcSweep_COISUB=1.standard, * tests/hisim/nmos/reference/80_noise_COIGN=0_T150.standard, * tests/hisim/nmos/reference/8_dcSweep_COIIGS=0.standard, * tests/hisim/nmos/reference/9_dcSweep_COIIGS=1.standard, * tests/hisim/pmos/reference/10_dcSweep_COGIDL=0.standard, * tests/hisim/pmos/reference/11_dcSweep_COGIDL=1.standard, * tests/hisim/pmos/reference/12_dcSweep_COGIDL=1.standard, * tests/hisim/pmos/reference/13_dcSweep_COISTI=0.standard, * tests/hisim/pmos/reference/14_dcSweep_COISTI=1_NSUBC.standard, * tests/hisim/pmos/reference/15_dcSweep_COISTI=1_NSUBP.standard, * tests/hisim/pmos/reference/16_dcSweep_WPE.standard, * tests/hisim/pmos/reference/19_dcSweep_CORG=0.standard, * tests/hisim/pmos/reference/1_dcSweep_CORSRD=0.standard, * tests/hisim/pmos/reference/20_dcSweep_CORG=1.standard, * tests/hisim/pmos/reference/21_dcSweep_CORBNET=0.standard, * tests/hisim/pmos/reference/22_dcSweep_CORBNET=1.standard, * tests/hisim/pmos/reference/23_dcSweep_CODFM=0.standard, * tests/hisim/pmos/reference/24_dcSweep_CODFM=1.standard, * tests/hisim/pmos/reference/25_dcSweep_VFBCL.standard, * tests/hisim/pmos/reference/2_dcSweep_CORSRD=-1_GDLD.standard, * tests/hisim/pmos/reference/35_acVd_CORSRD=0.standard, * tests/hisim/pmos/reference/36_acVd_CORSRD=-1_GDLD.standard, * tests/hisim/pmos/reference/37_acVd_CORSRD=-1_PT.standard, * tests/hisim/pmos/reference/38_acVd_WPE.standard, * tests/hisim/pmos/reference/39_acVd_VFBCL.standard, * tests/hisim/pmos/reference/3_dcSweep_CORSRD=-1_PT.standard, * tests/hisim/pmos/reference/45_acFreq_COOVLP=1.standard, * tests/hisim/pmos/reference/46_acFreq_COISUB=0.standard, * tests/hisim/pmos/reference/47_acFreq_COISUB=1.standard, * tests/hisim/pmos/reference/48_acFreq_COIIGS=0.standard, * tests/hisim/pmos/reference/49_acFreq_COIIGS=1.standard, * tests/hisim/pmos/reference/4_dcSweep_NSUBPFAC.standard, * tests/hisim/pmos/reference/50_acFreq_COGIDL=0.standard, * tests/hisim/pmos/reference/51_acFreq_COGIDL=1.standard, * tests/hisim/pmos/reference/52_acFreq_COSTI=0.standard, * tests/hisim/pmos/reference/53_acFreq_COSTI=1.standard, * tests/hisim/pmos/reference/54_acFreq_COADOV=0.standard, * tests/hisim/pmos/reference/55_acFreq_COADOV=1.standard, * tests/hisim/pmos/reference/56_acFreq_CONQS=0.standard, * tests/hisim/pmos/reference/57_acFreq_CONQS=1.standard, * tests/hisim/pmos/reference/58_acFreq_CORG=0.standard, * tests/hisim/pmos/reference/59_acFreq_CORG=1.standard, * tests/hisim/pmos/reference/5_dcSweep_NSUBPDLT.standard, * tests/hisim/pmos/reference/60_acFreq_CORBNET=0.standard, * tests/hisim/pmos/reference/61_acFreq_CORBNET=1.standard, * tests/hisim/pmos/reference/62_acFreq_COFLICK=0.standard, * tests/hisim/pmos/reference/63_acFreq_COFLICK=1.standard, * tests/hisim/pmos/reference/64_acFreq_COTHRML=0.standard, * tests/hisim/pmos/reference/65_acFreq_COTHRML=1.standard, * tests/hisim/pmos/reference/66_acFreq_COIGN=0.standard, * tests/hisim/pmos/reference/67_acFreq_COIGN=1.standard, * tests/hisim/pmos/reference/68_acFreq_WPE.standard, * tests/hisim/pmos/reference/69_acFreq_CODFM=0.standard, * tests/hisim/pmos/reference/6_dcSweep_COISUB=0.standard, * tests/hisim/pmos/reference/70_acFreq_CODFM=1.standard, * tests/hisim/pmos/reference/75_noise_COIGN=1_T27.standard, * tests/hisim/pmos/reference/76_noise_COIGN=1_T-55.standard, * tests/hisim/pmos/reference/77_noise_COIGN=1_T150.standard, * tests/hisim/pmos/reference/78_noise_COIGN=0_T27.standard, * tests/hisim/pmos/reference/79_noise_COIGN=0_T-55.standard, * tests/hisim/pmos/reference/7_dcSweep_COISUB=1.standard, * tests/hisim/pmos/reference/80_noise_COIGN=0_T150.standard, * tests/hisim/pmos/reference/8_dcSweep_COIIGS=0.standard, * tests/hisim/pmos/reference/9_dcSweep_COIIGS=1.standard: update hisim to version 2.7.0 2012-11-21 dwarning * tests/hisim/nmos/parameters/nmosParameters, * tests/hisim/nmos/qaSpec, * tests/hisim/nmos/reference/10_dcSweep_COIIGS=1.standard, * tests/hisim/nmos/reference/11_dcSweep_COGIDL=0.standard, * tests/hisim/nmos/reference/12_dcSweep_COGIDL=1.standard, * tests/hisim/nmos/reference/13_dcSweep_COISTI=0.standard, * tests/hisim/nmos/reference/14_dcSweep_COISTI=1.standard, * tests/hisim/nmos/reference/15_dcSweep_WPE.standard, * tests/hisim/nmos/reference/19_dcSweep_CORG=0.standard, * tests/hisim/nmos/reference/2-1_dcSweep_CORSRD=0.standard, * tests/hisim/nmos/reference/2-2_dcSweep_CORSRD=0.standard, * tests/hisim/nmos/reference/20_dcSweep_CORG=1.standard, * tests/hisim/nmos/reference/21_dcSweep_CORBNET=0.standard, * tests/hisim/nmos/reference/22_dcSweep_CORBNET=1.standard, * tests/hisim/nmos/reference/2_dcSweep_CORSRD=0.standard, * tests/hisim/nmos/reference/33_dcSweep_CODFM=0.standard, * tests/hisim/nmos/reference/34_dcSweep_CODFM=1.standard, * tests/hisim/nmos/reference/36-1_acVd_CORSRD=0.standard, * tests/hisim/nmos/reference/36-2_acVd_CORSRD=0.standard, * tests/hisim/nmos/reference/36_acVd_CORSRD=0.standard, * tests/hisim/nmos/reference/37_acVd_WPE.standard, * tests/hisim/nmos/reference/40_acFreq_COOVLP=1.standard, * tests/hisim/nmos/reference/41_acFreq_COISUB=0.standard, * tests/hisim/nmos/reference/42_acFreq_COISUB=1.standard, * tests/hisim/nmos/reference/43_acFreq_COIIGS=0.standard, * tests/hisim/nmos/reference/44_acFreq_COIIGS=1.standard, * tests/hisim/nmos/reference/45_acFreq_COGIDL=0.standard, * tests/hisim/nmos/reference/46_acFreq_COGIDL=1.standard, * tests/hisim/nmos/reference/47_acFreq_COSTI=0.standard, * tests/hisim/nmos/reference/48_acFreq_COSTI=1.standard, * tests/hisim/nmos/reference/49_acFreq_COADOV=0.standard, * tests/hisim/nmos/reference/50_acFreq_COADOV=1.standard, * tests/hisim/nmos/reference/51_acFreq_CONQS=0.standard, * tests/hisim/nmos/reference/52_acFreq_CONQS=1.standard, * tests/hisim/nmos/reference/53_acFreq_CORG=0.standard, * tests/hisim/nmos/reference/54_acFreq_CORG=1.standard, * tests/hisim/nmos/reference/55_acFreq_CORBNET=0.standard, * tests/hisim/nmos/reference/56_acFreq_CORBNET=1.standard, * tests/hisim/nmos/reference/57_acFreq_COFLICK=0.standard, * tests/hisim/nmos/reference/58_acFreq_COFLICK=1.standard, * tests/hisim/nmos/reference/59_acFreq_COTHRML=0.standard, * tests/hisim/nmos/reference/60_acFreq_COTHRML=1.standard, * tests/hisim/nmos/reference/61_acFreq_COIGN=0.standard, * tests/hisim/nmos/reference/62_acFreq_COIGN=1.standard, * tests/hisim/nmos/reference/63_acFreq_WPE.standard, * tests/hisim/nmos/reference/67_acFreq_CODFM=0.standard, * tests/hisim/nmos/reference/68_acFreq_CODFM=1.standard, * tests/hisim/nmos/reference/69-1_noise_COIGN=1_T-55.standard, * tests/hisim/nmos/reference/69-2_noise_COIGN=1_T150.standard, * tests/hisim/nmos/reference/69_noise_COIGN=1_T27.standard, * tests/hisim/nmos/reference/70-1_noise_COIGN=0_T-55.standard, * tests/hisim/nmos/reference/70-2_noise_COIGN=0_T150.standard, * tests/hisim/nmos/reference/70_noise_COIGN=0_T27.standard, * tests/hisim/nmos/reference/7_dcSweep_COISUB=0.standard, * tests/hisim/nmos/reference/8_dcSweep_COISUB=1.standard, * tests/hisim/nmos/reference/9_dcSweep_COIIGS=0.standard, * tests/hisim/pmos/qaSpec, * tests/hisim/pmos/reference/10_dcSweep_COIIGS=1.standard, * tests/hisim/pmos/reference/11_dcSweep_COGIDL=0.standard, * tests/hisim/pmos/reference/12_dcSweep_COGIDL=1.standard, * tests/hisim/pmos/reference/13_dcSweep_COISTI=0.standard, * tests/hisim/pmos/reference/14_dcSweep_COISTI=1.standard, * tests/hisim/pmos/reference/15_dcSweep_WPE.standard, * tests/hisim/pmos/reference/19_dcSweep_CORG=0.standard, * tests/hisim/pmos/reference/2-1_dcSweep_CORSRD=0.standard, * tests/hisim/pmos/reference/2-2_dcSweep_CORSRD=0.standard, * tests/hisim/pmos/reference/20_dcSweep_CORG=1.standard, * tests/hisim/pmos/reference/21_dcSweep_CORBNET=0.standard, * tests/hisim/pmos/reference/22_dcSweep_CORBNET=1.standard, * tests/hisim/pmos/reference/2_dcSweep_CORSRD=0.standard, * tests/hisim/pmos/reference/33_dcSweep_CODFM=0.standard, * tests/hisim/pmos/reference/34_dcSweep_CODFM=1.standard, * tests/hisim/pmos/reference/36-1_acVd_CORSRD=0.standard, * tests/hisim/pmos/reference/36-2_acVd_CORSRD=0.standard, * tests/hisim/pmos/reference/36_acVd_CORSRD=0.standard, * tests/hisim/pmos/reference/37_acVd_WPE.standard, * tests/hisim/pmos/reference/40_acFreq_COOVLP=1.standard, * tests/hisim/pmos/reference/41_acFreq_COISUB=0.standard, * tests/hisim/pmos/reference/42_acFreq_COISUB=1.standard, * tests/hisim/pmos/reference/43_acFreq_COIIGS=0.standard, * tests/hisim/pmos/reference/44_acFreq_COIIGS=1.standard, * tests/hisim/pmos/reference/45_acFreq_COGIDL=0.standard, * tests/hisim/pmos/reference/46_acFreq_COGIDL=1.standard, * tests/hisim/pmos/reference/47_acFreq_COSTI=0.standard, * tests/hisim/pmos/reference/48_acFreq_COSTI=1.standard, * tests/hisim/pmos/reference/49_acFreq_COADOV=0.standard, * tests/hisim/pmos/reference/50_acFreq_COADOV=1.standard, * tests/hisim/pmos/reference/51_acFreq_CONQS=0.standard, * tests/hisim/pmos/reference/52_acFreq_CONQS=1.standard, * tests/hisim/pmos/reference/53_acFreq_CORG=0.standard, * tests/hisim/pmos/reference/54_acFreq_CORG=1.standard, * tests/hisim/pmos/reference/55_acFreq_CORBNET=0.standard, * tests/hisim/pmos/reference/56_acFreq_CORBNET=1.standard, * tests/hisim/pmos/reference/57_acFreq_COFLICK=0.standard, * tests/hisim/pmos/reference/58_acFreq_COFLICK=1.standard, * tests/hisim/pmos/reference/59_acFreq_COTHRML=0.standard, * tests/hisim/pmos/reference/60_acFreq_COTHRML=1.standard, * tests/hisim/pmos/reference/61_acFreq_COIGN=0.standard, * tests/hisim/pmos/reference/62_acFreq_COIGN=1.standard, * tests/hisim/pmos/reference/63_acFreq_WPE.standard, * tests/hisim/pmos/reference/67_acFreq_CODFM=0.standard, * tests/hisim/pmos/reference/68_acFreq_CODFM=1.standard, * tests/hisim/pmos/reference/69-1_noise_COIGN=1_T-55.standard, * tests/hisim/pmos/reference/69-2_noise_COIGN=1_T150.standard, * tests/hisim/pmos/reference/69_noise_COIGN=1_T27.standard, * tests/hisim/pmos/reference/70-1_noise_COIGN=0_T-55.standard, * tests/hisim/pmos/reference/70-2_noise_COIGN=0_T150.standard, * tests/hisim/pmos/reference/70_noise_COIGN=0_T27.standard, * tests/hisim/pmos/reference/7_dcSweep_COISUB=0.standard, * tests/hisim/pmos/reference/8_dcSweep_COISUB=1.standard, * tests/hisim/pmos/reference/9_dcSweep_COIIGS=0.standard: update hisim to version 2.7.0 2012-11-21 dwarning * src/spicelib/devices/hisim2/hisim2.h, * src/spicelib/devices/hisim2/hsm2.c, * src/spicelib/devices/hisim2/hsm2acld.c, * src/spicelib/devices/hisim2/hsm2ask.c, * src/spicelib/devices/hisim2/hsm2cvtest.c, * src/spicelib/devices/hisim2/hsm2def.h, * src/spicelib/devices/hisim2/hsm2del.c, * src/spicelib/devices/hisim2/hsm2dest.c, * src/spicelib/devices/hisim2/hsm2eval.c, * src/spicelib/devices/hisim2/hsm2evalenv.h, * src/spicelib/devices/hisim2/hsm2ext.h, * src/spicelib/devices/hisim2/hsm2getic.c, * src/spicelib/devices/hisim2/hsm2init.c, * src/spicelib/devices/hisim2/hsm2itf.h, * src/spicelib/devices/hisim2/hsm2ld.c, * src/spicelib/devices/hisim2/hsm2mask.c, * src/spicelib/devices/hisim2/hsm2mdel.c, * src/spicelib/devices/hisim2/hsm2mpar.c, * src/spicelib/devices/hisim2/hsm2noi.c, * src/spicelib/devices/hisim2/hsm2par.c, * src/spicelib/devices/hisim2/hsm2pzld.c, * src/spicelib/devices/hisim2/hsm2set.c, * src/spicelib/devices/hisim2/hsm2temp.c, * src/spicelib/devices/hisim2/hsm2trunc.c: update hisim to version 2.7.0 2012-11-21 Francesco Lannutti * src/spicelib/devices/bsim3/b3ld.c, * src/spicelib/devices/bsim3v32/b3v32ld.c, * src/spicelib/devices/bsim4/b4ld.c: b3ld.c, b4ld.c, b3v32ld.c: charge computation for MODEDCTRANCURCE instead of MODEDC this is a fix for commit: b3ld.c, b4ld.c, b3v32ld.c: enable capacitance calculation during dc sweep 2012-11-19 h_vogt * src/xspice/mif/mif_inp2.c: mif_inp2.c: bug 3389072 fixed 2012-11-19 h_vogt * src/xspice/mif/mif_inp2.c: beautify code 2012-11-17 h_vogt * examples/various/adder_mos.cir, * examples/various/agauss_test.cir, * examples/various/gain_stage.cir, * examples/various/param_sweep.cir: input examples drawn from manual 2012-11-17 h_vogt * src/frontend/inp.c: inp.c: pre_ to allow command execution from the .control section before parsing the circuit 2012-11-16 rlar * Makefile.am, * src/xspice/Makefile.am, * src/xspice/cmpp/Makefile.am, * tests/Makefile.am: fix `make dist' 2012-11-07 h_vogt * src/frontend/outitf.c: outitf.c: do not call clock() if MS Windows GUI 2012-11-07 rlar * src/frontend/variable.c: improve commit `variable.c: add strict error handling' 2012-11-07 dwarning * src/spicelib/parser/inpdomod.c: make the level switch compatible for HiSIM2 and HiSIMHV 2012-11-07 dwarning * src/spicelib/parser/inpdomod.c: rm whitespaces 2012-11-06 Francesco Lannutti * src/frontend/Makefile.am: remove "error.h" from Makefile.am this file is not anymore in the "frontend" folder and "make dist" failed to generate the tarball 2012-11-06 dwarning * src/frontend/subckt.c: fix a leak in devmodtranslate 3 terminal section 2012-11-06 Francesco Lannutti * src/frontend/wdisp/windisp.c, * src/frontend/wdisp/winprint.c: move windows specific `STRICT' definition to canonical place 2012-11-06 Francesco Lannutti * Makefile.am: Makefile.am, add `ar-lib' to the MAINTAINERCLEANFILES 2012-11-06 Francesco Lannutti * Makefile.am, * autogen.sh, * src/spicelib/Makefile.am, * src/xspice/Makefile.am: Makefiles, drop some CVS remnants 2012-11-06 Francesco Lannutti * src/frontend/com_fft.c: avoid a compiler warning, (unused static function) 2012-11-06 Francesco Lannutti * src/xspice/icm/makedefs.in: Added datarootdir variable as usual behavior and to avoid autoconf warning 2012-11-06 Francesco Lannutti * src/ngsconvert.c: Solved linking error for ngsconvert after ft_stricterror patch in src/frontend/variable.c 2012-11-05 Francesco Lannutti * src/frontend/com_dl.c: fix #include <> versus "" 2012-11-05 rlar * src/xspice/icm/GNUmakefile.in, * src/xspice/icm/makedefs.in: XSPICE, install dlmain.c for separate compilation of XSPICE user models 2012-11-05 Francesco Lannutti * configure.ac: configure.ac, defensive use of `AM_SILENT_RULES' 2012-11-05 dwarning * src/frontend/subckt.c: allow more then 4 terminal mos models in subckts 2012-11-04 h_vogt * src/frontend/variable.c: variable.c: add strict error handling 2012-11-04 h_vogt * src/frontend/inpcom.c: inpcom.c: remove bug in inp_add_series_resistor(), prevent crash in inp_remove_ws() upon erroneous input 2012-11-04 h_vogt * src/frontend/inp.c: inp.c: avoid crash if setparse() returns NULL 2012-11-03 h_vogt * examples/snapshot/adder_mos.cir, * examples/snapshot/adder_mos_circ.cir, * examples/snapshot/adder_snload.script: examples/snapshot: start, interrupt and resume simulation 2012-11-03 h_vogt * src/frontend/spiceif.c: spiceif.c: correct types being loaded by snload() 2012-11-02 Francesco Lannutti * Makefile.am: make maintainer-clean shall remove the m4/ directory too 2012-11-01 h_vogt * src/frontend/commands.c, * src/frontend/spiceif.c, * src/frontend/spiceif.h, * src/main.c: rename commands 'savesnap', 'loadsnap' to 'snsave', 'snload' to avoid conflict with command 'save' 2012-01-15 rlar * src/spicelib/devices/hisim2/hsm2eval.c, * src/spicelib/devices/hisim2/hsm2temp.c: hisim2, bug fix, a numerical problem in the hisim2 and hisimhv models First seen when compiled with gcc-4.6.2 -g -O1 The macro `Fn_SZ' which boils down to 1/2 * (x + sqrt(x*x + c*c)) was used in a context where a negative result blew up the following computations. (used to compute `Egidl', which is used to compute exp(-1 / (Egidl + small_constant))) For large negative values of x the computation boils down to 1/2 ( x + almost(|x|) ) where the summands almost cancel each other, sometimes yielding a small negative result. small_constant was too small to avoid a big result for -1/(Egidl + small_constant) yielding an `inf' during the exp() computation, which was later multiplied with a `0' yielding a NaN, which was carried forward during the rest of computations. Because the error of the cancellation scales with the magnitude of x, no larger `small_constant' could have avoided the problem. Presumably the problem was amplified by a mixture of precisions (double versus extended float) of intermediate values. (the program wasn't compiled for sse) ( x was -2.812500e+06, c was 1.000000e-02, Fn_SZ result was -1.853095e-11 thus the cancellation remainder was of relative size 6.6e-18 which is approximately 2^-57 and thus more accurate as a `double float' could have delivered ) 2012-11-01 rlar * src/spicelib/devices/hisim2/hsm2noi.c: hisim2, use TMALLOC, funcall, and NULL casts 2011-05-22 rlar * src/spicelib/devices/hisim2/hsm2noi.c: hisim2, fix NevalSrc(), Nintegrate() redeclaration 2012-10-29 h_vogt * src/frontend/inpcom.c: inpcom.c: add series resistor to each inductor with option rseries=1m 2012-10-29 h_vogt * src/frontend/com_ghelp.c: com_ghelp.c: better message for help under Windows 2012-10-29 Francesco Lannutti * autogen.sh: autogen.sh, fix for Mac OS X 2012-10-26 Francesco Lannutti * .cvsignore, * doc/.cvsignore, * man/.cvsignore, * man/man1/.cvsignore, * src/.cvsignore, * src/ciderlib/.cvsignore, * src/ciderlib/input/.cvsignore, * src/ciderlib/oned/.cvsignore, * src/ciderlib/support/.cvsignore, * src/ciderlib/twod/.cvsignore, * src/frontend/.cvsignore, * src/frontend/help/.cvsignore, * src/frontend/numparam/.cvsignore, * src/frontend/parser/.cvsignore, * src/frontend/plotting/.cvsignore, * src/frontend/trannoise/.cvsignore, * src/frontend/wdisp/.cvsignore, * src/include/ngspice/.cvsignore, * src/maths/.cvsignore, * src/maths/cmaths/.cvsignore, * src/maths/deriv/.cvsignore, * src/maths/fft/.cvsignore, * src/maths/misc/.cvsignore, * src/maths/ni/.cvsignore, * src/maths/poly/.cvsignore, * src/maths/sparse/.cvsignore, * src/misc/.cvsignore, * src/spicelib/.cvsignore, * src/spicelib/analysis/.cvsignore, * src/spicelib/devices/.cvsignore, * src/spicelib/devices/adms/ekv/.cvsignore, * src/spicelib/devices/adms/hicum0/.cvsignore, * src/spicelib/devices/adms/hicum2/.cvsignore, * src/spicelib/devices/adms/mextram/.cvsignore, * src/spicelib/devices/adms/psp102/.cvsignore, * src/spicelib/devices/asrc/.cvsignore, * src/spicelib/devices/bjt/.cvsignore, * src/spicelib/devices/bsim1/.cvsignore, * src/spicelib/devices/bsim2/.cvsignore, * src/spicelib/devices/bsim3/.cvsignore, * src/spicelib/devices/bsim3soi_dd/.cvsignore, * src/spicelib/devices/bsim3soi_fd/.cvsignore, * src/spicelib/devices/bsim3soi_pd/.cvsignore, * src/spicelib/devices/bsim3v0/.cvsignore, * src/spicelib/devices/bsim3v1/.cvsignore, * src/spicelib/devices/bsim3v32/.cvsignore, * src/spicelib/devices/bsim4/.cvsignore, * src/spicelib/devices/bsim4v4/.cvsignore, * src/spicelib/devices/bsim4v5/.cvsignore, * src/spicelib/devices/bsim4v6/.cvsignore, * src/spicelib/devices/bsimsoi/.cvsignore, * src/spicelib/devices/cap/.cvsignore, * src/spicelib/devices/cccs/.cvsignore, * src/spicelib/devices/ccvs/.cvsignore, * src/spicelib/devices/cpl/.cvsignore, * src/spicelib/devices/csw/.cvsignore, * src/spicelib/devices/dio/.cvsignore, * src/spicelib/devices/hfet1/.cvsignore, * src/spicelib/devices/hfet2/.cvsignore, * src/spicelib/devices/hisim2/.cvsignore, * src/spicelib/devices/hisimhv/.cvsignore, * src/spicelib/devices/ind/.cvsignore, * src/spicelib/devices/isrc/.cvsignore, * src/spicelib/devices/jfet/.cvsignore, * src/spicelib/devices/jfet2/.cvsignore, * src/spicelib/devices/ltra/.cvsignore, * src/spicelib/devices/mes/.cvsignore, * src/spicelib/devices/mesa/.cvsignore, * src/spicelib/devices/mos1/.cvsignore, * src/spicelib/devices/mos2/.cvsignore, * src/spicelib/devices/mos3/.cvsignore, * src/spicelib/devices/mos6/.cvsignore, * src/spicelib/devices/mos9/.cvsignore, * src/spicelib/devices/nbjt/.cvsignore, * src/spicelib/devices/nbjt2/.cvsignore, * src/spicelib/devices/ndev/.cvsignore, * src/spicelib/devices/numd/.cvsignore, * src/spicelib/devices/numd2/.cvsignore, * src/spicelib/devices/numos/.cvsignore, * src/spicelib/devices/res/.cvsignore, * src/spicelib/devices/soi3/.cvsignore, * src/spicelib/devices/sw/.cvsignore, * src/spicelib/devices/tra/.cvsignore, * src/spicelib/devices/txl/.cvsignore, * src/spicelib/devices/urc/.cvsignore, * src/spicelib/devices/vbic/.cvsignore, * src/spicelib/devices/vccs/.cvsignore, * src/spicelib/devices/vcvs/.cvsignore, * src/spicelib/devices/vsrc/.cvsignore, * src/spicelib/parser/.cvsignore, * src/xspice/.cvsignore, * src/xspice/cm/.cvsignore, * src/xspice/cmpp/.cvsignore, * src/xspice/enh/.cvsignore, * src/xspice/evt/.cvsignore, * src/xspice/icm/.cvsignore, * src/xspice/icm/analog/.cvsignore, * src/xspice/icm/analog/climit/.cvsignore, * src/xspice/icm/analog/d_dt/.cvsignore, * src/xspice/icm/analog/divide/.cvsignore, * src/xspice/icm/analog/file_source/.cvsignore, * src/xspice/icm/analog/gain/.cvsignore, * src/xspice/icm/analog/hyst/.cvsignore, * src/xspice/icm/analog/ilimit/.cvsignore, * src/xspice/icm/analog/int/.cvsignore, * src/xspice/icm/analog/limit/.cvsignore, * src/xspice/icm/analog/mult/.cvsignore, * src/xspice/icm/analog/multi_input_pwl/.cvsignore, * src/xspice/icm/analog/oneshot/.cvsignore, * src/xspice/icm/analog/pwl/.cvsignore, * src/xspice/icm/analog/s_xfer/.cvsignore, * src/xspice/icm/analog/sine/.cvsignore, * src/xspice/icm/analog/slew/.cvsignore, * src/xspice/icm/analog/square/.cvsignore, * src/xspice/icm/analog/summer/.cvsignore, * src/xspice/icm/analog/triangle/.cvsignore, * src/xspice/icm/digital/.cvsignore, * src/xspice/icm/digital/adc_bridge/.cvsignore, * src/xspice/icm/digital/d_and/.cvsignore, * src/xspice/icm/digital/d_buffer/.cvsignore, * src/xspice/icm/digital/d_dff/.cvsignore, * src/xspice/icm/digital/d_dlatch/.cvsignore, * src/xspice/icm/digital/d_fdiv/.cvsignore, * src/xspice/icm/digital/d_inverter/.cvsignore, * src/xspice/icm/digital/d_jkff/.cvsignore, * src/xspice/icm/digital/d_nand/.cvsignore, * src/xspice/icm/digital/d_nor/.cvsignore, * src/xspice/icm/digital/d_open_c/.cvsignore, * src/xspice/icm/digital/d_open_e/.cvsignore, * src/xspice/icm/digital/d_or/.cvsignore, * src/xspice/icm/digital/d_osc/.cvsignore, * src/xspice/icm/digital/d_pulldown/.cvsignore, * src/xspice/icm/digital/d_pullup/.cvsignore, * src/xspice/icm/digital/d_ram/.cvsignore, * src/xspice/icm/digital/d_source/.cvsignore, * src/xspice/icm/digital/d_srff/.cvsignore, * src/xspice/icm/digital/d_srlatch/.cvsignore, * src/xspice/icm/digital/d_state/.cvsignore, * src/xspice/icm/digital/d_tff/.cvsignore, * src/xspice/icm/digital/d_tristate/.cvsignore, * src/xspice/icm/digital/d_xnor/.cvsignore, * src/xspice/icm/digital/d_xor/.cvsignore, * src/xspice/icm/digital/dac_bridge/.cvsignore, * src/xspice/icm/spice2poly/.cvsignore, * src/xspice/icm/spice2poly/icm_spice2poly/.cvsignore, * src/xspice/icm/xtradev/.cvsignore, * src/xspice/icm/xtradev/aswitch/.cvsignore, * src/xspice/icm/xtradev/capacitor/.cvsignore, * src/xspice/icm/xtradev/cmeter/.cvsignore, * src/xspice/icm/xtradev/core/.cvsignore, * src/xspice/icm/xtradev/inductor/.cvsignore, * src/xspice/icm/xtradev/lcouple/.cvsignore, * src/xspice/icm/xtradev/lmeter/.cvsignore, * src/xspice/icm/xtradev/potentiometer/.cvsignore, * src/xspice/icm/xtradev/zener/.cvsignore, * src/xspice/icm/xtraevt/.cvsignore, * src/xspice/icm/xtraevt/d_to_real/.cvsignore, * src/xspice/icm/xtraevt/int/.cvsignore, * src/xspice/icm/xtraevt/real/.cvsignore, * src/xspice/icm/xtraevt/real_delay/.cvsignore, * src/xspice/icm/xtraevt/real_gain/.cvsignore, * src/xspice/icm/xtraevt/real_to_v/.cvsignore, * src/xspice/idn/.cvsignore, * src/xspice/ipc/.cvsignore, * src/xspice/mif/.cvsignore, * tests/.cvsignore, * tests/bsim1/.cvsignore, * tests/bsim2/.cvsignore, * tests/bsim3/.cvsignore, * tests/bsim3/ac_sim/.cvsignore, * tests/bsim3/dc_sim/.cvsignore, * tests/bsim3/tran_sim/.cvsignore, * tests/bsim3soidd/.cvsignore, * tests/bsim3soifd/.cvsignore, * tests/bsim3soipd/.cvsignore, * tests/bsim4/.cvsignore, * tests/bsimsoi/.cvsignore, * tests/filters/.cvsignore, * tests/general/.cvsignore, * tests/hfet/.cvsignore, * tests/hisim/.cvsignore, * tests/hisimhv/.cvsignore, * tests/jfet/.cvsignore, * tests/mes/.cvsignore, * tests/mesa/.cvsignore, * tests/mos6/.cvsignore, * tests/polezero/.cvsignore, * tests/resistance/.cvsignore, * tests/sensitivity/.cvsignore, * tests/transient/.cvsignore, * tests/transmission/.cvsignore, * tests/vbic/.cvsignore, * tests/xspice/.cvsignore, * tests/xspice/digital/.cvsignore, * xgraph/.cvsignore: remove all .cvsignore files 2012-10-26 Francesco Lannutti * src/frontend/numparam/mystring.c, * src/frontend/numparam/xpressn.c, * src/maths/misc/randnumb.c, * src/misc/hash.c, * src/spicelib/analysis/cktdest.c, * src/spicelib/devices/isrc/isrcload.c, * src/spicelib/devices/vsrc/vsrcload.c, * src/xspice/mif/mif_inp2.c: remove compilation warnings (type casts) 2012-10-26 Francesco Lannutti * configure.ac, * src/Makefile.am, * src/spicelib/devices/Makefile.am, * src/spicelib/devices/bsim3soi/.cvsignore, * src/spicelib/devices/bsim3soi/BsimTerms_use, * src/spicelib/devices/bsim3soi/Makefile.am, * src/spicelib/devices/bsim3soi/b4soi.c, * src/spicelib/devices/bsim3soi/b4soiacld.c, * src/spicelib/devices/bsim3soi/b4soiask.c, * src/spicelib/devices/bsim3soi/b4soicheck.c, * src/spicelib/devices/bsim3soi/b4soicvtest.c, * src/spicelib/devices/bsim3soi/b4soidef.h, * src/spicelib/devices/bsim3soi/b4soidel.c, * src/spicelib/devices/bsim3soi/b4soidest.c, * src/spicelib/devices/bsim3soi/b4soiext.h, * src/spicelib/devices/bsim3soi/b4soigetic.c, * src/spicelib/devices/bsim3soi/b4soiinit.c, * src/spicelib/devices/bsim3soi/b4soiinit.h, * src/spicelib/devices/bsim3soi/b4soiitf.h, * src/spicelib/devices/bsim3soi/b4soild.c, * src/spicelib/devices/bsim3soi/b4soimask.c, * src/spicelib/devices/bsim3soi/b4soimdel.c, * src/spicelib/devices/bsim3soi/b4soimpar.c, * src/spicelib/devices/bsim3soi/b4soinoi.c, * src/spicelib/devices/bsim3soi/b4soipar.c, * src/spicelib/devices/bsim3soi/b4soipzld.c, * src/spicelib/devices/bsim3soi/b4soiset.c, * src/spicelib/devices/bsim3soi/b4soitemp.c, * src/spicelib/devices/bsim3soi/b4soitrunc.c, * src/spicelib/devices/bsimsoi/.cvsignore, * src/spicelib/devices/bsimsoi/BsimTerms_use, * src/spicelib/devices/bsimsoi/Makefile.am, * src/spicelib/devices/bsimsoi/b4soi.c, * src/spicelib/devices/bsimsoi/b4soiacld.c, * src/spicelib/devices/bsimsoi/b4soiask.c, * src/spicelib/devices/bsimsoi/b4soicheck.c, * src/spicelib/devices/bsimsoi/b4soicvtest.c, * src/spicelib/devices/bsimsoi/b4soidef.h, * src/spicelib/devices/bsimsoi/b4soidel.c, * src/spicelib/devices/bsimsoi/b4soidest.c, * src/spicelib/devices/bsimsoi/b4soiext.h, * src/spicelib/devices/bsimsoi/b4soigetic.c, * src/spicelib/devices/bsimsoi/b4soiinit.c, * src/spicelib/devices/bsimsoi/b4soiinit.h, * src/spicelib/devices/bsimsoi/b4soiitf.h, * src/spicelib/devices/bsimsoi/b4soild.c, * src/spicelib/devices/bsimsoi/b4soimask.c, * src/spicelib/devices/bsimsoi/b4soimdel.c, * src/spicelib/devices/bsimsoi/b4soimpar.c, * src/spicelib/devices/bsimsoi/b4soinoi.c, * src/spicelib/devices/bsimsoi/b4soipar.c, * src/spicelib/devices/bsimsoi/b4soipzld.c, * src/spicelib/devices/bsimsoi/b4soiset.c, * src/spicelib/devices/bsimsoi/b4soitemp.c, * src/spicelib/devices/bsimsoi/b4soitrunc.c, * src/spicelib/devices/dev.c, * tests/Makefile.am, * tests/bsim3soi/.cvsignore, * tests/bsim3soi/Makefile.am, * tests/bsim3soi/nmos/parameters/nmosParameters, * tests/bsim3soi/nmos/qaSpec, * tests/bsim3soi/nmos/reference/acFreq01.standard, * tests/bsim3soi/nmos/reference/acFreq02.standard, * tests/bsim3soi/nmos/reference/acVd01.standard, * tests/bsim3soi/nmos/reference/acVd02.standard, * tests/bsim3soi/nmos/reference/dcSweep01.standard, * tests/bsim3soi/nmos/reference/dcSweep02.standard, * tests/bsim3soi/nmos/reference/dcSweep03.standard, * tests/bsim3soi/nmos/reference/noise01.standard, * tests/bsim3soi/nmos/reference/noise02.standard, * tests/bsim3soi/nmos/reference/noise03.standard, * tests/bsim3soi/pmos/parameters/pmosParameters, * tests/bsim3soi/pmos/qaSpec, * tests/bsim3soi/pmos/reference/acFreq01.standard, * tests/bsim3soi/pmos/reference/acFreq02.standard, * tests/bsim3soi/pmos/reference/acVd01.standard, * tests/bsim3soi/pmos/reference/acVd02.standard, * tests/bsim3soi/pmos/reference/dcSweep01.standard, * tests/bsim3soi/pmos/reference/dcSweep02.standard, * tests/bsim3soi/pmos/reference/dcSweep03.standard, * tests/bsim3soi/pmos/reference/noise01.standard, * tests/bsim3soi/pmos/reference/noise02.standard, * tests/bsim3soi/pmos/reference/noise03.standard, * tests/bsimsoi/.cvsignore, * tests/bsimsoi/Makefile.am, * tests/bsimsoi/nmos/parameters/nmosParameters, * tests/bsimsoi/nmos/qaSpec, * tests/bsimsoi/nmos/reference/acFreq01.standard, * tests/bsimsoi/nmos/reference/acFreq02.standard, * tests/bsimsoi/nmos/reference/acVd01.standard, * tests/bsimsoi/nmos/reference/acVd02.standard, * tests/bsimsoi/nmos/reference/dcSweep01.standard, * tests/bsimsoi/nmos/reference/dcSweep02.standard, * tests/bsimsoi/nmos/reference/dcSweep03.standard, * tests/bsimsoi/nmos/reference/noise01.standard, * tests/bsimsoi/nmos/reference/noise02.standard, * tests/bsimsoi/nmos/reference/noise03.standard, * tests/bsimsoi/pmos/parameters/pmosParameters, * tests/bsimsoi/pmos/qaSpec, * tests/bsimsoi/pmos/reference/acFreq01.standard, * tests/bsimsoi/pmos/reference/acFreq02.standard, * tests/bsimsoi/pmos/reference/acVd01.standard, * tests/bsimsoi/pmos/reference/acVd02.standard, * tests/bsimsoi/pmos/reference/dcSweep01.standard, * tests/bsimsoi/pmos/reference/dcSweep02.standard, * tests/bsimsoi/pmos/reference/dcSweep03.standard, * tests/bsimsoi/pmos/reference/noise01.standard, * tests/bsimsoi/pmos/reference/noise02.standard, * tests/bsimsoi/pmos/reference/noise03.standard, * visualc/vngspice.vcproj: rename "bsim3soi" device to "bsimsoi" 2012-10-25 rlar * src/spicelib/devices/adms/admst/ngspice.xml, * src/spicelib/devices/adms/admst/prengspice.xml, * src/spicelib/devices/adms/ekv/adms3va/ekv.va, * src/spicelib/devices/adms/hicum0/adms3va/hicum0.va, * src/spicelib/devices/adms/hicum2/adms3va/hicum2.va, * src/spicelib/devices/adms/mextram/adms3va/COPYRIGHT_NOTICE, * src/spicelib/devices/adms/mextram/adms3va/bjt504t.va, * src/spicelib/devices/adms/mextram/adms3va/evaluate.inc, * src/spicelib/devices/adms/mextram/adms3va/frontdef.inc, * src/spicelib/devices/adms/mextram/adms3va/initialize.inc, * src/spicelib/devices/adms/mextram/adms3va/opinfo.inc, * src/spicelib/devices/adms/mextram/adms3va/opvars.inc, * src/spicelib/devices/adms/mextram/adms3va/parameters.inc, * src/spicelib/devices/adms/mextram/adms3va/tscaling.inc, * src/spicelib/devices/adms/mextram/adms3va/variables.inc, * src/spicelib/devices/adms/psp102/adms3va/JUNCAP200_InitModel.include, * src/spicelib/devices/adms/psp102/adms3va/JUNCAP200_macrodefs.include, * src/spicelib/devices/adms/psp102/adms3va/JUNCAP200_parlist.include, * src/spicelib/devices/adms/psp102/adms3va/JUNCAP200_varlist.include, * src/spicelib/devices/adms/psp102/adms3va/PSP102_ChargesNQS.include, * src/spicelib/devices/adms/psp102/adms3va/PSP102_InitNQS.include, * src/spicelib/devices/adms/psp102/adms3va/PSP102_binning.include, * src/spicelib/devices/adms/psp102/adms3va/PSP102_binpars.include, * src/spicelib/devices/adms/psp102/adms3va/PSP102_macrodefs.include, * src/spicelib/devices/adms/psp102/adms3va/PSP102_module.include, * src/spicelib/devices/adms/psp102/adms3va/PSP102_nqs_macrodefs.include, * src/spicelib/devices/adms/psp102/adms3va/SIMKIT_macrodefs.include, * src/spicelib/devices/adms/psp102/adms3va/psp102.va, * src/spicelib/devices/adms/psp102/adms3va/readme.ngspice, * src/spicelib/devices/adms/psp102/adms3va/readme.txt: remove adms3 #2/2, files 2012-10-25 rlar * autogen.sh, * configure.ac, * src/frontend/inpcom.c, * src/frontend/subckt.c, * src/include/ngspice/devdefs.h, * src/include/ngspice/ngspice.h, * src/spicelib/devices/dev.c, * src/spicelib/parser/inp.h, * src/spicelib/parser/inp2u.c, * src/spicelib/parser/inpdomod.c, * src/spicelib/parser/inppas2.c: remove adms3 #1/2, code due to license issues, and with the aim to approach the next ngspice release 25 we have to move this over to a development branch 2012-10-24 h_vogt * visualc/vngspice.vcproj: vngspice.vcproj: 64 bit compilation improved 2012-10-24 dwarning * src/spicelib/devices/hisim2/hisim2.h, * src/spicelib/devices/hisim2/hsm2.c, * src/spicelib/devices/hisim2/hsm2acld.c, * src/spicelib/devices/hisim2/hsm2ask.c, * src/spicelib/devices/hisim2/hsm2cvtest.c, * src/spicelib/devices/hisim2/hsm2def.h, * src/spicelib/devices/hisim2/hsm2del.c, * src/spicelib/devices/hisim2/hsm2dest.c, * src/spicelib/devices/hisim2/hsm2eval.c, * src/spicelib/devices/hisim2/hsm2evalenv.h, * src/spicelib/devices/hisim2/hsm2ext.h, * src/spicelib/devices/hisim2/hsm2getic.c, * src/spicelib/devices/hisim2/hsm2init.c, * src/spicelib/devices/hisim2/hsm2itf.h, * src/spicelib/devices/hisim2/hsm2ld.c, * src/spicelib/devices/hisim2/hsm2mask.c, * src/spicelib/devices/hisim2/hsm2mdel.c, * src/spicelib/devices/hisim2/hsm2mpar.c, * src/spicelib/devices/hisim2/hsm2noi.c, * src/spicelib/devices/hisim2/hsm2par.c, * src/spicelib/devices/hisim2/hsm2pzld.c, * src/spicelib/devices/hisim2/hsm2set.c, * src/spicelib/devices/hisim2/hsm2temp.c, * src/spicelib/devices/hisim2/hsm2trunc.c: hisim2 update to version 2.6.1 2012-10-24 dwarning * tests/hisim/nmos/parameters/nmosParameters, * tests/hisim/nmos/qaSpec, * tests/hisim/nmos/reference/10_dcSweep_COIIGS=1.standard, * tests/hisim/nmos/reference/11_dcSweep_COGIDL=0.standard, * tests/hisim/nmos/reference/12_dcSweep_COGIDL=1.standard, * tests/hisim/nmos/reference/13_dcSweep_COISTI=0.standard, * tests/hisim/nmos/reference/14-1_dcSweep_COISTI=1.standard, * tests/hisim/nmos/reference/14-2_dcSweep_COISTI=1.standard, * tests/hisim/nmos/reference/14_dcSweep_COISTI=1.standard, * tests/hisim/nmos/reference/15_dcSweep_WPE.standard, * tests/hisim/nmos/reference/19_dcSweep_CORG=0.standard, * tests/hisim/nmos/reference/2-1_dcSweep_CORSRD=0.standard, * tests/hisim/nmos/reference/2-2_dcSweep_CORSRD=0.standard, * tests/hisim/nmos/reference/20-1_dcSweep_CORG=1.standard, * tests/hisim/nmos/reference/20-2_dcSweep_CORG=1.standard, * tests/hisim/nmos/reference/20_dcSweep_CORG=1.standard, * tests/hisim/nmos/reference/21_dcSweep_CORBNET=0.standard, * tests/hisim/nmos/reference/22-1_dcSweep_CORBNET=1.standard, * tests/hisim/nmos/reference/22-2_dcSweep_CORBNET=1.standard, * tests/hisim/nmos/reference/22_dcSweep_CORBNET=1.standard, * tests/hisim/nmos/reference/2_dcSweep_CORSRD=0.standard, * tests/hisim/nmos/reference/33_dcSweep_CODFM=0.standard, * tests/hisim/nmos/reference/34-1_dcSweep_CODFM=1.standard, * tests/hisim/nmos/reference/34-2_dcSweep_CODFM=1.standard, * tests/hisim/nmos/reference/34_dcSweep_CODFM=1.standard, * tests/hisim/nmos/reference/36-1_acVd_CORSRD=0.standard, * tests/hisim/nmos/reference/36-2_acVd_CORSRD=0.standard, * tests/hisim/nmos/reference/36_acVd_CORSRD=0.standard, * tests/hisim/nmos/reference/37_acVd_WPE.standard, * tests/hisim/nmos/reference/40_acFreq_COOVLP=1.standard, * tests/hisim/nmos/reference/41_acFreq_COISUB=0.standard, * tests/hisim/nmos/reference/42_acFreq_COISUB=1.standard, * tests/hisim/nmos/reference/43_acFreq_COIIGS=0.standard, * tests/hisim/nmos/reference/44_acFreq_COIIGS=1.standard, * tests/hisim/nmos/reference/45_acFreq_COGIDL=0.standard, * tests/hisim/nmos/reference/46_acFreq_COGIDL=1.standard, * tests/hisim/nmos/reference/47_acFreq_COSTI=0.standard, * tests/hisim/nmos/reference/48-1_acFreq_COSTI=1.standard, * tests/hisim/nmos/reference/48-2_acFreq_COSTI=1.standard, * tests/hisim/nmos/reference/48_acFreq_COSTI=1.standard, * tests/hisim/nmos/reference/49_acFreq_COADOV=0.standard, * tests/hisim/nmos/reference/50_acFreq_COADOV=1.standard, * tests/hisim/nmos/reference/51_acFreq_CONQS=0.standard, * tests/hisim/nmos/reference/52-1_acFreq_CONQS=1.standard, * tests/hisim/nmos/reference/52-2_acFreq_CONQS=1.standard, * tests/hisim/nmos/reference/52_acFreq_CONQS=1.standard, * tests/hisim/nmos/reference/53_acFreq_CORG=0.standard, * tests/hisim/nmos/reference/54-1_acFreq_CORG=1.standard, * tests/hisim/nmos/reference/54-2_acFreq_CORG=1.standard, * tests/hisim/nmos/reference/54_acFreq_CORG=1.standard, * tests/hisim/nmos/reference/55_acFreq_CORBNET=0.standard, * tests/hisim/nmos/reference/55_acFreq_CORBNETt=0.standard, * tests/hisim/nmos/reference/56-1_acFreq_CORBNETt=1.standard, * tests/hisim/nmos/reference/56-2_acFreq_CORBNETt=1.standard, * tests/hisim/nmos/reference/56_acFreq_CORBNET=1.standard, * tests/hisim/nmos/reference/56_acFreq_CORBNETt=1.standard, * tests/hisim/nmos/reference/57_acFreq_COFLICK=0.standard, * tests/hisim/nmos/reference/58_acFreq_COFLICK=1.standard, * tests/hisim/nmos/reference/59_acFreq_COTHRML=0.standard, * tests/hisim/nmos/reference/60_acFreq_COTHRML=1.standard, * tests/hisim/nmos/reference/61_acFreq_COIGN=0.standard, * tests/hisim/nmos/reference/62_acFreq_COIGN=1.standard, * tests/hisim/nmos/reference/63_acFreq_WPE.standard, * tests/hisim/nmos/reference/67_acFreq_CODFM=0.standard, * tests/hisim/nmos/reference/68-1_acFreq_CODFM=1.standard, * tests/hisim/nmos/reference/68-2_acFreq_CODFM=1.standard, * tests/hisim/nmos/reference/68_acFreq_CODFM=1.standard, * tests/hisim/nmos/reference/69-1_noise_COIGN=1_T-55.standard, * tests/hisim/nmos/reference/69-2_noise_COIGN=1_T150.standard, * tests/hisim/nmos/reference/69_noise_COIGN=1_T27.standard, * tests/hisim/nmos/reference/70-1_noise_COIGN=0_T-55.standard, * tests/hisim/nmos/reference/70-2_noise_COIGN=0_T150.standard, * tests/hisim/nmos/reference/70_noise_COIGN=0_T27.standard, * tests/hisim/nmos/reference/7_dcSweep_COISUB=0.standard, * tests/hisim/nmos/reference/8_dcSweep_COISUB=1.standard, * tests/hisim/nmos/reference/9_dcSweep_COIIGS=0.standard, * tests/hisim/pmos/parameters/pmosParameters, * tests/hisim/pmos/qaSpec, * tests/hisim/pmos/reference/10_dcSweep_COIIGS=1.standard, * tests/hisim/pmos/reference/11_dcSweep_COGIDL=0.standard, * tests/hisim/pmos/reference/12_dcSweep_COGIDL=1.standard, * tests/hisim/pmos/reference/13_dcSweep_COISTI=0.standard, * tests/hisim/pmos/reference/14-1_dcSweep_COISTI=1.standard, * tests/hisim/pmos/reference/14-2_dcSweep_COISTI=1.standard, * tests/hisim/pmos/reference/14_dcSweep_COISTI=1.standard, * tests/hisim/pmos/reference/15_dcSweep_WPE.standard, * tests/hisim/pmos/reference/19_dcSweep_CORG=0.standard, * tests/hisim/pmos/reference/2-1_dcSweep_CORSRD=0.standard, * tests/hisim/pmos/reference/2-2_dcSweep_CORSRD=0.standard, * tests/hisim/pmos/reference/20-1_dcSweep_CORG=1.standard, * tests/hisim/pmos/reference/20-2_dcSweep_CORG=1.standard, * tests/hisim/pmos/reference/20_dcSweep_CORG=1.standard, * tests/hisim/pmos/reference/21_dcSweep_CORBNET=0.standard, * tests/hisim/pmos/reference/22-1_dcSweep_CORBNET=1.standard, * tests/hisim/pmos/reference/22-2_dcSweep_CORBNET=1.standard, * tests/hisim/pmos/reference/22_dcSweep_CORBNET=1.standard, * tests/hisim/pmos/reference/2_dcSweep_CORSRD=0.standard, * tests/hisim/pmos/reference/33_dcSweep_CODFM=0.standard, * tests/hisim/pmos/reference/34-1_dcSweep_CODFM=1.standard, * tests/hisim/pmos/reference/34-2_dcSweep_CODFM=1.standard, * tests/hisim/pmos/reference/34_dcSweep_CODFM=1.standard, * tests/hisim/pmos/reference/36-1_acVd_CORSRD=0.standard, * tests/hisim/pmos/reference/36-2_acVd_CORSRD=0.standard, * tests/hisim/pmos/reference/36_acVd_CORSRD=0.standard, * tests/hisim/pmos/reference/37_acVd_WPE.standard, * tests/hisim/pmos/reference/40_acFreq_COOVLP=1.standard, * tests/hisim/pmos/reference/41_acFreq_COISUB=0.standard, * tests/hisim/pmos/reference/42_acFreq_COISUB=1.standard, * tests/hisim/pmos/reference/43_acFreq_COIIGS=0.standard, * tests/hisim/pmos/reference/44_acFreq_COIIGS=1.standard, * tests/hisim/pmos/reference/45_acFreq_COGIDL=0.standard, * tests/hisim/pmos/reference/46_acFreq_COGIDL=1.standard, * tests/hisim/pmos/reference/47_acFreq_COSTI=0.standard, * tests/hisim/pmos/reference/48-1_acFreq_COSTI=1.standard, * tests/hisim/pmos/reference/48-2_acFreq_COSTI=1.standard, * tests/hisim/pmos/reference/48_acFreq_COSTI=1.standard, * tests/hisim/pmos/reference/49_acFreq_COADOV=0.standard, * tests/hisim/pmos/reference/50_acFreq_COADOV=1.standard, * tests/hisim/pmos/reference/51_acFreq_CONQS=0.standard, * tests/hisim/pmos/reference/52-1_acFreq_CONQS=1.standard, * tests/hisim/pmos/reference/52-2_acFreq_CONQS=1.standard, * tests/hisim/pmos/reference/52_acFreq_CONQS=1.standard, * tests/hisim/pmos/reference/53_acFreq_CORG=0.standard, * tests/hisim/pmos/reference/54-1_acFreq_CORG=1.standard, * tests/hisim/pmos/reference/54-2_acFreq_CORG=1.standard, * tests/hisim/pmos/reference/54_acFreq_CORG=1.standard, * tests/hisim/pmos/reference/55_acFreq_CORBNET=0.standard, * tests/hisim/pmos/reference/55_acFreq_CORBNETt=0.standard, * tests/hisim/pmos/reference/56-1_acFreq_CORBNETt=1.standard, * tests/hisim/pmos/reference/56-2_acFreq_CORBNETt=1.standard, * tests/hisim/pmos/reference/56_acFreq_CORBNET=1.standard, * tests/hisim/pmos/reference/56_acFreq_CORBNETt=1.standard, * tests/hisim/pmos/reference/57_acFreq_COFLICK=0.standard, * tests/hisim/pmos/reference/58_acFreq_COFLICK=1.standard, * tests/hisim/pmos/reference/59_acFreq_COTHRML=0.standard, * tests/hisim/pmos/reference/60_acFreq_COTHRML=1.standard, * tests/hisim/pmos/reference/61_acFreq_COIGN=0.standard, * tests/hisim/pmos/reference/62_acFreq_COIGN=1.standard, * tests/hisim/pmos/reference/63_acFreq_WPE.standard, * tests/hisim/pmos/reference/67_acFreq_CODFM=0.standard, * tests/hisim/pmos/reference/68-1_acFreq_CODFM=1.standard, * tests/hisim/pmos/reference/68-2_acFreq_CODFM=1.standard, * tests/hisim/pmos/reference/68_acFreq_CODFM=1.standard, * tests/hisim/pmos/reference/69-1_noise_COIGN=1_T-55.standard, * tests/hisim/pmos/reference/69-2_noise_COIGN=1_T150.standard, * tests/hisim/pmos/reference/69_noise_COIGN=1_T27.standard, * tests/hisim/pmos/reference/70-1_noise_COIGN=0_T-55.standard, * tests/hisim/pmos/reference/70-2_noise_COIGN=0_T150.standard, * tests/hisim/pmos/reference/70_noise_COIGN=0_T27.standard, * tests/hisim/pmos/reference/7_dcSweep_COISUB=0.standard, * tests/hisim/pmos/reference/8_dcSweep_COISUB=1.standard, * tests/hisim/pmos/reference/9_dcSweep_COIIGS=0.standard: hisim2 new qa tests 2012-10-22 Francesco Lannutti * src/frontend/runcoms.c, * src/frontend/runcoms2.c, * src/spicelib/analysis/cktop.c: white space changes 2012-10-22 Francesco Lannutti * src/spicelib/analysis/dcpss.c, * src/spicelib/devices/bsim1/b1set.c, * src/spicelib/devices/bsim2/b2set.c, * src/spicelib/devices/bsim3/b3cvtest.c, * src/spicelib/devices/bsim3/b3getic.c, * src/spicelib/devices/bsim3/b3ld.c, * src/spicelib/devices/bsim3/b3pzld.c, * src/spicelib/devices/bsim3/b3set.c, * src/spicelib/devices/bsim3/b3temp.c, * src/spicelib/devices/bsim3/b3trunc.c, * src/spicelib/devices/bsim3soi/b4soiacld.c, * src/spicelib/devices/bsim3soi/b4soicvtest.c, * src/spicelib/devices/bsim3soi/b4soidest.c, * src/spicelib/devices/bsim3soi/b4soigetic.c, * src/spicelib/devices/bsim3soi/b4soild.c, * src/spicelib/devices/bsim3soi/b4soimdel.c, * src/spicelib/devices/bsim3soi/b4soinoi.c, * src/spicelib/devices/bsim3soi/b4soitrunc.c, * src/spicelib/devices/bsim3soi_dd/b3soiddcvtest.c, * src/spicelib/devices/bsim3soi_dd/b3soiddgetic.c, * src/spicelib/devices/bsim3soi_dd/b3soiddld.c, * src/spicelib/devices/bsim3soi_dd/b3soiddnoi.c, * src/spicelib/devices/bsim3soi_dd/b3soiddset.c, * src/spicelib/devices/bsim3soi_dd/b3soiddtemp.c, * src/spicelib/devices/bsim3soi_fd/b3soifdacld.c, * src/spicelib/devices/bsim3soi_fd/b3soifdcvtest.c, * src/spicelib/devices/bsim3soi_fd/b3soifdgetic.c, * src/spicelib/devices/bsim3soi_fd/b3soifdld.c, * src/spicelib/devices/bsim3soi_fd/b3soifdnoi.c, * src/spicelib/devices/bsim3soi_fd/b3soifdset.c, * src/spicelib/devices/bsim3soi_fd/b3soifdtemp.c, * src/spicelib/devices/bsim3soi_fd/b3soifdtrunc.c, * src/spicelib/devices/bsim3soi_pd/b3soipdacld.c, * src/spicelib/devices/bsim3soi_pd/b3soipdcvtest.c, * src/spicelib/devices/bsim3soi_pd/b3soipdgetic.c, * src/spicelib/devices/bsim3soi_pd/b3soipdld.c, * src/spicelib/devices/bsim3soi_pd/b3soipdnoi.c, * src/spicelib/devices/bsim3soi_pd/b3soipdpzld.c, * src/spicelib/devices/bsim3soi_pd/b3soipdset.c, * src/spicelib/devices/bsim3soi_pd/b3soipdtemp.c, * src/spicelib/devices/bsim3soi_pd/b3soipdtrunc.c, * src/spicelib/devices/bsim3v0/b3v0acld.c, * src/spicelib/devices/bsim3v0/b3v0cvtest.c, * src/spicelib/devices/bsim3v0/b3v0getic.c, * src/spicelib/devices/bsim3v0/b3v0ld.c, * src/spicelib/devices/bsim3v0/b3v0noi.c, * src/spicelib/devices/bsim3v0/b3v0set.c, * src/spicelib/devices/bsim3v0/b3v0temp.c, * src/spicelib/devices/bsim3v0/b3v0trunc.c, * src/spicelib/devices/bsim3v1/b3v1cvtest.c, * src/spicelib/devices/bsim3v1/b3v1getic.c, * src/spicelib/devices/bsim3v1/b3v1ld.c, * src/spicelib/devices/bsim3v1/b3v1noi.c, * src/spicelib/devices/bsim3v1/b3v1set.c, * src/spicelib/devices/bsim3v1/b3v1temp.c, * src/spicelib/devices/bsim3v1/b3v1trunc.c, * src/spicelib/devices/bsim3v1/bsim3v1def.h, * src/spicelib/devices/bsim3v32/b3v32getic.c, * src/spicelib/devices/bsim3v32/b3v32set.c, * src/spicelib/devices/bsim4/b4set.c, * src/spicelib/devices/bsim4v4/b4v4cvtest.c, * src/spicelib/devices/bsim4v4/b4v4set.c, * src/spicelib/devices/bsim4v5/b4v5cvtest.c, * src/spicelib/devices/bsim4v5/b4v5set.c, * src/spicelib/devices/bsim4v5/b4v5trunc.c, * src/spicelib/devices/bsim4v6/b4v6set.c, * src/spicelib/devices/bsim4v6/b4v6trunc.c, * src/spicelib/devices/cap/capgetic.c, * src/spicelib/devices/cap/capsset.c, * src/spicelib/devices/cccs/cccsload.c, * src/spicelib/devices/cccs/cccspzld.c, * src/spicelib/devices/cccs/cccssacl.c, * src/spicelib/devices/cccs/cccssset.c, * src/spicelib/devices/ccvs/ccvssacl.c, * src/spicelib/devices/ccvs/ccvssld.c, * src/spicelib/devices/ccvs/ccvssprt.c, * src/spicelib/devices/ccvs/ccvssset.c, * src/spicelib/devices/dio/diosset.c, * src/spicelib/devices/hfet2/hfet2defs.h, * src/spicelib/devices/ind/indsetup.c, * src/spicelib/devices/mos1/mos1set.c, * src/spicelib/devices/mos2/mos2acld.c, * src/spicelib/devices/mos2/mos2conv.c, * src/spicelib/devices/mos2/mos2ic.c, * src/spicelib/devices/mos2/mos2noi.c, * src/spicelib/devices/mos2/mos2pzld.c, * src/spicelib/devices/mos2/mos2set.c, * src/spicelib/devices/mos2/mos2trun.c, * src/spicelib/devices/mos3/mos3set.c, * src/spicelib/devices/mos9/mos9set.c, * src/spicelib/devices/ndev/ndevaccept.c, * src/spicelib/devices/ndev/ndevload.c, * src/spicelib/devices/numd2/nud2set.c, * src/spicelib/devices/res/resload.c, * src/spicelib/devices/res/resnoise.c, * src/spicelib/devices/res/respzld.c, * src/spicelib/devices/res/ressetup.c, * src/spicelib/devices/res/ressload.c, * src/spicelib/devices/res/restemp.c, * src/spicelib/devices/soi3/soi3set.c, * src/spicelib/devices/vccs/vccssld.c, * src/spicelib/devices/vccs/vccssset.c, * src/spicelib/devices/vcvs/vcvssld.c, * src/spicelib/devices/vcvs/vcvssset.c: white space changes 2012-10-22 Francesco Lannutti * src/frontend/outitf.c, * src/frontend/runcoms.c, * src/frontend/runcoms2.c, * src/include/ngspice/cktdefs.h, * src/include/ngspice/gendefs.h, * src/include/ngspice/ngspice.h, * src/include/ngspice/optdefs.h, * src/include/ngspice/smpdefs.h, * src/include/ngspice/sperror.h, * src/main.c, * src/maths/sparse/Makefile.am, * src/maths/sparse/spalloc.c, * src/maths/sparse/spcombin.c, * src/maths/sparse/spsmp.c, * src/misc/misc_time.c, * src/spicelib/analysis/Makefile.am, * src/spicelib/analysis/acan.c, * src/spicelib/analysis/cktacct.c, * src/spicelib/analysis/cktload.c, * src/spicelib/analysis/cktop.c, * src/spicelib/analysis/cktpartn.c, * src/spicelib/analysis/cktpzld.c, * src/spicelib/analysis/cktsetup.c, * src/spicelib/analysis/cktsopt.c, * src/spicelib/analysis/ckttrunc.c, * src/spicelib/analysis/dcpss.c, * src/spicelib/analysis/dctran.c, * src/spicelib/devices/adms/admst/ngspice.xml, * src/spicelib/devices/adms/admst/ngspiceMODULEdefs.h.xml, * src/spicelib/devices/adms/admst/ngspiceMODULEnoise.c.xml, * src/spicelib/devices/asrc/asrcacld.c, * src/spicelib/devices/asrc/asrcconv.c, * src/spicelib/devices/asrc/asrcdefs.h, * src/spicelib/devices/asrc/asrcload.c, * src/spicelib/devices/asrc/asrcpzld.c, * src/spicelib/devices/asrc/asrctemp.c, * src/spicelib/devices/bjt/bjtacld.c, * src/spicelib/devices/bjt/bjtconv.c, * src/spicelib/devices/bjt/bjtdefs.h, * src/spicelib/devices/bjt/bjtdisto.c, * src/spicelib/devices/bjt/bjtgetic.c, * src/spicelib/devices/bjt/bjtload.c, * src/spicelib/devices/bjt/bjtnoise.c, * src/spicelib/devices/bjt/bjtpzld.c, * src/spicelib/devices/bjt/bjtsetup.c, * src/spicelib/devices/bjt/bjtsload.c, * src/spicelib/devices/bjt/bjtsprt.c, * src/spicelib/devices/bjt/bjtsset.c, * src/spicelib/devices/bjt/bjtsupd.c, * src/spicelib/devices/bjt/bjttemp.c, * src/spicelib/devices/bjt/bjttrunc.c, * src/spicelib/devices/bsim1/b1acld.c, * src/spicelib/devices/bsim1/b1cvtest.c, * src/spicelib/devices/bsim1/b1disto.c, * src/spicelib/devices/bsim1/b1dset.c, * src/spicelib/devices/bsim1/b1getic.c, * src/spicelib/devices/bsim1/b1ld.c, * src/spicelib/devices/bsim1/b1noi.c, * src/spicelib/devices/bsim1/b1pzld.c, * src/spicelib/devices/bsim1/b1set.c, * src/spicelib/devices/bsim1/b1temp.c, * src/spicelib/devices/bsim1/b1trunc.c, * src/spicelib/devices/bsim1/bsim1def.h, * src/spicelib/devices/bsim2/b2acld.c, * src/spicelib/devices/bsim2/b2cvtest.c, * src/spicelib/devices/bsim2/b2getic.c, * src/spicelib/devices/bsim2/b2ld.c, * src/spicelib/devices/bsim2/b2noi.c, * src/spicelib/devices/bsim2/b2pzld.c, * src/spicelib/devices/bsim2/b2set.c, * src/spicelib/devices/bsim2/b2temp.c, * src/spicelib/devices/bsim2/b2trunc.c, * src/spicelib/devices/bsim2/bsim2def.h, * src/spicelib/devices/bsim3/b3acld.c, * src/spicelib/devices/bsim3/b3cvtest.c, * src/spicelib/devices/bsim3/b3getic.c, * src/spicelib/devices/bsim3/b3ld.c, * src/spicelib/devices/bsim3/b3pzld.c, * src/spicelib/devices/bsim3/b3set.c, * src/spicelib/devices/bsim3/b3temp.c, * src/spicelib/devices/bsim3/b3trunc.c, * src/spicelib/devices/bsim3/bsim3def.h, * src/spicelib/devices/bsim3soi/b4soiacld.c, * src/spicelib/devices/bsim3soi/b4soicvtest.c, * src/spicelib/devices/bsim3soi/b4soidef.h, * src/spicelib/devices/bsim3soi/b4soidest.c, * src/spicelib/devices/bsim3soi/b4soigetic.c, * src/spicelib/devices/bsim3soi/b4soild.c, * src/spicelib/devices/bsim3soi/b4soimdel.c, * src/spicelib/devices/bsim3soi/b4soinoi.c, * src/spicelib/devices/bsim3soi/b4soipzld.c, * src/spicelib/devices/bsim3soi/b4soitemp.c, * src/spicelib/devices/bsim3soi/b4soitrunc.c, * src/spicelib/devices/bsim3soi_dd/b3soiddacld.c, * src/spicelib/devices/bsim3soi_dd/b3soiddcvtest.c, * src/spicelib/devices/bsim3soi_dd/b3soidddef.h, * src/spicelib/devices/bsim3soi_dd/b3soiddgetic.c, * src/spicelib/devices/bsim3soi_dd/b3soiddld.c, * src/spicelib/devices/bsim3soi_dd/b3soiddnoi.c, * src/spicelib/devices/bsim3soi_dd/b3soiddpzld.c, * src/spicelib/devices/bsim3soi_dd/b3soiddset.c, * src/spicelib/devices/bsim3soi_dd/b3soiddtemp.c, * src/spicelib/devices/bsim3soi_dd/b3soiddtrunc.c, * src/spicelib/devices/bsim3soi_fd/b3soifdacld.c, * src/spicelib/devices/bsim3soi_fd/b3soifdcvtest.c, * src/spicelib/devices/bsim3soi_fd/b3soifddef.h, * src/spicelib/devices/bsim3soi_fd/b3soifdgetic.c, * src/spicelib/devices/bsim3soi_fd/b3soifdld.c, * src/spicelib/devices/bsim3soi_fd/b3soifdnoi.c, * src/spicelib/devices/bsim3soi_fd/b3soifdpzld.c, * src/spicelib/devices/bsim3soi_fd/b3soifdset.c, * src/spicelib/devices/bsim3soi_fd/b3soifdtemp.c, * src/spicelib/devices/bsim3soi_fd/b3soifdtrunc.c, * src/spicelib/devices/bsim3soi_pd/b3soipdacld.c, * src/spicelib/devices/bsim3soi_pd/b3soipdcvtest.c, * src/spicelib/devices/bsim3soi_pd/b3soipddef.h, * src/spicelib/devices/bsim3soi_pd/b3soipdgetic.c, * src/spicelib/devices/bsim3soi_pd/b3soipdld.c, * src/spicelib/devices/bsim3soi_pd/b3soipdnoi.c, * src/spicelib/devices/bsim3soi_pd/b3soipdpzld.c, * src/spicelib/devices/bsim3soi_pd/b3soipdset.c, * src/spicelib/devices/bsim3soi_pd/b3soipdtemp.c, * src/spicelib/devices/bsim3soi_pd/b3soipdtrunc.c, * src/spicelib/devices/bsim3v0/b3v0acld.c, * src/spicelib/devices/bsim3v0/b3v0cvtest.c, * src/spicelib/devices/bsim3v0/b3v0getic.c, * src/spicelib/devices/bsim3v0/b3v0ld.c, * src/spicelib/devices/bsim3v0/b3v0noi.c, * src/spicelib/devices/bsim3v0/b3v0pzld.c, * src/spicelib/devices/bsim3v0/b3v0set.c, * src/spicelib/devices/bsim3v0/b3v0temp.c, * src/spicelib/devices/bsim3v0/b3v0trunc.c, * src/spicelib/devices/bsim3v0/bsim3v0def.h, * src/spicelib/devices/bsim3v1/ChangeLog, * src/spicelib/devices/bsim3v1/b3v1acld.c, * src/spicelib/devices/bsim3v1/b3v1cvtest.c, * src/spicelib/devices/bsim3v1/b3v1getic.c, * src/spicelib/devices/bsim3v1/b3v1ld.c, * src/spicelib/devices/bsim3v1/b3v1noi.c, * src/spicelib/devices/bsim3v1/b3v1pzld.c, * src/spicelib/devices/bsim3v1/b3v1set.c, * src/spicelib/devices/bsim3v1/b3v1temp.c, * src/spicelib/devices/bsim3v1/b3v1trunc.c, * src/spicelib/devices/bsim3v1/bsim3v1def.h, * src/spicelib/devices/bsim3v32/b3v32acld.c, * src/spicelib/devices/bsim3v32/b3v32cvtest.c, * src/spicelib/devices/bsim3v32/b3v32getic.c, * src/spicelib/devices/bsim3v32/b3v32ld.c, * src/spicelib/devices/bsim3v32/b3v32pzld.c, * src/spicelib/devices/bsim3v32/b3v32set.c, * src/spicelib/devices/bsim3v32/b3v32temp.c, * src/spicelib/devices/bsim3v32/b3v32trunc.c, * src/spicelib/devices/bsim3v32/bsim3v32def.h, * src/spicelib/devices/bsim4/b4acld.c, * src/spicelib/devices/bsim4/b4cvtest.c, * src/spicelib/devices/bsim4/b4getic.c, * src/spicelib/devices/bsim4/b4ld.c, * src/spicelib/devices/bsim4/b4pzld.c, * src/spicelib/devices/bsim4/b4set.c, * src/spicelib/devices/bsim4/b4temp.c, * src/spicelib/devices/bsim4/b4trunc.c, * src/spicelib/devices/bsim4/bsim4def.h, * src/spicelib/devices/bsim4v4/b4v4acld.c, * src/spicelib/devices/bsim4v4/b4v4cvtest.c, * src/spicelib/devices/bsim4v4/b4v4getic.c, * src/spicelib/devices/bsim4v4/b4v4ld.c, * src/spicelib/devices/bsim4v4/b4v4pzld.c, * src/spicelib/devices/bsim4v4/b4v4set.c, * src/spicelib/devices/bsim4v4/b4v4temp.c, * src/spicelib/devices/bsim4v4/b4v4trunc.c, * src/spicelib/devices/bsim4v4/bsim4v4def.h, * src/spicelib/devices/bsim4v5/b4v5acld.c, * src/spicelib/devices/bsim4v5/b4v5cvtest.c, * src/spicelib/devices/bsim4v5/b4v5getic.c, * src/spicelib/devices/bsim4v5/b4v5ld.c, * src/spicelib/devices/bsim4v5/b4v5pzld.c, * src/spicelib/devices/bsim4v5/b4v5set.c, * src/spicelib/devices/bsim4v5/b4v5temp.c, * src/spicelib/devices/bsim4v5/b4v5trunc.c, * src/spicelib/devices/bsim4v5/bsim4v5def.h, * src/spicelib/devices/bsim4v6/b4v6acld.c, * src/spicelib/devices/bsim4v6/b4v6cvtest.c, * src/spicelib/devices/bsim4v6/b4v6getic.c, * src/spicelib/devices/bsim4v6/b4v6ld.c, * src/spicelib/devices/bsim4v6/b4v6pzld.c, * src/spicelib/devices/bsim4v6/b4v6set.c, * src/spicelib/devices/bsim4v6/b4v6temp.c, * src/spicelib/devices/bsim4v6/b4v6trunc.c, * src/spicelib/devices/bsim4v6/bsim4v6def.h, * src/spicelib/devices/cap/capacld.c, * src/spicelib/devices/cap/capdefs.h, * src/spicelib/devices/cap/capgetic.c, * src/spicelib/devices/cap/capload.c, * src/spicelib/devices/cap/cappzld.c, * src/spicelib/devices/cap/capsacl.c, * src/spicelib/devices/cap/capsetup.c, * src/spicelib/devices/cap/capsload.c, * src/spicelib/devices/cap/capsprt.c, * src/spicelib/devices/cap/capsset.c, * src/spicelib/devices/cap/capsupd.c, * src/spicelib/devices/cap/captemp.c, * src/spicelib/devices/cap/captrunc.c, * src/spicelib/devices/cccs/cccsdefs.h, * src/spicelib/devices/cccs/cccsload.c, * src/spicelib/devices/cccs/cccspzld.c, * src/spicelib/devices/cccs/cccssacl.c, * src/spicelib/devices/cccs/cccssprt.c, * src/spicelib/devices/cccs/cccssset.c, * src/spicelib/devices/ccvs/ccvsdefs.h, * src/spicelib/devices/ccvs/ccvsload.c, * src/spicelib/devices/ccvs/ccvspzld.c, * src/spicelib/devices/ccvs/ccvssacl.c, * src/spicelib/devices/ccvs/ccvssld.c, * src/spicelib/devices/ccvs/ccvssprt.c, * src/spicelib/devices/ccvs/ccvssset.c, * src/spicelib/devices/cktask.c, * src/spicelib/devices/cpl/cpldefs.h, * src/spicelib/devices/csw/cswacld.c, * src/spicelib/devices/csw/cswdefs.h, * src/spicelib/devices/csw/cswload.c, * src/spicelib/devices/csw/cswnoise.c, * src/spicelib/devices/csw/cswpzld.c, * src/spicelib/devices/csw/cswsetup.c, * src/spicelib/devices/dio/dioacld.c, * src/spicelib/devices/dio/dioconv.c, * src/spicelib/devices/dio/diodefs.h, * src/spicelib/devices/dio/diodisto.c, * src/spicelib/devices/dio/diodset.c, * src/spicelib/devices/dio/diogetic.c, * src/spicelib/devices/dio/dioload.c, * src/spicelib/devices/dio/dionoise.c, * src/spicelib/devices/dio/diopzld.c, * src/spicelib/devices/dio/diosacl.c, * src/spicelib/devices/dio/diosetup.c, * src/spicelib/devices/dio/diosload.c, * src/spicelib/devices/dio/diosprt.c, * src/spicelib/devices/dio/diosset.c, * src/spicelib/devices/dio/diosupd.c, * src/spicelib/devices/dio/diotemp.c, * src/spicelib/devices/dio/diotrunc.c, * src/spicelib/devices/hfet1/hfetacl.c, * src/spicelib/devices/hfet1/hfetdefs.h, * src/spicelib/devices/hfet1/hfetgetic.c, * src/spicelib/devices/hfet1/hfetload.c, * src/spicelib/devices/hfet1/hfetpzl.c, * src/spicelib/devices/hfet1/hfetsetup.c, * src/spicelib/devices/hfet1/hfettemp.c, * src/spicelib/devices/hfet1/hfettrunc.c, * src/spicelib/devices/hfet2/hfet2acl.c, * src/spicelib/devices/hfet2/hfet2defs.h, * src/spicelib/devices/hfet2/hfet2getic.c, * src/spicelib/devices/hfet2/hfet2load.c, * src/spicelib/devices/hfet2/hfet2pzl.c, * src/spicelib/devices/hfet2/hfet2setup.c, * src/spicelib/devices/hfet2/hfet2temp.c, * src/spicelib/devices/hfet2/hfet2trunc.c, * src/spicelib/devices/hisim2/hsm2def.h, * src/spicelib/devices/hisimhv/hsmhvdef.h, * src/spicelib/devices/ind/indacld.c, * src/spicelib/devices/ind/inddefs.h, * src/spicelib/devices/ind/indload.c, * src/spicelib/devices/ind/indpzld.c, * src/spicelib/devices/ind/indsetup.c, * src/spicelib/devices/ind/indsload.c, * src/spicelib/devices/ind/indsprt.c, * src/spicelib/devices/ind/indsset.c, * src/spicelib/devices/ind/indsupd.c, * src/spicelib/devices/ind/indtemp.c, * src/spicelib/devices/ind/indtrunc.c, * src/spicelib/devices/ind/mutacld.c, * src/spicelib/devices/ind/mutpzld.c, * src/spicelib/devices/ind/mutsprt.c, * src/spicelib/devices/ind/mutsset.c, * src/spicelib/devices/ind/muttemp.c, * src/spicelib/devices/isrc/isrcacld.c, * src/spicelib/devices/isrc/isrcdefs.h, * src/spicelib/devices/isrc/isrcload.c, * src/spicelib/devices/isrc/isrctemp.c, * src/spicelib/devices/jfet/jfetacld.c, * src/spicelib/devices/jfet/jfetdefs.h, * src/spicelib/devices/jfet/jfetdist.c, * src/spicelib/devices/jfet/jfetdset.c, * src/spicelib/devices/jfet/jfetic.c, * src/spicelib/devices/jfet/jfetload.c, * src/spicelib/devices/jfet/jfetnoi.c, * src/spicelib/devices/jfet/jfetpzld.c, * src/spicelib/devices/jfet/jfetset.c, * src/spicelib/devices/jfet/jfettemp.c, * src/spicelib/devices/jfet/jfettrun.c, * src/spicelib/devices/jfet2/jfet2acld.c, * src/spicelib/devices/jfet2/jfet2defs.h, * src/spicelib/devices/jfet2/jfet2ic.c, * src/spicelib/devices/jfet2/jfet2load.c, * src/spicelib/devices/jfet2/jfet2noi.c, * src/spicelib/devices/jfet2/jfet2set.c, * src/spicelib/devices/jfet2/jfet2temp.c, * src/spicelib/devices/jfet2/jfet2trun.c, * src/spicelib/devices/ltra/ltraacct.c, * src/spicelib/devices/ltra/ltraacld.c, * src/spicelib/devices/ltra/ltradefs.h, * src/spicelib/devices/ltra/ltraload.c, * src/spicelib/devices/ltra/ltratemp.c, * src/spicelib/devices/ltra/ltratrun.c, * src/spicelib/devices/mes/mesacl.c, * src/spicelib/devices/mes/mesdefs.h, * src/spicelib/devices/mes/mesdisto.c, * src/spicelib/devices/mes/mesdset.c, * src/spicelib/devices/mes/mesgetic.c, * src/spicelib/devices/mes/mesload.c, * src/spicelib/devices/mes/mesnoise.c, * src/spicelib/devices/mes/mespzld.c, * src/spicelib/devices/mes/messetup.c, * src/spicelib/devices/mes/mestrunc.c, * src/spicelib/devices/mesa/mesaacl.c, * src/spicelib/devices/mesa/mesadefs.h, * src/spicelib/devices/mesa/mesagetic.c, * src/spicelib/devices/mesa/mesaload.c, * src/spicelib/devices/mesa/mesapzl.c, * src/spicelib/devices/mesa/mesasetup.c, * src/spicelib/devices/mesa/mesatemp.c, * src/spicelib/devices/mesa/mesatrunc.c, * src/spicelib/devices/mos1/mos1acld.c, * src/spicelib/devices/mos1/mos1conv.c, * src/spicelib/devices/mos1/mos1defs.h, * src/spicelib/devices/mos1/mos1dist.c, * src/spicelib/devices/mos1/mos1dset.c, * src/spicelib/devices/mos1/mos1ic.c, * src/spicelib/devices/mos1/mos1load.c, * src/spicelib/devices/mos1/mos1noi.c, * src/spicelib/devices/mos1/mos1pzld.c, * src/spicelib/devices/mos1/mos1sacl.c, * src/spicelib/devices/mos1/mos1set.c, * src/spicelib/devices/mos1/mos1sld.c, * src/spicelib/devices/mos1/mos1sprt.c, * src/spicelib/devices/mos1/mos1sset.c, * src/spicelib/devices/mos1/mos1supd.c, * src/spicelib/devices/mos1/mos1temp.c, * src/spicelib/devices/mos1/mos1trun.c, * src/spicelib/devices/mos2/mos2acld.c, * src/spicelib/devices/mos2/mos2conv.c, * src/spicelib/devices/mos2/mos2defs.h, * src/spicelib/devices/mos2/mos2dist.c, * src/spicelib/devices/mos2/mos2dset.c, * src/spicelib/devices/mos2/mos2ic.c, * src/spicelib/devices/mos2/mos2load.c, * src/spicelib/devices/mos2/mos2noi.c, * src/spicelib/devices/mos2/mos2pzld.c, * src/spicelib/devices/mos2/mos2sacl.c, * src/spicelib/devices/mos2/mos2set.c, * src/spicelib/devices/mos2/mos2sld.c, * src/spicelib/devices/mos2/mos2sprt.c, * src/spicelib/devices/mos2/mos2sset.c, * src/spicelib/devices/mos2/mos2supd.c, * src/spicelib/devices/mos2/mos2temp.c, * src/spicelib/devices/mos2/mos2trun.c, * src/spicelib/devices/mos3/mos3acld.c, * src/spicelib/devices/mos3/mos3conv.c, * src/spicelib/devices/mos3/mos3defs.h, * src/spicelib/devices/mos3/mos3dist.c, * src/spicelib/devices/mos3/mos3dset.c, * src/spicelib/devices/mos3/mos3ic.c, * src/spicelib/devices/mos3/mos3load.c, * src/spicelib/devices/mos3/mos3noi.c, * src/spicelib/devices/mos3/mos3pzld.c, * src/spicelib/devices/mos3/mos3sacl.c, * src/spicelib/devices/mos3/mos3set.c, * src/spicelib/devices/mos3/mos3sld.c, * src/spicelib/devices/mos3/mos3sprt.c, * src/spicelib/devices/mos3/mos3sset.c, * src/spicelib/devices/mos3/mos3supd.c, * src/spicelib/devices/mos3/mos3temp.c, * src/spicelib/devices/mos3/mos3trun.c, * src/spicelib/devices/mos6/mos6conv.c, * src/spicelib/devices/mos6/mos6defs.h, * src/spicelib/devices/mos6/mos6ic.c, * src/spicelib/devices/mos6/mos6load.c, * src/spicelib/devices/mos6/mos6set.c, * src/spicelib/devices/mos6/mos6temp.c, * src/spicelib/devices/mos6/mos6trun.c, * src/spicelib/devices/mos9/mos9acld.c, * src/spicelib/devices/mos9/mos9conv.c, * src/spicelib/devices/mos9/mos9defs.h, * src/spicelib/devices/mos9/mos9dist.c, * src/spicelib/devices/mos9/mos9dset.c, * src/spicelib/devices/mos9/mos9ic.c, * src/spicelib/devices/mos9/mos9load.c, * src/spicelib/devices/mos9/mos9noi.c, * src/spicelib/devices/mos9/mos9pzld.c, * src/spicelib/devices/mos9/mos9sacl.c, * src/spicelib/devices/mos9/mos9set.c, * src/spicelib/devices/mos9/mos9sld.c, * src/spicelib/devices/mos9/mos9sprt.c, * src/spicelib/devices/mos9/mos9sset.c, * src/spicelib/devices/mos9/mos9supd.c, * src/spicelib/devices/mos9/mos9temp.c, * src/spicelib/devices/mos9/mos9trun.c, * src/spicelib/devices/nbjt/nbjtacld.c, * src/spicelib/devices/nbjt/nbjtdefs.h, * src/spicelib/devices/nbjt/nbjtdump.c, * src/spicelib/devices/nbjt/nbjtload.c, * src/spicelib/devices/nbjt/nbjtpzld.c, * src/spicelib/devices/nbjt/nbjtset.c, * src/spicelib/devices/nbjt/nbjttemp.c, * src/spicelib/devices/nbjt/nbjttrun.c, * src/spicelib/devices/nbjt2/nbjt2def.h, * src/spicelib/devices/nbjt2/nbt2acld.c, * src/spicelib/devices/nbjt2/nbt2dump.c, * src/spicelib/devices/nbjt2/nbt2load.c, * src/spicelib/devices/nbjt2/nbt2pzld.c, * src/spicelib/devices/nbjt2/nbt2set.c, * src/spicelib/devices/nbjt2/nbt2temp.c, * src/spicelib/devices/nbjt2/nbt2trun.c, * src/spicelib/devices/ndev/ndevaccept.c, * src/spicelib/devices/ndev/ndevdefs.h, * src/spicelib/devices/ndev/ndevload.c, * src/spicelib/devices/numd/numdacld.c, * src/spicelib/devices/numd/numddefs.h, * src/spicelib/devices/numd/numddump.c, * src/spicelib/devices/numd/numdload.c, * src/spicelib/devices/numd/numdpzld.c, * src/spicelib/devices/numd/numdset.c, * src/spicelib/devices/numd/numdtemp.c, * src/spicelib/devices/numd/numdtrun.c, * src/spicelib/devices/numd2/nud2acld.c, * src/spicelib/devices/numd2/nud2dump.c, * src/spicelib/devices/numd2/nud2load.c, * src/spicelib/devices/numd2/nud2pzld.c, * src/spicelib/devices/numd2/nud2set.c, * src/spicelib/devices/numd2/nud2temp.c, * src/spicelib/devices/numd2/nud2trun.c, * src/spicelib/devices/numd2/numd2def.h, * src/spicelib/devices/numos/nummacld.c, * src/spicelib/devices/numos/nummdump.c, * src/spicelib/devices/numos/nummload.c, * src/spicelib/devices/numos/nummpzld.c, * src/spicelib/devices/numos/nummset.c, * src/spicelib/devices/numos/nummtemp.c, * src/spicelib/devices/numos/nummtrun.c, * src/spicelib/devices/numos/numosdef.h, * src/spicelib/devices/res/resdefs.h, * src/spicelib/devices/res/resload.c, * src/spicelib/devices/res/resnoise.c, * src/spicelib/devices/res/respzld.c, * src/spicelib/devices/res/ressacl.c, * src/spicelib/devices/res/ressload.c, * src/spicelib/devices/res/ressprt.c, * src/spicelib/devices/res/ressset.c, * src/spicelib/devices/res/restemp.c, * src/spicelib/devices/soi3/soi3acld.c, * src/spicelib/devices/soi3/soi3conv.c, * src/spicelib/devices/soi3/soi3defs.h, * src/spicelib/devices/soi3/soi3ic.c, * src/spicelib/devices/soi3/soi3load.c, * src/spicelib/devices/soi3/soi3nois.c, * src/spicelib/devices/soi3/soi3set.c, * src/spicelib/devices/soi3/soi3temp.c, * src/spicelib/devices/soi3/soi3trun.c, * src/spicelib/devices/sw/swacload.c, * src/spicelib/devices/sw/swdefs.h, * src/spicelib/devices/sw/swload.c, * src/spicelib/devices/sw/swnoise.c, * src/spicelib/devices/sw/swpzload.c, * src/spicelib/devices/sw/swsetup.c, * src/spicelib/devices/tra/traacct.c, * src/spicelib/devices/tra/traacld.c, * src/spicelib/devices/tra/tradefs.h, * src/spicelib/devices/tra/traload.c, * src/spicelib/devices/tra/tratemp.c, * src/spicelib/devices/tra/tratrunc.c, * src/spicelib/devices/txl/txldefs.h, * src/spicelib/devices/urc/urcdefs.h, * src/spicelib/devices/urc/urcsetup.c, * src/spicelib/devices/vbic/vbicacld.c, * src/spicelib/devices/vbic/vbicconv.c, * src/spicelib/devices/vbic/vbicdefs.h, * src/spicelib/devices/vbic/vbicgetic.c, * src/spicelib/devices/vbic/vbicload.c, * src/spicelib/devices/vbic/vbicnoise.c, * src/spicelib/devices/vbic/vbicpzld.c, * src/spicelib/devices/vbic/vbicsetup.c, * src/spicelib/devices/vbic/vbictemp.c, * src/spicelib/devices/vbic/vbictrunc.c, * src/spicelib/devices/vccs/vccsdefs.h, * src/spicelib/devices/vccs/vccsload.c, * src/spicelib/devices/vccs/vccspzld.c, * src/spicelib/devices/vccs/vccssacl.c, * src/spicelib/devices/vccs/vccssld.c, * src/spicelib/devices/vccs/vccssprt.c, * src/spicelib/devices/vccs/vccssset.c, * src/spicelib/devices/vcvs/vcvsdefs.h, * src/spicelib/devices/vcvs/vcvsload.c, * src/spicelib/devices/vcvs/vcvspzld.c, * src/spicelib/devices/vcvs/vcvssacl.c, * src/spicelib/devices/vcvs/vcvssld.c, * src/spicelib/devices/vcvs/vcvssprt.c, * src/spicelib/devices/vcvs/vcvssset.c, * src/spicelib/devices/vsrc/vsrcacld.c, * src/spicelib/devices/vsrc/vsrcdefs.h, * src/spicelib/devices/vsrc/vsrcload.c, * src/spicelib/devices/vsrc/vsrcpzld.c, * src/spicelib/devices/vsrc/vsrctemp.c, * src/spicelib/parser/sperror.c, * src/tclspice.c, * visualc/vngspice.vcproj: removed ancient PARALLEL_ARCH feature removed variables ARCHme ARCHsize removed functions SMPcombine() SMPcCombine() CKTpartition() removed files spcombin.c cktpartn.c removed struct slots STATcombineTime STATtranCombTime STATacCombTime GENowner owner 2012-10-22 Francesco Lannutti * src/spicelib/devices/bsim4/b4acld.c, * src/spicelib/devices/bsim4/b4cvtest.c, * src/spicelib/devices/bsim4/b4getic.c, * src/spicelib/devices/bsim4/b4ld.c, * src/spicelib/devices/bsim4/b4pzld.c, * src/spicelib/devices/bsim4/b4temp.c, * src/spicelib/devices/bsim4v4/b4v4acld.c, * src/spicelib/devices/bsim4v4/b4v4getic.c, * src/spicelib/devices/bsim4v4/b4v4ld.c, * src/spicelib/devices/bsim4v4/b4v4pzld.c, * src/spicelib/devices/bsim4v4/b4v4temp.c, * src/spicelib/devices/bsim4v5/b4v5acld.c, * src/spicelib/devices/bsim4v5/b4v5getic.c, * src/spicelib/devices/bsim4v5/b4v5ld.c, * src/spicelib/devices/bsim4v5/b4v5pzld.c, * src/spicelib/devices/bsim4v5/b4v5temp.c, * src/spicelib/devices/bsim4v6/b4v6acld.c, * src/spicelib/devices/bsim4v6/b4v6cvtest.c, * src/spicelib/devices/bsim4v6/b4v6getic.c, * src/spicelib/devices/bsim4v6/b4v6ld.c, * src/spicelib/devices/bsim4v6/b4v6pzld.c, * src/spicelib/devices/bsim4v6/b4v6temp.c: white space changes 2012-10-22 Francesco Lannutti * src/spicelib/devices/bsim3v1/ChangeLog, * src/spicelib/devices/bsim4v4/ChangeLog: bsim3v1/ChangeLog, bsim4v4/ChangeLog: cleanup 2012-10-21 h_vogt * examples/xspice/xspice_c1.cir: example input file as cited in manual 2012-10-20 rlar * ChangeLog, * src/frontend/inpcom.c, * src/maths/misc/randnumb.c, * src/spicelib/devices/bsim3soi/BsimTerms_use, * src/spicelib/devices/bsim3soi_dd/BsimTerms_use, * src/spicelib/devices/bsim3soi_fd/BsimTerms_use, * src/spicelib/devices/bsim3soi_pd/BsimTerms_use, * src/spicelib/devices/cpl/cplsetup.c, * src/spicelib/devices/isrc/isrcacct.c, * src/spicelib/devices/vsrc/vsrcacct.c: use utf-8 encoding 2012-10-20 rlar * INSTALL, * contrib/mslib/COPYING, * contrib/mslib/libprm_readme, * contrib/mslib/mslib_readme, * contrib/scripts/COPYING, * contrib/scripts/libprm_readme, * examples/Monte_Carlo/OpWien.sp, * examples/control_structs/s-param.cir, * examples/measure/simple-meas-tran.sp, * src/spice.def: missing newline at end of file 2012-10-20 rlar * src/xspice/examples/rca3040.in, * src/xspice/examples/rtlinv.in: Changed line-ending from DOS to UNIX 2012-10-17 h_vogt * src/frontend/inpcom.c: inpcom.c: require parentheses in ternary functions if numparam parser is involved (no B sources) 2012-10-17 rlar * src/frontend/postcoms.c: com_print(), fix a memory leak 2012-10-17 rlar * src/spicelib/analysis/dctrcurv.c: DCtrCurv(), fix a memory leak 2012-10-17 rlar * src/frontend/parse.c: mkfnode(), fix a memory leak 2012-10-15 rlar * src/frontend/postcoms.c: com_write(), com_write_sparam(), fix a big memory leak 2012-10-15 h_vogt * src/frontend/fourier.c: fourier.c: rename stored vectors 2012-10-15 h_vogt * src/frontend/inpcom.c: inpcom.c: plug small memory leak 2012-10-13 rlar * src/frontend/vectors.c: vector.c, rewrite vec_basename(), FIXME ! This rewritten code is functionally equivalent to the previous code, yet the result is queer, because the char *v_name slot of struct dvec is read beyond its terminating '\0' Is there indeed some code in ngspice which creates v_name strings with an embedded '\0' ? 2012-10-13 rlar * src/frontend/inpcom.c: inpcom.c, rewrite 2012-10-13 h_vogt * src/frontend/fourier.c: fourier.c: output also to vector feature request tracker no. 3575841 2012-10-13 rlar * src/frontend/fourier.c: fourier.c: remove even more memory leaks 2012-10-13 rlar * src/frontend/inpcom.c: inpcom.c, use strchr() in favour of strstr() 2012-10-13 rlar * src/frontend/inpcom.c: inpcom.c, inp_fix_ternary_operator_str(), use copy_substring() 2012-10-13 rlar * src/frontend/inpcom.c: inpcom.c, inp_fix_ternary_operator_str(), rewrite 2012-10-13 rlar * src/frontend/inpcom.c: inpcom.c, get_instance_subckt(), more carefull when there is trailing whitespace 2012-10-13 rlar * src/frontend/inpcom.c: inpcom.c, get_instance_subckt(), rewrite 2012-10-13 h_vogt * src/frontend/fourier.c: fourier.c: remove memory leaks 2012-10-13 rlar * src/frontend/inpcom.c: inpcom.c, make use of copy_substring() 2012-10-13 rlar * src/frontend/inpcom.c: inpcom.c, rewrite 2012-10-13 rlar * src/frontend/inpcom.c: inpcom.c, bug fix in inp_get_subckt_name() 2012-10-12 rlar * src/frontend/inpcom.c: inpcom.c, rewrite 2012-10-12 rlar * src/frontend/inpcom.c: inpcom.c, rewrite 2012-10-12 rlar * src/frontend/inpcom.c: inpcom.c, cleanup 2012-10-11 rlar * src/frontend/inpcom.c: inpcom.c, fix a bug which was introduced in commit skip-ws, #5/6, unify macro versions, obj not invariant where the SKIP.*back.* macros have been unified FIXME, the check for `\0' in the backwards direction if of course nonsense. These backward functions either shall not check it at all (being optimistic), or they shell check against a start of string pointer. 2012-10-10 rlar * src/frontend/inpcom.c: inpcom.c, cleanup 2012-10-09 h_vogt * examples/measure/simple-meas-tran.sp, * src/frontend/plotting/gnuplot.c: gnuplot.c: improve scaling of y axis 2012-10-08 rlar * src/frontend/inpcom.c: skip_ws(), #2/2, drop macros, obj-invariant 2012-10-08 rlar * src/frontend/inpcom.c: skip_ws(), #1/2, use functions instead of macros 2012-10-07 rlar * src/frontend/inpcom.c: skip-ws, #6/6, unify macro versions, obj-invariant checked for object file invariance 2012-10-07 rlar * src/frontend/inpcom.c: skip-ws, #5/6, unify macro versions, obj not invariant 2012-10-07 rlar * src/frontend/inpcom.c: skip-ws, #4/6, use macros, obj-invariant checked for object file invariance 2012-10-07 rlar * src/frontend/inpcom.c: skip-ws, #3/6, introduce macros, obj-invariant checked for object file invariance 2012-10-07 rlar * src/frontend/inpcom.c: skip-ws, #2/6, prepare for rewrite, obj-invariant checked for object file invariance 2012-10-07 rlar * src/frontend/inpcom.c: skip-ws, #1/6, prepare for rewrite, obj-invariant checked for object file invariance 2012-10-07 h_vogt * src/frontend/inpcom.c: inpcom.c: remove cccs from F, ccvs from H source 2012-10-07 h_vogt * src/frontend/inpcom.c: inpcom.c: correct replacement of vccs, vcvs in E, G-sources search for 'par(' instead of 'par' 2012-10-06 rlar * src/frontend/com_fft.c, * src/frontend/parse.c, * src/frontend/parse.h, * src/frontend/spec.c: com_fft(), com_psd(), com_spec(), cleanup storage more thoroughly use free_pnode() instead of free_pnode_o() drop free_pnode_o() 2012-10-06 rlar * src/frontend/misccoms.c: invoke com_remcirc() in com_quit() 2012-10-06 rlar * src/ngnutmeg.c, * src/ngspice.c: cleanup, whitespace 2012-10-06 rlar * src/ngnutmeg.c: cleanup, drop unused macros 2012-10-06 rlar * src/frontend/com_measure2.h, * src/ngnutmeg.c, * src/ngspice.c, * src/spicelib/parser/inp2n.c: cleanup, ngspice/config.h is already in ngspice/ngspice.h, #2/2 2012-10-06 rlar * src/frontend/com_ahelp.c, * src/frontend/com_asciiplot.c, * src/frontend/com_dump.c, * src/frontend/com_echo.c, * src/frontend/com_hardcopy.c, * src/frontend/com_help.c, * src/frontend/com_measure2.c, * src/frontend/com_plot.c, * src/frontend/com_rehash.c, * src/frontend/com_set.c, * src/frontend/com_shell.c, * src/frontend/com_shift.c, * src/frontend/com_state.c, * src/frontend/com_strcmp.c, * src/frontend/com_sysinfo.c, * src/frontend/com_unset.c, * src/frontend/help/help.c, * src/frontend/help/provide.c, * src/frontend/help/readhelp.c, * src/frontend/help/x11disp.c, * src/frontend/help/xdisplay.c, * src/frontend/parser/backq.c, * src/frontend/parser/complete.c, * src/frontend/parser/glob.c, * src/frontend/parser/input.c, * src/frontend/parser/lexical.c, * src/frontend/parser/numparse.c, * src/frontend/parser/std.c, * src/frontend/parser/unixcom.c, * src/frontend/plotting/plotit.c, * src/frontend/resource.c, * src/frontend/streams.c, * src/frontend/terminal.c, * src/frontend/variable.c, * src/maths/poly/interpolate.c, * src/misc/dup2.c, * src/misc/misc_time.c, * src/misc/wlist.c, * src/nghelp.c, * src/ngproc2mod.c, * src/spicelib/analysis/dcpss.c, * src/spicelib/analysis/dctran.c, * src/spicelib/devices/cktask.c, * src/spicelib/devices/cktbindnode.c, * src/spicelib/devices/dev.c, * src/spicelib/parser/inppas1.c, * src/spicelib/parser/inppas3.c, * src/spicelib/parser/ptfuncs.c: cleanup, ngspice/config.h is already in ngspice/ngspice.h, #1/2 (easy ones) 2012-10-03 h_vogt * src/frontend/outitf.c, * src/frontend/typesdef.c, * src/include/ngspice/sim.h: outif.c, typesdef.c, sim.h: correct labeling of cap, cur, and charge data 2012-10-03 h_vogt * src/spicelib/devices/bsim3/b3ld.c, * src/spicelib/devices/bsim3v32/b3v32ld.c, * src/spicelib/devices/bsim4/b4ld.c: b3ld.c, b4ld.c, b3v32ld.c: enable capacitance calculation during dc sweep 2012-10-01 h_vogt * src/spicelib/devices/bsim3v32/b3v32.c: b3v32.c: make additional parameters accessible by @m1[par] 2012-10-01 h_vogt * src/frontend/parser/complete.c: prototype for controlled_exit() 2012-10-01 rlar * src/frontend/postcoms.c: com_write_sparam(), cleanup storage more thoroughly (`wl_sparam') 2012-10-01 rlar * src/frontend/device.c: com_alter_common(), cleanup storage more thoroughly (on error) 2012-10-01 rlar * src/frontend/postcoms.c: com_write(), com_write_sparam(), com_cross(), cleanup storage more thoroughly 2012-10-01 rlar * src/frontend/com_fft.c: com_psd(), cleanup storage more thoroughly (`win') 2012-10-01 rlar * src/frontend/postcoms.c: com_print(), cleanup storage more thoroughly 2012-10-01 rlar * src/frontend/com_compose.c: com_compose(), cleanup storage more thoroughly 2012-10-01 rlar * src/frontend/cpitf.c, * src/frontend/plotting/plotit.c, * src/frontend/postcoms.c: variable rename, unify the source checked for object file invariance 2012-10-01 rlar * src/frontend/postcoms.c: com_print(), com_cross(), use for(;;) loops 2012-09-30 h_vogt * src/spicelib/devices/bsim3/b3.c: bsim3, make additonal parameters accessible with @m[par] 2012-09-30 rlar * src/frontend/define.c: variable rename, unify the source checked for object file invariance 2012-09-30 rlar * src/frontend/fourier.c: fourier(), use for(;;) loops 2012-09-30 rlar * src/frontend/fourier.c: variable rename, unify the source checked for object file invariance 2012-09-30 rlar * src/frontend/fourier.c: bug fix, fourier(), prevent endless loop when processing unexpected vectors 2012-09-30 rlar * src/frontend/com_compose.c: com_compose(), use for(;;) loops 2012-09-30 rlar * src/frontend/com_compose.c: variable rename, unify the source checked for object file invariance 2012-09-30 rlar * src/frontend/spec.c: com_spec(), use for(;;) loops 2012-09-30 rlar * src/frontend/spec.c: variable rename, unify the source checked for object file invariance 2012-09-30 rlar * src/frontend/com_fft.c: com_fft(), com_psd(), use for(;;) loops 2012-09-30 rlar * src/frontend/com_fft.c, * src/frontend/com_let.c: variable rename, unify the source checked for object file invariance 2012-09-30 rlar * src/frontend/inp.c, * src/frontend/parser/complete.c: bug fix, invalid read when the title line is the empty 2012-09-29 dwarning * src/frontend/com_hardcopy.c, * src/frontend/numparam/spicenum.c, * src/frontend/numparam/xpressn.c, * src/frontend/trannoise/1-f-code.c, * src/frontend/trannoise/FastNorm3.c, * src/frontend/trannoise/wallace.c, * src/frontend/variable.c, * src/spicelib/devices/hisim2/hsm2acld.c, * src/spicelib/devices/hisim2/hsm2eval.c, * src/spicelib/devices/hisim2/hsm2ld.c, * src/spicelib/parser/inppas1.c, * src/xspice/evt/evtbackup.c, * src/xspice/evt/evtdeque.c, * src/xspice/evt/evtdump.c, * src/xspice/evt/evtinit.c, * src/xspice/evt/evtiter.c, * src/xspice/evt/evtload.c, * src/xspice/evt/evtnext_time.c, * src/xspice/evt/evtop.c, * src/xspice/evt/evtplot.c, * src/xspice/evt/evtprint.c, * src/xspice/evt/evtqueue.c, * src/xspice/evt/evtsetup.c, * src/xspice/evt/evttermi.c, * src/xspice/mif/mifdelete.c: changed the #include order - ngspice.h must be first because icc complains about declaration visibility of mmsghdr struct 2012-09-29 dwarning * src/spicelib/devices/bjt/bjttemp.c: bjttemp.c: prevent uninitialized variables 2012-09-27 rlar * src/spicelib/analysis/acan.c: polish a very old and unused artifact in WANT_SENSE2 2012-09-27 rlar * src/frontend/parse.c: cleanup db_print_pnode_tree() 2012-09-27 rlar * src/frontend/define.c: bug fix, dvec in a `define' can't be member of any plot 2012-09-27 rlar * src/frontend/vectors.c: bug fix, avoid segfault when the refered plot is still empty 2012-09-26 h_vogt * src/frontend/plotting/grid.c: grid.c: prevent overflow of div_list 2012-09-26 h_vogt * src/spicelib/parser/ifeval.c: ifeval.c: reduce fudge factor for div and atanh 2012-09-26 h_vogt * src/frontend/plotting/plotit.c: grid.c: prevent crash if real low and high values are close 2012-09-26 h_vogt * src/frontend/inp.c, * src/include/ngspice/cktdefs.h, * src/include/ngspice/optdefs.h, * src/include/ngspice/tskdefs.h, * src/spicelib/analysis/acan.c, * src/spicelib/analysis/cktdojob.c, * src/spicelib/analysis/cktntask.c, * src/spicelib/analysis/cktsopt.c: new option noopac, don't do op simulation before ac if circuit is linear May simplify ac simulation of passive RLC networks (No need to add series resistors in Ls, allows to C inseries) 2012-09-25 rlar * src/frontend/misccoms.c: disable some more cleanup code in com_quit() destroy_ivars() is reported to freeze 2012-09-22 rlar * src/frontend/subckt.c: subckt.c, cleanup, use `for' instead of `while' 2012-09-22 rlar * configure.ac: automake 1.12 might need AM_PROG_AR, which is not available in 1.11 2012-09-22 rlar * src/frontend/aspice.c, * src/frontend/breakp.c, * src/frontend/breakp2.c, * src/frontend/circuits.c, * src/frontend/com_ahelp.c, * src/frontend/com_alias.c, * src/frontend/com_asciiplot.c, * src/frontend/com_cdump.c, * src/frontend/com_chdir.c, * src/frontend/com_compose.c, * src/frontend/com_display.c, * src/frontend/com_dl.c, * src/frontend/com_dump.c, * src/frontend/com_gnuplot.c, * src/frontend/com_hardcopy.c, * src/frontend/com_help.c, * src/frontend/com_history.c, * src/frontend/com_let.c, * src/frontend/com_measure2.c, * src/frontend/com_option.c, * src/frontend/com_plot.c, * src/frontend/com_rehash.c, * src/frontend/com_set.c, * src/frontend/com_shell.c, * src/frontend/com_shift.c, * src/frontend/com_state.c, * src/frontend/com_strcmp.c, * src/frontend/com_unset.c, * src/frontend/com_xgraph.c, * src/frontend/control.c, * src/frontend/device.c, * src/frontend/diff.c, * src/frontend/dotcards.c, * src/frontend/error.c, * src/frontend/help/help.c, * src/frontend/help/provide.c, * src/frontend/help/readhelp.c, * src/frontend/help/textdisp.c, * src/frontend/help/x11disp.c, * src/frontend/init.c, * src/frontend/inpcom.c, * src/frontend/interp.c, * src/frontend/inventory.c, * src/frontend/linear.c, * src/frontend/nutinp.c, * src/frontend/parser/complete.c, * src/frontend/parser/cshpar.c, * src/frontend/parser/unixcom.c, * src/frontend/plotting/agraf.c, * src/frontend/plotting/gnuplot.c, * src/frontend/plotting/graf.c, * src/frontend/plotting/grid.c, * src/frontend/plotting/plotcurv.c, * src/frontend/plotting/pvec.c, * src/frontend/plotting/x11.c, * src/frontend/plotting/xgraph.c, * src/frontend/postcoms.c, * src/frontend/quote.c, * src/frontend/rawfile.c, * src/frontend/resource.c, * src/frontend/runcoms.c, * src/frontend/runcoms2.c, * src/frontend/signal_handler.c, * src/frontend/spec.c, * src/frontend/spiceif.c, * src/frontend/subckt.c, * src/frontend/terminal.c, * src/frontend/trannoise/FastNorm3.c, * src/frontend/trannoise/wallace.c, * src/frontend/typesdef.c, * src/frontend/vectors.c: src/frontend/** remove superfluous `return' invocations 2012-09-22 rlar * src/frontend/arg.c, * src/frontend/com_dl.h, * src/frontend/com_dump.c, * src/frontend/com_ghelp.c, * src/frontend/com_history.c, * src/frontend/com_measure2.c, * src/frontend/com_rehash.c, * src/frontend/com_shift.c, * src/frontend/com_strcmp.c, * src/frontend/control.h, * src/frontend/define.h, * src/frontend/help/help.c, * src/frontend/help/provide.c, * src/frontend/help/readhelp.c, * src/frontend/help/textdisp.c, * src/frontend/help/x11disp.c, * src/frontend/help/xdisplay.c, * src/frontend/hpgl.h, * src/frontend/init.c, * src/frontend/interp.c, * src/frontend/inventory.c, * src/frontend/linear.c, * src/frontend/miscvars.c, * src/frontend/numparam/general.h, * src/frontend/postsc.c, * src/frontend/rawfile.c, * src/frontend/runcoms2.c, * src/frontend/spiceif.c: src/frontend/** whitespace, indentation, ... checked for object file invariance on linux 2012-09-22 rlar * src/frontend/misccoms.c: invoke cleanup functions in com_quit() trying to get the valgrind reports down. 2012-09-21 rlar * src/frontend/misccoms.c, * src/main.c, * src/spicelib/devices/dev.c, * src/spicelib/devices/dev.h: free spice_init_devices() allocated memory in com_quit() 2012-09-21 rlar * src/frontend/misccoms.c, * src/frontend/postcoms.c, * src/frontend/postcoms.h: destroy `const' plot in com_quit() 2012-09-21 rlar * src/frontend/postcoms.c: drop a superfluous cast 2012-09-20 dwarning * src/spicelib/devices/dio/dioload.c, * src/spicelib/devices/dio/diosetup.c, * src/spicelib/devices/dio/diotemp.c: correct the diode temperature model 2012-09-20 rlar * src/frontend/dotcards.c, * src/frontend/numparam/xpressn.c: src/frontend/**, whitespace, object files will change, due to __LINE__ usage 2012-09-20 rlar * src/frontend/arg.c, * src/frontend/aspice.c, * src/frontend/breakp.c, * src/frontend/breakp2.c, * src/frontend/circuits.h, * src/frontend/com_ahelp.c, * src/frontend/com_alias.c, * src/frontend/com_cdump.c, * src/frontend/com_chdir.c, * src/frontend/com_compose.c, * src/frontend/com_display.c, * src/frontend/com_dl.c, * src/frontend/com_echo.c, * src/frontend/com_fft.c, * src/frontend/com_gnuplot.c, * src/frontend/com_hardcopy.c, * src/frontend/com_help.c, * src/frontend/com_history.c, * src/frontend/com_let.c, * src/frontend/com_measure2.c, * src/frontend/com_measure2.h, * src/frontend/com_option.c, * src/frontend/com_set.c, * src/frontend/com_setscale.c, * src/frontend/com_shell.c, * src/frontend/com_sysinfo.c, * src/frontend/com_xgraph.c, * src/frontend/commands.c, * src/frontend/control.c, * src/frontend/cpitf.c, * src/frontend/define.c, * src/frontend/device.c, * src/frontend/diff.c, * src/frontend/dimens.c, * src/frontend/dimens.h, * src/frontend/display.c, * src/frontend/dotcards.c, * src/frontend/error.c, * src/frontend/evaluate.c, * src/frontend/evaluate.h, * src/frontend/fourier.c, * src/frontend/ftesopt.c, * src/frontend/gens.c, * src/frontend/hpgl.c, * src/frontend/inp.c, * src/frontend/inpcom.c, * src/frontend/measure.c, * src/frontend/misccoms.c, * src/frontend/newcoms.c, * src/frontend/numparam/general.h, * src/frontend/numparam/mystring.c, * src/frontend/numparam/numpaif.h, * src/frontend/numparam/numparam.h, * src/frontend/numparam/spicenum.c, * src/frontend/numparam/xpressn.c, * src/frontend/nutinp.c, * src/frontend/options.c, * src/frontend/outitf.c, * src/frontend/outitf.h, * src/frontend/parse.c, * src/frontend/parser/backq.c, * src/frontend/parser/backq.h, * src/frontend/parser/complete.c, * src/frontend/parser/complete.h, * src/frontend/parser/cshpar.c, * src/frontend/parser/glob.c, * src/frontend/parser/glob.h, * src/frontend/parser/input.c, * src/frontend/parser/lexical.c, * src/frontend/parser/numparse.c, * src/frontend/parser/numparse.h, * src/frontend/parser/unixcom.c, * src/frontend/parser/unixcom.h, * src/frontend/plotting/agraf.c, * src/frontend/plotting/agraf.h, * src/frontend/plotting/clip.c, * src/frontend/plotting/gnuplot.c, * src/frontend/plotting/gnuplot.h, * src/frontend/plotting/graf.c, * src/frontend/plotting/graf.h, * src/frontend/plotting/graphdb.c, * src/frontend/plotting/graphdb.h, * src/frontend/plotting/grid.c, * src/frontend/plotting/plot5.c, * src/frontend/plotting/plot5.h, * src/frontend/plotting/plotcurv.c, * src/frontend/plotting/plotit.c, * src/frontend/plotting/plotting.c, * src/frontend/plotting/pvec.c, * src/frontend/plotting/x11.c, * src/frontend/plotting/x11.h, * src/frontend/plotting/xgraph.c, * src/frontend/plotting/xgraph.h, * src/frontend/points.c, * src/frontend/postcoms.c, * src/frontend/postsc.c, * src/frontend/quote.c, * src/frontend/rawfile.c, * src/frontend/resource.c, * src/frontend/runcoms.c, * src/frontend/runcoms2.c, * src/frontend/shyu.c, * src/frontend/signal_handler.c, * src/frontend/spec.c, * src/frontend/spec.h, * src/frontend/spiceif.c, * src/frontend/streams.c, * src/frontend/subckt.c, * src/frontend/terminal.c, * src/frontend/testcommands.c, * src/frontend/trannoise/1-f-code.c, * src/frontend/trannoise/1-f-code_d.c, * src/frontend/trannoise/FastNorm3.c, * src/frontend/trannoise/wallace.c, * src/frontend/typesdef.c, * src/frontend/variable.c, * src/frontend/variable.h, * src/frontend/vectors.c, * src/frontend/where.c: src/frontend/**, whitespace, indentation, ... untabify delete-trailing-whitespace braces ... checked for object file invariance on linux 2012-09-19 rlar * src/frontend/control.c, * src/frontend/inp.c, * src/frontend/plotting/clip.c, * src/frontend/plotting/graphdb.c, * src/frontend/plotting/plot5.c, * src/frontend/plotting/x11.c, * src/frontend/rawfile.c, * src/frontend/runcoms2.c, * src/frontend/subckt.c: cleanup some macros, try to be more careful 2012-09-15 rlar * src/frontend/options.c, * src/frontend/variable.c: fix ownership of `cp_promptstring' and `cp_program' 2012-09-14 Francesco Lannutti * configure.ac: configure.ac, silent compilation (enabled by default) using AM_SILENT_RULES([yes]) 2012-09-13 rlar * src/frontend/define.c: define.c, plug a memleak in com_undefine() 2012-09-13 rlar * src/frontend/define.c: define.c, cleanup 2012-09-13 rlar * src/frontend/define.c: define.c, cleanup 2012-09-13 rlar * src/frontend/define.c: define.c, whitespace cleanup 2012-09-13 rlar * src/frontend/define.c: define.c, bug fix, when undefining more than one udfunc 2012-09-13 rlar * src/frontend/device.c, * src/frontend/inp.c, * src/frontend/inpcom.c, * src/misc/ivars.c, * src/misc/util.c: api change for ngdirname() to fix a memory leak ngdirname did `own' the returned string. now the invoker is responsible for the returned string. note, this is contrary to the POSIX dirname() implementation, which *might* return pointers to statical allocated memory. 2012-09-11 h_vogt * src/xspice/icm/xtradev/lcouple/cfunc.mod: XSPICE lcouple: remove unused cm_analog_integrate 2012-09-10 h_vogt * src/xspice/icm/xtradev/core/cfunc.mod, * src/xspice/icm/xtradev/core/ifspec.ifs: XSPICE core: remove memory leak 2012-09-10 h_vogt * src/xspice/examples/analog_models4_transient.deck, * src/xspice/icm/analog/square/cfunc.mod, * src/xspice/icm/analog/square/ifspec.ifs: XSPICE square: remove memory leak, initialize phase1 2012-09-10 h_vogt * src/xspice/icm/analog/square/cfunc.mod: XSPICE square: indentations 2012-09-09 h_vogt * src/xspice/icm/analog/triangle/cfunc.mod, * src/xspice/icm/analog/triangle/ifspec.ifs: XSPICE triangle: remove memory leak remove initialization error for phase1 FIXME: there are still more initialization errors 2012-09-09 h_vogt * src/xspice/icm/analog/triangle/cfunc.mod: XSPICE triangle: indentations 2012-09-09 h_vogt * src/xspice/icm/analog/oneshot/cfunc.mod, * src/xspice/icm/analog/oneshot/ifspec.ifs: XSPICE oneshot: remove memory leak remove using uninitialzed variable old_clock correct waveform shape by using permanent breakpoints 2012-09-09 h_vogt * src/xspice/icm/analog/oneshot/cfunc.mod: indentations 2012-09-08 h_vogt * src/xspice/icm/analog/sine/cfunc.mod: XSPICE sine: out-of-bounds removed 2012-09-08 h_vogt * src/xspice/examples/analog_models4_transient.deck, * src/xspice/icm/analog/sine/cfunc.mod, * src/xspice/icm/analog/sine/ifspec.ifs: XSPICE sine source: memory leak removed (bug no. 3564166) 2012-09-07 h_vogt * src/spicelib/analysis/cktdest.c: cktdest.c: reset for XSPICE allocated memory (not yet complete) 2012-09-07 h_vogt * src/xspice/icm/analog/file_source/cfunc.mod, * src/xspice/icm/analog/file_source/ifspec.ifs: XSPICE filesource: remove segfault with op before tran 2012-09-02 h_vogt * src/spicelib/analysis/cktload.c: cktload.c, indentations 2012-08-30 h_vogt * src/frontend/inp.c: inp.c: unify syntax of .save and save commands: allow node1 and v(node1), v2#branch and i(v2), @dev[param] 2012-08-27 h_vogt * src/xspice/evt/evtqueue.c: evtqueue.c: plug memory leak 2012-08-27 h_vogt * src/spicelib/devices/res/resask.c: resask.c: avoid segfault if @R[i] is asked before analysis is run 2012-08-26 h_vogt * src/frontend/vectors.c, * src/spicelib/devices/res/resask.c: vectors.c, resask.c: indentation 2012-08-25 h_vogt * src/xspice/icm/digital/d_source/cfunc.mod, * src/xspice/icm/digital/d_source/ifspec.ifs: d_source: Use STATIC_VAR_TABLE to save memory 2012-08-23 rlar * src/frontend/misccoms.c, * src/frontend/parser/complete.c, * src/include/ngspice/cpextern.h: cleanup keyword databases on proram termination 2012-08-23 rlar * src/frontend/inp.c, * src/frontend/nutinp.c: plug a memory leak in inp_spsource/inp_nutsource (deck title string) 2012-08-23 rlar * src/frontend/misccoms.c, * src/main.c, * src/misc/ivars.c, * src/misc/ivars.h: cleanup ivars() related globals on program termination 2012-08-22 h_vogt * src/xspice/icm/digital/d_source/cfunc.mod: d_source: allow multiple instances 2012-08-22 rlar * src/frontend/trannoise/wallace.c: cleanup wallace arrays on program termination 2012-08-20 rlar * src/frontend/display.c: avoid error messages when finally closing the display device. these messages creeped in with commit 2012-08-19 18:58:31 "plug memory leak in x11.c" when the "printf" device Close and Update functions might be invoked on program termination. use the silent "nop" implementation instead of the error reporting "nodev" implementation 2012-08-20 h_vogt * src/xspice/icm/digital/d_source/cfunc.mod: d_source cfunc.mod: plug memory leaks 2012-08-19 h_vogt * src/xspice/icm/digital/d_source/cfunc.mod, * src/xspice/icm/digital/d_source/ifspec.ifs: bug no. 3456221: new d_source model 2012-08-19 rlar * src/xspice/icm/digital/d_source/cfunc.mod: cleanup, white space changes 2012-08-19 rlar * src/frontend/display.c, * src/frontend/misccoms.c, * src/frontend/plotting/x11.c: plug memory leak in x11.c try to obey the Xt toolkit protocol when closing widgets and application 2012-08-19 h_vogt * src/xspice/mif/mifgetvalue.c: mifgetvalue.c: need a copy to allow freeing token 2012-08-19 rlar * src/frontend/inp.c, * src/frontend/terminal.c, * src/include/ngspice/cpextern.h: rewrite inp_list() avoid duplicate code 2012-08-19 rlar * src/tclspice.c: reimplement tcl_vfprintf() 2012-08-19 rlar * src/frontend/terminal.c: bug fix, out_send() erroneously interpreting printf %-style sequences 2012-08-19 rlar * src/tclspice.c: cleanup (checked for code invariance) 2012-08-18 dwarning * src/spicelib/devices/bjt/bjt.c, * src/spicelib/devices/bjt/bjtdefs.h, * src/spicelib/devices/bjt/bjtmask.c, * src/spicelib/devices/bjt/bjtmpar.c, * src/spicelib/devices/bjt/bjtsetup.c, * src/spicelib/devices/bjt/bjttemp.c: part of temperature level=3 model 2012-08-18 rlar * src/include/ngspice/cpextern.h, * src/ngsconvert.c: out_printf() is not supposed to be a preprocessor macro 2012-08-18 h_vogt * src/frontend/subckt.c, * src/xspice/mif/mif_inp2.c: subckt.c, mif_inp2.c: plug XSPICE setup memory leaks 2012-08-18 rlar * src/frontend/inp.c, * src/frontend/plotting/agraf.c, * src/frontend/postcoms.c, * src/frontend/terminal.c, * src/frontend/variable.c, * src/include/ngspice/cpextern.h, * src/ngsconvert.c: drop out_pbuf, which was an ancient workaround obviously an old implementation of out_printf() has been unreliable. 2012-08-18 rlar * src/frontend/postcoms.c: bug fix, print complex yet real valued frequency when printing a complex frequency vector, yet with real value some left over nonsens was printed instead of the actual real value. this bug was introduced in commit: Date: Thu Jan 15 21:08:09 2009 +0000 Improvements in vector derivative computation and new functions to compute group delay and moving average. From espice (A. Roldan). 2012-08-15 h_vogt * src/frontend/subckt.c, * src/xspice/mif/mif_inp2.c: mif_inp2.c, subckt.c: plug memory leaks at XSPICE setup 2012-08-15 rlar * src/frontend/misccoms.c: rewrite com_quit() emphasize user confirmation and if we are going to remove dangling circuits, then do so unconditionally 2012-08-15 rlar * src/frontend/inp.c, * src/frontend/shyu.c, * src/spicelib/analysis/cktntask.c: cleanup (checked for code invariance) 2012-08-14 h_vogt * examples/xspice/delta-sigma/README, * examples/xspice/delta-sigma/count-latch-dac.cir, * examples/xspice/delta-sigma/counter-test.cir, * examples/xspice/delta-sigma/delta-sigma-1.cir, * examples/xspice/delta-sigma/mod1-ct-test.cir, * examples/xspice/delta-sigma/mod1-ct.cir: XSPICE example: delta-sigma converter 2012-08-14 rlar * src/frontend/com_shell.c: plug a memory leak when executing `shell' 2012-08-14 rlar * src/frontend/variable.c: plug a memory leak when (un)setting variables 2012-08-14 rlar * src/frontend/spiceif.c: spiceif.c, cleanup (checked for code invariance) 2012-08-12 rlar * src/frontend/spiceif.c: spiceif.c, cleanup (checked for code invariance) 2012-08-12 rlar * src/frontend/options.c: options.c cleanup 2012-08-12 rlar * src/frontend/options.c: options.c, whitespace 2012-08-12 rlar * src/frontend/options.c: cleanup, if_options() will copy() anyway 2012-08-08 rlar * src/frontend/display.c: display.c, cleanup 2012-08-07 h_vogt * examples/measure/mos-meas-dc-control.sp: demonstrate effect of W crossing binning limits 2012-08-07 rlar * src/frontend/numparam/spicenum.c, * src/main.c, * src/maths/fft/fftext.c, * src/maths/fft/fftlib.c, * src/maths/ni/niiter.c, * src/spicelib/analysis/cktncdump.c, * src/spicelib/devices/bjt/bjtask.c, * src/spicelib/devices/devsup.c, * src/spicelib/devices/mos3/mos3load.c, * src/spicelib/devices/mos9/mos9load.c, * src/tclspice.c, * src/winmain.c: cancer of the semicolon 2012-08-06 rlar * src/frontend/spiceif.c, * src/main.c, * src/misc/string.c, * src/spicelib/devices/asrc/asrcdest.c: swallow warnings 2012-08-06 rlar * src/frontend/measure.c: avoid `meas' syntax error causing segfault Invalid meas crashes ngspice with SIGSEV - ID: 3554330 http://sourceforge.net/tracker/?func=detail&aid=3554330&group_id=38962&atid=423915 2012-08-04 rlar * src/frontend/plotting/plotit.c: plotit.c #9/9, whitespace 2012-08-04 rlar * src/frontend/plotting/plotit.c: plotit.c #8/9, braces 2012-08-04 rlar * src/frontend/plotting/plotit.c: plotit.c #7/9, braces 2012-08-04 rlar * src/frontend/plotting/plotit.c: plotit.c #6/9, braces 2012-08-04 rlar * src/frontend/plotting/plotit.c: plotit.c #5/9, localize 2012-08-04 rlar * src/frontend/plotting/plotit.c: plotit.c #4/9, line wrap 2012-08-04 rlar * src/frontend/plotting/plotit.c: plotit.c #3/9, drop some comments 2012-08-04 rlar * src/frontend/plotting/plotit.c: plotit.c #2/9, emphasize maximize/minimize 2012-08-04 rlar * src/frontend/plotting/plotit.c: plotit.c #1/9, think positive 2012-08-05 h_vogt * examples/xspice/pll/test-f-p-det.cir: add BSIM3 model parameters for loop filer with transistor charge pump 2012-08-05 h_vogt * examples/measure/mos-meas-dc-control.sp: example, add 'alter @m1[w]=11u' using binning and model change 2012-08-05 h_vogt * src/frontend/com_measure2.c, * src/frontend/measure.c: com_measure2.c: enable 'meas dc' without 'from' and 'to' given measure.c: no error printout during autostop 2012-08-05 rlar * src/frontend/variable.c: cleanup free_struct_variable() 2012-08-05 rlar * src/frontend/variable.c: variable.c, cleanup (mostly whitespace) 2012-08-05 dwarning * src/frontend/device.c, * src/frontend/spiceif.c: correct alter of mos geometries for binned models 2012-08-05 dwarning * examples/xspice/pll/test-f-p-det.cir, * examples/xspice/pll/test_vco.cir: correct the plot output 2012-08-04 rlar * src/frontend/cpitf.c: cp_oddcomm(), plug a memory leak 2012-08-04 h_vogt * src/frontend/inpcom.c, * src/frontend/plotting/plotit.c, * src/frontend/subckt.c, * src/xspice/mif/mif_inp2.c, * src/xspice/mif/mifgetmod.c, * src/xspice/mif/mifgetvalue.c: remove memory leaks 2012-08-04 dwarning * src/spicelib/devices/cktfinddev.c, * src/spicelib/parser/inpgmod.c: indentation 2012-08-04 rlar * src/misc/wlist.c: wlist #3/3, whitespace 2012-08-04 rlar * src/misc/wlist.c: wlist #2/3, cleanup 2012-08-04 rlar * src/misc/wlist.c: wlist #1/3, cleanup 2012-08-04 h_vogt * examples/xspice/pll/pll-xspice-fstep.cir, * examples/xspice/pll/pll-xspice.cir, * examples/xspice/pll/test_vco.cir: pll: just include one of the two vco available (avoid a bug which has been removed only recently) 2012-08-03 h_vogt * examples/xspice/pll/README, * examples/xspice/pll/loop-filter-2.cir, * examples/xspice/pll/loop-filter.cir, * examples/xspice/pll/pll-xspice-fstep.cir, * examples/xspice/pll/pll-xspice.cir, * examples/xspice/pll/test-f-p-det.cir, * examples/xspice/pll/test_vco.cir, * examples/xspice/pll/vco_sub.cir, * examples/xspice/pll/vco_sub_new.cir: update to XSPICE phase-locked loop example 2012-08-03 h_vogt * src/frontend/inpcom.c: inpcom.c: safely uncomment unused subcircuits (top level only) if they contain further nested subcircuits 2012-08-03 rlar * src/include/ngspice/wordlist.h, * src/misc/wlist.c: wlist.c, `const' ness 2012-08-03 rlar * src/frontend/device.c: use wl_find() 2012-08-03 rlar * src/frontend/plotting/plotit.c: cleanup, linewrap 2012-08-03 rlar * src/frontend/inp.c: cleanup, char 0 2012-08-03 rlar * src/frontend/inp.c, * src/frontend/plotting/plotit.c: cleanup, void return 2012-08-03 rlar * src/frontend/parser/lexical.c: lexical, use wl_append_word() 2012-08-03 rlar * src/frontend/parser/lexical.c: lexical #6/6, whitespace 2012-08-03 rlar * src/frontend/parser/lexical.c: lexical #5/6, cleanup 2012-08-03 rlar * src/frontend/parser/lexical.c: lexical #4/6, parentheses and braces 2012-08-03 rlar * src/frontend/parser/lexical.c: lexical #3/6, rewrite 2012-08-03 rlar * src/frontend/parser/lexical.c: lexical #2/6, linewrap 2012-08-03 rlar * src/frontend/parser/lexical.c: lexical #1/6, cleanup 2012-08-03 h_vogt * src/misc/alloc.c: alloc.c: exlude controlled_exit if not MS Windows not available in some tests in cmaths and executable like ngproc2mod 2012-08-02 rlar * src/frontend/parser/complete.c, * src/frontend/parser/lexical.c: lexical #3/3, collapse append(NULL) into cp_ccom() the sequence orig_wlist = wlist; append(NULL); cp_ccom(wlist, ...); is transformed. expressions to care about in cp_ccom() C1 := (wlist->wl_next != NULL) C2 := (wlist->wl_word != NULL) C3 := wl_length(wlist) D1 := (orig_wlist != NULL) D2 := (orig_wlist->wl_word != NULL) D3 := wl_length(orig_wlist); cases and their significance in cp_ccom(): orig_wlist = NULL; wlist = wl_cons(NULL, NULL); C1 == false D1 == false C2,C3 dont care orig_wlist = wl_cons(E1, wl_cons(E2, ... wl_cons(En, NULL))) wlist = wl_cons(E1, wl_cons(E2, .... wl_cons(En, wl_cons(NULL, NULL)))) C1 == true D1 == true C2 === D2 C3 === D3 + 1 2012-08-02 rlar * src/frontend/parser/lexical.c: lexical #2/3, fix memory leaks 2012-08-02 rlar * src/frontend/parser/lexical.c: lexical #1/3, move append(NULL) invokations into position 2012-08-01 h_vogt * src/misc/alloc.c: undo controlled_exit: not compatible with ancient tests in cmath under LINUX 2012-07-31 rlar * src/frontend/parser/lexical.c: lexical #19/19, rewrite 2012-07-31 rlar * src/frontend/parser/lexical.c: lexical #18/19, rewrite `cw' won't be looked at, thus the append + removal can be dropped `wl_word' is already NULL 2012-07-31 rlar * src/frontend/parser/lexical.c: lexical #17/19, rewrite 2012-07-31 rlar * src/frontend/parser/lexical.c: lexical #16/19, transform append --> append(word) 2012-07-31 rlar * src/frontend/parser/lexical.c: lexical #15/19, drop `delayed' which is never zero ... 2012-07-31 rlar * src/frontend/parser/lexical.c: lexical #14/19, drop `delayed = 0' wherever its effect isn't visible without effect, because we return or will overwrite it anyway 2012-07-31 rlar * src/frontend/parser/lexical.c: lexical #13/19, delay `append' delay its execution, until either `wlist' or `cw' will be accessed, or a return or goto nloop is inevitable 2012-07-31 rlar * src/frontend/parser/lexical.c: lexical #12/19, use `append' some `assumption' are no longer valid 2012-07-31 rlar * src/frontend/parser/lexical.c: lexical #11/19, aproach `append' here 2012-07-31 rlar * src/frontend/parser/lexical.c: lexical #10/19, split off `append' from `newword' 2012-07-31 rlar * src/frontend/parser/lexical.c: lexical #9/19, aproach the `append' cw has never been NULL here, because we used to survive an update of cw->wl_next here wlist hasn't been NULL either, because there is no place where wlist becomes NULL without setting cw to NULL as well. yet cw isn't NULL (see above) aproach the `append' 2012-07-31 rlar * src/frontend/parser/lexical.c: lexical #8/19, express where `wlist' and `cw' start being != NULL 2012-07-31 rlar * src/frontend/parser/lexical.c: lexical #7/19, express verbosely where `wlist' and `cw' are NULL 2012-07-31 rlar * src/frontend/parser/lexical.c: lexical #6/19, express cp_ccom() property 2012-07-31 rlar * src/frontend/parser/lexical.c: lexical #5/19, collapse into `newword' 2012-07-31 rlar * src/frontend/parser/lexical.c: lexical #4/19, the `else' can take that job (unconditionally) 2012-07-31 rlar * src/frontend/parser/lexical.c: lexical #3/19, attach and instantly remove a NULL wl_word here this modification is faithful iff cw != NULL and cw->wl_next == NULL cw != NULL because we have just survived an update of cw->wl_word cw->wl_next == NULL is witnessed by: 1) cw either NULL or pointing to a wl_cons(,NULL) 2) cw not being modified, and no wl_next being modified 3) check of all function invocations with wlist/cw argument not to modify any wl_next slot which are: 1) cp_ccom(wlist, ...) 2) wl_free() always followed by goto nloop, which does a cw = wl_cons(,NULL) and cp_ccom() doesn't modify any wl_next slot the first part of the patch is intentionally similar to newword `i' and `buf' can be modified here, because we will inevitably `goto done' attach and instantly remove a NULL wl_word here 2012-07-31 rlar * src/frontend/parser/lexical.c: lexical #2/19, rewrite the `else if' 2012-07-31 rlar * src/frontend/parser/lexical.c: lexical #1/19, use wl_cons 2012-07-31 rlar * src/frontend/parser/lexical.c: Revert "cleanup, use wl_cons()" This reverts parts of commit 7a7250cdbdbd9f151d15fbe2142bde3a2dd81ca0. There is a cleaner way to rewrite lexical.c 2012-07-31 h_vogt * examples/xspice/pll/README, * examples/xspice/pll/pll-xspice-fstep.cir: pll-xspice-fstep.cir: pll with ref frequency steps 2012-07-31 h_vogt * src/frontend/trannoise/1-f-code.c, * src/misc/alloc.c, * src/spicelib/analysis/cktsens.c, * src/spicelib/devices/txl/txlacct.c, * src/spicelib/devices/txl/txlsetup.c, * src/spicelib/parser/inpgmod.c, * src/spicelib/parser/inpptree.c, * src/xspice/mif/mif_inp2.c: controlled_exit() instead of exit() 2012-07-31 h_vogt * examples/xspice/pll/pll-xspice.cir: pll-xspice.cir: save command added 2012-07-30 h_vogt * src/xspice/evt/evtprint.c: evtprint.c: no node data: error message instead of seg fault 2012-07-30 h_vogt * examples/xspice/pll/pll-xspice.cir: new XSPICE example: use trtol=1 less ripple, but longer simulation time 2012-07-29 h_vogt * examples/xspice/pll/README, * examples/xspice/pll/f-p-det-d-sub.cir, * examples/xspice/pll/loop-filter.cir, * examples/xspice/pll/pll-xspice.cir, * examples/xspice/pll/test-f-p-det.cir, * examples/xspice/pll/test_vco.cir, * examples/xspice/pll/vco_sub.cir: new XSPICE example: mixed mode pll circuit 2012-07-29 rlar * src/frontend/cpitf.c, * src/frontend/plotting/plotit.c, * src/frontend/streams.c, * src/frontend/subckt.c: use wl_delete_slice() 2012-07-29 rlar * src/include/ngspice/wordlist.h, * src/misc/wlist.c: implement wl_delete_slice() 2012-07-29 h_vogt * src/spicelib/analysis/cktdojob.c: variable xtrtol may override the XSPICE reduction of trtol 2012-07-28 rlar * src/frontend/plotting/plotit.c: plotit(), cleanup wordlist processing 2012-07-28 rlar * src/misc/string.c: copy(), allow NULL argument 2012-07-28 rlar * src/frontend/plotting/plotit.c: fix typo in the commit `use wl_find()' 2012-07-28 dwarning * src/spicelib/parser/inpgmod.c: inpgmod.c: correct the range check to prevent overlap 2012-07-28 dwarning * src/spicelib/parser/inpgmod.c, * src/spicelib/parser/inpmkmod.c: indentation 2012-07-28 rlar * src/frontend/com_alias.c, * src/frontend/control.c, * src/frontend/device.c, * src/frontend/plotting/plotit.c, * src/frontend/subckt.c: use wl_find() 2012-07-28 rlar * src/include/ngspice/wordlist.h, * src/misc/wlist.c: implement wl_find() 2012-07-28 rlar * src/frontend/plotting/plotit.c: plotit.c, prepare for usage of wl_find() 2012-07-27 rlar * src/frontend/com_hardcopy.c, * src/frontend/parser/lexical.c: cleanup, use wl_cons() 2012-07-25 h_vogt * src/xspice/enh/enhtrans.c: enhtrans.c: indentations 2012-07-25 h_vogt * src/spicelib/analysis/cktsetup.c: message "OpenMP: %d threads are requested..." removed 2012-07-24 h_vogt * src/xspice/enh/enhtrans.c: enhtrans.c, improved error meassage upon non 'Exxx poly' line bug 2012-07-23 h_vogt * src/frontend/measure.c: measure.c: indentations 2012-07-23 h_vogt * src/frontend/measure.c: measure.c: Update on error message for .meas 2012-07-23 h_vogt * src/frontend/com_measure2.c, * src/frontend/measure.c: measure, error message updated and return(NAN) in case of measure failure test for failure with isnan() 2012-07-23 rlar * src/frontend/plotting/plotit.c: plotit.c, whitespace cleanup 2012-07-22 rlar * src/frontend/streams.c: rewrite using wl_ functions 2012-07-22 rlar * src/frontend/streams.c: bug fix, cp_ioreset(): fclosing an already closed stream causing memory corruption when using `>&' stderr redirection 2012-07-21 h_vogt * src/frontend/inp.c, * src/frontend/inpcom.c, * src/include/ngspice/stringutil.h, * src/misc/string.c: repair broken ternary function in B-Source failed if parameters were included in function. fixed by finding nested parens in gettok_char() 2012-07-21 h_vogt * src/frontend/inpcom.c: table: prevent crashes upon wrong inputs, allow time, temper, hertz as part of device or node name (e.g. Rtime), remove some memory leaks 2012-07-21 rlar * src/frontend/com_alias.c, * src/frontend/control.c: rewrite using wl_ functions this fixed following bug as well: echo "echo abra ; ; echo kadabra" | ngspice -p building a circular list and looping forever 2012-07-21 rlar * src/frontend/subckt.c, * src/include/ngspice/wordlist.h, * src/misc/wlist.c: implement wl_chop() 2012-07-19 h_vogt * src/misc/string.c: gettok_char(), return(NULL) if substring not found 2012-07-19 rlar * src/frontend/cpitf.c, * src/frontend/mw_coms.c: untabify 2012-07-19 rlar * src/frontend/mw_coms.c: mw_coms.c, fix the cleanup using wl_cons() 2012-07-19 rlar * src/frontend/cpitf.c: cpif.c, whitespace, indentation, cleanups 2012-07-19 rlar * src/frontend/cpitf.c: cpitf.c, cleanup using wl_ functions 2012-07-19 rlar * src/frontend/mw_coms.c: mw_comms.c, whitespace, indentation, cleanups 2012-07-19 rlar * src/frontend/mw_coms.c: mw_coms.c, cleanup using wl_cons() 2012-07-15 rlar * src/misc/wlist.c: fix the fix wl_reverse() for empty lists 2012-07-14 rlar * src/frontend/inp.c, * src/frontend/nutinp.c, * src/misc/wlist.c: fix wl_reverse() for empty lists 2012-07-14 rlar * src/misc/wlist.c: comments for wl_cons(), wl_append_word() and wl_chop_rest() 2012-07-14 rlar * src/frontend/arg.c, * src/frontend/com_history.c, * src/frontend/device.c, * src/frontend/dotcards.c, * src/frontend/help/readhelp.c, * src/frontend/inp.c, * src/frontend/inpcom.c, * src/frontend/measure.c, * src/frontend/nutinp.c, * src/frontend/parser/backq.c, * src/frontend/parser/complete.c, * src/frontend/parser/glob.c, * src/frontend/parser/lexical.c, * src/frontend/plotting/plotit.c, * src/frontend/rawfile.c, * src/frontend/runcoms.c, * src/frontend/subckt.c, * src/frontend/variable.c, * src/misc/wlist.c: cleanup, use wl_cons(), wl_append_word() and wl_chop_rest() 2012-07-14 rlar * src/include/ngspice/wordlist.h, * src/misc/wlist.c: implement wl_cons(), wl_append_word() and wl_chop_rest() 2012-07-14 h_vogt * src/main.c: remove second call to tmpfile() 2012-07-12 rlar * src/frontend/device.c: bug fix, missing update of a wordlist's wl_prev pointer 2012-07-12 rlar * src/frontend/parser/complete.c: bug fix, incorrect update of a wordlist's wl_prev pointer 2012-07-11 h_vogt * src/xspice/evt/evtprint.c: printf() ---> out_printf(): allow output redirection into file 2012-07-07 rlar * src/spicelib/parser/inp.h, * src/spicelib/parser/inp2u.c, * src/spicelib/parser/inppas2.c: emphasize the adms3 `U' device hijack 2012-07-07 rlar * configure.ac, * src/Makefile.am: don't mess with libtools --enable-static / --enable-shared tie libspice to -shared ngspice et al to -static and use $(STATIC) elsewhere which is governed by configure.ac 2012-07-07 rlar * src/ciderlib/input/Makefile.am, * src/ciderlib/oned/Makefile.am, * src/ciderlib/support/Makefile.am, * src/ciderlib/twod/Makefile.am, * src/frontend/Makefile.am, * src/frontend/help/Makefile.am, * src/frontend/numparam/Makefile.am, * src/frontend/parser/Makefile.am, * src/frontend/plotting/Makefile.am, * src/frontend/trannoise/Makefile.am, * src/frontend/wdisp/Makefile.am, * src/maths/cmaths/Makefile.am, * src/maths/deriv/Makefile.am, * src/maths/fft/Makefile.am, * src/maths/misc/Makefile.am, * src/maths/ni/Makefile.am, * src/maths/poly/Makefile.am, * src/maths/sparse/Makefile.am, * src/misc/Makefile.am, * src/spicelib/analysis/Makefile.am, * src/spicelib/devices/Makefile.am, * src/spicelib/devices/adms/admst/ngspice.xml, * src/spicelib/devices/adms/admst/ngspiceMakefile.am.xml, * src/spicelib/devices/asrc/Makefile.am, * src/spicelib/devices/bjt/Makefile.am, * src/spicelib/devices/bsim1/Makefile.am, * src/spicelib/devices/bsim2/Makefile.am, * src/spicelib/devices/bsim3/Makefile.am, * src/spicelib/devices/bsim3soi/Makefile.am, * src/spicelib/devices/bsim3soi_dd/Makefile.am, * src/spicelib/devices/bsim3soi_fd/Makefile.am, * src/spicelib/devices/bsim3soi_pd/Makefile.am, * src/spicelib/devices/bsim3v0/Makefile.am, * src/spicelib/devices/bsim3v1/Makefile.am, * src/spicelib/devices/bsim3v32/Makefile.am, * src/spicelib/devices/bsim4/Makefile.am, * src/spicelib/devices/bsim4v4/Makefile.am, * src/spicelib/devices/bsim4v5/Makefile.am, * src/spicelib/devices/bsim4v6/Makefile.am, * src/spicelib/devices/cap/Makefile.am, * src/spicelib/devices/cccs/Makefile.am, * src/spicelib/devices/ccvs/Makefile.am, * src/spicelib/devices/cpl/Makefile.am, * src/spicelib/devices/csw/Makefile.am, * src/spicelib/devices/dio/Makefile.am, * src/spicelib/devices/hfet1/Makefile.am, * src/spicelib/devices/hfet2/Makefile.am, * src/spicelib/devices/hisim2/Makefile.am, * src/spicelib/devices/hisimhv/Makefile.am, * src/spicelib/devices/ind/Makefile.am, * src/spicelib/devices/isrc/Makefile.am, * src/spicelib/devices/jfet/Makefile.am, * src/spicelib/devices/jfet2/Makefile.am, * src/spicelib/devices/ltra/Makefile.am, * src/spicelib/devices/mes/Makefile.am, * src/spicelib/devices/mesa/Makefile.am, * src/spicelib/devices/mos1/Makefile.am, * src/spicelib/devices/mos2/Makefile.am, * src/spicelib/devices/mos3/Makefile.am, * src/spicelib/devices/mos6/Makefile.am, * src/spicelib/devices/mos9/Makefile.am, * src/spicelib/devices/nbjt/Makefile.am, * src/spicelib/devices/nbjt2/Makefile.am, * src/spicelib/devices/ndev/Makefile.am, * src/spicelib/devices/numd/Makefile.am, * src/spicelib/devices/numd2/Makefile.am, * src/spicelib/devices/numos/Makefile.am, * src/spicelib/devices/res/Makefile.am, * src/spicelib/devices/soi3/Makefile.am, * src/spicelib/devices/sw/Makefile.am, * src/spicelib/devices/tra/Makefile.am, * src/spicelib/devices/txl/Makefile.am, * src/spicelib/devices/urc/Makefile.am, * src/spicelib/devices/vbic/Makefile.am, * src/spicelib/devices/vccs/Makefile.am, * src/spicelib/devices/vcvs/Makefile.am, * src/spicelib/devices/vsrc/Makefile.am, * src/spicelib/parser/Makefile.am, * src/xspice/cm/Makefile.am, * src/xspice/enh/Makefile.am, * src/xspice/evt/Makefile.am, * src/xspice/idn/Makefile.am, * src/xspice/ipc/Makefile.am, * src/xspice/mif/Makefile.am: introduce AM_CFLAGS = $(STATIC) 2012-07-07 h_vogt * src/maths/sparse/spfactor.c: spfactor.c, indentations 2012-07-07 h_vogt * src/main.c: Adding TD to the fopen() is sufficient in MS Windows to reliably unlink the temporary file 2012-07-04 dwarning * src/spicelib/devices/dio/dioload.c: no double count of area for capacitances 2012-07-04 dwarning * src/spicelib/devices/dio/dio.c, * src/spicelib/devices/dio/dioacld.c, * src/spicelib/devices/dio/dioask.c, * src/spicelib/devices/dio/diodefs.h, * src/spicelib/devices/dio/dioload.c, * src/spicelib/devices/dio/diomask.c, * src/spicelib/devices/dio/diompar.c, * src/spicelib/devices/dio/dioparam.c, * src/spicelib/devices/dio/diopzld.c, * src/spicelib/devices/dio/diosetup.c, * src/spicelib/devices/dio/diotemp.c: new scalable diode model including tunnel component 2012-07-03 h_vogt * src/main.c: tmpfile() on MS Windows create temporary files with Microsoft specific fopen() flags "TD" and (propably redundant) remove them with an atexit() handler see bug report #3535348 "sp*.tmp file created, but not deleted when Windows UAC is en" https://sourceforge.net/tracker/?func=detail&atid=423915&aid=3535348&group_id=38962 2012-06-28 h_vogt * src/include/ngspice/ngspice.h: Visual Studio: isatty --> _isatty 2012-06-26 h_vogt * src/frontend/com_measure2.c: measure_at(), allow real valued data for meas ac 2012-06-26 h_vogt * src/frontend/inpcom.c: no exchange of ' ' by { } inside .control section 2012-06-25 h_vogt * src/main.c: correct usage of `unlink()' error return value -1 2012-06-25 dwarning * src/spicelib/devices/dio/dioload.c, * src/spicelib/devices/dio/diosetup.c: dioload.c, diosetup.c, correct knee current parameter defaults 2012-06-25 dwarning * src/spicelib/devices/dio/dioload.c: dio/dioload.c, whitespace change 2012-06-22 rlar * configure.ac: configure.ac, unify `x' escape of `test' expressions 2012-06-22 rlar * configure.ac: configure.ac, robustness unify and honor some hints from (info "(autoconf) Limitations of Builtins") use shell || and && instead of test -o and test -a ! test a = b --> test a != b dont use () drop eval missing quotes 2012-06-21 rlar * configure.ac: configure.ac, use AS_HELP_STRING 2012-06-21 rlar * configure.ac: configure.ac, cleanup 2012-06-21 rlar * configure.ac: configure.ac, comment style, (dnl -> #) 2012-06-21 rlar * configure.ac: configure.ac, whitespace cleanup 2012-06-21 rlar * autogen.sh: bug fix, first run libtoolize then aclocal reported by Joseph Trebbien on [Ngspice-devel] Build error "required file `./ltmain.sh' not found" 2012-06-16 rlar * src/spicelib/devices/ltra/ltrapar.c, * src/spicelib/devices/tra/traparam.c: bug fix, ltra and tra, (initial conditions) reported in https://sourceforge.net/tracker/?func=detail&atid=423915&aid=3535544&group_id=38962 bug was introduced in this commit: Date: Wed Dec 31 17:02:46 2003 +0000 Cleaned up LTRA, TRA and URC code and updated DEVICES file. 2012-06-15 dwarning * src/spicelib/analysis/cktsetup.c, * src/spicelib/devices/bsim3/b3set.c, * src/spicelib/devices/bsim3/bsim3def.h, * src/spicelib/devices/bsim3soi/b4soidef.h, * src/spicelib/devices/bsim3soi/b4soiset.c, * src/spicelib/devices/bsim4/b4set.c, * src/spicelib/devices/bsim4/bsim4def.h, * src/spicelib/devices/bsim4v6/b4v6set.c, * src/spicelib/devices/bsim4v6/bsim4v6def.h: call omp_set_num_threads once in central place instead in model routines 2012-06-15 dwarning * configure.ac: mv ext_CFLAGS on the end for overwriting existing CFLAGS 2012-06-12 rlar * src/xspice/icm/GNUmakefile.in, * src/xspice/icm/makedefs.in: xpsice, use the CFLAGS when linking .cm code models 2012-06-13 dwarning * src/spicelib/devices/bsim3/b3dest.c, * src/spicelib/devices/bsim3/b3ld.c, * src/spicelib/devices/bsim3/b3set.c, * src/spicelib/devices/bsim3/bsim3def.h, * src/spicelib/devices/bsim3soi/b4soidef.h, * src/spicelib/devices/bsim3soi/b4soild.c, * src/spicelib/devices/bsim3soi/b4soiset.c, * src/spicelib/devices/bsim4/b4dest.c, * src/spicelib/devices/bsim4/b4ld.c, * src/spicelib/devices/bsim4/b4set.c, * src/spicelib/devices/bsim4/bsim4def.h, * src/spicelib/devices/bsim4v6/b4v6dest.c, * src/spicelib/devices/bsim4v6/b4v6ld.c, * src/spicelib/devices/bsim4v6/b4v6set.c, * src/spicelib/devices/bsim4v6/bsim4v6def.h: use unified macro USE_OMP and nthreads is set in setup once - not in load as clause 2012-06-11 h_vogt * examples/memristor/memristor_x.sp: memristor example, parameters changed 2012-06-09 h_vogt * examples/memristor/memristor_x.sp, * src/xspice/icm/xtradev/memristor/cfunc.mod: add ac and dc simulation to memristor model 2012-06-13 h_vogt * examples/memristor/memristor_x.sp, * src/xspice/icm/xtradev/memristor/cfunc.mod, * src/xspice/icm/xtradev/memristor/ifspec.ifs, * src/xspice/icm/xtradev/modpath.lst: memristor code model in extradev 2012-06-08 h_vogt * src/spicelib/devices/bsim3v1/b3v1ld.c, * src/spicelib/devices/mos6/mos6load.c: FABS() --> fabs() 2012-06-05 h_vogt * src/spicelib/parser/ptfuncs.c: In B source the argument to 'log' may be 0 upon start of simulation, allow recovery like in function 'ln' 2012-06-05 h_vogt * src/include/ngspice/inpptree.h, * src/spicelib/parser/ifeval.c, * src/spicelib/parser/inpptree.c: enable B source debugging in behavioral models, exit on error if variable strict_errorhandling is set 2012-06-05 h_vogt * examples/memristor/memristor.sp: memristor subcircuit model example 2012-05-30 rlar * configure.ac: configure.ac, rewrite M4 Quotation (non zero diff) small differences in the autogen.sh generated files 2012-05-30 rlar * configure.ac: configure.ac, rewrite M4 Quotation verified for zero diff of the autogen.sh generated files 2012-05-28 rlar * configure.ac: configure.ac, use AC_OPENMP 2012-05-27 h_vogt * visualc/vngspice.vcproj: Visual Studio, increase Stack for 64 bits from standard (0) to StackReserveSize="4194304" StackCommitSize="16384" 2012-05-27 h_vogt * src/frontend/commands.c, * src/frontend/spiceif.c, * src/frontend/spiceif.h, * src/main.c: commands.c: 'options' equivalent to 'option' and allow 'loadsnap' and 'savesnap' which have been EXPERIMENTAL_CODE so far 2012-05-22 h_vogt * tests/bsim3/ac_sim/op-amp.out, * tests/bsim3/tran_sim/comparator.out, * tests/bsim3/tran_sim/one-shot.out, * tests/xspice/digital/d_ram.out, * tests/xspice/digital/d_source.out, * tests/xspice/digital/d_state.out, * tests/xspice/digital/spinit.in: tests/bsim3, tests/xspice, update output files for comparison 2012-05-22 h_vogt * tests/Makefile.am: tests/Makefile.am: drop tests keep tests only for BSIM3 (old style), BSIM4, BSIMSOI4, HiSIM, HiSIMHV and XSPICE 2012-05-22 h_vogt * .gitignore: .gitignore: new name for local tclspice devel directory under MS Windows 2012-05-21 dwarning * tests/bsim3soi/nmos/reference/dcSweep01.standard, * tests/bsim3soi/nmos/reference/dcSweep02.standard, * tests/bsim3soi/nmos/reference/dcSweep03.standard, * tests/bsim3soi/pmos/reference/dcSweep01.standard, * tests/bsim3soi/pmos/reference/dcSweep02.standard, * tests/bsim3soi/pmos/reference/dcSweep03.standard: bsim3soi aka b4soi, ngspice makes correct dc loops - reference files now have 1.6V 2012-05-21 dwarning * tests/bin/run_cmc_check, * tests/bin/spice.pm: CMC tests, `spice' entry not needed 2012-05-20 dwarning * m4/.cvsignore: remove m4/.cvsignore 2012-05-20 dwarning * tests/bsim3soi/Makefile.am, * tests/bsim3soi/inv_dc.cir, * tests/bsim3soi/inv_dc.out, * tests/bsim3soi/inv_tr.cir, * tests/bsim3soi/inv_tr.out, * tests/bsim3soi/nmos/parameters/nmosParameters, * tests/bsim3soi/nmos/qaSpec, * tests/bsim3soi/nmos/reference/acFreq01.standard, * tests/bsim3soi/nmos/reference/acFreq02.standard, * tests/bsim3soi/nmos/reference/acVd01.standard, * tests/bsim3soi/nmos/reference/acVd02.standard, * tests/bsim3soi/nmos/reference/dcSweep01.standard, * tests/bsim3soi/nmos/reference/dcSweep02.standard, * tests/bsim3soi/nmos/reference/dcSweep03.standard, * tests/bsim3soi/nmos/reference/noise01.standard, * tests/bsim3soi/nmos/reference/noise02.standard, * tests/bsim3soi/nmos/reference/noise03.standard, * tests/bsim3soi/nmos4p3.mod, * tests/bsim3soi/pmos/parameters/pmosParameters, * tests/bsim3soi/pmos/qaSpec, * tests/bsim3soi/pmos/reference/acFreq01.standard, * tests/bsim3soi/pmos/reference/acFreq02.standard, * tests/bsim3soi/pmos/reference/acVd01.standard, * tests/bsim3soi/pmos/reference/acVd02.standard, * tests/bsim3soi/pmos/reference/dcSweep01.standard, * tests/bsim3soi/pmos/reference/dcSweep02.standard, * tests/bsim3soi/pmos/reference/dcSweep03.standard, * tests/bsim3soi/pmos/reference/noise01.standard, * tests/bsim3soi/pmos/reference/noise02.standard, * tests/bsim3soi/pmos/reference/noise03.standard, * tests/bsim3soi/pmos4p3.mod, * tests/bsim3soi/ring51_41.cir, * tests/bsim3soi/ring51_41.out, * tests/bsim3soi/test1.cir, * tests/bsim3soi/test1.out, * tests/bsim3soi/test2.cir, * tests/bsim3soi/test2.out, * tests/bsim3soi/test3.cir, * tests/bsim3soi/test3.out, * tests/bsim3soi/test4.cir, * tests/bsim3soi/test4.out, * tests/bsim3soi/test5.cir, * tests/bsim3soi/test5.out, * tests/bsim3soi/test6.cir, * tests/bsim3soi/test6.out, * tests/bsim3soi/test7.cir, * tests/bsim3soi/test7.out, * tests/bsim3soi/test8.cir, * tests/bsim3soi/test8.out: new QA test for `bsim3soi' aka `b4soi' 2012-05-20 dwarning * src/spicelib/devices/bsim3soi/BsimTerms_use, * src/spicelib/devices/bsim3soi/Makefile.am, * src/spicelib/devices/bsim3soi/b4soi.c, * src/spicelib/devices/bsim3soi/b4soiacld.c, * src/spicelib/devices/bsim3soi/b4soiask.c, * src/spicelib/devices/bsim3soi/b4soicheck.c, * src/spicelib/devices/bsim3soi/b4soicvtest.c, * src/spicelib/devices/bsim3soi/b4soidef.h, * src/spicelib/devices/bsim3soi/b4soidel.c, * src/spicelib/devices/bsim3soi/b4soidest.c, * src/spicelib/devices/bsim3soi/b4soiext.h, * src/spicelib/devices/bsim3soi/b4soigetic.c, * src/spicelib/devices/bsim3soi/b4soiinit.c, * src/spicelib/devices/bsim3soi/b4soiitf.h, * src/spicelib/devices/bsim3soi/b4soild.c, * src/spicelib/devices/bsim3soi/b4soimask.c, * src/spicelib/devices/bsim3soi/b4soimdel.c, * src/spicelib/devices/bsim3soi/b4soimpar.c, * src/spicelib/devices/bsim3soi/b4soinoi.c, * src/spicelib/devices/bsim3soi/b4soipar.c, * src/spicelib/devices/bsim3soi/b4soipzld.c, * src/spicelib/devices/bsim3soi/b4soiset.c, * src/spicelib/devices/bsim3soi/b4soitemp.c, * src/spicelib/devices/bsim3soi/b4soitrunc.c: update `bsim3soi' aka `b4soi' 2012-05-18 rlar * src/frontend/outitf.c: outitf.c, cleanup 2012-05-18 rlar * src/frontend/outitf.c: outitf.c, cleanup cancer of the semicolon 2012-05-18 rlar * src/frontend/outitf.c: outitf.c, cleanup comment 2012-05-18 rlar * src/frontend/outitf.c: outitf.c, cleanup return 2012-05-18 rlar * src/frontend/outitf.c: outitf.c, whitespace 2012-05-17 h_vogt * src/spicelib/parser/inppas3.c: .nodeset all = value added to set all voltage nodes at once 2012-05-17 rlar * src/spicelib/analysis/analysis.c, * src/spicelib/analysis/analysis.h: tiny cleanup 2012-05-17 rlar * src/maths/cmaths/Makefile.am: fix tcl module compilation test programs don't compile when compiling for TCL_MODULE due to redefinition of fprintf() 2012-05-17 rlar * src/frontend/misccoms.c: misccoms.c, com_quit(), implement exitcode 2012-05-17 rlar * src/frontend/misccoms.c: misccoms.c, tiny rewrite 2012-05-17 rlar * src/frontend/misccoms.c: misccoms.c, shrink scope 2012-05-17 rlar * src/frontend/misccoms.c: misccoms.c, collect byemessage() 2012-05-17 rlar * src/frontend/misccoms.c: misccoms.c, noask 2012-05-17 rlar * src/frontend/misccoms.c: misccoms.c, collapse strings 2012-05-17 rlar * src/frontend/help/readhelp.c, * src/frontend/misccoms.c, * src/include/ngspice/ngspice.h: misccoms.c, use strncasecmp() 2012-05-17 rlar * src/frontend/misccoms.c: misccoms.c, indentation and whitespace cleanup 2012-05-12 h_vogt * compile_min.sh: change comments, CVS --> git 2012-05-09 rlar * src/spicelib/devices/adms/hicum2/adms3va/hicum2.va, * src/spicelib/devices/adms/hicum2/admsva/hicum2.va, * src/spicelib/devices/bsim3soi_dd/BsimTerms_use, * src/spicelib/devices/bsim3soi_fd/BsimTerms_use, * src/spicelib/devices/bsim3soi_pd/BsimTerms_use, * src/xspice/examples/hybrid_models1_dc.deck, * src/xspice/examples/initial_conditions.deck, * src/xspice/examples/io_ordering.deck, * src/xspice/examples/io_types.deck, * src/xspice/examples/long_names.deck, * src/xspice/examples/mixed_case.deck, * src/xspice/examples/mixed_io_size.deck, * src/xspice/examples/mixed_mode.deck, * src/xspice/examples/mixed_ref.deck, * src/xspice/examples/mosamp2.in, * src/xspice/examples/mosmem.in, * src/xspice/examples/param_defaults.deck, * src/xspice/examples/param_types.deck, * src/xspice/examples/parsing.deck, * src/xspice/examples/polarity.deck, * src/xspice/examples/schmitt.in, * src/xspice/examples/spice3.deck, * src/xspice/examples/suffixes.deck, * src/xspice/examples/supply_ramping.deck, * src/xspice/examples/user_defined_nodes.deck, * src/xspice/examples/xspice.deck: Changed line ending of several files from DOS to UNIX 2012-05-09 rlar * examples/tclspice/tcl-testbench1/tcl-testbench1.tcl, * examples/tclspice/tcl-testbench2/tcl-testbench2.tcl, * examples/tclspice/tcl-testbench3/tcl-testbench3.tcl, * examples/tclspice/tcl-testbench4/tcl-testbench4.tcl, * examples/tclspice/tcl/test_vectoblt.tcl, * src/frontend/com_dl.c, * src/frontend/com_dl.h, * src/include/ngspice/cm.h, * src/include/ngspice/dllitf.h, * src/include/ngspice/ipc.h, * src/pkgIndex.tcl.in, * src/spicelib/analysis/cluster.c, * src/spicelib/analysis/dcpss.c, * src/spicelib/analysis/pssaskq.c, * src/spicelib/analysis/pssinit.c, * src/spicelib/analysis/psssetp.c, * src/spicelib/devices/cpl/Makefile.am, * src/spicelib/devices/txl/Makefile.am, * src/tclspice.c, * src/xspice/Makefile.am, * src/xspice/README, * src/xspice/cm/Makefile.am, * src/xspice/cm/cm.c, * src/xspice/cm/cmevt.c, * src/xspice/cm/cmexport.c, * src/xspice/cm/cmmeters.c, * src/xspice/cm/cmutil.c, * src/xspice/cmpp/.cvsignore, * src/xspice/cmpp/.gitignore, * src/xspice/cmpp/cmpp.h, * src/xspice/cmpp/ifs_lex.l, * src/xspice/cmpp/ifs_yacc.y, * src/xspice/cmpp/ifs_yacc_y.h, * src/xspice/cmpp/main.c, * src/xspice/cmpp/mod_lex.l, * src/xspice/cmpp/mod_yacc.y, * src/xspice/cmpp/mod_yacc_y.h, * src/xspice/cmpp/pp_ifs.c, * src/xspice/cmpp/pp_lst.c, * src/xspice/cmpp/pp_mod.c, * src/xspice/cmpp/read_ifs.c, * src/xspice/cmpp/util.c, * src/xspice/cmpp/writ_ifs.c, * src/xspice/cmpp/ylwrap, * src/xspice/enh/Makefile.am, * src/xspice/enh/enh.c, * src/xspice/enh/enhtrans.c, * src/xspice/evt/Makefile.am, * src/xspice/evt/evtaccept.c, * src/xspice/evt/evtbackup.c, * src/xspice/evt/evtcall_hybrids.c, * src/xspice/evt/evtdeque.c, * src/xspice/evt/evtdump.c, * src/xspice/evt/evtinit.c, * src/xspice/evt/evtiter.c, * src/xspice/evt/evtload.c, * src/xspice/evt/evtnext_time.c, * src/xspice/evt/evtnode_copy.c, * src/xspice/evt/evtop.c, * src/xspice/evt/evtplot.c, * src/xspice/evt/evtprint.c, * src/xspice/evt/evtqueue.c, * src/xspice/evt/evtsetup.c, * src/xspice/evt/evttermi.c, * src/xspice/examples/analog_models1_ac.deck, * src/xspice/examples/analog_models1_dc.deck, * src/xspice/examples/analog_models1_swept_dc.deck, * src/xspice/examples/analog_models1_transient.deck, * src/xspice/examples/analog_models2_ac.deck, * src/xspice/examples/analog_models2_dc.deck, * src/xspice/examples/analog_models2_swept_dc.deck, * src/xspice/examples/analog_models2_transient.deck, * src/xspice/examples/analog_models3_ac.deck, * src/xspice/examples/analog_models3_dc.deck, * src/xspice/examples/analog_models3_swept_dc.deck, * src/xspice/examples/analog_models3_transient.deck, * src/xspice/examples/analog_models4_ac.deck, * src/xspice/examples/analog_models4_dc.deck, * src/xspice/examples/analog_models4_swept_dc.deck, * src/xspice/examples/analog_models4_transient.deck, * src/xspice/examples/arbitrary_phase.deck, * src/xspice/examples/bad_io.deck, * src/xspice/examples/bad_io_type.deck, * src/xspice/examples/bad_name.deck, * src/xspice/examples/bad_param.deck, * src/xspice/examples/bad_param_type.deck, * src/xspice/examples/d_to_real/Makefile, * src/xspice/examples/d_to_real/cfunc.mod, * src/xspice/examples/d_to_real/ifspec.ifs, * src/xspice/examples/diffpair.in, * src/xspice/examples/digital_invert.deck, * src/xspice/examples/digital_models.deck, * src/xspice/examples/digital_models1.deck, * src/xspice/examples/digital_models2.deck, * src/xspice/examples/digital_models3.deck, * src/xspice/examples/digital_models4.deck, * src/xspice/examples/dot_model_ref.deck, * src/xspice/examples/hybrid_models1_dc.deck, * src/xspice/examples/hybrid_models1_transient.deck, * src/xspice/examples/initial_conditions.deck, * src/xspice/examples/io_ordering.deck, * src/xspice/examples/io_types.deck, * src/xspice/examples/long_names.deck, * src/xspice/examples/mixed_case.deck, * src/xspice/examples/mixed_io_size.deck, * src/xspice/examples/mixed_mode.deck, * src/xspice/examples/mixed_ref.deck, * src/xspice/examples/mosamp2.in, * src/xspice/examples/mosmem.in, * src/xspice/examples/nco/Makefile, * src/xspice/examples/nco/cfunc.mod, * src/xspice/examples/nco/ifspec.ifs, * src/xspice/examples/param_defaults.deck, * src/xspice/examples/param_types.deck, * src/xspice/examples/parsing.deck, * src/xspice/examples/polarity.deck, * src/xspice/examples/print_param_types/Makefile, * src/xspice/examples/print_param_types/cfunc.mod, * src/xspice/examples/print_param_types/ifspec.ifs, * src/xspice/examples/rca3040.in, * src/xspice/examples/real_delay/Makefile, * src/xspice/examples/real_delay/cfunc.mod, * src/xspice/examples/real_delay/ifspec.ifs, * src/xspice/examples/real_gain/Makefile, * src/xspice/examples/real_gain/cfunc.mod, * src/xspice/examples/real_gain/ifspec.ifs, * src/xspice/examples/real_to_v/Makefile, * src/xspice/examples/real_to_v/cfunc.mod, * src/xspice/examples/real_to_v/ifspec.ifs, * src/xspice/examples/rtlinv.in, * src/xspice/examples/schmitt.in, * src/xspice/examples/spice3.deck, * src/xspice/examples/suffixes.deck, * src/xspice/examples/supply_ramping.deck, * src/xspice/examples/user_defined_nodes.deck, * src/xspice/examples/xspice.deck, * src/xspice/idn/Makefile.am, * src/xspice/idn/idndig.c, * src/xspice/ipc/Makefile.am, * src/xspice/ipc/ipc.c, * src/xspice/ipc/ipcaegis.c, * src/xspice/ipc/ipcsockets.c, * src/xspice/ipc/ipcstdio.c, * src/xspice/ipc/ipctiein.c, * src/xspice/mif/Makefile.am, * src/xspice/mif/mif.c, * src/xspice/mif/mif_inp2.c, * src/xspice/mif/mifask.c, * src/xspice/mif/mifconvt.c, * src/xspice/mif/mifdelete.c, * src/xspice/mif/mifdestr.c, * src/xspice/mif/mifgetmod.c, * src/xspice/mif/mifgetvalue.c, * src/xspice/mif/mifload.c, * src/xspice/mif/mifmask.c, * src/xspice/mif/mifmdelete.c, * src/xspice/mif/mifmpara.c, * src/xspice/mif/mifsetup.c, * src/xspice/mif/miftrunc.c, * src/xspice/mif/mifutil.c, * src/xspice/xspice.c: fix file modes 2012-05-06 h_vogt * src/frontend/rawfile.c: Exit with error if file not found: fgets() cannot read from NULL 2012-05-06 rlar * src/spicelib/devices/nbjt/nbjtdump.c, * src/spicelib/devices/nbjt2/nbt2dump.c, * src/spicelib/devices/numd/numddump.c, * src/spicelib/devices/numd2/nud2dump.c, * src/spicelib/devices/numos/nummdump.c: raw_write() always fopen("wb"), even on windows use "\n" line termination 2012-05-06 rlar * src/frontend/rawfile.c: raw_read() always fopen("rb") even on windows, always swallow "\r" 2012-05-06 rlar * src/spicelib/devices/numd/numddump.c: Reverting "NUMDdump(): add binary mode" This reverts commit 40e8f868da564c9c8999729bf53ed4fc748c3783 2012-05-05 rlar * src/frontend/com_measure2.c, * src/frontend/device.c, * src/frontend/display.c, * src/frontend/error.c, * src/frontend/error.h, * src/frontend/hpgl.c, * src/frontend/inp.c, * src/frontend/inpcom.c, * src/frontend/measure.c, * src/frontend/numparam/mystring.c, * src/frontend/numparam/spicenum.c, * src/frontend/numparam/xpressn.c, * src/frontend/plotting/graf.c, * src/frontend/plotting/graphdb.c, * src/frontend/plotting/x11.c, * src/frontend/postsc.c, * src/frontend/spiceif.c, * src/frontend/vectors.c, * src/include/ngspice/fteext.h, * src/spicelib/devices/bsim3soi_dd/b3soiddld.c, * src/spicelib/devices/bsim3soi_fd/b3soifdld.c, * src/spicelib/devices/cktask.c, * src/spicelib/devices/cpl/cplload.c, * src/spicelib/devices/cpl/cplsetup.c, * src/spicelib/devices/txl/txlload.c, * src/spicelib/devices/txl/txlsetup.c, * src/spicelib/parser/inp2q.c, * src/spicelib/parser/inp2u.c, * src/spicelib/parser/inpdomod.c: remove error.h, use fteext.h for controlled_exit() 2012-05-05 rlar * src/frontend/inpcom.c: avoid `ambiguous else' Warning 2012-05-05 dwarning * tests/bsim4/Makefile.am, * tests/bsim4/comprt.cir, * tests/bsim4/comprt.out, * tests/bsim4/gstage.cir, * tests/bsim4/gstage.out, * tests/bsim4/modelcard.nmos, * tests/bsim4/modelcard.pmos, * tests/bsim4/nmos/parameters/nmosParameters, * tests/bsim4/nmos/qaSpec, * tests/bsim4/nmos/reference/acFreq.standard, * tests/bsim4/nmos/reference/acFreq_acnqsmod.standard, * tests/bsim4/nmos/reference/acFreq_capmod.standard, * tests/bsim4/nmos/reference/acFreq_diomod.standard, * tests/bsim4/nmos/reference/acFreq_geomod.standard, * tests/bsim4/nmos/reference/acFreq_igcmod.standard, * tests/bsim4/nmos/reference/acFreq_mobmod.standard, * tests/bsim4/nmos/reference/acFreq_trnqsmod.standard, * tests/bsim4/nmos/reference/acFreq_wpemod.standard, * tests/bsim4/nmos/reference/acFreq_xpart.standard, * tests/bsim4/nmos/reference/acVd.standard, * tests/bsim4/nmos/reference/dcSweep_lw1.standard, * tests/bsim4/nmos/reference/dcSweep_lw1_vb1.standard, * tests/bsim4/nmos/reference/dcSweep_lw1_vb2.standard, * tests/bsim4/nmos/reference/dcSweep_lw2.standard, * tests/bsim4/nmos/reference/dcSweep_lw3.standard, * tests/bsim4/nmos/reference/dcSweep_lw4.standard, * tests/bsim4/nmos/reference/dcSweep_lw5.standard, * tests/bsim4/nmos/reference/dcSweep_lw6.standard, * tests/bsim4/nmos/reference/dcSweep_lw7.standard, * tests/bsim4/nmos/reference/dcSweep_lw8.standard, * tests/bsim4/nmos/reference/dcSweep_lw9.standard, * tests/bsim4/nmos/reference/dcSweep_nrd.standard, * tests/bsim4/nmos/reference/dcSweep_nrs.standard, * tests/bsim4/nmos/reference/dcSweep_sa.standard, * tests/bsim4/nmos/reference/dcSweep_sb.standard, * tests/bsim4/nmos/reference/dcSweep_sca.standard, * tests/bsim4/nmos/reference/dcSweep_scb.standard, * tests/bsim4/nmos/reference/dcSweep_scc.standard, * tests/bsim4/nmos/reference/noise1.standard, * tests/bsim4/nmos/reference/noise2.standard, * tests/bsim4/nmos/reference/noise3.standard, * tests/bsim4/nmos/reference/noise4.standard, * tests/bsim4/nmos/run, * tests/bsim4/oneshot.cir, * tests/bsim4/oneshot.out, * tests/bsim4/opamp.cir, * tests/bsim4/opamp.out, * tests/bsim4/pmos/parameters/pmosParameters, * tests/bsim4/pmos/qaSpec, * tests/bsim4/pmos/reference/acFreq.standard, * tests/bsim4/pmos/reference/acFreq_acnqsmod.standard, * tests/bsim4/pmos/reference/acFreq_capmod.standard, * tests/bsim4/pmos/reference/acFreq_diomod.standard, * tests/bsim4/pmos/reference/acFreq_geomod.standard, * tests/bsim4/pmos/reference/acFreq_igcmod.standard, * tests/bsim4/pmos/reference/acFreq_mobmod.standard, * tests/bsim4/pmos/reference/acFreq_trnqsmod.standard, * tests/bsim4/pmos/reference/acFreq_wpemod.standard, * tests/bsim4/pmos/reference/acFreq_xpart.standard, * tests/bsim4/pmos/reference/acVd.standard, * tests/bsim4/pmos/reference/dcSweep_lw1.standard, * tests/bsim4/pmos/reference/dcSweep_lw1_vb1.standard, * tests/bsim4/pmos/reference/dcSweep_lw1_vb2.standard, * tests/bsim4/pmos/reference/dcSweep_lw2.standard, * tests/bsim4/pmos/reference/dcSweep_lw3.standard, * tests/bsim4/pmos/reference/dcSweep_lw4.standard, * tests/bsim4/pmos/reference/dcSweep_lw5.standard, * tests/bsim4/pmos/reference/dcSweep_lw6.standard, * tests/bsim4/pmos/reference/dcSweep_lw7.standard, * tests/bsim4/pmos/reference/dcSweep_lw8.standard, * tests/bsim4/pmos/reference/dcSweep_lw9.standard, * tests/bsim4/pmos/reference/dcSweep_nrd.standard, * tests/bsim4/pmos/reference/dcSweep_nrs.standard, * tests/bsim4/pmos/reference/dcSweep_sa.standard, * tests/bsim4/pmos/reference/dcSweep_sb.standard, * tests/bsim4/pmos/reference/dcSweep_sca.standard, * tests/bsim4/pmos/reference/dcSweep_scb.standard, * tests/bsim4/pmos/reference/dcSweep_scc.standard, * tests/bsim4/pmos/reference/noise1.standard, * tests/bsim4/pmos/reference/noise2.standard, * tests/bsim4/pmos/reference/noise3.standard, * tests/bsim4/pmos/reference/noise4.standard, * tests/bsim4/pmos/run, * tests/bsim4/ro_17.cir, * tests/bsim4/ro_17.out, * tests/bsim4/test1.cir, * tests/bsim4/test1.out, * tests/bsim4/test10.cir, * tests/bsim4/test10.out, * tests/bsim4/test11.cir, * tests/bsim4/test11.out, * tests/bsim4/test12.cir, * tests/bsim4/test12.out, * tests/bsim4/test13.cir, * tests/bsim4/test13.out, * tests/bsim4/test14.cir, * tests/bsim4/test14.out, * tests/bsim4/test2.cir, * tests/bsim4/test2.out, * tests/bsim4/test3.cir, * tests/bsim4/test3.out, * tests/bsim4/test4.cir, * tests/bsim4/test4.out, * tests/bsim4/test5.cir, * tests/bsim4/test5.out, * tests/bsim4/test6.cir, * tests/bsim4/test6.out, * tests/bsim4/test7.cir, * tests/bsim4/test7.out, * tests/bsim4/test8.cir, * tests/bsim4/test8.out, * tests/bsim4/test9.cir, * tests/bsim4/test9.out: tests/bsim4: use the standard CMC model check 2012-05-05 h_vogt * src/xspice/README: update `making xspice' within actual ngspice 2012-05-05 h_vogt * src/spicelib/devices/numd/numddump.c: NUMDdump(): add binary mode fopen() with wb write operating point (external state) for true binary output 2012-05-01 h_vogt * src/frontend/outitf.c: beautify code 2012-05-01 h_vogt * src/spicelib/devices/cktask.c: error return only if variable `error' is set 2012-04-29 h_vogt * src/frontend/error.h, * src/spicelib/analysis/acan.c, * src/spicelib/devices/cktask.c: prevent false outputs of @dev[param], when not defined in ac simulation 2012-04-23 h_vogt * src/winmain.c: Enable ctrl-c to interrupt a simulation also for Windows GUI 2012-04-14 h_vogt * src/spicelib/parser/ifeval.c: Independent variable `temper' now returns the temperature in degree C 2012-04-14 h_vogt * src/frontend/inpcom.c: allow `time', `temper', and `hertz' in expressions of behavioral R,L,C devices 2012-04-14 rlar * src/frontend/subckt.c: subckt.c, doit(): fix another memory leak 2012-04-13 rlar * src/frontend/subckt.c: subckt.c, doit(): fix a memory leak 2012-04-08 h_vogt * src/frontend/spiceif.c: exclude circuits with XSPICE 'A' devices from using 'savesnap' XSPICE data storage is not yet implemented 2012-04-07 rlar * src/include/ngspice/inpdefs.h, * src/include/ngspice/inpptree.h, * src/spicelib/devices/asrc/asrcdest.c, * src/spicelib/parser/inpptree.c: fix memory leaks in ASRC and in INPgetTree() implement a reference counter `usecnt' for the elements of the `INPparseTree' 2012-04-07 rlar * src/spicelib/parser/inpptree.c: INPgetTree(), express the live range of some globals 2012-04-07 rlar * src/spicelib/parser/inpptree.c: mkfnode(), minor rewrite 2012-04-06 rlar * configure.ac, * src/frontend/display.c: configure.ac, fix `NO_X' and `has_no_help' drop configure options `--enable-x' and `--disable-x' use `--with-x' and `--without-x' provided by AC_PATH_X bug tracker item: [ngspice-Bugs-3515015] Startup error message without x11 https://sourceforge.net/tracker/index.php?func=detail&aid=3515015&group_id=38962&atid=423915 2012-04-05 rlar * src/spicelib/parser/inpptree.c: inpptree.c, fix differentiation of PTF_FLOOR PTF_CEIL and PTF_POW 2012-04-05 rlar * src/frontend/parse-bison.c, * src/frontend/parse-bison.h, * src/spicelib/parser/inpptree-parser.c, * src/spicelib/parser/inpptree-parser.h: update bison generated files 2012-04-05 rlar * src/spicelib/parser/inpptree-parser.y, * src/spicelib/parser/inpptree.c: fix memory leak in PTparse() 2012-04-05 rlar * src/frontend/parse-bison.y, * src/frontend/parse.c: fix memory leak in PPparse() 2012-04-05 rlar * src/frontend/variable.c: fix memory leak in cp_vset() 2012-04-05 rlar * src/spicelib/parser/inpptree.c: inpptree.c, polish comments 2012-04-05 rlar * src/spicelib/parser/inpptree.c: inpptree.c, fix premature memory allocation 2012-04-05 Michael Woodworth * src/spicelib/parser/inpgmod.c: fix a memory leak in parse_line() This has a HUGE affect on memory usage 2012-03-31 h_vogt * src/frontend/inpcom.c, * src/spicelib/parser/inpeval.c: bug_fix: R,L,C instantiations, tc1, tc2, numbers followed by `:' Ternary function was not recognized in R, C, or L lines if no voltage or current node was part of the expression, because then B-Source is not used. In these cases now inp_fix_ternary_operator_str() is called explicitly. tc1, tc2 were sometimes recognized falsely, if part of a token e.g. tc1end. R, C, and L models are never commented out, because their names may be token no. 4 or 5 in an R, C, or L line, and will not be recognized if 5. INPevaluate() will now correctly evaluate a number if followed by ':' (number may be part of the ternary function). 2012-03-30 h_vogt * src/frontend/inpcom.c: bug fix, inp_bsource_compat(): `tc1=' `tc2=' `reciproctc=' `}' don't substitute `tc1=' `tc2=' `reciproctc=' don't fail when processing tokens followed by `}' chars 2012-03-27 rlar * src/frontend/plotting/grid.c: lingrid(), avoid buffer overflow Bug ID: `Buffer overflow detected - ID: 3510521' reported by Zsolt Makaró The variable `mag3' sometimes seems to take unexpected values (for example log10 can be -Inf, which will be casted to 0x80000000) and seems then to have overflown a buffer buf[LABEL_CHARS] 2012-03-25 rlar * src/frontend/subckt.c: rewrite subckt.c transform doit() into a true recursive version, drop usage of global variables reduce scope of many variables cleanup and readability FIXME, an opportunity to plug a memory leak is visible now. 2012-03-25 rlar * src/frontend/subckt.c: bug fix, numnodes() in response to the `ex-41.cir' test case distilled from a Dietmar Warning Bug report in "Subject: Re: subckt, param" translate() is called recursively and depends on `num of nodes' provided by numnodes(). numnodes() depends on availability of `su_numargs'. But the processing allows non-processing of subckt instantiations in inner recursions (which will be processed later) which means `su_numargs' is not always available. 2012-03-25 rlar * src/frontend/com_measure2.c: round to next nearest integer for the rise, fall and cross arguments of `measure' Simon Guan reported Bug item #3509528, `Meas goes wrong when put in a while loop' In a .control block a `let' variable was passed to the `measure' command. The value of this variable would have been a plain integer, yet it was converted internally to an internal ascii representation with exponential representation (203 ==> 2.03e2) and then processed by `ft_numparse()' where it was converted back to double floating point. Because the intermediate 2.03 has no exact representation in the space of double floating point numbers this conversion was lossy and resulted in a non-integer value. This non-integer was then truncated towards minus infinity in com_measure yielding an error of -1 This commit implements round to nearest in com_measure2 to avoid the problem. FIXME, the internal intermediate conversion of double floating point machine values to ascii representations must be dropped, or replaced with an exact/lossless ascii representation. (for example GNU printf/scanf %a or 64bit hexadecimal representation) 2012-03-24 h_vogt * src/frontend/plotting/graf.c: bug fix, iplot(): Buffer overflow Thanks to Zsolt Makaró for the bug report in Buffer overflow detected - ID: 3510521 http://sourceforge.net/tracker/?func=detail&aid=3510521&group_id=38962&atid=423915 2012-03-24 h_vogt * src/frontend/inpcom.c: bug fix, inp_fix_subckt(): problem when parsing a .subckt line this worked .subckt psub a b p2 = {p1*2-1} p1 = 1 but this failed .subckt psub a b p2 = { p1 * 2 - 1 } p1 = 1 thanks to Ivan Riis Nielsen for the report in Message [Ngspice-devel] parsing problem (ngspice-24 tarball) 2012-03-24 h_vogt * src/tclspice.c: tclspice.c: new functions to get start and final time of a transient simulation 2012-03-17 h_vogt * .gitignore: .gitignore: exclude /release* and /debug* directories 2012-03-17 h_vogt * src/frontend/inpcom.c: inp_fix_subckt(): allow spaces in an expression which acts as a parameter 2012-03-10 h_vogt * .gitignore, * visualc/vngspice.sln, * visualc/vngspice.vcproj: Visual Studio: console and GUI, 32 Bit and 64 Bit newly organized 2012-03-01 dwarning * src/spicelib/parser/inpgmod.c: 1. Correct the list of binable models. 2. Fix a problem with wrong MOS level entries. 2012-02-26 rlar * .gitignore, * src/xspice/.gitignore, * src/xspice/cmpp/.gitignore, * src/xspice/icm/analog/.gitignore, * src/xspice/icm/digital/.gitignore, * src/xspice/icm/spice2poly/.gitignore, * src/xspice/icm/xtradev/.gitignore, * src/xspice/icm/xtraevt/.gitignore, * tests/.gitignore: .gitignore files 2012-02-19 Holger Vogt * com_cdump.c, commands.c, main.c: dummy functions for SMPprint() and SMPprintRHS() to allow making of ngnutmeg, small updates, comments 2012-02-19 Dietmar Warning * src/spicelib/devices/asrc/*.c,*.h * src/frontend/inpcom.c, Add reciprocal temperature behaviour for B sources used for nonlinear resistors, capacitors and inductors (the latter non-reciprocal) 2012-02-19 Holger Vogt * com_cdump.c, com_cdump.h, commands.c, smpdefs.h, spoutput.c, spsmp.c, command mrdump to dump the RHS of the matrix to stdout or to a file 2012-02-19 Holger Vogt * spiceif.c: savesnap, loadsnap enabled (still experimental!) * com_cdump.c, com_cdump.h, commands.c, smpdefs.h, spoutput.c, spsmp.c, cktpzstr.c, txlload.c: command mdump to dump the matrix to stdout or to a file 2012-02-11 Dietmar Warning * src/spicelib/devices/asrc/*.c,*.h,Makefile.am * src/frontend/inpcom.c, * vngspice.vcproj Add temperature coefficients for B sources 2012-02-11 Holger Vogt * inpcom.c: Robert's patch, reading libs, incs etc. 2012-02-11 Holger Vogt * tclspice.c, winmain.c, outitf.c, vectors.c, alloc.c: outheap (under Windows) removed 2012-02-11 Holger Vogt * ngspice.h: fprintf --> tcl_fprintf added * tclspice.c: small updates for Windows * outitf.c, vectors.c, alloc.c: outheap (under Windows) provided, but deactivated 2012-02-11 Robert Larice * src/spicelib/parser/inpptree-parser.c , * src/spicelib/parser/inpptree-parser.h : update bison generated files 2012-02-11 Robert Larice * src/spicelib/parser/inpptree-parser.y , * src/spicelib/parser/inpptree.c : upgrade INPgetTree() this parser did parse the *whole* line, now it parses as much as it can, and passes the rest back in arg `line' 2012-02-10 Holger Vogt / (Robert Larice) * src/frontend/cpitf.c : search for tclspinit in `cwd' as well 2012-02-10 Holger Vogt / (Robert Larice) * src/frontend/postcoms.c : NG_IGNORE something 2012-02-10 Dietmar Warning * src/spicelib/devices/dio/*.c,*.h: Typo with junction potential name 2012-02-09 Robert Larice * src/frontend/com_sysinfo.c , * src/frontend/mw_coms.c , * src/frontend/outitf.c : make use of TMALLOC() 2012-02-09 Robert Larice * src/main.c , * src/tclspice.c , * src/maths/cmaths/cmath2.c , * src/maths/misc/randnumb.c : unuse srandom() and random() 2012-02-08 Francesco Lannutti (Robert Larice) * Makefile.am : polish make maintainer-clean, make mrproper 2012-02-07 Robert Larice * src/include/ngspice/complex.h : #4/4 finish the switch from ngcomplex* args to ngcomplex 2012-02-07 Robert Larice * src/ngsconvert.c , * src/tclspice.c , * src/ciderlib/support/database.c , * src/frontend/breakp.c , * src/frontend/com_compose.c , * src/frontend/cpitf.c , * src/frontend/diff.c , * src/frontend/evaluate.c , * src/frontend/options.c , * src/frontend/points.c , * src/frontend/postcoms.c , * src/frontend/rawfile.c , * src/frontend/vectors.c , * src/frontend/plotting/agraf.c , * src/frontend/plotting/gnuplot.c , * src/frontend/plotting/graf.c , * src/frontend/plotting/plotcurv.c , * src/frontend/plotting/plotit.c , * src/frontend/plotting/xgraph.c , * src/include/ngspice/complex.h , * src/maths/cmaths/cmath1.c , * src/maths/cmaths/cmath2.c , * src/maths/cmaths/cmath3.c , * src/maths/cmaths/cmath4.c , * src/maths/cmaths/test_cx_cph.c , * src/maths/cmaths/test_cx_j.c , * src/maths/cmaths/test_cx_mag.c , * src/maths/cmaths/test_cx_ph.c : #3/4 switch realpart() and imagpart() args from ngcomplex* to ngcomplex 2012-02-07 Robert Larice * src/frontend/diff.c , * src/include/ngspice/complex.h , * src/maths/cmaths/cmath1.c , * src/maths/cmaths/cmath2.c , * src/maths/cmaths/cmath3.c , * src/maths/cmaths/cmath4.c : #2/4 switch cph() and cmag() args from ngcomplex* to ngcomplex 2012-02-07 Robert Larice * src/include/ngspice/complex.h : #1/4 drop cast (enable compiler type check) 2012-02-07 Holger Vogt / Robert Larice * src/tclspice.c : fix varags usage, tcl_printf(), tcl_fprintf(), tcl_vfprintf() 2012-02-07 Robert Larice * src/include/ngspice/devdefs.h , * src/spicelib/devices/dev.c , * src/spicelib/devices/adms/admst/ngspice.xml : adms3, fix some types 2012-02-07 Robert Larice * src/frontend/vectors.c , * src/frontend/parser/complete.c , * src/include/ngspice/cpextern.h , * src/include/ngspice/ftedefs.h , * src/include/ngspice/plot.h : use type `struct ccom' 2012-02-07 Robert Larice * src/main.c , * src/frontend/outitf.c , * src/frontend/outitf.h , * src/include/ngspice/ifsim.h , * src/include/ngspice/noisedef.h , * src/include/ngspice/trandefs.h , * src/spicelib/analysis/acan.c , * src/spicelib/analysis/cktsens.c , * src/spicelib/analysis/dcop.c , * src/spicelib/analysis/dctrcurv.c , * src/spicelib/analysis/distoan.c , * src/spicelib/analysis/pzan.c , * src/spicelib/analysis/tfanal.c : use type `runDesc' 2012-02-07 Robert Larice * src/frontend/outitf.h , * src/include/ngspice/typedefs.h : struct runDesc forward declaration 2012-02-07 Robert Larice * src/frontend/rawfile.c : comment/pinpoint a local misuse of a structure element 2012-02-06 Robert Larice * src/tclspice.c : drop some (char*) casts 2012-02-06 Robert Larice * src/frontend/vectors.c , * src/misc/wlist.c : preserve const'ness of some casts 2012-02-06 Robert Larice * src/frontend/numparam/spicenum.c : drop (void*) cast of the dispose() argument 2012-02-06 Robert Larice * src/frontend/terminal.c : drop tgetstr() return value cast 2012-02-06 Robert Larice * src/frontend/parser/complete.c : drop (char*) cast in the third argument of ioctl() 2012-02-06 Robert Larice * src/frontend/outitf.c , * src/frontend/spiceif.c , * src/frontend/subckt.c , * src/frontend/plotting/graf.c , * src/spicelib/analysis/cktnames.c , * src/spicelib/devices/hisim2/hsm2noi.c , * src/spicelib/devices/hisimhv/hsmhvnoi.c , * src/spicelib/parser/ifnewuid.c , * src/spicelib/parser/inpptree.c , * src/xspice/mif/mifsetup.c : drop some more casts 2012-02-06 Robert Larice * src/spicelib/analysis/analysis.c , * src/spicelib/devices/urc/urcsetup.c : drop some casts 2012-02-06 Robert Larice * src/xspice/cm/cm.c , * src/xspice/evt/evtsetup.c , * src/xspice/evt/evttermi.c , * src/xspice/mif/mifconvt.c , * src/xspice/mif/mifload.c , * src/xspice/mif/mifsetup.c : drop some (char*) casts 2012-02-06 Robert Larice * src/include/ngspice/inpdefs.h , * src/spicelib/parser/inplkmod.c : rewrite INPlookMod(), return INPmodel*/NULL instead of int 1/0 2012-02-06 Robert Larice * src/frontend/com_compose.c , * src/frontend/define.c , * src/frontend/device.c , * src/frontend/inpcom.c , * src/frontend/parse.c , * src/frontend/vectors.c , * src/frontend/parser/complete.c , * src/frontend/parser/unixcom.c , * src/frontend/wdisp/windisp.c , * src/include/ngspice/ngspice.h , * src/spicelib/parser/inpptree.c : use strchr() instead of index() which is depreciated ============================ ngspice-24 ================================== 2012-01-30 Dietmar Warning * src/spicelib/devices/dio/diotemp.c: Add temperature dependent junction potentials also for tlevc=1 capacitor temperature model 2012-01-28 Robert Larice * src/include/ngspice/ngspice.h : define NAN for non C99 environments 2012-01-28 Holger Vogt * configure.ac, compile_min.sh: prepare for release 24 * mifdelete.c: prevent crash upon 'reset', if codemodel is an array FIXME: leads to small memory leak 2012-01-27 Holger Vogt * NEWS, INSTALL, tests\bin\ngspice.pm, /visualc/include/ngspice/config.h: prepare for release 24 2012-01-24 Dietmar Warning * src/spicelib/devices/bjt/bjttemp.c: Add temperature dependent junction potentials also for tlevc=1 capacitor temperature model 2012-01-15 Robert Larice * src/spicelib/devices/hisim2/hsm2eval.c , * src/spicelib/devices/hisim2/hsm2temp.c , * src/spicelib/devices/hisimhv/hsmhveval.c : bug fix, a numerical problem in the hisim2 an hisimhv models First seen when compiled with gcc-4.6.2 -g -O1 The macro `Fn_SZ' which boils down to 1/2 * (x + sqrt(x*x + c*c)) was used in a context where a negative result blew up the following computations. (used to compute `Egidl', which is used to compute exp(-1 / (Egidl + small_constant))) For large negative values of x the computation boils down to 1/2 ( x + almost(|x|) ) where the summands almost cancel each other, sometimes yielding a small negative result. small_constant was too small to avoid a big result for -1/(Egidl + small_constant) yielding an `inf' during the exp() computation, which was later multiplied with a `0' yielding a NaN, which was carried forward during the rest of computations. Because the error of the cancellation scales with the magnitude of x, no larger `small_constant' could have avoided the problem. Presumably the problem was amplified by a mixture of precisions (double versus extended float) of intermediate values. (the program wasn't compiled for sse) ( x was -2.812500e+06, c was 1.000000e-02, Fn_SZ result was -1.853095e-11 thus the cancellation remainder was of relative size 6.6e-18 which is approximately 2^-57 and thus more accurate as a `double float' could have delivered ) 2012-01-15 Robert Larice * tests/bin/modelQaTestRoutines.pm , * tests/bin/runQaTests.pl : perl, defined(%hash) is depreciated 2012-01-15 Holger Vogt * tests\bin\modelQaTestRoutines.pm: $platform should not contain '/' , removed in line 700 2012-01-13 Robert Larice * src/spicelib/devices/hisimhv/.cvsignore : add missing .cvsignore file 2012-01-13 Robert Larice * src/include/ngspice/missing_math.h : revert last commit, simply insane checking for being a macro is already done with HAVE_DECL_ISNAN 2012-01-11 Robert Larice * src/include/ngspice/missing_math.h : wrap isnan declaration, isnan is a macro on modern systems 2012-01-11 Robert Larice * src/frontend/resource.c : fix printf/scanf format strings to match `unsigned long long' arguments 2012-01-09 Holger Vogt * rawfile.c: error messages, bug during loading ascii rawfile removed plot i(vdd) from a loaded rawfile is working now. 2012-01-08 Robert Larice * src/frontend/parse-bison.c , * src/frontend/parse-bison.h , update bison generated files 2012-01-08 Robert Larice * src/frontend/parse-bison.y : bug fix, broken vdb() vph() see plot vdb(1) vr(2) vi(3) vm(4) vp(5) no works - ID: 3470791 http://sourceforge.net/tracker/?func=detail&atid=423915&group_id=38962&aid=3470791 revert: 2011-08-20 Robert Larice the i() and v() function application have special semantics which was meant to fix a problem, when loading a rawfile and trying to access a vector with name "i(vdd)" yet broke the internal user defined functions vdb(x) --> db(v(x)) ... in short load file plot i(vdd) won't work. but load file plot "i(vdd)" will work 2012-01-08 Robert Larice * src/frontend/numparam/xpressn.c , * src/maths/poly/polyfit.c : bug fix, incorrect '%le' printf format specifier responsible for failure on mingw. see string parameters cause crash on win32 platform - ID: 3469699 http://sourceforge.net/tracker/?func=detail&atid=423915&group_id=38962&aid=3469699 I've sneaked this in with commit "numparm, 17 digit placeholders --> numparm__XXXXXXXX dummy symbols" from 2011-02-19 Robert Larice 2012-01-07 Robert Larice * src/spicelib/devices/bsim1/b1set.c , * src/spicelib/devices/bsim2/b2set.c , * src/spicelib/devices/bsim3/b3set.c , * src/spicelib/devices/bsim3v0/b3v0set.c , * src/spicelib/devices/bsim3v1/b3v1set.c , * src/spicelib/devices/bsim3v32/b3v32set.c , * src/spicelib/devices/bsim4/b4set.c , * src/spicelib/devices/bsim4v4/b4v4set.c , * src/spicelib/devices/bsim4v5/b4v5set.c , * src/spicelib/devices/bsim4v6/b4v6set.c , * src/spicelib/devices/hfet1/hfetsetup.c , * src/spicelib/devices/hfet2/hfet2setup.c , * src/spicelib/devices/jfet/jfetset.c , * src/spicelib/devices/jfet2/jfet2set.c , * src/spicelib/devices/mes/messetup.c , * src/spicelib/devices/mesa/mesasetup.c , * src/spicelib/devices/mos1/mos1set.c , * src/spicelib/devices/mos2/mos2set.c , * src/spicelib/devices/mos3/mos3set.c , * src/spicelib/devices/mos6/mos6set.c , * src/spicelib/devices/mos9/mos9set.c , * src/spicelib/devices/vbic/vbicsetup.c : bug fix, fix the guard for device generated internal nodes (via CKTmkVolt()) There is a longstanding bug in spice, responsible for wired behavior when two analyzes are not separated with a `reset' command The second invocation of CKTsetup() repeated the construction of internal device nodes (CKTmkVolt and CKTmkCur) yielding an incorrect device matrix with growing vector size. Obviously the support for a second CKTsetup() invocation was already included in spice, but not implemented correctly. This patch fixes guards in many device models, which should have prevented repeated invocation of CKTmkVolt() and CKTmkCur() This patch fixes many but not all device models, known exceptions are : b4soiset b3soiddset soi3set This fix is kept short, for better readability of the patch diff. A large whitespace and indentation patch will follow. 2012-01-07 Robert Larice * src/frontend/inpcom.c : cleanup, muffle compiler warning 2012-01-07 Robert Larice * src/spicelib/analysis/cktdojob.c : bug fix, CKTcurJob, make sure this is either up do date or NULL fix a valgrind report, access to allready freed memory during CKTtemp() 2012-01-05 Holger Vogt * inpdomod.c: bug in error message for bjt removed 2012-01-03 Holger Vogt * runcoms.c: undo change from 2012-01-01, conflict with 'alter', altermod' 2012-01-02 Robert Larice * src/frontend/inpcom.c : cleanup, muffle compiler warning 2012-01-02 Robert Larice * src/spicelib/analysis/cktdojob.c : xspice bug fix, invoke EVTsetup(ckt) only when `reset' bug fix, tracker ID 3388916 Segfault when combining digital models and breakpoint control https://sourceforge.net/tracker/?func=detail&aid=3388916&group_id=38962&atid=423915 2012-01-02 Robert Larice * src/frontend/error.c : controlled_exit() shall not block waiting for a keyboard press and advertise the exit message to external syntax coloring schemes, emit "ERROR: " at the very beginning of a new line. 2012-01-02 Robert Larice * configure.ac , * src/frontend/commands.c , * src/frontend/runcoms.c , * src/frontend/shyu.c , * src/frontend/spiceif.c , * src/include/ngspice/cktdefs.h , * src/include/ngspice/pssdefs.h , * src/spicelib/analysis/Makefile.am , * src/spicelib/analysis/analysis.c , * src/spicelib/parser/inp2dot.c , * visualc/vngspice.vcproj : conditionally compile PSS analysis discouraging PSS as being `very experimental', to enable use: configure --enable-pss 2012-01-01 Robert Larice * src/Makefile.am : fix tarball, spinit.in was missing 2012-01-01 Holger Vogt * inpcom.c, main.c, compatmode.h, spinit.in: .lib handling depends on input to compatmode * runcoms.c: enforce 'reset' after tran, op, etc. before next simulation is started 2011-12-30 Holger Vogt * b4v5dest.c, b4dest.c, b3dest, b3v32.dest : memory leaks reduced * b3v32... : struct bsim3SizeDependParam --> struct bsim3v32SizeDependParam * inpcom.c: undo commit from 2011-12-27, lib handling was defect! 2011-12-30 Robert Larice * inpcom.c : cleanup, drop `s_lower' FIXME case insensitive filename compare !! 2011-12-30 Robert Larice * inpcom.c : cleanup scope of `y' and `z' 2011-12-30 Robert Larice * inpcom.c : cleanup scope of `keep_char' and `s_lower', drop `s_ptr' 2011-12-30 Robert Larice * inpcom.c : cleanup, drop variable `found_library' 2011-12-30 Robert Larice * inpcom.c : cleanup scope of variable `newfp' 2011-12-30 Robert Larice * inpcom.c : cleanup scope of variable `big_buff2' 2011-12-30 Robert Larice * inpcom.c : cleanup scope of variable `dir_name_flag' 2011-12-30 Robert Larice * inpcom.c : bug fix, copys not always valid cleanup scope, emphasize live range avoid things to be freed too early avoid incorrect frees 2011-12-30 Holger Vogt * inpcom.c: remove a bug reading a file (FIXME: .inc and .lib need some general overhauling!) 2011-12-30 Robert Larice * src/include/ngspice/cktdefs.h , * src/include/ngspice/pzdefs.h , * src/spicelib/devices/nbjt2/nbjt2def.h , * src/spicelib/devices/ndev/ndevexch.h , * src/spicelib/devices/numd2/numd2def.h , * src/spicelib/devices/numos/numosdef.h : remove CVS `Id',`log' etc. keyword incantations 2011-12-30 Holger Vogt * inppas3.c, cktdest.c: reduce memory leaks * inpsymt.c: beautify * inp.c: .csparam allows to tranfer a param into a vector for use in the .control section (yet experimental, not safe against syntax errors) 2011-12-29 Holger Vogt * b4v6dest.c : improved removal of circuit installation, bug no. 3229770. Memory leaks are quasi gone for 10 run - reset sequences of a 1000 transistor circuit 2011-12-29 Robert Larice * src/include/ngspice/Makefile.am : install headers in $(pkdatadir)/include/ngspice use them with a single -I $(pkdatadir)/include compiler directive This is for user compilation of XSPICE and adms codemodels outside of the ngspice build directory Beware of the "ngspice/config.h" file Especially if you build twice, (for tclspice and then for ngspice) both will install this file, with different contents. These headers are a mess, yet they are at least isolated The -I directive will allow them to be found only on explicit demand with a "ngspice/" namespace seperator (use #include "ngspice/...") 2011-12-29 Robert Larice * src/Makefile.am : cleanup src/Makefile.am TCL_MODULE rules CLEANFILES edit pkgIndex.tcl at `make' time to obey (info "(autoconf) Installation Directory Variables") 2011-12-29 Robert Larice * configure.ac : remove @libname@ has been replaced by $(pkglibdir) 2011-12-29 Robert Larice * configure.ac , * src/Makefile.am , * src/spinit.in , * src/tclspinit.in : generate spinit and tclspinit at `make' time to obey (info "(autoconf) Installation Directory Variables") and edit them for codemodels in $(pkglibdir) 2011-12-29 Robert Larice * src/xspice/icm/GNUmakefile.in , * src/xspice/icm/makedefs.in : install codemodels in $(pkglibdir) this was hardwired to $libdir/spice 2011-12-28 Holger Vogt * cktdest.c, inpsymt.c: reduce memory leaks for command 'reset' bug no. 3229770 2011-12-27 Robert Larice * visualc/vngspice.vcproj , * visualc/include/config.h , * visualc/include/ngspice/config.h : #6/6 config.h --> ngspice/config.h, vngspice.vcproj 2011-12-27 Robert Larice * src/frontend/help/Makefile.am , * src/xspice/icm/makedefs.in : #5/6 config.h --> ngspice/config.h, some more -I include paths 2011-12-27 Robert Larice * **/Makefile.am , #4/6 config.h --> ngspice/config.h, AM_CPPFLAGS 2011-12-27 Robert Larice * **/Makefile.am , * src/spicelib/devices/adms/admst/ngspice.xml , * src/spicelib/devices/adms/admst/ngspiceMakefile.am.xml : #3/6 config.h --> ngspice/config.h, AM_CPPFLAGS 2011-12-27 Robert Larice * **/* : #2/6 config.h --> ngspice/config.h, #include's 2011-12-27 Robert Larice * configure.ac , * .cvsignore , * src/include/ngspice/.cvsignore : #1/6 config.h --> ngspice/config.h, configure.ac 2011-12-27 Robert Larice * src/frontend/com_ghelp.c , * src/frontend/cpitf.c : cleanup 2011-12-27 Holger Vogt * inpcom.c: warnings and error messages in .lib handling (bug no. 3111261) 2011-12-26 Holger Vogt * xpressn.c * ptfuncs.c, inpptree.c, inpptree.h, spicelib/parser/inp.h * cmath2.c, cmath2.h, fteext.h, parse.c functions floor and ceil added to numparam, ASRC and scripting language 2011-12-25 Holger Vogt * src/frontend/inpcom.c : remove 'params:' from X or .SUBCKT lines of input deck (in fcn inp_fix_for_numparam()) 2011-12-21 Holger Vogt * src/misc/string.c , src/frontend/inpcom.c , src/include/ngspice/stringutil.h: allow syntax Gxxx n1 n2 TABLE {expression} = (x0, y0) (x1, y1) (x2, y2) or Exxx n1 n2 TABLE {expression} = (x0, y0) (x1, y1) (x2, y2) 2011-12-17 Robert Larice * src/xspice/cmpp/ifs_lex.l , * src/xspice/cmpp/ifs_yacc.y , * src/xspice/cmpp/ifs_yacc_y.h , * src/xspice/cmpp/mod_lex.l , * src/xspice/cmpp/mod_yacc.y , * src/xspice/cmpp/mod_yacc_y.h : remove CVS `Id',`log' etc. keyword incantations 2011-12-17 Robert Larice * src/winmain.c , * src/frontend/inpcom.c , * src/include/ngspice/Makefile.am , * src/include/ngspice/memory.h , * src/misc/Makefile.am , * src/misc/string.c , * visualc/vngspice.vcproj : Added src/include/ngspice/stringutil.h Removed src/misc/stringutil.h move stringutil.h --> src/include/ngspice 2011-12-17 Holger Vogt * src/frontend/inpcom.c : allow syntax Gxxx n1 n2 value={equation} or Exxx n1 n2 value={equation} 2011-12-17 Robert Larice * src/spicelib/devices/dev.c , * src/spicelib/devices/adms/admst/ngspice.xml : adms3, use -ldl instead of -lltdl, fix include path 2011-12-17 Robert Larice * src/frontend/breakp2.c , * src/frontend/outitf.c , * src/include/ngspice/ftedefs.h , * src/spicelib/analysis/cktsens.c : type fixes 2011-12-17 Holger Vogt * src/frontend/inp.c, src/frontend/options.c src/include/ngspice/fteext.h : variable ft_stricterror to exit ngspice with exit code 1 if any error occurs during circuit parsing. Usage maybe extended to other errors. Tradditionally ngspice uses to continue, issue error messages, deliver wrong results and exit with exit code 0. 2011-12-16 Holger Vogt * src/frontend/subckt.c: beautify code 2011-12-15 Robert Larice * configure.ac , * src/frontend/inpcom.c , * src/frontend/subckt.c , * src/include/ngspice/devdefs.h , * src/include/ngspice/ngspice.h , * src/spicelib/devices/dev.c , * src/spicelib/parser/inp2u.c , * src/spicelib/parser/inpdomod.c : new: configure --enable-adms3 make Laurents changes truely --adms3 specific trying to preserve --adms 2011-12-15 Laurent Lemaitre * src/frontend/inpcom.c , * src/frontend/subckt.c , * src/include/ngspice/devdefs.h , * src/spicelib/devices/adms/admst/ngspice.xml , * src/spicelib/devices/dev.c : added SPICEadmsdev - a super structure of SPICEdev used to build dynamic device libraries 2011-12-14 Laurent Lemaitre * src/spicelib/parser/inp2u.c , * src/spicelib/parser/inpdomod.c , * src/spicelib/devices/dev.c , * src/include/ngspice/ngspice.h , * src/spicelib/devices/adms/admst/prengspice.xml , * src/spicelib/devices/adms/admst/ngspice.xml : renamed premint.xml to prengspice.xml. xml file that does preformating of verilog files. add routine load_vadev to public definitions. add routine load_vadev for dynamic loading of modules. add dynamic loading of models. shared libs should be libNAME.so. use u instance as dynamically defined models in --adms mode 2011-12-13 Robert Larice * **/* : remove CVS `Id',`log' etc. keyword incantations 2011-12-13 Robert Larice * src/frontend/outitf.c , * src/frontend/outitf.h , * src/frontend/spiceif.c , * src/include/ngspice/ifsim.h , * src/spicelib/analysis/acan.c , * src/spicelib/analysis/cktsens.c , * src/spicelib/analysis/dcop.c , * src/spicelib/analysis/dcpss.c , * src/spicelib/analysis/dctran.c , * src/spicelib/analysis/dctrcurv.c , * src/spicelib/analysis/distoan.c , * src/spicelib/analysis/noisean.c , * src/spicelib/analysis/pzan.c , * src/spicelib/analysis/tfanal.c : unify OUTpBeginPlot() invocation 2011-12-13 Robert Larice * src/spicelib/analysis/pzan.c : unify OUTpBeginPlot() usage of ckt->CKTcurJob 2011-12-13 Robert Larice * src/spicelib/analysis/cktdisto.c , * src/spicelib/analysis/cktpzld.c , * src/spicelib/analysis/cktpzset.c , * src/spicelib/analysis/cktsens.c , * src/spicelib/analysis/dctrcurv.c , * src/spicelib/analysis/dctsetp.c , * src/spicelib/analysis/distoan.c , * src/spicelib/analysis/noisean.c , * src/spicelib/analysis/pzan.c , * src/spicelib/analysis/sensaskq.c , * src/spicelib/analysis/senssetp.c : rename various analysis vars --> `job' 2011-12-13 Robert Larice * src/spicelib/analysis/acaskq.c , * src/spicelib/analysis/acsetp.c , * src/spicelib/analysis/daskq.c , * src/spicelib/analysis/dsetparm.c , * src/spicelib/analysis/naskq.c , * src/spicelib/analysis/nsetparm.c , * src/spicelib/analysis/pssaskq.c , * src/spicelib/analysis/pssinit.c , * src/spicelib/analysis/psssetp.c , * src/spicelib/analysis/pzaskq.c , * src/spicelib/analysis/pzsetp.c , * src/spicelib/analysis/tfsetp.c , * src/spicelib/analysis/tranaskq.c , * src/spicelib/analysis/traninit.c , * src/spicelib/analysis/transetp.c : auxiliary define `job' --> local variable `job' 2011-12-13 Robert Larice * src/spicelib/analysis/acaskq.c , * src/spicelib/analysis/acsetp.c , * src/spicelib/analysis/daskq.c , * src/spicelib/analysis/dsetparm.c , * src/spicelib/analysis/naskq.c , * src/spicelib/analysis/nsetparm.c , * src/spicelib/analysis/pssaskq.c , * src/spicelib/analysis/pssinit.c , * src/spicelib/analysis/psssetp.c , * src/spicelib/analysis/pzaskq.c , * src/spicelib/analysis/pzsetp.c , * src/spicelib/analysis/tfsetp.c , * src/spicelib/analysis/tranaskq.c , * src/spicelib/analysis/traninit.c , * src/spicelib/analysis/transetp.c : auxiliary define (ANALYSIS*) anal --> `job' 2011-12-13 Robert Larice * autogen.sh , * src/spicelib/devices/adms/admst/ngspice.xml : switch --adms3 over to the new adms3va directories 2011-12-13 Robert Larice * src/spicelib/devices/adms/hicum0/admsva/hicum0.va , * src/spicelib/devices/adms/mextram/admsva/bjt504t.va , * src/spicelib/devices/adms/psp102/admsva/JUNCAP200_parlist.include , * src/spicelib/devices/adms/psp102/admsva/PSP102_module.include : undo `2011-12-12 Laurent Lemaitre' which broke --adms in favour of --adms3 adms3 shall now be worked upon in `adms3va' subdirectories 2011-12-13 Robert Larice * src/spicelib/devices/adms/*/adms3va/* : copy old amds .va files to a new directory `adms3va' 2011-12-12 Robert Larice * src/spicelib/devices/adms/admst/ngspiceMODULE*.xml : remove CVS `Id' and `log' keyword incantations I did use '-->' in a commit message, which was injected into the source files due to CVS keyword expansion. Please use `cvs log' if you really want to know the CVS log 2011-12-12 Laurent Lemaitre * src/spicelib/devices/adms/hicum0/admsva/hicum0.va , * src/spicelib/devices/adms/mextram/admsva/bjt504t.va , * src/spicelib/devices/adms/psp102/admsva/JUNCAP200_parlist.include , * src/spicelib/devices/adms/psp102/admsva/PSP102_module.include : Make veriloga models compliant with Language Reference Manual. They will not compile with --adms flag. 2011-12-12 Laurent Lemaitre * src/spicelib/devices/adms/admst/ngspice.xml : Set name of model C routines unique - make linker happy. 2011-12-11 Robert Larice * src/spicelib/devices/adms/admst/ngspice.xml : #4/4 #include --> #include "ngspice/..." for adms3 2011-12-11 Robert Larice * src/spicelib/devices/adms/admst/ngspiceMODULE*.xml : #3/4 #include --> #include "ngspice/..." for adms 2011-12-11 Robert Larice * src/xspice/cmpp/pp_mod.c , * src/xspice/cmpp/writ_ifs.c : #2/4 #include --> #include "ngspice/..." printf strings 2011-12-11 Robert Larice * **/* : #1/4 #include --> #include "ngspice/..." use "" instead of <> to better express project membership <> includes might be skipped by dependency generator tools assuming those being stable system include files 2011-12-11 Robert Larice * src/spicelib/analysis/acan.c , * src/spicelib/analysis/dcpss.c , * src/spicelib/analysis/dctran.c : use a macro to update ckt->CKTstat->STAT.. 2011-12-11 Robert Larice * src/spicelib/**/*.c : auxiliary define `job' --> local variable `job' 2011-12-11 Robert Larice * src/spicelib/**/*.c : auxiliary define (ANALYSIS*) ckt->CKTcurJob --> `job' 2011-12-11 Robert Larice * src/spicelib/analysis/cktdisto.c , * src/spicelib/analysis/cktpzld.c , * src/spicelib/analysis/cktsens.c , * src/spicelib/analysis/dctrcurv.c : variable rename `sen_info' `cv' `pzan' `sen_info' --> `job' 2011-12-11 Robert Larice * src/spicelib/analysis/dcpss.c : similiarity dctran.c versus dcpss.c 2011-12-10 Laurent Lemaitre * src/spicelib/devices/adms/admst/ngspice.xml : add dynamic loading feature 2011-12-03 Robert Larice * src/spicelib/analysis/dcpss.c , * src/spicelib/analysis/dctran.c : cleanup, aiming for higher similarity of dctran.c and dcpss.c this cleanup was checked for identical object code (gcc on linux) 2011-12-03 Robert Larice * src/frontend/numparam/xpressn.c : bug fix, parameter assignment was broken for expressions containing one of '<=' '>=' or '!=' 2011-12-03 Robert Larice * visualc/vngspice.vcproj : remove some unused `vcproj' dependencies 2011-11-30 Robert Larice * src/frontend/inpcom.c : bug fix, parameter processing was broken for nested .subckt 2011-11-27 Holger Vogt * /frontend/runcoms2.c: command 'remcirc' to remove a circuit. 2011-11-26 Holger Vogt * /frontend/plotting/gnuplot.c: appendwrite and complex variable printing added. 2011-11-13 Holger Vogt * inp.c: code beautify, indentations etc. * inpcom.c: reordering, fcn prototypes added, docu added 2011-11-04 Holger Vogt * INSTALL: give more precise instructions 2011-11-03 Robert Larice * src/xspice/icm/GNUmakefile.in : xspice/icm/GNUmakefile.in, add missing `uninstall' target 2011-10-31 Robert Larice * src/main.c , * src/frontend/com_fft.c , * src/frontend/ftesopt.c , * src/frontend/resource.c , * src/frontend/numparam/xpressn.c : swallow warnings 2011-10-31 Robert Larice * src/spicelib/devices/hisim2/hisim2.h , * src/spicelib/devices/hisim2/hsm2ld.c , * src/spicelib/devices/hisimhv/hisimhv.h , * src/spicelib/devices/hisimhv/hsmhvld.c , * src/spicelib/devices/hisimhv/hsmhvnoi.c , * src/spicelib/devices/hisimhv/hsmhvset.c : swallow warnings in hisimhv and hisim2 code 2011-10-31 Robert Larice * devices/mos2/mos2ask.c: Fix the source/drain typo for overlap cap's, for mos2 as well see https://sourceforge.net/tracker/?func=detail&atid=423915&aid=3429175&group_id=38962 see commit from 2000-09-05 2011-10-30 Holger Vogt * DEVICES: update to hisim_hv 1.2.2 2011-10-30 Dietmar Warning * devices/mos1/mos1ask.c: Fix the source/drain typo for overlap cap's * devices/hisimhv/*.c, *.h, tests/hsimhv: Update to actual hisim_hv model version 1.2.2 * tests/bin/ngspice.pm: remove .st0 files not needed for ngspice 2011-10-16 Robert Larice * src/spicelib/parser/inpptree-parser.c , * src/spicelib/parser/inpptree-parser.h : update bison generated files 2011-10-16 Robert Larice * src/spicelib/parser/inpptree-parser.y , * src/spicelib/parser/inpptree.c : bug fix, allow special nodenames "/Node" and "Node-4" in `B' expressions related to http://sourceforge.net/tracker/?func=detail&aid=3421234&group_id=38962&atid=423915 the lexer will now identify special function applications v(node) v(node,node) and i(instance) 2011-10-02 Holger Vogt * device.c updates to altermod command, allow reading from file with multiple .model sections 2011-09-18 Holger Vogt * com_fft.c: fft now uses faster Green's method (may be deselected by unsetting #define GREEN swirch * spiceif.c: code beutify for better readability * device.c updates to altermod command, allow reading from file * com_measure2.c: warning real ac removed 2011-09-11 Holger Vogt * frontend/plotting/grid.c: Error message, if requested resolution cannot be handled. 2011-08-28 Dietmar Warning * /admst/ngspice.xml, ngspiceVersion.xml, psp102.va: psp102 module name change according to model developer used naming convention (psp102 is now PSP102VA) 2011-08-24 Dietmar Warning * configure.ac, inp2q.c, inpdomod.c, dev.c, ngspice.xml, bjt504t.va: change the name of the mextram verilog module according to model developer used naming convention (mextram.va is substituted by bjt504t.va), means including parasitic substrate transistor and selfheating is enabled 2011-08-24 Robert Larice * src/spicelib/devices/adms/admst/ngspiceMakefile.am.xml : adms, fix an extra backslash, which i've sneaked in 2011-08-12, adms, fix parallel execution when using make -j 2011-08-21 Robert Larice * src/spicelib/analysis/cktpzstr.c : prototypes, and avoid a NULL dereference when PZDEBUG is active 2011-08-21 Robert Larice * src/frontend/outitf.c : avoid segfault when printing aout a nonexistant `ReferenceValue' (pzan) 2011-08-21 Holger Vogt * fftext.h, fftext.c, fftlib.c, fftlib.h: type long to int (patch by Robert) isracct.c, vsrcacct.c: suppress info on freeing fft tables 2011-08-21 Robert Larice * src/main.c , * src/frontend/runcoms.c , * src/frontend/runcoms2.c : use unlink() instead of remove() thanks to Marcel Hendrix 2011-08-20 Robert Larice * src/spicelib/devices/adms/admst/ngspice.xml : #7/7 use a subdirectory "ngspice" for includes to create a uniq namespace adms-3 2011-08-20 Robert Larice * src/spicelib/devices/adms/admst/*.xml : #6/7 use a subdirectory "ngspice" for includes to create a uniq namespace adms-2 2011-08-20 Robert Larice * src/xspice/cmpp/pp_mod.c , * src/xspice/cmpp/writ_ifs.c : #5/7 use a subdirectory "ngspice" for includes to create a uniq namespace xspice 2011-08-20 Robert Larice * visualc/vngspice.vcproj : #4/7 use a subdirectory "ngspice" for includes to create a uniq namespace 2011-08-20 Robert Larice * configure.ac , * src/Makefile.am : #3/7 use a subdirectory "ngspice" for includes to create a uniq namespace 2011-08-20 Robert Larice * src/include/* : #2/7 use a subdirectory "ngspice" for includes to create a uniq namespace move the include files down into the new directory 2011-08-20 Robert Larice * **/* : #1/7 use a subdirectory "ngspice" for includes to create a uniq namespace 2011-08-20 Robert Larice * src/frontend/parse-bison.c , * src/frontend/parse-bison.h , update bison generated files 2011-08-20 Robert Larice * src/frontend/parse-bison.y : the i() and v() function application have special semantics 2011-08-20 Robert Larice * src/maths/fft/Makefile.am , * visualc/vngspice.vcproj : remove maths/fft/fftext.h 2011-08-19 Holger Vogt * rawfile.c: code beautified, 'strange line' error improved * maths/fft/fftext.h removed * include/fftext.h, 1-f-code.c, 1-f-code.h, com_fft.c: type float --> double * control.c: code beautified 2011-08-14 Robert Larice * src/frontend/postsc.c : postsc.c, swallow warnings 2011-08-14 Paolo Nenzi * src/frontend/devices.c : devhelp now prints header when user asks for a single parameter. 2011-08-13 Robert Larice * src/ciderlib/twod/twoprint.c : twoprint.c, swallow warnings 2011-08-13 Robert Larice * src/frontend/parse-bison.c , * src/frontend/parse-bison.h , * src/spicelib/parser/inpptree-parser.c , * src/spicelib/parser/inpptree-parser.h : update bison generated files 2011-08-13 Robert Larice * src/frontend/parse-bison.y , * src/spicelib/parser/inpptree-parser.y : bison files, swallow warnings 2011-08-12 Robert Larice * src/spicelib/devices/adms/admst/ngspice.xml , * src/spicelib/devices/adms/admst/ngspiceMakefile.am.xml : adms, fix parallel execution when using make -j 2011-08-12 Robert Larice * src/spicelib/devices/adms/admst/ngspiceMODULEask.c.xml , * src/spicelib/devices/adms/admst/ngspiceMODULEguesstopology.c.xml , * src/spicelib/devices/adms/admst/ngspiceMODULEload.c.xml , * src/spicelib/devices/adms/admst/ngspiceMODULEmask.c.xml , * src/spicelib/devices/adms/admst/ngspiceMODULEpar.c.xml , * src/spicelib/devices/adms/admst/ngspiceMODULEpzld.c.xml , * src/spicelib/devices/adms/admst/ngspiceMODULEtemp.c.xml , * src/spicelib/devices/adms/admst/ngspiceMakefile.am.xml : pull two -adms3 fixes into -adms 2011-07-25 convert K&R function definitions to ansi style and declare a debug function `static' 2011-07-26 swallow unsed variable warnings in adms generated code, upgrade dependencies 2011-08-12 Robert Larice * src/frontend/plotting/Makefile.am , * src/frontend/plotting/grid.c , * src/frontend/plotting/grid.h , * src/include/grid.h , * visualc/vngspice.vcproj : remove second incarnation of `grid.h' 2011-08-11 Holger Vogt * xpressn.c: correct #include path for error.h 2011-08-10 Holger Vogt * evtplot.c: initilize 'value' to 0 * xpressn.c: improved error message * misccoms.c, main.c, error.c, fteext.h: flag ft_pipemode set in main.c, used to optimize or suppress output messages 2011-08-09 Holger Vogt * inp2dot.c: align spaces and braces * inp2dot.c, examples/pss/*.cir: uic for pss to end of line 2011-08-09 Paolo Nenzi * (new) src/include/fteoptdefs.h * (new) src/frontend/ftesopt.c * (new) src/frontend/inventory.c * src/frontend/commands.c * src/frontend/device.c * src/frontend/device.h * src/frontend/inp.c * src/frontend/mw_coms.c * src/frontend/resource.c * src/frontend/ftedefs.h * src/frontend/fteext.h * src/frontend/optdefs.h * src/spicelib/devices/cktcrte.c * src/spicelib/devices/cktinit.c added "frontend statistics" to the acct command: netlist loading and parsing time and number of lines. Added "devhelp" command to show available devices and describe device parameters. Added "inventory command" to print the number of istances of each device. 2011-08-09 Robert Larice * src/maths/misc/equality.c : swallow some warnings, and use 2011-08-09 Robert Larice * src/spicelib/analysis/dcpss.c : a series of four cleanup patches remove unsed variable `cont_1' reduce scope of variable `tv_01', and use `MAX' reduce scope of variables `fproj' and `err' reduce scope of variable `temp' 2011-08-09 Robert Larice * src/main.c * src/frontend/plotting/graf.c * src/frontend/plotting/grid.c * src/frontend/plotting/x11.c * src/frontend/wdisp/windisp.c * src/spicelib/analysis/acan.c * src/spicelib/analysis/dcop.c * src/spicelib/analysis/dctran.c * src/spicelib/analysis/dctrcurv.c * src/spicelib/analysis/distoan.c * src/spicelib/analysis/pzan.c * src/spicelib/parser/inpeval.c * src/spicelib/parser/inpptree.c rewrite (double)literal --> floating-point-literal 2011-08-08 Holger Vogt * src/frontend/com_fft.c, src/maths/fft/fftext.c, fftext.h, fftlib.c, fftlib.h, matlib.c, matlib.h: convert float to double * winmain.c: increase text output buffer 2011-08-08 Robert Larice * src/xspice/cm/cmutil.c : ngspice.h always must be the first included file because of "man feature_test_macros(7)" 2011-08-08 Robert Larice * src/spicelib/analysis/dcpss.c : rewrite pointer dereferences to array subscripts 2011-08-07 Robert Larice * src/misc/util.c : rewrite ngdirname() 2011-08-07 Paolo Nenzi * (new) examples/pss , * (new) examples/pss/colpitt_osc_pss.cir , * (new) examples/compl_cross_quad_osc_pss.cir , * (new) examples/hartley_osc_pss.cir , * (new) examples/ring_osc_pss.cir , * (new) examples/vackar_osc_pss.cir , * (new) examples/vdp_osc_pss.cir : Moved example files for pss from Stefano Perticaroli from tests/ to the examples directory. 2011-08-07 Robert Larice * src/xspice/cmpp/mod_lex.l : allow '//' comments in xspice code models Bugs item #3387331 `Be careful when using "//" in codemodel sources' https://sourceforge.net/tracker/?func=detail&atid=423915&aid=3387331&group_id=38962 2011-08-07 Robert Larice * src/frontend/shyu.c : fix a `strict-aliasing' warning warning: dereferencing pointer 'current' does break strict-aliasing rules FIXME, this code is, and was broken. in if_sens_run() error messages are generated, and then ignored. 2011-08-07 Robert Larice * configure.ac : use -O1 when debugging, otherwise gcc ignores -Wuninitialized this is temporary, and certainly will confuse users of gdb obviously somewhere around gcc version 4.4 the necessity to have enable optimization for detecting uninitialized variables was dropped. stable Debian's gcc is a 4.4 and still needs -O1 ... 2011-08-06 Dietmar Warning * bsim4v4/b4v4set.c: fix missing model parameter defaults * b4check.c, b4v4check.c, b4v5check.c: add "4.x" as a short form for version 2011-08-06 Robert Larice * src/frontend/shyu.c : fix use of possibly uninitialized variables, return on error 2011-08-06 Robert Larice * src/spicelib/devices/adms/admst/ngspice.xml : reposition NG_IGNOREABLE for non C99 compiler compatibility 2011-08-06 Robert Larice * src/maths/cmaths/Makefile.am , * src/maths/cmaths/cmath1.c , * src/maths/cmaths/test_cx_cph.c : cph(vec), rewrite, cleanup, and add missing test_cx_cph.c 2011-08-06 Holger Vogt * fteext.h, cmaths/makefile.am, cmath1.c, cmath1.h, parse.c: function cph(vec) delivers phase from a vector without jumps at +-PI 2011-08-06 Robert Larice * src/frontend/com_sysinfo.c , * src/frontend/resource.c : complete `replace size_t by unsigned long long' 2011-08-06 Robert Larice * src/frontend/shyu.c : bug fix, tranJob was used instead of pssJob 2011-08-06 Robert Larice * src/winmain.c : another type fix for Visual Studio, QUIT_BUTTON_ID 2011-08-06 Robert Larice * src/spicelib/devices/dev.c : fix broken commit `type fix for Visual Studio' 2011-08-06 Holger Vogt * inpcom.c: code beautify, bug no. 3386184 * resource.c, resource.h, com_sysinfo.c: replace size_t by unsigned long long 2011-08-05 Robert Larice * src/spicelib/devices/dev.c : type fix for Visual Studio 2011-08-05 Robert Larice * src/include/ngspice.h : disable Visual Studio "warning: C4127: conditional expression is constant" 2011-08-05 Robert Larice * src/maths/cmaths/cmath2.c : rewrite to fix potential (actuall impossible) usage of variable `c' 2011-08-05 Robert Larice * src/spicelib/parser/inp2m.c : fix warning of potential (actuall impossible) usage of uninitialized node5..7 2011-08-04 Holger Vogt * dcpss.c: tiny update to obtain compilation with MS VS 2008, code beautyfied * winmain.c, dcpss.c: Windows progress message improved 2011-08-04 Paolo Nenzi * (new) tests/pss , * (new) tests/pss/colpitt_osc_pss.cir , * (new) tests/compl_cross_quad_osc_pss.cir , * (new) tests/hartley_osc_pss.cir , * (new) tests/ring_osc_pss.cir , * (new) tests/vackar_osc_pss.cir , * (new) tests/vdp_osc_pss.cir : Added example files for pss from Stefano Perticaroli. 2011-08-04 Robert Larice * src/frontend/commands.c , * src/frontend/runcoms.c , * src/frontend/runcoms.h , * src/frontend/shyu.c , * src/frontend/spiceif.c , * src/include/Makefile.am , * src/include/cktdefs.h , * src/spicelib/analysis/Makefile.am , * src/spicelib/analysis/analysis.c , * src/spicelib/parser/inp2dot.c , * (new) src/include/pssdefs.h , * (new) src/spicelib/analysis/dcpss.c , * (new) src/spicelib/analysis/pssaskq.c , * (new) src/spicelib/analysis/pssinit.c , * (new) src/spicelib/analysis/psssetp.c : Committed PSS (Periodic Steady State Analysis) code from Stefano Perticaroli. The analysis is based on the transient analysis and is able to predict the fundamental frequency and amplitude (and also harmonics) for autonomous systems. 2011-08-04 Robert Larice * src/spicelib/analysis/cktsetbk.c : bug fix, broken insert at the front of CKTbreaks[] 2011-08-03 Holger Vogt * ivars.c update for LINUX * tclspice.c, nghelp.c, spiced.c: ivars(NULL) * main.c: reference to memory leak checker for Windows removed * visualc/vngspice.sln, visualc\vngspice.vcproj: 32 and 64 bit 2011-07-30 Dietmar Warning * adms/ekv/admsva/ekv.va: semicolon after macro expl was wrong * adms/mextram/admsva: update va code from version 504.7 to 504.9.1 2011-07-27 Holger Vogt * inpcom.c: nested parens, line 2963 ff * cmutil.c: inlude ngspice.h for NaN 2011-07-26 Robert Larice * src/spicelib/devices/adms/admst/ngspice.xml : lower-case the first string in an IOP("HuGo",...) incantation 2011-07-26 Laurent Lemaitre * src/spicelib/devices/adms/admst/ngspice.xml : remove perl command in generated Makefime.am which lower-case'ed the first string in an IOP("HuGo",...) incantation 2011-07-26 Robert Larice * src/include/ngspice.h , * src/spicelib/devices/adms/admst/ngspice.xml : swallow unsed variable warnings in adms generated code, upagrade dependencies 2011-07-26 Laurent Lemaitre * src/spicelib/devices/adms/admst/ngspice.xml : Fixed code generation for ekv by adding definition of min and max and logE. 2011-07-25 Laurent Lemaitre * src/spicelib/devices/adms/admst/ngspice.xml : fixed handling of expressions used as default value in parameter definition: parameter real p=ln(q) 2011-07-25 Robert Larice * src/spicelib/devices/adms/admst/ngspice.xml : convert K&R function definitions to ansi style and declare are debug function `static' 2011-07-24 Robert Larice * src/frontend/plotting/plotit.c : cleanup getlims() and plug a memory leak 2011-07-24 Robert Larice * src/xspice/ipc/ipcstdio.c : (int) cast, where size can be expected to be small enough 2011-07-24 Robert Larice * src/misc/util.c : use size_t 2011-07-24 Robert Larice * src/spicelib/parser/inp2m.c : avoid incorrect bindnodes when falling back to a 4 node device thats a polish of saj's fix from 2003-07-23 2011-07-24 Robert Larice * src/spicelib/devices/bsim3soi_dd/b3soiddld.c : bug fix, incomplete check for NAN did this `TURKEY' try to fool the poor old man's eyes, who is named `Alberto' ? 2011-07-24 Robert Larice * src/spicelib/analysis/acan.c , * src/spicelib/analysis/dctran.c , * src/spicelib/analysis/dctrcurv.c , * src/spicelib/analysis/noisean.c : polish saj's resume fix, use it for `acan' as well saj's fix was applied 2003-07-23 19:36 avoid (non)-usage of uninitialized variables FIXME, get rid of the `evil' number `666', find a better solution 2011-07-24 Robert Larice * src/spicelib/analysis/noisean.c : bug fix, stepsize in `noisean' 2011-07-23 Robert Larice * src/frontend/resource.c , * src/frontend/resource.h : use #include and size_t for portability 2011-07-23 Robert Larice * src/xspice/cm/cmutil.c : fix usage of an uninitialized variable 2011-07-23 Robert Larice * src/spicelib/analysis/cktsens.c : fix usage of an uninitialized variable 2011-07-23 Robert Larice * src/ciderlib/oned/oneprint.c , * src/ciderlib/twod/twoprint.c : use #include to platform independent print 'size_t' variables 2011-07-23 Robert Larice * autogen.sh : update for --adms3 2011-07-23 Dietmar Warning * ngspiceMODULE.c.xml, ngspiceMakefile.am.xml: lower case substitution in xml module instead with perl in make process 2011-07-22 Laurent Lemaitre * ngspice.xml: add code to create Makefile.am using flag --create_makefile_am at admsXml command line 2011-07-21 Laurent Lemaitre * ngspice.xml: resync with adms api changes 2011-07-20 Holger Vogt * commands.c, runcoms2.c, runcoms2.h: command 'remcirc': remove the current circuit plotting.c: replace the ancient date by the build date 2011-07-17 Robert Larice * src/frontend/plotting/plotit.c : cleanup, `getlims()' has to be used with number arg >= 1 and get rid of an ancient hack 2011-07-17 Robert Larice * src/frontend/arg.c , * src/frontend/com_hardcopy.c : cleanup usage of `prompt()' and get rid of an ancient hack 2011-07-17 Robert Larice * src/frontend/com_fft.c , * src/frontend/inpcom.c : cleanup, reduce compiler warnings 2011-07-17 Robert Larice * src/misc/hash.c : nghash cleanup, use `%p' to print a pointer value 2011-07-17 Robert Larice * src/include/hash.h , * src/misc/hash.c : nghash cleanup, use stdint.h for proper sized integers representing a pointer 2011-07-17 Robert Larice * visualc/include/inttypes.h , * visualc/include/stdint.h : add inttypes.h and stdint.h for visualc from http://code.google.com/p/msinttypes/ 2011-07-17 Robert Larice * src/maths/cmaths/cmath2.c : cleanup redeclarations for todays tanh commit 2011-07-17 Holger Vogt * inp.c: allow comment lines inside of command files 2011-07-17 Robert Larice * src/include/hash.h , * src/misc/hash.c : nghash cleanup 2011-07-17 Holger Vogt * cmath1.c, cmath1.h, cmath2.c, cmath2.h, parse.c, fteext.h: new complex functions sinh, cosh, tanh * evaluate.c: remove redundant call to cmath2.h 2011-07-10 Holger Vogt * main.c, ivars.c, /xspice/icm/analog/file_source/cfunc.mod: environmental variable NGSPICE_INPUT_DIR for additional search directory for input file 2011-07-10 Robert Larice * src/winmain.c , * src/frontend/wdisp/winprint.c : cleanup integer type conversions 2011-07-10 Robert Larice * src/frontend/wdisp/windisp.c : SetWindowLongPtr() and SetClassLongPtr() for 64bit compatibility 2011-07-09 Holger Vogt * input.c: definition of _read only for Windows console 2011-07-09 Robert Larice * src/frontend/gens.c , * src/frontend/subckt.c , * src/frontend/numparam/xpressn.c , * src/maths/sparse/spfactor.c , * src/spicelib/parser/inpgtok.c , * src/xspice/cm/cm.c : explicit `int' casts for some ptrdiff_t expressions, where an `int' seems to be big enough 2011-07-09 Robert Larice * src/ngsconvert.c , * src/misc/misc_time.c : some explicit `int' casts 2011-07-09 Robert Larice * src/spicelib/devices/ltra/ltraacld.c , * src/frontend/trannoise/1-f-code.c : some long versus int type fixes 2011-07-09 Robert Larice * src/frontend/com_fft.c : possibly inexact long -> double cast 2011-07-09 Robert Larice * src/frontend/inpcom.c , * src/frontend/numparam/spicenum.c , * src/frontend/numparam/xpressn.c' : remove unused global artifact `dynLlen' 2011-07-09 Robert Larice * src/frontend/com_sysinfo.c , * src/winmain.c : cleanup integer type conversions 2011-07-09 Robert Larice * src/ngsconvert.c , * src/frontend/inp.c , * src/frontend/nutinp.c , * src/frontend/outitf.c , * src/frontend/help/readhelp.c : cleanup fseek() usage 2011-07-08 Holger Vogt * display.c: replace error message by appropriate warning, if compiled as console application under MS Windows 2011-07-04 Holger Vogt * input.c: add ssize_t as SSIZE_T for MS Visual Studio 2011-07-03 Holger Vogt * main.c: remove reference to 'oflag' * ngspice.h: NaN definition for MS VS 2011-07-03 Robert Larice * man/man1/ngnutmeg.1 , * man/man1/ngspice.1 : spelling fixes from debian `ngspice_23-1.debian.tar.gz', thank you ! 2011-07-03 Robert Larice * configure.ac : enable -Wconversion remove -Wimplicit-function-declaration since its implicit in -Wall Note: -Wuninitialized is implicit in -Wall but may not be effective for -O0 2011-07-03 Robert Larice * src/Makefile.am , * src/makeidx.c : upgrade ngmakeidx to support build in a sparate directory 2011-07-02 Robert Larice * src/main.c : main.c, a series of cleanups concerning SETJMP processing two issues surfaced in the original code: - nutmeg called with no file, propably should default to rawspice.raw still so, but now plain visable. shall we fix ? - there was a possiblility of endless recursion when a failure happened during init processing 2011-07-02 Robert Larice * src/main.c : main.c, a series of cleanups 2011-07-02 Dietmar Warning * /devices/bsim4v4, /devices/bsim4v5, /devices/bsim4v6: bsim4vXnoi.c correct the multiplier entry for channel thermal noise 2011-07-02 Robert Larice * src/main.c : remove redundant variable `has_smk' 2011-07-02 Robert Larice * src/main.c : print_news() 2011-07-01 Robert Larice * src/main.c , * src/nghelp.c , * src/winmain.c : winmain.c, remove redundant global variable `oflag' 2011-07-01 Robert Larice * src/xspice/cmpp/mod_lex.l : minor bug fix, use EOF 2011-07-01 Robert Larice * src/frontend/help/textdisp.c : textdisp.c, minor rewrite to swallow type conversion warnings 2011-06-30 Robert Larice * src/frontend/com_measure2.c : surpress warnings, disable currently unused functions 2011-06-30 Robert Larice * src/frontend/plotting/x11.c : remove compiler warnings by explicit casting double -> int etc. extend Holger's commit from 2011-06-11 to x11.c FIXME, consider rounding towards nearest instead of towards zero 2011-06-30 Robert Larice * src/spicelib/devices/hisim2/hsm2eval.c , * src/spicelib/devices/hisimhv/hsmhveval.c : hsm2eval.c, hsmhveval.c, swallow type conversion warnings 2011-06-30 Dietmar Warning * src/spicelib/devices/hisim2/hsm2eval.c: use macros for CeilingPow() and smoothZero() instead of static functions 2011-06-30 Robert Larice * src/ciderlib/oned/oneadmit.c , * src/ciderlib/twod/twoadmit.c : oneadmit.c twoadmit.c, uninitialized variable warning 2011-06-30 Robert Larice * src/ciderlib/support/suprmitf.c : suprmitf.c, uninitialized variable warning 2011-06-30 Robert Larice * src/frontend/com_measure2.c : com_measure2.c, uninitialized variable warning 2011-06-30 Robert Larice * src/spicelib/devices/bsim4/b4noi.c , * src/spicelib/devices/hisim2/hsm2noi.c , * src/spicelib/devices/hisimhv/hsmhvnoi.c : use TMALLOC, funcall, and NULL casts 2011-06-30 Robert Larice * src/xspice/cm/cm.c : cm.c, swallow type conversion warnings 2011-06-30 Robert Larice * src/spicelib/devices/bjt/bjtdefs.h , * src/spicelib/devices/dio/diodefs.h : BJTtlev, BJTtlevc, DIOtlev, DIOtlevc, swallow type conversion warnings 2011-06-30 Robert Larice * src/spicelib/devices/cpl/cplmpar.c , * src/spicelib/devices/isrc/isrcpar.c , * src/spicelib/devices/vsrc/vsrcpar.c : copy_coeffs(), swallow type conversion warnings 2011-06-26 Robert Larice * src/include/hash.h , * src/misc/dstring.c , * src/misc/hash.c : swallow type conversion warnings FIXME, get rid of this homegrown printf implementation (dstring.c) 2011-06-26 Dietmar Warning * devices/bsim4/b4temp.c: zero init with TMALLOC instead of malloc a missing pParam->BSIM4tvoffcv = 0; is the actual culprit. * devices/bsim4/b4noi.c: correct init the correlated noise slot in noiseDens and lnNdens vector, bug should be reported to bsim4 developer team. 2011-06-25 Holger Vogt * ivars.c, ivars.h, inpcom.c, inp.c, util.c, util.h: rename internal fcn dirname() to ngdirname() because it is different from LINUX dirnam(). * analog/file_source/cfunc.mod: remove implicit char to char* conversion 2011-06-25 Robert Larice * src/ngsconvert.c : ngsconvert.c, swallow type conversion warnings this case (tp == VF_REAL) && iscomplex(v) was actually buggy, but couldn't ever happen 2011-06-25 Robert Larice * src/xspice/ipc/ipc.c , * src/xspice/ipc/ipcsockets.c : ipc.c and ipcsockets.c, swallow type conversion warnings 2011-06-25 Robert Larice * src/frontend/plotting/graf.c : graf.c, swallow type conversion warnings 2011-06-25 Holger Vogt * main.c, defines.h: improved shutdown message for Windows GUI * cpitf.c, ngspice.h, ivars.c, ivars.h, analog/file_source/cfunc.mod: Add reading an environmental variable NGSPICE_INPUT to hold a path where input files are searched for (in addition to existing search paths), e.g. *.cir in -b and interactive mode, include and library files, filesource input file. 2011-06-24 Robert Larice * src/main.c , * src/frontend/com_ahelp.c , * src/frontend/inpcom.c , * src/frontend/numparam/mystring.c , * src/frontend/numparam/xpressn.c , * src/frontend/trannoise/wallace.c , * src/spicelib/parser/inp2r.c , * src/xspice/icm/analog/file_source/cfunc.mod : swallow type conversion warnings 2011-06-24 Robert Larice * src/ciderlib/oned/oneprint.c , * src/ciderlib/twod/twoprint.c : tiny rewrite, swallow type conversion warnings 2011-06-24 Robert Larice * src/frontend/com_sysinfo.c : tiny rewrite, swallow type conversion warnings 2011-06-23 Robert Larice * src/xspice/mif/mifgetvalue.c : tiny rewrite, round to nearest integer and reset errno for strtol() 2011-06-23 Holger Vogt * src/xspice/icm/analog/modpath.lst , * src/xspice/icm/analog/file_source/cfunc.mod , * src/xspice/icm/analog/file_source/ifspec.ifs : code model with input from file added (T. Sailer) * examples/xspice/fstest.sp , * examples/xspice/sine.m : test of 'filesource' * inpcom.c: bug no. 3317928, patched by Robert 2011-06-23 Robert Larice * src/frontend/options.c , * src/frontend/spiceif.c , * src/frontend/variable.c : round to nearest integer, `rawfileprec' `numdgt' `history' if_option() doset() 2011-06-23 Robert Larice * src/frontend/evaluate.c : `[]' indexing operator, round index to nearest integer 2011-06-23 Robert Larice * src/xspice/icm/spice2poly/icm_spice2poly/cfunc.mod : malloc return value cast 2011-06-23 Robert Larice * src/ciderlib/oned/onemesh.c , * src/spicelib/devices/nbjt/nbjttemp.c : tiny rewrite, (integer + integer)/2 2011-06-23 Robert Larice * src/frontend/evaluate.c , * src/misc/hash.c , * src/spicelib/devices/ltra/ltraset.c , * src/xspice/evt/evtdump.c : function pointer invocation, (*p)(...) ---> p(...) 2011-06-23 Robert Larice * src/main.c : tiny fix, reoccuring option `h' in the getopt_long() option string 2011-06-23 Robert Larice * src/frontend/com_sysinfo.c : tiny rewrite, typefix, don't compare EOF with a char 2011-06-23 Holger Vogt * measure.c: another try to obtain correct vector handling 2011-06-22 Robert Larice * src/ngsconvert.c , * src/frontend/outitf.c , * src/frontend/rawfile.c , * src/frontend/help/readhelp.c , * src/misc/dstring.c , * src/misc/hash.c : remove some useless casts 2011-06-22 Robert Larice * src/spicelib/devices/bsim4/b4geo.c , * src/spicelib/devices/bsim4/b4noi.c , * src/spicelib/devices/bsim4/b4temp.c : cleanup bsim4 prototypes 2011-06-22 Robert Larice * src/frontend/commands.c , * src/frontend/misccoms.h , * src/frontend/rawfile.c , * src/frontend/vectors.c , * src/frontend/plotting/pvec.c , * src/include/fteext.h : cleanup some reoccuring function prototypes 2011-06-22 Robert Larice * src/spicelib/analysis/Makefile.am , * src/spicelib/analysis/ckt.h , * src/spicelib/analysis/cktdelt.c , * visualc/vngspice.vcproj : remove ancient artifact "ckt.h" 2011-06-19 Dietmar Warning * Code merged into bsim4v4: Code diff's from formerly version 4v2 and 4v3 merged into 4v4, selectable by "version=4.x.0" model parameter (x=2,3 ... 4) * Update to version 4.7.0: new code into bsim4 folder, Version 6 is now in new folder bsim4v6, OpenMP implemented, Update of tests/bsim4 to new version * res/resnoise.c, analysis/nevalsrc.c: Name changed NevalSrc2 to NevalSrcInstanceTemp and include new bsim4 function NevalSrc2 2011-06-18 Holger Vogt * measure.c: revert a change from Feb. 19th, 2011 to reinstate from=dfall inpcom.c, defines.h: allow / and \ in file paths under MS Windows inp.c: some comment added /examples/measure/simple-meas-tran.sp: another .measure example 2011-06-11 Holger Vogt * onemesh.c misc.c com_compose.c com_fft.c evaluate.c hpgl.c linear.c misccoms.c options.c points.c rawfile.c spec.c spiceif.c variable.c complete.c clip.c graf.c plot5.c plotit.c spbuild.c dctrcurv.c distoan.c noisean.c nbjttemp.c urcsetup.c ipc.c ipcstdio.c mifgetvalue.c postsc.c grid.c hash.c cktsens.c: remove compiler warnings by explicit casting double -> int etc. ============================ ngspice-23 ================================== 2011-06-04 Holger Vogt * tests/bin/ngspice.pm: version 23 2011-06-02 Robert Larice * src/frontend/com_let.c : bug fix, avoid segfault when indexing a vector with a nonexistant variable let foo = thing[nonsuchthing] 2011-06-02 Robert Larice * src/frontend/postcoms.c : bug fix, avoid $curplot (plot_names) being assembled from negative numbers The variable `plot_num' is exclusively used to build plotnames, via sprintf(plot_name, "dc%d", plot_num) expressions Thus plot_num may never be decremented. Otherwise expressions of sort dc-2.var can't be parsed 2011-06-02 Robert Larice * src/frontend/plotting/graf.c , * src/frontend/plotting/x11.c : fix a segfault, when invoking `destroy' while running in batch mode on unix 2011-06-02 Robert Larice * src/frontend/evaluate.c : fix a segfault, incorrect invocation of free() seen with expressions like v(node)[0] 2011-06-02 Holger Vogt * tests/hisim/makefile.am: no more test1.cir in EXTRA_DIST * INSTALL, compile_min.sh: new instructions for mingw compilation 2011-06-01 Dietmar Warning * devices/bjt/bjt.c: introduce ccs as an alias for the zero bias substrate junction capacitance cjs 2011-06-01 Robert Larice * src/Makefile.am : update tclspice to support build in a sparate directory 2011-05-31 Robert Larice * tests/bin/check_cmc.sh , * tests/bin/runQaTests.pl , * tests/bin/run_cmc_check , * tests/hisim/Makefile.am , * tests/hisimhv/Makefile.am : CMC test suite, fix choice of results subdirectory 2011-05-31 Robert Larice * tests/bsim3soifd/RampVg2.out , * tests/bsim3soifd/inv2.out , * tests/bsim3soifd/t3.out , * tests/bsim3soifd/t4.out , * tests/bsim3soifd/t5.out , * tests/filters/lowpass.out , * tests/general/mosmem.out , * tests/mesa/mesa11.out , * tests/polezero/filt_bridge_t.out : massage some tests/* reference files 2011-05-31 Robert Larice * src/Makefile.am , * tests/Makefile.am , * tests/hisim/Makefile.am , * tests/hisimhv/Makefile.am : updates for `make dist' 2011-05-30 Robert Larice * tests/bin/check_cmc.sh : incorporate CMC test suite into make target 'check' 2011-05-30 Robert Larice * configure.ac , * tests/bin/modelQaTestRoutines.pm , * tests/bin/ngspice.pm , * tests/bin/runQaTests.pl , * tests/bin/run_cmc_check , * tests/hisim/Makefile.am , * tests/hisimhv/.cvsignore , * tests/hisimhv/Makefile.am : incorporate CMC test suite into make target 'check' 2011-05-29 Holger Vogt * winmain.c, winmain.h: prototypes and forwards 2011-05-29 Robert Larice * Removed tests/hisimhv/nmos/Makefile , * Removed tests/hisimhv/pmos/Makefile , * Removed tests/hisim/nmos/Makefile , * Removed tests/hisim/pmos/Makefile , * Added tests/bin/run_cmc_check , * Modified tests/hisimhv/nmos/run , * Modified tests/hisimhv/pmos/run , * Modified tests/hisim/nmos/run , * Modified tests/hisim/pmos/run : CMC test suite, cleanup use /bin/sh instead of /bin/csh replace the makefiles with a single script 2011-05-29 Holger Vogt * main.c, inpcom.c, numparam.h, spicenum.c, xpressn.c, compatmode.h, b3v1.c: compatibility issues 2011-05-28 Dietmar Warning * tests/hisim, tests/hisimhv: include the CMC test suite (Author: Colin McAndrew) provided by the model developer - Hiroshima University 2011-05-28 Holger Vogt * configure.ac, visualc/config.h, CPOYING, FAQ, INSTALL, NEWS: update to prepare release 23 2011-05-28 Robert Larice * src/ngsconvert.c : bug fix, (#3188327), segfault in ngsconvert thanks to Ed Spittles http://sourceforge.net/tracker/?func=detail&aid=3188327&group_id=38962&atid=423915 2011-05-23 Holger Vogt * configure.ac: remove reference to devices/hisim/makefile (line 1035) 2011-05-23 Holger Vogt * windisp.c: bug no. 3263437 (fix thanks to Robert) 2011-05-23 Dietmar Warning * src/spicelib/devices/hisim2/*.c, *.h: Some changes for MS visualc and suppr. warnings * src/spicelib/parser/inpdomod.c: hisim is now level=61, compatible with STARC * visualc/vngspice.vcproj: substitute hisim1 with hisim2 2011-05-22 Robert Larice * configure.ac , * src/spicelib/devices/Makefile.am : hisim2, add hisim2 to configure.ac etc 2011-05-22 Robert Larice * src/spicelib/devices/hisim2/hsm2itf.h : hisim2, fix hsm2itf.h 2011-05-22 Robert Larice * src/spicelib/devices/hisim2/Makefile.am , * src/spicelib/devices/hisim2/hsm2init.c , * src/spicelib/devices/hisim2/hsm2init.h : hisim2, add ngspice specific hsm2init.[ch] 2011-05-22 Robert Larice * src/spicelib/devices/hisim2/hsm2set.c : hisim2, add HSM2unsetup() 2011-05-22 Robert Larice * src/spicelib/devices/hisim2/hsm2def.h : hisim2, add ngspice specific GENinstance struct slot 'HSM2owner' aka `GENowner' 2011-05-22 Robert Larice * src/spicelib/devices/hisim2/hsm2eval.c : hisim2, drop unused static functions (swallow warnings) 2011-05-22 Robert Larice * src/spicelib/devices/hisim2/hsm2eval.c , * src/spicelib/devices/hisim2/hsm2temp.c : hisim2, drop unused vars (swallow warnings) 2011-05-22 Robert Larice * src/spicelib/devices/hisim2/hsm2noi.c : hisim2, fix NevalSrc(), Nintegrate() redeclaration 2011-05-22 Robert Larice * src/spicelib/devices/hisim2/hsm2noi.c : hisim2, drop (GENERIC **) NULL pointer casts 2011-05-22 Robert Larice * src/spicelib/devices/hisim2/hsm2cvtest.c , * src/spicelib/devices/hisim2/hsm2ld.c : hisim2, rename FABS() -> fabs() 2011-05-22 Robert Larice * src/spicelib/devices/hisim2/* : hisim2, convert K&R function definitions to ansi style 2011-05-22 Robert Larice * src/spicelib/devices/hisim2/hsm2noi.c : hisim2, remove #include "fteconst.h" 2011-05-22 Robert Larice * src/spicelib/devices/hisim2/* : hisim2, use NG_IGNORE() (swallow warnings) 2011-05-22 Robert Larice * src/spicelib/devices/hisim2/* : hisim2, remove #include "util.h" 2011-05-22 Robert Larice * src/spicelib/devices/hisim2/* : hisim2, #include "spice.h" --> "ngspice.h" 2011-05-22 Robert Larice * src/spicelib/devices/hisim2/hsm2eval.c : hisim2, remove unused labels (swallow warnings) 2011-05-22 Robert Larice * src/spicelib/devices/hisim2/Makefile.am , * src/spicelib/devices/hisim2/.cvsignore : hisim2, new files Makefile.am and .cvsignore 2011-05-22 Robert Larice * src/spicelib/devices/hisim2/* : hisim2, populate this new directory with files from HiSIM_2.5.1_Release_20110407.zip unchanged, from HiSIM_2.5.1_Release_20110407/HiSIM_2.5.1_C-Code/hisim2/ 2011-05-21 Robert Larice * src/spicelib/devices/hisimhv/hsmhvset.c : extend HSMHVunsetup() to process some more CKTmkVolt() generated nodes FIXME, there are still some more to fix 2011-05-21 Holger Vogt * windisp.c, winprint.c, windisp.h, winprint.h, display.c xdisplay.c, winmain.c: reduce compiler warnings 2011-05-20 Robert Larice * src/spicelib/devices/adms/admst/ngspiceMakefile.am.xml: revert ngspiceMakfile.am.xml 2011-05-19 Dietmar Warning * spicelib/devices/bsim3v32/b3v32temp.c: move the mulu0 entry outside the size dependent section, like delvto 2011-05-19 Robert Larice * autogen.sh : update --adms3 2011-05-19 Robert Larice * autogen.sh : add --adms3 to autogen.sh 2011-05-19 Robert Larice * src/spicelib/parser/inpptree-parser.c, * src/spicelib/parser/inpptree-parser.h, * src/frontend/parse-bison.c, * src/frontend/parse-bison.h: undo the accidental commit of intemediate files 2011-05-19 Laurent Lemaitre remove usage of ngspiceVersion.xml in autogen.sh 2011-05-19 Laurent Lemaitre all xml files are concatenated into one single file ngspice.xml - except ngspiceMakefile.am.xml 2011-05-15 Holger Vogt * inp2z.c: remove checking for thismodel->INPmodType because this might lead to segfault if the user supplies a wrong ZXXXXX input 2011-05-08 Robert Larice * src/frontend/shyu.c , * src/frontend/spiceif.c , * src/spicelib/analysis/cktdest.c , * src/spicelib/analysis/cktdltm.c , * src/spicelib/analysis/cktdltn.c , * src/spicelib/analysis/cktdojob.c , * src/spicelib/analysis/cktfnda.c , * src/spicelib/analysis/cktgrnd.c , * src/spicelib/analysis/cktneweq.c , * src/spicelib/analysis/cktnewn.c , * src/spicelib/analysis/cktparam.c , * src/spicelib/analysis/ckttroub.c , * src/spicelib/devices/cktask.c , * src/spicelib/devices/cktbindnode.c , * src/spicelib/devices/cktcrte.c , * src/spicelib/devices/cktfinddev.c , * src/xspice/ipc/ipctiein.c : mop up some fixme comments 2011-05-08 Robert Larice * src/frontend/help/x11disp.c : cleanup Xt usage 2011-05-08 Robert Larice * xgraph/alloc.c : rename macros public and private --> PUBLIC and PRIVATE 2011-05-08 Robert Larice * src/xspice/cmpp/mod_yacc.y , * src/xspice/icm/analog/multi_input_pwl/cfunc.mod : rename variable private --> mif_private 2011-05-07 Dietmar Warning * src/Makefile.am: change lib order for linking with gcc4 to prevent unresolved symbols * xspice/cmpp/Makefile.am: there are flex'es, which not accept "-o outfile" but accept "-ooutfile" 2011-05-05 Dietmar Warning * spicelib/devices/bsim3v32/*.c, *.h: allow delvto and mulu0 as instance parameter, usefull for stress amn mismatch simulations 2011-05-04 Dietmar Warning * spicelib/parser/inpdomod.c: vbic now accept level 4 and 9 * DEVICES: update and include HiSIM HV model. 2011-05-03 Holger Vogt * x11.c, graph.h: move #define NUMCOLORS to x11.c to avoid redefinition under MS Visual Studio 2011-05-01 Robert Larice * src/frontend/outitf.c , * src/spicelib/analysis/cktpzstr.c , * src/spicelib/devices/hisim/hsm1eval1_1.c : spelling fixes from debian, thank you ! 2011-05-01 Robert Larice * src/spicelib/parser/inpdomod.c : mop up, in the shadow of the last commits 2011-05-01 Robert Larice * src/spicelib/parser/inpdomod.c : rename variable typename --> type_name 2011-05-01 Robert Larice * src/xspice/cmpp/ifs_yacc.y : rename variable class --> ctype_class 2011-05-01 Robert Larice * src/frontend/parser/complete.c , * src/include/cpextern.h : rename variable class --> kw_class 2011-05-01 Robert Larice * src/spicelib/analysis/analysis.c , * src/spicelib/analysis/analysis.h , * src/spicelib/analysis/cktdojob.c , * src/spicelib/analysis/ckttroub.c : rename struct member public --> if_analysis 2011-05-01 Robert Larice * src/frontend/help/x11disp.c : rename function delete --> delete_w 2011-05-01 Robert Larice * src/spicelib/parser/inpaname.c , * src/spicelib/parser/inpdpar.c , * src/spicelib/parser/inppname.c , * src/xspice/mif/mifgetmod.c : mop up, in the shadow of the last two commits 2011-05-01 Robert Larice * src/spicelib/parser/inpgmod.c , * src/xspice/mif/mifgetmod.c : cleanup, (modtmp) --> modtmp 2011-05-01 Robert Larice * src/spicelib/parser/inpaname.c , * src/spicelib/parser/inpdpar.c , * src/spicelib/parser/inpgmod.c , * src/spicelib/parser/inppname.c , * src/spicelib/parser/inptyplk.c , * src/xspice/mif/mifgetmod.c : cleanup, some more (*p).foo --> p->foo 2011-04-30 Robert Larice * src/spicelib/devices/cktbindnode.c , * src/spicelib/devices/hisimhv/hsmhvmask.c , * src/spicelib/devices/hisimhv/hsmhvpzld.c : c89 compatibility, move NG_IGNORE() after declarations 2011-04-30 Robert Larice * src/spicelib/devices/hisimhv/hsmhvask.c , * src/spicelib/devices/hisimhv/hsmhvld.c , * src/spicelib/devices/hisimhv/hsmhvmask.c , * src/spicelib/devices/hisimhv/hsmhvpar.c , * src/spicelib/devices/hisimhv/hsmhvpzld.c : warnings, use NG_IGNORE() 2011-04-30 Robert Larice * configure.ac : re-enable unused-parameter Warnings 2011-04-30 Robert Larice * **/* : various cleanups - usage of cp_getvar(), receives a void* in the third arg, thus remove casts FIXME, this function signature is error prone - use NG_IGNORE() - casts and prototypes 2011-04-29 Robert Larice * src/spicelib/devices/hisimhv/hsmhvnoi.c , * src/spicelib/devices/hisimhv/hsmhvset.c : minor bug fix (broken diagnostic printout) and swallow some warnings 2011-04-29 Robert Larice * src/spicelib/devices/hisimhv/hsmhvdef.h : hisimhv implementation, ngspice has one more slot (GENowner) in GENinstance 2011-04-29 Dietmar Warning * src/spicelib/devices/hisimhv/** : * **/* : add the HiSIM_HV model vers. 1.2.1 2011-04-28 Robert Larice * src/frontend/inpcom.c , bug fix, (#329233) http://sourceforge.net/tracker/?func=detail&atid=423915&aid=3292330&group_id=38962 this fix is for E1 OUT 0 vol='V(IN)>1 && V(IN)>0 ? 1 : 0' FIXME, INPevaluate() should skip a trailing `unit' string FIXME, E1 OUT 0 vol='(V(IN)>1) and (V(IN)>0) ? 1 : 0' this is simply incorrect syntax, but shoudn't segfault. inp_chk_for_multi_in_vcvs() is much to simple minded. 2011-04-28 Robert Larice * src/main.c , * src/frontend/com_measure2.c , * src/frontend/inpcom.c , * src/spicelib/analysis/noisean.c , * src/spicelib/analysis/pzan.c , * src/spicelib/analysis/tfanal.c , * src/spicelib/devices/cpl/cplsetup.c , * src/spicelib/devices/isrc/isrcacct.c , * src/spicelib/devices/vsrc/vsrcacct.c : code cleanup, some warnings, some casts, ... 2011-04-28 Robert Larice * */** : code cleanup, drop NULL pointer casts 2011-04-28 Robert Larice * src/frontend/plotting/x11.c , * src/frontend/plotting/x11.h : cleanup x11 code 2011-04-27 Dietmar Warning * /devices/bjt2: removed - all GP extensions of this model are now in the bjt model, see Changelog 2011-03-03 and 2011-03-10 2011-04-27 Robert Larice * */** : code cleanup function pointer invocation, (*p)(...) ---> p(...) structure access, (*p).foo ---> p->foo some casts, etc 2011-04-17 Dietmar Warning * /bsim3v2/b3v2set.c, /bsim3/b3set.c: allow multiple call to setup w/ correct node collapsing 2011-04-15 Robert Larice * src/spicelib/analysis/cktsens.c : fix allocation and ownership of auxiliary CKTmatrix CKTrhs etc objects FIXME: invoke release_context() when returning due to errors 2011-04-12 Dietmar Warning * devices: merged bsim3v1a code with bsim3v0 * devices: merged bsim3v1s code with bsim3v1 * update this situation to DEVICES, configure.ac, src/Makefile.am, spicelib/parser/inpdomod.c, inp2m.c, devices/dev.c 2011-04-09 Robert Larice * src/frontend/plotting/x11.c : bugfix, segfault when closing a plot window fix the fix from 2011-02-11 currentgraph is a dynamical scoped variable in response to http://sourceforge.net/tracker/?func=detail&atid=423915&aid=3263437&group_id=38962 FIXME/DONE, need to be fixed for ms-windows as well 2011-04-09 Robert Larice * src/spicelib/analysis/cktsens.c : bugfix, fix sensitvity calculation (for the dc-2+.cir testcase) 2011-04-02 Robert Larice * src/frontend/plotting/x11.c : extend the fix from 2011-02-11 for other ways of closing a plot window. in response to http://sourceforge.net/tracker/?func=detail&atid=423915&aid=3263437&group_id=38962 2011-03-24 Dietmar Warning * xspice/icm/GNUmakefile.in: sun cc needs modified dependency flags (-xMD) 2011-03-18 Dietmar Warning * frontend/typedefs.c, outitf.c: bug no. 3214252 fixed 2011-03-16 Dietmar Warning * plotit.c: fix the wrong x-axis label for temp-sweep and res-sweep by using macros SV_XXX for vector types 2011-03-13 Dietmar Warning * analysis.h, typedefs.h, misc. bXtemp.c: skip printout in bsimtemp for sens analysis * bsim2/bsim2def.h: int for XPARTS flag in ancient debug usage 2011-03-10 Dietmar Warning * src/spicelib/devices/bjt: nkf additional beta rolloff exponent parameter 2011-03-07 Holger Vogt * inpcom.c: bug no. 3201331 fixed 2011-03-04 Robert Larice * src/spicelib/devices/isrc/isrcdefs.h : bug fix, isrc polarity inversion my commit `vsrc, isrc, cleanup aiming for more similarity' from 2011-02-27 changed the polarity of the `isrc' current. the structure definition somewhere has an `overlay', how *evil* ! 2011-03-03 Dietmar Warning * diode & bjt temperature model update tlev, tlevc * cktsgen.c: segfault fix 2011-02-28 Robert Larice * src/spicelib/devices/isrc/isrcacct.c , * src/spicelib/devices/isrc/isrcload.c : merge vsrc PULSE -> isrc to fix PHASE != 0, see commit from 2010-11-21 2011-02-28 Robert Larice * src/spicelib/devices/isrc/isrc.c , * src/spicelib/devices/isrc/isrcacct.c , * src/spicelib/devices/isrc/isrcask.c , * src/spicelib/devices/isrc/isrcdefs.h , * src/spicelib/devices/isrc/isrcload.c , * src/spicelib/devices/isrc/isrcpar.c , * src/spicelib/devices/vsrc/vsrc.c , * src/spicelib/devices/vsrc/vsrcload.c : merge TRRANDOM vsrc -> isrc see commit from 11-01-16 2011-02-27 Robert Larice * src/spicelib/devices/isrc/* , * src/spicelib/devices/vsrc/* : vsrc, isrc, whitespace cleanup 2011-02-27 Robert Larice * src/spicelib/devices/isrc/* , * src/spicelib/devices/vsrc/* : vsrc, isrc, cleanup aiming for more similarity 2011-02-27 Robert Larice * src/spicelib/devices/isrc/isrc.c , * src/spicelib/devices/vsrc/vsrc.c : vsrc, isrc, parameter descriptors, synchronize to each other 2011-02-27 Robert Larice * src/spicelib/devices/isrc/isrcpar.c , * src/spicelib/devices/vsrc/vsrcpar.c : vsrc, isrc, merge checks for length of vector parameters 2011-02-27 Robert Larice * src/spicelib/devices/isrc/isrcask.c , * src/spicelib/devices/vsrc/vsrcload.c , * src/spicelib/devices/vsrc/vsrcpar.c : bug fix, three of them (vsrc, isrc) 2011-02-22 Dietmar Warning * diode & bjt temperature model update, now it is possible to select the temperature equations with tlev and tlevc in similar manner as in other well known simulators 2011-02-21 Dietmar Warning * inpcom.c: exclude appending m= to .model cards * adms/admst/ngspiceMakefile.am.xml: rm some obsolete files on maintainer-clean action 2011-02-19 Holger Vogt * ngspice.h: _snprintf for MS Visual Studio * measure.c, com_measure.c: update FIND .. WHEN measurements 2011-02-19 Robert Larice * configure.ac , * examples/transient-noise/shot_ng.cir , * src/Makefile.am , * src/frontend/trannoise/FastNorm3.c : cleanup some whitespace errors and prototypes 2011-02-19 Robert Larice * src/frontend/numparam/Makefile.am , * src/frontend/numparam/general.h , * src/frontend/numparam/mystring.c , * src/frontend/numparam/numparam.h , * src/frontend/numparam/xpressn.c , * Removed src/frontend/numparam/downgrad.txt , * Removed src/frontend/numparam/washprog.c : numparm, remove unused artifacts 2011-02-19 Robert Larice * src/frontend/numparam/mystring.c , * src/frontend/numparam/nupatest.c , * src/frontend/numparam/spicenum.c , * src/frontend/numparam/xpressn.c : numparm, un-pascal-ify, ws() wln() 2011-02-19 Robert Larice * src/frontend/numparam/xpressn.c : numparm, cleanup, (()) 2011-02-19 Robert Larice * src/frontend/numparam/xpressn.c : numparm, cleanup, {} 2011-02-19 Robert Larice * src/frontend/numparam/mystring.c , * src/frontend/numparam/xpressn.c : numparm, rewrite some conditional expressions 2011-02-19 Robert Larice * src/frontend/numparam/mystring.c : silence compiler warnings 2011-02-19 Robert Larice * src/frontend/numparam/mystring.c , * src/frontend/numparam/xpressn.c : numparm, un-pascal-ify, use '\0' 2011-02-19 Robert Larice * src/frontend/numparam/mystring.c , * src/frontend/numparam/nupatest.c : numparm, un-pascal-ify, use '\r' '\n' '\t' 2011-02-19 Robert Larice * src/frontend/numparam/general.h , * src/frontend/numparam/mystring.c : numparm, cleanup some small functions 2011-02-19 Robert Larice * src/frontend/numparam/spicenum.c , * src/frontend/numparam/xpressn.c : numparm, 17 digit placeholders --> numparm__XXXXXXXX dummy symbols 2011-02-19 Robert Larice * src/frontend/numparam/xpressn.c : numparm, upgrade message() to accept format strings 2011-02-19 Robert Larice * src/frontend/numparam/xpressn.c : numparm, shrink scope for dstrings, mostly message() related 2011-02-19 Robert Larice * src/frontend/numparam/xpressn.c : numparm, cleanup parseunit() and fetchnumber() 2011-02-15 Holger Vogt * spicelib/parser/inpfindl.c:41 with MINGW level=4.00000e000 returned 3 instead of 4 at INPevaluate() line 210 2011-02-13 Robert Larice * src/frontend/numparam/spicenum.c , * src/frontend/numparam/xpressn.c : reinstate a missing if(numerical), which got lost and fix a few comments 2011-02-13 Robert Larice part 2, the actual change 2011-02-13 Robert Larice part 1, whitespace and indentation, nothing else 2011-02-13 Robert Larice undo the last commit, with the sole purpose to seperate it into two commits 2011-02-13 Holger Vogt * spicelib/analysis/acan.c: explicit type cast * spicenum.c, mystring.c, xpressn.c: start cleanup, fix bug no. 3175568 2011-02-12 Holger Vogt * src/makefile.am: enable tclspice again * com_measure2.c fix bug no. 3165634 2011-02-11 Robert Larice * src/spicelib/parser/inp2r.c : bug fix, when rewriting a resistors tc = number number ==> tc=number tc2=number 2011-02-11 Robert Larice * src/xspice/cmpp/mod_lex.l , * src/xspice/cmpp/mod_yacc.y , * src/xspice/icm/spice2poly/icm_spice2poly/cfunc.mod , * src/xspice/icm/spice2poly/icm_spice2poly/ifspec.ifs : bug fix, when `show' a xspice spice2poly device (acgains) 2011-02-11 Robert Larice * src/frontend/plotting/x11.c : bug fix a segfault when closing a second x11-window, then resizing the first copied a workaround from 2009-01-10 Holger Vogt in windisp.c FIXME, x11 structures and currentgraph ... 2011-02-11 Robert Larice * src/frontend/parse-bison.c : and update the parser output 2011-02-11 Robert Larice * src/frontend/parse-bison.y : silence a `bcheck' warning `read from uninitialized memory' yylval in the bison generated parser is copied, even when the value is actually unused 2011-02-11 Robert Larice * src/spicelib/devices/vsrc/vsrcask.c : add a missing `ask' function for VSRC_TRRANDOM 2011-02-11 Robert Larice * src/spicelib/devices/cpl/cplmpar.c , * src/spicelib/devices/isrc/isrcpar.c , * src/spicelib/devices/vsrc/vsrcpar.c : fix a bug when `alter' a vector parameter (VSRC PWL for example) 2011-01-25 Robert Larice * Modified src/include/cmproto.h , * Modified src/xspice/icm/dlmain.c , * Modified src/xspice/icm/digital/d_source/cfunc.mod , * Modified src/xspice/icm/digital/d_state/cfunc.mod , * Modified tests/bin/check.sh , * Added tests/bin/spinit , * Modified tests/bsim3/dc_sim/Makefile.am , * Modified tests/bsim3soi/Makefile.am , * Modified tests/bsim3soidd/Makefile.am , * Modified tests/bsim3soifd/Makefile.am , * Modified tests/bsim3soipd/Makefile.am , * Modified tests/bsim4/Makefile.am , * Modified tests/xspice/digital/Makefile.am , * Modified tests/xspice/digital/spinit.in : fix `make check' for build in a separate directory 2011-01-25 Robert Larice * Modified configure.ac , * Modified src/xspice/Makefile.am , * Added src/xspice/icm/GNUmakefile.in , * Removed src/xspice/icm/Makefile , * Modified src/xspice/icm/makedefs.in , * Removed src/xspice/icm/modpath.lst , * Removed src/xspice/icm/objects.inc : rework the xspice/icm Makefile for build in a separate directory the new makefile requires GNU make 2011-01-25 Robert Larice * src/xspice/cmpp/cmpp.h , * src/xspice/cmpp/pp_lst.c , * src/xspice/cmpp/pp_mod.c , * src/xspice/cmpp/read_ifs.c , * src/xspice/cmpp/util.c , * src/xspice/cmpp/writ_ifs.c : prepare the xspice cmpp processor for build in a separate directory Two environment variables are introduced to augment the the hardwired filenames with directory names 2011-01-25 Robert Larice * src/frontend/Makefile.am , * src/spicelib/devices/adms/admst/ngspiceMakefile.am.xml * src/spicelib/parser/Makefile.am small fixes to make some `Makefiles' ready for build in a separate directory 11-01-18 Holger Vogt * plotcurv.c: line 139 test for existance of v_plot before comparing pl_scale 11-01-16 Holger Vogt * com_cdump.c: remove compiler warnings * 1-f-code.c, 1-f-code.h, vsrc.c, vsrcacct.c, vsrcdefs.h, vsrcload.c, vsrcpar.c, examples/opwien.sp: Add new random voltage generator option trrandom to vsrc voltage source 2011-01-15 Robert Larice * src/frontend/trannoise/Makefile.am , * src/include/Makefile.am , * src/maths/fft/Makefile.am , * tests/Makefile.am , * src/maths/fft/Read\ Me , * src/maths/fft/Read-Me : updates for the make infrastructure (trannoise and tests/xspice) renamed "Read Me" to avoid whitespace in the filename 11-01-13 Dietmar Warning * devices/adms/admst/*.xml: set version parameter to 2.3.0 to come in line with admsXml 11-01-12 Dietmar Warning * devices/adms/admst/ngspiceMODULEdefs.h.xml: allow gmin stepping by using ckt->CKTdiagGmin 11-01-11 Holger Vogt * postcoms.c: dynamic memory allocation for buf and buf2 in fcn com_print() 11-01-08 Holger Vogt * com_cdump.c: add #include "ngspice.h" to allow use of command 'cdump' also under Windows 11-01-06 Holger Vogt * inpcom.c: allow models like 2N2904 or 2SK136 also in subcircuits * examples/Monte_Carlo/mc_ring.sp: reduce memory consumption by adding 'save' command, add jitter measurement 11-01-03 Holger Vogt * spiceif.c: add error checking for 'altermod' 11-01-02 Dietmar Warning * math/fft/fftlib.c: inline functions to static * ngspice.h: __inline for _MSC_VER 11-01-02 Holger Vogt * spiceif.c: recall yesterday's change due to errors, if reset was given before install again, but only for CKTtime > 0 11-01-01 Holger Vogt * breakp.c: update to multiple conditionals with '=' in stop command dctran.c: set breakpoint upon startup from database dbs ('stop when time = xxx' command) spiceif.c: additional call to CKTtemp(ckt) after 'altermod' command to set device instance pParam for immediate use 10-12-31 Holger Vogt * breakp.c: allow multiple conditionals with '=' in stop command 10-12-30 Holger Vogt * aspice.c, inpcom.c, numparam/general.h, 1-f-code.h, equality.c randnumb.c, spdefs.h, cktsens.c: remove compiler warnings breakp.c: allow 'time = nnn' in stop command 2010-12-28 Holger Vogt * xpressn.c, cmath2.c, cmath2.h, randnumb.c, parse.c, examples/Monte_Carlo/MonteCarlo.sp: add poisson and exponential distribution to nutmeg parser, add gauss, aunif, unif, limit to numparam parser * spiceif.c: remove bug in experimental_code * control.c: no i/o redirection in define command (so > or < may be used safely) 2010-12-27 Robert Larice * tests/bsim3soi/inv_dc.cir , * tests/bsim3soi/inv_tr.cir , * tests/bsim3soi/test1.cir , * tests/bsim3soi/test2.cir , * tests/bsim3soi/test3.cir , * tests/bsim3soi/test4.cir , * tests/bsim3soi/test5.cir , * tests/bsim3soi/test6.cir , * tests/bsim3soi/test7.cir , * tests/bsim3soi/test8.cir : include ./thing ---> include thing ngspice currently has a broken include path semantic. every pathname with a '/' in it is considered to be `absolute' and the include path will not be applied 2010-12-27 Robert Larice * src/spicelib/devices/isrc/isrcask.c : bug fix, missing isrc trnoise ask function breaks tests/vbic/diffamp.cir (infinite recursion of error messages) 2010-12-25 Holger Vogt * inpcom.c: exclude control section from fcn inp_chk_for_multi_in_vcvs, add ')' as a delimiter in param replacement, fcn inp_sort_params 2010-12-19 Holger Vogt * simplify exp variate generation for RTS noise: rnorrexp.c removed, update to randnumb.c, main.c, /maths/misc/makefile.am, visualc/vngspice.vcproj 2010-12-18 Dietmar Warning * devices/bsim*/*ask.c: correct multiplier m for certain currents, conductances, charges and capacitances if they are requested by plotting and printing, e.g. @m1[gds] 2010-12-18 Holger Vogt * rnorrexp.c, randnumb.c, 1-f-code.c, main.c, fteext.h, 1-f-code.h, isrcacct.c, isrcload.c, isrcpar.c, vsrcacct.c, vsrcload.c, vsrcpar.c, maths/misc/makefile.am, visualc/vngspice.vcproj, vngspice.sln, examples/transient-noise/rts-1.cir, README: Random telegraph noise added to independent voltage and current sources 2010-12-17 Holger Vogt * isrc.c, isrcacct.c, isrcload.c, isrcpar.c, isrcdefs.h: transient noise in independent current source 2010-12-15 Dietmar Warning * devices/bsim3soi/b4soild.c: fixed a double consideration of the multiplier m for conductances gm, gds, gmbs 2010-12-13 Holger Vogt * util.c: char* identifiers to remove warnings in MS Visual Studio 2010-12-12 Robert Larice * src/frontend/miscvars.c , * src/frontend/trannoise/1-f-code.c , * src/include/1-f-code.h , * src/include/fftext.h , * src/spicelib/devices/vsrc/vsrcacct.c , * src/spicelib/devices/vsrc/vsrcdefs.h , * src/spicelib/devices/vsrc/vsrcload.c , * src/spicelib/devices/vsrc/vsrcpar.c : rewrite TRNOISE, with the intention to separate the noise sequenze computation from its use in the VSRC device. 2010-12-12 Holger Vogt * vsrcacct.c: Patch von R. Larice for safe breakpoints with TRNOISE 2010-12-11 Robert Larice * src/include/bool.h : Change bool from `unsigned char' to `int' thats what it is supposed to be in `C' (less warnings, cleaner, etc ...) The actual change was accidently injected in a commit from 2010-11-27 2010-12-11 Robert Larice * src/frontend/inpcom.c : support another non-equality '<>' token 2010-12-11 Robert Larice * src/frontend/inpcom.c : don't transform operators ('&|' -> '&&' '&' -> '&&' etc) pass them *literally* 2010-12-11 Holger Vogt * inpcom.c: && and || in B source, bug no. 3127808 * src/makefile.am: trailing white spaces removed 2010-12-04 Robert Larice * src/xspice/mif/mifdelete.c : bug fix, segmentation fault caused by `reset' when xspice used happened when MIFsetup hasn't been executed yet. http://sourceforge.net/tracker/?func=detail&aid=3126116&group_id=38962&atid=423915 2010-11-28 Holger Vogt * transient noise example added 2010-11-27 Holger Vogt * transient noise simulation added to vsrc: M configure.ac A examples/transient-noise/noi-ring51-demo.cir A examples/transient-noise/noi-sc-tr.cir A examples/transient-noise/noilib-demo.h A examples/transient-noise/shot_ng.cir M src/Makefile.am M src/main.c M src/frontend/Makefile.am M src/frontend/com_fft.c M src/frontend/com_fft.h M src/frontend/commands.c A src/frontend/trannoise/1-f-code.c A src/frontend/trannoise/1-f-code_d.c A src/frontend/trannoise/FastNorm3.c A src/frontend/trannoise/Makefile.am A src/frontend/trannoise/wallace.c A src/include/1-f-code.h A src/include/FastNorm3.h M src/include/bool.h A src/include/fftext.h M src/include/ngspice.h A src/include/wallace.h M src/maths/Makefile.am A src/maths/fft/Makefile.am A src/maths/fft/NOTE A src/maths/fft/Read Me A src/maths/fft/fftext.c A src/maths/fft/fftext.h A src/maths/fft/fftlib.c A src/maths/fft/fftlib.h A src/maths/fft/matlib.c A src/maths/fft/matlib.h M src/maths/misc/randnumb.c M src/spicelib/devices/vsrc/vsrc.c M src/spicelib/devices/vsrc/vsrcacct.c M src/spicelib/devices/vsrc/vsrcask.c M src/spicelib/devices/vsrc/vsrcdefs.h M src/spicelib/devices/vsrc/vsrcload.c M src/spicelib/devices/vsrc/vsrcpar.c M visualc/vngspice.vcproj 2010-11-25 Robert Larice * src/frontend/inpcom.c : tiny fix, a boundary check 2010-11-25 Robert Larice * src/xspice/icm/dlmain.c , * src/xspice/icm/makedefs.in : drop -D CM_WINDOWS and -D CM_LINUX 2010-11-23 Robert Larice * src/xspice/icm/xtraevt/int/udnfunc.c , * src/xspice/icm/xtraevt/real/udnfunc.c : use NG_IGNORE() ... 2010-11-23 Robert Larice * src/ciderlib/oned/oneprint.c , * src/ciderlib/support/globals.c , * src/ciderlib/support/mater.c , * src/ciderlib/twod/twoprint.c : attract gcc's attention to some printf format strings (for type checking) 2010-11-23 Robert Larice * src/frontend/inpcom.c , * src/frontend/plotting/grid.c : swallow type conversion warnings 2010-11-23 Robert Larice * src/xspice/ipc/ipcaegis.c : fix an ancient bug (typo `!=' versus `=!') 2010-11-23 Robert Larice * src/spicelib/analysis/cktsopt.c , * src/spicelib/analysis/dctrcurv.c , * src/spicelib/devices/bjt/bjtparam.c , * src/spicelib/devices/bjt2/bjt2param.c , * src/spicelib/devices/bsim2/b2mpar.c , * src/spicelib/devices/dio/dioparam.c , * src/spicelib/devices/jfet/jfetpar.c , * src/spicelib/devices/jfet2/jfet2par.c , * src/spicelib/devices/mos1/mos1par.c , * src/spicelib/devices/mos2/mos2par.c , * src/spicelib/devices/mos3/mos3par.c , * src/spicelib/devices/mos6/mos6par.c , * src/spicelib/devices/mos9/mos9par.c , * src/spicelib/devices/soi3/soi3par.c , * src/spicelib/devices/vbic/vbicparam.c : swallow type conversion warnings (assignment of int to unsigned:1 flags) actually this fix changes the semantic from true if and only if given number is odd to true if and only if given number != 0 2010-11-22 Robert Larice * src/frontend/parse-bison.c , * src/spicelib/parser/inpptree-parser.c : touch (timestamp) bison output files to make sure bison won't be needed on a fresh CVS checkout 2010-11-22 Robert Larice * src/xspice/icm/digital/d_source/cfunc.mod : d_source, bug fix The recently added d_source test-case did reveal a bug in the implementation of d_source. The test-case fails in the non-debug version of ngspice. In src/xspice/icm/digital/d_source/cfunc.mod the following floating point identity comparison won't match. >> if ( TIME == test_double ) { /* Breakpoint reached */ This is, because test_double, though declared as double, will be calculated in extended precision (80bit) This phenomenon is well known, see for example http://gcc.gnu.org/bugzilla/show_bug.cgi?id=323 This `bug workaround' fixes the problem by declaring the `test_double' to be a `volatile' double, which enforces truncation of the 80bit value, when it is used in the comparison. This fix will cause the test-case to pass. Yet unfortunately DCtran() doesn't seem to process time-Breakpoints with full 64bit precision (search for AlmostEqualUlps()) which makes this whole business a very doubtful thing, doomed to randomly fail <<<<----- !!!!!!! 2010-11-21 Robert Larice * src/xspice/icm/digital/d_ram/cfunc.mod , * src/xspice/icm/digital/d_source/cfunc.mod , * src/xspice/icm/digital/d_state/cfunc.mod : d_source d_state d_ram, rewrite bit operations 2010-11-21 Robert Larice * src/xspice/icm/digital/d_ram/cfunc.mod , * src/xspice/icm/digital/d_source/cfunc.mod , * src/xspice/icm/digital/d_state/cfunc.mod : d_source d_state d_ram, rewrite index operations 2010-11-21 Robert Larice * src/xspice/icm/digital/d_source/cfunc.mod , * src/xspice/icm/digital/d_state/cfunc.mod : d_source d_state, change float --> double 2010-11-21 Robert Larice * configure.ac , * tests/Makefile.am , * tests/xspice/.cvsignore , * tests/xspice/Makefile.am , * tests/xspice/digital/.cvsignore , * tests/xspice/digital/Makefile.am , * tests/xspice/digital/d_ram-stimulus.txt , * tests/xspice/digital/d_ram.cir , * tests/xspice/digital/d_ram.out , * tests/xspice/digital/d_source-stimulus.txt , * tests/xspice/digital/d_source.cir , * tests/xspice/digital/d_source.out , * tests/xspice/digital/d_state-stimulus.txt , * tests/xspice/digital/d_state-updn.txt , * tests/xspice/digital/d_state.cir , * tests/xspice/digital/d_state.out , * tests/xspice/digital/spinit.in : d_source d_state d_ram, test cases for those xspice codemodels 2010-11-21 Holger Vogt * vsracct.c, vsrcload.c: PULSE: next trial of correct timing in case of phase != 0 2010-11-20 Holger Vogt * vsracct.c: correct timing in case of phase != 0 2010-11-19 Robert Larice * */** : Nr 5/5 (x = ...) == NULL , swallow warnings 2010-11-19 Robert Larice * */** : Nr 4/5 (x = ...) != NULL , swallow warnings 2010-11-19 Robert Larice * */** : Nr 3/5 (x = ...) != 0 , swallow warnings 2010-11-19 Robert Larice * src/ngmultidec.c , * src/frontend/inpcom.c , * src/frontend/quote.c , * src/misc/string.c : Nr 2/5 (x = ...) != '\0' , swallow warnings 2010-11-19 Robert Larice * src/frontend/plotting/clip.c : Nr 1/5 (x = ...) == 0 , swallow warnings 2010-11-16 Robert Larice * src/**/* : rename `IGNORE()' --> `NG_IGNORE()' due to name collision on windows. 2010-11-16 Holger Vogt * linear.c: prevent loop in case of vector not found 2010-11-16 Robert Larice * src/Makefile.am : fix another missing dependencies problem handcraftet compilation rules caused this problem with main.c/spice.o a `make distclean' might be appropriate after this CVS checkout 2010-11-16 Robert Larice * configure.ac , * src/Makefile.am , * src/spicelib/devices/Makefile.am : fix a missing dependencies problem use AM_CONDITIONAL to configure program_LDADD variables 2010-11-16 Robert Larice * src/tclspice.c , * src/include/tclspice.h : local prototypes for "tclspice.c" 2010-11-16 Robert Larice * src/frontend/parse-bison.c , * src/spicelib/parser/inpptree-parser.c : regenerate bison output files 2010-11-16 Robert Larice * src/frontend/parse-bison.y , * src/spicelib/parser/inpptree-parser.y , * src/xspice/xspice.c , * src/xspice/cm/cmexport.c : convert macro `U()' to `IGNORE()' 2010-11-16 Robert Larice * src/**/* : pour `IGNORE()' all over the source 2010-11-16 Robert Larice * src/include/ngspice.h : introduce macro `IGNORE(x)', which shall used to mark unused parameters for better visibility in the source code and to swallow compiler warnings 2010-11-14 Holger Vogt * inpcom.c: bug no. 3072940 http://sourceforge.net/tracker/?func=detail&aid=3072940&group_id=38962&atid=423915 2010-11-13 Dietmar Warning * analysis/dctran.c, devices/*/*load.c: hide obsolete labels and local variables for configuring --enable-nobypass and --enable-predictor 2010-11-06 Robert Larice * src/frontend/inpcom.c : Thank you Éric Larouche, for the report and fix of a bug concerning the number of terminals of the current-controlled switch device (`w' device) (committed at 2007-10-08) 2010-11-06 Robert Larice * src/frontend/numparam/general.h , * src/frontend/numparam/mystring.c , * src/frontend/numparam/numparam.h : ci_prefix() returns a `bool', and change struct element `ivl' type to `int' 2010-11-06 Robert Larice * src/frontend/numparam/general.h , * src/frontend/numparam/mystring.c : remove some unused functions from the numparam world 2010-11-06 Robert Larice * src/frontend/postcoms.c , * src/frontend/plotting/agraf.c , * src/frontend/plotting/graf.c , * src/frontend/plotting/grid.c , * src/misc/dstring.c , * src/spicelib/parser/inp2r.c , * src/spicelib/parser/inpgmod.c : add `int' casts to some strlen() expressions, and center labels on a xlog scale 2010-11-06 Robert Larice * src/frontend/outitf.c , * src/frontend/plotting/grid.c , * src/misc/string.c , * src/spicelib/devices/cktcrte.c : add some `int' and `size_t' casts 2010-11-06 Robert Larice * src/frontend/measure.c , * src/frontend/outitf.c , * src/frontend/quote.c , * src/frontend/help/readhelp.c , * src/misc/util.c , * src/misc/wlist.c , * src/spicelib/devices/nbjt/nbjtset.c , * src/spicelib/devices/nbjt2/nbt2set.c , * src/spicelib/devices/numd/numdset.c , * src/spicelib/devices/numd2/nud2set.c , * src/spicelib/devices/numos/nummset.c , * src/xspice/cmpp/ifs_yacc.y , * src/xspice/enh/enhtrans.c , * src/xspice/evt/evtload.c , * src/xspice/icm/digital/d_source/cfunc.mod , * src/xspice/icm/digital/d_state/cfunc.mod : change the type of a bunch of variables from `int' to `size_t' 2010-11-06 Robert Larice * src/frontend/plotting/plotit.c : tiny rewrite, avoid type conversion warnings 2010-11-06 Dietmar Warning * analysis/dctran.c: use ceil function for correct round up 2010-11-06 Robert Larice * src/spicelib/devices/ndev/ndevdump.c : drop some unused static variables 2010-11-06 Robert Larice * src/frontend/inpcom.c : tiny rewrite, make use of copy_substring() 2010-11-06 Robert Larice * src/frontend/diff.c : tiny rewrite, make use of cieq() 2010-11-06 Robert Larice * src/frontend/parse.c , * src/frontend/typesdef.c , * src/frontend/vectors.c , * src/frontend/numparam/spicenum.c , * src/spicelib/parser/inpptree.c , * src/xspice/evt/evtplot.c , * src/xspice/ipc/ipc.c : tiny rewrite, make use of strtolower() and strtoupper() 2010-11-06 Robert Larice * src/frontend/parser/input.c : tiny rewrite, type fixes 2010-11-06 Robert Larice * src/frontend/inpcom.c : drop a redundant check 2010-11-06 Robert Larice * src/spicelib/parser/inp2dot.c , * src/spicelib/parser/inppas3.c : tiny rewrite, don't invoke strlen() to check for strlen() == 1 2010-11-06 Robert Larice * src/xspice/idn/idndig.c : change a (int) cast application, to avoid type conversion warnings 2010-11-06 Robert Larice * src/frontend/help/readhelp.c : tiny rewrite, to avoid type conversion warnings 2010-11-06 Robert Larice * src/frontend/parser/lexical.c : minor rewrite, a local variable type change 2010-11-06 Robert Larice * src/frontend/evaluate.c : tiny rewrite to avoid "variable ... might be clobbered by 'longjmp'" warnings 2010-11-06 Robert Larice * src/frontend/plotting/agraf.c , * src/frontend/plotting/graf.c , * src/frontend/plotting/grid.c , * src/misc/dstring.c , * src/spicelib/parser/inp2r.c , * src/spicelib/parser/inpgmod.c : (int) cast the return value of some strlen() invocations 2010-11-06 Robert Larice * src/frontend/subckt.c , * src/spicelib/parser/inppas2.c : minor rewrite, avoid type conversion warnings 2010-11-06 Robert Larice * src/spicelib/devices/bsim1/b1.c , * src/spicelib/devices/bsim1/b1dset.c , * src/spicelib/devices/bsim1/b1eval.c , * src/spicelib/devices/bsim1/b1mpar.c , * src/spicelib/devices/bsim1/bsim1def.h : change the bsim1 `xpart' model parameter from IF_REAL to IF_FLAG which has been used internaly as boolean anyway. 2010-11-06 Robert Larice * src/spicelib/devices/nbjt/nbjt.c , * src/spicelib/devices/nbjt/nbjtparm.c , * src/spicelib/devices/nbjt2/nbt2.c , * src/spicelib/devices/nbjt2/nbt2parm.c , * src/spicelib/devices/numd/numd.c , * src/spicelib/devices/numd/numdparm.c , * src/spicelib/devices/numd2/nud2.c , * src/spicelib/devices/numd2/nud2parm.c , * src/spicelib/devices/numos/numm.c , * src/spicelib/devices/numos/nummparm.c , * src/spicelib/devices/urc/urc.c , * src/spicelib/devices/urc/urcparam.c : change some model parameters from IF_REAL to IF_INTEGER which have been internaly integers anyway. (model parameters `save' `print' and urc `n'==`number of lumps') 2010-11-06 Dietmar Warning * configure.ac, visualc/include/config.h, frontend/miscoms.c, mos1-9/*.c * remove two really ancient configuration options: * NOSQRT: Nobody want use log/exp instead of sqrt * CAPZEROBYPASS: Nobody want calculate 0.0 * x * analysis/dctran.c: limit the order to 1 if backward Euler is enabled 2010-11-04 Robert Larice * src/misc/string.c , * src/misc/stringutil.h : minor modification of strtolower(), and implement strtoupper() 2010-11-04 Robert Larice * src/frontend/plotting/x11.c : minor rewrite, fix a minor bug in the x11 zoom-in function the rectangle was not always drawn correct, when draging the mouse in all directions. 2010-11-04 Robert Larice * src/frontend/help/x11disp.c , * src/frontend/plotting/x11.c : add casts for x11 operations, to silence type conversion warnings 2010-11-04 Robert Larice * src/frontend/plotting/x11.c , * src/include/graph.h : move device dependent colors[] array from `graph' to the x11 specific struct 2010-11-04 Robert Larice * src/frontend/com_compose.c , * src/frontend/postcoms.c , * src/misc/util.c : minor rewrites in postcoms.c, drop an overwritten |= VF_PERMANENT assignment 2010-11-04 Robert Larice * src/main.c , * src/ngsconvert.c , * src/frontend/aspice.c , * src/frontend/inp.c , * src/frontend/nutinp.c : use `size_t' variables for fread/fwrite operations 2010-11-02 Robert Larice * src/frontend/numparam/general.h , * src/frontend/numparam/mystring.c , * src/frontend/numparam/numparam.h , * src/frontend/numparam/spicenum.c , * src/frontend/numparam/xpressn.c : use the type `bool' instead of `unsigned char' in the numparam world bool currently is `unsigned char', plan to change to `int' for better type comaptibility with `C' boolean expressions 2010-11-02 Robert Larice * src/frontend/inpcom.c , * src/frontend/parser/lexical.c , * src/frontend/quote.c , * src/frontend/subckt.c , * src/main.c , * src/spicelib/parser/inpcfix.c , * src/xspice/cmpp/pp_lst.c , * src/xspice/cmpp/util.c , * src/xspice/icm/digital/d_source/cfunc.mod , * src/xspice/icm/digital/d_state/cfunc.mod , * src/xspice/ipc/ipctiein.c : casts, to make int <-> char conversions explicit 2010-11-02 Robert Larice * src/frontend/display.c , * src/frontend/numparam/mystring.c : add some more `int' versus `size_t' casts 2010-11-02 Robert Larice * src/frontend/outitf.c , * src/spicelib/parser/inp2r.c : minor beautification 2010-11-02 Robert Larice * src/ciderlib/input/cards.c , * src/frontend/cpitf.c , * src/frontend/dotcards.c , * src/frontend/plotting/grid.c , * src/ngspice.c , * src/spicelib/analysis/acsetp.c , * src/spicelib/analysis/analysis.c , * src/spicelib/analysis/cktsopt.c , * src/spicelib/analysis/dctsetp.c , * src/spicelib/analysis/dsetparm.c , * src/spicelib/analysis/nsetparm.c , * src/spicelib/analysis/pzsetp.c , * src/spicelib/analysis/senssetp.c , * src/spicelib/analysis/tfsetp.c , * src/spicelib/analysis/transetp.c , * src/spicelib/devices/dev.c , * src/spicelib/parser/inpptree.c , * src/unsupported/sen2setp.c : use `NUMELEMS' and add some `(int)' casts 2010-11-02 Robert Larice * src/xspice/icm/dlmain.c : local prototypes in `dlmain.c' 2010-11-02 Robert Larice * src/frontend/arg.c , * src/misc/misc_time.c , * src/spicelib/parser/inpmktmp.c : convert some variables, from `int' to `size_t' 2010-11-02 Robert Larice * src/frontend/com_history.c , * src/frontend/com_measure2.c , * src/frontend/fourier.c , * src/frontend/numparam/xpressn.c , * src/frontend/parser/backq.c , * src/frontend/parser/complete.c , * src/frontend/plotting/x11.c , * src/frontend/subckt.c , * src/frontend/variable.c , * src/xspice/cmpp/mod_yacc.y , * src/xspice/cmpp/pp_lst.c , * src/xspice/cmpp/pp_mod.c , * src/xspice/cmpp/writ_ifs.c , * src/xspice/evt/evtdump.c , * src/xspice/evt/evtplot.c , * src/xspice/ipc/ipc.c , * src/xspice/ipc/ipctiein.c : (int) casts for some `strlen()' expressions 2010-11-02 Robert Larice * src/xspice/icm/digital/adc_bridge/cfunc.mod , * src/xspice/icm/digital/d_ram/cfunc.mod , * src/xspice/icm/digital/d_source/cfunc.mod , * src/xspice/icm/digital/dac_bridge/cfunc.mod : (int) casts for cm_event_alloc and cm_analog_alloc 2010-11-02 Robert Larice * src/ciderlib/oned/oneprint.c , * src/ciderlib/support/database.c , * src/ciderlib/twod/twoprint.c , * src/frontend/com_ahelp.c , * src/frontend/com_display.c , * src/frontend/com_help.c , * src/frontend/com_let.c , * src/frontend/define.c , * src/frontend/device.c , * src/frontend/help/readhelp.c , * src/frontend/outitf.c , * src/frontend/plotting/plotcurv.c , * src/frontend/subckt.c , * src/frontend/terminal.c , * src/frontend/variable.c , * src/frontend/vectors.c , * src/maths/poly/interpolate.c , * src/maths/poly/polyfit.c , * src/spicelib/analysis/dctran.c , * src/spicelib/analysis/dctrcurv.c , * src/spicelib/devices/cpl/cplsetup.c , * src/spicelib/devices/ndev/ndevset.c , * src/spicelib/parser/inp2r.c , * src/spicelib/parser/inpgstr.c , * src/spicelib/parser/inpgtok.c , * src/spicelib/parser/inpptree.c , * src/xspice/cmpp/ifs_yacc.y , * src/xspice/cmpp/pp_lst.c , * src/xspice/cmpp/writ_ifs.c , * src/xspice/icm/analog/oneshot/cfunc.mod , * src/xspice/icm/analog/pwl/cfunc.mod , * src/xspice/icm/analog/s_xfer/cfunc.mod , * src/xspice/icm/analog/sine/cfunc.mod , * src/xspice/icm/analog/square/cfunc.mod , * src/xspice/icm/analog/triangle/cfunc.mod , * src/xspice/icm/digital/d_osc/cfunc.mod , * src/xspice/icm/digital/d_state/cfunc.mod , * src/xspice/icm/spice2poly/icm_spice2poly/cfunc.mod , * src/xspice/icm/xtradev/core/cfunc.mod , * src/xspice/ipc/ipc.c : casts, to make int <-> size_t conversions explicit 2010-11-01 Holger Vogt * compile_min.sh: exit upon make errors 2010-10-31 Robert Larice * src/include/memory.h , * src/maths/sparse/spdefs.h , * src/xspice/icm/xtraevt/int/udnfunc.c , * src/xspice/icm/xtraevt/real/udnfunc.c : cleanup TMALLOC etc macros 2010-10-31 Holger Vogt * compile_min.sh: exit upon autogen or configure error 2010-10-31 Dietmar Warning * src/spicelib/analysis/cktsetup.c, cktsopt.c: Allow maxord=1 w/o crash for experimenting with backward Euler, works so far - but other timestep control then LTE is needed in dctran.c * src/spicelib/analysis/dctran.c: only indentation for better readability 2010-10-28 Robert Larice * src/**/* : wrap tmalloc MALLOC etc, into two macros TMALLOC and TREALLOC add casts to those macros to silence type conversion warnings 2010-10-28 Robert Larice * src/frontend/commands.c , * src/frontend/control.c : bug fix, incorrect handling of `co_spiceonly' commands http://sourceforge.net/tracker/?func=detail&aid=3092998&group_id=38962&atid=423915 2010-10-27 Robert Larice * src/frontend/device.c : bug fix, const data space was used, instead of malloced area 2010-10-27 Robert Larice * src/spicelib/devices/asrc/asrcset.c , * src/xspice/mif/mifgetvalue.c : realloc does work, even with NULL argument 2010-10-27 Robert Larice * src/spicelib/devices/bsim3soi/b4soitemp.c : use tmalloc instead of malloc 2010-10-27 Robert Larice * src/spicelib/analysis/cktmcrt.c , * src/spicelib/analysis/cktnewan.c , * src/xspice/cm/cmevt.c , * src/xspice/evt/evtload.c : use tmalloc and trealloc instead of MALLOC and REALLOC 2010-10-27 Robert Larice * src/spicelib/analysis/distoan.c : bug fix ?, this fix is a mere guesswork, FIXME 2010-10-27 Robert Larice * src/spicelib/devices/ltra/ltraask.c , * src/spicelib/devices/tra/traask.c : bug fix, malloced space too small 2010-10-25 Holger Vogt * src/frontend/inpcom.c: add guards if strstr returns NULL 2010-10-24 Robert Larice * src/frontend/inpcom.c , * src/frontend/subckt.c : trealloc usage unification 2010-10-24 Robert Larice * src/spicelib/devices/ltra/ltramisc.c : MALLOC usage unification, (in comments) 2010-10-24 Robert Larice * src/frontend/com_compose.c , * src/frontend/plotting/plotcurv.c , * src/maths/poly/interpolate.c : tmalloc usage unification, parenthesize some terms 2010-10-24 Robert Larice * src/spicelib/devices/asrc/asrcset.c , * src/xspice/mif/mif_inp2.c : RALLOC usage unification, drop braces around the second argument 2010-10-24 Robert Larice * src/spicelib/devices/ndev/ndevset.c : use char* instead of void* 2010-10-24 Robert Larice * src/frontend/hpgl.c , * src/frontend/plotting/plot5.c , * src/frontend/plotting/x11.c , * src/frontend/postsc.c , * src/frontend/wdisp/windisp.c , * src/frontend/wdisp/winprint.c , * src/include/graph.h , * src/tclspice.c : struct member devdep, use void* instead of char* 2010-10-24 Robert Larice * src/frontend/help/readhelp.c , * src/ngmultidec.c , * src/tclspice.c : tmalloc usage, drop explicit (unsigned) cast later to be reinstated in a tmalloc wrapper macro 2010-10-24 Robert Larice * src/frontend/com_display.c , * src/frontend/device.c , * src/frontend/help/x11disp.c : tmalloc usage, minor usage unification 2010-10-24 Robert Larice * src/frontend/com_sysinfo.c , * src/frontend/plotting/graf.c , * src/misc/util.c , * src/spicelib/devices/cpl/cplsetup.c , * src/spicelib/devices/soi3/soi3ask.c , * src/spicelib/devices/txl/txlsetup.c , * src/tclspice.c , * src/xspice/evt/evtinit.c , * src/xspice/evt/evtload.c , * src/xspice/icm/xtraevt/int/udnfunc.c , * src/xspice/icm/xtraevt/real/udnfunc.c , * src/xspice/idn/idndig.c : cast the tmalloc, MALLOC, return value 2010-10-24 Robert Larice * src/misc/wlist.c , * src/spicelib/devices/bsim3/b3set.c , * src/spicelib/devices/bsim3soi/b4soiset.c , * src/spicelib/devices/bsim4/b4set.c : fix incorrect usage of tmalloc/sizeof, incorrect indirection level 2010-10-24 Robert Larice * src/frontend/com_ahelp.c , * src/frontend/com_display.c , * src/frontend/com_help.c , * src/frontend/help/readhelp.c , * src/frontend/variable.c , * src/frontend/vectors.c , * src/misc/wlist.c : qsort() usage, drop cast of the first argument (which is a void *) 2010-10-24 Robert Larice * src/maths/sparse/spalloc.c , * src/maths/sparse/spbuild.c , * src/maths/sparse/spdefs.h , * src/maths/sparse/spfactor.c , * src/maths/sparse/spoutput.c , * src/maths/sparse/sputils.c : rename ALLOC, REALLOC, CALLOC, FREE, in the "src/maths/sparse" domain -> SP_MALLOC, SP_REALLOC, SP_CALLOC, SP_FREE 2010-10-24 Robert Larice * src/include/complex.h : ngcomplex_t instead of complex, #2/2 rename the structure as well 2010-10-24 Robert Larice * src/frontend/com_compose.c , * src/frontend/com_fft.c , * src/frontend/com_let.c , * src/frontend/define.c , * src/frontend/diff.c , * src/frontend/evaluate.c , * src/frontend/outitf.c , * src/frontend/plotting/plotit.c , * src/frontend/postcoms.c , * src/frontend/rawfile.c , * src/frontend/spec.c , * src/frontend/vectors.c , * src/include/complex.h , * src/include/dvec.h , * src/maths/cmaths/cmath.h , * src/maths/cmaths/cmath1.c , * src/maths/cmaths/cmath2.c , * src/maths/cmaths/cmath3.c , * src/maths/cmaths/cmath4.c , * src/maths/cmaths/test_cx_j.c , * src/maths/cmaths/test_cx_mag.c , * src/maths/cmaths/test_cx_ph.c , * src/ngsconvert.c : ngcomplex_t instead of complex, #1/2 purpose: avoid name collision 2010-10-17 Holger Vogt * main.c: add mktemp.h 2010-10-16 Holger Vogt * windisp.h, windisp.c: prototypes 2010-10-16 Robert Larice * configure.ac : stronger warning levels, redeclarations, missing prototypes, k&r style ... 2010-10-16 Robert Larice * src/main.c , * src/frontend/Makefile.am , * src/frontend/breakp.c , * src/frontend/com_ahelp.c , * src/frontend/com_measure2.c , * src/frontend/com_option.c , * src/frontend/com_sysinfo.c , * src/frontend/commands.c , * src/frontend/cpitf.c , * src/frontend/device.c , * src/frontend/device.h , * src/frontend/dotcards.c , * src/frontend/inp.c , * src/frontend/measure.c , * src/frontend/misccoms.h , * src/frontend/postcoms.c , * src/frontend/postcoms.h , * src/frontend/runcoms.c , * src/frontend/plotting/x11.c , * src/include/cpextern.h , * src/include/fteext.h , * visualc/vngspice.vcproj , New include File: * src/frontend/com_commands.h : move the com_*() prototypes around. 2010-10-16 Robert Larice * src/include/devdefs.h : unconditional visibility of the cider prototypes limit*() 2010-10-16 Robert Larice * src/frontend/rawfile.c : remove unused variables 2010-10-16 Robert Larice * src/frontend/aspice.h , * src/frontend/breakp.h , * src/frontend/breakp2.h , * src/frontend/circuits.h , * src/frontend/com_alias.h , * src/frontend/com_history.h , * src/frontend/control.h , * src/frontend/cpitf.h , * src/frontend/define.h , * src/frontend/dotcards.h , * src/frontend/error.h , * src/frontend/evaluate.h , * src/frontend/gens.h , * src/frontend/inp.h , * src/frontend/inpcom.h , * src/frontend/interp.h , * src/frontend/nutinp.h , * src/frontend/nutmegif.h , * src/frontend/options.h , * src/frontend/parse.h , * src/frontend/parser/backq.h , * src/frontend/parser/complete.h , * src/frontend/parser/cshpar.h , * src/frontend/parser/glob.h , * src/frontend/parser/input.h , * src/frontend/parser/lexical.h , * src/frontend/parser/numparse.h , * src/frontend/parser/unixcom.h , * src/frontend/plotting/clip.h , * src/frontend/plotting/plotcurv.h , * src/frontend/plotting/plotting.h , * src/frontend/points.h , * src/frontend/quote.h , * src/frontend/rawfile.h , * src/frontend/resource.h , * src/frontend/runcoms.h , * src/frontend/shyu.h , * src/frontend/spiceif.h , * src/frontend/terminal.h , * src/frontend/typesdef.h , * src/frontend/variable.h , * src/frontend/vectors.h , * src/include/cpextern.h , * src/include/cpstd.h , * src/include/fteext.h , * src/include/hlpdefs.h , * src/include/opdefs.h , * src/include/tfdefs.h , * src/include/trandefs.h , * src/maths/ni/niaciter.h , * src/maths/ni/nicomcof.h , * src/maths/ni/niconv.h , * src/maths/ni/nidest.h , * src/maths/ni/niditer.h , * src/maths/ni/niinit.h , * src/maths/ni/niinteg.h , * src/maths/ni/niiter.h , * src/maths/ni/niniter.h , * src/maths/ni/nipzmeth.h , * src/maths/ni/nireinit.h , * src/maths/ni/nisenre.h , * src/spicelib/devices/bjt/bjtdset.h , * src/spicelib/devices/bjt2/bjt2dset.h , * src/spicelib/devices/cktaccept.h , * src/spicelib/parser/inppas1.h , * src/spicelib/parser/inppas2.h , * src/spicelib/parser/inppas3.h : remove prototypes, avoid redeclarations 2010-10-16 Robert Larice * src/frontend/inp.c , * src/frontend/nutinp.c , * src/include/fteext.h : collect inp_deckcopy() inp_subcktexpand() in "subckt.h" 2010-10-16 Robert Larice * src/frontend/commands.c , * src/include/fteext.h : collect arg_*() prototypes in "arg.h" 2010-10-16 Robert Larice * src/frontend/vectors.h : collect vec_get() in "fteext.h" 2010-10-16 Robert Larice * src/frontend/com_setscale.c , * src/frontend/plotting/plotting.h : collect plot_cur in "fteext.h" 2010-10-16 Robert Larice * src/frontend/com_dump.c , * src/frontend/inp.c , * src/frontend/mw_coms.c , * src/frontend/options.c , * src/frontend/runcoms.c , * src/frontend/runcoms2.c , * src/include/fteext.h , * src/main.c : collect if_inpdeck() if_run() if_cktfree() if_dump() if_option() in "spiceif.h" 2010-10-16 Robert Larice * src/frontend/misccoms.c , * src/frontend/plotting/plotcurv.c , * src/frontend/signal_handler.c , * src/include/fteext.h : collect gr_clean() gr_end() gr_point() gr_start() gr_fixgrid() in "graf.h" 2010-10-16 Robert Larice * src/frontend/hcomp.c , * src/frontend/misccoms.c , * src/include/fteext.h : collect hcomp() in "hcomp.h" 2010-10-16 Robert Larice * src/frontend/error.h , * src/frontend/hpgl.c , * src/frontend/plotting/plot5.c , * src/frontend/postsc.c : collect internalerror() in "fteext.h" 2010-10-16 Robert Larice * src/frontend/com_help.c , * src/include/cpextern.h : collect ft_nutmeg() in "fteext.h" 2010-10-16 Robert Larice * src/ciderlib/oned/oneadmit.c , * src/ciderlib/oned/onesolve.c : remove local prototypes, which are already included 2010-10-16 Robert Larice * src/include/ngspice.h : remove prototypes, avoid redeclarations 2010-10-16 Holger Vogt * examples/control_structs/s-param.cir new example * commands.c, postcoms.h, postcoms.c, rawfile.h, rawfile.c fteext.h: new command wrs2p, write a s-parameter file using Touchstone vers. 1 format. * device.c: Improved error message "no graphics interface ... 2010-10-15 Holger Vogt * src/ciderlib/input/output.c : #include "../misc/tilde.h" * inpcom.c: line 2800ff, allow -.5 token 2010-10-15 Robert Larice * src/include/ngspice.h , * src/main.c , * src/maths/misc/accuracy.c , * src/maths/misc/accuracy.h : collect BMin BMax ExpLim Accuracy in "accuracy.h", kill `Acc' 2010-10-15 Robert Larice * src/xspice/cmpp/pp_mod.c : cmpp shall add a function prototype to the generated "cfunc.c" file 2010-10-15 Robert Larice * src/ngnutmeg.c : visibility for the NDEVacct() prototype 2010-10-15 Robert Larice * src/ngsconvert.c : remove obsolete artifact XtDispatchEvent() (dummy implementation) 2010-10-15 Robert Larice * src/ciderlib/support/devprint.c : visibility for the printVoltages() prototype 2010-10-15 Robert Larice * src/xspice/cmpp/ifs_lex.l : disable dangling artifact 2010-10-15 Robert Larice * src/spicelib/devices/dev.c : add local prototype for add_device() 2010-10-15 Robert Larice * src/xspice/cmpp/ifs_lex.l , * src/xspice/cmpp/ifs_yacc.y , * src/xspice/cmpp/ifs_yacc_y.h , * src/xspice/cmpp/read_ifs.c : collect prototype for ifs_yyerror() in "ifs_yacc_y.h", and fix return type 2010-10-15 Robert Larice * src/xspice/cmpp/mod_lex.l , * src/xspice/cmpp/mod_yacc.y , * src/xspice/cmpp/mod_yacc_y.h , * src/xspice/cmpp/pp_mod.c : collect prototype for mod_yyerror() in "mod_yacc_y.h", and fix return type 2010-10-15 Robert Larice * src/ciderlib/input/output.c : visibility for tildexpand() prototyp 2010-10-15 Robert Larice * src/frontend/com_measure2.c , * src/frontend/com_sysinfo.c , * src/frontend/control.c , * src/frontend/plotting/x11.c , * src/frontend/subckt.c , * src/maths/cmaths/cmath2.c , * src/spicelib/analysis/cktsens.c , * src/spicelib/analysis/distoan.c , * src/spicelib/analysis/dloadfns.c , * src/spicelib/devices/bsim3/b3noi.c , * src/spicelib/devices/bsim3soi/b4soild.c , * src/spicelib/devices/bsim3soi/b4soinoi.c , * src/spicelib/devices/bsim3soi_dd/b3soiddld.c , * src/spicelib/devices/bsim3soi_dd/b3soiddnoi.c , * src/spicelib/devices/bsim3soi_fd/b3soifdld.c , * src/spicelib/devices/bsim3soi_fd/b3soifdnoi.c , * src/spicelib/devices/bsim3soi_pd/b3soipdld.c , * src/spicelib/devices/bsim3soi_pd/b3soipdnoi.c , * src/spicelib/devices/bsim3v0/b3v0noi.c , * src/spicelib/devices/bsim3v1/b3v1noi.c , * src/spicelib/devices/bsim3v1a/b3v1anoi.c , * src/spicelib/devices/bsim3v1s/b3v1snoi.c , * src/spicelib/devices/bsim3v32/b3v32noi.c , * src/spicelib/devices/bsim4/b4geo.c , * src/spicelib/devices/bsim4/b4noi.c , * src/spicelib/devices/bsim4/b4temp.c , * src/spicelib/devices/bsim4v2/b4v2geo.c , * src/spicelib/devices/bsim4v2/b4v2noi.c , * src/spicelib/devices/bsim4v2/b4v2temp.c , * src/spicelib/devices/bsim4v3/b4v3geo.c , * src/spicelib/devices/bsim4v3/b4v3temp.c , * src/spicelib/devices/bsim4v4/b4v4geo.c , * src/spicelib/devices/bsim4v4/b4v4temp.c , * src/spicelib/devices/bsim4v5/b4v5geo.c , * src/spicelib/devices/bsim4v5/b4v5temp.c , * src/spicelib/devices/ltra/ltramisc.c : declare some functions `static' 2010-10-15 Robert Larice * src/include/cmproto.h : add prototypes for some functions --> "cmproto.h" cm_stream_out() cm_stream_in(v) cm_stream_err() malloc_pj() calloc_pj() realloc_pj() free_pj() 2010-10-15 Robert Larice * src/xspice/icm/xtraevt/int/udnfunc.c , * src/xspice/icm/xtraevt/real/udnfunc.c : declare udn_int_ and udn_real_functions `static' 2010-10-15 Robert Larice * src/include/ngspice.h , * src/main.c , * src/misc/misc_time.h : collect extern timebegin in "misc_time.h" 2010-10-15 Robert Larice * src/ciderlib/support/globals.c , * src/ciderlib/support/mater.c , * src/frontend/numparam/spicenum.c , * src/frontend/options.c , * src/frontend/plotting/graf.c , * src/maths/misc/randnumb.c , * src/maths/ni/niniter.c , * src/spicelib/analysis/cktdltn.c , * src/spicelib/analysis/noisean.c , * src/spicelib/devices/nbjt/nbjttemp.c , * src/spicelib/devices/nbjt2/nbt2acld.c , * src/spicelib/devices/nbjt2/nbt2load.c , * src/spicelib/devices/nbjt2/nbt2pzld.c , * src/spicelib/devices/numd2/nud2acld.c , * src/spicelib/devices/numd2/nud2load.c , * src/spicelib/devices/numd2/nud2pzld.c , * src/spicelib/devices/numos/nummacld.c , * src/spicelib/devices/numos/nummload.c , * src/spicelib/devices/numos/nummpzld.c , * src/xspice/ipc/ipc.c : remove local prototypes, which are allready included 2010-10-15 Robert Larice * src/ciderlib/support/database.c , * src/ciderlib/support/geominfo.c , * src/ciderlib/support/globals.c , * src/ciderlib/support/integset.c , * src/ciderlib/support/integuse.c , * src/ciderlib/support/logfile.c , * src/ciderlib/support/mater.c , * src/ciderlib/support/misc.c , * src/ciderlib/support/mobil.c , * src/ciderlib/support/recomb.c , * src/ciderlib/support/suprmitf.c : prototypes, make use of "cidersupt.h" 2010-10-15 Robert Larice * src/tclspice.c : collect extern JMP_BUF jbuf in "frontend/signal_handler.h" 2010-10-15 Robert Larice * src/include/fteext.h : avoid redeclaration, signalhandler 2010-10-15 Robert Larice * src/frontend/com_fft.c , * src/frontend/com_fft.h : remove static fftext() from "com_fft.h" 2010-10-15 Robert Larice * src/frontend/com_fft.c , * src/frontend/com_fft.h , * src/frontend/spec.c , * src/frontend/spec.h : collect free_pnode_o() in "parse.h" 2010-10-15 Robert Larice * src/frontend/plotting/graphdb.c , * src/frontend/plotting/graphdb.h , * src/frontend/postcoms.c , * src/frontend/wdisp/windisp.c , * src/include/ftedbgra.h : collect NewGraph() FindGraph() CopyGraph() RemoveWindow() in "ftedbgra.h" 2010-10-15 Robert Larice * src/frontend/com_fft.c , * src/frontend/outitf.c , * src/frontend/rawfile.c , * src/frontend/spec.c , * src/frontend/vectors.c , * src/include/ngspice.h , * src/tclspice.c : collect datestring() and seconds() in "misc_time.h" 2010-10-15 Robert Larice * src/frontend/aspice.c , * src/frontend/com_gnuplot.c , * src/frontend/com_hardcopy.c , * src/frontend/com_xgraph.c , * src/frontend/inp.c , * src/frontend/nutinp.c , * src/include/ngspice.h , * src/ngsconvert.c : collect smktemp() in "mktemp.h" 2010-10-13 Dietmar Warning * src/frontend/com_option.c: better formatting the output and add some useful parameters if command 'option' is given * src/include/cktdefs.h, * src/spicelib/analysis/cktdojob.c, cktntask.c, * src/spicelib/devices/cktinit.c, * src/spicelib/parser/inppas2.c: Reduction of trtol to 1 only if 'A' devices in the circuit and xspice is enabled 2010-10-09 Robert Larice * src/include/complex.h : !REVERT! remove typedef for _complex, which is used nowhere this breaks MSVC, currently unkown why, FIXME 2010-10-09 Robert Larice * src/frontend/parse-bison.c , * src/frontend/parse-bison.h , * src/spicelib/parser/inpptree-parser.c , * src/spicelib/parser/inpptree-parser.h : update the bison generated files 2010-10-09 Robert Larice * src/frontend/parse-bison.y , * src/spicelib/parser/inpptree-parser.y : avoid function redeclaration, PPparse() and PTparse() 2010-10-09 Robert Larice * src/frontend/define.c , * src/frontend/evaluate.c , * src/frontend/parse-bison.y , * src/frontend/parse.c , * src/include/fteparse.h : add `PT_OP_' prefix to avoid name collision (END, PLUS, MINUS, ...) 2010-10-09 Robert Larice * src/frontend/com_cdump.c , * src/frontend/com_chdir.c , * src/frontend/com_dump.c , * src/frontend/com_echo.c , * src/frontend/com_ghelp.c , * src/frontend/com_rehash.c , * src/frontend/com_setscale.c , * src/frontend/com_shell.c , * src/frontend/com_shift.c , * src/frontend/com_state.c , * src/frontend/parser/unixcom.c , * src/frontend/streams.c , * src/frontend/streams.h , * src/frontend/variable.c : collect cp_* prototypes / extern-declarations in "cpextern.h" 2010-10-09 Robert Larice * src/ciderlib/input/dopset.c : additional #includes for prototype visibility 2010-10-09 Robert Larice * src/include/ciderinp.h , * src/spicelib/devices/nbjt/nbjtset.c , * src/spicelib/devices/numd/numdset.c : collect MESH*() prototypes in "meshext.h" 2010-10-09 Robert Larice * src/spicelib/devices/bsim4/b4geo.c , * src/spicelib/devices/bsim4v2/b4v2geo.c , * src/spicelib/devices/bsim4v3/b4v3geo.c , * src/spicelib/devices/bsim4v4/b4v4geo.c , * src/spicelib/devices/bsim4v5/b4v5geo.c : include bsim4*def.h (bsim4*geo.c files) 2010-10-09 Robert Larice * src/spicelib/devices/bsim4/b4set.c , * src/spicelib/devices/bsim4/b4temp.c , * src/spicelib/devices/bsim4/bsim4def.h , * src/spicelib/devices/bsim4v2/b4v2set.c , * src/spicelib/devices/bsim4v2/b4v2temp.c , * src/spicelib/devices/bsim4v2/bsim4v2def.h , * src/spicelib/devices/bsim4v3/b4v3set.c , * src/spicelib/devices/bsim4v3/b4v3temp.c , * src/spicelib/devices/bsim4v3/bsim4v3def.h , * src/spicelib/devices/bsim4v4/b4v4set.c , * src/spicelib/devices/bsim4v4/b4v4temp.c , * src/spicelib/devices/bsim4v4/bsim4v4def.h , * src/spicelib/devices/bsim4v5/b4v5set.c , * src/spicelib/devices/bsim4v5/b4v5temp.c , * src/spicelib/devices/bsim4v5/bsim4v5def.h : BSIM*Geo() prototypes --> include files 2010-10-09 Robert Larice * src/frontend/measure.c , * src/frontend/numparam/mystring.c , * src/include/dstring.h , * src/misc/dstring.c : remove #define for EOS use '\0' instead 2010-10-09 Robert Larice * src/frontend/terminal.c , * src/include/complex.h , * src/include/fteparse.h , * src/main.c , * src/maths/sparse/spbuild.c , * src/maths/sparse/spdefs.h , * src/misc/ivars.c , * src/spicelib/parser/ifnewuid.c , * src/spicelib/parser/inperror.c , * src/tclspice.c : remove ancient #defines for AND OR NOT substitute with && || ! 2010-10-09 Robert Larice * src/include/profile.h : remove obsolete #defines for BEGIN END LENGTH FORWARD 2010-10-09 Robert Larice * src/include/fteparse.h : remove obsolete #defines for MAXARITY NUM STRING PNODE 2010-10-09 Robert Larice * src/include/complex.h : remove typedef for _complex, which is used nowhere 2010-10-08 Robert Larice * src/frontend/evaluate.c , * src/frontend/parse.c , * src/include/fteext.h : collect some cx_*() prototypes in "cmath2.h" 2010-10-08 Robert Larice * src/main.c : remove winmessage() prototype, there is no such thing (hopefully) 2010-10-08 Robert Larice * src/include/inpdefs.h , * src/spicelib/parser/inp.h : collect the other INP*() prototypes in "inpdefs.h" 2010-10-08 Robert Larice * src/include/inpdefs.h , * src/spicelib/parser/inp.h , * src/spicelib/parser/inppas2.c : collect the INP2?() prototypes in "inp.h" 2010-10-08 Robert Larice * src/include/inpptree.h , * src/spicelib/parser/inp.h : collect the PT*() prototypes in "inp.h" 2010-10-08 Robert Larice * src/frontend/parse.c , * src/include/fteext.h : consider the op_*() functions to be less public 2010-10-08 Robert Larice * src/spicelib/devices/bsim3soi/b4soiinit.c , * src/spicelib/devices/bsim3soi_dd/b3soiddinit.c , * src/spicelib/devices/bsim3soi_fd/b3soifdinit.c , * src/spicelib/devices/bsim3soi_pd/b3soipdinit.c , * src/spicelib/devices/dio/dioinit.c , * src/spicelib/devices/hisim/hsm1init.c : avoid function redeclaration (devices) 2010-10-08 Robert Larice * src/include/sensgen.h , * src/spicelib/analysis/cktsgen.c : sens_getp() prototype --> include file 2010-10-08 Robert Larice * src/xspice/idn/idndig.c : static function definition 2010-10-08 Robert Larice * src/include/ipcproto.h : #ifdef include file wrapper 2010-10-08 Robert Larice * src/include/noisedef.h , * src/spicelib/devices/bjt/bjtnoise.c , * src/spicelib/devices/bjt2/bjt2noise.c , * src/spicelib/devices/bsim1/b1noi.c , * src/spicelib/devices/bsim2/b2noi.c , * src/spicelib/devices/bsim3/b3noi.c , * src/spicelib/devices/bsim3soi/b4soinoi.c , * src/spicelib/devices/bsim3soi_dd/b3soiddnoi.c , * src/spicelib/devices/bsim3soi_fd/b3soifdnoi.c , * src/spicelib/devices/bsim3soi_pd/b3soipdnoi.c , * src/spicelib/devices/bsim3v0/b3v0noi.c , * src/spicelib/devices/bsim3v1/b3v1noi.c , * src/spicelib/devices/bsim3v1a/b3v1anoi.c , * src/spicelib/devices/bsim3v1s/b3v1snoi.c , * src/spicelib/devices/bsim3v32/b3v32noi.c , * src/spicelib/devices/bsim4/b4noi.c , * src/spicelib/devices/bsim4v2/b4v2noi.c , * src/spicelib/devices/bsim4v3/b4v3noi.c , * src/spicelib/devices/bsim4v4/b4v4noi.c , * src/spicelib/devices/bsim4v5/b4v5noi.c , * src/spicelib/devices/csw/cswnoise.c , * src/spicelib/devices/dio/dionoise.c , * src/spicelib/devices/hisim/hsm1noi.c , * src/spicelib/devices/jfet/jfetnoi.c , * src/spicelib/devices/jfet2/jfet2noi.c , * src/spicelib/devices/mes/mesnoise.c , * src/spicelib/devices/mos1/mos1noi.c , * src/spicelib/devices/mos2/mos2noi.c , * src/spicelib/devices/mos3/mos3noi.c , * src/spicelib/devices/mos9/mos9noi.c , * src/spicelib/devices/res/resnoise.c , * src/spicelib/devices/soi3/soi3nois.c , * src/spicelib/devices/sw/swnoise.c , * src/spicelib/devices/vbic/vbicnoise.c : NevalSrc() NevalSrc2() Nintegrate() prototypes --> include files 2010-10-08 Robert Larice * src/frontend/inpcom.c , * src/frontend/numparam/xpressn.c , * src/include/compatmode.h : ngspice_compat_mode() prototype --> include files 2010-10-08 Robert Larice * src/include/distodef.h , * src/spicelib/devices/bjt/bjtdset.c , * src/spicelib/devices/bjt2/bjt2dset.c : TanDeriv() prototype --> include files 2010-10-08 Robert Larice * src/xspice/cmpp/cmpp.h , * src/xspice/cmpp/main.c , * src/xspice/cmpp/pp_lst.c : str_to_lower() init_error() protoypes --> include files 2010-10-08 Robert Larice * src/include/distodef.h , * src/spicelib/analysis/distoan.c : DkerProc() CKTdisto() prototypes --> include files 2010-10-08 Robert Larice * src/ciderlib/oned/onedext.h , * src/spicelib/parser/inp.h : remove some stuttered prototypes 2010-10-08 Robert Larice * src/frontend/dotcards.c , * src/frontend/numparam/spicenum.c , * src/frontend/numparam/xpressn.c , * src/maths/misc/randnumb.c , * src/spicelib/parser/inplist.c : some .c file local prototypes 2010-10-08 Robert Larice * src/maths/cmaths/cmath2.h : cx_avg() prototype 2010-10-08 Robert Larice * src/frontend/com_measure2.h : com_dotmeasure() prototype 2010-10-08 Robert Larice * src/include/evtproto.h : EVTfindvec() prototyp 2010-10-08 Robert Larice * src/include/cktdefs.h , * src/spicelib/analysis/ckt.h : CKTdnames() prototype 2010-10-08 Robert Larice * src/xspice/icm/Makefile : too much quoting caused an error for quoted things in CFLAGS ( CFLAGS=-D"SIGNAL_FUNCTION='void(*)(int)'" ./configure ) 2010-10-08 Robert Larice * src/frontend/spiceif.c , * src/frontend/spiceif.h , * src/include/cktdefs.h , * src/include/distodef.h , * src/include/ifsim.h , * src/include/opdefs.h , * src/include/sensdefs.h , * src/include/tfdefs.h , * src/include/trandefs.h , * src/spicelib/analysis/acaskq.c , * src/spicelib/analysis/acsetp.c , * src/spicelib/analysis/analysis.h , * src/spicelib/analysis/ckt.h , * src/spicelib/analysis/cktacct.c , * src/spicelib/analysis/cktaskaq.c , * src/spicelib/analysis/cktfnda.c , * src/spicelib/analysis/cktsopt.c , * src/spicelib/analysis/daskq.c , * src/spicelib/analysis/dcoaskq.c , * src/spicelib/analysis/dcosetp.c , * src/spicelib/analysis/dctaskq.c , * src/spicelib/analysis/dctsetp.c , * src/spicelib/analysis/dsetparm.c , * src/spicelib/analysis/naskq.c , * src/spicelib/analysis/nsetparm.c , * src/spicelib/analysis/pzaskq.c , * src/spicelib/analysis/pzsetp.c , * src/spicelib/analysis/sensaskq.c , * src/spicelib/analysis/senssetp.c , * src/spicelib/analysis/tfaskq.c , * src/spicelib/analysis/tfsetp.c , * src/spicelib/analysis/tranaskq.c , * src/spicelib/analysis/transetp.c , * src/unsupported/sen2setp.c , * src/unsupported/snaskq.c : use the type JOB, remove redundant casts 2010-10-08 Robert Larice * src/frontend/outitf.c , * src/frontend/outitf.h , * src/frontend/spiceif.c , * src/include/ifsim.h , * src/main.c , * src/spicelib/analysis/acan.c , * src/spicelib/analysis/cktsens.c , * src/spicelib/analysis/dcop.c , * src/spicelib/analysis/dctran.c , * src/spicelib/analysis/dctrcurv.c , * src/spicelib/analysis/distoan.c , * src/spicelib/analysis/noisean.c , * src/spicelib/analysis/pzan.c , * src/spicelib/analysis/tfanal.c : use the type JOB, remove redundant casts 2010-10-08 Robert Larice * src/frontend/shyu.c , * src/frontend/spiceif.c , * src/include/cktdefs.h , * src/include/ftedefs.h , * src/include/ifsim.h , * src/include/inpdefs.h , * src/spicelib/analysis/ckt.h , * src/spicelib/analysis/cktdelt.c , * src/spicelib/analysis/cktdojob.c , * src/spicelib/analysis/cktfnda.c , * src/spicelib/analysis/cktftask.c , * src/spicelib/analysis/cktnewan.c , * src/spicelib/analysis/cktntask.c , * src/spicelib/analysis/cktsetap.c , * src/spicelib/devices/bsim4/b4set.c , * src/spicelib/devices/bsim4v2/b4v2set.c , * src/spicelib/devices/bsim4v3/b4v3set.c , * src/spicelib/devices/bsim4v4/b4v4set.c , * src/spicelib/devices/bsim4v5/b4v5set.c , * src/spicelib/parser/inp.h , * src/spicelib/parser/inp2dot.c , * src/spicelib/parser/inpapnam.c , * src/spicelib/parser/inpdoopt.c , * src/spicelib/parser/inppas2.c , * src/spicelib/parser/inppas2.h , * src/spicelib/parser/inppas3.c , * src/spicelib/parser/inppas3.h : use the types TSKtask and JOB, instead of void 2010-10-08 Robert Larice * src/frontend/spiceif.c , * src/spicelib/analysis/cktnewan.c , * src/spicelib/parser/inp2dot.c : type bistromatic in preparation for the next patches Note: offsetof struct TSKtask.taskOptions === 0 2010-10-08 Robert Larice * src/frontend/spiceif.c : remove a redundant cast 2010-10-08 Robert Larice * src/frontend/spiceif.c , * src/spicelib/analysis/ckt.h : fix an incorrect prototype 2010-10-08 Robert Larice * src/include/inpptree.h , * src/spicelib/parser/inpptree.c : fix a compiler warning, void* versus void(*)(void) 2010-10-07 Holger Vogt * subckt.c: b. in i(b.xxx.byyy) 2010-10-05 Dietmar Warning * configure.ac: enabling openMP under SunStudio compiler * terminal.c, ivars.c, ifnewuid.c, inperror.c, main.c: asprintf definition also for sun compiler - can not be concentrated in ngspice.h because of libgen - libiberty conflict ============================ Rework-22 ================================== 2010-10-04 Holger Vogt * miscoms.c: remove bug no. 3080398 2010-10-02 Holger Vogt * mesadefs.h, mesamsak.c, mesamparam.c, mesasetup.c jfetmask.c: remove NAN or exp -312 outputs 2010-10-01 Robert Larice * src/spicelib/devices/hfet1/hfetmask.c , * src/spicelib/devices/hfet2/hfet2mask.c , * src/spicelib/devices/mes/mesmask.c , * src/spicelib/devices/mesa/mesamask.c : bugfix, missing return(OK) in some switch statements 2010-09-30 Robert Larice * configure.ac , * src/include/defines.h : use autoconf to find a suitable signal function type 2010-09-30 Robert Larice * src/xspice/icm/Makefile : use $(MAKE) instead of `make' 2010-09-30 Robert Larice * src/xspice/cmpp/Makefile.am , * src/xspice/cmpp/ifs_lex.l , * src/xspice/cmpp/mod_lex.l : always use flex instead of an arbitrary lex, use flex specific %options, to clean up the Makefile don't write the lexer via stdout, to improve gcc warning readability this works around a bug as well, which caused erronous lexer c files to be included in the distribution tar ball 2010-09-26 Holger Vogt * .cvsignore: m4 entry removed 2010-09-25 Holger Vogt * conf.c, conf.h, ngspice.h, visualc/config.h, configure.ac: update welcome message, version 22 * FAQ, COPYING, NEWS, INSTALL, README, README.tcl, BUGS: update to version 22 * examples/Monte_Carlo: new folder with example files 2010-09-23 Robert Larice * Makefile.am , * m4/.cvsignore : add an empty m4/.cvsignore file, to make sure the directory exists add this directory and the file compile_min.sh to the tarball 2010-09-22 Dietmar Warning * devices/mesa/mesaload.c: initialize some variables 2010-09-21 Robert Larice * autogen.sh : there are several implementations of `sed'. Some can't swallow a '\n' escape sequence on the RHS. And some want a plain newline in the RHS to be escaped. see http://sed.sourceforge.net/sedfaq4.html#s4.1 `4.1. How do I insert a newline into the RHS of a substitution?' 2010-09-19 Dietmar Warning * adms/hicum2/admsva/hicum2.va: update to version 2.24 with small exceptions from the original source code, seems the last update because model provider has limited the access only to authorized partners 2010-09-19 Robert Larice * autogen.sh : cleanup 2010-09-19 Robert Larice * src/frontend/plotting/graf.c , * src/frontend/plotting/grid.c : fix some ancient \n\r and \r\n typos 2010-09-19 Robert Larice * src/frontend/quote.c : cp_unqoute(), avoid segfault when applied to a single quote "\"" testcase: .control echo "--" .endc FIXME, still not completely done, inp_stripcomments_line() will fail on comments inside of strings 2010-09-19 Holger Vogt * src/spinit.in, configure.ac: allow lib64 in spinit (bug no. 3054424) if libdir contains lib64 * compile_min.sh: new script for compiling MINGW 32 and 64 bit 2010-09-18 Holger Vogt * src/XSPICE/icm/makedefs.in: external LDFLAGS enabled for MINGW 2010-09-18 Robert Larice * contrib/mslib/liblook , * contrib/mslib/libprm , * contrib/scripts/liblook , * contrib/scripts/libprm , * contrib/vbic/sgp2vbic , * contrib/vbic/vbic2sgp * some scripts need bash this patch is from debian, thanks 2010-09-18 Dietmar Warning * src/spicelib/devices/*/isrcacct.c, vsrcacct.c: Correct bitwise operation 2010-09-17 Holger Vogt * visualc/include/config.h, vngspice.sln, vngspice.vcproj: new configurations release, Debug, and ReleaseOMP 2010-09-17 Robert Larice * .cvsignore , * Makefile.am , * configure.ac , * config/.cvsignore : undo "use a subdirectory `config' for autoconfigure ..." from today this has broken `configure' for xgraph 2010-09-17 Robert Larice * src/frontend/Makefile.am : fix parse-bison.y dependencies 2010-09-17 Robert Larice * autogen.sh : run aclocal first, then libtoolize 2010-09-17 Robert Larice * Makefile.am , * src/include/Makefile.am , * src/maths/misc/Makefile.am , * src/maths/poly/Makefile.am , * src/spicelib/devices/ndev/Makefile.am , * src/xspice/Makefile.am , * tests/bsim3soi/Makefile.am , * tests/bsim3soidd/Makefile.am , * tests/bsim3soifd/Makefile.am , * tests/bsim3soipd/Makefile.am , * tests/mesa/Makefile.am : `make dist' add some missing artifacts 2010-09-17 Robert Larice * configure.ac , * src/spicelib/devices/Makefile.am : `make dist' improvements for `NDEV' 2010-09-17 Robert Larice * Makefile.am , * .cvsignore , * config/.cvsignore , * configure.ac : use a subdirectory `config' for autoconfigure related artifacts 2010-09-17 Robert Larice * **/Makefile.am : whitespace cleanup 2010-09-15 Holger Vogt * com_measure2.c: prevent seg fault in meas ac, if real input * examples/control_structs/MonteCarlo.sp: update, add measure 2010-09-12 Robert Larice * src/main.c : fix incorrect buffer type, and exit(1) on failure to open a tempfile 2010-09-08 Holger Vogt * inp.c, inpcom.c: include libiberty.h removed * terminal.c, ivars.c, ifnewuid.c, inperror.c, tclspice.c, main.c: rework of #ifdef HAVE_ASPRINTF ... * fteparse.h: #undef AND /* obsolete macro in ansidecl.h */ added 2010-09-08 Robert Larice * src/frontend/wdisp/windisp.c , * src/frontend/wdisp/winprint.c : fix commit from today, `function rename, Arc() -> DevDrawArc()` 2010-09-08 Robert Larice * src/include/const.h : rename include file wrapper, #ifndef CONST -> CONST_H 2010-09-08 Robert Larice * src/frontend/display.c , * src/include/ftedev.h : function rename, struct DISPDEVICE . Text() -> DrawText() 2010-09-08 Robert Larice * src/frontend/display.c , * src/include/ftedev.h : function rename, struct DISPDEVICE . Arc() -> DrawArc() 2010-09-08 Robert Larice * src/frontend/display.c , * src/frontend/display.h , * src/frontend/plotting/graf.c , * src/frontend/plotting/grid.c : function rename, Update() -> DevUpdate() 2010-09-08 Robert Larice * src/frontend/display.c , * src/frontend/display.h , * src/frontend/plotting/graf.c , * src/frontend/plotting/grid.c : function rename, DrawLine() -> DevDrawLine() 2010-09-08 Robert Larice * src/frontend/display.c , * src/frontend/display.h , * src/frontend/plotting/graf.c , * src/frontend/plotting/grid.c , * src/frontend/plotting/x11.c : function rename, Text() -> DevDrawText() 2010-09-08 Robert Larice * src/frontend/display.c , * src/frontend/display.h , * src/frontend/plotting/grid.c , * src/frontend/wdisp/windisp.c , * src/frontend/wdisp/winprint.c : function rename, Arc() -> DevDrawArc() 2010-09-08 Robert Larice * README.adms , * autogen.sh , * configure.ac , * configure.in , * src/frontend/cpitf.c , * src/misc/ivars.c : rename configure.in -> configure.ac 2010-09-08 Holger Vogt * visualc/include/config.h, vngspice.sln, vngspice.vcproj: prepare for ngspice22 2010-09-07 Robert Larice * src/frontend/parse.c , * src/include/fteparse.h , * src/spicelib/parser/inpptree.c : muffle some visual-C warnings data pointer -> function pointer conversion void* versus void(*)(void) 2010-09-07 Robert Larice * ng-spice-rework/src/maths/misc/randnumb.c : convert K&R function definitions to ansi style 2010-09-07 Robert Larice * src/xspice/ipc/ipcstdio.c : convert K&R function definitions to ansi style 2010-09-07 Robert Larice * src/frontend/inpcom.c , * src/frontend/plotting/x11.c , * src/frontend/resource.c , * src/frontend/subckt.c , * src/include/hash.h , * src/main.c , * src/misc/util.c , * src/ngproc2mod.c , * src/spicelib/analysis/cktterr.c , * src/spicelib/analysis/dctran.c , * src/spicelib/devices/ltra/ltratemp.c , * src/spicelib/devices/ltra/ltratrun.c , * src/winmain.c , * src/xspice/evt/evtbackup.c , * src/xspice/ipc/ipcaegis.c , * src/xspice/mif/mifgetvalue.c , * src/xspice/mif/miftrunc.c : use for(;;) instead of while(1) to muffle some visual-C warnings 2010-09-07 Robert Larice * examples/tclspice/tcl-testbench2/example.cir , * examples/xspice/xspice_c2.cir , * examples/xspice/xspice_c3.cir , * src/frontend/help/ChangeLog , * src/spicelib/devices/adms/mextram/admsva/COPYRIGHT_NOTICE , * visualc/how-to-ngspice-vstudio.txt , * xgraph/.cvsignore : whitespace cleanup, add missing trailing newlines 2010-09-07 Robert Larice * contrib/vbic/sgp2vbic , * contrib/vbic/vbic2sgp , * src/spicelib/devices/mos9/mos9temp.c , * src/xspice/examples/d_to_real/Makefile , * src/xspice/examples/d_to_real/cfunc.mod , * src/xspice/examples/d_to_real/ifspec.ifs , * src/xspice/examples/nco/Makefile , * src/xspice/examples/nco/ifspec.ifs , * src/xspice/examples/print_param_types/Makefile , * src/xspice/examples/print_param_types/cfunc.mod , * src/xspice/examples/print_param_types/ifspec.ifs , * src/xspice/examples/real_delay/Makefile , * src/xspice/examples/real_delay/ifspec.ifs , * src/xspice/examples/real_gain/Makefile , * src/xspice/examples/real_gain/cfunc.mod , * src/xspice/examples/real_gain/ifspec.ifs , * src/xspice/examples/real_to_v/Makefile , * src/xspice/examples/real_to_v/ifspec.ifs : whitespace cleanup, \r\n -> \n 2010-09-07 Holger Vogt * vectors.c: add plot [alli | allv | ally] * com_measure2.c: prevent seg fault if wrong meas type is chosen 2010-09-04 Dietmar Warning * misc/tilde.c: prevent unreached statement if pwd.h available * define.h: recover signaltype for SunStudio compiler signal function 2010-09-03 Holger Vogt * inpcom.c, inp.h, inpeval.c, inpgtok.c: bug removed in B source parsing, as reported by sdaau 2010-09-02 Holger Vogt * randnumb.c: inproved comments 2010-08-29 Holger Vogt * cmath2.c, randnumb.c, main.c, ngspice.h, configure.in, tclspice.c: remove fcns random() and srandom(), only use rand() and srand() or internal random number generator. * mystring.c: replace Str() by SPICE_DSTRING 2010-08-29 Dietmar Warning * fteext.h, parse.c, cmath2.c, cmath2.h,: new function sunif(), uniform random generator usable in control blocks * examples/control_structs/MonteCarlo.sp: Simple example to perform MC runs in ngspice using uniform and gaussian distributions 2010-08-29 Holger Vogt * fteext.h, main.c, randnumb.c, parse.c, cmath2.c, cmath2.h: new function sgauss(), new random number generator with very high run length 2010-08-19 Holger Vogt * xpressn.c: bug no. 3047884 fixed inp.c: prevent crash if .param is last line in input deck 2010-08-18 Holger Vogt * configure.in: add TCLCYG * autogen.sh: if --adms is selected, read the section from configure.in and store it in AC_CONFIG_FILES of temporary temp-adms.ac. Testing for availability of awk Tested with MINGW, CYGWIN, SUSE Linux, may need more tests on other OSs! 2010-08-17 Dietmar Warning * windisp.c, winprint.c, xspice/cm/cmexport.c: omit warnings 2010-08-15 Holger Vogt * configure.in: add a small section starting with *VLAMKF, containing the adms makefiles to be made * autogen.sh: if --adms is selected, read the section from configure.in and store it in AC_CONFIG_FILES of temporary configure.ac Tested with MINGW, CYGWIN, SUSE Linux, may need more tests on other OSs! 2010-08-15 Robert Larice * src/misc/string.c , * src/xspice/cmpp/mod_yacc.y : chomp some warnings 2010-08-15 Robert Larice * src/include/jobdefs.h , * src/include/tskdefs.h , * src/include/typedefs.h : typedefs for JOB and TSKtask into "typedefs.h" 2010-08-15 Robert Larice * src/spicelib/parser/inp2dot.c : use the type CKTnode instead of void* 2010-08-15 Robert Larice * src/frontend/vectors.c : change for readability 2010-08-15 Robert Larice * src/frontend/evaluate.c : change for readability 2010-08-15 Robert Larice * src/spicelib/devices/cktask.c , * src/spicelib/parser/inp2m.c : drop (GENinstance*) casts, which are no longer necessary 2010-08-15 Robert Larice * src/spicelib/devices/asrc/asrcset.c , * src/spicelib/devices/ccvs/ccvsset.c , * src/spicelib/devices/vcvs/vcvsset.c , * src/spicelib/devices/vsrc/vsrcset.c : check for shorted voltage sources, to avoid a segmentation fault 2010-08-15 Robert Larice * src/maths/sparse/spdefs.h : fix txfree() prototype 2010-08-13 Holger Vogt * autogen.sh: keep configure.in untouched by generating temporary configure.ac if --adms is selected * configure.in: remove VLAMKF; move AM_CONDITIONAL out of conditional clauses; replace AC_PROG_YACC, AC_PROG_LEX by appropriate AC_CHECK_PROGS with warning if BISON is missing w/o XSPICE, but fail if w/ XSPICE and BISON or FLEX missing; AC_CONFIG_MACRO_DIR([m4]) added * Makefile.am: ACLOCAL_AMFLAGS = -I m4 added * .cvsignore: m4 added * nghelp.c: adapt function types 2010-08-11 Robert Larice * src/include/cktdefs.h , * src/include/ifsim.h , * src/include/inpdefs.h , * src/include/noisedef.h , * src/spicelib/analysis/ckt.h , * src/spicelib/analysis/cktasknq.c , * src/spicelib/analysis/cktdltn.c , * src/spicelib/analysis/cktfnode.c , * src/spicelib/analysis/cktgrnd.c , * src/spicelib/analysis/cktmapn.c , * src/spicelib/analysis/cktmkcur.c , * src/spicelib/analysis/cktmkvol.c , * src/spicelib/analysis/cktneweq.c , * src/spicelib/analysis/cktnewn.c , * src/spicelib/analysis/cktsetnp.c , * src/spicelib/analysis/noisean.c , * src/spicelib/analysis/pzaskq.c , * src/spicelib/analysis/pzsetp.c , * src/spicelib/analysis/senssetp.c , * src/spicelib/analysis/tfsetp.c , * src/spicelib/devices/asrc/asrcconv.c , * src/spicelib/devices/asrc/asrcload.c , * src/spicelib/devices/asrc/asrcpzld.c , * src/spicelib/devices/asrc/asrcset.c , * src/spicelib/devices/cktbindnode.c , * src/spicelib/devices/ndev/ndevdefs.h , * src/spicelib/devices/ndev/ndevset.c , * src/spicelib/devices/urc/urcsetup.c , * src/spicelib/parser/ifnewuid.c , * src/spicelib/parser/inp.h , * src/spicelib/parser/inp2b.c , * src/spicelib/parser/inp2c.c , * src/spicelib/parser/inp2d.c , * src/spicelib/parser/inp2dot.c , * src/spicelib/parser/inp2e.c , * src/spicelib/parser/inp2f.c , * src/spicelib/parser/inp2g.c , * src/spicelib/parser/inp2h.c , * src/spicelib/parser/inp2i.c , * src/spicelib/parser/inp2j.c , * src/spicelib/parser/inp2l.c , * src/spicelib/parser/inp2m.c , * src/spicelib/parser/inp2n.c , * src/spicelib/parser/inp2o.c , * src/spicelib/parser/inp2p.c , * src/spicelib/parser/inp2q.c , * src/spicelib/parser/inp2r.c , * src/spicelib/parser/inp2s.c , * src/spicelib/parser/inp2t.c , * src/spicelib/parser/inp2u.c , * src/spicelib/parser/inp2v.c , * src/spicelib/parser/inp2w.c , * src/spicelib/parser/inp2y.c , * src/spicelib/parser/inp2z.c , * src/spicelib/parser/inppas2.c , * src/spicelib/parser/inppas3.c , * src/spicelib/parser/inpptree.c , * src/spicelib/parser/inpsymt.c , * src/xspice/mif/mif_inp2.c : use the type CKTnode instead of void* 2010-08-11 Robert Larice * src/spicelib/devices/cktinit.c , * src/spicelib/parser/inp2b.c : cleanup 2010-08-10 Robert Larice * src/frontend/spiceif.c , * src/spicelib/analysis/acan.c , * src/spicelib/analysis/cktnoise.c , * src/spicelib/analysis/dctran.c , * src/spicelib/analysis/dctrcurv.c , * src/spicelib/analysis/distoan.c , * src/spicelib/analysis/noisean.c , * src/spicelib/analysis/pzan.c , * src/spicelib/analysis/tfanal.c , * src/spicelib/devices/bjt/bjtnoise.c , * src/spicelib/devices/bjt2/bjt2noise.c , * src/spicelib/devices/bsim1/b1noi.c , * src/spicelib/devices/bsim2/b2noi.c , * src/spicelib/devices/bsim3/b3noi.c , * src/spicelib/devices/bsim3soi/b4soinoi.c , * src/spicelib/devices/bsim3soi_dd/b3soiddnoi.c , * src/spicelib/devices/bsim3soi_fd/b3soifdnoi.c , * src/spicelib/devices/bsim3soi_pd/b3soipdnoi.c , * src/spicelib/devices/bsim3v0/b3v0noi.c , * src/spicelib/devices/bsim3v1/b3v1noi.c , * src/spicelib/devices/bsim3v1a/b3v1anoi.c , * src/spicelib/devices/bsim3v1s/b3v1snoi.c , * src/spicelib/devices/bsim3v32/b3v32noi.c , * src/spicelib/devices/bsim4/b4noi.c , * src/spicelib/devices/bsim4v2/b4v2noi.c , * src/spicelib/devices/bsim4v3/b4v3noi.c , * src/spicelib/devices/bsim4v4/b4v4noi.c , * src/spicelib/devices/bsim4v5/b4v5noi.c , * src/spicelib/devices/csw/cswnoise.c , * src/spicelib/devices/dio/dionoise.c , * src/spicelib/devices/hisim/hsm1noi.c , * src/spicelib/devices/jfet/jfetnoi.c , * src/spicelib/devices/jfet2/jfet2noi.c , * src/spicelib/devices/mes/mesnoise.c , * src/spicelib/devices/mos1/mos1noi.c , * src/spicelib/devices/mos2/mos2noi.c , * src/spicelib/devices/mos3/mos3noi.c , * src/spicelib/devices/mos9/mos9noi.c , * src/spicelib/devices/res/resnoise.c , * src/spicelib/devices/soi3/soi3nois.c , * src/spicelib/devices/sw/swnoise.c , * src/spicelib/devices/urc/urcsetup.c , * src/spicelib/devices/vbic/vbicnoise.c , * src/spicelib/parser/inp2b.c , * src/spicelib/parser/inp2c.c , * src/spicelib/parser/inp2d.c , * src/spicelib/parser/inp2e.c , * src/spicelib/parser/inp2f.c , * src/spicelib/parser/inp2g.c , * src/spicelib/parser/inp2h.c , * src/spicelib/parser/inp2i.c , * src/spicelib/parser/inp2j.c , * src/spicelib/parser/inp2k.c , * src/spicelib/parser/inp2l.c , * src/spicelib/parser/inp2m.c , * src/spicelib/parser/inp2o.c , * src/spicelib/parser/inp2p.c , * src/spicelib/parser/inp2q.c , * src/spicelib/parser/inp2r.c , * src/spicelib/parser/inp2s.c , * src/spicelib/parser/inp2t.c , * src/spicelib/parser/inp2u.c , * src/spicelib/parser/inp2v.c , * src/spicelib/parser/inp2w.c , * src/spicelib/parser/inp2y.c , * src/spicelib/parser/inp2z.c : drop a bunch of (void**) NULL casts, all in the sixth argument of IFnewUid() 2010-08-10 Robert Larice * src/include/cktdefs.h , * src/include/ifsim.h , * src/spicelib/analysis/ckt.h , * src/spicelib/devices/cktbindnode.c , * src/spicelib/devices/urc/urcsetup.c , * src/spicelib/parser/inp2y.c : use GENinstance*, instead of void* 2010-08-10 Robert Larice * src/frontend/plotting/x11.c : fix comment 2010-08-10 Robert Larice * src/spicelib/analysis/ckt.h : missing `extern' 2010-08-10 Robert Larice * src/include/cktdefs.h , * src/include/ifsim.h , * src/include/inpdefs.h , * src/spicelib/analysis/ckt.h , * src/spicelib/analysis/cktparam.c , * src/spicelib/analysis/cktpname.c , * src/spicelib/parser/inp.h , * src/spicelib/parser/inpdpar.c : use GENinstance*, instead of void* 2010-08-10 Robert Larice * src/include/cktdefs.h , * src/include/ifsim.h , * src/spicelib/analysis/ckt.h , * src/spicelib/analysis/cktdltm.c : use GENmodel*, instead of void* 2010-08-10 Robert Larice * src/maths/ni/niniter.c' : drop (SMPmatrix*) casts, which are no longer necessary 2010-08-10 Robert Larice * src/spicelib/analysis/tfanal.c : drop (GENinstance*) casts, which are no longer necessary 2010-08-10 Robert Larice * src/frontend/spiceif.c' : drop (INPtables*) casts, which are no longer necessary 2010-08-10 Robert Larice * src/frontend/spiceif.c , * src/spicelib/analysis/cktmask.c , * src/spicelib/analysis/cktmcrt.c , * src/spicelib/analysis/cluster.c , * src/spicelib/analysis/dctrcurv.c , * src/spicelib/devices/cktcrte.c , * src/spicelib/devices/cktfinddev.c : drop (GENmodel*) casts, which are no longer necessary 2010-08-09 Robert Larice * src/frontend/display.c , * src/frontend/parser/input.c , * src/frontend/plotting/x11.c , * src/main.c : fix a busy waiting loop when using editline. rl_event_hook must block until there is some work to do. (select on stdin and the X11 socket). For non-X11, don't use rl_event_hook at all. 2010-08-09 Robert Larice * src/spicelib/analysis/cktmapn.c : bug fix, incorrect indirection level, yet without consequence, function CKTmapNode() is unused. 2010-08-09 Robert Larice * src/spicelib/parser/inpgval.c : fix assignment to a member of union IFvalue 2010-08-07 Robert Larice * src/frontend/parse-bison.c , * src/frontend/parse-bison.h , * src/frontend/parse-bison.y : bug fix, avoid segfault, caused when parsing an unknown function in parse-bison.y 2010-08-07 Dietmar Warning spicelib/devices/*/b4soimask.c, csw*.c, mos6load.c, soi3load.c, swnoise.c: fix some wrong 'double' to 'int' assignments 2010-08-07 Robert Larice * src/main.c : bug fix, segfault caused by an ancient `editline' workaround (bug tracker ID: 2966977, `segfault with editline') 2010-08-07 Robert Larice * src/tclspice.c , * src/include/tclspice.h : bug fix, I've recently broken compilation of tclspice. - missing #include - use the GENmodel and GENinstance type instead of void* - muffle some type warnings. 2010-08-07 Robert Larice * configure.in : for gcc, don't report `unused parameter' Warnings * src/Makefile.am (bug tracker ID: 3019263) add missing $(EXEEXT) for cygwin, thank you marco atzeri 2010-08-06 Dietmar Warning * spicelib/parser/inp2q.c: add prototype for controlled_exit * frontend/com_measure2.c, inp.c, inpcom.c, vectors.c: fallback for not handled enumeration values in switch 2010-08-04 Robert Larice * src/frontend/control.c : fix an ancient bug, trampling on freed memory causing segfaults and sickness. getlims() {a function used by plot} does surgery to a wordlist, freeing some words. yet docommand() relied on the wordlist being unmodified. 2010-08-02 Robert Larice * src/frontend/hpgl.c , * src/frontend/plotting/plot5.c : implement Arc() for plot5 and hpgl (smith diagram) 2010-08-01 Holger Vogt * autogen.sh: update for adms 2010-08-01 Robert Larice * src/pkgIndex.tcl.in , * src/tclspice.c , * src/frontend/display.c , * src/frontend/display.h , * src/frontend/hpgl.c , * src/frontend/postsc.c , * src/frontend/plotting/grid.c , * src/frontend/plotting/plot5.c , * src/frontend/plotting/x11.c , * src/frontend/wdisp/windisp.c , * src/frontend/wdisp/winprint.c , * src/include/ftedev.h : bug fix, implementation of the X11 draw arc implementation. parameter change for all Arc() functions. from theta1, theta2 to theta,delta_theta the previous interface was ambiguous. fix the x11lineararcs implementation, which could loop forever. but don't use it anyways, since the real X11 draw arc works properly now. 2010-08-01 Holger Vogt * autogen.sh, spicelib/parser/inp2q.c: update for adms 2010-07-31 Robert Larice * src/frontend/parse.c : work around a segmentation fault, when plotting plot something vs vec vec was freed too early 2010-07-31 Robert Larice * src/frontend/vectors.c : fix an ancient typo, responsible for segfault or garbage when plotting multidimensional complex vectors 2010-07-30 Robert Larice * src/frontend/evaluate.c : fix an ancient typo, responsible for segfault or garbage when operating on vectors 2010-07-30 Robert Larice * src/main.c : need an #ifdef for one of the just added #includes 2010-07-30 Robert Larice * src/frontend/com_dl.c , * src/frontend/com_help.c , * src/frontend/com_set.c , * src/frontend/com_sysinfo.c , * src/frontend/hcomp.c , * src/frontend/parse.h , * src/include/pzdefs.h , * src/include/sen2defs.h , * src/include/typedefs.h , * src/main.c , * src/maths/misc/accuracy.c , * src/maths/misc/bernoull.c , * src/maths/misc/norm.c , * src/ngsconvert.c , * src/spicelib/analysis/cktdelt.c , * src/spicelib/devices/limit.c , * src/xspice/evt/evtaccept.c : add #include's for visibility of prototypes to their function definitions move some typedefs to "typedef.h" 2010-07-30 Robert Larice * src/include/ifsim.h , * src/include/inpptree.h , * src/ngproc2mod.c , * src/spicelib/devices/bsim3/bsim3def.h , * src/spicelib/devices/bsim3/bsim3ext.h , * src/spicelib/devices/bsim3soi/b4soidef.h , * src/spicelib/devices/bsim3soi/b4soiext.h , * src/spicelib/devices/bsim3v1/bsim3v1def.h , * src/spicelib/devices/bsim4/bsim4def.h , * src/spicelib/devices/bsim4/bsim4ext.h , * src/spicelib/devices/bsim4v2/bsim4v2def.h , * src/spicelib/devices/bsim4v2/bsim4v2ext.h , * src/spicelib/devices/bsim4v3/bsim4v3def.h , * src/spicelib/devices/bsim4v3/bsim4v3ext.h , * src/spicelib/devices/bsim4v4/bsim4v4def.h , * src/spicelib/devices/bsim4v5/bsim4v5def.h , * src/spicelib/devices/bsim4v5/bsim4v5ext.h , * src/spicelib/devices/hisim/hsm1eval102.c , * src/spicelib/devices/hisim/hsm1eval112.c , * src/spicelib/devices/hisim/hsm1eval120.c , * src/spicelib/devices/jfet2/psmodel.h : remove some #ifdef __STDC__ wrappers, and some stray '#' 2010-07-30 Robert Larice * src/frontend/plotting/agraf.c , * src/spicelib/devices/bsim2/b2set.c , * src/spicelib/devices/bsim4v2/b4v2set.c , * src/spicelib/devices/bsim4v3/b4v3set.c , * src/spicelib/devices/bsim4v4/b4v4set.c , * src/spicelib/devices/bsim4v5/b4v5set.c : fix some literal floating point constants, which should have been integers 2010-07-25 Holger Vogt * inpcom.c: correct loop parameter i -> pai, remove unnecessary output 2010-07-24 Robert Larice * src/include/cktdefs.h , * src/include/devdefs.h , * src/spicelib/analysis/acan.c , * src/spicelib/analysis/cktdest.c , * src/spicelib/analysis/cktdisto.c , * src/spicelib/analysis/cktdump.c , * src/spicelib/analysis/cktfbran.c , * src/spicelib/analysis/cktfndm.c , * src/spicelib/analysis/ckti2nod.c , * src/spicelib/analysis/cktic.c , * src/spicelib/analysis/cktload.c , * src/spicelib/analysis/cktmask.c , * src/spicelib/analysis/cktmcrt.c , * src/spicelib/analysis/cktmpar.c , * src/spicelib/analysis/cktnoise.c , * src/spicelib/analysis/cktop.c , * src/spicelib/analysis/cktparam.c , * src/spicelib/analysis/cktpartn.c , * src/spicelib/analysis/cktpmnam.c , * src/spicelib/analysis/cktpname.c , * src/spicelib/analysis/cktpzld.c , * src/spicelib/analysis/cktpzset.c , * src/spicelib/analysis/cktsens.c , * src/spicelib/analysis/cktsetup.c , * src/spicelib/analysis/cktsgen.c , * src/spicelib/analysis/ckttemp.c , * src/spicelib/analysis/ckttroub.c , * src/spicelib/analysis/ckttrunc.c , * src/spicelib/analysis/ckttyplk.c , * src/spicelib/analysis/dctrcurv.c , * src/spicelib/devices/cktfinddev.c , * src/unsupported/cktsenup.c , * src/unsupported/cktsnld.c , * src/unsupported/cktsnprt.c , * src/unsupported/cktsnset.c , * src/xspice/evt/evtload.c , * src/xspice/mif/mif_inp2.c , * src/xspice/mif/mifask.c , * src/xspice/mif/mifgetmod.c , * src/xspice/mif/mifload.c , * src/xspice/mif/mifmask.c , * src/xspice/mif/mifmpara.c , * src/xspice/mif/mifsetup.c : find a suitable home for **DEVices and DEVmaxnum in devdefs.h 2010-07-24 Robert Larice * src/frontend/help/help.c , * src/frontend/misccoms.c , * src/spicelib/devices/dev.c , * src/xspice/cmpp/pp_mod.c , * src/xspice/cmpp/read_ifs.c : muffle `nested extern' warnings, and drop a handcrafted malloc prototype 2010-07-24 Robert Larice * src/ciderlib/input/meshset.c , * src/frontend/breakp.c , * src/frontend/com_alias.c , * src/frontend/define.c , * src/frontend/dotcards.c , * src/frontend/inpcom.c , * src/frontend/numparam/xpressn.c , * src/frontend/parser/backq.c , * src/frontend/parser/lexical.c , * src/frontend/runcoms.c , * src/frontend/shyu.c , * src/frontend/variable.c , * src/misc/string.c , * src/misc/util.c , * src/misc/wlist.c , * src/spicelib/devices/cpl/cplload.c , * src/spicelib/devices/txl/txlload.c , * src/spicelib/parser/inp2dot.c , * src/xspice/cmpp/mod_yacc.y : muffle compiler warnings suggest a space before ';' or explicit braces around empty and similar things. 2010-07-24 Robert Larice * src/frontend/inpcom.c , * src/spicelib/devices/ndev/ndevparm.c , * src/spicelib/parser/inp2n.c , * src/spicelib/parser/inppas2.c , * src/xspice/cm/cmevt.c : muffle `unused variable' warnings 2010-07-24 Robert Larice * src/frontend/plotting/x11.c : muffle `may be used uninitialized' warnings 2010-07-24 Robert Larice * src/spicelib/devices/bsim3soi/b4soi.c , * src/spicelib/devices/bsim3soi/b4soiacld.c , * src/spicelib/devices/bsim3soi/b4soiask.c , * src/spicelib/devices/bsim3soi/b4soicheck.c , * src/spicelib/devices/bsim3soi/b4soicvtest.c , * src/spicelib/devices/bsim3soi/b4soidel.c , * src/spicelib/devices/bsim3soi/b4soidest.c , * src/spicelib/devices/bsim3soi/b4soigetic.c , * src/spicelib/devices/bsim3soi/b4soild.c , * src/spicelib/devices/bsim3soi/b4soimask.c , * src/spicelib/devices/bsim3soi/b4soimdel.c , * src/spicelib/devices/bsim3soi/b4soimpar.c , * src/spicelib/devices/bsim3soi/b4soinoi.c , * src/spicelib/devices/bsim3soi/b4soipar.c , * src/spicelib/devices/bsim3soi/b4soipzld.c , * src/spicelib/devices/bsim3soi/b4soiset.c , * src/spicelib/devices/bsim3soi/b4soitemp.c , * src/spicelib/devices/bsim3soi/b4soitrunc.c : remove static char rcsid to muffle `unused variable' warnings 2010-07-24 Robert Larice * src/include/inpdefs.h , * src/spicelib/devices/ndev/ndevacld.c , * src/spicelib/devices/ndev/ndevask.c , * src/spicelib/devices/ndev/ndevdel.c , * src/spicelib/devices/ndev/ndevdump.c , * src/spicelib/devices/ndev/ndevmdel.c , * src/spicelib/devices/ndev/ndevparm.c , * src/spicelib/devices/ndev/ndevpzld.c , * src/spicelib/devices/ndev/ndevset.c , * src/spicelib/devices/ndev/ndevtemp.c , * src/spicelib/devices/ndev/ndevtrun.c , * src/spicelib/parser/inp2n.c : convert K&R function definitions to ansi style use the GENmodel and GENinstance type instead of void* 2010-07-24 Robert Larice fix dangerous things, potential bugs, at least for big endian machines * src/frontend/inp.c , a bool (unsigned char) and an int have been mixed, and the address of the thing was taken. should fail on a big endian machine * src/frontend/spiceif.c , the value of an union, made of a bool (unsigned char), an int, etc, is silently cast into an int. This can introduce stack noise, in the CP_BOOL case * src/frontend/variable.c : a `variable' is created with type CP_NUM, but only bool was initialized. This can introduce stack noise. 2010-07-24 Robert Larice * src/include/onedev.h , * src/include/twodev.h : add two #include files, to fix broken cider compilation, caused by the changes from 2010-07-23 2010-07-24 Robert Larice * src/frontend/evaluate.c , * src/frontend/parse.c , * src/include/fteext.h , * src/include/fteparse.h , * src/maths/cmaths/cmath2.c , * src/maths/cmaths/cmath2.h : fix the type signature of the cx_* functions 2010-07-23 Robert Larice * src/include/smpdefs.h , * src/include/spmatrix.h : better place for the prototype of spConstMult() 2010-07-23 Robert Larice * src/ciderlib/oned/onecont.c , * src/ciderlib/oned/onepoiss.c , * src/ciderlib/twod/twocont.c , * src/ciderlib/twod/twoncont.c , * src/ciderlib/twod/twopcont.c , * src/ciderlib/twod/twopoiss.c : use the type SMPmatrix instead of char * remove some redundant forward function declarations remove some redundant nested function declarations 2010-07-23 Robert Larice * src/ngmultidec.c , * src/include/onedev.h , * src/include/smpdefs.h , * src/include/spmatrix.h , * src/include/twodev.h , * src/maths/sparse/spalloc.c , * src/maths/sparse/spbuild.c , * src/maths/sparse/spdefs.h , * src/maths/sparse/spfactor.c , * src/maths/sparse/spoutput.c , * src/maths/sparse/spsmp.c , * src/maths/sparse/spsolve.c , * src/maths/sparse/sputils.c , * src/spicelib/analysis/cktacct.c : use the types MatrixPtr and SMPmatrix instead of void and char * both are the same thing, MatrixPtr is used inside the sparse/* domain, SMPmatrix is used in the rest of spice remove casts, which are no longer necessary 2010-07-23 Robert Larice * src/include/spmatrix.h , * src/maths/sparse/spbuild.c , * src/maths/sparse/spdefs.h : use a void* instead of a char* for anonymous `InitInfo' in src/sparse/*.c 2010-07-23 Robert Larice * src/maths/sparse/sputils.c : convert K&R function definitions to ansi style 2010-07-20 Robert Larice * src/frontend/com_option.c , * src/frontend/com_set.c , * src/frontend/com_strcmp.c , * src/frontend/cpitf.c , * src/frontend/dotcards.c , * src/frontend/init.c , * src/frontend/inp.c , * src/frontend/variable.c , * src/frontend/variable.h , * src/frontend/wdisp/windisp.c , * src/include/cpextern.h : use a void * for the third argument (&value) of the cp_vset() function (polymorphic, has been claimed to be char *) 2010-07-20 Robert Larice * src/tclspice.c : drop #include , (even for non MSC_VER) 2010-07-20 Robert Larice * src/main.c : fix an incorrect type, (&char versus &bool) 2010-07-20 Robert Larice * src/frontend/inp.c , * src/frontend/misccoms.c , * src/frontend/postcoms.c , * src/frontend/rawfile.c , * src/frontend/spec.c , * src/frontend/subckt.c , * src/frontend/plotting/agraf.c : Change remaining code to use the new usage pattern cp_getvar(,CP_BOOL,NULL) 2010-07-20 Robert Larice * src/frontend/com_display.c , * src/frontend/device.c , * src/frontend/inp.c , * src/frontend/inpcom.c , * src/frontend/measure.c , * src/frontend/nutinp.c , * src/frontend/outitf.c , * src/frontend/terminal.c , * src/frontend/variable.c , * src/frontend/plotting/graf.c , * src/frontend/plotting/x11.c : allow cp_getvar(,CP_BOOL,NULL) to avoid insane usage The third parameter is a pointer to the result value. Frequently only the function return value is used, (presence or nonpresence of the variable) and the third parameter points to an unused variable. Even worse, in several cases a dummy variable of incorrect type is used for that purpose. Thus, allow the third parameter to be NULL, and kill those dummy variables. 2010-07-19 Holger Vogt * b4ld.c: correct typo which led to non-convergence of ro_17.cir 2010-07-17 Robert Larice * src/main.c , * src/frontend/inp.c , * src/frontend/options.c , * src/frontend/spiceif.c , * src/frontend/spiceif.h , * src/include/fteext.h : use type void* to pass anonymous data to function if_option() indicate its actual type with an enum cp_types argument 2010-07-17 Robert Larice * src/frontend/variable.c , * src/frontend/variable.h , * src/frontend/vectors.c , * src/frontend/plotting/graf.c : replace vt_types -> cp_types to complete the last change, lets rename the enum itself as well replacement was done mechanical, with perl -pi -e 's/vt_types/cp_types/g' $(git grep -le '\bvt_types' | grep -v ChangeLog) * src/include/cpextern.h : fix a comment, reflecting the VT_ -> CP_ change 2010-07-17 Robert Larice * src/* : textual replacement VT_* to CP_* these are the enum constans of `enum vp_types' . VT_* is allready used in the windows world. lets use CP_* to avoid conflicts. replacement was done mechanical, with: perl -pi -e 's/VT_(BOOL|NUM|REAL|STRING|LIST)/CP_\1/g' $(git grep -le '\bVT_') 2010-07-17 Robert Larice * src/frontend/variable.c , * src/frontend/variable.h , * src/frontend/plotting/agraf.c , * src/frontend/plotting/gnuplot.c , * src/frontend/plotting/graf.c , * src/frontend/plotting/plotcurv.c , * src/frontend/plotting/plotit.c , * src/frontend/plotting/xgraph.c , * src/frontend/wdisp/windisp.c , * src/include/cpextern.h , * src/maths/cmaths/cmath4.c , * src/maths/misc/randnumb.c , * src/spicelib/devices/bsim3/b3par.c , * src/spicelib/devices/bsim3/b3set.c , * src/spicelib/devices/bsim3soi/b4soiset.c , * src/spicelib/devices/bsim3v0/b3v0par.c , * src/spicelib/devices/bsim3v1/b3v1par.c , * src/spicelib/devices/bsim3v1a/b3v1apar.c , * src/spicelib/devices/bsim3v1s/b3v1spar.c , * src/spicelib/devices/bsim3v32/b3v32par.c , * src/spicelib/devices/bsim4/b4par.c , * src/spicelib/devices/bsim4/b4set.c , * src/spicelib/devices/bsim4v2/b4v2par.c , * src/spicelib/devices/bsim4v3/b4v3par.c , * src/spicelib/devices/bsim4v4/b4v4par.c , * src/spicelib/devices/bsim4v5/b4v5par.c , * src/spicelib/parser/inpgmod.c : consolidate enum cp_types and enum vt_types . use this enum for some function arguments and struct members . drop some include "variable.h" which are no longer needed , propably many more could be droped . drop #define VT_* which have been used as workaround for the type mess . 2010-07-17 Holger Vogt * typesdef.c: correct the number of available types and plots 2010-07-16 Robert Larice * src/ngsconvert.c , * src/frontend/define.c , * src/frontend/define.h , * src/frontend/vectors.c , * src/frontend/vectors.h , * src/include/fteext.h : `const' qualifier for char* arguments of vec_get() and ft_substdef() 2010-07-16 Robert Larice * src/xspice/icm/xtraevt/d_to_real/cfunc.mod , * src/xspice/icm/xtraevt/real_delay/cfunc.mod , * src/xspice/icm/xtraevt/real_gain/cfunc.mod , * src/xspice/icm/xtraevt/real_to_v/cfunc.mod : xspice, xtraevt/*real*, add casts to `INPUT' and `OUTPUT' the *.ifs files specify this to be `real' yet the *.mod translator seems to be incomplete, and delivers void * 2010-07-16 Robert Larice * src/xspice/icm/analog/multi_input_pwl/cfunc.mod : add a missing `const' qualifier 2010-07-16 Robert Larice * src/xspice/icm/digital/d_fdiv/cfunc.mod : xspice, digital/d_fdiv, fix the type of counter and counter_old from Digital_State_t to int 2010-07-16 Robert Larice * src/xspice/icm/digital/d_dff/cfunc.mod , * src/xspice/icm/digital/d_dlatch/cfunc.mod , * src/xspice/icm/digital/d_jkff/cfunc.mod , * src/xspice/icm/digital/d_srff/cfunc.mod , * src/xspice/icm/digital/d_srlatch/cfunc.mod , * src/xspice/icm/digital/d_tff/cfunc.mod : xspice, flip-flops, cast the `ic' PARAM to Digitial_State_t the *.ifs file claims this parameter to be an integer in range 0..2 meant to represent ZERO, ONE and UNKNOWN * src/xspice/icm/digital/d_ram/cfunc.mod : xspice, the same fix for `ram' 2010-07-16 Robert Larice * src/xspice/icm/analog/pwl/cfunc.mod , * src/xspice/icm/spice2poly/icm_spice2poly/cfunc.mod , * src/xspice/icm/xtradev/zener/cfunc.mod : xspice, cast so called `STATIC_VAR' pointers to their concrete type 2010-07-14 Holger Vogt * commands.c, options.c, fteext.h, inp.c: option command in spinit or control section as enhancement to .options command 2010-07-14 Robert Larice * src/frontend/commands.c : remove leftover /*FALSE,*/ comments from the last commit, which where left for the single purpose of better visualization in a diff tool. 2010-07-14 Robert Larice * src/frontend/commands.c , * src/frontend/control.c , * src/include/cpdefs.h : eliminate co_stringargs, which is used nowhere, yet is related to an incorrectly typed function call 2010-07-13 Robert Larice * src/frontend/device.c , * src/frontend/device.h , * src/frontend/gens.c , * src/frontend/gens.h * fix the argument types of the functions printstr_n printstr_m bogus1 and bogus2 to fit the type signature expected by the iterator dgen_for_n() 2010-07-13 Robert Larice * src/frontend/device.c , * src/frontend/device.h : split the function printstr() into printstr_n() and printstr_m() printstr() is exclusively used as argument to the map function dgen_for_n() and misused a parameter to distinguish two separate functionalities. 2010-07-13 Robert Larice * src/frontend/gens.c , * src/frontend/gens.h : fix the type of the function pointer argument of wl_forall() 2010-07-11 Robert Larice * src/frontend/parse.c , * src/include/fteparse.h : fix function pointer initialization 2010-07-11 Robert Larice * src/frontend/numparam/spicenum.c , * src/frontend/numparam/xpressn.c , * src/misc/hash.c : add casts for void* returning functions 2010-07-11 Robert Larice * src/xspice/cmpp/mod_lex.l : for c++, lex input() function is named yyinput() 2010-07-11 Robert Larice * src/spicelib/parser/inpptree.c : missing (void*) casts 2010-07-11 Robert Larice * src/spicelib/analysis/cktsens.c : fix type and usage of some function pointers 2010-07-11 Robert Larice * src/spicelib/devices/dev.c : fix some function pointer casts 2010-07-11 Robert Larice * src/xspice/idn/idndig.c : missing casts 2010-07-11 Robert Larice * src/ngmultidec.c , * src/frontend/resource.c : tiny, fix two casts 2010-07-11 Robert Larice * src/xspice/icm/analog/oneshot/cfunc.mod , * src/xspice/icm/analog/pwl/cfunc.mod , * src/xspice/icm/analog/sine/cfunc.mod , * src/xspice/icm/analog/square/cfunc.mod , * src/xspice/icm/analog/triangle/cfunc.mod , * src/xspice/icm/digital/d_osc/cfunc.mod , * src/xspice/icm/xtradev/core/cfunc.mod : dont compare with '\0' when NULL was meant 2010-07-11 Robert Larice * src/spicelib/devices/vccs/vccsask.c , * src/spicelib/devices/vccs/vccsdel.c , * src/spicelib/devices/vccs/vccsdest.c , * src/spicelib/devices/vccs/vccsload.c , * src/spicelib/devices/vccs/vccsmdel.c , * src/spicelib/devices/vccs/vccspar.c , * src/spicelib/devices/vccs/vccspzld.c , * src/spicelib/devices/vccs/vccssacl.c , * src/spicelib/devices/vccs/vccsset.c , * src/spicelib/devices/vccs/vccssld.c , * src/spicelib/devices/vccs/vccssprt.c , * src/spicelib/devices/vccs/vccssset.c : #include "vccsext.h" to make the function declarations visible to their function definitions 2010-07-11 Robert Larice * src/xspice/icm/xtraevt/int/udnfunc.c , * src/xspice/icm/xtraevt/real/udnfunc.c : cast the udn*() function args 2010-07-10 Robert Larice * src/include/spmatrix.h , * src/maths/sparse/spbuild.c : ansi style function args for a function pointer arg of spInitialize() NOTE: split personality, user interface talks about `spREAL' which is internally refered to as `RealNumber' 2010-07-10 Holger Vogt * com_measure2.c: patch by Bill Swartz from 2010-07-04 2010-07-10 Robert Larice * src/xspice/icm/spice2poly/icm_spice2poly/cfunc.mod , * src/xspice/icm/xtradev/capacitor/cfunc.mod , * src/xspice/icm/xtradev/inductor/cfunc.mod : drop some malloc prototypes, use 2010-07-10 Robert Larice * src/include/lsort.h : ansi function declaration and definition for SORT() and SORT1() * src/xspice/cmpp/read_ifs.c : bool used, Boolean_t wanted. 2010-07-10 Robert Larice * src/include/miftypes.h , * src/xspice/mif/mifload.c , * src/xspice/mif/mifsetup.c , * src/xspice/mif/mifutil.c : extend the Mif_Cntl_Src_Type_t enum, to avoid mixed use with integer -1. FIXME, the switch() in mifsetup.c looks suspicious. 2010-07-10 Holger Vogt * com_measure2.c: allow variables v(n1)=v(n2) * inpcom.c: par('expression') in .four, .plot, .print, .meas, .save, command .probe added * string.c, ngspice.h: new fcn gettok_iv() 2010-07-09 Robert Larice * src/frontend/spiceif.c , * src/spicelib/analysis/tfanal.c , * src/spicelib/parser/inpaname.c : upgrade some casts from void* to more specific type 2010-07-09 Robert Larice * src/xspice/cm/cm.c , * src/xspice/cm/cmevt.c , * src/xspice/cmpp/pp_lst.c , * src/xspice/cmpp/writ_ifs.c , * src/xspice/enh/enhtrans.c , * src/xspice/evt/evtdump.c , * src/xspice/evt/evtinit.c , * src/xspice/evt/evtiter.c , * src/xspice/evt/evtload.c , * src/xspice/evt/evtnode_copy.c , * src/xspice/evt/evtop.c , * src/xspice/evt/evtplot.c , * src/xspice/evt/evtqueue.c , * src/xspice/evt/evtsetup.c , * src/xspice/evt/evttermi.c , * src/xspice/icm/digital/d_source/cfunc.mod , * src/xspice/icm/digital/d_state/cfunc.mod , * src/xspice/icm/spice2poly/icm_spice2poly/cfunc.mod , * src/xspice/icm/xtraevt/int/udnfunc.c , * src/xspice/icm/xtraevt/real/udnfunc.c , * src/xspice/ipc/ipctiein.c , * src/xspice/mif/mif_inp2.c , * src/xspice/mif/mifask.c , * src/xspice/mif/mifgetmod.c , * src/xspice/mif/mifgetvalue.c , * src/xspice/mif/mifmask.c , * src/xspice/mif/mifmpara.c , * src/xspice/mif/mifsetup.c , * src/xspice/mif/mifutil.c : add and fix casts to the return values of malloc() function calls 2010-07-08 Robert Larice * src/xspice/ipc/ipc.c , * src/xspice/mif/mif_inp2.c , * src/xspice/mif/mifgetmod.c : fix some few casts. 2010-07-08 Robert Larice * src/tclspice.c , * src/frontend/outitf.c , * src/frontend/spiceif.c , * src/spicelib/parser/ifnewuid.c : INPtables, remove some casts, which are no longer necessary 2010-07-08 Robert Larice * src/tclspice.c , * src/frontend/outitf.h , * src/frontend/spiceif.c , * src/include/cktdefs.h , * src/include/ifsim.h , * src/include/inpdefs.h , * src/spicelib/analysis/ckt.h , * src/spicelib/analysis/cktfndm.c , * src/spicelib/analysis/cktmask.c , * src/spicelib/analysis/cktmcrt.c , * src/spicelib/analysis/cktmpar.c , * src/spicelib/analysis/cktpmnam.c , * src/spicelib/analysis/noisean.c , * src/spicelib/analysis/tfanal.c , * src/spicelib/devices/cktask.c , * src/spicelib/devices/cktcrte.c , * src/spicelib/devices/cktfinddev.c , * src/spicelib/devices/ind/mutsetup.c , * src/spicelib/devices/urc/urcsetup.c , * src/spicelib/parser/inp.h , * src/spicelib/parser/inp2b.c , * src/spicelib/parser/inp2c.c , * src/spicelib/parser/inp2d.c , * src/spicelib/parser/inp2e.c , * src/spicelib/parser/inp2f.c , * src/spicelib/parser/inp2g.c , * src/spicelib/parser/inp2h.c , * src/spicelib/parser/inp2i.c , * src/spicelib/parser/inp2j.c , * src/spicelib/parser/inp2k.c , * src/spicelib/parser/inp2l.c , * src/spicelib/parser/inp2m.c , * src/spicelib/parser/inp2n.c , * src/spicelib/parser/inp2o.c , * src/spicelib/parser/inp2p.c , * src/spicelib/parser/inp2q.c , * src/spicelib/parser/inp2r.c , * src/spicelib/parser/inp2s.c , * src/spicelib/parser/inp2t.c , * src/spicelib/parser/inp2u.c , * src/spicelib/parser/inp2v.c , * src/spicelib/parser/inp2w.c , * src/spicelib/parser/inp2y.c , * src/spicelib/parser/inp2z.c , * src/spicelib/parser/inpaname.c , * src/spicelib/parser/inppname.c : use the GENmodel and GENinstance type instead of void* 2010-07-07 Robert Larice * src/include/dllitf.h , * src/include/mifproto.h , * src/xspice/icm/dlmain.c , * src/xspice/mif/mif_inp2.c , * src/xspice/mif/mifgetmod.c , * src/xspice/mif/mifgetvalue.c : the fourth of a series of four patches, which will change the code to use the CKTcircuit type instead of the current mixed void*/char* 2010-07-07 Robert Larice * src/main.c , * src/ngnutmeg.c , * src/ngspice.c , * src/frontend/outitf.c , * src/frontend/outitf.h , * src/frontend/shyu.c , * src/frontend/spiceif.c , * src/frontend/where.c , * src/include/cktdefs.h , * src/include/ifsim.h , * src/include/inpdefs.h , * src/include/ipcproto.h , * src/maths/ni/nidest.c , * src/spicelib/analysis/acan.c , * src/spicelib/analysis/ckt.h , * src/spicelib/analysis/cktasknq.c , * src/spicelib/analysis/cktdelt.c , * src/spicelib/analysis/cktdest.c , * src/spicelib/analysis/cktdlti.c , * src/spicelib/analysis/cktdltm.c , * src/spicelib/analysis/cktdltn.c , * src/spicelib/analysis/cktdojob.c , * src/spicelib/analysis/cktfnda.c , * src/spicelib/analysis/cktfndm.c , * src/spicelib/analysis/cktfnode.c , * src/spicelib/analysis/cktftask.c , * src/spicelib/analysis/cktgrnd.c , * src/spicelib/analysis/ckti2nod.c , * src/spicelib/analysis/cktmapn.c , * src/spicelib/analysis/cktmask.c , * src/spicelib/analysis/cktmcrt.c , * src/spicelib/analysis/cktmkcur.c , * src/spicelib/analysis/cktmkvol.c , * src/spicelib/analysis/cktmpar.c , * src/spicelib/analysis/cktnewan.c , * src/spicelib/analysis/cktneweq.c , * src/spicelib/analysis/cktnewn.c , * src/spicelib/analysis/cktntask.c , * src/spicelib/analysis/cktnum2n.c , * src/spicelib/analysis/cktparam.c , * src/spicelib/analysis/cktpmnam.c , * src/spicelib/analysis/cktpname.c , * src/spicelib/analysis/cktsens.c , * src/spicelib/analysis/cktsetnp.c , * src/spicelib/analysis/ckttroub.c , * src/spicelib/analysis/dcop.c , * src/spicelib/analysis/dctran.c , * src/spicelib/analysis/dctrcurv.c , * src/spicelib/analysis/distoan.c , * src/spicelib/analysis/noisean.c , * src/spicelib/analysis/pzan.c , * src/spicelib/analysis/tfanal.c , * src/spicelib/devices/cktask.c , * src/spicelib/devices/cktbindnode.c , * src/spicelib/devices/cktcrte.c , * src/spicelib/devices/cktfinddev.c , * src/spicelib/devices/ind/mutsetup.c , * src/spicelib/devices/urc/urcsetup.c , * src/spicelib/parser/ifnewuid.c , * src/spicelib/parser/inp.h , * src/spicelib/parser/inp2b.c , * src/spicelib/parser/inp2c.c , * src/spicelib/parser/inp2d.c , * src/spicelib/parser/inp2dot.c , * src/spicelib/parser/inp2e.c , * src/spicelib/parser/inp2f.c , * src/spicelib/parser/inp2g.c , * src/spicelib/parser/inp2h.c , * src/spicelib/parser/inp2i.c , * src/spicelib/parser/inp2j.c , * src/spicelib/parser/inp2k.c , * src/spicelib/parser/inp2l.c , * src/spicelib/parser/inp2m.c , * src/spicelib/parser/inp2n.c , * src/spicelib/parser/inp2o.c , * src/spicelib/parser/inp2p.c , * src/spicelib/parser/inp2q.c , * src/spicelib/parser/inp2r.c , * src/spicelib/parser/inp2s.c , * src/spicelib/parser/inp2t.c , * src/spicelib/parser/inp2u.c , * src/spicelib/parser/inp2v.c , * src/spicelib/parser/inp2w.c , * src/spicelib/parser/inp2y.c , * src/spicelib/parser/inp2z.c , * src/spicelib/parser/inpaname.c , * src/spicelib/parser/inpdomod.c , * src/spicelib/parser/inpdpar.c , * src/spicelib/parser/inpgmod.c , * src/spicelib/parser/inpgval.c , * src/spicelib/parser/inppas3.c , * src/spicelib/parser/inppas3.h , * src/spicelib/parser/inppname.c , * src/spicelib/parser/inpptree.c , * src/spicelib/parser/inpsymt.c , * src/xspice/ipc/ipctiein.c : the third of a series of four patches, which will change the code to use the CKTcircuit type instead of the current mixed void*/char* 2010-07-07 Robert Larice * src/include/cktdefs.h , * src/include/ifsim.h , * src/spicelib/analysis/ckt.h , * src/spicelib/analysis/cktaskaq.c : the second of a series of four patches, which will change the code to use the CKTcircuit type instead of the current mixed void*/char* 2010-07-07 Robert Larice * src/tclspice.c , * src/frontend/com_option.c , * src/frontend/inp.c , * src/frontend/resource.c , * src/frontend/shyu.c , * src/frontend/spiceif.c , * src/include/cktdefs.h , * src/include/ftedefs.h , * src/include/ifsim.h , * src/include/inpdefs.h , * src/spicelib/analysis/ckt.h , * src/spicelib/analysis/cktsetap.c , * src/spicelib/devices/cktinit.c , * src/spicelib/parser/inp.h , * src/spicelib/parser/inp2dot.c , * src/spicelib/parser/inpapnam.c , * src/spicelib/parser/inpdoopt.c , * src/spicelib/parser/inpgtitl.c , * src/spicelib/parser/inppas1.c , * src/spicelib/parser/inppas1.h , * src/spicelib/parser/inppas2.c , * src/spicelib/parser/inppas2.h : the first of a series of four patches, which will change the code to use the CKTcircuit type instead of the current mixed void*/char* 2010-07-06 Robert Larice * src/include/fteext.h : ansi function declarations (prototypes) for some functions 2010-07-06 Robert Larice * src/main.c , * src/frontend/nutmegif.c , * src/frontend/nutmegif.h , * src/frontend/shyu.c , * src/frontend/shyu.h , * src/frontend/spiceif.c , * src/frontend/spiceif.h , * src/include/fteext.h : fix the type signature of the if_*() family of functions. some incompatible pointer passing warnings will pop up, and will be fixed later. 2010-07-06 Robert Larice * src/include/typedefs.h : new include file for struct forward declarations and for typedefs * src/include/cktdefs.h , * src/include/gendefs.h , * src/include/graph.h , * src/include/ifsim.h , * src/include/mifcmdat.h , * src/include/ngspice.h , * src/include/tfdefs.h : make use of the new include file. 2010-07-06 Holger Vogt * defines.h: void fcn prototype instead of sighandler_t for MINGW, CYGWIN and MSC * src/spectrum: update of script with explanations * b4soild.c: debug warnings removed 2010-07-05 Robert Larice * src/xspice/cmpp/writ_ifs.c : add initialization of the struct IFdevice.flags element to the generated code. We initialize to 0, which is what the C compiler used as default so far. 2010-07-05 Robert Larice * src/xspice/icm/analog/d_dt/cfunc.mod , * src/xspice/icm/analog/hyst/cfunc.mod , * src/xspice/icm/analog/int/cfunc.mod , * src/xspice/icm/analog/oneshot/cfunc.mod , * src/xspice/icm/analog/s_xfer/cfunc.mod , * src/xspice/icm/analog/sine/cfunc.mod , * src/xspice/icm/analog/slew/cfunc.mod , * src/xspice/icm/analog/square/cfunc.mod , * src/xspice/icm/analog/triangle/cfunc.mod , * src/xspice/icm/digital/adc_bridge/cfunc.mod , * src/xspice/icm/digital/d_osc/cfunc.mod , * src/xspice/icm/digital/dac_bridge/cfunc.mod , * src/xspice/icm/xtradev/capacitor/cfunc.mod , * src/xspice/icm/xtradev/core/cfunc.mod , * src/xspice/icm/xtradev/inductor/cfunc.mod , * src/xspice/icm/xtradev/lcouple/cfunc.mod , * src/xspice/icm/xtraevt/real_delay/cfunc.mod , * src/xspice/icm/xtraevt/real_to_v/cfunc.mod : cast the return values of the void* returning functions cm_event_get_ptr() and cm_analog_get_ptr() 2010-07-04 Robert Larice * src/frontend/evaluate.c : use void* instead of char* for anonymous data * src/frontend/outitf.c : use a rescasted parameter * src/frontend/outitf.h : make use of the existing enum GRIDTYPE * src/frontend/variable.c : add missing casts * src/spicelib/analysis/ckti2nod.c : drop an useless cast * src/include/hlpdefs.h : use the struct name instead of the typedef name 2010-07-04 Robert Larice * src/maths/sparse/spdefs.h : fix the type of an ancient anonymous pointer from char* to void* 2010-07-04 Robert Larice * src/include/defines.h : for non MSC: use sighandler_t from FIXME, should work for MSC as well, please check * src/include/fteext.h : ansi function declarations (prototypes) for some signal functions 2010-07-03 Robert Larice * src/frontend/evaluate.c , * src/include/fteparse.h : ansi style function args for some function pointers 2010-07-03 Robert Larice * src/ciderlib/support/database.c , * src/ciderlib/support/logfile.c , * src/ciderlib/support/suprem.c , * src/ciderlib/support/suprmitf.c , * src/ciderlib/twod/twosetup.c , * src/spicelib/devices/nbjt/nbjtacld.c , * src/spicelib/devices/nbjt/nbjtask.c , * src/spicelib/devices/nbjt/nbjtdel.c , * src/spicelib/devices/nbjt/nbjtdest.c , * src/spicelib/devices/nbjt/nbjtdump.c , * src/spicelib/devices/nbjt/nbjtload.c , * src/spicelib/devices/nbjt/nbjtmdel.c , * src/spicelib/devices/nbjt/nbjtmpar.c , * src/spicelib/devices/nbjt/nbjtparm.c , * src/spicelib/devices/nbjt/nbjtpzld.c , * src/spicelib/devices/nbjt/nbjtset.c , * src/spicelib/devices/nbjt/nbjttemp.c , * src/spicelib/devices/nbjt/nbjttrun.c , * src/spicelib/devices/nbjt2/nbt2acld.c , * src/spicelib/devices/nbjt2/nbt2ask.c , * src/spicelib/devices/nbjt2/nbt2del.c , * src/spicelib/devices/nbjt2/nbt2dest.c , * src/spicelib/devices/nbjt2/nbt2dump.c , * src/spicelib/devices/nbjt2/nbt2load.c , * src/spicelib/devices/nbjt2/nbt2mdel.c , * src/spicelib/devices/nbjt2/nbt2mpar.c , * src/spicelib/devices/nbjt2/nbt2parm.c , * src/spicelib/devices/nbjt2/nbt2pzld.c , * src/spicelib/devices/nbjt2/nbt2set.c , * src/spicelib/devices/nbjt2/nbt2temp.c , * src/spicelib/devices/nbjt2/nbt2trun.c , * src/spicelib/devices/numd/numdacld.c , * src/spicelib/devices/numd/numdask.c , * src/spicelib/devices/numd/numddel.c , * src/spicelib/devices/numd/numddest.c , * src/spicelib/devices/numd/numddump.c , * src/spicelib/devices/numd/numdload.c , * src/spicelib/devices/numd/numdmdel.c , * src/spicelib/devices/numd/numdmpar.c , * src/spicelib/devices/numd/numdparm.c , * src/spicelib/devices/numd/numdpzld.c , * src/spicelib/devices/numd/numdtemp.c , * src/spicelib/devices/numd/numdtrun.c , * src/spicelib/devices/numd2/nud2acld.c , * src/spicelib/devices/numd2/nud2ask.c , * src/spicelib/devices/numd2/nud2del.c , * src/spicelib/devices/numd2/nud2dest.c , * src/spicelib/devices/numd2/nud2dump.c , * src/spicelib/devices/numd2/nud2load.c , * src/spicelib/devices/numd2/nud2mdel.c , * src/spicelib/devices/numd2/nud2mpar.c , * src/spicelib/devices/numd2/nud2parm.c , * src/spicelib/devices/numd2/nud2pzld.c , * src/spicelib/devices/numd2/nud2set.c , * src/spicelib/devices/numd2/nud2temp.c , * src/spicelib/devices/numd2/nud2trun.c , * src/spicelib/devices/numos/nummacld.c , * src/spicelib/devices/numos/nummask.c , * src/spicelib/devices/numos/nummdel.c , * src/spicelib/devices/numos/nummdest.c , * src/spicelib/devices/numos/nummdump.c , * src/spicelib/devices/numos/nummload.c , * src/spicelib/devices/numos/nummmdel.c , * src/spicelib/devices/numos/nummmpar.c , * src/spicelib/devices/numos/nummparm.c , * src/spicelib/devices/numos/nummpzld.c , * src/spicelib/devices/numos/nummset.c , * src/spicelib/devices/numos/nummtemp.c , * src/spicelib/devices/numos/nummtrun.c : convert K&R function definitions to ansi style 2010-07-03 Robert Larice * src/frontend/subckt.c : drop unsued variable. * src/include/ngspice.h : add a missing extern * src/xspice/cmpp/ifs_lex.l : atof() and atoi() live in * src/frontend/parser/glob.c : cast the return values of malloc() function calls 2010-07-03 Robert Larice * src/include/cktdefs.h , * src/include/gendefs.h , * src/include/graph.h , * src/include/ifsim.h , * src/include/inpdefs.h , * src/include/tfdefs.h : whitespace change, cleanup, untabify 2010-07-03 Robert Larice * src/include/cktdefs.h , * src/include/gendefs.h , * src/include/graph.h , * src/include/ifsim.h , * src/include/inpdefs.h , * src/include/tfdefs.h : forward declaration of structs, unions and typedefs 2010-07-02 Robert Larice * src/spicelib/analysis/cktsens.c , * src/xspice/mif/mifload.c : ansi style function args for some function pointers 2010-07-02 Holger Vogt * src/frontend/inpcom.c : .TITLE line added * /bsim3soi/b4soild.c, b4soiset., b4soidef.h, DEVICES: OpenMP support for SOI model B4SOI, version 4.3.1. 2010-07-01 Holger Vogt * src/frontend/inpcom.c : no removal of white spaces in echo lines inside a control section 2010-07-01 Robert Larice * src/frontend/com_sysinfo.c , * src/frontend/display.c , * src/frontend/help/readhelp.c , * src/frontend/help/x11disp.c , * src/frontend/hpgl.c , * src/frontend/inpcom.c , * src/frontend/measure.c , * src/frontend/numparam/xpressn.c , * src/frontend/parser/complete.c , * src/frontend/plotting/agraf.c , * src/frontend/plotting/graf.c , * src/frontend/plotting/x11.c , * src/frontend/postsc.c , * src/frontend/quote.c , * src/frontend/subckt.c , * src/maths/ni/niinteg.c , * src/maths/ni/niiter.c , * src/misc/dstring.c , * src/misc/string.c , * src/misc/util.c , * src/misc/wlist.c , * src/spicelib/analysis/ckttroub.c , * src/spicelib/analysis/distoan.c , * src/spicelib/analysis/noisean.c , * src/spicelib/devices/bjt/bjtask.c , * src/spicelib/devices/bjt2/bjt2ask.c , * src/spicelib/devices/cap/capask.c , * src/spicelib/devices/cccs/cccsask.c , * src/spicelib/devices/ccvs/ccvsask.c , * src/spicelib/devices/cpl/cplsetup.c , * src/spicelib/devices/csw/cswask.c , * src/spicelib/devices/dio/dioask.c , * src/spicelib/devices/dio/diotemp.c , * src/spicelib/devices/hfet1/hfetask.c , * src/spicelib/devices/hfet2/hfet2ask.c , * src/spicelib/devices/ind/indask.c , * src/spicelib/devices/isrc/isrcask.c , * src/spicelib/devices/jfet/jfetask.c , * src/spicelib/devices/jfet2/jfet2ask.c , * src/spicelib/devices/mes/mesask.c , * src/spicelib/devices/mesa/mesaask.c , * src/spicelib/devices/mos1/mos1ask.c , * src/spicelib/devices/mos2/mos2ask.c , * src/spicelib/devices/mos3/mos3ask.c , * src/spicelib/devices/mos6/mos6ask.c , * src/spicelib/devices/mos9/mos9ask.c , * src/spicelib/devices/res/resask.c , * src/spicelib/devices/sw/swask.c , * src/spicelib/devices/vccs/vccsask.c , * src/spicelib/devices/vcvs/vcvsask.c , * src/spicelib/devices/vsrc/vsrcask.c , * src/spicelib/parser/inp2r.c , * src/spicelib/parser/inpdpar.c , * src/spicelib/parser/inpmktmp.c , * src/spicelib/parser/inpptree.c : cast the return values of malloc() function calls 2010-07-01 Robert Larice * src/frontend/inpcom.c, * src/spicelib/devices/cktinit.c : fix some typecasts to *malloc() return values 2010-07-01 Robert Larice * src/frontend/inpcom.c : explicit compare with NULL 2010-06-30 Robert Larice * src/frontend/com_ahelp.c : drop NULL casting * src/frontend/com_measure2.c : dont mix enum with integer * src/include/inpptree.h : add parameter-names to a prototype * src/spicelib/parser/ptfuncs.c : add casts to anonymous data 2010-06-30 Holger Vogt * inpcom.c: no braces in let, set commands inside control loop * glob.c: reinstate {$var} expansion (patch by R. Larice) 2010-06-30 Robert Larice * src/include/ftedev.h : ansi prototypes for the function pointers in struct DISPDEVICE typedef for those functions * src/frontend/hpgl.h , * src/frontend/plotting/plot5.h , * src/frontend/plotting/x11.c , * src/frontend/plotting/x11.h , * src/frontend/postsc.h , * src/frontend/wdisp/windisp.h , * src/frontend/wdisp/winprint.h , * src/include/tclspice.h : ansi prototypes, make use of the new typedefs * src/frontend/display.c : cast nodev and nop to the proper function type * src/frontend/wdisp/windisp.c , * src/frontend/wdisp/winprint.c : fix the type signature for the more or less unused _DefineColor() functions fix the type signature for the WIN_Text() function, drop unused CentiDegrees argument, which doesn't fit to struct DISPDEVICE 2010-06-29 Holger Vogt * inpcom.c lines 743, 744 correct malloc for 64 bit LINUX * inpcom.c, inpcom.h, nutinp.c, inp.c, fteext.h: Command files spinit and .spiceinit (comfile==TRUE) will not be treated by numparam processing. Comment_out_unused_subckt() will no longer process lines inside control section. 2010-06-28 Holger Vogt * bsim3/b3set.c b3ld.c bsim3def.h: new preproc flag USE_OMP3 * bsim4/b4set.c b4ld.c bsim4def.h: OpenMP support for BSIM4 model 2010-06-27 Robert Larice * src/xspice/enh/enhtrans.c: drop useless cast of a copy() return value 2010-06-27 Holger Vogt * numparam.h: short replaced by int 2010-06-27 Robert Larice * src/ciderlib/support/database.c, * src/frontend/com_let.c, * src/frontend/define.c, * src/frontend/gens.c, * src/frontend/plotting/graphdb.c, * src/frontend/plotting/plotcurv.c, * src/frontend/plotting/plotit.c, * src/frontend/postcoms.c, * src/frontend/vectors.c, * src/maths/poly/interpolate.c, * src/spicelib/analysis/dctran.c, * src/spicelib/analysis/dctrcurv.c, * src/spicelib/devices/nbjt/nbjtset.c, * src/spicelib/devices/nbjt/nbjttemp.c, * src/spicelib/devices/nbjt2/nbt2set.c, * src/spicelib/devices/nbjt2/nbt2temp.c, * src/spicelib/devices/numd/numdset.c, * src/spicelib/devices/numd/numdtemp.c, * src/spicelib/devices/numd2/nud2set.c, * src/spicelib/devices/numd2/nud2temp.c, * src/spicelib/devices/numos/nummset.c, * src/spicelib/devices/numos/nummtemp.c : drop the casts for pointer arguments of bcopy() and bzero() their arguments are declared to be void pointers. FIXME, src/frontend/vectors.c vec_mkfamily() ugly and propably simply incorrect pointer bistromatic, allocating v_realdata, but copying to v_compdata I left that one untouched, to be fixed later. 2010-06-27 Robert Larice * src/frontend/arg.c, * src/frontend/arg.h, * src/include/fteext.h : function arg_display() change the arguments from none, to two unused args. as to fit with struct comm.co_argfn function pointer add unused attribute later. 2010-06-27 Robert Larice * src/include/ipcproto.h, * src/xspice/cmpp/ifs_yacc.y, * src/xspice/cmpp/mod_yacc.y, * src/xspice/cmpp/pp_mod.c, * src/xspice/cmpp/read_ifs.c : ansi function declarations (prototypes) 2010-06-27 Robert Larice * src/main.c, * src/spicelib/devices/dev.c, * src/xspice/cm/cmmeters.c, * src/xspice/cmpp/ifs_lex.l, * src/xspice/cmpp/ifs_yacc.y, * src/xspice/cmpp/mod_yacc.y, * src/xspice/cmpp/pp_mod.c, * src/xspice/cmpp/read_ifs.c, * src/xspice/icm/digital/d_source/cfunc.mod, * src/xspice/icm/digital/d_state/cfunc.mod, * src/xspice/icm/dlmain.c, * src/xspice/ipc/ipc.c, * src/xspice/ipc/ipcsockets.c, * src/xspice/ipc/ipctiein.c, * src/xspice/mif/mif_inp2.c, * src/xspice/mif/mifgetvalue.c : convert K&R function definitions to ansi style 2010-06-26 Robert Larice * src/include/opdefs.h, * src/include/trandefs.h : ansi function declarations (prototypes) * src/ngproc2mod.c: exit() lives in 2010-06-26 Robert Larice * src/frontend/commands.c: NULL needs no cast 2010-06-26 Robert Larice * src/include/inpptree.h, * src/spicelib/parser/ifeval.c, * src/spicelib/parser/inpptree.c : avoid function pointer warnings 2010-06-25 Robert Larice * src/frontend/com_hardcopy.c, * src/maths/sparse/spbuild.c, * src/maths/sparse/spfactor.c, * src/maths/sparse/spoutput.c, * src/maths/sparse/spsolve.c, * src/maths/sparse/sputils.c, * src/spicelib/analysis/dcop.c, * src/spicelib/parser/inppas1.c, * src/xspice/ipc/ipcsockets.c : remove redundant nested function declarations 2010-06-25 Robert Larice * src/frontend/hpgl.h, * src/frontend/parser/glob.c, * src/include/cpdefs.h, * src/include/cpstd.h, * src/include/fteext.h ; remove abandoned / nowhere-to-be-found non-ansi prototypes 2010-06-24 Robert Larice * src/main.c : make use of allready defined enumerate Ipc_Status_t (IPC_STATUS_OK) * src/xspice/icm/digital/d_and/cfunc.mod, * src/xspice/icm/digital/d_buffer/cfunc.mod, * src/xspice/icm/digital/d_fdiv/cfunc.mod, * src/xspice/icm/digital/d_inverter/cfunc.mod, * src/xspice/icm/digital/d_nand/cfunc.mod,, * src/xspice/icm/digital/d_nor/cfunc.mod, * src/xspice/icm/digital/d_open_c/cfunc.mod, * src/xspice/icm/digital/d_open_e/cfunc.mod, * src/xspice/icm/digital/d_or/cfunc.mod,, * src/xspice/icm/digital/d_xnor/cfunc.mod, * src/xspice/icm/digital/d_xor/cfunc.mod : make use of allready defined enumerate Digital_State_t (ONE,ZERO) 2010-06-23 Holger Vogt * configure.in, INSTALL, DEVICES, bsim3/b3ld.c, bsim3/b3set.c, bsim3/bsim3def.f, spinit.in: Multi-core support with OpenMP for BSIM3 vers. 3.3.0 2010-06-23 Robert Larice * src/ngmultidec.c, * src/frontend/inpcom.c, * src/frontend/help/help.c, * src/frontend/numparam/numpaif.h, * src/frontend/numparam/xpressn.c, * src/include/cpextern.h, * src/include/cpstd.h, * src/include/dgen.h, * src/include/ftedbgra.h, * src/include/fteext.h, * src/include/hlpdefs.h, * src/include/inpptree.h, * src/include/sensgen.h, * src/include/tfdefs.h, * src/maths/cmaths/cmath2.c, * src/maths/ni/niniter.c, * src/spicelib/devices/cpl/cplload.c, * src/spicelib/devices/cpl/cplsetup.c : ansi function declarations (prototypes) 2010-06-23 Robert Larice * src/main.c, * src/frontend/com_measure2.c, * src/frontend/hpgl.c, * src/frontend/inpcom.c, * src/frontend/numparam/spicenum.c, * src/maths/misc/randnumb.c : ansi function definitions, type foo() {} --> type foo(void) {} 2010-06-23 Robert Larice * src/frontend/breakp.c, * src/frontend/com_let.c, * src/frontend/com_measure2.c, * src/frontend/com_sysinfo.c, * src/frontend/cpitf.c, * src/frontend/dotcards.c, * src/frontend/measure.c, * src/frontend/mw_coms.c, * src/frontend/mw_coms.h, * src/frontend/runcoms.c, * src/frontend/runcoms2.c, * src/frontend/where.c, * src/frontend/where.h, * src/include/cpextern.h, * src/include/fteext.h : ansi function definitions and declarations for the com_*() functions. remove some casts to NULL. several com_*() functions don't use their argument, add unused attribute later. 2010-06-22 Holger Vogt * b4soild.c: line 7598 double assignment of Cbg1 removed * configure.in, /visualc/include/config.h: version 21plus ============================ Rework-21 ================================== 2010-06-20 Holger Vogt * COPYING: further update to version 21 2010-06-20 Robert Larice * Makefile.am, configure.in, manual/Makefile.am: undo the manual inclusion, see "2010-06-13 Robert Larice" the manual is now a package of its own, cvs checkout ngspice/ng-spice-manual cd ng-spice-manual ; ./configure make dist # for the tar ball, that is manual source plus pdf manual make install # to install the pdf 2010-06-20 Holger Vogt * AUTHORS, INSTALL, COPYING, README: update to version 21 2010-06-19 Holger Vogt * inpdomod.c: refernces to not existing MOS levels 60, 61 deleted. 2010-06-19 Holger Vogt * subckt.c: line indentations com_measure2.c: remove bug, see support tracker no. 3013968 inpcom.c: no braces around out_variable3 in .MEASURE {DC|AC|TRAN} result FIND out_variable WHEN out_variable2=out_variable3 2010-06-19 Robert Larice * ng-spice-rework/src/xspice/Makefile.am: exclude some junk from `make dist' `make dist' and `make ; make dist' should yield the same tar-ball know * ng-spice-rework/src/xspice/cmpp/Makefile.am: fix missing dependencies to compute ifs_yacc.h and mod_yacc.h to avoid ylwrap, and because bison is neccessairy somewhere else anyway, switched from $(YACC) to $(BISON) 2010-06-17 Holger Vogt * inpcom.c: in inp_fix_gnd_name() remove excessive white spaces around 0 after replacing "gnd" by " 0 " 2010-06-16 Holger Vogt * src/Makefile.am: for WINDOWS all of help files and related files excluded 2010-06-14 Robert Larice * Makefile.am: exclude libtool from `make dist', revert its recent inclusion * src/xspice/Makefile.am: exclude the compiled codemodels from `make dist' * src/xspice/cmpp/Makefile.am: eliminate an automake warning 2010-06-13 Robert Larice * Makefile.am, src/Makefile.am: add `libtool' to `make dist' add `src/spice.def' to `make dist' remove `src/ngspice.idx' from `make dist' it will be created new from `src/ngspice.txt' anyway 2010-06-13 Robert Larice * src/ciderlib/support/Makefile.am: add `readme' to `make dist' * src/spicelib/devices/bsim3/Makefile.am, * src/spicelib/devices/bsim3soi/Makefile.am, * src/spicelib/devices/bsim3soi_dd/Makefile.am, * src/spicelib/devices/bsim3soi_fd/Makefile.am, * src/spicelib/devices/bsim3soi_pd/Makefile.am, * src/spicelib/devices/bsim3v32/Makefile.am, * src/spicelib/devices/bsim4/Makefile.am, * src/spicelib/devices/bsim4v2/Makefile.am, * src/spicelib/devices/bsim4v3/Makefile.am, * src/spicelib/devices/bsim4v4/Makefile.am, * src/spicelib/devices/bsim4v5/Makefile.am: add some license files to `make dist' * tests/general/Makefile.am: add two tests, diffpair.cir and fourbitadder.cir, to `make dist' 2010-06-13 Robert Larice * Makefile.am, configure.in, manual/Makefile.am: make dist, shall compile manual.pdf from the lyx manual and include it in the 'dist' tar ball It is required to have checked out the CVS ng-spice-manuals module side by side with the CVS ng-spice-rework module 2010-06-13 Holger Vogt * NEWS updated 2010-06-12 Robert Larice * man/man1/ngnutmeg.1, man/man1/ngspice.1: smaller cleanup * man/man1/Makefile.am:: reintroduce those two man pages 2010-06-12 Holger Vogt * /visualc/include/config.h: update to version 21 * configure.in: version 21 * FAQ: update 2010-06-11 Holger Vogt * DEVICES: update 4.6.5 /man/man1/ngnutmeg.1 ngspice.1: updated with link to actual ngspice documentation 2010-06-11 Holger Vogt * ngspice.txt: notice to users: help file outdated 2010-06-04 Holger Vogt * inpcom.c: bug report 3008000, overflow of fixed array of used_subckt_names, used_model_names in fcn comment_out_unused_subckt_models removed by dynamic memory allocation 2010-06-03 Holger Vogt * src\spicelib\devices\bsim3soi b4soi.c b4soiacld.c b4soiask.c b4soicheck.c b4soicvtest.c b4soidef.h b4soidel.c b4soidest.c b4soiext.h b4soigetic.c b4soiinit.c b4soiinit.h b4soiitf.h b4soild.c b4soimask.c b4soimdel.c b4soimpar.c b4soinoi.c b4soipar.c b4soipzld.c b4soiset.c b4soitemp.c b4soitrunc.c: update to BSIM4SOI vers. 4.3.1 * misc/tilde.c: return path NULL added 2010-05-30 Holger Vogt * xgraph/dialog.c: fcn getline renamed to getline_xgraph * Makefile.am, frontend/Makefile.am include/Makefile.am spicelib/parser/Makefile.am, tests/bsim3soi/Makefile.am configure.in: updates to allow 'make dist' * com_hardcopy.c: allow filename without '.' * device.c, b4soiask.c, b4soiset.c, b4ask.c, b4v2ask.c, b4v3ask.c, b4v4ask.c, b4v5ask.c: add error handling and add questions for 'show all' 2010-05-27 Holger Vogt * inpcom.c: update B source pwl function handling 2010-05-26 Holger Vogt * xspice api update: cmcm_analog_alloc() and cm_event_alloc() ng-spice-rework/src/include/cmproto.h ng-spice-rework/src/include/dllitf.h ng-spice-rework/src/xspice/cm/cm.c ng-spice-rework/src/xspice/cm/cmevt.c ng-spice-rework/src/xspice/examples/nco/cfunc.mod .../src/xspice/examples/real_delay/cfunc.mod .../src/xspice/examples/real_to_v/cfunc.mod .../src/xspice/icm/analog/d_dt/cfunc.mod .../src/xspice/icm/analog/hyst/cfunc.mod .../src/xspice/icm/analog/int/cfunc.mod .../src/xspice/icm/analog/oneshot/cfunc.mod .../src/xspice/icm/analog/s_xfer/cfunc.mod .../src/xspice/icm/analog/sine/cfunc.mod .../src/xspice/icm/analog/slew/cfunc.mod .../src/xspice/icm/analog/square/cfunc.mod .../src/xspice/icm/analog/triangle/cfunc.mod .../src/xspice/icm/digital/adc_bridge/cfunc.mod .../src/xspice/icm/digital/d_and/cfunc.mod .../src/xspice/icm/digital/d_buffer/cfunc.mod .../src/xspice/icm/digital/d_dff/cfunc.mod .../src/xspice/icm/digital/d_dlatch/cfunc.mod .../src/xspice/icm/digital/d_fdiv/cfunc.mod .../src/xspice/icm/digital/d_inverter/cfunc.mod .../src/xspice/icm/digital/d_jkff/cfunc.mod .../src/xspice/icm/digital/d_nand/cfunc.mod .../src/xspice/icm/digital/d_nor/cfunc.mod .../src/xspice/icm/digital/d_open_c/cfunc.mod .../src/xspice/icm/digital/d_open_e/cfunc.mod .../src/xspice/icm/digital/d_or/cfunc.mod .../src/xspice/icm/digital/d_osc/cfunc.mod .../src/xspice/icm/digital/d_ram/cfunc.mod .../src/xspice/icm/digital/d_source/cfunc.mod .../src/xspice/icm/digital/d_srff/cfunc.mod .../src/xspice/icm/digital/d_srlatch/cfunc.mod .../src/xspice/icm/digital/d_state/cfunc.mod .../src/xspice/icm/digital/d_tff/cfunc.mod .../src/xspice/icm/digital/d_xnor/cfunc.mod .../src/xspice/icm/digital/d_xor/cfunc.mod .../src/xspice/icm/digital/dac_bridge/cfunc.mod ng-spice-rework/src/xspice/icm/dlmain.c .../src/xspice/icm/xtradev/capacitor/cfunc.mod .../src/xspice/icm/xtradev/core/cfunc.mod .../src/xspice/icm/xtradev/inductor/cfunc.mod .../src/xspice/icm/xtradev/lcouple/cfunc.mod .../src/xspice/icm/xtraevt/real_delay/cfunc.mod .../src/xspice/icm/xtraevt/real_to_v/cfunc.mod 2010-05-22 Holger Vogt * inpfindl.c: bugfix 3004317 allow level value number given by scientific notation 2010-05-21 Holger Vogt * inpcom.c: bugfix 2936702 correct handling of ternary fcn in numparam 2010-05-15 Holger Vogt * inpcom.c: exclude comment lines from stripping EOL comments, make ngspice abort if .inc fails. subckt.c: exclude *, and . lines from processing to getting rid of ( ) around node lists 2010-05-14 Holger Vogt * dllitf.h, cplsetup.c, cmexport.c, int/udnfunc.c, real/udnfunc.c, xspice.c: tmalloc patch by R Larice vngspice.sln, vngspice.proj: 64 bit support inpcom.c: exclude .control ... .endc lines from fcn inp_bsource_compat 2010-05-11 Holger Vogt * inpcom.c: new fcn inp_fix_gnd_name: 'gnd' replaced by ' 0 ', if delimiters are '(' or ' ' or ',' on the left and ')' or ' ' or ',' on the right. fcn inp_bsource_compat: 'm={m}' replaced by ' ' 2010-05-10 Holger Vogt * subckt.c:1349: fcn finishLine: add e. and h. to net name inside i(...). 2010-05-09 Holger Vogt * inpcom.c: patch 09/05/10 by Robert * spinit.in: add ngbehavior * inpptree.c: derivatives for fcns min and max 2010-05-08 Holger Vogt * inpcom.c: patch 02/05/10 by Robert: avoid subtraction from a builtin 1.0 * inpcom.c: update to E, G sources with expressions * inpcom.c, line 3707: put expression for dependent resistor in brackets 2010-04-26 Dietmar Warning * parser/inpgval.c: correct parsing of integer model parameter given as double (e.g. capmod=3.000e+00) 2010-04-23 Holger Vogt * xpressn.c: agauss is no. 20 main.c, inp.c, inpcom.c, compatmode.h, inpptree.h, ifeval.c, inpptree.c, ptfuncs.c: ngspice compatibility mode with various functions 2010-04-11 Dietmar Warning * Robert Larice patch to allow new operations in control blocks: * examples/new-check-3.sp, new-check-4.sp * src/include/fteparse.h, ngspice.h * src/frontend/parse*.*, evaluate.c, Makefile.am, src/misc/string.c, stringutil.h 2010-03-25 Dietmar Warning * Bill Swartz patch: * numparam/*.c, *.h, *.txt, misc/hash.c, string.c: local and global hash lists for subckts * misc/dstring.c, include/dstring.h, Makefile.am: dynamic string feature * analysis/cktop.c: remove the CR in some printf's 2010-03-20 Holger Vogt * variable.c:450 prevent ngspice from crashing after command 'unset zzz', when zzz is not defined 2010-03-20 Holger Vogt * com_compose.c: comment corrected * subckt.c, cktdefs.h, acan.c, ifeval.c, inp2b.c, inpptree.c, cktinit.c: Variable HERTZ added to B source 2010-03-16 Holger Vogt * xpressn.c: remove lines 291,292 2010-03-09 Dietmar Warning * analysis/cktop.c: remove the CR in some printf's, need some tests with different terminals * frontend/inp.c: cut the ouput message if wrong parameter warning to have a chance to read it * parser/inpgmod.c: want only the parameter names in output - not the values * devices/vbic/vbic.c: correct a typo of eais/eaic model parameter leading in wrong temperature model 2010-03-08 Holger Vogt * parse.c, inpptree.c, inpptree-parser.y, inpptree-parser.c, inpptree-parser.h: patches by R. Larice 2010-03-07 Holger Vogt * inpcom.c: test for .end improved (comments are now allowed in .end line) * xpressn.c: adding fcn sgn() to numparam function lib * inpptree.h,asrcacld.c,asrcload.c,asrcpzld.c,asrcset.c,ifeval.c,inpptree-parser.c, inpptree-parser.h,inpptree-parser.y,inpptree.c: patch R. Larice, add time and temper variables to B source 2010-03-07 Dietmar Warning * analysis/ninteg.c: limiting exp() in noise integration to prevent overflow and NAN (ID: 2950943). 2010-02-28 Dietmar Warning * com_gnuplot.c, gnuplot.c: cosmetics - missing LF on end * fteext.h: complete prototypes for typesdef.c * com_fft.c, com_fft.h: improve amplitude accuracy by considering zero padded vectors correct the gaussian window, add the flattop window, precise the FFT information, clean-up * cplsetup.c, cplload.c: omit complains from icc 2010-02-28 Holger Vogt * inpcom.c, xpressn.c, inpptree.h, spicelib/parser/makefile.am, inpptree.c, ptfuncs.c, inpptree-parser.y: replace parser for B source with BISON generated one. Patch 2 from R. Larice 2010-02-27 Holger Vogt * command.c, gnuplot.c, gnuplot.h, com_gnuplot.c, com_gnuplot.h, plotit.c: new command 'wrdata file vecs' for simple tabular printout of data 2010-02-26 Holger Vogt * vsrc.c, vsrcacct.c, vsrcask.c, vsrcdefs.h, vsrcload.c, vsrcpar.c: PWL source now has a repeat parameter (r=value) and a delay parameter (td=value) 2010-02-25 Holger Vogt * inpcom.c, general.h, mystring.c, numparam.h, spicenum.c, xpressn.c, include/makefile.am, misc/makefile.am, hash.c, hash.h: major bug-fix on numparam by Bill Swartz * subckt.c: bugfix on bxx_printf() * inp.c memory leak, line 707 wl_free(wl); added * ifeval.c, inpptree.c, inpptree.h: first try of ternary fcn in B source by Robert Larice * vngspice.sln, vngspice.vcproj: new files hash.c, .h added to project 2010-02-22 Dietmar Warning * xpressn.c, spicenum.c: more characters for real number insertion (up to 15) by introducing a long long placeholder 2010-02-21 Dietmar Warning * /devices/bsim3soi/*.*: bsimsoi update to Berkeley Version 4.3 2010-02-15 Holger Vogt * getopt_bsd.h, resask.c, optionssc.c: LF line endings * evttermi.c: #include removed (is in ngspice.h) * wdisp/makedefs, visualc/include/strings.h: removed 2010-02-13 Holger Vogt * icm/dllmain.c, evtload.c, ngspice.h, terminal.c, evaluate.c, twomesh.c, tclspice.c, conf.h, conf.c: patches by R. Larice 100213 * K&R -> ANSI patches by R. Larice 100103 2010-02-11 Holger Vogt * terminal.h, cpextern.h: use format (__printf__, 1, 2) * pzan.c, nipzmeth.c, cktpzstr.c, macros.h: remove conflicting macro definition (MS Visual Studio) ERROR -> MERROR 2010-02-08 Holger Vogt * com_sysinfo.c: 64 bit support enabled * terminal.c, terminal.h, cpextern.h, ngsconvert.c, inpgmod.c, ipcsockets.c: patches by R. Larice from Feb. 8th, 2010 2010-02-07 Dietmar Warning * cpl/cplload.c, cplsetup.c, /txl/txlload.c, txlsetup.c, include/swec.h, multi_line.h, frontend/subckt.c, parser/inp2p.c, inppas2.c: no more float's, improve dc solution by introducing gmin deembedding, better model check, automatic maxStep adaption in tran analysis, correct handling of kspice models in subckt's, kspice models are working now more stable but accuracy in steady state of transient is not sufficient * examples/TransmissionLines/*.sp: ommit itl5-warning * tests/transmission/*.out: adapt reference files to new code behaviour, but this is still a mess 2010-02-07 Holger Vogt * inpcom.c: bug no. 2936702 * vngspice.sln, vngspice.vcproj: add 64 bit support * measure.c, numpaif.h, numparam-h, spicenum.c, xpressn.c, subckt.c: Put original input deck line number into numparam error message. 2010-01-30 Dietmar Warning * b3soiddld.c, b3soifdld.c, cplload.c, cplsetup.c, inpcom.c, measure.c, mystring.c, spicenum.c, txlsetup.c: using a controlled_exit to see error messages in some places and get better program termination * frontend/error.c, error.h: provide a simple controlled_exit function * misc/util.c, util.h: remove controlled_exit function 2010-01-29 Holger Vogt * commands.c: gnuplot need two args minimum * xpressn.c: more characters for real number insertion (up to 15) 2010-01-27 Dietmar Warning * cpl_ibm1.sp: fix the c matrix unsymmetry * swec.h: set maximum cpl lines to eight * inp2y.c, inp2p.c: parsing the length instance parameter in txl and cpl * subckt.c: devmodtranslation for txl and cpl in subckt's 2010-01-17 Dietmar Warning * examples/TransmissionLines: Hopefully more meaningful transmissionline examples * misc/util.c: provide a simple controlled_exit function * devices/cpl/cplsetup.c, cplload.c, devices/txl/txlsetup.c: using a controlled_exit to see error messages in some places 2010-01-17 Holger Vogt * subckt.c: .global bug by R. Larice various files: patches by Robert (Neval, Nintegrate) from Jan 3 2010 and 10 patches from Jan 16, 2010 * com_hardcopy.c: switching graphics context correctly for postscript output * winmain.c: parameter 4 to SystemParametersInfo() corrected 2010-01-16 Dietmar Warning * tests/transmission: Only few tests should be easier, more examples under examples/TransmissionLine at next * tests/bin/check.sh: extend codemodel word in list * devices/cpl/cplsetup.c: few polishments * parser/inp2p.c, inp2y.c, inpdomod.c: change atof to INPevaluate to allow 10p as 10e-12 * parser/inppas2.c: correct P element comment 2010-01-15 Holger Vogt * subckt.c: patch for translate() by R. Larice, .global bug removed (add null character after storing global to node[]) ngspice.h: _inline for _MSC_VER 2010-01-06 Holger Vogt * x11.c: hardcopy by button click, error removed 2010-01-02 Holger Vogt * winmain.c: internal system() no longer needed, its available in mingw and MS Visual Studio. gnuplot.c: small update, call to gnuplot tested up to ver. 4.2.6, does not work for Windows and gnuplot 4.4. * x11.c: add xfont parameter * windisp.c: add wfont and wfont_size parameter * winmain.c: use SystemParametersInfo() to get screen size to improve placement of GUI on the screen. 2010-01-01 Holger Vogt * spinit.in: Small update gnuplot.c: calling gnuplot via xterm 2009-12-31 Holger Vogt * measure.c, resource.c, mesaload.c: small patches by R. Larice graf.c, plotit.c: gnuplot updates, point chars updated 2009-12-30 Holger Vogt * gnuplot.c: some additions 2009-12-29 Holger Vogt * ngproc2mod.c: patch by R. Larice gnuplot.c filename arrays enlarged 2009-12-28 Holger Vogt * measure.c: comments, /examples/control_structs/repeat3.sp: new examples snippets included 2009-12-22 Holger Vogt * measure.c: bugfix (%f replaced by %e) 2009-12-21 Holger Vogt * com_measure2.com, measure.c: add vectors to the meas command. inpcom.c: no parsing of ternary function in .control section (not yet defined anyway). /examples/measure /examples/control_structs /examples/control_xspice: new or updated example files. 2009-12-20 Holger Vogt * fixing the time 0 value of sine in isrc, vsrc * fteext.h, com_measure2.c, measure.c, commands.c: New .meas functions min_at or max_at will return the x value (maximum at x) meas command is now available in the .control ... .endc section in ngspice (still not tested for all possible variations, but ...). 2009-12-19 Paolo Nenzi * src/spicelib/devices/isrc/isrcacct.c, src/spicelib/devices/vsrc/vsrcacct.c: fixed bug reported by Holger. "time" value in accept routine was incorrectly computed when xspice extensions were compiled in. 2009-12-19 Holger Vogt * main.c, inpcom.c: source file path added as additional search path for opening .include files (MS Windows only). measure.c: .meas only when -b and -r are not set fteext.h: cleanup of unused entries breakp2.c, dotcards.c, inp.c, main.c: comments added 2009-12-17 Dietmar Warning * devices/bsim3/b3set.c: add the ngspice specific copyNodesets approach and remove the tnom celsius -> kelvin transformation * devices/bsim3/b3mpar.c: make the tnom celsius -> kelvin transformation in first run * devices/bsim3v32/b3v32ld.c: reconstruct NEWCONV code, also if it is not used because macro is set in macros.h, but is now inline with UCB code * inpcom.c, spicenum.c, xpressn.c: prevent int to unsigned compare * tests/transmission/ibm2.cir: wrong cpl model instantiation 2009-12-12 Holger Vogt * runcoms: evaluate measure commands only when avaialble * /examples/transimpedanceamp/output.net: correct .plot statement * string.c: '^' added to is_arith_char(), to allow parsing of '^' in .func function definitions 2009-12-11 Holger Vogt * bug 2909730, patch for parsing expressions applied * measure.c: Proper warning that .measure is not available in batch mode with -b 2009-12-10 Dietmar Warning * spicelib/parser/inptree.c: omit some debug printf's 2009-12-07 Holger Vogt * windisp.c: allow setting of linewidth by keyboard "set xbrushwidth=3" * main.c: option -p "run in pipe mode" added (patch 1465202) 2009-12-05: Dietmar Warning * inpcom.c, line 3090: allow parameter without curly braces in subckt definition (e.g.: as1=as), there was a wrong memory access before 2009-11-29 Holger Vogt * com_hardcopy.c, postsc.c, windisp.c: plotting with black or white background, postscript to file with hardcopy command or menue entry from plot window (still buggy with X11) psmodel.c: changed the declarator to new format 2009-11-27 Dietmar Warning * a bunch of files, most in device library: changed the declarator to new format to allow safe prototype check (but stay in the original line order) 2009-11-24 Holger Vogt * com_sysinfo.c: bugfix no. 2902374 2009-11-21 Holger Vogt * spicelib/parser/inptree.c: memory allocation of struct pwldata->vals failed in MS Visual Studio 2008, changed. 2009-11-20 Holger Vogt * postsc.c: some cosmetics to postscript plot, hcopypstxcolor for setting text color 2009-11-19 Holger Vogt * com_hardcopy.c, postsc.c: hardcopy set to default postscript (under Windows), LINUX and others require set hcopydevtype=postscript in spinit. set hcopypscolor=0 in spinit will set background color (0==black, 1==white ...) 2009-11-17 Holger Vogt * runcoms.c: comments added 2009-11-17 Dietmar Warning * configure.in: add search for strings.h because AC_HEADER_STDC isn't sufficient * com_measure2.c, 116: remove empty statement * parser/inpfindl.c: rm the annoying bjt level warning * parser/inpptree.c, ptfuncs.c: changed ancient double vector declaration in pwldata * misc/misc_time.c: init structure rusage with 0 instead NULL 2009-11-16 Holger Vogt * com_sysinfo.c: line 355 changed, allow mingw console compilation runcoms2.c: cosmetics cpitf.c, how-to-ngspice-vstudio.txt, visualc/include/config.h, vngspice.sln, vngspice.vcproj: add console app to configuration manager of Visual Studio 2009-11-15 Holger Vogt * main.c, src/include/compatmode.h: compatibility mode flag for other simulators xpressn.c: compatmode removed ============================ Rework-20 ================================== 2009-11-09 Dietmar Warning * subckt.c: support of 5-terminal bjt's in subckt's by prepending subckt name (similar things should be made for 5-7 terminal mos transistors, like soi models) 2009-11-08 Dietmar Warning * numparam/xpressn.c: allow numbers < 1e-30 in fmttype, now everything < 1e-39 is 0 * numparam/mystring.c: using floor and ceil from math lib for rounding and truncation 2009-11-07 Holger Vogt * winmain.c: replace strdup() by copy() 2009-10-31 Holger Vogt * winmain.c: windows updated more often how-to-ngspice-vstudio.txt: updated 2009-10-24: Dietmar Warning * main.c: correct the command completion under X11, cooments and formatting 2009-10-18: Dietmar Warning * inpptree.c: correct __func__ usage for different compiler * string.c, stringutil.h: separate bcopy and bzero providing 2009-10-18 Holger Vogt * main.c, winmain.c: graceful shutdown for MS Windows, "quit" button added conf.c, vngspice.vcproj: build date actualization modified 2009-10-12 Holger Vogt * main.c: bug no. 2874418, initialize global variable history_file 2009-10-10 Robert Larice * ifeval.c, inpptree.c, inpptree.h, ptfuncs.c: PWL functionality for B sources 2009-10-04 Holger Vogt * configure.in, /visualc/include/config.h, vngspice.vcproj: version 20 * com_sysinfo.c: update for Cygwin 2009-10-04: Dietmar Warning * com_sysinfo.c, ftext.h: sys_memory struct w/o static type, sysinfo w/o void Parameter * inpcom.c, gnuplot.c, device.c, inp.c, resource.c, subckt.c, com_fft.c, com_gnuplot.c, com_xgraph.c: initialize local variables * b4soild.c, line 6394: Cbg1 wrong assignment 2009-10-04: Dietmar Warning * b4ld.c, b4temp.c: better formatting to find the typo in b4temp.c, line 1758: needs real compare (==) instead of assignment (=) b4check.c: correct version now 4.6.5 2009-10-01 Holger Vogt * /frontend com_sysinfo.c, commands.c, fteext.h, makefile.am: command sysinfo added * compatmode.c, compatmode.h: typo removed 2009-09-26 Holger Vogt * windisp.c, compatmode.c, compatmode.h: CVS header added (still not working with compatmode) 2009-09-22: Paolo Nenzi * b4ld.c, b4temp.c: Updated BSIM4 code to BSIM 4.6.5 according to BSIM 4.6.5 bug report. 2009-09-20 Holger Vogt * inpmkmod.c: fix bug no. 2859013 * INSTALL corrected * xspice/mif/mifgetmod.c: comments 2009-09-19 Holger Vogt * fteext.h, inpcom.c, inp.c, options.c, winmain.c: variable ngdebug added, sets ft_ngdebug, used for additional debug info printing * dctran.c: setup info added * inpdefs.h, inpmkmod.c: try to fix bug no. 2859013 2009-09-16 Holger Vogt * inpcom.c: .global was disabled, reinstated 2009-09-15 Holger Vogt * winmain.c: will output the time required for the setup stages, if compiled with preprocessor flag NGDEBUG 2009-09-09 Holger Vogt * inp.c: comments added, .TEMP evaluation before numparam parsing * inpcom.c: comments added, inp_casefix() bug removed * winmain.c: SetAnalyse() now writes to task bar, progress in 0.0%, more ouput added for different phases during start up (Start, Prepare Deck, Circuit2, Device Setup, op, tran ...) * acan.c, cktsetup.c, dctran.c, dctrcurv.c, inp.c, inpas2.c, spec.c: SetAnalyse() modified 2009-09-09 Holger Vogt * com_measure2.c: some comments added * windisp.c: white backgrond in plot with set color0=white, thicker lines with set xbrushwidth=2 (0: standard) in spinit 2009-08-29 Holger Vogt * measure.c, com-measure2.c, com-measure2.h: add DC and AC measurement * /examples/measure: example file for .measure dc, ac, and tran added. 2009-08-25 Dietmar Warning * src/spicelib/parser/inpptree.c: wrong derivative for u2 function - bug reported and corrected by Robert Larice 2009-08-23 Holger Vogt * upload of /frontend/compatmode.c, compatmode.h /misc/hash.c, hash.h failed. * xpressn.c: contents of compatmode.c and compatmode.h added as a preliminary solution. * misc/makefile.am: hash.c, mempool.c removed again * forntend/makefile.am: compatmode.c removed again 2009-08-23 Holger Vogt * /frontend/compatmode.c, compatmode.h /misc/hash.c, hash.h, --> new .measurement code 2009-08-23 Holger Vogt * /frontend/makefile.am, com_measure2.c, com_measure2.h, dotcards.c, dotcards.h, measure.c /numparam/numparam.h, xpressn.c, /include/bool.h, macros.h, misc/makefile.am, tclspice.c, visualc/vngspice.sln, vngspice.vcproj, compat --> new .measurement code tested for .tran simulation 2009-08-22 Dietmar Warning * devices/bsim4/b4ld.c, b4noi.c, b4set.c, b4temp.c: Update to version 4.6.4 * subckt.c, 141: "/*" within comment 2009-08-12 Holger Vogt * dctran.c, spiceif.c, options.c, fteext.h: option noinit added. This option suppresses the printout of "Initial Transient Solution". noinit may be combined with acct. noacct will suppress both printouts. * spsmp.c, ngspice.h: reference to _logb added for _MSC_VER 2009-08-17 Holger Vogt * inp.c: some comments added 2009-08-15 Holger Vogt * cpitf.c: MS Windows: search for spinit also in local (ngspice.exe) directory * cpextern.h: function parameters added in declaration * com_alias.h, init.c, cpitf.c, main.c: comments added 2009-08-08 Paolo Nenzi * src/frontend/resource.c: applied patch from Thomas D. Dean to remove the limit warning. 2009-08-08 Holger Vogt * measure.c, com_measure2.c, com_measure2.h, xpressn.c: Patches from Bill Swartz added * examples/inverter3.sp: test of new features 2009-08-08 Holger Vogt * measure.c: add more comments * example/func_cap.sp, inverter.sp, inverter2.sp: hint to start examples only in interactive mode. 2009-08-05 Holger Vogt * measure.c: add comments (not yet complete) 2009-08-04 Dietmar Warning * configure.in, ngspice.h: looking for unistd.h & usage * bsim2/b2ld.c: correct args size * bsim3soi/b4soild.c: init Cbg1 * cmath2.c: init vector d 2009-07-30 Dietmar Warning * frontend/inpcom.c: refurbish spice3 syntax for r models with alternative value like: "r1 a b 2k rmodel" * parser/inp2r.c, inp2l.c, inp2c.c: allow r,l,c element instantiation e.g. r=50 2009-07-28 Holger Vogt * ChangLog repaired (broken since rev. 1.417) * inpcom.c repaired (broken in CVS) 2009-07-25 Dietmar Warning * bsim3v32/b3v32temp.c: init struct pParam * ngspice.h: prototype for getpid under mingw * main.c, winmain.c: small cosmetics 2009-07-21 Dietmar Warning * bsim3v32/b3v32temp.c, bsim4/b4temp.c: backup to the original code - without the FREE(model->pSizeDependParamKnot), if we want call models in a loop, we should introduce this unique to all models 2009-06-11 Holger Vogt * conf.c: editor notepad.exe also with MS Visual C++ * /examples/TransImpedanceAmp/output.net: change integration method to 'gear' for achieving convergence * cpitf.c, ivars.c: add some comments * inp.c, dotcard.c: allow .meas * example/inverter.sp: add .meas .. WHEN ... 2009-05-24 Dietmar Warning * tcl-testbench4.tcl: correct path to codemodel * FB14.cir: better breakthrough current in bas70 2009-05-21 Holger Vogt * evaluate.c, outitf.c, sim.h: use SV_ADMITTANCE for plotting @dev[gxx] * defines.h change signal prototype for _MSC_VER 2009-05-21 Paolo Nenzi * src/frontend/postcoms.c: Fix from Lemaitre Laurent to avoid a segmentation fault when v->v_plot->pl_scale is NULL. 2009-05-16 Holger Vogt * inpcom.c lines 778ff: allow the following .model names: First character is alphabetical First character is digit, second alpha, third digit First character is digit, second alpha, third alpha, fourth digit 2009-05-16 Holger Vogt * inpcom.c lines 2940ff fix case 'q' * inp.c:788 error message with original line number from input deck * inp2q.c:155 error message if no model is found and default BJT is selected instead 2009-05-12 Holger Vogt * inpcom.c fcn inp_fix_gnd_name() remove excessive white spaces after replacing gnd by 0 2009-05-11 Holger Vogt * src/makefile.am replace -lBLT24.dll by -lBLT24 in line 247 2009-05-10 Holger Vogt * subckt.c:1348 find last dot, not first dot in model_name 2009-05-09 Holger Vogt * graf.c: graphics scaling during iplot made a little more convenient 2009-05-06 Holger Vogt * pp_lst.c:428 malloc(len+1) +1 added (bug report 2787072) configure.in:803, 958 (bug reports 1834772, 2787076 and 2787079) 2009-05-02 Holger Vogt * new flag NGDEBUG main.c, signal_handler.c, visualc/vngspice.vcproj: restore SIGSEGV signal handling for error message after seg fault (not in debug mode, now only for Windows) dctrcurv.c: winmessage about dc 2009-05-01 Holger Vogt * cktdojob.c, cktsopt.c: moved to cktsopt.c: maxord set to min 2 or max 6 2009-04-28 Holger Vogt * winmain.c, inp.c, cktop.c: SetAnalyse() modified/added cktdojob.c: maxord set to minimum 2 (prevent crash in dctran.c:774) 2009-04-26 Dietmar Warning * devices/cktinit.c: prototype load_alldevs not needed * ngspice.h: float.h before defines.h, some more function mapping in _MSC_VER section 2009-04-26 Dietmar Warning * measure.c, inpcom.c: winmessage only for windows * misc/util.c, tilde.c, math/poly/ployfit.c: relay to ngspice.h * main.c, tclspice.c, misc/mktemp.c, misc/string.c: don't need include string.h because it comes from central place ngspice.h 2009-04-26 Holger Vogt * xpressn.c:400 Suppress message "cannot redefine" 2009-04-25 Holger Vogt * configure.in, visualc/include/config.h: NGSPICEDATADIR set to $dprefix/share/ngspice 2009-04-23 Holger Vogt * measure.c, inpcom.c, : winmessage() header added ============================ Rework-19 ================================== 2009-04-23 Holger Vogt * measure.c: .measure broken for trig, targ 2009-04-22 Holger Vogt * bsim4v2init.c, bsim4v3init.c: CIDER added 2009-04-22 Holger Vogt * inpcom.c measure.c mystring.c alloc.c: show Windows error message before exiting 2009-04-21 Dietmar Warning * devices/bsim4/*.c, /vbic/*.c: Parameter declaration in function header 2009-04-20 Holger Vogt * src/spice.def: for creating dll * src/makefile.am: libs for tclspice MINGW added * configure.in: automatically select building shared or static libraries * tclspice.c: some additions for MS Visual 2008 2009-04-18 Dietmar Warning * devices/bsim3soi/*.c, *.h, tests/bsim3soi/*.cir, *.out, *.mod, DEVICES: Update to actual version 4.1, contrary to the comment in Berkeley doc's the model is not full downward compatibel to version 4.0 * spicelib/parser/inpgmod.c, 251: using strcmp again, instead of strstr - we need absolute equality to distinguish between node and model names. 2009-04-18 Holger Vogt * INSTALL: chapter 1.5 added (separate object file directory tree) 2009-04-17 Holger Vogt * resource.c: 27 allow compilation into a build directory 2009-04-14 Holger Vogt * control.c: remove bug no. 2724127 repeat loop inside another loop * dotcards.c, inp.c, measure.c: patch submitted by Bill Swartz added 2009-04-12 Holger Vogt * spicenum.c, xpressn.c: dico and inst_dico no longer removed in nupa_done because they are needed in .measure * lexical.c: size of arrays doubled in cp_lexer() to avoid "line too long" message * runcoms.c: enter do_measure() only if ft_curckt->ci_last_an has a value (bug no. 2751855) * winmain.c: winmessage() only if message not into log file * windisp.c: WIN_Text() now uses True Type Fonts and may display text vertically * misc/getopt_long_bsd.c getopt_bsd.h: add a BSD version of getopt_long() getopt.c, getopt1.c, getopt.h removed * misc/makefile.am: add (remove) files * configure.in: check for getopt.h and getopt_long(), if not found, use internal functions in getopt_long_bsd.c Replace package name ng-spice-rework with ngspice Change version number to 19 * main.c: chosse proper getopt_long(), winmessage() * visualc/vngspice.vcproj: files added (removed) * visualc/include/config.h: new version 19 2009-04-10 Holger Vogt * spicenum.c: memory leak removed 2009-04-05 Holger Vogt * com_fft.c, inpcom.c, variable.c, variable.h, resource.c, cpitf.c, plotit.c, inpgtok.c: some more memory leaks removed * spicenum.c: release of memory for dico->dyncategory corrected * subckt.c, inp.c, inpcom.c: more on memory leaks * subckt.c, spicenum.c: make call to fcn nupa_done() at the end of fcn inp_subcktexpand() to clear memory. 2009-04-01 Dietmar Warning * frontend/resource.c, misc/misc_time.c: init of rusage structure to prevent read of uninitialized memory, found with dbx under solaris 2009-03-29 Holger Vogt * inp.c, variable.c: some more memory leaks removed 2009-03-27 Holger Vogt * inpcom.c, variable.c, cpitf.c: memory leaks removed, which were detected by valgrind-3.4.1 under SUSE 11.1 2009-03-22 Holger Vogt * inpcom.c: readline() now returns /n for an empty line, dynLlen consists of maximum line length plus some space for parameter substitution and has a minimum size of 512. * spicenum.c, xpressn.c, general.h, numparam.h: dynamic memory allocation also for all string manipultions, Strbig now is a macro using tmalloc, the macro Strrem deallocates the memory, the size of the arrays is dynLlen. 2009-03-21 Holger Vogt * inpcom.c, fteinp.h, inpdefs.h: line renumbering of input deck added to the end of fcn inp_readall(). cc->li_line_original now contains the line numbering of the input file 2009-03-15 Holger Vogt * cktfinddev.c: some (optical) cleanup * numparam.h, xpressn.c, spicenum.c, inpcom.c: dynamic memory allocation for numparam (the easier part) 2009-03-08 Holger Vogt * dctran.c no printout of 'Initial transient solution' if .options noacct is set 2009-03-08 Holger Vogt * plotit.c fcn plotit(): add quotes again for xlabel, ylabel, title in cline 2009-03-07 Holger Vogt * inpcom.c fcn inp_fix_for_numparam(): no quotes changed for plot lines within control section, e.g. plot v(2) xlabel 'my input' ylabel 'output' 2009-03-07 Dietmar Warning * tests/bsim4/*.out: same as below for bsim3 2009-03-07 Holger Vogt * spicenum.c inpcom.c subckt.c xpressn.c numpaif.h numparam.h general.h Collect information to allow dynamic memory allocation for numparam ( Still to be implemented ! ) Defined in inpcom.c: dynmaxline dynnLen dynMaxckt dynsubst 2009-03-03 Dietmar Warning * tests/bsim3/*_sim/*.out: adapt output format to spice3 numdgt convention, most tests are running except tran tests and op-amp ac test. * test/bin/check.sh: extend the filter rules by two keywords, not nice but works 2009-03-01 Dietmar Warning * spicelib/parser/inp2q.c: allow 4-terminal instances for adms, then the fifth node will be set to ground (same as substrate node for gp if fourth node isn't set). Checked with lots of examples but not 100% waterproof. * tests/bsim3: reorganized the entire directory structure with focus only to the latest published Berkeley testbench for bsim3. ac and tran test included but there are still problems in comparing their spice3 results to ngspice. * adms/hicum0,hicum2,mextram/*.va: Using GMIN from simulator will improve op solution, e.g. by gmin stepping. The coupling of _circuit_gmin to ckt->CKTgmin is generated by adms in ngspiceMODULEdefs.h. 2009-02-28 Holger Vogt * inp.c:605 ff, fcn inp_spsource(), if preproc. flag OUTDECK defined, the deck is saved as debug-out2.txt, here after parameter substitution 2009-02-25 Holger Vogt * inpdomod.c:436 error message adapted to existing devices * /frontend/numparam/numparam.h, general.h: length of char arrays set to 40000 * inpcom.c: preprocessor flag OUTDECK, if set will save complete deck into debug-out.txt 2009-02-25 Dietmar Warning * spicelib/parser/inp2q.c,155: 5-terminal only for adms bipolars 2009-02-24 Dietmar Warning * configure.in: removed Makefile for tests/TransImpedanceAmp * tests/bsim3/.../ac_sim/*.out: removed the imaginary part of frequency on x-axis 2009-02-23 Dietmar Warning * spicelib/parser/inpgmod.c: correct strstr compare * /tests/bsim3/*.cir: .options noacct added * /tests/bsim3/modelcard.*mos: correct level=8 and set version * /tests/.../*.cir: add level parameter for bjts to suppress the long line warning 2009-02-22 Holger Vogt * xspice/icm/makefile: *.cm for CYGWIN need to be made executable (755 instead of 644) * fteext.h spiceif.c options.c dotcards.c: .options NOACCT added * /tests/.../*.cir .options noacct added (except BSIM3 files) * main.c:614 allow null terminator in string 2009-02-22 Dietmar Warning * devices/adms/mextram: Update to release version 504.7 now with selfheating as a 5 terminal version * tests/adms/mextram/*.sp: additional parameters for new mextram version needed * spicelib/parser/inpgmod.c, inp2q.c: Correct handling of adms 5 terminal models 2009-02-21 Holger Vogt * parse.c:922 prevent automtic deletion of @xxx[par] winmain.c: increased width of ngspice window to allow display of 80 characters per line (e.g. for command 'show' /tests/bin/check.sh: allow make check for CYGWIN (will fail though) 2009-02-20 Holger Vogt * x11disp.c: allow closing of help windows with WM x-button 2009-02-14 Dietmar Warning * src/spicelib/parser/inpdomod.c: map level 10 to bsimsoi4 and map ancient version 4.0 and 4.1 of bsim4 to available version 4.2 * DEVICES: corrections and actualizations, add short adms model descriptions * adms/hicum0/admsva/hicum0.va: a slight fix of TFH in version 1.12 * adms/hicum2/admsva/hicum2.va: general update to version 2.23 2009-02-12 Dietmar Warning * src/include/missing_math.h, src/maths/misc/isinf.c: fix a conflict under certain conditions 2009-02-12 Holger Vogt * device.c:908 remove bug: reset i to 0 x11.c: allow closing of plot windows with WM x-button 2009-02-10 Holger Vogt * windisp.c, X11.c, postcom.c 'destroy plot1' now deletes all graphs (plot windows) associated with the plot 'plot1' before the data of plot1 are deleted, to prevent a crash due to unsuccessful redrawing 2009-02-07 Holger Vogt * device.c, inpcom.c alter and altermod commands reinstated and improved 2009-02-01 Dietmar Warning * alloc.c, outitf.c: exclude heap usage for windows compile under __MINGW__ * resource.c: meminfo api usage not for commandline version 2009-02-01 Holger Vogt * alloc.c, outitf.c: Use the new heap only for tclspice in Windows (HAS_TCLWIN defined) because of a crash in the 'destroy' command inpcom.c:1807 do not remove white spaces in an alter or altermod command 2009-01-31 Holger Vogt * xpressn.c, spicenum.c, numparam.h, runcoms.c, runcoms2.c: Incompatibilty to MAC OSX removed by proper variable declarations * subckt.c: bug no. 2293284: preliminary change, further tests required 2009-01-26 Lionel Sainte Cluque * man/man1/ngspice.1, * man/man1/nutmeg.1: apply Ahmed El-Mahmoudy's patch on hyphens in manpages. 2009-01-18 Paolo Nenzi * src/frontend/plotting/plotit.c, * src/frontend/plotting/plotcurv.c: 33: Fixed some of the existing problemass SMITH PLOT. There were 2 errors: one in plotit() to calculate the transformation line (r-1) / (r +1) where a mistake was made in the process of plotting a single real point and the other in ft_graf() that would print imaginary part = real part for real data. A. Roldan - espice 32: Fixed some problems the existing polar PLOT. To summarize the problems were in the wrong calculation of the size of x and y axes for the plot. A. Roldan - espice 2009-01-18 Holger Vogt * src/frontend/mw_coms.c: variable declarations to top of function * outif.c, alloc.c: add HAS_TCLWIN flag to allow coimpilation of tclspice under MS VC++ 2009-01-16 Paolo Nenzi * src/frontend/mw_coms.c, src/frontend/commands.c, * src/frontend/runcoms.c, src/include/fteext.h: 34, 36, 38: Added the removecirc command. This command removes the current circuit and its associated plots. This comes from an old function written by M. Widlok and updated by A. Roldan for espice. Note: I have changed the code to eliminate GTK functions and tested. Things work but in ngspice there is a problem due to model redefinitions, as it seems that in ngspice models are globals. Need further investigation. P. Nenzi * src/frontend/commands.c, src/frontend/misccomms.c: 24: Added the parameter "noask" to quit command to avoid the question before exiting ngspice. A. Roldan - Espice * src/frontend/evaluate.c, src/frontend/typedefs.c, src/include/sim.h: Added some vector types from Espice (impedance, admittance, power etc.) The original implementation by A. Roldan did not fit immediatly. I had to comment two definitions. I could not test "plotab". 2009-01-16 Paolo Nenzi * src/frontend/evaluate.c, src/frontend/typedefs.c, src/include/sim.h: Added some vector types from Espice (impedance, admittance, power etc.) The original implementation by A. Roldan did not fit immediatly. I had to comment two definitions. I could not test "plotab". 2009-01-15 Paolo Nenzi * src/spicelib/devices/vsrc/vsrc.c, * src/spicelib/devices/isrc/isrc.c, * src/frontend/spiceif.c, * src/frontend/device.c, * src/frontend/postcoms.c, * src/frontend/vectors.c: 17: New capability of print command. It is now possible to print and alter vectors of reals like print @vin_sin[sin] to print the vector of parameters defining the sinusoidal source (it works with both the sources type). It is possible to alter the parameters with the command alter @vin_sin[sin] = ( 1 1 3000Hz ). A. Roldan -Espice Note: alter syntax does not work in full yet, it still generate an error but modifies the parameters. P. Nenzi 2009-01-15 Paolo Nenzi * src/frontend/vectors.c: 57: Fixed I(vx), before the if I(*) (upper case) was not recognized as the function to plot the current of vx. A. Roldan - Espice * src/frontend/postcoms.c: 7: Fixed plot number after "destroy all" command. A. Roldan - Espice * src/include/fteext.h * src/frontend/evaluate.c, src/frontend/cpitf.c, src/frontend/parse.c * src/maths/cmaths/cmath2.c, src/cmaths/cmath4.c, src/cmaths/cmath4.h: 16: New function to compute the group delay has been implemented. Group delay is defined as -(dphase/dfrequency) and can be printed or plotted by writing vg(x), where x is a complex vector. A. Roldan - Espice 15: Fixed existing problems in this function due to the complex nature of the frequency vector. To get the data from frequency[i], the real part must be accessed. A. Roldan - Espice 14: New function to compute the moving average. A. Roldan - Espice 2009-01-15 Paolo Nenzi * src/frontend/{spiceif.c, spiceif.h, vectors.c}, src/include/fteext.h, * src/main.c: 3: A new function finddev_special() has been introduced to look for references like @BC107[is] and to verify if we asked for a model or a device and thus call the spif_getparam_special() correctly in vectors.c. The new @ syntax is @{model,device}[parameter]. - A. Roldan - Espice. Note: I have modified the implementation putting the spif_getparam_special() in the if_getparam definition in main.c 2009-01-15 Dietmar Warning * src/include/wstdio.h: read fct. prototype for older MSC compiler * src/misc/alloc.c: heap also needed under windows with tcl * src/frontend/resource.c: resource info under Windows w/o psapi, still not yet perfect 2009-01-11 Dietmar Warning * src/spicelib/devices/hisim/hsm1eval1xx.c, src/spicelib/devices/bsim3soi_x/b3soild.c: using ngspice.h as a central place 2009-01-10 Holger Vogt * windisp.c: improve plot window handling, still not yet perfect 2009-01-09 Dietmar Warning * src/misc/alloc.c, src/frontend/outitf.c: heap only needed under windows for zoom 2009-01-05 Dietmar Warning * src/math/misc/isinf.c, isnan.c, src/include/missing_math.h: small polish for HAVE_DECL_XXX macros, more elaborate isinf function * src/include/memory.h: prototype for hrealloc fct. * adms/hicum2/amsva/hicum2.va: update to actual version 2.22, very small modifications compared to the original va code. 2009-01-04 Dietmar Warning * src/math/misc/isinf.c, Makefile.am: a simple (but ugly) workaround for isinf needed by some adms generated models * src/include/ngspice.h, missing_math.h: try to catch isinf by ieeefp.h * adms/ekv/amsva/ekv.va: compatibility regarding S/D diode behaviour 2009-01-02 Dietmar Warning * adms/ekv/amsva/ekv.va: EPFL-EKV version 2.63, replacement of the long channel version with a code according to the official manual (revision II) available at http://legwww.epfl.ch/ekv, contribution of Ivan Riis Nielsen 11/2006. * /src/frontend/wdisp/windisp.c, 398: windows zoom was broken - %le for double seems not more ignored, changed to more suitable %e 2009-01-01 Dietmar Warning * configure.in, include/missing_math.h, src/math/misc/isnan.c: POSIX conform configure isnan, isinf macros and finite function * admst/ngspiceMODULEdefs.h.xml: some cc needs double cast for isinf macro 2008-12-31 Holger Vogt * resource.c: streamline resource info under Windows * tclspice integration under Windows: dctran.c, inpfindl.c, outitf.c, alloc.c, tclspice.c, winmain.c: type definitions, printf -> fprintf, new heap for plot data to prevent memory fragmentation * configure.in: new flags for TCL under Windows: HAS_TCLWIN (is set instead of HAS_WINDOWS), TCLWIN (for generating makefiles, instead of WINDOWS) * cmath/makefile.am: prevent making test executables under TCL/Windows 2008-12-26 Dietmar Warning * autogen.sh, configure.in: A hopeful way to integrate adms - ugly, but tested under linux, sunOS and msys with and w/o adms enabled. * src/spicelib/devices/adms/hicum0: updated verilog code with small adaption to actual hicum0 version 1.2 * tests/adms/hicum0: using one library file for tests 2008-12-23 Holger Vogt * resource.c: for tclspice HAS_WINDOWS replaced by _MSC_VER and __MINGW32__ * outitf.c, cktdojob.c: printf replaced by fprintf * cpitf.c:216 s replaced by copys * tclspice.c:2168 init_rlimits( ) added to get startup system info 2008-12-22 Holger Vogt * /spicelib/parser/inpdomod.c: checks for BSIM3 and BSIM4 look for major versions 3.2, 3.3, 4.2 - 4.6 2008-12-22 Dietmar Warning * adms/admst/ngspiceMakefile.am.xml: switch to libtool (unfortunately!) 2008-12-20 Holger Vogt * bug 2449483 removed: inpdomod.c:293 added as in b3v32check.c:42 2008-12-14 Dietmar Warning * src/Makefile.am: "hard wired" makefile dependency generation compiler options removed for main.c - this should be done by libtool, left it for tclspice and xspice codemodels (see below) * src/xspice/icm: removed Makefile.am - not used, configuration relays on makedefs.in and fixed Makefile, these files have now sun compiler specific options DEPFLAGS added * src/xspice/ipc/ipc*.c: prevent some warnings under sun compiler 2008-12-07 Dietmar Warning * src/main.c: double semikolon in nutmeginfo decl. gives: "syntax error: empty declaration" under solaris ss12 2008-12-06 Holger Vogt * frontend/spec.c, com_fft.c: free_pnode(first_name); moved further down to allow 'fft vout' instead of only 'fft v(vout)' ============================ Rework-18 ================================== 2008-11-30 Lionel Sainte Cluque * configure.in: --with-tcl search path make broader to limit the need of the optional argument. Message in case of tclConfig.sh file not found fixed by sed. * examples/tclspice/*/*.tcl: fixed load libspice lines due to the directories hierarchy. (One level more) 2008-11-29 Holger Vogt * frontend/numparam/xpressn.c: rand() and gauss() moved to math/misc/randnumb.c -> 'set rndseed=value' value = integer > 0 in spinit will yield deterministic pseudo random number sequence. -> random() and rand() with correspongding max value 2008-11-26 Dietmar Warning * src/spicelib/devices/bsim4v4, bsim4v5: this is a backup because the patch of Phil Barker are providing only a placeholder for propriarity sti stress model - not any equation. If the stimod feature is some time published we can implement it again. 2008-11-26 Holger Vogt * frontend/numparam/xpressn.c: agauss, sinh, cosh tanh, added (source: S. Thiel) * b3soi*ld.c: _isnan defined for _MSC_VER * main.c, cmath2.c, xpressn.c: random, srandom defined extern for _MSC_VER * math/misc/equality.c: llabs defined extern 2008-11-23 Lionel Sainte Cluque * COPYING: update many details and tclspice LGPLv2 * src/tclspice.c: changed headers for LGPLv2 2008-11-23 Lionel Sainte Cluque * configure.in: modified for tclspinit.in * src/tclspinit.in: spinit file for tclspice (at least until installation of codemodels is solved) * src/Makefile.am: modified for tclspinit installation * src/frontend/cpitf.c: modified for use of tclspinit in tclspice 2008-11-04 Holger Vogt * /doc/version.texi committed again * /visualc/include/config.h: version no. 18 * /frontend/com_ftt: tfree, copyright notice 2008-11-22 Lionel Sainte Cluque * COPYING: license clarifications * frontend/inpcom.c: minor changes (correct warning) * frontend/misccoms.c: minor changes (correct warning) * frontend/where.c: minor changes (correct warning) * spicelib/parser/inpgmod.c: minor changes (correct warning) * spicelib/parser/inppas3.c: minor changes (correct warning) * spicelib/devices/numd/numdload.c: minor changes (correct warning) * spicelib/devices/numd2/nud2load.c: minor changes (correct warning) * xspice/mif/mifsetup.c: minor changes (correct warning) * xspice/ipc/ipcsockets.c: minor changes (correct warning) * ciderlib/input/mobset.c: minor changes (correct warning) * include/spmatrix.h: minor changes (correct warning) * tclspice.c: minor changes (correct warning) * frontend/com_fft.c : changed some malloc into tmalloc * frontend/com_measure2.c : changed some malloc into tmalloc * spicelib/devices/bsim3/b3temp.c: changed some malloc into tmalloc * spicelib/devices/bsim3soi/b4soitemp.c: changed some malloc into tmalloc * spicelib/devices/bsim3v32/b3v32temp.c: changed some malloc into tmalloc * spicelib/devices/bsim4/b4temp.c: changed some malloc into tmalloc * spicelib/devices/bsim4v2/b4v2temp.c: changed some malloc into tmalloc * spicelib/devices/bsim4v3/b4v3temp.c: changed some malloc into tmalloc * spicelib/devices/bsim4v4/b4v4temp.c: changed some malloc into tmalloc * spicelib/devices/bsim4v5/b4v5temp.c: changed some malloc into tmalloc * spicelib/devices/cpl/cplload.c: changed some malloc into tmalloc * spicelib/devices/ndev/ndevset.c: changed some malloc into tmalloc * ciderlib/support/database.c : changed some malloc into tmalloc * frontend/numparam/mystring.c : changed some malloc into tmalloc * frontend/numparam/xpressn.c : changed some malloc into tmalloc * spicelib/parser/inp2p.c : changed some malloc into tmalloc * xspice/mif/mif_inp2.c: changed some malloc into tmalloc * misc/util.c: changed some malloc into tmalloc * spicelib/parser/inp2y.c: changed some malloc into tmalloc 2008-11-20 Paolo Nenzi * src/frontend/diff.c: currents in rawfiles are written as i(xxx) and no more as xxx#branch. The diff interactive command (used to compare plots) did not work anymore. This new version traslates back i(xxx) to xxx#branch. 2008-11-19 Dietmar Warning * src/frontend/resource.c: found a way to compile w/o psapi under MS VC++ 6.0, prevent some warnings * src/frontend/com_ghelp.c: prevent warnings * src/frontend/measure.c, src/frontend/numparam/xpressn.c: use well defined macros for min/max instead of fct's * src/frontend/miscoms.c: no more INT_NOISE * src/include/ngspice.h: polishing * src/include/missing_math.h, src/math/misc/scalb.c, src/math/sparse/spsmp.c,: hopefull better scalb handling tested under different OS's, but needs more tests 2008-11-18 Dietmar Warning * src/spicelib/devices/vbic/*.c, *.h: Repair a uninitialized state of some local variables by using the state vector, bug reported by Muris Mujagic, NI. * test/vbic/*.cir: Correct use of pnp transistors substrate connection - VBIC is a vertical transistor model. Collector connection as workaround for pnp Lateral's. 2008-11-16 Dietmar Warning * src/spicelib/devices/bsim4/bsim4itf.h: adapting the ngspice scheme regarding info structure * src/spicelib/devices/bsim4/b4check.c: This is really UCB version 4.6.3 - see below (but will cover all 4.6.x versions) 2008-11-09 Dietmar Warning * src/spicelib/devices/bsim4/*.c,*.h src/spicelib/parser/inpdomod.c: This is the new and actual BSIM4 version 4.6.3 from UCB. All files are 4.6.2 except b4temp.c which is the only bugfix for 4.6.3 (see bsim website). Tested so far with simple testcases - but should be proved further with more practical examples. 2008-11-09 Holger Vogt * visualc/: Directory with project files to compile ngspice with MS Visual Studio 2008 2008-11-04 Holger Vogt * src/frontend/com_ghelp.c: Notify user that internal help is no longer available in Windows port 2008-11-04 Paolo Nenzi * src/frontend/parser/lexical.c: 53: Fixed the problem of segmentation fault when redirecting output putting spaces around "<" or ">". A. Roldan - Espice 2008-11-02 Lionel Sainte Cluque * src/tclspice.c : tcl_vfprintf corrects the stou bug * README.tcl : Creation * tests/tcl/test_vectoblt.tcl : modified invocation and package loading 2008-10-27 Dietmar Warning * src/spicelib/parser/inp2q.c VBIC is standard - not ADMS (yet) * src/spicelib/devices/vbic/vbicnoise.c correct naming array order according vbicdefs.h 2008-10-14 Dietmar Warning * src/main.c, src/misc/util.c polish to prevent warnings 2008-10-11 Holger Vogt * /frontend/resource.c line 41 correct __MINGW32__ /ciderlib/input/options.c renamed to optionsc.c to avoid double options.obj in VC++ 2008 2008-10-05 Holger Vogt * Macros added to allow compilation of tclspice with MS Visual C++ 2008 2008-09-24 Holger Vogt * wstdio.h, scalb.c, complex.h Small changes to allow compilation with MS Visual C++ 2008 main.c, util.c: path of *.cir input file as search path for .include files (Windows only) 2008-09-22 Holger Vogt * complex.h, measure.c, resource.c, windisp.c, xpressn.c, rawfile.c, runcoms.c, readhelp.c, defines.h, ngspice.h, b4soild.c, hsm1eval102.c, hsm1eval112.c, hsm1eval120.c, wstdio.h Small changes to allow compilation with MS Visual C++ 2008 2008-09-15 Lionel Sainte Cluque * src/Makefile.am: Add $(DESTDIR) in tclspice installation, required by debian package. * src/Makefile.am: Use -no-undefined only for windows build (libspice_la_LDFLAGS) 2008-09-13 Holger Vogt * configure.in: add AC_LIBTOOL_WIN32_DLL * src/makefile.am correct typo 2008-09-13 Holger Vogt * configure.in: add /mingw as search path for tcl * tclspice.c: replace sigsetjump and sigjmp_buf with macros from macros.h 2008-09-09 Lionel Sainte Cluque * configure.in: tclspice checks moved before Operating System checks: To set no_x flag before it is used. * tests/tcl-testbench*: chmod a+x tcl-testbench*.tcl 2008-09-01 * configure.in: CAPZEROBYPASS is enabled by default now. To disable it you can add --disable-capzerobypass to configure command. 2008-08-27 Paolo Nenzi * --- TCLSPICE initial integration (Lionel Sainte Cluque) --- * Makefile.am: Makefiles changed for libtool. We use still .a files but we let libtool to create them in a portable manner. This slows compilation a little bit but improves portability of ngspice/tclspice. * src/tclspice.c, src/tclspice.map, pkgIndex.tcl.in, src/include/tclspice.h: tclspice main and include file. (Readded files). * src/tests/tcl/, src/tests/tcl-testbench1/, src/tests/tcl-testbench2/, src/tests/tcl-testbench3/, src/tests/tcl-testbench4/: testbenches for the tclspice simulator. (New dirs). * src/frontend/plotit.c: added blt_plot for blt output device if TCL defined. * src/frontend/com_plot.c, src/frontend/com_plot.h: added com_bltplot. * src/frontend/commands.c: redefined plot command to combltplot if TCL is enabled. * src/frontend/display.c: defined Tk display device. * src/frontend/outitf.c: added blt support. * src/frontend/terminal.c: if TCL is defined, interactive terminal stubs are copiled in. * src/include/ngspice.h: added definitions for TCL functions. * src/misc/alloc.c: Using TCL allocation functions when tclspice is enabled. * src/frontend/com_measure2.c,.h: new measure command (to link and test) * src/main.c: some static function moved for TCL interface (nutmeginfo, etc.) 2008-08-25 Paolo Nenzi * configure.in, src/spicelib/analysis/noisean.c: removed the compilation switch --enable-intnoise. Noise analyses now generate two plot, the first one for spectrum and the second one the integrated noise. 2008-08-24 Paolo Nenzi * src/main.c: Moved the #ifdef CIDER declaration. Machine accuracy limits now are defined even if CIDER is not compiled. This is needed for the subsequent integration of TCL patch. 2008-06-14 Holger Vogt * examples/numparam: adapt examples to new numparam code 2008-05-31 Dietmar Warning * src/frontend/aspice.c: compliant processing of pid and wait() also under solaris 2008-05-24 Holger Vogt * src/frontend/com_fft.c: Fast fourier transform added for transient data analysis. * src/frontend/spec.c: Progress status display for Windows added 2008-05-18 Dietmar Warning * Small changes to compile under Sun Studio 11 for Solaris - may be useful in other configurations too * configure.in * src/frontend/control.c * src/include/ngspice.h * src/maths/misc/equality.c * src/spicelib/devices/cpl/cplask.c * src/spicelib/devices/hisim/hsm1eval102.c * src/spicelib/devices/hisim/hsm1eval112.c * src/spicelib/devices/hisim/hsm1eval120.c * src/spicelib/devices/soi3/soi3acld.c 2008-05-12 Dietmar Warning * src/frontend/inp.c, src/frontend/inp.c, src/frontend/Makefile.am, src/Makefile.am, configure.in: global nodes and numparams now as default - configure switches not needed tested so far - but sure that some problems will raise. 2008-05-11 Dietmar Warning * src/misc/missing_math.c,h, src/math/misc/*.*: move math function to one place * src/include/ngspice.h, src/main.c, src/Makefile.am, src/maths/Makefile.am, src/maths/misc/Makefile.am, src/misc/Makefile.am, configure.in: organization of libmathmisc.a * src/maths/misc/erfc.c: better erfc for lossy transmission line 2008-05-10 Holger Vogt * src/frontend/resource.c: Memory information is now stemming from the /proc file system (LINUX) or using GlobalMemoryStatusEx and GetProcessMemoryInfo (Windows). The old info system with sbrk(0) may still be used. 2008-05-06 Holger Vogt * src/frontend/outitf.c: suppress printing of "Reference value" into log-file under Windows 2008-05-03 Dietmar Warning * src/include/ngspice.h, src/main.c: srandom has a macro in ngspice.h as a central place - should be sufficient also under windows 2008-05-01 Holger Vogt * src/frontend/com_hardcopy.c: bug no. 1885979 removed: currentgraph saved and restored after hardcopy. 2008-04-28 Holger Vogt * src/frontend/plotting/graf.c: remove iplot bug by changing line 686. 2008-04-27 Dietmar Warning * src/frontend/inpcom.c: change _DEBUG to TRACE - unique debug switches * src/frontend/plotting/gnuplot.c: adding windows gnuplot, some modifications 2008-04-26 Holger Vogt * src/frontend/inpcom.c: inp_sort_params() now uses dynamic memory allocation on the heap: no enlargement of stack size is necessary. 2008-04-25 Holger Vogt * src/frontend/inpcom.c: In inp_fix_param_values() xspice variables of type complex are recognized also in vectors. 2008-04-23 Holger Vogt * src/frontend/inpcom.c: In inp_fix_param_values() xspice variables of type complex are recognized. Vectors of complex variables still missing. 2008-04-20 Holger Vogt * src/frontend/inpcom.c: .cmodel added for xspice compatibility: inp_fix_param_values() replaces .cmodel with .model and then skips entire line, thus no numparam search and setting of {} will happen. 2008-04-20 Dietmar Warning * src/spicelib/devices/bsim*/b*ld.c, src/math/ni/niconv.c: Reconstruct NEWCONV macro for better bsim3,4,soi transfer from Berkeley, macro is defined by default in spice3f4 which is used by UCB for testing. Now same behaviour in ngspice - tested and should not impact convergence behaviour. * src/frontend/winprint.c: pragmas only for MSC. * configure.in tests/Makefile.am, tests/bsim3soi/*.cir, *.out, *.mod: new testcase for bsim3soi (origin UCB small modifications). 2008-04-19 Holger Vogt * src/frontend/inpcom.c: inp_fix_param_values(): retain ..=true as boolean, retain ="xxx" as string, allow numparams without {} inside xpsice input vectors 2008-04-16 Dietmar Warning * src/spicelib/devices/bsim3soi/*.c,*.h, src/spicelib/parser/inpdomod.c, inp2m.c, src/spicelib/devices/dev.c, DEVICES: New bsim3soi version 4.0 * src/include/macros.h: redefine NEWCONV because we are using Berkeley spice3f4 code for bsim models. 2008-04-13 Holger Vogt * src/frontend/inpcom.c: get_number_terminals(): support for cpl lines, inp_readall(): debug ouput of input data after processing inp_fix_param_values(): CIDER models excluded from getting {}, xspice model vectors [] excluded from getting {} * src/winmain.c: larger text buffer, MakeArgcArgv() allows multiple spaces between arguments, allows CYGWIN handling, winmessage() for error messages * src/main.c: temporary file for Windows non admin users, printed info independent from sequence of options * src/include/bool.h: BOOLEAN definition added again src/spicelib/devices/dev.c: #undef BOOLEAN added 2008-04-05 Dietmar Warning * src/frontend/inpcom.c: define the missing buffer nam_buf for mos devices * src/misc/string.c, stringutil.h: moving some string functions from inpcom.c * src/include/bool.h: removing BOOLEAN definition (checked under mingw) 2008-03-23 Holger Vogt * src/frontend/inpcom.c: Nodes for SOI devices not detected correct * src/spicelib/parser/inptyplk.c, inpptree.c, ifeval.c: better TRACEing * src/winmain.c: larger printf buffer 2008-03-22 Paolo Nenzi * src/frontend/{commands.c, com_gnuplot.c, com_gnuplot.h}, * src/frontend/plotting/{gnuplot.c, gnuplot.h,plotit.c}: added initial support for gnuplot plotting of simulation outputs. Gnuplot interface code has been sent by Stefano Pedretti. 2008-01-19 Dietmar Warning * configure.in: w/o optimization better debug * src/main.c: fix conflict for own shutdown function * src/frontend/numparam/xpressn.c: more precise recognition of subckt names * src/frontend/numparam/spicenum.c: avoid access to uninitialized memory because of pascal convention 2008-01-12 Dietmar Warning * configure.in, src/xspice/ipc/*.c: xspice ipc is possible * src/include/ngspice.h: reflect the extended autoconfigure 2008-01-06 Dietmar Warning * src/frontend/subckt.c: correct compare of binned model names. Fixed a bug of incorrect subckt expansion when MOS model inside. * src/spicelib/parser/inpdomod.c, DEVICES: Compatibility issue - now all bsim3 models running under level 8 and 49 and all bsim4 models under level 14 and 54. Distinction must be made by version parameter. 2008-01-04 Paolo Nenzi * src/frontend/runcoms.c: commented out code that did not allow rawfile generation for OP and AC analyses. Now rawfile is generated even for OP and AC. I do not know if this is consistent with spice philosopy but I think is nice to have. 2008-01-03 Dietmar Warning * src/main.c: rflag still needed. 2008-01-02 Dietmar Warning * src/frontend/outitf.c: Fixed rawfile ascii generation. Same like below. * src/frontend/inp.c: don't need local buffer w/o getcwd * src/conf.c: belong spice3 manual ascii is default anyway * src/misc/missing_math.*, src/include/missig_math.h, /src/frontend/measure.c, src/spicelib/analysis/dctran.c: Using a real double compare to equal. 2008-01-02 Paolo Nenzi * src/frontend/rawfile.c: Fixed rawfile ascii generation. The prevoius patch produced incorrect string like v(v(1)) for v(1) in the output file. 2007-12-31 Holger Vogt don't need buffer w/o getcwd fix for the crashing of ngspice under Windows when started from windows explorer. * src/frontend/inp.c: ngspice crashed when executing a file consisting of a simple control section. Fixed. 2007-12-29 Dietmar Warning * src/frontend/inpcom.c: 3/4 terminal recognition for bjt's * src/misc/string.c, stringutil.h: token function for bjt instance 2007-12-29 Holger Vogt * src/frontend/runcoms.c, runcoms2.c: backup the filetype problem if set in spinit * src/frontend/inpcom.c: no param handling for "set" commands 2007-12-27 Dietmar Warning * src/spicelib/devices/*/*init.c: No usage of C99 Designated Initializers * src/spicelib/devices/*/*par.c: only formatting issues * src/frontend/numparam/*.c: fixing memory problems in nupa_substitute and other * src/frontend/dotcard.c: strip white spaces only inside parens * src/misc/missing_math.*: AlmostEqualUlps in double is needed 2007-12-26 Paolo Nenzi * src/frontend/numparam/*: downgraded all files to standard C syntax with the included washprog.c tool. 2007-12-14 Dietmar Warning * configure.in, src/spicelib/devices/dev.c: allow mingw build w/o GUI 2007-12-14 Holger Vogt * src/frontend/runcoms.c, runcoms2.c: fix the filetype problem if set in spinit 2007-12-15 Steven Borley * Added automake warning and output verbosity to autogen.sh * src/frontend/spiceif.c: Avoid invalid lvalue assignment errors when calling the macro _foo(). Needed for gcc4 which no longer supports lvalue cast bogosity. Fixes bug 1584784. 2007-12-14 Steven Borley * Added missing .cvsignore file to the tests directories and some devices directories, and updated for change from makeidx to ngmakeidx 2007-12-13 Steven Borley * Fixed(?) missing files error when autogen.sh is run (with no adms) - configure.in: removed adms directors from AC_CONFIG_FILES list * Fixed inclusion of termcap header - configure.in: add check for to - frontend/terminal.c: select either or 2007-12-09 Dietmar Warning * src/frontend/numparam/xpression.c: placeholder for agauss (y=nominal_value) * src/spicelib/parser/inpdomod.c: if no bsim3 version given then use 3.30 2007-12-09 Holger Vogt * src/frontend/wdisp/windisp.c: better prototypes and some cosmetics * src/frontend/inpcom.c: change local index to ind to prevent conflict with index function 2007-12-06 Holger Vogt * src/frontend/wdisp/windisp.c: show coordinates and gradients, zooming 2007-12-02 Dietmar Warning * src/spicelib/devices/bsimX: div. unused variables and prototypes * src/frontend/inpcom.c, inp.c: fix prototype of dirname if not available * src/frontend/dotcards.c, src/misc/string.c: strip WhiteSpaces inside parens of dot cards * src/frontend/display.c: no WINX_DiagramReady parameter 2007-11-28 Dietmar Warning * configure.in: memory display independent from ftime under windows * src/frontend/numparam/xpression.c: fix the arg order for pow * src/frontend/wdisp/windisp.c, wprint.c: Prototypes and C comments * src/frontend/com_hardcopy.c, resource.c, terminal.c: prevent ext. warnings * src/frontend/inpcom.h: move arrays to the files there are needed * src/frontend/inpcom.c, inp.c: prototypes for dirname and asprintf * src/spicelib/parser/ifnewuid.c, inperror.c: prototype for asprintf * src/misc/ivars.c: prototype for asprintf * src/misc/util.c: better macro request to HAVE_DIRNAME * src/main.c: prototype for asprintf * configure.in: check for dirname and asprintf 2007-11-24 Dietmar Warning * configure.in: memory display independent from ftime under windows * src/frontend/numparam: pow function included 2007-11-22 Dietmar Warning * src/spicelib/devices/bsim3: update version 3.3.0 * src/spicelib/devices/bsim3v32: now version 3.2.x 2007-11-21 Dietmar Warning * src/spicelib/devices/bsim3/b3check.c,b3set.c: accept version 3.xx form * src/spicelib/devices/bsim4v2,3: multiplier included * src/spicelib/devices/bsim4v4: no std header * src/spicelib/analysis/dctran.c: AlmostEqualUlps on central place * src/misc/missing_math.x: AlmostEqualUlps on central place * src/include/missing_math.x: AlmostEqualUlps on central place 2007-11-17 Dietmar Warning * src/spicelib/devices/bsim4vX/b*par.c: scale parameter included * src/frontend/numparam/xpressn.c: cast to prevent warning 2007-11-14 Dietmar Warning * src/frontend/inp.c: one only "one" times * src/frontend/resource.c: include prototype for timediff * src/frontend/parser/complete.c: functions used in this branch only * src/spicelib/analysis/acan.c: unused variable step * src/spicelib/parser/inp2q.c: 5 nodes only for adms * src/misc/string.c: comment was nonsens * src/misc/stringutil.h: no prototypes index/rindex for non-provided functions * src/misc/misc_time.h: providing prototype for timediff * src/main.c: unused variable rflag * src/xspice/mif/mifsetup.c: no c++ comments 2007-11-14 Dietmar Warning * src/frontend/inp.c: No title message to stderr - stdout is enough * src/frontend/spiceif.c: reenable INPkillMods after deck processing * src/spicelib/parser/inpdomod.c: til now only bsim4 has version processing 2007-11-13 Paolo Nenzi * src/spicelib/devices/dev.c: As suggested by Alberto Lucchini and Francesco Nizzi I have masked the debug information on xspice device loading with #ifdef TRACE. 2007-11-12 Paolo Nenzi * src/frontend/inp.c: corrected option processing. Now "scale" option is special and is processed before netlist parsing. The implementation is not very clean. 2007-11-04 Dietmar Warning * configure.in, src/Makefile.am, src/spicelib/devices/Makefile.am, src/spicelib/parser/inpgmod.c, src/spicelib/parser/inp2m.c BSIM4 has changed (based on Phil Barker patch): version code 4.2.1/4.3.0/4.5.0 added 4.4.0 small corrections 4.6.0 updated to 4.6.1 2007-10-12 Paolo Nenzi * src/frontend/{cpitf.c, inp.c, miscvars.c}, src/spinit.in: reimplemented "brief" option as a boolean and defaulted to TRUE. Now the netlist is not printed anymore when you load a circuit. For the original behavior uncomment "unset brief" in the spice init file. 2007-10-11 Paolo Nenzi * src/main.c, src/frontend/{inpcom.c, miscvars.c}: added option -a and --autorun to add the control section ans run the loaded netlist. In the original implementation by Phil Barker, the loaded circuit was always run, both in interactive and batch mode. 2007-10-09 Paolo Nenzi * src/frontend/{device.c, miscvars.c}: added "altshow" option to enable the new (Phil Barker) version of the show command. The old show command looks better in interactive mode while the new format is more suitable for automatic processing of the data. * src/maths/ni/niiter.c: added check on iteration numbers (Phil Barker). 2007-10-09 Paolo Nenzi * src/frontend/cktdojob.c: Chenged of reporting analysis temperature from Kelvins to Celsius (as suggested from Phil Barker). * src/spicelib/parser/inp2m.c: Added model binning code left out in the previous commit. * src/frontend/variable.c: Added SIMVARS from Phil Barker. * src/frontend/{outitf.c,runcoms2.c}, src/include/cpextern.h: Patch from Phil Barker. * src/frontend/subckt.c: allow for .ic, .nodeset names to be embedded in a subckt;enhanced subckt.c to created appropriate node names for flattened simulation netlist (Phil Barker). * src/spicelib/devices/cap/cap.c: aliased capacitance parameter with "c" and "cap" (patch from Phil Barker). * src/spicelib/devices/res/res.c: aliased some parameters. Originally got the patch from Phil Barker but used IOPR (redundant) instead of IOPZ. * src/spicelib/devices/res/resparam.c: Added fix for zero valued resistors (Phil Barker). * src/spicelib/devices/vsrc/{vsrc.c, vsrcacct.c, vsrcask.c, vsrcdefs.h, vsrcload.c, vsrcpar.c, vsrctemp.c}: Added "repeat" parameter to the PWL model. * src/xspice/icm/analog/multi_input_pwl/*: added new element from Phil Barker: added new multi-input gate VCVS using XSPICE extensions that supports nand, and, nor, or. Currently only supports 2-inputs (x,y). The x's and y's represent the piecewise linear variation of output as a function of input. Only 1 input determines the state of the outputs: and/nand: controlling input is chosen on the basis of the smallest value, or/nor: controlling input is chosen on the basis of the largest value. 2007-10-08 Paolo Nenzi * src/main.c, src/frontend/{spiceif.c, spiceif.h, subckt.c}, src/include/{fteext.h, inpdefs.h}, src/spicelib/parser/{inp.h, inp2dot.c, inpdomod.c, inpfindv.c, inpgmod.c}: other improvements by Phil Barker: - Added model binning function - Added model version function - enhanced the interactive command 'alter' to allow for changing the model of a device 2007-10-08 Paolo Nenzi * src/frontend/{inp.c, inpcom.c, inpcom.h, measure.c, nutimp.c, runcoms.c subckt.c, ftedefs.c, fteext.c, dctran.c, inp2dot.c, inppas2.c}: added several improvements mad by Phil Barker: - .measure statements: trig/targ, max, min, avg, rms, integral, param - autostop option: which causes the simulation to stop if all .measure statements are satisfied; option is ignored if any max, min, avg, rms or integ measurements defined. - fixed some floating point number comparisons where the code was checking for equality with '==' by adding a routine called 'AlmostEqualUlps'. - parametrized subcircuits - added support for ".lib" syntax - added ability to recursively call spice netlist parser; this allows for reading in additional .include and .lib files defined in other netlist files - changed the flattened netlist names created in 'subckt.c' to match other spice simulators 2007-10-08 Paolo Nenzi * src/frontend/{rawfile.c, outitf.c, runcoms.c}, src/include/ftedefs.h: modified current vectors output amd added struct elements for holding the name of the last analysis run (all from Phil Barker patch). 2007-10-08 Paolo Nenzi *src/frontend/{device.c, device.h}: modified 'show' command to match SmartSpice syntax from Phil Barker patch. 2007-10-08 Paolo Nenzi * src/frontend/plotting/plotit.c, src/frontend/{nutimp.c, parse.c}, src/maths/ni/{niconv.c, niiter.c}, src/spicelib/analysis/dctran.c: Applied patch from Phil barker, iproved error/warning reporting. 2007-10-08 Paolo Nenzi * src/frontend/numparam/{general.h, mystring.c, numpaif.h, numparam.h, nupatest.c, spicenum.c, washprog.c, xpressn.c}: Applied patch from Phil Barker that improves the capabilites of numparam library. Now numparam supports fully parametrized netlists and can handle a larger set of parameters than the previous implementation. Added 'nupa_add_param' routine and ability to reevaluate parameter set using 'nupa_eval' by keeping parameter value set. Added support for 'ternary' operators in parameters as well as 'max' and 'min'. 2007-09-17 Paolo Nenzi * src/frontend/com_let.c: Applied patch from Friedrich Schmidt to fix the big in let command that prevented the following command to be correctly interpreted: let vec=vector(10) let vec[2]=5.0 and returning an error instead. The patch has been submitted by Friedrich Schmidt. 2007-09-14 Paolo Nenzi * src/frontend/inp.c: fixed a bug in com_list() that skipped a line number when in displaying the ".end" line. I just moved the line increment at the end of the for cicle (after the instruction that skips the ".end" line). 2007-09-12 Dietmar Warning * src/frontend/terminal.c: fixed segmentation fault occurring when messages >4096 bytes are sent to out_printf() function. The fix uses asprintf if available. 2007-08-12 Paolo Nenzi * src/frontend/inpcom.c: fixed segmentation fault with empty .include file or directory include. This is a hack the full inpcom shoud be rewritten. 2007-06-17 Gong Ding * src/spicelib/devices/dev.c: use a more flexiable way to define device. If it doesn't work, one can returen to old version (rename as dev_old.c). These files are modified for avoiding NULL DEVices[] pointer. * spicelib/analysis/acan.c: * spicelib/analysis/cktdest.c: * spicelib/analysis/cktdisto.c: * spicelib/analysis/cktdump.c: * spicelib/analysis/cktfbran.c: * spicelib/analysis/cktic.c: * spicelib/analysis/cktload.c: * spicelib/analysis/cktnoise.c: * spicelib/analysis/cktop.c: * spicelib/analysis/cktpzld.c: * spicelib/analysis/cktpzset.c: * spicelib/analysis/cktsetup.c: * spicelib/analysis/ckttemp.c: * spicelib/analysis/ckttrunc.c: * spicelib/analysis/ckttyplk.c: * spicelib/parser/inptyplk.c: The modifications should not affect ngspice's function. 2007-06-14 Paolo Nenzi * src/misc/misc_time.c: added a casting to doube in seconds function to solve the "negative times" in acct command. 2007-05-13 Paolo Nenzi * src/spicelib/devices/dev.c: updated NUMDEV to reflect actual situation. * src/spicelib/devices/adms/admst/ngspiceVersion.xml: added code for ekv. 2007-05-11 Laurent Lemaitre * src/spicelib/devices/adms/admst/ngspiceMODULEguesstopology.c.xml, src/spicelib/devices/adms/admst/ngspiceVersion.xml, src/spicelib/devices/adms/admst/ngspiceMODULEdefs.h.xml: added support to "div" builtin function. 2007-05-09 Dietmar Warning * src/spicelib/devices/dev.c: reserved space for ekv model. 2007-05-08 Dietmar Warning * src/spicelib/devices/amds/ekv/: Initial import of the ekv model (long channel). 2007-05-06 Dietmar Warning * src/spicelib/parser/inpdomod.c: small adaptation for ekv and psp102. 2007-04-30 Gong Ding Add NDEV (numerical device) to device library. It is an interface to call my 2d semiconductor simulation code via network. The device simulation code can be found at http://gss-tcad.sourceforge.net * src/spicelib/device/ndev/*.* : The NDEV implement code * src/spicelib/device/dev.c : Add ndev to spice device library * src/spicelib/parser/inppas2.c : Add element name 'N' to describe NDEV * src/spicelib/parser/inp2n.c : Routine to parse NDEV element * src/spicelib/parser/inpdomod.c : Routine to parse NDEV model * src/frontend/misccoms.c : When quit, call CKTdestroy function * src/spicelib/analysis/dctran.c : Show a time process indicator * src/ciderlib/oned/onedest.c : Fix a invalid memory read problem * src/frontend/terminal.c : change to 2007-04-26 Paolo Nenzi * src/spicelib/devices/bsim4/: updated bsim4 model to 4.6.0. 2007-04-25 Paolo Nenzi * src/spicelib/parser/{inp2m.c, inpdomod.c}, src/spicelib/devices/dev.c, src/spicelib/devices/adms/psp102/: added support for psp102 model. 2007-04-24 Laurent Lemaitre * src/spicelib/devices/adms/admst/: updated templates for adms 2.2.5. 2007-01-21 Paolo Nenzi * src/spicelib/parser/inp2q.c: Added patch from Hitoshi Tanaka to fix error in old BJT devices (that do not have fifth node). 2006-02-21 Paolo Nenzi * src/frontend/subckt.c, src/spicelib/parser/inp2q.c, src/spicelib/parser/inpdomod.c: Added fifth node on bipolar devices (Dietmar Warning) to support newer (adms) models. Updated number of nodes for subcircuits. 2006-02-19 Paolo Nenzi * tests/bin/check.sh: added patch from Gary R. Van Sickle . CYGWIN system is recognized as an UNIX flavour (for testing). 2006-02-17 Paolo Nenzi * src/spicelib/devices/dev.c: Added support for adms devices (Dietmar Warning). Devices implemented: hicum0 and mextram. 2006-02-16 Paolo Nenzi * src/spicelib/devices/dev.c: removed EKV ifdefs. In future versions of ngspice EKV (and other models) will be introduced as verilog-a models. 2006-01-31 Paolo Nenzi : * Committed the admst tree from the adms system. Laurent Lamaitre sent the XML code needed to generate ready-to-compile C code conforming to ngspice api from Verilog-AMS compact model description. Files changed: src/spicelib/devices/Makefile.am: added adms directory to DIST_SUBDIRS target. Files added: README.adms, src/spicelib/devices/adms/, src/spicelib/devices/adms/admst/, src/spicelib/devices/adms/admst/{COPYING, ngspiceMakefile.am.xml,ngspiceMODULEacld.c.xml, ngspiceMODULEask.c.xml, ngspiceMODULE.c.xml, ngspiceMODULEdefs.h.xml, ngspiceMODULEext.h.xml, ngspiceMODULEguesstopology.c.xml, ngspiceMODULEinit.c.xml, ngspiceMODULEinit.h.xml,ngspiceMODULEitf.h.xml, ngspiceMODULEload.c.xml, ngspiceMODULEmask.c.xml, ngspiceMODULEmpar.c.xml, ngspiceMODULEpar.c.xml, ngspiceMODULEsetup.c.xml,ngspiceMODULEtemp.c.xml, ngspiceVersion.xml} 2005-12-06 Dietmar Warning * src/spicelib/devices/hisim/hsm1ld.c: Variable tmp is really used only for flag swapping - because make she int. Some better reading in comments. 2005-12-04 Paolo Nenzi * src/spicelib/devices/bsim4/b4ld.c: As written by Dietmar, the changes introduced into this file around line 4015 - 4020 are wrong. Back to original Berkeley's code. 2005-12-02 Paolo Nenzi * src/maths/cmaths/test_cx_ph.c: added a missing include (patch by Paul Reich). * src/maths/sparse/spconfig.h: removed include directive (ngspice.h). * src/frontend/numparam/general.h, src/maths/ni/niiter.c, src/spicelib/devices/csw/{cswload.c, cswmpar.c}, src/spicelib/devices/hfet1/{hfetload.c, hfetsetup.c}, src/spicelib/devices/hfet2/{hfet2load.c, hfet2setup.c}, src/spicelib/devices/hisim/hisim.h, src/spicelib/parser/ptfuncs.c: partially applied Paul Reich patch that removed C++ style comments. 2005-11-27 Paolo Nenzi * Added manual page for ngmultidec. The man page has been written by John Murdie. 2005-11-13 Paolo Nenzi * src/spicelib/devices/bsim4/*: Updated bsim4 to version 4.5.0 using the code hacked by Hitoshi Tanaka and Dietmar Warning. Changes from original Berkeley's device group implementation: - Added multiplier parameter (m parameter). - Added NodeSet for internal nodes. - Removed #ifdef STDC and non STDC function prototypes - Added missing "pParam->BSIM4ku0we" to fprintf in b4temp.c. * src/spicelib/devices/bsim4/b4temp.c: fixed the following bug (Dietmar Warning): - Freed old node adding FREE(model->pSizeDependParamKnot); near line 146. * src/spicelib/devices/bsim4/b4set.c: fixed the following bug (Dietmar Warning): - Removed double testing for model->BSIM4prtGiven. * src/spicelib/devices/bsim4/b4ld.c: fixed the following bugs: - In the computation of ggts and ggtd near line 4014 here->BSIM4gcrgd and here->BSIM4gcrgs were exchanged. (Dietmar Warning). - In the computation of gcqdb and gcqsb near line 4019 here->BSIM4cqsb and here->BSIM4cqdb were exchanged (Hitoshi Tanaka). 2005-11-07 Paolo Nenzi * src/spicelib/devices/vbic/*: Dietmar Warning sent a patch to his last vbic implementation: - Added temperature dependence for RB and RC, - fixed a bug in current sign (reversing vbei and vbci), - removed double allocation of substrate node. 2005-10-19 Steven Borley * src/Makefile.am: Implemented fix to prevent 'multiple definition' errors during link of nghelp when built on systems that use the latest versions of the GNU tools. Solution provided by Andreas Unger . 2005-10-15 Steven Borley * src/frontend/spiceif.c: Fixed code to avoid errors (invalid lvalue in assignment) under gcc v4.0.2 or and warnings under gcc 4.0.0 (target of assignment not really an lvalue). 2005-10-15 Steven Borley * INTALL: Improved notes for MinGW/MSYS * src/frontend/resource.c: Fixed problems of reporting resource usage for MacOSX (should help other platforms too). * src/frontend/terminal.c: Fixed warning about unused variables and functions that can occur when HAVE_TERMCAP is undefined. * src/spicelib/devices/isrc/isrcload.c and vsrcload.c: Implemented patches supplied by Andreas Unger . Fixes XSpice bug; variable PER was being used before initialisation. 2005-09-19 Steven Borley * xgraph/idraw.c, xgraph/tgif.c and xgraph/xtb.c: Added missing system header includes (string.h and stdio.h) to avoid warnings. * src/frontend/aspice.c: Used (void*)0 instead of 0 for the terminating vararg, to avoid gcc 4.0 warning about missing sentinel in function call. * src/frontend/aspice.c: Resolved Bug 1293746 - Problem with aspice.c(171) in gcc (Solaris). * src/frontend/display.c: Fixed warning about redefinition of XtNumber. 2005-09-09 Steven Borley * Reverted to placing the cp_* stream variable definitions back in to src/frontend/streams.c with their extern declarations in src/frontend/streams.h 2005-09-08 Steven Borley * Added hard-coded paths for NGSPICEBINDIR and NGSPICEDATADIR for MinGW targets (src/conf.h) 2005-09-08 Paolo Nenzi * src/frontend/streams.{c,h}: applied Hitoshi's fix for undefined symbols when compiling ngspice under Linux. 2005-09-06 Steven Borley * Fixed alphabetic order in AUTHORS * Adjusted autogen.sh to give more relevant advice when a required program is missing. * Added ngspice.idx to MAINTAINERCLEANFILES in src/Makefile.am * Added work-round for missing scroll bar in help windows for an X11 display (seems to be an X-Windows bug) src/frontend/x11disp.c * Fixed memory leak in tilde expansion - src/frontend/parser/glob.c * Fixed spelling errors in tests/README * Implemented fix as described by Hitoshi Tanaka for the problem that causes "Warning - approaching max data size...." to be erroneously reported when compiled with MinGW/MSYS src/frontend/resource.c 2005-09-04 Paolo Nenzi * src/spicelib/devices/ltra/{ltraload.c, ltraacld.c, ltratrun.c}: Applied Hitoshi's patches to fix ltra code. The bug produced a "Timestep too small" in simulations and uninitialized variables produced wrong results in some files under MinGW. * src/spicelib/parser/inp2d.c: Fixed a bug that causes an "unknown parameter(save)" error if there is the expression like the following in the netlist of Cider analysis. D1 1 2 M_PN AREA=100 save (Fix from Hitoshi Tanaka). * src/frontend/streams.c: Fix to a bug that caused crash when I input "listing" command after loading Cider examples under Ngspice compiled by Visual C++. (Fix from Hitoshi Tanaka). 2005-08-30 Paolo Nenzi ============================ Rework-17 ================================== * src/frontend/numparam/Makefile.am: added missing include that prevented its dist-ribution. 2005-08-29 Paolo Nenzi ============================ Rework-16 ================================== 2005-08-26 Paolo Nenzi * src/fronted/dotcards.c: expressions were not parsed correctly, the bug was in the offset from string base: corrected. 2005-08-23 Paolo Nenzi * src/xspice/icm/xtradev/aswitch/cfunc.mod: Added minimum on resistance for aswitch to avoid unreasonable high values (due to near zero resistance) in current of connected voltage source. Change supplied by Hitoshi Tanaka. * src/xspice/icm/{cfunc.mod}: updated cfunc.mod files. Changes sent by Hitoshi Tanaka. 2005-08-22 Paolo Nenzi * src/frontend/plotting/x11.c: removed casting in a macro. It conflicts with the strictier syntax of recent gcc compilers. 2005-08-15 Steven Borley * Yet more changes to the doc build system - see doc/ChangeLog for details * In INSTALL added --enable-maintainer-mode as an argument to ./configure when building straight from CVS. This is now necessary due to the use of version.texi to allow versioning info to be passed into the documentation system. 2005-08-14 Steven Borley * More changes to the documentation. Specifically the make dist now produces a PDF file. See doc/ChangeLog for details * Update the AUTHORS file and adjusted formatting to make it more compatable with the texinfo include 2005-08-11 Steven Borley * Fixed problem with text2dvi and makeinfo when running make dist * Corrected many spelling errors in doc/ngspice.texi 2005-08-08 Paolo Nenzi * src/frontend/dotcards.c: Applied patch from Mike Waters to parse probes in the form: vm(4,0) or vm(0,4). Where one of the nodes is ground ie. 0, if the probe is "v" everything works but anything else ie. "vm", "vp", etc. fails. 2005-08-06 Paolo Nenzi * src/xspice/mif/mifsetup.c: Updated MIFunsetup to the latest version provided by Hitoshi Tanaka. 2005-08-04 Paolo Nenzi * Fixed a bug in memory management of xspice/ngspice that caused segmentation fault for codemodels that adds their own states to the state vector. Changes supplied by Hitoshi Tanaka (HDA01055@nifty.com): * src/math/ni/niiter.c: removed the first malloc for OldCKTstate0 since the number of states can be altered by xspice code models. This was already addressed in the past but this line remained. * src/xspice/mif/mifsetup.c: added MIFunsetup() to conform to spice3f devices model interface (xspice was based on spice3c1). * src/xspice/xspice.c, src/xspice/cm/cmexport.c, src/xspice/cmpp/writ_ifs.c: changed the entry corresponding to the unsetup function from NULL to MIFunsetup. * src/include/mifproto.h: added prototype for MIFunsetup. * src/spicelib/analysis/cktsetup.c: cleared node if initial condition of nodeset are given to fix a segfaults on second run of xspice netlists. 2005-06-30 Paolo Nenzi * src/frontend/resource.c: added IPC stuff * src/spicelib/parser/inpptree.c: fixed bug in power function. 2005-06-25 Paolo Nenzi * src/spicelib/analysis/acan.c: modified original integration of xspice event driven algorithm into spice3 code. Now CKTncDump() is used by xspice too. * src/spicelib/analysis/cktdojob.c: added ipc stuff. * src/spicelib/analysis/cktload.c: cosmetics. * src/spicelib/analysis/cktop.c: modularized the source and gmin stepping algorithm. I have extracted the code for gmin and source stepping to improve CKTop readability and maintainability. * src/spicelib/analysis/dcop.c: added event driven algorithm and ipc stuff. * src/spicelib/analysis/dctran.c: added xspice breakpoint control. * src/spicelib/analysis/dctrcurv.c: added event driven algorithm and ipc stuff. 2005-06-12 Steven Borley * Changes supplied bt Hitoshi Tanaka to allow XSpice to compile using MinGW in Windows. Main change points are as follows: (1) dlopen(), dlsym(), dlclose() and dlerror() were changed to the functions of Windows. (src/spicelib/dev.c) (2) The functions relation to IPC were removed. (src/xspice/ipc/ipc.c, and src/xspice/ipc/ipcsockets.c) 2005-06-09 Steven Borley * Fixed *# command operation (src/frontend/inp.c) * Added 'hack' to allow the 'numparams' variable to be set (or unset) before the netlist part of a file is parsed. This is based on code supplied by Dietmar Warning, with changes to allow it to work with the *# syntax, the unset keyword and variable amounts of white space. (src/frontend/inp.c) * line_free(line,flag) is now a macro so that line is set to NULL when it is freed. (src/frontend/inp.c) This is a safty mechnism. 2005-05-31 Steven Borley * Applied fix for logging supplied by Dietmar Warning (src/main.c) * Miscellaneous tidying in src.main.c for format, indentation, #include style ("" vis-a-vis <>) and removal of some compile time warnings. 2005-05-30 Steven Borley * Corrected return types (where necessary) for the functions that make up the devices[] array initialised in src/frontend/display.c, and used specific #includes rather than extern references. Added new headers as required. * Moved jbuf from src/main.c to src/frontend/signal_handler.c * Tidy up of the header files in src/frontend and sub-directories. Motivation is to remove extern declarations within .c files and place in .h files. New header files where necessary. 2005-05-28 Steven Borley * Fix bug introduced in my last change. Fix supplied by Hitoshi Tanaka. Bug can cause a segmentation fault. * Fixed the format of section 5.3.37. Save* in src/ngsoice.txt * In src/frontend/plotting replaced extern references in .c files wiith #include of suitable header files. * Added src/frontend/numparam/numpaif.h for the external interface to the numparam library. 2005-05-26 Steven Borley * Fixed bug with define (see bug reference [ 999546 ] 'define' is broken in ngspice-15). * Fixed bug with 'plot title title_name' (see bug [ 557638 ] plot segmentation fault). 2005-05-23 Steven Borley * Fixed a divide-by-zero bug in the MOS level=2 device model the fix was supplied by Hitoshi Tanaka. * Fixed a 'core-dump' that could be caused by the interactive 'write' command when the plot contains more than one dimension. This was due to improper use of a buffer in rawfile.c as pointed out by Dietmar Warning. Bug also affected ngsconvert. 2005-05-22 Steven Borley * src/frontend/numparam/mystring.c - fix for MinGW from Hitoshi Tanaka. * various files - removal of more warning due to unused variables 2005-05-21 Steven Borley * src/spicelib/devices/vbic/vbicinit.c Fixed a structure initialisation problem that occurs when cider is enabled. Also fixes lots of warning within ciderlib related to unused variables. * Fixed a compile warning in src/frontend/com_history.c when readline or editline are used. * Removed the files src/misc/terminal.h/.c and src/include/terminal.h The first two were empty and the last just included the second. The relevant makefile.am files have been updated, so a ./configure will need to be re-run before building. * Fixed problems where printf format was int yet on some systems the argument is long (due to size_t being long). Fixed by always using long format and casting to long. Affected src/frontend/spiceif.c and src/misc/alloc.c This makes obsolete the IS_SIZE_T_LONG macro that defined by configure.in, now removed -it was not working for all platforms (eg. MacOSX) * configure.in - Removed IS_SIZE_T_LONG (see above). Now only test for ncurses etc., when either Readline or Editline are being used. This will fix the basic problem of building on MinGW which does not have these libraries as standard. Fixed the typo in the AC_REVISION() macro. 2005-05-20 Steven Borley * nghelp now uses src/conf.c for consistency with ngspice and ngnutmeg. Under MinGW the nghelp window is now kept open until a key is pressed. This allows users to see any error messages before the system closes the window. * src/conf.c now uses PACKAGE_VERSION (was VERSION) and PACKAGE_BUGREPORT (was hard coded in file to "ngspice-bugs@lists.sourceforge.net"). These values are set by the AC_INIT macro in configure.in * src/winmain.c - changes to fix warning when compiled with gcc 2005-05-19 Steven Borley * Fixed declaration of oflag in winmain.c - fix from Dietmar Warning * Fixed compile of makeidx for MinGW. 2005-05-18 Steven Borley * Reverted src/spicelib/devices/restemp.c to previous version. Changes in this file were intended for temporary debug and should not have been committed to CVS. * Moved isnan() to src/misc/missing_math.c from src/spicelib/devices/dev.c following suggestion from Dietmar Warning. Also took opportunity to fixed a compiler warning in dev.c * Conversion of files containing non-ASCII characters (German language comments) to ASCII by Dietmar Warning. 2005-05-18 Steven Borley * I erroneously omitted a few changes from Dietmar Warning: Fix to src/maths/cmaths/Makefile.am to exclude test programs that don't compile under MinGW. Fix to src/spicelib/devices/dev.c to exclude local isnan() when it exists as a library function. * Fixes to src/Makefile.am to exclude programs that don't compile under Windows (MinGW). Fix to avoid dependence problem with linking in winmain.o 2005-05-17 Steven Borley * Updates configure.in. Notably this removes the need for acconfig.h (the use of which is deprecated by autoconf). Most of the remaining changes just tidy with the aim of following guidelines in the autoconf manual. Fixed an issue with CFLAGS usage and --disable-debug. Some fixes aimed as support for MinGW (more to follow). * Removed acconfig.h (see above for reason). * Updated various file to allow build using MinGW. Affected files: src/main.c, src/nghelp.c, src/frontend/evaluate.c, src/frontend/resource.c, src/frontend/signal_handler.c, src/frontend/wdisp/windisp.c, src/frontend/wdisp/winprint.c, src/include/macros.h These changes mostly supplied by Dietmar Warning. Highlights: macros used for sigjmp_buf (JMP_BUF), sigsetjmp (SETJMP) and siglongjmp (LONGJMP); Fixed problem of duplicated definition of BOOL. Adjustments to allow ngnutmeg to compile with a Windows frontend. 2005-05-11 Steven Borley * Changed line-ending on several files from DOS to UNIX. * Translated German in to English in comments for several files (where the German was simple and meaning clear from the context - and Babel fish helped too). This also removes the non-ASCII characters from these files, which was giving problems on at least one platform. * In the above files I have also replaced c++ comment style with c comments (i.e. // go to /* ... */). 2005-05-10 Steven Borley * Some minor tidy-up as follows: - Added missing .cvsignore files in many source directories. - Added #ifdef CIDER...#endif around fields in structure initialisation of nbjt, nbjt2, numd, numd2 and numos - this is strictly unnecessary as these devices are only used when CIDER is defined but it keeps symmetry with other devices. - Added some extra TRACE debug statments in in the parser * Added conditional on the ngspice program to prevent errors when spiceinit file is used with ngnutmeg (spiceinit.in) 2005-05-10 Paolo Nenzi * src/spicelib/devices/isrc/*,src/spicelib/devices/vsrc/*: added XSPICE extensions: PHASE parameter and current in isrc. Added AM transient function (Amplitude Modulation): AM (sig_ampl offset_const mod_freq carrier_freq t_delay) The waveform will follow: value = sig_ampl*{offset_const + SIN(2*PI*mod_freq*(t-t_delay))}* SIN(2*PI*carrier_freq*(t-t_delay)) As an example you can use: V1 1 0 AM(10 1 1K 100 1M) R1 1 0 1 2005-05-09 Steven Borley * Added new syntax to the the resistor card to support different style temperature dependence (from Hitoshi Tanaka ). Syntax forms now include: Rxxx n2> TC= Rxxx n2> TC1= Rxxx n2> TC1= TC2= Rxxx n2> TC= The the first pair are equivalent, and the last pair are equivalent. 2005-05-07 Steven Borley * Added support for the BSD licensed editline library This includes a work-around to fix a problem found in the current version of this library (see prompt() in src/main.c). * Added and updated infomation in the INSTALL file. 2005-05-06 Steven Borley * Added code by by H.Tanaka for the .global keyword. This is enabled by supplying the new --enable-dot-global argument to ./configure. * Also added configuration for a new --with-editline=yes|no argument to ./configure for future support of the BSD editline library as an alternative to the GNU readline library. 2005-05-05 Steven Borley * Fixed a compile problem with Xspice on Cygwin. Still will not link, but it's a step in the right direction. 2005-05-04 Steven Borley * Fixed issues with the alternate prompt (src/main.c, src/frontent/control.c and src/include/cpextern.h) - a format problem when used with readline and a buffer overrun. Also reduced max number of chevrons to 16 and added + at start when command stack is holding than 16. * Translations for German comments provided by Dietmar Warning, to fix issue with UTF-8 observed on Windows (src/main.c) * Fixed readline operation within ngnutmeg (src/main.c). Also include some minor tidy-up to avoid some compiler warnings. Updated copyright date for --help. 2005-04-29 Paolo Nenzi * src/frontend/inpcom.c: end-of-line comments starting with the "$" (dollar) sign can be confused with a variable. To avoid this, the new syntax for such and-of-line comment is: $ (the space is mandatory). Patch sent from Steven Borley . 2005-04-26 Paolo Nenzi * src/main.c, src/frontend{inp.c, nutinp.c}, src/include/defines.h: New logic for ngspice initialization (patch from Steven Borley ): Load the standard start up file 'spinit' Then look for '.spiceinit' in current directory If this fails look for 'spice.rc' in currect directory if this fails the check the HOME environment variable if HOME is set then: Look for for '.spiceinit' in user's home directory If this fails look for 'spice.rc' in user's home directory. Fixed a memory leak in main.c * src/include/{complex.h, fteext.h, ngspice.h, sperror.h}: code cleaning and removed some warning (patch from Steven Borley). 2005-04-25 Paolo Nenzi * src/frontend/numparam/{general.h, numparam.h, nupatest.c, spicenum.c, washprog.c, xpressn.c}: Applied patch from Steven Borley . The patch removed the numparam support for end-of-line comments and moved it into frontend code. Line buffer for numparam is increased from 250 to 1000 to accomodate large model cards. Fixed compilation on Cygwin and MacOSX. * src/frontend/subckt.c: numparams, once compiled in, must be enabled, during interactive session, using "set numparams". Since library is experimental and under continuos testing, it is not yet intended for general use and support is provided for interactive sessions only (patch from Steven Borley). * src/frontend/{device.c, spiceif.c}: fixed case sensitivity problems in key-word identification (patch from Steven Borley). * src/frontend/inp.c: Fix a bug where the wrong argument to 'listing' would error, but still produce a listing (patch from Steven Borley). * src/frontend/inpcom.c: From Steven Borley patch: End-of-line comments have been fixed and can be used on a line that is followed by a continuation line. This functionality has been moved from the numparams library and in to the front end code. All the following can be used to start a comment: ; and $ for compatibility with other simulators // like C++, and as per numparams -- as per numparams This was a full re-write of this code, not a conversion of the numparams code. It is not dependent on the numparams library. * src/frontend/resource.c: Fixed a compile bug under window & cygwin (patch from Steven Borley). * src/frontend/plotting/x11.c: Applied patch from Steven Borley. * src/spicelib/analysis/cktsetbk.c: Added some code to track breakpoints (you need to define TRACE_BREAKPOINT macro). 2005-04-16 Paolo Nenzi * src/frontend/{subckt.c, inpcom.c}, src/frontend/numparam/{general.h, mystring.c, readme.txt, spicenum.c, xpressn.c}: Applied patch from Steven Borley that fixed numparam library. Patch description follow (extracted from Steven's message): > Fixes problem with logfile not being opened before we have something to write to it, > Renamed round() and trunc() to avoid clash with functions in math.h, > Numparam now only stops execution when it finds errors, > Added some debug tracing (normally off), > Added some debug tracing (normally off), > Fixes a #ifdef that had a typo and thus stopped numparams, working, > Renames a local variable to avoid confusion (of the developer/maintainer), > Fixes the renumbering of lines from a .include file. * examples/numparam/{example.cir, pintest.cir,pin.mod}: added netlists sent with Steven's patch. * src/frontend/subckt.c: Added fix sent by Hitoshi Tanaka . Now nodes starting with the letter "v" in subcircuits are translated correctly (as internal nodes) and not as voltage sources v. * src/xspice/cmpp/pp_lst.c: malloc did not consider the null terminating character in "path". Applied patch from Mac OSX patch file maintained by Khairulmizam Samsudin . * src/xspice/icm/makedefs.in: Mac OSX requires different flags for shared libraries linking. Applied patch from Mac OSX patch file maintained by Khairulmizam Samsudin . 2005-04-06 Paolo Nenzi * src/frontend/subckt.h: Since inp_numnodes has been declared static the prototype has been removed. 2005-04-04 Paolo Nenzi * src/frontend/subckt.c: Applied patch from Steven Borley that fixes a bug in model name translation that shows in nested subckts reported by Hitoshi Tanaka (for which he sent a patch that was supersed by Steven's one). * configure.in: As Stuart Brorson suggested now the garbage collector library is compiled only on explicit request by the user. 2005-03-20 Paolo Nenzi * src/spicelib/analysis/cktntask.c: The default parallel multiplier (m=1) for mosfet levels 1, 2, 3 and 9 was not set in interactive analyses. Applied fix sent by Steven Borley . * Changed value of trtol to 1 when xspice extensions are compiled (as in xspice source code). 2005-03-17 Paolo Nenzi * src/main.c: Applied patch sent by Steven Borley that removed the duplicate declaration application_name and gnu_history_file, removed the "static" keyword in shutdown() and set NULL as return value in function prompt() when non prompt is passed to readline(). * src/ngspice.txt: Applied patch sent by Steven Borley that fixed a few errors that corrupted text output. * configure.in: Applied patch sent by Steven Borley that fixes compiler warnings on MAC OSX (related to the linking order of X libraries). The remaining changes fix errors in spelling. * tests/bin/check.sh: Applied patch sent by Steven Borley that added support for Mac OSX and a default case for not (yet) supported architectures. * src/frontend/aspice.c: Applied patch sent by Steven Borley that fixed compiler warnings on Mac OSX in definition of "status". * src/spicelib/devices/bsim3/b3set.c: Applied patch sent by Steven Borley that remove the compiler warnings about ambiguous "else". 2005-03-13 Paolo Nenzi * tests/bin/check.sh: Changed the previous check script with the one supplied by Dietmar warning . This new script adds support for different architectures (MINGW32, Linux, SunOS). * src/spicelib/device/vbic/vbicpzld.c: Corrected an error in pole-zero routine. Dietmar Warning sent the fix. 2005-03-07 Paolo Nenzi * src/spicelib/devices/bsim4/b4ld.c: commented out NEWCONV section. 2005-03-06 Paolo Nenzi * src/spicelib/devices/bsim4: removed uninitialized variables in model files. * src/spicelib/analysis/dctrcurv.c: Dietmar Warning has changed the way the lst point in a dc sweep is computed. This new scheme is more accurate. 2005-02-28 Paolo Nenzi * DEVICES: Updated (again) changing BSIM4 level from 60 to 14 since older model revisions are not yet in ngspice. This is consistent with model developers: newer models are compatible with older ones. * src/spicelib/devices/bsim4/: updated to revision 4.4.0 with "m" parallel multiplier enhancements. Thanks to Mick Tooher and Dietmar Warning for this update. * tests/bsim4/: updated test files for bsim4 4.4.0. The old files have been replaced with new ones coming from BSIM4 site. There are new tests: (*_gedl*) and ro_17.cir. 2005-02-25 Paolo Nenzi * DEVICES: Dietmar Warning (warning@danalyse.de) provided me an updated and corrected version of this file. 2005-02-08 Paolo Nenzi * src/frontend/subckt.c: modified the file with the one supplied by Dietmar Warning's (warning@danalyse.de). This fix the bug that caused ngspice to crash with long subckt lines. 2004-09-05 Paolo Nenzi * src/spicelib/devices/jfet/jfet.c: model type (njf or pjf) was defined as input/output parameter. Now is an input-only parameter, as in other models. * tests/jfet/jfet_vds-vgs.out: Corrected the output after the change in jfet.c. With the old code the number associated to njf or pjf (meaningless) changed each run of ngspice and caused the check process to fail. * src/spicelib/devices/mesa/mesa.c: model type was reported incorrectly. Declared parameter vt0 as "redundant", since it has the same meaning of vto. * tests/mesa/mesa11.out: changed test file output according to changes in mesa.c. Now model type ic correct. 2004-09-01 Paolo Nenzi * src/conf.c: Modified bug reports address. Now it points to a mailing list dedicated to bug reports. 2004-08-29 Paolo Nenzi * src/fronted/aspice.c: Added a define for FreeBSD (from FreeBSD ports archive). 2004-08-22 Paolo Nenzi * src/xspice/enhtrans.c: Removed code introduced by Stuart Brorson to limit parsing of POLY statements to dimension 2. Now functions returns a copy of the error strings that i freed by higher level code once processed and write the error on the expanded netlist (as comments) instead of expanded lines (this fixes a segmentation fault since INPpas1() does not check if the returned line is not null and makes expanded netlist more informative). 2004-08-20 Paolo Nenzi * src/frontend/{gens.h, gens.c, device.c}: Committed another Vera Albrecht's patch for the "show" command. This closes the bug definitively. * src/include/{cktdefs.h, dgen.h, ftedebug.h, missing_math.h, ngspice.h, noisedef.h, sensdef.h}, src/spicelib/analysis/{ckt.h, ckti2nod.c}: committed Vera Albrecht patch to remove some compiler warnings. 2004-08-16 Paolo Nenzi * src/frontend/{device.c, gens.c}: Committed Vera Albrecht's patch to the "show command" I closed on 2004-08-13. Vera's patch is better. 2004-08-15 Paolo Nenzi * configure.in, src/spinit.in: Added a variable in configure.in to decomment codemodels lines in spinit if --enable-xspice is issued in the configure phase. It is a hack but works. 2004-08-14 Paolo Nenzi * src/main.c: The code for -o option contained an error that prevented the correct operation of output redirection. The masking #ifdef has been changed to #ifndef. 2004-08-13 Paolo Nenzi * src/frontend/device.c: "show" command leaked 28 bytes for each group of words since an allocated pointer in line 33 of gens.c was never freed. It is not possible to free allocated memory using that pointer since it is used and its value altered. I used "listdg" copying original pointer value to it and freeing memory using "listdg" instead. There were sone "tfree" that caused problems for incorrect inputs, I have removed them and tested against some bad syntax. Results shows no leaks. * src/spicelibe/devices/{res/resparam.c, cap/capparam.c, ind/indparam.c}: Fixed a bug introduced with m and acResistance parameters. Since show command works as soon as a circuit is loaded, before any call to DEVsetup or DEVtemp is made, some parameters, in this early call showed incorrect results. Simulations are not affected by this bug, but it is annoying. Now principal parameters are display correctly. * src/spicelib/analysis/cktncdump.c: fixed a typo that prevents compilation on some systems. 2004-08-09 Paolo Nenzi * Updated and corrected test files in "tests" directory. Added "examples" directory. * src/spicelib/devices/bsim3/b3set.c: Added Dietmar Warning patch to solve a bug that shows up when acm=2 was used. From Dietmar's mail message: if we use the acm=2 option we must set the nrd and nrs defaults to 0. * src/spicelib/devices/mos3/mos3temp.c: As suggested by Dietmar Warning I removed the >1um limit for the model. 2004-07-08 Paolo Nenzi * Applied Al Niessner negabyte patch that removed all compiler warnings. * configure.in, src/xspice/icm/makedefs.in, tests/Makefile.am, xgraph/aclocal.m4, xgraph/configure.in, xgraph/configure: updated configuration files for autoconf V2.59 automake V1.8. 2004-07-05 Paolo Nenzi * src/frontend/resource.c: added __APPLE__ for mac osx support as in patch sent by Khairulmizam Samsudin * src/spicelib/parser/inpdomod.c: fixed some typos as in patch sent by Khairulmizam Samsudin 2004-06-22 Paolo Nenzi * src/spicelib/devices/vbic: Vbic code updated. Thanks to Dietmar Warning (warning@danalyse.de )now we have the four terminal version of the VBIC model. The old three terminal version has been discarded. 2004-06-21 Paolo Nenzi * src/frontend/subckt.c: patch from Stuart Brorson . This patch adresses the following problem (as written by Stuart): Modified modtranslate and devmodtranslate to fix bug noticed by Liu: codemodel names called out in the device instantiation line ("A1 1 2 3 4 lim") were not translated correctly if they were invoked inside a .subckt. Fix involved explicitly adding code to handle "A" device types when translating the line. SDB 6.18.2004. 2004-05-30 Paolo Nenzi * src/frontend/subckt.c: patch from Dietmar Warning (warning@danalyse.de) to fix memory errors when using very long model card. src/spicelibe/devices/vbic/vbicsetup.c: patch from Dietmar Warning (warning@danalyse.de) to fix vbic behavior. 2004-02-14 Paolo Nenzi * Trimmed the autoconf interfaces. Added dummy ".out" files into many tests subdirectories and modified many Makefile.amS. 2004-02-05 Paolo Nenzi * src/spicelib/analysis/cktntask.c: Bug: not all the values of TSKtask structure were copied and got a correct default value. The bug showed as an infinite loop in gmin stepping. 2004-02-10 Paolo Nenzi * src/frontend/inpcom.c: Applied patch from Dietmar Warning to solve the bug discovered by Jelle Haandrikman: wrong subcircuit expansion when leading spaces are present in the subcircuit netlist. 2004-01-28 Paolo Nenzi * configure.in: changed version to rework15. 2004-01-27 Paolo Nenzi * configure.in: changed version to rework15-pre3 and other small changes for release. * AUTHORS, FAQ: Updates * src/spicelib/devices/bjt/bjtpzld.c, src/spicelib/devices/bjt2/bjt2pzld.c: there was an error in the pole-zero routine. The collector resistance was loaded into the matrix instead of the condictance. * inpdomod.c: Updated HiSIM level to 64. * src/spicelib/devices/vbic/*, src/Makefile.am, src/spicelib/devices/dev.c, src/spicelibe/parser/inp2q.c, src/spicelib/parser/inpdomod.c,src/spicelib/devices/Makefile.am, tests/vbic, contrib/vbic, DEVICES: Added VBIC model from Dietmar Warning . This is the 3 terminal model without excess phase and termal network. 2004-01-26 Paolo Nenzi * DEVICES: updated isrc an vsrc status * src/spicelib/devices{isrc,vsrc}: Cleaned up code * tests/cider: Added example files for cider simulator. 2004-01-25 Paolo Nenzi * configure.in, acconfig.h: Added configure options for the following debug symbols: ASDEBUG, D_DBG_BLOCKTIMES, D_DBG_SMALLTIMES, NEWPRED. 2004-01-23 Paolo Nenzi * xgraph: Added xgraph plotting program. It can be added to the ngspice binaries by adding --enable-xgraph in the configuration phase. 2004-01-21 Paolo Nenzi * src/include/ifsim.h, src/include/cktdefs.h, src/frontend/spiceif.c, src/frontend/shyu.c, src/spicelib/cktntask.c: Applied the options patch made by Charles Williams 2004-01-20 Paolo Nenzi * src/maths/ni/*: Cleaned up code removing unnecessary includes. 2004-01-15 Paolo Nenzi * src/spicelib/devices/{cccs,ccvs,vccs,vcvs}/*: cleaned up the code. * src/spicelib/devices/csw/*, src/spicelib/devices/sw/*: cleaned up the code. * DEVICES: updated switches status. 2004-01-14 Paolo Nenzi * src/spicelib/devices/txl/*: Added TXLunsetup function to allow for multiple simulations. * DEVICES: Updated txl status. 2004-01-11 Paolo Nenzi * src/spicelib/analysis/*: Removed redundant includes. File stdio.h is already included via ngspice.h. 2004-01-10 Paolo Nenzi * configure.in: changed version to rework-15pre2. * src/frontend/{com_history.c, cpitf.c, display.h, evaluate.c, inpcom.c, misccoms.c, parser/glob.c, plotting/x11.c, resource.c, runcoms.c, signal_handler.c, subckt.c, variable.c} src/include/{ftedev.h, ngspice.h} src/misc{ivars.c, Makefile.am, string.c, tilde.c, tilde.h, util.c, util.h} src/{main.c, nghelp.c, ngmultidec.c} configure.in: Applied Stuart's patch tclspice-0.2.14_12-03-2003.diff.gz but with libreadline disabled by default. (Stuart Brorson ). * Fixed makefiles in src/xspice/icm and src/xspice/cmpp to make distclean without barfing. (Stuart Brorson ). * configure.in src/xspice/cmpp/Makefile src/xspice/cmpp/Makefile.in: Make configure automatically set paths for lex yacc and install dir (Stefan Jones ). * src/Makefile.am Makefile.am README.Tcl src/xspice/README src/xspice/icm/README src/xspice/icm/spice2poly/icm_spice2poly/README: Updated to reflect codemodel support is now complete (Stefan Jones ). * src/xspice/ipc/ipc.c: Remove linux specific includes which are not needed (Stefan Jones ). * src/xspice/{Makefile.am,xspice.c} src/xspice/cm/{cmexport.c,Makefile.am}: Moved the xspice library hooks into the cm directory (Stefan Jones ). * src/xspice/enh/enhtrans.c src/xspice/mif/mif_inp2.c: Fixed version from Stuart Brorson , http://www.brorson.com/gEDA/ngspice/ * src/spinit, arc/spinit.in, configure.in: parametrized spinit paths for codemodel devices. * src/Makefile.am, src/ngspice.idx: removed ngspice.idx and make it auto-generated and installed (Stefan Jones ). * src/frontend/aspice.c: Added #ifdef for SOLARIS. * src/include/cktdefs.h: added prototype for NInzIter(). * src/spicelib/devices/cpl/*: Added CPLask and CPLmAsk functions to access device's internals. Added CPLunsetup function to allow for multiple simulations. * DEVICES: updated with cpl changes. 2003-12-31 Paolo Nenzi * src/spicelib/devices/tra/*: Cleaned code. * src/spicelib/devices/ltra/*: Cleaned code. * src/spicelib/devices/urc/*: Cleaned code. * tests/transmission/{cpl*, txl*, ibm*}: Added test files for the kspice's cpl and txl devices. * src/spicelib/devices/cpl/*: Cleaned the cpl code. * src/spicelib/devices/txl/*: Cleaned the txl code. * src/frontend/subckt.c, src/spicelib/analysis/cktdojob.c, src/spicelib/analysis/dctran.c: added some txl an cpl specific code from kspice. * src/spicelib/devices/mesa/*: Added parallel multiplier and "dtemp", pole-zero analysis and parallel code switches. * src/spicelib/devices/mes/*: Added parallel multiplier. * tests/mes, tests/mes/subth.cir: added test netlist for mes devices. * DEVICES: updated documentation including MES, MESA, CPL, TXL, TRA, LTRA and URC changes. 2003-12-30 Paolo Nenzi * src/spicelibe/devices/hfet2/*: Added parallel multiplier and "dtemp" parameters. Added pole-zero analysis and parallel code switches. * src/spicelib/devices/jfet/jfetpzld.c: gspr and gdpr were initialized with Resist and not Conduct, corrected! * src/spicelib/devices/hfet1/*: Added parallel multiplier and "dtemp" to the code. Added the pole-zero analysis and parallel code checks. Corrected a bug in the unsetup function that caused a segfault. * tests/hfet/, tests/hfet/id_vgs.cir, tests/inverter.cir: added hfet test netlists. * DEVICES: updated hfet1 status. 2003-12-27 Paolo Nenzi * src/spicelib/devices/jfet2/*: Added parallel multiplier and "dtemp" parameter. Added Alan's CopyNodeSet, and inserted a missing instruction in JFET2temp (for parallel code). * DEVICES: Updated documentation for JFET2 model 2003-12-26 Paolo Nenzi * src/spicelib/devices/jfet/*: Added parallel multiplier and "dtemp" parameter. * src/spicelib/devices/jfet/jfetload.c: reintroduces the old model code, superseded by Sydney code (Parker Skellern). The code is not used but is left as reference. * DEVICES: Updated jfet status * tests/jfet, tests/jfet/jfet_vds-vgs.cir: added jfet directory and one netlist. 2003-12-24 Paolo Nenzi * src/maths/cmaths/cmath4.c: Applied Vera Albrecht patch to enable interpolate function. * src/frontend/{come_let.c, control.c, evaluate.c, outitf.c, parse.c}, src/frontend/parser/lexical.c: Applied Vera Albrecht patch that fixes ngspice bugs in its control language (c shell). 2003-12-08 Paolo Nenzi * src/spicelib/devices/mos9/*: Added "dtemp" parameters. * DEVICES: Updated MOS9 status. 2003-12-08 Paolo Nenzi * src/spicelib/devices/mos6/*: Added "m" "dtemp" parameters. * DEVICES: Updated MOS6 status. 2003-11-22 Paolo Nenzi * src/spicelib/devices/bsim2/*: Added "m" parameter and noise routine. * DEVICES: Updated file with bsim2 changes. 2003-11-21 Paolo Nenzi * src/spicelib/devices/bsim1/*: Added "m" parameter and noise routine. * DEVICES: Updated file with bsim1 changes. 2003-11-12 Paolo Nenzi * src/spicelib/devices/mos2/*: Added "dtemp" parameter. * src/spicelib/devices/mos3/*: Added "dtemp" parameter. * DEVICES: updated file. 2003-11-11 Paolo Nenzi * src/spicelib/devices/mos1/*: Added "dtemp" parameter. * DEVICES: Updated MOS1 status. 2003-11-02 Paolo Nenzi * doc/ngspice.texi: updated documentation. 2003-10-29 Paolo Nenzi * src/spicelib/devices/bjt2/*: Enhanced bjt level 2 model adding dtemp, parallel mutliplier "m" and support for CIDER multiprocessor compilation. * DEVICES: Updated status of Diode and BJT's. 2003-10-26 Paolo Nenzi * src/spicelib/devices/bjt/*: Improved bjt level 1 model adding dtemp and parallel multiplier. 2003-10-24 Paolo Nenzi * src/spicelib/devices/dio/*: Improved diode model with code sent by Diermar Warning and mine improvements. Forward/Reverse knee currents, periphery effect, temperature corrections of some parameters and parallel multiplier. * doc/ngspice.texi: updated documentation with new diode model. 2003-10-01 Paolo Nenzi * src/spicelib/analysis/noisean.c: fixed an arror that caused segfault when resuming an halted long lasting noise analysis. The source fo this fix is Vera Albrecht * src/spicelib/devices/res/restemp.c: Changed default value for flicker noise exponent to 1.0 (was 0.0), as in others spice devices. 2003-09-27 Paolo Nenzi * src/spicelib/devices/ind/*, src/spicelib/parser/inp2l.c, src/spicelib/parser/inpdomod.c, src/include/defines.h, src/include/const.h: Improved inductor model. Added parallel multiplier, temperature correction and solenoid/toroid model. * DEVICES, doc/ngspice.texi: updated documentation to reflect changes in inductor code. 2003-09-25 Paolo Nenzi * src/spicelib/devices/bsim3/*: Added new multirevision bsim3 code sent by Dietmar Warning. This model implements bsim 3v3.2 up to 3v3.2.4 and has enahnced with ACM. * DEVICES: updated bsim3 status. * src/spicelib/devices/bjt2/*, DEVICES, Changelog: Added bjt2 code sent by Dietmar Warning, containing some fixes over the original code and a new feature: temperature correction of re,rb,rc. * src/frontend/numparam/*, src/frontend/Makefile.am, src/Makefile.am, configure.in, acconfig.h, src/frontend/subckt.c: Added numparam library contributed by Georg Post. This library let users to input parametric netlists in ngspice. Look at readme in library directory. * src/spicelib/analysis/dctrcurv.c: small bug fix. CKTtime was confused with CKTtemp. 2003-09-25 Paolo Nenzi * src/spicelib/devices/cap/*, src/spicelib/parser/inp2c.c, src/include/defines.h, src/include/const.h: enhanced capacitor model. Added temperature dependence, model capacitance and cj computation based on insulator thickness and relative dielectric constant. * doc/ngspice.tex, DEVICES: updated documentation reflecting capacitor model changes. 2003-09-24 Paolo Nenzi * src/spicelib/analysis/dctrcurv.c: Fixed resistance sweep. First point is now correct. A call to CKTtemp was needed in the first point. 2003-09-20 Paolo Nenzi * src/spicelib/devices/res/*, src/spicelib/analysis/nevalsrc.c, doc/ngspice.texi, DEVICES: Added new features to resistors: flicker noise, temperature difference with the rest of the circuit, noiseless resistors. The implementation of dtemp required a change in the nevalsrc.c file in the function that computes the noise densities. Updated documentation. 2003-09-18 Paolo Nenzi * src/spicelib/analysis/dctrcurv.c: Corrected temperature sweep. Initial temp was the circuit temperature and not the start value in the input line. There was a missing call to CKTtemp(). 2003-08-24 Paolo Nenzi * src/maths/sparse/, src/include/complex.h: Added a function needed by CIDER in sparse library and started to isolate as much as possible sparse code from spice, reverting some of the work did in the previous releases. The idea is to design an interface between spice and a generic matrix library. In the future the current sparse code will be upgraded to version 1.4 (http://sparse.sourceforge.net). src/frontend/misccoms.c, doc/ngspice.texi: Modified "version" command to include compilation information when called with the new "-f" option. src/frontend/(parse.c,define.c): Applied Stefan patches that close a memory leak. src/spicelib/parser/inpgmod.c: Patched Stuart INPgetNetTok function to correct a parsing error emerged in pole-zero analysis. 2003-08-14 Paolo Nenzi * configure.in, src/main.c, src/misc/tilde.c, src/misc/tilde.h, src/frontend/com_history.c, src/frontend/misccoms.h, src/frontend/signal_handler.c, src/frontend/plotting/x11.c, src/frontend/parser/glob.c, src/include/ngspice.h: Added Andrew Veliath patch for readline support. Using readline with ngspice IS A VIOLATION OF GPL LICENSE, you have been warned. The final decision is up to you. The patch has been applied in the perspective of changing readline library with libedit. Libedit aims to be a replacement of readline and is covered by BSD license. Libedit is available at the URL: libedit.sourceforge.net. Readline code has been extrapolated from a patch available on http://www.btae.mam.gov.tr/~genc/ngspice/. 2003-08-11 Paolo Nenzi * doc/ngspice.texi: updated documentation. Still incomplete but on the way... * main.c, ngnutmeg.c, ngspice.c, frontend/resource.c, include/bool.h, include/cktdefs.h, include/complex.h, include/defines.h, include/devdefs.h, include/macros.h, include/ngspice.h, maths/cmaths/cmath1.c, maths/cmaths/test_cx_ph.c, maths/ni/nidest.c, maths/ni/nipred.h, maths/ni/nireinit.c, misc/misc_time.c, misc/string.c, misc/stringutil.h, spicelib/analysis/cktdltn.c, spicelib/analysis/cktdojob.c, spicelib/analysis/cktdump.c, spicelib/analysis/cktload.c, spicelib/analysis/cktmknod.c, spicelib/analysis/cktntask.c, spicelib/analysis/cktpzstr.c, spicelib/analysis/cktsens.c, spicelib/analysis/cktsetup.c, spicelib/analysis/cktsgen.c, spicelib/analysis/cktsopt.c, spicelib/parser/inp2d.c, spicelib/parser/inp2m.c, spicelib/parser/inp2q.c, spicelib/parser/inpdomod.c, spicelib/parser/inpgmod.c: Updated code for CIDER integration. * src/spicelib/devices/bsim3v2: removed because the V3.2 code is now in bsim3 directory. * src/spicelib/devices: various enhancements on models. Mainly code cleaning (removed spurious #include ). Added parallel multiplier on some device and corrected implementation of cpl an txl devices. * bdrydefs.h, carddefs.h, ciderinp.h, cidersupt.h, contdefs.h, domndefs.h, dopdefs.h, elctdefs.h, gendev.h, lsort.h, material.h, matldefs.h, meshdefs.h, meshext.h, methdefs.h, mobdefs.h, modldefs.h, numcards.h, numconst.h, numenum.h, numgen.h, numglobs.h, onedev.h, onemesh.h, optndefs.h, outpdefs.h, profile.h, twodev.h, twomesh.h: new include files imported with CIDER. * src/ciderlib/*, src/maths/misc, src/spicelib/devices/nbjt, src/spicelib/devices/nbjt2, src/spicelib/devices/numd, src/spicelib/devices/numd2, src/spicelib/devices/numos: Added CIDER simulator routines, support math functions and numerical devices. * src/spicelib/devices/bsim3soi: added bsim3soi v3.x model * src/spicelib/devices/bsim3v0: added version 3.0 of bsim model. * src/spicelib/devices/bsim3v1a: version 3.1 of bsim model. This model has been hacked by Alan Gillespie. * src/spicelib/devices/bsim3v1s: version 3.1 of bsim model. This model has been hacked by Serban Popescu. * src/spicelib/devices/hisim: added hisim model. 2003-08-06 Paolo Nenzi * Another big commit: Stefan Jones has worked on the xspice part and added some fix from Vera Albrecht. Tclspice 0.2.13 Changelog (applicable parts) follows: 2003-08-01 Stefan Jones * src/xspice/mif/mif_inp2.c: Reverted to version 1.1.2.2 so POLY and codemodels work * src/Makefile.am: Fixed libspice.so dependencies * src/frontend/{com_let.c,device.c,evaluate.c}: more memory leak fixes by Vera Albrecht * configure.in src/xspice/icm/* src/xspice/lib/*.cm src/xspice/Makefile.am : Added some easy to use makefiles for codemodels and reordered Removed binary files Added icm to build list * src/xspice/icm/{analog,digital,xtradev,xtraevt}: added the codemodels from xspice in the same structure as spiceopus * src/frontend/misccoms.c src/spinit src/conf.c configure.in: updated email address for bug reports and package version. 2003-07-25 Paolo Nenzi * src/main.c: Studied Vera's main.d and introduced changes following her advice. * src/frontend/vectors.c: Applied Vera patch. * src/spicelib/devices/bsim3soi_{dd,fd,pd}: Corrected bsim3soi{pd,fd,dd}def.h, owner and states fields were swapped. Thanks to Jon Elngelbert. 2003-07-23 Paolo Nenzi * A lot of changes that touched too many files to mention each one. I have introduced the xspice code into ngspice. I take xspice code from tclspice (0.2.12). Since tclspice started as a branch of ngspice, I have applied the patches developed for it that correcting some bugs common to tclspice and ngspice. What follows is the extract of tclspice Changelog file that describes the changes: 2003-07-18 Vera Albrecht * src/{main.c,tclspice.c} src/frontend/{Makefile.am,control.c,control.h,display.c, dotcards.c, hcomp.c,hpgl.c,outitf.c,parse.c,postcoms.c, postsc.c,runcoms.c, spiceif.c,variable.c,variable.h, parser/complete.c,plotting/pvec.c} src/include/{cktdefs.h,ngspice.h} src/misc/{ivars.c,string.c,stringutil.h} src/spicelib/analysis/{acan.c,ckt.h,dcop.c} src/spicelib/devices/bsim3/b3temp.c src/spicelib/parser/{ifnewuid.c,inp2dot.c,inperror.c} : Memory leaks and some WINDOWS compile fixes. 2003-07-17 Stefan Jones * src/frontend/{subckt.c,vectors.c} src/spicelib/analysis/dctran.c src/spicelib/parser/inperror.c src/xspice/idn/idndig.c src/xspice/mif/mif_inp2.c : More memory leak fixes * configure.in src/xspice/xspice.c : Fix compile problems with garbage collector 2003-07-17 Steven Borley src/spicelib/devices/txl/txlload.c : Fixed duplicate declaration of pool_vi_txl 2003-07-16 Vera Albrecht * frontend/{device.c,parse.c,vectors.c,com_compose.c} : More memory leaks closed in utility commands and functions. 2003-07-16 Stefan Jones * src/frontend/{com_compose.c,cpitf.c,device.c,subckt.c, vectors.c} src/frontend/plotting/plotit.c src/include/ngspice.h src/spicelib/parser/{inp2dot.c,inp2r.c,inpdomod.c,inpdpar.c, inpgmod.c,inppas3.c} : Rest of the serious deck reader leaks, plus fixes for the last batch. 2003-07-15 Stefan Jones * /src/frontend/{com_let.c,com_set.c,evaluate.c,parse.c, variable.c} src/frontend/parser/complete.c : Memory leaks plugged 2003-04-14 Stefan Jones * Make all the devices in src/spicelib/devices be built as archives not shared libraries, and don't install them 2003-06-22 Stuart Brorson * Finally got SPICE2 POLY stuff working. This involved lots of changes in src/xspice/mif and src/xspice/enh. Particular changes were made in: -- MIF_INP2A: re-arranged logic to fix parsing problems. -- two2three_translate: fixed some stupid pointer problems. -- etc. * Revamped src/xspice/icm/ and src/xspice/icm/icm_spice2poly directories to enable build of POLY codemodel. Makefiles were fixed, and some stuff was added to enable cmpp (from SPICE Opus) to build the codemodel precursors correctly. (Note that you need to download and install SPICE Opus to rebuild the codemodel stuff. See src/xspice/icm/README for more details.) * Hacked Makefile.am's for much of the directory hierarchy, particularly for src/xspice/icm and src/xspice/icm/icm_spice2poly to build the POLY codemodel correctly. Note that top level make still doesn't detect changes in the xspice hierarchy; read the NOTES file for a workaround. * Added a SPICE netlist incorporating vendor models with SPICE2 POLYs in tests/TransImpedanceAmp/. Running this model successfully demonstrates that you have built the XSpice POLY codemodel correctly and that life is good . . . . * Moved #define TRACE out of src/ngspice.h and made it a compiler option (-DTRACE) invoked in src/Makefile when making spice.o. 2003-05-02 Stuart Brorson * Added #define TRACE to main.c for use in debugging. Added lots of printf's in the code which are turned on by defining TRACE. This is used to help figure out what the program is doing at each step . . . . . * Added lots of comments all over the source tree. This should help explain what the prog is doing for future hackers. * Fixed parser to allow POLY attributes in dependent sources (major changes in src/frontend/subckt.c, as well as move location of call to ENHtranslate_poly in src/frontend/inp.c) * Fixed bug in device init files (src/spicelib/devices/*init.c) so that Deviceinfo structures operated with XSPICE. * Fixed nasty malloc problem in src/xspice/mif/mifgetmod.c which casued frequent segfaults (when compiled with XSPICE). 2002-01-03 Paolo Nenzi * acconfig.h: added define needed for Windows and some aesthetic rework (from Holger Vogt patch). * configure.in: added macros to handle windows related issues (Holger patch and me). * INSTALL: added documentation on ngspice compilation under Windows (Holger Vogt patch). * Makefile.am: added Windows compilation code (Holger Vogt patch and me). 2001-12-05 Emmanuel Rouat * configure.in: removed (unnecessary) macros to handle GNU getopt (I'm an idiot!) 2001-12-04 Emmanuel Rouat * configure.in, main.c: Forgot a bit to handle GNU getopt correctly 2001-11-25 Emmanuel Rouat * configure.in: New way (cleaner) to handle GNU getopt. 2001-01-21 Paolo Nenzi * bsim3soi_dd/*: BSIM3SOI (DD) support added as level 11. Added tests in tests directory (tests/bsim3soidd/*). * ???: Integrated patch form Alan Gillespie to revert the spice raw format to the spice3 original. * configure.in: corrected a bug that broke the on line help system. Help system now works again but its text is a little bit outdated. * ???: all binaries now have ng prepended, so ngspice can be installed with other spice flavours. 2000-10-18 Arno W. Peters * Makefile.am: Changes for notes dir -> NOTES file conversion. * tests/Makefile.am: Make distcheck target work again. 2000-10-17 Arno W. Peters * TODO: Little updates. 2000-10-14 Arno W. Peters * acconfig.h, configure.in, src/frontend/inpcom.c, src/include/complex.h src/include/macros.h, src/include/memory.h src/include/ngspice.h, src/maths/cmaths/Makefile.am src/maths/cmaths/cmath1.c, src/maths/cmaths/cmath2.c src/maths/cmaths/cmath3.c, src/maths/cmaths/cmath4.c src/maths/cmaths/test_cx_j.c, src/maths/cmaths/test_cx_mag.c src/maths/cmaths/test_cx_ph.c, src/misc/alloc.c src/misc/alloc.h: Added support for the Boehm-Weiser conservative garbage collector. * NOTES, src/maths/cmaths/cmath.h: Added. * notes/Linux.changes, notes/dbx, notes/internal, notes/mac_port notes/porting, notes/spice2: Removed or incorporated into NOTES. * *: replaced malloc, realloc and free calls to use tmalloc, trealloc and txfree. 2000-09-05 Arno W. Peters * ???: Paolo and I have integrated patches from Alan Gillespie . 2000-07-28 Arno W. Peters * tests/polezero/*.out: Changed the content of these files because the bug that caused the incorrect pole-zero results have been traced to src/spicelib/analysis/cktpzstr.c. 2000-07-05 Arno W. Peters * src/devices/dev.c: Added first_device() and next_device() to abstract manipulations to the devices list. Now change all the code that uses direct access to these functions... 2000-07-03 Arno W. Peters * src/parser/alias.c, src/parser/alias.h: contain frontend alias command. Moved them to src/frontend/com_alias.c and src/frontend/com_alias.h. Updated Makefile.am's as appropreate. * src/parser/front.c, src/parser/front.h, src/parser/history.c, src/parser/history.h, src/parser/modify.c, src/parser/modify.h, src/parser/variable.c, src/parser/variable.h: Empty files. Removed. * src/include/spconfig.h: Removed spCOMPLEX, spSEPARATED_COMPLEX_VECTORS and spCOMPATIBILITY defines. This made including this file from src/include/spmatrix.h unnecessary. Moved this file to src/maths/sparse/spconfig.h. * src/include/spmatrix.h: Removed include of src/include/spconfig.h. * src/maths/sparse/spalloc.c, src/maths/sparse/spbuild.c, src/maths/sparse/spcombin.c, src/maths/sparse/spdefs.h, src/maths/sparse/spfactor.c, src/maths/sparse/spoutput.c, src/maths/sparse/spsmp.c, src/maths/sparse/spsolve.c, src/maths/sparse/sputils.c: The other files affected by the removal of spCOMPLEX, spSEPARATED_COMPLEX_VECTORS and spCOMPATIBILITY defines. Also: assertions are enabled by default. * src/include/smpdefs.h, src/maths/sparse/spsmp.c: SMPmatrix is now a typedef for void, instead of char. Updated all function declarations to match this. Also added function prototypes not previously mentioned in src/include/smpdefs.h. * src/include/complex.h: Updates of cast from char * to void * * src/analysis/cktsens.c: Matrices cannot be created non-complex. Also added a check to detect an error condition on delta_Y = spCreate(...). 2000-06-27 Arno W. Peters * src/parser: Refactored commands from the frontend into the frontend directory. Major changes to organization, but not to functionality. 2000-06-19 Arno W. Peters * src/analysis/cktask.c: moved to src/devices. * src/analysis/cktbindn.c: moved, renamed to src/devices/cktbindnode.c. * src/analysis/cktfdev.c: moved, renamed to src/devices/cktfinddev.c. 2000-06-18 Arno W. Peters * AUTHORS, doc/ngspice.texi: Included an acknowledgements section. 2000-06-16 Arno W. Peters * src/frontend/doplot.c: Refactored into the following files: src/frontend/com_asciiplot.c src/frontend/com_asciiplot.h src/frontend/com_hardcopy.c src/frontend/com_hardcopy.h src/frontend/com_plot.c src/frontend/com_plot.h src/frontend/com_xgraph.c src/frontend/com_xgraph.h src/frontend/plotting/plotit.c src/frontend/plotting/plotit.h * src/frontend/Makefile.am src/frontend/plotting/Makefile.am: Updated to match the new files. 2000-06-15 Arno W. Peters * src/frontend/graphdb.c, src/frontend/graphdb.c, src/frontend/Makefile.am, src/frontend/plotting/graphdb.c, src/frontend/plotting/graphdb.c, src/frontend/plotting/Makefile.am: Moved plotting specific files into plotting directory. 2000-06-05 Arno W. Peters * tests/*: Added a little hierarchy to the tests. Removed config.sh in favor of check.sh. This script does all checking. Made names of the tests better reflect the circuit under test. 2000-06-03 Arno W. Peters * src/include/complex.h, src/include/macros.h, src/include/memory.h, src/maths/sparse/spdefs.h: Moved definitions of complex into complex.h. There are three different ways to declare a complex number in Spice. We need further work to reduce this to only one. * src/maths/cmaths/Makefile.am, src/maths/cmaths/.cvsignore, src/maths/cmaths/test_cx_ph.c: Added a new test and updated the corresponding support files. 2000-06-02 Arno W. Peters * src/circuit/inp2dot.c: Refactoring introduced a bug in the line parsing. Passing line as an extra parameter to the refactored functions fixes the bug. 2000-05-30 Arno W. Peters * TODO: Updated. * src/maths/cmaths/Makefile.am, src/maths/cmaths/test_cx_mag.c, src/maths/cmaths/test_cx_j.c: Added first testcases for complex math library. 2000-05-25 Arno W. Peters * src/circuit/inp2dot.c: First refactoring of INP2dot into smaller functions. Still needs work. * src/circuit/sperror.c: Reworked, now much simpler. * src/include/inpdefs.h, src/include/sperror.h: Removed redundancy in the definition of function prototypes. 2000-05-06 Arno W. Peters * src/include/fte*: Broken header files into smaller pieces. This avoids long recompile times as less needs to be rebuilt on changes to the header files. Adjusted all callers to use the new header files. Left a warning message in the header file to indicate its obsolescence. You will see this message when compiling. * src/frontend/*: Reorganized part of the frontend commands into their own source file. Moved plotting parts into new plotting directory. * src/devices/*: Removed all RCS log and rcsid from the devices source files. They only give extra clutter and all the information you need is available through CVS. 2000-05-04 Arno W. Peters * src/maths/ni/nipzmeth.c: Corrected an overeager deletion. 2000-05-03 Arno W. Peters * source tree: removed most of `#ifdef notdef' and made converted some function calls from K&R -> ANSI. 2000-05-01 Arno W. Peters * Added .cvsignore files to prevent CVS from marking generated files as unknown. * src/devices/Makefile.am, src/devices/dev.c, src/devices/dev.h, src/Makefile.am, src/ngspice.c, src/main.c: Refactored devices initialization code into the devices dir. * tests/respart.cir, tests/respart.out, tests/respart.sh: additional tests for resistor. 1999-12-07 Arno Peters * source tree: Added MAINTAINERCLEANFILES to Makefile.am to eliminate automatically generated cruft from patches. To create a minimal patch between two trees, just do `make maintainer-clean' on both trees and run `diff -ruN tree1 tree2'. 1999-10-15 Emmanuel Rouat * source tree: entirely modified by Arno Peters (after discussion on the mailing list) 1999-09-06 Emmanuel Rouat * AUTHORS: added list provided by Arno Peters * Applied patch supplied by Arno 1999-09-01 Emmanuel Rouat * AUTHORS: some additions * FAQ: a few minor corrections 1999-08-31 Emmanuel Rouat * configure.in: config.h now in top directory * All Makefile.am's: removed useless 'DEFS' line 1999-08-30 Emmanuel Rouat * FAQ: added the FAQ to the distribution 1999-08-28 Emmanuel Rouat * Removed mfb from build - nutmeg doesn't use it on Unix. 1999-08-23 Emmanuel Rouat * configure.in: added tests ('make check') * ng-spice.patch: added cleanup patch by Arno Peters 1999-08-08 Emmanuel Rouat * configure.in: added some features 1999-08-03 Emmanuel Rouat * configure.in: added a whole bunch of tests! 1999-08-02 Emmanuel Rouat * configure.in: added --with-checkergcc option (experimental!) added some maths checks 1999-07-31 Emmanuel Rouat * configure.in: made X11 tests more efficient ng-spice-0.0: ------------- * changed HAX_X11 define to XMISSING_DISPLAY supplied in config.h * added 'Changelog' files in all subdirectories * added '--enable-ansi' option to configure * put src/lib/dev/devsup.c into src/lib/dev/devsup/ * added header files into Makefile.am's Chianti: -------- (27/07/99) * added some tests to configure.in (ncurses/termcap, xaw....) * cleaned up some directories (examples, patches..) * removed all .orig files Pizza: ------ (25/07/99) * added installation of man pages * emptied 'COPYING' file until we know what to put in it * fixed missing install of help and init files (created tune.c.in to support this) * added missing -DWANT_X11 and -DWANT_MFB in several compiles (fixed some headers in: src/lib/fte/x11.c src/lib/fte/x11disp.c ) Spaghetti: ---------- (25/07/99) - first attempt at autoconf/automake support - based on spice3f5-chili, hardly anything touched on it. < tmpk8ny_4pz/cross-compile.sh0000755000175000017500000000247613546075722016307 0ustar carstencarsten#!/bin/bash # This script can be used to cross compile ngspice # for windows on a linux machine. # The result is a zip file, # which is intended to be unziped to c:\ # # You can invoke this script with no argument, # whereupon it will compile a 32 bit windows executable # or with argument "64" # to compile a 64 bit windows executable # # On debian gnu/linux you will need these packages: # mingw-64 make automake libtool bison flex # # (compile "time ./cross-compile.sh") # (compile "time ./cross-compile.sh 64") set -e if test "$1" = "64"; then release="release-mingw-64" dstzip="ngspice-mingw-64.zip" host="x86_64-w64-mingw32" dst="C:/Spice64" else release="release-mingw-32" dstzip="ngspice-mingw-32.zip" host="i686-w64-mingw32" dst="C:/Spice" fi ./autogen.sh rm -rf "./$release" mkdir -p "./$release" ( cd "./$release" && \ ../configure \ --build=$(../config.guess) \ --host="$host" \ --prefix="$dst" \ --exec-prefix="$dst" \ --with-wingui --enable-xspice --enable-cider --disable-debug ) make -C "./$release" -k -j6 make -C "./$release" -k -j6 DESTDIR="$(pwd)/$release/" install ( cd "./$release/C:/" && zip -r - . ) > "./$release/$dstzip" echo "unzip this ./$release/$dstzip to the destination directory c:\\" tmpk8ny_4pz/README.vdmos0000644000175000017500000000517613546075722015200 0ustar carstencarstenREADME for VDMOS model in NGSPICE ================== A simmple MOS model for vertical power transistors (VDMOS model) is under development. Originally it has been available in LTSPICE (see http://ltwiki.org/LTspiceHelp/LTspiceHelp/M_MOSFET.htm) or SuperSpice (https://www.anasoft.co.uk/MOS1Model.htm). It is based on the MOS1 model. The Meyer capacitance has been replaced by a special cap model. A body diode with series resistance is parallel to the D/S device nodes. It defines the reverse behavior, but also the breakdown of the transistor. Basic current equations for ac, dc and tran operations are available as well as the capacitance model. Subthreshold behavior (parameter ksubthres) is available, and is compatible with LTSPICE. An alternative weak inversion model may be seected by choosing the subslope parameter instead of ksubthres. A quasi saturation model enhancement is available. The model parameters supported are: /* basic device */ "vto", ,"Threshold voltage" "kp", "Transconductance parameter" "phi", "Surface potential" "lambda","Channel length modulation" "rd", "Drain ohmic resistance" "rs", "Source ohmic resistance" "rg", "Gate ohmic resistance" "tnom", "Parameter measurement temperature" "kf", "Flicker noise coefficient" "af", "Flicker noise exponent" /* quasi saturation */ "rq", "Quasi saturation resistance fitting parameter" "vq", "Quasi saturation voltage fitting parameter" "mtriode", "Conductance multiplier in triode region" /* weak inversion */ "subslope", "Slope of weak inversion log current versus vgs - vth " "subshift", "Shift of weak inversion plot on the vgs axis " "ksubthres", "Slope n from (vgs-vth)/n, LTSPICE and SuperSpice standard" /* body diode */ "bv", "Vds breakdown voltage" "ibv", "Current at Vds=bv" "nbv", "Vds breakdown emission coefficient" "rds", "Drain-source shunt resistance" "rb", "Body diode ohmic resistance" "n", "Bulk diode emission coefficient" "tt", "Body diode transit time" "eg", "Body diode activation energy for temperature effect on Is" "Xti", "Body diode saturation current temperature exponent" "is", "Body diode saturation current" "vj", "Body diode junction potential" /* body diode capacitance (e.g. source-drain capacitance */ "fc", "Body diode coefficient for forward-bias depletion capacitance formula" "cjo", "Zero-bias body diode junction capacitance" "m", "Body diode grading coefficient" /* gate-source and gate-drain capacitances */ "cgdmin", "Minimum non-linear G-D capacitance" "cgdmax", "Maximum non-linear G-D capacitance" "a", "Non-linear Cgd capacitance parameter" "cgs", "Gate-source capacitance" tmpk8ny_4pz/COPYING0000644000175000017500000007036513546075722014226 0ustar carstencarstenNgspice Licensing Copyright (c) 2019 by ngspice maintainers All rights reserved. license for this document: CC-BY-SA v4.0 **************************** ngspice license ********************************** The ngspice source code has evolved over time by integrating contributions from various sources (e.g. Spice3f5, XSPICE, CIDER, numparam, tclspice and others). Thus a mixture of license statements prevails. The ngspice license is the `Modified BSD' license. This is adopted for all of its source code, test and example files except for the files listed below. ************** files with licenses different to 'Modified BSD' **************** * ngspice/contrib GPL, Public Domain * ngspice/m4 unnamed, compatible to DFSG * ngspice/src/tclspice.c LGPLv2 * all files in ngspice/src/maths/sparse unnamed MIT license, compatible to New BSD ngspice/src/spicelib/devices/adms/admst LGPLv2.1 ngspice/src/spicelib/devices/ndev public domain ngspice/src/xspice public domain except for ngspice/src/xspice/icm/table GPLv2 or newer ngspice/src/frontend/numparam LGPLv2 or newer ngspice manual (see https://sourceforge.net/p/ngspice/ngspice-manuals/ci/master/tree/) Creative Commons Attribution Share-Alike (CC-BY-SA) v4.0 -------------------------------------- ngspice --------------------------------- ---------------------------------- 'Modified BSD' ------------------------------ Copyright 1985 - 2018, Regents of the University of California and others Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------- Xspice -------------------------------- THE SOFTWARE PROGRAMS BELOW ARE IN THE PUBLIC DOMAIN AND ARE PROVIDED FREE OF ANY CHARGE. THE GEORGIA TECH RESEARCH CORPORATION, THE GEORGIA INSTITUTE OF TECHNOLOGY, AND/OR OTHER PARTIES PROVIDE THIS SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH THE USER. SHOULD THE PROGRAM PROVE DEFECTIVE, THE USER ASSUMES THE ENTIRE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. IN NO EVENT WILL THE GEORGIA TECH RESEARCH CORPORATION, THE GEORGIA INSTITUTE OF TECHNOLOGY, AND/OR OTHER PARTIES PROVIDING THE PROGRAMS BELOW BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS). ---------------------------------- others -------------------------------- GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. ----------------------------------- m4 ------------------------------------- LICENSE Copyright (c) 2008 Paolo Bonzini Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without any warranty. tmpk8ny_4pz/cross-compile-shared.sh0000755000175000017500000000310013546075722017534 0ustar carstencarsten#!/bin/bash # This script can be used to cross compile the ngspice shared library # for windows on a linux machine. # The result is a zip file, # which is intended to be unziped to c:\ # # You can invoke this script with no argument, # whereupon it will compile a 32 bit windows executable # or with argument "64" # to compile a 64 bit windows executable # # On debian gnu/linux you will need these packages: # mingw-64 make automake libtool bison flex # # (compile "time ./cross-compile-shared.sh") # (compile "time ./cross-compile-shared.sh 64") set -e if test "$1" = "64"; then release="release-mingw-64" dstzip="ngshared-mingw-64.zip" host="x86_64-w64-mingw32" dst="C:/Spice64" else release="release-mingw-32" dstzip="ngshared-mingw-32.zip" host="i686-w64-mingw32" dst="C:/Spice" fi ./autogen.sh rm -rf "./$release" mkdir -p "./$release" ( # Hack around a problem of autoconf when cross compiling. # This will force "configure" to believe we have a proper "malloc" export ac_cv_func_malloc_0_nonnull=yes export ac_cv_func_realloc_0_nonnull=yes cd "./$release" && \ ../configure \ --build=$(../config.guess) \ --host="$host" \ --prefix="$dst" \ --exec-prefix="$dst" \ --with-ngshared --enable-xspice --enable-cider --disable-debug ) make -C "./$release" -k -j6 make -C "./$release" -k -j6 DESTDIR="$(pwd)/$release/" install ( cd "./$release/C:/" && zip -r - . ) > "./$release/$dstzip" echo "unzip this ./$release/$dstzip to the destination directory c:\\" tmpk8ny_4pz/README0000644000175000017500000000435613546075722014050 0ustar carstencarstenREADME for NGSPICE ================== Ngspice is a mixed-level/mixed-signal circuit simulator. Its code is based on three open source software packages: Spice3f5, Cider1b1 and Xspice. Spice3 does not need any introduction, is the most popular circuit simulator. In over 30 years of its life Spice3 has become a de-facto standard for simulating circuits. Cider couples Spice3f5 circuit level simulator to DSIM device simulator to provide greater simulation accuracy of critical devices. DSIM devices are described in terms of their structures and materials. Xspice is an extension to Spice3C1 that provides code modelling support and simulation of digital components through an embedded event driven algorithm. Ngspice is, anyway, much more than the simple sum of the packages above, as many people contributed to the project with their experience, their bug fixes and their improvements. If you are interested, browse the site and discover what ngspice offers and what needs. If you think you can help, join the development team. Ngspice is an ongoing project, growing everyday from users contributions, suggestions and reports. What we will be able to do depends mostly on user interests, contributions and feedback. USER DISCUSSION FORUMS: ----------------------- For discussions on ngspice, there are five discussion forums, to be found at https://sourceforge.net/p/ngspice/discussion/. These typically provide quick answers to any question concerning ngspice. A new section on 'tips and examples' assembles useful tips provided by maintainers and users. MAILING LISTS: ------------- There are two mailing lists dedicated to the use and development of ngspice. * ngspice-users@lists.sourceforge.net: This list is the list for the users of the ngspice simulator. * ngspice-devel@lists.sourceforge.net: ngspice development issues. Developers and "want to be" developers should subscribe here. To subscribe the list(s), send a message to: WEB SITEs: -------- This project is hosted on Sourceforge.net. The home page is http://ngspice.sourceforge.net The page offering source code and user interaction is http://sourceforge.net/projects/ngspice tmpk8ny_4pz/examples/0000755000175000017500000000000013546075722014776 5ustar carstencarstentmpk8ny_4pz/examples/cider/0000755000175000017500000000000013546075722016064 5ustar carstencarstentmpk8ny_4pz/examples/cider/serial/0000755000175000017500000000000013546075722017343 5ustar carstencarstentmpk8ny_4pz/examples/cider/serial/nmosinv.cir0000644000175000017500000000226013546075722021533 0ustar carstencarstenRESISTIVE LOAD NMOS INVERTER VIN 1 0 PWL 0 0.0 2NS 5 VDD 3 0 DC 5.0 RD 3 2 2.5K M1 2 1 4 5 MMOD W=10UM CL 2 0 2PF VB 5 0 0 VS 4 0 0 .MODEL MMOD NUMOS + X.MESH L=0.0 N=1 + X.MESH L=0.6 N=4 + X.MESH L=0.7 N=5 + X.MESH L=1.0 N=7 + X.MESH L=1.2 N=11 + X.MESH L=3.2 N=21 + X.MESH L=3.4 N=25 + X.MESH L=3.7 N=27 + X.MESH L=3.8 N=28 + X.MESH L=4.4 N=31 + + Y.MESH L=-.05 N=1 + Y.MESH L=0.0 N=5 + Y.MESH L=.05 N=9 + Y.MESH L=0.3 N=14 + Y.MESH L=2.0 N=19 + + REGION NUM=1 MATERIAL=1 Y.L=0.0 + MATERIAL NUM=1 SILICON + MOBILITY MATERIAL=1 CONCMOD=SG FIELDMOD=SG + + REGION NUM=2 MATERIAL=2 Y.H=0.0 X.L=0.7 X.H=3.7 + MATERIAL NUM=2 OXIDE + + ELEC NUM=1 X.L=3.8 X.H=4.4 Y.L=0.0 Y.H=0.0 + ELEC NUM=2 X.L=0.7 X.H=3.7 IY.L=1 IY.H=1 + ELEC NUM=3 X.L=0.0 X.H=0.6 Y.L=0.0 Y.H=0.0 + ELEC NUM=4 X.L=0.0 X.H=4.4 Y.L=2.0 Y.H=2.0 + + DOPING UNIF P.TYPE CONC=2.5E16 X.L=0.0 X.H=4.4 Y.L=0.0 Y.H=2.0 + DOPING UNIF P.TYPE CONC=1E16 X.L=0.0 X.H=4.4 Y.L=0.0 Y.H=0.05 + DOPING UNIF N.TYPE CONC=1E20 X.L=0.0 X.H=1.1 Y.L=0.0 Y.H=0.2 + DOPING UNIF N.TYPE CONC=1E20 X.L=3.3 X.H=4.4 Y.L=0.0 Y.H=0.2 + + MODELS CONCMOB FIELDMOB + METHOD AC=DIRECT ONEC .TRAN 0.2NS 30NS .OPTIONS ACCT BYPASS=1 .PRINT TRAN V(1) V(2) .END tmpk8ny_4pz/examples/cider/serial/colposc.cir0000644000175000017500000000122213546075722021501 0ustar carstencarstenCOLPITT'S OSCILLATOR CIRCUIT R1 1 0 1 Q1 2 1 3 QMOD AREA = 100P VCC 4 0 5 RL 4 2 750 C1 2 3 500P C2 4 3 4500P L1 4 2 5UH RE 3 6 4.65K VEE 6 0 DC -15 PWL 0 -15 1E-9 -10 .TRAN 30N 12U .PRINT TRAN V(2) .MODEL QMOD NBJT LEVEL=1 + X.MESH NODE=1 LOC=0.0 + X.MESH NODE=61 LOC=3.0 + REGION NUM=1 MATERIAL=1 + MATERIAL NUM=1 SILICON NBGNN=1E17 NBGNP=1E17 + MOBILITY MATERIAL=1 CONCMOD=SG FIELDMOD=SG + DOPING UNIF N.TYPE CONC=1E17 X.L=0.0 X.H=1.0 + DOPING UNIF P.TYPE CONC=1E16 X.L=0.0 X.H=1.5 + DOPING UNIF N.TYPE CONC=1E15 X.L=0.0 X.H=3.0 + MODELS BGNW SRH CONCTAU AUGER CONCMOB FIELDMOB + OPTIONS BASE.LENGTH=1.0 BASE.DEPTH=1.25 .OPTIONS ACCT BYPASS=1 .END tmpk8ny_4pz/examples/cider/serial/astable.cir0000644000175000017500000000132013546075722021451 0ustar carstencarstenASTABLE MULTIVIBRATOR VIN 5 0 DC 0 PULSE(0 5 0 1US 1US 100US 100US) VCC 6 0 5.0 RC1 6 1 1K RC2 6 2 1K RB1 6 3 30K RB2 5 4 30K C1 1 4 150PF C2 2 3 150PF Q1 1 3 0 QMOD AREA = 100P Q2 2 4 0 QMOD AREA = 100P .OPTION ACCT BYPASS=1 .TRAN 0.05US 8US 0US 0.05US .PRINT TRAN V(1) V(2) V(3) V(4) .MODEL QMOD NBJT LEVEL=1 + X.MESH NODE=1 LOC=0.0 + X.MESH NODE=61 LOC=3.0 + REGION NUM=1 MATERIAL=1 + MATERIAL NUM=1 SILICON NBGNN=1E17 NBGNP=1E17 + MOBILITY MATERIAL=1 CONCMOD=SG FIELDMOD=SG + DOPING UNIF N.TYPE CONC=1E17 X.L=0.0 X.H=1.0 + DOPING UNIF P.TYPE CONC=1E16 X.L=0.0 X.H=1.5 + DOPING UNIF N.TYPE CONC=1E15 X.L=0.0 X.H=3.0 + MODELS BGNW SRH CONCTAU AUGER CONCMOB FIELDMOB + OPTIONS BASE.LENGTH=1.0 BASE.DEPTH=1.25 .END tmpk8ny_4pz/examples/cider/serial/recovery.cir0000644000175000017500000000157013546075722021703 0ustar carstencarstenDIODE REVERSE RECOVERY VPP 1 0 0.0V (PULSE 1.0V -1.0V 1NS 1PS 1PS 20NS 40NS) VNN 2 0 0.0V RS 1 3 1.0 LS 3 4 0.5UH DT 4 2 M_PIN AREA=1 .MODEL M_PIN NUMD LEVEL=2 + OPTIONS DEFW=100U + X.MESH N=1 L=0.0 + X.MESH N=2 L=0.2 + X.MESH N=4 L=0.4 + X.MESH N=8 L=0.6 + X.MESH N=13 L=1.0 + + Y.MESH N=1 L=0.0 + Y.MESH N=9 L=4.0 + Y.MESH N=24 L=10.0 + Y.MESH N=29 L=15.0 + Y.MESH N=34 L=20.0 + + DOMAIN NUM=1 MATERIAL=1 + MATERIAL NUM=1 SILICON TN=20NS TP=20NS + + ELECTRODE NUM=1 X.L=0.6 X.H=1.0 Y.L=0.0 Y.H=0.0 + ELECTRODE NUM=2 X.L=-0.1 X.H=1.0 Y.L=20.0 Y.H=20.0 + + DOPING GAUSS P.TYPE CONC=1.0E19 CHAR.LEN=1.076 X.L=0.75 X.H=1.1 Y.H=0.0 + + LAT.ROTATE RATIO=0.1 + DOPING UNIF N.TYPE CONC=1.0E14 + DOPING GAUSS N.TYPE CONC=1.0E19 CHAR.LEN=1.614 X.L=-0.1 X.H=1.1 Y.L=20.0 + + MODELS BGN SRH AUGER CONCTAU CONCMOB FIELDMOB .OPTION ACCT BYPASS=1 .TRAN 0.1NS 10NS .PRINT TRAN V(3) I(VIN) .END tmpk8ny_4pz/examples/cider/serial/rtlinv.cir0000644000175000017500000000112713546075722021361 0ustar carstencarstenRTL INVERTER VIN 1 0 DC 1 PWL 0 4 1NS 0 VCC 12 0 DC 5.0 RC1 12 3 2.5K RB1 1 2 8K Q1 3 2 0 QMOD AREA = 100P .OPTION ACCT BYPASS=1 .TRAN 0.5N 5N .PRINT TRAN V(2) V(3) .MODEL QMOD NBJT LEVEL=1 + X.MESH NODE=1 LOC=0.0 + X.MESH NODE=61 LOC=3.0 + REGION NUM=1 MATERIAL=1 + MATERIAL NUM=1 SILICON NBGNN=1E17 NBGNP=1E17 + MOBILITY MATERIAL=1 CONCMOD=SG FIELDMOD=SG + DOPING UNIF N.TYPE CONC=1E17 X.L=0.0 X.H=1.0 + DOPING UNIF P.TYPE CONC=1E16 X.L=0.0 X.H=1.5 + DOPING UNIF N.TYPE CONC=1E15 X.L=0.0 X.H=3.0 + MODELS BGNW SRH CONCTAU AUGER CONCMOB FIELDMOB + OPTIONS BASE.LENGTH=1.0 BASE.DEPTH=1.25 .END tmpk8ny_4pz/examples/cider/serial/charge.cir0000644000175000017500000000236613546075722021302 0ustar carstencarstenMOS CHARGE PUMP VIN 4 0 DC 0V PULSE 0 5 15NS 5NS 5NS 50NS 100NS VDD 5 6 DC 0V PULSE 0 5 25NS 5NS 5NS 50NS 100NS VBB 0 7 DC 0V PULSE 0 5 0NS 5NS 5NS 50NS 100NS RD 6 2 10K M1 5 4 3 7 MMOD W=100UM VS 3 2 0 VC 2 1 0 C2 1 0 10PF .IC V(3)=1.0 .TRAN 2NS 200NS .OPTIONS ACCT BYPASS=1 .PRINT TRAN V(1) V(2) .MODEL MMOD NUMOS + X.MESH N=1 L=0 + X.MESH N=3 L=0.4 + X.MESH N=7 L=0.6 + X.MESH N=15 L=1.4 + X.MESH N=19 L=1.6 + X.MESH N=21 L=2.0 + + Y.MESH N=1 L=0 + Y.MESH N=4 L=0.015 + Y.MESH N=8 L=0.05 + Y.MESH N=12 L=0.25 + Y.MESH N=14 L=0.35 + Y.MESH N=17 L=0.5 + Y.MESH N=21 L=1.0 + + REGION NUM=1 MATERIAL=1 Y.L=0.015 + MATERIAL NUM=1 SILICON + MOBILITY MATERIAL=1 CONCMOD=SG FIELDMOD=SG + + REGION NUM=2 MATERIAL=2 Y.H=0.015 X.L=0.5 X.H=1.5 + MATERIAL NUM=2 OXIDE + + ELEC NUM=1 IX.L=18 IX.H=21 IY.L=4 IY.H=4 + ELEC NUM=2 IX.L=5 IX.H=17 IY.L=1 IY.H=1 + ELEC NUM=3 IX.L=1 IX.H=4 IY.L=4 IY.H=4 + ELEC NUM=4 IX.L=1 IX.H=21 IY.L=21 IY.H=21 + + DOPING UNIF N.TYPE CONC=1E18 X.L=0.0 X.H=0.5 Y.L=0.015 Y.H=0.25 + DOPING UNIF N.TYPE CONC=1E18 X.L=1.5 X.H=2.0 Y.L=0.015 Y.H=0.25 + DOPING UNIF P.TYPE CONC=1E15 X.L=0.0 X.H=2.0 Y.L=0.015 Y.H=1.0 + DOPING UNIF P.TYPE CONC=1.3E17 X.L=0.5 X.H=1.5 Y.L=0.015 Y.H=0.05 + + MODELS CONCMOB FIELDMOB + METHOD ONEC .END tmpk8ny_4pz/examples/cider/serial/vco.cir0000644000175000017500000000151513546075722020633 0ustar carstencarstenVOLTAGE CONTROLLED OSCILLATOR RC1 7 5 1K RC2 7 6 1K Q5 7 7 5 QMOD AREA = 100P Q6 7 7 6 QMOD AREA = 100P Q3 7 5 2 QMOD AREA = 100P Q4 7 6 1 QMOD AREA = 100P IB1 2 0 .5MA IB2 1 0 .5MA CB1 2 0 1PF CB2 1 0 1PF Q1 5 1 3 QMOD AREA = 100P Q2 6 2 4 QMOD AREA = 100P C1 3 4 .1UF IS1 3 0 DC 2.5MA PULSE 2.5MA 0.5MA 0 1US 1US 50MS IS2 4 0 1MA VCC 7 0 10 .MODEL QMOD NBJT LEVEL=1 + X.MESH NODE=1 LOC=0.0 + X.MESH NODE=61 LOC=3.0 + REGION NUM=1 MATERIAL=1 + MATERIAL NUM=1 SILICON NBGNN=1E17 NBGNP=1E17 + MOBILITY MATERIAL=1 CONCMOD=SG FIELDMOD=SG + DOPING UNIF N.TYPE CONC=1E17 X.L=0.0 X.H=1.0 + DOPING UNIF P.TYPE CONC=1E16 X.L=0.0 X.H=1.5 + DOPING UNIF N.TYPE CONC=1E15 X.L=0.0 X.H=3.0 + MODELS BGNW SRH CONCTAU AUGER CONCMOB FIELDMOB + OPTIONS BASE.LENGTH=1.0 BASE.DEPTH=1.25 .OPTION ACCT BYPASS=1 .TRAN 3US 600US 0 3US .PRINT TRAN V(4) .END tmpk8ny_4pz/examples/cider/serial/invchain.cir0000644000175000017500000000141413546075722021641 0ustar carstencarsten4 STAGE RTL INVERTER CHAIN VIN 1 0 DC 0V PWL 0NS 0V 1NS 5V VCC 12 0 DC 5.0V RC1 12 3 2.5K RB1 1 2 8K Q1 3 2 0 QMOD AREA = 100P RB2 3 4 8K RC2 12 5 2.5K Q2 5 4 0 QMOD AREA = 100P RB3 5 6 8K RC3 12 7 2.5K Q3 7 6 0 QMOD AREA = 100P RB4 7 8 8K RC4 12 9 2.5K Q4 9 8 0 QMOD AREA = 100P .PRINT TRAN V(3) V(5) V(9) .TRAN 1E-9 10E-9 .MODEL QMOD NBJT LEVEL=1 + X.MESH NODE=1 LOC=0.0 + X.MESH NODE=61 LOC=3.0 + REGION NUM=1 MATERIAL=1 + MATERIAL NUM=1 SILICON NBGNN=1E17 NBGNP=1E17 + MOBILITY MATERIAL=1 CONCMOD=SG FIELDMOD=SG + DOPING UNIF N.TYPE CONC=1E17 X.L=0.0 X.H=1.0 + DOPING UNIF P.TYPE CONC=1E16 X.L=0.0 X.H=1.5 + DOPING UNIF N.TYPE CONC=1E15 X.L=0.0 X.H=3.0 + MODELS BGNW SRH CONCTAU AUGER CONCMOB FIELDMOB + OPTIONS BASE.LENGTH=1.0 BASE.DEPTH=1.25 .OPTION ACCT BYPASS=1 .END tmpk8ny_4pz/examples/cider/serial/pass.cir0000644000175000017500000000237513546075722021017 0ustar carstencarstenTURNOFF TRANSIENT OF PASS TRANSISTOR M1 11 2 3 4 MMOD W=20UM CS 1 0 6.0PF CL 3 0 6.0PF R1 3 6 200K VIN 6 0 DC 0 VDRN 1 11 DC 0 VG 2 0 DC 5 PWL 0 5 0.1N 0 1 0 VB 4 0 DC 0.0 .TRAN 0.05NS 0.2NS 0.0NS 0.05NS .PRINT TRAN V(1) I(VDRN) .IC V(1)=0 V(3)=0 .OPTION ACCT BYPASS=1 .MODEL MMOD NUMOS + X.MESH L=0.0 N=1 + X.MESH L=0.6 N=4 + X.MESH L=0.7 N=5 + X.MESH L=1.0 N=7 + X.MESH L=1.2 N=11 + X.MESH L=3.2 N=21 + X.MESH L=3.4 N=25 + X.MESH L=3.7 N=27 + X.MESH L=3.8 N=28 + X.MESH L=4.4 N=31 + + Y.MESH L=-.05 N=1 + Y.MESH L=0.0 N=5 + Y.MESH L=.05 N=9 + Y.MESH L=0.3 N=14 + Y.MESH L=2.0 N=19 + + REGION NUM=1 MATERIAL=1 Y.L=0.0 + MATERIAL NUM=1 SILICON + MOBILITY MATERIAL=1 CONCMOD=SG FIELDMOD=SG + + REGION NUM=2 MATERIAL=2 Y.H=0.0 X.L=0.7 X.H=3.7 + MATERIAL NUM=2 OXIDE + + ELEC NUM=1 X.L=3.8 X.H=4.4 Y.L=0.0 Y.H=0.0 + ELEC NUM=2 X.L=0.7 X.H=3.7 IY.L=1 IY.H=1 + ELEC NUM=3 X.L=0.0 X.H=0.6 Y.L=0.0 Y.H=0.0 + ELEC NUM=4 X.L=0.0 X.H=4.4 Y.L=2.0 Y.H=2.0 + + DOPING UNIF P.TYPE CONC=2.5E16 X.L=0.0 X.H=4.4 Y.L=0.0 Y.H=2.0 + DOPING UNIF P.TYPE CONC=1E16 X.L=0.0 X.H=4.4 Y.L=0.0 Y.H=0.05 + DOPING UNIF N.TYPE CONC=1E20 X.L=0.0 X.H=1.1 Y.L=0.0 Y.H=0.2 + DOPING UNIF N.TYPE CONC=1E20 X.L=3.3 X.H=4.4 Y.L=0.0 Y.H=0.2 + + MODELS CONCMOB FIELDMOB + METHOD AC=DIRECT ONEC .END tmpk8ny_4pz/examples/cider/serial/readme0000644000175000017500000000023613546075722020524 0ustar carstencarstenThis directory contains the CIDER serial-version benchmarks used in the thesis "Design-Oriented Mixed-Level Circuit and Device Simulation" by David A. Gates. tmpk8ny_4pz/examples/cider/serial/pullup.cir0000644000175000017500000000343313546075722021366 0ustar carstencarstenBICMOS INVERTER PULLUP CIRCUIT VDD 1 0 5.0V VSS 2 0 0.0V VIN 3 0 0.75V VC 1 11 0.0V VB 5 15 0.0V Q1 11 15 4 M_NPN AREA=4 M1 5 3 1 1 M_PMOS W=20U L=2U AD=30P AS=30P PD=21U PS=21U CL 4 0 5.0PF .IC V(4)=0.75V V(5)=0.0V .MODEL M_PMOS PMOS VTO=-0.8 UO=250 TOX=25N NSUB=5E16 + UCRIT=10K UEXP=.15 VMAX=50K NEFF=2 XJ=.02U + LD=.15U CGSO=.1N CGDO=.1N CJ=.12M MJ=0.5 + CJSW=0.3N MJSW=0.5 LEVEL=2 .MODEL M_NPN NBJT LEVEL=2 + TITLE TWO-DIMENSIONAL NUMERICAL POLYSILICON EMITTER BIPOLAR TRANSISTOR + $ SINCE ONLY HALF THE DEVICE IS SIMULATED, DOUBLE THE UNIT WIDTH TO GET + $ 1.0 UM EMITTER. + OPTIONS DEFW=2.0U + OUTPUT STATISTICS + + X.MESH W=2.0 H.E=0.02 H.M=0.5 R=2.0 + X.MESH W=0.5 H.S=0.02 H.M=0.2 R=2.0 + + Y.MESH L=-0.2 N=1 + Y.MESH L= 0.0 N=5 + Y.MESH W=0.10 H.E=0.004 H.M=0.05 R=2.5 + Y.MESH W=0.15 H.S=0.004 H.M=0.02 R=2.5 + Y.MESH W=1.05 H.S=0.02 H.M=0.1 R=2.5 + + DOMAIN NUM=1 MATERIAL=1 X.L=2.0 Y.H=0.0 + DOMAIN NUM=2 MATERIAL=2 X.H=2.0 Y.H=0.0 + DOMAIN NUM=3 MATERIAL=3 Y.L=0.0 + MATERIAL NUM=1 POLYSILICON + MATERIAL NUM=2 OXIDE + MATERIAL NUM=3 SILICON + + ELEC NUM=1 X.L=0.0 X.H=0.0 Y.L=1.1 Y.H=1.3 + ELEC NUM=2 X.L=0.0 X.H=0.5 Y.L=0.0 Y.H=0.0 + ELEC NUM=3 X.L=2.0 X.H=3.0 Y.L=-0.2 Y.H=-0.2 + + DOPING GAUSS N.TYPE CONC=3E20 X.L=2.0 X.H=3.0 Y.L=-0.2 Y.H=0.0 + + CHAR.L=0.047 LAT.ROTATE + DOPING GAUSS P.TYPE CONC=5E18 X.L=0.0 X.H=5.0 Y.L=-0.2 Y.H=0.0 + + CHAR.L=0.100 LAT.ROTATE + DOPING GAUSS P.TYPE CONC=1E20 X.L=0.0 X.H=0.5 Y.L=-0.2 Y.H=0.0 + + CHAR.L=0.100 LAT.ROTATE RATIO=0.7 + DOPING UNIF N.TYPE CONC=1E16 X.L=0.0 X.H=5.0 Y.L=0.0 Y.H=1.3 + DOPING GAUSS N.TYPE CONC=5E19 X.L=0.0 X.H=5.0 Y.L=1.3 Y.H=1.3 + + CHAR.L=0.100 LAT.ROTATE + + METHOD AC=DIRECT ITLIM=10 + MODELS BGN SRH AUGER CONCTAU CONCMOB FIELDMOB .TRAN 0.5NS 4.0NS .PRINT TRAN V(3) V(4) .OPTION ACCT BYPASS=1 .END tmpk8ny_4pz/examples/cider/serial/dbridge.cir0000644000175000017500000000143213546075722021442 0ustar carstencarstenDIODE BRIDGE RECTIFIER VLINE 3 4 0.0V SIN 0V 10V 60HZ VGRND 2 0 0.0V D1 3 1 M_PN AREA=100 D2 4 1 M_PN AREA=100 D3 2 3 M_PN AREA=100 D4 2 4 M_PN AREA=100 RL 1 2 1.0K .MODEL M_PN NUMD LEVEL=1 + *************************************** + *** ONE-DIMENSIONAL NUMERICAL DIODE *** + *************************************** + OPTIONS DEFA=1P + X.MESH LOC=0.0 N=1 + X.MESH LOC=30.0 N=201 + DOMAIN NUM=1 MATERIAL=1 + MATERIAL NUM=1 SILICON + MOBILITY MAT=1 CONCMOD=CT FIELDMOD=CT + DOPING GAUSS P.TYPE CONC=1E20 X.L=0.0 X.H=0.0 CHAR.L=1.0 + DOPING UNIF N.TYPE CONC=1E14 X.L=0.0 X.H=30.0 + DOPING GAUSS N.TYPE CONC=5E19 X.L=30.0 X.H=30.0 CHAR.L=2.0 + MODELS BGN ^AVAL SRH AUGER CONCTAU CONCMOB FIELDMOB + METHOD AC=DIRECT .OPTION ACCT BYPASS=1 METHOD=GEAR .TRAN 0.5MS 50MS .PRINT I(VLINE) .END tmpk8ny_4pz/examples/cider/serial/meclgate.cir0000644000175000017500000000254213546075722021626 0ustar carstencarstenMOTOROLA MECL III ECL GATE *.DC VIN -2.0 0 0.02 .TRAN 0.2NS 20NS VEE 22 0 -6.0 VIN 1 0 PULSE -0.8 -1.8 0.2NS 0.2NS 0.2NS 10NS 20NS RS 1 2 50 Q1 4 2 6 QMOD AREA = 100P Q2 4 3 6 QMOD AREA = 100P Q3 5 7 6 QMOD AREA = 100P Q4 0 8 7 QMOD AREA = 100P D1 8 9 DMOD D2 9 10 DMOD RP1 3 22 50K RC1 0 4 100 RC2 0 5 112 RE 6 22 380 R1 7 22 2K R2 0 8 350 R3 10 22 1958 Q5 0 5 11 QMOD AREA = 100P Q6 0 4 12 QMOD AREA = 100P RP2 11 22 560 RP3 12 22 560 Q7 13 12 15 QMOD AREA = 100P Q8 14 16 15 QMOD AREA = 100P RE2 15 22 380 RC3 0 13 100 RC4 0 14 112 Q9 0 17 16 QMOD AREA = 100P R4 16 22 2K R5 0 17 350 D3 17 18 DMOD D4 18 19 DMOD R6 19 22 1958 Q10 0 14 20 QMOD AREA = 100P Q11 0 13 21 QMOD AREA = 100P RP4 20 22 560 RP5 21 22 560 .MODEL DMOD D RS=40 TT=0.1NS CJO=0.9PF N=1 IS=1E-14 EG=1.11 VJ=0.8 M=0.5 .MODEL QMOD NBJT LEVEL=1 + X.MESH NODE=1 LOC=0.0 + X.MESH NODE=10 LOC=0.9 + X.MESH NODE=20 LOC=1.1 + X.MESH NODE=30 LOC=1.4 + X.MESH NODE=40 LOC=1.6 + X.MESH NODE=61 LOC=3.0 + REGION NUM=1 MATERIAL=1 + MATERIAL NUM=1 SILICON NBGNN=1E17 NBGNP=1E17 + MOBILITY MATERIAL=1 CONCMOD=SG FIELDMOD=SG + DOPING UNIF N.TYPE CONC=1E17 X.L=0.0 X.H=1.0 + DOPING UNIF P.TYPE CONC=1E16 X.L=0.0 X.H=1.5 + DOPING UNIF N.TYPE CONC=1E15 X.L=0.0 X.H=3.0 + MODELS BGNW SRH CONCTAU AUGER CONCMOB FIELDMOB + OPTIONS BASE.LENGTH=1.0 BASE.DEPTH=1.25 .OPTIONS ACCT BYPASS=1 .PRINT TRAN V(12) V(21) .END tmpk8ny_4pz/examples/cider/diode/0000755000175000017500000000000013546075722017150 5ustar carstencarstentmpk8ny_4pz/examples/cider/diode/pindiode.cir0000644000175000017500000000160113546075722021440 0ustar carstencarstenTWO-DIMENSIONAL PIN-DIODE CIRCUIT VIN 1 0 0.0v (PWL 0ns 0.8v 1ns -50.0v) L1 1 2 0.5uH VD 2 3 0.0v D1 3 0 M_PIN AREA=200 IC.FILE="OP.0.d1" VRC 2 4 0.0v R1 4 5 100 C1 5 0 1.0nF .MODEL M_PIN NUMD LEVEL=2 + options defw=1000u + x.mesh n=1 l=0.0 + x.mesh n=2 l=0.2 + x.mesh n=4 l=0.4 + x.mesh n=8 l=0.6 + x.mesh n=13 l=1.0 + + y.mesh n=1 l=0.0 + y.mesh n=9 l=4.0 + y.mesh n=24 l=10.0 + y.mesh n=29 l=15.0 + y.mesh n=34 l=20.0 + + domain num=1 material=1 + material num=1 silicon tn=20ns tp=20ns + + electrode num=1 x.l=0.6 x.h=1.0 y.h=0.0 + electrode num=2 y.l=20.0 + + doping gauss p.type conc=1.0e20 char.len=1.076 x.l=0.75 x.h=1.1 y.h=0.0 + + lat.rotate ratio=0.1 + doping unif n.type conc=1.0e14 + doping gauss n.type conc=1.0e20 char.len=1.614 x.l=-0.1 x.h=1.1 y.l=20.0 + + models bgn srh auger conctau concmob fieldmob .OPTION ACCT BYPASS=1 .TRAN 1NS 100NS .PRINT TRAN v(3) I(VIN) .END tmpk8ny_4pz/examples/cider/diode/diotran.cir0000644000175000017500000000153313546075722021311 0ustar carstencarstenDiode Reverse Recovery * This file simulates reverse recovery of a diode as it switched from an * on to off state. Vpp 1 0 0.7v (PWL 0ns 3.0v 0.1ns 3.0v 0.11ns -6.0v) (AC 1v) Vnn 2 0 0v R1 1 3 1k D1 3 2 M_PN area=100 .MODEL M_PN numd level=1 + *************************************** + *** One-Dimensional Numerical Diode *** + *************************************** + options defa=1p + x.mesh loc=0.0 n=1 + x.mesh loc=1.3 n=201 + domain num=1 material=1 + material num=1 silicon + mobility mat=1 concmod=ct fieldmod=ct + doping gauss p.type conc=3e20 x.l=0.0 x.h=0.0 char.l=0.100 + doping unif n.type conc=1e16 x.l=0.0 x.h=1.3 + doping gauss n.type conc=5e19 x.l=1.3 x.h=1.3 char.l=0.100 + models bgn aval srh auger conctau concmob fieldmob + method ac=direct .option acct bypass=1 abstol=1e-15 itl2=100 .tran 0.001ns 1.0ns .print i(Vpp) .END tmpk8ny_4pz/examples/cider/diode/diode.cir0000644000175000017500000000176413546075722020743 0ustar carstencarstenOne-Dimensional Diode Simulation * Several simulations are performed by this file. * They are: * 1. An operating point at 0.7v forward bias. * 2. An ac analysis at 0.7v forward bias. * 3. The forward and reverse bias characteristics from -3v to 2v. Vpp 1 0 0.7v (PWL 0ns 3.0v 0.01ns -6.0v) (AC 1v) Vnn 2 0 0v D1 1 2 M_PN AREA=100 .model M_PN numd level=1 + *************************************** + *** One-Dimensional Numerical Diode *** + *************************************** + options defa=1p + x.mesh loc=0.0 n=1 + x.mesh loc=1.3 n=201 + domain num=1 material=1 + material num=1 silicon + mobility mat=1 concmod=ct fieldmod=ct + doping gauss p.type conc=1e20 x.l=0.0 x.h=0.0 char.l=0.100 + doping unif n.type conc=1e16 x.l=0.0 x.h=1.3 + doping gauss n.type conc=5e19 x.l=1.3 x.h=1.3 char.l=0.100 + models bgn aval srh auger conctau concmob fieldmob + method ac=direct .option acct bypass=0 abstol=1e-18 itl2=100 .op .ac dec 10 100kHz 10gHz .dc Vpp -3.0v 2.0001v 50mv .print i(Vpp) .END tmpk8ny_4pz/examples/cider/bjt/0000755000175000017500000000000013546075722016643 5ustar carstencarstentmpk8ny_4pz/examples/cider/bjt/pebjt.lib0000644000175000017500000000512213546075722020437 0ustar carstencarsten** * Numerical models for a * polysilicon emitter complementary bipolar process. * The default device size is 1um by 10um (LxW) ** .model M_NPN nbjt level=1 + title One-Dimensional Numerical Bipolar + options base.depth=0.15 base.area=0.1 base.length=1.0 defa=10p + x.mesh loc=-0.2 n=1 + x.mesh loc=0.0 n=51 + x.mesh wid=0.15 h.e=0.0001 h.m=.004 r=1.2 + x.mesh wid=1.15 h.s=0.0001 h.m=.004 r=1.2 + domain num=1 material=1 x.l=0.0 + domain num=2 material=2 x.h=0.0 + material num=1 silicon + mobility mat=1 concmod=ct fieldmod=ct + material num=2 polysilicon + mobility mat=2 concmod=ct fieldmod=ct + doping gauss n.type conc=3e20 x.l=-0.2 x.h=0.0 char.len=0.047 + doping gauss p.type conc=5e18 x.l=-0.2 x.h=0.0 char.len=0.100 + doping unif n.type conc=1e16 x.l=0.0 x.h=1.3 + doping gauss n.type conc=5e19 x.l=1.3 x.h=1.3 char.len=0.100 + models bgn srh auger conctau concmob fieldmob ^aval + method devtol=1e-12 ac=direct itlim=15 .model M_NPSUB numd level=1 + title One-Dimensional Numerical Collector-Substrate Diode + options defa=10p + x.mesh loc=1.3 n=1 + x.mesh loc=2.0 n=101 + domain num=1 material=1 + material num=1 silicon + mobility mat=1 concmod=ct fieldmod=ct + doping gauss n.type conc=5e19 x.l=1.3 x.h=1.3 char.len=0.100 + doping unif p.type conc=1e15 x.l=0.0 x.h=2.0 + models bgn srh auger conctau concmob fieldmob ^aval + method devtol=1e-12 itlim=10 .model M_PNP nbjt level=1 + title One-Dimensional Numerical Bipolar + options base.depth=0.2 base.area=0.1 base.length=1.0 defa=10p + x.mesh loc=-0.2 n=1 + x.mesh loc=0.0 n=51 + x.mesh wid=0.20 h.e=0.0001 h.m=.004 r=1.2 + x.mesh wid=1.10 h.s=0.0001 h.m=.004 r=1.2 + domain num=1 material=1 x.l=0.0 + domain num=2 material=2 x.h=0.0 + material num=1 silicon + mobility mat=1 concmod=ct fieldmod=ct + material num=2 polysilicon + mobility mat=2 concmod=ct fieldmod=ct + doping gauss p.type conc=3e20 x.l=-0.2 x.h=0.0 char.len=0.047 + doping gauss n.type conc=5e17 x.l=-0.2 x.h=0.0 char.len=0.200 + doping unif p.type conc=1e16 x.l=0.0 x.h=1.3 + doping gauss p.type conc=5e19 x.l=1.3 x.h=1.3 char.len=0.100 + models bgn srh auger conctau concmob fieldmob ^aval + method devtol=1e-12 ac=direct itlim=15 .model M_PNSUB numd level=1 + title One-Dimensional Numerical Collector-Substrate Diode + options defa=10p + x.mesh loc=1.3 n=1 + x.mesh loc=2.0 n=101 + domain num=1 material=1 + material num=1 silicon + mobility mat=1 concmod=ct fieldmod=ct + doping gauss p.type conc=5e19 x.l=1.3 x.h=1.3 char.len=0.100 + doping unif n.type conc=1e15 x.l=0.0 x.h=2.0 + models bgn srh auger conctau concmob fieldmob ^aval + method devtol=1e-12 itlim=10 tmpk8ny_4pz/examples/cider/bjt/colposc.cir0000644000175000017500000000142613546075722021007 0ustar carstencarstenColpitt's Oscillator Circuit r1 1 0 1 q1 2 1 3 qmod area = 100p vcc 4 0 5 rl 4 2 750 c1 2 3 500p c2 4 3 4500p l1 4 2 5uH re 3 6 4.65k vee 6 0 dc -15 pwl 0 -15 1e-9 -10 .tran 30n 12u .print tran v(2) .model qmod nbjt level=1 + x.mesh node=1 loc=0.0 + x.mesh node=61 loc=3.0 + region num=1 material=1 + material num=1 silicon nbgnn=1e17 nbgnp=1e17 + mobility material=1 concmod=sg fieldmod=sg + mobility material=1 elec major + mobility material=1 elec minor + mobility material=1 hole major + mobility material=1 hole minor + doping unif n.type conc=1e17 x.l=0.0 x.h=1.0 + doping unif p.type conc=1e16 x.l=0.0 x.h=1.5 + doping unif n.type conc=1e15 x.l=0.0 x.h=3.0 + models bgnw srh conctau auger concmob fieldmob + options base.length=1.0 base.depth=1.25 .options acct bypass=1 .end tmpk8ny_4pz/examples/cider/bjt/astable.cir0000644000175000017500000000152413546075722020757 0ustar carstencarstenAstable multivibrator vin 5 0 dc 0 pulse(0 5 0 1us 1us 100us 100us) vcc 6 0 5.0 rc1 6 1 1k rc2 6 2 1k rb1 6 3 30k rb2 5 4 30k c1 1 4 150pf c2 2 3 150pf q1 1 3 0 qmod area = 100p q2 2 4 0 qmod area = 100p .option acct bypass=1 .tran 0.05us 8us 0us 0.05us .print tran v(1) v(2) v(3) v(4) .model qmod nbjt level=1 + x.mesh node=1 loc=0.0 + x.mesh node=61 loc=3.0 + region num=1 material=1 + material num=1 silicon nbgnn=1e17 nbgnp=1e17 + mobility material=1 concmod=sg fieldmod=sg + mobility material=1 elec major + mobility material=1 elec minor + mobility material=1 hole major + mobility material=1 hole minor + doping unif n.type conc=1e17 x.l=0.0 x.h=1.0 + doping unif p.type conc=1e16 x.l=0.0 x.h=1.5 + doping unif n.type conc=1e15 x.l=0.0 x.h=3.0 + models bgnw srh conctau auger concmob fieldmob + options base.length=1.0 base.depth=1.25 .end tmpk8ny_4pz/examples/cider/bjt/rtlinv.cir0000644000175000017500000000133313546075722020660 0ustar carstencarstenRTL inverter vin 1 0 dc 1 pwl 0 4 1ns 0 vcc 12 0 dc 5.0 rc1 12 3 2.5k rb1 1 2 8k q1 3 2 0 qmod area = 100p .option acct bypass=1 .tran 0.5n 5n .print tran v(2) v(3) .model qmod nbjt level=1 + x.mesh node=1 loc=0.0 + x.mesh node=61 loc=3.0 + region num=1 material=1 + material num=1 silicon nbgnn=1e17 nbgnp=1e17 + mobility material=1 concmod=sg fieldmod=sg + mobility material=1 elec major + mobility material=1 elec minor + mobility material=1 hole major + mobility material=1 hole minor + doping unif n.type conc=1e17 x.l=0.0 x.h=1.0 + doping unif p.type conc=1e16 x.l=0.0 x.h=1.5 + doping unif n.type conc=1e15 x.l=0.0 x.h=3.0 + models bgnw srh conctau auger concmob fieldmob + options base.length=1.0 base.depth=1.25 .end tmpk8ny_4pz/examples/cider/bjt/pz.cir0000644000175000017500000000030613546075722017772 0ustar carstencarstenPZ Analysis of a Common Emitter Amplifier Vcc 1 0 5v Vee 2 0 0v Vin 3 0 0.7838 AC 1 RS 3 4 1K Q1 5 4 2 M_NPN AREA=4 SAVE RL 1 5 2.5k CL 5 0 0.1pF .INCLUDE pebjt.lib .PZ 3 0 5 0 vol pz .END tmpk8ny_4pz/examples/cider/bjt/vco.cir0000644000175000017500000000172113546075722020132 0ustar carstencarstenVoltage controlled oscillator rc1 7 5 1k rc2 7 6 1k q5 7 7 5 qmod area = 100p q6 7 7 6 qmod area = 100p q3 7 5 2 qmod area = 100p q4 7 6 1 qmod area = 100p ib1 2 0 .5ma ib2 1 0 .5ma cb1 2 0 1pf cb2 1 0 1pf q1 5 1 3 qmod area = 100p q2 6 2 4 qmod area = 100p c1 3 4 .1uf is1 3 0 dc 2.5ma pulse 2.5ma 0.5ma 0 1us 1us 50ms is2 4 0 1ma vcc 7 0 10 .model qmod nbjt level=1 + x.mesh node=1 loc=0.0 + x.mesh node=61 loc=3.0 + region num=1 material=1 + material num=1 silicon nbgnn=1e17 nbgnp=1e17 + mobility material=1 concmod=sg fieldmod=sg + mobility material=1 elec major + mobility material=1 elec minor + mobility material=1 hole major + mobility material=1 hole minor + doping unif n.type conc=1e17 x.l=0.0 x.h=1.0 + doping unif p.type conc=1e16 x.l=0.0 x.h=1.5 + doping unif n.type conc=1e15 x.l=0.0 x.h=3.0 + models bgnw srh conctau auger concmob fieldmob + options base.length=1.0 base.depth=1.25 .option acct bypass=1 .tran 3us 600us 0 3us .print tran v(4) .end tmpk8ny_4pz/examples/cider/bjt/invchain.cir0000644000175000017500000000162013546075722021140 0ustar carstencarsten4 Stage RTL Inverter Chain vin 1 0 dc 0v pwl 0ns 0v 1ns 5v vcc 12 0 dc 5.0v rc1 12 3 2.5k rb1 1 2 8k q1 3 2 0 qmod area = 100p rb2 3 4 8k rc2 12 5 2.5k q2 5 4 0 qmod area = 100p rb3 5 6 8k rc3 12 7 2.5k q3 7 6 0 qmod area = 100p rb4 7 8 8k rc4 12 9 2.5k q4 9 8 0 qmod area = 100p .print tran v(3) v(5) v(9) .tran 1e-9 10e-9 .model qmod nbjt level=1 + x.mesh node=1 loc=0.0 + x.mesh node=61 loc=3.0 + region num=1 material=1 + material num=1 silicon nbgnn=1e17 nbgnp=1e17 + mobility material=1 concmod=sg fieldmod=sg + mobility material=1 elec major + mobility material=1 elec minor + mobility material=1 hole major + mobility material=1 hole minor + doping unif n.type conc=1e17 x.l=0.0 x.h=1.0 + doping unif p.type conc=1e16 x.l=0.0 x.h=1.5 + doping unif n.type conc=1e15 x.l=0.0 x.h=3.0 + models bgnw srh conctau auger concmob fieldmob + options base.length=1.0 base.depth=1.25 .option acct bypass=1 .end tmpk8ny_4pz/examples/cider/bjt/ecp.cir0000644000175000017500000000307413546075722020115 0ustar carstencarstenEmitter Coupled Pair VCC 1 0 5v VEE 2 0 0v RCP 1 11 10k RCN 1 21 10k VBBP 12 0 3v AC 1 VBBN 22 0 3v IEE 13 2 0.1mA Q1 11 12 13 M_NPN AREA=8 Q2 21 22 13 M_NPN AREA=8 .DC VBBP 2.75v 3.25001v 10mv .PRINT V(21) V(11) .MODEL M_NPN nbjt level=2 + title TWO-DIMENSIONAL NUMERICAL POLYSILICON EMITTER BIPOLAR TRANSISTOR + * Since, we are only simulating half of a device, we double the unit width + * 1.0 um emitter length + options defw=2.0u + + *x.mesh w=2.5 n=5 + x.mesh w=2.0 h.e=0.05 h.m=0.2 r=1.5 + x.mesh w=0.5 h.s=0.05 h.m=0.1 r=1.5 + + y.mesh l=-0.2 n=1 + y.mesh l= 0.0 n=5 + y.mesh w=0.10 h.e=0.002 h.m=0.01 r=1.5 + y.mesh w=0.15 h.s=0.002 h.m=0.01 r=1.5 + y.mesh w=0.35 h.s=0.01 h.m=0.2 r=1.5 + y.mesh w=0.40 h.e=0.05 h.m=0.2 r=1.5 + y.mesh w=0.30 h.s=0.05 h.m=0.1 r=1.5 + + domain num=1 material=1 x.l=2.0 y.h=0.0 + domain num=2 material=2 x.h=2.0 y.h=0.0 + domain num=3 material=3 y.l=0.0 + material num=1 polysilicon + material num=2 oxide + material num=3 silicon + + elec num=1 x.l=0.0 x.h=0.0 y.l=1.1 y.h=1.3 + elec num=2 x.l=0.0 x.h=0.5 y.l=0.0 y.h=0.0 + elec num=3 x.l=2.0 x.h=3.0 y.l=-0.2 y.h=-0.2 + + doping gauss n.type conc=3e20 x.l=2.0 x.h=3.0 y.l=-0.2 y.h=0.0 + + char.l=0.047 lat.rotate + doping gauss p.type conc=1e19 x.l=0.0 x.h=5.0 y.l=-0.2 y.h=0.0 + + char.l=0.094 lat.rotate + doping unif n.type conc=1e16 x.l=0.0 x.h=5.0 y.l=0.0 y.h=1.3 + doping gauss n.type conc=5e19 x.l=0.0 x.h=5.0 y.l=1.3 y.h=1.3 + + char.l=0.100 lat.rotate + + method ac=direct itlim=10 + models bgn srh auger conctau concmob fieldmob .OPTIONS ACCT BYPASS=1 .END tmpk8ny_4pz/examples/cider/bjt/meclgate.cir0000644000175000017500000000274613546075722021134 0ustar carstencarstenMotorola MECL III ECL gate *.dc vin -2.0 0 0.02 .tran 0.2ns 20ns vee 22 0 -6.0 vin 1 0 pulse -0.8 -1.8 0.2ns 0.2ns 0.2ns 10ns 20ns rs 1 2 50 q1 4 2 6 qmod area = 100p q2 4 3 6 qmod area = 100p q3 5 7 6 qmod area = 100p q4 0 8 7 qmod area = 100p d1 8 9 dmod d2 9 10 dmod rp1 3 22 50k rc1 0 4 100 rc2 0 5 112 re 6 22 380 r1 7 22 2k r2 0 8 350 r3 10 22 1958 q5 0 5 11 qmod area = 100p q6 0 4 12 qmod area = 100p rp2 11 22 560 rp3 12 22 560 q7 13 12 15 qmod area = 100p q8 14 16 15 qmod area = 100p re2 15 22 380 rc3 0 13 100 rc4 0 14 112 q9 0 17 16 qmod area = 100p r4 16 22 2k r5 0 17 350 d3 17 18 dmod d4 18 19 dmod r6 19 22 1958 q10 0 14 20 qmod area = 100p q11 0 13 21 qmod area = 100p rp4 20 22 560 rp5 21 22 560 .model dmod d rs=40 tt=0.1ns cjo=0.9pf n=1 is=1e-14 eg=1.11 vj=0.8 m=0.5 .model qmod nbjt level=1 + x.mesh node=1 loc=0.0 + x.mesh node=10 loc=0.9 + x.mesh node=20 loc=1.1 + x.mesh node=30 loc=1.4 + x.mesh node=40 loc=1.6 + x.mesh node=61 loc=3.0 + region num=1 material=1 + material num=1 silicon nbgnn=1e17 nbgnp=1e17 + mobility material=1 concmod=sg fieldmod=sg + mobility material=1 elec major + mobility material=1 elec minor + mobility material=1 hole major + mobility material=1 hole minor + doping unif n.type conc=1e17 x.l=0.0 x.h=1.0 + doping unif p.type conc=1e16 x.l=0.0 x.h=1.5 + doping unif n.type conc=1e15 x.l=0.0 x.h=3.0 + models bgnw srh conctau auger concmob fieldmob + options base.length=1.0 base.depth=1.25 .options acct bypass=1 .print tran v(12) v(21) .end tmpk8ny_4pz/examples/cider/parallel/0000755000175000017500000000000013546075722017660 5ustar carstencarstentmpk8ny_4pz/examples/cider/parallel/gmamp.cir0000644000175000017500000000106013546075722021455 0ustar carstencarstenBICMOS 3-STAGE AMPLIFIER *** IN GRAY & MEYER, 3RD ED. P.266, PROB. 3.12, 8.19 VDD 1 0 5.0V VSS 2 0 0.0V *** VOLTAGE INPUT *VIN 13 0 0.0V AC 1V *CIN 13 3 1UF *** CURRENT INPUT IIN 3 0 0.0 AC 1.0 M1 4 3 2 2 M_NMOS_1 W=300U L=1U M2 7 7 2 2 M_NMOS_1 W=20U L=1U Q1 6 5 4 M_NPNS AREA=40 Q2 5 5 7 M_NPNS AREA=40 Q3 1 6 8 M_NPNS AREA=40 RL1 1 4 1K RL2 1 6 10K RB1 1 5 10K RL3 8 2 1K RF1 3 8 30K *** NUMERICAL MODEL LIBRARY *** .INCLUDE BICMOS.LIB .AC DEC 10 100KHZ 100GHZ .PLOT AC VDB(8) .OPTIONS ACCT BYPASS=1 KEEPOPINFO .END tmpk8ny_4pz/examples/cider/parallel/cmosamp.cir0000644000175000017500000000101013546075722022006 0ustar carstencarstenCMOS 2-STAGE OPERATIONAL AMPLIFIER VDD 1 0 2.5V VSS 2 0 -2.5V IBIAS 9 0 100UA VPL 3 0 0.0V AC 0.5V VMI 4 0 0.0V AC 0.5V 180 M1 6 3 5 5 M_PMOS_1 W=15U L=1U M2 7 4 5 5 M_PMOS_1 W=15U L=1U M3 6 6 2 2 M_NMOS_1 W=7.5U L=1U M4 7 6 2 2 M_NMOS_1 W=7.5U L=1U M5 8 7 2 2 M_NMOS_1 W=15U L=1U M6 9 9 1 1 M_PMOS_1 W=15U L=1U M7 5 9 1 1 M_PMOS_1 W=15U L=1U M8 8 9 1 1 M_PMOS_1 W=15U L=1U *CC 7 8 0.1PF .INCLUDE BICMOS.LIB *.OP *.AC DEC 10 1K 100G .DC VPL -5MV 5MV 0.1MV .OPTIONS ACCT BYPASS=1 METHOD=GEAR .END tmpk8ny_4pz/examples/cider/parallel/clkfeed.cir0000644000175000017500000000116413546075722021756 0ustar carstencarstenSWITCHED CURRENT CELL - CLOCK FEEDTHROUGH VDD 1 0 5.0V VSS 2 0 0.0V IIN 13 0 0.0 VIN 13 3 0.0 VL 4 0 2.5V VCK 6 0 5.0V PULSE 5.0V 0.0V 5.0NS 5NS 5NS 20NS 50NS M1 3 3 2 2 M_NMOS_5 W=5U L=5U M2 4 5 2 2 M_NMOS_5 W=10U L=5U M3 23 26 25 22 M_NMOS_5 W=5U L=5U RLK1 3 0 100G RLK2 5 0 100G VD 3 23 0.0V VG 6 26 0.0V VS 5 25 0.0V VB 2 22 0.0V M4 7 7 1 1 M_PMOS_IDEAL W=100U L=1U M5 3 7 1 1 M_PMOS_IDEAL W=100U L=1U M6 4 7 1 1 M_PMOS_IDEAL W=200U L=1U IREF 7 0 50UA ****** MODELS ****** .MODEL M_PMOS_IDEAL PMOS VTO=-1.0V KP=100U .INCLUDE BICMOS.LIB .TRAN 0.1NS 50NS .OPTIONS ACCT BYPASS=1 METHOD=GEAR .END tmpk8ny_4pz/examples/cider/parallel/ringosc.1u.cir0000644000175000017500000000112513546075722022346 0ustar carstencarstenCMOS RING OSCILLATOR - 1UM DEVICES VDD 1 0 5.0V VSS 2 0 0.0V X1 1 2 3 4 INV X2 1 2 4 5 INV X3 1 2 5 6 INV X4 1 2 6 7 INV X5 1 2 7 8 INV X6 1 2 8 9 INV X7 1 2 9 3 INV .IC V(3)=0.0V V(4)=2.5V V(5)=5.0V + V(6)=0.0V V(7)=5.0V V(8)=0.0V V(9)=5.0V .SUBCKT INV 1 2 3 4 * VDD VSS VIN VOUT M1 14 13 15 16 M_PMOS_1 W=6.0U M2 24 23 25 26 M_NMOS_1 W=3.0U VGP 3 13 0.0V VDP 4 14 0.0V VSP 1 15 0.0V VBP 1 16 0.0V VGN 3 23 0.0V VDN 4 24 0.0V VSN 2 25 0.0V VBN 2 26 0.0V .ENDS INV .INCLUDE BICMOS.LIB .TRAN 0.1NS 1NS .PRINT TRAN V(3) V(4) V(5) .OPTIONS ACCT BYPASS=1 METHOD=GEAR .END tmpk8ny_4pz/examples/cider/parallel/ppef.2d.cir0000644000175000017500000000063613546075722021622 0ustar carstencarstenPUSH-PULL EMITTER FOLLOWER - TWO-DIMENSIONAL MODELS VCC 1 0 5.0V VEE 2 0 -5.0V VIN 3 0 0.0V (SIN 0.0V 0.1V 1KHZ) AC 1 VBU 13 3 0.7V VBL 3 23 0.7V RL 4 44 50 VLD 44 0 0V Q1 5 13 4 M_NPNS AREA=40 Q2 4 5 1 M_PNPS AREA=200 Q3 6 23 4 M_PNPS AREA=100 Q4 4 6 2 M_NPNS AREA=80 .INCLUDE BICMOS.LIB .TRAN 0.01MS 1.00001MS 0US 0.01MS .PLOT TRAN V(4) .OPTIONS ACCT BYPASS=1 TEMP=26.85OC RELTOL=1E-5 .END tmpk8ny_4pz/examples/cider/parallel/latch.cir0000644000175000017500000000150513546075722021453 0ustar carstencarstenSTATIC LATCH *** IC=1MA, RE6=3K *** SPICE ORIGINAL 1-7-80, CIDER REVISED 4-16-93 *** BIAS CIRCUIT *** RESISTORS RCC2 6 8 3.33K REE2 9 0 200 *** TRANSISTORS Q1 6 8 4 M_NPN1D AREA=8 Q2 8 4 9 M_NPN1D AREA=8 *** MODELS .INCLUDE BICMOS.LIB *** SOURCES VCC 6 0 5V VREF 3 0 2.5V VRSET 1 0 PULSE(2V 3V 0.1NS 0.1NS 0.1NS 0.9NS 4NS) VSET 7 0 PULSE(2V 3V 2.1NS 0.1NS 0.1NS 0.9NS 4NS) *** LATCH X1 1 2 3 4 5 6 ECLNOR2 X2 5 7 3 4 2 6 ECLNOR2 *** SUBCIRCUITS .SUBCKT ECLNOR2 1 2 3 4 5 6 ** RESISTORS RS 6 11 520 RC2 11 10 900 RE4 12 0 200 RE6 5 0 6K ** TRANSISTORS Q1 9 1 8 M_NPN1D AREA=8 Q2 9 2 8 M_NPN1D AREA=8 Q3 11 3 8 M_NPN1D AREA=8 Q4 8 4 12 M_NPN1D AREA=8 Q5 10 10 9 M_NPN1D AREA=8 Q6 6 9 5 M_NPN1D AREA=8 .ENDS ECLNOR2 *** CONTROL CARDS .TRAN 0.01NS 8NS .PRINT TRAN V(1) V(7) V(5) V(2) .OPTIONS ACCT BYPASS=1 .END tmpk8ny_4pz/examples/cider/parallel/bicmpd.cir0000644000175000017500000000054713546075722021623 0ustar carstencarstenBICMOS INVERTER PULLDOWN CIRCUIT VSS 2 0 0V VIN 3 2 0V (PULSE 0.0V 4.2V 0NS 1NS 1NS 9NS 20NS) M1 8 3 5 11 M_NMOS_1 W=4U L=1U VD 4 8 0V VBK 11 2 0V Q1 10 7 9 M_NPNS AREA=8 VC 4 10 0V VB 5 7 0V VE 9 2 0V CL 4 6 1PF VL 6 2 0V .IC V(10)=5.0V V(7)=0.0V .TRAN 0.1NS 5NS 0NS 0.1NS .PLOT TRAN I(VIN) .INCLUDE BICMOS.LIB .OPTIONS ACCT BYPASS=1 .END tmpk8ny_4pz/examples/cider/parallel/eclinv.cir0000644000175000017500000000062613546075722021643 0ustar carstencarstenECL INVERTER *** (FROM MEINERZHAGEN ET AL.) VCC 1 0 0.0V VEE 2 0 -5.2V VIN 3 0 -1.25V VRF 4 0 -1.25V *** INPUT STAGE Q1 5 3 9 M_NPNS AREA=8 Q2 6 4 9 M_NPNS AREA=8 R1 1 5 662 R2 1 6 662 R3 9 2 2.65K *** OUTPUT BUFFERS Q3 1 5 7 M_NPNS AREA=8 Q4 1 6 8 M_NPNS AREA=8 R4 7 2 4.06K R5 8 2 4.06K *** MODEL LIBRARY .INCLUDE BICMOS.LIB .DC VIN -2.00 0.001 0.05 .PLOT DC V(7) V(8) .OPTIONS ACCT BYPASS=1 .END tmpk8ny_4pz/examples/cider/parallel/foobar0000644000175000017500000000043013546075722021050 0ustar carstencarsten\section*{BICMPD Benchmark} \section*{BICMPU Benchmark} \section*{CLKFEED Benchmark} \section*{CMOSAMP Benchmark} \section*{ECLINV Benchmark} \section*{ECPAL Benchmark} \section*{GMAMP Benchmark} \section*{LATCH Benchmark} \section*{PPEF Benchmarks} \section*{RINGOSC Benchmarks} tmpk8ny_4pz/examples/cider/parallel/ringosc.2u.cir0000644000175000017500000000511013546075722022345 0ustar carstencarstenCMOS RING OSCILLATOR - 2UM DEVICES VDD 1 0 5.0V VSS 2 0 0.0V X1 1 2 3 4 INV X2 1 2 4 5 INV X3 1 2 5 6 INV X4 1 2 6 7 INV X5 1 2 7 8 INV X6 1 2 8 9 INV X7 1 2 9 3 INV .IC V(3)=0.0V V(4)=2.5V V(5)=5.0V V(6)=0.0V + V(7)=5.0V V(8)=0.0V V(9)=5.0V .SUBCKT INV 1 2 3 4 * VDD VSS VIN VOUT M1 14 13 15 16 M_PMOS W=6.0U M2 24 23 25 26 M_NMOS W=3.0U VGP 3 13 0.0V VDP 4 14 0.0V VSP 1 15 0.0V VBP 1 16 0.0V VGN 3 23 0.0V VDN 4 24 0.0V VSN 2 25 0.0V VBN 2 26 0.0V .ENDS INV .MODEL M_NMOS NUMOS + X.MESH L=0.0 N=1 + X.MESH L=0.6 N=4 + X.MESH L=0.7 N=5 + X.MESH L=1.0 N=7 + X.MESH L=1.2 N=11 + X.MESH L=3.2 N=21 + X.MESH L=3.4 N=25 + X.MESH L=3.7 N=27 + X.MESH L=3.8 N=28 + X.MESH L=4.4 N=31 + + Y.MESH L=-.05 N=1 + Y.MESH L=0.0 N=5 + Y.MESH L=.05 N=9 + Y.MESH L=0.3 N=14 + Y.MESH L=2.0 N=19 + + REGION NUM=1 MATERIAL=1 Y.L=0.0 + MATERIAL NUM=1 SILICON + MOBILITY MATERIAL=1 CONCMOD=SG FIELDMOD=SG + + REGION NUM=2 MATERIAL=2 Y.H=0.0 X.L=0.7 X.H=3.7 + MATERIAL NUM=2 OXIDE + + ELEC NUM=1 X.L=3.8 X.H=4.4 Y.L=0.0 Y.H=0.0 + ELEC NUM=2 X.L=0.7 X.H=3.7 IY.L=1 IY.H=1 + ELEC NUM=3 X.L=0.0 X.H=0.6 Y.L=0.0 Y.H=0.0 + ELEC NUM=4 X.L=0.0 X.H=4.4 Y.L=2.0 Y.H=2.0 + + DOPING UNIF P.TYPE CONC=2.5E16 X.L=0.0 X.H=4.4 Y.L=0.0 Y.H=2.0 + DOPING UNIF P.TYPE CONC=1E16 X.L=0.0 X.H=4.4 Y.L=0.0 Y.H=0.05 + DOPING UNIF N.TYPE CONC=1E20 X.L=0.0 X.H=1.1 Y.L=0.0 Y.H=0.2 + DOPING UNIF N.TYPE CONC=1E20 X.L=3.3 X.H=4.4 Y.L=0.0 Y.H=0.2 + + MODELS CONCMOB FIELDMOB BGN SRH CONCTAU + METHOD AC=DIRECT ONEC + OUTPUT ^ALL.DEBUG .MODEL M_PMOS NUMOS + X.MESH L=0.0 N=1 + X.MESH L=0.6 N=4 + X.MESH L=0.7 N=5 + X.MESH L=1.0 N=7 + X.MESH L=1.2 N=11 + X.MESH L=3.2 N=21 + X.MESH L=3.4 N=25 + X.MESH L=3.7 N=27 + X.MESH L=3.8 N=28 + X.MESH L=4.4 N=31 + + Y.MESH L=-.05 N=1 + Y.MESH L=0.0 N=5 + Y.MESH L=.05 N=9 + Y.MESH L=0.3 N=14 + Y.MESH L=2.0 N=19 + + REGION NUM=1 MATERIAL=1 Y.L=0.0 + MATERIAL NUM=1 SILICON + MOBILITY MATERIAL=1 CONCMOD=SG FIELDMOD=SG + + REGION NUM=2 MATERIAL=2 Y.H=0.0 X.L=0.7 X.H=3.7 + MATERIAL NUM=2 OXIDE + + ELEC NUM=1 X.L=3.8 X.H=4.4 Y.L=0.0 Y.H=0.0 + ELEC NUM=2 X.L=0.7 X.H=3.7 IY.L=1 IY.H=1 + ELEC NUM=3 X.L=0.0 X.H=0.6 Y.L=0.0 Y.H=0.0 + ELEC NUM=4 X.L=0.0 X.H=4.4 Y.L=2.0 Y.H=2.0 + + DOPING UNIF N.TYPE CONC=1E16 X.L=0.0 X.H=4.4 Y.L=0.0 Y.H=2.0 + DOPING UNIF P.TYPE CONC=3E16 X.L=0.0 X.H=4.4 Y.L=0.0 Y.H=0.05 + DOPING UNIF P.TYPE CONC=1E20 X.L=0.0 X.H=1.1 Y.L=0.0 Y.H=0.2 + DOPING UNIF P.TYPE CONC=1E20 X.L=3.3 X.H=4.4 Y.L=0.0 Y.H=0.2 + + MODELS CONCMOB FIELDMOB BGN SRH CONCTAU + METHOD AC=DIRECT ONEC + OUTPUT ^ALL.DEBUG .TRAN 0.1NS 5.0NS .PRINT V(4) .OPTIONS ACCT BYPASS=1 METHOD=GEAR .END tmpk8ny_4pz/examples/cider/parallel/ppef.1d.cir0000644000175000017500000000064213546075722021616 0ustar carstencarstenPUSH-PULL EMITTER FOLLOWER - ONE-DIMENSIONAL MODELS VCC 1 0 5.0V VEE 2 0 -5.0V VIN 3 0 0.0V (SIN 0.0V 0.1V 1KHZ) AC 1 VBU 13 3 0.7V VBL 3 23 0.7V RL 4 44 50 VLD 44 0 0V Q1 5 13 4 M_NPN1D AREA=40 Q2 4 5 1 M_PNP1D AREA=200 Q3 6 23 4 M_PNP1D AREA=100 Q4 4 6 2 M_NPN1D AREA=80 .INCLUDE BICMOS.LIB .TRAN 0.01MS 1.00001MS 0US 0.01MS .PLOT TRAN V(4) .OPTIONS ACCT BYPASS=1 TEMP=26.85OC RELTOL=1E-5 .END tmpk8ny_4pz/examples/cider/parallel/readme0000644000175000017500000000025313546075722021040 0ustar carstencarstenThis directory contains the additional CIDER parallel-version benchmarks used in the thesis "Design-Oriented Mixed-Level Circuit and Device Simulation" by David A. Gates. tmpk8ny_4pz/examples/cider/parallel/bicmpu.cir0000644000175000017500000000044613546075722021642 0ustar carstencarstenBICMOS INVERTER PULLUP CIRCUIT VDD 1 0 5.0V VSS 2 0 0.0V VIN 3 0 0.75V VC 1 11 0.0V VB 5 15 0.0V Q1 11 15 4 M_NPNS AREA=8 M1 5 3 1 1 M_PMOS_1 W=10U L=1U CL 4 0 5.0PF .IC V(4)=0.75V V(5)=0.0V .INCLUDE BICMOS.LIB .TRAN 0.5NS 4.0NS .PRINT TRAN V(3) V(4) .OPTION ACCT BYPASS=1 .END tmpk8ny_4pz/examples/cider/parallel/ecpal.cir0000644000175000017500000000047313546075722021447 0ustar carstencarstenEMITTER COUPLED PAIR WITH ACTIVE LOAD VCC 1 0 5V VEE 2 0 0V VINP 4 0 2.99925V AC 0.5V VINM 7 0 3V AC 0.5V 180 IEE 5 2 0.1MA Q1 3 4 5 M_NPNS AREA=8 Q2 6 7 5 M_NPNS AREA=8 Q3 3 3 1 M_PNPS AREA=8 Q4 6 3 1 M_PNPS AREA=8 .AC DEC 10 10K 100G .PLOT AC VDB(6) .INCLUDE BICMOS.LIB .OPTIONS ACCT RELTOL=1E-6 .END tmpk8ny_4pz/examples/cider/parallel/BICMOS.LIB0000644000175000017500000007350413546075722021175 0ustar carstencarsten** * BICMOS.LIB: Library of models used in the 1.0 um CBiCMOS process * Contains CIDER input descriptions as well as matching * SPICE models for some of the CIDER models. ** ** * One-dimensional models for a * polysilicon emitter complementary bipolar process. * The default device size is 1um by 1um (LxW) ** .model M_NPN1D nbjt level=1 + title One-Dimensional Numerical Bipolar + options base.depth=0.15 base.area=0.1 base.length=0.5 defa=1p + x.mesh loc=-0.2 n=1 + x.mesh loc=0.0 n=51 + x.mesh wid=0.15 h.e=0.0001 h.m=.004 r=1.2 + x.mesh wid=1.15 h.s=0.0001 h.m=.004 r=1.2 + domain num=1 material=1 x.l=0.0 + domain num=2 material=2 x.h=0.0 + material num=1 silicon + mobility mat=1 concmod=ct fieldmod=ct + material num=2 polysilicon + mobility mat=2 concmod=ct fieldmod=ct + doping gauss n.type conc=3e20 x.l=-0.2 x.h=0.0 char.len=0.047 + doping gauss p.type conc=5e18 x.l=-0.2 x.h=0.0 char.len=0.100 + doping unif n.type conc=1e16 x.l=0.0 x.h=1.3 + doping gauss n.type conc=5e19 x.l=1.3 x.h=1.3 char.len=0.100 + models bgn srh auger conctau concmob fieldmob + method devtol=1e-12 ac=direct itlim=15 .model M_PNP1D nbjt level=1 + title One-Dimensional Numerical Bipolar + options base.depth=0.2 base.area=0.1 base.length=0.5 defa=1p + x.mesh loc=-0.2 n=1 + x.mesh loc=0.0 n=51 + x.mesh wid=0.20 h.e=0.0001 h.m=.004 r=1.2 + x.mesh wid=1.10 h.s=0.0001 h.m=.004 r=1.2 + domain num=1 material=1 x.l=0.0 + domain num=2 material=2 x.h=0.0 + material num=1 silicon + mobility mat=1 concmod=ct fieldmod=ct + material num=2 polysilicon + mobility mat=2 concmod=ct fieldmod=ct + doping gauss p.type conc=3e20 x.l=-0.2 x.h=0.0 char.len=0.047 + doping gauss n.type conc=5e17 x.l=-0.2 x.h=0.0 char.len=0.200 + doping unif p.type conc=1e16 x.l=0.0 x.h=1.3 + doping gauss p.type conc=5e19 x.l=1.3 x.h=1.3 char.len=0.100 + models bgn srh auger conctau concmob fieldmob + method devtol=1e-12 ac=direct itlim=15 ** * Two-dimensional models for a * polysilicon emitter complementary bipolar process. * The default device size is 1um by 1um (LxW) ** .MODEL M_NPNS nbjt level=2 + title TWO-DIMENSIONAL NUMERICAL POLYSILICON EMITTER BIPOLAR TRANSISTOR + * Since half the device is simulated, double the unit width to get + * 1.0 um emitter. Use a small mesh for this model. + options defw=2.0u + output stat + + x.mesh w=2.0 h.e=0.02 h.m=0.5 r=2.0 + x.mesh w=0.5 h.s=0.02 h.m=0.2 r=2.0 + + y.mesh l=-0.2 n=1 + y.mesh l= 0.0 n=5 + y.mesh w=0.10 h.e=0.004 h.m=0.05 r=2.5 + y.mesh w=0.15 h.s=0.004 h.m=0.02 r=2.5 + y.mesh w=1.05 h.s=0.02 h.m=0.1 r=2.5 + + domain num=1 material=1 x.l=2.0 y.h=0.0 + domain num=2 material=2 x.h=2.0 y.h=0.0 + domain num=3 material=3 y.l=0.0 + material num=1 polysilicon + material num=2 oxide + material num=3 silicon + + elec num=1 x.l=0.0 x.h=0.0 y.l=1.1 y.h=1.3 + elec num=2 x.l=0.0 x.h=0.5 y.l=0.0 y.h=0.0 + elec num=3 x.l=2.0 x.h=3.0 y.l=-0.2 y.h=-0.2 + + doping gauss n.type conc=3e20 x.l=2.0 x.h=3.0 y.l=-0.2 y.h=0.0 + + char.l=0.047 lat.rotate + doping gauss p.type conc=5e18 x.l=0.0 x.h=5.0 y.l=-0.2 y.h=0.0 + + char.l=0.100 lat.rotate + doping gauss p.type conc=1e20 x.l=0.0 x.h=0.5 y.l=-0.2 y.h=0.0 + + char.l=0.100 lat.rotate ratio=0.7 + doping unif n.type conc=1e16 x.l=0.0 x.h=5.0 y.l=0.0 y.h=1.3 + doping gauss n.type conc=5e19 x.l=0.0 x.h=5.0 y.l=1.3 y.h=1.3 + + char.l=0.100 lat.rotate + + method ac=direct itlim=10 + models bgn srh auger conctau concmob fieldmob .MODEL M_NPN nbjt level=2 + title TWO-DIMENSIONAL NUMERICAL POLYSILICON EMITTER BIPOLAR TRANSISTOR + * Since half the device is simulated, double the unit width to get + * 1.0 um emitter length. Uses a finer mesh in the X direction. + options defw=2.0u + output stat + + x.mesh w=0.5 h.e=0.075 h.m=0.2 r=2.0 + x.mesh w=0.75 h.s=0.075 h.m=0.2 r=2.0 + x.mesh w=0.75 h.e=0.05 h.m=0.2 r=1.5 + x.mesh w=0.5 h.s=0.05 h.m=0.1 r=1.5 + + y.mesh l=-0.2 n=1 + y.mesh l= 0.0 n=5 + y.mesh w=0.10 h.e=0.003 h.m=0.01 r=1.5 + y.mesh w=0.15 h.s=0.003 h.m=0.02 r=1.5 + y.mesh w=0.35 h.s=0.02 h.m=0.2 r=1.5 + y.mesh w=0.40 h.e=0.05 h.m=0.2 r=1.5 + y.mesh w=0.30 h.s=0.05 h.m=0.1 r=1.5 + + domain num=1 material=1 x.l=2.0 y.h=0.0 + domain num=2 material=2 x.h=2.0 y.h=0.0 + domain num=3 material=3 y.l=0.0 + material num=1 polysilicon + material num=2 oxide + material num=3 silicon + + elec num=1 x.l=0.0 x.h=0.0 y.l=1.1 y.h=1.3 + elec num=2 x.l=0.0 x.h=0.5 y.l=0.0 y.h=0.0 + elec num=3 x.l=2.0 x.h=3.0 y.l=-0.2 y.h=-0.2 + + doping gauss n.type conc=3e20 x.l=2.0 x.h=3.0 y.l=-0.2 y.h=0.0 + + char.l=0.047 lat.rotate + doping gauss p.type conc=5e18 x.l=0.0 x.h=5.0 y.l=-0.2 y.h=0.0 + + char.l=0.100 lat.rotate + doping gauss p.type conc=1e20 x.l=0.0 x.h=0.5 y.l=-0.2 y.h=0.0 + + char.l=0.100 lat.rotate ratio=0.7 + doping unif n.type conc=1e16 x.l=0.0 x.h=5.0 y.l=0.0 y.h=1.3 + doping gauss n.type conc=5e19 x.l=0.0 x.h=5.0 y.l=1.3 y.h=1.3 + + char.l=0.100 lat.rotate + + method ac=direct itlim=10 + models bgn srh auger conctau concmob fieldmob .MODEL M_PNPS nbjt level=2 + title TWO-DIMENSIONAL NUMERICAL POLYSILICON EMITTER BIPOLAR TRANSISTOR + * Since half the device is simulated, double the unit width to get + * 1.0 um emitter length. Use a small mesh for this model. + options defw=2.0u + output stat + + x.mesh w=2.0 h.e=0.02 h.m=0.5 r=2.0 + x.mesh w=0.5 h.s=0.02 h.m=0.2 r=2.0 + + y.mesh l=-0.2 n=1 + y.mesh l= 0.0 n=5 + y.mesh w=0.12 h.e=0.004 h.m=0.05 r=2.5 + y.mesh w=0.28 h.s=0.004 h.m=0.02 r=2.5 + y.mesh w=1.05 h.s=0.02 h.m=0.1 r=2.5 + + domain num=1 material=1 x.l=2.0 y.h=0.0 + domain num=2 material=2 x.h=2.0 y.h=0.0 + domain num=3 material=3 y.l=0.0 + material num=1 polysilicon + material num=2 oxide + material num=3 silicon + + elec num=1 x.l=0.0 x.h=0.0 y.l=1.1 y.h=1.3 + elec num=2 x.l=0.0 x.h=0.5 y.l=0.0 y.h=0.0 + elec num=3 x.l=2.0 x.h=3.0 y.l=-0.2 y.h=-0.2 + + doping gauss p.type conc=3e20 x.l=2.0 x.h=3.0 y.l=-0.2 y.h=0.0 + + char.l=0.047 lat.rotate + doping gauss n.type conc=5e17 x.l=0.0 x.h=5.0 y.l=-0.2 y.h=0.0 + + char.l=0.200 lat.rotate + doping gauss n.type conc=1e20 x.l=0.0 x.h=0.5 y.l=-0.2 y.h=0.0 + + char.l=0.100 lat.rotate ratio=0.7 + doping unif p.type conc=1e16 x.l=0.0 x.h=5.0 y.l=0.0 y.h=1.3 + doping gauss p.type conc=5e19 x.l=0.0 x.h=5.0 y.l=1.3 y.h=1.3 + + char.l=0.100 lat.rotate + + method ac=direct itlim=10 + models bgn srh auger conctau concmob fieldmob .MODEL M_PNP nbjt level=2 + title TWO-DIMENSIONAL NUMERICAL POLYSILICON EMITTER BIPOLAR TRANSISTOR + * Since half the device is simulated, double the unit width to get + * 1.0 um emitter length. Uses a finer mesh in the X direction. + options defw=2.0u + output stat + + x.mesh w=0.5 h.e=0.075 h.m=0.2 r=2.0 + x.mesh w=0.75 h.s=0.075 h.m=0.2 r=2.0 + x.mesh w=0.75 h.e=0.05 h.m=0.2 r=1.5 + x.mesh w=0.5 h.s=0.05 h.m=0.1 r=1.5 + + y.mesh l=-0.2 n=1 + y.mesh l= 0.0 n=5 + y.mesh w=0.12 h.e=0.003 h.m=0.01 r=1.5 + y.mesh w=0.28 h.s=0.003 h.m=0.02 r=1.5 + y.mesh w=0.20 h.s=0.02 h.m=0.2 r=1.5 + y.mesh w=0.40 h.e=0.05 h.m=0.2 r=1.5 + y.mesh w=0.30 h.s=0.05 h.m=0.1 r=1.5 + + domain num=1 material=1 x.l=2.0 y.h=0.0 + domain num=2 material=2 x.h=2.0 y.h=0.0 + domain num=3 material=3 y.l=0.0 + material num=1 polysilicon + material num=2 oxide + material num=3 silicon + + elec num=1 x.l=0.0 x.h=0.0 y.l=1.1 y.h=1.3 + elec num=2 x.l=0.0 x.h=0.5 y.l=0.0 y.h=0.0 + elec num=3 x.l=2.0 x.h=3.0 y.l=-0.2 y.h=-0.2 + + doping gauss p.type conc=3e20 x.l=2.0 x.h=3.0 y.l=-0.2 y.h=0.0 + + char.l=0.047 lat.rotate + doping gauss n.type conc=5e17 x.l=0.0 x.h=5.0 y.l=-0.2 y.h=0.0 + + char.l=0.200 lat.rotate + doping gauss n.type conc=1e20 x.l=0.0 x.h=0.5 y.l=-0.2 y.h=0.0 + + char.l=0.100 lat.rotate ratio=0.7 + doping unif p.type conc=1e16 x.l=0.0 x.h=5.0 y.l=0.0 y.h=1.3 + doping gauss p.type conc=5e19 x.l=0.0 x.h=5.0 y.l=1.3 y.h=1.3 + + char.l=0.100 lat.rotate + + method ac=direct itlim=10 + models bgn srh auger conctau concmob fieldmob ** * Two-dimensional models for a * complementary MOS process. * Device models for 1um, 2um, 3um, 4um, 5um, 10um and 50um are provided. ** .MODEL M_NMOS_1 numos + output stat + + x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=0.4 h.s=0.005 h.m=0.1 r=2.0 + x.mesh w=0.4 h.e=0.005 h.m=0.1 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 + + y.mesh l=-.0200 n=1 + y.mesh l=0.0 n=6 + y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 + y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 + y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 + + region num=1 material=1 y.h=0.0 + region num=2 material=2 y.l=0.0 + interface dom=2 nei=1 x.l=1 x.h=2 layer.width=0.0 + material num=1 oxide + material num=2 silicon + + elec num=1 x.l=2.5 x.h=3.1 y.l=0.0 y.h=0.0 + elec num=2 x.l=1 x.h=2 iy.l=1 iy.h=1 + elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 + elec num=4 x.l=-0.1 x.h=3.1 y.l=2.0 y.h=2.0 + + doping gauss p.type conc=1.0e17 x.l=-0.1 x.h=3.1 y.l=0.0 + + char.l=0.30 + doping unif p.type conc=5.0e15 x.l=-0.1 x.h=3.1 y.l=0.0 y.h=2.1 + doping gauss n.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss n.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + doping gauss n.type conc=4e17 x.l=2 x.h=3.1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss n.type conc=1e20 x.l=2.05 x.h=3.1 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + + contact num=2 workf=4.10 + models concmob surfmob transmob fieldmob srh auger conctau bgn + method ac=direct itlim=10 onec .MODEL M_NMOS_2 numos + output stat + + x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=0.9 h.s=0.005 h.m=0.2 r=2.0 + x.mesh w=0.9 h.e=0.005 h.m=0.2 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 + + y.mesh l=-.0200 n=1 + y.mesh l=0.0 n=6 + y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 + y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 + y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 + + region num=1 material=1 y.h=0.0 + region num=2 material=2 y.l=0.0 + interface dom=2 nei=1 x.l=1 x.h=3 layer.width=0.0 + material num=1 oxide + material num=2 silicon + + elec num=1 x.l=3.5 x.h=4.1 y.l=0.0 y.h=0.0 + elec num=2 x.l=1 x.h=3 iy.l=1 iy.h=1 + elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 + elec num=4 x.l=-0.1 x.h=4.1 y.l=2.0 y.h=2.0 + + doping gauss p.type conc=1.0e17 x.l=-0.1 x.h=4.1 y.l=0.0 + + char.l=0.30 + doping unif p.type conc=5.0e15 x.l=-0.1 x.h=4.1 y.l=0.0 y.h=2.1 + doping gauss n.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss n.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + doping gauss n.type conc=4e17 x.l=3 x.h=4.1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss n.type conc=1e20 x.l=3.05 x.h=4.1 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + + contact num=2 workf=4.10 + models concmob surfmob transmob fieldmob srh auger conctau bgn + method ac=direct itlim=10 onec .MODEL M_NMOS_3 numos + output stat + + x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=1.4 h.s=0.005 h.m=0.3 r=2.0 + x.mesh w=1.4 h.e=0.005 h.m=0.3 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 + + y.mesh l=-.0200 n=1 + y.mesh l=0.0 n=6 + y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 + y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 + y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 + + region num=1 material=1 y.h=0.0 + region num=2 material=2 y.l=0.0 + interface dom=2 nei=1 x.l=1 x.h=4 layer.width=0.0 + material num=1 oxide + material num=2 silicon + + elec num=1 x.l=4.5 x.h=5.1 y.l=0.0 y.h=0.0 + elec num=2 x.l=1 x.h=4 iy.l=1 iy.h=1 + elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 + elec num=4 x.l=-0.1 x.h=5.1 y.l=2.0 y.h=2.0 + + doping gauss p.type conc=1.0e17 x.l=-0.1 x.h=5.1 y.l=0.0 + + char.l=0.30 + doping unif p.type conc=5.0e15 x.l=-0.1 x.h=5.1 y.l=0.0 y.h=2.1 + doping gauss n.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss n.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + doping gauss n.type conc=4e17 x.l=4 x.h=5.1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss n.type conc=1e20 x.l=4.05 x.h=5.1 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + + contact num=2 workf=4.10 + models concmob surfmob transmob fieldmob srh auger conctau bgn + method ac=direct itlim=10 onec .MODEL M_NMOS_4 numos + output stat + + x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=1.9 h.s=0.005 h.m=0.4 r=2.0 + x.mesh w=1.9 h.e=0.005 h.m=0.4 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 + + y.mesh l=-.0200 n=1 + y.mesh l=0.0 n=6 + y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 + y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 + y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 + + region num=1 material=1 y.h=0.0 + region num=2 material=2 y.l=0.0 + interface dom=2 nei=1 x.l=1 x.h=5 layer.width=0.0 + material num=1 oxide + material num=2 silicon + + elec num=1 x.l=5.5 x.h=6.1 y.l=0.0 y.h=0.0 + elec num=2 x.l=1 x.h=5 iy.l=1 iy.h=1 + elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 + elec num=4 x.l=-0.1 x.h=6.1 y.l=2.0 y.h=2.0 + + doping gauss p.type conc=1.0e17 x.l=-0.1 x.h=6.1 y.l=0.0 + + char.l=0.30 + doping unif p.type conc=5.0e15 x.l=-0.1 x.h=6.1 y.l=0.0 y.h=2.1 + doping gauss n.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss n.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + doping gauss n.type conc=4e17 x.l=5 x.h=6.1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss n.type conc=1e20 x.l=5.05 x.h=6.1 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + + contact num=2 workf=4.10 + models concmob surfmob transmob fieldmob srh auger conctau bgn + method ac=direct itlim=10 onec .MODEL M_NMOS_5 numos + output stat + + x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=2.4 h.s=0.005 h.m=0.5 r=2.0 + x.mesh w=2.4 h.e=0.005 h.m=0.5 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 + + y.mesh l=-.0200 n=1 + y.mesh l=0.0 n=6 + y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 + y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 + y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 + + region num=1 material=1 y.h=0.0 + region num=2 material=2 y.l=0.0 + interface dom=2 nei=1 x.l=1 x.h=6 layer.width=0.0 + material num=1 oxide + material num=2 silicon + + elec num=1 x.l=6.5 x.h=7.1 y.l=0.0 y.h=0.0 + elec num=2 x.l=1 x.h=6 iy.l=1 iy.h=1 + elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 + elec num=4 x.l=-0.1 x.h=7.1 y.l=2.0 y.h=2.0 + + doping gauss p.type conc=1.0e17 x.l=-0.1 x.h=7.1 y.l=0.0 + + char.l=0.30 + doping unif p.type conc=5.0e15 x.l=-0.1 x.h=7.1 y.l=0.0 y.h=2.1 + doping gauss n.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss n.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + doping gauss n.type conc=4e17 x.l=6 x.h=7.1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss n.type conc=1e20 x.l=6.05 x.h=7.1 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + + contact num=2 workf=4.10 + models concmob surfmob transmob fieldmob srh auger conctau bgn + method ac=direct itlim=10 onec .MODEL M_NMOS_10 numos + output stat + + x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=4.9 h.s=0.005 h.m=1 r=2.0 + x.mesh w=4.9 h.e=0.005 h.m=1 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 + + y.mesh l=-.0200 n=1 + y.mesh l=0.0 n=6 + y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 + y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 + y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 + + region num=1 material=1 y.h=0.0 + region num=2 material=2 y.l=0.0 + interface dom=2 nei=1 x.l=1 x.h=11 layer.width=0.0 + material num=1 oxide + material num=2 silicon + + elec num=1 x.l=11.5 x.h=12.1 y.l=0.0 y.h=0.0 + elec num=2 x.l=1 x.h=11 iy.l=1 iy.h=1 + elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 + elec num=4 x.l=-0.1 x.h=12.1 y.l=2.0 y.h=2.0 + + doping gauss p.type conc=1.0e17 x.l=-0.1 x.h=12.1 y.l=0.0 + + char.l=0.30 + doping unif p.type conc=5.0e15 x.l=-0.1 x.h=12.1 y.l=0.0 y.h=2.1 + doping gauss n.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss n.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + doping gauss n.type conc=4e17 x.l=11 x.h=12.1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss n.type conc=1e20 x.l=11.05 x.h=12.1 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + + contact num=2 workf=4.10 + models concmob surfmob transmob fieldmob srh auger conctau bgn + method ac=direct itlim=10 onec .MODEL M_NMOS_50 numos + output stat + + x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=24.9 h.s=0.005 h.m=5 r=2.0 + x.mesh w=24.9 h.e=0.005 h.m=5 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 + + y.mesh l=-.0200 n=1 + y.mesh l=0.0 n=6 + y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 + y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 + y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 + + region num=1 material=1 y.h=0.0 + region num=2 material=2 y.l=0.0 + interface dom=2 nei=1 x.l=1 x.h=51 layer.width=0.0 + material num=1 oxide + material num=2 silicon + + elec num=1 x.l=51.5 x.h=52.1 y.l=0.0 y.h=0.0 + elec num=2 x.l=1 x.h=51 iy.l=1 iy.h=1 + elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 + elec num=4 x.l=-0.1 x.h=52.1 y.l=2.0 y.h=2.0 + + doping gauss p.type conc=1.0e17 x.l=-0.1 x.h=52.1 y.l=0.0 + + char.l=0.30 + doping unif p.type conc=5.0e15 x.l=-0.1 x.h=52.1 y.l=0.0 y.h=2.1 + doping gauss n.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss n.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + doping gauss n.type conc=4e17 x.l=51 x.h=52.1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss n.type conc=1e20 x.l=51.05 x.h=52.1 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + + contact num=2 workf=4.10 + models concmob surfmob transmob fieldmob srh auger conctau bgn + method ac=direct itlim=10 onec .MODEL M_PMOS_1 numos + output stat + + x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=0.4 h.s=0.005 h.m=0.1 r=2.0 + x.mesh w=0.4 h.e=0.005 h.m=0.1 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 + + y.mesh l=-.0200 n=1 + y.mesh l=0.0 n=6 + y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 + y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 + y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 + + region num=1 material=1 y.h=0.0 + region num=2 material=2 y.l=0.0 + interface dom=2 nei=1 x.l=1 x.h=2 layer.width=0.0 + material num=1 oxide + material num=2 silicon + + elec num=1 x.l=2.5 x.h=3.1 y.l=0.0 y.h=0.0 + elec num=2 x.l=1 x.h=2 iy.l=1 iy.h=1 + elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 + elec num=4 x.l=-0.1 x.h=3.1 y.l=2.0 y.h=2.0 + + doping gauss n.type conc=1.0e17 x.l=-0.1 x.h=3.1 y.l=0.0 + + char.l=0.30 + doping unif n.type conc=5.0e15 x.l=-0.1 x.h=3.1 y.l=0.0 y.h=2.1 + doping gauss p.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss p.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + doping gauss p.type conc=4e17 x.l=2 x.h=3.1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss p.type conc=1e20 x.l=2.05 x.h=3.1 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + + contact num=2 workf=5.29 + models concmob surfmob transmob fieldmob srh auger conctau bgn + method ac=direct itlim=10 onec .MODEL M_PMOS_2 numos + output stat + + x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=0.9 h.s=0.005 h.m=0.2 r=2.0 + x.mesh w=0.9 h.e=0.005 h.m=0.2 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 + + y.mesh l=-.0200 n=1 + y.mesh l=0.0 n=6 + y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 + y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 + y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 + + region num=1 material=1 y.h=0.0 + region num=2 material=2 y.l=0.0 + interface dom=2 nei=1 x.l=1 x.h=3 layer.width=0.0 + material num=1 oxide + material num=2 silicon + + elec num=1 x.l=3.5 x.h=4.1 y.l=0.0 y.h=0.0 + elec num=2 x.l=1 x.h=3 iy.l=1 iy.h=1 + elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 + elec num=4 x.l=-0.1 x.h=4.1 y.l=2.0 y.h=2.0 + + doping gauss n.type conc=1.0e17 x.l=-0.1 x.h=4.1 y.l=0.0 + + char.l=0.30 + doping unif n.type conc=5.0e15 x.l=-0.1 x.h=4.1 y.l=0.0 y.h=2.1 + doping gauss p.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss p.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + doping gauss p.type conc=4e17 x.l=3 x.h=4.1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss p.type conc=1e20 x.l=3.05 x.h=4.1 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + + contact num=2 workf=5.29 + models concmob surfmob transmob fieldmob srh auger conctau bgn + method ac=direct itlim=10 onec .MODEL M_PMOS_3 numos + output stat + + x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=1.4 h.s=0.005 h.m=0.3 r=2.0 + x.mesh w=1.4 h.e=0.005 h.m=0.3 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 + + y.mesh l=-.0200 n=1 + y.mesh l=0.0 n=6 + y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 + y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 + y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 + + region num=1 material=1 y.h=0.0 + region num=2 material=2 y.l=0.0 + interface dom=2 nei=1 x.l=1 x.h=4 layer.width=0.0 + material num=1 oxide + material num=2 silicon + + elec num=1 x.l=4.5 x.h=5.1 y.l=0.0 y.h=0.0 + elec num=2 x.l=1 x.h=4 iy.l=1 iy.h=1 + elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 + elec num=4 x.l=-0.1 x.h=5.1 y.l=2.0 y.h=2.0 + + doping gauss n.type conc=1.0e17 x.l=-0.1 x.h=5.1 y.l=0.0 + + char.l=0.30 + doping unif n.type conc=5.0e15 x.l=-0.1 x.h=5.1 y.l=0.0 y.h=2.1 + doping gauss p.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss p.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + doping gauss p.type conc=4e17 x.l=4 x.h=5.1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss p.type conc=1e20 x.l=4.05 x.h=5.1 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + + contact num=2 workf=5.29 + models concmob surfmob transmob fieldmob srh auger conctau bgn + method ac=direct itlim=10 onec .MODEL M_PMOS_4 numos + output stat + + x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=1.9 h.s=0.005 h.m=0.4 r=2.0 + x.mesh w=1.9 h.e=0.005 h.m=0.4 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 + + y.mesh l=-.0200 n=1 + y.mesh l=0.0 n=6 + y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 + y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 + y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 + + region num=1 material=1 y.h=0.0 + region num=2 material=2 y.l=0.0 + interface dom=2 nei=1 x.l=1 x.h=5 layer.width=0.0 + material num=1 oxide + material num=2 silicon + + elec num=1 x.l=5.5 x.h=6.1 y.l=0.0 y.h=0.0 + elec num=2 x.l=1 x.h=5 iy.l=1 iy.h=1 + elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 + elec num=4 x.l=-0.1 x.h=6.1 y.l=2.0 y.h=2.0 + + doping gauss n.type conc=1.0e17 x.l=-0.1 x.h=6.1 y.l=0.0 + + char.l=0.30 + doping unif n.type conc=5.0e15 x.l=-0.1 x.h=6.1 y.l=0.0 y.h=2.1 + doping gauss p.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss p.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + doping gauss p.type conc=4e17 x.l=5 x.h=6.1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss p.type conc=1e20 x.l=5.05 x.h=6.1 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + + contact num=2 workf=5.29 + models concmob surfmob transmob fieldmob srh auger conctau bgn + method ac=direct itlim=10 onec .MODEL M_PMOS_5 numos + output stat + + x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=2.4 h.s=0.005 h.m=0.5 r=2.0 + x.mesh w=2.4 h.e=0.005 h.m=0.5 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 + + y.mesh l=-.0200 n=1 + y.mesh l=0.0 n=6 + y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 + y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 + y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 + + region num=1 material=1 y.h=0.0 + region num=2 material=2 y.l=0.0 + interface dom=2 nei=1 x.l=1 x.h=6 layer.width=0.0 + material num=1 oxide + material num=2 silicon + + elec num=1 x.l=6.5 x.h=7.1 y.l=0.0 y.h=0.0 + elec num=2 x.l=1 x.h=6 iy.l=1 iy.h=1 + elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 + elec num=4 x.l=-0.1 x.h=7.1 y.l=2.0 y.h=2.0 + + doping gauss n.type conc=1.0e17 x.l=-0.1 x.h=7.1 y.l=0.0 + + char.l=0.30 + doping unif n.type conc=5.0e15 x.l=-0.1 x.h=7.1 y.l=0.0 y.h=2.1 + doping gauss p.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss p.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + doping gauss p.type conc=4e17 x.l=6 x.h=7.1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss p.type conc=1e20 x.l=6.05 x.h=7.1 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + + contact num=2 workf=5.29 + models concmob surfmob transmob fieldmob srh auger conctau bgn + method ac=direct itlim=10 onec .MODEL M_PMOS_10 numos + output stat + + x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=4.9 h.s=0.005 h.m=1 r=2.0 + x.mesh w=4.9 h.e=0.005 h.m=1 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 + + y.mesh l=-.0200 n=1 + y.mesh l=0.0 n=6 + y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 + y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 + y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 + + region num=1 material=1 y.h=0.0 + region num=2 material=2 y.l=0.0 + interface dom=2 nei=1 x.l=1 x.h=11 layer.width=0.0 + material num=1 oxide + material num=2 silicon + + elec num=1 x.l=11.5 x.h=12.1 y.l=0.0 y.h=0.0 + elec num=2 x.l=1 x.h=11 iy.l=1 iy.h=1 + elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 + elec num=4 x.l=-0.1 x.h=12.1 y.l=2.0 y.h=2.0 + + doping gauss n.type conc=1.0e17 x.l=-0.1 x.h=12.1 y.l=0.0 + + char.l=0.30 + doping unif n.type conc=5.0e15 x.l=-0.1 x.h=12.1 y.l=0.0 y.h=2.1 + doping gauss p.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss p.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + doping gauss p.type conc=4e17 x.l=11 x.h=12.1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss p.type conc=1e20 x.l=11.05 x.h=12.1 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + + contact num=2 workf=5.29 + models concmob surfmob transmob fieldmob srh auger conctau bgn + method ac=direct itlim=10 onec .MODEL M_PMOS_50 numos + output stat + + x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=24.9 h.s=0.005 h.m=5 r=2.0 + x.mesh w=24.9 h.e=0.005 h.m=5 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 + + y.mesh l=-.0200 n=1 + y.mesh l=0.0 n=6 + y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 + y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 + y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 + + region num=1 material=1 y.h=0.0 + region num=2 material=2 y.l=0.0 + interface dom=2 nei=1 x.l=1 x.h=51 layer.width=0.0 + material num=1 oxide + material num=2 silicon + + elec num=1 x.l=51.5 x.h=52.1 y.l=0.0 y.h=0.0 + elec num=2 x.l=1 x.h=51 iy.l=1 iy.h=1 + elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 + elec num=4 x.l=-0.1 x.h=52.1 y.l=2.0 y.h=2.0 + + doping gauss n.type conc=1.0e17 x.l=-0.1 x.h=52.1 y.l=0.0 + + char.l=0.30 + doping unif n.type conc=5.0e15 x.l=-0.1 x.h=52.1 y.l=0.0 y.h=2.1 + doping gauss p.type conc=4e17 x.l=-0.1 x.h=1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss p.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + doping gauss p.type conc=4e17 x.l=51 x.h=52.1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss p.type conc=1e20 x.l=51.05 x.h=52.1 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + + contact num=2 workf=5.29 + models concmob surfmob transmob fieldmob srh auger conctau bgn + method ac=direct itlim=10 onec ** * BSIM1 NMOS and PMOS 1.0 \um models. * Gummel-Poon bipolar models. ** .model M_NSIM_1 nmos level=4 +vfb= -1.1908 +phi= .8399 +k1= 1.5329 +k2= 193.7322m +eta= 2m +muz= 746.0 +u0= 90.0m +x2mz= 10.1429 +x2e= -2.5m +x3e= 0.2m +x2u0= -10.0m +mus= 975.0 +u1= .20 +x2ms= 0.0 +x2u1= 0.0 +x3ms= 10 +x3u1= 5.0m +tox=2.00000e-02 +cgdo=2.0e-10 +cgso=2.0e-10 +cgbo=0.0 +temp= 27 +vdd= 7.0 +xpart +n0= 1.5686 +nb= 94.6392m +nd=0.00000e+00 +rsh=30.0 cj=7.000e-004 cjsw=4.20e-010 +js=1.00e-008 pb=0.700e000 +pbsw=0.8000e000 mj=0.5 mjsw=0.33 +wdf=0 dell=0.20u .model M_PSIM_1 pmos level=4 +vfb= -1.3674 +phi= .8414 +k1= 1.5686 +k2= 203m +eta= 2m +muz= 340.0 +u0= 35.0m +x2mz= 6.0 +x2e= 0.0 +x3e= -0.2m +x2u0= -15.0m +mus= 440.0 +u1= .38 +x2ms= 0.0 +x2u1= 0.0 +x3ms= -20 +x3u1= -10.0m +tox=2.00000e-02 +cgdo=2.0e-10 +cgso=2.0e-10 +cgbo=0.0 +temp= 27 +vdd= 5.0 +xpart +n0= 1.5686 +nb= 94.6392m +nd=0.00000e+00 +rsh=80.0 cj=7.000e-004 cjsw=4.20e-010 +js=1.00e-008 pb=0.700e000 +pbsw=0.8000e000 mj=0.5 mjsw=0.33 +wdf=0 dell=0.17u .model M_GNPN npn + is=1.3e-16 + nf=1.00 bf=262.5 ikf=25mA vaf=20v + nr=1.00 br=97.5 ikr=0.5mA var=1.8v + rc=20.0 + re=0.09 + rb=15.0 + ise=4.0e-16 ne=2.1 + isc=7.2e-17 nc=2.0 + tf=9.4ps itf=26uA xtf=0.5 + tr=10ns + cje=89.44fF vje=0.95 mje=0.5 + cjc=12.82fF vjc=0.73 mjc=0.49 .model M_GPNP pnp + is=5.8e-17 + nf=1.001 bf=96.4 ikf=12mA vaf=29v + nr=1.0 br=17.3 ikr=0.2mA var=2.0v + rc=50.0 + re=0.17 + rb=20.0 + ise=6.8e-17 ne=2.0 + isc=9.0e-17 nc=2.1 + tf=27.4ps itf=26uA xtf=0.5 + tr=10ns + cje=55.36fF vje=0.95 mje=0.58 + cjc=11.80fF vjc=0.72 mjc=0.46 tmpk8ny_4pz/examples/cider/mos/0000755000175000017500000000000013546075722016662 5ustar carstencarstentmpk8ny_4pz/examples/cider/mos/bootinv.cir0000644000175000017500000000274413546075722021050 0ustar carstencarstenNMOS Enhancement-Load Bootstrap Inverter Vdd 1 0 5.0v Vss 2 0 0.0v Vin 5 0 0.0v PWL (0.0ns 5.0v) (1ns 0.0v) (10ns 0.0v) (11ns 5.0v) + (20ns 5.0v) (21ns 0.0v) (30ns 0.0v) (31ns 5.0v) M1 1 1 3 2 M_NMOS w=5u M2 1 3 4 4 M_NMOS w=5u M3 4 5 2 2 M_NMOS w=5u CL 4 0 0.1pf CB 3 4 0.1pf .model M_NMOS numos + x.mesh l=0.0 n=1 + x.mesh l=0.6 n=4 + x.mesh l=0.7 n=5 + x.mesh l=1.0 n=7 + x.mesh l=1.2 n=11 + x.mesh l=3.2 n=21 + x.mesh l=3.4 n=25 + x.mesh l=3.7 n=27 + x.mesh l=3.8 n=28 + x.mesh l=4.4 n=31 + + y.mesh l=-.05 n=1 + y.mesh l=0.0 n=5 + y.mesh l=.05 n=9 + y.mesh l=0.3 n=14 + y.mesh l=2.0 n=19 + + region num=1 material=1 y.l=0.0 + material num=1 silicon + mobility material=1 concmod=sg fieldmod=sg + mobility material=1 init elec major + mobility material=1 init elec minor + mobility material=1 init hole major + mobility material=1 init hole minor + + region num=2 material=2 y.h=0.0 x.l=0.7 x.h=3.7 + material num=2 oxide + + elec num=1 x.l=3.8 x.h=4.4 y.l=0.0 y.h=0.0 + elec num=2 x.l=0.7 x.h=3.7 iy.l=1 iy.h=1 + elec num=3 x.l=0.0 x.h=0.6 y.l=0.0 y.h=0.0 + elec num=4 x.l=0.0 x.h=4.4 y.l=2.0 y.h=2.0 + + doping unif p.type conc=2.5e16 x.l=0.0 x.h=4.4 y.l=0.0 y.h=2.0 + doping unif p.type conc=1e16 x.l=0.0 x.h=4.4 y.l=0.0 y.h=0.05 + doping unif n.type conc=1e20 x.l=0.0 x.h=1.1 y.l=0.0 y.h=0.2 + doping unif n.type conc=1e20 x.l=3.3 x.h=4.4 y.l=0.0 y.h=0.2 + + models concmob fieldmob + method ac=direct onec .tran 0.2ns 40ns .print v(4) .options acct bypass=1 method=gear .end tmpk8ny_4pz/examples/cider/mos/nmosinv.cir0000644000175000017500000000246413546075722021060 0ustar carstencarstenResistive load NMOS inverter vin 1 0 pwl 0 0.0 2ns 5 vdd 3 0 dc 5.0 rd 3 2 2.5k m1 2 1 4 5 mmod w=10um cl 2 0 2pf vb 5 0 0 vs 4 0 0 .model mmod numos + x.mesh l=0.0 n=1 + x.mesh l=0.6 n=4 + x.mesh l=0.7 n=5 + x.mesh l=1.0 n=7 + x.mesh l=1.2 n=11 + x.mesh l=3.2 n=21 + x.mesh l=3.4 n=25 + x.mesh l=3.7 n=27 + x.mesh l=3.8 n=28 + x.mesh l=4.4 n=31 + + y.mesh l=-.05 n=1 + y.mesh l=0.0 n=5 + y.mesh l=.05 n=9 + y.mesh l=0.3 n=14 + y.mesh l=2.0 n=19 + + region num=1 material=1 y.l=0.0 + material num=1 silicon + mobility material=1 concmod=sg fieldmod=sg + mobility material=1 elec major + mobility material=1 elec minor + mobility material=1 hole major + mobility material=1 hole minor + + region num=2 material=2 y.h=0.0 x.l=0.7 x.h=3.7 + material num=2 oxide + + elec num=1 x.l=3.8 x.h=4.4 y.l=0.0 y.h=0.0 + elec num=2 x.l=0.7 x.h=3.7 iy.l=1 iy.h=1 + elec num=3 x.l=0.0 x.h=0.6 y.l=0.0 y.h=0.0 + elec num=4 x.l=0.0 x.h=4.4 y.l=2.0 y.h=2.0 + + doping unif p.type conc=2.5e16 x.l=0.0 x.h=4.4 y.l=0.0 y.h=2.0 + doping unif p.type conc=1e16 x.l=0.0 x.h=4.4 y.l=0.0 y.h=0.05 + doping unif n.type conc=1e20 x.l=0.0 x.h=1.1 y.l=0.0 y.h=0.2 + doping unif n.type conc=1e20 x.l=3.3 x.h=4.4 y.l=0.0 y.h=0.2 + + models concmob fieldmob + method ac=direct onec .tran 0.2ns 30ns .options acct bypass=1 .print tran v(1) v(2) .end tmpk8ny_4pz/examples/cider/mos/charge.cir0000644000175000017500000000257213546075722020620 0ustar carstencarstenMOS charge pump vin 4 0 dc 0v pulse 0 5 15ns 5ns 5ns 50ns 100ns vdd 5 6 dc 0v pulse 0 5 25ns 5ns 5ns 50ns 100ns vbb 0 7 dc 0v pulse 0 5 0ns 5ns 5ns 50ns 100ns rd 6 2 10k m1 5 4 3 7 mmod w=100um vs 3 2 0 vc 2 1 0 c2 1 0 10pf .ic v(3)=1.0 .tran 2ns 200ns .options acct bypass=1 .print tran v(1) v(2) .model mmod numos + x.mesh n=1 l=0 + x.mesh n=3 l=0.4 + x.mesh n=7 l=0.6 + x.mesh n=15 l=1.4 + x.mesh n=19 l=1.6 + x.mesh n=21 l=2.0 + + y.mesh n=1 l=0 + y.mesh n=4 l=0.015 + y.mesh n=8 l=0.05 + y.mesh n=12 l=0.25 + y.mesh n=14 l=0.35 + y.mesh n=17 l=0.5 + y.mesh n=21 l=1.0 + + region num=1 material=1 y.l=0.015 + material num=1 silicon + mobility material=1 concmod=sg fieldmod=sg + mobility material=1 elec major + mobility material=1 elec minor + mobility material=1 hole major + mobility material=1 hole minor + + region num=2 material=2 y.h=0.015 x.l=0.5 x.h=1.5 + material num=2 oxide + + elec num=1 ix.l=18 ix.h=21 iy.l=4 iy.h=4 + elec num=2 ix.l=5 ix.h=17 iy.l=1 iy.h=1 + elec num=3 ix.l=1 ix.h=4 iy.l=4 iy.h=4 + elec num=4 ix.l=1 ix.h=21 iy.l=21 iy.h=21 + + doping unif n.type conc=1e18 x.l=0.0 x.h=0.5 y.l=0.015 y.h=0.25 + doping unif n.type conc=1e18 x.l=1.5 x.h=2.0 y.l=0.015 y.h=0.25 + doping unif p.type conc=1e15 x.l=0.0 x.h=2.0 y.l=0.015 y.h=1.0 + doping unif p.type conc=1.3e17 x.l=0.5 x.h=1.5 y.l=0.015 y.h=0.05 + + models concmob fieldmob + method onec .end tmpk8ny_4pz/examples/cider/mos/ringosc.cir0000644000175000017500000000545213546075722021033 0ustar carstencarstenCMOS Ring Oscillator Vdd 1 0 5.0v Vss 2 0 0.0v X1 1 2 3 4 INV X2 1 2 4 5 INV X3 1 2 5 3 INV *X4 1 2 6 7 INV *X5 1 2 7 8 INV *X6 1 2 8 9 INV *X7 1 2 9 3 INV .IC V(3)=0.0v V(4)=2.5v V(5)=5.0v * V(6)=0.0v V(7)=5.0v V(8)=0.0v V(9)=5.0v Vin 3 0 2.5v .SUBCKT INV 1 2 3 4 * Vdd Vss Vin Vout M1 14 13 15 16 M_PMOS w=6.0u M2 24 23 25 26 M_NMOS w=3.0u Vgp 3 13 0.0v Vdp 4 14 0.0v Vsp 1 15 0.0v Vbp 1 16 0.0v Vgn 3 23 0.0v Vdn 4 24 0.0v Vsn 2 25 0.0v Vbn 2 26 0.0v .ENDS INV .model M_NMOS numos + x.mesh l=0.0 n=1 + x.mesh l=0.6 n=4 + x.mesh l=0.7 n=5 + x.mesh l=1.0 n=7 + x.mesh l=1.2 n=11 + x.mesh l=3.2 n=21 + x.mesh l=3.4 n=25 + x.mesh l=3.7 n=27 + x.mesh l=3.8 n=28 + x.mesh l=4.4 n=31 + + y.mesh l=-.05 n=1 + y.mesh l=0.0 n=5 + y.mesh l=.05 n=9 + y.mesh l=0.3 n=14 + y.mesh l=2.0 n=19 + + region num=1 material=1 y.l=0.0 + material num=1 silicon + mobility material=1 concmod=sg fieldmod=sg + mobility material=1 elec major + mobility material=1 elec minor + mobility material=1 hole major + mobility material=1 hole minor + + region num=2 material=2 y.h=0.0 x.l=0.7 x.h=3.7 + material num=2 oxide + + elec num=1 x.l=3.8 x.h=4.4 y.l=0.0 y.h=0.0 + elec num=2 x.l=0.7 x.h=3.7 iy.l=1 iy.h=1 + elec num=3 x.l=0.0 x.h=0.6 y.l=0.0 y.h=0.0 + elec num=4 x.l=0.0 x.h=4.4 y.l=2.0 y.h=2.0 + + doping unif p.type conc=2.5e16 x.l=0.0 x.h=4.4 y.l=0.0 y.h=2.0 + doping unif p.type conc=1e16 x.l=0.0 x.h=4.4 y.l=0.0 y.h=0.05 + doping unif n.type conc=1e20 x.l=0.0 x.h=1.1 y.l=0.0 y.h=0.2 + doping unif n.type conc=1e20 x.l=3.3 x.h=4.4 y.l=0.0 y.h=0.2 + + models concmob fieldmob bgn srh conctau + method ac=direct onec .model M_PMOS numos + x.mesh l=0.0 n=1 + x.mesh l=0.6 n=4 + x.mesh l=0.7 n=5 + x.mesh l=1.0 n=7 + x.mesh l=1.2 n=11 + x.mesh l=3.2 n=21 + x.mesh l=3.4 n=25 + x.mesh l=3.7 n=27 + x.mesh l=3.8 n=28 + x.mesh l=4.4 n=31 + + y.mesh l=-.05 n=1 + y.mesh l=0.0 n=5 + y.mesh l=.05 n=9 + y.mesh l=0.3 n=14 + y.mesh l=2.0 n=19 + + region num=1 material=1 y.l=0.0 + material num=1 silicon + mobility material=1 concmod=sg fieldmod=sg + mobility material=1 elec major + mobility material=1 elec minor + mobility material=1 hole major + mobility material=1 hole minor + + region num=2 material=2 y.h=0.0 x.l=0.7 x.h=3.7 + material num=2 oxide + + elec num=1 x.l=3.8 x.h=4.4 y.l=0.0 y.h=0.0 + elec num=2 x.l=0.7 x.h=3.7 iy.l=1 iy.h=1 + elec num=3 x.l=0.0 x.h=0.6 y.l=0.0 y.h=0.0 + elec num=4 x.l=0.0 x.h=4.4 y.l=2.0 y.h=2.0 + + doping unif n.type conc=1e16 x.l=0.0 x.h=4.4 y.l=0.0 y.h=2.0 + doping unif p.type conc=3e16 x.l=0.0 x.h=4.4 y.l=0.0 y.h=0.05 + doping unif p.type conc=1e20 x.l=0.0 x.h=1.1 y.l=0.0 y.h=0.2 + doping unif p.type conc=1e20 x.l=3.3 x.h=4.4 y.l=0.0 y.h=0.2 + + models concmob fieldmob bgn srh conctau + method ac=direct onec .tran 0.1ns 5ns .print v(4) .options acct bypass=1 method=gear .end tmpk8ny_4pz/examples/cider/mos/pass.cir0000644000175000017500000000260113546075722020326 0ustar carstencarstenTurnoff transient of pass transistor M1 11 2 3 4 mmod w=20um Cs 1 0 6.0pF Cl 3 0 6.0pF R1 3 6 200k Vin 6 0 dc 0 Vdrn 1 11 dc 0 Vg 2 0 dc 5 pwl 0 5 0.1n 0 1 0 Vb 4 0 dc 0.0 .tran 0.05ns 0.2ns 0.0ns 0.05ns .print tran v(1) i(Vdrn) .ic v(1)=0 v(3)=0 .option acct bypass=1 .model mmod numos + x.mesh l=0.0 n=1 + x.mesh l=0.6 n=4 + x.mesh l=0.7 n=5 + x.mesh l=1.0 n=7 + x.mesh l=1.2 n=11 + x.mesh l=3.2 n=21 + x.mesh l=3.4 n=25 + x.mesh l=3.7 n=27 + x.mesh l=3.8 n=28 + x.mesh l=4.4 n=31 + + y.mesh l=-.05 n=1 + y.mesh l=0.0 n=5 + y.mesh l=.05 n=9 + y.mesh l=0.3 n=14 + y.mesh l=2.0 n=19 + + region num=1 material=1 y.l=0.0 + material num=1 silicon + mobility material=1 concmod=sg fieldmod=sg + mobility material=1 elec major + mobility material=1 elec minor + mobility material=1 hole major + mobility material=1 hole minor + + region num=2 material=2 y.h=0.0 x.l=0.7 x.h=3.7 + material num=2 oxide + + elec num=1 x.l=3.8 x.h=4.4 y.l=0.0 y.h=0.0 + elec num=2 x.l=0.7 x.h=3.7 iy.l=1 iy.h=1 + elec num=3 x.l=0.0 x.h=0.6 y.l=0.0 y.h=0.0 + elec num=4 x.l=0.0 x.h=4.4 y.l=2.0 y.h=2.0 + + doping unif p.type conc=2.5e16 x.l=0.0 x.h=4.4 y.l=0.0 y.h=2.0 + doping unif p.type conc=1e16 x.l=0.0 x.h=4.4 y.l=0.0 y.h=0.05 + doping unif n.type conc=1e20 x.l=0.0 x.h=1.1 y.l=0.0 y.h=0.2 + doping unif n.type conc=1e20 x.l=3.3 x.h=4.4 y.l=0.0 y.h=0.2 + + models concmob fieldmob + method ac=direct onec .end tmpk8ny_4pz/examples/cider/mos/cmosinv.cir0000644000175000017500000000523013546075722021037 0ustar carstencarstenCMOS Inverter Vdd 1 0 5.0v Vss 2 0 0.0v X1 1 2 3 4 INV Vin 3 0 2.5v .SUBCKT INV 1 2 3 4 * Vdd Vss Vin Vout M1 14 13 15 16 M_PMOS w=6.0u M2 24 23 25 26 M_NMOS w=3.0u Vgp 3 13 0.0v Vdp 4 14 0.0v Vsp 1 15 0.0v Vbp 1 16 0.0v Vgn 3 23 0.0v Vdn 4 24 0.0v Vsn 2 25 0.0v Vbn 2 26 0.0v .ENDS INV .model M_NMOS numos + x.mesh l=0.0 n=1 + x.mesh l=0.6 n=4 + x.mesh l=0.7 n=5 + x.mesh l=1.0 n=7 + x.mesh l=1.2 n=11 + x.mesh l=3.2 n=21 + x.mesh l=3.4 n=25 + x.mesh l=3.7 n=27 + x.mesh l=3.8 n=28 + x.mesh l=4.4 n=31 + + y.mesh l=-.05 n=1 + y.mesh l=0.0 n=5 + y.mesh l=.05 n=9 + y.mesh l=0.3 n=14 + y.mesh l=2.0 n=19 + + region num=1 material=1 y.l=0.0 + material num=1 silicon + mobility material=1 concmod=sg fieldmod=sg + mobility material=1 elec major + mobility material=1 elec minor + mobility material=1 hole major + mobility material=1 hole minor + + region num=2 material=2 y.h=0.0 x.l=0.7 x.h=3.7 + material num=2 oxide + + elec num=1 x.l=3.8 x.h=4.4 y.l=0.0 y.h=0.0 + elec num=2 x.l=0.7 x.h=3.7 iy.l=1 iy.h=1 + elec num=3 x.l=0.0 x.h=0.6 y.l=0.0 y.h=0.0 + elec num=4 x.l=0.0 x.h=4.4 y.l=2.0 y.h=2.0 + + doping unif p.type conc=2.5e16 x.l=0.0 x.h=4.4 y.l=0.0 y.h=2.0 + doping unif p.type conc=1e16 x.l=0.0 x.h=4.4 y.l=0.0 y.h=0.05 + doping unif n.type conc=1e20 x.l=0.0 x.h=1.1 y.l=0.0 y.h=0.2 + doping unif n.type conc=1e20 x.l=3.3 x.h=4.4 y.l=0.0 y.h=0.2 + + models concmob fieldmob bgn srh conctau + method ac=direct onec .model M_PMOS numos + x.mesh l=0.0 n=1 + x.mesh l=0.6 n=4 + x.mesh l=0.7 n=5 + x.mesh l=1.0 n=7 + x.mesh l=1.2 n=11 + x.mesh l=3.2 n=21 + x.mesh l=3.4 n=25 + x.mesh l=3.7 n=27 + x.mesh l=3.8 n=28 + x.mesh l=4.4 n=31 + + y.mesh l=-.05 n=1 + y.mesh l=0.0 n=5 + y.mesh l=.05 n=9 + y.mesh l=0.3 n=14 + y.mesh l=2.0 n=19 + + region num=1 material=1 y.l=0.0 + material num=1 silicon + mobility material=1 concmod=sg fieldmod=sg + mobility material=1 elec major + mobility material=1 elec minor + mobility material=1 hole major + mobility material=1 hole minor + + region num=2 material=2 y.h=0.0 x.l=0.7 x.h=3.7 + material num=2 oxide + + elec num=1 x.l=3.8 x.h=4.4 y.l=0.0 y.h=0.0 + elec num=2 x.l=0.7 x.h=3.7 iy.l=1 iy.h=1 + elec num=3 x.l=0.0 x.h=0.6 y.l=0.0 y.h=0.0 + elec num=4 x.l=0.0 x.h=4.4 y.l=2.0 y.h=2.0 + + doping unif n.type conc=1e16 x.l=0.0 x.h=4.4 y.l=0.0 y.h=2.0 + doping unif p.type conc=3e16 x.l=0.0 x.h=4.4 y.l=0.0 y.h=0.05 + doping unif p.type conc=1e20 x.l=0.0 x.h=1.1 y.l=0.0 y.h=0.2 + doping unif p.type conc=1e20 x.l=3.3 x.h=4.4 y.l=0.0 y.h=0.2 + + models concmob fieldmob bgn srh conctau + method ac=direct onec *.tran 0.1ns 5ns *.op .dc Vin 0.0v 5.001v 0.05v .print v(4) .options acct bypass=1 method=gear .end tmpk8ny_4pz/examples/cider/bicmos/0000755000175000017500000000000013546075722017340 5ustar carstencarstentmpk8ny_4pz/examples/cider/bicmos/bicmpd.cir0000644000175000017500000000053513546075722021300 0ustar carstencarstenBiCMOS Pulldown Circuit VSS 2 0 0v VIN 3 2 0v (PULSE 0.0v 4.2v 0ns 1ns 1ns 9ns 20ns) M1 8 3 5 11 M_NMOS_1 W=4u L=1u VD 4 8 0v VBK 11 2 0v Q1 10 7 9 M_NPN AREA=8 VC 4 10 0v VB 5 7 0v VE 9 2 0v CL 4 6 1pF VL 6 2 0v .IC V(10)=5.0v V(7)=0.0v .TRAN 0.1ns 5ns 0ns 0.1ns .PLOT TRAN I(VIN) .include bicmos.lib .OPTIONS ACCT BYPASS=1 .END tmpk8ny_4pz/examples/cider/bicmos/bicmos.lib0000644000175000017500000001044613546075722021311 0ustar carstencarsten.MODEL M_NPN nbjt level=2 + title TWO-DIMENSIONAL NUMERICAL POLYSILICON EMITTER BIPOLAR TRANSISTOR + * Since, we are only simulating half of a device, we double the unit width + * 1.0 um emitter length + options defw=2.0u + output dc.debug stat + + *x.mesh w=2.5 n=5 + x.mesh w=2.0 h.e=0.05 h.m=0.2 r=1.5 + x.mesh w=0.5 h.s=0.05 h.m=0.1 r=1.5 + + y.mesh l=-0.2 n=1 + y.mesh l= 0.0 n=5 + y.mesh w=0.10 h.e=0.002 h.m=0.01 r=1.5 + y.mesh w=0.15 h.s=0.002 h.m=0.01 r=1.5 + y.mesh w=0.35 h.s=0.01 h.m=0.2 r=1.5 + y.mesh w=0.40 h.e=0.05 h.m=0.2 r=1.5 + y.mesh w=0.30 h.s=0.05 h.m=0.1 r=1.5 + + domain num=1 material=1 x.l=2.0 y.h=0.0 + domain num=2 material=2 x.h=2.0 y.h=0.0 + domain num=3 material=3 y.l=0.0 + material num=1 polysilicon + material num=2 oxide + material num=3 silicon + + elec num=1 x.l=0.0 x.h=0.0 y.l=1.1 y.h=1.3 + elec num=2 x.l=0.0 x.h=0.5 y.l=0.0 y.h=0.0 + elec num=3 x.l=2.0 x.h=3.0 y.l=-0.2 y.h=-0.2 + + doping gauss n.type conc=3e20 x.l=2.0 x.h=3.0 y.l=-0.2 y.h=0.0 + + char.l=0.047 lat.rotate + doping gauss p.type conc=1e19 x.l=0.0 x.h=5.0 y.l=-0.2 y.h=0.0 + + char.l=0.094 lat.rotate + doping unif n.type conc=1e16 x.l=0.0 x.h=5.0 y.l=0.0 y.h=1.3 + doping gauss n.type conc=5e19 x.l=0.0 x.h=5.0 y.l=1.3 y.h=1.3 + + char.l=0.100 lat.rotate + + method ac=direct itlim=10 + models bgn srh auger conctau concmob fieldmob .MODEL M_NMOS_1 numos + output dc.debug stat + title 1.0um NMOS Device + + x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=0.4 h.s=0.005 h.m=0.1 r=2.0 + x.mesh w=0.4 h.e=0.005 h.m=0.1 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 + + y.mesh l=-.0200 n=1 + y.mesh l=0.0 n=6 + y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 + y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 + y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 + + region num=1 material=1 y.h=0.0 + region num=2 material=2 y.l=0.0 + interface dom=2 nei=1 x.l=1.0 x.h=2.0 layer.width=0.0 + material num=1 oxide + material num=2 silicon + + elec num=1 x.l=2.5 x.h=3.1 y.l=0.0 y.h=0.0 + elec num=2 x.l=1.0 x.h=2.0 iy.l=1 iy.h=1 + elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 + elec num=4 x.l=-0.1 x.h=3.1 y.l=2.0 y.h=2.0 + + doping gauss p.type conc=1.0e17 x.l=-0.1 x.h=3.1 y.l=0.0 + + char.l=0.30 + doping unif p.type conc=5.0e15 x.l=-0.1 x.h=3.1 y.l=0.0 y.h=2.1 + doping gauss n.type conc=4e17 x.l=-0.1 x.h=1.0 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss n.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + doping gauss n.type conc=4e17 x.l=2.0 x.h=3.1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss n.type conc=1e20 x.l=2.05 x.h=3.1 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + + contact num=2 workf=4.10 + models concmob fieldmob surfmob srh auger conctau bgn ^aval + method ac=direct itlim=10 onec .MODEL M_PMOS_1 numos + title 1.0um PMOS Device + + x.mesh w=0.9 h.e=0.020 h.m=0.2 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=0.4 h.s=0.005 h.m=0.1 r=2.0 + x.mesh w=0.4 h.e=0.005 h.m=0.1 r=2.0 + x.mesh w=0.2 h.e=0.005 h.m=0.02 r=2.0 + x.mesh w=0.9 h.s=0.020 h.m=0.2 r=2.0 + + y.mesh l=-.0200 n=1 + y.mesh l=0.0 n=6 + y.mesh w=0.15 h.s=0.0001 h.max=.02 r=2.0 + y.mesh w=0.45 h.s=0.02 h.max=0.2 r=2.0 + y.mesh w=1.40 h.s=0.20 h.max=0.4 r=2.0 + + region num=1 material=1 y.h=0.0 + region num=2 material=2 y.l=0.0 + interface dom=2 nei=1 x.l=1.0 x.h=2.0 layer.width=0.0 + material num=1 oxide + material num=2 silicon + + elec num=1 x.l=2.5 x.h=3.1 y.l=0.0 y.h=0.0 + elec num=2 x.l=1.0 x.h=2.0 iy.l=1 iy.h=1 + elec num=3 x.l=-0.1 x.h=0.5 y.l=0.0 y.h=0.0 + elec num=4 x.l=-0.1 x.h=3.1 y.l=2.0 y.h=2.0 + + doping gauss n.type conc=1.0e17 x.l=-0.1 x.h=3.1 y.l=0.0 + + char.l=0.30 + doping unif n.type conc=5.0e15 x.l=-0.1 x.h=3.1 y.l=0.0 y.h=2.1 + doping gauss p.type conc=4e17 x.l=-0.1 x.h=1.0 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss p.type conc=1e20 x.l=-0.1 x.h=0.95 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + doping gauss p.type conc=4e17 x.l=2.0 x.h=3.1 y.l=0.0 y.h=0.0 + + char.l=0.16 lat.rotate ratio=0.65 + doping gauss p.type conc=1e20 x.l=2.05 x.h=3.1 y.l=0.0 y.h=0.08 + + char.l=0.03 lat.rotate ratio=0.65 + + contact num=2 workf=5.29 + models concmob fieldmob surfmob srh auger conctau bgn ^aval + method ac=direct itlim=10 onec tmpk8ny_4pz/examples/cider/resistor/0000755000175000017500000000000013546075722017736 5ustar carstencarstentmpk8ny_4pz/examples/cider/resistor/sires.cir0000644000175000017500000000105313546075722021561 0ustar carstencarstenSilicon Resistor * This simulation demonstrates the effects of velocity saturation at * high lateral electric fields. VPP 1 0 10v PWL 0s 0.0v 100s 10v VNN 2 0 0.0v D1 1 2 M_RES AREA=1 .MODEL M_RES numd level=1 + options resistor defa=1p + x.mesh loc=0.0 num=1 + x.mesh loc=1.0 num=101 + domain num=1 material=1 + material num=1 silicon + doping unif n.type conc=2.5e16 + models bgn srh conctau auger concmob fieldmob + method ac=direct *.OP .DC VPP 0.0v 10.01v 0.1v *.TRAN 1s 100.001s 0s 0.2s .PRINT I(VPP) .OPTION ACCT BYPASS=1 RELTOL=1e-12 .END tmpk8ny_4pz/examples/cider/resistor/gaasres.cir0000644000175000017500000000142213546075722022061 0ustar carstencarstenGallium Arsenide Resistor * This transient simulation demonstrates the effects of velocity overshoot * and velocity saturation at high lateral electric fields. * Do not try to do DC analysis of this resistor. It will not converge * because of the peculiar characteristics of the GaAs velocity-field * relation. In some cases, problems can arise in transient simulation * as well. VPP 1 0 1v PWL 0s 0.0v 10s 1v VNN 2 0 0.0v D1 1 2 M_RES AREA=1 .MODEL M_RES numd level=1 + options resistor defa=1p + x.mesh loc=0.0 num=1 + x.mesh loc=1.0 num=101 + domain num=1 material=1 + material num=1 gaas + doping unif n.type conc=2.5e16 + models fieldmob srh auger conctau + method ac=direct *.OP *.DC VPP 0.0v 10.01v 0.1v .TRAN 1s 10.001s 0s 0.1s .PRINT I(VPP) .OPTION ACCT BYPASS=1 .END tmpk8ny_4pz/examples/cider/jfet/0000755000175000017500000000000013546075722017014 5ustar carstencarstentmpk8ny_4pz/examples/cider/jfet/jfet.cir0000644000175000017500000000155113546075722020445 0ustar carstencarstenTwo-dimensional Junction Field-Effect Transistor (JFET) VDD 1 0 0.5V VGG 2 0 -1.0v AC 1V VSS 3 0 0.0V QJ1 1 2 3 M_NJF AREA=1 .MODEL M_NJF NBJT LEVEL=2 + options jfet defw=10.0um + output dc.debug phin phip equ.psi vac.psi + x.mesh w=0.2 h.e=0.001 r=1.8 + x.mesh w=0.8 h.s=0.001 h.m=0.1 r=2.0 + x.mesh w=0.8 h.e=0.001 h.m=0.1 r=2.0 + x.mesh w=0.2 h.s=0.001 r=1.8 + y.mesh w=0.2 h.e=0.01 r=1.8 + y.mesh w=0.8 h.s=0.01 h.m=0.1 r=1.8 + + domain num=1 mat=1 + material num=1 silicon + + elec num=1 x.l=0.0 x.h=0.0 y.l=0.0 y.h=1.0 + elec num=2 x.l=0.5 x.h=1.5 y.l=0.0 y.h=0.0 + elec num=3 x.l=2.0 x.h=2.0 y.l=0.0 y.h=1.0 + + doping unif n.type conc=3.0e15 + doping unif p.type conc=2.0e17 x.l=0.2 x.h=1.8 y.h=0.2 + + models bgn srh auger conctau concmob fieldmob ^aval .option acct bypass=1 temp=27 *.op .dc vgg 0.0 -2.0001 -0.1 *.ac dec 10 1k 100g .print i(vnn) .end tmpk8ny_4pz/examples/measure/0000755000175000017500000000000013546075722016437 5ustar carstencarstentmpk8ny_4pz/examples/measure/rc-meas-ac.sp0000644000175000017500000000243413546075722020716 0ustar carstencarstenRC band pass example circuit * This netlist demonstrates the following: * global nodes (vdd, gnd) * .measure statements for delay and an example ternary operator * You can run the example circuit with this command: * * ngspice rc-meas-ac.sp * global nodes .global vdd gnd * autostop -- stop simulation early if .measure statements done *.option autostop vin in gnd dc 0 ac 1 R1 in mid1 1k c1 mid1 gnd 1n C2 mid1 out 500p R2 out gnd 1k .ac DEC 10 1k 10MEG .meas ac vout_at FIND v(out) AT=1MEG .meas ac vout_atr FIND vr(out) AT=1MEG .meas ac vout_ati FIND vi(out) AT=1MEG .meas ac vout_atm FIND vm(out) AT=1MEG .meas ac vout_atp FIND vp(out) AT=1MEG .meas ac vout_atd FIND vdb(out) AT=1MEG .meas ac vout_max max v(out) from=1k to=10MEG .meas ac freq_at when v(out)=0.1 .meas ac vout_diff trig v(out) val=0.1 rise=1 targ v(out) val=0.1 fall=1 .meas ac fixed_diff trig AT = 10k targ v(out) val=0.1 rise=1 .meas ac vout_avg avg v(out) from=10k to=1MEG .meas ac vout_integ integ v(out) from=20k to=500k .meas ac freq_at2 when v(out)=0.1 fall=LAST .meas ac bw_chk param='(vout_diff < 100k) ? 1 : 0' .meas ac bw_chk2 param='(vout_diff > 500k) ? 1 : 0' .meas ac vout_rms rms v(out) from=10 to=1G .control run *rusage all plot v(out) plot ph(v(out)) plot mag(v(out)) plot db(v(out)) .endc .end tmpk8ny_4pz/examples/measure/simple-meas-tran.sp0000644000175000017500000000434413546075722022166 0ustar carstencarstenFile: simple-meas-tran.sp * Simple .measurement examples * transient simulation of two sine signals with different frequencies vac1 1 0 DC 0 sin(0 1 1k 0 0) R1 1 0 100k vac2 2 0 DC 0 sin(0 1.2 0.9k 0 0) .tran 10u 5m * .measure tran tdiff TRIG v(1) VAL=0.5 RISE=1 TARG v(1) VAL=0.5 RISE=2 .measure tran tdiff TRIG v(1) VAL=0.5 RISE=1 TARG v(1) VAL=0.5 RISE=3 .measure tran tdiff TRIG v(1) VAL=0.5 RISE=1 TARG v(1) VAL=0.5 FALL=1 .measure tran tdiff TRIG v(1) VAL=0 FALL=3 TARG v(2) VAL=0 FALL=3 .measure tran tdiff TRIG v(1) VAL=-0.6 CROSS=1 TARG v(2) VAL=-0.8 CROSS=1 .measure tran tdiff TRIG AT=1m TARG v(2) VAL=-0.8 CROSS=3 .measure tran teval WHEN v(2)=0.7 CROSS=LAST .measure tran teval WHEN v(2)=v(1) FALL=LAST .measure tran teval WHEN v(1)=v(2) CROSS=LAST .measure tran yeval FIND v(2) WHEN v(1)=0.2 FALL=2 .measure tran yeval FIND v(2) AT=2m .measure tran ymax MAX v(2) from=2m to=3m .measure tran tymax MAX_AT v(2) from=2m to=3m .measure tran ypp PP v(1) from=2m to=4m .measure tran yrms RMS v(1) from=2m to=3.5m .measure tran yavg AVG v(1) from=2m to=4m .measure tran yint INTEG v(2) from=2m to=3m .param fval=5 .measure tran yadd param='fval + 7' .param vout_diff=50k .meas tran bw_chk param='(vout_diff < 100k) ? 1 : 0' .measure tran vtest find par('v(2)*v(1)') AT=2.3m * .control run plot v(1) v(2) gnuplot ttt i(vac1) meas tran tdiff TRIG v(1) VAL=0.5 RISE=1 TARG v(1) VAL=0.5 RISE=2 meas tran tdiff TRIG v(1) VAL=0.5 RISE=1 TARG v(1) VAL=0.5 RISE=3 meas tran tdiff TRIG v(1) VAL=0.5 RISE=1 TARG v(1) VAL=0.5 FALL=1 meas tran tdiff TRIG v(1) VAL=0 FALL=3 TARG v(2) VAL=0 FALL=3 meas tran tdiff TRIG v(1) VAL=-0.6 CROSS=1 TARG v(2) VAL=-0.8 CROSS=1 meas tran tdiff TRIG AT=1m TARG v(2) VAL=-0.8 CROSS=3 meas tran teval WHEN v(2)=0.7 CROSS=LAST meas tran teval WHEN v(2)=v(1) FALL=LAST meas tran teval WHEN v(1)=v(2) CROSS=LAST meas tran yeval FIND v(2) WHEN v(1)=0.2 FALL=2 meas tran yeval FIND v(2) AT=2m meas tran ymax MAX v(2) from=2m to=3m meas tran tymax MAX_AT v(2) from=2m to=3m meas tran ypp PP v(1) from=2m to=4m meas tran yrms RMS v(1) from=2m to=3.5m meas tran yavg AVG v(1) from=2m to=4m meas tran yint INTEG v(2) from=2m to=3m meas tran ymax MAX v(2) from=2m to=3m meas tran tmax WHEN v(2)=YMAX from=1m to=2m $ from..to.. not recognized! .endc .end tmpk8ny_4pz/examples/measure/inv-meas-tran-auto.sp0000644000175000017500000000601513546075722022434 0ustar carstencarstenInverter example circuit * This netlist demonstrates the following: * global nodes (vdd, gnd) * autostop (.tran defines simulation end as 4ns but simulation stops at * 142.5ps when .measure statements are evaluated) * scale (all device units are in microns) * model binning (look in device.values file for which bin chosen) * * m.x1.mn: * model = nch.2 * * m.x1.mp: * model = pch.2 * * parameters * parameterized subckt * vsrc with repeat * .measure statements for delay and an example ternary operator * device listing and parameter listing * You can run the example circuit with this command: * * ngspice inverter3.sp * global nodes .global vdd gnd * autostop -- stop simulation early if .measure statements done * scale -- define scale factor for mosfet device parameters (l,w,area,perimeter) .option autostop .option scale = 1e-6 * model binning .model nch.1 nmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) .model nch.2 nmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=10u wmax=100u ) .model pch.1 pmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) .model pch.2 pmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=10u wmax=100u ) * parameters .param vp = 1.0v .param lmin = 0.10 .param wmin = 0.12 .param plmin = 'lmin' .param nlmin = 'lmin' .param wpmin = 'wmin' .param wnmin = 'wmin' .param drise = 400ps .param dfall = 100ps .param trise = 100ps .param tfall = 100ps .param period = 1ns .param skew_meas = 'vp/2' * parameterized subckt .subckt inv in out pw='wpmin' pl='plmin' nw='wnmin' nl='nlmin' mp out in vdd vdd pch w='pw' l='pl' mn out in gnd gnd nch w='nw' l='nl' .ends v0 vdd gnd 'vp' * vsrc with repeat v1 in gnd pwl + 0ns 'vp' + 'dfall-0.8*tfall' 'vp' + 'dfall-0.4*tfall' '0.9*vp' + 'dfall+0.4*tfall' '0.1*vp' + 'dfall+0.8*tfall' 0v + 'drise-0.8*trise' 0v + 'drise-0.4*trise' '0.1*vp' + 'drise+0.4*trise' '0.9*vp' + 'drise+0.8*trise' 'vp' + 'period+dfall-0.8*tfall' 'vp' + r='dfall-0.8*tfall' x1 in out inv pw=60 nw=20 c1 out gnd 220fF .tran 1ps 4ns .meas tran inv_delay trig v(in) val='vp/2' fall=1 targ v(out) val='vp/2' rise=1 .meas tran inv_delay2 trig v(in) val='vp/2' td=1n fall=1 targ v(out) val='vp/2' rise=1 .meas tran test_data1 trig AT = 1n targ v(out) val='vp/2' rise=3 .meas tran out_slew trig v(out) val='0.2*vp' rise=2 targ v(out) val='0.8*vp' rise=2 .meas tran delay_chk param='(inv_delay < 100ps) ? 1 : 0' .meas tran skew when v(out)=0.6 .meas tran skew2 when v(out)=skew_meas .meas tran skew3 when v(out)=skew_meas fall=2 .meas tran skew4 when v(out)=skew_meas fall=LAST .meas tran skew5 FIND v(out) AT=2n *.measure tran v0_min min i(v0) from='dfall' to='dfall+period' *.measure tran v0_avg avg i(v0) from='dfall' to='dfall+period' *.measure tran v0_integ integ i(v0) from='dfall' to='dfall+period' *.measure tran v0_rms rms i(v0) from='dfall' to='dfall+period' .control run rusage all plot v(in) v(out) .endc .end tmpk8ny_4pz/examples/measure/inv-meas-tran-control.sp0000644000175000017500000000624413546075722023150 0ustar carstencarstenInverter example circuit * This netlist demonstrates the following: * global nodes (vdd, gnd) * autostop (.tran defines simulation end as 4ns but simulation stops at * 142.5ps when .measure statements are evaluated) * scale (all device units are in microns) * model binning (look in device.values file for which bin chosen) * * m.x1.mn: * model = nch.2 * * m.x1.mp: * model = pch.2 * * parameters * parameterized subckt * vsrc with repeat * .measure statements for delay and an example ternary operator * device listing and parameter listing * You can run the example circuit with this command: * * ngspice inverter3.sp * global nodes .global vdd gnd * autostop -- stop simulation early if .measure statements done * scale -- define scale factor for mosfet device parameters (l,w,area,perimeter) *.option autostop .option scale = 1e-6 * model binning .model nch.1 nmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) .model nch.2 nmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=10u wmax=100u ) .model pch.1 pmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) .model pch.2 pmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=10u wmax=100u ) * parameters .param vp = 1.0v .param lmin = 0.10 .param wmin = 0.12 .param plmin = 'lmin' .param nlmin = 'lmin' .param wpmin = 'wmin' .param wnmin = 'wmin' .param drise = 400ps .param dfall = 100ps .param trise = 100ps .param tfall = 100ps .param period = 1ns .param skew_meas = 'vp/2' * parameterized subckt .subckt inv in out pw='wpmin' pl='plmin' nw='wnmin' nl='nlmin' mp out in vdd vdd pch w='pw' l='pl' mn out in gnd gnd nch w='nw' l='nl' .ends v0 vdd gnd 'vp' * vsrc with repeat v1 in gnd pwl + 0ns 'vp' + 'dfall-0.8*tfall' 'vp' + 'dfall-0.4*tfall' '0.9*vp' + 'dfall+0.4*tfall' '0.1*vp' + 'dfall+0.8*tfall' 0v + 'drise-0.8*trise' 0v + 'drise-0.4*trise' '0.1*vp' + 'drise+0.4*trise' '0.9*vp' + 'drise+0.8*trise' 'vp' + 'period+dfall-0.8*tfall' 'vp' + r='dfall-0.8*tfall' x1 in out inv pw=60 nw=20 c1 out gnd 220fF .control tran 1ps 4ns meas tran inv_delay trig v(in) val=0.5 fall=1 targ v(out) val=0.5 rise=1 meas tran inv_delay2 trig v(in) val=0.5 td=1n fall=1 targ v(out) val=0.5 rise=1 meas tran test_data1 trig AT = 1n targ v(out) val=0.5 rise=3 meas tran out_slew trig v(out) val=0.2 rise=2 targ v(out) val=0.8 rise=2 *.meas tran delay_chk param='(inv_delay < 100ps) ? 1 : 0' if ( inv_delay < 100ps ) let delay_chk = 1 else let delay_chk = 0 end echo delay_chk = "$&delay_chk" meas tran skew when v(out)=0.6 let skew_meas = 0.5 meas tran skew2 when v(out)=skew_meas meas tran skew3 when v(out)=skew_meas fall=2 meas tran skew4 when v(out)=skew_meas fall=LAST meas tran skew5 FIND v(out) AT=2n let dfall = 100p let period = 1n let delta = dfall+period meas tran v0_min min i(v0) from=dfall to=delta meas tran i_v0_min min_at i(v0) from=dfall to=delta meas tran v0_avg avg i(v0) from = dfall to = delta meas tran v0_integ integ i(v0) from=dfall to=delta meas tran v0_rms rms i(v0) from=dfall to=delta rusage all plot v(in) v(out) .endc .end tmpk8ny_4pz/examples/measure/inv-meas-tran.sp0000644000175000017500000000607713546075722021476 0ustar carstencarstenInverter example circuit * This netlist demonstrates the following: * global nodes (vdd, gnd) * autostop (.tran defines simulation end as 4ns but simulation stops at * 142.5ps when .measure statements are evaluated) * scale (all device units are in microns) * model binning (look in device.values file for which bin chosen) * * m.x1.mn: * model = nch.2 * * m.x1.mp: * model = pch.2 * * parameters * parameterized subckt * vsrc with repeat * .measure statements for delay and an example ternary operator * device listing and parameter listing * You can run the example circuit with this command: * * ngspice inverter3.sp * global nodes .global vdd gnd * autostop -- stop simulation early if .measure statements done * scale -- define scale factor for mosfet device parameters (l,w,area,perimeter) *.option autostop .option scale = 1e-6 * model binning .model nch.1 nmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) .model nch.2 nmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=10u wmax=100u ) .model pch.1 pmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) .model pch.2 pmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=10u wmax=100u ) * parameters .param vp = 1.0v .param lmin = 0.10 .param wmin = 0.12 .param plmin = 'lmin' .param nlmin = 'lmin' .param wpmin = 'wmin' .param wnmin = 'wmin' .param drise = 400ps .param dfall = 100ps .param trise = 100ps .param tfall = 100ps .param period = 1ns .param skew_meas = 'vp/2' * parameterized subckt .subckt inv in out pw='wpmin' pl='plmin' nw='wnmin' nl='nlmin' mp out in vdd vdd pch w='pw' l='pl' mn out in gnd gnd nch w='nw' l='nl' .ends v0 vdd gnd 'vp' * vsrc with repeat v1 in gnd pwl + 0ns 'vp' + 'dfall-0.8*tfall' 'vp' + 'dfall-0.4*tfall' '0.9*vp' + 'dfall+0.4*tfall' '0.1*vp' + 'dfall+0.8*tfall' 0v + 'drise-0.8*trise' 0v + 'drise-0.4*trise' '0.1*vp' + 'drise+0.4*trise' '0.9*vp' + 'drise+0.8*trise' 'vp' + 'period+dfall-0.8*tfall' 'vp' + r='dfall-0.8*tfall' x1 in out inv pw=60 nw=20 c1 out gnd 220fF .tran 1ps 4ns .meas tran inv_delay trig v(in) val='vp/2' fall=1 targ v(out) val='vp/2' rise=1 .meas tran inv_delay2 trig v(in) val='vp/2' td=1n fall=1 targ v(out) val='vp/2' rise=1 .meas tran test_data1 trig AT = 1n targ v(out) val='vp/2' rise=3 .meas tran out_slew trig v(out) val='0.2*vp' rise=2 targ v(out) val='0.8*vp' rise=2 .meas tran delay_chk param='(inv_delay < 100ps) ? 1 : 0' .meas tran skew when v(out)=0.6 .meas tran skew2 when v(out)=skew_meas .meas tran skew3 when v(out)=skew_meas fall=2 .meas tran skew4 when v(out)=skew_meas fall=LAST .meas tran skew5 FIND v(out) AT=2n .meas tran v0_min min i(v0) from='dfall' to='dfall+period' .meas tran i_v0_min min_at i(v0) from='dfall' to='dfall+period' .meas tran v0_avg avg i(v0) from='dfall' to='dfall+period' .meas tran v0_integ integ i(v0) from='dfall' to='dfall+period' .meas tran v0_rms rms i(v0) from='dfall' to='dfall+period' .control run rusage all plot v(in) v(out) .endc .end tmpk8ny_4pz/examples/measure/mos-meas-dc.sp0000644000175000017500000000152013546075722021106 0ustar carstencarsten***** Single NMOS Transistor .measure (Id-Vd) *** m1 d g s b nch L=0.6u W=10.0u vgs g 0 3.5 vds d 0 3.5 vs s 0 dc 0 vb b 0 dc 0 .dc vds 0 3.5 0.05 vgs 0.5 3.5 0.5 .print dc v(1) i(vs) * model binning .model nch.1 nmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) .model nch.2 nmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=10u wmax=100u ) .model pch.1 pmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) .model pch.2 pmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=10u wmax=100u ) .meas dc is_at FIND i(vs) AT=1 .meas dc is_max max i(vs) from=0 to=3.5 .meas dc vds_at2 when i(vs)=10m .meas dc vd_diff1 trig i(vs) val=0.005 rise=1 targ i(vs) val=0.01 rise=1 .meas dc vd_diff2 trig i(vs) val=0.005 rise=1 targ i(vs) val=0.01 rise=2 .control run *rusage all plot i(vs) .endc .end tmpk8ny_4pz/examples/measure/rc-meas-ac-control.sp0000644000175000017500000000271113546075722022372 0ustar carstencarstenRC band pass example circuit * This netlist demonstrates the following: * global nodes (vdd, gnd) * .measure statements for delay and an example ternary operator * You can run the example circuit with this command: * * ngspice rc-meas-ac.sp * global nodes .global vdd gnd * autostop -- stop simulation early if .measure statements done *.option autostop vin in gnd dc 0 ac 1 R1 in mid1 1k c1 mid1 gnd 1n C2 mid1 out 500p R2 out gnd 1k .control ac DEC 10 1k 10MEG meas ac vout_at FIND v(out) AT=1MEG meas ac vout_atr FIND vr(out) AT=1MEG meas ac vout_ati FIND vi(out) AT=1MEG meas ac vout_atm FIND vm(out) AT=1MEG meas ac vout_atp FIND vp(out) AT=1MEG meas ac vout_atd FIND vdb(out) AT=1MEG meas ac vout_max max v(out) from=1k to=10MEG meas ac freq_at when v(out)=0.1 meas ac vout_diff trig v(out) val=0.1 rise=1 targ v(out) val=0.1 fall=1 meas ac fixed_diff trig AT = 10k targ v(out) val=0.1 rise=1 meas ac vout_avg avg v(out) from=10k to=1MEG meas ac vout_integ integ v(out) from=20k to=500k meas ac freq_at2 when v(out)=0.1 fall=LAST *meas ac bw_chk param='(vout_diff < 100k) ? 1 : 0' if (vout_diff < 100k) let bw_chk = 1 else let bw_chk = 0 end echo bw_chk = "$&bw_chk" *meas ac bw_chk2 param='(vout_diff > 500k) ? 1 : 0' if (vout_diff > 500k) let bw_chk2 = 1 else let bw_chk2 = 0 end echo bw_chk2 = "$&bw_chk2" meas ac vout_rms rms v(out) from=10 to=1G *rusage all plot v(out) plot ph(v(out)) plot mag(v(out)) plot db(v(out)) .endc .end tmpk8ny_4pz/examples/measure/mos-meas-dc-control.sp0000644000175000017500000000314413546075722022570 0ustar carstencarsten***** Single NMOS Transistor .measure (Id-Vd) *** * Altering device witdth leads to select new model due to binning limits. * New model has artificially thick gate oxide (changed from default 3n to 4n) * to demonstrate the effect. m1 d g s b nch L=0.6u W=9.99u ; W is slightly below binning limit vgs g 0 3.5 vds d 0 3.5 vs s 0 dc 0 vb b 0 dc 0 * model binning * uses default parameters, except toxe .model nch.1 nmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u toxe=3n ) .model nch.2 nmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=10u wmax=100u toxe=4n) .control dc vds 0 3.5 0.05 vgs 3.5 0.5 -0.5 meas dc is_at FIND i(vs) AT=1 meas dc is_max max i(vs) meas dc vds_at2 when i(vs)=10m * starting with branches in descending order of vgs * trig ist the first branch which crosses 5mA * Targ is the first branch crossing 10mA meas dc vd_diff1 trig i(vs) val=0.005 rise=1 targ i(vs) val=0.01 rise=1 * trig ist the first branch which crosses 5mA * Targ is the second branch crossing 10mA meas dc vd_diff2 trig i(vs) val=0.005 rise=2 targ i(vs) val=0.01 rise=2 alter @m1[w]=10.01u ; W is slightly above binning limit dc vds 0 3.5 0.05 vgs 3.5 0.5 -0.5 meas dc is_at FIND i(vs) AT=1 meas dc is_max max i(vs) meas dc vds_at2 when i(vs)=10m meas dc vd_diff1 trig i(vs) val=0.005 rise=1 targ i(vs) val=0.01 rise=1 * there is only one branch crossing 10mA, so this second meas fails with targ out of interval echo echo The next one will fail (no two branches crossing 10 mA): meas dc vd_diff2 trig i(vs) val=0.005 rise=2 targ i(vs) val=0.01 rise=2 *rusage all plot dc1.i(vs) i(vs) .endc .end tmpk8ny_4pz/examples/measure/func_cap.sp0000644000175000017500000000037413546075722020565 0ustar carstencarsten* func_cap.sp .func icap_calc(A,B,C,D) '2*A*sqrt(B*C*D)' .param cap_val = 'max(icap_calc(1,2,3,4))' VDD 1 0 DC 1 C1 1 0 'cap_val' .measure tran capacitance param='cap_val' .measure tran capac2 param='max(icap_calc(1,2,3,4))' .tran 1ps 100ps .end tmpk8ny_4pz/examples/TransImpedanceAmp/0000755000175000017500000000000013546075722020331 5ustar carstencarstentmpk8ny_4pz/examples/TransImpedanceAmp/output.net0000644000175000017500000002317613546075722022412 0ustar carstencarsten********************************************************* * Spice file generated by gnetlist * * spice-SDB version 3.30.2003 by SDB -- * * provides advanced spice netlisting capability. * * Documentation at http://www.brorson.com/gEDA/SPICE/ * ********************************************************* * Batch command * ngspice -b -o output.log output.net * will generate a nice printer plot in output.log * (remember the old times !) * Interactive commands for usage: * run * plot vout1 vout2 * Command stuff .options gmin=1e-9 .options method=gear .options abstol=1e-11 * .ac dec 10 10MegHz 10 Ghz * Remainder of file R112 0 6 1Meg R111 0 8 10Meg R110 0 7 1Meg Rref2in 11 VU780out 25000 Rref2fb VU2bias+ 11 33 C201 0 9 1uF C202 10 0 1uF XU200 0 11 10 9 VU2bias+ OP177A R202 10 +5V 22 R201 -5V 9 22 Rref1in VU100in- VU780out 9130 Rref1fb VU1bias+ VU100in- 33 XU101 +5V 7 0 6 VU780out 8 AD780A * AD780A SPICE Macromodel 5/93, Rev. A * AAG / PMI * * This version of the AD780 voltage reference model simulates the worst case * parameters of the 'A' grade. The worst case parameters used * correspond to those in the data sheet. * * Copyright 1993 by Analog Devices, Inc. * * Refer to "README.DOC" file for License Statement. Use of this model * indicates your acceptance with the terms and provisions in the License Statement. * * NODE NUMBERS * VIN * | TEMP * | | GND * | | | TRIM * | | | | VOUT * | | | | | RANGE * | | | | | | .SUBCKT AD780A 2 3 4 5 6 8 * * BANDGAP REFERENCE * I1 4 40 DC 1.21174E-3 R1 40 4 1E3 TC=7E-6 EN 10 40 42 0 1 G1 4 10 2 4 4.85668E-9 F1 4 10 POLY(2) VS1 VS2 (0,2.42834E-5,3.8E-5) Q1 2 10 11 QT I2 11 4 DC 12.84E-6 R2 11 3 1E3 I3 3 4 DC 0 * * NOISE VOLTAGE GENERATOR * VN1 41 0 DC 2 DN1 41 42 DEN DN2 42 43 DEN VN2 0 43 DC 2 * * INTERNAL OP AMP * G2 4 12 10 20 1.93522E-4 R3 12 4 2.5837E9 C1 12 4 6.8444E-11 D1 12 13 DX V1 2 13 DC 1.2 * * SECONDARY POLE @ 508 kHz * G3 4 14 12 4 1E-6 R4 14 4 1E6 C2 14 4 3.1831E-13 * * OUTPUT STAGE * ISY 2 4 6.8282E-4 FSY 2 4 V1 -1 RSY 2 4 500E3 * G4 4 15 14 4 25E-6 R5 15 4 40E3 Q2 4 15 16 QP I4 2 16 DC 100E-6 Q3 4 16 18 QP R6 18 23 15 R7 16 21 150E3 R8 2 17 34.6 Q4 17 16 19 QN R9 21 20 6.46E3 R10 20 4 6.1E3 R11 20 5 53E3 R12 20 8 15.6E3 I5 5 4 DC 0 I6 8 4 DC 0 VS1 21 19 DC 0 VS2 23 21 DC 0 L1 21 6 1E-7 * * OUTPUT CURRENT LIMIT * FSC 15 4 VSC 1 VSC 2 22 DC 0 QSC 22 2 17 QN * .MODEL QT NPN(level=1 IS=1.68E-16 BF=1E4) .MODEL QN NPN(level=1 IS=1E-15 BF=1E3) .MODEL QP PNP(level=1 IS=1E-15 BF=1E3) .MODEL DX D(IS=1E-15) .MODEL DEN D(IS=1E-12 RS=2.425E+05 AF=1 KF=6.969E-16) .ENDS AD780A C101 0 U100V- 1uF C102 U100V+ 0 1uF XU100 0 VU100in- U100V+ U100V- VU1bias+ OP177A * OP177A SPICE Macro-model 12/90, Rev. B * JCB / PMI * * Revision History: * REV. B * Re-ordered subcircuit call out nodes to put the * output node last. * Changed Ios from 1E-9 to 0.5E-9 * Added F1 and F2 to fix short circuit current limit. * * * This version of the OP-177 model simulates the worst case * parameters of the 'A' grade. The worst case parameters * used correspond to those in the data book. * * * Copyright 1990 by Analog Devices, Inc. * * Refer to "README.DOC" file for License Statement. Use of this model * indicates your acceptance with the terms and provisions in the License Statement. * * Node assignments * non-inverting input * | inverting input * | | positive supply * | | | negative supply * | | | | output * | | | | | .SUBCKT OP177A 1 2 99 50 39 * * INPUT STAGE & POLE AT 6 MHZ * R1 2 3 5E11 R2 1 3 5E11 R3 5 97 0.0606 R4 6 97 0.0606 CIN 1 2 4E-12 C2 5 6 218.9E-9 I1 4 51 1 IOS 1 2 0.5E-9 EOS 9 10 POLY(1) 30 33 10E-6 1 Q1 5 2 7 QX Q2 6 9 8 QX R5 7 4 0.009 R6 8 4 0.009 D1 2 1 DX D2 1 2 DX EN 10 1 12 0 1 GN1 0 2 15 0 1 GN2 0 1 18 0 1 * EREF 98 0 33 0 1 EPLUS 97 0 99 0 1 ENEG 51 0 50 0 1 * * VOLTAGE NOISE SOURCE WITH FLICKER NOISE * DN1 11 12 DEN DN2 12 13 DEN VN1 11 0 DC 2 VN2 0 13 DC 2 * * CURRENT NOISE SOURCE WITH FLICKER NOISE * DN3 14 15 DIN DN4 15 16 DIN VN3 14 0 DC 2 VN4 0 16 DC 2 * * SECOND CURRENT NOISE SOURCE * DN5 17 18 DIN DN6 18 19 DIN VN5 17 0 DC 2 VN6 0 19 DC 2 * * FIRST GAIN STAGE * R7 20 98 1 G1 98 20 5 6 119.8 D3 20 21 DX D4 22 20 DX E1 97 21 POLY(1) 97 33 -2.4 1 E2 22 51 POLY(1) 33 51 -2.4 1 * * GAIN STAGE & DOMINANT POLE AT 0.127 HZ * R8 23 98 1.253E9 C3 23 98 1E-9 G2 98 23 20 33 33.3E-6 V1 97 24 1.8 V2 25 51 1.8 D5 23 24 DX D6 25 23 DX * * NEGATIVE ZERO AT -4MHZ * R9 26 27 1 C4 26 27 -39.75E-9 R10 27 98 1E-6 E3 26 98 23 33 1E6 * * COMMON-MODE GAIN NETWORK WITH ZERO AT 63 HZ * R13 30 31 1 L2 31 98 2.52E-3 G4 98 30 3 33 0.316E-6 D7 30 97 DX D8 51 30 DX * * POLE AT 2 MHZ * R14 32 98 1 C5 32 98 79.5E-9 G5 98 32 27 33 1 * * OUTPUT STAGE * R15 33 97 1 R16 33 51 1 GSY 99 50 POLY(1) 99 50 0.725E-3 0.0425E-3 F1 34 0 V3 1 F2 0 34 V4 1 R17 34 99 400 R18 34 50 400 L3 34 39 2E-7 G6 37 50 32 34 2.5E-3 G7 38 50 34 32 2.5E-3 G8 34 99 99 32 2.5E-3 G9 50 34 32 50 2.5E-3 V3 35 34 6.8 V4 34 36 4.4 D9 32 35 DX D10 36 32 DX D11 99 37 DX D12 99 38 DX D13 50 37 DY D14 50 38 DY * * MODELS USED * .MODEL QX NPN(level=1 BF=333.3E6) .MODEL DX D(IS=1E-15) .MODEL DY D(IS=1E-15 BV=50) .MODEL DEN D(IS=1E-12, RS=14.61K, KF=2E-17, AF=1) .MODEL DIN D(IS=1E-12, RS=7.55E-6, KF=3E-15, AF=1) .ENDS R102 U100V+ +5V 22 R101 -5V U100V- 22 R98 0 VU2bias+ 1K R99 0 VU1bias+ 1K C95 VU2bias+ 0 100pF * C96 0 5 1uF * C97 4 0 1uF Cphotodiode 0 Vinput 0.9pF C99 0 VU1bias+ 100pF R25 Vout2 2 250 C24 Vout1 VU1in- 1pF R24 VU1in- 1 150 * C21 0 3 1uF Cc Vout2 VU2in- 1pF Rc Vout1 VU2in- 10 RL 0 Vout2 50 .TEMP 0 25 50 75 100 C12 2 0 1.5pF C11 0 V2- .01uF C10 V2+ 0 .01uF R13 +5V V2+ 5 R12 V2- -5V 5 R26 2 VU2in- 150 R11 Vout2 VU2in- 180 XU2 VU2bias+ VU2in- V2+ V2- Vout2 AD8009an XU1 VU1bias+ VU1in- V1+ V1- Vout1 AD8009an ***** AD8009 SPICE model Rev B SMR/ADI 8-21-97 * Copyright 1997 by Analog Devices, Inc. * Refer to "README.DOC" file for License Statement. Use of this model * indicates your acceptance with the terms and provisions in the License Statement. * rev B of this model corrects a problem in the output stage that would not * correctly reflect the output current to the voltage supplies * This model will give typical performance characteristics * for the following parameters; * closed loop gain and phase vs bandwidth * output current and voltage limiting * offset voltage (is static, will not vary with vcm) * ibias (again, is static, will not vary with vcm) * slew rate and step response performance * (slew rate is based on 10-90% of step response) * current on output will be reflected to the supplies * vnoise, referred to the input * inoise, referred to the input * distortion is not characterized * Node assignments * non-inverting input * | inverting input * | | positive supply * | | | negative supply * | | | | output * | | | | | .SUBCKT AD8009an 1 2 99 50 28 * input stage * q1 50 3 5 qp1 q2 99 5 4 qn1 q3 99 3 6 qn2 q4 50 6 4 qp2 i1 99 5 1.625e-3 i2 6 50 1.625e-3 cin1 1 98 2.6e-12 cin2 2 98 1e-12 v1 4 2 0 * input error sources * eos 3 1 poly(1) 20 98 2e-3 1 fbn 2 98 poly(1) vnoise3 50e-6 1e-3 fbp 1 98 poly(1) vnoise3 50e-6 1e-3 * slew limiting stage * fsl 98 16 v1 1 dsl1 98 16 d1 dsl2 16 98 d1 dsl3 16 17 d1 dsl4 17 16 d1 rsl 17 18 0.22 vsl 18 98 0 * gain stage * f1 98 7 vsl 2 rgain 7 98 2.5e5 cgain 7 98 1.25e-12 dcl1 7 8 d1 dcl2 9 7 d1 vcl1 99 8 1.83 vcl2 9 50 1.83 gcm 98 7 poly(2) 98 0 30 0 0 1e-5 1e-5 * second pole * epole 14 98 7 98 1 rpole 14 15 1 cpole 15 98 2e-10 * reference stage * eref 98 0 poly(2) 99 0 50 0 0 0.5 0.5 ecmref 30 0 poly(2) 1 0 2 0 0 0.5 0.5 * vnoise stage * rnoise1 19 98 4.6e-3 vnoise1 19 98 0 vnoise2 21 98 0.53 dnoise1 21 19 dn fnoise1 20 98 vnoise1 1 rnoise2 20 98 1 * inoise stage * rnoise3 22 98 8.18e-6 vnoise3 22 98 0 vnoise4 24 98 0.575 dnoise2 24 22 dn fnoise2 23 98 vnoise3 1 rnoise4 23 98 1 * buffer stage * gbuf 98 13 15 98 1e-2 rbuf 98 13 1e2 * output current reflected to supplies * fcurr 98 40 voc 1 vcur1 26 98 0 vcur2 98 27 0 dcur1 40 26 d1 dcur2 27 40 d1 * output stage * vo1 99 90 0 vo2 91 50 0 fout1 0 99 poly(2) vo1 vcur1 -9.27e-3 1 -1 fout2 50 0 poly(2) vo2 vcur2 -9.27e-3 1 -1 gout1 90 10 13 99 0.5 gout2 91 10 13 50 0.5 rout1 10 90 2 rout2 10 91 2 voc 10 28 0 rout3 28 98 1e6 dcl3 13 11 d1 dcl4 12 13 d1 vcl3 11 10 -0.445 vcl4 10 12 -0.445 .model qp1 pnp(level=1) .model qp2 pnp(level=1) .model qn1 npn(level=1) .model qn2 npn(level=1) .model d1 d() .model dn d(af=1 kf=1e-8) .ends R6 1 Vout1 250 C3 1 0 1.5pF V3 VU1in- Vinput DC 0V * .INCLUDE /home/sdb/OpticalReceiver/Simulation.cmd R5 -5V Vout1 1K I1 0 Vinput AC 1 PWL (0ns 0mA 1nS 0mA 1.01nS 1mA 10nS 1mA 10.01nS 0mA 20nS 0mA 20.01nS .1mA 30nS .1mA 30.01nS 0mA) R4 V1- -5V 5 C2 0 V1- .01uF V2 -5V 0 DC -5V R2 VU1in- Vout1 180 V1 +5V 0 DC 5V C1 V1+ 0 .01uF R1 +5V V1+ 5 * When run, this SPICE file should output a square waveform * with a little overshoot .tran 0.05ns 40ns .plot tran Vout2 .END tmpk8ny_4pz/examples/TransImpedanceAmp/README0000644000175000017500000000274713546075722021223 0ustar carstencarstenThis directory holds a SPICE netlist with SPICE2 POLY constructs in controlled sources as typically found in vendor models. The circuit is just a two-stage transimpedance amp using an AD8009, along with some slow components (AD780 and OP177A) to set bias points. Vendor models are used for all active components. Successfully running this test shows that you have successfully built the XSpice stuff with the POLY codemodel, and that you should be able to simulate SPICE netlists with embedded vendor models. To run this netlist, just do the following: [localhost]# ngspice ngspice 1 -> source output.net ngspice 2 -> run ngspice 3 -> plot Vout2 (Note that when you read in the netlist, you will get a bunch of warnings saying stuff like: Warning -- Level not specified on line "()" Using level 1. Also, ngspice will complain about: Error on line 50 : r:u101:1 u101:40 0 1e3 tc=7e-6 unknown parameter (tc) Error on line 283 : .temp 0 25 50 75 100 Warning: .TEMP card obsolete - use .options TEMP and TNOM You can ignore all this stuff . . . .) You should get a pop-up window showing two square pulses (the second smaller than the first) with a little bit of overshoot on the rising and falling edges. This stuff was done as an adjunct to work on the gEDA project. Information about gEDA is available at http://geda.seul.org/ . Please direct all questions/suggestions/bugs/complaints about XSpice extensions to ngspice to Stuart Brorson -- mailto:sdb@cloud9.net. 6.23.2002 -- SDB. tmpk8ny_4pz/examples/control_structs/0000755000175000017500000000000013546075722020245 5ustar carstencarstentmpk8ny_4pz/examples/control_structs/if-test-1.cir0000644000175000017500000000243213546075722022456 0ustar carstencarstentest if conditions * test behaviour in special circumstances v1 1 0 dc 42 R1 1 0 1k .control echo "expect Error: missing if condition" * does not enter cp_istrue() if echo "FAIL: you should not see this" else echo "nonetheless evaluated as FALSE" end echo set testvar_b="" echo "expect |false|" * in cp_istrue(): wl!=NULL names==NULL v==NULL if $testvar_b echo "FAIL: you should not see this" else echo "|false|" end echo set testvar_c echo "expect testvar_c=|TRUE|" * in cp_istrue(): wl!=NULL names!=NULL v!=NULL if $testvar_c echo "testvar_c=|$testvar_c|" end echo echo "expect Error: testvar_d: no such variable." * in cp_istrue(): wl!=NULL then wl==NULL names==NULL v==NULL if $testvar_d echo "FAIL: you should not see this" else echo "nonetheless evaluated as FALSE" end echo echo "expect Error(parse.c--checkvalid): testvar_e: no such vector." * in cp_istrue(): wl!=NULL names==NULL v==NULL if testvar_e = 3.3 echo "FAIL: you should not see this" else echo "nonetheless evaluated as FALSE" end echo let testvar_f = 3.5 echo "expect |false|" if testvar_f = 3.3 echo "FAIL: you should not see this" else echo "|false|" end echo echo "expect |true|" if testvar_f = 3.5 echo "|true|" else echo "FAIL: you should not see this" end echo op print v(1) .endc .end tmpk8ny_4pz/examples/control_structs/foreach_bjt_ft.sp0000644000175000017500000000251613546075722023554 0ustar carstencarstenBJT ft Test vce 1 0 dc 3.0 vgain 1 c dc 0.0 f 0 2 vgain -1000 l 2 b 1g c 2 0 1g ib 0 b dc 0.0 ac 1.0 ic 0 c 0.01 q1 c b 0 bfs17 .control foreach myic 0.5e-3 1e-3 5e-3 10e-3 50e-3 100e-3 alter ic = $myic ac dec 10 10k 5g end *foreach mytf 50p 100p 150p 200p 250p 300p * altermod q.x1.q1 tf = $mytf * ac dec 10 10k 5g *end plot abs(ac1.vgain#branch) abs(ac2.vgain#branch) abs(ac3.vgain#branch) abs(ac4.vgain#branch) abs(ac5.vgain#branch) abs(ac6.vgain#branch) ylimit 0.1 100 loglog .endc ***************************************************************** * SPICE2G6 MODEL OF THE NPN BIPOLAR TRANSISTOR BFS17 (SOT-23) * * REV: 98.1 DANALYSE GMBH BERLIN (27.07.1998) * ***************************************************************** .SUBCKT BFS17C 1 2 3 Q1 6 5 7 BFS17 1.000 LC 1 6 0.350N L1 2 4 0.400N LB 4 5 0.500N L2 3 8 0.400N LE 8 7 0.600N CGBC 4 6 70.00F CGBE 4 8 0.150P CGCE 6 8 15.00F .ENDS .MODEL BFS17 NPN (level=1 IS=0.480F NF=1.008 BF=99.655 VAF=90.000 IKF=0.190 + ISE=7.490F NE=1.762 NR=1.010 BR=38.400 VAR=7.000 IKR=93.200M + ISC=0.200F NC=1.042 + RB=1.500 IRB=0.100M RBM=1.200 + RE=0.500 RC=2.680 + CJE=1.325P VJE=0.700 MJE=0.220 FC=0.890 + CJC=1.050P VJC=0.610 MJC=0.240 XCJC=0.400 + TF=56.940P TR=1.000N PTF=21.000 + XTF=68.398 VTF=0.600 ITF=0.700 + XTB=1.600 EG=1.110 XTI=3.000 + KF=1.000F AF=1.000) .end tmpk8ny_4pz/examples/control_structs/if-batchmode.cir0000644000175000017500000000072013546075722023265 0ustar carstencarstenuse $batchmode * use $batchmode variable to steer control flow * * start either with * ngspice -b -r rawfile.raw if-batchmode.cir * or with * ngspice if-batchmode.cir v0 1 0 dc 1 R1 1 2 1k C1 2 0 1u .tran 100u 10m uic .print tran all .control if $?batchmode echo "Info: batchmode has been set by command line option -b" echo else echo "Info: batchmode has not been set" echo unset ngdebug tran 100u 10m uic plot v(2) end .endc .end tmpk8ny_4pz/examples/control_structs/s-param.cir0000644000175000017500000000620313546075722022305 0ustar carstencarstenTest for Scattering Parameters ** Two ports ** Examples: Bipolar, Tschebyschef, RC .param Rbase=50 Vbias_in=0 Vbias_out=0 *** The two-port circuit: ** port 1: in 0 ** port 2: out 0 ** Bias on both ports through resistor Rbase (to obtain operating point) ** Example RF Bipolar mrf5711 ** VCE 1 V, IE = 5mA ** QXXXXXXX nc nb ne ** model obtained from ** http://141.69.160.32/~krausg/Spice_Model_CD/Vendor%20List/Motorola/Spice/RFBJT/ *.include MRF5711.lib *XMRF5711 out in e MRF5711 *Ie e 0 5m *Ce e 0 1 ** Example Tschebyschef Low Pass filter C1 in 0 33.2p L1 in 2 99.2n C2 2 0 57.2p L2 2 out 99.2n C3 out 0 33.2p ** Example RC ** see ** http://www.allenhollister.com/allen/files/scatteringparameters.pdf *R2 in out 10 *C1 out int5 30p *R1 int5 0 10 *** End of circuit ** The following subcircuit to be changed only by an experienced user! *** Driver and readout X1 in out S22 S12 S_PARAM .SUBCKT S_PARAM 22 66 5 7 * Resistors emulate switches with Ron=0.001 and Roff=1e12 * to switch driver to input and readout to output (and vice versa, see below) RS1 22 2 0.001 RS2 66 6 0.001 RS3 22 6 1e12 RS4 66 2 1e12 *Driver Vacdc 1 0 DC 'Vbias_in' AC 1 $ ac voltage and dc bias at input (applied through load resistor) R1 1 2 'Rbase' E1 3 0 2 0 2 $ amplify in port ac voltage by 2 Vac 3 4 DC 0 AC 1 $ subtract driving ac voltage R_loop 4 5 0.001 R3 5 0 1 $ ground return for measure node 5 *Readout E2 7 0 6 0 2 $ amplify out port ac voltage by 2 R4 6 8 'Rbase' $ load resistor at output (ac) Vdc 8 0 DC 'Vbias_out' AC 0 $ dc bias at output (applied through load resistor) .ends ** Check the two ac lines below for being equal! .control set noaskquit set filetype=ascii *** measurement for s11 and s21 op ** save bias voltages to vector let Vdcnew=V(X1.1) $ former Vacdc let Vacdcnew=v(X1.8) $ former Vdc ** first ac measurement (change this line only together with following ac line) *ac lin 20 0.1G 2G $ use for bip transistor ac lin 100 2.5MEG 250MEG $ use for Tschebyschef *ac lin 101 1k 10G $ use for RC ** ** switch input and output alter R.X1.RS1=1e12 alter R.X1.RS2=1e12 alter R.X1.RS3=0.001 alter R.X1.RS4=0.001 ** switch bias voltages between in and out alter V.X1.Vacdc DC=op1.Vacdcnew alter V.X1.Vdc DC=op1.Vdcnew *** measurement for s12 and s22 op ** second ac measurement (change this line only together with ac line above) *ac lin 20 0.1G 2G $ use for bip transistor ac lin 100 2.5MEG 250MEG $ use for Tschebyschef *ac lin 101 1 10G $ use for RC ** let s11=ac1.s22 let s21=ac1.s12 settype s-param S11 S21 S22 S12 let S11db = db(s11) let S12db = db(s12) let S21db = db(s21) let S22db = db(s22) settype decibel S11db S21db S22db S12db let P11=180*ph(s11)/pi let P21=180*ph(s21)/pi let P22=180*ph(S22)/pi let P12=180*ph(S12)/pi settype phase P11 P21 P22 P12 let Rbase=@R.X1.R4[Resistance] settype impedance Rbase *plot s11db s21db S22db S12db ylimit -50 0 xlog $ used with RC plot s11db s21db S22db S12db ylimit -0.5 0 $ used with Tschebyschef plot P11 P21 P22 P12 plot smithgrid S11 S12 *wrdata s3046 mag(S11) P11 mag(S21) P21 mag(S22) P22 mag(S12) P12 $ write simple table wrs2p s3046.s2p $ write touchstone vers. 1 file s3046.s2p .endc .end tmpk8ny_4pz/examples/control_structs/new-check-4.sp0000644000175000017500000000351313546075722022620 0ustar carstencarstendemonstrate < etc in ft_getpnames * (compile (concat "tmp-1/ng-spice-rework/src/ngspice " buffer-file-name) t) VIN 1 0 DC=0 .control dc VIN 0 10 5 let checks = 0 let const0 = 0 let const5 = 5 let const6 = 6 * check some relational operators, which are in danger to mixed up * with csh semantic, that is IO redirection if const5 < const6 let checks = checks + 1 else echo "ERROR:" end if const6 > const5 let checks = checks + 1 else echo "ERROR:" end if const5 >= const5 let checks = checks + 1 else echo "ERROR:" end if const5 <= const5 let checks = checks + 1 else echo "ERROR:" end if const5 = const5 let checks = checks + 1 else echo "ERROR:" end * check some wired non-equality operators * note: there are some awkward tranformations ahead of the ft_getpnames lexer * transforming "><" into "> <" * and "<>" into "< >" * note: "!=" would have been in serious danger to be fooled up within * csh history mechanism if const6 <> const5 let checks = checks + 1 else echo "ERROR:" end if const6 >< const5 let checks = checks + 1 else echo "ERROR:" end * check some boolean operators, which are in danger to be mixed up * with csh semantic, `&' background '|' pipe '~' homedirectory if const5 & const5 let checks = checks + 1 else echo "ERROR:" end if const0 | const5 let checks = checks + 1 else echo "ERROR:" end if ~ const0 let checks = checks + 1 else echo "ERROR:" end * note: * "!=" would be in danger, '!' triggers the csh history mechanism *if const5 != const6 * echo "just trying" *end * Note: csh semantics swallows the '>' and '<' operators * on most of the com lines * witnessed by let tmp = const5 > unwanted_output_file_1 define foo(a,b) a > unwanted_output_file_2 print const0 > unwanted_output_file_3 if checks eq 10 echo "INFO: ok" end .endc .end tmpk8ny_4pz/examples/control_structs/repeat3.sp0000644000175000017500000000564313546075722022164 0ustar carstencarstenTest sequences for ngspice control structures *vectors are used (except foreach) *start in interactive mode .control * test for while, repeat, if, break let loop = 0 while loop < 4 let index = 0 repeat let index = index + 1 if index > 4 break end end echo index "$&index" loop "$&loop" let loop = loop + 1 end * test sequence for while, dowhile let loop = 0 echo echo enter loop with "$&loop" dowhile loop < 3 echo within dowhile loop "$&loop" let loop = loop + 1 end echo after dowhile loop "$&loop" echo let loop = 0 while loop < 3 echo within while loop "$&loop" let loop = loop + 1 end echo after while loop "$&loop" let loop = 3 echo echo enter loop with "$&loop" dowhile loop < 3 echo within dowhile loop "$&loop" $ output expected let loop = loop + 1 end echo after dowhile loop "$&loop" echo let loop = 3 while loop < 3 echo within while loop "$&loop" $ no output expected let loop = loop + 1 end echo after while loop "$&loop" * test sequence for foreach echo foreach outvar 0 0.5 1 1.5 echo parameters: $outvar $ foreach parameters are variables, not vectors! end * test for if ... else ... end echo let loop = 0 let index = 1 dowhile loop < 10 let index = index * 2 if index < 128 echo "$&index" lt 128 else echo "$&index" ge 128 end let loop = loop + 1 end * simple test for label, goto echo let loop = 0 label starthere echo start "$&loop" let loop = loop + 1 if loop < 3 goto starthere end echo end "$&loop" * test for label, nested goto echo let loop = 0 label starthere1 echo start nested "$&loop" let loop = loop + 1 if loop < 3 if loop < 3 goto starthere1 end end echo end "$&loop" * test for label, goto echo let index = 0 label starthere2 let loop = 0 echo We are at start with index "$&index" and loop "$&loop" if index < 6 label inhere let index = index + 1 if loop < 3 let loop = loop + 1 if index > 1 echo jump2 goto starthere2 end end echo jump goto inhere end echo We are at end with index "$&index" and loop "$&loop" * test goto in while loop echo let loop = 0 if 1 $ outer loop to allow nested forward label 'endlabel' while loop < 10 if loop > 5 echo jump goto endlabel end let loop = loop + 1 end echo before $ never reached label endlabel echo after "$&loop" end *test for using variables * simple test for label, goto echo set loop = 0 label starthe echo start $loop let loop = $loop + 1 $ expression needs vector at lhs set loop = "$&loop" $ convert vector contents to variable if $loop < 3 goto starthe end echo end $loop .endc tmpk8ny_4pz/examples/control_structs/new-check-3.sp0000644000175000017500000000277413546075722022627 0ustar carstencarstennew ft_getpnames parser check 3, try ternary * (compile (concat "tmp-1/ng-spice-rework/src/ngspice " buffer-file-name) t) VIN 1 0 DC=0 .control dc VIN 0 10 5 * trying the ternary let checks = 0 let const0 = 0 let const5 = 5 let const6 = 6 let tmp = const0 ? const5 : const6 if tmp eq const6 let checks = checks + 1 else echo "ERROR:" end let tmp = const6 ? const5 : const6 if tmp eq const5 let checks = checks + 1 else echo "ERROR:" end define foo(a,b,d) a ? b : d if foo(const0,const5,const6) eq const6 let checks = checks + 1 else echo "ERROR:" end if foo(const6,const5,const6) eq const5 let checks = checks + 1 else echo "ERROR:" end let vec7 = 7*unitvec(7) let vec8 = 8*unitvec(8) if length(const5 ? vec7 : vec8) eq 7 let checks = checks + 1 else echo "ERROR:" end if length(const0 ? vec7 : vec8) eq 8 let checks = checks + 1 else echo "ERROR:" end * FIXME, "1 ? 1:1" (without spaces around of ':') doesnt work, * "1:1" is a lexem, WHY !!! * ist that an old artifact, (ancient hierarchical name separator ':') * *print length(1?1:1) *if (1 ? 1:1) eq 1 if (1 ? 1 : 1) eq 1 let checks = checks + 1 else echo "ERROR:" end print @vin[dc] * '"' survives, and will be processed in the ft_getpnames() lexer, that is PPlex() * where the string will be unqoted * thats used vor weired variable names, for example "zero(1)" let foo = "vec8" if foo eq vec8 let checks = checks + 1 else echo "ERROR:" end if checks eq 8 echo "INFO: ok" else echo "ERROR:" end .endc .end tmpk8ny_4pz/examples/xspice/0000755000175000017500000000000013546075722016271 5ustar carstencarstentmpk8ny_4pz/examples/xspice/xspice_c3.cir0000644000175000017500000000433013546075722020650 0ustar carstencarstenMixed IO types * This circuit contains a mixture of IO types, including * analog, digital, user-defined (real), and 'null'. * * The circuit demonstrates the use of the digital and * user-defined node capability to model system-level designs * such as sampled-data filters. The simulated circuit * contains a digital oscillator enabled after 100us. The * square wave oscillator output is divided by 8 with a * ripple counter. The result is passed through a digital * filter to convert it to a sine wave. * .tran 1e-5 1e-3 .save all * v1 1 0 0.0 pulse(0 1 1e-4 1e-6) r1 1 0 1k * abridge1 [1] [enable] atod .model atod adc_bridge * aclk [enable clk] clk nand .model nand d_nand (rise_delay=1e-5 fall_delay=1e-5) * adiv2 div2_out clk NULL NULL NULL div2_out dff adiv4 div4_out div2_out NULL NULL NULL div4_out dff adiv8 div8_out div4_out NULL NULL NULL div8_out dff .model dff d_dff * abridge2 div8_out enable filt_in node_bridge2 .model node_bridge2 d_to_real (zero=-1 one=1) * xfilter filt_in clk filt_out dig_filter * abridge3 filt_out a_out node_bridge3 .model node_bridge3 real_to_v * rlpf1 a_out oa_minus 10k * xlpf 0 oa_minus lpf_out opamp * rlpf2 oa_minus lpf_out 10k clpf lpf_out oa_minus 0.01uF * * .subckt dig_filter filt_in clk filt_out * .model n0 real_gain (gain=1.0) .model n1 real_gain (gain=2.0) .model n2 real_gain (gain=1.0) .model g1 real_gain (gain=0.125) .model zm1 real_delay .model d0a real_gain (gain=-0.75) .model d1a real_gain (gain=0.5625) .model d0b real_gain (gain=-0.3438) .model d1b real_gain (gain=1.0) * an0a filt_in x0a n0 an1a filt_in x1a n1 an2a filt_in x2a n2 * az0a x0a clk x1a zm1 az1a x1a clk x2a zm1 * ad0a x2a x0a d0a ad1a x2a x1a d1a * az2a x2a filt1_out g1 az3a filt1_out clk filt2_in zm1 * an0b filt2_in x0b n0 an1b filt2_in x1b n1 an2b filt2_in x2b n2 * az0b x0b clk x1b zm1 az1b x1b clk x2b zm1 * ad0 x2b x0b d0b ad1 x2b x1b d1b * az2b x2b clk filt_out zm1 * .ends dig_filter * * .subckt opamp plus minus out * r1 plus minus 300k a1 %vd (plus minus) outint lim .model lim limit (out_lower_limit = -12 out_upper_limit = 12 + fraction = true limit_range = 0.2 gain=300e3) r3 outint out 50.0 r2 out 0 1e12 * .ends opamp * .end tmpk8ny_4pz/examples/xspice/state/0000755000175000017500000000000013546075722017411 5ustar carstencarstentmpk8ny_4pz/examples/xspice/state/nggtk.tcl0000644000175000017500000000046113546075722021230 0ustar carstencarsten# tcl script for gtkwave: show vcd file data created by ngspice set nfacs [ gtkwave::getNumFacs ] for {set i 0} {$i < $nfacs } {incr i} { set facname [ gtkwave::getFacName $i ] set num_added [ gtkwave::addSignalsFromList $facname ] } gtkwave::/Edit/UnHighlight_All gtkwave::/Time/Zoom/Zoom_Full tmpk8ny_4pz/examples/xspice/state/state-machine.cir0000644000175000017500000000243413546075722022635 0ustar carstencarsten* state machine example * by Marcel Hendrix, Jan. 10th, 2014 * Define a simple up/down counter that counts clk edges. * Digital outputs are on msb+lsb. * inputs clock reset outputs (all digital) a0 [n_one] clk n_zero [msb lsb] state1 *.model state1 d_state(state_file = "D:\Software\Spice\various\xspice\state.in") .model state1 d_state(state_file = "state.in") * Digital "one" and "zero" a1 n_one pullup1 .model pullup1 d_pullup(load = 1pF) a2 n_zero pulldown1 .model pulldown1 d_pulldown(load = 1pF) * Convert the digital outputs to analog so we can conveniently plot them a3 [msb] [out_msb] dac1 a4 [lsb] [out_lsb] dac1 .model dac1 dac_bridge(out_low = 0 out_high = 5 out_undef = 2.5) * The digital VCO needs an analog control voltage Vcnt cntl 0 pulse(-1V 1V 0 5ms 4ms 1ms 1) * Digital VCO to drive state-machine (counter) a5 cntl clk var_clock .model var_clock d_osc(cntl_array = [-2 -1 1 2] freq_array = [1e3 1e3 10e3 10e3] + duty_cycle = 0.1) .control tran 1us 10ms write spifsim.raw plot cntl out_msb+2 out_lsb+8 eprvcd n_one clk n_zero msb lsb > spifsim.vcd * plotting the vcd file (e.g. with GTKWave) * For Windows: returns control to ngspice shell start gtkwave spifsim.vcd --script $inputdir/nggtk.tcl * Others *shell gtkwave spifsim.vcd --script nggtk.tcl & .endc .end tmpk8ny_4pz/examples/xspice/state/state.in0000644000175000017500000000055113546075722021062 0ustar carstencarsten* This is an example state.in file. This file * defines a simple 2-bit counter with one input. The * value of this input determines whether the counter counts * up (in = 1) or down (in = 0). * [state#] [output1 output2] [input] [next state] 0 0s 0s 0 -> 3 1 -> 1 1 0s 1z 0 -> 0 1 -> 2 2 1z 0s 0 -> 1 1 -> 3 3 1z 1z 0 -> 2 3 1z 1z 1 -> 0 tmpk8ny_4pz/examples/xspice/xspice_c2.cir0000644000175000017500000000042213546075722020645 0ustar carstencarstenA transistor amplifier circuit * .tran 1e-5 2e-3 * vin 1 0 0.0 ac 1.0 sin(0 1 1k) * ccouple 1 in 10uF rzin in 0 19.35k * aamp in aout gain_block .model gain_block gain (gain = -3.9 out_offset = 7.003) * rzout aout coll 3.9k rbig coll 0 1e12 * .end tmpk8ny_4pz/examples/xspice/filesource/0000755000175000017500000000000013546075722020431 5ustar carstencarstentmpk8ny_4pz/examples/xspice/filesource/my-source.txt0000644000175000017500000000023513546075722023115 0ustar carstencarsten* input test 0 0 1 10e-6 0.1 0.9 20e-6 0.2 0.8 30e-6 0.3 0.7 40e-6 0.4 0.6 50e-6 0.5 0.5 60e-6 0.6 0.4 70e-6 0.7 0.3 80e-6 0.8 0.2 90e-6 0.9 0.1 100e-6 1 0 tmpk8ny_4pz/examples/xspice/filesource/simple-filesource.cir0000644000175000017500000000107613546075722024563 0ustar carstencarstenfilesource staircase non-interpolating and interpolating * non-interpolating .model filesrc filesource (file="my-source.txt" + amploffset=[0.1 0.1] amplscale=[3.0 3.0] + timeoffset=0 timescale=1 + timerelative=false amplstep=true) * interpolating .model filesrc2 filesource (file="my-source.txt" + amploffset=[0.1 0.1] amplscale=[3.0 3.0] + timeoffset=0 timescale=1 + timerelative=false amplstep=false) A1 %vd([1 0 N_IN 0]) filesrc Rload N_IN 0 1k A2 %vd([2 0 N_IN2 0]) filesrc2 Rload2 N_IN2 0 1k .control option NOINIT ACCT tran 1us 100us display plot allv .endc .endtmpk8ny_4pz/examples/xspice/d_lut/0000755000175000017500000000000013546075722017400 5ustar carstencarstentmpk8ny_4pz/examples/xspice/d_lut/mult4bit.spi0000644000175000017500000001015313546075722021661 0ustar carstencarsten* mult4bit.spi --- * * Example use of d_lut and d_genlut xspice models * * 4 bit parallel multiplier using the d_genlut xspice cell to represent * full and half adders, and using the d_lut xspice cell to represent the * AND gates. * * The LUTs are represented by a string indicating the output for each * combination of inputs. So a 2-input AND gate is represented by * "0001". The d_genlut model allows multiple outputs, and the string * result is the same as a d_lut with the strings for each output * concatenated. So the sum output of a full adder is "01101001" * (A ^ B ^ C), and the carry output is "00010111" (AB + BC + AC), so the * string representation of the d_genlut output is "0110100100010111". * * subcircuit inputs are aa[3:0] and ab[3:0], output is ap[7:0] * testbench inputs are a[3:0] and b[3:0], output is p[7:0] *--------------------------------------------------------------------------- .subckt mult4bit ap7 ap6 ap5 ap4 ap3 ap2 ap1 ap0 aa3 aa2 aa1 aa0 ab3 ab2 ab1 ab0 * A-to-D and D-to-A bridges .MODEL todig_3v adc_bridge(in_high=0.7 in_low=0.3 rise_delay=100n fall_delay=100n) .MODEL toana_3v dac_bridge(out_high=1.0 out_low=0.0) AA2D00 [ab3 ab2 ab1 ab0 aa3 aa2 aa1 aa0] [db3 db2 db1 db0 da3 da2 da1 da0] todig_3v AD2A00 [dp7 dp6 dp5 dp4 dp3 dp2 dp1 dp0] [ap7 ap6 ap5 ap4 ap3 ap2 ap1 ap0] toana_3v * Instantiate the 4-bit multiplier * LUT model representing a 2-input AND gate .model d_lut_and2 d_lut (rise_delay=50n fall_delay=50n input_load=1.0p + table_values "0001") * genLUT model representing a half adder .model d_genlut_ha d_genlut (rise_delay=[50n 50n] fall_delay=[50n 50n] + input_load=[1.0p 1.0p] input_delay=[2n 2n] table_values "01100001") * genLUT model representing a full adder .model d_genlut_fa d_genlut (rise_delay=[50n 50n] fall_delay=[50n 50n] + input_load=[1.0p 1.0p 1.0p] input_delay=[2n 2n 2n] table_values "0110100100010111") * Instantiate the 4-bit multiplier AAND00 [da0 db0] dp0 d_lut_and2 AAND10 [da1 db0] h0a d_lut_and2 AAND11 [da0 db1] h0b d_lut_and2 AAND20 [da2 db0] f0a d_lut_and2 AAND21 [da1 db1] f0b d_lut_and2 AAND22 [da0 db2] h1b d_lut_and2 AAND30 [da3 db0] f1a d_lut_and2 AAND31 [da2 db1] f1b d_lut_and2 AAND32 [da1 db2] f2b d_lut_and2 AAND33 [da0 db3] h2b d_lut_and2 AAND40 [da3 db1] h3b d_lut_and2 AAND41 [da2 db2] f3b d_lut_and2 AAND42 [da1 db3] f4b d_lut_and2 AAND50 [da3 db2] f5b d_lut_and2 AAND51 [da2 db3] f6b d_lut_and2 AAND60 [da3 db3] f7b d_lut_and2 AHA0 [h0a h0b] [dp1 f0c] d_genlut_ha AHA1 [h1a h1b] [dp2 f2c] d_genlut_ha AHA2 [h2a h2b] [dp3 f4c] d_genlut_ha AHA3 [h3a h3b] [f3a f5a] d_genlut_ha AFA0 [f0a f0b f0c] [h1a f1c] d_genlut_fa AFA1 [f1a f1b f1c] [f2a h3a] d_genlut_fa AFA2 [f2a f2b f2c] [h2a f3c] d_genlut_fa AFA3 [f3a f3b f3c] [f4a f5c] d_genlut_fa AFA4 [f4a f4b f4c] [dp4 f6c] d_genlut_fa AFA5 [f5a f5b f5c] [f6a f7a] d_genlut_fa AFA6 [f6a f6b f6c] [dp5 f7c] d_genlut_fa AFA7 [f7a f7b f7c] [dp6 dp7] d_genlut_fa .ends * Testbench to exercise the multiplier * Eight pulsed voltage sources to run through the bits of a and b VV7 b3 0 DC=0 PULSE(0 1 6400u 100n 100n 6400u 12800u) VV6 b2 0 DC=0 PULSE(0 1 3200u 100n 100n 3200u 6400u) VV5 b1 0 DC=0 PULSE(0 1 1600u 100n 100n 1600u 3200u) VV4 b0 0 DC=0 PULSE(0 1 800u 100n 100n 800u 1600u) VV3 a3 0 DC=0 PULSE(0 1 400u 100n 100n 400u 800u) VV2 a2 0 DC=0 PULSE(0 1 200u 100n 100n 200u 400u) VV1 a1 0 DC=0 PULSE(0 1 100u 100n 100n 100u 200u) VV0 a0 0 DC=0 PULSE(0 1 50u 100n 100n 50u 100u) * Give a capacitive load to the outputs C7 p7 0 10f C6 p6 0 10f C5 p5 0 10f C4 p4 0 10f C3 p3 0 10f C2 p2 0 10f C1 p1 0 10f C0 p0 0 10f Xmult4 p7 p6 p5 p4 p3 p2 p1 p0 a3 a2 a1 a0 b3 b2 b1 b0 mult4bit * Run the transient simulation .control tran 50us 12825us 25us linearize let aa = (((v(a3))*2 + v(a2))*2 + v(a1))*2 + v(a0) let bb = (((v(b3))*2 + v(b2))*2 + v(b1))*2 + v(b0) let pp = (((((((v(p7))*2 + v(p6))*2 + v(p5))*2 + v(p4))*2 + v(p3))*2 + v(p2))*2 + v(p1))*2 + v(p0) let pp_gold = aa * bb plot aa bb pp let err = vecmax(abs(pp - pp_gold)) if $&err > 1e-6 echo "ERROR: multiplier output does not match golden response" else echo "INFO: multiplier output does match golden response" end .endc .end tmpk8ny_4pz/examples/xspice/fstest.sp0000644000175000017500000000107713546075722020152 0ustar carstencarsten* filesource Test * two differential ports 1 0 and 3 0 are used, so your input file * has to have three columns (time, port_value 1, portvalue 2) AFILESRC %vd([1 0 3 0]) filesrc .model filesrc filesource (file="sine.m" amploffset=[0 0] amplscale=[1 1] timerelative=false amplstep=false) V2 2 0 0.0 SIN(0 1 1MEG 0 0 0.0) V4 4 0 0.0 SIN(0 1 1MEG 0 0 90.0) .tran 1n 1.0u .control run *listing param wrdata vspice V(1) V(2) V(3) V(4) plot V(1) V(2) V(3) V(4) * error between interpolation and sine source * should be less than 1mV up to 1us plot V(1,2) V(3,4) .endc .end tmpk8ny_4pz/examples/xspice/sine.m0000644000175000017500000003332213546075722017410 0ustar carstencarsten# Created by Octave 3.4.0, Mon Jun 06 10:16:19 2011 CEST # name: x # type: matrix # rows: 257 # columns: 3 0 0 1 3.90625e-09 0.02454122852291229 0.9996988186962042 7.8125e-09 0.04906767432741801 0.9987954562051724 1.171875e-08 0.07356456359966743 0.9972904566786902 1.5625e-08 0.0980171403295606 0.9951847266721969 1.953125e-08 0.1224106751992162 0.99247953459871 2.34375e-08 0.1467304744553617 0.989176509964781 2.734375e-08 0.1709618887603012 0.9852776423889412 3.125e-08 0.1950903220161282 0.9807852804032304 3.515625e-08 0.2191012401568698 0.9757021300385286 3.90625e-08 0.2429801799032639 0.970031253194544 4.296875e-08 0.2667127574748984 0.9637760657954398 4.6875e-08 0.2902846772544623 0.9569403357322088 5.078125e-08 0.3136817403988915 0.9495281805930367 5.46875e-08 0.3368898533922201 0.9415440651830208 5.859374999999999e-08 0.3598950365349881 0.932992798834739 6.25e-08 0.3826834323650898 0.9238795325112867 6.640625e-08 0.4052413140049899 0.9142097557035307 7.03125e-08 0.4275550934302821 0.9039892931234433 7.421874999999999e-08 0.4496113296546065 0.8932243011955153 7.812499999999999e-08 0.4713967368259976 0.881921264348355 8.203125e-08 0.492898192229784 0.8700869911087115 8.59375e-08 0.5141027441932217 0.8577286100002721 8.984375e-08 0.5349976198870972 0.8448535652497071 9.375e-08 0.5555702330196022 0.8314696123025452 9.765624999999999e-08 0.5758081914178453 0.8175848131515837 1.015625e-07 0.5956993044924334 0.8032075314806449 1.0546875e-07 0.6152315905806268 0.7883464276266063 1.09375e-07 0.6343932841636455 0.773010453362737 1.1328125e-07 0.6531728429537768 0.7572088465064846 1.171875e-07 0.6715589548470183 0.7409511253549591 1.2109375e-07 0.6895405447370668 0.724247082951467 1.25e-07 0.7071067811865475 0.7071067811865476 1.2890625e-07 0.7242470829514669 0.6895405447370669 1.328125e-07 0.7409511253549591 0.6715589548470183 1.3671875e-07 0.7572088465064845 0.6531728429537768 1.40625e-07 0.773010453362737 0.6343932841636455 1.4453125e-07 0.7883464276266062 0.6152315905806268 1.484375e-07 0.8032075314806448 0.5956993044924335 1.5234375e-07 0.8175848131515837 0.5758081914178453 1.5625e-07 0.8314696123025452 0.5555702330196023 1.6015625e-07 0.844853565249707 0.5349976198870973 1.640625e-07 0.8577286100002721 0.5141027441932217 1.6796875e-07 0.8700869911087113 0.4928981922297841 1.71875e-07 0.8819212643483549 0.4713967368259978 1.7578125e-07 0.8932243011955153 0.4496113296546066 1.796875e-07 0.9039892931234433 0.4275550934302822 1.8359375e-07 0.9142097557035307 0.4052413140049899 1.875e-07 0.9238795325112867 0.3826834323650898 1.9140625e-07 0.9329927988347388 0.3598950365349883 1.953125e-07 0.9415440651830208 0.3368898533922201 1.9921875e-07 0.9495281805930367 0.3136817403988916 2.03125e-07 0.9569403357322089 0.2902846772544623 2.0703125e-07 0.9637760657954398 0.2667127574748984 2.109375e-07 0.970031253194544 0.242980179903264 2.1484375e-07 0.9757021300385286 0.2191012401568698 2.1875e-07 0.9807852804032304 0.1950903220161283 2.2265625e-07 0.9852776423889412 0.1709618887603014 2.265625e-07 0.989176509964781 0.1467304744553617 2.3046875e-07 0.99247953459871 0.1224106751992163 2.34375e-07 0.9951847266721968 0.09801714032956077 2.3828125e-07 0.9972904566786902 0.07356456359966745 2.421875e-07 0.9987954562051724 0.04906767432741813 2.4609375e-07 0.9996988186962042 0.02454122852291226 2.5e-07 1 6.123233995736766e-17 2.5390625e-07 0.9996988186962042 -0.02454122852291214 2.578125e-07 0.9987954562051724 -0.04906767432741801 2.6171875e-07 0.9972904566786902 -0.07356456359966733 2.65625e-07 0.9951847266721969 -0.09801714032956065 2.6953125e-07 0.99247953459871 -0.1224106751992162 2.734375e-07 0.989176509964781 -0.1467304744553616 2.7734375e-07 0.9852776423889412 -0.1709618887603012 2.8125e-07 0.9807852804032304 -0.1950903220161282 2.8515625e-07 0.9757021300385286 -0.2191012401568697 2.890625e-07 0.970031253194544 -0.2429801799032639 2.9296875e-07 0.9637760657954398 -0.2667127574748983 2.96875e-07 0.9569403357322089 -0.2902846772544622 3.0078125e-07 0.9495281805930367 -0.3136817403988914 3.046875e-07 0.9415440651830208 -0.3368898533922199 3.0859375e-07 0.9329927988347388 -0.3598950365349882 3.125e-07 0.9238795325112867 -0.3826834323650897 3.1640625e-07 0.9142097557035307 -0.4052413140049897 3.203125e-07 0.9039892931234434 -0.4275550934302819 3.2421875e-07 0.8932243011955152 -0.4496113296546067 3.28125e-07 0.881921264348355 -0.4713967368259977 3.3203125e-07 0.8700869911087115 -0.492898192229784 3.359375e-07 0.8577286100002721 -0.5141027441932217 3.3984375e-07 0.8448535652497072 -0.534997619887097 3.4375e-07 0.8314696123025455 -0.555570233019602 3.4765625e-07 0.8175848131515837 -0.5758081914178453 3.515625e-07 0.8032075314806449 -0.5956993044924334 3.5546875e-07 0.7883464276266063 -0.6152315905806267 3.59375e-07 0.7730104533627371 -0.6343932841636454 3.6328125e-07 0.7572088465064847 -0.6531728429537765 3.671875e-07 0.740951125354959 -0.6715589548470184 3.7109375e-07 0.7242470829514669 -0.6895405447370669 3.75e-07 0.7071067811865476 -0.7071067811865475 3.7890625e-07 0.6895405447370671 -0.7242470829514668 3.828125e-07 0.6715589548470186 -0.7409511253549589 3.8671875e-07 0.6531728429537766 -0.7572088465064846 3.90625e-07 0.6343932841636455 -0.773010453362737 3.9453125e-07 0.6152315905806269 -0.7883464276266062 3.984375e-07 0.5956993044924335 -0.8032075314806448 4.0234375e-07 0.5758081914178454 -0.8175848131515836 4.0625e-07 0.5555702330196022 -0.8314696123025453 4.1015625e-07 0.5349976198870972 -0.8448535652497071 4.140625e-07 0.5141027441932218 -0.857728610000272 4.1796875e-07 0.4928981922297841 -0.8700869911087113 4.21875e-07 0.4713967368259979 -0.8819212643483549 4.2578125e-07 0.4496113296546069 -0.8932243011955152 4.296875e-07 0.427555093430282 -0.9039892931234433 4.3359375e-07 0.4052413140049899 -0.9142097557035307 4.375e-07 0.3826834323650899 -0.9238795325112867 4.4140625e-07 0.3598950365349883 -0.9329927988347388 4.453125e-07 0.3368898533922203 -0.9415440651830207 4.4921875e-07 0.3136817403988914 -0.9495281805930367 4.53125e-07 0.2902846772544624 -0.9569403357322088 4.5703125e-07 0.2667127574748985 -0.9637760657954398 4.609375e-07 0.2429801799032641 -0.970031253194544 4.6484375e-07 0.21910124015687 -0.9757021300385285 4.6875e-07 0.1950903220161286 -0.9807852804032304 4.7265625e-07 0.1709618887603012 -0.9852776423889412 4.765625e-07 0.1467304744553618 -0.989176509964781 4.804687499999999e-07 0.1224106751992163 -0.99247953459871 4.84375e-07 0.09801714032956083 -0.9951847266721968 4.8828125e-07 0.07356456359966773 -0.9972904566786902 4.921875e-07 0.04906767432741797 -0.9987954562051724 4.9609375e-07 0.02454122852291233 -0.9996988186962042 5e-07 1.224646799147353e-16 -1 5.0390625e-07 -0.02454122852291208 -0.9996988186962042 5.078125e-07 -0.04906767432741772 -0.9987954562051724 5.117187499999999e-07 -0.0735645635996675 -0.9972904566786902 5.156249999999999e-07 -0.09801714032956059 -0.9951847266721969 5.1953125e-07 -0.1224106751992161 -0.99247953459871 5.234375e-07 -0.1467304744553616 -0.989176509964781 5.2734375e-07 -0.170961888760301 -0.9852776423889413 5.3125e-07 -0.1950903220161284 -0.9807852804032304 5.3515625e-07 -0.2191012401568698 -0.9757021300385286 5.390625e-07 -0.2429801799032638 -0.970031253194544 5.4296875e-07 -0.2667127574748983 -0.96377606579544 5.46875e-07 -0.2902846772544621 -0.9569403357322089 5.507812499999999e-07 -0.3136817403988912 -0.9495281805930368 5.546874999999999e-07 -0.3368898533922201 -0.9415440651830208 5.5859375e-07 -0.3598950365349881 -0.932992798834739 5.625e-07 -0.3826834323650897 -0.9238795325112868 5.6640625e-07 -0.4052413140049897 -0.9142097557035307 5.703125e-07 -0.4275550934302818 -0.9039892931234434 5.7421875e-07 -0.4496113296546067 -0.8932243011955153 5.78125e-07 -0.4713967368259976 -0.881921264348355 5.8203125e-07 -0.4928981922297839 -0.8700869911087115 5.859374999999999e-07 -0.5141027441932216 -0.8577286100002721 5.898437499999999e-07 -0.5349976198870969 -0.8448535652497072 5.937499999999999e-07 -0.555570233019602 -0.8314696123025455 5.9765625e-07 -0.5758081914178453 -0.8175848131515837 6.015625e-07 -0.5956993044924332 -0.8032075314806449 6.0546875e-07 -0.6152315905806267 -0.7883464276266063 6.09375e-07 -0.6343932841636453 -0.7730104533627371 6.1328125e-07 -0.6531728429537765 -0.7572088465064848 6.171875e-07 -0.6715589548470184 -0.7409511253549591 6.2109375e-07 -0.6895405447370668 -0.724247082951467 6.249999999999999e-07 -0.7071067811865475 -0.7071067811865477 6.289062499999999e-07 -0.7242470829514668 -0.6895405447370671 6.328124999999999e-07 -0.7409511253549589 -0.6715589548470187 6.3671875e-07 -0.7572088465064842 -0.6531728429537771 6.40625e-07 -0.7730104533627367 -0.6343932841636459 6.4453125e-07 -0.7883464276266059 -0.6152315905806273 6.484375e-07 -0.8032075314806451 -0.5956993044924331 6.5234375e-07 -0.8175848131515838 -0.5758081914178452 6.5625e-07 -0.8314696123025452 -0.5555702330196022 6.6015625e-07 -0.844853565249707 -0.5349976198870973 6.640624999999999e-07 -0.857728610000272 -0.5141027441932218 6.679687499999999e-07 -0.8700869911087113 -0.4928981922297842 6.718749999999999e-07 -0.8819212643483549 -0.4713967368259979 6.7578125e-07 -0.8932243011955152 -0.4496113296546069 6.796875e-07 -0.9039892931234431 -0.4275550934302825 6.8359375e-07 -0.9142097557035305 -0.4052413140049904 6.875e-07 -0.9238795325112865 -0.3826834323650903 6.9140625e-07 -0.932992798834739 -0.3598950365349879 6.953125e-07 -0.9415440651830208 -0.3368898533922199 6.992187499999999e-07 -0.9495281805930367 -0.3136817403988915 7.031249999999999e-07 -0.9569403357322088 -0.2902846772544624 7.070312499999999e-07 -0.9637760657954398 -0.2667127574748985 7.109374999999999e-07 -0.970031253194544 -0.2429801799032641 7.1484375e-07 -0.9757021300385285 -0.2191012401568701 7.1875e-07 -0.9807852804032303 -0.1950903220161287 7.2265625e-07 -0.9852776423889411 -0.1709618887603017 7.265625e-07 -0.9891765099647809 -0.1467304744553623 7.3046875e-07 -0.9924795345987101 -0.122410675199216 7.34375e-07 -0.9951847266721969 -0.09801714032956045 7.382812499999999e-07 -0.9972904566786902 -0.07356456359966736 7.421874999999999e-07 -0.9987954562051724 -0.04906767432741803 7.460937499999999e-07 -0.9996988186962042 -0.02454122852291239 7.5e-07 -1 -1.83697019872103e-16 7.5390625e-07 -0.9996988186962042 0.02454122852291202 7.578125e-07 -0.9987954562051724 0.04906767432741766 7.6171875e-07 -0.9972904566786902 0.07356456359966698 7.65625e-07 -0.9951847266721969 0.09801714032956009 7.6953125e-07 -0.9924795345987101 0.1224106751992156 7.734375e-07 -0.9891765099647809 0.1467304744553619 7.773437499999999e-07 -0.9852776423889412 0.1709618887603013 7.812499999999999e-07 -0.9807852804032304 0.1950903220161283 7.851562499999999e-07 -0.9757021300385286 0.2191012401568697 7.890625e-07 -0.970031253194544 0.2429801799032638 7.9296875e-07 -0.96377606579544 0.2667127574748982 7.96875e-07 -0.9569403357322089 0.2902846772544621 8.0078125e-07 -0.9495281805930368 0.3136817403988911 8.046875e-07 -0.9415440651830209 0.3368898533922196 8.0859375e-07 -0.9329927988347391 0.3598950365349876 8.124999999999999e-07 -0.9238795325112866 0.38268343236509 8.164062499999999e-07 -0.9142097557035306 0.40524131400499 8.203124999999999e-07 -0.9039892931234433 0.4275550934302821 8.242187499999999e-07 -0.8932243011955153 0.4496113296546066 8.28125e-07 -0.881921264348355 0.4713967368259976 8.3203125e-07 -0.8700869911087115 0.4928981922297839 8.359375e-07 -0.8577286100002722 0.5141027441932216 8.3984375e-07 -0.8448535652497072 0.5349976198870969 8.4375e-07 -0.8314696123025455 0.5555702330196018 8.4765625e-07 -0.817584813151584 0.5758081914178449 8.515624999999999e-07 -0.8032075314806453 0.5956993044924329 8.554687499999999e-07 -0.7883464276266061 0.615231590580627 8.593749999999999e-07 -0.7730104533627369 0.6343932841636456 8.632812499999999e-07 -0.7572088465064846 0.6531728429537768 8.671875e-07 -0.7409511253549591 0.6715589548470183 8.7109375e-07 -0.724247082951467 0.6895405447370668 8.75e-07 -0.7071067811865477 0.7071067811865474 8.7890625e-07 -0.6895405447370672 0.7242470829514667 8.828125e-07 -0.6715589548470187 0.7409511253549589 8.8671875e-07 -0.6531728429537771 0.7572088465064842 8.906249999999999e-07 -0.6343932841636459 0.7730104533627367 8.945312499999999e-07 -0.6152315905806274 0.7883464276266059 8.984374999999999e-07 -0.5956993044924332 0.8032075314806451 9.023437499999999e-07 -0.5758081914178452 0.8175848131515837 9.0625e-07 -0.5555702330196022 0.8314696123025452 9.1015625e-07 -0.5349976198870973 0.844853565249707 9.140625e-07 -0.5141027441932219 0.857728610000272 9.1796875e-07 -0.4928981922297843 0.8700869911087113 9.21875e-07 -0.4713967368259979 0.8819212643483548 9.2578125e-07 -0.449611329654607 0.8932243011955151 9.296874999999999e-07 -0.4275550934302825 0.9039892931234431 9.335937499999999e-07 -0.4052413140049904 0.9142097557035305 9.374999999999999e-07 -0.3826834323650904 0.9238795325112865 9.414062499999999e-07 -0.359895036534988 0.932992798834739 9.453125e-07 -0.33688985339222 0.9415440651830208 9.4921875e-07 -0.3136817403988915 0.9495281805930367 9.53125e-07 -0.2902846772544625 0.9569403357322088 9.5703125e-07 -0.2667127574748986 0.9637760657954398 9.609374999999999e-07 -0.2429801799032642 0.970031253194544 9.648437499999999e-07 -0.2191012401568702 0.9757021300385285 9.6875e-07 -0.1950903220161287 0.9807852804032303 9.726562499999999e-07 -0.1709618887603018 0.9852776423889411 9.765625e-07 -0.1467304744553624 0.9891765099647809 9.804687499999999e-07 -0.122410675199216 0.99247953459871 9.84375e-07 -0.09801714032956051 0.9951847266721969 9.882812499999999e-07 -0.07356456359966741 0.9972904566786902 9.921875e-07 -0.04906767432741809 0.9987954562051724 9.960937499999999e-07 -0.02454122852291245 0.9996988186962042 1e-06 -2.449293598294706e-16 1 tmpk8ny_4pz/examples/xspice/d_source/0000755000175000017500000000000013546075722020074 5ustar carstencarstentmpk8ny_4pz/examples/xspice/d_source/d_source-stimulus.txt0000644000175000017500000000105713546075722024326 0ustar carstencarsten* time, a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab 0n 0s 0s Uu Uu Uu Uu Uu Uu Uu Uu Uu 1n 1s 0s Uu Uu 0u Uu Uu Uu Uu Uu Uu 2n Us 0s Uu Uu 0u 0u Uu Uu Uu Uu Uu 3n Us 0r Uu Uu 0u 0u 0u Uu Uu Uu Uu 4n Us 1r Uu Uu 0u 0u 0u 0u Uu Uu Uu 5n Us Ur Uu Uu 0u 0u 0u 0u 0u Uu Uu 6n Us Ur 0z Uu 0u 0u 0u 0u 0u 0u Uu 7n Us Ur 1z Uu 0u 0u 0u 0u 0u 0u 0u 8n Us Ur Uz Uu 0u 0u 0u 0u 0u 0u 0u 9n Us Ur Uz 0u 0u 0u 0u 0u 0u 0u 0u 10n Us Ur Uz 1u 0u 0u 0u 0u 0u 0u 0u 11n Us Ur Uz Uu 0u 0u 0u 0u 0u 0u 0u tmpk8ny_4pz/examples/xspice/d_source/PWMexample.net0000644000175000017500000000102713546075722022623 0ustar carstencarsten* PWMexample.net * calling with: * ngspice -r ngs.raw -b PWMexample.net .model input_vector d_source(input_file = "pwmexample_data.text") .model dac1 dac_bridge(out_low = 0.7 out_high = 3.5 out_undef = 2.2 + input_load = 5.0e-12 t_rise = 1e-9 t_fall = 1e-9) *============== Begin SPICE netlist of main design ============ A1 [3 4] input_vector abridge1 [3] [33] dac1 abridge2 [4] [44] dac1 R1 33 1 1K C1 0 1 10n .control save 33 44 1 tran 1us 50m wrdata $inputdir/fil2.dat V(33) v(44) V(1) plot v(44) V(1) xlimit 22.9m 23m .endc tmpk8ny_4pz/examples/xspice/d_source/d_source-stimulus2.txt0000644000175000017500000000105713546075722024410 0ustar carstencarsten* time, a1 a2 a3 a4 a5 a6 a7 a8 a9 aa 0n 0s 0s Uu Uu Uu Uu Uu Uu Uu 1u 1n 1s 0s Uu Uu 0u Uu Uu Uu Uu 1u 2n Us 0s Uu Uu 0u 0u Uu Uu Uu 0u 3n Us 0r Uu Uu 0u 0u 0u Uu Uu 0u 4n Us 1r Uu Uu 0u 0u 0u 0u Uu 1u 5n Us Ur Uu Uu 0u 0u 0u 0u 0u 1u 6n Us Ur 0z Uu 0u 0u 0u 0u 0u 0u 7n Us Ur 1z Uu 0u 0u 0u 0u 0u 0u 8n Us Ur Uz Uu 0u 0u 0u 0u 0u 1u 9n Us Ur Uz 0u 0u 0u 0u 0u 0u 1u 10n Us Ur Uz 1u 0u 0u 0u 0u 0u 0u 11n Us Ur Uz Uu 0u 0u 0u 0u 0u 0u 12n Us Ur Uz 0u 0u 0u 0u 0u 0u 1utmpk8ny_4pz/examples/xspice/d_source/d_source-stimulus3.txt0000644000175000017500000000014213546075722024403 0ustar carstencarsten* time, c1 c2 c3 0.5n 0s 1s Us 2.5n 0r 1r Ur 4.5n 0z 1z Uz 6.0n 0u 1u Uu tmpk8ny_4pz/examples/xspice/d_source/pwmexample_data.text0000644000175000017500001664003213546075722024166 0ustar carstencarsten* vcd2ngspice-d_source.py: conversion of test_pwm.vcd * time ) * * time pwmoc_out pwmoc_outb 0e-09 1s 1s 150e-09 0s 0s 10350e-09 1s 1s 10390e-09 0s 0s 10430e-09 0s 0s 20590e-09 1s 1s 20630e-09 0s 0s 20710e-09 0s 0s 30830e-09 1s 1s 30870e-09 0s 0s 30990e-09 0s 0s 41070e-09 1s 1s 41110e-09 0s 0s 41270e-09 0s 0s 51310e-09 1s 1s 51350e-09 0s 0s 51550e-09 0s 0s 61550e-09 1s 1s 61590e-09 0s 0s 61830e-09 0s 0s 71790e-09 1s 1s 71830e-09 0s 0s 72110e-09 0s 0s 82030e-09 1s 1s 82070e-09 0s 0s 82390e-09 0s 0s 92270e-09 1s 1s 92310e-09 0s 0s 92670e-09 0s 0s 102510e-09 1s 1s 102550e-09 0s 0s 102950e-09 0s 0s 112750e-09 1s 1s 112790e-09 0s 0s 113230e-09 0s 0s 122990e-09 1s 1s 123030e-09 0s 0s 123510e-09 0s 0s 133230e-09 1s 1s 133270e-09 0s 0s 133790e-09 0s 0s 143470e-09 1s 1s 143510e-09 0s 0s 144070e-09 0s 0s 153710e-09 1s 1s 153750e-09 0s 0s 154350e-09 0s 0s 163950e-09 1s 1s 163990e-09 0s 0s 164630e-09 0s 0s 174190e-09 1s 1s 174230e-09 0s 0s 174910e-09 0s 0s 184430e-09 1s 1s 184470e-09 0s 0s 185190e-09 0s 0s 194670e-09 1s 1s 194710e-09 0s 0s 195470e-09 0s 0s 204910e-09 1s 1s 204950e-09 0s 0s 205750e-09 0s 0s 215150e-09 1s 1s 215190e-09 0s 0s 216030e-09 0s 0s 225390e-09 1s 1s 225430e-09 0s 0s 226310e-09 0s 0s 235630e-09 1s 1s 235670e-09 0s 0s 236590e-09 0s 0s 245870e-09 1s 1s 245910e-09 0s 0s 246870e-09 0s 0s 256110e-09 1s 1s 256150e-09 0s 0s 257150e-09 0s 0s 266350e-09 1s 1s 266390e-09 0s 0s 267430e-09 0s 0s 276590e-09 1s 1s 276630e-09 0s 0s 277710e-09 0s 0s 286830e-09 1s 1s 286870e-09 0s 0s 287990e-09 0s 0s 297070e-09 1s 1s 297110e-09 0s 0s 298270e-09 0s 0s 307310e-09 1s 1s 307350e-09 0s 0s 308550e-09 0s 0s 317550e-09 1s 1s 317590e-09 0s 0s 318830e-09 0s 0s 327790e-09 1s 1s 327830e-09 0s 0s 329110e-09 0s 0s 338030e-09 1s 1s 338070e-09 0s 0s 339390e-09 0s 0s 348270e-09 1s 1s 348310e-09 0s 0s 349670e-09 0s 0s 358510e-09 1s 1s 358550e-09 0s 0s 359950e-09 0s 0s 368750e-09 1s 1s 368790e-09 0s 0s 370230e-09 0s 0s 378990e-09 1s 1s 379030e-09 0s 0s 380510e-09 0s 0s 389230e-09 1s 1s 389270e-09 0s 0s 390790e-09 0s 0s 399470e-09 1s 1s 399510e-09 0s 0s 401070e-09 0s 0s 409710e-09 1s 1s 409750e-09 0s 0s 411350e-09 0s 0s 419950e-09 1s 1s 419990e-09 0s 0s 421630e-09 0s 0s 430190e-09 1s 1s 430230e-09 0s 0s 431910e-09 0s 0s 440430e-09 1s 1s 440470e-09 0s 0s 442190e-09 0s 0s 450670e-09 1s 1s 450710e-09 0s 0s 452470e-09 0s 0s 460910e-09 1s 1s 460950e-09 0s 0s 462750e-09 0s 0s 471150e-09 1s 1s 471190e-09 0s 0s 473030e-09 0s 0s 481390e-09 1s 1s 481430e-09 0s 0s 483310e-09 0s 0s 491630e-09 1s 1s 491670e-09 0s 0s 493590e-09 0s 0s 501870e-09 1s 1s 501910e-09 0s 0s 503870e-09 0s 0s 512110e-09 1s 1s 512150e-09 0s 0s 514150e-09 0s 0s 522350e-09 1s 1s 522390e-09 0s 0s 524430e-09 0s 0s 532590e-09 1s 1s 532630e-09 0s 0s 534710e-09 0s 0s 542830e-09 1s 1s 542870e-09 0s 0s 544990e-09 0s 0s 553070e-09 1s 1s 553110e-09 0s 0s 555270e-09 0s 0s 563310e-09 1s 1s 563350e-09 0s 0s 565550e-09 0s 0s 573550e-09 1s 1s 573590e-09 0s 0s 575830e-09 0s 0s 583790e-09 1s 1s 583830e-09 0s 0s 586110e-09 0s 0s 594030e-09 1s 1s 594070e-09 0s 0s 596390e-09 0s 0s 604270e-09 1s 1s 604310e-09 0s 0s 606670e-09 0s 0s 614510e-09 1s 1s 614550e-09 0s 0s 616950e-09 0s 0s 624750e-09 1s 1s 624790e-09 0s 0s 627230e-09 0s 0s 634990e-09 1s 1s 635030e-09 0s 0s 637510e-09 0s 0s 645230e-09 1s 1s 645270e-09 0s 0s 647790e-09 0s 0s 655470e-09 1s 1s 655510e-09 0s 0s 658070e-09 0s 0s 665710e-09 1s 1s 665750e-09 0s 0s 668350e-09 0s 0s 675950e-09 1s 1s 675990e-09 0s 0s 678630e-09 0s 0s 686190e-09 1s 1s 686230e-09 0s 0s 688910e-09 0s 0s 696430e-09 1s 1s 696470e-09 0s 0s 699190e-09 0s 0s 706670e-09 1s 1s 706710e-09 0s 0s 709470e-09 0s 0s 716910e-09 1s 1s 716950e-09 0s 0s 719750e-09 0s 0s 727150e-09 1s 1s 727190e-09 0s 0s 730030e-09 0s 0s 737390e-09 1s 1s 737430e-09 0s 0s 740310e-09 0s 0s 747630e-09 1s 1s 747670e-09 0s 0s 750590e-09 0s 0s 757870e-09 1s 1s 757910e-09 0s 0s 760870e-09 0s 0s 768110e-09 1s 1s 768150e-09 0s 0s 771150e-09 0s 0s 778350e-09 1s 1s 778390e-09 0s 0s 781430e-09 0s 0s 788590e-09 1s 1s 788630e-09 0s 0s 791710e-09 0s 0s 798830e-09 1s 1s 798870e-09 0s 0s 801990e-09 0s 0s 809070e-09 1s 1s 809110e-09 0s 0s 812270e-09 0s 0s 819310e-09 1s 1s 819350e-09 0s 0s 822550e-09 0s 0s 829550e-09 1s 1s 829590e-09 0s 0s 832830e-09 0s 0s 839790e-09 1s 1s 839830e-09 0s 0s 843110e-09 0s 0s 850030e-09 1s 1s 850070e-09 0s 0s 853390e-09 0s 0s 860270e-09 1s 1s 860310e-09 0s 0s 863670e-09 0s 0s 870510e-09 1s 1s 870550e-09 0s 0s 873950e-09 0s 0s 880750e-09 1s 1s 880790e-09 0s 0s 884230e-09 0s 0s 890990e-09 1s 1s 891030e-09 0s 0s 894510e-09 0s 0s 901230e-09 1s 1s 901270e-09 0s 0s 904790e-09 0s 0s 911470e-09 1s 1s 911510e-09 0s 0s 915070e-09 0s 0s 921710e-09 1s 1s 921750e-09 0s 0s 925350e-09 0s 0s 931950e-09 1s 1s 931990e-09 0s 0s 935630e-09 0s 0s 942190e-09 1s 1s 942230e-09 0s 0s 945910e-09 0s 0s 952430e-09 1s 1s 952470e-09 0s 0s 956190e-09 0s 0s 962670e-09 1s 1s 962710e-09 0s 0s 966470e-09 0s 0s 972910e-09 1s 1s 972950e-09 0s 0s 976750e-09 0s 0s 983150e-09 1s 1s 983190e-09 0s 0s 987030e-09 0s 0s 993390e-09 1s 1s 993430e-09 0s 0s 997310e-09 0s 0s 1003630e-09 1s 1s 1003670e-09 0s 0s 1007590e-09 0s 0s 1013870e-09 1s 1s 1013910e-09 0s 0s 1017870e-09 0s 0s 1024110e-09 1s 1s 1024150e-09 0s 0s 1028150e-09 0s 0s 1034350e-09 1s 1s 1034390e-09 0s 0s 1038430e-09 0s 0s 1044590e-09 1s 1s 1044630e-09 0s 0s 1048710e-09 0s 0s 1054830e-09 1s 1s 1054870e-09 0s 0s 1058990e-09 0s 0s 1065070e-09 1s 1s 1065110e-09 0s 0s 1069270e-09 0s 0s 1075310e-09 1s 1s 1075350e-09 0s 0s 1079550e-09 0s 0s 1085550e-09 1s 1s 1085590e-09 0s 0s 1089830e-09 0s 0s 1095790e-09 1s 1s 1095830e-09 0s 0s 1100110e-09 0s 0s 1106030e-09 1s 1s 1106070e-09 0s 0s 1110390e-09 0s 0s 1116270e-09 1s 1s 1116310e-09 0s 0s 1120670e-09 0s 0s 1126510e-09 1s 1s 1126550e-09 0s 0s 1130950e-09 0s 0s 1136750e-09 1s 1s 1136790e-09 0s 0s 1141230e-09 0s 0s 1146990e-09 1s 1s 1147030e-09 0s 0s 1151510e-09 0s 0s 1157230e-09 1s 1s 1157270e-09 0s 0s 1161790e-09 0s 0s 1167470e-09 1s 1s 1167510e-09 0s 0s 1172070e-09 0s 0s 1177710e-09 1s 1s 1177750e-09 0s 0s 1182350e-09 0s 0s 1187950e-09 1s 1s 1187990e-09 0s 0s 1192630e-09 0s 0s 1198190e-09 1s 1s 1198230e-09 0s 0s 1202910e-09 0s 0s 1208430e-09 1s 1s 1208470e-09 0s 0s 1213190e-09 0s 0s 1218670e-09 1s 1s 1218710e-09 0s 0s 1223470e-09 0s 0s 1228910e-09 1s 1s 1228950e-09 0s 0s 1233750e-09 0s 0s 1239150e-09 1s 1s 1239190e-09 0s 0s 1244030e-09 0s 0s 1249390e-09 1s 1s 1249430e-09 0s 0s 1254310e-09 0s 0s 1259630e-09 1s 1s 1259670e-09 0s 0s 1264590e-09 0s 0s 1269870e-09 1s 1s 1269910e-09 0s 0s 1274870e-09 0s 0s 1280110e-09 1s 1s 1280150e-09 0s 0s 1285150e-09 0s 0s 1290350e-09 1s 1s 1290390e-09 0s 0s 1295430e-09 0s 0s 1300590e-09 1s 1s 1300630e-09 0s 0s 1305710e-09 0s 0s 1310830e-09 1s 1s 1310870e-09 0s 0s 1315990e-09 0s 0s 1321070e-09 1s 1s 1321110e-09 0s 0s 1326270e-09 0s 0s 1331310e-09 1s 1s 1331350e-09 0s 0s 1336550e-09 0s 0s 1341550e-09 1s 1s 1341590e-09 0s 0s 1346830e-09 0s 0s 1351790e-09 1s 1s 1351830e-09 0s 0s 1357110e-09 0s 0s 1362030e-09 1s 1s 1362070e-09 0s 0s 1367390e-09 0s 0s 1372270e-09 1s 1s 1372310e-09 0s 0s 1377670e-09 0s 0s 1382510e-09 1s 1s 1382550e-09 0s 0s 1387950e-09 0s 0s 1392750e-09 1s 1s 1392790e-09 0s 0s 1398230e-09 0s 0s 1402990e-09 1s 1s 1403030e-09 0s 0s 1408510e-09 0s 0s 1413230e-09 1s 1s 1413270e-09 0s 0s 1418790e-09 0s 0s 1423470e-09 1s 1s 1423510e-09 0s 0s 1429070e-09 0s 0s 1433710e-09 1s 1s 1433750e-09 0s 0s 1439350e-09 0s 0s 1443950e-09 1s 1s 1443990e-09 0s 0s 1449630e-09 0s 0s 1454190e-09 1s 1s 1454230e-09 0s 0s 1459910e-09 0s 0s 1464430e-09 1s 1s 1464470e-09 0s 0s 1470190e-09 0s 0s 1474670e-09 1s 1s 1474710e-09 0s 0s 1480470e-09 0s 0s 1484910e-09 1s 1s 1484950e-09 0s 0s 1490750e-09 0s 0s 1495150e-09 1s 1s 1495190e-09 0s 0s 1501030e-09 0s 0s 1505390e-09 1s 1s 1505430e-09 0s 0s 1511310e-09 0s 0s 1515630e-09 1s 1s 1515670e-09 0s 0s 1521590e-09 0s 0s 1525870e-09 1s 1s 1525910e-09 0s 0s 1531870e-09 0s 0s 1536110e-09 1s 1s 1536150e-09 0s 0s 1542150e-09 0s 0s 1546350e-09 1s 1s 1546390e-09 0s 0s 1552430e-09 0s 0s 1556590e-09 1s 1s 1556630e-09 0s 0s 1562710e-09 0s 0s 1566830e-09 1s 1s 1566870e-09 0s 0s 1572990e-09 0s 0s 1577070e-09 1s 1s 1577110e-09 0s 0s 1583270e-09 0s 0s 1587310e-09 1s 1s 1587350e-09 0s 0s 1593550e-09 0s 0s 1597550e-09 1s 1s 1597590e-09 0s 0s 1603830e-09 0s 0s 1607790e-09 1s 1s 1607830e-09 0s 0s 1614110e-09 0s 0s 1618030e-09 1s 1s 1618070e-09 0s 0s 1624390e-09 0s 0s 1628270e-09 1s 1s 1628310e-09 0s 0s 1634670e-09 0s 0s 1638510e-09 1s 1s 1638550e-09 0s 0s 1644950e-09 0s 0s 1648750e-09 1s 1s 1648790e-09 0s 0s 1655230e-09 0s 0s 1658990e-09 1s 1s 1659030e-09 0s 0s 1665510e-09 0s 0s 1669230e-09 1s 1s 1669270e-09 0s 0s 1675790e-09 0s 0s 1679470e-09 1s 1s 1679510e-09 0s 0s 1686070e-09 0s 0s 1689710e-09 1s 1s 1689750e-09 0s 0s 1696350e-09 0s 0s 1699950e-09 1s 1s 1699990e-09 0s 0s 1706630e-09 0s 0s 1710190e-09 1s 1s 1710230e-09 0s 0s 1716910e-09 0s 0s 1720430e-09 1s 1s 1720470e-09 0s 0s 1727190e-09 0s 0s 1730670e-09 1s 1s 1730710e-09 0s 0s 1737470e-09 0s 0s 1740910e-09 1s 1s 1740950e-09 0s 0s 1747750e-09 0s 0s 1751150e-09 1s 1s 1751190e-09 0s 0s 1758030e-09 0s 0s 1761390e-09 1s 1s 1761430e-09 0s 0s 1768310e-09 0s 0s 1771630e-09 1s 1s 1771670e-09 0s 0s 1778590e-09 0s 0s 1781870e-09 1s 1s 1781910e-09 0s 0s 1788870e-09 0s 0s 1792110e-09 1s 1s 1792150e-09 0s 0s 1799150e-09 0s 0s 1802350e-09 1s 1s 1802390e-09 0s 0s 1809430e-09 0s 0s 1812590e-09 1s 1s 1812630e-09 0s 0s 1819710e-09 0s 0s 1822830e-09 1s 1s 1822870e-09 0s 0s 1829990e-09 0s 0s 1833070e-09 1s 1s 1833110e-09 0s 0s 1840270e-09 0s 0s 1843310e-09 1s 1s 1843350e-09 0s 0s 1850550e-09 0s 0s 1853550e-09 1s 1s 1853590e-09 0s 0s 1860830e-09 0s 0s 1863790e-09 1s 1s 1863830e-09 0s 0s 1871110e-09 0s 0s 1874030e-09 1s 1s 1874070e-09 0s 0s 1881390e-09 0s 0s 1884270e-09 1s 1s 1884310e-09 0s 0s 1891670e-09 0s 0s 1894510e-09 1s 1s 1894550e-09 0s 0s 1901950e-09 0s 0s 1904750e-09 1s 1s 1904790e-09 0s 0s 1912230e-09 0s 0s 1914990e-09 1s 1s 1915030e-09 0s 0s 1922510e-09 0s 0s 1925230e-09 1s 1s 1925270e-09 0s 0s 1932790e-09 0s 0s 1935470e-09 1s 1s 1935510e-09 0s 0s 1943070e-09 0s 0s 1945710e-09 1s 1s 1945750e-09 0s 0s 1953350e-09 0s 0s 1955950e-09 1s 1s 1955990e-09 0s 0s 1963630e-09 0s 0s 1966190e-09 1s 1s 1966230e-09 0s 0s 1973910e-09 0s 0s 1976430e-09 1s 1s 1976470e-09 0s 0s 1984190e-09 0s 0s 1986670e-09 1s 1s 1986710e-09 0s 0s 1994470e-09 0s 0s 1996910e-09 1s 1s 1996950e-09 0s 0s 2004750e-09 0s 0s 2007150e-09 1s 1s 2007190e-09 0s 0s 2015030e-09 0s 0s 2017390e-09 1s 1s 2017430e-09 0s 0s 2025310e-09 0s 0s 2027630e-09 1s 1s 2027670e-09 0s 0s 2035590e-09 0s 0s 2037870e-09 1s 1s 2037910e-09 0s 0s 2045870e-09 0s 0s 2048110e-09 1s 1s 2048150e-09 0s 0s 2056150e-09 0s 0s 2058350e-09 1s 1s 2058390e-09 0s 0s 2066430e-09 0s 0s 2068590e-09 1s 1s 2068630e-09 0s 0s 2076710e-09 0s 0s 2078830e-09 1s 1s 2078870e-09 0s 0s 2086990e-09 0s 0s 2089070e-09 1s 1s 2089110e-09 0s 0s 2097270e-09 0s 0s 2099310e-09 1s 1s 2099350e-09 0s 0s 2107550e-09 0s 0s 2109550e-09 1s 1s 2109590e-09 0s 0s 2117830e-09 0s 0s 2119790e-09 1s 1s 2119830e-09 0s 0s 2128110e-09 0s 0s 2130030e-09 1s 1s 2130070e-09 0s 0s 2138390e-09 0s 0s 2140270e-09 1s 1s 2140310e-09 0s 0s 2148670e-09 0s 0s 2150510e-09 1s 1s 2150550e-09 0s 0s 2158950e-09 0s 0s 2160750e-09 1s 1s 2160790e-09 0s 0s 2169230e-09 0s 0s 2170990e-09 1s 1s 2171030e-09 0s 0s 2179510e-09 0s 0s 2181230e-09 1s 1s 2181270e-09 0s 0s 2189790e-09 0s 0s 2191470e-09 1s 1s 2191510e-09 0s 0s 2200070e-09 0s 0s 2201710e-09 1s 1s 2201750e-09 0s 0s 2210350e-09 0s 0s 2211950e-09 1s 1s 2211990e-09 0s 0s 2220630e-09 0s 0s 2222190e-09 1s 1s 2222230e-09 0s 0s 2230910e-09 0s 0s 2232430e-09 1s 1s 2232470e-09 0s 0s 2241190e-09 0s 0s 2242670e-09 1s 1s 2242710e-09 0s 0s 2251470e-09 0s 0s 2252910e-09 1s 1s 2252950e-09 0s 0s 2261750e-09 0s 0s 2263150e-09 1s 1s 2263190e-09 0s 0s 2272030e-09 0s 0s 2273390e-09 1s 1s 2273430e-09 0s 0s 2282310e-09 0s 0s 2283630e-09 1s 1s 2283670e-09 0s 0s 2292590e-09 0s 0s 2293870e-09 1s 1s 2293910e-09 0s 0s 2302870e-09 0s 0s 2304110e-09 1s 1s 2304150e-09 0s 0s 2313150e-09 0s 0s 2314350e-09 1s 1s 2314390e-09 0s 0s 2323430e-09 0s 0s 2324590e-09 1s 1s 2324630e-09 0s 0s 2333710e-09 0s 0s 2334830e-09 1s 1s 2334870e-09 0s 0s 2343990e-09 0s 0s 2345070e-09 1s 1s 2345110e-09 0s 0s 2354270e-09 0s 0s 2355310e-09 1s 1s 2355350e-09 0s 0s 2364550e-09 0s 0s 2365550e-09 1s 1s 2365590e-09 0s 0s 2374830e-09 0s 0s 2375790e-09 1s 1s 2375830e-09 0s 0s 2385110e-09 0s 0s 2386030e-09 1s 1s 2386070e-09 0s 0s 2395390e-09 0s 0s 2396270e-09 1s 1s 2396310e-09 0s 0s 2405670e-09 0s 0s 2406510e-09 1s 1s 2406550e-09 0s 0s 2415950e-09 0s 0s 2416750e-09 1s 1s 2416790e-09 0s 0s 2426230e-09 0s 0s 2426990e-09 1s 1s 2427030e-09 0s 0s 2436510e-09 0s 0s 2437230e-09 1s 1s 2437270e-09 0s 0s 2446790e-09 0s 0s 2447470e-09 1s 1s 2447510e-09 0s 0s 2457070e-09 0s 0s 2457710e-09 1s 1s 2457750e-09 0s 0s 2467350e-09 0s 0s 2467950e-09 1s 1s 2467990e-09 0s 0s 2477630e-09 0s 0s 2478190e-09 1s 1s 2478230e-09 0s 0s 2487910e-09 0s 0s 2488430e-09 1s 1s 2488470e-09 0s 0s 2498190e-09 0s 0s 2498670e-09 1s 1s 2498710e-09 0s 0s 2508470e-09 0s 0s 2508910e-09 1s 1s 2508950e-09 0s 0s 2518750e-09 0s 0s 2519150e-09 1s 1s 2519190e-09 0s 0s 2529030e-09 0s 0s 2529390e-09 1s 1s 2529430e-09 0s 0s 2539310e-09 0s 0s 2539630e-09 1s 1s 2539670e-09 0s 0s 2549590e-09 0s 0s 2549870e-09 1s 1s 2549910e-09 0s 0s 2559870e-09 0s 0s 2560110e-09 1s 1s 2560150e-09 0s 0s 2570150e-09 0s 0s 2570350e-09 1s 1s 2570390e-09 0s 0s 2580430e-09 0s 0s 2580590e-09 1s 1s 2580630e-09 0s 0s 2590710e-09 0s 0s 2590830e-09 1s 1s 2590870e-09 0s 0s 2600990e-09 0s 0s 2601070e-09 1s 1s 2601110e-09 0s 0s 2611270e-09 0s 0s 2611310e-09 1s 1s 2611350e-09 0s 0s 2621550e-09 1s 1s 2621590e-09 1s 1s 2621630e-09 0s 0s 2631790e-09 1s 1s 2631870e-09 0s 0s 2642030e-09 1s 1s 2642110e-09 0s 0s 2642150e-09 0s 0s 2652270e-09 1s 1s 2652350e-09 0s 0s 2652430e-09 0s 0s 2662510e-09 1s 1s 2662590e-09 0s 0s 2662710e-09 0s 0s 2672750e-09 1s 1s 2672830e-09 0s 0s 2672990e-09 0s 0s 2682990e-09 1s 1s 2683070e-09 0s 0s 2683270e-09 0s 0s 2693230e-09 1s 1s 2693310e-09 0s 0s 2693550e-09 0s 0s 2703470e-09 1s 1s 2703550e-09 0s 0s 2703830e-09 0s 0s 2713710e-09 1s 1s 2713790e-09 0s 0s 2714110e-09 0s 0s 2723950e-09 1s 1s 2724030e-09 0s 0s 2724390e-09 0s 0s 2734190e-09 1s 1s 2734270e-09 0s 0s 2734670e-09 0s 0s 2744430e-09 1s 1s 2744510e-09 0s 0s 2744950e-09 0s 0s 2754670e-09 1s 1s 2754750e-09 0s 0s 2755230e-09 0s 0s 2764910e-09 1s 1s 2764990e-09 0s 0s 2765510e-09 0s 0s 2775150e-09 1s 1s 2775230e-09 0s 0s 2775790e-09 0s 0s 2785390e-09 1s 1s 2785470e-09 0s 0s 2786070e-09 0s 0s 2795630e-09 1s 1s 2795710e-09 0s 0s 2796350e-09 0s 0s 2805870e-09 1s 1s 2805950e-09 0s 0s 2806630e-09 0s 0s 2816110e-09 1s 1s 2816190e-09 0s 0s 2816910e-09 0s 0s 2826350e-09 1s 1s 2826430e-09 0s 0s 2827190e-09 0s 0s 2836590e-09 1s 1s 2836670e-09 0s 0s 2837470e-09 0s 0s 2846830e-09 1s 1s 2846910e-09 0s 0s 2847750e-09 0s 0s 2857070e-09 1s 1s 2857150e-09 0s 0s 2858030e-09 0s 0s 2867310e-09 1s 1s 2867390e-09 0s 0s 2868310e-09 0s 0s 2877550e-09 1s 1s 2877630e-09 0s 0s 2878590e-09 0s 0s 2887790e-09 1s 1s 2887870e-09 0s 0s 2888870e-09 0s 0s 2898030e-09 1s 1s 2898110e-09 0s 0s 2899150e-09 0s 0s 2908270e-09 1s 1s 2908350e-09 0s 0s 2909430e-09 0s 0s 2918510e-09 1s 1s 2918590e-09 0s 0s 2919710e-09 0s 0s 2928750e-09 1s 1s 2928830e-09 0s 0s 2929990e-09 0s 0s 2938990e-09 1s 1s 2939070e-09 0s 0s 2940270e-09 0s 0s 2949230e-09 1s 1s 2949310e-09 0s 0s 2950550e-09 0s 0s 2959470e-09 1s 1s 2959550e-09 0s 0s 2960830e-09 0s 0s 2969710e-09 1s 1s 2969790e-09 0s 0s 2971110e-09 0s 0s 2979950e-09 1s 1s 2980030e-09 0s 0s 2981390e-09 0s 0s 2990190e-09 1s 1s 2990270e-09 0s 0s 2991670e-09 0s 0s 3000430e-09 1s 1s 3000510e-09 0s 0s 3001950e-09 0s 0s 3010670e-09 1s 1s 3010750e-09 0s 0s 3012230e-09 0s 0s 3020910e-09 1s 1s 3020990e-09 0s 0s 3022510e-09 0s 0s 3031150e-09 1s 1s 3031230e-09 0s 0s 3032790e-09 0s 0s 3041390e-09 1s 1s 3041470e-09 0s 0s 3043070e-09 0s 0s 3051630e-09 1s 1s 3051710e-09 0s 0s 3053350e-09 0s 0s 3061870e-09 1s 1s 3061950e-09 0s 0s 3063630e-09 0s 0s 3072110e-09 1s 1s 3072190e-09 0s 0s 3073910e-09 0s 0s 3082350e-09 1s 1s 3082430e-09 0s 0s 3084190e-09 0s 0s 3092590e-09 1s 1s 3092670e-09 0s 0s 3094470e-09 0s 0s 3102830e-09 1s 1s 3102910e-09 0s 0s 3104750e-09 0s 0s 3113070e-09 1s 1s 3113150e-09 0s 0s 3115030e-09 0s 0s 3123310e-09 1s 1s 3123390e-09 0s 0s 3125310e-09 0s 0s 3133550e-09 1s 1s 3133630e-09 0s 0s 3135590e-09 0s 0s 3143790e-09 1s 1s 3143870e-09 0s 0s 3145870e-09 0s 0s 3154030e-09 1s 1s 3154110e-09 0s 0s 3156150e-09 0s 0s 3164270e-09 1s 1s 3164350e-09 0s 0s 3166430e-09 0s 0s 3174510e-09 1s 1s 3174590e-09 0s 0s 3176710e-09 0s 0s 3184750e-09 1s 1s 3184830e-09 0s 0s 3186990e-09 0s 0s 3194990e-09 1s 1s 3195070e-09 0s 0s 3197270e-09 0s 0s 3205230e-09 1s 1s 3205310e-09 0s 0s 3207550e-09 0s 0s 3215470e-09 1s 1s 3215550e-09 0s 0s 3217830e-09 0s 0s 3225710e-09 1s 1s 3225790e-09 0s 0s 3228110e-09 0s 0s 3235950e-09 1s 1s 3236030e-09 0s 0s 3238390e-09 0s 0s 3246190e-09 1s 1s 3246270e-09 0s 0s 3248670e-09 0s 0s 3256430e-09 1s 1s 3256510e-09 0s 0s 3258950e-09 0s 0s 3266670e-09 1s 1s 3266750e-09 0s 0s 3269230e-09 0s 0s 3276910e-09 1s 1s 3276990e-09 0s 0s 3279510e-09 0s 0s 3287150e-09 1s 1s 3287230e-09 0s 0s 3289790e-09 0s 0s 3297390e-09 1s 1s 3297470e-09 0s 0s 3300070e-09 0s 0s 3307630e-09 1s 1s 3307710e-09 0s 0s 3310350e-09 0s 0s 3317870e-09 1s 1s 3317950e-09 0s 0s 3320630e-09 0s 0s 3328110e-09 1s 1s 3328190e-09 0s 0s 3330910e-09 0s 0s 3338350e-09 1s 1s 3338430e-09 0s 0s 3341190e-09 0s 0s 3348590e-09 1s 1s 3348670e-09 0s 0s 3351470e-09 0s 0s 3358830e-09 1s 1s 3358910e-09 0s 0s 3361750e-09 0s 0s 3369070e-09 1s 1s 3369150e-09 0s 0s 3372030e-09 0s 0s 3379310e-09 1s 1s 3379390e-09 0s 0s 3382310e-09 0s 0s 3389550e-09 1s 1s 3389630e-09 0s 0s 3392590e-09 0s 0s 3399790e-09 1s 1s 3399870e-09 0s 0s 3402870e-09 0s 0s 3410030e-09 1s 1s 3410110e-09 0s 0s 3413150e-09 0s 0s 3420270e-09 1s 1s 3420350e-09 0s 0s 3423430e-09 0s 0s 3430510e-09 1s 1s 3430590e-09 0s 0s 3433710e-09 0s 0s 3440750e-09 1s 1s 3440830e-09 0s 0s 3443990e-09 0s 0s 3450990e-09 1s 1s 3451070e-09 0s 0s 3454270e-09 0s 0s 3461230e-09 1s 1s 3461310e-09 0s 0s 3464550e-09 0s 0s 3471470e-09 1s 1s 3471550e-09 0s 0s 3474830e-09 0s 0s 3481710e-09 1s 1s 3481790e-09 0s 0s 3485110e-09 0s 0s 3491950e-09 1s 1s 3492030e-09 0s 0s 3495390e-09 0s 0s 3502190e-09 1s 1s 3502270e-09 0s 0s 3505670e-09 0s 0s 3512430e-09 1s 1s 3512510e-09 0s 0s 3515950e-09 0s 0s 3522670e-09 1s 1s 3522750e-09 0s 0s 3526230e-09 0s 0s 3532910e-09 1s 1s 3532990e-09 0s 0s 3536510e-09 0s 0s 3543150e-09 1s 1s 3543230e-09 0s 0s 3546790e-09 0s 0s 3553390e-09 1s 1s 3553470e-09 0s 0s 3557070e-09 0s 0s 3563630e-09 1s 1s 3563710e-09 0s 0s 3567350e-09 0s 0s 3573870e-09 1s 1s 3573950e-09 0s 0s 3577630e-09 0s 0s 3584110e-09 1s 1s 3584190e-09 0s 0s 3587910e-09 0s 0s 3594350e-09 1s 1s 3594430e-09 0s 0s 3598190e-09 0s 0s 3604590e-09 1s 1s 3604670e-09 0s 0s 3608470e-09 0s 0s 3614830e-09 1s 1s 3614910e-09 0s 0s 3618750e-09 0s 0s 3625070e-09 1s 1s 3625150e-09 0s 0s 3629030e-09 0s 0s 3635310e-09 1s 1s 3635390e-09 0s 0s 3639310e-09 0s 0s 3645550e-09 1s 1s 3645630e-09 0s 0s 3649590e-09 0s 0s 3655790e-09 1s 1s 3655870e-09 0s 0s 3659870e-09 0s 0s 3666030e-09 1s 1s 3666110e-09 0s 0s 3670150e-09 0s 0s 3676270e-09 1s 1s 3676350e-09 0s 0s 3680430e-09 0s 0s 3686510e-09 1s 1s 3686590e-09 0s 0s 3690710e-09 0s 0s 3696750e-09 1s 1s 3696830e-09 0s 0s 3700990e-09 0s 0s 3706990e-09 1s 1s 3707070e-09 0s 0s 3711270e-09 0s 0s 3717230e-09 1s 1s 3717310e-09 0s 0s 3721550e-09 0s 0s 3727470e-09 1s 1s 3727550e-09 0s 0s 3731830e-09 0s 0s 3737710e-09 1s 1s 3737790e-09 0s 0s 3742110e-09 0s 0s 3747950e-09 1s 1s 3748030e-09 0s 0s 3752390e-09 0s 0s 3758190e-09 1s 1s 3758270e-09 0s 0s 3762670e-09 0s 0s 3768430e-09 1s 1s 3768510e-09 0s 0s 3772950e-09 0s 0s 3778670e-09 1s 1s 3778750e-09 0s 0s 3783230e-09 0s 0s 3788910e-09 1s 1s 3788990e-09 0s 0s 3793510e-09 0s 0s 3799150e-09 1s 1s 3799230e-09 0s 0s 3803790e-09 0s 0s 3809390e-09 1s 1s 3809470e-09 0s 0s 3814070e-09 0s 0s 3819630e-09 1s 1s 3819710e-09 0s 0s 3824350e-09 0s 0s 3829870e-09 1s 1s 3829950e-09 0s 0s 3834630e-09 0s 0s 3840110e-09 1s 1s 3840190e-09 0s 0s 3844910e-09 0s 0s 3850350e-09 1s 1s 3850430e-09 0s 0s 3855190e-09 0s 0s 3860590e-09 1s 1s 3860670e-09 0s 0s 3865470e-09 0s 0s 3870830e-09 1s 1s 3870910e-09 0s 0s 3875750e-09 0s 0s 3881070e-09 1s 1s 3881150e-09 0s 0s 3886030e-09 0s 0s 3891310e-09 1s 1s 3891390e-09 0s 0s 3896310e-09 0s 0s 3901550e-09 1s 1s 3901630e-09 0s 0s 3906590e-09 0s 0s 3911790e-09 1s 1s 3911870e-09 0s 0s 3916870e-09 0s 0s 3922030e-09 1s 1s 3922110e-09 0s 0s 3927150e-09 0s 0s 3932270e-09 1s 1s 3932350e-09 0s 0s 3937430e-09 0s 0s 3942510e-09 1s 1s 3942590e-09 0s 0s 3947710e-09 0s 0s 3952750e-09 1s 1s 3952830e-09 0s 0s 3957990e-09 0s 0s 3962990e-09 1s 1s 3963070e-09 0s 0s 3968270e-09 0s 0s 3973230e-09 1s 1s 3973310e-09 0s 0s 3978550e-09 0s 0s 3983470e-09 1s 1s 3983550e-09 0s 0s 3988830e-09 0s 0s 3993710e-09 1s 1s 3993790e-09 0s 0s 3999110e-09 0s 0s 4003950e-09 1s 1s 4004030e-09 0s 0s 4009390e-09 0s 0s 4014190e-09 1s 1s 4014270e-09 0s 0s 4019670e-09 0s 0s 4024430e-09 1s 1s 4024510e-09 0s 0s 4029950e-09 0s 0s 4034670e-09 1s 1s 4034750e-09 0s 0s 4040230e-09 0s 0s 4044910e-09 1s 1s 4044990e-09 0s 0s 4050510e-09 0s 0s 4055150e-09 1s 1s 4055230e-09 0s 0s 4060790e-09 0s 0s 4065390e-09 1s 1s 4065470e-09 0s 0s 4071070e-09 0s 0s 4075630e-09 1s 1s 4075710e-09 0s 0s 4081350e-09 0s 0s 4085870e-09 1s 1s 4085950e-09 0s 0s 4091630e-09 0s 0s 4096110e-09 1s 1s 4096190e-09 0s 0s 4101910e-09 0s 0s 4106350e-09 1s 1s 4106430e-09 0s 0s 4112190e-09 0s 0s 4116590e-09 1s 1s 4116670e-09 0s 0s 4122470e-09 0s 0s 4126830e-09 1s 1s 4126910e-09 0s 0s 4132750e-09 0s 0s 4137070e-09 1s 1s 4137150e-09 0s 0s 4143030e-09 0s 0s 4147310e-09 1s 1s 4147390e-09 0s 0s 4153310e-09 0s 0s 4157550e-09 1s 1s 4157630e-09 0s 0s 4163590e-09 0s 0s 4167790e-09 1s 1s 4167870e-09 0s 0s 4173870e-09 0s 0s 4178030e-09 1s 1s 4178110e-09 0s 0s 4184150e-09 0s 0s 4188270e-09 1s 1s 4188350e-09 0s 0s 4194430e-09 0s 0s 4198510e-09 1s 1s 4198590e-09 0s 0s 4204710e-09 0s 0s 4208750e-09 1s 1s 4208830e-09 0s 0s 4214990e-09 0s 0s 4218990e-09 1s 1s 4219070e-09 0s 0s 4225270e-09 0s 0s 4229230e-09 1s 1s 4229310e-09 0s 0s 4235550e-09 0s 0s 4239470e-09 1s 1s 4239550e-09 0s 0s 4245830e-09 0s 0s 4249710e-09 1s 1s 4249790e-09 0s 0s 4256110e-09 0s 0s 4259950e-09 1s 1s 4260030e-09 0s 0s 4266390e-09 0s 0s 4270190e-09 1s 1s 4270270e-09 0s 0s 4276670e-09 0s 0s 4280430e-09 1s 1s 4280510e-09 0s 0s 4286950e-09 0s 0s 4290670e-09 1s 1s 4290750e-09 0s 0s 4297230e-09 0s 0s 4300910e-09 1s 1s 4300990e-09 0s 0s 4307510e-09 0s 0s 4311150e-09 1s 1s 4311230e-09 0s 0s 4317790e-09 0s 0s 4321390e-09 1s 1s 4321470e-09 0s 0s 4328070e-09 0s 0s 4331630e-09 1s 1s 4331710e-09 0s 0s 4338350e-09 0s 0s 4341870e-09 1s 1s 4341950e-09 0s 0s 4348630e-09 0s 0s 4352110e-09 1s 1s 4352190e-09 0s 0s 4358910e-09 0s 0s 4362350e-09 1s 1s 4362430e-09 0s 0s 4369190e-09 0s 0s 4372590e-09 1s 1s 4372670e-09 0s 0s 4379470e-09 0s 0s 4382830e-09 1s 1s 4382910e-09 0s 0s 4389750e-09 0s 0s 4393070e-09 1s 1s 4393150e-09 0s 0s 4400030e-09 0s 0s 4403310e-09 1s 1s 4403390e-09 0s 0s 4410310e-09 0s 0s 4413550e-09 1s 1s 4413630e-09 0s 0s 4420590e-09 0s 0s 4423790e-09 1s 1s 4423870e-09 0s 0s 4430870e-09 0s 0s 4434030e-09 1s 1s 4434110e-09 0s 0s 4441150e-09 0s 0s 4444270e-09 1s 1s 4444350e-09 0s 0s 4451430e-09 0s 0s 4454510e-09 1s 1s 4454590e-09 0s 0s 4461710e-09 0s 0s 4464750e-09 1s 1s 4464830e-09 0s 0s 4471990e-09 0s 0s 4474990e-09 1s 1s 4475070e-09 0s 0s 4482270e-09 0s 0s 4485230e-09 1s 1s 4485310e-09 0s 0s 4492550e-09 0s 0s 4495470e-09 1s 1s 4495550e-09 0s 0s 4502830e-09 0s 0s 4505710e-09 1s 1s 4505790e-09 0s 0s 4513110e-09 0s 0s 4515950e-09 1s 1s 4516030e-09 0s 0s 4523390e-09 0s 0s 4526190e-09 1s 1s 4526270e-09 0s 0s 4533670e-09 0s 0s 4536430e-09 1s 1s 4536510e-09 0s 0s 4543950e-09 0s 0s 4546670e-09 1s 1s 4546750e-09 0s 0s 4554230e-09 0s 0s 4556910e-09 1s 1s 4556990e-09 0s 0s 4564510e-09 0s 0s 4567150e-09 1s 1s 4567230e-09 0s 0s 4574790e-09 0s 0s 4577390e-09 1s 1s 4577470e-09 0s 0s 4585070e-09 0s 0s 4587630e-09 1s 1s 4587710e-09 0s 0s 4595350e-09 0s 0s 4597870e-09 1s 1s 4597950e-09 0s 0s 4605630e-09 0s 0s 4608110e-09 1s 1s 4608190e-09 0s 0s 4615910e-09 0s 0s 4618350e-09 1s 1s 4618430e-09 0s 0s 4626190e-09 0s 0s 4628590e-09 1s 1s 4628670e-09 0s 0s 4636470e-09 0s 0s 4638830e-09 1s 1s 4638910e-09 0s 0s 4646750e-09 0s 0s 4649070e-09 1s 1s 4649150e-09 0s 0s 4657030e-09 0s 0s 4659310e-09 1s 1s 4659390e-09 0s 0s 4667310e-09 0s 0s 4669550e-09 1s 1s 4669630e-09 0s 0s 4677590e-09 0s 0s 4679790e-09 1s 1s 4679870e-09 0s 0s 4687870e-09 0s 0s 4690030e-09 1s 1s 4690110e-09 0s 0s 4698150e-09 0s 0s 4700270e-09 1s 1s 4700350e-09 0s 0s 4708430e-09 0s 0s 4710510e-09 1s 1s 4710590e-09 0s 0s 4718710e-09 0s 0s 4720750e-09 1s 1s 4720830e-09 0s 0s 4728990e-09 0s 0s 4730990e-09 1s 1s 4731070e-09 0s 0s 4739270e-09 0s 0s 4741230e-09 1s 1s 4741310e-09 0s 0s 4749550e-09 0s 0s 4751470e-09 1s 1s 4751550e-09 0s 0s 4759830e-09 0s 0s 4761710e-09 1s 1s 4761790e-09 0s 0s 4770110e-09 0s 0s 4771950e-09 1s 1s 4772030e-09 0s 0s 4780390e-09 0s 0s 4782190e-09 1s 1s 4782270e-09 0s 0s 4790670e-09 0s 0s 4792430e-09 1s 1s 4792510e-09 0s 0s 4800950e-09 0s 0s 4802670e-09 1s 1s 4802750e-09 0s 0s 4811230e-09 0s 0s 4812910e-09 1s 1s 4812990e-09 0s 0s 4821510e-09 0s 0s 4823150e-09 1s 1s 4823230e-09 0s 0s 4831790e-09 0s 0s 4833390e-09 1s 1s 4833470e-09 0s 0s 4842070e-09 0s 0s 4843630e-09 1s 1s 4843710e-09 0s 0s 4852350e-09 0s 0s 4853870e-09 1s 1s 4853950e-09 0s 0s 4862630e-09 0s 0s 4864110e-09 1s 1s 4864190e-09 0s 0s 4872910e-09 0s 0s 4874350e-09 1s 1s 4874430e-09 0s 0s 4883190e-09 0s 0s 4884590e-09 1s 1s 4884670e-09 0s 0s 4893470e-09 0s 0s 4894830e-09 1s 1s 4894910e-09 0s 0s 4903750e-09 0s 0s 4905070e-09 1s 1s 4905150e-09 0s 0s 4914030e-09 0s 0s 4915310e-09 1s 1s 4915390e-09 0s 0s 4924310e-09 0s 0s 4925550e-09 1s 1s 4925630e-09 0s 0s 4934590e-09 0s 0s 4935790e-09 1s 1s 4935870e-09 0s 0s 4944870e-09 0s 0s 4946030e-09 1s 1s 4946110e-09 0s 0s 4955150e-09 0s 0s 4956270e-09 1s 1s 4956350e-09 0s 0s 4965430e-09 0s 0s 4966510e-09 1s 1s 4966590e-09 0s 0s 4975710e-09 0s 0s 4976750e-09 1s 1s 4976830e-09 0s 0s 4985990e-09 0s 0s 4986990e-09 1s 1s 4987070e-09 0s 0s 4996270e-09 0s 0s 4997230e-09 1s 1s 4997310e-09 0s 0s 5006550e-09 0s 0s 5007470e-09 1s 1s 5007550e-09 0s 0s 5016830e-09 0s 0s 5017710e-09 1s 1s 5017790e-09 0s 0s 5027110e-09 0s 0s 5027950e-09 1s 1s 5028030e-09 0s 0s 5037390e-09 0s 0s 5038190e-09 1s 1s 5038270e-09 0s 0s 5047670e-09 0s 0s 5048430e-09 1s 1s 5048510e-09 0s 0s 5057950e-09 0s 0s 5058670e-09 1s 1s 5058750e-09 0s 0s 5068230e-09 0s 0s 5068910e-09 1s 1s 5068990e-09 0s 0s 5078510e-09 0s 0s 5079150e-09 1s 1s 5079230e-09 0s 0s 5088790e-09 0s 0s 5089390e-09 1s 1s 5089470e-09 0s 0s 5099070e-09 0s 0s 5099630e-09 1s 1s 5099710e-09 0s 0s 5109350e-09 0s 0s 5109870e-09 1s 1s 5109950e-09 0s 0s 5119630e-09 0s 0s 5120110e-09 1s 1s 5120190e-09 0s 0s 5129910e-09 0s 0s 5130350e-09 1s 1s 5130430e-09 0s 0s 5140190e-09 0s 0s 5140590e-09 1s 1s 5140670e-09 0s 0s 5150470e-09 0s 0s 5150830e-09 1s 1s 5150910e-09 0s 0s 5160750e-09 0s 0s 5161070e-09 1s 1s 5161150e-09 0s 0s 5171030e-09 0s 0s 5171310e-09 1s 1s 5171390e-09 0s 0s 5181310e-09 0s 0s 5181550e-09 1s 1s 5181630e-09 0s 0s 5191590e-09 0s 0s 5191790e-09 1s 1s 5191870e-09 0s 0s 5201870e-09 0s 0s 5202030e-09 1s 1s 5202110e-09 0s 0s 5212150e-09 0s 0s 5212270e-09 1s 1s 5212350e-09 0s 0s 5222430e-09 0s 0s 5222510e-09 1s 1s 5222590e-09 0s 0s 5232710e-09 0s 0s 5232750e-09 1s 1s 5232830e-09 0s 0s 5242990e-09 1s 1s 5243030e-09 1s 1s 5243110e-09 0s 0s 5253230e-09 1s 1s 5253310e-09 1s 1s 5253350e-09 0s 0s 5263470e-09 1s 1s 5263590e-09 0s 0s 5273710e-09 1s 1s 5273830e-09 0s 0s 5273870e-09 0s 0s 5283950e-09 1s 1s 5284070e-09 0s 0s 5284150e-09 0s 0s 5294190e-09 1s 1s 5294310e-09 0s 0s 5294430e-09 0s 0s 5304430e-09 1s 1s 5304550e-09 0s 0s 5304710e-09 0s 0s 5314670e-09 1s 1s 5314790e-09 0s 0s 5314990e-09 0s 0s 5324910e-09 1s 1s 5325030e-09 0s 0s 5325270e-09 0s 0s 5335150e-09 1s 1s 5335270e-09 0s 0s 5335550e-09 0s 0s 5345390e-09 1s 1s 5345510e-09 0s 0s 5345830e-09 0s 0s 5355630e-09 1s 1s 5355750e-09 0s 0s 5356110e-09 0s 0s 5365870e-09 1s 1s 5365990e-09 0s 0s 5366390e-09 0s 0s 5376110e-09 1s 1s 5376230e-09 0s 0s 5376670e-09 0s 0s 5386350e-09 1s 1s 5386470e-09 0s 0s 5386950e-09 0s 0s 5396590e-09 1s 1s 5396710e-09 0s 0s 5397230e-09 0s 0s 5406830e-09 1s 1s 5406950e-09 0s 0s 5407510e-09 0s 0s 5417070e-09 1s 1s 5417190e-09 0s 0s 5417790e-09 0s 0s 5427310e-09 1s 1s 5427430e-09 0s 0s 5428070e-09 0s 0s 5437550e-09 1s 1s 5437670e-09 0s 0s 5438350e-09 0s 0s 5447790e-09 1s 1s 5447910e-09 0s 0s 5448630e-09 0s 0s 5458030e-09 1s 1s 5458150e-09 0s 0s 5458910e-09 0s 0s 5468270e-09 1s 1s 5468390e-09 0s 0s 5469190e-09 0s 0s 5478510e-09 1s 1s 5478630e-09 0s 0s 5479470e-09 0s 0s 5488750e-09 1s 1s 5488870e-09 0s 0s 5489750e-09 0s 0s 5498990e-09 1s 1s 5499110e-09 0s 0s 5500030e-09 0s 0s 5509230e-09 1s 1s 5509350e-09 0s 0s 5510310e-09 0s 0s 5519470e-09 1s 1s 5519590e-09 0s 0s 5520590e-09 0s 0s 5529710e-09 1s 1s 5529830e-09 0s 0s 5530870e-09 0s 0s 5539950e-09 1s 1s 5540070e-09 0s 0s 5541150e-09 0s 0s 5550190e-09 1s 1s 5550310e-09 0s 0s 5551430e-09 0s 0s 5560430e-09 1s 1s 5560550e-09 0s 0s 5561710e-09 0s 0s 5570670e-09 1s 1s 5570790e-09 0s 0s 5571990e-09 0s 0s 5580910e-09 1s 1s 5581030e-09 0s 0s 5582270e-09 0s 0s 5591150e-09 1s 1s 5591270e-09 0s 0s 5592550e-09 0s 0s 5601390e-09 1s 1s 5601510e-09 0s 0s 5602830e-09 0s 0s 5611630e-09 1s 1s 5611750e-09 0s 0s 5613110e-09 0s 0s 5621870e-09 1s 1s 5621990e-09 0s 0s 5623390e-09 0s 0s 5632110e-09 1s 1s 5632230e-09 0s 0s 5633670e-09 0s 0s 5642350e-09 1s 1s 5642470e-09 0s 0s 5643950e-09 0s 0s 5652590e-09 1s 1s 5652710e-09 0s 0s 5654230e-09 0s 0s 5662830e-09 1s 1s 5662950e-09 0s 0s 5664510e-09 0s 0s 5673070e-09 1s 1s 5673190e-09 0s 0s 5674790e-09 0s 0s 5683310e-09 1s 1s 5683430e-09 0s 0s 5685070e-09 0s 0s 5693550e-09 1s 1s 5693670e-09 0s 0s 5695350e-09 0s 0s 5703790e-09 1s 1s 5703910e-09 0s 0s 5705630e-09 0s 0s 5714030e-09 1s 1s 5714150e-09 0s 0s 5715910e-09 0s 0s 5724270e-09 1s 1s 5724390e-09 0s 0s 5726190e-09 0s 0s 5734510e-09 1s 1s 5734630e-09 0s 0s 5736470e-09 0s 0s 5744750e-09 1s 1s 5744870e-09 0s 0s 5746750e-09 0s 0s 5754990e-09 1s 1s 5755110e-09 0s 0s 5757030e-09 0s 0s 5765230e-09 1s 1s 5765350e-09 0s 0s 5767310e-09 0s 0s 5775470e-09 1s 1s 5775590e-09 0s 0s 5777590e-09 0s 0s 5785710e-09 1s 1s 5785830e-09 0s 0s 5787870e-09 0s 0s 5795950e-09 1s 1s 5796070e-09 0s 0s 5798150e-09 0s 0s 5806190e-09 1s 1s 5806310e-09 0s 0s 5808430e-09 0s 0s 5816430e-09 1s 1s 5816550e-09 0s 0s 5818710e-09 0s 0s 5826670e-09 1s 1s 5826790e-09 0s 0s 5828990e-09 0s 0s 5836910e-09 1s 1s 5837030e-09 0s 0s 5839270e-09 0s 0s 5847150e-09 1s 1s 5847270e-09 0s 0s 5849550e-09 0s 0s 5857390e-09 1s 1s 5857510e-09 0s 0s 5859830e-09 0s 0s 5867630e-09 1s 1s 5867750e-09 0s 0s 5870110e-09 0s 0s 5877870e-09 1s 1s 5877990e-09 0s 0s 5880390e-09 0s 0s 5888110e-09 1s 1s 5888230e-09 0s 0s 5890670e-09 0s 0s 5898350e-09 1s 1s 5898470e-09 0s 0s 5900950e-09 0s 0s 5908590e-09 1s 1s 5908710e-09 0s 0s 5911230e-09 0s 0s 5918830e-09 1s 1s 5918950e-09 0s 0s 5921510e-09 0s 0s 5929070e-09 1s 1s 5929190e-09 0s 0s 5931790e-09 0s 0s 5939310e-09 1s 1s 5939430e-09 0s 0s 5942070e-09 0s 0s 5949550e-09 1s 1s 5949670e-09 0s 0s 5952350e-09 0s 0s 5959790e-09 1s 1s 5959910e-09 0s 0s 5962630e-09 0s 0s 5970030e-09 1s 1s 5970150e-09 0s 0s 5972910e-09 0s 0s 5980270e-09 1s 1s 5980390e-09 0s 0s 5983190e-09 0s 0s 5990510e-09 1s 1s 5990630e-09 0s 0s 5993470e-09 0s 0s 6000750e-09 1s 1s 6000870e-09 0s 0s 6003750e-09 0s 0s 6010990e-09 1s 1s 6011110e-09 0s 0s 6014030e-09 0s 0s 6021230e-09 1s 1s 6021350e-09 0s 0s 6024310e-09 0s 0s 6031470e-09 1s 1s 6031590e-09 0s 0s 6034590e-09 0s 0s 6041710e-09 1s 1s 6041830e-09 0s 0s 6044870e-09 0s 0s 6051950e-09 1s 1s 6052070e-09 0s 0s 6055150e-09 0s 0s 6062190e-09 1s 1s 6062310e-09 0s 0s 6065430e-09 0s 0s 6072430e-09 1s 1s 6072550e-09 0s 0s 6075710e-09 0s 0s 6082670e-09 1s 1s 6082790e-09 0s 0s 6085990e-09 0s 0s 6092910e-09 1s 1s 6093030e-09 0s 0s 6096270e-09 0s 0s 6103150e-09 1s 1s 6103270e-09 0s 0s 6106550e-09 0s 0s 6113390e-09 1s 1s 6113510e-09 0s 0s 6116830e-09 0s 0s 6123630e-09 1s 1s 6123750e-09 0s 0s 6127110e-09 0s 0s 6133870e-09 1s 1s 6133990e-09 0s 0s 6137390e-09 0s 0s 6144110e-09 1s 1s 6144230e-09 0s 0s 6147670e-09 0s 0s 6154350e-09 1s 1s 6154470e-09 0s 0s 6157950e-09 0s 0s 6164590e-09 1s 1s 6164710e-09 0s 0s 6168230e-09 0s 0s 6174830e-09 1s 1s 6174950e-09 0s 0s 6178510e-09 0s 0s 6185070e-09 1s 1s 6185190e-09 0s 0s 6188790e-09 0s 0s 6195310e-09 1s 1s 6195430e-09 0s 0s 6199070e-09 0s 0s 6205550e-09 1s 1s 6205670e-09 0s 0s 6209350e-09 0s 0s 6215790e-09 1s 1s 6215910e-09 0s 0s 6219630e-09 0s 0s 6226030e-09 1s 1s 6226150e-09 0s 0s 6229910e-09 0s 0s 6236270e-09 1s 1s 6236390e-09 0s 0s 6240190e-09 0s 0s 6246510e-09 1s 1s 6246630e-09 0s 0s 6250470e-09 0s 0s 6256750e-09 1s 1s 6256870e-09 0s 0s 6260750e-09 0s 0s 6266990e-09 1s 1s 6267110e-09 0s 0s 6271030e-09 0s 0s 6277230e-09 1s 1s 6277350e-09 0s 0s 6281310e-09 0s 0s 6287470e-09 1s 1s 6287590e-09 0s 0s 6291590e-09 0s 0s 6297710e-09 1s 1s 6297830e-09 0s 0s 6301870e-09 0s 0s 6307950e-09 1s 1s 6308070e-09 0s 0s 6312150e-09 0s 0s 6318190e-09 1s 1s 6318310e-09 0s 0s 6322430e-09 0s 0s 6328430e-09 1s 1s 6328550e-09 0s 0s 6332710e-09 0s 0s 6338670e-09 1s 1s 6338790e-09 0s 0s 6342990e-09 0s 0s 6348910e-09 1s 1s 6349030e-09 0s 0s 6353270e-09 0s 0s 6359150e-09 1s 1s 6359270e-09 0s 0s 6363550e-09 0s 0s 6369390e-09 1s 1s 6369510e-09 0s 0s 6373830e-09 0s 0s 6379630e-09 1s 1s 6379750e-09 0s 0s 6384110e-09 0s 0s 6389870e-09 1s 1s 6389990e-09 0s 0s 6394390e-09 0s 0s 6400110e-09 1s 1s 6400230e-09 0s 0s 6404670e-09 0s 0s 6410350e-09 1s 1s 6410470e-09 0s 0s 6414950e-09 0s 0s 6420590e-09 1s 1s 6420710e-09 0s 0s 6425230e-09 0s 0s 6430830e-09 1s 1s 6430950e-09 0s 0s 6435510e-09 0s 0s 6441070e-09 1s 1s 6441190e-09 0s 0s 6445790e-09 0s 0s 6451310e-09 1s 1s 6451430e-09 0s 0s 6456070e-09 0s 0s 6461550e-09 1s 1s 6461670e-09 0s 0s 6466350e-09 0s 0s 6471790e-09 1s 1s 6471910e-09 0s 0s 6476630e-09 0s 0s 6482030e-09 1s 1s 6482150e-09 0s 0s 6486910e-09 0s 0s 6492270e-09 1s 1s 6492390e-09 0s 0s 6497190e-09 0s 0s 6502510e-09 1s 1s 6502630e-09 0s 0s 6507470e-09 0s 0s 6512750e-09 1s 1s 6512870e-09 0s 0s 6517750e-09 0s 0s 6522990e-09 1s 1s 6523110e-09 0s 0s 6528030e-09 0s 0s 6533230e-09 1s 1s 6533350e-09 0s 0s 6538310e-09 0s 0s 6543470e-09 1s 1s 6543590e-09 0s 0s 6548590e-09 0s 0s 6553710e-09 1s 1s 6553830e-09 0s 0s 6558870e-09 0s 0s 6563950e-09 1s 1s 6564070e-09 0s 0s 6569150e-09 0s 0s 6574190e-09 1s 1s 6574310e-09 0s 0s 6579430e-09 0s 0s 6584430e-09 1s 1s 6584550e-09 0s 0s 6589710e-09 0s 0s 6594670e-09 1s 1s 6594790e-09 0s 0s 6599990e-09 0s 0s 6604910e-09 1s 1s 6605030e-09 0s 0s 6610270e-09 0s 0s 6615150e-09 1s 1s 6615270e-09 0s 0s 6620550e-09 0s 0s 6625390e-09 1s 1s 6625510e-09 0s 0s 6630830e-09 0s 0s 6635630e-09 1s 1s 6635750e-09 0s 0s 6641110e-09 0s 0s 6645870e-09 1s 1s 6645990e-09 0s 0s 6651390e-09 0s 0s 6656110e-09 1s 1s 6656230e-09 0s 0s 6661670e-09 0s 0s 6666350e-09 1s 1s 6666470e-09 0s 0s 6671950e-09 0s 0s 6676590e-09 1s 1s 6676710e-09 0s 0s 6682230e-09 0s 0s 6686830e-09 1s 1s 6686950e-09 0s 0s 6692510e-09 0s 0s 6697070e-09 1s 1s 6697190e-09 0s 0s 6702790e-09 0s 0s 6707310e-09 1s 1s 6707430e-09 0s 0s 6713070e-09 0s 0s 6717550e-09 1s 1s 6717670e-09 0s 0s 6723350e-09 0s 0s 6727790e-09 1s 1s 6727910e-09 0s 0s 6733630e-09 0s 0s 6738030e-09 1s 1s 6738150e-09 0s 0s 6743910e-09 0s 0s 6748270e-09 1s 1s 6748390e-09 0s 0s 6754190e-09 0s 0s 6758510e-09 1s 1s 6758630e-09 0s 0s 6764470e-09 0s 0s 6768750e-09 1s 1s 6768870e-09 0s 0s 6774750e-09 0s 0s 6778990e-09 1s 1s 6779110e-09 0s 0s 6785030e-09 0s 0s 6789230e-09 1s 1s 6789350e-09 0s 0s 6795310e-09 0s 0s 6799470e-09 1s 1s 6799590e-09 0s 0s 6805590e-09 0s 0s 6809710e-09 1s 1s 6809830e-09 0s 0s 6815870e-09 0s 0s 6819950e-09 1s 1s 6820070e-09 0s 0s 6826150e-09 0s 0s 6830190e-09 1s 1s 6830310e-09 0s 0s 6836430e-09 0s 0s 6840430e-09 1s 1s 6840550e-09 0s 0s 6846710e-09 0s 0s 6850670e-09 1s 1s 6850790e-09 0s 0s 6856990e-09 0s 0s 6860910e-09 1s 1s 6861030e-09 0s 0s 6867270e-09 0s 0s 6871150e-09 1s 1s 6871270e-09 0s 0s 6877550e-09 0s 0s 6881390e-09 1s 1s 6881510e-09 0s 0s 6887830e-09 0s 0s 6891630e-09 1s 1s 6891750e-09 0s 0s 6898110e-09 0s 0s 6901870e-09 1s 1s 6901990e-09 0s 0s 6908390e-09 0s 0s 6912110e-09 1s 1s 6912230e-09 0s 0s 6918670e-09 0s 0s 6922350e-09 1s 1s 6922470e-09 0s 0s 6928950e-09 0s 0s 6932590e-09 1s 1s 6932710e-09 0s 0s 6939230e-09 0s 0s 6942830e-09 1s 1s 6942950e-09 0s 0s 6949510e-09 0s 0s 6953070e-09 1s 1s 6953190e-09 0s 0s 6959790e-09 0s 0s 6963310e-09 1s 1s 6963430e-09 0s 0s 6970070e-09 0s 0s 6973550e-09 1s 1s 6973670e-09 0s 0s 6980350e-09 0s 0s 6983790e-09 1s 1s 6983910e-09 0s 0s 6990630e-09 0s 0s 6994030e-09 1s 1s 6994150e-09 0s 0s 7000910e-09 0s 0s 7004270e-09 1s 1s 7004390e-09 0s 0s 7011190e-09 0s 0s 7014510e-09 1s 1s 7014630e-09 0s 0s 7021470e-09 0s 0s 7024750e-09 1s 1s 7024870e-09 0s 0s 7031750e-09 0s 0s 7034990e-09 1s 1s 7035110e-09 0s 0s 7042030e-09 0s 0s 7045230e-09 1s 1s 7045350e-09 0s 0s 7052310e-09 0s 0s 7055470e-09 1s 1s 7055590e-09 0s 0s 7062590e-09 0s 0s 7065710e-09 1s 1s 7065830e-09 0s 0s 7072870e-09 0s 0s 7075950e-09 1s 1s 7076070e-09 0s 0s 7083150e-09 0s 0s 7086190e-09 1s 1s 7086310e-09 0s 0s 7093430e-09 0s 0s 7096430e-09 1s 1s 7096550e-09 0s 0s 7103710e-09 0s 0s 7106670e-09 1s 1s 7106790e-09 0s 0s 7113990e-09 0s 0s 7116910e-09 1s 1s 7117030e-09 0s 0s 7124270e-09 0s 0s 7127150e-09 1s 1s 7127270e-09 0s 0s 7134550e-09 0s 0s 7137390e-09 1s 1s 7137510e-09 0s 0s 7144830e-09 0s 0s 7147630e-09 1s 1s 7147750e-09 0s 0s 7155110e-09 0s 0s 7157870e-09 1s 1s 7157990e-09 0s 0s 7165390e-09 0s 0s 7168110e-09 1s 1s 7168230e-09 0s 0s 7175670e-09 0s 0s 7178350e-09 1s 1s 7178470e-09 0s 0s 7185950e-09 0s 0s 7188590e-09 1s 1s 7188710e-09 0s 0s 7196230e-09 0s 0s 7198830e-09 1s 1s 7198950e-09 0s 0s 7206510e-09 0s 0s 7209070e-09 1s 1s 7209190e-09 0s 0s 7216790e-09 0s 0s 7219310e-09 1s 1s 7219430e-09 0s 0s 7227070e-09 0s 0s 7229550e-09 1s 1s 7229670e-09 0s 0s 7237350e-09 0s 0s 7239790e-09 1s 1s 7239910e-09 0s 0s 7247630e-09 0s 0s 7250030e-09 1s 1s 7250150e-09 0s 0s 7257910e-09 0s 0s 7260270e-09 1s 1s 7260390e-09 0s 0s 7268190e-09 0s 0s 7270510e-09 1s 1s 7270630e-09 0s 0s 7278470e-09 0s 0s 7280750e-09 1s 1s 7280870e-09 0s 0s 7288750e-09 0s 0s 7290990e-09 1s 1s 7291110e-09 0s 0s 7299030e-09 0s 0s 7301230e-09 1s 1s 7301350e-09 0s 0s 7309310e-09 0s 0s 7311470e-09 1s 1s 7311590e-09 0s 0s 7319590e-09 0s 0s 7321710e-09 1s 1s 7321830e-09 0s 0s 7329870e-09 0s 0s 7331950e-09 1s 1s 7332070e-09 0s 0s 7340150e-09 0s 0s 7342190e-09 1s 1s 7342310e-09 0s 0s 7350430e-09 0s 0s 7352430e-09 1s 1s 7352550e-09 0s 0s 7360710e-09 0s 0s 7362670e-09 1s 1s 7362790e-09 0s 0s 7370990e-09 0s 0s 7372910e-09 1s 1s 7373030e-09 0s 0s 7381270e-09 0s 0s 7383150e-09 1s 1s 7383270e-09 0s 0s 7391550e-09 0s 0s 7393390e-09 1s 1s 7393510e-09 0s 0s 7401830e-09 0s 0s 7403630e-09 1s 1s 7403750e-09 0s 0s 7412110e-09 0s 0s 7413870e-09 1s 1s 7413990e-09 0s 0s 7422390e-09 0s 0s 7424110e-09 1s 1s 7424230e-09 0s 0s 7432670e-09 0s 0s 7434350e-09 1s 1s 7434470e-09 0s 0s 7442950e-09 0s 0s 7444590e-09 1s 1s 7444710e-09 0s 0s 7453230e-09 0s 0s 7454830e-09 1s 1s 7454950e-09 0s 0s 7463510e-09 0s 0s 7465070e-09 1s 1s 7465190e-09 0s 0s 7473790e-09 0s 0s 7475310e-09 1s 1s 7475430e-09 0s 0s 7484070e-09 0s 0s 7485550e-09 1s 1s 7485670e-09 0s 0s 7494350e-09 0s 0s 7495790e-09 1s 1s 7495910e-09 0s 0s 7504630e-09 0s 0s 7506030e-09 1s 1s 7506150e-09 0s 0s 7514910e-09 0s 0s 7516270e-09 1s 1s 7516390e-09 0s 0s 7525190e-09 0s 0s 7526510e-09 1s 1s 7526630e-09 0s 0s 7535470e-09 0s 0s 7536750e-09 1s 1s 7536870e-09 0s 0s 7545750e-09 0s 0s 7546990e-09 1s 1s 7547110e-09 0s 0s 7556030e-09 0s 0s 7557230e-09 1s 1s 7557350e-09 0s 0s 7566310e-09 0s 0s 7567470e-09 1s 1s 7567590e-09 0s 0s 7576590e-09 0s 0s 7577710e-09 1s 1s 7577830e-09 0s 0s 7586870e-09 0s 0s 7587950e-09 1s 1s 7588070e-09 0s 0s 7597150e-09 0s 0s 7598190e-09 1s 1s 7598310e-09 0s 0s 7607430e-09 0s 0s 7608430e-09 1s 1s 7608550e-09 0s 0s 7617710e-09 0s 0s 7618670e-09 1s 1s 7618790e-09 0s 0s 7627990e-09 0s 0s 7628910e-09 1s 1s 7629030e-09 0s 0s 7638270e-09 0s 0s 7639150e-09 1s 1s 7639270e-09 0s 0s 7648550e-09 0s 0s 7649390e-09 1s 1s 7649510e-09 0s 0s 7658830e-09 0s 0s 7659630e-09 1s 1s 7659750e-09 0s 0s 7669110e-09 0s 0s 7669870e-09 1s 1s 7669990e-09 0s 0s 7679390e-09 0s 0s 7680110e-09 1s 1s 7680230e-09 0s 0s 7689670e-09 0s 0s 7690350e-09 1s 1s 7690470e-09 0s 0s 7699950e-09 0s 0s 7700590e-09 1s 1s 7700710e-09 0s 0s 7710230e-09 0s 0s 7710830e-09 1s 1s 7710950e-09 0s 0s 7720510e-09 0s 0s 7721070e-09 1s 1s 7721190e-09 0s 0s 7730790e-09 0s 0s 7731310e-09 1s 1s 7731430e-09 0s 0s 7741070e-09 0s 0s 7741550e-09 1s 1s 7741670e-09 0s 0s 7751350e-09 0s 0s 7751790e-09 1s 1s 7751910e-09 0s 0s 7761630e-09 0s 0s 7762030e-09 1s 1s 7762150e-09 0s 0s 7771910e-09 0s 0s 7772270e-09 1s 1s 7772390e-09 0s 0s 7782190e-09 0s 0s 7782510e-09 1s 1s 7782630e-09 0s 0s 7792470e-09 0s 0s 7792750e-09 1s 1s 7792870e-09 0s 0s 7802750e-09 0s 0s 7802990e-09 1s 1s 7803110e-09 0s 0s 7813030e-09 0s 0s 7813230e-09 1s 1s 7813350e-09 0s 0s 7823310e-09 0s 0s 7823470e-09 1s 1s 7823590e-09 0s 0s 7833590e-09 0s 0s 7833710e-09 1s 1s 7833830e-09 0s 0s 7843870e-09 0s 0s 7843950e-09 1s 1s 7844070e-09 0s 0s 7854150e-09 0s 0s 7854190e-09 1s 1s 7854310e-09 0s 0s 7864430e-09 1s 1s 7864470e-09 1s 1s 7864590e-09 0s 0s 7874670e-09 1s 1s 7874750e-09 1s 1s 7874830e-09 0s 0s 7884910e-09 1s 1s 7885030e-09 1s 1s 7885070e-09 0s 0s 7895150e-09 1s 1s 7895310e-09 0s 0s 7905390e-09 1s 1s 7905550e-09 0s 0s 7905590e-09 0s 0s 7915630e-09 1s 1s 7915790e-09 0s 0s 7915870e-09 0s 0s 7925870e-09 1s 1s 7926030e-09 0s 0s 7926150e-09 0s 0s 7936110e-09 1s 1s 7936270e-09 0s 0s 7936430e-09 0s 0s 7946350e-09 1s 1s 7946510e-09 0s 0s 7946710e-09 0s 0s 7956590e-09 1s 1s 7956750e-09 0s 0s 7956990e-09 0s 0s 7966830e-09 1s 1s 7966990e-09 0s 0s 7967270e-09 0s 0s 7977070e-09 1s 1s 7977230e-09 0s 0s 7977550e-09 0s 0s 7987310e-09 1s 1s 7987470e-09 0s 0s 7987830e-09 0s 0s 7997550e-09 1s 1s 7997710e-09 0s 0s 7998110e-09 0s 0s 8007790e-09 1s 1s 8007950e-09 0s 0s 8008390e-09 0s 0s 8018030e-09 1s 1s 8018190e-09 0s 0s 8018670e-09 0s 0s 8028270e-09 1s 1s 8028430e-09 0s 0s 8028950e-09 0s 0s 8038510e-09 1s 1s 8038670e-09 0s 0s 8039230e-09 0s 0s 8048750e-09 1s 1s 8048910e-09 0s 0s 8049510e-09 0s 0s 8058990e-09 1s 1s 8059150e-09 0s 0s 8059790e-09 0s 0s 8069230e-09 1s 1s 8069390e-09 0s 0s 8070070e-09 0s 0s 8079470e-09 1s 1s 8079630e-09 0s 0s 8080350e-09 0s 0s 8089710e-09 1s 1s 8089870e-09 0s 0s 8090630e-09 0s 0s 8099950e-09 1s 1s 8100110e-09 0s 0s 8100910e-09 0s 0s 8110190e-09 1s 1s 8110350e-09 0s 0s 8111190e-09 0s 0s 8120430e-09 1s 1s 8120590e-09 0s 0s 8121470e-09 0s 0s 8130670e-09 1s 1s 8130830e-09 0s 0s 8131750e-09 0s 0s 8140910e-09 1s 1s 8141070e-09 0s 0s 8142030e-09 0s 0s 8151150e-09 1s 1s 8151310e-09 0s 0s 8152310e-09 0s 0s 8161390e-09 1s 1s 8161550e-09 0s 0s 8162590e-09 0s 0s 8171630e-09 1s 1s 8171790e-09 0s 0s 8172870e-09 0s 0s 8181870e-09 1s 1s 8182030e-09 0s 0s 8183150e-09 0s 0s 8192110e-09 1s 1s 8192270e-09 0s 0s 8193430e-09 0s 0s 8202350e-09 1s 1s 8202510e-09 0s 0s 8203710e-09 0s 0s 8212590e-09 1s 1s 8212750e-09 0s 0s 8213990e-09 0s 0s 8222830e-09 1s 1s 8222990e-09 0s 0s 8224270e-09 0s 0s 8233070e-09 1s 1s 8233230e-09 0s 0s 8234550e-09 0s 0s 8243310e-09 1s 1s 8243470e-09 0s 0s 8244830e-09 0s 0s 8253550e-09 1s 1s 8253710e-09 0s 0s 8255110e-09 0s 0s 8263790e-09 1s 1s 8263950e-09 0s 0s 8265390e-09 0s 0s 8274030e-09 1s 1s 8274190e-09 0s 0s 8275670e-09 0s 0s 8284270e-09 1s 1s 8284430e-09 0s 0s 8285950e-09 0s 0s 8294510e-09 1s 1s 8294670e-09 0s 0s 8296230e-09 0s 0s 8304750e-09 1s 1s 8304910e-09 0s 0s 8306510e-09 0s 0s 8314990e-09 1s 1s 8315150e-09 0s 0s 8316790e-09 0s 0s 8325230e-09 1s 1s 8325390e-09 0s 0s 8327070e-09 0s 0s 8335470e-09 1s 1s 8335630e-09 0s 0s 8337350e-09 0s 0s 8345710e-09 1s 1s 8345870e-09 0s 0s 8347630e-09 0s 0s 8355950e-09 1s 1s 8356110e-09 0s 0s 8357910e-09 0s 0s 8366190e-09 1s 1s 8366350e-09 0s 0s 8368190e-09 0s 0s 8376430e-09 1s 1s 8376590e-09 0s 0s 8378470e-09 0s 0s 8386670e-09 1s 1s 8386830e-09 0s 0s 8388750e-09 0s 0s 8396910e-09 1s 1s 8397070e-09 0s 0s 8399030e-09 0s 0s 8407150e-09 1s 1s 8407310e-09 0s 0s 8409310e-09 0s 0s 8417390e-09 1s 1s 8417550e-09 0s 0s 8419590e-09 0s 0s 8427630e-09 1s 1s 8427790e-09 0s 0s 8429870e-09 0s 0s 8437870e-09 1s 1s 8438030e-09 0s 0s 8440150e-09 0s 0s 8448110e-09 1s 1s 8448270e-09 0s 0s 8450430e-09 0s 0s 8458350e-09 1s 1s 8458510e-09 0s 0s 8460710e-09 0s 0s 8468590e-09 1s 1s 8468750e-09 0s 0s 8470990e-09 0s 0s 8478830e-09 1s 1s 8478990e-09 0s 0s 8481270e-09 0s 0s 8489070e-09 1s 1s 8489230e-09 0s 0s 8491550e-09 0s 0s 8499310e-09 1s 1s 8499470e-09 0s 0s 8501830e-09 0s 0s 8509550e-09 1s 1s 8509710e-09 0s 0s 8512110e-09 0s 0s 8519790e-09 1s 1s 8519950e-09 0s 0s 8522390e-09 0s 0s 8530030e-09 1s 1s 8530190e-09 0s 0s 8532670e-09 0s 0s 8540270e-09 1s 1s 8540430e-09 0s 0s 8542950e-09 0s 0s 8550510e-09 1s 1s 8550670e-09 0s 0s 8553230e-09 0s 0s 8560750e-09 1s 1s 8560910e-09 0s 0s 8563510e-09 0s 0s 8570990e-09 1s 1s 8571150e-09 0s 0s 8573790e-09 0s 0s 8581230e-09 1s 1s 8581390e-09 0s 0s 8584070e-09 0s 0s 8591470e-09 1s 1s 8591630e-09 0s 0s 8594350e-09 0s 0s 8601710e-09 1s 1s 8601870e-09 0s 0s 8604630e-09 0s 0s 8611950e-09 1s 1s 8612110e-09 0s 0s 8614910e-09 0s 0s 8622190e-09 1s 1s 8622350e-09 0s 0s 8625190e-09 0s 0s 8632430e-09 1s 1s 8632590e-09 0s 0s 8635470e-09 0s 0s 8642670e-09 1s 1s 8642830e-09 0s 0s 8645750e-09 0s 0s 8652910e-09 1s 1s 8653070e-09 0s 0s 8656030e-09 0s 0s 8663150e-09 1s 1s 8663310e-09 0s 0s 8666310e-09 0s 0s 8673390e-09 1s 1s 8673550e-09 0s 0s 8676590e-09 0s 0s 8683630e-09 1s 1s 8683790e-09 0s 0s 8686870e-09 0s 0s 8693870e-09 1s 1s 8694030e-09 0s 0s 8697150e-09 0s 0s 8704110e-09 1s 1s 8704270e-09 0s 0s 8707430e-09 0s 0s 8714350e-09 1s 1s 8714510e-09 0s 0s 8717710e-09 0s 0s 8724590e-09 1s 1s 8724750e-09 0s 0s 8727990e-09 0s 0s 8734830e-09 1s 1s 8734990e-09 0s 0s 8738270e-09 0s 0s 8745070e-09 1s 1s 8745230e-09 0s 0s 8748550e-09 0s 0s 8755310e-09 1s 1s 8755470e-09 0s 0s 8758830e-09 0s 0s 8765550e-09 1s 1s 8765710e-09 0s 0s 8769110e-09 0s 0s 8775790e-09 1s 1s 8775950e-09 0s 0s 8779390e-09 0s 0s 8786030e-09 1s 1s 8786190e-09 0s 0s 8789670e-09 0s 0s 8796270e-09 1s 1s 8796430e-09 0s 0s 8799950e-09 0s 0s 8806510e-09 1s 1s 8806670e-09 0s 0s 8810230e-09 0s 0s 8816750e-09 1s 1s 8816910e-09 0s 0s 8820510e-09 0s 0s 8826990e-09 1s 1s 8827150e-09 0s 0s 8830790e-09 0s 0s 8837230e-09 1s 1s 8837390e-09 0s 0s 8841070e-09 0s 0s 8847470e-09 1s 1s 8847630e-09 0s 0s 8851350e-09 0s 0s 8857710e-09 1s 1s 8857870e-09 0s 0s 8861630e-09 0s 0s 8867950e-09 1s 1s 8868110e-09 0s 0s 8871910e-09 0s 0s 8878190e-09 1s 1s 8878350e-09 0s 0s 8882190e-09 0s 0s 8888430e-09 1s 1s 8888590e-09 0s 0s 8892470e-09 0s 0s 8898670e-09 1s 1s 8898830e-09 0s 0s 8902750e-09 0s 0s 8908910e-09 1s 1s 8909070e-09 0s 0s 8913030e-09 0s 0s 8919150e-09 1s 1s 8919310e-09 0s 0s 8923310e-09 0s 0s 8929390e-09 1s 1s 8929550e-09 0s 0s 8933590e-09 0s 0s 8939630e-09 1s 1s 8939790e-09 0s 0s 8943870e-09 0s 0s 8949870e-09 1s 1s 8950030e-09 0s 0s 8954150e-09 0s 0s 8960110e-09 1s 1s 8960270e-09 0s 0s 8964430e-09 0s 0s 8970350e-09 1s 1s 8970510e-09 0s 0s 8974710e-09 0s 0s 8980590e-09 1s 1s 8980750e-09 0s 0s 8984990e-09 0s 0s 8990830e-09 1s 1s 8990990e-09 0s 0s 8995270e-09 0s 0s 9001070e-09 1s 1s 9001230e-09 0s 0s 9005550e-09 0s 0s 9011310e-09 1s 1s 9011470e-09 0s 0s 9015830e-09 0s 0s 9021550e-09 1s 1s 9021710e-09 0s 0s 9026110e-09 0s 0s 9031790e-09 1s 1s 9031950e-09 0s 0s 9036390e-09 0s 0s 9042030e-09 1s 1s 9042190e-09 0s 0s 9046670e-09 0s 0s 9052270e-09 1s 1s 9052430e-09 0s 0s 9056950e-09 0s 0s 9062510e-09 1s 1s 9062670e-09 0s 0s 9067230e-09 0s 0s 9072750e-09 1s 1s 9072910e-09 0s 0s 9077510e-09 0s 0s 9082990e-09 1s 1s 9083150e-09 0s 0s 9087790e-09 0s 0s 9093230e-09 1s 1s 9093390e-09 0s 0s 9098070e-09 0s 0s 9103470e-09 1s 1s 9103630e-09 0s 0s 9108350e-09 0s 0s 9113710e-09 1s 1s 9113870e-09 0s 0s 9118630e-09 0s 0s 9123950e-09 1s 1s 9124110e-09 0s 0s 9128910e-09 0s 0s 9134190e-09 1s 1s 9134350e-09 0s 0s 9139190e-09 0s 0s 9144430e-09 1s 1s 9144590e-09 0s 0s 9149470e-09 0s 0s 9154670e-09 1s 1s 9154830e-09 0s 0s 9159750e-09 0s 0s 9164910e-09 1s 1s 9165070e-09 0s 0s 9170030e-09 0s 0s 9175150e-09 1s 1s 9175310e-09 0s 0s 9180310e-09 0s 0s 9185390e-09 1s 1s 9185550e-09 0s 0s 9190590e-09 0s 0s 9195630e-09 1s 1s 9195790e-09 0s 0s 9200870e-09 0s 0s 9205870e-09 1s 1s 9206030e-09 0s 0s 9211150e-09 0s 0s 9216110e-09 1s 1s 9216270e-09 0s 0s 9221430e-09 0s 0s 9226350e-09 1s 1s 9226510e-09 0s 0s 9231710e-09 0s 0s 9236590e-09 1s 1s 9236750e-09 0s 0s 9241990e-09 0s 0s 9246830e-09 1s 1s 9246990e-09 0s 0s 9252270e-09 0s 0s 9257070e-09 1s 1s 9257230e-09 0s 0s 9262550e-09 0s 0s 9267310e-09 1s 1s 9267470e-09 0s 0s 9272830e-09 0s 0s 9277550e-09 1s 1s 9277710e-09 0s 0s 9283110e-09 0s 0s 9287790e-09 1s 1s 9287950e-09 0s 0s 9293390e-09 0s 0s 9298030e-09 1s 1s 9298190e-09 0s 0s 9303670e-09 0s 0s 9308270e-09 1s 1s 9308430e-09 0s 0s 9313950e-09 0s 0s 9318510e-09 1s 1s 9318670e-09 0s 0s 9324230e-09 0s 0s 9328750e-09 1s 1s 9328910e-09 0s 0s 9334510e-09 0s 0s 9338990e-09 1s 1s 9339150e-09 0s 0s 9344790e-09 0s 0s 9349230e-09 1s 1s 9349390e-09 0s 0s 9355070e-09 0s 0s 9359470e-09 1s 1s 9359630e-09 0s 0s 9365350e-09 0s 0s 9369710e-09 1s 1s 9369870e-09 0s 0s 9375630e-09 0s 0s 9379950e-09 1s 1s 9380110e-09 0s 0s 9385910e-09 0s 0s 9390190e-09 1s 1s 9390350e-09 0s 0s 9396190e-09 0s 0s 9400430e-09 1s 1s 9400590e-09 0s 0s 9406470e-09 0s 0s 9410670e-09 1s 1s 9410830e-09 0s 0s 9416750e-09 0s 0s 9420910e-09 1s 1s 9421070e-09 0s 0s 9427030e-09 0s 0s 9431150e-09 1s 1s 9431310e-09 0s 0s 9437310e-09 0s 0s 9441390e-09 1s 1s 9441550e-09 0s 0s 9447590e-09 0s 0s 9451630e-09 1s 1s 9451790e-09 0s 0s 9457870e-09 0s 0s 9461870e-09 1s 1s 9462030e-09 0s 0s 9468150e-09 0s 0s 9472110e-09 1s 1s 9472270e-09 0s 0s 9478430e-09 0s 0s 9482350e-09 1s 1s 9482510e-09 0s 0s 9488710e-09 0s 0s 9492590e-09 1s 1s 9492750e-09 0s 0s 9498990e-09 0s 0s 9502830e-09 1s 1s 9502990e-09 0s 0s 9509270e-09 0s 0s 9513070e-09 1s 1s 9513230e-09 0s 0s 9519550e-09 0s 0s 9523310e-09 1s 1s 9523470e-09 0s 0s 9529830e-09 0s 0s 9533550e-09 1s 1s 9533710e-09 0s 0s 9540110e-09 0s 0s 9543790e-09 1s 1s 9543950e-09 0s 0s 9550390e-09 0s 0s 9554030e-09 1s 1s 9554190e-09 0s 0s 9560670e-09 0s 0s 9564270e-09 1s 1s 9564430e-09 0s 0s 9570950e-09 0s 0s 9574510e-09 1s 1s 9574670e-09 0s 0s 9581230e-09 0s 0s 9584750e-09 1s 1s 9584910e-09 0s 0s 9591510e-09 0s 0s 9594990e-09 1s 1s 9595150e-09 0s 0s 9601790e-09 0s 0s 9605230e-09 1s 1s 9605390e-09 0s 0s 9612070e-09 0s 0s 9615470e-09 1s 1s 9615630e-09 0s 0s 9622350e-09 0s 0s 9625710e-09 1s 1s 9625870e-09 0s 0s 9632630e-09 0s 0s 9635950e-09 1s 1s 9636110e-09 0s 0s 9642910e-09 0s 0s 9646190e-09 1s 1s 9646350e-09 0s 0s 9653190e-09 0s 0s 9656430e-09 1s 1s 9656590e-09 0s 0s 9663470e-09 0s 0s 9666670e-09 1s 1s 9666830e-09 0s 0s 9673750e-09 0s 0s 9676910e-09 1s 1s 9677070e-09 0s 0s 9684030e-09 0s 0s 9687150e-09 1s 1s 9687310e-09 0s 0s 9694310e-09 0s 0s 9697390e-09 1s 1s 9697550e-09 0s 0s 9704590e-09 0s 0s 9707630e-09 1s 1s 9707790e-09 0s 0s 9714870e-09 0s 0s 9717870e-09 1s 1s 9718030e-09 0s 0s 9725150e-09 0s 0s 9728110e-09 1s 1s 9728270e-09 0s 0s 9735430e-09 0s 0s 9738350e-09 1s 1s 9738510e-09 0s 0s 9745710e-09 0s 0s 9748590e-09 1s 1s 9748750e-09 0s 0s 9755990e-09 0s 0s 9758830e-09 1s 1s 9758990e-09 0s 0s 9766270e-09 0s 0s 9769070e-09 1s 1s 9769230e-09 0s 0s 9776550e-09 0s 0s 9779310e-09 1s 1s 9779470e-09 0s 0s 9786830e-09 0s 0s 9789550e-09 1s 1s 9789710e-09 0s 0s 9797110e-09 0s 0s 9799790e-09 1s 1s 9799950e-09 0s 0s 9807390e-09 0s 0s 9810030e-09 1s 1s 9810190e-09 0s 0s 9817670e-09 0s 0s 9820270e-09 1s 1s 9820430e-09 0s 0s 9827950e-09 0s 0s 9830510e-09 1s 1s 9830670e-09 0s 0s 9838230e-09 0s 0s 9840750e-09 1s 1s 9840910e-09 0s 0s 9848510e-09 0s 0s 9850990e-09 1s 1s 9851150e-09 0s 0s 9858790e-09 0s 0s 9861230e-09 1s 1s 9861390e-09 0s 0s 9869070e-09 0s 0s 9871470e-09 1s 1s 9871630e-09 0s 0s 9879350e-09 0s 0s 9881710e-09 1s 1s 9881870e-09 0s 0s 9889630e-09 0s 0s 9891950e-09 1s 1s 9892110e-09 0s 0s 9899910e-09 0s 0s 9902190e-09 1s 1s 9902350e-09 0s 0s 9910190e-09 0s 0s 9912430e-09 1s 1s 9912590e-09 0s 0s 9920470e-09 0s 0s 9922670e-09 1s 1s 9922830e-09 0s 0s 9930750e-09 0s 0s 9932910e-09 1s 1s 9933070e-09 0s 0s 9941030e-09 0s 0s 9943150e-09 1s 1s 9943310e-09 0s 0s 9951310e-09 0s 0s 9953390e-09 1s 1s 9953550e-09 0s 0s 9961590e-09 0s 0s 9963630e-09 1s 1s 9963790e-09 0s 0s 9971870e-09 0s 0s 9973870e-09 1s 1s 9974030e-09 0s 0s 9982150e-09 0s 0s 9984110e-09 1s 1s 9984270e-09 0s 0s 9992430e-09 0s 0s 9994350e-09 1s 1s 9994510e-09 0s 0s 10002710e-09 0s 0s 10004590e-09 1s 1s 10004750e-09 0s 0s 10012990e-09 0s 0s 10014830e-09 1s 1s 10014990e-09 0s 0s 10023270e-09 0s 0s 10025070e-09 1s 1s 10025230e-09 0s 0s 10033550e-09 0s 0s 10035310e-09 1s 1s 10035470e-09 0s 0s 10043830e-09 0s 0s 10045550e-09 1s 1s 10045710e-09 0s 0s 10054110e-09 0s 0s 10055790e-09 1s 1s 10055950e-09 0s 0s 10064390e-09 0s 0s 10066030e-09 1s 1s 10066190e-09 0s 0s 10074670e-09 0s 0s 10076270e-09 1s 1s 10076430e-09 0s 0s 10084950e-09 0s 0s 10086510e-09 1s 1s 10086670e-09 0s 0s 10095230e-09 0s 0s 10096750e-09 1s 1s 10096910e-09 0s 0s 10105510e-09 0s 0s 10106990e-09 1s 1s 10107150e-09 0s 0s 10115790e-09 0s 0s 10117230e-09 1s 1s 10117390e-09 0s 0s 10126070e-09 0s 0s 10127470e-09 1s 1s 10127630e-09 0s 0s 10136350e-09 0s 0s 10137710e-09 1s 1s 10137870e-09 0s 0s 10146630e-09 0s 0s 10147950e-09 1s 1s 10148110e-09 0s 0s 10156910e-09 0s 0s 10158190e-09 1s 1s 10158350e-09 0s 0s 10167190e-09 0s 0s 10168430e-09 1s 1s 10168590e-09 0s 0s 10177470e-09 0s 0s 10178670e-09 1s 1s 10178830e-09 0s 0s 10187750e-09 0s 0s 10188910e-09 1s 1s 10189070e-09 0s 0s 10198030e-09 0s 0s 10199150e-09 1s 1s 10199310e-09 0s 0s 10208310e-09 0s 0s 10209390e-09 1s 1s 10209550e-09 0s 0s 10218590e-09 0s 0s 10219630e-09 1s 1s 10219790e-09 0s 0s 10228870e-09 0s 0s 10229870e-09 1s 1s 10230030e-09 0s 0s 10239150e-09 0s 0s 10240110e-09 1s 1s 10240270e-09 0s 0s 10249430e-09 0s 0s 10250350e-09 1s 1s 10250510e-09 0s 0s 10259710e-09 0s 0s 10260590e-09 1s 1s 10260750e-09 0s 0s 10269990e-09 0s 0s 10270830e-09 1s 1s 10270990e-09 0s 0s 10280270e-09 0s 0s 10281070e-09 1s 1s 10281230e-09 0s 0s 10290550e-09 0s 0s 10291310e-09 1s 1s 10291470e-09 0s 0s 10300830e-09 0s 0s 10301550e-09 1s 1s 10301710e-09 0s 0s 10311110e-09 0s 0s 10311790e-09 1s 1s 10311950e-09 0s 0s 10321390e-09 0s 0s 10322030e-09 1s 1s 10322190e-09 0s 0s 10331670e-09 0s 0s 10332270e-09 1s 1s 10332430e-09 0s 0s 10341950e-09 0s 0s 10342510e-09 1s 1s 10342670e-09 0s 0s 10352230e-09 0s 0s 10352750e-09 1s 1s 10352910e-09 0s 0s 10362510e-09 0s 0s 10362990e-09 1s 1s 10363150e-09 0s 0s 10372790e-09 0s 0s 10373230e-09 1s 1s 10373390e-09 0s 0s 10383070e-09 0s 0s 10383470e-09 1s 1s 10383630e-09 0s 0s 10393350e-09 0s 0s 10393710e-09 1s 1s 10393870e-09 0s 0s 10403630e-09 0s 0s 10403950e-09 1s 1s 10404110e-09 0s 0s 10413910e-09 0s 0s 10414190e-09 1s 1s 10414350e-09 0s 0s 10424190e-09 0s 0s 10424430e-09 1s 1s 10424590e-09 0s 0s 10434470e-09 0s 0s 10434670e-09 1s 1s 10434830e-09 0s 0s 10444750e-09 0s 0s 10444910e-09 1s 1s 10445070e-09 0s 0s 10455030e-09 0s 0s 10455150e-09 1s 1s 10455310e-09 0s 0s 10465310e-09 0s 0s 10465390e-09 1s 1s 10465550e-09 0s 0s 10475590e-09 0s 0s 10475630e-09 1s 1s 10475790e-09 0s 0s 10485870e-09 1s 1s 10485910e-09 1s 1s 10486070e-09 0s 0s 10496110e-09 1s 1s 10496190e-09 1s 1s 10496310e-09 0s 0s 10506350e-09 1s 1s 10506470e-09 1s 1s 10506550e-09 0s 0s 10516590e-09 1s 1s 10516750e-09 1s 1s 10516790e-09 0s 0s 10526830e-09 1s 1s 10527030e-09 0s 0s 10537070e-09 1s 1s 10537270e-09 0s 0s 10537310e-09 0s 0s 10547310e-09 1s 1s 10547510e-09 0s 0s 10547590e-09 0s 0s 10557550e-09 1s 1s 10557750e-09 0s 0s 10557870e-09 0s 0s 10567790e-09 1s 1s 10567990e-09 0s 0s 10568150e-09 0s 0s 10578030e-09 1s 1s 10578230e-09 0s 0s 10578430e-09 0s 0s 10588270e-09 1s 1s 10588470e-09 0s 0s 10588710e-09 0s 0s 10598510e-09 1s 1s 10598710e-09 0s 0s 10598990e-09 0s 0s 10608750e-09 1s 1s 10608950e-09 0s 0s 10609270e-09 0s 0s 10618990e-09 1s 1s 10619190e-09 0s 0s 10619550e-09 0s 0s 10629230e-09 1s 1s 10629430e-09 0s 0s 10629830e-09 0s 0s 10639470e-09 1s 1s 10639670e-09 0s 0s 10640110e-09 0s 0s 10649710e-09 1s 1s 10649910e-09 0s 0s 10650390e-09 0s 0s 10659950e-09 1s 1s 10660150e-09 0s 0s 10660670e-09 0s 0s 10670190e-09 1s 1s 10670390e-09 0s 0s 10670950e-09 0s 0s 10680430e-09 1s 1s 10680630e-09 0s 0s 10681230e-09 0s 0s 10690670e-09 1s 1s 10690870e-09 0s 0s 10691510e-09 0s 0s 10700910e-09 1s 1s 10701110e-09 0s 0s 10701790e-09 0s 0s 10711150e-09 1s 1s 10711350e-09 0s 0s 10712070e-09 0s 0s 10721390e-09 1s 1s 10721590e-09 0s 0s 10722350e-09 0s 0s 10731630e-09 1s 1s 10731830e-09 0s 0s 10732630e-09 0s 0s 10741870e-09 1s 1s 10742070e-09 0s 0s 10742910e-09 0s 0s 10752110e-09 1s 1s 10752310e-09 0s 0s 10753190e-09 0s 0s 10762350e-09 1s 1s 10762550e-09 0s 0s 10763470e-09 0s 0s 10772590e-09 1s 1s 10772790e-09 0s 0s 10773750e-09 0s 0s 10782830e-09 1s 1s 10783030e-09 0s 0s 10784030e-09 0s 0s 10793070e-09 1s 1s 10793270e-09 0s 0s 10794310e-09 0s 0s 10803310e-09 1s 1s 10803510e-09 0s 0s 10804590e-09 0s 0s 10813550e-09 1s 1s 10813750e-09 0s 0s 10814870e-09 0s 0s 10823790e-09 1s 1s 10823990e-09 0s 0s 10825150e-09 0s 0s 10834030e-09 1s 1s 10834230e-09 0s 0s 10835430e-09 0s 0s 10844270e-09 1s 1s 10844470e-09 0s 0s 10845710e-09 0s 0s 10854510e-09 1s 1s 10854710e-09 0s 0s 10855990e-09 0s 0s 10864750e-09 1s 1s 10864950e-09 0s 0s 10866270e-09 0s 0s 10874990e-09 1s 1s 10875190e-09 0s 0s 10876550e-09 0s 0s 10885230e-09 1s 1s 10885430e-09 0s 0s 10886830e-09 0s 0s 10895470e-09 1s 1s 10895670e-09 0s 0s 10897110e-09 0s 0s 10905710e-09 1s 1s 10905910e-09 0s 0s 10907390e-09 0s 0s 10915950e-09 1s 1s 10916150e-09 0s 0s 10917670e-09 0s 0s 10926190e-09 1s 1s 10926390e-09 0s 0s 10927950e-09 0s 0s 10936430e-09 1s 1s 10936630e-09 0s 0s 10938230e-09 0s 0s 10946670e-09 1s 1s 10946870e-09 0s 0s 10948510e-09 0s 0s 10956910e-09 1s 1s 10957110e-09 0s 0s 10958790e-09 0s 0s 10967150e-09 1s 1s 10967350e-09 0s 0s 10969070e-09 0s 0s 10977390e-09 1s 1s 10977590e-09 0s 0s 10979350e-09 0s 0s 10987630e-09 1s 1s 10987830e-09 0s 0s 10989630e-09 0s 0s 10997870e-09 1s 1s 10998070e-09 0s 0s 10999910e-09 0s 0s 11008110e-09 1s 1s 11008310e-09 0s 0s 11010190e-09 0s 0s 11018350e-09 1s 1s 11018550e-09 0s 0s 11020470e-09 0s 0s 11028590e-09 1s 1s 11028790e-09 0s 0s 11030750e-09 0s 0s 11038830e-09 1s 1s 11039030e-09 0s 0s 11041030e-09 0s 0s 11049070e-09 1s 1s 11049270e-09 0s 0s 11051310e-09 0s 0s 11059310e-09 1s 1s 11059510e-09 0s 0s 11061590e-09 0s 0s 11069550e-09 1s 1s 11069750e-09 0s 0s 11071870e-09 0s 0s 11079790e-09 1s 1s 11079990e-09 0s 0s 11082150e-09 0s 0s 11090030e-09 1s 1s 11090230e-09 0s 0s 11092430e-09 0s 0s 11100270e-09 1s 1s 11100470e-09 0s 0s 11102710e-09 0s 0s 11110510e-09 1s 1s 11110710e-09 0s 0s 11112990e-09 0s 0s 11120750e-09 1s 1s 11120950e-09 0s 0s 11123270e-09 0s 0s 11130990e-09 1s 1s 11131190e-09 0s 0s 11133550e-09 0s 0s 11141230e-09 1s 1s 11141430e-09 0s 0s 11143830e-09 0s 0s 11151470e-09 1s 1s 11151670e-09 0s 0s 11154110e-09 0s 0s 11161710e-09 1s 1s 11161910e-09 0s 0s 11164390e-09 0s 0s 11171950e-09 1s 1s 11172150e-09 0s 0s 11174670e-09 0s 0s 11182190e-09 1s 1s 11182390e-09 0s 0s 11184950e-09 0s 0s 11192430e-09 1s 1s 11192630e-09 0s 0s 11195230e-09 0s 0s 11202670e-09 1s 1s 11202870e-09 0s 0s 11205510e-09 0s 0s 11212910e-09 1s 1s 11213110e-09 0s 0s 11215790e-09 0s 0s 11223150e-09 1s 1s 11223350e-09 0s 0s 11226070e-09 0s 0s 11233390e-09 1s 1s 11233590e-09 0s 0s 11236350e-09 0s 0s 11243630e-09 1s 1s 11243830e-09 0s 0s 11246630e-09 0s 0s 11253870e-09 1s 1s 11254070e-09 0s 0s 11256910e-09 0s 0s 11264110e-09 1s 1s 11264310e-09 0s 0s 11267190e-09 0s 0s 11274350e-09 1s 1s 11274550e-09 0s 0s 11277470e-09 0s 0s 11284590e-09 1s 1s 11284790e-09 0s 0s 11287750e-09 0s 0s 11294830e-09 1s 1s 11295030e-09 0s 0s 11298030e-09 0s 0s 11305070e-09 1s 1s 11305270e-09 0s 0s 11308310e-09 0s 0s 11315310e-09 1s 1s 11315510e-09 0s 0s 11318590e-09 0s 0s 11325550e-09 1s 1s 11325750e-09 0s 0s 11328870e-09 0s 0s 11335790e-09 1s 1s 11335990e-09 0s 0s 11339150e-09 0s 0s 11346030e-09 1s 1s 11346230e-09 0s 0s 11349430e-09 0s 0s 11356270e-09 1s 1s 11356470e-09 0s 0s 11359710e-09 0s 0s 11366510e-09 1s 1s 11366710e-09 0s 0s 11369990e-09 0s 0s 11376750e-09 1s 1s 11376950e-09 0s 0s 11380270e-09 0s 0s 11386990e-09 1s 1s 11387190e-09 0s 0s 11390550e-09 0s 0s 11397230e-09 1s 1s 11397430e-09 0s 0s 11400830e-09 0s 0s 11407470e-09 1s 1s 11407670e-09 0s 0s 11411110e-09 0s 0s 11417710e-09 1s 1s 11417910e-09 0s 0s 11421390e-09 0s 0s 11427950e-09 1s 1s 11428150e-09 0s 0s 11431670e-09 0s 0s 11438190e-09 1s 1s 11438390e-09 0s 0s 11441950e-09 0s 0s 11448430e-09 1s 1s 11448630e-09 0s 0s 11452230e-09 0s 0s 11458670e-09 1s 1s 11458870e-09 0s 0s 11462510e-09 0s 0s 11468910e-09 1s 1s 11469110e-09 0s 0s 11472790e-09 0s 0s 11479150e-09 1s 1s 11479350e-09 0s 0s 11483070e-09 0s 0s 11489390e-09 1s 1s 11489590e-09 0s 0s 11493350e-09 0s 0s 11499630e-09 1s 1s 11499830e-09 0s 0s 11503630e-09 0s 0s 11509870e-09 1s 1s 11510070e-09 0s 0s 11513910e-09 0s 0s 11520110e-09 1s 1s 11520310e-09 0s 0s 11524190e-09 0s 0s 11530350e-09 1s 1s 11530550e-09 0s 0s 11534470e-09 0s 0s 11540590e-09 1s 1s 11540790e-09 0s 0s 11544750e-09 0s 0s 11550830e-09 1s 1s 11551030e-09 0s 0s 11555030e-09 0s 0s 11561070e-09 1s 1s 11561270e-09 0s 0s 11565310e-09 0s 0s 11571310e-09 1s 1s 11571510e-09 0s 0s 11575590e-09 0s 0s 11581550e-09 1s 1s 11581750e-09 0s 0s 11585870e-09 0s 0s 11591790e-09 1s 1s 11591990e-09 0s 0s 11596150e-09 0s 0s 11602030e-09 1s 1s 11602230e-09 0s 0s 11606430e-09 0s 0s 11612270e-09 1s 1s 11612470e-09 0s 0s 11616710e-09 0s 0s 11622510e-09 1s 1s 11622710e-09 0s 0s 11626990e-09 0s 0s 11632750e-09 1s 1s 11632950e-09 0s 0s 11637270e-09 0s 0s 11642990e-09 1s 1s 11643190e-09 0s 0s 11647550e-09 0s 0s 11653230e-09 1s 1s 11653430e-09 0s 0s 11657830e-09 0s 0s 11663470e-09 1s 1s 11663670e-09 0s 0s 11668110e-09 0s 0s 11673710e-09 1s 1s 11673910e-09 0s 0s 11678390e-09 0s 0s 11683950e-09 1s 1s 11684150e-09 0s 0s 11688670e-09 0s 0s 11694190e-09 1s 1s 11694390e-09 0s 0s 11698950e-09 0s 0s 11704430e-09 1s 1s 11704630e-09 0s 0s 11709230e-09 0s 0s 11714670e-09 1s 1s 11714870e-09 0s 0s 11719510e-09 0s 0s 11724910e-09 1s 1s 11725110e-09 0s 0s 11729790e-09 0s 0s 11735150e-09 1s 1s 11735350e-09 0s 0s 11740070e-09 0s 0s 11745390e-09 1s 1s 11745590e-09 0s 0s 11750350e-09 0s 0s 11755630e-09 1s 1s 11755830e-09 0s 0s 11760630e-09 0s 0s 11765870e-09 1s 1s 11766070e-09 0s 0s 11770910e-09 0s 0s 11776110e-09 1s 1s 11776310e-09 0s 0s 11781190e-09 0s 0s 11786350e-09 1s 1s 11786550e-09 0s 0s 11791470e-09 0s 0s 11796590e-09 1s 1s 11796790e-09 0s 0s 11801750e-09 0s 0s 11806830e-09 1s 1s 11807030e-09 0s 0s 11812030e-09 0s 0s 11817070e-09 1s 1s 11817270e-09 0s 0s 11822310e-09 0s 0s 11827310e-09 1s 1s 11827510e-09 0s 0s 11832590e-09 0s 0s 11837550e-09 1s 1s 11837750e-09 0s 0s 11842870e-09 0s 0s 11847790e-09 1s 1s 11847990e-09 0s 0s 11853150e-09 0s 0s 11858030e-09 1s 1s 11858230e-09 0s 0s 11863430e-09 0s 0s 11868270e-09 1s 1s 11868470e-09 0s 0s 11873710e-09 0s 0s 11878510e-09 1s 1s 11878710e-09 0s 0s 11883990e-09 0s 0s 11888750e-09 1s 1s 11888950e-09 0s 0s 11894270e-09 0s 0s 11898990e-09 1s 1s 11899190e-09 0s 0s 11904550e-09 0s 0s 11909230e-09 1s 1s 11909430e-09 0s 0s 11914830e-09 0s 0s 11919470e-09 1s 1s 11919670e-09 0s 0s 11925110e-09 0s 0s 11929710e-09 1s 1s 11929910e-09 0s 0s 11935390e-09 0s 0s 11939950e-09 1s 1s 11940150e-09 0s 0s 11945670e-09 0s 0s 11950190e-09 1s 1s 11950390e-09 0s 0s 11955950e-09 0s 0s 11960430e-09 1s 1s 11960630e-09 0s 0s 11966230e-09 0s 0s 11970670e-09 1s 1s 11970870e-09 0s 0s 11976510e-09 0s 0s 11980910e-09 1s 1s 11981110e-09 0s 0s 11986790e-09 0s 0s 11991150e-09 1s 1s 11991350e-09 0s 0s 11997070e-09 0s 0s 12001390e-09 1s 1s 12001590e-09 0s 0s 12007350e-09 0s 0s 12011630e-09 1s 1s 12011830e-09 0s 0s 12017630e-09 0s 0s 12021870e-09 1s 1s 12022070e-09 0s 0s 12027910e-09 0s 0s 12032110e-09 1s 1s 12032310e-09 0s 0s 12038190e-09 0s 0s 12042350e-09 1s 1s 12042550e-09 0s 0s 12048470e-09 0s 0s 12052590e-09 1s 1s 12052790e-09 0s 0s 12058750e-09 0s 0s 12062830e-09 1s 1s 12063030e-09 0s 0s 12069030e-09 0s 0s 12073070e-09 1s 1s 12073270e-09 0s 0s 12079310e-09 0s 0s 12083310e-09 1s 1s 12083510e-09 0s 0s 12089590e-09 0s 0s 12093550e-09 1s 1s 12093750e-09 0s 0s 12099870e-09 0s 0s 12103790e-09 1s 1s 12103990e-09 0s 0s 12110150e-09 0s 0s 12114030e-09 1s 1s 12114230e-09 0s 0s 12120430e-09 0s 0s 12124270e-09 1s 1s 12124470e-09 0s 0s 12130710e-09 0s 0s 12134510e-09 1s 1s 12134710e-09 0s 0s 12140990e-09 0s 0s 12144750e-09 1s 1s 12144950e-09 0s 0s 12151270e-09 0s 0s 12154990e-09 1s 1s 12155190e-09 0s 0s 12161550e-09 0s 0s 12165230e-09 1s 1s 12165430e-09 0s 0s 12171830e-09 0s 0s 12175470e-09 1s 1s 12175670e-09 0s 0s 12182110e-09 0s 0s 12185710e-09 1s 1s 12185910e-09 0s 0s 12192390e-09 0s 0s 12195950e-09 1s 1s 12196150e-09 0s 0s 12202670e-09 0s 0s 12206190e-09 1s 1s 12206390e-09 0s 0s 12212950e-09 0s 0s 12216430e-09 1s 1s 12216630e-09 0s 0s 12223230e-09 0s 0s 12226670e-09 1s 1s 12226870e-09 0s 0s 12233510e-09 0s 0s 12236910e-09 1s 1s 12237110e-09 0s 0s 12243790e-09 0s 0s 12247150e-09 1s 1s 12247350e-09 0s 0s 12254070e-09 0s 0s 12257390e-09 1s 1s 12257590e-09 0s 0s 12264350e-09 0s 0s 12267630e-09 1s 1s 12267830e-09 0s 0s 12274630e-09 0s 0s 12277870e-09 1s 1s 12278070e-09 0s 0s 12284910e-09 0s 0s 12288110e-09 1s 1s 12288310e-09 0s 0s 12295190e-09 0s 0s 12298350e-09 1s 1s 12298550e-09 0s 0s 12305470e-09 0s 0s 12308590e-09 1s 1s 12308790e-09 0s 0s 12315750e-09 0s 0s 12318830e-09 1s 1s 12319030e-09 0s 0s 12326030e-09 0s 0s 12329070e-09 1s 1s 12329270e-09 0s 0s 12336310e-09 0s 0s 12339310e-09 1s 1s 12339510e-09 0s 0s 12346590e-09 0s 0s 12349550e-09 1s 1s 12349750e-09 0s 0s 12356870e-09 0s 0s 12359790e-09 1s 1s 12359990e-09 0s 0s 12367150e-09 0s 0s 12370030e-09 1s 1s 12370230e-09 0s 0s 12377430e-09 0s 0s 12380270e-09 1s 1s 12380470e-09 0s 0s 12387710e-09 0s 0s 12390510e-09 1s 1s 12390710e-09 0s 0s 12397990e-09 0s 0s 12400750e-09 1s 1s 12400950e-09 0s 0s 12408270e-09 0s 0s 12410990e-09 1s 1s 12411190e-09 0s 0s 12418550e-09 0s 0s 12421230e-09 1s 1s 12421430e-09 0s 0s 12428830e-09 0s 0s 12431470e-09 1s 1s 12431670e-09 0s 0s 12439110e-09 0s 0s 12441710e-09 1s 1s 12441910e-09 0s 0s 12449390e-09 0s 0s 12451950e-09 1s 1s 12452150e-09 0s 0s 12459670e-09 0s 0s 12462190e-09 1s 1s 12462390e-09 0s 0s 12469950e-09 0s 0s 12472430e-09 1s 1s 12472630e-09 0s 0s 12480230e-09 0s 0s 12482670e-09 1s 1s 12482870e-09 0s 0s 12490510e-09 0s 0s 12492910e-09 1s 1s 12493110e-09 0s 0s 12500790e-09 0s 0s 12503150e-09 1s 1s 12503350e-09 0s 0s 12511070e-09 0s 0s 12513390e-09 1s 1s 12513590e-09 0s 0s 12521350e-09 0s 0s 12523630e-09 1s 1s 12523830e-09 0s 0s 12531630e-09 0s 0s 12533870e-09 1s 1s 12534070e-09 0s 0s 12541910e-09 0s 0s 12544110e-09 1s 1s 12544310e-09 0s 0s 12552190e-09 0s 0s 12554350e-09 1s 1s 12554550e-09 0s 0s 12562470e-09 0s 0s 12564590e-09 1s 1s 12564790e-09 0s 0s 12572750e-09 0s 0s 12574830e-09 1s 1s 12575030e-09 0s 0s 12583030e-09 0s 0s 12585070e-09 1s 1s 12585270e-09 0s 0s 12593310e-09 0s 0s 12595310e-09 1s 1s 12595510e-09 0s 0s 12603590e-09 0s 0s 12605550e-09 1s 1s 12605750e-09 0s 0s 12613870e-09 0s 0s 12615790e-09 1s 1s 12615990e-09 0s 0s 12624150e-09 0s 0s 12626030e-09 1s 1s 12626230e-09 0s 0s 12634430e-09 0s 0s 12636270e-09 1s 1s 12636470e-09 0s 0s 12644710e-09 0s 0s 12646510e-09 1s 1s 12646710e-09 0s 0s 12654990e-09 0s 0s 12656750e-09 1s 1s 12656950e-09 0s 0s 12665270e-09 0s 0s 12666990e-09 1s 1s 12667190e-09 0s 0s 12675550e-09 0s 0s 12677230e-09 1s 1s 12677430e-09 0s 0s 12685830e-09 0s 0s 12687470e-09 1s 1s 12687670e-09 0s 0s 12696110e-09 0s 0s 12697710e-09 1s 1s 12697910e-09 0s 0s 12706390e-09 0s 0s 12707950e-09 1s 1s 12708150e-09 0s 0s 12716670e-09 0s 0s 12718190e-09 1s 1s 12718390e-09 0s 0s 12726950e-09 0s 0s 12728430e-09 1s 1s 12728630e-09 0s 0s 12737230e-09 0s 0s 12738670e-09 1s 1s 12738870e-09 0s 0s 12747510e-09 0s 0s 12748910e-09 1s 1s 12749110e-09 0s 0s 12757790e-09 0s 0s 12759150e-09 1s 1s 12759350e-09 0s 0s 12768070e-09 0s 0s 12769390e-09 1s 1s 12769590e-09 0s 0s 12778350e-09 0s 0s 12779630e-09 1s 1s 12779830e-09 0s 0s 12788630e-09 0s 0s 12789870e-09 1s 1s 12790070e-09 0s 0s 12798910e-09 0s 0s 12800110e-09 1s 1s 12800310e-09 0s 0s 12809190e-09 0s 0s 12810350e-09 1s 1s 12810550e-09 0s 0s 12819470e-09 0s 0s 12820590e-09 1s 1s 12820790e-09 0s 0s 12829750e-09 0s 0s 12830830e-09 1s 1s 12831030e-09 0s 0s 12840030e-09 0s 0s 12841070e-09 1s 1s 12841270e-09 0s 0s 12850310e-09 0s 0s 12851310e-09 1s 1s 12851510e-09 0s 0s 12860590e-09 0s 0s 12861550e-09 1s 1s 12861750e-09 0s 0s 12870870e-09 0s 0s 12871790e-09 1s 1s 12871990e-09 0s 0s 12881150e-09 0s 0s 12882030e-09 1s 1s 12882230e-09 0s 0s 12891430e-09 0s 0s 12892270e-09 1s 1s 12892470e-09 0s 0s 12901710e-09 0s 0s 12902510e-09 1s 1s 12902710e-09 0s 0s 12911990e-09 0s 0s 12912750e-09 1s 1s 12912950e-09 0s 0s 12922270e-09 0s 0s 12922990e-09 1s 1s 12923190e-09 0s 0s 12932550e-09 0s 0s 12933230e-09 1s 1s 12933430e-09 0s 0s 12942830e-09 0s 0s 12943470e-09 1s 1s 12943670e-09 0s 0s 12953110e-09 0s 0s 12953710e-09 1s 1s 12953910e-09 0s 0s 12963390e-09 0s 0s 12963950e-09 1s 1s 12964150e-09 0s 0s 12973670e-09 0s 0s 12974190e-09 1s 1s 12974390e-09 0s 0s 12983950e-09 0s 0s 12984430e-09 1s 1s 12984630e-09 0s 0s 12994230e-09 0s 0s 12994670e-09 1s 1s 12994870e-09 0s 0s 13004510e-09 0s 0s 13004910e-09 1s 1s 13005110e-09 0s 0s 13014790e-09 0s 0s 13015150e-09 1s 1s 13015350e-09 0s 0s 13025070e-09 0s 0s 13025390e-09 1s 1s 13025590e-09 0s 0s 13035350e-09 0s 0s 13035630e-09 1s 1s 13035830e-09 0s 0s 13045630e-09 0s 0s 13045870e-09 1s 1s 13046070e-09 0s 0s 13055910e-09 0s 0s 13056110e-09 1s 1s 13056310e-09 0s 0s 13066190e-09 0s 0s 13066350e-09 1s 1s 13066550e-09 0s 0s 13076470e-09 0s 0s 13076590e-09 1s 1s 13076790e-09 0s 0s 13086750e-09 0s 0s 13086830e-09 1s 1s 13087030e-09 0s 0s 13097030e-09 0s 0s 13097070e-09 1s 1s 13097270e-09 0s 0s 13107310e-09 1s 1s 13107350e-09 1s 1s 13107550e-09 0s 0s 13117550e-09 1s 1s 13117630e-09 1s 1s 13117790e-09 0s 0s 13127790e-09 1s 1s 13127910e-09 1s 1s 13128030e-09 0s 0s 13138030e-09 1s 1s 13138190e-09 1s 1s 13138270e-09 0s 0s 13148270e-09 1s 1s 13148470e-09 1s 1s 13148510e-09 0s 0s 13158510e-09 1s 1s 13158750e-09 0s 0s 13168750e-09 1s 1s 13168990e-09 0s 0s 13169030e-09 0s 0s 13178990e-09 1s 1s 13179230e-09 0s 0s 13179310e-09 0s 0s 13189230e-09 1s 1s 13189470e-09 0s 0s 13189590e-09 0s 0s 13199470e-09 1s 1s 13199710e-09 0s 0s 13199870e-09 0s 0s 13209710e-09 1s 1s 13209950e-09 0s 0s 13210150e-09 0s 0s 13219950e-09 1s 1s 13220190e-09 0s 0s 13220430e-09 0s 0s 13230190e-09 1s 1s 13230430e-09 0s 0s 13230710e-09 0s 0s 13240430e-09 1s 1s 13240670e-09 0s 0s 13240990e-09 0s 0s 13250670e-09 1s 1s 13250910e-09 0s 0s 13251270e-09 0s 0s 13260910e-09 1s 1s 13261150e-09 0s 0s 13261550e-09 0s 0s 13271150e-09 1s 1s 13271390e-09 0s 0s 13271830e-09 0s 0s 13281390e-09 1s 1s 13281630e-09 0s 0s 13282110e-09 0s 0s 13291630e-09 1s 1s 13291870e-09 0s 0s 13292390e-09 0s 0s 13301870e-09 1s 1s 13302110e-09 0s 0s 13302670e-09 0s 0s 13312110e-09 1s 1s 13312350e-09 0s 0s 13312950e-09 0s 0s 13322350e-09 1s 1s 13322590e-09 0s 0s 13323230e-09 0s 0s 13332590e-09 1s 1s 13332830e-09 0s 0s 13333510e-09 0s 0s 13342830e-09 1s 1s 13343070e-09 0s 0s 13343790e-09 0s 0s 13353070e-09 1s 1s 13353310e-09 0s 0s 13354070e-09 0s 0s 13363310e-09 1s 1s 13363550e-09 0s 0s 13364350e-09 0s 0s 13373550e-09 1s 1s 13373790e-09 0s 0s 13374630e-09 0s 0s 13383790e-09 1s 1s 13384030e-09 0s 0s 13384910e-09 0s 0s 13394030e-09 1s 1s 13394270e-09 0s 0s 13395190e-09 0s 0s 13404270e-09 1s 1s 13404510e-09 0s 0s 13405470e-09 0s 0s 13414510e-09 1s 1s 13414750e-09 0s 0s 13415750e-09 0s 0s 13424750e-09 1s 1s 13424990e-09 0s 0s 13426030e-09 0s 0s 13434990e-09 1s 1s 13435230e-09 0s 0s 13436310e-09 0s 0s 13445230e-09 1s 1s 13445470e-09 0s 0s 13446590e-09 0s 0s 13455470e-09 1s 1s 13455710e-09 0s 0s 13456870e-09 0s 0s 13465710e-09 1s 1s 13465950e-09 0s 0s 13467150e-09 0s 0s 13475950e-09 1s 1s 13476190e-09 0s 0s 13477430e-09 0s 0s 13486190e-09 1s 1s 13486430e-09 0s 0s 13487710e-09 0s 0s 13496430e-09 1s 1s 13496670e-09 0s 0s 13497990e-09 0s 0s 13506670e-09 1s 1s 13506910e-09 0s 0s 13508270e-09 0s 0s 13516910e-09 1s 1s 13517150e-09 0s 0s 13518550e-09 0s 0s 13527150e-09 1s 1s 13527390e-09 0s 0s 13528830e-09 0s 0s 13537390e-09 1s 1s 13537630e-09 0s 0s 13539110e-09 0s 0s 13547630e-09 1s 1s 13547870e-09 0s 0s 13549390e-09 0s 0s 13557870e-09 1s 1s 13558110e-09 0s 0s 13559670e-09 0s 0s 13568110e-09 1s 1s 13568350e-09 0s 0s 13569950e-09 0s 0s 13578350e-09 1s 1s 13578590e-09 0s 0s 13580230e-09 0s 0s 13588590e-09 1s 1s 13588830e-09 0s 0s 13590510e-09 0s 0s 13598830e-09 1s 1s 13599070e-09 0s 0s 13600790e-09 0s 0s 13609070e-09 1s 1s 13609310e-09 0s 0s 13611070e-09 0s 0s 13619310e-09 1s 1s 13619550e-09 0s 0s 13621350e-09 0s 0s 13629550e-09 1s 1s 13629790e-09 0s 0s 13631630e-09 0s 0s 13639790e-09 1s 1s 13640030e-09 0s 0s 13641910e-09 0s 0s 13650030e-09 1s 1s 13650270e-09 0s 0s 13652190e-09 0s 0s 13660270e-09 1s 1s 13660510e-09 0s 0s 13662470e-09 0s 0s 13670510e-09 1s 1s 13670750e-09 0s 0s 13672750e-09 0s 0s 13680750e-09 1s 1s 13680990e-09 0s 0s 13683030e-09 0s 0s 13690990e-09 1s 1s 13691230e-09 0s 0s 13693310e-09 0s 0s 13701230e-09 1s 1s 13701470e-09 0s 0s 13703590e-09 0s 0s 13711470e-09 1s 1s 13711710e-09 0s 0s 13713870e-09 0s 0s 13721710e-09 1s 1s 13721950e-09 0s 0s 13724150e-09 0s 0s 13731950e-09 1s 1s 13732190e-09 0s 0s 13734430e-09 0s 0s 13742190e-09 1s 1s 13742430e-09 0s 0s 13744710e-09 0s 0s 13752430e-09 1s 1s 13752670e-09 0s 0s 13754990e-09 0s 0s 13762670e-09 1s 1s 13762910e-09 0s 0s 13765270e-09 0s 0s 13772910e-09 1s 1s 13773150e-09 0s 0s 13775550e-09 0s 0s 13783150e-09 1s 1s 13783390e-09 0s 0s 13785830e-09 0s 0s 13793390e-09 1s 1s 13793630e-09 0s 0s 13796110e-09 0s 0s 13803630e-09 1s 1s 13803870e-09 0s 0s 13806390e-09 0s 0s 13813870e-09 1s 1s 13814110e-09 0s 0s 13816670e-09 0s 0s 13824110e-09 1s 1s 13824350e-09 0s 0s 13826950e-09 0s 0s 13834350e-09 1s 1s 13834590e-09 0s 0s 13837230e-09 0s 0s 13844590e-09 1s 1s 13844830e-09 0s 0s 13847510e-09 0s 0s 13854830e-09 1s 1s 13855070e-09 0s 0s 13857790e-09 0s 0s 13865070e-09 1s 1s 13865310e-09 0s 0s 13868070e-09 0s 0s 13875310e-09 1s 1s 13875550e-09 0s 0s 13878350e-09 0s 0s 13885550e-09 1s 1s 13885790e-09 0s 0s 13888630e-09 0s 0s 13895790e-09 1s 1s 13896030e-09 0s 0s 13898910e-09 0s 0s 13906030e-09 1s 1s 13906270e-09 0s 0s 13909190e-09 0s 0s 13916270e-09 1s 1s 13916510e-09 0s 0s 13919470e-09 0s 0s 13926510e-09 1s 1s 13926750e-09 0s 0s 13929750e-09 0s 0s 13936750e-09 1s 1s 13936990e-09 0s 0s 13940030e-09 0s 0s 13946990e-09 1s 1s 13947230e-09 0s 0s 13950310e-09 0s 0s 13957230e-09 1s 1s 13957470e-09 0s 0s 13960590e-09 0s 0s 13967470e-09 1s 1s 13967710e-09 0s 0s 13970870e-09 0s 0s 13977710e-09 1s 1s 13977950e-09 0s 0s 13981150e-09 0s 0s 13987950e-09 1s 1s 13988190e-09 0s 0s 13991430e-09 0s 0s 13998190e-09 1s 1s 13998430e-09 0s 0s 14001710e-09 0s 0s 14008430e-09 1s 1s 14008670e-09 0s 0s 14011990e-09 0s 0s 14018670e-09 1s 1s 14018910e-09 0s 0s 14022270e-09 0s 0s 14028910e-09 1s 1s 14029150e-09 0s 0s 14032550e-09 0s 0s 14039150e-09 1s 1s 14039390e-09 0s 0s 14042830e-09 0s 0s 14049390e-09 1s 1s 14049630e-09 0s 0s 14053110e-09 0s 0s 14059630e-09 1s 1s 14059870e-09 0s 0s 14063390e-09 0s 0s 14069870e-09 1s 1s 14070110e-09 0s 0s 14073670e-09 0s 0s 14080110e-09 1s 1s 14080350e-09 0s 0s 14083950e-09 0s 0s 14090350e-09 1s 1s 14090590e-09 0s 0s 14094230e-09 0s 0s 14100590e-09 1s 1s 14100830e-09 0s 0s 14104510e-09 0s 0s 14110830e-09 1s 1s 14111070e-09 0s 0s 14114790e-09 0s 0s 14121070e-09 1s 1s 14121310e-09 0s 0s 14125070e-09 0s 0s 14131310e-09 1s 1s 14131550e-09 0s 0s 14135350e-09 0s 0s 14141550e-09 1s 1s 14141790e-09 0s 0s 14145630e-09 0s 0s 14151790e-09 1s 1s 14152030e-09 0s 0s 14155910e-09 0s 0s 14162030e-09 1s 1s 14162270e-09 0s 0s 14166190e-09 0s 0s 14172270e-09 1s 1s 14172510e-09 0s 0s 14176470e-09 0s 0s 14182510e-09 1s 1s 14182750e-09 0s 0s 14186750e-09 0s 0s 14192750e-09 1s 1s 14192990e-09 0s 0s 14197030e-09 0s 0s 14202990e-09 1s 1s 14203230e-09 0s 0s 14207310e-09 0s 0s 14213230e-09 1s 1s 14213470e-09 0s 0s 14217590e-09 0s 0s 14223470e-09 1s 1s 14223710e-09 0s 0s 14227870e-09 0s 0s 14233710e-09 1s 1s 14233950e-09 0s 0s 14238150e-09 0s 0s 14243950e-09 1s 1s 14244190e-09 0s 0s 14248430e-09 0s 0s 14254190e-09 1s 1s 14254430e-09 0s 0s 14258710e-09 0s 0s 14264430e-09 1s 1s 14264670e-09 0s 0s 14268990e-09 0s 0s 14274670e-09 1s 1s 14274910e-09 0s 0s 14279270e-09 0s 0s 14284910e-09 1s 1s 14285150e-09 0s 0s 14289550e-09 0s 0s 14295150e-09 1s 1s 14295390e-09 0s 0s 14299830e-09 0s 0s 14305390e-09 1s 1s 14305630e-09 0s 0s 14310110e-09 0s 0s 14315630e-09 1s 1s 14315870e-09 0s 0s 14320390e-09 0s 0s 14325870e-09 1s 1s 14326110e-09 0s 0s 14330670e-09 0s 0s 14336110e-09 1s 1s 14336350e-09 0s 0s 14340950e-09 0s 0s 14346350e-09 1s 1s 14346590e-09 0s 0s 14351230e-09 0s 0s 14356590e-09 1s 1s 14356830e-09 0s 0s 14361510e-09 0s 0s 14366830e-09 1s 1s 14367070e-09 0s 0s 14371790e-09 0s 0s 14377070e-09 1s 1s 14377310e-09 0s 0s 14382070e-09 0s 0s 14387310e-09 1s 1s 14387550e-09 0s 0s 14392350e-09 0s 0s 14397550e-09 1s 1s 14397790e-09 0s 0s 14402630e-09 0s 0s 14407790e-09 1s 1s 14408030e-09 0s 0s 14412910e-09 0s 0s 14418030e-09 1s 1s 14418270e-09 0s 0s 14423190e-09 0s 0s 14428270e-09 1s 1s 14428510e-09 0s 0s 14433470e-09 0s 0s 14438510e-09 1s 1s 14438750e-09 0s 0s 14443750e-09 0s 0s 14448750e-09 1s 1s 14448990e-09 0s 0s 14454030e-09 0s 0s 14458990e-09 1s 1s 14459230e-09 0s 0s 14464310e-09 0s 0s 14469230e-09 1s 1s 14469470e-09 0s 0s 14474590e-09 0s 0s 14479470e-09 1s 1s 14479710e-09 0s 0s 14484870e-09 0s 0s 14489710e-09 1s 1s 14489950e-09 0s 0s 14495150e-09 0s 0s 14499950e-09 1s 1s 14500190e-09 0s 0s 14505430e-09 0s 0s 14510190e-09 1s 1s 14510430e-09 0s 0s 14515710e-09 0s 0s 14520430e-09 1s 1s 14520670e-09 0s 0s 14525990e-09 0s 0s 14530670e-09 1s 1s 14530910e-09 0s 0s 14536270e-09 0s 0s 14540910e-09 1s 1s 14541150e-09 0s 0s 14546550e-09 0s 0s 14551150e-09 1s 1s 14551390e-09 0s 0s 14556830e-09 0s 0s 14561390e-09 1s 1s 14561630e-09 0s 0s 14567110e-09 0s 0s 14571630e-09 1s 1s 14571870e-09 0s 0s 14577390e-09 0s 0s 14581870e-09 1s 1s 14582110e-09 0s 0s 14587670e-09 0s 0s 14592110e-09 1s 1s 14592350e-09 0s 0s 14597950e-09 0s 0s 14602350e-09 1s 1s 14602590e-09 0s 0s 14608230e-09 0s 0s 14612590e-09 1s 1s 14612830e-09 0s 0s 14618510e-09 0s 0s 14622830e-09 1s 1s 14623070e-09 0s 0s 14628790e-09 0s 0s 14633070e-09 1s 1s 14633310e-09 0s 0s 14639070e-09 0s 0s 14643310e-09 1s 1s 14643550e-09 0s 0s 14649350e-09 0s 0s 14653550e-09 1s 1s 14653790e-09 0s 0s 14659630e-09 0s 0s 14663790e-09 1s 1s 14664030e-09 0s 0s 14669910e-09 0s 0s 14674030e-09 1s 1s 14674270e-09 0s 0s 14680190e-09 0s 0s 14684270e-09 1s 1s 14684510e-09 0s 0s 14690470e-09 0s 0s 14694510e-09 1s 1s 14694750e-09 0s 0s 14700750e-09 0s 0s 14704750e-09 1s 1s 14704990e-09 0s 0s 14711030e-09 0s 0s 14714990e-09 1s 1s 14715230e-09 0s 0s 14721310e-09 0s 0s 14725230e-09 1s 1s 14725470e-09 0s 0s 14731590e-09 0s 0s 14735470e-09 1s 1s 14735710e-09 0s 0s 14741870e-09 0s 0s 14745710e-09 1s 1s 14745950e-09 0s 0s 14752150e-09 0s 0s 14755950e-09 1s 1s 14756190e-09 0s 0s 14762430e-09 0s 0s 14766190e-09 1s 1s 14766430e-09 0s 0s 14772710e-09 0s 0s 14776430e-09 1s 1s 14776670e-09 0s 0s 14782990e-09 0s 0s 14786670e-09 1s 1s 14786910e-09 0s 0s 14793270e-09 0s 0s 14796910e-09 1s 1s 14797150e-09 0s 0s 14803550e-09 0s 0s 14807150e-09 1s 1s 14807390e-09 0s 0s 14813830e-09 0s 0s 14817390e-09 1s 1s 14817630e-09 0s 0s 14824110e-09 0s 0s 14827630e-09 1s 1s 14827870e-09 0s 0s 14834390e-09 0s 0s 14837870e-09 1s 1s 14838110e-09 0s 0s 14844670e-09 0s 0s 14848110e-09 1s 1s 14848350e-09 0s 0s 14854950e-09 0s 0s 14858350e-09 1s 1s 14858590e-09 0s 0s 14865230e-09 0s 0s 14868590e-09 1s 1s 14868830e-09 0s 0s 14875510e-09 0s 0s 14878830e-09 1s 1s 14879070e-09 0s 0s 14885790e-09 0s 0s 14889070e-09 1s 1s 14889310e-09 0s 0s 14896070e-09 0s 0s 14899310e-09 1s 1s 14899550e-09 0s 0s 14906350e-09 0s 0s 14909550e-09 1s 1s 14909790e-09 0s 0s 14916630e-09 0s 0s 14919790e-09 1s 1s 14920030e-09 0s 0s 14926910e-09 0s 0s 14930030e-09 1s 1s 14930270e-09 0s 0s 14937190e-09 0s 0s 14940270e-09 1s 1s 14940510e-09 0s 0s 14947470e-09 0s 0s 14950510e-09 1s 1s 14950750e-09 0s 0s 14957750e-09 0s 0s 14960750e-09 1s 1s 14960990e-09 0s 0s 14968030e-09 0s 0s 14970990e-09 1s 1s 14971230e-09 0s 0s 14978310e-09 0s 0s 14981230e-09 1s 1s 14981470e-09 0s 0s 14988590e-09 0s 0s 14991470e-09 1s 1s 14991710e-09 0s 0s 14998870e-09 0s 0s 15001710e-09 1s 1s 15001950e-09 0s 0s 15009150e-09 0s 0s 15011950e-09 1s 1s 15012190e-09 0s 0s 15019430e-09 0s 0s 15022190e-09 1s 1s 15022430e-09 0s 0s 15029710e-09 0s 0s 15032430e-09 1s 1s 15032670e-09 0s 0s 15039990e-09 0s 0s 15042670e-09 1s 1s 15042910e-09 0s 0s 15050270e-09 0s 0s 15052910e-09 1s 1s 15053150e-09 0s 0s 15060550e-09 0s 0s 15063150e-09 1s 1s 15063390e-09 0s 0s 15070830e-09 0s 0s 15073390e-09 1s 1s 15073630e-09 0s 0s 15081110e-09 0s 0s 15083630e-09 1s 1s 15083870e-09 0s 0s 15091390e-09 0s 0s 15093870e-09 1s 1s 15094110e-09 0s 0s 15101670e-09 0s 0s 15104110e-09 1s 1s 15104350e-09 0s 0s 15111950e-09 0s 0s 15114350e-09 1s 1s 15114590e-09 0s 0s 15122230e-09 0s 0s 15124590e-09 1s 1s 15124830e-09 0s 0s 15132510e-09 0s 0s 15134830e-09 1s 1s 15135070e-09 0s 0s 15142790e-09 0s 0s 15145070e-09 1s 1s 15145310e-09 0s 0s 15153070e-09 0s 0s 15155310e-09 1s 1s 15155550e-09 0s 0s 15163350e-09 0s 0s 15165550e-09 1s 1s 15165790e-09 0s 0s 15173630e-09 0s 0s 15175790e-09 1s 1s 15176030e-09 0s 0s 15183910e-09 0s 0s 15186030e-09 1s 1s 15186270e-09 0s 0s 15194190e-09 0s 0s 15196270e-09 1s 1s 15196510e-09 0s 0s 15204470e-09 0s 0s 15206510e-09 1s 1s 15206750e-09 0s 0s 15214750e-09 0s 0s 15216750e-09 1s 1s 15216990e-09 0s 0s 15225030e-09 0s 0s 15226990e-09 1s 1s 15227230e-09 0s 0s 15235310e-09 0s 0s 15237230e-09 1s 1s 15237470e-09 0s 0s 15245590e-09 0s 0s 15247470e-09 1s 1s 15247710e-09 0s 0s 15255870e-09 0s 0s 15257710e-09 1s 1s 15257950e-09 0s 0s 15266150e-09 0s 0s 15267950e-09 1s 1s 15268190e-09 0s 0s 15276430e-09 0s 0s 15278190e-09 1s 1s 15278430e-09 0s 0s 15286710e-09 0s 0s 15288430e-09 1s 1s 15288670e-09 0s 0s 15296990e-09 0s 0s 15298670e-09 1s 1s 15298910e-09 0s 0s 15307270e-09 0s 0s 15308910e-09 1s 1s 15309150e-09 0s 0s 15317550e-09 0s 0s 15319150e-09 1s 1s 15319390e-09 0s 0s 15327830e-09 0s 0s 15329390e-09 1s 1s 15329630e-09 0s 0s 15338110e-09 0s 0s 15339630e-09 1s 1s 15339870e-09 0s 0s 15348390e-09 0s 0s 15349870e-09 1s 1s 15350110e-09 0s 0s 15358670e-09 0s 0s 15360110e-09 1s 1s 15360350e-09 0s 0s 15368950e-09 0s 0s 15370350e-09 1s 1s 15370590e-09 0s 0s 15379230e-09 0s 0s 15380590e-09 1s 1s 15380830e-09 0s 0s 15389510e-09 0s 0s 15390830e-09 1s 1s 15391070e-09 0s 0s 15399790e-09 0s 0s 15401070e-09 1s 1s 15401310e-09 0s 0s 15410070e-09 0s 0s 15411310e-09 1s 1s 15411550e-09 0s 0s 15420350e-09 0s 0s 15421550e-09 1s 1s 15421790e-09 0s 0s 15430630e-09 0s 0s 15431790e-09 1s 1s 15432030e-09 0s 0s 15440910e-09 0s 0s 15442030e-09 1s 1s 15442270e-09 0s 0s 15451190e-09 0s 0s 15452270e-09 1s 1s 15452510e-09 0s 0s 15461470e-09 0s 0s 15462510e-09 1s 1s 15462750e-09 0s 0s 15471750e-09 0s 0s 15472750e-09 1s 1s 15472990e-09 0s 0s 15482030e-09 0s 0s 15482990e-09 1s 1s 15483230e-09 0s 0s 15492310e-09 0s 0s 15493230e-09 1s 1s 15493470e-09 0s 0s 15502590e-09 0s 0s 15503470e-09 1s 1s 15503710e-09 0s 0s 15512870e-09 0s 0s 15513710e-09 1s 1s 15513950e-09 0s 0s 15523150e-09 0s 0s 15523950e-09 1s 1s 15524190e-09 0s 0s 15533430e-09 0s 0s 15534190e-09 1s 1s 15534430e-09 0s 0s 15543710e-09 0s 0s 15544430e-09 1s 1s 15544670e-09 0s 0s 15553990e-09 0s 0s 15554670e-09 1s 1s 15554910e-09 0s 0s 15564270e-09 0s 0s 15564910e-09 1s 1s 15565150e-09 0s 0s 15574550e-09 0s 0s 15575150e-09 1s 1s 15575390e-09 0s 0s 15584830e-09 0s 0s 15585390e-09 1s 1s 15585630e-09 0s 0s 15595110e-09 0s 0s 15595630e-09 1s 1s 15595870e-09 0s 0s 15605390e-09 0s 0s 15605870e-09 1s 1s 15606110e-09 0s 0s 15615670e-09 0s 0s 15616110e-09 1s 1s 15616350e-09 0s 0s 15625950e-09 0s 0s 15626350e-09 1s 1s 15626590e-09 0s 0s 15636230e-09 0s 0s 15636590e-09 1s 1s 15636830e-09 0s 0s 15646510e-09 0s 0s 15646830e-09 1s 1s 15647070e-09 0s 0s 15656790e-09 0s 0s 15657070e-09 1s 1s 15657310e-09 0s 0s 15667070e-09 0s 0s 15667310e-09 1s 1s 15667550e-09 0s 0s 15677350e-09 0s 0s 15677550e-09 1s 1s 15677790e-09 0s 0s 15687630e-09 0s 0s 15687790e-09 1s 1s 15688030e-09 0s 0s 15697910e-09 0s 0s 15698030e-09 1s 1s 15698270e-09 0s 0s 15708190e-09 0s 0s 15708270e-09 1s 1s 15708510e-09 0s 0s 15718470e-09 0s 0s 15718510e-09 1s 1s 15718750e-09 0s 0s 15728750e-09 1s 1s 15728790e-09 1s 1s 15729030e-09 0s 0s 15738990e-09 1s 1s 15739070e-09 1s 1s 15739270e-09 0s 0s 15749230e-09 1s 1s 15749350e-09 1s 1s 15749510e-09 0s 0s 15759470e-09 1s 1s 15759630e-09 1s 1s 15759750e-09 0s 0s 15769710e-09 1s 1s 15769910e-09 1s 1s 15769990e-09 0s 0s 15779950e-09 1s 1s 15780190e-09 1s 1s 15780230e-09 0s 0s 15790190e-09 1s 1s 15790470e-09 0s 0s 15800430e-09 1s 1s 15800710e-09 0s 0s 15800750e-09 0s 0s 15810670e-09 1s 1s 15810950e-09 0s 0s 15811030e-09 0s 0s 15820910e-09 1s 1s 15821190e-09 0s 0s 15821310e-09 0s 0s 15831150e-09 1s 1s 15831430e-09 0s 0s 15831590e-09 0s 0s 15841390e-09 1s 1s 15841670e-09 0s 0s 15841870e-09 0s 0s 15851630e-09 1s 1s 15851910e-09 0s 0s 15852150e-09 0s 0s 15861870e-09 1s 1s 15862150e-09 0s 0s 15862430e-09 0s 0s 15872110e-09 1s 1s 15872390e-09 0s 0s 15872710e-09 0s 0s 15882350e-09 1s 1s 15882630e-09 0s 0s 15882990e-09 0s 0s 15892590e-09 1s 1s 15892870e-09 0s 0s 15893270e-09 0s 0s 15902830e-09 1s 1s 15903110e-09 0s 0s 15903550e-09 0s 0s 15913070e-09 1s 1s 15913350e-09 0s 0s 15913830e-09 0s 0s 15923310e-09 1s 1s 15923590e-09 0s 0s 15924110e-09 0s 0s 15933550e-09 1s 1s 15933830e-09 0s 0s 15934390e-09 0s 0s 15943790e-09 1s 1s 15944070e-09 0s 0s 15944670e-09 0s 0s 15954030e-09 1s 1s 15954310e-09 0s 0s 15954950e-09 0s 0s 15964270e-09 1s 1s 15964550e-09 0s 0s 15965230e-09 0s 0s 15974510e-09 1s 1s 15974790e-09 0s 0s 15975510e-09 0s 0s 15984750e-09 1s 1s 15985030e-09 0s 0s 15985790e-09 0s 0s 15994990e-09 1s 1s 15995270e-09 0s 0s 15996070e-09 0s 0s 16005230e-09 1s 1s 16005510e-09 0s 0s 16006350e-09 0s 0s 16015470e-09 1s 1s 16015750e-09 0s 0s 16016630e-09 0s 0s 16025710e-09 1s 1s 16025990e-09 0s 0s 16026910e-09 0s 0s 16035950e-09 1s 1s 16036230e-09 0s 0s 16037190e-09 0s 0s 16046190e-09 1s 1s 16046470e-09 0s 0s 16047470e-09 0s 0s 16056430e-09 1s 1s 16056710e-09 0s 0s 16057750e-09 0s 0s 16066670e-09 1s 1s 16066950e-09 0s 0s 16068030e-09 0s 0s 16076910e-09 1s 1s 16077190e-09 0s 0s 16078310e-09 0s 0s 16087150e-09 1s 1s 16087430e-09 0s 0s 16088590e-09 0s 0s 16097390e-09 1s 1s 16097670e-09 0s 0s 16098870e-09 0s 0s 16107630e-09 1s 1s 16107910e-09 0s 0s 16109150e-09 0s 0s 16117870e-09 1s 1s 16118150e-09 0s 0s 16119430e-09 0s 0s 16128110e-09 1s 1s 16128390e-09 0s 0s 16129710e-09 0s 0s 16138350e-09 1s 1s 16138630e-09 0s 0s 16139990e-09 0s 0s 16148590e-09 1s 1s 16148870e-09 0s 0s 16150270e-09 0s 0s 16158830e-09 1s 1s 16159110e-09 0s 0s 16160550e-09 0s 0s 16169070e-09 1s 1s 16169350e-09 0s 0s 16170830e-09 0s 0s 16179310e-09 1s 1s 16179590e-09 0s 0s 16181110e-09 0s 0s 16189550e-09 1s 1s 16189830e-09 0s 0s 16191390e-09 0s 0s 16199790e-09 1s 1s 16200070e-09 0s 0s 16201670e-09 0s 0s 16210030e-09 1s 1s 16210310e-09 0s 0s 16211950e-09 0s 0s 16220270e-09 1s 1s 16220550e-09 0s 0s 16222230e-09 0s 0s 16230510e-09 1s 1s 16230790e-09 0s 0s 16232510e-09 0s 0s 16240750e-09 1s 1s 16241030e-09 0s 0s 16242790e-09 0s 0s 16250990e-09 1s 1s 16251270e-09 0s 0s 16253070e-09 0s 0s 16261230e-09 1s 1s 16261510e-09 0s 0s 16263350e-09 0s 0s 16271470e-09 1s 1s 16271750e-09 0s 0s 16273630e-09 0s 0s 16281710e-09 1s 1s 16281990e-09 0s 0s 16283910e-09 0s 0s 16291950e-09 1s 1s 16292230e-09 0s 0s 16294190e-09 0s 0s 16302190e-09 1s 1s 16302470e-09 0s 0s 16304470e-09 0s 0s 16312430e-09 1s 1s 16312710e-09 0s 0s 16314750e-09 0s 0s 16322670e-09 1s 1s 16322950e-09 0s 0s 16325030e-09 0s 0s 16332910e-09 1s 1s 16333190e-09 0s 0s 16335310e-09 0s 0s 16343150e-09 1s 1s 16343430e-09 0s 0s 16345590e-09 0s 0s 16353390e-09 1s 1s 16353670e-09 0s 0s 16355870e-09 0s 0s 16363630e-09 1s 1s 16363910e-09 0s 0s 16366150e-09 0s 0s 16373870e-09 1s 1s 16374150e-09 0s 0s 16376430e-09 0s 0s 16384110e-09 1s 1s 16384390e-09 0s 0s 16386710e-09 0s 0s 16394350e-09 1s 1s 16394630e-09 0s 0s 16396990e-09 0s 0s 16404590e-09 1s 1s 16404870e-09 0s 0s 16407270e-09 0s 0s 16414830e-09 1s 1s 16415110e-09 0s 0s 16417550e-09 0s 0s 16425070e-09 1s 1s 16425350e-09 0s 0s 16427830e-09 0s 0s 16435310e-09 1s 1s 16435590e-09 0s 0s 16438110e-09 0s 0s 16445550e-09 1s 1s 16445830e-09 0s 0s 16448390e-09 0s 0s 16455790e-09 1s 1s 16456070e-09 0s 0s 16458670e-09 0s 0s 16466030e-09 1s 1s 16466310e-09 0s 0s 16468950e-09 0s 0s 16476270e-09 1s 1s 16476550e-09 0s 0s 16479230e-09 0s 0s 16486510e-09 1s 1s 16486790e-09 0s 0s 16489510e-09 0s 0s 16496750e-09 1s 1s 16497030e-09 0s 0s 16499790e-09 0s 0s 16506990e-09 1s 1s 16507270e-09 0s 0s 16510070e-09 0s 0s 16517230e-09 1s 1s 16517510e-09 0s 0s 16520350e-09 0s 0s 16527470e-09 1s 1s 16527750e-09 0s 0s 16530630e-09 0s 0s 16537710e-09 1s 1s 16537990e-09 0s 0s 16540910e-09 0s 0s 16547950e-09 1s 1s 16548230e-09 0s 0s 16551190e-09 0s 0s 16558190e-09 1s 1s 16558470e-09 0s 0s 16561470e-09 0s 0s 16568430e-09 1s 1s 16568710e-09 0s 0s 16571750e-09 0s 0s 16578670e-09 1s 1s 16578950e-09 0s 0s 16582030e-09 0s 0s 16588910e-09 1s 1s 16589190e-09 0s 0s 16592310e-09 0s 0s 16599150e-09 1s 1s 16599430e-09 0s 0s 16602590e-09 0s 0s 16609390e-09 1s 1s 16609670e-09 0s 0s 16612870e-09 0s 0s 16619630e-09 1s 1s 16619910e-09 0s 0s 16623150e-09 0s 0s 16629870e-09 1s 1s 16630150e-09 0s 0s 16633430e-09 0s 0s 16640110e-09 1s 1s 16640390e-09 0s 0s 16643710e-09 0s 0s 16650350e-09 1s 1s 16650630e-09 0s 0s 16653990e-09 0s 0s 16660590e-09 1s 1s 16660870e-09 0s 0s 16664270e-09 0s 0s 16670830e-09 1s 1s 16671110e-09 0s 0s 16674550e-09 0s 0s 16681070e-09 1s 1s 16681350e-09 0s 0s 16684830e-09 0s 0s 16691310e-09 1s 1s 16691590e-09 0s 0s 16695110e-09 0s 0s 16701550e-09 1s 1s 16701830e-09 0s 0s 16705390e-09 0s 0s 16711790e-09 1s 1s 16712070e-09 0s 0s 16715670e-09 0s 0s 16722030e-09 1s 1s 16722310e-09 0s 0s 16725950e-09 0s 0s 16732270e-09 1s 1s 16732550e-09 0s 0s 16736230e-09 0s 0s 16742510e-09 1s 1s 16742790e-09 0s 0s 16746510e-09 0s 0s 16752750e-09 1s 1s 16753030e-09 0s 0s 16756790e-09 0s 0s 16762990e-09 1s 1s 16763270e-09 0s 0s 16767070e-09 0s 0s 16773230e-09 1s 1s 16773510e-09 0s 0s 16777350e-09 0s 0s 16783470e-09 1s 1s 16783750e-09 0s 0s 16787630e-09 0s 0s 16793710e-09 1s 1s 16793990e-09 0s 0s 16797910e-09 0s 0s 16803950e-09 1s 1s 16804230e-09 0s 0s 16808190e-09 0s 0s 16814190e-09 1s 1s 16814470e-09 0s 0s 16818470e-09 0s 0s 16824430e-09 1s 1s 16824710e-09 0s 0s 16828750e-09 0s 0s 16834670e-09 1s 1s 16834950e-09 0s 0s 16839030e-09 0s 0s 16844910e-09 1s 1s 16845190e-09 0s 0s 16849310e-09 0s 0s 16855150e-09 1s 1s 16855430e-09 0s 0s 16859590e-09 0s 0s 16865390e-09 1s 1s 16865670e-09 0s 0s 16869870e-09 0s 0s 16875630e-09 1s 1s 16875910e-09 0s 0s 16880150e-09 0s 0s 16885870e-09 1s 1s 16886150e-09 0s 0s 16890430e-09 0s 0s 16896110e-09 1s 1s 16896390e-09 0s 0s 16900710e-09 0s 0s 16906350e-09 1s 1s 16906630e-09 0s 0s 16910990e-09 0s 0s 16916590e-09 1s 1s 16916870e-09 0s 0s 16921270e-09 0s 0s 16926830e-09 1s 1s 16927110e-09 0s 0s 16931550e-09 0s 0s 16937070e-09 1s 1s 16937350e-09 0s 0s 16941830e-09 0s 0s 16947310e-09 1s 1s 16947590e-09 0s 0s 16952110e-09 0s 0s 16957550e-09 1s 1s 16957830e-09 0s 0s 16962390e-09 0s 0s 16967790e-09 1s 1s 16968070e-09 0s 0s 16972670e-09 0s 0s 16978030e-09 1s 1s 16978310e-09 0s 0s 16982950e-09 0s 0s 16988270e-09 1s 1s 16988550e-09 0s 0s 16993230e-09 0s 0s 16998510e-09 1s 1s 16998790e-09 0s 0s 17003510e-09 0s 0s 17008750e-09 1s 1s 17009030e-09 0s 0s 17013790e-09 0s 0s 17018990e-09 1s 1s 17019270e-09 0s 0s 17024070e-09 0s 0s 17029230e-09 1s 1s 17029510e-09 0s 0s 17034350e-09 0s 0s 17039470e-09 1s 1s 17039750e-09 0s 0s 17044630e-09 0s 0s 17049710e-09 1s 1s 17049990e-09 0s 0s 17054910e-09 0s 0s 17059950e-09 1s 1s 17060230e-09 0s 0s 17065190e-09 0s 0s 17070190e-09 1s 1s 17070470e-09 0s 0s 17075470e-09 0s 0s 17080430e-09 1s 1s 17080710e-09 0s 0s 17085750e-09 0s 0s 17090670e-09 1s 1s 17090950e-09 0s 0s 17096030e-09 0s 0s 17100910e-09 1s 1s 17101190e-09 0s 0s 17106310e-09 0s 0s 17111150e-09 1s 1s 17111430e-09 0s 0s 17116590e-09 0s 0s 17121390e-09 1s 1s 17121670e-09 0s 0s 17126870e-09 0s 0s 17131630e-09 1s 1s 17131910e-09 0s 0s 17137150e-09 0s 0s 17141870e-09 1s 1s 17142150e-09 0s 0s 17147430e-09 0s 0s 17152110e-09 1s 1s 17152390e-09 0s 0s 17157710e-09 0s 0s 17162350e-09 1s 1s 17162630e-09 0s 0s 17167990e-09 0s 0s 17172590e-09 1s 1s 17172870e-09 0s 0s 17178270e-09 0s 0s 17182830e-09 1s 1s 17183110e-09 0s 0s 17188550e-09 0s 0s 17193070e-09 1s 1s 17193350e-09 0s 0s 17198830e-09 0s 0s 17203310e-09 1s 1s 17203590e-09 0s 0s 17209110e-09 0s 0s 17213550e-09 1s 1s 17213830e-09 0s 0s 17219390e-09 0s 0s 17223790e-09 1s 1s 17224070e-09 0s 0s 17229670e-09 0s 0s 17234030e-09 1s 1s 17234310e-09 0s 0s 17239950e-09 0s 0s 17244270e-09 1s 1s 17244550e-09 0s 0s 17250230e-09 0s 0s 17254510e-09 1s 1s 17254790e-09 0s 0s 17260510e-09 0s 0s 17264750e-09 1s 1s 17265030e-09 0s 0s 17270790e-09 0s 0s 17274990e-09 1s 1s 17275270e-09 0s 0s 17281070e-09 0s 0s 17285230e-09 1s 1s 17285510e-09 0s 0s 17291350e-09 0s 0s 17295470e-09 1s 1s 17295750e-09 0s 0s 17301630e-09 0s 0s 17305710e-09 1s 1s 17305990e-09 0s 0s 17311910e-09 0s 0s 17315950e-09 1s 1s 17316230e-09 0s 0s 17322190e-09 0s 0s 17326190e-09 1s 1s 17326470e-09 0s 0s 17332470e-09 0s 0s 17336430e-09 1s 1s 17336710e-09 0s 0s 17342750e-09 0s 0s 17346670e-09 1s 1s 17346950e-09 0s 0s 17353030e-09 0s 0s 17356910e-09 1s 1s 17357190e-09 0s 0s 17363310e-09 0s 0s 17367150e-09 1s 1s 17367430e-09 0s 0s 17373590e-09 0s 0s 17377390e-09 1s 1s 17377670e-09 0s 0s 17383870e-09 0s 0s 17387630e-09 1s 1s 17387910e-09 0s 0s 17394150e-09 0s 0s 17397870e-09 1s 1s 17398150e-09 0s 0s 17404430e-09 0s 0s 17408110e-09 1s 1s 17408390e-09 0s 0s 17414710e-09 0s 0s 17418350e-09 1s 1s 17418630e-09 0s 0s 17424990e-09 0s 0s 17428590e-09 1s 1s 17428870e-09 0s 0s 17435270e-09 0s 0s 17438830e-09 1s 1s 17439110e-09 0s 0s 17445550e-09 0s 0s 17449070e-09 1s 1s 17449350e-09 0s 0s 17455830e-09 0s 0s 17459310e-09 1s 1s 17459590e-09 0s 0s 17466110e-09 0s 0s 17469550e-09 1s 1s 17469830e-09 0s 0s 17476390e-09 0s 0s 17479790e-09 1s 1s 17480070e-09 0s 0s 17486670e-09 0s 0s 17490030e-09 1s 1s 17490310e-09 0s 0s 17496950e-09 0s 0s 17500270e-09 1s 1s 17500550e-09 0s 0s 17507230e-09 0s 0s 17510510e-09 1s 1s 17510790e-09 0s 0s 17517510e-09 0s 0s 17520750e-09 1s 1s 17521030e-09 0s 0s 17527790e-09 0s 0s 17530990e-09 1s 1s 17531270e-09 0s 0s 17538070e-09 0s 0s 17541230e-09 1s 1s 17541510e-09 0s 0s 17548350e-09 0s 0s 17551470e-09 1s 1s 17551750e-09 0s 0s 17558630e-09 0s 0s 17561710e-09 1s 1s 17561990e-09 0s 0s 17568910e-09 0s 0s 17571950e-09 1s 1s 17572230e-09 0s 0s 17579190e-09 0s 0s 17582190e-09 1s 1s 17582470e-09 0s 0s 17589470e-09 0s 0s 17592430e-09 1s 1s 17592710e-09 0s 0s 17599750e-09 0s 0s 17602670e-09 1s 1s 17602950e-09 0s 0s 17610030e-09 0s 0s 17612910e-09 1s 1s 17613190e-09 0s 0s 17620310e-09 0s 0s 17623150e-09 1s 1s 17623430e-09 0s 0s 17630590e-09 0s 0s 17633390e-09 1s 1s 17633670e-09 0s 0s 17640870e-09 0s 0s 17643630e-09 1s 1s 17643910e-09 0s 0s 17651150e-09 0s 0s 17653870e-09 1s 1s 17654150e-09 0s 0s 17661430e-09 0s 0s 17664110e-09 1s 1s 17664390e-09 0s 0s 17671710e-09 0s 0s 17674350e-09 1s 1s 17674630e-09 0s 0s 17681990e-09 0s 0s 17684590e-09 1s 1s 17684870e-09 0s 0s 17692270e-09 0s 0s 17694830e-09 1s 1s 17695110e-09 0s 0s 17702550e-09 0s 0s 17705070e-09 1s 1s 17705350e-09 0s 0s 17712830e-09 0s 0s 17715310e-09 1s 1s 17715590e-09 0s 0s 17723110e-09 0s 0s 17725550e-09 1s 1s 17725830e-09 0s 0s 17733390e-09 0s 0s 17735790e-09 1s 1s 17736070e-09 0s 0s 17743670e-09 0s 0s 17746030e-09 1s 1s 17746310e-09 0s 0s 17753950e-09 0s 0s 17756270e-09 1s 1s 17756550e-09 0s 0s 17764230e-09 0s 0s 17766510e-09 1s 1s 17766790e-09 0s 0s 17774510e-09 0s 0s 17776750e-09 1s 1s 17777030e-09 0s 0s 17784790e-09 0s 0s 17786990e-09 1s 1s 17787270e-09 0s 0s 17795070e-09 0s 0s 17797230e-09 1s 1s 17797510e-09 0s 0s 17805350e-09 0s 0s 17807470e-09 1s 1s 17807750e-09 0s 0s 17815630e-09 0s 0s 17817710e-09 1s 1s 17817990e-09 0s 0s 17825910e-09 0s 0s 17827950e-09 1s 1s 17828230e-09 0s 0s 17836190e-09 0s 0s 17838190e-09 1s 1s 17838470e-09 0s 0s 17846470e-09 0s 0s 17848430e-09 1s 1s 17848710e-09 0s 0s 17856750e-09 0s 0s 17858670e-09 1s 1s 17858950e-09 0s 0s 17867030e-09 0s 0s 17868910e-09 1s 1s 17869190e-09 0s 0s 17877310e-09 0s 0s 17879150e-09 1s 1s 17879430e-09 0s 0s 17887590e-09 0s 0s 17889390e-09 1s 1s 17889670e-09 0s 0s 17897870e-09 0s 0s 17899630e-09 1s 1s 17899910e-09 0s 0s 17908150e-09 0s 0s 17909870e-09 1s 1s 17910150e-09 0s 0s 17918430e-09 0s 0s 17920110e-09 1s 1s 17920390e-09 0s 0s 17928710e-09 0s 0s 17930350e-09 1s 1s 17930630e-09 0s 0s 17938990e-09 0s 0s 17940590e-09 1s 1s 17940870e-09 0s 0s 17949270e-09 0s 0s 17950830e-09 1s 1s 17951110e-09 0s 0s 17959550e-09 0s 0s 17961070e-09 1s 1s 17961350e-09 0s 0s 17969830e-09 0s 0s 17971310e-09 1s 1s 17971590e-09 0s 0s 17980110e-09 0s 0s 17981550e-09 1s 1s 17981830e-09 0s 0s 17990390e-09 0s 0s 17991790e-09 1s 1s 17992070e-09 0s 0s 18000670e-09 0s 0s 18002030e-09 1s 1s 18002310e-09 0s 0s 18010950e-09 0s 0s 18012270e-09 1s 1s 18012550e-09 0s 0s 18021230e-09 0s 0s 18022510e-09 1s 1s 18022790e-09 0s 0s 18031510e-09 0s 0s 18032750e-09 1s 1s 18033030e-09 0s 0s 18041790e-09 0s 0s 18042990e-09 1s 1s 18043270e-09 0s 0s 18052070e-09 0s 0s 18053230e-09 1s 1s 18053510e-09 0s 0s 18062350e-09 0s 0s 18063470e-09 1s 1s 18063750e-09 0s 0s 18072630e-09 0s 0s 18073710e-09 1s 1s 18073990e-09 0s 0s 18082910e-09 0s 0s 18083950e-09 1s 1s 18084230e-09 0s 0s 18093190e-09 0s 0s 18094190e-09 1s 1s 18094470e-09 0s 0s 18103470e-09 0s 0s 18104430e-09 1s 1s 18104710e-09 0s 0s 18113750e-09 0s 0s 18114670e-09 1s 1s 18114950e-09 0s 0s 18124030e-09 0s 0s 18124910e-09 1s 1s 18125190e-09 0s 0s 18134310e-09 0s 0s 18135150e-09 1s 1s 18135430e-09 0s 0s 18144590e-09 0s 0s 18145390e-09 1s 1s 18145670e-09 0s 0s 18154870e-09 0s 0s 18155630e-09 1s 1s 18155910e-09 0s 0s 18165150e-09 0s 0s 18165870e-09 1s 1s 18166150e-09 0s 0s 18175430e-09 0s 0s 18176110e-09 1s 1s 18176390e-09 0s 0s 18185710e-09 0s 0s 18186350e-09 1s 1s 18186630e-09 0s 0s 18195990e-09 0s 0s 18196590e-09 1s 1s 18196870e-09 0s 0s 18206270e-09 0s 0s 18206830e-09 1s 1s 18207110e-09 0s 0s 18216550e-09 0s 0s 18217070e-09 1s 1s 18217350e-09 0s 0s 18226830e-09 0s 0s 18227310e-09 1s 1s 18227590e-09 0s 0s 18237110e-09 0s 0s 18237550e-09 1s 1s 18237830e-09 0s 0s 18247390e-09 0s 0s 18247790e-09 1s 1s 18248070e-09 0s 0s 18257670e-09 0s 0s 18258030e-09 1s 1s 18258310e-09 0s 0s 18267950e-09 0s 0s 18268270e-09 1s 1s 18268550e-09 0s 0s 18278230e-09 0s 0s 18278510e-09 1s 1s 18278790e-09 0s 0s 18288510e-09 0s 0s 18288750e-09 1s 1s 18289030e-09 0s 0s 18298790e-09 0s 0s 18298990e-09 1s 1s 18299270e-09 0s 0s 18309070e-09 0s 0s 18309230e-09 1s 1s 18309510e-09 0s 0s 18319350e-09 0s 0s 18319470e-09 1s 1s 18319750e-09 0s 0s 18329630e-09 0s 0s 18329710e-09 1s 1s 18329990e-09 0s 0s 18339910e-09 0s 0s 18339950e-09 1s 1s 18340230e-09 0s 0s 18350190e-09 1s 1s 18350230e-09 1s 1s 18350510e-09 0s 0s 18360430e-09 1s 1s 18360510e-09 1s 1s 18360750e-09 0s 0s 18370670e-09 1s 1s 18370790e-09 1s 1s 18370990e-09 0s 0s 18380910e-09 1s 1s 18381070e-09 1s 1s 18381230e-09 0s 0s 18391150e-09 1s 1s 18391350e-09 1s 1s 18391470e-09 0s 0s 18401390e-09 1s 1s 18401630e-09 1s 1s 18401710e-09 0s 0s 18411630e-09 1s 1s 18411910e-09 1s 1s 18411950e-09 0s 0s 18421870e-09 1s 1s 18422190e-09 0s 0s 18432110e-09 1s 1s 18432430e-09 0s 0s 18432470e-09 0s 0s 18442350e-09 1s 1s 18442670e-09 0s 0s 18442750e-09 0s 0s 18452590e-09 1s 1s 18452910e-09 0s 0s 18453030e-09 0s 0s 18462830e-09 1s 1s 18463150e-09 0s 0s 18463310e-09 0s 0s 18473070e-09 1s 1s 18473390e-09 0s 0s 18473590e-09 0s 0s 18483310e-09 1s 1s 18483630e-09 0s 0s 18483870e-09 0s 0s 18493550e-09 1s 1s 18493870e-09 0s 0s 18494150e-09 0s 0s 18503790e-09 1s 1s 18504110e-09 0s 0s 18504430e-09 0s 0s 18514030e-09 1s 1s 18514350e-09 0s 0s 18514710e-09 0s 0s 18524270e-09 1s 1s 18524590e-09 0s 0s 18524990e-09 0s 0s 18534510e-09 1s 1s 18534830e-09 0s 0s 18535270e-09 0s 0s 18544750e-09 1s 1s 18545070e-09 0s 0s 18545550e-09 0s 0s 18554990e-09 1s 1s 18555310e-09 0s 0s 18555830e-09 0s 0s 18565230e-09 1s 1s 18565550e-09 0s 0s 18566110e-09 0s 0s 18575470e-09 1s 1s 18575790e-09 0s 0s 18576390e-09 0s 0s 18585710e-09 1s 1s 18586030e-09 0s 0s 18586670e-09 0s 0s 18595950e-09 1s 1s 18596270e-09 0s 0s 18596950e-09 0s 0s 18606190e-09 1s 1s 18606510e-09 0s 0s 18607230e-09 0s 0s 18616430e-09 1s 1s 18616750e-09 0s 0s 18617510e-09 0s 0s 18626670e-09 1s 1s 18626990e-09 0s 0s 18627790e-09 0s 0s 18636910e-09 1s 1s 18637230e-09 0s 0s 18638070e-09 0s 0s 18647150e-09 1s 1s 18647470e-09 0s 0s 18648350e-09 0s 0s 18657390e-09 1s 1s 18657710e-09 0s 0s 18658630e-09 0s 0s 18667630e-09 1s 1s 18667950e-09 0s 0s 18668910e-09 0s 0s 18677870e-09 1s 1s 18678190e-09 0s 0s 18679190e-09 0s 0s 18688110e-09 1s 1s 18688430e-09 0s 0s 18689470e-09 0s 0s 18698350e-09 1s 1s 18698670e-09 0s 0s 18699750e-09 0s 0s 18708590e-09 1s 1s 18708910e-09 0s 0s 18710030e-09 0s 0s 18718830e-09 1s 1s 18719150e-09 0s 0s 18720310e-09 0s 0s 18729070e-09 1s 1s 18729390e-09 0s 0s 18730590e-09 0s 0s 18739310e-09 1s 1s 18739630e-09 0s 0s 18740870e-09 0s 0s 18749550e-09 1s 1s 18749870e-09 0s 0s 18751150e-09 0s 0s 18759790e-09 1s 1s 18760110e-09 0s 0s 18761430e-09 0s 0s 18770030e-09 1s 1s 18770350e-09 0s 0s 18771710e-09 0s 0s 18780270e-09 1s 1s 18780590e-09 0s 0s 18781990e-09 0s 0s 18790510e-09 1s 1s 18790830e-09 0s 0s 18792270e-09 0s 0s 18800750e-09 1s 1s 18801070e-09 0s 0s 18802550e-09 0s 0s 18810990e-09 1s 1s 18811310e-09 0s 0s 18812830e-09 0s 0s 18821230e-09 1s 1s 18821550e-09 0s 0s 18823110e-09 0s 0s 18831470e-09 1s 1s 18831790e-09 0s 0s 18833390e-09 0s 0s 18841710e-09 1s 1s 18842030e-09 0s 0s 18843670e-09 0s 0s 18851950e-09 1s 1s 18852270e-09 0s 0s 18853950e-09 0s 0s 18862190e-09 1s 1s 18862510e-09 0s 0s 18864230e-09 0s 0s 18872430e-09 1s 1s 18872750e-09 0s 0s 18874510e-09 0s 0s 18882670e-09 1s 1s 18882990e-09 0s 0s 18884790e-09 0s 0s 18892910e-09 1s 1s 18893230e-09 0s 0s 18895070e-09 0s 0s 18903150e-09 1s 1s 18903470e-09 0s 0s 18905350e-09 0s 0s 18913390e-09 1s 1s 18913710e-09 0s 0s 18915630e-09 0s 0s 18923630e-09 1s 1s 18923950e-09 0s 0s 18925910e-09 0s 0s 18933870e-09 1s 1s 18934190e-09 0s 0s 18936190e-09 0s 0s 18944110e-09 1s 1s 18944430e-09 0s 0s 18946470e-09 0s 0s 18954350e-09 1s 1s 18954670e-09 0s 0s 18956750e-09 0s 0s 18964590e-09 1s 1s 18964910e-09 0s 0s 18967030e-09 0s 0s 18974830e-09 1s 1s 18975150e-09 0s 0s 18977310e-09 0s 0s 18985070e-09 1s 1s 18985390e-09 0s 0s 18987590e-09 0s 0s 18995310e-09 1s 1s 18995630e-09 0s 0s 18997870e-09 0s 0s 19005550e-09 1s 1s 19005870e-09 0s 0s 19008150e-09 0s 0s 19015790e-09 1s 1s 19016110e-09 0s 0s 19018430e-09 0s 0s 19026030e-09 1s 1s 19026350e-09 0s 0s 19028710e-09 0s 0s 19036270e-09 1s 1s 19036590e-09 0s 0s 19038990e-09 0s 0s 19046510e-09 1s 1s 19046830e-09 0s 0s 19049270e-09 0s 0s 19056750e-09 1s 1s 19057070e-09 0s 0s 19059550e-09 0s 0s 19066990e-09 1s 1s 19067310e-09 0s 0s 19069830e-09 0s 0s 19077230e-09 1s 1s 19077550e-09 0s 0s 19080110e-09 0s 0s 19087470e-09 1s 1s 19087790e-09 0s 0s 19090390e-09 0s 0s 19097710e-09 1s 1s 19098030e-09 0s 0s 19100670e-09 0s 0s 19107950e-09 1s 1s 19108270e-09 0s 0s 19110950e-09 0s 0s 19118190e-09 1s 1s 19118510e-09 0s 0s 19121230e-09 0s 0s 19128430e-09 1s 1s 19128750e-09 0s 0s 19131510e-09 0s 0s 19138670e-09 1s 1s 19138990e-09 0s 0s 19141790e-09 0s 0s 19148910e-09 1s 1s 19149230e-09 0s 0s 19152070e-09 0s 0s 19159150e-09 1s 1s 19159470e-09 0s 0s 19162350e-09 0s 0s 19169390e-09 1s 1s 19169710e-09 0s 0s 19172630e-09 0s 0s 19179630e-09 1s 1s 19179950e-09 0s 0s 19182910e-09 0s 0s 19189870e-09 1s 1s 19190190e-09 0s 0s 19193190e-09 0s 0s 19200110e-09 1s 1s 19200430e-09 0s 0s 19203470e-09 0s 0s 19210350e-09 1s 1s 19210670e-09 0s 0s 19213750e-09 0s 0s 19220590e-09 1s 1s 19220910e-09 0s 0s 19224030e-09 0s 0s 19230830e-09 1s 1s 19231150e-09 0s 0s 19234310e-09 0s 0s 19241070e-09 1s 1s 19241390e-09 0s 0s 19244590e-09 0s 0s 19251310e-09 1s 1s 19251630e-09 0s 0s 19254870e-09 0s 0s 19261550e-09 1s 1s 19261870e-09 0s 0s 19265150e-09 0s 0s 19271790e-09 1s 1s 19272110e-09 0s 0s 19275430e-09 0s 0s 19282030e-09 1s 1s 19282350e-09 0s 0s 19285710e-09 0s 0s 19292270e-09 1s 1s 19292590e-09 0s 0s 19295990e-09 0s 0s 19302510e-09 1s 1s 19302830e-09 0s 0s 19306270e-09 0s 0s 19312750e-09 1s 1s 19313070e-09 0s 0s 19316550e-09 0s 0s 19322990e-09 1s 1s 19323310e-09 0s 0s 19326830e-09 0s 0s 19333230e-09 1s 1s 19333550e-09 0s 0s 19337110e-09 0s 0s 19343470e-09 1s 1s 19343790e-09 0s 0s 19347390e-09 0s 0s 19353710e-09 1s 1s 19354030e-09 0s 0s 19357670e-09 0s 0s 19363950e-09 1s 1s 19364270e-09 0s 0s 19367950e-09 0s 0s 19374190e-09 1s 1s 19374510e-09 0s 0s 19378230e-09 0s 0s 19384430e-09 1s 1s 19384750e-09 0s 0s 19388510e-09 0s 0s 19394670e-09 1s 1s 19394990e-09 0s 0s 19398790e-09 0s 0s 19404910e-09 1s 1s 19405230e-09 0s 0s 19409070e-09 0s 0s 19415150e-09 1s 1s 19415470e-09 0s 0s 19419350e-09 0s 0s 19425390e-09 1s 1s 19425710e-09 0s 0s 19429630e-09 0s 0s 19435630e-09 1s 1s 19435950e-09 0s 0s 19439910e-09 0s 0s 19445870e-09 1s 1s 19446190e-09 0s 0s 19450190e-09 0s 0s 19456110e-09 1s 1s 19456430e-09 0s 0s 19460470e-09 0s 0s 19466350e-09 1s 1s 19466670e-09 0s 0s 19470750e-09 0s 0s 19476590e-09 1s 1s 19476910e-09 0s 0s 19481030e-09 0s 0s 19486830e-09 1s 1s 19487150e-09 0s 0s 19491310e-09 0s 0s 19497070e-09 1s 1s 19497390e-09 0s 0s 19501590e-09 0s 0s 19507310e-09 1s 1s 19507630e-09 0s 0s 19511870e-09 0s 0s 19517550e-09 1s 1s 19517870e-09 0s 0s 19522150e-09 0s 0s 19527790e-09 1s 1s 19528110e-09 0s 0s 19532430e-09 0s 0s 19538030e-09 1s 1s 19538350e-09 0s 0s 19542710e-09 0s 0s 19548270e-09 1s 1s 19548590e-09 0s 0s 19552990e-09 0s 0s 19558510e-09 1s 1s 19558830e-09 0s 0s 19563270e-09 0s 0s 19568750e-09 1s 1s 19569070e-09 0s 0s 19573550e-09 0s 0s 19578990e-09 1s 1s 19579310e-09 0s 0s 19583830e-09 0s 0s 19589230e-09 1s 1s 19589550e-09 0s 0s 19594110e-09 0s 0s 19599470e-09 1s 1s 19599790e-09 0s 0s 19604390e-09 0s 0s 19609710e-09 1s 1s 19610030e-09 0s 0s 19614670e-09 0s 0s 19619950e-09 1s 1s 19620270e-09 0s 0s 19624950e-09 0s 0s 19630190e-09 1s 1s 19630510e-09 0s 0s 19635230e-09 0s 0s 19640430e-09 1s 1s 19640750e-09 0s 0s 19645510e-09 0s 0s 19650670e-09 1s 1s 19650990e-09 0s 0s 19655790e-09 0s 0s 19660910e-09 1s 1s 19661230e-09 0s 0s 19666070e-09 0s 0s 19671150e-09 1s 1s 19671470e-09 0s 0s 19676350e-09 0s 0s 19681390e-09 1s 1s 19681710e-09 0s 0s 19686630e-09 0s 0s 19691630e-09 1s 1s 19691950e-09 0s 0s 19696910e-09 0s 0s 19701870e-09 1s 1s 19702190e-09 0s 0s 19707190e-09 0s 0s 19712110e-09 1s 1s 19712430e-09 0s 0s 19717470e-09 0s 0s 19722350e-09 1s 1s 19722670e-09 0s 0s 19727750e-09 0s 0s 19732590e-09 1s 1s 19732910e-09 0s 0s 19738030e-09 0s 0s 19742830e-09 1s 1s 19743150e-09 0s 0s 19748310e-09 0s 0s 19753070e-09 1s 1s 19753390e-09 0s 0s 19758590e-09 0s 0s 19763310e-09 1s 1s 19763630e-09 0s 0s 19768870e-09 0s 0s 19773550e-09 1s 1s 19773870e-09 0s 0s 19779150e-09 0s 0s 19783790e-09 1s 1s 19784110e-09 0s 0s 19789430e-09 0s 0s 19794030e-09 1s 1s 19794350e-09 0s 0s 19799710e-09 0s 0s 19804270e-09 1s 1s 19804590e-09 0s 0s 19809990e-09 0s 0s 19814510e-09 1s 1s 19814830e-09 0s 0s 19820270e-09 0s 0s 19824750e-09 1s 1s 19825070e-09 0s 0s 19830550e-09 0s 0s 19834990e-09 1s 1s 19835310e-09 0s 0s 19840830e-09 0s 0s 19845230e-09 1s 1s 19845550e-09 0s 0s 19851110e-09 0s 0s 19855470e-09 1s 1s 19855790e-09 0s 0s 19861390e-09 0s 0s 19865710e-09 1s 1s 19866030e-09 0s 0s 19871670e-09 0s 0s 19875950e-09 1s 1s 19876270e-09 0s 0s 19881950e-09 0s 0s 19886190e-09 1s 1s 19886510e-09 0s 0s 19892230e-09 0s 0s 19896430e-09 1s 1s 19896750e-09 0s 0s 19902510e-09 0s 0s 19906670e-09 1s 1s 19906990e-09 0s 0s 19912790e-09 0s 0s 19916910e-09 1s 1s 19917230e-09 0s 0s 19923070e-09 0s 0s 19927150e-09 1s 1s 19927470e-09 0s 0s 19933350e-09 0s 0s 19937390e-09 1s 1s 19937710e-09 0s 0s 19943630e-09 0s 0s 19947630e-09 1s 1s 19947950e-09 0s 0s 19953910e-09 0s 0s 19957870e-09 1s 1s 19958190e-09 0s 0s 19964190e-09 0s 0s 19968110e-09 1s 1s 19968430e-09 0s 0s 19974470e-09 0s 0s 19978350e-09 1s 1s 19978670e-09 0s 0s 19984750e-09 0s 0s 19988590e-09 1s 1s 19988910e-09 0s 0s 19995030e-09 0s 0s 19998830e-09 1s 1s 19999150e-09 0s 0s 20005310e-09 0s 0s 20009070e-09 1s 1s 20009390e-09 0s 0s 20015590e-09 0s 0s 20019310e-09 1s 1s 20019630e-09 0s 0s 20025870e-09 0s 0s 20029550e-09 1s 1s 20029870e-09 0s 0s 20036150e-09 0s 0s 20039790e-09 1s 1s 20040110e-09 0s 0s 20046430e-09 0s 0s 20050030e-09 1s 1s 20050350e-09 0s 0s 20056710e-09 0s 0s 20060270e-09 1s 1s 20060590e-09 0s 0s 20066990e-09 0s 0s 20070510e-09 1s 1s 20070830e-09 0s 0s 20077270e-09 0s 0s 20080750e-09 1s 1s 20081070e-09 0s 0s 20087550e-09 0s 0s 20090990e-09 1s 1s 20091310e-09 0s 0s 20097830e-09 0s 0s 20101230e-09 1s 1s 20101550e-09 0s 0s 20108110e-09 0s 0s 20111470e-09 1s 1s 20111790e-09 0s 0s 20118390e-09 0s 0s 20121710e-09 1s 1s 20122030e-09 0s 0s 20128670e-09 0s 0s 20131950e-09 1s 1s 20132270e-09 0s 0s 20138950e-09 0s 0s 20142190e-09 1s 1s 20142510e-09 0s 0s 20149230e-09 0s 0s 20152430e-09 1s 1s 20152750e-09 0s 0s 20159510e-09 0s 0s 20162670e-09 1s 1s 20162990e-09 0s 0s 20169790e-09 0s 0s 20172910e-09 1s 1s 20173230e-09 0s 0s 20180070e-09 0s 0s 20183150e-09 1s 1s 20183470e-09 0s 0s 20190350e-09 0s 0s 20193390e-09 1s 1s 20193710e-09 0s 0s 20200630e-09 0s 0s 20203630e-09 1s 1s 20203950e-09 0s 0s 20210910e-09 0s 0s 20213870e-09 1s 1s 20214190e-09 0s 0s 20221190e-09 0s 0s 20224110e-09 1s 1s 20224430e-09 0s 0s 20231470e-09 0s 0s 20234350e-09 1s 1s 20234670e-09 0s 0s 20241750e-09 0s 0s 20244590e-09 1s 1s 20244910e-09 0s 0s 20252030e-09 0s 0s 20254830e-09 1s 1s 20255150e-09 0s 0s 20262310e-09 0s 0s 20265070e-09 1s 1s 20265390e-09 0s 0s 20272590e-09 0s 0s 20275310e-09 1s 1s 20275630e-09 0s 0s 20282870e-09 0s 0s 20285550e-09 1s 1s 20285870e-09 0s 0s 20293150e-09 0s 0s 20295790e-09 1s 1s 20296110e-09 0s 0s 20303430e-09 0s 0s 20306030e-09 1s 1s 20306350e-09 0s 0s 20313710e-09 0s 0s 20316270e-09 1s 1s 20316590e-09 0s 0s 20323990e-09 0s 0s 20326510e-09 1s 1s 20326830e-09 0s 0s 20334270e-09 0s 0s 20336750e-09 1s 1s 20337070e-09 0s 0s 20344550e-09 0s 0s 20346990e-09 1s 1s 20347310e-09 0s 0s 20354830e-09 0s 0s 20357230e-09 1s 1s 20357550e-09 0s 0s 20365110e-09 0s 0s 20367470e-09 1s 1s 20367790e-09 0s 0s 20375390e-09 0s 0s 20377710e-09 1s 1s 20378030e-09 0s 0s 20385670e-09 0s 0s 20387950e-09 1s 1s 20388270e-09 0s 0s 20395950e-09 0s 0s 20398190e-09 1s 1s 20398510e-09 0s 0s 20406230e-09 0s 0s 20408430e-09 1s 1s 20408750e-09 0s 0s 20416510e-09 0s 0s 20418670e-09 1s 1s 20418990e-09 0s 0s 20426790e-09 0s 0s 20428910e-09 1s 1s 20429230e-09 0s 0s 20437070e-09 0s 0s 20439150e-09 1s 1s 20439470e-09 0s 0s 20447350e-09 0s 0s 20449390e-09 1s 1s 20449710e-09 0s 0s 20457630e-09 0s 0s 20459630e-09 1s 1s 20459950e-09 0s 0s 20467910e-09 0s 0s 20469870e-09 1s 1s 20470190e-09 0s 0s 20478190e-09 0s 0s 20480110e-09 1s 1s 20480430e-09 0s 0s 20488470e-09 0s 0s 20490350e-09 1s 1s 20490670e-09 0s 0s 20498750e-09 0s 0s 20500590e-09 1s 1s 20500910e-09 0s 0s 20509030e-09 0s 0s 20510830e-09 1s 1s 20511150e-09 0s 0s 20519310e-09 0s 0s 20521070e-09 1s 1s 20521390e-09 0s 0s 20529590e-09 0s 0s 20531310e-09 1s 1s 20531630e-09 0s 0s 20539870e-09 0s 0s 20541550e-09 1s 1s 20541870e-09 0s 0s 20550150e-09 0s 0s 20551790e-09 1s 1s 20552110e-09 0s 0s 20560430e-09 0s 0s 20562030e-09 1s 1s 20562350e-09 0s 0s 20570710e-09 0s 0s 20572270e-09 1s 1s 20572590e-09 0s 0s 20580990e-09 0s 0s 20582510e-09 1s 1s 20582830e-09 0s 0s 20591270e-09 0s 0s 20592750e-09 1s 1s 20593070e-09 0s 0s 20601550e-09 0s 0s 20602990e-09 1s 1s 20603310e-09 0s 0s 20611830e-09 0s 0s 20613230e-09 1s 1s 20613550e-09 0s 0s 20622110e-09 0s 0s 20623470e-09 1s 1s 20623790e-09 0s 0s 20632390e-09 0s 0s 20633710e-09 1s 1s 20634030e-09 0s 0s 20642670e-09 0s 0s 20643950e-09 1s 1s 20644270e-09 0s 0s 20652950e-09 0s 0s 20654190e-09 1s 1s 20654510e-09 0s 0s 20663230e-09 0s 0s 20664430e-09 1s 1s 20664750e-09 0s 0s 20673510e-09 0s 0s 20674670e-09 1s 1s 20674990e-09 0s 0s 20683790e-09 0s 0s 20684910e-09 1s 1s 20685230e-09 0s 0s 20694070e-09 0s 0s 20695150e-09 1s 1s 20695470e-09 0s 0s 20704350e-09 0s 0s 20705390e-09 1s 1s 20705710e-09 0s 0s 20714630e-09 0s 0s 20715630e-09 1s 1s 20715950e-09 0s 0s 20724910e-09 0s 0s 20725870e-09 1s 1s 20726190e-09 0s 0s 20735190e-09 0s 0s 20736110e-09 1s 1s 20736430e-09 0s 0s 20745470e-09 0s 0s 20746350e-09 1s 1s 20746670e-09 0s 0s 20755750e-09 0s 0s 20756590e-09 1s 1s 20756910e-09 0s 0s 20766030e-09 0s 0s 20766830e-09 1s 1s 20767150e-09 0s 0s 20776310e-09 0s 0s 20777070e-09 1s 1s 20777390e-09 0s 0s 20786590e-09 0s 0s 20787310e-09 1s 1s 20787630e-09 0s 0s 20796870e-09 0s 0s 20797550e-09 1s 1s 20797870e-09 0s 0s 20807150e-09 0s 0s 20807790e-09 1s 1s 20808110e-09 0s 0s 20817430e-09 0s 0s 20818030e-09 1s 1s 20818350e-09 0s 0s 20827710e-09 0s 0s 20828270e-09 1s 1s 20828590e-09 0s 0s 20837990e-09 0s 0s 20838510e-09 1s 1s 20838830e-09 0s 0s 20848270e-09 0s 0s 20848750e-09 1s 1s 20849070e-09 0s 0s 20858550e-09 0s 0s 20858990e-09 1s 1s 20859310e-09 0s 0s 20868830e-09 0s 0s 20869230e-09 1s 1s 20869550e-09 0s 0s 20879110e-09 0s 0s 20879470e-09 1s 1s 20879790e-09 0s 0s 20889390e-09 0s 0s 20889710e-09 1s 1s 20890030e-09 0s 0s 20899670e-09 0s 0s 20899950e-09 1s 1s 20900270e-09 0s 0s 20909950e-09 0s 0s 20910190e-09 1s 1s 20910510e-09 0s 0s 20920230e-09 0s 0s 20920430e-09 1s 1s 20920750e-09 0s 0s 20930510e-09 0s 0s 20930670e-09 1s 1s 20930990e-09 0s 0s 20940790e-09 0s 0s 20940910e-09 1s 1s 20941230e-09 0s 0s 20951070e-09 0s 0s 20951150e-09 1s 1s 20951470e-09 0s 0s 20961350e-09 0s 0s 20961390e-09 1s 1s 20961710e-09 0s 0s 20971630e-09 1s 1s 20971670e-09 1s 1s 20971990e-09 0s 0s 20981870e-09 1s 1s 20981950e-09 1s 1s 20982230e-09 0s 0s 20992110e-09 1s 1s 20992230e-09 1s 1s 20992470e-09 0s 0s 21002350e-09 1s 1s 21002510e-09 1s 1s 21002710e-09 0s 0s 21012590e-09 1s 1s 21012790e-09 1s 1s 21012950e-09 0s 0s 21022830e-09 1s 1s 21023070e-09 1s 1s 21023190e-09 0s 0s 21033070e-09 1s 1s 21033350e-09 1s 1s 21033430e-09 0s 0s 21043310e-09 1s 1s 21043630e-09 1s 1s 21043670e-09 0s 0s 21053550e-09 1s 1s 21053910e-09 0s 0s 21063790e-09 1s 1s 21064150e-09 0s 0s 21064190e-09 0s 0s 21074030e-09 1s 1s 21074390e-09 0s 0s 21074470e-09 0s 0s 21084270e-09 1s 1s 21084630e-09 0s 0s 21084750e-09 0s 0s 21094510e-09 1s 1s 21094870e-09 0s 0s 21095030e-09 0s 0s 21104750e-09 1s 1s 21105110e-09 0s 0s 21105310e-09 0s 0s 21114990e-09 1s 1s 21115350e-09 0s 0s 21115590e-09 0s 0s 21125230e-09 1s 1s 21125590e-09 0s 0s 21125870e-09 0s 0s 21135470e-09 1s 1s 21135830e-09 0s 0s 21136150e-09 0s 0s 21145710e-09 1s 1s 21146070e-09 0s 0s 21146430e-09 0s 0s 21155950e-09 1s 1s 21156310e-09 0s 0s 21156710e-09 0s 0s 21166190e-09 1s 1s 21166550e-09 0s 0s 21166990e-09 0s 0s 21176430e-09 1s 1s 21176790e-09 0s 0s 21177270e-09 0s 0s 21186670e-09 1s 1s 21187030e-09 0s 0s 21187550e-09 0s 0s 21196910e-09 1s 1s 21197270e-09 0s 0s 21197830e-09 0s 0s 21207150e-09 1s 1s 21207510e-09 0s 0s 21208110e-09 0s 0s 21217390e-09 1s 1s 21217750e-09 0s 0s 21218390e-09 0s 0s 21227630e-09 1s 1s 21227990e-09 0s 0s 21228670e-09 0s 0s 21237870e-09 1s 1s 21238230e-09 0s 0s 21238950e-09 0s 0s 21248110e-09 1s 1s 21248470e-09 0s 0s 21249230e-09 0s 0s 21258350e-09 1s 1s 21258710e-09 0s 0s 21259510e-09 0s 0s 21268590e-09 1s 1s 21268950e-09 0s 0s 21269790e-09 0s 0s 21278830e-09 1s 1s 21279190e-09 0s 0s 21280070e-09 0s 0s 21289070e-09 1s 1s 21289430e-09 0s 0s 21290350e-09 0s 0s 21299310e-09 1s 1s 21299670e-09 0s 0s 21300630e-09 0s 0s 21309550e-09 1s 1s 21309910e-09 0s 0s 21310910e-09 0s 0s 21319790e-09 1s 1s 21320150e-09 0s 0s 21321190e-09 0s 0s 21330030e-09 1s 1s 21330390e-09 0s 0s 21331470e-09 0s 0s 21340270e-09 1s 1s 21340630e-09 0s 0s 21341750e-09 0s 0s 21350510e-09 1s 1s 21350870e-09 0s 0s 21352030e-09 0s 0s 21360750e-09 1s 1s 21361110e-09 0s 0s 21362310e-09 0s 0s 21370990e-09 1s 1s 21371350e-09 0s 0s 21372590e-09 0s 0s 21381230e-09 1s 1s 21381590e-09 0s 0s 21382870e-09 0s 0s 21391470e-09 1s 1s 21391830e-09 0s 0s 21393150e-09 0s 0s 21401710e-09 1s 1s 21402070e-09 0s 0s 21403430e-09 0s 0s 21411950e-09 1s 1s 21412310e-09 0s 0s 21413710e-09 0s 0s 21422190e-09 1s 1s 21422550e-09 0s 0s 21423990e-09 0s 0s 21432430e-09 1s 1s 21432790e-09 0s 0s 21434270e-09 0s 0s 21442670e-09 1s 1s 21443030e-09 0s 0s 21444550e-09 0s 0s 21452910e-09 1s 1s 21453270e-09 0s 0s 21454830e-09 0s 0s 21463150e-09 1s 1s 21463510e-09 0s 0s 21465110e-09 0s 0s 21473390e-09 1s 1s 21473750e-09 0s 0s 21475390e-09 0s 0s 21483630e-09 1s 1s 21483990e-09 0s 0s 21485670e-09 0s 0s 21493870e-09 1s 1s 21494230e-09 0s 0s 21495950e-09 0s 0s 21504110e-09 1s 1s 21504470e-09 0s 0s 21506230e-09 0s 0s 21514350e-09 1s 1s 21514710e-09 0s 0s 21516510e-09 0s 0s 21524590e-09 1s 1s 21524950e-09 0s 0s 21526790e-09 0s 0s 21534830e-09 1s 1s 21535190e-09 0s 0s 21537070e-09 0s 0s 21545070e-09 1s 1s 21545430e-09 0s 0s 21547350e-09 0s 0s 21555310e-09 1s 1s 21555670e-09 0s 0s 21557630e-09 0s 0s 21565550e-09 1s 1s 21565910e-09 0s 0s 21567910e-09 0s 0s 21575790e-09 1s 1s 21576150e-09 0s 0s 21578190e-09 0s 0s 21586030e-09 1s 1s 21586390e-09 0s 0s 21588470e-09 0s 0s 21596270e-09 1s 1s 21596630e-09 0s 0s 21598750e-09 0s 0s 21606510e-09 1s 1s 21606870e-09 0s 0s 21609030e-09 0s 0s 21616750e-09 1s 1s 21617110e-09 0s 0s 21619310e-09 0s 0s 21626990e-09 1s 1s 21627350e-09 0s 0s 21629590e-09 0s 0s 21637230e-09 1s 1s 21637590e-09 0s 0s 21639870e-09 0s 0s 21647470e-09 1s 1s 21647830e-09 0s 0s 21650150e-09 0s 0s 21657710e-09 1s 1s 21658070e-09 0s 0s 21660430e-09 0s 0s 21667950e-09 1s 1s 21668310e-09 0s 0s 21670710e-09 0s 0s 21678190e-09 1s 1s 21678550e-09 0s 0s 21680990e-09 0s 0s 21688430e-09 1s 1s 21688790e-09 0s 0s 21691270e-09 0s 0s 21698670e-09 1s 1s 21699030e-09 0s 0s 21701550e-09 0s 0s 21708910e-09 1s 1s 21709270e-09 0s 0s 21711830e-09 0s 0s 21719150e-09 1s 1s 21719510e-09 0s 0s 21722110e-09 0s 0s 21729390e-09 1s 1s 21729750e-09 0s 0s 21732390e-09 0s 0s 21739630e-09 1s 1s 21739990e-09 0s 0s 21742670e-09 0s 0s 21749870e-09 1s 1s 21750230e-09 0s 0s 21752950e-09 0s 0s 21760110e-09 1s 1s 21760470e-09 0s 0s 21763230e-09 0s 0s 21770350e-09 1s 1s 21770710e-09 0s 0s 21773510e-09 0s 0s 21780590e-09 1s 1s 21780950e-09 0s 0s 21783790e-09 0s 0s 21790830e-09 1s 1s 21791190e-09 0s 0s 21794070e-09 0s 0s 21801070e-09 1s 1s 21801430e-09 0s 0s 21804350e-09 0s 0s 21811310e-09 1s 1s 21811670e-09 0s 0s 21814630e-09 0s 0s 21821550e-09 1s 1s 21821910e-09 0s 0s 21824910e-09 0s 0s 21831790e-09 1s 1s 21832150e-09 0s 0s 21835190e-09 0s 0s 21842030e-09 1s 1s 21842390e-09 0s 0s 21845470e-09 0s 0s 21852270e-09 1s 1s 21852630e-09 0s 0s 21855750e-09 0s 0s 21862510e-09 1s 1s 21862870e-09 0s 0s 21866030e-09 0s 0s 21872750e-09 1s 1s 21873110e-09 0s 0s 21876310e-09 0s 0s 21882990e-09 1s 1s 21883350e-09 0s 0s 21886590e-09 0s 0s 21893230e-09 1s 1s 21893590e-09 0s 0s 21896870e-09 0s 0s 21903470e-09 1s 1s 21903830e-09 0s 0s 21907150e-09 0s 0s 21913710e-09 1s 1s 21914070e-09 0s 0s 21917430e-09 0s 0s 21923950e-09 1s 1s 21924310e-09 0s 0s 21927710e-09 0s 0s 21934190e-09 1s 1s 21934550e-09 0s 0s 21937990e-09 0s 0s 21944430e-09 1s 1s 21944790e-09 0s 0s 21948270e-09 0s 0s 21954670e-09 1s 1s 21955030e-09 0s 0s 21958550e-09 0s 0s 21964910e-09 1s 1s 21965270e-09 0s 0s 21968830e-09 0s 0s 21975150e-09 1s 1s 21975510e-09 0s 0s 21979110e-09 0s 0s 21985390e-09 1s 1s 21985750e-09 0s 0s 21989390e-09 0s 0s 21995630e-09 1s 1s 21995990e-09 0s 0s 21999670e-09 0s 0s 22005870e-09 1s 1s 22006230e-09 0s 0s 22009950e-09 0s 0s 22016110e-09 1s 1s 22016470e-09 0s 0s 22020230e-09 0s 0s 22026350e-09 1s 1s 22026710e-09 0s 0s 22030510e-09 0s 0s 22036590e-09 1s 1s 22036950e-09 0s 0s 22040790e-09 0s 0s 22046830e-09 1s 1s 22047190e-09 0s 0s 22051070e-09 0s 0s 22057070e-09 1s 1s 22057430e-09 0s 0s 22061350e-09 0s 0s 22067310e-09 1s 1s 22067670e-09 0s 0s 22071630e-09 0s 0s 22077550e-09 1s 1s 22077910e-09 0s 0s 22081910e-09 0s 0s 22087790e-09 1s 1s 22088150e-09 0s 0s 22092190e-09 0s 0s 22098030e-09 1s 1s 22098390e-09 0s 0s 22102470e-09 0s 0s 22108270e-09 1s 1s 22108630e-09 0s 0s 22112750e-09 0s 0s 22118510e-09 1s 1s 22118870e-09 0s 0s 22123030e-09 0s 0s 22128750e-09 1s 1s 22129110e-09 0s 0s 22133310e-09 0s 0s 22138990e-09 1s 1s 22139350e-09 0s 0s 22143590e-09 0s 0s 22149230e-09 1s 1s 22149590e-09 0s 0s 22153870e-09 0s 0s 22159470e-09 1s 1s 22159830e-09 0s 0s 22164150e-09 0s 0s 22169710e-09 1s 1s 22170070e-09 0s 0s 22174430e-09 0s 0s 22179950e-09 1s 1s 22180310e-09 0s 0s 22184710e-09 0s 0s 22190190e-09 1s 1s 22190550e-09 0s 0s 22194990e-09 0s 0s 22200430e-09 1s 1s 22200790e-09 0s 0s 22205270e-09 0s 0s 22210670e-09 1s 1s 22211030e-09 0s 0s 22215550e-09 0s 0s 22220910e-09 1s 1s 22221270e-09 0s 0s 22225830e-09 0s 0s 22231150e-09 1s 1s 22231510e-09 0s 0s 22236110e-09 0s 0s 22241390e-09 1s 1s 22241750e-09 0s 0s 22246390e-09 0s 0s 22251630e-09 1s 1s 22251990e-09 0s 0s 22256670e-09 0s 0s 22261870e-09 1s 1s 22262230e-09 0s 0s 22266950e-09 0s 0s 22272110e-09 1s 1s 22272470e-09 0s 0s 22277230e-09 0s 0s 22282350e-09 1s 1s 22282710e-09 0s 0s 22287510e-09 0s 0s 22292590e-09 1s 1s 22292950e-09 0s 0s 22297790e-09 0s 0s 22302830e-09 1s 1s 22303190e-09 0s 0s 22308070e-09 0s 0s 22313070e-09 1s 1s 22313430e-09 0s 0s 22318350e-09 0s 0s 22323310e-09 1s 1s 22323670e-09 0s 0s 22328630e-09 0s 0s 22333550e-09 1s 1s 22333910e-09 0s 0s 22338910e-09 0s 0s 22343790e-09 1s 1s 22344150e-09 0s 0s 22349190e-09 0s 0s 22354030e-09 1s 1s 22354390e-09 0s 0s 22359470e-09 0s 0s 22364270e-09 1s 1s 22364630e-09 0s 0s 22369750e-09 0s 0s 22374510e-09 1s 1s 22374870e-09 0s 0s 22380030e-09 0s 0s 22384750e-09 1s 1s 22385110e-09 0s 0s 22390310e-09 0s 0s 22394990e-09 1s 1s 22395350e-09 0s 0s 22400590e-09 0s 0s 22405230e-09 1s 1s 22405590e-09 0s 0s 22410870e-09 0s 0s 22415470e-09 1s 1s 22415830e-09 0s 0s 22421150e-09 0s 0s 22425710e-09 1s 1s 22426070e-09 0s 0s 22431430e-09 0s 0s 22435950e-09 1s 1s 22436310e-09 0s 0s 22441710e-09 0s 0s 22446190e-09 1s 1s 22446550e-09 0s 0s 22451990e-09 0s 0s 22456430e-09 1s 1s 22456790e-09 0s 0s 22462270e-09 0s 0s 22466670e-09 1s 1s 22467030e-09 0s 0s 22472550e-09 0s 0s 22476910e-09 1s 1s 22477270e-09 0s 0s 22482830e-09 0s 0s 22487150e-09 1s 1s 22487510e-09 0s 0s 22493110e-09 0s 0s 22497390e-09 1s 1s 22497750e-09 0s 0s 22503390e-09 0s 0s 22507630e-09 1s 1s 22507990e-09 0s 0s 22513670e-09 0s 0s 22517870e-09 1s 1s 22518230e-09 0s 0s 22523950e-09 0s 0s 22528110e-09 1s 1s 22528470e-09 0s 0s 22534230e-09 0s 0s 22538350e-09 1s 1s 22538710e-09 0s 0s 22544510e-09 0s 0s 22548590e-09 1s 1s 22548950e-09 0s 0s 22554790e-09 0s 0s 22558830e-09 1s 1s 22559190e-09 0s 0s 22565070e-09 0s 0s 22569070e-09 1s 1s 22569430e-09 0s 0s 22575350e-09 0s 0s 22579310e-09 1s 1s 22579670e-09 0s 0s 22585630e-09 0s 0s 22589550e-09 1s 1s 22589910e-09 0s 0s 22595910e-09 0s 0s 22599790e-09 1s 1s 22600150e-09 0s 0s 22606190e-09 0s 0s 22610030e-09 1s 1s 22610390e-09 0s 0s 22616470e-09 0s 0s 22620270e-09 1s 1s 22620630e-09 0s 0s 22626750e-09 0s 0s 22630510e-09 1s 1s 22630870e-09 0s 0s 22637030e-09 0s 0s 22640750e-09 1s 1s 22641110e-09 0s 0s 22647310e-09 0s 0s 22650990e-09 1s 1s 22651350e-09 0s 0s 22657590e-09 0s 0s 22661230e-09 1s 1s 22661590e-09 0s 0s 22667870e-09 0s 0s 22671470e-09 1s 1s 22671830e-09 0s 0s 22678150e-09 0s 0s 22681710e-09 1s 1s 22682070e-09 0s 0s 22688430e-09 0s 0s 22691950e-09 1s 1s 22692310e-09 0s 0s 22698710e-09 0s 0s 22702190e-09 1s 1s 22702550e-09 0s 0s 22708990e-09 0s 0s 22712430e-09 1s 1s 22712790e-09 0s 0s 22719270e-09 0s 0s 22722670e-09 1s 1s 22723030e-09 0s 0s 22729550e-09 0s 0s 22732910e-09 1s 1s 22733270e-09 0s 0s 22739830e-09 0s 0s 22743150e-09 1s 1s 22743510e-09 0s 0s 22750110e-09 0s 0s 22753390e-09 1s 1s 22753750e-09 0s 0s 22760390e-09 0s 0s 22763630e-09 1s 1s 22763990e-09 0s 0s 22770670e-09 0s 0s 22773870e-09 1s 1s 22774230e-09 0s 0s 22780950e-09 0s 0s 22784110e-09 1s 1s 22784470e-09 0s 0s 22791230e-09 0s 0s 22794350e-09 1s 1s 22794710e-09 0s 0s 22801510e-09 0s 0s 22804590e-09 1s 1s 22804950e-09 0s 0s 22811790e-09 0s 0s 22814830e-09 1s 1s 22815190e-09 0s 0s 22822070e-09 0s 0s 22825070e-09 1s 1s 22825430e-09 0s 0s 22832350e-09 0s 0s 22835310e-09 1s 1s 22835670e-09 0s 0s 22842630e-09 0s 0s 22845550e-09 1s 1s 22845910e-09 0s 0s 22852910e-09 0s 0s 22855790e-09 1s 1s 22856150e-09 0s 0s 22863190e-09 0s 0s 22866030e-09 1s 1s 22866390e-09 0s 0s 22873470e-09 0s 0s 22876270e-09 1s 1s 22876630e-09 0s 0s 22883750e-09 0s 0s 22886510e-09 1s 1s 22886870e-09 0s 0s 22894030e-09 0s 0s 22896750e-09 1s 1s 22897110e-09 0s 0s 22904310e-09 0s 0s 22906990e-09 1s 1s 22907350e-09 0s 0s 22914590e-09 0s 0s 22917230e-09 1s 1s 22917590e-09 0s 0s 22924870e-09 0s 0s 22927470e-09 1s 1s 22927830e-09 0s 0s 22935150e-09 0s 0s 22937710e-09 1s 1s 22938070e-09 0s 0s 22945430e-09 0s 0s 22947950e-09 1s 1s 22948310e-09 0s 0s 22955710e-09 0s 0s 22958190e-09 1s 1s 22958550e-09 0s 0s 22965990e-09 0s 0s 22968430e-09 1s 1s 22968790e-09 0s 0s 22976270e-09 0s 0s 22978670e-09 1s 1s 22979030e-09 0s 0s 22986550e-09 0s 0s 22988910e-09 1s 1s 22989270e-09 0s 0s 22996830e-09 0s 0s 22999150e-09 1s 1s 22999510e-09 0s 0s 23007110e-09 0s 0s 23009390e-09 1s 1s 23009750e-09 0s 0s 23017390e-09 0s 0s 23019630e-09 1s 1s 23019990e-09 0s 0s 23027670e-09 0s 0s 23029870e-09 1s 1s 23030230e-09 0s 0s 23037950e-09 0s 0s 23040110e-09 1s 1s 23040470e-09 0s 0s 23048230e-09 0s 0s 23050350e-09 1s 1s 23050710e-09 0s 0s 23058510e-09 0s 0s 23060590e-09 1s 1s 23060950e-09 0s 0s 23068790e-09 0s 0s 23070830e-09 1s 1s 23071190e-09 0s 0s 23079070e-09 0s 0s 23081070e-09 1s 1s 23081430e-09 0s 0s 23089350e-09 0s 0s 23091310e-09 1s 1s 23091670e-09 0s 0s 23099630e-09 0s 0s 23101550e-09 1s 1s 23101910e-09 0s 0s 23109910e-09 0s 0s 23111790e-09 1s 1s 23112150e-09 0s 0s 23120190e-09 0s 0s 23122030e-09 1s 1s 23122390e-09 0s 0s 23130470e-09 0s 0s 23132270e-09 1s 1s 23132630e-09 0s 0s 23140750e-09 0s 0s 23142510e-09 1s 1s 23142870e-09 0s 0s 23151030e-09 0s 0s 23152750e-09 1s 1s 23153110e-09 0s 0s 23161310e-09 0s 0s 23162990e-09 1s 1s 23163350e-09 0s 0s 23171590e-09 0s 0s 23173230e-09 1s 1s 23173590e-09 0s 0s 23181870e-09 0s 0s 23183470e-09 1s 1s 23183830e-09 0s 0s 23192150e-09 0s 0s 23193710e-09 1s 1s 23194070e-09 0s 0s 23202430e-09 0s 0s 23203950e-09 1s 1s 23204310e-09 0s 0s 23212710e-09 0s 0s 23214190e-09 1s 1s 23214550e-09 0s 0s 23222990e-09 0s 0s 23224430e-09 1s 1s 23224790e-09 0s 0s 23233270e-09 0s 0s 23234670e-09 1s 1s 23235030e-09 0s 0s 23243550e-09 0s 0s 23244910e-09 1s 1s 23245270e-09 0s 0s 23253830e-09 0s 0s 23255150e-09 1s 1s 23255510e-09 0s 0s 23264110e-09 0s 0s 23265390e-09 1s 1s 23265750e-09 0s 0s 23274390e-09 0s 0s 23275630e-09 1s 1s 23275990e-09 0s 0s 23284670e-09 0s 0s 23285870e-09 1s 1s 23286230e-09 0s 0s 23294950e-09 0s 0s 23296110e-09 1s 1s 23296470e-09 0s 0s 23305230e-09 0s 0s 23306350e-09 1s 1s 23306710e-09 0s 0s 23315510e-09 0s 0s 23316590e-09 1s 1s 23316950e-09 0s 0s 23325790e-09 0s 0s 23326830e-09 1s 1s 23327190e-09 0s 0s 23336070e-09 0s 0s 23337070e-09 1s 1s 23337430e-09 0s 0s 23346350e-09 0s 0s 23347310e-09 1s 1s 23347670e-09 0s 0s 23356630e-09 0s 0s 23357550e-09 1s 1s 23357910e-09 0s 0s 23366910e-09 0s 0s 23367790e-09 1s 1s 23368150e-09 0s 0s 23377190e-09 0s 0s 23378030e-09 1s 1s 23378390e-09 0s 0s 23387470e-09 0s 0s 23388270e-09 1s 1s 23388630e-09 0s 0s 23397750e-09 0s 0s 23398510e-09 1s 1s 23398870e-09 0s 0s 23408030e-09 0s 0s 23408750e-09 1s 1s 23409110e-09 0s 0s 23418310e-09 0s 0s 23418990e-09 1s 1s 23419350e-09 0s 0s 23428590e-09 0s 0s 23429230e-09 1s 1s 23429590e-09 0s 0s 23438870e-09 0s 0s 23439470e-09 1s 1s 23439830e-09 0s 0s 23449150e-09 0s 0s 23449710e-09 1s 1s 23450070e-09 0s 0s 23459430e-09 0s 0s 23459950e-09 1s 1s 23460310e-09 0s 0s 23469710e-09 0s 0s 23470190e-09 1s 1s 23470550e-09 0s 0s 23479990e-09 0s 0s 23480430e-09 1s 1s 23480790e-09 0s 0s 23490270e-09 0s 0s 23490670e-09 1s 1s 23491030e-09 0s 0s 23500550e-09 0s 0s 23500910e-09 1s 1s 23501270e-09 0s 0s 23510830e-09 0s 0s 23511150e-09 1s 1s 23511510e-09 0s 0s 23521110e-09 0s 0s 23521390e-09 1s 1s 23521750e-09 0s 0s 23531390e-09 0s 0s 23531630e-09 1s 1s 23531990e-09 0s 0s 23541670e-09 0s 0s 23541870e-09 1s 1s 23542230e-09 0s 0s 23551950e-09 0s 0s 23552110e-09 1s 1s 23552470e-09 0s 0s 23562230e-09 0s 0s 23562350e-09 1s 1s 23562710e-09 0s 0s 23572510e-09 0s 0s 23572590e-09 1s 1s 23572950e-09 0s 0s 23582790e-09 0s 0s 23582830e-09 1s 1s 23583190e-09 0s 0s 23593070e-09 1s 1s 23593110e-09 1s 1s 23593470e-09 0s 0s 23603310e-09 1s 1s 23603390e-09 1s 1s 23603710e-09 0s 0s 23613550e-09 1s 1s 23613670e-09 1s 1s 23613950e-09 0s 0s 23623790e-09 1s 1s 23623950e-09 1s 1s 23624190e-09 0s 0s 23634030e-09 1s 1s 23634230e-09 1s 1s 23634430e-09 0s 0s 23644270e-09 1s 1s 23644510e-09 1s 1s 23644670e-09 0s 0s 23654510e-09 1s 1s 23654790e-09 1s 1s 23654910e-09 0s 0s 23664750e-09 1s 1s 23665070e-09 1s 1s 23665150e-09 0s 0s 23674990e-09 1s 1s 23675350e-09 1s 1s 23675390e-09 0s 0s 23685230e-09 1s 1s 23685630e-09 0s 0s 23695470e-09 1s 1s 23695870e-09 0s 0s 23695910e-09 0s 0s 23705710e-09 1s 1s 23706110e-09 0s 0s 23706190e-09 0s 0s 23715950e-09 1s 1s 23716350e-09 0s 0s 23716470e-09 0s 0s 23726190e-09 1s 1s 23726590e-09 0s 0s 23726750e-09 0s 0s 23736430e-09 1s 1s 23736830e-09 0s 0s 23737030e-09 0s 0s 23746670e-09 1s 1s 23747070e-09 0s 0s 23747310e-09 0s 0s 23756910e-09 1s 1s 23757310e-09 0s 0s 23757590e-09 0s 0s 23767150e-09 1s 1s 23767550e-09 0s 0s 23767870e-09 0s 0s 23777390e-09 1s 1s 23777790e-09 0s 0s 23778150e-09 0s 0s 23787630e-09 1s 1s 23788030e-09 0s 0s 23788430e-09 0s 0s 23797870e-09 1s 1s 23798270e-09 0s 0s 23798710e-09 0s 0s 23808110e-09 1s 1s 23808510e-09 0s 0s 23808990e-09 0s 0s 23818350e-09 1s 1s 23818750e-09 0s 0s 23819270e-09 0s 0s 23828590e-09 1s 1s 23828990e-09 0s 0s 23829550e-09 0s 0s 23838830e-09 1s 1s 23839230e-09 0s 0s 23839830e-09 0s 0s 23849070e-09 1s 1s 23849470e-09 0s 0s 23850110e-09 0s 0s 23859310e-09 1s 1s 23859710e-09 0s 0s 23860390e-09 0s 0s 23869550e-09 1s 1s 23869950e-09 0s 0s 23870670e-09 0s 0s 23879790e-09 1s 1s 23880190e-09 0s 0s 23880950e-09 0s 0s 23890030e-09 1s 1s 23890430e-09 0s 0s 23891230e-09 0s 0s 23900270e-09 1s 1s 23900670e-09 0s 0s 23901510e-09 0s 0s 23910510e-09 1s 1s 23910910e-09 0s 0s 23911790e-09 0s 0s 23920750e-09 1s 1s 23921150e-09 0s 0s 23922070e-09 0s 0s 23930990e-09 1s 1s 23931390e-09 0s 0s 23932350e-09 0s 0s 23941230e-09 1s 1s 23941630e-09 0s 0s 23942630e-09 0s 0s 23951470e-09 1s 1s 23951870e-09 0s 0s 23952910e-09 0s 0s 23961710e-09 1s 1s 23962110e-09 0s 0s 23963190e-09 0s 0s 23971950e-09 1s 1s 23972350e-09 0s 0s 23973470e-09 0s 0s 23982190e-09 1s 1s 23982590e-09 0s 0s 23983750e-09 0s 0s 23992430e-09 1s 1s 23992830e-09 0s 0s 23994030e-09 0s 0s 24002670e-09 1s 1s 24003070e-09 0s 0s 24004310e-09 0s 0s 24012910e-09 1s 1s 24013310e-09 0s 0s 24014590e-09 0s 0s 24023150e-09 1s 1s 24023550e-09 0s 0s 24024870e-09 0s 0s 24033390e-09 1s 1s 24033790e-09 0s 0s 24035150e-09 0s 0s 24043630e-09 1s 1s 24044030e-09 0s 0s 24045430e-09 0s 0s 24053870e-09 1s 1s 24054270e-09 0s 0s 24055710e-09 0s 0s 24064110e-09 1s 1s 24064510e-09 0s 0s 24065990e-09 0s 0s 24074350e-09 1s 1s 24074750e-09 0s 0s 24076270e-09 0s 0s 24084590e-09 1s 1s 24084990e-09 0s 0s 24086550e-09 0s 0s 24094830e-09 1s 1s 24095230e-09 0s 0s 24096830e-09 0s 0s 24105070e-09 1s 1s 24105470e-09 0s 0s 24107110e-09 0s 0s 24115310e-09 1s 1s 24115710e-09 0s 0s 24117390e-09 0s 0s 24125550e-09 1s 1s 24125950e-09 0s 0s 24127670e-09 0s 0s 24135790e-09 1s 1s 24136190e-09 0s 0s 24137950e-09 0s 0s 24146030e-09 1s 1s 24146430e-09 0s 0s 24148230e-09 0s 0s 24156270e-09 1s 1s 24156670e-09 0s 0s 24158510e-09 0s 0s 24166510e-09 1s 1s 24166910e-09 0s 0s 24168790e-09 0s 0s 24176750e-09 1s 1s 24177150e-09 0s 0s 24179070e-09 0s 0s 24186990e-09 1s 1s 24187390e-09 0s 0s 24189350e-09 0s 0s 24197230e-09 1s 1s 24197630e-09 0s 0s 24199630e-09 0s 0s 24207470e-09 1s 1s 24207870e-09 0s 0s 24209910e-09 0s 0s 24217710e-09 1s 1s 24218110e-09 0s 0s 24220190e-09 0s 0s 24227950e-09 1s 1s 24228350e-09 0s 0s 24230470e-09 0s 0s 24238190e-09 1s 1s 24238590e-09 0s 0s 24240750e-09 0s 0s 24248430e-09 1s 1s 24248830e-09 0s 0s 24251030e-09 0s 0s 24258670e-09 1s 1s 24259070e-09 0s 0s 24261310e-09 0s 0s 24268910e-09 1s 1s 24269310e-09 0s 0s 24271590e-09 0s 0s 24279150e-09 1s 1s 24279550e-09 0s 0s 24281870e-09 0s 0s 24289390e-09 1s 1s 24289790e-09 0s 0s 24292150e-09 0s 0s 24299630e-09 1s 1s 24300030e-09 0s 0s 24302430e-09 0s 0s 24309870e-09 1s 1s 24310270e-09 0s 0s 24312710e-09 0s 0s 24320110e-09 1s 1s 24320510e-09 0s 0s 24322990e-09 0s 0s 24330350e-09 1s 1s 24330750e-09 0s 0s 24333270e-09 0s 0s 24340590e-09 1s 1s 24340990e-09 0s 0s 24343550e-09 0s 0s 24350830e-09 1s 1s 24351230e-09 0s 0s 24353830e-09 0s 0s 24361070e-09 1s 1s 24361470e-09 0s 0s 24364110e-09 0s 0s 24371310e-09 1s 1s 24371710e-09 0s 0s 24374390e-09 0s 0s 24381550e-09 1s 1s 24381950e-09 0s 0s 24384670e-09 0s 0s 24391790e-09 1s 1s 24392190e-09 0s 0s 24394950e-09 0s 0s 24402030e-09 1s 1s 24402430e-09 0s 0s 24405230e-09 0s 0s 24412270e-09 1s 1s 24412670e-09 0s 0s 24415510e-09 0s 0s 24422510e-09 1s 1s 24422910e-09 0s 0s 24425790e-09 0s 0s 24432750e-09 1s 1s 24433150e-09 0s 0s 24436070e-09 0s 0s 24442990e-09 1s 1s 24443390e-09 0s 0s 24446350e-09 0s 0s 24453230e-09 1s 1s 24453630e-09 0s 0s 24456630e-09 0s 0s 24463470e-09 1s 1s 24463870e-09 0s 0s 24466910e-09 0s 0s 24473710e-09 1s 1s 24474110e-09 0s 0s 24477190e-09 0s 0s 24483950e-09 1s 1s 24484350e-09 0s 0s 24487470e-09 0s 0s 24494190e-09 1s 1s 24494590e-09 0s 0s 24497750e-09 0s 0s 24504430e-09 1s 1s 24504830e-09 0s 0s 24508030e-09 0s 0s 24514670e-09 1s 1s 24515070e-09 0s 0s 24518310e-09 0s 0s 24524910e-09 1s 1s 24525310e-09 0s 0s 24528590e-09 0s 0s 24535150e-09 1s 1s 24535550e-09 0s 0s 24538870e-09 0s 0s 24545390e-09 1s 1s 24545790e-09 0s 0s 24549150e-09 0s 0s 24555630e-09 1s 1s 24556030e-09 0s 0s 24559430e-09 0s 0s 24565870e-09 1s 1s 24566270e-09 0s 0s 24569710e-09 0s 0s 24576110e-09 1s 1s 24576510e-09 0s 0s 24579990e-09 0s 0s 24586350e-09 1s 1s 24586750e-09 0s 0s 24590270e-09 0s 0s 24596590e-09 1s 1s 24596990e-09 0s 0s 24600550e-09 0s 0s 24606830e-09 1s 1s 24607230e-09 0s 0s 24610830e-09 0s 0s 24617070e-09 1s 1s 24617470e-09 0s 0s 24621110e-09 0s 0s 24627310e-09 1s 1s 24627710e-09 0s 0s 24631390e-09 0s 0s 24637550e-09 1s 1s 24637950e-09 0s 0s 24641670e-09 0s 0s 24647790e-09 1s 1s 24648190e-09 0s 0s 24651950e-09 0s 0s 24658030e-09 1s 1s 24658430e-09 0s 0s 24662230e-09 0s 0s 24668270e-09 1s 1s 24668670e-09 0s 0s 24672510e-09 0s 0s 24678510e-09 1s 1s 24678910e-09 0s 0s 24682790e-09 0s 0s 24688750e-09 1s 1s 24689150e-09 0s 0s 24693070e-09 0s 0s 24698990e-09 1s 1s 24699390e-09 0s 0s 24703350e-09 0s 0s 24709230e-09 1s 1s 24709630e-09 0s 0s 24713630e-09 0s 0s 24719470e-09 1s 1s 24719870e-09 0s 0s 24723910e-09 0s 0s 24729710e-09 1s 1s 24730110e-09 0s 0s 24734190e-09 0s 0s 24739950e-09 1s 1s 24740350e-09 0s 0s 24744470e-09 0s 0s 24750190e-09 1s 1s 24750590e-09 0s 0s 24754750e-09 0s 0s 24760430e-09 1s 1s 24760830e-09 0s 0s 24765030e-09 0s 0s 24770670e-09 1s 1s 24771070e-09 0s 0s 24775310e-09 0s 0s 24780910e-09 1s 1s 24781310e-09 0s 0s 24785590e-09 0s 0s 24791150e-09 1s 1s 24791550e-09 0s 0s 24795870e-09 0s 0s 24801390e-09 1s 1s 24801790e-09 0s 0s 24806150e-09 0s 0s 24811630e-09 1s 1s 24812030e-09 0s 0s 24816430e-09 0s 0s 24821870e-09 1s 1s 24822270e-09 0s 0s 24826710e-09 0s 0s 24832110e-09 1s 1s 24832510e-09 0s 0s 24836990e-09 0s 0s 24842350e-09 1s 1s 24842750e-09 0s 0s 24847270e-09 0s 0s 24852590e-09 1s 1s 24852990e-09 0s 0s 24857550e-09 0s 0s 24862830e-09 1s 1s 24863230e-09 0s 0s 24867830e-09 0s 0s 24873070e-09 1s 1s 24873470e-09 0s 0s 24878110e-09 0s 0s 24883310e-09 1s 1s 24883710e-09 0s 0s 24888390e-09 0s 0s 24893550e-09 1s 1s 24893950e-09 0s 0s 24898670e-09 0s 0s 24903790e-09 1s 1s 24904190e-09 0s 0s 24908950e-09 0s 0s 24914030e-09 1s 1s 24914430e-09 0s 0s 24919230e-09 0s 0s 24924270e-09 1s 1s 24924670e-09 0s 0s 24929510e-09 0s 0s 24934510e-09 1s 1s 24934910e-09 0s 0s 24939790e-09 0s 0s 24944750e-09 1s 1s 24945150e-09 0s 0s 24950070e-09 0s 0s 24954990e-09 1s 1s 24955390e-09 0s 0s 24960350e-09 0s 0s 24965230e-09 1s 1s 24965630e-09 0s 0s 24970630e-09 0s 0s 24975470e-09 1s 1s 24975870e-09 0s 0s 24980910e-09 0s 0s 24985710e-09 1s 1s 24986110e-09 0s 0s 24991190e-09 0s 0s 24995950e-09 1s 1s 24996350e-09 0s 0s 25001470e-09 0s 0s 25006190e-09 1s 1s 25006590e-09 0s 0s 25011750e-09 0s 0s 25016430e-09 1s 1s 25016830e-09 0s 0s 25022030e-09 0s 0s 25026670e-09 1s 1s 25027070e-09 0s 0s 25032310e-09 0s 0s 25036910e-09 1s 1s 25037310e-09 0s 0s 25042590e-09 0s 0s 25047150e-09 1s 1s 25047550e-09 0s 0s 25052870e-09 0s 0s 25057390e-09 1s 1s 25057790e-09 0s 0s 25063150e-09 0s 0s 25067630e-09 1s 1s 25068030e-09 0s 0s 25073430e-09 0s 0s 25077870e-09 1s 1s 25078270e-09 0s 0s 25083710e-09 0s 0s 25088110e-09 1s 1s 25088510e-09 0s 0s 25093990e-09 0s 0s 25098350e-09 1s 1s 25098750e-09 0s 0s 25104270e-09 0s 0s 25108590e-09 1s 1s 25108990e-09 0s 0s 25114550e-09 0s 0s 25118830e-09 1s 1s 25119230e-09 0s 0s 25124830e-09 0s 0s 25129070e-09 1s 1s 25129470e-09 0s 0s 25135110e-09 0s 0s 25139310e-09 1s 1s 25139710e-09 0s 0s 25145390e-09 0s 0s 25149550e-09 1s 1s 25149950e-09 0s 0s 25155670e-09 0s 0s 25159790e-09 1s 1s 25160190e-09 0s 0s 25165950e-09 0s 0s 25170030e-09 1s 1s 25170430e-09 0s 0s 25176230e-09 0s 0s 25180270e-09 1s 1s 25180670e-09 0s 0s 25186510e-09 0s 0s 25190510e-09 1s 1s 25190910e-09 0s 0s 25196790e-09 0s 0s 25200750e-09 1s 1s 25201150e-09 0s 0s 25207070e-09 0s 0s 25210990e-09 1s 1s 25211390e-09 0s 0s 25217350e-09 0s 0s 25221230e-09 1s 1s 25221630e-09 0s 0s 25227630e-09 0s 0s 25231470e-09 1s 1s 25231870e-09 0s 0s 25237910e-09 0s 0s 25241710e-09 1s 1s 25242110e-09 0s 0s 25248190e-09 0s 0s 25251950e-09 1s 1s 25252350e-09 0s 0s 25258470e-09 0s 0s 25262190e-09 1s 1s 25262590e-09 0s 0s 25268750e-09 0s 0s 25272430e-09 1s 1s 25272830e-09 0s 0s 25279030e-09 0s 0s 25282670e-09 1s 1s 25283070e-09 0s 0s 25289310e-09 0s 0s 25292910e-09 1s 1s 25293310e-09 0s 0s 25299590e-09 0s 0s 25303150e-09 1s 1s 25303550e-09 0s 0s 25309870e-09 0s 0s 25313390e-09 1s 1s 25313790e-09 0s 0s 25320150e-09 0s 0s 25323630e-09 1s 1s 25324030e-09 0s 0s 25330430e-09 0s 0s 25333870e-09 1s 1s 25334270e-09 0s 0s 25340710e-09 0s 0s 25344110e-09 1s 1s 25344510e-09 0s 0s 25350990e-09 0s 0s 25354350e-09 1s 1s 25354750e-09 0s 0s 25361270e-09 0s 0s 25364590e-09 1s 1s 25364990e-09 0s 0s 25371550e-09 0s 0s 25374830e-09 1s 1s 25375230e-09 0s 0s 25381830e-09 0s 0s 25385070e-09 1s 1s 25385470e-09 0s 0s 25392110e-09 0s 0s 25395310e-09 1s 1s 25395710e-09 0s 0s 25402390e-09 0s 0s 25405550e-09 1s 1s 25405950e-09 0s 0s 25412670e-09 0s 0s 25415790e-09 1s 1s 25416190e-09 0s 0s 25422950e-09 0s 0s 25426030e-09 1s 1s 25426430e-09 0s 0s 25433230e-09 0s 0s 25436270e-09 1s 1s 25436670e-09 0s 0s 25443510e-09 0s 0s 25446510e-09 1s 1s 25446910e-09 0s 0s 25453790e-09 0s 0s 25456750e-09 1s 1s 25457150e-09 0s 0s 25464070e-09 0s 0s 25466990e-09 1s 1s 25467390e-09 0s 0s 25474350e-09 0s 0s 25477230e-09 1s 1s 25477630e-09 0s 0s 25484630e-09 0s 0s 25487470e-09 1s 1s 25487870e-09 0s 0s 25494910e-09 0s 0s 25497710e-09 1s 1s 25498110e-09 0s 0s 25505190e-09 0s 0s 25507950e-09 1s 1s 25508350e-09 0s 0s 25515470e-09 0s 0s 25518190e-09 1s 1s 25518590e-09 0s 0s 25525750e-09 0s 0s 25528430e-09 1s 1s 25528830e-09 0s 0s 25536030e-09 0s 0s 25538670e-09 1s 1s 25539070e-09 0s 0s 25546310e-09 0s 0s 25548910e-09 1s 1s 25549310e-09 0s 0s 25556590e-09 0s 0s 25559150e-09 1s 1s 25559550e-09 0s 0s 25566870e-09 0s 0s 25569390e-09 1s 1s 25569790e-09 0s 0s 25577150e-09 0s 0s 25579630e-09 1s 1s 25580030e-09 0s 0s 25587430e-09 0s 0s 25589870e-09 1s 1s 25590270e-09 0s 0s 25597710e-09 0s 0s 25600110e-09 1s 1s 25600510e-09 0s 0s 25607990e-09 0s 0s 25610350e-09 1s 1s 25610750e-09 0s 0s 25618270e-09 0s 0s 25620590e-09 1s 1s 25620990e-09 0s 0s 25628550e-09 0s 0s 25630830e-09 1s 1s 25631230e-09 0s 0s 25638830e-09 0s 0s 25641070e-09 1s 1s 25641470e-09 0s 0s 25649110e-09 0s 0s 25651310e-09 1s 1s 25651710e-09 0s 0s 25659390e-09 0s 0s 25661550e-09 1s 1s 25661950e-09 0s 0s 25669670e-09 0s 0s 25671790e-09 1s 1s 25672190e-09 0s 0s 25679950e-09 0s 0s 25682030e-09 1s 1s 25682430e-09 0s 0s 25690230e-09 0s 0s 25692270e-09 1s 1s 25692670e-09 0s 0s 25700510e-09 0s 0s 25702510e-09 1s 1s 25702910e-09 0s 0s 25710790e-09 0s 0s 25712750e-09 1s 1s 25713150e-09 0s 0s 25721070e-09 0s 0s 25722990e-09 1s 1s 25723390e-09 0s 0s 25731350e-09 0s 0s 25733230e-09 1s 1s 25733630e-09 0s 0s 25741630e-09 0s 0s 25743470e-09 1s 1s 25743870e-09 0s 0s 25751910e-09 0s 0s 25753710e-09 1s 1s 25754110e-09 0s 0s 25762190e-09 0s 0s 25763950e-09 1s 1s 25764350e-09 0s 0s 25772470e-09 0s 0s 25774190e-09 1s 1s 25774590e-09 0s 0s 25782750e-09 0s 0s 25784430e-09 1s 1s 25784830e-09 0s 0s 25793030e-09 0s 0s 25794670e-09 1s 1s 25795070e-09 0s 0s 25803310e-09 0s 0s 25804910e-09 1s 1s 25805310e-09 0s 0s 25813590e-09 0s 0s 25815150e-09 1s 1s 25815550e-09 0s 0s 25823870e-09 0s 0s 25825390e-09 1s 1s 25825790e-09 0s 0s 25834150e-09 0s 0s 25835630e-09 1s 1s 25836030e-09 0s 0s 25844430e-09 0s 0s 25845870e-09 1s 1s 25846270e-09 0s 0s 25854710e-09 0s 0s 25856110e-09 1s 1s 25856510e-09 0s 0s 25864990e-09 0s 0s 25866350e-09 1s 1s 25866750e-09 0s 0s 25875270e-09 0s 0s 25876590e-09 1s 1s 25876990e-09 0s 0s 25885550e-09 0s 0s 25886830e-09 1s 1s 25887230e-09 0s 0s 25895830e-09 0s 0s 25897070e-09 1s 1s 25897470e-09 0s 0s 25906110e-09 0s 0s 25907310e-09 1s 1s 25907710e-09 0s 0s 25916390e-09 0s 0s 25917550e-09 1s 1s 25917950e-09 0s 0s 25926670e-09 0s 0s 25927790e-09 1s 1s 25928190e-09 0s 0s 25936950e-09 0s 0s 25938030e-09 1s 1s 25938430e-09 0s 0s 25947230e-09 0s 0s 25948270e-09 1s 1s 25948670e-09 0s 0s 25957510e-09 0s 0s 25958510e-09 1s 1s 25958910e-09 0s 0s 25967790e-09 0s 0s 25968750e-09 1s 1s 25969150e-09 0s 0s 25978070e-09 0s 0s 25978990e-09 1s 1s 25979390e-09 0s 0s 25988350e-09 0s 0s 25989230e-09 1s 1s 25989630e-09 0s 0s 25998630e-09 0s 0s 25999470e-09 1s 1s 25999870e-09 0s 0s 26008910e-09 0s 0s 26009710e-09 1s 1s 26010110e-09 0s 0s 26019190e-09 0s 0s 26019950e-09 1s 1s 26020350e-09 0s 0s 26029470e-09 0s 0s 26030190e-09 1s 1s 26030590e-09 0s 0s 26039750e-09 0s 0s 26040430e-09 1s 1s 26040830e-09 0s 0s 26050030e-09 0s 0s 26050670e-09 1s 1s 26051070e-09 0s 0s 26060310e-09 0s 0s 26060910e-09 1s 1s 26061310e-09 0s 0s 26070590e-09 0s 0s 26071150e-09 1s 1s 26071550e-09 0s 0s 26080870e-09 0s 0s 26081390e-09 1s 1s 26081790e-09 0s 0s 26091150e-09 0s 0s 26091630e-09 1s 1s 26092030e-09 0s 0s 26101430e-09 0s 0s 26101870e-09 1s 1s 26102270e-09 0s 0s 26111710e-09 0s 0s 26112110e-09 1s 1s 26112510e-09 0s 0s 26121990e-09 0s 0s 26122350e-09 1s 1s 26122750e-09 0s 0s 26132270e-09 0s 0s 26132590e-09 1s 1s 26132990e-09 0s 0s 26142550e-09 0s 0s 26142830e-09 1s 1s 26143230e-09 0s 0s 26152830e-09 0s 0s 26153070e-09 1s 1s 26153470e-09 0s 0s 26163110e-09 0s 0s 26163310e-09 1s 1s 26163710e-09 0s 0s 26173390e-09 0s 0s 26173550e-09 1s 1s 26173950e-09 0s 0s 26183670e-09 0s 0s 26183790e-09 1s 1s 26184190e-09 0s 0s 26193950e-09 0s 0s 26194030e-09 1s 1s 26194430e-09 0s 0s 26204230e-09 0s 0s 26204270e-09 1s 1s 26204670e-09 0s 0s 26214510e-09 1s 1s 26214550e-09 1s 1s 26214950e-09 0s 0s 26224750e-09 1s 1s 26224830e-09 1s 1s 26225190e-09 0s 0s 26234990e-09 1s 1s 26235110e-09 1s 1s 26235430e-09 0s 0s 26245230e-09 1s 1s 26245390e-09 1s 1s 26245670e-09 0s 0s 26255470e-09 1s 1s 26255670e-09 1s 1s 26255910e-09 0s 0s 26265710e-09 1s 1s 26265950e-09 1s 1s 26266150e-09 0s 0s 26275950e-09 1s 1s 26276230e-09 1s 1s 26276390e-09 0s 0s 26286190e-09 1s 1s 26286510e-09 1s 1s 26286630e-09 0s 0s 26296430e-09 1s 1s 26296790e-09 1s 1s 26296870e-09 0s 0s 26306670e-09 1s 1s 26307070e-09 1s 1s 26307110e-09 0s 0s 26316910e-09 1s 1s 26317350e-09 0s 0s 26327150e-09 1s 1s 26327590e-09 0s 0s 26327630e-09 0s 0s 26337390e-09 1s 1s 26337830e-09 0s 0s 26337910e-09 0s 0s 26347630e-09 1s 1s 26348070e-09 0s 0s 26348190e-09 0s 0s 26357870e-09 1s 1s 26358310e-09 0s 0s 26358470e-09 0s 0s 26368110e-09 1s 1s 26368550e-09 0s 0s 26368750e-09 0s 0s 26378350e-09 1s 1s 26378790e-09 0s 0s 26379030e-09 0s 0s 26388590e-09 1s 1s 26389030e-09 0s 0s 26389310e-09 0s 0s 26398830e-09 1s 1s 26399270e-09 0s 0s 26399590e-09 0s 0s 26409070e-09 1s 1s 26409510e-09 0s 0s 26409870e-09 0s 0s 26419310e-09 1s 1s 26419750e-09 0s 0s 26420150e-09 0s 0s 26429550e-09 1s 1s 26429990e-09 0s 0s 26430430e-09 0s 0s 26439790e-09 1s 1s 26440230e-09 0s 0s 26440710e-09 0s 0s 26450030e-09 1s 1s 26450470e-09 0s 0s 26450990e-09 0s 0s 26460270e-09 1s 1s 26460710e-09 0s 0s 26461270e-09 0s 0s 26470510e-09 1s 1s 26470950e-09 0s 0s 26471550e-09 0s 0s 26480750e-09 1s 1s 26481190e-09 0s 0s 26481830e-09 0s 0s 26490990e-09 1s 1s 26491430e-09 0s 0s 26492110e-09 0s 0s 26501230e-09 1s 1s 26501670e-09 0s 0s 26502390e-09 0s 0s 26511470e-09 1s 1s 26511910e-09 0s 0s 26512670e-09 0s 0s 26521710e-09 1s 1s 26522150e-09 0s 0s 26522950e-09 0s 0s 26531950e-09 1s 1s 26532390e-09 0s 0s 26533230e-09 0s 0s 26542190e-09 1s 1s 26542630e-09 0s 0s 26543510e-09 0s 0s 26552430e-09 1s 1s 26552870e-09 0s 0s 26553790e-09 0s 0s 26562670e-09 1s 1s 26563110e-09 0s 0s 26564070e-09 0s 0s 26572910e-09 1s 1s 26573350e-09 0s 0s 26574350e-09 0s 0s 26583150e-09 1s 1s 26583590e-09 0s 0s 26584630e-09 0s 0s 26593390e-09 1s 1s 26593830e-09 0s 0s 26594910e-09 0s 0s 26603630e-09 1s 1s 26604070e-09 0s 0s 26605190e-09 0s 0s 26613870e-09 1s 1s 26614310e-09 0s 0s 26615470e-09 0s 0s 26624110e-09 1s 1s 26624550e-09 0s 0s 26625750e-09 0s 0s 26634350e-09 1s 1s 26634790e-09 0s 0s 26636030e-09 0s 0s 26644590e-09 1s 1s 26645030e-09 0s 0s 26646310e-09 0s 0s 26654830e-09 1s 1s 26655270e-09 0s 0s 26656590e-09 0s 0s 26665070e-09 1s 1s 26665510e-09 0s 0s 26666870e-09 0s 0s 26675310e-09 1s 1s 26675750e-09 0s 0s 26677150e-09 0s 0s 26685550e-09 1s 1s 26685990e-09 0s 0s 26687430e-09 0s 0s 26695790e-09 1s 1s 26696230e-09 0s 0s 26697710e-09 0s 0s 26706030e-09 1s 1s 26706470e-09 0s 0s 26707990e-09 0s 0s 26716270e-09 1s 1s 26716710e-09 0s 0s 26718270e-09 0s 0s 26726510e-09 1s 1s 26726950e-09 0s 0s 26728550e-09 0s 0s 26736750e-09 1s 1s 26737190e-09 0s 0s 26738830e-09 0s 0s 26746990e-09 1s 1s 26747430e-09 0s 0s 26749110e-09 0s 0s 26757230e-09 1s 1s 26757670e-09 0s 0s 26759390e-09 0s 0s 26767470e-09 1s 1s 26767910e-09 0s 0s 26769670e-09 0s 0s 26777710e-09 1s 1s 26778150e-09 0s 0s 26779950e-09 0s 0s 26787950e-09 1s 1s 26788390e-09 0s 0s 26790230e-09 0s 0s 26798190e-09 1s 1s 26798630e-09 0s 0s 26800510e-09 0s 0s 26808430e-09 1s 1s 26808870e-09 0s 0s 26810790e-09 0s 0s 26818670e-09 1s 1s 26819110e-09 0s 0s 26821070e-09 0s 0s 26828910e-09 1s 1s 26829350e-09 0s 0s 26831350e-09 0s 0s 26839150e-09 1s 1s 26839590e-09 0s 0s 26841630e-09 0s 0s 26849390e-09 1s 1s 26849830e-09 0s 0s 26851910e-09 0s 0s 26859630e-09 1s 1s 26860070e-09 0s 0s 26862190e-09 0s 0s 26869870e-09 1s 1s 26870310e-09 0s 0s 26872470e-09 0s 0s 26880110e-09 1s 1s 26880550e-09 0s 0s 26882750e-09 0s 0s 26890350e-09 1s 1s 26890790e-09 0s 0s 26893030e-09 0s 0s 26900590e-09 1s 1s 26901030e-09 0s 0s 26903310e-09 0s 0s 26910830e-09 1s 1s 26911270e-09 0s 0s 26913590e-09 0s 0s 26921070e-09 1s 1s 26921510e-09 0s 0s 26923870e-09 0s 0s 26931310e-09 1s 1s 26931750e-09 0s 0s 26934150e-09 0s 0s 26941550e-09 1s 1s 26941990e-09 0s 0s 26944430e-09 0s 0s 26951790e-09 1s 1s 26952230e-09 0s 0s 26954710e-09 0s 0s 26962030e-09 1s 1s 26962470e-09 0s 0s 26964990e-09 0s 0s 26972270e-09 1s 1s 26972710e-09 0s 0s 26975270e-09 0s 0s 26982510e-09 1s 1s 26982950e-09 0s 0s 26985550e-09 0s 0s 26992750e-09 1s 1s 26993190e-09 0s 0s 26995830e-09 0s 0s 27002990e-09 1s 1s 27003430e-09 0s 0s 27006110e-09 0s 0s 27013230e-09 1s 1s 27013670e-09 0s 0s 27016390e-09 0s 0s 27023470e-09 1s 1s 27023910e-09 0s 0s 27026670e-09 0s 0s 27033710e-09 1s 1s 27034150e-09 0s 0s 27036950e-09 0s 0s 27043950e-09 1s 1s 27044390e-09 0s 0s 27047230e-09 0s 0s 27054190e-09 1s 1s 27054630e-09 0s 0s 27057510e-09 0s 0s 27064430e-09 1s 1s 27064870e-09 0s 0s 27067790e-09 0s 0s 27074670e-09 1s 1s 27075110e-09 0s 0s 27078070e-09 0s 0s 27084910e-09 1s 1s 27085350e-09 0s 0s 27088350e-09 0s 0s 27095150e-09 1s 1s 27095590e-09 0s 0s 27098630e-09 0s 0s 27105390e-09 1s 1s 27105830e-09 0s 0s 27108910e-09 0s 0s 27115630e-09 1s 1s 27116070e-09 0s 0s 27119190e-09 0s 0s 27125870e-09 1s 1s 27126310e-09 0s 0s 27129470e-09 0s 0s 27136110e-09 1s 1s 27136550e-09 0s 0s 27139750e-09 0s 0s 27146350e-09 1s 1s 27146790e-09 0s 0s 27150030e-09 0s 0s 27156590e-09 1s 1s 27157030e-09 0s 0s 27160310e-09 0s 0s 27166830e-09 1s 1s 27167270e-09 0s 0s 27170590e-09 0s 0s 27177070e-09 1s 1s 27177510e-09 0s 0s 27180870e-09 0s 0s 27187310e-09 1s 1s 27187750e-09 0s 0s 27191150e-09 0s 0s 27197550e-09 1s 1s 27197990e-09 0s 0s 27201430e-09 0s 0s 27207790e-09 1s 1s 27208230e-09 0s 0s 27211710e-09 0s 0s 27218030e-09 1s 1s 27218470e-09 0s 0s 27221990e-09 0s 0s 27228270e-09 1s 1s 27228710e-09 0s 0s 27232270e-09 0s 0s 27238510e-09 1s 1s 27238950e-09 0s 0s 27242550e-09 0s 0s 27248750e-09 1s 1s 27249190e-09 0s 0s 27252830e-09 0s 0s 27258990e-09 1s 1s 27259430e-09 0s 0s 27263110e-09 0s 0s 27269230e-09 1s 1s 27269670e-09 0s 0s 27273390e-09 0s 0s 27279470e-09 1s 1s 27279910e-09 0s 0s 27283670e-09 0s 0s 27289710e-09 1s 1s 27290150e-09 0s 0s 27293950e-09 0s 0s 27299950e-09 1s 1s 27300390e-09 0s 0s 27304230e-09 0s 0s 27310190e-09 1s 1s 27310630e-09 0s 0s 27314510e-09 0s 0s 27320430e-09 1s 1s 27320870e-09 0s 0s 27324790e-09 0s 0s 27330670e-09 1s 1s 27331110e-09 0s 0s 27335070e-09 0s 0s 27340910e-09 1s 1s 27341350e-09 0s 0s 27345350e-09 0s 0s 27351150e-09 1s 1s 27351590e-09 0s 0s 27355630e-09 0s 0s 27361390e-09 1s 1s 27361830e-09 0s 0s 27365910e-09 0s 0s 27371630e-09 1s 1s 27372070e-09 0s 0s 27376190e-09 0s 0s 27381870e-09 1s 1s 27382310e-09 0s 0s 27386470e-09 0s 0s 27392110e-09 1s 1s 27392550e-09 0s 0s 27396750e-09 0s 0s 27402350e-09 1s 1s 27402790e-09 0s 0s 27407030e-09 0s 0s 27412590e-09 1s 1s 27413030e-09 0s 0s 27417310e-09 0s 0s 27422830e-09 1s 1s 27423270e-09 0s 0s 27427590e-09 0s 0s 27433070e-09 1s 1s 27433510e-09 0s 0s 27437870e-09 0s 0s 27443310e-09 1s 1s 27443750e-09 0s 0s 27448150e-09 0s 0s 27453550e-09 1s 1s 27453990e-09 0s 0s 27458430e-09 0s 0s 27463790e-09 1s 1s 27464230e-09 0s 0s 27468710e-09 0s 0s 27474030e-09 1s 1s 27474470e-09 0s 0s 27478990e-09 0s 0s 27484270e-09 1s 1s 27484710e-09 0s 0s 27489270e-09 0s 0s 27494510e-09 1s 1s 27494950e-09 0s 0s 27499550e-09 0s 0s 27504750e-09 1s 1s 27505190e-09 0s 0s 27509830e-09 0s 0s 27514990e-09 1s 1s 27515430e-09 0s 0s 27520110e-09 0s 0s 27525230e-09 1s 1s 27525670e-09 0s 0s 27530390e-09 0s 0s 27535470e-09 1s 1s 27535910e-09 0s 0s 27540670e-09 0s 0s 27545710e-09 1s 1s 27546150e-09 0s 0s 27550950e-09 0s 0s 27555950e-09 1s 1s 27556390e-09 0s 0s 27561230e-09 0s 0s 27566190e-09 1s 1s 27566630e-09 0s 0s 27571510e-09 0s 0s 27576430e-09 1s 1s 27576870e-09 0s 0s 27581790e-09 0s 0s 27586670e-09 1s 1s 27587110e-09 0s 0s 27592070e-09 0s 0s 27596910e-09 1s 1s 27597350e-09 0s 0s 27602350e-09 0s 0s 27607150e-09 1s 1s 27607590e-09 0s 0s 27612630e-09 0s 0s 27617390e-09 1s 1s 27617830e-09 0s 0s 27622910e-09 0s 0s 27627630e-09 1s 1s 27628070e-09 0s 0s 27633190e-09 0s 0s 27637870e-09 1s 1s 27638310e-09 0s 0s 27643470e-09 0s 0s 27648110e-09 1s 1s 27648550e-09 0s 0s 27653750e-09 0s 0s 27658350e-09 1s 1s 27658790e-09 0s 0s 27664030e-09 0s 0s 27668590e-09 1s 1s 27669030e-09 0s 0s 27674310e-09 0s 0s 27678830e-09 1s 1s 27679270e-09 0s 0s 27684590e-09 0s 0s 27689070e-09 1s 1s 27689510e-09 0s 0s 27694870e-09 0s 0s 27699310e-09 1s 1s 27699750e-09 0s 0s 27705150e-09 0s 0s 27709550e-09 1s 1s 27709990e-09 0s 0s 27715430e-09 0s 0s 27719790e-09 1s 1s 27720230e-09 0s 0s 27725710e-09 0s 0s 27730030e-09 1s 1s 27730470e-09 0s 0s 27735990e-09 0s 0s 27740270e-09 1s 1s 27740710e-09 0s 0s 27746270e-09 0s 0s 27750510e-09 1s 1s 27750950e-09 0s 0s 27756550e-09 0s 0s 27760750e-09 1s 1s 27761190e-09 0s 0s 27766830e-09 0s 0s 27770990e-09 1s 1s 27771430e-09 0s 0s 27777110e-09 0s 0s 27781230e-09 1s 1s 27781670e-09 0s 0s 27787390e-09 0s 0s 27791470e-09 1s 1s 27791910e-09 0s 0s 27797670e-09 0s 0s 27801710e-09 1s 1s 27802150e-09 0s 0s 27807950e-09 0s 0s 27811950e-09 1s 1s 27812390e-09 0s 0s 27818230e-09 0s 0s 27822190e-09 1s 1s 27822630e-09 0s 0s 27828510e-09 0s 0s 27832430e-09 1s 1s 27832870e-09 0s 0s 27838790e-09 0s 0s 27842670e-09 1s 1s 27843110e-09 0s 0s 27849070e-09 0s 0s 27852910e-09 1s 1s 27853350e-09 0s 0s 27859350e-09 0s 0s 27863150e-09 1s 1s 27863590e-09 0s 0s 27869630e-09 0s 0s 27873390e-09 1s 1s 27873830e-09 0s 0s 27879910e-09 0s 0s 27883630e-09 1s 1s 27884070e-09 0s 0s 27890190e-09 0s 0s 27893870e-09 1s 1s 27894310e-09 0s 0s 27900470e-09 0s 0s 27904110e-09 1s 1s 27904550e-09 0s 0s 27910750e-09 0s 0s 27914350e-09 1s 1s 27914790e-09 0s 0s 27921030e-09 0s 0s 27924590e-09 1s 1s 27925030e-09 0s 0s 27931310e-09 0s 0s 27934830e-09 1s 1s 27935270e-09 0s 0s 27941590e-09 0s 0s 27945070e-09 1s 1s 27945510e-09 0s 0s 27951870e-09 0s 0s 27955310e-09 1s 1s 27955750e-09 0s 0s 27962150e-09 0s 0s 27965550e-09 1s 1s 27965990e-09 0s 0s 27972430e-09 0s 0s 27975790e-09 1s 1s 27976230e-09 0s 0s 27982710e-09 0s 0s 27986030e-09 1s 1s 27986470e-09 0s 0s 27992990e-09 0s 0s 27996270e-09 1s 1s 27996710e-09 0s 0s 28003270e-09 0s 0s 28006510e-09 1s 1s 28006950e-09 0s 0s 28013550e-09 0s 0s 28016750e-09 1s 1s 28017190e-09 0s 0s 28023830e-09 0s 0s 28026990e-09 1s 1s 28027430e-09 0s 0s 28034110e-09 0s 0s 28037230e-09 1s 1s 28037670e-09 0s 0s 28044390e-09 0s 0s 28047470e-09 1s 1s 28047910e-09 0s 0s 28054670e-09 0s 0s 28057710e-09 1s 1s 28058150e-09 0s 0s 28064950e-09 0s 0s 28067950e-09 1s 1s 28068390e-09 0s 0s 28075230e-09 0s 0s 28078190e-09 1s 1s 28078630e-09 0s 0s 28085510e-09 0s 0s 28088430e-09 1s 1s 28088870e-09 0s 0s 28095790e-09 0s 0s 28098670e-09 1s 1s 28099110e-09 0s 0s 28106070e-09 0s 0s 28108910e-09 1s 1s 28109350e-09 0s 0s 28116350e-09 0s 0s 28119150e-09 1s 1s 28119590e-09 0s 0s 28126630e-09 0s 0s 28129390e-09 1s 1s 28129830e-09 0s 0s 28136910e-09 0s 0s 28139630e-09 1s 1s 28140070e-09 0s 0s 28147190e-09 0s 0s 28149870e-09 1s 1s 28150310e-09 0s 0s 28157470e-09 0s 0s 28160110e-09 1s 1s 28160550e-09 0s 0s 28167750e-09 0s 0s 28170350e-09 1s 1s 28170790e-09 0s 0s 28178030e-09 0s 0s 28180590e-09 1s 1s 28181030e-09 0s 0s 28188310e-09 0s 0s 28190830e-09 1s 1s 28191270e-09 0s 0s 28198590e-09 0s 0s 28201070e-09 1s 1s 28201510e-09 0s 0s 28208870e-09 0s 0s 28211310e-09 1s 1s 28211750e-09 0s 0s 28219150e-09 0s 0s 28221550e-09 1s 1s 28221990e-09 0s 0s 28229430e-09 0s 0s 28231790e-09 1s 1s 28232230e-09 0s 0s 28239710e-09 0s 0s 28242030e-09 1s 1s 28242470e-09 0s 0s 28249990e-09 0s 0s 28252270e-09 1s 1s 28252710e-09 0s 0s 28260270e-09 0s 0s 28262510e-09 1s 1s 28262950e-09 0s 0s 28270550e-09 0s 0s 28272750e-09 1s 1s 28273190e-09 0s 0s 28280830e-09 0s 0s 28282990e-09 1s 1s 28283430e-09 0s 0s 28291110e-09 0s 0s 28293230e-09 1s 1s 28293670e-09 0s 0s 28301390e-09 0s 0s 28303470e-09 1s 1s 28303910e-09 0s 0s 28311670e-09 0s 0s 28313710e-09 1s 1s 28314150e-09 0s 0s 28321950e-09 0s 0s 28323950e-09 1s 1s 28324390e-09 0s 0s 28332230e-09 0s 0s 28334190e-09 1s 1s 28334630e-09 0s 0s 28342510e-09 0s 0s 28344430e-09 1s 1s 28344870e-09 0s 0s 28352790e-09 0s 0s 28354670e-09 1s 1s 28355110e-09 0s 0s 28363070e-09 0s 0s 28364910e-09 1s 1s 28365350e-09 0s 0s 28373350e-09 0s 0s 28375150e-09 1s 1s 28375590e-09 0s 0s 28383630e-09 0s 0s 28385390e-09 1s 1s 28385830e-09 0s 0s 28393910e-09 0s 0s 28395630e-09 1s 1s 28396070e-09 0s 0s 28404190e-09 0s 0s 28405870e-09 1s 1s 28406310e-09 0s 0s 28414470e-09 0s 0s 28416110e-09 1s 1s 28416550e-09 0s 0s 28424750e-09 0s 0s 28426350e-09 1s 1s 28426790e-09 0s 0s 28435030e-09 0s 0s 28436590e-09 1s 1s 28437030e-09 0s 0s 28445310e-09 0s 0s 28446830e-09 1s 1s 28447270e-09 0s 0s 28455590e-09 0s 0s 28457070e-09 1s 1s 28457510e-09 0s 0s 28465870e-09 0s 0s 28467310e-09 1s 1s 28467750e-09 0s 0s 28476150e-09 0s 0s 28477550e-09 1s 1s 28477990e-09 0s 0s 28486430e-09 0s 0s 28487790e-09 1s 1s 28488230e-09 0s 0s 28496710e-09 0s 0s 28498030e-09 1s 1s 28498470e-09 0s 0s 28506990e-09 0s 0s 28508270e-09 1s 1s 28508710e-09 0s 0s 28517270e-09 0s 0s 28518510e-09 1s 1s 28518950e-09 0s 0s 28527550e-09 0s 0s 28528750e-09 1s 1s 28529190e-09 0s 0s 28537830e-09 0s 0s 28538990e-09 1s 1s 28539430e-09 0s 0s 28548110e-09 0s 0s 28549230e-09 1s 1s 28549670e-09 0s 0s 28558390e-09 0s 0s 28559470e-09 1s 1s 28559910e-09 0s 0s 28568670e-09 0s 0s 28569710e-09 1s 1s 28570150e-09 0s 0s 28578950e-09 0s 0s 28579950e-09 1s 1s 28580390e-09 0s 0s 28589230e-09 0s 0s 28590190e-09 1s 1s 28590630e-09 0s 0s 28599510e-09 0s 0s 28600430e-09 1s 1s 28600870e-09 0s 0s 28609790e-09 0s 0s 28610670e-09 1s 1s 28611110e-09 0s 0s 28620070e-09 0s 0s 28620910e-09 1s 1s 28621350e-09 0s 0s 28630350e-09 0s 0s 28631150e-09 1s 1s 28631590e-09 0s 0s 28640630e-09 0s 0s 28641390e-09 1s 1s 28641830e-09 0s 0s 28650910e-09 0s 0s 28651630e-09 1s 1s 28652070e-09 0s 0s 28661190e-09 0s 0s 28661870e-09 1s 1s 28662310e-09 0s 0s 28671470e-09 0s 0s 28672110e-09 1s 1s 28672550e-09 0s 0s 28681750e-09 0s 0s 28682350e-09 1s 1s 28682790e-09 0s 0s 28692030e-09 0s 0s 28692590e-09 1s 1s 28693030e-09 0s 0s 28702310e-09 0s 0s 28702830e-09 1s 1s 28703270e-09 0s 0s 28712590e-09 0s 0s 28713070e-09 1s 1s 28713510e-09 0s 0s 28722870e-09 0s 0s 28723310e-09 1s 1s 28723750e-09 0s 0s 28733150e-09 0s 0s 28733550e-09 1s 1s 28733990e-09 0s 0s 28743430e-09 0s 0s 28743790e-09 1s 1s 28744230e-09 0s 0s 28753710e-09 0s 0s 28754030e-09 1s 1s 28754470e-09 0s 0s 28763990e-09 0s 0s 28764270e-09 1s 1s 28764710e-09 0s 0s 28774270e-09 0s 0s 28774510e-09 1s 1s 28774950e-09 0s 0s 28784550e-09 0s 0s 28784750e-09 1s 1s 28785190e-09 0s 0s 28794830e-09 0s 0s 28794990e-09 1s 1s 28795430e-09 0s 0s 28805110e-09 0s 0s 28805230e-09 1s 1s 28805670e-09 0s 0s 28815390e-09 0s 0s 28815470e-09 1s 1s 28815910e-09 0s 0s 28825670e-09 0s 0s 28825710e-09 1s 1s 28826150e-09 0s 0s 28835950e-09 1s 1s 28835990e-09 1s 1s 28836430e-09 0s 0s 28846190e-09 1s 1s 28846270e-09 1s 1s 28846670e-09 0s 0s 28856430e-09 1s 1s 28856550e-09 1s 1s 28856910e-09 0s 0s 28866670e-09 1s 1s 28866830e-09 1s 1s 28867150e-09 0s 0s 28876910e-09 1s 1s 28877110e-09 1s 1s 28877390e-09 0s 0s 28887150e-09 1s 1s 28887390e-09 1s 1s 28887630e-09 0s 0s 28897390e-09 1s 1s 28897670e-09 1s 1s 28897870e-09 0s 0s 28907630e-09 1s 1s 28907950e-09 1s 1s 28908110e-09 0s 0s 28917870e-09 1s 1s 28918230e-09 1s 1s 28918350e-09 0s 0s 28928110e-09 1s 1s 28928510e-09 1s 1s 28928590e-09 0s 0s 28938350e-09 1s 1s 28938790e-09 1s 1s 28938830e-09 0s 0s 28948590e-09 1s 1s 28949070e-09 0s 0s 28958830e-09 1s 1s 28959310e-09 0s 0s 28959350e-09 0s 0s 28969070e-09 1s 1s 28969550e-09 0s 0s 28969630e-09 0s 0s 28979310e-09 1s 1s 28979790e-09 0s 0s 28979910e-09 0s 0s 28989550e-09 1s 1s 28990030e-09 0s 0s 28990190e-09 0s 0s 28999790e-09 1s 1s 29000270e-09 0s 0s 29000470e-09 0s 0s 29010030e-09 1s 1s 29010510e-09 0s 0s 29010750e-09 0s 0s 29020270e-09 1s 1s 29020750e-09 0s 0s 29021030e-09 0s 0s 29030510e-09 1s 1s 29030990e-09 0s 0s 29031310e-09 0s 0s 29040750e-09 1s 1s 29041230e-09 0s 0s 29041590e-09 0s 0s 29050990e-09 1s 1s 29051470e-09 0s 0s 29051870e-09 0s 0s 29061230e-09 1s 1s 29061710e-09 0s 0s 29062150e-09 0s 0s 29071470e-09 1s 1s 29071950e-09 0s 0s 29072430e-09 0s 0s 29081710e-09 1s 1s 29082190e-09 0s 0s 29082710e-09 0s 0s 29091950e-09 1s 1s 29092430e-09 0s 0s 29092990e-09 0s 0s 29102190e-09 1s 1s 29102670e-09 0s 0s 29103270e-09 0s 0s 29112430e-09 1s 1s 29112910e-09 0s 0s 29113550e-09 0s 0s 29122670e-09 1s 1s 29123150e-09 0s 0s 29123830e-09 0s 0s 29132910e-09 1s 1s 29133390e-09 0s 0s 29134110e-09 0s 0s 29143150e-09 1s 1s 29143630e-09 0s 0s 29144390e-09 0s 0s 29153390e-09 1s 1s 29153870e-09 0s 0s 29154670e-09 0s 0s 29163630e-09 1s 1s 29164110e-09 0s 0s 29164950e-09 0s 0s 29173870e-09 1s 1s 29174350e-09 0s 0s 29175230e-09 0s 0s 29184110e-09 1s 1s 29184590e-09 0s 0s 29185510e-09 0s 0s 29194350e-09 1s 1s 29194830e-09 0s 0s 29195790e-09 0s 0s 29204590e-09 1s 1s 29205070e-09 0s 0s 29206070e-09 0s 0s 29214830e-09 1s 1s 29215310e-09 0s 0s 29216350e-09 0s 0s 29225070e-09 1s 1s 29225550e-09 0s 0s 29226630e-09 0s 0s 29235310e-09 1s 1s 29235790e-09 0s 0s 29236910e-09 0s 0s 29245550e-09 1s 1s 29246030e-09 0s 0s 29247190e-09 0s 0s 29255790e-09 1s 1s 29256270e-09 0s 0s 29257470e-09 0s 0s 29266030e-09 1s 1s 29266510e-09 0s 0s 29267750e-09 0s 0s 29276270e-09 1s 1s 29276750e-09 0s 0s 29278030e-09 0s 0s 29286510e-09 1s 1s 29286990e-09 0s 0s 29288310e-09 0s 0s 29296750e-09 1s 1s 29297230e-09 0s 0s 29298590e-09 0s 0s 29306990e-09 1s 1s 29307470e-09 0s 0s 29308870e-09 0s 0s 29317230e-09 1s 1s 29317710e-09 0s 0s 29319150e-09 0s 0s 29327470e-09 1s 1s 29327950e-09 0s 0s 29329430e-09 0s 0s 29337710e-09 1s 1s 29338190e-09 0s 0s 29339710e-09 0s 0s 29347950e-09 1s 1s 29348430e-09 0s 0s 29349990e-09 0s 0s 29358190e-09 1s 1s 29358670e-09 0s 0s 29360270e-09 0s 0s 29368430e-09 1s 1s 29368910e-09 0s 0s 29370550e-09 0s 0s 29378670e-09 1s 1s 29379150e-09 0s 0s 29380830e-09 0s 0s 29388910e-09 1s 1s 29389390e-09 0s 0s 29391110e-09 0s 0s 29399150e-09 1s 1s 29399630e-09 0s 0s 29401390e-09 0s 0s 29409390e-09 1s 1s 29409870e-09 0s 0s 29411670e-09 0s 0s 29419630e-09 1s 1s 29420110e-09 0s 0s 29421950e-09 0s 0s 29429870e-09 1s 1s 29430350e-09 0s 0s 29432230e-09 0s 0s 29440110e-09 1s 1s 29440590e-09 0s 0s 29442510e-09 0s 0s 29450350e-09 1s 1s 29450830e-09 0s 0s 29452790e-09 0s 0s 29460590e-09 1s 1s 29461070e-09 0s 0s 29463070e-09 0s 0s 29470830e-09 1s 1s 29471310e-09 0s 0s 29473350e-09 0s 0s 29481070e-09 1s 1s 29481550e-09 0s 0s 29483630e-09 0s 0s 29491310e-09 1s 1s 29491790e-09 0s 0s 29493910e-09 0s 0s 29501550e-09 1s 1s 29502030e-09 0s 0s 29504190e-09 0s 0s 29511790e-09 1s 1s 29512270e-09 0s 0s 29514470e-09 0s 0s 29522030e-09 1s 1s 29522510e-09 0s 0s 29524750e-09 0s 0s 29532270e-09 1s 1s 29532750e-09 0s 0s 29535030e-09 0s 0s 29542510e-09 1s 1s 29542990e-09 0s 0s 29545310e-09 0s 0s 29552750e-09 1s 1s 29553230e-09 0s 0s 29555590e-09 0s 0s 29562990e-09 1s 1s 29563470e-09 0s 0s 29565870e-09 0s 0s 29573230e-09 1s 1s 29573710e-09 0s 0s 29576150e-09 0s 0s 29583470e-09 1s 1s 29583950e-09 0s 0s 29586430e-09 0s 0s 29593710e-09 1s 1s 29594190e-09 0s 0s 29596710e-09 0s 0s 29603950e-09 1s 1s 29604430e-09 0s 0s 29606990e-09 0s 0s 29614190e-09 1s 1s 29614670e-09 0s 0s 29617270e-09 0s 0s 29624430e-09 1s 1s 29624910e-09 0s 0s 29627550e-09 0s 0s 29634670e-09 1s 1s 29635150e-09 0s 0s 29637830e-09 0s 0s 29644910e-09 1s 1s 29645390e-09 0s 0s 29648110e-09 0s 0s 29655150e-09 1s 1s 29655630e-09 0s 0s 29658390e-09 0s 0s 29665390e-09 1s 1s 29665870e-09 0s 0s 29668670e-09 0s 0s 29675630e-09 1s 1s 29676110e-09 0s 0s 29678950e-09 0s 0s 29685870e-09 1s 1s 29686350e-09 0s 0s 29689230e-09 0s 0s 29696110e-09 1s 1s 29696590e-09 0s 0s 29699510e-09 0s 0s 29706350e-09 1s 1s 29706830e-09 0s 0s 29709790e-09 0s 0s 29716590e-09 1s 1s 29717070e-09 0s 0s 29720070e-09 0s 0s 29726830e-09 1s 1s 29727310e-09 0s 0s 29730350e-09 0s 0s 29737070e-09 1s 1s 29737550e-09 0s 0s 29740630e-09 0s 0s 29747310e-09 1s 1s 29747790e-09 0s 0s 29750910e-09 0s 0s 29757550e-09 1s 1s 29758030e-09 0s 0s 29761190e-09 0s 0s 29767790e-09 1s 1s 29768270e-09 0s 0s 29771470e-09 0s 0s 29778030e-09 1s 1s 29778510e-09 0s 0s 29781750e-09 0s 0s 29788270e-09 1s 1s 29788750e-09 0s 0s 29792030e-09 0s 0s 29798510e-09 1s 1s 29798990e-09 0s 0s 29802310e-09 0s 0s 29808750e-09 1s 1s 29809230e-09 0s 0s 29812590e-09 0s 0s 29818990e-09 1s 1s 29819470e-09 0s 0s 29822870e-09 0s 0s 29829230e-09 1s 1s 29829710e-09 0s 0s 29833150e-09 0s 0s 29839470e-09 1s 1s 29839950e-09 0s 0s 29843430e-09 0s 0s 29849710e-09 1s 1s 29850190e-09 0s 0s 29853710e-09 0s 0s 29859950e-09 1s 1s 29860430e-09 0s 0s 29863990e-09 0s 0s 29870190e-09 1s 1s 29870670e-09 0s 0s 29874270e-09 0s 0s 29880430e-09 1s 1s 29880910e-09 0s 0s 29884550e-09 0s 0s 29890670e-09 1s 1s 29891150e-09 0s 0s 29894830e-09 0s 0s 29900910e-09 1s 1s 29901390e-09 0s 0s 29905110e-09 0s 0s 29911150e-09 1s 1s 29911630e-09 0s 0s 29915390e-09 0s 0s 29921390e-09 1s 1s 29921870e-09 0s 0s 29925670e-09 0s 0s 29931630e-09 1s 1s 29932110e-09 0s 0s 29935950e-09 0s 0s 29941870e-09 1s 1s 29942350e-09 0s 0s 29946230e-09 0s 0s 29952110e-09 1s 1s 29952590e-09 0s 0s 29956510e-09 0s 0s 29962350e-09 1s 1s 29962830e-09 0s 0s 29966790e-09 0s 0s 29972590e-09 1s 1s 29973070e-09 0s 0s 29977070e-09 0s 0s 29982830e-09 1s 1s 29983310e-09 0s 0s 29987350e-09 0s 0s 29993070e-09 1s 1s 29993550e-09 0s 0s 29997630e-09 0s 0s 30003310e-09 1s 1s 30003790e-09 0s 0s 30007910e-09 0s 0s 30013550e-09 1s 1s 30014030e-09 0s 0s 30018190e-09 0s 0s 30023790e-09 1s 1s 30024270e-09 0s 0s 30028470e-09 0s 0s 30034030e-09 1s 1s 30034510e-09 0s 0s 30038750e-09 0s 0s 30044270e-09 1s 1s 30044750e-09 0s 0s 30049030e-09 0s 0s 30054510e-09 1s 1s 30054990e-09 0s 0s 30059310e-09 0s 0s 30064750e-09 1s 1s 30065230e-09 0s 0s 30069590e-09 0s 0s 30074990e-09 1s 1s 30075470e-09 0s 0s 30079870e-09 0s 0s 30085230e-09 1s 1s 30085710e-09 0s 0s 30090150e-09 0s 0s 30095470e-09 1s 1s 30095950e-09 0s 0s 30100430e-09 0s 0s 30105710e-09 1s 1s 30106190e-09 0s 0s 30110710e-09 0s 0s 30115950e-09 1s 1s 30116430e-09 0s 0s 30120990e-09 0s 0s 30126190e-09 1s 1s 30126670e-09 0s 0s 30131270e-09 0s 0s 30136430e-09 1s 1s 30136910e-09 0s 0s 30141550e-09 0s 0s 30146670e-09 1s 1s 30147150e-09 0s 0s 30151830e-09 0s 0s 30156910e-09 1s 1s 30157390e-09 0s 0s 30162110e-09 0s 0s 30167150e-09 1s 1s 30167630e-09 0s 0s 30172390e-09 0s 0s 30177390e-09 1s 1s 30177870e-09 0s 0s 30182670e-09 0s 0s 30187630e-09 1s 1s 30188110e-09 0s 0s 30192950e-09 0s 0s 30197870e-09 1s 1s 30198350e-09 0s 0s 30203230e-09 0s 0s 30208110e-09 1s 1s 30208590e-09 0s 0s 30213510e-09 0s 0s 30218350e-09 1s 1s 30218830e-09 0s 0s 30223790e-09 0s 0s 30228590e-09 1s 1s 30229070e-09 0s 0s 30234070e-09 0s 0s 30238830e-09 1s 1s 30239310e-09 0s 0s 30244350e-09 0s 0s 30249070e-09 1s 1s 30249550e-09 0s 0s 30254630e-09 0s 0s 30259310e-09 1s 1s 30259790e-09 0s 0s 30264910e-09 0s 0s 30269550e-09 1s 1s 30270030e-09 0s 0s 30275190e-09 0s 0s 30279790e-09 1s 1s 30280270e-09 0s 0s 30285470e-09 0s 0s 30290030e-09 1s 1s 30290510e-09 0s 0s 30295750e-09 0s 0s 30300270e-09 1s 1s 30300750e-09 0s 0s 30306030e-09 0s 0s 30310510e-09 1s 1s 30310990e-09 0s 0s 30316310e-09 0s 0s 30320750e-09 1s 1s 30321230e-09 0s 0s 30326590e-09 0s 0s 30330990e-09 1s 1s 30331470e-09 0s 0s 30336870e-09 0s 0s 30341230e-09 1s 1s 30341710e-09 0s 0s 30347150e-09 0s 0s 30351470e-09 1s 1s 30351950e-09 0s 0s 30357430e-09 0s 0s 30361710e-09 1s 1s 30362190e-09 0s 0s 30367710e-09 0s 0s 30371950e-09 1s 1s 30372430e-09 0s 0s 30377990e-09 0s 0s 30382190e-09 1s 1s 30382670e-09 0s 0s 30388270e-09 0s 0s 30392430e-09 1s 1s 30392910e-09 0s 0s 30398550e-09 0s 0s 30402670e-09 1s 1s 30403150e-09 0s 0s 30408830e-09 0s 0s 30412910e-09 1s 1s 30413390e-09 0s 0s 30419110e-09 0s 0s 30423150e-09 1s 1s 30423630e-09 0s 0s 30429390e-09 0s 0s 30433390e-09 1s 1s 30433870e-09 0s 0s 30439670e-09 0s 0s 30443630e-09 1s 1s 30444110e-09 0s 0s 30449950e-09 0s 0s 30453870e-09 1s 1s 30454350e-09 0s 0s 30460230e-09 0s 0s 30464110e-09 1s 1s 30464590e-09 0s 0s 30470510e-09 0s 0s 30474350e-09 1s 1s 30474830e-09 0s 0s 30480790e-09 0s 0s 30484590e-09 1s 1s 30485070e-09 0s 0s 30491070e-09 0s 0s 30494830e-09 1s 1s 30495310e-09 0s 0s 30501350e-09 0s 0s 30505070e-09 1s 1s 30505550e-09 0s 0s 30511630e-09 0s 0s 30515310e-09 1s 1s 30515790e-09 0s 0s 30521910e-09 0s 0s 30525550e-09 1s 1s 30526030e-09 0s 0s 30532190e-09 0s 0s 30535790e-09 1s 1s 30536270e-09 0s 0s 30542470e-09 0s 0s 30546030e-09 1s 1s 30546510e-09 0s 0s 30552750e-09 0s 0s 30556270e-09 1s 1s 30556750e-09 0s 0s 30563030e-09 0s 0s 30566510e-09 1s 1s 30566990e-09 0s 0s 30573310e-09 0s 0s 30576750e-09 1s 1s 30577230e-09 0s 0s 30583590e-09 0s 0s 30586990e-09 1s 1s 30587470e-09 0s 0s 30593870e-09 0s 0s 30597230e-09 1s 1s 30597710e-09 0s 0s 30604150e-09 0s 0s 30607470e-09 1s 1s 30607950e-09 0s 0s 30614430e-09 0s 0s 30617710e-09 1s 1s 30618190e-09 0s 0s 30624710e-09 0s 0s 30627950e-09 1s 1s 30628430e-09 0s 0s 30634990e-09 0s 0s 30638190e-09 1s 1s 30638670e-09 0s 0s 30645270e-09 0s 0s 30648430e-09 1s 1s 30648910e-09 0s 0s 30655550e-09 0s 0s 30658670e-09 1s 1s 30659150e-09 0s 0s 30665830e-09 0s 0s 30668910e-09 1s 1s 30669390e-09 0s 0s 30676110e-09 0s 0s 30679150e-09 1s 1s 30679630e-09 0s 0s 30686390e-09 0s 0s 30689390e-09 1s 1s 30689870e-09 0s 0s 30696670e-09 0s 0s 30699630e-09 1s 1s 30700110e-09 0s 0s 30706950e-09 0s 0s 30709870e-09 1s 1s 30710350e-09 0s 0s 30717230e-09 0s 0s 30720110e-09 1s 1s 30720590e-09 0s 0s 30727510e-09 0s 0s 30730350e-09 1s 1s 30730830e-09 0s 0s 30737790e-09 0s 0s 30740590e-09 1s 1s 30741070e-09 0s 0s 30748070e-09 0s 0s 30750830e-09 1s 1s 30751310e-09 0s 0s 30758350e-09 0s 0s 30761070e-09 1s 1s 30761550e-09 0s 0s 30768630e-09 0s 0s 30771310e-09 1s 1s 30771790e-09 0s 0s 30778910e-09 0s 0s 30781550e-09 1s 1s 30782030e-09 0s 0s 30789190e-09 0s 0s 30791790e-09 1s 1s 30792270e-09 0s 0s 30799470e-09 0s 0s 30802030e-09 1s 1s 30802510e-09 0s 0s 30809750e-09 0s 0s 30812270e-09 1s 1s 30812750e-09 0s 0s 30820030e-09 0s 0s 30822510e-09 1s 1s 30822990e-09 0s 0s 30830310e-09 0s 0s 30832750e-09 1s 1s 30833230e-09 0s 0s 30840590e-09 0s 0s 30842990e-09 1s 1s 30843470e-09 0s 0s 30850870e-09 0s 0s 30853230e-09 1s 1s 30853710e-09 0s 0s 30861150e-09 0s 0s 30863470e-09 1s 1s 30863950e-09 0s 0s 30871430e-09 0s 0s 30873710e-09 1s 1s 30874190e-09 0s 0s 30881710e-09 0s 0s 30883950e-09 1s 1s 30884430e-09 0s 0s 30891990e-09 0s 0s 30894190e-09 1s 1s 30894670e-09 0s 0s 30902270e-09 0s 0s 30904430e-09 1s 1s 30904910e-09 0s 0s 30912550e-09 0s 0s 30914670e-09 1s 1s 30915150e-09 0s 0s 30922830e-09 0s 0s 30924910e-09 1s 1s 30925390e-09 0s 0s 30933110e-09 0s 0s 30935150e-09 1s 1s 30935630e-09 0s 0s 30943390e-09 0s 0s 30945390e-09 1s 1s 30945870e-09 0s 0s 30953670e-09 0s 0s 30955630e-09 1s 1s 30956110e-09 0s 0s 30963950e-09 0s 0s 30965870e-09 1s 1s 30966350e-09 0s 0s 30974230e-09 0s 0s 30976110e-09 1s 1s 30976590e-09 0s 0s 30984510e-09 0s 0s 30986350e-09 1s 1s 30986830e-09 0s 0s 30994790e-09 0s 0s 30996590e-09 1s 1s 30997070e-09 0s 0s 31005070e-09 0s 0s 31006830e-09 1s 1s 31007310e-09 0s 0s 31015350e-09 0s 0s 31017070e-09 1s 1s 31017550e-09 0s 0s 31025630e-09 0s 0s 31027310e-09 1s 1s 31027790e-09 0s 0s 31035910e-09 0s 0s 31037550e-09 1s 1s 31038030e-09 0s 0s 31046190e-09 0s 0s 31047790e-09 1s 1s 31048270e-09 0s 0s 31056470e-09 0s 0s 31058030e-09 1s 1s 31058510e-09 0s 0s 31066750e-09 0s 0s 31068270e-09 1s 1s 31068750e-09 0s 0s 31077030e-09 0s 0s 31078510e-09 1s 1s 31078990e-09 0s 0s 31087310e-09 0s 0s 31088750e-09 1s 1s 31089230e-09 0s 0s 31097590e-09 0s 0s 31098990e-09 1s 1s 31099470e-09 0s 0s 31107870e-09 0s 0s 31109230e-09 1s 1s 31109710e-09 0s 0s 31118150e-09 0s 0s 31119470e-09 1s 1s 31119950e-09 0s 0s 31128430e-09 0s 0s 31129710e-09 1s 1s 31130190e-09 0s 0s 31138710e-09 0s 0s 31139950e-09 1s 1s 31140430e-09 0s 0s 31148990e-09 0s 0s 31150190e-09 1s 1s 31150670e-09 0s 0s 31159270e-09 0s 0s 31160430e-09 1s 1s 31160910e-09 0s 0s 31169550e-09 0s 0s 31170670e-09 1s 1s 31171150e-09 0s 0s 31179830e-09 0s 0s 31180910e-09 1s 1s 31181390e-09 0s 0s 31190110e-09 0s 0s 31191150e-09 1s 1s 31191630e-09 0s 0s 31200390e-09 0s 0s 31201390e-09 1s 1s 31201870e-09 0s 0s 31210670e-09 0s 0s 31211630e-09 1s 1s 31212110e-09 0s 0s 31220950e-09 0s 0s 31221870e-09 1s 1s 31222350e-09 0s 0s 31231230e-09 0s 0s 31232110e-09 1s 1s 31232590e-09 0s 0s 31241510e-09 0s 0s 31242350e-09 1s 1s 31242830e-09 0s 0s 31251790e-09 0s 0s 31252590e-09 1s 1s 31253070e-09 0s 0s 31262070e-09 0s 0s 31262830e-09 1s 1s 31263310e-09 0s 0s 31272350e-09 0s 0s 31273070e-09 1s 1s 31273550e-09 0s 0s 31282630e-09 0s 0s 31283310e-09 1s 1s 31283790e-09 0s 0s 31292910e-09 0s 0s 31293550e-09 1s 1s 31294030e-09 0s 0s 31303190e-09 0s 0s 31303790e-09 1s 1s 31304270e-09 0s 0s 31313470e-09 0s 0s 31314030e-09 1s 1s 31314510e-09 0s 0s 31323750e-09 0s 0s 31324270e-09 1s 1s 31324750e-09 0s 0s 31334030e-09 0s 0s 31334510e-09 1s 1s 31334990e-09 0s 0s 31344310e-09 0s 0s 31344750e-09 1s 1s 31345230e-09 0s 0s 31354590e-09 0s 0s 31354990e-09 1s 1s 31355470e-09 0s 0s 31364870e-09 0s 0s 31365230e-09 1s 1s 31365710e-09 0s 0s 31375150e-09 0s 0s 31375470e-09 1s 1s 31375950e-09 0s 0s 31385430e-09 0s 0s 31385710e-09 1s 1s 31386190e-09 0s 0s 31395710e-09 0s 0s 31395950e-09 1s 1s 31396430e-09 0s 0s 31405990e-09 0s 0s 31406190e-09 1s 1s 31406670e-09 0s 0s 31416270e-09 0s 0s 31416430e-09 1s 1s 31416910e-09 0s 0s 31426550e-09 0s 0s 31426670e-09 1s 1s 31427150e-09 0s 0s 31436830e-09 0s 0s 31436910e-09 1s 1s 31437390e-09 0s 0s 31447110e-09 0s 0s 31447150e-09 1s 1s 31447630e-09 0s 0s 31457390e-09 1s 1s 31457430e-09 1s 1s 31457910e-09 0s 0s 31467630e-09 1s 1s 31467710e-09 1s 1s 31468150e-09 0s 0s 31477870e-09 1s 1s 31477990e-09 1s 1s 31478390e-09 0s 0s 31488110e-09 1s 1s 31488270e-09 1s 1s 31488630e-09 0s 0s 31498350e-09 1s 1s 31498550e-09 1s 1s 31498870e-09 0s 0s 31508590e-09 1s 1s 31508830e-09 1s 1s 31509110e-09 0s 0s 31518830e-09 1s 1s 31519110e-09 1s 1s 31519350e-09 0s 0s 31529070e-09 1s 1s 31529390e-09 1s 1s 31529590e-09 0s 0s 31539310e-09 1s 1s 31539670e-09 1s 1s 31539830e-09 0s 0s 31549550e-09 1s 1s 31549950e-09 1s 1s 31550070e-09 0s 0s 31559790e-09 1s 1s 31560230e-09 1s 1s 31560310e-09 0s 0s 31570030e-09 1s 1s 31570510e-09 1s 1s 31570550e-09 0s 0s 31580270e-09 1s 1s 31580790e-09 0s 0s 31590510e-09 1s 1s 31591030e-09 0s 0s 31591070e-09 0s 0s 31600750e-09 1s 1s 31601270e-09 0s 0s 31601350e-09 0s 0s 31610990e-09 1s 1s 31611510e-09 0s 0s 31611630e-09 0s 0s 31621230e-09 1s 1s 31621750e-09 0s 0s 31621910e-09 0s 0s 31631470e-09 1s 1s 31631990e-09 0s 0s 31632190e-09 0s 0s 31641710e-09 1s 1s 31642230e-09 0s 0s 31642470e-09 0s 0s 31651950e-09 1s 1s 31652470e-09 0s 0s 31652750e-09 0s 0s 31662190e-09 1s 1s 31662710e-09 0s 0s 31663030e-09 0s 0s 31672430e-09 1s 1s 31672950e-09 0s 0s 31673310e-09 0s 0s 31682670e-09 1s 1s 31683190e-09 0s 0s 31683590e-09 0s 0s 31692910e-09 1s 1s 31693430e-09 0s 0s 31693870e-09 0s 0s 31703150e-09 1s 1s 31703670e-09 0s 0s 31704150e-09 0s 0s 31713390e-09 1s 1s 31713910e-09 0s 0s 31714430e-09 0s 0s 31723630e-09 1s 1s 31724150e-09 0s 0s 31724710e-09 0s 0s 31733870e-09 1s 1s 31734390e-09 0s 0s 31734990e-09 0s 0s 31744110e-09 1s 1s 31744630e-09 0s 0s 31745270e-09 0s 0s 31754350e-09 1s 1s 31754870e-09 0s 0s 31755550e-09 0s 0s 31764590e-09 1s 1s 31765110e-09 0s 0s 31765830e-09 0s 0s 31774830e-09 1s 1s 31775350e-09 0s 0s 31776110e-09 0s 0s 31785070e-09 1s 1s 31785590e-09 0s 0s 31786390e-09 0s 0s 31795310e-09 1s 1s 31795830e-09 0s 0s 31796670e-09 0s 0s 31805550e-09 1s 1s 31806070e-09 0s 0s 31806950e-09 0s 0s 31815790e-09 1s 1s 31816310e-09 0s 0s 31817230e-09 0s 0s 31826030e-09 1s 1s 31826550e-09 0s 0s 31827510e-09 0s 0s 31836270e-09 1s 1s 31836790e-09 0s 0s 31837790e-09 0s 0s 31846510e-09 1s 1s 31847030e-09 0s 0s 31848070e-09 0s 0s 31856750e-09 1s 1s 31857270e-09 0s 0s 31858350e-09 0s 0s 31866990e-09 1s 1s 31867510e-09 0s 0s 31868630e-09 0s 0s 31877230e-09 1s 1s 31877750e-09 0s 0s 31878910e-09 0s 0s 31887470e-09 1s 1s 31887990e-09 0s 0s 31889190e-09 0s 0s 31897710e-09 1s 1s 31898230e-09 0s 0s 31899470e-09 0s 0s 31907950e-09 1s 1s 31908470e-09 0s 0s 31909750e-09 0s 0s 31918190e-09 1s 1s 31918710e-09 0s 0s 31920030e-09 0s 0s 31928430e-09 1s 1s 31928950e-09 0s 0s 31930310e-09 0s 0s 31938670e-09 1s 1s 31939190e-09 0s 0s 31940590e-09 0s 0s 31948910e-09 1s 1s 31949430e-09 0s 0s 31950870e-09 0s 0s 31959150e-09 1s 1s 31959670e-09 0s 0s 31961150e-09 0s 0s 31969390e-09 1s 1s 31969910e-09 0s 0s 31971430e-09 0s 0s 31979630e-09 1s 1s 31980150e-09 0s 0s 31981710e-09 0s 0s 31989870e-09 1s 1s 31990390e-09 0s 0s 31991990e-09 0s 0s 32000110e-09 1s 1s 32000630e-09 0s 0s 32002270e-09 0s 0s 32010350e-09 1s 1s 32010870e-09 0s 0s 32012550e-09 0s 0s 32020590e-09 1s 1s 32021110e-09 0s 0s 32022830e-09 0s 0s 32030830e-09 1s 1s 32031350e-09 0s 0s 32033110e-09 0s 0s 32041070e-09 1s 1s 32041590e-09 0s 0s 32043390e-09 0s 0s 32051310e-09 1s 1s 32051830e-09 0s 0s 32053670e-09 0s 0s 32061550e-09 1s 1s 32062070e-09 0s 0s 32063950e-09 0s 0s 32071790e-09 1s 1s 32072310e-09 0s 0s 32074230e-09 0s 0s 32082030e-09 1s 1s 32082550e-09 0s 0s 32084510e-09 0s 0s 32092270e-09 1s 1s 32092790e-09 0s 0s 32094790e-09 0s 0s 32102510e-09 1s 1s 32103030e-09 0s 0s 32105070e-09 0s 0s 32112750e-09 1s 1s 32113270e-09 0s 0s 32115350e-09 0s 0s 32122990e-09 1s 1s 32123510e-09 0s 0s 32125630e-09 0s 0s 32133230e-09 1s 1s 32133750e-09 0s 0s 32135910e-09 0s 0s 32143470e-09 1s 1s 32143990e-09 0s 0s 32146190e-09 0s 0s 32153710e-09 1s 1s 32154230e-09 0s 0s 32156470e-09 0s 0s 32163950e-09 1s 1s 32164470e-09 0s 0s 32166750e-09 0s 0s 32174190e-09 1s 1s 32174710e-09 0s 0s 32177030e-09 0s 0s 32184430e-09 1s 1s 32184950e-09 0s 0s 32187310e-09 0s 0s 32194670e-09 1s 1s 32195190e-09 0s 0s 32197590e-09 0s 0s 32204910e-09 1s 1s 32205430e-09 0s 0s 32207870e-09 0s 0s 32215150e-09 1s 1s 32215670e-09 0s 0s 32218150e-09 0s 0s 32225390e-09 1s 1s 32225910e-09 0s 0s 32228430e-09 0s 0s 32235630e-09 1s 1s 32236150e-09 0s 0s 32238710e-09 0s 0s 32245870e-09 1s 1s 32246390e-09 0s 0s 32248990e-09 0s 0s 32256110e-09 1s 1s 32256630e-09 0s 0s 32259270e-09 0s 0s 32266350e-09 1s 1s 32266870e-09 0s 0s 32269550e-09 0s 0s 32276590e-09 1s 1s 32277110e-09 0s 0s 32279830e-09 0s 0s 32286830e-09 1s 1s 32287350e-09 0s 0s 32290110e-09 0s 0s 32297070e-09 1s 1s 32297590e-09 0s 0s 32300390e-09 0s 0s 32307310e-09 1s 1s 32307830e-09 0s 0s 32310670e-09 0s 0s 32317550e-09 1s 1s 32318070e-09 0s 0s 32320950e-09 0s 0s 32327790e-09 1s 1s 32328310e-09 0s 0s 32331230e-09 0s 0s 32338030e-09 1s 1s 32338550e-09 0s 0s 32341510e-09 0s 0s 32348270e-09 1s 1s 32348790e-09 0s 0s 32351790e-09 0s 0s 32358510e-09 1s 1s 32359030e-09 0s 0s 32362070e-09 0s 0s 32368750e-09 1s 1s 32369270e-09 0s 0s 32372350e-09 0s 0s 32378990e-09 1s 1s 32379510e-09 0s 0s 32382630e-09 0s 0s 32389230e-09 1s 1s 32389750e-09 0s 0s 32392910e-09 0s 0s 32399470e-09 1s 1s 32399990e-09 0s 0s 32403190e-09 0s 0s 32409710e-09 1s 1s 32410230e-09 0s 0s 32413470e-09 0s 0s 32419950e-09 1s 1s 32420470e-09 0s 0s 32423750e-09 0s 0s 32430190e-09 1s 1s 32430710e-09 0s 0s 32434030e-09 0s 0s 32440430e-09 1s 1s 32440950e-09 0s 0s 32444310e-09 0s 0s 32450670e-09 1s 1s 32451190e-09 0s 0s 32454590e-09 0s 0s 32460910e-09 1s 1s 32461430e-09 0s 0s 32464870e-09 0s 0s 32471150e-09 1s 1s 32471670e-09 0s 0s 32475150e-09 0s 0s 32481390e-09 1s 1s 32481910e-09 0s 0s 32485430e-09 0s 0s 32491630e-09 1s 1s 32492150e-09 0s 0s 32495710e-09 0s 0s 32501870e-09 1s 1s 32502390e-09 0s 0s 32505990e-09 0s 0s 32512110e-09 1s 1s 32512630e-09 0s 0s 32516270e-09 0s 0s 32522350e-09 1s 1s 32522870e-09 0s 0s 32526550e-09 0s 0s 32532590e-09 1s 1s 32533110e-09 0s 0s 32536830e-09 0s 0s 32542830e-09 1s 1s 32543350e-09 0s 0s 32547110e-09 0s 0s 32553070e-09 1s 1s 32553590e-09 0s 0s 32557390e-09 0s 0s 32563310e-09 1s 1s 32563830e-09 0s 0s 32567670e-09 0s 0s 32573550e-09 1s 1s 32574070e-09 0s 0s 32577950e-09 0s 0s 32583790e-09 1s 1s 32584310e-09 0s 0s 32588230e-09 0s 0s 32594030e-09 1s 1s 32594550e-09 0s 0s 32598510e-09 0s 0s 32604270e-09 1s 1s 32604790e-09 0s 0s 32608790e-09 0s 0s 32614510e-09 1s 1s 32615030e-09 0s 0s 32619070e-09 0s 0s 32624750e-09 1s 1s 32625270e-09 0s 0s 32629350e-09 0s 0s 32634990e-09 1s 1s 32635510e-09 0s 0s 32639630e-09 0s 0s 32645230e-09 1s 1s 32645750e-09 0s 0s 32649910e-09 0s 0s 32655470e-09 1s 1s 32655990e-09 0s 0s 32660190e-09 0s 0s 32665710e-09 1s 1s 32666230e-09 0s 0s 32670470e-09 0s 0s 32675950e-09 1s 1s 32676470e-09 0s 0s 32680750e-09 0s 0s 32686190e-09 1s 1s 32686710e-09 0s 0s 32691030e-09 0s 0s 32696430e-09 1s 1s 32696950e-09 0s 0s 32701310e-09 0s 0s 32706670e-09 1s 1s 32707190e-09 0s 0s 32711590e-09 0s 0s 32716910e-09 1s 1s 32717430e-09 0s 0s 32721870e-09 0s 0s 32727150e-09 1s 1s 32727670e-09 0s 0s 32732150e-09 0s 0s 32737390e-09 1s 1s 32737910e-09 0s 0s 32742430e-09 0s 0s 32747630e-09 1s 1s 32748150e-09 0s 0s 32752710e-09 0s 0s 32757870e-09 1s 1s 32758390e-09 0s 0s 32762990e-09 0s 0s 32768110e-09 1s 1s 32768630e-09 0s 0s 32773270e-09 0s 0s 32778350e-09 1s 1s 32778870e-09 0s 0s 32783550e-09 0s 0s 32788590e-09 1s 1s 32789110e-09 0s 0s 32793830e-09 0s 0s 32798830e-09 1s 1s 32799350e-09 0s 0s 32804110e-09 0s 0s 32809070e-09 1s 1s 32809590e-09 0s 0s 32814390e-09 0s 0s 32819310e-09 1s 1s 32819830e-09 0s 0s 32824670e-09 0s 0s 32829550e-09 1s 1s 32830070e-09 0s 0s 32834950e-09 0s 0s 32839790e-09 1s 1s 32840310e-09 0s 0s 32845230e-09 0s 0s 32850030e-09 1s 1s 32850550e-09 0s 0s 32855510e-09 0s 0s 32860270e-09 1s 1s 32860790e-09 0s 0s 32865790e-09 0s 0s 32870510e-09 1s 1s 32871030e-09 0s 0s 32876070e-09 0s 0s 32880750e-09 1s 1s 32881270e-09 0s 0s 32886350e-09 0s 0s 32890990e-09 1s 1s 32891510e-09 0s 0s 32896630e-09 0s 0s 32901230e-09 1s 1s 32901750e-09 0s 0s 32906910e-09 0s 0s 32911470e-09 1s 1s 32911990e-09 0s 0s 32917190e-09 0s 0s 32921710e-09 1s 1s 32922230e-09 0s 0s 32927470e-09 0s 0s 32931950e-09 1s 1s 32932470e-09 0s 0s 32937750e-09 0s 0s 32942190e-09 1s 1s 32942710e-09 0s 0s 32948030e-09 0s 0s 32952430e-09 1s 1s 32952950e-09 0s 0s 32958310e-09 0s 0s 32962670e-09 1s 1s 32963190e-09 0s 0s 32968590e-09 0s 0s 32972910e-09 1s 1s 32973430e-09 0s 0s 32978870e-09 0s 0s 32983150e-09 1s 1s 32983670e-09 0s 0s 32989150e-09 0s 0s 32993390e-09 1s 1s 32993910e-09 0s 0s 32999430e-09 0s 0s 33003630e-09 1s 1s 33004150e-09 0s 0s 33009710e-09 0s 0s 33013870e-09 1s 1s 33014390e-09 0s 0s 33019990e-09 0s 0s 33024110e-09 1s 1s 33024630e-09 0s 0s 33030270e-09 0s 0s 33034350e-09 1s 1s 33034870e-09 0s 0s 33040550e-09 0s 0s 33044590e-09 1s 1s 33045110e-09 0s 0s 33050830e-09 0s 0s 33054830e-09 1s 1s 33055350e-09 0s 0s 33061110e-09 0s 0s 33065070e-09 1s 1s 33065590e-09 0s 0s 33071390e-09 0s 0s 33075310e-09 1s 1s 33075830e-09 0s 0s 33081670e-09 0s 0s 33085550e-09 1s 1s 33086070e-09 0s 0s 33091950e-09 0s 0s 33095790e-09 1s 1s 33096310e-09 0s 0s 33102230e-09 0s 0s 33106030e-09 1s 1s 33106550e-09 0s 0s 33112510e-09 0s 0s 33116270e-09 1s 1s 33116790e-09 0s 0s 33122790e-09 0s 0s 33126510e-09 1s 1s 33127030e-09 0s 0s 33133070e-09 0s 0s 33136750e-09 1s 1s 33137270e-09 0s 0s 33143350e-09 0s 0s 33146990e-09 1s 1s 33147510e-09 0s 0s 33153630e-09 0s 0s 33157230e-09 1s 1s 33157750e-09 0s 0s 33163910e-09 0s 0s 33167470e-09 1s 1s 33167990e-09 0s 0s 33174190e-09 0s 0s 33177710e-09 1s 1s 33178230e-09 0s 0s 33184470e-09 0s 0s 33187950e-09 1s 1s 33188470e-09 0s 0s 33194750e-09 0s 0s 33198190e-09 1s 1s 33198710e-09 0s 0s 33205030e-09 0s 0s 33208430e-09 1s 1s 33208950e-09 0s 0s 33215310e-09 0s 0s 33218670e-09 1s 1s 33219190e-09 0s 0s 33225590e-09 0s 0s 33228910e-09 1s 1s 33229430e-09 0s 0s 33235870e-09 0s 0s 33239150e-09 1s 1s 33239670e-09 0s 0s 33246150e-09 0s 0s 33249390e-09 1s 1s 33249910e-09 0s 0s 33256430e-09 0s 0s 33259630e-09 1s 1s 33260150e-09 0s 0s 33266710e-09 0s 0s 33269870e-09 1s 1s 33270390e-09 0s 0s 33276990e-09 0s 0s 33280110e-09 1s 1s 33280630e-09 0s 0s 33287270e-09 0s 0s 33290350e-09 1s 1s 33290870e-09 0s 0s 33297550e-09 0s 0s 33300590e-09 1s 1s 33301110e-09 0s 0s 33307830e-09 0s 0s 33310830e-09 1s 1s 33311350e-09 0s 0s 33318110e-09 0s 0s 33321070e-09 1s 1s 33321590e-09 0s 0s 33328390e-09 0s 0s 33331310e-09 1s 1s 33331830e-09 0s 0s 33338670e-09 0s 0s 33341550e-09 1s 1s 33342070e-09 0s 0s 33348950e-09 0s 0s 33351790e-09 1s 1s 33352310e-09 0s 0s 33359230e-09 0s 0s 33362030e-09 1s 1s 33362550e-09 0s 0s 33369510e-09 0s 0s 33372270e-09 1s 1s 33372790e-09 0s 0s 33379790e-09 0s 0s 33382510e-09 1s 1s 33383030e-09 0s 0s 33390070e-09 0s 0s 33392750e-09 1s 1s 33393270e-09 0s 0s 33400350e-09 0s 0s 33402990e-09 1s 1s 33403510e-09 0s 0s 33410630e-09 0s 0s 33413230e-09 1s 1s 33413750e-09 0s 0s 33420910e-09 0s 0s 33423470e-09 1s 1s 33423990e-09 0s 0s 33431190e-09 0s 0s 33433710e-09 1s 1s 33434230e-09 0s 0s 33441470e-09 0s 0s 33443950e-09 1s 1s 33444470e-09 0s 0s 33451750e-09 0s 0s 33454190e-09 1s 1s 33454710e-09 0s 0s 33462030e-09 0s 0s 33464430e-09 1s 1s 33464950e-09 0s 0s 33472310e-09 0s 0s 33474670e-09 1s 1s 33475190e-09 0s 0s 33482590e-09 0s 0s 33484910e-09 1s 1s 33485430e-09 0s 0s 33492870e-09 0s 0s 33495150e-09 1s 1s 33495670e-09 0s 0s 33503150e-09 0s 0s 33505390e-09 1s 1s 33505910e-09 0s 0s 33513430e-09 0s 0s 33515630e-09 1s 1s 33516150e-09 0s 0s 33523710e-09 0s 0s 33525870e-09 1s 1s 33526390e-09 0s 0s 33533990e-09 0s 0s 33536110e-09 1s 1s 33536630e-09 0s 0s 33544270e-09 0s 0s 33546350e-09 1s 1s 33546870e-09 0s 0s 33554550e-09 0s 0s 33556590e-09 1s 1s 33557110e-09 0s 0s 33564830e-09 0s 0s 33566830e-09 1s 1s 33567350e-09 0s 0s 33575110e-09 0s 0s 33577070e-09 1s 1s 33577590e-09 0s 0s 33585390e-09 0s 0s 33587310e-09 1s 1s 33587830e-09 0s 0s 33595670e-09 0s 0s 33597550e-09 1s 1s 33598070e-09 0s 0s 33605950e-09 0s 0s 33607790e-09 1s 1s 33608310e-09 0s 0s 33616230e-09 0s 0s 33618030e-09 1s 1s 33618550e-09 0s 0s 33626510e-09 0s 0s 33628270e-09 1s 1s 33628790e-09 0s 0s 33636790e-09 0s 0s 33638510e-09 1s 1s 33639030e-09 0s 0s 33647070e-09 0s 0s 33648750e-09 1s 1s 33649270e-09 0s 0s 33657350e-09 0s 0s 33658990e-09 1s 1s 33659510e-09 0s 0s 33667630e-09 0s 0s 33669230e-09 1s 1s 33669750e-09 0s 0s 33677910e-09 0s 0s 33679470e-09 1s 1s 33679990e-09 0s 0s 33688190e-09 0s 0s 33689710e-09 1s 1s 33690230e-09 0s 0s 33698470e-09 0s 0s 33699950e-09 1s 1s 33700470e-09 0s 0s 33708750e-09 0s 0s 33710190e-09 1s 1s 33710710e-09 0s 0s 33719030e-09 0s 0s 33720430e-09 1s 1s 33720950e-09 0s 0s 33729310e-09 0s 0s 33730670e-09 1s 1s 33731190e-09 0s 0s 33739590e-09 0s 0s 33740910e-09 1s 1s 33741430e-09 0s 0s 33749870e-09 0s 0s 33751150e-09 1s 1s 33751670e-09 0s 0s 33760150e-09 0s 0s 33761390e-09 1s 1s 33761910e-09 0s 0s 33770430e-09 0s 0s 33771630e-09 1s 1s 33772150e-09 0s 0s 33780710e-09 0s 0s 33781870e-09 1s 1s 33782390e-09 0s 0s 33790990e-09 0s 0s 33792110e-09 1s 1s 33792630e-09 0s 0s 33801270e-09 0s 0s 33802350e-09 1s 1s 33802870e-09 0s 0s 33811550e-09 0s 0s 33812590e-09 1s 1s 33813110e-09 0s 0s 33821830e-09 0s 0s 33822830e-09 1s 1s 33823350e-09 0s 0s 33832110e-09 0s 0s 33833070e-09 1s 1s 33833590e-09 0s 0s 33842390e-09 0s 0s 33843310e-09 1s 1s 33843830e-09 0s 0s 33852670e-09 0s 0s 33853550e-09 1s 1s 33854070e-09 0s 0s 33862950e-09 0s 0s 33863790e-09 1s 1s 33864310e-09 0s 0s 33873230e-09 0s 0s 33874030e-09 1s 1s 33874550e-09 0s 0s 33883510e-09 0s 0s 33884270e-09 1s 1s 33884790e-09 0s 0s 33893790e-09 0s 0s 33894510e-09 1s 1s 33895030e-09 0s 0s 33904070e-09 0s 0s 33904750e-09 1s 1s 33905270e-09 0s 0s 33914350e-09 0s 0s 33914990e-09 1s 1s 33915510e-09 0s 0s 33924630e-09 0s 0s 33925230e-09 1s 1s 33925750e-09 0s 0s 33934910e-09 0s 0s 33935470e-09 1s 1s 33935990e-09 0s 0s 33945190e-09 0s 0s 33945710e-09 1s 1s 33946230e-09 0s 0s 33955470e-09 0s 0s 33955950e-09 1s 1s 33956470e-09 0s 0s 33965750e-09 0s 0s 33966190e-09 1s 1s 33966710e-09 0s 0s 33976030e-09 0s 0s 33976430e-09 1s 1s 33976950e-09 0s 0s 33986310e-09 0s 0s 33986670e-09 1s 1s 33987190e-09 0s 0s 33996590e-09 0s 0s 33996910e-09 1s 1s 33997430e-09 0s 0s 34006870e-09 0s 0s 34007150e-09 1s 1s 34007670e-09 0s 0s 34017150e-09 0s 0s 34017390e-09 1s 1s 34017910e-09 0s 0s 34027430e-09 0s 0s 34027630e-09 1s 1s 34028150e-09 0s 0s 34037710e-09 0s 0s 34037870e-09 1s 1s 34038390e-09 0s 0s 34047990e-09 0s 0s 34048110e-09 1s 1s 34048630e-09 0s 0s 34058270e-09 0s 0s 34058350e-09 1s 1s 34058870e-09 0s 0s 34068550e-09 0s 0s 34068590e-09 1s 1s 34069110e-09 0s 0s 34078830e-09 1s 1s 34078870e-09 1s 1s 34079390e-09 0s 0s 34089070e-09 1s 1s 34089150e-09 1s 1s 34089630e-09 0s 0s 34099310e-09 1s 1s 34099430e-09 1s 1s 34099870e-09 0s 0s 34109550e-09 1s 1s 34109710e-09 1s 1s 34110110e-09 0s 0s 34119790e-09 1s 1s 34119990e-09 1s 1s 34120350e-09 0s 0s 34130030e-09 1s 1s 34130270e-09 1s 1s 34130590e-09 0s 0s 34140270e-09 1s 1s 34140550e-09 1s 1s 34140830e-09 0s 0s 34150510e-09 1s 1s 34150830e-09 1s 1s 34151070e-09 0s 0s 34160750e-09 1s 1s 34161110e-09 1s 1s 34161310e-09 0s 0s 34170990e-09 1s 1s 34171390e-09 1s 1s 34171550e-09 0s 0s 34181230e-09 1s 1s 34181670e-09 1s 1s 34181790e-09 0s 0s 34191470e-09 1s 1s 34191950e-09 1s 1s 34192030e-09 0s 0s 34201710e-09 1s 1s 34202230e-09 1s 1s 34202270e-09 0s 0s 34211950e-09 1s 1s 34212510e-09 0s 0s 34222190e-09 1s 1s 34222750e-09 0s 0s 34222790e-09 0s 0s 34232430e-09 1s 1s 34232990e-09 0s 0s 34233070e-09 0s 0s 34242670e-09 1s 1s 34243230e-09 0s 0s 34243350e-09 0s 0s 34252910e-09 1s 1s 34253470e-09 0s 0s 34253630e-09 0s 0s 34263150e-09 1s 1s 34263710e-09 0s 0s 34263910e-09 0s 0s 34273390e-09 1s 1s 34273950e-09 0s 0s 34274190e-09 0s 0s 34283630e-09 1s 1s 34284190e-09 0s 0s 34284470e-09 0s 0s 34293870e-09 1s 1s 34294430e-09 0s 0s 34294750e-09 0s 0s 34304110e-09 1s 1s 34304670e-09 0s 0s 34305030e-09 0s 0s 34314350e-09 1s 1s 34314910e-09 0s 0s 34315310e-09 0s 0s 34324590e-09 1s 1s 34325150e-09 0s 0s 34325590e-09 0s 0s 34334830e-09 1s 1s 34335390e-09 0s 0s 34335870e-09 0s 0s 34345070e-09 1s 1s 34345630e-09 0s 0s 34346150e-09 0s 0s 34355310e-09 1s 1s 34355870e-09 0s 0s 34356430e-09 0s 0s 34365550e-09 1s 1s 34366110e-09 0s 0s 34366710e-09 0s 0s 34375790e-09 1s 1s 34376350e-09 0s 0s 34376990e-09 0s 0s 34386030e-09 1s 1s 34386590e-09 0s 0s 34387270e-09 0s 0s 34396270e-09 1s 1s 34396830e-09 0s 0s 34397550e-09 0s 0s 34406510e-09 1s 1s 34407070e-09 0s 0s 34407830e-09 0s 0s 34416750e-09 1s 1s 34417310e-09 0s 0s 34418110e-09 0s 0s 34426990e-09 1s 1s 34427550e-09 0s 0s 34428390e-09 0s 0s 34437230e-09 1s 1s 34437790e-09 0s 0s 34438670e-09 0s 0s 34447470e-09 1s 1s 34448030e-09 0s 0s 34448950e-09 0s 0s 34457710e-09 1s 1s 34458270e-09 0s 0s 34459230e-09 0s 0s 34467950e-09 1s 1s 34468510e-09 0s 0s 34469510e-09 0s 0s 34478190e-09 1s 1s 34478750e-09 0s 0s 34479790e-09 0s 0s 34488430e-09 1s 1s 34488990e-09 0s 0s 34490070e-09 0s 0s 34498670e-09 1s 1s 34499230e-09 0s 0s 34500350e-09 0s 0s 34508910e-09 1s 1s 34509470e-09 0s 0s 34510630e-09 0s 0s 34519150e-09 1s 1s 34519710e-09 0s 0s 34520910e-09 0s 0s 34529390e-09 1s 1s 34529950e-09 0s 0s 34531190e-09 0s 0s 34539630e-09 1s 1s 34540190e-09 0s 0s 34541470e-09 0s 0s 34549870e-09 1s 1s 34550430e-09 0s 0s 34551750e-09 0s 0s 34560110e-09 1s 1s 34560670e-09 0s 0s 34562030e-09 0s 0s 34570350e-09 1s 1s 34570910e-09 0s 0s 34572310e-09 0s 0s 34580590e-09 1s 1s 34581150e-09 0s 0s 34582590e-09 0s 0s 34590830e-09 1s 1s 34591390e-09 0s 0s 34592870e-09 0s 0s 34601070e-09 1s 1s 34601630e-09 0s 0s 34603150e-09 0s 0s 34611310e-09 1s 1s 34611870e-09 0s 0s 34613430e-09 0s 0s 34621550e-09 1s 1s 34622110e-09 0s 0s 34623710e-09 0s 0s 34631790e-09 1s 1s 34632350e-09 0s 0s 34633990e-09 0s 0s 34642030e-09 1s 1s 34642590e-09 0s 0s 34644270e-09 0s 0s 34652270e-09 1s 1s 34652830e-09 0s 0s 34654550e-09 0s 0s 34662510e-09 1s 1s 34663070e-09 0s 0s 34664830e-09 0s 0s 34672750e-09 1s 1s 34673310e-09 0s 0s 34675110e-09 0s 0s 34682990e-09 1s 1s 34683550e-09 0s 0s 34685390e-09 0s 0s 34693230e-09 1s 1s 34693790e-09 0s 0s 34695670e-09 0s 0s 34703470e-09 1s 1s 34704030e-09 0s 0s 34705950e-09 0s 0s 34713710e-09 1s 1s 34714270e-09 0s 0s 34716230e-09 0s 0s 34723950e-09 1s 1s 34724510e-09 0s 0s 34726510e-09 0s 0s 34734190e-09 1s 1s 34734750e-09 0s 0s 34736790e-09 0s 0s 34744430e-09 1s 1s 34744990e-09 0s 0s 34747070e-09 0s 0s 34754670e-09 1s 1s 34755230e-09 0s 0s 34757350e-09 0s 0s 34764910e-09 1s 1s 34765470e-09 0s 0s 34767630e-09 0s 0s 34775150e-09 1s 1s 34775710e-09 0s 0s 34777910e-09 0s 0s 34785390e-09 1s 1s 34785950e-09 0s 0s 34788190e-09 0s 0s 34795630e-09 1s 1s 34796190e-09 0s 0s 34798470e-09 0s 0s 34805870e-09 1s 1s 34806430e-09 0s 0s 34808750e-09 0s 0s 34816110e-09 1s 1s 34816670e-09 0s 0s 34819030e-09 0s 0s 34826350e-09 1s 1s 34826910e-09 0s 0s 34829310e-09 0s 0s 34836590e-09 1s 1s 34837150e-09 0s 0s 34839590e-09 0s 0s 34846830e-09 1s 1s 34847390e-09 0s 0s 34849870e-09 0s 0s 34857070e-09 1s 1s 34857630e-09 0s 0s 34860150e-09 0s 0s 34867310e-09 1s 1s 34867870e-09 0s 0s 34870430e-09 0s 0s 34877550e-09 1s 1s 34878110e-09 0s 0s 34880710e-09 0s 0s 34887790e-09 1s 1s 34888350e-09 0s 0s 34890990e-09 0s 0s 34898030e-09 1s 1s 34898590e-09 0s 0s 34901270e-09 0s 0s 34908270e-09 1s 1s 34908830e-09 0s 0s 34911550e-09 0s 0s 34918510e-09 1s 1s 34919070e-09 0s 0s 34921830e-09 0s 0s 34928750e-09 1s 1s 34929310e-09 0s 0s 34932110e-09 0s 0s 34938990e-09 1s 1s 34939550e-09 0s 0s 34942390e-09 0s 0s 34949230e-09 1s 1s 34949790e-09 0s 0s 34952670e-09 0s 0s 34959470e-09 1s 1s 34960030e-09 0s 0s 34962950e-09 0s 0s 34969710e-09 1s 1s 34970270e-09 0s 0s 34973230e-09 0s 0s 34979950e-09 1s 1s 34980510e-09 0s 0s 34983510e-09 0s 0s 34990190e-09 1s 1s 34990750e-09 0s 0s 34993790e-09 0s 0s 35000430e-09 1s 1s 35000990e-09 0s 0s 35004070e-09 0s 0s 35010670e-09 1s 1s 35011230e-09 0s 0s 35014350e-09 0s 0s 35020910e-09 1s 1s 35021470e-09 0s 0s 35024630e-09 0s 0s 35031150e-09 1s 1s 35031710e-09 0s 0s 35034910e-09 0s 0s 35041390e-09 1s 1s 35041950e-09 0s 0s 35045190e-09 0s 0s 35051630e-09 1s 1s 35052190e-09 0s 0s 35055470e-09 0s 0s 35061870e-09 1s 1s 35062430e-09 0s 0s 35065750e-09 0s 0s 35072110e-09 1s 1s 35072670e-09 0s 0s 35076030e-09 0s 0s 35082350e-09 1s 1s 35082910e-09 0s 0s 35086310e-09 0s 0s 35092590e-09 1s 1s 35093150e-09 0s 0s 35096590e-09 0s 0s 35102830e-09 1s 1s 35103390e-09 0s 0s 35106870e-09 0s 0s 35113070e-09 1s 1s 35113630e-09 0s 0s 35117150e-09 0s 0s 35123310e-09 1s 1s 35123870e-09 0s 0s 35127430e-09 0s 0s 35133550e-09 1s 1s 35134110e-09 0s 0s 35137710e-09 0s 0s 35143790e-09 1s 1s 35144350e-09 0s 0s 35147990e-09 0s 0s 35154030e-09 1s 1s 35154590e-09 0s 0s 35158270e-09 0s 0s 35164270e-09 1s 1s 35164830e-09 0s 0s 35168550e-09 0s 0s 35174510e-09 1s 1s 35175070e-09 0s 0s 35178830e-09 0s 0s 35184750e-09 1s 1s 35185310e-09 0s 0s 35189110e-09 0s 0s 35194990e-09 1s 1s 35195550e-09 0s 0s 35199390e-09 0s 0s 35205230e-09 1s 1s 35205790e-09 0s 0s 35209670e-09 0s 0s 35215470e-09 1s 1s 35216030e-09 0s 0s 35219950e-09 0s 0s 35225710e-09 1s 1s 35226270e-09 0s 0s 35230230e-09 0s 0s 35235950e-09 1s 1s 35236510e-09 0s 0s 35240510e-09 0s 0s 35246190e-09 1s 1s 35246750e-09 0s 0s 35250790e-09 0s 0s 35256430e-09 1s 1s 35256990e-09 0s 0s 35261070e-09 0s 0s 35266670e-09 1s 1s 35267230e-09 0s 0s 35271350e-09 0s 0s 35276910e-09 1s 1s 35277470e-09 0s 0s 35281630e-09 0s 0s 35287150e-09 1s 1s 35287710e-09 0s 0s 35291910e-09 0s 0s 35297390e-09 1s 1s 35297950e-09 0s 0s 35302190e-09 0s 0s 35307630e-09 1s 1s 35308190e-09 0s 0s 35312470e-09 0s 0s 35317870e-09 1s 1s 35318430e-09 0s 0s 35322750e-09 0s 0s 35328110e-09 1s 1s 35328670e-09 0s 0s 35333030e-09 0s 0s 35338350e-09 1s 1s 35338910e-09 0s 0s 35343310e-09 0s 0s 35348590e-09 1s 1s 35349150e-09 0s 0s 35353590e-09 0s 0s 35358830e-09 1s 1s 35359390e-09 0s 0s 35363870e-09 0s 0s 35369070e-09 1s 1s 35369630e-09 0s 0s 35374150e-09 0s 0s 35379310e-09 1s 1s 35379870e-09 0s 0s 35384430e-09 0s 0s 35389550e-09 1s 1s 35390110e-09 0s 0s 35394710e-09 0s 0s 35399790e-09 1s 1s 35400350e-09 0s 0s 35404990e-09 0s 0s 35410030e-09 1s 1s 35410590e-09 0s 0s 35415270e-09 0s 0s 35420270e-09 1s 1s 35420830e-09 0s 0s 35425550e-09 0s 0s 35430510e-09 1s 1s 35431070e-09 0s 0s 35435830e-09 0s 0s 35440750e-09 1s 1s 35441310e-09 0s 0s 35446110e-09 0s 0s 35450990e-09 1s 1s 35451550e-09 0s 0s 35456390e-09 0s 0s 35461230e-09 1s 1s 35461790e-09 0s 0s 35466670e-09 0s 0s 35471470e-09 1s 1s 35472030e-09 0s 0s 35476950e-09 0s 0s 35481710e-09 1s 1s 35482270e-09 0s 0s 35487230e-09 0s 0s 35491950e-09 1s 1s 35492510e-09 0s 0s 35497510e-09 0s 0s 35502190e-09 1s 1s 35502750e-09 0s 0s 35507790e-09 0s 0s 35512430e-09 1s 1s 35512990e-09 0s 0s 35518070e-09 0s 0s 35522670e-09 1s 1s 35523230e-09 0s 0s 35528350e-09 0s 0s 35532910e-09 1s 1s 35533470e-09 0s 0s 35538630e-09 0s 0s 35543150e-09 1s 1s 35543710e-09 0s 0s 35548910e-09 0s 0s 35553390e-09 1s 1s 35553950e-09 0s 0s 35559190e-09 0s 0s 35563630e-09 1s 1s 35564190e-09 0s 0s 35569470e-09 0s 0s 35573870e-09 1s 1s 35574430e-09 0s 0s 35579750e-09 0s 0s 35584110e-09 1s 1s 35584670e-09 0s 0s 35590030e-09 0s 0s 35594350e-09 1s 1s 35594910e-09 0s 0s 35600310e-09 0s 0s 35604590e-09 1s 1s 35605150e-09 0s 0s 35610590e-09 0s 0s 35614830e-09 1s 1s 35615390e-09 0s 0s 35620870e-09 0s 0s 35625070e-09 1s 1s 35625630e-09 0s 0s 35631150e-09 0s 0s 35635310e-09 1s 1s 35635870e-09 0s 0s 35641430e-09 0s 0s 35645550e-09 1s 1s 35646110e-09 0s 0s 35651710e-09 0s 0s 35655790e-09 1s 1s 35656350e-09 0s 0s 35661990e-09 0s 0s 35666030e-09 1s 1s 35666590e-09 0s 0s 35672270e-09 0s 0s 35676270e-09 1s 1s 35676830e-09 0s 0s 35682550e-09 0s 0s 35686510e-09 1s 1s 35687070e-09 0s 0s 35692830e-09 0s 0s 35696750e-09 1s 1s 35697310e-09 0s 0s 35703110e-09 0s 0s 35706990e-09 1s 1s 35707550e-09 0s 0s 35713390e-09 0s 0s 35717230e-09 1s 1s 35717790e-09 0s 0s 35723670e-09 0s 0s 35727470e-09 1s 1s 35728030e-09 0s 0s 35733950e-09 0s 0s 35737710e-09 1s 1s 35738270e-09 0s 0s 35744230e-09 0s 0s 35747950e-09 1s 1s 35748510e-09 0s 0s 35754510e-09 0s 0s 35758190e-09 1s 1s 35758750e-09 0s 0s 35764790e-09 0s 0s 35768430e-09 1s 1s 35768990e-09 0s 0s 35775070e-09 0s 0s 35778670e-09 1s 1s 35779230e-09 0s 0s 35785350e-09 0s 0s 35788910e-09 1s 1s 35789470e-09 0s 0s 35795630e-09 0s 0s 35799150e-09 1s 1s 35799710e-09 0s 0s 35805910e-09 0s 0s 35809390e-09 1s 1s 35809950e-09 0s 0s 35816190e-09 0s 0s 35819630e-09 1s 1s 35820190e-09 0s 0s 35826470e-09 0s 0s 35829870e-09 1s 1s 35830430e-09 0s 0s 35836750e-09 0s 0s 35840110e-09 1s 1s 35840670e-09 0s 0s 35847030e-09 0s 0s 35850350e-09 1s 1s 35850910e-09 0s 0s 35857310e-09 0s 0s 35860590e-09 1s 1s 35861150e-09 0s 0s 35867590e-09 0s 0s 35870830e-09 1s 1s 35871390e-09 0s 0s 35877870e-09 0s 0s 35881070e-09 1s 1s 35881630e-09 0s 0s 35888150e-09 0s 0s 35891310e-09 1s 1s 35891870e-09 0s 0s 35898430e-09 0s 0s 35901550e-09 1s 1s 35902110e-09 0s 0s 35908710e-09 0s 0s 35911790e-09 1s 1s 35912350e-09 0s 0s 35918990e-09 0s 0s 35922030e-09 1s 1s 35922590e-09 0s 0s 35929270e-09 0s 0s 35932270e-09 1s 1s 35932830e-09 0s 0s 35939550e-09 0s 0s 35942510e-09 1s 1s 35943070e-09 0s 0s 35949830e-09 0s 0s 35952750e-09 1s 1s 35953310e-09 0s 0s 35960110e-09 0s 0s 35962990e-09 1s 1s 35963550e-09 0s 0s 35970390e-09 0s 0s 35973230e-09 1s 1s 35973790e-09 0s 0s 35980670e-09 0s 0s 35983470e-09 1s 1s 35984030e-09 0s 0s 35990950e-09 0s 0s 35993710e-09 1s 1s 35994270e-09 0s 0s 36001230e-09 0s 0s 36003950e-09 1s 1s 36004510e-09 0s 0s 36011510e-09 0s 0s 36014190e-09 1s 1s 36014750e-09 0s 0s 36021790e-09 0s 0s 36024430e-09 1s 1s 36024990e-09 0s 0s 36032070e-09 0s 0s 36034670e-09 1s 1s 36035230e-09 0s 0s 36042350e-09 0s 0s 36044910e-09 1s 1s 36045470e-09 0s 0s 36052630e-09 0s 0s 36055150e-09 1s 1s 36055710e-09 0s 0s 36062910e-09 0s 0s 36065390e-09 1s 1s 36065950e-09 0s 0s 36073190e-09 0s 0s 36075630e-09 1s 1s 36076190e-09 0s 0s 36083470e-09 0s 0s 36085870e-09 1s 1s 36086430e-09 0s 0s 36093750e-09 0s 0s 36096110e-09 1s 1s 36096670e-09 0s 0s 36104030e-09 0s 0s 36106350e-09 1s 1s 36106910e-09 0s 0s 36114310e-09 0s 0s 36116590e-09 1s 1s 36117150e-09 0s 0s 36124590e-09 0s 0s 36126830e-09 1s 1s 36127390e-09 0s 0s 36134870e-09 0s 0s 36137070e-09 1s 1s 36137630e-09 0s 0s 36145150e-09 0s 0s 36147310e-09 1s 1s 36147870e-09 0s 0s 36155430e-09 0s 0s 36157550e-09 1s 1s 36158110e-09 0s 0s 36165710e-09 0s 0s 36167790e-09 1s 1s 36168350e-09 0s 0s 36175990e-09 0s 0s 36178030e-09 1s 1s 36178590e-09 0s 0s 36186270e-09 0s 0s 36188270e-09 1s 1s 36188830e-09 0s 0s 36196550e-09 0s 0s 36198510e-09 1s 1s 36199070e-09 0s 0s 36206830e-09 0s 0s 36208750e-09 1s 1s 36209310e-09 0s 0s 36217110e-09 0s 0s 36218990e-09 1s 1s 36219550e-09 0s 0s 36227390e-09 0s 0s 36229230e-09 1s 1s 36229790e-09 0s 0s 36237670e-09 0s 0s 36239470e-09 1s 1s 36240030e-09 0s 0s 36247950e-09 0s 0s 36249710e-09 1s 1s 36250270e-09 0s 0s 36258230e-09 0s 0s 36259950e-09 1s 1s 36260510e-09 0s 0s 36268510e-09 0s 0s 36270190e-09 1s 1s 36270750e-09 0s 0s 36278790e-09 0s 0s 36280430e-09 1s 1s 36280990e-09 0s 0s 36289070e-09 0s 0s 36290670e-09 1s 1s 36291230e-09 0s 0s 36299350e-09 0s 0s 36300910e-09 1s 1s 36301470e-09 0s 0s 36309630e-09 0s 0s 36311150e-09 1s 1s 36311710e-09 0s 0s 36319910e-09 0s 0s 36321390e-09 1s 1s 36321950e-09 0s 0s 36330190e-09 0s 0s 36331630e-09 1s 1s 36332190e-09 0s 0s 36340470e-09 0s 0s 36341870e-09 1s 1s 36342430e-09 0s 0s 36350750e-09 0s 0s 36352110e-09 1s 1s 36352670e-09 0s 0s 36361030e-09 0s 0s 36362350e-09 1s 1s 36362910e-09 0s 0s 36371310e-09 0s 0s 36372590e-09 1s 1s 36373150e-09 0s 0s 36381590e-09 0s 0s 36382830e-09 1s 1s 36383390e-09 0s 0s 36391870e-09 0s 0s 36393070e-09 1s 1s 36393630e-09 0s 0s 36402150e-09 0s 0s 36403310e-09 1s 1s 36403870e-09 0s 0s 36412430e-09 0s 0s 36413550e-09 1s 1s 36414110e-09 0s 0s 36422710e-09 0s 0s 36423790e-09 1s 1s 36424350e-09 0s 0s 36432990e-09 0s 0s 36434030e-09 1s 1s 36434590e-09 0s 0s 36443270e-09 0s 0s 36444270e-09 1s 1s 36444830e-09 0s 0s 36453550e-09 0s 0s 36454510e-09 1s 1s 36455070e-09 0s 0s 36463830e-09 0s 0s 36464750e-09 1s 1s 36465310e-09 0s 0s 36474110e-09 0s 0s 36474990e-09 1s 1s 36475550e-09 0s 0s 36484390e-09 0s 0s 36485230e-09 1s 1s 36485790e-09 0s 0s 36494670e-09 0s 0s 36495470e-09 1s 1s 36496030e-09 0s 0s 36504950e-09 0s 0s 36505710e-09 1s 1s 36506270e-09 0s 0s 36515230e-09 0s 0s 36515950e-09 1s 1s 36516510e-09 0s 0s 36525510e-09 0s 0s 36526190e-09 1s 1s 36526750e-09 0s 0s 36535790e-09 0s 0s 36536430e-09 1s 1s 36536990e-09 0s 0s 36546070e-09 0s 0s 36546670e-09 1s 1s 36547230e-09 0s 0s 36556350e-09 0s 0s 36556910e-09 1s 1s 36557470e-09 0s 0s 36566630e-09 0s 0s 36567150e-09 1s 1s 36567710e-09 0s 0s 36576910e-09 0s 0s 36577390e-09 1s 1s 36577950e-09 0s 0s 36587190e-09 0s 0s 36587630e-09 1s 1s 36588190e-09 0s 0s 36597470e-09 0s 0s 36597870e-09 1s 1s 36598430e-09 0s 0s 36607750e-09 0s 0s 36608110e-09 1s 1s 36608670e-09 0s 0s 36618030e-09 0s 0s 36618350e-09 1s 1s 36618910e-09 0s 0s 36628310e-09 0s 0s 36628590e-09 1s 1s 36629150e-09 0s 0s 36638590e-09 0s 0s 36638830e-09 1s 1s 36639390e-09 0s 0s 36648870e-09 0s 0s 36649070e-09 1s 1s 36649630e-09 0s 0s 36659150e-09 0s 0s 36659310e-09 1s 1s 36659870e-09 0s 0s 36669430e-09 0s 0s 36669550e-09 1s 1s 36670110e-09 0s 0s 36679710e-09 0s 0s 36679790e-09 1s 1s 36680350e-09 0s 0s 36689990e-09 0s 0s 36690030e-09 1s 1s 36690590e-09 0s 0s 36700270e-09 1s 1s 36700310e-09 1s 1s 36700870e-09 0s 0s 36710510e-09 1s 1s 36710590e-09 1s 1s 36711110e-09 0s 0s 36720750e-09 1s 1s 36720870e-09 1s 1s 36721350e-09 0s 0s 36730990e-09 1s 1s 36731150e-09 1s 1s 36731590e-09 0s 0s 36741230e-09 1s 1s 36741430e-09 1s 1s 36741830e-09 0s 0s 36751470e-09 1s 1s 36751710e-09 1s 1s 36752070e-09 0s 0s 36761710e-09 1s 1s 36761990e-09 1s 1s 36762310e-09 0s 0s 36771950e-09 1s 1s 36772270e-09 1s 1s 36772550e-09 0s 0s 36782190e-09 1s 1s 36782550e-09 1s 1s 36782790e-09 0s 0s 36792430e-09 1s 1s 36792830e-09 1s 1s 36793030e-09 0s 0s 36802670e-09 1s 1s 36803110e-09 1s 1s 36803270e-09 0s 0s 36812910e-09 1s 1s 36813390e-09 1s 1s 36813510e-09 0s 0s 36823150e-09 1s 1s 36823670e-09 1s 1s 36823750e-09 0s 0s 36833390e-09 1s 1s 36833950e-09 1s 1s 36833990e-09 0s 0s 36843630e-09 1s 1s 36844230e-09 0s 0s 36853870e-09 1s 1s 36854470e-09 0s 0s 36854510e-09 0s 0s 36864110e-09 1s 1s 36864710e-09 0s 0s 36864790e-09 0s 0s 36874350e-09 1s 1s 36874950e-09 0s 0s 36875070e-09 0s 0s 36884590e-09 1s 1s 36885190e-09 0s 0s 36885350e-09 0s 0s 36894830e-09 1s 1s 36895430e-09 0s 0s 36895630e-09 0s 0s 36905070e-09 1s 1s 36905670e-09 0s 0s 36905910e-09 0s 0s 36915310e-09 1s 1s 36915910e-09 0s 0s 36916190e-09 0s 0s 36925550e-09 1s 1s 36926150e-09 0s 0s 36926470e-09 0s 0s 36935790e-09 1s 1s 36936390e-09 0s 0s 36936750e-09 0s 0s 36946030e-09 1s 1s 36946630e-09 0s 0s 36947030e-09 0s 0s 36956270e-09 1s 1s 36956870e-09 0s 0s 36957310e-09 0s 0s 36966510e-09 1s 1s 36967110e-09 0s 0s 36967590e-09 0s 0s 36976750e-09 1s 1s 36977350e-09 0s 0s 36977870e-09 0s 0s 36986990e-09 1s 1s 36987590e-09 0s 0s 36988150e-09 0s 0s 36997230e-09 1s 1s 36997830e-09 0s 0s 36998430e-09 0s 0s 37007470e-09 1s 1s 37008070e-09 0s 0s 37008710e-09 0s 0s 37017710e-09 1s 1s 37018310e-09 0s 0s 37018990e-09 0s 0s 37027950e-09 1s 1s 37028550e-09 0s 0s 37029270e-09 0s 0s 37038190e-09 1s 1s 37038790e-09 0s 0s 37039550e-09 0s 0s 37048430e-09 1s 1s 37049030e-09 0s 0s 37049830e-09 0s 0s 37058670e-09 1s 1s 37059270e-09 0s 0s 37060110e-09 0s 0s 37068910e-09 1s 1s 37069510e-09 0s 0s 37070390e-09 0s 0s 37079150e-09 1s 1s 37079750e-09 0s 0s 37080670e-09 0s 0s 37089390e-09 1s 1s 37089990e-09 0s 0s 37090950e-09 0s 0s 37099630e-09 1s 1s 37100230e-09 0s 0s 37101230e-09 0s 0s 37109870e-09 1s 1s 37110470e-09 0s 0s 37111510e-09 0s 0s 37120110e-09 1s 1s 37120710e-09 0s 0s 37121790e-09 0s 0s 37130350e-09 1s 1s 37130950e-09 0s 0s 37132070e-09 0s 0s 37140590e-09 1s 1s 37141190e-09 0s 0s 37142350e-09 0s 0s 37150830e-09 1s 1s 37151430e-09 0s 0s 37152630e-09 0s 0s 37161070e-09 1s 1s 37161670e-09 0s 0s 37162910e-09 0s 0s 37171310e-09 1s 1s 37171910e-09 0s 0s 37173190e-09 0s 0s 37181550e-09 1s 1s 37182150e-09 0s 0s 37183470e-09 0s 0s 37191790e-09 1s 1s 37192390e-09 0s 0s 37193750e-09 0s 0s 37202030e-09 1s 1s 37202630e-09 0s 0s 37204030e-09 0s 0s 37212270e-09 1s 1s 37212870e-09 0s 0s 37214310e-09 0s 0s 37222510e-09 1s 1s 37223110e-09 0s 0s 37224590e-09 0s 0s 37232750e-09 1s 1s 37233350e-09 0s 0s 37234870e-09 0s 0s 37242990e-09 1s 1s 37243590e-09 0s 0s 37245150e-09 0s 0s 37253230e-09 1s 1s 37253830e-09 0s 0s 37255430e-09 0s 0s 37263470e-09 1s 1s 37264070e-09 0s 0s 37265710e-09 0s 0s 37273710e-09 1s 1s 37274310e-09 0s 0s 37275990e-09 0s 0s 37283950e-09 1s 1s 37284550e-09 0s 0s 37286270e-09 0s 0s 37294190e-09 1s 1s 37294790e-09 0s 0s 37296550e-09 0s 0s 37304430e-09 1s 1s 37305030e-09 0s 0s 37306830e-09 0s 0s 37314670e-09 1s 1s 37315270e-09 0s 0s 37317110e-09 0s 0s 37324910e-09 1s 1s 37325510e-09 0s 0s 37327390e-09 0s 0s 37335150e-09 1s 1s 37335750e-09 0s 0s 37337670e-09 0s 0s 37345390e-09 1s 1s 37345990e-09 0s 0s 37347950e-09 0s 0s 37355630e-09 1s 1s 37356230e-09 0s 0s 37358230e-09 0s 0s 37365870e-09 1s 1s 37366470e-09 0s 0s 37368510e-09 0s 0s 37376110e-09 1s 1s 37376710e-09 0s 0s 37378790e-09 0s 0s 37386350e-09 1s 1s 37386950e-09 0s 0s 37389070e-09 0s 0s 37396590e-09 1s 1s 37397190e-09 0s 0s 37399350e-09 0s 0s 37406830e-09 1s 1s 37407430e-09 0s 0s 37409630e-09 0s 0s 37417070e-09 1s 1s 37417670e-09 0s 0s 37419910e-09 0s 0s 37427310e-09 1s 1s 37427910e-09 0s 0s 37430190e-09 0s 0s 37437550e-09 1s 1s 37438150e-09 0s 0s 37440470e-09 0s 0s 37447790e-09 1s 1s 37448390e-09 0s 0s 37450750e-09 0s 0s 37458030e-09 1s 1s 37458630e-09 0s 0s 37461030e-09 0s 0s 37468270e-09 1s 1s 37468870e-09 0s 0s 37471310e-09 0s 0s 37478510e-09 1s 1s 37479110e-09 0s 0s 37481590e-09 0s 0s 37488750e-09 1s 1s 37489350e-09 0s 0s 37491870e-09 0s 0s 37498990e-09 1s 1s 37499590e-09 0s 0s 37502150e-09 0s 0s 37509230e-09 1s 1s 37509830e-09 0s 0s 37512430e-09 0s 0s 37519470e-09 1s 1s 37520070e-09 0s 0s 37522710e-09 0s 0s 37529710e-09 1s 1s 37530310e-09 0s 0s 37532990e-09 0s 0s 37539950e-09 1s 1s 37540550e-09 0s 0s 37543270e-09 0s 0s 37550190e-09 1s 1s 37550790e-09 0s 0s 37553550e-09 0s 0s 37560430e-09 1s 1s 37561030e-09 0s 0s 37563830e-09 0s 0s 37570670e-09 1s 1s 37571270e-09 0s 0s 37574110e-09 0s 0s 37580910e-09 1s 1s 37581510e-09 0s 0s 37584390e-09 0s 0s 37591150e-09 1s 1s 37591750e-09 0s 0s 37594670e-09 0s 0s 37601390e-09 1s 1s 37601990e-09 0s 0s 37604950e-09 0s 0s 37611630e-09 1s 1s 37612230e-09 0s 0s 37615230e-09 0s 0s 37621870e-09 1s 1s 37622470e-09 0s 0s 37625510e-09 0s 0s 37632110e-09 1s 1s 37632710e-09 0s 0s 37635790e-09 0s 0s 37642350e-09 1s 1s 37642950e-09 0s 0s 37646070e-09 0s 0s 37652590e-09 1s 1s 37653190e-09 0s 0s 37656350e-09 0s 0s 37662830e-09 1s 1s 37663430e-09 0s 0s 37666630e-09 0s 0s 37673070e-09 1s 1s 37673670e-09 0s 0s 37676910e-09 0s 0s 37683310e-09 1s 1s 37683910e-09 0s 0s 37687190e-09 0s 0s 37693550e-09 1s 1s 37694150e-09 0s 0s 37697470e-09 0s 0s 37703790e-09 1s 1s 37704390e-09 0s 0s 37707750e-09 0s 0s 37714030e-09 1s 1s 37714630e-09 0s 0s 37718030e-09 0s 0s 37724270e-09 1s 1s 37724870e-09 0s 0s 37728310e-09 0s 0s 37734510e-09 1s 1s 37735110e-09 0s 0s 37738590e-09 0s 0s 37744750e-09 1s 1s 37745350e-09 0s 0s 37748870e-09 0s 0s 37754990e-09 1s 1s 37755590e-09 0s 0s 37759150e-09 0s 0s 37765230e-09 1s 1s 37765830e-09 0s 0s 37769430e-09 0s 0s 37775470e-09 1s 1s 37776070e-09 0s 0s 37779710e-09 0s 0s 37785710e-09 1s 1s 37786310e-09 0s 0s 37789990e-09 0s 0s 37795950e-09 1s 1s 37796550e-09 0s 0s 37800270e-09 0s 0s 37806190e-09 1s 1s 37806790e-09 0s 0s 37810550e-09 0s 0s 37816430e-09 1s 1s 37817030e-09 0s 0s 37820830e-09 0s 0s 37826670e-09 1s 1s 37827270e-09 0s 0s 37831110e-09 0s 0s 37836910e-09 1s 1s 37837510e-09 0s 0s 37841390e-09 0s 0s 37847150e-09 1s 1s 37847750e-09 0s 0s 37851670e-09 0s 0s 37857390e-09 1s 1s 37857990e-09 0s 0s 37861950e-09 0s 0s 37867630e-09 1s 1s 37868230e-09 0s 0s 37872230e-09 0s 0s 37877870e-09 1s 1s 37878470e-09 0s 0s 37882510e-09 0s 0s 37888110e-09 1s 1s 37888710e-09 0s 0s 37892790e-09 0s 0s 37898350e-09 1s 1s 37898950e-09 0s 0s 37903070e-09 0s 0s 37908590e-09 1s 1s 37909190e-09 0s 0s 37913350e-09 0s 0s 37918830e-09 1s 1s 37919430e-09 0s 0s 37923630e-09 0s 0s 37929070e-09 1s 1s 37929670e-09 0s 0s 37933910e-09 0s 0s 37939310e-09 1s 1s 37939910e-09 0s 0s 37944190e-09 0s 0s 37949550e-09 1s 1s 37950150e-09 0s 0s 37954470e-09 0s 0s 37959790e-09 1s 1s 37960390e-09 0s 0s 37964750e-09 0s 0s 37970030e-09 1s 1s 37970630e-09 0s 0s 37975030e-09 0s 0s 37980270e-09 1s 1s 37980870e-09 0s 0s 37985310e-09 0s 0s 37990510e-09 1s 1s 37991110e-09 0s 0s 37995590e-09 0s 0s 38000750e-09 1s 1s 38001350e-09 0s 0s 38005870e-09 0s 0s 38010990e-09 1s 1s 38011590e-09 0s 0s 38016150e-09 0s 0s 38021230e-09 1s 1s 38021830e-09 0s 0s 38026430e-09 0s 0s 38031470e-09 1s 1s 38032070e-09 0s 0s 38036710e-09 0s 0s 38041710e-09 1s 1s 38042310e-09 0s 0s 38046990e-09 0s 0s 38051950e-09 1s 1s 38052550e-09 0s 0s 38057270e-09 0s 0s 38062190e-09 1s 1s 38062790e-09 0s 0s 38067550e-09 0s 0s 38072430e-09 1s 1s 38073030e-09 0s 0s 38077830e-09 0s 0s 38082670e-09 1s 1s 38083270e-09 0s 0s 38088110e-09 0s 0s 38092910e-09 1s 1s 38093510e-09 0s 0s 38098390e-09 0s 0s 38103150e-09 1s 1s 38103750e-09 0s 0s 38108670e-09 0s 0s 38113390e-09 1s 1s 38113990e-09 0s 0s 38118950e-09 0s 0s 38123630e-09 1s 1s 38124230e-09 0s 0s 38129230e-09 0s 0s 38133870e-09 1s 1s 38134470e-09 0s 0s 38139510e-09 0s 0s 38144110e-09 1s 1s 38144710e-09 0s 0s 38149790e-09 0s 0s 38154350e-09 1s 1s 38154950e-09 0s 0s 38160070e-09 0s 0s 38164590e-09 1s 1s 38165190e-09 0s 0s 38170350e-09 0s 0s 38174830e-09 1s 1s 38175430e-09 0s 0s 38180630e-09 0s 0s 38185070e-09 1s 1s 38185670e-09 0s 0s 38190910e-09 0s 0s 38195310e-09 1s 1s 38195910e-09 0s 0s 38201190e-09 0s 0s 38205550e-09 1s 1s 38206150e-09 0s 0s 38211470e-09 0s 0s 38215790e-09 1s 1s 38216390e-09 0s 0s 38221750e-09 0s 0s 38226030e-09 1s 1s 38226630e-09 0s 0s 38232030e-09 0s 0s 38236270e-09 1s 1s 38236870e-09 0s 0s 38242310e-09 0s 0s 38246510e-09 1s 1s 38247110e-09 0s 0s 38252590e-09 0s 0s 38256750e-09 1s 1s 38257350e-09 0s 0s 38262870e-09 0s 0s 38266990e-09 1s 1s 38267590e-09 0s 0s 38273150e-09 0s 0s 38277230e-09 1s 1s 38277830e-09 0s 0s 38283430e-09 0s 0s 38287470e-09 1s 1s 38288070e-09 0s 0s 38293710e-09 0s 0s 38297710e-09 1s 1s 38298310e-09 0s 0s 38303990e-09 0s 0s 38307950e-09 1s 1s 38308550e-09 0s 0s 38314270e-09 0s 0s 38318190e-09 1s 1s 38318790e-09 0s 0s 38324550e-09 0s 0s 38328430e-09 1s 1s 38329030e-09 0s 0s 38334830e-09 0s 0s 38338670e-09 1s 1s 38339270e-09 0s 0s 38345110e-09 0s 0s 38348910e-09 1s 1s 38349510e-09 0s 0s 38355390e-09 0s 0s 38359150e-09 1s 1s 38359750e-09 0s 0s 38365670e-09 0s 0s 38369390e-09 1s 1s 38369990e-09 0s 0s 38375950e-09 0s 0s 38379630e-09 1s 1s 38380230e-09 0s 0s 38386230e-09 0s 0s 38389870e-09 1s 1s 38390470e-09 0s 0s 38396510e-09 0s 0s 38400110e-09 1s 1s 38400710e-09 0s 0s 38406790e-09 0s 0s 38410350e-09 1s 1s 38410950e-09 0s 0s 38417070e-09 0s 0s 38420590e-09 1s 1s 38421190e-09 0s 0s 38427350e-09 0s 0s 38430830e-09 1s 1s 38431430e-09 0s 0s 38437630e-09 0s 0s 38441070e-09 1s 1s 38441670e-09 0s 0s 38447910e-09 0s 0s 38451310e-09 1s 1s 38451910e-09 0s 0s 38458190e-09 0s 0s 38461550e-09 1s 1s 38462150e-09 0s 0s 38468470e-09 0s 0s 38471790e-09 1s 1s 38472390e-09 0s 0s 38478750e-09 0s 0s 38482030e-09 1s 1s 38482630e-09 0s 0s 38489030e-09 0s 0s 38492270e-09 1s 1s 38492870e-09 0s 0s 38499310e-09 0s 0s 38502510e-09 1s 1s 38503110e-09 0s 0s 38509590e-09 0s 0s 38512750e-09 1s 1s 38513350e-09 0s 0s 38519870e-09 0s 0s 38522990e-09 1s 1s 38523590e-09 0s 0s 38530150e-09 0s 0s 38533230e-09 1s 1s 38533830e-09 0s 0s 38540430e-09 0s 0s 38543470e-09 1s 1s 38544070e-09 0s 0s 38550710e-09 0s 0s 38553710e-09 1s 1s 38554310e-09 0s 0s 38560990e-09 0s 0s 38563950e-09 1s 1s 38564550e-09 0s 0s 38571270e-09 0s 0s 38574190e-09 1s 1s 38574790e-09 0s 0s 38581550e-09 0s 0s 38584430e-09 1s 1s 38585030e-09 0s 0s 38591830e-09 0s 0s 38594670e-09 1s 1s 38595270e-09 0s 0s 38602110e-09 0s 0s 38604910e-09 1s 1s 38605510e-09 0s 0s 38612390e-09 0s 0s 38615150e-09 1s 1s 38615750e-09 0s 0s 38622670e-09 0s 0s 38625390e-09 1s 1s 38625990e-09 0s 0s 38632950e-09 0s 0s 38635630e-09 1s 1s 38636230e-09 0s 0s 38643230e-09 0s 0s 38645870e-09 1s 1s 38646470e-09 0s 0s 38653510e-09 0s 0s 38656110e-09 1s 1s 38656710e-09 0s 0s 38663790e-09 0s 0s 38666350e-09 1s 1s 38666950e-09 0s 0s 38674070e-09 0s 0s 38676590e-09 1s 1s 38677190e-09 0s 0s 38684350e-09 0s 0s 38686830e-09 1s 1s 38687430e-09 0s 0s 38694630e-09 0s 0s 38697070e-09 1s 1s 38697670e-09 0s 0s 38704910e-09 0s 0s 38707310e-09 1s 1s 38707910e-09 0s 0s 38715190e-09 0s 0s 38717550e-09 1s 1s 38718150e-09 0s 0s 38725470e-09 0s 0s 38727790e-09 1s 1s 38728390e-09 0s 0s 38735750e-09 0s 0s 38738030e-09 1s 1s 38738630e-09 0s 0s 38746030e-09 0s 0s 38748270e-09 1s 1s 38748870e-09 0s 0s 38756310e-09 0s 0s 38758510e-09 1s 1s 38759110e-09 0s 0s 38766590e-09 0s 0s 38768750e-09 1s 1s 38769350e-09 0s 0s 38776870e-09 0s 0s 38778990e-09 1s 1s 38779590e-09 0s 0s 38787150e-09 0s 0s 38789230e-09 1s 1s 38789830e-09 0s 0s 38797430e-09 0s 0s 38799470e-09 1s 1s 38800070e-09 0s 0s 38807710e-09 0s 0s 38809710e-09 1s 1s 38810310e-09 0s 0s 38817990e-09 0s 0s 38819950e-09 1s 1s 38820550e-09 0s 0s 38828270e-09 0s 0s 38830190e-09 1s 1s 38830790e-09 0s 0s 38838550e-09 0s 0s 38840430e-09 1s 1s 38841030e-09 0s 0s 38848830e-09 0s 0s 38850670e-09 1s 1s 38851270e-09 0s 0s 38859110e-09 0s 0s 38860910e-09 1s 1s 38861510e-09 0s 0s 38869390e-09 0s 0s 38871150e-09 1s 1s 38871750e-09 0s 0s 38879670e-09 0s 0s 38881390e-09 1s 1s 38881990e-09 0s 0s 38889950e-09 0s 0s 38891630e-09 1s 1s 38892230e-09 0s 0s 38900230e-09 0s 0s 38901870e-09 1s 1s 38902470e-09 0s 0s 38910510e-09 0s 0s 38912110e-09 1s 1s 38912710e-09 0s 0s 38920790e-09 0s 0s 38922350e-09 1s 1s 38922950e-09 0s 0s 38931070e-09 0s 0s 38932590e-09 1s 1s 38933190e-09 0s 0s 38941350e-09 0s 0s 38942830e-09 1s 1s 38943430e-09 0s 0s 38951630e-09 0s 0s 38953070e-09 1s 1s 38953670e-09 0s 0s 38961910e-09 0s 0s 38963310e-09 1s 1s 38963910e-09 0s 0s 38972190e-09 0s 0s 38973550e-09 1s 1s 38974150e-09 0s 0s 38982470e-09 0s 0s 38983790e-09 1s 1s 38984390e-09 0s 0s 38992750e-09 0s 0s 38994030e-09 1s 1s 38994630e-09 0s 0s 39003030e-09 0s 0s 39004270e-09 1s 1s 39004870e-09 0s 0s 39013310e-09 0s 0s 39014510e-09 1s 1s 39015110e-09 0s 0s 39023590e-09 0s 0s 39024750e-09 1s 1s 39025350e-09 0s 0s 39033870e-09 0s 0s 39034990e-09 1s 1s 39035590e-09 0s 0s 39044150e-09 0s 0s 39045230e-09 1s 1s 39045830e-09 0s 0s 39054430e-09 0s 0s 39055470e-09 1s 1s 39056070e-09 0s 0s 39064710e-09 0s 0s 39065710e-09 1s 1s 39066310e-09 0s 0s 39074990e-09 0s 0s 39075950e-09 1s 1s 39076550e-09 0s 0s 39085270e-09 0s 0s 39086190e-09 1s 1s 39086790e-09 0s 0s 39095550e-09 0s 0s 39096430e-09 1s 1s 39097030e-09 0s 0s 39105830e-09 0s 0s 39106670e-09 1s 1s 39107270e-09 0s 0s 39116110e-09 0s 0s 39116910e-09 1s 1s 39117510e-09 0s 0s 39126390e-09 0s 0s 39127150e-09 1s 1s 39127750e-09 0s 0s 39136670e-09 0s 0s 39137390e-09 1s 1s 39137990e-09 0s 0s 39146950e-09 0s 0s 39147630e-09 1s 1s 39148230e-09 0s 0s 39157230e-09 0s 0s 39157870e-09 1s 1s 39158470e-09 0s 0s 39167510e-09 0s 0s 39168110e-09 1s 1s 39168710e-09 0s 0s 39177790e-09 0s 0s 39178350e-09 1s 1s 39178950e-09 0s 0s 39188070e-09 0s 0s 39188590e-09 1s 1s 39189190e-09 0s 0s 39198350e-09 0s 0s 39198830e-09 1s 1s 39199430e-09 0s 0s 39208630e-09 0s 0s 39209070e-09 1s 1s 39209670e-09 0s 0s 39218910e-09 0s 0s 39219310e-09 1s 1s 39219910e-09 0s 0s 39229190e-09 0s 0s 39229550e-09 1s 1s 39230150e-09 0s 0s 39239470e-09 0s 0s 39239790e-09 1s 1s 39240390e-09 0s 0s 39249750e-09 0s 0s 39250030e-09 1s 1s 39250630e-09 0s 0s 39260030e-09 0s 0s 39260270e-09 1s 1s 39260870e-09 0s 0s 39270310e-09 0s 0s 39270510e-09 1s 1s 39271110e-09 0s 0s 39280590e-09 0s 0s 39280750e-09 1s 1s 39281350e-09 0s 0s 39290870e-09 0s 0s 39290990e-09 1s 1s 39291590e-09 0s 0s 39301150e-09 0s 0s 39301230e-09 1s 1s 39301830e-09 0s 0s 39311430e-09 0s 0s 39311470e-09 1s 1s 39312070e-09 0s 0s 39321710e-09 1s 1s 39321750e-09 1s 1s 39322350e-09 0s 0s 39331950e-09 1s 1s 39332030e-09 1s 1s 39332590e-09 0s 0s 39342190e-09 1s 1s 39342310e-09 1s 1s 39342830e-09 0s 0s 39352430e-09 1s 1s 39352590e-09 1s 1s 39353070e-09 0s 0s 39362670e-09 1s 1s 39362870e-09 1s 1s 39363310e-09 0s 0s 39372910e-09 1s 1s 39373150e-09 1s 1s 39373550e-09 0s 0s 39383150e-09 1s 1s 39383430e-09 1s 1s 39383790e-09 0s 0s 39393390e-09 1s 1s 39393710e-09 1s 1s 39394030e-09 0s 0s 39403630e-09 1s 1s 39403990e-09 1s 1s 39404270e-09 0s 0s 39413870e-09 1s 1s 39414270e-09 1s 1s 39414510e-09 0s 0s 39424110e-09 1s 1s 39424550e-09 1s 1s 39424750e-09 0s 0s 39434350e-09 1s 1s 39434830e-09 1s 1s 39434990e-09 0s 0s 39444590e-09 1s 1s 39445110e-09 1s 1s 39445230e-09 0s 0s 39454830e-09 1s 1s 39455390e-09 1s 1s 39455470e-09 0s 0s 39465070e-09 1s 1s 39465670e-09 1s 1s 39465710e-09 0s 0s 39475310e-09 1s 1s 39475950e-09 0s 0s 39485550e-09 1s 1s 39486190e-09 0s 0s 39486230e-09 0s 0s 39495790e-09 1s 1s 39496430e-09 0s 0s 39496510e-09 0s 0s 39506030e-09 1s 1s 39506670e-09 0s 0s 39506790e-09 0s 0s 39516270e-09 1s 1s 39516910e-09 0s 0s 39517070e-09 0s 0s 39526510e-09 1s 1s 39527150e-09 0s 0s 39527350e-09 0s 0s 39536750e-09 1s 1s 39537390e-09 0s 0s 39537630e-09 0s 0s 39546990e-09 1s 1s 39547630e-09 0s 0s 39547910e-09 0s 0s 39557230e-09 1s 1s 39557870e-09 0s 0s 39558190e-09 0s 0s 39567470e-09 1s 1s 39568110e-09 0s 0s 39568470e-09 0s 0s 39577710e-09 1s 1s 39578350e-09 0s 0s 39578750e-09 0s 0s 39587950e-09 1s 1s 39588590e-09 0s 0s 39589030e-09 0s 0s 39598190e-09 1s 1s 39598830e-09 0s 0s 39599310e-09 0s 0s 39608430e-09 1s 1s 39609070e-09 0s 0s 39609590e-09 0s 0s 39618670e-09 1s 1s 39619310e-09 0s 0s 39619870e-09 0s 0s 39628910e-09 1s 1s 39629550e-09 0s 0s 39630150e-09 0s 0s 39639150e-09 1s 1s 39639790e-09 0s 0s 39640430e-09 0s 0s 39649390e-09 1s 1s 39650030e-09 0s 0s 39650710e-09 0s 0s 39659630e-09 1s 1s 39660270e-09 0s 0s 39660990e-09 0s 0s 39669870e-09 1s 1s 39670510e-09 0s 0s 39671270e-09 0s 0s 39680110e-09 1s 1s 39680750e-09 0s 0s 39681550e-09 0s 0s 39690350e-09 1s 1s 39690990e-09 0s 0s 39691830e-09 0s 0s 39700590e-09 1s 1s 39701230e-09 0s 0s 39702110e-09 0s 0s 39710830e-09 1s 1s 39711470e-09 0s 0s 39712390e-09 0s 0s 39721070e-09 1s 1s 39721710e-09 0s 0s 39722670e-09 0s 0s 39731310e-09 1s 1s 39731950e-09 0s 0s 39732950e-09 0s 0s 39741550e-09 1s 1s 39742190e-09 0s 0s 39743230e-09 0s 0s 39751790e-09 1s 1s 39752430e-09 0s 0s 39753510e-09 0s 0s 39762030e-09 1s 1s 39762670e-09 0s 0s 39763790e-09 0s 0s 39772270e-09 1s 1s 39772910e-09 0s 0s 39774070e-09 0s 0s 39782510e-09 1s 1s 39783150e-09 0s 0s 39784350e-09 0s 0s 39792750e-09 1s 1s 39793390e-09 0s 0s 39794630e-09 0s 0s 39802990e-09 1s 1s 39803630e-09 0s 0s 39804910e-09 0s 0s 39813230e-09 1s 1s 39813870e-09 0s 0s 39815190e-09 0s 0s 39823470e-09 1s 1s 39824110e-09 0s 0s 39825470e-09 0s 0s 39833710e-09 1s 1s 39834350e-09 0s 0s 39835750e-09 0s 0s 39843950e-09 1s 1s 39844590e-09 0s 0s 39846030e-09 0s 0s 39854190e-09 1s 1s 39854830e-09 0s 0s 39856310e-09 0s 0s 39864430e-09 1s 1s 39865070e-09 0s 0s 39866590e-09 0s 0s 39874670e-09 1s 1s 39875310e-09 0s 0s 39876870e-09 0s 0s 39884910e-09 1s 1s 39885550e-09 0s 0s 39887150e-09 0s 0s 39895150e-09 1s 1s 39895790e-09 0s 0s 39897430e-09 0s 0s 39905390e-09 1s 1s 39906030e-09 0s 0s 39907710e-09 0s 0s 39915630e-09 1s 1s 39916270e-09 0s 0s 39917990e-09 0s 0s 39925870e-09 1s 1s 39926510e-09 0s 0s 39928270e-09 0s 0s 39936110e-09 1s 1s 39936750e-09 0s 0s 39938550e-09 0s 0s 39946350e-09 1s 1s 39946990e-09 0s 0s 39948830e-09 0s 0s 39956590e-09 1s 1s 39957230e-09 0s 0s 39959110e-09 0s 0s 39966830e-09 1s 1s 39967470e-09 0s 0s 39969390e-09 0s 0s 39977070e-09 1s 1s 39977710e-09 0s 0s 39979670e-09 0s 0s 39987310e-09 1s 1s 39987950e-09 0s 0s 39989950e-09 0s 0s 39997550e-09 1s 1s 39998190e-09 0s 0s 40000230e-09 0s 0s 40007790e-09 1s 1s 40008430e-09 0s 0s 40010510e-09 0s 0s 40018030e-09 1s 1s 40018670e-09 0s 0s 40020790e-09 0s 0s 40028270e-09 1s 1s 40028910e-09 0s 0s 40031070e-09 0s 0s 40038510e-09 1s 1s 40039150e-09 0s 0s 40041350e-09 0s 0s 40048750e-09 1s 1s 40049390e-09 0s 0s 40051630e-09 0s 0s 40058990e-09 1s 1s 40059630e-09 0s 0s 40061910e-09 0s 0s 40069230e-09 1s 1s 40069870e-09 0s 0s 40072190e-09 0s 0s 40079470e-09 1s 1s 40080110e-09 0s 0s 40082470e-09 0s 0s 40089710e-09 1s 1s 40090350e-09 0s 0s 40092750e-09 0s 0s 40099950e-09 1s 1s 40100590e-09 0s 0s 40103030e-09 0s 0s 40110190e-09 1s 1s 40110830e-09 0s 0s 40113310e-09 0s 0s 40120430e-09 1s 1s 40121070e-09 0s 0s 40123590e-09 0s 0s 40130670e-09 1s 1s 40131310e-09 0s 0s 40133870e-09 0s 0s 40140910e-09 1s 1s 40141550e-09 0s 0s 40144150e-09 0s 0s 40151150e-09 1s 1s 40151790e-09 0s 0s 40154430e-09 0s 0s 40161390e-09 1s 1s 40162030e-09 0s 0s 40164710e-09 0s 0s 40171630e-09 1s 1s 40172270e-09 0s 0s 40174990e-09 0s 0s 40181870e-09 1s 1s 40182510e-09 0s 0s 40185270e-09 0s 0s 40192110e-09 1s 1s 40192750e-09 0s 0s 40195550e-09 0s 0s 40202350e-09 1s 1s 40202990e-09 0s 0s 40205830e-09 0s 0s 40212590e-09 1s 1s 40213230e-09 0s 0s 40216110e-09 0s 0s 40222830e-09 1s 1s 40223470e-09 0s 0s 40226390e-09 0s 0s 40233070e-09 1s 1s 40233710e-09 0s 0s 40236670e-09 0s 0s 40243310e-09 1s 1s 40243950e-09 0s 0s 40246950e-09 0s 0s 40253550e-09 1s 1s 40254190e-09 0s 0s 40257230e-09 0s 0s 40263790e-09 1s 1s 40264430e-09 0s 0s 40267510e-09 0s 0s 40274030e-09 1s 1s 40274670e-09 0s 0s 40277790e-09 0s 0s 40284270e-09 1s 1s 40284910e-09 0s 0s 40288070e-09 0s 0s 40294510e-09 1s 1s 40295150e-09 0s 0s 40298350e-09 0s 0s 40304750e-09 1s 1s 40305390e-09 0s 0s 40308630e-09 0s 0s 40314990e-09 1s 1s 40315630e-09 0s 0s 40318910e-09 0s 0s 40325230e-09 1s 1s 40325870e-09 0s 0s 40329190e-09 0s 0s 40335470e-09 1s 1s 40336110e-09 0s 0s 40339470e-09 0s 0s 40345710e-09 1s 1s 40346350e-09 0s 0s 40349750e-09 0s 0s 40355950e-09 1s 1s 40356590e-09 0s 0s 40360030e-09 0s 0s 40366190e-09 1s 1s 40366830e-09 0s 0s 40370310e-09 0s 0s 40376430e-09 1s 1s 40377070e-09 0s 0s 40380590e-09 0s 0s 40386670e-09 1s 1s 40387310e-09 0s 0s 40390870e-09 0s 0s 40396910e-09 1s 1s 40397550e-09 0s 0s 40401150e-09 0s 0s 40407150e-09 1s 1s 40407790e-09 0s 0s 40411430e-09 0s 0s 40417390e-09 1s 1s 40418030e-09 0s 0s 40421710e-09 0s 0s 40427630e-09 1s 1s 40428270e-09 0s 0s 40431990e-09 0s 0s 40437870e-09 1s 1s 40438510e-09 0s 0s 40442270e-09 0s 0s 40448110e-09 1s 1s 40448750e-09 0s 0s 40452550e-09 0s 0s 40458350e-09 1s 1s 40458990e-09 0s 0s 40462830e-09 0s 0s 40468590e-09 1s 1s 40469230e-09 0s 0s 40473110e-09 0s 0s 40478830e-09 1s 1s 40479470e-09 0s 0s 40483390e-09 0s 0s 40489070e-09 1s 1s 40489710e-09 0s 0s 40493670e-09 0s 0s 40499310e-09 1s 1s 40499950e-09 0s 0s 40503950e-09 0s 0s 40509550e-09 1s 1s 40510190e-09 0s 0s 40514230e-09 0s 0s 40519790e-09 1s 1s 40520430e-09 0s 0s 40524510e-09 0s 0s 40530030e-09 1s 1s 40530670e-09 0s 0s 40534790e-09 0s 0s 40540270e-09 1s 1s 40540910e-09 0s 0s 40545070e-09 0s 0s 40550510e-09 1s 1s 40551150e-09 0s 0s 40555350e-09 0s 0s 40560750e-09 1s 1s 40561390e-09 0s 0s 40565630e-09 0s 0s 40570990e-09 1s 1s 40571630e-09 0s 0s 40575910e-09 0s 0s 40581230e-09 1s 1s 40581870e-09 0s 0s 40586190e-09 0s 0s 40591470e-09 1s 1s 40592110e-09 0s 0s 40596470e-09 0s 0s 40601710e-09 1s 1s 40602350e-09 0s 0s 40606750e-09 0s 0s 40611950e-09 1s 1s 40612590e-09 0s 0s 40617030e-09 0s 0s 40622190e-09 1s 1s 40622830e-09 0s 0s 40627310e-09 0s 0s 40632430e-09 1s 1s 40633070e-09 0s 0s 40637590e-09 0s 0s 40642670e-09 1s 1s 40643310e-09 0s 0s 40647870e-09 0s 0s 40652910e-09 1s 1s 40653550e-09 0s 0s 40658150e-09 0s 0s 40663150e-09 1s 1s 40663790e-09 0s 0s 40668430e-09 0s 0s 40673390e-09 1s 1s 40674030e-09 0s 0s 40678710e-09 0s 0s 40683630e-09 1s 1s 40684270e-09 0s 0s 40688990e-09 0s 0s 40693870e-09 1s 1s 40694510e-09 0s 0s 40699270e-09 0s 0s 40704110e-09 1s 1s 40704750e-09 0s 0s 40709550e-09 0s 0s 40714350e-09 1s 1s 40714990e-09 0s 0s 40719830e-09 0s 0s 40724590e-09 1s 1s 40725230e-09 0s 0s 40730110e-09 0s 0s 40734830e-09 1s 1s 40735470e-09 0s 0s 40740390e-09 0s 0s 40745070e-09 1s 1s 40745710e-09 0s 0s 40750670e-09 0s 0s 40755310e-09 1s 1s 40755950e-09 0s 0s 40760950e-09 0s 0s 40765550e-09 1s 1s 40766190e-09 0s 0s 40771230e-09 0s 0s 40775790e-09 1s 1s 40776430e-09 0s 0s 40781510e-09 0s 0s 40786030e-09 1s 1s 40786670e-09 0s 0s 40791790e-09 0s 0s 40796270e-09 1s 1s 40796910e-09 0s 0s 40802070e-09 0s 0s 40806510e-09 1s 1s 40807150e-09 0s 0s 40812350e-09 0s 0s 40816750e-09 1s 1s 40817390e-09 0s 0s 40822630e-09 0s 0s 40826990e-09 1s 1s 40827630e-09 0s 0s 40832910e-09 0s 0s 40837230e-09 1s 1s 40837870e-09 0s 0s 40843190e-09 0s 0s 40847470e-09 1s 1s 40848110e-09 0s 0s 40853470e-09 0s 0s 40857710e-09 1s 1s 40858350e-09 0s 0s 40863750e-09 0s 0s 40867950e-09 1s 1s 40868590e-09 0s 0s 40874030e-09 0s 0s 40878190e-09 1s 1s 40878830e-09 0s 0s 40884310e-09 0s 0s 40888430e-09 1s 1s 40889070e-09 0s 0s 40894590e-09 0s 0s 40898670e-09 1s 1s 40899310e-09 0s 0s 40904870e-09 0s 0s 40908910e-09 1s 1s 40909550e-09 0s 0s 40915150e-09 0s 0s 40919150e-09 1s 1s 40919790e-09 0s 0s 40925430e-09 0s 0s 40929390e-09 1s 1s 40930030e-09 0s 0s 40935710e-09 0s 0s 40939630e-09 1s 1s 40940270e-09 0s 0s 40945990e-09 0s 0s 40949870e-09 1s 1s 40950510e-09 0s 0s 40956270e-09 0s 0s 40960110e-09 1s 1s 40960750e-09 0s 0s 40966550e-09 0s 0s 40970350e-09 1s 1s 40970990e-09 0s 0s 40976830e-09 0s 0s 40980590e-09 1s 1s 40981230e-09 0s 0s 40987110e-09 0s 0s 40990830e-09 1s 1s 40991470e-09 0s 0s 40997390e-09 0s 0s 41001070e-09 1s 1s 41001710e-09 0s 0s 41007670e-09 0s 0s 41011310e-09 1s 1s 41011950e-09 0s 0s 41017950e-09 0s 0s 41021550e-09 1s 1s 41022190e-09 0s 0s 41028230e-09 0s 0s 41031790e-09 1s 1s 41032430e-09 0s 0s 41038510e-09 0s 0s 41042030e-09 1s 1s 41042670e-09 0s 0s 41048790e-09 0s 0s 41052270e-09 1s 1s 41052910e-09 0s 0s 41059070e-09 0s 0s 41062510e-09 1s 1s 41063150e-09 0s 0s 41069350e-09 0s 0s 41072750e-09 1s 1s 41073390e-09 0s 0s 41079630e-09 0s 0s 41082990e-09 1s 1s 41083630e-09 0s 0s 41089910e-09 0s 0s 41093230e-09 1s 1s 41093870e-09 0s 0s 41100190e-09 0s 0s 41103470e-09 1s 1s 41104110e-09 0s 0s 41110470e-09 0s 0s 41113710e-09 1s 1s 41114350e-09 0s 0s 41120750e-09 0s 0s 41123950e-09 1s 1s 41124590e-09 0s 0s 41131030e-09 0s 0s 41134190e-09 1s 1s 41134830e-09 0s 0s 41141310e-09 0s 0s 41144430e-09 1s 1s 41145070e-09 0s 0s 41151590e-09 0s 0s 41154670e-09 1s 1s 41155310e-09 0s 0s 41161870e-09 0s 0s 41164910e-09 1s 1s 41165550e-09 0s 0s 41172150e-09 0s 0s 41175150e-09 1s 1s 41175790e-09 0s 0s 41182430e-09 0s 0s 41185390e-09 1s 1s 41186030e-09 0s 0s 41192710e-09 0s 0s 41195630e-09 1s 1s 41196270e-09 0s 0s 41202990e-09 0s 0s 41205870e-09 1s 1s 41206510e-09 0s 0s 41213270e-09 0s 0s 41216110e-09 1s 1s 41216750e-09 0s 0s 41223550e-09 0s 0s 41226350e-09 1s 1s 41226990e-09 0s 0s 41233830e-09 0s 0s 41236590e-09 1s 1s 41237230e-09 0s 0s 41244110e-09 0s 0s 41246830e-09 1s 1s 41247470e-09 0s 0s 41254390e-09 0s 0s 41257070e-09 1s 1s 41257710e-09 0s 0s 41264670e-09 0s 0s 41267310e-09 1s 1s 41267950e-09 0s 0s 41274950e-09 0s 0s 41277550e-09 1s 1s 41278190e-09 0s 0s 41285230e-09 0s 0s 41287790e-09 1s 1s 41288430e-09 0s 0s 41295510e-09 0s 0s 41298030e-09 1s 1s 41298670e-09 0s 0s 41305790e-09 0s 0s 41308270e-09 1s 1s 41308910e-09 0s 0s 41316070e-09 0s 0s 41318510e-09 1s 1s 41319150e-09 0s 0s 41326350e-09 0s 0s 41328750e-09 1s 1s 41329390e-09 0s 0s 41336630e-09 0s 0s 41338990e-09 1s 1s 41339630e-09 0s 0s 41346910e-09 0s 0s 41349230e-09 1s 1s 41349870e-09 0s 0s 41357190e-09 0s 0s 41359470e-09 1s 1s 41360110e-09 0s 0s 41367470e-09 0s 0s 41369710e-09 1s 1s 41370350e-09 0s 0s 41377750e-09 0s 0s 41379950e-09 1s 1s 41380590e-09 0s 0s 41388030e-09 0s 0s 41390190e-09 1s 1s 41390830e-09 0s 0s 41398310e-09 0s 0s 41400430e-09 1s 1s 41401070e-09 0s 0s 41408590e-09 0s 0s 41410670e-09 1s 1s 41411310e-09 0s 0s 41418870e-09 0s 0s 41420910e-09 1s 1s 41421550e-09 0s 0s 41429150e-09 0s 0s 41431150e-09 1s 1s 41431790e-09 0s 0s 41439430e-09 0s 0s 41441390e-09 1s 1s 41442030e-09 0s 0s 41449710e-09 0s 0s 41451630e-09 1s 1s 41452270e-09 0s 0s 41459990e-09 0s 0s 41461870e-09 1s 1s 41462510e-09 0s 0s 41470270e-09 0s 0s 41472110e-09 1s 1s 41472750e-09 0s 0s 41480550e-09 0s 0s 41482350e-09 1s 1s 41482990e-09 0s 0s 41490830e-09 0s 0s 41492590e-09 1s 1s 41493230e-09 0s 0s 41501110e-09 0s 0s 41502830e-09 1s 1s 41503470e-09 0s 0s 41511390e-09 0s 0s 41513070e-09 1s 1s 41513710e-09 0s 0s 41521670e-09 0s 0s 41523310e-09 1s 1s 41523950e-09 0s 0s 41531950e-09 0s 0s 41533550e-09 1s 1s 41534190e-09 0s 0s 41542230e-09 0s 0s 41543790e-09 1s 1s 41544430e-09 0s 0s 41552510e-09 0s 0s 41554030e-09 1s 1s 41554670e-09 0s 0s 41562790e-09 0s 0s 41564270e-09 1s 1s 41564910e-09 0s 0s 41573070e-09 0s 0s 41574510e-09 1s 1s 41575150e-09 0s 0s 41583350e-09 0s 0s 41584750e-09 1s 1s 41585390e-09 0s 0s 41593630e-09 0s 0s 41594990e-09 1s 1s 41595630e-09 0s 0s 41603910e-09 0s 0s 41605230e-09 1s 1s 41605870e-09 0s 0s 41614190e-09 0s 0s 41615470e-09 1s 1s 41616110e-09 0s 0s 41624470e-09 0s 0s 41625710e-09 1s 1s 41626350e-09 0s 0s 41634750e-09 0s 0s 41635950e-09 1s 1s 41636590e-09 0s 0s 41645030e-09 0s 0s 41646190e-09 1s 1s 41646830e-09 0s 0s 41655310e-09 0s 0s 41656430e-09 1s 1s 41657070e-09 0s 0s 41665590e-09 0s 0s 41666670e-09 1s 1s 41667310e-09 0s 0s 41675870e-09 0s 0s 41676910e-09 1s 1s 41677550e-09 0s 0s 41686150e-09 0s 0s 41687150e-09 1s 1s 41687790e-09 0s 0s 41696430e-09 0s 0s 41697390e-09 1s 1s 41698030e-09 0s 0s 41706710e-09 0s 0s 41707630e-09 1s 1s 41708270e-09 0s 0s 41716990e-09 0s 0s 41717870e-09 1s 1s 41718510e-09 0s 0s 41727270e-09 0s 0s 41728110e-09 1s 1s 41728750e-09 0s 0s 41737550e-09 0s 0s 41738350e-09 1s 1s 41738990e-09 0s 0s 41747830e-09 0s 0s 41748590e-09 1s 1s 41749230e-09 0s 0s 41758110e-09 0s 0s 41758830e-09 1s 1s 41759470e-09 0s 0s 41768390e-09 0s 0s 41769070e-09 1s 1s 41769710e-09 0s 0s 41778670e-09 0s 0s 41779310e-09 1s 1s 41779950e-09 0s 0s 41788950e-09 0s 0s 41789550e-09 1s 1s 41790190e-09 0s 0s 41799230e-09 0s 0s 41799790e-09 1s 1s 41800430e-09 0s 0s 41809510e-09 0s 0s 41810030e-09 1s 1s 41810670e-09 0s 0s 41819790e-09 0s 0s 41820270e-09 1s 1s 41820910e-09 0s 0s 41830070e-09 0s 0s 41830510e-09 1s 1s 41831150e-09 0s 0s 41840350e-09 0s 0s 41840750e-09 1s 1s 41841390e-09 0s 0s 41850630e-09 0s 0s 41850990e-09 1s 1s 41851630e-09 0s 0s 41860910e-09 0s 0s 41861230e-09 1s 1s 41861870e-09 0s 0s 41871190e-09 0s 0s 41871470e-09 1s 1s 41872110e-09 0s 0s 41881470e-09 0s 0s 41881710e-09 1s 1s 41882350e-09 0s 0s 41891750e-09 0s 0s 41891950e-09 1s 1s 41892590e-09 0s 0s 41902030e-09 0s 0s 41902190e-09 1s 1s 41902830e-09 0s 0s 41912310e-09 0s 0s 41912430e-09 1s 1s 41913070e-09 0s 0s 41922590e-09 0s 0s 41922670e-09 1s 1s 41923310e-09 0s 0s 41932870e-09 0s 0s 41932910e-09 1s 1s 41933550e-09 0s 0s 41943150e-09 1s 1s 41943190e-09 1s 1s 41943830e-09 0s 0s 41953390e-09 1s 1s 41953470e-09 1s 1s 41954070e-09 0s 0s 41963630e-09 1s 1s 41963750e-09 1s 1s 41964310e-09 0s 0s 41973870e-09 1s 1s 41974030e-09 1s 1s 41974550e-09 0s 0s 41984110e-09 1s 1s 41984310e-09 1s 1s 41984790e-09 0s 0s 41994350e-09 1s 1s 41994590e-09 1s 1s 41995030e-09 0s 0s 42004590e-09 1s 1s 42004870e-09 1s 1s 42005270e-09 0s 0s 42014830e-09 1s 1s 42015150e-09 1s 1s 42015510e-09 0s 0s 42025070e-09 1s 1s 42025430e-09 1s 1s 42025750e-09 0s 0s 42035310e-09 1s 1s 42035710e-09 1s 1s 42035990e-09 0s 0s 42045550e-09 1s 1s 42045990e-09 1s 1s 42046230e-09 0s 0s 42055790e-09 1s 1s 42056270e-09 1s 1s 42056470e-09 0s 0s 42066030e-09 1s 1s 42066550e-09 1s 1s 42066710e-09 0s 0s 42076270e-09 1s 1s 42076830e-09 1s 1s 42076950e-09 0s 0s 42086510e-09 1s 1s 42087110e-09 1s 1s 42087190e-09 0s 0s 42096750e-09 1s 1s 42097390e-09 1s 1s 42097430e-09 0s 0s 42106990e-09 1s 1s 42107670e-09 0s 0s 42117230e-09 1s 1s 42117910e-09 0s 0s 42117950e-09 0s 0s 42127470e-09 1s 1s 42128150e-09 0s 0s 42128230e-09 0s 0s 42137710e-09 1s 1s 42138390e-09 0s 0s 42138510e-09 0s 0s 42147950e-09 1s 1s 42148630e-09 0s 0s 42148790e-09 0s 0s 42158190e-09 1s 1s 42158870e-09 0s 0s 42159070e-09 0s 0s 42168430e-09 1s 1s 42169110e-09 0s 0s 42169350e-09 0s 0s 42178670e-09 1s 1s 42179350e-09 0s 0s 42179630e-09 0s 0s 42188910e-09 1s 1s 42189590e-09 0s 0s 42189910e-09 0s 0s 42199150e-09 1s 1s 42199830e-09 0s 0s 42200190e-09 0s 0s 42209390e-09 1s 1s 42210070e-09 0s 0s 42210470e-09 0s 0s 42219630e-09 1s 1s 42220310e-09 0s 0s 42220750e-09 0s 0s 42229870e-09 1s 1s 42230550e-09 0s 0s 42231030e-09 0s 0s 42240110e-09 1s 1s 42240790e-09 0s 0s 42241310e-09 0s 0s 42250350e-09 1s 1s 42251030e-09 0s 0s 42251590e-09 0s 0s 42260590e-09 1s 1s 42261270e-09 0s 0s 42261870e-09 0s 0s 42270830e-09 1s 1s 42271510e-09 0s 0s 42272150e-09 0s 0s 42281070e-09 1s 1s 42281750e-09 0s 0s 42282430e-09 0s 0s 42291310e-09 1s 1s 42291990e-09 0s 0s 42292710e-09 0s 0s 42301550e-09 1s 1s 42302230e-09 0s 0s 42302990e-09 0s 0s 42311790e-09 1s 1s 42312470e-09 0s 0s 42313270e-09 0s 0s 42322030e-09 1s 1s 42322710e-09 0s 0s 42323550e-09 0s 0s 42332270e-09 1s 1s 42332950e-09 0s 0s 42333830e-09 0s 0s 42342510e-09 1s 1s 42343190e-09 0s 0s 42344110e-09 0s 0s 42352750e-09 1s 1s 42353430e-09 0s 0s 42354390e-09 0s 0s 42362990e-09 1s 1s 42363670e-09 0s 0s 42364670e-09 0s 0s 42373230e-09 1s 1s 42373910e-09 0s 0s 42374950e-09 0s 0s 42383470e-09 1s 1s 42384150e-09 0s 0s 42385230e-09 0s 0s 42393710e-09 1s 1s 42394390e-09 0s 0s 42395510e-09 0s 0s 42403950e-09 1s 1s 42404630e-09 0s 0s 42405790e-09 0s 0s 42414190e-09 1s 1s 42414870e-09 0s 0s 42416070e-09 0s 0s 42424430e-09 1s 1s 42425110e-09 0s 0s 42426350e-09 0s 0s 42434670e-09 1s 1s 42435350e-09 0s 0s 42436630e-09 0s 0s 42444910e-09 1s 1s 42445590e-09 0s 0s 42446910e-09 0s 0s 42455150e-09 1s 1s 42455830e-09 0s 0s 42457190e-09 0s 0s 42465390e-09 1s 1s 42466070e-09 0s 0s 42467470e-09 0s 0s 42475630e-09 1s 1s 42476310e-09 0s 0s 42477750e-09 0s 0s 42485870e-09 1s 1s 42486550e-09 0s 0s 42488030e-09 0s 0s 42496110e-09 1s 1s 42496790e-09 0s 0s 42498310e-09 0s 0s 42506350e-09 1s 1s 42507030e-09 0s 0s 42508590e-09 0s 0s 42516590e-09 1s 1s 42517270e-09 0s 0s 42518870e-09 0s 0s 42526830e-09 1s 1s 42527510e-09 0s 0s 42529150e-09 0s 0s 42537070e-09 1s 1s 42537750e-09 0s 0s 42539430e-09 0s 0s 42547310e-09 1s 1s 42547990e-09 0s 0s 42549710e-09 0s 0s 42557550e-09 1s 1s 42558230e-09 0s 0s 42559990e-09 0s 0s 42567790e-09 1s 1s 42568470e-09 0s 0s 42570270e-09 0s 0s 42578030e-09 1s 1s 42578710e-09 0s 0s 42580550e-09 0s 0s 42588270e-09 1s 1s 42588950e-09 0s 0s 42590830e-09 0s 0s 42598510e-09 1s 1s 42599190e-09 0s 0s 42601110e-09 0s 0s 42608750e-09 1s 1s 42609430e-09 0s 0s 42611390e-09 0s 0s 42618990e-09 1s 1s 42619670e-09 0s 0s 42621670e-09 0s 0s 42629230e-09 1s 1s 42629910e-09 0s 0s 42631950e-09 0s 0s 42639470e-09 1s 1s 42640150e-09 0s 0s 42642230e-09 0s 0s 42649710e-09 1s 1s 42650390e-09 0s 0s 42652510e-09 0s 0s 42659950e-09 1s 1s 42660630e-09 0s 0s 42662790e-09 0s 0s 42670190e-09 1s 1s 42670870e-09 0s 0s 42673070e-09 0s 0s 42680430e-09 1s 1s 42681110e-09 0s 0s 42683350e-09 0s 0s 42690670e-09 1s 1s 42691350e-09 0s 0s 42693630e-09 0s 0s 42700910e-09 1s 1s 42701590e-09 0s 0s 42703910e-09 0s 0s 42711150e-09 1s 1s 42711830e-09 0s 0s 42714190e-09 0s 0s 42721390e-09 1s 1s 42722070e-09 0s 0s 42724470e-09 0s 0s 42731630e-09 1s 1s 42732310e-09 0s 0s 42734750e-09 0s 0s 42741870e-09 1s 1s 42742550e-09 0s 0s 42745030e-09 0s 0s 42752110e-09 1s 1s 42752790e-09 0s 0s 42755310e-09 0s 0s 42762350e-09 1s 1s 42763030e-09 0s 0s 42765590e-09 0s 0s 42772590e-09 1s 1s 42773270e-09 0s 0s 42775870e-09 0s 0s 42782830e-09 1s 1s 42783510e-09 0s 0s 42786150e-09 0s 0s 42793070e-09 1s 1s 42793750e-09 0s 0s 42796430e-09 0s 0s 42803310e-09 1s 1s 42803990e-09 0s 0s 42806710e-09 0s 0s 42813550e-09 1s 1s 42814230e-09 0s 0s 42816990e-09 0s 0s 42823790e-09 1s 1s 42824470e-09 0s 0s 42827270e-09 0s 0s 42834030e-09 1s 1s 42834710e-09 0s 0s 42837550e-09 0s 0s 42844270e-09 1s 1s 42844950e-09 0s 0s 42847830e-09 0s 0s 42854510e-09 1s 1s 42855190e-09 0s 0s 42858110e-09 0s 0s 42864750e-09 1s 1s 42865430e-09 0s 0s 42868390e-09 0s 0s 42874990e-09 1s 1s 42875670e-09 0s 0s 42878670e-09 0s 0s 42885230e-09 1s 1s 42885910e-09 0s 0s 42888950e-09 0s 0s 42895470e-09 1s 1s 42896150e-09 0s 0s 42899230e-09 0s 0s 42905710e-09 1s 1s 42906390e-09 0s 0s 42909510e-09 0s 0s 42915950e-09 1s 1s 42916630e-09 0s 0s 42919790e-09 0s 0s 42926190e-09 1s 1s 42926870e-09 0s 0s 42930070e-09 0s 0s 42936430e-09 1s 1s 42937110e-09 0s 0s 42940350e-09 0s 0s 42946670e-09 1s 1s 42947350e-09 0s 0s 42950630e-09 0s 0s 42956910e-09 1s 1s 42957590e-09 0s 0s 42960910e-09 0s 0s 42967150e-09 1s 1s 42967830e-09 0s 0s 42971190e-09 0s 0s 42977390e-09 1s 1s 42978070e-09 0s 0s 42981470e-09 0s 0s 42987630e-09 1s 1s 42988310e-09 0s 0s 42991750e-09 0s 0s 42997870e-09 1s 1s 42998550e-09 0s 0s 43002030e-09 0s 0s 43008110e-09 1s 1s 43008790e-09 0s 0s 43012310e-09 0s 0s 43018350e-09 1s 1s 43019030e-09 0s 0s 43022590e-09 0s 0s 43028590e-09 1s 1s 43029270e-09 0s 0s 43032870e-09 0s 0s 43038830e-09 1s 1s 43039510e-09 0s 0s 43043150e-09 0s 0s 43049070e-09 1s 1s 43049750e-09 0s 0s 43053430e-09 0s 0s 43059310e-09 1s 1s 43059990e-09 0s 0s 43063710e-09 0s 0s 43069550e-09 1s 1s 43070230e-09 0s 0s 43073990e-09 0s 0s 43079790e-09 1s 1s 43080470e-09 0s 0s 43084270e-09 0s 0s 43090030e-09 1s 1s 43090710e-09 0s 0s 43094550e-09 0s 0s 43100270e-09 1s 1s 43100950e-09 0s 0s 43104830e-09 0s 0s 43110510e-09 1s 1s 43111190e-09 0s 0s 43115110e-09 0s 0s 43120750e-09 1s 1s 43121430e-09 0s 0s 43125390e-09 0s 0s 43130990e-09 1s 1s 43131670e-09 0s 0s 43135670e-09 0s 0s 43141230e-09 1s 1s 43141910e-09 0s 0s 43145950e-09 0s 0s 43151470e-09 1s 1s 43152150e-09 0s 0s 43156230e-09 0s 0s 43161710e-09 1s 1s 43162390e-09 0s 0s 43166510e-09 0s 0s 43171950e-09 1s 1s 43172630e-09 0s 0s 43176790e-09 0s 0s 43182190e-09 1s 1s 43182870e-09 0s 0s 43187070e-09 0s 0s 43192430e-09 1s 1s 43193110e-09 0s 0s 43197350e-09 0s 0s 43202670e-09 1s 1s 43203350e-09 0s 0s 43207630e-09 0s 0s 43212910e-09 1s 1s 43213590e-09 0s 0s 43217910e-09 0s 0s 43223150e-09 1s 1s 43223830e-09 0s 0s 43228190e-09 0s 0s 43233390e-09 1s 1s 43234070e-09 0s 0s 43238470e-09 0s 0s 43243630e-09 1s 1s 43244310e-09 0s 0s 43248750e-09 0s 0s 43253870e-09 1s 1s 43254550e-09 0s 0s 43259030e-09 0s 0s 43264110e-09 1s 1s 43264790e-09 0s 0s 43269310e-09 0s 0s 43274350e-09 1s 1s 43275030e-09 0s 0s 43279590e-09 0s 0s 43284590e-09 1s 1s 43285270e-09 0s 0s 43289870e-09 0s 0s 43294830e-09 1s 1s 43295510e-09 0s 0s 43300150e-09 0s 0s 43305070e-09 1s 1s 43305750e-09 0s 0s 43310430e-09 0s 0s 43315310e-09 1s 1s 43315990e-09 0s 0s 43320710e-09 0s 0s 43325550e-09 1s 1s 43326230e-09 0s 0s 43330990e-09 0s 0s 43335790e-09 1s 1s 43336470e-09 0s 0s 43341270e-09 0s 0s 43346030e-09 1s 1s 43346710e-09 0s 0s 43351550e-09 0s 0s 43356270e-09 1s 1s 43356950e-09 0s 0s 43361830e-09 0s 0s 43366510e-09 1s 1s 43367190e-09 0s 0s 43372110e-09 0s 0s 43376750e-09 1s 1s 43377430e-09 0s 0s 43382390e-09 0s 0s 43386990e-09 1s 1s 43387670e-09 0s 0s 43392670e-09 0s 0s 43397230e-09 1s 1s 43397910e-09 0s 0s 43402950e-09 0s 0s 43407470e-09 1s 1s 43408150e-09 0s 0s 43413230e-09 0s 0s 43417710e-09 1s 1s 43418390e-09 0s 0s 43423510e-09 0s 0s 43427950e-09 1s 1s 43428630e-09 0s 0s 43433790e-09 0s 0s 43438190e-09 1s 1s 43438870e-09 0s 0s 43444070e-09 0s 0s 43448430e-09 1s 1s 43449110e-09 0s 0s 43454350e-09 0s 0s 43458670e-09 1s 1s 43459350e-09 0s 0s 43464630e-09 0s 0s 43468910e-09 1s 1s 43469590e-09 0s 0s 43474910e-09 0s 0s 43479150e-09 1s 1s 43479830e-09 0s 0s 43485190e-09 0s 0s 43489390e-09 1s 1s 43490070e-09 0s 0s 43495470e-09 0s 0s 43499630e-09 1s 1s 43500310e-09 0s 0s 43505750e-09 0s 0s 43509870e-09 1s 1s 43510550e-09 0s 0s 43516030e-09 0s 0s 43520110e-09 1s 1s 43520790e-09 0s 0s 43526310e-09 0s 0s 43530350e-09 1s 1s 43531030e-09 0s 0s 43536590e-09 0s 0s 43540590e-09 1s 1s 43541270e-09 0s 0s 43546870e-09 0s 0s 43550830e-09 1s 1s 43551510e-09 0s 0s 43557150e-09 0s 0s 43561070e-09 1s 1s 43561750e-09 0s 0s 43567430e-09 0s 0s 43571310e-09 1s 1s 43571990e-09 0s 0s 43577710e-09 0s 0s 43581550e-09 1s 1s 43582230e-09 0s 0s 43587990e-09 0s 0s 43591790e-09 1s 1s 43592470e-09 0s 0s 43598270e-09 0s 0s 43602030e-09 1s 1s 43602710e-09 0s 0s 43608550e-09 0s 0s 43612270e-09 1s 1s 43612950e-09 0s 0s 43618830e-09 0s 0s 43622510e-09 1s 1s 43623190e-09 0s 0s 43629110e-09 0s 0s 43632750e-09 1s 1s 43633430e-09 0s 0s 43639390e-09 0s 0s 43642990e-09 1s 1s 43643670e-09 0s 0s 43649670e-09 0s 0s 43653230e-09 1s 1s 43653910e-09 0s 0s 43659950e-09 0s 0s 43663470e-09 1s 1s 43664150e-09 0s 0s 43670230e-09 0s 0s 43673710e-09 1s 1s 43674390e-09 0s 0s 43680510e-09 0s 0s 43683950e-09 1s 1s 43684630e-09 0s 0s 43690790e-09 0s 0s 43694190e-09 1s 1s 43694870e-09 0s 0s 43701070e-09 0s 0s 43704430e-09 1s 1s 43705110e-09 0s 0s 43711350e-09 0s 0s 43714670e-09 1s 1s 43715350e-09 0s 0s 43721630e-09 0s 0s 43724910e-09 1s 1s 43725590e-09 0s 0s 43731910e-09 0s 0s 43735150e-09 1s 1s 43735830e-09 0s 0s 43742190e-09 0s 0s 43745390e-09 1s 1s 43746070e-09 0s 0s 43752470e-09 0s 0s 43755630e-09 1s 1s 43756310e-09 0s 0s 43762750e-09 0s 0s 43765870e-09 1s 1s 43766550e-09 0s 0s 43773030e-09 0s 0s 43776110e-09 1s 1s 43776790e-09 0s 0s 43783310e-09 0s 0s 43786350e-09 1s 1s 43787030e-09 0s 0s 43793590e-09 0s 0s 43796590e-09 1s 1s 43797270e-09 0s 0s 43803870e-09 0s 0s 43806830e-09 1s 1s 43807510e-09 0s 0s 43814150e-09 0s 0s 43817070e-09 1s 1s 43817750e-09 0s 0s 43824430e-09 0s 0s 43827310e-09 1s 1s 43827990e-09 0s 0s 43834710e-09 0s 0s 43837550e-09 1s 1s 43838230e-09 0s 0s 43844990e-09 0s 0s 43847790e-09 1s 1s 43848470e-09 0s 0s 43855270e-09 0s 0s 43858030e-09 1s 1s 43858710e-09 0s 0s 43865550e-09 0s 0s 43868270e-09 1s 1s 43868950e-09 0s 0s 43875830e-09 0s 0s 43878510e-09 1s 1s 43879190e-09 0s 0s 43886110e-09 0s 0s 43888750e-09 1s 1s 43889430e-09 0s 0s 43896390e-09 0s 0s 43898990e-09 1s 1s 43899670e-09 0s 0s 43906670e-09 0s 0s 43909230e-09 1s 1s 43909910e-09 0s 0s 43916950e-09 0s 0s 43919470e-09 1s 1s 43920150e-09 0s 0s 43927230e-09 0s 0s 43929710e-09 1s 1s 43930390e-09 0s 0s 43937510e-09 0s 0s 43939950e-09 1s 1s 43940630e-09 0s 0s 43947790e-09 0s 0s 43950190e-09 1s 1s 43950870e-09 0s 0s 43958070e-09 0s 0s 43960430e-09 1s 1s 43961110e-09 0s 0s 43968350e-09 0s 0s 43970670e-09 1s 1s 43971350e-09 0s 0s 43978630e-09 0s 0s 43980910e-09 1s 1s 43981590e-09 0s 0s 43988910e-09 0s 0s 43991150e-09 1s 1s 43991830e-09 0s 0s 43999190e-09 0s 0s 44001390e-09 1s 1s 44002070e-09 0s 0s 44009470e-09 0s 0s 44011630e-09 1s 1s 44012310e-09 0s 0s 44019750e-09 0s 0s 44021870e-09 1s 1s 44022550e-09 0s 0s 44030030e-09 0s 0s 44032110e-09 1s 1s 44032790e-09 0s 0s 44040310e-09 0s 0s 44042350e-09 1s 1s 44043030e-09 0s 0s 44050590e-09 0s 0s 44052590e-09 1s 1s 44053270e-09 0s 0s 44060870e-09 0s 0s 44062830e-09 1s 1s 44063510e-09 0s 0s 44071150e-09 0s 0s 44073070e-09 1s 1s 44073750e-09 0s 0s 44081430e-09 0s 0s 44083310e-09 1s 1s 44083990e-09 0s 0s 44091710e-09 0s 0s 44093550e-09 1s 1s 44094230e-09 0s 0s 44101990e-09 0s 0s 44103790e-09 1s 1s 44104470e-09 0s 0s 44112270e-09 0s 0s 44114030e-09 1s 1s 44114710e-09 0s 0s 44122550e-09 0s 0s 44124270e-09 1s 1s 44124950e-09 0s 0s 44132830e-09 0s 0s 44134510e-09 1s 1s 44135190e-09 0s 0s 44143110e-09 0s 0s 44144750e-09 1s 1s 44145430e-09 0s 0s 44153390e-09 0s 0s 44154990e-09 1s 1s 44155670e-09 0s 0s 44163670e-09 0s 0s 44165230e-09 1s 1s 44165910e-09 0s 0s 44173950e-09 0s 0s 44175470e-09 1s 1s 44176150e-09 0s 0s 44184230e-09 0s 0s 44185710e-09 1s 1s 44186390e-09 0s 0s 44194510e-09 0s 0s 44195950e-09 1s 1s 44196630e-09 0s 0s 44204790e-09 0s 0s 44206190e-09 1s 1s 44206870e-09 0s 0s 44215070e-09 0s 0s 44216430e-09 1s 1s 44217110e-09 0s 0s 44225350e-09 0s 0s 44226670e-09 1s 1s 44227350e-09 0s 0s 44235630e-09 0s 0s 44236910e-09 1s 1s 44237590e-09 0s 0s 44245910e-09 0s 0s 44247150e-09 1s 1s 44247830e-09 0s 0s 44256190e-09 0s 0s 44257390e-09 1s 1s 44258070e-09 0s 0s 44266470e-09 0s 0s 44267630e-09 1s 1s 44268310e-09 0s 0s 44276750e-09 0s 0s 44277870e-09 1s 1s 44278550e-09 0s 0s 44287030e-09 0s 0s 44288110e-09 1s 1s 44288790e-09 0s 0s 44297310e-09 0s 0s 44298350e-09 1s 1s 44299030e-09 0s 0s 44307590e-09 0s 0s 44308590e-09 1s 1s 44309270e-09 0s 0s 44317870e-09 0s 0s 44318830e-09 1s 1s 44319510e-09 0s 0s 44328150e-09 0s 0s 44329070e-09 1s 1s 44329750e-09 0s 0s 44338430e-09 0s 0s 44339310e-09 1s 1s 44339990e-09 0s 0s 44348710e-09 0s 0s 44349550e-09 1s 1s 44350230e-09 0s 0s 44358990e-09 0s 0s 44359790e-09 1s 1s 44360470e-09 0s 0s 44369270e-09 0s 0s 44370030e-09 1s 1s 44370710e-09 0s 0s 44379550e-09 0s 0s 44380270e-09 1s 1s 44380950e-09 0s 0s 44389830e-09 0s 0s 44390510e-09 1s 1s 44391190e-09 0s 0s 44400110e-09 0s 0s 44400750e-09 1s 1s 44401430e-09 0s 0s 44410390e-09 0s 0s 44410990e-09 1s 1s 44411670e-09 0s 0s 44420670e-09 0s 0s 44421230e-09 1s 1s 44421910e-09 0s 0s 44430950e-09 0s 0s 44431470e-09 1s 1s 44432150e-09 0s 0s 44441230e-09 0s 0s 44441710e-09 1s 1s 44442390e-09 0s 0s 44451510e-09 0s 0s 44451950e-09 1s 1s 44452630e-09 0s 0s 44461790e-09 0s 0s 44462190e-09 1s 1s 44462870e-09 0s 0s 44472070e-09 0s 0s 44472430e-09 1s 1s 44473110e-09 0s 0s 44482350e-09 0s 0s 44482670e-09 1s 1s 44483350e-09 0s 0s 44492630e-09 0s 0s 44492910e-09 1s 1s 44493590e-09 0s 0s 44502910e-09 0s 0s 44503150e-09 1s 1s 44503830e-09 0s 0s 44513190e-09 0s 0s 44513390e-09 1s 1s 44514070e-09 0s 0s 44523470e-09 0s 0s 44523630e-09 1s 1s 44524310e-09 0s 0s 44533750e-09 0s 0s 44533870e-09 1s 1s 44534550e-09 0s 0s 44544030e-09 0s 0s 44544110e-09 1s 1s 44544790e-09 0s 0s 44554310e-09 0s 0s 44554350e-09 1s 1s 44555030e-09 0s 0s 44564590e-09 1s 1s 44564630e-09 1s 1s 44565310e-09 0s 0s 44574830e-09 1s 1s 44574910e-09 1s 1s 44575550e-09 0s 0s 44585070e-09 1s 1s 44585190e-09 1s 1s 44585790e-09 0s 0s 44595310e-09 1s 1s 44595470e-09 1s 1s 44596030e-09 0s 0s 44605550e-09 1s 1s 44605750e-09 1s 1s 44606270e-09 0s 0s 44615790e-09 1s 1s 44616030e-09 1s 1s 44616510e-09 0s 0s 44626030e-09 1s 1s 44626310e-09 1s 1s 44626750e-09 0s 0s 44636270e-09 1s 1s 44636590e-09 1s 1s 44636990e-09 0s 0s 44646510e-09 1s 1s 44646870e-09 1s 1s 44647230e-09 0s 0s 44656750e-09 1s 1s 44657150e-09 1s 1s 44657470e-09 0s 0s 44666990e-09 1s 1s 44667430e-09 1s 1s 44667710e-09 0s 0s 44677230e-09 1s 1s 44677710e-09 1s 1s 44677950e-09 0s 0s 44687470e-09 1s 1s 44687990e-09 1s 1s 44688190e-09 0s 0s 44697710e-09 1s 1s 44698270e-09 1s 1s 44698430e-09 0s 0s 44707950e-09 1s 1s 44708550e-09 1s 1s 44708670e-09 0s 0s 44718190e-09 1s 1s 44718830e-09 1s 1s 44718910e-09 0s 0s 44728430e-09 1s 1s 44729110e-09 1s 1s 44729150e-09 0s 0s 44738670e-09 1s 1s 44739390e-09 0s 0s 44748910e-09 1s 1s 44749630e-09 0s 0s 44749670e-09 0s 0s 44759150e-09 1s 1s 44759870e-09 0s 0s 44759950e-09 0s 0s 44769390e-09 1s 1s 44770110e-09 0s 0s 44770230e-09 0s 0s 44779630e-09 1s 1s 44780350e-09 0s 0s 44780510e-09 0s 0s 44789870e-09 1s 1s 44790590e-09 0s 0s 44790790e-09 0s 0s 44800110e-09 1s 1s 44800830e-09 0s 0s 44801070e-09 0s 0s 44810350e-09 1s 1s 44811070e-09 0s 0s 44811350e-09 0s 0s 44820590e-09 1s 1s 44821310e-09 0s 0s 44821630e-09 0s 0s 44830830e-09 1s 1s 44831550e-09 0s 0s 44831910e-09 0s 0s 44841070e-09 1s 1s 44841790e-09 0s 0s 44842190e-09 0s 0s 44851310e-09 1s 1s 44852030e-09 0s 0s 44852470e-09 0s 0s 44861550e-09 1s 1s 44862270e-09 0s 0s 44862750e-09 0s 0s 44871790e-09 1s 1s 44872510e-09 0s 0s 44873030e-09 0s 0s 44882030e-09 1s 1s 44882750e-09 0s 0s 44883310e-09 0s 0s 44892270e-09 1s 1s 44892990e-09 0s 0s 44893590e-09 0s 0s 44902510e-09 1s 1s 44903230e-09 0s 0s 44903870e-09 0s 0s 44912750e-09 1s 1s 44913470e-09 0s 0s 44914150e-09 0s 0s 44922990e-09 1s 1s 44923710e-09 0s 0s 44924430e-09 0s 0s 44933230e-09 1s 1s 44933950e-09 0s 0s 44934710e-09 0s 0s 44943470e-09 1s 1s 44944190e-09 0s 0s 44944990e-09 0s 0s 44953710e-09 1s 1s 44954430e-09 0s 0s 44955270e-09 0s 0s 44963950e-09 1s 1s 44964670e-09 0s 0s 44965550e-09 0s 0s 44974190e-09 1s 1s 44974910e-09 0s 0s 44975830e-09 0s 0s 44984430e-09 1s 1s 44985150e-09 0s 0s 44986110e-09 0s 0s 44994670e-09 1s 1s 44995390e-09 0s 0s 44996390e-09 0s 0s 45004910e-09 1s 1s 45005630e-09 0s 0s 45006670e-09 0s 0s 45015150e-09 1s 1s 45015870e-09 0s 0s 45016950e-09 0s 0s 45025390e-09 1s 1s 45026110e-09 0s 0s 45027230e-09 0s 0s 45035630e-09 1s 1s 45036350e-09 0s 0s 45037510e-09 0s 0s 45045870e-09 1s 1s 45046590e-09 0s 0s 45047790e-09 0s 0s 45056110e-09 1s 1s 45056830e-09 0s 0s 45058070e-09 0s 0s 45066350e-09 1s 1s 45067070e-09 0s 0s 45068350e-09 0s 0s 45076590e-09 1s 1s 45077310e-09 0s 0s 45078630e-09 0s 0s 45086830e-09 1s 1s 45087550e-09 0s 0s 45088910e-09 0s 0s 45097070e-09 1s 1s 45097790e-09 0s 0s 45099190e-09 0s 0s 45107310e-09 1s 1s 45108030e-09 0s 0s 45109470e-09 0s 0s 45117550e-09 1s 1s 45118270e-09 0s 0s 45119750e-09 0s 0s 45127790e-09 1s 1s 45128510e-09 0s 0s 45130030e-09 0s 0s 45138030e-09 1s 1s 45138750e-09 0s 0s 45140310e-09 0s 0s 45148270e-09 1s 1s 45148990e-09 0s 0s 45150590e-09 0s 0s 45158510e-09 1s 1s 45159230e-09 0s 0s 45160870e-09 0s 0s 45168750e-09 1s 1s 45169470e-09 0s 0s 45171150e-09 0s 0s 45178990e-09 1s 1s 45179710e-09 0s 0s 45181430e-09 0s 0s 45189230e-09 1s 1s 45189950e-09 0s 0s 45191710e-09 0s 0s 45199470e-09 1s 1s 45200190e-09 0s 0s 45201990e-09 0s 0s 45209710e-09 1s 1s 45210430e-09 0s 0s 45212270e-09 0s 0s 45219950e-09 1s 1s 45220670e-09 0s 0s 45222550e-09 0s 0s 45230190e-09 1s 1s 45230910e-09 0s 0s 45232830e-09 0s 0s 45240430e-09 1s 1s 45241150e-09 0s 0s 45243110e-09 0s 0s 45250670e-09 1s 1s 45251390e-09 0s 0s 45253390e-09 0s 0s 45260910e-09 1s 1s 45261630e-09 0s 0s 45263670e-09 0s 0s 45271150e-09 1s 1s 45271870e-09 0s 0s 45273950e-09 0s 0s 45281390e-09 1s 1s 45282110e-09 0s 0s 45284230e-09 0s 0s 45291630e-09 1s 1s 45292350e-09 0s 0s 45294510e-09 0s 0s 45301870e-09 1s 1s 45302590e-09 0s 0s 45304790e-09 0s 0s 45312110e-09 1s 1s 45312830e-09 0s 0s 45315070e-09 0s 0s 45322350e-09 1s 1s 45323070e-09 0s 0s 45325350e-09 0s 0s 45332590e-09 1s 1s 45333310e-09 0s 0s 45335630e-09 0s 0s 45342830e-09 1s 1s 45343550e-09 0s 0s 45345910e-09 0s 0s 45353070e-09 1s 1s 45353790e-09 0s 0s 45356190e-09 0s 0s 45363310e-09 1s 1s 45364030e-09 0s 0s 45366470e-09 0s 0s 45373550e-09 1s 1s 45374270e-09 0s 0s 45376750e-09 0s 0s 45383790e-09 1s 1s 45384510e-09 0s 0s 45387030e-09 0s 0s 45394030e-09 1s 1s 45394750e-09 0s 0s 45397310e-09 0s 0s 45404270e-09 1s 1s 45404990e-09 0s 0s 45407590e-09 0s 0s 45414510e-09 1s 1s 45415230e-09 0s 0s 45417870e-09 0s 0s 45424750e-09 1s 1s 45425470e-09 0s 0s 45428150e-09 0s 0s 45434990e-09 1s 1s 45435710e-09 0s 0s 45438430e-09 0s 0s 45445230e-09 1s 1s 45445950e-09 0s 0s 45448710e-09 0s 0s 45455470e-09 1s 1s 45456190e-09 0s 0s 45458990e-09 0s 0s 45465710e-09 1s 1s 45466430e-09 0s 0s 45469270e-09 0s 0s 45475950e-09 1s 1s 45476670e-09 0s 0s 45479550e-09 0s 0s 45486190e-09 1s 1s 45486910e-09 0s 0s 45489830e-09 0s 0s 45496430e-09 1s 1s 45497150e-09 0s 0s 45500110e-09 0s 0s 45506670e-09 1s 1s 45507390e-09 0s 0s 45510390e-09 0s 0s 45516910e-09 1s 1s 45517630e-09 0s 0s 45520670e-09 0s 0s 45527150e-09 1s 1s 45527870e-09 0s 0s 45530950e-09 0s 0s 45537390e-09 1s 1s 45538110e-09 0s 0s 45541230e-09 0s 0s 45547630e-09 1s 1s 45548350e-09 0s 0s 45551510e-09 0s 0s 45557870e-09 1s 1s 45558590e-09 0s 0s 45561790e-09 0s 0s 45568110e-09 1s 1s 45568830e-09 0s 0s 45572070e-09 0s 0s 45578350e-09 1s 1s 45579070e-09 0s 0s 45582350e-09 0s 0s 45588590e-09 1s 1s 45589310e-09 0s 0s 45592630e-09 0s 0s 45598830e-09 1s 1s 45599550e-09 0s 0s 45602910e-09 0s 0s 45609070e-09 1s 1s 45609790e-09 0s 0s 45613190e-09 0s 0s 45619310e-09 1s 1s 45620030e-09 0s 0s 45623470e-09 0s 0s 45629550e-09 1s 1s 45630270e-09 0s 0s 45633750e-09 0s 0s 45639790e-09 1s 1s 45640510e-09 0s 0s 45644030e-09 0s 0s 45650030e-09 1s 1s 45650750e-09 0s 0s 45654310e-09 0s 0s 45660270e-09 1s 1s 45660990e-09 0s 0s 45664590e-09 0s 0s 45670510e-09 1s 1s 45671230e-09 0s 0s 45674870e-09 0s 0s 45680750e-09 1s 1s 45681470e-09 0s 0s 45685150e-09 0s 0s 45690990e-09 1s 1s 45691710e-09 0s 0s 45695430e-09 0s 0s 45701230e-09 1s 1s 45701950e-09 0s 0s 45705710e-09 0s 0s 45711470e-09 1s 1s 45712190e-09 0s 0s 45715990e-09 0s 0s 45721710e-09 1s 1s 45722430e-09 0s 0s 45726270e-09 0s 0s 45731950e-09 1s 1s 45732670e-09 0s 0s 45736550e-09 0s 0s 45742190e-09 1s 1s 45742910e-09 0s 0s 45746830e-09 0s 0s 45752430e-09 1s 1s 45753150e-09 0s 0s 45757110e-09 0s 0s 45762670e-09 1s 1s 45763390e-09 0s 0s 45767390e-09 0s 0s 45772910e-09 1s 1s 45773630e-09 0s 0s 45777670e-09 0s 0s 45783150e-09 1s 1s 45783870e-09 0s 0s 45787950e-09 0s 0s 45793390e-09 1s 1s 45794110e-09 0s 0s 45798230e-09 0s 0s 45803630e-09 1s 1s 45804350e-09 0s 0s 45808510e-09 0s 0s 45813870e-09 1s 1s 45814590e-09 0s 0s 45818790e-09 0s 0s 45824110e-09 1s 1s 45824830e-09 0s 0s 45829070e-09 0s 0s 45834350e-09 1s 1s 45835070e-09 0s 0s 45839350e-09 0s 0s 45844590e-09 1s 1s 45845310e-09 0s 0s 45849630e-09 0s 0s 45854830e-09 1s 1s 45855550e-09 0s 0s 45859910e-09 0s 0s 45865070e-09 1s 1s 45865790e-09 0s 0s 45870190e-09 0s 0s 45875310e-09 1s 1s 45876030e-09 0s 0s 45880470e-09 0s 0s 45885550e-09 1s 1s 45886270e-09 0s 0s 45890750e-09 0s 0s 45895790e-09 1s 1s 45896510e-09 0s 0s 45901030e-09 0s 0s 45906030e-09 1s 1s 45906750e-09 0s 0s 45911310e-09 0s 0s 45916270e-09 1s 1s 45916990e-09 0s 0s 45921590e-09 0s 0s 45926510e-09 1s 1s 45927230e-09 0s 0s 45931870e-09 0s 0s 45936750e-09 1s 1s 45937470e-09 0s 0s 45942150e-09 0s 0s 45946990e-09 1s 1s 45947710e-09 0s 0s 45952430e-09 0s 0s 45957230e-09 1s 1s 45957950e-09 0s 0s 45962710e-09 0s 0s 45967470e-09 1s 1s 45968190e-09 0s 0s 45972990e-09 0s 0s 45977710e-09 1s 1s 45978430e-09 0s 0s 45983270e-09 0s 0s 45987950e-09 1s 1s 45988670e-09 0s 0s 45993550e-09 0s 0s 45998190e-09 1s 1s 45998910e-09 0s 0s 46003830e-09 0s 0s 46008430e-09 1s 1s 46009150e-09 0s 0s 46014110e-09 0s 0s 46018670e-09 1s 1s 46019390e-09 0s 0s 46024390e-09 0s 0s 46028910e-09 1s 1s 46029630e-09 0s 0s 46034670e-09 0s 0s 46039150e-09 1s 1s 46039870e-09 0s 0s 46044950e-09 0s 0s 46049390e-09 1s 1s 46050110e-09 0s 0s 46055230e-09 0s 0s 46059630e-09 1s 1s 46060350e-09 0s 0s 46065510e-09 0s 0s 46069870e-09 1s 1s 46070590e-09 0s 0s 46075790e-09 0s 0s 46080110e-09 1s 1s 46080830e-09 0s 0s 46086070e-09 0s 0s 46090350e-09 1s 1s 46091070e-09 0s 0s 46096350e-09 0s 0s 46100590e-09 1s 1s 46101310e-09 0s 0s 46106630e-09 0s 0s 46110830e-09 1s 1s 46111550e-09 0s 0s 46116910e-09 0s 0s 46121070e-09 1s 1s 46121790e-09 0s 0s 46127190e-09 0s 0s 46131310e-09 1s 1s 46132030e-09 0s 0s 46137470e-09 0s 0s 46141550e-09 1s 1s 46142270e-09 0s 0s 46147750e-09 0s 0s 46151790e-09 1s 1s 46152510e-09 0s 0s 46158030e-09 0s 0s 46162030e-09 1s 1s 46162750e-09 0s 0s 46168310e-09 0s 0s 46172270e-09 1s 1s 46172990e-09 0s 0s 46178590e-09 0s 0s 46182510e-09 1s 1s 46183230e-09 0s 0s 46188870e-09 0s 0s 46192750e-09 1s 1s 46193470e-09 0s 0s 46199150e-09 0s 0s 46202990e-09 1s 1s 46203710e-09 0s 0s 46209430e-09 0s 0s 46213230e-09 1s 1s 46213950e-09 0s 0s 46219710e-09 0s 0s 46223470e-09 1s 1s 46224190e-09 0s 0s 46229990e-09 0s 0s 46233710e-09 1s 1s 46234430e-09 0s 0s 46240270e-09 0s 0s 46243950e-09 1s 1s 46244670e-09 0s 0s 46250550e-09 0s 0s 46254190e-09 1s 1s 46254910e-09 0s 0s 46260830e-09 0s 0s 46264430e-09 1s 1s 46265150e-09 0s 0s 46271110e-09 0s 0s 46274670e-09 1s 1s 46275390e-09 0s 0s 46281390e-09 0s 0s 46284910e-09 1s 1s 46285630e-09 0s 0s 46291670e-09 0s 0s 46295150e-09 1s 1s 46295870e-09 0s 0s 46301950e-09 0s 0s 46305390e-09 1s 1s 46306110e-09 0s 0s 46312230e-09 0s 0s 46315630e-09 1s 1s 46316350e-09 0s 0s 46322510e-09 0s 0s 46325870e-09 1s 1s 46326590e-09 0s 0s 46332790e-09 0s 0s 46336110e-09 1s 1s 46336830e-09 0s 0s 46343070e-09 0s 0s 46346350e-09 1s 1s 46347070e-09 0s 0s 46353350e-09 0s 0s 46356590e-09 1s 1s 46357310e-09 0s 0s 46363630e-09 0s 0s 46366830e-09 1s 1s 46367550e-09 0s 0s 46373910e-09 0s 0s 46377070e-09 1s 1s 46377790e-09 0s 0s 46384190e-09 0s 0s 46387310e-09 1s 1s 46388030e-09 0s 0s 46394470e-09 0s 0s 46397550e-09 1s 1s 46398270e-09 0s 0s 46404750e-09 0s 0s 46407790e-09 1s 1s 46408510e-09 0s 0s 46415030e-09 0s 0s 46418030e-09 1s 1s 46418750e-09 0s 0s 46425310e-09 0s 0s 46428270e-09 1s 1s 46428990e-09 0s 0s 46435590e-09 0s 0s 46438510e-09 1s 1s 46439230e-09 0s 0s 46445870e-09 0s 0s 46448750e-09 1s 1s 46449470e-09 0s 0s 46456150e-09 0s 0s 46458990e-09 1s 1s 46459710e-09 0s 0s 46466430e-09 0s 0s 46469230e-09 1s 1s 46469950e-09 0s 0s 46476710e-09 0s 0s 46479470e-09 1s 1s 46480190e-09 0s 0s 46486990e-09 0s 0s 46489710e-09 1s 1s 46490430e-09 0s 0s 46497270e-09 0s 0s 46499950e-09 1s 1s 46500670e-09 0s 0s 46507550e-09 0s 0s 46510190e-09 1s 1s 46510910e-09 0s 0s 46517830e-09 0s 0s 46520430e-09 1s 1s 46521150e-09 0s 0s 46528110e-09 0s 0s 46530670e-09 1s 1s 46531390e-09 0s 0s 46538390e-09 0s 0s 46540910e-09 1s 1s 46541630e-09 0s 0s 46548670e-09 0s 0s 46551150e-09 1s 1s 46551870e-09 0s 0s 46558950e-09 0s 0s 46561390e-09 1s 1s 46562110e-09 0s 0s 46569230e-09 0s 0s 46571630e-09 1s 1s 46572350e-09 0s 0s 46579510e-09 0s 0s 46581870e-09 1s 1s 46582590e-09 0s 0s 46589790e-09 0s 0s 46592110e-09 1s 1s 46592830e-09 0s 0s 46600070e-09 0s 0s 46602350e-09 1s 1s 46603070e-09 0s 0s 46610350e-09 0s 0s 46612590e-09 1s 1s 46613310e-09 0s 0s 46620630e-09 0s 0s 46622830e-09 1s 1s 46623550e-09 0s 0s 46630910e-09 0s 0s 46633070e-09 1s 1s 46633790e-09 0s 0s 46641190e-09 0s 0s 46643310e-09 1s 1s 46644030e-09 0s 0s 46651470e-09 0s 0s 46653550e-09 1s 1s 46654270e-09 0s 0s 46661750e-09 0s 0s 46663790e-09 1s 1s 46664510e-09 0s 0s 46672030e-09 0s 0s 46674030e-09 1s 1s 46674750e-09 0s 0s 46682310e-09 0s 0s 46684270e-09 1s 1s 46684990e-09 0s 0s 46692590e-09 0s 0s 46694510e-09 1s 1s 46695230e-09 0s 0s 46702870e-09 0s 0s 46704750e-09 1s 1s 46705470e-09 0s 0s 46713150e-09 0s 0s 46714990e-09 1s 1s 46715710e-09 0s 0s 46723430e-09 0s 0s 46725230e-09 1s 1s 46725950e-09 0s 0s 46733710e-09 0s 0s 46735470e-09 1s 1s 46736190e-09 0s 0s 46743990e-09 0s 0s 46745710e-09 1s 1s 46746430e-09 0s 0s 46754270e-09 0s 0s 46755950e-09 1s 1s 46756670e-09 0s 0s 46764550e-09 0s 0s 46766190e-09 1s 1s 46766910e-09 0s 0s 46774830e-09 0s 0s 46776430e-09 1s 1s 46777150e-09 0s 0s 46785110e-09 0s 0s 46786670e-09 1s 1s 46787390e-09 0s 0s 46795390e-09 0s 0s 46796910e-09 1s 1s 46797630e-09 0s 0s 46805670e-09 0s 0s 46807150e-09 1s 1s 46807870e-09 0s 0s 46815950e-09 0s 0s 46817390e-09 1s 1s 46818110e-09 0s 0s 46826230e-09 0s 0s 46827630e-09 1s 1s 46828350e-09 0s 0s 46836510e-09 0s 0s 46837870e-09 1s 1s 46838590e-09 0s 0s 46846790e-09 0s 0s 46848110e-09 1s 1s 46848830e-09 0s 0s 46857070e-09 0s 0s 46858350e-09 1s 1s 46859070e-09 0s 0s 46867350e-09 0s 0s 46868590e-09 1s 1s 46869310e-09 0s 0s 46877630e-09 0s 0s 46878830e-09 1s 1s 46879550e-09 0s 0s 46887910e-09 0s 0s 46889070e-09 1s 1s 46889790e-09 0s 0s 46898190e-09 0s 0s 46899310e-09 1s 1s 46900030e-09 0s 0s 46908470e-09 0s 0s 46909550e-09 1s 1s 46910270e-09 0s 0s 46918750e-09 0s 0s 46919790e-09 1s 1s 46920510e-09 0s 0s 46929030e-09 0s 0s 46930030e-09 1s 1s 46930750e-09 0s 0s 46939310e-09 0s 0s 46940270e-09 1s 1s 46940990e-09 0s 0s 46949590e-09 0s 0s 46950510e-09 1s 1s 46951230e-09 0s 0s 46959870e-09 0s 0s 46960750e-09 1s 1s 46961470e-09 0s 0s 46970150e-09 0s 0s 46970990e-09 1s 1s 46971710e-09 0s 0s 46980430e-09 0s 0s 46981230e-09 1s 1s 46981950e-09 0s 0s 46990710e-09 0s 0s 46991470e-09 1s 1s 46992190e-09 0s 0s 47000990e-09 0s 0s 47001710e-09 1s 1s 47002430e-09 0s 0s 47011270e-09 0s 0s 47011950e-09 1s 1s 47012670e-09 0s 0s 47021550e-09 0s 0s 47022190e-09 1s 1s 47022910e-09 0s 0s 47031830e-09 0s 0s 47032430e-09 1s 1s 47033150e-09 0s 0s 47042110e-09 0s 0s 47042670e-09 1s 1s 47043390e-09 0s 0s 47052390e-09 0s 0s 47052910e-09 1s 1s 47053630e-09 0s 0s 47062670e-09 0s 0s 47063150e-09 1s 1s 47063870e-09 0s 0s 47072950e-09 0s 0s 47073390e-09 1s 1s 47074110e-09 0s 0s 47083230e-09 0s 0s 47083630e-09 1s 1s 47084350e-09 0s 0s 47093510e-09 0s 0s 47093870e-09 1s 1s 47094590e-09 0s 0s 47103790e-09 0s 0s 47104110e-09 1s 1s 47104830e-09 0s 0s 47114070e-09 0s 0s 47114350e-09 1s 1s 47115070e-09 0s 0s 47124350e-09 0s 0s 47124590e-09 1s 1s 47125310e-09 0s 0s 47134630e-09 0s 0s 47134830e-09 1s 1s 47135550e-09 0s 0s 47144910e-09 0s 0s 47145070e-09 1s 1s 47145790e-09 0s 0s 47155190e-09 0s 0s 47155310e-09 1s 1s 47156030e-09 0s 0s 47165470e-09 0s 0s 47165550e-09 1s 1s 47166270e-09 0s 0s 47175750e-09 0s 0s 47175790e-09 1s 1s 47176510e-09 0s 0s 47186030e-09 1s 1s 47186070e-09 1s 1s 47186790e-09 0s 0s 47196270e-09 1s 1s 47196350e-09 1s 1s 47197030e-09 0s 0s 47206510e-09 1s 1s 47206630e-09 1s 1s 47207270e-09 0s 0s 47216750e-09 1s 1s 47216910e-09 1s 1s 47217510e-09 0s 0s 47226990e-09 1s 1s 47227190e-09 1s 1s 47227750e-09 0s 0s 47237230e-09 1s 1s 47237470e-09 1s 1s 47237990e-09 0s 0s 47247470e-09 1s 1s 47247750e-09 1s 1s 47248230e-09 0s 0s 47257710e-09 1s 1s 47258030e-09 1s 1s 47258470e-09 0s 0s 47267950e-09 1s 1s 47268310e-09 1s 1s 47268710e-09 0s 0s 47278190e-09 1s 1s 47278590e-09 1s 1s 47278950e-09 0s 0s 47288430e-09 1s 1s 47288870e-09 1s 1s 47289190e-09 0s 0s 47298670e-09 1s 1s 47299150e-09 1s 1s 47299430e-09 0s 0s 47308910e-09 1s 1s 47309430e-09 1s 1s 47309670e-09 0s 0s 47319150e-09 1s 1s 47319710e-09 1s 1s 47319910e-09 0s 0s 47329390e-09 1s 1s 47329990e-09 1s 1s 47330150e-09 0s 0s 47339630e-09 1s 1s 47340270e-09 1s 1s 47340390e-09 0s 0s 47349870e-09 1s 1s 47350550e-09 1s 1s 47350630e-09 0s 0s 47360110e-09 1s 1s 47360830e-09 1s 1s 47360870e-09 0s 0s 47370350e-09 1s 1s 47371110e-09 0s 0s 47380590e-09 1s 1s 47381350e-09 0s 0s 47381390e-09 0s 0s 47390830e-09 1s 1s 47391590e-09 0s 0s 47391670e-09 0s 0s 47401070e-09 1s 1s 47401830e-09 0s 0s 47401950e-09 0s 0s 47411310e-09 1s 1s 47412070e-09 0s 0s 47412230e-09 0s 0s 47421550e-09 1s 1s 47422310e-09 0s 0s 47422510e-09 0s 0s 47431790e-09 1s 1s 47432550e-09 0s 0s 47432790e-09 0s 0s 47442030e-09 1s 1s 47442790e-09 0s 0s 47443070e-09 0s 0s 47452270e-09 1s 1s 47453030e-09 0s 0s 47453350e-09 0s 0s 47462510e-09 1s 1s 47463270e-09 0s 0s 47463630e-09 0s 0s 47472750e-09 1s 1s 47473510e-09 0s 0s 47473910e-09 0s 0s 47482990e-09 1s 1s 47483750e-09 0s 0s 47484190e-09 0s 0s 47493230e-09 1s 1s 47493990e-09 0s 0s 47494470e-09 0s 0s 47503470e-09 1s 1s 47504230e-09 0s 0s 47504750e-09 0s 0s 47513710e-09 1s 1s 47514470e-09 0s 0s 47515030e-09 0s 0s 47523950e-09 1s 1s 47524710e-09 0s 0s 47525310e-09 0s 0s 47534190e-09 1s 1s 47534950e-09 0s 0s 47535590e-09 0s 0s 47544430e-09 1s 1s 47545190e-09 0s 0s 47545870e-09 0s 0s 47554670e-09 1s 1s 47555430e-09 0s 0s 47556150e-09 0s 0s 47564910e-09 1s 1s 47565670e-09 0s 0s 47566430e-09 0s 0s 47575150e-09 1s 1s 47575910e-09 0s 0s 47576710e-09 0s 0s 47585390e-09 1s 1s 47586150e-09 0s 0s 47586990e-09 0s 0s 47595630e-09 1s 1s 47596390e-09 0s 0s 47597270e-09 0s 0s 47605870e-09 1s 1s 47606630e-09 0s 0s 47607550e-09 0s 0s 47616110e-09 1s 1s 47616870e-09 0s 0s 47617830e-09 0s 0s 47626350e-09 1s 1s 47627110e-09 0s 0s 47628110e-09 0s 0s 47636590e-09 1s 1s 47637350e-09 0s 0s 47638390e-09 0s 0s 47646830e-09 1s 1s 47647590e-09 0s 0s 47648670e-09 0s 0s 47657070e-09 1s 1s 47657830e-09 0s 0s 47658950e-09 0s 0s 47667310e-09 1s 1s 47668070e-09 0s 0s 47669230e-09 0s 0s 47677550e-09 1s 1s 47678310e-09 0s 0s 47679510e-09 0s 0s 47687790e-09 1s 1s 47688550e-09 0s 0s 47689790e-09 0s 0s 47698030e-09 1s 1s 47698790e-09 0s 0s 47700070e-09 0s 0s 47708270e-09 1s 1s 47709030e-09 0s 0s 47710350e-09 0s 0s 47718510e-09 1s 1s 47719270e-09 0s 0s 47720630e-09 0s 0s 47728750e-09 1s 1s 47729510e-09 0s 0s 47730910e-09 0s 0s 47738990e-09 1s 1s 47739750e-09 0s 0s 47741190e-09 0s 0s 47749230e-09 1s 1s 47749990e-09 0s 0s 47751470e-09 0s 0s 47759470e-09 1s 1s 47760230e-09 0s 0s 47761750e-09 0s 0s 47769710e-09 1s 1s 47770470e-09 0s 0s 47772030e-09 0s 0s 47779950e-09 1s 1s 47780710e-09 0s 0s 47782310e-09 0s 0s 47790190e-09 1s 1s 47790950e-09 0s 0s 47792590e-09 0s 0s 47800430e-09 1s 1s 47801190e-09 0s 0s 47802870e-09 0s 0s 47810670e-09 1s 1s 47811430e-09 0s 0s 47813150e-09 0s 0s 47820910e-09 1s 1s 47821670e-09 0s 0s 47823430e-09 0s 0s 47831150e-09 1s 1s 47831910e-09 0s 0s 47833710e-09 0s 0s 47841390e-09 1s 1s 47842150e-09 0s 0s 47843990e-09 0s 0s 47851630e-09 1s 1s 47852390e-09 0s 0s 47854270e-09 0s 0s 47861870e-09 1s 1s 47862630e-09 0s 0s 47864550e-09 0s 0s 47872110e-09 1s 1s 47872870e-09 0s 0s 47874830e-09 0s 0s 47882350e-09 1s 1s 47883110e-09 0s 0s 47885110e-09 0s 0s 47892590e-09 1s 1s 47893350e-09 0s 0s 47895390e-09 0s 0s 47902830e-09 1s 1s 47903590e-09 0s 0s 47905670e-09 0s 0s 47913070e-09 1s 1s 47913830e-09 0s 0s 47915950e-09 0s 0s 47923310e-09 1s 1s 47924070e-09 0s 0s 47926230e-09 0s 0s 47933550e-09 1s 1s 47934310e-09 0s 0s 47936510e-09 0s 0s 47943790e-09 1s 1s 47944550e-09 0s 0s 47946790e-09 0s 0s 47954030e-09 1s 1s 47954790e-09 0s 0s 47957070e-09 0s 0s 47964270e-09 1s 1s 47965030e-09 0s 0s 47967350e-09 0s 0s 47974510e-09 1s 1s 47975270e-09 0s 0s 47977630e-09 0s 0s 47984750e-09 1s 1s 47985510e-09 0s 0s 47987910e-09 0s 0s 47994990e-09 1s 1s 47995750e-09 0s 0s 47998190e-09 0s 0s 48005230e-09 1s 1s 48005990e-09 0s 0s 48008470e-09 0s 0s 48015470e-09 1s 1s 48016230e-09 0s 0s 48018750e-09 0s 0s 48025710e-09 1s 1s 48026470e-09 0s 0s 48029030e-09 0s 0s 48035950e-09 1s 1s 48036710e-09 0s 0s 48039310e-09 0s 0s 48046190e-09 1s 1s 48046950e-09 0s 0s 48049590e-09 0s 0s 48056430e-09 1s 1s 48057190e-09 0s 0s 48059870e-09 0s 0s 48066670e-09 1s 1s 48067430e-09 0s 0s 48070150e-09 0s 0s 48076910e-09 1s 1s 48077670e-09 0s 0s 48080430e-09 0s 0s 48087150e-09 1s 1s 48087910e-09 0s 0s 48090710e-09 0s 0s 48097390e-09 1s 1s 48098150e-09 0s 0s 48100990e-09 0s 0s 48107630e-09 1s 1s 48108390e-09 0s 0s 48111270e-09 0s 0s 48117870e-09 1s 1s 48118630e-09 0s 0s 48121550e-09 0s 0s 48128110e-09 1s 1s 48128870e-09 0s 0s 48131830e-09 0s 0s 48138350e-09 1s 1s 48139110e-09 0s 0s 48142110e-09 0s 0s 48148590e-09 1s 1s 48149350e-09 0s 0s 48152390e-09 0s 0s 48158830e-09 1s 1s 48159590e-09 0s 0s 48162670e-09 0s 0s 48169070e-09 1s 1s 48169830e-09 0s 0s 48172950e-09 0s 0s 48179310e-09 1s 1s 48180070e-09 0s 0s 48183230e-09 0s 0s 48189550e-09 1s 1s 48190310e-09 0s 0s 48193510e-09 0s 0s 48199790e-09 1s 1s 48200550e-09 0s 0s 48203790e-09 0s 0s 48210030e-09 1s 1s 48210790e-09 0s 0s 48214070e-09 0s 0s 48220270e-09 1s 1s 48221030e-09 0s 0s 48224350e-09 0s 0s 48230510e-09 1s 1s 48231270e-09 0s 0s 48234630e-09 0s 0s 48240750e-09 1s 1s 48241510e-09 0s 0s 48244910e-09 0s 0s 48250990e-09 1s 1s 48251750e-09 0s 0s 48255190e-09 0s 0s 48261230e-09 1s 1s 48261990e-09 0s 0s 48265470e-09 0s 0s 48271470e-09 1s 1s 48272230e-09 0s 0s 48275750e-09 0s 0s 48281710e-09 1s 1s 48282470e-09 0s 0s 48286030e-09 0s 0s 48291950e-09 1s 1s 48292710e-09 0s 0s 48296310e-09 0s 0s 48302190e-09 1s 1s 48302950e-09 0s 0s 48306590e-09 0s 0s 48312430e-09 1s 1s 48313190e-09 0s 0s 48316870e-09 0s 0s 48322670e-09 1s 1s 48323430e-09 0s 0s 48327150e-09 0s 0s 48332910e-09 1s 1s 48333670e-09 0s 0s 48337430e-09 0s 0s 48343150e-09 1s 1s 48343910e-09 0s 0s 48347710e-09 0s 0s 48353390e-09 1s 1s 48354150e-09 0s 0s 48357990e-09 0s 0s 48363630e-09 1s 1s 48364390e-09 0s 0s 48368270e-09 0s 0s 48373870e-09 1s 1s 48374630e-09 0s 0s 48378550e-09 0s 0s 48384110e-09 1s 1s 48384870e-09 0s 0s 48388830e-09 0s 0s 48394350e-09 1s 1s 48395110e-09 0s 0s 48399110e-09 0s 0s 48404590e-09 1s 1s 48405350e-09 0s 0s 48409390e-09 0s 0s 48414830e-09 1s 1s 48415590e-09 0s 0s 48419670e-09 0s 0s 48425070e-09 1s 1s 48425830e-09 0s 0s 48429950e-09 0s 0s 48435310e-09 1s 1s 48436070e-09 0s 0s 48440230e-09 0s 0s 48445550e-09 1s 1s 48446310e-09 0s 0s 48450510e-09 0s 0s 48455790e-09 1s 1s 48456550e-09 0s 0s 48460790e-09 0s 0s 48466030e-09 1s 1s 48466790e-09 0s 0s 48471070e-09 0s 0s 48476270e-09 1s 1s 48477030e-09 0s 0s 48481350e-09 0s 0s 48486510e-09 1s 1s 48487270e-09 0s 0s 48491630e-09 0s 0s 48496750e-09 1s 1s 48497510e-09 0s 0s 48501910e-09 0s 0s 48506990e-09 1s 1s 48507750e-09 0s 0s 48512190e-09 0s 0s 48517230e-09 1s 1s 48517990e-09 0s 0s 48522470e-09 0s 0s 48527470e-09 1s 1s 48528230e-09 0s 0s 48532750e-09 0s 0s 48537710e-09 1s 1s 48538470e-09 0s 0s 48543030e-09 0s 0s 48547950e-09 1s 1s 48548710e-09 0s 0s 48553310e-09 0s 0s 48558190e-09 1s 1s 48558950e-09 0s 0s 48563590e-09 0s 0s 48568430e-09 1s 1s 48569190e-09 0s 0s 48573870e-09 0s 0s 48578670e-09 1s 1s 48579430e-09 0s 0s 48584150e-09 0s 0s 48588910e-09 1s 1s 48589670e-09 0s 0s 48594430e-09 0s 0s 48599150e-09 1s 1s 48599910e-09 0s 0s 48604710e-09 0s 0s 48609390e-09 1s 1s 48610150e-09 0s 0s 48614990e-09 0s 0s 48619630e-09 1s 1s 48620390e-09 0s 0s 48625270e-09 0s 0s 48629870e-09 1s 1s 48630630e-09 0s 0s 48635550e-09 0s 0s 48640110e-09 1s 1s 48640870e-09 0s 0s 48645830e-09 0s 0s 48650350e-09 1s 1s 48651110e-09 0s 0s 48656110e-09 0s 0s 48660590e-09 1s 1s 48661350e-09 0s 0s 48666390e-09 0s 0s 48670830e-09 1s 1s 48671590e-09 0s 0s 48676670e-09 0s 0s 48681070e-09 1s 1s 48681830e-09 0s 0s 48686950e-09 0s 0s 48691310e-09 1s 1s 48692070e-09 0s 0s 48697230e-09 0s 0s 48701550e-09 1s 1s 48702310e-09 0s 0s 48707510e-09 0s 0s 48711790e-09 1s 1s 48712550e-09 0s 0s 48717790e-09 0s 0s 48722030e-09 1s 1s 48722790e-09 0s 0s 48728070e-09 0s 0s 48732270e-09 1s 1s 48733030e-09 0s 0s 48738350e-09 0s 0s 48742510e-09 1s 1s 48743270e-09 0s 0s 48748630e-09 0s 0s 48752750e-09 1s 1s 48753510e-09 0s 0s 48758910e-09 0s 0s 48762990e-09 1s 1s 48763750e-09 0s 0s 48769190e-09 0s 0s 48773230e-09 1s 1s 48773990e-09 0s 0s 48779470e-09 0s 0s 48783470e-09 1s 1s 48784230e-09 0s 0s 48789750e-09 0s 0s 48793710e-09 1s 1s 48794470e-09 0s 0s 48800030e-09 0s 0s 48803950e-09 1s 1s 48804710e-09 0s 0s 48810310e-09 0s 0s 48814190e-09 1s 1s 48814950e-09 0s 0s 48820590e-09 0s 0s 48824430e-09 1s 1s 48825190e-09 0s 0s 48830870e-09 0s 0s 48834670e-09 1s 1s 48835430e-09 0s 0s 48841150e-09 0s 0s 48844910e-09 1s 1s 48845670e-09 0s 0s 48851430e-09 0s 0s 48855150e-09 1s 1s 48855910e-09 0s 0s 48861710e-09 0s 0s 48865390e-09 1s 1s 48866150e-09 0s 0s 48871990e-09 0s 0s 48875630e-09 1s 1s 48876390e-09 0s 0s 48882270e-09 0s 0s 48885870e-09 1s 1s 48886630e-09 0s 0s 48892550e-09 0s 0s 48896110e-09 1s 1s 48896870e-09 0s 0s 48902830e-09 0s 0s 48906350e-09 1s 1s 48907110e-09 0s 0s 48913110e-09 0s 0s 48916590e-09 1s 1s 48917350e-09 0s 0s 48923390e-09 0s 0s 48926830e-09 1s 1s 48927590e-09 0s 0s 48933670e-09 0s 0s 48937070e-09 1s 1s 48937830e-09 0s 0s 48943950e-09 0s 0s 48947310e-09 1s 1s 48948070e-09 0s 0s 48954230e-09 0s 0s 48957550e-09 1s 1s 48958310e-09 0s 0s 48964510e-09 0s 0s 48967790e-09 1s 1s 48968550e-09 0s 0s 48974790e-09 0s 0s 48978030e-09 1s 1s 48978790e-09 0s 0s 48985070e-09 0s 0s 48988270e-09 1s 1s 48989030e-09 0s 0s 48995350e-09 0s 0s 48998510e-09 1s 1s 48999270e-09 0s 0s 49005630e-09 0s 0s 49008750e-09 1s 1s 49009510e-09 0s 0s 49015910e-09 0s 0s 49018990e-09 1s 1s 49019750e-09 0s 0s 49026190e-09 0s 0s 49029230e-09 1s 1s 49029990e-09 0s 0s 49036470e-09 0s 0s 49039470e-09 1s 1s 49040230e-09 0s 0s 49046750e-09 0s 0s 49049710e-09 1s 1s 49050470e-09 0s 0s 49057030e-09 0s 0s 49059950e-09 1s 1s 49060710e-09 0s 0s 49067310e-09 0s 0s 49070190e-09 1s 1s 49070950e-09 0s 0s 49077590e-09 0s 0s 49080430e-09 1s 1s 49081190e-09 0s 0s 49087870e-09 0s 0s 49090670e-09 1s 1s 49091430e-09 0s 0s 49098150e-09 0s 0s 49100910e-09 1s 1s 49101670e-09 0s 0s 49108430e-09 0s 0s 49111150e-09 1s 1s 49111910e-09 0s 0s 49118710e-09 0s 0s 49121390e-09 1s 1s 49122150e-09 0s 0s 49128990e-09 0s 0s 49131630e-09 1s 1s 49132390e-09 0s 0s 49139270e-09 0s 0s 49141870e-09 1s 1s 49142630e-09 0s 0s 49149550e-09 0s 0s 49152110e-09 1s 1s 49152870e-09 0s 0s 49159830e-09 0s 0s 49162350e-09 1s 1s 49163110e-09 0s 0s 49170110e-09 0s 0s 49172590e-09 1s 1s 49173350e-09 0s 0s 49180390e-09 0s 0s 49182830e-09 1s 1s 49183590e-09 0s 0s 49190670e-09 0s 0s 49193070e-09 1s 1s 49193830e-09 0s 0s 49200950e-09 0s 0s 49203310e-09 1s 1s 49204070e-09 0s 0s 49211230e-09 0s 0s 49213550e-09 1s 1s 49214310e-09 0s 0s 49221510e-09 0s 0s 49223790e-09 1s 1s 49224550e-09 0s 0s 49231790e-09 0s 0s 49234030e-09 1s 1s 49234790e-09 0s 0s 49242070e-09 0s 0s 49244270e-09 1s 1s 49245030e-09 0s 0s 49252350e-09 0s 0s 49254510e-09 1s 1s 49255270e-09 0s 0s 49262630e-09 0s 0s 49264750e-09 1s 1s 49265510e-09 0s 0s 49272910e-09 0s 0s 49274990e-09 1s 1s 49275750e-09 0s 0s 49283190e-09 0s 0s 49285230e-09 1s 1s 49285990e-09 0s 0s 49293470e-09 0s 0s 49295470e-09 1s 1s 49296230e-09 0s 0s 49303750e-09 0s 0s 49305710e-09 1s 1s 49306470e-09 0s 0s 49314030e-09 0s 0s 49315950e-09 1s 1s 49316710e-09 0s 0s 49324310e-09 0s 0s 49326190e-09 1s 1s 49326950e-09 0s 0s 49334590e-09 0s 0s 49336430e-09 1s 1s 49337190e-09 0s 0s 49344870e-09 0s 0s 49346670e-09 1s 1s 49347430e-09 0s 0s 49355150e-09 0s 0s 49356910e-09 1s 1s 49357670e-09 0s 0s 49365430e-09 0s 0s 49367150e-09 1s 1s 49367910e-09 0s 0s 49375710e-09 0s 0s 49377390e-09 1s 1s 49378150e-09 0s 0s 49385990e-09 0s 0s 49387630e-09 1s 1s 49388390e-09 0s 0s 49396270e-09 0s 0s 49397870e-09 1s 1s 49398630e-09 0s 0s 49406550e-09 0s 0s 49408110e-09 1s 1s 49408870e-09 0s 0s 49416830e-09 0s 0s 49418350e-09 1s 1s 49419110e-09 0s 0s 49427110e-09 0s 0s 49428590e-09 1s 1s 49429350e-09 0s 0s 49437390e-09 0s 0s 49438830e-09 1s 1s 49439590e-09 0s 0s 49447670e-09 0s 0s 49449070e-09 1s 1s 49449830e-09 0s 0s 49457950e-09 0s 0s 49459310e-09 1s 1s 49460070e-09 0s 0s 49468230e-09 0s 0s 49469550e-09 1s 1s 49470310e-09 0s 0s 49478510e-09 0s 0s 49479790e-09 1s 1s 49480550e-09 0s 0s 49488790e-09 0s 0s 49490030e-09 1s 1s 49490790e-09 0s 0s 49499070e-09 0s 0s 49500270e-09 1s 1s 49501030e-09 0s 0s 49509350e-09 0s 0s 49510510e-09 1s 1s 49511270e-09 0s 0s 49519630e-09 0s 0s 49520750e-09 1s 1s 49521510e-09 0s 0s 49529910e-09 0s 0s 49530990e-09 1s 1s 49531750e-09 0s 0s 49540190e-09 0s 0s 49541230e-09 1s 1s 49541990e-09 0s 0s 49550470e-09 0s 0s 49551470e-09 1s 1s 49552230e-09 0s 0s 49560750e-09 0s 0s 49561710e-09 1s 1s 49562470e-09 0s 0s 49571030e-09 0s 0s 49571950e-09 1s 1s 49572710e-09 0s 0s 49581310e-09 0s 0s 49582190e-09 1s 1s 49582950e-09 0s 0s 49591590e-09 0s 0s 49592430e-09 1s 1s 49593190e-09 0s 0s 49601870e-09 0s 0s 49602670e-09 1s 1s 49603430e-09 0s 0s 49612150e-09 0s 0s 49612910e-09 1s 1s 49613670e-09 0s 0s 49622430e-09 0s 0s 49623150e-09 1s 1s 49623910e-09 0s 0s 49632710e-09 0s 0s 49633390e-09 1s 1s 49634150e-09 0s 0s 49642990e-09 0s 0s 49643630e-09 1s 1s 49644390e-09 0s 0s 49653270e-09 0s 0s 49653870e-09 1s 1s 49654630e-09 0s 0s 49663550e-09 0s 0s 49664110e-09 1s 1s 49664870e-09 0s 0s 49673830e-09 0s 0s 49674350e-09 1s 1s 49675110e-09 0s 0s 49684110e-09 0s 0s 49684590e-09 1s 1s 49685350e-09 0s 0s 49694390e-09 0s 0s 49694830e-09 1s 1s 49695590e-09 0s 0s 49704670e-09 0s 0s 49705070e-09 1s 1s 49705830e-09 0s 0s 49714950e-09 0s 0s 49715310e-09 1s 1s 49716070e-09 0s 0s 49725230e-09 0s 0s 49725550e-09 1s 1s 49726310e-09 0s 0s 49735510e-09 0s 0s 49735790e-09 1s 1s 49736550e-09 0s 0s 49745790e-09 0s 0s 49746030e-09 1s 1s 49746790e-09 0s 0s 49756070e-09 0s 0s 49756270e-09 1s 1s 49757030e-09 0s 0s 49766350e-09 0s 0s 49766510e-09 1s 1s 49767270e-09 0s 0s 49776630e-09 0s 0s 49776750e-09 1s 1s 49777510e-09 0s 0s 49786910e-09 0s 0s 49786990e-09 1s 1s 49787750e-09 0s 0s 49797190e-09 0s 0s 49797230e-09 1s 1s 49797990e-09 0s 0s 49807470e-09 1s 1s 49807510e-09 1s 1s 49808270e-09 0s 0s 49817710e-09 1s 1s 49817790e-09 1s 1s 49818510e-09 0s 0s 49827950e-09 1s 1s 49828070e-09 1s 1s 49828750e-09 0s 0s 49838190e-09 1s 1s 49838350e-09 1s 1s 49838990e-09 0s 0s 49848430e-09 1s 1s 49848630e-09 1s 1s 49849230e-09 0s 0s 49858670e-09 1s 1s 49858910e-09 1s 1s 49859470e-09 0s 0s 49868910e-09 1s 1s 49869190e-09 1s 1s 49869710e-09 0s 0s 49879150e-09 1s 1s 49879470e-09 1s 1s 49879950e-09 0s 0s 49889390e-09 1s 1s 49889750e-09 1s 1s 49890190e-09 0s 0s 49899630e-09 1s 1s 49900030e-09 1s 1s 49900430e-09 0s 0s 49909870e-09 1s 1s 49910310e-09 1s 1s 49910670e-09 0s 0s 49920110e-09 1s 1s 49920590e-09 1s 1s 49920910e-09 0s 0s 49930350e-09 1s 1s 49930870e-09 1s 1s 49931150e-09 0s 0s 49940590e-09 1s 1s 49941150e-09 1s 1s 49941390e-09 0s 0s 49950830e-09 1s 1s 49951430e-09 1s 1s 49951630e-09 0s 0s 49961070e-09 1s 1s 49961710e-09 1s 1s 49961870e-09 0s 0s 49971310e-09 1s 1s 49971990e-09 1s 1s 49972110e-09 0s 0s 49981550e-09 1s 1s 49982270e-09 1s 1s 49982350e-09 0s 0s 49991790e-09 1s 1s 49992550e-09 1s 1s 49992590e-09 0s 0s 50002030e-09 1s 1s 50002830e-09 0s 0s 50012270e-09 1s 1s 50013070e-09 0s 0s 50013110e-09 0s 0s 50022510e-09 1s 1s 50023310e-09 0s 0s 50023390e-09 0s 0s 50032750e-09 1s 1s 50033550e-09 0s 0s 50033670e-09 0s 0s 50042990e-09 1s 1s 50043790e-09 0s 0s 50043950e-09 0s 0s 50053230e-09 1s 1s 50054030e-09 0s 0s 50054230e-09 0s 0s 50063470e-09 1s 1s 50064270e-09 0s 0s 50064510e-09 0s 0s 50073710e-09 1s 1s 50074510e-09 0s 0s 50074790e-09 0s 0s 50083950e-09 1s 1s 50084750e-09 0s 0s 50085070e-09 0s 0s 50094190e-09 1s 1s 50094990e-09 0s 0s 50095350e-09 0s 0s 50104430e-09 1s 1s 50105230e-09 0s 0s 50105630e-09 0s 0s 50114670e-09 1s 1s 50115470e-09 0s 0s 50115910e-09 0s 0s 50124910e-09 1s 1s 50125710e-09 0s 0s 50126190e-09 0s 0s 50135150e-09 1s 1s 50135950e-09 0s 0s 50136470e-09 0s 0s 50145390e-09 1s 1s 50146190e-09 0s 0s 50146750e-09 0s 0s 50155630e-09 1s 1s 50156430e-09 0s 0s 50157030e-09 0s 0s 50165870e-09 1s 1s 50166670e-09 0s 0s 50167310e-09 0s 0s 50176110e-09 1s 1s 50176910e-09 0s 0s 50177590e-09 0s 0s 50186350e-09 1s 1s 50187150e-09 0s 0s 50187870e-09 0s 0s 50196590e-09 1s 1s 50197390e-09 0s 0s 50198150e-09 0s 0s 50206830e-09 1s 1s 50207630e-09 0s 0s 50208430e-09 0s 0s 50217070e-09 1s 1s 50217870e-09 0s 0s 50218710e-09 0s 0s 50227310e-09 1s 1s 50228110e-09 0s 0s 50228990e-09 0s 0s 50237550e-09 1s 1s 50238350e-09 0s 0s 50239270e-09 0s 0s 50247790e-09 1s 1s 50248590e-09 0s 0s 50249550e-09 0s 0s 50258030e-09 1s 1s 50258830e-09 0s 0s 50259830e-09 0s 0s 50268270e-09 1s 1s 50269070e-09 0s 0s 50270110e-09 0s 0s 50278510e-09 1s 1s 50279310e-09 0s 0s 50280390e-09 0s 0s 50288750e-09 1s 1s 50289550e-09 0s 0s 50290670e-09 0s 0s 50298990e-09 1s 1s 50299790e-09 0s 0s 50300950e-09 0s 0s 50309230e-09 1s 1s 50310030e-09 0s 0s 50311230e-09 0s 0s 50319470e-09 1s 1s 50320270e-09 0s 0s 50321510e-09 0s 0s 50329710e-09 1s 1s 50330510e-09 0s 0s 50331790e-09 0s 0s 50339950e-09 1s 1s 50340750e-09 0s 0s 50342070e-09 0s 0s 50350190e-09 1s 1s 50350990e-09 0s 0s 50352350e-09 0s 0s 50360430e-09 1s 1s 50361230e-09 0s 0s 50362630e-09 0s 0s 50370670e-09 1s 1s 50371470e-09 0s 0s 50372910e-09 0s 0s 50380910e-09 1s 1s 50381710e-09 0s 0s 50383190e-09 0s 0s 50391150e-09 1s 1s 50391950e-09 0s 0s 50393470e-09 0s 0s 50401390e-09 1s 1s 50402190e-09 0s 0s 50403750e-09 0s 0s 50411630e-09 1s 1s 50412430e-09 0s 0s 50414030e-09 0s 0s 50421870e-09 1s 1s 50422670e-09 0s 0s 50424310e-09 0s 0s 50432110e-09 1s 1s 50432910e-09 0s 0s 50434590e-09 0s 0s 50442350e-09 1s 1s 50443150e-09 0s 0s 50444870e-09 0s 0s 50452590e-09 1s 1s 50453390e-09 0s 0s 50455150e-09 0s 0s 50462830e-09 1s 1s 50463630e-09 0s 0s 50465430e-09 0s 0s 50473070e-09 1s 1s 50473870e-09 0s 0s 50475710e-09 0s 0s 50483310e-09 1s 1s 50484110e-09 0s 0s 50485990e-09 0s 0s 50493550e-09 1s 1s 50494350e-09 0s 0s 50496270e-09 0s 0s 50503790e-09 1s 1s 50504590e-09 0s 0s 50506550e-09 0s 0s 50514030e-09 1s 1s 50514830e-09 0s 0s 50516830e-09 0s 0s 50524270e-09 1s 1s 50525070e-09 0s 0s 50527110e-09 0s 0s 50534510e-09 1s 1s 50535310e-09 0s 0s 50537390e-09 0s 0s 50544750e-09 1s 1s 50545550e-09 0s 0s 50547670e-09 0s 0s 50554990e-09 1s 1s 50555790e-09 0s 0s 50557950e-09 0s 0s 50565230e-09 1s 1s 50566030e-09 0s 0s 50568230e-09 0s 0s 50575470e-09 1s 1s 50576270e-09 0s 0s 50578510e-09 0s 0s 50585710e-09 1s 1s 50586510e-09 0s 0s 50588790e-09 0s 0s 50595950e-09 1s 1s 50596750e-09 0s 0s 50599070e-09 0s 0s 50606190e-09 1s 1s 50606990e-09 0s 0s 50609350e-09 0s 0s 50616430e-09 1s 1s 50617230e-09 0s 0s 50619630e-09 0s 0s 50626670e-09 1s 1s 50627470e-09 0s 0s 50629910e-09 0s 0s 50636910e-09 1s 1s 50637710e-09 0s 0s 50640190e-09 0s 0s 50647150e-09 1s 1s 50647950e-09 0s 0s 50650470e-09 0s 0s 50657390e-09 1s 1s 50658190e-09 0s 0s 50660750e-09 0s 0s 50667630e-09 1s 1s 50668430e-09 0s 0s 50671030e-09 0s 0s 50677870e-09 1s 1s 50678670e-09 0s 0s 50681310e-09 0s 0s 50688110e-09 1s 1s 50688910e-09 0s 0s 50691590e-09 0s 0s 50698350e-09 1s 1s 50699150e-09 0s 0s 50701870e-09 0s 0s 50708590e-09 1s 1s 50709390e-09 0s 0s 50712150e-09 0s 0s 50718830e-09 1s 1s 50719630e-09 0s 0s 50722430e-09 0s 0s 50729070e-09 1s 1s 50729870e-09 0s 0s 50732710e-09 0s 0s 50739310e-09 1s 1s 50740110e-09 0s 0s 50742990e-09 0s 0s 50749550e-09 1s 1s 50750350e-09 0s 0s 50753270e-09 0s 0s 50759790e-09 1s 1s 50760590e-09 0s 0s 50763550e-09 0s 0s 50770030e-09 1s 1s 50770830e-09 0s 0s 50773830e-09 0s 0s 50780270e-09 1s 1s 50781070e-09 0s 0s 50784110e-09 0s 0s 50790510e-09 1s 1s 50791310e-09 0s 0s 50794390e-09 0s 0s 50800750e-09 1s 1s 50801550e-09 0s 0s 50804670e-09 0s 0s 50810990e-09 1s 1s 50811790e-09 0s 0s 50814950e-09 0s 0s 50821230e-09 1s 1s 50822030e-09 0s 0s 50825230e-09 0s 0s 50831470e-09 1s 1s 50832270e-09 0s 0s 50835510e-09 0s 0s 50841710e-09 1s 1s 50842510e-09 0s 0s 50845790e-09 0s 0s 50851950e-09 1s 1s 50852750e-09 0s 0s 50856070e-09 0s 0s 50862190e-09 1s 1s 50862990e-09 0s 0s 50866350e-09 0s 0s 50872430e-09 1s 1s 50873230e-09 0s 0s 50876630e-09 0s 0s 50882670e-09 1s 1s 50883470e-09 0s 0s 50886910e-09 0s 0s 50892910e-09 1s 1s 50893710e-09 0s 0s 50897190e-09 0s 0s 50903150e-09 1s 1s 50903950e-09 0s 0s 50907470e-09 0s 0s 50913390e-09 1s 1s 50914190e-09 0s 0s 50917750e-09 0s 0s 50923630e-09 1s 1s 50924430e-09 0s 0s 50928030e-09 0s 0s 50933870e-09 1s 1s 50934670e-09 0s 0s 50938310e-09 0s 0s 50944110e-09 1s 1s 50944910e-09 0s 0s 50948590e-09 0s 0s 50954350e-09 1s 1s 50955150e-09 0s 0s 50958870e-09 0s 0s 50964590e-09 1s 1s 50965390e-09 0s 0s 50969150e-09 0s 0s 50974830e-09 1s 1s 50975630e-09 0s 0s 50979430e-09 0s 0s 50985070e-09 1s 1s 50985870e-09 0s 0s 50989710e-09 0s 0s 50995310e-09 1s 1s 50996110e-09 0s 0s 50999990e-09 0s 0s 51005550e-09 1s 1s 51006350e-09 0s 0s 51010270e-09 0s 0s 51015790e-09 1s 1s 51016590e-09 0s 0s 51020550e-09 0s 0s 51026030e-09 1s 1s 51026830e-09 0s 0s 51030830e-09 0s 0s 51036270e-09 1s 1s 51037070e-09 0s 0s 51041110e-09 0s 0s 51046510e-09 1s 1s 51047310e-09 0s 0s 51051390e-09 0s 0s 51056750e-09 1s 1s 51057550e-09 0s 0s 51061670e-09 0s 0s 51066990e-09 1s 1s 51067790e-09 0s 0s 51071950e-09 0s 0s 51077230e-09 1s 1s 51078030e-09 0s 0s 51082230e-09 0s 0s 51087470e-09 1s 1s 51088270e-09 0s 0s 51092510e-09 0s 0s 51097710e-09 1s 1s 51098510e-09 0s 0s 51102790e-09 0s 0s 51107950e-09 1s 1s 51108750e-09 0s 0s 51113070e-09 0s 0s 51118190e-09 1s 1s 51118990e-09 0s 0s 51123350e-09 0s 0s 51128430e-09 1s 1s 51129230e-09 0s 0s 51133630e-09 0s 0s 51138670e-09 1s 1s 51139470e-09 0s 0s 51143910e-09 0s 0s 51148910e-09 1s 1s 51149710e-09 0s 0s 51154190e-09 0s 0s 51159150e-09 1s 1s 51159950e-09 0s 0s 51164470e-09 0s 0s 51169390e-09 1s 1s 51170190e-09 0s 0s 51174750e-09 0s 0s 51179630e-09 1s 1s 51180430e-09 0s 0s 51185030e-09 0s 0s 51189870e-09 1s 1s 51190670e-09 0s 0s 51195310e-09 0s 0s 51200110e-09 1s 1s 51200910e-09 0s 0s 51205590e-09 0s 0s 51210350e-09 1s 1s 51211150e-09 0s 0s 51215870e-09 0s 0s 51220590e-09 1s 1s 51221390e-09 0s 0s 51226150e-09 0s 0s 51230830e-09 1s 1s 51231630e-09 0s 0s 51236430e-09 0s 0s 51241070e-09 1s 1s 51241870e-09 0s 0s 51246710e-09 0s 0s 51251310e-09 1s 1s 51252110e-09 0s 0s 51256990e-09 0s 0s 51261550e-09 1s 1s 51262350e-09 0s 0s 51267270e-09 0s 0s 51271790e-09 1s 1s 51272590e-09 0s 0s 51277550e-09 0s 0s 51282030e-09 1s 1s 51282830e-09 0s 0s 51287830e-09 0s 0s 51292270e-09 1s 1s 51293070e-09 0s 0s 51298110e-09 0s 0s 51302510e-09 1s 1s 51303310e-09 0s 0s 51308390e-09 0s 0s 51312750e-09 1s 1s 51313550e-09 0s 0s 51318670e-09 0s 0s 51322990e-09 1s 1s 51323790e-09 0s 0s 51328950e-09 0s 0s 51333230e-09 1s 1s 51334030e-09 0s 0s 51339230e-09 0s 0s 51343470e-09 1s 1s 51344270e-09 0s 0s 51349510e-09 0s 0s 51353710e-09 1s 1s 51354510e-09 0s 0s 51359790e-09 0s 0s 51363950e-09 1s 1s 51364750e-09 0s 0s 51370070e-09 0s 0s 51374190e-09 1s 1s 51374990e-09 0s 0s 51380350e-09 0s 0s 51384430e-09 1s 1s 51385230e-09 0s 0s 51390630e-09 0s 0s 51394670e-09 1s 1s 51395470e-09 0s 0s 51400910e-09 0s 0s 51404910e-09 1s 1s 51405710e-09 0s 0s 51411190e-09 0s 0s 51415150e-09 1s 1s 51415950e-09 0s 0s 51421470e-09 0s 0s 51425390e-09 1s 1s 51426190e-09 0s 0s 51431750e-09 0s 0s 51435630e-09 1s 1s 51436430e-09 0s 0s 51442030e-09 0s 0s 51445870e-09 1s 1s 51446670e-09 0s 0s 51452310e-09 0s 0s 51456110e-09 1s 1s 51456910e-09 0s 0s 51462590e-09 0s 0s 51466350e-09 1s 1s 51467150e-09 0s 0s 51472870e-09 0s 0s 51476590e-09 1s 1s 51477390e-09 0s 0s 51483150e-09 0s 0s 51486830e-09 1s 1s 51487630e-09 0s 0s 51493430e-09 0s 0s 51497070e-09 1s 1s 51497870e-09 0s 0s 51503710e-09 0s 0s 51507310e-09 1s 1s 51508110e-09 0s 0s 51513990e-09 0s 0s 51517550e-09 1s 1s 51518350e-09 0s 0s 51524270e-09 0s 0s 51527790e-09 1s 1s 51528590e-09 0s 0s 51534550e-09 0s 0s 51538030e-09 1s 1s 51538830e-09 0s 0s 51544830e-09 0s 0s 51548270e-09 1s 1s 51549070e-09 0s 0s 51555110e-09 0s 0s 51558510e-09 1s 1s 51559310e-09 0s 0s 51565390e-09 0s 0s 51568750e-09 1s 1s 51569550e-09 0s 0s 51575670e-09 0s 0s 51578990e-09 1s 1s 51579790e-09 0s 0s 51585950e-09 0s 0s 51589230e-09 1s 1s 51590030e-09 0s 0s 51596230e-09 0s 0s 51599470e-09 1s 1s 51600270e-09 0s 0s 51606510e-09 0s 0s 51609710e-09 1s 1s 51610510e-09 0s 0s 51616790e-09 0s 0s 51619950e-09 1s 1s 51620750e-09 0s 0s 51627070e-09 0s 0s 51630190e-09 1s 1s 51630990e-09 0s 0s 51637350e-09 0s 0s 51640430e-09 1s 1s 51641230e-09 0s 0s 51647630e-09 0s 0s 51650670e-09 1s 1s 51651470e-09 0s 0s 51657910e-09 0s 0s 51660910e-09 1s 1s 51661710e-09 0s 0s 51668190e-09 0s 0s 51671150e-09 1s 1s 51671950e-09 0s 0s 51678470e-09 0s 0s 51681390e-09 1s 1s 51682190e-09 0s 0s 51688750e-09 0s 0s 51691630e-09 1s 1s 51692430e-09 0s 0s 51699030e-09 0s 0s 51701870e-09 1s 1s 51702670e-09 0s 0s 51709310e-09 0s 0s 51712110e-09 1s 1s 51712910e-09 0s 0s 51719590e-09 0s 0s 51722350e-09 1s 1s 51723150e-09 0s 0s 51729870e-09 0s 0s 51732590e-09 1s 1s 51733390e-09 0s 0s 51740150e-09 0s 0s 51742830e-09 1s 1s 51743630e-09 0s 0s 51750430e-09 0s 0s 51753070e-09 1s 1s 51753870e-09 0s 0s 51760710e-09 0s 0s 51763310e-09 1s 1s 51764110e-09 0s 0s 51770990e-09 0s 0s 51773550e-09 1s 1s 51774350e-09 0s 0s 51781270e-09 0s 0s 51783790e-09 1s 1s 51784590e-09 0s 0s 51791550e-09 0s 0s 51794030e-09 1s 1s 51794830e-09 0s 0s 51801830e-09 0s 0s 51804270e-09 1s 1s 51805070e-09 0s 0s 51812110e-09 0s 0s 51814510e-09 1s 1s 51815310e-09 0s 0s 51822390e-09 0s 0s 51824750e-09 1s 1s 51825550e-09 0s 0s 51832670e-09 0s 0s 51834990e-09 1s 1s 51835790e-09 0s 0s 51842950e-09 0s 0s 51845230e-09 1s 1s 51846030e-09 0s 0s 51853230e-09 0s 0s 51855470e-09 1s 1s 51856270e-09 0s 0s 51863510e-09 0s 0s 51865710e-09 1s 1s 51866510e-09 0s 0s 51873790e-09 0s 0s 51875950e-09 1s 1s 51876750e-09 0s 0s 51884070e-09 0s 0s 51886190e-09 1s 1s 51886990e-09 0s 0s 51894350e-09 0s 0s 51896430e-09 1s 1s 51897230e-09 0s 0s 51904630e-09 0s 0s 51906670e-09 1s 1s 51907470e-09 0s 0s 51914910e-09 0s 0s 51916910e-09 1s 1s 51917710e-09 0s 0s 51925190e-09 0s 0s 51927150e-09 1s 1s 51927950e-09 0s 0s 51935470e-09 0s 0s 51937390e-09 1s 1s 51938190e-09 0s 0s 51945750e-09 0s 0s 51947630e-09 1s 1s 51948430e-09 0s 0s 51956030e-09 0s 0s 51957870e-09 1s 1s 51958670e-09 0s 0s 51966310e-09 0s 0s 51968110e-09 1s 1s 51968910e-09 0s 0s 51976590e-09 0s 0s 51978350e-09 1s 1s 51979150e-09 0s 0s 51986870e-09 0s 0s 51988590e-09 1s 1s 51989390e-09 0s 0s 51997150e-09 0s 0s 51998830e-09 1s 1s 51999630e-09 0s 0s 52007430e-09 0s 0s 52009070e-09 1s 1s 52009870e-09 0s 0s 52017710e-09 0s 0s 52019310e-09 1s 1s 52020110e-09 0s 0s 52027990e-09 0s 0s 52029550e-09 1s 1s 52030350e-09 0s 0s 52038270e-09 0s 0s 52039790e-09 1s 1s 52040590e-09 0s 0s 52048550e-09 0s 0s 52050030e-09 1s 1s 52050830e-09 0s 0s 52058830e-09 0s 0s 52060270e-09 1s 1s 52061070e-09 0s 0s 52069110e-09 0s 0s 52070510e-09 1s 1s 52071310e-09 0s 0s 52079390e-09 0s 0s 52080750e-09 1s 1s 52081550e-09 0s 0s 52089670e-09 0s 0s 52090990e-09 1s 1s 52091790e-09 0s 0s 52099950e-09 0s 0s 52101230e-09 1s 1s 52102030e-09 0s 0s 52110230e-09 0s 0s 52111470e-09 1s 1s 52112270e-09 0s 0s 52120510e-09 0s 0s 52121710e-09 1s 1s 52122510e-09 0s 0s 52130790e-09 0s 0s 52131950e-09 1s 1s 52132750e-09 0s 0s 52141070e-09 0s 0s 52142190e-09 1s 1s 52142990e-09 0s 0s 52151350e-09 0s 0s 52152430e-09 1s 1s 52153230e-09 0s 0s 52161630e-09 0s 0s 52162670e-09 1s 1s 52163470e-09 0s 0s 52171910e-09 0s 0s 52172910e-09 1s 1s 52173710e-09 0s 0s 52182190e-09 0s 0s 52183150e-09 1s 1s 52183950e-09 0s 0s 52192470e-09 0s 0s 52193390e-09 1s 1s 52194190e-09 0s 0s 52202750e-09 0s 0s 52203630e-09 1s 1s 52204430e-09 0s 0s 52213030e-09 0s 0s 52213870e-09 1s 1s 52214670e-09 0s 0s 52223310e-09 0s 0s 52224110e-09 1s 1s 52224910e-09 0s 0s 52233590e-09 0s 0s 52234350e-09 1s 1s 52235150e-09 0s 0s 52243870e-09 0s 0s 52244590e-09 1s 1s 52245390e-09 0s 0s 52254150e-09 0s 0s 52254830e-09 1s 1s 52255630e-09 0s 0s 52264430e-09 0s 0s 52265070e-09 1s 1s 52265870e-09 0s 0s 52274710e-09 0s 0s 52275310e-09 1s 1s 52276110e-09 0s 0s 52284990e-09 0s 0s 52285550e-09 1s 1s 52286350e-09 0s 0s 52295270e-09 0s 0s 52295790e-09 1s 1s 52296590e-09 0s 0s 52305550e-09 0s 0s 52306030e-09 1s 1s 52306830e-09 0s 0s 52315830e-09 0s 0s 52316270e-09 1s 1s 52317070e-09 0s 0s 52326110e-09 0s 0s 52326510e-09 1s 1s 52327310e-09 0s 0s 52336390e-09 0s 0s 52336750e-09 1s 1s 52337550e-09 0s 0s 52346670e-09 0s 0s 52346990e-09 1s 1s 52347790e-09 0s 0s 52356950e-09 0s 0s 52357230e-09 1s 1s 52358030e-09 0s 0s 52367230e-09 0s 0s 52367470e-09 1s 1s 52368270e-09 0s 0s 52377510e-09 0s 0s 52377710e-09 1s 1s 52378510e-09 0s 0s 52387790e-09 0s 0s 52387950e-09 1s 1s 52388750e-09 0s 0s 52398070e-09 0s 0s 52398190e-09 1s 1s 52398990e-09 0s 0s 52408350e-09 0s 0s 52408430e-09 1s 1s 52409230e-09 0s 0s 52418630e-09 0s 0s 52418670e-09 1s 1s 52419470e-09 0s 0s 52428910e-09 1s 1s 52428950e-09 1s 1s 52429750e-09 0s 0s 52439150e-09 1s 1s 52439230e-09 1s 1s 52439990e-09 0s 0s 52449390e-09 1s 1s 52449510e-09 1s 1s 52450230e-09 0s 0s 52459630e-09 1s 1s 52459790e-09 1s 1s 52460470e-09 0s 0s 52469870e-09 1s 1s 52470070e-09 1s 1s 52470710e-09 0s 0s 52480110e-09 1s 1s 52480350e-09 1s 1s 52480950e-09 0s 0s 52490350e-09 1s 1s 52490630e-09 1s 1s 52491190e-09 0s 0s 52500590e-09 1s 1s 52500910e-09 1s 1s 52501430e-09 0s 0s 52510830e-09 1s 1s 52511190e-09 1s 1s 52511670e-09 0s 0s 52521070e-09 1s 1s 52521470e-09 1s 1s 52521910e-09 0s 0s 52531310e-09 1s 1s 52531750e-09 1s 1s 52532150e-09 0s 0s 52541550e-09 1s 1s 52542030e-09 1s 1s 52542390e-09 0s 0s 52551790e-09 1s 1s 52552310e-09 1s 1s 52552630e-09 0s 0s 52562030e-09 1s 1s 52562590e-09 1s 1s 52562870e-09 0s 0s 52572270e-09 1s 1s 52572870e-09 1s 1s 52573110e-09 0s 0s 52582510e-09 1s 1s 52583150e-09 1s 1s 52583350e-09 0s 0s 52592750e-09 1s 1s 52593430e-09 1s 1s 52593590e-09 0s 0s 52602990e-09 1s 1s 52603710e-09 1s 1s 52603830e-09 0s 0s 52613230e-09 1s 1s 52613990e-09 1s 1s 52614070e-09 0s 0s 52623470e-09 1s 1s 52624270e-09 1s 1s 52624310e-09 0s 0s 52633710e-09 1s 1s 52634550e-09 0s 0s 52643950e-09 1s 1s 52644790e-09 0s 0s 52644830e-09 0s 0s 52654190e-09 1s 1s 52655030e-09 0s 0s 52655110e-09 0s 0s 52664430e-09 1s 1s 52665270e-09 0s 0s 52665390e-09 0s 0s 52674670e-09 1s 1s 52675510e-09 0s 0s 52675670e-09 0s 0s 52684910e-09 1s 1s 52685750e-09 0s 0s 52685950e-09 0s 0s 52695150e-09 1s 1s 52695990e-09 0s 0s 52696230e-09 0s 0s 52705390e-09 1s 1s 52706230e-09 0s 0s 52706510e-09 0s 0s 52715630e-09 1s 1s 52716470e-09 0s 0s 52716790e-09 0s 0s 52725870e-09 1s 1s 52726710e-09 0s 0s 52727070e-09 0s 0s 52736110e-09 1s 1s 52736950e-09 0s 0s 52737350e-09 0s 0s 52746350e-09 1s 1s 52747190e-09 0s 0s 52747630e-09 0s 0s 52756590e-09 1s 1s 52757430e-09 0s 0s 52757910e-09 0s 0s 52766830e-09 1s 1s 52767670e-09 0s 0s 52768190e-09 0s 0s 52777070e-09 1s 1s 52777910e-09 0s 0s 52778470e-09 0s 0s 52787310e-09 1s 1s 52788150e-09 0s 0s 52788750e-09 0s 0s 52797550e-09 1s 1s 52798390e-09 0s 0s 52799030e-09 0s 0s 52807790e-09 1s 1s 52808630e-09 0s 0s 52809310e-09 0s 0s 52818030e-09 1s 1s 52818870e-09 0s 0s 52819590e-09 0s 0s 52828270e-09 1s 1s 52829110e-09 0s 0s 52829870e-09 0s 0s 52838510e-09 1s 1s 52839350e-09 0s 0s 52840150e-09 0s 0s 52848750e-09 1s 1s 52849590e-09 0s 0s 52850430e-09 0s 0s 52858990e-09 1s 1s 52859830e-09 0s 0s 52860710e-09 0s 0s 52869230e-09 1s 1s 52870070e-09 0s 0s 52870990e-09 0s 0s 52879470e-09 1s 1s 52880310e-09 0s 0s 52881270e-09 0s 0s 52889710e-09 1s 1s 52890550e-09 0s 0s 52891550e-09 0s 0s 52899950e-09 1s 1s 52900790e-09 0s 0s 52901830e-09 0s 0s 52910190e-09 1s 1s 52911030e-09 0s 0s 52912110e-09 0s 0s 52920430e-09 1s 1s 52921270e-09 0s 0s 52922390e-09 0s 0s 52930670e-09 1s 1s 52931510e-09 0s 0s 52932670e-09 0s 0s 52940910e-09 1s 1s 52941750e-09 0s 0s 52942950e-09 0s 0s 52951150e-09 1s 1s 52951990e-09 0s 0s 52953230e-09 0s 0s 52961390e-09 1s 1s 52962230e-09 0s 0s 52963510e-09 0s 0s 52971630e-09 1s 1s 52972470e-09 0s 0s 52973790e-09 0s 0s 52981870e-09 1s 1s 52982710e-09 0s 0s 52984070e-09 0s 0s 52992110e-09 1s 1s 52992950e-09 0s 0s 52994350e-09 0s 0s 53002350e-09 1s 1s 53003190e-09 0s 0s 53004630e-09 0s 0s 53012590e-09 1s 1s 53013430e-09 0s 0s 53014910e-09 0s 0s 53022830e-09 1s 1s 53023670e-09 0s 0s 53025190e-09 0s 0s 53033070e-09 1s 1s 53033910e-09 0s 0s 53035470e-09 0s 0s 53043310e-09 1s 1s 53044150e-09 0s 0s 53045750e-09 0s 0s 53053550e-09 1s 1s 53054390e-09 0s 0s 53056030e-09 0s 0s 53063790e-09 1s 1s 53064630e-09 0s 0s 53066310e-09 0s 0s 53074030e-09 1s 1s 53074870e-09 0s 0s 53076590e-09 0s 0s 53084270e-09 1s 1s 53085110e-09 0s 0s 53086870e-09 0s 0s 53094510e-09 1s 1s 53095350e-09 0s 0s 53097150e-09 0s 0s 53104750e-09 1s 1s 53105590e-09 0s 0s 53107430e-09 0s 0s 53114990e-09 1s 1s 53115830e-09 0s 0s 53117710e-09 0s 0s 53125230e-09 1s 1s 53126070e-09 0s 0s 53127990e-09 0s 0s 53135470e-09 1s 1s 53136310e-09 0s 0s 53138270e-09 0s 0s 53145710e-09 1s 1s 53146550e-09 0s 0s 53148550e-09 0s 0s 53155950e-09 1s 1s 53156790e-09 0s 0s 53158830e-09 0s 0s 53166190e-09 1s 1s 53167030e-09 0s 0s 53169110e-09 0s 0s 53176430e-09 1s 1s 53177270e-09 0s 0s 53179390e-09 0s 0s 53186670e-09 1s 1s 53187510e-09 0s 0s 53189670e-09 0s 0s 53196910e-09 1s 1s 53197750e-09 0s 0s 53199950e-09 0s 0s 53207150e-09 1s 1s 53207990e-09 0s 0s 53210230e-09 0s 0s 53217390e-09 1s 1s 53218230e-09 0s 0s 53220510e-09 0s 0s 53227630e-09 1s 1s 53228470e-09 0s 0s 53230790e-09 0s 0s 53237870e-09 1s 1s 53238710e-09 0s 0s 53241070e-09 0s 0s 53248110e-09 1s 1s 53248950e-09 0s 0s 53251350e-09 0s 0s 53258350e-09 1s 1s 53259190e-09 0s 0s 53261630e-09 0s 0s 53268590e-09 1s 1s 53269430e-09 0s 0s 53271910e-09 0s 0s 53278830e-09 1s 1s 53279670e-09 0s 0s 53282190e-09 0s 0s 53289070e-09 1s 1s 53289910e-09 0s 0s 53292470e-09 0s 0s 53299310e-09 1s 1s 53300150e-09 0s 0s 53302750e-09 0s 0s 53309550e-09 1s 1s 53310390e-09 0s 0s 53313030e-09 0s 0s 53319790e-09 1s 1s 53320630e-09 0s 0s 53323310e-09 0s 0s 53330030e-09 1s 1s 53330870e-09 0s 0s 53333590e-09 0s 0s 53340270e-09 1s 1s 53341110e-09 0s 0s 53343870e-09 0s 0s 53350510e-09 1s 1s 53351350e-09 0s 0s 53354150e-09 0s 0s 53360750e-09 1s 1s 53361590e-09 0s 0s 53364430e-09 0s 0s 53370990e-09 1s 1s 53371830e-09 0s 0s 53374710e-09 0s 0s 53381230e-09 1s 1s 53382070e-09 0s 0s 53384990e-09 0s 0s 53391470e-09 1s 1s 53392310e-09 0s 0s 53395270e-09 0s 0s 53401710e-09 1s 1s 53402550e-09 0s 0s 53405550e-09 0s 0s 53411950e-09 1s 1s 53412790e-09 0s 0s 53415830e-09 0s 0s 53422190e-09 1s 1s 53423030e-09 0s 0s 53426110e-09 0s 0s 53432430e-09 1s 1s 53433270e-09 0s 0s 53436390e-09 0s 0s 53442670e-09 1s 1s 53443510e-09 0s 0s 53446670e-09 0s 0s 53452910e-09 1s 1s 53453750e-09 0s 0s 53456950e-09 0s 0s 53463150e-09 1s 1s 53463990e-09 0s 0s 53467230e-09 0s 0s 53473390e-09 1s 1s 53474230e-09 0s 0s 53477510e-09 0s 0s 53483630e-09 1s 1s 53484470e-09 0s 0s 53487790e-09 0s 0s 53493870e-09 1s 1s 53494710e-09 0s 0s 53498070e-09 0s 0s 53504110e-09 1s 1s 53504950e-09 0s 0s 53508350e-09 0s 0s 53514350e-09 1s 1s 53515190e-09 0s 0s 53518630e-09 0s 0s 53524590e-09 1s 1s 53525430e-09 0s 0s 53528910e-09 0s 0s 53534830e-09 1s 1s 53535670e-09 0s 0s 53539190e-09 0s 0s 53545070e-09 1s 1s 53545910e-09 0s 0s 53549470e-09 0s 0s 53555310e-09 1s 1s 53556150e-09 0s 0s 53559750e-09 0s 0s 53565550e-09 1s 1s 53566390e-09 0s 0s 53570030e-09 0s 0s 53575790e-09 1s 1s 53576630e-09 0s 0s 53580310e-09 0s 0s 53586030e-09 1s 1s 53586870e-09 0s 0s 53590590e-09 0s 0s 53596270e-09 1s 1s 53597110e-09 0s 0s 53600870e-09 0s 0s 53606510e-09 1s 1s 53607350e-09 0s 0s 53611150e-09 0s 0s 53616750e-09 1s 1s 53617590e-09 0s 0s 53621430e-09 0s 0s 53626990e-09 1s 1s 53627830e-09 0s 0s 53631710e-09 0s 0s 53637230e-09 1s 1s 53638070e-09 0s 0s 53641990e-09 0s 0s 53647470e-09 1s 1s 53648310e-09 0s 0s 53652270e-09 0s 0s 53657710e-09 1s 1s 53658550e-09 0s 0s 53662550e-09 0s 0s 53667950e-09 1s 1s 53668790e-09 0s 0s 53672830e-09 0s 0s 53678190e-09 1s 1s 53679030e-09 0s 0s 53683110e-09 0s 0s 53688430e-09 1s 1s 53689270e-09 0s 0s 53693390e-09 0s 0s 53698670e-09 1s 1s 53699510e-09 0s 0s 53703670e-09 0s 0s 53708910e-09 1s 1s 53709750e-09 0s 0s 53713950e-09 0s 0s 53719150e-09 1s 1s 53719990e-09 0s 0s 53724230e-09 0s 0s 53729390e-09 1s 1s 53730230e-09 0s 0s 53734510e-09 0s 0s 53739630e-09 1s 1s 53740470e-09 0s 0s 53744790e-09 0s 0s 53749870e-09 1s 1s 53750710e-09 0s 0s 53755070e-09 0s 0s 53760110e-09 1s 1s 53760950e-09 0s 0s 53765350e-09 0s 0s 53770350e-09 1s 1s 53771190e-09 0s 0s 53775630e-09 0s 0s 53780590e-09 1s 1s 53781430e-09 0s 0s 53785910e-09 0s 0s 53790830e-09 1s 1s 53791670e-09 0s 0s 53796190e-09 0s 0s 53801070e-09 1s 1s 53801910e-09 0s 0s 53806470e-09 0s 0s 53811310e-09 1s 1s 53812150e-09 0s 0s 53816750e-09 0s 0s 53821550e-09 1s 1s 53822390e-09 0s 0s 53827030e-09 0s 0s 53831790e-09 1s 1s 53832630e-09 0s 0s 53837310e-09 0s 0s 53842030e-09 1s 1s 53842870e-09 0s 0s 53847590e-09 0s 0s 53852270e-09 1s 1s 53853110e-09 0s 0s 53857870e-09 0s 0s 53862510e-09 1s 1s 53863350e-09 0s 0s 53868150e-09 0s 0s 53872750e-09 1s 1s 53873590e-09 0s 0s 53878430e-09 0s 0s 53882990e-09 1s 1s 53883830e-09 0s 0s 53888710e-09 0s 0s 53893230e-09 1s 1s 53894070e-09 0s 0s 53898990e-09 0s 0s 53903470e-09 1s 1s 53904310e-09 0s 0s 53909270e-09 0s 0s 53913710e-09 1s 1s 53914550e-09 0s 0s 53919550e-09 0s 0s 53923950e-09 1s 1s 53924790e-09 0s 0s 53929830e-09 0s 0s 53934190e-09 1s 1s 53935030e-09 0s 0s 53940110e-09 0s 0s 53944430e-09 1s 1s 53945270e-09 0s 0s 53950390e-09 0s 0s 53954670e-09 1s 1s 53955510e-09 0s 0s 53960670e-09 0s 0s 53964910e-09 1s 1s 53965750e-09 0s 0s 53970950e-09 0s 0s 53975150e-09 1s 1s 53975990e-09 0s 0s 53981230e-09 0s 0s 53985390e-09 1s 1s 53986230e-09 0s 0s 53991510e-09 0s 0s 53995630e-09 1s 1s 53996470e-09 0s 0s 54001790e-09 0s 0s 54005870e-09 1s 1s 54006710e-09 0s 0s 54012070e-09 0s 0s 54016110e-09 1s 1s 54016950e-09 0s 0s 54022350e-09 0s 0s 54026350e-09 1s 1s 54027190e-09 0s 0s 54032630e-09 0s 0s 54036590e-09 1s 1s 54037430e-09 0s 0s 54042910e-09 0s 0s 54046830e-09 1s 1s 54047670e-09 0s 0s 54053190e-09 0s 0s 54057070e-09 1s 1s 54057910e-09 0s 0s 54063470e-09 0s 0s 54067310e-09 1s 1s 54068150e-09 0s 0s 54073750e-09 0s 0s 54077550e-09 1s 1s 54078390e-09 0s 0s 54084030e-09 0s 0s 54087790e-09 1s 1s 54088630e-09 0s 0s 54094310e-09 0s 0s 54098030e-09 1s 1s 54098870e-09 0s 0s 54104590e-09 0s 0s 54108270e-09 1s 1s 54109110e-09 0s 0s 54114870e-09 0s 0s 54118510e-09 1s 1s 54119350e-09 0s 0s 54125150e-09 0s 0s 54128750e-09 1s 1s 54129590e-09 0s 0s 54135430e-09 0s 0s 54138990e-09 1s 1s 54139830e-09 0s 0s 54145710e-09 0s 0s 54149230e-09 1s 1s 54150070e-09 0s 0s 54155990e-09 0s 0s 54159470e-09 1s 1s 54160310e-09 0s 0s 54166270e-09 0s 0s 54169710e-09 1s 1s 54170550e-09 0s 0s 54176550e-09 0s 0s 54179950e-09 1s 1s 54180790e-09 0s 0s 54186830e-09 0s 0s 54190190e-09 1s 1s 54191030e-09 0s 0s 54197110e-09 0s 0s 54200430e-09 1s 1s 54201270e-09 0s 0s 54207390e-09 0s 0s 54210670e-09 1s 1s 54211510e-09 0s 0s 54217670e-09 0s 0s 54220910e-09 1s 1s 54221750e-09 0s 0s 54227950e-09 0s 0s 54231150e-09 1s 1s 54231990e-09 0s 0s 54238230e-09 0s 0s 54241390e-09 1s 1s 54242230e-09 0s 0s 54248510e-09 0s 0s 54251630e-09 1s 1s 54252470e-09 0s 0s 54258790e-09 0s 0s 54261870e-09 1s 1s 54262710e-09 0s 0s 54269070e-09 0s 0s 54272110e-09 1s 1s 54272950e-09 0s 0s 54279350e-09 0s 0s 54282350e-09 1s 1s 54283190e-09 0s 0s 54289630e-09 0s 0s 54292590e-09 1s 1s 54293430e-09 0s 0s 54299910e-09 0s 0s 54302830e-09 1s 1s 54303670e-09 0s 0s 54310190e-09 0s 0s 54313070e-09 1s 1s 54313910e-09 0s 0s 54320470e-09 0s 0s 54323310e-09 1s 1s 54324150e-09 0s 0s 54330750e-09 0s 0s 54333550e-09 1s 1s 54334390e-09 0s 0s 54341030e-09 0s 0s 54343790e-09 1s 1s 54344630e-09 0s 0s 54351310e-09 0s 0s 54354030e-09 1s 1s 54354870e-09 0s 0s 54361590e-09 0s 0s 54364270e-09 1s 1s 54365110e-09 0s 0s 54371870e-09 0s 0s 54374510e-09 1s 1s 54375350e-09 0s 0s 54382150e-09 0s 0s 54384750e-09 1s 1s 54385590e-09 0s 0s 54392430e-09 0s 0s 54394990e-09 1s 1s 54395830e-09 0s 0s 54402710e-09 0s 0s 54405230e-09 1s 1s 54406070e-09 0s 0s 54412990e-09 0s 0s 54415470e-09 1s 1s 54416310e-09 0s 0s 54423270e-09 0s 0s 54425710e-09 1s 1s 54426550e-09 0s 0s 54433550e-09 0s 0s 54435950e-09 1s 1s 54436790e-09 0s 0s 54443830e-09 0s 0s 54446190e-09 1s 1s 54447030e-09 0s 0s 54454110e-09 0s 0s 54456430e-09 1s 1s 54457270e-09 0s 0s 54464390e-09 0s 0s 54466670e-09 1s 1s 54467510e-09 0s 0s 54474670e-09 0s 0s 54476910e-09 1s 1s 54477750e-09 0s 0s 54484950e-09 0s 0s 54487150e-09 1s 1s 54487990e-09 0s 0s 54495230e-09 0s 0s 54497390e-09 1s 1s 54498230e-09 0s 0s 54505510e-09 0s 0s 54507630e-09 1s 1s 54508470e-09 0s 0s 54515790e-09 0s 0s 54517870e-09 1s 1s 54518710e-09 0s 0s 54526070e-09 0s 0s 54528110e-09 1s 1s 54528950e-09 0s 0s 54536350e-09 0s 0s 54538350e-09 1s 1s 54539190e-09 0s 0s 54546630e-09 0s 0s 54548590e-09 1s 1s 54549430e-09 0s 0s 54556910e-09 0s 0s 54558830e-09 1s 1s 54559670e-09 0s 0s 54567190e-09 0s 0s 54569070e-09 1s 1s 54569910e-09 0s 0s 54577470e-09 0s 0s 54579310e-09 1s 1s 54580150e-09 0s 0s 54587750e-09 0s 0s 54589550e-09 1s 1s 54590390e-09 0s 0s 54598030e-09 0s 0s 54599790e-09 1s 1s 54600630e-09 0s 0s 54608310e-09 0s 0s 54610030e-09 1s 1s 54610870e-09 0s 0s 54618590e-09 0s 0s 54620270e-09 1s 1s 54621110e-09 0s 0s 54628870e-09 0s 0s 54630510e-09 1s 1s 54631350e-09 0s 0s 54639150e-09 0s 0s 54640750e-09 1s 1s 54641590e-09 0s 0s 54649430e-09 0s 0s 54650990e-09 1s 1s 54651830e-09 0s 0s 54659710e-09 0s 0s 54661230e-09 1s 1s 54662070e-09 0s 0s 54669990e-09 0s 0s 54671470e-09 1s 1s 54672310e-09 0s 0s 54680270e-09 0s 0s 54681710e-09 1s 1s 54682550e-09 0s 0s 54690550e-09 0s 0s 54691950e-09 1s 1s 54692790e-09 0s 0s 54700830e-09 0s 0s 54702190e-09 1s 1s 54703030e-09 0s 0s 54711110e-09 0s 0s 54712430e-09 1s 1s 54713270e-09 0s 0s 54721390e-09 0s 0s 54722670e-09 1s 1s 54723510e-09 0s 0s 54731670e-09 0s 0s 54732910e-09 1s 1s 54733750e-09 0s 0s 54741950e-09 0s 0s 54743150e-09 1s 1s 54743990e-09 0s 0s 54752230e-09 0s 0s 54753390e-09 1s 1s 54754230e-09 0s 0s 54762510e-09 0s 0s 54763630e-09 1s 1s 54764470e-09 0s 0s 54772790e-09 0s 0s 54773870e-09 1s 1s 54774710e-09 0s 0s 54783070e-09 0s 0s 54784110e-09 1s 1s 54784950e-09 0s 0s 54793350e-09 0s 0s 54794350e-09 1s 1s 54795190e-09 0s 0s 54803630e-09 0s 0s 54804590e-09 1s 1s 54805430e-09 0s 0s 54813910e-09 0s 0s 54814830e-09 1s 1s 54815670e-09 0s 0s 54824190e-09 0s 0s 54825070e-09 1s 1s 54825910e-09 0s 0s 54834470e-09 0s 0s 54835310e-09 1s 1s 54836150e-09 0s 0s 54844750e-09 0s 0s 54845550e-09 1s 1s 54846390e-09 0s 0s 54855030e-09 0s 0s 54855790e-09 1s 1s 54856630e-09 0s 0s 54865310e-09 0s 0s 54866030e-09 1s 1s 54866870e-09 0s 0s 54875590e-09 0s 0s 54876270e-09 1s 1s 54877110e-09 0s 0s 54885870e-09 0s 0s 54886510e-09 1s 1s 54887350e-09 0s 0s 54896150e-09 0s 0s 54896750e-09 1s 1s 54897590e-09 0s 0s 54906430e-09 0s 0s 54906990e-09 1s 1s 54907830e-09 0s 0s 54916710e-09 0s 0s 54917230e-09 1s 1s 54918070e-09 0s 0s 54926990e-09 0s 0s 54927470e-09 1s 1s 54928310e-09 0s 0s 54937270e-09 0s 0s 54937710e-09 1s 1s 54938550e-09 0s 0s 54947550e-09 0s 0s 54947950e-09 1s 1s 54948790e-09 0s 0s 54957830e-09 0s 0s 54958190e-09 1s 1s 54959030e-09 0s 0s 54968110e-09 0s 0s 54968430e-09 1s 1s 54969270e-09 0s 0s 54978390e-09 0s 0s 54978670e-09 1s 1s 54979510e-09 0s 0s 54988670e-09 0s 0s 54988910e-09 1s 1s 54989750e-09 0s 0s 54998950e-09 0s 0s 54999150e-09 1s 1s 54999990e-09 0s 0s 55009230e-09 0s 0s 55009390e-09 1s 1s 55010230e-09 0s 0s 55019510e-09 0s 0s 55019630e-09 1s 1s 55020470e-09 0s 0s 55029790e-09 0s 0s 55029870e-09 1s 1s 55030710e-09 0s 0s 55040070e-09 0s 0s 55040110e-09 1s 1s 55040950e-09 0s 0s 55050350e-09 1s 1s 55050390e-09 1s 1s 55051230e-09 0s 0s 55060590e-09 1s 1s 55060670e-09 1s 1s 55061470e-09 0s 0s 55070830e-09 1s 1s 55070950e-09 1s 1s 55071710e-09 0s 0s 55081070e-09 1s 1s 55081230e-09 1s 1s 55081950e-09 0s 0s 55091310e-09 1s 1s 55091510e-09 1s 1s 55092190e-09 0s 0s 55101550e-09 1s 1s 55101790e-09 1s 1s 55102430e-09 0s 0s 55111790e-09 1s 1s 55112070e-09 1s 1s 55112670e-09 0s 0s 55122030e-09 1s 1s 55122350e-09 1s 1s 55122910e-09 0s 0s 55132270e-09 1s 1s 55132630e-09 1s 1s 55133150e-09 0s 0s 55142510e-09 1s 1s 55142910e-09 1s 1s 55143390e-09 0s 0s 55152750e-09 1s 1s 55153190e-09 1s 1s 55153630e-09 0s 0s 55162990e-09 1s 1s 55163470e-09 1s 1s 55163870e-09 0s 0s 55173230e-09 1s 1s 55173750e-09 1s 1s 55174110e-09 0s 0s 55183470e-09 1s 1s 55184030e-09 1s 1s 55184350e-09 0s 0s 55193710e-09 1s 1s 55194310e-09 1s 1s 55194590e-09 0s 0s 55203950e-09 1s 1s 55204590e-09 1s 1s 55204830e-09 0s 0s 55214190e-09 1s 1s 55214870e-09 1s 1s 55215070e-09 0s 0s 55224430e-09 1s 1s 55225150e-09 1s 1s 55225310e-09 0s 0s 55234670e-09 1s 1s 55235430e-09 1s 1s 55235550e-09 0s 0s 55244910e-09 1s 1s 55245710e-09 1s 1s 55245790e-09 0s 0s 55255150e-09 1s 1s 55255990e-09 1s 1s 55256030e-09 0s 0s 55265390e-09 1s 1s 55266270e-09 0s 0s 55275630e-09 1s 1s 55276510e-09 0s 0s 55276550e-09 0s 0s 55285870e-09 1s 1s 55286750e-09 0s 0s 55286830e-09 0s 0s 55296110e-09 1s 1s 55296990e-09 0s 0s 55297110e-09 0s 0s 55306350e-09 1s 1s 55307230e-09 0s 0s 55307390e-09 0s 0s 55316590e-09 1s 1s 55317470e-09 0s 0s 55317670e-09 0s 0s 55326830e-09 1s 1s 55327710e-09 0s 0s 55327950e-09 0s 0s 55337070e-09 1s 1s 55337950e-09 0s 0s 55338230e-09 0s 0s 55347310e-09 1s 1s 55348190e-09 0s 0s 55348510e-09 0s 0s 55357550e-09 1s 1s 55358430e-09 0s 0s 55358790e-09 0s 0s 55367790e-09 1s 1s 55368670e-09 0s 0s 55369070e-09 0s 0s 55378030e-09 1s 1s 55378910e-09 0s 0s 55379350e-09 0s 0s 55388270e-09 1s 1s 55389150e-09 0s 0s 55389630e-09 0s 0s 55398510e-09 1s 1s 55399390e-09 0s 0s 55399910e-09 0s 0s 55408750e-09 1s 1s 55409630e-09 0s 0s 55410190e-09 0s 0s 55418990e-09 1s 1s 55419870e-09 0s 0s 55420470e-09 0s 0s 55429230e-09 1s 1s 55430110e-09 0s 0s 55430750e-09 0s 0s 55439470e-09 1s 1s 55440350e-09 0s 0s 55441030e-09 0s 0s 55449710e-09 1s 1s 55450590e-09 0s 0s 55451310e-09 0s 0s 55459950e-09 1s 1s 55460830e-09 0s 0s 55461590e-09 0s 0s 55470190e-09 1s 1s 55471070e-09 0s 0s 55471870e-09 0s 0s 55480430e-09 1s 1s 55481310e-09 0s 0s 55482150e-09 0s 0s 55490670e-09 1s 1s 55491550e-09 0s 0s 55492430e-09 0s 0s 55500910e-09 1s 1s 55501790e-09 0s 0s 55502710e-09 0s 0s 55511150e-09 1s 1s 55512030e-09 0s 0s 55512990e-09 0s 0s 55521390e-09 1s 1s 55522270e-09 0s 0s 55523270e-09 0s 0s 55531630e-09 1s 1s 55532510e-09 0s 0s 55533550e-09 0s 0s 55541870e-09 1s 1s 55542750e-09 0s 0s 55543830e-09 0s 0s 55552110e-09 1s 1s 55552990e-09 0s 0s 55554110e-09 0s 0s 55562350e-09 1s 1s 55563230e-09 0s 0s 55564390e-09 0s 0s 55572590e-09 1s 1s 55573470e-09 0s 0s 55574670e-09 0s 0s 55582830e-09 1s 1s 55583710e-09 0s 0s 55584950e-09 0s 0s 55593070e-09 1s 1s 55593950e-09 0s 0s 55595230e-09 0s 0s 55603310e-09 1s 1s 55604190e-09 0s 0s 55605510e-09 0s 0s 55613550e-09 1s 1s 55614430e-09 0s 0s 55615790e-09 0s 0s 55623790e-09 1s 1s 55624670e-09 0s 0s 55626070e-09 0s 0s 55634030e-09 1s 1s 55634910e-09 0s 0s 55636350e-09 0s 0s 55644270e-09 1s 1s 55645150e-09 0s 0s 55646630e-09 0s 0s 55654510e-09 1s 1s 55655390e-09 0s 0s 55656910e-09 0s 0s 55664750e-09 1s 1s 55665630e-09 0s 0s 55667190e-09 0s 0s 55674990e-09 1s 1s 55675870e-09 0s 0s 55677470e-09 0s 0s 55685230e-09 1s 1s 55686110e-09 0s 0s 55687750e-09 0s 0s 55695470e-09 1s 1s 55696350e-09 0s 0s 55698030e-09 0s 0s 55705710e-09 1s 1s 55706590e-09 0s 0s 55708310e-09 0s 0s 55715950e-09 1s 1s 55716830e-09 0s 0s 55718590e-09 0s 0s 55726190e-09 1s 1s 55727070e-09 0s 0s 55728870e-09 0s 0s 55736430e-09 1s 1s 55737310e-09 0s 0s 55739150e-09 0s 0s 55746670e-09 1s 1s 55747550e-09 0s 0s 55749430e-09 0s 0s 55756910e-09 1s 1s 55757790e-09 0s 0s 55759710e-09 0s 0s 55767150e-09 1s 1s 55768030e-09 0s 0s 55769990e-09 0s 0s 55777390e-09 1s 1s 55778270e-09 0s 0s 55780270e-09 0s 0s 55787630e-09 1s 1s 55788510e-09 0s 0s 55790550e-09 0s 0s 55797870e-09 1s 1s 55798750e-09 0s 0s 55800830e-09 0s 0s 55808110e-09 1s 1s 55808990e-09 0s 0s 55811110e-09 0s 0s 55818350e-09 1s 1s 55819230e-09 0s 0s 55821390e-09 0s 0s 55828590e-09 1s 1s 55829470e-09 0s 0s 55831670e-09 0s 0s 55838830e-09 1s 1s 55839710e-09 0s 0s 55841950e-09 0s 0s 55849070e-09 1s 1s 55849950e-09 0s 0s 55852230e-09 0s 0s 55859310e-09 1s 1s 55860190e-09 0s 0s 55862510e-09 0s 0s 55869550e-09 1s 1s 55870430e-09 0s 0s 55872790e-09 0s 0s 55879790e-09 1s 1s 55880670e-09 0s 0s 55883070e-09 0s 0s 55890030e-09 1s 1s 55890910e-09 0s 0s 55893350e-09 0s 0s 55900270e-09 1s 1s 55901150e-09 0s 0s 55903630e-09 0s 0s 55910510e-09 1s 1s 55911390e-09 0s 0s 55913910e-09 0s 0s 55920750e-09 1s 1s 55921630e-09 0s 0s 55924190e-09 0s 0s 55930990e-09 1s 1s 55931870e-09 0s 0s 55934470e-09 0s 0s 55941230e-09 1s 1s 55942110e-09 0s 0s 55944750e-09 0s 0s 55951470e-09 1s 1s 55952350e-09 0s 0s 55955030e-09 0s 0s 55961710e-09 1s 1s 55962590e-09 0s 0s 55965310e-09 0s 0s 55971950e-09 1s 1s 55972830e-09 0s 0s 55975590e-09 0s 0s 55982190e-09 1s 1s 55983070e-09 0s 0s 55985870e-09 0s 0s 55992430e-09 1s 1s 55993310e-09 0s 0s 55996150e-09 0s 0s 56002670e-09 1s 1s 56003550e-09 0s 0s 56006430e-09 0s 0s 56012910e-09 1s 1s 56013790e-09 0s 0s 56016710e-09 0s 0s 56023150e-09 1s 1s 56024030e-09 0s 0s 56026990e-09 0s 0s 56033390e-09 1s 1s 56034270e-09 0s 0s 56037270e-09 0s 0s 56043630e-09 1s 1s 56044510e-09 0s 0s 56047550e-09 0s 0s 56053870e-09 1s 1s 56054750e-09 0s 0s 56057830e-09 0s 0s 56064110e-09 1s 1s 56064990e-09 0s 0s 56068110e-09 0s 0s 56074350e-09 1s 1s 56075230e-09 0s 0s 56078390e-09 0s 0s 56084590e-09 1s 1s 56085470e-09 0s 0s 56088670e-09 0s 0s 56094830e-09 1s 1s 56095710e-09 0s 0s 56098950e-09 0s 0s 56105070e-09 1s 1s 56105950e-09 0s 0s 56109230e-09 0s 0s 56115310e-09 1s 1s 56116190e-09 0s 0s 56119510e-09 0s 0s 56125550e-09 1s 1s 56126430e-09 0s 0s 56129790e-09 0s 0s 56135790e-09 1s 1s 56136670e-09 0s 0s 56140070e-09 0s 0s 56146030e-09 1s 1s 56146910e-09 0s 0s 56150350e-09 0s 0s 56156270e-09 1s 1s 56157150e-09 0s 0s 56160630e-09 0s 0s 56166510e-09 1s 1s 56167390e-09 0s 0s 56170910e-09 0s 0s 56176750e-09 1s 1s 56177630e-09 0s 0s 56181190e-09 0s 0s 56186990e-09 1s 1s 56187870e-09 0s 0s 56191470e-09 0s 0s 56197230e-09 1s 1s 56198110e-09 0s 0s 56201750e-09 0s 0s 56207470e-09 1s 1s 56208350e-09 0s 0s 56212030e-09 0s 0s 56217710e-09 1s 1s 56218590e-09 0s 0s 56222310e-09 0s 0s 56227950e-09 1s 1s 56228830e-09 0s 0s 56232590e-09 0s 0s 56238190e-09 1s 1s 56239070e-09 0s 0s 56242870e-09 0s 0s 56248430e-09 1s 1s 56249310e-09 0s 0s 56253150e-09 0s 0s 56258670e-09 1s 1s 56259550e-09 0s 0s 56263430e-09 0s 0s 56268910e-09 1s 1s 56269790e-09 0s 0s 56273710e-09 0s 0s 56279150e-09 1s 1s 56280030e-09 0s 0s 56283990e-09 0s 0s 56289390e-09 1s 1s 56290270e-09 0s 0s 56294270e-09 0s 0s 56299630e-09 1s 1s 56300510e-09 0s 0s 56304550e-09 0s 0s 56309870e-09 1s 1s 56310750e-09 0s 0s 56314830e-09 0s 0s 56320110e-09 1s 1s 56320990e-09 0s 0s 56325110e-09 0s 0s 56330350e-09 1s 1s 56331230e-09 0s 0s 56335390e-09 0s 0s 56340590e-09 1s 1s 56341470e-09 0s 0s 56345670e-09 0s 0s 56350830e-09 1s 1s 56351710e-09 0s 0s 56355950e-09 0s 0s 56361070e-09 1s 1s 56361950e-09 0s 0s 56366230e-09 0s 0s 56371310e-09 1s 1s 56372190e-09 0s 0s 56376510e-09 0s 0s 56381550e-09 1s 1s 56382430e-09 0s 0s 56386790e-09 0s 0s 56391790e-09 1s 1s 56392670e-09 0s 0s 56397070e-09 0s 0s 56402030e-09 1s 1s 56402910e-09 0s 0s 56407350e-09 0s 0s 56412270e-09 1s 1s 56413150e-09 0s 0s 56417630e-09 0s 0s 56422510e-09 1s 1s 56423390e-09 0s 0s 56427910e-09 0s 0s 56432750e-09 1s 1s 56433630e-09 0s 0s 56438190e-09 0s 0s 56442990e-09 1s 1s 56443870e-09 0s 0s 56448470e-09 0s 0s 56453230e-09 1s 1s 56454110e-09 0s 0s 56458750e-09 0s 0s 56463470e-09 1s 1s 56464350e-09 0s 0s 56469030e-09 0s 0s 56473710e-09 1s 1s 56474590e-09 0s 0s 56479310e-09 0s 0s 56483950e-09 1s 1s 56484830e-09 0s 0s 56489590e-09 0s 0s 56494190e-09 1s 1s 56495070e-09 0s 0s 56499870e-09 0s 0s 56504430e-09 1s 1s 56505310e-09 0s 0s 56510150e-09 0s 0s 56514670e-09 1s 1s 56515550e-09 0s 0s 56520430e-09 0s 0s 56524910e-09 1s 1s 56525790e-09 0s 0s 56530710e-09 0s 0s 56535150e-09 1s 1s 56536030e-09 0s 0s 56540990e-09 0s 0s 56545390e-09 1s 1s 56546270e-09 0s 0s 56551270e-09 0s 0s 56555630e-09 1s 1s 56556510e-09 0s 0s 56561550e-09 0s 0s 56565870e-09 1s 1s 56566750e-09 0s 0s 56571830e-09 0s 0s 56576110e-09 1s 1s 56576990e-09 0s 0s 56582110e-09 0s 0s 56586350e-09 1s 1s 56587230e-09 0s 0s 56592390e-09 0s 0s 56596590e-09 1s 1s 56597470e-09 0s 0s 56602670e-09 0s 0s 56606830e-09 1s 1s 56607710e-09 0s 0s 56612950e-09 0s 0s 56617070e-09 1s 1s 56617950e-09 0s 0s 56623230e-09 0s 0s 56627310e-09 1s 1s 56628190e-09 0s 0s 56633510e-09 0s 0s 56637550e-09 1s 1s 56638430e-09 0s 0s 56643790e-09 0s 0s 56647790e-09 1s 1s 56648670e-09 0s 0s 56654070e-09 0s 0s 56658030e-09 1s 1s 56658910e-09 0s 0s 56664350e-09 0s 0s 56668270e-09 1s 1s 56669150e-09 0s 0s 56674630e-09 0s 0s 56678510e-09 1s 1s 56679390e-09 0s 0s 56684910e-09 0s 0s 56688750e-09 1s 1s 56689630e-09 0s 0s 56695190e-09 0s 0s 56698990e-09 1s 1s 56699870e-09 0s 0s 56705470e-09 0s 0s 56709230e-09 1s 1s 56710110e-09 0s 0s 56715750e-09 0s 0s 56719470e-09 1s 1s 56720350e-09 0s 0s 56726030e-09 0s 0s 56729710e-09 1s 1s 56730590e-09 0s 0s 56736310e-09 0s 0s 56739950e-09 1s 1s 56740830e-09 0s 0s 56746590e-09 0s 0s 56750190e-09 1s 1s 56751070e-09 0s 0s 56756870e-09 0s 0s 56760430e-09 1s 1s 56761310e-09 0s 0s 56767150e-09 0s 0s 56770670e-09 1s 1s 56771550e-09 0s 0s 56777430e-09 0s 0s 56780910e-09 1s 1s 56781790e-09 0s 0s 56787710e-09 0s 0s 56791150e-09 1s 1s 56792030e-09 0s 0s 56797990e-09 0s 0s 56801390e-09 1s 1s 56802270e-09 0s 0s 56808270e-09 0s 0s 56811630e-09 1s 1s 56812510e-09 0s 0s 56818550e-09 0s 0s 56821870e-09 1s 1s 56822750e-09 0s 0s 56828830e-09 0s 0s 56832110e-09 1s 1s 56832990e-09 0s 0s 56839110e-09 0s 0s 56842350e-09 1s 1s 56843230e-09 0s 0s 56849390e-09 0s 0s 56852590e-09 1s 1s 56853470e-09 0s 0s 56859670e-09 0s 0s 56862830e-09 1s 1s 56863710e-09 0s 0s 56869950e-09 0s 0s 56873070e-09 1s 1s 56873950e-09 0s 0s 56880230e-09 0s 0s 56883310e-09 1s 1s 56884190e-09 0s 0s 56890510e-09 0s 0s 56893550e-09 1s 1s 56894430e-09 0s 0s 56900790e-09 0s 0s 56903790e-09 1s 1s 56904670e-09 0s 0s 56911070e-09 0s 0s 56914030e-09 1s 1s 56914910e-09 0s 0s 56921350e-09 0s 0s 56924270e-09 1s 1s 56925150e-09 0s 0s 56931630e-09 0s 0s 56934510e-09 1s 1s 56935390e-09 0s 0s 56941910e-09 0s 0s 56944750e-09 1s 1s 56945630e-09 0s 0s 56952190e-09 0s 0s 56954990e-09 1s 1s 56955870e-09 0s 0s 56962470e-09 0s 0s 56965230e-09 1s 1s 56966110e-09 0s 0s 56972750e-09 0s 0s 56975470e-09 1s 1s 56976350e-09 0s 0s 56983030e-09 0s 0s 56985710e-09 1s 1s 56986590e-09 0s 0s 56993310e-09 0s 0s 56995950e-09 1s 1s 56996830e-09 0s 0s 57003590e-09 0s 0s 57006190e-09 1s 1s 57007070e-09 0s 0s 57013870e-09 0s 0s 57016430e-09 1s 1s 57017310e-09 0s 0s 57024150e-09 0s 0s 57026670e-09 1s 1s 57027550e-09 0s 0s 57034430e-09 0s 0s 57036910e-09 1s 1s 57037790e-09 0s 0s 57044710e-09 0s 0s 57047150e-09 1s 1s 57048030e-09 0s 0s 57054990e-09 0s 0s 57057390e-09 1s 1s 57058270e-09 0s 0s 57065270e-09 0s 0s 57067630e-09 1s 1s 57068510e-09 0s 0s 57075550e-09 0s 0s 57077870e-09 1s 1s 57078750e-09 0s 0s 57085830e-09 0s 0s 57088110e-09 1s 1s 57088990e-09 0s 0s 57096110e-09 0s 0s 57098350e-09 1s 1s 57099230e-09 0s 0s 57106390e-09 0s 0s 57108590e-09 1s 1s 57109470e-09 0s 0s 57116670e-09 0s 0s 57118830e-09 1s 1s 57119710e-09 0s 0s 57126950e-09 0s 0s 57129070e-09 1s 1s 57129950e-09 0s 0s 57137230e-09 0s 0s 57139310e-09 1s 1s 57140190e-09 0s 0s 57147510e-09 0s 0s 57149550e-09 1s 1s 57150430e-09 0s 0s 57157790e-09 0s 0s 57159790e-09 1s 1s 57160670e-09 0s 0s 57168070e-09 0s 0s 57170030e-09 1s 1s 57170910e-09 0s 0s 57178350e-09 0s 0s 57180270e-09 1s 1s 57181150e-09 0s 0s 57188630e-09 0s 0s 57190510e-09 1s 1s 57191390e-09 0s 0s 57198910e-09 0s 0s 57200750e-09 1s 1s 57201630e-09 0s 0s 57209190e-09 0s 0s 57210990e-09 1s 1s 57211870e-09 0s 0s 57219470e-09 0s 0s 57221230e-09 1s 1s 57222110e-09 0s 0s 57229750e-09 0s 0s 57231470e-09 1s 1s 57232350e-09 0s 0s 57240030e-09 0s 0s 57241710e-09 1s 1s 57242590e-09 0s 0s 57250310e-09 0s 0s 57251950e-09 1s 1s 57252830e-09 0s 0s 57260590e-09 0s 0s 57262190e-09 1s 1s 57263070e-09 0s 0s 57270870e-09 0s 0s 57272430e-09 1s 1s 57273310e-09 0s 0s 57281150e-09 0s 0s 57282670e-09 1s 1s 57283550e-09 0s 0s 57291430e-09 0s 0s 57292910e-09 1s 1s 57293790e-09 0s 0s 57301710e-09 0s 0s 57303150e-09 1s 1s 57304030e-09 0s 0s 57311990e-09 0s 0s 57313390e-09 1s 1s 57314270e-09 0s 0s 57322270e-09 0s 0s 57323630e-09 1s 1s 57324510e-09 0s 0s 57332550e-09 0s 0s 57333870e-09 1s 1s 57334750e-09 0s 0s 57342830e-09 0s 0s 57344110e-09 1s 1s 57344990e-09 0s 0s 57353110e-09 0s 0s 57354350e-09 1s 1s 57355230e-09 0s 0s 57363390e-09 0s 0s 57364590e-09 1s 1s 57365470e-09 0s 0s 57373670e-09 0s 0s 57374830e-09 1s 1s 57375710e-09 0s 0s 57383950e-09 0s 0s 57385070e-09 1s 1s 57385950e-09 0s 0s 57394230e-09 0s 0s 57395310e-09 1s 1s 57396190e-09 0s 0s 57404510e-09 0s 0s 57405550e-09 1s 1s 57406430e-09 0s 0s 57414790e-09 0s 0s 57415790e-09 1s 1s 57416670e-09 0s 0s 57425070e-09 0s 0s 57426030e-09 1s 1s 57426910e-09 0s 0s 57435350e-09 0s 0s 57436270e-09 1s 1s 57437150e-09 0s 0s 57445630e-09 0s 0s 57446510e-09 1s 1s 57447390e-09 0s 0s 57455910e-09 0s 0s 57456750e-09 1s 1s 57457630e-09 0s 0s 57466190e-09 0s 0s 57466990e-09 1s 1s 57467870e-09 0s 0s 57476470e-09 0s 0s 57477230e-09 1s 1s 57478110e-09 0s 0s 57486750e-09 0s 0s 57487470e-09 1s 1s 57488350e-09 0s 0s 57497030e-09 0s 0s 57497710e-09 1s 1s 57498590e-09 0s 0s 57507310e-09 0s 0s 57507950e-09 1s 1s 57508830e-09 0s 0s 57517590e-09 0s 0s 57518190e-09 1s 1s 57519070e-09 0s 0s 57527870e-09 0s 0s 57528430e-09 1s 1s 57529310e-09 0s 0s 57538150e-09 0s 0s 57538670e-09 1s 1s 57539550e-09 0s 0s 57548430e-09 0s 0s 57548910e-09 1s 1s 57549790e-09 0s 0s 57558710e-09 0s 0s 57559150e-09 1s 1s 57560030e-09 0s 0s 57568990e-09 0s 0s 57569390e-09 1s 1s 57570270e-09 0s 0s 57579270e-09 0s 0s 57579630e-09 1s 1s 57580510e-09 0s 0s 57589550e-09 0s 0s 57589870e-09 1s 1s 57590750e-09 0s 0s 57599830e-09 0s 0s 57600110e-09 1s 1s 57600990e-09 0s 0s 57610110e-09 0s 0s 57610350e-09 1s 1s 57611230e-09 0s 0s 57620390e-09 0s 0s 57620590e-09 1s 1s 57621470e-09 0s 0s 57630670e-09 0s 0s 57630830e-09 1s 1s 57631710e-09 0s 0s 57640950e-09 0s 0s 57641070e-09 1s 1s 57641950e-09 0s 0s 57651230e-09 0s 0s 57651310e-09 1s 1s 57652190e-09 0s 0s 57661510e-09 0s 0s 57661550e-09 1s 1s 57662430e-09 0s 0s 57671790e-09 1s 1s 57671830e-09 1s 1s 57672710e-09 0s 0s 57682030e-09 1s 1s 57682110e-09 1s 1s 57682950e-09 0s 0s 57692270e-09 1s 1s 57692390e-09 1s 1s 57693190e-09 0s 0s 57702510e-09 1s 1s 57702670e-09 1s 1s 57703430e-09 0s 0s 57712750e-09 1s 1s 57712950e-09 1s 1s 57713670e-09 0s 0s 57722990e-09 1s 1s 57723230e-09 1s 1s 57723910e-09 0s 0s 57733230e-09 1s 1s 57733510e-09 1s 1s 57734150e-09 0s 0s 57743470e-09 1s 1s 57743790e-09 1s 1s 57744390e-09 0s 0s 57753710e-09 1s 1s 57754070e-09 1s 1s 57754630e-09 0s 0s 57763950e-09 1s 1s 57764350e-09 1s 1s 57764870e-09 0s 0s 57774190e-09 1s 1s 57774630e-09 1s 1s 57775110e-09 0s 0s 57784430e-09 1s 1s 57784910e-09 1s 1s 57785350e-09 0s 0s 57794670e-09 1s 1s 57795190e-09 1s 1s 57795590e-09 0s 0s 57804910e-09 1s 1s 57805470e-09 1s 1s 57805830e-09 0s 0s 57815150e-09 1s 1s 57815750e-09 1s 1s 57816070e-09 0s 0s 57825390e-09 1s 1s 57826030e-09 1s 1s 57826310e-09 0s 0s 57835630e-09 1s 1s 57836310e-09 1s 1s 57836550e-09 0s 0s 57845870e-09 1s 1s 57846590e-09 1s 1s 57846790e-09 0s 0s 57856110e-09 1s 1s 57856870e-09 1s 1s 57857030e-09 0s 0s 57866350e-09 1s 1s 57867150e-09 1s 1s 57867270e-09 0s 0s 57876590e-09 1s 1s 57877430e-09 1s 1s 57877510e-09 0s 0s 57886830e-09 1s 1s 57887710e-09 1s 1s 57887750e-09 0s 0s 57897070e-09 1s 1s 57897990e-09 0s 0s 57907310e-09 1s 1s 57908230e-09 0s 0s 57908270e-09 0s 0s 57917550e-09 1s 1s 57918470e-09 0s 0s 57918550e-09 0s 0s 57927790e-09 1s 1s 57928710e-09 0s 0s 57928830e-09 0s 0s 57938030e-09 1s 1s 57938950e-09 0s 0s 57939110e-09 0s 0s 57948270e-09 1s 1s 57949190e-09 0s 0s 57949390e-09 0s 0s 57958510e-09 1s 1s 57959430e-09 0s 0s 57959670e-09 0s 0s 57968750e-09 1s 1s 57969670e-09 0s 0s 57969950e-09 0s 0s 57978990e-09 1s 1s 57979910e-09 0s 0s 57980230e-09 0s 0s 57989230e-09 1s 1s 57990150e-09 0s 0s 57990510e-09 0s 0s 57999470e-09 1s 1s 58000390e-09 0s 0s 58000790e-09 0s 0s 58009710e-09 1s 1s 58010630e-09 0s 0s 58011070e-09 0s 0s 58019950e-09 1s 1s 58020870e-09 0s 0s 58021350e-09 0s 0s 58030190e-09 1s 1s 58031110e-09 0s 0s 58031630e-09 0s 0s 58040430e-09 1s 1s 58041350e-09 0s 0s 58041910e-09 0s 0s 58050670e-09 1s 1s 58051590e-09 0s 0s 58052190e-09 0s 0s 58060910e-09 1s 1s 58061830e-09 0s 0s 58062470e-09 0s 0s 58071150e-09 1s 1s 58072070e-09 0s 0s 58072750e-09 0s 0s 58081390e-09 1s 1s 58082310e-09 0s 0s 58083030e-09 0s 0s 58091630e-09 1s 1s 58092550e-09 0s 0s 58093310e-09 0s 0s 58101870e-09 1s 1s 58102790e-09 0s 0s 58103590e-09 0s 0s 58112110e-09 1s 1s 58113030e-09 0s 0s 58113870e-09 0s 0s 58122350e-09 1s 1s 58123270e-09 0s 0s 58124150e-09 0s 0s 58132590e-09 1s 1s 58133510e-09 0s 0s 58134430e-09 0s 0s 58142830e-09 1s 1s 58143750e-09 0s 0s 58144710e-09 0s 0s 58153070e-09 1s 1s 58153990e-09 0s 0s 58154990e-09 0s 0s 58163310e-09 1s 1s 58164230e-09 0s 0s 58165270e-09 0s 0s 58173550e-09 1s 1s 58174470e-09 0s 0s 58175550e-09 0s 0s 58183790e-09 1s 1s 58184710e-09 0s 0s 58185830e-09 0s 0s 58194030e-09 1s 1s 58194950e-09 0s 0s 58196110e-09 0s 0s 58204270e-09 1s 1s 58205190e-09 0s 0s 58206390e-09 0s 0s 58214510e-09 1s 1s 58215430e-09 0s 0s 58216670e-09 0s 0s 58224750e-09 1s 1s 58225670e-09 0s 0s 58226950e-09 0s 0s 58234990e-09 1s 1s 58235910e-09 0s 0s 58237230e-09 0s 0s 58245230e-09 1s 1s 58246150e-09 0s 0s 58247510e-09 0s 0s 58255470e-09 1s 1s 58256390e-09 0s 0s 58257790e-09 0s 0s 58265710e-09 1s 1s 58266630e-09 0s 0s 58268070e-09 0s 0s 58275950e-09 1s 1s 58276870e-09 0s 0s 58278350e-09 0s 0s 58286190e-09 1s 1s 58287110e-09 0s 0s 58288630e-09 0s 0s 58296430e-09 1s 1s 58297350e-09 0s 0s 58298910e-09 0s 0s 58306670e-09 1s 1s 58307590e-09 0s 0s 58309190e-09 0s 0s 58316910e-09 1s 1s 58317830e-09 0s 0s 58319470e-09 0s 0s 58327150e-09 1s 1s 58328070e-09 0s 0s 58329750e-09 0s 0s 58337390e-09 1s 1s 58338310e-09 0s 0s 58340030e-09 0s 0s 58347630e-09 1s 1s 58348550e-09 0s 0s 58350310e-09 0s 0s 58357870e-09 1s 1s 58358790e-09 0s 0s 58360590e-09 0s 0s 58368110e-09 1s 1s 58369030e-09 0s 0s 58370870e-09 0s 0s 58378350e-09 1s 1s 58379270e-09 0s 0s 58381150e-09 0s 0s 58388590e-09 1s 1s 58389510e-09 0s 0s 58391430e-09 0s 0s 58398830e-09 1s 1s 58399750e-09 0s 0s 58401710e-09 0s 0s 58409070e-09 1s 1s 58409990e-09 0s 0s 58411990e-09 0s 0s 58419310e-09 1s 1s 58420230e-09 0s 0s 58422270e-09 0s 0s 58429550e-09 1s 1s 58430470e-09 0s 0s 58432550e-09 0s 0s 58439790e-09 1s 1s 58440710e-09 0s 0s 58442830e-09 0s 0s 58450030e-09 1s 1s 58450950e-09 0s 0s 58453110e-09 0s 0s 58460270e-09 1s 1s 58461190e-09 0s 0s 58463390e-09 0s 0s 58470510e-09 1s 1s 58471430e-09 0s 0s 58473670e-09 0s 0s 58480750e-09 1s 1s 58481670e-09 0s 0s 58483950e-09 0s 0s 58490990e-09 1s 1s 58491910e-09 0s 0s 58494230e-09 0s 0s 58501230e-09 1s 1s 58502150e-09 0s 0s 58504510e-09 0s 0s 58511470e-09 1s 1s 58512390e-09 0s 0s 58514790e-09 0s 0s 58521710e-09 1s 1s 58522630e-09 0s 0s 58525070e-09 0s 0s 58531950e-09 1s 1s 58532870e-09 0s 0s 58535350e-09 0s 0s 58542190e-09 1s 1s 58543110e-09 0s 0s 58545630e-09 0s 0s 58552430e-09 1s 1s 58553350e-09 0s 0s 58555910e-09 0s 0s 58562670e-09 1s 1s 58563590e-09 0s 0s 58566190e-09 0s 0s 58572910e-09 1s 1s 58573830e-09 0s 0s 58576470e-09 0s 0s 58583150e-09 1s 1s 58584070e-09 0s 0s 58586750e-09 0s 0s 58593390e-09 1s 1s 58594310e-09 0s 0s 58597030e-09 0s 0s 58603630e-09 1s 1s 58604550e-09 0s 0s 58607310e-09 0s 0s 58613870e-09 1s 1s 58614790e-09 0s 0s 58617590e-09 0s 0s 58624110e-09 1s 1s 58625030e-09 0s 0s 58627870e-09 0s 0s 58634350e-09 1s 1s 58635270e-09 0s 0s 58638150e-09 0s 0s 58644590e-09 1s 1s 58645510e-09 0s 0s 58648430e-09 0s 0s 58654830e-09 1s 1s 58655750e-09 0s 0s 58658710e-09 0s 0s 58665070e-09 1s 1s 58665990e-09 0s 0s 58668990e-09 0s 0s 58675310e-09 1s 1s 58676230e-09 0s 0s 58679270e-09 0s 0s 58685550e-09 1s 1s 58686470e-09 0s 0s 58689550e-09 0s 0s 58695790e-09 1s 1s 58696710e-09 0s 0s 58699830e-09 0s 0s 58706030e-09 1s 1s 58706950e-09 0s 0s 58710110e-09 0s 0s 58716270e-09 1s 1s 58717190e-09 0s 0s 58720390e-09 0s 0s 58726510e-09 1s 1s 58727430e-09 0s 0s 58730670e-09 0s 0s 58736750e-09 1s 1s 58737670e-09 0s 0s 58740950e-09 0s 0s 58746990e-09 1s 1s 58747910e-09 0s 0s 58751230e-09 0s 0s 58757230e-09 1s 1s 58758150e-09 0s 0s 58761510e-09 0s 0s 58767470e-09 1s 1s 58768390e-09 0s 0s 58771790e-09 0s 0s 58777710e-09 1s 1s 58778630e-09 0s 0s 58782070e-09 0s 0s 58787950e-09 1s 1s 58788870e-09 0s 0s 58792350e-09 0s 0s 58798190e-09 1s 1s 58799110e-09 0s 0s 58802630e-09 0s 0s 58808430e-09 1s 1s 58809350e-09 0s 0s 58812910e-09 0s 0s 58818670e-09 1s 1s 58819590e-09 0s 0s 58823190e-09 0s 0s 58828910e-09 1s 1s 58829830e-09 0s 0s 58833470e-09 0s 0s 58839150e-09 1s 1s 58840070e-09 0s 0s 58843750e-09 0s 0s 58849390e-09 1s 1s 58850310e-09 0s 0s 58854030e-09 0s 0s 58859630e-09 1s 1s 58860550e-09 0s 0s 58864310e-09 0s 0s 58869870e-09 1s 1s 58870790e-09 0s 0s 58874590e-09 0s 0s 58880110e-09 1s 1s 58881030e-09 0s 0s 58884870e-09 0s 0s 58890350e-09 1s 1s 58891270e-09 0s 0s 58895150e-09 0s 0s 58900590e-09 1s 1s 58901510e-09 0s 0s 58905430e-09 0s 0s 58910830e-09 1s 1s 58911750e-09 0s 0s 58915710e-09 0s 0s 58921070e-09 1s 1s 58921990e-09 0s 0s 58925990e-09 0s 0s 58931310e-09 1s 1s 58932230e-09 0s 0s 58936270e-09 0s 0s 58941550e-09 1s 1s 58942470e-09 0s 0s 58946550e-09 0s 0s 58951790e-09 1s 1s 58952710e-09 0s 0s 58956830e-09 0s 0s 58962030e-09 1s 1s 58962950e-09 0s 0s 58967110e-09 0s 0s 58972270e-09 1s 1s 58973190e-09 0s 0s 58977390e-09 0s 0s 58982510e-09 1s 1s 58983430e-09 0s 0s 58987670e-09 0s 0s 58992750e-09 1s 1s 58993670e-09 0s 0s 58997950e-09 0s 0s 59002990e-09 1s 1s 59003910e-09 0s 0s 59008230e-09 0s 0s 59013230e-09 1s 1s 59014150e-09 0s 0s 59018510e-09 0s 0s 59023470e-09 1s 1s 59024390e-09 0s 0s 59028790e-09 0s 0s 59033710e-09 1s 1s 59034630e-09 0s 0s 59039070e-09 0s 0s 59043950e-09 1s 1s 59044870e-09 0s 0s 59049350e-09 0s 0s 59054190e-09 1s 1s 59055110e-09 0s 0s 59059630e-09 0s 0s 59064430e-09 1s 1s 59065350e-09 0s 0s 59069910e-09 0s 0s 59074670e-09 1s 1s 59075590e-09 0s 0s 59080190e-09 0s 0s 59084910e-09 1s 1s 59085830e-09 0s 0s 59090470e-09 0s 0s 59095150e-09 1s 1s 59096070e-09 0s 0s 59100750e-09 0s 0s 59105390e-09 1s 1s 59106310e-09 0s 0s 59111030e-09 0s 0s 59115630e-09 1s 1s 59116550e-09 0s 0s 59121310e-09 0s 0s 59125870e-09 1s 1s 59126790e-09 0s 0s 59131590e-09 0s 0s 59136110e-09 1s 1s 59137030e-09 0s 0s 59141870e-09 0s 0s 59146350e-09 1s 1s 59147270e-09 0s 0s 59152150e-09 0s 0s 59156590e-09 1s 1s 59157510e-09 0s 0s 59162430e-09 0s 0s 59166830e-09 1s 1s 59167750e-09 0s 0s 59172710e-09 0s 0s 59177070e-09 1s 1s 59177990e-09 0s 0s 59182990e-09 0s 0s 59187310e-09 1s 1s 59188230e-09 0s 0s 59193270e-09 0s 0s 59197550e-09 1s 1s 59198470e-09 0s 0s 59203550e-09 0s 0s 59207790e-09 1s 1s 59208710e-09 0s 0s 59213830e-09 0s 0s 59218030e-09 1s 1s 59218950e-09 0s 0s 59224110e-09 0s 0s 59228270e-09 1s 1s 59229190e-09 0s 0s 59234390e-09 0s 0s 59238510e-09 1s 1s 59239430e-09 0s 0s 59244670e-09 0s 0s 59248750e-09 1s 1s 59249670e-09 0s 0s 59254950e-09 0s 0s 59258990e-09 1s 1s 59259910e-09 0s 0s 59265230e-09 0s 0s 59269230e-09 1s 1s 59270150e-09 0s 0s 59275510e-09 0s 0s 59279470e-09 1s 1s 59280390e-09 0s 0s 59285790e-09 0s 0s 59289710e-09 1s 1s 59290630e-09 0s 0s 59296070e-09 0s 0s 59299950e-09 1s 1s 59300870e-09 0s 0s 59306350e-09 0s 0s 59310190e-09 1s 1s 59311110e-09 0s 0s 59316630e-09 0s 0s 59320430e-09 1s 1s 59321350e-09 0s 0s 59326910e-09 0s 0s 59330670e-09 1s 1s 59331590e-09 0s 0s 59337190e-09 0s 0s 59340910e-09 1s 1s 59341830e-09 0s 0s 59347470e-09 0s 0s 59351150e-09 1s 1s 59352070e-09 0s 0s 59357750e-09 0s 0s 59361390e-09 1s 1s 59362310e-09 0s 0s 59368030e-09 0s 0s 59371630e-09 1s 1s 59372550e-09 0s 0s 59378310e-09 0s 0s 59381870e-09 1s 1s 59382790e-09 0s 0s 59388590e-09 0s 0s 59392110e-09 1s 1s 59393030e-09 0s 0s 59398870e-09 0s 0s 59402350e-09 1s 1s 59403270e-09 0s 0s 59409150e-09 0s 0s 59412590e-09 1s 1s 59413510e-09 0s 0s 59419430e-09 0s 0s 59422830e-09 1s 1s 59423750e-09 0s 0s 59429710e-09 0s 0s 59433070e-09 1s 1s 59433990e-09 0s 0s 59439990e-09 0s 0s 59443310e-09 1s 1s 59444230e-09 0s 0s 59450270e-09 0s 0s 59453550e-09 1s 1s 59454470e-09 0s 0s 59460550e-09 0s 0s 59463790e-09 1s 1s 59464710e-09 0s 0s 59470830e-09 0s 0s 59474030e-09 1s 1s 59474950e-09 0s 0s 59481110e-09 0s 0s 59484270e-09 1s 1s 59485190e-09 0s 0s 59491390e-09 0s 0s 59494510e-09 1s 1s 59495430e-09 0s 0s 59501670e-09 0s 0s 59504750e-09 1s 1s 59505670e-09 0s 0s 59511950e-09 0s 0s 59514990e-09 1s 1s 59515910e-09 0s 0s 59522230e-09 0s 0s 59525230e-09 1s 1s 59526150e-09 0s 0s 59532510e-09 0s 0s 59535470e-09 1s 1s 59536390e-09 0s 0s 59542790e-09 0s 0s 59545710e-09 1s 1s 59546630e-09 0s 0s 59553070e-09 0s 0s 59555950e-09 1s 1s 59556870e-09 0s 0s 59563350e-09 0s 0s 59566190e-09 1s 1s 59567110e-09 0s 0s 59573630e-09 0s 0s 59576430e-09 1s 1s 59577350e-09 0s 0s 59583910e-09 0s 0s 59586670e-09 1s 1s 59587590e-09 0s 0s 59594190e-09 0s 0s 59596910e-09 1s 1s 59597830e-09 0s 0s 59604470e-09 0s 0s 59607150e-09 1s 1s 59608070e-09 0s 0s 59614750e-09 0s 0s 59617390e-09 1s 1s 59618310e-09 0s 0s 59625030e-09 0s 0s 59627630e-09 1s 1s 59628550e-09 0s 0s 59635310e-09 0s 0s 59637870e-09 1s 1s 59638790e-09 0s 0s 59645590e-09 0s 0s 59648110e-09 1s 1s 59649030e-09 0s 0s 59655870e-09 0s 0s 59658350e-09 1s 1s 59659270e-09 0s 0s 59666150e-09 0s 0s 59668590e-09 1s 1s 59669510e-09 0s 0s 59676430e-09 0s 0s 59678830e-09 1s 1s 59679750e-09 0s 0s 59686710e-09 0s 0s 59689070e-09 1s 1s 59689990e-09 0s 0s 59696990e-09 0s 0s 59699310e-09 1s 1s 59700230e-09 0s 0s 59707270e-09 0s 0s 59709550e-09 1s 1s 59710470e-09 0s 0s 59717550e-09 0s 0s 59719790e-09 1s 1s 59720710e-09 0s 0s 59727830e-09 0s 0s 59730030e-09 1s 1s 59730950e-09 0s 0s 59738110e-09 0s 0s 59740270e-09 1s 1s 59741190e-09 0s 0s 59748390e-09 0s 0s 59750510e-09 1s 1s 59751430e-09 0s 0s 59758670e-09 0s 0s 59760750e-09 1s 1s 59761670e-09 0s 0s 59768950e-09 0s 0s 59770990e-09 1s 1s 59771910e-09 0s 0s 59779230e-09 0s 0s 59781230e-09 1s 1s 59782150e-09 0s 0s 59789510e-09 0s 0s 59791470e-09 1s 1s 59792390e-09 0s 0s 59799790e-09 0s 0s 59801710e-09 1s 1s 59802630e-09 0s 0s 59810070e-09 0s 0s 59811950e-09 1s 1s 59812870e-09 0s 0s 59820350e-09 0s 0s 59822190e-09 1s 1s 59823110e-09 0s 0s 59830630e-09 0s 0s 59832430e-09 1s 1s 59833350e-09 0s 0s 59840910e-09 0s 0s 59842670e-09 1s 1s 59843590e-09 0s 0s 59851190e-09 0s 0s 59852910e-09 1s 1s 59853830e-09 0s 0s 59861470e-09 0s 0s 59863150e-09 1s 1s 59864070e-09 0s 0s 59871750e-09 0s 0s 59873390e-09 1s 1s 59874310e-09 0s 0s 59882030e-09 0s 0s 59883630e-09 1s 1s 59884550e-09 0s 0s 59892310e-09 0s 0s 59893870e-09 1s 1s 59894790e-09 0s 0s 59902590e-09 0s 0s 59904110e-09 1s 1s 59905030e-09 0s 0s 59912870e-09 0s 0s 59914350e-09 1s 1s 59915270e-09 0s 0s 59923150e-09 0s 0s 59924590e-09 1s 1s 59925510e-09 0s 0s 59933430e-09 0s 0s 59934830e-09 1s 1s 59935750e-09 0s 0s 59943710e-09 0s 0s 59945070e-09 1s 1s 59945990e-09 0s 0s 59953990e-09 0s 0s 59955310e-09 1s 1s 59956230e-09 0s 0s 59964270e-09 0s 0s 59965550e-09 1s 1s 59966470e-09 0s 0s 59974550e-09 0s 0s 59975790e-09 1s 1s 59976710e-09 0s 0s 59984830e-09 0s 0s 59986030e-09 1s 1s 59986950e-09 0s 0s 59995110e-09 0s 0s 59996270e-09 1s 1s 59997190e-09 0s 0s 60005390e-09 0s 0s 60006510e-09 1s 1s 60007430e-09 0s 0s 60015670e-09 0s 0s 60016750e-09 1s 1s 60017670e-09 0s 0s 60025950e-09 0s 0s 60026990e-09 1s 1s 60027910e-09 0s 0s 60036230e-09 0s 0s 60037230e-09 1s 1s 60038150e-09 0s 0s 60046510e-09 0s 0s 60047470e-09 1s 1s 60048390e-09 0s 0s 60056790e-09 0s 0s 60057710e-09 1s 1s 60058630e-09 0s 0s 60067070e-09 0s 0s 60067950e-09 1s 1s 60068870e-09 0s 0s 60077350e-09 0s 0s 60078190e-09 1s 1s 60079110e-09 0s 0s 60087630e-09 0s 0s 60088430e-09 1s 1s 60089350e-09 0s 0s 60097910e-09 0s 0s 60098670e-09 1s 1s 60099590e-09 0s 0s 60108190e-09 0s 0s 60108910e-09 1s 1s 60109830e-09 0s 0s 60118470e-09 0s 0s 60119150e-09 1s 1s 60120070e-09 0s 0s 60128750e-09 0s 0s 60129390e-09 1s 1s 60130310e-09 0s 0s 60139030e-09 0s 0s 60139630e-09 1s 1s 60140550e-09 0s 0s 60149310e-09 0s 0s 60149870e-09 1s 1s 60150790e-09 0s 0s 60159590e-09 0s 0s 60160110e-09 1s 1s 60161030e-09 0s 0s 60169870e-09 0s 0s 60170350e-09 1s 1s 60171270e-09 0s 0s 60180150e-09 0s 0s 60180590e-09 1s 1s 60181510e-09 0s 0s 60190430e-09 0s 0s 60190830e-09 1s 1s 60191750e-09 0s 0s 60200710e-09 0s 0s 60201070e-09 1s 1s 60201990e-09 0s 0s 60210990e-09 0s 0s 60211310e-09 1s 1s 60212230e-09 0s 0s 60221270e-09 0s 0s 60221550e-09 1s 1s 60222470e-09 0s 0s 60231550e-09 0s 0s 60231790e-09 1s 1s 60232710e-09 0s 0s 60241830e-09 0s 0s 60242030e-09 1s 1s 60242950e-09 0s 0s 60252110e-09 0s 0s 60252270e-09 1s 1s 60253190e-09 0s 0s 60262390e-09 0s 0s 60262510e-09 1s 1s 60263430e-09 0s 0s 60272670e-09 0s 0s 60272750e-09 1s 1s 60273670e-09 0s 0s 60282950e-09 0s 0s 60282990e-09 1s 1s 60283910e-09 0s 0s 60293230e-09 1s 1s 60293270e-09 1s 1s 60294190e-09 0s 0s 60303470e-09 1s 1s 60303550e-09 1s 1s 60304430e-09 0s 0s 60313710e-09 1s 1s 60313830e-09 1s 1s 60314670e-09 0s 0s 60323950e-09 1s 1s 60324110e-09 1s 1s 60324910e-09 0s 0s 60334190e-09 1s 1s 60334390e-09 1s 1s 60335150e-09 0s 0s 60344430e-09 1s 1s 60344670e-09 1s 1s 60345390e-09 0s 0s 60354670e-09 1s 1s 60354950e-09 1s 1s 60355630e-09 0s 0s 60364910e-09 1s 1s 60365230e-09 1s 1s 60365870e-09 0s 0s 60375150e-09 1s 1s 60375510e-09 1s 1s 60376110e-09 0s 0s 60385390e-09 1s 1s 60385790e-09 1s 1s 60386350e-09 0s 0s 60395630e-09 1s 1s 60396070e-09 1s 1s 60396590e-09 0s 0s 60405870e-09 1s 1s 60406350e-09 1s 1s 60406830e-09 0s 0s 60416110e-09 1s 1s 60416630e-09 1s 1s 60417070e-09 0s 0s 60426350e-09 1s 1s 60426910e-09 1s 1s 60427310e-09 0s 0s 60436590e-09 1s 1s 60437190e-09 1s 1s 60437550e-09 0s 0s 60446830e-09 1s 1s 60447470e-09 1s 1s 60447790e-09 0s 0s 60457070e-09 1s 1s 60457750e-09 1s 1s 60458030e-09 0s 0s 60467310e-09 1s 1s 60468030e-09 1s 1s 60468270e-09 0s 0s 60477550e-09 1s 1s 60478310e-09 1s 1s 60478510e-09 0s 0s 60487790e-09 1s 1s 60488590e-09 1s 1s 60488750e-09 0s 0s 60498030e-09 1s 1s 60498870e-09 1s 1s 60498990e-09 0s 0s 60508270e-09 1s 1s 60509150e-09 1s 1s 60509230e-09 0s 0s 60518510e-09 1s 1s 60519430e-09 1s 1s 60519470e-09 0s 0s 60528750e-09 1s 1s 60529710e-09 0s 0s 60538990e-09 1s 1s 60539950e-09 0s 0s 60539990e-09 0s 0s 60549230e-09 1s 1s 60550190e-09 0s 0s 60550270e-09 0s 0s 60559470e-09 1s 1s 60560430e-09 0s 0s 60560550e-09 0s 0s 60569710e-09 1s 1s 60570670e-09 0s 0s 60570830e-09 0s 0s 60579950e-09 1s 1s 60580910e-09 0s 0s 60581110e-09 0s 0s 60590190e-09 1s 1s 60591150e-09 0s 0s 60591390e-09 0s 0s 60600430e-09 1s 1s 60601390e-09 0s 0s 60601670e-09 0s 0s 60610670e-09 1s 1s 60611630e-09 0s 0s 60611950e-09 0s 0s 60620910e-09 1s 1s 60621870e-09 0s 0s 60622230e-09 0s 0s 60631150e-09 1s 1s 60632110e-09 0s 0s 60632510e-09 0s 0s 60641390e-09 1s 1s 60642350e-09 0s 0s 60642790e-09 0s 0s 60651630e-09 1s 1s 60652590e-09 0s 0s 60653070e-09 0s 0s 60661870e-09 1s 1s 60662830e-09 0s 0s 60663350e-09 0s 0s 60672110e-09 1s 1s 60673070e-09 0s 0s 60673630e-09 0s 0s 60682350e-09 1s 1s 60683310e-09 0s 0s 60683910e-09 0s 0s 60692590e-09 1s 1s 60693550e-09 0s 0s 60694190e-09 0s 0s 60702830e-09 1s 1s 60703790e-09 0s 0s 60704470e-09 0s 0s 60713070e-09 1s 1s 60714030e-09 0s 0s 60714750e-09 0s 0s 60723310e-09 1s 1s 60724270e-09 0s 0s 60725030e-09 0s 0s 60733550e-09 1s 1s 60734510e-09 0s 0s 60735310e-09 0s 0s 60743790e-09 1s 1s 60744750e-09 0s 0s 60745590e-09 0s 0s 60754030e-09 1s 1s 60754990e-09 0s 0s 60755870e-09 0s 0s 60764270e-09 1s 1s 60765230e-09 0s 0s 60766150e-09 0s 0s 60774510e-09 1s 1s 60775470e-09 0s 0s 60776430e-09 0s 0s 60784750e-09 1s 1s 60785710e-09 0s 0s 60786710e-09 0s 0s 60794990e-09 1s 1s 60795950e-09 0s 0s 60796990e-09 0s 0s 60805230e-09 1s 1s 60806190e-09 0s 0s 60807270e-09 0s 0s 60815470e-09 1s 1s 60816430e-09 0s 0s 60817550e-09 0s 0s 60825710e-09 1s 1s 60826670e-09 0s 0s 60827830e-09 0s 0s 60835950e-09 1s 1s 60836910e-09 0s 0s 60838110e-09 0s 0s 60846190e-09 1s 1s 60847150e-09 0s 0s 60848390e-09 0s 0s 60856430e-09 1s 1s 60857390e-09 0s 0s 60858670e-09 0s 0s 60866670e-09 1s 1s 60867630e-09 0s 0s 60868950e-09 0s 0s 60876910e-09 1s 1s 60877870e-09 0s 0s 60879230e-09 0s 0s 60887150e-09 1s 1s 60888110e-09 0s 0s 60889510e-09 0s 0s 60897390e-09 1s 1s 60898350e-09 0s 0s 60899790e-09 0s 0s 60907630e-09 1s 1s 60908590e-09 0s 0s 60910070e-09 0s 0s 60917870e-09 1s 1s 60918830e-09 0s 0s 60920350e-09 0s 0s 60928110e-09 1s 1s 60929070e-09 0s 0s 60930630e-09 0s 0s 60938350e-09 1s 1s 60939310e-09 0s 0s 60940910e-09 0s 0s 60948590e-09 1s 1s 60949550e-09 0s 0s 60951190e-09 0s 0s 60958830e-09 1s 1s 60959790e-09 0s 0s 60961470e-09 0s 0s 60969070e-09 1s 1s 60970030e-09 0s 0s 60971750e-09 0s 0s 60979310e-09 1s 1s 60980270e-09 0s 0s 60982030e-09 0s 0s 60989550e-09 1s 1s 60990510e-09 0s 0s 60992310e-09 0s 0s 60999790e-09 1s 1s 61000750e-09 0s 0s 61002590e-09 0s 0s 61010030e-09 1s 1s 61010990e-09 0s 0s 61012870e-09 0s 0s 61020270e-09 1s 1s 61021230e-09 0s 0s 61023150e-09 0s 0s 61030510e-09 1s 1s 61031470e-09 0s 0s 61033430e-09 0s 0s 61040750e-09 1s 1s 61041710e-09 0s 0s 61043710e-09 0s 0s 61050990e-09 1s 1s 61051950e-09 0s 0s 61053990e-09 0s 0s 61061230e-09 1s 1s 61062190e-09 0s 0s 61064270e-09 0s 0s 61071470e-09 1s 1s 61072430e-09 0s 0s 61074550e-09 0s 0s 61081710e-09 1s 1s 61082670e-09 0s 0s 61084830e-09 0s 0s 61091950e-09 1s 1s 61092910e-09 0s 0s 61095110e-09 0s 0s 61102190e-09 1s 1s 61103150e-09 0s 0s 61105390e-09 0s 0s 61112430e-09 1s 1s 61113390e-09 0s 0s 61115670e-09 0s 0s 61122670e-09 1s 1s 61123630e-09 0s 0s 61125950e-09 0s 0s 61132910e-09 1s 1s 61133870e-09 0s 0s 61136230e-09 0s 0s 61143150e-09 1s 1s 61144110e-09 0s 0s 61146510e-09 0s 0s 61153390e-09 1s 1s 61154350e-09 0s 0s 61156790e-09 0s 0s 61163630e-09 1s 1s 61164590e-09 0s 0s 61167070e-09 0s 0s 61173870e-09 1s 1s 61174830e-09 0s 0s 61177350e-09 0s 0s 61184110e-09 1s 1s 61185070e-09 0s 0s 61187630e-09 0s 0s 61194350e-09 1s 1s 61195310e-09 0s 0s 61197910e-09 0s 0s 61204590e-09 1s 1s 61205550e-09 0s 0s 61208190e-09 0s 0s 61214830e-09 1s 1s 61215790e-09 0s 0s 61218470e-09 0s 0s 61225070e-09 1s 1s 61226030e-09 0s 0s 61228750e-09 0s 0s 61235310e-09 1s 1s 61236270e-09 0s 0s 61239030e-09 0s 0s 61245550e-09 1s 1s 61246510e-09 0s 0s 61249310e-09 0s 0s 61255790e-09 1s 1s 61256750e-09 0s 0s 61259590e-09 0s 0s 61266030e-09 1s 1s 61266990e-09 0s 0s 61269870e-09 0s 0s 61276270e-09 1s 1s 61277230e-09 0s 0s 61280150e-09 0s 0s 61286510e-09 1s 1s 61287470e-09 0s 0s 61290430e-09 0s 0s 61296750e-09 1s 1s 61297710e-09 0s 0s 61300710e-09 0s 0s 61306990e-09 1s 1s 61307950e-09 0s 0s 61310990e-09 0s 0s 61317230e-09 1s 1s 61318190e-09 0s 0s 61321270e-09 0s 0s 61327470e-09 1s 1s 61328430e-09 0s 0s 61331550e-09 0s 0s 61337710e-09 1s 1s 61338670e-09 0s 0s 61341830e-09 0s 0s 61347950e-09 1s 1s 61348910e-09 0s 0s 61352110e-09 0s 0s 61358190e-09 1s 1s 61359150e-09 0s 0s 61362390e-09 0s 0s 61368430e-09 1s 1s 61369390e-09 0s 0s 61372670e-09 0s 0s 61378670e-09 1s 1s 61379630e-09 0s 0s 61382950e-09 0s 0s 61388910e-09 1s 1s 61389870e-09 0s 0s 61393230e-09 0s 0s 61399150e-09 1s 1s 61400110e-09 0s 0s 61403510e-09 0s 0s 61409390e-09 1s 1s 61410350e-09 0s 0s 61413790e-09 0s 0s 61419630e-09 1s 1s 61420590e-09 0s 0s 61424070e-09 0s 0s 61429870e-09 1s 1s 61430830e-09 0s 0s 61434350e-09 0s 0s 61440110e-09 1s 1s 61441070e-09 0s 0s 61444630e-09 0s 0s 61450350e-09 1s 1s 61451310e-09 0s 0s 61454910e-09 0s 0s 61460590e-09 1s 1s 61461550e-09 0s 0s 61465190e-09 0s 0s 61470830e-09 1s 1s 61471790e-09 0s 0s 61475470e-09 0s 0s 61481070e-09 1s 1s 61482030e-09 0s 0s 61485750e-09 0s 0s 61491310e-09 1s 1s 61492270e-09 0s 0s 61496030e-09 0s 0s 61501550e-09 1s 1s 61502510e-09 0s 0s 61506310e-09 0s 0s 61511790e-09 1s 1s 61512750e-09 0s 0s 61516590e-09 0s 0s 61522030e-09 1s 1s 61522990e-09 0s 0s 61526870e-09 0s 0s 61532270e-09 1s 1s 61533230e-09 0s 0s 61537150e-09 0s 0s 61542510e-09 1s 1s 61543470e-09 0s 0s 61547430e-09 0s 0s 61552750e-09 1s 1s 61553710e-09 0s 0s 61557710e-09 0s 0s 61562990e-09 1s 1s 61563950e-09 0s 0s 61567990e-09 0s 0s 61573230e-09 1s 1s 61574190e-09 0s 0s 61578270e-09 0s 0s 61583470e-09 1s 1s 61584430e-09 0s 0s 61588550e-09 0s 0s 61593710e-09 1s 1s 61594670e-09 0s 0s 61598830e-09 0s 0s 61603950e-09 1s 1s 61604910e-09 0s 0s 61609110e-09 0s 0s 61614190e-09 1s 1s 61615150e-09 0s 0s 61619390e-09 0s 0s 61624430e-09 1s 1s 61625390e-09 0s 0s 61629670e-09 0s 0s 61634670e-09 1s 1s 61635630e-09 0s 0s 61639950e-09 0s 0s 61644910e-09 1s 1s 61645870e-09 0s 0s 61650230e-09 0s 0s 61655150e-09 1s 1s 61656110e-09 0s 0s 61660510e-09 0s 0s 61665390e-09 1s 1s 61666350e-09 0s 0s 61670790e-09 0s 0s 61675630e-09 1s 1s 61676590e-09 0s 0s 61681070e-09 0s 0s 61685870e-09 1s 1s 61686830e-09 0s 0s 61691350e-09 0s 0s 61696110e-09 1s 1s 61697070e-09 0s 0s 61701630e-09 0s 0s 61706350e-09 1s 1s 61707310e-09 0s 0s 61711910e-09 0s 0s 61716590e-09 1s 1s 61717550e-09 0s 0s 61722190e-09 0s 0s 61726830e-09 1s 1s 61727790e-09 0s 0s 61732470e-09 0s 0s 61737070e-09 1s 1s 61738030e-09 0s 0s 61742750e-09 0s 0s 61747310e-09 1s 1s 61748270e-09 0s 0s 61753030e-09 0s 0s 61757550e-09 1s 1s 61758510e-09 0s 0s 61763310e-09 0s 0s 61767790e-09 1s 1s 61768750e-09 0s 0s 61773590e-09 0s 0s 61778030e-09 1s 1s 61778990e-09 0s 0s 61783870e-09 0s 0s 61788270e-09 1s 1s 61789230e-09 0s 0s 61794150e-09 0s 0s 61798510e-09 1s 1s 61799470e-09 0s 0s 61804430e-09 0s 0s 61808750e-09 1s 1s 61809710e-09 0s 0s 61814710e-09 0s 0s 61818990e-09 1s 1s 61819950e-09 0s 0s 61824990e-09 0s 0s 61829230e-09 1s 1s 61830190e-09 0s 0s 61835270e-09 0s 0s 61839470e-09 1s 1s 61840430e-09 0s 0s 61845550e-09 0s 0s 61849710e-09 1s 1s 61850670e-09 0s 0s 61855830e-09 0s 0s 61859950e-09 1s 1s 61860910e-09 0s 0s 61866110e-09 0s 0s 61870190e-09 1s 1s 61871150e-09 0s 0s 61876390e-09 0s 0s 61880430e-09 1s 1s 61881390e-09 0s 0s 61886670e-09 0s 0s 61890670e-09 1s 1s 61891630e-09 0s 0s 61896950e-09 0s 0s 61900910e-09 1s 1s 61901870e-09 0s 0s 61907230e-09 0s 0s 61911150e-09 1s 1s 61912110e-09 0s 0s 61917510e-09 0s 0s 61921390e-09 1s 1s 61922350e-09 0s 0s 61927790e-09 0s 0s 61931630e-09 1s 1s 61932590e-09 0s 0s 61938070e-09 0s 0s 61941870e-09 1s 1s 61942830e-09 0s 0s 61948350e-09 0s 0s 61952110e-09 1s 1s 61953070e-09 0s 0s 61958630e-09 0s 0s 61962350e-09 1s 1s 61963310e-09 0s 0s 61968910e-09 0s 0s 61972590e-09 1s 1s 61973550e-09 0s 0s 61979190e-09 0s 0s 61982830e-09 1s 1s 61983790e-09 0s 0s 61989470e-09 0s 0s 61993070e-09 1s 1s 61994030e-09 0s 0s 61999750e-09 0s 0s 62003310e-09 1s 1s 62004270e-09 0s 0s 62010030e-09 0s 0s 62013550e-09 1s 1s 62014510e-09 0s 0s 62020310e-09 0s 0s 62023790e-09 1s 1s 62024750e-09 0s 0s 62030590e-09 0s 0s 62034030e-09 1s 1s 62034990e-09 0s 0s 62040870e-09 0s 0s 62044270e-09 1s 1s 62045230e-09 0s 0s 62051150e-09 0s 0s 62054510e-09 1s 1s 62055470e-09 0s 0s 62061430e-09 0s 0s 62064750e-09 1s 1s 62065710e-09 0s 0s 62071710e-09 0s 0s 62074990e-09 1s 1s 62075950e-09 0s 0s 62081990e-09 0s 0s 62085230e-09 1s 1s 62086190e-09 0s 0s 62092270e-09 0s 0s 62095470e-09 1s 1s 62096430e-09 0s 0s 62102550e-09 0s 0s 62105710e-09 1s 1s 62106670e-09 0s 0s 62112830e-09 0s 0s 62115950e-09 1s 1s 62116910e-09 0s 0s 62123110e-09 0s 0s 62126190e-09 1s 1s 62127150e-09 0s 0s 62133390e-09 0s 0s 62136430e-09 1s 1s 62137390e-09 0s 0s 62143670e-09 0s 0s 62146670e-09 1s 1s 62147630e-09 0s 0s 62153950e-09 0s 0s 62156910e-09 1s 1s 62157870e-09 0s 0s 62164230e-09 0s 0s 62167150e-09 1s 1s 62168110e-09 0s 0s 62174510e-09 0s 0s 62177390e-09 1s 1s 62178350e-09 0s 0s 62184790e-09 0s 0s 62187630e-09 1s 1s 62188590e-09 0s 0s 62195070e-09 0s 0s 62197870e-09 1s 1s 62198830e-09 0s 0s 62205350e-09 0s 0s 62208110e-09 1s 1s 62209070e-09 0s 0s 62215630e-09 0s 0s 62218350e-09 1s 1s 62219310e-09 0s 0s 62225910e-09 0s 0s 62228590e-09 1s 1s 62229550e-09 0s 0s 62236190e-09 0s 0s 62238830e-09 1s 1s 62239790e-09 0s 0s 62246470e-09 0s 0s 62249070e-09 1s 1s 62250030e-09 0s 0s 62256750e-09 0s 0s 62259310e-09 1s 1s 62260270e-09 0s 0s 62267030e-09 0s 0s 62269550e-09 1s 1s 62270510e-09 0s 0s 62277310e-09 0s 0s 62279790e-09 1s 1s 62280750e-09 0s 0s 62287590e-09 0s 0s 62290030e-09 1s 1s 62290990e-09 0s 0s 62297870e-09 0s 0s 62300270e-09 1s 1s 62301230e-09 0s 0s 62308150e-09 0s 0s 62310510e-09 1s 1s 62311470e-09 0s 0s 62318430e-09 0s 0s 62320750e-09 1s 1s 62321710e-09 0s 0s 62328710e-09 0s 0s 62330990e-09 1s 1s 62331950e-09 0s 0s 62338990e-09 0s 0s 62341230e-09 1s 1s 62342190e-09 0s 0s 62349270e-09 0s 0s 62351470e-09 1s 1s 62352430e-09 0s 0s 62359550e-09 0s 0s 62361710e-09 1s 1s 62362670e-09 0s 0s 62369830e-09 0s 0s 62371950e-09 1s 1s 62372910e-09 0s 0s 62380110e-09 0s 0s 62382190e-09 1s 1s 62383150e-09 0s 0s 62390390e-09 0s 0s 62392430e-09 1s 1s 62393390e-09 0s 0s 62400670e-09 0s 0s 62402670e-09 1s 1s 62403630e-09 0s 0s 62410950e-09 0s 0s 62412910e-09 1s 1s 62413870e-09 0s 0s 62421230e-09 0s 0s 62423150e-09 1s 1s 62424110e-09 0s 0s 62431510e-09 0s 0s 62433390e-09 1s 1s 62434350e-09 0s 0s 62441790e-09 0s 0s 62443630e-09 1s 1s 62444590e-09 0s 0s 62452070e-09 0s 0s 62453870e-09 1s 1s 62454830e-09 0s 0s 62462350e-09 0s 0s 62464110e-09 1s 1s 62465070e-09 0s 0s 62472630e-09 0s 0s 62474350e-09 1s 1s 62475310e-09 0s 0s 62482910e-09 0s 0s 62484590e-09 1s 1s 62485550e-09 0s 0s 62493190e-09 0s 0s 62494830e-09 1s 1s 62495790e-09 0s 0s 62503470e-09 0s 0s 62505070e-09 1s 1s 62506030e-09 0s 0s 62513750e-09 0s 0s 62515310e-09 1s 1s 62516270e-09 0s 0s 62524030e-09 0s 0s 62525550e-09 1s 1s 62526510e-09 0s 0s 62534310e-09 0s 0s 62535790e-09 1s 1s 62536750e-09 0s 0s 62544590e-09 0s 0s 62546030e-09 1s 1s 62546990e-09 0s 0s 62554870e-09 0s 0s 62556270e-09 1s 1s 62557230e-09 0s 0s 62565150e-09 0s 0s 62566510e-09 1s 1s 62567470e-09 0s 0s 62575430e-09 0s 0s 62576750e-09 1s 1s 62577710e-09 0s 0s 62585710e-09 0s 0s 62586990e-09 1s 1s 62587950e-09 0s 0s 62595990e-09 0s 0s 62597230e-09 1s 1s 62598190e-09 0s 0s 62606270e-09 0s 0s 62607470e-09 1s 1s 62608430e-09 0s 0s 62616550e-09 0s 0s 62617710e-09 1s 1s 62618670e-09 0s 0s 62626830e-09 0s 0s 62627950e-09 1s 1s 62628910e-09 0s 0s 62637110e-09 0s 0s 62638190e-09 1s 1s 62639150e-09 0s 0s 62647390e-09 0s 0s 62648430e-09 1s 1s 62649390e-09 0s 0s 62657670e-09 0s 0s 62658670e-09 1s 1s 62659630e-09 0s 0s 62667950e-09 0s 0s 62668910e-09 1s 1s 62669870e-09 0s 0s 62678230e-09 0s 0s 62679150e-09 1s 1s 62680110e-09 0s 0s 62688510e-09 0s 0s 62689390e-09 1s 1s 62690350e-09 0s 0s 62698790e-09 0s 0s 62699630e-09 1s 1s 62700590e-09 0s 0s 62709070e-09 0s 0s 62709870e-09 1s 1s 62710830e-09 0s 0s 62719350e-09 0s 0s 62720110e-09 1s 1s 62721070e-09 0s 0s 62729630e-09 0s 0s 62730350e-09 1s 1s 62731310e-09 0s 0s 62739910e-09 0s 0s 62740590e-09 1s 1s 62741550e-09 0s 0s 62750190e-09 0s 0s 62750830e-09 1s 1s 62751790e-09 0s 0s 62760470e-09 0s 0s 62761070e-09 1s 1s 62762030e-09 0s 0s 62770750e-09 0s 0s 62771310e-09 1s 1s 62772270e-09 0s 0s 62781030e-09 0s 0s 62781550e-09 1s 1s 62782510e-09 0s 0s 62791310e-09 0s 0s 62791790e-09 1s 1s 62792750e-09 0s 0s 62801590e-09 0s 0s 62802030e-09 1s 1s 62802990e-09 0s 0s 62811870e-09 0s 0s 62812270e-09 1s 1s 62813230e-09 0s 0s 62822150e-09 0s 0s 62822510e-09 1s 1s 62823470e-09 0s 0s 62832430e-09 0s 0s 62832750e-09 1s 1s 62833710e-09 0s 0s 62842710e-09 0s 0s 62842990e-09 1s 1s 62843950e-09 0s 0s 62852990e-09 0s 0s 62853230e-09 1s 1s 62854190e-09 0s 0s 62863270e-09 0s 0s 62863470e-09 1s 1s 62864430e-09 0s 0s 62873550e-09 0s 0s 62873710e-09 1s 1s 62874670e-09 0s 0s 62883830e-09 0s 0s 62883950e-09 1s 1s 62884910e-09 0s 0s 62894110e-09 0s 0s 62894190e-09 1s 1s 62895150e-09 0s 0s 62904390e-09 0s 0s 62904430e-09 1s 1s 62905390e-09 0s 0s 62914670e-09 1s 1s 62914710e-09 1s 1s 62915670e-09 0s 0s 62924910e-09 1s 1s 62924990e-09 1s 1s 62925910e-09 0s 0s 62935150e-09 1s 1s 62935270e-09 1s 1s 62936150e-09 0s 0s 62945390e-09 1s 1s 62945550e-09 1s 1s 62946390e-09 0s 0s 62955630e-09 1s 1s 62955830e-09 1s 1s 62956630e-09 0s 0s 62965870e-09 1s 1s 62966110e-09 1s 1s 62966870e-09 0s 0s 62976110e-09 1s 1s 62976390e-09 1s 1s 62977110e-09 0s 0s 62986350e-09 1s 1s 62986670e-09 1s 1s 62987350e-09 0s 0s 62996590e-09 1s 1s 62996950e-09 1s 1s 62997590e-09 0s 0s 63006830e-09 1s 1s 63007230e-09 1s 1s 63007830e-09 0s 0s 63017070e-09 1s 1s 63017510e-09 1s 1s 63018070e-09 0s 0s 63027310e-09 1s 1s 63027790e-09 1s 1s 63028310e-09 0s 0s 63037550e-09 1s 1s 63038070e-09 1s 1s 63038550e-09 0s 0s 63047790e-09 1s 1s 63048350e-09 1s 1s 63048790e-09 0s 0s 63058030e-09 1s 1s 63058630e-09 1s 1s 63059030e-09 0s 0s 63068270e-09 1s 1s 63068910e-09 1s 1s 63069270e-09 0s 0s 63078510e-09 1s 1s 63079190e-09 1s 1s 63079510e-09 0s 0s 63088750e-09 1s 1s 63089470e-09 1s 1s 63089750e-09 0s 0s 63098990e-09 1s 1s 63099750e-09 1s 1s 63099990e-09 0s 0s 63109230e-09 1s 1s 63110030e-09 1s 1s 63110230e-09 0s 0s 63119470e-09 1s 1s 63120310e-09 1s 1s 63120470e-09 0s 0s 63129710e-09 1s 1s 63130590e-09 1s 1s 63130710e-09 0s 0s 63139950e-09 1s 1s 63140870e-09 1s 1s 63140950e-09 0s 0s 63150190e-09 1s 1s 63151150e-09 1s 1s 63151190e-09 0s 0s 63160430e-09 1s 1s 63161430e-09 0s 0s 63170670e-09 1s 1s 63171670e-09 0s 0s 63171710e-09 0s 0s 63180910e-09 1s 1s 63181910e-09 0s 0s 63181990e-09 0s 0s 63191150e-09 1s 1s 63192150e-09 0s 0s 63192270e-09 0s 0s 63201390e-09 1s 1s 63202390e-09 0s 0s 63202550e-09 0s 0s 63211630e-09 1s 1s 63212630e-09 0s 0s 63212830e-09 0s 0s 63221870e-09 1s 1s 63222870e-09 0s 0s 63223110e-09 0s 0s 63232110e-09 1s 1s 63233110e-09 0s 0s 63233390e-09 0s 0s 63242350e-09 1s 1s 63243350e-09 0s 0s 63243670e-09 0s 0s 63252590e-09 1s 1s 63253590e-09 0s 0s 63253950e-09 0s 0s 63262830e-09 1s 1s 63263830e-09 0s 0s 63264230e-09 0s 0s 63273070e-09 1s 1s 63274070e-09 0s 0s 63274510e-09 0s 0s 63283310e-09 1s 1s 63284310e-09 0s 0s 63284790e-09 0s 0s 63293550e-09 1s 1s 63294550e-09 0s 0s 63295070e-09 0s 0s 63303790e-09 1s 1s 63304790e-09 0s 0s 63305350e-09 0s 0s 63314030e-09 1s 1s 63315030e-09 0s 0s 63315630e-09 0s 0s 63324270e-09 1s 1s 63325270e-09 0s 0s 63325910e-09 0s 0s 63334510e-09 1s 1s 63335510e-09 0s 0s 63336190e-09 0s 0s 63344750e-09 1s 1s 63345750e-09 0s 0s 63346470e-09 0s 0s 63354990e-09 1s 1s 63355990e-09 0s 0s 63356750e-09 0s 0s 63365230e-09 1s 1s 63366230e-09 0s 0s 63367030e-09 0s 0s 63375470e-09 1s 1s 63376470e-09 0s 0s 63377310e-09 0s 0s 63385710e-09 1s 1s 63386710e-09 0s 0s 63387590e-09 0s 0s 63395950e-09 1s 1s 63396950e-09 0s 0s 63397870e-09 0s 0s 63406190e-09 1s 1s 63407190e-09 0s 0s 63408150e-09 0s 0s 63416430e-09 1s 1s 63417430e-09 0s 0s 63418430e-09 0s 0s 63426670e-09 1s 1s 63427670e-09 0s 0s 63428710e-09 0s 0s 63436910e-09 1s 1s 63437910e-09 0s 0s 63438990e-09 0s 0s 63447150e-09 1s 1s 63448150e-09 0s 0s 63449270e-09 0s 0s 63457390e-09 1s 1s 63458390e-09 0s 0s 63459550e-09 0s 0s 63467630e-09 1s 1s 63468630e-09 0s 0s 63469830e-09 0s 0s 63477870e-09 1s 1s 63478870e-09 0s 0s 63480110e-09 0s 0s 63488110e-09 1s 1s 63489110e-09 0s 0s 63490390e-09 0s 0s 63498350e-09 1s 1s 63499350e-09 0s 0s 63500670e-09 0s 0s 63508590e-09 1s 1s 63509590e-09 0s 0s 63510950e-09 0s 0s 63518830e-09 1s 1s 63519830e-09 0s 0s 63521230e-09 0s 0s 63529070e-09 1s 1s 63530070e-09 0s 0s 63531510e-09 0s 0s 63539310e-09 1s 1s 63540310e-09 0s 0s 63541790e-09 0s 0s 63549550e-09 1s 1s 63550550e-09 0s 0s 63552070e-09 0s 0s 63559790e-09 1s 1s 63560790e-09 0s 0s 63562350e-09 0s 0s 63570030e-09 1s 1s 63571030e-09 0s 0s 63572630e-09 0s 0s 63580270e-09 1s 1s 63581270e-09 0s 0s 63582910e-09 0s 0s 63590510e-09 1s 1s 63591510e-09 0s 0s 63593190e-09 0s 0s 63600750e-09 1s 1s 63601750e-09 0s 0s 63603470e-09 0s 0s 63610990e-09 1s 1s 63611990e-09 0s 0s 63613750e-09 0s 0s 63621230e-09 1s 1s 63622230e-09 0s 0s 63624030e-09 0s 0s 63631470e-09 1s 1s 63632470e-09 0s 0s 63634310e-09 0s 0s 63641710e-09 1s 1s 63642710e-09 0s 0s 63644590e-09 0s 0s 63651950e-09 1s 1s 63652950e-09 0s 0s 63654870e-09 0s 0s 63662190e-09 1s 1s 63663190e-09 0s 0s 63665150e-09 0s 0s 63672430e-09 1s 1s 63673430e-09 0s 0s 63675430e-09 0s 0s 63682670e-09 1s 1s 63683670e-09 0s 0s 63685710e-09 0s 0s 63692910e-09 1s 1s 63693910e-09 0s 0s 63695990e-09 0s 0s 63703150e-09 1s 1s 63704150e-09 0s 0s 63706270e-09 0s 0s 63713390e-09 1s 1s 63714390e-09 0s 0s 63716550e-09 0s 0s 63723630e-09 1s 1s 63724630e-09 0s 0s 63726830e-09 0s 0s 63733870e-09 1s 1s 63734870e-09 0s 0s 63737110e-09 0s 0s 63744110e-09 1s 1s 63745110e-09 0s 0s 63747390e-09 0s 0s 63754350e-09 1s 1s 63755350e-09 0s 0s 63757670e-09 0s 0s 63764590e-09 1s 1s 63765590e-09 0s 0s 63767950e-09 0s 0s 63774830e-09 1s 1s 63775830e-09 0s 0s 63778230e-09 0s 0s 63785070e-09 1s 1s 63786070e-09 0s 0s 63788510e-09 0s 0s 63795310e-09 1s 1s 63796310e-09 0s 0s 63798790e-09 0s 0s 63805550e-09 1s 1s 63806550e-09 0s 0s 63809070e-09 0s 0s 63815790e-09 1s 1s 63816790e-09 0s 0s 63819350e-09 0s 0s 63826030e-09 1s 1s 63827030e-09 0s 0s 63829630e-09 0s 0s 63836270e-09 1s 1s 63837270e-09 0s 0s 63839910e-09 0s 0s 63846510e-09 1s 1s 63847510e-09 0s 0s 63850190e-09 0s 0s 63856750e-09 1s 1s 63857750e-09 0s 0s 63860470e-09 0s 0s 63866990e-09 1s 1s 63867990e-09 0s 0s 63870750e-09 0s 0s 63877230e-09 1s 1s 63878230e-09 0s 0s 63881030e-09 0s 0s 63887470e-09 1s 1s 63888470e-09 0s 0s 63891310e-09 0s 0s 63897710e-09 1s 1s 63898710e-09 0s 0s 63901590e-09 0s 0s 63907950e-09 1s 1s 63908950e-09 0s 0s 63911870e-09 0s 0s 63918190e-09 1s 1s 63919190e-09 0s 0s 63922150e-09 0s 0s 63928430e-09 1s 1s 63929430e-09 0s 0s 63932430e-09 0s 0s 63938670e-09 1s 1s 63939670e-09 0s 0s 63942710e-09 0s 0s 63948910e-09 1s 1s 63949910e-09 0s 0s 63952990e-09 0s 0s 63959150e-09 1s 1s 63960150e-09 0s 0s 63963270e-09 0s 0s 63969390e-09 1s 1s 63970390e-09 0s 0s 63973550e-09 0s 0s 63979630e-09 1s 1s 63980630e-09 0s 0s 63983830e-09 0s 0s 63989870e-09 1s 1s 63990870e-09 0s 0s 63994110e-09 0s 0s 64000110e-09 1s 1s 64001110e-09 0s 0s 64004390e-09 0s 0s 64010350e-09 1s 1s 64011350e-09 0s 0s 64014670e-09 0s 0s 64020590e-09 1s 1s 64021590e-09 0s 0s 64024950e-09 0s 0s 64030830e-09 1s 1s 64031830e-09 0s 0s 64035230e-09 0s 0s 64041070e-09 1s 1s 64042070e-09 0s 0s 64045510e-09 0s 0s 64051310e-09 1s 1s 64052310e-09 0s 0s 64055790e-09 0s 0s 64061550e-09 1s 1s 64062550e-09 0s 0s 64066070e-09 0s 0s 64071790e-09 1s 1s 64072790e-09 0s 0s 64076350e-09 0s 0s 64082030e-09 1s 1s 64083030e-09 0s 0s 64086630e-09 0s 0s 64092270e-09 1s 1s 64093270e-09 0s 0s 64096910e-09 0s 0s 64102510e-09 1s 1s 64103510e-09 0s 0s 64107190e-09 0s 0s 64112750e-09 1s 1s 64113750e-09 0s 0s 64117470e-09 0s 0s 64122990e-09 1s 1s 64123990e-09 0s 0s 64127750e-09 0s 0s 64133230e-09 1s 1s 64134230e-09 0s 0s 64138030e-09 0s 0s 64143470e-09 1s 1s 64144470e-09 0s 0s 64148310e-09 0s 0s 64153710e-09 1s 1s 64154710e-09 0s 0s 64158590e-09 0s 0s 64163950e-09 1s 1s 64164950e-09 0s 0s 64168870e-09 0s 0s 64174190e-09 1s 1s 64175190e-09 0s 0s 64179150e-09 0s 0s 64184430e-09 1s 1s 64185430e-09 0s 0s 64189430e-09 0s 0s 64194670e-09 1s 1s 64195670e-09 0s 0s 64199710e-09 0s 0s 64204910e-09 1s 1s 64205910e-09 0s 0s 64209990e-09 0s 0s 64215150e-09 1s 1s 64216150e-09 0s 0s 64220270e-09 0s 0s 64225390e-09 1s 1s 64226390e-09 0s 0s 64230550e-09 0s 0s 64235630e-09 1s 1s 64236630e-09 0s 0s 64240830e-09 0s 0s 64245870e-09 1s 1s 64246870e-09 0s 0s 64251110e-09 0s 0s 64256110e-09 1s 1s 64257110e-09 0s 0s 64261390e-09 0s 0s 64266350e-09 1s 1s 64267350e-09 0s 0s 64271670e-09 0s 0s 64276590e-09 1s 1s 64277590e-09 0s 0s 64281950e-09 0s 0s 64286830e-09 1s 1s 64287830e-09 0s 0s 64292230e-09 0s 0s 64297070e-09 1s 1s 64298070e-09 0s 0s 64302510e-09 0s 0s 64307310e-09 1s 1s 64308310e-09 0s 0s 64312790e-09 0s 0s 64317550e-09 1s 1s 64318550e-09 0s 0s 64323070e-09 0s 0s 64327790e-09 1s 1s 64328790e-09 0s 0s 64333350e-09 0s 0s 64338030e-09 1s 1s 64339030e-09 0s 0s 64343630e-09 0s 0s 64348270e-09 1s 1s 64349270e-09 0s 0s 64353910e-09 0s 0s 64358510e-09 1s 1s 64359510e-09 0s 0s 64364190e-09 0s 0s 64368750e-09 1s 1s 64369750e-09 0s 0s 64374470e-09 0s 0s 64378990e-09 1s 1s 64379990e-09 0s 0s 64384750e-09 0s 0s 64389230e-09 1s 1s 64390230e-09 0s 0s 64395030e-09 0s 0s 64399470e-09 1s 1s 64400470e-09 0s 0s 64405310e-09 0s 0s 64409710e-09 1s 1s 64410710e-09 0s 0s 64415590e-09 0s 0s 64419950e-09 1s 1s 64420950e-09 0s 0s 64425870e-09 0s 0s 64430190e-09 1s 1s 64431190e-09 0s 0s 64436150e-09 0s 0s 64440430e-09 1s 1s 64441430e-09 0s 0s 64446430e-09 0s 0s 64450670e-09 1s 1s 64451670e-09 0s 0s 64456710e-09 0s 0s 64460910e-09 1s 1s 64461910e-09 0s 0s 64466990e-09 0s 0s 64471150e-09 1s 1s 64472150e-09 0s 0s 64477270e-09 0s 0s 64481390e-09 1s 1s 64482390e-09 0s 0s 64487550e-09 0s 0s 64491630e-09 1s 1s 64492630e-09 0s 0s 64497830e-09 0s 0s 64501870e-09 1s 1s 64502870e-09 0s 0s 64508110e-09 0s 0s 64512110e-09 1s 1s 64513110e-09 0s 0s 64518390e-09 0s 0s 64522350e-09 1s 1s 64523350e-09 0s 0s 64528670e-09 0s 0s 64532590e-09 1s 1s 64533590e-09 0s 0s 64538950e-09 0s 0s 64542830e-09 1s 1s 64543830e-09 0s 0s 64549230e-09 0s 0s 64553070e-09 1s 1s 64554070e-09 0s 0s 64559510e-09 0s 0s 64563310e-09 1s 1s 64564310e-09 0s 0s 64569790e-09 0s 0s 64573550e-09 1s 1s 64574550e-09 0s 0s 64580070e-09 0s 0s 64583790e-09 1s 1s 64584790e-09 0s 0s 64590350e-09 0s 0s 64594030e-09 1s 1s 64595030e-09 0s 0s 64600630e-09 0s 0s 64604270e-09 1s 1s 64605270e-09 0s 0s 64610910e-09 0s 0s 64614510e-09 1s 1s 64615510e-09 0s 0s 64621190e-09 0s 0s 64624750e-09 1s 1s 64625750e-09 0s 0s 64631470e-09 0s 0s 64634990e-09 1s 1s 64635990e-09 0s 0s 64641750e-09 0s 0s 64645230e-09 1s 1s 64646230e-09 0s 0s 64652030e-09 0s 0s 64655470e-09 1s 1s 64656470e-09 0s 0s 64662310e-09 0s 0s 64665710e-09 1s 1s 64666710e-09 0s 0s 64672590e-09 0s 0s 64675950e-09 1s 1s 64676950e-09 0s 0s 64682870e-09 0s 0s 64686190e-09 1s 1s 64687190e-09 0s 0s 64693150e-09 0s 0s 64696430e-09 1s 1s 64697430e-09 0s 0s 64703430e-09 0s 0s 64706670e-09 1s 1s 64707670e-09 0s 0s 64713710e-09 0s 0s 64716910e-09 1s 1s 64717910e-09 0s 0s 64723990e-09 0s 0s 64727150e-09 1s 1s 64728150e-09 0s 0s 64734270e-09 0s 0s 64737390e-09 1s 1s 64738390e-09 0s 0s 64744550e-09 0s 0s 64747630e-09 1s 1s 64748630e-09 0s 0s 64754830e-09 0s 0s 64757870e-09 1s 1s 64758870e-09 0s 0s 64765110e-09 0s 0s 64768110e-09 1s 1s 64769110e-09 0s 0s 64775390e-09 0s 0s 64778350e-09 1s 1s 64779350e-09 0s 0s 64785670e-09 0s 0s 64788590e-09 1s 1s 64789590e-09 0s 0s 64795950e-09 0s 0s 64798830e-09 1s 1s 64799830e-09 0s 0s 64806230e-09 0s 0s 64809070e-09 1s 1s 64810070e-09 0s 0s 64816510e-09 0s 0s 64819310e-09 1s 1s 64820310e-09 0s 0s 64826790e-09 0s 0s 64829550e-09 1s 1s 64830550e-09 0s 0s 64837070e-09 0s 0s 64839790e-09 1s 1s 64840790e-09 0s 0s 64847350e-09 0s 0s 64850030e-09 1s 1s 64851030e-09 0s 0s 64857630e-09 0s 0s 64860270e-09 1s 1s 64861270e-09 0s 0s 64867910e-09 0s 0s 64870510e-09 1s 1s 64871510e-09 0s 0s 64878190e-09 0s 0s 64880750e-09 1s 1s 64881750e-09 0s 0s 64888470e-09 0s 0s 64890990e-09 1s 1s 64891990e-09 0s 0s 64898750e-09 0s 0s 64901230e-09 1s 1s 64902230e-09 0s 0s 64909030e-09 0s 0s 64911470e-09 1s 1s 64912470e-09 0s 0s 64919310e-09 0s 0s 64921710e-09 1s 1s 64922710e-09 0s 0s 64929590e-09 0s 0s 64931950e-09 1s 1s 64932950e-09 0s 0s 64939870e-09 0s 0s 64942190e-09 1s 1s 64943190e-09 0s 0s 64950150e-09 0s 0s 64952430e-09 1s 1s 64953430e-09 0s 0s 64960430e-09 0s 0s 64962670e-09 1s 1s 64963670e-09 0s 0s 64970710e-09 0s 0s 64972910e-09 1s 1s 64973910e-09 0s 0s 64980990e-09 0s 0s 64983150e-09 1s 1s 64984150e-09 0s 0s 64991270e-09 0s 0s 64993390e-09 1s 1s 64994390e-09 0s 0s 65001550e-09 0s 0s 65003630e-09 1s 1s 65004630e-09 0s 0s 65011830e-09 0s 0s 65013870e-09 1s 1s 65014870e-09 0s 0s 65022110e-09 0s 0s 65024110e-09 1s 1s 65025110e-09 0s 0s 65032390e-09 0s 0s 65034350e-09 1s 1s 65035350e-09 0s 0s 65042670e-09 0s 0s 65044590e-09 1s 1s 65045590e-09 0s 0s 65052950e-09 0s 0s 65054830e-09 1s 1s 65055830e-09 0s 0s 65063230e-09 0s 0s 65065070e-09 1s 1s 65066070e-09 0s 0s 65073510e-09 0s 0s 65075310e-09 1s 1s 65076310e-09 0s 0s 65083790e-09 0s 0s 65085550e-09 1s 1s 65086550e-09 0s 0s 65094070e-09 0s 0s 65095790e-09 1s 1s 65096790e-09 0s 0s 65104350e-09 0s 0s 65106030e-09 1s 1s 65107030e-09 0s 0s 65114630e-09 0s 0s 65116270e-09 1s 1s 65117270e-09 0s 0s 65124910e-09 0s 0s 65126510e-09 1s 1s 65127510e-09 0s 0s 65135190e-09 0s 0s 65136750e-09 1s 1s 65137750e-09 0s 0s 65145470e-09 0s 0s 65146990e-09 1s 1s 65147990e-09 0s 0s 65155750e-09 0s 0s 65157230e-09 1s 1s 65158230e-09 0s 0s 65166030e-09 0s 0s 65167470e-09 1s 1s 65168470e-09 0s 0s 65176310e-09 0s 0s 65177710e-09 1s 1s 65178710e-09 0s 0s 65186590e-09 0s 0s 65187950e-09 1s 1s 65188950e-09 0s 0s 65196870e-09 0s 0s 65198190e-09 1s 1s 65199190e-09 0s 0s 65207150e-09 0s 0s 65208430e-09 1s 1s 65209430e-09 0s 0s 65217430e-09 0s 0s 65218670e-09 1s 1s 65219670e-09 0s 0s 65227710e-09 0s 0s 65228910e-09 1s 1s 65229910e-09 0s 0s 65237990e-09 0s 0s 65239150e-09 1s 1s 65240150e-09 0s 0s 65248270e-09 0s 0s 65249390e-09 1s 1s 65250390e-09 0s 0s 65258550e-09 0s 0s 65259630e-09 1s 1s 65260630e-09 0s 0s 65268830e-09 0s 0s 65269870e-09 1s 1s 65270870e-09 0s 0s 65279110e-09 0s 0s 65280110e-09 1s 1s 65281110e-09 0s 0s 65289390e-09 0s 0s 65290350e-09 1s 1s 65291350e-09 0s 0s 65299670e-09 0s 0s 65300590e-09 1s 1s 65301590e-09 0s 0s 65309950e-09 0s 0s 65310830e-09 1s 1s 65311830e-09 0s 0s 65320230e-09 0s 0s 65321070e-09 1s 1s 65322070e-09 0s 0s 65330510e-09 0s 0s 65331310e-09 1s 1s 65332310e-09 0s 0s 65340790e-09 0s 0s 65341550e-09 1s 1s 65342550e-09 0s 0s 65351070e-09 0s 0s 65351790e-09 1s 1s 65352790e-09 0s 0s 65361350e-09 0s 0s 65362030e-09 1s 1s 65363030e-09 0s 0s 65371630e-09 0s 0s 65372270e-09 1s 1s 65373270e-09 0s 0s 65381910e-09 0s 0s 65382510e-09 1s 1s 65383510e-09 0s 0s 65392190e-09 0s 0s 65392750e-09 1s 1s 65393750e-09 0s 0s 65402470e-09 0s 0s 65402990e-09 1s 1s 65403990e-09 0s 0s 65412750e-09 0s 0s 65413230e-09 1s 1s 65414230e-09 0s 0s 65423030e-09 0s 0s 65423470e-09 1s 1s 65424470e-09 0s 0s 65433310e-09 0s 0s 65433710e-09 1s 1s 65434710e-09 0s 0s 65443590e-09 0s 0s 65443950e-09 1s 1s 65444950e-09 0s 0s 65453870e-09 0s 0s 65454190e-09 1s 1s 65455190e-09 0s 0s 65464150e-09 0s 0s 65464430e-09 1s 1s 65465430e-09 0s 0s 65474430e-09 0s 0s 65474670e-09 1s 1s 65475670e-09 0s 0s 65484710e-09 0s 0s 65484910e-09 1s 1s 65485910e-09 0s 0s 65494990e-09 0s 0s 65495150e-09 1s 1s 65496150e-09 0s 0s 65505270e-09 0s 0s 65505390e-09 1s 1s 65506390e-09 0s 0s 65515550e-09 0s 0s 65515630e-09 1s 1s 65516630e-09 0s 0s 65525830e-09 0s 0s 65525870e-09 1s 1s 65526870e-09 0s 0s 65536110e-09 1s 1s 65536150e-09 1s 1s 65537150e-09 0s 0s 65546350e-09 1s 1s 65546430e-09 1s 1s 65547390e-09 0s 0s 65556590e-09 1s 1s 65556710e-09 1s 1s 65557630e-09 0s 0s 65566830e-09 1s 1s 65566990e-09 1s 1s 65567870e-09 0s 0s 65577070e-09 1s 1s 65577270e-09 1s 1s 65578110e-09 0s 0s 65587310e-09 1s 1s 65587550e-09 1s 1s 65588350e-09 0s 0s 65597550e-09 1s 1s 65597830e-09 1s 1s 65598590e-09 0s 0s 65607790e-09 1s 1s 65608110e-09 1s 1s 65608830e-09 0s 0s 65618030e-09 1s 1s 65618390e-09 1s 1s 65619070e-09 0s 0s 65628270e-09 1s 1s 65628670e-09 1s 1s 65629310e-09 0s 0s 65638510e-09 1s 1s 65638950e-09 1s 1s 65639550e-09 0s 0s 65648750e-09 1s 1s 65649230e-09 1s 1s 65649790e-09 0s 0s 65658990e-09 1s 1s 65659510e-09 1s 1s 65660030e-09 0s 0s 65669230e-09 1s 1s 65669790e-09 1s 1s 65670270e-09 0s 0s 65679470e-09 1s 1s 65680070e-09 1s 1s 65680510e-09 0s 0s 65689710e-09 1s 1s 65690350e-09 1s 1s 65690750e-09 0s 0s 65699950e-09 1s 1s 65700630e-09 1s 1s 65700990e-09 0s 0s 65710190e-09 1s 1s 65710910e-09 1s 1s 65711230e-09 0s 0s 65720430e-09 1s 1s 65721190e-09 1s 1s 65721470e-09 0s 0s 65730670e-09 1s 1s 65731470e-09 1s 1s 65731710e-09 0s 0s 65740910e-09 1s 1s 65741750e-09 1s 1s 65741950e-09 0s 0s 65751150e-09 1s 1s 65752030e-09 1s 1s 65752190e-09 0s 0s 65761390e-09 1s 1s 65762310e-09 1s 1s 65762430e-09 0s 0s 65771630e-09 1s 1s 65772590e-09 1s 1s 65772670e-09 0s 0s 65781870e-09 1s 1s 65782870e-09 1s 1s 65782910e-09 0s 0s 65792110e-09 1s 1s 65793150e-09 0s 0s 65802350e-09 1s 1s 65803390e-09 0s 0s 65803430e-09 0s 0s 65812590e-09 1s 1s 65813630e-09 0s 0s 65813710e-09 0s 0s 65822830e-09 1s 1s 65823870e-09 0s 0s 65823990e-09 0s 0s 65833070e-09 1s 1s 65834110e-09 0s 0s 65834270e-09 0s 0s 65843310e-09 1s 1s 65844350e-09 0s 0s 65844550e-09 0s 0s 65853550e-09 1s 1s 65854590e-09 0s 0s 65854830e-09 0s 0s 65863790e-09 1s 1s 65864830e-09 0s 0s 65865110e-09 0s 0s 65874030e-09 1s 1s 65875070e-09 0s 0s 65875390e-09 0s 0s 65884270e-09 1s 1s 65885310e-09 0s 0s 65885670e-09 0s 0s 65894510e-09 1s 1s 65895550e-09 0s 0s 65895950e-09 0s 0s 65904750e-09 1s 1s 65905790e-09 0s 0s 65906230e-09 0s 0s 65914990e-09 1s 1s 65916030e-09 0s 0s 65916510e-09 0s 0s 65925230e-09 1s 1s 65926270e-09 0s 0s 65926790e-09 0s 0s 65935470e-09 1s 1s 65936510e-09 0s 0s 65937070e-09 0s 0s 65945710e-09 1s 1s 65946750e-09 0s 0s 65947350e-09 0s 0s 65955950e-09 1s 1s 65956990e-09 0s 0s 65957630e-09 0s 0s 65966190e-09 1s 1s 65967230e-09 0s 0s 65967910e-09 0s 0s 65976430e-09 1s 1s 65977470e-09 0s 0s 65978190e-09 0s 0s 65986670e-09 1s 1s 65987710e-09 0s 0s 65988470e-09 0s 0s 65996910e-09 1s 1s 65997950e-09 0s 0s 65998750e-09 0s 0s 66007150e-09 1s 1s 66008190e-09 0s 0s 66009030e-09 0s 0s 66017390e-09 1s 1s 66018430e-09 0s 0s 66019310e-09 0s 0s 66027630e-09 1s 1s 66028670e-09 0s 0s 66029590e-09 0s 0s 66037870e-09 1s 1s 66038910e-09 0s 0s 66039870e-09 0s 0s 66048110e-09 1s 1s 66049150e-09 0s 0s 66050150e-09 0s 0s 66058350e-09 1s 1s 66059390e-09 0s 0s 66060430e-09 0s 0s 66068590e-09 1s 1s 66069630e-09 0s 0s 66070710e-09 0s 0s 66078830e-09 1s 1s 66079870e-09 0s 0s 66080990e-09 0s 0s 66089070e-09 1s 1s 66090110e-09 0s 0s 66091270e-09 0s 0s 66099310e-09 1s 1s 66100350e-09 0s 0s 66101550e-09 0s 0s 66109550e-09 1s 1s 66110590e-09 0s 0s 66111830e-09 0s 0s 66119790e-09 1s 1s 66120830e-09 0s 0s 66122110e-09 0s 0s 66130030e-09 1s 1s 66131070e-09 0s 0s 66132390e-09 0s 0s 66140270e-09 1s 1s 66141310e-09 0s 0s 66142670e-09 0s 0s 66150510e-09 1s 1s 66151550e-09 0s 0s 66152950e-09 0s 0s 66160750e-09 1s 1s 66161790e-09 0s 0s 66163230e-09 0s 0s 66170990e-09 1s 1s 66172030e-09 0s 0s 66173510e-09 0s 0s 66181230e-09 1s 1s 66182270e-09 0s 0s 66183790e-09 0s 0s 66191470e-09 1s 1s 66192510e-09 0s 0s 66194070e-09 0s 0s 66201710e-09 1s 1s 66202750e-09 0s 0s 66204350e-09 0s 0s 66211950e-09 1s 1s 66212990e-09 0s 0s 66214630e-09 0s 0s 66222190e-09 1s 1s 66223230e-09 0s 0s 66224910e-09 0s 0s 66232430e-09 1s 1s 66233470e-09 0s 0s 66235190e-09 0s 0s 66242670e-09 1s 1s 66243710e-09 0s 0s 66245470e-09 0s 0s 66252910e-09 1s 1s 66253950e-09 0s 0s 66255750e-09 0s 0s 66263150e-09 1s 1s 66264190e-09 0s 0s 66266030e-09 0s 0s 66273390e-09 1s 1s 66274430e-09 0s 0s 66276310e-09 0s 0s 66283630e-09 1s 1s 66284670e-09 0s 0s 66286590e-09 0s 0s 66293870e-09 1s 1s 66294910e-09 0s 0s 66296870e-09 0s 0s 66304110e-09 1s 1s 66305150e-09 0s 0s 66307150e-09 0s 0s 66314350e-09 1s 1s 66315390e-09 0s 0s 66317430e-09 0s 0s 66324590e-09 1s 1s 66325630e-09 0s 0s 66327710e-09 0s 0s 66334830e-09 1s 1s 66335870e-09 0s 0s 66337990e-09 0s 0s 66345070e-09 1s 1s 66346110e-09 0s 0s 66348270e-09 0s 0s 66355310e-09 1s 1s 66356350e-09 0s 0s 66358550e-09 0s 0s 66365550e-09 1s 1s 66366590e-09 0s 0s 66368830e-09 0s 0s 66375790e-09 1s 1s 66376830e-09 0s 0s 66379110e-09 0s 0s 66386030e-09 1s 1s 66387070e-09 0s 0s 66389390e-09 0s 0s 66396270e-09 1s 1s 66397310e-09 0s 0s 66399670e-09 0s 0s 66406510e-09 1s 1s 66407550e-09 0s 0s 66409950e-09 0s 0s 66416750e-09 1s 1s 66417790e-09 0s 0s 66420230e-09 0s 0s 66426990e-09 1s 1s 66428030e-09 0s 0s 66430510e-09 0s 0s 66437230e-09 1s 1s 66438270e-09 0s 0s 66440790e-09 0s 0s 66447470e-09 1s 1s 66448510e-09 0s 0s 66451070e-09 0s 0s 66457710e-09 1s 1s 66458750e-09 0s 0s 66461350e-09 0s 0s 66467950e-09 1s 1s 66468990e-09 0s 0s 66471630e-09 0s 0s 66478190e-09 1s 1s 66479230e-09 0s 0s 66481910e-09 0s 0s 66488430e-09 1s 1s 66489470e-09 0s 0s 66492190e-09 0s 0s 66498670e-09 1s 1s 66499710e-09 0s 0s 66502470e-09 0s 0s 66508910e-09 1s 1s 66509950e-09 0s 0s 66512750e-09 0s 0s 66519150e-09 1s 1s 66520190e-09 0s 0s 66523030e-09 0s 0s 66529390e-09 1s 1s 66530430e-09 0s 0s 66533310e-09 0s 0s 66539630e-09 1s 1s 66540670e-09 0s 0s 66543590e-09 0s 0s 66549870e-09 1s 1s 66550910e-09 0s 0s 66553870e-09 0s 0s 66560110e-09 1s 1s 66561150e-09 0s 0s 66564150e-09 0s 0s 66570350e-09 1s 1s 66571390e-09 0s 0s 66574430e-09 0s 0s 66580590e-09 1s 1s 66581630e-09 0s 0s 66584710e-09 0s 0s 66590830e-09 1s 1s 66591870e-09 0s 0s 66594990e-09 0s 0s 66601070e-09 1s 1s 66602110e-09 0s 0s 66605270e-09 0s 0s 66611310e-09 1s 1s 66612350e-09 0s 0s 66615550e-09 0s 0s 66621550e-09 1s 1s 66622590e-09 0s 0s 66625830e-09 0s 0s 66631790e-09 1s 1s 66632830e-09 0s 0s 66636110e-09 0s 0s 66642030e-09 1s 1s 66643070e-09 0s 0s 66646390e-09 0s 0s 66652270e-09 1s 1s 66653310e-09 0s 0s 66656670e-09 0s 0s 66662510e-09 1s 1s 66663550e-09 0s 0s 66666950e-09 0s 0s 66672750e-09 1s 1s 66673790e-09 0s 0s 66677230e-09 0s 0s 66682990e-09 1s 1s 66684030e-09 0s 0s 66687510e-09 0s 0s 66693230e-09 1s 1s 66694270e-09 0s 0s 66697790e-09 0s 0s 66703470e-09 1s 1s 66704510e-09 0s 0s 66708070e-09 0s 0s 66713710e-09 1s 1s 66714750e-09 0s 0s 66718350e-09 0s 0s 66723950e-09 1s 1s 66724990e-09 0s 0s 66728630e-09 0s 0s 66734190e-09 1s 1s 66735230e-09 0s 0s 66738910e-09 0s 0s 66744430e-09 1s 1s 66745470e-09 0s 0s 66749190e-09 0s 0s 66754670e-09 1s 1s 66755710e-09 0s 0s 66759470e-09 0s 0s 66764910e-09 1s 1s 66765950e-09 0s 0s 66769750e-09 0s 0s 66775150e-09 1s 1s 66776190e-09 0s 0s 66780030e-09 0s 0s 66785390e-09 1s 1s 66786430e-09 0s 0s 66790310e-09 0s 0s 66795630e-09 1s 1s 66796670e-09 0s 0s 66800590e-09 0s 0s 66805870e-09 1s 1s 66806910e-09 0s 0s 66810870e-09 0s 0s 66816110e-09 1s 1s 66817150e-09 0s 0s 66821150e-09 0s 0s 66826350e-09 1s 1s 66827390e-09 0s 0s 66831430e-09 0s 0s 66836590e-09 1s 1s 66837630e-09 0s 0s 66841710e-09 0s 0s 66846830e-09 1s 1s 66847870e-09 0s 0s 66851990e-09 0s 0s 66857070e-09 1s 1s 66858110e-09 0s 0s 66862270e-09 0s 0s 66867310e-09 1s 1s 66868350e-09 0s 0s 66872550e-09 0s 0s 66877550e-09 1s 1s 66878590e-09 0s 0s 66882830e-09 0s 0s 66887790e-09 1s 1s 66888830e-09 0s 0s 66893110e-09 0s 0s 66898030e-09 1s 1s 66899070e-09 0s 0s 66903390e-09 0s 0s 66908270e-09 1s 1s 66909310e-09 0s 0s 66913670e-09 0s 0s 66918510e-09 1s 1s 66919550e-09 0s 0s 66923950e-09 0s 0s 66928750e-09 1s 1s 66929790e-09 0s 0s 66934230e-09 0s 0s 66938990e-09 1s 1s 66940030e-09 0s 0s 66944510e-09 0s 0s 66949230e-09 1s 1s 66950270e-09 0s 0s 66954790e-09 0s 0s 66959470e-09 1s 1s 66960510e-09 0s 0s 66965070e-09 0s 0s 66969710e-09 1s 1s 66970750e-09 0s 0s 66975350e-09 0s 0s 66979950e-09 1s 1s 66980990e-09 0s 0s 66985630e-09 0s 0s 66990190e-09 1s 1s 66991230e-09 0s 0s 66995910e-09 0s 0s 67000430e-09 1s 1s 67001470e-09 0s 0s 67006190e-09 0s 0s 67010670e-09 1s 1s 67011710e-09 0s 0s 67016470e-09 0s 0s 67020910e-09 1s 1s 67021950e-09 0s 0s 67026750e-09 0s 0s 67031150e-09 1s 1s 67032190e-09 0s 0s 67037030e-09 0s 0s 67041390e-09 1s 1s 67042430e-09 0s 0s 67047310e-09 0s 0s 67051630e-09 1s 1s 67052670e-09 0s 0s 67057590e-09 0s 0s 67061870e-09 1s 1s 67062910e-09 0s 0s 67067870e-09 0s 0s 67072110e-09 1s 1s 67073150e-09 0s 0s 67078150e-09 0s 0s 67082350e-09 1s 1s 67083390e-09 0s 0s 67088430e-09 0s 0s 67092590e-09 1s 1s 67093630e-09 0s 0s 67098710e-09 0s 0s 67102830e-09 1s 1s 67103870e-09 0s 0s 67108990e-09 0s 0s 67113070e-09 1s 1s 67114110e-09 0s 0s 67119270e-09 0s 0s 67123310e-09 1s 1s 67124350e-09 0s 0s 67129550e-09 0s 0s 67133550e-09 1s 1s 67134590e-09 0s 0s 67139830e-09 0s 0s 67143790e-09 1s 1s 67144830e-09 0s 0s 67150110e-09 0s 0s 67154030e-09 1s 1s 67155070e-09 0s 0s 67160390e-09 0s 0s 67164270e-09 1s 1s 67165310e-09 0s 0s 67170670e-09 0s 0s 67174510e-09 1s 1s 67175550e-09 0s 0s 67180950e-09 0s 0s 67184750e-09 1s 1s 67185790e-09 0s 0s 67191230e-09 0s 0s 67194990e-09 1s 1s 67196030e-09 0s 0s 67201510e-09 0s 0s 67205230e-09 1s 1s 67206270e-09 0s 0s 67211790e-09 0s 0s 67215470e-09 1s 1s 67216510e-09 0s 0s 67222070e-09 0s 0s 67225710e-09 1s 1s 67226750e-09 0s 0s 67232350e-09 0s 0s 67235950e-09 1s 1s 67236990e-09 0s 0s 67242630e-09 0s 0s 67246190e-09 1s 1s 67247230e-09 0s 0s 67252910e-09 0s 0s 67256430e-09 1s 1s 67257470e-09 0s 0s 67263190e-09 0s 0s 67266670e-09 1s 1s 67267710e-09 0s 0s 67273470e-09 0s 0s 67276910e-09 1s 1s 67277950e-09 0s 0s 67283750e-09 0s 0s 67287150e-09 1s 1s 67288190e-09 0s 0s 67294030e-09 0s 0s 67297390e-09 1s 1s 67298430e-09 0s 0s 67304310e-09 0s 0s 67307630e-09 1s 1s 67308670e-09 0s 0s 67314590e-09 0s 0s 67317870e-09 1s 1s 67318910e-09 0s 0s 67324870e-09 0s 0s 67328110e-09 1s 1s 67329150e-09 0s 0s 67335150e-09 0s 0s 67338350e-09 1s 1s 67339390e-09 0s 0s 67345430e-09 0s 0s 67348590e-09 1s 1s 67349630e-09 0s 0s 67355710e-09 0s 0s 67358830e-09 1s 1s 67359870e-09 0s 0s 67365990e-09 0s 0s 67369070e-09 1s 1s 67370110e-09 0s 0s 67376270e-09 0s 0s 67379310e-09 1s 1s 67380350e-09 0s 0s 67386550e-09 0s 0s 67389550e-09 1s 1s 67390590e-09 0s 0s 67396830e-09 0s 0s 67399790e-09 1s 1s 67400830e-09 0s 0s 67407110e-09 0s 0s 67410030e-09 1s 1s 67411070e-09 0s 0s 67417390e-09 0s 0s 67420270e-09 1s 1s 67421310e-09 0s 0s 67427670e-09 0s 0s 67430510e-09 1s 1s 67431550e-09 0s 0s 67437950e-09 0s 0s 67440750e-09 1s 1s 67441790e-09 0s 0s 67448230e-09 0s 0s 67450990e-09 1s 1s 67452030e-09 0s 0s 67458510e-09 0s 0s 67461230e-09 1s 1s 67462270e-09 0s 0s 67468790e-09 0s 0s 67471470e-09 1s 1s 67472510e-09 0s 0s 67479070e-09 0s 0s 67481710e-09 1s 1s 67482750e-09 0s 0s 67489350e-09 0s 0s 67491950e-09 1s 1s 67492990e-09 0s 0s 67499630e-09 0s 0s 67502190e-09 1s 1s 67503230e-09 0s 0s 67509910e-09 0s 0s 67512430e-09 1s 1s 67513470e-09 0s 0s 67520190e-09 0s 0s 67522670e-09 1s 1s 67523710e-09 0s 0s 67530470e-09 0s 0s 67532910e-09 1s 1s 67533950e-09 0s 0s 67540750e-09 0s 0s 67543150e-09 1s 1s 67544190e-09 0s 0s 67551030e-09 0s 0s 67553390e-09 1s 1s 67554430e-09 0s 0s 67561310e-09 0s 0s 67563630e-09 1s 1s 67564670e-09 0s 0s 67571590e-09 0s 0s 67573870e-09 1s 1s 67574910e-09 0s 0s 67581870e-09 0s 0s 67584110e-09 1s 1s 67585150e-09 0s 0s 67592150e-09 0s 0s 67594350e-09 1s 1s 67595390e-09 0s 0s 67602430e-09 0s 0s 67604590e-09 1s 1s 67605630e-09 0s 0s 67612710e-09 0s 0s 67614830e-09 1s 1s 67615870e-09 0s 0s 67622990e-09 0s 0s 67625070e-09 1s 1s 67626110e-09 0s 0s 67633270e-09 0s 0s 67635310e-09 1s 1s 67636350e-09 0s 0s 67643550e-09 0s 0s 67645550e-09 1s 1s 67646590e-09 0s 0s 67653830e-09 0s 0s 67655790e-09 1s 1s 67656830e-09 0s 0s 67664110e-09 0s 0s 67666030e-09 1s 1s 67667070e-09 0s 0s 67674390e-09 0s 0s 67676270e-09 1s 1s 67677310e-09 0s 0s 67684670e-09 0s 0s 67686510e-09 1s 1s 67687550e-09 0s 0s 67694950e-09 0s 0s 67696750e-09 1s 1s 67697790e-09 0s 0s 67705230e-09 0s 0s 67706990e-09 1s 1s 67708030e-09 0s 0s 67715510e-09 0s 0s 67717230e-09 1s 1s 67718270e-09 0s 0s 67725790e-09 0s 0s 67727470e-09 1s 1s 67728510e-09 0s 0s 67736070e-09 0s 0s 67737710e-09 1s 1s 67738750e-09 0s 0s 67746350e-09 0s 0s 67747950e-09 1s 1s 67748990e-09 0s 0s 67756630e-09 0s 0s 67758190e-09 1s 1s 67759230e-09 0s 0s 67766910e-09 0s 0s 67768430e-09 1s 1s 67769470e-09 0s 0s 67777190e-09 0s 0s 67778670e-09 1s 1s 67779710e-09 0s 0s 67787470e-09 0s 0s 67788910e-09 1s 1s 67789950e-09 0s 0s 67797750e-09 0s 0s 67799150e-09 1s 1s 67800190e-09 0s 0s 67808030e-09 0s 0s 67809390e-09 1s 1s 67810430e-09 0s 0s 67818310e-09 0s 0s 67819630e-09 1s 1s 67820670e-09 0s 0s 67828590e-09 0s 0s 67829870e-09 1s 1s 67830910e-09 0s 0s 67838870e-09 0s 0s 67840110e-09 1s 1s 67841150e-09 0s 0s 67849150e-09 0s 0s 67850350e-09 1s 1s 67851390e-09 0s 0s 67859430e-09 0s 0s 67860590e-09 1s 1s 67861630e-09 0s 0s 67869710e-09 0s 0s 67870830e-09 1s 1s 67871870e-09 0s 0s 67879990e-09 0s 0s 67881070e-09 1s 1s 67882110e-09 0s 0s 67890270e-09 0s 0s 67891310e-09 1s 1s 67892350e-09 0s 0s 67900550e-09 0s 0s 67901550e-09 1s 1s 67902590e-09 0s 0s 67910830e-09 0s 0s 67911790e-09 1s 1s 67912830e-09 0s 0s 67921110e-09 0s 0s 67922030e-09 1s 1s 67923070e-09 0s 0s 67931390e-09 0s 0s 67932270e-09 1s 1s 67933310e-09 0s 0s 67941670e-09 0s 0s 67942510e-09 1s 1s 67943550e-09 0s 0s 67951950e-09 0s 0s 67952750e-09 1s 1s 67953790e-09 0s 0s 67962230e-09 0s 0s 67962990e-09 1s 1s 67964030e-09 0s 0s 67972510e-09 0s 0s 67973230e-09 1s 1s 67974270e-09 0s 0s 67982790e-09 0s 0s 67983470e-09 1s 1s 67984510e-09 0s 0s 67993070e-09 0s 0s 67993710e-09 1s 1s 67994750e-09 0s 0s 68003350e-09 0s 0s 68003950e-09 1s 1s 68004990e-09 0s 0s 68013630e-09 0s 0s 68014190e-09 1s 1s 68015230e-09 0s 0s 68023910e-09 0s 0s 68024430e-09 1s 1s 68025470e-09 0s 0s 68034190e-09 0s 0s 68034670e-09 1s 1s 68035710e-09 0s 0s 68044470e-09 0s 0s 68044910e-09 1s 1s 68045950e-09 0s 0s 68054750e-09 0s 0s 68055150e-09 1s 1s 68056190e-09 0s 0s 68065030e-09 0s 0s 68065390e-09 1s 1s 68066430e-09 0s 0s 68075310e-09 0s 0s 68075630e-09 1s 1s 68076670e-09 0s 0s 68085590e-09 0s 0s 68085870e-09 1s 1s 68086910e-09 0s 0s 68095870e-09 0s 0s 68096110e-09 1s 1s 68097150e-09 0s 0s 68106150e-09 0s 0s 68106350e-09 1s 1s 68107390e-09 0s 0s 68116430e-09 0s 0s 68116590e-09 1s 1s 68117630e-09 0s 0s 68126710e-09 0s 0s 68126830e-09 1s 1s 68127870e-09 0s 0s 68136990e-09 0s 0s 68137070e-09 1s 1s 68138110e-09 0s 0s 68147270e-09 0s 0s 68147310e-09 1s 1s 68148350e-09 0s 0s 68157550e-09 1s 1s 68157590e-09 1s 1s 68158630e-09 0s 0s 68167790e-09 1s 1s 68167870e-09 1s 1s 68168870e-09 0s 0s 68178030e-09 1s 1s 68178150e-09 1s 1s 68179110e-09 0s 0s 68188270e-09 1s 1s 68188430e-09 1s 1s 68189350e-09 0s 0s 68198510e-09 1s 1s 68198710e-09 1s 1s 68199590e-09 0s 0s 68208750e-09 1s 1s 68208990e-09 1s 1s 68209830e-09 0s 0s 68218990e-09 1s 1s 68219270e-09 1s 1s 68220070e-09 0s 0s 68229230e-09 1s 1s 68229550e-09 1s 1s 68230310e-09 0s 0s 68239470e-09 1s 1s 68239830e-09 1s 1s 68240550e-09 0s 0s 68249710e-09 1s 1s 68250110e-09 1s 1s 68250790e-09 0s 0s 68259950e-09 1s 1s 68260390e-09 1s 1s 68261030e-09 0s 0s 68270190e-09 1s 1s 68270670e-09 1s 1s 68271270e-09 0s 0s 68280430e-09 1s 1s 68280950e-09 1s 1s 68281510e-09 0s 0s 68290670e-09 1s 1s 68291230e-09 1s 1s 68291750e-09 0s 0s 68300910e-09 1s 1s 68301510e-09 1s 1s 68301990e-09 0s 0s 68311150e-09 1s 1s 68311790e-09 1s 1s 68312230e-09 0s 0s 68321390e-09 1s 1s 68322070e-09 1s 1s 68322470e-09 0s 0s 68331630e-09 1s 1s 68332350e-09 1s 1s 68332710e-09 0s 0s 68341870e-09 1s 1s 68342630e-09 1s 1s 68342950e-09 0s 0s 68352110e-09 1s 1s 68352910e-09 1s 1s 68353190e-09 0s 0s 68362350e-09 1s 1s 68363190e-09 1s 1s 68363430e-09 0s 0s 68372590e-09 1s 1s 68373470e-09 1s 1s 68373670e-09 0s 0s 68382830e-09 1s 1s 68383750e-09 1s 1s 68383910e-09 0s 0s 68393070e-09 1s 1s 68394030e-09 1s 1s 68394150e-09 0s 0s 68403310e-09 1s 1s 68404310e-09 1s 1s 68404390e-09 0s 0s 68413550e-09 1s 1s 68414590e-09 1s 1s 68414630e-09 0s 0s 68423790e-09 1s 1s 68424870e-09 0s 0s 68434030e-09 1s 1s 68435110e-09 0s 0s 68435150e-09 0s 0s 68444270e-09 1s 1s 68445350e-09 0s 0s 68445430e-09 0s 0s 68454510e-09 1s 1s 68455590e-09 0s 0s 68455710e-09 0s 0s 68464750e-09 1s 1s 68465830e-09 0s 0s 68465990e-09 0s 0s 68474990e-09 1s 1s 68476070e-09 0s 0s 68476270e-09 0s 0s 68485230e-09 1s 1s 68486310e-09 0s 0s 68486550e-09 0s 0s 68495470e-09 1s 1s 68496550e-09 0s 0s 68496830e-09 0s 0s 68505710e-09 1s 1s 68506790e-09 0s 0s 68507110e-09 0s 0s 68515950e-09 1s 1s 68517030e-09 0s 0s 68517390e-09 0s 0s 68526190e-09 1s 1s 68527270e-09 0s 0s 68527670e-09 0s 0s 68536430e-09 1s 1s 68537510e-09 0s 0s 68537950e-09 0s 0s 68546670e-09 1s 1s 68547750e-09 0s 0s 68548230e-09 0s 0s 68556910e-09 1s 1s 68557990e-09 0s 0s 68558510e-09 0s 0s 68567150e-09 1s 1s 68568230e-09 0s 0s 68568790e-09 0s 0s 68577390e-09 1s 1s 68578470e-09 0s 0s 68579070e-09 0s 0s 68587630e-09 1s 1s 68588710e-09 0s 0s 68589350e-09 0s 0s 68597870e-09 1s 1s 68598950e-09 0s 0s 68599630e-09 0s 0s 68608110e-09 1s 1s 68609190e-09 0s 0s 68609910e-09 0s 0s 68618350e-09 1s 1s 68619430e-09 0s 0s 68620190e-09 0s 0s 68628590e-09 1s 1s 68629670e-09 0s 0s 68630470e-09 0s 0s 68638830e-09 1s 1s 68639910e-09 0s 0s 68640750e-09 0s 0s 68649070e-09 1s 1s 68650150e-09 0s 0s 68651030e-09 0s 0s 68659310e-09 1s 1s 68660390e-09 0s 0s 68661310e-09 0s 0s 68669550e-09 1s 1s 68670630e-09 0s 0s 68671590e-09 0s 0s 68679790e-09 1s 1s 68680870e-09 0s 0s 68681870e-09 0s 0s 68690030e-09 1s 1s 68691110e-09 0s 0s 68692150e-09 0s 0s 68700270e-09 1s 1s 68701350e-09 0s 0s 68702430e-09 0s 0s 68710510e-09 1s 1s 68711590e-09 0s 0s 68712710e-09 0s 0s 68720750e-09 1s 1s 68721830e-09 0s 0s 68722990e-09 0s 0s 68730990e-09 1s 1s 68732070e-09 0s 0s 68733270e-09 0s 0s 68741230e-09 1s 1s 68742310e-09 0s 0s 68743550e-09 0s 0s 68751470e-09 1s 1s 68752550e-09 0s 0s 68753830e-09 0s 0s 68761710e-09 1s 1s 68762790e-09 0s 0s 68764110e-09 0s 0s 68771950e-09 1s 1s 68773030e-09 0s 0s 68774390e-09 0s 0s 68782190e-09 1s 1s 68783270e-09 0s 0s 68784670e-09 0s 0s 68792430e-09 1s 1s 68793510e-09 0s 0s 68794950e-09 0s 0s 68802670e-09 1s 1s 68803750e-09 0s 0s 68805230e-09 0s 0s 68812910e-09 1s 1s 68813990e-09 0s 0s 68815510e-09 0s 0s 68823150e-09 1s 1s 68824230e-09 0s 0s 68825790e-09 0s 0s 68833390e-09 1s 1s 68834470e-09 0s 0s 68836070e-09 0s 0s 68843630e-09 1s 1s 68844710e-09 0s 0s 68846350e-09 0s 0s 68853870e-09 1s 1s 68854950e-09 0s 0s 68856630e-09 0s 0s 68864110e-09 1s 1s 68865190e-09 0s 0s 68866910e-09 0s 0s 68874350e-09 1s 1s 68875430e-09 0s 0s 68877190e-09 0s 0s 68884590e-09 1s 1s 68885670e-09 0s 0s 68887470e-09 0s 0s 68894830e-09 1s 1s 68895910e-09 0s 0s 68897750e-09 0s 0s 68905070e-09 1s 1s 68906150e-09 0s 0s 68908030e-09 0s 0s 68915310e-09 1s 1s 68916390e-09 0s 0s 68918310e-09 0s 0s 68925550e-09 1s 1s 68926630e-09 0s 0s 68928590e-09 0s 0s 68935790e-09 1s 1s 68936870e-09 0s 0s 68938870e-09 0s 0s 68946030e-09 1s 1s 68947110e-09 0s 0s 68949150e-09 0s 0s 68956270e-09 1s 1s 68957350e-09 0s 0s 68959430e-09 0s 0s 68966510e-09 1s 1s 68967590e-09 0s 0s 68969710e-09 0s 0s 68976750e-09 1s 1s 68977830e-09 0s 0s 68979990e-09 0s 0s 68986990e-09 1s 1s 68988070e-09 0s 0s 68990270e-09 0s 0s 68997230e-09 1s 1s 68998310e-09 0s 0s 69000550e-09 0s 0s 69007470e-09 1s 1s 69008550e-09 0s 0s 69010830e-09 0s 0s 69017710e-09 1s 1s 69018790e-09 0s 0s 69021110e-09 0s 0s 69027950e-09 1s 1s 69029030e-09 0s 0s 69031390e-09 0s 0s 69038190e-09 1s 1s 69039270e-09 0s 0s 69041670e-09 0s 0s 69048430e-09 1s 1s 69049510e-09 0s 0s 69051950e-09 0s 0s 69058670e-09 1s 1s 69059750e-09 0s 0s 69062230e-09 0s 0s 69068910e-09 1s 1s 69069990e-09 0s 0s 69072510e-09 0s 0s 69079150e-09 1s 1s 69080230e-09 0s 0s 69082790e-09 0s 0s 69089390e-09 1s 1s 69090470e-09 0s 0s 69093070e-09 0s 0s 69099630e-09 1s 1s 69100710e-09 0s 0s 69103350e-09 0s 0s 69109870e-09 1s 1s 69110950e-09 0s 0s 69113630e-09 0s 0s 69120110e-09 1s 1s 69121190e-09 0s 0s 69123910e-09 0s 0s 69130350e-09 1s 1s 69131430e-09 0s 0s 69134190e-09 0s 0s 69140590e-09 1s 1s 69141670e-09 0s 0s 69144470e-09 0s 0s 69150830e-09 1s 1s 69151910e-09 0s 0s 69154750e-09 0s 0s 69161070e-09 1s 1s 69162150e-09 0s 0s 69165030e-09 0s 0s 69171310e-09 1s 1s 69172390e-09 0s 0s 69175310e-09 0s 0s 69181550e-09 1s 1s 69182630e-09 0s 0s 69185590e-09 0s 0s 69191790e-09 1s 1s 69192870e-09 0s 0s 69195870e-09 0s 0s 69202030e-09 1s 1s 69203110e-09 0s 0s 69206150e-09 0s 0s 69212270e-09 1s 1s 69213350e-09 0s 0s 69216430e-09 0s 0s 69222510e-09 1s 1s 69223590e-09 0s 0s 69226710e-09 0s 0s 69232750e-09 1s 1s 69233830e-09 0s 0s 69236990e-09 0s 0s 69242990e-09 1s 1s 69244070e-09 0s 0s 69247270e-09 0s 0s 69253230e-09 1s 1s 69254310e-09 0s 0s 69257550e-09 0s 0s 69263470e-09 1s 1s 69264550e-09 0s 0s 69267830e-09 0s 0s 69273710e-09 1s 1s 69274790e-09 0s 0s 69278110e-09 0s 0s 69283950e-09 1s 1s 69285030e-09 0s 0s 69288390e-09 0s 0s 69294190e-09 1s 1s 69295270e-09 0s 0s 69298670e-09 0s 0s 69304430e-09 1s 1s 69305510e-09 0s 0s 69308950e-09 0s 0s 69314670e-09 1s 1s 69315750e-09 0s 0s 69319230e-09 0s 0s 69324910e-09 1s 1s 69325990e-09 0s 0s 69329510e-09 0s 0s 69335150e-09 1s 1s 69336230e-09 0s 0s 69339790e-09 0s 0s 69345390e-09 1s 1s 69346470e-09 0s 0s 69350070e-09 0s 0s 69355630e-09 1s 1s 69356710e-09 0s 0s 69360350e-09 0s 0s 69365870e-09 1s 1s 69366950e-09 0s 0s 69370630e-09 0s 0s 69376110e-09 1s 1s 69377190e-09 0s 0s 69380910e-09 0s 0s 69386350e-09 1s 1s 69387430e-09 0s 0s 69391190e-09 0s 0s 69396590e-09 1s 1s 69397670e-09 0s 0s 69401470e-09 0s 0s 69406830e-09 1s 1s 69407910e-09 0s 0s 69411750e-09 0s 0s 69417070e-09 1s 1s 69418150e-09 0s 0s 69422030e-09 0s 0s 69427310e-09 1s 1s 69428390e-09 0s 0s 69432310e-09 0s 0s 69437550e-09 1s 1s 69438630e-09 0s 0s 69442590e-09 0s 0s 69447790e-09 1s 1s 69448870e-09 0s 0s 69452870e-09 0s 0s 69458030e-09 1s 1s 69459110e-09 0s 0s 69463150e-09 0s 0s 69468270e-09 1s 1s 69469350e-09 0s 0s 69473430e-09 0s 0s 69478510e-09 1s 1s 69479590e-09 0s 0s 69483710e-09 0s 0s 69488750e-09 1s 1s 69489830e-09 0s 0s 69493990e-09 0s 0s 69498990e-09 1s 1s 69500070e-09 0s 0s 69504270e-09 0s 0s 69509230e-09 1s 1s 69510310e-09 0s 0s 69514550e-09 0s 0s 69519470e-09 1s 1s 69520550e-09 0s 0s 69524830e-09 0s 0s 69529710e-09 1s 1s 69530790e-09 0s 0s 69535110e-09 0s 0s 69539950e-09 1s 1s 69541030e-09 0s 0s 69545390e-09 0s 0s 69550190e-09 1s 1s 69551270e-09 0s 0s 69555670e-09 0s 0s 69560430e-09 1s 1s 69561510e-09 0s 0s 69565950e-09 0s 0s 69570670e-09 1s 1s 69571750e-09 0s 0s 69576230e-09 0s 0s 69580910e-09 1s 1s 69581990e-09 0s 0s 69586510e-09 0s 0s 69591150e-09 1s 1s 69592230e-09 0s 0s 69596790e-09 0s 0s 69601390e-09 1s 1s 69602470e-09 0s 0s 69607070e-09 0s 0s 69611630e-09 1s 1s 69612710e-09 0s 0s 69617350e-09 0s 0s 69621870e-09 1s 1s 69622950e-09 0s 0s 69627630e-09 0s 0s 69632110e-09 1s 1s 69633190e-09 0s 0s 69637910e-09 0s 0s 69642350e-09 1s 1s 69643430e-09 0s 0s 69648190e-09 0s 0s 69652590e-09 1s 1s 69653670e-09 0s 0s 69658470e-09 0s 0s 69662830e-09 1s 1s 69663910e-09 0s 0s 69668750e-09 0s 0s 69673070e-09 1s 1s 69674150e-09 0s 0s 69679030e-09 0s 0s 69683310e-09 1s 1s 69684390e-09 0s 0s 69689310e-09 0s 0s 69693550e-09 1s 1s 69694630e-09 0s 0s 69699590e-09 0s 0s 69703790e-09 1s 1s 69704870e-09 0s 0s 69709870e-09 0s 0s 69714030e-09 1s 1s 69715110e-09 0s 0s 69720150e-09 0s 0s 69724270e-09 1s 1s 69725350e-09 0s 0s 69730430e-09 0s 0s 69734510e-09 1s 1s 69735590e-09 0s 0s 69740710e-09 0s 0s 69744750e-09 1s 1s 69745830e-09 0s 0s 69750990e-09 0s 0s 69754990e-09 1s 1s 69756070e-09 0s 0s 69761270e-09 0s 0s 69765230e-09 1s 1s 69766310e-09 0s 0s 69771550e-09 0s 0s 69775470e-09 1s 1s 69776550e-09 0s 0s 69781830e-09 0s 0s 69785710e-09 1s 1s 69786790e-09 0s 0s 69792110e-09 0s 0s 69795950e-09 1s 1s 69797030e-09 0s 0s 69802390e-09 0s 0s 69806190e-09 1s 1s 69807270e-09 0s 0s 69812670e-09 0s 0s 69816430e-09 1s 1s 69817510e-09 0s 0s 69822950e-09 0s 0s 69826670e-09 1s 1s 69827750e-09 0s 0s 69833230e-09 0s 0s 69836910e-09 1s 1s 69837990e-09 0s 0s 69843510e-09 0s 0s 69847150e-09 1s 1s 69848230e-09 0s 0s 69853790e-09 0s 0s 69857390e-09 1s 1s 69858470e-09 0s 0s 69864070e-09 0s 0s 69867630e-09 1s 1s 69868710e-09 0s 0s 69874350e-09 0s 0s 69877870e-09 1s 1s 69878950e-09 0s 0s 69884630e-09 0s 0s 69888110e-09 1s 1s 69889190e-09 0s 0s 69894910e-09 0s 0s 69898350e-09 1s 1s 69899430e-09 0s 0s 69905190e-09 0s 0s 69908590e-09 1s 1s 69909670e-09 0s 0s 69915470e-09 0s 0s 69918830e-09 1s 1s 69919910e-09 0s 0s 69925750e-09 0s 0s 69929070e-09 1s 1s 69930150e-09 0s 0s 69936030e-09 0s 0s 69939310e-09 1s 1s 69940390e-09 0s 0s 69946310e-09 0s 0s 69949550e-09 1s 1s 69950630e-09 0s 0s 69956590e-09 0s 0s 69959790e-09 1s 1s 69960870e-09 0s 0s 69966870e-09 0s 0s 69970030e-09 1s 1s 69971110e-09 0s 0s 69977150e-09 0s 0s 69980270e-09 1s 1s 69981350e-09 0s 0s 69987430e-09 0s 0s 69990510e-09 1s 1s 69991590e-09 0s 0s 69997710e-09 0s 0s 70000750e-09 1s 1s 70001830e-09 0s 0s 70007990e-09 0s 0s 70010990e-09 1s 1s 70012070e-09 0s 0s 70018270e-09 0s 0s 70021230e-09 1s 1s 70022310e-09 0s 0s 70028550e-09 0s 0s 70031470e-09 1s 1s 70032550e-09 0s 0s 70038830e-09 0s 0s 70041710e-09 1s 1s 70042790e-09 0s 0s 70049110e-09 0s 0s 70051950e-09 1s 1s 70053030e-09 0s 0s 70059390e-09 0s 0s 70062190e-09 1s 1s 70063270e-09 0s 0s 70069670e-09 0s 0s 70072430e-09 1s 1s 70073510e-09 0s 0s 70079950e-09 0s 0s 70082670e-09 1s 1s 70083750e-09 0s 0s 70090230e-09 0s 0s 70092910e-09 1s 1s 70093990e-09 0s 0s 70100510e-09 0s 0s 70103150e-09 1s 1s 70104230e-09 0s 0s 70110790e-09 0s 0s 70113390e-09 1s 1s 70114470e-09 0s 0s 70121070e-09 0s 0s 70123630e-09 1s 1s 70124710e-09 0s 0s 70131350e-09 0s 0s 70133870e-09 1s 1s 70134950e-09 0s 0s 70141630e-09 0s 0s 70144110e-09 1s 1s 70145190e-09 0s 0s 70151910e-09 0s 0s 70154350e-09 1s 1s 70155430e-09 0s 0s 70162190e-09 0s 0s 70164590e-09 1s 1s 70165670e-09 0s 0s 70172470e-09 0s 0s 70174830e-09 1s 1s 70175910e-09 0s 0s 70182750e-09 0s 0s 70185070e-09 1s 1s 70186150e-09 0s 0s 70193030e-09 0s 0s 70195310e-09 1s 1s 70196390e-09 0s 0s 70203310e-09 0s 0s 70205550e-09 1s 1s 70206630e-09 0s 0s 70213590e-09 0s 0s 70215790e-09 1s 1s 70216870e-09 0s 0s 70223870e-09 0s 0s 70226030e-09 1s 1s 70227110e-09 0s 0s 70234150e-09 0s 0s 70236270e-09 1s 1s 70237350e-09 0s 0s 70244430e-09 0s 0s 70246510e-09 1s 1s 70247590e-09 0s 0s 70254710e-09 0s 0s 70256750e-09 1s 1s 70257830e-09 0s 0s 70264990e-09 0s 0s 70266990e-09 1s 1s 70268070e-09 0s 0s 70275270e-09 0s 0s 70277230e-09 1s 1s 70278310e-09 0s 0s 70285550e-09 0s 0s 70287470e-09 1s 1s 70288550e-09 0s 0s 70295830e-09 0s 0s 70297710e-09 1s 1s 70298790e-09 0s 0s 70306110e-09 0s 0s 70307950e-09 1s 1s 70309030e-09 0s 0s 70316390e-09 0s 0s 70318190e-09 1s 1s 70319270e-09 0s 0s 70326670e-09 0s 0s 70328430e-09 1s 1s 70329510e-09 0s 0s 70336950e-09 0s 0s 70338670e-09 1s 1s 70339750e-09 0s 0s 70347230e-09 0s 0s 70348910e-09 1s 1s 70349990e-09 0s 0s 70357510e-09 0s 0s 70359150e-09 1s 1s 70360230e-09 0s 0s 70367790e-09 0s 0s 70369390e-09 1s 1s 70370470e-09 0s 0s 70378070e-09 0s 0s 70379630e-09 1s 1s 70380710e-09 0s 0s 70388350e-09 0s 0s 70389870e-09 1s 1s 70390950e-09 0s 0s 70398630e-09 0s 0s 70400110e-09 1s 1s 70401190e-09 0s 0s 70408910e-09 0s 0s 70410350e-09 1s 1s 70411430e-09 0s 0s 70419190e-09 0s 0s 70420590e-09 1s 1s 70421670e-09 0s 0s 70429470e-09 0s 0s 70430830e-09 1s 1s 70431910e-09 0s 0s 70439750e-09 0s 0s 70441070e-09 1s 1s 70442150e-09 0s 0s 70450030e-09 0s 0s 70451310e-09 1s 1s 70452390e-09 0s 0s 70460310e-09 0s 0s 70461550e-09 1s 1s 70462630e-09 0s 0s 70470590e-09 0s 0s 70471790e-09 1s 1s 70472870e-09 0s 0s 70480870e-09 0s 0s 70482030e-09 1s 1s 70483110e-09 0s 0s 70491150e-09 0s 0s 70492270e-09 1s 1s 70493350e-09 0s 0s 70501430e-09 0s 0s 70502510e-09 1s 1s 70503590e-09 0s 0s 70511710e-09 0s 0s 70512750e-09 1s 1s 70513830e-09 0s 0s 70521990e-09 0s 0s 70522990e-09 1s 1s 70524070e-09 0s 0s 70532270e-09 0s 0s 70533230e-09 1s 1s 70534310e-09 0s 0s 70542550e-09 0s 0s 70543470e-09 1s 1s 70544550e-09 0s 0s 70552830e-09 0s 0s 70553710e-09 1s 1s 70554790e-09 0s 0s 70563110e-09 0s 0s 70563950e-09 1s 1s 70565030e-09 0s 0s 70573390e-09 0s 0s 70574190e-09 1s 1s 70575270e-09 0s 0s 70583670e-09 0s 0s 70584430e-09 1s 1s 70585510e-09 0s 0s 70593950e-09 0s 0s 70594670e-09 1s 1s 70595750e-09 0s 0s 70604230e-09 0s 0s 70604910e-09 1s 1s 70605990e-09 0s 0s 70614510e-09 0s 0s 70615150e-09 1s 1s 70616230e-09 0s 0s 70624790e-09 0s 0s 70625390e-09 1s 1s 70626470e-09 0s 0s 70635070e-09 0s 0s 70635630e-09 1s 1s 70636710e-09 0s 0s 70645350e-09 0s 0s 70645870e-09 1s 1s 70646950e-09 0s 0s 70655630e-09 0s 0s 70656110e-09 1s 1s 70657190e-09 0s 0s 70665910e-09 0s 0s 70666350e-09 1s 1s 70667430e-09 0s 0s 70676190e-09 0s 0s 70676590e-09 1s 1s 70677670e-09 0s 0s 70686470e-09 0s 0s 70686830e-09 1s 1s 70687910e-09 0s 0s 70696750e-09 0s 0s 70697070e-09 1s 1s 70698150e-09 0s 0s 70707030e-09 0s 0s 70707310e-09 1s 1s 70708390e-09 0s 0s 70717310e-09 0s 0s 70717550e-09 1s 1s 70718630e-09 0s 0s 70727590e-09 0s 0s 70727790e-09 1s 1s 70728870e-09 0s 0s 70737870e-09 0s 0s 70738030e-09 1s 1s 70739110e-09 0s 0s 70748150e-09 0s 0s 70748270e-09 1s 1s 70749350e-09 0s 0s 70758430e-09 0s 0s 70758510e-09 1s 1s 70759590e-09 0s 0s 70768710e-09 0s 0s 70768750e-09 1s 1s 70769830e-09 0s 0s 70778990e-09 1s 1s 70779030e-09 1s 1s 70780110e-09 0s 0s 70789230e-09 1s 1s 70789310e-09 1s 1s 70790350e-09 0s 0s 70799470e-09 1s 1s 70799590e-09 1s 1s 70800590e-09 0s 0s 70809710e-09 1s 1s 70809870e-09 1s 1s 70810830e-09 0s 0s 70819950e-09 1s 1s 70820150e-09 1s 1s 70821070e-09 0s 0s 70830190e-09 1s 1s 70830430e-09 1s 1s 70831310e-09 0s 0s 70840430e-09 1s 1s 70840710e-09 1s 1s 70841550e-09 0s 0s 70850670e-09 1s 1s 70850990e-09 1s 1s 70851790e-09 0s 0s 70860910e-09 1s 1s 70861270e-09 1s 1s 70862030e-09 0s 0s 70871150e-09 1s 1s 70871550e-09 1s 1s 70872270e-09 0s 0s 70881390e-09 1s 1s 70881830e-09 1s 1s 70882510e-09 0s 0s 70891630e-09 1s 1s 70892110e-09 1s 1s 70892750e-09 0s 0s 70901870e-09 1s 1s 70902390e-09 1s 1s 70902990e-09 0s 0s 70912110e-09 1s 1s 70912670e-09 1s 1s 70913230e-09 0s 0s 70922350e-09 1s 1s 70922950e-09 1s 1s 70923470e-09 0s 0s 70932590e-09 1s 1s 70933230e-09 1s 1s 70933710e-09 0s 0s 70942830e-09 1s 1s 70943510e-09 1s 1s 70943950e-09 0s 0s 70953070e-09 1s 1s 70953790e-09 1s 1s 70954190e-09 0s 0s 70963310e-09 1s 1s 70964070e-09 1s 1s 70964430e-09 0s 0s 70973550e-09 1s 1s 70974350e-09 1s 1s 70974670e-09 0s 0s 70983790e-09 1s 1s 70984630e-09 1s 1s 70984910e-09 0s 0s 70994030e-09 1s 1s 70994910e-09 1s 1s 70995150e-09 0s 0s 71004270e-09 1s 1s 71005190e-09 1s 1s 71005390e-09 0s 0s 71014510e-09 1s 1s 71015470e-09 1s 1s 71015630e-09 0s 0s 71024750e-09 1s 1s 71025750e-09 1s 1s 71025870e-09 0s 0s 71034990e-09 1s 1s 71036030e-09 1s 1s 71036110e-09 0s 0s 71045230e-09 1s 1s 71046310e-09 1s 1s 71046350e-09 0s 0s 71055470e-09 1s 1s 71056590e-09 0s 0s 71065710e-09 1s 1s 71066830e-09 0s 0s 71066870e-09 0s 0s 71075950e-09 1s 1s 71077070e-09 0s 0s 71077150e-09 0s 0s 71086190e-09 1s 1s 71087310e-09 0s 0s 71087430e-09 0s 0s 71096430e-09 1s 1s 71097550e-09 0s 0s 71097710e-09 0s 0s 71106670e-09 1s 1s 71107790e-09 0s 0s 71107990e-09 0s 0s 71116910e-09 1s 1s 71118030e-09 0s 0s 71118270e-09 0s 0s 71127150e-09 1s 1s 71128270e-09 0s 0s 71128550e-09 0s 0s 71137390e-09 1s 1s 71138510e-09 0s 0s 71138830e-09 0s 0s 71147630e-09 1s 1s 71148750e-09 0s 0s 71149110e-09 0s 0s 71157870e-09 1s 1s 71158990e-09 0s 0s 71159390e-09 0s 0s 71168110e-09 1s 1s 71169230e-09 0s 0s 71169670e-09 0s 0s 71178350e-09 1s 1s 71179470e-09 0s 0s 71179950e-09 0s 0s 71188590e-09 1s 1s 71189710e-09 0s 0s 71190230e-09 0s 0s 71198830e-09 1s 1s 71199950e-09 0s 0s 71200510e-09 0s 0s 71209070e-09 1s 1s 71210190e-09 0s 0s 71210790e-09 0s 0s 71219310e-09 1s 1s 71220430e-09 0s 0s 71221070e-09 0s 0s 71229550e-09 1s 1s 71230670e-09 0s 0s 71231350e-09 0s 0s 71239790e-09 1s 1s 71240910e-09 0s 0s 71241630e-09 0s 0s 71250030e-09 1s 1s 71251150e-09 0s 0s 71251910e-09 0s 0s 71260270e-09 1s 1s 71261390e-09 0s 0s 71262190e-09 0s 0s 71270510e-09 1s 1s 71271630e-09 0s 0s 71272470e-09 0s 0s 71280750e-09 1s 1s 71281870e-09 0s 0s 71282750e-09 0s 0s 71290990e-09 1s 1s 71292110e-09 0s 0s 71293030e-09 0s 0s 71301230e-09 1s 1s 71302350e-09 0s 0s 71303310e-09 0s 0s 71311470e-09 1s 1s 71312590e-09 0s 0s 71313590e-09 0s 0s 71321710e-09 1s 1s 71322830e-09 0s 0s 71323870e-09 0s 0s 71331950e-09 1s 1s 71333070e-09 0s 0s 71334150e-09 0s 0s 71342190e-09 1s 1s 71343310e-09 0s 0s 71344430e-09 0s 0s 71352430e-09 1s 1s 71353550e-09 0s 0s 71354710e-09 0s 0s 71362670e-09 1s 1s 71363790e-09 0s 0s 71364990e-09 0s 0s 71372910e-09 1s 1s 71374030e-09 0s 0s 71375270e-09 0s 0s 71383150e-09 1s 1s 71384270e-09 0s 0s 71385550e-09 0s 0s 71393390e-09 1s 1s 71394510e-09 0s 0s 71395830e-09 0s 0s 71403630e-09 1s 1s 71404750e-09 0s 0s 71406110e-09 0s 0s 71413870e-09 1s 1s 71414990e-09 0s 0s 71416390e-09 0s 0s 71424110e-09 1s 1s 71425230e-09 0s 0s 71426670e-09 0s 0s 71434350e-09 1s 1s 71435470e-09 0s 0s 71436950e-09 0s 0s 71444590e-09 1s 1s 71445710e-09 0s 0s 71447230e-09 0s 0s 71454830e-09 1s 1s 71455950e-09 0s 0s 71457510e-09 0s 0s 71465070e-09 1s 1s 71466190e-09 0s 0s 71467790e-09 0s 0s 71475310e-09 1s 1s 71476430e-09 0s 0s 71478070e-09 0s 0s 71485550e-09 1s 1s 71486670e-09 0s 0s 71488350e-09 0s 0s 71495790e-09 1s 1s 71496910e-09 0s 0s 71498630e-09 0s 0s 71506030e-09 1s 1s 71507150e-09 0s 0s 71508910e-09 0s 0s 71516270e-09 1s 1s 71517390e-09 0s 0s 71519190e-09 0s 0s 71526510e-09 1s 1s 71527630e-09 0s 0s 71529470e-09 0s 0s 71536750e-09 1s 1s 71537870e-09 0s 0s 71539750e-09 0s 0s 71546990e-09 1s 1s 71548110e-09 0s 0s 71550030e-09 0s 0s 71557230e-09 1s 1s 71558350e-09 0s 0s 71560310e-09 0s 0s 71567470e-09 1s 1s 71568590e-09 0s 0s 71570590e-09 0s 0s 71577710e-09 1s 1s 71578830e-09 0s 0s 71580870e-09 0s 0s 71587950e-09 1s 1s 71589070e-09 0s 0s 71591150e-09 0s 0s 71598190e-09 1s 1s 71599310e-09 0s 0s 71601430e-09 0s 0s 71608430e-09 1s 1s 71609550e-09 0s 0s 71611710e-09 0s 0s 71618670e-09 1s 1s 71619790e-09 0s 0s 71621990e-09 0s 0s 71628910e-09 1s 1s 71630030e-09 0s 0s 71632270e-09 0s 0s 71639150e-09 1s 1s 71640270e-09 0s 0s 71642550e-09 0s 0s 71649390e-09 1s 1s 71650510e-09 0s 0s 71652830e-09 0s 0s 71659630e-09 1s 1s 71660750e-09 0s 0s 71663110e-09 0s 0s 71669870e-09 1s 1s 71670990e-09 0s 0s 71673390e-09 0s 0s 71680110e-09 1s 1s 71681230e-09 0s 0s 71683670e-09 0s 0s 71690350e-09 1s 1s 71691470e-09 0s 0s 71693950e-09 0s 0s 71700590e-09 1s 1s 71701710e-09 0s 0s 71704230e-09 0s 0s 71710830e-09 1s 1s 71711950e-09 0s 0s 71714510e-09 0s 0s 71721070e-09 1s 1s 71722190e-09 0s 0s 71724790e-09 0s 0s 71731310e-09 1s 1s 71732430e-09 0s 0s 71735070e-09 0s 0s 71741550e-09 1s 1s 71742670e-09 0s 0s 71745350e-09 0s 0s 71751790e-09 1s 1s 71752910e-09 0s 0s 71755630e-09 0s 0s 71762030e-09 1s 1s 71763150e-09 0s 0s 71765910e-09 0s 0s 71772270e-09 1s 1s 71773390e-09 0s 0s 71776190e-09 0s 0s 71782510e-09 1s 1s 71783630e-09 0s 0s 71786470e-09 0s 0s 71792750e-09 1s 1s 71793870e-09 0s 0s 71796750e-09 0s 0s 71802990e-09 1s 1s 71804110e-09 0s 0s 71807030e-09 0s 0s 71813230e-09 1s 1s 71814350e-09 0s 0s 71817310e-09 0s 0s 71823470e-09 1s 1s 71824590e-09 0s 0s 71827590e-09 0s 0s 71833710e-09 1s 1s 71834830e-09 0s 0s 71837870e-09 0s 0s 71843950e-09 1s 1s 71845070e-09 0s 0s 71848150e-09 0s 0s 71854190e-09 1s 1s 71855310e-09 0s 0s 71858430e-09 0s 0s 71864430e-09 1s 1s 71865550e-09 0s 0s 71868710e-09 0s 0s 71874670e-09 1s 1s 71875790e-09 0s 0s 71878990e-09 0s 0s 71884910e-09 1s 1s 71886030e-09 0s 0s 71889270e-09 0s 0s 71895150e-09 1s 1s 71896270e-09 0s 0s 71899550e-09 0s 0s 71905390e-09 1s 1s 71906510e-09 0s 0s 71909830e-09 0s 0s 71915630e-09 1s 1s 71916750e-09 0s 0s 71920110e-09 0s 0s 71925870e-09 1s 1s 71926990e-09 0s 0s 71930390e-09 0s 0s 71936110e-09 1s 1s 71937230e-09 0s 0s 71940670e-09 0s 0s 71946350e-09 1s 1s 71947470e-09 0s 0s 71950950e-09 0s 0s 71956590e-09 1s 1s 71957710e-09 0s 0s 71961230e-09 0s 0s 71966830e-09 1s 1s 71967950e-09 0s 0s 71971510e-09 0s 0s 71977070e-09 1s 1s 71978190e-09 0s 0s 71981790e-09 0s 0s 71987310e-09 1s 1s 71988430e-09 0s 0s 71992070e-09 0s 0s 71997550e-09 1s 1s 71998670e-09 0s 0s 72002350e-09 0s 0s 72007790e-09 1s 1s 72008910e-09 0s 0s 72012630e-09 0s 0s 72018030e-09 1s 1s 72019150e-09 0s 0s 72022910e-09 0s 0s 72028270e-09 1s 1s 72029390e-09 0s 0s 72033190e-09 0s 0s 72038510e-09 1s 1s 72039630e-09 0s 0s 72043470e-09 0s 0s 72048750e-09 1s 1s 72049870e-09 0s 0s 72053750e-09 0s 0s 72058990e-09 1s 1s 72060110e-09 0s 0s 72064030e-09 0s 0s 72069230e-09 1s 1s 72070350e-09 0s 0s 72074310e-09 0s 0s 72079470e-09 1s 1s 72080590e-09 0s 0s 72084590e-09 0s 0s 72089710e-09 1s 1s 72090830e-09 0s 0s 72094870e-09 0s 0s 72099950e-09 1s 1s 72101070e-09 0s 0s 72105150e-09 0s 0s 72110190e-09 1s 1s 72111310e-09 0s 0s 72115430e-09 0s 0s 72120430e-09 1s 1s 72121550e-09 0s 0s 72125710e-09 0s 0s 72130670e-09 1s 1s 72131790e-09 0s 0s 72135990e-09 0s 0s 72140910e-09 1s 1s 72142030e-09 0s 0s 72146270e-09 0s 0s 72151150e-09 1s 1s 72152270e-09 0s 0s 72156550e-09 0s 0s 72161390e-09 1s 1s 72162510e-09 0s 0s 72166830e-09 0s 0s 72171630e-09 1s 1s 72172750e-09 0s 0s 72177110e-09 0s 0s 72181870e-09 1s 1s 72182990e-09 0s 0s 72187390e-09 0s 0s 72192110e-09 1s 1s 72193230e-09 0s 0s 72197670e-09 0s 0s 72202350e-09 1s 1s 72203470e-09 0s 0s 72207950e-09 0s 0s 72212590e-09 1s 1s 72213710e-09 0s 0s 72218230e-09 0s 0s 72222830e-09 1s 1s 72223950e-09 0s 0s 72228510e-09 0s 0s 72233070e-09 1s 1s 72234190e-09 0s 0s 72238790e-09 0s 0s 72243310e-09 1s 1s 72244430e-09 0s 0s 72249070e-09 0s 0s 72253550e-09 1s 1s 72254670e-09 0s 0s 72259350e-09 0s 0s 72263790e-09 1s 1s 72264910e-09 0s 0s 72269630e-09 0s 0s 72274030e-09 1s 1s 72275150e-09 0s 0s 72279910e-09 0s 0s 72284270e-09 1s 1s 72285390e-09 0s 0s 72290190e-09 0s 0s 72294510e-09 1s 1s 72295630e-09 0s 0s 72300470e-09 0s 0s 72304750e-09 1s 1s 72305870e-09 0s 0s 72310750e-09 0s 0s 72314990e-09 1s 1s 72316110e-09 0s 0s 72321030e-09 0s 0s 72325230e-09 1s 1s 72326350e-09 0s 0s 72331310e-09 0s 0s 72335470e-09 1s 1s 72336590e-09 0s 0s 72341590e-09 0s 0s 72345710e-09 1s 1s 72346830e-09 0s 0s 72351870e-09 0s 0s 72355950e-09 1s 1s 72357070e-09 0s 0s 72362150e-09 0s 0s 72366190e-09 1s 1s 72367310e-09 0s 0s 72372430e-09 0s 0s 72376430e-09 1s 1s 72377550e-09 0s 0s 72382710e-09 0s 0s 72386670e-09 1s 1s 72387790e-09 0s 0s 72392990e-09 0s 0s 72396910e-09 1s 1s 72398030e-09 0s 0s 72403270e-09 0s 0s 72407150e-09 1s 1s 72408270e-09 0s 0s 72413550e-09 0s 0s 72417390e-09 1s 1s 72418510e-09 0s 0s 72423830e-09 0s 0s 72427630e-09 1s 1s 72428750e-09 0s 0s 72434110e-09 0s 0s 72437870e-09 1s 1s 72438990e-09 0s 0s 72444390e-09 0s 0s 72448110e-09 1s 1s 72449230e-09 0s 0s 72454670e-09 0s 0s 72458350e-09 1s 1s 72459470e-09 0s 0s 72464950e-09 0s 0s 72468590e-09 1s 1s 72469710e-09 0s 0s 72475230e-09 0s 0s 72478830e-09 1s 1s 72479950e-09 0s 0s 72485510e-09 0s 0s 72489070e-09 1s 1s 72490190e-09 0s 0s 72495790e-09 0s 0s 72499310e-09 1s 1s 72500430e-09 0s 0s 72506070e-09 0s 0s 72509550e-09 1s 1s 72510670e-09 0s 0s 72516350e-09 0s 0s 72519790e-09 1s 1s 72520910e-09 0s 0s 72526630e-09 0s 0s 72530030e-09 1s 1s 72531150e-09 0s 0s 72536910e-09 0s 0s 72540270e-09 1s 1s 72541390e-09 0s 0s 72547190e-09 0s 0s 72550510e-09 1s 1s 72551630e-09 0s 0s 72557470e-09 0s 0s 72560750e-09 1s 1s 72561870e-09 0s 0s 72567750e-09 0s 0s 72570990e-09 1s 1s 72572110e-09 0s 0s 72578030e-09 0s 0s 72581230e-09 1s 1s 72582350e-09 0s 0s 72588310e-09 0s 0s 72591470e-09 1s 1s 72592590e-09 0s 0s 72598590e-09 0s 0s 72601710e-09 1s 1s 72602830e-09 0s 0s 72608870e-09 0s 0s 72611950e-09 1s 1s 72613070e-09 0s 0s 72619150e-09 0s 0s 72622190e-09 1s 1s 72623310e-09 0s 0s 72629430e-09 0s 0s 72632430e-09 1s 1s 72633550e-09 0s 0s 72639710e-09 0s 0s 72642670e-09 1s 1s 72643790e-09 0s 0s 72649990e-09 0s 0s 72652910e-09 1s 1s 72654030e-09 0s 0s 72660270e-09 0s 0s 72663150e-09 1s 1s 72664270e-09 0s 0s 72670550e-09 0s 0s 72673390e-09 1s 1s 72674510e-09 0s 0s 72680830e-09 0s 0s 72683630e-09 1s 1s 72684750e-09 0s 0s 72691110e-09 0s 0s 72693870e-09 1s 1s 72694990e-09 0s 0s 72701390e-09 0s 0s 72704110e-09 1s 1s 72705230e-09 0s 0s 72711670e-09 0s 0s 72714350e-09 1s 1s 72715470e-09 0s 0s 72721950e-09 0s 0s 72724590e-09 1s 1s 72725710e-09 0s 0s 72732230e-09 0s 0s 72734830e-09 1s 1s 72735950e-09 0s 0s 72742510e-09 0s 0s 72745070e-09 1s 1s 72746190e-09 0s 0s 72752790e-09 0s 0s 72755310e-09 1s 1s 72756430e-09 0s 0s 72763070e-09 0s 0s 72765550e-09 1s 1s 72766670e-09 0s 0s 72773350e-09 0s 0s 72775790e-09 1s 1s 72776910e-09 0s 0s 72783630e-09 0s 0s 72786030e-09 1s 1s 72787150e-09 0s 0s 72793910e-09 0s 0s 72796270e-09 1s 1s 72797390e-09 0s 0s 72804190e-09 0s 0s 72806510e-09 1s 1s 72807630e-09 0s 0s 72814470e-09 0s 0s 72816750e-09 1s 1s 72817870e-09 0s 0s 72824750e-09 0s 0s 72826990e-09 1s 1s 72828110e-09 0s 0s 72835030e-09 0s 0s 72837230e-09 1s 1s 72838350e-09 0s 0s 72845310e-09 0s 0s 72847470e-09 1s 1s 72848590e-09 0s 0s 72855590e-09 0s 0s 72857710e-09 1s 1s 72858830e-09 0s 0s 72865870e-09 0s 0s 72867950e-09 1s 1s 72869070e-09 0s 0s 72876150e-09 0s 0s 72878190e-09 1s 1s 72879310e-09 0s 0s 72886430e-09 0s 0s 72888430e-09 1s 1s 72889550e-09 0s 0s 72896710e-09 0s 0s 72898670e-09 1s 1s 72899790e-09 0s 0s 72906990e-09 0s 0s 72908910e-09 1s 1s 72910030e-09 0s 0s 72917270e-09 0s 0s 72919150e-09 1s 1s 72920270e-09 0s 0s 72927550e-09 0s 0s 72929390e-09 1s 1s 72930510e-09 0s 0s 72937830e-09 0s 0s 72939630e-09 1s 1s 72940750e-09 0s 0s 72948110e-09 0s 0s 72949870e-09 1s 1s 72950990e-09 0s 0s 72958390e-09 0s 0s 72960110e-09 1s 1s 72961230e-09 0s 0s 72968670e-09 0s 0s 72970350e-09 1s 1s 72971470e-09 0s 0s 72978950e-09 0s 0s 72980590e-09 1s 1s 72981710e-09 0s 0s 72989230e-09 0s 0s 72990830e-09 1s 1s 72991950e-09 0s 0s 72999510e-09 0s 0s 73001070e-09 1s 1s 73002190e-09 0s 0s 73009790e-09 0s 0s 73011310e-09 1s 1s 73012430e-09 0s 0s 73020070e-09 0s 0s 73021550e-09 1s 1s 73022670e-09 0s 0s 73030350e-09 0s 0s 73031790e-09 1s 1s 73032910e-09 0s 0s 73040630e-09 0s 0s 73042030e-09 1s 1s 73043150e-09 0s 0s 73050910e-09 0s 0s 73052270e-09 1s 1s 73053390e-09 0s 0s 73061190e-09 0s 0s 73062510e-09 1s 1s 73063630e-09 0s 0s 73071470e-09 0s 0s 73072750e-09 1s 1s 73073870e-09 0s 0s 73081750e-09 0s 0s 73082990e-09 1s 1s 73084110e-09 0s 0s 73092030e-09 0s 0s 73093230e-09 1s 1s 73094350e-09 0s 0s 73102310e-09 0s 0s 73103470e-09 1s 1s 73104590e-09 0s 0s 73112590e-09 0s 0s 73113710e-09 1s 1s 73114830e-09 0s 0s 73122870e-09 0s 0s 73123950e-09 1s 1s 73125070e-09 0s 0s 73133150e-09 0s 0s 73134190e-09 1s 1s 73135310e-09 0s 0s 73143430e-09 0s 0s 73144430e-09 1s 1s 73145550e-09 0s 0s 73153710e-09 0s 0s 73154670e-09 1s 1s 73155790e-09 0s 0s 73163990e-09 0s 0s 73164910e-09 1s 1s 73166030e-09 0s 0s 73174270e-09 0s 0s 73175150e-09 1s 1s 73176270e-09 0s 0s 73184550e-09 0s 0s 73185390e-09 1s 1s 73186510e-09 0s 0s 73194830e-09 0s 0s 73195630e-09 1s 1s 73196750e-09 0s 0s 73205110e-09 0s 0s 73205870e-09 1s 1s 73206990e-09 0s 0s 73215390e-09 0s 0s 73216110e-09 1s 1s 73217230e-09 0s 0s 73225670e-09 0s 0s 73226350e-09 1s 1s 73227470e-09 0s 0s 73235950e-09 0s 0s 73236590e-09 1s 1s 73237710e-09 0s 0s 73246230e-09 0s 0s 73246830e-09 1s 1s 73247950e-09 0s 0s 73256510e-09 0s 0s 73257070e-09 1s 1s 73258190e-09 0s 0s 73266790e-09 0s 0s 73267310e-09 1s 1s 73268430e-09 0s 0s 73277070e-09 0s 0s 73277550e-09 1s 1s 73278670e-09 0s 0s 73287350e-09 0s 0s 73287790e-09 1s 1s 73288910e-09 0s 0s 73297630e-09 0s 0s 73298030e-09 1s 1s 73299150e-09 0s 0s 73307910e-09 0s 0s 73308270e-09 1s 1s 73309390e-09 0s 0s 73318190e-09 0s 0s 73318510e-09 1s 1s 73319630e-09 0s 0s 73328470e-09 0s 0s 73328750e-09 1s 1s 73329870e-09 0s 0s 73338750e-09 0s 0s 73338990e-09 1s 1s 73340110e-09 0s 0s 73349030e-09 0s 0s 73349230e-09 1s 1s 73350350e-09 0s 0s 73359310e-09 0s 0s 73359470e-09 1s 1s 73360590e-09 0s 0s 73369590e-09 0s 0s 73369710e-09 1s 1s 73370830e-09 0s 0s 73379870e-09 0s 0s 73379950e-09 1s 1s 73381070e-09 0s 0s 73390150e-09 0s 0s 73390190e-09 1s 1s 73391310e-09 0s 0s 73400430e-09 1s 1s 73400470e-09 1s 1s 73401590e-09 0s 0s 73410670e-09 1s 1s 73410750e-09 1s 1s 73411830e-09 0s 0s 73420910e-09 1s 1s 73421030e-09 1s 1s 73422070e-09 0s 0s 73431150e-09 1s 1s 73431310e-09 1s 1s 73432310e-09 0s 0s 73441390e-09 1s 1s 73441590e-09 1s 1s 73442550e-09 0s 0s 73451630e-09 1s 1s 73451870e-09 1s 1s 73452790e-09 0s 0s 73461870e-09 1s 1s 73462150e-09 1s 1s 73463030e-09 0s 0s 73472110e-09 1s 1s 73472430e-09 1s 1s 73473270e-09 0s 0s 73482350e-09 1s 1s 73482710e-09 1s 1s 73483510e-09 0s 0s 73492590e-09 1s 1s 73492990e-09 1s 1s 73493750e-09 0s 0s 73502830e-09 1s 1s 73503270e-09 1s 1s 73503990e-09 0s 0s 73513070e-09 1s 1s 73513550e-09 1s 1s 73514230e-09 0s 0s 73523310e-09 1s 1s 73523830e-09 1s 1s 73524470e-09 0s 0s 73533550e-09 1s 1s 73534110e-09 1s 1s 73534710e-09 0s 0s 73543790e-09 1s 1s 73544390e-09 1s 1s 73544950e-09 0s 0s 73554030e-09 1s 1s 73554670e-09 1s 1s 73555190e-09 0s 0s 73564270e-09 1s 1s 73564950e-09 1s 1s 73565430e-09 0s 0s 73574510e-09 1s 1s 73575230e-09 1s 1s 73575670e-09 0s 0s 73584750e-09 1s 1s 73585510e-09 1s 1s 73585910e-09 0s 0s 73594990e-09 1s 1s 73595790e-09 1s 1s 73596150e-09 0s 0s 73605230e-09 1s 1s 73606070e-09 1s 1s 73606390e-09 0s 0s 73615470e-09 1s 1s 73616350e-09 1s 1s 73616630e-09 0s 0s 73625710e-09 1s 1s 73626630e-09 1s 1s 73626870e-09 0s 0s 73635950e-09 1s 1s 73636910e-09 1s 1s 73637110e-09 0s 0s 73646190e-09 1s 1s 73647190e-09 1s 1s 73647350e-09 0s 0s 73656430e-09 1s 1s 73657470e-09 1s 1s 73657590e-09 0s 0s 73666670e-09 1s 1s 73667750e-09 1s 1s 73667830e-09 0s 0s 73676910e-09 1s 1s 73678030e-09 1s 1s 73678070e-09 0s 0s 73687150e-09 1s 1s 73688310e-09 0s 0s 73697390e-09 1s 1s 73698550e-09 0s 0s 73698590e-09 0s 0s 73707630e-09 1s 1s 73708790e-09 0s 0s 73708870e-09 0s 0s 73717870e-09 1s 1s 73719030e-09 0s 0s 73719150e-09 0s 0s 73728110e-09 1s 1s 73729270e-09 0s 0s 73729430e-09 0s 0s 73738350e-09 1s 1s 73739510e-09 0s 0s 73739710e-09 0s 0s 73748590e-09 1s 1s 73749750e-09 0s 0s 73749990e-09 0s 0s 73758830e-09 1s 1s 73759990e-09 0s 0s 73760270e-09 0s 0s 73769070e-09 1s 1s 73770230e-09 0s 0s 73770550e-09 0s 0s 73779310e-09 1s 1s 73780470e-09 0s 0s 73780830e-09 0s 0s 73789550e-09 1s 1s 73790710e-09 0s 0s 73791110e-09 0s 0s 73799790e-09 1s 1s 73800950e-09 0s 0s 73801390e-09 0s 0s 73810030e-09 1s 1s 73811190e-09 0s 0s 73811670e-09 0s 0s 73820270e-09 1s 1s 73821430e-09 0s 0s 73821950e-09 0s 0s 73830510e-09 1s 1s 73831670e-09 0s 0s 73832230e-09 0s 0s 73840750e-09 1s 1s 73841910e-09 0s 0s 73842510e-09 0s 0s 73850990e-09 1s 1s 73852150e-09 0s 0s 73852790e-09 0s 0s 73861230e-09 1s 1s 73862390e-09 0s 0s 73863070e-09 0s 0s 73871470e-09 1s 1s 73872630e-09 0s 0s 73873350e-09 0s 0s 73881710e-09 1s 1s 73882870e-09 0s 0s 73883630e-09 0s 0s 73891950e-09 1s 1s 73893110e-09 0s 0s 73893910e-09 0s 0s 73902190e-09 1s 1s 73903350e-09 0s 0s 73904190e-09 0s 0s 73912430e-09 1s 1s 73913590e-09 0s 0s 73914470e-09 0s 0s 73922670e-09 1s 1s 73923830e-09 0s 0s 73924750e-09 0s 0s 73932910e-09 1s 1s 73934070e-09 0s 0s 73935030e-09 0s 0s 73943150e-09 1s 1s 73944310e-09 0s 0s 73945310e-09 0s 0s 73953390e-09 1s 1s 73954550e-09 0s 0s 73955590e-09 0s 0s 73963630e-09 1s 1s 73964790e-09 0s 0s 73965870e-09 0s 0s 73973870e-09 1s 1s 73975030e-09 0s 0s 73976150e-09 0s 0s 73984110e-09 1s 1s 73985270e-09 0s 0s 73986430e-09 0s 0s 73994350e-09 1s 1s 73995510e-09 0s 0s 73996710e-09 0s 0s 74004590e-09 1s 1s 74005750e-09 0s 0s 74006990e-09 0s 0s 74014830e-09 1s 1s 74015990e-09 0s 0s 74017270e-09 0s 0s 74025070e-09 1s 1s 74026230e-09 0s 0s 74027550e-09 0s 0s 74035310e-09 1s 1s 74036470e-09 0s 0s 74037830e-09 0s 0s 74045550e-09 1s 1s 74046710e-09 0s 0s 74048110e-09 0s 0s 74055790e-09 1s 1s 74056950e-09 0s 0s 74058390e-09 0s 0s 74066030e-09 1s 1s 74067190e-09 0s 0s 74068670e-09 0s 0s 74076270e-09 1s 1s 74077430e-09 0s 0s 74078950e-09 0s 0s 74086510e-09 1s 1s 74087670e-09 0s 0s 74089230e-09 0s 0s 74096750e-09 1s 1s 74097910e-09 0s 0s 74099510e-09 0s 0s 74106990e-09 1s 1s 74108150e-09 0s 0s 74109790e-09 0s 0s 74117230e-09 1s 1s 74118390e-09 0s 0s 74120070e-09 0s 0s 74127470e-09 1s 1s 74128630e-09 0s 0s 74130350e-09 0s 0s 74137710e-09 1s 1s 74138870e-09 0s 0s 74140630e-09 0s 0s 74147950e-09 1s 1s 74149110e-09 0s 0s 74150910e-09 0s 0s 74158190e-09 1s 1s 74159350e-09 0s 0s 74161190e-09 0s 0s 74168430e-09 1s 1s 74169590e-09 0s 0s 74171470e-09 0s 0s 74178670e-09 1s 1s 74179830e-09 0s 0s 74181750e-09 0s 0s 74188910e-09 1s 1s 74190070e-09 0s 0s 74192030e-09 0s 0s 74199150e-09 1s 1s 74200310e-09 0s 0s 74202310e-09 0s 0s 74209390e-09 1s 1s 74210550e-09 0s 0s 74212590e-09 0s 0s 74219630e-09 1s 1s 74220790e-09 0s 0s 74222870e-09 0s 0s 74229870e-09 1s 1s 74231030e-09 0s 0s 74233150e-09 0s 0s 74240110e-09 1s 1s 74241270e-09 0s 0s 74243430e-09 0s 0s 74250350e-09 1s 1s 74251510e-09 0s 0s 74253710e-09 0s 0s 74260590e-09 1s 1s 74261750e-09 0s 0s 74263990e-09 0s 0s 74270830e-09 1s 1s 74271990e-09 0s 0s 74274270e-09 0s 0s 74281070e-09 1s 1s 74282230e-09 0s 0s 74284550e-09 0s 0s 74291310e-09 1s 1s 74292470e-09 0s 0s 74294830e-09 0s 0s 74301550e-09 1s 1s 74302710e-09 0s 0s 74305110e-09 0s 0s 74311790e-09 1s 1s 74312950e-09 0s 0s 74315390e-09 0s 0s 74322030e-09 1s 1s 74323190e-09 0s 0s 74325670e-09 0s 0s 74332270e-09 1s 1s 74333430e-09 0s 0s 74335950e-09 0s 0s 74342510e-09 1s 1s 74343670e-09 0s 0s 74346230e-09 0s 0s 74352750e-09 1s 1s 74353910e-09 0s 0s 74356510e-09 0s 0s 74362990e-09 1s 1s 74364150e-09 0s 0s 74366790e-09 0s 0s 74373230e-09 1s 1s 74374390e-09 0s 0s 74377070e-09 0s 0s 74383470e-09 1s 1s 74384630e-09 0s 0s 74387350e-09 0s 0s 74393710e-09 1s 1s 74394870e-09 0s 0s 74397630e-09 0s 0s 74403950e-09 1s 1s 74405110e-09 0s 0s 74407910e-09 0s 0s 74414190e-09 1s 1s 74415350e-09 0s 0s 74418190e-09 0s 0s 74424430e-09 1s 1s 74425590e-09 0s 0s 74428470e-09 0s 0s 74434670e-09 1s 1s 74435830e-09 0s 0s 74438750e-09 0s 0s 74444910e-09 1s 1s 74446070e-09 0s 0s 74449030e-09 0s 0s 74455150e-09 1s 1s 74456310e-09 0s 0s 74459310e-09 0s 0s 74465390e-09 1s 1s 74466550e-09 0s 0s 74469590e-09 0s 0s 74475630e-09 1s 1s 74476790e-09 0s 0s 74479870e-09 0s 0s 74485870e-09 1s 1s 74487030e-09 0s 0s 74490150e-09 0s 0s 74496110e-09 1s 1s 74497270e-09 0s 0s 74500430e-09 0s 0s 74506350e-09 1s 1s 74507510e-09 0s 0s 74510710e-09 0s 0s 74516590e-09 1s 1s 74517750e-09 0s 0s 74520990e-09 0s 0s 74526830e-09 1s 1s 74527990e-09 0s 0s 74531270e-09 0s 0s 74537070e-09 1s 1s 74538230e-09 0s 0s 74541550e-09 0s 0s 74547310e-09 1s 1s 74548470e-09 0s 0s 74551830e-09 0s 0s 74557550e-09 1s 1s 74558710e-09 0s 0s 74562110e-09 0s 0s 74567790e-09 1s 1s 74568950e-09 0s 0s 74572390e-09 0s 0s 74578030e-09 1s 1s 74579190e-09 0s 0s 74582670e-09 0s 0s 74588270e-09 1s 1s 74589430e-09 0s 0s 74592950e-09 0s 0s 74598510e-09 1s 1s 74599670e-09 0s 0s 74603230e-09 0s 0s 74608750e-09 1s 1s 74609910e-09 0s 0s 74613510e-09 0s 0s 74618990e-09 1s 1s 74620150e-09 0s 0s 74623790e-09 0s 0s 74629230e-09 1s 1s 74630390e-09 0s 0s 74634070e-09 0s 0s 74639470e-09 1s 1s 74640630e-09 0s 0s 74644350e-09 0s 0s 74649710e-09 1s 1s 74650870e-09 0s 0s 74654630e-09 0s 0s 74659950e-09 1s 1s 74661110e-09 0s 0s 74664910e-09 0s 0s 74670190e-09 1s 1s 74671350e-09 0s 0s 74675190e-09 0s 0s 74680430e-09 1s 1s 74681590e-09 0s 0s 74685470e-09 0s 0s 74690670e-09 1s 1s 74691830e-09 0s 0s 74695750e-09 0s 0s 74700910e-09 1s 1s 74702070e-09 0s 0s 74706030e-09 0s 0s 74711150e-09 1s 1s 74712310e-09 0s 0s 74716310e-09 0s 0s 74721390e-09 1s 1s 74722550e-09 0s 0s 74726590e-09 0s 0s 74731630e-09 1s 1s 74732790e-09 0s 0s 74736870e-09 0s 0s 74741870e-09 1s 1s 74743030e-09 0s 0s 74747150e-09 0s 0s 74752110e-09 1s 1s 74753270e-09 0s 0s 74757430e-09 0s 0s 74762350e-09 1s 1s 74763510e-09 0s 0s 74767710e-09 0s 0s 74772590e-09 1s 1s 74773750e-09 0s 0s 74777990e-09 0s 0s 74782830e-09 1s 1s 74783990e-09 0s 0s 74788270e-09 0s 0s 74793070e-09 1s 1s 74794230e-09 0s 0s 74798550e-09 0s 0s 74803310e-09 1s 1s 74804470e-09 0s 0s 74808830e-09 0s 0s 74813550e-09 1s 1s 74814710e-09 0s 0s 74819110e-09 0s 0s 74823790e-09 1s 1s 74824950e-09 0s 0s 74829390e-09 0s 0s 74834030e-09 1s 1s 74835190e-09 0s 0s 74839670e-09 0s 0s 74844270e-09 1s 1s 74845430e-09 0s 0s 74849950e-09 0s 0s 74854510e-09 1s 1s 74855670e-09 0s 0s 74860230e-09 0s 0s 74864750e-09 1s 1s 74865910e-09 0s 0s 74870510e-09 0s 0s 74874990e-09 1s 1s 74876150e-09 0s 0s 74880790e-09 0s 0s 74885230e-09 1s 1s 74886390e-09 0s 0s 74891070e-09 0s 0s 74895470e-09 1s 1s 74896630e-09 0s 0s 74901350e-09 0s 0s 74905710e-09 1s 1s 74906870e-09 0s 0s 74911630e-09 0s 0s 74915950e-09 1s 1s 74917110e-09 0s 0s 74921910e-09 0s 0s 74926190e-09 1s 1s 74927350e-09 0s 0s 74932190e-09 0s 0s 74936430e-09 1s 1s 74937590e-09 0s 0s 74942470e-09 0s 0s 74946670e-09 1s 1s 74947830e-09 0s 0s 74952750e-09 0s 0s 74956910e-09 1s 1s 74958070e-09 0s 0s 74963030e-09 0s 0s 74967150e-09 1s 1s 74968310e-09 0s 0s 74973310e-09 0s 0s 74977390e-09 1s 1s 74978550e-09 0s 0s 74983590e-09 0s 0s 74987630e-09 1s 1s 74988790e-09 0s 0s 74993870e-09 0s 0s 74997870e-09 1s 1s 74999030e-09 0s 0s 75004150e-09 0s 0s 75008110e-09 1s 1s 75009270e-09 0s 0s 75014430e-09 0s 0s 75018350e-09 1s 1s 75019510e-09 0s 0s 75024710e-09 0s 0s 75028590e-09 1s 1s 75029750e-09 0s 0s 75034990e-09 0s 0s 75038830e-09 1s 1s 75039990e-09 0s 0s 75045270e-09 0s 0s 75049070e-09 1s 1s 75050230e-09 0s 0s 75055550e-09 0s 0s 75059310e-09 1s 1s 75060470e-09 0s 0s 75065830e-09 0s 0s 75069550e-09 1s 1s 75070710e-09 0s 0s 75076110e-09 0s 0s 75079790e-09 1s 1s 75080950e-09 0s 0s 75086390e-09 0s 0s 75090030e-09 1s 1s 75091190e-09 0s 0s 75096670e-09 0s 0s 75100270e-09 1s 1s 75101430e-09 0s 0s 75106950e-09 0s 0s 75110510e-09 1s 1s 75111670e-09 0s 0s 75117230e-09 0s 0s 75120750e-09 1s 1s 75121910e-09 0s 0s 75127510e-09 0s 0s 75130990e-09 1s 1s 75132150e-09 0s 0s 75137790e-09 0s 0s 75141230e-09 1s 1s 75142390e-09 0s 0s 75148070e-09 0s 0s 75151470e-09 1s 1s 75152630e-09 0s 0s 75158350e-09 0s 0s 75161710e-09 1s 1s 75162870e-09 0s 0s 75168630e-09 0s 0s 75171950e-09 1s 1s 75173110e-09 0s 0s 75178910e-09 0s 0s 75182190e-09 1s 1s 75183350e-09 0s 0s 75189190e-09 0s 0s 75192430e-09 1s 1s 75193590e-09 0s 0s 75199470e-09 0s 0s 75202670e-09 1s 1s 75203830e-09 0s 0s 75209750e-09 0s 0s 75212910e-09 1s 1s 75214070e-09 0s 0s 75220030e-09 0s 0s 75223150e-09 1s 1s 75224310e-09 0s 0s 75230310e-09 0s 0s 75233390e-09 1s 1s 75234550e-09 0s 0s 75240590e-09 0s 0s 75243630e-09 1s 1s 75244790e-09 0s 0s 75250870e-09 0s 0s 75253870e-09 1s 1s 75255030e-09 0s 0s 75261150e-09 0s 0s 75264110e-09 1s 1s 75265270e-09 0s 0s 75271430e-09 0s 0s 75274350e-09 1s 1s 75275510e-09 0s 0s 75281710e-09 0s 0s 75284590e-09 1s 1s 75285750e-09 0s 0s 75291990e-09 0s 0s 75294830e-09 1s 1s 75295990e-09 0s 0s 75302270e-09 0s 0s 75305070e-09 1s 1s 75306230e-09 0s 0s 75312550e-09 0s 0s 75315310e-09 1s 1s 75316470e-09 0s 0s 75322830e-09 0s 0s 75325550e-09 1s 1s 75326710e-09 0s 0s 75333110e-09 0s 0s 75335790e-09 1s 1s 75336950e-09 0s 0s 75343390e-09 0s 0s 75346030e-09 1s 1s 75347190e-09 0s 0s 75353670e-09 0s 0s 75356270e-09 1s 1s 75357430e-09 0s 0s 75363950e-09 0s 0s 75366510e-09 1s 1s 75367670e-09 0s 0s 75374230e-09 0s 0s 75376750e-09 1s 1s 75377910e-09 0s 0s 75384510e-09 0s 0s 75386990e-09 1s 1s 75388150e-09 0s 0s 75394790e-09 0s 0s 75397230e-09 1s 1s 75398390e-09 0s 0s 75405070e-09 0s 0s 75407470e-09 1s 1s 75408630e-09 0s 0s 75415350e-09 0s 0s 75417710e-09 1s 1s 75418870e-09 0s 0s 75425630e-09 0s 0s 75427950e-09 1s 1s 75429110e-09 0s 0s 75435910e-09 0s 0s 75438190e-09 1s 1s 75439350e-09 0s 0s 75446190e-09 0s 0s 75448430e-09 1s 1s 75449590e-09 0s 0s 75456470e-09 0s 0s 75458670e-09 1s 1s 75459830e-09 0s 0s 75466750e-09 0s 0s 75468910e-09 1s 1s 75470070e-09 0s 0s 75477030e-09 0s 0s 75479150e-09 1s 1s 75480310e-09 0s 0s 75487310e-09 0s 0s 75489390e-09 1s 1s 75490550e-09 0s 0s 75497590e-09 0s 0s 75499630e-09 1s 1s 75500790e-09 0s 0s 75507870e-09 0s 0s 75509870e-09 1s 1s 75511030e-09 0s 0s 75518150e-09 0s 0s 75520110e-09 1s 1s 75521270e-09 0s 0s 75528430e-09 0s 0s 75530350e-09 1s 1s 75531510e-09 0s 0s 75538710e-09 0s 0s 75540590e-09 1s 1s 75541750e-09 0s 0s 75548990e-09 0s 0s 75550830e-09 1s 1s 75551990e-09 0s 0s 75559270e-09 0s 0s 75561070e-09 1s 1s 75562230e-09 0s 0s 75569550e-09 0s 0s 75571310e-09 1s 1s 75572470e-09 0s 0s 75579830e-09 0s 0s 75581550e-09 1s 1s 75582710e-09 0s 0s 75590110e-09 0s 0s 75591790e-09 1s 1s 75592950e-09 0s 0s 75600390e-09 0s 0s 75602030e-09 1s 1s 75603190e-09 0s 0s 75610670e-09 0s 0s 75612270e-09 1s 1s 75613430e-09 0s 0s 75620950e-09 0s 0s 75622510e-09 1s 1s 75623670e-09 0s 0s 75631230e-09 0s 0s 75632750e-09 1s 1s 75633910e-09 0s 0s 75641510e-09 0s 0s 75642990e-09 1s 1s 75644150e-09 0s 0s 75651790e-09 0s 0s 75653230e-09 1s 1s 75654390e-09 0s 0s 75662070e-09 0s 0s 75663470e-09 1s 1s 75664630e-09 0s 0s 75672350e-09 0s 0s 75673710e-09 1s 1s 75674870e-09 0s 0s 75682630e-09 0s 0s 75683950e-09 1s 1s 75685110e-09 0s 0s 75692910e-09 0s 0s 75694190e-09 1s 1s 75695350e-09 0s 0s 75703190e-09 0s 0s 75704430e-09 1s 1s 75705590e-09 0s 0s 75713470e-09 0s 0s 75714670e-09 1s 1s 75715830e-09 0s 0s 75723750e-09 0s 0s 75724910e-09 1s 1s 75726070e-09 0s 0s 75734030e-09 0s 0s 75735150e-09 1s 1s 75736310e-09 0s 0s 75744310e-09 0s 0s 75745390e-09 1s 1s 75746550e-09 0s 0s 75754590e-09 0s 0s 75755630e-09 1s 1s 75756790e-09 0s 0s 75764870e-09 0s 0s 75765870e-09 1s 1s 75767030e-09 0s 0s 75775150e-09 0s 0s 75776110e-09 1s 1s 75777270e-09 0s 0s 75785430e-09 0s 0s 75786350e-09 1s 1s 75787510e-09 0s 0s 75795710e-09 0s 0s 75796590e-09 1s 1s 75797750e-09 0s 0s 75805990e-09 0s 0s 75806830e-09 1s 1s 75807990e-09 0s 0s 75816270e-09 0s 0s 75817070e-09 1s 1s 75818230e-09 0s 0s 75826550e-09 0s 0s 75827310e-09 1s 1s 75828470e-09 0s 0s 75836830e-09 0s 0s 75837550e-09 1s 1s 75838710e-09 0s 0s 75847110e-09 0s 0s 75847790e-09 1s 1s 75848950e-09 0s 0s 75857390e-09 0s 0s 75858030e-09 1s 1s 75859190e-09 0s 0s 75867670e-09 0s 0s 75868270e-09 1s 1s 75869430e-09 0s 0s 75877950e-09 0s 0s 75878510e-09 1s 1s 75879670e-09 0s 0s 75888230e-09 0s 0s 75888750e-09 1s 1s 75889910e-09 0s 0s 75898510e-09 0s 0s 75898990e-09 1s 1s 75900150e-09 0s 0s 75908790e-09 0s 0s 75909230e-09 1s 1s 75910390e-09 0s 0s 75919070e-09 0s 0s 75919470e-09 1s 1s 75920630e-09 0s 0s 75929350e-09 0s 0s 75929710e-09 1s 1s 75930870e-09 0s 0s 75939630e-09 0s 0s 75939950e-09 1s 1s 75941110e-09 0s 0s 75949910e-09 0s 0s 75950190e-09 1s 1s 75951350e-09 0s 0s 75960190e-09 0s 0s 75960430e-09 1s 1s 75961590e-09 0s 0s 75970470e-09 0s 0s 75970670e-09 1s 1s 75971830e-09 0s 0s 75980750e-09 0s 0s 75980910e-09 1s 1s 75982070e-09 0s 0s 75991030e-09 0s 0s 75991150e-09 1s 1s 75992310e-09 0s 0s 76001310e-09 0s 0s 76001390e-09 1s 1s 76002550e-09 0s 0s 76011590e-09 0s 0s 76011630e-09 1s 1s 76012790e-09 0s 0s 76021870e-09 1s 1s 76021910e-09 1s 1s 76023070e-09 0s 0s 76032110e-09 1s 1s 76032190e-09 1s 1s 76033310e-09 0s 0s 76042350e-09 1s 1s 76042470e-09 1s 1s 76043550e-09 0s 0s 76052590e-09 1s 1s 76052750e-09 1s 1s 76053790e-09 0s 0s 76062830e-09 1s 1s 76063030e-09 1s 1s 76064030e-09 0s 0s 76073070e-09 1s 1s 76073310e-09 1s 1s 76074270e-09 0s 0s 76083310e-09 1s 1s 76083590e-09 1s 1s 76084510e-09 0s 0s 76093550e-09 1s 1s 76093870e-09 1s 1s 76094750e-09 0s 0s 76103790e-09 1s 1s 76104150e-09 1s 1s 76104990e-09 0s 0s 76114030e-09 1s 1s 76114430e-09 1s 1s 76115230e-09 0s 0s 76124270e-09 1s 1s 76124710e-09 1s 1s 76125470e-09 0s 0s 76134510e-09 1s 1s 76134990e-09 1s 1s 76135710e-09 0s 0s 76144750e-09 1s 1s 76145270e-09 1s 1s 76145950e-09 0s 0s 76154990e-09 1s 1s 76155550e-09 1s 1s 76156190e-09 0s 0s 76165230e-09 1s 1s 76165830e-09 1s 1s 76166430e-09 0s 0s 76175470e-09 1s 1s 76176110e-09 1s 1s 76176670e-09 0s 0s 76185710e-09 1s 1s 76186390e-09 1s 1s 76186910e-09 0s 0s 76195950e-09 1s 1s 76196670e-09 1s 1s 76197150e-09 0s 0s 76206190e-09 1s 1s 76206950e-09 1s 1s 76207390e-09 0s 0s 76216430e-09 1s 1s 76217230e-09 1s 1s 76217630e-09 0s 0s 76226670e-09 1s 1s 76227510e-09 1s 1s 76227870e-09 0s 0s 76236910e-09 1s 1s 76237790e-09 1s 1s 76238110e-09 0s 0s 76247150e-09 1s 1s 76248070e-09 1s 1s 76248350e-09 0s 0s 76257390e-09 1s 1s 76258350e-09 1s 1s 76258590e-09 0s 0s 76267630e-09 1s 1s 76268630e-09 1s 1s 76268830e-09 0s 0s 76277870e-09 1s 1s 76278910e-09 1s 1s 76279070e-09 0s 0s 76288110e-09 1s 1s 76289190e-09 1s 1s 76289310e-09 0s 0s 76298350e-09 1s 1s 76299470e-09 1s 1s 76299550e-09 0s 0s 76308590e-09 1s 1s 76309750e-09 1s 1s 76309790e-09 0s 0s 76318830e-09 1s 1s 76320030e-09 0s 0s 76329070e-09 1s 1s 76330270e-09 0s 0s 76330310e-09 0s 0s 76339310e-09 1s 1s 76340510e-09 0s 0s 76340590e-09 0s 0s 76349550e-09 1s 1s 76350750e-09 0s 0s 76350870e-09 0s 0s 76359790e-09 1s 1s 76360990e-09 0s 0s 76361150e-09 0s 0s 76370030e-09 1s 1s 76371230e-09 0s 0s 76371430e-09 0s 0s 76380270e-09 1s 1s 76381470e-09 0s 0s 76381710e-09 0s 0s 76390510e-09 1s 1s 76391710e-09 0s 0s 76391990e-09 0s 0s 76400750e-09 1s 1s 76401950e-09 0s 0s 76402270e-09 0s 0s 76410990e-09 1s 1s 76412190e-09 0s 0s 76412550e-09 0s 0s 76421230e-09 1s 1s 76422430e-09 0s 0s 76422830e-09 0s 0s 76431470e-09 1s 1s 76432670e-09 0s 0s 76433110e-09 0s 0s 76441710e-09 1s 1s 76442910e-09 0s 0s 76443390e-09 0s 0s 76451950e-09 1s 1s 76453150e-09 0s 0s 76453670e-09 0s 0s 76462190e-09 1s 1s 76463390e-09 0s 0s 76463950e-09 0s 0s 76472430e-09 1s 1s 76473630e-09 0s 0s 76474230e-09 0s 0s 76482670e-09 1s 1s 76483870e-09 0s 0s 76484510e-09 0s 0s 76492910e-09 1s 1s 76494110e-09 0s 0s 76494790e-09 0s 0s 76503150e-09 1s 1s 76504350e-09 0s 0s 76505070e-09 0s 0s 76513390e-09 1s 1s 76514590e-09 0s 0s 76515350e-09 0s 0s 76523630e-09 1s 1s 76524830e-09 0s 0s 76525630e-09 0s 0s 76533870e-09 1s 1s 76535070e-09 0s 0s 76535910e-09 0s 0s 76544110e-09 1s 1s 76545310e-09 0s 0s 76546190e-09 0s 0s 76554350e-09 1s 1s 76555550e-09 0s 0s 76556470e-09 0s 0s 76564590e-09 1s 1s 76565790e-09 0s 0s 76566750e-09 0s 0s 76574830e-09 1s 1s 76576030e-09 0s 0s 76577030e-09 0s 0s 76585070e-09 1s 1s 76586270e-09 0s 0s 76587310e-09 0s 0s 76595310e-09 1s 1s 76596510e-09 0s 0s 76597590e-09 0s 0s 76605550e-09 1s 1s 76606750e-09 0s 0s 76607870e-09 0s 0s 76615790e-09 1s 1s 76616990e-09 0s 0s 76618150e-09 0s 0s 76626030e-09 1s 1s 76627230e-09 0s 0s 76628430e-09 0s 0s 76636270e-09 1s 1s 76637470e-09 0s 0s 76638710e-09 0s 0s 76646510e-09 1s 1s 76647710e-09 0s 0s 76648990e-09 0s 0s 76656750e-09 1s 1s 76657950e-09 0s 0s 76659270e-09 0s 0s 76666990e-09 1s 1s 76668190e-09 0s 0s 76669550e-09 0s 0s 76677230e-09 1s 1s 76678430e-09 0s 0s 76679830e-09 0s 0s 76687470e-09 1s 1s 76688670e-09 0s 0s 76690110e-09 0s 0s 76697710e-09 1s 1s 76698910e-09 0s 0s 76700390e-09 0s 0s 76707950e-09 1s 1s 76709150e-09 0s 0s 76710670e-09 0s 0s 76718190e-09 1s 1s 76719390e-09 0s 0s 76720950e-09 0s 0s 76728430e-09 1s 1s 76729630e-09 0s 0s 76731230e-09 0s 0s 76738670e-09 1s 1s 76739870e-09 0s 0s 76741510e-09 0s 0s 76748910e-09 1s 1s 76750110e-09 0s 0s 76751790e-09 0s 0s 76759150e-09 1s 1s 76760350e-09 0s 0s 76762070e-09 0s 0s 76769390e-09 1s 1s 76770590e-09 0s 0s 76772350e-09 0s 0s 76779630e-09 1s 1s 76780830e-09 0s 0s 76782630e-09 0s 0s 76789870e-09 1s 1s 76791070e-09 0s 0s 76792910e-09 0s 0s 76800110e-09 1s 1s 76801310e-09 0s 0s 76803190e-09 0s 0s 76810350e-09 1s 1s 76811550e-09 0s 0s 76813470e-09 0s 0s 76820590e-09 1s 1s 76821790e-09 0s 0s 76823750e-09 0s 0s 76830830e-09 1s 1s 76832030e-09 0s 0s 76834030e-09 0s 0s 76841070e-09 1s 1s 76842270e-09 0s 0s 76844310e-09 0s 0s 76851310e-09 1s 1s 76852510e-09 0s 0s 76854590e-09 0s 0s 76861550e-09 1s 1s 76862750e-09 0s 0s 76864870e-09 0s 0s 76871790e-09 1s 1s 76872990e-09 0s 0s 76875150e-09 0s 0s 76882030e-09 1s 1s 76883230e-09 0s 0s 76885430e-09 0s 0s 76892270e-09 1s 1s 76893470e-09 0s 0s 76895710e-09 0s 0s 76902510e-09 1s 1s 76903710e-09 0s 0s 76905990e-09 0s 0s 76912750e-09 1s 1s 76913950e-09 0s 0s 76916270e-09 0s 0s 76922990e-09 1s 1s 76924190e-09 0s 0s 76926550e-09 0s 0s 76933230e-09 1s 1s 76934430e-09 0s 0s 76936830e-09 0s 0s 76943470e-09 1s 1s 76944670e-09 0s 0s 76947110e-09 0s 0s 76953710e-09 1s 1s 76954910e-09 0s 0s 76957390e-09 0s 0s 76963950e-09 1s 1s 76965150e-09 0s 0s 76967670e-09 0s 0s 76974190e-09 1s 1s 76975390e-09 0s 0s 76977950e-09 0s 0s 76984430e-09 1s 1s 76985630e-09 0s 0s 76988230e-09 0s 0s 76994670e-09 1s 1s 76995870e-09 0s 0s 76998510e-09 0s 0s 77004910e-09 1s 1s 77006110e-09 0s 0s 77008790e-09 0s 0s 77015150e-09 1s 1s 77016350e-09 0s 0s 77019070e-09 0s 0s 77025390e-09 1s 1s 77026590e-09 0s 0s 77029350e-09 0s 0s 77035630e-09 1s 1s 77036830e-09 0s 0s 77039630e-09 0s 0s 77045870e-09 1s 1s 77047070e-09 0s 0s 77049910e-09 0s 0s 77056110e-09 1s 1s 77057310e-09 0s 0s 77060190e-09 0s 0s 77066350e-09 1s 1s 77067550e-09 0s 0s 77070470e-09 0s 0s 77076590e-09 1s 1s 77077790e-09 0s 0s 77080750e-09 0s 0s 77086830e-09 1s 1s 77088030e-09 0s 0s 77091030e-09 0s 0s 77097070e-09 1s 1s 77098270e-09 0s 0s 77101310e-09 0s 0s 77107310e-09 1s 1s 77108510e-09 0s 0s 77111590e-09 0s 0s 77117550e-09 1s 1s 77118750e-09 0s 0s 77121870e-09 0s 0s 77127790e-09 1s 1s 77128990e-09 0s 0s 77132150e-09 0s 0s 77138030e-09 1s 1s 77139230e-09 0s 0s 77142430e-09 0s 0s 77148270e-09 1s 1s 77149470e-09 0s 0s 77152710e-09 0s 0s 77158510e-09 1s 1s 77159710e-09 0s 0s 77162990e-09 0s 0s 77168750e-09 1s 1s 77169950e-09 0s 0s 77173270e-09 0s 0s 77178990e-09 1s 1s 77180190e-09 0s 0s 77183550e-09 0s 0s 77189230e-09 1s 1s 77190430e-09 0s 0s 77193830e-09 0s 0s 77199470e-09 1s 1s 77200670e-09 0s 0s 77204110e-09 0s 0s 77209710e-09 1s 1s 77210910e-09 0s 0s 77214390e-09 0s 0s 77219950e-09 1s 1s 77221150e-09 0s 0s 77224670e-09 0s 0s 77230190e-09 1s 1s 77231390e-09 0s 0s 77234950e-09 0s 0s 77240430e-09 1s 1s 77241630e-09 0s 0s 77245230e-09 0s 0s 77250670e-09 1s 1s 77251870e-09 0s 0s 77255510e-09 0s 0s 77260910e-09 1s 1s 77262110e-09 0s 0s 77265790e-09 0s 0s 77271150e-09 1s 1s 77272350e-09 0s 0s 77276070e-09 0s 0s 77281390e-09 1s 1s 77282590e-09 0s 0s 77286350e-09 0s 0s 77291630e-09 1s 1s 77292830e-09 0s 0s 77296630e-09 0s 0s 77301870e-09 1s 1s 77303070e-09 0s 0s 77306910e-09 0s 0s 77312110e-09 1s 1s 77313310e-09 0s 0s 77317190e-09 0s 0s 77322350e-09 1s 1s 77323550e-09 0s 0s 77327470e-09 0s 0s 77332590e-09 1s 1s 77333790e-09 0s 0s 77337750e-09 0s 0s 77342830e-09 1s 1s 77344030e-09 0s 0s 77348030e-09 0s 0s 77353070e-09 1s 1s 77354270e-09 0s 0s 77358310e-09 0s 0s 77363310e-09 1s 1s 77364510e-09 0s 0s 77368590e-09 0s 0s 77373550e-09 1s 1s 77374750e-09 0s 0s 77378870e-09 0s 0s 77383790e-09 1s 1s 77384990e-09 0s 0s 77389150e-09 0s 0s 77394030e-09 1s 1s 77395230e-09 0s 0s 77399430e-09 0s 0s 77404270e-09 1s 1s 77405470e-09 0s 0s 77409710e-09 0s 0s 77414510e-09 1s 1s 77415710e-09 0s 0s 77419990e-09 0s 0s 77424750e-09 1s 1s 77425950e-09 0s 0s 77430270e-09 0s 0s 77434990e-09 1s 1s 77436190e-09 0s 0s 77440550e-09 0s 0s 77445230e-09 1s 1s 77446430e-09 0s 0s 77450830e-09 0s 0s 77455470e-09 1s 1s 77456670e-09 0s 0s 77461110e-09 0s 0s 77465710e-09 1s 1s 77466910e-09 0s 0s 77471390e-09 0s 0s 77475950e-09 1s 1s 77477150e-09 0s 0s 77481670e-09 0s 0s 77486190e-09 1s 1s 77487390e-09 0s 0s 77491950e-09 0s 0s 77496430e-09 1s 1s 77497630e-09 0s 0s 77502230e-09 0s 0s 77506670e-09 1s 1s 77507870e-09 0s 0s 77512510e-09 0s 0s 77516910e-09 1s 1s 77518110e-09 0s 0s 77522790e-09 0s 0s 77527150e-09 1s 1s 77528350e-09 0s 0s 77533070e-09 0s 0s 77537390e-09 1s 1s 77538590e-09 0s 0s 77543350e-09 0s 0s 77547630e-09 1s 1s 77548830e-09 0s 0s 77553630e-09 0s 0s 77557870e-09 1s 1s 77559070e-09 0s 0s 77563910e-09 0s 0s 77568110e-09 1s 1s 77569310e-09 0s 0s 77574190e-09 0s 0s 77578350e-09 1s 1s 77579550e-09 0s 0s 77584470e-09 0s 0s 77588590e-09 1s 1s 77589790e-09 0s 0s 77594750e-09 0s 0s 77598830e-09 1s 1s 77600030e-09 0s 0s 77605030e-09 0s 0s 77609070e-09 1s 1s 77610270e-09 0s 0s 77615310e-09 0s 0s 77619310e-09 1s 1s 77620510e-09 0s 0s 77625590e-09 0s 0s 77629550e-09 1s 1s 77630750e-09 0s 0s 77635870e-09 0s 0s 77639790e-09 1s 1s 77640990e-09 0s 0s 77646150e-09 0s 0s 77650030e-09 1s 1s 77651230e-09 0s 0s 77656430e-09 0s 0s 77660270e-09 1s 1s 77661470e-09 0s 0s 77666710e-09 0s 0s 77670510e-09 1s 1s 77671710e-09 0s 0s 77676990e-09 0s 0s 77680750e-09 1s 1s 77681950e-09 0s 0s 77687270e-09 0s 0s 77690990e-09 1s 1s 77692190e-09 0s 0s 77697550e-09 0s 0s 77701230e-09 1s 1s 77702430e-09 0s 0s 77707830e-09 0s 0s 77711470e-09 1s 1s 77712670e-09 0s 0s 77718110e-09 0s 0s 77721710e-09 1s 1s 77722910e-09 0s 0s 77728390e-09 0s 0s 77731950e-09 1s 1s 77733150e-09 0s 0s 77738670e-09 0s 0s 77742190e-09 1s 1s 77743390e-09 0s 0s 77748950e-09 0s 0s 77752430e-09 1s 1s 77753630e-09 0s 0s 77759230e-09 0s 0s 77762670e-09 1s 1s 77763870e-09 0s 0s 77769510e-09 0s 0s 77772910e-09 1s 1s 77774110e-09 0s 0s 77779790e-09 0s 0s 77783150e-09 1s 1s 77784350e-09 0s 0s 77790070e-09 0s 0s 77793390e-09 1s 1s 77794590e-09 0s 0s 77800350e-09 0s 0s 77803630e-09 1s 1s 77804830e-09 0s 0s 77810630e-09 0s 0s 77813870e-09 1s 1s 77815070e-09 0s 0s 77820910e-09 0s 0s 77824110e-09 1s 1s 77825310e-09 0s 0s 77831190e-09 0s 0s 77834350e-09 1s 1s 77835550e-09 0s 0s 77841470e-09 0s 0s 77844590e-09 1s 1s 77845790e-09 0s 0s 77851750e-09 0s 0s 77854830e-09 1s 1s 77856030e-09 0s 0s 77862030e-09 0s 0s 77865070e-09 1s 1s 77866270e-09 0s 0s 77872310e-09 0s 0s 77875310e-09 1s 1s 77876510e-09 0s 0s 77882590e-09 0s 0s 77885550e-09 1s 1s 77886750e-09 0s 0s 77892870e-09 0s 0s 77895790e-09 1s 1s 77896990e-09 0s 0s 77903150e-09 0s 0s 77906030e-09 1s 1s 77907230e-09 0s 0s 77913430e-09 0s 0s 77916270e-09 1s 1s 77917470e-09 0s 0s 77923710e-09 0s 0s 77926510e-09 1s 1s 77927710e-09 0s 0s 77933990e-09 0s 0s 77936750e-09 1s 1s 77937950e-09 0s 0s 77944270e-09 0s 0s 77946990e-09 1s 1s 77948190e-09 0s 0s 77954550e-09 0s 0s 77957230e-09 1s 1s 77958430e-09 0s 0s 77964830e-09 0s 0s 77967470e-09 1s 1s 77968670e-09 0s 0s 77975110e-09 0s 0s 77977710e-09 1s 1s 77978910e-09 0s 0s 77985390e-09 0s 0s 77987950e-09 1s 1s 77989150e-09 0s 0s 77995670e-09 0s 0s 77998190e-09 1s 1s 77999390e-09 0s 0s 78005950e-09 0s 0s 78008430e-09 1s 1s 78009630e-09 0s 0s 78016230e-09 0s 0s 78018670e-09 1s 1s 78019870e-09 0s 0s 78026510e-09 0s 0s 78028910e-09 1s 1s 78030110e-09 0s 0s 78036790e-09 0s 0s 78039150e-09 1s 1s 78040350e-09 0s 0s 78047070e-09 0s 0s 78049390e-09 1s 1s 78050590e-09 0s 0s 78057350e-09 0s 0s 78059630e-09 1s 1s 78060830e-09 0s 0s 78067630e-09 0s 0s 78069870e-09 1s 1s 78071070e-09 0s 0s 78077910e-09 0s 0s 78080110e-09 1s 1s 78081310e-09 0s 0s 78088190e-09 0s 0s 78090350e-09 1s 1s 78091550e-09 0s 0s 78098470e-09 0s 0s 78100590e-09 1s 1s 78101790e-09 0s 0s 78108750e-09 0s 0s 78110830e-09 1s 1s 78112030e-09 0s 0s 78119030e-09 0s 0s 78121070e-09 1s 1s 78122270e-09 0s 0s 78129310e-09 0s 0s 78131310e-09 1s 1s 78132510e-09 0s 0s 78139590e-09 0s 0s 78141550e-09 1s 1s 78142750e-09 0s 0s 78149870e-09 0s 0s 78151790e-09 1s 1s 78152990e-09 0s 0s 78160150e-09 0s 0s 78162030e-09 1s 1s 78163230e-09 0s 0s 78170430e-09 0s 0s 78172270e-09 1s 1s 78173470e-09 0s 0s 78180710e-09 0s 0s 78182510e-09 1s 1s 78183710e-09 0s 0s 78190990e-09 0s 0s 78192750e-09 1s 1s 78193950e-09 0s 0s 78201270e-09 0s 0s 78202990e-09 1s 1s 78204190e-09 0s 0s 78211550e-09 0s 0s 78213230e-09 1s 1s 78214430e-09 0s 0s 78221830e-09 0s 0s 78223470e-09 1s 1s 78224670e-09 0s 0s 78232110e-09 0s 0s 78233710e-09 1s 1s 78234910e-09 0s 0s 78242390e-09 0s 0s 78243950e-09 1s 1s 78245150e-09 0s 0s 78252670e-09 0s 0s 78254190e-09 1s 1s 78255390e-09 0s 0s 78262950e-09 0s 0s 78264430e-09 1s 1s 78265630e-09 0s 0s 78273230e-09 0s 0s 78274670e-09 1s 1s 78275870e-09 0s 0s 78283510e-09 0s 0s 78284910e-09 1s 1s 78286110e-09 0s 0s 78293790e-09 0s 0s 78295150e-09 1s 1s 78296350e-09 0s 0s 78304070e-09 0s 0s 78305390e-09 1s 1s 78306590e-09 0s 0s 78314350e-09 0s 0s 78315630e-09 1s 1s 78316830e-09 0s 0s 78324630e-09 0s 0s 78325870e-09 1s 1s 78327070e-09 0s 0s 78334910e-09 0s 0s 78336110e-09 1s 1s 78337310e-09 0s 0s 78345190e-09 0s 0s 78346350e-09 1s 1s 78347550e-09 0s 0s 78355470e-09 0s 0s 78356590e-09 1s 1s 78357790e-09 0s 0s 78365750e-09 0s 0s 78366830e-09 1s 1s 78368030e-09 0s 0s 78376030e-09 0s 0s 78377070e-09 1s 1s 78378270e-09 0s 0s 78386310e-09 0s 0s 78387310e-09 1s 1s 78388510e-09 0s 0s 78396590e-09 0s 0s 78397550e-09 1s 1s 78398750e-09 0s 0s 78406870e-09 0s 0s 78407790e-09 1s 1s 78408990e-09 0s 0s 78417150e-09 0s 0s 78418030e-09 1s 1s 78419230e-09 0s 0s 78427430e-09 0s 0s 78428270e-09 1s 1s 78429470e-09 0s 0s 78437710e-09 0s 0s 78438510e-09 1s 1s 78439710e-09 0s 0s 78447990e-09 0s 0s 78448750e-09 1s 1s 78449950e-09 0s 0s 78458270e-09 0s 0s 78458990e-09 1s 1s 78460190e-09 0s 0s 78468550e-09 0s 0s 78469230e-09 1s 1s 78470430e-09 0s 0s 78478830e-09 0s 0s 78479470e-09 1s 1s 78480670e-09 0s 0s 78489110e-09 0s 0s 78489710e-09 1s 1s 78490910e-09 0s 0s 78499390e-09 0s 0s 78499950e-09 1s 1s 78501150e-09 0s 0s 78509670e-09 0s 0s 78510190e-09 1s 1s 78511390e-09 0s 0s 78519950e-09 0s 0s 78520430e-09 1s 1s 78521630e-09 0s 0s 78530230e-09 0s 0s 78530670e-09 1s 1s 78531870e-09 0s 0s 78540510e-09 0s 0s 78540910e-09 1s 1s 78542110e-09 0s 0s 78550790e-09 0s 0s 78551150e-09 1s 1s 78552350e-09 0s 0s 78561070e-09 0s 0s 78561390e-09 1s 1s 78562590e-09 0s 0s 78571350e-09 0s 0s 78571630e-09 1s 1s 78572830e-09 0s 0s 78581630e-09 0s 0s 78581870e-09 1s 1s 78583070e-09 0s 0s 78591910e-09 0s 0s 78592110e-09 1s 1s 78593310e-09 0s 0s 78602190e-09 0s 0s 78602350e-09 1s 1s 78603550e-09 0s 0s 78612470e-09 0s 0s 78612590e-09 1s 1s 78613790e-09 0s 0s 78622750e-09 0s 0s 78622830e-09 1s 1s 78624030e-09 0s 0s 78633030e-09 0s 0s 78633070e-09 1s 1s 78634270e-09 0s 0s 78643310e-09 1s 1s 78643350e-09 1s 1s 78644550e-09 0s 0s 78653550e-09 1s 1s 78653630e-09 1s 1s 78654790e-09 0s 0s 78663790e-09 1s 1s 78663910e-09 1s 1s 78665030e-09 0s 0s 78674030e-09 1s 1s 78674190e-09 1s 1s 78675270e-09 0s 0s 78684270e-09 1s 1s 78684470e-09 1s 1s 78685510e-09 0s 0s 78694510e-09 1s 1s 78694750e-09 1s 1s 78695750e-09 0s 0s 78704750e-09 1s 1s 78705030e-09 1s 1s 78705990e-09 0s 0s 78714990e-09 1s 1s 78715310e-09 1s 1s 78716230e-09 0s 0s 78725230e-09 1s 1s 78725590e-09 1s 1s 78726470e-09 0s 0s 78735470e-09 1s 1s 78735870e-09 1s 1s 78736710e-09 0s 0s 78745710e-09 1s 1s 78746150e-09 1s 1s 78746950e-09 0s 0s 78755950e-09 1s 1s 78756430e-09 1s 1s 78757190e-09 0s 0s 78766190e-09 1s 1s 78766710e-09 1s 1s 78767430e-09 0s 0s 78776430e-09 1s 1s 78776990e-09 1s 1s 78777670e-09 0s 0s 78786670e-09 1s 1s 78787270e-09 1s 1s 78787910e-09 0s 0s 78796910e-09 1s 1s 78797550e-09 1s 1s 78798150e-09 0s 0s 78807150e-09 1s 1s 78807830e-09 1s 1s 78808390e-09 0s 0s 78817390e-09 1s 1s 78818110e-09 1s 1s 78818630e-09 0s 0s 78827630e-09 1s 1s 78828390e-09 1s 1s 78828870e-09 0s 0s 78837870e-09 1s 1s 78838670e-09 1s 1s 78839110e-09 0s 0s 78848110e-09 1s 1s 78848950e-09 1s 1s 78849350e-09 0s 0s 78858350e-09 1s 1s 78859230e-09 1s 1s 78859590e-09 0s 0s 78868590e-09 1s 1s 78869510e-09 1s 1s 78869830e-09 0s 0s 78878830e-09 1s 1s 78879790e-09 1s 1s 78880070e-09 0s 0s 78889070e-09 1s 1s 78890070e-09 1s 1s 78890310e-09 0s 0s 78899310e-09 1s 1s 78900350e-09 1s 1s 78900550e-09 0s 0s 78909550e-09 1s 1s 78910630e-09 1s 1s 78910790e-09 0s 0s 78919790e-09 1s 1s 78920910e-09 1s 1s 78921030e-09 0s 0s 78930030e-09 1s 1s 78931190e-09 1s 1s 78931270e-09 0s 0s 78940270e-09 1s 1s 78941470e-09 1s 1s 78941510e-09 0s 0s 78950510e-09 1s 1s 78951750e-09 0s 0s 78960750e-09 1s 1s 78961990e-09 0s 0s 78962030e-09 0s 0s 78970990e-09 1s 1s 78972230e-09 0s 0s 78972310e-09 0s 0s 78981230e-09 1s 1s 78982470e-09 0s 0s 78982590e-09 0s 0s 78991470e-09 1s 1s 78992710e-09 0s 0s 78992870e-09 0s 0s 79001710e-09 1s 1s 79002950e-09 0s 0s 79003150e-09 0s 0s 79011950e-09 1s 1s 79013190e-09 0s 0s 79013430e-09 0s 0s 79022190e-09 1s 1s 79023430e-09 0s 0s 79023710e-09 0s 0s 79032430e-09 1s 1s 79033670e-09 0s 0s 79033990e-09 0s 0s 79042670e-09 1s 1s 79043910e-09 0s 0s 79044270e-09 0s 0s 79052910e-09 1s 1s 79054150e-09 0s 0s 79054550e-09 0s 0s 79063150e-09 1s 1s 79064390e-09 0s 0s 79064830e-09 0s 0s 79073390e-09 1s 1s 79074630e-09 0s 0s 79075110e-09 0s 0s 79083630e-09 1s 1s 79084870e-09 0s 0s 79085390e-09 0s 0s 79093870e-09 1s 1s 79095110e-09 0s 0s 79095670e-09 0s 0s 79104110e-09 1s 1s 79105350e-09 0s 0s 79105950e-09 0s 0s 79114350e-09 1s 1s 79115590e-09 0s 0s 79116230e-09 0s 0s 79124590e-09 1s 1s 79125830e-09 0s 0s 79126510e-09 0s 0s 79134830e-09 1s 1s 79136070e-09 0s 0s 79136790e-09 0s 0s 79145070e-09 1s 1s 79146310e-09 0s 0s 79147070e-09 0s 0s 79155310e-09 1s 1s 79156550e-09 0s 0s 79157350e-09 0s 0s 79165550e-09 1s 1s 79166790e-09 0s 0s 79167630e-09 0s 0s 79175790e-09 1s 1s 79177030e-09 0s 0s 79177910e-09 0s 0s 79186030e-09 1s 1s 79187270e-09 0s 0s 79188190e-09 0s 0s 79196270e-09 1s 1s 79197510e-09 0s 0s 79198470e-09 0s 0s 79206510e-09 1s 1s 79207750e-09 0s 0s 79208750e-09 0s 0s 79216750e-09 1s 1s 79217990e-09 0s 0s 79219030e-09 0s 0s 79226990e-09 1s 1s 79228230e-09 0s 0s 79229310e-09 0s 0s 79237230e-09 1s 1s 79238470e-09 0s 0s 79239590e-09 0s 0s 79247470e-09 1s 1s 79248710e-09 0s 0s 79249870e-09 0s 0s 79257710e-09 1s 1s 79258950e-09 0s 0s 79260150e-09 0s 0s 79267950e-09 1s 1s 79269190e-09 0s 0s 79270430e-09 0s 0s 79278190e-09 1s 1s 79279430e-09 0s 0s 79280710e-09 0s 0s 79288430e-09 1s 1s 79289670e-09 0s 0s 79290990e-09 0s 0s 79298670e-09 1s 1s 79299910e-09 0s 0s 79301270e-09 0s 0s 79308910e-09 1s 1s 79310150e-09 0s 0s 79311550e-09 0s 0s 79319150e-09 1s 1s 79320390e-09 0s 0s 79321830e-09 0s 0s 79329390e-09 1s 1s 79330630e-09 0s 0s 79332110e-09 0s 0s 79339630e-09 1s 1s 79340870e-09 0s 0s 79342390e-09 0s 0s 79349870e-09 1s 1s 79351110e-09 0s 0s 79352670e-09 0s 0s 79360110e-09 1s 1s 79361350e-09 0s 0s 79362950e-09 0s 0s 79370350e-09 1s 1s 79371590e-09 0s 0s 79373230e-09 0s 0s 79380590e-09 1s 1s 79381830e-09 0s 0s 79383510e-09 0s 0s 79390830e-09 1s 1s 79392070e-09 0s 0s 79393790e-09 0s 0s 79401070e-09 1s 1s 79402310e-09 0s 0s 79404070e-09 0s 0s 79411310e-09 1s 1s 79412550e-09 0s 0s 79414350e-09 0s 0s 79421550e-09 1s 1s 79422790e-09 0s 0s 79424630e-09 0s 0s 79431790e-09 1s 1s 79433030e-09 0s 0s 79434910e-09 0s 0s 79442030e-09 1s 1s 79443270e-09 0s 0s 79445190e-09 0s 0s 79452270e-09 1s 1s 79453510e-09 0s 0s 79455470e-09 0s 0s 79462510e-09 1s 1s 79463750e-09 0s 0s 79465750e-09 0s 0s 79472750e-09 1s 1s 79473990e-09 0s 0s 79476030e-09 0s 0s 79482990e-09 1s 1s 79484230e-09 0s 0s 79486310e-09 0s 0s 79493230e-09 1s 1s 79494470e-09 0s 0s 79496590e-09 0s 0s 79503470e-09 1s 1s 79504710e-09 0s 0s 79506870e-09 0s 0s 79513710e-09 1s 1s 79514950e-09 0s 0s 79517150e-09 0s 0s 79523950e-09 1s 1s 79525190e-09 0s 0s 79527430e-09 0s 0s 79534190e-09 1s 1s 79535430e-09 0s 0s 79537710e-09 0s 0s 79544430e-09 1s 1s 79545670e-09 0s 0s 79547990e-09 0s 0s 79554670e-09 1s 1s 79555910e-09 0s 0s 79558270e-09 0s 0s 79564910e-09 1s 1s 79566150e-09 0s 0s 79568550e-09 0s 0s 79575150e-09 1s 1s 79576390e-09 0s 0s 79578830e-09 0s 0s 79585390e-09 1s 1s 79586630e-09 0s 0s 79589110e-09 0s 0s 79595630e-09 1s 1s 79596870e-09 0s 0s 79599390e-09 0s 0s 79605870e-09 1s 1s 79607110e-09 0s 0s 79609670e-09 0s 0s 79616110e-09 1s 1s 79617350e-09 0s 0s 79619950e-09 0s 0s 79626350e-09 1s 1s 79627590e-09 0s 0s 79630230e-09 0s 0s 79636590e-09 1s 1s 79637830e-09 0s 0s 79640510e-09 0s 0s 79646830e-09 1s 1s 79648070e-09 0s 0s 79650790e-09 0s 0s 79657070e-09 1s 1s 79658310e-09 0s 0s 79661070e-09 0s 0s 79667310e-09 1s 1s 79668550e-09 0s 0s 79671350e-09 0s 0s 79677550e-09 1s 1s 79678790e-09 0s 0s 79681630e-09 0s 0s 79687790e-09 1s 1s 79689030e-09 0s 0s 79691910e-09 0s 0s 79698030e-09 1s 1s 79699270e-09 0s 0s 79702190e-09 0s 0s 79708270e-09 1s 1s 79709510e-09 0s 0s 79712470e-09 0s 0s 79718510e-09 1s 1s 79719750e-09 0s 0s 79722750e-09 0s 0s 79728750e-09 1s 1s 79729990e-09 0s 0s 79733030e-09 0s 0s 79738990e-09 1s 1s 79740230e-09 0s 0s 79743310e-09 0s 0s 79749230e-09 1s 1s 79750470e-09 0s 0s 79753590e-09 0s 0s 79759470e-09 1s 1s 79760710e-09 0s 0s 79763870e-09 0s 0s 79769710e-09 1s 1s 79770950e-09 0s 0s 79774150e-09 0s 0s 79779950e-09 1s 1s 79781190e-09 0s 0s 79784430e-09 0s 0s 79790190e-09 1s 1s 79791430e-09 0s 0s 79794710e-09 0s 0s 79800430e-09 1s 1s 79801670e-09 0s 0s 79804990e-09 0s 0s 79810670e-09 1s 1s 79811910e-09 0s 0s 79815270e-09 0s 0s 79820910e-09 1s 1s 79822150e-09 0s 0s 79825550e-09 0s 0s 79831150e-09 1s 1s 79832390e-09 0s 0s 79835830e-09 0s 0s 79841390e-09 1s 1s 79842630e-09 0s 0s 79846110e-09 0s 0s 79851630e-09 1s 1s 79852870e-09 0s 0s 79856390e-09 0s 0s 79861870e-09 1s 1s 79863110e-09 0s 0s 79866670e-09 0s 0s 79872110e-09 1s 1s 79873350e-09 0s 0s 79876950e-09 0s 0s 79882350e-09 1s 1s 79883590e-09 0s 0s 79887230e-09 0s 0s 79892590e-09 1s 1s 79893830e-09 0s 0s 79897510e-09 0s 0s 79902830e-09 1s 1s 79904070e-09 0s 0s 79907790e-09 0s 0s 79913070e-09 1s 1s 79914310e-09 0s 0s 79918070e-09 0s 0s 79923310e-09 1s 1s 79924550e-09 0s 0s 79928350e-09 0s 0s 79933550e-09 1s 1s 79934790e-09 0s 0s 79938630e-09 0s 0s 79943790e-09 1s 1s 79945030e-09 0s 0s 79948910e-09 0s 0s 79954030e-09 1s 1s 79955270e-09 0s 0s 79959190e-09 0s 0s 79964270e-09 1s 1s 79965510e-09 0s 0s 79969470e-09 0s 0s 79974510e-09 1s 1s 79975750e-09 0s 0s 79979750e-09 0s 0s 79984750e-09 1s 1s 79985990e-09 0s 0s 79990030e-09 0s 0s 79994990e-09 1s 1s 79996230e-09 0s 0s 80000310e-09 0s 0s 80005230e-09 1s 1s 80006470e-09 0s 0s 80010590e-09 0s 0s 80015470e-09 1s 1s 80016710e-09 0s 0s 80020870e-09 0s 0s 80025710e-09 1s 1s 80026950e-09 0s 0s 80031150e-09 0s 0s 80035950e-09 1s 1s 80037190e-09 0s 0s 80041430e-09 0s 0s 80046190e-09 1s 1s 80047430e-09 0s 0s 80051710e-09 0s 0s 80056430e-09 1s 1s 80057670e-09 0s 0s 80061990e-09 0s 0s 80066670e-09 1s 1s 80067910e-09 0s 0s 80072270e-09 0s 0s 80076910e-09 1s 1s 80078150e-09 0s 0s 80082550e-09 0s 0s 80087150e-09 1s 1s 80088390e-09 0s 0s 80092830e-09 0s 0s 80097390e-09 1s 1s 80098630e-09 0s 0s 80103110e-09 0s 0s 80107630e-09 1s 1s 80108870e-09 0s 0s 80113390e-09 0s 0s 80117870e-09 1s 1s 80119110e-09 0s 0s 80123670e-09 0s 0s 80128110e-09 1s 1s 80129350e-09 0s 0s 80133950e-09 0s 0s 80138350e-09 1s 1s 80139590e-09 0s 0s 80144230e-09 0s 0s 80148590e-09 1s 1s 80149830e-09 0s 0s 80154510e-09 0s 0s 80158830e-09 1s 1s 80160070e-09 0s 0s 80164790e-09 0s 0s 80169070e-09 1s 1s 80170310e-09 0s 0s 80175070e-09 0s 0s 80179310e-09 1s 1s 80180550e-09 0s 0s 80185350e-09 0s 0s 80189550e-09 1s 1s 80190790e-09 0s 0s 80195630e-09 0s 0s 80199790e-09 1s 1s 80201030e-09 0s 0s 80205910e-09 0s 0s 80210030e-09 1s 1s 80211270e-09 0s 0s 80216190e-09 0s 0s 80220270e-09 1s 1s 80221510e-09 0s 0s 80226470e-09 0s 0s 80230510e-09 1s 1s 80231750e-09 0s 0s 80236750e-09 0s 0s 80240750e-09 1s 1s 80241990e-09 0s 0s 80247030e-09 0s 0s 80250990e-09 1s 1s 80252230e-09 0s 0s 80257310e-09 0s 0s 80261230e-09 1s 1s 80262470e-09 0s 0s 80267590e-09 0s 0s 80271470e-09 1s 1s 80272710e-09 0s 0s 80277870e-09 0s 0s 80281710e-09 1s 1s 80282950e-09 0s 0s 80288150e-09 0s 0s 80291950e-09 1s 1s 80293190e-09 0s 0s 80298430e-09 0s 0s 80302190e-09 1s 1s 80303430e-09 0s 0s 80308710e-09 0s 0s 80312430e-09 1s 1s 80313670e-09 0s 0s 80318990e-09 0s 0s 80322670e-09 1s 1s 80323910e-09 0s 0s 80329270e-09 0s 0s 80332910e-09 1s 1s 80334150e-09 0s 0s 80339550e-09 0s 0s 80343150e-09 1s 1s 80344390e-09 0s 0s 80349830e-09 0s 0s 80353390e-09 1s 1s 80354630e-09 0s 0s 80360110e-09 0s 0s 80363630e-09 1s 1s 80364870e-09 0s 0s 80370390e-09 0s 0s 80373870e-09 1s 1s 80375110e-09 0s 0s 80380670e-09 0s 0s 80384110e-09 1s 1s 80385350e-09 0s 0s 80390950e-09 0s 0s 80394350e-09 1s 1s 80395590e-09 0s 0s 80401230e-09 0s 0s 80404590e-09 1s 1s 80405830e-09 0s 0s 80411510e-09 0s 0s 80414830e-09 1s 1s 80416070e-09 0s 0s 80421790e-09 0s 0s 80425070e-09 1s 1s 80426310e-09 0s 0s 80432070e-09 0s 0s 80435310e-09 1s 1s 80436550e-09 0s 0s 80442350e-09 0s 0s 80445550e-09 1s 1s 80446790e-09 0s 0s 80452630e-09 0s 0s 80455790e-09 1s 1s 80457030e-09 0s 0s 80462910e-09 0s 0s 80466030e-09 1s 1s 80467270e-09 0s 0s 80473190e-09 0s 0s 80476270e-09 1s 1s 80477510e-09 0s 0s 80483470e-09 0s 0s 80486510e-09 1s 1s 80487750e-09 0s 0s 80493750e-09 0s 0s 80496750e-09 1s 1s 80497990e-09 0s 0s 80504030e-09 0s 0s 80506990e-09 1s 1s 80508230e-09 0s 0s 80514310e-09 0s 0s 80517230e-09 1s 1s 80518470e-09 0s 0s 80524590e-09 0s 0s 80527470e-09 1s 1s 80528710e-09 0s 0s 80534870e-09 0s 0s 80537710e-09 1s 1s 80538950e-09 0s 0s 80545150e-09 0s 0s 80547950e-09 1s 1s 80549190e-09 0s 0s 80555430e-09 0s 0s 80558190e-09 1s 1s 80559430e-09 0s 0s 80565710e-09 0s 0s 80568430e-09 1s 1s 80569670e-09 0s 0s 80575990e-09 0s 0s 80578670e-09 1s 1s 80579910e-09 0s 0s 80586270e-09 0s 0s 80588910e-09 1s 1s 80590150e-09 0s 0s 80596550e-09 0s 0s 80599150e-09 1s 1s 80600390e-09 0s 0s 80606830e-09 0s 0s 80609390e-09 1s 1s 80610630e-09 0s 0s 80617110e-09 0s 0s 80619630e-09 1s 1s 80620870e-09 0s 0s 80627390e-09 0s 0s 80629870e-09 1s 1s 80631110e-09 0s 0s 80637670e-09 0s 0s 80640110e-09 1s 1s 80641350e-09 0s 0s 80647950e-09 0s 0s 80650350e-09 1s 1s 80651590e-09 0s 0s 80658230e-09 0s 0s 80660590e-09 1s 1s 80661830e-09 0s 0s 80668510e-09 0s 0s 80670830e-09 1s 1s 80672070e-09 0s 0s 80678790e-09 0s 0s 80681070e-09 1s 1s 80682310e-09 0s 0s 80689070e-09 0s 0s 80691310e-09 1s 1s 80692550e-09 0s 0s 80699350e-09 0s 0s 80701550e-09 1s 1s 80702790e-09 0s 0s 80709630e-09 0s 0s 80711790e-09 1s 1s 80713030e-09 0s 0s 80719910e-09 0s 0s 80722030e-09 1s 1s 80723270e-09 0s 0s 80730190e-09 0s 0s 80732270e-09 1s 1s 80733510e-09 0s 0s 80740470e-09 0s 0s 80742510e-09 1s 1s 80743750e-09 0s 0s 80750750e-09 0s 0s 80752750e-09 1s 1s 80753990e-09 0s 0s 80761030e-09 0s 0s 80762990e-09 1s 1s 80764230e-09 0s 0s 80771310e-09 0s 0s 80773230e-09 1s 1s 80774470e-09 0s 0s 80781590e-09 0s 0s 80783470e-09 1s 1s 80784710e-09 0s 0s 80791870e-09 0s 0s 80793710e-09 1s 1s 80794950e-09 0s 0s 80802150e-09 0s 0s 80803950e-09 1s 1s 80805190e-09 0s 0s 80812430e-09 0s 0s 80814190e-09 1s 1s 80815430e-09 0s 0s 80822710e-09 0s 0s 80824430e-09 1s 1s 80825670e-09 0s 0s 80832990e-09 0s 0s 80834670e-09 1s 1s 80835910e-09 0s 0s 80843270e-09 0s 0s 80844910e-09 1s 1s 80846150e-09 0s 0s 80853550e-09 0s 0s 80855150e-09 1s 1s 80856390e-09 0s 0s 80863830e-09 0s 0s 80865390e-09 1s 1s 80866630e-09 0s 0s 80874110e-09 0s 0s 80875630e-09 1s 1s 80876870e-09 0s 0s 80884390e-09 0s 0s 80885870e-09 1s 1s 80887110e-09 0s 0s 80894670e-09 0s 0s 80896110e-09 1s 1s 80897350e-09 0s 0s 80904950e-09 0s 0s 80906350e-09 1s 1s 80907590e-09 0s 0s 80915230e-09 0s 0s 80916590e-09 1s 1s 80917830e-09 0s 0s 80925510e-09 0s 0s 80926830e-09 1s 1s 80928070e-09 0s 0s 80935790e-09 0s 0s 80937070e-09 1s 1s 80938310e-09 0s 0s 80946070e-09 0s 0s 80947310e-09 1s 1s 80948550e-09 0s 0s 80956350e-09 0s 0s 80957550e-09 1s 1s 80958790e-09 0s 0s 80966630e-09 0s 0s 80967790e-09 1s 1s 80969030e-09 0s 0s 80976910e-09 0s 0s 80978030e-09 1s 1s 80979270e-09 0s 0s 80987190e-09 0s 0s 80988270e-09 1s 1s 80989510e-09 0s 0s 80997470e-09 0s 0s 80998510e-09 1s 1s 80999750e-09 0s 0s 81007750e-09 0s 0s 81008750e-09 1s 1s 81009990e-09 0s 0s 81018030e-09 0s 0s 81018990e-09 1s 1s 81020230e-09 0s 0s 81028310e-09 0s 0s 81029230e-09 1s 1s 81030470e-09 0s 0s 81038590e-09 0s 0s 81039470e-09 1s 1s 81040710e-09 0s 0s 81048870e-09 0s 0s 81049710e-09 1s 1s 81050950e-09 0s 0s 81059150e-09 0s 0s 81059950e-09 1s 1s 81061190e-09 0s 0s 81069430e-09 0s 0s 81070190e-09 1s 1s 81071430e-09 0s 0s 81079710e-09 0s 0s 81080430e-09 1s 1s 81081670e-09 0s 0s 81089990e-09 0s 0s 81090670e-09 1s 1s 81091910e-09 0s 0s 81100270e-09 0s 0s 81100910e-09 1s 1s 81102150e-09 0s 0s 81110550e-09 0s 0s 81111150e-09 1s 1s 81112390e-09 0s 0s 81120830e-09 0s 0s 81121390e-09 1s 1s 81122630e-09 0s 0s 81131110e-09 0s 0s 81131630e-09 1s 1s 81132870e-09 0s 0s 81141390e-09 0s 0s 81141870e-09 1s 1s 81143110e-09 0s 0s 81151670e-09 0s 0s 81152110e-09 1s 1s 81153350e-09 0s 0s 81161950e-09 0s 0s 81162350e-09 1s 1s 81163590e-09 0s 0s 81172230e-09 0s 0s 81172590e-09 1s 1s 81173830e-09 0s 0s 81182510e-09 0s 0s 81182830e-09 1s 1s 81184070e-09 0s 0s 81192790e-09 0s 0s 81193070e-09 1s 1s 81194310e-09 0s 0s 81203070e-09 0s 0s 81203310e-09 1s 1s 81204550e-09 0s 0s 81213350e-09 0s 0s 81213550e-09 1s 1s 81214790e-09 0s 0s 81223630e-09 0s 0s 81223790e-09 1s 1s 81225030e-09 0s 0s 81233910e-09 0s 0s 81234030e-09 1s 1s 81235270e-09 0s 0s 81244190e-09 0s 0s 81244270e-09 1s 1s 81245510e-09 0s 0s 81254470e-09 0s 0s 81254510e-09 1s 1s 81255750e-09 0s 0s 81264750e-09 1s 1s 81264790e-09 1s 1s 81266030e-09 0s 0s 81274990e-09 1s 1s 81275070e-09 1s 1s 81276270e-09 0s 0s 81285230e-09 1s 1s 81285350e-09 1s 1s 81286510e-09 0s 0s 81295470e-09 1s 1s 81295630e-09 1s 1s 81296750e-09 0s 0s 81305710e-09 1s 1s 81305910e-09 1s 1s 81306990e-09 0s 0s 81315950e-09 1s 1s 81316190e-09 1s 1s 81317230e-09 0s 0s 81326190e-09 1s 1s 81326470e-09 1s 1s 81327470e-09 0s 0s 81336430e-09 1s 1s 81336750e-09 1s 1s 81337710e-09 0s 0s 81346670e-09 1s 1s 81347030e-09 1s 1s 81347950e-09 0s 0s 81356910e-09 1s 1s 81357310e-09 1s 1s 81358190e-09 0s 0s 81367150e-09 1s 1s 81367590e-09 1s 1s 81368430e-09 0s 0s 81377390e-09 1s 1s 81377870e-09 1s 1s 81378670e-09 0s 0s 81387630e-09 1s 1s 81388150e-09 1s 1s 81388910e-09 0s 0s 81397870e-09 1s 1s 81398430e-09 1s 1s 81399150e-09 0s 0s 81408110e-09 1s 1s 81408710e-09 1s 1s 81409390e-09 0s 0s 81418350e-09 1s 1s 81418990e-09 1s 1s 81419630e-09 0s 0s 81428590e-09 1s 1s 81429270e-09 1s 1s 81429870e-09 0s 0s 81438830e-09 1s 1s 81439550e-09 1s 1s 81440110e-09 0s 0s 81449070e-09 1s 1s 81449830e-09 1s 1s 81450350e-09 0s 0s 81459310e-09 1s 1s 81460110e-09 1s 1s 81460590e-09 0s 0s 81469550e-09 1s 1s 81470390e-09 1s 1s 81470830e-09 0s 0s 81479790e-09 1s 1s 81480670e-09 1s 1s 81481070e-09 0s 0s 81490030e-09 1s 1s 81490950e-09 1s 1s 81491310e-09 0s 0s 81500270e-09 1s 1s 81501230e-09 1s 1s 81501550e-09 0s 0s 81510510e-09 1s 1s 81511510e-09 1s 1s 81511790e-09 0s 0s 81520750e-09 1s 1s 81521790e-09 1s 1s 81522030e-09 0s 0s 81530990e-09 1s 1s 81532070e-09 1s 1s 81532270e-09 0s 0s 81541230e-09 1s 1s 81542350e-09 1s 1s 81542510e-09 0s 0s 81551470e-09 1s 1s 81552630e-09 1s 1s 81552750e-09 0s 0s 81561710e-09 1s 1s 81562910e-09 1s 1s 81562990e-09 0s 0s 81571950e-09 1s 1s 81573190e-09 1s 1s 81573230e-09 0s 0s 81582190e-09 1s 1s 81583470e-09 0s 0s 81592430e-09 1s 1s 81593710e-09 0s 0s 81593750e-09 0s 0s 81602670e-09 1s 1s 81603950e-09 0s 0s 81604030e-09 0s 0s 81612910e-09 1s 1s 81614190e-09 0s 0s 81614310e-09 0s 0s 81623150e-09 1s 1s 81624430e-09 0s 0s 81624590e-09 0s 0s 81633390e-09 1s 1s 81634670e-09 0s 0s 81634870e-09 0s 0s 81643630e-09 1s 1s 81644910e-09 0s 0s 81645150e-09 0s 0s 81653870e-09 1s 1s 81655150e-09 0s 0s 81655430e-09 0s 0s 81664110e-09 1s 1s 81665390e-09 0s 0s 81665710e-09 0s 0s 81674350e-09 1s 1s 81675630e-09 0s 0s 81675990e-09 0s 0s 81684590e-09 1s 1s 81685870e-09 0s 0s 81686270e-09 0s 0s 81694830e-09 1s 1s 81696110e-09 0s 0s 81696550e-09 0s 0s 81705070e-09 1s 1s 81706350e-09 0s 0s 81706830e-09 0s 0s 81715310e-09 1s 1s 81716590e-09 0s 0s 81717110e-09 0s 0s 81725550e-09 1s 1s 81726830e-09 0s 0s 81727390e-09 0s 0s 81735790e-09 1s 1s 81737070e-09 0s 0s 81737670e-09 0s 0s 81746030e-09 1s 1s 81747310e-09 0s 0s 81747950e-09 0s 0s 81756270e-09 1s 1s 81757550e-09 0s 0s 81758230e-09 0s 0s 81766510e-09 1s 1s 81767790e-09 0s 0s 81768510e-09 0s 0s 81776750e-09 1s 1s 81778030e-09 0s 0s 81778790e-09 0s 0s 81786990e-09 1s 1s 81788270e-09 0s 0s 81789070e-09 0s 0s 81797230e-09 1s 1s 81798510e-09 0s 0s 81799350e-09 0s 0s 81807470e-09 1s 1s 81808750e-09 0s 0s 81809630e-09 0s 0s 81817710e-09 1s 1s 81818990e-09 0s 0s 81819910e-09 0s 0s 81827950e-09 1s 1s 81829230e-09 0s 0s 81830190e-09 0s 0s 81838190e-09 1s 1s 81839470e-09 0s 0s 81840470e-09 0s 0s 81848430e-09 1s 1s 81849710e-09 0s 0s 81850750e-09 0s 0s 81858670e-09 1s 1s 81859950e-09 0s 0s 81861030e-09 0s 0s 81868910e-09 1s 1s 81870190e-09 0s 0s 81871310e-09 0s 0s 81879150e-09 1s 1s 81880430e-09 0s 0s 81881590e-09 0s 0s 81889390e-09 1s 1s 81890670e-09 0s 0s 81891870e-09 0s 0s 81899630e-09 1s 1s 81900910e-09 0s 0s 81902150e-09 0s 0s 81909870e-09 1s 1s 81911150e-09 0s 0s 81912430e-09 0s 0s 81920110e-09 1s 1s 81921390e-09 0s 0s 81922710e-09 0s 0s 81930350e-09 1s 1s 81931630e-09 0s 0s 81932990e-09 0s 0s 81940590e-09 1s 1s 81941870e-09 0s 0s 81943270e-09 0s 0s 81950830e-09 1s 1s 81952110e-09 0s 0s 81953550e-09 0s 0s 81961070e-09 1s 1s 81962350e-09 0s 0s 81963830e-09 0s 0s 81971310e-09 1s 1s 81972590e-09 0s 0s 81974110e-09 0s 0s 81981550e-09 1s 1s 81982830e-09 0s 0s 81984390e-09 0s 0s 81991790e-09 1s 1s 81993070e-09 0s 0s 81994670e-09 0s 0s 82002030e-09 1s 1s 82003310e-09 0s 0s 82004950e-09 0s 0s 82012270e-09 1s 1s 82013550e-09 0s 0s 82015230e-09 0s 0s 82022510e-09 1s 1s 82023790e-09 0s 0s 82025510e-09 0s 0s 82032750e-09 1s 1s 82034030e-09 0s 0s 82035790e-09 0s 0s 82042990e-09 1s 1s 82044270e-09 0s 0s 82046070e-09 0s 0s 82053230e-09 1s 1s 82054510e-09 0s 0s 82056350e-09 0s 0s 82063470e-09 1s 1s 82064750e-09 0s 0s 82066630e-09 0s 0s 82073710e-09 1s 1s 82074990e-09 0s 0s 82076910e-09 0s 0s 82083950e-09 1s 1s 82085230e-09 0s 0s 82087190e-09 0s 0s 82094190e-09 1s 1s 82095470e-09 0s 0s 82097470e-09 0s 0s 82104430e-09 1s 1s 82105710e-09 0s 0s 82107750e-09 0s 0s 82114670e-09 1s 1s 82115950e-09 0s 0s 82118030e-09 0s 0s 82124910e-09 1s 1s 82126190e-09 0s 0s 82128310e-09 0s 0s 82135150e-09 1s 1s 82136430e-09 0s 0s 82138590e-09 0s 0s 82145390e-09 1s 1s 82146670e-09 0s 0s 82148870e-09 0s 0s 82155630e-09 1s 1s 82156910e-09 0s 0s 82159150e-09 0s 0s 82165870e-09 1s 1s 82167150e-09 0s 0s 82169430e-09 0s 0s 82176110e-09 1s 1s 82177390e-09 0s 0s 82179710e-09 0s 0s 82186350e-09 1s 1s 82187630e-09 0s 0s 82189990e-09 0s 0s 82196590e-09 1s 1s 82197870e-09 0s 0s 82200270e-09 0s 0s 82206830e-09 1s 1s 82208110e-09 0s 0s 82210550e-09 0s 0s 82217070e-09 1s 1s 82218350e-09 0s 0s 82220830e-09 0s 0s 82227310e-09 1s 1s 82228590e-09 0s 0s 82231110e-09 0s 0s 82237550e-09 1s 1s 82238830e-09 0s 0s 82241390e-09 0s 0s 82247790e-09 1s 1s 82249070e-09 0s 0s 82251670e-09 0s 0s 82258030e-09 1s 1s 82259310e-09 0s 0s 82261950e-09 0s 0s 82268270e-09 1s 1s 82269550e-09 0s 0s 82272230e-09 0s 0s 82278510e-09 1s 1s 82279790e-09 0s 0s 82282510e-09 0s 0s 82288750e-09 1s 1s 82290030e-09 0s 0s 82292790e-09 0s 0s 82298990e-09 1s 1s 82300270e-09 0s 0s 82303070e-09 0s 0s 82309230e-09 1s 1s 82310510e-09 0s 0s 82313350e-09 0s 0s 82319470e-09 1s 1s 82320750e-09 0s 0s 82323630e-09 0s 0s 82329710e-09 1s 1s 82330990e-09 0s 0s 82333910e-09 0s 0s 82339950e-09 1s 1s 82341230e-09 0s 0s 82344190e-09 0s 0s 82350190e-09 1s 1s 82351470e-09 0s 0s 82354470e-09 0s 0s 82360430e-09 1s 1s 82361710e-09 0s 0s 82364750e-09 0s 0s 82370670e-09 1s 1s 82371950e-09 0s 0s 82375030e-09 0s 0s 82380910e-09 1s 1s 82382190e-09 0s 0s 82385310e-09 0s 0s 82391150e-09 1s 1s 82392430e-09 0s 0s 82395590e-09 0s 0s 82401390e-09 1s 1s 82402670e-09 0s 0s 82405870e-09 0s 0s 82411630e-09 1s 1s 82412910e-09 0s 0s 82416150e-09 0s 0s 82421870e-09 1s 1s 82423150e-09 0s 0s 82426430e-09 0s 0s 82432110e-09 1s 1s 82433390e-09 0s 0s 82436710e-09 0s 0s 82442350e-09 1s 1s 82443630e-09 0s 0s 82446990e-09 0s 0s 82452590e-09 1s 1s 82453870e-09 0s 0s 82457270e-09 0s 0s 82462830e-09 1s 1s 82464110e-09 0s 0s 82467550e-09 0s 0s 82473070e-09 1s 1s 82474350e-09 0s 0s 82477830e-09 0s 0s 82483310e-09 1s 1s 82484590e-09 0s 0s 82488110e-09 0s 0s 82493550e-09 1s 1s 82494830e-09 0s 0s 82498390e-09 0s 0s 82503790e-09 1s 1s 82505070e-09 0s 0s 82508670e-09 0s 0s 82514030e-09 1s 1s 82515310e-09 0s 0s 82518950e-09 0s 0s 82524270e-09 1s 1s 82525550e-09 0s 0s 82529230e-09 0s 0s 82534510e-09 1s 1s 82535790e-09 0s 0s 82539510e-09 0s 0s 82544750e-09 1s 1s 82546030e-09 0s 0s 82549790e-09 0s 0s 82554990e-09 1s 1s 82556270e-09 0s 0s 82560070e-09 0s 0s 82565230e-09 1s 1s 82566510e-09 0s 0s 82570350e-09 0s 0s 82575470e-09 1s 1s 82576750e-09 0s 0s 82580630e-09 0s 0s 82585710e-09 1s 1s 82586990e-09 0s 0s 82590910e-09 0s 0s 82595950e-09 1s 1s 82597230e-09 0s 0s 82601190e-09 0s 0s 82606190e-09 1s 1s 82607470e-09 0s 0s 82611470e-09 0s 0s 82616430e-09 1s 1s 82617710e-09 0s 0s 82621750e-09 0s 0s 82626670e-09 1s 1s 82627950e-09 0s 0s 82632030e-09 0s 0s 82636910e-09 1s 1s 82638190e-09 0s 0s 82642310e-09 0s 0s 82647150e-09 1s 1s 82648430e-09 0s 0s 82652590e-09 0s 0s 82657390e-09 1s 1s 82658670e-09 0s 0s 82662870e-09 0s 0s 82667630e-09 1s 1s 82668910e-09 0s 0s 82673150e-09 0s 0s 82677870e-09 1s 1s 82679150e-09 0s 0s 82683430e-09 0s 0s 82688110e-09 1s 1s 82689390e-09 0s 0s 82693710e-09 0s 0s 82698350e-09 1s 1s 82699630e-09 0s 0s 82703990e-09 0s 0s 82708590e-09 1s 1s 82709870e-09 0s 0s 82714270e-09 0s 0s 82718830e-09 1s 1s 82720110e-09 0s 0s 82724550e-09 0s 0s 82729070e-09 1s 1s 82730350e-09 0s 0s 82734830e-09 0s 0s 82739310e-09 1s 1s 82740590e-09 0s 0s 82745110e-09 0s 0s 82749550e-09 1s 1s 82750830e-09 0s 0s 82755390e-09 0s 0s 82759790e-09 1s 1s 82761070e-09 0s 0s 82765670e-09 0s 0s 82770030e-09 1s 1s 82771310e-09 0s 0s 82775950e-09 0s 0s 82780270e-09 1s 1s 82781550e-09 0s 0s 82786230e-09 0s 0s 82790510e-09 1s 1s 82791790e-09 0s 0s 82796510e-09 0s 0s 82800750e-09 1s 1s 82802030e-09 0s 0s 82806790e-09 0s 0s 82810990e-09 1s 1s 82812270e-09 0s 0s 82817070e-09 0s 0s 82821230e-09 1s 1s 82822510e-09 0s 0s 82827350e-09 0s 0s 82831470e-09 1s 1s 82832750e-09 0s 0s 82837630e-09 0s 0s 82841710e-09 1s 1s 82842990e-09 0s 0s 82847910e-09 0s 0s 82851950e-09 1s 1s 82853230e-09 0s 0s 82858190e-09 0s 0s 82862190e-09 1s 1s 82863470e-09 0s 0s 82868470e-09 0s 0s 82872430e-09 1s 1s 82873710e-09 0s 0s 82878750e-09 0s 0s 82882670e-09 1s 1s 82883950e-09 0s 0s 82889030e-09 0s 0s 82892910e-09 1s 1s 82894190e-09 0s 0s 82899310e-09 0s 0s 82903150e-09 1s 1s 82904430e-09 0s 0s 82909590e-09 0s 0s 82913390e-09 1s 1s 82914670e-09 0s 0s 82919870e-09 0s 0s 82923630e-09 1s 1s 82924910e-09 0s 0s 82930150e-09 0s 0s 82933870e-09 1s 1s 82935150e-09 0s 0s 82940430e-09 0s 0s 82944110e-09 1s 1s 82945390e-09 0s 0s 82950710e-09 0s 0s 82954350e-09 1s 1s 82955630e-09 0s 0s 82960990e-09 0s 0s 82964590e-09 1s 1s 82965870e-09 0s 0s 82971270e-09 0s 0s 82974830e-09 1s 1s 82976110e-09 0s 0s 82981550e-09 0s 0s 82985070e-09 1s 1s 82986350e-09 0s 0s 82991830e-09 0s 0s 82995310e-09 1s 1s 82996590e-09 0s 0s 83002110e-09 0s 0s 83005550e-09 1s 1s 83006830e-09 0s 0s 83012390e-09 0s 0s 83015790e-09 1s 1s 83017070e-09 0s 0s 83022670e-09 0s 0s 83026030e-09 1s 1s 83027310e-09 0s 0s 83032950e-09 0s 0s 83036270e-09 1s 1s 83037550e-09 0s 0s 83043230e-09 0s 0s 83046510e-09 1s 1s 83047790e-09 0s 0s 83053510e-09 0s 0s 83056750e-09 1s 1s 83058030e-09 0s 0s 83063790e-09 0s 0s 83066990e-09 1s 1s 83068270e-09 0s 0s 83074070e-09 0s 0s 83077230e-09 1s 1s 83078510e-09 0s 0s 83084350e-09 0s 0s 83087470e-09 1s 1s 83088750e-09 0s 0s 83094630e-09 0s 0s 83097710e-09 1s 1s 83098990e-09 0s 0s 83104910e-09 0s 0s 83107950e-09 1s 1s 83109230e-09 0s 0s 83115190e-09 0s 0s 83118190e-09 1s 1s 83119470e-09 0s 0s 83125470e-09 0s 0s 83128430e-09 1s 1s 83129710e-09 0s 0s 83135750e-09 0s 0s 83138670e-09 1s 1s 83139950e-09 0s 0s 83146030e-09 0s 0s 83148910e-09 1s 1s 83150190e-09 0s 0s 83156310e-09 0s 0s 83159150e-09 1s 1s 83160430e-09 0s 0s 83166590e-09 0s 0s 83169390e-09 1s 1s 83170670e-09 0s 0s 83176870e-09 0s 0s 83179630e-09 1s 1s 83180910e-09 0s 0s 83187150e-09 0s 0s 83189870e-09 1s 1s 83191150e-09 0s 0s 83197430e-09 0s 0s 83200110e-09 1s 1s 83201390e-09 0s 0s 83207710e-09 0s 0s 83210350e-09 1s 1s 83211630e-09 0s 0s 83217990e-09 0s 0s 83220590e-09 1s 1s 83221870e-09 0s 0s 83228270e-09 0s 0s 83230830e-09 1s 1s 83232110e-09 0s 0s 83238550e-09 0s 0s 83241070e-09 1s 1s 83242350e-09 0s 0s 83248830e-09 0s 0s 83251310e-09 1s 1s 83252590e-09 0s 0s 83259110e-09 0s 0s 83261550e-09 1s 1s 83262830e-09 0s 0s 83269390e-09 0s 0s 83271790e-09 1s 1s 83273070e-09 0s 0s 83279670e-09 0s 0s 83282030e-09 1s 1s 83283310e-09 0s 0s 83289950e-09 0s 0s 83292270e-09 1s 1s 83293550e-09 0s 0s 83300230e-09 0s 0s 83302510e-09 1s 1s 83303790e-09 0s 0s 83310510e-09 0s 0s 83312750e-09 1s 1s 83314030e-09 0s 0s 83320790e-09 0s 0s 83322990e-09 1s 1s 83324270e-09 0s 0s 83331070e-09 0s 0s 83333230e-09 1s 1s 83334510e-09 0s 0s 83341350e-09 0s 0s 83343470e-09 1s 1s 83344750e-09 0s 0s 83351630e-09 0s 0s 83353710e-09 1s 1s 83354990e-09 0s 0s 83361910e-09 0s 0s 83363950e-09 1s 1s 83365230e-09 0s 0s 83372190e-09 0s 0s 83374190e-09 1s 1s 83375470e-09 0s 0s 83382470e-09 0s 0s 83384430e-09 1s 1s 83385710e-09 0s 0s 83392750e-09 0s 0s 83394670e-09 1s 1s 83395950e-09 0s 0s 83403030e-09 0s 0s 83404910e-09 1s 1s 83406190e-09 0s 0s 83413310e-09 0s 0s 83415150e-09 1s 1s 83416430e-09 0s 0s 83423590e-09 0s 0s 83425390e-09 1s 1s 83426670e-09 0s 0s 83433870e-09 0s 0s 83435630e-09 1s 1s 83436910e-09 0s 0s 83444150e-09 0s 0s 83445870e-09 1s 1s 83447150e-09 0s 0s 83454430e-09 0s 0s 83456110e-09 1s 1s 83457390e-09 0s 0s 83464710e-09 0s 0s 83466350e-09 1s 1s 83467630e-09 0s 0s 83474990e-09 0s 0s 83476590e-09 1s 1s 83477870e-09 0s 0s 83485270e-09 0s 0s 83486830e-09 1s 1s 83488110e-09 0s 0s 83495550e-09 0s 0s 83497070e-09 1s 1s 83498350e-09 0s 0s 83505830e-09 0s 0s 83507310e-09 1s 1s 83508590e-09 0s 0s 83516110e-09 0s 0s 83517550e-09 1s 1s 83518830e-09 0s 0s 83526390e-09 0s 0s 83527790e-09 1s 1s 83529070e-09 0s 0s 83536670e-09 0s 0s 83538030e-09 1s 1s 83539310e-09 0s 0s 83546950e-09 0s 0s 83548270e-09 1s 1s 83549550e-09 0s 0s 83557230e-09 0s 0s 83558510e-09 1s 1s 83559790e-09 0s 0s 83567510e-09 0s 0s 83568750e-09 1s 1s 83570030e-09 0s 0s 83577790e-09 0s 0s 83578990e-09 1s 1s 83580270e-09 0s 0s 83588070e-09 0s 0s 83589230e-09 1s 1s 83590510e-09 0s 0s 83598350e-09 0s 0s 83599470e-09 1s 1s 83600750e-09 0s 0s 83608630e-09 0s 0s 83609710e-09 1s 1s 83610990e-09 0s 0s 83618910e-09 0s 0s 83619950e-09 1s 1s 83621230e-09 0s 0s 83629190e-09 0s 0s 83630190e-09 1s 1s 83631470e-09 0s 0s 83639470e-09 0s 0s 83640430e-09 1s 1s 83641710e-09 0s 0s 83649750e-09 0s 0s 83650670e-09 1s 1s 83651950e-09 0s 0s 83660030e-09 0s 0s 83660910e-09 1s 1s 83662190e-09 0s 0s 83670310e-09 0s 0s 83671150e-09 1s 1s 83672430e-09 0s 0s 83680590e-09 0s 0s 83681390e-09 1s 1s 83682670e-09 0s 0s 83690870e-09 0s 0s 83691630e-09 1s 1s 83692910e-09 0s 0s 83701150e-09 0s 0s 83701870e-09 1s 1s 83703150e-09 0s 0s 83711430e-09 0s 0s 83712110e-09 1s 1s 83713390e-09 0s 0s 83721710e-09 0s 0s 83722350e-09 1s 1s 83723630e-09 0s 0s 83731990e-09 0s 0s 83732590e-09 1s 1s 83733870e-09 0s 0s 83742270e-09 0s 0s 83742830e-09 1s 1s 83744110e-09 0s 0s 83752550e-09 0s 0s 83753070e-09 1s 1s 83754350e-09 0s 0s 83762830e-09 0s 0s 83763310e-09 1s 1s 83764590e-09 0s 0s 83773110e-09 0s 0s 83773550e-09 1s 1s 83774830e-09 0s 0s 83783390e-09 0s 0s 83783790e-09 1s 1s 83785070e-09 0s 0s 83793670e-09 0s 0s 83794030e-09 1s 1s 83795310e-09 0s 0s 83803950e-09 0s 0s 83804270e-09 1s 1s 83805550e-09 0s 0s 83814230e-09 0s 0s 83814510e-09 1s 1s 83815790e-09 0s 0s 83824510e-09 0s 0s 83824750e-09 1s 1s 83826030e-09 0s 0s 83834790e-09 0s 0s 83834990e-09 1s 1s 83836270e-09 0s 0s 83845070e-09 0s 0s 83845230e-09 1s 1s 83846510e-09 0s 0s 83855350e-09 0s 0s 83855470e-09 1s 1s 83856750e-09 0s 0s 83865630e-09 0s 0s 83865710e-09 1s 1s 83866990e-09 0s 0s 83875910e-09 0s 0s 83875950e-09 1s 1s 83877230e-09 0s 0s 83886190e-09 1s 1s 83886230e-09 1s 1s 83887510e-09 0s 0s 83896430e-09 1s 1s 83896510e-09 1s 1s 83897750e-09 0s 0s 83906670e-09 1s 1s 83906790e-09 1s 1s 83907990e-09 0s 0s 83916910e-09 1s 1s 83917070e-09 1s 1s 83918230e-09 0s 0s 83927150e-09 1s 1s 83927350e-09 1s 1s 83928470e-09 0s 0s 83937390e-09 1s 1s 83937630e-09 1s 1s 83938710e-09 0s 0s 83947630e-09 1s 1s 83947910e-09 1s 1s 83948950e-09 0s 0s 83957870e-09 1s 1s 83958190e-09 1s 1s 83959190e-09 0s 0s 83968110e-09 1s 1s 83968470e-09 1s 1s 83969430e-09 0s 0s 83978350e-09 1s 1s 83978750e-09 1s 1s 83979670e-09 0s 0s 83988590e-09 1s 1s 83989030e-09 1s 1s 83989910e-09 0s 0s 83998830e-09 1s 1s 83999310e-09 1s 1s 84000150e-09 0s 0s 84009070e-09 1s 1s 84009590e-09 1s 1s 84010390e-09 0s 0s 84019310e-09 1s 1s 84019870e-09 1s 1s 84020630e-09 0s 0s 84029550e-09 1s 1s 84030150e-09 1s 1s 84030870e-09 0s 0s 84039790e-09 1s 1s 84040430e-09 1s 1s 84041110e-09 0s 0s 84050030e-09 1s 1s 84050710e-09 1s 1s 84051350e-09 0s 0s 84060270e-09 1s 1s 84060990e-09 1s 1s 84061590e-09 0s 0s 84070510e-09 1s 1s 84071270e-09 1s 1s 84071830e-09 0s 0s 84080750e-09 1s 1s 84081550e-09 1s 1s 84082070e-09 0s 0s 84090990e-09 1s 1s 84091830e-09 1s 1s 84092310e-09 0s 0s 84101230e-09 1s 1s 84102110e-09 1s 1s 84102550e-09 0s 0s 84111470e-09 1s 1s 84112390e-09 1s 1s 84112790e-09 0s 0s 84121710e-09 1s 1s 84122670e-09 1s 1s 84123030e-09 0s 0s 84131950e-09 1s 1s 84132950e-09 1s 1s 84133270e-09 0s 0s 84142190e-09 1s 1s 84143230e-09 1s 1s 84143510e-09 0s 0s 84152430e-09 1s 1s 84153510e-09 1s 1s 84153750e-09 0s 0s 84162670e-09 1s 1s 84163790e-09 1s 1s 84163990e-09 0s 0s 84172910e-09 1s 1s 84174070e-09 1s 1s 84174230e-09 0s 0s 84183150e-09 1s 1s 84184350e-09 1s 1s 84184470e-09 0s 0s 84193390e-09 1s 1s 84194630e-09 1s 1s 84194710e-09 0s 0s 84203630e-09 1s 1s 84204910e-09 1s 1s 84204950e-09 0s 0s 84213870e-09 1s 1s 84215190e-09 0s 0s 84224110e-09 1s 1s 84225430e-09 0s 0s 84225470e-09 0s 0s 84234350e-09 1s 1s 84235670e-09 0s 0s 84235750e-09 0s 0s 84244590e-09 1s 1s 84245910e-09 0s 0s 84246030e-09 0s 0s 84254830e-09 1s 1s 84256150e-09 0s 0s 84256310e-09 0s 0s 84265070e-09 1s 1s 84266390e-09 0s 0s 84266590e-09 0s 0s 84275310e-09 1s 1s 84276630e-09 0s 0s 84276870e-09 0s 0s 84285550e-09 1s 1s 84286870e-09 0s 0s 84287150e-09 0s 0s 84295790e-09 1s 1s 84297110e-09 0s 0s 84297430e-09 0s 0s 84306030e-09 1s 1s 84307350e-09 0s 0s 84307710e-09 0s 0s 84316270e-09 1s 1s 84317590e-09 0s 0s 84317990e-09 0s 0s 84326510e-09 1s 1s 84327830e-09 0s 0s 84328270e-09 0s 0s 84336750e-09 1s 1s 84338070e-09 0s 0s 84338550e-09 0s 0s 84346990e-09 1s 1s 84348310e-09 0s 0s 84348830e-09 0s 0s 84357230e-09 1s 1s 84358550e-09 0s 0s 84359110e-09 0s 0s 84367470e-09 1s 1s 84368790e-09 0s 0s 84369390e-09 0s 0s 84377710e-09 1s 1s 84379030e-09 0s 0s 84379670e-09 0s 0s 84387950e-09 1s 1s 84389270e-09 0s 0s 84389950e-09 0s 0s 84398190e-09 1s 1s 84399510e-09 0s 0s 84400230e-09 0s 0s 84408430e-09 1s 1s 84409750e-09 0s 0s 84410510e-09 0s 0s 84418670e-09 1s 1s 84419990e-09 0s 0s 84420790e-09 0s 0s 84428910e-09 1s 1s 84430230e-09 0s 0s 84431070e-09 0s 0s 84439150e-09 1s 1s 84440470e-09 0s 0s 84441350e-09 0s 0s 84449390e-09 1s 1s 84450710e-09 0s 0s 84451630e-09 0s 0s 84459630e-09 1s 1s 84460950e-09 0s 0s 84461910e-09 0s 0s 84469870e-09 1s 1s 84471190e-09 0s 0s 84472190e-09 0s 0s 84480110e-09 1s 1s 84481430e-09 0s 0s 84482470e-09 0s 0s 84490350e-09 1s 1s 84491670e-09 0s 0s 84492750e-09 0s 0s 84500590e-09 1s 1s 84501910e-09 0s 0s 84503030e-09 0s 0s 84510830e-09 1s 1s 84512150e-09 0s 0s 84513310e-09 0s 0s 84521070e-09 1s 1s 84522390e-09 0s 0s 84523590e-09 0s 0s 84531310e-09 1s 1s 84532630e-09 0s 0s 84533870e-09 0s 0s 84541550e-09 1s 1s 84542870e-09 0s 0s 84544150e-09 0s 0s 84551790e-09 1s 1s 84553110e-09 0s 0s 84554430e-09 0s 0s 84562030e-09 1s 1s 84563350e-09 0s 0s 84564710e-09 0s 0s 84572270e-09 1s 1s 84573590e-09 0s 0s 84574990e-09 0s 0s 84582510e-09 1s 1s 84583830e-09 0s 0s 84585270e-09 0s 0s 84592750e-09 1s 1s 84594070e-09 0s 0s 84595550e-09 0s 0s 84602990e-09 1s 1s 84604310e-09 0s 0s 84605830e-09 0s 0s 84613230e-09 1s 1s 84614550e-09 0s 0s 84616110e-09 0s 0s 84623470e-09 1s 1s 84624790e-09 0s 0s 84626390e-09 0s 0s 84633710e-09 1s 1s 84635030e-09 0s 0s 84636670e-09 0s 0s 84643950e-09 1s 1s 84645270e-09 0s 0s 84646950e-09 0s 0s 84654190e-09 1s 1s 84655510e-09 0s 0s 84657230e-09 0s 0s 84664430e-09 1s 1s 84665750e-09 0s 0s 84667510e-09 0s 0s 84674670e-09 1s 1s 84675990e-09 0s 0s 84677790e-09 0s 0s 84684910e-09 1s 1s 84686230e-09 0s 0s 84688070e-09 0s 0s 84695150e-09 1s 1s 84696470e-09 0s 0s 84698350e-09 0s 0s 84705390e-09 1s 1s 84706710e-09 0s 0s 84708630e-09 0s 0s 84715630e-09 1s 1s 84716950e-09 0s 0s 84718910e-09 0s 0s 84725870e-09 1s 1s 84727190e-09 0s 0s 84729190e-09 0s 0s 84736110e-09 1s 1s 84737430e-09 0s 0s 84739470e-09 0s 0s 84746350e-09 1s 1s 84747670e-09 0s 0s 84749750e-09 0s 0s 84756590e-09 1s 1s 84757910e-09 0s 0s 84760030e-09 0s 0s 84766830e-09 1s 1s 84768150e-09 0s 0s 84770310e-09 0s 0s 84777070e-09 1s 1s 84778390e-09 0s 0s 84780590e-09 0s 0s 84787310e-09 1s 1s 84788630e-09 0s 0s 84790870e-09 0s 0s 84797550e-09 1s 1s 84798870e-09 0s 0s 84801150e-09 0s 0s 84807790e-09 1s 1s 84809110e-09 0s 0s 84811430e-09 0s 0s 84818030e-09 1s 1s 84819350e-09 0s 0s 84821710e-09 0s 0s 84828270e-09 1s 1s 84829590e-09 0s 0s 84831990e-09 0s 0s 84838510e-09 1s 1s 84839830e-09 0s 0s 84842270e-09 0s 0s 84848750e-09 1s 1s 84850070e-09 0s 0s 84852550e-09 0s 0s 84858990e-09 1s 1s 84860310e-09 0s 0s 84862830e-09 0s 0s 84869230e-09 1s 1s 84870550e-09 0s 0s 84873110e-09 0s 0s 84879470e-09 1s 1s 84880790e-09 0s 0s 84883390e-09 0s 0s 84889710e-09 1s 1s 84891030e-09 0s 0s 84893670e-09 0s 0s 84899950e-09 1s 1s 84901270e-09 0s 0s 84903950e-09 0s 0s 84910190e-09 1s 1s 84911510e-09 0s 0s 84914230e-09 0s 0s 84920430e-09 1s 1s 84921750e-09 0s 0s 84924510e-09 0s 0s 84930670e-09 1s 1s 84931990e-09 0s 0s 84934790e-09 0s 0s 84940910e-09 1s 1s 84942230e-09 0s 0s 84945070e-09 0s 0s 84951150e-09 1s 1s 84952470e-09 0s 0s 84955350e-09 0s 0s 84961390e-09 1s 1s 84962710e-09 0s 0s 84965630e-09 0s 0s 84971630e-09 1s 1s 84972950e-09 0s 0s 84975910e-09 0s 0s 84981870e-09 1s 1s 84983190e-09 0s 0s 84986190e-09 0s 0s 84992110e-09 1s 1s 84993430e-09 0s 0s 84996470e-09 0s 0s 85002350e-09 1s 1s 85003670e-09 0s 0s 85006750e-09 0s 0s 85012590e-09 1s 1s 85013910e-09 0s 0s 85017030e-09 0s 0s 85022830e-09 1s 1s 85024150e-09 0s 0s 85027310e-09 0s 0s 85033070e-09 1s 1s 85034390e-09 0s 0s 85037590e-09 0s 0s 85043310e-09 1s 1s 85044630e-09 0s 0s 85047870e-09 0s 0s 85053550e-09 1s 1s 85054870e-09 0s 0s 85058150e-09 0s 0s 85063790e-09 1s 1s 85065110e-09 0s 0s 85068430e-09 0s 0s 85074030e-09 1s 1s 85075350e-09 0s 0s 85078710e-09 0s 0s 85084270e-09 1s 1s 85085590e-09 0s 0s 85088990e-09 0s 0s 85094510e-09 1s 1s 85095830e-09 0s 0s 85099270e-09 0s 0s 85104750e-09 1s 1s 85106070e-09 0s 0s 85109550e-09 0s 0s 85114990e-09 1s 1s 85116310e-09 0s 0s 85119830e-09 0s 0s 85125230e-09 1s 1s 85126550e-09 0s 0s 85130110e-09 0s 0s 85135470e-09 1s 1s 85136790e-09 0s 0s 85140390e-09 0s 0s 85145710e-09 1s 1s 85147030e-09 0s 0s 85150670e-09 0s 0s 85155950e-09 1s 1s 85157270e-09 0s 0s 85160950e-09 0s 0s 85166190e-09 1s 1s 85167510e-09 0s 0s 85171230e-09 0s 0s 85176430e-09 1s 1s 85177750e-09 0s 0s 85181510e-09 0s 0s 85186670e-09 1s 1s 85187990e-09 0s 0s 85191790e-09 0s 0s 85196910e-09 1s 1s 85198230e-09 0s 0s 85202070e-09 0s 0s 85207150e-09 1s 1s 85208470e-09 0s 0s 85212350e-09 0s 0s 85217390e-09 1s 1s 85218710e-09 0s 0s 85222630e-09 0s 0s 85227630e-09 1s 1s 85228950e-09 0s 0s 85232910e-09 0s 0s 85237870e-09 1s 1s 85239190e-09 0s 0s 85243190e-09 0s 0s 85248110e-09 1s 1s 85249430e-09 0s 0s 85253470e-09 0s 0s 85258350e-09 1s 1s 85259670e-09 0s 0s 85263750e-09 0s 0s 85268590e-09 1s 1s 85269910e-09 0s 0s 85274030e-09 0s 0s 85278830e-09 1s 1s 85280150e-09 0s 0s 85284310e-09 0s 0s 85289070e-09 1s 1s 85290390e-09 0s 0s 85294590e-09 0s 0s 85299310e-09 1s 1s 85300630e-09 0s 0s 85304870e-09 0s 0s 85309550e-09 1s 1s 85310870e-09 0s 0s 85315150e-09 0s 0s 85319790e-09 1s 1s 85321110e-09 0s 0s 85325430e-09 0s 0s 85330030e-09 1s 1s 85331350e-09 0s 0s 85335710e-09 0s 0s 85340270e-09 1s 1s 85341590e-09 0s 0s 85345990e-09 0s 0s 85350510e-09 1s 1s 85351830e-09 0s 0s 85356270e-09 0s 0s 85360750e-09 1s 1s 85362070e-09 0s 0s 85366550e-09 0s 0s 85370990e-09 1s 1s 85372310e-09 0s 0s 85376830e-09 0s 0s 85381230e-09 1s 1s 85382550e-09 0s 0s 85387110e-09 0s 0s 85391470e-09 1s 1s 85392790e-09 0s 0s 85397390e-09 0s 0s 85401710e-09 1s 1s 85403030e-09 0s 0s 85407670e-09 0s 0s 85411950e-09 1s 1s 85413270e-09 0s 0s 85417950e-09 0s 0s 85422190e-09 1s 1s 85423510e-09 0s 0s 85428230e-09 0s 0s 85432430e-09 1s 1s 85433750e-09 0s 0s 85438510e-09 0s 0s 85442670e-09 1s 1s 85443990e-09 0s 0s 85448790e-09 0s 0s 85452910e-09 1s 1s 85454230e-09 0s 0s 85459070e-09 0s 0s 85463150e-09 1s 1s 85464470e-09 0s 0s 85469350e-09 0s 0s 85473390e-09 1s 1s 85474710e-09 0s 0s 85479630e-09 0s 0s 85483630e-09 1s 1s 85484950e-09 0s 0s 85489910e-09 0s 0s 85493870e-09 1s 1s 85495190e-09 0s 0s 85500190e-09 0s 0s 85504110e-09 1s 1s 85505430e-09 0s 0s 85510470e-09 0s 0s 85514350e-09 1s 1s 85515670e-09 0s 0s 85520750e-09 0s 0s 85524590e-09 1s 1s 85525910e-09 0s 0s 85531030e-09 0s 0s 85534830e-09 1s 1s 85536150e-09 0s 0s 85541310e-09 0s 0s 85545070e-09 1s 1s 85546390e-09 0s 0s 85551590e-09 0s 0s 85555310e-09 1s 1s 85556630e-09 0s 0s 85561870e-09 0s 0s 85565550e-09 1s 1s 85566870e-09 0s 0s 85572150e-09 0s 0s 85575790e-09 1s 1s 85577110e-09 0s 0s 85582430e-09 0s 0s 85586030e-09 1s 1s 85587350e-09 0s 0s 85592710e-09 0s 0s 85596270e-09 1s 1s 85597590e-09 0s 0s 85602990e-09 0s 0s 85606510e-09 1s 1s 85607830e-09 0s 0s 85613270e-09 0s 0s 85616750e-09 1s 1s 85618070e-09 0s 0s 85623550e-09 0s 0s 85626990e-09 1s 1s 85628310e-09 0s 0s 85633830e-09 0s 0s 85637230e-09 1s 1s 85638550e-09 0s 0s 85644110e-09 0s 0s 85647470e-09 1s 1s 85648790e-09 0s 0s 85654390e-09 0s 0s 85657710e-09 1s 1s 85659030e-09 0s 0s 85664670e-09 0s 0s 85667950e-09 1s 1s 85669270e-09 0s 0s 85674950e-09 0s 0s 85678190e-09 1s 1s 85679510e-09 0s 0s 85685230e-09 0s 0s 85688430e-09 1s 1s 85689750e-09 0s 0s 85695510e-09 0s 0s 85698670e-09 1s 1s 85699990e-09 0s 0s 85705790e-09 0s 0s 85708910e-09 1s 1s 85710230e-09 0s 0s 85716070e-09 0s 0s 85719150e-09 1s 1s 85720470e-09 0s 0s 85726350e-09 0s 0s 85729390e-09 1s 1s 85730710e-09 0s 0s 85736630e-09 0s 0s 85739630e-09 1s 1s 85740950e-09 0s 0s 85746910e-09 0s 0s 85749870e-09 1s 1s 85751190e-09 0s 0s 85757190e-09 0s 0s 85760110e-09 1s 1s 85761430e-09 0s 0s 85767470e-09 0s 0s 85770350e-09 1s 1s 85771670e-09 0s 0s 85777750e-09 0s 0s 85780590e-09 1s 1s 85781910e-09 0s 0s 85788030e-09 0s 0s 85790830e-09 1s 1s 85792150e-09 0s 0s 85798310e-09 0s 0s 85801070e-09 1s 1s 85802390e-09 0s 0s 85808590e-09 0s 0s 85811310e-09 1s 1s 85812630e-09 0s 0s 85818870e-09 0s 0s 85821550e-09 1s 1s 85822870e-09 0s 0s 85829150e-09 0s 0s 85831790e-09 1s 1s 85833110e-09 0s 0s 85839430e-09 0s 0s 85842030e-09 1s 1s 85843350e-09 0s 0s 85849710e-09 0s 0s 85852270e-09 1s 1s 85853590e-09 0s 0s 85859990e-09 0s 0s 85862510e-09 1s 1s 85863830e-09 0s 0s 85870270e-09 0s 0s 85872750e-09 1s 1s 85874070e-09 0s 0s 85880550e-09 0s 0s 85882990e-09 1s 1s 85884310e-09 0s 0s 85890830e-09 0s 0s 85893230e-09 1s 1s 85894550e-09 0s 0s 85901110e-09 0s 0s 85903470e-09 1s 1s 85904790e-09 0s 0s 85911390e-09 0s 0s 85913710e-09 1s 1s 85915030e-09 0s 0s 85921670e-09 0s 0s 85923950e-09 1s 1s 85925270e-09 0s 0s 85931950e-09 0s 0s 85934190e-09 1s 1s 85935510e-09 0s 0s 85942230e-09 0s 0s 85944430e-09 1s 1s 85945750e-09 0s 0s 85952510e-09 0s 0s 85954670e-09 1s 1s 85955990e-09 0s 0s 85962790e-09 0s 0s 85964910e-09 1s 1s 85966230e-09 0s 0s 85973070e-09 0s 0s 85975150e-09 1s 1s 85976470e-09 0s 0s 85983350e-09 0s 0s 85985390e-09 1s 1s 85986710e-09 0s 0s 85993630e-09 0s 0s 85995630e-09 1s 1s 85996950e-09 0s 0s 86003910e-09 0s 0s 86005870e-09 1s 1s 86007190e-09 0s 0s 86014190e-09 0s 0s 86016110e-09 1s 1s 86017430e-09 0s 0s 86024470e-09 0s 0s 86026350e-09 1s 1s 86027670e-09 0s 0s 86034750e-09 0s 0s 86036590e-09 1s 1s 86037910e-09 0s 0s 86045030e-09 0s 0s 86046830e-09 1s 1s 86048150e-09 0s 0s 86055310e-09 0s 0s 86057070e-09 1s 1s 86058390e-09 0s 0s 86065590e-09 0s 0s 86067310e-09 1s 1s 86068630e-09 0s 0s 86075870e-09 0s 0s 86077550e-09 1s 1s 86078870e-09 0s 0s 86086150e-09 0s 0s 86087790e-09 1s 1s 86089110e-09 0s 0s 86096430e-09 0s 0s 86098030e-09 1s 1s 86099350e-09 0s 0s 86106710e-09 0s 0s 86108270e-09 1s 1s 86109590e-09 0s 0s 86116990e-09 0s 0s 86118510e-09 1s 1s 86119830e-09 0s 0s 86127270e-09 0s 0s 86128750e-09 1s 1s 86130070e-09 0s 0s 86137550e-09 0s 0s 86138990e-09 1s 1s 86140310e-09 0s 0s 86147830e-09 0s 0s 86149230e-09 1s 1s 86150550e-09 0s 0s 86158110e-09 0s 0s 86159470e-09 1s 1s 86160790e-09 0s 0s 86168390e-09 0s 0s 86169710e-09 1s 1s 86171030e-09 0s 0s 86178670e-09 0s 0s 86179950e-09 1s 1s 86181270e-09 0s 0s 86188950e-09 0s 0s 86190190e-09 1s 1s 86191510e-09 0s 0s 86199230e-09 0s 0s 86200430e-09 1s 1s 86201750e-09 0s 0s 86209510e-09 0s 0s 86210670e-09 1s 1s 86211990e-09 0s 0s 86219790e-09 0s 0s 86220910e-09 1s 1s 86222230e-09 0s 0s 86230070e-09 0s 0s 86231150e-09 1s 1s 86232470e-09 0s 0s 86240350e-09 0s 0s 86241390e-09 1s 1s 86242710e-09 0s 0s 86250630e-09 0s 0s 86251630e-09 1s 1s 86252950e-09 0s 0s 86260910e-09 0s 0s 86261870e-09 1s 1s 86263190e-09 0s 0s 86271190e-09 0s 0s 86272110e-09 1s 1s 86273430e-09 0s 0s 86281470e-09 0s 0s 86282350e-09 1s 1s 86283670e-09 0s 0s 86291750e-09 0s 0s 86292590e-09 1s 1s 86293910e-09 0s 0s 86302030e-09 0s 0s 86302830e-09 1s 1s 86304150e-09 0s 0s 86312310e-09 0s 0s 86313070e-09 1s 1s 86314390e-09 0s 0s 86322590e-09 0s 0s 86323310e-09 1s 1s 86324630e-09 0s 0s 86332870e-09 0s 0s 86333550e-09 1s 1s 86334870e-09 0s 0s 86343150e-09 0s 0s 86343790e-09 1s 1s 86345110e-09 0s 0s 86353430e-09 0s 0s 86354030e-09 1s 1s 86355350e-09 0s 0s 86363710e-09 0s 0s 86364270e-09 1s 1s 86365590e-09 0s 0s 86373990e-09 0s 0s 86374510e-09 1s 1s 86375830e-09 0s 0s 86384270e-09 0s 0s 86384750e-09 1s 1s 86386070e-09 0s 0s 86394550e-09 0s 0s 86394990e-09 1s 1s 86396310e-09 0s 0s 86404830e-09 0s 0s 86405230e-09 1s 1s 86406550e-09 0s 0s 86415110e-09 0s 0s 86415470e-09 1s 1s 86416790e-09 0s 0s 86425390e-09 0s 0s 86425710e-09 1s 1s 86427030e-09 0s 0s 86435670e-09 0s 0s 86435950e-09 1s 1s 86437270e-09 0s 0s 86445950e-09 0s 0s 86446190e-09 1s 1s 86447510e-09 0s 0s 86456230e-09 0s 0s 86456430e-09 1s 1s 86457750e-09 0s 0s 86466510e-09 0s 0s 86466670e-09 1s 1s 86467990e-09 0s 0s 86476790e-09 0s 0s 86476910e-09 1s 1s 86478230e-09 0s 0s 86487070e-09 0s 0s 86487150e-09 1s 1s 86488470e-09 0s 0s 86497350e-09 0s 0s 86497390e-09 1s 1s 86498710e-09 0s 0s 86507630e-09 1s 1s 86507670e-09 1s 1s 86508990e-09 0s 0s 86517870e-09 1s 1s 86517950e-09 1s 1s 86519230e-09 0s 0s 86528110e-09 1s 1s 86528230e-09 1s 1s 86529470e-09 0s 0s 86538350e-09 1s 1s 86538510e-09 1s 1s 86539710e-09 0s 0s 86548590e-09 1s 1s 86548790e-09 1s 1s 86549950e-09 0s 0s 86558830e-09 1s 1s 86559070e-09 1s 1s 86560190e-09 0s 0s 86569070e-09 1s 1s 86569350e-09 1s 1s 86570430e-09 0s 0s 86579310e-09 1s 1s 86579630e-09 1s 1s 86580670e-09 0s 0s 86589550e-09 1s 1s 86589910e-09 1s 1s 86590910e-09 0s 0s 86599790e-09 1s 1s 86600190e-09 1s 1s 86601150e-09 0s 0s 86610030e-09 1s 1s 86610470e-09 1s 1s 86611390e-09 0s 0s 86620270e-09 1s 1s 86620750e-09 1s 1s 86621630e-09 0s 0s 86630510e-09 1s 1s 86631030e-09 1s 1s 86631870e-09 0s 0s 86640750e-09 1s 1s 86641310e-09 1s 1s 86642110e-09 0s 0s 86650990e-09 1s 1s 86651590e-09 1s 1s 86652350e-09 0s 0s 86661230e-09 1s 1s 86661870e-09 1s 1s 86662590e-09 0s 0s 86671470e-09 1s 1s 86672150e-09 1s 1s 86672830e-09 0s 0s 86681710e-09 1s 1s 86682430e-09 1s 1s 86683070e-09 0s 0s 86691950e-09 1s 1s 86692710e-09 1s 1s 86693310e-09 0s 0s 86702190e-09 1s 1s 86702990e-09 1s 1s 86703550e-09 0s 0s 86712430e-09 1s 1s 86713270e-09 1s 1s 86713790e-09 0s 0s 86722670e-09 1s 1s 86723550e-09 1s 1s 86724030e-09 0s 0s 86732910e-09 1s 1s 86733830e-09 1s 1s 86734270e-09 0s 0s 86743150e-09 1s 1s 86744110e-09 1s 1s 86744510e-09 0s 0s 86753390e-09 1s 1s 86754390e-09 1s 1s 86754750e-09 0s 0s 86763630e-09 1s 1s 86764670e-09 1s 1s 86764990e-09 0s 0s 86773870e-09 1s 1s 86774950e-09 1s 1s 86775230e-09 0s 0s 86784110e-09 1s 1s 86785230e-09 1s 1s 86785470e-09 0s 0s 86794350e-09 1s 1s 86795510e-09 1s 1s 86795710e-09 0s 0s 86804590e-09 1s 1s 86805790e-09 1s 1s 86805950e-09 0s 0s 86814830e-09 1s 1s 86816070e-09 1s 1s 86816190e-09 0s 0s 86825070e-09 1s 1s 86826350e-09 1s 1s 86826430e-09 0s 0s 86835310e-09 1s 1s 86836630e-09 1s 1s 86836670e-09 0s 0s 86845550e-09 1s 1s 86846910e-09 0s 0s 86855790e-09 1s 1s 86857150e-09 0s 0s 86857190e-09 0s 0s 86866030e-09 1s 1s 86867390e-09 0s 0s 86867470e-09 0s 0s 86876270e-09 1s 1s 86877630e-09 0s 0s 86877750e-09 0s 0s 86886510e-09 1s 1s 86887870e-09 0s 0s 86888030e-09 0s 0s 86896750e-09 1s 1s 86898110e-09 0s 0s 86898310e-09 0s 0s 86906990e-09 1s 1s 86908350e-09 0s 0s 86908590e-09 0s 0s 86917230e-09 1s 1s 86918590e-09 0s 0s 86918870e-09 0s 0s 86927470e-09 1s 1s 86928830e-09 0s 0s 86929150e-09 0s 0s 86937710e-09 1s 1s 86939070e-09 0s 0s 86939430e-09 0s 0s 86947950e-09 1s 1s 86949310e-09 0s 0s 86949710e-09 0s 0s 86958190e-09 1s 1s 86959550e-09 0s 0s 86959990e-09 0s 0s 86968430e-09 1s 1s 86969790e-09 0s 0s 86970270e-09 0s 0s 86978670e-09 1s 1s 86980030e-09 0s 0s 86980550e-09 0s 0s 86988910e-09 1s 1s 86990270e-09 0s 0s 86990830e-09 0s 0s 86999150e-09 1s 1s 87000510e-09 0s 0s 87001110e-09 0s 0s 87009390e-09 1s 1s 87010750e-09 0s 0s 87011390e-09 0s 0s 87019630e-09 1s 1s 87020990e-09 0s 0s 87021670e-09 0s 0s 87029870e-09 1s 1s 87031230e-09 0s 0s 87031950e-09 0s 0s 87040110e-09 1s 1s 87041470e-09 0s 0s 87042230e-09 0s 0s 87050350e-09 1s 1s 87051710e-09 0s 0s 87052510e-09 0s 0s 87060590e-09 1s 1s 87061950e-09 0s 0s 87062790e-09 0s 0s 87070830e-09 1s 1s 87072190e-09 0s 0s 87073070e-09 0s 0s 87081070e-09 1s 1s 87082430e-09 0s 0s 87083350e-09 0s 0s 87091310e-09 1s 1s 87092670e-09 0s 0s 87093630e-09 0s 0s 87101550e-09 1s 1s 87102910e-09 0s 0s 87103910e-09 0s 0s 87111790e-09 1s 1s 87113150e-09 0s 0s 87114190e-09 0s 0s 87122030e-09 1s 1s 87123390e-09 0s 0s 87124470e-09 0s 0s 87132270e-09 1s 1s 87133630e-09 0s 0s 87134750e-09 0s 0s 87142510e-09 1s 1s 87143870e-09 0s 0s 87145030e-09 0s 0s 87152750e-09 1s 1s 87154110e-09 0s 0s 87155310e-09 0s 0s 87162990e-09 1s 1s 87164350e-09 0s 0s 87165590e-09 0s 0s 87173230e-09 1s 1s 87174590e-09 0s 0s 87175870e-09 0s 0s 87183470e-09 1s 1s 87184830e-09 0s 0s 87186150e-09 0s 0s 87193710e-09 1s 1s 87195070e-09 0s 0s 87196430e-09 0s 0s 87203950e-09 1s 1s 87205310e-09 0s 0s 87206710e-09 0s 0s 87214190e-09 1s 1s 87215550e-09 0s 0s 87216990e-09 0s 0s 87224430e-09 1s 1s 87225790e-09 0s 0s 87227270e-09 0s 0s 87234670e-09 1s 1s 87236030e-09 0s 0s 87237550e-09 0s 0s 87244910e-09 1s 1s 87246270e-09 0s 0s 87247830e-09 0s 0s 87255150e-09 1s 1s 87256510e-09 0s 0s 87258110e-09 0s 0s 87265390e-09 1s 1s 87266750e-09 0s 0s 87268390e-09 0s 0s 87275630e-09 1s 1s 87276990e-09 0s 0s 87278670e-09 0s 0s 87285870e-09 1s 1s 87287230e-09 0s 0s 87288950e-09 0s 0s 87296110e-09 1s 1s 87297470e-09 0s 0s 87299230e-09 0s 0s 87306350e-09 1s 1s 87307710e-09 0s 0s 87309510e-09 0s 0s 87316590e-09 1s 1s 87317950e-09 0s 0s 87319790e-09 0s 0s 87326830e-09 1s 1s 87328190e-09 0s 0s 87330070e-09 0s 0s 87337070e-09 1s 1s 87338430e-09 0s 0s 87340350e-09 0s 0s 87347310e-09 1s 1s 87348670e-09 0s 0s 87350630e-09 0s 0s 87357550e-09 1s 1s 87358910e-09 0s 0s 87360910e-09 0s 0s 87367790e-09 1s 1s 87369150e-09 0s 0s 87371190e-09 0s 0s 87378030e-09 1s 1s 87379390e-09 0s 0s 87381470e-09 0s 0s 87388270e-09 1s 1s 87389630e-09 0s 0s 87391750e-09 0s 0s 87398510e-09 1s 1s 87399870e-09 0s 0s 87402030e-09 0s 0s 87408750e-09 1s 1s 87410110e-09 0s 0s 87412310e-09 0s 0s 87418990e-09 1s 1s 87420350e-09 0s 0s 87422590e-09 0s 0s 87429230e-09 1s 1s 87430590e-09 0s 0s 87432870e-09 0s 0s 87439470e-09 1s 1s 87440830e-09 0s 0s 87443150e-09 0s 0s 87449710e-09 1s 1s 87451070e-09 0s 0s 87453430e-09 0s 0s 87459950e-09 1s 1s 87461310e-09 0s 0s 87463710e-09 0s 0s 87470190e-09 1s 1s 87471550e-09 0s 0s 87473990e-09 0s 0s 87480430e-09 1s 1s 87481790e-09 0s 0s 87484270e-09 0s 0s 87490670e-09 1s 1s 87492030e-09 0s 0s 87494550e-09 0s 0s 87500910e-09 1s 1s 87502270e-09 0s 0s 87504830e-09 0s 0s 87511150e-09 1s 1s 87512510e-09 0s 0s 87515110e-09 0s 0s 87521390e-09 1s 1s 87522750e-09 0s 0s 87525390e-09 0s 0s 87531630e-09 1s 1s 87532990e-09 0s 0s 87535670e-09 0s 0s 87541870e-09 1s 1s 87543230e-09 0s 0s 87545950e-09 0s 0s 87552110e-09 1s 1s 87553470e-09 0s 0s 87556230e-09 0s 0s 87562350e-09 1s 1s 87563710e-09 0s 0s 87566510e-09 0s 0s 87572590e-09 1s 1s 87573950e-09 0s 0s 87576790e-09 0s 0s 87582830e-09 1s 1s 87584190e-09 0s 0s 87587070e-09 0s 0s 87593070e-09 1s 1s 87594430e-09 0s 0s 87597350e-09 0s 0s 87603310e-09 1s 1s 87604670e-09 0s 0s 87607630e-09 0s 0s 87613550e-09 1s 1s 87614910e-09 0s 0s 87617910e-09 0s 0s 87623790e-09 1s 1s 87625150e-09 0s 0s 87628190e-09 0s 0s 87634030e-09 1s 1s 87635390e-09 0s 0s 87638470e-09 0s 0s 87644270e-09 1s 1s 87645630e-09 0s 0s 87648750e-09 0s 0s 87654510e-09 1s 1s 87655870e-09 0s 0s 87659030e-09 0s 0s 87664750e-09 1s 1s 87666110e-09 0s 0s 87669310e-09 0s 0s 87674990e-09 1s 1s 87676350e-09 0s 0s 87679590e-09 0s 0s 87685230e-09 1s 1s 87686590e-09 0s 0s 87689870e-09 0s 0s 87695470e-09 1s 1s 87696830e-09 0s 0s 87700150e-09 0s 0s 87705710e-09 1s 1s 87707070e-09 0s 0s 87710430e-09 0s 0s 87715950e-09 1s 1s 87717310e-09 0s 0s 87720710e-09 0s 0s 87726190e-09 1s 1s 87727550e-09 0s 0s 87730990e-09 0s 0s 87736430e-09 1s 1s 87737790e-09 0s 0s 87741270e-09 0s 0s 87746670e-09 1s 1s 87748030e-09 0s 0s 87751550e-09 0s 0s 87756910e-09 1s 1s 87758270e-09 0s 0s 87761830e-09 0s 0s 87767150e-09 1s 1s 87768510e-09 0s 0s 87772110e-09 0s 0s 87777390e-09 1s 1s 87778750e-09 0s 0s 87782390e-09 0s 0s 87787630e-09 1s 1s 87788990e-09 0s 0s 87792670e-09 0s 0s 87797870e-09 1s 1s 87799230e-09 0s 0s 87802950e-09 0s 0s 87808110e-09 1s 1s 87809470e-09 0s 0s 87813230e-09 0s 0s 87818350e-09 1s 1s 87819710e-09 0s 0s 87823510e-09 0s 0s 87828590e-09 1s 1s 87829950e-09 0s 0s 87833790e-09 0s 0s 87838830e-09 1s 1s 87840190e-09 0s 0s 87844070e-09 0s 0s 87849070e-09 1s 1s 87850430e-09 0s 0s 87854350e-09 0s 0s 87859310e-09 1s 1s 87860670e-09 0s 0s 87864630e-09 0s 0s 87869550e-09 1s 1s 87870910e-09 0s 0s 87874910e-09 0s 0s 87879790e-09 1s 1s 87881150e-09 0s 0s 87885190e-09 0s 0s 87890030e-09 1s 1s 87891390e-09 0s 0s 87895470e-09 0s 0s 87900270e-09 1s 1s 87901630e-09 0s 0s 87905750e-09 0s 0s 87910510e-09 1s 1s 87911870e-09 0s 0s 87916030e-09 0s 0s 87920750e-09 1s 1s 87922110e-09 0s 0s 87926310e-09 0s 0s 87930990e-09 1s 1s 87932350e-09 0s 0s 87936590e-09 0s 0s 87941230e-09 1s 1s 87942590e-09 0s 0s 87946870e-09 0s 0s 87951470e-09 1s 1s 87952830e-09 0s 0s 87957150e-09 0s 0s 87961710e-09 1s 1s 87963070e-09 0s 0s 87967430e-09 0s 0s 87971950e-09 1s 1s 87973310e-09 0s 0s 87977710e-09 0s 0s 87982190e-09 1s 1s 87983550e-09 0s 0s 87987990e-09 0s 0s 87992430e-09 1s 1s 87993790e-09 0s 0s 87998270e-09 0s 0s 88002670e-09 1s 1s 88004030e-09 0s 0s 88008550e-09 0s 0s 88012910e-09 1s 1s 88014270e-09 0s 0s 88018830e-09 0s 0s 88023150e-09 1s 1s 88024510e-09 0s 0s 88029110e-09 0s 0s 88033390e-09 1s 1s 88034750e-09 0s 0s 88039390e-09 0s 0s 88043630e-09 1s 1s 88044990e-09 0s 0s 88049670e-09 0s 0s 88053870e-09 1s 1s 88055230e-09 0s 0s 88059950e-09 0s 0s 88064110e-09 1s 1s 88065470e-09 0s 0s 88070230e-09 0s 0s 88074350e-09 1s 1s 88075710e-09 0s 0s 88080510e-09 0s 0s 88084590e-09 1s 1s 88085950e-09 0s 0s 88090790e-09 0s 0s 88094830e-09 1s 1s 88096190e-09 0s 0s 88101070e-09 0s 0s 88105070e-09 1s 1s 88106430e-09 0s 0s 88111350e-09 0s 0s 88115310e-09 1s 1s 88116670e-09 0s 0s 88121630e-09 0s 0s 88125550e-09 1s 1s 88126910e-09 0s 0s 88131910e-09 0s 0s 88135790e-09 1s 1s 88137150e-09 0s 0s 88142190e-09 0s 0s 88146030e-09 1s 1s 88147390e-09 0s 0s 88152470e-09 0s 0s 88156270e-09 1s 1s 88157630e-09 0s 0s 88162750e-09 0s 0s 88166510e-09 1s 1s 88167870e-09 0s 0s 88173030e-09 0s 0s 88176750e-09 1s 1s 88178110e-09 0s 0s 88183310e-09 0s 0s 88186990e-09 1s 1s 88188350e-09 0s 0s 88193590e-09 0s 0s 88197230e-09 1s 1s 88198590e-09 0s 0s 88203870e-09 0s 0s 88207470e-09 1s 1s 88208830e-09 0s 0s 88214150e-09 0s 0s 88217710e-09 1s 1s 88219070e-09 0s 0s 88224430e-09 0s 0s 88227950e-09 1s 1s 88229310e-09 0s 0s 88234710e-09 0s 0s 88238190e-09 1s 1s 88239550e-09 0s 0s 88244990e-09 0s 0s 88248430e-09 1s 1s 88249790e-09 0s 0s 88255270e-09 0s 0s 88258670e-09 1s 1s 88260030e-09 0s 0s 88265550e-09 0s 0s 88268910e-09 1s 1s 88270270e-09 0s 0s 88275830e-09 0s 0s 88279150e-09 1s 1s 88280510e-09 0s 0s 88286110e-09 0s 0s 88289390e-09 1s 1s 88290750e-09 0s 0s 88296390e-09 0s 0s 88299630e-09 1s 1s 88300990e-09 0s 0s 88306670e-09 0s 0s 88309870e-09 1s 1s 88311230e-09 0s 0s 88316950e-09 0s 0s 88320110e-09 1s 1s 88321470e-09 0s 0s 88327230e-09 0s 0s 88330350e-09 1s 1s 88331710e-09 0s 0s 88337510e-09 0s 0s 88340590e-09 1s 1s 88341950e-09 0s 0s 88347790e-09 0s 0s 88350830e-09 1s 1s 88352190e-09 0s 0s 88358070e-09 0s 0s 88361070e-09 1s 1s 88362430e-09 0s 0s 88368350e-09 0s 0s 88371310e-09 1s 1s 88372670e-09 0s 0s 88378630e-09 0s 0s 88381550e-09 1s 1s 88382910e-09 0s 0s 88388910e-09 0s 0s 88391790e-09 1s 1s 88393150e-09 0s 0s 88399190e-09 0s 0s 88402030e-09 1s 1s 88403390e-09 0s 0s 88409470e-09 0s 0s 88412270e-09 1s 1s 88413630e-09 0s 0s 88419750e-09 0s 0s 88422510e-09 1s 1s 88423870e-09 0s 0s 88430030e-09 0s 0s 88432750e-09 1s 1s 88434110e-09 0s 0s 88440310e-09 0s 0s 88442990e-09 1s 1s 88444350e-09 0s 0s 88450590e-09 0s 0s 88453230e-09 1s 1s 88454590e-09 0s 0s 88460870e-09 0s 0s 88463470e-09 1s 1s 88464830e-09 0s 0s 88471150e-09 0s 0s 88473710e-09 1s 1s 88475070e-09 0s 0s 88481430e-09 0s 0s 88483950e-09 1s 1s 88485310e-09 0s 0s 88491710e-09 0s 0s 88494190e-09 1s 1s 88495550e-09 0s 0s 88501990e-09 0s 0s 88504430e-09 1s 1s 88505790e-09 0s 0s 88512270e-09 0s 0s 88514670e-09 1s 1s 88516030e-09 0s 0s 88522550e-09 0s 0s 88524910e-09 1s 1s 88526270e-09 0s 0s 88532830e-09 0s 0s 88535150e-09 1s 1s 88536510e-09 0s 0s 88543110e-09 0s 0s 88545390e-09 1s 1s 88546750e-09 0s 0s 88553390e-09 0s 0s 88555630e-09 1s 1s 88556990e-09 0s 0s 88563670e-09 0s 0s 88565870e-09 1s 1s 88567230e-09 0s 0s 88573950e-09 0s 0s 88576110e-09 1s 1s 88577470e-09 0s 0s 88584230e-09 0s 0s 88586350e-09 1s 1s 88587710e-09 0s 0s 88594510e-09 0s 0s 88596590e-09 1s 1s 88597950e-09 0s 0s 88604790e-09 0s 0s 88606830e-09 1s 1s 88608190e-09 0s 0s 88615070e-09 0s 0s 88617070e-09 1s 1s 88618430e-09 0s 0s 88625350e-09 0s 0s 88627310e-09 1s 1s 88628670e-09 0s 0s 88635630e-09 0s 0s 88637550e-09 1s 1s 88638910e-09 0s 0s 88645910e-09 0s 0s 88647790e-09 1s 1s 88649150e-09 0s 0s 88656190e-09 0s 0s 88658030e-09 1s 1s 88659390e-09 0s 0s 88666470e-09 0s 0s 88668270e-09 1s 1s 88669630e-09 0s 0s 88676750e-09 0s 0s 88678510e-09 1s 1s 88679870e-09 0s 0s 88687030e-09 0s 0s 88688750e-09 1s 1s 88690110e-09 0s 0s 88697310e-09 0s 0s 88698990e-09 1s 1s 88700350e-09 0s 0s 88707590e-09 0s 0s 88709230e-09 1s 1s 88710590e-09 0s 0s 88717870e-09 0s 0s 88719470e-09 1s 1s 88720830e-09 0s 0s 88728150e-09 0s 0s 88729710e-09 1s 1s 88731070e-09 0s 0s 88738430e-09 0s 0s 88739950e-09 1s 1s 88741310e-09 0s 0s 88748710e-09 0s 0s 88750190e-09 1s 1s 88751550e-09 0s 0s 88758990e-09 0s 0s 88760430e-09 1s 1s 88761790e-09 0s 0s 88769270e-09 0s 0s 88770670e-09 1s 1s 88772030e-09 0s 0s 88779550e-09 0s 0s 88780910e-09 1s 1s 88782270e-09 0s 0s 88789830e-09 0s 0s 88791150e-09 1s 1s 88792510e-09 0s 0s 88800110e-09 0s 0s 88801390e-09 1s 1s 88802750e-09 0s 0s 88810390e-09 0s 0s 88811630e-09 1s 1s 88812990e-09 0s 0s 88820670e-09 0s 0s 88821870e-09 1s 1s 88823230e-09 0s 0s 88830950e-09 0s 0s 88832110e-09 1s 1s 88833470e-09 0s 0s 88841230e-09 0s 0s 88842350e-09 1s 1s 88843710e-09 0s 0s 88851510e-09 0s 0s 88852590e-09 1s 1s 88853950e-09 0s 0s 88861790e-09 0s 0s 88862830e-09 1s 1s 88864190e-09 0s 0s 88872070e-09 0s 0s 88873070e-09 1s 1s 88874430e-09 0s 0s 88882350e-09 0s 0s 88883310e-09 1s 1s 88884670e-09 0s 0s 88892630e-09 0s 0s 88893550e-09 1s 1s 88894910e-09 0s 0s 88902910e-09 0s 0s 88903790e-09 1s 1s 88905150e-09 0s 0s 88913190e-09 0s 0s 88914030e-09 1s 1s 88915390e-09 0s 0s 88923470e-09 0s 0s 88924270e-09 1s 1s 88925630e-09 0s 0s 88933750e-09 0s 0s 88934510e-09 1s 1s 88935870e-09 0s 0s 88944030e-09 0s 0s 88944750e-09 1s 1s 88946110e-09 0s 0s 88954310e-09 0s 0s 88954990e-09 1s 1s 88956350e-09 0s 0s 88964590e-09 0s 0s 88965230e-09 1s 1s 88966590e-09 0s 0s 88974870e-09 0s 0s 88975470e-09 1s 1s 88976830e-09 0s 0s 88985150e-09 0s 0s 88985710e-09 1s 1s 88987070e-09 0s 0s 88995430e-09 0s 0s 88995950e-09 1s 1s 88997310e-09 0s 0s 89005710e-09 0s 0s 89006190e-09 1s 1s 89007550e-09 0s 0s 89015990e-09 0s 0s 89016430e-09 1s 1s 89017790e-09 0s 0s 89026270e-09 0s 0s 89026670e-09 1s 1s 89028030e-09 0s 0s 89036550e-09 0s 0s 89036910e-09 1s 1s 89038270e-09 0s 0s 89046830e-09 0s 0s 89047150e-09 1s 1s 89048510e-09 0s 0s 89057110e-09 0s 0s 89057390e-09 1s 1s 89058750e-09 0s 0s 89067390e-09 0s 0s 89067630e-09 1s 1s 89068990e-09 0s 0s 89077670e-09 0s 0s 89077870e-09 1s 1s 89079230e-09 0s 0s 89087950e-09 0s 0s 89088110e-09 1s 1s 89089470e-09 0s 0s 89098230e-09 0s 0s 89098350e-09 1s 1s 89099710e-09 0s 0s 89108510e-09 0s 0s 89108590e-09 1s 1s 89109950e-09 0s 0s 89118790e-09 0s 0s 89118830e-09 1s 1s 89120190e-09 0s 0s 89129070e-09 1s 1s 89129110e-09 1s 1s 89130470e-09 0s 0s 89139310e-09 1s 1s 89139390e-09 1s 1s 89140710e-09 0s 0s 89149550e-09 1s 1s 89149670e-09 1s 1s 89150950e-09 0s 0s 89159790e-09 1s 1s 89159950e-09 1s 1s 89161190e-09 0s 0s 89170030e-09 1s 1s 89170230e-09 1s 1s 89171430e-09 0s 0s 89180270e-09 1s 1s 89180510e-09 1s 1s 89181670e-09 0s 0s 89190510e-09 1s 1s 89190790e-09 1s 1s 89191910e-09 0s 0s 89200750e-09 1s 1s 89201070e-09 1s 1s 89202150e-09 0s 0s 89210990e-09 1s 1s 89211350e-09 1s 1s 89212390e-09 0s 0s 89221230e-09 1s 1s 89221630e-09 1s 1s 89222630e-09 0s 0s 89231470e-09 1s 1s 89231910e-09 1s 1s 89232870e-09 0s 0s 89241710e-09 1s 1s 89242190e-09 1s 1s 89243110e-09 0s 0s 89251950e-09 1s 1s 89252470e-09 1s 1s 89253350e-09 0s 0s 89262190e-09 1s 1s 89262750e-09 1s 1s 89263590e-09 0s 0s 89272430e-09 1s 1s 89273030e-09 1s 1s 89273830e-09 0s 0s 89282670e-09 1s 1s 89283310e-09 1s 1s 89284070e-09 0s 0s 89292910e-09 1s 1s 89293590e-09 1s 1s 89294310e-09 0s 0s 89303150e-09 1s 1s 89303870e-09 1s 1s 89304550e-09 0s 0s 89313390e-09 1s 1s 89314150e-09 1s 1s 89314790e-09 0s 0s 89323630e-09 1s 1s 89324430e-09 1s 1s 89325030e-09 0s 0s 89333870e-09 1s 1s 89334710e-09 1s 1s 89335270e-09 0s 0s 89344110e-09 1s 1s 89344990e-09 1s 1s 89345510e-09 0s 0s 89354350e-09 1s 1s 89355270e-09 1s 1s 89355750e-09 0s 0s 89364590e-09 1s 1s 89365550e-09 1s 1s 89365990e-09 0s 0s 89374830e-09 1s 1s 89375830e-09 1s 1s 89376230e-09 0s 0s 89385070e-09 1s 1s 89386110e-09 1s 1s 89386470e-09 0s 0s 89395310e-09 1s 1s 89396390e-09 1s 1s 89396710e-09 0s 0s 89405550e-09 1s 1s 89406670e-09 1s 1s 89406950e-09 0s 0s 89415790e-09 1s 1s 89416950e-09 1s 1s 89417190e-09 0s 0s 89426030e-09 1s 1s 89427230e-09 1s 1s 89427430e-09 0s 0s 89436270e-09 1s 1s 89437510e-09 1s 1s 89437670e-09 0s 0s 89446510e-09 1s 1s 89447790e-09 1s 1s 89447910e-09 0s 0s 89456750e-09 1s 1s 89458070e-09 1s 1s 89458150e-09 0s 0s 89466990e-09 1s 1s 89468350e-09 1s 1s 89468390e-09 0s 0s 89477230e-09 1s 1s 89478630e-09 0s 0s 89487470e-09 1s 1s 89488870e-09 0s 0s 89488910e-09 0s 0s 89497710e-09 1s 1s 89499110e-09 0s 0s 89499190e-09 0s 0s 89507950e-09 1s 1s 89509350e-09 0s 0s 89509470e-09 0s 0s 89518190e-09 1s 1s 89519590e-09 0s 0s 89519750e-09 0s 0s 89528430e-09 1s 1s 89529830e-09 0s 0s 89530030e-09 0s 0s 89538670e-09 1s 1s 89540070e-09 0s 0s 89540310e-09 0s 0s 89548910e-09 1s 1s 89550310e-09 0s 0s 89550590e-09 0s 0s 89559150e-09 1s 1s 89560550e-09 0s 0s 89560870e-09 0s 0s 89569390e-09 1s 1s 89570790e-09 0s 0s 89571150e-09 0s 0s 89579630e-09 1s 1s 89581030e-09 0s 0s 89581430e-09 0s 0s 89589870e-09 1s 1s 89591270e-09 0s 0s 89591710e-09 0s 0s 89600110e-09 1s 1s 89601510e-09 0s 0s 89601990e-09 0s 0s 89610350e-09 1s 1s 89611750e-09 0s 0s 89612270e-09 0s 0s 89620590e-09 1s 1s 89621990e-09 0s 0s 89622550e-09 0s 0s 89630830e-09 1s 1s 89632230e-09 0s 0s 89632830e-09 0s 0s 89641070e-09 1s 1s 89642470e-09 0s 0s 89643110e-09 0s 0s 89651310e-09 1s 1s 89652710e-09 0s 0s 89653390e-09 0s 0s 89661550e-09 1s 1s 89662950e-09 0s 0s 89663670e-09 0s 0s 89671790e-09 1s 1s 89673190e-09 0s 0s 89673950e-09 0s 0s 89682030e-09 1s 1s 89683430e-09 0s 0s 89684230e-09 0s 0s 89692270e-09 1s 1s 89693670e-09 0s 0s 89694510e-09 0s 0s 89702510e-09 1s 1s 89703910e-09 0s 0s 89704790e-09 0s 0s 89712750e-09 1s 1s 89714150e-09 0s 0s 89715070e-09 0s 0s 89722990e-09 1s 1s 89724390e-09 0s 0s 89725350e-09 0s 0s 89733230e-09 1s 1s 89734630e-09 0s 0s 89735630e-09 0s 0s 89743470e-09 1s 1s 89744870e-09 0s 0s 89745910e-09 0s 0s 89753710e-09 1s 1s 89755110e-09 0s 0s 89756190e-09 0s 0s 89763950e-09 1s 1s 89765350e-09 0s 0s 89766470e-09 0s 0s 89774190e-09 1s 1s 89775590e-09 0s 0s 89776750e-09 0s 0s 89784430e-09 1s 1s 89785830e-09 0s 0s 89787030e-09 0s 0s 89794670e-09 1s 1s 89796070e-09 0s 0s 89797310e-09 0s 0s 89804910e-09 1s 1s 89806310e-09 0s 0s 89807590e-09 0s 0s 89815150e-09 1s 1s 89816550e-09 0s 0s 89817870e-09 0s 0s 89825390e-09 1s 1s 89826790e-09 0s 0s 89828150e-09 0s 0s 89835630e-09 1s 1s 89837030e-09 0s 0s 89838430e-09 0s 0s 89845870e-09 1s 1s 89847270e-09 0s 0s 89848710e-09 0s 0s 89856110e-09 1s 1s 89857510e-09 0s 0s 89858990e-09 0s 0s 89866350e-09 1s 1s 89867750e-09 0s 0s 89869270e-09 0s 0s 89876590e-09 1s 1s 89877990e-09 0s 0s 89879550e-09 0s 0s 89886830e-09 1s 1s 89888230e-09 0s 0s 89889830e-09 0s 0s 89897070e-09 1s 1s 89898470e-09 0s 0s 89900110e-09 0s 0s 89907310e-09 1s 1s 89908710e-09 0s 0s 89910390e-09 0s 0s 89917550e-09 1s 1s 89918950e-09 0s 0s 89920670e-09 0s 0s 89927790e-09 1s 1s 89929190e-09 0s 0s 89930950e-09 0s 0s 89938030e-09 1s 1s 89939430e-09 0s 0s 89941230e-09 0s 0s 89948270e-09 1s 1s 89949670e-09 0s 0s 89951510e-09 0s 0s 89958510e-09 1s 1s 89959910e-09 0s 0s 89961790e-09 0s 0s 89968750e-09 1s 1s 89970150e-09 0s 0s 89972070e-09 0s 0s 89978990e-09 1s 1s 89980390e-09 0s 0s 89982350e-09 0s 0s 89989230e-09 1s 1s 89990630e-09 0s 0s 89992630e-09 0s 0s 89999470e-09 1s 1s 90000870e-09 0s 0s 90002910e-09 0s 0s 90009710e-09 1s 1s 90011110e-09 0s 0s 90013190e-09 0s 0s 90019950e-09 1s 1s 90021350e-09 0s 0s 90023470e-09 0s 0s 90030190e-09 1s 1s 90031590e-09 0s 0s 90033750e-09 0s 0s 90040430e-09 1s 1s 90041830e-09 0s 0s 90044030e-09 0s 0s 90050670e-09 1s 1s 90052070e-09 0s 0s 90054310e-09 0s 0s 90060910e-09 1s 1s 90062310e-09 0s 0s 90064590e-09 0s 0s 90071150e-09 1s 1s 90072550e-09 0s 0s 90074870e-09 0s 0s 90081390e-09 1s 1s 90082790e-09 0s 0s 90085150e-09 0s 0s 90091630e-09 1s 1s 90093030e-09 0s 0s 90095430e-09 0s 0s 90101870e-09 1s 1s 90103270e-09 0s 0s 90105710e-09 0s 0s 90112110e-09 1s 1s 90113510e-09 0s 0s 90115990e-09 0s 0s 90122350e-09 1s 1s 90123750e-09 0s 0s 90126270e-09 0s 0s 90132590e-09 1s 1s 90133990e-09 0s 0s 90136550e-09 0s 0s 90142830e-09 1s 1s 90144230e-09 0s 0s 90146830e-09 0s 0s 90153070e-09 1s 1s 90154470e-09 0s 0s 90157110e-09 0s 0s 90163310e-09 1s 1s 90164710e-09 0s 0s 90167390e-09 0s 0s 90173550e-09 1s 1s 90174950e-09 0s 0s 90177670e-09 0s 0s 90183790e-09 1s 1s 90185190e-09 0s 0s 90187950e-09 0s 0s 90194030e-09 1s 1s 90195430e-09 0s 0s 90198230e-09 0s 0s 90204270e-09 1s 1s 90205670e-09 0s 0s 90208510e-09 0s 0s 90214510e-09 1s 1s 90215910e-09 0s 0s 90218790e-09 0s 0s 90224750e-09 1s 1s 90226150e-09 0s 0s 90229070e-09 0s 0s 90234990e-09 1s 1s 90236390e-09 0s 0s 90239350e-09 0s 0s 90245230e-09 1s 1s 90246630e-09 0s 0s 90249630e-09 0s 0s 90255470e-09 1s 1s 90256870e-09 0s 0s 90259910e-09 0s 0s 90265710e-09 1s 1s 90267110e-09 0s 0s 90270190e-09 0s 0s 90275950e-09 1s 1s 90277350e-09 0s 0s 90280470e-09 0s 0s 90286190e-09 1s 1s 90287590e-09 0s 0s 90290750e-09 0s 0s 90296430e-09 1s 1s 90297830e-09 0s 0s 90301030e-09 0s 0s 90306670e-09 1s 1s 90308070e-09 0s 0s 90311310e-09 0s 0s 90316910e-09 1s 1s 90318310e-09 0s 0s 90321590e-09 0s 0s 90327150e-09 1s 1s 90328550e-09 0s 0s 90331870e-09 0s 0s 90337390e-09 1s 1s 90338790e-09 0s 0s 90342150e-09 0s 0s 90347630e-09 1s 1s 90349030e-09 0s 0s 90352430e-09 0s 0s 90357870e-09 1s 1s 90359270e-09 0s 0s 90362710e-09 0s 0s 90368110e-09 1s 1s 90369510e-09 0s 0s 90372990e-09 0s 0s 90378350e-09 1s 1s 90379750e-09 0s 0s 90383270e-09 0s 0s 90388590e-09 1s 1s 90389990e-09 0s 0s 90393550e-09 0s 0s 90398830e-09 1s 1s 90400230e-09 0s 0s 90403830e-09 0s 0s 90409070e-09 1s 1s 90410470e-09 0s 0s 90414110e-09 0s 0s 90419310e-09 1s 1s 90420710e-09 0s 0s 90424390e-09 0s 0s 90429550e-09 1s 1s 90430950e-09 0s 0s 90434670e-09 0s 0s 90439790e-09 1s 1s 90441190e-09 0s 0s 90444950e-09 0s 0s 90450030e-09 1s 1s 90451430e-09 0s 0s 90455230e-09 0s 0s 90460270e-09 1s 1s 90461670e-09 0s 0s 90465510e-09 0s 0s 90470510e-09 1s 1s 90471910e-09 0s 0s 90475790e-09 0s 0s 90480750e-09 1s 1s 90482150e-09 0s 0s 90486070e-09 0s 0s 90490990e-09 1s 1s 90492390e-09 0s 0s 90496350e-09 0s 0s 90501230e-09 1s 1s 90502630e-09 0s 0s 90506630e-09 0s 0s 90511470e-09 1s 1s 90512870e-09 0s 0s 90516910e-09 0s 0s 90521710e-09 1s 1s 90523110e-09 0s 0s 90527190e-09 0s 0s 90531950e-09 1s 1s 90533350e-09 0s 0s 90537470e-09 0s 0s 90542190e-09 1s 1s 90543590e-09 0s 0s 90547750e-09 0s 0s 90552430e-09 1s 1s 90553830e-09 0s 0s 90558030e-09 0s 0s 90562670e-09 1s 1s 90564070e-09 0s 0s 90568310e-09 0s 0s 90572910e-09 1s 1s 90574310e-09 0s 0s 90578590e-09 0s 0s 90583150e-09 1s 1s 90584550e-09 0s 0s 90588870e-09 0s 0s 90593390e-09 1s 1s 90594790e-09 0s 0s 90599150e-09 0s 0s 90603630e-09 1s 1s 90605030e-09 0s 0s 90609430e-09 0s 0s 90613870e-09 1s 1s 90615270e-09 0s 0s 90619710e-09 0s 0s 90624110e-09 1s 1s 90625510e-09 0s 0s 90629990e-09 0s 0s 90634350e-09 1s 1s 90635750e-09 0s 0s 90640270e-09 0s 0s 90644590e-09 1s 1s 90645990e-09 0s 0s 90650550e-09 0s 0s 90654830e-09 1s 1s 90656230e-09 0s 0s 90660830e-09 0s 0s 90665070e-09 1s 1s 90666470e-09 0s 0s 90671110e-09 0s 0s 90675310e-09 1s 1s 90676710e-09 0s 0s 90681390e-09 0s 0s 90685550e-09 1s 1s 90686950e-09 0s 0s 90691670e-09 0s 0s 90695790e-09 1s 1s 90697190e-09 0s 0s 90701950e-09 0s 0s 90706030e-09 1s 1s 90707430e-09 0s 0s 90712230e-09 0s 0s 90716270e-09 1s 1s 90717670e-09 0s 0s 90722510e-09 0s 0s 90726510e-09 1s 1s 90727910e-09 0s 0s 90732790e-09 0s 0s 90736750e-09 1s 1s 90738150e-09 0s 0s 90743070e-09 0s 0s 90746990e-09 1s 1s 90748390e-09 0s 0s 90753350e-09 0s 0s 90757230e-09 1s 1s 90758630e-09 0s 0s 90763630e-09 0s 0s 90767470e-09 1s 1s 90768870e-09 0s 0s 90773910e-09 0s 0s 90777710e-09 1s 1s 90779110e-09 0s 0s 90784190e-09 0s 0s 90787950e-09 1s 1s 90789350e-09 0s 0s 90794470e-09 0s 0s 90798190e-09 1s 1s 90799590e-09 0s 0s 90804750e-09 0s 0s 90808430e-09 1s 1s 90809830e-09 0s 0s 90815030e-09 0s 0s 90818670e-09 1s 1s 90820070e-09 0s 0s 90825310e-09 0s 0s 90828910e-09 1s 1s 90830310e-09 0s 0s 90835590e-09 0s 0s 90839150e-09 1s 1s 90840550e-09 0s 0s 90845870e-09 0s 0s 90849390e-09 1s 1s 90850790e-09 0s 0s 90856150e-09 0s 0s 90859630e-09 1s 1s 90861030e-09 0s 0s 90866430e-09 0s 0s 90869870e-09 1s 1s 90871270e-09 0s 0s 90876710e-09 0s 0s 90880110e-09 1s 1s 90881510e-09 0s 0s 90886990e-09 0s 0s 90890350e-09 1s 1s 90891750e-09 0s 0s 90897270e-09 0s 0s 90900590e-09 1s 1s 90901990e-09 0s 0s 90907550e-09 0s 0s 90910830e-09 1s 1s 90912230e-09 0s 0s 90917830e-09 0s 0s 90921070e-09 1s 1s 90922470e-09 0s 0s 90928110e-09 0s 0s 90931310e-09 1s 1s 90932710e-09 0s 0s 90938390e-09 0s 0s 90941550e-09 1s 1s 90942950e-09 0s 0s 90948670e-09 0s 0s 90951790e-09 1s 1s 90953190e-09 0s 0s 90958950e-09 0s 0s 90962030e-09 1s 1s 90963430e-09 0s 0s 90969230e-09 0s 0s 90972270e-09 1s 1s 90973670e-09 0s 0s 90979510e-09 0s 0s 90982510e-09 1s 1s 90983910e-09 0s 0s 90989790e-09 0s 0s 90992750e-09 1s 1s 90994150e-09 0s 0s 91000070e-09 0s 0s 91002990e-09 1s 1s 91004390e-09 0s 0s 91010350e-09 0s 0s 91013230e-09 1s 1s 91014630e-09 0s 0s 91020630e-09 0s 0s 91023470e-09 1s 1s 91024870e-09 0s 0s 91030910e-09 0s 0s 91033710e-09 1s 1s 91035110e-09 0s 0s 91041190e-09 0s 0s 91043950e-09 1s 1s 91045350e-09 0s 0s 91051470e-09 0s 0s 91054190e-09 1s 1s 91055590e-09 0s 0s 91061750e-09 0s 0s 91064430e-09 1s 1s 91065830e-09 0s 0s 91072030e-09 0s 0s 91074670e-09 1s 1s 91076070e-09 0s 0s 91082310e-09 0s 0s 91084910e-09 1s 1s 91086310e-09 0s 0s 91092590e-09 0s 0s 91095150e-09 1s 1s 91096550e-09 0s 0s 91102870e-09 0s 0s 91105390e-09 1s 1s 91106790e-09 0s 0s 91113150e-09 0s 0s 91115630e-09 1s 1s 91117030e-09 0s 0s 91123430e-09 0s 0s 91125870e-09 1s 1s 91127270e-09 0s 0s 91133710e-09 0s 0s 91136110e-09 1s 1s 91137510e-09 0s 0s 91143990e-09 0s 0s 91146350e-09 1s 1s 91147750e-09 0s 0s 91154270e-09 0s 0s 91156590e-09 1s 1s 91157990e-09 0s 0s 91164550e-09 0s 0s 91166830e-09 1s 1s 91168230e-09 0s 0s 91174830e-09 0s 0s 91177070e-09 1s 1s 91178470e-09 0s 0s 91185110e-09 0s 0s 91187310e-09 1s 1s 91188710e-09 0s 0s 91195390e-09 0s 0s 91197550e-09 1s 1s 91198950e-09 0s 0s 91205670e-09 0s 0s 91207790e-09 1s 1s 91209190e-09 0s 0s 91215950e-09 0s 0s 91218030e-09 1s 1s 91219430e-09 0s 0s 91226230e-09 0s 0s 91228270e-09 1s 1s 91229670e-09 0s 0s 91236510e-09 0s 0s 91238510e-09 1s 1s 91239910e-09 0s 0s 91246790e-09 0s 0s 91248750e-09 1s 1s 91250150e-09 0s 0s 91257070e-09 0s 0s 91258990e-09 1s 1s 91260390e-09 0s 0s 91267350e-09 0s 0s 91269230e-09 1s 1s 91270630e-09 0s 0s 91277630e-09 0s 0s 91279470e-09 1s 1s 91280870e-09 0s 0s 91287910e-09 0s 0s 91289710e-09 1s 1s 91291110e-09 0s 0s 91298190e-09 0s 0s 91299950e-09 1s 1s 91301350e-09 0s 0s 91308470e-09 0s 0s 91310190e-09 1s 1s 91311590e-09 0s 0s 91318750e-09 0s 0s 91320430e-09 1s 1s 91321830e-09 0s 0s 91329030e-09 0s 0s 91330670e-09 1s 1s 91332070e-09 0s 0s 91339310e-09 0s 0s 91340910e-09 1s 1s 91342310e-09 0s 0s 91349590e-09 0s 0s 91351150e-09 1s 1s 91352550e-09 0s 0s 91359870e-09 0s 0s 91361390e-09 1s 1s 91362790e-09 0s 0s 91370150e-09 0s 0s 91371630e-09 1s 1s 91373030e-09 0s 0s 91380430e-09 0s 0s 91381870e-09 1s 1s 91383270e-09 0s 0s 91390710e-09 0s 0s 91392110e-09 1s 1s 91393510e-09 0s 0s 91400990e-09 0s 0s 91402350e-09 1s 1s 91403750e-09 0s 0s 91411270e-09 0s 0s 91412590e-09 1s 1s 91413990e-09 0s 0s 91421550e-09 0s 0s 91422830e-09 1s 1s 91424230e-09 0s 0s 91431830e-09 0s 0s 91433070e-09 1s 1s 91434470e-09 0s 0s 91442110e-09 0s 0s 91443310e-09 1s 1s 91444710e-09 0s 0s 91452390e-09 0s 0s 91453550e-09 1s 1s 91454950e-09 0s 0s 91462670e-09 0s 0s 91463790e-09 1s 1s 91465190e-09 0s 0s 91472950e-09 0s 0s 91474030e-09 1s 1s 91475430e-09 0s 0s 91483230e-09 0s 0s 91484270e-09 1s 1s 91485670e-09 0s 0s 91493510e-09 0s 0s 91494510e-09 1s 1s 91495910e-09 0s 0s 91503790e-09 0s 0s 91504750e-09 1s 1s 91506150e-09 0s 0s 91514070e-09 0s 0s 91514990e-09 1s 1s 91516390e-09 0s 0s 91524350e-09 0s 0s 91525230e-09 1s 1s 91526630e-09 0s 0s 91534630e-09 0s 0s 91535470e-09 1s 1s 91536870e-09 0s 0s 91544910e-09 0s 0s 91545710e-09 1s 1s 91547110e-09 0s 0s 91555190e-09 0s 0s 91555950e-09 1s 1s 91557350e-09 0s 0s 91565470e-09 0s 0s 91566190e-09 1s 1s 91567590e-09 0s 0s 91575750e-09 0s 0s 91576430e-09 1s 1s 91577830e-09 0s 0s 91586030e-09 0s 0s 91586670e-09 1s 1s 91588070e-09 0s 0s 91596310e-09 0s 0s 91596910e-09 1s 1s 91598310e-09 0s 0s 91606590e-09 0s 0s 91607150e-09 1s 1s 91608550e-09 0s 0s 91616870e-09 0s 0s 91617390e-09 1s 1s 91618790e-09 0s 0s 91627150e-09 0s 0s 91627630e-09 1s 1s 91629030e-09 0s 0s 91637430e-09 0s 0s 91637870e-09 1s 1s 91639270e-09 0s 0s 91647710e-09 0s 0s 91648110e-09 1s 1s 91649510e-09 0s 0s 91657990e-09 0s 0s 91658350e-09 1s 1s 91659750e-09 0s 0s 91668270e-09 0s 0s 91668590e-09 1s 1s 91669990e-09 0s 0s 91678550e-09 0s 0s 91678830e-09 1s 1s 91680230e-09 0s 0s 91688830e-09 0s 0s 91689070e-09 1s 1s 91690470e-09 0s 0s 91699110e-09 0s 0s 91699310e-09 1s 1s 91700710e-09 0s 0s 91709390e-09 0s 0s 91709550e-09 1s 1s 91710950e-09 0s 0s 91719670e-09 0s 0s 91719790e-09 1s 1s 91721190e-09 0s 0s 91729950e-09 0s 0s 91730030e-09 1s 1s 91731430e-09 0s 0s 91740230e-09 0s 0s 91740270e-09 1s 1s 91741670e-09 0s 0s 91750510e-09 1s 1s 91750550e-09 1s 1s 91751950e-09 0s 0s 91760750e-09 1s 1s 91760830e-09 1s 1s 91762190e-09 0s 0s 91770990e-09 1s 1s 91771110e-09 1s 1s 91772430e-09 0s 0s 91781230e-09 1s 1s 91781390e-09 1s 1s 91782670e-09 0s 0s 91791470e-09 1s 1s 91791670e-09 1s 1s 91792910e-09 0s 0s 91801710e-09 1s 1s 91801950e-09 1s 1s 91803150e-09 0s 0s 91811950e-09 1s 1s 91812230e-09 1s 1s 91813390e-09 0s 0s 91822190e-09 1s 1s 91822510e-09 1s 1s 91823630e-09 0s 0s 91832430e-09 1s 1s 91832790e-09 1s 1s 91833870e-09 0s 0s 91842670e-09 1s 1s 91843070e-09 1s 1s 91844110e-09 0s 0s 91852910e-09 1s 1s 91853350e-09 1s 1s 91854350e-09 0s 0s 91863150e-09 1s 1s 91863630e-09 1s 1s 91864590e-09 0s 0s 91873390e-09 1s 1s 91873910e-09 1s 1s 91874830e-09 0s 0s 91883630e-09 1s 1s 91884190e-09 1s 1s 91885070e-09 0s 0s 91893870e-09 1s 1s 91894470e-09 1s 1s 91895310e-09 0s 0s 91904110e-09 1s 1s 91904750e-09 1s 1s 91905550e-09 0s 0s 91914350e-09 1s 1s 91915030e-09 1s 1s 91915790e-09 0s 0s 91924590e-09 1s 1s 91925310e-09 1s 1s 91926030e-09 0s 0s 91934830e-09 1s 1s 91935590e-09 1s 1s 91936270e-09 0s 0s 91945070e-09 1s 1s 91945870e-09 1s 1s 91946510e-09 0s 0s 91955310e-09 1s 1s 91956150e-09 1s 1s 91956750e-09 0s 0s 91965550e-09 1s 1s 91966430e-09 1s 1s 91966990e-09 0s 0s 91975790e-09 1s 1s 91976710e-09 1s 1s 91977230e-09 0s 0s 91986030e-09 1s 1s 91986990e-09 1s 1s 91987470e-09 0s 0s 91996270e-09 1s 1s 91997270e-09 1s 1s 91997710e-09 0s 0s 92006510e-09 1s 1s 92007550e-09 1s 1s 92007950e-09 0s 0s 92016750e-09 1s 1s 92017830e-09 1s 1s 92018190e-09 0s 0s 92026990e-09 1s 1s 92028110e-09 1s 1s 92028430e-09 0s 0s 92037230e-09 1s 1s 92038390e-09 1s 1s 92038670e-09 0s 0s 92047470e-09 1s 1s 92048670e-09 1s 1s 92048910e-09 0s 0s 92057710e-09 1s 1s 92058950e-09 1s 1s 92059150e-09 0s 0s 92067950e-09 1s 1s 92069230e-09 1s 1s 92069390e-09 0s 0s 92078190e-09 1s 1s 92079510e-09 1s 1s 92079630e-09 0s 0s 92088430e-09 1s 1s 92089790e-09 1s 1s 92089870e-09 0s 0s 92098670e-09 1s 1s 92100070e-09 1s 1s 92100110e-09 0s 0s 92108910e-09 1s 1s 92110350e-09 0s 0s 92119150e-09 1s 1s 92120590e-09 0s 0s 92120630e-09 0s 0s 92129390e-09 1s 1s 92130830e-09 0s 0s 92130910e-09 0s 0s 92139630e-09 1s 1s 92141070e-09 0s 0s 92141190e-09 0s 0s 92149870e-09 1s 1s 92151310e-09 0s 0s 92151470e-09 0s 0s 92160110e-09 1s 1s 92161550e-09 0s 0s 92161750e-09 0s 0s 92170350e-09 1s 1s 92171790e-09 0s 0s 92172030e-09 0s 0s 92180590e-09 1s 1s 92182030e-09 0s 0s 92182310e-09 0s 0s 92190830e-09 1s 1s 92192270e-09 0s 0s 92192590e-09 0s 0s 92201070e-09 1s 1s 92202510e-09 0s 0s 92202870e-09 0s 0s 92211310e-09 1s 1s 92212750e-09 0s 0s 92213150e-09 0s 0s 92221550e-09 1s 1s 92222990e-09 0s 0s 92223430e-09 0s 0s 92231790e-09 1s 1s 92233230e-09 0s 0s 92233710e-09 0s 0s 92242030e-09 1s 1s 92243470e-09 0s 0s 92243990e-09 0s 0s 92252270e-09 1s 1s 92253710e-09 0s 0s 92254270e-09 0s 0s 92262510e-09 1s 1s 92263950e-09 0s 0s 92264550e-09 0s 0s 92272750e-09 1s 1s 92274190e-09 0s 0s 92274830e-09 0s 0s 92282990e-09 1s 1s 92284430e-09 0s 0s 92285110e-09 0s 0s 92293230e-09 1s 1s 92294670e-09 0s 0s 92295390e-09 0s 0s 92303470e-09 1s 1s 92304910e-09 0s 0s 92305670e-09 0s 0s 92313710e-09 1s 1s 92315150e-09 0s 0s 92315950e-09 0s 0s 92323950e-09 1s 1s 92325390e-09 0s 0s 92326230e-09 0s 0s 92334190e-09 1s 1s 92335630e-09 0s 0s 92336510e-09 0s 0s 92344430e-09 1s 1s 92345870e-09 0s 0s 92346790e-09 0s 0s 92354670e-09 1s 1s 92356110e-09 0s 0s 92357070e-09 0s 0s 92364910e-09 1s 1s 92366350e-09 0s 0s 92367350e-09 0s 0s 92375150e-09 1s 1s 92376590e-09 0s 0s 92377630e-09 0s 0s 92385390e-09 1s 1s 92386830e-09 0s 0s 92387910e-09 0s 0s 92395630e-09 1s 1s 92397070e-09 0s 0s 92398190e-09 0s 0s 92405870e-09 1s 1s 92407310e-09 0s 0s 92408470e-09 0s 0s 92416110e-09 1s 1s 92417550e-09 0s 0s 92418750e-09 0s 0s 92426350e-09 1s 1s 92427790e-09 0s 0s 92429030e-09 0s 0s 92436590e-09 1s 1s 92438030e-09 0s 0s 92439310e-09 0s 0s 92446830e-09 1s 1s 92448270e-09 0s 0s 92449590e-09 0s 0s 92457070e-09 1s 1s 92458510e-09 0s 0s 92459870e-09 0s 0s 92467310e-09 1s 1s 92468750e-09 0s 0s 92470150e-09 0s 0s 92477550e-09 1s 1s 92478990e-09 0s 0s 92480430e-09 0s 0s 92487790e-09 1s 1s 92489230e-09 0s 0s 92490710e-09 0s 0s 92498030e-09 1s 1s 92499470e-09 0s 0s 92500990e-09 0s 0s 92508270e-09 1s 1s 92509710e-09 0s 0s 92511270e-09 0s 0s 92518510e-09 1s 1s 92519950e-09 0s 0s 92521550e-09 0s 0s 92528750e-09 1s 1s 92530190e-09 0s 0s 92531830e-09 0s 0s 92538990e-09 1s 1s 92540430e-09 0s 0s 92542110e-09 0s 0s 92549230e-09 1s 1s 92550670e-09 0s 0s 92552390e-09 0s 0s 92559470e-09 1s 1s 92560910e-09 0s 0s 92562670e-09 0s 0s 92569710e-09 1s 1s 92571150e-09 0s 0s 92572950e-09 0s 0s 92579950e-09 1s 1s 92581390e-09 0s 0s 92583230e-09 0s 0s 92590190e-09 1s 1s 92591630e-09 0s 0s 92593510e-09 0s 0s 92600430e-09 1s 1s 92601870e-09 0s 0s 92603790e-09 0s 0s 92610670e-09 1s 1s 92612110e-09 0s 0s 92614070e-09 0s 0s 92620910e-09 1s 1s 92622350e-09 0s 0s 92624350e-09 0s 0s 92631150e-09 1s 1s 92632590e-09 0s 0s 92634630e-09 0s 0s 92641390e-09 1s 1s 92642830e-09 0s 0s 92644910e-09 0s 0s 92651630e-09 1s 1s 92653070e-09 0s 0s 92655190e-09 0s 0s 92661870e-09 1s 1s 92663310e-09 0s 0s 92665470e-09 0s 0s 92672110e-09 1s 1s 92673550e-09 0s 0s 92675750e-09 0s 0s 92682350e-09 1s 1s 92683790e-09 0s 0s 92686030e-09 0s 0s 92692590e-09 1s 1s 92694030e-09 0s 0s 92696310e-09 0s 0s 92702830e-09 1s 1s 92704270e-09 0s 0s 92706590e-09 0s 0s 92713070e-09 1s 1s 92714510e-09 0s 0s 92716870e-09 0s 0s 92723310e-09 1s 1s 92724750e-09 0s 0s 92727150e-09 0s 0s 92733550e-09 1s 1s 92734990e-09 0s 0s 92737430e-09 0s 0s 92743790e-09 1s 1s 92745230e-09 0s 0s 92747710e-09 0s 0s 92754030e-09 1s 1s 92755470e-09 0s 0s 92757990e-09 0s 0s 92764270e-09 1s 1s 92765710e-09 0s 0s 92768270e-09 0s 0s 92774510e-09 1s 1s 92775950e-09 0s 0s 92778550e-09 0s 0s 92784750e-09 1s 1s 92786190e-09 0s 0s 92788830e-09 0s 0s 92794990e-09 1s 1s 92796430e-09 0s 0s 92799110e-09 0s 0s 92805230e-09 1s 1s 92806670e-09 0s 0s 92809390e-09 0s 0s 92815470e-09 1s 1s 92816910e-09 0s 0s 92819670e-09 0s 0s 92825710e-09 1s 1s 92827150e-09 0s 0s 92829950e-09 0s 0s 92835950e-09 1s 1s 92837390e-09 0s 0s 92840230e-09 0s 0s 92846190e-09 1s 1s 92847630e-09 0s 0s 92850510e-09 0s 0s 92856430e-09 1s 1s 92857870e-09 0s 0s 92860790e-09 0s 0s 92866670e-09 1s 1s 92868110e-09 0s 0s 92871070e-09 0s 0s 92876910e-09 1s 1s 92878350e-09 0s 0s 92881350e-09 0s 0s 92887150e-09 1s 1s 92888590e-09 0s 0s 92891630e-09 0s 0s 92897390e-09 1s 1s 92898830e-09 0s 0s 92901910e-09 0s 0s 92907630e-09 1s 1s 92909070e-09 0s 0s 92912190e-09 0s 0s 92917870e-09 1s 1s 92919310e-09 0s 0s 92922470e-09 0s 0s 92928110e-09 1s 1s 92929550e-09 0s 0s 92932750e-09 0s 0s 92938350e-09 1s 1s 92939790e-09 0s 0s 92943030e-09 0s 0s 92948590e-09 1s 1s 92950030e-09 0s 0s 92953310e-09 0s 0s 92958830e-09 1s 1s 92960270e-09 0s 0s 92963590e-09 0s 0s 92969070e-09 1s 1s 92970510e-09 0s 0s 92973870e-09 0s 0s 92979310e-09 1s 1s 92980750e-09 0s 0s 92984150e-09 0s 0s 92989550e-09 1s 1s 92990990e-09 0s 0s 92994430e-09 0s 0s 92999790e-09 1s 1s 93001230e-09 0s 0s 93004710e-09 0s 0s 93010030e-09 1s 1s 93011470e-09 0s 0s 93014990e-09 0s 0s 93020270e-09 1s 1s 93021710e-09 0s 0s 93025270e-09 0s 0s 93030510e-09 1s 1s 93031950e-09 0s 0s 93035550e-09 0s 0s 93040750e-09 1s 1s 93042190e-09 0s 0s 93045830e-09 0s 0s 93050990e-09 1s 1s 93052430e-09 0s 0s 93056110e-09 0s 0s 93061230e-09 1s 1s 93062670e-09 0s 0s 93066390e-09 0s 0s 93071470e-09 1s 1s 93072910e-09 0s 0s 93076670e-09 0s 0s 93081710e-09 1s 1s 93083150e-09 0s 0s 93086950e-09 0s 0s 93091950e-09 1s 1s 93093390e-09 0s 0s 93097230e-09 0s 0s 93102190e-09 1s 1s 93103630e-09 0s 0s 93107510e-09 0s 0s 93112430e-09 1s 1s 93113870e-09 0s 0s 93117790e-09 0s 0s 93122670e-09 1s 1s 93124110e-09 0s 0s 93128070e-09 0s 0s 93132910e-09 1s 1s 93134350e-09 0s 0s 93138350e-09 0s 0s 93143150e-09 1s 1s 93144590e-09 0s 0s 93148630e-09 0s 0s 93153390e-09 1s 1s 93154830e-09 0s 0s 93158910e-09 0s 0s 93163630e-09 1s 1s 93165070e-09 0s 0s 93169190e-09 0s 0s 93173870e-09 1s 1s 93175310e-09 0s 0s 93179470e-09 0s 0s 93184110e-09 1s 1s 93185550e-09 0s 0s 93189750e-09 0s 0s 93194350e-09 1s 1s 93195790e-09 0s 0s 93200030e-09 0s 0s 93204590e-09 1s 1s 93206030e-09 0s 0s 93210310e-09 0s 0s 93214830e-09 1s 1s 93216270e-09 0s 0s 93220590e-09 0s 0s 93225070e-09 1s 1s 93226510e-09 0s 0s 93230870e-09 0s 0s 93235310e-09 1s 1s 93236750e-09 0s 0s 93241150e-09 0s 0s 93245550e-09 1s 1s 93246990e-09 0s 0s 93251430e-09 0s 0s 93255790e-09 1s 1s 93257230e-09 0s 0s 93261710e-09 0s 0s 93266030e-09 1s 1s 93267470e-09 0s 0s 93271990e-09 0s 0s 93276270e-09 1s 1s 93277710e-09 0s 0s 93282270e-09 0s 0s 93286510e-09 1s 1s 93287950e-09 0s 0s 93292550e-09 0s 0s 93296750e-09 1s 1s 93298190e-09 0s 0s 93302830e-09 0s 0s 93306990e-09 1s 1s 93308430e-09 0s 0s 93313110e-09 0s 0s 93317230e-09 1s 1s 93318670e-09 0s 0s 93323390e-09 0s 0s 93327470e-09 1s 1s 93328910e-09 0s 0s 93333670e-09 0s 0s 93337710e-09 1s 1s 93339150e-09 0s 0s 93343950e-09 0s 0s 93347950e-09 1s 1s 93349390e-09 0s 0s 93354230e-09 0s 0s 93358190e-09 1s 1s 93359630e-09 0s 0s 93364510e-09 0s 0s 93368430e-09 1s 1s 93369870e-09 0s 0s 93374790e-09 0s 0s 93378670e-09 1s 1s 93380110e-09 0s 0s 93385070e-09 0s 0s 93388910e-09 1s 1s 93390350e-09 0s 0s 93395350e-09 0s 0s 93399150e-09 1s 1s 93400590e-09 0s 0s 93405630e-09 0s 0s 93409390e-09 1s 1s 93410830e-09 0s 0s 93415910e-09 0s 0s 93419630e-09 1s 1s 93421070e-09 0s 0s 93426190e-09 0s 0s 93429870e-09 1s 1s 93431310e-09 0s 0s 93436470e-09 0s 0s 93440110e-09 1s 1s 93441550e-09 0s 0s 93446750e-09 0s 0s 93450350e-09 1s 1s 93451790e-09 0s 0s 93457030e-09 0s 0s 93460590e-09 1s 1s 93462030e-09 0s 0s 93467310e-09 0s 0s 93470830e-09 1s 1s 93472270e-09 0s 0s 93477590e-09 0s 0s 93481070e-09 1s 1s 93482510e-09 0s 0s 93487870e-09 0s 0s 93491310e-09 1s 1s 93492750e-09 0s 0s 93498150e-09 0s 0s 93501550e-09 1s 1s 93502990e-09 0s 0s 93508430e-09 0s 0s 93511790e-09 1s 1s 93513230e-09 0s 0s 93518710e-09 0s 0s 93522030e-09 1s 1s 93523470e-09 0s 0s 93528990e-09 0s 0s 93532270e-09 1s 1s 93533710e-09 0s 0s 93539270e-09 0s 0s 93542510e-09 1s 1s 93543950e-09 0s 0s 93549550e-09 0s 0s 93552750e-09 1s 1s 93554190e-09 0s 0s 93559830e-09 0s 0s 93562990e-09 1s 1s 93564430e-09 0s 0s 93570110e-09 0s 0s 93573230e-09 1s 1s 93574670e-09 0s 0s 93580390e-09 0s 0s 93583470e-09 1s 1s 93584910e-09 0s 0s 93590670e-09 0s 0s 93593710e-09 1s 1s 93595150e-09 0s 0s 93600950e-09 0s 0s 93603950e-09 1s 1s 93605390e-09 0s 0s 93611230e-09 0s 0s 93614190e-09 1s 1s 93615630e-09 0s 0s 93621510e-09 0s 0s 93624430e-09 1s 1s 93625870e-09 0s 0s 93631790e-09 0s 0s 93634670e-09 1s 1s 93636110e-09 0s 0s 93642070e-09 0s 0s 93644910e-09 1s 1s 93646350e-09 0s 0s 93652350e-09 0s 0s 93655150e-09 1s 1s 93656590e-09 0s 0s 93662630e-09 0s 0s 93665390e-09 1s 1s 93666830e-09 0s 0s 93672910e-09 0s 0s 93675630e-09 1s 1s 93677070e-09 0s 0s 93683190e-09 0s 0s 93685870e-09 1s 1s 93687310e-09 0s 0s 93693470e-09 0s 0s 93696110e-09 1s 1s 93697550e-09 0s 0s 93703750e-09 0s 0s 93706350e-09 1s 1s 93707790e-09 0s 0s 93714030e-09 0s 0s 93716590e-09 1s 1s 93718030e-09 0s 0s 93724310e-09 0s 0s 93726830e-09 1s 1s 93728270e-09 0s 0s 93734590e-09 0s 0s 93737070e-09 1s 1s 93738510e-09 0s 0s 93744870e-09 0s 0s 93747310e-09 1s 1s 93748750e-09 0s 0s 93755150e-09 0s 0s 93757550e-09 1s 1s 93758990e-09 0s 0s 93765430e-09 0s 0s 93767790e-09 1s 1s 93769230e-09 0s 0s 93775710e-09 0s 0s 93778030e-09 1s 1s 93779470e-09 0s 0s 93785990e-09 0s 0s 93788270e-09 1s 1s 93789710e-09 0s 0s 93796270e-09 0s 0s 93798510e-09 1s 1s 93799950e-09 0s 0s 93806550e-09 0s 0s 93808750e-09 1s 1s 93810190e-09 0s 0s 93816830e-09 0s 0s 93818990e-09 1s 1s 93820430e-09 0s 0s 93827110e-09 0s 0s 93829230e-09 1s 1s 93830670e-09 0s 0s 93837390e-09 0s 0s 93839470e-09 1s 1s 93840910e-09 0s 0s 93847670e-09 0s 0s 93849710e-09 1s 1s 93851150e-09 0s 0s 93857950e-09 0s 0s 93859950e-09 1s 1s 93861390e-09 0s 0s 93868230e-09 0s 0s 93870190e-09 1s 1s 93871630e-09 0s 0s 93878510e-09 0s 0s 93880430e-09 1s 1s 93881870e-09 0s 0s 93888790e-09 0s 0s 93890670e-09 1s 1s 93892110e-09 0s 0s 93899070e-09 0s 0s 93900910e-09 1s 1s 93902350e-09 0s 0s 93909350e-09 0s 0s 93911150e-09 1s 1s 93912590e-09 0s 0s 93919630e-09 0s 0s 93921390e-09 1s 1s 93922830e-09 0s 0s 93929910e-09 0s 0s 93931630e-09 1s 1s 93933070e-09 0s 0s 93940190e-09 0s 0s 93941870e-09 1s 1s 93943310e-09 0s 0s 93950470e-09 0s 0s 93952110e-09 1s 1s 93953550e-09 0s 0s 93960750e-09 0s 0s 93962350e-09 1s 1s 93963790e-09 0s 0s 93971030e-09 0s 0s 93972590e-09 1s 1s 93974030e-09 0s 0s 93981310e-09 0s 0s 93982830e-09 1s 1s 93984270e-09 0s 0s 93991590e-09 0s 0s 93993070e-09 1s 1s 93994510e-09 0s 0s 94001870e-09 0s 0s 94003310e-09 1s 1s 94004750e-09 0s 0s 94012150e-09 0s 0s 94013550e-09 1s 1s 94014990e-09 0s 0s 94022430e-09 0s 0s 94023790e-09 1s 1s 94025230e-09 0s 0s 94032710e-09 0s 0s 94034030e-09 1s 1s 94035470e-09 0s 0s 94042990e-09 0s 0s 94044270e-09 1s 1s 94045710e-09 0s 0s 94053270e-09 0s 0s 94054510e-09 1s 1s 94055950e-09 0s 0s 94063550e-09 0s 0s 94064750e-09 1s 1s 94066190e-09 0s 0s 94073830e-09 0s 0s 94074990e-09 1s 1s 94076430e-09 0s 0s 94084110e-09 0s 0s 94085230e-09 1s 1s 94086670e-09 0s 0s 94094390e-09 0s 0s 94095470e-09 1s 1s 94096910e-09 0s 0s 94104670e-09 0s 0s 94105710e-09 1s 1s 94107150e-09 0s 0s 94114950e-09 0s 0s 94115950e-09 1s 1s 94117390e-09 0s 0s 94125230e-09 0s 0s 94126190e-09 1s 1s 94127630e-09 0s 0s 94135510e-09 0s 0s 94136430e-09 1s 1s 94137870e-09 0s 0s 94145790e-09 0s 0s 94146670e-09 1s 1s 94148110e-09 0s 0s 94156070e-09 0s 0s 94156910e-09 1s 1s 94158350e-09 0s 0s 94166350e-09 0s 0s 94167150e-09 1s 1s 94168590e-09 0s 0s 94176630e-09 0s 0s 94177390e-09 1s 1s 94178830e-09 0s 0s 94186910e-09 0s 0s 94187630e-09 1s 1s 94189070e-09 0s 0s 94197190e-09 0s 0s 94197870e-09 1s 1s 94199310e-09 0s 0s 94207470e-09 0s 0s 94208110e-09 1s 1s 94209550e-09 0s 0s 94217750e-09 0s 0s 94218350e-09 1s 1s 94219790e-09 0s 0s 94228030e-09 0s 0s 94228590e-09 1s 1s 94230030e-09 0s 0s 94238310e-09 0s 0s 94238830e-09 1s 1s 94240270e-09 0s 0s 94248590e-09 0s 0s 94249070e-09 1s 1s 94250510e-09 0s 0s 94258870e-09 0s 0s 94259310e-09 1s 1s 94260750e-09 0s 0s 94269150e-09 0s 0s 94269550e-09 1s 1s 94270990e-09 0s 0s 94279430e-09 0s 0s 94279790e-09 1s 1s 94281230e-09 0s 0s 94289710e-09 0s 0s 94290030e-09 1s 1s 94291470e-09 0s 0s 94299990e-09 0s 0s 94300270e-09 1s 1s 94301710e-09 0s 0s 94310270e-09 0s 0s 94310510e-09 1s 1s 94311950e-09 0s 0s 94320550e-09 0s 0s 94320750e-09 1s 1s 94322190e-09 0s 0s 94330830e-09 0s 0s 94330990e-09 1s 1s 94332430e-09 0s 0s 94341110e-09 0s 0s 94341230e-09 1s 1s 94342670e-09 0s 0s 94351390e-09 0s 0s 94351470e-09 1s 1s 94352910e-09 0s 0s 94361670e-09 0s 0s 94361710e-09 1s 1s 94363150e-09 0s 0s 94371950e-09 1s 1s 94371990e-09 1s 1s 94373430e-09 0s 0s 94382190e-09 1s 1s 94382270e-09 1s 1s 94383670e-09 0s 0s 94392430e-09 1s 1s 94392550e-09 1s 1s 94393910e-09 0s 0s 94402670e-09 1s 1s 94402830e-09 1s 1s 94404150e-09 0s 0s 94412910e-09 1s 1s 94413110e-09 1s 1s 94414390e-09 0s 0s 94423150e-09 1s 1s 94423390e-09 1s 1s 94424630e-09 0s 0s 94433390e-09 1s 1s 94433670e-09 1s 1s 94434870e-09 0s 0s 94443630e-09 1s 1s 94443950e-09 1s 1s 94445110e-09 0s 0s 94453870e-09 1s 1s 94454230e-09 1s 1s 94455350e-09 0s 0s 94464110e-09 1s 1s 94464510e-09 1s 1s 94465590e-09 0s 0s 94474350e-09 1s 1s 94474790e-09 1s 1s 94475830e-09 0s 0s 94484590e-09 1s 1s 94485070e-09 1s 1s 94486070e-09 0s 0s 94494830e-09 1s 1s 94495350e-09 1s 1s 94496310e-09 0s 0s 94505070e-09 1s 1s 94505630e-09 1s 1s 94506550e-09 0s 0s 94515310e-09 1s 1s 94515910e-09 1s 1s 94516790e-09 0s 0s 94525550e-09 1s 1s 94526190e-09 1s 1s 94527030e-09 0s 0s 94535790e-09 1s 1s 94536470e-09 1s 1s 94537270e-09 0s 0s 94546030e-09 1s 1s 94546750e-09 1s 1s 94547510e-09 0s 0s 94556270e-09 1s 1s 94557030e-09 1s 1s 94557750e-09 0s 0s 94566510e-09 1s 1s 94567310e-09 1s 1s 94567990e-09 0s 0s 94576750e-09 1s 1s 94577590e-09 1s 1s 94578230e-09 0s 0s 94586990e-09 1s 1s 94587870e-09 1s 1s 94588470e-09 0s 0s 94597230e-09 1s 1s 94598150e-09 1s 1s 94598710e-09 0s 0s 94607470e-09 1s 1s 94608430e-09 1s 1s 94608950e-09 0s 0s 94617710e-09 1s 1s 94618710e-09 1s 1s 94619190e-09 0s 0s 94627950e-09 1s 1s 94628990e-09 1s 1s 94629430e-09 0s 0s 94638190e-09 1s 1s 94639270e-09 1s 1s 94639670e-09 0s 0s 94648430e-09 1s 1s 94649550e-09 1s 1s 94649910e-09 0s 0s 94658670e-09 1s 1s 94659830e-09 1s 1s 94660150e-09 0s 0s 94668910e-09 1s 1s 94670110e-09 1s 1s 94670390e-09 0s 0s 94679150e-09 1s 1s 94680390e-09 1s 1s 94680630e-09 0s 0s 94689390e-09 1s 1s 94690670e-09 1s 1s 94690870e-09 0s 0s 94699630e-09 1s 1s 94700950e-09 1s 1s 94701110e-09 0s 0s 94709870e-09 1s 1s 94711230e-09 1s 1s 94711350e-09 0s 0s 94720110e-09 1s 1s 94721510e-09 1s 1s 94721590e-09 0s 0s 94730350e-09 1s 1s 94731790e-09 1s 1s 94731830e-09 0s 0s 94740590e-09 1s 1s 94742070e-09 0s 0s 94750830e-09 1s 1s 94752310e-09 0s 0s 94752350e-09 0s 0s 94761070e-09 1s 1s 94762550e-09 0s 0s 94762630e-09 0s 0s 94771310e-09 1s 1s 94772790e-09 0s 0s 94772910e-09 0s 0s 94781550e-09 1s 1s 94783030e-09 0s 0s 94783190e-09 0s 0s 94791790e-09 1s 1s 94793270e-09 0s 0s 94793470e-09 0s 0s 94802030e-09 1s 1s 94803510e-09 0s 0s 94803750e-09 0s 0s 94812270e-09 1s 1s 94813750e-09 0s 0s 94814030e-09 0s 0s 94822510e-09 1s 1s 94823990e-09 0s 0s 94824310e-09 0s 0s 94832750e-09 1s 1s 94834230e-09 0s 0s 94834590e-09 0s 0s 94842990e-09 1s 1s 94844470e-09 0s 0s 94844870e-09 0s 0s 94853230e-09 1s 1s 94854710e-09 0s 0s 94855150e-09 0s 0s 94863470e-09 1s 1s 94864950e-09 0s 0s 94865430e-09 0s 0s 94873710e-09 1s 1s 94875190e-09 0s 0s 94875710e-09 0s 0s 94883950e-09 1s 1s 94885430e-09 0s 0s 94885990e-09 0s 0s 94894190e-09 1s 1s 94895670e-09 0s 0s 94896270e-09 0s 0s 94904430e-09 1s 1s 94905910e-09 0s 0s 94906550e-09 0s 0s 94914670e-09 1s 1s 94916150e-09 0s 0s 94916830e-09 0s 0s 94924910e-09 1s 1s 94926390e-09 0s 0s 94927110e-09 0s 0s 94935150e-09 1s 1s 94936630e-09 0s 0s 94937390e-09 0s 0s 94945390e-09 1s 1s 94946870e-09 0s 0s 94947670e-09 0s 0s 94955630e-09 1s 1s 94957110e-09 0s 0s 94957950e-09 0s 0s 94965870e-09 1s 1s 94967350e-09 0s 0s 94968230e-09 0s 0s 94976110e-09 1s 1s 94977590e-09 0s 0s 94978510e-09 0s 0s 94986350e-09 1s 1s 94987830e-09 0s 0s 94988790e-09 0s 0s 94996590e-09 1s 1s 94998070e-09 0s 0s 94999070e-09 0s 0s 95006830e-09 1s 1s 95008310e-09 0s 0s 95009350e-09 0s 0s 95017070e-09 1s 1s 95018550e-09 0s 0s 95019630e-09 0s 0s 95027310e-09 1s 1s 95028790e-09 0s 0s 95029910e-09 0s 0s 95037550e-09 1s 1s 95039030e-09 0s 0s 95040190e-09 0s 0s 95047790e-09 1s 1s 95049270e-09 0s 0s 95050470e-09 0s 0s 95058030e-09 1s 1s 95059510e-09 0s 0s 95060750e-09 0s 0s 95068270e-09 1s 1s 95069750e-09 0s 0s 95071030e-09 0s 0s 95078510e-09 1s 1s 95079990e-09 0s 0s 95081310e-09 0s 0s 95088750e-09 1s 1s 95090230e-09 0s 0s 95091590e-09 0s 0s 95098990e-09 1s 1s 95100470e-09 0s 0s 95101870e-09 0s 0s 95109230e-09 1s 1s 95110710e-09 0s 0s 95112150e-09 0s 0s 95119470e-09 1s 1s 95120950e-09 0s 0s 95122430e-09 0s 0s 95129710e-09 1s 1s 95131190e-09 0s 0s 95132710e-09 0s 0s 95139950e-09 1s 1s 95141430e-09 0s 0s 95142990e-09 0s 0s 95150190e-09 1s 1s 95151670e-09 0s 0s 95153270e-09 0s 0s 95160430e-09 1s 1s 95161910e-09 0s 0s 95163550e-09 0s 0s 95170670e-09 1s 1s 95172150e-09 0s 0s 95173830e-09 0s 0s 95180910e-09 1s 1s 95182390e-09 0s 0s 95184110e-09 0s 0s 95191150e-09 1s 1s 95192630e-09 0s 0s 95194390e-09 0s 0s 95201390e-09 1s 1s 95202870e-09 0s 0s 95204670e-09 0s 0s 95211630e-09 1s 1s 95213110e-09 0s 0s 95214950e-09 0s 0s 95221870e-09 1s 1s 95223350e-09 0s 0s 95225230e-09 0s 0s 95232110e-09 1s 1s 95233590e-09 0s 0s 95235510e-09 0s 0s 95242350e-09 1s 1s 95243830e-09 0s 0s 95245790e-09 0s 0s 95252590e-09 1s 1s 95254070e-09 0s 0s 95256070e-09 0s 0s 95262830e-09 1s 1s 95264310e-09 0s 0s 95266350e-09 0s 0s 95273070e-09 1s 1s 95274550e-09 0s 0s 95276630e-09 0s 0s 95283310e-09 1s 1s 95284790e-09 0s 0s 95286910e-09 0s 0s 95293550e-09 1s 1s 95295030e-09 0s 0s 95297190e-09 0s 0s 95303790e-09 1s 1s 95305270e-09 0s 0s 95307470e-09 0s 0s 95314030e-09 1s 1s 95315510e-09 0s 0s 95317750e-09 0s 0s 95324270e-09 1s 1s 95325750e-09 0s 0s 95328030e-09 0s 0s 95334510e-09 1s 1s 95335990e-09 0s 0s 95338310e-09 0s 0s 95344750e-09 1s 1s 95346230e-09 0s 0s 95348590e-09 0s 0s 95354990e-09 1s 1s 95356470e-09 0s 0s 95358870e-09 0s 0s 95365230e-09 1s 1s 95366710e-09 0s 0s 95369150e-09 0s 0s 95375470e-09 1s 1s 95376950e-09 0s 0s 95379430e-09 0s 0s 95385710e-09 1s 1s 95387190e-09 0s 0s 95389710e-09 0s 0s 95395950e-09 1s 1s 95397430e-09 0s 0s 95399990e-09 0s 0s 95406190e-09 1s 1s 95407670e-09 0s 0s 95410270e-09 0s 0s 95416430e-09 1s 1s 95417910e-09 0s 0s 95420550e-09 0s 0s 95426670e-09 1s 1s 95428150e-09 0s 0s 95430830e-09 0s 0s 95436910e-09 1s 1s 95438390e-09 0s 0s 95441110e-09 0s 0s 95447150e-09 1s 1s 95448630e-09 0s 0s 95451390e-09 0s 0s 95457390e-09 1s 1s 95458870e-09 0s 0s 95461670e-09 0s 0s 95467630e-09 1s 1s 95469110e-09 0s 0s 95471950e-09 0s 0s 95477870e-09 1s 1s 95479350e-09 0s 0s 95482230e-09 0s 0s 95488110e-09 1s 1s 95489590e-09 0s 0s 95492510e-09 0s 0s 95498350e-09 1s 1s 95499830e-09 0s 0s 95502790e-09 0s 0s 95508590e-09 1s 1s 95510070e-09 0s 0s 95513070e-09 0s 0s 95518830e-09 1s 1s 95520310e-09 0s 0s 95523350e-09 0s 0s 95529070e-09 1s 1s 95530550e-09 0s 0s 95533630e-09 0s 0s 95539310e-09 1s 1s 95540790e-09 0s 0s 95543910e-09 0s 0s 95549550e-09 1s 1s 95551030e-09 0s 0s 95554190e-09 0s 0s 95559790e-09 1s 1s 95561270e-09 0s 0s 95564470e-09 0s 0s 95570030e-09 1s 1s 95571510e-09 0s 0s 95574750e-09 0s 0s 95580270e-09 1s 1s 95581750e-09 0s 0s 95585030e-09 0s 0s 95590510e-09 1s 1s 95591990e-09 0s 0s 95595310e-09 0s 0s 95600750e-09 1s 1s 95602230e-09 0s 0s 95605590e-09 0s 0s 95610990e-09 1s 1s 95612470e-09 0s 0s 95615870e-09 0s 0s 95621230e-09 1s 1s 95622710e-09 0s 0s 95626150e-09 0s 0s 95631470e-09 1s 1s 95632950e-09 0s 0s 95636430e-09 0s 0s 95641710e-09 1s 1s 95643190e-09 0s 0s 95646710e-09 0s 0s 95651950e-09 1s 1s 95653430e-09 0s 0s 95656990e-09 0s 0s 95662190e-09 1s 1s 95663670e-09 0s 0s 95667270e-09 0s 0s 95672430e-09 1s 1s 95673910e-09 0s 0s 95677550e-09 0s 0s 95682670e-09 1s 1s 95684150e-09 0s 0s 95687830e-09 0s 0s 95692910e-09 1s 1s 95694390e-09 0s 0s 95698110e-09 0s 0s 95703150e-09 1s 1s 95704630e-09 0s 0s 95708390e-09 0s 0s 95713390e-09 1s 1s 95714870e-09 0s 0s 95718670e-09 0s 0s 95723630e-09 1s 1s 95725110e-09 0s 0s 95728950e-09 0s 0s 95733870e-09 1s 1s 95735350e-09 0s 0s 95739230e-09 0s 0s 95744110e-09 1s 1s 95745590e-09 0s 0s 95749510e-09 0s 0s 95754350e-09 1s 1s 95755830e-09 0s 0s 95759790e-09 0s 0s 95764590e-09 1s 1s 95766070e-09 0s 0s 95770070e-09 0s 0s 95774830e-09 1s 1s 95776310e-09 0s 0s 95780350e-09 0s 0s 95785070e-09 1s 1s 95786550e-09 0s 0s 95790630e-09 0s 0s 95795310e-09 1s 1s 95796790e-09 0s 0s 95800910e-09 0s 0s 95805550e-09 1s 1s 95807030e-09 0s 0s 95811190e-09 0s 0s 95815790e-09 1s 1s 95817270e-09 0s 0s 95821470e-09 0s 0s 95826030e-09 1s 1s 95827510e-09 0s 0s 95831750e-09 0s 0s 95836270e-09 1s 1s 95837750e-09 0s 0s 95842030e-09 0s 0s 95846510e-09 1s 1s 95847990e-09 0s 0s 95852310e-09 0s 0s 95856750e-09 1s 1s 95858230e-09 0s 0s 95862590e-09 0s 0s 95866990e-09 1s 1s 95868470e-09 0s 0s 95872870e-09 0s 0s 95877230e-09 1s 1s 95878710e-09 0s 0s 95883150e-09 0s 0s 95887470e-09 1s 1s 95888950e-09 0s 0s 95893430e-09 0s 0s 95897710e-09 1s 1s 95899190e-09 0s 0s 95903710e-09 0s 0s 95907950e-09 1s 1s 95909430e-09 0s 0s 95913990e-09 0s 0s 95918190e-09 1s 1s 95919670e-09 0s 0s 95924270e-09 0s 0s 95928430e-09 1s 1s 95929910e-09 0s 0s 95934550e-09 0s 0s 95938670e-09 1s 1s 95940150e-09 0s 0s 95944830e-09 0s 0s 95948910e-09 1s 1s 95950390e-09 0s 0s 95955110e-09 0s 0s 95959150e-09 1s 1s 95960630e-09 0s 0s 95965390e-09 0s 0s 95969390e-09 1s 1s 95970870e-09 0s 0s 95975670e-09 0s 0s 95979630e-09 1s 1s 95981110e-09 0s 0s 95985950e-09 0s 0s 95989870e-09 1s 1s 95991350e-09 0s 0s 95996230e-09 0s 0s 96000110e-09 1s 1s 96001590e-09 0s 0s 96006510e-09 0s 0s 96010350e-09 1s 1s 96011830e-09 0s 0s 96016790e-09 0s 0s 96020590e-09 1s 1s 96022070e-09 0s 0s 96027070e-09 0s 0s 96030830e-09 1s 1s 96032310e-09 0s 0s 96037350e-09 0s 0s 96041070e-09 1s 1s 96042550e-09 0s 0s 96047630e-09 0s 0s 96051310e-09 1s 1s 96052790e-09 0s 0s 96057910e-09 0s 0s 96061550e-09 1s 1s 96063030e-09 0s 0s 96068190e-09 0s 0s 96071790e-09 1s 1s 96073270e-09 0s 0s 96078470e-09 0s 0s 96082030e-09 1s 1s 96083510e-09 0s 0s 96088750e-09 0s 0s 96092270e-09 1s 1s 96093750e-09 0s 0s 96099030e-09 0s 0s 96102510e-09 1s 1s 96103990e-09 0s 0s 96109310e-09 0s 0s 96112750e-09 1s 1s 96114230e-09 0s 0s 96119590e-09 0s 0s 96122990e-09 1s 1s 96124470e-09 0s 0s 96129870e-09 0s 0s 96133230e-09 1s 1s 96134710e-09 0s 0s 96140150e-09 0s 0s 96143470e-09 1s 1s 96144950e-09 0s 0s 96150430e-09 0s 0s 96153710e-09 1s 1s 96155190e-09 0s 0s 96160710e-09 0s 0s 96163950e-09 1s 1s 96165430e-09 0s 0s 96170990e-09 0s 0s 96174190e-09 1s 1s 96175670e-09 0s 0s 96181270e-09 0s 0s 96184430e-09 1s 1s 96185910e-09 0s 0s 96191550e-09 0s 0s 96194670e-09 1s 1s 96196150e-09 0s 0s 96201830e-09 0s 0s 96204910e-09 1s 1s 96206390e-09 0s 0s 96212110e-09 0s 0s 96215150e-09 1s 1s 96216630e-09 0s 0s 96222390e-09 0s 0s 96225390e-09 1s 1s 96226870e-09 0s 0s 96232670e-09 0s 0s 96235630e-09 1s 1s 96237110e-09 0s 0s 96242950e-09 0s 0s 96245870e-09 1s 1s 96247350e-09 0s 0s 96253230e-09 0s 0s 96256110e-09 1s 1s 96257590e-09 0s 0s 96263510e-09 0s 0s 96266350e-09 1s 1s 96267830e-09 0s 0s 96273790e-09 0s 0s 96276590e-09 1s 1s 96278070e-09 0s 0s 96284070e-09 0s 0s 96286830e-09 1s 1s 96288310e-09 0s 0s 96294350e-09 0s 0s 96297070e-09 1s 1s 96298550e-09 0s 0s 96304630e-09 0s 0s 96307310e-09 1s 1s 96308790e-09 0s 0s 96314910e-09 0s 0s 96317550e-09 1s 1s 96319030e-09 0s 0s 96325190e-09 0s 0s 96327790e-09 1s 1s 96329270e-09 0s 0s 96335470e-09 0s 0s 96338030e-09 1s 1s 96339510e-09 0s 0s 96345750e-09 0s 0s 96348270e-09 1s 1s 96349750e-09 0s 0s 96356030e-09 0s 0s 96358510e-09 1s 1s 96359990e-09 0s 0s 96366310e-09 0s 0s 96368750e-09 1s 1s 96370230e-09 0s 0s 96376590e-09 0s 0s 96378990e-09 1s 1s 96380470e-09 0s 0s 96386870e-09 0s 0s 96389230e-09 1s 1s 96390710e-09 0s 0s 96397150e-09 0s 0s 96399470e-09 1s 1s 96400950e-09 0s 0s 96407430e-09 0s 0s 96409710e-09 1s 1s 96411190e-09 0s 0s 96417710e-09 0s 0s 96419950e-09 1s 1s 96421430e-09 0s 0s 96427990e-09 0s 0s 96430190e-09 1s 1s 96431670e-09 0s 0s 96438270e-09 0s 0s 96440430e-09 1s 1s 96441910e-09 0s 0s 96448550e-09 0s 0s 96450670e-09 1s 1s 96452150e-09 0s 0s 96458830e-09 0s 0s 96460910e-09 1s 1s 96462390e-09 0s 0s 96469110e-09 0s 0s 96471150e-09 1s 1s 96472630e-09 0s 0s 96479390e-09 0s 0s 96481390e-09 1s 1s 96482870e-09 0s 0s 96489670e-09 0s 0s 96491630e-09 1s 1s 96493110e-09 0s 0s 96499950e-09 0s 0s 96501870e-09 1s 1s 96503350e-09 0s 0s 96510230e-09 0s 0s 96512110e-09 1s 1s 96513590e-09 0s 0s 96520510e-09 0s 0s 96522350e-09 1s 1s 96523830e-09 0s 0s 96530790e-09 0s 0s 96532590e-09 1s 1s 96534070e-09 0s 0s 96541070e-09 0s 0s 96542830e-09 1s 1s 96544310e-09 0s 0s 96551350e-09 0s 0s 96553070e-09 1s 1s 96554550e-09 0s 0s 96561630e-09 0s 0s 96563310e-09 1s 1s 96564790e-09 0s 0s 96571910e-09 0s 0s 96573550e-09 1s 1s 96575030e-09 0s 0s 96582190e-09 0s 0s 96583790e-09 1s 1s 96585270e-09 0s 0s 96592470e-09 0s 0s 96594030e-09 1s 1s 96595510e-09 0s 0s 96602750e-09 0s 0s 96604270e-09 1s 1s 96605750e-09 0s 0s 96613030e-09 0s 0s 96614510e-09 1s 1s 96615990e-09 0s 0s 96623310e-09 0s 0s 96624750e-09 1s 1s 96626230e-09 0s 0s 96633590e-09 0s 0s 96634990e-09 1s 1s 96636470e-09 0s 0s 96643870e-09 0s 0s 96645230e-09 1s 1s 96646710e-09 0s 0s 96654150e-09 0s 0s 96655470e-09 1s 1s 96656950e-09 0s 0s 96664430e-09 0s 0s 96665710e-09 1s 1s 96667190e-09 0s 0s 96674710e-09 0s 0s 96675950e-09 1s 1s 96677430e-09 0s 0s 96684990e-09 0s 0s 96686190e-09 1s 1s 96687670e-09 0s 0s 96695270e-09 0s 0s 96696430e-09 1s 1s 96697910e-09 0s 0s 96705550e-09 0s 0s 96706670e-09 1s 1s 96708150e-09 0s 0s 96715830e-09 0s 0s 96716910e-09 1s 1s 96718390e-09 0s 0s 96726110e-09 0s 0s 96727150e-09 1s 1s 96728630e-09 0s 0s 96736390e-09 0s 0s 96737390e-09 1s 1s 96738870e-09 0s 0s 96746670e-09 0s 0s 96747630e-09 1s 1s 96749110e-09 0s 0s 96756950e-09 0s 0s 96757870e-09 1s 1s 96759350e-09 0s 0s 96767230e-09 0s 0s 96768110e-09 1s 1s 96769590e-09 0s 0s 96777510e-09 0s 0s 96778350e-09 1s 1s 96779830e-09 0s 0s 96787790e-09 0s 0s 96788590e-09 1s 1s 96790070e-09 0s 0s 96798070e-09 0s 0s 96798830e-09 1s 1s 96800310e-09 0s 0s 96808350e-09 0s 0s 96809070e-09 1s 1s 96810550e-09 0s 0s 96818630e-09 0s 0s 96819310e-09 1s 1s 96820790e-09 0s 0s 96828910e-09 0s 0s 96829550e-09 1s 1s 96831030e-09 0s 0s 96839190e-09 0s 0s 96839790e-09 1s 1s 96841270e-09 0s 0s 96849470e-09 0s 0s 96850030e-09 1s 1s 96851510e-09 0s 0s 96859750e-09 0s 0s 96860270e-09 1s 1s 96861750e-09 0s 0s 96870030e-09 0s 0s 96870510e-09 1s 1s 96871990e-09 0s 0s 96880310e-09 0s 0s 96880750e-09 1s 1s 96882230e-09 0s 0s 96890590e-09 0s 0s 96890990e-09 1s 1s 96892470e-09 0s 0s 96900870e-09 0s 0s 96901230e-09 1s 1s 96902710e-09 0s 0s 96911150e-09 0s 0s 96911470e-09 1s 1s 96912950e-09 0s 0s 96921430e-09 0s 0s 96921710e-09 1s 1s 96923190e-09 0s 0s 96931710e-09 0s 0s 96931950e-09 1s 1s 96933430e-09 0s 0s 96941990e-09 0s 0s 96942190e-09 1s 1s 96943670e-09 0s 0s 96952270e-09 0s 0s 96952430e-09 1s 1s 96953910e-09 0s 0s 96962550e-09 0s 0s 96962670e-09 1s 1s 96964150e-09 0s 0s 96972830e-09 0s 0s 96972910e-09 1s 1s 96974390e-09 0s 0s 96983110e-09 0s 0s 96983150e-09 1s 1s 96984630e-09 0s 0s 96993390e-09 1s 1s 96993430e-09 1s 1s 96994910e-09 0s 0s 97003630e-09 1s 1s 97003710e-09 1s 1s 97005150e-09 0s 0s 97013870e-09 1s 1s 97013990e-09 1s 1s 97015390e-09 0s 0s 97024110e-09 1s 1s 97024270e-09 1s 1s 97025630e-09 0s 0s 97034350e-09 1s 1s 97034550e-09 1s 1s 97035870e-09 0s 0s 97044590e-09 1s 1s 97044830e-09 1s 1s 97046110e-09 0s 0s 97054830e-09 1s 1s 97055110e-09 1s 1s 97056350e-09 0s 0s 97065070e-09 1s 1s 97065390e-09 1s 1s 97066590e-09 0s 0s 97075310e-09 1s 1s 97075670e-09 1s 1s 97076830e-09 0s 0s 97085550e-09 1s 1s 97085950e-09 1s 1s 97087070e-09 0s 0s 97095790e-09 1s 1s 97096230e-09 1s 1s 97097310e-09 0s 0s 97106030e-09 1s 1s 97106510e-09 1s 1s 97107550e-09 0s 0s 97116270e-09 1s 1s 97116790e-09 1s 1s 97117790e-09 0s 0s 97126510e-09 1s 1s 97127070e-09 1s 1s 97128030e-09 0s 0s 97136750e-09 1s 1s 97137350e-09 1s 1s 97138270e-09 0s 0s 97146990e-09 1s 1s 97147630e-09 1s 1s 97148510e-09 0s 0s 97157230e-09 1s 1s 97157910e-09 1s 1s 97158750e-09 0s 0s 97167470e-09 1s 1s 97168190e-09 1s 1s 97168990e-09 0s 0s 97177710e-09 1s 1s 97178470e-09 1s 1s 97179230e-09 0s 0s 97187950e-09 1s 1s 97188750e-09 1s 1s 97189470e-09 0s 0s 97198190e-09 1s 1s 97199030e-09 1s 1s 97199710e-09 0s 0s 97208430e-09 1s 1s 97209310e-09 1s 1s 97209950e-09 0s 0s 97218670e-09 1s 1s 97219590e-09 1s 1s 97220190e-09 0s 0s 97228910e-09 1s 1s 97229870e-09 1s 1s 97230430e-09 0s 0s 97239150e-09 1s 1s 97240150e-09 1s 1s 97240670e-09 0s 0s 97249390e-09 1s 1s 97250430e-09 1s 1s 97250910e-09 0s 0s 97259630e-09 1s 1s 97260710e-09 1s 1s 97261150e-09 0s 0s 97269870e-09 1s 1s 97270990e-09 1s 1s 97271390e-09 0s 0s 97280110e-09 1s 1s 97281270e-09 1s 1s 97281630e-09 0s 0s 97290350e-09 1s 1s 97291550e-09 1s 1s 97291870e-09 0s 0s 97300590e-09 1s 1s 97301830e-09 1s 1s 97302110e-09 0s 0s 97310830e-09 1s 1s 97312110e-09 1s 1s 97312350e-09 0s 0s 97321070e-09 1s 1s 97322390e-09 1s 1s 97322590e-09 0s 0s 97331310e-09 1s 1s 97332670e-09 1s 1s 97332830e-09 0s 0s 97341550e-09 1s 1s 97342950e-09 1s 1s 97343070e-09 0s 0s 97351790e-09 1s 1s 97353230e-09 1s 1s 97353310e-09 0s 0s 97362030e-09 1s 1s 97363510e-09 1s 1s 97363550e-09 0s 0s 97372270e-09 1s 1s 97373790e-09 0s 0s 97382510e-09 1s 1s 97384030e-09 0s 0s 97384070e-09 0s 0s 97392750e-09 1s 1s 97394270e-09 0s 0s 97394350e-09 0s 0s 97402990e-09 1s 1s 97404510e-09 0s 0s 97404630e-09 0s 0s 97413230e-09 1s 1s 97414750e-09 0s 0s 97414910e-09 0s 0s 97423470e-09 1s 1s 97424990e-09 0s 0s 97425190e-09 0s 0s 97433710e-09 1s 1s 97435230e-09 0s 0s 97435470e-09 0s 0s 97443950e-09 1s 1s 97445470e-09 0s 0s 97445750e-09 0s 0s 97454190e-09 1s 1s 97455710e-09 0s 0s 97456030e-09 0s 0s 97464430e-09 1s 1s 97465950e-09 0s 0s 97466310e-09 0s 0s 97474670e-09 1s 1s 97476190e-09 0s 0s 97476590e-09 0s 0s 97484910e-09 1s 1s 97486430e-09 0s 0s 97486870e-09 0s 0s 97495150e-09 1s 1s 97496670e-09 0s 0s 97497150e-09 0s 0s 97505390e-09 1s 1s 97506910e-09 0s 0s 97507430e-09 0s 0s 97515630e-09 1s 1s 97517150e-09 0s 0s 97517710e-09 0s 0s 97525870e-09 1s 1s 97527390e-09 0s 0s 97527990e-09 0s 0s 97536110e-09 1s 1s 97537630e-09 0s 0s 97538270e-09 0s 0s 97546350e-09 1s 1s 97547870e-09 0s 0s 97548550e-09 0s 0s 97556590e-09 1s 1s 97558110e-09 0s 0s 97558830e-09 0s 0s 97566830e-09 1s 1s 97568350e-09 0s 0s 97569110e-09 0s 0s 97577070e-09 1s 1s 97578590e-09 0s 0s 97579390e-09 0s 0s 97587310e-09 1s 1s 97588830e-09 0s 0s 97589670e-09 0s 0s 97597550e-09 1s 1s 97599070e-09 0s 0s 97599950e-09 0s 0s 97607790e-09 1s 1s 97609310e-09 0s 0s 97610230e-09 0s 0s 97618030e-09 1s 1s 97619550e-09 0s 0s 97620510e-09 0s 0s 97628270e-09 1s 1s 97629790e-09 0s 0s 97630790e-09 0s 0s 97638510e-09 1s 1s 97640030e-09 0s 0s 97641070e-09 0s 0s 97648750e-09 1s 1s 97650270e-09 0s 0s 97651350e-09 0s 0s 97658990e-09 1s 1s 97660510e-09 0s 0s 97661630e-09 0s 0s 97669230e-09 1s 1s 97670750e-09 0s 0s 97671910e-09 0s 0s 97679470e-09 1s 1s 97680990e-09 0s 0s 97682190e-09 0s 0s 97689710e-09 1s 1s 97691230e-09 0s 0s 97692470e-09 0s 0s 97699950e-09 1s 1s 97701470e-09 0s 0s 97702750e-09 0s 0s 97710190e-09 1s 1s 97711710e-09 0s 0s 97713030e-09 0s 0s 97720430e-09 1s 1s 97721950e-09 0s 0s 97723310e-09 0s 0s 97730670e-09 1s 1s 97732190e-09 0s 0s 97733590e-09 0s 0s 97740910e-09 1s 1s 97742430e-09 0s 0s 97743870e-09 0s 0s 97751150e-09 1s 1s 97752670e-09 0s 0s 97754150e-09 0s 0s 97761390e-09 1s 1s 97762910e-09 0s 0s 97764430e-09 0s 0s 97771630e-09 1s 1s 97773150e-09 0s 0s 97774710e-09 0s 0s 97781870e-09 1s 1s 97783390e-09 0s 0s 97784990e-09 0s 0s 97792110e-09 1s 1s 97793630e-09 0s 0s 97795270e-09 0s 0s 97802350e-09 1s 1s 97803870e-09 0s 0s 97805550e-09 0s 0s 97812590e-09 1s 1s 97814110e-09 0s 0s 97815830e-09 0s 0s 97822830e-09 1s 1s 97824350e-09 0s 0s 97826110e-09 0s 0s 97833070e-09 1s 1s 97834590e-09 0s 0s 97836390e-09 0s 0s 97843310e-09 1s 1s 97844830e-09 0s 0s 97846670e-09 0s 0s 97853550e-09 1s 1s 97855070e-09 0s 0s 97856950e-09 0s 0s 97863790e-09 1s 1s 97865310e-09 0s 0s 97867230e-09 0s 0s 97874030e-09 1s 1s 97875550e-09 0s 0s 97877510e-09 0s 0s 97884270e-09 1s 1s 97885790e-09 0s 0s 97887790e-09 0s 0s 97894510e-09 1s 1s 97896030e-09 0s 0s 97898070e-09 0s 0s 97904750e-09 1s 1s 97906270e-09 0s 0s 97908350e-09 0s 0s 97914990e-09 1s 1s 97916510e-09 0s 0s 97918630e-09 0s 0s 97925230e-09 1s 1s 97926750e-09 0s 0s 97928910e-09 0s 0s 97935470e-09 1s 1s 97936990e-09 0s 0s 97939190e-09 0s 0s 97945710e-09 1s 1s 97947230e-09 0s 0s 97949470e-09 0s 0s 97955950e-09 1s 1s 97957470e-09 0s 0s 97959750e-09 0s 0s 97966190e-09 1s 1s 97967710e-09 0s 0s 97970030e-09 0s 0s 97976430e-09 1s 1s 97977950e-09 0s 0s 97980310e-09 0s 0s 97986670e-09 1s 1s 97988190e-09 0s 0s 97990590e-09 0s 0s 97996910e-09 1s 1s 97998430e-09 0s 0s 98000870e-09 0s 0s 98007150e-09 1s 1s 98008670e-09 0s 0s 98011150e-09 0s 0s 98017390e-09 1s 1s 98018910e-09 0s 0s 98021430e-09 0s 0s 98027630e-09 1s 1s 98029150e-09 0s 0s 98031710e-09 0s 0s 98037870e-09 1s 1s 98039390e-09 0s 0s 98041990e-09 0s 0s 98048110e-09 1s 1s 98049630e-09 0s 0s 98052270e-09 0s 0s 98058350e-09 1s 1s 98059870e-09 0s 0s 98062550e-09 0s 0s 98068590e-09 1s 1s 98070110e-09 0s 0s 98072830e-09 0s 0s 98078830e-09 1s 1s 98080350e-09 0s 0s 98083110e-09 0s 0s 98089070e-09 1s 1s 98090590e-09 0s 0s 98093390e-09 0s 0s 98099310e-09 1s 1s 98100830e-09 0s 0s 98103670e-09 0s 0s 98109550e-09 1s 1s 98111070e-09 0s 0s 98113950e-09 0s 0s 98119790e-09 1s 1s 98121310e-09 0s 0s 98124230e-09 0s 0s 98130030e-09 1s 1s 98131550e-09 0s 0s 98134510e-09 0s 0s 98140270e-09 1s 1s 98141790e-09 0s 0s 98144790e-09 0s 0s 98150510e-09 1s 1s 98152030e-09 0s 0s 98155070e-09 0s 0s 98160750e-09 1s 1s 98162270e-09 0s 0s 98165350e-09 0s 0s 98170990e-09 1s 1s 98172510e-09 0s 0s 98175630e-09 0s 0s 98181230e-09 1s 1s 98182750e-09 0s 0s 98185910e-09 0s 0s 98191470e-09 1s 1s 98192990e-09 0s 0s 98196190e-09 0s 0s 98201710e-09 1s 1s 98203230e-09 0s 0s 98206470e-09 0s 0s 98211950e-09 1s 1s 98213470e-09 0s 0s 98216750e-09 0s 0s 98222190e-09 1s 1s 98223710e-09 0s 0s 98227030e-09 0s 0s 98232430e-09 1s 1s 98233950e-09 0s 0s 98237310e-09 0s 0s 98242670e-09 1s 1s 98244190e-09 0s 0s 98247590e-09 0s 0s 98252910e-09 1s 1s 98254430e-09 0s 0s 98257870e-09 0s 0s 98263150e-09 1s 1s 98264670e-09 0s 0s 98268150e-09 0s 0s 98273390e-09 1s 1s 98274910e-09 0s 0s 98278430e-09 0s 0s 98283630e-09 1s 1s 98285150e-09 0s 0s 98288710e-09 0s 0s 98293870e-09 1s 1s 98295390e-09 0s 0s 98298990e-09 0s 0s 98304110e-09 1s 1s 98305630e-09 0s 0s 98309270e-09 0s 0s 98314350e-09 1s 1s 98315870e-09 0s 0s 98319550e-09 0s 0s 98324590e-09 1s 1s 98326110e-09 0s 0s 98329830e-09 0s 0s 98334830e-09 1s 1s 98336350e-09 0s 0s 98340110e-09 0s 0s 98345070e-09 1s 1s 98346590e-09 0s 0s 98350390e-09 0s 0s 98355310e-09 1s 1s 98356830e-09 0s 0s 98360670e-09 0s 0s 98365550e-09 1s 1s 98367070e-09 0s 0s 98370950e-09 0s 0s 98375790e-09 1s 1s 98377310e-09 0s 0s 98381230e-09 0s 0s 98386030e-09 1s 1s 98387550e-09 0s 0s 98391510e-09 0s 0s 98396270e-09 1s 1s 98397790e-09 0s 0s 98401790e-09 0s 0s 98406510e-09 1s 1s 98408030e-09 0s 0s 98412070e-09 0s 0s 98416750e-09 1s 1s 98418270e-09 0s 0s 98422350e-09 0s 0s 98426990e-09 1s 1s 98428510e-09 0s 0s 98432630e-09 0s 0s 98437230e-09 1s 1s 98438750e-09 0s 0s 98442910e-09 0s 0s 98447470e-09 1s 1s 98448990e-09 0s 0s 98453190e-09 0s 0s 98457710e-09 1s 1s 98459230e-09 0s 0s 98463470e-09 0s 0s 98467950e-09 1s 1s 98469470e-09 0s 0s 98473750e-09 0s 0s 98478190e-09 1s 1s 98479710e-09 0s 0s 98484030e-09 0s 0s 98488430e-09 1s 1s 98489950e-09 0s 0s 98494310e-09 0s 0s 98498670e-09 1s 1s 98500190e-09 0s 0s 98504590e-09 0s 0s 98508910e-09 1s 1s 98510430e-09 0s 0s 98514870e-09 0s 0s 98519150e-09 1s 1s 98520670e-09 0s 0s 98525150e-09 0s 0s 98529390e-09 1s 1s 98530910e-09 0s 0s 98535430e-09 0s 0s 98539630e-09 1s 1s 98541150e-09 0s 0s 98545710e-09 0s 0s 98549870e-09 1s 1s 98551390e-09 0s 0s 98555990e-09 0s 0s 98560110e-09 1s 1s 98561630e-09 0s 0s 98566270e-09 0s 0s 98570350e-09 1s 1s 98571870e-09 0s 0s 98576550e-09 0s 0s 98580590e-09 1s 1s 98582110e-09 0s 0s 98586830e-09 0s 0s 98590830e-09 1s 1s 98592350e-09 0s 0s 98597110e-09 0s 0s 98601070e-09 1s 1s 98602590e-09 0s 0s 98607390e-09 0s 0s 98611310e-09 1s 1s 98612830e-09 0s 0s 98617670e-09 0s 0s 98621550e-09 1s 1s 98623070e-09 0s 0s 98627950e-09 0s 0s 98631790e-09 1s 1s 98633310e-09 0s 0s 98638230e-09 0s 0s 98642030e-09 1s 1s 98643550e-09 0s 0s 98648510e-09 0s 0s 98652270e-09 1s 1s 98653790e-09 0s 0s 98658790e-09 0s 0s 98662510e-09 1s 1s 98664030e-09 0s 0s 98669070e-09 0s 0s 98672750e-09 1s 1s 98674270e-09 0s 0s 98679350e-09 0s 0s 98682990e-09 1s 1s 98684510e-09 0s 0s 98689630e-09 0s 0s 98693230e-09 1s 1s 98694750e-09 0s 0s 98699910e-09 0s 0s 98703470e-09 1s 1s 98704990e-09 0s 0s 98710190e-09 0s 0s 98713710e-09 1s 1s 98715230e-09 0s 0s 98720470e-09 0s 0s 98723950e-09 1s 1s 98725470e-09 0s 0s 98730750e-09 0s 0s 98734190e-09 1s 1s 98735710e-09 0s 0s 98741030e-09 0s 0s 98744430e-09 1s 1s 98745950e-09 0s 0s 98751310e-09 0s 0s 98754670e-09 1s 1s 98756190e-09 0s 0s 98761590e-09 0s 0s 98764910e-09 1s 1s 98766430e-09 0s 0s 98771870e-09 0s 0s 98775150e-09 1s 1s 98776670e-09 0s 0s 98782150e-09 0s 0s 98785390e-09 1s 1s 98786910e-09 0s 0s 98792430e-09 0s 0s 98795630e-09 1s 1s 98797150e-09 0s 0s 98802710e-09 0s 0s 98805870e-09 1s 1s 98807390e-09 0s 0s 98812990e-09 0s 0s 98816110e-09 1s 1s 98817630e-09 0s 0s 98823270e-09 0s 0s 98826350e-09 1s 1s 98827870e-09 0s 0s 98833550e-09 0s 0s 98836590e-09 1s 1s 98838110e-09 0s 0s 98843830e-09 0s 0s 98846830e-09 1s 1s 98848350e-09 0s 0s 98854110e-09 0s 0s 98857070e-09 1s 1s 98858590e-09 0s 0s 98864390e-09 0s 0s 98867310e-09 1s 1s 98868830e-09 0s 0s 98874670e-09 0s 0s 98877550e-09 1s 1s 98879070e-09 0s 0s 98884950e-09 0s 0s 98887790e-09 1s 1s 98889310e-09 0s 0s 98895230e-09 0s 0s 98898030e-09 1s 1s 98899550e-09 0s 0s 98905510e-09 0s 0s 98908270e-09 1s 1s 98909790e-09 0s 0s 98915790e-09 0s 0s 98918510e-09 1s 1s 98920030e-09 0s 0s 98926070e-09 0s 0s 98928750e-09 1s 1s 98930270e-09 0s 0s 98936350e-09 0s 0s 98938990e-09 1s 1s 98940510e-09 0s 0s 98946630e-09 0s 0s 98949230e-09 1s 1s 98950750e-09 0s 0s 98956910e-09 0s 0s 98959470e-09 1s 1s 98960990e-09 0s 0s 98967190e-09 0s 0s 98969710e-09 1s 1s 98971230e-09 0s 0s 98977470e-09 0s 0s 98979950e-09 1s 1s 98981470e-09 0s 0s 98987750e-09 0s 0s 98990190e-09 1s 1s 98991710e-09 0s 0s 98998030e-09 0s 0s 99000430e-09 1s 1s 99001950e-09 0s 0s 99008310e-09 0s 0s 99010670e-09 1s 1s 99012190e-09 0s 0s 99018590e-09 0s 0s 99020910e-09 1s 1s 99022430e-09 0s 0s 99028870e-09 0s 0s 99031150e-09 1s 1s 99032670e-09 0s 0s 99039150e-09 0s 0s 99041390e-09 1s 1s 99042910e-09 0s 0s 99049430e-09 0s 0s 99051630e-09 1s 1s 99053150e-09 0s 0s 99059710e-09 0s 0s 99061870e-09 1s 1s 99063390e-09 0s 0s 99069990e-09 0s 0s 99072110e-09 1s 1s 99073630e-09 0s 0s 99080270e-09 0s 0s 99082350e-09 1s 1s 99083870e-09 0s 0s 99090550e-09 0s 0s 99092590e-09 1s 1s 99094110e-09 0s 0s 99100830e-09 0s 0s 99102830e-09 1s 1s 99104350e-09 0s 0s 99111110e-09 0s 0s 99113070e-09 1s 1s 99114590e-09 0s 0s 99121390e-09 0s 0s 99123310e-09 1s 1s 99124830e-09 0s 0s 99131670e-09 0s 0s 99133550e-09 1s 1s 99135070e-09 0s 0s 99141950e-09 0s 0s 99143790e-09 1s 1s 99145310e-09 0s 0s 99152230e-09 0s 0s 99154030e-09 1s 1s 99155550e-09 0s 0s 99162510e-09 0s 0s 99164270e-09 1s 1s 99165790e-09 0s 0s 99172790e-09 0s 0s 99174510e-09 1s 1s 99176030e-09 0s 0s 99183070e-09 0s 0s 99184750e-09 1s 1s 99186270e-09 0s 0s 99193350e-09 0s 0s 99194990e-09 1s 1s 99196510e-09 0s 0s 99203630e-09 0s 0s 99205230e-09 1s 1s 99206750e-09 0s 0s 99213910e-09 0s 0s 99215470e-09 1s 1s 99216990e-09 0s 0s 99224190e-09 0s 0s 99225710e-09 1s 1s 99227230e-09 0s 0s 99234470e-09 0s 0s 99235950e-09 1s 1s 99237470e-09 0s 0s 99244750e-09 0s 0s 99246190e-09 1s 1s 99247710e-09 0s 0s 99255030e-09 0s 0s 99256430e-09 1s 1s 99257950e-09 0s 0s 99265310e-09 0s 0s 99266670e-09 1s 1s 99268190e-09 0s 0s 99275590e-09 0s 0s 99276910e-09 1s 1s 99278430e-09 0s 0s 99285870e-09 0s 0s 99287150e-09 1s 1s 99288670e-09 0s 0s 99296150e-09 0s 0s 99297390e-09 1s 1s 99298910e-09 0s 0s 99306430e-09 0s 0s 99307630e-09 1s 1s 99309150e-09 0s 0s 99316710e-09 0s 0s 99317870e-09 1s 1s 99319390e-09 0s 0s 99326990e-09 0s 0s 99328110e-09 1s 1s 99329630e-09 0s 0s 99337270e-09 0s 0s 99338350e-09 1s 1s 99339870e-09 0s 0s 99347550e-09 0s 0s 99348590e-09 1s 1s 99350110e-09 0s 0s 99357830e-09 0s 0s 99358830e-09 1s 1s 99360350e-09 0s 0s 99368110e-09 0s 0s 99369070e-09 1s 1s 99370590e-09 0s 0s 99378390e-09 0s 0s 99379310e-09 1s 1s 99380830e-09 0s 0s 99388670e-09 0s 0s 99389550e-09 1s 1s 99391070e-09 0s 0s 99398950e-09 0s 0s 99399790e-09 1s 1s 99401310e-09 0s 0s 99409230e-09 0s 0s 99410030e-09 1s 1s 99411550e-09 0s 0s 99419510e-09 0s 0s 99420270e-09 1s 1s 99421790e-09 0s 0s 99429790e-09 0s 0s 99430510e-09 1s 1s 99432030e-09 0s 0s 99440070e-09 0s 0s 99440750e-09 1s 1s 99442270e-09 0s 0s 99450350e-09 0s 0s 99450990e-09 1s 1s 99452510e-09 0s 0s 99460630e-09 0s 0s 99461230e-09 1s 1s 99462750e-09 0s 0s 99470910e-09 0s 0s 99471470e-09 1s 1s 99472990e-09 0s 0s 99481190e-09 0s 0s 99481710e-09 1s 1s 99483230e-09 0s 0s 99491470e-09 0s 0s 99491950e-09 1s 1s 99493470e-09 0s 0s 99501750e-09 0s 0s 99502190e-09 1s 1s 99503710e-09 0s 0s 99512030e-09 0s 0s 99512430e-09 1s 1s 99513950e-09 0s 0s 99522310e-09 0s 0s 99522670e-09 1s 1s 99524190e-09 0s 0s 99532590e-09 0s 0s 99532910e-09 1s 1s 99534430e-09 0s 0s 99542870e-09 0s 0s 99543150e-09 1s 1s 99544670e-09 0s 0s 99553150e-09 0s 0s 99553390e-09 1s 1s 99554910e-09 0s 0s 99563430e-09 0s 0s 99563630e-09 1s 1s 99565150e-09 0s 0s 99573710e-09 0s 0s 99573870e-09 1s 1s 99575390e-09 0s 0s 99583990e-09 0s 0s 99584110e-09 1s 1s 99585630e-09 0s 0s 99594270e-09 0s 0s 99594350e-09 1s 1s 99595870e-09 0s 0s 99604550e-09 0s 0s 99604590e-09 1s 1s 99606110e-09 0s 0s 99614830e-09 1s 1s 99614870e-09 1s 1s 99616390e-09 0s 0s 99625070e-09 1s 1s 99625150e-09 1s 1s 99626630e-09 0s 0s 99635310e-09 1s 1s 99635430e-09 1s 1s 99636870e-09 0s 0s 99645550e-09 1s 1s 99645710e-09 1s 1s 99647110e-09 0s 0s 99655790e-09 1s 1s 99655990e-09 1s 1s 99657350e-09 0s 0s 99666030e-09 1s 1s 99666270e-09 1s 1s 99667590e-09 0s 0s 99676270e-09 1s 1s 99676550e-09 1s 1s 99677830e-09 0s 0s 99686510e-09 1s 1s 99686830e-09 1s 1s 99688070e-09 0s 0s 99696750e-09 1s 1s 99697110e-09 1s 1s 99698310e-09 0s 0s 99706990e-09 1s 1s 99707390e-09 1s 1s 99708550e-09 0s 0s 99717230e-09 1s 1s 99717670e-09 1s 1s 99718790e-09 0s 0s 99727470e-09 1s 1s 99727950e-09 1s 1s 99729030e-09 0s 0s 99737710e-09 1s 1s 99738230e-09 1s 1s 99739270e-09 0s 0s 99747950e-09 1s 1s 99748510e-09 1s 1s 99749510e-09 0s 0s 99758190e-09 1s 1s 99758790e-09 1s 1s 99759750e-09 0s 0s 99768430e-09 1s 1s 99769070e-09 1s 1s 99769990e-09 0s 0s 99778670e-09 1s 1s 99779350e-09 1s 1s 99780230e-09 0s 0s 99788910e-09 1s 1s 99789630e-09 1s 1s 99790470e-09 0s 0s 99799150e-09 1s 1s 99799910e-09 1s 1s 99800710e-09 0s 0s 99809390e-09 1s 1s 99810190e-09 1s 1s 99810950e-09 0s 0s 99819630e-09 1s 1s 99820470e-09 1s 1s 99821190e-09 0s 0s 99829870e-09 1s 1s 99830750e-09 1s 1s 99831430e-09 0s 0s 99840110e-09 1s 1s 99841030e-09 1s 1s 99841670e-09 0s 0s 99850350e-09 1s 1s 99851310e-09 1s 1s 99851910e-09 0s 0s 99860590e-09 1s 1s 99861590e-09 1s 1s 99862150e-09 0s 0s 99870830e-09 1s 1s 99871870e-09 1s 1s 99872390e-09 0s 0s 99881070e-09 1s 1s 99882150e-09 1s 1s 99882630e-09 0s 0s 99891310e-09 1s 1s 99892430e-09 1s 1s 99892870e-09 0s 0s 99901550e-09 1s 1s 99902710e-09 1s 1s 99903110e-09 0s 0s 99911790e-09 1s 1s 99912990e-09 1s 1s 99913350e-09 0s 0s 99922030e-09 1s 1s 99923270e-09 1s 1s 99923590e-09 0s 0s 99932270e-09 1s 1s 99933550e-09 1s 1s 99933830e-09 0s 0s 99942510e-09 1s 1s 99943830e-09 1s 1s 99944070e-09 0s 0s 99952750e-09 1s 1s 99954110e-09 1s 1s 99954310e-09 0s 0s 99962990e-09 1s 1s 99964390e-09 1s 1s 99964550e-09 0s 0s 99973230e-09 1s 1s 99974670e-09 1s 1s 99974790e-09 0s 0s 99983470e-09 1s 1s 99984950e-09 1s 1s 99985030e-09 0s 0s 99993710e-09 1s 1s 99995230e-09 1s 1s 99995270e-09 0s 0s 100003950e-09 1s 1s 100005510e-09 0s 0s 100014190e-09 1s 1s 100015750e-09 0s 0s 100015790e-09 0s 0s 100024430e-09 1s 1s 100025990e-09 0s 0s 100026070e-09 0s 0s 100034670e-09 1s 1s 100036230e-09 0s 0s 100036350e-09 0s 0s 100044910e-09 1s 1s 100046470e-09 0s 0s 100046630e-09 0s 0s 100055150e-09 1s 1s 100056710e-09 0s 0s 100056910e-09 0s 0s 100065390e-09 1s 1s 100066950e-09 0s 0s 100067190e-09 0s 0s 100075630e-09 1s 1s 100077190e-09 0s 0s 100077470e-09 0s 0s 100085870e-09 1s 1s 100087430e-09 0s 0s 100087750e-09 0s 0s 100096110e-09 1s 1s 100097670e-09 0s 0s 100098030e-09 0s 0s 100106350e-09 1s 1s 100107910e-09 0s 0s 100108310e-09 0s 0s 100116590e-09 1s 1s 100118150e-09 0s 0s 100118590e-09 0s 0s 100126830e-09 1s 1s 100128390e-09 0s 0s 100128870e-09 0s 0s 100137070e-09 1s 1s 100138630e-09 0s 0s 100139150e-09 0s 0s 100147310e-09 1s 1s 100148870e-09 0s 0s 100149430e-09 0s 0s 100157550e-09 1s 1s 100159110e-09 0s 0s 100159710e-09 0s 0s 100167790e-09 1s 1s 100169350e-09 0s 0s 100169990e-09 0s 0s 100178030e-09 1s 1s 100179590e-09 0s 0s 100180270e-09 0s 0s 100188270e-09 1s 1s 100189830e-09 0s 0s 100190550e-09 0s 0s 100198510e-09 1s 1s 100200070e-09 0s 0s 100200830e-09 0s 0s 100208750e-09 1s 1s 100210310e-09 0s 0s 100211110e-09 0s 0s 100218990e-09 1s 1s 100220550e-09 0s 0s 100221390e-09 0s 0s 100229230e-09 1s 1s 100230790e-09 0s 0s 100231670e-09 0s 0s 100239470e-09 1s 1s 100241030e-09 0s 0s 100241950e-09 0s 0s 100249710e-09 1s 1s 100251270e-09 0s 0s 100252230e-09 0s 0s 100259950e-09 1s 1s 100261510e-09 0s 0s 100262510e-09 0s 0s 100270190e-09 1s 1s 100271750e-09 0s 0s 100272790e-09 0s 0s 100280430e-09 1s 1s 100281990e-09 0s 0s 100283070e-09 0s 0s 100290670e-09 1s 1s 100292230e-09 0s 0s 100293350e-09 0s 0s 100300910e-09 1s 1s 100302470e-09 0s 0s 100303630e-09 0s 0s 100311150e-09 1s 1s 100312710e-09 0s 0s 100313910e-09 0s 0s 100321390e-09 1s 1s 100322950e-09 0s 0s 100324190e-09 0s 0s 100331630e-09 1s 1s 100333190e-09 0s 0s 100334470e-09 0s 0s 100341870e-09 1s 1s 100343430e-09 0s 0s 100344750e-09 0s 0s 100352110e-09 1s 1s 100353670e-09 0s 0s 100355030e-09 0s 0s 100362350e-09 1s 1s 100363910e-09 0s 0s 100365310e-09 0s 0s 100372590e-09 1s 1s 100374150e-09 0s 0s 100375590e-09 0s 0s 100382830e-09 1s 1s 100384390e-09 0s 0s 100385870e-09 0s 0s 100393070e-09 1s 1s 100394630e-09 0s 0s 100396150e-09 0s 0s 100403310e-09 1s 1s 100404870e-09 0s 0s 100406430e-09 0s 0s 100413550e-09 1s 1s 100415110e-09 0s 0s 100416710e-09 0s 0s 100423790e-09 1s 1s 100425350e-09 0s 0s 100426990e-09 0s 0s 100434030e-09 1s 1s 100435590e-09 0s 0s 100437270e-09 0s 0s 100444270e-09 1s 1s 100445830e-09 0s 0s 100447550e-09 0s 0s 100454510e-09 1s 1s 100456070e-09 0s 0s 100457830e-09 0s 0s 100464750e-09 1s 1s 100466310e-09 0s 0s 100468110e-09 0s 0s 100474990e-09 1s 1s 100476550e-09 0s 0s 100478390e-09 0s 0s 100485230e-09 1s 1s 100486790e-09 0s 0s 100488670e-09 0s 0s 100495470e-09 1s 1s 100497030e-09 0s 0s 100498950e-09 0s 0s 100505710e-09 1s 1s 100507270e-09 0s 0s 100509230e-09 0s 0s 100515950e-09 1s 1s 100517510e-09 0s 0s 100519510e-09 0s 0s 100526190e-09 1s 1s 100527750e-09 0s 0s 100529790e-09 0s 0s 100536430e-09 1s 1s 100537990e-09 0s 0s 100540070e-09 0s 0s 100546670e-09 1s 1s 100548230e-09 0s 0s 100550350e-09 0s 0s 100556910e-09 1s 1s 100558470e-09 0s 0s 100560630e-09 0s 0s 100567150e-09 1s 1s 100568710e-09 0s 0s 100570910e-09 0s 0s 100577390e-09 1s 1s 100578950e-09 0s 0s 100581190e-09 0s 0s 100587630e-09 1s 1s 100589190e-09 0s 0s 100591470e-09 0s 0s 100597870e-09 1s 1s 100599430e-09 0s 0s 100601750e-09 0s 0s 100608110e-09 1s 1s 100609670e-09 0s 0s 100612030e-09 0s 0s 100618350e-09 1s 1s 100619910e-09 0s 0s 100622310e-09 0s 0s 100628590e-09 1s 1s 100630150e-09 0s 0s 100632590e-09 0s 0s 100638830e-09 1s 1s 100640390e-09 0s 0s 100642870e-09 0s 0s 100649070e-09 1s 1s 100650630e-09 0s 0s 100653150e-09 0s 0s 100659310e-09 1s 1s 100660870e-09 0s 0s 100663430e-09 0s 0s 100669550e-09 1s 1s 100671110e-09 0s 0s 100673710e-09 0s 0s 100679790e-09 1s 1s 100681350e-09 0s 0s 100683990e-09 0s 0s 100690030e-09 1s 1s 100691590e-09 0s 0s 100694270e-09 0s 0s 100700270e-09 1s 1s 100701830e-09 0s 0s 100704550e-09 0s 0s 100710510e-09 1s 1s 100712070e-09 0s 0s 100714830e-09 0s 0s 100720750e-09 1s 1s 100722310e-09 0s 0s 100725110e-09 0s 0s 100730990e-09 1s 1s 100732550e-09 0s 0s 100735390e-09 0s 0s 100741230e-09 1s 1s 100742790e-09 0s 0s 100745670e-09 0s 0s 100751470e-09 1s 1s 100753030e-09 0s 0s 100755950e-09 0s 0s 100761710e-09 1s 1s 100763270e-09 0s 0s 100766230e-09 0s 0s 100771950e-09 1s 1s 100773510e-09 0s 0s 100776510e-09 0s 0s 100782190e-09 1s 1s 100783750e-09 0s 0s 100786790e-09 0s 0s 100792430e-09 1s 1s 100793990e-09 0s 0s 100797070e-09 0s 0s 100802670e-09 1s 1s 100804230e-09 0s 0s 100807350e-09 0s 0s 100812910e-09 1s 1s 100814470e-09 0s 0s 100817630e-09 0s 0s 100823150e-09 1s 1s 100824710e-09 0s 0s 100827910e-09 0s 0s 100833390e-09 1s 1s 100834950e-09 0s 0s 100838190e-09 0s 0s 100843630e-09 1s 1s 100845190e-09 0s 0s 100848470e-09 0s 0s 100853870e-09 1s 1s 100855430e-09 0s 0s 100858750e-09 0s 0s 100864110e-09 1s 1s 100865670e-09 0s 0s 100869030e-09 0s 0s 100874350e-09 1s 1s 100875910e-09 0s 0s 100879310e-09 0s 0s 100884590e-09 1s 1s 100886150e-09 0s 0s 100889590e-09 0s 0s 100894830e-09 1s 1s 100896390e-09 0s 0s 100899870e-09 0s 0s 100905070e-09 1s 1s 100906630e-09 0s 0s 100910150e-09 0s 0s 100915310e-09 1s 1s 100916870e-09 0s 0s 100920430e-09 0s 0s 100925550e-09 1s 1s 100927110e-09 0s 0s 100930710e-09 0s 0s 100935790e-09 1s 1s 100937350e-09 0s 0s 100940990e-09 0s 0s 100946030e-09 1s 1s 100947590e-09 0s 0s 100951270e-09 0s 0s 100956270e-09 1s 1s 100957830e-09 0s 0s 100961550e-09 0s 0s 100966510e-09 1s 1s 100968070e-09 0s 0s 100971830e-09 0s 0s 100976750e-09 1s 1s 100978310e-09 0s 0s 100982110e-09 0s 0s 100986990e-09 1s 1s 100988550e-09 0s 0s 100992390e-09 0s 0s 100997230e-09 1s 1s 100998790e-09 0s 0s 101002670e-09 0s 0s 101007470e-09 1s 1s 101009030e-09 0s 0s 101012950e-09 0s 0s 101017710e-09 1s 1s 101019270e-09 0s 0s 101023230e-09 0s 0s 101027950e-09 1s 1s 101029510e-09 0s 0s 101033510e-09 0s 0s 101038190e-09 1s 1s 101039750e-09 0s 0s 101043790e-09 0s 0s 101048430e-09 1s 1s 101049990e-09 0s 0s 101054070e-09 0s 0s 101058670e-09 1s 1s 101060230e-09 0s 0s 101064350e-09 0s 0s 101068910e-09 1s 1s 101070470e-09 0s 0s 101074630e-09 0s 0s 101079150e-09 1s 1s 101080710e-09 0s 0s 101084910e-09 0s 0s 101089390e-09 1s 1s 101090950e-09 0s 0s 101095190e-09 0s 0s 101099630e-09 1s 1s 101101190e-09 0s 0s 101105470e-09 0s 0s 101109870e-09 1s 1s 101111430e-09 0s 0s 101115750e-09 0s 0s 101120110e-09 1s 1s 101121670e-09 0s 0s 101126030e-09 0s 0s 101130350e-09 1s 1s 101131910e-09 0s 0s 101136310e-09 0s 0s 101140590e-09 1s 1s 101142150e-09 0s 0s 101146590e-09 0s 0s 101150830e-09 1s 1s 101152390e-09 0s 0s 101156870e-09 0s 0s 101161070e-09 1s 1s 101162630e-09 0s 0s 101167150e-09 0s 0s 101171310e-09 1s 1s 101172870e-09 0s 0s 101177430e-09 0s 0s 101181550e-09 1s 1s 101183110e-09 0s 0s 101187710e-09 0s 0s 101191790e-09 1s 1s 101193350e-09 0s 0s 101197990e-09 0s 0s 101202030e-09 1s 1s 101203590e-09 0s 0s 101208270e-09 0s 0s 101212270e-09 1s 1s 101213830e-09 0s 0s 101218550e-09 0s 0s 101222510e-09 1s 1s 101224070e-09 0s 0s 101228830e-09 0s 0s 101232750e-09 1s 1s 101234310e-09 0s 0s 101239110e-09 0s 0s 101242990e-09 1s 1s 101244550e-09 0s 0s 101249390e-09 0s 0s 101253230e-09 1s 1s 101254790e-09 0s 0s 101259670e-09 0s 0s 101263470e-09 1s 1s 101265030e-09 0s 0s 101269950e-09 0s 0s 101273710e-09 1s 1s 101275270e-09 0s 0s 101280230e-09 0s 0s 101283950e-09 1s 1s 101285510e-09 0s 0s 101290510e-09 0s 0s 101294190e-09 1s 1s 101295750e-09 0s 0s 101300790e-09 0s 0s 101304430e-09 1s 1s 101305990e-09 0s 0s 101311070e-09 0s 0s 101314670e-09 1s 1s 101316230e-09 0s 0s 101321350e-09 0s 0s 101324910e-09 1s 1s 101326470e-09 0s 0s 101331630e-09 0s 0s 101335150e-09 1s 1s 101336710e-09 0s 0s 101341910e-09 0s 0s 101345390e-09 1s 1s 101346950e-09 0s 0s 101352190e-09 0s 0s 101355630e-09 1s 1s 101357190e-09 0s 0s 101362470e-09 0s 0s 101365870e-09 1s 1s 101367430e-09 0s 0s 101372750e-09 0s 0s 101376110e-09 1s 1s 101377670e-09 0s 0s 101383030e-09 0s 0s 101386350e-09 1s 1s 101387910e-09 0s 0s 101393310e-09 0s 0s 101396590e-09 1s 1s 101398150e-09 0s 0s 101403590e-09 0s 0s 101406830e-09 1s 1s 101408390e-09 0s 0s 101413870e-09 0s 0s 101417070e-09 1s 1s 101418630e-09 0s 0s 101424150e-09 0s 0s 101427310e-09 1s 1s 101428870e-09 0s 0s 101434430e-09 0s 0s 101437550e-09 1s 1s 101439110e-09 0s 0s 101444710e-09 0s 0s 101447790e-09 1s 1s 101449350e-09 0s 0s 101454990e-09 0s 0s 101458030e-09 1s 1s 101459590e-09 0s 0s 101465270e-09 0s 0s 101468270e-09 1s 1s 101469830e-09 0s 0s 101475550e-09 0s 0s 101478510e-09 1s 1s 101480070e-09 0s 0s 101485830e-09 0s 0s 101488750e-09 1s 1s 101490310e-09 0s 0s 101496110e-09 0s 0s 101498990e-09 1s 1s 101500550e-09 0s 0s 101506390e-09 0s 0s 101509230e-09 1s 1s 101510790e-09 0s 0s 101516670e-09 0s 0s 101519470e-09 1s 1s 101521030e-09 0s 0s 101526950e-09 0s 0s 101529710e-09 1s 1s 101531270e-09 0s 0s 101537230e-09 0s 0s 101539950e-09 1s 1s 101541510e-09 0s 0s 101547510e-09 0s 0s 101550190e-09 1s 1s 101551750e-09 0s 0s 101557790e-09 0s 0s 101560430e-09 1s 1s 101561990e-09 0s 0s 101568070e-09 0s 0s 101570670e-09 1s 1s 101572230e-09 0s 0s 101578350e-09 0s 0s 101580910e-09 1s 1s 101582470e-09 0s 0s 101588630e-09 0s 0s 101591150e-09 1s 1s 101592710e-09 0s 0s 101598910e-09 0s 0s 101601390e-09 1s 1s 101602950e-09 0s 0s 101609190e-09 0s 0s 101611630e-09 1s 1s 101613190e-09 0s 0s 101619470e-09 0s 0s 101621870e-09 1s 1s 101623430e-09 0s 0s 101629750e-09 0s 0s 101632110e-09 1s 1s 101633670e-09 0s 0s 101640030e-09 0s 0s 101642350e-09 1s 1s 101643910e-09 0s 0s 101650310e-09 0s 0s 101652590e-09 1s 1s 101654150e-09 0s 0s 101660590e-09 0s 0s 101662830e-09 1s 1s 101664390e-09 0s 0s 101670870e-09 0s 0s 101673070e-09 1s 1s 101674630e-09 0s 0s 101681150e-09 0s 0s 101683310e-09 1s 1s 101684870e-09 0s 0s 101691430e-09 0s 0s 101693550e-09 1s 1s 101695110e-09 0s 0s 101701710e-09 0s 0s 101703790e-09 1s 1s 101705350e-09 0s 0s 101711990e-09 0s 0s 101714030e-09 1s 1s 101715590e-09 0s 0s 101722270e-09 0s 0s 101724270e-09 1s 1s 101725830e-09 0s 0s 101732550e-09 0s 0s 101734510e-09 1s 1s 101736070e-09 0s 0s 101742830e-09 0s 0s 101744750e-09 1s 1s 101746310e-09 0s 0s 101753110e-09 0s 0s 101754990e-09 1s 1s 101756550e-09 0s 0s 101763390e-09 0s 0s 101765230e-09 1s 1s 101766790e-09 0s 0s 101773670e-09 0s 0s 101775470e-09 1s 1s 101777030e-09 0s 0s 101783950e-09 0s 0s 101785710e-09 1s 1s 101787270e-09 0s 0s 101794230e-09 0s 0s 101795950e-09 1s 1s 101797510e-09 0s 0s 101804510e-09 0s 0s 101806190e-09 1s 1s 101807750e-09 0s 0s 101814790e-09 0s 0s 101816430e-09 1s 1s 101817990e-09 0s 0s 101825070e-09 0s 0s 101826670e-09 1s 1s 101828230e-09 0s 0s 101835350e-09 0s 0s 101836910e-09 1s 1s 101838470e-09 0s 0s 101845630e-09 0s 0s 101847150e-09 1s 1s 101848710e-09 0s 0s 101855910e-09 0s 0s 101857390e-09 1s 1s 101858950e-09 0s 0s 101866190e-09 0s 0s 101867630e-09 1s 1s 101869190e-09 0s 0s 101876470e-09 0s 0s 101877870e-09 1s 1s 101879430e-09 0s 0s 101886750e-09 0s 0s 101888110e-09 1s 1s 101889670e-09 0s 0s 101897030e-09 0s 0s 101898350e-09 1s 1s 101899910e-09 0s 0s 101907310e-09 0s 0s 101908590e-09 1s 1s 101910150e-09 0s 0s 101917590e-09 0s 0s 101918830e-09 1s 1s 101920390e-09 0s 0s 101927870e-09 0s 0s 101929070e-09 1s 1s 101930630e-09 0s 0s 101938150e-09 0s 0s 101939310e-09 1s 1s 101940870e-09 0s 0s 101948430e-09 0s 0s 101949550e-09 1s 1s 101951110e-09 0s 0s 101958710e-09 0s 0s 101959790e-09 1s 1s 101961350e-09 0s 0s 101968990e-09 0s 0s 101970030e-09 1s 1s 101971590e-09 0s 0s 101979270e-09 0s 0s 101980270e-09 1s 1s 101981830e-09 0s 0s 101989550e-09 0s 0s 101990510e-09 1s 1s 101992070e-09 0s 0s 101999830e-09 0s 0s 102000750e-09 1s 1s 102002310e-09 0s 0s 102010110e-09 0s 0s 102010990e-09 1s 1s 102012550e-09 0s 0s 102020390e-09 0s 0s 102021230e-09 1s 1s 102022790e-09 0s 0s 102030670e-09 0s 0s 102031470e-09 1s 1s 102033030e-09 0s 0s 102040950e-09 0s 0s 102041710e-09 1s 1s 102043270e-09 0s 0s 102051230e-09 0s 0s 102051950e-09 1s 1s 102053510e-09 0s 0s 102061510e-09 0s 0s 102062190e-09 1s 1s 102063750e-09 0s 0s 102071790e-09 0s 0s 102072430e-09 1s 1s 102073990e-09 0s 0s 102082070e-09 0s 0s 102082670e-09 1s 1s 102084230e-09 0s 0s 102092350e-09 0s 0s 102092910e-09 1s 1s 102094470e-09 0s 0s 102102630e-09 0s 0s 102103150e-09 1s 1s 102104710e-09 0s 0s 102112910e-09 0s 0s 102113390e-09 1s 1s 102114950e-09 0s 0s 102123190e-09 0s 0s 102123630e-09 1s 1s 102125190e-09 0s 0s 102133470e-09 0s 0s 102133870e-09 1s 1s 102135430e-09 0s 0s 102143750e-09 0s 0s 102144110e-09 1s 1s 102145670e-09 0s 0s 102154030e-09 0s 0s 102154350e-09 1s 1s 102155910e-09 0s 0s 102164310e-09 0s 0s 102164590e-09 1s 1s 102166150e-09 0s 0s 102174590e-09 0s 0s 102174830e-09 1s 1s 102176390e-09 0s 0s 102184870e-09 0s 0s 102185070e-09 1s 1s 102186630e-09 0s 0s 102195150e-09 0s 0s 102195310e-09 1s 1s 102196870e-09 0s 0s 102205430e-09 0s 0s 102205550e-09 1s 1s 102207110e-09 0s 0s 102215710e-09 0s 0s 102215790e-09 1s 1s 102217350e-09 0s 0s 102225990e-09 0s 0s 102226030e-09 1s 1s 102227590e-09 0s 0s 102236270e-09 1s 1s 102236310e-09 1s 1s 102237870e-09 0s 0s 102246510e-09 1s 1s 102246590e-09 1s 1s 102248110e-09 0s 0s 102256750e-09 1s 1s 102256870e-09 1s 1s 102258350e-09 0s 0s 102266990e-09 1s 1s 102267150e-09 1s 1s 102268590e-09 0s 0s 102277230e-09 1s 1s 102277430e-09 1s 1s 102278830e-09 0s 0s 102287470e-09 1s 1s 102287710e-09 1s 1s 102289070e-09 0s 0s 102297710e-09 1s 1s 102297990e-09 1s 1s 102299310e-09 0s 0s 102307950e-09 1s 1s 102308270e-09 1s 1s 102309550e-09 0s 0s 102318190e-09 1s 1s 102318550e-09 1s 1s 102319790e-09 0s 0s 102328430e-09 1s 1s 102328830e-09 1s 1s 102330030e-09 0s 0s 102338670e-09 1s 1s 102339110e-09 1s 1s 102340270e-09 0s 0s 102348910e-09 1s 1s 102349390e-09 1s 1s 102350510e-09 0s 0s 102359150e-09 1s 1s 102359670e-09 1s 1s 102360750e-09 0s 0s 102369390e-09 1s 1s 102369950e-09 1s 1s 102370990e-09 0s 0s 102379630e-09 1s 1s 102380230e-09 1s 1s 102381230e-09 0s 0s 102389870e-09 1s 1s 102390510e-09 1s 1s 102391470e-09 0s 0s 102400110e-09 1s 1s 102400790e-09 1s 1s 102401710e-09 0s 0s 102410350e-09 1s 1s 102411070e-09 1s 1s 102411950e-09 0s 0s 102420590e-09 1s 1s 102421350e-09 1s 1s 102422190e-09 0s 0s 102430830e-09 1s 1s 102431630e-09 1s 1s 102432430e-09 0s 0s 102441070e-09 1s 1s 102441910e-09 1s 1s 102442670e-09 0s 0s 102451310e-09 1s 1s 102452190e-09 1s 1s 102452910e-09 0s 0s 102461550e-09 1s 1s 102462470e-09 1s 1s 102463150e-09 0s 0s 102471790e-09 1s 1s 102472750e-09 1s 1s 102473390e-09 0s 0s 102482030e-09 1s 1s 102483030e-09 1s 1s 102483630e-09 0s 0s 102492270e-09 1s 1s 102493310e-09 1s 1s 102493870e-09 0s 0s 102502510e-09 1s 1s 102503590e-09 1s 1s 102504110e-09 0s 0s 102512750e-09 1s 1s 102513870e-09 1s 1s 102514350e-09 0s 0s 102522990e-09 1s 1s 102524150e-09 1s 1s 102524590e-09 0s 0s 102533230e-09 1s 1s 102534430e-09 1s 1s 102534830e-09 0s 0s 102543470e-09 1s 1s 102544710e-09 1s 1s 102545070e-09 0s 0s 102553710e-09 1s 1s 102554990e-09 1s 1s 102555310e-09 0s 0s 102563950e-09 1s 1s 102565270e-09 1s 1s 102565550e-09 0s 0s 102574190e-09 1s 1s 102575550e-09 1s 1s 102575790e-09 0s 0s 102584430e-09 1s 1s 102585830e-09 1s 1s 102586030e-09 0s 0s 102594670e-09 1s 1s 102596110e-09 1s 1s 102596270e-09 0s 0s 102604910e-09 1s 1s 102606390e-09 1s 1s 102606510e-09 0s 0s 102615150e-09 1s 1s 102616670e-09 1s 1s 102616750e-09 0s 0s 102625390e-09 1s 1s 102626950e-09 1s 1s 102626990e-09 0s 0s 102635630e-09 1s 1s 102637230e-09 0s 0s 102645870e-09 1s 1s 102647470e-09 0s 0s 102647510e-09 0s 0s 102656110e-09 1s 1s 102657710e-09 0s 0s 102657790e-09 0s 0s 102666350e-09 1s 1s 102667950e-09 0s 0s 102668070e-09 0s 0s 102676590e-09 1s 1s 102678190e-09 0s 0s 102678350e-09 0s 0s 102686830e-09 1s 1s 102688430e-09 0s 0s 102688630e-09 0s 0s 102697070e-09 1s 1s 102698670e-09 0s 0s 102698910e-09 0s 0s 102707310e-09 1s 1s 102708910e-09 0s 0s 102709190e-09 0s 0s 102717550e-09 1s 1s 102719150e-09 0s 0s 102719470e-09 0s 0s 102727790e-09 1s 1s 102729390e-09 0s 0s 102729750e-09 0s 0s 102738030e-09 1s 1s 102739630e-09 0s 0s 102740030e-09 0s 0s 102748270e-09 1s 1s 102749870e-09 0s 0s 102750310e-09 0s 0s 102758510e-09 1s 1s 102760110e-09 0s 0s 102760590e-09 0s 0s 102768750e-09 1s 1s 102770350e-09 0s 0s 102770870e-09 0s 0s 102778990e-09 1s 1s 102780590e-09 0s 0s 102781150e-09 0s 0s 102789230e-09 1s 1s 102790830e-09 0s 0s 102791430e-09 0s 0s 102799470e-09 1s 1s 102801070e-09 0s 0s 102801710e-09 0s 0s 102809710e-09 1s 1s 102811310e-09 0s 0s 102811990e-09 0s 0s 102819950e-09 1s 1s 102821550e-09 0s 0s 102822270e-09 0s 0s 102830190e-09 1s 1s 102831790e-09 0s 0s 102832550e-09 0s 0s 102840430e-09 1s 1s 102842030e-09 0s 0s 102842830e-09 0s 0s 102850670e-09 1s 1s 102852270e-09 0s 0s 102853110e-09 0s 0s 102860910e-09 1s 1s 102862510e-09 0s 0s 102863390e-09 0s 0s 102871150e-09 1s 1s 102872750e-09 0s 0s 102873670e-09 0s 0s 102881390e-09 1s 1s 102882990e-09 0s 0s 102883950e-09 0s 0s 102891630e-09 1s 1s 102893230e-09 0s 0s 102894230e-09 0s 0s 102901870e-09 1s 1s 102903470e-09 0s 0s 102904510e-09 0s 0s 102912110e-09 1s 1s 102913710e-09 0s 0s 102914790e-09 0s 0s 102922350e-09 1s 1s 102923950e-09 0s 0s 102925070e-09 0s 0s 102932590e-09 1s 1s 102934190e-09 0s 0s 102935350e-09 0s 0s 102942830e-09 1s 1s 102944430e-09 0s 0s 102945630e-09 0s 0s 102953070e-09 1s 1s 102954670e-09 0s 0s 102955910e-09 0s 0s 102963310e-09 1s 1s 102964910e-09 0s 0s 102966190e-09 0s 0s 102973550e-09 1s 1s 102975150e-09 0s 0s 102976470e-09 0s 0s 102983790e-09 1s 1s 102985390e-09 0s 0s 102986750e-09 0s 0s 102994030e-09 1s 1s 102995630e-09 0s 0s 102997030e-09 0s 0s 103004270e-09 1s 1s 103005870e-09 0s 0s 103007310e-09 0s 0s 103014510e-09 1s 1s 103016110e-09 0s 0s 103017590e-09 0s 0s 103024750e-09 1s 1s 103026350e-09 0s 0s 103027870e-09 0s 0s 103034990e-09 1s 1s 103036590e-09 0s 0s 103038150e-09 0s 0s 103045230e-09 1s 1s 103046830e-09 0s 0s 103048430e-09 0s 0s 103055470e-09 1s 1s 103057070e-09 0s 0s 103058710e-09 0s 0s 103065710e-09 1s 1s 103067310e-09 0s 0s 103068990e-09 0s 0s 103075950e-09 1s 1s 103077550e-09 0s 0s 103079270e-09 0s 0s 103086190e-09 1s 1s 103087790e-09 0s 0s 103089550e-09 0s 0s 103096430e-09 1s 1s 103098030e-09 0s 0s 103099830e-09 0s 0s 103106670e-09 1s 1s 103108270e-09 0s 0s 103110110e-09 0s 0s 103116910e-09 1s 1s 103118510e-09 0s 0s 103120390e-09 0s 0s 103127150e-09 1s 1s 103128750e-09 0s 0s 103130670e-09 0s 0s 103137390e-09 1s 1s 103138990e-09 0s 0s 103140950e-09 0s 0s 103147630e-09 1s 1s 103149230e-09 0s 0s 103151230e-09 0s 0s 103157870e-09 1s 1s 103159470e-09 0s 0s 103161510e-09 0s 0s 103168110e-09 1s 1s 103169710e-09 0s 0s 103171790e-09 0s 0s 103178350e-09 1s 1s 103179950e-09 0s 0s 103182070e-09 0s 0s 103188590e-09 1s 1s 103190190e-09 0s 0s 103192350e-09 0s 0s 103198830e-09 1s 1s 103200430e-09 0s 0s 103202630e-09 0s 0s 103209070e-09 1s 1s 103210670e-09 0s 0s 103212910e-09 0s 0s 103219310e-09 1s 1s 103220910e-09 0s 0s 103223190e-09 0s 0s 103229550e-09 1s 1s 103231150e-09 0s 0s 103233470e-09 0s 0s 103239790e-09 1s 1s 103241390e-09 0s 0s 103243750e-09 0s 0s 103250030e-09 1s 1s 103251630e-09 0s 0s 103254030e-09 0s 0s 103260270e-09 1s 1s 103261870e-09 0s 0s 103264310e-09 0s 0s 103270510e-09 1s 1s 103272110e-09 0s 0s 103274590e-09 0s 0s 103280750e-09 1s 1s 103282350e-09 0s 0s 103284870e-09 0s 0s 103290990e-09 1s 1s 103292590e-09 0s 0s 103295150e-09 0s 0s 103301230e-09 1s 1s 103302830e-09 0s 0s 103305430e-09 0s 0s 103311470e-09 1s 1s 103313070e-09 0s 0s 103315710e-09 0s 0s 103321710e-09 1s 1s 103323310e-09 0s 0s 103325990e-09 0s 0s 103331950e-09 1s 1s 103333550e-09 0s 0s 103336270e-09 0s 0s 103342190e-09 1s 1s 103343790e-09 0s 0s 103346550e-09 0s 0s 103352430e-09 1s 1s 103354030e-09 0s 0s 103356830e-09 0s 0s 103362670e-09 1s 1s 103364270e-09 0s 0s 103367110e-09 0s 0s 103372910e-09 1s 1s 103374510e-09 0s 0s 103377390e-09 0s 0s 103383150e-09 1s 1s 103384750e-09 0s 0s 103387670e-09 0s 0s 103393390e-09 1s 1s 103394990e-09 0s 0s 103397950e-09 0s 0s 103403630e-09 1s 1s 103405230e-09 0s 0s 103408230e-09 0s 0s 103413870e-09 1s 1s 103415470e-09 0s 0s 103418510e-09 0s 0s 103424110e-09 1s 1s 103425710e-09 0s 0s 103428790e-09 0s 0s 103434350e-09 1s 1s 103435950e-09 0s 0s 103439070e-09 0s 0s 103444590e-09 1s 1s 103446190e-09 0s 0s 103449350e-09 0s 0s 103454830e-09 1s 1s 103456430e-09 0s 0s 103459630e-09 0s 0s 103465070e-09 1s 1s 103466670e-09 0s 0s 103469910e-09 0s 0s 103475310e-09 1s 1s 103476910e-09 0s 0s 103480190e-09 0s 0s 103485550e-09 1s 1s 103487150e-09 0s 0s 103490470e-09 0s 0s 103495790e-09 1s 1s 103497390e-09 0s 0s 103500750e-09 0s 0s 103506030e-09 1s 1s 103507630e-09 0s 0s 103511030e-09 0s 0s 103516270e-09 1s 1s 103517870e-09 0s 0s 103521310e-09 0s 0s 103526510e-09 1s 1s 103528110e-09 0s 0s 103531590e-09 0s 0s 103536750e-09 1s 1s 103538350e-09 0s 0s 103541870e-09 0s 0s 103546990e-09 1s 1s 103548590e-09 0s 0s 103552150e-09 0s 0s 103557230e-09 1s 1s 103558830e-09 0s 0s 103562430e-09 0s 0s 103567470e-09 1s 1s 103569070e-09 0s 0s 103572710e-09 0s 0s 103577710e-09 1s 1s 103579310e-09 0s 0s 103582990e-09 0s 0s 103587950e-09 1s 1s 103589550e-09 0s 0s 103593270e-09 0s 0s 103598190e-09 1s 1s 103599790e-09 0s 0s 103603550e-09 0s 0s 103608430e-09 1s 1s 103610030e-09 0s 0s 103613830e-09 0s 0s 103618670e-09 1s 1s 103620270e-09 0s 0s 103624110e-09 0s 0s 103628910e-09 1s 1s 103630510e-09 0s 0s 103634390e-09 0s 0s 103639150e-09 1s 1s 103640750e-09 0s 0s 103644670e-09 0s 0s 103649390e-09 1s 1s 103650990e-09 0s 0s 103654950e-09 0s 0s 103659630e-09 1s 1s 103661230e-09 0s 0s 103665230e-09 0s 0s 103669870e-09 1s 1s 103671470e-09 0s 0s 103675510e-09 0s 0s 103680110e-09 1s 1s 103681710e-09 0s 0s 103685790e-09 0s 0s 103690350e-09 1s 1s 103691950e-09 0s 0s 103696070e-09 0s 0s 103700590e-09 1s 1s 103702190e-09 0s 0s 103706350e-09 0s 0s 103710830e-09 1s 1s 103712430e-09 0s 0s 103716630e-09 0s 0s 103721070e-09 1s 1s 103722670e-09 0s 0s 103726910e-09 0s 0s 103731310e-09 1s 1s 103732910e-09 0s 0s 103737190e-09 0s 0s 103741550e-09 1s 1s 103743150e-09 0s 0s 103747470e-09 0s 0s 103751790e-09 1s 1s 103753390e-09 0s 0s 103757750e-09 0s 0s 103762030e-09 1s 1s 103763630e-09 0s 0s 103768030e-09 0s 0s 103772270e-09 1s 1s 103773870e-09 0s 0s 103778310e-09 0s 0s 103782510e-09 1s 1s 103784110e-09 0s 0s 103788590e-09 0s 0s 103792750e-09 1s 1s 103794350e-09 0s 0s 103798870e-09 0s 0s 103802990e-09 1s 1s 103804590e-09 0s 0s 103809150e-09 0s 0s 103813230e-09 1s 1s 103814830e-09 0s 0s 103819430e-09 0s 0s 103823470e-09 1s 1s 103825070e-09 0s 0s 103829710e-09 0s 0s 103833710e-09 1s 1s 103835310e-09 0s 0s 103839990e-09 0s 0s 103843950e-09 1s 1s 103845550e-09 0s 0s 103850270e-09 0s 0s 103854190e-09 1s 1s 103855790e-09 0s 0s 103860550e-09 0s 0s 103864430e-09 1s 1s 103866030e-09 0s 0s 103870830e-09 0s 0s 103874670e-09 1s 1s 103876270e-09 0s 0s 103881110e-09 0s 0s 103884910e-09 1s 1s 103886510e-09 0s 0s 103891390e-09 0s 0s 103895150e-09 1s 1s 103896750e-09 0s 0s 103901670e-09 0s 0s 103905390e-09 1s 1s 103906990e-09 0s 0s 103911950e-09 0s 0s 103915630e-09 1s 1s 103917230e-09 0s 0s 103922230e-09 0s 0s 103925870e-09 1s 1s 103927470e-09 0s 0s 103932510e-09 0s 0s 103936110e-09 1s 1s 103937710e-09 0s 0s 103942790e-09 0s 0s 103946350e-09 1s 1s 103947950e-09 0s 0s 103953070e-09 0s 0s 103956590e-09 1s 1s 103958190e-09 0s 0s 103963350e-09 0s 0s 103966830e-09 1s 1s 103968430e-09 0s 0s 103973630e-09 0s 0s 103977070e-09 1s 1s 103978670e-09 0s 0s 103983910e-09 0s 0s 103987310e-09 1s 1s 103988910e-09 0s 0s 103994190e-09 0s 0s 103997550e-09 1s 1s 103999150e-09 0s 0s 104004470e-09 0s 0s 104007790e-09 1s 1s 104009390e-09 0s 0s 104014750e-09 0s 0s 104018030e-09 1s 1s 104019630e-09 0s 0s 104025030e-09 0s 0s 104028270e-09 1s 1s 104029870e-09 0s 0s 104035310e-09 0s 0s 104038510e-09 1s 1s 104040110e-09 0s 0s 104045590e-09 0s 0s 104048750e-09 1s 1s 104050350e-09 0s 0s 104055870e-09 0s 0s 104058990e-09 1s 1s 104060590e-09 0s 0s 104066150e-09 0s 0s 104069230e-09 1s 1s 104070830e-09 0s 0s 104076430e-09 0s 0s 104079470e-09 1s 1s 104081070e-09 0s 0s 104086710e-09 0s 0s 104089710e-09 1s 1s 104091310e-09 0s 0s 104096990e-09 0s 0s 104099950e-09 1s 1s 104101550e-09 0s 0s 104107270e-09 0s 0s 104110190e-09 1s 1s 104111790e-09 0s 0s 104117550e-09 0s 0s 104120430e-09 1s 1s 104122030e-09 0s 0s 104127830e-09 0s 0s 104130670e-09 1s 1s 104132270e-09 0s 0s 104138110e-09 0s 0s 104140910e-09 1s 1s 104142510e-09 0s 0s 104148390e-09 0s 0s 104151150e-09 1s 1s 104152750e-09 0s 0s 104158670e-09 0s 0s 104161390e-09 1s 1s 104162990e-09 0s 0s 104168950e-09 0s 0s 104171630e-09 1s 1s 104173230e-09 0s 0s 104179230e-09 0s 0s 104181870e-09 1s 1s 104183470e-09 0s 0s 104189510e-09 0s 0s 104192110e-09 1s 1s 104193710e-09 0s 0s 104199790e-09 0s 0s 104202350e-09 1s 1s 104203950e-09 0s 0s 104210070e-09 0s 0s 104212590e-09 1s 1s 104214190e-09 0s 0s 104220350e-09 0s 0s 104222830e-09 1s 1s 104224430e-09 0s 0s 104230630e-09 0s 0s 104233070e-09 1s 1s 104234670e-09 0s 0s 104240910e-09 0s 0s 104243310e-09 1s 1s 104244910e-09 0s 0s 104251190e-09 0s 0s 104253550e-09 1s 1s 104255150e-09 0s 0s 104261470e-09 0s 0s 104263790e-09 1s 1s 104265390e-09 0s 0s 104271750e-09 0s 0s 104274030e-09 1s 1s 104275630e-09 0s 0s 104282030e-09 0s 0s 104284270e-09 1s 1s 104285870e-09 0s 0s 104292310e-09 0s 0s 104294510e-09 1s 1s 104296110e-09 0s 0s 104302590e-09 0s 0s 104304750e-09 1s 1s 104306350e-09 0s 0s 104312870e-09 0s 0s 104314990e-09 1s 1s 104316590e-09 0s 0s 104323150e-09 0s 0s 104325230e-09 1s 1s 104326830e-09 0s 0s 104333430e-09 0s 0s 104335470e-09 1s 1s 104337070e-09 0s 0s 104343710e-09 0s 0s 104345710e-09 1s 1s 104347310e-09 0s 0s 104353990e-09 0s 0s 104355950e-09 1s 1s 104357550e-09 0s 0s 104364270e-09 0s 0s 104366190e-09 1s 1s 104367790e-09 0s 0s 104374550e-09 0s 0s 104376430e-09 1s 1s 104378030e-09 0s 0s 104384830e-09 0s 0s 104386670e-09 1s 1s 104388270e-09 0s 0s 104395110e-09 0s 0s 104396910e-09 1s 1s 104398510e-09 0s 0s 104405390e-09 0s 0s 104407150e-09 1s 1s 104408750e-09 0s 0s 104415670e-09 0s 0s 104417390e-09 1s 1s 104418990e-09 0s 0s 104425950e-09 0s 0s 104427630e-09 1s 1s 104429230e-09 0s 0s 104436230e-09 0s 0s 104437870e-09 1s 1s 104439470e-09 0s 0s 104446510e-09 0s 0s 104448110e-09 1s 1s 104449710e-09 0s 0s 104456790e-09 0s 0s 104458350e-09 1s 1s 104459950e-09 0s 0s 104467070e-09 0s 0s 104468590e-09 1s 1s 104470190e-09 0s 0s 104477350e-09 0s 0s 104478830e-09 1s 1s 104480430e-09 0s 0s 104487630e-09 0s 0s 104489070e-09 1s 1s 104490670e-09 0s 0s 104497910e-09 0s 0s 104499310e-09 1s 1s 104500910e-09 0s 0s 104508190e-09 0s 0s 104509550e-09 1s 1s 104511150e-09 0s 0s 104518470e-09 0s 0s 104519790e-09 1s 1s 104521390e-09 0s 0s 104528750e-09 0s 0s 104530030e-09 1s 1s 104531630e-09 0s 0s 104539030e-09 0s 0s 104540270e-09 1s 1s 104541870e-09 0s 0s 104549310e-09 0s 0s 104550510e-09 1s 1s 104552110e-09 0s 0s 104559590e-09 0s 0s 104560750e-09 1s 1s 104562350e-09 0s 0s 104569870e-09 0s 0s 104570990e-09 1s 1s 104572590e-09 0s 0s 104580150e-09 0s 0s 104581230e-09 1s 1s 104582830e-09 0s 0s 104590430e-09 0s 0s 104591470e-09 1s 1s 104593070e-09 0s 0s 104600710e-09 0s 0s 104601710e-09 1s 1s 104603310e-09 0s 0s 104610990e-09 0s 0s 104611950e-09 1s 1s 104613550e-09 0s 0s 104621270e-09 0s 0s 104622190e-09 1s 1s 104623790e-09 0s 0s 104631550e-09 0s 0s 104632430e-09 1s 1s 104634030e-09 0s 0s 104641830e-09 0s 0s 104642670e-09 1s 1s 104644270e-09 0s 0s 104652110e-09 0s 0s 104652910e-09 1s 1s 104654510e-09 0s 0s 104662390e-09 0s 0s 104663150e-09 1s 1s 104664750e-09 0s 0s 104672670e-09 0s 0s 104673390e-09 1s 1s 104674990e-09 0s 0s 104682950e-09 0s 0s 104683630e-09 1s 1s 104685230e-09 0s 0s 104693230e-09 0s 0s 104693870e-09 1s 1s 104695470e-09 0s 0s 104703510e-09 0s 0s 104704110e-09 1s 1s 104705710e-09 0s 0s 104713790e-09 0s 0s 104714350e-09 1s 1s 104715950e-09 0s 0s 104724070e-09 0s 0s 104724590e-09 1s 1s 104726190e-09 0s 0s 104734350e-09 0s 0s 104734830e-09 1s 1s 104736430e-09 0s 0s 104744630e-09 0s 0s 104745070e-09 1s 1s 104746670e-09 0s 0s 104754910e-09 0s 0s 104755310e-09 1s 1s 104756910e-09 0s 0s 104765190e-09 0s 0s 104765550e-09 1s 1s 104767150e-09 0s 0s 104775470e-09 0s 0s 104775790e-09 1s 1s 104777390e-09 0s 0s 104785750e-09 0s 0s 104786030e-09 1s 1s 104787630e-09 0s 0s 104796030e-09 0s 0s 104796270e-09 1s 1s 104797870e-09 0s 0s 104806310e-09 0s 0s 104806510e-09 1s 1s 104808110e-09 0s 0s 104816590e-09 0s 0s 104816750e-09 1s 1s 104818350e-09 0s 0s 104826870e-09 0s 0s 104826990e-09 1s 1s 104828590e-09 0s 0s 104837150e-09 0s 0s 104837230e-09 1s 1s 104838830e-09 0s 0s 104847430e-09 0s 0s 104847470e-09 1s 1s 104849070e-09 0s 0s 104857710e-09 1s 1s 104857750e-09 1s 1s 104859350e-09 0s 0s 104867950e-09 1s 1s 104868030e-09 1s 1s 104869590e-09 0s 0s 104878190e-09 1s 1s 104878310e-09 1s 1s 104879830e-09 0s 0s 104888430e-09 1s 1s 104888590e-09 1s 1s 104890070e-09 0s 0s 104898670e-09 1s 1s 104898870e-09 1s 1s 104900310e-09 0s 0s 104908910e-09 1s 1s 104909150e-09 1s 1s 104910550e-09 0s 0s 104919150e-09 1s 1s 104919430e-09 1s 1s 104920790e-09 0s 0s 104929390e-09 1s 1s 104929710e-09 1s 1s 104931030e-09 0s 0s 104939630e-09 1s 1s 104939990e-09 1s 1s 104941270e-09 0s 0s 104949870e-09 1s 1s 104950270e-09 1s 1s 104951510e-09 0s 0s 104960110e-09 1s 1s 104960550e-09 1s 1s 104961750e-09 0s 0s 104970350e-09 1s 1s 104970830e-09 1s 1s 104971990e-09 0s 0s 104980590e-09 1s 1s 104981110e-09 1s 1s 104982230e-09 0s 0s 104990830e-09 1s 1s 104991390e-09 1s 1s 104992470e-09 0s 0s 105001070e-09 1s 1s 105001670e-09 1s 1s 105002710e-09 0s 0s 105011310e-09 1s 1s 105011950e-09 1s 1s 105012950e-09 0s 0s 105021550e-09 1s 1s 105022230e-09 1s 1s 105023190e-09 0s 0s 105031790e-09 1s 1s 105032510e-09 1s 1s 105033430e-09 0s 0s 105042030e-09 1s 1s 105042790e-09 1s 1s 105043670e-09 0s 0s 105052270e-09 1s 1s 105053070e-09 1s 1s 105053910e-09 0s 0s 105062510e-09 1s 1s 105063350e-09 1s 1s 105064150e-09 0s 0s 105072750e-09 1s 1s 105073630e-09 1s 1s 105074390e-09 0s 0s 105082990e-09 1s 1s 105083910e-09 1s 1s 105084630e-09 0s 0s 105093230e-09 1s 1s 105094190e-09 1s 1s 105094870e-09 0s 0s 105103470e-09 1s 1s 105104470e-09 1s 1s 105105110e-09 0s 0s 105113710e-09 1s 1s 105114750e-09 1s 1s 105115350e-09 0s 0s 105123950e-09 1s 1s 105125030e-09 1s 1s 105125590e-09 0s 0s 105134190e-09 1s 1s 105135310e-09 1s 1s 105135830e-09 0s 0s 105144430e-09 1s 1s 105145590e-09 1s 1s 105146070e-09 0s 0s 105154670e-09 1s 1s 105155870e-09 1s 1s 105156310e-09 0s 0s 105164910e-09 1s 1s 105166150e-09 1s 1s 105166550e-09 0s 0s 105175150e-09 1s 1s 105176430e-09 1s 1s 105176790e-09 0s 0s 105185390e-09 1s 1s 105186710e-09 1s 1s 105187030e-09 0s 0s 105195630e-09 1s 1s 105196990e-09 1s 1s 105197270e-09 0s 0s 105205870e-09 1s 1s 105207270e-09 1s 1s 105207510e-09 0s 0s 105216110e-09 1s 1s 105217550e-09 1s 1s 105217750e-09 0s 0s 105226350e-09 1s 1s 105227830e-09 1s 1s 105227990e-09 0s 0s 105236590e-09 1s 1s 105238110e-09 1s 1s 105238230e-09 0s 0s 105246830e-09 1s 1s 105248390e-09 1s 1s 105248470e-09 0s 0s 105257070e-09 1s 1s 105258670e-09 1s 1s 105258710e-09 0s 0s 105267310e-09 1s 1s 105268950e-09 0s 0s 105277550e-09 1s 1s 105279190e-09 0s 0s 105279230e-09 0s 0s 105287790e-09 1s 1s 105289430e-09 0s 0s 105289510e-09 0s 0s 105298030e-09 1s 1s 105299670e-09 0s 0s 105299790e-09 0s 0s 105308270e-09 1s 1s 105309910e-09 0s 0s 105310070e-09 0s 0s 105318510e-09 1s 1s 105320150e-09 0s 0s 105320350e-09 0s 0s 105328750e-09 1s 1s 105330390e-09 0s 0s 105330630e-09 0s 0s 105338990e-09 1s 1s 105340630e-09 0s 0s 105340910e-09 0s 0s 105349230e-09 1s 1s 105350870e-09 0s 0s 105351190e-09 0s 0s 105359470e-09 1s 1s 105361110e-09 0s 0s 105361470e-09 0s 0s 105369710e-09 1s 1s 105371350e-09 0s 0s 105371750e-09 0s 0s 105379950e-09 1s 1s 105381590e-09 0s 0s 105382030e-09 0s 0s 105390190e-09 1s 1s 105391830e-09 0s 0s 105392310e-09 0s 0s 105400430e-09 1s 1s 105402070e-09 0s 0s 105402590e-09 0s 0s 105410670e-09 1s 1s 105412310e-09 0s 0s 105412870e-09 0s 0s 105420910e-09 1s 1s 105422550e-09 0s 0s 105423150e-09 0s 0s 105431150e-09 1s 1s 105432790e-09 0s 0s 105433430e-09 0s 0s 105441390e-09 1s 1s 105443030e-09 0s 0s 105443710e-09 0s 0s 105451630e-09 1s 1s 105453270e-09 0s 0s 105453990e-09 0s 0s 105461870e-09 1s 1s 105463510e-09 0s 0s 105464270e-09 0s 0s 105472110e-09 1s 1s 105473750e-09 0s 0s 105474550e-09 0s 0s 105482350e-09 1s 1s 105483990e-09 0s 0s 105484830e-09 0s 0s 105492590e-09 1s 1s 105494230e-09 0s 0s 105495110e-09 0s 0s 105502830e-09 1s 1s 105504470e-09 0s 0s 105505390e-09 0s 0s 105513070e-09 1s 1s 105514710e-09 0s 0s 105515670e-09 0s 0s 105523310e-09 1s 1s 105524950e-09 0s 0s 105525950e-09 0s 0s 105533550e-09 1s 1s 105535190e-09 0s 0s 105536230e-09 0s 0s 105543790e-09 1s 1s 105545430e-09 0s 0s 105546510e-09 0s 0s 105554030e-09 1s 1s 105555670e-09 0s 0s 105556790e-09 0s 0s 105564270e-09 1s 1s 105565910e-09 0s 0s 105567070e-09 0s 0s 105574510e-09 1s 1s 105576150e-09 0s 0s 105577350e-09 0s 0s 105584750e-09 1s 1s 105586390e-09 0s 0s 105587630e-09 0s 0s 105594990e-09 1s 1s 105596630e-09 0s 0s 105597910e-09 0s 0s 105605230e-09 1s 1s 105606870e-09 0s 0s 105608190e-09 0s 0s 105615470e-09 1s 1s 105617110e-09 0s 0s 105618470e-09 0s 0s 105625710e-09 1s 1s 105627350e-09 0s 0s 105628750e-09 0s 0s 105635950e-09 1s 1s 105637590e-09 0s 0s 105639030e-09 0s 0s 105646190e-09 1s 1s 105647830e-09 0s 0s 105649310e-09 0s 0s 105656430e-09 1s 1s 105658070e-09 0s 0s 105659590e-09 0s 0s 105666670e-09 1s 1s 105668310e-09 0s 0s 105669870e-09 0s 0s 105676910e-09 1s 1s 105678550e-09 0s 0s 105680150e-09 0s 0s 105687150e-09 1s 1s 105688790e-09 0s 0s 105690430e-09 0s 0s 105697390e-09 1s 1s 105699030e-09 0s 0s 105700710e-09 0s 0s 105707630e-09 1s 1s 105709270e-09 0s 0s 105710990e-09 0s 0s 105717870e-09 1s 1s 105719510e-09 0s 0s 105721270e-09 0s 0s 105728110e-09 1s 1s 105729750e-09 0s 0s 105731550e-09 0s 0s 105738350e-09 1s 1s 105739990e-09 0s 0s 105741830e-09 0s 0s 105748590e-09 1s 1s 105750230e-09 0s 0s 105752110e-09 0s 0s 105758830e-09 1s 1s 105760470e-09 0s 0s 105762390e-09 0s 0s 105769070e-09 1s 1s 105770710e-09 0s 0s 105772670e-09 0s 0s 105779310e-09 1s 1s 105780950e-09 0s 0s 105782950e-09 0s 0s 105789550e-09 1s 1s 105791190e-09 0s 0s 105793230e-09 0s 0s 105799790e-09 1s 1s 105801430e-09 0s 0s 105803510e-09 0s 0s 105810030e-09 1s 1s 105811670e-09 0s 0s 105813790e-09 0s 0s 105820270e-09 1s 1s 105821910e-09 0s 0s 105824070e-09 0s 0s 105830510e-09 1s 1s 105832150e-09 0s 0s 105834350e-09 0s 0s 105840750e-09 1s 1s 105842390e-09 0s 0s 105844630e-09 0s 0s 105850990e-09 1s 1s 105852630e-09 0s 0s 105854910e-09 0s 0s 105861230e-09 1s 1s 105862870e-09 0s 0s 105865190e-09 0s 0s 105871470e-09 1s 1s 105873110e-09 0s 0s 105875470e-09 0s 0s 105881710e-09 1s 1s 105883350e-09 0s 0s 105885750e-09 0s 0s 105891950e-09 1s 1s 105893590e-09 0s 0s 105896030e-09 0s 0s 105902190e-09 1s 1s 105903830e-09 0s 0s 105906310e-09 0s 0s 105912430e-09 1s 1s 105914070e-09 0s 0s 105916590e-09 0s 0s 105922670e-09 1s 1s 105924310e-09 0s 0s 105926870e-09 0s 0s 105932910e-09 1s 1s 105934550e-09 0s 0s 105937150e-09 0s 0s 105943150e-09 1s 1s 105944790e-09 0s 0s 105947430e-09 0s 0s 105953390e-09 1s 1s 105955030e-09 0s 0s 105957710e-09 0s 0s 105963630e-09 1s 1s 105965270e-09 0s 0s 105967990e-09 0s 0s 105973870e-09 1s 1s 105975510e-09 0s 0s 105978270e-09 0s 0s 105984110e-09 1s 1s 105985750e-09 0s 0s 105988550e-09 0s 0s 105994350e-09 1s 1s 105995990e-09 0s 0s 105998830e-09 0s 0s 106004590e-09 1s 1s 106006230e-09 0s 0s 106009110e-09 0s 0s 106014830e-09 1s 1s 106016470e-09 0s 0s 106019390e-09 0s 0s 106025070e-09 1s 1s 106026710e-09 0s 0s 106029670e-09 0s 0s 106035310e-09 1s 1s 106036950e-09 0s 0s 106039950e-09 0s 0s 106045550e-09 1s 1s 106047190e-09 0s 0s 106050230e-09 0s 0s 106055790e-09 1s 1s 106057430e-09 0s 0s 106060510e-09 0s 0s 106066030e-09 1s 1s 106067670e-09 0s 0s 106070790e-09 0s 0s 106076270e-09 1s 1s 106077910e-09 0s 0s 106081070e-09 0s 0s 106086510e-09 1s 1s 106088150e-09 0s 0s 106091350e-09 0s 0s 106096750e-09 1s 1s 106098390e-09 0s 0s 106101630e-09 0s 0s 106106990e-09 1s 1s 106108630e-09 0s 0s 106111910e-09 0s 0s 106117230e-09 1s 1s 106118870e-09 0s 0s 106122190e-09 0s 0s 106127470e-09 1s 1s 106129110e-09 0s 0s 106132470e-09 0s 0s 106137710e-09 1s 1s 106139350e-09 0s 0s 106142750e-09 0s 0s 106147950e-09 1s 1s 106149590e-09 0s 0s 106153030e-09 0s 0s 106158190e-09 1s 1s 106159830e-09 0s 0s 106163310e-09 0s 0s 106168430e-09 1s 1s 106170070e-09 0s 0s 106173590e-09 0s 0s 106178670e-09 1s 1s 106180310e-09 0s 0s 106183870e-09 0s 0s 106188910e-09 1s 1s 106190550e-09 0s 0s 106194150e-09 0s 0s 106199150e-09 1s 1s 106200790e-09 0s 0s 106204430e-09 0s 0s 106209390e-09 1s 1s 106211030e-09 0s 0s 106214710e-09 0s 0s 106219630e-09 1s 1s 106221270e-09 0s 0s 106224990e-09 0s 0s 106229870e-09 1s 1s 106231510e-09 0s 0s 106235270e-09 0s 0s 106240110e-09 1s 1s 106241750e-09 0s 0s 106245550e-09 0s 0s 106250350e-09 1s 1s 106251990e-09 0s 0s 106255830e-09 0s 0s 106260590e-09 1s 1s 106262230e-09 0s 0s 106266110e-09 0s 0s 106270830e-09 1s 1s 106272470e-09 0s 0s 106276390e-09 0s 0s 106281070e-09 1s 1s 106282710e-09 0s 0s 106286670e-09 0s 0s 106291310e-09 1s 1s 106292950e-09 0s 0s 106296950e-09 0s 0s 106301550e-09 1s 1s 106303190e-09 0s 0s 106307230e-09 0s 0s 106311790e-09 1s 1s 106313430e-09 0s 0s 106317510e-09 0s 0s 106322030e-09 1s 1s 106323670e-09 0s 0s 106327790e-09 0s 0s 106332270e-09 1s 1s 106333910e-09 0s 0s 106338070e-09 0s 0s 106342510e-09 1s 1s 106344150e-09 0s 0s 106348350e-09 0s 0s 106352750e-09 1s 1s 106354390e-09 0s 0s 106358630e-09 0s 0s 106362990e-09 1s 1s 106364630e-09 0s 0s 106368910e-09 0s 0s 106373230e-09 1s 1s 106374870e-09 0s 0s 106379190e-09 0s 0s 106383470e-09 1s 1s 106385110e-09 0s 0s 106389470e-09 0s 0s 106393710e-09 1s 1s 106395350e-09 0s 0s 106399750e-09 0s 0s 106403950e-09 1s 1s 106405590e-09 0s 0s 106410030e-09 0s 0s 106414190e-09 1s 1s 106415830e-09 0s 0s 106420310e-09 0s 0s 106424430e-09 1s 1s 106426070e-09 0s 0s 106430590e-09 0s 0s 106434670e-09 1s 1s 106436310e-09 0s 0s 106440870e-09 0s 0s 106444910e-09 1s 1s 106446550e-09 0s 0s 106451150e-09 0s 0s 106455150e-09 1s 1s 106456790e-09 0s 0s 106461430e-09 0s 0s 106465390e-09 1s 1s 106467030e-09 0s 0s 106471710e-09 0s 0s 106475630e-09 1s 1s 106477270e-09 0s 0s 106481990e-09 0s 0s 106485870e-09 1s 1s 106487510e-09 0s 0s 106492270e-09 0s 0s 106496110e-09 1s 1s 106497750e-09 0s 0s 106502550e-09 0s 0s 106506350e-09 1s 1s 106507990e-09 0s 0s 106512830e-09 0s 0s 106516590e-09 1s 1s 106518230e-09 0s 0s 106523110e-09 0s 0s 106526830e-09 1s 1s 106528470e-09 0s 0s 106533390e-09 0s 0s 106537070e-09 1s 1s 106538710e-09 0s 0s 106543670e-09 0s 0s 106547310e-09 1s 1s 106548950e-09 0s 0s 106553950e-09 0s 0s 106557550e-09 1s 1s 106559190e-09 0s 0s 106564230e-09 0s 0s 106567790e-09 1s 1s 106569430e-09 0s 0s 106574510e-09 0s 0s 106578030e-09 1s 1s 106579670e-09 0s 0s 106584790e-09 0s 0s 106588270e-09 1s 1s 106589910e-09 0s 0s 106595070e-09 0s 0s 106598510e-09 1s 1s 106600150e-09 0s 0s 106605350e-09 0s 0s 106608750e-09 1s 1s 106610390e-09 0s 0s 106615630e-09 0s 0s 106618990e-09 1s 1s 106620630e-09 0s 0s 106625910e-09 0s 0s 106629230e-09 1s 1s 106630870e-09 0s 0s 106636190e-09 0s 0s 106639470e-09 1s 1s 106641110e-09 0s 0s 106646470e-09 0s 0s 106649710e-09 1s 1s 106651350e-09 0s 0s 106656750e-09 0s 0s 106659950e-09 1s 1s 106661590e-09 0s 0s 106667030e-09 0s 0s 106670190e-09 1s 1s 106671830e-09 0s 0s 106677310e-09 0s 0s 106680430e-09 1s 1s 106682070e-09 0s 0s 106687590e-09 0s 0s 106690670e-09 1s 1s 106692310e-09 0s 0s 106697870e-09 0s 0s 106700910e-09 1s 1s 106702550e-09 0s 0s 106708150e-09 0s 0s 106711150e-09 1s 1s 106712790e-09 0s 0s 106718430e-09 0s 0s 106721390e-09 1s 1s 106723030e-09 0s 0s 106728710e-09 0s 0s 106731630e-09 1s 1s 106733270e-09 0s 0s 106738990e-09 0s 0s 106741870e-09 1s 1s 106743510e-09 0s 0s 106749270e-09 0s 0s 106752110e-09 1s 1s 106753750e-09 0s 0s 106759550e-09 0s 0s 106762350e-09 1s 1s 106763990e-09 0s 0s 106769830e-09 0s 0s 106772590e-09 1s 1s 106774230e-09 0s 0s 106780110e-09 0s 0s 106782830e-09 1s 1s 106784470e-09 0s 0s 106790390e-09 0s 0s 106793070e-09 1s 1s 106794710e-09 0s 0s 106800670e-09 0s 0s 106803310e-09 1s 1s 106804950e-09 0s 0s 106810950e-09 0s 0s 106813550e-09 1s 1s 106815190e-09 0s 0s 106821230e-09 0s 0s 106823790e-09 1s 1s 106825430e-09 0s 0s 106831510e-09 0s 0s 106834030e-09 1s 1s 106835670e-09 0s 0s 106841790e-09 0s 0s 106844270e-09 1s 1s 106845910e-09 0s 0s 106852070e-09 0s 0s 106854510e-09 1s 1s 106856150e-09 0s 0s 106862350e-09 0s 0s 106864750e-09 1s 1s 106866390e-09 0s 0s 106872630e-09 0s 0s 106874990e-09 1s 1s 106876630e-09 0s 0s 106882910e-09 0s 0s 106885230e-09 1s 1s 106886870e-09 0s 0s 106893190e-09 0s 0s 106895470e-09 1s 1s 106897110e-09 0s 0s 106903470e-09 0s 0s 106905710e-09 1s 1s 106907350e-09 0s 0s 106913750e-09 0s 0s 106915950e-09 1s 1s 106917590e-09 0s 0s 106924030e-09 0s 0s 106926190e-09 1s 1s 106927830e-09 0s 0s 106934310e-09 0s 0s 106936430e-09 1s 1s 106938070e-09 0s 0s 106944590e-09 0s 0s 106946670e-09 1s 1s 106948310e-09 0s 0s 106954870e-09 0s 0s 106956910e-09 1s 1s 106958550e-09 0s 0s 106965150e-09 0s 0s 106967150e-09 1s 1s 106968790e-09 0s 0s 106975430e-09 0s 0s 106977390e-09 1s 1s 106979030e-09 0s 0s 106985710e-09 0s 0s 106987630e-09 1s 1s 106989270e-09 0s 0s 106995990e-09 0s 0s 106997870e-09 1s 1s 106999510e-09 0s 0s 107006270e-09 0s 0s 107008110e-09 1s 1s 107009750e-09 0s 0s 107016550e-09 0s 0s 107018350e-09 1s 1s 107019990e-09 0s 0s 107026830e-09 0s 0s 107028590e-09 1s 1s 107030230e-09 0s 0s 107037110e-09 0s 0s 107038830e-09 1s 1s 107040470e-09 0s 0s 107047390e-09 0s 0s 107049070e-09 1s 1s 107050710e-09 0s 0s 107057670e-09 0s 0s 107059310e-09 1s 1s 107060950e-09 0s 0s 107067950e-09 0s 0s 107069550e-09 1s 1s 107071190e-09 0s 0s 107078230e-09 0s 0s 107079790e-09 1s 1s 107081430e-09 0s 0s 107088510e-09 0s 0s 107090030e-09 1s 1s 107091670e-09 0s 0s 107098790e-09 0s 0s 107100270e-09 1s 1s 107101910e-09 0s 0s 107109070e-09 0s 0s 107110510e-09 1s 1s 107112150e-09 0s 0s 107119350e-09 0s 0s 107120750e-09 1s 1s 107122390e-09 0s 0s 107129630e-09 0s 0s 107130990e-09 1s 1s 107132630e-09 0s 0s 107139910e-09 0s 0s 107141230e-09 1s 1s 107142870e-09 0s 0s 107150190e-09 0s 0s 107151470e-09 1s 1s 107153110e-09 0s 0s 107160470e-09 0s 0s 107161710e-09 1s 1s 107163350e-09 0s 0s 107170750e-09 0s 0s 107171950e-09 1s 1s 107173590e-09 0s 0s 107181030e-09 0s 0s 107182190e-09 1s 1s 107183830e-09 0s 0s 107191310e-09 0s 0s 107192430e-09 1s 1s 107194070e-09 0s 0s 107201590e-09 0s 0s 107202670e-09 1s 1s 107204310e-09 0s 0s 107211870e-09 0s 0s 107212910e-09 1s 1s 107214550e-09 0s 0s 107222150e-09 0s 0s 107223150e-09 1s 1s 107224790e-09 0s 0s 107232430e-09 0s 0s 107233390e-09 1s 1s 107235030e-09 0s 0s 107242710e-09 0s 0s 107243630e-09 1s 1s 107245270e-09 0s 0s 107252990e-09 0s 0s 107253870e-09 1s 1s 107255510e-09 0s 0s 107263270e-09 0s 0s 107264110e-09 1s 1s 107265750e-09 0s 0s 107273550e-09 0s 0s 107274350e-09 1s 1s 107275990e-09 0s 0s 107283830e-09 0s 0s 107284590e-09 1s 1s 107286230e-09 0s 0s 107294110e-09 0s 0s 107294830e-09 1s 1s 107296470e-09 0s 0s 107304390e-09 0s 0s 107305070e-09 1s 1s 107306710e-09 0s 0s 107314670e-09 0s 0s 107315310e-09 1s 1s 107316950e-09 0s 0s 107324950e-09 0s 0s 107325550e-09 1s 1s 107327190e-09 0s 0s 107335230e-09 0s 0s 107335790e-09 1s 1s 107337430e-09 0s 0s 107345510e-09 0s 0s 107346030e-09 1s 1s 107347670e-09 0s 0s 107355790e-09 0s 0s 107356270e-09 1s 1s 107357910e-09 0s 0s 107366070e-09 0s 0s 107366510e-09 1s 1s 107368150e-09 0s 0s 107376350e-09 0s 0s 107376750e-09 1s 1s 107378390e-09 0s 0s 107386630e-09 0s 0s 107386990e-09 1s 1s 107388630e-09 0s 0s 107396910e-09 0s 0s 107397230e-09 1s 1s 107398870e-09 0s 0s 107407190e-09 0s 0s 107407470e-09 1s 1s 107409110e-09 0s 0s 107417470e-09 0s 0s 107417710e-09 1s 1s 107419350e-09 0s 0s 107427750e-09 0s 0s 107427950e-09 1s 1s 107429590e-09 0s 0s 107438030e-09 0s 0s 107438190e-09 1s 1s 107439830e-09 0s 0s 107448310e-09 0s 0s 107448430e-09 1s 1s 107450070e-09 0s 0s 107458590e-09 0s 0s 107458670e-09 1s 1s 107460310e-09 0s 0s 107468870e-09 0s 0s 107468910e-09 1s 1s 107470550e-09 0s 0s 107479150e-09 1s 1s 107479190e-09 1s 1s 107480830e-09 0s 0s 107489390e-09 1s 1s 107489470e-09 1s 1s 107491070e-09 0s 0s 107499630e-09 1s 1s 107499750e-09 1s 1s 107501310e-09 0s 0s 107509870e-09 1s 1s 107510030e-09 1s 1s 107511550e-09 0s 0s 107520110e-09 1s 1s 107520310e-09 1s 1s 107521790e-09 0s 0s 107530350e-09 1s 1s 107530590e-09 1s 1s 107532030e-09 0s 0s 107540590e-09 1s 1s 107540870e-09 1s 1s 107542270e-09 0s 0s 107550830e-09 1s 1s 107551150e-09 1s 1s 107552510e-09 0s 0s 107561070e-09 1s 1s 107561430e-09 1s 1s 107562750e-09 0s 0s 107571310e-09 1s 1s 107571710e-09 1s 1s 107572990e-09 0s 0s 107581550e-09 1s 1s 107581990e-09 1s 1s 107583230e-09 0s 0s 107591790e-09 1s 1s 107592270e-09 1s 1s 107593470e-09 0s 0s 107602030e-09 1s 1s 107602550e-09 1s 1s 107603710e-09 0s 0s 107612270e-09 1s 1s 107612830e-09 1s 1s 107613950e-09 0s 0s 107622510e-09 1s 1s 107623110e-09 1s 1s 107624190e-09 0s 0s 107632750e-09 1s 1s 107633390e-09 1s 1s 107634430e-09 0s 0s 107642990e-09 1s 1s 107643670e-09 1s 1s 107644670e-09 0s 0s 107653230e-09 1s 1s 107653950e-09 1s 1s 107654910e-09 0s 0s 107663470e-09 1s 1s 107664230e-09 1s 1s 107665150e-09 0s 0s 107673710e-09 1s 1s 107674510e-09 1s 1s 107675390e-09 0s 0s 107683950e-09 1s 1s 107684790e-09 1s 1s 107685630e-09 0s 0s 107694190e-09 1s 1s 107695070e-09 1s 1s 107695870e-09 0s 0s 107704430e-09 1s 1s 107705350e-09 1s 1s 107706110e-09 0s 0s 107714670e-09 1s 1s 107715630e-09 1s 1s 107716350e-09 0s 0s 107724910e-09 1s 1s 107725910e-09 1s 1s 107726590e-09 0s 0s 107735150e-09 1s 1s 107736190e-09 1s 1s 107736830e-09 0s 0s 107745390e-09 1s 1s 107746470e-09 1s 1s 107747070e-09 0s 0s 107755630e-09 1s 1s 107756750e-09 1s 1s 107757310e-09 0s 0s 107765870e-09 1s 1s 107767030e-09 1s 1s 107767550e-09 0s 0s 107776110e-09 1s 1s 107777310e-09 1s 1s 107777790e-09 0s 0s 107786350e-09 1s 1s 107787590e-09 1s 1s 107788030e-09 0s 0s 107796590e-09 1s 1s 107797870e-09 1s 1s 107798270e-09 0s 0s 107806830e-09 1s 1s 107808150e-09 1s 1s 107808510e-09 0s 0s 107817070e-09 1s 1s 107818430e-09 1s 1s 107818750e-09 0s 0s 107827310e-09 1s 1s 107828710e-09 1s 1s 107828990e-09 0s 0s 107837550e-09 1s 1s 107838990e-09 1s 1s 107839230e-09 0s 0s 107847790e-09 1s 1s 107849270e-09 1s 1s 107849470e-09 0s 0s 107858030e-09 1s 1s 107859550e-09 1s 1s 107859710e-09 0s 0s 107868270e-09 1s 1s 107869830e-09 1s 1s 107869950e-09 0s 0s 107878510e-09 1s 1s 107880110e-09 1s 1s 107880190e-09 0s 0s 107888750e-09 1s 1s 107890390e-09 1s 1s 107890430e-09 0s 0s 107898990e-09 1s 1s 107900670e-09 0s 0s 107909230e-09 1s 1s 107910910e-09 0s 0s 107910950e-09 0s 0s 107919470e-09 1s 1s 107921150e-09 0s 0s 107921230e-09 0s 0s 107929710e-09 1s 1s 107931390e-09 0s 0s 107931510e-09 0s 0s 107939950e-09 1s 1s 107941630e-09 0s 0s 107941790e-09 0s 0s 107950190e-09 1s 1s 107951870e-09 0s 0s 107952070e-09 0s 0s 107960430e-09 1s 1s 107962110e-09 0s 0s 107962350e-09 0s 0s 107970670e-09 1s 1s 107972350e-09 0s 0s 107972630e-09 0s 0s 107980910e-09 1s 1s 107982590e-09 0s 0s 107982910e-09 0s 0s 107991150e-09 1s 1s 107992830e-09 0s 0s 107993190e-09 0s 0s 108001390e-09 1s 1s 108003070e-09 0s 0s 108003470e-09 0s 0s 108011630e-09 1s 1s 108013310e-09 0s 0s 108013750e-09 0s 0s 108021870e-09 1s 1s 108023550e-09 0s 0s 108024030e-09 0s 0s 108032110e-09 1s 1s 108033790e-09 0s 0s 108034310e-09 0s 0s 108042350e-09 1s 1s 108044030e-09 0s 0s 108044590e-09 0s 0s 108052590e-09 1s 1s 108054270e-09 0s 0s 108054870e-09 0s 0s 108062830e-09 1s 1s 108064510e-09 0s 0s 108065150e-09 0s 0s 108073070e-09 1s 1s 108074750e-09 0s 0s 108075430e-09 0s 0s 108083310e-09 1s 1s 108084990e-09 0s 0s 108085710e-09 0s 0s 108093550e-09 1s 1s 108095230e-09 0s 0s 108095990e-09 0s 0s 108103790e-09 1s 1s 108105470e-09 0s 0s 108106270e-09 0s 0s 108114030e-09 1s 1s 108115710e-09 0s 0s 108116550e-09 0s 0s 108124270e-09 1s 1s 108125950e-09 0s 0s 108126830e-09 0s 0s 108134510e-09 1s 1s 108136190e-09 0s 0s 108137110e-09 0s 0s 108144750e-09 1s 1s 108146430e-09 0s 0s 108147390e-09 0s 0s 108154990e-09 1s 1s 108156670e-09 0s 0s 108157670e-09 0s 0s 108165230e-09 1s 1s 108166910e-09 0s 0s 108167950e-09 0s 0s 108175470e-09 1s 1s 108177150e-09 0s 0s 108178230e-09 0s 0s 108185710e-09 1s 1s 108187390e-09 0s 0s 108188510e-09 0s 0s 108195950e-09 1s 1s 108197630e-09 0s 0s 108198790e-09 0s 0s 108206190e-09 1s 1s 108207870e-09 0s 0s 108209070e-09 0s 0s 108216430e-09 1s 1s 108218110e-09 0s 0s 108219350e-09 0s 0s 108226670e-09 1s 1s 108228350e-09 0s 0s 108229630e-09 0s 0s 108236910e-09 1s 1s 108238590e-09 0s 0s 108239910e-09 0s 0s 108247150e-09 1s 1s 108248830e-09 0s 0s 108250190e-09 0s 0s 108257390e-09 1s 1s 108259070e-09 0s 0s 108260470e-09 0s 0s 108267630e-09 1s 1s 108269310e-09 0s 0s 108270750e-09 0s 0s 108277870e-09 1s 1s 108279550e-09 0s 0s 108281030e-09 0s 0s 108288110e-09 1s 1s 108289790e-09 0s 0s 108291310e-09 0s 0s 108298350e-09 1s 1s 108300030e-09 0s 0s 108301590e-09 0s 0s 108308590e-09 1s 1s 108310270e-09 0s 0s 108311870e-09 0s 0s 108318830e-09 1s 1s 108320510e-09 0s 0s 108322150e-09 0s 0s 108329070e-09 1s 1s 108330750e-09 0s 0s 108332430e-09 0s 0s 108339310e-09 1s 1s 108340990e-09 0s 0s 108342710e-09 0s 0s 108349550e-09 1s 1s 108351230e-09 0s 0s 108352990e-09 0s 0s 108359790e-09 1s 1s 108361470e-09 0s 0s 108363270e-09 0s 0s 108370030e-09 1s 1s 108371710e-09 0s 0s 108373550e-09 0s 0s 108380270e-09 1s 1s 108381950e-09 0s 0s 108383830e-09 0s 0s 108390510e-09 1s 1s 108392190e-09 0s 0s 108394110e-09 0s 0s 108400750e-09 1s 1s 108402430e-09 0s 0s 108404390e-09 0s 0s 108410990e-09 1s 1s 108412670e-09 0s 0s 108414670e-09 0s 0s 108421230e-09 1s 1s 108422910e-09 0s 0s 108424950e-09 0s 0s 108431470e-09 1s 1s 108433150e-09 0s 0s 108435230e-09 0s 0s 108441710e-09 1s 1s 108443390e-09 0s 0s 108445510e-09 0s 0s 108451950e-09 1s 1s 108453630e-09 0s 0s 108455790e-09 0s 0s 108462190e-09 1s 1s 108463870e-09 0s 0s 108466070e-09 0s 0s 108472430e-09 1s 1s 108474110e-09 0s 0s 108476350e-09 0s 0s 108482670e-09 1s 1s 108484350e-09 0s 0s 108486630e-09 0s 0s 108492910e-09 1s 1s 108494590e-09 0s 0s 108496910e-09 0s 0s 108503150e-09 1s 1s 108504830e-09 0s 0s 108507190e-09 0s 0s 108513390e-09 1s 1s 108515070e-09 0s 0s 108517470e-09 0s 0s 108523630e-09 1s 1s 108525310e-09 0s 0s 108527750e-09 0s 0s 108533870e-09 1s 1s 108535550e-09 0s 0s 108538030e-09 0s 0s 108544110e-09 1s 1s 108545790e-09 0s 0s 108548310e-09 0s 0s 108554350e-09 1s 1s 108556030e-09 0s 0s 108558590e-09 0s 0s 108564590e-09 1s 1s 108566270e-09 0s 0s 108568870e-09 0s 0s 108574830e-09 1s 1s 108576510e-09 0s 0s 108579150e-09 0s 0s 108585070e-09 1s 1s 108586750e-09 0s 0s 108589430e-09 0s 0s 108595310e-09 1s 1s 108596990e-09 0s 0s 108599710e-09 0s 0s 108605550e-09 1s 1s 108607230e-09 0s 0s 108609990e-09 0s 0s 108615790e-09 1s 1s 108617470e-09 0s 0s 108620270e-09 0s 0s 108626030e-09 1s 1s 108627710e-09 0s 0s 108630550e-09 0s 0s 108636270e-09 1s 1s 108637950e-09 0s 0s 108640830e-09 0s 0s 108646510e-09 1s 1s 108648190e-09 0s 0s 108651110e-09 0s 0s 108656750e-09 1s 1s 108658430e-09 0s 0s 108661390e-09 0s 0s 108666990e-09 1s 1s 108668670e-09 0s 0s 108671670e-09 0s 0s 108677230e-09 1s 1s 108678910e-09 0s 0s 108681950e-09 0s 0s 108687470e-09 1s 1s 108689150e-09 0s 0s 108692230e-09 0s 0s 108697710e-09 1s 1s 108699390e-09 0s 0s 108702510e-09 0s 0s 108707950e-09 1s 1s 108709630e-09 0s 0s 108712790e-09 0s 0s 108718190e-09 1s 1s 108719870e-09 0s 0s 108723070e-09 0s 0s 108728430e-09 1s 1s 108730110e-09 0s 0s 108733350e-09 0s 0s 108738670e-09 1s 1s 108740350e-09 0s 0s 108743630e-09 0s 0s 108748910e-09 1s 1s 108750590e-09 0s 0s 108753910e-09 0s 0s 108759150e-09 1s 1s 108760830e-09 0s 0s 108764190e-09 0s 0s 108769390e-09 1s 1s 108771070e-09 0s 0s 108774470e-09 0s 0s 108779630e-09 1s 1s 108781310e-09 0s 0s 108784750e-09 0s 0s 108789870e-09 1s 1s 108791550e-09 0s 0s 108795030e-09 0s 0s 108800110e-09 1s 1s 108801790e-09 0s 0s 108805310e-09 0s 0s 108810350e-09 1s 1s 108812030e-09 0s 0s 108815590e-09 0s 0s 108820590e-09 1s 1s 108822270e-09 0s 0s 108825870e-09 0s 0s 108830830e-09 1s 1s 108832510e-09 0s 0s 108836150e-09 0s 0s 108841070e-09 1s 1s 108842750e-09 0s 0s 108846430e-09 0s 0s 108851310e-09 1s 1s 108852990e-09 0s 0s 108856710e-09 0s 0s 108861550e-09 1s 1s 108863230e-09 0s 0s 108866990e-09 0s 0s 108871790e-09 1s 1s 108873470e-09 0s 0s 108877270e-09 0s 0s 108882030e-09 1s 1s 108883710e-09 0s 0s 108887550e-09 0s 0s 108892270e-09 1s 1s 108893950e-09 0s 0s 108897830e-09 0s 0s 108902510e-09 1s 1s 108904190e-09 0s 0s 108908110e-09 0s 0s 108912750e-09 1s 1s 108914430e-09 0s 0s 108918390e-09 0s 0s 108922990e-09 1s 1s 108924670e-09 0s 0s 108928670e-09 0s 0s 108933230e-09 1s 1s 108934910e-09 0s 0s 108938950e-09 0s 0s 108943470e-09 1s 1s 108945150e-09 0s 0s 108949230e-09 0s 0s 108953710e-09 1s 1s 108955390e-09 0s 0s 108959510e-09 0s 0s 108963950e-09 1s 1s 108965630e-09 0s 0s 108969790e-09 0s 0s 108974190e-09 1s 1s 108975870e-09 0s 0s 108980070e-09 0s 0s 108984430e-09 1s 1s 108986110e-09 0s 0s 108990350e-09 0s 0s 108994670e-09 1s 1s 108996350e-09 0s 0s 109000630e-09 0s 0s 109004910e-09 1s 1s 109006590e-09 0s 0s 109010910e-09 0s 0s 109015150e-09 1s 1s 109016830e-09 0s 0s 109021190e-09 0s 0s 109025390e-09 1s 1s 109027070e-09 0s 0s 109031470e-09 0s 0s 109035630e-09 1s 1s 109037310e-09 0s 0s 109041750e-09 0s 0s 109045870e-09 1s 1s 109047550e-09 0s 0s 109052030e-09 0s 0s 109056110e-09 1s 1s 109057790e-09 0s 0s 109062310e-09 0s 0s 109066350e-09 1s 1s 109068030e-09 0s 0s 109072590e-09 0s 0s 109076590e-09 1s 1s 109078270e-09 0s 0s 109082870e-09 0s 0s 109086830e-09 1s 1s 109088510e-09 0s 0s 109093150e-09 0s 0s 109097070e-09 1s 1s 109098750e-09 0s 0s 109103430e-09 0s 0s 109107310e-09 1s 1s 109108990e-09 0s 0s 109113710e-09 0s 0s 109117550e-09 1s 1s 109119230e-09 0s 0s 109123990e-09 0s 0s 109127790e-09 1s 1s 109129470e-09 0s 0s 109134270e-09 0s 0s 109138030e-09 1s 1s 109139710e-09 0s 0s 109144550e-09 0s 0s 109148270e-09 1s 1s 109149950e-09 0s 0s 109154830e-09 0s 0s 109158510e-09 1s 1s 109160190e-09 0s 0s 109165110e-09 0s 0s 109168750e-09 1s 1s 109170430e-09 0s 0s 109175390e-09 0s 0s 109178990e-09 1s 1s 109180670e-09 0s 0s 109185670e-09 0s 0s 109189230e-09 1s 1s 109190910e-09 0s 0s 109195950e-09 0s 0s 109199470e-09 1s 1s 109201150e-09 0s 0s 109206230e-09 0s 0s 109209710e-09 1s 1s 109211390e-09 0s 0s 109216510e-09 0s 0s 109219950e-09 1s 1s 109221630e-09 0s 0s 109226790e-09 0s 0s 109230190e-09 1s 1s 109231870e-09 0s 0s 109237070e-09 0s 0s 109240430e-09 1s 1s 109242110e-09 0s 0s 109247350e-09 0s 0s 109250670e-09 1s 1s 109252350e-09 0s 0s 109257630e-09 0s 0s 109260910e-09 1s 1s 109262590e-09 0s 0s 109267910e-09 0s 0s 109271150e-09 1s 1s 109272830e-09 0s 0s 109278190e-09 0s 0s 109281390e-09 1s 1s 109283070e-09 0s 0s 109288470e-09 0s 0s 109291630e-09 1s 1s 109293310e-09 0s 0s 109298750e-09 0s 0s 109301870e-09 1s 1s 109303550e-09 0s 0s 109309030e-09 0s 0s 109312110e-09 1s 1s 109313790e-09 0s 0s 109319310e-09 0s 0s 109322350e-09 1s 1s 109324030e-09 0s 0s 109329590e-09 0s 0s 109332590e-09 1s 1s 109334270e-09 0s 0s 109339870e-09 0s 0s 109342830e-09 1s 1s 109344510e-09 0s 0s 109350150e-09 0s 0s 109353070e-09 1s 1s 109354750e-09 0s 0s 109360430e-09 0s 0s 109363310e-09 1s 1s 109364990e-09 0s 0s 109370710e-09 0s 0s 109373550e-09 1s 1s 109375230e-09 0s 0s 109380990e-09 0s 0s 109383790e-09 1s 1s 109385470e-09 0s 0s 109391270e-09 0s 0s 109394030e-09 1s 1s 109395710e-09 0s 0s 109401550e-09 0s 0s 109404270e-09 1s 1s 109405950e-09 0s 0s 109411830e-09 0s 0s 109414510e-09 1s 1s 109416190e-09 0s 0s 109422110e-09 0s 0s 109424750e-09 1s 1s 109426430e-09 0s 0s 109432390e-09 0s 0s 109434990e-09 1s 1s 109436670e-09 0s 0s 109442670e-09 0s 0s 109445230e-09 1s 1s 109446910e-09 0s 0s 109452950e-09 0s 0s 109455470e-09 1s 1s 109457150e-09 0s 0s 109463230e-09 0s 0s 109465710e-09 1s 1s 109467390e-09 0s 0s 109473510e-09 0s 0s 109475950e-09 1s 1s 109477630e-09 0s 0s 109483790e-09 0s 0s 109486190e-09 1s 1s 109487870e-09 0s 0s 109494070e-09 0s 0s 109496430e-09 1s 1s 109498110e-09 0s 0s 109504350e-09 0s 0s 109506670e-09 1s 1s 109508350e-09 0s 0s 109514630e-09 0s 0s 109516910e-09 1s 1s 109518590e-09 0s 0s 109524910e-09 0s 0s 109527150e-09 1s 1s 109528830e-09 0s 0s 109535190e-09 0s 0s 109537390e-09 1s 1s 109539070e-09 0s 0s 109545470e-09 0s 0s 109547630e-09 1s 1s 109549310e-09 0s 0s 109555750e-09 0s 0s 109557870e-09 1s 1s 109559550e-09 0s 0s 109566030e-09 0s 0s 109568110e-09 1s 1s 109569790e-09 0s 0s 109576310e-09 0s 0s 109578350e-09 1s 1s 109580030e-09 0s 0s 109586590e-09 0s 0s 109588590e-09 1s 1s 109590270e-09 0s 0s 109596870e-09 0s 0s 109598830e-09 1s 1s 109600510e-09 0s 0s 109607150e-09 0s 0s 109609070e-09 1s 1s 109610750e-09 0s 0s 109617430e-09 0s 0s 109619310e-09 1s 1s 109620990e-09 0s 0s 109627710e-09 0s 0s 109629550e-09 1s 1s 109631230e-09 0s 0s 109637990e-09 0s 0s 109639790e-09 1s 1s 109641470e-09 0s 0s 109648270e-09 0s 0s 109650030e-09 1s 1s 109651710e-09 0s 0s 109658550e-09 0s 0s 109660270e-09 1s 1s 109661950e-09 0s 0s 109668830e-09 0s 0s 109670510e-09 1s 1s 109672190e-09 0s 0s 109679110e-09 0s 0s 109680750e-09 1s 1s 109682430e-09 0s 0s 109689390e-09 0s 0s 109690990e-09 1s 1s 109692670e-09 0s 0s 109699670e-09 0s 0s 109701230e-09 1s 1s 109702910e-09 0s 0s 109709950e-09 0s 0s 109711470e-09 1s 1s 109713150e-09 0s 0s 109720230e-09 0s 0s 109721710e-09 1s 1s 109723390e-09 0s 0s 109730510e-09 0s 0s 109731950e-09 1s 1s 109733630e-09 0s 0s 109740790e-09 0s 0s 109742190e-09 1s 1s 109743870e-09 0s 0s 109751070e-09 0s 0s 109752430e-09 1s 1s 109754110e-09 0s 0s 109761350e-09 0s 0s 109762670e-09 1s 1s 109764350e-09 0s 0s 109771630e-09 0s 0s 109772910e-09 1s 1s 109774590e-09 0s 0s 109781910e-09 0s 0s 109783150e-09 1s 1s 109784830e-09 0s 0s 109792190e-09 0s 0s 109793390e-09 1s 1s 109795070e-09 0s 0s 109802470e-09 0s 0s 109803630e-09 1s 1s 109805310e-09 0s 0s 109812750e-09 0s 0s 109813870e-09 1s 1s 109815550e-09 0s 0s 109823030e-09 0s 0s 109824110e-09 1s 1s 109825790e-09 0s 0s 109833310e-09 0s 0s 109834350e-09 1s 1s 109836030e-09 0s 0s 109843590e-09 0s 0s 109844590e-09 1s 1s 109846270e-09 0s 0s 109853870e-09 0s 0s 109854830e-09 1s 1s 109856510e-09 0s 0s 109864150e-09 0s 0s 109865070e-09 1s 1s 109866750e-09 0s 0s 109874430e-09 0s 0s 109875310e-09 1s 1s 109876990e-09 0s 0s 109884710e-09 0s 0s 109885550e-09 1s 1s 109887230e-09 0s 0s 109894990e-09 0s 0s 109895790e-09 1s 1s 109897470e-09 0s 0s 109905270e-09 0s 0s 109906030e-09 1s 1s 109907710e-09 0s 0s 109915550e-09 0s 0s 109916270e-09 1s 1s 109917950e-09 0s 0s 109925830e-09 0s 0s 109926510e-09 1s 1s 109928190e-09 0s 0s 109936110e-09 0s 0s 109936750e-09 1s 1s 109938430e-09 0s 0s 109946390e-09 0s 0s 109946990e-09 1s 1s 109948670e-09 0s 0s 109956670e-09 0s 0s 109957230e-09 1s 1s 109958910e-09 0s 0s 109966950e-09 0s 0s 109967470e-09 1s 1s 109969150e-09 0s 0s 109977230e-09 0s 0s 109977710e-09 1s 1s 109979390e-09 0s 0s 109987510e-09 0s 0s 109987950e-09 1s 1s 109989630e-09 0s 0s 109997790e-09 0s 0s 109998190e-09 1s 1s 109999870e-09 0s 0s 110008070e-09 0s 0s 110008430e-09 1s 1s 110010110e-09 0s 0s 110018350e-09 0s 0s 110018670e-09 1s 1s 110020350e-09 0s 0s 110028630e-09 0s 0s 110028910e-09 1s 1s 110030590e-09 0s 0s 110038910e-09 0s 0s 110039150e-09 1s 1s 110040830e-09 0s 0s 110049190e-09 0s 0s 110049390e-09 1s 1s 110051070e-09 0s 0s 110059470e-09 0s 0s 110059630e-09 1s 1s 110061310e-09 0s 0s 110069750e-09 0s 0s 110069870e-09 1s 1s 110071550e-09 0s 0s 110080030e-09 0s 0s 110080110e-09 1s 1s 110081790e-09 0s 0s 110090310e-09 0s 0s 110090350e-09 1s 1s 110092030e-09 0s 0s 110100590e-09 1s 1s 110100630e-09 1s 1s 110102310e-09 0s 0s 110110830e-09 1s 1s 110110910e-09 1s 1s 110112550e-09 0s 0s 110121070e-09 1s 1s 110121190e-09 1s 1s 110122790e-09 0s 0s 110131310e-09 1s 1s 110131470e-09 1s 1s 110133030e-09 0s 0s 110141550e-09 1s 1s 110141750e-09 1s 1s 110143270e-09 0s 0s 110151790e-09 1s 1s 110152030e-09 1s 1s 110153510e-09 0s 0s 110162030e-09 1s 1s 110162310e-09 1s 1s 110163750e-09 0s 0s 110172270e-09 1s 1s 110172590e-09 1s 1s 110173990e-09 0s 0s 110182510e-09 1s 1s 110182870e-09 1s 1s 110184230e-09 0s 0s 110192750e-09 1s 1s 110193150e-09 1s 1s 110194470e-09 0s 0s 110202990e-09 1s 1s 110203430e-09 1s 1s 110204710e-09 0s 0s 110213230e-09 1s 1s 110213710e-09 1s 1s 110214950e-09 0s 0s 110223470e-09 1s 1s 110223990e-09 1s 1s 110225190e-09 0s 0s 110233710e-09 1s 1s 110234270e-09 1s 1s 110235430e-09 0s 0s 110243950e-09 1s 1s 110244550e-09 1s 1s 110245670e-09 0s 0s 110254190e-09 1s 1s 110254830e-09 1s 1s 110255910e-09 0s 0s 110264430e-09 1s 1s 110265110e-09 1s 1s 110266150e-09 0s 0s 110274670e-09 1s 1s 110275390e-09 1s 1s 110276390e-09 0s 0s 110284910e-09 1s 1s 110285670e-09 1s 1s 110286630e-09 0s 0s 110295150e-09 1s 1s 110295950e-09 1s 1s 110296870e-09 0s 0s 110305390e-09 1s 1s 110306230e-09 1s 1s 110307110e-09 0s 0s 110315630e-09 1s 1s 110316510e-09 1s 1s 110317350e-09 0s 0s 110325870e-09 1s 1s 110326790e-09 1s 1s 110327590e-09 0s 0s 110336110e-09 1s 1s 110337070e-09 1s 1s 110337830e-09 0s 0s 110346350e-09 1s 1s 110347350e-09 1s 1s 110348070e-09 0s 0s 110356590e-09 1s 1s 110357630e-09 1s 1s 110358310e-09 0s 0s 110366830e-09 1s 1s 110367910e-09 1s 1s 110368550e-09 0s 0s 110377070e-09 1s 1s 110378190e-09 1s 1s 110378790e-09 0s 0s 110387310e-09 1s 1s 110388470e-09 1s 1s 110389030e-09 0s 0s 110397550e-09 1s 1s 110398750e-09 1s 1s 110399270e-09 0s 0s 110407790e-09 1s 1s 110409030e-09 1s 1s 110409510e-09 0s 0s 110418030e-09 1s 1s 110419310e-09 1s 1s 110419750e-09 0s 0s 110428270e-09 1s 1s 110429590e-09 1s 1s 110429990e-09 0s 0s 110438510e-09 1s 1s 110439870e-09 1s 1s 110440230e-09 0s 0s 110448750e-09 1s 1s 110450150e-09 1s 1s 110450470e-09 0s 0s 110458990e-09 1s 1s 110460430e-09 1s 1s 110460710e-09 0s 0s 110469230e-09 1s 1s 110470710e-09 1s 1s 110470950e-09 0s 0s 110479470e-09 1s 1s 110480990e-09 1s 1s 110481190e-09 0s 0s 110489710e-09 1s 1s 110491270e-09 1s 1s 110491430e-09 0s 0s 110499950e-09 1s 1s 110501550e-09 1s 1s 110501670e-09 0s 0s 110510190e-09 1s 1s 110511830e-09 1s 1s 110511910e-09 0s 0s 110520430e-09 1s 1s 110522110e-09 1s 1s 110522150e-09 0s 0s 110530670e-09 1s 1s 110532390e-09 0s 0s 110540910e-09 1s 1s 110542630e-09 0s 0s 110542670e-09 0s 0s 110551150e-09 1s 1s 110552870e-09 0s 0s 110552950e-09 0s 0s 110561390e-09 1s 1s 110563110e-09 0s 0s 110563230e-09 0s 0s 110571630e-09 1s 1s 110573350e-09 0s 0s 110573510e-09 0s 0s 110581870e-09 1s 1s 110583590e-09 0s 0s 110583790e-09 0s 0s 110592110e-09 1s 1s 110593830e-09 0s 0s 110594070e-09 0s 0s 110602350e-09 1s 1s 110604070e-09 0s 0s 110604350e-09 0s 0s 110612590e-09 1s 1s 110614310e-09 0s 0s 110614630e-09 0s 0s 110622830e-09 1s 1s 110624550e-09 0s 0s 110624910e-09 0s 0s 110633070e-09 1s 1s 110634790e-09 0s 0s 110635190e-09 0s 0s 110643310e-09 1s 1s 110645030e-09 0s 0s 110645470e-09 0s 0s 110653550e-09 1s 1s 110655270e-09 0s 0s 110655750e-09 0s 0s 110663790e-09 1s 1s 110665510e-09 0s 0s 110666030e-09 0s 0s 110674030e-09 1s 1s 110675750e-09 0s 0s 110676310e-09 0s 0s 110684270e-09 1s 1s 110685990e-09 0s 0s 110686590e-09 0s 0s 110694510e-09 1s 1s 110696230e-09 0s 0s 110696870e-09 0s 0s 110704750e-09 1s 1s 110706470e-09 0s 0s 110707150e-09 0s 0s 110714990e-09 1s 1s 110716710e-09 0s 0s 110717430e-09 0s 0s 110725230e-09 1s 1s 110726950e-09 0s 0s 110727710e-09 0s 0s 110735470e-09 1s 1s 110737190e-09 0s 0s 110737990e-09 0s 0s 110745710e-09 1s 1s 110747430e-09 0s 0s 110748270e-09 0s 0s 110755950e-09 1s 1s 110757670e-09 0s 0s 110758550e-09 0s 0s 110766190e-09 1s 1s 110767910e-09 0s 0s 110768830e-09 0s 0s 110776430e-09 1s 1s 110778150e-09 0s 0s 110779110e-09 0s 0s 110786670e-09 1s 1s 110788390e-09 0s 0s 110789390e-09 0s 0s 110796910e-09 1s 1s 110798630e-09 0s 0s 110799670e-09 0s 0s 110807150e-09 1s 1s 110808870e-09 0s 0s 110809950e-09 0s 0s 110817390e-09 1s 1s 110819110e-09 0s 0s 110820230e-09 0s 0s 110827630e-09 1s 1s 110829350e-09 0s 0s 110830510e-09 0s 0s 110837870e-09 1s 1s 110839590e-09 0s 0s 110840790e-09 0s 0s 110848110e-09 1s 1s 110849830e-09 0s 0s 110851070e-09 0s 0s 110858350e-09 1s 1s 110860070e-09 0s 0s 110861350e-09 0s 0s 110868590e-09 1s 1s 110870310e-09 0s 0s 110871630e-09 0s 0s 110878830e-09 1s 1s 110880550e-09 0s 0s 110881910e-09 0s 0s 110889070e-09 1s 1s 110890790e-09 0s 0s 110892190e-09 0s 0s 110899310e-09 1s 1s 110901030e-09 0s 0s 110902470e-09 0s 0s 110909550e-09 1s 1s 110911270e-09 0s 0s 110912750e-09 0s 0s 110919790e-09 1s 1s 110921510e-09 0s 0s 110923030e-09 0s 0s 110930030e-09 1s 1s 110931750e-09 0s 0s 110933310e-09 0s 0s 110940270e-09 1s 1s 110941990e-09 0s 0s 110943590e-09 0s 0s 110950510e-09 1s 1s 110952230e-09 0s 0s 110953870e-09 0s 0s 110960750e-09 1s 1s 110962470e-09 0s 0s 110964150e-09 0s 0s 110970990e-09 1s 1s 110972710e-09 0s 0s 110974430e-09 0s 0s 110981230e-09 1s 1s 110982950e-09 0s 0s 110984710e-09 0s 0s 110991470e-09 1s 1s 110993190e-09 0s 0s 110994990e-09 0s 0s 111001710e-09 1s 1s 111003430e-09 0s 0s 111005270e-09 0s 0s 111011950e-09 1s 1s 111013670e-09 0s 0s 111015550e-09 0s 0s 111022190e-09 1s 1s 111023910e-09 0s 0s 111025830e-09 0s 0s 111032430e-09 1s 1s 111034150e-09 0s 0s 111036110e-09 0s 0s 111042670e-09 1s 1s 111044390e-09 0s 0s 111046390e-09 0s 0s 111052910e-09 1s 1s 111054630e-09 0s 0s 111056670e-09 0s 0s 111063150e-09 1s 1s 111064870e-09 0s 0s 111066950e-09 0s 0s 111073390e-09 1s 1s 111075110e-09 0s 0s 111077230e-09 0s 0s 111083630e-09 1s 1s 111085350e-09 0s 0s 111087510e-09 0s 0s 111093870e-09 1s 1s 111095590e-09 0s 0s 111097790e-09 0s 0s 111104110e-09 1s 1s 111105830e-09 0s 0s 111108070e-09 0s 0s 111114350e-09 1s 1s 111116070e-09 0s 0s 111118350e-09 0s 0s 111124590e-09 1s 1s 111126310e-09 0s 0s 111128630e-09 0s 0s 111134830e-09 1s 1s 111136550e-09 0s 0s 111138910e-09 0s 0s 111145070e-09 1s 1s 111146790e-09 0s 0s 111149190e-09 0s 0s 111155310e-09 1s 1s 111157030e-09 0s 0s 111159470e-09 0s 0s 111165550e-09 1s 1s 111167270e-09 0s 0s 111169750e-09 0s 0s 111175790e-09 1s 1s 111177510e-09 0s 0s 111180030e-09 0s 0s 111186030e-09 1s 1s 111187750e-09 0s 0s 111190310e-09 0s 0s 111196270e-09 1s 1s 111197990e-09 0s 0s 111200590e-09 0s 0s 111206510e-09 1s 1s 111208230e-09 0s 0s 111210870e-09 0s 0s 111216750e-09 1s 1s 111218470e-09 0s 0s 111221150e-09 0s 0s 111226990e-09 1s 1s 111228710e-09 0s 0s 111231430e-09 0s 0s 111237230e-09 1s 1s 111238950e-09 0s 0s 111241710e-09 0s 0s 111247470e-09 1s 1s 111249190e-09 0s 0s 111251990e-09 0s 0s 111257710e-09 1s 1s 111259430e-09 0s 0s 111262270e-09 0s 0s 111267950e-09 1s 1s 111269670e-09 0s 0s 111272550e-09 0s 0s 111278190e-09 1s 1s 111279910e-09 0s 0s 111282830e-09 0s 0s 111288430e-09 1s 1s 111290150e-09 0s 0s 111293110e-09 0s 0s 111298670e-09 1s 1s 111300390e-09 0s 0s 111303390e-09 0s 0s 111308910e-09 1s 1s 111310630e-09 0s 0s 111313670e-09 0s 0s 111319150e-09 1s 1s 111320870e-09 0s 0s 111323950e-09 0s 0s 111329390e-09 1s 1s 111331110e-09 0s 0s 111334230e-09 0s 0s 111339630e-09 1s 1s 111341350e-09 0s 0s 111344510e-09 0s 0s 111349870e-09 1s 1s 111351590e-09 0s 0s 111354790e-09 0s 0s 111360110e-09 1s 1s 111361830e-09 0s 0s 111365070e-09 0s 0s 111370350e-09 1s 1s 111372070e-09 0s 0s 111375350e-09 0s 0s 111380590e-09 1s 1s 111382310e-09 0s 0s 111385630e-09 0s 0s 111390830e-09 1s 1s 111392550e-09 0s 0s 111395910e-09 0s 0s 111401070e-09 1s 1s 111402790e-09 0s 0s 111406190e-09 0s 0s 111411310e-09 1s 1s 111413030e-09 0s 0s 111416470e-09 0s 0s 111421550e-09 1s 1s 111423270e-09 0s 0s 111426750e-09 0s 0s 111431790e-09 1s 1s 111433510e-09 0s 0s 111437030e-09 0s 0s 111442030e-09 1s 1s 111443750e-09 0s 0s 111447310e-09 0s 0s 111452270e-09 1s 1s 111453990e-09 0s 0s 111457590e-09 0s 0s 111462510e-09 1s 1s 111464230e-09 0s 0s 111467870e-09 0s 0s 111472750e-09 1s 1s 111474470e-09 0s 0s 111478150e-09 0s 0s 111482990e-09 1s 1s 111484710e-09 0s 0s 111488430e-09 0s 0s 111493230e-09 1s 1s 111494950e-09 0s 0s 111498710e-09 0s 0s 111503470e-09 1s 1s 111505190e-09 0s 0s 111508990e-09 0s 0s 111513710e-09 1s 1s 111515430e-09 0s 0s 111519270e-09 0s 0s 111523950e-09 1s 1s 111525670e-09 0s 0s 111529550e-09 0s 0s 111534190e-09 1s 1s 111535910e-09 0s 0s 111539830e-09 0s 0s 111544430e-09 1s 1s 111546150e-09 0s 0s 111550110e-09 0s 0s 111554670e-09 1s 1s 111556390e-09 0s 0s 111560390e-09 0s 0s 111564910e-09 1s 1s 111566630e-09 0s 0s 111570670e-09 0s 0s 111575150e-09 1s 1s 111576870e-09 0s 0s 111580950e-09 0s 0s 111585390e-09 1s 1s 111587110e-09 0s 0s 111591230e-09 0s 0s 111595630e-09 1s 1s 111597350e-09 0s 0s 111601510e-09 0s 0s 111605870e-09 1s 1s 111607590e-09 0s 0s 111611790e-09 0s 0s 111616110e-09 1s 1s 111617830e-09 0s 0s 111622070e-09 0s 0s 111626350e-09 1s 1s 111628070e-09 0s 0s 111632350e-09 0s 0s 111636590e-09 1s 1s 111638310e-09 0s 0s 111642630e-09 0s 0s 111646830e-09 1s 1s 111648550e-09 0s 0s 111652910e-09 0s 0s 111657070e-09 1s 1s 111658790e-09 0s 0s 111663190e-09 0s 0s 111667310e-09 1s 1s 111669030e-09 0s 0s 111673470e-09 0s 0s 111677550e-09 1s 1s 111679270e-09 0s 0s 111683750e-09 0s 0s 111687790e-09 1s 1s 111689510e-09 0s 0s 111694030e-09 0s 0s 111698030e-09 1s 1s 111699750e-09 0s 0s 111704310e-09 0s 0s 111708270e-09 1s 1s 111709990e-09 0s 0s 111714590e-09 0s 0s 111718510e-09 1s 1s 111720230e-09 0s 0s 111724870e-09 0s 0s 111728750e-09 1s 1s 111730470e-09 0s 0s 111735150e-09 0s 0s 111738990e-09 1s 1s 111740710e-09 0s 0s 111745430e-09 0s 0s 111749230e-09 1s 1s 111750950e-09 0s 0s 111755710e-09 0s 0s 111759470e-09 1s 1s 111761190e-09 0s 0s 111765990e-09 0s 0s 111769710e-09 1s 1s 111771430e-09 0s 0s 111776270e-09 0s 0s 111779950e-09 1s 1s 111781670e-09 0s 0s 111786550e-09 0s 0s 111790190e-09 1s 1s 111791910e-09 0s 0s 111796830e-09 0s 0s 111800430e-09 1s 1s 111802150e-09 0s 0s 111807110e-09 0s 0s 111810670e-09 1s 1s 111812390e-09 0s 0s 111817390e-09 0s 0s 111820910e-09 1s 1s 111822630e-09 0s 0s 111827670e-09 0s 0s 111831150e-09 1s 1s 111832870e-09 0s 0s 111837950e-09 0s 0s 111841390e-09 1s 1s 111843110e-09 0s 0s 111848230e-09 0s 0s 111851630e-09 1s 1s 111853350e-09 0s 0s 111858510e-09 0s 0s 111861870e-09 1s 1s 111863590e-09 0s 0s 111868790e-09 0s 0s 111872110e-09 1s 1s 111873830e-09 0s 0s 111879070e-09 0s 0s 111882350e-09 1s 1s 111884070e-09 0s 0s 111889350e-09 0s 0s 111892590e-09 1s 1s 111894310e-09 0s 0s 111899630e-09 0s 0s 111902830e-09 1s 1s 111904550e-09 0s 0s 111909910e-09 0s 0s 111913070e-09 1s 1s 111914790e-09 0s 0s 111920190e-09 0s 0s 111923310e-09 1s 1s 111925030e-09 0s 0s 111930470e-09 0s 0s 111933550e-09 1s 1s 111935270e-09 0s 0s 111940750e-09 0s 0s 111943790e-09 1s 1s 111945510e-09 0s 0s 111951030e-09 0s 0s 111954030e-09 1s 1s 111955750e-09 0s 0s 111961310e-09 0s 0s 111964270e-09 1s 1s 111965990e-09 0s 0s 111971590e-09 0s 0s 111974510e-09 1s 1s 111976230e-09 0s 0s 111981870e-09 0s 0s 111984750e-09 1s 1s 111986470e-09 0s 0s 111992150e-09 0s 0s 111994990e-09 1s 1s 111996710e-09 0s 0s 112002430e-09 0s 0s 112005230e-09 1s 1s 112006950e-09 0s 0s 112012710e-09 0s 0s 112015470e-09 1s 1s 112017190e-09 0s 0s 112022990e-09 0s 0s 112025710e-09 1s 1s 112027430e-09 0s 0s 112033270e-09 0s 0s 112035950e-09 1s 1s 112037670e-09 0s 0s 112043550e-09 0s 0s 112046190e-09 1s 1s 112047910e-09 0s 0s 112053830e-09 0s 0s 112056430e-09 1s 1s 112058150e-09 0s 0s 112064110e-09 0s 0s 112066670e-09 1s 1s 112068390e-09 0s 0s 112074390e-09 0s 0s 112076910e-09 1s 1s 112078630e-09 0s 0s 112084670e-09 0s 0s 112087150e-09 1s 1s 112088870e-09 0s 0s 112094950e-09 0s 0s 112097390e-09 1s 1s 112099110e-09 0s 0s 112105230e-09 0s 0s 112107630e-09 1s 1s 112109350e-09 0s 0s 112115510e-09 0s 0s 112117870e-09 1s 1s 112119590e-09 0s 0s 112125790e-09 0s 0s 112128110e-09 1s 1s 112129830e-09 0s 0s 112136070e-09 0s 0s 112138350e-09 1s 1s 112140070e-09 0s 0s 112146350e-09 0s 0s 112148590e-09 1s 1s 112150310e-09 0s 0s 112156630e-09 0s 0s 112158830e-09 1s 1s 112160550e-09 0s 0s 112166910e-09 0s 0s 112169070e-09 1s 1s 112170790e-09 0s 0s 112177190e-09 0s 0s 112179310e-09 1s 1s 112181030e-09 0s 0s 112187470e-09 0s 0s 112189550e-09 1s 1s 112191270e-09 0s 0s 112197750e-09 0s 0s 112199790e-09 1s 1s 112201510e-09 0s 0s 112208030e-09 0s 0s 112210030e-09 1s 1s 112211750e-09 0s 0s 112218310e-09 0s 0s 112220270e-09 1s 1s 112221990e-09 0s 0s 112228590e-09 0s 0s 112230510e-09 1s 1s 112232230e-09 0s 0s 112238870e-09 0s 0s 112240750e-09 1s 1s 112242470e-09 0s 0s 112249150e-09 0s 0s 112250990e-09 1s 1s 112252710e-09 0s 0s 112259430e-09 0s 0s 112261230e-09 1s 1s 112262950e-09 0s 0s 112269710e-09 0s 0s 112271470e-09 1s 1s 112273190e-09 0s 0s 112279990e-09 0s 0s 112281710e-09 1s 1s 112283430e-09 0s 0s 112290270e-09 0s 0s 112291950e-09 1s 1s 112293670e-09 0s 0s 112300550e-09 0s 0s 112302190e-09 1s 1s 112303910e-09 0s 0s 112310830e-09 0s 0s 112312430e-09 1s 1s 112314150e-09 0s 0s 112321110e-09 0s 0s 112322670e-09 1s 1s 112324390e-09 0s 0s 112331390e-09 0s 0s 112332910e-09 1s 1s 112334630e-09 0s 0s 112341670e-09 0s 0s 112343150e-09 1s 1s 112344870e-09 0s 0s 112351950e-09 0s 0s 112353390e-09 1s 1s 112355110e-09 0s 0s 112362230e-09 0s 0s 112363630e-09 1s 1s 112365350e-09 0s 0s 112372510e-09 0s 0s 112373870e-09 1s 1s 112375590e-09 0s 0s 112382790e-09 0s 0s 112384110e-09 1s 1s 112385830e-09 0s 0s 112393070e-09 0s 0s 112394350e-09 1s 1s 112396070e-09 0s 0s 112403350e-09 0s 0s 112404590e-09 1s 1s 112406310e-09 0s 0s 112413630e-09 0s 0s 112414830e-09 1s 1s 112416550e-09 0s 0s 112423910e-09 0s 0s 112425070e-09 1s 1s 112426790e-09 0s 0s 112434190e-09 0s 0s 112435310e-09 1s 1s 112437030e-09 0s 0s 112444470e-09 0s 0s 112445550e-09 1s 1s 112447270e-09 0s 0s 112454750e-09 0s 0s 112455790e-09 1s 1s 112457510e-09 0s 0s 112465030e-09 0s 0s 112466030e-09 1s 1s 112467750e-09 0s 0s 112475310e-09 0s 0s 112476270e-09 1s 1s 112477990e-09 0s 0s 112485590e-09 0s 0s 112486510e-09 1s 1s 112488230e-09 0s 0s 112495870e-09 0s 0s 112496750e-09 1s 1s 112498470e-09 0s 0s 112506150e-09 0s 0s 112506990e-09 1s 1s 112508710e-09 0s 0s 112516430e-09 0s 0s 112517230e-09 1s 1s 112518950e-09 0s 0s 112526710e-09 0s 0s 112527470e-09 1s 1s 112529190e-09 0s 0s 112536990e-09 0s 0s 112537710e-09 1s 1s 112539430e-09 0s 0s 112547270e-09 0s 0s 112547950e-09 1s 1s 112549670e-09 0s 0s 112557550e-09 0s 0s 112558190e-09 1s 1s 112559910e-09 0s 0s 112567830e-09 0s 0s 112568430e-09 1s 1s 112570150e-09 0s 0s 112578110e-09 0s 0s 112578670e-09 1s 1s 112580390e-09 0s 0s 112588390e-09 0s 0s 112588910e-09 1s 1s 112590630e-09 0s 0s 112598670e-09 0s 0s 112599150e-09 1s 1s 112600870e-09 0s 0s 112608950e-09 0s 0s 112609390e-09 1s 1s 112611110e-09 0s 0s 112619230e-09 0s 0s 112619630e-09 1s 1s 112621350e-09 0s 0s 112629510e-09 0s 0s 112629870e-09 1s 1s 112631590e-09 0s 0s 112639790e-09 0s 0s 112640110e-09 1s 1s 112641830e-09 0s 0s 112650070e-09 0s 0s 112650350e-09 1s 1s 112652070e-09 0s 0s 112660350e-09 0s 0s 112660590e-09 1s 1s 112662310e-09 0s 0s 112670630e-09 0s 0s 112670830e-09 1s 1s 112672550e-09 0s 0s 112680910e-09 0s 0s 112681070e-09 1s 1s 112682790e-09 0s 0s 112691190e-09 0s 0s 112691310e-09 1s 1s 112693030e-09 0s 0s 112701470e-09 0s 0s 112701550e-09 1s 1s 112703270e-09 0s 0s 112711750e-09 0s 0s 112711790e-09 1s 1s 112713510e-09 0s 0s 112722030e-09 1s 1s 112722070e-09 1s 1s 112723790e-09 0s 0s 112732270e-09 1s 1s 112732350e-09 1s 1s 112734030e-09 0s 0s 112742510e-09 1s 1s 112742630e-09 1s 1s 112744270e-09 0s 0s 112752750e-09 1s 1s 112752910e-09 1s 1s 112754510e-09 0s 0s 112762990e-09 1s 1s 112763190e-09 1s 1s 112764750e-09 0s 0s 112773230e-09 1s 1s 112773470e-09 1s 1s 112774990e-09 0s 0s 112783470e-09 1s 1s 112783750e-09 1s 1s 112785230e-09 0s 0s 112793710e-09 1s 1s 112794030e-09 1s 1s 112795470e-09 0s 0s 112803950e-09 1s 1s 112804310e-09 1s 1s 112805710e-09 0s 0s 112814190e-09 1s 1s 112814590e-09 1s 1s 112815950e-09 0s 0s 112824430e-09 1s 1s 112824870e-09 1s 1s 112826190e-09 0s 0s 112834670e-09 1s 1s 112835150e-09 1s 1s 112836430e-09 0s 0s 112844910e-09 1s 1s 112845430e-09 1s 1s 112846670e-09 0s 0s 112855150e-09 1s 1s 112855710e-09 1s 1s 112856910e-09 0s 0s 112865390e-09 1s 1s 112865990e-09 1s 1s 112867150e-09 0s 0s 112875630e-09 1s 1s 112876270e-09 1s 1s 112877390e-09 0s 0s 112885870e-09 1s 1s 112886550e-09 1s 1s 112887630e-09 0s 0s 112896110e-09 1s 1s 112896830e-09 1s 1s 112897870e-09 0s 0s 112906350e-09 1s 1s 112907110e-09 1s 1s 112908110e-09 0s 0s 112916590e-09 1s 1s 112917390e-09 1s 1s 112918350e-09 0s 0s 112926830e-09 1s 1s 112927670e-09 1s 1s 112928590e-09 0s 0s 112937070e-09 1s 1s 112937950e-09 1s 1s 112938830e-09 0s 0s 112947310e-09 1s 1s 112948230e-09 1s 1s 112949070e-09 0s 0s 112957550e-09 1s 1s 112958510e-09 1s 1s 112959310e-09 0s 0s 112967790e-09 1s 1s 112968790e-09 1s 1s 112969550e-09 0s 0s 112978030e-09 1s 1s 112979070e-09 1s 1s 112979790e-09 0s 0s 112988270e-09 1s 1s 112989350e-09 1s 1s 112990030e-09 0s 0s 112998510e-09 1s 1s 112999630e-09 1s 1s 113000270e-09 0s 0s 113008750e-09 1s 1s 113009910e-09 1s 1s 113010510e-09 0s 0s 113018990e-09 1s 1s 113020190e-09 1s 1s 113020750e-09 0s 0s 113029230e-09 1s 1s 113030470e-09 1s 1s 113030990e-09 0s 0s 113039470e-09 1s 1s 113040750e-09 1s 1s 113041230e-09 0s 0s 113049710e-09 1s 1s 113051030e-09 1s 1s 113051470e-09 0s 0s 113059950e-09 1s 1s 113061310e-09 1s 1s 113061710e-09 0s 0s 113070190e-09 1s 1s 113071590e-09 1s 1s 113071950e-09 0s 0s 113080430e-09 1s 1s 113081870e-09 1s 1s 113082190e-09 0s 0s 113090670e-09 1s 1s 113092150e-09 1s 1s 113092430e-09 0s 0s 113100910e-09 1s 1s 113102430e-09 1s 1s 113102670e-09 0s 0s 113111150e-09 1s 1s 113112710e-09 1s 1s 113112910e-09 0s 0s 113121390e-09 1s 1s 113122990e-09 1s 1s 113123150e-09 0s 0s 113131630e-09 1s 1s 113133270e-09 1s 1s 113133390e-09 0s 0s 113141870e-09 1s 1s 113143550e-09 1s 1s 113143630e-09 0s 0s 113152110e-09 1s 1s 113153830e-09 1s 1s 113153870e-09 0s 0s 113162350e-09 1s 1s 113164110e-09 0s 0s 113172590e-09 1s 1s 113174350e-09 0s 0s 113174390e-09 0s 0s 113182830e-09 1s 1s 113184590e-09 0s 0s 113184670e-09 0s 0s 113193070e-09 1s 1s 113194830e-09 0s 0s 113194950e-09 0s 0s 113203310e-09 1s 1s 113205070e-09 0s 0s 113205230e-09 0s 0s 113213550e-09 1s 1s 113215310e-09 0s 0s 113215510e-09 0s 0s 113223790e-09 1s 1s 113225550e-09 0s 0s 113225790e-09 0s 0s 113234030e-09 1s 1s 113235790e-09 0s 0s 113236070e-09 0s 0s 113244270e-09 1s 1s 113246030e-09 0s 0s 113246350e-09 0s 0s 113254510e-09 1s 1s 113256270e-09 0s 0s 113256630e-09 0s 0s 113264750e-09 1s 1s 113266510e-09 0s 0s 113266910e-09 0s 0s 113274990e-09 1s 1s 113276750e-09 0s 0s 113277190e-09 0s 0s 113285230e-09 1s 1s 113286990e-09 0s 0s 113287470e-09 0s 0s 113295470e-09 1s 1s 113297230e-09 0s 0s 113297750e-09 0s 0s 113305710e-09 1s 1s 113307470e-09 0s 0s 113308030e-09 0s 0s 113315950e-09 1s 1s 113317710e-09 0s 0s 113318310e-09 0s 0s 113326190e-09 1s 1s 113327950e-09 0s 0s 113328590e-09 0s 0s 113336430e-09 1s 1s 113338190e-09 0s 0s 113338870e-09 0s 0s 113346670e-09 1s 1s 113348430e-09 0s 0s 113349150e-09 0s 0s 113356910e-09 1s 1s 113358670e-09 0s 0s 113359430e-09 0s 0s 113367150e-09 1s 1s 113368910e-09 0s 0s 113369710e-09 0s 0s 113377390e-09 1s 1s 113379150e-09 0s 0s 113379990e-09 0s 0s 113387630e-09 1s 1s 113389390e-09 0s 0s 113390270e-09 0s 0s 113397870e-09 1s 1s 113399630e-09 0s 0s 113400550e-09 0s 0s 113408110e-09 1s 1s 113409870e-09 0s 0s 113410830e-09 0s 0s 113418350e-09 1s 1s 113420110e-09 0s 0s 113421110e-09 0s 0s 113428590e-09 1s 1s 113430350e-09 0s 0s 113431390e-09 0s 0s 113438830e-09 1s 1s 113440590e-09 0s 0s 113441670e-09 0s 0s 113449070e-09 1s 1s 113450830e-09 0s 0s 113451950e-09 0s 0s 113459310e-09 1s 1s 113461070e-09 0s 0s 113462230e-09 0s 0s 113469550e-09 1s 1s 113471310e-09 0s 0s 113472510e-09 0s 0s 113479790e-09 1s 1s 113481550e-09 0s 0s 113482790e-09 0s 0s 113490030e-09 1s 1s 113491790e-09 0s 0s 113493070e-09 0s 0s 113500270e-09 1s 1s 113502030e-09 0s 0s 113503350e-09 0s 0s 113510510e-09 1s 1s 113512270e-09 0s 0s 113513630e-09 0s 0s 113520750e-09 1s 1s 113522510e-09 0s 0s 113523910e-09 0s 0s 113530990e-09 1s 1s 113532750e-09 0s 0s 113534190e-09 0s 0s 113541230e-09 1s 1s 113542990e-09 0s 0s 113544470e-09 0s 0s 113551470e-09 1s 1s 113553230e-09 0s 0s 113554750e-09 0s 0s 113561710e-09 1s 1s 113563470e-09 0s 0s 113565030e-09 0s 0s 113571950e-09 1s 1s 113573710e-09 0s 0s 113575310e-09 0s 0s 113582190e-09 1s 1s 113583950e-09 0s 0s 113585590e-09 0s 0s 113592430e-09 1s 1s 113594190e-09 0s 0s 113595870e-09 0s 0s 113602670e-09 1s 1s 113604430e-09 0s 0s 113606150e-09 0s 0s 113612910e-09 1s 1s 113614670e-09 0s 0s 113616430e-09 0s 0s 113623150e-09 1s 1s 113624910e-09 0s 0s 113626710e-09 0s 0s 113633390e-09 1s 1s 113635150e-09 0s 0s 113636990e-09 0s 0s 113643630e-09 1s 1s 113645390e-09 0s 0s 113647270e-09 0s 0s 113653870e-09 1s 1s 113655630e-09 0s 0s 113657550e-09 0s 0s 113664110e-09 1s 1s 113665870e-09 0s 0s 113667830e-09 0s 0s 113674350e-09 1s 1s 113676110e-09 0s 0s 113678110e-09 0s 0s 113684590e-09 1s 1s 113686350e-09 0s 0s 113688390e-09 0s 0s 113694830e-09 1s 1s 113696590e-09 0s 0s 113698670e-09 0s 0s 113705070e-09 1s 1s 113706830e-09 0s 0s 113708950e-09 0s 0s 113715310e-09 1s 1s 113717070e-09 0s 0s 113719230e-09 0s 0s 113725550e-09 1s 1s 113727310e-09 0s 0s 113729510e-09 0s 0s 113735790e-09 1s 1s 113737550e-09 0s 0s 113739790e-09 0s 0s 113746030e-09 1s 1s 113747790e-09 0s 0s 113750070e-09 0s 0s 113756270e-09 1s 1s 113758030e-09 0s 0s 113760350e-09 0s 0s 113766510e-09 1s 1s 113768270e-09 0s 0s 113770630e-09 0s 0s 113776750e-09 1s 1s 113778510e-09 0s 0s 113780910e-09 0s 0s 113786990e-09 1s 1s 113788750e-09 0s 0s 113791190e-09 0s 0s 113797230e-09 1s 1s 113798990e-09 0s 0s 113801470e-09 0s 0s 113807470e-09 1s 1s 113809230e-09 0s 0s 113811750e-09 0s 0s 113817710e-09 1s 1s 113819470e-09 0s 0s 113822030e-09 0s 0s 113827950e-09 1s 1s 113829710e-09 0s 0s 113832310e-09 0s 0s 113838190e-09 1s 1s 113839950e-09 0s 0s 113842590e-09 0s 0s 113848430e-09 1s 1s 113850190e-09 0s 0s 113852870e-09 0s 0s 113858670e-09 1s 1s 113860430e-09 0s 0s 113863150e-09 0s 0s 113868910e-09 1s 1s 113870670e-09 0s 0s 113873430e-09 0s 0s 113879150e-09 1s 1s 113880910e-09 0s 0s 113883710e-09 0s 0s 113889390e-09 1s 1s 113891150e-09 0s 0s 113893990e-09 0s 0s 113899630e-09 1s 1s 113901390e-09 0s 0s 113904270e-09 0s 0s 113909870e-09 1s 1s 113911630e-09 0s 0s 113914550e-09 0s 0s 113920110e-09 1s 1s 113921870e-09 0s 0s 113924830e-09 0s 0s 113930350e-09 1s 1s 113932110e-09 0s 0s 113935110e-09 0s 0s 113940590e-09 1s 1s 113942350e-09 0s 0s 113945390e-09 0s 0s 113950830e-09 1s 1s 113952590e-09 0s 0s 113955670e-09 0s 0s 113961070e-09 1s 1s 113962830e-09 0s 0s 113965950e-09 0s 0s 113971310e-09 1s 1s 113973070e-09 0s 0s 113976230e-09 0s 0s 113981550e-09 1s 1s 113983310e-09 0s 0s 113986510e-09 0s 0s 113991790e-09 1s 1s 113993550e-09 0s 0s 113996790e-09 0s 0s 114002030e-09 1s 1s 114003790e-09 0s 0s 114007070e-09 0s 0s 114012270e-09 1s 1s 114014030e-09 0s 0s 114017350e-09 0s 0s 114022510e-09 1s 1s 114024270e-09 0s 0s 114027630e-09 0s 0s 114032750e-09 1s 1s 114034510e-09 0s 0s 114037910e-09 0s 0s 114042990e-09 1s 1s 114044750e-09 0s 0s 114048190e-09 0s 0s 114053230e-09 1s 1s 114054990e-09 0s 0s 114058470e-09 0s 0s 114063470e-09 1s 1s 114065230e-09 0s 0s 114068750e-09 0s 0s 114073710e-09 1s 1s 114075470e-09 0s 0s 114079030e-09 0s 0s 114083950e-09 1s 1s 114085710e-09 0s 0s 114089310e-09 0s 0s 114094190e-09 1s 1s 114095950e-09 0s 0s 114099590e-09 0s 0s 114104430e-09 1s 1s 114106190e-09 0s 0s 114109870e-09 0s 0s 114114670e-09 1s 1s 114116430e-09 0s 0s 114120150e-09 0s 0s 114124910e-09 1s 1s 114126670e-09 0s 0s 114130430e-09 0s 0s 114135150e-09 1s 1s 114136910e-09 0s 0s 114140710e-09 0s 0s 114145390e-09 1s 1s 114147150e-09 0s 0s 114150990e-09 0s 0s 114155630e-09 1s 1s 114157390e-09 0s 0s 114161270e-09 0s 0s 114165870e-09 1s 1s 114167630e-09 0s 0s 114171550e-09 0s 0s 114176110e-09 1s 1s 114177870e-09 0s 0s 114181830e-09 0s 0s 114186350e-09 1s 1s 114188110e-09 0s 0s 114192110e-09 0s 0s 114196590e-09 1s 1s 114198350e-09 0s 0s 114202390e-09 0s 0s 114206830e-09 1s 1s 114208590e-09 0s 0s 114212670e-09 0s 0s 114217070e-09 1s 1s 114218830e-09 0s 0s 114222950e-09 0s 0s 114227310e-09 1s 1s 114229070e-09 0s 0s 114233230e-09 0s 0s 114237550e-09 1s 1s 114239310e-09 0s 0s 114243510e-09 0s 0s 114247790e-09 1s 1s 114249550e-09 0s 0s 114253790e-09 0s 0s 114258030e-09 1s 1s 114259790e-09 0s 0s 114264070e-09 0s 0s 114268270e-09 1s 1s 114270030e-09 0s 0s 114274350e-09 0s 0s 114278510e-09 1s 1s 114280270e-09 0s 0s 114284630e-09 0s 0s 114288750e-09 1s 1s 114290510e-09 0s 0s 114294910e-09 0s 0s 114298990e-09 1s 1s 114300750e-09 0s 0s 114305190e-09 0s 0s 114309230e-09 1s 1s 114310990e-09 0s 0s 114315470e-09 0s 0s 114319470e-09 1s 1s 114321230e-09 0s 0s 114325750e-09 0s 0s 114329710e-09 1s 1s 114331470e-09 0s 0s 114336030e-09 0s 0s 114339950e-09 1s 1s 114341710e-09 0s 0s 114346310e-09 0s 0s 114350190e-09 1s 1s 114351950e-09 0s 0s 114356590e-09 0s 0s 114360430e-09 1s 1s 114362190e-09 0s 0s 114366870e-09 0s 0s 114370670e-09 1s 1s 114372430e-09 0s 0s 114377150e-09 0s 0s 114380910e-09 1s 1s 114382670e-09 0s 0s 114387430e-09 0s 0s 114391150e-09 1s 1s 114392910e-09 0s 0s 114397710e-09 0s 0s 114401390e-09 1s 1s 114403150e-09 0s 0s 114407990e-09 0s 0s 114411630e-09 1s 1s 114413390e-09 0s 0s 114418270e-09 0s 0s 114421870e-09 1s 1s 114423630e-09 0s 0s 114428550e-09 0s 0s 114432110e-09 1s 1s 114433870e-09 0s 0s 114438830e-09 0s 0s 114442350e-09 1s 1s 114444110e-09 0s 0s 114449110e-09 0s 0s 114452590e-09 1s 1s 114454350e-09 0s 0s 114459390e-09 0s 0s 114462830e-09 1s 1s 114464590e-09 0s 0s 114469670e-09 0s 0s 114473070e-09 1s 1s 114474830e-09 0s 0s 114479950e-09 0s 0s 114483310e-09 1s 1s 114485070e-09 0s 0s 114490230e-09 0s 0s 114493550e-09 1s 1s 114495310e-09 0s 0s 114500510e-09 0s 0s 114503790e-09 1s 1s 114505550e-09 0s 0s 114510790e-09 0s 0s 114514030e-09 1s 1s 114515790e-09 0s 0s 114521070e-09 0s 0s 114524270e-09 1s 1s 114526030e-09 0s 0s 114531350e-09 0s 0s 114534510e-09 1s 1s 114536270e-09 0s 0s 114541630e-09 0s 0s 114544750e-09 1s 1s 114546510e-09 0s 0s 114551910e-09 0s 0s 114554990e-09 1s 1s 114556750e-09 0s 0s 114562190e-09 0s 0s 114565230e-09 1s 1s 114566990e-09 0s 0s 114572470e-09 0s 0s 114575470e-09 1s 1s 114577230e-09 0s 0s 114582750e-09 0s 0s 114585710e-09 1s 1s 114587470e-09 0s 0s 114593030e-09 0s 0s 114595950e-09 1s 1s 114597710e-09 0s 0s 114603310e-09 0s 0s 114606190e-09 1s 1s 114607950e-09 0s 0s 114613590e-09 0s 0s 114616430e-09 1s 1s 114618190e-09 0s 0s 114623870e-09 0s 0s 114626670e-09 1s 1s 114628430e-09 0s 0s 114634150e-09 0s 0s 114636910e-09 1s 1s 114638670e-09 0s 0s 114644430e-09 0s 0s 114647150e-09 1s 1s 114648910e-09 0s 0s 114654710e-09 0s 0s 114657390e-09 1s 1s 114659150e-09 0s 0s 114664990e-09 0s 0s 114667630e-09 1s 1s 114669390e-09 0s 0s 114675270e-09 0s 0s 114677870e-09 1s 1s 114679630e-09 0s 0s 114685550e-09 0s 0s 114688110e-09 1s 1s 114689870e-09 0s 0s 114695830e-09 0s 0s 114698350e-09 1s 1s 114700110e-09 0s 0s 114706110e-09 0s 0s 114708590e-09 1s 1s 114710350e-09 0s 0s 114716390e-09 0s 0s 114718830e-09 1s 1s 114720590e-09 0s 0s 114726670e-09 0s 0s 114729070e-09 1s 1s 114730830e-09 0s 0s 114736950e-09 0s 0s 114739310e-09 1s 1s 114741070e-09 0s 0s 114747230e-09 0s 0s 114749550e-09 1s 1s 114751310e-09 0s 0s 114757510e-09 0s 0s 114759790e-09 1s 1s 114761550e-09 0s 0s 114767790e-09 0s 0s 114770030e-09 1s 1s 114771790e-09 0s 0s 114778070e-09 0s 0s 114780270e-09 1s 1s 114782030e-09 0s 0s 114788350e-09 0s 0s 114790510e-09 1s 1s 114792270e-09 0s 0s 114798630e-09 0s 0s 114800750e-09 1s 1s 114802510e-09 0s 0s 114808910e-09 0s 0s 114810990e-09 1s 1s 114812750e-09 0s 0s 114819190e-09 0s 0s 114821230e-09 1s 1s 114822990e-09 0s 0s 114829470e-09 0s 0s 114831470e-09 1s 1s 114833230e-09 0s 0s 114839750e-09 0s 0s 114841710e-09 1s 1s 114843470e-09 0s 0s 114850030e-09 0s 0s 114851950e-09 1s 1s 114853710e-09 0s 0s 114860310e-09 0s 0s 114862190e-09 1s 1s 114863950e-09 0s 0s 114870590e-09 0s 0s 114872430e-09 1s 1s 114874190e-09 0s 0s 114880870e-09 0s 0s 114882670e-09 1s 1s 114884430e-09 0s 0s 114891150e-09 0s 0s 114892910e-09 1s 1s 114894670e-09 0s 0s 114901430e-09 0s 0s 114903150e-09 1s 1s 114904910e-09 0s 0s 114911710e-09 0s 0s 114913390e-09 1s 1s 114915150e-09 0s 0s 114921990e-09 0s 0s 114923630e-09 1s 1s 114925390e-09 0s 0s 114932270e-09 0s 0s 114933870e-09 1s 1s 114935630e-09 0s 0s 114942550e-09 0s 0s 114944110e-09 1s 1s 114945870e-09 0s 0s 114952830e-09 0s 0s 114954350e-09 1s 1s 114956110e-09 0s 0s 114963110e-09 0s 0s 114964590e-09 1s 1s 114966350e-09 0s 0s 114973390e-09 0s 0s 114974830e-09 1s 1s 114976590e-09 0s 0s 114983670e-09 0s 0s 114985070e-09 1s 1s 114986830e-09 0s 0s 114993950e-09 0s 0s 114995310e-09 1s 1s 114997070e-09 0s 0s 115004230e-09 0s 0s 115005550e-09 1s 1s 115007310e-09 0s 0s 115014510e-09 0s 0s 115015790e-09 1s 1s 115017550e-09 0s 0s 115024790e-09 0s 0s 115026030e-09 1s 1s 115027790e-09 0s 0s 115035070e-09 0s 0s 115036270e-09 1s 1s 115038030e-09 0s 0s 115045350e-09 0s 0s 115046510e-09 1s 1s 115048270e-09 0s 0s 115055630e-09 0s 0s 115056750e-09 1s 1s 115058510e-09 0s 0s 115065910e-09 0s 0s 115066990e-09 1s 1s 115068750e-09 0s 0s 115076190e-09 0s 0s 115077230e-09 1s 1s 115078990e-09 0s 0s 115086470e-09 0s 0s 115087470e-09 1s 1s 115089230e-09 0s 0s 115096750e-09 0s 0s 115097710e-09 1s 1s 115099470e-09 0s 0s 115107030e-09 0s 0s 115107950e-09 1s 1s 115109710e-09 0s 0s 115117310e-09 0s 0s 115118190e-09 1s 1s 115119950e-09 0s 0s 115127590e-09 0s 0s 115128430e-09 1s 1s 115130190e-09 0s 0s 115137870e-09 0s 0s 115138670e-09 1s 1s 115140430e-09 0s 0s 115148150e-09 0s 0s 115148910e-09 1s 1s 115150670e-09 0s 0s 115158430e-09 0s 0s 115159150e-09 1s 1s 115160910e-09 0s 0s 115168710e-09 0s 0s 115169390e-09 1s 1s 115171150e-09 0s 0s 115178990e-09 0s 0s 115179630e-09 1s 1s 115181390e-09 0s 0s 115189270e-09 0s 0s 115189870e-09 1s 1s 115191630e-09 0s 0s 115199550e-09 0s 0s 115200110e-09 1s 1s 115201870e-09 0s 0s 115209830e-09 0s 0s 115210350e-09 1s 1s 115212110e-09 0s 0s 115220110e-09 0s 0s 115220590e-09 1s 1s 115222350e-09 0s 0s 115230390e-09 0s 0s 115230830e-09 1s 1s 115232590e-09 0s 0s 115240670e-09 0s 0s 115241070e-09 1s 1s 115242830e-09 0s 0s 115250950e-09 0s 0s 115251310e-09 1s 1s 115253070e-09 0s 0s 115261230e-09 0s 0s 115261550e-09 1s 1s 115263310e-09 0s 0s 115271510e-09 0s 0s 115271790e-09 1s 1s 115273550e-09 0s 0s 115281790e-09 0s 0s 115282030e-09 1s 1s 115283790e-09 0s 0s 115292070e-09 0s 0s 115292270e-09 1s 1s 115294030e-09 0s 0s 115302350e-09 0s 0s 115302510e-09 1s 1s 115304270e-09 0s 0s 115312630e-09 0s 0s 115312750e-09 1s 1s 115314510e-09 0s 0s 115322910e-09 0s 0s 115322990e-09 1s 1s 115324750e-09 0s 0s 115333190e-09 0s 0s 115333230e-09 1s 1s 115334990e-09 0s 0s 115343470e-09 1s 1s 115343510e-09 1s 1s 115345270e-09 0s 0s 115353710e-09 1s 1s 115353790e-09 1s 1s 115355510e-09 0s 0s 115363950e-09 1s 1s 115364070e-09 1s 1s 115365750e-09 0s 0s 115374190e-09 1s 1s 115374350e-09 1s 1s 115375990e-09 0s 0s 115384430e-09 1s 1s 115384630e-09 1s 1s 115386230e-09 0s 0s 115394670e-09 1s 1s 115394910e-09 1s 1s 115396470e-09 0s 0s 115404910e-09 1s 1s 115405190e-09 1s 1s 115406710e-09 0s 0s 115415150e-09 1s 1s 115415470e-09 1s 1s 115416950e-09 0s 0s 115425390e-09 1s 1s 115425750e-09 1s 1s 115427190e-09 0s 0s 115435630e-09 1s 1s 115436030e-09 1s 1s 115437430e-09 0s 0s 115445870e-09 1s 1s 115446310e-09 1s 1s 115447670e-09 0s 0s 115456110e-09 1s 1s 115456590e-09 1s 1s 115457910e-09 0s 0s 115466350e-09 1s 1s 115466870e-09 1s 1s 115468150e-09 0s 0s 115476590e-09 1s 1s 115477150e-09 1s 1s 115478390e-09 0s 0s 115486830e-09 1s 1s 115487430e-09 1s 1s 115488630e-09 0s 0s 115497070e-09 1s 1s 115497710e-09 1s 1s 115498870e-09 0s 0s 115507310e-09 1s 1s 115507990e-09 1s 1s 115509110e-09 0s 0s 115517550e-09 1s 1s 115518270e-09 1s 1s 115519350e-09 0s 0s 115527790e-09 1s 1s 115528550e-09 1s 1s 115529590e-09 0s 0s 115538030e-09 1s 1s 115538830e-09 1s 1s 115539830e-09 0s 0s 115548270e-09 1s 1s 115549110e-09 1s 1s 115550070e-09 0s 0s 115558510e-09 1s 1s 115559390e-09 1s 1s 115560310e-09 0s 0s 115568750e-09 1s 1s 115569670e-09 1s 1s 115570550e-09 0s 0s 115578990e-09 1s 1s 115579950e-09 1s 1s 115580790e-09 0s 0s 115589230e-09 1s 1s 115590230e-09 1s 1s 115591030e-09 0s 0s 115599470e-09 1s 1s 115600510e-09 1s 1s 115601270e-09 0s 0s 115609710e-09 1s 1s 115610790e-09 1s 1s 115611510e-09 0s 0s 115619950e-09 1s 1s 115621070e-09 1s 1s 115621750e-09 0s 0s 115630190e-09 1s 1s 115631350e-09 1s 1s 115631990e-09 0s 0s 115640430e-09 1s 1s 115641630e-09 1s 1s 115642230e-09 0s 0s 115650670e-09 1s 1s 115651910e-09 1s 1s 115652470e-09 0s 0s 115660910e-09 1s 1s 115662190e-09 1s 1s 115662710e-09 0s 0s 115671150e-09 1s 1s 115672470e-09 1s 1s 115672950e-09 0s 0s 115681390e-09 1s 1s 115682750e-09 1s 1s 115683190e-09 0s 0s 115691630e-09 1s 1s 115693030e-09 1s 1s 115693430e-09 0s 0s 115701870e-09 1s 1s 115703310e-09 1s 1s 115703670e-09 0s 0s 115712110e-09 1s 1s 115713590e-09 1s 1s 115713910e-09 0s 0s 115722350e-09 1s 1s 115723870e-09 1s 1s 115724150e-09 0s 0s 115732590e-09 1s 1s 115734150e-09 1s 1s 115734390e-09 0s 0s 115742830e-09 1s 1s 115744430e-09 1s 1s 115744630e-09 0s 0s 115753070e-09 1s 1s 115754710e-09 1s 1s 115754870e-09 0s 0s 115763310e-09 1s 1s 115764990e-09 1s 1s 115765110e-09 0s 0s 115773550e-09 1s 1s 115775270e-09 1s 1s 115775350e-09 0s 0s 115783790e-09 1s 1s 115785550e-09 1s 1s 115785590e-09 0s 0s 115794030e-09 1s 1s 115795830e-09 0s 0s 115804270e-09 1s 1s 115806070e-09 0s 0s 115806110e-09 0s 0s 115814510e-09 1s 1s 115816310e-09 0s 0s 115816390e-09 0s 0s 115824750e-09 1s 1s 115826550e-09 0s 0s 115826670e-09 0s 0s 115834990e-09 1s 1s 115836790e-09 0s 0s 115836950e-09 0s 0s 115845230e-09 1s 1s 115847030e-09 0s 0s 115847230e-09 0s 0s 115855470e-09 1s 1s 115857270e-09 0s 0s 115857510e-09 0s 0s 115865710e-09 1s 1s 115867510e-09 0s 0s 115867790e-09 0s 0s 115875950e-09 1s 1s 115877750e-09 0s 0s 115878070e-09 0s 0s 115886190e-09 1s 1s 115887990e-09 0s 0s 115888350e-09 0s 0s 115896430e-09 1s 1s 115898230e-09 0s 0s 115898630e-09 0s 0s 115906670e-09 1s 1s 115908470e-09 0s 0s 115908910e-09 0s 0s 115916910e-09 1s 1s 115918710e-09 0s 0s 115919190e-09 0s 0s 115927150e-09 1s 1s 115928950e-09 0s 0s 115929470e-09 0s 0s 115937390e-09 1s 1s 115939190e-09 0s 0s 115939750e-09 0s 0s 115947630e-09 1s 1s 115949430e-09 0s 0s 115950030e-09 0s 0s 115957870e-09 1s 1s 115959670e-09 0s 0s 115960310e-09 0s 0s 115968110e-09 1s 1s 115969910e-09 0s 0s 115970590e-09 0s 0s 115978350e-09 1s 1s 115980150e-09 0s 0s 115980870e-09 0s 0s 115988590e-09 1s 1s 115990390e-09 0s 0s 115991150e-09 0s 0s 115998830e-09 1s 1s 116000630e-09 0s 0s 116001430e-09 0s 0s 116009070e-09 1s 1s 116010870e-09 0s 0s 116011710e-09 0s 0s 116019310e-09 1s 1s 116021110e-09 0s 0s 116021990e-09 0s 0s 116029550e-09 1s 1s 116031350e-09 0s 0s 116032270e-09 0s 0s 116039790e-09 1s 1s 116041590e-09 0s 0s 116042550e-09 0s 0s 116050030e-09 1s 1s 116051830e-09 0s 0s 116052830e-09 0s 0s 116060270e-09 1s 1s 116062070e-09 0s 0s 116063110e-09 0s 0s 116070510e-09 1s 1s 116072310e-09 0s 0s 116073390e-09 0s 0s 116080750e-09 1s 1s 116082550e-09 0s 0s 116083670e-09 0s 0s 116090990e-09 1s 1s 116092790e-09 0s 0s 116093950e-09 0s 0s 116101230e-09 1s 1s 116103030e-09 0s 0s 116104230e-09 0s 0s 116111470e-09 1s 1s 116113270e-09 0s 0s 116114510e-09 0s 0s 116121710e-09 1s 1s 116123510e-09 0s 0s 116124790e-09 0s 0s 116131950e-09 1s 1s 116133750e-09 0s 0s 116135070e-09 0s 0s 116142190e-09 1s 1s 116143990e-09 0s 0s 116145350e-09 0s 0s 116152430e-09 1s 1s 116154230e-09 0s 0s 116155630e-09 0s 0s 116162670e-09 1s 1s 116164470e-09 0s 0s 116165910e-09 0s 0s 116172910e-09 1s 1s 116174710e-09 0s 0s 116176190e-09 0s 0s 116183150e-09 1s 1s 116184950e-09 0s 0s 116186470e-09 0s 0s 116193390e-09 1s 1s 116195190e-09 0s 0s 116196750e-09 0s 0s 116203630e-09 1s 1s 116205430e-09 0s 0s 116207030e-09 0s 0s 116213870e-09 1s 1s 116215670e-09 0s 0s 116217310e-09 0s 0s 116224110e-09 1s 1s 116225910e-09 0s 0s 116227590e-09 0s 0s 116234350e-09 1s 1s 116236150e-09 0s 0s 116237870e-09 0s 0s 116244590e-09 1s 1s 116246390e-09 0s 0s 116248150e-09 0s 0s 116254830e-09 1s 1s 116256630e-09 0s 0s 116258430e-09 0s 0s 116265070e-09 1s 1s 116266870e-09 0s 0s 116268710e-09 0s 0s 116275310e-09 1s 1s 116277110e-09 0s 0s 116278990e-09 0s 0s 116285550e-09 1s 1s 116287350e-09 0s 0s 116289270e-09 0s 0s 116295790e-09 1s 1s 116297590e-09 0s 0s 116299550e-09 0s 0s 116306030e-09 1s 1s 116307830e-09 0s 0s 116309830e-09 0s 0s 116316270e-09 1s 1s 116318070e-09 0s 0s 116320110e-09 0s 0s 116326510e-09 1s 1s 116328310e-09 0s 0s 116330390e-09 0s 0s 116336750e-09 1s 1s 116338550e-09 0s 0s 116340670e-09 0s 0s 116346990e-09 1s 1s 116348790e-09 0s 0s 116350950e-09 0s 0s 116357230e-09 1s 1s 116359030e-09 0s 0s 116361230e-09 0s 0s 116367470e-09 1s 1s 116369270e-09 0s 0s 116371510e-09 0s 0s 116377710e-09 1s 1s 116379510e-09 0s 0s 116381790e-09 0s 0s 116387950e-09 1s 1s 116389750e-09 0s 0s 116392070e-09 0s 0s 116398190e-09 1s 1s 116399990e-09 0s 0s 116402350e-09 0s 0s 116408430e-09 1s 1s 116410230e-09 0s 0s 116412630e-09 0s 0s 116418670e-09 1s 1s 116420470e-09 0s 0s 116422910e-09 0s 0s 116428910e-09 1s 1s 116430710e-09 0s 0s 116433190e-09 0s 0s 116439150e-09 1s 1s 116440950e-09 0s 0s 116443470e-09 0s 0s 116449390e-09 1s 1s 116451190e-09 0s 0s 116453750e-09 0s 0s 116459630e-09 1s 1s 116461430e-09 0s 0s 116464030e-09 0s 0s 116469870e-09 1s 1s 116471670e-09 0s 0s 116474310e-09 0s 0s 116480110e-09 1s 1s 116481910e-09 0s 0s 116484590e-09 0s 0s 116490350e-09 1s 1s 116492150e-09 0s 0s 116494870e-09 0s 0s 116500590e-09 1s 1s 116502390e-09 0s 0s 116505150e-09 0s 0s 116510830e-09 1s 1s 116512630e-09 0s 0s 116515430e-09 0s 0s 116521070e-09 1s 1s 116522870e-09 0s 0s 116525710e-09 0s 0s 116531310e-09 1s 1s 116533110e-09 0s 0s 116535990e-09 0s 0s 116541550e-09 1s 1s 116543350e-09 0s 0s 116546270e-09 0s 0s 116551790e-09 1s 1s 116553590e-09 0s 0s 116556550e-09 0s 0s 116562030e-09 1s 1s 116563830e-09 0s 0s 116566830e-09 0s 0s 116572270e-09 1s 1s 116574070e-09 0s 0s 116577110e-09 0s 0s 116582510e-09 1s 1s 116584310e-09 0s 0s 116587390e-09 0s 0s 116592750e-09 1s 1s 116594550e-09 0s 0s 116597670e-09 0s 0s 116602990e-09 1s 1s 116604790e-09 0s 0s 116607950e-09 0s 0s 116613230e-09 1s 1s 116615030e-09 0s 0s 116618230e-09 0s 0s 116623470e-09 1s 1s 116625270e-09 0s 0s 116628510e-09 0s 0s 116633710e-09 1s 1s 116635510e-09 0s 0s 116638790e-09 0s 0s 116643950e-09 1s 1s 116645750e-09 0s 0s 116649070e-09 0s 0s 116654190e-09 1s 1s 116655990e-09 0s 0s 116659350e-09 0s 0s 116664430e-09 1s 1s 116666230e-09 0s 0s 116669630e-09 0s 0s 116674670e-09 1s 1s 116676470e-09 0s 0s 116679910e-09 0s 0s 116684910e-09 1s 1s 116686710e-09 0s 0s 116690190e-09 0s 0s 116695150e-09 1s 1s 116696950e-09 0s 0s 116700470e-09 0s 0s 116705390e-09 1s 1s 116707190e-09 0s 0s 116710750e-09 0s 0s 116715630e-09 1s 1s 116717430e-09 0s 0s 116721030e-09 0s 0s 116725870e-09 1s 1s 116727670e-09 0s 0s 116731310e-09 0s 0s 116736110e-09 1s 1s 116737910e-09 0s 0s 116741590e-09 0s 0s 116746350e-09 1s 1s 116748150e-09 0s 0s 116751870e-09 0s 0s 116756590e-09 1s 1s 116758390e-09 0s 0s 116762150e-09 0s 0s 116766830e-09 1s 1s 116768630e-09 0s 0s 116772430e-09 0s 0s 116777070e-09 1s 1s 116778870e-09 0s 0s 116782710e-09 0s 0s 116787310e-09 1s 1s 116789110e-09 0s 0s 116792990e-09 0s 0s 116797550e-09 1s 1s 116799350e-09 0s 0s 116803270e-09 0s 0s 116807790e-09 1s 1s 116809590e-09 0s 0s 116813550e-09 0s 0s 116818030e-09 1s 1s 116819830e-09 0s 0s 116823830e-09 0s 0s 116828270e-09 1s 1s 116830070e-09 0s 0s 116834110e-09 0s 0s 116838510e-09 1s 1s 116840310e-09 0s 0s 116844390e-09 0s 0s 116848750e-09 1s 1s 116850550e-09 0s 0s 116854670e-09 0s 0s 116858990e-09 1s 1s 116860790e-09 0s 0s 116864950e-09 0s 0s 116869230e-09 1s 1s 116871030e-09 0s 0s 116875230e-09 0s 0s 116879470e-09 1s 1s 116881270e-09 0s 0s 116885510e-09 0s 0s 116889710e-09 1s 1s 116891510e-09 0s 0s 116895790e-09 0s 0s 116899950e-09 1s 1s 116901750e-09 0s 0s 116906070e-09 0s 0s 116910190e-09 1s 1s 116911990e-09 0s 0s 116916350e-09 0s 0s 116920430e-09 1s 1s 116922230e-09 0s 0s 116926630e-09 0s 0s 116930670e-09 1s 1s 116932470e-09 0s 0s 116936910e-09 0s 0s 116940910e-09 1s 1s 116942710e-09 0s 0s 116947190e-09 0s 0s 116951150e-09 1s 1s 116952950e-09 0s 0s 116957470e-09 0s 0s 116961390e-09 1s 1s 116963190e-09 0s 0s 116967750e-09 0s 0s 116971630e-09 1s 1s 116973430e-09 0s 0s 116978030e-09 0s 0s 116981870e-09 1s 1s 116983670e-09 0s 0s 116988310e-09 0s 0s 116992110e-09 1s 1s 116993910e-09 0s 0s 116998590e-09 0s 0s 117002350e-09 1s 1s 117004150e-09 0s 0s 117008870e-09 0s 0s 117012590e-09 1s 1s 117014390e-09 0s 0s 117019150e-09 0s 0s 117022830e-09 1s 1s 117024630e-09 0s 0s 117029430e-09 0s 0s 117033070e-09 1s 1s 117034870e-09 0s 0s 117039710e-09 0s 0s 117043310e-09 1s 1s 117045110e-09 0s 0s 117049990e-09 0s 0s 117053550e-09 1s 1s 117055350e-09 0s 0s 117060270e-09 0s 0s 117063790e-09 1s 1s 117065590e-09 0s 0s 117070550e-09 0s 0s 117074030e-09 1s 1s 117075830e-09 0s 0s 117080830e-09 0s 0s 117084270e-09 1s 1s 117086070e-09 0s 0s 117091110e-09 0s 0s 117094510e-09 1s 1s 117096310e-09 0s 0s 117101390e-09 0s 0s 117104750e-09 1s 1s 117106550e-09 0s 0s 117111670e-09 0s 0s 117114990e-09 1s 1s 117116790e-09 0s 0s 117121950e-09 0s 0s 117125230e-09 1s 1s 117127030e-09 0s 0s 117132230e-09 0s 0s 117135470e-09 1s 1s 117137270e-09 0s 0s 117142510e-09 0s 0s 117145710e-09 1s 1s 117147510e-09 0s 0s 117152790e-09 0s 0s 117155950e-09 1s 1s 117157750e-09 0s 0s 117163070e-09 0s 0s 117166190e-09 1s 1s 117167990e-09 0s 0s 117173350e-09 0s 0s 117176430e-09 1s 1s 117178230e-09 0s 0s 117183630e-09 0s 0s 117186670e-09 1s 1s 117188470e-09 0s 0s 117193910e-09 0s 0s 117196910e-09 1s 1s 117198710e-09 0s 0s 117204190e-09 0s 0s 117207150e-09 1s 1s 117208950e-09 0s 0s 117214470e-09 0s 0s 117217390e-09 1s 1s 117219190e-09 0s 0s 117224750e-09 0s 0s 117227630e-09 1s 1s 117229430e-09 0s 0s 117235030e-09 0s 0s 117237870e-09 1s 1s 117239670e-09 0s 0s 117245310e-09 0s 0s 117248110e-09 1s 1s 117249910e-09 0s 0s 117255590e-09 0s 0s 117258350e-09 1s 1s 117260150e-09 0s 0s 117265870e-09 0s 0s 117268590e-09 1s 1s 117270390e-09 0s 0s 117276150e-09 0s 0s 117278830e-09 1s 1s 117280630e-09 0s 0s 117286430e-09 0s 0s 117289070e-09 1s 1s 117290870e-09 0s 0s 117296710e-09 0s 0s 117299310e-09 1s 1s 117301110e-09 0s 0s 117306990e-09 0s 0s 117309550e-09 1s 1s 117311350e-09 0s 0s 117317270e-09 0s 0s 117319790e-09 1s 1s 117321590e-09 0s 0s 117327550e-09 0s 0s 117330030e-09 1s 1s 117331830e-09 0s 0s 117337830e-09 0s 0s 117340270e-09 1s 1s 117342070e-09 0s 0s 117348110e-09 0s 0s 117350510e-09 1s 1s 117352310e-09 0s 0s 117358390e-09 0s 0s 117360750e-09 1s 1s 117362550e-09 0s 0s 117368670e-09 0s 0s 117370990e-09 1s 1s 117372790e-09 0s 0s 117378950e-09 0s 0s 117381230e-09 1s 1s 117383030e-09 0s 0s 117389230e-09 0s 0s 117391470e-09 1s 1s 117393270e-09 0s 0s 117399510e-09 0s 0s 117401710e-09 1s 1s 117403510e-09 0s 0s 117409790e-09 0s 0s 117411950e-09 1s 1s 117413750e-09 0s 0s 117420070e-09 0s 0s 117422190e-09 1s 1s 117423990e-09 0s 0s 117430350e-09 0s 0s 117432430e-09 1s 1s 117434230e-09 0s 0s 117440630e-09 0s 0s 117442670e-09 1s 1s 117444470e-09 0s 0s 117450910e-09 0s 0s 117452910e-09 1s 1s 117454710e-09 0s 0s 117461190e-09 0s 0s 117463150e-09 1s 1s 117464950e-09 0s 0s 117471470e-09 0s 0s 117473390e-09 1s 1s 117475190e-09 0s 0s 117481750e-09 0s 0s 117483630e-09 1s 1s 117485430e-09 0s 0s 117492030e-09 0s 0s 117493870e-09 1s 1s 117495670e-09 0s 0s 117502310e-09 0s 0s 117504110e-09 1s 1s 117505910e-09 0s 0s 117512590e-09 0s 0s 117514350e-09 1s 1s 117516150e-09 0s 0s 117522870e-09 0s 0s 117524590e-09 1s 1s 117526390e-09 0s 0s 117533150e-09 0s 0s 117534830e-09 1s 1s 117536630e-09 0s 0s 117543430e-09 0s 0s 117545070e-09 1s 1s 117546870e-09 0s 0s 117553710e-09 0s 0s 117555310e-09 1s 1s 117557110e-09 0s 0s 117563990e-09 0s 0s 117565550e-09 1s 1s 117567350e-09 0s 0s 117574270e-09 0s 0s 117575790e-09 1s 1s 117577590e-09 0s 0s 117584550e-09 0s 0s 117586030e-09 1s 1s 117587830e-09 0s 0s 117594830e-09 0s 0s 117596270e-09 1s 1s 117598070e-09 0s 0s 117605110e-09 0s 0s 117606510e-09 1s 1s 117608310e-09 0s 0s 117615390e-09 0s 0s 117616750e-09 1s 1s 117618550e-09 0s 0s 117625670e-09 0s 0s 117626990e-09 1s 1s 117628790e-09 0s 0s 117635950e-09 0s 0s 117637230e-09 1s 1s 117639030e-09 0s 0s 117646230e-09 0s 0s 117647470e-09 1s 1s 117649270e-09 0s 0s 117656510e-09 0s 0s 117657710e-09 1s 1s 117659510e-09 0s 0s 117666790e-09 0s 0s 117667950e-09 1s 1s 117669750e-09 0s 0s 117677070e-09 0s 0s 117678190e-09 1s 1s 117679990e-09 0s 0s 117687350e-09 0s 0s 117688430e-09 1s 1s 117690230e-09 0s 0s 117697630e-09 0s 0s 117698670e-09 1s 1s 117700470e-09 0s 0s 117707910e-09 0s 0s 117708910e-09 1s 1s 117710710e-09 0s 0s 117718190e-09 0s 0s 117719150e-09 1s 1s 117720950e-09 0s 0s 117728470e-09 0s 0s 117729390e-09 1s 1s 117731190e-09 0s 0s 117738750e-09 0s 0s 117739630e-09 1s 1s 117741430e-09 0s 0s 117749030e-09 0s 0s 117749870e-09 1s 1s 117751670e-09 0s 0s 117759310e-09 0s 0s 117760110e-09 1s 1s 117761910e-09 0s 0s 117769590e-09 0s 0s 117770350e-09 1s 1s 117772150e-09 0s 0s 117779870e-09 0s 0s 117780590e-09 1s 1s 117782390e-09 0s 0s 117790150e-09 0s 0s 117790830e-09 1s 1s 117792630e-09 0s 0s 117800430e-09 0s 0s 117801070e-09 1s 1s 117802870e-09 0s 0s 117810710e-09 0s 0s 117811310e-09 1s 1s 117813110e-09 0s 0s 117820990e-09 0s 0s 117821550e-09 1s 1s 117823350e-09 0s 0s 117831270e-09 0s 0s 117831790e-09 1s 1s 117833590e-09 0s 0s 117841550e-09 0s 0s 117842030e-09 1s 1s 117843830e-09 0s 0s 117851830e-09 0s 0s 117852270e-09 1s 1s 117854070e-09 0s 0s 117862110e-09 0s 0s 117862510e-09 1s 1s 117864310e-09 0s 0s 117872390e-09 0s 0s 117872750e-09 1s 1s 117874550e-09 0s 0s 117882670e-09 0s 0s 117882990e-09 1s 1s 117884790e-09 0s 0s 117892950e-09 0s 0s 117893230e-09 1s 1s 117895030e-09 0s 0s 117903230e-09 0s 0s 117903470e-09 1s 1s 117905270e-09 0s 0s 117913510e-09 0s 0s 117913710e-09 1s 1s 117915510e-09 0s 0s 117923790e-09 0s 0s 117923950e-09 1s 1s 117925750e-09 0s 0s 117934070e-09 0s 0s 117934190e-09 1s 1s 117935990e-09 0s 0s 117944350e-09 0s 0s 117944430e-09 1s 1s 117946230e-09 0s 0s 117954630e-09 0s 0s 117954670e-09 1s 1s 117956470e-09 0s 0s 117964910e-09 1s 1s 117964950e-09 1s 1s 117966750e-09 0s 0s 117975150e-09 1s 1s 117975230e-09 1s 1s 117976990e-09 0s 0s 117985390e-09 1s 1s 117985510e-09 1s 1s 117987230e-09 0s 0s 117995630e-09 1s 1s 117995790e-09 1s 1s 117997470e-09 0s 0s 118005870e-09 1s 1s 118006070e-09 1s 1s 118007710e-09 0s 0s 118016110e-09 1s 1s 118016350e-09 1s 1s 118017950e-09 0s 0s 118026350e-09 1s 1s 118026630e-09 1s 1s 118028190e-09 0s 0s 118036590e-09 1s 1s 118036910e-09 1s 1s 118038430e-09 0s 0s 118046830e-09 1s 1s 118047190e-09 1s 1s 118048670e-09 0s 0s 118057070e-09 1s 1s 118057470e-09 1s 1s 118058910e-09 0s 0s 118067310e-09 1s 1s 118067750e-09 1s 1s 118069150e-09 0s 0s 118077550e-09 1s 1s 118078030e-09 1s 1s 118079390e-09 0s 0s 118087790e-09 1s 1s 118088310e-09 1s 1s 118089630e-09 0s 0s 118098030e-09 1s 1s 118098590e-09 1s 1s 118099870e-09 0s 0s 118108270e-09 1s 1s 118108870e-09 1s 1s 118110110e-09 0s 0s 118118510e-09 1s 1s 118119150e-09 1s 1s 118120350e-09 0s 0s 118128750e-09 1s 1s 118129430e-09 1s 1s 118130590e-09 0s 0s 118138990e-09 1s 1s 118139710e-09 1s 1s 118140830e-09 0s 0s 118149230e-09 1s 1s 118149990e-09 1s 1s 118151070e-09 0s 0s 118159470e-09 1s 1s 118160270e-09 1s 1s 118161310e-09 0s 0s 118169710e-09 1s 1s 118170550e-09 1s 1s 118171550e-09 0s 0s 118179950e-09 1s 1s 118180830e-09 1s 1s 118181790e-09 0s 0s 118190190e-09 1s 1s 118191110e-09 1s 1s 118192030e-09 0s 0s 118200430e-09 1s 1s 118201390e-09 1s 1s 118202270e-09 0s 0s 118210670e-09 1s 1s 118211670e-09 1s 1s 118212510e-09 0s 0s 118220910e-09 1s 1s 118221950e-09 1s 1s 118222750e-09 0s 0s 118231150e-09 1s 1s 118232230e-09 1s 1s 118232990e-09 0s 0s 118241390e-09 1s 1s 118242510e-09 1s 1s 118243230e-09 0s 0s 118251630e-09 1s 1s 118252790e-09 1s 1s 118253470e-09 0s 0s 118261870e-09 1s 1s 118263070e-09 1s 1s 118263710e-09 0s 0s 118272110e-09 1s 1s 118273350e-09 1s 1s 118273950e-09 0s 0s 118282350e-09 1s 1s 118283630e-09 1s 1s 118284190e-09 0s 0s 118292590e-09 1s 1s 118293910e-09 1s 1s 118294430e-09 0s 0s 118302830e-09 1s 1s 118304190e-09 1s 1s 118304670e-09 0s 0s 118313070e-09 1s 1s 118314470e-09 1s 1s 118314910e-09 0s 0s 118323310e-09 1s 1s 118324750e-09 1s 1s 118325150e-09 0s 0s 118333550e-09 1s 1s 118335030e-09 1s 1s 118335390e-09 0s 0s 118343790e-09 1s 1s 118345310e-09 1s 1s 118345630e-09 0s 0s 118354030e-09 1s 1s 118355590e-09 1s 1s 118355870e-09 0s 0s 118364270e-09 1s 1s 118365870e-09 1s 1s 118366110e-09 0s 0s 118374510e-09 1s 1s 118376150e-09 1s 1s 118376350e-09 0s 0s 118384750e-09 1s 1s 118386430e-09 1s 1s 118386590e-09 0s 0s 118394990e-09 1s 1s 118396710e-09 1s 1s 118396830e-09 0s 0s 118405230e-09 1s 1s 118406990e-09 1s 1s 118407070e-09 0s 0s 118415470e-09 1s 1s 118417270e-09 1s 1s 118417310e-09 0s 0s 118425710e-09 1s 1s 118427550e-09 0s 0s 118435950e-09 1s 1s 118437790e-09 0s 0s 118437830e-09 0s 0s 118446190e-09 1s 1s 118448030e-09 0s 0s 118448110e-09 0s 0s 118456430e-09 1s 1s 118458270e-09 0s 0s 118458390e-09 0s 0s 118466670e-09 1s 1s 118468510e-09 0s 0s 118468670e-09 0s 0s 118476910e-09 1s 1s 118478750e-09 0s 0s 118478950e-09 0s 0s 118487150e-09 1s 1s 118488990e-09 0s 0s 118489230e-09 0s 0s 118497390e-09 1s 1s 118499230e-09 0s 0s 118499510e-09 0s 0s 118507630e-09 1s 1s 118509470e-09 0s 0s 118509790e-09 0s 0s 118517870e-09 1s 1s 118519710e-09 0s 0s 118520070e-09 0s 0s 118528110e-09 1s 1s 118529950e-09 0s 0s 118530350e-09 0s 0s 118538350e-09 1s 1s 118540190e-09 0s 0s 118540630e-09 0s 0s 118548590e-09 1s 1s 118550430e-09 0s 0s 118550910e-09 0s 0s 118558830e-09 1s 1s 118560670e-09 0s 0s 118561190e-09 0s 0s 118569070e-09 1s 1s 118570910e-09 0s 0s 118571470e-09 0s 0s 118579310e-09 1s 1s 118581150e-09 0s 0s 118581750e-09 0s 0s 118589550e-09 1s 1s 118591390e-09 0s 0s 118592030e-09 0s 0s 118599790e-09 1s 1s 118601630e-09 0s 0s 118602310e-09 0s 0s 118610030e-09 1s 1s 118611870e-09 0s 0s 118612590e-09 0s 0s 118620270e-09 1s 1s 118622110e-09 0s 0s 118622870e-09 0s 0s 118630510e-09 1s 1s 118632350e-09 0s 0s 118633150e-09 0s 0s 118640750e-09 1s 1s 118642590e-09 0s 0s 118643430e-09 0s 0s 118650990e-09 1s 1s 118652830e-09 0s 0s 118653710e-09 0s 0s 118661230e-09 1s 1s 118663070e-09 0s 0s 118663990e-09 0s 0s 118671470e-09 1s 1s 118673310e-09 0s 0s 118674270e-09 0s 0s 118681710e-09 1s 1s 118683550e-09 0s 0s 118684550e-09 0s 0s 118691950e-09 1s 1s 118693790e-09 0s 0s 118694830e-09 0s 0s 118702190e-09 1s 1s 118704030e-09 0s 0s 118705110e-09 0s 0s 118712430e-09 1s 1s 118714270e-09 0s 0s 118715390e-09 0s 0s 118722670e-09 1s 1s 118724510e-09 0s 0s 118725670e-09 0s 0s 118732910e-09 1s 1s 118734750e-09 0s 0s 118735950e-09 0s 0s 118743150e-09 1s 1s 118744990e-09 0s 0s 118746230e-09 0s 0s 118753390e-09 1s 1s 118755230e-09 0s 0s 118756510e-09 0s 0s 118763630e-09 1s 1s 118765470e-09 0s 0s 118766790e-09 0s 0s 118773870e-09 1s 1s 118775710e-09 0s 0s 118777070e-09 0s 0s 118784110e-09 1s 1s 118785950e-09 0s 0s 118787350e-09 0s 0s 118794350e-09 1s 1s 118796190e-09 0s 0s 118797630e-09 0s 0s 118804590e-09 1s 1s 118806430e-09 0s 0s 118807910e-09 0s 0s 118814830e-09 1s 1s 118816670e-09 0s 0s 118818190e-09 0s 0s 118825070e-09 1s 1s 118826910e-09 0s 0s 118828470e-09 0s 0s 118835310e-09 1s 1s 118837150e-09 0s 0s 118838750e-09 0s 0s 118845550e-09 1s 1s 118847390e-09 0s 0s 118849030e-09 0s 0s 118855790e-09 1s 1s 118857630e-09 0s 0s 118859310e-09 0s 0s 118866030e-09 1s 1s 118867870e-09 0s 0s 118869590e-09 0s 0s 118876270e-09 1s 1s 118878110e-09 0s 0s 118879870e-09 0s 0s 118886510e-09 1s 1s 118888350e-09 0s 0s 118890150e-09 0s 0s 118896750e-09 1s 1s 118898590e-09 0s 0s 118900430e-09 0s 0s 118906990e-09 1s 1s 118908830e-09 0s 0s 118910710e-09 0s 0s 118917230e-09 1s 1s 118919070e-09 0s 0s 118920990e-09 0s 0s 118927470e-09 1s 1s 118929310e-09 0s 0s 118931270e-09 0s 0s 118937710e-09 1s 1s 118939550e-09 0s 0s 118941550e-09 0s 0s 118947950e-09 1s 1s 118949790e-09 0s 0s 118951830e-09 0s 0s 118958190e-09 1s 1s 118960030e-09 0s 0s 118962110e-09 0s 0s 118968430e-09 1s 1s 118970270e-09 0s 0s 118972390e-09 0s 0s 118978670e-09 1s 1s 118980510e-09 0s 0s 118982670e-09 0s 0s 118988910e-09 1s 1s 118990750e-09 0s 0s 118992950e-09 0s 0s 118999150e-09 1s 1s 119000990e-09 0s 0s 119003230e-09 0s 0s 119009390e-09 1s 1s 119011230e-09 0s 0s 119013510e-09 0s 0s 119019630e-09 1s 1s 119021470e-09 0s 0s 119023790e-09 0s 0s 119029870e-09 1s 1s 119031710e-09 0s 0s 119034070e-09 0s 0s 119040110e-09 1s 1s 119041950e-09 0s 0s 119044350e-09 0s 0s 119050350e-09 1s 1s 119052190e-09 0s 0s 119054630e-09 0s 0s 119060590e-09 1s 1s 119062430e-09 0s 0s 119064910e-09 0s 0s 119070830e-09 1s 1s 119072670e-09 0s 0s 119075190e-09 0s 0s 119081070e-09 1s 1s 119082910e-09 0s 0s 119085470e-09 0s 0s 119091310e-09 1s 1s 119093150e-09 0s 0s 119095750e-09 0s 0s 119101550e-09 1s 1s 119103390e-09 0s 0s 119106030e-09 0s 0s 119111790e-09 1s 1s 119113630e-09 0s 0s 119116310e-09 0s 0s 119122030e-09 1s 1s 119123870e-09 0s 0s 119126590e-09 0s 0s 119132270e-09 1s 1s 119134110e-09 0s 0s 119136870e-09 0s 0s 119142510e-09 1s 1s 119144350e-09 0s 0s 119147150e-09 0s 0s 119152750e-09 1s 1s 119154590e-09 0s 0s 119157430e-09 0s 0s 119162990e-09 1s 1s 119164830e-09 0s 0s 119167710e-09 0s 0s 119173230e-09 1s 1s 119175070e-09 0s 0s 119177990e-09 0s 0s 119183470e-09 1s 1s 119185310e-09 0s 0s 119188270e-09 0s 0s 119193710e-09 1s 1s 119195550e-09 0s 0s 119198550e-09 0s 0s 119203950e-09 1s 1s 119205790e-09 0s 0s 119208830e-09 0s 0s 119214190e-09 1s 1s 119216030e-09 0s 0s 119219110e-09 0s 0s 119224430e-09 1s 1s 119226270e-09 0s 0s 119229390e-09 0s 0s 119234670e-09 1s 1s 119236510e-09 0s 0s 119239670e-09 0s 0s 119244910e-09 1s 1s 119246750e-09 0s 0s 119249950e-09 0s 0s 119255150e-09 1s 1s 119256990e-09 0s 0s 119260230e-09 0s 0s 119265390e-09 1s 1s 119267230e-09 0s 0s 119270510e-09 0s 0s 119275630e-09 1s 1s 119277470e-09 0s 0s 119280790e-09 0s 0s 119285870e-09 1s 1s 119287710e-09 0s 0s 119291070e-09 0s 0s 119296110e-09 1s 1s 119297950e-09 0s 0s 119301350e-09 0s 0s 119306350e-09 1s 1s 119308190e-09 0s 0s 119311630e-09 0s 0s 119316590e-09 1s 1s 119318430e-09 0s 0s 119321910e-09 0s 0s 119326830e-09 1s 1s 119328670e-09 0s 0s 119332190e-09 0s 0s 119337070e-09 1s 1s 119338910e-09 0s 0s 119342470e-09 0s 0s 119347310e-09 1s 1s 119349150e-09 0s 0s 119352750e-09 0s 0s 119357550e-09 1s 1s 119359390e-09 0s 0s 119363030e-09 0s 0s 119367790e-09 1s 1s 119369630e-09 0s 0s 119373310e-09 0s 0s 119378030e-09 1s 1s 119379870e-09 0s 0s 119383590e-09 0s 0s 119388270e-09 1s 1s 119390110e-09 0s 0s 119393870e-09 0s 0s 119398510e-09 1s 1s 119400350e-09 0s 0s 119404150e-09 0s 0s 119408750e-09 1s 1s 119410590e-09 0s 0s 119414430e-09 0s 0s 119418990e-09 1s 1s 119420830e-09 0s 0s 119424710e-09 0s 0s 119429230e-09 1s 1s 119431070e-09 0s 0s 119434990e-09 0s 0s 119439470e-09 1s 1s 119441310e-09 0s 0s 119445270e-09 0s 0s 119449710e-09 1s 1s 119451550e-09 0s 0s 119455550e-09 0s 0s 119459950e-09 1s 1s 119461790e-09 0s 0s 119465830e-09 0s 0s 119470190e-09 1s 1s 119472030e-09 0s 0s 119476110e-09 0s 0s 119480430e-09 1s 1s 119482270e-09 0s 0s 119486390e-09 0s 0s 119490670e-09 1s 1s 119492510e-09 0s 0s 119496670e-09 0s 0s 119500910e-09 1s 1s 119502750e-09 0s 0s 119506950e-09 0s 0s 119511150e-09 1s 1s 119512990e-09 0s 0s 119517230e-09 0s 0s 119521390e-09 1s 1s 119523230e-09 0s 0s 119527510e-09 0s 0s 119531630e-09 1s 1s 119533470e-09 0s 0s 119537790e-09 0s 0s 119541870e-09 1s 1s 119543710e-09 0s 0s 119548070e-09 0s 0s 119552110e-09 1s 1s 119553950e-09 0s 0s 119558350e-09 0s 0s 119562350e-09 1s 1s 119564190e-09 0s 0s 119568630e-09 0s 0s 119572590e-09 1s 1s 119574430e-09 0s 0s 119578910e-09 0s 0s 119582830e-09 1s 1s 119584670e-09 0s 0s 119589190e-09 0s 0s 119593070e-09 1s 1s 119594910e-09 0s 0s 119599470e-09 0s 0s 119603310e-09 1s 1s 119605150e-09 0s 0s 119609750e-09 0s 0s 119613550e-09 1s 1s 119615390e-09 0s 0s 119620030e-09 0s 0s 119623790e-09 1s 1s 119625630e-09 0s 0s 119630310e-09 0s 0s 119634030e-09 1s 1s 119635870e-09 0s 0s 119640590e-09 0s 0s 119644270e-09 1s 1s 119646110e-09 0s 0s 119650870e-09 0s 0s 119654510e-09 1s 1s 119656350e-09 0s 0s 119661150e-09 0s 0s 119664750e-09 1s 1s 119666590e-09 0s 0s 119671430e-09 0s 0s 119674990e-09 1s 1s 119676830e-09 0s 0s 119681710e-09 0s 0s 119685230e-09 1s 1s 119687070e-09 0s 0s 119691990e-09 0s 0s 119695470e-09 1s 1s 119697310e-09 0s 0s 119702270e-09 0s 0s 119705710e-09 1s 1s 119707550e-09 0s 0s 119712550e-09 0s 0s 119715950e-09 1s 1s 119717790e-09 0s 0s 119722830e-09 0s 0s 119726190e-09 1s 1s 119728030e-09 0s 0s 119733110e-09 0s 0s 119736430e-09 1s 1s 119738270e-09 0s 0s 119743390e-09 0s 0s 119746670e-09 1s 1s 119748510e-09 0s 0s 119753670e-09 0s 0s 119756910e-09 1s 1s 119758750e-09 0s 0s 119763950e-09 0s 0s 119767150e-09 1s 1s 119768990e-09 0s 0s 119774230e-09 0s 0s 119777390e-09 1s 1s 119779230e-09 0s 0s 119784510e-09 0s 0s 119787630e-09 1s 1s 119789470e-09 0s 0s 119794790e-09 0s 0s 119797870e-09 1s 1s 119799710e-09 0s 0s 119805070e-09 0s 0s 119808110e-09 1s 1s 119809950e-09 0s 0s 119815350e-09 0s 0s 119818350e-09 1s 1s 119820190e-09 0s 0s 119825630e-09 0s 0s 119828590e-09 1s 1s 119830430e-09 0s 0s 119835910e-09 0s 0s 119838830e-09 1s 1s 119840670e-09 0s 0s 119846190e-09 0s 0s 119849070e-09 1s 1s 119850910e-09 0s 0s 119856470e-09 0s 0s 119859310e-09 1s 1s 119861150e-09 0s 0s 119866750e-09 0s 0s 119869550e-09 1s 1s 119871390e-09 0s 0s 119877030e-09 0s 0s 119879790e-09 1s 1s 119881630e-09 0s 0s 119887310e-09 0s 0s 119890030e-09 1s 1s 119891870e-09 0s 0s 119897590e-09 0s 0s 119900270e-09 1s 1s 119902110e-09 0s 0s 119907870e-09 0s 0s 119910510e-09 1s 1s 119912350e-09 0s 0s 119918150e-09 0s 0s 119920750e-09 1s 1s 119922590e-09 0s 0s 119928430e-09 0s 0s 119930990e-09 1s 1s 119932830e-09 0s 0s 119938710e-09 0s 0s 119941230e-09 1s 1s 119943070e-09 0s 0s 119948990e-09 0s 0s 119951470e-09 1s 1s 119953310e-09 0s 0s 119959270e-09 0s 0s 119961710e-09 1s 1s 119963550e-09 0s 0s 119969550e-09 0s 0s 119971950e-09 1s 1s 119973790e-09 0s 0s 119979830e-09 0s 0s 119982190e-09 1s 1s 119984030e-09 0s 0s 119990110e-09 0s 0s 119992430e-09 1s 1s 119994270e-09 0s 0s 120000390e-09 0s 0s 120002670e-09 1s 1s 120004510e-09 0s 0s 120010670e-09 0s 0s 120012910e-09 1s 1s 120014750e-09 0s 0s 120020950e-09 0s 0s 120023150e-09 1s 1s 120024990e-09 0s 0s 120031230e-09 0s 0s 120033390e-09 1s 1s 120035230e-09 0s 0s 120041510e-09 0s 0s 120043630e-09 1s 1s 120045470e-09 0s 0s 120051790e-09 0s 0s 120053870e-09 1s 1s 120055710e-09 0s 0s 120062070e-09 0s 0s 120064110e-09 1s 1s 120065950e-09 0s 0s 120072350e-09 0s 0s 120074350e-09 1s 1s 120076190e-09 0s 0s 120082630e-09 0s 0s 120084590e-09 1s 1s 120086430e-09 0s 0s 120092910e-09 0s 0s 120094830e-09 1s 1s 120096670e-09 0s 0s 120103190e-09 0s 0s 120105070e-09 1s 1s 120106910e-09 0s 0s 120113470e-09 0s 0s 120115310e-09 1s 1s 120117150e-09 0s 0s 120123750e-09 0s 0s 120125550e-09 1s 1s 120127390e-09 0s 0s 120134030e-09 0s 0s 120135790e-09 1s 1s 120137630e-09 0s 0s 120144310e-09 0s 0s 120146030e-09 1s 1s 120147870e-09 0s 0s 120154590e-09 0s 0s 120156270e-09 1s 1s 120158110e-09 0s 0s 120164870e-09 0s 0s 120166510e-09 1s 1s 120168350e-09 0s 0s 120175150e-09 0s 0s 120176750e-09 1s 1s 120178590e-09 0s 0s 120185430e-09 0s 0s 120186990e-09 1s 1s 120188830e-09 0s 0s 120195710e-09 0s 0s 120197230e-09 1s 1s 120199070e-09 0s 0s 120205990e-09 0s 0s 120207470e-09 1s 1s 120209310e-09 0s 0s 120216270e-09 0s 0s 120217710e-09 1s 1s 120219550e-09 0s 0s 120226550e-09 0s 0s 120227950e-09 1s 1s 120229790e-09 0s 0s 120236830e-09 0s 0s 120238190e-09 1s 1s 120240030e-09 0s 0s 120247110e-09 0s 0s 120248430e-09 1s 1s 120250270e-09 0s 0s 120257390e-09 0s 0s 120258670e-09 1s 1s 120260510e-09 0s 0s 120267670e-09 0s 0s 120268910e-09 1s 1s 120270750e-09 0s 0s 120277950e-09 0s 0s 120279150e-09 1s 1s 120280990e-09 0s 0s 120288230e-09 0s 0s 120289390e-09 1s 1s 120291230e-09 0s 0s 120298510e-09 0s 0s 120299630e-09 1s 1s 120301470e-09 0s 0s 120308790e-09 0s 0s 120309870e-09 1s 1s 120311710e-09 0s 0s 120319070e-09 0s 0s 120320110e-09 1s 1s 120321950e-09 0s 0s 120329350e-09 0s 0s 120330350e-09 1s 1s 120332190e-09 0s 0s 120339630e-09 0s 0s 120340590e-09 1s 1s 120342430e-09 0s 0s 120349910e-09 0s 0s 120350830e-09 1s 1s 120352670e-09 0s 0s 120360190e-09 0s 0s 120361070e-09 1s 1s 120362910e-09 0s 0s 120370470e-09 0s 0s 120371310e-09 1s 1s 120373150e-09 0s 0s 120380750e-09 0s 0s 120381550e-09 1s 1s 120383390e-09 0s 0s 120391030e-09 0s 0s 120391790e-09 1s 1s 120393630e-09 0s 0s 120401310e-09 0s 0s 120402030e-09 1s 1s 120403870e-09 0s 0s 120411590e-09 0s 0s 120412270e-09 1s 1s 120414110e-09 0s 0s 120421870e-09 0s 0s 120422510e-09 1s 1s 120424350e-09 0s 0s 120432150e-09 0s 0s 120432750e-09 1s 1s 120434590e-09 0s 0s 120442430e-09 0s 0s 120442990e-09 1s 1s 120444830e-09 0s 0s 120452710e-09 0s 0s 120453230e-09 1s 1s 120455070e-09 0s 0s 120462990e-09 0s 0s 120463470e-09 1s 1s 120465310e-09 0s 0s 120473270e-09 0s 0s 120473710e-09 1s 1s 120475550e-09 0s 0s 120483550e-09 0s 0s 120483950e-09 1s 1s 120485790e-09 0s 0s 120493830e-09 0s 0s 120494190e-09 1s 1s 120496030e-09 0s 0s 120504110e-09 0s 0s 120504430e-09 1s 1s 120506270e-09 0s 0s 120514390e-09 0s 0s 120514670e-09 1s 1s 120516510e-09 0s 0s 120524670e-09 0s 0s 120524910e-09 1s 1s 120526750e-09 0s 0s 120534950e-09 0s 0s 120535150e-09 1s 1s 120536990e-09 0s 0s 120545230e-09 0s 0s 120545390e-09 1s 1s 120547230e-09 0s 0s 120555510e-09 0s 0s 120555630e-09 1s 1s 120557470e-09 0s 0s 120565790e-09 0s 0s 120565870e-09 1s 1s 120567710e-09 0s 0s 120576070e-09 0s 0s 120576110e-09 1s 1s 120577950e-09 0s 0s 120586350e-09 1s 1s 120586390e-09 1s 1s 120588230e-09 0s 0s 120596590e-09 1s 1s 120596670e-09 1s 1s 120598470e-09 0s 0s 120606830e-09 1s 1s 120606950e-09 1s 1s 120608710e-09 0s 0s 120617070e-09 1s 1s 120617230e-09 1s 1s 120618950e-09 0s 0s 120627310e-09 1s 1s 120627510e-09 1s 1s 120629190e-09 0s 0s 120637550e-09 1s 1s 120637790e-09 1s 1s 120639430e-09 0s 0s 120647790e-09 1s 1s 120648070e-09 1s 1s 120649670e-09 0s 0s 120658030e-09 1s 1s 120658350e-09 1s 1s 120659910e-09 0s 0s 120668270e-09 1s 1s 120668630e-09 1s 1s 120670150e-09 0s 0s 120678510e-09 1s 1s 120678910e-09 1s 1s 120680390e-09 0s 0s 120688750e-09 1s 1s 120689190e-09 1s 1s 120690630e-09 0s 0s 120698990e-09 1s 1s 120699470e-09 1s 1s 120700870e-09 0s 0s 120709230e-09 1s 1s 120709750e-09 1s 1s 120711110e-09 0s 0s 120719470e-09 1s 1s 120720030e-09 1s 1s 120721350e-09 0s 0s 120729710e-09 1s 1s 120730310e-09 1s 1s 120731590e-09 0s 0s 120739950e-09 1s 1s 120740590e-09 1s 1s 120741830e-09 0s 0s 120750190e-09 1s 1s 120750870e-09 1s 1s 120752070e-09 0s 0s 120760430e-09 1s 1s 120761150e-09 1s 1s 120762310e-09 0s 0s 120770670e-09 1s 1s 120771430e-09 1s 1s 120772550e-09 0s 0s 120780910e-09 1s 1s 120781710e-09 1s 1s 120782790e-09 0s 0s 120791150e-09 1s 1s 120791990e-09 1s 1s 120793030e-09 0s 0s 120801390e-09 1s 1s 120802270e-09 1s 1s 120803270e-09 0s 0s 120811630e-09 1s 1s 120812550e-09 1s 1s 120813510e-09 0s 0s 120821870e-09 1s 1s 120822830e-09 1s 1s 120823750e-09 0s 0s 120832110e-09 1s 1s 120833110e-09 1s 1s 120833990e-09 0s 0s 120842350e-09 1s 1s 120843390e-09 1s 1s 120844230e-09 0s 0s 120852590e-09 1s 1s 120853670e-09 1s 1s 120854470e-09 0s 0s 120862830e-09 1s 1s 120863950e-09 1s 1s 120864710e-09 0s 0s 120873070e-09 1s 1s 120874230e-09 1s 1s 120874950e-09 0s 0s 120883310e-09 1s 1s 120884510e-09 1s 1s 120885190e-09 0s 0s 120893550e-09 1s 1s 120894790e-09 1s 1s 120895430e-09 0s 0s 120903790e-09 1s 1s 120905070e-09 1s 1s 120905670e-09 0s 0s 120914030e-09 1s 1s 120915350e-09 1s 1s 120915910e-09 0s 0s 120924270e-09 1s 1s 120925630e-09 1s 1s 120926150e-09 0s 0s 120934510e-09 1s 1s 120935910e-09 1s 1s 120936390e-09 0s 0s 120944750e-09 1s 1s 120946190e-09 1s 1s 120946630e-09 0s 0s 120954990e-09 1s 1s 120956470e-09 1s 1s 120956870e-09 0s 0s 120965230e-09 1s 1s 120966750e-09 1s 1s 120967110e-09 0s 0s 120975470e-09 1s 1s 120977030e-09 1s 1s 120977350e-09 0s 0s 120985710e-09 1s 1s 120987310e-09 1s 1s 120987590e-09 0s 0s 120995950e-09 1s 1s 120997590e-09 1s 1s 120997830e-09 0s 0s 121006190e-09 1s 1s 121007870e-09 1s 1s 121008070e-09 0s 0s 121016430e-09 1s 1s 121018150e-09 1s 1s 121018310e-09 0s 0s 121026670e-09 1s 1s 121028430e-09 1s 1s 121028550e-09 0s 0s 121036910e-09 1s 1s 121038710e-09 1s 1s 121038790e-09 0s 0s 121047150e-09 1s 1s 121048990e-09 1s 1s 121049030e-09 0s 0s 121057390e-09 1s 1s 121059270e-09 0s 0s 121067630e-09 1s 1s 121069510e-09 0s 0s 121069550e-09 0s 0s 121077870e-09 1s 1s 121079750e-09 0s 0s 121079830e-09 0s 0s 121088110e-09 1s 1s 121089990e-09 0s 0s 121090110e-09 0s 0s 121098350e-09 1s 1s 121100230e-09 0s 0s 121100390e-09 0s 0s 121108590e-09 1s 1s 121110470e-09 0s 0s 121110670e-09 0s 0s 121118830e-09 1s 1s 121120710e-09 0s 0s 121120950e-09 0s 0s 121129070e-09 1s 1s 121130950e-09 0s 0s 121131230e-09 0s 0s 121139310e-09 1s 1s 121141190e-09 0s 0s 121141510e-09 0s 0s 121149550e-09 1s 1s 121151430e-09 0s 0s 121151790e-09 0s 0s 121159790e-09 1s 1s 121161670e-09 0s 0s 121162070e-09 0s 0s 121170030e-09 1s 1s 121171910e-09 0s 0s 121172350e-09 0s 0s 121180270e-09 1s 1s 121182150e-09 0s 0s 121182630e-09 0s 0s 121190510e-09 1s 1s 121192390e-09 0s 0s 121192910e-09 0s 0s 121200750e-09 1s 1s 121202630e-09 0s 0s 121203190e-09 0s 0s 121210990e-09 1s 1s 121212870e-09 0s 0s 121213470e-09 0s 0s 121221230e-09 1s 1s 121223110e-09 0s 0s 121223750e-09 0s 0s 121231470e-09 1s 1s 121233350e-09 0s 0s 121234030e-09 0s 0s 121241710e-09 1s 1s 121243590e-09 0s 0s 121244310e-09 0s 0s 121251950e-09 1s 1s 121253830e-09 0s 0s 121254590e-09 0s 0s 121262190e-09 1s 1s 121264070e-09 0s 0s 121264870e-09 0s 0s 121272430e-09 1s 1s 121274310e-09 0s 0s 121275150e-09 0s 0s 121282670e-09 1s 1s 121284550e-09 0s 0s 121285430e-09 0s 0s 121292910e-09 1s 1s 121294790e-09 0s 0s 121295710e-09 0s 0s 121303150e-09 1s 1s 121305030e-09 0s 0s 121305990e-09 0s 0s 121313390e-09 1s 1s 121315270e-09 0s 0s 121316270e-09 0s 0s 121323630e-09 1s 1s 121325510e-09 0s 0s 121326550e-09 0s 0s 121333870e-09 1s 1s 121335750e-09 0s 0s 121336830e-09 0s 0s 121344110e-09 1s 1s 121345990e-09 0s 0s 121347110e-09 0s 0s 121354350e-09 1s 1s 121356230e-09 0s 0s 121357390e-09 0s 0s 121364590e-09 1s 1s 121366470e-09 0s 0s 121367670e-09 0s 0s 121374830e-09 1s 1s 121376710e-09 0s 0s 121377950e-09 0s 0s 121385070e-09 1s 1s 121386950e-09 0s 0s 121388230e-09 0s 0s 121395310e-09 1s 1s 121397190e-09 0s 0s 121398510e-09 0s 0s 121405550e-09 1s 1s 121407430e-09 0s 0s 121408790e-09 0s 0s 121415790e-09 1s 1s 121417670e-09 0s 0s 121419070e-09 0s 0s 121426030e-09 1s 1s 121427910e-09 0s 0s 121429350e-09 0s 0s 121436270e-09 1s 1s 121438150e-09 0s 0s 121439630e-09 0s 0s 121446510e-09 1s 1s 121448390e-09 0s 0s 121449910e-09 0s 0s 121456750e-09 1s 1s 121458630e-09 0s 0s 121460190e-09 0s 0s 121466990e-09 1s 1s 121468870e-09 0s 0s 121470470e-09 0s 0s 121477230e-09 1s 1s 121479110e-09 0s 0s 121480750e-09 0s 0s 121487470e-09 1s 1s 121489350e-09 0s 0s 121491030e-09 0s 0s 121497710e-09 1s 1s 121499590e-09 0s 0s 121501310e-09 0s 0s 121507950e-09 1s 1s 121509830e-09 0s 0s 121511590e-09 0s 0s 121518190e-09 1s 1s 121520070e-09 0s 0s 121521870e-09 0s 0s 121528430e-09 1s 1s 121530310e-09 0s 0s 121532150e-09 0s 0s 121538670e-09 1s 1s 121540550e-09 0s 0s 121542430e-09 0s 0s 121548910e-09 1s 1s 121550790e-09 0s 0s 121552710e-09 0s 0s 121559150e-09 1s 1s 121561030e-09 0s 0s 121562990e-09 0s 0s 121569390e-09 1s 1s 121571270e-09 0s 0s 121573270e-09 0s 0s 121579630e-09 1s 1s 121581510e-09 0s 0s 121583550e-09 0s 0s 121589870e-09 1s 1s 121591750e-09 0s 0s 121593830e-09 0s 0s 121600110e-09 1s 1s 121601990e-09 0s 0s 121604110e-09 0s 0s 121610350e-09 1s 1s 121612230e-09 0s 0s 121614390e-09 0s 0s 121620590e-09 1s 1s 121622470e-09 0s 0s 121624670e-09 0s 0s 121630830e-09 1s 1s 121632710e-09 0s 0s 121634950e-09 0s 0s 121641070e-09 1s 1s 121642950e-09 0s 0s 121645230e-09 0s 0s 121651310e-09 1s 1s 121653190e-09 0s 0s 121655510e-09 0s 0s 121661550e-09 1s 1s 121663430e-09 0s 0s 121665790e-09 0s 0s 121671790e-09 1s 1s 121673670e-09 0s 0s 121676070e-09 0s 0s 121682030e-09 1s 1s 121683910e-09 0s 0s 121686350e-09 0s 0s 121692270e-09 1s 1s 121694150e-09 0s 0s 121696630e-09 0s 0s 121702510e-09 1s 1s 121704390e-09 0s 0s 121706910e-09 0s 0s 121712750e-09 1s 1s 121714630e-09 0s 0s 121717190e-09 0s 0s 121722990e-09 1s 1s 121724870e-09 0s 0s 121727470e-09 0s 0s 121733230e-09 1s 1s 121735110e-09 0s 0s 121737750e-09 0s 0s 121743470e-09 1s 1s 121745350e-09 0s 0s 121748030e-09 0s 0s 121753710e-09 1s 1s 121755590e-09 0s 0s 121758310e-09 0s 0s 121763950e-09 1s 1s 121765830e-09 0s 0s 121768590e-09 0s 0s 121774190e-09 1s 1s 121776070e-09 0s 0s 121778870e-09 0s 0s 121784430e-09 1s 1s 121786310e-09 0s 0s 121789150e-09 0s 0s 121794670e-09 1s 1s 121796550e-09 0s 0s 121799430e-09 0s 0s 121804910e-09 1s 1s 121806790e-09 0s 0s 121809710e-09 0s 0s 121815150e-09 1s 1s 121817030e-09 0s 0s 121819990e-09 0s 0s 121825390e-09 1s 1s 121827270e-09 0s 0s 121830270e-09 0s 0s 121835630e-09 1s 1s 121837510e-09 0s 0s 121840550e-09 0s 0s 121845870e-09 1s 1s 121847750e-09 0s 0s 121850830e-09 0s 0s 121856110e-09 1s 1s 121857990e-09 0s 0s 121861110e-09 0s 0s 121866350e-09 1s 1s 121868230e-09 0s 0s 121871390e-09 0s 0s 121876590e-09 1s 1s 121878470e-09 0s 0s 121881670e-09 0s 0s 121886830e-09 1s 1s 121888710e-09 0s 0s 121891950e-09 0s 0s 121897070e-09 1s 1s 121898950e-09 0s 0s 121902230e-09 0s 0s 121907310e-09 1s 1s 121909190e-09 0s 0s 121912510e-09 0s 0s 121917550e-09 1s 1s 121919430e-09 0s 0s 121922790e-09 0s 0s 121927790e-09 1s 1s 121929670e-09 0s 0s 121933070e-09 0s 0s 121938030e-09 1s 1s 121939910e-09 0s 0s 121943350e-09 0s 0s 121948270e-09 1s 1s 121950150e-09 0s 0s 121953630e-09 0s 0s 121958510e-09 1s 1s 121960390e-09 0s 0s 121963910e-09 0s 0s 121968750e-09 1s 1s 121970630e-09 0s 0s 121974190e-09 0s 0s 121978990e-09 1s 1s 121980870e-09 0s 0s 121984470e-09 0s 0s 121989230e-09 1s 1s 121991110e-09 0s 0s 121994750e-09 0s 0s 121999470e-09 1s 1s 122001350e-09 0s 0s 122005030e-09 0s 0s 122009710e-09 1s 1s 122011590e-09 0s 0s 122015310e-09 0s 0s 122019950e-09 1s 1s 122021830e-09 0s 0s 122025590e-09 0s 0s 122030190e-09 1s 1s 122032070e-09 0s 0s 122035870e-09 0s 0s 122040430e-09 1s 1s 122042310e-09 0s 0s 122046150e-09 0s 0s 122050670e-09 1s 1s 122052550e-09 0s 0s 122056430e-09 0s 0s 122060910e-09 1s 1s 122062790e-09 0s 0s 122066710e-09 0s 0s 122071150e-09 1s 1s 122073030e-09 0s 0s 122076990e-09 0s 0s 122081390e-09 1s 1s 122083270e-09 0s 0s 122087270e-09 0s 0s 122091630e-09 1s 1s 122093510e-09 0s 0s 122097550e-09 0s 0s 122101870e-09 1s 1s 122103750e-09 0s 0s 122107830e-09 0s 0s 122112110e-09 1s 1s 122113990e-09 0s 0s 122118110e-09 0s 0s 122122350e-09 1s 1s 122124230e-09 0s 0s 122128390e-09 0s 0s 122132590e-09 1s 1s 122134470e-09 0s 0s 122138670e-09 0s 0s 122142830e-09 1s 1s 122144710e-09 0s 0s 122148950e-09 0s 0s 122153070e-09 1s 1s 122154950e-09 0s 0s 122159230e-09 0s 0s 122163310e-09 1s 1s 122165190e-09 0s 0s 122169510e-09 0s 0s 122173550e-09 1s 1s 122175430e-09 0s 0s 122179790e-09 0s 0s 122183790e-09 1s 1s 122185670e-09 0s 0s 122190070e-09 0s 0s 122194030e-09 1s 1s 122195910e-09 0s 0s 122200350e-09 0s 0s 122204270e-09 1s 1s 122206150e-09 0s 0s 122210630e-09 0s 0s 122214510e-09 1s 1s 122216390e-09 0s 0s 122220910e-09 0s 0s 122224750e-09 1s 1s 122226630e-09 0s 0s 122231190e-09 0s 0s 122234990e-09 1s 1s 122236870e-09 0s 0s 122241470e-09 0s 0s 122245230e-09 1s 1s 122247110e-09 0s 0s 122251750e-09 0s 0s 122255470e-09 1s 1s 122257350e-09 0s 0s 122262030e-09 0s 0s 122265710e-09 1s 1s 122267590e-09 0s 0s 122272310e-09 0s 0s 122275950e-09 1s 1s 122277830e-09 0s 0s 122282590e-09 0s 0s 122286190e-09 1s 1s 122288070e-09 0s 0s 122292870e-09 0s 0s 122296430e-09 1s 1s 122298310e-09 0s 0s 122303150e-09 0s 0s 122306670e-09 1s 1s 122308550e-09 0s 0s 122313430e-09 0s 0s 122316910e-09 1s 1s 122318790e-09 0s 0s 122323710e-09 0s 0s 122327150e-09 1s 1s 122329030e-09 0s 0s 122333990e-09 0s 0s 122337390e-09 1s 1s 122339270e-09 0s 0s 122344270e-09 0s 0s 122347630e-09 1s 1s 122349510e-09 0s 0s 122354550e-09 0s 0s 122357870e-09 1s 1s 122359750e-09 0s 0s 122364830e-09 0s 0s 122368110e-09 1s 1s 122369990e-09 0s 0s 122375110e-09 0s 0s 122378350e-09 1s 1s 122380230e-09 0s 0s 122385390e-09 0s 0s 122388590e-09 1s 1s 122390470e-09 0s 0s 122395670e-09 0s 0s 122398830e-09 1s 1s 122400710e-09 0s 0s 122405950e-09 0s 0s 122409070e-09 1s 1s 122410950e-09 0s 0s 122416230e-09 0s 0s 122419310e-09 1s 1s 122421190e-09 0s 0s 122426510e-09 0s 0s 122429550e-09 1s 1s 122431430e-09 0s 0s 122436790e-09 0s 0s 122439790e-09 1s 1s 122441670e-09 0s 0s 122447070e-09 0s 0s 122450030e-09 1s 1s 122451910e-09 0s 0s 122457350e-09 0s 0s 122460270e-09 1s 1s 122462150e-09 0s 0s 122467630e-09 0s 0s 122470510e-09 1s 1s 122472390e-09 0s 0s 122477910e-09 0s 0s 122480750e-09 1s 1s 122482630e-09 0s 0s 122488190e-09 0s 0s 122490990e-09 1s 1s 122492870e-09 0s 0s 122498470e-09 0s 0s 122501230e-09 1s 1s 122503110e-09 0s 0s 122508750e-09 0s 0s 122511470e-09 1s 1s 122513350e-09 0s 0s 122519030e-09 0s 0s 122521710e-09 1s 1s 122523590e-09 0s 0s 122529310e-09 0s 0s 122531950e-09 1s 1s 122533830e-09 0s 0s 122539590e-09 0s 0s 122542190e-09 1s 1s 122544070e-09 0s 0s 122549870e-09 0s 0s 122552430e-09 1s 1s 122554310e-09 0s 0s 122560150e-09 0s 0s 122562670e-09 1s 1s 122564550e-09 0s 0s 122570430e-09 0s 0s 122572910e-09 1s 1s 122574790e-09 0s 0s 122580710e-09 0s 0s 122583150e-09 1s 1s 122585030e-09 0s 0s 122590990e-09 0s 0s 122593390e-09 1s 1s 122595270e-09 0s 0s 122601270e-09 0s 0s 122603630e-09 1s 1s 122605510e-09 0s 0s 122611550e-09 0s 0s 122613870e-09 1s 1s 122615750e-09 0s 0s 122621830e-09 0s 0s 122624110e-09 1s 1s 122625990e-09 0s 0s 122632110e-09 0s 0s 122634350e-09 1s 1s 122636230e-09 0s 0s 122642390e-09 0s 0s 122644590e-09 1s 1s 122646470e-09 0s 0s 122652670e-09 0s 0s 122654830e-09 1s 1s 122656710e-09 0s 0s 122662950e-09 0s 0s 122665070e-09 1s 1s 122666950e-09 0s 0s 122673230e-09 0s 0s 122675310e-09 1s 1s 122677190e-09 0s 0s 122683510e-09 0s 0s 122685550e-09 1s 1s 122687430e-09 0s 0s 122693790e-09 0s 0s 122695790e-09 1s 1s 122697670e-09 0s 0s 122704070e-09 0s 0s 122706030e-09 1s 1s 122707910e-09 0s 0s 122714350e-09 0s 0s 122716270e-09 1s 1s 122718150e-09 0s 0s 122724630e-09 0s 0s 122726510e-09 1s 1s 122728390e-09 0s 0s 122734910e-09 0s 0s 122736750e-09 1s 1s 122738630e-09 0s 0s 122745190e-09 0s 0s 122746990e-09 1s 1s 122748870e-09 0s 0s 122755470e-09 0s 0s 122757230e-09 1s 1s 122759110e-09 0s 0s 122765750e-09 0s 0s 122767470e-09 1s 1s 122769350e-09 0s 0s 122776030e-09 0s 0s 122777710e-09 1s 1s 122779590e-09 0s 0s 122786310e-09 0s 0s 122787950e-09 1s 1s 122789830e-09 0s 0s 122796590e-09 0s 0s 122798190e-09 1s 1s 122800070e-09 0s 0s 122806870e-09 0s 0s 122808430e-09 1s 1s 122810310e-09 0s 0s 122817150e-09 0s 0s 122818670e-09 1s 1s 122820550e-09 0s 0s 122827430e-09 0s 0s 122828910e-09 1s 1s 122830790e-09 0s 0s 122837710e-09 0s 0s 122839150e-09 1s 1s 122841030e-09 0s 0s 122847990e-09 0s 0s 122849390e-09 1s 1s 122851270e-09 0s 0s 122858270e-09 0s 0s 122859630e-09 1s 1s 122861510e-09 0s 0s 122868550e-09 0s 0s 122869870e-09 1s 1s 122871750e-09 0s 0s 122878830e-09 0s 0s 122880110e-09 1s 1s 122881990e-09 0s 0s 122889110e-09 0s 0s 122890350e-09 1s 1s 122892230e-09 0s 0s 122899390e-09 0s 0s 122900590e-09 1s 1s 122902470e-09 0s 0s 122909670e-09 0s 0s 122910830e-09 1s 1s 122912710e-09 0s 0s 122919950e-09 0s 0s 122921070e-09 1s 1s 122922950e-09 0s 0s 122930230e-09 0s 0s 122931310e-09 1s 1s 122933190e-09 0s 0s 122940510e-09 0s 0s 122941550e-09 1s 1s 122943430e-09 0s 0s 122950790e-09 0s 0s 122951790e-09 1s 1s 122953670e-09 0s 0s 122961070e-09 0s 0s 122962030e-09 1s 1s 122963910e-09 0s 0s 122971350e-09 0s 0s 122972270e-09 1s 1s 122974150e-09 0s 0s 122981630e-09 0s 0s 122982510e-09 1s 1s 122984390e-09 0s 0s 122991910e-09 0s 0s 122992750e-09 1s 1s 122994630e-09 0s 0s 123002190e-09 0s 0s 123002990e-09 1s 1s 123004870e-09 0s 0s 123012470e-09 0s 0s 123013230e-09 1s 1s 123015110e-09 0s 0s 123022750e-09 0s 0s 123023470e-09 1s 1s 123025350e-09 0s 0s 123033030e-09 0s 0s 123033710e-09 1s 1s 123035590e-09 0s 0s 123043310e-09 0s 0s 123043950e-09 1s 1s 123045830e-09 0s 0s 123053590e-09 0s 0s 123054190e-09 1s 1s 123056070e-09 0s 0s 123063870e-09 0s 0s 123064430e-09 1s 1s 123066310e-09 0s 0s 123074150e-09 0s 0s 123074670e-09 1s 1s 123076550e-09 0s 0s 123084430e-09 0s 0s 123084910e-09 1s 1s 123086790e-09 0s 0s 123094710e-09 0s 0s 123095150e-09 1s 1s 123097030e-09 0s 0s 123104990e-09 0s 0s 123105390e-09 1s 1s 123107270e-09 0s 0s 123115270e-09 0s 0s 123115630e-09 1s 1s 123117510e-09 0s 0s 123125550e-09 0s 0s 123125870e-09 1s 1s 123127750e-09 0s 0s 123135830e-09 0s 0s 123136110e-09 1s 1s 123137990e-09 0s 0s 123146110e-09 0s 0s 123146350e-09 1s 1s 123148230e-09 0s 0s 123156390e-09 0s 0s 123156590e-09 1s 1s 123158470e-09 0s 0s 123166670e-09 0s 0s 123166830e-09 1s 1s 123168710e-09 0s 0s 123176950e-09 0s 0s 123177070e-09 1s 1s 123178950e-09 0s 0s 123187230e-09 0s 0s 123187310e-09 1s 1s 123189190e-09 0s 0s 123197510e-09 0s 0s 123197550e-09 1s 1s 123199430e-09 0s 0s 123207790e-09 1s 1s 123207830e-09 1s 1s 123209710e-09 0s 0s 123218030e-09 1s 1s 123218110e-09 1s 1s 123219950e-09 0s 0s 123228270e-09 1s 1s 123228390e-09 1s 1s 123230190e-09 0s 0s 123238510e-09 1s 1s 123238670e-09 1s 1s 123240430e-09 0s 0s 123248750e-09 1s 1s 123248950e-09 1s 1s 123250670e-09 0s 0s 123258990e-09 1s 1s 123259230e-09 1s 1s 123260910e-09 0s 0s 123269230e-09 1s 1s 123269510e-09 1s 1s 123271150e-09 0s 0s 123279470e-09 1s 1s 123279790e-09 1s 1s 123281390e-09 0s 0s 123289710e-09 1s 1s 123290070e-09 1s 1s 123291630e-09 0s 0s 123299950e-09 1s 1s 123300350e-09 1s 1s 123301870e-09 0s 0s 123310190e-09 1s 1s 123310630e-09 1s 1s 123312110e-09 0s 0s 123320430e-09 1s 1s 123320910e-09 1s 1s 123322350e-09 0s 0s 123330670e-09 1s 1s 123331190e-09 1s 1s 123332590e-09 0s 0s 123340910e-09 1s 1s 123341470e-09 1s 1s 123342830e-09 0s 0s 123351150e-09 1s 1s 123351750e-09 1s 1s 123353070e-09 0s 0s 123361390e-09 1s 1s 123362030e-09 1s 1s 123363310e-09 0s 0s 123371630e-09 1s 1s 123372310e-09 1s 1s 123373550e-09 0s 0s 123381870e-09 1s 1s 123382590e-09 1s 1s 123383790e-09 0s 0s 123392110e-09 1s 1s 123392870e-09 1s 1s 123394030e-09 0s 0s 123402350e-09 1s 1s 123403150e-09 1s 1s 123404270e-09 0s 0s 123412590e-09 1s 1s 123413430e-09 1s 1s 123414510e-09 0s 0s 123422830e-09 1s 1s 123423710e-09 1s 1s 123424750e-09 0s 0s 123433070e-09 1s 1s 123433990e-09 1s 1s 123434990e-09 0s 0s 123443310e-09 1s 1s 123444270e-09 1s 1s 123445230e-09 0s 0s 123453550e-09 1s 1s 123454550e-09 1s 1s 123455470e-09 0s 0s 123463790e-09 1s 1s 123464830e-09 1s 1s 123465710e-09 0s 0s 123474030e-09 1s 1s 123475110e-09 1s 1s 123475950e-09 0s 0s 123484270e-09 1s 1s 123485390e-09 1s 1s 123486190e-09 0s 0s 123494510e-09 1s 1s 123495670e-09 1s 1s 123496430e-09 0s 0s 123504750e-09 1s 1s 123505950e-09 1s 1s 123506670e-09 0s 0s 123514990e-09 1s 1s 123516230e-09 1s 1s 123516910e-09 0s 0s 123525230e-09 1s 1s 123526510e-09 1s 1s 123527150e-09 0s 0s 123535470e-09 1s 1s 123536790e-09 1s 1s 123537390e-09 0s 0s 123545710e-09 1s 1s 123547070e-09 1s 1s 123547630e-09 0s 0s 123555950e-09 1s 1s 123557350e-09 1s 1s 123557870e-09 0s 0s 123566190e-09 1s 1s 123567630e-09 1s 1s 123568110e-09 0s 0s 123576430e-09 1s 1s 123577910e-09 1s 1s 123578350e-09 0s 0s 123586670e-09 1s 1s 123588190e-09 1s 1s 123588590e-09 0s 0s 123596910e-09 1s 1s 123598470e-09 1s 1s 123598830e-09 0s 0s 123607150e-09 1s 1s 123608750e-09 1s 1s 123609070e-09 0s 0s 123617390e-09 1s 1s 123619030e-09 1s 1s 123619310e-09 0s 0s 123627630e-09 1s 1s 123629310e-09 1s 1s 123629550e-09 0s 0s 123637870e-09 1s 1s 123639590e-09 1s 1s 123639790e-09 0s 0s 123648110e-09 1s 1s 123649870e-09 1s 1s 123650030e-09 0s 0s 123658350e-09 1s 1s 123660150e-09 1s 1s 123660270e-09 0s 0s 123668590e-09 1s 1s 123670430e-09 1s 1s 123670510e-09 0s 0s 123678830e-09 1s 1s 123680710e-09 1s 1s 123680750e-09 0s 0s 123689070e-09 1s 1s 123690990e-09 0s 0s 123699310e-09 1s 1s 123701230e-09 0s 0s 123701270e-09 0s 0s 123709550e-09 1s 1s 123711470e-09 0s 0s 123711550e-09 0s 0s 123719790e-09 1s 1s 123721710e-09 0s 0s 123721830e-09 0s 0s 123730030e-09 1s 1s 123731950e-09 0s 0s 123732110e-09 0s 0s 123740270e-09 1s 1s 123742190e-09 0s 0s 123742390e-09 0s 0s 123750510e-09 1s 1s 123752430e-09 0s 0s 123752670e-09 0s 0s 123760750e-09 1s 1s 123762670e-09 0s 0s 123762950e-09 0s 0s 123770990e-09 1s 1s 123772910e-09 0s 0s 123773230e-09 0s 0s 123781230e-09 1s 1s 123783150e-09 0s 0s 123783510e-09 0s 0s 123791470e-09 1s 1s 123793390e-09 0s 0s 123793790e-09 0s 0s 123801710e-09 1s 1s 123803630e-09 0s 0s 123804070e-09 0s 0s 123811950e-09 1s 1s 123813870e-09 0s 0s 123814350e-09 0s 0s 123822190e-09 1s 1s 123824110e-09 0s 0s 123824630e-09 0s 0s 123832430e-09 1s 1s 123834350e-09 0s 0s 123834910e-09 0s 0s 123842670e-09 1s 1s 123844590e-09 0s 0s 123845190e-09 0s 0s 123852910e-09 1s 1s 123854830e-09 0s 0s 123855470e-09 0s 0s 123863150e-09 1s 1s 123865070e-09 0s 0s 123865750e-09 0s 0s 123873390e-09 1s 1s 123875310e-09 0s 0s 123876030e-09 0s 0s 123883630e-09 1s 1s 123885550e-09 0s 0s 123886310e-09 0s 0s 123893870e-09 1s 1s 123895790e-09 0s 0s 123896590e-09 0s 0s 123904110e-09 1s 1s 123906030e-09 0s 0s 123906870e-09 0s 0s 123914350e-09 1s 1s 123916270e-09 0s 0s 123917150e-09 0s 0s 123924590e-09 1s 1s 123926510e-09 0s 0s 123927430e-09 0s 0s 123934830e-09 1s 1s 123936750e-09 0s 0s 123937710e-09 0s 0s 123945070e-09 1s 1s 123946990e-09 0s 0s 123947990e-09 0s 0s 123955310e-09 1s 1s 123957230e-09 0s 0s 123958270e-09 0s 0s 123965550e-09 1s 1s 123967470e-09 0s 0s 123968550e-09 0s 0s 123975790e-09 1s 1s 123977710e-09 0s 0s 123978830e-09 0s 0s 123986030e-09 1s 1s 123987950e-09 0s 0s 123989110e-09 0s 0s 123996270e-09 1s 1s 123998190e-09 0s 0s 123999390e-09 0s 0s 124006510e-09 1s 1s 124008430e-09 0s 0s 124009670e-09 0s 0s 124016750e-09 1s 1s 124018670e-09 0s 0s 124019950e-09 0s 0s 124026990e-09 1s 1s 124028910e-09 0s 0s 124030230e-09 0s 0s 124037230e-09 1s 1s 124039150e-09 0s 0s 124040510e-09 0s 0s 124047470e-09 1s 1s 124049390e-09 0s 0s 124050790e-09 0s 0s 124057710e-09 1s 1s 124059630e-09 0s 0s 124061070e-09 0s 0s 124067950e-09 1s 1s 124069870e-09 0s 0s 124071350e-09 0s 0s 124078190e-09 1s 1s 124080110e-09 0s 0s 124081630e-09 0s 0s 124088430e-09 1s 1s 124090350e-09 0s 0s 124091910e-09 0s 0s 124098670e-09 1s 1s 124100590e-09 0s 0s 124102190e-09 0s 0s 124108910e-09 1s 1s 124110830e-09 0s 0s 124112470e-09 0s 0s 124119150e-09 1s 1s 124121070e-09 0s 0s 124122750e-09 0s 0s 124129390e-09 1s 1s 124131310e-09 0s 0s 124133030e-09 0s 0s 124139630e-09 1s 1s 124141550e-09 0s 0s 124143310e-09 0s 0s 124149870e-09 1s 1s 124151790e-09 0s 0s 124153590e-09 0s 0s 124160110e-09 1s 1s 124162030e-09 0s 0s 124163870e-09 0s 0s 124170350e-09 1s 1s 124172270e-09 0s 0s 124174150e-09 0s 0s 124180590e-09 1s 1s 124182510e-09 0s 0s 124184430e-09 0s 0s 124190830e-09 1s 1s 124192750e-09 0s 0s 124194710e-09 0s 0s 124201070e-09 1s 1s 124202990e-09 0s 0s 124204990e-09 0s 0s 124211310e-09 1s 1s 124213230e-09 0s 0s 124215270e-09 0s 0s 124221550e-09 1s 1s 124223470e-09 0s 0s 124225550e-09 0s 0s 124231790e-09 1s 1s 124233710e-09 0s 0s 124235830e-09 0s 0s 124242030e-09 1s 1s 124243950e-09 0s 0s 124246110e-09 0s 0s 124252270e-09 1s 1s 124254190e-09 0s 0s 124256390e-09 0s 0s 124262510e-09 1s 1s 124264430e-09 0s 0s 124266670e-09 0s 0s 124272750e-09 1s 1s 124274670e-09 0s 0s 124276950e-09 0s 0s 124282990e-09 1s 1s 124284910e-09 0s 0s 124287230e-09 0s 0s 124293230e-09 1s 1s 124295150e-09 0s 0s 124297510e-09 0s 0s 124303470e-09 1s 1s 124305390e-09 0s 0s 124307790e-09 0s 0s 124313710e-09 1s 1s 124315630e-09 0s 0s 124318070e-09 0s 0s 124323950e-09 1s 1s 124325870e-09 0s 0s 124328350e-09 0s 0s 124334190e-09 1s 1s 124336110e-09 0s 0s 124338630e-09 0s 0s 124344430e-09 1s 1s 124346350e-09 0s 0s 124348910e-09 0s 0s 124354670e-09 1s 1s 124356590e-09 0s 0s 124359190e-09 0s 0s 124364910e-09 1s 1s 124366830e-09 0s 0s 124369470e-09 0s 0s 124375150e-09 1s 1s 124377070e-09 0s 0s 124379750e-09 0s 0s 124385390e-09 1s 1s 124387310e-09 0s 0s 124390030e-09 0s 0s 124395630e-09 1s 1s 124397550e-09 0s 0s 124400310e-09 0s 0s 124405870e-09 1s 1s 124407790e-09 0s 0s 124410590e-09 0s 0s 124416110e-09 1s 1s 124418030e-09 0s 0s 124420870e-09 0s 0s 124426350e-09 1s 1s 124428270e-09 0s 0s 124431150e-09 0s 0s 124436590e-09 1s 1s 124438510e-09 0s 0s 124441430e-09 0s 0s 124446830e-09 1s 1s 124448750e-09 0s 0s 124451710e-09 0s 0s 124457070e-09 1s 1s 124458990e-09 0s 0s 124461990e-09 0s 0s 124467310e-09 1s 1s 124469230e-09 0s 0s 124472270e-09 0s 0s 124477550e-09 1s 1s 124479470e-09 0s 0s 124482550e-09 0s 0s 124487790e-09 1s 1s 124489710e-09 0s 0s 124492830e-09 0s 0s 124498030e-09 1s 1s 124499950e-09 0s 0s 124503110e-09 0s 0s 124508270e-09 1s 1s 124510190e-09 0s 0s 124513390e-09 0s 0s 124518510e-09 1s 1s 124520430e-09 0s 0s 124523670e-09 0s 0s 124528750e-09 1s 1s 124530670e-09 0s 0s 124533950e-09 0s 0s 124538990e-09 1s 1s 124540910e-09 0s 0s 124544230e-09 0s 0s 124549230e-09 1s 1s 124551150e-09 0s 0s 124554510e-09 0s 0s 124559470e-09 1s 1s 124561390e-09 0s 0s 124564790e-09 0s 0s 124569710e-09 1s 1s 124571630e-09 0s 0s 124575070e-09 0s 0s 124579950e-09 1s 1s 124581870e-09 0s 0s 124585350e-09 0s 0s 124590190e-09 1s 1s 124592110e-09 0s 0s 124595630e-09 0s 0s 124600430e-09 1s 1s 124602350e-09 0s 0s 124605910e-09 0s 0s 124610670e-09 1s 1s 124612590e-09 0s 0s 124616190e-09 0s 0s 124620910e-09 1s 1s 124622830e-09 0s 0s 124626470e-09 0s 0s 124631150e-09 1s 1s 124633070e-09 0s 0s 124636750e-09 0s 0s 124641390e-09 1s 1s 124643310e-09 0s 0s 124647030e-09 0s 0s 124651630e-09 1s 1s 124653550e-09 0s 0s 124657310e-09 0s 0s 124661870e-09 1s 1s 124663790e-09 0s 0s 124667590e-09 0s 0s 124672110e-09 1s 1s 124674030e-09 0s 0s 124677870e-09 0s 0s 124682350e-09 1s 1s 124684270e-09 0s 0s 124688150e-09 0s 0s 124692590e-09 1s 1s 124694510e-09 0s 0s 124698430e-09 0s 0s 124702830e-09 1s 1s 124704750e-09 0s 0s 124708710e-09 0s 0s 124713070e-09 1s 1s 124714990e-09 0s 0s 124718990e-09 0s 0s 124723310e-09 1s 1s 124725230e-09 0s 0s 124729270e-09 0s 0s 124733550e-09 1s 1s 124735470e-09 0s 0s 124739550e-09 0s 0s 124743790e-09 1s 1s 124745710e-09 0s 0s 124749830e-09 0s 0s 124754030e-09 1s 1s 124755950e-09 0s 0s 124760110e-09 0s 0s 124764270e-09 1s 1s 124766190e-09 0s 0s 124770390e-09 0s 0s 124774510e-09 1s 1s 124776430e-09 0s 0s 124780670e-09 0s 0s 124784750e-09 1s 1s 124786670e-09 0s 0s 124790950e-09 0s 0s 124794990e-09 1s 1s 124796910e-09 0s 0s 124801230e-09 0s 0s 124805230e-09 1s 1s 124807150e-09 0s 0s 124811510e-09 0s 0s 124815470e-09 1s 1s 124817390e-09 0s 0s 124821790e-09 0s 0s 124825710e-09 1s 1s 124827630e-09 0s 0s 124832070e-09 0s 0s 124835950e-09 1s 1s 124837870e-09 0s 0s 124842350e-09 0s 0s 124846190e-09 1s 1s 124848110e-09 0s 0s 124852630e-09 0s 0s 124856430e-09 1s 1s 124858350e-09 0s 0s 124862910e-09 0s 0s 124866670e-09 1s 1s 124868590e-09 0s 0s 124873190e-09 0s 0s 124876910e-09 1s 1s 124878830e-09 0s 0s 124883470e-09 0s 0s 124887150e-09 1s 1s 124889070e-09 0s 0s 124893750e-09 0s 0s 124897390e-09 1s 1s 124899310e-09 0s 0s 124904030e-09 0s 0s 124907630e-09 1s 1s 124909550e-09 0s 0s 124914310e-09 0s 0s 124917870e-09 1s 1s 124919790e-09 0s 0s 124924590e-09 0s 0s 124928110e-09 1s 1s 124930030e-09 0s 0s 124934870e-09 0s 0s 124938350e-09 1s 1s 124940270e-09 0s 0s 124945150e-09 0s 0s 124948590e-09 1s 1s 124950510e-09 0s 0s 124955430e-09 0s 0s 124958830e-09 1s 1s 124960750e-09 0s 0s 124965710e-09 0s 0s 124969070e-09 1s 1s 124970990e-09 0s 0s 124975990e-09 0s 0s 124979310e-09 1s 1s 124981230e-09 0s 0s 124986270e-09 0s 0s 124989550e-09 1s 1s 124991470e-09 0s 0s 124996550e-09 0s 0s 124999790e-09 1s 1s 125001710e-09 0s 0s 125006830e-09 0s 0s 125010030e-09 1s 1s 125011950e-09 0s 0s 125017110e-09 0s 0s 125020270e-09 1s 1s 125022190e-09 0s 0s 125027390e-09 0s 0s 125030510e-09 1s 1s 125032430e-09 0s 0s 125037670e-09 0s 0s 125040750e-09 1s 1s 125042670e-09 0s 0s 125047950e-09 0s 0s 125050990e-09 1s 1s 125052910e-09 0s 0s 125058230e-09 0s 0s 125061230e-09 1s 1s 125063150e-09 0s 0s 125068510e-09 0s 0s 125071470e-09 1s 1s 125073390e-09 0s 0s 125078790e-09 0s 0s 125081710e-09 1s 1s 125083630e-09 0s 0s 125089070e-09 0s 0s 125091950e-09 1s 1s 125093870e-09 0s 0s 125099350e-09 0s 0s 125102190e-09 1s 1s 125104110e-09 0s 0s 125109630e-09 0s 0s 125112430e-09 1s 1s 125114350e-09 0s 0s 125119910e-09 0s 0s 125122670e-09 1s 1s 125124590e-09 0s 0s 125130190e-09 0s 0s 125132910e-09 1s 1s 125134830e-09 0s 0s 125140470e-09 0s 0s 125143150e-09 1s 1s 125145070e-09 0s 0s 125150750e-09 0s 0s 125153390e-09 1s 1s 125155310e-09 0s 0s 125161030e-09 0s 0s 125163630e-09 1s 1s 125165550e-09 0s 0s 125171310e-09 0s 0s 125173870e-09 1s 1s 125175790e-09 0s 0s 125181590e-09 0s 0s 125184110e-09 1s 1s 125186030e-09 0s 0s 125191870e-09 0s 0s 125194350e-09 1s 1s 125196270e-09 0s 0s 125202150e-09 0s 0s 125204590e-09 1s 1s 125206510e-09 0s 0s 125212430e-09 0s 0s 125214830e-09 1s 1s 125216750e-09 0s 0s 125222710e-09 0s 0s 125225070e-09 1s 1s 125226990e-09 0s 0s 125232990e-09 0s 0s 125235310e-09 1s 1s 125237230e-09 0s 0s 125243270e-09 0s 0s 125245550e-09 1s 1s 125247470e-09 0s 0s 125253550e-09 0s 0s 125255790e-09 1s 1s 125257710e-09 0s 0s 125263830e-09 0s 0s 125266030e-09 1s 1s 125267950e-09 0s 0s 125274110e-09 0s 0s 125276270e-09 1s 1s 125278190e-09 0s 0s 125284390e-09 0s 0s 125286510e-09 1s 1s 125288430e-09 0s 0s 125294670e-09 0s 0s 125296750e-09 1s 1s 125298670e-09 0s 0s 125304950e-09 0s 0s 125306990e-09 1s 1s 125308910e-09 0s 0s 125315230e-09 0s 0s 125317230e-09 1s 1s 125319150e-09 0s 0s 125325510e-09 0s 0s 125327470e-09 1s 1s 125329390e-09 0s 0s 125335790e-09 0s 0s 125337710e-09 1s 1s 125339630e-09 0s 0s 125346070e-09 0s 0s 125347950e-09 1s 1s 125349870e-09 0s 0s 125356350e-09 0s 0s 125358190e-09 1s 1s 125360110e-09 0s 0s 125366630e-09 0s 0s 125368430e-09 1s 1s 125370350e-09 0s 0s 125376910e-09 0s 0s 125378670e-09 1s 1s 125380590e-09 0s 0s 125387190e-09 0s 0s 125388910e-09 1s 1s 125390830e-09 0s 0s 125397470e-09 0s 0s 125399150e-09 1s 1s 125401070e-09 0s 0s 125407750e-09 0s 0s 125409390e-09 1s 1s 125411310e-09 0s 0s 125418030e-09 0s 0s 125419630e-09 1s 1s 125421550e-09 0s 0s 125428310e-09 0s 0s 125429870e-09 1s 1s 125431790e-09 0s 0s 125438590e-09 0s 0s 125440110e-09 1s 1s 125442030e-09 0s 0s 125448870e-09 0s 0s 125450350e-09 1s 1s 125452270e-09 0s 0s 125459150e-09 0s 0s 125460590e-09 1s 1s 125462510e-09 0s 0s 125469430e-09 0s 0s 125470830e-09 1s 1s 125472750e-09 0s 0s 125479710e-09 0s 0s 125481070e-09 1s 1s 125482990e-09 0s 0s 125489990e-09 0s 0s 125491310e-09 1s 1s 125493230e-09 0s 0s 125500270e-09 0s 0s 125501550e-09 1s 1s 125503470e-09 0s 0s 125510550e-09 0s 0s 125511790e-09 1s 1s 125513710e-09 0s 0s 125520830e-09 0s 0s 125522030e-09 1s 1s 125523950e-09 0s 0s 125531110e-09 0s 0s 125532270e-09 1s 1s 125534190e-09 0s 0s 125541390e-09 0s 0s 125542510e-09 1s 1s 125544430e-09 0s 0s 125551670e-09 0s 0s 125552750e-09 1s 1s 125554670e-09 0s 0s 125561950e-09 0s 0s 125562990e-09 1s 1s 125564910e-09 0s 0s 125572230e-09 0s 0s 125573230e-09 1s 1s 125575150e-09 0s 0s 125582510e-09 0s 0s 125583470e-09 1s 1s 125585390e-09 0s 0s 125592790e-09 0s 0s 125593710e-09 1s 1s 125595630e-09 0s 0s 125603070e-09 0s 0s 125603950e-09 1s 1s 125605870e-09 0s 0s 125613350e-09 0s 0s 125614190e-09 1s 1s 125616110e-09 0s 0s 125623630e-09 0s 0s 125624430e-09 1s 1s 125626350e-09 0s 0s 125633910e-09 0s 0s 125634670e-09 1s 1s 125636590e-09 0s 0s 125644190e-09 0s 0s 125644910e-09 1s 1s 125646830e-09 0s 0s 125654470e-09 0s 0s 125655150e-09 1s 1s 125657070e-09 0s 0s 125664750e-09 0s 0s 125665390e-09 1s 1s 125667310e-09 0s 0s 125675030e-09 0s 0s 125675630e-09 1s 1s 125677550e-09 0s 0s 125685310e-09 0s 0s 125685870e-09 1s 1s 125687790e-09 0s 0s 125695590e-09 0s 0s 125696110e-09 1s 1s 125698030e-09 0s 0s 125705870e-09 0s 0s 125706350e-09 1s 1s 125708270e-09 0s 0s 125716150e-09 0s 0s 125716590e-09 1s 1s 125718510e-09 0s 0s 125726430e-09 0s 0s 125726830e-09 1s 1s 125728750e-09 0s 0s 125736710e-09 0s 0s 125737070e-09 1s 1s 125738990e-09 0s 0s 125746990e-09 0s 0s 125747310e-09 1s 1s 125749230e-09 0s 0s 125757270e-09 0s 0s 125757550e-09 1s 1s 125759470e-09 0s 0s 125767550e-09 0s 0s 125767790e-09 1s 1s 125769710e-09 0s 0s 125777830e-09 0s 0s 125778030e-09 1s 1s 125779950e-09 0s 0s 125788110e-09 0s 0s 125788270e-09 1s 1s 125790190e-09 0s 0s 125798390e-09 0s 0s 125798510e-09 1s 1s 125800430e-09 0s 0s 125808670e-09 0s 0s 125808750e-09 1s 1s 125810670e-09 0s 0s 125818950e-09 0s 0s 125818990e-09 1s 1s 125820910e-09 0s 0s 125829230e-09 1s 1s 125829270e-09 1s 1s 125831190e-09 0s 0s 125839470e-09 1s 1s 125839550e-09 1s 1s 125841430e-09 0s 0s 125849710e-09 1s 1s 125849830e-09 1s 1s 125851670e-09 0s 0s 125859950e-09 1s 1s 125860110e-09 1s 1s 125861910e-09 0s 0s 125870190e-09 1s 1s 125870390e-09 1s 1s 125872150e-09 0s 0s 125880430e-09 1s 1s 125880670e-09 1s 1s 125882390e-09 0s 0s 125890670e-09 1s 1s 125890950e-09 1s 1s 125892630e-09 0s 0s 125900910e-09 1s 1s 125901230e-09 1s 1s 125902870e-09 0s 0s 125911150e-09 1s 1s 125911510e-09 1s 1s 125913110e-09 0s 0s 125921390e-09 1s 1s 125921790e-09 1s 1s 125923350e-09 0s 0s 125931630e-09 1s 1s 125932070e-09 1s 1s 125933590e-09 0s 0s 125941870e-09 1s 1s 125942350e-09 1s 1s 125943830e-09 0s 0s 125952110e-09 1s 1s 125952630e-09 1s 1s 125954070e-09 0s 0s 125962350e-09 1s 1s 125962910e-09 1s 1s 125964310e-09 0s 0s 125972590e-09 1s 1s 125973190e-09 1s 1s 125974550e-09 0s 0s 125982830e-09 1s 1s 125983470e-09 1s 1s 125984790e-09 0s 0s 125993070e-09 1s 1s 125993750e-09 1s 1s 125995030e-09 0s 0s 126003310e-09 1s 1s 126004030e-09 1s 1s 126005270e-09 0s 0s 126013550e-09 1s 1s 126014310e-09 1s 1s 126015510e-09 0s 0s 126023790e-09 1s 1s 126024590e-09 1s 1s 126025750e-09 0s 0s 126034030e-09 1s 1s 126034870e-09 1s 1s 126035990e-09 0s 0s 126044270e-09 1s 1s 126045150e-09 1s 1s 126046230e-09 0s 0s 126054510e-09 1s 1s 126055430e-09 1s 1s 126056470e-09 0s 0s 126064750e-09 1s 1s 126065710e-09 1s 1s 126066710e-09 0s 0s 126074990e-09 1s 1s 126075990e-09 1s 1s 126076950e-09 0s 0s 126085230e-09 1s 1s 126086270e-09 1s 1s 126087190e-09 0s 0s 126095470e-09 1s 1s 126096550e-09 1s 1s 126097430e-09 0s 0s 126105710e-09 1s 1s 126106830e-09 1s 1s 126107670e-09 0s 0s 126115950e-09 1s 1s 126117110e-09 1s 1s 126117910e-09 0s 0s 126126190e-09 1s 1s 126127390e-09 1s 1s 126128150e-09 0s 0s 126136430e-09 1s 1s 126137670e-09 1s 1s 126138390e-09 0s 0s 126146670e-09 1s 1s 126147950e-09 1s 1s 126148630e-09 0s 0s 126156910e-09 1s 1s 126158230e-09 1s 1s 126158870e-09 0s 0s 126167150e-09 1s 1s 126168510e-09 1s 1s 126169110e-09 0s 0s 126177390e-09 1s 1s 126178790e-09 1s 1s 126179350e-09 0s 0s 126187630e-09 1s 1s 126189070e-09 1s 1s 126189590e-09 0s 0s 126197870e-09 1s 1s 126199350e-09 1s 1s 126199830e-09 0s 0s 126208110e-09 1s 1s 126209630e-09 1s 1s 126210070e-09 0s 0s 126218350e-09 1s 1s 126219910e-09 1s 1s 126220310e-09 0s 0s 126228590e-09 1s 1s 126230190e-09 1s 1s 126230550e-09 0s 0s 126238830e-09 1s 1s 126240470e-09 1s 1s 126240790e-09 0s 0s 126249070e-09 1s 1s 126250750e-09 1s 1s 126251030e-09 0s 0s 126259310e-09 1s 1s 126261030e-09 1s 1s 126261270e-09 0s 0s 126269550e-09 1s 1s 126271310e-09 1s 1s 126271510e-09 0s 0s 126279790e-09 1s 1s 126281590e-09 1s 1s 126281750e-09 0s 0s 126290030e-09 1s 1s 126291870e-09 1s 1s 126291990e-09 0s 0s 126300270e-09 1s 1s 126302150e-09 1s 1s 126302230e-09 0s 0s 126310510e-09 1s 1s 126312430e-09 1s 1s 126312470e-09 0s 0s 126320750e-09 1s 1s 126322710e-09 0s 0s 126330990e-09 1s 1s 126332950e-09 0s 0s 126332990e-09 0s 0s 126341230e-09 1s 1s 126343190e-09 0s 0s 126343270e-09 0s 0s 126351470e-09 1s 1s 126353430e-09 0s 0s 126353550e-09 0s 0s 126361710e-09 1s 1s 126363670e-09 0s 0s 126363830e-09 0s 0s 126371950e-09 1s 1s 126373910e-09 0s 0s 126374110e-09 0s 0s 126382190e-09 1s 1s 126384150e-09 0s 0s 126384390e-09 0s 0s 126392430e-09 1s 1s 126394390e-09 0s 0s 126394670e-09 0s 0s 126402670e-09 1s 1s 126404630e-09 0s 0s 126404950e-09 0s 0s 126412910e-09 1s 1s 126414870e-09 0s 0s 126415230e-09 0s 0s 126423150e-09 1s 1s 126425110e-09 0s 0s 126425510e-09 0s 0s 126433390e-09 1s 1s 126435350e-09 0s 0s 126435790e-09 0s 0s 126443630e-09 1s 1s 126445590e-09 0s 0s 126446070e-09 0s 0s 126453870e-09 1s 1s 126455830e-09 0s 0s 126456350e-09 0s 0s 126464110e-09 1s 1s 126466070e-09 0s 0s 126466630e-09 0s 0s 126474350e-09 1s 1s 126476310e-09 0s 0s 126476910e-09 0s 0s 126484590e-09 1s 1s 126486550e-09 0s 0s 126487190e-09 0s 0s 126494830e-09 1s 1s 126496790e-09 0s 0s 126497470e-09 0s 0s 126505070e-09 1s 1s 126507030e-09 0s 0s 126507750e-09 0s 0s 126515310e-09 1s 1s 126517270e-09 0s 0s 126518030e-09 0s 0s 126525550e-09 1s 1s 126527510e-09 0s 0s 126528310e-09 0s 0s 126535790e-09 1s 1s 126537750e-09 0s 0s 126538590e-09 0s 0s 126546030e-09 1s 1s 126547990e-09 0s 0s 126548870e-09 0s 0s 126556270e-09 1s 1s 126558230e-09 0s 0s 126559150e-09 0s 0s 126566510e-09 1s 1s 126568470e-09 0s 0s 126569430e-09 0s 0s 126576750e-09 1s 1s 126578710e-09 0s 0s 126579710e-09 0s 0s 126586990e-09 1s 1s 126588950e-09 0s 0s 126589990e-09 0s 0s 126597230e-09 1s 1s 126599190e-09 0s 0s 126600270e-09 0s 0s 126607470e-09 1s 1s 126609430e-09 0s 0s 126610550e-09 0s 0s 126617710e-09 1s 1s 126619670e-09 0s 0s 126620830e-09 0s 0s 126627950e-09 1s 1s 126629910e-09 0s 0s 126631110e-09 0s 0s 126638190e-09 1s 1s 126640150e-09 0s 0s 126641390e-09 0s 0s 126648430e-09 1s 1s 126650390e-09 0s 0s 126651670e-09 0s 0s 126658670e-09 1s 1s 126660630e-09 0s 0s 126661950e-09 0s 0s 126668910e-09 1s 1s 126670870e-09 0s 0s 126672230e-09 0s 0s 126679150e-09 1s 1s 126681110e-09 0s 0s 126682510e-09 0s 0s 126689390e-09 1s 1s 126691350e-09 0s 0s 126692790e-09 0s 0s 126699630e-09 1s 1s 126701590e-09 0s 0s 126703070e-09 0s 0s 126709870e-09 1s 1s 126711830e-09 0s 0s 126713350e-09 0s 0s 126720110e-09 1s 1s 126722070e-09 0s 0s 126723630e-09 0s 0s 126730350e-09 1s 1s 126732310e-09 0s 0s 126733910e-09 0s 0s 126740590e-09 1s 1s 126742550e-09 0s 0s 126744190e-09 0s 0s 126750830e-09 1s 1s 126752790e-09 0s 0s 126754470e-09 0s 0s 126761070e-09 1s 1s 126763030e-09 0s 0s 126764750e-09 0s 0s 126771310e-09 1s 1s 126773270e-09 0s 0s 126775030e-09 0s 0s 126781550e-09 1s 1s 126783510e-09 0s 0s 126785310e-09 0s 0s 126791790e-09 1s 1s 126793750e-09 0s 0s 126795590e-09 0s 0s 126802030e-09 1s 1s 126803990e-09 0s 0s 126805870e-09 0s 0s 126812270e-09 1s 1s 126814230e-09 0s 0s 126816150e-09 0s 0s 126822510e-09 1s 1s 126824470e-09 0s 0s 126826430e-09 0s 0s 126832750e-09 1s 1s 126834710e-09 0s 0s 126836710e-09 0s 0s 126842990e-09 1s 1s 126844950e-09 0s 0s 126846990e-09 0s 0s 126853230e-09 1s 1s 126855190e-09 0s 0s 126857270e-09 0s 0s 126863470e-09 1s 1s 126865430e-09 0s 0s 126867550e-09 0s 0s 126873710e-09 1s 1s 126875670e-09 0s 0s 126877830e-09 0s 0s 126883950e-09 1s 1s 126885910e-09 0s 0s 126888110e-09 0s 0s 126894190e-09 1s 1s 126896150e-09 0s 0s 126898390e-09 0s 0s 126904430e-09 1s 1s 126906390e-09 0s 0s 126908670e-09 0s 0s 126914670e-09 1s 1s 126916630e-09 0s 0s 126918950e-09 0s 0s 126924910e-09 1s 1s 126926870e-09 0s 0s 126929230e-09 0s 0s 126935150e-09 1s 1s 126937110e-09 0s 0s 126939510e-09 0s 0s 126945390e-09 1s 1s 126947350e-09 0s 0s 126949790e-09 0s 0s 126955630e-09 1s 1s 126957590e-09 0s 0s 126960070e-09 0s 0s 126965870e-09 1s 1s 126967830e-09 0s 0s 126970350e-09 0s 0s 126976110e-09 1s 1s 126978070e-09 0s 0s 126980630e-09 0s 0s 126986350e-09 1s 1s 126988310e-09 0s 0s 126990910e-09 0s 0s 126996590e-09 1s 1s 126998550e-09 0s 0s 127001190e-09 0s 0s 127006830e-09 1s 1s 127008790e-09 0s 0s 127011470e-09 0s 0s 127017070e-09 1s 1s 127019030e-09 0s 0s 127021750e-09 0s 0s 127027310e-09 1s 1s 127029270e-09 0s 0s 127032030e-09 0s 0s 127037550e-09 1s 1s 127039510e-09 0s 0s 127042310e-09 0s 0s 127047790e-09 1s 1s 127049750e-09 0s 0s 127052590e-09 0s 0s 127058030e-09 1s 1s 127059990e-09 0s 0s 127062870e-09 0s 0s 127068270e-09 1s 1s 127070230e-09 0s 0s 127073150e-09 0s 0s 127078510e-09 1s 1s 127080470e-09 0s 0s 127083430e-09 0s 0s 127088750e-09 1s 1s 127090710e-09 0s 0s 127093710e-09 0s 0s 127098990e-09 1s 1s 127100950e-09 0s 0s 127103990e-09 0s 0s 127109230e-09 1s 1s 127111190e-09 0s 0s 127114270e-09 0s 0s 127119470e-09 1s 1s 127121430e-09 0s 0s 127124550e-09 0s 0s 127129710e-09 1s 1s 127131670e-09 0s 0s 127134830e-09 0s 0s 127139950e-09 1s 1s 127141910e-09 0s 0s 127145110e-09 0s 0s 127150190e-09 1s 1s 127152150e-09 0s 0s 127155390e-09 0s 0s 127160430e-09 1s 1s 127162390e-09 0s 0s 127165670e-09 0s 0s 127170670e-09 1s 1s 127172630e-09 0s 0s 127175950e-09 0s 0s 127180910e-09 1s 1s 127182870e-09 0s 0s 127186230e-09 0s 0s 127191150e-09 1s 1s 127193110e-09 0s 0s 127196510e-09 0s 0s 127201390e-09 1s 1s 127203350e-09 0s 0s 127206790e-09 0s 0s 127211630e-09 1s 1s 127213590e-09 0s 0s 127217070e-09 0s 0s 127221870e-09 1s 1s 127223830e-09 0s 0s 127227350e-09 0s 0s 127232110e-09 1s 1s 127234070e-09 0s 0s 127237630e-09 0s 0s 127242350e-09 1s 1s 127244310e-09 0s 0s 127247910e-09 0s 0s 127252590e-09 1s 1s 127254550e-09 0s 0s 127258190e-09 0s 0s 127262830e-09 1s 1s 127264790e-09 0s 0s 127268470e-09 0s 0s 127273070e-09 1s 1s 127275030e-09 0s 0s 127278750e-09 0s 0s 127283310e-09 1s 1s 127285270e-09 0s 0s 127289030e-09 0s 0s 127293550e-09 1s 1s 127295510e-09 0s 0s 127299310e-09 0s 0s 127303790e-09 1s 1s 127305750e-09 0s 0s 127309590e-09 0s 0s 127314030e-09 1s 1s 127315990e-09 0s 0s 127319870e-09 0s 0s 127324270e-09 1s 1s 127326230e-09 0s 0s 127330150e-09 0s 0s 127334510e-09 1s 1s 127336470e-09 0s 0s 127340430e-09 0s 0s 127344750e-09 1s 1s 127346710e-09 0s 0s 127350710e-09 0s 0s 127354990e-09 1s 1s 127356950e-09 0s 0s 127360990e-09 0s 0s 127365230e-09 1s 1s 127367190e-09 0s 0s 127371270e-09 0s 0s 127375470e-09 1s 1s 127377430e-09 0s 0s 127381550e-09 0s 0s 127385710e-09 1s 1s 127387670e-09 0s 0s 127391830e-09 0s 0s 127395950e-09 1s 1s 127397910e-09 0s 0s 127402110e-09 0s 0s 127406190e-09 1s 1s 127408150e-09 0s 0s 127412390e-09 0s 0s 127416430e-09 1s 1s 127418390e-09 0s 0s 127422670e-09 0s 0s 127426670e-09 1s 1s 127428630e-09 0s 0s 127432950e-09 0s 0s 127436910e-09 1s 1s 127438870e-09 0s 0s 127443230e-09 0s 0s 127447150e-09 1s 1s 127449110e-09 0s 0s 127453510e-09 0s 0s 127457390e-09 1s 1s 127459350e-09 0s 0s 127463790e-09 0s 0s 127467630e-09 1s 1s 127469590e-09 0s 0s 127474070e-09 0s 0s 127477870e-09 1s 1s 127479830e-09 0s 0s 127484350e-09 0s 0s 127488110e-09 1s 1s 127490070e-09 0s 0s 127494630e-09 0s 0s 127498350e-09 1s 1s 127500310e-09 0s 0s 127504910e-09 0s 0s 127508590e-09 1s 1s 127510550e-09 0s 0s 127515190e-09 0s 0s 127518830e-09 1s 1s 127520790e-09 0s 0s 127525470e-09 0s 0s 127529070e-09 1s 1s 127531030e-09 0s 0s 127535750e-09 0s 0s 127539310e-09 1s 1s 127541270e-09 0s 0s 127546030e-09 0s 0s 127549550e-09 1s 1s 127551510e-09 0s 0s 127556310e-09 0s 0s 127559790e-09 1s 1s 127561750e-09 0s 0s 127566590e-09 0s 0s 127570030e-09 1s 1s 127571990e-09 0s 0s 127576870e-09 0s 0s 127580270e-09 1s 1s 127582230e-09 0s 0s 127587150e-09 0s 0s 127590510e-09 1s 1s 127592470e-09 0s 0s 127597430e-09 0s 0s 127600750e-09 1s 1s 127602710e-09 0s 0s 127607710e-09 0s 0s 127610990e-09 1s 1s 127612950e-09 0s 0s 127617990e-09 0s 0s 127621230e-09 1s 1s 127623190e-09 0s 0s 127628270e-09 0s 0s 127631470e-09 1s 1s 127633430e-09 0s 0s 127638550e-09 0s 0s 127641710e-09 1s 1s 127643670e-09 0s 0s 127648830e-09 0s 0s 127651950e-09 1s 1s 127653910e-09 0s 0s 127659110e-09 0s 0s 127662190e-09 1s 1s 127664150e-09 0s 0s 127669390e-09 0s 0s 127672430e-09 1s 1s 127674390e-09 0s 0s 127679670e-09 0s 0s 127682670e-09 1s 1s 127684630e-09 0s 0s 127689950e-09 0s 0s 127692910e-09 1s 1s 127694870e-09 0s 0s 127700230e-09 0s 0s 127703150e-09 1s 1s 127705110e-09 0s 0s 127710510e-09 0s 0s 127713390e-09 1s 1s 127715350e-09 0s 0s 127720790e-09 0s 0s 127723630e-09 1s 1s 127725590e-09 0s 0s 127731070e-09 0s 0s 127733870e-09 1s 1s 127735830e-09 0s 0s 127741350e-09 0s 0s 127744110e-09 1s 1s 127746070e-09 0s 0s 127751630e-09 0s 0s 127754350e-09 1s 1s 127756310e-09 0s 0s 127761910e-09 0s 0s 127764590e-09 1s 1s 127766550e-09 0s 0s 127772190e-09 0s 0s 127774830e-09 1s 1s 127776790e-09 0s 0s 127782470e-09 0s 0s 127785070e-09 1s 1s 127787030e-09 0s 0s 127792750e-09 0s 0s 127795310e-09 1s 1s 127797270e-09 0s 0s 127803030e-09 0s 0s 127805550e-09 1s 1s 127807510e-09 0s 0s 127813310e-09 0s 0s 127815790e-09 1s 1s 127817750e-09 0s 0s 127823590e-09 0s 0s 127826030e-09 1s 1s 127827990e-09 0s 0s 127833870e-09 0s 0s 127836270e-09 1s 1s 127838230e-09 0s 0s 127844150e-09 0s 0s 127846510e-09 1s 1s 127848470e-09 0s 0s 127854430e-09 0s 0s 127856750e-09 1s 1s 127858710e-09 0s 0s 127864710e-09 0s 0s 127866990e-09 1s 1s 127868950e-09 0s 0s 127874990e-09 0s 0s 127877230e-09 1s 1s 127879190e-09 0s 0s 127885270e-09 0s 0s 127887470e-09 1s 1s 127889430e-09 0s 0s 127895550e-09 0s 0s 127897710e-09 1s 1s 127899670e-09 0s 0s 127905830e-09 0s 0s 127907950e-09 1s 1s 127909910e-09 0s 0s 127916110e-09 0s 0s 127918190e-09 1s 1s 127920150e-09 0s 0s 127926390e-09 0s 0s 127928430e-09 1s 1s 127930390e-09 0s 0s 127936670e-09 0s 0s 127938670e-09 1s 1s 127940630e-09 0s 0s 127946950e-09 0s 0s 127948910e-09 1s 1s 127950870e-09 0s 0s 127957230e-09 0s 0s 127959150e-09 1s 1s 127961110e-09 0s 0s 127967510e-09 0s 0s 127969390e-09 1s 1s 127971350e-09 0s 0s 127977790e-09 0s 0s 127979630e-09 1s 1s 127981590e-09 0s 0s 127988070e-09 0s 0s 127989870e-09 1s 1s 127991830e-09 0s 0s 127998350e-09 0s 0s 128000110e-09 1s 1s 128002070e-09 0s 0s 128008630e-09 0s 0s 128010350e-09 1s 1s 128012310e-09 0s 0s 128018910e-09 0s 0s 128020590e-09 1s 1s 128022550e-09 0s 0s 128029190e-09 0s 0s 128030830e-09 1s 1s 128032790e-09 0s 0s 128039470e-09 0s 0s 128041070e-09 1s 1s 128043030e-09 0s 0s 128049750e-09 0s 0s 128051310e-09 1s 1s 128053270e-09 0s 0s 128060030e-09 0s 0s 128061550e-09 1s 1s 128063510e-09 0s 0s 128070310e-09 0s 0s 128071790e-09 1s 1s 128073750e-09 0s 0s 128080590e-09 0s 0s 128082030e-09 1s 1s 128083990e-09 0s 0s 128090870e-09 0s 0s 128092270e-09 1s 1s 128094230e-09 0s 0s 128101150e-09 0s 0s 128102510e-09 1s 1s 128104470e-09 0s 0s 128111430e-09 0s 0s 128112750e-09 1s 1s 128114710e-09 0s 0s 128121710e-09 0s 0s 128122990e-09 1s 1s 128124950e-09 0s 0s 128131990e-09 0s 0s 128133230e-09 1s 1s 128135190e-09 0s 0s 128142270e-09 0s 0s 128143470e-09 1s 1s 128145430e-09 0s 0s 128152550e-09 0s 0s 128153710e-09 1s 1s 128155670e-09 0s 0s 128162830e-09 0s 0s 128163950e-09 1s 1s 128165910e-09 0s 0s 128173110e-09 0s 0s 128174190e-09 1s 1s 128176150e-09 0s 0s 128183390e-09 0s 0s 128184430e-09 1s 1s 128186390e-09 0s 0s 128193670e-09 0s 0s 128194670e-09 1s 1s 128196630e-09 0s 0s 128203950e-09 0s 0s 128204910e-09 1s 1s 128206870e-09 0s 0s 128214230e-09 0s 0s 128215150e-09 1s 1s 128217110e-09 0s 0s 128224510e-09 0s 0s 128225390e-09 1s 1s 128227350e-09 0s 0s 128234790e-09 0s 0s 128235630e-09 1s 1s 128237590e-09 0s 0s 128245070e-09 0s 0s 128245870e-09 1s 1s 128247830e-09 0s 0s 128255350e-09 0s 0s 128256110e-09 1s 1s 128258070e-09 0s 0s 128265630e-09 0s 0s 128266350e-09 1s 1s 128268310e-09 0s 0s 128275910e-09 0s 0s 128276590e-09 1s 1s 128278550e-09 0s 0s 128286190e-09 0s 0s 128286830e-09 1s 1s 128288790e-09 0s 0s 128296470e-09 0s 0s 128297070e-09 1s 1s 128299030e-09 0s 0s 128306750e-09 0s 0s 128307310e-09 1s 1s 128309270e-09 0s 0s 128317030e-09 0s 0s 128317550e-09 1s 1s 128319510e-09 0s 0s 128327310e-09 0s 0s 128327790e-09 1s 1s 128329750e-09 0s 0s 128337590e-09 0s 0s 128338030e-09 1s 1s 128339990e-09 0s 0s 128347870e-09 0s 0s 128348270e-09 1s 1s 128350230e-09 0s 0s 128358150e-09 0s 0s 128358510e-09 1s 1s 128360470e-09 0s 0s 128368430e-09 0s 0s 128368750e-09 1s 1s 128370710e-09 0s 0s 128378710e-09 0s 0s 128378990e-09 1s 1s 128380950e-09 0s 0s 128388990e-09 0s 0s 128389230e-09 1s 1s 128391190e-09 0s 0s 128399270e-09 0s 0s 128399470e-09 1s 1s 128401430e-09 0s 0s 128409550e-09 0s 0s 128409710e-09 1s 1s 128411670e-09 0s 0s 128419830e-09 0s 0s 128419950e-09 1s 1s 128421910e-09 0s 0s 128430110e-09 0s 0s 128430190e-09 1s 1s 128432150e-09 0s 0s 128440390e-09 0s 0s 128440430e-09 1s 1s 128442390e-09 0s 0s 128450670e-09 1s 1s 128450710e-09 1s 1s 128452670e-09 0s 0s 128460910e-09 1s 1s 128460990e-09 1s 1s 128462910e-09 0s 0s 128471150e-09 1s 1s 128471270e-09 1s 1s 128473150e-09 0s 0s 128481390e-09 1s 1s 128481550e-09 1s 1s 128483390e-09 0s 0s 128491630e-09 1s 1s 128491830e-09 1s 1s 128493630e-09 0s 0s 128501870e-09 1s 1s 128502110e-09 1s 1s 128503870e-09 0s 0s 128512110e-09 1s 1s 128512390e-09 1s 1s 128514110e-09 0s 0s 128522350e-09 1s 1s 128522670e-09 1s 1s 128524350e-09 0s 0s 128532590e-09 1s 1s 128532950e-09 1s 1s 128534590e-09 0s 0s 128542830e-09 1s 1s 128543230e-09 1s 1s 128544830e-09 0s 0s 128553070e-09 1s 1s 128553510e-09 1s 1s 128555070e-09 0s 0s 128563310e-09 1s 1s 128563790e-09 1s 1s 128565310e-09 0s 0s 128573550e-09 1s 1s 128574070e-09 1s 1s 128575550e-09 0s 0s 128583790e-09 1s 1s 128584350e-09 1s 1s 128585790e-09 0s 0s 128594030e-09 1s 1s 128594630e-09 1s 1s 128596030e-09 0s 0s 128604270e-09 1s 1s 128604910e-09 1s 1s 128606270e-09 0s 0s 128614510e-09 1s 1s 128615190e-09 1s 1s 128616510e-09 0s 0s 128624750e-09 1s 1s 128625470e-09 1s 1s 128626750e-09 0s 0s 128634990e-09 1s 1s 128635750e-09 1s 1s 128636990e-09 0s 0s 128645230e-09 1s 1s 128646030e-09 1s 1s 128647230e-09 0s 0s 128655470e-09 1s 1s 128656310e-09 1s 1s 128657470e-09 0s 0s 128665710e-09 1s 1s 128666590e-09 1s 1s 128667710e-09 0s 0s 128675950e-09 1s 1s 128676870e-09 1s 1s 128677950e-09 0s 0s 128686190e-09 1s 1s 128687150e-09 1s 1s 128688190e-09 0s 0s 128696430e-09 1s 1s 128697430e-09 1s 1s 128698430e-09 0s 0s 128706670e-09 1s 1s 128707710e-09 1s 1s 128708670e-09 0s 0s 128716910e-09 1s 1s 128717990e-09 1s 1s 128718910e-09 0s 0s 128727150e-09 1s 1s 128728270e-09 1s 1s 128729150e-09 0s 0s 128737390e-09 1s 1s 128738550e-09 1s 1s 128739390e-09 0s 0s 128747630e-09 1s 1s 128748830e-09 1s 1s 128749630e-09 0s 0s 128757870e-09 1s 1s 128759110e-09 1s 1s 128759870e-09 0s 0s 128768110e-09 1s 1s 128769390e-09 1s 1s 128770110e-09 0s 0s 128778350e-09 1s 1s 128779670e-09 1s 1s 128780350e-09 0s 0s 128788590e-09 1s 1s 128789950e-09 1s 1s 128790590e-09 0s 0s 128798830e-09 1s 1s 128800230e-09 1s 1s 128800830e-09 0s 0s 128809070e-09 1s 1s 128810510e-09 1s 1s 128811070e-09 0s 0s 128819310e-09 1s 1s 128820790e-09 1s 1s 128821310e-09 0s 0s 128829550e-09 1s 1s 128831070e-09 1s 1s 128831550e-09 0s 0s 128839790e-09 1s 1s 128841350e-09 1s 1s 128841790e-09 0s 0s 128850030e-09 1s 1s 128851630e-09 1s 1s 128852030e-09 0s 0s 128860270e-09 1s 1s 128861910e-09 1s 1s 128862270e-09 0s 0s 128870510e-09 1s 1s 128872190e-09 1s 1s 128872510e-09 0s 0s 128880750e-09 1s 1s 128882470e-09 1s 1s 128882750e-09 0s 0s 128890990e-09 1s 1s 128892750e-09 1s 1s 128892990e-09 0s 0s 128901230e-09 1s 1s 128903030e-09 1s 1s 128903230e-09 0s 0s 128911470e-09 1s 1s 128913310e-09 1s 1s 128913470e-09 0s 0s 128921710e-09 1s 1s 128923590e-09 1s 1s 128923710e-09 0s 0s 128931950e-09 1s 1s 128933870e-09 1s 1s 128933950e-09 0s 0s 128942190e-09 1s 1s 128944150e-09 1s 1s 128944190e-09 0s 0s 128952430e-09 1s 1s 128954430e-09 0s 0s 128962670e-09 1s 1s 128964670e-09 0s 0s 128964710e-09 0s 0s 128972910e-09 1s 1s 128974910e-09 0s 0s 128974990e-09 0s 0s 128983150e-09 1s 1s 128985150e-09 0s 0s 128985270e-09 0s 0s 128993390e-09 1s 1s 128995390e-09 0s 0s 128995550e-09 0s 0s 129003630e-09 1s 1s 129005630e-09 0s 0s 129005830e-09 0s 0s 129013870e-09 1s 1s 129015870e-09 0s 0s 129016110e-09 0s 0s 129024110e-09 1s 1s 129026110e-09 0s 0s 129026390e-09 0s 0s 129034350e-09 1s 1s 129036350e-09 0s 0s 129036670e-09 0s 0s 129044590e-09 1s 1s 129046590e-09 0s 0s 129046950e-09 0s 0s 129054830e-09 1s 1s 129056830e-09 0s 0s 129057230e-09 0s 0s 129065070e-09 1s 1s 129067070e-09 0s 0s 129067510e-09 0s 0s 129075310e-09 1s 1s 129077310e-09 0s 0s 129077790e-09 0s 0s 129085550e-09 1s 1s 129087550e-09 0s 0s 129088070e-09 0s 0s 129095790e-09 1s 1s 129097790e-09 0s 0s 129098350e-09 0s 0s 129106030e-09 1s 1s 129108030e-09 0s 0s 129108630e-09 0s 0s 129116270e-09 1s 1s 129118270e-09 0s 0s 129118910e-09 0s 0s 129126510e-09 1s 1s 129128510e-09 0s 0s 129129190e-09 0s 0s 129136750e-09 1s 1s 129138750e-09 0s 0s 129139470e-09 0s 0s 129146990e-09 1s 1s 129148990e-09 0s 0s 129149750e-09 0s 0s 129157230e-09 1s 1s 129159230e-09 0s 0s 129160030e-09 0s 0s 129167470e-09 1s 1s 129169470e-09 0s 0s 129170310e-09 0s 0s 129177710e-09 1s 1s 129179710e-09 0s 0s 129180590e-09 0s 0s 129187950e-09 1s 1s 129189950e-09 0s 0s 129190870e-09 0s 0s 129198190e-09 1s 1s 129200190e-09 0s 0s 129201150e-09 0s 0s 129208430e-09 1s 1s 129210430e-09 0s 0s 129211430e-09 0s 0s 129218670e-09 1s 1s 129220670e-09 0s 0s 129221710e-09 0s 0s 129228910e-09 1s 1s 129230910e-09 0s 0s 129231990e-09 0s 0s 129239150e-09 1s 1s 129241150e-09 0s 0s 129242270e-09 0s 0s 129249390e-09 1s 1s 129251390e-09 0s 0s 129252550e-09 0s 0s 129259630e-09 1s 1s 129261630e-09 0s 0s 129262830e-09 0s 0s 129269870e-09 1s 1s 129271870e-09 0s 0s 129273110e-09 0s 0s 129280110e-09 1s 1s 129282110e-09 0s 0s 129283390e-09 0s 0s 129290350e-09 1s 1s 129292350e-09 0s 0s 129293670e-09 0s 0s 129300590e-09 1s 1s 129302590e-09 0s 0s 129303950e-09 0s 0s 129310830e-09 1s 1s 129312830e-09 0s 0s 129314230e-09 0s 0s 129321070e-09 1s 1s 129323070e-09 0s 0s 129324510e-09 0s 0s 129331310e-09 1s 1s 129333310e-09 0s 0s 129334790e-09 0s 0s 129341550e-09 1s 1s 129343550e-09 0s 0s 129345070e-09 0s 0s 129351790e-09 1s 1s 129353790e-09 0s 0s 129355350e-09 0s 0s 129362030e-09 1s 1s 129364030e-09 0s 0s 129365630e-09 0s 0s 129372270e-09 1s 1s 129374270e-09 0s 0s 129375910e-09 0s 0s 129382510e-09 1s 1s 129384510e-09 0s 0s 129386190e-09 0s 0s 129392750e-09 1s 1s 129394750e-09 0s 0s 129396470e-09 0s 0s 129402990e-09 1s 1s 129404990e-09 0s 0s 129406750e-09 0s 0s 129413230e-09 1s 1s 129415230e-09 0s 0s 129417030e-09 0s 0s 129423470e-09 1s 1s 129425470e-09 0s 0s 129427310e-09 0s 0s 129433710e-09 1s 1s 129435710e-09 0s 0s 129437590e-09 0s 0s 129443950e-09 1s 1s 129445950e-09 0s 0s 129447870e-09 0s 0s 129454190e-09 1s 1s 129456190e-09 0s 0s 129458150e-09 0s 0s 129464430e-09 1s 1s 129466430e-09 0s 0s 129468430e-09 0s 0s 129474670e-09 1s 1s 129476670e-09 0s 0s 129478710e-09 0s 0s 129484910e-09 1s 1s 129486910e-09 0s 0s 129488990e-09 0s 0s 129495150e-09 1s 1s 129497150e-09 0s 0s 129499270e-09 0s 0s 129505390e-09 1s 1s 129507390e-09 0s 0s 129509550e-09 0s 0s 129515630e-09 1s 1s 129517630e-09 0s 0s 129519830e-09 0s 0s 129525870e-09 1s 1s 129527870e-09 0s 0s 129530110e-09 0s 0s 129536110e-09 1s 1s 129538110e-09 0s 0s 129540390e-09 0s 0s 129546350e-09 1s 1s 129548350e-09 0s 0s 129550670e-09 0s 0s 129556590e-09 1s 1s 129558590e-09 0s 0s 129560950e-09 0s 0s 129566830e-09 1s 1s 129568830e-09 0s 0s 129571230e-09 0s 0s 129577070e-09 1s 1s 129579070e-09 0s 0s 129581510e-09 0s 0s 129587310e-09 1s 1s 129589310e-09 0s 0s 129591790e-09 0s 0s 129597550e-09 1s 1s 129599550e-09 0s 0s 129602070e-09 0s 0s 129607790e-09 1s 1s 129609790e-09 0s 0s 129612350e-09 0s 0s 129618030e-09 1s 1s 129620030e-09 0s 0s 129622630e-09 0s 0s 129628270e-09 1s 1s 129630270e-09 0s 0s 129632910e-09 0s 0s 129638510e-09 1s 1s 129640510e-09 0s 0s 129643190e-09 0s 0s 129648750e-09 1s 1s 129650750e-09 0s 0s 129653470e-09 0s 0s 129658990e-09 1s 1s 129660990e-09 0s 0s 129663750e-09 0s 0s 129669230e-09 1s 1s 129671230e-09 0s 0s 129674030e-09 0s 0s 129679470e-09 1s 1s 129681470e-09 0s 0s 129684310e-09 0s 0s 129689710e-09 1s 1s 129691710e-09 0s 0s 129694590e-09 0s 0s 129699950e-09 1s 1s 129701950e-09 0s 0s 129704870e-09 0s 0s 129710190e-09 1s 1s 129712190e-09 0s 0s 129715150e-09 0s 0s 129720430e-09 1s 1s 129722430e-09 0s 0s 129725430e-09 0s 0s 129730670e-09 1s 1s 129732670e-09 0s 0s 129735710e-09 0s 0s 129740910e-09 1s 1s 129742910e-09 0s 0s 129745990e-09 0s 0s 129751150e-09 1s 1s 129753150e-09 0s 0s 129756270e-09 0s 0s 129761390e-09 1s 1s 129763390e-09 0s 0s 129766550e-09 0s 0s 129771630e-09 1s 1s 129773630e-09 0s 0s 129776830e-09 0s 0s 129781870e-09 1s 1s 129783870e-09 0s 0s 129787110e-09 0s 0s 129792110e-09 1s 1s 129794110e-09 0s 0s 129797390e-09 0s 0s 129802350e-09 1s 1s 129804350e-09 0s 0s 129807670e-09 0s 0s 129812590e-09 1s 1s 129814590e-09 0s 0s 129817950e-09 0s 0s 129822830e-09 1s 1s 129824830e-09 0s 0s 129828230e-09 0s 0s 129833070e-09 1s 1s 129835070e-09 0s 0s 129838510e-09 0s 0s 129843310e-09 1s 1s 129845310e-09 0s 0s 129848790e-09 0s 0s 129853550e-09 1s 1s 129855550e-09 0s 0s 129859070e-09 0s 0s 129863790e-09 1s 1s 129865790e-09 0s 0s 129869350e-09 0s 0s 129874030e-09 1s 1s 129876030e-09 0s 0s 129879630e-09 0s 0s 129884270e-09 1s 1s 129886270e-09 0s 0s 129889910e-09 0s 0s 129894510e-09 1s 1s 129896510e-09 0s 0s 129900190e-09 0s 0s 129904750e-09 1s 1s 129906750e-09 0s 0s 129910470e-09 0s 0s 129914990e-09 1s 1s 129916990e-09 0s 0s 129920750e-09 0s 0s 129925230e-09 1s 1s 129927230e-09 0s 0s 129931030e-09 0s 0s 129935470e-09 1s 1s 129937470e-09 0s 0s 129941310e-09 0s 0s 129945710e-09 1s 1s 129947710e-09 0s 0s 129951590e-09 0s 0s 129955950e-09 1s 1s 129957950e-09 0s 0s 129961870e-09 0s 0s 129966190e-09 1s 1s 129968190e-09 0s 0s 129972150e-09 0s 0s 129976430e-09 1s 1s 129978430e-09 0s 0s 129982430e-09 0s 0s 129986670e-09 1s 1s 129988670e-09 0s 0s 129992710e-09 0s 0s 129996910e-09 1s 1s 129998910e-09 0s 0s 130002990e-09 0s 0s 130007150e-09 1s 1s 130009150e-09 0s 0s 130013270e-09 0s 0s 130017390e-09 1s 1s 130019390e-09 0s 0s 130023550e-09 0s 0s 130027630e-09 1s 1s 130029630e-09 0s 0s 130033830e-09 0s 0s 130037870e-09 1s 1s 130039870e-09 0s 0s 130044110e-09 0s 0s 130048110e-09 1s 1s 130050110e-09 0s 0s 130054390e-09 0s 0s 130058350e-09 1s 1s 130060350e-09 0s 0s 130064670e-09 0s 0s 130068590e-09 1s 1s 130070590e-09 0s 0s 130074950e-09 0s 0s 130078830e-09 1s 1s 130080830e-09 0s 0s 130085230e-09 0s 0s 130089070e-09 1s 1s 130091070e-09 0s 0s 130095510e-09 0s 0s 130099310e-09 1s 1s 130101310e-09 0s 0s 130105790e-09 0s 0s 130109550e-09 1s 1s 130111550e-09 0s 0s 130116070e-09 0s 0s 130119790e-09 1s 1s 130121790e-09 0s 0s 130126350e-09 0s 0s 130130030e-09 1s 1s 130132030e-09 0s 0s 130136630e-09 0s 0s 130140270e-09 1s 1s 130142270e-09 0s 0s 130146910e-09 0s 0s 130150510e-09 1s 1s 130152510e-09 0s 0s 130157190e-09 0s 0s 130160750e-09 1s 1s 130162750e-09 0s 0s 130167470e-09 0s 0s 130170990e-09 1s 1s 130172990e-09 0s 0s 130177750e-09 0s 0s 130181230e-09 1s 1s 130183230e-09 0s 0s 130188030e-09 0s 0s 130191470e-09 1s 1s 130193470e-09 0s 0s 130198310e-09 0s 0s 130201710e-09 1s 1s 130203710e-09 0s 0s 130208590e-09 0s 0s 130211950e-09 1s 1s 130213950e-09 0s 0s 130218870e-09 0s 0s 130222190e-09 1s 1s 130224190e-09 0s 0s 130229150e-09 0s 0s 130232430e-09 1s 1s 130234430e-09 0s 0s 130239430e-09 0s 0s 130242670e-09 1s 1s 130244670e-09 0s 0s 130249710e-09 0s 0s 130252910e-09 1s 1s 130254910e-09 0s 0s 130259990e-09 0s 0s 130263150e-09 1s 1s 130265150e-09 0s 0s 130270270e-09 0s 0s 130273390e-09 1s 1s 130275390e-09 0s 0s 130280550e-09 0s 0s 130283630e-09 1s 1s 130285630e-09 0s 0s 130290830e-09 0s 0s 130293870e-09 1s 1s 130295870e-09 0s 0s 130301110e-09 0s 0s 130304110e-09 1s 1s 130306110e-09 0s 0s 130311390e-09 0s 0s 130314350e-09 1s 1s 130316350e-09 0s 0s 130321670e-09 0s 0s 130324590e-09 1s 1s 130326590e-09 0s 0s 130331950e-09 0s 0s 130334830e-09 1s 1s 130336830e-09 0s 0s 130342230e-09 0s 0s 130345070e-09 1s 1s 130347070e-09 0s 0s 130352510e-09 0s 0s 130355310e-09 1s 1s 130357310e-09 0s 0s 130362790e-09 0s 0s 130365550e-09 1s 1s 130367550e-09 0s 0s 130373070e-09 0s 0s 130375790e-09 1s 1s 130377790e-09 0s 0s 130383350e-09 0s 0s 130386030e-09 1s 1s 130388030e-09 0s 0s 130393630e-09 0s 0s 130396270e-09 1s 1s 130398270e-09 0s 0s 130403910e-09 0s 0s 130406510e-09 1s 1s 130408510e-09 0s 0s 130414190e-09 0s 0s 130416750e-09 1s 1s 130418750e-09 0s 0s 130424470e-09 0s 0s 130426990e-09 1s 1s 130428990e-09 0s 0s 130434750e-09 0s 0s 130437230e-09 1s 1s 130439230e-09 0s 0s 130445030e-09 0s 0s 130447470e-09 1s 1s 130449470e-09 0s 0s 130455310e-09 0s 0s 130457710e-09 1s 1s 130459710e-09 0s 0s 130465590e-09 0s 0s 130467950e-09 1s 1s 130469950e-09 0s 0s 130475870e-09 0s 0s 130478190e-09 1s 1s 130480190e-09 0s 0s 130486150e-09 0s 0s 130488430e-09 1s 1s 130490430e-09 0s 0s 130496430e-09 0s 0s 130498670e-09 1s 1s 130500670e-09 0s 0s 130506710e-09 0s 0s 130508910e-09 1s 1s 130510910e-09 0s 0s 130516990e-09 0s 0s 130519150e-09 1s 1s 130521150e-09 0s 0s 130527270e-09 0s 0s 130529390e-09 1s 1s 130531390e-09 0s 0s 130537550e-09 0s 0s 130539630e-09 1s 1s 130541630e-09 0s 0s 130547830e-09 0s 0s 130549870e-09 1s 1s 130551870e-09 0s 0s 130558110e-09 0s 0s 130560110e-09 1s 1s 130562110e-09 0s 0s 130568390e-09 0s 0s 130570350e-09 1s 1s 130572350e-09 0s 0s 130578670e-09 0s 0s 130580590e-09 1s 1s 130582590e-09 0s 0s 130588950e-09 0s 0s 130590830e-09 1s 1s 130592830e-09 0s 0s 130599230e-09 0s 0s 130601070e-09 1s 1s 130603070e-09 0s 0s 130609510e-09 0s 0s 130611310e-09 1s 1s 130613310e-09 0s 0s 130619790e-09 0s 0s 130621550e-09 1s 1s 130623550e-09 0s 0s 130630070e-09 0s 0s 130631790e-09 1s 1s 130633790e-09 0s 0s 130640350e-09 0s 0s 130642030e-09 1s 1s 130644030e-09 0s 0s 130650630e-09 0s 0s 130652270e-09 1s 1s 130654270e-09 0s 0s 130660910e-09 0s 0s 130662510e-09 1s 1s 130664510e-09 0s 0s 130671190e-09 0s 0s 130672750e-09 1s 1s 130674750e-09 0s 0s 130681470e-09 0s 0s 130682990e-09 1s 1s 130684990e-09 0s 0s 130691750e-09 0s 0s 130693230e-09 1s 1s 130695230e-09 0s 0s 130702030e-09 0s 0s 130703470e-09 1s 1s 130705470e-09 0s 0s 130712310e-09 0s 0s 130713710e-09 1s 1s 130715710e-09 0s 0s 130722590e-09 0s 0s 130723950e-09 1s 1s 130725950e-09 0s 0s 130732870e-09 0s 0s 130734190e-09 1s 1s 130736190e-09 0s 0s 130743150e-09 0s 0s 130744430e-09 1s 1s 130746430e-09 0s 0s 130753430e-09 0s 0s 130754670e-09 1s 1s 130756670e-09 0s 0s 130763710e-09 0s 0s 130764910e-09 1s 1s 130766910e-09 0s 0s 130773990e-09 0s 0s 130775150e-09 1s 1s 130777150e-09 0s 0s 130784270e-09 0s 0s 130785390e-09 1s 1s 130787390e-09 0s 0s 130794550e-09 0s 0s 130795630e-09 1s 1s 130797630e-09 0s 0s 130804830e-09 0s 0s 130805870e-09 1s 1s 130807870e-09 0s 0s 130815110e-09 0s 0s 130816110e-09 1s 1s 130818110e-09 0s 0s 130825390e-09 0s 0s 130826350e-09 1s 1s 130828350e-09 0s 0s 130835670e-09 0s 0s 130836590e-09 1s 1s 130838590e-09 0s 0s 130845950e-09 0s 0s 130846830e-09 1s 1s 130848830e-09 0s 0s 130856230e-09 0s 0s 130857070e-09 1s 1s 130859070e-09 0s 0s 130866510e-09 0s 0s 130867310e-09 1s 1s 130869310e-09 0s 0s 130876790e-09 0s 0s 130877550e-09 1s 1s 130879550e-09 0s 0s 130887070e-09 0s 0s 130887790e-09 1s 1s 130889790e-09 0s 0s 130897350e-09 0s 0s 130898030e-09 1s 1s 130900030e-09 0s 0s 130907630e-09 0s 0s 130908270e-09 1s 1s 130910270e-09 0s 0s 130917910e-09 0s 0s 130918510e-09 1s 1s 130920510e-09 0s 0s 130928190e-09 0s 0s 130928750e-09 1s 1s 130930750e-09 0s 0s 130938470e-09 0s 0s 130938990e-09 1s 1s 130940990e-09 0s 0s 130948750e-09 0s 0s 130949230e-09 1s 1s 130951230e-09 0s 0s 130959030e-09 0s 0s 130959470e-09 1s 1s 130961470e-09 0s 0s 130969310e-09 0s 0s 130969710e-09 1s 1s 130971710e-09 0s 0s 130979590e-09 0s 0s 130979950e-09 1s 1s 130981950e-09 0s 0s 130989870e-09 0s 0s 130990190e-09 1s 1s 130992190e-09 0s 0s 131000150e-09 0s 0s 131000430e-09 1s 1s 131002430e-09 0s 0s 131010430e-09 0s 0s 131010670e-09 1s 1s 131012670e-09 0s 0s 131020710e-09 0s 0s 131020910e-09 1s 1s 131022910e-09 0s 0s 131030990e-09 0s 0s 131031150e-09 1s 1s 131033150e-09 0s 0s 131041270e-09 0s 0s 131041390e-09 1s 1s 131043390e-09 0s 0s 131051550e-09 0s 0s 131051630e-09 1s 1s 131053630e-09 0s 0s 131061830e-09 0s 0s 131061870e-09 1s 1s 131063870e-09 0s 0s 131072110e-09 1s 1s 131072150e-09 1s 1s 131074150e-09 0s 0s 131082350e-09 1s 1s 131082430e-09 1s 1s 131084390e-09 0s 0s 131092590e-09 1s 1s 131092710e-09 1s 1s 131094630e-09 0s 0s 131102830e-09 1s 1s 131102990e-09 1s 1s 131104870e-09 0s 0s 131113070e-09 1s 1s 131113270e-09 1s 1s 131115110e-09 0s 0s 131123310e-09 1s 1s 131123550e-09 1s 1s 131125350e-09 0s 0s 131133550e-09 1s 1s 131133830e-09 1s 1s 131135590e-09 0s 0s 131143790e-09 1s 1s 131144110e-09 1s 1s 131145830e-09 0s 0s 131154030e-09 1s 1s 131154390e-09 1s 1s 131156070e-09 0s 0s 131164270e-09 1s 1s 131164670e-09 1s 1s 131166310e-09 0s 0s 131174510e-09 1s 1s 131174950e-09 1s 1s 131176550e-09 0s 0s 131184750e-09 1s 1s 131185230e-09 1s 1s 131186790e-09 0s 0s 131194990e-09 1s 1s 131195510e-09 1s 1s 131197030e-09 0s 0s 131205230e-09 1s 1s 131205790e-09 1s 1s 131207270e-09 0s 0s 131215470e-09 1s 1s 131216070e-09 1s 1s 131217510e-09 0s 0s 131225710e-09 1s 1s 131226350e-09 1s 1s 131227750e-09 0s 0s 131235950e-09 1s 1s 131236630e-09 1s 1s 131237990e-09 0s 0s 131246190e-09 1s 1s 131246910e-09 1s 1s 131248230e-09 0s 0s 131256430e-09 1s 1s 131257190e-09 1s 1s 131258470e-09 0s 0s 131266670e-09 1s 1s 131267470e-09 1s 1s 131268710e-09 0s 0s 131276910e-09 1s 1s 131277750e-09 1s 1s 131278950e-09 0s 0s 131287150e-09 1s 1s 131288030e-09 1s 1s 131289190e-09 0s 0s 131297390e-09 1s 1s 131298310e-09 1s 1s 131299430e-09 0s 0s 131307630e-09 1s 1s 131308590e-09 1s 1s 131309670e-09 0s 0s 131317870e-09 1s 1s 131318870e-09 1s 1s 131319910e-09 0s 0s 131328110e-09 1s 1s 131329150e-09 1s 1s 131330150e-09 0s 0s 131338350e-09 1s 1s 131339430e-09 1s 1s 131340390e-09 0s 0s 131348590e-09 1s 1s 131349710e-09 1s 1s 131350630e-09 0s 0s 131358830e-09 1s 1s 131359990e-09 1s 1s 131360870e-09 0s 0s 131369070e-09 1s 1s 131370270e-09 1s 1s 131371110e-09 0s 0s 131379310e-09 1s 1s 131380550e-09 1s 1s 131381350e-09 0s 0s 131389550e-09 1s 1s 131390830e-09 1s 1s 131391590e-09 0s 0s 131399790e-09 1s 1s 131401110e-09 1s 1s 131401830e-09 0s 0s 131410030e-09 1s 1s 131411390e-09 1s 1s 131412070e-09 0s 0s 131420270e-09 1s 1s 131421670e-09 1s 1s 131422310e-09 0s 0s 131430510e-09 1s 1s 131431950e-09 1s 1s 131432550e-09 0s 0s 131440750e-09 1s 1s 131442230e-09 1s 1s 131442790e-09 0s 0s 131450990e-09 1s 1s 131452510e-09 1s 1s 131453030e-09 0s 0s 131461230e-09 1s 1s 131462790e-09 1s 1s 131463270e-09 0s 0s 131471470e-09 1s 1s 131473070e-09 1s 1s 131473510e-09 0s 0s 131481710e-09 1s 1s 131483350e-09 1s 1s 131483750e-09 0s 0s 131491950e-09 1s 1s 131493630e-09 1s 1s 131493990e-09 0s 0s 131502190e-09 1s 1s 131503910e-09 1s 1s 131504230e-09 0s 0s 131512430e-09 1s 1s 131514190e-09 1s 1s 131514470e-09 0s 0s 131522670e-09 1s 1s 131524470e-09 1s 1s 131524710e-09 0s 0s 131532910e-09 1s 1s 131534750e-09 1s 1s 131534950e-09 0s 0s 131543150e-09 1s 1s 131545030e-09 1s 1s 131545190e-09 0s 0s 131553390e-09 1s 1s 131555310e-09 1s 1s 131555430e-09 0s 0s 131563630e-09 1s 1s 131565590e-09 1s 1s 131565670e-09 0s 0s 131573870e-09 1s 1s 131575870e-09 1s 1s 131575910e-09 0s 0s 131584110e-09 1s 1s 131586150e-09 0s 0s 131594350e-09 1s 1s 131596390e-09 0s 0s 131596430e-09 0s 0s 131604590e-09 1s 1s 131606630e-09 0s 0s 131606710e-09 0s 0s 131614830e-09 1s 1s 131616870e-09 0s 0s 131616990e-09 0s 0s 131625070e-09 1s 1s 131627110e-09 0s 0s 131627270e-09 0s 0s 131635310e-09 1s 1s 131637350e-09 0s 0s 131637550e-09 0s 0s 131645550e-09 1s 1s 131647590e-09 0s 0s 131647830e-09 0s 0s 131655790e-09 1s 1s 131657830e-09 0s 0s 131658110e-09 0s 0s 131666030e-09 1s 1s 131668070e-09 0s 0s 131668390e-09 0s 0s 131676270e-09 1s 1s 131678310e-09 0s 0s 131678670e-09 0s 0s 131686510e-09 1s 1s 131688550e-09 0s 0s 131688950e-09 0s 0s 131696750e-09 1s 1s 131698790e-09 0s 0s 131699230e-09 0s 0s 131706990e-09 1s 1s 131709030e-09 0s 0s 131709510e-09 0s 0s 131717230e-09 1s 1s 131719270e-09 0s 0s 131719790e-09 0s 0s 131727470e-09 1s 1s 131729510e-09 0s 0s 131730070e-09 0s 0s 131737710e-09 1s 1s 131739750e-09 0s 0s 131740350e-09 0s 0s 131747950e-09 1s 1s 131749990e-09 0s 0s 131750630e-09 0s 0s 131758190e-09 1s 1s 131760230e-09 0s 0s 131760910e-09 0s 0s 131768430e-09 1s 1s 131770470e-09 0s 0s 131771190e-09 0s 0s 131778670e-09 1s 1s 131780710e-09 0s 0s 131781470e-09 0s 0s 131788910e-09 1s 1s 131790950e-09 0s 0s 131791750e-09 0s 0s 131799150e-09 1s 1s 131801190e-09 0s 0s 131802030e-09 0s 0s 131809390e-09 1s 1s 131811430e-09 0s 0s 131812310e-09 0s 0s 131819630e-09 1s 1s 131821670e-09 0s 0s 131822590e-09 0s 0s 131829870e-09 1s 1s 131831910e-09 0s 0s 131832870e-09 0s 0s 131840110e-09 1s 1s 131842150e-09 0s 0s 131843150e-09 0s 0s 131850350e-09 1s 1s 131852390e-09 0s 0s 131853430e-09 0s 0s 131860590e-09 1s 1s 131862630e-09 0s 0s 131863710e-09 0s 0s 131870830e-09 1s 1s 131872870e-09 0s 0s 131873990e-09 0s 0s 131881070e-09 1s 1s 131883110e-09 0s 0s 131884270e-09 0s 0s 131891310e-09 1s 1s 131893350e-09 0s 0s 131894550e-09 0s 0s 131901550e-09 1s 1s 131903590e-09 0s 0s 131904830e-09 0s 0s 131911790e-09 1s 1s 131913830e-09 0s 0s 131915110e-09 0s 0s 131922030e-09 1s 1s 131924070e-09 0s 0s 131925390e-09 0s 0s 131932270e-09 1s 1s 131934310e-09 0s 0s 131935670e-09 0s 0s 131942510e-09 1s 1s 131944550e-09 0s 0s 131945950e-09 0s 0s 131952750e-09 1s 1s 131954790e-09 0s 0s 131956230e-09 0s 0s 131962990e-09 1s 1s 131965030e-09 0s 0s 131966510e-09 0s 0s 131973230e-09 1s 1s 131975270e-09 0s 0s 131976790e-09 0s 0s 131983470e-09 1s 1s 131985510e-09 0s 0s 131987070e-09 0s 0s 131993710e-09 1s 1s 131995750e-09 0s 0s 131997350e-09 0s 0s 132003950e-09 1s 1s 132005990e-09 0s 0s 132007630e-09 0s 0s 132014190e-09 1s 1s 132016230e-09 0s 0s 132017910e-09 0s 0s 132024430e-09 1s 1s 132026470e-09 0s 0s 132028190e-09 0s 0s 132034670e-09 1s 1s 132036710e-09 0s 0s 132038470e-09 0s 0s 132044910e-09 1s 1s 132046950e-09 0s 0s 132048750e-09 0s 0s 132055150e-09 1s 1s 132057190e-09 0s 0s 132059030e-09 0s 0s 132065390e-09 1s 1s 132067430e-09 0s 0s 132069310e-09 0s 0s 132075630e-09 1s 1s 132077670e-09 0s 0s 132079590e-09 0s 0s 132085870e-09 1s 1s 132087910e-09 0s 0s 132089870e-09 0s 0s 132096110e-09 1s 1s 132098150e-09 0s 0s 132100150e-09 0s 0s 132106350e-09 1s 1s 132108390e-09 0s 0s 132110430e-09 0s 0s 132116590e-09 1s 1s 132118630e-09 0s 0s 132120710e-09 0s 0s 132126830e-09 1s 1s 132128870e-09 0s 0s 132130990e-09 0s 0s 132137070e-09 1s 1s 132139110e-09 0s 0s 132141270e-09 0s 0s 132147310e-09 1s 1s 132149350e-09 0s 0s 132151550e-09 0s 0s 132157550e-09 1s 1s 132159590e-09 0s 0s 132161830e-09 0s 0s 132167790e-09 1s 1s 132169830e-09 0s 0s 132172110e-09 0s 0s 132178030e-09 1s 1s 132180070e-09 0s 0s 132182390e-09 0s 0s 132188270e-09 1s 1s 132190310e-09 0s 0s 132192670e-09 0s 0s 132198510e-09 1s 1s 132200550e-09 0s 0s 132202950e-09 0s 0s 132208750e-09 1s 1s 132210790e-09 0s 0s 132213230e-09 0s 0s 132218990e-09 1s 1s 132221030e-09 0s 0s 132223510e-09 0s 0s 132229230e-09 1s 1s 132231270e-09 0s 0s 132233790e-09 0s 0s 132239470e-09 1s 1s 132241510e-09 0s 0s 132244070e-09 0s 0s 132249710e-09 1s 1s 132251750e-09 0s 0s 132254350e-09 0s 0s 132259950e-09 1s 1s 132261990e-09 0s 0s 132264630e-09 0s 0s 132270190e-09 1s 1s 132272230e-09 0s 0s 132274910e-09 0s 0s 132280430e-09 1s 1s 132282470e-09 0s 0s 132285190e-09 0s 0s 132290670e-09 1s 1s 132292710e-09 0s 0s 132295470e-09 0s 0s 132300910e-09 1s 1s 132302950e-09 0s 0s 132305750e-09 0s 0s 132311150e-09 1s 1s 132313190e-09 0s 0s 132316030e-09 0s 0s 132321390e-09 1s 1s 132323430e-09 0s 0s 132326310e-09 0s 0s 132331630e-09 1s 1s 132333670e-09 0s 0s 132336590e-09 0s 0s 132341870e-09 1s 1s 132343910e-09 0s 0s 132346870e-09 0s 0s 132352110e-09 1s 1s 132354150e-09 0s 0s 132357150e-09 0s 0s 132362350e-09 1s 1s 132364390e-09 0s 0s 132367430e-09 0s 0s 132372590e-09 1s 1s 132374630e-09 0s 0s 132377710e-09 0s 0s 132382830e-09 1s 1s 132384870e-09 0s 0s 132387990e-09 0s 0s 132393070e-09 1s 1s 132395110e-09 0s 0s 132398270e-09 0s 0s 132403310e-09 1s 1s 132405350e-09 0s 0s 132408550e-09 0s 0s 132413550e-09 1s 1s 132415590e-09 0s 0s 132418830e-09 0s 0s 132423790e-09 1s 1s 132425830e-09 0s 0s 132429110e-09 0s 0s 132434030e-09 1s 1s 132436070e-09 0s 0s 132439390e-09 0s 0s 132444270e-09 1s 1s 132446310e-09 0s 0s 132449670e-09 0s 0s 132454510e-09 1s 1s 132456550e-09 0s 0s 132459950e-09 0s 0s 132464750e-09 1s 1s 132466790e-09 0s 0s 132470230e-09 0s 0s 132474990e-09 1s 1s 132477030e-09 0s 0s 132480510e-09 0s 0s 132485230e-09 1s 1s 132487270e-09 0s 0s 132490790e-09 0s 0s 132495470e-09 1s 1s 132497510e-09 0s 0s 132501070e-09 0s 0s 132505710e-09 1s 1s 132507750e-09 0s 0s 132511350e-09 0s 0s 132515950e-09 1s 1s 132517990e-09 0s 0s 132521630e-09 0s 0s 132526190e-09 1s 1s 132528230e-09 0s 0s 132531910e-09 0s 0s 132536430e-09 1s 1s 132538470e-09 0s 0s 132542190e-09 0s 0s 132546670e-09 1s 1s 132548710e-09 0s 0s 132552470e-09 0s 0s 132556910e-09 1s 1s 132558950e-09 0s 0s 132562750e-09 0s 0s 132567150e-09 1s 1s 132569190e-09 0s 0s 132573030e-09 0s 0s 132577390e-09 1s 1s 132579430e-09 0s 0s 132583310e-09 0s 0s 132587630e-09 1s 1s 132589670e-09 0s 0s 132593590e-09 0s 0s 132597870e-09 1s 1s 132599910e-09 0s 0s 132603870e-09 0s 0s 132608110e-09 1s 1s 132610150e-09 0s 0s 132614150e-09 0s 0s 132618350e-09 1s 1s 132620390e-09 0s 0s 132624430e-09 0s 0s 132628590e-09 1s 1s 132630630e-09 0s 0s 132634710e-09 0s 0s 132638830e-09 1s 1s 132640870e-09 0s 0s 132644990e-09 0s 0s 132649070e-09 1s 1s 132651110e-09 0s 0s 132655270e-09 0s 0s 132659310e-09 1s 1s 132661350e-09 0s 0s 132665550e-09 0s 0s 132669550e-09 1s 1s 132671590e-09 0s 0s 132675830e-09 0s 0s 132679790e-09 1s 1s 132681830e-09 0s 0s 132686110e-09 0s 0s 132690030e-09 1s 1s 132692070e-09 0s 0s 132696390e-09 0s 0s 132700270e-09 1s 1s 132702310e-09 0s 0s 132706670e-09 0s 0s 132710510e-09 1s 1s 132712550e-09 0s 0s 132716950e-09 0s 0s 132720750e-09 1s 1s 132722790e-09 0s 0s 132727230e-09 0s 0s 132730990e-09 1s 1s 132733030e-09 0s 0s 132737510e-09 0s 0s 132741230e-09 1s 1s 132743270e-09 0s 0s 132747790e-09 0s 0s 132751470e-09 1s 1s 132753510e-09 0s 0s 132758070e-09 0s 0s 132761710e-09 1s 1s 132763750e-09 0s 0s 132768350e-09 0s 0s 132771950e-09 1s 1s 132773990e-09 0s 0s 132778630e-09 0s 0s 132782190e-09 1s 1s 132784230e-09 0s 0s 132788910e-09 0s 0s 132792430e-09 1s 1s 132794470e-09 0s 0s 132799190e-09 0s 0s 132802670e-09 1s 1s 132804710e-09 0s 0s 132809470e-09 0s 0s 132812910e-09 1s 1s 132814950e-09 0s 0s 132819750e-09 0s 0s 132823150e-09 1s 1s 132825190e-09 0s 0s 132830030e-09 0s 0s 132833390e-09 1s 1s 132835430e-09 0s 0s 132840310e-09 0s 0s 132843630e-09 1s 1s 132845670e-09 0s 0s 132850590e-09 0s 0s 132853870e-09 1s 1s 132855910e-09 0s 0s 132860870e-09 0s 0s 132864110e-09 1s 1s 132866150e-09 0s 0s 132871150e-09 0s 0s 132874350e-09 1s 1s 132876390e-09 0s 0s 132881430e-09 0s 0s 132884590e-09 1s 1s 132886630e-09 0s 0s 132891710e-09 0s 0s 132894830e-09 1s 1s 132896870e-09 0s 0s 132901990e-09 0s 0s 132905070e-09 1s 1s 132907110e-09 0s 0s 132912270e-09 0s 0s 132915310e-09 1s 1s 132917350e-09 0s 0s 132922550e-09 0s 0s 132925550e-09 1s 1s 132927590e-09 0s 0s 132932830e-09 0s 0s 132935790e-09 1s 1s 132937830e-09 0s 0s 132943110e-09 0s 0s 132946030e-09 1s 1s 132948070e-09 0s 0s 132953390e-09 0s 0s 132956270e-09 1s 1s 132958310e-09 0s 0s 132963670e-09 0s 0s 132966510e-09 1s 1s 132968550e-09 0s 0s 132973950e-09 0s 0s 132976750e-09 1s 1s 132978790e-09 0s 0s 132984230e-09 0s 0s 132986990e-09 1s 1s 132989030e-09 0s 0s 132994510e-09 0s 0s 132997230e-09 1s 1s 132999270e-09 0s 0s 133004790e-09 0s 0s 133007470e-09 1s 1s 133009510e-09 0s 0s 133015070e-09 0s 0s 133017710e-09 1s 1s 133019750e-09 0s 0s 133025350e-09 0s 0s 133027950e-09 1s 1s 133029990e-09 0s 0s 133035630e-09 0s 0s 133038190e-09 1s 1s 133040230e-09 0s 0s 133045910e-09 0s 0s 133048430e-09 1s 1s 133050470e-09 0s 0s 133056190e-09 0s 0s 133058670e-09 1s 1s 133060710e-09 0s 0s 133066470e-09 0s 0s 133068910e-09 1s 1s 133070950e-09 0s 0s 133076750e-09 0s 0s 133079150e-09 1s 1s 133081190e-09 0s 0s 133087030e-09 0s 0s 133089390e-09 1s 1s 133091430e-09 0s 0s 133097310e-09 0s 0s 133099630e-09 1s 1s 133101670e-09 0s 0s 133107590e-09 0s 0s 133109870e-09 1s 1s 133111910e-09 0s 0s 133117870e-09 0s 0s 133120110e-09 1s 1s 133122150e-09 0s 0s 133128150e-09 0s 0s 133130350e-09 1s 1s 133132390e-09 0s 0s 133138430e-09 0s 0s 133140590e-09 1s 1s 133142630e-09 0s 0s 133148710e-09 0s 0s 133150830e-09 1s 1s 133152870e-09 0s 0s 133158990e-09 0s 0s 133161070e-09 1s 1s 133163110e-09 0s 0s 133169270e-09 0s 0s 133171310e-09 1s 1s 133173350e-09 0s 0s 133179550e-09 0s 0s 133181550e-09 1s 1s 133183590e-09 0s 0s 133189830e-09 0s 0s 133191790e-09 1s 1s 133193830e-09 0s 0s 133200110e-09 0s 0s 133202030e-09 1s 1s 133204070e-09 0s 0s 133210390e-09 0s 0s 133212270e-09 1s 1s 133214310e-09 0s 0s 133220670e-09 0s 0s 133222510e-09 1s 1s 133224550e-09 0s 0s 133230950e-09 0s 0s 133232750e-09 1s 1s 133234790e-09 0s 0s 133241230e-09 0s 0s 133242990e-09 1s 1s 133245030e-09 0s 0s 133251510e-09 0s 0s 133253230e-09 1s 1s 133255270e-09 0s 0s 133261790e-09 0s 0s 133263470e-09 1s 1s 133265510e-09 0s 0s 133272070e-09 0s 0s 133273710e-09 1s 1s 133275750e-09 0s 0s 133282350e-09 0s 0s 133283950e-09 1s 1s 133285990e-09 0s 0s 133292630e-09 0s 0s 133294190e-09 1s 1s 133296230e-09 0s 0s 133302910e-09 0s 0s 133304430e-09 1s 1s 133306470e-09 0s 0s 133313190e-09 0s 0s 133314670e-09 1s 1s 133316710e-09 0s 0s 133323470e-09 0s 0s 133324910e-09 1s 1s 133326950e-09 0s 0s 133333750e-09 0s 0s 133335150e-09 1s 1s 133337190e-09 0s 0s 133344030e-09 0s 0s 133345390e-09 1s 1s 133347430e-09 0s 0s 133354310e-09 0s 0s 133355630e-09 1s 1s 133357670e-09 0s 0s 133364590e-09 0s 0s 133365870e-09 1s 1s 133367910e-09 0s 0s 133374870e-09 0s 0s 133376110e-09 1s 1s 133378150e-09 0s 0s 133385150e-09 0s 0s 133386350e-09 1s 1s 133388390e-09 0s 0s 133395430e-09 0s 0s 133396590e-09 1s 1s 133398630e-09 0s 0s 133405710e-09 0s 0s 133406830e-09 1s 1s 133408870e-09 0s 0s 133415990e-09 0s 0s 133417070e-09 1s 1s 133419110e-09 0s 0s 133426270e-09 0s 0s 133427310e-09 1s 1s 133429350e-09 0s 0s 133436550e-09 0s 0s 133437550e-09 1s 1s 133439590e-09 0s 0s 133446830e-09 0s 0s 133447790e-09 1s 1s 133449830e-09 0s 0s 133457110e-09 0s 0s 133458030e-09 1s 1s 133460070e-09 0s 0s 133467390e-09 0s 0s 133468270e-09 1s 1s 133470310e-09 0s 0s 133477670e-09 0s 0s 133478510e-09 1s 1s 133480550e-09 0s 0s 133487950e-09 0s 0s 133488750e-09 1s 1s 133490790e-09 0s 0s 133498230e-09 0s 0s 133498990e-09 1s 1s 133501030e-09 0s 0s 133508510e-09 0s 0s 133509230e-09 1s 1s 133511270e-09 0s 0s 133518790e-09 0s 0s 133519470e-09 1s 1s 133521510e-09 0s 0s 133529070e-09 0s 0s 133529710e-09 1s 1s 133531750e-09 0s 0s 133539350e-09 0s 0s 133539950e-09 1s 1s 133541990e-09 0s 0s 133549630e-09 0s 0s 133550190e-09 1s 1s 133552230e-09 0s 0s 133559910e-09 0s 0s 133560430e-09 1s 1s 133562470e-09 0s 0s 133570190e-09 0s 0s 133570670e-09 1s 1s 133572710e-09 0s 0s 133580470e-09 0s 0s 133580910e-09 1s 1s 133582950e-09 0s 0s 133590750e-09 0s 0s 133591150e-09 1s 1s 133593190e-09 0s 0s 133601030e-09 0s 0s 133601390e-09 1s 1s 133603430e-09 0s 0s 133611310e-09 0s 0s 133611630e-09 1s 1s 133613670e-09 0s 0s 133621590e-09 0s 0s 133621870e-09 1s 1s 133623910e-09 0s 0s 133631870e-09 0s 0s 133632110e-09 1s 1s 133634150e-09 0s 0s 133642150e-09 0s 0s 133642350e-09 1s 1s 133644390e-09 0s 0s 133652430e-09 0s 0s 133652590e-09 1s 1s 133654630e-09 0s 0s 133662710e-09 0s 0s 133662830e-09 1s 1s 133664870e-09 0s 0s 133672990e-09 0s 0s 133673070e-09 1s 1s 133675110e-09 0s 0s 133683270e-09 0s 0s 133683310e-09 1s 1s 133685350e-09 0s 0s 133693550e-09 1s 1s 133693590e-09 1s 1s 133695630e-09 0s 0s 133703790e-09 1s 1s 133703870e-09 1s 1s 133705870e-09 0s 0s 133714030e-09 1s 1s 133714150e-09 1s 1s 133716110e-09 0s 0s 133724270e-09 1s 1s 133724430e-09 1s 1s 133726350e-09 0s 0s 133734510e-09 1s 1s 133734710e-09 1s 1s 133736590e-09 0s 0s 133744750e-09 1s 1s 133744990e-09 1s 1s 133746830e-09 0s 0s 133754990e-09 1s 1s 133755270e-09 1s 1s 133757070e-09 0s 0s 133765230e-09 1s 1s 133765550e-09 1s 1s 133767310e-09 0s 0s 133775470e-09 1s 1s 133775830e-09 1s 1s 133777550e-09 0s 0s 133785710e-09 1s 1s 133786110e-09 1s 1s 133787790e-09 0s 0s 133795950e-09 1s 1s 133796390e-09 1s 1s 133798030e-09 0s 0s 133806190e-09 1s 1s 133806670e-09 1s 1s 133808270e-09 0s 0s 133816430e-09 1s 1s 133816950e-09 1s 1s 133818510e-09 0s 0s 133826670e-09 1s 1s 133827230e-09 1s 1s 133828750e-09 0s 0s 133836910e-09 1s 1s 133837510e-09 1s 1s 133838990e-09 0s 0s 133847150e-09 1s 1s 133847790e-09 1s 1s 133849230e-09 0s 0s 133857390e-09 1s 1s 133858070e-09 1s 1s 133859470e-09 0s 0s 133867630e-09 1s 1s 133868350e-09 1s 1s 133869710e-09 0s 0s 133877870e-09 1s 1s 133878630e-09 1s 1s 133879950e-09 0s 0s 133888110e-09 1s 1s 133888910e-09 1s 1s 133890190e-09 0s 0s 133898350e-09 1s 1s 133899190e-09 1s 1s 133900430e-09 0s 0s 133908590e-09 1s 1s 133909470e-09 1s 1s 133910670e-09 0s 0s 133918830e-09 1s 1s 133919750e-09 1s 1s 133920910e-09 0s 0s 133929070e-09 1s 1s 133930030e-09 1s 1s 133931150e-09 0s 0s 133939310e-09 1s 1s 133940310e-09 1s 1s 133941390e-09 0s 0s 133949550e-09 1s 1s 133950590e-09 1s 1s 133951630e-09 0s 0s 133959790e-09 1s 1s 133960870e-09 1s 1s 133961870e-09 0s 0s 133970030e-09 1s 1s 133971150e-09 1s 1s 133972110e-09 0s 0s 133980270e-09 1s 1s 133981430e-09 1s 1s 133982350e-09 0s 0s 133990510e-09 1s 1s 133991710e-09 1s 1s 133992590e-09 0s 0s 134000750e-09 1s 1s 134001990e-09 1s 1s 134002830e-09 0s 0s 134010990e-09 1s 1s 134012270e-09 1s 1s 134013070e-09 0s 0s 134021230e-09 1s 1s 134022550e-09 1s 1s 134023310e-09 0s 0s 134031470e-09 1s 1s 134032830e-09 1s 1s 134033550e-09 0s 0s 134041710e-09 1s 1s 134043110e-09 1s 1s 134043790e-09 0s 0s 134051950e-09 1s 1s 134053390e-09 1s 1s 134054030e-09 0s 0s 134062190e-09 1s 1s 134063670e-09 1s 1s 134064270e-09 0s 0s 134072430e-09 1s 1s 134073950e-09 1s 1s 134074510e-09 0s 0s 134082670e-09 1s 1s 134084230e-09 1s 1s 134084750e-09 0s 0s 134092910e-09 1s 1s 134094510e-09 1s 1s 134094990e-09 0s 0s 134103150e-09 1s 1s 134104790e-09 1s 1s 134105230e-09 0s 0s 134113390e-09 1s 1s 134115070e-09 1s 1s 134115470e-09 0s 0s 134123630e-09 1s 1s 134125350e-09 1s 1s 134125710e-09 0s 0s 134133870e-09 1s 1s 134135630e-09 1s 1s 134135950e-09 0s 0s 134144110e-09 1s 1s 134145910e-09 1s 1s 134146190e-09 0s 0s 134154350e-09 1s 1s 134156190e-09 1s 1s 134156430e-09 0s 0s 134164590e-09 1s 1s 134166470e-09 1s 1s 134166670e-09 0s 0s 134174830e-09 1s 1s 134176750e-09 1s 1s 134176910e-09 0s 0s 134185070e-09 1s 1s 134187030e-09 1s 1s 134187150e-09 0s 0s 134195310e-09 1s 1s 134197310e-09 1s 1s 134197390e-09 0s 0s 134205550e-09 1s 1s 134207590e-09 1s 1s 134207630e-09 0s 0s 134215790e-09 1s 1s 134217870e-09 0s 0s 134226030e-09 1s 1s 134228110e-09 0s 0s 134228150e-09 0s 0s 134236270e-09 1s 1s 134238350e-09 0s 0s 134238430e-09 0s 0s 134246510e-09 1s 1s 134248590e-09 0s 0s 134248710e-09 0s 0s 134256750e-09 1s 1s 134258830e-09 0s 0s 134258990e-09 0s 0s 134266990e-09 1s 1s 134269070e-09 0s 0s 134269270e-09 0s 0s 134277230e-09 1s 1s 134279310e-09 0s 0s 134279550e-09 0s 0s 134287470e-09 1s 1s 134289550e-09 0s 0s 134289830e-09 0s 0s 134297710e-09 1s 1s 134299790e-09 0s 0s 134300110e-09 0s 0s 134307950e-09 1s 1s 134310030e-09 0s 0s 134310390e-09 0s 0s 134318190e-09 1s 1s 134320270e-09 0s 0s 134320670e-09 0s 0s 134328430e-09 1s 1s 134330510e-09 0s 0s 134330950e-09 0s 0s 134338670e-09 1s 1s 134340750e-09 0s 0s 134341230e-09 0s 0s 134348910e-09 1s 1s 134350990e-09 0s 0s 134351510e-09 0s 0s 134359150e-09 1s 1s 134361230e-09 0s 0s 134361790e-09 0s 0s 134369390e-09 1s 1s 134371470e-09 0s 0s 134372070e-09 0s 0s 134379630e-09 1s 1s 134381710e-09 0s 0s 134382350e-09 0s 0s 134389870e-09 1s 1s 134391950e-09 0s 0s 134392630e-09 0s 0s 134400110e-09 1s 1s 134402190e-09 0s 0s 134402910e-09 0s 0s 134410350e-09 1s 1s 134412430e-09 0s 0s 134413190e-09 0s 0s 134420590e-09 1s 1s 134422670e-09 0s 0s 134423470e-09 0s 0s 134430830e-09 1s 1s 134432910e-09 0s 0s 134433750e-09 0s 0s 134441070e-09 1s 1s 134443150e-09 0s 0s 134444030e-09 0s 0s 134451310e-09 1s 1s 134453390e-09 0s 0s 134454310e-09 0s 0s 134461550e-09 1s 1s 134463630e-09 0s 0s 134464590e-09 0s 0s 134471790e-09 1s 1s 134473870e-09 0s 0s 134474870e-09 0s 0s 134482030e-09 1s 1s 134484110e-09 0s 0s 134485150e-09 0s 0s 134492270e-09 1s 1s 134494350e-09 0s 0s 134495430e-09 0s 0s 134502510e-09 1s 1s 134504590e-09 0s 0s 134505710e-09 0s 0s 134512750e-09 1s 1s 134514830e-09 0s 0s 134515990e-09 0s 0s 134522990e-09 1s 1s 134525070e-09 0s 0s 134526270e-09 0s 0s 134533230e-09 1s 1s 134535310e-09 0s 0s 134536550e-09 0s 0s 134543470e-09 1s 1s 134545550e-09 0s 0s 134546830e-09 0s 0s 134553710e-09 1s 1s 134555790e-09 0s 0s 134557110e-09 0s 0s 134563950e-09 1s 1s 134566030e-09 0s 0s 134567390e-09 0s 0s 134574190e-09 1s 1s 134576270e-09 0s 0s 134577670e-09 0s 0s 134584430e-09 1s 1s 134586510e-09 0s 0s 134587950e-09 0s 0s 134594670e-09 1s 1s 134596750e-09 0s 0s 134598230e-09 0s 0s 134604910e-09 1s 1s 134606990e-09 0s 0s 134608510e-09 0s 0s 134615150e-09 1s 1s 134617230e-09 0s 0s 134618790e-09 0s 0s 134625390e-09 1s 1s 134627470e-09 0s 0s 134629070e-09 0s 0s 134635630e-09 1s 1s 134637710e-09 0s 0s 134639350e-09 0s 0s 134645870e-09 1s 1s 134647950e-09 0s 0s 134649630e-09 0s 0s 134656110e-09 1s 1s 134658190e-09 0s 0s 134659910e-09 0s 0s 134666350e-09 1s 1s 134668430e-09 0s 0s 134670190e-09 0s 0s 134676590e-09 1s 1s 134678670e-09 0s 0s 134680470e-09 0s 0s 134686830e-09 1s 1s 134688910e-09 0s 0s 134690750e-09 0s 0s 134697070e-09 1s 1s 134699150e-09 0s 0s 134701030e-09 0s 0s 134707310e-09 1s 1s 134709390e-09 0s 0s 134711310e-09 0s 0s 134717550e-09 1s 1s 134719630e-09 0s 0s 134721590e-09 0s 0s 134727790e-09 1s 1s 134729870e-09 0s 0s 134731870e-09 0s 0s 134738030e-09 1s 1s 134740110e-09 0s 0s 134742150e-09 0s 0s 134748270e-09 1s 1s 134750350e-09 0s 0s 134752430e-09 0s 0s 134758510e-09 1s 1s 134760590e-09 0s 0s 134762710e-09 0s 0s 134768750e-09 1s 1s 134770830e-09 0s 0s 134772990e-09 0s 0s 134778990e-09 1s 1s 134781070e-09 0s 0s 134783270e-09 0s 0s 134789230e-09 1s 1s 134791310e-09 0s 0s 134793550e-09 0s 0s 134799470e-09 1s 1s 134801550e-09 0s 0s 134803830e-09 0s 0s 134809710e-09 1s 1s 134811790e-09 0s 0s 134814110e-09 0s 0s 134819950e-09 1s 1s 134822030e-09 0s 0s 134824390e-09 0s 0s 134830190e-09 1s 1s 134832270e-09 0s 0s 134834670e-09 0s 0s 134840430e-09 1s 1s 134842510e-09 0s 0s 134844950e-09 0s 0s 134850670e-09 1s 1s 134852750e-09 0s 0s 134855230e-09 0s 0s 134860910e-09 1s 1s 134862990e-09 0s 0s 134865510e-09 0s 0s 134871150e-09 1s 1s 134873230e-09 0s 0s 134875790e-09 0s 0s 134881390e-09 1s 1s 134883470e-09 0s 0s 134886070e-09 0s 0s 134891630e-09 1s 1s 134893710e-09 0s 0s 134896350e-09 0s 0s 134901870e-09 1s 1s 134903950e-09 0s 0s 134906630e-09 0s 0s 134912110e-09 1s 1s 134914190e-09 0s 0s 134916910e-09 0s 0s 134922350e-09 1s 1s 134924430e-09 0s 0s 134927190e-09 0s 0s 134932590e-09 1s 1s 134934670e-09 0s 0s 134937470e-09 0s 0s 134942830e-09 1s 1s 134944910e-09 0s 0s 134947750e-09 0s 0s 134953070e-09 1s 1s 134955150e-09 0s 0s 134958030e-09 0s 0s 134963310e-09 1s 1s 134965390e-09 0s 0s 134968310e-09 0s 0s 134973550e-09 1s 1s 134975630e-09 0s 0s 134978590e-09 0s 0s 134983790e-09 1s 1s 134985870e-09 0s 0s 134988870e-09 0s 0s 134994030e-09 1s 1s 134996110e-09 0s 0s 134999150e-09 0s 0s 135004270e-09 1s 1s 135006350e-09 0s 0s 135009430e-09 0s 0s 135014510e-09 1s 1s 135016590e-09 0s 0s 135019710e-09 0s 0s 135024750e-09 1s 1s 135026830e-09 0s 0s 135029990e-09 0s 0s 135034990e-09 1s 1s 135037070e-09 0s 0s 135040270e-09 0s 0s 135045230e-09 1s 1s 135047310e-09 0s 0s 135050550e-09 0s 0s 135055470e-09 1s 1s 135057550e-09 0s 0s 135060830e-09 0s 0s 135065710e-09 1s 1s 135067790e-09 0s 0s 135071110e-09 0s 0s 135075950e-09 1s 1s 135078030e-09 0s 0s 135081390e-09 0s 0s 135086190e-09 1s 1s 135088270e-09 0s 0s 135091670e-09 0s 0s 135096430e-09 1s 1s 135098510e-09 0s 0s 135101950e-09 0s 0s 135106670e-09 1s 1s 135108750e-09 0s 0s 135112230e-09 0s 0s 135116910e-09 1s 1s 135118990e-09 0s 0s 135122510e-09 0s 0s 135127150e-09 1s 1s 135129230e-09 0s 0s 135132790e-09 0s 0s 135137390e-09 1s 1s 135139470e-09 0s 0s 135143070e-09 0s 0s 135147630e-09 1s 1s 135149710e-09 0s 0s 135153350e-09 0s 0s 135157870e-09 1s 1s 135159950e-09 0s 0s 135163630e-09 0s 0s 135168110e-09 1s 1s 135170190e-09 0s 0s 135173910e-09 0s 0s 135178350e-09 1s 1s 135180430e-09 0s 0s 135184190e-09 0s 0s 135188590e-09 1s 1s 135190670e-09 0s 0s 135194470e-09 0s 0s 135198830e-09 1s 1s 135200910e-09 0s 0s 135204750e-09 0s 0s 135209070e-09 1s 1s 135211150e-09 0s 0s 135215030e-09 0s 0s 135219310e-09 1s 1s 135221390e-09 0s 0s 135225310e-09 0s 0s 135229550e-09 1s 1s 135231630e-09 0s 0s 135235590e-09 0s 0s 135239790e-09 1s 1s 135241870e-09 0s 0s 135245870e-09 0s 0s 135250030e-09 1s 1s 135252110e-09 0s 0s 135256150e-09 0s 0s 135260270e-09 1s 1s 135262350e-09 0s 0s 135266430e-09 0s 0s 135270510e-09 1s 1s 135272590e-09 0s 0s 135276710e-09 0s 0s 135280750e-09 1s 1s 135282830e-09 0s 0s 135286990e-09 0s 0s 135290990e-09 1s 1s 135293070e-09 0s 0s 135297270e-09 0s 0s 135301230e-09 1s 1s 135303310e-09 0s 0s 135307550e-09 0s 0s 135311470e-09 1s 1s 135313550e-09 0s 0s 135317830e-09 0s 0s 135321710e-09 1s 1s 135323790e-09 0s 0s 135328110e-09 0s 0s 135331950e-09 1s 1s 135334030e-09 0s 0s 135338390e-09 0s 0s 135342190e-09 1s 1s 135344270e-09 0s 0s 135348670e-09 0s 0s 135352430e-09 1s 1s 135354510e-09 0s 0s 135358950e-09 0s 0s 135362670e-09 1s 1s 135364750e-09 0s 0s 135369230e-09 0s 0s 135372910e-09 1s 1s 135374990e-09 0s 0s 135379510e-09 0s 0s 135383150e-09 1s 1s 135385230e-09 0s 0s 135389790e-09 0s 0s 135393390e-09 1s 1s 135395470e-09 0s 0s 135400070e-09 0s 0s 135403630e-09 1s 1s 135405710e-09 0s 0s 135410350e-09 0s 0s 135413870e-09 1s 1s 135415950e-09 0s 0s 135420630e-09 0s 0s 135424110e-09 1s 1s 135426190e-09 0s 0s 135430910e-09 0s 0s 135434350e-09 1s 1s 135436430e-09 0s 0s 135441190e-09 0s 0s 135444590e-09 1s 1s 135446670e-09 0s 0s 135451470e-09 0s 0s 135454830e-09 1s 1s 135456910e-09 0s 0s 135461750e-09 0s 0s 135465070e-09 1s 1s 135467150e-09 0s 0s 135472030e-09 0s 0s 135475310e-09 1s 1s 135477390e-09 0s 0s 135482310e-09 0s 0s 135485550e-09 1s 1s 135487630e-09 0s 0s 135492590e-09 0s 0s 135495790e-09 1s 1s 135497870e-09 0s 0s 135502870e-09 0s 0s 135506030e-09 1s 1s 135508110e-09 0s 0s 135513150e-09 0s 0s 135516270e-09 1s 1s 135518350e-09 0s 0s 135523430e-09 0s 0s 135526510e-09 1s 1s 135528590e-09 0s 0s 135533710e-09 0s 0s 135536750e-09 1s 1s 135538830e-09 0s 0s 135543990e-09 0s 0s 135546990e-09 1s 1s 135549070e-09 0s 0s 135554270e-09 0s 0s 135557230e-09 1s 1s 135559310e-09 0s 0s 135564550e-09 0s 0s 135567470e-09 1s 1s 135569550e-09 0s 0s 135574830e-09 0s 0s 135577710e-09 1s 1s 135579790e-09 0s 0s 135585110e-09 0s 0s 135587950e-09 1s 1s 135590030e-09 0s 0s 135595390e-09 0s 0s 135598190e-09 1s 1s 135600270e-09 0s 0s 135605670e-09 0s 0s 135608430e-09 1s 1s 135610510e-09 0s 0s 135615950e-09 0s 0s 135618670e-09 1s 1s 135620750e-09 0s 0s 135626230e-09 0s 0s 135628910e-09 1s 1s 135630990e-09 0s 0s 135636510e-09 0s 0s 135639150e-09 1s 1s 135641230e-09 0s 0s 135646790e-09 0s 0s 135649390e-09 1s 1s 135651470e-09 0s 0s 135657070e-09 0s 0s 135659630e-09 1s 1s 135661710e-09 0s 0s 135667350e-09 0s 0s 135669870e-09 1s 1s 135671950e-09 0s 0s 135677630e-09 0s 0s 135680110e-09 1s 1s 135682190e-09 0s 0s 135687910e-09 0s 0s 135690350e-09 1s 1s 135692430e-09 0s 0s 135698190e-09 0s 0s 135700590e-09 1s 1s 135702670e-09 0s 0s 135708470e-09 0s 0s 135710830e-09 1s 1s 135712910e-09 0s 0s 135718750e-09 0s 0s 135721070e-09 1s 1s 135723150e-09 0s 0s 135729030e-09 0s 0s 135731310e-09 1s 1s 135733390e-09 0s 0s 135739310e-09 0s 0s 135741550e-09 1s 1s 135743630e-09 0s 0s 135749590e-09 0s 0s 135751790e-09 1s 1s 135753870e-09 0s 0s 135759870e-09 0s 0s 135762030e-09 1s 1s 135764110e-09 0s 0s 135770150e-09 0s 0s 135772270e-09 1s 1s 135774350e-09 0s 0s 135780430e-09 0s 0s 135782510e-09 1s 1s 135784590e-09 0s 0s 135790710e-09 0s 0s 135792750e-09 1s 1s 135794830e-09 0s 0s 135800990e-09 0s 0s 135802990e-09 1s 1s 135805070e-09 0s 0s 135811270e-09 0s 0s 135813230e-09 1s 1s 135815310e-09 0s 0s 135821550e-09 0s 0s 135823470e-09 1s 1s 135825550e-09 0s 0s 135831830e-09 0s 0s 135833710e-09 1s 1s 135835790e-09 0s 0s 135842110e-09 0s 0s 135843950e-09 1s 1s 135846030e-09 0s 0s 135852390e-09 0s 0s 135854190e-09 1s 1s 135856270e-09 0s 0s 135862670e-09 0s 0s 135864430e-09 1s 1s 135866510e-09 0s 0s 135872950e-09 0s 0s 135874670e-09 1s 1s 135876750e-09 0s 0s 135883230e-09 0s 0s 135884910e-09 1s 1s 135886990e-09 0s 0s 135893510e-09 0s 0s 135895150e-09 1s 1s 135897230e-09 0s 0s 135903790e-09 0s 0s 135905390e-09 1s 1s 135907470e-09 0s 0s 135914070e-09 0s 0s 135915630e-09 1s 1s 135917710e-09 0s 0s 135924350e-09 0s 0s 135925870e-09 1s 1s 135927950e-09 0s 0s 135934630e-09 0s 0s 135936110e-09 1s 1s 135938190e-09 0s 0s 135944910e-09 0s 0s 135946350e-09 1s 1s 135948430e-09 0s 0s 135955190e-09 0s 0s 135956590e-09 1s 1s 135958670e-09 0s 0s 135965470e-09 0s 0s 135966830e-09 1s 1s 135968910e-09 0s 0s 135975750e-09 0s 0s 135977070e-09 1s 1s 135979150e-09 0s 0s 135986030e-09 0s 0s 135987310e-09 1s 1s 135989390e-09 0s 0s 135996310e-09 0s 0s 135997550e-09 1s 1s 135999630e-09 0s 0s 136006590e-09 0s 0s 136007790e-09 1s 1s 136009870e-09 0s 0s 136016870e-09 0s 0s 136018030e-09 1s 1s 136020110e-09 0s 0s 136027150e-09 0s 0s 136028270e-09 1s 1s 136030350e-09 0s 0s 136037430e-09 0s 0s 136038510e-09 1s 1s 136040590e-09 0s 0s 136047710e-09 0s 0s 136048750e-09 1s 1s 136050830e-09 0s 0s 136057990e-09 0s 0s 136058990e-09 1s 1s 136061070e-09 0s 0s 136068270e-09 0s 0s 136069230e-09 1s 1s 136071310e-09 0s 0s 136078550e-09 0s 0s 136079470e-09 1s 1s 136081550e-09 0s 0s 136088830e-09 0s 0s 136089710e-09 1s 1s 136091790e-09 0s 0s 136099110e-09 0s 0s 136099950e-09 1s 1s 136102030e-09 0s 0s 136109390e-09 0s 0s 136110190e-09 1s 1s 136112270e-09 0s 0s 136119670e-09 0s 0s 136120430e-09 1s 1s 136122510e-09 0s 0s 136129950e-09 0s 0s 136130670e-09 1s 1s 136132750e-09 0s 0s 136140230e-09 0s 0s 136140910e-09 1s 1s 136142990e-09 0s 0s 136150510e-09 0s 0s 136151150e-09 1s 1s 136153230e-09 0s 0s 136160790e-09 0s 0s 136161390e-09 1s 1s 136163470e-09 0s 0s 136171070e-09 0s 0s 136171630e-09 1s 1s 136173710e-09 0s 0s 136181350e-09 0s 0s 136181870e-09 1s 1s 136183950e-09 0s 0s 136191630e-09 0s 0s 136192110e-09 1s 1s 136194190e-09 0s 0s 136201910e-09 0s 0s 136202350e-09 1s 1s 136204430e-09 0s 0s 136212190e-09 0s 0s 136212590e-09 1s 1s 136214670e-09 0s 0s 136222470e-09 0s 0s 136222830e-09 1s 1s 136224910e-09 0s 0s 136232750e-09 0s 0s 136233070e-09 1s 1s 136235150e-09 0s 0s 136243030e-09 0s 0s 136243310e-09 1s 1s 136245390e-09 0s 0s 136253310e-09 0s 0s 136253550e-09 1s 1s 136255630e-09 0s 0s 136263590e-09 0s 0s 136263790e-09 1s 1s 136265870e-09 0s 0s 136273870e-09 0s 0s 136274030e-09 1s 1s 136276110e-09 0s 0s 136284150e-09 0s 0s 136284270e-09 1s 1s 136286350e-09 0s 0s 136294430e-09 0s 0s 136294510e-09 1s 1s 136296590e-09 0s 0s 136304710e-09 0s 0s 136304750e-09 1s 1s 136306830e-09 0s 0s 136314990e-09 1s 1s 136315030e-09 1s 1s 136317110e-09 0s 0s 136325230e-09 1s 1s 136325310e-09 1s 1s 136327350e-09 0s 0s 136335470e-09 1s 1s 136335590e-09 1s 1s 136337590e-09 0s 0s 136345710e-09 1s 1s 136345870e-09 1s 1s 136347830e-09 0s 0s 136355950e-09 1s 1s 136356150e-09 1s 1s 136358070e-09 0s 0s 136366190e-09 1s 1s 136366430e-09 1s 1s 136368310e-09 0s 0s 136376430e-09 1s 1s 136376710e-09 1s 1s 136378550e-09 0s 0s 136386670e-09 1s 1s 136386990e-09 1s 1s 136388790e-09 0s 0s 136396910e-09 1s 1s 136397270e-09 1s 1s 136399030e-09 0s 0s 136407150e-09 1s 1s 136407550e-09 1s 1s 136409270e-09 0s 0s 136417390e-09 1s 1s 136417830e-09 1s 1s 136419510e-09 0s 0s 136427630e-09 1s 1s 136428110e-09 1s 1s 136429750e-09 0s 0s 136437870e-09 1s 1s 136438390e-09 1s 1s 136439990e-09 0s 0s 136448110e-09 1s 1s 136448670e-09 1s 1s 136450230e-09 0s 0s 136458350e-09 1s 1s 136458950e-09 1s 1s 136460470e-09 0s 0s 136468590e-09 1s 1s 136469230e-09 1s 1s 136470710e-09 0s 0s 136478830e-09 1s 1s 136479510e-09 1s 1s 136480950e-09 0s 0s 136489070e-09 1s 1s 136489790e-09 1s 1s 136491190e-09 0s 0s 136499310e-09 1s 1s 136500070e-09 1s 1s 136501430e-09 0s 0s 136509550e-09 1s 1s 136510350e-09 1s 1s 136511670e-09 0s 0s 136519790e-09 1s 1s 136520630e-09 1s 1s 136521910e-09 0s 0s 136530030e-09 1s 1s 136530910e-09 1s 1s 136532150e-09 0s 0s 136540270e-09 1s 1s 136541190e-09 1s 1s 136542390e-09 0s 0s 136550510e-09 1s 1s 136551470e-09 1s 1s 136552630e-09 0s 0s 136560750e-09 1s 1s 136561750e-09 1s 1s 136562870e-09 0s 0s 136570990e-09 1s 1s 136572030e-09 1s 1s 136573110e-09 0s 0s 136581230e-09 1s 1s 136582310e-09 1s 1s 136583350e-09 0s 0s 136591470e-09 1s 1s 136592590e-09 1s 1s 136593590e-09 0s 0s 136601710e-09 1s 1s 136602870e-09 1s 1s 136603830e-09 0s 0s 136611950e-09 1s 1s 136613150e-09 1s 1s 136614070e-09 0s 0s 136622190e-09 1s 1s 136623430e-09 1s 1s 136624310e-09 0s 0s 136632430e-09 1s 1s 136633710e-09 1s 1s 136634550e-09 0s 0s 136642670e-09 1s 1s 136643990e-09 1s 1s 136644790e-09 0s 0s 136652910e-09 1s 1s 136654270e-09 1s 1s 136655030e-09 0s 0s 136663150e-09 1s 1s 136664550e-09 1s 1s 136665270e-09 0s 0s 136673390e-09 1s 1s 136674830e-09 1s 1s 136675510e-09 0s 0s 136683630e-09 1s 1s 136685110e-09 1s 1s 136685750e-09 0s 0s 136693870e-09 1s 1s 136695390e-09 1s 1s 136695990e-09 0s 0s 136704110e-09 1s 1s 136705670e-09 1s 1s 136706230e-09 0s 0s 136714350e-09 1s 1s 136715950e-09 1s 1s 136716470e-09 0s 0s 136724590e-09 1s 1s 136726230e-09 1s 1s 136726710e-09 0s 0s 136734830e-09 1s 1s 136736510e-09 1s 1s 136736950e-09 0s 0s 136745070e-09 1s 1s 136746790e-09 1s 1s 136747190e-09 0s 0s 136755310e-09 1s 1s 136757070e-09 1s 1s 136757430e-09 0s 0s 136765550e-09 1s 1s 136767350e-09 1s 1s 136767670e-09 0s 0s 136775790e-09 1s 1s 136777630e-09 1s 1s 136777910e-09 0s 0s 136786030e-09 1s 1s 136787910e-09 1s 1s 136788150e-09 0s 0s 136796270e-09 1s 1s 136798190e-09 1s 1s 136798390e-09 0s 0s 136806510e-09 1s 1s 136808470e-09 1s 1s 136808630e-09 0s 0s 136816750e-09 1s 1s 136818750e-09 1s 1s 136818870e-09 0s 0s 136826990e-09 1s 1s 136829030e-09 1s 1s 136829110e-09 0s 0s 136837230e-09 1s 1s 136839310e-09 1s 1s 136839350e-09 0s 0s 136847470e-09 1s 1s 136849590e-09 0s 0s 136857710e-09 1s 1s 136859830e-09 0s 0s 136859870e-09 0s 0s 136867950e-09 1s 1s 136870070e-09 0s 0s 136870150e-09 0s 0s 136878190e-09 1s 1s 136880310e-09 0s 0s 136880430e-09 0s 0s 136888430e-09 1s 1s 136890550e-09 0s 0s 136890710e-09 0s 0s 136898670e-09 1s 1s 136900790e-09 0s 0s 136900990e-09 0s 0s 136908910e-09 1s 1s 136911030e-09 0s 0s 136911270e-09 0s 0s 136919150e-09 1s 1s 136921270e-09 0s 0s 136921550e-09 0s 0s 136929390e-09 1s 1s 136931510e-09 0s 0s 136931830e-09 0s 0s 136939630e-09 1s 1s 136941750e-09 0s 0s 136942110e-09 0s 0s 136949870e-09 1s 1s 136951990e-09 0s 0s 136952390e-09 0s 0s 136960110e-09 1s 1s 136962230e-09 0s 0s 136962670e-09 0s 0s 136970350e-09 1s 1s 136972470e-09 0s 0s 136972950e-09 0s 0s 136980590e-09 1s 1s 136982710e-09 0s 0s 136983230e-09 0s 0s 136990830e-09 1s 1s 136992950e-09 0s 0s 136993510e-09 0s 0s 137001070e-09 1s 1s 137003190e-09 0s 0s 137003790e-09 0s 0s 137011310e-09 1s 1s 137013430e-09 0s 0s 137014070e-09 0s 0s 137021550e-09 1s 1s 137023670e-09 0s 0s 137024350e-09 0s 0s 137031790e-09 1s 1s 137033910e-09 0s 0s 137034630e-09 0s 0s 137042030e-09 1s 1s 137044150e-09 0s 0s 137044910e-09 0s 0s 137052270e-09 1s 1s 137054390e-09 0s 0s 137055190e-09 0s 0s 137062510e-09 1s 1s 137064630e-09 0s 0s 137065470e-09 0s 0s 137072750e-09 1s 1s 137074870e-09 0s 0s 137075750e-09 0s 0s 137082990e-09 1s 1s 137085110e-09 0s 0s 137086030e-09 0s 0s 137093230e-09 1s 1s 137095350e-09 0s 0s 137096310e-09 0s 0s 137103470e-09 1s 1s 137105590e-09 0s 0s 137106590e-09 0s 0s 137113710e-09 1s 1s 137115830e-09 0s 0s 137116870e-09 0s 0s 137123950e-09 1s 1s 137126070e-09 0s 0s 137127150e-09 0s 0s 137134190e-09 1s 1s 137136310e-09 0s 0s 137137430e-09 0s 0s 137144430e-09 1s 1s 137146550e-09 0s 0s 137147710e-09 0s 0s 137154670e-09 1s 1s 137156790e-09 0s 0s 137157990e-09 0s 0s 137164910e-09 1s 1s 137167030e-09 0s 0s 137168270e-09 0s 0s 137175150e-09 1s 1s 137177270e-09 0s 0s 137178550e-09 0s 0s 137185390e-09 1s 1s 137187510e-09 0s 0s 137188830e-09 0s 0s 137195630e-09 1s 1s 137197750e-09 0s 0s 137199110e-09 0s 0s 137205870e-09 1s 1s 137207990e-09 0s 0s 137209390e-09 0s 0s 137216110e-09 1s 1s 137218230e-09 0s 0s 137219670e-09 0s 0s 137226350e-09 1s 1s 137228470e-09 0s 0s 137229950e-09 0s 0s 137236590e-09 1s 1s 137238710e-09 0s 0s 137240230e-09 0s 0s 137246830e-09 1s 1s 137248950e-09 0s 0s 137250510e-09 0s 0s 137257070e-09 1s 1s 137259190e-09 0s 0s 137260790e-09 0s 0s 137267310e-09 1s 1s 137269430e-09 0s 0s 137271070e-09 0s 0s 137277550e-09 1s 1s 137279670e-09 0s 0s 137281350e-09 0s 0s 137287790e-09 1s 1s 137289910e-09 0s 0s 137291630e-09 0s 0s 137298030e-09 1s 1s 137300150e-09 0s 0s 137301910e-09 0s 0s 137308270e-09 1s 1s 137310390e-09 0s 0s 137312190e-09 0s 0s 137318510e-09 1s 1s 137320630e-09 0s 0s 137322470e-09 0s 0s 137328750e-09 1s 1s 137330870e-09 0s 0s 137332750e-09 0s 0s 137338990e-09 1s 1s 137341110e-09 0s 0s 137343030e-09 0s 0s 137349230e-09 1s 1s 137351350e-09 0s 0s 137353310e-09 0s 0s 137359470e-09 1s 1s 137361590e-09 0s 0s 137363590e-09 0s 0s 137369710e-09 1s 1s 137371830e-09 0s 0s 137373870e-09 0s 0s 137379950e-09 1s 1s 137382070e-09 0s 0s 137384150e-09 0s 0s 137390190e-09 1s 1s 137392310e-09 0s 0s 137394430e-09 0s 0s 137400430e-09 1s 1s 137402550e-09 0s 0s 137404710e-09 0s 0s 137410670e-09 1s 1s 137412790e-09 0s 0s 137414990e-09 0s 0s 137420910e-09 1s 1s 137423030e-09 0s 0s 137425270e-09 0s 0s 137431150e-09 1s 1s 137433270e-09 0s 0s 137435550e-09 0s 0s 137441390e-09 1s 1s 137443510e-09 0s 0s 137445830e-09 0s 0s 137451630e-09 1s 1s 137453750e-09 0s 0s 137456110e-09 0s 0s 137461870e-09 1s 1s 137463990e-09 0s 0s 137466390e-09 0s 0s 137472110e-09 1s 1s 137474230e-09 0s 0s 137476670e-09 0s 0s 137482350e-09 1s 1s 137484470e-09 0s 0s 137486950e-09 0s 0s 137492590e-09 1s 1s 137494710e-09 0s 0s 137497230e-09 0s 0s 137502830e-09 1s 1s 137504950e-09 0s 0s 137507510e-09 0s 0s 137513070e-09 1s 1s 137515190e-09 0s 0s 137517790e-09 0s 0s 137523310e-09 1s 1s 137525430e-09 0s 0s 137528070e-09 0s 0s 137533550e-09 1s 1s 137535670e-09 0s 0s 137538350e-09 0s 0s 137543790e-09 1s 1s 137545910e-09 0s 0s 137548630e-09 0s 0s 137554030e-09 1s 1s 137556150e-09 0s 0s 137558910e-09 0s 0s 137564270e-09 1s 1s 137566390e-09 0s 0s 137569190e-09 0s 0s 137574510e-09 1s 1s 137576630e-09 0s 0s 137579470e-09 0s 0s 137584750e-09 1s 1s 137586870e-09 0s 0s 137589750e-09 0s 0s 137594990e-09 1s 1s 137597110e-09 0s 0s 137600030e-09 0s 0s 137605230e-09 1s 1s 137607350e-09 0s 0s 137610310e-09 0s 0s 137615470e-09 1s 1s 137617590e-09 0s 0s 137620590e-09 0s 0s 137625710e-09 1s 1s 137627830e-09 0s 0s 137630870e-09 0s 0s 137635950e-09 1s 1s 137638070e-09 0s 0s 137641150e-09 0s 0s 137646190e-09 1s 1s 137648310e-09 0s 0s 137651430e-09 0s 0s 137656430e-09 1s 1s 137658550e-09 0s 0s 137661710e-09 0s 0s 137666670e-09 1s 1s 137668790e-09 0s 0s 137671990e-09 0s 0s 137676910e-09 1s 1s 137679030e-09 0s 0s 137682270e-09 0s 0s 137687150e-09 1s 1s 137689270e-09 0s 0s 137692550e-09 0s 0s 137697390e-09 1s 1s 137699510e-09 0s 0s 137702830e-09 0s 0s 137707630e-09 1s 1s 137709750e-09 0s 0s 137713110e-09 0s 0s 137717870e-09 1s 1s 137719990e-09 0s 0s 137723390e-09 0s 0s 137728110e-09 1s 1s 137730230e-09 0s 0s 137733670e-09 0s 0s 137738350e-09 1s 1s 137740470e-09 0s 0s 137743950e-09 0s 0s 137748590e-09 1s 1s 137750710e-09 0s 0s 137754230e-09 0s 0s 137758830e-09 1s 1s 137760950e-09 0s 0s 137764510e-09 0s 0s 137769070e-09 1s 1s 137771190e-09 0s 0s 137774790e-09 0s 0s 137779310e-09 1s 1s 137781430e-09 0s 0s 137785070e-09 0s 0s 137789550e-09 1s 1s 137791670e-09 0s 0s 137795350e-09 0s 0s 137799790e-09 1s 1s 137801910e-09 0s 0s 137805630e-09 0s 0s 137810030e-09 1s 1s 137812150e-09 0s 0s 137815910e-09 0s 0s 137820270e-09 1s 1s 137822390e-09 0s 0s 137826190e-09 0s 0s 137830510e-09 1s 1s 137832630e-09 0s 0s 137836470e-09 0s 0s 137840750e-09 1s 1s 137842870e-09 0s 0s 137846750e-09 0s 0s 137850990e-09 1s 1s 137853110e-09 0s 0s 137857030e-09 0s 0s 137861230e-09 1s 1s 137863350e-09 0s 0s 137867310e-09 0s 0s 137871470e-09 1s 1s 137873590e-09 0s 0s 137877590e-09 0s 0s 137881710e-09 1s 1s 137883830e-09 0s 0s 137887870e-09 0s 0s 137891950e-09 1s 1s 137894070e-09 0s 0s 137898150e-09 0s 0s 137902190e-09 1s 1s 137904310e-09 0s 0s 137908430e-09 0s 0s 137912430e-09 1s 1s 137914550e-09 0s 0s 137918710e-09 0s 0s 137922670e-09 1s 1s 137924790e-09 0s 0s 137928990e-09 0s 0s 137932910e-09 1s 1s 137935030e-09 0s 0s 137939270e-09 0s 0s 137943150e-09 1s 1s 137945270e-09 0s 0s 137949550e-09 0s 0s 137953390e-09 1s 1s 137955510e-09 0s 0s 137959830e-09 0s 0s 137963630e-09 1s 1s 137965750e-09 0s 0s 137970110e-09 0s 0s 137973870e-09 1s 1s 137975990e-09 0s 0s 137980390e-09 0s 0s 137984110e-09 1s 1s 137986230e-09 0s 0s 137990670e-09 0s 0s 137994350e-09 1s 1s 137996470e-09 0s 0s 138000950e-09 0s 0s 138004590e-09 1s 1s 138006710e-09 0s 0s 138011230e-09 0s 0s 138014830e-09 1s 1s 138016950e-09 0s 0s 138021510e-09 0s 0s 138025070e-09 1s 1s 138027190e-09 0s 0s 138031790e-09 0s 0s 138035310e-09 1s 1s 138037430e-09 0s 0s 138042070e-09 0s 0s 138045550e-09 1s 1s 138047670e-09 0s 0s 138052350e-09 0s 0s 138055790e-09 1s 1s 138057910e-09 0s 0s 138062630e-09 0s 0s 138066030e-09 1s 1s 138068150e-09 0s 0s 138072910e-09 0s 0s 138076270e-09 1s 1s 138078390e-09 0s 0s 138083190e-09 0s 0s 138086510e-09 1s 1s 138088630e-09 0s 0s 138093470e-09 0s 0s 138096750e-09 1s 1s 138098870e-09 0s 0s 138103750e-09 0s 0s 138106990e-09 1s 1s 138109110e-09 0s 0s 138114030e-09 0s 0s 138117230e-09 1s 1s 138119350e-09 0s 0s 138124310e-09 0s 0s 138127470e-09 1s 1s 138129590e-09 0s 0s 138134590e-09 0s 0s 138137710e-09 1s 1s 138139830e-09 0s 0s 138144870e-09 0s 0s 138147950e-09 1s 1s 138150070e-09 0s 0s 138155150e-09 0s 0s 138158190e-09 1s 1s 138160310e-09 0s 0s 138165430e-09 0s 0s 138168430e-09 1s 1s 138170550e-09 0s 0s 138175710e-09 0s 0s 138178670e-09 1s 1s 138180790e-09 0s 0s 138185990e-09 0s 0s 138188910e-09 1s 1s 138191030e-09 0s 0s 138196270e-09 0s 0s 138199150e-09 1s 1s 138201270e-09 0s 0s 138206550e-09 0s 0s 138209390e-09 1s 1s 138211510e-09 0s 0s 138216830e-09 0s 0s 138219630e-09 1s 1s 138221750e-09 0s 0s 138227110e-09 0s 0s 138229870e-09 1s 1s 138231990e-09 0s 0s 138237390e-09 0s 0s 138240110e-09 1s 1s 138242230e-09 0s 0s 138247670e-09 0s 0s 138250350e-09 1s 1s 138252470e-09 0s 0s 138257950e-09 0s 0s 138260590e-09 1s 1s 138262710e-09 0s 0s 138268230e-09 0s 0s 138270830e-09 1s 1s 138272950e-09 0s 0s 138278510e-09 0s 0s 138281070e-09 1s 1s 138283190e-09 0s 0s 138288790e-09 0s 0s 138291310e-09 1s 1s 138293430e-09 0s 0s 138299070e-09 0s 0s 138301550e-09 1s 1s 138303670e-09 0s 0s 138309350e-09 0s 0s 138311790e-09 1s 1s 138313910e-09 0s 0s 138319630e-09 0s 0s 138322030e-09 1s 1s 138324150e-09 0s 0s 138329910e-09 0s 0s 138332270e-09 1s 1s 138334390e-09 0s 0s 138340190e-09 0s 0s 138342510e-09 1s 1s 138344630e-09 0s 0s 138350470e-09 0s 0s 138352750e-09 1s 1s 138354870e-09 0s 0s 138360750e-09 0s 0s 138362990e-09 1s 1s 138365110e-09 0s 0s 138371030e-09 0s 0s 138373230e-09 1s 1s 138375350e-09 0s 0s 138381310e-09 0s 0s 138383470e-09 1s 1s 138385590e-09 0s 0s 138391590e-09 0s 0s 138393710e-09 1s 1s 138395830e-09 0s 0s 138401870e-09 0s 0s 138403950e-09 1s 1s 138406070e-09 0s 0s 138412150e-09 0s 0s 138414190e-09 1s 1s 138416310e-09 0s 0s 138422430e-09 0s 0s 138424430e-09 1s 1s 138426550e-09 0s 0s 138432710e-09 0s 0s 138434670e-09 1s 1s 138436790e-09 0s 0s 138442990e-09 0s 0s 138444910e-09 1s 1s 138447030e-09 0s 0s 138453270e-09 0s 0s 138455150e-09 1s 1s 138457270e-09 0s 0s 138463550e-09 0s 0s 138465390e-09 1s 1s 138467510e-09 0s 0s 138473830e-09 0s 0s 138475630e-09 1s 1s 138477750e-09 0s 0s 138484110e-09 0s 0s 138485870e-09 1s 1s 138487990e-09 0s 0s 138494390e-09 0s 0s 138496110e-09 1s 1s 138498230e-09 0s 0s 138504670e-09 0s 0s 138506350e-09 1s 1s 138508470e-09 0s 0s 138514950e-09 0s 0s 138516590e-09 1s 1s 138518710e-09 0s 0s 138525230e-09 0s 0s 138526830e-09 1s 1s 138528950e-09 0s 0s 138535510e-09 0s 0s 138537070e-09 1s 1s 138539190e-09 0s 0s 138545790e-09 0s 0s 138547310e-09 1s 1s 138549430e-09 0s 0s 138556070e-09 0s 0s 138557550e-09 1s 1s 138559670e-09 0s 0s 138566350e-09 0s 0s 138567790e-09 1s 1s 138569910e-09 0s 0s 138576630e-09 0s 0s 138578030e-09 1s 1s 138580150e-09 0s 0s 138586910e-09 0s 0s 138588270e-09 1s 1s 138590390e-09 0s 0s 138597190e-09 0s 0s 138598510e-09 1s 1s 138600630e-09 0s 0s 138607470e-09 0s 0s 138608750e-09 1s 1s 138610870e-09 0s 0s 138617750e-09 0s 0s 138618990e-09 1s 1s 138621110e-09 0s 0s 138628030e-09 0s 0s 138629230e-09 1s 1s 138631350e-09 0s 0s 138638310e-09 0s 0s 138639470e-09 1s 1s 138641590e-09 0s 0s 138648590e-09 0s 0s 138649710e-09 1s 1s 138651830e-09 0s 0s 138658870e-09 0s 0s 138659950e-09 1s 1s 138662070e-09 0s 0s 138669150e-09 0s 0s 138670190e-09 1s 1s 138672310e-09 0s 0s 138679430e-09 0s 0s 138680430e-09 1s 1s 138682550e-09 0s 0s 138689710e-09 0s 0s 138690670e-09 1s 1s 138692790e-09 0s 0s 138699990e-09 0s 0s 138700910e-09 1s 1s 138703030e-09 0s 0s 138710270e-09 0s 0s 138711150e-09 1s 1s 138713270e-09 0s 0s 138720550e-09 0s 0s 138721390e-09 1s 1s 138723510e-09 0s 0s 138730830e-09 0s 0s 138731630e-09 1s 1s 138733750e-09 0s 0s 138741110e-09 0s 0s 138741870e-09 1s 1s 138743990e-09 0s 0s 138751390e-09 0s 0s 138752110e-09 1s 1s 138754230e-09 0s 0s 138761670e-09 0s 0s 138762350e-09 1s 1s 138764470e-09 0s 0s 138771950e-09 0s 0s 138772590e-09 1s 1s 138774710e-09 0s 0s 138782230e-09 0s 0s 138782830e-09 1s 1s 138784950e-09 0s 0s 138792510e-09 0s 0s 138793070e-09 1s 1s 138795190e-09 0s 0s 138802790e-09 0s 0s 138803310e-09 1s 1s 138805430e-09 0s 0s 138813070e-09 0s 0s 138813550e-09 1s 1s 138815670e-09 0s 0s 138823350e-09 0s 0s 138823790e-09 1s 1s 138825910e-09 0s 0s 138833630e-09 0s 0s 138834030e-09 1s 1s 138836150e-09 0s 0s 138843910e-09 0s 0s 138844270e-09 1s 1s 138846390e-09 0s 0s 138854190e-09 0s 0s 138854510e-09 1s 1s 138856630e-09 0s 0s 138864470e-09 0s 0s 138864750e-09 1s 1s 138866870e-09 0s 0s 138874750e-09 0s 0s 138874990e-09 1s 1s 138877110e-09 0s 0s 138885030e-09 0s 0s 138885230e-09 1s 1s 138887350e-09 0s 0s 138895310e-09 0s 0s 138895470e-09 1s 1s 138897590e-09 0s 0s 138905590e-09 0s 0s 138905710e-09 1s 1s 138907830e-09 0s 0s 138915870e-09 0s 0s 138915950e-09 1s 1s 138918070e-09 0s 0s 138926150e-09 0s 0s 138926190e-09 1s 1s 138928310e-09 0s 0s 138936430e-09 1s 1s 138936470e-09 1s 1s 138938590e-09 0s 0s 138946670e-09 1s 1s 138946750e-09 1s 1s 138948830e-09 0s 0s 138956910e-09 1s 1s 138957030e-09 1s 1s 138959070e-09 0s 0s 138967150e-09 1s 1s 138967310e-09 1s 1s 138969310e-09 0s 0s 138977390e-09 1s 1s 138977590e-09 1s 1s 138979550e-09 0s 0s 138987630e-09 1s 1s 138987870e-09 1s 1s 138989790e-09 0s 0s 138997870e-09 1s 1s 138998150e-09 1s 1s 139000030e-09 0s 0s 139008110e-09 1s 1s 139008430e-09 1s 1s 139010270e-09 0s 0s 139018350e-09 1s 1s 139018710e-09 1s 1s 139020510e-09 0s 0s 139028590e-09 1s 1s 139028990e-09 1s 1s 139030750e-09 0s 0s 139038830e-09 1s 1s 139039270e-09 1s 1s 139040990e-09 0s 0s 139049070e-09 1s 1s 139049550e-09 1s 1s 139051230e-09 0s 0s 139059310e-09 1s 1s 139059830e-09 1s 1s 139061470e-09 0s 0s 139069550e-09 1s 1s 139070110e-09 1s 1s 139071710e-09 0s 0s 139079790e-09 1s 1s 139080390e-09 1s 1s 139081950e-09 0s 0s 139090030e-09 1s 1s 139090670e-09 1s 1s 139092190e-09 0s 0s 139100270e-09 1s 1s 139100950e-09 1s 1s 139102430e-09 0s 0s 139110510e-09 1s 1s 139111230e-09 1s 1s 139112670e-09 0s 0s 139120750e-09 1s 1s 139121510e-09 1s 1s 139122910e-09 0s 0s 139130990e-09 1s 1s 139131790e-09 1s 1s 139133150e-09 0s 0s 139141230e-09 1s 1s 139142070e-09 1s 1s 139143390e-09 0s 0s 139151470e-09 1s 1s 139152350e-09 1s 1s 139153630e-09 0s 0s 139161710e-09 1s 1s 139162630e-09 1s 1s 139163870e-09 0s 0s 139171950e-09 1s 1s 139172910e-09 1s 1s 139174110e-09 0s 0s 139182190e-09 1s 1s 139183190e-09 1s 1s 139184350e-09 0s 0s 139192430e-09 1s 1s 139193470e-09 1s 1s 139194590e-09 0s 0s 139202670e-09 1s 1s 139203750e-09 1s 1s 139204830e-09 0s 0s 139212910e-09 1s 1s 139214030e-09 1s 1s 139215070e-09 0s 0s 139223150e-09 1s 1s 139224310e-09 1s 1s 139225310e-09 0s 0s 139233390e-09 1s 1s 139234590e-09 1s 1s 139235550e-09 0s 0s 139243630e-09 1s 1s 139244870e-09 1s 1s 139245790e-09 0s 0s 139253870e-09 1s 1s 139255150e-09 1s 1s 139256030e-09 0s 0s 139264110e-09 1s 1s 139265430e-09 1s 1s 139266270e-09 0s 0s 139274350e-09 1s 1s 139275710e-09 1s 1s 139276510e-09 0s 0s 139284590e-09 1s 1s 139285990e-09 1s 1s 139286750e-09 0s 0s 139294830e-09 1s 1s 139296270e-09 1s 1s 139296990e-09 0s 0s 139305070e-09 1s 1s 139306550e-09 1s 1s 139307230e-09 0s 0s 139315310e-09 1s 1s 139316830e-09 1s 1s 139317470e-09 0s 0s 139325550e-09 1s 1s 139327110e-09 1s 1s 139327710e-09 0s 0s 139335790e-09 1s 1s 139337390e-09 1s 1s 139337950e-09 0s 0s 139346030e-09 1s 1s 139347670e-09 1s 1s 139348190e-09 0s 0s 139356270e-09 1s 1s 139357950e-09 1s 1s 139358430e-09 0s 0s 139366510e-09 1s 1s 139368230e-09 1s 1s 139368670e-09 0s 0s 139376750e-09 1s 1s 139378510e-09 1s 1s 139378910e-09 0s 0s 139386990e-09 1s 1s 139388790e-09 1s 1s 139389150e-09 0s 0s 139397230e-09 1s 1s 139399070e-09 1s 1s 139399390e-09 0s 0s 139407470e-09 1s 1s 139409350e-09 1s 1s 139409630e-09 0s 0s 139417710e-09 1s 1s 139419630e-09 1s 1s 139419870e-09 0s 0s 139427950e-09 1s 1s 139429910e-09 1s 1s 139430110e-09 0s 0s 139438190e-09 1s 1s 139440190e-09 1s 1s 139440350e-09 0s 0s 139448430e-09 1s 1s 139450470e-09 1s 1s 139450590e-09 0s 0s 139458670e-09 1s 1s 139460750e-09 1s 1s 139460830e-09 0s 0s 139468910e-09 1s 1s 139471030e-09 1s 1s 139471070e-09 0s 0s 139479150e-09 1s 1s 139481310e-09 0s 0s 139489390e-09 1s 1s 139491550e-09 0s 0s 139491590e-09 0s 0s 139499630e-09 1s 1s 139501790e-09 0s 0s 139501870e-09 0s 0s 139509870e-09 1s 1s 139512030e-09 0s 0s 139512150e-09 0s 0s 139520110e-09 1s 1s 139522270e-09 0s 0s 139522430e-09 0s 0s 139530350e-09 1s 1s 139532510e-09 0s 0s 139532710e-09 0s 0s 139540590e-09 1s 1s 139542750e-09 0s 0s 139542990e-09 0s 0s 139550830e-09 1s 1s 139552990e-09 0s 0s 139553270e-09 0s 0s 139561070e-09 1s 1s 139563230e-09 0s 0s 139563550e-09 0s 0s 139571310e-09 1s 1s 139573470e-09 0s 0s 139573830e-09 0s 0s 139581550e-09 1s 1s 139583710e-09 0s 0s 139584110e-09 0s 0s 139591790e-09 1s 1s 139593950e-09 0s 0s 139594390e-09 0s 0s 139602030e-09 1s 1s 139604190e-09 0s 0s 139604670e-09 0s 0s 139612270e-09 1s 1s 139614430e-09 0s 0s 139614950e-09 0s 0s 139622510e-09 1s 1s 139624670e-09 0s 0s 139625230e-09 0s 0s 139632750e-09 1s 1s 139634910e-09 0s 0s 139635510e-09 0s 0s 139642990e-09 1s 1s 139645150e-09 0s 0s 139645790e-09 0s 0s 139653230e-09 1s 1s 139655390e-09 0s 0s 139656070e-09 0s 0s 139663470e-09 1s 1s 139665630e-09 0s 0s 139666350e-09 0s 0s 139673710e-09 1s 1s 139675870e-09 0s 0s 139676630e-09 0s 0s 139683950e-09 1s 1s 139686110e-09 0s 0s 139686910e-09 0s 0s 139694190e-09 1s 1s 139696350e-09 0s 0s 139697190e-09 0s 0s 139704430e-09 1s 1s 139706590e-09 0s 0s 139707470e-09 0s 0s 139714670e-09 1s 1s 139716830e-09 0s 0s 139717750e-09 0s 0s 139724910e-09 1s 1s 139727070e-09 0s 0s 139728030e-09 0s 0s 139735150e-09 1s 1s 139737310e-09 0s 0s 139738310e-09 0s 0s 139745390e-09 1s 1s 139747550e-09 0s 0s 139748590e-09 0s 0s 139755630e-09 1s 1s 139757790e-09 0s 0s 139758870e-09 0s 0s 139765870e-09 1s 1s 139768030e-09 0s 0s 139769150e-09 0s 0s 139776110e-09 1s 1s 139778270e-09 0s 0s 139779430e-09 0s 0s 139786350e-09 1s 1s 139788510e-09 0s 0s 139789710e-09 0s 0s 139796590e-09 1s 1s 139798750e-09 0s 0s 139799990e-09 0s 0s 139806830e-09 1s 1s 139808990e-09 0s 0s 139810270e-09 0s 0s 139817070e-09 1s 1s 139819230e-09 0s 0s 139820550e-09 0s 0s 139827310e-09 1s 1s 139829470e-09 0s 0s 139830830e-09 0s 0s 139837550e-09 1s 1s 139839710e-09 0s 0s 139841110e-09 0s 0s 139847790e-09 1s 1s 139849950e-09 0s 0s 139851390e-09 0s 0s 139858030e-09 1s 1s 139860190e-09 0s 0s 139861670e-09 0s 0s 139868270e-09 1s 1s 139870430e-09 0s 0s 139871950e-09 0s 0s 139878510e-09 1s 1s 139880670e-09 0s 0s 139882230e-09 0s 0s 139888750e-09 1s 1s 139890910e-09 0s 0s 139892510e-09 0s 0s 139898990e-09 1s 1s 139901150e-09 0s 0s 139902790e-09 0s 0s 139909230e-09 1s 1s 139911390e-09 0s 0s 139913070e-09 0s 0s 139919470e-09 1s 1s 139921630e-09 0s 0s 139923350e-09 0s 0s 139929710e-09 1s 1s 139931870e-09 0s 0s 139933630e-09 0s 0s 139939950e-09 1s 1s 139942110e-09 0s 0s 139943910e-09 0s 0s 139950190e-09 1s 1s 139952350e-09 0s 0s 139954190e-09 0s 0s 139960430e-09 1s 1s 139962590e-09 0s 0s 139964470e-09 0s 0s 139970670e-09 1s 1s 139972830e-09 0s 0s 139974750e-09 0s 0s 139980910e-09 1s 1s 139983070e-09 0s 0s 139985030e-09 0s 0s 139991150e-09 1s 1s 139993310e-09 0s 0s 139995310e-09 0s 0s 140001390e-09 1s 1s 140003550e-09 0s 0s 140005590e-09 0s 0s 140011630e-09 1s 1s 140013790e-09 0s 0s 140015870e-09 0s 0s 140021870e-09 1s 1s 140024030e-09 0s 0s 140026150e-09 0s 0s 140032110e-09 1s 1s 140034270e-09 0s 0s 140036430e-09 0s 0s 140042350e-09 1s 1s 140044510e-09 0s 0s 140046710e-09 0s 0s 140052590e-09 1s 1s 140054750e-09 0s 0s 140056990e-09 0s 0s 140062830e-09 1s 1s 140064990e-09 0s 0s 140067270e-09 0s 0s 140073070e-09 1s 1s 140075230e-09 0s 0s 140077550e-09 0s 0s 140083310e-09 1s 1s 140085470e-09 0s 0s 140087830e-09 0s 0s 140093550e-09 1s 1s 140095710e-09 0s 0s 140098110e-09 0s 0s 140103790e-09 1s 1s 140105950e-09 0s 0s 140108390e-09 0s 0s 140114030e-09 1s 1s 140116190e-09 0s 0s 140118670e-09 0s 0s 140124270e-09 1s 1s 140126430e-09 0s 0s 140128950e-09 0s 0s 140134510e-09 1s 1s 140136670e-09 0s 0s 140139230e-09 0s 0s 140144750e-09 1s 1s 140146910e-09 0s 0s 140149510e-09 0s 0s 140154990e-09 1s 1s 140157150e-09 0s 0s 140159790e-09 0s 0s 140165230e-09 1s 1s 140167390e-09 0s 0s 140170070e-09 0s 0s 140175470e-09 1s 1s 140177630e-09 0s 0s 140180350e-09 0s 0s 140185710e-09 1s 1s 140187870e-09 0s 0s 140190630e-09 0s 0s 140195950e-09 1s 1s 140198110e-09 0s 0s 140200910e-09 0s 0s 140206190e-09 1s 1s 140208350e-09 0s 0s 140211190e-09 0s 0s 140216430e-09 1s 1s 140218590e-09 0s 0s 140221470e-09 0s 0s 140226670e-09 1s 1s 140228830e-09 0s 0s 140231750e-09 0s 0s 140236910e-09 1s 1s 140239070e-09 0s 0s 140242030e-09 0s 0s 140247150e-09 1s 1s 140249310e-09 0s 0s 140252310e-09 0s 0s 140257390e-09 1s 1s 140259550e-09 0s 0s 140262590e-09 0s 0s 140267630e-09 1s 1s 140269790e-09 0s 0s 140272870e-09 0s 0s 140277870e-09 1s 1s 140280030e-09 0s 0s 140283150e-09 0s 0s 140288110e-09 1s 1s 140290270e-09 0s 0s 140293430e-09 0s 0s 140298350e-09 1s 1s 140300510e-09 0s 0s 140303710e-09 0s 0s 140308590e-09 1s 1s 140310750e-09 0s 0s 140313990e-09 0s 0s 140318830e-09 1s 1s 140320990e-09 0s 0s 140324270e-09 0s 0s 140329070e-09 1s 1s 140331230e-09 0s 0s 140334550e-09 0s 0s 140339310e-09 1s 1s 140341470e-09 0s 0s 140344830e-09 0s 0s 140349550e-09 1s 1s 140351710e-09 0s 0s 140355110e-09 0s 0s 140359790e-09 1s 1s 140361950e-09 0s 0s 140365390e-09 0s 0s 140370030e-09 1s 1s 140372190e-09 0s 0s 140375670e-09 0s 0s 140380270e-09 1s 1s 140382430e-09 0s 0s 140385950e-09 0s 0s 140390510e-09 1s 1s 140392670e-09 0s 0s 140396230e-09 0s 0s 140400750e-09 1s 1s 140402910e-09 0s 0s 140406510e-09 0s 0s 140410990e-09 1s 1s 140413150e-09 0s 0s 140416790e-09 0s 0s 140421230e-09 1s 1s 140423390e-09 0s 0s 140427070e-09 0s 0s 140431470e-09 1s 1s 140433630e-09 0s 0s 140437350e-09 0s 0s 140441710e-09 1s 1s 140443870e-09 0s 0s 140447630e-09 0s 0s 140451950e-09 1s 1s 140454110e-09 0s 0s 140457910e-09 0s 0s 140462190e-09 1s 1s 140464350e-09 0s 0s 140468190e-09 0s 0s 140472430e-09 1s 1s 140474590e-09 0s 0s 140478470e-09 0s 0s 140482670e-09 1s 1s 140484830e-09 0s 0s 140488750e-09 0s 0s 140492910e-09 1s 1s 140495070e-09 0s 0s 140499030e-09 0s 0s 140503150e-09 1s 1s 140505310e-09 0s 0s 140509310e-09 0s 0s 140513390e-09 1s 1s 140515550e-09 0s 0s 140519590e-09 0s 0s 140523630e-09 1s 1s 140525790e-09 0s 0s 140529870e-09 0s 0s 140533870e-09 1s 1s 140536030e-09 0s 0s 140540150e-09 0s 0s 140544110e-09 1s 1s 140546270e-09 0s 0s 140550430e-09 0s 0s 140554350e-09 1s 1s 140556510e-09 0s 0s 140560710e-09 0s 0s 140564590e-09 1s 1s 140566750e-09 0s 0s 140570990e-09 0s 0s 140574830e-09 1s 1s 140576990e-09 0s 0s 140581270e-09 0s 0s 140585070e-09 1s 1s 140587230e-09 0s 0s 140591550e-09 0s 0s 140595310e-09 1s 1s 140597470e-09 0s 0s 140601830e-09 0s 0s 140605550e-09 1s 1s 140607710e-09 0s 0s 140612110e-09 0s 0s 140615790e-09 1s 1s 140617950e-09 0s 0s 140622390e-09 0s 0s 140626030e-09 1s 1s 140628190e-09 0s 0s 140632670e-09 0s 0s 140636270e-09 1s 1s 140638430e-09 0s 0s 140642950e-09 0s 0s 140646510e-09 1s 1s 140648670e-09 0s 0s 140653230e-09 0s 0s 140656750e-09 1s 1s 140658910e-09 0s 0s 140663510e-09 0s 0s 140666990e-09 1s 1s 140669150e-09 0s 0s 140673790e-09 0s 0s 140677230e-09 1s 1s 140679390e-09 0s 0s 140684070e-09 0s 0s 140687470e-09 1s 1s 140689630e-09 0s 0s 140694350e-09 0s 0s 140697710e-09 1s 1s 140699870e-09 0s 0s 140704630e-09 0s 0s 140707950e-09 1s 1s 140710110e-09 0s 0s 140714910e-09 0s 0s 140718190e-09 1s 1s 140720350e-09 0s 0s 140725190e-09 0s 0s 140728430e-09 1s 1s 140730590e-09 0s 0s 140735470e-09 0s 0s 140738670e-09 1s 1s 140740830e-09 0s 0s 140745750e-09 0s 0s 140748910e-09 1s 1s 140751070e-09 0s 0s 140756030e-09 0s 0s 140759150e-09 1s 1s 140761310e-09 0s 0s 140766310e-09 0s 0s 140769390e-09 1s 1s 140771550e-09 0s 0s 140776590e-09 0s 0s 140779630e-09 1s 1s 140781790e-09 0s 0s 140786870e-09 0s 0s 140789870e-09 1s 1s 140792030e-09 0s 0s 140797150e-09 0s 0s 140800110e-09 1s 1s 140802270e-09 0s 0s 140807430e-09 0s 0s 140810350e-09 1s 1s 140812510e-09 0s 0s 140817710e-09 0s 0s 140820590e-09 1s 1s 140822750e-09 0s 0s 140827990e-09 0s 0s 140830830e-09 1s 1s 140832990e-09 0s 0s 140838270e-09 0s 0s 140841070e-09 1s 1s 140843230e-09 0s 0s 140848550e-09 0s 0s 140851310e-09 1s 1s 140853470e-09 0s 0s 140858830e-09 0s 0s 140861550e-09 1s 1s 140863710e-09 0s 0s 140869110e-09 0s 0s 140871790e-09 1s 1s 140873950e-09 0s 0s 140879390e-09 0s 0s 140882030e-09 1s 1s 140884190e-09 0s 0s 140889670e-09 0s 0s 140892270e-09 1s 1s 140894430e-09 0s 0s 140899950e-09 0s 0s 140902510e-09 1s 1s 140904670e-09 0s 0s 140910230e-09 0s 0s 140912750e-09 1s 1s 140914910e-09 0s 0s 140920510e-09 0s 0s 140922990e-09 1s 1s 140925150e-09 0s 0s 140930790e-09 0s 0s 140933230e-09 1s 1s 140935390e-09 0s 0s 140941070e-09 0s 0s 140943470e-09 1s 1s 140945630e-09 0s 0s 140951350e-09 0s 0s 140953710e-09 1s 1s 140955870e-09 0s 0s 140961630e-09 0s 0s 140963950e-09 1s 1s 140966110e-09 0s 0s 140971910e-09 0s 0s 140974190e-09 1s 1s 140976350e-09 0s 0s 140982190e-09 0s 0s 140984430e-09 1s 1s 140986590e-09 0s 0s 140992470e-09 0s 0s 140994670e-09 1s 1s 140996830e-09 0s 0s 141002750e-09 0s 0s 141004910e-09 1s 1s 141007070e-09 0s 0s 141013030e-09 0s 0s 141015150e-09 1s 1s 141017310e-09 0s 0s 141023310e-09 0s 0s 141025390e-09 1s 1s 141027550e-09 0s 0s 141033590e-09 0s 0s 141035630e-09 1s 1s 141037790e-09 0s 0s 141043870e-09 0s 0s 141045870e-09 1s 1s 141048030e-09 0s 0s 141054150e-09 0s 0s 141056110e-09 1s 1s 141058270e-09 0s 0s 141064430e-09 0s 0s 141066350e-09 1s 1s 141068510e-09 0s 0s 141074710e-09 0s 0s 141076590e-09 1s 1s 141078750e-09 0s 0s 141084990e-09 0s 0s 141086830e-09 1s 1s 141088990e-09 0s 0s 141095270e-09 0s 0s 141097070e-09 1s 1s 141099230e-09 0s 0s 141105550e-09 0s 0s 141107310e-09 1s 1s 141109470e-09 0s 0s 141115830e-09 0s 0s 141117550e-09 1s 1s 141119710e-09 0s 0s 141126110e-09 0s 0s 141127790e-09 1s 1s 141129950e-09 0s 0s 141136390e-09 0s 0s 141138030e-09 1s 1s 141140190e-09 0s 0s 141146670e-09 0s 0s 141148270e-09 1s 1s 141150430e-09 0s 0s 141156950e-09 0s 0s 141158510e-09 1s 1s 141160670e-09 0s 0s 141167230e-09 0s 0s 141168750e-09 1s 1s 141170910e-09 0s 0s 141177510e-09 0s 0s 141178990e-09 1s 1s 141181150e-09 0s 0s 141187790e-09 0s 0s 141189230e-09 1s 1s 141191390e-09 0s 0s 141198070e-09 0s 0s 141199470e-09 1s 1s 141201630e-09 0s 0s 141208350e-09 0s 0s 141209710e-09 1s 1s 141211870e-09 0s 0s 141218630e-09 0s 0s 141219950e-09 1s 1s 141222110e-09 0s 0s 141228910e-09 0s 0s 141230190e-09 1s 1s 141232350e-09 0s 0s 141239190e-09 0s 0s 141240430e-09 1s 1s 141242590e-09 0s 0s 141249470e-09 0s 0s 141250670e-09 1s 1s 141252830e-09 0s 0s 141259750e-09 0s 0s 141260910e-09 1s 1s 141263070e-09 0s 0s 141270030e-09 0s 0s 141271150e-09 1s 1s 141273310e-09 0s 0s 141280310e-09 0s 0s 141281390e-09 1s 1s 141283550e-09 0s 0s 141290590e-09 0s 0s 141291630e-09 1s 1s 141293790e-09 0s 0s 141300870e-09 0s 0s 141301870e-09 1s 1s 141304030e-09 0s 0s 141311150e-09 0s 0s 141312110e-09 1s 1s 141314270e-09 0s 0s 141321430e-09 0s 0s 141322350e-09 1s 1s 141324510e-09 0s 0s 141331710e-09 0s 0s 141332590e-09 1s 1s 141334750e-09 0s 0s 141341990e-09 0s 0s 141342830e-09 1s 1s 141344990e-09 0s 0s 141352270e-09 0s 0s 141353070e-09 1s 1s 141355230e-09 0s 0s 141362550e-09 0s 0s 141363310e-09 1s 1s 141365470e-09 0s 0s 141372830e-09 0s 0s 141373550e-09 1s 1s 141375710e-09 0s 0s 141383110e-09 0s 0s 141383790e-09 1s 1s 141385950e-09 0s 0s 141393390e-09 0s 0s 141394030e-09 1s 1s 141396190e-09 0s 0s 141403670e-09 0s 0s 141404270e-09 1s 1s 141406430e-09 0s 0s 141413950e-09 0s 0s 141414510e-09 1s 1s 141416670e-09 0s 0s 141424230e-09 0s 0s 141424750e-09 1s 1s 141426910e-09 0s 0s 141434510e-09 0s 0s 141434990e-09 1s 1s 141437150e-09 0s 0s 141444790e-09 0s 0s 141445230e-09 1s 1s 141447390e-09 0s 0s 141455070e-09 0s 0s 141455470e-09 1s 1s 141457630e-09 0s 0s 141465350e-09 0s 0s 141465710e-09 1s 1s 141467870e-09 0s 0s 141475630e-09 0s 0s 141475950e-09 1s 1s 141478110e-09 0s 0s 141485910e-09 0s 0s 141486190e-09 1s 1s 141488350e-09 0s 0s 141496190e-09 0s 0s 141496430e-09 1s 1s 141498590e-09 0s 0s 141506470e-09 0s 0s 141506670e-09 1s 1s 141508830e-09 0s 0s 141516750e-09 0s 0s 141516910e-09 1s 1s 141519070e-09 0s 0s 141527030e-09 0s 0s 141527150e-09 1s 1s 141529310e-09 0s 0s 141537310e-09 0s 0s 141537390e-09 1s 1s 141539550e-09 0s 0s 141547590e-09 0s 0s 141547630e-09 1s 1s 141549790e-09 0s 0s 141557870e-09 1s 1s 141557910e-09 1s 1s 141560070e-09 0s 0s 141568110e-09 1s 1s 141568190e-09 1s 1s 141570310e-09 0s 0s 141578350e-09 1s 1s 141578470e-09 1s 1s 141580550e-09 0s 0s 141588590e-09 1s 1s 141588750e-09 1s 1s 141590790e-09 0s 0s 141598830e-09 1s 1s 141599030e-09 1s 1s 141601030e-09 0s 0s 141609070e-09 1s 1s 141609310e-09 1s 1s 141611270e-09 0s 0s 141619310e-09 1s 1s 141619590e-09 1s 1s 141621510e-09 0s 0s 141629550e-09 1s 1s 141629870e-09 1s 1s 141631750e-09 0s 0s 141639790e-09 1s 1s 141640150e-09 1s 1s 141641990e-09 0s 0s 141650030e-09 1s 1s 141650430e-09 1s 1s 141652230e-09 0s 0s 141660270e-09 1s 1s 141660710e-09 1s 1s 141662470e-09 0s 0s 141670510e-09 1s 1s 141670990e-09 1s 1s 141672710e-09 0s 0s 141680750e-09 1s 1s 141681270e-09 1s 1s 141682950e-09 0s 0s 141690990e-09 1s 1s 141691550e-09 1s 1s 141693190e-09 0s 0s 141701230e-09 1s 1s 141701830e-09 1s 1s 141703430e-09 0s 0s 141711470e-09 1s 1s 141712110e-09 1s 1s 141713670e-09 0s 0s 141721710e-09 1s 1s 141722390e-09 1s 1s 141723910e-09 0s 0s 141731950e-09 1s 1s 141732670e-09 1s 1s 141734150e-09 0s 0s 141742190e-09 1s 1s 141742950e-09 1s 1s 141744390e-09 0s 0s 141752430e-09 1s 1s 141753230e-09 1s 1s 141754630e-09 0s 0s 141762670e-09 1s 1s 141763510e-09 1s 1s 141764870e-09 0s 0s 141772910e-09 1s 1s 141773790e-09 1s 1s 141775110e-09 0s 0s 141783150e-09 1s 1s 141784070e-09 1s 1s 141785350e-09 0s 0s 141793390e-09 1s 1s 141794350e-09 1s 1s 141795590e-09 0s 0s 141803630e-09 1s 1s 141804630e-09 1s 1s 141805830e-09 0s 0s 141813870e-09 1s 1s 141814910e-09 1s 1s 141816070e-09 0s 0s 141824110e-09 1s 1s 141825190e-09 1s 1s 141826310e-09 0s 0s 141834350e-09 1s 1s 141835470e-09 1s 1s 141836550e-09 0s 0s 141844590e-09 1s 1s 141845750e-09 1s 1s 141846790e-09 0s 0s 141854830e-09 1s 1s 141856030e-09 1s 1s 141857030e-09 0s 0s 141865070e-09 1s 1s 141866310e-09 1s 1s 141867270e-09 0s 0s 141875310e-09 1s 1s 141876590e-09 1s 1s 141877510e-09 0s 0s 141885550e-09 1s 1s 141886870e-09 1s 1s 141887750e-09 0s 0s 141895790e-09 1s 1s 141897150e-09 1s 1s 141897990e-09 0s 0s 141906030e-09 1s 1s 141907430e-09 1s 1s 141908230e-09 0s 0s 141916270e-09 1s 1s 141917710e-09 1s 1s 141918470e-09 0s 0s 141926510e-09 1s 1s 141927990e-09 1s 1s 141928710e-09 0s 0s 141936750e-09 1s 1s 141938270e-09 1s 1s 141938950e-09 0s 0s 141946990e-09 1s 1s 141948550e-09 1s 1s 141949190e-09 0s 0s 141957230e-09 1s 1s 141958830e-09 1s 1s 141959430e-09 0s 0s 141967470e-09 1s 1s 141969110e-09 1s 1s 141969670e-09 0s 0s 141977710e-09 1s 1s 141979390e-09 1s 1s 141979910e-09 0s 0s 141987950e-09 1s 1s 141989670e-09 1s 1s 141990150e-09 0s 0s 141998190e-09 1s 1s 141999950e-09 1s 1s 142000390e-09 0s 0s 142008430e-09 1s 1s 142010230e-09 1s 1s 142010630e-09 0s 0s 142018670e-09 1s 1s 142020510e-09 1s 1s 142020870e-09 0s 0s 142028910e-09 1s 1s 142030790e-09 1s 1s 142031110e-09 0s 0s 142039150e-09 1s 1s 142041070e-09 1s 1s 142041350e-09 0s 0s 142049390e-09 1s 1s 142051350e-09 1s 1s 142051590e-09 0s 0s 142059630e-09 1s 1s 142061630e-09 1s 1s 142061830e-09 0s 0s 142069870e-09 1s 1s 142071910e-09 1s 1s 142072070e-09 0s 0s 142080110e-09 1s 1s 142082190e-09 1s 1s 142082310e-09 0s 0s 142090350e-09 1s 1s 142092470e-09 1s 1s 142092550e-09 0s 0s 142100590e-09 1s 1s 142102750e-09 1s 1s 142102790e-09 0s 0s 142110830e-09 1s 1s 142113030e-09 0s 0s 142121070e-09 1s 1s 142123270e-09 0s 0s 142123310e-09 0s 0s 142131310e-09 1s 1s 142133510e-09 0s 0s 142133590e-09 0s 0s 142141550e-09 1s 1s 142143750e-09 0s 0s 142143870e-09 0s 0s 142151790e-09 1s 1s 142153990e-09 0s 0s 142154150e-09 0s 0s 142162030e-09 1s 1s 142164230e-09 0s 0s 142164430e-09 0s 0s 142172270e-09 1s 1s 142174470e-09 0s 0s 142174710e-09 0s 0s 142182510e-09 1s 1s 142184710e-09 0s 0s 142184990e-09 0s 0s 142192750e-09 1s 1s 142194950e-09 0s 0s 142195270e-09 0s 0s 142202990e-09 1s 1s 142205190e-09 0s 0s 142205550e-09 0s 0s 142213230e-09 1s 1s 142215430e-09 0s 0s 142215830e-09 0s 0s 142223470e-09 1s 1s 142225670e-09 0s 0s 142226110e-09 0s 0s 142233710e-09 1s 1s 142235910e-09 0s 0s 142236390e-09 0s 0s 142243950e-09 1s 1s 142246150e-09 0s 0s 142246670e-09 0s 0s 142254190e-09 1s 1s 142256390e-09 0s 0s 142256950e-09 0s 0s 142264430e-09 1s 1s 142266630e-09 0s 0s 142267230e-09 0s 0s 142274670e-09 1s 1s 142276870e-09 0s 0s 142277510e-09 0s 0s 142284910e-09 1s 1s 142287110e-09 0s 0s 142287790e-09 0s 0s 142295150e-09 1s 1s 142297350e-09 0s 0s 142298070e-09 0s 0s 142305390e-09 1s 1s 142307590e-09 0s 0s 142308350e-09 0s 0s 142315630e-09 1s 1s 142317830e-09 0s 0s 142318630e-09 0s 0s 142325870e-09 1s 1s 142328070e-09 0s 0s 142328910e-09 0s 0s 142336110e-09 1s 1s 142338310e-09 0s 0s 142339190e-09 0s 0s 142346350e-09 1s 1s 142348550e-09 0s 0s 142349470e-09 0s 0s 142356590e-09 1s 1s 142358790e-09 0s 0s 142359750e-09 0s 0s 142366830e-09 1s 1s 142369030e-09 0s 0s 142370030e-09 0s 0s 142377070e-09 1s 1s 142379270e-09 0s 0s 142380310e-09 0s 0s 142387310e-09 1s 1s 142389510e-09 0s 0s 142390590e-09 0s 0s 142397550e-09 1s 1s 142399750e-09 0s 0s 142400870e-09 0s 0s 142407790e-09 1s 1s 142409990e-09 0s 0s 142411150e-09 0s 0s 142418030e-09 1s 1s 142420230e-09 0s 0s 142421430e-09 0s 0s 142428270e-09 1s 1s 142430470e-09 0s 0s 142431710e-09 0s 0s 142438510e-09 1s 1s 142440710e-09 0s 0s 142441990e-09 0s 0s 142448750e-09 1s 1s 142450950e-09 0s 0s 142452270e-09 0s 0s 142458990e-09 1s 1s 142461190e-09 0s 0s 142462550e-09 0s 0s 142469230e-09 1s 1s 142471430e-09 0s 0s 142472830e-09 0s 0s 142479470e-09 1s 1s 142481670e-09 0s 0s 142483110e-09 0s 0s 142489710e-09 1s 1s 142491910e-09 0s 0s 142493390e-09 0s 0s 142499950e-09 1s 1s 142502150e-09 0s 0s 142503670e-09 0s 0s 142510190e-09 1s 1s 142512390e-09 0s 0s 142513950e-09 0s 0s 142520430e-09 1s 1s 142522630e-09 0s 0s 142524230e-09 0s 0s 142530670e-09 1s 1s 142532870e-09 0s 0s 142534510e-09 0s 0s 142540910e-09 1s 1s 142543110e-09 0s 0s 142544790e-09 0s 0s 142551150e-09 1s 1s 142553350e-09 0s 0s 142555070e-09 0s 0s 142561390e-09 1s 1s 142563590e-09 0s 0s 142565350e-09 0s 0s 142571630e-09 1s 1s 142573830e-09 0s 0s 142575630e-09 0s 0s 142581870e-09 1s 1s 142584070e-09 0s 0s 142585910e-09 0s 0s 142592110e-09 1s 1s 142594310e-09 0s 0s 142596190e-09 0s 0s 142602350e-09 1s 1s 142604550e-09 0s 0s 142606470e-09 0s 0s 142612590e-09 1s 1s 142614790e-09 0s 0s 142616750e-09 0s 0s 142622830e-09 1s 1s 142625030e-09 0s 0s 142627030e-09 0s 0s 142633070e-09 1s 1s 142635270e-09 0s 0s 142637310e-09 0s 0s 142643310e-09 1s 1s 142645510e-09 0s 0s 142647590e-09 0s 0s 142653550e-09 1s 1s 142655750e-09 0s 0s 142657870e-09 0s 0s 142663790e-09 1s 1s 142665990e-09 0s 0s 142668150e-09 0s 0s 142674030e-09 1s 1s 142676230e-09 0s 0s 142678430e-09 0s 0s 142684270e-09 1s 1s 142686470e-09 0s 0s 142688710e-09 0s 0s 142694510e-09 1s 1s 142696710e-09 0s 0s 142698990e-09 0s 0s 142704750e-09 1s 1s 142706950e-09 0s 0s 142709270e-09 0s 0s 142714990e-09 1s 1s 142717190e-09 0s 0s 142719550e-09 0s 0s 142725230e-09 1s 1s 142727430e-09 0s 0s 142729830e-09 0s 0s 142735470e-09 1s 1s 142737670e-09 0s 0s 142740110e-09 0s 0s 142745710e-09 1s 1s 142747910e-09 0s 0s 142750390e-09 0s 0s 142755950e-09 1s 1s 142758150e-09 0s 0s 142760670e-09 0s 0s 142766190e-09 1s 1s 142768390e-09 0s 0s 142770950e-09 0s 0s 142776430e-09 1s 1s 142778630e-09 0s 0s 142781230e-09 0s 0s 142786670e-09 1s 1s 142788870e-09 0s 0s 142791510e-09 0s 0s 142796910e-09 1s 1s 142799110e-09 0s 0s 142801790e-09 0s 0s 142807150e-09 1s 1s 142809350e-09 0s 0s 142812070e-09 0s 0s 142817390e-09 1s 1s 142819590e-09 0s 0s 142822350e-09 0s 0s 142827630e-09 1s 1s 142829830e-09 0s 0s 142832630e-09 0s 0s 142837870e-09 1s 1s 142840070e-09 0s 0s 142842910e-09 0s 0s 142848110e-09 1s 1s 142850310e-09 0s 0s 142853190e-09 0s 0s 142858350e-09 1s 1s 142860550e-09 0s 0s 142863470e-09 0s 0s 142868590e-09 1s 1s 142870790e-09 0s 0s 142873750e-09 0s 0s 142878830e-09 1s 1s 142881030e-09 0s 0s 142884030e-09 0s 0s 142889070e-09 1s 1s 142891270e-09 0s 0s 142894310e-09 0s 0s 142899310e-09 1s 1s 142901510e-09 0s 0s 142904590e-09 0s 0s 142909550e-09 1s 1s 142911750e-09 0s 0s 142914870e-09 0s 0s 142919790e-09 1s 1s 142921990e-09 0s 0s 142925150e-09 0s 0s 142930030e-09 1s 1s 142932230e-09 0s 0s 142935430e-09 0s 0s 142940270e-09 1s 1s 142942470e-09 0s 0s 142945710e-09 0s 0s 142950510e-09 1s 1s 142952710e-09 0s 0s 142955990e-09 0s 0s 142960750e-09 1s 1s 142962950e-09 0s 0s 142966270e-09 0s 0s 142970990e-09 1s 1s 142973190e-09 0s 0s 142976550e-09 0s 0s 142981230e-09 1s 1s 142983430e-09 0s 0s 142986830e-09 0s 0s 142991470e-09 1s 1s 142993670e-09 0s 0s 142997110e-09 0s 0s 143001710e-09 1s 1s 143003910e-09 0s 0s 143007390e-09 0s 0s 143011950e-09 1s 1s 143014150e-09 0s 0s 143017670e-09 0s 0s 143022190e-09 1s 1s 143024390e-09 0s 0s 143027950e-09 0s 0s 143032430e-09 1s 1s 143034630e-09 0s 0s 143038230e-09 0s 0s 143042670e-09 1s 1s 143044870e-09 0s 0s 143048510e-09 0s 0s 143052910e-09 1s 1s 143055110e-09 0s 0s 143058790e-09 0s 0s 143063150e-09 1s 1s 143065350e-09 0s 0s 143069070e-09 0s 0s 143073390e-09 1s 1s 143075590e-09 0s 0s 143079350e-09 0s 0s 143083630e-09 1s 1s 143085830e-09 0s 0s 143089630e-09 0s 0s 143093870e-09 1s 1s 143096070e-09 0s 0s 143099910e-09 0s 0s 143104110e-09 1s 1s 143106310e-09 0s 0s 143110190e-09 0s 0s 143114350e-09 1s 1s 143116550e-09 0s 0s 143120470e-09 0s 0s 143124590e-09 1s 1s 143126790e-09 0s 0s 143130750e-09 0s 0s 143134830e-09 1s 1s 143137030e-09 0s 0s 143141030e-09 0s 0s 143145070e-09 1s 1s 143147270e-09 0s 0s 143151310e-09 0s 0s 143155310e-09 1s 1s 143157510e-09 0s 0s 143161590e-09 0s 0s 143165550e-09 1s 1s 143167750e-09 0s 0s 143171870e-09 0s 0s 143175790e-09 1s 1s 143177990e-09 0s 0s 143182150e-09 0s 0s 143186030e-09 1s 1s 143188230e-09 0s 0s 143192430e-09 0s 0s 143196270e-09 1s 1s 143198470e-09 0s 0s 143202710e-09 0s 0s 143206510e-09 1s 1s 143208710e-09 0s 0s 143212990e-09 0s 0s 143216750e-09 1s 1s 143218950e-09 0s 0s 143223270e-09 0s 0s 143226990e-09 1s 1s 143229190e-09 0s 0s 143233550e-09 0s 0s 143237230e-09 1s 1s 143239430e-09 0s 0s 143243830e-09 0s 0s 143247470e-09 1s 1s 143249670e-09 0s 0s 143254110e-09 0s 0s 143257710e-09 1s 1s 143259910e-09 0s 0s 143264390e-09 0s 0s 143267950e-09 1s 1s 143270150e-09 0s 0s 143274670e-09 0s 0s 143278190e-09 1s 1s 143280390e-09 0s 0s 143284950e-09 0s 0s 143288430e-09 1s 1s 143290630e-09 0s 0s 143295230e-09 0s 0s 143298670e-09 1s 1s 143300870e-09 0s 0s 143305510e-09 0s 0s 143308910e-09 1s 1s 143311110e-09 0s 0s 143315790e-09 0s 0s 143319150e-09 1s 1s 143321350e-09 0s 0s 143326070e-09 0s 0s 143329390e-09 1s 1s 143331590e-09 0s 0s 143336350e-09 0s 0s 143339630e-09 1s 1s 143341830e-09 0s 0s 143346630e-09 0s 0s 143349870e-09 1s 1s 143352070e-09 0s 0s 143356910e-09 0s 0s 143360110e-09 1s 1s 143362310e-09 0s 0s 143367190e-09 0s 0s 143370350e-09 1s 1s 143372550e-09 0s 0s 143377470e-09 0s 0s 143380590e-09 1s 1s 143382790e-09 0s 0s 143387750e-09 0s 0s 143390830e-09 1s 1s 143393030e-09 0s 0s 143398030e-09 0s 0s 143401070e-09 1s 1s 143403270e-09 0s 0s 143408310e-09 0s 0s 143411310e-09 1s 1s 143413510e-09 0s 0s 143418590e-09 0s 0s 143421550e-09 1s 1s 143423750e-09 0s 0s 143428870e-09 0s 0s 143431790e-09 1s 1s 143433990e-09 0s 0s 143439150e-09 0s 0s 143442030e-09 1s 1s 143444230e-09 0s 0s 143449430e-09 0s 0s 143452270e-09 1s 1s 143454470e-09 0s 0s 143459710e-09 0s 0s 143462510e-09 1s 1s 143464710e-09 0s 0s 143469990e-09 0s 0s 143472750e-09 1s 1s 143474950e-09 0s 0s 143480270e-09 0s 0s 143482990e-09 1s 1s 143485190e-09 0s 0s 143490550e-09 0s 0s 143493230e-09 1s 1s 143495430e-09 0s 0s 143500830e-09 0s 0s 143503470e-09 1s 1s 143505670e-09 0s 0s 143511110e-09 0s 0s 143513710e-09 1s 1s 143515910e-09 0s 0s 143521390e-09 0s 0s 143523950e-09 1s 1s 143526150e-09 0s 0s 143531670e-09 0s 0s 143534190e-09 1s 1s 143536390e-09 0s 0s 143541950e-09 0s 0s 143544430e-09 1s 1s 143546630e-09 0s 0s 143552230e-09 0s 0s 143554670e-09 1s 1s 143556870e-09 0s 0s 143562510e-09 0s 0s 143564910e-09 1s 1s 143567110e-09 0s 0s 143572790e-09 0s 0s 143575150e-09 1s 1s 143577350e-09 0s 0s 143583070e-09 0s 0s 143585390e-09 1s 1s 143587590e-09 0s 0s 143593350e-09 0s 0s 143595630e-09 1s 1s 143597830e-09 0s 0s 143603630e-09 0s 0s 143605870e-09 1s 1s 143608070e-09 0s 0s 143613910e-09 0s 0s 143616110e-09 1s 1s 143618310e-09 0s 0s 143624190e-09 0s 0s 143626350e-09 1s 1s 143628550e-09 0s 0s 143634470e-09 0s 0s 143636590e-09 1s 1s 143638790e-09 0s 0s 143644750e-09 0s 0s 143646830e-09 1s 1s 143649030e-09 0s 0s 143655030e-09 0s 0s 143657070e-09 1s 1s 143659270e-09 0s 0s 143665310e-09 0s 0s 143667310e-09 1s 1s 143669510e-09 0s 0s 143675590e-09 0s 0s 143677550e-09 1s 1s 143679750e-09 0s 0s 143685870e-09 0s 0s 143687790e-09 1s 1s 143689990e-09 0s 0s 143696150e-09 0s 0s 143698030e-09 1s 1s 143700230e-09 0s 0s 143706430e-09 0s 0s 143708270e-09 1s 1s 143710470e-09 0s 0s 143716710e-09 0s 0s 143718510e-09 1s 1s 143720710e-09 0s 0s 143726990e-09 0s 0s 143728750e-09 1s 1s 143730950e-09 0s 0s 143737270e-09 0s 0s 143738990e-09 1s 1s 143741190e-09 0s 0s 143747550e-09 0s 0s 143749230e-09 1s 1s 143751430e-09 0s 0s 143757830e-09 0s 0s 143759470e-09 1s 1s 143761670e-09 0s 0s 143768110e-09 0s 0s 143769710e-09 1s 1s 143771910e-09 0s 0s 143778390e-09 0s 0s 143779950e-09 1s 1s 143782150e-09 0s 0s 143788670e-09 0s 0s 143790190e-09 1s 1s 143792390e-09 0s 0s 143798950e-09 0s 0s 143800430e-09 1s 1s 143802630e-09 0s 0s 143809230e-09 0s 0s 143810670e-09 1s 1s 143812870e-09 0s 0s 143819510e-09 0s 0s 143820910e-09 1s 1s 143823110e-09 0s 0s 143829790e-09 0s 0s 143831150e-09 1s 1s 143833350e-09 0s 0s 143840070e-09 0s 0s 143841390e-09 1s 1s 143843590e-09 0s 0s 143850350e-09 0s 0s 143851630e-09 1s 1s 143853830e-09 0s 0s 143860630e-09 0s 0s 143861870e-09 1s 1s 143864070e-09 0s 0s 143870910e-09 0s 0s 143872110e-09 1s 1s 143874310e-09 0s 0s 143881190e-09 0s 0s 143882350e-09 1s 1s 143884550e-09 0s 0s 143891470e-09 0s 0s 143892590e-09 1s 1s 143894790e-09 0s 0s 143901750e-09 0s 0s 143902830e-09 1s 1s 143905030e-09 0s 0s 143912030e-09 0s 0s 143913070e-09 1s 1s 143915270e-09 0s 0s 143922310e-09 0s 0s 143923310e-09 1s 1s 143925510e-09 0s 0s 143932590e-09 0s 0s 143933550e-09 1s 1s 143935750e-09 0s 0s 143942870e-09 0s 0s 143943790e-09 1s 1s 143945990e-09 0s 0s 143953150e-09 0s 0s 143954030e-09 1s 1s 143956230e-09 0s 0s 143963430e-09 0s 0s 143964270e-09 1s 1s 143966470e-09 0s 0s 143973710e-09 0s 0s 143974510e-09 1s 1s 143976710e-09 0s 0s 143983990e-09 0s 0s 143984750e-09 1s 1s 143986950e-09 0s 0s 143994270e-09 0s 0s 143994990e-09 1s 1s 143997190e-09 0s 0s 144004550e-09 0s 0s 144005230e-09 1s 1s 144007430e-09 0s 0s 144014830e-09 0s 0s 144015470e-09 1s 1s 144017670e-09 0s 0s 144025110e-09 0s 0s 144025710e-09 1s 1s 144027910e-09 0s 0s 144035390e-09 0s 0s 144035950e-09 1s 1s 144038150e-09 0s 0s 144045670e-09 0s 0s 144046190e-09 1s 1s 144048390e-09 0s 0s 144055950e-09 0s 0s 144056430e-09 1s 1s 144058630e-09 0s 0s 144066230e-09 0s 0s 144066670e-09 1s 1s 144068870e-09 0s 0s 144076510e-09 0s 0s 144076910e-09 1s 1s 144079110e-09 0s 0s 144086790e-09 0s 0s 144087150e-09 1s 1s 144089350e-09 0s 0s 144097070e-09 0s 0s 144097390e-09 1s 1s 144099590e-09 0s 0s 144107350e-09 0s 0s 144107630e-09 1s 1s 144109830e-09 0s 0s 144117630e-09 0s 0s 144117870e-09 1s 1s 144120070e-09 0s 0s 144127910e-09 0s 0s 144128110e-09 1s 1s 144130310e-09 0s 0s 144138190e-09 0s 0s 144138350e-09 1s 1s 144140550e-09 0s 0s 144148470e-09 0s 0s 144148590e-09 1s 1s 144150790e-09 0s 0s 144158750e-09 0s 0s 144158830e-09 1s 1s 144161030e-09 0s 0s 144169030e-09 0s 0s 144169070e-09 1s 1s 144171270e-09 0s 0s 144179310e-09 1s 1s 144179350e-09 1s 1s 144181550e-09 0s 0s 144189550e-09 1s 1s 144189630e-09 1s 1s 144191790e-09 0s 0s 144199790e-09 1s 1s 144199910e-09 1s 1s 144202030e-09 0s 0s 144210030e-09 1s 1s 144210190e-09 1s 1s 144212270e-09 0s 0s 144220270e-09 1s 1s 144220470e-09 1s 1s 144222510e-09 0s 0s 144230510e-09 1s 1s 144230750e-09 1s 1s 144232750e-09 0s 0s 144240750e-09 1s 1s 144241030e-09 1s 1s 144242990e-09 0s 0s 144250990e-09 1s 1s 144251310e-09 1s 1s 144253230e-09 0s 0s 144261230e-09 1s 1s 144261590e-09 1s 1s 144263470e-09 0s 0s 144271470e-09 1s 1s 144271870e-09 1s 1s 144273710e-09 0s 0s 144281710e-09 1s 1s 144282150e-09 1s 1s 144283950e-09 0s 0s 144291950e-09 1s 1s 144292430e-09 1s 1s 144294190e-09 0s 0s 144302190e-09 1s 1s 144302710e-09 1s 1s 144304430e-09 0s 0s 144312430e-09 1s 1s 144312990e-09 1s 1s 144314670e-09 0s 0s 144322670e-09 1s 1s 144323270e-09 1s 1s 144324910e-09 0s 0s 144332910e-09 1s 1s 144333550e-09 1s 1s 144335150e-09 0s 0s 144343150e-09 1s 1s 144343830e-09 1s 1s 144345390e-09 0s 0s 144353390e-09 1s 1s 144354110e-09 1s 1s 144355630e-09 0s 0s 144363630e-09 1s 1s 144364390e-09 1s 1s 144365870e-09 0s 0s 144373870e-09 1s 1s 144374670e-09 1s 1s 144376110e-09 0s 0s 144384110e-09 1s 1s 144384950e-09 1s 1s 144386350e-09 0s 0s 144394350e-09 1s 1s 144395230e-09 1s 1s 144396590e-09 0s 0s 144404590e-09 1s 1s 144405510e-09 1s 1s 144406830e-09 0s 0s 144414830e-09 1s 1s 144415790e-09 1s 1s 144417070e-09 0s 0s 144425070e-09 1s 1s 144426070e-09 1s 1s 144427310e-09 0s 0s 144435310e-09 1s 1s 144436350e-09 1s 1s 144437550e-09 0s 0s 144445550e-09 1s 1s 144446630e-09 1s 1s 144447790e-09 0s 0s 144455790e-09 1s 1s 144456910e-09 1s 1s 144458030e-09 0s 0s 144466030e-09 1s 1s 144467190e-09 1s 1s 144468270e-09 0s 0s 144476270e-09 1s 1s 144477470e-09 1s 1s 144478510e-09 0s 0s 144486510e-09 1s 1s 144487750e-09 1s 1s 144488750e-09 0s 0s 144496750e-09 1s 1s 144498030e-09 1s 1s 144498990e-09 0s 0s 144506990e-09 1s 1s 144508310e-09 1s 1s 144509230e-09 0s 0s 144517230e-09 1s 1s 144518590e-09 1s 1s 144519470e-09 0s 0s 144527470e-09 1s 1s 144528870e-09 1s 1s 144529710e-09 0s 0s 144537710e-09 1s 1s 144539150e-09 1s 1s 144539950e-09 0s 0s 144547950e-09 1s 1s 144549430e-09 1s 1s 144550190e-09 0s 0s 144558190e-09 1s 1s 144559710e-09 1s 1s 144560430e-09 0s 0s 144568430e-09 1s 1s 144569990e-09 1s 1s 144570670e-09 0s 0s 144578670e-09 1s 1s 144580270e-09 1s 1s 144580910e-09 0s 0s 144588910e-09 1s 1s 144590550e-09 1s 1s 144591150e-09 0s 0s 144599150e-09 1s 1s 144600830e-09 1s 1s 144601390e-09 0s 0s 144609390e-09 1s 1s 144611110e-09 1s 1s 144611630e-09 0s 0s 144619630e-09 1s 1s 144621390e-09 1s 1s 144621870e-09 0s 0s 144629870e-09 1s 1s 144631670e-09 1s 1s 144632110e-09 0s 0s 144640110e-09 1s 1s 144641950e-09 1s 1s 144642350e-09 0s 0s 144650350e-09 1s 1s 144652230e-09 1s 1s 144652590e-09 0s 0s 144660590e-09 1s 1s 144662510e-09 1s 1s 144662830e-09 0s 0s 144670830e-09 1s 1s 144672790e-09 1s 1s 144673070e-09 0s 0s 144681070e-09 1s 1s 144683070e-09 1s 1s 144683310e-09 0s 0s 144691310e-09 1s 1s 144693350e-09 1s 1s 144693550e-09 0s 0s 144701550e-09 1s 1s 144703630e-09 1s 1s 144703790e-09 0s 0s 144711790e-09 1s 1s 144713910e-09 1s 1s 144714030e-09 0s 0s 144722030e-09 1s 1s 144724190e-09 1s 1s 144724270e-09 0s 0s 144732270e-09 1s 1s 144734470e-09 1s 1s 144734510e-09 0s 0s 144742510e-09 1s 1s 144744750e-09 0s 0s 144752750e-09 1s 1s 144754990e-09 0s 0s 144755030e-09 0s 0s 144762990e-09 1s 1s 144765230e-09 0s 0s 144765310e-09 0s 0s 144773230e-09 1s 1s 144775470e-09 0s 0s 144775590e-09 0s 0s 144783470e-09 1s 1s 144785710e-09 0s 0s 144785870e-09 0s 0s 144793710e-09 1s 1s 144795950e-09 0s 0s 144796150e-09 0s 0s 144803950e-09 1s 1s 144806190e-09 0s 0s 144806430e-09 0s 0s 144814190e-09 1s 1s 144816430e-09 0s 0s 144816710e-09 0s 0s 144824430e-09 1s 1s 144826670e-09 0s 0s 144826990e-09 0s 0s 144834670e-09 1s 1s 144836910e-09 0s 0s 144837270e-09 0s 0s 144844910e-09 1s 1s 144847150e-09 0s 0s 144847550e-09 0s 0s 144855150e-09 1s 1s 144857390e-09 0s 0s 144857830e-09 0s 0s 144865390e-09 1s 1s 144867630e-09 0s 0s 144868110e-09 0s 0s 144875630e-09 1s 1s 144877870e-09 0s 0s 144878390e-09 0s 0s 144885870e-09 1s 1s 144888110e-09 0s 0s 144888670e-09 0s 0s 144896110e-09 1s 1s 144898350e-09 0s 0s 144898950e-09 0s 0s 144906350e-09 1s 1s 144908590e-09 0s 0s 144909230e-09 0s 0s 144916590e-09 1s 1s 144918830e-09 0s 0s 144919510e-09 0s 0s 144926830e-09 1s 1s 144929070e-09 0s 0s 144929790e-09 0s 0s 144937070e-09 1s 1s 144939310e-09 0s 0s 144940070e-09 0s 0s 144947310e-09 1s 1s 144949550e-09 0s 0s 144950350e-09 0s 0s 144957550e-09 1s 1s 144959790e-09 0s 0s 144960630e-09 0s 0s 144967790e-09 1s 1s 144970030e-09 0s 0s 144970910e-09 0s 0s 144978030e-09 1s 1s 144980270e-09 0s 0s 144981190e-09 0s 0s 144988270e-09 1s 1s 144990510e-09 0s 0s 144991470e-09 0s 0s 144998510e-09 1s 1s 145000750e-09 0s 0s 145001750e-09 0s 0s 145008750e-09 1s 1s 145010990e-09 0s 0s 145012030e-09 0s 0s 145018990e-09 1s 1s 145021230e-09 0s 0s 145022310e-09 0s 0s 145029230e-09 1s 1s 145031470e-09 0s 0s 145032590e-09 0s 0s 145039470e-09 1s 1s 145041710e-09 0s 0s 145042870e-09 0s 0s 145049710e-09 1s 1s 145051950e-09 0s 0s 145053150e-09 0s 0s 145059950e-09 1s 1s 145062190e-09 0s 0s 145063430e-09 0s 0s 145070190e-09 1s 1s 145072430e-09 0s 0s 145073710e-09 0s 0s 145080430e-09 1s 1s 145082670e-09 0s 0s 145083990e-09 0s 0s 145090670e-09 1s 1s 145092910e-09 0s 0s 145094270e-09 0s 0s 145100910e-09 1s 1s 145103150e-09 0s 0s 145104550e-09 0s 0s 145111150e-09 1s 1s 145113390e-09 0s 0s 145114830e-09 0s 0s 145121390e-09 1s 1s 145123630e-09 0s 0s 145125110e-09 0s 0s 145131630e-09 1s 1s 145133870e-09 0s 0s 145135390e-09 0s 0s 145141870e-09 1s 1s 145144110e-09 0s 0s 145145670e-09 0s 0s 145152110e-09 1s 1s 145154350e-09 0s 0s 145155950e-09 0s 0s 145162350e-09 1s 1s 145164590e-09 0s 0s 145166230e-09 0s 0s 145172590e-09 1s 1s 145174830e-09 0s 0s 145176510e-09 0s 0s 145182830e-09 1s 1s 145185070e-09 0s 0s 145186790e-09 0s 0s 145193070e-09 1s 1s 145195310e-09 0s 0s 145197070e-09 0s 0s 145203310e-09 1s 1s 145205550e-09 0s 0s 145207350e-09 0s 0s 145213550e-09 1s 1s 145215790e-09 0s 0s 145217630e-09 0s 0s 145223790e-09 1s 1s 145226030e-09 0s 0s 145227910e-09 0s 0s 145234030e-09 1s 1s 145236270e-09 0s 0s 145238190e-09 0s 0s 145244270e-09 1s 1s 145246510e-09 0s 0s 145248470e-09 0s 0s 145254510e-09 1s 1s 145256750e-09 0s 0s 145258750e-09 0s 0s 145264750e-09 1s 1s 145266990e-09 0s 0s 145269030e-09 0s 0s 145274990e-09 1s 1s 145277230e-09 0s 0s 145279310e-09 0s 0s 145285230e-09 1s 1s 145287470e-09 0s 0s 145289590e-09 0s 0s 145295470e-09 1s 1s 145297710e-09 0s 0s 145299870e-09 0s 0s 145305710e-09 1s 1s 145307950e-09 0s 0s 145310150e-09 0s 0s 145315950e-09 1s 1s 145318190e-09 0s 0s 145320430e-09 0s 0s 145326190e-09 1s 1s 145328430e-09 0s 0s 145330710e-09 0s 0s 145336430e-09 1s 1s 145338670e-09 0s 0s 145340990e-09 0s 0s 145346670e-09 1s 1s 145348910e-09 0s 0s 145351270e-09 0s 0s 145356910e-09 1s 1s 145359150e-09 0s 0s 145361550e-09 0s 0s 145367150e-09 1s 1s 145369390e-09 0s 0s 145371830e-09 0s 0s 145377390e-09 1s 1s 145379630e-09 0s 0s 145382110e-09 0s 0s 145387630e-09 1s 1s 145389870e-09 0s 0s 145392390e-09 0s 0s 145397870e-09 1s 1s 145400110e-09 0s 0s 145402670e-09 0s 0s 145408110e-09 1s 1s 145410350e-09 0s 0s 145412950e-09 0s 0s 145418350e-09 1s 1s 145420590e-09 0s 0s 145423230e-09 0s 0s 145428590e-09 1s 1s 145430830e-09 0s 0s 145433510e-09 0s 0s 145438830e-09 1s 1s 145441070e-09 0s 0s 145443790e-09 0s 0s 145449070e-09 1s 1s 145451310e-09 0s 0s 145454070e-09 0s 0s 145459310e-09 1s 1s 145461550e-09 0s 0s 145464350e-09 0s 0s 145469550e-09 1s 1s 145471790e-09 0s 0s 145474630e-09 0s 0s 145479790e-09 1s 1s 145482030e-09 0s 0s 145484910e-09 0s 0s 145490030e-09 1s 1s 145492270e-09 0s 0s 145495190e-09 0s 0s 145500270e-09 1s 1s 145502510e-09 0s 0s 145505470e-09 0s 0s 145510510e-09 1s 1s 145512750e-09 0s 0s 145515750e-09 0s 0s 145520750e-09 1s 1s 145522990e-09 0s 0s 145526030e-09 0s 0s 145530990e-09 1s 1s 145533230e-09 0s 0s 145536310e-09 0s 0s 145541230e-09 1s 1s 145543470e-09 0s 0s 145546590e-09 0s 0s 145551470e-09 1s 1s 145553710e-09 0s 0s 145556870e-09 0s 0s 145561710e-09 1s 1s 145563950e-09 0s 0s 145567150e-09 0s 0s 145571950e-09 1s 1s 145574190e-09 0s 0s 145577430e-09 0s 0s 145582190e-09 1s 1s 145584430e-09 0s 0s 145587710e-09 0s 0s 145592430e-09 1s 1s 145594670e-09 0s 0s 145597990e-09 0s 0s 145602670e-09 1s 1s 145604910e-09 0s 0s 145608270e-09 0s 0s 145612910e-09 1s 1s 145615150e-09 0s 0s 145618550e-09 0s 0s 145623150e-09 1s 1s 145625390e-09 0s 0s 145628830e-09 0s 0s 145633390e-09 1s 1s 145635630e-09 0s 0s 145639110e-09 0s 0s 145643630e-09 1s 1s 145645870e-09 0s 0s 145649390e-09 0s 0s 145653870e-09 1s 1s 145656110e-09 0s 0s 145659670e-09 0s 0s 145664110e-09 1s 1s 145666350e-09 0s 0s 145669950e-09 0s 0s 145674350e-09 1s 1s 145676590e-09 0s 0s 145680230e-09 0s 0s 145684590e-09 1s 1s 145686830e-09 0s 0s 145690510e-09 0s 0s 145694830e-09 1s 1s 145697070e-09 0s 0s 145700790e-09 0s 0s 145705070e-09 1s 1s 145707310e-09 0s 0s 145711070e-09 0s 0s 145715310e-09 1s 1s 145717550e-09 0s 0s 145721350e-09 0s 0s 145725550e-09 1s 1s 145727790e-09 0s 0s 145731630e-09 0s 0s 145735790e-09 1s 1s 145738030e-09 0s 0s 145741910e-09 0s 0s 145746030e-09 1s 1s 145748270e-09 0s 0s 145752190e-09 0s 0s 145756270e-09 1s 1s 145758510e-09 0s 0s 145762470e-09 0s 0s 145766510e-09 1s 1s 145768750e-09 0s 0s 145772750e-09 0s 0s 145776750e-09 1s 1s 145778990e-09 0s 0s 145783030e-09 0s 0s 145786990e-09 1s 1s 145789230e-09 0s 0s 145793310e-09 0s 0s 145797230e-09 1s 1s 145799470e-09 0s 0s 145803590e-09 0s 0s 145807470e-09 1s 1s 145809710e-09 0s 0s 145813870e-09 0s 0s 145817710e-09 1s 1s 145819950e-09 0s 0s 145824150e-09 0s 0s 145827950e-09 1s 1s 145830190e-09 0s 0s 145834430e-09 0s 0s 145838190e-09 1s 1s 145840430e-09 0s 0s 145844710e-09 0s 0s 145848430e-09 1s 1s 145850670e-09 0s 0s 145854990e-09 0s 0s 145858670e-09 1s 1s 145860910e-09 0s 0s 145865270e-09 0s 0s 145868910e-09 1s 1s 145871150e-09 0s 0s 145875550e-09 0s 0s 145879150e-09 1s 1s 145881390e-09 0s 0s 145885830e-09 0s 0s 145889390e-09 1s 1s 145891630e-09 0s 0s 145896110e-09 0s 0s 145899630e-09 1s 1s 145901870e-09 0s 0s 145906390e-09 0s 0s 145909870e-09 1s 1s 145912110e-09 0s 0s 145916670e-09 0s 0s 145920110e-09 1s 1s 145922350e-09 0s 0s 145926950e-09 0s 0s 145930350e-09 1s 1s 145932590e-09 0s 0s 145937230e-09 0s 0s 145940590e-09 1s 1s 145942830e-09 0s 0s 145947510e-09 0s 0s 145950830e-09 1s 1s 145953070e-09 0s 0s 145957790e-09 0s 0s 145961070e-09 1s 1s 145963310e-09 0s 0s 145968070e-09 0s 0s 145971310e-09 1s 1s 145973550e-09 0s 0s 145978350e-09 0s 0s 145981550e-09 1s 1s 145983790e-09 0s 0s 145988630e-09 0s 0s 145991790e-09 1s 1s 145994030e-09 0s 0s 145998910e-09 0s 0s 146002030e-09 1s 1s 146004270e-09 0s 0s 146009190e-09 0s 0s 146012270e-09 1s 1s 146014510e-09 0s 0s 146019470e-09 0s 0s 146022510e-09 1s 1s 146024750e-09 0s 0s 146029750e-09 0s 0s 146032750e-09 1s 1s 146034990e-09 0s 0s 146040030e-09 0s 0s 146042990e-09 1s 1s 146045230e-09 0s 0s 146050310e-09 0s 0s 146053230e-09 1s 1s 146055470e-09 0s 0s 146060590e-09 0s 0s 146063470e-09 1s 1s 146065710e-09 0s 0s 146070870e-09 0s 0s 146073710e-09 1s 1s 146075950e-09 0s 0s 146081150e-09 0s 0s 146083950e-09 1s 1s 146086190e-09 0s 0s 146091430e-09 0s 0s 146094190e-09 1s 1s 146096430e-09 0s 0s 146101710e-09 0s 0s 146104430e-09 1s 1s 146106670e-09 0s 0s 146111990e-09 0s 0s 146114670e-09 1s 1s 146116910e-09 0s 0s 146122270e-09 0s 0s 146124910e-09 1s 1s 146127150e-09 0s 0s 146132550e-09 0s 0s 146135150e-09 1s 1s 146137390e-09 0s 0s 146142830e-09 0s 0s 146145390e-09 1s 1s 146147630e-09 0s 0s 146153110e-09 0s 0s 146155630e-09 1s 1s 146157870e-09 0s 0s 146163390e-09 0s 0s 146165870e-09 1s 1s 146168110e-09 0s 0s 146173670e-09 0s 0s 146176110e-09 1s 1s 146178350e-09 0s 0s 146183950e-09 0s 0s 146186350e-09 1s 1s 146188590e-09 0s 0s 146194230e-09 0s 0s 146196590e-09 1s 1s 146198830e-09 0s 0s 146204510e-09 0s 0s 146206830e-09 1s 1s 146209070e-09 0s 0s 146214790e-09 0s 0s 146217070e-09 1s 1s 146219310e-09 0s 0s 146225070e-09 0s 0s 146227310e-09 1s 1s 146229550e-09 0s 0s 146235350e-09 0s 0s 146237550e-09 1s 1s 146239790e-09 0s 0s 146245630e-09 0s 0s 146247790e-09 1s 1s 146250030e-09 0s 0s 146255910e-09 0s 0s 146258030e-09 1s 1s 146260270e-09 0s 0s 146266190e-09 0s 0s 146268270e-09 1s 1s 146270510e-09 0s 0s 146276470e-09 0s 0s 146278510e-09 1s 1s 146280750e-09 0s 0s 146286750e-09 0s 0s 146288750e-09 1s 1s 146290990e-09 0s 0s 146297030e-09 0s 0s 146298990e-09 1s 1s 146301230e-09 0s 0s 146307310e-09 0s 0s 146309230e-09 1s 1s 146311470e-09 0s 0s 146317590e-09 0s 0s 146319470e-09 1s 1s 146321710e-09 0s 0s 146327870e-09 0s 0s 146329710e-09 1s 1s 146331950e-09 0s 0s 146338150e-09 0s 0s 146339950e-09 1s 1s 146342190e-09 0s 0s 146348430e-09 0s 0s 146350190e-09 1s 1s 146352430e-09 0s 0s 146358710e-09 0s 0s 146360430e-09 1s 1s 146362670e-09 0s 0s 146368990e-09 0s 0s 146370670e-09 1s 1s 146372910e-09 0s 0s 146379270e-09 0s 0s 146380910e-09 1s 1s 146383150e-09 0s 0s 146389550e-09 0s 0s 146391150e-09 1s 1s 146393390e-09 0s 0s 146399830e-09 0s 0s 146401390e-09 1s 1s 146403630e-09 0s 0s 146410110e-09 0s 0s 146411630e-09 1s 1s 146413870e-09 0s 0s 146420390e-09 0s 0s 146421870e-09 1s 1s 146424110e-09 0s 0s 146430670e-09 0s 0s 146432110e-09 1s 1s 146434350e-09 0s 0s 146440950e-09 0s 0s 146442350e-09 1s 1s 146444590e-09 0s 0s 146451230e-09 0s 0s 146452590e-09 1s 1s 146454830e-09 0s 0s 146461510e-09 0s 0s 146462830e-09 1s 1s 146465070e-09 0s 0s 146471790e-09 0s 0s 146473070e-09 1s 1s 146475310e-09 0s 0s 146482070e-09 0s 0s 146483310e-09 1s 1s 146485550e-09 0s 0s 146492350e-09 0s 0s 146493550e-09 1s 1s 146495790e-09 0s 0s 146502630e-09 0s 0s 146503790e-09 1s 1s 146506030e-09 0s 0s 146512910e-09 0s 0s 146514030e-09 1s 1s 146516270e-09 0s 0s 146523190e-09 0s 0s 146524270e-09 1s 1s 146526510e-09 0s 0s 146533470e-09 0s 0s 146534510e-09 1s 1s 146536750e-09 0s 0s 146543750e-09 0s 0s 146544750e-09 1s 1s 146546990e-09 0s 0s 146554030e-09 0s 0s 146554990e-09 1s 1s 146557230e-09 0s 0s 146564310e-09 0s 0s 146565230e-09 1s 1s 146567470e-09 0s 0s 146574590e-09 0s 0s 146575470e-09 1s 1s 146577710e-09 0s 0s 146584870e-09 0s 0s 146585710e-09 1s 1s 146587950e-09 0s 0s 146595150e-09 0s 0s 146595950e-09 1s 1s 146598190e-09 0s 0s 146605430e-09 0s 0s 146606190e-09 1s 1s 146608430e-09 0s 0s 146615710e-09 0s 0s 146616430e-09 1s 1s 146618670e-09 0s 0s 146625990e-09 0s 0s 146626670e-09 1s 1s 146628910e-09 0s 0s 146636270e-09 0s 0s 146636910e-09 1s 1s 146639150e-09 0s 0s 146646550e-09 0s 0s 146647150e-09 1s 1s 146649390e-09 0s 0s 146656830e-09 0s 0s 146657390e-09 1s 1s 146659630e-09 0s 0s 146667110e-09 0s 0s 146667630e-09 1s 1s 146669870e-09 0s 0s 146677390e-09 0s 0s 146677870e-09 1s 1s 146680110e-09 0s 0s 146687670e-09 0s 0s 146688110e-09 1s 1s 146690350e-09 0s 0s 146697950e-09 0s 0s 146698350e-09 1s 1s 146700590e-09 0s 0s 146708230e-09 0s 0s 146708590e-09 1s 1s 146710830e-09 0s 0s 146718510e-09 0s 0s 146718830e-09 1s 1s 146721070e-09 0s 0s 146728790e-09 0s 0s 146729070e-09 1s 1s 146731310e-09 0s 0s 146739070e-09 0s 0s 146739310e-09 1s 1s 146741550e-09 0s 0s 146749350e-09 0s 0s 146749550e-09 1s 1s 146751790e-09 0s 0s 146759630e-09 0s 0s 146759790e-09 1s 1s 146762030e-09 0s 0s 146769910e-09 0s 0s 146770030e-09 1s 1s 146772270e-09 0s 0s 146780190e-09 0s 0s 146780270e-09 1s 1s 146782510e-09 0s 0s 146790470e-09 0s 0s 146790510e-09 1s 1s 146792750e-09 0s 0s 146800750e-09 1s 1s 146800790e-09 1s 1s 146803030e-09 0s 0s 146810990e-09 1s 1s 146811070e-09 1s 1s 146813270e-09 0s 0s 146821230e-09 1s 1s 146821350e-09 1s 1s 146823510e-09 0s 0s 146831470e-09 1s 1s 146831630e-09 1s 1s 146833750e-09 0s 0s 146841710e-09 1s 1s 146841910e-09 1s 1s 146843990e-09 0s 0s 146851950e-09 1s 1s 146852190e-09 1s 1s 146854230e-09 0s 0s 146862190e-09 1s 1s 146862470e-09 1s 1s 146864470e-09 0s 0s 146872430e-09 1s 1s 146872750e-09 1s 1s 146874710e-09 0s 0s 146882670e-09 1s 1s 146883030e-09 1s 1s 146884950e-09 0s 0s 146892910e-09 1s 1s 146893310e-09 1s 1s 146895190e-09 0s 0s 146903150e-09 1s 1s 146903590e-09 1s 1s 146905430e-09 0s 0s 146913390e-09 1s 1s 146913870e-09 1s 1s 146915670e-09 0s 0s 146923630e-09 1s 1s 146924150e-09 1s 1s 146925910e-09 0s 0s 146933870e-09 1s 1s 146934430e-09 1s 1s 146936150e-09 0s 0s 146944110e-09 1s 1s 146944710e-09 1s 1s 146946390e-09 0s 0s 146954350e-09 1s 1s 146954990e-09 1s 1s 146956630e-09 0s 0s 146964590e-09 1s 1s 146965270e-09 1s 1s 146966870e-09 0s 0s 146974830e-09 1s 1s 146975550e-09 1s 1s 146977110e-09 0s 0s 146985070e-09 1s 1s 146985830e-09 1s 1s 146987350e-09 0s 0s 146995310e-09 1s 1s 146996110e-09 1s 1s 146997590e-09 0s 0s 147005550e-09 1s 1s 147006390e-09 1s 1s 147007830e-09 0s 0s 147015790e-09 1s 1s 147016670e-09 1s 1s 147018070e-09 0s 0s 147026030e-09 1s 1s 147026950e-09 1s 1s 147028310e-09 0s 0s 147036270e-09 1s 1s 147037230e-09 1s 1s 147038550e-09 0s 0s 147046510e-09 1s 1s 147047510e-09 1s 1s 147048790e-09 0s 0s 147056750e-09 1s 1s 147057790e-09 1s 1s 147059030e-09 0s 0s 147066990e-09 1s 1s 147068070e-09 1s 1s 147069270e-09 0s 0s 147077230e-09 1s 1s 147078350e-09 1s 1s 147079510e-09 0s 0s 147087470e-09 1s 1s 147088630e-09 1s 1s 147089750e-09 0s 0s 147097710e-09 1s 1s 147098910e-09 1s 1s 147099990e-09 0s 0s 147107950e-09 1s 1s 147109190e-09 1s 1s 147110230e-09 0s 0s 147118190e-09 1s 1s 147119470e-09 1s 1s 147120470e-09 0s 0s 147128430e-09 1s 1s 147129750e-09 1s 1s 147130710e-09 0s 0s 147138670e-09 1s 1s 147140030e-09 1s 1s 147140950e-09 0s 0s 147148910e-09 1s 1s 147150310e-09 1s 1s 147151190e-09 0s 0s 147159150e-09 1s 1s 147160590e-09 1s 1s 147161430e-09 0s 0s 147169390e-09 1s 1s 147170870e-09 1s 1s 147171670e-09 0s 0s 147179630e-09 1s 1s 147181150e-09 1s 1s 147181910e-09 0s 0s 147189870e-09 1s 1s 147191430e-09 1s 1s 147192150e-09 0s 0s 147200110e-09 1s 1s 147201710e-09 1s 1s 147202390e-09 0s 0s 147210350e-09 1s 1s 147211990e-09 1s 1s 147212630e-09 0s 0s 147220590e-09 1s 1s 147222270e-09 1s 1s 147222870e-09 0s 0s 147230830e-09 1s 1s 147232550e-09 1s 1s 147233110e-09 0s 0s 147241070e-09 1s 1s 147242830e-09 1s 1s 147243350e-09 0s 0s 147251310e-09 1s 1s 147253110e-09 1s 1s 147253590e-09 0s 0s 147261550e-09 1s 1s 147263390e-09 1s 1s 147263830e-09 0s 0s 147271790e-09 1s 1s 147273670e-09 1s 1s 147274070e-09 0s 0s 147282030e-09 1s 1s 147283950e-09 1s 1s 147284310e-09 0s 0s 147292270e-09 1s 1s 147294230e-09 1s 1s 147294550e-09 0s 0s 147302510e-09 1s 1s 147304510e-09 1s 1s 147304790e-09 0s 0s 147312750e-09 1s 1s 147314790e-09 1s 1s 147315030e-09 0s 0s 147322990e-09 1s 1s 147325070e-09 1s 1s 147325270e-09 0s 0s 147333230e-09 1s 1s 147335350e-09 1s 1s 147335510e-09 0s 0s 147343470e-09 1s 1s 147345630e-09 1s 1s 147345750e-09 0s 0s 147353710e-09 1s 1s 147355910e-09 1s 1s 147355990e-09 0s 0s 147363950e-09 1s 1s 147366190e-09 1s 1s 147366230e-09 0s 0s 147374190e-09 1s 1s 147376470e-09 0s 0s 147384430e-09 1s 1s 147386710e-09 0s 0s 147386750e-09 0s 0s 147394670e-09 1s 1s 147396950e-09 0s 0s 147397030e-09 0s 0s 147404910e-09 1s 1s 147407190e-09 0s 0s 147407310e-09 0s 0s 147415150e-09 1s 1s 147417430e-09 0s 0s 147417590e-09 0s 0s 147425390e-09 1s 1s 147427670e-09 0s 0s 147427870e-09 0s 0s 147435630e-09 1s 1s 147437910e-09 0s 0s 147438150e-09 0s 0s 147445870e-09 1s 1s 147448150e-09 0s 0s 147448430e-09 0s 0s 147456110e-09 1s 1s 147458390e-09 0s 0s 147458710e-09 0s 0s 147466350e-09 1s 1s 147468630e-09 0s 0s 147468990e-09 0s 0s 147476590e-09 1s 1s 147478870e-09 0s 0s 147479270e-09 0s 0s 147486830e-09 1s 1s 147489110e-09 0s 0s 147489550e-09 0s 0s 147497070e-09 1s 1s 147499350e-09 0s 0s 147499830e-09 0s 0s 147507310e-09 1s 1s 147509590e-09 0s 0s 147510110e-09 0s 0s 147517550e-09 1s 1s 147519830e-09 0s 0s 147520390e-09 0s 0s 147527790e-09 1s 1s 147530070e-09 0s 0s 147530670e-09 0s 0s 147538030e-09 1s 1s 147540310e-09 0s 0s 147540950e-09 0s 0s 147548270e-09 1s 1s 147550550e-09 0s 0s 147551230e-09 0s 0s 147558510e-09 1s 1s 147560790e-09 0s 0s 147561510e-09 0s 0s 147568750e-09 1s 1s 147571030e-09 0s 0s 147571790e-09 0s 0s 147578990e-09 1s 1s 147581270e-09 0s 0s 147582070e-09 0s 0s 147589230e-09 1s 1s 147591510e-09 0s 0s 147592350e-09 0s 0s 147599470e-09 1s 1s 147601750e-09 0s 0s 147602630e-09 0s 0s 147609710e-09 1s 1s 147611990e-09 0s 0s 147612910e-09 0s 0s 147619950e-09 1s 1s 147622230e-09 0s 0s 147623190e-09 0s 0s 147630190e-09 1s 1s 147632470e-09 0s 0s 147633470e-09 0s 0s 147640430e-09 1s 1s 147642710e-09 0s 0s 147643750e-09 0s 0s 147650670e-09 1s 1s 147652950e-09 0s 0s 147654030e-09 0s 0s 147660910e-09 1s 1s 147663190e-09 0s 0s 147664310e-09 0s 0s 147671150e-09 1s 1s 147673430e-09 0s 0s 147674590e-09 0s 0s 147681390e-09 1s 1s 147683670e-09 0s 0s 147684870e-09 0s 0s 147691630e-09 1s 1s 147693910e-09 0s 0s 147695150e-09 0s 0s 147701870e-09 1s 1s 147704150e-09 0s 0s 147705430e-09 0s 0s 147712110e-09 1s 1s 147714390e-09 0s 0s 147715710e-09 0s 0s 147722350e-09 1s 1s 147724630e-09 0s 0s 147725990e-09 0s 0s 147732590e-09 1s 1s 147734870e-09 0s 0s 147736270e-09 0s 0s 147742830e-09 1s 1s 147745110e-09 0s 0s 147746550e-09 0s 0s 147753070e-09 1s 1s 147755350e-09 0s 0s 147756830e-09 0s 0s 147763310e-09 1s 1s 147765590e-09 0s 0s 147767110e-09 0s 0s 147773550e-09 1s 1s 147775830e-09 0s 0s 147777390e-09 0s 0s 147783790e-09 1s 1s 147786070e-09 0s 0s 147787670e-09 0s 0s 147794030e-09 1s 1s 147796310e-09 0s 0s 147797950e-09 0s 0s 147804270e-09 1s 1s 147806550e-09 0s 0s 147808230e-09 0s 0s 147814510e-09 1s 1s 147816790e-09 0s 0s 147818510e-09 0s 0s 147824750e-09 1s 1s 147827030e-09 0s 0s 147828790e-09 0s 0s 147834990e-09 1s 1s 147837270e-09 0s 0s 147839070e-09 0s 0s 147845230e-09 1s 1s 147847510e-09 0s 0s 147849350e-09 0s 0s 147855470e-09 1s 1s 147857750e-09 0s 0s 147859630e-09 0s 0s 147865710e-09 1s 1s 147867990e-09 0s 0s 147869910e-09 0s 0s 147875950e-09 1s 1s 147878230e-09 0s 0s 147880190e-09 0s 0s 147886190e-09 1s 1s 147888470e-09 0s 0s 147890470e-09 0s 0s 147896430e-09 1s 1s 147898710e-09 0s 0s 147900750e-09 0s 0s 147906670e-09 1s 1s 147908950e-09 0s 0s 147911030e-09 0s 0s 147916910e-09 1s 1s 147919190e-09 0s 0s 147921310e-09 0s 0s 147927150e-09 1s 1s 147929430e-09 0s 0s 147931590e-09 0s 0s 147937390e-09 1s 1s 147939670e-09 0s 0s 147941870e-09 0s 0s 147947630e-09 1s 1s 147949910e-09 0s 0s 147952150e-09 0s 0s 147957870e-09 1s 1s 147960150e-09 0s 0s 147962430e-09 0s 0s 147968110e-09 1s 1s 147970390e-09 0s 0s 147972710e-09 0s 0s 147978350e-09 1s 1s 147980630e-09 0s 0s 147982990e-09 0s 0s 147988590e-09 1s 1s 147990870e-09 0s 0s 147993270e-09 0s 0s 147998830e-09 1s 1s 148001110e-09 0s 0s 148003550e-09 0s 0s 148009070e-09 1s 1s 148011350e-09 0s 0s 148013830e-09 0s 0s 148019310e-09 1s 1s 148021590e-09 0s 0s 148024110e-09 0s 0s 148029550e-09 1s 1s 148031830e-09 0s 0s 148034390e-09 0s 0s 148039790e-09 1s 1s 148042070e-09 0s 0s 148044670e-09 0s 0s 148050030e-09 1s 1s 148052310e-09 0s 0s 148054950e-09 0s 0s 148060270e-09 1s 1s 148062550e-09 0s 0s 148065230e-09 0s 0s 148070510e-09 1s 1s 148072790e-09 0s 0s 148075510e-09 0s 0s 148080750e-09 1s 1s 148083030e-09 0s 0s 148085790e-09 0s 0s 148090990e-09 1s 1s 148093270e-09 0s 0s 148096070e-09 0s 0s 148101230e-09 1s 1s 148103510e-09 0s 0s 148106350e-09 0s 0s 148111470e-09 1s 1s 148113750e-09 0s 0s 148116630e-09 0s 0s 148121710e-09 1s 1s 148123990e-09 0s 0s 148126910e-09 0s 0s 148131950e-09 1s 1s 148134230e-09 0s 0s 148137190e-09 0s 0s 148142190e-09 1s 1s 148144470e-09 0s 0s 148147470e-09 0s 0s 148152430e-09 1s 1s 148154710e-09 0s 0s 148157750e-09 0s 0s 148162670e-09 1s 1s 148164950e-09 0s 0s 148168030e-09 0s 0s 148172910e-09 1s 1s 148175190e-09 0s 0s 148178310e-09 0s 0s 148183150e-09 1s 1s 148185430e-09 0s 0s 148188590e-09 0s 0s 148193390e-09 1s 1s 148195670e-09 0s 0s 148198870e-09 0s 0s 148203630e-09 1s 1s 148205910e-09 0s 0s 148209150e-09 0s 0s 148213870e-09 1s 1s 148216150e-09 0s 0s 148219430e-09 0s 0s 148224110e-09 1s 1s 148226390e-09 0s 0s 148229710e-09 0s 0s 148234350e-09 1s 1s 148236630e-09 0s 0s 148239990e-09 0s 0s 148244590e-09 1s 1s 148246870e-09 0s 0s 148250270e-09 0s 0s 148254830e-09 1s 1s 148257110e-09 0s 0s 148260550e-09 0s 0s 148265070e-09 1s 1s 148267350e-09 0s 0s 148270830e-09 0s 0s 148275310e-09 1s 1s 148277590e-09 0s 0s 148281110e-09 0s 0s 148285550e-09 1s 1s 148287830e-09 0s 0s 148291390e-09 0s 0s 148295790e-09 1s 1s 148298070e-09 0s 0s 148301670e-09 0s 0s 148306030e-09 1s 1s 148308310e-09 0s 0s 148311950e-09 0s 0s 148316270e-09 1s 1s 148318550e-09 0s 0s 148322230e-09 0s 0s 148326510e-09 1s 1s 148328790e-09 0s 0s 148332510e-09 0s 0s 148336750e-09 1s 1s 148339030e-09 0s 0s 148342790e-09 0s 0s 148346990e-09 1s 1s 148349270e-09 0s 0s 148353070e-09 0s 0s 148357230e-09 1s 1s 148359510e-09 0s 0s 148363350e-09 0s 0s 148367470e-09 1s 1s 148369750e-09 0s 0s 148373630e-09 0s 0s 148377710e-09 1s 1s 148379990e-09 0s 0s 148383910e-09 0s 0s 148387950e-09 1s 1s 148390230e-09 0s 0s 148394190e-09 0s 0s 148398190e-09 1s 1s 148400470e-09 0s 0s 148404470e-09 0s 0s 148408430e-09 1s 1s 148410710e-09 0s 0s 148414750e-09 0s 0s 148418670e-09 1s 1s 148420950e-09 0s 0s 148425030e-09 0s 0s 148428910e-09 1s 1s 148431190e-09 0s 0s 148435310e-09 0s 0s 148439150e-09 1s 1s 148441430e-09 0s 0s 148445590e-09 0s 0s 148449390e-09 1s 1s 148451670e-09 0s 0s 148455870e-09 0s 0s 148459630e-09 1s 1s 148461910e-09 0s 0s 148466150e-09 0s 0s 148469870e-09 1s 1s 148472150e-09 0s 0s 148476430e-09 0s 0s 148480110e-09 1s 1s 148482390e-09 0s 0s 148486710e-09 0s 0s 148490350e-09 1s 1s 148492630e-09 0s 0s 148496990e-09 0s 0s 148500590e-09 1s 1s 148502870e-09 0s 0s 148507270e-09 0s 0s 148510830e-09 1s 1s 148513110e-09 0s 0s 148517550e-09 0s 0s 148521070e-09 1s 1s 148523350e-09 0s 0s 148527830e-09 0s 0s 148531310e-09 1s 1s 148533590e-09 0s 0s 148538110e-09 0s 0s 148541550e-09 1s 1s 148543830e-09 0s 0s 148548390e-09 0s 0s 148551790e-09 1s 1s 148554070e-09 0s 0s 148558670e-09 0s 0s 148562030e-09 1s 1s 148564310e-09 0s 0s 148568950e-09 0s 0s 148572270e-09 1s 1s 148574550e-09 0s 0s 148579230e-09 0s 0s 148582510e-09 1s 1s 148584790e-09 0s 0s 148589510e-09 0s 0s 148592750e-09 1s 1s 148595030e-09 0s 0s 148599790e-09 0s 0s 148602990e-09 1s 1s 148605270e-09 0s 0s 148610070e-09 0s 0s 148613230e-09 1s 1s 148615510e-09 0s 0s 148620350e-09 0s 0s 148623470e-09 1s 1s 148625750e-09 0s 0s 148630630e-09 0s 0s 148633710e-09 1s 1s 148635990e-09 0s 0s 148640910e-09 0s 0s 148643950e-09 1s 1s 148646230e-09 0s 0s 148651190e-09 0s 0s 148654190e-09 1s 1s 148656470e-09 0s 0s 148661470e-09 0s 0s 148664430e-09 1s 1s 148666710e-09 0s 0s 148671750e-09 0s 0s 148674670e-09 1s 1s 148676950e-09 0s 0s 148682030e-09 0s 0s 148684910e-09 1s 1s 148687190e-09 0s 0s 148692310e-09 0s 0s 148695150e-09 1s 1s 148697430e-09 0s 0s 148702590e-09 0s 0s 148705390e-09 1s 1s 148707670e-09 0s 0s 148712870e-09 0s 0s 148715630e-09 1s 1s 148717910e-09 0s 0s 148723150e-09 0s 0s 148725870e-09 1s 1s 148728150e-09 0s 0s 148733430e-09 0s 0s 148736110e-09 1s 1s 148738390e-09 0s 0s 148743710e-09 0s 0s 148746350e-09 1s 1s 148748630e-09 0s 0s 148753990e-09 0s 0s 148756590e-09 1s 1s 148758870e-09 0s 0s 148764270e-09 0s 0s 148766830e-09 1s 1s 148769110e-09 0s 0s 148774550e-09 0s 0s 148777070e-09 1s 1s 148779350e-09 0s 0s 148784830e-09 0s 0s 148787310e-09 1s 1s 148789590e-09 0s 0s 148795110e-09 0s 0s 148797550e-09 1s 1s 148799830e-09 0s 0s 148805390e-09 0s 0s 148807790e-09 1s 1s 148810070e-09 0s 0s 148815670e-09 0s 0s 148818030e-09 1s 1s 148820310e-09 0s 0s 148825950e-09 0s 0s 148828270e-09 1s 1s 148830550e-09 0s 0s 148836230e-09 0s 0s 148838510e-09 1s 1s 148840790e-09 0s 0s 148846510e-09 0s 0s 148848750e-09 1s 1s 148851030e-09 0s 0s 148856790e-09 0s 0s 148858990e-09 1s 1s 148861270e-09 0s 0s 148867070e-09 0s 0s 148869230e-09 1s 1s 148871510e-09 0s 0s 148877350e-09 0s 0s 148879470e-09 1s 1s 148881750e-09 0s 0s 148887630e-09 0s 0s 148889710e-09 1s 1s 148891990e-09 0s 0s 148897910e-09 0s 0s 148899950e-09 1s 1s 148902230e-09 0s 0s 148908190e-09 0s 0s 148910190e-09 1s 1s 148912470e-09 0s 0s 148918470e-09 0s 0s 148920430e-09 1s 1s 148922710e-09 0s 0s 148928750e-09 0s 0s 148930670e-09 1s 1s 148932950e-09 0s 0s 148939030e-09 0s 0s 148940910e-09 1s 1s 148943190e-09 0s 0s 148949310e-09 0s 0s 148951150e-09 1s 1s 148953430e-09 0s 0s 148959590e-09 0s 0s 148961390e-09 1s 1s 148963670e-09 0s 0s 148969870e-09 0s 0s 148971630e-09 1s 1s 148973910e-09 0s 0s 148980150e-09 0s 0s 148981870e-09 1s 1s 148984150e-09 0s 0s 148990430e-09 0s 0s 148992110e-09 1s 1s 148994390e-09 0s 0s 149000710e-09 0s 0s 149002350e-09 1s 1s 149004630e-09 0s 0s 149010990e-09 0s 0s 149012590e-09 1s 1s 149014870e-09 0s 0s 149021270e-09 0s 0s 149022830e-09 1s 1s 149025110e-09 0s 0s 149031550e-09 0s 0s 149033070e-09 1s 1s 149035350e-09 0s 0s 149041830e-09 0s 0s 149043310e-09 1s 1s 149045590e-09 0s 0s 149052110e-09 0s 0s 149053550e-09 1s 1s 149055830e-09 0s 0s 149062390e-09 0s 0s 149063790e-09 1s 1s 149066070e-09 0s 0s 149072670e-09 0s 0s 149074030e-09 1s 1s 149076310e-09 0s 0s 149082950e-09 0s 0s 149084270e-09 1s 1s 149086550e-09 0s 0s 149093230e-09 0s 0s 149094510e-09 1s 1s 149096790e-09 0s 0s 149103510e-09 0s 0s 149104750e-09 1s 1s 149107030e-09 0s 0s 149113790e-09 0s 0s 149114990e-09 1s 1s 149117270e-09 0s 0s 149124070e-09 0s 0s 149125230e-09 1s 1s 149127510e-09 0s 0s 149134350e-09 0s 0s 149135470e-09 1s 1s 149137750e-09 0s 0s 149144630e-09 0s 0s 149145710e-09 1s 1s 149147990e-09 0s 0s 149154910e-09 0s 0s 149155950e-09 1s 1s 149158230e-09 0s 0s 149165190e-09 0s 0s 149166190e-09 1s 1s 149168470e-09 0s 0s 149175470e-09 0s 0s 149176430e-09 1s 1s 149178710e-09 0s 0s 149185750e-09 0s 0s 149186670e-09 1s 1s 149188950e-09 0s 0s 149196030e-09 0s 0s 149196910e-09 1s 1s 149199190e-09 0s 0s 149206310e-09 0s 0s 149207150e-09 1s 1s 149209430e-09 0s 0s 149216590e-09 0s 0s 149217390e-09 1s 1s 149219670e-09 0s 0s 149226870e-09 0s 0s 149227630e-09 1s 1s 149229910e-09 0s 0s 149237150e-09 0s 0s 149237870e-09 1s 1s 149240150e-09 0s 0s 149247430e-09 0s 0s 149248110e-09 1s 1s 149250390e-09 0s 0s 149257710e-09 0s 0s 149258350e-09 1s 1s 149260630e-09 0s 0s 149267990e-09 0s 0s 149268590e-09 1s 1s 149270870e-09 0s 0s 149278270e-09 0s 0s 149278830e-09 1s 1s 149281110e-09 0s 0s 149288550e-09 0s 0s 149289070e-09 1s 1s 149291350e-09 0s 0s 149298830e-09 0s 0s 149299310e-09 1s 1s 149301590e-09 0s 0s 149309110e-09 0s 0s 149309550e-09 1s 1s 149311830e-09 0s 0s 149319390e-09 0s 0s 149319790e-09 1s 1s 149322070e-09 0s 0s 149329670e-09 0s 0s 149330030e-09 1s 1s 149332310e-09 0s 0s 149339950e-09 0s 0s 149340270e-09 1s 1s 149342550e-09 0s 0s 149350230e-09 0s 0s 149350510e-09 1s 1s 149352790e-09 0s 0s 149360510e-09 0s 0s 149360750e-09 1s 1s 149363030e-09 0s 0s 149370790e-09 0s 0s 149370990e-09 1s 1s 149373270e-09 0s 0s 149381070e-09 0s 0s 149381230e-09 1s 1s 149383510e-09 0s 0s 149391350e-09 0s 0s 149391470e-09 1s 1s 149393750e-09 0s 0s 149401630e-09 0s 0s 149401710e-09 1s 1s 149403990e-09 0s 0s 149411910e-09 0s 0s 149411950e-09 1s 1s 149414230e-09 0s 0s 149422190e-09 1s 1s 149422230e-09 1s 1s 149424510e-09 0s 0s 149432430e-09 1s 1s 149432510e-09 1s 1s 149434750e-09 0s 0s 149442670e-09 1s 1s 149442790e-09 1s 1s 149444990e-09 0s 0s 149452910e-09 1s 1s 149453070e-09 1s 1s 149455230e-09 0s 0s 149463150e-09 1s 1s 149463350e-09 1s 1s 149465470e-09 0s 0s 149473390e-09 1s 1s 149473630e-09 1s 1s 149475710e-09 0s 0s 149483630e-09 1s 1s 149483910e-09 1s 1s 149485950e-09 0s 0s 149493870e-09 1s 1s 149494190e-09 1s 1s 149496190e-09 0s 0s 149504110e-09 1s 1s 149504470e-09 1s 1s 149506430e-09 0s 0s 149514350e-09 1s 1s 149514750e-09 1s 1s 149516670e-09 0s 0s 149524590e-09 1s 1s 149525030e-09 1s 1s 149526910e-09 0s 0s 149534830e-09 1s 1s 149535310e-09 1s 1s 149537150e-09 0s 0s 149545070e-09 1s 1s 149545590e-09 1s 1s 149547390e-09 0s 0s 149555310e-09 1s 1s 149555870e-09 1s 1s 149557630e-09 0s 0s 149565550e-09 1s 1s 149566150e-09 1s 1s 149567870e-09 0s 0s 149575790e-09 1s 1s 149576430e-09 1s 1s 149578110e-09 0s 0s 149586030e-09 1s 1s 149586710e-09 1s 1s 149588350e-09 0s 0s 149596270e-09 1s 1s 149596990e-09 1s 1s 149598590e-09 0s 0s 149606510e-09 1s 1s 149607270e-09 1s 1s 149608830e-09 0s 0s 149616750e-09 1s 1s 149617550e-09 1s 1s 149619070e-09 0s 0s 149626990e-09 1s 1s 149627830e-09 1s 1s 149629310e-09 0s 0s 149637230e-09 1s 1s 149638110e-09 1s 1s 149639550e-09 0s 0s 149647470e-09 1s 1s 149648390e-09 1s 1s 149649790e-09 0s 0s 149657710e-09 1s 1s 149658670e-09 1s 1s 149660030e-09 0s 0s 149667950e-09 1s 1s 149668950e-09 1s 1s 149670270e-09 0s 0s 149678190e-09 1s 1s 149679230e-09 1s 1s 149680510e-09 0s 0s 149688430e-09 1s 1s 149689510e-09 1s 1s 149690750e-09 0s 0s 149698670e-09 1s 1s 149699790e-09 1s 1s 149700990e-09 0s 0s 149708910e-09 1s 1s 149710070e-09 1s 1s 149711230e-09 0s 0s 149719150e-09 1s 1s 149720350e-09 1s 1s 149721470e-09 0s 0s 149729390e-09 1s 1s 149730630e-09 1s 1s 149731710e-09 0s 0s 149739630e-09 1s 1s 149740910e-09 1s 1s 149741950e-09 0s 0s 149749870e-09 1s 1s 149751190e-09 1s 1s 149752190e-09 0s 0s 149760110e-09 1s 1s 149761470e-09 1s 1s 149762430e-09 0s 0s 149770350e-09 1s 1s 149771750e-09 1s 1s 149772670e-09 0s 0s 149780590e-09 1s 1s 149782030e-09 1s 1s 149782910e-09 0s 0s 149790830e-09 1s 1s 149792310e-09 1s 1s 149793150e-09 0s 0s 149801070e-09 1s 1s 149802590e-09 1s 1s 149803390e-09 0s 0s 149811310e-09 1s 1s 149812870e-09 1s 1s 149813630e-09 0s 0s 149821550e-09 1s 1s 149823150e-09 1s 1s 149823870e-09 0s 0s 149831790e-09 1s 1s 149833430e-09 1s 1s 149834110e-09 0s 0s 149842030e-09 1s 1s 149843710e-09 1s 1s 149844350e-09 0s 0s 149852270e-09 1s 1s 149853990e-09 1s 1s 149854590e-09 0s 0s 149862510e-09 1s 1s 149864270e-09 1s 1s 149864830e-09 0s 0s 149872750e-09 1s 1s 149874550e-09 1s 1s 149875070e-09 0s 0s 149882990e-09 1s 1s 149884830e-09 1s 1s 149885310e-09 0s 0s 149893230e-09 1s 1s 149895110e-09 1s 1s 149895550e-09 0s 0s 149903470e-09 1s 1s 149905390e-09 1s 1s 149905790e-09 0s 0s 149913710e-09 1s 1s 149915670e-09 1s 1s 149916030e-09 0s 0s 149923950e-09 1s 1s 149925950e-09 1s 1s 149926270e-09 0s 0s 149934190e-09 1s 1s 149936230e-09 1s 1s 149936510e-09 0s 0s 149944430e-09 1s 1s 149946510e-09 1s 1s 149946750e-09 0s 0s 149954670e-09 1s 1s 149956790e-09 1s 1s 149956990e-09 0s 0s 149964910e-09 1s 1s 149967070e-09 1s 1s 149967230e-09 0s 0s 149975150e-09 1s 1s 149977350e-09 1s 1s 149977470e-09 0s 0s 149985390e-09 1s 1s 149987630e-09 1s 1s 149987710e-09 0s 0s 149995630e-09 1s 1s 149997910e-09 1s 1s 149997950e-09 0s 0s 150005870e-09 1s 1s 150008190e-09 0s 0s 150016110e-09 1s 1s 150018430e-09 0s 0s 150018470e-09 0s 0s 150026350e-09 1s 1s 150028670e-09 0s 0s 150028750e-09 0s 0s 150036590e-09 1s 1s 150038910e-09 0s 0s 150039030e-09 0s 0s 150046830e-09 1s 1s 150049150e-09 0s 0s 150049310e-09 0s 0s 150057070e-09 1s 1s 150059390e-09 0s 0s 150059590e-09 0s 0s 150067310e-09 1s 1s 150069630e-09 0s 0s 150069870e-09 0s 0s 150077550e-09 1s 1s 150079870e-09 0s 0s 150080150e-09 0s 0s 150087790e-09 1s 1s 150090110e-09 0s 0s 150090430e-09 0s 0s 150098030e-09 1s 1s 150100350e-09 0s 0s 150100710e-09 0s 0s 150108270e-09 1s 1s 150110590e-09 0s 0s 150110990e-09 0s 0s 150118510e-09 1s 1s 150120830e-09 0s 0s 150121270e-09 0s 0s 150128750e-09 1s 1s 150131070e-09 0s 0s 150131550e-09 0s 0s 150138990e-09 1s 1s 150141310e-09 0s 0s 150141830e-09 0s 0s 150149230e-09 1s 1s 150151550e-09 0s 0s 150152110e-09 0s 0s 150159470e-09 1s 1s 150161790e-09 0s 0s 150162390e-09 0s 0s 150169710e-09 1s 1s 150172030e-09 0s 0s 150172670e-09 0s 0s 150179950e-09 1s 1s 150182270e-09 0s 0s 150182950e-09 0s 0s 150190190e-09 1s 1s 150192510e-09 0s 0s 150193230e-09 0s 0s 150200430e-09 1s 1s 150202750e-09 0s 0s 150203510e-09 0s 0s 150210670e-09 1s 1s 150212990e-09 0s 0s 150213790e-09 0s 0s 150220910e-09 1s 1s 150223230e-09 0s 0s 150224070e-09 0s 0s 150231150e-09 1s 1s 150233470e-09 0s 0s 150234350e-09 0s 0s 150241390e-09 1s 1s 150243710e-09 0s 0s 150244630e-09 0s 0s 150251630e-09 1s 1s 150253950e-09 0s 0s 150254910e-09 0s 0s 150261870e-09 1s 1s 150264190e-09 0s 0s 150265190e-09 0s 0s 150272110e-09 1s 1s 150274430e-09 0s 0s 150275470e-09 0s 0s 150282350e-09 1s 1s 150284670e-09 0s 0s 150285750e-09 0s 0s 150292590e-09 1s 1s 150294910e-09 0s 0s 150296030e-09 0s 0s 150302830e-09 1s 1s 150305150e-09 0s 0s 150306310e-09 0s 0s 150313070e-09 1s 1s 150315390e-09 0s 0s 150316590e-09 0s 0s 150323310e-09 1s 1s 150325630e-09 0s 0s 150326870e-09 0s 0s 150333550e-09 1s 1s 150335870e-09 0s 0s 150337150e-09 0s 0s 150343790e-09 1s 1s 150346110e-09 0s 0s 150347430e-09 0s 0s 150354030e-09 1s 1s 150356350e-09 0s 0s 150357710e-09 0s 0s 150364270e-09 1s 1s 150366590e-09 0s 0s 150367990e-09 0s 0s 150374510e-09 1s 1s 150376830e-09 0s 0s 150378270e-09 0s 0s 150384750e-09 1s 1s 150387070e-09 0s 0s 150388550e-09 0s 0s 150394990e-09 1s 1s 150397310e-09 0s 0s 150398830e-09 0s 0s 150405230e-09 1s 1s 150407550e-09 0s 0s 150409110e-09 0s 0s 150415470e-09 1s 1s 150417790e-09 0s 0s 150419390e-09 0s 0s 150425710e-09 1s 1s 150428030e-09 0s 0s 150429670e-09 0s 0s 150435950e-09 1s 1s 150438270e-09 0s 0s 150439950e-09 0s 0s 150446190e-09 1s 1s 150448510e-09 0s 0s 150450230e-09 0s 0s 150456430e-09 1s 1s 150458750e-09 0s 0s 150460510e-09 0s 0s 150466670e-09 1s 1s 150468990e-09 0s 0s 150470790e-09 0s 0s 150476910e-09 1s 1s 150479230e-09 0s 0s 150481070e-09 0s 0s 150487150e-09 1s 1s 150489470e-09 0s 0s 150491350e-09 0s 0s 150497390e-09 1s 1s 150499710e-09 0s 0s 150501630e-09 0s 0s 150507630e-09 1s 1s 150509950e-09 0s 0s 150511910e-09 0s 0s 150517870e-09 1s 1s 150520190e-09 0s 0s 150522190e-09 0s 0s 150528110e-09 1s 1s 150530430e-09 0s 0s 150532470e-09 0s 0s 150538350e-09 1s 1s 150540670e-09 0s 0s 150542750e-09 0s 0s 150548590e-09 1s 1s 150550910e-09 0s 0s 150553030e-09 0s 0s 150558830e-09 1s 1s 150561150e-09 0s 0s 150563310e-09 0s 0s 150569070e-09 1s 1s 150571390e-09 0s 0s 150573590e-09 0s 0s 150579310e-09 1s 1s 150581630e-09 0s 0s 150583870e-09 0s 0s 150589550e-09 1s 1s 150591870e-09 0s 0s 150594150e-09 0s 0s 150599790e-09 1s 1s 150602110e-09 0s 0s 150604430e-09 0s 0s 150610030e-09 1s 1s 150612350e-09 0s 0s 150614710e-09 0s 0s 150620270e-09 1s 1s 150622590e-09 0s 0s 150624990e-09 0s 0s 150630510e-09 1s 1s 150632830e-09 0s 0s 150635270e-09 0s 0s 150640750e-09 1s 1s 150643070e-09 0s 0s 150645550e-09 0s 0s 150650990e-09 1s 1s 150653310e-09 0s 0s 150655830e-09 0s 0s 150661230e-09 1s 1s 150663550e-09 0s 0s 150666110e-09 0s 0s 150671470e-09 1s 1s 150673790e-09 0s 0s 150676390e-09 0s 0s 150681710e-09 1s 1s 150684030e-09 0s 0s 150686670e-09 0s 0s 150691950e-09 1s 1s 150694270e-09 0s 0s 150696950e-09 0s 0s 150702190e-09 1s 1s 150704510e-09 0s 0s 150707230e-09 0s 0s 150712430e-09 1s 1s 150714750e-09 0s 0s 150717510e-09 0s 0s 150722670e-09 1s 1s 150724990e-09 0s 0s 150727790e-09 0s 0s 150732910e-09 1s 1s 150735230e-09 0s 0s 150738070e-09 0s 0s 150743150e-09 1s 1s 150745470e-09 0s 0s 150748350e-09 0s 0s 150753390e-09 1s 1s 150755710e-09 0s 0s 150758630e-09 0s 0s 150763630e-09 1s 1s 150765950e-09 0s 0s 150768910e-09 0s 0s 150773870e-09 1s 1s 150776190e-09 0s 0s 150779190e-09 0s 0s 150784110e-09 1s 1s 150786430e-09 0s 0s 150789470e-09 0s 0s 150794350e-09 1s 1s 150796670e-09 0s 0s 150799750e-09 0s 0s 150804590e-09 1s 1s 150806910e-09 0s 0s 150810030e-09 0s 0s 150814830e-09 1s 1s 150817150e-09 0s 0s 150820310e-09 0s 0s 150825070e-09 1s 1s 150827390e-09 0s 0s 150830590e-09 0s 0s 150835310e-09 1s 1s 150837630e-09 0s 0s 150840870e-09 0s 0s 150845550e-09 1s 1s 150847870e-09 0s 0s 150851150e-09 0s 0s 150855790e-09 1s 1s 150858110e-09 0s 0s 150861430e-09 0s 0s 150866030e-09 1s 1s 150868350e-09 0s 0s 150871710e-09 0s 0s 150876270e-09 1s 1s 150878590e-09 0s 0s 150881990e-09 0s 0s 150886510e-09 1s 1s 150888830e-09 0s 0s 150892270e-09 0s 0s 150896750e-09 1s 1s 150899070e-09 0s 0s 150902550e-09 0s 0s 150906990e-09 1s 1s 150909310e-09 0s 0s 150912830e-09 0s 0s 150917230e-09 1s 1s 150919550e-09 0s 0s 150923110e-09 0s 0s 150927470e-09 1s 1s 150929790e-09 0s 0s 150933390e-09 0s 0s 150937710e-09 1s 1s 150940030e-09 0s 0s 150943670e-09 0s 0s 150947950e-09 1s 1s 150950270e-09 0s 0s 150953950e-09 0s 0s 150958190e-09 1s 1s 150960510e-09 0s 0s 150964230e-09 0s 0s 150968430e-09 1s 1s 150970750e-09 0s 0s 150974510e-09 0s 0s 150978670e-09 1s 1s 150980990e-09 0s 0s 150984790e-09 0s 0s 150988910e-09 1s 1s 150991230e-09 0s 0s 150995070e-09 0s 0s 150999150e-09 1s 1s 151001470e-09 0s 0s 151005350e-09 0s 0s 151009390e-09 1s 1s 151011710e-09 0s 0s 151015630e-09 0s 0s 151019630e-09 1s 1s 151021950e-09 0s 0s 151025910e-09 0s 0s 151029870e-09 1s 1s 151032190e-09 0s 0s 151036190e-09 0s 0s 151040110e-09 1s 1s 151042430e-09 0s 0s 151046470e-09 0s 0s 151050350e-09 1s 1s 151052670e-09 0s 0s 151056750e-09 0s 0s 151060590e-09 1s 1s 151062910e-09 0s 0s 151067030e-09 0s 0s 151070830e-09 1s 1s 151073150e-09 0s 0s 151077310e-09 0s 0s 151081070e-09 1s 1s 151083390e-09 0s 0s 151087590e-09 0s 0s 151091310e-09 1s 1s 151093630e-09 0s 0s 151097870e-09 0s 0s 151101550e-09 1s 1s 151103870e-09 0s 0s 151108150e-09 0s 0s 151111790e-09 1s 1s 151114110e-09 0s 0s 151118430e-09 0s 0s 151122030e-09 1s 1s 151124350e-09 0s 0s 151128710e-09 0s 0s 151132270e-09 1s 1s 151134590e-09 0s 0s 151138990e-09 0s 0s 151142510e-09 1s 1s 151144830e-09 0s 0s 151149270e-09 0s 0s 151152750e-09 1s 1s 151155070e-09 0s 0s 151159550e-09 0s 0s 151162990e-09 1s 1s 151165310e-09 0s 0s 151169830e-09 0s 0s 151173230e-09 1s 1s 151175550e-09 0s 0s 151180110e-09 0s 0s 151183470e-09 1s 1s 151185790e-09 0s 0s 151190390e-09 0s 0s 151193710e-09 1s 1s 151196030e-09 0s 0s 151200670e-09 0s 0s 151203950e-09 1s 1s 151206270e-09 0s 0s 151210950e-09 0s 0s 151214190e-09 1s 1s 151216510e-09 0s 0s 151221230e-09 0s 0s 151224430e-09 1s 1s 151226750e-09 0s 0s 151231510e-09 0s 0s 151234670e-09 1s 1s 151236990e-09 0s 0s 151241790e-09 0s 0s 151244910e-09 1s 1s 151247230e-09 0s 0s 151252070e-09 0s 0s 151255150e-09 1s 1s 151257470e-09 0s 0s 151262350e-09 0s 0s 151265390e-09 1s 1s 151267710e-09 0s 0s 151272630e-09 0s 0s 151275630e-09 1s 1s 151277950e-09 0s 0s 151282910e-09 0s 0s 151285870e-09 1s 1s 151288190e-09 0s 0s 151293190e-09 0s 0s 151296110e-09 1s 1s 151298430e-09 0s 0s 151303470e-09 0s 0s 151306350e-09 1s 1s 151308670e-09 0s 0s 151313750e-09 0s 0s 151316590e-09 1s 1s 151318910e-09 0s 0s 151324030e-09 0s 0s 151326830e-09 1s 1s 151329150e-09 0s 0s 151334310e-09 0s 0s 151337070e-09 1s 1s 151339390e-09 0s 0s 151344590e-09 0s 0s 151347310e-09 1s 1s 151349630e-09 0s 0s 151354870e-09 0s 0s 151357550e-09 1s 1s 151359870e-09 0s 0s 151365150e-09 0s 0s 151367790e-09 1s 1s 151370110e-09 0s 0s 151375430e-09 0s 0s 151378030e-09 1s 1s 151380350e-09 0s 0s 151385710e-09 0s 0s 151388270e-09 1s 1s 151390590e-09 0s 0s 151395990e-09 0s 0s 151398510e-09 1s 1s 151400830e-09 0s 0s 151406270e-09 0s 0s 151408750e-09 1s 1s 151411070e-09 0s 0s 151416550e-09 0s 0s 151418990e-09 1s 1s 151421310e-09 0s 0s 151426830e-09 0s 0s 151429230e-09 1s 1s 151431550e-09 0s 0s 151437110e-09 0s 0s 151439470e-09 1s 1s 151441790e-09 0s 0s 151447390e-09 0s 0s 151449710e-09 1s 1s 151452030e-09 0s 0s 151457670e-09 0s 0s 151459950e-09 1s 1s 151462270e-09 0s 0s 151467950e-09 0s 0s 151470190e-09 1s 1s 151472510e-09 0s 0s 151478230e-09 0s 0s 151480430e-09 1s 1s 151482750e-09 0s 0s 151488510e-09 0s 0s 151490670e-09 1s 1s 151492990e-09 0s 0s 151498790e-09 0s 0s 151500910e-09 1s 1s 151503230e-09 0s 0s 151509070e-09 0s 0s 151511150e-09 1s 1s 151513470e-09 0s 0s 151519350e-09 0s 0s 151521390e-09 1s 1s 151523710e-09 0s 0s 151529630e-09 0s 0s 151531630e-09 1s 1s 151533950e-09 0s 0s 151539910e-09 0s 0s 151541870e-09 1s 1s 151544190e-09 0s 0s 151550190e-09 0s 0s 151552110e-09 1s 1s 151554430e-09 0s 0s 151560470e-09 0s 0s 151562350e-09 1s 1s 151564670e-09 0s 0s 151570750e-09 0s 0s 151572590e-09 1s 1s 151574910e-09 0s 0s 151581030e-09 0s 0s 151582830e-09 1s 1s 151585150e-09 0s 0s 151591310e-09 0s 0s 151593070e-09 1s 1s 151595390e-09 0s 0s 151601590e-09 0s 0s 151603310e-09 1s 1s 151605630e-09 0s 0s 151611870e-09 0s 0s 151613550e-09 1s 1s 151615870e-09 0s 0s 151622150e-09 0s 0s 151623790e-09 1s 1s 151626110e-09 0s 0s 151632430e-09 0s 0s 151634030e-09 1s 1s 151636350e-09 0s 0s 151642710e-09 0s 0s 151644270e-09 1s 1s 151646590e-09 0s 0s 151652990e-09 0s 0s 151654510e-09 1s 1s 151656830e-09 0s 0s 151663270e-09 0s 0s 151664750e-09 1s 1s 151667070e-09 0s 0s 151673550e-09 0s 0s 151674990e-09 1s 1s 151677310e-09 0s 0s 151683830e-09 0s 0s 151685230e-09 1s 1s 151687550e-09 0s 0s 151694110e-09 0s 0s 151695470e-09 1s 1s 151697790e-09 0s 0s 151704390e-09 0s 0s 151705710e-09 1s 1s 151708030e-09 0s 0s 151714670e-09 0s 0s 151715950e-09 1s 1s 151718270e-09 0s 0s 151724950e-09 0s 0s 151726190e-09 1s 1s 151728510e-09 0s 0s 151735230e-09 0s 0s 151736430e-09 1s 1s 151738750e-09 0s 0s 151745510e-09 0s 0s 151746670e-09 1s 1s 151748990e-09 0s 0s 151755790e-09 0s 0s 151756910e-09 1s 1s 151759230e-09 0s 0s 151766070e-09 0s 0s 151767150e-09 1s 1s 151769470e-09 0s 0s 151776350e-09 0s 0s 151777390e-09 1s 1s 151779710e-09 0s 0s 151786630e-09 0s 0s 151787630e-09 1s 1s 151789950e-09 0s 0s 151796910e-09 0s 0s 151797870e-09 1s 1s 151800190e-09 0s 0s 151807190e-09 0s 0s 151808110e-09 1s 1s 151810430e-09 0s 0s 151817470e-09 0s 0s 151818350e-09 1s 1s 151820670e-09 0s 0s 151827750e-09 0s 0s 151828590e-09 1s 1s 151830910e-09 0s 0s 151838030e-09 0s 0s 151838830e-09 1s 1s 151841150e-09 0s 0s 151848310e-09 0s 0s 151849070e-09 1s 1s 151851390e-09 0s 0s 151858590e-09 0s 0s 151859310e-09 1s 1s 151861630e-09 0s 0s 151868870e-09 0s 0s 151869550e-09 1s 1s 151871870e-09 0s 0s 151879150e-09 0s 0s 151879790e-09 1s 1s 151882110e-09 0s 0s 151889430e-09 0s 0s 151890030e-09 1s 1s 151892350e-09 0s 0s 151899710e-09 0s 0s 151900270e-09 1s 1s 151902590e-09 0s 0s 151909990e-09 0s 0s 151910510e-09 1s 1s 151912830e-09 0s 0s 151920270e-09 0s 0s 151920750e-09 1s 1s 151923070e-09 0s 0s 151930550e-09 0s 0s 151930990e-09 1s 1s 151933310e-09 0s 0s 151940830e-09 0s 0s 151941230e-09 1s 1s 151943550e-09 0s 0s 151951110e-09 0s 0s 151951470e-09 1s 1s 151953790e-09 0s 0s 151961390e-09 0s 0s 151961710e-09 1s 1s 151964030e-09 0s 0s 151971670e-09 0s 0s 151971950e-09 1s 1s 151974270e-09 0s 0s 151981950e-09 0s 0s 151982190e-09 1s 1s 151984510e-09 0s 0s 151992230e-09 0s 0s 151992430e-09 1s 1s 151994750e-09 0s 0s 152002510e-09 0s 0s 152002670e-09 1s 1s 152004990e-09 0s 0s 152012790e-09 0s 0s 152012910e-09 1s 1s 152015230e-09 0s 0s 152023070e-09 0s 0s 152023150e-09 1s 1s 152025470e-09 0s 0s 152033350e-09 0s 0s 152033390e-09 1s 1s 152035710e-09 0s 0s 152043630e-09 1s 1s 152043670e-09 1s 1s 152045990e-09 0s 0s 152053870e-09 1s 1s 152053950e-09 1s 1s 152056230e-09 0s 0s 152064110e-09 1s 1s 152064230e-09 1s 1s 152066470e-09 0s 0s 152074350e-09 1s 1s 152074510e-09 1s 1s 152076710e-09 0s 0s 152084590e-09 1s 1s 152084790e-09 1s 1s 152086950e-09 0s 0s 152094830e-09 1s 1s 152095070e-09 1s 1s 152097190e-09 0s 0s 152105070e-09 1s 1s 152105350e-09 1s 1s 152107430e-09 0s 0s 152115310e-09 1s 1s 152115630e-09 1s 1s 152117670e-09 0s 0s 152125550e-09 1s 1s 152125910e-09 1s 1s 152127910e-09 0s 0s 152135790e-09 1s 1s 152136190e-09 1s 1s 152138150e-09 0s 0s 152146030e-09 1s 1s 152146470e-09 1s 1s 152148390e-09 0s 0s 152156270e-09 1s 1s 152156750e-09 1s 1s 152158630e-09 0s 0s 152166510e-09 1s 1s 152167030e-09 1s 1s 152168870e-09 0s 0s 152176750e-09 1s 1s 152177310e-09 1s 1s 152179110e-09 0s 0s 152186990e-09 1s 1s 152187590e-09 1s 1s 152189350e-09 0s 0s 152197230e-09 1s 1s 152197870e-09 1s 1s 152199590e-09 0s 0s 152207470e-09 1s 1s 152208150e-09 1s 1s 152209830e-09 0s 0s 152217710e-09 1s 1s 152218430e-09 1s 1s 152220070e-09 0s 0s 152227950e-09 1s 1s 152228710e-09 1s 1s 152230310e-09 0s 0s 152238190e-09 1s 1s 152238990e-09 1s 1s 152240550e-09 0s 0s 152248430e-09 1s 1s 152249270e-09 1s 1s 152250790e-09 0s 0s 152258670e-09 1s 1s 152259550e-09 1s 1s 152261030e-09 0s 0s 152268910e-09 1s 1s 152269830e-09 1s 1s 152271270e-09 0s 0s 152279150e-09 1s 1s 152280110e-09 1s 1s 152281510e-09 0s 0s 152289390e-09 1s 1s 152290390e-09 1s 1s 152291750e-09 0s 0s 152299630e-09 1s 1s 152300670e-09 1s 1s 152301990e-09 0s 0s 152309870e-09 1s 1s 152310950e-09 1s 1s 152312230e-09 0s 0s 152320110e-09 1s 1s 152321230e-09 1s 1s 152322470e-09 0s 0s 152330350e-09 1s 1s 152331510e-09 1s 1s 152332710e-09 0s 0s 152340590e-09 1s 1s 152341790e-09 1s 1s 152342950e-09 0s 0s 152350830e-09 1s 1s 152352070e-09 1s 1s 152353190e-09 0s 0s 152361070e-09 1s 1s 152362350e-09 1s 1s 152363430e-09 0s 0s 152371310e-09 1s 1s 152372630e-09 1s 1s 152373670e-09 0s 0s 152381550e-09 1s 1s 152382910e-09 1s 1s 152383910e-09 0s 0s 152391790e-09 1s 1s 152393190e-09 1s 1s 152394150e-09 0s 0s 152402030e-09 1s 1s 152403470e-09 1s 1s 152404390e-09 0s 0s 152412270e-09 1s 1s 152413750e-09 1s 1s 152414630e-09 0s 0s 152422510e-09 1s 1s 152424030e-09 1s 1s 152424870e-09 0s 0s 152432750e-09 1s 1s 152434310e-09 1s 1s 152435110e-09 0s 0s 152442990e-09 1s 1s 152444590e-09 1s 1s 152445350e-09 0s 0s 152453230e-09 1s 1s 152454870e-09 1s 1s 152455590e-09 0s 0s 152463470e-09 1s 1s 152465150e-09 1s 1s 152465830e-09 0s 0s 152473710e-09 1s 1s 152475430e-09 1s 1s 152476070e-09 0s 0s 152483950e-09 1s 1s 152485710e-09 1s 1s 152486310e-09 0s 0s 152494190e-09 1s 1s 152495990e-09 1s 1s 152496550e-09 0s 0s 152504430e-09 1s 1s 152506270e-09 1s 1s 152506790e-09 0s 0s 152514670e-09 1s 1s 152516550e-09 1s 1s 152517030e-09 0s 0s 152524910e-09 1s 1s 152526830e-09 1s 1s 152527270e-09 0s 0s 152535150e-09 1s 1s 152537110e-09 1s 1s 152537510e-09 0s 0s 152545390e-09 1s 1s 152547390e-09 1s 1s 152547750e-09 0s 0s 152555630e-09 1s 1s 152557670e-09 1s 1s 152557990e-09 0s 0s 152565870e-09 1s 1s 152567950e-09 1s 1s 152568230e-09 0s 0s 152576110e-09 1s 1s 152578230e-09 1s 1s 152578470e-09 0s 0s 152586350e-09 1s 1s 152588510e-09 1s 1s 152588710e-09 0s 0s 152596590e-09 1s 1s 152598790e-09 1s 1s 152598950e-09 0s 0s 152606830e-09 1s 1s 152609070e-09 1s 1s 152609190e-09 0s 0s 152617070e-09 1s 1s 152619350e-09 1s 1s 152619430e-09 0s 0s 152627310e-09 1s 1s 152629630e-09 1s 1s 152629670e-09 0s 0s 152637550e-09 1s 1s 152639910e-09 0s 0s 152647790e-09 1s 1s 152650150e-09 0s 0s 152650190e-09 0s 0s 152658030e-09 1s 1s 152660390e-09 0s 0s 152660470e-09 0s 0s 152668270e-09 1s 1s 152670630e-09 0s 0s 152670750e-09 0s 0s 152678510e-09 1s 1s 152680870e-09 0s 0s 152681030e-09 0s 0s 152688750e-09 1s 1s 152691110e-09 0s 0s 152691310e-09 0s 0s 152698990e-09 1s 1s 152701350e-09 0s 0s 152701590e-09 0s 0s 152709230e-09 1s 1s 152711590e-09 0s 0s 152711870e-09 0s 0s 152719470e-09 1s 1s 152721830e-09 0s 0s 152722150e-09 0s 0s 152729710e-09 1s 1s 152732070e-09 0s 0s 152732430e-09 0s 0s 152739950e-09 1s 1s 152742310e-09 0s 0s 152742710e-09 0s 0s 152750190e-09 1s 1s 152752550e-09 0s 0s 152752990e-09 0s 0s 152760430e-09 1s 1s 152762790e-09 0s 0s 152763270e-09 0s 0s 152770670e-09 1s 1s 152773030e-09 0s 0s 152773550e-09 0s 0s 152780910e-09 1s 1s 152783270e-09 0s 0s 152783830e-09 0s 0s 152791150e-09 1s 1s 152793510e-09 0s 0s 152794110e-09 0s 0s 152801390e-09 1s 1s 152803750e-09 0s 0s 152804390e-09 0s 0s 152811630e-09 1s 1s 152813990e-09 0s 0s 152814670e-09 0s 0s 152821870e-09 1s 1s 152824230e-09 0s 0s 152824950e-09 0s 0s 152832110e-09 1s 1s 152834470e-09 0s 0s 152835230e-09 0s 0s 152842350e-09 1s 1s 152844710e-09 0s 0s 152845510e-09 0s 0s 152852590e-09 1s 1s 152854950e-09 0s 0s 152855790e-09 0s 0s 152862830e-09 1s 1s 152865190e-09 0s 0s 152866070e-09 0s 0s 152873070e-09 1s 1s 152875430e-09 0s 0s 152876350e-09 0s 0s 152883310e-09 1s 1s 152885670e-09 0s 0s 152886630e-09 0s 0s 152893550e-09 1s 1s 152895910e-09 0s 0s 152896910e-09 0s 0s 152903790e-09 1s 1s 152906150e-09 0s 0s 152907190e-09 0s 0s 152914030e-09 1s 1s 152916390e-09 0s 0s 152917470e-09 0s 0s 152924270e-09 1s 1s 152926630e-09 0s 0s 152927750e-09 0s 0s 152934510e-09 1s 1s 152936870e-09 0s 0s 152938030e-09 0s 0s 152944750e-09 1s 1s 152947110e-09 0s 0s 152948310e-09 0s 0s 152954990e-09 1s 1s 152957350e-09 0s 0s 152958590e-09 0s 0s 152965230e-09 1s 1s 152967590e-09 0s 0s 152968870e-09 0s 0s 152975470e-09 1s 1s 152977830e-09 0s 0s 152979150e-09 0s 0s 152985710e-09 1s 1s 152988070e-09 0s 0s 152989430e-09 0s 0s 152995950e-09 1s 1s 152998310e-09 0s 0s 152999710e-09 0s 0s 153006190e-09 1s 1s 153008550e-09 0s 0s 153009990e-09 0s 0s 153016430e-09 1s 1s 153018790e-09 0s 0s 153020270e-09 0s 0s 153026670e-09 1s 1s 153029030e-09 0s 0s 153030550e-09 0s 0s 153036910e-09 1s 1s 153039270e-09 0s 0s 153040830e-09 0s 0s 153047150e-09 1s 1s 153049510e-09 0s 0s 153051110e-09 0s 0s 153057390e-09 1s 1s 153059750e-09 0s 0s 153061390e-09 0s 0s 153067630e-09 1s 1s 153069990e-09 0s 0s 153071670e-09 0s 0s 153077870e-09 1s 1s 153080230e-09 0s 0s 153081950e-09 0s 0s 153088110e-09 1s 1s 153090470e-09 0s 0s 153092230e-09 0s 0s 153098350e-09 1s 1s 153100710e-09 0s 0s 153102510e-09 0s 0s 153108590e-09 1s 1s 153110950e-09 0s 0s 153112790e-09 0s 0s 153118830e-09 1s 1s 153121190e-09 0s 0s 153123070e-09 0s 0s 153129070e-09 1s 1s 153131430e-09 0s 0s 153133350e-09 0s 0s 153139310e-09 1s 1s 153141670e-09 0s 0s 153143630e-09 0s 0s 153149550e-09 1s 1s 153151910e-09 0s 0s 153153910e-09 0s 0s 153159790e-09 1s 1s 153162150e-09 0s 0s 153164190e-09 0s 0s 153170030e-09 1s 1s 153172390e-09 0s 0s 153174470e-09 0s 0s 153180270e-09 1s 1s 153182630e-09 0s 0s 153184750e-09 0s 0s 153190510e-09 1s 1s 153192870e-09 0s 0s 153195030e-09 0s 0s 153200750e-09 1s 1s 153203110e-09 0s 0s 153205310e-09 0s 0s 153210990e-09 1s 1s 153213350e-09 0s 0s 153215590e-09 0s 0s 153221230e-09 1s 1s 153223590e-09 0s 0s 153225870e-09 0s 0s 153231470e-09 1s 1s 153233830e-09 0s 0s 153236150e-09 0s 0s 153241710e-09 1s 1s 153244070e-09 0s 0s 153246430e-09 0s 0s 153251950e-09 1s 1s 153254310e-09 0s 0s 153256710e-09 0s 0s 153262190e-09 1s 1s 153264550e-09 0s 0s 153266990e-09 0s 0s 153272430e-09 1s 1s 153274790e-09 0s 0s 153277270e-09 0s 0s 153282670e-09 1s 1s 153285030e-09 0s 0s 153287550e-09 0s 0s 153292910e-09 1s 1s 153295270e-09 0s 0s 153297830e-09 0s 0s 153303150e-09 1s 1s 153305510e-09 0s 0s 153308110e-09 0s 0s 153313390e-09 1s 1s 153315750e-09 0s 0s 153318390e-09 0s 0s 153323630e-09 1s 1s 153325990e-09 0s 0s 153328670e-09 0s 0s 153333870e-09 1s 1s 153336230e-09 0s 0s 153338950e-09 0s 0s 153344110e-09 1s 1s 153346470e-09 0s 0s 153349230e-09 0s 0s 153354350e-09 1s 1s 153356710e-09 0s 0s 153359510e-09 0s 0s 153364590e-09 1s 1s 153366950e-09 0s 0s 153369790e-09 0s 0s 153374830e-09 1s 1s 153377190e-09 0s 0s 153380070e-09 0s 0s 153385070e-09 1s 1s 153387430e-09 0s 0s 153390350e-09 0s 0s 153395310e-09 1s 1s 153397670e-09 0s 0s 153400630e-09 0s 0s 153405550e-09 1s 1s 153407910e-09 0s 0s 153410910e-09 0s 0s 153415790e-09 1s 1s 153418150e-09 0s 0s 153421190e-09 0s 0s 153426030e-09 1s 1s 153428390e-09 0s 0s 153431470e-09 0s 0s 153436270e-09 1s 1s 153438630e-09 0s 0s 153441750e-09 0s 0s 153446510e-09 1s 1s 153448870e-09 0s 0s 153452030e-09 0s 0s 153456750e-09 1s 1s 153459110e-09 0s 0s 153462310e-09 0s 0s 153466990e-09 1s 1s 153469350e-09 0s 0s 153472590e-09 0s 0s 153477230e-09 1s 1s 153479590e-09 0s 0s 153482870e-09 0s 0s 153487470e-09 1s 1s 153489830e-09 0s 0s 153493150e-09 0s 0s 153497710e-09 1s 1s 153500070e-09 0s 0s 153503430e-09 0s 0s 153507950e-09 1s 1s 153510310e-09 0s 0s 153513710e-09 0s 0s 153518190e-09 1s 1s 153520550e-09 0s 0s 153523990e-09 0s 0s 153528430e-09 1s 1s 153530790e-09 0s 0s 153534270e-09 0s 0s 153538670e-09 1s 1s 153541030e-09 0s 0s 153544550e-09 0s 0s 153548910e-09 1s 1s 153551270e-09 0s 0s 153554830e-09 0s 0s 153559150e-09 1s 1s 153561510e-09 0s 0s 153565110e-09 0s 0s 153569390e-09 1s 1s 153571750e-09 0s 0s 153575390e-09 0s 0s 153579630e-09 1s 1s 153581990e-09 0s 0s 153585670e-09 0s 0s 153589870e-09 1s 1s 153592230e-09 0s 0s 153595950e-09 0s 0s 153600110e-09 1s 1s 153602470e-09 0s 0s 153606230e-09 0s 0s 153610350e-09 1s 1s 153612710e-09 0s 0s 153616510e-09 0s 0s 153620590e-09 1s 1s 153622950e-09 0s 0s 153626790e-09 0s 0s 153630830e-09 1s 1s 153633190e-09 0s 0s 153637070e-09 0s 0s 153641070e-09 1s 1s 153643430e-09 0s 0s 153647350e-09 0s 0s 153651310e-09 1s 1s 153653670e-09 0s 0s 153657630e-09 0s 0s 153661550e-09 1s 1s 153663910e-09 0s 0s 153667910e-09 0s 0s 153671790e-09 1s 1s 153674150e-09 0s 0s 153678190e-09 0s 0s 153682030e-09 1s 1s 153684390e-09 0s 0s 153688470e-09 0s 0s 153692270e-09 1s 1s 153694630e-09 0s 0s 153698750e-09 0s 0s 153702510e-09 1s 1s 153704870e-09 0s 0s 153709030e-09 0s 0s 153712750e-09 1s 1s 153715110e-09 0s 0s 153719310e-09 0s 0s 153722990e-09 1s 1s 153725350e-09 0s 0s 153729590e-09 0s 0s 153733230e-09 1s 1s 153735590e-09 0s 0s 153739870e-09 0s 0s 153743470e-09 1s 1s 153745830e-09 0s 0s 153750150e-09 0s 0s 153753710e-09 1s 1s 153756070e-09 0s 0s 153760430e-09 0s 0s 153763950e-09 1s 1s 153766310e-09 0s 0s 153770710e-09 0s 0s 153774190e-09 1s 1s 153776550e-09 0s 0s 153780990e-09 0s 0s 153784430e-09 1s 1s 153786790e-09 0s 0s 153791270e-09 0s 0s 153794670e-09 1s 1s 153797030e-09 0s 0s 153801550e-09 0s 0s 153804910e-09 1s 1s 153807270e-09 0s 0s 153811830e-09 0s 0s 153815150e-09 1s 1s 153817510e-09 0s 0s 153822110e-09 0s 0s 153825390e-09 1s 1s 153827750e-09 0s 0s 153832390e-09 0s 0s 153835630e-09 1s 1s 153837990e-09 0s 0s 153842670e-09 0s 0s 153845870e-09 1s 1s 153848230e-09 0s 0s 153852950e-09 0s 0s 153856110e-09 1s 1s 153858470e-09 0s 0s 153863230e-09 0s 0s 153866350e-09 1s 1s 153868710e-09 0s 0s 153873510e-09 0s 0s 153876590e-09 1s 1s 153878950e-09 0s 0s 153883790e-09 0s 0s 153886830e-09 1s 1s 153889190e-09 0s 0s 153894070e-09 0s 0s 153897070e-09 1s 1s 153899430e-09 0s 0s 153904350e-09 0s 0s 153907310e-09 1s 1s 153909670e-09 0s 0s 153914630e-09 0s 0s 153917550e-09 1s 1s 153919910e-09 0s 0s 153924910e-09 0s 0s 153927790e-09 1s 1s 153930150e-09 0s 0s 153935190e-09 0s 0s 153938030e-09 1s 1s 153940390e-09 0s 0s 153945470e-09 0s 0s 153948270e-09 1s 1s 153950630e-09 0s 0s 153955750e-09 0s 0s 153958510e-09 1s 1s 153960870e-09 0s 0s 153966030e-09 0s 0s 153968750e-09 1s 1s 153971110e-09 0s 0s 153976310e-09 0s 0s 153978990e-09 1s 1s 153981350e-09 0s 0s 153986590e-09 0s 0s 153989230e-09 1s 1s 153991590e-09 0s 0s 153996870e-09 0s 0s 153999470e-09 1s 1s 154001830e-09 0s 0s 154007150e-09 0s 0s 154009710e-09 1s 1s 154012070e-09 0s 0s 154017430e-09 0s 0s 154019950e-09 1s 1s 154022310e-09 0s 0s 154027710e-09 0s 0s 154030190e-09 1s 1s 154032550e-09 0s 0s 154037990e-09 0s 0s 154040430e-09 1s 1s 154042790e-09 0s 0s 154048270e-09 0s 0s 154050670e-09 1s 1s 154053030e-09 0s 0s 154058550e-09 0s 0s 154060910e-09 1s 1s 154063270e-09 0s 0s 154068830e-09 0s 0s 154071150e-09 1s 1s 154073510e-09 0s 0s 154079110e-09 0s 0s 154081390e-09 1s 1s 154083750e-09 0s 0s 154089390e-09 0s 0s 154091630e-09 1s 1s 154093990e-09 0s 0s 154099670e-09 0s 0s 154101870e-09 1s 1s 154104230e-09 0s 0s 154109950e-09 0s 0s 154112110e-09 1s 1s 154114470e-09 0s 0s 154120230e-09 0s 0s 154122350e-09 1s 1s 154124710e-09 0s 0s 154130510e-09 0s 0s 154132590e-09 1s 1s 154134950e-09 0s 0s 154140790e-09 0s 0s 154142830e-09 1s 1s 154145190e-09 0s 0s 154151070e-09 0s 0s 154153070e-09 1s 1s 154155430e-09 0s 0s 154161350e-09 0s 0s 154163310e-09 1s 1s 154165670e-09 0s 0s 154171630e-09 0s 0s 154173550e-09 1s 1s 154175910e-09 0s 0s 154181910e-09 0s 0s 154183790e-09 1s 1s 154186150e-09 0s 0s 154192190e-09 0s 0s 154194030e-09 1s 1s 154196390e-09 0s 0s 154202470e-09 0s 0s 154204270e-09 1s 1s 154206630e-09 0s 0s 154212750e-09 0s 0s 154214510e-09 1s 1s 154216870e-09 0s 0s 154223030e-09 0s 0s 154224750e-09 1s 1s 154227110e-09 0s 0s 154233310e-09 0s 0s 154234990e-09 1s 1s 154237350e-09 0s 0s 154243590e-09 0s 0s 154245230e-09 1s 1s 154247590e-09 0s 0s 154253870e-09 0s 0s 154255470e-09 1s 1s 154257830e-09 0s 0s 154264150e-09 0s 0s 154265710e-09 1s 1s 154268070e-09 0s 0s 154274430e-09 0s 0s 154275950e-09 1s 1s 154278310e-09 0s 0s 154284710e-09 0s 0s 154286190e-09 1s 1s 154288550e-09 0s 0s 154294990e-09 0s 0s 154296430e-09 1s 1s 154298790e-09 0s 0s 154305270e-09 0s 0s 154306670e-09 1s 1s 154309030e-09 0s 0s 154315550e-09 0s 0s 154316910e-09 1s 1s 154319270e-09 0s 0s 154325830e-09 0s 0s 154327150e-09 1s 1s 154329510e-09 0s 0s 154336110e-09 0s 0s 154337390e-09 1s 1s 154339750e-09 0s 0s 154346390e-09 0s 0s 154347630e-09 1s 1s 154349990e-09 0s 0s 154356670e-09 0s 0s 154357870e-09 1s 1s 154360230e-09 0s 0s 154366950e-09 0s 0s 154368110e-09 1s 1s 154370470e-09 0s 0s 154377230e-09 0s 0s 154378350e-09 1s 1s 154380710e-09 0s 0s 154387510e-09 0s 0s 154388590e-09 1s 1s 154390950e-09 0s 0s 154397790e-09 0s 0s 154398830e-09 1s 1s 154401190e-09 0s 0s 154408070e-09 0s 0s 154409070e-09 1s 1s 154411430e-09 0s 0s 154418350e-09 0s 0s 154419310e-09 1s 1s 154421670e-09 0s 0s 154428630e-09 0s 0s 154429550e-09 1s 1s 154431910e-09 0s 0s 154438910e-09 0s 0s 154439790e-09 1s 1s 154442150e-09 0s 0s 154449190e-09 0s 0s 154450030e-09 1s 1s 154452390e-09 0s 0s 154459470e-09 0s 0s 154460270e-09 1s 1s 154462630e-09 0s 0s 154469750e-09 0s 0s 154470510e-09 1s 1s 154472870e-09 0s 0s 154480030e-09 0s 0s 154480750e-09 1s 1s 154483110e-09 0s 0s 154490310e-09 0s 0s 154490990e-09 1s 1s 154493350e-09 0s 0s 154500590e-09 0s 0s 154501230e-09 1s 1s 154503590e-09 0s 0s 154510870e-09 0s 0s 154511470e-09 1s 1s 154513830e-09 0s 0s 154521150e-09 0s 0s 154521710e-09 1s 1s 154524070e-09 0s 0s 154531430e-09 0s 0s 154531950e-09 1s 1s 154534310e-09 0s 0s 154541710e-09 0s 0s 154542190e-09 1s 1s 154544550e-09 0s 0s 154551990e-09 0s 0s 154552430e-09 1s 1s 154554790e-09 0s 0s 154562270e-09 0s 0s 154562670e-09 1s 1s 154565030e-09 0s 0s 154572550e-09 0s 0s 154572910e-09 1s 1s 154575270e-09 0s 0s 154582830e-09 0s 0s 154583150e-09 1s 1s 154585510e-09 0s 0s 154593110e-09 0s 0s 154593390e-09 1s 1s 154595750e-09 0s 0s 154603390e-09 0s 0s 154603630e-09 1s 1s 154605990e-09 0s 0s 154613670e-09 0s 0s 154613870e-09 1s 1s 154616230e-09 0s 0s 154623950e-09 0s 0s 154624110e-09 1s 1s 154626470e-09 0s 0s 154634230e-09 0s 0s 154634350e-09 1s 1s 154636710e-09 0s 0s 154644510e-09 0s 0s 154644590e-09 1s 1s 154646950e-09 0s 0s 154654790e-09 0s 0s 154654830e-09 1s 1s 154657190e-09 0s 0s 154665070e-09 1s 1s 154665110e-09 1s 1s 154667470e-09 0s 0s 154675310e-09 1s 1s 154675390e-09 1s 1s 154677710e-09 0s 0s 154685550e-09 1s 1s 154685670e-09 1s 1s 154687950e-09 0s 0s 154695790e-09 1s 1s 154695950e-09 1s 1s 154698190e-09 0s 0s 154706030e-09 1s 1s 154706230e-09 1s 1s 154708430e-09 0s 0s 154716270e-09 1s 1s 154716510e-09 1s 1s 154718670e-09 0s 0s 154726510e-09 1s 1s 154726790e-09 1s 1s 154728910e-09 0s 0s 154736750e-09 1s 1s 154737070e-09 1s 1s 154739150e-09 0s 0s 154746990e-09 1s 1s 154747350e-09 1s 1s 154749390e-09 0s 0s 154757230e-09 1s 1s 154757630e-09 1s 1s 154759630e-09 0s 0s 154767470e-09 1s 1s 154767910e-09 1s 1s 154769870e-09 0s 0s 154777710e-09 1s 1s 154778190e-09 1s 1s 154780110e-09 0s 0s 154787950e-09 1s 1s 154788470e-09 1s 1s 154790350e-09 0s 0s 154798190e-09 1s 1s 154798750e-09 1s 1s 154800590e-09 0s 0s 154808430e-09 1s 1s 154809030e-09 1s 1s 154810830e-09 0s 0s 154818670e-09 1s 1s 154819310e-09 1s 1s 154821070e-09 0s 0s 154828910e-09 1s 1s 154829590e-09 1s 1s 154831310e-09 0s 0s 154839150e-09 1s 1s 154839870e-09 1s 1s 154841550e-09 0s 0s 154849390e-09 1s 1s 154850150e-09 1s 1s 154851790e-09 0s 0s 154859630e-09 1s 1s 154860430e-09 1s 1s 154862030e-09 0s 0s 154869870e-09 1s 1s 154870710e-09 1s 1s 154872270e-09 0s 0s 154880110e-09 1s 1s 154880990e-09 1s 1s 154882510e-09 0s 0s 154890350e-09 1s 1s 154891270e-09 1s 1s 154892750e-09 0s 0s 154900590e-09 1s 1s 154901550e-09 1s 1s 154902990e-09 0s 0s 154910830e-09 1s 1s 154911830e-09 1s 1s 154913230e-09 0s 0s 154921070e-09 1s 1s 154922110e-09 1s 1s 154923470e-09 0s 0s 154931310e-09 1s 1s 154932390e-09 1s 1s 154933710e-09 0s 0s 154941550e-09 1s 1s 154942670e-09 1s 1s 154943950e-09 0s 0s 154951790e-09 1s 1s 154952950e-09 1s 1s 154954190e-09 0s 0s 154962030e-09 1s 1s 154963230e-09 1s 1s 154964430e-09 0s 0s 154972270e-09 1s 1s 154973510e-09 1s 1s 154974670e-09 0s 0s 154982510e-09 1s 1s 154983790e-09 1s 1s 154984910e-09 0s 0s 154992750e-09 1s 1s 154994070e-09 1s 1s 154995150e-09 0s 0s 155002990e-09 1s 1s 155004350e-09 1s 1s 155005390e-09 0s 0s 155013230e-09 1s 1s 155014630e-09 1s 1s 155015630e-09 0s 0s 155023470e-09 1s 1s 155024910e-09 1s 1s 155025870e-09 0s 0s 155033710e-09 1s 1s 155035190e-09 1s 1s 155036110e-09 0s 0s 155043950e-09 1s 1s 155045470e-09 1s 1s 155046350e-09 0s 0s 155054190e-09 1s 1s 155055750e-09 1s 1s 155056590e-09 0s 0s 155064430e-09 1s 1s 155066030e-09 1s 1s 155066830e-09 0s 0s 155074670e-09 1s 1s 155076310e-09 1s 1s 155077070e-09 0s 0s 155084910e-09 1s 1s 155086590e-09 1s 1s 155087310e-09 0s 0s 155095150e-09 1s 1s 155096870e-09 1s 1s 155097550e-09 0s 0s 155105390e-09 1s 1s 155107150e-09 1s 1s 155107790e-09 0s 0s 155115630e-09 1s 1s 155117430e-09 1s 1s 155118030e-09 0s 0s 155125870e-09 1s 1s 155127710e-09 1s 1s 155128270e-09 0s 0s 155136110e-09 1s 1s 155137990e-09 1s 1s 155138510e-09 0s 0s 155146350e-09 1s 1s 155148270e-09 1s 1s 155148750e-09 0s 0s 155156590e-09 1s 1s 155158550e-09 1s 1s 155158990e-09 0s 0s 155166830e-09 1s 1s 155168830e-09 1s 1s 155169230e-09 0s 0s 155177070e-09 1s 1s 155179110e-09 1s 1s 155179470e-09 0s 0s 155187310e-09 1s 1s 155189390e-09 1s 1s 155189710e-09 0s 0s 155197550e-09 1s 1s 155199670e-09 1s 1s 155199950e-09 0s 0s 155207790e-09 1s 1s 155209950e-09 1s 1s 155210190e-09 0s 0s 155218030e-09 1s 1s 155220230e-09 1s 1s 155220430e-09 0s 0s 155228270e-09 1s 1s 155230510e-09 1s 1s 155230670e-09 0s 0s 155238510e-09 1s 1s 155240790e-09 1s 1s 155240910e-09 0s 0s 155248750e-09 1s 1s 155251070e-09 1s 1s 155251150e-09 0s 0s 155258990e-09 1s 1s 155261350e-09 1s 1s 155261390e-09 0s 0s 155269230e-09 1s 1s 155271630e-09 0s 0s 155279470e-09 1s 1s 155281870e-09 0s 0s 155281910e-09 0s 0s 155289710e-09 1s 1s 155292110e-09 0s 0s 155292190e-09 0s 0s 155299950e-09 1s 1s 155302350e-09 0s 0s 155302470e-09 0s 0s 155310190e-09 1s 1s 155312590e-09 0s 0s 155312750e-09 0s 0s 155320430e-09 1s 1s 155322830e-09 0s 0s 155323030e-09 0s 0s 155330670e-09 1s 1s 155333070e-09 0s 0s 155333310e-09 0s 0s 155340910e-09 1s 1s 155343310e-09 0s 0s 155343590e-09 0s 0s 155351150e-09 1s 1s 155353550e-09 0s 0s 155353870e-09 0s 0s 155361390e-09 1s 1s 155363790e-09 0s 0s 155364150e-09 0s 0s 155371630e-09 1s 1s 155374030e-09 0s 0s 155374430e-09 0s 0s 155381870e-09 1s 1s 155384270e-09 0s 0s 155384710e-09 0s 0s 155392110e-09 1s 1s 155394510e-09 0s 0s 155394990e-09 0s 0s 155402350e-09 1s 1s 155404750e-09 0s 0s 155405270e-09 0s 0s 155412590e-09 1s 1s 155414990e-09 0s 0s 155415550e-09 0s 0s 155422830e-09 1s 1s 155425230e-09 0s 0s 155425830e-09 0s 0s 155433070e-09 1s 1s 155435470e-09 0s 0s 155436110e-09 0s 0s 155443310e-09 1s 1s 155445710e-09 0s 0s 155446390e-09 0s 0s 155453550e-09 1s 1s 155455950e-09 0s 0s 155456670e-09 0s 0s 155463790e-09 1s 1s 155466190e-09 0s 0s 155466950e-09 0s 0s 155474030e-09 1s 1s 155476430e-09 0s 0s 155477230e-09 0s 0s 155484270e-09 1s 1s 155486670e-09 0s 0s 155487510e-09 0s 0s 155494510e-09 1s 1s 155496910e-09 0s 0s 155497790e-09 0s 0s 155504750e-09 1s 1s 155507150e-09 0s 0s 155508070e-09 0s 0s 155514990e-09 1s 1s 155517390e-09 0s 0s 155518350e-09 0s 0s 155525230e-09 1s 1s 155527630e-09 0s 0s 155528630e-09 0s 0s 155535470e-09 1s 1s 155537870e-09 0s 0s 155538910e-09 0s 0s 155545710e-09 1s 1s 155548110e-09 0s 0s 155549190e-09 0s 0s 155555950e-09 1s 1s 155558350e-09 0s 0s 155559470e-09 0s 0s 155566190e-09 1s 1s 155568590e-09 0s 0s 155569750e-09 0s 0s 155576430e-09 1s 1s 155578830e-09 0s 0s 155580030e-09 0s 0s 155586670e-09 1s 1s 155589070e-09 0s 0s 155590310e-09 0s 0s 155596910e-09 1s 1s 155599310e-09 0s 0s 155600590e-09 0s 0s 155607150e-09 1s 1s 155609550e-09 0s 0s 155610870e-09 0s 0s 155617390e-09 1s 1s 155619790e-09 0s 0s 155621150e-09 0s 0s 155627630e-09 1s 1s 155630030e-09 0s 0s 155631430e-09 0s 0s 155637870e-09 1s 1s 155640270e-09 0s 0s 155641710e-09 0s 0s 155648110e-09 1s 1s 155650510e-09 0s 0s 155651990e-09 0s 0s 155658350e-09 1s 1s 155660750e-09 0s 0s 155662270e-09 0s 0s 155668590e-09 1s 1s 155670990e-09 0s 0s 155672550e-09 0s 0s 155678830e-09 1s 1s 155681230e-09 0s 0s 155682830e-09 0s 0s 155689070e-09 1s 1s 155691470e-09 0s 0s 155693110e-09 0s 0s 155699310e-09 1s 1s 155701710e-09 0s 0s 155703390e-09 0s 0s 155709550e-09 1s 1s 155711950e-09 0s 0s 155713670e-09 0s 0s 155719790e-09 1s 1s 155722190e-09 0s 0s 155723950e-09 0s 0s 155730030e-09 1s 1s 155732430e-09 0s 0s 155734230e-09 0s 0s 155740270e-09 1s 1s 155742670e-09 0s 0s 155744510e-09 0s 0s 155750510e-09 1s 1s 155752910e-09 0s 0s 155754790e-09 0s 0s 155760750e-09 1s 1s 155763150e-09 0s 0s 155765070e-09 0s 0s 155770990e-09 1s 1s 155773390e-09 0s 0s 155775350e-09 0s 0s 155781230e-09 1s 1s 155783630e-09 0s 0s 155785630e-09 0s 0s 155791470e-09 1s 1s 155793870e-09 0s 0s 155795910e-09 0s 0s 155801710e-09 1s 1s 155804110e-09 0s 0s 155806190e-09 0s 0s 155811950e-09 1s 1s 155814350e-09 0s 0s 155816470e-09 0s 0s 155822190e-09 1s 1s 155824590e-09 0s 0s 155826750e-09 0s 0s 155832430e-09 1s 1s 155834830e-09 0s 0s 155837030e-09 0s 0s 155842670e-09 1s 1s 155845070e-09 0s 0s 155847310e-09 0s 0s 155852910e-09 1s 1s 155855310e-09 0s 0s 155857590e-09 0s 0s 155863150e-09 1s 1s 155865550e-09 0s 0s 155867870e-09 0s 0s 155873390e-09 1s 1s 155875790e-09 0s 0s 155878150e-09 0s 0s 155883630e-09 1s 1s 155886030e-09 0s 0s 155888430e-09 0s 0s 155893870e-09 1s 1s 155896270e-09 0s 0s 155898710e-09 0s 0s 155904110e-09 1s 1s 155906510e-09 0s 0s 155908990e-09 0s 0s 155914350e-09 1s 1s 155916750e-09 0s 0s 155919270e-09 0s 0s 155924590e-09 1s 1s 155926990e-09 0s 0s 155929550e-09 0s 0s 155934830e-09 1s 1s 155937230e-09 0s 0s 155939830e-09 0s 0s 155945070e-09 1s 1s 155947470e-09 0s 0s 155950110e-09 0s 0s 155955310e-09 1s 1s 155957710e-09 0s 0s 155960390e-09 0s 0s 155965550e-09 1s 1s 155967950e-09 0s 0s 155970670e-09 0s 0s 155975790e-09 1s 1s 155978190e-09 0s 0s 155980950e-09 0s 0s 155986030e-09 1s 1s 155988430e-09 0s 0s 155991230e-09 0s 0s 155996270e-09 1s 1s 155998670e-09 0s 0s 156001510e-09 0s 0s 156006510e-09 1s 1s 156008910e-09 0s 0s 156011790e-09 0s 0s 156016750e-09 1s 1s 156019150e-09 0s 0s 156022070e-09 0s 0s 156026990e-09 1s 1s 156029390e-09 0s 0s 156032350e-09 0s 0s 156037230e-09 1s 1s 156039630e-09 0s 0s 156042630e-09 0s 0s 156047470e-09 1s 1s 156049870e-09 0s 0s 156052910e-09 0s 0s 156057710e-09 1s 1s 156060110e-09 0s 0s 156063190e-09 0s 0s 156067950e-09 1s 1s 156070350e-09 0s 0s 156073470e-09 0s 0s 156078190e-09 1s 1s 156080590e-09 0s 0s 156083750e-09 0s 0s 156088430e-09 1s 1s 156090830e-09 0s 0s 156094030e-09 0s 0s 156098670e-09 1s 1s 156101070e-09 0s 0s 156104310e-09 0s 0s 156108910e-09 1s 1s 156111310e-09 0s 0s 156114590e-09 0s 0s 156119150e-09 1s 1s 156121550e-09 0s 0s 156124870e-09 0s 0s 156129390e-09 1s 1s 156131790e-09 0s 0s 156135150e-09 0s 0s 156139630e-09 1s 1s 156142030e-09 0s 0s 156145430e-09 0s 0s 156149870e-09 1s 1s 156152270e-09 0s 0s 156155710e-09 0s 0s 156160110e-09 1s 1s 156162510e-09 0s 0s 156165990e-09 0s 0s 156170350e-09 1s 1s 156172750e-09 0s 0s 156176270e-09 0s 0s 156180590e-09 1s 1s 156182990e-09 0s 0s 156186550e-09 0s 0s 156190830e-09 1s 1s 156193230e-09 0s 0s 156196830e-09 0s 0s 156201070e-09 1s 1s 156203470e-09 0s 0s 156207110e-09 0s 0s 156211310e-09 1s 1s 156213710e-09 0s 0s 156217390e-09 0s 0s 156221550e-09 1s 1s 156223950e-09 0s 0s 156227670e-09 0s 0s 156231790e-09 1s 1s 156234190e-09 0s 0s 156237950e-09 0s 0s 156242030e-09 1s 1s 156244430e-09 0s 0s 156248230e-09 0s 0s 156252270e-09 1s 1s 156254670e-09 0s 0s 156258510e-09 0s 0s 156262510e-09 1s 1s 156264910e-09 0s 0s 156268790e-09 0s 0s 156272750e-09 1s 1s 156275150e-09 0s 0s 156279070e-09 0s 0s 156282990e-09 1s 1s 156285390e-09 0s 0s 156289350e-09 0s 0s 156293230e-09 1s 1s 156295630e-09 0s 0s 156299630e-09 0s 0s 156303470e-09 1s 1s 156305870e-09 0s 0s 156309910e-09 0s 0s 156313710e-09 1s 1s 156316110e-09 0s 0s 156320190e-09 0s 0s 156323950e-09 1s 1s 156326350e-09 0s 0s 156330470e-09 0s 0s 156334190e-09 1s 1s 156336590e-09 0s 0s 156340750e-09 0s 0s 156344430e-09 1s 1s 156346830e-09 0s 0s 156351030e-09 0s 0s 156354670e-09 1s 1s 156357070e-09 0s 0s 156361310e-09 0s 0s 156364910e-09 1s 1s 156367310e-09 0s 0s 156371590e-09 0s 0s 156375150e-09 1s 1s 156377550e-09 0s 0s 156381870e-09 0s 0s 156385390e-09 1s 1s 156387790e-09 0s 0s 156392150e-09 0s 0s 156395630e-09 1s 1s 156398030e-09 0s 0s 156402430e-09 0s 0s 156405870e-09 1s 1s 156408270e-09 0s 0s 156412710e-09 0s 0s 156416110e-09 1s 1s 156418510e-09 0s 0s 156422990e-09 0s 0s 156426350e-09 1s 1s 156428750e-09 0s 0s 156433270e-09 0s 0s 156436590e-09 1s 1s 156438990e-09 0s 0s 156443550e-09 0s 0s 156446830e-09 1s 1s 156449230e-09 0s 0s 156453830e-09 0s 0s 156457070e-09 1s 1s 156459470e-09 0s 0s 156464110e-09 0s 0s 156467310e-09 1s 1s 156469710e-09 0s 0s 156474390e-09 0s 0s 156477550e-09 1s 1s 156479950e-09 0s 0s 156484670e-09 0s 0s 156487790e-09 1s 1s 156490190e-09 0s 0s 156494950e-09 0s 0s 156498030e-09 1s 1s 156500430e-09 0s 0s 156505230e-09 0s 0s 156508270e-09 1s 1s 156510670e-09 0s 0s 156515510e-09 0s 0s 156518510e-09 1s 1s 156520910e-09 0s 0s 156525790e-09 0s 0s 156528750e-09 1s 1s 156531150e-09 0s 0s 156536070e-09 0s 0s 156538990e-09 1s 1s 156541390e-09 0s 0s 156546350e-09 0s 0s 156549230e-09 1s 1s 156551630e-09 0s 0s 156556630e-09 0s 0s 156559470e-09 1s 1s 156561870e-09 0s 0s 156566910e-09 0s 0s 156569710e-09 1s 1s 156572110e-09 0s 0s 156577190e-09 0s 0s 156579950e-09 1s 1s 156582350e-09 0s 0s 156587470e-09 0s 0s 156590190e-09 1s 1s 156592590e-09 0s 0s 156597750e-09 0s 0s 156600430e-09 1s 1s 156602830e-09 0s 0s 156608030e-09 0s 0s 156610670e-09 1s 1s 156613070e-09 0s 0s 156618310e-09 0s 0s 156620910e-09 1s 1s 156623310e-09 0s 0s 156628590e-09 0s 0s 156631150e-09 1s 1s 156633550e-09 0s 0s 156638870e-09 0s 0s 156641390e-09 1s 1s 156643790e-09 0s 0s 156649150e-09 0s 0s 156651630e-09 1s 1s 156654030e-09 0s 0s 156659430e-09 0s 0s 156661870e-09 1s 1s 156664270e-09 0s 0s 156669710e-09 0s 0s 156672110e-09 1s 1s 156674510e-09 0s 0s 156679990e-09 0s 0s 156682350e-09 1s 1s 156684750e-09 0s 0s 156690270e-09 0s 0s 156692590e-09 1s 1s 156694990e-09 0s 0s 156700550e-09 0s 0s 156702830e-09 1s 1s 156705230e-09 0s 0s 156710830e-09 0s 0s 156713070e-09 1s 1s 156715470e-09 0s 0s 156721110e-09 0s 0s 156723310e-09 1s 1s 156725710e-09 0s 0s 156731390e-09 0s 0s 156733550e-09 1s 1s 156735950e-09 0s 0s 156741670e-09 0s 0s 156743790e-09 1s 1s 156746190e-09 0s 0s 156751950e-09 0s 0s 156754030e-09 1s 1s 156756430e-09 0s 0s 156762230e-09 0s 0s 156764270e-09 1s 1s 156766670e-09 0s 0s 156772510e-09 0s 0s 156774510e-09 1s 1s 156776910e-09 0s 0s 156782790e-09 0s 0s 156784750e-09 1s 1s 156787150e-09 0s 0s 156793070e-09 0s 0s 156794990e-09 1s 1s 156797390e-09 0s 0s 156803350e-09 0s 0s 156805230e-09 1s 1s 156807630e-09 0s 0s 156813630e-09 0s 0s 156815470e-09 1s 1s 156817870e-09 0s 0s 156823910e-09 0s 0s 156825710e-09 1s 1s 156828110e-09 0s 0s 156834190e-09 0s 0s 156835950e-09 1s 1s 156838350e-09 0s 0s 156844470e-09 0s 0s 156846190e-09 1s 1s 156848590e-09 0s 0s 156854750e-09 0s 0s 156856430e-09 1s 1s 156858830e-09 0s 0s 156865030e-09 0s 0s 156866670e-09 1s 1s 156869070e-09 0s 0s 156875310e-09 0s 0s 156876910e-09 1s 1s 156879310e-09 0s 0s 156885590e-09 0s 0s 156887150e-09 1s 1s 156889550e-09 0s 0s 156895870e-09 0s 0s 156897390e-09 1s 1s 156899790e-09 0s 0s 156906150e-09 0s 0s 156907630e-09 1s 1s 156910030e-09 0s 0s 156916430e-09 0s 0s 156917870e-09 1s 1s 156920270e-09 0s 0s 156926710e-09 0s 0s 156928110e-09 1s 1s 156930510e-09 0s 0s 156936990e-09 0s 0s 156938350e-09 1s 1s 156940750e-09 0s 0s 156947270e-09 0s 0s 156948590e-09 1s 1s 156950990e-09 0s 0s 156957550e-09 0s 0s 156958830e-09 1s 1s 156961230e-09 0s 0s 156967830e-09 0s 0s 156969070e-09 1s 1s 156971470e-09 0s 0s 156978110e-09 0s 0s 156979310e-09 1s 1s 156981710e-09 0s 0s 156988390e-09 0s 0s 156989550e-09 1s 1s 156991950e-09 0s 0s 156998670e-09 0s 0s 156999790e-09 1s 1s 157002190e-09 0s 0s 157008950e-09 0s 0s 157010030e-09 1s 1s 157012430e-09 0s 0s 157019230e-09 0s 0s 157020270e-09 1s 1s 157022670e-09 0s 0s 157029510e-09 0s 0s 157030510e-09 1s 1s 157032910e-09 0s 0s 157039790e-09 0s 0s 157040750e-09 1s 1s 157043150e-09 0s 0s 157050070e-09 0s 0s 157050990e-09 1s 1s 157053390e-09 0s 0s 157060350e-09 0s 0s 157061230e-09 1s 1s 157063630e-09 0s 0s 157070630e-09 0s 0s 157071470e-09 1s 1s 157073870e-09 0s 0s 157080910e-09 0s 0s 157081710e-09 1s 1s 157084110e-09 0s 0s 157091190e-09 0s 0s 157091950e-09 1s 1s 157094350e-09 0s 0s 157101470e-09 0s 0s 157102190e-09 1s 1s 157104590e-09 0s 0s 157111750e-09 0s 0s 157112430e-09 1s 1s 157114830e-09 0s 0s 157122030e-09 0s 0s 157122670e-09 1s 1s 157125070e-09 0s 0s 157132310e-09 0s 0s 157132910e-09 1s 1s 157135310e-09 0s 0s 157142590e-09 0s 0s 157143150e-09 1s 1s 157145550e-09 0s 0s 157152870e-09 0s 0s 157153390e-09 1s 1s 157155790e-09 0s 0s 157163150e-09 0s 0s 157163630e-09 1s 1s 157166030e-09 0s 0s 157173430e-09 0s 0s 157173870e-09 1s 1s 157176270e-09 0s 0s 157183710e-09 0s 0s 157184110e-09 1s 1s 157186510e-09 0s 0s 157193990e-09 0s 0s 157194350e-09 1s 1s 157196750e-09 0s 0s 157204270e-09 0s 0s 157204590e-09 1s 1s 157206990e-09 0s 0s 157214550e-09 0s 0s 157214830e-09 1s 1s 157217230e-09 0s 0s 157224830e-09 0s 0s 157225070e-09 1s 1s 157227470e-09 0s 0s 157235110e-09 0s 0s 157235310e-09 1s 1s 157237710e-09 0s 0s 157245390e-09 0s 0s 157245550e-09 1s 1s 157247950e-09 0s 0s 157255670e-09 0s 0s 157255790e-09 1s 1s 157258190e-09 0s 0s 157265950e-09 0s 0s 157266030e-09 1s 1s 157268430e-09 0s 0s 157276230e-09 0s 0s 157276270e-09 1s 1s 157278670e-09 0s 0s 157286510e-09 1s 1s 157286550e-09 1s 1s 157288950e-09 0s 0s 157296750e-09 1s 1s 157296830e-09 1s 1s 157299190e-09 0s 0s 157306990e-09 1s 1s 157307110e-09 1s 1s 157309430e-09 0s 0s 157317230e-09 1s 1s 157317390e-09 1s 1s 157319670e-09 0s 0s 157327470e-09 1s 1s 157327670e-09 1s 1s 157329910e-09 0s 0s 157337710e-09 1s 1s 157337950e-09 1s 1s 157340150e-09 0s 0s 157347950e-09 1s 1s 157348230e-09 1s 1s 157350390e-09 0s 0s 157358190e-09 1s 1s 157358510e-09 1s 1s 157360630e-09 0s 0s 157368430e-09 1s 1s 157368790e-09 1s 1s 157370870e-09 0s 0s 157378670e-09 1s 1s 157379070e-09 1s 1s 157381110e-09 0s 0s 157388910e-09 1s 1s 157389350e-09 1s 1s 157391350e-09 0s 0s 157399150e-09 1s 1s 157399630e-09 1s 1s 157401590e-09 0s 0s 157409390e-09 1s 1s 157409910e-09 1s 1s 157411830e-09 0s 0s 157419630e-09 1s 1s 157420190e-09 1s 1s 157422070e-09 0s 0s 157429870e-09 1s 1s 157430470e-09 1s 1s 157432310e-09 0s 0s 157440110e-09 1s 1s 157440750e-09 1s 1s 157442550e-09 0s 0s 157450350e-09 1s 1s 157451030e-09 1s 1s 157452790e-09 0s 0s 157460590e-09 1s 1s 157461310e-09 1s 1s 157463030e-09 0s 0s 157470830e-09 1s 1s 157471590e-09 1s 1s 157473270e-09 0s 0s 157481070e-09 1s 1s 157481870e-09 1s 1s 157483510e-09 0s 0s 157491310e-09 1s 1s 157492150e-09 1s 1s 157493750e-09 0s 0s 157501550e-09 1s 1s 157502430e-09 1s 1s 157503990e-09 0s 0s 157511790e-09 1s 1s 157512710e-09 1s 1s 157514230e-09 0s 0s 157522030e-09 1s 1s 157522990e-09 1s 1s 157524470e-09 0s 0s 157532270e-09 1s 1s 157533270e-09 1s 1s 157534710e-09 0s 0s 157542510e-09 1s 1s 157543550e-09 1s 1s 157544950e-09 0s 0s 157552750e-09 1s 1s 157553830e-09 1s 1s 157555190e-09 0s 0s 157562990e-09 1s 1s 157564110e-09 1s 1s 157565430e-09 0s 0s 157573230e-09 1s 1s 157574390e-09 1s 1s 157575670e-09 0s 0s 157583470e-09 1s 1s 157584670e-09 1s 1s 157585910e-09 0s 0s 157593710e-09 1s 1s 157594950e-09 1s 1s 157596150e-09 0s 0s 157603950e-09 1s 1s 157605230e-09 1s 1s 157606390e-09 0s 0s 157614190e-09 1s 1s 157615510e-09 1s 1s 157616630e-09 0s 0s 157624430e-09 1s 1s 157625790e-09 1s 1s 157626870e-09 0s 0s 157634670e-09 1s 1s 157636070e-09 1s 1s 157637110e-09 0s 0s 157644910e-09 1s 1s 157646350e-09 1s 1s 157647350e-09 0s 0s 157655150e-09 1s 1s 157656630e-09 1s 1s 157657590e-09 0s 0s 157665390e-09 1s 1s 157666910e-09 1s 1s 157667830e-09 0s 0s 157675630e-09 1s 1s 157677190e-09 1s 1s 157678070e-09 0s 0s 157685870e-09 1s 1s 157687470e-09 1s 1s 157688310e-09 0s 0s 157696110e-09 1s 1s 157697750e-09 1s 1s 157698550e-09 0s 0s 157706350e-09 1s 1s 157708030e-09 1s 1s 157708790e-09 0s 0s 157716590e-09 1s 1s 157718310e-09 1s 1s 157719030e-09 0s 0s 157726830e-09 1s 1s 157728590e-09 1s 1s 157729270e-09 0s 0s 157737070e-09 1s 1s 157738870e-09 1s 1s 157739510e-09 0s 0s 157747310e-09 1s 1s 157749150e-09 1s 1s 157749750e-09 0s 0s 157757550e-09 1s 1s 157759430e-09 1s 1s 157759990e-09 0s 0s 157767790e-09 1s 1s 157769710e-09 1s 1s 157770230e-09 0s 0s 157778030e-09 1s 1s 157779990e-09 1s 1s 157780470e-09 0s 0s 157788270e-09 1s 1s 157790270e-09 1s 1s 157790710e-09 0s 0s 157798510e-09 1s 1s 157800550e-09 1s 1s 157800950e-09 0s 0s 157808750e-09 1s 1s 157810830e-09 1s 1s 157811190e-09 0s 0s 157818990e-09 1s 1s 157821110e-09 1s 1s 157821430e-09 0s 0s 157829230e-09 1s 1s 157831390e-09 1s 1s 157831670e-09 0s 0s 157839470e-09 1s 1s 157841670e-09 1s 1s 157841910e-09 0s 0s 157849710e-09 1s 1s 157851950e-09 1s 1s 157852150e-09 0s 0s 157859950e-09 1s 1s 157862230e-09 1s 1s 157862390e-09 0s 0s 157870190e-09 1s 1s 157872510e-09 1s 1s 157872630e-09 0s 0s 157880430e-09 1s 1s 157882790e-09 1s 1s 157882870e-09 0s 0s 157890670e-09 1s 1s 157893070e-09 1s 1s 157893110e-09 0s 0s 157900910e-09 1s 1s 157903350e-09 0s 0s 157911150e-09 1s 1s 157913590e-09 0s 0s 157913630e-09 0s 0s 157921390e-09 1s 1s 157923830e-09 0s 0s 157923910e-09 0s 0s 157931630e-09 1s 1s 157934070e-09 0s 0s 157934190e-09 0s 0s 157941870e-09 1s 1s 157944310e-09 0s 0s 157944470e-09 0s 0s 157952110e-09 1s 1s 157954550e-09 0s 0s 157954750e-09 0s 0s 157962350e-09 1s 1s 157964790e-09 0s 0s 157965030e-09 0s 0s 157972590e-09 1s 1s 157975030e-09 0s 0s 157975310e-09 0s 0s 157982830e-09 1s 1s 157985270e-09 0s 0s 157985590e-09 0s 0s 157993070e-09 1s 1s 157995510e-09 0s 0s 157995870e-09 0s 0s 158003310e-09 1s 1s 158005750e-09 0s 0s 158006150e-09 0s 0s 158013550e-09 1s 1s 158015990e-09 0s 0s 158016430e-09 0s 0s 158023790e-09 1s 1s 158026230e-09 0s 0s 158026710e-09 0s 0s 158034030e-09 1s 1s 158036470e-09 0s 0s 158036990e-09 0s 0s 158044270e-09 1s 1s 158046710e-09 0s 0s 158047270e-09 0s 0s 158054510e-09 1s 1s 158056950e-09 0s 0s 158057550e-09 0s 0s 158064750e-09 1s 1s 158067190e-09 0s 0s 158067830e-09 0s 0s 158074990e-09 1s 1s 158077430e-09 0s 0s 158078110e-09 0s 0s 158085230e-09 1s 1s 158087670e-09 0s 0s 158088390e-09 0s 0s 158095470e-09 1s 1s 158097910e-09 0s 0s 158098670e-09 0s 0s 158105710e-09 1s 1s 158108150e-09 0s 0s 158108950e-09 0s 0s 158115950e-09 1s 1s 158118390e-09 0s 0s 158119230e-09 0s 0s 158126190e-09 1s 1s 158128630e-09 0s 0s 158129510e-09 0s 0s 158136430e-09 1s 1s 158138870e-09 0s 0s 158139790e-09 0s 0s 158146670e-09 1s 1s 158149110e-09 0s 0s 158150070e-09 0s 0s 158156910e-09 1s 1s 158159350e-09 0s 0s 158160350e-09 0s 0s 158167150e-09 1s 1s 158169590e-09 0s 0s 158170630e-09 0s 0s 158177390e-09 1s 1s 158179830e-09 0s 0s 158180910e-09 0s 0s 158187630e-09 1s 1s 158190070e-09 0s 0s 158191190e-09 0s 0s 158197870e-09 1s 1s 158200310e-09 0s 0s 158201470e-09 0s 0s 158208110e-09 1s 1s 158210550e-09 0s 0s 158211750e-09 0s 0s 158218350e-09 1s 1s 158220790e-09 0s 0s 158222030e-09 0s 0s 158228590e-09 1s 1s 158231030e-09 0s 0s 158232310e-09 0s 0s 158238830e-09 1s 1s 158241270e-09 0s 0s 158242590e-09 0s 0s 158249070e-09 1s 1s 158251510e-09 0s 0s 158252870e-09 0s 0s 158259310e-09 1s 1s 158261750e-09 0s 0s 158263150e-09 0s 0s 158269550e-09 1s 1s 158271990e-09 0s 0s 158273430e-09 0s 0s 158279790e-09 1s 1s 158282230e-09 0s 0s 158283710e-09 0s 0s 158290030e-09 1s 1s 158292470e-09 0s 0s 158293990e-09 0s 0s 158300270e-09 1s 1s 158302710e-09 0s 0s 158304270e-09 0s 0s 158310510e-09 1s 1s 158312950e-09 0s 0s 158314550e-09 0s 0s 158320750e-09 1s 1s 158323190e-09 0s 0s 158324830e-09 0s 0s 158330990e-09 1s 1s 158333430e-09 0s 0s 158335110e-09 0s 0s 158341230e-09 1s 1s 158343670e-09 0s 0s 158345390e-09 0s 0s 158351470e-09 1s 1s 158353910e-09 0s 0s 158355670e-09 0s 0s 158361710e-09 1s 1s 158364150e-09 0s 0s 158365950e-09 0s 0s 158371950e-09 1s 1s 158374390e-09 0s 0s 158376230e-09 0s 0s 158382190e-09 1s 1s 158384630e-09 0s 0s 158386510e-09 0s 0s 158392430e-09 1s 1s 158394870e-09 0s 0s 158396790e-09 0s 0s 158402670e-09 1s 1s 158405110e-09 0s 0s 158407070e-09 0s 0s 158412910e-09 1s 1s 158415350e-09 0s 0s 158417350e-09 0s 0s 158423150e-09 1s 1s 158425590e-09 0s 0s 158427630e-09 0s 0s 158433390e-09 1s 1s 158435830e-09 0s 0s 158437910e-09 0s 0s 158443630e-09 1s 1s 158446070e-09 0s 0s 158448190e-09 0s 0s 158453870e-09 1s 1s 158456310e-09 0s 0s 158458470e-09 0s 0s 158464110e-09 1s 1s 158466550e-09 0s 0s 158468750e-09 0s 0s 158474350e-09 1s 1s 158476790e-09 0s 0s 158479030e-09 0s 0s 158484590e-09 1s 1s 158487030e-09 0s 0s 158489310e-09 0s 0s 158494830e-09 1s 1s 158497270e-09 0s 0s 158499590e-09 0s 0s 158505070e-09 1s 1s 158507510e-09 0s 0s 158509870e-09 0s 0s 158515310e-09 1s 1s 158517750e-09 0s 0s 158520150e-09 0s 0s 158525550e-09 1s 1s 158527990e-09 0s 0s 158530430e-09 0s 0s 158535790e-09 1s 1s 158538230e-09 0s 0s 158540710e-09 0s 0s 158546030e-09 1s 1s 158548470e-09 0s 0s 158550990e-09 0s 0s 158556270e-09 1s 1s 158558710e-09 0s 0s 158561270e-09 0s 0s 158566510e-09 1s 1s 158568950e-09 0s 0s 158571550e-09 0s 0s 158576750e-09 1s 1s 158579190e-09 0s 0s 158581830e-09 0s 0s 158586990e-09 1s 1s 158589430e-09 0s 0s 158592110e-09 0s 0s 158597230e-09 1s 1s 158599670e-09 0s 0s 158602390e-09 0s 0s 158607470e-09 1s 1s 158609910e-09 0s 0s 158612670e-09 0s 0s 158617710e-09 1s 1s 158620150e-09 0s 0s 158622950e-09 0s 0s 158627950e-09 1s 1s 158630390e-09 0s 0s 158633230e-09 0s 0s 158638190e-09 1s 1s 158640630e-09 0s 0s 158643510e-09 0s 0s 158648430e-09 1s 1s 158650870e-09 0s 0s 158653790e-09 0s 0s 158658670e-09 1s 1s 158661110e-09 0s 0s 158664070e-09 0s 0s 158668910e-09 1s 1s 158671350e-09 0s 0s 158674350e-09 0s 0s 158679150e-09 1s 1s 158681590e-09 0s 0s 158684630e-09 0s 0s 158689390e-09 1s 1s 158691830e-09 0s 0s 158694910e-09 0s 0s 158699630e-09 1s 1s 158702070e-09 0s 0s 158705190e-09 0s 0s 158709870e-09 1s 1s 158712310e-09 0s 0s 158715470e-09 0s 0s 158720110e-09 1s 1s 158722550e-09 0s 0s 158725750e-09 0s 0s 158730350e-09 1s 1s 158732790e-09 0s 0s 158736030e-09 0s 0s 158740590e-09 1s 1s 158743030e-09 0s 0s 158746310e-09 0s 0s 158750830e-09 1s 1s 158753270e-09 0s 0s 158756590e-09 0s 0s 158761070e-09 1s 1s 158763510e-09 0s 0s 158766870e-09 0s 0s 158771310e-09 1s 1s 158773750e-09 0s 0s 158777150e-09 0s 0s 158781550e-09 1s 1s 158783990e-09 0s 0s 158787430e-09 0s 0s 158791790e-09 1s 1s 158794230e-09 0s 0s 158797710e-09 0s 0s 158802030e-09 1s 1s 158804470e-09 0s 0s 158807990e-09 0s 0s 158812270e-09 1s 1s 158814710e-09 0s 0s 158818270e-09 0s 0s 158822510e-09 1s 1s 158824950e-09 0s 0s 158828550e-09 0s 0s 158832750e-09 1s 1s 158835190e-09 0s 0s 158838830e-09 0s 0s 158842990e-09 1s 1s 158845430e-09 0s 0s 158849110e-09 0s 0s 158853230e-09 1s 1s 158855670e-09 0s 0s 158859390e-09 0s 0s 158863470e-09 1s 1s 158865910e-09 0s 0s 158869670e-09 0s 0s 158873710e-09 1s 1s 158876150e-09 0s 0s 158879950e-09 0s 0s 158883950e-09 1s 1s 158886390e-09 0s 0s 158890230e-09 0s 0s 158894190e-09 1s 1s 158896630e-09 0s 0s 158900510e-09 0s 0s 158904430e-09 1s 1s 158906870e-09 0s 0s 158910790e-09 0s 0s 158914670e-09 1s 1s 158917110e-09 0s 0s 158921070e-09 0s 0s 158924910e-09 1s 1s 158927350e-09 0s 0s 158931350e-09 0s 0s 158935150e-09 1s 1s 158937590e-09 0s 0s 158941630e-09 0s 0s 158945390e-09 1s 1s 158947830e-09 0s 0s 158951910e-09 0s 0s 158955630e-09 1s 1s 158958070e-09 0s 0s 158962190e-09 0s 0s 158965870e-09 1s 1s 158968310e-09 0s 0s 158972470e-09 0s 0s 158976110e-09 1s 1s 158978550e-09 0s 0s 158982750e-09 0s 0s 158986350e-09 1s 1s 158988790e-09 0s 0s 158993030e-09 0s 0s 158996590e-09 1s 1s 158999030e-09 0s 0s 159003310e-09 0s 0s 159006830e-09 1s 1s 159009270e-09 0s 0s 159013590e-09 0s 0s 159017070e-09 1s 1s 159019510e-09 0s 0s 159023870e-09 0s 0s 159027310e-09 1s 1s 159029750e-09 0s 0s 159034150e-09 0s 0s 159037550e-09 1s 1s 159039990e-09 0s 0s 159044430e-09 0s 0s 159047790e-09 1s 1s 159050230e-09 0s 0s 159054710e-09 0s 0s 159058030e-09 1s 1s 159060470e-09 0s 0s 159064990e-09 0s 0s 159068270e-09 1s 1s 159070710e-09 0s 0s 159075270e-09 0s 0s 159078510e-09 1s 1s 159080950e-09 0s 0s 159085550e-09 0s 0s 159088750e-09 1s 1s 159091190e-09 0s 0s 159095830e-09 0s 0s 159098990e-09 1s 1s 159101430e-09 0s 0s 159106110e-09 0s 0s 159109230e-09 1s 1s 159111670e-09 0s 0s 159116390e-09 0s 0s 159119470e-09 1s 1s 159121910e-09 0s 0s 159126670e-09 0s 0s 159129710e-09 1s 1s 159132150e-09 0s 0s 159136950e-09 0s 0s 159139950e-09 1s 1s 159142390e-09 0s 0s 159147230e-09 0s 0s 159150190e-09 1s 1s 159152630e-09 0s 0s 159157510e-09 0s 0s 159160430e-09 1s 1s 159162870e-09 0s 0s 159167790e-09 0s 0s 159170670e-09 1s 1s 159173110e-09 0s 0s 159178070e-09 0s 0s 159180910e-09 1s 1s 159183350e-09 0s 0s 159188350e-09 0s 0s 159191150e-09 1s 1s 159193590e-09 0s 0s 159198630e-09 0s 0s 159201390e-09 1s 1s 159203830e-09 0s 0s 159208910e-09 0s 0s 159211630e-09 1s 1s 159214070e-09 0s 0s 159219190e-09 0s 0s 159221870e-09 1s 1s 159224310e-09 0s 0s 159229470e-09 0s 0s 159232110e-09 1s 1s 159234550e-09 0s 0s 159239750e-09 0s 0s 159242350e-09 1s 1s 159244790e-09 0s 0s 159250030e-09 0s 0s 159252590e-09 1s 1s 159255030e-09 0s 0s 159260310e-09 0s 0s 159262830e-09 1s 1s 159265270e-09 0s 0s 159270590e-09 0s 0s 159273070e-09 1s 1s 159275510e-09 0s 0s 159280870e-09 0s 0s 159283310e-09 1s 1s 159285750e-09 0s 0s 159291150e-09 0s 0s 159293550e-09 1s 1s 159295990e-09 0s 0s 159301430e-09 0s 0s 159303790e-09 1s 1s 159306230e-09 0s 0s 159311710e-09 0s 0s 159314030e-09 1s 1s 159316470e-09 0s 0s 159321990e-09 0s 0s 159324270e-09 1s 1s 159326710e-09 0s 0s 159332270e-09 0s 0s 159334510e-09 1s 1s 159336950e-09 0s 0s 159342550e-09 0s 0s 159344750e-09 1s 1s 159347190e-09 0s 0s 159352830e-09 0s 0s 159354990e-09 1s 1s 159357430e-09 0s 0s 159363110e-09 0s 0s 159365230e-09 1s 1s 159367670e-09 0s 0s 159373390e-09 0s 0s 159375470e-09 1s 1s 159377910e-09 0s 0s 159383670e-09 0s 0s 159385710e-09 1s 1s 159388150e-09 0s 0s 159393950e-09 0s 0s 159395950e-09 1s 1s 159398390e-09 0s 0s 159404230e-09 0s 0s 159406190e-09 1s 1s 159408630e-09 0s 0s 159414510e-09 0s 0s 159416430e-09 1s 1s 159418870e-09 0s 0s 159424790e-09 0s 0s 159426670e-09 1s 1s 159429110e-09 0s 0s 159435070e-09 0s 0s 159436910e-09 1s 1s 159439350e-09 0s 0s 159445350e-09 0s 0s 159447150e-09 1s 1s 159449590e-09 0s 0s 159455630e-09 0s 0s 159457390e-09 1s 1s 159459830e-09 0s 0s 159465910e-09 0s 0s 159467630e-09 1s 1s 159470070e-09 0s 0s 159476190e-09 0s 0s 159477870e-09 1s 1s 159480310e-09 0s 0s 159486470e-09 0s 0s 159488110e-09 1s 1s 159490550e-09 0s 0s 159496750e-09 0s 0s 159498350e-09 1s 1s 159500790e-09 0s 0s 159507030e-09 0s 0s 159508590e-09 1s 1s 159511030e-09 0s 0s 159517310e-09 0s 0s 159518830e-09 1s 1s 159521270e-09 0s 0s 159527590e-09 0s 0s 159529070e-09 1s 1s 159531510e-09 0s 0s 159537870e-09 0s 0s 159539310e-09 1s 1s 159541750e-09 0s 0s 159548150e-09 0s 0s 159549550e-09 1s 1s 159551990e-09 0s 0s 159558430e-09 0s 0s 159559790e-09 1s 1s 159562230e-09 0s 0s 159568710e-09 0s 0s 159570030e-09 1s 1s 159572470e-09 0s 0s 159578990e-09 0s 0s 159580270e-09 1s 1s 159582710e-09 0s 0s 159589270e-09 0s 0s 159590510e-09 1s 1s 159592950e-09 0s 0s 159599550e-09 0s 0s 159600750e-09 1s 1s 159603190e-09 0s 0s 159609830e-09 0s 0s 159610990e-09 1s 1s 159613430e-09 0s 0s 159620110e-09 0s 0s 159621230e-09 1s 1s 159623670e-09 0s 0s 159630390e-09 0s 0s 159631470e-09 1s 1s 159633910e-09 0s 0s 159640670e-09 0s 0s 159641710e-09 1s 1s 159644150e-09 0s 0s 159650950e-09 0s 0s 159651950e-09 1s 1s 159654390e-09 0s 0s 159661230e-09 0s 0s 159662190e-09 1s 1s 159664630e-09 0s 0s 159671510e-09 0s 0s 159672430e-09 1s 1s 159674870e-09 0s 0s 159681790e-09 0s 0s 159682670e-09 1s 1s 159685110e-09 0s 0s 159692070e-09 0s 0s 159692910e-09 1s 1s 159695350e-09 0s 0s 159702350e-09 0s 0s 159703150e-09 1s 1s 159705590e-09 0s 0s 159712630e-09 0s 0s 159713390e-09 1s 1s 159715830e-09 0s 0s 159722910e-09 0s 0s 159723630e-09 1s 1s 159726070e-09 0s 0s 159733190e-09 0s 0s 159733870e-09 1s 1s 159736310e-09 0s 0s 159743470e-09 0s 0s 159744110e-09 1s 1s 159746550e-09 0s 0s 159753750e-09 0s 0s 159754350e-09 1s 1s 159756790e-09 0s 0s 159764030e-09 0s 0s 159764590e-09 1s 1s 159767030e-09 0s 0s 159774310e-09 0s 0s 159774830e-09 1s 1s 159777270e-09 0s 0s 159784590e-09 0s 0s 159785070e-09 1s 1s 159787510e-09 0s 0s 159794870e-09 0s 0s 159795310e-09 1s 1s 159797750e-09 0s 0s 159805150e-09 0s 0s 159805550e-09 1s 1s 159807990e-09 0s 0s 159815430e-09 0s 0s 159815790e-09 1s 1s 159818230e-09 0s 0s 159825710e-09 0s 0s 159826030e-09 1s 1s 159828470e-09 0s 0s 159835990e-09 0s 0s 159836270e-09 1s 1s 159838710e-09 0s 0s 159846270e-09 0s 0s 159846510e-09 1s 1s 159848950e-09 0s 0s 159856550e-09 0s 0s 159856750e-09 1s 1s 159859190e-09 0s 0s 159866830e-09 0s 0s 159866990e-09 1s 1s 159869430e-09 0s 0s 159877110e-09 0s 0s 159877230e-09 1s 1s 159879670e-09 0s 0s 159887390e-09 0s 0s 159887470e-09 1s 1s 159889910e-09 0s 0s 159897670e-09 0s 0s 159897710e-09 1s 1s 159900150e-09 0s 0s 159907950e-09 1s 1s 159907990e-09 1s 1s 159910430e-09 0s 0s 159918190e-09 1s 1s 159918270e-09 1s 1s 159920670e-09 0s 0s 159928430e-09 1s 1s 159928550e-09 1s 1s 159930910e-09 0s 0s 159938670e-09 1s 1s 159938830e-09 1s 1s 159941150e-09 0s 0s 159948910e-09 1s 1s 159949110e-09 1s 1s 159951390e-09 0s 0s 159959150e-09 1s 1s 159959390e-09 1s 1s 159961630e-09 0s 0s 159969390e-09 1s 1s 159969670e-09 1s 1s 159971870e-09 0s 0s 159979630e-09 1s 1s 159979950e-09 1s 1s 159982110e-09 0s 0s 159989870e-09 1s 1s 159990230e-09 1s 1s 159992350e-09 0s 0s 160000110e-09 1s 1s 160000510e-09 1s 1s 160002590e-09 0s 0s 160010350e-09 1s 1s 160010790e-09 1s 1s 160012830e-09 0s 0s 160020590e-09 1s 1s 160021070e-09 1s 1s 160023070e-09 0s 0s 160030830e-09 1s 1s 160031350e-09 1s 1s 160033310e-09 0s 0s 160041070e-09 1s 1s 160041630e-09 1s 1s 160043550e-09 0s 0s 160051310e-09 1s 1s 160051910e-09 1s 1s 160053790e-09 0s 0s 160061550e-09 1s 1s 160062190e-09 1s 1s 160064030e-09 0s 0s 160071790e-09 1s 1s 160072470e-09 1s 1s 160074270e-09 0s 0s 160082030e-09 1s 1s 160082750e-09 1s 1s 160084510e-09 0s 0s 160092270e-09 1s 1s 160093030e-09 1s 1s 160094750e-09 0s 0s 160102510e-09 1s 1s 160103310e-09 1s 1s 160104990e-09 0s 0s 160112750e-09 1s 1s 160113590e-09 1s 1s 160115230e-09 0s 0s 160122990e-09 1s 1s 160123870e-09 1s 1s 160125470e-09 0s 0s 160133230e-09 1s 1s 160134150e-09 1s 1s 160135710e-09 0s 0s 160143470e-09 1s 1s 160144430e-09 1s 1s 160145950e-09 0s 0s 160153710e-09 1s 1s 160154710e-09 1s 1s 160156190e-09 0s 0s 160163950e-09 1s 1s 160164990e-09 1s 1s 160166430e-09 0s 0s 160174190e-09 1s 1s 160175270e-09 1s 1s 160176670e-09 0s 0s 160184430e-09 1s 1s 160185550e-09 1s 1s 160186910e-09 0s 0s 160194670e-09 1s 1s 160195830e-09 1s 1s 160197150e-09 0s 0s 160204910e-09 1s 1s 160206110e-09 1s 1s 160207390e-09 0s 0s 160215150e-09 1s 1s 160216390e-09 1s 1s 160217630e-09 0s 0s 160225390e-09 1s 1s 160226670e-09 1s 1s 160227870e-09 0s 0s 160235630e-09 1s 1s 160236950e-09 1s 1s 160238110e-09 0s 0s 160245870e-09 1s 1s 160247230e-09 1s 1s 160248350e-09 0s 0s 160256110e-09 1s 1s 160257510e-09 1s 1s 160258590e-09 0s 0s 160266350e-09 1s 1s 160267790e-09 1s 1s 160268830e-09 0s 0s 160276590e-09 1s 1s 160278070e-09 1s 1s 160279070e-09 0s 0s 160286830e-09 1s 1s 160288350e-09 1s 1s 160289310e-09 0s 0s 160297070e-09 1s 1s 160298630e-09 1s 1s 160299550e-09 0s 0s 160307310e-09 1s 1s 160308910e-09 1s 1s 160309790e-09 0s 0s 160317550e-09 1s 1s 160319190e-09 1s 1s 160320030e-09 0s 0s 160327790e-09 1s 1s 160329470e-09 1s 1s 160330270e-09 0s 0s 160338030e-09 1s 1s 160339750e-09 1s 1s 160340510e-09 0s 0s 160348270e-09 1s 1s 160350030e-09 1s 1s 160350750e-09 0s 0s 160358510e-09 1s 1s 160360310e-09 1s 1s 160360990e-09 0s 0s 160368750e-09 1s 1s 160370590e-09 1s 1s 160371230e-09 0s 0s 160378990e-09 1s 1s 160380870e-09 1s 1s 160381470e-09 0s 0s 160389230e-09 1s 1s 160391150e-09 1s 1s 160391710e-09 0s 0s 160399470e-09 1s 1s 160401430e-09 1s 1s 160401950e-09 0s 0s 160409710e-09 1s 1s 160411710e-09 1s 1s 160412190e-09 0s 0s 160419950e-09 1s 1s 160421990e-09 1s 1s 160422430e-09 0s 0s 160430190e-09 1s 1s 160432270e-09 1s 1s 160432670e-09 0s 0s 160440430e-09 1s 1s 160442550e-09 1s 1s 160442910e-09 0s 0s 160450670e-09 1s 1s 160452830e-09 1s 1s 160453150e-09 0s 0s 160460910e-09 1s 1s 160463110e-09 1s 1s 160463390e-09 0s 0s 160471150e-09 1s 1s 160473390e-09 1s 1s 160473630e-09 0s 0s 160481390e-09 1s 1s 160483670e-09 1s 1s 160483870e-09 0s 0s 160491630e-09 1s 1s 160493950e-09 1s 1s 160494110e-09 0s 0s 160501870e-09 1s 1s 160504230e-09 1s 1s 160504350e-09 0s 0s 160512110e-09 1s 1s 160514510e-09 1s 1s 160514590e-09 0s 0s 160522350e-09 1s 1s 160524790e-09 1s 1s 160524830e-09 0s 0s 160532590e-09 1s 1s 160535070e-09 0s 0s 160542830e-09 1s 1s 160545310e-09 0s 0s 160545350e-09 0s 0s 160553070e-09 1s 1s 160555550e-09 0s 0s 160555630e-09 0s 0s 160563310e-09 1s 1s 160565790e-09 0s 0s 160565910e-09 0s 0s 160573550e-09 1s 1s 160576030e-09 0s 0s 160576190e-09 0s 0s 160583790e-09 1s 1s 160586270e-09 0s 0s 160586470e-09 0s 0s 160594030e-09 1s 1s 160596510e-09 0s 0s 160596750e-09 0s 0s 160604270e-09 1s 1s 160606750e-09 0s 0s 160607030e-09 0s 0s 160614510e-09 1s 1s 160616990e-09 0s 0s 160617310e-09 0s 0s 160624750e-09 1s 1s 160627230e-09 0s 0s 160627590e-09 0s 0s 160634990e-09 1s 1s 160637470e-09 0s 0s 160637870e-09 0s 0s 160645230e-09 1s 1s 160647710e-09 0s 0s 160648150e-09 0s 0s 160655470e-09 1s 1s 160657950e-09 0s 0s 160658430e-09 0s 0s 160665710e-09 1s 1s 160668190e-09 0s 0s 160668710e-09 0s 0s 160675950e-09 1s 1s 160678430e-09 0s 0s 160678990e-09 0s 0s 160686190e-09 1s 1s 160688670e-09 0s 0s 160689270e-09 0s 0s 160696430e-09 1s 1s 160698910e-09 0s 0s 160699550e-09 0s 0s 160706670e-09 1s 1s 160709150e-09 0s 0s 160709830e-09 0s 0s 160716910e-09 1s 1s 160719390e-09 0s 0s 160720110e-09 0s 0s 160727150e-09 1s 1s 160729630e-09 0s 0s 160730390e-09 0s 0s 160737390e-09 1s 1s 160739870e-09 0s 0s 160740670e-09 0s 0s 160747630e-09 1s 1s 160750110e-09 0s 0s 160750950e-09 0s 0s 160757870e-09 1s 1s 160760350e-09 0s 0s 160761230e-09 0s 0s 160768110e-09 1s 1s 160770590e-09 0s 0s 160771510e-09 0s 0s 160778350e-09 1s 1s 160780830e-09 0s 0s 160781790e-09 0s 0s 160788590e-09 1s 1s 160791070e-09 0s 0s 160792070e-09 0s 0s 160798830e-09 1s 1s 160801310e-09 0s 0s 160802350e-09 0s 0s 160809070e-09 1s 1s 160811550e-09 0s 0s 160812630e-09 0s 0s 160819310e-09 1s 1s 160821790e-09 0s 0s 160822910e-09 0s 0s 160829550e-09 1s 1s 160832030e-09 0s 0s 160833190e-09 0s 0s 160839790e-09 1s 1s 160842270e-09 0s 0s 160843470e-09 0s 0s 160850030e-09 1s 1s 160852510e-09 0s 0s 160853750e-09 0s 0s 160860270e-09 1s 1s 160862750e-09 0s 0s 160864030e-09 0s 0s 160870510e-09 1s 1s 160872990e-09 0s 0s 160874310e-09 0s 0s 160880750e-09 1s 1s 160883230e-09 0s 0s 160884590e-09 0s 0s 160890990e-09 1s 1s 160893470e-09 0s 0s 160894870e-09 0s 0s 160901230e-09 1s 1s 160903710e-09 0s 0s 160905150e-09 0s 0s 160911470e-09 1s 1s 160913950e-09 0s 0s 160915430e-09 0s 0s 160921710e-09 1s 1s 160924190e-09 0s 0s 160925710e-09 0s 0s 160931950e-09 1s 1s 160934430e-09 0s 0s 160935990e-09 0s 0s 160942190e-09 1s 1s 160944670e-09 0s 0s 160946270e-09 0s 0s 160952430e-09 1s 1s 160954910e-09 0s 0s 160956550e-09 0s 0s 160962670e-09 1s 1s 160965150e-09 0s 0s 160966830e-09 0s 0s 160972910e-09 1s 1s 160975390e-09 0s 0s 160977110e-09 0s 0s 160983150e-09 1s 1s 160985630e-09 0s 0s 160987390e-09 0s 0s 160993390e-09 1s 1s 160995870e-09 0s 0s 160997670e-09 0s 0s 161003630e-09 1s 1s 161006110e-09 0s 0s 161007950e-09 0s 0s 161013870e-09 1s 1s 161016350e-09 0s 0s 161018230e-09 0s 0s 161024110e-09 1s 1s 161026590e-09 0s 0s 161028510e-09 0s 0s 161034350e-09 1s 1s 161036830e-09 0s 0s 161038790e-09 0s 0s 161044590e-09 1s 1s 161047070e-09 0s 0s 161049070e-09 0s 0s 161054830e-09 1s 1s 161057310e-09 0s 0s 161059350e-09 0s 0s 161065070e-09 1s 1s 161067550e-09 0s 0s 161069630e-09 0s 0s 161075310e-09 1s 1s 161077790e-09 0s 0s 161079910e-09 0s 0s 161085550e-09 1s 1s 161088030e-09 0s 0s 161090190e-09 0s 0s 161095790e-09 1s 1s 161098270e-09 0s 0s 161100470e-09 0s 0s 161106030e-09 1s 1s 161108510e-09 0s 0s 161110750e-09 0s 0s 161116270e-09 1s 1s 161118750e-09 0s 0s 161121030e-09 0s 0s 161126510e-09 1s 1s 161128990e-09 0s 0s 161131310e-09 0s 0s 161136750e-09 1s 1s 161139230e-09 0s 0s 161141590e-09 0s 0s 161146990e-09 1s 1s 161149470e-09 0s 0s 161151870e-09 0s 0s 161157230e-09 1s 1s 161159710e-09 0s 0s 161162150e-09 0s 0s 161167470e-09 1s 1s 161169950e-09 0s 0s 161172430e-09 0s 0s 161177710e-09 1s 1s 161180190e-09 0s 0s 161182710e-09 0s 0s 161187950e-09 1s 1s 161190430e-09 0s 0s 161192990e-09 0s 0s 161198190e-09 1s 1s 161200670e-09 0s 0s 161203270e-09 0s 0s 161208430e-09 1s 1s 161210910e-09 0s 0s 161213550e-09 0s 0s 161218670e-09 1s 1s 161221150e-09 0s 0s 161223830e-09 0s 0s 161228910e-09 1s 1s 161231390e-09 0s 0s 161234110e-09 0s 0s 161239150e-09 1s 1s 161241630e-09 0s 0s 161244390e-09 0s 0s 161249390e-09 1s 1s 161251870e-09 0s 0s 161254670e-09 0s 0s 161259630e-09 1s 1s 161262110e-09 0s 0s 161264950e-09 0s 0s 161269870e-09 1s 1s 161272350e-09 0s 0s 161275230e-09 0s 0s 161280110e-09 1s 1s 161282590e-09 0s 0s 161285510e-09 0s 0s 161290350e-09 1s 1s 161292830e-09 0s 0s 161295790e-09 0s 0s 161300590e-09 1s 1s 161303070e-09 0s 0s 161306070e-09 0s 0s 161310830e-09 1s 1s 161313310e-09 0s 0s 161316350e-09 0s 0s 161321070e-09 1s 1s 161323550e-09 0s 0s 161326630e-09 0s 0s 161331310e-09 1s 1s 161333790e-09 0s 0s 161336910e-09 0s 0s 161341550e-09 1s 1s 161344030e-09 0s 0s 161347190e-09 0s 0s 161351790e-09 1s 1s 161354270e-09 0s 0s 161357470e-09 0s 0s 161362030e-09 1s 1s 161364510e-09 0s 0s 161367750e-09 0s 0s 161372270e-09 1s 1s 161374750e-09 0s 0s 161378030e-09 0s 0s 161382510e-09 1s 1s 161384990e-09 0s 0s 161388310e-09 0s 0s 161392750e-09 1s 1s 161395230e-09 0s 0s 161398590e-09 0s 0s 161402990e-09 1s 1s 161405470e-09 0s 0s 161408870e-09 0s 0s 161413230e-09 1s 1s 161415710e-09 0s 0s 161419150e-09 0s 0s 161423470e-09 1s 1s 161425950e-09 0s 0s 161429430e-09 0s 0s 161433710e-09 1s 1s 161436190e-09 0s 0s 161439710e-09 0s 0s 161443950e-09 1s 1s 161446430e-09 0s 0s 161449990e-09 0s 0s 161454190e-09 1s 1s 161456670e-09 0s 0s 161460270e-09 0s 0s 161464430e-09 1s 1s 161466910e-09 0s 0s 161470550e-09 0s 0s 161474670e-09 1s 1s 161477150e-09 0s 0s 161480830e-09 0s 0s 161484910e-09 1s 1s 161487390e-09 0s 0s 161491110e-09 0s 0s 161495150e-09 1s 1s 161497630e-09 0s 0s 161501390e-09 0s 0s 161505390e-09 1s 1s 161507870e-09 0s 0s 161511670e-09 0s 0s 161515630e-09 1s 1s 161518110e-09 0s 0s 161521950e-09 0s 0s 161525870e-09 1s 1s 161528350e-09 0s 0s 161532230e-09 0s 0s 161536110e-09 1s 1s 161538590e-09 0s 0s 161542510e-09 0s 0s 161546350e-09 1s 1s 161548830e-09 0s 0s 161552790e-09 0s 0s 161556590e-09 1s 1s 161559070e-09 0s 0s 161563070e-09 0s 0s 161566830e-09 1s 1s 161569310e-09 0s 0s 161573350e-09 0s 0s 161577070e-09 1s 1s 161579550e-09 0s 0s 161583630e-09 0s 0s 161587310e-09 1s 1s 161589790e-09 0s 0s 161593910e-09 0s 0s 161597550e-09 1s 1s 161600030e-09 0s 0s 161604190e-09 0s 0s 161607790e-09 1s 1s 161610270e-09 0s 0s 161614470e-09 0s 0s 161618030e-09 1s 1s 161620510e-09 0s 0s 161624750e-09 0s 0s 161628270e-09 1s 1s 161630750e-09 0s 0s 161635030e-09 0s 0s 161638510e-09 1s 1s 161640990e-09 0s 0s 161645310e-09 0s 0s 161648750e-09 1s 1s 161651230e-09 0s 0s 161655590e-09 0s 0s 161658990e-09 1s 1s 161661470e-09 0s 0s 161665870e-09 0s 0s 161669230e-09 1s 1s 161671710e-09 0s 0s 161676150e-09 0s 0s 161679470e-09 1s 1s 161681950e-09 0s 0s 161686430e-09 0s 0s 161689710e-09 1s 1s 161692190e-09 0s 0s 161696710e-09 0s 0s 161699950e-09 1s 1s 161702430e-09 0s 0s 161706990e-09 0s 0s 161710190e-09 1s 1s 161712670e-09 0s 0s 161717270e-09 0s 0s 161720430e-09 1s 1s 161722910e-09 0s 0s 161727550e-09 0s 0s 161730670e-09 1s 1s 161733150e-09 0s 0s 161737830e-09 0s 0s 161740910e-09 1s 1s 161743390e-09 0s 0s 161748110e-09 0s 0s 161751150e-09 1s 1s 161753630e-09 0s 0s 161758390e-09 0s 0s 161761390e-09 1s 1s 161763870e-09 0s 0s 161768670e-09 0s 0s 161771630e-09 1s 1s 161774110e-09 0s 0s 161778950e-09 0s 0s 161781870e-09 1s 1s 161784350e-09 0s 0s 161789230e-09 0s 0s 161792110e-09 1s 1s 161794590e-09 0s 0s 161799510e-09 0s 0s 161802350e-09 1s 1s 161804830e-09 0s 0s 161809790e-09 0s 0s 161812590e-09 1s 1s 161815070e-09 0s 0s 161820070e-09 0s 0s 161822830e-09 1s 1s 161825310e-09 0s 0s 161830350e-09 0s 0s 161833070e-09 1s 1s 161835550e-09 0s 0s 161840630e-09 0s 0s 161843310e-09 1s 1s 161845790e-09 0s 0s 161850910e-09 0s 0s 161853550e-09 1s 1s 161856030e-09 0s 0s 161861190e-09 0s 0s 161863790e-09 1s 1s 161866270e-09 0s 0s 161871470e-09 0s 0s 161874030e-09 1s 1s 161876510e-09 0s 0s 161881750e-09 0s 0s 161884270e-09 1s 1s 161886750e-09 0s 0s 161892030e-09 0s 0s 161894510e-09 1s 1s 161896990e-09 0s 0s 161902310e-09 0s 0s 161904750e-09 1s 1s 161907230e-09 0s 0s 161912590e-09 0s 0s 161914990e-09 1s 1s 161917470e-09 0s 0s 161922870e-09 0s 0s 161925230e-09 1s 1s 161927710e-09 0s 0s 161933150e-09 0s 0s 161935470e-09 1s 1s 161937950e-09 0s 0s 161943430e-09 0s 0s 161945710e-09 1s 1s 161948190e-09 0s 0s 161953710e-09 0s 0s 161955950e-09 1s 1s 161958430e-09 0s 0s 161963990e-09 0s 0s 161966190e-09 1s 1s 161968670e-09 0s 0s 161974270e-09 0s 0s 161976430e-09 1s 1s 161978910e-09 0s 0s 161984550e-09 0s 0s 161986670e-09 1s 1s 161989150e-09 0s 0s 161994830e-09 0s 0s 161996910e-09 1s 1s 161999390e-09 0s 0s 162005110e-09 0s 0s 162007150e-09 1s 1s 162009630e-09 0s 0s 162015390e-09 0s 0s 162017390e-09 1s 1s 162019870e-09 0s 0s 162025670e-09 0s 0s 162027630e-09 1s 1s 162030110e-09 0s 0s 162035950e-09 0s 0s 162037870e-09 1s 1s 162040350e-09 0s 0s 162046230e-09 0s 0s 162048110e-09 1s 1s 162050590e-09 0s 0s 162056510e-09 0s 0s 162058350e-09 1s 1s 162060830e-09 0s 0s 162066790e-09 0s 0s 162068590e-09 1s 1s 162071070e-09 0s 0s 162077070e-09 0s 0s 162078830e-09 1s 1s 162081310e-09 0s 0s 162087350e-09 0s 0s 162089070e-09 1s 1s 162091550e-09 0s 0s 162097630e-09 0s 0s 162099310e-09 1s 1s 162101790e-09 0s 0s 162107910e-09 0s 0s 162109550e-09 1s 1s 162112030e-09 0s 0s 162118190e-09 0s 0s 162119790e-09 1s 1s 162122270e-09 0s 0s 162128470e-09 0s 0s 162130030e-09 1s 1s 162132510e-09 0s 0s 162138750e-09 0s 0s 162140270e-09 1s 1s 162142750e-09 0s 0s 162149030e-09 0s 0s 162150510e-09 1s 1s 162152990e-09 0s 0s 162159310e-09 0s 0s 162160750e-09 1s 1s 162163230e-09 0s 0s 162169590e-09 0s 0s 162170990e-09 1s 1s 162173470e-09 0s 0s 162179870e-09 0s 0s 162181230e-09 1s 1s 162183710e-09 0s 0s 162190150e-09 0s 0s 162191470e-09 1s 1s 162193950e-09 0s 0s 162200430e-09 0s 0s 162201710e-09 1s 1s 162204190e-09 0s 0s 162210710e-09 0s 0s 162211950e-09 1s 1s 162214430e-09 0s 0s 162220990e-09 0s 0s 162222190e-09 1s 1s 162224670e-09 0s 0s 162231270e-09 0s 0s 162232430e-09 1s 1s 162234910e-09 0s 0s 162241550e-09 0s 0s 162242670e-09 1s 1s 162245150e-09 0s 0s 162251830e-09 0s 0s 162252910e-09 1s 1s 162255390e-09 0s 0s 162262110e-09 0s 0s 162263150e-09 1s 1s 162265630e-09 0s 0s 162272390e-09 0s 0s 162273390e-09 1s 1s 162275870e-09 0s 0s 162282670e-09 0s 0s 162283630e-09 1s 1s 162286110e-09 0s 0s 162292950e-09 0s 0s 162293870e-09 1s 1s 162296350e-09 0s 0s 162303230e-09 0s 0s 162304110e-09 1s 1s 162306590e-09 0s 0s 162313510e-09 0s 0s 162314350e-09 1s 1s 162316830e-09 0s 0s 162323790e-09 0s 0s 162324590e-09 1s 1s 162327070e-09 0s 0s 162334070e-09 0s 0s 162334830e-09 1s 1s 162337310e-09 0s 0s 162344350e-09 0s 0s 162345070e-09 1s 1s 162347550e-09 0s 0s 162354630e-09 0s 0s 162355310e-09 1s 1s 162357790e-09 0s 0s 162364910e-09 0s 0s 162365550e-09 1s 1s 162368030e-09 0s 0s 162375190e-09 0s 0s 162375790e-09 1s 1s 162378270e-09 0s 0s 162385470e-09 0s 0s 162386030e-09 1s 1s 162388510e-09 0s 0s 162395750e-09 0s 0s 162396270e-09 1s 1s 162398750e-09 0s 0s 162406030e-09 0s 0s 162406510e-09 1s 1s 162408990e-09 0s 0s 162416310e-09 0s 0s 162416750e-09 1s 1s 162419230e-09 0s 0s 162426590e-09 0s 0s 162426990e-09 1s 1s 162429470e-09 0s 0s 162436870e-09 0s 0s 162437230e-09 1s 1s 162439710e-09 0s 0s 162447150e-09 0s 0s 162447470e-09 1s 1s 162449950e-09 0s 0s 162457430e-09 0s 0s 162457710e-09 1s 1s 162460190e-09 0s 0s 162467710e-09 0s 0s 162467950e-09 1s 1s 162470430e-09 0s 0s 162477990e-09 0s 0s 162478190e-09 1s 1s 162480670e-09 0s 0s 162488270e-09 0s 0s 162488430e-09 1s 1s 162490910e-09 0s 0s 162498550e-09 0s 0s 162498670e-09 1s 1s 162501150e-09 0s 0s 162508830e-09 0s 0s 162508910e-09 1s 1s 162511390e-09 0s 0s 162519110e-09 0s 0s 162519150e-09 1s 1s 162521630e-09 0s 0s 162529390e-09 1s 1s 162529430e-09 1s 1s 162531910e-09 0s 0s 162539630e-09 1s 1s 162539710e-09 1s 1s 162542150e-09 0s 0s 162549870e-09 1s 1s 162549990e-09 1s 1s 162552390e-09 0s 0s 162560110e-09 1s 1s 162560270e-09 1s 1s 162562630e-09 0s 0s 162570350e-09 1s 1s 162570550e-09 1s 1s 162572870e-09 0s 0s 162580590e-09 1s 1s 162580830e-09 1s 1s 162583110e-09 0s 0s 162590830e-09 1s 1s 162591110e-09 1s 1s 162593350e-09 0s 0s 162601070e-09 1s 1s 162601390e-09 1s 1s 162603590e-09 0s 0s 162611310e-09 1s 1s 162611670e-09 1s 1s 162613830e-09 0s 0s 162621550e-09 1s 1s 162621950e-09 1s 1s 162624070e-09 0s 0s 162631790e-09 1s 1s 162632230e-09 1s 1s 162634310e-09 0s 0s 162642030e-09 1s 1s 162642510e-09 1s 1s 162644550e-09 0s 0s 162652270e-09 1s 1s 162652790e-09 1s 1s 162654790e-09 0s 0s 162662510e-09 1s 1s 162663070e-09 1s 1s 162665030e-09 0s 0s 162672750e-09 1s 1s 162673350e-09 1s 1s 162675270e-09 0s 0s 162682990e-09 1s 1s 162683630e-09 1s 1s 162685510e-09 0s 0s 162693230e-09 1s 1s 162693910e-09 1s 1s 162695750e-09 0s 0s 162703470e-09 1s 1s 162704190e-09 1s 1s 162705990e-09 0s 0s 162713710e-09 1s 1s 162714470e-09 1s 1s 162716230e-09 0s 0s 162723950e-09 1s 1s 162724750e-09 1s 1s 162726470e-09 0s 0s 162734190e-09 1s 1s 162735030e-09 1s 1s 162736710e-09 0s 0s 162744430e-09 1s 1s 162745310e-09 1s 1s 162746950e-09 0s 0s 162754670e-09 1s 1s 162755590e-09 1s 1s 162757190e-09 0s 0s 162764910e-09 1s 1s 162765870e-09 1s 1s 162767430e-09 0s 0s 162775150e-09 1s 1s 162776150e-09 1s 1s 162777670e-09 0s 0s 162785390e-09 1s 1s 162786430e-09 1s 1s 162787910e-09 0s 0s 162795630e-09 1s 1s 162796710e-09 1s 1s 162798150e-09 0s 0s 162805870e-09 1s 1s 162806990e-09 1s 1s 162808390e-09 0s 0s 162816110e-09 1s 1s 162817270e-09 1s 1s 162818630e-09 0s 0s 162826350e-09 1s 1s 162827550e-09 1s 1s 162828870e-09 0s 0s 162836590e-09 1s 1s 162837830e-09 1s 1s 162839110e-09 0s 0s 162846830e-09 1s 1s 162848110e-09 1s 1s 162849350e-09 0s 0s 162857070e-09 1s 1s 162858390e-09 1s 1s 162859590e-09 0s 0s 162867310e-09 1s 1s 162868670e-09 1s 1s 162869830e-09 0s 0s 162877550e-09 1s 1s 162878950e-09 1s 1s 162880070e-09 0s 0s 162887790e-09 1s 1s 162889230e-09 1s 1s 162890310e-09 0s 0s 162898030e-09 1s 1s 162899510e-09 1s 1s 162900550e-09 0s 0s 162908270e-09 1s 1s 162909790e-09 1s 1s 162910790e-09 0s 0s 162918510e-09 1s 1s 162920070e-09 1s 1s 162921030e-09 0s 0s 162928750e-09 1s 1s 162930350e-09 1s 1s 162931270e-09 0s 0s 162938990e-09 1s 1s 162940630e-09 1s 1s 162941510e-09 0s 0s 162949230e-09 1s 1s 162950910e-09 1s 1s 162951750e-09 0s 0s 162959470e-09 1s 1s 162961190e-09 1s 1s 162961990e-09 0s 0s 162969710e-09 1s 1s 162971470e-09 1s 1s 162972230e-09 0s 0s 162979950e-09 1s 1s 162981750e-09 1s 1s 162982470e-09 0s 0s 162990190e-09 1s 1s 162992030e-09 1s 1s 162992710e-09 0s 0s 163000430e-09 1s 1s 163002310e-09 1s 1s 163002950e-09 0s 0s 163010670e-09 1s 1s 163012590e-09 1s 1s 163013190e-09 0s 0s 163020910e-09 1s 1s 163022870e-09 1s 1s 163023430e-09 0s 0s 163031150e-09 1s 1s 163033150e-09 1s 1s 163033670e-09 0s 0s 163041390e-09 1s 1s 163043430e-09 1s 1s 163043910e-09 0s 0s 163051630e-09 1s 1s 163053710e-09 1s 1s 163054150e-09 0s 0s 163061870e-09 1s 1s 163063990e-09 1s 1s 163064390e-09 0s 0s 163072110e-09 1s 1s 163074270e-09 1s 1s 163074630e-09 0s 0s 163082350e-09 1s 1s 163084550e-09 1s 1s 163084870e-09 0s 0s 163092590e-09 1s 1s 163094830e-09 1s 1s 163095110e-09 0s 0s 163102830e-09 1s 1s 163105110e-09 1s 1s 163105350e-09 0s 0s 163113070e-09 1s 1s 163115390e-09 1s 1s 163115590e-09 0s 0s 163123310e-09 1s 1s 163125670e-09 1s 1s 163125830e-09 0s 0s 163133550e-09 1s 1s 163135950e-09 1s 1s 163136070e-09 0s 0s 163143790e-09 1s 1s 163146230e-09 1s 1s 163146310e-09 0s 0s 163154030e-09 1s 1s 163156510e-09 1s 1s 163156550e-09 0s 0s 163164270e-09 1s 1s 163166790e-09 0s 0s 163174510e-09 1s 1s 163177030e-09 0s 0s 163177070e-09 0s 0s 163184750e-09 1s 1s 163187270e-09 0s 0s 163187350e-09 0s 0s 163194990e-09 1s 1s 163197510e-09 0s 0s 163197630e-09 0s 0s 163205230e-09 1s 1s 163207750e-09 0s 0s 163207910e-09 0s 0s 163215470e-09 1s 1s 163217990e-09 0s 0s 163218190e-09 0s 0s 163225710e-09 1s 1s 163228230e-09 0s 0s 163228470e-09 0s 0s 163235950e-09 1s 1s 163238470e-09 0s 0s 163238750e-09 0s 0s 163246190e-09 1s 1s 163248710e-09 0s 0s 163249030e-09 0s 0s 163256430e-09 1s 1s 163258950e-09 0s 0s 163259310e-09 0s 0s 163266670e-09 1s 1s 163269190e-09 0s 0s 163269590e-09 0s 0s 163276910e-09 1s 1s 163279430e-09 0s 0s 163279870e-09 0s 0s 163287150e-09 1s 1s 163289670e-09 0s 0s 163290150e-09 0s 0s 163297390e-09 1s 1s 163299910e-09 0s 0s 163300430e-09 0s 0s 163307630e-09 1s 1s 163310150e-09 0s 0s 163310710e-09 0s 0s 163317870e-09 1s 1s 163320390e-09 0s 0s 163320990e-09 0s 0s 163328110e-09 1s 1s 163330630e-09 0s 0s 163331270e-09 0s 0s 163338350e-09 1s 1s 163340870e-09 0s 0s 163341550e-09 0s 0s 163348590e-09 1s 1s 163351110e-09 0s 0s 163351830e-09 0s 0s 163358830e-09 1s 1s 163361350e-09 0s 0s 163362110e-09 0s 0s 163369070e-09 1s 1s 163371590e-09 0s 0s 163372390e-09 0s 0s 163379310e-09 1s 1s 163381830e-09 0s 0s 163382670e-09 0s 0s 163389550e-09 1s 1s 163392070e-09 0s 0s 163392950e-09 0s 0s 163399790e-09 1s 1s 163402310e-09 0s 0s 163403230e-09 0s 0s 163410030e-09 1s 1s 163412550e-09 0s 0s 163413510e-09 0s 0s 163420270e-09 1s 1s 163422790e-09 0s 0s 163423790e-09 0s 0s 163430510e-09 1s 1s 163433030e-09 0s 0s 163434070e-09 0s 0s 163440750e-09 1s 1s 163443270e-09 0s 0s 163444350e-09 0s 0s 163450990e-09 1s 1s 163453510e-09 0s 0s 163454630e-09 0s 0s 163461230e-09 1s 1s 163463750e-09 0s 0s 163464910e-09 0s 0s 163471470e-09 1s 1s 163473990e-09 0s 0s 163475190e-09 0s 0s 163481710e-09 1s 1s 163484230e-09 0s 0s 163485470e-09 0s 0s 163491950e-09 1s 1s 163494470e-09 0s 0s 163495750e-09 0s 0s 163502190e-09 1s 1s 163504710e-09 0s 0s 163506030e-09 0s 0s 163512430e-09 1s 1s 163514950e-09 0s 0s 163516310e-09 0s 0s 163522670e-09 1s 1s 163525190e-09 0s 0s 163526590e-09 0s 0s 163532910e-09 1s 1s 163535430e-09 0s 0s 163536870e-09 0s 0s 163543150e-09 1s 1s 163545670e-09 0s 0s 163547150e-09 0s 0s 163553390e-09 1s 1s 163555910e-09 0s 0s 163557430e-09 0s 0s 163563630e-09 1s 1s 163566150e-09 0s 0s 163567710e-09 0s 0s 163573870e-09 1s 1s 163576390e-09 0s 0s 163577990e-09 0s 0s 163584110e-09 1s 1s 163586630e-09 0s 0s 163588270e-09 0s 0s 163594350e-09 1s 1s 163596870e-09 0s 0s 163598550e-09 0s 0s 163604590e-09 1s 1s 163607110e-09 0s 0s 163608830e-09 0s 0s 163614830e-09 1s 1s 163617350e-09 0s 0s 163619110e-09 0s 0s 163625070e-09 1s 1s 163627590e-09 0s 0s 163629390e-09 0s 0s 163635310e-09 1s 1s 163637830e-09 0s 0s 163639670e-09 0s 0s 163645550e-09 1s 1s 163648070e-09 0s 0s 163649950e-09 0s 0s 163655790e-09 1s 1s 163658310e-09 0s 0s 163660230e-09 0s 0s 163666030e-09 1s 1s 163668550e-09 0s 0s 163670510e-09 0s 0s 163676270e-09 1s 1s 163678790e-09 0s 0s 163680790e-09 0s 0s 163686510e-09 1s 1s 163689030e-09 0s 0s 163691070e-09 0s 0s 163696750e-09 1s 1s 163699270e-09 0s 0s 163701350e-09 0s 0s 163706990e-09 1s 1s 163709510e-09 0s 0s 163711630e-09 0s 0s 163717230e-09 1s 1s 163719750e-09 0s 0s 163721910e-09 0s 0s 163727470e-09 1s 1s 163729990e-09 0s 0s 163732190e-09 0s 0s 163737710e-09 1s 1s 163740230e-09 0s 0s 163742470e-09 0s 0s 163747950e-09 1s 1s 163750470e-09 0s 0s 163752750e-09 0s 0s 163758190e-09 1s 1s 163760710e-09 0s 0s 163763030e-09 0s 0s 163768430e-09 1s 1s 163770950e-09 0s 0s 163773310e-09 0s 0s 163778670e-09 1s 1s 163781190e-09 0s 0s 163783590e-09 0s 0s 163788910e-09 1s 1s 163791430e-09 0s 0s 163793870e-09 0s 0s 163799150e-09 1s 1s 163801670e-09 0s 0s 163804150e-09 0s 0s 163809390e-09 1s 1s 163811910e-09 0s 0s 163814430e-09 0s 0s 163819630e-09 1s 1s 163822150e-09 0s 0s 163824710e-09 0s 0s 163829870e-09 1s 1s 163832390e-09 0s 0s 163834990e-09 0s 0s 163840110e-09 1s 1s 163842630e-09 0s 0s 163845270e-09 0s 0s 163850350e-09 1s 1s 163852870e-09 0s 0s 163855550e-09 0s 0s 163860590e-09 1s 1s 163863110e-09 0s 0s 163865830e-09 0s 0s 163870830e-09 1s 1s 163873350e-09 0s 0s 163876110e-09 0s 0s 163881070e-09 1s 1s 163883590e-09 0s 0s 163886390e-09 0s 0s 163891310e-09 1s 1s 163893830e-09 0s 0s 163896670e-09 0s 0s 163901550e-09 1s 1s 163904070e-09 0s 0s 163906950e-09 0s 0s 163911790e-09 1s 1s 163914310e-09 0s 0s 163917230e-09 0s 0s 163922030e-09 1s 1s 163924550e-09 0s 0s 163927510e-09 0s 0s 163932270e-09 1s 1s 163934790e-09 0s 0s 163937790e-09 0s 0s 163942510e-09 1s 1s 163945030e-09 0s 0s 163948070e-09 0s 0s 163952750e-09 1s 1s 163955270e-09 0s 0s 163958350e-09 0s 0s 163962990e-09 1s 1s 163965510e-09 0s 0s 163968630e-09 0s 0s 163973230e-09 1s 1s 163975750e-09 0s 0s 163978910e-09 0s 0s 163983470e-09 1s 1s 163985990e-09 0s 0s 163989190e-09 0s 0s 163993710e-09 1s 1s 163996230e-09 0s 0s 163999470e-09 0s 0s 164003950e-09 1s 1s 164006470e-09 0s 0s 164009750e-09 0s 0s 164014190e-09 1s 1s 164016710e-09 0s 0s 164020030e-09 0s 0s 164024430e-09 1s 1s 164026950e-09 0s 0s 164030310e-09 0s 0s 164034670e-09 1s 1s 164037190e-09 0s 0s 164040590e-09 0s 0s 164044910e-09 1s 1s 164047430e-09 0s 0s 164050870e-09 0s 0s 164055150e-09 1s 1s 164057670e-09 0s 0s 164061150e-09 0s 0s 164065390e-09 1s 1s 164067910e-09 0s 0s 164071430e-09 0s 0s 164075630e-09 1s 1s 164078150e-09 0s 0s 164081710e-09 0s 0s 164085870e-09 1s 1s 164088390e-09 0s 0s 164091990e-09 0s 0s 164096110e-09 1s 1s 164098630e-09 0s 0s 164102270e-09 0s 0s 164106350e-09 1s 1s 164108870e-09 0s 0s 164112550e-09 0s 0s 164116590e-09 1s 1s 164119110e-09 0s 0s 164122830e-09 0s 0s 164126830e-09 1s 1s 164129350e-09 0s 0s 164133110e-09 0s 0s 164137070e-09 1s 1s 164139590e-09 0s 0s 164143390e-09 0s 0s 164147310e-09 1s 1s 164149830e-09 0s 0s 164153670e-09 0s 0s 164157550e-09 1s 1s 164160070e-09 0s 0s 164163950e-09 0s 0s 164167790e-09 1s 1s 164170310e-09 0s 0s 164174230e-09 0s 0s 164178030e-09 1s 1s 164180550e-09 0s 0s 164184510e-09 0s 0s 164188270e-09 1s 1s 164190790e-09 0s 0s 164194790e-09 0s 0s 164198510e-09 1s 1s 164201030e-09 0s 0s 164205070e-09 0s 0s 164208750e-09 1s 1s 164211270e-09 0s 0s 164215350e-09 0s 0s 164218990e-09 1s 1s 164221510e-09 0s 0s 164225630e-09 0s 0s 164229230e-09 1s 1s 164231750e-09 0s 0s 164235910e-09 0s 0s 164239470e-09 1s 1s 164241990e-09 0s 0s 164246190e-09 0s 0s 164249710e-09 1s 1s 164252230e-09 0s 0s 164256470e-09 0s 0s 164259950e-09 1s 1s 164262470e-09 0s 0s 164266750e-09 0s 0s 164270190e-09 1s 1s 164272710e-09 0s 0s 164277030e-09 0s 0s 164280430e-09 1s 1s 164282950e-09 0s 0s 164287310e-09 0s 0s 164290670e-09 1s 1s 164293190e-09 0s 0s 164297590e-09 0s 0s 164300910e-09 1s 1s 164303430e-09 0s 0s 164307870e-09 0s 0s 164311150e-09 1s 1s 164313670e-09 0s 0s 164318150e-09 0s 0s 164321390e-09 1s 1s 164323910e-09 0s 0s 164328430e-09 0s 0s 164331630e-09 1s 1s 164334150e-09 0s 0s 164338710e-09 0s 0s 164341870e-09 1s 1s 164344390e-09 0s 0s 164348990e-09 0s 0s 164352110e-09 1s 1s 164354630e-09 0s 0s 164359270e-09 0s 0s 164362350e-09 1s 1s 164364870e-09 0s 0s 164369550e-09 0s 0s 164372590e-09 1s 1s 164375110e-09 0s 0s 164379830e-09 0s 0s 164382830e-09 1s 1s 164385350e-09 0s 0s 164390110e-09 0s 0s 164393070e-09 1s 1s 164395590e-09 0s 0s 164400390e-09 0s 0s 164403310e-09 1s 1s 164405830e-09 0s 0s 164410670e-09 0s 0s 164413550e-09 1s 1s 164416070e-09 0s 0s 164420950e-09 0s 0s 164423790e-09 1s 1s 164426310e-09 0s 0s 164431230e-09 0s 0s 164434030e-09 1s 1s 164436550e-09 0s 0s 164441510e-09 0s 0s 164444270e-09 1s 1s 164446790e-09 0s 0s 164451790e-09 0s 0s 164454510e-09 1s 1s 164457030e-09 0s 0s 164462070e-09 0s 0s 164464750e-09 1s 1s 164467270e-09 0s 0s 164472350e-09 0s 0s 164474990e-09 1s 1s 164477510e-09 0s 0s 164482630e-09 0s 0s 164485230e-09 1s 1s 164487750e-09 0s 0s 164492910e-09 0s 0s 164495470e-09 1s 1s 164497990e-09 0s 0s 164503190e-09 0s 0s 164505710e-09 1s 1s 164508230e-09 0s 0s 164513470e-09 0s 0s 164515950e-09 1s 1s 164518470e-09 0s 0s 164523750e-09 0s 0s 164526190e-09 1s 1s 164528710e-09 0s 0s 164534030e-09 0s 0s 164536430e-09 1s 1s 164538950e-09 0s 0s 164544310e-09 0s 0s 164546670e-09 1s 1s 164549190e-09 0s 0s 164554590e-09 0s 0s 164556910e-09 1s 1s 164559430e-09 0s 0s 164564870e-09 0s 0s 164567150e-09 1s 1s 164569670e-09 0s 0s 164575150e-09 0s 0s 164577390e-09 1s 1s 164579910e-09 0s 0s 164585430e-09 0s 0s 164587630e-09 1s 1s 164590150e-09 0s 0s 164595710e-09 0s 0s 164597870e-09 1s 1s 164600390e-09 0s 0s 164605990e-09 0s 0s 164608110e-09 1s 1s 164610630e-09 0s 0s 164616270e-09 0s 0s 164618350e-09 1s 1s 164620870e-09 0s 0s 164626550e-09 0s 0s 164628590e-09 1s 1s 164631110e-09 0s 0s 164636830e-09 0s 0s 164638830e-09 1s 1s 164641350e-09 0s 0s 164647110e-09 0s 0s 164649070e-09 1s 1s 164651590e-09 0s 0s 164657390e-09 0s 0s 164659310e-09 1s 1s 164661830e-09 0s 0s 164667670e-09 0s 0s 164669550e-09 1s 1s 164672070e-09 0s 0s 164677950e-09 0s 0s 164679790e-09 1s 1s 164682310e-09 0s 0s 164688230e-09 0s 0s 164690030e-09 1s 1s 164692550e-09 0s 0s 164698510e-09 0s 0s 164700270e-09 1s 1s 164702790e-09 0s 0s 164708790e-09 0s 0s 164710510e-09 1s 1s 164713030e-09 0s 0s 164719070e-09 0s 0s 164720750e-09 1s 1s 164723270e-09 0s 0s 164729350e-09 0s 0s 164730990e-09 1s 1s 164733510e-09 0s 0s 164739630e-09 0s 0s 164741230e-09 1s 1s 164743750e-09 0s 0s 164749910e-09 0s 0s 164751470e-09 1s 1s 164753990e-09 0s 0s 164760190e-09 0s 0s 164761710e-09 1s 1s 164764230e-09 0s 0s 164770470e-09 0s 0s 164771950e-09 1s 1s 164774470e-09 0s 0s 164780750e-09 0s 0s 164782190e-09 1s 1s 164784710e-09 0s 0s 164791030e-09 0s 0s 164792430e-09 1s 1s 164794950e-09 0s 0s 164801310e-09 0s 0s 164802670e-09 1s 1s 164805190e-09 0s 0s 164811590e-09 0s 0s 164812910e-09 1s 1s 164815430e-09 0s 0s 164821870e-09 0s 0s 164823150e-09 1s 1s 164825670e-09 0s 0s 164832150e-09 0s 0s 164833390e-09 1s 1s 164835910e-09 0s 0s 164842430e-09 0s 0s 164843630e-09 1s 1s 164846150e-09 0s 0s 164852710e-09 0s 0s 164853870e-09 1s 1s 164856390e-09 0s 0s 164862990e-09 0s 0s 164864110e-09 1s 1s 164866630e-09 0s 0s 164873270e-09 0s 0s 164874350e-09 1s 1s 164876870e-09 0s 0s 164883550e-09 0s 0s 164884590e-09 1s 1s 164887110e-09 0s 0s 164893830e-09 0s 0s 164894830e-09 1s 1s 164897350e-09 0s 0s 164904110e-09 0s 0s 164905070e-09 1s 1s 164907590e-09 0s 0s 164914390e-09 0s 0s 164915310e-09 1s 1s 164917830e-09 0s 0s 164924670e-09 0s 0s 164925550e-09 1s 1s 164928070e-09 0s 0s 164934950e-09 0s 0s 164935790e-09 1s 1s 164938310e-09 0s 0s 164945230e-09 0s 0s 164946030e-09 1s 1s 164948550e-09 0s 0s 164955510e-09 0s 0s 164956270e-09 1s 1s 164958790e-09 0s 0s 164965790e-09 0s 0s 164966510e-09 1s 1s 164969030e-09 0s 0s 164976070e-09 0s 0s 164976750e-09 1s 1s 164979270e-09 0s 0s 164986350e-09 0s 0s 164986990e-09 1s 1s 164989510e-09 0s 0s 164996630e-09 0s 0s 164997230e-09 1s 1s 164999750e-09 0s 0s 165006910e-09 0s 0s 165007470e-09 1s 1s 165009990e-09 0s 0s 165017190e-09 0s 0s 165017710e-09 1s 1s 165020230e-09 0s 0s 165027470e-09 0s 0s 165027950e-09 1s 1s 165030470e-09 0s 0s 165037750e-09 0s 0s 165038190e-09 1s 1s 165040710e-09 0s 0s 165048030e-09 0s 0s 165048430e-09 1s 1s 165050950e-09 0s 0s 165058310e-09 0s 0s 165058670e-09 1s 1s 165061190e-09 0s 0s 165068590e-09 0s 0s 165068910e-09 1s 1s 165071430e-09 0s 0s 165078870e-09 0s 0s 165079150e-09 1s 1s 165081670e-09 0s 0s 165089150e-09 0s 0s 165089390e-09 1s 1s 165091910e-09 0s 0s 165099430e-09 0s 0s 165099630e-09 1s 1s 165102150e-09 0s 0s 165109710e-09 0s 0s 165109870e-09 1s 1s 165112390e-09 0s 0s 165119990e-09 0s 0s 165120110e-09 1s 1s 165122630e-09 0s 0s 165130270e-09 0s 0s 165130350e-09 1s 1s 165132870e-09 0s 0s 165140550e-09 0s 0s 165140590e-09 1s 1s 165143110e-09 0s 0s 165150830e-09 1s 1s 165150870e-09 1s 1s 165153390e-09 0s 0s 165161070e-09 1s 1s 165161150e-09 1s 1s 165163630e-09 0s 0s 165171310e-09 1s 1s 165171430e-09 1s 1s 165173870e-09 0s 0s 165181550e-09 1s 1s 165181710e-09 1s 1s 165184110e-09 0s 0s 165191790e-09 1s 1s 165191990e-09 1s 1s 165194350e-09 0s 0s 165202030e-09 1s 1s 165202270e-09 1s 1s 165204590e-09 0s 0s 165212270e-09 1s 1s 165212550e-09 1s 1s 165214830e-09 0s 0s 165222510e-09 1s 1s 165222830e-09 1s 1s 165225070e-09 0s 0s 165232750e-09 1s 1s 165233110e-09 1s 1s 165235310e-09 0s 0s 165242990e-09 1s 1s 165243390e-09 1s 1s 165245550e-09 0s 0s 165253230e-09 1s 1s 165253670e-09 1s 1s 165255790e-09 0s 0s 165263470e-09 1s 1s 165263950e-09 1s 1s 165266030e-09 0s 0s 165273710e-09 1s 1s 165274230e-09 1s 1s 165276270e-09 0s 0s 165283950e-09 1s 1s 165284510e-09 1s 1s 165286510e-09 0s 0s 165294190e-09 1s 1s 165294790e-09 1s 1s 165296750e-09 0s 0s 165304430e-09 1s 1s 165305070e-09 1s 1s 165306990e-09 0s 0s 165314670e-09 1s 1s 165315350e-09 1s 1s 165317230e-09 0s 0s 165324910e-09 1s 1s 165325630e-09 1s 1s 165327470e-09 0s 0s 165335150e-09 1s 1s 165335910e-09 1s 1s 165337710e-09 0s 0s 165345390e-09 1s 1s 165346190e-09 1s 1s 165347950e-09 0s 0s 165355630e-09 1s 1s 165356470e-09 1s 1s 165358190e-09 0s 0s 165365870e-09 1s 1s 165366750e-09 1s 1s 165368430e-09 0s 0s 165376110e-09 1s 1s 165377030e-09 1s 1s 165378670e-09 0s 0s 165386350e-09 1s 1s 165387310e-09 1s 1s 165388910e-09 0s 0s 165396590e-09 1s 1s 165397590e-09 1s 1s 165399150e-09 0s 0s 165406830e-09 1s 1s 165407870e-09 1s 1s 165409390e-09 0s 0s 165417070e-09 1s 1s 165418150e-09 1s 1s 165419630e-09 0s 0s 165427310e-09 1s 1s 165428430e-09 1s 1s 165429870e-09 0s 0s 165437550e-09 1s 1s 165438710e-09 1s 1s 165440110e-09 0s 0s 165447790e-09 1s 1s 165448990e-09 1s 1s 165450350e-09 0s 0s 165458030e-09 1s 1s 165459270e-09 1s 1s 165460590e-09 0s 0s 165468270e-09 1s 1s 165469550e-09 1s 1s 165470830e-09 0s 0s 165478510e-09 1s 1s 165479830e-09 1s 1s 165481070e-09 0s 0s 165488750e-09 1s 1s 165490110e-09 1s 1s 165491310e-09 0s 0s 165498990e-09 1s 1s 165500390e-09 1s 1s 165501550e-09 0s 0s 165509230e-09 1s 1s 165510670e-09 1s 1s 165511790e-09 0s 0s 165519470e-09 1s 1s 165520950e-09 1s 1s 165522030e-09 0s 0s 165529710e-09 1s 1s 165531230e-09 1s 1s 165532270e-09 0s 0s 165539950e-09 1s 1s 165541510e-09 1s 1s 165542510e-09 0s 0s 165550190e-09 1s 1s 165551790e-09 1s 1s 165552750e-09 0s 0s 165560430e-09 1s 1s 165562070e-09 1s 1s 165562990e-09 0s 0s 165570670e-09 1s 1s 165572350e-09 1s 1s 165573230e-09 0s 0s 165580910e-09 1s 1s 165582630e-09 1s 1s 165583470e-09 0s 0s 165591150e-09 1s 1s 165592910e-09 1s 1s 165593710e-09 0s 0s 165601390e-09 1s 1s 165603190e-09 1s 1s 165603950e-09 0s 0s 165611630e-09 1s 1s 165613470e-09 1s 1s 165614190e-09 0s 0s 165621870e-09 1s 1s 165623750e-09 1s 1s 165624430e-09 0s 0s 165632110e-09 1s 1s 165634030e-09 1s 1s 165634670e-09 0s 0s 165642350e-09 1s 1s 165644310e-09 1s 1s 165644910e-09 0s 0s 165652590e-09 1s 1s 165654590e-09 1s 1s 165655150e-09 0s 0s 165662830e-09 1s 1s 165664870e-09 1s 1s 165665390e-09 0s 0s 165673070e-09 1s 1s 165675150e-09 1s 1s 165675630e-09 0s 0s 165683310e-09 1s 1s 165685430e-09 1s 1s 165685870e-09 0s 0s 165693550e-09 1s 1s 165695710e-09 1s 1s 165696110e-09 0s 0s 165703790e-09 1s 1s 165705990e-09 1s 1s 165706350e-09 0s 0s 165714030e-09 1s 1s 165716270e-09 1s 1s 165716590e-09 0s 0s 165724270e-09 1s 1s 165726550e-09 1s 1s 165726830e-09 0s 0s 165734510e-09 1s 1s 165736830e-09 1s 1s 165737070e-09 0s 0s 165744750e-09 1s 1s 165747110e-09 1s 1s 165747310e-09 0s 0s 165754990e-09 1s 1s 165757390e-09 1s 1s 165757550e-09 0s 0s 165765230e-09 1s 1s 165767670e-09 1s 1s 165767790e-09 0s 0s 165775470e-09 1s 1s 165777950e-09 1s 1s 165778030e-09 0s 0s 165785710e-09 1s 1s 165788230e-09 1s 1s 165788270e-09 0s 0s 165795950e-09 1s 1s 165798510e-09 0s 0s 165806190e-09 1s 1s 165808750e-09 0s 0s 165808790e-09 0s 0s 165816430e-09 1s 1s 165818990e-09 0s 0s 165819070e-09 0s 0s 165826670e-09 1s 1s 165829230e-09 0s 0s 165829350e-09 0s 0s 165836910e-09 1s 1s 165839470e-09 0s 0s 165839630e-09 0s 0s 165847150e-09 1s 1s 165849710e-09 0s 0s 165849910e-09 0s 0s 165857390e-09 1s 1s 165859950e-09 0s 0s 165860190e-09 0s 0s 165867630e-09 1s 1s 165870190e-09 0s 0s 165870470e-09 0s 0s 165877870e-09 1s 1s 165880430e-09 0s 0s 165880750e-09 0s 0s 165888110e-09 1s 1s 165890670e-09 0s 0s 165891030e-09 0s 0s 165898350e-09 1s 1s 165900910e-09 0s 0s 165901310e-09 0s 0s 165908590e-09 1s 1s 165911150e-09 0s 0s 165911590e-09 0s 0s 165918830e-09 1s 1s 165921390e-09 0s 0s 165921870e-09 0s 0s 165929070e-09 1s 1s 165931630e-09 0s 0s 165932150e-09 0s 0s 165939310e-09 1s 1s 165941870e-09 0s 0s 165942430e-09 0s 0s 165949550e-09 1s 1s 165952110e-09 0s 0s 165952710e-09 0s 0s 165959790e-09 1s 1s 165962350e-09 0s 0s 165962990e-09 0s 0s 165970030e-09 1s 1s 165972590e-09 0s 0s 165973270e-09 0s 0s 165980270e-09 1s 1s 165982830e-09 0s 0s 165983550e-09 0s 0s 165990510e-09 1s 1s 165993070e-09 0s 0s 165993830e-09 0s 0s 166000750e-09 1s 1s 166003310e-09 0s 0s 166004110e-09 0s 0s 166010990e-09 1s 1s 166013550e-09 0s 0s 166014390e-09 0s 0s 166021230e-09 1s 1s 166023790e-09 0s 0s 166024670e-09 0s 0s 166031470e-09 1s 1s 166034030e-09 0s 0s 166034950e-09 0s 0s 166041710e-09 1s 1s 166044270e-09 0s 0s 166045230e-09 0s 0s 166051950e-09 1s 1s 166054510e-09 0s 0s 166055510e-09 0s 0s 166062190e-09 1s 1s 166064750e-09 0s 0s 166065790e-09 0s 0s 166072430e-09 1s 1s 166074990e-09 0s 0s 166076070e-09 0s 0s 166082670e-09 1s 1s 166085230e-09 0s 0s 166086350e-09 0s 0s 166092910e-09 1s 1s 166095470e-09 0s 0s 166096630e-09 0s 0s 166103150e-09 1s 1s 166105710e-09 0s 0s 166106910e-09 0s 0s 166113390e-09 1s 1s 166115950e-09 0s 0s 166117190e-09 0s 0s 166123630e-09 1s 1s 166126190e-09 0s 0s 166127470e-09 0s 0s 166133870e-09 1s 1s 166136430e-09 0s 0s 166137750e-09 0s 0s 166144110e-09 1s 1s 166146670e-09 0s 0s 166148030e-09 0s 0s 166154350e-09 1s 1s 166156910e-09 0s 0s 166158310e-09 0s 0s 166164590e-09 1s 1s 166167150e-09 0s 0s 166168590e-09 0s 0s 166174830e-09 1s 1s 166177390e-09 0s 0s 166178870e-09 0s 0s 166185070e-09 1s 1s 166187630e-09 0s 0s 166189150e-09 0s 0s 166195310e-09 1s 1s 166197870e-09 0s 0s 166199430e-09 0s 0s 166205550e-09 1s 1s 166208110e-09 0s 0s 166209710e-09 0s 0s 166215790e-09 1s 1s 166218350e-09 0s 0s 166219990e-09 0s 0s 166226030e-09 1s 1s 166228590e-09 0s 0s 166230270e-09 0s 0s 166236270e-09 1s 1s 166238830e-09 0s 0s 166240550e-09 0s 0s 166246510e-09 1s 1s 166249070e-09 0s 0s 166250830e-09 0s 0s 166256750e-09 1s 1s 166259310e-09 0s 0s 166261110e-09 0s 0s 166266990e-09 1s 1s 166269550e-09 0s 0s 166271390e-09 0s 0s 166277230e-09 1s 1s 166279790e-09 0s 0s 166281670e-09 0s 0s 166287470e-09 1s 1s 166290030e-09 0s 0s 166291950e-09 0s 0s 166297710e-09 1s 1s 166300270e-09 0s 0s 166302230e-09 0s 0s 166307950e-09 1s 1s 166310510e-09 0s 0s 166312510e-09 0s 0s 166318190e-09 1s 1s 166320750e-09 0s 0s 166322790e-09 0s 0s 166328430e-09 1s 1s 166330990e-09 0s 0s 166333070e-09 0s 0s 166338670e-09 1s 1s 166341230e-09 0s 0s 166343350e-09 0s 0s 166348910e-09 1s 1s 166351470e-09 0s 0s 166353630e-09 0s 0s 166359150e-09 1s 1s 166361710e-09 0s 0s 166363910e-09 0s 0s 166369390e-09 1s 1s 166371950e-09 0s 0s 166374190e-09 0s 0s 166379630e-09 1s 1s 166382190e-09 0s 0s 166384470e-09 0s 0s 166389870e-09 1s 1s 166392430e-09 0s 0s 166394750e-09 0s 0s 166400110e-09 1s 1s 166402670e-09 0s 0s 166405030e-09 0s 0s 166410350e-09 1s 1s 166412910e-09 0s 0s 166415310e-09 0s 0s 166420590e-09 1s 1s 166423150e-09 0s 0s 166425590e-09 0s 0s 166430830e-09 1s 1s 166433390e-09 0s 0s 166435870e-09 0s 0s 166441070e-09 1s 1s 166443630e-09 0s 0s 166446150e-09 0s 0s 166451310e-09 1s 1s 166453870e-09 0s 0s 166456430e-09 0s 0s 166461550e-09 1s 1s 166464110e-09 0s 0s 166466710e-09 0s 0s 166471790e-09 1s 1s 166474350e-09 0s 0s 166476990e-09 0s 0s 166482030e-09 1s 1s 166484590e-09 0s 0s 166487270e-09 0s 0s 166492270e-09 1s 1s 166494830e-09 0s 0s 166497550e-09 0s 0s 166502510e-09 1s 1s 166505070e-09 0s 0s 166507830e-09 0s 0s 166512750e-09 1s 1s 166515310e-09 0s 0s 166518110e-09 0s 0s 166522990e-09 1s 1s 166525550e-09 0s 0s 166528390e-09 0s 0s 166533230e-09 1s 1s 166535790e-09 0s 0s 166538670e-09 0s 0s 166543470e-09 1s 1s 166546030e-09 0s 0s 166548950e-09 0s 0s 166553710e-09 1s 1s 166556270e-09 0s 0s 166559230e-09 0s 0s 166563950e-09 1s 1s 166566510e-09 0s 0s 166569510e-09 0s 0s 166574190e-09 1s 1s 166576750e-09 0s 0s 166579790e-09 0s 0s 166584430e-09 1s 1s 166586990e-09 0s 0s 166590070e-09 0s 0s 166594670e-09 1s 1s 166597230e-09 0s 0s 166600350e-09 0s 0s 166604910e-09 1s 1s 166607470e-09 0s 0s 166610630e-09 0s 0s 166615150e-09 1s 1s 166617710e-09 0s 0s 166620910e-09 0s 0s 166625390e-09 1s 1s 166627950e-09 0s 0s 166631190e-09 0s 0s 166635630e-09 1s 1s 166638190e-09 0s 0s 166641470e-09 0s 0s 166645870e-09 1s 1s 166648430e-09 0s 0s 166651750e-09 0s 0s 166656110e-09 1s 1s 166658670e-09 0s 0s 166662030e-09 0s 0s 166666350e-09 1s 1s 166668910e-09 0s 0s 166672310e-09 0s 0s 166676590e-09 1s 1s 166679150e-09 0s 0s 166682590e-09 0s 0s 166686830e-09 1s 1s 166689390e-09 0s 0s 166692870e-09 0s 0s 166697070e-09 1s 1s 166699630e-09 0s 0s 166703150e-09 0s 0s 166707310e-09 1s 1s 166709870e-09 0s 0s 166713430e-09 0s 0s 166717550e-09 1s 1s 166720110e-09 0s 0s 166723710e-09 0s 0s 166727790e-09 1s 1s 166730350e-09 0s 0s 166733990e-09 0s 0s 166738030e-09 1s 1s 166740590e-09 0s 0s 166744270e-09 0s 0s 166748270e-09 1s 1s 166750830e-09 0s 0s 166754550e-09 0s 0s 166758510e-09 1s 1s 166761070e-09 0s 0s 166764830e-09 0s 0s 166768750e-09 1s 1s 166771310e-09 0s 0s 166775110e-09 0s 0s 166778990e-09 1s 1s 166781550e-09 0s 0s 166785390e-09 0s 0s 166789230e-09 1s 1s 166791790e-09 0s 0s 166795670e-09 0s 0s 166799470e-09 1s 1s 166802030e-09 0s 0s 166805950e-09 0s 0s 166809710e-09 1s 1s 166812270e-09 0s 0s 166816230e-09 0s 0s 166819950e-09 1s 1s 166822510e-09 0s 0s 166826510e-09 0s 0s 166830190e-09 1s 1s 166832750e-09 0s 0s 166836790e-09 0s 0s 166840430e-09 1s 1s 166842990e-09 0s 0s 166847070e-09 0s 0s 166850670e-09 1s 1s 166853230e-09 0s 0s 166857350e-09 0s 0s 166860910e-09 1s 1s 166863470e-09 0s 0s 166867630e-09 0s 0s 166871150e-09 1s 1s 166873710e-09 0s 0s 166877910e-09 0s 0s 166881390e-09 1s 1s 166883950e-09 0s 0s 166888190e-09 0s 0s 166891630e-09 1s 1s 166894190e-09 0s 0s 166898470e-09 0s 0s 166901870e-09 1s 1s 166904430e-09 0s 0s 166908750e-09 0s 0s 166912110e-09 1s 1s 166914670e-09 0s 0s 166919030e-09 0s 0s 166922350e-09 1s 1s 166924910e-09 0s 0s 166929310e-09 0s 0s 166932590e-09 1s 1s 166935150e-09 0s 0s 166939590e-09 0s 0s 166942830e-09 1s 1s 166945390e-09 0s 0s 166949870e-09 0s 0s 166953070e-09 1s 1s 166955630e-09 0s 0s 166960150e-09 0s 0s 166963310e-09 1s 1s 166965870e-09 0s 0s 166970430e-09 0s 0s 166973550e-09 1s 1s 166976110e-09 0s 0s 166980710e-09 0s 0s 166983790e-09 1s 1s 166986350e-09 0s 0s 166990990e-09 0s 0s 166994030e-09 1s 1s 166996590e-09 0s 0s 167001270e-09 0s 0s 167004270e-09 1s 1s 167006830e-09 0s 0s 167011550e-09 0s 0s 167014510e-09 1s 1s 167017070e-09 0s 0s 167021830e-09 0s 0s 167024750e-09 1s 1s 167027310e-09 0s 0s 167032110e-09 0s 0s 167034990e-09 1s 1s 167037550e-09 0s 0s 167042390e-09 0s 0s 167045230e-09 1s 1s 167047790e-09 0s 0s 167052670e-09 0s 0s 167055470e-09 1s 1s 167058030e-09 0s 0s 167062950e-09 0s 0s 167065710e-09 1s 1s 167068270e-09 0s 0s 167073230e-09 0s 0s 167075950e-09 1s 1s 167078510e-09 0s 0s 167083510e-09 0s 0s 167086190e-09 1s 1s 167088750e-09 0s 0s 167093790e-09 0s 0s 167096430e-09 1s 1s 167098990e-09 0s 0s 167104070e-09 0s 0s 167106670e-09 1s 1s 167109230e-09 0s 0s 167114350e-09 0s 0s 167116910e-09 1s 1s 167119470e-09 0s 0s 167124630e-09 0s 0s 167127150e-09 1s 1s 167129710e-09 0s 0s 167134910e-09 0s 0s 167137390e-09 1s 1s 167139950e-09 0s 0s 167145190e-09 0s 0s 167147630e-09 1s 1s 167150190e-09 0s 0s 167155470e-09 0s 0s 167157870e-09 1s 1s 167160430e-09 0s 0s 167165750e-09 0s 0s 167168110e-09 1s 1s 167170670e-09 0s 0s 167176030e-09 0s 0s 167178350e-09 1s 1s 167180910e-09 0s 0s 167186310e-09 0s 0s 167188590e-09 1s 1s 167191150e-09 0s 0s 167196590e-09 0s 0s 167198830e-09 1s 1s 167201390e-09 0s 0s 167206870e-09 0s 0s 167209070e-09 1s 1s 167211630e-09 0s 0s 167217150e-09 0s 0s 167219310e-09 1s 1s 167221870e-09 0s 0s 167227430e-09 0s 0s 167229550e-09 1s 1s 167232110e-09 0s 0s 167237710e-09 0s 0s 167239790e-09 1s 1s 167242350e-09 0s 0s 167247990e-09 0s 0s 167250030e-09 1s 1s 167252590e-09 0s 0s 167258270e-09 0s 0s 167260270e-09 1s 1s 167262830e-09 0s 0s 167268550e-09 0s 0s 167270510e-09 1s 1s 167273070e-09 0s 0s 167278830e-09 0s 0s 167280750e-09 1s 1s 167283310e-09 0s 0s 167289110e-09 0s 0s 167290990e-09 1s 1s 167293550e-09 0s 0s 167299390e-09 0s 0s 167301230e-09 1s 1s 167303790e-09 0s 0s 167309670e-09 0s 0s 167311470e-09 1s 1s 167314030e-09 0s 0s 167319950e-09 0s 0s 167321710e-09 1s 1s 167324270e-09 0s 0s 167330230e-09 0s 0s 167331950e-09 1s 1s 167334510e-09 0s 0s 167340510e-09 0s 0s 167342190e-09 1s 1s 167344750e-09 0s 0s 167350790e-09 0s 0s 167352430e-09 1s 1s 167354990e-09 0s 0s 167361070e-09 0s 0s 167362670e-09 1s 1s 167365230e-09 0s 0s 167371350e-09 0s 0s 167372910e-09 1s 1s 167375470e-09 0s 0s 167381630e-09 0s 0s 167383150e-09 1s 1s 167385710e-09 0s 0s 167391910e-09 0s 0s 167393390e-09 1s 1s 167395950e-09 0s 0s 167402190e-09 0s 0s 167403630e-09 1s 1s 167406190e-09 0s 0s 167412470e-09 0s 0s 167413870e-09 1s 1s 167416430e-09 0s 0s 167422750e-09 0s 0s 167424110e-09 1s 1s 167426670e-09 0s 0s 167433030e-09 0s 0s 167434350e-09 1s 1s 167436910e-09 0s 0s 167443310e-09 0s 0s 167444590e-09 1s 1s 167447150e-09 0s 0s 167453590e-09 0s 0s 167454830e-09 1s 1s 167457390e-09 0s 0s 167463870e-09 0s 0s 167465070e-09 1s 1s 167467630e-09 0s 0s 167474150e-09 0s 0s 167475310e-09 1s 1s 167477870e-09 0s 0s 167484430e-09 0s 0s 167485550e-09 1s 1s 167488110e-09 0s 0s 167494710e-09 0s 0s 167495790e-09 1s 1s 167498350e-09 0s 0s 167504990e-09 0s 0s 167506030e-09 1s 1s 167508590e-09 0s 0s 167515270e-09 0s 0s 167516270e-09 1s 1s 167518830e-09 0s 0s 167525550e-09 0s 0s 167526510e-09 1s 1s 167529070e-09 0s 0s 167535830e-09 0s 0s 167536750e-09 1s 1s 167539310e-09 0s 0s 167546110e-09 0s 0s 167546990e-09 1s 1s 167549550e-09 0s 0s 167556390e-09 0s 0s 167557230e-09 1s 1s 167559790e-09 0s 0s 167566670e-09 0s 0s 167567470e-09 1s 1s 167570030e-09 0s 0s 167576950e-09 0s 0s 167577710e-09 1s 1s 167580270e-09 0s 0s 167587230e-09 0s 0s 167587950e-09 1s 1s 167590510e-09 0s 0s 167597510e-09 0s 0s 167598190e-09 1s 1s 167600750e-09 0s 0s 167607790e-09 0s 0s 167608430e-09 1s 1s 167610990e-09 0s 0s 167618070e-09 0s 0s 167618670e-09 1s 1s 167621230e-09 0s 0s 167628350e-09 0s 0s 167628910e-09 1s 1s 167631470e-09 0s 0s 167638630e-09 0s 0s 167639150e-09 1s 1s 167641710e-09 0s 0s 167648910e-09 0s 0s 167649390e-09 1s 1s 167651950e-09 0s 0s 167659190e-09 0s 0s 167659630e-09 1s 1s 167662190e-09 0s 0s 167669470e-09 0s 0s 167669870e-09 1s 1s 167672430e-09 0s 0s 167679750e-09 0s 0s 167680110e-09 1s 1s 167682670e-09 0s 0s 167690030e-09 0s 0s 167690350e-09 1s 1s 167692910e-09 0s 0s 167700310e-09 0s 0s 167700590e-09 1s 1s 167703150e-09 0s 0s 167710590e-09 0s 0s 167710830e-09 1s 1s 167713390e-09 0s 0s 167720870e-09 0s 0s 167721070e-09 1s 1s 167723630e-09 0s 0s 167731150e-09 0s 0s 167731310e-09 1s 1s 167733870e-09 0s 0s 167741430e-09 0s 0s 167741550e-09 1s 1s 167744110e-09 0s 0s 167751710e-09 0s 0s 167751790e-09 1s 1s 167754350e-09 0s 0s 167761990e-09 0s 0s 167762030e-09 1s 1s 167764590e-09 0s 0s 167772270e-09 1s 1s 167772310e-09 1s 1s 167774870e-09 0s 0s 167782510e-09 1s 1s 167782590e-09 1s 1s 167785110e-09 0s 0s 167792750e-09 1s 1s 167792870e-09 1s 1s 167795350e-09 0s 0s 167802990e-09 1s 1s 167803150e-09 1s 1s 167805590e-09 0s 0s 167813230e-09 1s 1s 167813430e-09 1s 1s 167815830e-09 0s 0s 167823470e-09 1s 1s 167823710e-09 1s 1s 167826070e-09 0s 0s 167833710e-09 1s 1s 167833990e-09 1s 1s 167836310e-09 0s 0s 167843950e-09 1s 1s 167844270e-09 1s 1s 167846550e-09 0s 0s 167854190e-09 1s 1s 167854550e-09 1s 1s 167856790e-09 0s 0s 167864430e-09 1s 1s 167864830e-09 1s 1s 167867030e-09 0s 0s 167874670e-09 1s 1s 167875110e-09 1s 1s 167877270e-09 0s 0s 167884910e-09 1s 1s 167885390e-09 1s 1s 167887510e-09 0s 0s 167895150e-09 1s 1s 167895670e-09 1s 1s 167897750e-09 0s 0s 167905390e-09 1s 1s 167905950e-09 1s 1s 167907990e-09 0s 0s 167915630e-09 1s 1s 167916230e-09 1s 1s 167918230e-09 0s 0s 167925870e-09 1s 1s 167926510e-09 1s 1s 167928470e-09 0s 0s 167936110e-09 1s 1s 167936790e-09 1s 1s 167938710e-09 0s 0s 167946350e-09 1s 1s 167947070e-09 1s 1s 167948950e-09 0s 0s 167956590e-09 1s 1s 167957350e-09 1s 1s 167959190e-09 0s 0s 167966830e-09 1s 1s 167967630e-09 1s 1s 167969430e-09 0s 0s 167977070e-09 1s 1s 167977910e-09 1s 1s 167979670e-09 0s 0s 167987310e-09 1s 1s 167988190e-09 1s 1s 167989910e-09 0s 0s 167997550e-09 1s 1s 167998470e-09 1s 1s 168000150e-09 0s 0s 168007790e-09 1s 1s 168008750e-09 1s 1s 168010390e-09 0s 0s 168018030e-09 1s 1s 168019030e-09 1s 1s 168020630e-09 0s 0s 168028270e-09 1s 1s 168029310e-09 1s 1s 168030870e-09 0s 0s 168038510e-09 1s 1s 168039590e-09 1s 1s 168041110e-09 0s 0s 168048750e-09 1s 1s 168049870e-09 1s 1s 168051350e-09 0s 0s 168058990e-09 1s 1s 168060150e-09 1s 1s 168061590e-09 0s 0s 168069230e-09 1s 1s 168070430e-09 1s 1s 168071830e-09 0s 0s 168079470e-09 1s 1s 168080710e-09 1s 1s 168082070e-09 0s 0s 168089710e-09 1s 1s 168090990e-09 1s 1s 168092310e-09 0s 0s 168099950e-09 1s 1s 168101270e-09 1s 1s 168102550e-09 0s 0s 168110190e-09 1s 1s 168111550e-09 1s 1s 168112790e-09 0s 0s 168120430e-09 1s 1s 168121830e-09 1s 1s 168123030e-09 0s 0s 168130670e-09 1s 1s 168132110e-09 1s 1s 168133270e-09 0s 0s 168140910e-09 1s 1s 168142390e-09 1s 1s 168143510e-09 0s 0s 168151150e-09 1s 1s 168152670e-09 1s 1s 168153750e-09 0s 0s 168161390e-09 1s 1s 168162950e-09 1s 1s 168163990e-09 0s 0s 168171630e-09 1s 1s 168173230e-09 1s 1s 168174230e-09 0s 0s 168181870e-09 1s 1s 168183510e-09 1s 1s 168184470e-09 0s 0s 168192110e-09 1s 1s 168193790e-09 1s 1s 168194710e-09 0s 0s 168202350e-09 1s 1s 168204070e-09 1s 1s 168204950e-09 0s 0s 168212590e-09 1s 1s 168214350e-09 1s 1s 168215190e-09 0s 0s 168222830e-09 1s 1s 168224630e-09 1s 1s 168225430e-09 0s 0s 168233070e-09 1s 1s 168234910e-09 1s 1s 168235670e-09 0s 0s 168243310e-09 1s 1s 168245190e-09 1s 1s 168245910e-09 0s 0s 168253550e-09 1s 1s 168255470e-09 1s 1s 168256150e-09 0s 0s 168263790e-09 1s 1s 168265750e-09 1s 1s 168266390e-09 0s 0s 168274030e-09 1s 1s 168276030e-09 1s 1s 168276630e-09 0s 0s 168284270e-09 1s 1s 168286310e-09 1s 1s 168286870e-09 0s 0s 168294510e-09 1s 1s 168296590e-09 1s 1s 168297110e-09 0s 0s 168304750e-09 1s 1s 168306870e-09 1s 1s 168307350e-09 0s 0s 168314990e-09 1s 1s 168317150e-09 1s 1s 168317590e-09 0s 0s 168325230e-09 1s 1s 168327430e-09 1s 1s 168327830e-09 0s 0s 168335470e-09 1s 1s 168337710e-09 1s 1s 168338070e-09 0s 0s 168345710e-09 1s 1s 168347990e-09 1s 1s 168348310e-09 0s 0s 168355950e-09 1s 1s 168358270e-09 1s 1s 168358550e-09 0s 0s 168366190e-09 1s 1s 168368550e-09 1s 1s 168368790e-09 0s 0s 168376430e-09 1s 1s 168378830e-09 1s 1s 168379030e-09 0s 0s 168386670e-09 1s 1s 168389110e-09 1s 1s 168389270e-09 0s 0s 168396910e-09 1s 1s 168399390e-09 1s 1s 168399510e-09 0s 0s 168407150e-09 1s 1s 168409670e-09 1s 1s 168409750e-09 0s 0s 168417390e-09 1s 1s 168419950e-09 1s 1s 168419990e-09 0s 0s 168427630e-09 1s 1s 168430230e-09 0s 0s 168437870e-09 1s 1s 168440470e-09 0s 0s 168440510e-09 0s 0s 168448110e-09 1s 1s 168450710e-09 0s 0s 168450790e-09 0s 0s 168458350e-09 1s 1s 168460950e-09 0s 0s 168461070e-09 0s 0s 168468590e-09 1s 1s 168471190e-09 0s 0s 168471350e-09 0s 0s 168478830e-09 1s 1s 168481430e-09 0s 0s 168481630e-09 0s 0s 168489070e-09 1s 1s 168491670e-09 0s 0s 168491910e-09 0s 0s 168499310e-09 1s 1s 168501910e-09 0s 0s 168502190e-09 0s 0s 168509550e-09 1s 1s 168512150e-09 0s 0s 168512470e-09 0s 0s 168519790e-09 1s 1s 168522390e-09 0s 0s 168522750e-09 0s 0s 168530030e-09 1s 1s 168532630e-09 0s 0s 168533030e-09 0s 0s 168540270e-09 1s 1s 168542870e-09 0s 0s 168543310e-09 0s 0s 168550510e-09 1s 1s 168553110e-09 0s 0s 168553590e-09 0s 0s 168560750e-09 1s 1s 168563350e-09 0s 0s 168563870e-09 0s 0s 168570990e-09 1s 1s 168573590e-09 0s 0s 168574150e-09 0s 0s 168581230e-09 1s 1s 168583830e-09 0s 0s 168584430e-09 0s 0s 168591470e-09 1s 1s 168594070e-09 0s 0s 168594710e-09 0s 0s 168601710e-09 1s 1s 168604310e-09 0s 0s 168604990e-09 0s 0s 168611950e-09 1s 1s 168614550e-09 0s 0s 168615270e-09 0s 0s 168622190e-09 1s 1s 168624790e-09 0s 0s 168625550e-09 0s 0s 168632430e-09 1s 1s 168635030e-09 0s 0s 168635830e-09 0s 0s 168642670e-09 1s 1s 168645270e-09 0s 0s 168646110e-09 0s 0s 168652910e-09 1s 1s 168655510e-09 0s 0s 168656390e-09 0s 0s 168663150e-09 1s 1s 168665750e-09 0s 0s 168666670e-09 0s 0s 168673390e-09 1s 1s 168675990e-09 0s 0s 168676950e-09 0s 0s 168683630e-09 1s 1s 168686230e-09 0s 0s 168687230e-09 0s 0s 168693870e-09 1s 1s 168696470e-09 0s 0s 168697510e-09 0s 0s 168704110e-09 1s 1s 168706710e-09 0s 0s 168707790e-09 0s 0s 168714350e-09 1s 1s 168716950e-09 0s 0s 168718070e-09 0s 0s 168724590e-09 1s 1s 168727190e-09 0s 0s 168728350e-09 0s 0s 168734830e-09 1s 1s 168737430e-09 0s 0s 168738630e-09 0s 0s 168745070e-09 1s 1s 168747670e-09 0s 0s 168748910e-09 0s 0s 168755310e-09 1s 1s 168757910e-09 0s 0s 168759190e-09 0s 0s 168765550e-09 1s 1s 168768150e-09 0s 0s 168769470e-09 0s 0s 168775790e-09 1s 1s 168778390e-09 0s 0s 168779750e-09 0s 0s 168786030e-09 1s 1s 168788630e-09 0s 0s 168790030e-09 0s 0s 168796270e-09 1s 1s 168798870e-09 0s 0s 168800310e-09 0s 0s 168806510e-09 1s 1s 168809110e-09 0s 0s 168810590e-09 0s 0s 168816750e-09 1s 1s 168819350e-09 0s 0s 168820870e-09 0s 0s 168826990e-09 1s 1s 168829590e-09 0s 0s 168831150e-09 0s 0s 168837230e-09 1s 1s 168839830e-09 0s 0s 168841430e-09 0s 0s 168847470e-09 1s 1s 168850070e-09 0s 0s 168851710e-09 0s 0s 168857710e-09 1s 1s 168860310e-09 0s 0s 168861990e-09 0s 0s 168867950e-09 1s 1s 168870550e-09 0s 0s 168872270e-09 0s 0s 168878190e-09 1s 1s 168880790e-09 0s 0s 168882550e-09 0s 0s 168888430e-09 1s 1s 168891030e-09 0s 0s 168892830e-09 0s 0s 168898670e-09 1s 1s 168901270e-09 0s 0s 168903110e-09 0s 0s 168908910e-09 1s 1s 168911510e-09 0s 0s 168913390e-09 0s 0s 168919150e-09 1s 1s 168921750e-09 0s 0s 168923670e-09 0s 0s 168929390e-09 1s 1s 168931990e-09 0s 0s 168933950e-09 0s 0s 168939630e-09 1s 1s 168942230e-09 0s 0s 168944230e-09 0s 0s 168949870e-09 1s 1s 168952470e-09 0s 0s 168954510e-09 0s 0s 168960110e-09 1s 1s 168962710e-09 0s 0s 168964790e-09 0s 0s 168970350e-09 1s 1s 168972950e-09 0s 0s 168975070e-09 0s 0s 168980590e-09 1s 1s 168983190e-09 0s 0s 168985350e-09 0s 0s 168990830e-09 1s 1s 168993430e-09 0s 0s 168995630e-09 0s 0s 169001070e-09 1s 1s 169003670e-09 0s 0s 169005910e-09 0s 0s 169011310e-09 1s 1s 169013910e-09 0s 0s 169016190e-09 0s 0s 169021550e-09 1s 1s 169024150e-09 0s 0s 169026470e-09 0s 0s 169031790e-09 1s 1s 169034390e-09 0s 0s 169036750e-09 0s 0s 169042030e-09 1s 1s 169044630e-09 0s 0s 169047030e-09 0s 0s 169052270e-09 1s 1s 169054870e-09 0s 0s 169057310e-09 0s 0s 169062510e-09 1s 1s 169065110e-09 0s 0s 169067590e-09 0s 0s 169072750e-09 1s 1s 169075350e-09 0s 0s 169077870e-09 0s 0s 169082990e-09 1s 1s 169085590e-09 0s 0s 169088150e-09 0s 0s 169093230e-09 1s 1s 169095830e-09 0s 0s 169098430e-09 0s 0s 169103470e-09 1s 1s 169106070e-09 0s 0s 169108710e-09 0s 0s 169113710e-09 1s 1s 169116310e-09 0s 0s 169118990e-09 0s 0s 169123950e-09 1s 1s 169126550e-09 0s 0s 169129270e-09 0s 0s 169134190e-09 1s 1s 169136790e-09 0s 0s 169139550e-09 0s 0s 169144430e-09 1s 1s 169147030e-09 0s 0s 169149830e-09 0s 0s 169154670e-09 1s 1s 169157270e-09 0s 0s 169160110e-09 0s 0s 169164910e-09 1s 1s 169167510e-09 0s 0s 169170390e-09 0s 0s 169175150e-09 1s 1s 169177750e-09 0s 0s 169180670e-09 0s 0s 169185390e-09 1s 1s 169187990e-09 0s 0s 169190950e-09 0s 0s 169195630e-09 1s 1s 169198230e-09 0s 0s 169201230e-09 0s 0s 169205870e-09 1s 1s 169208470e-09 0s 0s 169211510e-09 0s 0s 169216110e-09 1s 1s 169218710e-09 0s 0s 169221790e-09 0s 0s 169226350e-09 1s 1s 169228950e-09 0s 0s 169232070e-09 0s 0s 169236590e-09 1s 1s 169239190e-09 0s 0s 169242350e-09 0s 0s 169246830e-09 1s 1s 169249430e-09 0s 0s 169252630e-09 0s 0s 169257070e-09 1s 1s 169259670e-09 0s 0s 169262910e-09 0s 0s 169267310e-09 1s 1s 169269910e-09 0s 0s 169273190e-09 0s 0s 169277550e-09 1s 1s 169280150e-09 0s 0s 169283470e-09 0s 0s 169287790e-09 1s 1s 169290390e-09 0s 0s 169293750e-09 0s 0s 169298030e-09 1s 1s 169300630e-09 0s 0s 169304030e-09 0s 0s 169308270e-09 1s 1s 169310870e-09 0s 0s 169314310e-09 0s 0s 169318510e-09 1s 1s 169321110e-09 0s 0s 169324590e-09 0s 0s 169328750e-09 1s 1s 169331350e-09 0s 0s 169334870e-09 0s 0s 169338990e-09 1s 1s 169341590e-09 0s 0s 169345150e-09 0s 0s 169349230e-09 1s 1s 169351830e-09 0s 0s 169355430e-09 0s 0s 169359470e-09 1s 1s 169362070e-09 0s 0s 169365710e-09 0s 0s 169369710e-09 1s 1s 169372310e-09 0s 0s 169375990e-09 0s 0s 169379950e-09 1s 1s 169382550e-09 0s 0s 169386270e-09 0s 0s 169390190e-09 1s 1s 169392790e-09 0s 0s 169396550e-09 0s 0s 169400430e-09 1s 1s 169403030e-09 0s 0s 169406830e-09 0s 0s 169410670e-09 1s 1s 169413270e-09 0s 0s 169417110e-09 0s 0s 169420910e-09 1s 1s 169423510e-09 0s 0s 169427390e-09 0s 0s 169431150e-09 1s 1s 169433750e-09 0s 0s 169437670e-09 0s 0s 169441390e-09 1s 1s 169443990e-09 0s 0s 169447950e-09 0s 0s 169451630e-09 1s 1s 169454230e-09 0s 0s 169458230e-09 0s 0s 169461870e-09 1s 1s 169464470e-09 0s 0s 169468510e-09 0s 0s 169472110e-09 1s 1s 169474710e-09 0s 0s 169478790e-09 0s 0s 169482350e-09 1s 1s 169484950e-09 0s 0s 169489070e-09 0s 0s 169492590e-09 1s 1s 169495190e-09 0s 0s 169499350e-09 0s 0s 169502830e-09 1s 1s 169505430e-09 0s 0s 169509630e-09 0s 0s 169513070e-09 1s 1s 169515670e-09 0s 0s 169519910e-09 0s 0s 169523310e-09 1s 1s 169525910e-09 0s 0s 169530190e-09 0s 0s 169533550e-09 1s 1s 169536150e-09 0s 0s 169540470e-09 0s 0s 169543790e-09 1s 1s 169546390e-09 0s 0s 169550750e-09 0s 0s 169554030e-09 1s 1s 169556630e-09 0s 0s 169561030e-09 0s 0s 169564270e-09 1s 1s 169566870e-09 0s 0s 169571310e-09 0s 0s 169574510e-09 1s 1s 169577110e-09 0s 0s 169581590e-09 0s 0s 169584750e-09 1s 1s 169587350e-09 0s 0s 169591870e-09 0s 0s 169594990e-09 1s 1s 169597590e-09 0s 0s 169602150e-09 0s 0s 169605230e-09 1s 1s 169607830e-09 0s 0s 169612430e-09 0s 0s 169615470e-09 1s 1s 169618070e-09 0s 0s 169622710e-09 0s 0s 169625710e-09 1s 1s 169628310e-09 0s 0s 169632990e-09 0s 0s 169635950e-09 1s 1s 169638550e-09 0s 0s 169643270e-09 0s 0s 169646190e-09 1s 1s 169648790e-09 0s 0s 169653550e-09 0s 0s 169656430e-09 1s 1s 169659030e-09 0s 0s 169663830e-09 0s 0s 169666670e-09 1s 1s 169669270e-09 0s 0s 169674110e-09 0s 0s 169676910e-09 1s 1s 169679510e-09 0s 0s 169684390e-09 0s 0s 169687150e-09 1s 1s 169689750e-09 0s 0s 169694670e-09 0s 0s 169697390e-09 1s 1s 169699990e-09 0s 0s 169704950e-09 0s 0s 169707630e-09 1s 1s 169710230e-09 0s 0s 169715230e-09 0s 0s 169717870e-09 1s 1s 169720470e-09 0s 0s 169725510e-09 0s 0s 169728110e-09 1s 1s 169730710e-09 0s 0s 169735790e-09 0s 0s 169738350e-09 1s 1s 169740950e-09 0s 0s 169746070e-09 0s 0s 169748590e-09 1s 1s 169751190e-09 0s 0s 169756350e-09 0s 0s 169758830e-09 1s 1s 169761430e-09 0s 0s 169766630e-09 0s 0s 169769070e-09 1s 1s 169771670e-09 0s 0s 169776910e-09 0s 0s 169779310e-09 1s 1s 169781910e-09 0s 0s 169787190e-09 0s 0s 169789550e-09 1s 1s 169792150e-09 0s 0s 169797470e-09 0s 0s 169799790e-09 1s 1s 169802390e-09 0s 0s 169807750e-09 0s 0s 169810030e-09 1s 1s 169812630e-09 0s 0s 169818030e-09 0s 0s 169820270e-09 1s 1s 169822870e-09 0s 0s 169828310e-09 0s 0s 169830510e-09 1s 1s 169833110e-09 0s 0s 169838590e-09 0s 0s 169840750e-09 1s 1s 169843350e-09 0s 0s 169848870e-09 0s 0s 169850990e-09 1s 1s 169853590e-09 0s 0s 169859150e-09 0s 0s 169861230e-09 1s 1s 169863830e-09 0s 0s 169869430e-09 0s 0s 169871470e-09 1s 1s 169874070e-09 0s 0s 169879710e-09 0s 0s 169881710e-09 1s 1s 169884310e-09 0s 0s 169889990e-09 0s 0s 169891950e-09 1s 1s 169894550e-09 0s 0s 169900270e-09 0s 0s 169902190e-09 1s 1s 169904790e-09 0s 0s 169910550e-09 0s 0s 169912430e-09 1s 1s 169915030e-09 0s 0s 169920830e-09 0s 0s 169922670e-09 1s 1s 169925270e-09 0s 0s 169931110e-09 0s 0s 169932910e-09 1s 1s 169935510e-09 0s 0s 169941390e-09 0s 0s 169943150e-09 1s 1s 169945750e-09 0s 0s 169951670e-09 0s 0s 169953390e-09 1s 1s 169955990e-09 0s 0s 169961950e-09 0s 0s 169963630e-09 1s 1s 169966230e-09 0s 0s 169972230e-09 0s 0s 169973870e-09 1s 1s 169976470e-09 0s 0s 169982510e-09 0s 0s 169984110e-09 1s 1s 169986710e-09 0s 0s 169992790e-09 0s 0s 169994350e-09 1s 1s 169996950e-09 0s 0s 170003070e-09 0s 0s 170004590e-09 1s 1s 170007190e-09 0s 0s 170013350e-09 0s 0s 170014830e-09 1s 1s 170017430e-09 0s 0s 170023630e-09 0s 0s 170025070e-09 1s 1s 170027670e-09 0s 0s 170033910e-09 0s 0s 170035310e-09 1s 1s 170037910e-09 0s 0s 170044190e-09 0s 0s 170045550e-09 1s 1s 170048150e-09 0s 0s 170054470e-09 0s 0s 170055790e-09 1s 1s 170058390e-09 0s 0s 170064750e-09 0s 0s 170066030e-09 1s 1s 170068630e-09 0s 0s 170075030e-09 0s 0s 170076270e-09 1s 1s 170078870e-09 0s 0s 170085310e-09 0s 0s 170086510e-09 1s 1s 170089110e-09 0s 0s 170095590e-09 0s 0s 170096750e-09 1s 1s 170099350e-09 0s 0s 170105870e-09 0s 0s 170106990e-09 1s 1s 170109590e-09 0s 0s 170116150e-09 0s 0s 170117230e-09 1s 1s 170119830e-09 0s 0s 170126430e-09 0s 0s 170127470e-09 1s 1s 170130070e-09 0s 0s 170136710e-09 0s 0s 170137710e-09 1s 1s 170140310e-09 0s 0s 170146990e-09 0s 0s 170147950e-09 1s 1s 170150550e-09 0s 0s 170157270e-09 0s 0s 170158190e-09 1s 1s 170160790e-09 0s 0s 170167550e-09 0s 0s 170168430e-09 1s 1s 170171030e-09 0s 0s 170177830e-09 0s 0s 170178670e-09 1s 1s 170181270e-09 0s 0s 170188110e-09 0s 0s 170188910e-09 1s 1s 170191510e-09 0s 0s 170198390e-09 0s 0s 170199150e-09 1s 1s 170201750e-09 0s 0s 170208670e-09 0s 0s 170209390e-09 1s 1s 170211990e-09 0s 0s 170218950e-09 0s 0s 170219630e-09 1s 1s 170222230e-09 0s 0s 170229230e-09 0s 0s 170229870e-09 1s 1s 170232470e-09 0s 0s 170239510e-09 0s 0s 170240110e-09 1s 1s 170242710e-09 0s 0s 170249790e-09 0s 0s 170250350e-09 1s 1s 170252950e-09 0s 0s 170260070e-09 0s 0s 170260590e-09 1s 1s 170263190e-09 0s 0s 170270350e-09 0s 0s 170270830e-09 1s 1s 170273430e-09 0s 0s 170280630e-09 0s 0s 170281070e-09 1s 1s 170283670e-09 0s 0s 170290910e-09 0s 0s 170291310e-09 1s 1s 170293910e-09 0s 0s 170301190e-09 0s 0s 170301550e-09 1s 1s 170304150e-09 0s 0s 170311470e-09 0s 0s 170311790e-09 1s 1s 170314390e-09 0s 0s 170321750e-09 0s 0s 170322030e-09 1s 1s 170324630e-09 0s 0s 170332030e-09 0s 0s 170332270e-09 1s 1s 170334870e-09 0s 0s 170342310e-09 0s 0s 170342510e-09 1s 1s 170345110e-09 0s 0s 170352590e-09 0s 0s 170352750e-09 1s 1s 170355350e-09 0s 0s 170362870e-09 0s 0s 170362990e-09 1s 1s 170365590e-09 0s 0s 170373150e-09 0s 0s 170373230e-09 1s 1s 170375830e-09 0s 0s 170383430e-09 0s 0s 170383470e-09 1s 1s 170386070e-09 0s 0s 170393710e-09 1s 1s 170393750e-09 1s 1s 170396350e-09 0s 0s 170403950e-09 1s 1s 170404030e-09 1s 1s 170406590e-09 0s 0s 170414190e-09 1s 1s 170414310e-09 1s 1s 170416830e-09 0s 0s 170424430e-09 1s 1s 170424590e-09 1s 1s 170427070e-09 0s 0s 170434670e-09 1s 1s 170434870e-09 1s 1s 170437310e-09 0s 0s 170444910e-09 1s 1s 170445150e-09 1s 1s 170447550e-09 0s 0s 170455150e-09 1s 1s 170455430e-09 1s 1s 170457790e-09 0s 0s 170465390e-09 1s 1s 170465710e-09 1s 1s 170468030e-09 0s 0s 170475630e-09 1s 1s 170475990e-09 1s 1s 170478270e-09 0s 0s 170485870e-09 1s 1s 170486270e-09 1s 1s 170488510e-09 0s 0s 170496110e-09 1s 1s 170496550e-09 1s 1s 170498750e-09 0s 0s 170506350e-09 1s 1s 170506830e-09 1s 1s 170508990e-09 0s 0s 170516590e-09 1s 1s 170517110e-09 1s 1s 170519230e-09 0s 0s 170526830e-09 1s 1s 170527390e-09 1s 1s 170529470e-09 0s 0s 170537070e-09 1s 1s 170537670e-09 1s 1s 170539710e-09 0s 0s 170547310e-09 1s 1s 170547950e-09 1s 1s 170549950e-09 0s 0s 170557550e-09 1s 1s 170558230e-09 1s 1s 170560190e-09 0s 0s 170567790e-09 1s 1s 170568510e-09 1s 1s 170570430e-09 0s 0s 170578030e-09 1s 1s 170578790e-09 1s 1s 170580670e-09 0s 0s 170588270e-09 1s 1s 170589070e-09 1s 1s 170590910e-09 0s 0s 170598510e-09 1s 1s 170599350e-09 1s 1s 170601150e-09 0s 0s 170608750e-09 1s 1s 170609630e-09 1s 1s 170611390e-09 0s 0s 170618990e-09 1s 1s 170619910e-09 1s 1s 170621630e-09 0s 0s 170629230e-09 1s 1s 170630190e-09 1s 1s 170631870e-09 0s 0s 170639470e-09 1s 1s 170640470e-09 1s 1s 170642110e-09 0s 0s 170649710e-09 1s 1s 170650750e-09 1s 1s 170652350e-09 0s 0s 170659950e-09 1s 1s 170661030e-09 1s 1s 170662590e-09 0s 0s 170670190e-09 1s 1s 170671310e-09 1s 1s 170672830e-09 0s 0s 170680430e-09 1s 1s 170681590e-09 1s 1s 170683070e-09 0s 0s 170690670e-09 1s 1s 170691870e-09 1s 1s 170693310e-09 0s 0s 170700910e-09 1s 1s 170702150e-09 1s 1s 170703550e-09 0s 0s 170711150e-09 1s 1s 170712430e-09 1s 1s 170713790e-09 0s 0s 170721390e-09 1s 1s 170722710e-09 1s 1s 170724030e-09 0s 0s 170731630e-09 1s 1s 170732990e-09 1s 1s 170734270e-09 0s 0s 170741870e-09 1s 1s 170743270e-09 1s 1s 170744510e-09 0s 0s 170752110e-09 1s 1s 170753550e-09 1s 1s 170754750e-09 0s 0s 170762350e-09 1s 1s 170763830e-09 1s 1s 170764990e-09 0s 0s 170772590e-09 1s 1s 170774110e-09 1s 1s 170775230e-09 0s 0s 170782830e-09 1s 1s 170784390e-09 1s 1s 170785470e-09 0s 0s 170793070e-09 1s 1s 170794670e-09 1s 1s 170795710e-09 0s 0s 170803310e-09 1s 1s 170804950e-09 1s 1s 170805950e-09 0s 0s 170813550e-09 1s 1s 170815230e-09 1s 1s 170816190e-09 0s 0s 170823790e-09 1s 1s 170825510e-09 1s 1s 170826430e-09 0s 0s 170834030e-09 1s 1s 170835790e-09 1s 1s 170836670e-09 0s 0s 170844270e-09 1s 1s 170846070e-09 1s 1s 170846910e-09 0s 0s 170854510e-09 1s 1s 170856350e-09 1s 1s 170857150e-09 0s 0s 170864750e-09 1s 1s 170866630e-09 1s 1s 170867390e-09 0s 0s 170874990e-09 1s 1s 170876910e-09 1s 1s 170877630e-09 0s 0s 170885230e-09 1s 1s 170887190e-09 1s 1s 170887870e-09 0s 0s 170895470e-09 1s 1s 170897470e-09 1s 1s 170898110e-09 0s 0s 170905710e-09 1s 1s 170907750e-09 1s 1s 170908350e-09 0s 0s 170915950e-09 1s 1s 170918030e-09 1s 1s 170918590e-09 0s 0s 170926190e-09 1s 1s 170928310e-09 1s 1s 170928830e-09 0s 0s 170936430e-09 1s 1s 170938590e-09 1s 1s 170939070e-09 0s 0s 170946670e-09 1s 1s 170948870e-09 1s 1s 170949310e-09 0s 0s 170956910e-09 1s 1s 170959150e-09 1s 1s 170959550e-09 0s 0s 170967150e-09 1s 1s 170969430e-09 1s 1s 170969790e-09 0s 0s 170977390e-09 1s 1s 170979710e-09 1s 1s 170980030e-09 0s 0s 170987630e-09 1s 1s 170989990e-09 1s 1s 170990270e-09 0s 0s 170997870e-09 1s 1s 171000270e-09 1s 1s 171000510e-09 0s 0s 171008110e-09 1s 1s 171010550e-09 1s 1s 171010750e-09 0s 0s 171018350e-09 1s 1s 171020830e-09 1s 1s 171020990e-09 0s 0s 171028590e-09 1s 1s 171031110e-09 1s 1s 171031230e-09 0s 0s 171038830e-09 1s 1s 171041390e-09 1s 1s 171041470e-09 0s 0s 171049070e-09 1s 1s 171051670e-09 1s 1s 171051710e-09 0s 0s 171059310e-09 1s 1s 171061950e-09 0s 0s 171069550e-09 1s 1s 171072190e-09 0s 0s 171072230e-09 0s 0s 171079790e-09 1s 1s 171082430e-09 0s 0s 171082510e-09 0s 0s 171090030e-09 1s 1s 171092670e-09 0s 0s 171092790e-09 0s 0s 171100270e-09 1s 1s 171102910e-09 0s 0s 171103070e-09 0s 0s 171110510e-09 1s 1s 171113150e-09 0s 0s 171113350e-09 0s 0s 171120750e-09 1s 1s 171123390e-09 0s 0s 171123630e-09 0s 0s 171130990e-09 1s 1s 171133630e-09 0s 0s 171133910e-09 0s 0s 171141230e-09 1s 1s 171143870e-09 0s 0s 171144190e-09 0s 0s 171151470e-09 1s 1s 171154110e-09 0s 0s 171154470e-09 0s 0s 171161710e-09 1s 1s 171164350e-09 0s 0s 171164750e-09 0s 0s 171171950e-09 1s 1s 171174590e-09 0s 0s 171175030e-09 0s 0s 171182190e-09 1s 1s 171184830e-09 0s 0s 171185310e-09 0s 0s 171192430e-09 1s 1s 171195070e-09 0s 0s 171195590e-09 0s 0s 171202670e-09 1s 1s 171205310e-09 0s 0s 171205870e-09 0s 0s 171212910e-09 1s 1s 171215550e-09 0s 0s 171216150e-09 0s 0s 171223150e-09 1s 1s 171225790e-09 0s 0s 171226430e-09 0s 0s 171233390e-09 1s 1s 171236030e-09 0s 0s 171236710e-09 0s 0s 171243630e-09 1s 1s 171246270e-09 0s 0s 171246990e-09 0s 0s 171253870e-09 1s 1s 171256510e-09 0s 0s 171257270e-09 0s 0s 171264110e-09 1s 1s 171266750e-09 0s 0s 171267550e-09 0s 0s 171274350e-09 1s 1s 171276990e-09 0s 0s 171277830e-09 0s 0s 171284590e-09 1s 1s 171287230e-09 0s 0s 171288110e-09 0s 0s 171294830e-09 1s 1s 171297470e-09 0s 0s 171298390e-09 0s 0s 171305070e-09 1s 1s 171307710e-09 0s 0s 171308670e-09 0s 0s 171315310e-09 1s 1s 171317950e-09 0s 0s 171318950e-09 0s 0s 171325550e-09 1s 1s 171328190e-09 0s 0s 171329230e-09 0s 0s 171335790e-09 1s 1s 171338430e-09 0s 0s 171339510e-09 0s 0s 171346030e-09 1s 1s 171348670e-09 0s 0s 171349790e-09 0s 0s 171356270e-09 1s 1s 171358910e-09 0s 0s 171360070e-09 0s 0s 171366510e-09 1s 1s 171369150e-09 0s 0s 171370350e-09 0s 0s 171376750e-09 1s 1s 171379390e-09 0s 0s 171380630e-09 0s 0s 171386990e-09 1s 1s 171389630e-09 0s 0s 171390910e-09 0s 0s 171397230e-09 1s 1s 171399870e-09 0s 0s 171401190e-09 0s 0s 171407470e-09 1s 1s 171410110e-09 0s 0s 171411470e-09 0s 0s 171417710e-09 1s 1s 171420350e-09 0s 0s 171421750e-09 0s 0s 171427950e-09 1s 1s 171430590e-09 0s 0s 171432030e-09 0s 0s 171438190e-09 1s 1s 171440830e-09 0s 0s 171442310e-09 0s 0s 171448430e-09 1s 1s 171451070e-09 0s 0s 171452590e-09 0s 0s 171458670e-09 1s 1s 171461310e-09 0s 0s 171462870e-09 0s 0s 171468910e-09 1s 1s 171471550e-09 0s 0s 171473150e-09 0s 0s 171479150e-09 1s 1s 171481790e-09 0s 0s 171483430e-09 0s 0s 171489390e-09 1s 1s 171492030e-09 0s 0s 171493710e-09 0s 0s 171499630e-09 1s 1s 171502270e-09 0s 0s 171503990e-09 0s 0s 171509870e-09 1s 1s 171512510e-09 0s 0s 171514270e-09 0s 0s 171520110e-09 1s 1s 171522750e-09 0s 0s 171524550e-09 0s 0s 171530350e-09 1s 1s 171532990e-09 0s 0s 171534830e-09 0s 0s 171540590e-09 1s 1s 171543230e-09 0s 0s 171545110e-09 0s 0s 171550830e-09 1s 1s 171553470e-09 0s 0s 171555390e-09 0s 0s 171561070e-09 1s 1s 171563710e-09 0s 0s 171565670e-09 0s 0s 171571310e-09 1s 1s 171573950e-09 0s 0s 171575950e-09 0s 0s 171581550e-09 1s 1s 171584190e-09 0s 0s 171586230e-09 0s 0s 171591790e-09 1s 1s 171594430e-09 0s 0s 171596510e-09 0s 0s 171602030e-09 1s 1s 171604670e-09 0s 0s 171606790e-09 0s 0s 171612270e-09 1s 1s 171614910e-09 0s 0s 171617070e-09 0s 0s 171622510e-09 1s 1s 171625150e-09 0s 0s 171627350e-09 0s 0s 171632750e-09 1s 1s 171635390e-09 0s 0s 171637630e-09 0s 0s 171642990e-09 1s 1s 171645630e-09 0s 0s 171647910e-09 0s 0s 171653230e-09 1s 1s 171655870e-09 0s 0s 171658190e-09 0s 0s 171663470e-09 1s 1s 171666110e-09 0s 0s 171668470e-09 0s 0s 171673710e-09 1s 1s 171676350e-09 0s 0s 171678750e-09 0s 0s 171683950e-09 1s 1s 171686590e-09 0s 0s 171689030e-09 0s 0s 171694190e-09 1s 1s 171696830e-09 0s 0s 171699310e-09 0s 0s 171704430e-09 1s 1s 171707070e-09 0s 0s 171709590e-09 0s 0s 171714670e-09 1s 1s 171717310e-09 0s 0s 171719870e-09 0s 0s 171724910e-09 1s 1s 171727550e-09 0s 0s 171730150e-09 0s 0s 171735150e-09 1s 1s 171737790e-09 0s 0s 171740430e-09 0s 0s 171745390e-09 1s 1s 171748030e-09 0s 0s 171750710e-09 0s 0s 171755630e-09 1s 1s 171758270e-09 0s 0s 171760990e-09 0s 0s 171765870e-09 1s 1s 171768510e-09 0s 0s 171771270e-09 0s 0s 171776110e-09 1s 1s 171778750e-09 0s 0s 171781550e-09 0s 0s 171786350e-09 1s 1s 171788990e-09 0s 0s 171791830e-09 0s 0s 171796590e-09 1s 1s 171799230e-09 0s 0s 171802110e-09 0s 0s 171806830e-09 1s 1s 171809470e-09 0s 0s 171812390e-09 0s 0s 171817070e-09 1s 1s 171819710e-09 0s 0s 171822670e-09 0s 0s 171827310e-09 1s 1s 171829950e-09 0s 0s 171832950e-09 0s 0s 171837550e-09 1s 1s 171840190e-09 0s 0s 171843230e-09 0s 0s 171847790e-09 1s 1s 171850430e-09 0s 0s 171853510e-09 0s 0s 171858030e-09 1s 1s 171860670e-09 0s 0s 171863790e-09 0s 0s 171868270e-09 1s 1s 171870910e-09 0s 0s 171874070e-09 0s 0s 171878510e-09 1s 1s 171881150e-09 0s 0s 171884350e-09 0s 0s 171888750e-09 1s 1s 171891390e-09 0s 0s 171894630e-09 0s 0s 171898990e-09 1s 1s 171901630e-09 0s 0s 171904910e-09 0s 0s 171909230e-09 1s 1s 171911870e-09 0s 0s 171915190e-09 0s 0s 171919470e-09 1s 1s 171922110e-09 0s 0s 171925470e-09 0s 0s 171929710e-09 1s 1s 171932350e-09 0s 0s 171935750e-09 0s 0s 171939950e-09 1s 1s 171942590e-09 0s 0s 171946030e-09 0s 0s 171950190e-09 1s 1s 171952830e-09 0s 0s 171956310e-09 0s 0s 171960430e-09 1s 1s 171963070e-09 0s 0s 171966590e-09 0s 0s 171970670e-09 1s 1s 171973310e-09 0s 0s 171976870e-09 0s 0s 171980910e-09 1s 1s 171983550e-09 0s 0s 171987150e-09 0s 0s 171991150e-09 1s 1s 171993790e-09 0s 0s 171997430e-09 0s 0s 172001390e-09 1s 1s 172004030e-09 0s 0s 172007710e-09 0s 0s 172011630e-09 1s 1s 172014270e-09 0s 0s 172017990e-09 0s 0s 172021870e-09 1s 1s 172024510e-09 0s 0s 172028270e-09 0s 0s 172032110e-09 1s 1s 172034750e-09 0s 0s 172038550e-09 0s 0s 172042350e-09 1s 1s 172044990e-09 0s 0s 172048830e-09 0s 0s 172052590e-09 1s 1s 172055230e-09 0s 0s 172059110e-09 0s 0s 172062830e-09 1s 1s 172065470e-09 0s 0s 172069390e-09 0s 0s 172073070e-09 1s 1s 172075710e-09 0s 0s 172079670e-09 0s 0s 172083310e-09 1s 1s 172085950e-09 0s 0s 172089950e-09 0s 0s 172093550e-09 1s 1s 172096190e-09 0s 0s 172100230e-09 0s 0s 172103790e-09 1s 1s 172106430e-09 0s 0s 172110510e-09 0s 0s 172114030e-09 1s 1s 172116670e-09 0s 0s 172120790e-09 0s 0s 172124270e-09 1s 1s 172126910e-09 0s 0s 172131070e-09 0s 0s 172134510e-09 1s 1s 172137150e-09 0s 0s 172141350e-09 0s 0s 172144750e-09 1s 1s 172147390e-09 0s 0s 172151630e-09 0s 0s 172154990e-09 1s 1s 172157630e-09 0s 0s 172161910e-09 0s 0s 172165230e-09 1s 1s 172167870e-09 0s 0s 172172190e-09 0s 0s 172175470e-09 1s 1s 172178110e-09 0s 0s 172182470e-09 0s 0s 172185710e-09 1s 1s 172188350e-09 0s 0s 172192750e-09 0s 0s 172195950e-09 1s 1s 172198590e-09 0s 0s 172203030e-09 0s 0s 172206190e-09 1s 1s 172208830e-09 0s 0s 172213310e-09 0s 0s 172216430e-09 1s 1s 172219070e-09 0s 0s 172223590e-09 0s 0s 172226670e-09 1s 1s 172229310e-09 0s 0s 172233870e-09 0s 0s 172236910e-09 1s 1s 172239550e-09 0s 0s 172244150e-09 0s 0s 172247150e-09 1s 1s 172249790e-09 0s 0s 172254430e-09 0s 0s 172257390e-09 1s 1s 172260030e-09 0s 0s 172264710e-09 0s 0s 172267630e-09 1s 1s 172270270e-09 0s 0s 172274990e-09 0s 0s 172277870e-09 1s 1s 172280510e-09 0s 0s 172285270e-09 0s 0s 172288110e-09 1s 1s 172290750e-09 0s 0s 172295550e-09 0s 0s 172298350e-09 1s 1s 172300990e-09 0s 0s 172305830e-09 0s 0s 172308590e-09 1s 1s 172311230e-09 0s 0s 172316110e-09 0s 0s 172318830e-09 1s 1s 172321470e-09 0s 0s 172326390e-09 0s 0s 172329070e-09 1s 1s 172331710e-09 0s 0s 172336670e-09 0s 0s 172339310e-09 1s 1s 172341950e-09 0s 0s 172346950e-09 0s 0s 172349550e-09 1s 1s 172352190e-09 0s 0s 172357230e-09 0s 0s 172359790e-09 1s 1s 172362430e-09 0s 0s 172367510e-09 0s 0s 172370030e-09 1s 1s 172372670e-09 0s 0s 172377790e-09 0s 0s 172380270e-09 1s 1s 172382910e-09 0s 0s 172388070e-09 0s 0s 172390510e-09 1s 1s 172393150e-09 0s 0s 172398350e-09 0s 0s 172400750e-09 1s 1s 172403390e-09 0s 0s 172408630e-09 0s 0s 172410990e-09 1s 1s 172413630e-09 0s 0s 172418910e-09 0s 0s 172421230e-09 1s 1s 172423870e-09 0s 0s 172429190e-09 0s 0s 172431470e-09 1s 1s 172434110e-09 0s 0s 172439470e-09 0s 0s 172441710e-09 1s 1s 172444350e-09 0s 0s 172449750e-09 0s 0s 172451950e-09 1s 1s 172454590e-09 0s 0s 172460030e-09 0s 0s 172462190e-09 1s 1s 172464830e-09 0s 0s 172470310e-09 0s 0s 172472430e-09 1s 1s 172475070e-09 0s 0s 172480590e-09 0s 0s 172482670e-09 1s 1s 172485310e-09 0s 0s 172490870e-09 0s 0s 172492910e-09 1s 1s 172495550e-09 0s 0s 172501150e-09 0s 0s 172503150e-09 1s 1s 172505790e-09 0s 0s 172511430e-09 0s 0s 172513390e-09 1s 1s 172516030e-09 0s 0s 172521710e-09 0s 0s 172523630e-09 1s 1s 172526270e-09 0s 0s 172531990e-09 0s 0s 172533870e-09 1s 1s 172536510e-09 0s 0s 172542270e-09 0s 0s 172544110e-09 1s 1s 172546750e-09 0s 0s 172552550e-09 0s 0s 172554350e-09 1s 1s 172556990e-09 0s 0s 172562830e-09 0s 0s 172564590e-09 1s 1s 172567230e-09 0s 0s 172573110e-09 0s 0s 172574830e-09 1s 1s 172577470e-09 0s 0s 172583390e-09 0s 0s 172585070e-09 1s 1s 172587710e-09 0s 0s 172593670e-09 0s 0s 172595310e-09 1s 1s 172597950e-09 0s 0s 172603950e-09 0s 0s 172605550e-09 1s 1s 172608190e-09 0s 0s 172614230e-09 0s 0s 172615790e-09 1s 1s 172618430e-09 0s 0s 172624510e-09 0s 0s 172626030e-09 1s 1s 172628670e-09 0s 0s 172634790e-09 0s 0s 172636270e-09 1s 1s 172638910e-09 0s 0s 172645070e-09 0s 0s 172646510e-09 1s 1s 172649150e-09 0s 0s 172655350e-09 0s 0s 172656750e-09 1s 1s 172659390e-09 0s 0s 172665630e-09 0s 0s 172666990e-09 1s 1s 172669630e-09 0s 0s 172675910e-09 0s 0s 172677230e-09 1s 1s 172679870e-09 0s 0s 172686190e-09 0s 0s 172687470e-09 1s 1s 172690110e-09 0s 0s 172696470e-09 0s 0s 172697710e-09 1s 1s 172700350e-09 0s 0s 172706750e-09 0s 0s 172707950e-09 1s 1s 172710590e-09 0s 0s 172717030e-09 0s 0s 172718190e-09 1s 1s 172720830e-09 0s 0s 172727310e-09 0s 0s 172728430e-09 1s 1s 172731070e-09 0s 0s 172737590e-09 0s 0s 172738670e-09 1s 1s 172741310e-09 0s 0s 172747870e-09 0s 0s 172748910e-09 1s 1s 172751550e-09 0s 0s 172758150e-09 0s 0s 172759150e-09 1s 1s 172761790e-09 0s 0s 172768430e-09 0s 0s 172769390e-09 1s 1s 172772030e-09 0s 0s 172778710e-09 0s 0s 172779630e-09 1s 1s 172782270e-09 0s 0s 172788990e-09 0s 0s 172789870e-09 1s 1s 172792510e-09 0s 0s 172799270e-09 0s 0s 172800110e-09 1s 1s 172802750e-09 0s 0s 172809550e-09 0s 0s 172810350e-09 1s 1s 172812990e-09 0s 0s 172819830e-09 0s 0s 172820590e-09 1s 1s 172823230e-09 0s 0s 172830110e-09 0s 0s 172830830e-09 1s 1s 172833470e-09 0s 0s 172840390e-09 0s 0s 172841070e-09 1s 1s 172843710e-09 0s 0s 172850670e-09 0s 0s 172851310e-09 1s 1s 172853950e-09 0s 0s 172860950e-09 0s 0s 172861550e-09 1s 1s 172864190e-09 0s 0s 172871230e-09 0s 0s 172871790e-09 1s 1s 172874430e-09 0s 0s 172881510e-09 0s 0s 172882030e-09 1s 1s 172884670e-09 0s 0s 172891790e-09 0s 0s 172892270e-09 1s 1s 172894910e-09 0s 0s 172902070e-09 0s 0s 172902510e-09 1s 1s 172905150e-09 0s 0s 172912350e-09 0s 0s 172912750e-09 1s 1s 172915390e-09 0s 0s 172922630e-09 0s 0s 172922990e-09 1s 1s 172925630e-09 0s 0s 172932910e-09 0s 0s 172933230e-09 1s 1s 172935870e-09 0s 0s 172943190e-09 0s 0s 172943470e-09 1s 1s 172946110e-09 0s 0s 172953470e-09 0s 0s 172953710e-09 1s 1s 172956350e-09 0s 0s 172963750e-09 0s 0s 172963950e-09 1s 1s 172966590e-09 0s 0s 172974030e-09 0s 0s 172974190e-09 1s 1s 172976830e-09 0s 0s 172984310e-09 0s 0s 172984430e-09 1s 1s 172987070e-09 0s 0s 172994590e-09 0s 0s 172994670e-09 1s 1s 172997310e-09 0s 0s 173004870e-09 0s 0s 173004910e-09 1s 1s 173007550e-09 0s 0s 173015150e-09 1s 1s 173015190e-09 1s 1s 173017830e-09 0s 0s 173025390e-09 1s 1s 173025470e-09 1s 1s 173028070e-09 0s 0s 173035630e-09 1s 1s 173035750e-09 1s 1s 173038310e-09 0s 0s 173045870e-09 1s 1s 173046030e-09 1s 1s 173048550e-09 0s 0s 173056110e-09 1s 1s 173056310e-09 1s 1s 173058790e-09 0s 0s 173066350e-09 1s 1s 173066590e-09 1s 1s 173069030e-09 0s 0s 173076590e-09 1s 1s 173076870e-09 1s 1s 173079270e-09 0s 0s 173086830e-09 1s 1s 173087150e-09 1s 1s 173089510e-09 0s 0s 173097070e-09 1s 1s 173097430e-09 1s 1s 173099750e-09 0s 0s 173107310e-09 1s 1s 173107710e-09 1s 1s 173109990e-09 0s 0s 173117550e-09 1s 1s 173117990e-09 1s 1s 173120230e-09 0s 0s 173127790e-09 1s 1s 173128270e-09 1s 1s 173130470e-09 0s 0s 173138030e-09 1s 1s 173138550e-09 1s 1s 173140710e-09 0s 0s 173148270e-09 1s 1s 173148830e-09 1s 1s 173150950e-09 0s 0s 173158510e-09 1s 1s 173159110e-09 1s 1s 173161190e-09 0s 0s 173168750e-09 1s 1s 173169390e-09 1s 1s 173171430e-09 0s 0s 173178990e-09 1s 1s 173179670e-09 1s 1s 173181670e-09 0s 0s 173189230e-09 1s 1s 173189950e-09 1s 1s 173191910e-09 0s 0s 173199470e-09 1s 1s 173200230e-09 1s 1s 173202150e-09 0s 0s 173209710e-09 1s 1s 173210510e-09 1s 1s 173212390e-09 0s 0s 173219950e-09 1s 1s 173220790e-09 1s 1s 173222630e-09 0s 0s 173230190e-09 1s 1s 173231070e-09 1s 1s 173232870e-09 0s 0s 173240430e-09 1s 1s 173241350e-09 1s 1s 173243110e-09 0s 0s 173250670e-09 1s 1s 173251630e-09 1s 1s 173253350e-09 0s 0s 173260910e-09 1s 1s 173261910e-09 1s 1s 173263590e-09 0s 0s 173271150e-09 1s 1s 173272190e-09 1s 1s 173273830e-09 0s 0s 173281390e-09 1s 1s 173282470e-09 1s 1s 173284070e-09 0s 0s 173291630e-09 1s 1s 173292750e-09 1s 1s 173294310e-09 0s 0s 173301870e-09 1s 1s 173303030e-09 1s 1s 173304550e-09 0s 0s 173312110e-09 1s 1s 173313310e-09 1s 1s 173314790e-09 0s 0s 173322350e-09 1s 1s 173323590e-09 1s 1s 173325030e-09 0s 0s 173332590e-09 1s 1s 173333870e-09 1s 1s 173335270e-09 0s 0s 173342830e-09 1s 1s 173344150e-09 1s 1s 173345510e-09 0s 0s 173353070e-09 1s 1s 173354430e-09 1s 1s 173355750e-09 0s 0s 173363310e-09 1s 1s 173364710e-09 1s 1s 173365990e-09 0s 0s 173373550e-09 1s 1s 173374990e-09 1s 1s 173376230e-09 0s 0s 173383790e-09 1s 1s 173385270e-09 1s 1s 173386470e-09 0s 0s 173394030e-09 1s 1s 173395550e-09 1s 1s 173396710e-09 0s 0s 173404270e-09 1s 1s 173405830e-09 1s 1s 173406950e-09 0s 0s 173414510e-09 1s 1s 173416110e-09 1s 1s 173417190e-09 0s 0s 173424750e-09 1s 1s 173426390e-09 1s 1s 173427430e-09 0s 0s 173434990e-09 1s 1s 173436670e-09 1s 1s 173437670e-09 0s 0s 173445230e-09 1s 1s 173446950e-09 1s 1s 173447910e-09 0s 0s 173455470e-09 1s 1s 173457230e-09 1s 1s 173458150e-09 0s 0s 173465710e-09 1s 1s 173467510e-09 1s 1s 173468390e-09 0s 0s 173475950e-09 1s 1s 173477790e-09 1s 1s 173478630e-09 0s 0s 173486190e-09 1s 1s 173488070e-09 1s 1s 173488870e-09 0s 0s 173496430e-09 1s 1s 173498350e-09 1s 1s 173499110e-09 0s 0s 173506670e-09 1s 1s 173508630e-09 1s 1s 173509350e-09 0s 0s 173516910e-09 1s 1s 173518910e-09 1s 1s 173519590e-09 0s 0s 173527150e-09 1s 1s 173529190e-09 1s 1s 173529830e-09 0s 0s 173537390e-09 1s 1s 173539470e-09 1s 1s 173540070e-09 0s 0s 173547630e-09 1s 1s 173549750e-09 1s 1s 173550310e-09 0s 0s 173557870e-09 1s 1s 173560030e-09 1s 1s 173560550e-09 0s 0s 173568110e-09 1s 1s 173570310e-09 1s 1s 173570790e-09 0s 0s 173578350e-09 1s 1s 173580590e-09 1s 1s 173581030e-09 0s 0s 173588590e-09 1s 1s 173590870e-09 1s 1s 173591270e-09 0s 0s 173598830e-09 1s 1s 173601150e-09 1s 1s 173601510e-09 0s 0s 173609070e-09 1s 1s 173611430e-09 1s 1s 173611750e-09 0s 0s 173619310e-09 1s 1s 173621710e-09 1s 1s 173621990e-09 0s 0s 173629550e-09 1s 1s 173631990e-09 1s 1s 173632230e-09 0s 0s 173639790e-09 1s 1s 173642270e-09 1s 1s 173642470e-09 0s 0s 173650030e-09 1s 1s 173652550e-09 1s 1s 173652710e-09 0s 0s 173660270e-09 1s 1s 173662830e-09 1s 1s 173662950e-09 0s 0s 173670510e-09 1s 1s 173673110e-09 1s 1s 173673190e-09 0s 0s 173680750e-09 1s 1s 173683390e-09 1s 1s 173683430e-09 0s 0s 173690990e-09 1s 1s 173693670e-09 0s 0s 173701230e-09 1s 1s 173703910e-09 0s 0s 173703950e-09 0s 0s 173711470e-09 1s 1s 173714150e-09 0s 0s 173714230e-09 0s 0s 173721710e-09 1s 1s 173724390e-09 0s 0s 173724510e-09 0s 0s 173731950e-09 1s 1s 173734630e-09 0s 0s 173734790e-09 0s 0s 173742190e-09 1s 1s 173744870e-09 0s 0s 173745070e-09 0s 0s 173752430e-09 1s 1s 173755110e-09 0s 0s 173755350e-09 0s 0s 173762670e-09 1s 1s 173765350e-09 0s 0s 173765630e-09 0s 0s 173772910e-09 1s 1s 173775590e-09 0s 0s 173775910e-09 0s 0s 173783150e-09 1s 1s 173785830e-09 0s 0s 173786190e-09 0s 0s 173793390e-09 1s 1s 173796070e-09 0s 0s 173796470e-09 0s 0s 173803630e-09 1s 1s 173806310e-09 0s 0s 173806750e-09 0s 0s 173813870e-09 1s 1s 173816550e-09 0s 0s 173817030e-09 0s 0s 173824110e-09 1s 1s 173826790e-09 0s 0s 173827310e-09 0s 0s 173834350e-09 1s 1s 173837030e-09 0s 0s 173837590e-09 0s 0s 173844590e-09 1s 1s 173847270e-09 0s 0s 173847870e-09 0s 0s 173854830e-09 1s 1s 173857510e-09 0s 0s 173858150e-09 0s 0s 173865070e-09 1s 1s 173867750e-09 0s 0s 173868430e-09 0s 0s 173875310e-09 1s 1s 173877990e-09 0s 0s 173878710e-09 0s 0s 173885550e-09 1s 1s 173888230e-09 0s 0s 173888990e-09 0s 0s 173895790e-09 1s 1s 173898470e-09 0s 0s 173899270e-09 0s 0s 173906030e-09 1s 1s 173908710e-09 0s 0s 173909550e-09 0s 0s 173916270e-09 1s 1s 173918950e-09 0s 0s 173919830e-09 0s 0s 173926510e-09 1s 1s 173929190e-09 0s 0s 173930110e-09 0s 0s 173936750e-09 1s 1s 173939430e-09 0s 0s 173940390e-09 0s 0s 173946990e-09 1s 1s 173949670e-09 0s 0s 173950670e-09 0s 0s 173957230e-09 1s 1s 173959910e-09 0s 0s 173960950e-09 0s 0s 173967470e-09 1s 1s 173970150e-09 0s 0s 173971230e-09 0s 0s 173977710e-09 1s 1s 173980390e-09 0s 0s 173981510e-09 0s 0s 173987950e-09 1s 1s 173990630e-09 0s 0s 173991790e-09 0s 0s 173998190e-09 1s 1s 174000870e-09 0s 0s 174002070e-09 0s 0s 174008430e-09 1s 1s 174011110e-09 0s 0s 174012350e-09 0s 0s 174018670e-09 1s 1s 174021350e-09 0s 0s 174022630e-09 0s 0s 174028910e-09 1s 1s 174031590e-09 0s 0s 174032910e-09 0s 0s 174039150e-09 1s 1s 174041830e-09 0s 0s 174043190e-09 0s 0s 174049390e-09 1s 1s 174052070e-09 0s 0s 174053470e-09 0s 0s 174059630e-09 1s 1s 174062310e-09 0s 0s 174063750e-09 0s 0s 174069870e-09 1s 1s 174072550e-09 0s 0s 174074030e-09 0s 0s 174080110e-09 1s 1s 174082790e-09 0s 0s 174084310e-09 0s 0s 174090350e-09 1s 1s 174093030e-09 0s 0s 174094590e-09 0s 0s 174100590e-09 1s 1s 174103270e-09 0s 0s 174104870e-09 0s 0s 174110830e-09 1s 1s 174113510e-09 0s 0s 174115150e-09 0s 0s 174121070e-09 1s 1s 174123750e-09 0s 0s 174125430e-09 0s 0s 174131310e-09 1s 1s 174133990e-09 0s 0s 174135710e-09 0s 0s 174141550e-09 1s 1s 174144230e-09 0s 0s 174145990e-09 0s 0s 174151790e-09 1s 1s 174154470e-09 0s 0s 174156270e-09 0s 0s 174162030e-09 1s 1s 174164710e-09 0s 0s 174166550e-09 0s 0s 174172270e-09 1s 1s 174174950e-09 0s 0s 174176830e-09 0s 0s 174182510e-09 1s 1s 174185190e-09 0s 0s 174187110e-09 0s 0s 174192750e-09 1s 1s 174195430e-09 0s 0s 174197390e-09 0s 0s 174202990e-09 1s 1s 174205670e-09 0s 0s 174207670e-09 0s 0s 174213230e-09 1s 1s 174215910e-09 0s 0s 174217950e-09 0s 0s 174223470e-09 1s 1s 174226150e-09 0s 0s 174228230e-09 0s 0s 174233710e-09 1s 1s 174236390e-09 0s 0s 174238510e-09 0s 0s 174243950e-09 1s 1s 174246630e-09 0s 0s 174248790e-09 0s 0s 174254190e-09 1s 1s 174256870e-09 0s 0s 174259070e-09 0s 0s 174264430e-09 1s 1s 174267110e-09 0s 0s 174269350e-09 0s 0s 174274670e-09 1s 1s 174277350e-09 0s 0s 174279630e-09 0s 0s 174284910e-09 1s 1s 174287590e-09 0s 0s 174289910e-09 0s 0s 174295150e-09 1s 1s 174297830e-09 0s 0s 174300190e-09 0s 0s 174305390e-09 1s 1s 174308070e-09 0s 0s 174310470e-09 0s 0s 174315630e-09 1s 1s 174318310e-09 0s 0s 174320750e-09 0s 0s 174325870e-09 1s 1s 174328550e-09 0s 0s 174331030e-09 0s 0s 174336110e-09 1s 1s 174338790e-09 0s 0s 174341310e-09 0s 0s 174346350e-09 1s 1s 174349030e-09 0s 0s 174351590e-09 0s 0s 174356590e-09 1s 1s 174359270e-09 0s 0s 174361870e-09 0s 0s 174366830e-09 1s 1s 174369510e-09 0s 0s 174372150e-09 0s 0s 174377070e-09 1s 1s 174379750e-09 0s 0s 174382430e-09 0s 0s 174387310e-09 1s 1s 174389990e-09 0s 0s 174392710e-09 0s 0s 174397550e-09 1s 1s 174400230e-09 0s 0s 174402990e-09 0s 0s 174407790e-09 1s 1s 174410470e-09 0s 0s 174413270e-09 0s 0s 174418030e-09 1s 1s 174420710e-09 0s 0s 174423550e-09 0s 0s 174428270e-09 1s 1s 174430950e-09 0s 0s 174433830e-09 0s 0s 174438510e-09 1s 1s 174441190e-09 0s 0s 174444110e-09 0s 0s 174448750e-09 1s 1s 174451430e-09 0s 0s 174454390e-09 0s 0s 174458990e-09 1s 1s 174461670e-09 0s 0s 174464670e-09 0s 0s 174469230e-09 1s 1s 174471910e-09 0s 0s 174474950e-09 0s 0s 174479470e-09 1s 1s 174482150e-09 0s 0s 174485230e-09 0s 0s 174489710e-09 1s 1s 174492390e-09 0s 0s 174495510e-09 0s 0s 174499950e-09 1s 1s 174502630e-09 0s 0s 174505790e-09 0s 0s 174510190e-09 1s 1s 174512870e-09 0s 0s 174516070e-09 0s 0s 174520430e-09 1s 1s 174523110e-09 0s 0s 174526350e-09 0s 0s 174530670e-09 1s 1s 174533350e-09 0s 0s 174536630e-09 0s 0s 174540910e-09 1s 1s 174543590e-09 0s 0s 174546910e-09 0s 0s 174551150e-09 1s 1s 174553830e-09 0s 0s 174557190e-09 0s 0s 174561390e-09 1s 1s 174564070e-09 0s 0s 174567470e-09 0s 0s 174571630e-09 1s 1s 174574310e-09 0s 0s 174577750e-09 0s 0s 174581870e-09 1s 1s 174584550e-09 0s 0s 174588030e-09 0s 0s 174592110e-09 1s 1s 174594790e-09 0s 0s 174598310e-09 0s 0s 174602350e-09 1s 1s 174605030e-09 0s 0s 174608590e-09 0s 0s 174612590e-09 1s 1s 174615270e-09 0s 0s 174618870e-09 0s 0s 174622830e-09 1s 1s 174625510e-09 0s 0s 174629150e-09 0s 0s 174633070e-09 1s 1s 174635750e-09 0s 0s 174639430e-09 0s 0s 174643310e-09 1s 1s 174645990e-09 0s 0s 174649710e-09 0s 0s 174653550e-09 1s 1s 174656230e-09 0s 0s 174659990e-09 0s 0s 174663790e-09 1s 1s 174666470e-09 0s 0s 174670270e-09 0s 0s 174674030e-09 1s 1s 174676710e-09 0s 0s 174680550e-09 0s 0s 174684270e-09 1s 1s 174686950e-09 0s 0s 174690830e-09 0s 0s 174694510e-09 1s 1s 174697190e-09 0s 0s 174701110e-09 0s 0s 174704750e-09 1s 1s 174707430e-09 0s 0s 174711390e-09 0s 0s 174714990e-09 1s 1s 174717670e-09 0s 0s 174721670e-09 0s 0s 174725230e-09 1s 1s 174727910e-09 0s 0s 174731950e-09 0s 0s 174735470e-09 1s 1s 174738150e-09 0s 0s 174742230e-09 0s 0s 174745710e-09 1s 1s 174748390e-09 0s 0s 174752510e-09 0s 0s 174755950e-09 1s 1s 174758630e-09 0s 0s 174762790e-09 0s 0s 174766190e-09 1s 1s 174768870e-09 0s 0s 174773070e-09 0s 0s 174776430e-09 1s 1s 174779110e-09 0s 0s 174783350e-09 0s 0s 174786670e-09 1s 1s 174789350e-09 0s 0s 174793630e-09 0s 0s 174796910e-09 1s 1s 174799590e-09 0s 0s 174803910e-09 0s 0s 174807150e-09 1s 1s 174809830e-09 0s 0s 174814190e-09 0s 0s 174817390e-09 1s 1s 174820070e-09 0s 0s 174824470e-09 0s 0s 174827630e-09 1s 1s 174830310e-09 0s 0s 174834750e-09 0s 0s 174837870e-09 1s 1s 174840550e-09 0s 0s 174845030e-09 0s 0s 174848110e-09 1s 1s 174850790e-09 0s 0s 174855310e-09 0s 0s 174858350e-09 1s 1s 174861030e-09 0s 0s 174865590e-09 0s 0s 174868590e-09 1s 1s 174871270e-09 0s 0s 174875870e-09 0s 0s 174878830e-09 1s 1s 174881510e-09 0s 0s 174886150e-09 0s 0s 174889070e-09 1s 1s 174891750e-09 0s 0s 174896430e-09 0s 0s 174899310e-09 1s 1s 174901990e-09 0s 0s 174906710e-09 0s 0s 174909550e-09 1s 1s 174912230e-09 0s 0s 174916990e-09 0s 0s 174919790e-09 1s 1s 174922470e-09 0s 0s 174927270e-09 0s 0s 174930030e-09 1s 1s 174932710e-09 0s 0s 174937550e-09 0s 0s 174940270e-09 1s 1s 174942950e-09 0s 0s 174947830e-09 0s 0s 174950510e-09 1s 1s 174953190e-09 0s 0s 174958110e-09 0s 0s 174960750e-09 1s 1s 174963430e-09 0s 0s 174968390e-09 0s 0s 174970990e-09 1s 1s 174973670e-09 0s 0s 174978670e-09 0s 0s 174981230e-09 1s 1s 174983910e-09 0s 0s 174988950e-09 0s 0s 174991470e-09 1s 1s 174994150e-09 0s 0s 174999230e-09 0s 0s 175001710e-09 1s 1s 175004390e-09 0s 0s 175009510e-09 0s 0s 175011950e-09 1s 1s 175014630e-09 0s 0s 175019790e-09 0s 0s 175022190e-09 1s 1s 175024870e-09 0s 0s 175030070e-09 0s 0s 175032430e-09 1s 1s 175035110e-09 0s 0s 175040350e-09 0s 0s 175042670e-09 1s 1s 175045350e-09 0s 0s 175050630e-09 0s 0s 175052910e-09 1s 1s 175055590e-09 0s 0s 175060910e-09 0s 0s 175063150e-09 1s 1s 175065830e-09 0s 0s 175071190e-09 0s 0s 175073390e-09 1s 1s 175076070e-09 0s 0s 175081470e-09 0s 0s 175083630e-09 1s 1s 175086310e-09 0s 0s 175091750e-09 0s 0s 175093870e-09 1s 1s 175096550e-09 0s 0s 175102030e-09 0s 0s 175104110e-09 1s 1s 175106790e-09 0s 0s 175112310e-09 0s 0s 175114350e-09 1s 1s 175117030e-09 0s 0s 175122590e-09 0s 0s 175124590e-09 1s 1s 175127270e-09 0s 0s 175132870e-09 0s 0s 175134830e-09 1s 1s 175137510e-09 0s 0s 175143150e-09 0s 0s 175145070e-09 1s 1s 175147750e-09 0s 0s 175153430e-09 0s 0s 175155310e-09 1s 1s 175157990e-09 0s 0s 175163710e-09 0s 0s 175165550e-09 1s 1s 175168230e-09 0s 0s 175173990e-09 0s 0s 175175790e-09 1s 1s 175178470e-09 0s 0s 175184270e-09 0s 0s 175186030e-09 1s 1s 175188710e-09 0s 0s 175194550e-09 0s 0s 175196270e-09 1s 1s 175198950e-09 0s 0s 175204830e-09 0s 0s 175206510e-09 1s 1s 175209190e-09 0s 0s 175215110e-09 0s 0s 175216750e-09 1s 1s 175219430e-09 0s 0s 175225390e-09 0s 0s 175226990e-09 1s 1s 175229670e-09 0s 0s 175235670e-09 0s 0s 175237230e-09 1s 1s 175239910e-09 0s 0s 175245950e-09 0s 0s 175247470e-09 1s 1s 175250150e-09 0s 0s 175256230e-09 0s 0s 175257710e-09 1s 1s 175260390e-09 0s 0s 175266510e-09 0s 0s 175267950e-09 1s 1s 175270630e-09 0s 0s 175276790e-09 0s 0s 175278190e-09 1s 1s 175280870e-09 0s 0s 175287070e-09 0s 0s 175288430e-09 1s 1s 175291110e-09 0s 0s 175297350e-09 0s 0s 175298670e-09 1s 1s 175301350e-09 0s 0s 175307630e-09 0s 0s 175308910e-09 1s 1s 175311590e-09 0s 0s 175317910e-09 0s 0s 175319150e-09 1s 1s 175321830e-09 0s 0s 175328190e-09 0s 0s 175329390e-09 1s 1s 175332070e-09 0s 0s 175338470e-09 0s 0s 175339630e-09 1s 1s 175342310e-09 0s 0s 175348750e-09 0s 0s 175349870e-09 1s 1s 175352550e-09 0s 0s 175359030e-09 0s 0s 175360110e-09 1s 1s 175362790e-09 0s 0s 175369310e-09 0s 0s 175370350e-09 1s 1s 175373030e-09 0s 0s 175379590e-09 0s 0s 175380590e-09 1s 1s 175383270e-09 0s 0s 175389870e-09 0s 0s 175390830e-09 1s 1s 175393510e-09 0s 0s 175400150e-09 0s 0s 175401070e-09 1s 1s 175403750e-09 0s 0s 175410430e-09 0s 0s 175411310e-09 1s 1s 175413990e-09 0s 0s 175420710e-09 0s 0s 175421550e-09 1s 1s 175424230e-09 0s 0s 175430990e-09 0s 0s 175431790e-09 1s 1s 175434470e-09 0s 0s 175441270e-09 0s 0s 175442030e-09 1s 1s 175444710e-09 0s 0s 175451550e-09 0s 0s 175452270e-09 1s 1s 175454950e-09 0s 0s 175461830e-09 0s 0s 175462510e-09 1s 1s 175465190e-09 0s 0s 175472110e-09 0s 0s 175472750e-09 1s 1s 175475430e-09 0s 0s 175482390e-09 0s 0s 175482990e-09 1s 1s 175485670e-09 0s 0s 175492670e-09 0s 0s 175493230e-09 1s 1s 175495910e-09 0s 0s 175502950e-09 0s 0s 175503470e-09 1s 1s 175506150e-09 0s 0s 175513230e-09 0s 0s 175513710e-09 1s 1s 175516390e-09 0s 0s 175523510e-09 0s 0s 175523950e-09 1s 1s 175526630e-09 0s 0s 175533790e-09 0s 0s 175534190e-09 1s 1s 175536870e-09 0s 0s 175544070e-09 0s 0s 175544430e-09 1s 1s 175547110e-09 0s 0s 175554350e-09 0s 0s 175554670e-09 1s 1s 175557350e-09 0s 0s 175564630e-09 0s 0s 175564910e-09 1s 1s 175567590e-09 0s 0s 175574910e-09 0s 0s 175575150e-09 1s 1s 175577830e-09 0s 0s 175585190e-09 0s 0s 175585390e-09 1s 1s 175588070e-09 0s 0s 175595470e-09 0s 0s 175595630e-09 1s 1s 175598310e-09 0s 0s 175605750e-09 0s 0s 175605870e-09 1s 1s 175608550e-09 0s 0s 175616030e-09 0s 0s 175616110e-09 1s 1s 175618790e-09 0s 0s 175626310e-09 0s 0s 175626350e-09 1s 1s 175629030e-09 0s 0s 175636590e-09 1s 1s 175636630e-09 1s 1s 175639310e-09 0s 0s 175646830e-09 1s 1s 175646910e-09 1s 1s 175649550e-09 0s 0s 175657070e-09 1s 1s 175657190e-09 1s 1s 175659790e-09 0s 0s 175667310e-09 1s 1s 175667470e-09 1s 1s 175670030e-09 0s 0s 175677550e-09 1s 1s 175677750e-09 1s 1s 175680270e-09 0s 0s 175687790e-09 1s 1s 175688030e-09 1s 1s 175690510e-09 0s 0s 175698030e-09 1s 1s 175698310e-09 1s 1s 175700750e-09 0s 0s 175708270e-09 1s 1s 175708590e-09 1s 1s 175710990e-09 0s 0s 175718510e-09 1s 1s 175718870e-09 1s 1s 175721230e-09 0s 0s 175728750e-09 1s 1s 175729150e-09 1s 1s 175731470e-09 0s 0s 175738990e-09 1s 1s 175739430e-09 1s 1s 175741710e-09 0s 0s 175749230e-09 1s 1s 175749710e-09 1s 1s 175751950e-09 0s 0s 175759470e-09 1s 1s 175759990e-09 1s 1s 175762190e-09 0s 0s 175769710e-09 1s 1s 175770270e-09 1s 1s 175772430e-09 0s 0s 175779950e-09 1s 1s 175780550e-09 1s 1s 175782670e-09 0s 0s 175790190e-09 1s 1s 175790830e-09 1s 1s 175792910e-09 0s 0s 175800430e-09 1s 1s 175801110e-09 1s 1s 175803150e-09 0s 0s 175810670e-09 1s 1s 175811390e-09 1s 1s 175813390e-09 0s 0s 175820910e-09 1s 1s 175821670e-09 1s 1s 175823630e-09 0s 0s 175831150e-09 1s 1s 175831950e-09 1s 1s 175833870e-09 0s 0s 175841390e-09 1s 1s 175842230e-09 1s 1s 175844110e-09 0s 0s 175851630e-09 1s 1s 175852510e-09 1s 1s 175854350e-09 0s 0s 175861870e-09 1s 1s 175862790e-09 1s 1s 175864590e-09 0s 0s 175872110e-09 1s 1s 175873070e-09 1s 1s 175874830e-09 0s 0s 175882350e-09 1s 1s 175883350e-09 1s 1s 175885070e-09 0s 0s 175892590e-09 1s 1s 175893630e-09 1s 1s 175895310e-09 0s 0s 175902830e-09 1s 1s 175903910e-09 1s 1s 175905550e-09 0s 0s 175913070e-09 1s 1s 175914190e-09 1s 1s 175915790e-09 0s 0s 175923310e-09 1s 1s 175924470e-09 1s 1s 175926030e-09 0s 0s 175933550e-09 1s 1s 175934750e-09 1s 1s 175936270e-09 0s 0s 175943790e-09 1s 1s 175945030e-09 1s 1s 175946510e-09 0s 0s 175954030e-09 1s 1s 175955310e-09 1s 1s 175956750e-09 0s 0s 175964270e-09 1s 1s 175965590e-09 1s 1s 175966990e-09 0s 0s 175974510e-09 1s 1s 175975870e-09 1s 1s 175977230e-09 0s 0s 175984750e-09 1s 1s 175986150e-09 1s 1s 175987470e-09 0s 0s 175994990e-09 1s 1s 175996430e-09 1s 1s 175997710e-09 0s 0s 176005230e-09 1s 1s 176006710e-09 1s 1s 176007950e-09 0s 0s 176015470e-09 1s 1s 176016990e-09 1s 1s 176018190e-09 0s 0s 176025710e-09 1s 1s 176027270e-09 1s 1s 176028430e-09 0s 0s 176035950e-09 1s 1s 176037550e-09 1s 1s 176038670e-09 0s 0s 176046190e-09 1s 1s 176047830e-09 1s 1s 176048910e-09 0s 0s 176056430e-09 1s 1s 176058110e-09 1s 1s 176059150e-09 0s 0s 176066670e-09 1s 1s 176068390e-09 1s 1s 176069390e-09 0s 0s 176076910e-09 1s 1s 176078670e-09 1s 1s 176079630e-09 0s 0s 176087150e-09 1s 1s 176088950e-09 1s 1s 176089870e-09 0s 0s 176097390e-09 1s 1s 176099230e-09 1s 1s 176100110e-09 0s 0s 176107630e-09 1s 1s 176109510e-09 1s 1s 176110350e-09 0s 0s 176117870e-09 1s 1s 176119790e-09 1s 1s 176120590e-09 0s 0s 176128110e-09 1s 1s 176130070e-09 1s 1s 176130830e-09 0s 0s 176138350e-09 1s 1s 176140350e-09 1s 1s 176141070e-09 0s 0s 176148590e-09 1s 1s 176150630e-09 1s 1s 176151310e-09 0s 0s 176158830e-09 1s 1s 176160910e-09 1s 1s 176161550e-09 0s 0s 176169070e-09 1s 1s 176171190e-09 1s 1s 176171790e-09 0s 0s 176179310e-09 1s 1s 176181470e-09 1s 1s 176182030e-09 0s 0s 176189550e-09 1s 1s 176191750e-09 1s 1s 176192270e-09 0s 0s 176199790e-09 1s 1s 176202030e-09 1s 1s 176202510e-09 0s 0s 176210030e-09 1s 1s 176212310e-09 1s 1s 176212750e-09 0s 0s 176220270e-09 1s 1s 176222590e-09 1s 1s 176222990e-09 0s 0s 176230510e-09 1s 1s 176232870e-09 1s 1s 176233230e-09 0s 0s 176240750e-09 1s 1s 176243150e-09 1s 1s 176243470e-09 0s 0s 176250990e-09 1s 1s 176253430e-09 1s 1s 176253710e-09 0s 0s 176261230e-09 1s 1s 176263710e-09 1s 1s 176263950e-09 0s 0s 176271470e-09 1s 1s 176273990e-09 1s 1s 176274190e-09 0s 0s 176281710e-09 1s 1s 176284270e-09 1s 1s 176284430e-09 0s 0s 176291950e-09 1s 1s 176294550e-09 1s 1s 176294670e-09 0s 0s 176302190e-09 1s 1s 176304830e-09 1s 1s 176304910e-09 0s 0s 176312430e-09 1s 1s 176315110e-09 1s 1s 176315150e-09 0s 0s 176322670e-09 1s 1s 176325390e-09 0s 0s 176332910e-09 1s 1s 176335630e-09 0s 0s 176335670e-09 0s 0s 176343150e-09 1s 1s 176345870e-09 0s 0s 176345950e-09 0s 0s 176353390e-09 1s 1s 176356110e-09 0s 0s 176356230e-09 0s 0s 176363630e-09 1s 1s 176366350e-09 0s 0s 176366510e-09 0s 0s 176373870e-09 1s 1s 176376590e-09 0s 0s 176376790e-09 0s 0s 176384110e-09 1s 1s 176386830e-09 0s 0s 176387070e-09 0s 0s 176394350e-09 1s 1s 176397070e-09 0s 0s 176397350e-09 0s 0s 176404590e-09 1s 1s 176407310e-09 0s 0s 176407630e-09 0s 0s 176414830e-09 1s 1s 176417550e-09 0s 0s 176417910e-09 0s 0s 176425070e-09 1s 1s 176427790e-09 0s 0s 176428190e-09 0s 0s 176435310e-09 1s 1s 176438030e-09 0s 0s 176438470e-09 0s 0s 176445550e-09 1s 1s 176448270e-09 0s 0s 176448750e-09 0s 0s 176455790e-09 1s 1s 176458510e-09 0s 0s 176459030e-09 0s 0s 176466030e-09 1s 1s 176468750e-09 0s 0s 176469310e-09 0s 0s 176476270e-09 1s 1s 176478990e-09 0s 0s 176479590e-09 0s 0s 176486510e-09 1s 1s 176489230e-09 0s 0s 176489870e-09 0s 0s 176496750e-09 1s 1s 176499470e-09 0s 0s 176500150e-09 0s 0s 176506990e-09 1s 1s 176509710e-09 0s 0s 176510430e-09 0s 0s 176517230e-09 1s 1s 176519950e-09 0s 0s 176520710e-09 0s 0s 176527470e-09 1s 1s 176530190e-09 0s 0s 176530990e-09 0s 0s 176537710e-09 1s 1s 176540430e-09 0s 0s 176541270e-09 0s 0s 176547950e-09 1s 1s 176550670e-09 0s 0s 176551550e-09 0s 0s 176558190e-09 1s 1s 176560910e-09 0s 0s 176561830e-09 0s 0s 176568430e-09 1s 1s 176571150e-09 0s 0s 176572110e-09 0s 0s 176578670e-09 1s 1s 176581390e-09 0s 0s 176582390e-09 0s 0s 176588910e-09 1s 1s 176591630e-09 0s 0s 176592670e-09 0s 0s 176599150e-09 1s 1s 176601870e-09 0s 0s 176602950e-09 0s 0s 176609390e-09 1s 1s 176612110e-09 0s 0s 176613230e-09 0s 0s 176619630e-09 1s 1s 176622350e-09 0s 0s 176623510e-09 0s 0s 176629870e-09 1s 1s 176632590e-09 0s 0s 176633790e-09 0s 0s 176640110e-09 1s 1s 176642830e-09 0s 0s 176644070e-09 0s 0s 176650350e-09 1s 1s 176653070e-09 0s 0s 176654350e-09 0s 0s 176660590e-09 1s 1s 176663310e-09 0s 0s 176664630e-09 0s 0s 176670830e-09 1s 1s 176673550e-09 0s 0s 176674910e-09 0s 0s 176681070e-09 1s 1s 176683790e-09 0s 0s 176685190e-09 0s 0s 176691310e-09 1s 1s 176694030e-09 0s 0s 176695470e-09 0s 0s 176701550e-09 1s 1s 176704270e-09 0s 0s 176705750e-09 0s 0s 176711790e-09 1s 1s 176714510e-09 0s 0s 176716030e-09 0s 0s 176722030e-09 1s 1s 176724750e-09 0s 0s 176726310e-09 0s 0s 176732270e-09 1s 1s 176734990e-09 0s 0s 176736590e-09 0s 0s 176742510e-09 1s 1s 176745230e-09 0s 0s 176746870e-09 0s 0s 176752750e-09 1s 1s 176755470e-09 0s 0s 176757150e-09 0s 0s 176762990e-09 1s 1s 176765710e-09 0s 0s 176767430e-09 0s 0s 176773230e-09 1s 1s 176775950e-09 0s 0s 176777710e-09 0s 0s 176783470e-09 1s 1s 176786190e-09 0s 0s 176787990e-09 0s 0s 176793710e-09 1s 1s 176796430e-09 0s 0s 176798270e-09 0s 0s 176803950e-09 1s 1s 176806670e-09 0s 0s 176808550e-09 0s 0s 176814190e-09 1s 1s 176816910e-09 0s 0s 176818830e-09 0s 0s 176824430e-09 1s 1s 176827150e-09 0s 0s 176829110e-09 0s 0s 176834670e-09 1s 1s 176837390e-09 0s 0s 176839390e-09 0s 0s 176844910e-09 1s 1s 176847630e-09 0s 0s 176849670e-09 0s 0s 176855150e-09 1s 1s 176857870e-09 0s 0s 176859950e-09 0s 0s 176865390e-09 1s 1s 176868110e-09 0s 0s 176870230e-09 0s 0s 176875630e-09 1s 1s 176878350e-09 0s 0s 176880510e-09 0s 0s 176885870e-09 1s 1s 176888590e-09 0s 0s 176890790e-09 0s 0s 176896110e-09 1s 1s 176898830e-09 0s 0s 176901070e-09 0s 0s 176906350e-09 1s 1s 176909070e-09 0s 0s 176911350e-09 0s 0s 176916590e-09 1s 1s 176919310e-09 0s 0s 176921630e-09 0s 0s 176926830e-09 1s 1s 176929550e-09 0s 0s 176931910e-09 0s 0s 176937070e-09 1s 1s 176939790e-09 0s 0s 176942190e-09 0s 0s 176947310e-09 1s 1s 176950030e-09 0s 0s 176952470e-09 0s 0s 176957550e-09 1s 1s 176960270e-09 0s 0s 176962750e-09 0s 0s 176967790e-09 1s 1s 176970510e-09 0s 0s 176973030e-09 0s 0s 176978030e-09 1s 1s 176980750e-09 0s 0s 176983310e-09 0s 0s 176988270e-09 1s 1s 176990990e-09 0s 0s 176993590e-09 0s 0s 176998510e-09 1s 1s 177001230e-09 0s 0s 177003870e-09 0s 0s 177008750e-09 1s 1s 177011470e-09 0s 0s 177014150e-09 0s 0s 177018990e-09 1s 1s 177021710e-09 0s 0s 177024430e-09 0s 0s 177029230e-09 1s 1s 177031950e-09 0s 0s 177034710e-09 0s 0s 177039470e-09 1s 1s 177042190e-09 0s 0s 177044990e-09 0s 0s 177049710e-09 1s 1s 177052430e-09 0s 0s 177055270e-09 0s 0s 177059950e-09 1s 1s 177062670e-09 0s 0s 177065550e-09 0s 0s 177070190e-09 1s 1s 177072910e-09 0s 0s 177075830e-09 0s 0s 177080430e-09 1s 1s 177083150e-09 0s 0s 177086110e-09 0s 0s 177090670e-09 1s 1s 177093390e-09 0s 0s 177096390e-09 0s 0s 177100910e-09 1s 1s 177103630e-09 0s 0s 177106670e-09 0s 0s 177111150e-09 1s 1s 177113870e-09 0s 0s 177116950e-09 0s 0s 177121390e-09 1s 1s 177124110e-09 0s 0s 177127230e-09 0s 0s 177131630e-09 1s 1s 177134350e-09 0s 0s 177137510e-09 0s 0s 177141870e-09 1s 1s 177144590e-09 0s 0s 177147790e-09 0s 0s 177152110e-09 1s 1s 177154830e-09 0s 0s 177158070e-09 0s 0s 177162350e-09 1s 1s 177165070e-09 0s 0s 177168350e-09 0s 0s 177172590e-09 1s 1s 177175310e-09 0s 0s 177178630e-09 0s 0s 177182830e-09 1s 1s 177185550e-09 0s 0s 177188910e-09 0s 0s 177193070e-09 1s 1s 177195790e-09 0s 0s 177199190e-09 0s 0s 177203310e-09 1s 1s 177206030e-09 0s 0s 177209470e-09 0s 0s 177213550e-09 1s 1s 177216270e-09 0s 0s 177219750e-09 0s 0s 177223790e-09 1s 1s 177226510e-09 0s 0s 177230030e-09 0s 0s 177234030e-09 1s 1s 177236750e-09 0s 0s 177240310e-09 0s 0s 177244270e-09 1s 1s 177246990e-09 0s 0s 177250590e-09 0s 0s 177254510e-09 1s 1s 177257230e-09 0s 0s 177260870e-09 0s 0s 177264750e-09 1s 1s 177267470e-09 0s 0s 177271150e-09 0s 0s 177274990e-09 1s 1s 177277710e-09 0s 0s 177281430e-09 0s 0s 177285230e-09 1s 1s 177287950e-09 0s 0s 177291710e-09 0s 0s 177295470e-09 1s 1s 177298190e-09 0s 0s 177301990e-09 0s 0s 177305710e-09 1s 1s 177308430e-09 0s 0s 177312270e-09 0s 0s 177315950e-09 1s 1s 177318670e-09 0s 0s 177322550e-09 0s 0s 177326190e-09 1s 1s 177328910e-09 0s 0s 177332830e-09 0s 0s 177336430e-09 1s 1s 177339150e-09 0s 0s 177343110e-09 0s 0s 177346670e-09 1s 1s 177349390e-09 0s 0s 177353390e-09 0s 0s 177356910e-09 1s 1s 177359630e-09 0s 0s 177363670e-09 0s 0s 177367150e-09 1s 1s 177369870e-09 0s 0s 177373950e-09 0s 0s 177377390e-09 1s 1s 177380110e-09 0s 0s 177384230e-09 0s 0s 177387630e-09 1s 1s 177390350e-09 0s 0s 177394510e-09 0s 0s 177397870e-09 1s 1s 177400590e-09 0s 0s 177404790e-09 0s 0s 177408110e-09 1s 1s 177410830e-09 0s 0s 177415070e-09 0s 0s 177418350e-09 1s 1s 177421070e-09 0s 0s 177425350e-09 0s 0s 177428590e-09 1s 1s 177431310e-09 0s 0s 177435630e-09 0s 0s 177438830e-09 1s 1s 177441550e-09 0s 0s 177445910e-09 0s 0s 177449070e-09 1s 1s 177451790e-09 0s 0s 177456190e-09 0s 0s 177459310e-09 1s 1s 177462030e-09 0s 0s 177466470e-09 0s 0s 177469550e-09 1s 1s 177472270e-09 0s 0s 177476750e-09 0s 0s 177479790e-09 1s 1s 177482510e-09 0s 0s 177487030e-09 0s 0s 177490030e-09 1s 1s 177492750e-09 0s 0s 177497310e-09 0s 0s 177500270e-09 1s 1s 177502990e-09 0s 0s 177507590e-09 0s 0s 177510510e-09 1s 1s 177513230e-09 0s 0s 177517870e-09 0s 0s 177520750e-09 1s 1s 177523470e-09 0s 0s 177528150e-09 0s 0s 177530990e-09 1s 1s 177533710e-09 0s 0s 177538430e-09 0s 0s 177541230e-09 1s 1s 177543950e-09 0s 0s 177548710e-09 0s 0s 177551470e-09 1s 1s 177554190e-09 0s 0s 177558990e-09 0s 0s 177561710e-09 1s 1s 177564430e-09 0s 0s 177569270e-09 0s 0s 177571950e-09 1s 1s 177574670e-09 0s 0s 177579550e-09 0s 0s 177582190e-09 1s 1s 177584910e-09 0s 0s 177589830e-09 0s 0s 177592430e-09 1s 1s 177595150e-09 0s 0s 177600110e-09 0s 0s 177602670e-09 1s 1s 177605390e-09 0s 0s 177610390e-09 0s 0s 177612910e-09 1s 1s 177615630e-09 0s 0s 177620670e-09 0s 0s 177623150e-09 1s 1s 177625870e-09 0s 0s 177630950e-09 0s 0s 177633390e-09 1s 1s 177636110e-09 0s 0s 177641230e-09 0s 0s 177643630e-09 1s 1s 177646350e-09 0s 0s 177651510e-09 0s 0s 177653870e-09 1s 1s 177656590e-09 0s 0s 177661790e-09 0s 0s 177664110e-09 1s 1s 177666830e-09 0s 0s 177672070e-09 0s 0s 177674350e-09 1s 1s 177677070e-09 0s 0s 177682350e-09 0s 0s 177684590e-09 1s 1s 177687310e-09 0s 0s 177692630e-09 0s 0s 177694830e-09 1s 1s 177697550e-09 0s 0s 177702910e-09 0s 0s 177705070e-09 1s 1s 177707790e-09 0s 0s 177713190e-09 0s 0s 177715310e-09 1s 1s 177718030e-09 0s 0s 177723470e-09 0s 0s 177725550e-09 1s 1s 177728270e-09 0s 0s 177733750e-09 0s 0s 177735790e-09 1s 1s 177738510e-09 0s 0s 177744030e-09 0s 0s 177746030e-09 1s 1s 177748750e-09 0s 0s 177754310e-09 0s 0s 177756270e-09 1s 1s 177758990e-09 0s 0s 177764590e-09 0s 0s 177766510e-09 1s 1s 177769230e-09 0s 0s 177774870e-09 0s 0s 177776750e-09 1s 1s 177779470e-09 0s 0s 177785150e-09 0s 0s 177786990e-09 1s 1s 177789710e-09 0s 0s 177795430e-09 0s 0s 177797230e-09 1s 1s 177799950e-09 0s 0s 177805710e-09 0s 0s 177807470e-09 1s 1s 177810190e-09 0s 0s 177815990e-09 0s 0s 177817710e-09 1s 1s 177820430e-09 0s 0s 177826270e-09 0s 0s 177827950e-09 1s 1s 177830670e-09 0s 0s 177836550e-09 0s 0s 177838190e-09 1s 1s 177840910e-09 0s 0s 177846830e-09 0s 0s 177848430e-09 1s 1s 177851150e-09 0s 0s 177857110e-09 0s 0s 177858670e-09 1s 1s 177861390e-09 0s 0s 177867390e-09 0s 0s 177868910e-09 1s 1s 177871630e-09 0s 0s 177877670e-09 0s 0s 177879150e-09 1s 1s 177881870e-09 0s 0s 177887950e-09 0s 0s 177889390e-09 1s 1s 177892110e-09 0s 0s 177898230e-09 0s 0s 177899630e-09 1s 1s 177902350e-09 0s 0s 177908510e-09 0s 0s 177909870e-09 1s 1s 177912590e-09 0s 0s 177918790e-09 0s 0s 177920110e-09 1s 1s 177922830e-09 0s 0s 177929070e-09 0s 0s 177930350e-09 1s 1s 177933070e-09 0s 0s 177939350e-09 0s 0s 177940590e-09 1s 1s 177943310e-09 0s 0s 177949630e-09 0s 0s 177950830e-09 1s 1s 177953550e-09 0s 0s 177959910e-09 0s 0s 177961070e-09 1s 1s 177963790e-09 0s 0s 177970190e-09 0s 0s 177971310e-09 1s 1s 177974030e-09 0s 0s 177980470e-09 0s 0s 177981550e-09 1s 1s 177984270e-09 0s 0s 177990750e-09 0s 0s 177991790e-09 1s 1s 177994510e-09 0s 0s 178001030e-09 0s 0s 178002030e-09 1s 1s 178004750e-09 0s 0s 178011310e-09 0s 0s 178012270e-09 1s 1s 178014990e-09 0s 0s 178021590e-09 0s 0s 178022510e-09 1s 1s 178025230e-09 0s 0s 178031870e-09 0s 0s 178032750e-09 1s 1s 178035470e-09 0s 0s 178042150e-09 0s 0s 178042990e-09 1s 1s 178045710e-09 0s 0s 178052430e-09 0s 0s 178053230e-09 1s 1s 178055950e-09 0s 0s 178062710e-09 0s 0s 178063470e-09 1s 1s 178066190e-09 0s 0s 178072990e-09 0s 0s 178073710e-09 1s 1s 178076430e-09 0s 0s 178083270e-09 0s 0s 178083950e-09 1s 1s 178086670e-09 0s 0s 178093550e-09 0s 0s 178094190e-09 1s 1s 178096910e-09 0s 0s 178103830e-09 0s 0s 178104430e-09 1s 1s 178107150e-09 0s 0s 178114110e-09 0s 0s 178114670e-09 1s 1s 178117390e-09 0s 0s 178124390e-09 0s 0s 178124910e-09 1s 1s 178127630e-09 0s 0s 178134670e-09 0s 0s 178135150e-09 1s 1s 178137870e-09 0s 0s 178144950e-09 0s 0s 178145390e-09 1s 1s 178148110e-09 0s 0s 178155230e-09 0s 0s 178155630e-09 1s 1s 178158350e-09 0s 0s 178165510e-09 0s 0s 178165870e-09 1s 1s 178168590e-09 0s 0s 178175790e-09 0s 0s 178176110e-09 1s 1s 178178830e-09 0s 0s 178186070e-09 0s 0s 178186350e-09 1s 1s 178189070e-09 0s 0s 178196350e-09 0s 0s 178196590e-09 1s 1s 178199310e-09 0s 0s 178206630e-09 0s 0s 178206830e-09 1s 1s 178209550e-09 0s 0s 178216910e-09 0s 0s 178217070e-09 1s 1s 178219790e-09 0s 0s 178227190e-09 0s 0s 178227310e-09 1s 1s 178230030e-09 0s 0s 178237470e-09 0s 0s 178237550e-09 1s 1s 178240270e-09 0s 0s 178247750e-09 0s 0s 178247790e-09 1s 1s 178250510e-09 0s 0s 178258030e-09 1s 1s 178258070e-09 1s 1s 178260790e-09 0s 0s 178268270e-09 1s 1s 178268350e-09 1s 1s 178271030e-09 0s 0s 178278510e-09 1s 1s 178278630e-09 1s 1s 178281270e-09 0s 0s 178288750e-09 1s 1s 178288910e-09 1s 1s 178291510e-09 0s 0s 178298990e-09 1s 1s 178299190e-09 1s 1s 178301750e-09 0s 0s 178309230e-09 1s 1s 178309470e-09 1s 1s 178311990e-09 0s 0s 178319470e-09 1s 1s 178319750e-09 1s 1s 178322230e-09 0s 0s 178329710e-09 1s 1s 178330030e-09 1s 1s 178332470e-09 0s 0s 178339950e-09 1s 1s 178340310e-09 1s 1s 178342710e-09 0s 0s 178350190e-09 1s 1s 178350590e-09 1s 1s 178352950e-09 0s 0s 178360430e-09 1s 1s 178360870e-09 1s 1s 178363190e-09 0s 0s 178370670e-09 1s 1s 178371150e-09 1s 1s 178373430e-09 0s 0s 178380910e-09 1s 1s 178381430e-09 1s 1s 178383670e-09 0s 0s 178391150e-09 1s 1s 178391710e-09 1s 1s 178393910e-09 0s 0s 178401390e-09 1s 1s 178401990e-09 1s 1s 178404150e-09 0s 0s 178411630e-09 1s 1s 178412270e-09 1s 1s 178414390e-09 0s 0s 178421870e-09 1s 1s 178422550e-09 1s 1s 178424630e-09 0s 0s 178432110e-09 1s 1s 178432830e-09 1s 1s 178434870e-09 0s 0s 178442350e-09 1s 1s 178443110e-09 1s 1s 178445110e-09 0s 0s 178452590e-09 1s 1s 178453390e-09 1s 1s 178455350e-09 0s 0s 178462830e-09 1s 1s 178463670e-09 1s 1s 178465590e-09 0s 0s 178473070e-09 1s 1s 178473950e-09 1s 1s 178475830e-09 0s 0s 178483310e-09 1s 1s 178484230e-09 1s 1s 178486070e-09 0s 0s 178493550e-09 1s 1s 178494510e-09 1s 1s 178496310e-09 0s 0s 178503790e-09 1s 1s 178504790e-09 1s 1s 178506550e-09 0s 0s 178514030e-09 1s 1s 178515070e-09 1s 1s 178516790e-09 0s 0s 178524270e-09 1s 1s 178525350e-09 1s 1s 178527030e-09 0s 0s 178534510e-09 1s 1s 178535630e-09 1s 1s 178537270e-09 0s 0s 178544750e-09 1s 1s 178545910e-09 1s 1s 178547510e-09 0s 0s 178554990e-09 1s 1s 178556190e-09 1s 1s 178557750e-09 0s 0s 178565230e-09 1s 1s 178566470e-09 1s 1s 178567990e-09 0s 0s 178575470e-09 1s 1s 178576750e-09 1s 1s 178578230e-09 0s 0s 178585710e-09 1s 1s 178587030e-09 1s 1s 178588470e-09 0s 0s 178595950e-09 1s 1s 178597310e-09 1s 1s 178598710e-09 0s 0s 178606190e-09 1s 1s 178607590e-09 1s 1s 178608950e-09 0s 0s 178616430e-09 1s 1s 178617870e-09 1s 1s 178619190e-09 0s 0s 178626670e-09 1s 1s 178628150e-09 1s 1s 178629430e-09 0s 0s 178636910e-09 1s 1s 178638430e-09 1s 1s 178639670e-09 0s 0s 178647150e-09 1s 1s 178648710e-09 1s 1s 178649910e-09 0s 0s 178657390e-09 1s 1s 178658990e-09 1s 1s 178660150e-09 0s 0s 178667630e-09 1s 1s 178669270e-09 1s 1s 178670390e-09 0s 0s 178677870e-09 1s 1s 178679550e-09 1s 1s 178680630e-09 0s 0s 178688110e-09 1s 1s 178689830e-09 1s 1s 178690870e-09 0s 0s 178698350e-09 1s 1s 178700110e-09 1s 1s 178701110e-09 0s 0s 178708590e-09 1s 1s 178710390e-09 1s 1s 178711350e-09 0s 0s 178718830e-09 1s 1s 178720670e-09 1s 1s 178721590e-09 0s 0s 178729070e-09 1s 1s 178730950e-09 1s 1s 178731830e-09 0s 0s 178739310e-09 1s 1s 178741230e-09 1s 1s 178742070e-09 0s 0s 178749550e-09 1s 1s 178751510e-09 1s 1s 178752310e-09 0s 0s 178759790e-09 1s 1s 178761790e-09 1s 1s 178762550e-09 0s 0s 178770030e-09 1s 1s 178772070e-09 1s 1s 178772790e-09 0s 0s 178780270e-09 1s 1s 178782350e-09 1s 1s 178783030e-09 0s 0s 178790510e-09 1s 1s 178792630e-09 1s 1s 178793270e-09 0s 0s 178800750e-09 1s 1s 178802910e-09 1s 1s 178803510e-09 0s 0s 178810990e-09 1s 1s 178813190e-09 1s 1s 178813750e-09 0s 0s 178821230e-09 1s 1s 178823470e-09 1s 1s 178823990e-09 0s 0s 178831470e-09 1s 1s 178833750e-09 1s 1s 178834230e-09 0s 0s 178841710e-09 1s 1s 178844030e-09 1s 1s 178844470e-09 0s 0s 178851950e-09 1s 1s 178854310e-09 1s 1s 178854710e-09 0s 0s 178862190e-09 1s 1s 178864590e-09 1s 1s 178864950e-09 0s 0s 178872430e-09 1s 1s 178874870e-09 1s 1s 178875190e-09 0s 0s 178882670e-09 1s 1s 178885150e-09 1s 1s 178885430e-09 0s 0s 178892910e-09 1s 1s 178895430e-09 1s 1s 178895670e-09 0s 0s 178903150e-09 1s 1s 178905710e-09 1s 1s 178905910e-09 0s 0s 178913390e-09 1s 1s 178915990e-09 1s 1s 178916150e-09 0s 0s 178923630e-09 1s 1s 178926270e-09 1s 1s 178926390e-09 0s 0s 178933870e-09 1s 1s 178936550e-09 1s 1s 178936630e-09 0s 0s 178944110e-09 1s 1s 178946830e-09 1s 1s 178946870e-09 0s 0s 178954350e-09 1s 1s 178957110e-09 0s 0s 178964590e-09 1s 1s 178967350e-09 0s 0s 178967390e-09 0s 0s 178974830e-09 1s 1s 178977590e-09 0s 0s 178977670e-09 0s 0s 178985070e-09 1s 1s 178987830e-09 0s 0s 178987950e-09 0s 0s 178995310e-09 1s 1s 178998070e-09 0s 0s 178998230e-09 0s 0s 179005550e-09 1s 1s 179008310e-09 0s 0s 179008510e-09 0s 0s 179015790e-09 1s 1s 179018550e-09 0s 0s 179018790e-09 0s 0s 179026030e-09 1s 1s 179028790e-09 0s 0s 179029070e-09 0s 0s 179036270e-09 1s 1s 179039030e-09 0s 0s 179039350e-09 0s 0s 179046510e-09 1s 1s 179049270e-09 0s 0s 179049630e-09 0s 0s 179056750e-09 1s 1s 179059510e-09 0s 0s 179059910e-09 0s 0s 179066990e-09 1s 1s 179069750e-09 0s 0s 179070190e-09 0s 0s 179077230e-09 1s 1s 179079990e-09 0s 0s 179080470e-09 0s 0s 179087470e-09 1s 1s 179090230e-09 0s 0s 179090750e-09 0s 0s 179097710e-09 1s 1s 179100470e-09 0s 0s 179101030e-09 0s 0s 179107950e-09 1s 1s 179110710e-09 0s 0s 179111310e-09 0s 0s 179118190e-09 1s 1s 179120950e-09 0s 0s 179121590e-09 0s 0s 179128430e-09 1s 1s 179131190e-09 0s 0s 179131870e-09 0s 0s 179138670e-09 1s 1s 179141430e-09 0s 0s 179142150e-09 0s 0s 179148910e-09 1s 1s 179151670e-09 0s 0s 179152430e-09 0s 0s 179159150e-09 1s 1s 179161910e-09 0s 0s 179162710e-09 0s 0s 179169390e-09 1s 1s 179172150e-09 0s 0s 179172990e-09 0s 0s 179179630e-09 1s 1s 179182390e-09 0s 0s 179183270e-09 0s 0s 179189870e-09 1s 1s 179192630e-09 0s 0s 179193550e-09 0s 0s 179200110e-09 1s 1s 179202870e-09 0s 0s 179203830e-09 0s 0s 179210350e-09 1s 1s 179213110e-09 0s 0s 179214110e-09 0s 0s 179220590e-09 1s 1s 179223350e-09 0s 0s 179224390e-09 0s 0s 179230830e-09 1s 1s 179233590e-09 0s 0s 179234670e-09 0s 0s 179241070e-09 1s 1s 179243830e-09 0s 0s 179244950e-09 0s 0s 179251310e-09 1s 1s 179254070e-09 0s 0s 179255230e-09 0s 0s 179261550e-09 1s 1s 179264310e-09 0s 0s 179265510e-09 0s 0s 179271790e-09 1s 1s 179274550e-09 0s 0s 179275790e-09 0s 0s 179282030e-09 1s 1s 179284790e-09 0s 0s 179286070e-09 0s 0s 179292270e-09 1s 1s 179295030e-09 0s 0s 179296350e-09 0s 0s 179302510e-09 1s 1s 179305270e-09 0s 0s 179306630e-09 0s 0s 179312750e-09 1s 1s 179315510e-09 0s 0s 179316910e-09 0s 0s 179322990e-09 1s 1s 179325750e-09 0s 0s 179327190e-09 0s 0s 179333230e-09 1s 1s 179335990e-09 0s 0s 179337470e-09 0s 0s 179343470e-09 1s 1s 179346230e-09 0s 0s 179347750e-09 0s 0s 179353710e-09 1s 1s 179356470e-09 0s 0s 179358030e-09 0s 0s 179363950e-09 1s 1s 179366710e-09 0s 0s 179368310e-09 0s 0s 179374190e-09 1s 1s 179376950e-09 0s 0s 179378590e-09 0s 0s 179384430e-09 1s 1s 179387190e-09 0s 0s 179388870e-09 0s 0s 179394670e-09 1s 1s 179397430e-09 0s 0s 179399150e-09 0s 0s 179404910e-09 1s 1s 179407670e-09 0s 0s 179409430e-09 0s 0s 179415150e-09 1s 1s 179417910e-09 0s 0s 179419710e-09 0s 0s 179425390e-09 1s 1s 179428150e-09 0s 0s 179429990e-09 0s 0s 179435630e-09 1s 1s 179438390e-09 0s 0s 179440270e-09 0s 0s 179445870e-09 1s 1s 179448630e-09 0s 0s 179450550e-09 0s 0s 179456110e-09 1s 1s 179458870e-09 0s 0s 179460830e-09 0s 0s 179466350e-09 1s 1s 179469110e-09 0s 0s 179471110e-09 0s 0s 179476590e-09 1s 1s 179479350e-09 0s 0s 179481390e-09 0s 0s 179486830e-09 1s 1s 179489590e-09 0s 0s 179491670e-09 0s 0s 179497070e-09 1s 1s 179499830e-09 0s 0s 179501950e-09 0s 0s 179507310e-09 1s 1s 179510070e-09 0s 0s 179512230e-09 0s 0s 179517550e-09 1s 1s 179520310e-09 0s 0s 179522510e-09 0s 0s 179527790e-09 1s 1s 179530550e-09 0s 0s 179532790e-09 0s 0s 179538030e-09 1s 1s 179540790e-09 0s 0s 179543070e-09 0s 0s 179548270e-09 1s 1s 179551030e-09 0s 0s 179553350e-09 0s 0s 179558510e-09 1s 1s 179561270e-09 0s 0s 179563630e-09 0s 0s 179568750e-09 1s 1s 179571510e-09 0s 0s 179573910e-09 0s 0s 179578990e-09 1s 1s 179581750e-09 0s 0s 179584190e-09 0s 0s 179589230e-09 1s 1s 179591990e-09 0s 0s 179594470e-09 0s 0s 179599470e-09 1s 1s 179602230e-09 0s 0s 179604750e-09 0s 0s 179609710e-09 1s 1s 179612470e-09 0s 0s 179615030e-09 0s 0s 179619950e-09 1s 1s 179622710e-09 0s 0s 179625310e-09 0s 0s 179630190e-09 1s 1s 179632950e-09 0s 0s 179635590e-09 0s 0s 179640430e-09 1s 1s 179643190e-09 0s 0s 179645870e-09 0s 0s 179650670e-09 1s 1s 179653430e-09 0s 0s 179656150e-09 0s 0s 179660910e-09 1s 1s 179663670e-09 0s 0s 179666430e-09 0s 0s 179671150e-09 1s 1s 179673910e-09 0s 0s 179676710e-09 0s 0s 179681390e-09 1s 1s 179684150e-09 0s 0s 179686990e-09 0s 0s 179691630e-09 1s 1s 179694390e-09 0s 0s 179697270e-09 0s 0s 179701870e-09 1s 1s 179704630e-09 0s 0s 179707550e-09 0s 0s 179712110e-09 1s 1s 179714870e-09 0s 0s 179717830e-09 0s 0s 179722350e-09 1s 1s 179725110e-09 0s 0s 179728110e-09 0s 0s 179732590e-09 1s 1s 179735350e-09 0s 0s 179738390e-09 0s 0s 179742830e-09 1s 1s 179745590e-09 0s 0s 179748670e-09 0s 0s 179753070e-09 1s 1s 179755830e-09 0s 0s 179758950e-09 0s 0s 179763310e-09 1s 1s 179766070e-09 0s 0s 179769230e-09 0s 0s 179773550e-09 1s 1s 179776310e-09 0s 0s 179779510e-09 0s 0s 179783790e-09 1s 1s 179786550e-09 0s 0s 179789790e-09 0s 0s 179794030e-09 1s 1s 179796790e-09 0s 0s 179800070e-09 0s 0s 179804270e-09 1s 1s 179807030e-09 0s 0s 179810350e-09 0s 0s 179814510e-09 1s 1s 179817270e-09 0s 0s 179820630e-09 0s 0s 179824750e-09 1s 1s 179827510e-09 0s 0s 179830910e-09 0s 0s 179834990e-09 1s 1s 179837750e-09 0s 0s 179841190e-09 0s 0s 179845230e-09 1s 1s 179847990e-09 0s 0s 179851470e-09 0s 0s 179855470e-09 1s 1s 179858230e-09 0s 0s 179861750e-09 0s 0s 179865710e-09 1s 1s 179868470e-09 0s 0s 179872030e-09 0s 0s 179875950e-09 1s 1s 179878710e-09 0s 0s 179882310e-09 0s 0s 179886190e-09 1s 1s 179888950e-09 0s 0s 179892590e-09 0s 0s 179896430e-09 1s 1s 179899190e-09 0s 0s 179902870e-09 0s 0s 179906670e-09 1s 1s 179909430e-09 0s 0s 179913150e-09 0s 0s 179916910e-09 1s 1s 179919670e-09 0s 0s 179923430e-09 0s 0s 179927150e-09 1s 1s 179929910e-09 0s 0s 179933710e-09 0s 0s 179937390e-09 1s 1s 179940150e-09 0s 0s 179943990e-09 0s 0s 179947630e-09 1s 1s 179950390e-09 0s 0s 179954270e-09 0s 0s 179957870e-09 1s 1s 179960630e-09 0s 0s 179964550e-09 0s 0s 179968110e-09 1s 1s 179970870e-09 0s 0s 179974830e-09 0s 0s 179978350e-09 1s 1s 179981110e-09 0s 0s 179985110e-09 0s 0s 179988590e-09 1s 1s 179991350e-09 0s 0s 179995390e-09 0s 0s 179998830e-09 1s 1s 180001590e-09 0s 0s 180005670e-09 0s 0s 180009070e-09 1s 1s 180011830e-09 0s 0s 180015950e-09 0s 0s 180019310e-09 1s 1s 180022070e-09 0s 0s 180026230e-09 0s 0s 180029550e-09 1s 1s 180032310e-09 0s 0s 180036510e-09 0s 0s 180039790e-09 1s 1s 180042550e-09 0s 0s 180046790e-09 0s 0s 180050030e-09 1s 1s 180052790e-09 0s 0s 180057070e-09 0s 0s 180060270e-09 1s 1s 180063030e-09 0s 0s 180067350e-09 0s 0s 180070510e-09 1s 1s 180073270e-09 0s 0s 180077630e-09 0s 0s 180080750e-09 1s 1s 180083510e-09 0s 0s 180087910e-09 0s 0s 180090990e-09 1s 1s 180093750e-09 0s 0s 180098190e-09 0s 0s 180101230e-09 1s 1s 180103990e-09 0s 0s 180108470e-09 0s 0s 180111470e-09 1s 1s 180114230e-09 0s 0s 180118750e-09 0s 0s 180121710e-09 1s 1s 180124470e-09 0s 0s 180129030e-09 0s 0s 180131950e-09 1s 1s 180134710e-09 0s 0s 180139310e-09 0s 0s 180142190e-09 1s 1s 180144950e-09 0s 0s 180149590e-09 0s 0s 180152430e-09 1s 1s 180155190e-09 0s 0s 180159870e-09 0s 0s 180162670e-09 1s 1s 180165430e-09 0s 0s 180170150e-09 0s 0s 180172910e-09 1s 1s 180175670e-09 0s 0s 180180430e-09 0s 0s 180183150e-09 1s 1s 180185910e-09 0s 0s 180190710e-09 0s 0s 180193390e-09 1s 1s 180196150e-09 0s 0s 180200990e-09 0s 0s 180203630e-09 1s 1s 180206390e-09 0s 0s 180211270e-09 0s 0s 180213870e-09 1s 1s 180216630e-09 0s 0s 180221550e-09 0s 0s 180224110e-09 1s 1s 180226870e-09 0s 0s 180231830e-09 0s 0s 180234350e-09 1s 1s 180237110e-09 0s 0s 180242110e-09 0s 0s 180244590e-09 1s 1s 180247350e-09 0s 0s 180252390e-09 0s 0s 180254830e-09 1s 1s 180257590e-09 0s 0s 180262670e-09 0s 0s 180265070e-09 1s 1s 180267830e-09 0s 0s 180272950e-09 0s 0s 180275310e-09 1s 1s 180278070e-09 0s 0s 180283230e-09 0s 0s 180285550e-09 1s 1s 180288310e-09 0s 0s 180293510e-09 0s 0s 180295790e-09 1s 1s 180298550e-09 0s 0s 180303790e-09 0s 0s 180306030e-09 1s 1s 180308790e-09 0s 0s 180314070e-09 0s 0s 180316270e-09 1s 1s 180319030e-09 0s 0s 180324350e-09 0s 0s 180326510e-09 1s 1s 180329270e-09 0s 0s 180334630e-09 0s 0s 180336750e-09 1s 1s 180339510e-09 0s 0s 180344910e-09 0s 0s 180346990e-09 1s 1s 180349750e-09 0s 0s 180355190e-09 0s 0s 180357230e-09 1s 1s 180359990e-09 0s 0s 180365470e-09 0s 0s 180367470e-09 1s 1s 180370230e-09 0s 0s 180375750e-09 0s 0s 180377710e-09 1s 1s 180380470e-09 0s 0s 180386030e-09 0s 0s 180387950e-09 1s 1s 180390710e-09 0s 0s 180396310e-09 0s 0s 180398190e-09 1s 1s 180400950e-09 0s 0s 180406590e-09 0s 0s 180408430e-09 1s 1s 180411190e-09 0s 0s 180416870e-09 0s 0s 180418670e-09 1s 1s 180421430e-09 0s 0s 180427150e-09 0s 0s 180428910e-09 1s 1s 180431670e-09 0s 0s 180437430e-09 0s 0s 180439150e-09 1s 1s 180441910e-09 0s 0s 180447710e-09 0s 0s 180449390e-09 1s 1s 180452150e-09 0s 0s 180457990e-09 0s 0s 180459630e-09 1s 1s 180462390e-09 0s 0s 180468270e-09 0s 0s 180469870e-09 1s 1s 180472630e-09 0s 0s 180478550e-09 0s 0s 180480110e-09 1s 1s 180482870e-09 0s 0s 180488830e-09 0s 0s 180490350e-09 1s 1s 180493110e-09 0s 0s 180499110e-09 0s 0s 180500590e-09 1s 1s 180503350e-09 0s 0s 180509390e-09 0s 0s 180510830e-09 1s 1s 180513590e-09 0s 0s 180519670e-09 0s 0s 180521070e-09 1s 1s 180523830e-09 0s 0s 180529950e-09 0s 0s 180531310e-09 1s 1s 180534070e-09 0s 0s 180540230e-09 0s 0s 180541550e-09 1s 1s 180544310e-09 0s 0s 180550510e-09 0s 0s 180551790e-09 1s 1s 180554550e-09 0s 0s 180560790e-09 0s 0s 180562030e-09 1s 1s 180564790e-09 0s 0s 180571070e-09 0s 0s 180572270e-09 1s 1s 180575030e-09 0s 0s 180581350e-09 0s 0s 180582510e-09 1s 1s 180585270e-09 0s 0s 180591630e-09 0s 0s 180592750e-09 1s 1s 180595510e-09 0s 0s 180601910e-09 0s 0s 180602990e-09 1s 1s 180605750e-09 0s 0s 180612190e-09 0s 0s 180613230e-09 1s 1s 180615990e-09 0s 0s 180622470e-09 0s 0s 180623470e-09 1s 1s 180626230e-09 0s 0s 180632750e-09 0s 0s 180633710e-09 1s 1s 180636470e-09 0s 0s 180643030e-09 0s 0s 180643950e-09 1s 1s 180646710e-09 0s 0s 180653310e-09 0s 0s 180654190e-09 1s 1s 180656950e-09 0s 0s 180663590e-09 0s 0s 180664430e-09 1s 1s 180667190e-09 0s 0s 180673870e-09 0s 0s 180674670e-09 1s 1s 180677430e-09 0s 0s 180684150e-09 0s 0s 180684910e-09 1s 1s 180687670e-09 0s 0s 180694430e-09 0s 0s 180695150e-09 1s 1s 180697910e-09 0s 0s 180704710e-09 0s 0s 180705390e-09 1s 1s 180708150e-09 0s 0s 180714990e-09 0s 0s 180715630e-09 1s 1s 180718390e-09 0s 0s 180725270e-09 0s 0s 180725870e-09 1s 1s 180728630e-09 0s 0s 180735550e-09 0s 0s 180736110e-09 1s 1s 180738870e-09 0s 0s 180745830e-09 0s 0s 180746350e-09 1s 1s 180749110e-09 0s 0s 180756110e-09 0s 0s 180756590e-09 1s 1s 180759350e-09 0s 0s 180766390e-09 0s 0s 180766830e-09 1s 1s 180769590e-09 0s 0s 180776670e-09 0s 0s 180777070e-09 1s 1s 180779830e-09 0s 0s 180786950e-09 0s 0s 180787310e-09 1s 1s 180790070e-09 0s 0s 180797230e-09 0s 0s 180797550e-09 1s 1s 180800310e-09 0s 0s 180807510e-09 0s 0s 180807790e-09 1s 1s 180810550e-09 0s 0s 180817790e-09 0s 0s 180818030e-09 1s 1s 180820790e-09 0s 0s 180828070e-09 0s 0s 180828270e-09 1s 1s 180831030e-09 0s 0s 180838350e-09 0s 0s 180838510e-09 1s 1s 180841270e-09 0s 0s 180848630e-09 0s 0s 180848750e-09 1s 1s 180851510e-09 0s 0s 180858910e-09 0s 0s 180858990e-09 1s 1s 180861750e-09 0s 0s 180869190e-09 0s 0s 180869230e-09 1s 1s 180871990e-09 0s 0s 180879470e-09 1s 1s 180879510e-09 1s 1s 180882270e-09 0s 0s 180889710e-09 1s 1s 180889790e-09 1s 1s 180892510e-09 0s 0s 180899950e-09 1s 1s 180900070e-09 1s 1s 180902750e-09 0s 0s 180910190e-09 1s 1s 180910350e-09 1s 1s 180912990e-09 0s 0s 180920430e-09 1s 1s 180920630e-09 1s 1s 180923230e-09 0s 0s 180930670e-09 1s 1s 180930910e-09 1s 1s 180933470e-09 0s 0s 180940910e-09 1s 1s 180941190e-09 1s 1s 180943710e-09 0s 0s 180951150e-09 1s 1s 180951470e-09 1s 1s 180953950e-09 0s 0s 180961390e-09 1s 1s 180961750e-09 1s 1s 180964190e-09 0s 0s 180971630e-09 1s 1s 180972030e-09 1s 1s 180974430e-09 0s 0s 180981870e-09 1s 1s 180982310e-09 1s 1s 180984670e-09 0s 0s 180992110e-09 1s 1s 180992590e-09 1s 1s 180994910e-09 0s 0s 181002350e-09 1s 1s 181002870e-09 1s 1s 181005150e-09 0s 0s 181012590e-09 1s 1s 181013150e-09 1s 1s 181015390e-09 0s 0s 181022830e-09 1s 1s 181023430e-09 1s 1s 181025630e-09 0s 0s 181033070e-09 1s 1s 181033710e-09 1s 1s 181035870e-09 0s 0s 181043310e-09 1s 1s 181043990e-09 1s 1s 181046110e-09 0s 0s 181053550e-09 1s 1s 181054270e-09 1s 1s 181056350e-09 0s 0s 181063790e-09 1s 1s 181064550e-09 1s 1s 181066590e-09 0s 0s 181074030e-09 1s 1s 181074830e-09 1s 1s 181076830e-09 0s 0s 181084270e-09 1s 1s 181085110e-09 1s 1s 181087070e-09 0s 0s 181094510e-09 1s 1s 181095390e-09 1s 1s 181097310e-09 0s 0s 181104750e-09 1s 1s 181105670e-09 1s 1s 181107550e-09 0s 0s 181114990e-09 1s 1s 181115950e-09 1s 1s 181117790e-09 0s 0s 181125230e-09 1s 1s 181126230e-09 1s 1s 181128030e-09 0s 0s 181135470e-09 1s 1s 181136510e-09 1s 1s 181138270e-09 0s 0s 181145710e-09 1s 1s 181146790e-09 1s 1s 181148510e-09 0s 0s 181155950e-09 1s 1s 181157070e-09 1s 1s 181158750e-09 0s 0s 181166190e-09 1s 1s 181167350e-09 1s 1s 181168990e-09 0s 0s 181176430e-09 1s 1s 181177630e-09 1s 1s 181179230e-09 0s 0s 181186670e-09 1s 1s 181187910e-09 1s 1s 181189470e-09 0s 0s 181196910e-09 1s 1s 181198190e-09 1s 1s 181199710e-09 0s 0s 181207150e-09 1s 1s 181208470e-09 1s 1s 181209950e-09 0s 0s 181217390e-09 1s 1s 181218750e-09 1s 1s 181220190e-09 0s 0s 181227630e-09 1s 1s 181229030e-09 1s 1s 181230430e-09 0s 0s 181237870e-09 1s 1s 181239310e-09 1s 1s 181240670e-09 0s 0s 181248110e-09 1s 1s 181249590e-09 1s 1s 181250910e-09 0s 0s 181258350e-09 1s 1s 181259870e-09 1s 1s 181261150e-09 0s 0s 181268590e-09 1s 1s 181270150e-09 1s 1s 181271390e-09 0s 0s 181278830e-09 1s 1s 181280430e-09 1s 1s 181281630e-09 0s 0s 181289070e-09 1s 1s 181290710e-09 1s 1s 181291870e-09 0s 0s 181299310e-09 1s 1s 181300990e-09 1s 1s 181302110e-09 0s 0s 181309550e-09 1s 1s 181311270e-09 1s 1s 181312350e-09 0s 0s 181319790e-09 1s 1s 181321550e-09 1s 1s 181322590e-09 0s 0s 181330030e-09 1s 1s 181331830e-09 1s 1s 181332830e-09 0s 0s 181340270e-09 1s 1s 181342110e-09 1s 1s 181343070e-09 0s 0s 181350510e-09 1s 1s 181352390e-09 1s 1s 181353310e-09 0s 0s 181360750e-09 1s 1s 181362670e-09 1s 1s 181363550e-09 0s 0s 181370990e-09 1s 1s 181372950e-09 1s 1s 181373790e-09 0s 0s 181381230e-09 1s 1s 181383230e-09 1s 1s 181384030e-09 0s 0s 181391470e-09 1s 1s 181393510e-09 1s 1s 181394270e-09 0s 0s 181401710e-09 1s 1s 181403790e-09 1s 1s 181404510e-09 0s 0s 181411950e-09 1s 1s 181414070e-09 1s 1s 181414750e-09 0s 0s 181422190e-09 1s 1s 181424350e-09 1s 1s 181424990e-09 0s 0s 181432430e-09 1s 1s 181434630e-09 1s 1s 181435230e-09 0s 0s 181442670e-09 1s 1s 181444910e-09 1s 1s 181445470e-09 0s 0s 181452910e-09 1s 1s 181455190e-09 1s 1s 181455710e-09 0s 0s 181463150e-09 1s 1s 181465470e-09 1s 1s 181465950e-09 0s 0s 181473390e-09 1s 1s 181475750e-09 1s 1s 181476190e-09 0s 0s 181483630e-09 1s 1s 181486030e-09 1s 1s 181486430e-09 0s 0s 181493870e-09 1s 1s 181496310e-09 1s 1s 181496670e-09 0s 0s 181504110e-09 1s 1s 181506590e-09 1s 1s 181506910e-09 0s 0s 181514350e-09 1s 1s 181516870e-09 1s 1s 181517150e-09 0s 0s 181524590e-09 1s 1s 181527150e-09 1s 1s 181527390e-09 0s 0s 181534830e-09 1s 1s 181537430e-09 1s 1s 181537630e-09 0s 0s 181545070e-09 1s 1s 181547710e-09 1s 1s 181547870e-09 0s 0s 181555310e-09 1s 1s 181557990e-09 1s 1s 181558110e-09 0s 0s 181565550e-09 1s 1s 181568270e-09 1s 1s 181568350e-09 0s 0s 181575790e-09 1s 1s 181578550e-09 1s 1s 181578590e-09 0s 0s 181586030e-09 1s 1s 181588830e-09 0s 0s 181596270e-09 1s 1s 181599070e-09 0s 0s 181599110e-09 0s 0s 181606510e-09 1s 1s 181609310e-09 0s 0s 181609390e-09 0s 0s 181616750e-09 1s 1s 181619550e-09 0s 0s 181619670e-09 0s 0s 181626990e-09 1s 1s 181629790e-09 0s 0s 181629950e-09 0s 0s 181637230e-09 1s 1s 181640030e-09 0s 0s 181640230e-09 0s 0s 181647470e-09 1s 1s 181650270e-09 0s 0s 181650510e-09 0s 0s 181657710e-09 1s 1s 181660510e-09 0s 0s 181660790e-09 0s 0s 181667950e-09 1s 1s 181670750e-09 0s 0s 181671070e-09 0s 0s 181678190e-09 1s 1s 181680990e-09 0s 0s 181681350e-09 0s 0s 181688430e-09 1s 1s 181691230e-09 0s 0s 181691630e-09 0s 0s 181698670e-09 1s 1s 181701470e-09 0s 0s 181701910e-09 0s 0s 181708910e-09 1s 1s 181711710e-09 0s 0s 181712190e-09 0s 0s 181719150e-09 1s 1s 181721950e-09 0s 0s 181722470e-09 0s 0s 181729390e-09 1s 1s 181732190e-09 0s 0s 181732750e-09 0s 0s 181739630e-09 1s 1s 181742430e-09 0s 0s 181743030e-09 0s 0s 181749870e-09 1s 1s 181752670e-09 0s 0s 181753310e-09 0s 0s 181760110e-09 1s 1s 181762910e-09 0s 0s 181763590e-09 0s 0s 181770350e-09 1s 1s 181773150e-09 0s 0s 181773870e-09 0s 0s 181780590e-09 1s 1s 181783390e-09 0s 0s 181784150e-09 0s 0s 181790830e-09 1s 1s 181793630e-09 0s 0s 181794430e-09 0s 0s 181801070e-09 1s 1s 181803870e-09 0s 0s 181804710e-09 0s 0s 181811310e-09 1s 1s 181814110e-09 0s 0s 181814990e-09 0s 0s 181821550e-09 1s 1s 181824350e-09 0s 0s 181825270e-09 0s 0s 181831790e-09 1s 1s 181834590e-09 0s 0s 181835550e-09 0s 0s 181842030e-09 1s 1s 181844830e-09 0s 0s 181845830e-09 0s 0s 181852270e-09 1s 1s 181855070e-09 0s 0s 181856110e-09 0s 0s 181862510e-09 1s 1s 181865310e-09 0s 0s 181866390e-09 0s 0s 181872750e-09 1s 1s 181875550e-09 0s 0s 181876670e-09 0s 0s 181882990e-09 1s 1s 181885790e-09 0s 0s 181886950e-09 0s 0s 181893230e-09 1s 1s 181896030e-09 0s 0s 181897230e-09 0s 0s 181903470e-09 1s 1s 181906270e-09 0s 0s 181907510e-09 0s 0s 181913710e-09 1s 1s 181916510e-09 0s 0s 181917790e-09 0s 0s 181923950e-09 1s 1s 181926750e-09 0s 0s 181928070e-09 0s 0s 181934190e-09 1s 1s 181936990e-09 0s 0s 181938350e-09 0s 0s 181944430e-09 1s 1s 181947230e-09 0s 0s 181948630e-09 0s 0s 181954670e-09 1s 1s 181957470e-09 0s 0s 181958910e-09 0s 0s 181964910e-09 1s 1s 181967710e-09 0s 0s 181969190e-09 0s 0s 181975150e-09 1s 1s 181977950e-09 0s 0s 181979470e-09 0s 0s 181985390e-09 1s 1s 181988190e-09 0s 0s 181989750e-09 0s 0s 181995630e-09 1s 1s 181998430e-09 0s 0s 182000030e-09 0s 0s 182005870e-09 1s 1s 182008670e-09 0s 0s 182010310e-09 0s 0s 182016110e-09 1s 1s 182018910e-09 0s 0s 182020590e-09 0s 0s 182026350e-09 1s 1s 182029150e-09 0s 0s 182030870e-09 0s 0s 182036590e-09 1s 1s 182039390e-09 0s 0s 182041150e-09 0s 0s 182046830e-09 1s 1s 182049630e-09 0s 0s 182051430e-09 0s 0s 182057070e-09 1s 1s 182059870e-09 0s 0s 182061710e-09 0s 0s 182067310e-09 1s 1s 182070110e-09 0s 0s 182071990e-09 0s 0s 182077550e-09 1s 1s 182080350e-09 0s 0s 182082270e-09 0s 0s 182087790e-09 1s 1s 182090590e-09 0s 0s 182092550e-09 0s 0s 182098030e-09 1s 1s 182100830e-09 0s 0s 182102830e-09 0s 0s 182108270e-09 1s 1s 182111070e-09 0s 0s 182113110e-09 0s 0s 182118510e-09 1s 1s 182121310e-09 0s 0s 182123390e-09 0s 0s 182128750e-09 1s 1s 182131550e-09 0s 0s 182133670e-09 0s 0s 182138990e-09 1s 1s 182141790e-09 0s 0s 182143950e-09 0s 0s 182149230e-09 1s 1s 182152030e-09 0s 0s 182154230e-09 0s 0s 182159470e-09 1s 1s 182162270e-09 0s 0s 182164510e-09 0s 0s 182169710e-09 1s 1s 182172510e-09 0s 0s 182174790e-09 0s 0s 182179950e-09 1s 1s 182182750e-09 0s 0s 182185070e-09 0s 0s 182190190e-09 1s 1s 182192990e-09 0s 0s 182195350e-09 0s 0s 182200430e-09 1s 1s 182203230e-09 0s 0s 182205630e-09 0s 0s 182210670e-09 1s 1s 182213470e-09 0s 0s 182215910e-09 0s 0s 182220910e-09 1s 1s 182223710e-09 0s 0s 182226190e-09 0s 0s 182231150e-09 1s 1s 182233950e-09 0s 0s 182236470e-09 0s 0s 182241390e-09 1s 1s 182244190e-09 0s 0s 182246750e-09 0s 0s 182251630e-09 1s 1s 182254430e-09 0s 0s 182257030e-09 0s 0s 182261870e-09 1s 1s 182264670e-09 0s 0s 182267310e-09 0s 0s 182272110e-09 1s 1s 182274910e-09 0s 0s 182277590e-09 0s 0s 182282350e-09 1s 1s 182285150e-09 0s 0s 182287870e-09 0s 0s 182292590e-09 1s 1s 182295390e-09 0s 0s 182298150e-09 0s 0s 182302830e-09 1s 1s 182305630e-09 0s 0s 182308430e-09 0s 0s 182313070e-09 1s 1s 182315870e-09 0s 0s 182318710e-09 0s 0s 182323310e-09 1s 1s 182326110e-09 0s 0s 182328990e-09 0s 0s 182333550e-09 1s 1s 182336350e-09 0s 0s 182339270e-09 0s 0s 182343790e-09 1s 1s 182346590e-09 0s 0s 182349550e-09 0s 0s 182354030e-09 1s 1s 182356830e-09 0s 0s 182359830e-09 0s 0s 182364270e-09 1s 1s 182367070e-09 0s 0s 182370110e-09 0s 0s 182374510e-09 1s 1s 182377310e-09 0s 0s 182380390e-09 0s 0s 182384750e-09 1s 1s 182387550e-09 0s 0s 182390670e-09 0s 0s 182394990e-09 1s 1s 182397790e-09 0s 0s 182400950e-09 0s 0s 182405230e-09 1s 1s 182408030e-09 0s 0s 182411230e-09 0s 0s 182415470e-09 1s 1s 182418270e-09 0s 0s 182421510e-09 0s 0s 182425710e-09 1s 1s 182428510e-09 0s 0s 182431790e-09 0s 0s 182435950e-09 1s 1s 182438750e-09 0s 0s 182442070e-09 0s 0s 182446190e-09 1s 1s 182448990e-09 0s 0s 182452350e-09 0s 0s 182456430e-09 1s 1s 182459230e-09 0s 0s 182462630e-09 0s 0s 182466670e-09 1s 1s 182469470e-09 0s 0s 182472910e-09 0s 0s 182476910e-09 1s 1s 182479710e-09 0s 0s 182483190e-09 0s 0s 182487150e-09 1s 1s 182489950e-09 0s 0s 182493470e-09 0s 0s 182497390e-09 1s 1s 182500190e-09 0s 0s 182503750e-09 0s 0s 182507630e-09 1s 1s 182510430e-09 0s 0s 182514030e-09 0s 0s 182517870e-09 1s 1s 182520670e-09 0s 0s 182524310e-09 0s 0s 182528110e-09 1s 1s 182530910e-09 0s 0s 182534590e-09 0s 0s 182538350e-09 1s 1s 182541150e-09 0s 0s 182544870e-09 0s 0s 182548590e-09 1s 1s 182551390e-09 0s 0s 182555150e-09 0s 0s 182558830e-09 1s 1s 182561630e-09 0s 0s 182565430e-09 0s 0s 182569070e-09 1s 1s 182571870e-09 0s 0s 182575710e-09 0s 0s 182579310e-09 1s 1s 182582110e-09 0s 0s 182585990e-09 0s 0s 182589550e-09 1s 1s 182592350e-09 0s 0s 182596270e-09 0s 0s 182599790e-09 1s 1s 182602590e-09 0s 0s 182606550e-09 0s 0s 182610030e-09 1s 1s 182612830e-09 0s 0s 182616830e-09 0s 0s 182620270e-09 1s 1s 182623070e-09 0s 0s 182627110e-09 0s 0s 182630510e-09 1s 1s 182633310e-09 0s 0s 182637390e-09 0s 0s 182640750e-09 1s 1s 182643550e-09 0s 0s 182647670e-09 0s 0s 182650990e-09 1s 1s 182653790e-09 0s 0s 182657950e-09 0s 0s 182661230e-09 1s 1s 182664030e-09 0s 0s 182668230e-09 0s 0s 182671470e-09 1s 1s 182674270e-09 0s 0s 182678510e-09 0s 0s 182681710e-09 1s 1s 182684510e-09 0s 0s 182688790e-09 0s 0s 182691950e-09 1s 1s 182694750e-09 0s 0s 182699070e-09 0s 0s 182702190e-09 1s 1s 182704990e-09 0s 0s 182709350e-09 0s 0s 182712430e-09 1s 1s 182715230e-09 0s 0s 182719630e-09 0s 0s 182722670e-09 1s 1s 182725470e-09 0s 0s 182729910e-09 0s 0s 182732910e-09 1s 1s 182735710e-09 0s 0s 182740190e-09 0s 0s 182743150e-09 1s 1s 182745950e-09 0s 0s 182750470e-09 0s 0s 182753390e-09 1s 1s 182756190e-09 0s 0s 182760750e-09 0s 0s 182763630e-09 1s 1s 182766430e-09 0s 0s 182771030e-09 0s 0s 182773870e-09 1s 1s 182776670e-09 0s 0s 182781310e-09 0s 0s 182784110e-09 1s 1s 182786910e-09 0s 0s 182791590e-09 0s 0s 182794350e-09 1s 1s 182797150e-09 0s 0s 182801870e-09 0s 0s 182804590e-09 1s 1s 182807390e-09 0s 0s 182812150e-09 0s 0s 182814830e-09 1s 1s 182817630e-09 0s 0s 182822430e-09 0s 0s 182825070e-09 1s 1s 182827870e-09 0s 0s 182832710e-09 0s 0s 182835310e-09 1s 1s 182838110e-09 0s 0s 182842990e-09 0s 0s 182845550e-09 1s 1s 182848350e-09 0s 0s 182853270e-09 0s 0s 182855790e-09 1s 1s 182858590e-09 0s 0s 182863550e-09 0s 0s 182866030e-09 1s 1s 182868830e-09 0s 0s 182873830e-09 0s 0s 182876270e-09 1s 1s 182879070e-09 0s 0s 182884110e-09 0s 0s 182886510e-09 1s 1s 182889310e-09 0s 0s 182894390e-09 0s 0s 182896750e-09 1s 1s 182899550e-09 0s 0s 182904670e-09 0s 0s 182906990e-09 1s 1s 182909790e-09 0s 0s 182914950e-09 0s 0s 182917230e-09 1s 1s 182920030e-09 0s 0s 182925230e-09 0s 0s 182927470e-09 1s 1s 182930270e-09 0s 0s 182935510e-09 0s 0s 182937710e-09 1s 1s 182940510e-09 0s 0s 182945790e-09 0s 0s 182947950e-09 1s 1s 182950750e-09 0s 0s 182956070e-09 0s 0s 182958190e-09 1s 1s 182960990e-09 0s 0s 182966350e-09 0s 0s 182968430e-09 1s 1s 182971230e-09 0s 0s 182976630e-09 0s 0s 182978670e-09 1s 1s 182981470e-09 0s 0s 182986910e-09 0s 0s 182988910e-09 1s 1s 182991710e-09 0s 0s 182997190e-09 0s 0s 182999150e-09 1s 1s 183001950e-09 0s 0s 183007470e-09 0s 0s 183009390e-09 1s 1s 183012190e-09 0s 0s 183017750e-09 0s 0s 183019630e-09 1s 1s 183022430e-09 0s 0s 183028030e-09 0s 0s 183029870e-09 1s 1s 183032670e-09 0s 0s 183038310e-09 0s 0s 183040110e-09 1s 1s 183042910e-09 0s 0s 183048590e-09 0s 0s 183050350e-09 1s 1s 183053150e-09 0s 0s 183058870e-09 0s 0s 183060590e-09 1s 1s 183063390e-09 0s 0s 183069150e-09 0s 0s 183070830e-09 1s 1s 183073630e-09 0s 0s 183079430e-09 0s 0s 183081070e-09 1s 1s 183083870e-09 0s 0s 183089710e-09 0s 0s 183091310e-09 1s 1s 183094110e-09 0s 0s 183099990e-09 0s 0s 183101550e-09 1s 1s 183104350e-09 0s 0s 183110270e-09 0s 0s 183111790e-09 1s 1s 183114590e-09 0s 0s 183120550e-09 0s 0s 183122030e-09 1s 1s 183124830e-09 0s 0s 183130830e-09 0s 0s 183132270e-09 1s 1s 183135070e-09 0s 0s 183141110e-09 0s 0s 183142510e-09 1s 1s 183145310e-09 0s 0s 183151390e-09 0s 0s 183152750e-09 1s 1s 183155550e-09 0s 0s 183161670e-09 0s 0s 183162990e-09 1s 1s 183165790e-09 0s 0s 183171950e-09 0s 0s 183173230e-09 1s 1s 183176030e-09 0s 0s 183182230e-09 0s 0s 183183470e-09 1s 1s 183186270e-09 0s 0s 183192510e-09 0s 0s 183193710e-09 1s 1s 183196510e-09 0s 0s 183202790e-09 0s 0s 183203950e-09 1s 1s 183206750e-09 0s 0s 183213070e-09 0s 0s 183214190e-09 1s 1s 183216990e-09 0s 0s 183223350e-09 0s 0s 183224430e-09 1s 1s 183227230e-09 0s 0s 183233630e-09 0s 0s 183234670e-09 1s 1s 183237470e-09 0s 0s 183243910e-09 0s 0s 183244910e-09 1s 1s 183247710e-09 0s 0s 183254190e-09 0s 0s 183255150e-09 1s 1s 183257950e-09 0s 0s 183264470e-09 0s 0s 183265390e-09 1s 1s 183268190e-09 0s 0s 183274750e-09 0s 0s 183275630e-09 1s 1s 183278430e-09 0s 0s 183285030e-09 0s 0s 183285870e-09 1s 1s 183288670e-09 0s 0s 183295310e-09 0s 0s 183296110e-09 1s 1s 183298910e-09 0s 0s 183305590e-09 0s 0s 183306350e-09 1s 1s 183309150e-09 0s 0s 183315870e-09 0s 0s 183316590e-09 1s 1s 183319390e-09 0s 0s 183326150e-09 0s 0s 183326830e-09 1s 1s 183329630e-09 0s 0s 183336430e-09 0s 0s 183337070e-09 1s 1s 183339870e-09 0s 0s 183346710e-09 0s 0s 183347310e-09 1s 1s 183350110e-09 0s 0s 183356990e-09 0s 0s 183357550e-09 1s 1s 183360350e-09 0s 0s 183367270e-09 0s 0s 183367790e-09 1s 1s 183370590e-09 0s 0s 183377550e-09 0s 0s 183378030e-09 1s 1s 183380830e-09 0s 0s 183387830e-09 0s 0s 183388270e-09 1s 1s 183391070e-09 0s 0s 183398110e-09 0s 0s 183398510e-09 1s 1s 183401310e-09 0s 0s 183408390e-09 0s 0s 183408750e-09 1s 1s 183411550e-09 0s 0s 183418670e-09 0s 0s 183418990e-09 1s 1s 183421790e-09 0s 0s 183428950e-09 0s 0s 183429230e-09 1s 1s 183432030e-09 0s 0s 183439230e-09 0s 0s 183439470e-09 1s 1s 183442270e-09 0s 0s 183449510e-09 0s 0s 183449710e-09 1s 1s 183452510e-09 0s 0s 183459790e-09 0s 0s 183459950e-09 1s 1s 183462750e-09 0s 0s 183470070e-09 0s 0s 183470190e-09 1s 1s 183472990e-09 0s 0s 183480350e-09 0s 0s 183480430e-09 1s 1s 183483230e-09 0s 0s 183490630e-09 0s 0s 183490670e-09 1s 1s 183493470e-09 0s 0s 183500910e-09 1s 1s 183500950e-09 1s 1s 183503750e-09 0s 0s 183511150e-09 1s 1s 183511230e-09 1s 1s 183513990e-09 0s 0s 183521390e-09 1s 1s 183521510e-09 1s 1s 183524230e-09 0s 0s 183531630e-09 1s 1s 183531790e-09 1s 1s 183534470e-09 0s 0s 183541870e-09 1s 1s 183542070e-09 1s 1s 183544710e-09 0s 0s 183552110e-09 1s 1s 183552350e-09 1s 1s 183554950e-09 0s 0s 183562350e-09 1s 1s 183562630e-09 1s 1s 183565190e-09 0s 0s 183572590e-09 1s 1s 183572910e-09 1s 1s 183575430e-09 0s 0s 183582830e-09 1s 1s 183583190e-09 1s 1s 183585670e-09 0s 0s 183593070e-09 1s 1s 183593470e-09 1s 1s 183595910e-09 0s 0s 183603310e-09 1s 1s 183603750e-09 1s 1s 183606150e-09 0s 0s 183613550e-09 1s 1s 183614030e-09 1s 1s 183616390e-09 0s 0s 183623790e-09 1s 1s 183624310e-09 1s 1s 183626630e-09 0s 0s 183634030e-09 1s 1s 183634590e-09 1s 1s 183636870e-09 0s 0s 183644270e-09 1s 1s 183644870e-09 1s 1s 183647110e-09 0s 0s 183654510e-09 1s 1s 183655150e-09 1s 1s 183657350e-09 0s 0s 183664750e-09 1s 1s 183665430e-09 1s 1s 183667590e-09 0s 0s 183674990e-09 1s 1s 183675710e-09 1s 1s 183677830e-09 0s 0s 183685230e-09 1s 1s 183685990e-09 1s 1s 183688070e-09 0s 0s 183695470e-09 1s 1s 183696270e-09 1s 1s 183698310e-09 0s 0s 183705710e-09 1s 1s 183706550e-09 1s 1s 183708550e-09 0s 0s 183715950e-09 1s 1s 183716830e-09 1s 1s 183718790e-09 0s 0s 183726190e-09 1s 1s 183727110e-09 1s 1s 183729030e-09 0s 0s 183736430e-09 1s 1s 183737390e-09 1s 1s 183739270e-09 0s 0s 183746670e-09 1s 1s 183747670e-09 1s 1s 183749510e-09 0s 0s 183756910e-09 1s 1s 183757950e-09 1s 1s 183759750e-09 0s 0s 183767150e-09 1s 1s 183768230e-09 1s 1s 183769990e-09 0s 0s 183777390e-09 1s 1s 183778510e-09 1s 1s 183780230e-09 0s 0s 183787630e-09 1s 1s 183788790e-09 1s 1s 183790470e-09 0s 0s 183797870e-09 1s 1s 183799070e-09 1s 1s 183800710e-09 0s 0s 183808110e-09 1s 1s 183809350e-09 1s 1s 183810950e-09 0s 0s 183818350e-09 1s 1s 183819630e-09 1s 1s 183821190e-09 0s 0s 183828590e-09 1s 1s 183829910e-09 1s 1s 183831430e-09 0s 0s 183838830e-09 1s 1s 183840190e-09 1s 1s 183841670e-09 0s 0s 183849070e-09 1s 1s 183850470e-09 1s 1s 183851910e-09 0s 0s 183859310e-09 1s 1s 183860750e-09 1s 1s 183862150e-09 0s 0s 183869550e-09 1s 1s 183871030e-09 1s 1s 183872390e-09 0s 0s 183879790e-09 1s 1s 183881310e-09 1s 1s 183882630e-09 0s 0s 183890030e-09 1s 1s 183891590e-09 1s 1s 183892870e-09 0s 0s 183900270e-09 1s 1s 183901870e-09 1s 1s 183903110e-09 0s 0s 183910510e-09 1s 1s 183912150e-09 1s 1s 183913350e-09 0s 0s 183920750e-09 1s 1s 183922430e-09 1s 1s 183923590e-09 0s 0s 183930990e-09 1s 1s 183932710e-09 1s 1s 183933830e-09 0s 0s 183941230e-09 1s 1s 183942990e-09 1s 1s 183944070e-09 0s 0s 183951470e-09 1s 1s 183953270e-09 1s 1s 183954310e-09 0s 0s 183961710e-09 1s 1s 183963550e-09 1s 1s 183964550e-09 0s 0s 183971950e-09 1s 1s 183973830e-09 1s 1s 183974790e-09 0s 0s 183982190e-09 1s 1s 183984110e-09 1s 1s 183985030e-09 0s 0s 183992430e-09 1s 1s 183994390e-09 1s 1s 183995270e-09 0s 0s 184002670e-09 1s 1s 184004670e-09 1s 1s 184005510e-09 0s 0s 184012910e-09 1s 1s 184014950e-09 1s 1s 184015750e-09 0s 0s 184023150e-09 1s 1s 184025230e-09 1s 1s 184025990e-09 0s 0s 184033390e-09 1s 1s 184035510e-09 1s 1s 184036230e-09 0s 0s 184043630e-09 1s 1s 184045790e-09 1s 1s 184046470e-09 0s 0s 184053870e-09 1s 1s 184056070e-09 1s 1s 184056710e-09 0s 0s 184064110e-09 1s 1s 184066350e-09 1s 1s 184066950e-09 0s 0s 184074350e-09 1s 1s 184076630e-09 1s 1s 184077190e-09 0s 0s 184084590e-09 1s 1s 184086910e-09 1s 1s 184087430e-09 0s 0s 184094830e-09 1s 1s 184097190e-09 1s 1s 184097670e-09 0s 0s 184105070e-09 1s 1s 184107470e-09 1s 1s 184107910e-09 0s 0s 184115310e-09 1s 1s 184117750e-09 1s 1s 184118150e-09 0s 0s 184125550e-09 1s 1s 184128030e-09 1s 1s 184128390e-09 0s 0s 184135790e-09 1s 1s 184138310e-09 1s 1s 184138630e-09 0s 0s 184146030e-09 1s 1s 184148590e-09 1s 1s 184148870e-09 0s 0s 184156270e-09 1s 1s 184158870e-09 1s 1s 184159110e-09 0s 0s 184166510e-09 1s 1s 184169150e-09 1s 1s 184169350e-09 0s 0s 184176750e-09 1s 1s 184179430e-09 1s 1s 184179590e-09 0s 0s 184186990e-09 1s 1s 184189710e-09 1s 1s 184189830e-09 0s 0s 184197230e-09 1s 1s 184199990e-09 1s 1s 184200070e-09 0s 0s 184207470e-09 1s 1s 184210270e-09 1s 1s 184210310e-09 0s 0s 184217710e-09 1s 1s 184220550e-09 0s 0s 184227950e-09 1s 1s 184230790e-09 0s 0s 184230830e-09 0s 0s 184238190e-09 1s 1s 184241030e-09 0s 0s 184241110e-09 0s 0s 184248430e-09 1s 1s 184251270e-09 0s 0s 184251390e-09 0s 0s 184258670e-09 1s 1s 184261510e-09 0s 0s 184261670e-09 0s 0s 184268910e-09 1s 1s 184271750e-09 0s 0s 184271950e-09 0s 0s 184279150e-09 1s 1s 184281990e-09 0s 0s 184282230e-09 0s 0s 184289390e-09 1s 1s 184292230e-09 0s 0s 184292510e-09 0s 0s 184299630e-09 1s 1s 184302470e-09 0s 0s 184302790e-09 0s 0s 184309870e-09 1s 1s 184312710e-09 0s 0s 184313070e-09 0s 0s 184320110e-09 1s 1s 184322950e-09 0s 0s 184323350e-09 0s 0s 184330350e-09 1s 1s 184333190e-09 0s 0s 184333630e-09 0s 0s 184340590e-09 1s 1s 184343430e-09 0s 0s 184343910e-09 0s 0s 184350830e-09 1s 1s 184353670e-09 0s 0s 184354190e-09 0s 0s 184361070e-09 1s 1s 184363910e-09 0s 0s 184364470e-09 0s 0s 184371310e-09 1s 1s 184374150e-09 0s 0s 184374750e-09 0s 0s 184381550e-09 1s 1s 184384390e-09 0s 0s 184385030e-09 0s 0s 184391790e-09 1s 1s 184394630e-09 0s 0s 184395310e-09 0s 0s 184402030e-09 1s 1s 184404870e-09 0s 0s 184405590e-09 0s 0s 184412270e-09 1s 1s 184415110e-09 0s 0s 184415870e-09 0s 0s 184422510e-09 1s 1s 184425350e-09 0s 0s 184426150e-09 0s 0s 184432750e-09 1s 1s 184435590e-09 0s 0s 184436430e-09 0s 0s 184442990e-09 1s 1s 184445830e-09 0s 0s 184446710e-09 0s 0s 184453230e-09 1s 1s 184456070e-09 0s 0s 184456990e-09 0s 0s 184463470e-09 1s 1s 184466310e-09 0s 0s 184467270e-09 0s 0s 184473710e-09 1s 1s 184476550e-09 0s 0s 184477550e-09 0s 0s 184483950e-09 1s 1s 184486790e-09 0s 0s 184487830e-09 0s 0s 184494190e-09 1s 1s 184497030e-09 0s 0s 184498110e-09 0s 0s 184504430e-09 1s 1s 184507270e-09 0s 0s 184508390e-09 0s 0s 184514670e-09 1s 1s 184517510e-09 0s 0s 184518670e-09 0s 0s 184524910e-09 1s 1s 184527750e-09 0s 0s 184528950e-09 0s 0s 184535150e-09 1s 1s 184537990e-09 0s 0s 184539230e-09 0s 0s 184545390e-09 1s 1s 184548230e-09 0s 0s 184549510e-09 0s 0s 184555630e-09 1s 1s 184558470e-09 0s 0s 184559790e-09 0s 0s 184565870e-09 1s 1s 184568710e-09 0s 0s 184570070e-09 0s 0s 184576110e-09 1s 1s 184578950e-09 0s 0s 184580350e-09 0s 0s 184586350e-09 1s 1s 184589190e-09 0s 0s 184590630e-09 0s 0s 184596590e-09 1s 1s 184599430e-09 0s 0s 184600910e-09 0s 0s 184606830e-09 1s 1s 184609670e-09 0s 0s 184611190e-09 0s 0s 184617070e-09 1s 1s 184619910e-09 0s 0s 184621470e-09 0s 0s 184627310e-09 1s 1s 184630150e-09 0s 0s 184631750e-09 0s 0s 184637550e-09 1s 1s 184640390e-09 0s 0s 184642030e-09 0s 0s 184647790e-09 1s 1s 184650630e-09 0s 0s 184652310e-09 0s 0s 184658030e-09 1s 1s 184660870e-09 0s 0s 184662590e-09 0s 0s 184668270e-09 1s 1s 184671110e-09 0s 0s 184672870e-09 0s 0s 184678510e-09 1s 1s 184681350e-09 0s 0s 184683150e-09 0s 0s 184688750e-09 1s 1s 184691590e-09 0s 0s 184693430e-09 0s 0s 184698990e-09 1s 1s 184701830e-09 0s 0s 184703710e-09 0s 0s 184709230e-09 1s 1s 184712070e-09 0s 0s 184713990e-09 0s 0s 184719470e-09 1s 1s 184722310e-09 0s 0s 184724270e-09 0s 0s 184729710e-09 1s 1s 184732550e-09 0s 0s 184734550e-09 0s 0s 184739950e-09 1s 1s 184742790e-09 0s 0s 184744830e-09 0s 0s 184750190e-09 1s 1s 184753030e-09 0s 0s 184755110e-09 0s 0s 184760430e-09 1s 1s 184763270e-09 0s 0s 184765390e-09 0s 0s 184770670e-09 1s 1s 184773510e-09 0s 0s 184775670e-09 0s 0s 184780910e-09 1s 1s 184783750e-09 0s 0s 184785950e-09 0s 0s 184791150e-09 1s 1s 184793990e-09 0s 0s 184796230e-09 0s 0s 184801390e-09 1s 1s 184804230e-09 0s 0s 184806510e-09 0s 0s 184811630e-09 1s 1s 184814470e-09 0s 0s 184816790e-09 0s 0s 184821870e-09 1s 1s 184824710e-09 0s 0s 184827070e-09 0s 0s 184832110e-09 1s 1s 184834950e-09 0s 0s 184837350e-09 0s 0s 184842350e-09 1s 1s 184845190e-09 0s 0s 184847630e-09 0s 0s 184852590e-09 1s 1s 184855430e-09 0s 0s 184857910e-09 0s 0s 184862830e-09 1s 1s 184865670e-09 0s 0s 184868190e-09 0s 0s 184873070e-09 1s 1s 184875910e-09 0s 0s 184878470e-09 0s 0s 184883310e-09 1s 1s 184886150e-09 0s 0s 184888750e-09 0s 0s 184893550e-09 1s 1s 184896390e-09 0s 0s 184899030e-09 0s 0s 184903790e-09 1s 1s 184906630e-09 0s 0s 184909310e-09 0s 0s 184914030e-09 1s 1s 184916870e-09 0s 0s 184919590e-09 0s 0s 184924270e-09 1s 1s 184927110e-09 0s 0s 184929870e-09 0s 0s 184934510e-09 1s 1s 184937350e-09 0s 0s 184940150e-09 0s 0s 184944750e-09 1s 1s 184947590e-09 0s 0s 184950430e-09 0s 0s 184954990e-09 1s 1s 184957830e-09 0s 0s 184960710e-09 0s 0s 184965230e-09 1s 1s 184968070e-09 0s 0s 184970990e-09 0s 0s 184975470e-09 1s 1s 184978310e-09 0s 0s 184981270e-09 0s 0s 184985710e-09 1s 1s 184988550e-09 0s 0s 184991550e-09 0s 0s 184995950e-09 1s 1s 184998790e-09 0s 0s 185001830e-09 0s 0s 185006190e-09 1s 1s 185009030e-09 0s 0s 185012110e-09 0s 0s 185016430e-09 1s 1s 185019270e-09 0s 0s 185022390e-09 0s 0s 185026670e-09 1s 1s 185029510e-09 0s 0s 185032670e-09 0s 0s 185036910e-09 1s 1s 185039750e-09 0s 0s 185042950e-09 0s 0s 185047150e-09 1s 1s 185049990e-09 0s 0s 185053230e-09 0s 0s 185057390e-09 1s 1s 185060230e-09 0s 0s 185063510e-09 0s 0s 185067630e-09 1s 1s 185070470e-09 0s 0s 185073790e-09 0s 0s 185077870e-09 1s 1s 185080710e-09 0s 0s 185084070e-09 0s 0s 185088110e-09 1s 1s 185090950e-09 0s 0s 185094350e-09 0s 0s 185098350e-09 1s 1s 185101190e-09 0s 0s 185104630e-09 0s 0s 185108590e-09 1s 1s 185111430e-09 0s 0s 185114910e-09 0s 0s 185118830e-09 1s 1s 185121670e-09 0s 0s 185125190e-09 0s 0s 185129070e-09 1s 1s 185131910e-09 0s 0s 185135470e-09 0s 0s 185139310e-09 1s 1s 185142150e-09 0s 0s 185145750e-09 0s 0s 185149550e-09 1s 1s 185152390e-09 0s 0s 185156030e-09 0s 0s 185159790e-09 1s 1s 185162630e-09 0s 0s 185166310e-09 0s 0s 185170030e-09 1s 1s 185172870e-09 0s 0s 185176590e-09 0s 0s 185180270e-09 1s 1s 185183110e-09 0s 0s 185186870e-09 0s 0s 185190510e-09 1s 1s 185193350e-09 0s 0s 185197150e-09 0s 0s 185200750e-09 1s 1s 185203590e-09 0s 0s 185207430e-09 0s 0s 185210990e-09 1s 1s 185213830e-09 0s 0s 185217710e-09 0s 0s 185221230e-09 1s 1s 185224070e-09 0s 0s 185227990e-09 0s 0s 185231470e-09 1s 1s 185234310e-09 0s 0s 185238270e-09 0s 0s 185241710e-09 1s 1s 185244550e-09 0s 0s 185248550e-09 0s 0s 185251950e-09 1s 1s 185254790e-09 0s 0s 185258830e-09 0s 0s 185262190e-09 1s 1s 185265030e-09 0s 0s 185269110e-09 0s 0s 185272430e-09 1s 1s 185275270e-09 0s 0s 185279390e-09 0s 0s 185282670e-09 1s 1s 185285510e-09 0s 0s 185289670e-09 0s 0s 185292910e-09 1s 1s 185295750e-09 0s 0s 185299950e-09 0s 0s 185303150e-09 1s 1s 185305990e-09 0s 0s 185310230e-09 0s 0s 185313390e-09 1s 1s 185316230e-09 0s 0s 185320510e-09 0s 0s 185323630e-09 1s 1s 185326470e-09 0s 0s 185330790e-09 0s 0s 185333870e-09 1s 1s 185336710e-09 0s 0s 185341070e-09 0s 0s 185344110e-09 1s 1s 185346950e-09 0s 0s 185351350e-09 0s 0s 185354350e-09 1s 1s 185357190e-09 0s 0s 185361630e-09 0s 0s 185364590e-09 1s 1s 185367430e-09 0s 0s 185371910e-09 0s 0s 185374830e-09 1s 1s 185377670e-09 0s 0s 185382190e-09 0s 0s 185385070e-09 1s 1s 185387910e-09 0s 0s 185392470e-09 0s 0s 185395310e-09 1s 1s 185398150e-09 0s 0s 185402750e-09 0s 0s 185405550e-09 1s 1s 185408390e-09 0s 0s 185413030e-09 0s 0s 185415790e-09 1s 1s 185418630e-09 0s 0s 185423310e-09 0s 0s 185426030e-09 1s 1s 185428870e-09 0s 0s 185433590e-09 0s 0s 185436270e-09 1s 1s 185439110e-09 0s 0s 185443870e-09 0s 0s 185446510e-09 1s 1s 185449350e-09 0s 0s 185454150e-09 0s 0s 185456750e-09 1s 1s 185459590e-09 0s 0s 185464430e-09 0s 0s 185466990e-09 1s 1s 185469830e-09 0s 0s 185474710e-09 0s 0s 185477230e-09 1s 1s 185480070e-09 0s 0s 185484990e-09 0s 0s 185487470e-09 1s 1s 185490310e-09 0s 0s 185495270e-09 0s 0s 185497710e-09 1s 1s 185500550e-09 0s 0s 185505550e-09 0s 0s 185507950e-09 1s 1s 185510790e-09 0s 0s 185515830e-09 0s 0s 185518190e-09 1s 1s 185521030e-09 0s 0s 185526110e-09 0s 0s 185528430e-09 1s 1s 185531270e-09 0s 0s 185536390e-09 0s 0s 185538670e-09 1s 1s 185541510e-09 0s 0s 185546670e-09 0s 0s 185548910e-09 1s 1s 185551750e-09 0s 0s 185556950e-09 0s 0s 185559150e-09 1s 1s 185561990e-09 0s 0s 185567230e-09 0s 0s 185569390e-09 1s 1s 185572230e-09 0s 0s 185577510e-09 0s 0s 185579630e-09 1s 1s 185582470e-09 0s 0s 185587790e-09 0s 0s 185589870e-09 1s 1s 185592710e-09 0s 0s 185598070e-09 0s 0s 185600110e-09 1s 1s 185602950e-09 0s 0s 185608350e-09 0s 0s 185610350e-09 1s 1s 185613190e-09 0s 0s 185618630e-09 0s 0s 185620590e-09 1s 1s 185623430e-09 0s 0s 185628910e-09 0s 0s 185630830e-09 1s 1s 185633670e-09 0s 0s 185639190e-09 0s 0s 185641070e-09 1s 1s 185643910e-09 0s 0s 185649470e-09 0s 0s 185651310e-09 1s 1s 185654150e-09 0s 0s 185659750e-09 0s 0s 185661550e-09 1s 1s 185664390e-09 0s 0s 185670030e-09 0s 0s 185671790e-09 1s 1s 185674630e-09 0s 0s 185680310e-09 0s 0s 185682030e-09 1s 1s 185684870e-09 0s 0s 185690590e-09 0s 0s 185692270e-09 1s 1s 185695110e-09 0s 0s 185700870e-09 0s 0s 185702510e-09 1s 1s 185705350e-09 0s 0s 185711150e-09 0s 0s 185712750e-09 1s 1s 185715590e-09 0s 0s 185721430e-09 0s 0s 185722990e-09 1s 1s 185725830e-09 0s 0s 185731710e-09 0s 0s 185733230e-09 1s 1s 185736070e-09 0s 0s 185741990e-09 0s 0s 185743470e-09 1s 1s 185746310e-09 0s 0s 185752270e-09 0s 0s 185753710e-09 1s 1s 185756550e-09 0s 0s 185762550e-09 0s 0s 185763950e-09 1s 1s 185766790e-09 0s 0s 185772830e-09 0s 0s 185774190e-09 1s 1s 185777030e-09 0s 0s 185783110e-09 0s 0s 185784430e-09 1s 1s 185787270e-09 0s 0s 185793390e-09 0s 0s 185794670e-09 1s 1s 185797510e-09 0s 0s 185803670e-09 0s 0s 185804910e-09 1s 1s 185807750e-09 0s 0s 185813950e-09 0s 0s 185815150e-09 1s 1s 185817990e-09 0s 0s 185824230e-09 0s 0s 185825390e-09 1s 1s 185828230e-09 0s 0s 185834510e-09 0s 0s 185835630e-09 1s 1s 185838470e-09 0s 0s 185844790e-09 0s 0s 185845870e-09 1s 1s 185848710e-09 0s 0s 185855070e-09 0s 0s 185856110e-09 1s 1s 185858950e-09 0s 0s 185865350e-09 0s 0s 185866350e-09 1s 1s 185869190e-09 0s 0s 185875630e-09 0s 0s 185876590e-09 1s 1s 185879430e-09 0s 0s 185885910e-09 0s 0s 185886830e-09 1s 1s 185889670e-09 0s 0s 185896190e-09 0s 0s 185897070e-09 1s 1s 185899910e-09 0s 0s 185906470e-09 0s 0s 185907310e-09 1s 1s 185910150e-09 0s 0s 185916750e-09 0s 0s 185917550e-09 1s 1s 185920390e-09 0s 0s 185927030e-09 0s 0s 185927790e-09 1s 1s 185930630e-09 0s 0s 185937310e-09 0s 0s 185938030e-09 1s 1s 185940870e-09 0s 0s 185947590e-09 0s 0s 185948270e-09 1s 1s 185951110e-09 0s 0s 185957870e-09 0s 0s 185958510e-09 1s 1s 185961350e-09 0s 0s 185968150e-09 0s 0s 185968750e-09 1s 1s 185971590e-09 0s 0s 185978430e-09 0s 0s 185978990e-09 1s 1s 185981830e-09 0s 0s 185988710e-09 0s 0s 185989230e-09 1s 1s 185992070e-09 0s 0s 185998990e-09 0s 0s 185999470e-09 1s 1s 186002310e-09 0s 0s 186009270e-09 0s 0s 186009710e-09 1s 1s 186012550e-09 0s 0s 186019550e-09 0s 0s 186019950e-09 1s 1s 186022790e-09 0s 0s 186029830e-09 0s 0s 186030190e-09 1s 1s 186033030e-09 0s 0s 186040110e-09 0s 0s 186040430e-09 1s 1s 186043270e-09 0s 0s 186050390e-09 0s 0s 186050670e-09 1s 1s 186053510e-09 0s 0s 186060670e-09 0s 0s 186060910e-09 1s 1s 186063750e-09 0s 0s 186070950e-09 0s 0s 186071150e-09 1s 1s 186073990e-09 0s 0s 186081230e-09 0s 0s 186081390e-09 1s 1s 186084230e-09 0s 0s 186091510e-09 0s 0s 186091630e-09 1s 1s 186094470e-09 0s 0s 186101790e-09 0s 0s 186101870e-09 1s 1s 186104710e-09 0s 0s 186112070e-09 0s 0s 186112110e-09 1s 1s 186114950e-09 0s 0s 186122350e-09 1s 1s 186122390e-09 1s 1s 186125230e-09 0s 0s 186132590e-09 1s 1s 186132670e-09 1s 1s 186135470e-09 0s 0s 186142830e-09 1s 1s 186142950e-09 1s 1s 186145710e-09 0s 0s 186153070e-09 1s 1s 186153230e-09 1s 1s 186155950e-09 0s 0s 186163310e-09 1s 1s 186163510e-09 1s 1s 186166190e-09 0s 0s 186173550e-09 1s 1s 186173790e-09 1s 1s 186176430e-09 0s 0s 186183790e-09 1s 1s 186184070e-09 1s 1s 186186670e-09 0s 0s 186194030e-09 1s 1s 186194350e-09 1s 1s 186196910e-09 0s 0s 186204270e-09 1s 1s 186204630e-09 1s 1s 186207150e-09 0s 0s 186214510e-09 1s 1s 186214910e-09 1s 1s 186217390e-09 0s 0s 186224750e-09 1s 1s 186225190e-09 1s 1s 186227630e-09 0s 0s 186234990e-09 1s 1s 186235470e-09 1s 1s 186237870e-09 0s 0s 186245230e-09 1s 1s 186245750e-09 1s 1s 186248110e-09 0s 0s 186255470e-09 1s 1s 186256030e-09 1s 1s 186258350e-09 0s 0s 186265710e-09 1s 1s 186266310e-09 1s 1s 186268590e-09 0s 0s 186275950e-09 1s 1s 186276590e-09 1s 1s 186278830e-09 0s 0s 186286190e-09 1s 1s 186286870e-09 1s 1s 186289070e-09 0s 0s 186296430e-09 1s 1s 186297150e-09 1s 1s 186299310e-09 0s 0s 186306670e-09 1s 1s 186307430e-09 1s 1s 186309550e-09 0s 0s 186316910e-09 1s 1s 186317710e-09 1s 1s 186319790e-09 0s 0s 186327150e-09 1s 1s 186327990e-09 1s 1s 186330030e-09 0s 0s 186337390e-09 1s 1s 186338270e-09 1s 1s 186340270e-09 0s 0s 186347630e-09 1s 1s 186348550e-09 1s 1s 186350510e-09 0s 0s 186357870e-09 1s 1s 186358830e-09 1s 1s 186360750e-09 0s 0s 186368110e-09 1s 1s 186369110e-09 1s 1s 186370990e-09 0s 0s 186378350e-09 1s 1s 186379390e-09 1s 1s 186381230e-09 0s 0s 186388590e-09 1s 1s 186389670e-09 1s 1s 186391470e-09 0s 0s 186398830e-09 1s 1s 186399950e-09 1s 1s 186401710e-09 0s 0s 186409070e-09 1s 1s 186410230e-09 1s 1s 186411950e-09 0s 0s 186419310e-09 1s 1s 186420510e-09 1s 1s 186422190e-09 0s 0s 186429550e-09 1s 1s 186430790e-09 1s 1s 186432430e-09 0s 0s 186439790e-09 1s 1s 186441070e-09 1s 1s 186442670e-09 0s 0s 186450030e-09 1s 1s 186451350e-09 1s 1s 186452910e-09 0s 0s 186460270e-09 1s 1s 186461630e-09 1s 1s 186463150e-09 0s 0s 186470510e-09 1s 1s 186471910e-09 1s 1s 186473390e-09 0s 0s 186480750e-09 1s 1s 186482190e-09 1s 1s 186483630e-09 0s 0s 186490990e-09 1s 1s 186492470e-09 1s 1s 186493870e-09 0s 0s 186501230e-09 1s 1s 186502750e-09 1s 1s 186504110e-09 0s 0s 186511470e-09 1s 1s 186513030e-09 1s 1s 186514350e-09 0s 0s 186521710e-09 1s 1s 186523310e-09 1s 1s 186524590e-09 0s 0s 186531950e-09 1s 1s 186533590e-09 1s 1s 186534830e-09 0s 0s 186542190e-09 1s 1s 186543870e-09 1s 1s 186545070e-09 0s 0s 186552430e-09 1s 1s 186554150e-09 1s 1s 186555310e-09 0s 0s 186562670e-09 1s 1s 186564430e-09 1s 1s 186565550e-09 0s 0s 186572910e-09 1s 1s 186574710e-09 1s 1s 186575790e-09 0s 0s 186583150e-09 1s 1s 186584990e-09 1s 1s 186586030e-09 0s 0s 186593390e-09 1s 1s 186595270e-09 1s 1s 186596270e-09 0s 0s 186603630e-09 1s 1s 186605550e-09 1s 1s 186606510e-09 0s 0s 186613870e-09 1s 1s 186615830e-09 1s 1s 186616750e-09 0s 0s 186624110e-09 1s 1s 186626110e-09 1s 1s 186626990e-09 0s 0s 186634350e-09 1s 1s 186636390e-09 1s 1s 186637230e-09 0s 0s 186644590e-09 1s 1s 186646670e-09 1s 1s 186647470e-09 0s 0s 186654830e-09 1s 1s 186656950e-09 1s 1s 186657710e-09 0s 0s 186665070e-09 1s 1s 186667230e-09 1s 1s 186667950e-09 0s 0s 186675310e-09 1s 1s 186677510e-09 1s 1s 186678190e-09 0s 0s 186685550e-09 1s 1s 186687790e-09 1s 1s 186688430e-09 0s 0s 186695790e-09 1s 1s 186698070e-09 1s 1s 186698670e-09 0s 0s 186706030e-09 1s 1s 186708350e-09 1s 1s 186708910e-09 0s 0s 186716270e-09 1s 1s 186718630e-09 1s 1s 186719150e-09 0s 0s 186726510e-09 1s 1s 186728910e-09 1s 1s 186729390e-09 0s 0s 186736750e-09 1s 1s 186739190e-09 1s 1s 186739630e-09 0s 0s 186746990e-09 1s 1s 186749470e-09 1s 1s 186749870e-09 0s 0s 186757230e-09 1s 1s 186759750e-09 1s 1s 186760110e-09 0s 0s 186767470e-09 1s 1s 186770030e-09 1s 1s 186770350e-09 0s 0s 186777710e-09 1s 1s 186780310e-09 1s 1s 186780590e-09 0s 0s 186787950e-09 1s 1s 186790590e-09 1s 1s 186790830e-09 0s 0s 186798190e-09 1s 1s 186800870e-09 1s 1s 186801070e-09 0s 0s 186808430e-09 1s 1s 186811150e-09 1s 1s 186811310e-09 0s 0s 186818670e-09 1s 1s 186821430e-09 1s 1s 186821550e-09 0s 0s 186828910e-09 1s 1s 186831710e-09 1s 1s 186831790e-09 0s 0s 186839150e-09 1s 1s 186841990e-09 1s 1s 186842030e-09 0s 0s 186849390e-09 1s 1s 186852270e-09 0s 0s 186859630e-09 1s 1s 186862510e-09 0s 0s 186862550e-09 0s 0s 186869870e-09 1s 1s 186872750e-09 0s 0s 186872830e-09 0s 0s 186880110e-09 1s 1s 186882990e-09 0s 0s 186883110e-09 0s 0s 186890350e-09 1s 1s 186893230e-09 0s 0s 186893390e-09 0s 0s 186900590e-09 1s 1s 186903470e-09 0s 0s 186903670e-09 0s 0s 186910830e-09 1s 1s 186913710e-09 0s 0s 186913950e-09 0s 0s 186921070e-09 1s 1s 186923950e-09 0s 0s 186924230e-09 0s 0s 186931310e-09 1s 1s 186934190e-09 0s 0s 186934510e-09 0s 0s 186941550e-09 1s 1s 186944430e-09 0s 0s 186944790e-09 0s 0s 186951790e-09 1s 1s 186954670e-09 0s 0s 186955070e-09 0s 0s 186962030e-09 1s 1s 186964910e-09 0s 0s 186965350e-09 0s 0s 186972270e-09 1s 1s 186975150e-09 0s 0s 186975630e-09 0s 0s 186982510e-09 1s 1s 186985390e-09 0s 0s 186985910e-09 0s 0s 186992750e-09 1s 1s 186995630e-09 0s 0s 186996190e-09 0s 0s 187002990e-09 1s 1s 187005870e-09 0s 0s 187006470e-09 0s 0s 187013230e-09 1s 1s 187016110e-09 0s 0s 187016750e-09 0s 0s 187023470e-09 1s 1s 187026350e-09 0s 0s 187027030e-09 0s 0s 187033710e-09 1s 1s 187036590e-09 0s 0s 187037310e-09 0s 0s 187043950e-09 1s 1s 187046830e-09 0s 0s 187047590e-09 0s 0s 187054190e-09 1s 1s 187057070e-09 0s 0s 187057870e-09 0s 0s 187064430e-09 1s 1s 187067310e-09 0s 0s 187068150e-09 0s 0s 187074670e-09 1s 1s 187077550e-09 0s 0s 187078430e-09 0s 0s 187084910e-09 1s 1s 187087790e-09 0s 0s 187088710e-09 0s 0s 187095150e-09 1s 1s 187098030e-09 0s 0s 187098990e-09 0s 0s 187105390e-09 1s 1s 187108270e-09 0s 0s 187109270e-09 0s 0s 187115630e-09 1s 1s 187118510e-09 0s 0s 187119550e-09 0s 0s 187125870e-09 1s 1s 187128750e-09 0s 0s 187129830e-09 0s 0s 187136110e-09 1s 1s 187138990e-09 0s 0s 187140110e-09 0s 0s 187146350e-09 1s 1s 187149230e-09 0s 0s 187150390e-09 0s 0s 187156590e-09 1s 1s 187159470e-09 0s 0s 187160670e-09 0s 0s 187166830e-09 1s 1s 187169710e-09 0s 0s 187170950e-09 0s 0s 187177070e-09 1s 1s 187179950e-09 0s 0s 187181230e-09 0s 0s 187187310e-09 1s 1s 187190190e-09 0s 0s 187191510e-09 0s 0s 187197550e-09 1s 1s 187200430e-09 0s 0s 187201790e-09 0s 0s 187207790e-09 1s 1s 187210670e-09 0s 0s 187212070e-09 0s 0s 187218030e-09 1s 1s 187220910e-09 0s 0s 187222350e-09 0s 0s 187228270e-09 1s 1s 187231150e-09 0s 0s 187232630e-09 0s 0s 187238510e-09 1s 1s 187241390e-09 0s 0s 187242910e-09 0s 0s 187248750e-09 1s 1s 187251630e-09 0s 0s 187253190e-09 0s 0s 187258990e-09 1s 1s 187261870e-09 0s 0s 187263470e-09 0s 0s 187269230e-09 1s 1s 187272110e-09 0s 0s 187273750e-09 0s 0s 187279470e-09 1s 1s 187282350e-09 0s 0s 187284030e-09 0s 0s 187289710e-09 1s 1s 187292590e-09 0s 0s 187294310e-09 0s 0s 187299950e-09 1s 1s 187302830e-09 0s 0s 187304590e-09 0s 0s 187310190e-09 1s 1s 187313070e-09 0s 0s 187314870e-09 0s 0s 187320430e-09 1s 1s 187323310e-09 0s 0s 187325150e-09 0s 0s 187330670e-09 1s 1s 187333550e-09 0s 0s 187335430e-09 0s 0s 187340910e-09 1s 1s 187343790e-09 0s 0s 187345710e-09 0s 0s 187351150e-09 1s 1s 187354030e-09 0s 0s 187355990e-09 0s 0s 187361390e-09 1s 1s 187364270e-09 0s 0s 187366270e-09 0s 0s 187371630e-09 1s 1s 187374510e-09 0s 0s 187376550e-09 0s 0s 187381870e-09 1s 1s 187384750e-09 0s 0s 187386830e-09 0s 0s 187392110e-09 1s 1s 187394990e-09 0s 0s 187397110e-09 0s 0s 187402350e-09 1s 1s 187405230e-09 0s 0s 187407390e-09 0s 0s 187412590e-09 1s 1s 187415470e-09 0s 0s 187417670e-09 0s 0s 187422830e-09 1s 1s 187425710e-09 0s 0s 187427950e-09 0s 0s 187433070e-09 1s 1s 187435950e-09 0s 0s 187438230e-09 0s 0s 187443310e-09 1s 1s 187446190e-09 0s 0s 187448510e-09 0s 0s 187453550e-09 1s 1s 187456430e-09 0s 0s 187458790e-09 0s 0s 187463790e-09 1s 1s 187466670e-09 0s 0s 187469070e-09 0s 0s 187474030e-09 1s 1s 187476910e-09 0s 0s 187479350e-09 0s 0s 187484270e-09 1s 1s 187487150e-09 0s 0s 187489630e-09 0s 0s 187494510e-09 1s 1s 187497390e-09 0s 0s 187499910e-09 0s 0s 187504750e-09 1s 1s 187507630e-09 0s 0s 187510190e-09 0s 0s 187514990e-09 1s 1s 187517870e-09 0s 0s 187520470e-09 0s 0s 187525230e-09 1s 1s 187528110e-09 0s 0s 187530750e-09 0s 0s 187535470e-09 1s 1s 187538350e-09 0s 0s 187541030e-09 0s 0s 187545710e-09 1s 1s 187548590e-09 0s 0s 187551310e-09 0s 0s 187555950e-09 1s 1s 187558830e-09 0s 0s 187561590e-09 0s 0s 187566190e-09 1s 1s 187569070e-09 0s 0s 187571870e-09 0s 0s 187576430e-09 1s 1s 187579310e-09 0s 0s 187582150e-09 0s 0s 187586670e-09 1s 1s 187589550e-09 0s 0s 187592430e-09 0s 0s 187596910e-09 1s 1s 187599790e-09 0s 0s 187602710e-09 0s 0s 187607150e-09 1s 1s 187610030e-09 0s 0s 187612990e-09 0s 0s 187617390e-09 1s 1s 187620270e-09 0s 0s 187623270e-09 0s 0s 187627630e-09 1s 1s 187630510e-09 0s 0s 187633550e-09 0s 0s 187637870e-09 1s 1s 187640750e-09 0s 0s 187643830e-09 0s 0s 187648110e-09 1s 1s 187650990e-09 0s 0s 187654110e-09 0s 0s 187658350e-09 1s 1s 187661230e-09 0s 0s 187664390e-09 0s 0s 187668590e-09 1s 1s 187671470e-09 0s 0s 187674670e-09 0s 0s 187678830e-09 1s 1s 187681710e-09 0s 0s 187684950e-09 0s 0s 187689070e-09 1s 1s 187691950e-09 0s 0s 187695230e-09 0s 0s 187699310e-09 1s 1s 187702190e-09 0s 0s 187705510e-09 0s 0s 187709550e-09 1s 1s 187712430e-09 0s 0s 187715790e-09 0s 0s 187719790e-09 1s 1s 187722670e-09 0s 0s 187726070e-09 0s 0s 187730030e-09 1s 1s 187732910e-09 0s 0s 187736350e-09 0s 0s 187740270e-09 1s 1s 187743150e-09 0s 0s 187746630e-09 0s 0s 187750510e-09 1s 1s 187753390e-09 0s 0s 187756910e-09 0s 0s 187760750e-09 1s 1s 187763630e-09 0s 0s 187767190e-09 0s 0s 187770990e-09 1s 1s 187773870e-09 0s 0s 187777470e-09 0s 0s 187781230e-09 1s 1s 187784110e-09 0s 0s 187787750e-09 0s 0s 187791470e-09 1s 1s 187794350e-09 0s 0s 187798030e-09 0s 0s 187801710e-09 1s 1s 187804590e-09 0s 0s 187808310e-09 0s 0s 187811950e-09 1s 1s 187814830e-09 0s 0s 187818590e-09 0s 0s 187822190e-09 1s 1s 187825070e-09 0s 0s 187828870e-09 0s 0s 187832430e-09 1s 1s 187835310e-09 0s 0s 187839150e-09 0s 0s 187842670e-09 1s 1s 187845550e-09 0s 0s 187849430e-09 0s 0s 187852910e-09 1s 1s 187855790e-09 0s 0s 187859710e-09 0s 0s 187863150e-09 1s 1s 187866030e-09 0s 0s 187869990e-09 0s 0s 187873390e-09 1s 1s 187876270e-09 0s 0s 187880270e-09 0s 0s 187883630e-09 1s 1s 187886510e-09 0s 0s 187890550e-09 0s 0s 187893870e-09 1s 1s 187896750e-09 0s 0s 187900830e-09 0s 0s 187904110e-09 1s 1s 187906990e-09 0s 0s 187911110e-09 0s 0s 187914350e-09 1s 1s 187917230e-09 0s 0s 187921390e-09 0s 0s 187924590e-09 1s 1s 187927470e-09 0s 0s 187931670e-09 0s 0s 187934830e-09 1s 1s 187937710e-09 0s 0s 187941950e-09 0s 0s 187945070e-09 1s 1s 187947950e-09 0s 0s 187952230e-09 0s 0s 187955310e-09 1s 1s 187958190e-09 0s 0s 187962510e-09 0s 0s 187965550e-09 1s 1s 187968430e-09 0s 0s 187972790e-09 0s 0s 187975790e-09 1s 1s 187978670e-09 0s 0s 187983070e-09 0s 0s 187986030e-09 1s 1s 187988910e-09 0s 0s 187993350e-09 0s 0s 187996270e-09 1s 1s 187999150e-09 0s 0s 188003630e-09 0s 0s 188006510e-09 1s 1s 188009390e-09 0s 0s 188013910e-09 0s 0s 188016750e-09 1s 1s 188019630e-09 0s 0s 188024190e-09 0s 0s 188026990e-09 1s 1s 188029870e-09 0s 0s 188034470e-09 0s 0s 188037230e-09 1s 1s 188040110e-09 0s 0s 188044750e-09 0s 0s 188047470e-09 1s 1s 188050350e-09 0s 0s 188055030e-09 0s 0s 188057710e-09 1s 1s 188060590e-09 0s 0s 188065310e-09 0s 0s 188067950e-09 1s 1s 188070830e-09 0s 0s 188075590e-09 0s 0s 188078190e-09 1s 1s 188081070e-09 0s 0s 188085870e-09 0s 0s 188088430e-09 1s 1s 188091310e-09 0s 0s 188096150e-09 0s 0s 188098670e-09 1s 1s 188101550e-09 0s 0s 188106430e-09 0s 0s 188108910e-09 1s 1s 188111790e-09 0s 0s 188116710e-09 0s 0s 188119150e-09 1s 1s 188122030e-09 0s 0s 188126990e-09 0s 0s 188129390e-09 1s 1s 188132270e-09 0s 0s 188137270e-09 0s 0s 188139630e-09 1s 1s 188142510e-09 0s 0s 188147550e-09 0s 0s 188149870e-09 1s 1s 188152750e-09 0s 0s 188157830e-09 0s 0s 188160110e-09 1s 1s 188162990e-09 0s 0s 188168110e-09 0s 0s 188170350e-09 1s 1s 188173230e-09 0s 0s 188178390e-09 0s 0s 188180590e-09 1s 1s 188183470e-09 0s 0s 188188670e-09 0s 0s 188190830e-09 1s 1s 188193710e-09 0s 0s 188198950e-09 0s 0s 188201070e-09 1s 1s 188203950e-09 0s 0s 188209230e-09 0s 0s 188211310e-09 1s 1s 188214190e-09 0s 0s 188219510e-09 0s 0s 188221550e-09 1s 1s 188224430e-09 0s 0s 188229790e-09 0s 0s 188231790e-09 1s 1s 188234670e-09 0s 0s 188240070e-09 0s 0s 188242030e-09 1s 1s 188244910e-09 0s 0s 188250350e-09 0s 0s 188252270e-09 1s 1s 188255150e-09 0s 0s 188260630e-09 0s 0s 188262510e-09 1s 1s 188265390e-09 0s 0s 188270910e-09 0s 0s 188272750e-09 1s 1s 188275630e-09 0s 0s 188281190e-09 0s 0s 188282990e-09 1s 1s 188285870e-09 0s 0s 188291470e-09 0s 0s 188293230e-09 1s 1s 188296110e-09 0s 0s 188301750e-09 0s 0s 188303470e-09 1s 1s 188306350e-09 0s 0s 188312030e-09 0s 0s 188313710e-09 1s 1s 188316590e-09 0s 0s 188322310e-09 0s 0s 188323950e-09 1s 1s 188326830e-09 0s 0s 188332590e-09 0s 0s 188334190e-09 1s 1s 188337070e-09 0s 0s 188342870e-09 0s 0s 188344430e-09 1s 1s 188347310e-09 0s 0s 188353150e-09 0s 0s 188354670e-09 1s 1s 188357550e-09 0s 0s 188363430e-09 0s 0s 188364910e-09 1s 1s 188367790e-09 0s 0s 188373710e-09 0s 0s 188375150e-09 1s 1s 188378030e-09 0s 0s 188383990e-09 0s 0s 188385390e-09 1s 1s 188388270e-09 0s 0s 188394270e-09 0s 0s 188395630e-09 1s 1s 188398510e-09 0s 0s 188404550e-09 0s 0s 188405870e-09 1s 1s 188408750e-09 0s 0s 188414830e-09 0s 0s 188416110e-09 1s 1s 188418990e-09 0s 0s 188425110e-09 0s 0s 188426350e-09 1s 1s 188429230e-09 0s 0s 188435390e-09 0s 0s 188436590e-09 1s 1s 188439470e-09 0s 0s 188445670e-09 0s 0s 188446830e-09 1s 1s 188449710e-09 0s 0s 188455950e-09 0s 0s 188457070e-09 1s 1s 188459950e-09 0s 0s 188466230e-09 0s 0s 188467310e-09 1s 1s 188470190e-09 0s 0s 188476510e-09 0s 0s 188477550e-09 1s 1s 188480430e-09 0s 0s 188486790e-09 0s 0s 188487790e-09 1s 1s 188490670e-09 0s 0s 188497070e-09 0s 0s 188498030e-09 1s 1s 188500910e-09 0s 0s 188507350e-09 0s 0s 188508270e-09 1s 1s 188511150e-09 0s 0s 188517630e-09 0s 0s 188518510e-09 1s 1s 188521390e-09 0s 0s 188527910e-09 0s 0s 188528750e-09 1s 1s 188531630e-09 0s 0s 188538190e-09 0s 0s 188538990e-09 1s 1s 188541870e-09 0s 0s 188548470e-09 0s 0s 188549230e-09 1s 1s 188552110e-09 0s 0s 188558750e-09 0s 0s 188559470e-09 1s 1s 188562350e-09 0s 0s 188569030e-09 0s 0s 188569710e-09 1s 1s 188572590e-09 0s 0s 188579310e-09 0s 0s 188579950e-09 1s 1s 188582830e-09 0s 0s 188589590e-09 0s 0s 188590190e-09 1s 1s 188593070e-09 0s 0s 188599870e-09 0s 0s 188600430e-09 1s 1s 188603310e-09 0s 0s 188610150e-09 0s 0s 188610670e-09 1s 1s 188613550e-09 0s 0s 188620430e-09 0s 0s 188620910e-09 1s 1s 188623790e-09 0s 0s 188630710e-09 0s 0s 188631150e-09 1s 1s 188634030e-09 0s 0s 188640990e-09 0s 0s 188641390e-09 1s 1s 188644270e-09 0s 0s 188651270e-09 0s 0s 188651630e-09 1s 1s 188654510e-09 0s 0s 188661550e-09 0s 0s 188661870e-09 1s 1s 188664750e-09 0s 0s 188671830e-09 0s 0s 188672110e-09 1s 1s 188674990e-09 0s 0s 188682110e-09 0s 0s 188682350e-09 1s 1s 188685230e-09 0s 0s 188692390e-09 0s 0s 188692590e-09 1s 1s 188695470e-09 0s 0s 188702670e-09 0s 0s 188702830e-09 1s 1s 188705710e-09 0s 0s 188712950e-09 0s 0s 188713070e-09 1s 1s 188715950e-09 0s 0s 188723230e-09 0s 0s 188723310e-09 1s 1s 188726190e-09 0s 0s 188733510e-09 0s 0s 188733550e-09 1s 1s 188736430e-09 0s 0s 188743790e-09 1s 1s 188743830e-09 1s 1s 188746710e-09 0s 0s 188754030e-09 1s 1s 188754110e-09 1s 1s 188756950e-09 0s 0s 188764270e-09 1s 1s 188764390e-09 1s 1s 188767190e-09 0s 0s 188774510e-09 1s 1s 188774670e-09 1s 1s 188777430e-09 0s 0s 188784750e-09 1s 1s 188784950e-09 1s 1s 188787670e-09 0s 0s 188794990e-09 1s 1s 188795230e-09 1s 1s 188797910e-09 0s 0s 188805230e-09 1s 1s 188805510e-09 1s 1s 188808150e-09 0s 0s 188815470e-09 1s 1s 188815790e-09 1s 1s 188818390e-09 0s 0s 188825710e-09 1s 1s 188826070e-09 1s 1s 188828630e-09 0s 0s 188835950e-09 1s 1s 188836350e-09 1s 1s 188838870e-09 0s 0s 188846190e-09 1s 1s 188846630e-09 1s 1s 188849110e-09 0s 0s 188856430e-09 1s 1s 188856910e-09 1s 1s 188859350e-09 0s 0s 188866670e-09 1s 1s 188867190e-09 1s 1s 188869590e-09 0s 0s 188876910e-09 1s 1s 188877470e-09 1s 1s 188879830e-09 0s 0s 188887150e-09 1s 1s 188887750e-09 1s 1s 188890070e-09 0s 0s 188897390e-09 1s 1s 188898030e-09 1s 1s 188900310e-09 0s 0s 188907630e-09 1s 1s 188908310e-09 1s 1s 188910550e-09 0s 0s 188917870e-09 1s 1s 188918590e-09 1s 1s 188920790e-09 0s 0s 188928110e-09 1s 1s 188928870e-09 1s 1s 188931030e-09 0s 0s 188938350e-09 1s 1s 188939150e-09 1s 1s 188941270e-09 0s 0s 188948590e-09 1s 1s 188949430e-09 1s 1s 188951510e-09 0s 0s 188958830e-09 1s 1s 188959710e-09 1s 1s 188961750e-09 0s 0s 188969070e-09 1s 1s 188969990e-09 1s 1s 188971990e-09 0s 0s 188979310e-09 1s 1s 188980270e-09 1s 1s 188982230e-09 0s 0s 188989550e-09 1s 1s 188990550e-09 1s 1s 188992470e-09 0s 0s 188999790e-09 1s 1s 189000830e-09 1s 1s 189002710e-09 0s 0s 189010030e-09 1s 1s 189011110e-09 1s 1s 189012950e-09 0s 0s 189020270e-09 1s 1s 189021390e-09 1s 1s 189023190e-09 0s 0s 189030510e-09 1s 1s 189031670e-09 1s 1s 189033430e-09 0s 0s 189040750e-09 1s 1s 189041950e-09 1s 1s 189043670e-09 0s 0s 189050990e-09 1s 1s 189052230e-09 1s 1s 189053910e-09 0s 0s 189061230e-09 1s 1s 189062510e-09 1s 1s 189064150e-09 0s 0s 189071470e-09 1s 1s 189072790e-09 1s 1s 189074390e-09 0s 0s 189081710e-09 1s 1s 189083070e-09 1s 1s 189084630e-09 0s 0s 189091950e-09 1s 1s 189093350e-09 1s 1s 189094870e-09 0s 0s 189102190e-09 1s 1s 189103630e-09 1s 1s 189105110e-09 0s 0s 189112430e-09 1s 1s 189113910e-09 1s 1s 189115350e-09 0s 0s 189122670e-09 1s 1s 189124190e-09 1s 1s 189125590e-09 0s 0s 189132910e-09 1s 1s 189134470e-09 1s 1s 189135830e-09 0s 0s 189143150e-09 1s 1s 189144750e-09 1s 1s 189146070e-09 0s 0s 189153390e-09 1s 1s 189155030e-09 1s 1s 189156310e-09 0s 0s 189163630e-09 1s 1s 189165310e-09 1s 1s 189166550e-09 0s 0s 189173870e-09 1s 1s 189175590e-09 1s 1s 189176790e-09 0s 0s 189184110e-09 1s 1s 189185870e-09 1s 1s 189187030e-09 0s 0s 189194350e-09 1s 1s 189196150e-09 1s 1s 189197270e-09 0s 0s 189204590e-09 1s 1s 189206430e-09 1s 1s 189207510e-09 0s 0s 189214830e-09 1s 1s 189216710e-09 1s 1s 189217750e-09 0s 0s 189225070e-09 1s 1s 189226990e-09 1s 1s 189227990e-09 0s 0s 189235310e-09 1s 1s 189237270e-09 1s 1s 189238230e-09 0s 0s 189245550e-09 1s 1s 189247550e-09 1s 1s 189248470e-09 0s 0s 189255790e-09 1s 1s 189257830e-09 1s 1s 189258710e-09 0s 0s 189266030e-09 1s 1s 189268110e-09 1s 1s 189268950e-09 0s 0s 189276270e-09 1s 1s 189278390e-09 1s 1s 189279190e-09 0s 0s 189286510e-09 1s 1s 189288670e-09 1s 1s 189289430e-09 0s 0s 189296750e-09 1s 1s 189298950e-09 1s 1s 189299670e-09 0s 0s 189306990e-09 1s 1s 189309230e-09 1s 1s 189309910e-09 0s 0s 189317230e-09 1s 1s 189319510e-09 1s 1s 189320150e-09 0s 0s 189327470e-09 1s 1s 189329790e-09 1s 1s 189330390e-09 0s 0s 189337710e-09 1s 1s 189340070e-09 1s 1s 189340630e-09 0s 0s 189347950e-09 1s 1s 189350350e-09 1s 1s 189350870e-09 0s 0s 189358190e-09 1s 1s 189360630e-09 1s 1s 189361110e-09 0s 0s 189368430e-09 1s 1s 189370910e-09 1s 1s 189371350e-09 0s 0s 189378670e-09 1s 1s 189381190e-09 1s 1s 189381590e-09 0s 0s 189388910e-09 1s 1s 189391470e-09 1s 1s 189391830e-09 0s 0s 189399150e-09 1s 1s 189401750e-09 1s 1s 189402070e-09 0s 0s 189409390e-09 1s 1s 189412030e-09 1s 1s 189412310e-09 0s 0s 189419630e-09 1s 1s 189422310e-09 1s 1s 189422550e-09 0s 0s 189429870e-09 1s 1s 189432590e-09 1s 1s 189432790e-09 0s 0s 189440110e-09 1s 1s 189442870e-09 1s 1s 189443030e-09 0s 0s 189450350e-09 1s 1s 189453150e-09 1s 1s 189453270e-09 0s 0s 189460590e-09 1s 1s 189463430e-09 1s 1s 189463510e-09 0s 0s 189470830e-09 1s 1s 189473710e-09 1s 1s 189473750e-09 0s 0s 189481070e-09 1s 1s 189483990e-09 0s 0s 189491310e-09 1s 1s 189494230e-09 0s 0s 189494270e-09 0s 0s 189501550e-09 1s 1s 189504470e-09 0s 0s 189504550e-09 0s 0s 189511790e-09 1s 1s 189514710e-09 0s 0s 189514830e-09 0s 0s 189522030e-09 1s 1s 189524950e-09 0s 0s 189525110e-09 0s 0s 189532270e-09 1s 1s 189535190e-09 0s 0s 189535390e-09 0s 0s 189542510e-09 1s 1s 189545430e-09 0s 0s 189545670e-09 0s 0s 189552750e-09 1s 1s 189555670e-09 0s 0s 189555950e-09 0s 0s 189562990e-09 1s 1s 189565910e-09 0s 0s 189566230e-09 0s 0s 189573230e-09 1s 1s 189576150e-09 0s 0s 189576510e-09 0s 0s 189583470e-09 1s 1s 189586390e-09 0s 0s 189586790e-09 0s 0s 189593710e-09 1s 1s 189596630e-09 0s 0s 189597070e-09 0s 0s 189603950e-09 1s 1s 189606870e-09 0s 0s 189607350e-09 0s 0s 189614190e-09 1s 1s 189617110e-09 0s 0s 189617630e-09 0s 0s 189624430e-09 1s 1s 189627350e-09 0s 0s 189627910e-09 0s 0s 189634670e-09 1s 1s 189637590e-09 0s 0s 189638190e-09 0s 0s 189644910e-09 1s 1s 189647830e-09 0s 0s 189648470e-09 0s 0s 189655150e-09 1s 1s 189658070e-09 0s 0s 189658750e-09 0s 0s 189665390e-09 1s 1s 189668310e-09 0s 0s 189669030e-09 0s 0s 189675630e-09 1s 1s 189678550e-09 0s 0s 189679310e-09 0s 0s 189685870e-09 1s 1s 189688790e-09 0s 0s 189689590e-09 0s 0s 189696110e-09 1s 1s 189699030e-09 0s 0s 189699870e-09 0s 0s 189706350e-09 1s 1s 189709270e-09 0s 0s 189710150e-09 0s 0s 189716590e-09 1s 1s 189719510e-09 0s 0s 189720430e-09 0s 0s 189726830e-09 1s 1s 189729750e-09 0s 0s 189730710e-09 0s 0s 189737070e-09 1s 1s 189739990e-09 0s 0s 189740990e-09 0s 0s 189747310e-09 1s 1s 189750230e-09 0s 0s 189751270e-09 0s 0s 189757550e-09 1s 1s 189760470e-09 0s 0s 189761550e-09 0s 0s 189767790e-09 1s 1s 189770710e-09 0s 0s 189771830e-09 0s 0s 189778030e-09 1s 1s 189780950e-09 0s 0s 189782110e-09 0s 0s 189788270e-09 1s 1s 189791190e-09 0s 0s 189792390e-09 0s 0s 189798510e-09 1s 1s 189801430e-09 0s 0s 189802670e-09 0s 0s 189808750e-09 1s 1s 189811670e-09 0s 0s 189812950e-09 0s 0s 189818990e-09 1s 1s 189821910e-09 0s 0s 189823230e-09 0s 0s 189829230e-09 1s 1s 189832150e-09 0s 0s 189833510e-09 0s 0s 189839470e-09 1s 1s 189842390e-09 0s 0s 189843790e-09 0s 0s 189849710e-09 1s 1s 189852630e-09 0s 0s 189854070e-09 0s 0s 189859950e-09 1s 1s 189862870e-09 0s 0s 189864350e-09 0s 0s 189870190e-09 1s 1s 189873110e-09 0s 0s 189874630e-09 0s 0s 189880430e-09 1s 1s 189883350e-09 0s 0s 189884910e-09 0s 0s 189890670e-09 1s 1s 189893590e-09 0s 0s 189895190e-09 0s 0s 189900910e-09 1s 1s 189903830e-09 0s 0s 189905470e-09 0s 0s 189911150e-09 1s 1s 189914070e-09 0s 0s 189915750e-09 0s 0s 189921390e-09 1s 1s 189924310e-09 0s 0s 189926030e-09 0s 0s 189931630e-09 1s 1s 189934550e-09 0s 0s 189936310e-09 0s 0s 189941870e-09 1s 1s 189944790e-09 0s 0s 189946590e-09 0s 0s 189952110e-09 1s 1s 189955030e-09 0s 0s 189956870e-09 0s 0s 189962350e-09 1s 1s 189965270e-09 0s 0s 189967150e-09 0s 0s 189972590e-09 1s 1s 189975510e-09 0s 0s 189977430e-09 0s 0s 189982830e-09 1s 1s 189985750e-09 0s 0s 189987710e-09 0s 0s 189993070e-09 1s 1s 189995990e-09 0s 0s 189997990e-09 0s 0s 190003310e-09 1s 1s 190006230e-09 0s 0s 190008270e-09 0s 0s 190013550e-09 1s 1s 190016470e-09 0s 0s 190018550e-09 0s 0s 190023790e-09 1s 1s 190026710e-09 0s 0s 190028830e-09 0s 0s 190034030e-09 1s 1s 190036950e-09 0s 0s 190039110e-09 0s 0s 190044270e-09 1s 1s 190047190e-09 0s 0s 190049390e-09 0s 0s 190054510e-09 1s 1s 190057430e-09 0s 0s 190059670e-09 0s 0s 190064750e-09 1s 1s 190067670e-09 0s 0s 190069950e-09 0s 0s 190074990e-09 1s 1s 190077910e-09 0s 0s 190080230e-09 0s 0s 190085230e-09 1s 1s 190088150e-09 0s 0s 190090510e-09 0s 0s 190095470e-09 1s 1s 190098390e-09 0s 0s 190100790e-09 0s 0s 190105710e-09 1s 1s 190108630e-09 0s 0s 190111070e-09 0s 0s 190115950e-09 1s 1s 190118870e-09 0s 0s 190121350e-09 0s 0s 190126190e-09 1s 1s 190129110e-09 0s 0s 190131630e-09 0s 0s 190136430e-09 1s 1s 190139350e-09 0s 0s 190141910e-09 0s 0s 190146670e-09 1s 1s 190149590e-09 0s 0s 190152190e-09 0s 0s 190156910e-09 1s 1s 190159830e-09 0s 0s 190162470e-09 0s 0s 190167150e-09 1s 1s 190170070e-09 0s 0s 190172750e-09 0s 0s 190177390e-09 1s 1s 190180310e-09 0s 0s 190183030e-09 0s 0s 190187630e-09 1s 1s 190190550e-09 0s 0s 190193310e-09 0s 0s 190197870e-09 1s 1s 190200790e-09 0s 0s 190203590e-09 0s 0s 190208110e-09 1s 1s 190211030e-09 0s 0s 190213870e-09 0s 0s 190218350e-09 1s 1s 190221270e-09 0s 0s 190224150e-09 0s 0s 190228590e-09 1s 1s 190231510e-09 0s 0s 190234430e-09 0s 0s 190238830e-09 1s 1s 190241750e-09 0s 0s 190244710e-09 0s 0s 190249070e-09 1s 1s 190251990e-09 0s 0s 190254990e-09 0s 0s 190259310e-09 1s 1s 190262230e-09 0s 0s 190265270e-09 0s 0s 190269550e-09 1s 1s 190272470e-09 0s 0s 190275550e-09 0s 0s 190279790e-09 1s 1s 190282710e-09 0s 0s 190285830e-09 0s 0s 190290030e-09 1s 1s 190292950e-09 0s 0s 190296110e-09 0s 0s 190300270e-09 1s 1s 190303190e-09 0s 0s 190306390e-09 0s 0s 190310510e-09 1s 1s 190313430e-09 0s 0s 190316670e-09 0s 0s 190320750e-09 1s 1s 190323670e-09 0s 0s 190326950e-09 0s 0s 190330990e-09 1s 1s 190333910e-09 0s 0s 190337230e-09 0s 0s 190341230e-09 1s 1s 190344150e-09 0s 0s 190347510e-09 0s 0s 190351470e-09 1s 1s 190354390e-09 0s 0s 190357790e-09 0s 0s 190361710e-09 1s 1s 190364630e-09 0s 0s 190368070e-09 0s 0s 190371950e-09 1s 1s 190374870e-09 0s 0s 190378350e-09 0s 0s 190382190e-09 1s 1s 190385110e-09 0s 0s 190388630e-09 0s 0s 190392430e-09 1s 1s 190395350e-09 0s 0s 190398910e-09 0s 0s 190402670e-09 1s 1s 190405590e-09 0s 0s 190409190e-09 0s 0s 190412910e-09 1s 1s 190415830e-09 0s 0s 190419470e-09 0s 0s 190423150e-09 1s 1s 190426070e-09 0s 0s 190429750e-09 0s 0s 190433390e-09 1s 1s 190436310e-09 0s 0s 190440030e-09 0s 0s 190443630e-09 1s 1s 190446550e-09 0s 0s 190450310e-09 0s 0s 190453870e-09 1s 1s 190456790e-09 0s 0s 190460590e-09 0s 0s 190464110e-09 1s 1s 190467030e-09 0s 0s 190470870e-09 0s 0s 190474350e-09 1s 1s 190477270e-09 0s 0s 190481150e-09 0s 0s 190484590e-09 1s 1s 190487510e-09 0s 0s 190491430e-09 0s 0s 190494830e-09 1s 1s 190497750e-09 0s 0s 190501710e-09 0s 0s 190505070e-09 1s 1s 190507990e-09 0s 0s 190511990e-09 0s 0s 190515310e-09 1s 1s 190518230e-09 0s 0s 190522270e-09 0s 0s 190525550e-09 1s 1s 190528470e-09 0s 0s 190532550e-09 0s 0s 190535790e-09 1s 1s 190538710e-09 0s 0s 190542830e-09 0s 0s 190546030e-09 1s 1s 190548950e-09 0s 0s 190553110e-09 0s 0s 190556270e-09 1s 1s 190559190e-09 0s 0s 190563390e-09 0s 0s 190566510e-09 1s 1s 190569430e-09 0s 0s 190573670e-09 0s 0s 190576750e-09 1s 1s 190579670e-09 0s 0s 190583950e-09 0s 0s 190586990e-09 1s 1s 190589910e-09 0s 0s 190594230e-09 0s 0s 190597230e-09 1s 1s 190600150e-09 0s 0s 190604510e-09 0s 0s 190607470e-09 1s 1s 190610390e-09 0s 0s 190614790e-09 0s 0s 190617710e-09 1s 1s 190620630e-09 0s 0s 190625070e-09 0s 0s 190627950e-09 1s 1s 190630870e-09 0s 0s 190635350e-09 0s 0s 190638190e-09 1s 1s 190641110e-09 0s 0s 190645630e-09 0s 0s 190648430e-09 1s 1s 190651350e-09 0s 0s 190655910e-09 0s 0s 190658670e-09 1s 1s 190661590e-09 0s 0s 190666190e-09 0s 0s 190668910e-09 1s 1s 190671830e-09 0s 0s 190676470e-09 0s 0s 190679150e-09 1s 1s 190682070e-09 0s 0s 190686750e-09 0s 0s 190689390e-09 1s 1s 190692310e-09 0s 0s 190697030e-09 0s 0s 190699630e-09 1s 1s 190702550e-09 0s 0s 190707310e-09 0s 0s 190709870e-09 1s 1s 190712790e-09 0s 0s 190717590e-09 0s 0s 190720110e-09 1s 1s 190723030e-09 0s 0s 190727870e-09 0s 0s 190730350e-09 1s 1s 190733270e-09 0s 0s 190738150e-09 0s 0s 190740590e-09 1s 1s 190743510e-09 0s 0s 190748430e-09 0s 0s 190750830e-09 1s 1s 190753750e-09 0s 0s 190758710e-09 0s 0s 190761070e-09 1s 1s 190763990e-09 0s 0s 190768990e-09 0s 0s 190771310e-09 1s 1s 190774230e-09 0s 0s 190779270e-09 0s 0s 190781550e-09 1s 1s 190784470e-09 0s 0s 190789550e-09 0s 0s 190791790e-09 1s 1s 190794710e-09 0s 0s 190799830e-09 0s 0s 190802030e-09 1s 1s 190804950e-09 0s 0s 190810110e-09 0s 0s 190812270e-09 1s 1s 190815190e-09 0s 0s 190820390e-09 0s 0s 190822510e-09 1s 1s 190825430e-09 0s 0s 190830670e-09 0s 0s 190832750e-09 1s 1s 190835670e-09 0s 0s 190840950e-09 0s 0s 190842990e-09 1s 1s 190845910e-09 0s 0s 190851230e-09 0s 0s 190853230e-09 1s 1s 190856150e-09 0s 0s 190861510e-09 0s 0s 190863470e-09 1s 1s 190866390e-09 0s 0s 190871790e-09 0s 0s 190873710e-09 1s 1s 190876630e-09 0s 0s 190882070e-09 0s 0s 190883950e-09 1s 1s 190886870e-09 0s 0s 190892350e-09 0s 0s 190894190e-09 1s 1s 190897110e-09 0s 0s 190902630e-09 0s 0s 190904430e-09 1s 1s 190907350e-09 0s 0s 190912910e-09 0s 0s 190914670e-09 1s 1s 190917590e-09 0s 0s 190923190e-09 0s 0s 190924910e-09 1s 1s 190927830e-09 0s 0s 190933470e-09 0s 0s 190935150e-09 1s 1s 190938070e-09 0s 0s 190943750e-09 0s 0s 190945390e-09 1s 1s 190948310e-09 0s 0s 190954030e-09 0s 0s 190955630e-09 1s 1s 190958550e-09 0s 0s 190964310e-09 0s 0s 190965870e-09 1s 1s 190968790e-09 0s 0s 190974590e-09 0s 0s 190976110e-09 1s 1s 190979030e-09 0s 0s 190984870e-09 0s 0s 190986350e-09 1s 1s 190989270e-09 0s 0s 190995150e-09 0s 0s 190996590e-09 1s 1s 190999510e-09 0s 0s 191005430e-09 0s 0s 191006830e-09 1s 1s 191009750e-09 0s 0s 191015710e-09 0s 0s 191017070e-09 1s 1s 191019990e-09 0s 0s 191025990e-09 0s 0s 191027310e-09 1s 1s 191030230e-09 0s 0s 191036270e-09 0s 0s 191037550e-09 1s 1s 191040470e-09 0s 0s 191046550e-09 0s 0s 191047790e-09 1s 1s 191050710e-09 0s 0s 191056830e-09 0s 0s 191058030e-09 1s 1s 191060950e-09 0s 0s 191067110e-09 0s 0s 191068270e-09 1s 1s 191071190e-09 0s 0s 191077390e-09 0s 0s 191078510e-09 1s 1s 191081430e-09 0s 0s 191087670e-09 0s 0s 191088750e-09 1s 1s 191091670e-09 0s 0s 191097950e-09 0s 0s 191098990e-09 1s 1s 191101910e-09 0s 0s 191108230e-09 0s 0s 191109230e-09 1s 1s 191112150e-09 0s 0s 191118510e-09 0s 0s 191119470e-09 1s 1s 191122390e-09 0s 0s 191128790e-09 0s 0s 191129710e-09 1s 1s 191132630e-09 0s 0s 191139070e-09 0s 0s 191139950e-09 1s 1s 191142870e-09 0s 0s 191149350e-09 0s 0s 191150190e-09 1s 1s 191153110e-09 0s 0s 191159630e-09 0s 0s 191160430e-09 1s 1s 191163350e-09 0s 0s 191169910e-09 0s 0s 191170670e-09 1s 1s 191173590e-09 0s 0s 191180190e-09 0s 0s 191180910e-09 1s 1s 191183830e-09 0s 0s 191190470e-09 0s 0s 191191150e-09 1s 1s 191194070e-09 0s 0s 191200750e-09 0s 0s 191201390e-09 1s 1s 191204310e-09 0s 0s 191211030e-09 0s 0s 191211630e-09 1s 1s 191214550e-09 0s 0s 191221310e-09 0s 0s 191221870e-09 1s 1s 191224790e-09 0s 0s 191231590e-09 0s 0s 191232110e-09 1s 1s 191235030e-09 0s 0s 191241870e-09 0s 0s 191242350e-09 1s 1s 191245270e-09 0s 0s 191252150e-09 0s 0s 191252590e-09 1s 1s 191255510e-09 0s 0s 191262430e-09 0s 0s 191262830e-09 1s 1s 191265750e-09 0s 0s 191272710e-09 0s 0s 191273070e-09 1s 1s 191275990e-09 0s 0s 191282990e-09 0s 0s 191283310e-09 1s 1s 191286230e-09 0s 0s 191293270e-09 0s 0s 191293550e-09 1s 1s 191296470e-09 0s 0s 191303550e-09 0s 0s 191303790e-09 1s 1s 191306710e-09 0s 0s 191313830e-09 0s 0s 191314030e-09 1s 1s 191316950e-09 0s 0s 191324110e-09 0s 0s 191324270e-09 1s 1s 191327190e-09 0s 0s 191334390e-09 0s 0s 191334510e-09 1s 1s 191337430e-09 0s 0s 191344670e-09 0s 0s 191344750e-09 1s 1s 191347670e-09 0s 0s 191354950e-09 0s 0s 191354990e-09 1s 1s 191357910e-09 0s 0s 191365230e-09 1s 1s 191365270e-09 1s 1s 191368190e-09 0s 0s 191375470e-09 1s 1s 191375550e-09 1s 1s 191378430e-09 0s 0s 191385710e-09 1s 1s 191385830e-09 1s 1s 191388670e-09 0s 0s 191395950e-09 1s 1s 191396110e-09 1s 1s 191398910e-09 0s 0s 191406190e-09 1s 1s 191406390e-09 1s 1s 191409150e-09 0s 0s 191416430e-09 1s 1s 191416670e-09 1s 1s 191419390e-09 0s 0s 191426670e-09 1s 1s 191426950e-09 1s 1s 191429630e-09 0s 0s 191436910e-09 1s 1s 191437230e-09 1s 1s 191439870e-09 0s 0s 191447150e-09 1s 1s 191447510e-09 1s 1s 191450110e-09 0s 0s 191457390e-09 1s 1s 191457790e-09 1s 1s 191460350e-09 0s 0s 191467630e-09 1s 1s 191468070e-09 1s 1s 191470590e-09 0s 0s 191477870e-09 1s 1s 191478350e-09 1s 1s 191480830e-09 0s 0s 191488110e-09 1s 1s 191488630e-09 1s 1s 191491070e-09 0s 0s 191498350e-09 1s 1s 191498910e-09 1s 1s 191501310e-09 0s 0s 191508590e-09 1s 1s 191509190e-09 1s 1s 191511550e-09 0s 0s 191518830e-09 1s 1s 191519470e-09 1s 1s 191521790e-09 0s 0s 191529070e-09 1s 1s 191529750e-09 1s 1s 191532030e-09 0s 0s 191539310e-09 1s 1s 191540030e-09 1s 1s 191542270e-09 0s 0s 191549550e-09 1s 1s 191550310e-09 1s 1s 191552510e-09 0s 0s 191559790e-09 1s 1s 191560590e-09 1s 1s 191562750e-09 0s 0s 191570030e-09 1s 1s 191570870e-09 1s 1s 191572990e-09 0s 0s 191580270e-09 1s 1s 191581150e-09 1s 1s 191583230e-09 0s 0s 191590510e-09 1s 1s 191591430e-09 1s 1s 191593470e-09 0s 0s 191600750e-09 1s 1s 191601710e-09 1s 1s 191603710e-09 0s 0s 191610990e-09 1s 1s 191611990e-09 1s 1s 191613950e-09 0s 0s 191621230e-09 1s 1s 191622270e-09 1s 1s 191624190e-09 0s 0s 191631470e-09 1s 1s 191632550e-09 1s 1s 191634430e-09 0s 0s 191641710e-09 1s 1s 191642830e-09 1s 1s 191644670e-09 0s 0s 191651950e-09 1s 1s 191653110e-09 1s 1s 191654910e-09 0s 0s 191662190e-09 1s 1s 191663390e-09 1s 1s 191665150e-09 0s 0s 191672430e-09 1s 1s 191673670e-09 1s 1s 191675390e-09 0s 0s 191682670e-09 1s 1s 191683950e-09 1s 1s 191685630e-09 0s 0s 191692910e-09 1s 1s 191694230e-09 1s 1s 191695870e-09 0s 0s 191703150e-09 1s 1s 191704510e-09 1s 1s 191706110e-09 0s 0s 191713390e-09 1s 1s 191714790e-09 1s 1s 191716350e-09 0s 0s 191723630e-09 1s 1s 191725070e-09 1s 1s 191726590e-09 0s 0s 191733870e-09 1s 1s 191735350e-09 1s 1s 191736830e-09 0s 0s 191744110e-09 1s 1s 191745630e-09 1s 1s 191747070e-09 0s 0s 191754350e-09 1s 1s 191755910e-09 1s 1s 191757310e-09 0s 0s 191764590e-09 1s 1s 191766190e-09 1s 1s 191767550e-09 0s 0s 191774830e-09 1s 1s 191776470e-09 1s 1s 191777790e-09 0s 0s 191785070e-09 1s 1s 191786750e-09 1s 1s 191788030e-09 0s 0s 191795310e-09 1s 1s 191797030e-09 1s 1s 191798270e-09 0s 0s 191805550e-09 1s 1s 191807310e-09 1s 1s 191808510e-09 0s 0s 191815790e-09 1s 1s 191817590e-09 1s 1s 191818750e-09 0s 0s 191826030e-09 1s 1s 191827870e-09 1s 1s 191828990e-09 0s 0s 191836270e-09 1s 1s 191838150e-09 1s 1s 191839230e-09 0s 0s 191846510e-09 1s 1s 191848430e-09 1s 1s 191849470e-09 0s 0s 191856750e-09 1s 1s 191858710e-09 1s 1s 191859710e-09 0s 0s 191866990e-09 1s 1s 191868990e-09 1s 1s 191869950e-09 0s 0s 191877230e-09 1s 1s 191879270e-09 1s 1s 191880190e-09 0s 0s 191887470e-09 1s 1s 191889550e-09 1s 1s 191890430e-09 0s 0s 191897710e-09 1s 1s 191899830e-09 1s 1s 191900670e-09 0s 0s 191907950e-09 1s 1s 191910110e-09 1s 1s 191910910e-09 0s 0s 191918190e-09 1s 1s 191920390e-09 1s 1s 191921150e-09 0s 0s 191928430e-09 1s 1s 191930670e-09 1s 1s 191931390e-09 0s 0s 191938670e-09 1s 1s 191940950e-09 1s 1s 191941630e-09 0s 0s 191948910e-09 1s 1s 191951230e-09 1s 1s 191951870e-09 0s 0s 191959150e-09 1s 1s 191961510e-09 1s 1s 191962110e-09 0s 0s 191969390e-09 1s 1s 191971790e-09 1s 1s 191972350e-09 0s 0s 191979630e-09 1s 1s 191982070e-09 1s 1s 191982590e-09 0s 0s 191989870e-09 1s 1s 191992350e-09 1s 1s 191992830e-09 0s 0s 192000110e-09 1s 1s 192002630e-09 1s 1s 192003070e-09 0s 0s 192010350e-09 1s 1s 192012910e-09 1s 1s 192013310e-09 0s 0s 192020590e-09 1s 1s 192023190e-09 1s 1s 192023550e-09 0s 0s 192030830e-09 1s 1s 192033470e-09 1s 1s 192033790e-09 0s 0s 192041070e-09 1s 1s 192043750e-09 1s 1s 192044030e-09 0s 0s 192051310e-09 1s 1s 192054030e-09 1s 1s 192054270e-09 0s 0s 192061550e-09 1s 1s 192064310e-09 1s 1s 192064510e-09 0s 0s 192071790e-09 1s 1s 192074590e-09 1s 1s 192074750e-09 0s 0s 192082030e-09 1s 1s 192084870e-09 1s 1s 192084990e-09 0s 0s 192092270e-09 1s 1s 192095150e-09 1s 1s 192095230e-09 0s 0s 192102510e-09 1s 1s 192105430e-09 1s 1s 192105470e-09 0s 0s 192112750e-09 1s 1s 192115710e-09 0s 0s 192122990e-09 1s 1s 192125950e-09 0s 0s 192125990e-09 0s 0s 192133230e-09 1s 1s 192136190e-09 0s 0s 192136270e-09 0s 0s 192143470e-09 1s 1s 192146430e-09 0s 0s 192146550e-09 0s 0s 192153710e-09 1s 1s 192156670e-09 0s 0s 192156830e-09 0s 0s 192163950e-09 1s 1s 192166910e-09 0s 0s 192167110e-09 0s 0s 192174190e-09 1s 1s 192177150e-09 0s 0s 192177390e-09 0s 0s 192184430e-09 1s 1s 192187390e-09 0s 0s 192187670e-09 0s 0s 192194670e-09 1s 1s 192197630e-09 0s 0s 192197950e-09 0s 0s 192204910e-09 1s 1s 192207870e-09 0s 0s 192208230e-09 0s 0s 192215150e-09 1s 1s 192218110e-09 0s 0s 192218510e-09 0s 0s 192225390e-09 1s 1s 192228350e-09 0s 0s 192228790e-09 0s 0s 192235630e-09 1s 1s 192238590e-09 0s 0s 192239070e-09 0s 0s 192245870e-09 1s 1s 192248830e-09 0s 0s 192249350e-09 0s 0s 192256110e-09 1s 1s 192259070e-09 0s 0s 192259630e-09 0s 0s 192266350e-09 1s 1s 192269310e-09 0s 0s 192269910e-09 0s 0s 192276590e-09 1s 1s 192279550e-09 0s 0s 192280190e-09 0s 0s 192286830e-09 1s 1s 192289790e-09 0s 0s 192290470e-09 0s 0s 192297070e-09 1s 1s 192300030e-09 0s 0s 192300750e-09 0s 0s 192307310e-09 1s 1s 192310270e-09 0s 0s 192311030e-09 0s 0s 192317550e-09 1s 1s 192320510e-09 0s 0s 192321310e-09 0s 0s 192327790e-09 1s 1s 192330750e-09 0s 0s 192331590e-09 0s 0s 192338030e-09 1s 1s 192340990e-09 0s 0s 192341870e-09 0s 0s 192348270e-09 1s 1s 192351230e-09 0s 0s 192352150e-09 0s 0s 192358510e-09 1s 1s 192361470e-09 0s 0s 192362430e-09 0s 0s 192368750e-09 1s 1s 192371710e-09 0s 0s 192372710e-09 0s 0s 192378990e-09 1s 1s 192381950e-09 0s 0s 192382990e-09 0s 0s 192389230e-09 1s 1s 192392190e-09 0s 0s 192393270e-09 0s 0s 192399470e-09 1s 1s 192402430e-09 0s 0s 192403550e-09 0s 0s 192409710e-09 1s 1s 192412670e-09 0s 0s 192413830e-09 0s 0s 192419950e-09 1s 1s 192422910e-09 0s 0s 192424110e-09 0s 0s 192430190e-09 1s 1s 192433150e-09 0s 0s 192434390e-09 0s 0s 192440430e-09 1s 1s 192443390e-09 0s 0s 192444670e-09 0s 0s 192450670e-09 1s 1s 192453630e-09 0s 0s 192454950e-09 0s 0s 192460910e-09 1s 1s 192463870e-09 0s 0s 192465230e-09 0s 0s 192471150e-09 1s 1s 192474110e-09 0s 0s 192475510e-09 0s 0s 192481390e-09 1s 1s 192484350e-09 0s 0s 192485790e-09 0s 0s 192491630e-09 1s 1s 192494590e-09 0s 0s 192496070e-09 0s 0s 192501870e-09 1s 1s 192504830e-09 0s 0s 192506350e-09 0s 0s 192512110e-09 1s 1s 192515070e-09 0s 0s 192516630e-09 0s 0s 192522350e-09 1s 1s 192525310e-09 0s 0s 192526910e-09 0s 0s 192532590e-09 1s 1s 192535550e-09 0s 0s 192537190e-09 0s 0s 192542830e-09 1s 1s 192545790e-09 0s 0s 192547470e-09 0s 0s 192553070e-09 1s 1s 192556030e-09 0s 0s 192557750e-09 0s 0s 192563310e-09 1s 1s 192566270e-09 0s 0s 192568030e-09 0s 0s 192573550e-09 1s 1s 192576510e-09 0s 0s 192578310e-09 0s 0s 192583790e-09 1s 1s 192586750e-09 0s 0s 192588590e-09 0s 0s 192594030e-09 1s 1s 192596990e-09 0s 0s 192598870e-09 0s 0s 192604270e-09 1s 1s 192607230e-09 0s 0s 192609150e-09 0s 0s 192614510e-09 1s 1s 192617470e-09 0s 0s 192619430e-09 0s 0s 192624750e-09 1s 1s 192627710e-09 0s 0s 192629710e-09 0s 0s 192634990e-09 1s 1s 192637950e-09 0s 0s 192639990e-09 0s 0s 192645230e-09 1s 1s 192648190e-09 0s 0s 192650270e-09 0s 0s 192655470e-09 1s 1s 192658430e-09 0s 0s 192660550e-09 0s 0s 192665710e-09 1s 1s 192668670e-09 0s 0s 192670830e-09 0s 0s 192675950e-09 1s 1s 192678910e-09 0s 0s 192681110e-09 0s 0s 192686190e-09 1s 1s 192689150e-09 0s 0s 192691390e-09 0s 0s 192696430e-09 1s 1s 192699390e-09 0s 0s 192701670e-09 0s 0s 192706670e-09 1s 1s 192709630e-09 0s 0s 192711950e-09 0s 0s 192716910e-09 1s 1s 192719870e-09 0s 0s 192722230e-09 0s 0s 192727150e-09 1s 1s 192730110e-09 0s 0s 192732510e-09 0s 0s 192737390e-09 1s 1s 192740350e-09 0s 0s 192742790e-09 0s 0s 192747630e-09 1s 1s 192750590e-09 0s 0s 192753070e-09 0s 0s 192757870e-09 1s 1s 192760830e-09 0s 0s 192763350e-09 0s 0s 192768110e-09 1s 1s 192771070e-09 0s 0s 192773630e-09 0s 0s 192778350e-09 1s 1s 192781310e-09 0s 0s 192783910e-09 0s 0s 192788590e-09 1s 1s 192791550e-09 0s 0s 192794190e-09 0s 0s 192798830e-09 1s 1s 192801790e-09 0s 0s 192804470e-09 0s 0s 192809070e-09 1s 1s 192812030e-09 0s 0s 192814750e-09 0s 0s 192819310e-09 1s 1s 192822270e-09 0s 0s 192825030e-09 0s 0s 192829550e-09 1s 1s 192832510e-09 0s 0s 192835310e-09 0s 0s 192839790e-09 1s 1s 192842750e-09 0s 0s 192845590e-09 0s 0s 192850030e-09 1s 1s 192852990e-09 0s 0s 192855870e-09 0s 0s 192860270e-09 1s 1s 192863230e-09 0s 0s 192866150e-09 0s 0s 192870510e-09 1s 1s 192873470e-09 0s 0s 192876430e-09 0s 0s 192880750e-09 1s 1s 192883710e-09 0s 0s 192886710e-09 0s 0s 192890990e-09 1s 1s 192893950e-09 0s 0s 192896990e-09 0s 0s 192901230e-09 1s 1s 192904190e-09 0s 0s 192907270e-09 0s 0s 192911470e-09 1s 1s 192914430e-09 0s 0s 192917550e-09 0s 0s 192921710e-09 1s 1s 192924670e-09 0s 0s 192927830e-09 0s 0s 192931950e-09 1s 1s 192934910e-09 0s 0s 192938110e-09 0s 0s 192942190e-09 1s 1s 192945150e-09 0s 0s 192948390e-09 0s 0s 192952430e-09 1s 1s 192955390e-09 0s 0s 192958670e-09 0s 0s 192962670e-09 1s 1s 192965630e-09 0s 0s 192968950e-09 0s 0s 192972910e-09 1s 1s 192975870e-09 0s 0s 192979230e-09 0s 0s 192983150e-09 1s 1s 192986110e-09 0s 0s 192989510e-09 0s 0s 192993390e-09 1s 1s 192996350e-09 0s 0s 192999790e-09 0s 0s 193003630e-09 1s 1s 193006590e-09 0s 0s 193010070e-09 0s 0s 193013870e-09 1s 1s 193016830e-09 0s 0s 193020350e-09 0s 0s 193024110e-09 1s 1s 193027070e-09 0s 0s 193030630e-09 0s 0s 193034350e-09 1s 1s 193037310e-09 0s 0s 193040910e-09 0s 0s 193044590e-09 1s 1s 193047550e-09 0s 0s 193051190e-09 0s 0s 193054830e-09 1s 1s 193057790e-09 0s 0s 193061470e-09 0s 0s 193065070e-09 1s 1s 193068030e-09 0s 0s 193071750e-09 0s 0s 193075310e-09 1s 1s 193078270e-09 0s 0s 193082030e-09 0s 0s 193085550e-09 1s 1s 193088510e-09 0s 0s 193092310e-09 0s 0s 193095790e-09 1s 1s 193098750e-09 0s 0s 193102590e-09 0s 0s 193106030e-09 1s 1s 193108990e-09 0s 0s 193112870e-09 0s 0s 193116270e-09 1s 1s 193119230e-09 0s 0s 193123150e-09 0s 0s 193126510e-09 1s 1s 193129470e-09 0s 0s 193133430e-09 0s 0s 193136750e-09 1s 1s 193139710e-09 0s 0s 193143710e-09 0s 0s 193146990e-09 1s 1s 193149950e-09 0s 0s 193153990e-09 0s 0s 193157230e-09 1s 1s 193160190e-09 0s 0s 193164270e-09 0s 0s 193167470e-09 1s 1s 193170430e-09 0s 0s 193174550e-09 0s 0s 193177710e-09 1s 1s 193180670e-09 0s 0s 193184830e-09 0s 0s 193187950e-09 1s 1s 193190910e-09 0s 0s 193195110e-09 0s 0s 193198190e-09 1s 1s 193201150e-09 0s 0s 193205390e-09 0s 0s 193208430e-09 1s 1s 193211390e-09 0s 0s 193215670e-09 0s 0s 193218670e-09 1s 1s 193221630e-09 0s 0s 193225950e-09 0s 0s 193228910e-09 1s 1s 193231870e-09 0s 0s 193236230e-09 0s 0s 193239150e-09 1s 1s 193242110e-09 0s 0s 193246510e-09 0s 0s 193249390e-09 1s 1s 193252350e-09 0s 0s 193256790e-09 0s 0s 193259630e-09 1s 1s 193262590e-09 0s 0s 193267070e-09 0s 0s 193269870e-09 1s 1s 193272830e-09 0s 0s 193277350e-09 0s 0s 193280110e-09 1s 1s 193283070e-09 0s 0s 193287630e-09 0s 0s 193290350e-09 1s 1s 193293310e-09 0s 0s 193297910e-09 0s 0s 193300590e-09 1s 1s 193303550e-09 0s 0s 193308190e-09 0s 0s 193310830e-09 1s 1s 193313790e-09 0s 0s 193318470e-09 0s 0s 193321070e-09 1s 1s 193324030e-09 0s 0s 193328750e-09 0s 0s 193331310e-09 1s 1s 193334270e-09 0s 0s 193339030e-09 0s 0s 193341550e-09 1s 1s 193344510e-09 0s 0s 193349310e-09 0s 0s 193351790e-09 1s 1s 193354750e-09 0s 0s 193359590e-09 0s 0s 193362030e-09 1s 1s 193364990e-09 0s 0s 193369870e-09 0s 0s 193372270e-09 1s 1s 193375230e-09 0s 0s 193380150e-09 0s 0s 193382510e-09 1s 1s 193385470e-09 0s 0s 193390430e-09 0s 0s 193392750e-09 1s 1s 193395710e-09 0s 0s 193400710e-09 0s 0s 193402990e-09 1s 1s 193405950e-09 0s 0s 193410990e-09 0s 0s 193413230e-09 1s 1s 193416190e-09 0s 0s 193421270e-09 0s 0s 193423470e-09 1s 1s 193426430e-09 0s 0s 193431550e-09 0s 0s 193433710e-09 1s 1s 193436670e-09 0s 0s 193441830e-09 0s 0s 193443950e-09 1s 1s 193446910e-09 0s 0s 193452110e-09 0s 0s 193454190e-09 1s 1s 193457150e-09 0s 0s 193462390e-09 0s 0s 193464430e-09 1s 1s 193467390e-09 0s 0s 193472670e-09 0s 0s 193474670e-09 1s 1s 193477630e-09 0s 0s 193482950e-09 0s 0s 193484910e-09 1s 1s 193487870e-09 0s 0s 193493230e-09 0s 0s 193495150e-09 1s 1s 193498110e-09 0s 0s 193503510e-09 0s 0s 193505390e-09 1s 1s 193508350e-09 0s 0s 193513790e-09 0s 0s 193515630e-09 1s 1s 193518590e-09 0s 0s 193524070e-09 0s 0s 193525870e-09 1s 1s 193528830e-09 0s 0s 193534350e-09 0s 0s 193536110e-09 1s 1s 193539070e-09 0s 0s 193544630e-09 0s 0s 193546350e-09 1s 1s 193549310e-09 0s 0s 193554910e-09 0s 0s 193556590e-09 1s 1s 193559550e-09 0s 0s 193565190e-09 0s 0s 193566830e-09 1s 1s 193569790e-09 0s 0s 193575470e-09 0s 0s 193577070e-09 1s 1s 193580030e-09 0s 0s 193585750e-09 0s 0s 193587310e-09 1s 1s 193590270e-09 0s 0s 193596030e-09 0s 0s 193597550e-09 1s 1s 193600510e-09 0s 0s 193606310e-09 0s 0s 193607790e-09 1s 1s 193610750e-09 0s 0s 193616590e-09 0s 0s 193618030e-09 1s 1s 193620990e-09 0s 0s 193626870e-09 0s 0s 193628270e-09 1s 1s 193631230e-09 0s 0s 193637150e-09 0s 0s 193638510e-09 1s 1s 193641470e-09 0s 0s 193647430e-09 0s 0s 193648750e-09 1s 1s 193651710e-09 0s 0s 193657710e-09 0s 0s 193658990e-09 1s 1s 193661950e-09 0s 0s 193667990e-09 0s 0s 193669230e-09 1s 1s 193672190e-09 0s 0s 193678270e-09 0s 0s 193679470e-09 1s 1s 193682430e-09 0s 0s 193688550e-09 0s 0s 193689710e-09 1s 1s 193692670e-09 0s 0s 193698830e-09 0s 0s 193699950e-09 1s 1s 193702910e-09 0s 0s 193709110e-09 0s 0s 193710190e-09 1s 1s 193713150e-09 0s 0s 193719390e-09 0s 0s 193720430e-09 1s 1s 193723390e-09 0s 0s 193729670e-09 0s 0s 193730670e-09 1s 1s 193733630e-09 0s 0s 193739950e-09 0s 0s 193740910e-09 1s 1s 193743870e-09 0s 0s 193750230e-09 0s 0s 193751150e-09 1s 1s 193754110e-09 0s 0s 193760510e-09 0s 0s 193761390e-09 1s 1s 193764350e-09 0s 0s 193770790e-09 0s 0s 193771630e-09 1s 1s 193774590e-09 0s 0s 193781070e-09 0s 0s 193781870e-09 1s 1s 193784830e-09 0s 0s 193791350e-09 0s 0s 193792110e-09 1s 1s 193795070e-09 0s 0s 193801630e-09 0s 0s 193802350e-09 1s 1s 193805310e-09 0s 0s 193811910e-09 0s 0s 193812590e-09 1s 1s 193815550e-09 0s 0s 193822190e-09 0s 0s 193822830e-09 1s 1s 193825790e-09 0s 0s 193832470e-09 0s 0s 193833070e-09 1s 1s 193836030e-09 0s 0s 193842750e-09 0s 0s 193843310e-09 1s 1s 193846270e-09 0s 0s 193853030e-09 0s 0s 193853550e-09 1s 1s 193856510e-09 0s 0s 193863310e-09 0s 0s 193863790e-09 1s 1s 193866750e-09 0s 0s 193873590e-09 0s 0s 193874030e-09 1s 1s 193876990e-09 0s 0s 193883870e-09 0s 0s 193884270e-09 1s 1s 193887230e-09 0s 0s 193894150e-09 0s 0s 193894510e-09 1s 1s 193897470e-09 0s 0s 193904430e-09 0s 0s 193904750e-09 1s 1s 193907710e-09 0s 0s 193914710e-09 0s 0s 193914990e-09 1s 1s 193917950e-09 0s 0s 193924990e-09 0s 0s 193925230e-09 1s 1s 193928190e-09 0s 0s 193935270e-09 0s 0s 193935470e-09 1s 1s 193938430e-09 0s 0s 193945550e-09 0s 0s 193945710e-09 1s 1s 193948670e-09 0s 0s 193955830e-09 0s 0s 193955950e-09 1s 1s 193958910e-09 0s 0s 193966110e-09 0s 0s 193966190e-09 1s 1s 193969150e-09 0s 0s 193976390e-09 0s 0s 193976430e-09 1s 1s 193979390e-09 0s 0s 193986670e-09 1s 1s 193986710e-09 1s 1s 193989670e-09 0s 0s 193996910e-09 1s 1s 193996990e-09 1s 1s 193999910e-09 0s 0s 194007150e-09 1s 1s 194007270e-09 1s 1s 194010150e-09 0s 0s 194017390e-09 1s 1s 194017550e-09 1s 1s 194020390e-09 0s 0s 194027630e-09 1s 1s 194027830e-09 1s 1s 194030630e-09 0s 0s 194037870e-09 1s 1s 194038110e-09 1s 1s 194040870e-09 0s 0s 194048110e-09 1s 1s 194048390e-09 1s 1s 194051110e-09 0s 0s 194058350e-09 1s 1s 194058670e-09 1s 1s 194061350e-09 0s 0s 194068590e-09 1s 1s 194068950e-09 1s 1s 194071590e-09 0s 0s 194078830e-09 1s 1s 194079230e-09 1s 1s 194081830e-09 0s 0s 194089070e-09 1s 1s 194089510e-09 1s 1s 194092070e-09 0s 0s 194099310e-09 1s 1s 194099790e-09 1s 1s 194102310e-09 0s 0s 194109550e-09 1s 1s 194110070e-09 1s 1s 194112550e-09 0s 0s 194119790e-09 1s 1s 194120350e-09 1s 1s 194122790e-09 0s 0s 194130030e-09 1s 1s 194130630e-09 1s 1s 194133030e-09 0s 0s 194140270e-09 1s 1s 194140910e-09 1s 1s 194143270e-09 0s 0s 194150510e-09 1s 1s 194151190e-09 1s 1s 194153510e-09 0s 0s 194160750e-09 1s 1s 194161470e-09 1s 1s 194163750e-09 0s 0s 194170990e-09 1s 1s 194171750e-09 1s 1s 194173990e-09 0s 0s 194181230e-09 1s 1s 194182030e-09 1s 1s 194184230e-09 0s 0s 194191470e-09 1s 1s 194192310e-09 1s 1s 194194470e-09 0s 0s 194201710e-09 1s 1s 194202590e-09 1s 1s 194204710e-09 0s 0s 194211950e-09 1s 1s 194212870e-09 1s 1s 194214950e-09 0s 0s 194222190e-09 1s 1s 194223150e-09 1s 1s 194225190e-09 0s 0s 194232430e-09 1s 1s 194233430e-09 1s 1s 194235430e-09 0s 0s 194242670e-09 1s 1s 194243710e-09 1s 1s 194245670e-09 0s 0s 194252910e-09 1s 1s 194253990e-09 1s 1s 194255910e-09 0s 0s 194263150e-09 1s 1s 194264270e-09 1s 1s 194266150e-09 0s 0s 194273390e-09 1s 1s 194274550e-09 1s 1s 194276390e-09 0s 0s 194283630e-09 1s 1s 194284830e-09 1s 1s 194286630e-09 0s 0s 194293870e-09 1s 1s 194295110e-09 1s 1s 194296870e-09 0s 0s 194304110e-09 1s 1s 194305390e-09 1s 1s 194307110e-09 0s 0s 194314350e-09 1s 1s 194315670e-09 1s 1s 194317350e-09 0s 0s 194324590e-09 1s 1s 194325950e-09 1s 1s 194327590e-09 0s 0s 194334830e-09 1s 1s 194336230e-09 1s 1s 194337830e-09 0s 0s 194345070e-09 1s 1s 194346510e-09 1s 1s 194348070e-09 0s 0s 194355310e-09 1s 1s 194356790e-09 1s 1s 194358310e-09 0s 0s 194365550e-09 1s 1s 194367070e-09 1s 1s 194368550e-09 0s 0s 194375790e-09 1s 1s 194377350e-09 1s 1s 194378790e-09 0s 0s 194386030e-09 1s 1s 194387630e-09 1s 1s 194389030e-09 0s 0s 194396270e-09 1s 1s 194397910e-09 1s 1s 194399270e-09 0s 0s 194406510e-09 1s 1s 194408190e-09 1s 1s 194409510e-09 0s 0s 194416750e-09 1s 1s 194418470e-09 1s 1s 194419750e-09 0s 0s 194426990e-09 1s 1s 194428750e-09 1s 1s 194429990e-09 0s 0s 194437230e-09 1s 1s 194439030e-09 1s 1s 194440230e-09 0s 0s 194447470e-09 1s 1s 194449310e-09 1s 1s 194450470e-09 0s 0s 194457710e-09 1s 1s 194459590e-09 1s 1s 194460710e-09 0s 0s 194467950e-09 1s 1s 194469870e-09 1s 1s 194470950e-09 0s 0s 194478190e-09 1s 1s 194480150e-09 1s 1s 194481190e-09 0s 0s 194488430e-09 1s 1s 194490430e-09 1s 1s 194491430e-09 0s 0s 194498670e-09 1s 1s 194500710e-09 1s 1s 194501670e-09 0s 0s 194508910e-09 1s 1s 194510990e-09 1s 1s 194511910e-09 0s 0s 194519150e-09 1s 1s 194521270e-09 1s 1s 194522150e-09 0s 0s 194529390e-09 1s 1s 194531550e-09 1s 1s 194532390e-09 0s 0s 194539630e-09 1s 1s 194541830e-09 1s 1s 194542630e-09 0s 0s 194549870e-09 1s 1s 194552110e-09 1s 1s 194552870e-09 0s 0s 194560110e-09 1s 1s 194562390e-09 1s 1s 194563110e-09 0s 0s 194570350e-09 1s 1s 194572670e-09 1s 1s 194573350e-09 0s 0s 194580590e-09 1s 1s 194582950e-09 1s 1s 194583590e-09 0s 0s 194590830e-09 1s 1s 194593230e-09 1s 1s 194593830e-09 0s 0s 194601070e-09 1s 1s 194603510e-09 1s 1s 194604070e-09 0s 0s 194611310e-09 1s 1s 194613790e-09 1s 1s 194614310e-09 0s 0s 194621550e-09 1s 1s 194624070e-09 1s 1s 194624550e-09 0s 0s 194631790e-09 1s 1s 194634350e-09 1s 1s 194634790e-09 0s 0s 194642030e-09 1s 1s 194644630e-09 1s 1s 194645030e-09 0s 0s 194652270e-09 1s 1s 194654910e-09 1s 1s 194655270e-09 0s 0s 194662510e-09 1s 1s 194665190e-09 1s 1s 194665510e-09 0s 0s 194672750e-09 1s 1s 194675470e-09 1s 1s 194675750e-09 0s 0s 194682990e-09 1s 1s 194685750e-09 1s 1s 194685990e-09 0s 0s 194693230e-09 1s 1s 194696030e-09 1s 1s 194696230e-09 0s 0s 194703470e-09 1s 1s 194706310e-09 1s 1s 194706470e-09 0s 0s 194713710e-09 1s 1s 194716590e-09 1s 1s 194716710e-09 0s 0s 194723950e-09 1s 1s 194726870e-09 1s 1s 194726950e-09 0s 0s 194734190e-09 1s 1s 194737150e-09 1s 1s 194737190e-09 0s 0s 194744430e-09 1s 1s 194747430e-09 0s 0s 194754670e-09 1s 1s 194757670e-09 0s 0s 194757710e-09 0s 0s 194764910e-09 1s 1s 194767910e-09 0s 0s 194767990e-09 0s 0s 194775150e-09 1s 1s 194778150e-09 0s 0s 194778270e-09 0s 0s 194785390e-09 1s 1s 194788390e-09 0s 0s 194788550e-09 0s 0s 194795630e-09 1s 1s 194798630e-09 0s 0s 194798830e-09 0s 0s 194805870e-09 1s 1s 194808870e-09 0s 0s 194809110e-09 0s 0s 194816110e-09 1s 1s 194819110e-09 0s 0s 194819390e-09 0s 0s 194826350e-09 1s 1s 194829350e-09 0s 0s 194829670e-09 0s 0s 194836590e-09 1s 1s 194839590e-09 0s 0s 194839950e-09 0s 0s 194846830e-09 1s 1s 194849830e-09 0s 0s 194850230e-09 0s 0s 194857070e-09 1s 1s 194860070e-09 0s 0s 194860510e-09 0s 0s 194867310e-09 1s 1s 194870310e-09 0s 0s 194870790e-09 0s 0s 194877550e-09 1s 1s 194880550e-09 0s 0s 194881070e-09 0s 0s 194887790e-09 1s 1s 194890790e-09 0s 0s 194891350e-09 0s 0s 194898030e-09 1s 1s 194901030e-09 0s 0s 194901630e-09 0s 0s 194908270e-09 1s 1s 194911270e-09 0s 0s 194911910e-09 0s 0s 194918510e-09 1s 1s 194921510e-09 0s 0s 194922190e-09 0s 0s 194928750e-09 1s 1s 194931750e-09 0s 0s 194932470e-09 0s 0s 194938990e-09 1s 1s 194941990e-09 0s 0s 194942750e-09 0s 0s 194949230e-09 1s 1s 194952230e-09 0s 0s 194953030e-09 0s 0s 194959470e-09 1s 1s 194962470e-09 0s 0s 194963310e-09 0s 0s 194969710e-09 1s 1s 194972710e-09 0s 0s 194973590e-09 0s 0s 194979950e-09 1s 1s 194982950e-09 0s 0s 194983870e-09 0s 0s 194990190e-09 1s 1s 194993190e-09 0s 0s 194994150e-09 0s 0s 195000430e-09 1s 1s 195003430e-09 0s 0s 195004430e-09 0s 0s 195010670e-09 1s 1s 195013670e-09 0s 0s 195014710e-09 0s 0s 195020910e-09 1s 1s 195023910e-09 0s 0s 195024990e-09 0s 0s 195031150e-09 1s 1s 195034150e-09 0s 0s 195035270e-09 0s 0s 195041390e-09 1s 1s 195044390e-09 0s 0s 195045550e-09 0s 0s 195051630e-09 1s 1s 195054630e-09 0s 0s 195055830e-09 0s 0s 195061870e-09 1s 1s 195064870e-09 0s 0s 195066110e-09 0s 0s 195072110e-09 1s 1s 195075110e-09 0s 0s 195076390e-09 0s 0s 195082350e-09 1s 1s 195085350e-09 0s 0s 195086670e-09 0s 0s 195092590e-09 1s 1s 195095590e-09 0s 0s 195096950e-09 0s 0s 195102830e-09 1s 1s 195105830e-09 0s 0s 195107230e-09 0s 0s 195113070e-09 1s 1s 195116070e-09 0s 0s 195117510e-09 0s 0s 195123310e-09 1s 1s 195126310e-09 0s 0s 195127790e-09 0s 0s 195133550e-09 1s 1s 195136550e-09 0s 0s 195138070e-09 0s 0s 195143790e-09 1s 1s 195146790e-09 0s 0s 195148350e-09 0s 0s 195154030e-09 1s 1s 195157030e-09 0s 0s 195158630e-09 0s 0s 195164270e-09 1s 1s 195167270e-09 0s 0s 195168910e-09 0s 0s 195174510e-09 1s 1s 195177510e-09 0s 0s 195179190e-09 0s 0s 195184750e-09 1s 1s 195187750e-09 0s 0s 195189470e-09 0s 0s 195194990e-09 1s 1s 195197990e-09 0s 0s 195199750e-09 0s 0s 195205230e-09 1s 1s 195208230e-09 0s 0s 195210030e-09 0s 0s 195215470e-09 1s 1s 195218470e-09 0s 0s 195220310e-09 0s 0s 195225710e-09 1s 1s 195228710e-09 0s 0s 195230590e-09 0s 0s 195235950e-09 1s 1s 195238950e-09 0s 0s 195240870e-09 0s 0s 195246190e-09 1s 1s 195249190e-09 0s 0s 195251150e-09 0s 0s 195256430e-09 1s 1s 195259430e-09 0s 0s 195261430e-09 0s 0s 195266670e-09 1s 1s 195269670e-09 0s 0s 195271710e-09 0s 0s 195276910e-09 1s 1s 195279910e-09 0s 0s 195281990e-09 0s 0s 195287150e-09 1s 1s 195290150e-09 0s 0s 195292270e-09 0s 0s 195297390e-09 1s 1s 195300390e-09 0s 0s 195302550e-09 0s 0s 195307630e-09 1s 1s 195310630e-09 0s 0s 195312830e-09 0s 0s 195317870e-09 1s 1s 195320870e-09 0s 0s 195323110e-09 0s 0s 195328110e-09 1s 1s 195331110e-09 0s 0s 195333390e-09 0s 0s 195338350e-09 1s 1s 195341350e-09 0s 0s 195343670e-09 0s 0s 195348590e-09 1s 1s 195351590e-09 0s 0s 195353950e-09 0s 0s 195358830e-09 1s 1s 195361830e-09 0s 0s 195364230e-09 0s 0s 195369070e-09 1s 1s 195372070e-09 0s 0s 195374510e-09 0s 0s 195379310e-09 1s 1s 195382310e-09 0s 0s 195384790e-09 0s 0s 195389550e-09 1s 1s 195392550e-09 0s 0s 195395070e-09 0s 0s 195399790e-09 1s 1s 195402790e-09 0s 0s 195405350e-09 0s 0s 195410030e-09 1s 1s 195413030e-09 0s 0s 195415630e-09 0s 0s 195420270e-09 1s 1s 195423270e-09 0s 0s 195425910e-09 0s 0s 195430510e-09 1s 1s 195433510e-09 0s 0s 195436190e-09 0s 0s 195440750e-09 1s 1s 195443750e-09 0s 0s 195446470e-09 0s 0s 195450990e-09 1s 1s 195453990e-09 0s 0s 195456750e-09 0s 0s 195461230e-09 1s 1s 195464230e-09 0s 0s 195467030e-09 0s 0s 195471470e-09 1s 1s 195474470e-09 0s 0s 195477310e-09 0s 0s 195481710e-09 1s 1s 195484710e-09 0s 0s 195487590e-09 0s 0s 195491950e-09 1s 1s 195494950e-09 0s 0s 195497870e-09 0s 0s 195502190e-09 1s 1s 195505190e-09 0s 0s 195508150e-09 0s 0s 195512430e-09 1s 1s 195515430e-09 0s 0s 195518430e-09 0s 0s 195522670e-09 1s 1s 195525670e-09 0s 0s 195528710e-09 0s 0s 195532910e-09 1s 1s 195535910e-09 0s 0s 195538990e-09 0s 0s 195543150e-09 1s 1s 195546150e-09 0s 0s 195549270e-09 0s 0s 195553390e-09 1s 1s 195556390e-09 0s 0s 195559550e-09 0s 0s 195563630e-09 1s 1s 195566630e-09 0s 0s 195569830e-09 0s 0s 195573870e-09 1s 1s 195576870e-09 0s 0s 195580110e-09 0s 0s 195584110e-09 1s 1s 195587110e-09 0s 0s 195590390e-09 0s 0s 195594350e-09 1s 1s 195597350e-09 0s 0s 195600670e-09 0s 0s 195604590e-09 1s 1s 195607590e-09 0s 0s 195610950e-09 0s 0s 195614830e-09 1s 1s 195617830e-09 0s 0s 195621230e-09 0s 0s 195625070e-09 1s 1s 195628070e-09 0s 0s 195631510e-09 0s 0s 195635310e-09 1s 1s 195638310e-09 0s 0s 195641790e-09 0s 0s 195645550e-09 1s 1s 195648550e-09 0s 0s 195652070e-09 0s 0s 195655790e-09 1s 1s 195658790e-09 0s 0s 195662350e-09 0s 0s 195666030e-09 1s 1s 195669030e-09 0s 0s 195672630e-09 0s 0s 195676270e-09 1s 1s 195679270e-09 0s 0s 195682910e-09 0s 0s 195686510e-09 1s 1s 195689510e-09 0s 0s 195693190e-09 0s 0s 195696750e-09 1s 1s 195699750e-09 0s 0s 195703470e-09 0s 0s 195706990e-09 1s 1s 195709990e-09 0s 0s 195713750e-09 0s 0s 195717230e-09 1s 1s 195720230e-09 0s 0s 195724030e-09 0s 0s 195727470e-09 1s 1s 195730470e-09 0s 0s 195734310e-09 0s 0s 195737710e-09 1s 1s 195740710e-09 0s 0s 195744590e-09 0s 0s 195747950e-09 1s 1s 195750950e-09 0s 0s 195754870e-09 0s 0s 195758190e-09 1s 1s 195761190e-09 0s 0s 195765150e-09 0s 0s 195768430e-09 1s 1s 195771430e-09 0s 0s 195775430e-09 0s 0s 195778670e-09 1s 1s 195781670e-09 0s 0s 195785710e-09 0s 0s 195788910e-09 1s 1s 195791910e-09 0s 0s 195795990e-09 0s 0s 195799150e-09 1s 1s 195802150e-09 0s 0s 195806270e-09 0s 0s 195809390e-09 1s 1s 195812390e-09 0s 0s 195816550e-09 0s 0s 195819630e-09 1s 1s 195822630e-09 0s 0s 195826830e-09 0s 0s 195829870e-09 1s 1s 195832870e-09 0s 0s 195837110e-09 0s 0s 195840110e-09 1s 1s 195843110e-09 0s 0s 195847390e-09 0s 0s 195850350e-09 1s 1s 195853350e-09 0s 0s 195857670e-09 0s 0s 195860590e-09 1s 1s 195863590e-09 0s 0s 195867950e-09 0s 0s 195870830e-09 1s 1s 195873830e-09 0s 0s 195878230e-09 0s 0s 195881070e-09 1s 1s 195884070e-09 0s 0s 195888510e-09 0s 0s 195891310e-09 1s 1s 195894310e-09 0s 0s 195898790e-09 0s 0s 195901550e-09 1s 1s 195904550e-09 0s 0s 195909070e-09 0s 0s 195911790e-09 1s 1s 195914790e-09 0s 0s 195919350e-09 0s 0s 195922030e-09 1s 1s 195925030e-09 0s 0s 195929630e-09 0s 0s 195932270e-09 1s 1s 195935270e-09 0s 0s 195939910e-09 0s 0s 195942510e-09 1s 1s 195945510e-09 0s 0s 195950190e-09 0s 0s 195952750e-09 1s 1s 195955750e-09 0s 0s 195960470e-09 0s 0s 195962990e-09 1s 1s 195965990e-09 0s 0s 195970750e-09 0s 0s 195973230e-09 1s 1s 195976230e-09 0s 0s 195981030e-09 0s 0s 195983470e-09 1s 1s 195986470e-09 0s 0s 195991310e-09 0s 0s 195993710e-09 1s 1s 195996710e-09 0s 0s 196001590e-09 0s 0s 196003950e-09 1s 1s 196006950e-09 0s 0s 196011870e-09 0s 0s 196014190e-09 1s 1s 196017190e-09 0s 0s 196022150e-09 0s 0s 196024430e-09 1s 1s 196027430e-09 0s 0s 196032430e-09 0s 0s 196034670e-09 1s 1s 196037670e-09 0s 0s 196042710e-09 0s 0s 196044910e-09 1s 1s 196047910e-09 0s 0s 196052990e-09 0s 0s 196055150e-09 1s 1s 196058150e-09 0s 0s 196063270e-09 0s 0s 196065390e-09 1s 1s 196068390e-09 0s 0s 196073550e-09 0s 0s 196075630e-09 1s 1s 196078630e-09 0s 0s 196083830e-09 0s 0s 196085870e-09 1s 1s 196088870e-09 0s 0s 196094110e-09 0s 0s 196096110e-09 1s 1s 196099110e-09 0s 0s 196104390e-09 0s 0s 196106350e-09 1s 1s 196109350e-09 0s 0s 196114670e-09 0s 0s 196116590e-09 1s 1s 196119590e-09 0s 0s 196124950e-09 0s 0s 196126830e-09 1s 1s 196129830e-09 0s 0s 196135230e-09 0s 0s 196137070e-09 1s 1s 196140070e-09 0s 0s 196145510e-09 0s 0s 196147310e-09 1s 1s 196150310e-09 0s 0s 196155790e-09 0s 0s 196157550e-09 1s 1s 196160550e-09 0s 0s 196166070e-09 0s 0s 196167790e-09 1s 1s 196170790e-09 0s 0s 196176350e-09 0s 0s 196178030e-09 1s 1s 196181030e-09 0s 0s 196186630e-09 0s 0s 196188270e-09 1s 1s 196191270e-09 0s 0s 196196910e-09 0s 0s 196198510e-09 1s 1s 196201510e-09 0s 0s 196207190e-09 0s 0s 196208750e-09 1s 1s 196211750e-09 0s 0s 196217470e-09 0s 0s 196218990e-09 1s 1s 196221990e-09 0s 0s 196227750e-09 0s 0s 196229230e-09 1s 1s 196232230e-09 0s 0s 196238030e-09 0s 0s 196239470e-09 1s 1s 196242470e-09 0s 0s 196248310e-09 0s 0s 196249710e-09 1s 1s 196252710e-09 0s 0s 196258590e-09 0s 0s 196259950e-09 1s 1s 196262950e-09 0s 0s 196268870e-09 0s 0s 196270190e-09 1s 1s 196273190e-09 0s 0s 196279150e-09 0s 0s 196280430e-09 1s 1s 196283430e-09 0s 0s 196289430e-09 0s 0s 196290670e-09 1s 1s 196293670e-09 0s 0s 196299710e-09 0s 0s 196300910e-09 1s 1s 196303910e-09 0s 0s 196309990e-09 0s 0s 196311150e-09 1s 1s 196314150e-09 0s 0s 196320270e-09 0s 0s 196321390e-09 1s 1s 196324390e-09 0s 0s 196330550e-09 0s 0s 196331630e-09 1s 1s 196334630e-09 0s 0s 196340830e-09 0s 0s 196341870e-09 1s 1s 196344870e-09 0s 0s 196351110e-09 0s 0s 196352110e-09 1s 1s 196355110e-09 0s 0s 196361390e-09 0s 0s 196362350e-09 1s 1s 196365350e-09 0s 0s 196371670e-09 0s 0s 196372590e-09 1s 1s 196375590e-09 0s 0s 196381950e-09 0s 0s 196382830e-09 1s 1s 196385830e-09 0s 0s 196392230e-09 0s 0s 196393070e-09 1s 1s 196396070e-09 0s 0s 196402510e-09 0s 0s 196403310e-09 1s 1s 196406310e-09 0s 0s 196412790e-09 0s 0s 196413550e-09 1s 1s 196416550e-09 0s 0s 196423070e-09 0s 0s 196423790e-09 1s 1s 196426790e-09 0s 0s 196433350e-09 0s 0s 196434030e-09 1s 1s 196437030e-09 0s 0s 196443630e-09 0s 0s 196444270e-09 1s 1s 196447270e-09 0s 0s 196453910e-09 0s 0s 196454510e-09 1s 1s 196457510e-09 0s 0s 196464190e-09 0s 0s 196464750e-09 1s 1s 196467750e-09 0s 0s 196474470e-09 0s 0s 196474990e-09 1s 1s 196477990e-09 0s 0s 196484750e-09 0s 0s 196485230e-09 1s 1s 196488230e-09 0s 0s 196495030e-09 0s 0s 196495470e-09 1s 1s 196498470e-09 0s 0s 196505310e-09 0s 0s 196505710e-09 1s 1s 196508710e-09 0s 0s 196515590e-09 0s 0s 196515950e-09 1s 1s 196518950e-09 0s 0s 196525870e-09 0s 0s 196526190e-09 1s 1s 196529190e-09 0s 0s 196536150e-09 0s 0s 196536430e-09 1s 1s 196539430e-09 0s 0s 196546430e-09 0s 0s 196546670e-09 1s 1s 196549670e-09 0s 0s 196556710e-09 0s 0s 196556910e-09 1s 1s 196559910e-09 0s 0s 196566990e-09 0s 0s 196567150e-09 1s 1s 196570150e-09 0s 0s 196577270e-09 0s 0s 196577390e-09 1s 1s 196580390e-09 0s 0s 196587550e-09 0s 0s 196587630e-09 1s 1s 196590630e-09 0s 0s 196597830e-09 0s 0s 196597870e-09 1s 1s 196600870e-09 0s 0s 196608110e-09 1s 1s 196608150e-09 1s 1s 196611150e-09 0s 0s 196618350e-09 1s 1s 196618430e-09 1s 1s 196621390e-09 0s 0s 196628590e-09 1s 1s 196628710e-09 1s 1s 196631630e-09 0s 0s 196638830e-09 1s 1s 196638990e-09 1s 1s 196641870e-09 0s 0s 196649070e-09 1s 1s 196649270e-09 1s 1s 196652110e-09 0s 0s 196659310e-09 1s 1s 196659550e-09 1s 1s 196662350e-09 0s 0s 196669550e-09 1s 1s 196669830e-09 1s 1s 196672590e-09 0s 0s 196679790e-09 1s 1s 196680110e-09 1s 1s 196682830e-09 0s 0s 196690030e-09 1s 1s 196690390e-09 1s 1s 196693070e-09 0s 0s 196700270e-09 1s 1s 196700670e-09 1s 1s 196703310e-09 0s 0s 196710510e-09 1s 1s 196710950e-09 1s 1s 196713550e-09 0s 0s 196720750e-09 1s 1s 196721230e-09 1s 1s 196723790e-09 0s 0s 196730990e-09 1s 1s 196731510e-09 1s 1s 196734030e-09 0s 0s 196741230e-09 1s 1s 196741790e-09 1s 1s 196744270e-09 0s 0s 196751470e-09 1s 1s 196752070e-09 1s 1s 196754510e-09 0s 0s 196761710e-09 1s 1s 196762350e-09 1s 1s 196764750e-09 0s 0s 196771950e-09 1s 1s 196772630e-09 1s 1s 196774990e-09 0s 0s 196782190e-09 1s 1s 196782910e-09 1s 1s 196785230e-09 0s 0s 196792430e-09 1s 1s 196793190e-09 1s 1s 196795470e-09 0s 0s 196802670e-09 1s 1s 196803470e-09 1s 1s 196805710e-09 0s 0s 196812910e-09 1s 1s 196813750e-09 1s 1s 196815950e-09 0s 0s 196823150e-09 1s 1s 196824030e-09 1s 1s 196826190e-09 0s 0s 196833390e-09 1s 1s 196834310e-09 1s 1s 196836430e-09 0s 0s 196843630e-09 1s 1s 196844590e-09 1s 1s 196846670e-09 0s 0s 196853870e-09 1s 1s 196854870e-09 1s 1s 196856910e-09 0s 0s 196864110e-09 1s 1s 196865150e-09 1s 1s 196867150e-09 0s 0s 196874350e-09 1s 1s 196875430e-09 1s 1s 196877390e-09 0s 0s 196884590e-09 1s 1s 196885710e-09 1s 1s 196887630e-09 0s 0s 196894830e-09 1s 1s 196895990e-09 1s 1s 196897870e-09 0s 0s 196905070e-09 1s 1s 196906270e-09 1s 1s 196908110e-09 0s 0s 196915310e-09 1s 1s 196916550e-09 1s 1s 196918350e-09 0s 0s 196925550e-09 1s 1s 196926830e-09 1s 1s 196928590e-09 0s 0s 196935790e-09 1s 1s 196937110e-09 1s 1s 196938830e-09 0s 0s 196946030e-09 1s 1s 196947390e-09 1s 1s 196949070e-09 0s 0s 196956270e-09 1s 1s 196957670e-09 1s 1s 196959310e-09 0s 0s 196966510e-09 1s 1s 196967950e-09 1s 1s 196969550e-09 0s 0s 196976750e-09 1s 1s 196978230e-09 1s 1s 196979790e-09 0s 0s 196986990e-09 1s 1s 196988510e-09 1s 1s 196990030e-09 0s 0s 196997230e-09 1s 1s 196998790e-09 1s 1s 197000270e-09 0s 0s 197007470e-09 1s 1s 197009070e-09 1s 1s 197010510e-09 0s 0s 197017710e-09 1s 1s 197019350e-09 1s 1s 197020750e-09 0s 0s 197027950e-09 1s 1s 197029630e-09 1s 1s 197030990e-09 0s 0s 197038190e-09 1s 1s 197039910e-09 1s 1s 197041230e-09 0s 0s 197048430e-09 1s 1s 197050190e-09 1s 1s 197051470e-09 0s 0s 197058670e-09 1s 1s 197060470e-09 1s 1s 197061710e-09 0s 0s 197068910e-09 1s 1s 197070750e-09 1s 1s 197071950e-09 0s 0s 197079150e-09 1s 1s 197081030e-09 1s 1s 197082190e-09 0s 0s 197089390e-09 1s 1s 197091310e-09 1s 1s 197092430e-09 0s 0s 197099630e-09 1s 1s 197101590e-09 1s 1s 197102670e-09 0s 0s 197109870e-09 1s 1s 197111870e-09 1s 1s 197112910e-09 0s 0s 197120110e-09 1s 1s 197122150e-09 1s 1s 197123150e-09 0s 0s 197130350e-09 1s 1s 197132430e-09 1s 1s 197133390e-09 0s 0s 197140590e-09 1s 1s 197142710e-09 1s 1s 197143630e-09 0s 0s 197150830e-09 1s 1s 197152990e-09 1s 1s 197153870e-09 0s 0s 197161070e-09 1s 1s 197163270e-09 1s 1s 197164110e-09 0s 0s 197171310e-09 1s 1s 197173550e-09 1s 1s 197174350e-09 0s 0s 197181550e-09 1s 1s 197183830e-09 1s 1s 197184590e-09 0s 0s 197191790e-09 1s 1s 197194110e-09 1s 1s 197194830e-09 0s 0s 197202030e-09 1s 1s 197204390e-09 1s 1s 197205070e-09 0s 0s 197212270e-09 1s 1s 197214670e-09 1s 1s 197215310e-09 0s 0s 197222510e-09 1s 1s 197224950e-09 1s 1s 197225550e-09 0s 0s 197232750e-09 1s 1s 197235230e-09 1s 1s 197235790e-09 0s 0s 197242990e-09 1s 1s 197245510e-09 1s 1s 197246030e-09 0s 0s 197253230e-09 1s 1s 197255790e-09 1s 1s 197256270e-09 0s 0s 197263470e-09 1s 1s 197266070e-09 1s 1s 197266510e-09 0s 0s 197273710e-09 1s 1s 197276350e-09 1s 1s 197276750e-09 0s 0s 197283950e-09 1s 1s 197286630e-09 1s 1s 197286990e-09 0s 0s 197294190e-09 1s 1s 197296910e-09 1s 1s 197297230e-09 0s 0s 197304430e-09 1s 1s 197307190e-09 1s 1s 197307470e-09 0s 0s 197314670e-09 1s 1s 197317470e-09 1s 1s 197317710e-09 0s 0s 197324910e-09 1s 1s 197327750e-09 1s 1s 197327950e-09 0s 0s 197335150e-09 1s 1s 197338030e-09 1s 1s 197338190e-09 0s 0s 197345390e-09 1s 1s 197348310e-09 1s 1s 197348430e-09 0s 0s 197355630e-09 1s 1s 197358590e-09 1s 1s 197358670e-09 0s 0s 197365870e-09 1s 1s 197368870e-09 1s 1s 197368910e-09 0s 0s 197376110e-09 1s 1s 197379150e-09 0s 0s 197386350e-09 1s 1s 197389390e-09 0s 0s 197389430e-09 0s 0s 197396590e-09 1s 1s 197399630e-09 0s 0s 197399710e-09 0s 0s 197406830e-09 1s 1s 197409870e-09 0s 0s 197409990e-09 0s 0s 197417070e-09 1s 1s 197420110e-09 0s 0s 197420270e-09 0s 0s 197427310e-09 1s 1s 197430350e-09 0s 0s 197430550e-09 0s 0s 197437550e-09 1s 1s 197440590e-09 0s 0s 197440830e-09 0s 0s 197447790e-09 1s 1s 197450830e-09 0s 0s 197451110e-09 0s 0s 197458030e-09 1s 1s 197461070e-09 0s 0s 197461390e-09 0s 0s 197468270e-09 1s 1s 197471310e-09 0s 0s 197471670e-09 0s 0s 197478510e-09 1s 1s 197481550e-09 0s 0s 197481950e-09 0s 0s 197488750e-09 1s 1s 197491790e-09 0s 0s 197492230e-09 0s 0s 197498990e-09 1s 1s 197502030e-09 0s 0s 197502510e-09 0s 0s 197509230e-09 1s 1s 197512270e-09 0s 0s 197512790e-09 0s 0s 197519470e-09 1s 1s 197522510e-09 0s 0s 197523070e-09 0s 0s 197529710e-09 1s 1s 197532750e-09 0s 0s 197533350e-09 0s 0s 197539950e-09 1s 1s 197542990e-09 0s 0s 197543630e-09 0s 0s 197550190e-09 1s 1s 197553230e-09 0s 0s 197553910e-09 0s 0s 197560430e-09 1s 1s 197563470e-09 0s 0s 197564190e-09 0s 0s 197570670e-09 1s 1s 197573710e-09 0s 0s 197574470e-09 0s 0s 197580910e-09 1s 1s 197583950e-09 0s 0s 197584750e-09 0s 0s 197591150e-09 1s 1s 197594190e-09 0s 0s 197595030e-09 0s 0s 197601390e-09 1s 1s 197604430e-09 0s 0s 197605310e-09 0s 0s 197611630e-09 1s 1s 197614670e-09 0s 0s 197615590e-09 0s 0s 197621870e-09 1s 1s 197624910e-09 0s 0s 197625870e-09 0s 0s 197632110e-09 1s 1s 197635150e-09 0s 0s 197636150e-09 0s 0s 197642350e-09 1s 1s 197645390e-09 0s 0s 197646430e-09 0s 0s 197652590e-09 1s 1s 197655630e-09 0s 0s 197656710e-09 0s 0s 197662830e-09 1s 1s 197665870e-09 0s 0s 197666990e-09 0s 0s 197673070e-09 1s 1s 197676110e-09 0s 0s 197677270e-09 0s 0s 197683310e-09 1s 1s 197686350e-09 0s 0s 197687550e-09 0s 0s 197693550e-09 1s 1s 197696590e-09 0s 0s 197697830e-09 0s 0s 197703790e-09 1s 1s 197706830e-09 0s 0s 197708110e-09 0s 0s 197714030e-09 1s 1s 197717070e-09 0s 0s 197718390e-09 0s 0s 197724270e-09 1s 1s 197727310e-09 0s 0s 197728670e-09 0s 0s 197734510e-09 1s 1s 197737550e-09 0s 0s 197738950e-09 0s 0s 197744750e-09 1s 1s 197747790e-09 0s 0s 197749230e-09 0s 0s 197754990e-09 1s 1s 197758030e-09 0s 0s 197759510e-09 0s 0s 197765230e-09 1s 1s 197768270e-09 0s 0s 197769790e-09 0s 0s 197775470e-09 1s 1s 197778510e-09 0s 0s 197780070e-09 0s 0s 197785710e-09 1s 1s 197788750e-09 0s 0s 197790350e-09 0s 0s 197795950e-09 1s 1s 197798990e-09 0s 0s 197800630e-09 0s 0s 197806190e-09 1s 1s 197809230e-09 0s 0s 197810910e-09 0s 0s 197816430e-09 1s 1s 197819470e-09 0s 0s 197821190e-09 0s 0s 197826670e-09 1s 1s 197829710e-09 0s 0s 197831470e-09 0s 0s 197836910e-09 1s 1s 197839950e-09 0s 0s 197841750e-09 0s 0s 197847150e-09 1s 1s 197850190e-09 0s 0s 197852030e-09 0s 0s 197857390e-09 1s 1s 197860430e-09 0s 0s 197862310e-09 0s 0s 197867630e-09 1s 1s 197870670e-09 0s 0s 197872590e-09 0s 0s 197877870e-09 1s 1s 197880910e-09 0s 0s 197882870e-09 0s 0s 197888110e-09 1s 1s 197891150e-09 0s 0s 197893150e-09 0s 0s 197898350e-09 1s 1s 197901390e-09 0s 0s 197903430e-09 0s 0s 197908590e-09 1s 1s 197911630e-09 0s 0s 197913710e-09 0s 0s 197918830e-09 1s 1s 197921870e-09 0s 0s 197923990e-09 0s 0s 197929070e-09 1s 1s 197932110e-09 0s 0s 197934270e-09 0s 0s 197939310e-09 1s 1s 197942350e-09 0s 0s 197944550e-09 0s 0s 197949550e-09 1s 1s 197952590e-09 0s 0s 197954830e-09 0s 0s 197959790e-09 1s 1s 197962830e-09 0s 0s 197965110e-09 0s 0s 197970030e-09 1s 1s 197973070e-09 0s 0s 197975390e-09 0s 0s 197980270e-09 1s 1s 197983310e-09 0s 0s 197985670e-09 0s 0s 197990510e-09 1s 1s 197993550e-09 0s 0s 197995950e-09 0s 0s 198000750e-09 1s 1s 198003790e-09 0s 0s 198006230e-09 0s 0s 198010990e-09 1s 1s 198014030e-09 0s 0s 198016510e-09 0s 0s 198021230e-09 1s 1s 198024270e-09 0s 0s 198026790e-09 0s 0s 198031470e-09 1s 1s 198034510e-09 0s 0s 198037070e-09 0s 0s 198041710e-09 1s 1s 198044750e-09 0s 0s 198047350e-09 0s 0s 198051950e-09 1s 1s 198054990e-09 0s 0s 198057630e-09 0s 0s 198062190e-09 1s 1s 198065230e-09 0s 0s 198067910e-09 0s 0s 198072430e-09 1s 1s 198075470e-09 0s 0s 198078190e-09 0s 0s 198082670e-09 1s 1s 198085710e-09 0s 0s 198088470e-09 0s 0s 198092910e-09 1s 1s 198095950e-09 0s 0s 198098750e-09 0s 0s 198103150e-09 1s 1s 198106190e-09 0s 0s 198109030e-09 0s 0s 198113390e-09 1s 1s 198116430e-09 0s 0s 198119310e-09 0s 0s 198123630e-09 1s 1s 198126670e-09 0s 0s 198129590e-09 0s 0s 198133870e-09 1s 1s 198136910e-09 0s 0s 198139870e-09 0s 0s 198144110e-09 1s 1s 198147150e-09 0s 0s 198150150e-09 0s 0s 198154350e-09 1s 1s 198157390e-09 0s 0s 198160430e-09 0s 0s 198164590e-09 1s 1s 198167630e-09 0s 0s 198170710e-09 0s 0s 198174830e-09 1s 1s 198177870e-09 0s 0s 198180990e-09 0s 0s 198185070e-09 1s 1s 198188110e-09 0s 0s 198191270e-09 0s 0s 198195310e-09 1s 1s 198198350e-09 0s 0s 198201550e-09 0s 0s 198205550e-09 1s 1s 198208590e-09 0s 0s 198211830e-09 0s 0s 198215790e-09 1s 1s 198218830e-09 0s 0s 198222110e-09 0s 0s 198226030e-09 1s 1s 198229070e-09 0s 0s 198232390e-09 0s 0s 198236270e-09 1s 1s 198239310e-09 0s 0s 198242670e-09 0s 0s 198246510e-09 1s 1s 198249550e-09 0s 0s 198252950e-09 0s 0s 198256750e-09 1s 1s 198259790e-09 0s 0s 198263230e-09 0s 0s 198266990e-09 1s 1s 198270030e-09 0s 0s 198273510e-09 0s 0s 198277230e-09 1s 1s 198280270e-09 0s 0s 198283790e-09 0s 0s 198287470e-09 1s 1s 198290510e-09 0s 0s 198294070e-09 0s 0s 198297710e-09 1s 1s 198300750e-09 0s 0s 198304350e-09 0s 0s 198307950e-09 1s 1s 198310990e-09 0s 0s 198314630e-09 0s 0s 198318190e-09 1s 1s 198321230e-09 0s 0s 198324910e-09 0s 0s 198328430e-09 1s 1s 198331470e-09 0s 0s 198335190e-09 0s 0s 198338670e-09 1s 1s 198341710e-09 0s 0s 198345470e-09 0s 0s 198348910e-09 1s 1s 198351950e-09 0s 0s 198355750e-09 0s 0s 198359150e-09 1s 1s 198362190e-09 0s 0s 198366030e-09 0s 0s 198369390e-09 1s 1s 198372430e-09 0s 0s 198376310e-09 0s 0s 198379630e-09 1s 1s 198382670e-09 0s 0s 198386590e-09 0s 0s 198389870e-09 1s 1s 198392910e-09 0s 0s 198396870e-09 0s 0s 198400110e-09 1s 1s 198403150e-09 0s 0s 198407150e-09 0s 0s 198410350e-09 1s 1s 198413390e-09 0s 0s 198417430e-09 0s 0s 198420590e-09 1s 1s 198423630e-09 0s 0s 198427710e-09 0s 0s 198430830e-09 1s 1s 198433870e-09 0s 0s 198437990e-09 0s 0s 198441070e-09 1s 1s 198444110e-09 0s 0s 198448270e-09 0s 0s 198451310e-09 1s 1s 198454350e-09 0s 0s 198458550e-09 0s 0s 198461550e-09 1s 1s 198464590e-09 0s 0s 198468830e-09 0s 0s 198471790e-09 1s 1s 198474830e-09 0s 0s 198479110e-09 0s 0s 198482030e-09 1s 1s 198485070e-09 0s 0s 198489390e-09 0s 0s 198492270e-09 1s 1s 198495310e-09 0s 0s 198499670e-09 0s 0s 198502510e-09 1s 1s 198505550e-09 0s 0s 198509950e-09 0s 0s 198512750e-09 1s 1s 198515790e-09 0s 0s 198520230e-09 0s 0s 198522990e-09 1s 1s 198526030e-09 0s 0s 198530510e-09 0s 0s 198533230e-09 1s 1s 198536270e-09 0s 0s 198540790e-09 0s 0s 198543470e-09 1s 1s 198546510e-09 0s 0s 198551070e-09 0s 0s 198553710e-09 1s 1s 198556750e-09 0s 0s 198561350e-09 0s 0s 198563950e-09 1s 1s 198566990e-09 0s 0s 198571630e-09 0s 0s 198574190e-09 1s 1s 198577230e-09 0s 0s 198581910e-09 0s 0s 198584430e-09 1s 1s 198587470e-09 0s 0s 198592190e-09 0s 0s 198594670e-09 1s 1s 198597710e-09 0s 0s 198602470e-09 0s 0s 198604910e-09 1s 1s 198607950e-09 0s 0s 198612750e-09 0s 0s 198615150e-09 1s 1s 198618190e-09 0s 0s 198623030e-09 0s 0s 198625390e-09 1s 1s 198628430e-09 0s 0s 198633310e-09 0s 0s 198635630e-09 1s 1s 198638670e-09 0s 0s 198643590e-09 0s 0s 198645870e-09 1s 1s 198648910e-09 0s 0s 198653870e-09 0s 0s 198656110e-09 1s 1s 198659150e-09 0s 0s 198664150e-09 0s 0s 198666350e-09 1s 1s 198669390e-09 0s 0s 198674430e-09 0s 0s 198676590e-09 1s 1s 198679630e-09 0s 0s 198684710e-09 0s 0s 198686830e-09 1s 1s 198689870e-09 0s 0s 198694990e-09 0s 0s 198697070e-09 1s 1s 198700110e-09 0s 0s 198705270e-09 0s 0s 198707310e-09 1s 1s 198710350e-09 0s 0s 198715550e-09 0s 0s 198717550e-09 1s 1s 198720590e-09 0s 0s 198725830e-09 0s 0s 198727790e-09 1s 1s 198730830e-09 0s 0s 198736110e-09 0s 0s 198738030e-09 1s 1s 198741070e-09 0s 0s 198746390e-09 0s 0s 198748270e-09 1s 1s 198751310e-09 0s 0s 198756670e-09 0s 0s 198758510e-09 1s 1s 198761550e-09 0s 0s 198766950e-09 0s 0s 198768750e-09 1s 1s 198771790e-09 0s 0s 198777230e-09 0s 0s 198778990e-09 1s 1s 198782030e-09 0s 0s 198787510e-09 0s 0s 198789230e-09 1s 1s 198792270e-09 0s 0s 198797790e-09 0s 0s 198799470e-09 1s 1s 198802510e-09 0s 0s 198808070e-09 0s 0s 198809710e-09 1s 1s 198812750e-09 0s 0s 198818350e-09 0s 0s 198819950e-09 1s 1s 198822990e-09 0s 0s 198828630e-09 0s 0s 198830190e-09 1s 1s 198833230e-09 0s 0s 198838910e-09 0s 0s 198840430e-09 1s 1s 198843470e-09 0s 0s 198849190e-09 0s 0s 198850670e-09 1s 1s 198853710e-09 0s 0s 198859470e-09 0s 0s 198860910e-09 1s 1s 198863950e-09 0s 0s 198869750e-09 0s 0s 198871150e-09 1s 1s 198874190e-09 0s 0s 198880030e-09 0s 0s 198881390e-09 1s 1s 198884430e-09 0s 0s 198890310e-09 0s 0s 198891630e-09 1s 1s 198894670e-09 0s 0s 198900590e-09 0s 0s 198901870e-09 1s 1s 198904910e-09 0s 0s 198910870e-09 0s 0s 198912110e-09 1s 1s 198915150e-09 0s 0s 198921150e-09 0s 0s 198922350e-09 1s 1s 198925390e-09 0s 0s 198931430e-09 0s 0s 198932590e-09 1s 1s 198935630e-09 0s 0s 198941710e-09 0s 0s 198942830e-09 1s 1s 198945870e-09 0s 0s 198951990e-09 0s 0s 198953070e-09 1s 1s 198956110e-09 0s 0s 198962270e-09 0s 0s 198963310e-09 1s 1s 198966350e-09 0s 0s 198972550e-09 0s 0s 198973550e-09 1s 1s 198976590e-09 0s 0s 198982830e-09 0s 0s 198983790e-09 1s 1s 198986830e-09 0s 0s 198993110e-09 0s 0s 198994030e-09 1s 1s 198997070e-09 0s 0s 199003390e-09 0s 0s 199004270e-09 1s 1s 199007310e-09 0s 0s 199013670e-09 0s 0s 199014510e-09 1s 1s 199017550e-09 0s 0s 199023950e-09 0s 0s 199024750e-09 1s 1s 199027790e-09 0s 0s 199034230e-09 0s 0s 199034990e-09 1s 1s 199038030e-09 0s 0s 199044510e-09 0s 0s 199045230e-09 1s 1s 199048270e-09 0s 0s 199054790e-09 0s 0s 199055470e-09 1s 1s 199058510e-09 0s 0s 199065070e-09 0s 0s 199065710e-09 1s 1s 199068750e-09 0s 0s 199075350e-09 0s 0s 199075950e-09 1s 1s 199078990e-09 0s 0s 199085630e-09 0s 0s 199086190e-09 1s 1s 199089230e-09 0s 0s 199095910e-09 0s 0s 199096430e-09 1s 1s 199099470e-09 0s 0s 199106190e-09 0s 0s 199106670e-09 1s 1s 199109710e-09 0s 0s 199116470e-09 0s 0s 199116910e-09 1s 1s 199119950e-09 0s 0s 199126750e-09 0s 0s 199127150e-09 1s 1s 199130190e-09 0s 0s 199137030e-09 0s 0s 199137390e-09 1s 1s 199140430e-09 0s 0s 199147310e-09 0s 0s 199147630e-09 1s 1s 199150670e-09 0s 0s 199157590e-09 0s 0s 199157870e-09 1s 1s 199160910e-09 0s 0s 199167870e-09 0s 0s 199168110e-09 1s 1s 199171150e-09 0s 0s 199178150e-09 0s 0s 199178350e-09 1s 1s 199181390e-09 0s 0s 199188430e-09 0s 0s 199188590e-09 1s 1s 199191630e-09 0s 0s 199198710e-09 0s 0s 199198830e-09 1s 1s 199201870e-09 0s 0s 199208990e-09 0s 0s 199209070e-09 1s 1s 199212110e-09 0s 0s 199219270e-09 0s 0s 199219310e-09 1s 1s 199222350e-09 0s 0s 199229550e-09 1s 1s 199229590e-09 1s 1s 199232630e-09 0s 0s 199239790e-09 1s 1s 199239870e-09 1s 1s 199242870e-09 0s 0s 199250030e-09 1s 1s 199250150e-09 1s 1s 199253110e-09 0s 0s 199260270e-09 1s 1s 199260430e-09 1s 1s 199263350e-09 0s 0s 199270510e-09 1s 1s 199270710e-09 1s 1s 199273590e-09 0s 0s 199280750e-09 1s 1s 199280990e-09 1s 1s 199283830e-09 0s 0s 199290990e-09 1s 1s 199291270e-09 1s 1s 199294070e-09 0s 0s 199301230e-09 1s 1s 199301550e-09 1s 1s 199304310e-09 0s 0s 199311470e-09 1s 1s 199311830e-09 1s 1s 199314550e-09 0s 0s 199321710e-09 1s 1s 199322110e-09 1s 1s 199324790e-09 0s 0s 199331950e-09 1s 1s 199332390e-09 1s 1s 199335030e-09 0s 0s 199342190e-09 1s 1s 199342670e-09 1s 1s 199345270e-09 0s 0s 199352430e-09 1s 1s 199352950e-09 1s 1s 199355510e-09 0s 0s 199362670e-09 1s 1s 199363230e-09 1s 1s 199365750e-09 0s 0s 199372910e-09 1s 1s 199373510e-09 1s 1s 199375990e-09 0s 0s 199383150e-09 1s 1s 199383790e-09 1s 1s 199386230e-09 0s 0s 199393390e-09 1s 1s 199394070e-09 1s 1s 199396470e-09 0s 0s 199403630e-09 1s 1s 199404350e-09 1s 1s 199406710e-09 0s 0s 199413870e-09 1s 1s 199414630e-09 1s 1s 199416950e-09 0s 0s 199424110e-09 1s 1s 199424910e-09 1s 1s 199427190e-09 0s 0s 199434350e-09 1s 1s 199435190e-09 1s 1s 199437430e-09 0s 0s 199444590e-09 1s 1s 199445470e-09 1s 1s 199447670e-09 0s 0s 199454830e-09 1s 1s 199455750e-09 1s 1s 199457910e-09 0s 0s 199465070e-09 1s 1s 199466030e-09 1s 1s 199468150e-09 0s 0s 199475310e-09 1s 1s 199476310e-09 1s 1s 199478390e-09 0s 0s 199485550e-09 1s 1s 199486590e-09 1s 1s 199488630e-09 0s 0s 199495790e-09 1s 1s 199496870e-09 1s 1s 199498870e-09 0s 0s 199506030e-09 1s 1s 199507150e-09 1s 1s 199509110e-09 0s 0s 199516270e-09 1s 1s 199517430e-09 1s 1s 199519350e-09 0s 0s 199526510e-09 1s 1s 199527710e-09 1s 1s 199529590e-09 0s 0s 199536750e-09 1s 1s 199537990e-09 1s 1s 199539830e-09 0s 0s 199546990e-09 1s 1s 199548270e-09 1s 1s 199550070e-09 0s 0s 199557230e-09 1s 1s 199558550e-09 1s 1s 199560310e-09 0s 0s 199567470e-09 1s 1s 199568830e-09 1s 1s 199570550e-09 0s 0s 199577710e-09 1s 1s 199579110e-09 1s 1s 199580790e-09 0s 0s 199587950e-09 1s 1s 199589390e-09 1s 1s 199591030e-09 0s 0s 199598190e-09 1s 1s 199599670e-09 1s 1s 199601270e-09 0s 0s 199608430e-09 1s 1s 199609950e-09 1s 1s 199611510e-09 0s 0s 199618670e-09 1s 1s 199620230e-09 1s 1s 199621750e-09 0s 0s 199628910e-09 1s 1s 199630510e-09 1s 1s 199631990e-09 0s 0s 199639150e-09 1s 1s 199640790e-09 1s 1s 199642230e-09 0s 0s 199649390e-09 1s 1s 199651070e-09 1s 1s 199652470e-09 0s 0s 199659630e-09 1s 1s 199661350e-09 1s 1s 199662710e-09 0s 0s 199669870e-09 1s 1s 199671630e-09 1s 1s 199672950e-09 0s 0s 199680110e-09 1s 1s 199681910e-09 1s 1s 199683190e-09 0s 0s 199690350e-09 1s 1s 199692190e-09 1s 1s 199693430e-09 0s 0s 199700590e-09 1s 1s 199702470e-09 1s 1s 199703670e-09 0s 0s 199710830e-09 1s 1s 199712750e-09 1s 1s 199713910e-09 0s 0s 199721070e-09 1s 1s 199723030e-09 1s 1s 199724150e-09 0s 0s 199731310e-09 1s 1s 199733310e-09 1s 1s 199734390e-09 0s 0s 199741550e-09 1s 1s 199743590e-09 1s 1s 199744630e-09 0s 0s 199751790e-09 1s 1s 199753870e-09 1s 1s 199754870e-09 0s 0s 199762030e-09 1s 1s 199764150e-09 1s 1s 199765110e-09 0s 0s 199772270e-09 1s 1s 199774430e-09 1s 1s 199775350e-09 0s 0s 199782510e-09 1s 1s 199784710e-09 1s 1s 199785590e-09 0s 0s 199792750e-09 1s 1s 199794990e-09 1s 1s 199795830e-09 0s 0s 199802990e-09 1s 1s 199805270e-09 1s 1s 199806070e-09 0s 0s 199813230e-09 1s 1s 199815550e-09 1s 1s 199816310e-09 0s 0s 199823470e-09 1s 1s 199825830e-09 1s 1s 199826550e-09 0s 0s 199833710e-09 1s 1s 199836110e-09 1s 1s 199836790e-09 0s 0s 199843950e-09 1s 1s 199846390e-09 1s 1s 199847030e-09 0s 0s 199854190e-09 1s 1s 199856670e-09 1s 1s 199857270e-09 0s 0s 199864430e-09 1s 1s 199866950e-09 1s 1s 199867510e-09 0s 0s 199874670e-09 1s 1s 199877230e-09 1s 1s 199877750e-09 0s 0s 199884910e-09 1s 1s 199887510e-09 1s 1s 199887990e-09 0s 0s 199895150e-09 1s 1s 199897790e-09 1s 1s 199898230e-09 0s 0s 199905390e-09 1s 1s 199908070e-09 1s 1s 199908470e-09 0s 0s 199915630e-09 1s 1s 199918350e-09 1s 1s 199918710e-09 0s 0s 199925870e-09 1s 1s 199928630e-09 1s 1s 199928950e-09 0s 0s 199936110e-09 1s 1s 199938910e-09 1s 1s 199939190e-09 0s 0s 199946350e-09 1s 1s 199949190e-09 1s 1s 199949430e-09 0s 0s 199956590e-09 1s 1s 199959470e-09 1s 1s 199959670e-09 0s 0s 199966830e-09 1s 1s 199969750e-09 1s 1s 199969910e-09 0s 0s 199977070e-09 1s 1s 199980030e-09 1s 1s 199980150e-09 0s 0s 199987310e-09 1s 1s 199990310e-09 1s 1s 199990390e-09 0s 0s 199997550e-09 1s 1s 200000590e-09 1s 1s 200000630e-09 0s 0s 200007790e-09 1s 1s 200010870e-09 0s 0s 200018030e-09 1s 1s 200021110e-09 0s 0s 200021150e-09 0s 0s 200028270e-09 1s 1s 200031350e-09 0s 0s 200031430e-09 0s 0s 200038510e-09 1s 1s 200041590e-09 0s 0s 200041710e-09 0s 0s 200048750e-09 1s 1s 200051830e-09 0s 0s 200051990e-09 0s 0s 200058990e-09 1s 1s 200062070e-09 0s 0s 200062270e-09 0s 0s 200069230e-09 1s 1s 200072310e-09 0s 0s 200072550e-09 0s 0s 200079470e-09 1s 1s 200082550e-09 0s 0s 200082830e-09 0s 0s 200089710e-09 1s 1s 200092790e-09 0s 0s 200093110e-09 0s 0s 200099950e-09 1s 1s 200103030e-09 0s 0s 200103390e-09 0s 0s 200110190e-09 1s 1s 200113270e-09 0s 0s 200113670e-09 0s 0s 200120430e-09 1s 1s 200123510e-09 0s 0s 200123950e-09 0s 0s 200130670e-09 1s 1s 200133750e-09 0s 0s 200134230e-09 0s 0s 200140910e-09 1s 1s 200143990e-09 0s 0s 200144510e-09 0s 0s 200151150e-09 1s 1s 200154230e-09 0s 0s 200154790e-09 0s 0s 200161390e-09 1s 1s 200164470e-09 0s 0s 200165070e-09 0s 0s 200171630e-09 1s 1s 200174710e-09 0s 0s 200175350e-09 0s 0s 200181870e-09 1s 1s 200184950e-09 0s 0s 200185630e-09 0s 0s 200192110e-09 1s 1s 200195190e-09 0s 0s 200195910e-09 0s 0s 200202350e-09 1s 1s 200205430e-09 0s 0s 200206190e-09 0s 0s 200212590e-09 1s 1s 200215670e-09 0s 0s 200216470e-09 0s 0s 200222830e-09 1s 1s 200225910e-09 0s 0s 200226750e-09 0s 0s 200233070e-09 1s 1s 200236150e-09 0s 0s 200237030e-09 0s 0s 200243310e-09 1s 1s 200246390e-09 0s 0s 200247310e-09 0s 0s 200253550e-09 1s 1s 200256630e-09 0s 0s 200257590e-09 0s 0s 200263790e-09 1s 1s 200266870e-09 0s 0s 200267870e-09 0s 0s 200274030e-09 1s 1s 200277110e-09 0s 0s 200278150e-09 0s 0s 200284270e-09 1s 1s 200287350e-09 0s 0s 200288430e-09 0s 0s 200294510e-09 1s 1s 200297590e-09 0s 0s 200298710e-09 0s 0s 200304750e-09 1s 1s 200307830e-09 0s 0s 200308990e-09 0s 0s 200314990e-09 1s 1s 200318070e-09 0s 0s 200319270e-09 0s 0s 200325230e-09 1s 1s 200328310e-09 0s 0s 200329550e-09 0s 0s 200335470e-09 1s 1s 200338550e-09 0s 0s 200339830e-09 0s 0s 200345710e-09 1s 1s 200348790e-09 0s 0s 200350110e-09 0s 0s 200355950e-09 1s 1s 200359030e-09 0s 0s 200360390e-09 0s 0s 200366190e-09 1s 1s 200369270e-09 0s 0s 200370670e-09 0s 0s 200376430e-09 1s 1s 200379510e-09 0s 0s 200380950e-09 0s 0s 200386670e-09 1s 1s 200389750e-09 0s 0s 200391230e-09 0s 0s 200396910e-09 1s 1s 200399990e-09 0s 0s 200401510e-09 0s 0s 200407150e-09 1s 1s 200410230e-09 0s 0s 200411790e-09 0s 0s 200417390e-09 1s 1s 200420470e-09 0s 0s 200422070e-09 0s 0s 200427630e-09 1s 1s 200430710e-09 0s 0s 200432350e-09 0s 0s 200437870e-09 1s 1s 200440950e-09 0s 0s 200442630e-09 0s 0s 200448110e-09 1s 1s 200451190e-09 0s 0s 200452910e-09 0s 0s 200458350e-09 1s 1s 200461430e-09 0s 0s 200463190e-09 0s 0s 200468590e-09 1s 1s 200471670e-09 0s 0s 200473470e-09 0s 0s 200478830e-09 1s 1s 200481910e-09 0s 0s 200483750e-09 0s 0s 200489070e-09 1s 1s 200492150e-09 0s 0s 200494030e-09 0s 0s 200499310e-09 1s 1s 200502390e-09 0s 0s 200504310e-09 0s 0s 200509550e-09 1s 1s 200512630e-09 0s 0s 200514590e-09 0s 0s 200519790e-09 1s 1s 200522870e-09 0s 0s 200524870e-09 0s 0s 200530030e-09 1s 1s 200533110e-09 0s 0s 200535150e-09 0s 0s 200540270e-09 1s 1s 200543350e-09 0s 0s 200545430e-09 0s 0s 200550510e-09 1s 1s 200553590e-09 0s 0s 200555710e-09 0s 0s 200560750e-09 1s 1s 200563830e-09 0s 0s 200565990e-09 0s 0s 200570990e-09 1s 1s 200574070e-09 0s 0s 200576270e-09 0s 0s 200581230e-09 1s 1s 200584310e-09 0s 0s 200586550e-09 0s 0s 200591470e-09 1s 1s 200594550e-09 0s 0s 200596830e-09 0s 0s 200601710e-09 1s 1s 200604790e-09 0s 0s 200607110e-09 0s 0s 200611950e-09 1s 1s 200615030e-09 0s 0s 200617390e-09 0s 0s 200622190e-09 1s 1s 200625270e-09 0s 0s 200627670e-09 0s 0s 200632430e-09 1s 1s 200635510e-09 0s 0s 200637950e-09 0s 0s 200642670e-09 1s 1s 200645750e-09 0s 0s 200648230e-09 0s 0s 200652910e-09 1s 1s 200655990e-09 0s 0s 200658510e-09 0s 0s 200663150e-09 1s 1s 200666230e-09 0s 0s 200668790e-09 0s 0s 200673390e-09 1s 1s 200676470e-09 0s 0s 200679070e-09 0s 0s 200683630e-09 1s 1s 200686710e-09 0s 0s 200689350e-09 0s 0s 200693870e-09 1s 1s 200696950e-09 0s 0s 200699630e-09 0s 0s 200704110e-09 1s 1s 200707190e-09 0s 0s 200709910e-09 0s 0s 200714350e-09 1s 1s 200717430e-09 0s 0s 200720190e-09 0s 0s 200724590e-09 1s 1s 200727670e-09 0s 0s 200730470e-09 0s 0s 200734830e-09 1s 1s 200737910e-09 0s 0s 200740750e-09 0s 0s 200745070e-09 1s 1s 200748150e-09 0s 0s 200751030e-09 0s 0s 200755310e-09 1s 1s 200758390e-09 0s 0s 200761310e-09 0s 0s 200765550e-09 1s 1s 200768630e-09 0s 0s 200771590e-09 0s 0s 200775790e-09 1s 1s 200778870e-09 0s 0s 200781870e-09 0s 0s 200786030e-09 1s 1s 200789110e-09 0s 0s 200792150e-09 0s 0s 200796270e-09 1s 1s 200799350e-09 0s 0s 200802430e-09 0s 0s 200806510e-09 1s 1s 200809590e-09 0s 0s 200812710e-09 0s 0s 200816750e-09 1s 1s 200819830e-09 0s 0s 200822990e-09 0s 0s 200826990e-09 1s 1s 200830070e-09 0s 0s 200833270e-09 0s 0s 200837230e-09 1s 1s 200840310e-09 0s 0s 200843550e-09 0s 0s 200847470e-09 1s 1s 200850550e-09 0s 0s 200853830e-09 0s 0s 200857710e-09 1s 1s 200860790e-09 0s 0s 200864110e-09 0s 0s 200867950e-09 1s 1s 200871030e-09 0s 0s 200874390e-09 0s 0s 200878190e-09 1s 1s 200881270e-09 0s 0s 200884670e-09 0s 0s 200888430e-09 1s 1s 200891510e-09 0s 0s 200894950e-09 0s 0s 200898670e-09 1s 1s 200901750e-09 0s 0s 200905230e-09 0s 0s 200908910e-09 1s 1s 200911990e-09 0s 0s 200915510e-09 0s 0s 200919150e-09 1s 1s 200922230e-09 0s 0s 200925790e-09 0s 0s 200929390e-09 1s 1s 200932470e-09 0s 0s 200936070e-09 0s 0s 200939630e-09 1s 1s 200942710e-09 0s 0s 200946350e-09 0s 0s 200949870e-09 1s 1s 200952950e-09 0s 0s 200956630e-09 0s 0s 200960110e-09 1s 1s 200963190e-09 0s 0s 200966910e-09 0s 0s 200970350e-09 1s 1s 200973430e-09 0s 0s 200977190e-09 0s 0s 200980590e-09 1s 1s 200983670e-09 0s 0s 200987470e-09 0s 0s 200990830e-09 1s 1s 200993910e-09 0s 0s 200997750e-09 0s 0s 201001070e-09 1s 1s 201004150e-09 0s 0s 201008030e-09 0s 0s 201011310e-09 1s 1s 201014390e-09 0s 0s 201018310e-09 0s 0s 201021550e-09 1s 1s 201024630e-09 0s 0s 201028590e-09 0s 0s 201031790e-09 1s 1s 201034870e-09 0s 0s 201038870e-09 0s 0s 201042030e-09 1s 1s 201045110e-09 0s 0s 201049150e-09 0s 0s 201052270e-09 1s 1s 201055350e-09 0s 0s 201059430e-09 0s 0s 201062510e-09 1s 1s 201065590e-09 0s 0s 201069710e-09 0s 0s 201072750e-09 1s 1s 201075830e-09 0s 0s 201079990e-09 0s 0s 201082990e-09 1s 1s 201086070e-09 0s 0s 201090270e-09 0s 0s 201093230e-09 1s 1s 201096310e-09 0s 0s 201100550e-09 0s 0s 201103470e-09 1s 1s 201106550e-09 0s 0s 201110830e-09 0s 0s 201113710e-09 1s 1s 201116790e-09 0s 0s 201121110e-09 0s 0s 201123950e-09 1s 1s 201127030e-09 0s 0s 201131390e-09 0s 0s 201134190e-09 1s 1s 201137270e-09 0s 0s 201141670e-09 0s 0s 201144430e-09 1s 1s 201147510e-09 0s 0s 201151950e-09 0s 0s 201154670e-09 1s 1s 201157750e-09 0s 0s 201162230e-09 0s 0s 201164910e-09 1s 1s 201167990e-09 0s 0s 201172510e-09 0s 0s 201175150e-09 1s 1s 201178230e-09 0s 0s 201182790e-09 0s 0s 201185390e-09 1s 1s 201188470e-09 0s 0s 201193070e-09 0s 0s 201195630e-09 1s 1s 201198710e-09 0s 0s 201203350e-09 0s 0s 201205870e-09 1s 1s 201208950e-09 0s 0s 201213630e-09 0s 0s 201216110e-09 1s 1s 201219190e-09 0s 0s 201223910e-09 0s 0s 201226350e-09 1s 1s 201229430e-09 0s 0s 201234190e-09 0s 0s 201236590e-09 1s 1s 201239670e-09 0s 0s 201244470e-09 0s 0s 201246830e-09 1s 1s 201249910e-09 0s 0s 201254750e-09 0s 0s 201257070e-09 1s 1s 201260150e-09 0s 0s 201265030e-09 0s 0s 201267310e-09 1s 1s 201270390e-09 0s 0s 201275310e-09 0s 0s 201277550e-09 1s 1s 201280630e-09 0s 0s 201285590e-09 0s 0s 201287790e-09 1s 1s 201290870e-09 0s 0s 201295870e-09 0s 0s 201298030e-09 1s 1s 201301110e-09 0s 0s 201306150e-09 0s 0s 201308270e-09 1s 1s 201311350e-09 0s 0s 201316430e-09 0s 0s 201318510e-09 1s 1s 201321590e-09 0s 0s 201326710e-09 0s 0s 201328750e-09 1s 1s 201331830e-09 0s 0s 201336990e-09 0s 0s 201338990e-09 1s 1s 201342070e-09 0s 0s 201347270e-09 0s 0s 201349230e-09 1s 1s 201352310e-09 0s 0s 201357550e-09 0s 0s 201359470e-09 1s 1s 201362550e-09 0s 0s 201367830e-09 0s 0s 201369710e-09 1s 1s 201372790e-09 0s 0s 201378110e-09 0s 0s 201379950e-09 1s 1s 201383030e-09 0s 0s 201388390e-09 0s 0s 201390190e-09 1s 1s 201393270e-09 0s 0s 201398670e-09 0s 0s 201400430e-09 1s 1s 201403510e-09 0s 0s 201408950e-09 0s 0s 201410670e-09 1s 1s 201413750e-09 0s 0s 201419230e-09 0s 0s 201420910e-09 1s 1s 201423990e-09 0s 0s 201429510e-09 0s 0s 201431150e-09 1s 1s 201434230e-09 0s 0s 201439790e-09 0s 0s 201441390e-09 1s 1s 201444470e-09 0s 0s 201450070e-09 0s 0s 201451630e-09 1s 1s 201454710e-09 0s 0s 201460350e-09 0s 0s 201461870e-09 1s 1s 201464950e-09 0s 0s 201470630e-09 0s 0s 201472110e-09 1s 1s 201475190e-09 0s 0s 201480910e-09 0s 0s 201482350e-09 1s 1s 201485430e-09 0s 0s 201491190e-09 0s 0s 201492590e-09 1s 1s 201495670e-09 0s 0s 201501470e-09 0s 0s 201502830e-09 1s 1s 201505910e-09 0s 0s 201511750e-09 0s 0s 201513070e-09 1s 1s 201516150e-09 0s 0s 201522030e-09 0s 0s 201523310e-09 1s 1s 201526390e-09 0s 0s 201532310e-09 0s 0s 201533550e-09 1s 1s 201536630e-09 0s 0s 201542590e-09 0s 0s 201543790e-09 1s 1s 201546870e-09 0s 0s 201552870e-09 0s 0s 201554030e-09 1s 1s 201557110e-09 0s 0s 201563150e-09 0s 0s 201564270e-09 1s 1s 201567350e-09 0s 0s 201573430e-09 0s 0s 201574510e-09 1s 1s 201577590e-09 0s 0s 201583710e-09 0s 0s 201584750e-09 1s 1s 201587830e-09 0s 0s 201593990e-09 0s 0s 201594990e-09 1s 1s 201598070e-09 0s 0s 201604270e-09 0s 0s 201605230e-09 1s 1s 201608310e-09 0s 0s 201614550e-09 0s 0s 201615470e-09 1s 1s 201618550e-09 0s 0s 201624830e-09 0s 0s 201625710e-09 1s 1s 201628790e-09 0s 0s 201635110e-09 0s 0s 201635950e-09 1s 1s 201639030e-09 0s 0s 201645390e-09 0s 0s 201646190e-09 1s 1s 201649270e-09 0s 0s 201655670e-09 0s 0s 201656430e-09 1s 1s 201659510e-09 0s 0s 201665950e-09 0s 0s 201666670e-09 1s 1s 201669750e-09 0s 0s 201676230e-09 0s 0s 201676910e-09 1s 1s 201679990e-09 0s 0s 201686510e-09 0s 0s 201687150e-09 1s 1s 201690230e-09 0s 0s 201696790e-09 0s 0s 201697390e-09 1s 1s 201700470e-09 0s 0s 201707070e-09 0s 0s 201707630e-09 1s 1s 201710710e-09 0s 0s 201717350e-09 0s 0s 201717870e-09 1s 1s 201720950e-09 0s 0s 201727630e-09 0s 0s 201728110e-09 1s 1s 201731190e-09 0s 0s 201737910e-09 0s 0s 201738350e-09 1s 1s 201741430e-09 0s 0s 201748190e-09 0s 0s 201748590e-09 1s 1s 201751670e-09 0s 0s 201758470e-09 0s 0s 201758830e-09 1s 1s 201761910e-09 0s 0s 201768750e-09 0s 0s 201769070e-09 1s 1s 201772150e-09 0s 0s 201779030e-09 0s 0s 201779310e-09 1s 1s 201782390e-09 0s 0s 201789310e-09 0s 0s 201789550e-09 1s 1s 201792630e-09 0s 0s 201799590e-09 0s 0s 201799790e-09 1s 1s 201802870e-09 0s 0s 201809870e-09 0s 0s 201810030e-09 1s 1s 201813110e-09 0s 0s 201820150e-09 0s 0s 201820270e-09 1s 1s 201823350e-09 0s 0s 201830430e-09 0s 0s 201830510e-09 1s 1s 201833590e-09 0s 0s 201840710e-09 0s 0s 201840750e-09 1s 1s 201843830e-09 0s 0s 201850990e-09 1s 1s 201851030e-09 1s 1s 201854110e-09 0s 0s 201861230e-09 1s 1s 201861310e-09 1s 1s 201864350e-09 0s 0s 201871470e-09 1s 1s 201871590e-09 1s 1s 201874590e-09 0s 0s 201881710e-09 1s 1s 201881870e-09 1s 1s 201884830e-09 0s 0s 201891950e-09 1s 1s 201892150e-09 1s 1s 201895070e-09 0s 0s 201902190e-09 1s 1s 201902430e-09 1s 1s 201905310e-09 0s 0s 201912430e-09 1s 1s 201912710e-09 1s 1s 201915550e-09 0s 0s 201922670e-09 1s 1s 201922990e-09 1s 1s 201925790e-09 0s 0s 201932910e-09 1s 1s 201933270e-09 1s 1s 201936030e-09 0s 0s 201943150e-09 1s 1s 201943550e-09 1s 1s 201946270e-09 0s 0s 201953390e-09 1s 1s 201953830e-09 1s 1s 201956510e-09 0s 0s 201963630e-09 1s 1s 201964110e-09 1s 1s 201966750e-09 0s 0s 201973870e-09 1s 1s 201974390e-09 1s 1s 201976990e-09 0s 0s 201984110e-09 1s 1s 201984670e-09 1s 1s 201987230e-09 0s 0s 201994350e-09 1s 1s 201994950e-09 1s 1s 201997470e-09 0s 0s 202004590e-09 1s 1s 202005230e-09 1s 1s 202007710e-09 0s 0s 202014830e-09 1s 1s 202015510e-09 1s 1s 202017950e-09 0s 0s 202025070e-09 1s 1s 202025790e-09 1s 1s 202028190e-09 0s 0s 202035310e-09 1s 1s 202036070e-09 1s 1s 202038430e-09 0s 0s 202045550e-09 1s 1s 202046350e-09 1s 1s 202048670e-09 0s 0s 202055790e-09 1s 1s 202056630e-09 1s 1s 202058910e-09 0s 0s 202066030e-09 1s 1s 202066910e-09 1s 1s 202069150e-09 0s 0s 202076270e-09 1s 1s 202077190e-09 1s 1s 202079390e-09 0s 0s 202086510e-09 1s 1s 202087470e-09 1s 1s 202089630e-09 0s 0s 202096750e-09 1s 1s 202097750e-09 1s 1s 202099870e-09 0s 0s 202106990e-09 1s 1s 202108030e-09 1s 1s 202110110e-09 0s 0s 202117230e-09 1s 1s 202118310e-09 1s 1s 202120350e-09 0s 0s 202127470e-09 1s 1s 202128590e-09 1s 1s 202130590e-09 0s 0s 202137710e-09 1s 1s 202138870e-09 1s 1s 202140830e-09 0s 0s 202147950e-09 1s 1s 202149150e-09 1s 1s 202151070e-09 0s 0s 202158190e-09 1s 1s 202159430e-09 1s 1s 202161310e-09 0s 0s 202168430e-09 1s 1s 202169710e-09 1s 1s 202171550e-09 0s 0s 202178670e-09 1s 1s 202179990e-09 1s 1s 202181790e-09 0s 0s 202188910e-09 1s 1s 202190270e-09 1s 1s 202192030e-09 0s 0s 202199150e-09 1s 1s 202200550e-09 1s 1s 202202270e-09 0s 0s 202209390e-09 1s 1s 202210830e-09 1s 1s 202212510e-09 0s 0s 202219630e-09 1s 1s 202221110e-09 1s 1s 202222750e-09 0s 0s 202229870e-09 1s 1s 202231390e-09 1s 1s 202232990e-09 0s 0s 202240110e-09 1s 1s 202241670e-09 1s 1s 202243230e-09 0s 0s 202250350e-09 1s 1s 202251950e-09 1s 1s 202253470e-09 0s 0s 202260590e-09 1s 1s 202262230e-09 1s 1s 202263710e-09 0s 0s 202270830e-09 1s 1s 202272510e-09 1s 1s 202273950e-09 0s 0s 202281070e-09 1s 1s 202282790e-09 1s 1s 202284190e-09 0s 0s 202291310e-09 1s 1s 202293070e-09 1s 1s 202294430e-09 0s 0s 202301550e-09 1s 1s 202303350e-09 1s 1s 202304670e-09 0s 0s 202311790e-09 1s 1s 202313630e-09 1s 1s 202314910e-09 0s 0s 202322030e-09 1s 1s 202323910e-09 1s 1s 202325150e-09 0s 0s 202332270e-09 1s 1s 202334190e-09 1s 1s 202335390e-09 0s 0s 202342510e-09 1s 1s 202344470e-09 1s 1s 202345630e-09 0s 0s 202352750e-09 1s 1s 202354750e-09 1s 1s 202355870e-09 0s 0s 202362990e-09 1s 1s 202365030e-09 1s 1s 202366110e-09 0s 0s 202373230e-09 1s 1s 202375310e-09 1s 1s 202376350e-09 0s 0s 202383470e-09 1s 1s 202385590e-09 1s 1s 202386590e-09 0s 0s 202393710e-09 1s 1s 202395870e-09 1s 1s 202396830e-09 0s 0s 202403950e-09 1s 1s 202406150e-09 1s 1s 202407070e-09 0s 0s 202414190e-09 1s 1s 202416430e-09 1s 1s 202417310e-09 0s 0s 202424430e-09 1s 1s 202426710e-09 1s 1s 202427550e-09 0s 0s 202434670e-09 1s 1s 202436990e-09 1s 1s 202437790e-09 0s 0s 202444910e-09 1s 1s 202447270e-09 1s 1s 202448030e-09 0s 0s 202455150e-09 1s 1s 202457550e-09 1s 1s 202458270e-09 0s 0s 202465390e-09 1s 1s 202467830e-09 1s 1s 202468510e-09 0s 0s 202475630e-09 1s 1s 202478110e-09 1s 1s 202478750e-09 0s 0s 202485870e-09 1s 1s 202488390e-09 1s 1s 202488990e-09 0s 0s 202496110e-09 1s 1s 202498670e-09 1s 1s 202499230e-09 0s 0s 202506350e-09 1s 1s 202508950e-09 1s 1s 202509470e-09 0s 0s 202516590e-09 1s 1s 202519230e-09 1s 1s 202519710e-09 0s 0s 202526830e-09 1s 1s 202529510e-09 1s 1s 202529950e-09 0s 0s 202537070e-09 1s 1s 202539790e-09 1s 1s 202540190e-09 0s 0s 202547310e-09 1s 1s 202550070e-09 1s 1s 202550430e-09 0s 0s 202557550e-09 1s 1s 202560350e-09 1s 1s 202560670e-09 0s 0s 202567790e-09 1s 1s 202570630e-09 1s 1s 202570910e-09 0s 0s 202578030e-09 1s 1s 202580910e-09 1s 1s 202581150e-09 0s 0s 202588270e-09 1s 1s 202591190e-09 1s 1s 202591390e-09 0s 0s 202598510e-09 1s 1s 202601470e-09 1s 1s 202601630e-09 0s 0s 202608750e-09 1s 1s 202611750e-09 1s 1s 202611870e-09 0s 0s 202618990e-09 1s 1s 202622030e-09 1s 1s 202622110e-09 0s 0s 202629230e-09 1s 1s 202632310e-09 1s 1s 202632350e-09 0s 0s 202639470e-09 1s 1s 202642590e-09 0s 0s 202649710e-09 1s 1s 202652830e-09 0s 0s 202652870e-09 0s 0s 202659950e-09 1s 1s 202663070e-09 0s 0s 202663150e-09 0s 0s 202670190e-09 1s 1s 202673310e-09 0s 0s 202673430e-09 0s 0s 202680430e-09 1s 1s 202683550e-09 0s 0s 202683710e-09 0s 0s 202690670e-09 1s 1s 202693790e-09 0s 0s 202693990e-09 0s 0s 202700910e-09 1s 1s 202704030e-09 0s 0s 202704270e-09 0s 0s 202711150e-09 1s 1s 202714270e-09 0s 0s 202714550e-09 0s 0s 202721390e-09 1s 1s 202724510e-09 0s 0s 202724830e-09 0s 0s 202731630e-09 1s 1s 202734750e-09 0s 0s 202735110e-09 0s 0s 202741870e-09 1s 1s 202744990e-09 0s 0s 202745390e-09 0s 0s 202752110e-09 1s 1s 202755230e-09 0s 0s 202755670e-09 0s 0s 202762350e-09 1s 1s 202765470e-09 0s 0s 202765950e-09 0s 0s 202772590e-09 1s 1s 202775710e-09 0s 0s 202776230e-09 0s 0s 202782830e-09 1s 1s 202785950e-09 0s 0s 202786510e-09 0s 0s 202793070e-09 1s 1s 202796190e-09 0s 0s 202796790e-09 0s 0s 202803310e-09 1s 1s 202806430e-09 0s 0s 202807070e-09 0s 0s 202813550e-09 1s 1s 202816670e-09 0s 0s 202817350e-09 0s 0s 202823790e-09 1s 1s 202826910e-09 0s 0s 202827630e-09 0s 0s 202834030e-09 1s 1s 202837150e-09 0s 0s 202837910e-09 0s 0s 202844270e-09 1s 1s 202847390e-09 0s 0s 202848190e-09 0s 0s 202854510e-09 1s 1s 202857630e-09 0s 0s 202858470e-09 0s 0s 202864750e-09 1s 1s 202867870e-09 0s 0s 202868750e-09 0s 0s 202874990e-09 1s 1s 202878110e-09 0s 0s 202879030e-09 0s 0s 202885230e-09 1s 1s 202888350e-09 0s 0s 202889310e-09 0s 0s 202895470e-09 1s 1s 202898590e-09 0s 0s 202899590e-09 0s 0s 202905710e-09 1s 1s 202908830e-09 0s 0s 202909870e-09 0s 0s 202915950e-09 1s 1s 202919070e-09 0s 0s 202920150e-09 0s 0s 202926190e-09 1s 1s 202929310e-09 0s 0s 202930430e-09 0s 0s 202936430e-09 1s 1s 202939550e-09 0s 0s 202940710e-09 0s 0s 202946670e-09 1s 1s 202949790e-09 0s 0s 202950990e-09 0s 0s 202956910e-09 1s 1s 202960030e-09 0s 0s 202961270e-09 0s 0s 202967150e-09 1s 1s 202970270e-09 0s 0s 202971550e-09 0s 0s 202977390e-09 1s 1s 202980510e-09 0s 0s 202981830e-09 0s 0s 202987630e-09 1s 1s 202990750e-09 0s 0s 202992110e-09 0s 0s 202997870e-09 1s 1s 203000990e-09 0s 0s 203002390e-09 0s 0s 203008110e-09 1s 1s 203011230e-09 0s 0s 203012670e-09 0s 0s 203018350e-09 1s 1s 203021470e-09 0s 0s 203022950e-09 0s 0s 203028590e-09 1s 1s 203031710e-09 0s 0s 203033230e-09 0s 0s 203038830e-09 1s 1s 203041950e-09 0s 0s 203043510e-09 0s 0s 203049070e-09 1s 1s 203052190e-09 0s 0s 203053790e-09 0s 0s 203059310e-09 1s 1s 203062430e-09 0s 0s 203064070e-09 0s 0s 203069550e-09 1s 1s 203072670e-09 0s 0s 203074350e-09 0s 0s 203079790e-09 1s 1s 203082910e-09 0s 0s 203084630e-09 0s 0s 203090030e-09 1s 1s 203093150e-09 0s 0s 203094910e-09 0s 0s 203100270e-09 1s 1s 203103390e-09 0s 0s 203105190e-09 0s 0s 203110510e-09 1s 1s 203113630e-09 0s 0s 203115470e-09 0s 0s 203120750e-09 1s 1s 203123870e-09 0s 0s 203125750e-09 0s 0s 203130990e-09 1s 1s 203134110e-09 0s 0s 203136030e-09 0s 0s 203141230e-09 1s 1s 203144350e-09 0s 0s 203146310e-09 0s 0s 203151470e-09 1s 1s 203154590e-09 0s 0s 203156590e-09 0s 0s 203161710e-09 1s 1s 203164830e-09 0s 0s 203166870e-09 0s 0s 203171950e-09 1s 1s 203175070e-09 0s 0s 203177150e-09 0s 0s 203182190e-09 1s 1s 203185310e-09 0s 0s 203187430e-09 0s 0s 203192430e-09 1s 1s 203195550e-09 0s 0s 203197710e-09 0s 0s 203202670e-09 1s 1s 203205790e-09 0s 0s 203207990e-09 0s 0s 203212910e-09 1s 1s 203216030e-09 0s 0s 203218270e-09 0s 0s 203223150e-09 1s 1s 203226270e-09 0s 0s 203228550e-09 0s 0s 203233390e-09 1s 1s 203236510e-09 0s 0s 203238830e-09 0s 0s 203243630e-09 1s 1s 203246750e-09 0s 0s 203249110e-09 0s 0s 203253870e-09 1s 1s 203256990e-09 0s 0s 203259390e-09 0s 0s 203264110e-09 1s 1s 203267230e-09 0s 0s 203269670e-09 0s 0s 203274350e-09 1s 1s 203277470e-09 0s 0s 203279950e-09 0s 0s 203284590e-09 1s 1s 203287710e-09 0s 0s 203290230e-09 0s 0s 203294830e-09 1s 1s 203297950e-09 0s 0s 203300510e-09 0s 0s 203305070e-09 1s 1s 203308190e-09 0s 0s 203310790e-09 0s 0s 203315310e-09 1s 1s 203318430e-09 0s 0s 203321070e-09 0s 0s 203325550e-09 1s 1s 203328670e-09 0s 0s 203331350e-09 0s 0s 203335790e-09 1s 1s 203338910e-09 0s 0s 203341630e-09 0s 0s 203346030e-09 1s 1s 203349150e-09 0s 0s 203351910e-09 0s 0s 203356270e-09 1s 1s 203359390e-09 0s 0s 203362190e-09 0s 0s 203366510e-09 1s 1s 203369630e-09 0s 0s 203372470e-09 0s 0s 203376750e-09 1s 1s 203379870e-09 0s 0s 203382750e-09 0s 0s 203386990e-09 1s 1s 203390110e-09 0s 0s 203393030e-09 0s 0s 203397230e-09 1s 1s 203400350e-09 0s 0s 203403310e-09 0s 0s 203407470e-09 1s 1s 203410590e-09 0s 0s 203413590e-09 0s 0s 203417710e-09 1s 1s 203420830e-09 0s 0s 203423870e-09 0s 0s 203427950e-09 1s 1s 203431070e-09 0s 0s 203434150e-09 0s 0s 203438190e-09 1s 1s 203441310e-09 0s 0s 203444430e-09 0s 0s 203448430e-09 1s 1s 203451550e-09 0s 0s 203454710e-09 0s 0s 203458670e-09 1s 1s 203461790e-09 0s 0s 203464990e-09 0s 0s 203468910e-09 1s 1s 203472030e-09 0s 0s 203475270e-09 0s 0s 203479150e-09 1s 1s 203482270e-09 0s 0s 203485550e-09 0s 0s 203489390e-09 1s 1s 203492510e-09 0s 0s 203495830e-09 0s 0s 203499630e-09 1s 1s 203502750e-09 0s 0s 203506110e-09 0s 0s 203509870e-09 1s 1s 203512990e-09 0s 0s 203516390e-09 0s 0s 203520110e-09 1s 1s 203523230e-09 0s 0s 203526670e-09 0s 0s 203530350e-09 1s 1s 203533470e-09 0s 0s 203536950e-09 0s 0s 203540590e-09 1s 1s 203543710e-09 0s 0s 203547230e-09 0s 0s 203550830e-09 1s 1s 203553950e-09 0s 0s 203557510e-09 0s 0s 203561070e-09 1s 1s 203564190e-09 0s 0s 203567790e-09 0s 0s 203571310e-09 1s 1s 203574430e-09 0s 0s 203578070e-09 0s 0s 203581550e-09 1s 1s 203584670e-09 0s 0s 203588350e-09 0s 0s 203591790e-09 1s 1s 203594910e-09 0s 0s 203598630e-09 0s 0s 203602030e-09 1s 1s 203605150e-09 0s 0s 203608910e-09 0s 0s 203612270e-09 1s 1s 203615390e-09 0s 0s 203619190e-09 0s 0s 203622510e-09 1s 1s 203625630e-09 0s 0s 203629470e-09 0s 0s 203632750e-09 1s 1s 203635870e-09 0s 0s 203639750e-09 0s 0s 203642990e-09 1s 1s 203646110e-09 0s 0s 203650030e-09 0s 0s 203653230e-09 1s 1s 203656350e-09 0s 0s 203660310e-09 0s 0s 203663470e-09 1s 1s 203666590e-09 0s 0s 203670590e-09 0s 0s 203673710e-09 1s 1s 203676830e-09 0s 0s 203680870e-09 0s 0s 203683950e-09 1s 1s 203687070e-09 0s 0s 203691150e-09 0s 0s 203694190e-09 1s 1s 203697310e-09 0s 0s 203701430e-09 0s 0s 203704430e-09 1s 1s 203707550e-09 0s 0s 203711710e-09 0s 0s 203714670e-09 1s 1s 203717790e-09 0s 0s 203721990e-09 0s 0s 203724910e-09 1s 1s 203728030e-09 0s 0s 203732270e-09 0s 0s 203735150e-09 1s 1s 203738270e-09 0s 0s 203742550e-09 0s 0s 203745390e-09 1s 1s 203748510e-09 0s 0s 203752830e-09 0s 0s 203755630e-09 1s 1s 203758750e-09 0s 0s 203763110e-09 0s 0s 203765870e-09 1s 1s 203768990e-09 0s 0s 203773390e-09 0s 0s 203776110e-09 1s 1s 203779230e-09 0s 0s 203783670e-09 0s 0s 203786350e-09 1s 1s 203789470e-09 0s 0s 203793950e-09 0s 0s 203796590e-09 1s 1s 203799710e-09 0s 0s 203804230e-09 0s 0s 203806830e-09 1s 1s 203809950e-09 0s 0s 203814510e-09 0s 0s 203817070e-09 1s 1s 203820190e-09 0s 0s 203824790e-09 0s 0s 203827310e-09 1s 1s 203830430e-09 0s 0s 203835070e-09 0s 0s 203837550e-09 1s 1s 203840670e-09 0s 0s 203845350e-09 0s 0s 203847790e-09 1s 1s 203850910e-09 0s 0s 203855630e-09 0s 0s 203858030e-09 1s 1s 203861150e-09 0s 0s 203865910e-09 0s 0s 203868270e-09 1s 1s 203871390e-09 0s 0s 203876190e-09 0s 0s 203878510e-09 1s 1s 203881630e-09 0s 0s 203886470e-09 0s 0s 203888750e-09 1s 1s 203891870e-09 0s 0s 203896750e-09 0s 0s 203898990e-09 1s 1s 203902110e-09 0s 0s 203907030e-09 0s 0s 203909230e-09 1s 1s 203912350e-09 0s 0s 203917310e-09 0s 0s 203919470e-09 1s 1s 203922590e-09 0s 0s 203927590e-09 0s 0s 203929710e-09 1s 1s 203932830e-09 0s 0s 203937870e-09 0s 0s 203939950e-09 1s 1s 203943070e-09 0s 0s 203948150e-09 0s 0s 203950190e-09 1s 1s 203953310e-09 0s 0s 203958430e-09 0s 0s 203960430e-09 1s 1s 203963550e-09 0s 0s 203968710e-09 0s 0s 203970670e-09 1s 1s 203973790e-09 0s 0s 203978990e-09 0s 0s 203980910e-09 1s 1s 203984030e-09 0s 0s 203989270e-09 0s 0s 203991150e-09 1s 1s 203994270e-09 0s 0s 203999550e-09 0s 0s 204001390e-09 1s 1s 204004510e-09 0s 0s 204009830e-09 0s 0s 204011630e-09 1s 1s 204014750e-09 0s 0s 204020110e-09 0s 0s 204021870e-09 1s 1s 204024990e-09 0s 0s 204030390e-09 0s 0s 204032110e-09 1s 1s 204035230e-09 0s 0s 204040670e-09 0s 0s 204042350e-09 1s 1s 204045470e-09 0s 0s 204050950e-09 0s 0s 204052590e-09 1s 1s 204055710e-09 0s 0s 204061230e-09 0s 0s 204062830e-09 1s 1s 204065950e-09 0s 0s 204071510e-09 0s 0s 204073070e-09 1s 1s 204076190e-09 0s 0s 204081790e-09 0s 0s 204083310e-09 1s 1s 204086430e-09 0s 0s 204092070e-09 0s 0s 204093550e-09 1s 1s 204096670e-09 0s 0s 204102350e-09 0s 0s 204103790e-09 1s 1s 204106910e-09 0s 0s 204112630e-09 0s 0s 204114030e-09 1s 1s 204117150e-09 0s 0s 204122910e-09 0s 0s 204124270e-09 1s 1s 204127390e-09 0s 0s 204133190e-09 0s 0s 204134510e-09 1s 1s 204137630e-09 0s 0s 204143470e-09 0s 0s 204144750e-09 1s 1s 204147870e-09 0s 0s 204153750e-09 0s 0s 204154990e-09 1s 1s 204158110e-09 0s 0s 204164030e-09 0s 0s 204165230e-09 1s 1s 204168350e-09 0s 0s 204174310e-09 0s 0s 204175470e-09 1s 1s 204178590e-09 0s 0s 204184590e-09 0s 0s 204185710e-09 1s 1s 204188830e-09 0s 0s 204194870e-09 0s 0s 204195950e-09 1s 1s 204199070e-09 0s 0s 204205150e-09 0s 0s 204206190e-09 1s 1s 204209310e-09 0s 0s 204215430e-09 0s 0s 204216430e-09 1s 1s 204219550e-09 0s 0s 204225710e-09 0s 0s 204226670e-09 1s 1s 204229790e-09 0s 0s 204235990e-09 0s 0s 204236910e-09 1s 1s 204240030e-09 0s 0s 204246270e-09 0s 0s 204247150e-09 1s 1s 204250270e-09 0s 0s 204256550e-09 0s 0s 204257390e-09 1s 1s 204260510e-09 0s 0s 204266830e-09 0s 0s 204267630e-09 1s 1s 204270750e-09 0s 0s 204277110e-09 0s 0s 204277870e-09 1s 1s 204280990e-09 0s 0s 204287390e-09 0s 0s 204288110e-09 1s 1s 204291230e-09 0s 0s 204297670e-09 0s 0s 204298350e-09 1s 1s 204301470e-09 0s 0s 204307950e-09 0s 0s 204308590e-09 1s 1s 204311710e-09 0s 0s 204318230e-09 0s 0s 204318830e-09 1s 1s 204321950e-09 0s 0s 204328510e-09 0s 0s 204329070e-09 1s 1s 204332190e-09 0s 0s 204338790e-09 0s 0s 204339310e-09 1s 1s 204342430e-09 0s 0s 204349070e-09 0s 0s 204349550e-09 1s 1s 204352670e-09 0s 0s 204359350e-09 0s 0s 204359790e-09 1s 1s 204362910e-09 0s 0s 204369630e-09 0s 0s 204370030e-09 1s 1s 204373150e-09 0s 0s 204379910e-09 0s 0s 204380270e-09 1s 1s 204383390e-09 0s 0s 204390190e-09 0s 0s 204390510e-09 1s 1s 204393630e-09 0s 0s 204400470e-09 0s 0s 204400750e-09 1s 1s 204403870e-09 0s 0s 204410750e-09 0s 0s 204410990e-09 1s 1s 204414110e-09 0s 0s 204421030e-09 0s 0s 204421230e-09 1s 1s 204424350e-09 0s 0s 204431310e-09 0s 0s 204431470e-09 1s 1s 204434590e-09 0s 0s 204441590e-09 0s 0s 204441710e-09 1s 1s 204444830e-09 0s 0s 204451870e-09 0s 0s 204451950e-09 1s 1s 204455070e-09 0s 0s 204462150e-09 0s 0s 204462190e-09 1s 1s 204465310e-09 0s 0s 204472430e-09 1s 1s 204472470e-09 1s 1s 204475590e-09 0s 0s 204482670e-09 1s 1s 204482750e-09 1s 1s 204485830e-09 0s 0s 204492910e-09 1s 1s 204493030e-09 1s 1s 204496070e-09 0s 0s 204503150e-09 1s 1s 204503310e-09 1s 1s 204506310e-09 0s 0s 204513390e-09 1s 1s 204513590e-09 1s 1s 204516550e-09 0s 0s 204523630e-09 1s 1s 204523870e-09 1s 1s 204526790e-09 0s 0s 204533870e-09 1s 1s 204534150e-09 1s 1s 204537030e-09 0s 0s 204544110e-09 1s 1s 204544430e-09 1s 1s 204547270e-09 0s 0s 204554350e-09 1s 1s 204554710e-09 1s 1s 204557510e-09 0s 0s 204564590e-09 1s 1s 204564990e-09 1s 1s 204567750e-09 0s 0s 204574830e-09 1s 1s 204575270e-09 1s 1s 204577990e-09 0s 0s 204585070e-09 1s 1s 204585550e-09 1s 1s 204588230e-09 0s 0s 204595310e-09 1s 1s 204595830e-09 1s 1s 204598470e-09 0s 0s 204605550e-09 1s 1s 204606110e-09 1s 1s 204608710e-09 0s 0s 204615790e-09 1s 1s 204616390e-09 1s 1s 204618950e-09 0s 0s 204626030e-09 1s 1s 204626670e-09 1s 1s 204629190e-09 0s 0s 204636270e-09 1s 1s 204636950e-09 1s 1s 204639430e-09 0s 0s 204646510e-09 1s 1s 204647230e-09 1s 1s 204649670e-09 0s 0s 204656750e-09 1s 1s 204657510e-09 1s 1s 204659910e-09 0s 0s 204666990e-09 1s 1s 204667790e-09 1s 1s 204670150e-09 0s 0s 204677230e-09 1s 1s 204678070e-09 1s 1s 204680390e-09 0s 0s 204687470e-09 1s 1s 204688350e-09 1s 1s 204690630e-09 0s 0s 204697710e-09 1s 1s 204698630e-09 1s 1s 204700870e-09 0s 0s 204707950e-09 1s 1s 204708910e-09 1s 1s 204711110e-09 0s 0s 204718190e-09 1s 1s 204719190e-09 1s 1s 204721350e-09 0s 0s 204728430e-09 1s 1s 204729470e-09 1s 1s 204731590e-09 0s 0s 204738670e-09 1s 1s 204739750e-09 1s 1s 204741830e-09 0s 0s 204748910e-09 1s 1s 204750030e-09 1s 1s 204752070e-09 0s 0s 204759150e-09 1s 1s 204760310e-09 1s 1s 204762310e-09 0s 0s 204769390e-09 1s 1s 204770590e-09 1s 1s 204772550e-09 0s 0s 204779630e-09 1s 1s 204780870e-09 1s 1s 204782790e-09 0s 0s 204789870e-09 1s 1s 204791150e-09 1s 1s 204793030e-09 0s 0s 204800110e-09 1s 1s 204801430e-09 1s 1s 204803270e-09 0s 0s 204810350e-09 1s 1s 204811710e-09 1s 1s 204813510e-09 0s 0s 204820590e-09 1s 1s 204821990e-09 1s 1s 204823750e-09 0s 0s 204830830e-09 1s 1s 204832270e-09 1s 1s 204833990e-09 0s 0s 204841070e-09 1s 1s 204842550e-09 1s 1s 204844230e-09 0s 0s 204851310e-09 1s 1s 204852830e-09 1s 1s 204854470e-09 0s 0s 204861550e-09 1s 1s 204863110e-09 1s 1s 204864710e-09 0s 0s 204871790e-09 1s 1s 204873390e-09 1s 1s 204874950e-09 0s 0s 204882030e-09 1s 1s 204883670e-09 1s 1s 204885190e-09 0s 0s 204892270e-09 1s 1s 204893950e-09 1s 1s 204895430e-09 0s 0s 204902510e-09 1s 1s 204904230e-09 1s 1s 204905670e-09 0s 0s 204912750e-09 1s 1s 204914510e-09 1s 1s 204915910e-09 0s 0s 204922990e-09 1s 1s 204924790e-09 1s 1s 204926150e-09 0s 0s 204933230e-09 1s 1s 204935070e-09 1s 1s 204936390e-09 0s 0s 204943470e-09 1s 1s 204945350e-09 1s 1s 204946630e-09 0s 0s 204953710e-09 1s 1s 204955630e-09 1s 1s 204956870e-09 0s 0s 204963950e-09 1s 1s 204965910e-09 1s 1s 204967110e-09 0s 0s 204974190e-09 1s 1s 204976190e-09 1s 1s 204977350e-09 0s 0s 204984430e-09 1s 1s 204986470e-09 1s 1s 204987590e-09 0s 0s 204994670e-09 1s 1s 204996750e-09 1s 1s 204997830e-09 0s 0s 205004910e-09 1s 1s 205007030e-09 1s 1s 205008070e-09 0s 0s 205015150e-09 1s 1s 205017310e-09 1s 1s 205018310e-09 0s 0s 205025390e-09 1s 1s 205027590e-09 1s 1s 205028550e-09 0s 0s 205035630e-09 1s 1s 205037870e-09 1s 1s 205038790e-09 0s 0s 205045870e-09 1s 1s 205048150e-09 1s 1s 205049030e-09 0s 0s 205056110e-09 1s 1s 205058430e-09 1s 1s 205059270e-09 0s 0s 205066350e-09 1s 1s 205068710e-09 1s 1s 205069510e-09 0s 0s 205076590e-09 1s 1s 205078990e-09 1s 1s 205079750e-09 0s 0s 205086830e-09 1s 1s 205089270e-09 1s 1s 205089990e-09 0s 0s 205097070e-09 1s 1s 205099550e-09 1s 1s 205100230e-09 0s 0s 205107310e-09 1s 1s 205109830e-09 1s 1s 205110470e-09 0s 0s 205117550e-09 1s 1s 205120110e-09 1s 1s 205120710e-09 0s 0s 205127790e-09 1s 1s 205130390e-09 1s 1s 205130950e-09 0s 0s 205138030e-09 1s 1s 205140670e-09 1s 1s 205141190e-09 0s 0s 205148270e-09 1s 1s 205150950e-09 1s 1s 205151430e-09 0s 0s 205158510e-09 1s 1s 205161230e-09 1s 1s 205161670e-09 0s 0s 205168750e-09 1s 1s 205171510e-09 1s 1s 205171910e-09 0s 0s 205178990e-09 1s 1s 205181790e-09 1s 1s 205182150e-09 0s 0s 205189230e-09 1s 1s 205192070e-09 1s 1s 205192390e-09 0s 0s 205199470e-09 1s 1s 205202350e-09 1s 1s 205202630e-09 0s 0s 205209710e-09 1s 1s 205212630e-09 1s 1s 205212870e-09 0s 0s 205219950e-09 1s 1s 205222910e-09 1s 1s 205223110e-09 0s 0s 205230190e-09 1s 1s 205233190e-09 1s 1s 205233350e-09 0s 0s 205240430e-09 1s 1s 205243470e-09 1s 1s 205243590e-09 0s 0s 205250670e-09 1s 1s 205253750e-09 1s 1s 205253830e-09 0s 0s 205260910e-09 1s 1s 205264030e-09 1s 1s 205264070e-09 0s 0s 205271150e-09 1s 1s 205274310e-09 0s 0s 205281390e-09 1s 1s 205284550e-09 0s 0s 205284590e-09 0s 0s 205291630e-09 1s 1s 205294790e-09 0s 0s 205294870e-09 0s 0s 205301870e-09 1s 1s 205305030e-09 0s 0s 205305150e-09 0s 0s 205312110e-09 1s 1s 205315270e-09 0s 0s 205315430e-09 0s 0s 205322350e-09 1s 1s 205325510e-09 0s 0s 205325710e-09 0s 0s 205332590e-09 1s 1s 205335750e-09 0s 0s 205335990e-09 0s 0s 205342830e-09 1s 1s 205345990e-09 0s 0s 205346270e-09 0s 0s 205353070e-09 1s 1s 205356230e-09 0s 0s 205356550e-09 0s 0s 205363310e-09 1s 1s 205366470e-09 0s 0s 205366830e-09 0s 0s 205373550e-09 1s 1s 205376710e-09 0s 0s 205377110e-09 0s 0s 205383790e-09 1s 1s 205386950e-09 0s 0s 205387390e-09 0s 0s 205394030e-09 1s 1s 205397190e-09 0s 0s 205397670e-09 0s 0s 205404270e-09 1s 1s 205407430e-09 0s 0s 205407950e-09 0s 0s 205414510e-09 1s 1s 205417670e-09 0s 0s 205418230e-09 0s 0s 205424750e-09 1s 1s 205427910e-09 0s 0s 205428510e-09 0s 0s 205434990e-09 1s 1s 205438150e-09 0s 0s 205438790e-09 0s 0s 205445230e-09 1s 1s 205448390e-09 0s 0s 205449070e-09 0s 0s 205455470e-09 1s 1s 205458630e-09 0s 0s 205459350e-09 0s 0s 205465710e-09 1s 1s 205468870e-09 0s 0s 205469630e-09 0s 0s 205475950e-09 1s 1s 205479110e-09 0s 0s 205479910e-09 0s 0s 205486190e-09 1s 1s 205489350e-09 0s 0s 205490190e-09 0s 0s 205496430e-09 1s 1s 205499590e-09 0s 0s 205500470e-09 0s 0s 205506670e-09 1s 1s 205509830e-09 0s 0s 205510750e-09 0s 0s 205516910e-09 1s 1s 205520070e-09 0s 0s 205521030e-09 0s 0s 205527150e-09 1s 1s 205530310e-09 0s 0s 205531310e-09 0s 0s 205537390e-09 1s 1s 205540550e-09 0s 0s 205541590e-09 0s 0s 205547630e-09 1s 1s 205550790e-09 0s 0s 205551870e-09 0s 0s 205557870e-09 1s 1s 205561030e-09 0s 0s 205562150e-09 0s 0s 205568110e-09 1s 1s 205571270e-09 0s 0s 205572430e-09 0s 0s 205578350e-09 1s 1s 205581510e-09 0s 0s 205582710e-09 0s 0s 205588590e-09 1s 1s 205591750e-09 0s 0s 205592990e-09 0s 0s 205598830e-09 1s 1s 205601990e-09 0s 0s 205603270e-09 0s 0s 205609070e-09 1s 1s 205612230e-09 0s 0s 205613550e-09 0s 0s 205619310e-09 1s 1s 205622470e-09 0s 0s 205623830e-09 0s 0s 205629550e-09 1s 1s 205632710e-09 0s 0s 205634110e-09 0s 0s 205639790e-09 1s 1s 205642950e-09 0s 0s 205644390e-09 0s 0s 205650030e-09 1s 1s 205653190e-09 0s 0s 205654670e-09 0s 0s 205660270e-09 1s 1s 205663430e-09 0s 0s 205664950e-09 0s 0s 205670510e-09 1s 1s 205673670e-09 0s 0s 205675230e-09 0s 0s 205680750e-09 1s 1s 205683910e-09 0s 0s 205685510e-09 0s 0s 205690990e-09 1s 1s 205694150e-09 0s 0s 205695790e-09 0s 0s 205701230e-09 1s 1s 205704390e-09 0s 0s 205706070e-09 0s 0s 205711470e-09 1s 1s 205714630e-09 0s 0s 205716350e-09 0s 0s 205721710e-09 1s 1s 205724870e-09 0s 0s 205726630e-09 0s 0s 205731950e-09 1s 1s 205735110e-09 0s 0s 205736910e-09 0s 0s 205742190e-09 1s 1s 205745350e-09 0s 0s 205747190e-09 0s 0s 205752430e-09 1s 1s 205755590e-09 0s 0s 205757470e-09 0s 0s 205762670e-09 1s 1s 205765830e-09 0s 0s 205767750e-09 0s 0s 205772910e-09 1s 1s 205776070e-09 0s 0s 205778030e-09 0s 0s 205783150e-09 1s 1s 205786310e-09 0s 0s 205788310e-09 0s 0s 205793390e-09 1s 1s 205796550e-09 0s 0s 205798590e-09 0s 0s 205803630e-09 1s 1s 205806790e-09 0s 0s 205808870e-09 0s 0s 205813870e-09 1s 1s 205817030e-09 0s 0s 205819150e-09 0s 0s 205824110e-09 1s 1s 205827270e-09 0s 0s 205829430e-09 0s 0s 205834350e-09 1s 1s 205837510e-09 0s 0s 205839710e-09 0s 0s 205844590e-09 1s 1s 205847750e-09 0s 0s 205849990e-09 0s 0s 205854830e-09 1s 1s 205857990e-09 0s 0s 205860270e-09 0s 0s 205865070e-09 1s 1s 205868230e-09 0s 0s 205870550e-09 0s 0s 205875310e-09 1s 1s 205878470e-09 0s 0s 205880830e-09 0s 0s 205885550e-09 1s 1s 205888710e-09 0s 0s 205891110e-09 0s 0s 205895790e-09 1s 1s 205898950e-09 0s 0s 205901390e-09 0s 0s 205906030e-09 1s 1s 205909190e-09 0s 0s 205911670e-09 0s 0s 205916270e-09 1s 1s 205919430e-09 0s 0s 205921950e-09 0s 0s 205926510e-09 1s 1s 205929670e-09 0s 0s 205932230e-09 0s 0s 205936750e-09 1s 1s 205939910e-09 0s 0s 205942510e-09 0s 0s 205946990e-09 1s 1s 205950150e-09 0s 0s 205952790e-09 0s 0s 205957230e-09 1s 1s 205960390e-09 0s 0s 205963070e-09 0s 0s 205967470e-09 1s 1s 205970630e-09 0s 0s 205973350e-09 0s 0s 205977710e-09 1s 1s 205980870e-09 0s 0s 205983630e-09 0s 0s 205987950e-09 1s 1s 205991110e-09 0s 0s 205993910e-09 0s 0s 205998190e-09 1s 1s 206001350e-09 0s 0s 206004190e-09 0s 0s 206008430e-09 1s 1s 206011590e-09 0s 0s 206014470e-09 0s 0s 206018670e-09 1s 1s 206021830e-09 0s 0s 206024750e-09 0s 0s 206028910e-09 1s 1s 206032070e-09 0s 0s 206035030e-09 0s 0s 206039150e-09 1s 1s 206042310e-09 0s 0s 206045310e-09 0s 0s 206049390e-09 1s 1s 206052550e-09 0s 0s 206055590e-09 0s 0s 206059630e-09 1s 1s 206062790e-09 0s 0s 206065870e-09 0s 0s 206069870e-09 1s 1s 206073030e-09 0s 0s 206076150e-09 0s 0s 206080110e-09 1s 1s 206083270e-09 0s 0s 206086430e-09 0s 0s 206090350e-09 1s 1s 206093510e-09 0s 0s 206096710e-09 0s 0s 206100590e-09 1s 1s 206103750e-09 0s 0s 206106990e-09 0s 0s 206110830e-09 1s 1s 206113990e-09 0s 0s 206117270e-09 0s 0s 206121070e-09 1s 1s 206124230e-09 0s 0s 206127550e-09 0s 0s 206131310e-09 1s 1s 206134470e-09 0s 0s 206137830e-09 0s 0s 206141550e-09 1s 1s 206144710e-09 0s 0s 206148110e-09 0s 0s 206151790e-09 1s 1s 206154950e-09 0s 0s 206158390e-09 0s 0s 206162030e-09 1s 1s 206165190e-09 0s 0s 206168670e-09 0s 0s 206172270e-09 1s 1s 206175430e-09 0s 0s 206178950e-09 0s 0s 206182510e-09 1s 1s 206185670e-09 0s 0s 206189230e-09 0s 0s 206192750e-09 1s 1s 206195910e-09 0s 0s 206199510e-09 0s 0s 206202990e-09 1s 1s 206206150e-09 0s 0s 206209790e-09 0s 0s 206213230e-09 1s 1s 206216390e-09 0s 0s 206220070e-09 0s 0s 206223470e-09 1s 1s 206226630e-09 0s 0s 206230350e-09 0s 0s 206233710e-09 1s 1s 206236870e-09 0s 0s 206240630e-09 0s 0s 206243950e-09 1s 1s 206247110e-09 0s 0s 206250910e-09 0s 0s 206254190e-09 1s 1s 206257350e-09 0s 0s 206261190e-09 0s 0s 206264430e-09 1s 1s 206267590e-09 0s 0s 206271470e-09 0s 0s 206274670e-09 1s 1s 206277830e-09 0s 0s 206281750e-09 0s 0s 206284910e-09 1s 1s 206288070e-09 0s 0s 206292030e-09 0s 0s 206295150e-09 1s 1s 206298310e-09 0s 0s 206302310e-09 0s 0s 206305390e-09 1s 1s 206308550e-09 0s 0s 206312590e-09 0s 0s 206315630e-09 1s 1s 206318790e-09 0s 0s 206322870e-09 0s 0s 206325870e-09 1s 1s 206329030e-09 0s 0s 206333150e-09 0s 0s 206336110e-09 1s 1s 206339270e-09 0s 0s 206343430e-09 0s 0s 206346350e-09 1s 1s 206349510e-09 0s 0s 206353710e-09 0s 0s 206356590e-09 1s 1s 206359750e-09 0s 0s 206363990e-09 0s 0s 206366830e-09 1s 1s 206369990e-09 0s 0s 206374270e-09 0s 0s 206377070e-09 1s 1s 206380230e-09 0s 0s 206384550e-09 0s 0s 206387310e-09 1s 1s 206390470e-09 0s 0s 206394830e-09 0s 0s 206397550e-09 1s 1s 206400710e-09 0s 0s 206405110e-09 0s 0s 206407790e-09 1s 1s 206410950e-09 0s 0s 206415390e-09 0s 0s 206418030e-09 1s 1s 206421190e-09 0s 0s 206425670e-09 0s 0s 206428270e-09 1s 1s 206431430e-09 0s 0s 206435950e-09 0s 0s 206438510e-09 1s 1s 206441670e-09 0s 0s 206446230e-09 0s 0s 206448750e-09 1s 1s 206451910e-09 0s 0s 206456510e-09 0s 0s 206458990e-09 1s 1s 206462150e-09 0s 0s 206466790e-09 0s 0s 206469230e-09 1s 1s 206472390e-09 0s 0s 206477070e-09 0s 0s 206479470e-09 1s 1s 206482630e-09 0s 0s 206487350e-09 0s 0s 206489710e-09 1s 1s 206492870e-09 0s 0s 206497630e-09 0s 0s 206499950e-09 1s 1s 206503110e-09 0s 0s 206507910e-09 0s 0s 206510190e-09 1s 1s 206513350e-09 0s 0s 206518190e-09 0s 0s 206520430e-09 1s 1s 206523590e-09 0s 0s 206528470e-09 0s 0s 206530670e-09 1s 1s 206533830e-09 0s 0s 206538750e-09 0s 0s 206540910e-09 1s 1s 206544070e-09 0s 0s 206549030e-09 0s 0s 206551150e-09 1s 1s 206554310e-09 0s 0s 206559310e-09 0s 0s 206561390e-09 1s 1s 206564550e-09 0s 0s 206569590e-09 0s 0s 206571630e-09 1s 1s 206574790e-09 0s 0s 206579870e-09 0s 0s 206581870e-09 1s 1s 206585030e-09 0s 0s 206590150e-09 0s 0s 206592110e-09 1s 1s 206595270e-09 0s 0s 206600430e-09 0s 0s 206602350e-09 1s 1s 206605510e-09 0s 0s 206610710e-09 0s 0s 206612590e-09 1s 1s 206615750e-09 0s 0s 206620990e-09 0s 0s 206622830e-09 1s 1s 206625990e-09 0s 0s 206631270e-09 0s 0s 206633070e-09 1s 1s 206636230e-09 0s 0s 206641550e-09 0s 0s 206643310e-09 1s 1s 206646470e-09 0s 0s 206651830e-09 0s 0s 206653550e-09 1s 1s 206656710e-09 0s 0s 206662110e-09 0s 0s 206663790e-09 1s 1s 206666950e-09 0s 0s 206672390e-09 0s 0s 206674030e-09 1s 1s 206677190e-09 0s 0s 206682670e-09 0s 0s 206684270e-09 1s 1s 206687430e-09 0s 0s 206692950e-09 0s 0s 206694510e-09 1s 1s 206697670e-09 0s 0s 206703230e-09 0s 0s 206704750e-09 1s 1s 206707910e-09 0s 0s 206713510e-09 0s 0s 206714990e-09 1s 1s 206718150e-09 0s 0s 206723790e-09 0s 0s 206725230e-09 1s 1s 206728390e-09 0s 0s 206734070e-09 0s 0s 206735470e-09 1s 1s 206738630e-09 0s 0s 206744350e-09 0s 0s 206745710e-09 1s 1s 206748870e-09 0s 0s 206754630e-09 0s 0s 206755950e-09 1s 1s 206759110e-09 0s 0s 206764910e-09 0s 0s 206766190e-09 1s 1s 206769350e-09 0s 0s 206775190e-09 0s 0s 206776430e-09 1s 1s 206779590e-09 0s 0s 206785470e-09 0s 0s 206786670e-09 1s 1s 206789830e-09 0s 0s 206795750e-09 0s 0s 206796910e-09 1s 1s 206800070e-09 0s 0s 206806030e-09 0s 0s 206807150e-09 1s 1s 206810310e-09 0s 0s 206816310e-09 0s 0s 206817390e-09 1s 1s 206820550e-09 0s 0s 206826590e-09 0s 0s 206827630e-09 1s 1s 206830790e-09 0s 0s 206836870e-09 0s 0s 206837870e-09 1s 1s 206841030e-09 0s 0s 206847150e-09 0s 0s 206848110e-09 1s 1s 206851270e-09 0s 0s 206857430e-09 0s 0s 206858350e-09 1s 1s 206861510e-09 0s 0s 206867710e-09 0s 0s 206868590e-09 1s 1s 206871750e-09 0s 0s 206877990e-09 0s 0s 206878830e-09 1s 1s 206881990e-09 0s 0s 206888270e-09 0s 0s 206889070e-09 1s 1s 206892230e-09 0s 0s 206898550e-09 0s 0s 206899310e-09 1s 1s 206902470e-09 0s 0s 206908830e-09 0s 0s 206909550e-09 1s 1s 206912710e-09 0s 0s 206919110e-09 0s 0s 206919790e-09 1s 1s 206922950e-09 0s 0s 206929390e-09 0s 0s 206930030e-09 1s 1s 206933190e-09 0s 0s 206939670e-09 0s 0s 206940270e-09 1s 1s 206943430e-09 0s 0s 206949950e-09 0s 0s 206950510e-09 1s 1s 206953670e-09 0s 0s 206960230e-09 0s 0s 206960750e-09 1s 1s 206963910e-09 0s 0s 206970510e-09 0s 0s 206970990e-09 1s 1s 206974150e-09 0s 0s 206980790e-09 0s 0s 206981230e-09 1s 1s 206984390e-09 0s 0s 206991070e-09 0s 0s 206991470e-09 1s 1s 206994630e-09 0s 0s 207001350e-09 0s 0s 207001710e-09 1s 1s 207004870e-09 0s 0s 207011630e-09 0s 0s 207011950e-09 1s 1s 207015110e-09 0s 0s 207021910e-09 0s 0s 207022190e-09 1s 1s 207025350e-09 0s 0s 207032190e-09 0s 0s 207032430e-09 1s 1s 207035590e-09 0s 0s 207042470e-09 0s 0s 207042670e-09 1s 1s 207045830e-09 0s 0s 207052750e-09 0s 0s 207052910e-09 1s 1s 207056070e-09 0s 0s 207063030e-09 0s 0s 207063150e-09 1s 1s 207066310e-09 0s 0s 207073310e-09 0s 0s 207073390e-09 1s 1s 207076550e-09 0s 0s 207083590e-09 0s 0s 207083630e-09 1s 1s 207086790e-09 0s 0s 207093870e-09 1s 1s 207093910e-09 1s 1s 207097070e-09 0s 0s 207104110e-09 1s 1s 207104190e-09 1s 1s 207107310e-09 0s 0s 207114350e-09 1s 1s 207114470e-09 1s 1s 207117550e-09 0s 0s 207124590e-09 1s 1s 207124750e-09 1s 1s 207127790e-09 0s 0s 207134830e-09 1s 1s 207135030e-09 1s 1s 207138030e-09 0s 0s 207145070e-09 1s 1s 207145310e-09 1s 1s 207148270e-09 0s 0s 207155310e-09 1s 1s 207155590e-09 1s 1s 207158510e-09 0s 0s 207165550e-09 1s 1s 207165870e-09 1s 1s 207168750e-09 0s 0s 207175790e-09 1s 1s 207176150e-09 1s 1s 207178990e-09 0s 0s 207186030e-09 1s 1s 207186430e-09 1s 1s 207189230e-09 0s 0s 207196270e-09 1s 1s 207196710e-09 1s 1s 207199470e-09 0s 0s 207206510e-09 1s 1s 207206990e-09 1s 1s 207209710e-09 0s 0s 207216750e-09 1s 1s 207217270e-09 1s 1s 207219950e-09 0s 0s 207226990e-09 1s 1s 207227550e-09 1s 1s 207230190e-09 0s 0s 207237230e-09 1s 1s 207237830e-09 1s 1s 207240430e-09 0s 0s 207247470e-09 1s 1s 207248110e-09 1s 1s 207250670e-09 0s 0s 207257710e-09 1s 1s 207258390e-09 1s 1s 207260910e-09 0s 0s 207267950e-09 1s 1s 207268670e-09 1s 1s 207271150e-09 0s 0s 207278190e-09 1s 1s 207278950e-09 1s 1s 207281390e-09 0s 0s 207288430e-09 1s 1s 207289230e-09 1s 1s 207291630e-09 0s 0s 207298670e-09 1s 1s 207299510e-09 1s 1s 207301870e-09 0s 0s 207308910e-09 1s 1s 207309790e-09 1s 1s 207312110e-09 0s 0s 207319150e-09 1s 1s 207320070e-09 1s 1s 207322350e-09 0s 0s 207329390e-09 1s 1s 207330350e-09 1s 1s 207332590e-09 0s 0s 207339630e-09 1s 1s 207340630e-09 1s 1s 207342830e-09 0s 0s 207349870e-09 1s 1s 207350910e-09 1s 1s 207353070e-09 0s 0s 207360110e-09 1s 1s 207361190e-09 1s 1s 207363310e-09 0s 0s 207370350e-09 1s 1s 207371470e-09 1s 1s 207373550e-09 0s 0s 207380590e-09 1s 1s 207381750e-09 1s 1s 207383790e-09 0s 0s 207390830e-09 1s 1s 207392030e-09 1s 1s 207394030e-09 0s 0s 207401070e-09 1s 1s 207402310e-09 1s 1s 207404270e-09 0s 0s 207411310e-09 1s 1s 207412590e-09 1s 1s 207414510e-09 0s 0s 207421550e-09 1s 1s 207422870e-09 1s 1s 207424750e-09 0s 0s 207431790e-09 1s 1s 207433150e-09 1s 1s 207434990e-09 0s 0s 207442030e-09 1s 1s 207443430e-09 1s 1s 207445230e-09 0s 0s 207452270e-09 1s 1s 207453710e-09 1s 1s 207455470e-09 0s 0s 207462510e-09 1s 1s 207463990e-09 1s 1s 207465710e-09 0s 0s 207472750e-09 1s 1s 207474270e-09 1s 1s 207475950e-09 0s 0s 207482990e-09 1s 1s 207484550e-09 1s 1s 207486190e-09 0s 0s 207493230e-09 1s 1s 207494830e-09 1s 1s 207496430e-09 0s 0s 207503470e-09 1s 1s 207505110e-09 1s 1s 207506670e-09 0s 0s 207513710e-09 1s 1s 207515390e-09 1s 1s 207516910e-09 0s 0s 207523950e-09 1s 1s 207525670e-09 1s 1s 207527150e-09 0s 0s 207534190e-09 1s 1s 207535950e-09 1s 1s 207537390e-09 0s 0s 207544430e-09 1s 1s 207546230e-09 1s 1s 207547630e-09 0s 0s 207554670e-09 1s 1s 207556510e-09 1s 1s 207557870e-09 0s 0s 207564910e-09 1s 1s 207566790e-09 1s 1s 207568110e-09 0s 0s 207575150e-09 1s 1s 207577070e-09 1s 1s 207578350e-09 0s 0s 207585390e-09 1s 1s 207587350e-09 1s 1s 207588590e-09 0s 0s 207595630e-09 1s 1s 207597630e-09 1s 1s 207598830e-09 0s 0s 207605870e-09 1s 1s 207607910e-09 1s 1s 207609070e-09 0s 0s 207616110e-09 1s 1s 207618190e-09 1s 1s 207619310e-09 0s 0s 207626350e-09 1s 1s 207628470e-09 1s 1s 207629550e-09 0s 0s 207636590e-09 1s 1s 207638750e-09 1s 1s 207639790e-09 0s 0s 207646830e-09 1s 1s 207649030e-09 1s 1s 207650030e-09 0s 0s 207657070e-09 1s 1s 207659310e-09 1s 1s 207660270e-09 0s 0s 207667310e-09 1s 1s 207669590e-09 1s 1s 207670510e-09 0s 0s 207677550e-09 1s 1s 207679870e-09 1s 1s 207680750e-09 0s 0s 207687790e-09 1s 1s 207690150e-09 1s 1s 207690990e-09 0s 0s 207698030e-09 1s 1s 207700430e-09 1s 1s 207701230e-09 0s 0s 207708270e-09 1s 1s 207710710e-09 1s 1s 207711470e-09 0s 0s 207718510e-09 1s 1s 207720990e-09 1s 1s 207721710e-09 0s 0s 207728750e-09 1s 1s 207731270e-09 1s 1s 207731950e-09 0s 0s 207738990e-09 1s 1s 207741550e-09 1s 1s 207742190e-09 0s 0s 207749230e-09 1s 1s 207751830e-09 1s 1s 207752430e-09 0s 0s 207759470e-09 1s 1s 207762110e-09 1s 1s 207762670e-09 0s 0s 207769710e-09 1s 1s 207772390e-09 1s 1s 207772910e-09 0s 0s 207779950e-09 1s 1s 207782670e-09 1s 1s 207783150e-09 0s 0s 207790190e-09 1s 1s 207792950e-09 1s 1s 207793390e-09 0s 0s 207800430e-09 1s 1s 207803230e-09 1s 1s 207803630e-09 0s 0s 207810670e-09 1s 1s 207813510e-09 1s 1s 207813870e-09 0s 0s 207820910e-09 1s 1s 207823790e-09 1s 1s 207824110e-09 0s 0s 207831150e-09 1s 1s 207834070e-09 1s 1s 207834350e-09 0s 0s 207841390e-09 1s 1s 207844350e-09 1s 1s 207844590e-09 0s 0s 207851630e-09 1s 1s 207854630e-09 1s 1s 207854830e-09 0s 0s 207861870e-09 1s 1s 207864910e-09 1s 1s 207865070e-09 0s 0s 207872110e-09 1s 1s 207875190e-09 1s 1s 207875310e-09 0s 0s 207882350e-09 1s 1s 207885470e-09 1s 1s 207885550e-09 0s 0s 207892590e-09 1s 1s 207895750e-09 1s 1s 207895790e-09 0s 0s 207902830e-09 1s 1s 207906030e-09 0s 0s 207913070e-09 1s 1s 207916270e-09 0s 0s 207916310e-09 0s 0s 207923310e-09 1s 1s 207926510e-09 0s 0s 207926590e-09 0s 0s 207933550e-09 1s 1s 207936750e-09 0s 0s 207936870e-09 0s 0s 207943790e-09 1s 1s 207946990e-09 0s 0s 207947150e-09 0s 0s 207954030e-09 1s 1s 207957230e-09 0s 0s 207957430e-09 0s 0s 207964270e-09 1s 1s 207967470e-09 0s 0s 207967710e-09 0s 0s 207974510e-09 1s 1s 207977710e-09 0s 0s 207977990e-09 0s 0s 207984750e-09 1s 1s 207987950e-09 0s 0s 207988270e-09 0s 0s 207994990e-09 1s 1s 207998190e-09 0s 0s 207998550e-09 0s 0s 208005230e-09 1s 1s 208008430e-09 0s 0s 208008830e-09 0s 0s 208015470e-09 1s 1s 208018670e-09 0s 0s 208019110e-09 0s 0s 208025710e-09 1s 1s 208028910e-09 0s 0s 208029390e-09 0s 0s 208035950e-09 1s 1s 208039150e-09 0s 0s 208039670e-09 0s 0s 208046190e-09 1s 1s 208049390e-09 0s 0s 208049950e-09 0s 0s 208056430e-09 1s 1s 208059630e-09 0s 0s 208060230e-09 0s 0s 208066670e-09 1s 1s 208069870e-09 0s 0s 208070510e-09 0s 0s 208076910e-09 1s 1s 208080110e-09 0s 0s 208080790e-09 0s 0s 208087150e-09 1s 1s 208090350e-09 0s 0s 208091070e-09 0s 0s 208097390e-09 1s 1s 208100590e-09 0s 0s 208101350e-09 0s 0s 208107630e-09 1s 1s 208110830e-09 0s 0s 208111630e-09 0s 0s 208117870e-09 1s 1s 208121070e-09 0s 0s 208121910e-09 0s 0s 208128110e-09 1s 1s 208131310e-09 0s 0s 208132190e-09 0s 0s 208138350e-09 1s 1s 208141550e-09 0s 0s 208142470e-09 0s 0s 208148590e-09 1s 1s 208151790e-09 0s 0s 208152750e-09 0s 0s 208158830e-09 1s 1s 208162030e-09 0s 0s 208163030e-09 0s 0s 208169070e-09 1s 1s 208172270e-09 0s 0s 208173310e-09 0s 0s 208179310e-09 1s 1s 208182510e-09 0s 0s 208183590e-09 0s 0s 208189550e-09 1s 1s 208192750e-09 0s 0s 208193870e-09 0s 0s 208199790e-09 1s 1s 208202990e-09 0s 0s 208204150e-09 0s 0s 208210030e-09 1s 1s 208213230e-09 0s 0s 208214430e-09 0s 0s 208220270e-09 1s 1s 208223470e-09 0s 0s 208224710e-09 0s 0s 208230510e-09 1s 1s 208233710e-09 0s 0s 208234990e-09 0s 0s 208240750e-09 1s 1s 208243950e-09 0s 0s 208245270e-09 0s 0s 208250990e-09 1s 1s 208254190e-09 0s 0s 208255550e-09 0s 0s 208261230e-09 1s 1s 208264430e-09 0s 0s 208265830e-09 0s 0s 208271470e-09 1s 1s 208274670e-09 0s 0s 208276110e-09 0s 0s 208281710e-09 1s 1s 208284910e-09 0s 0s 208286390e-09 0s 0s 208291950e-09 1s 1s 208295150e-09 0s 0s 208296670e-09 0s 0s 208302190e-09 1s 1s 208305390e-09 0s 0s 208306950e-09 0s 0s 208312430e-09 1s 1s 208315630e-09 0s 0s 208317230e-09 0s 0s 208322670e-09 1s 1s 208325870e-09 0s 0s 208327510e-09 0s 0s 208332910e-09 1s 1s 208336110e-09 0s 0s 208337790e-09 0s 0s 208343150e-09 1s 1s 208346350e-09 0s 0s 208348070e-09 0s 0s 208353390e-09 1s 1s 208356590e-09 0s 0s 208358350e-09 0s 0s 208363630e-09 1s 1s 208366830e-09 0s 0s 208368630e-09 0s 0s 208373870e-09 1s 1s 208377070e-09 0s 0s 208378910e-09 0s 0s 208384110e-09 1s 1s 208387310e-09 0s 0s 208389190e-09 0s 0s 208394350e-09 1s 1s 208397550e-09 0s 0s 208399470e-09 0s 0s 208404590e-09 1s 1s 208407790e-09 0s 0s 208409750e-09 0s 0s 208414830e-09 1s 1s 208418030e-09 0s 0s 208420030e-09 0s 0s 208425070e-09 1s 1s 208428270e-09 0s 0s 208430310e-09 0s 0s 208435310e-09 1s 1s 208438510e-09 0s 0s 208440590e-09 0s 0s 208445550e-09 1s 1s 208448750e-09 0s 0s 208450870e-09 0s 0s 208455790e-09 1s 1s 208458990e-09 0s 0s 208461150e-09 0s 0s 208466030e-09 1s 1s 208469230e-09 0s 0s 208471430e-09 0s 0s 208476270e-09 1s 1s 208479470e-09 0s 0s 208481710e-09 0s 0s 208486510e-09 1s 1s 208489710e-09 0s 0s 208491990e-09 0s 0s 208496750e-09 1s 1s 208499950e-09 0s 0s 208502270e-09 0s 0s 208506990e-09 1s 1s 208510190e-09 0s 0s 208512550e-09 0s 0s 208517230e-09 1s 1s 208520430e-09 0s 0s 208522830e-09 0s 0s 208527470e-09 1s 1s 208530670e-09 0s 0s 208533110e-09 0s 0s 208537710e-09 1s 1s 208540910e-09 0s 0s 208543390e-09 0s 0s 208547950e-09 1s 1s 208551150e-09 0s 0s 208553670e-09 0s 0s 208558190e-09 1s 1s 208561390e-09 0s 0s 208563950e-09 0s 0s 208568430e-09 1s 1s 208571630e-09 0s 0s 208574230e-09 0s 0s 208578670e-09 1s 1s 208581870e-09 0s 0s 208584510e-09 0s 0s 208588910e-09 1s 1s 208592110e-09 0s 0s 208594790e-09 0s 0s 208599150e-09 1s 1s 208602350e-09 0s 0s 208605070e-09 0s 0s 208609390e-09 1s 1s 208612590e-09 0s 0s 208615350e-09 0s 0s 208619630e-09 1s 1s 208622830e-09 0s 0s 208625630e-09 0s 0s 208629870e-09 1s 1s 208633070e-09 0s 0s 208635910e-09 0s 0s 208640110e-09 1s 1s 208643310e-09 0s 0s 208646190e-09 0s 0s 208650350e-09 1s 1s 208653550e-09 0s 0s 208656470e-09 0s 0s 208660590e-09 1s 1s 208663790e-09 0s 0s 208666750e-09 0s 0s 208670830e-09 1s 1s 208674030e-09 0s 0s 208677030e-09 0s 0s 208681070e-09 1s 1s 208684270e-09 0s 0s 208687310e-09 0s 0s 208691310e-09 1s 1s 208694510e-09 0s 0s 208697590e-09 0s 0s 208701550e-09 1s 1s 208704750e-09 0s 0s 208707870e-09 0s 0s 208711790e-09 1s 1s 208714990e-09 0s 0s 208718150e-09 0s 0s 208722030e-09 1s 1s 208725230e-09 0s 0s 208728430e-09 0s 0s 208732270e-09 1s 1s 208735470e-09 0s 0s 208738710e-09 0s 0s 208742510e-09 1s 1s 208745710e-09 0s 0s 208748990e-09 0s 0s 208752750e-09 1s 1s 208755950e-09 0s 0s 208759270e-09 0s 0s 208762990e-09 1s 1s 208766190e-09 0s 0s 208769550e-09 0s 0s 208773230e-09 1s 1s 208776430e-09 0s 0s 208779830e-09 0s 0s 208783470e-09 1s 1s 208786670e-09 0s 0s 208790110e-09 0s 0s 208793710e-09 1s 1s 208796910e-09 0s 0s 208800390e-09 0s 0s 208803950e-09 1s 1s 208807150e-09 0s 0s 208810670e-09 0s 0s 208814190e-09 1s 1s 208817390e-09 0s 0s 208820950e-09 0s 0s 208824430e-09 1s 1s 208827630e-09 0s 0s 208831230e-09 0s 0s 208834670e-09 1s 1s 208837870e-09 0s 0s 208841510e-09 0s 0s 208844910e-09 1s 1s 208848110e-09 0s 0s 208851790e-09 0s 0s 208855150e-09 1s 1s 208858350e-09 0s 0s 208862070e-09 0s 0s 208865390e-09 1s 1s 208868590e-09 0s 0s 208872350e-09 0s 0s 208875630e-09 1s 1s 208878830e-09 0s 0s 208882630e-09 0s 0s 208885870e-09 1s 1s 208889070e-09 0s 0s 208892910e-09 0s 0s 208896110e-09 1s 1s 208899310e-09 0s 0s 208903190e-09 0s 0s 208906350e-09 1s 1s 208909550e-09 0s 0s 208913470e-09 0s 0s 208916590e-09 1s 1s 208919790e-09 0s 0s 208923750e-09 0s 0s 208926830e-09 1s 1s 208930030e-09 0s 0s 208934030e-09 0s 0s 208937070e-09 1s 1s 208940270e-09 0s 0s 208944310e-09 0s 0s 208947310e-09 1s 1s 208950510e-09 0s 0s 208954590e-09 0s 0s 208957550e-09 1s 1s 208960750e-09 0s 0s 208964870e-09 0s 0s 208967790e-09 1s 1s 208970990e-09 0s 0s 208975150e-09 0s 0s 208978030e-09 1s 1s 208981230e-09 0s 0s 208985430e-09 0s 0s 208988270e-09 1s 1s 208991470e-09 0s 0s 208995710e-09 0s 0s 208998510e-09 1s 1s 209001710e-09 0s 0s 209005990e-09 0s 0s 209008750e-09 1s 1s 209011950e-09 0s 0s 209016270e-09 0s 0s 209018990e-09 1s 1s 209022190e-09 0s 0s 209026550e-09 0s 0s 209029230e-09 1s 1s 209032430e-09 0s 0s 209036830e-09 0s 0s 209039470e-09 1s 1s 209042670e-09 0s 0s 209047110e-09 0s 0s 209049710e-09 1s 1s 209052910e-09 0s 0s 209057390e-09 0s 0s 209059950e-09 1s 1s 209063150e-09 0s 0s 209067670e-09 0s 0s 209070190e-09 1s 1s 209073390e-09 0s 0s 209077950e-09 0s 0s 209080430e-09 1s 1s 209083630e-09 0s 0s 209088230e-09 0s 0s 209090670e-09 1s 1s 209093870e-09 0s 0s 209098510e-09 0s 0s 209100910e-09 1s 1s 209104110e-09 0s 0s 209108790e-09 0s 0s 209111150e-09 1s 1s 209114350e-09 0s 0s 209119070e-09 0s 0s 209121390e-09 1s 1s 209124590e-09 0s 0s 209129350e-09 0s 0s 209131630e-09 1s 1s 209134830e-09 0s 0s 209139630e-09 0s 0s 209141870e-09 1s 1s 209145070e-09 0s 0s 209149910e-09 0s 0s 209152110e-09 1s 1s 209155310e-09 0s 0s 209160190e-09 0s 0s 209162350e-09 1s 1s 209165550e-09 0s 0s 209170470e-09 0s 0s 209172590e-09 1s 1s 209175790e-09 0s 0s 209180750e-09 0s 0s 209182830e-09 1s 1s 209186030e-09 0s 0s 209191030e-09 0s 0s 209193070e-09 1s 1s 209196270e-09 0s 0s 209201310e-09 0s 0s 209203310e-09 1s 1s 209206510e-09 0s 0s 209211590e-09 0s 0s 209213550e-09 1s 1s 209216750e-09 0s 0s 209221870e-09 0s 0s 209223790e-09 1s 1s 209226990e-09 0s 0s 209232150e-09 0s 0s 209234030e-09 1s 1s 209237230e-09 0s 0s 209242430e-09 0s 0s 209244270e-09 1s 1s 209247470e-09 0s 0s 209252710e-09 0s 0s 209254510e-09 1s 1s 209257710e-09 0s 0s 209262990e-09 0s 0s 209264750e-09 1s 1s 209267950e-09 0s 0s 209273270e-09 0s 0s 209274990e-09 1s 1s 209278190e-09 0s 0s 209283550e-09 0s 0s 209285230e-09 1s 1s 209288430e-09 0s 0s 209293830e-09 0s 0s 209295470e-09 1s 1s 209298670e-09 0s 0s 209304110e-09 0s 0s 209305710e-09 1s 1s 209308910e-09 0s 0s 209314390e-09 0s 0s 209315950e-09 1s 1s 209319150e-09 0s 0s 209324670e-09 0s 0s 209326190e-09 1s 1s 209329390e-09 0s 0s 209334950e-09 0s 0s 209336430e-09 1s 1s 209339630e-09 0s 0s 209345230e-09 0s 0s 209346670e-09 1s 1s 209349870e-09 0s 0s 209355510e-09 0s 0s 209356910e-09 1s 1s 209360110e-09 0s 0s 209365790e-09 0s 0s 209367150e-09 1s 1s 209370350e-09 0s 0s 209376070e-09 0s 0s 209377390e-09 1s 1s 209380590e-09 0s 0s 209386350e-09 0s 0s 209387630e-09 1s 1s 209390830e-09 0s 0s 209396630e-09 0s 0s 209397870e-09 1s 1s 209401070e-09 0s 0s 209406910e-09 0s 0s 209408110e-09 1s 1s 209411310e-09 0s 0s 209417190e-09 0s 0s 209418350e-09 1s 1s 209421550e-09 0s 0s 209427470e-09 0s 0s 209428590e-09 1s 1s 209431790e-09 0s 0s 209437750e-09 0s 0s 209438830e-09 1s 1s 209442030e-09 0s 0s 209448030e-09 0s 0s 209449070e-09 1s 1s 209452270e-09 0s 0s 209458310e-09 0s 0s 209459310e-09 1s 1s 209462510e-09 0s 0s 209468590e-09 0s 0s 209469550e-09 1s 1s 209472750e-09 0s 0s 209478870e-09 0s 0s 209479790e-09 1s 1s 209482990e-09 0s 0s 209489150e-09 0s 0s 209490030e-09 1s 1s 209493230e-09 0s 0s 209499430e-09 0s 0s 209500270e-09 1s 1s 209503470e-09 0s 0s 209509710e-09 0s 0s 209510510e-09 1s 1s 209513710e-09 0s 0s 209519990e-09 0s 0s 209520750e-09 1s 1s 209523950e-09 0s 0s 209530270e-09 0s 0s 209530990e-09 1s 1s 209534190e-09 0s 0s 209540550e-09 0s 0s 209541230e-09 1s 1s 209544430e-09 0s 0s 209550830e-09 0s 0s 209551470e-09 1s 1s 209554670e-09 0s 0s 209561110e-09 0s 0s 209561710e-09 1s 1s 209564910e-09 0s 0s 209571390e-09 0s 0s 209571950e-09 1s 1s 209575150e-09 0s 0s 209581670e-09 0s 0s 209582190e-09 1s 1s 209585390e-09 0s 0s 209591950e-09 0s 0s 209592430e-09 1s 1s 209595630e-09 0s 0s 209602230e-09 0s 0s 209602670e-09 1s 1s 209605870e-09 0s 0s 209612510e-09 0s 0s 209612910e-09 1s 1s 209616110e-09 0s 0s 209622790e-09 0s 0s 209623150e-09 1s 1s 209626350e-09 0s 0s 209633070e-09 0s 0s 209633390e-09 1s 1s 209636590e-09 0s 0s 209643350e-09 0s 0s 209643630e-09 1s 1s 209646830e-09 0s 0s 209653630e-09 0s 0s 209653870e-09 1s 1s 209657070e-09 0s 0s 209663910e-09 0s 0s 209664110e-09 1s 1s 209667310e-09 0s 0s 209674190e-09 0s 0s 209674350e-09 1s 1s 209677550e-09 0s 0s 209684470e-09 0s 0s 209684590e-09 1s 1s 209687790e-09 0s 0s 209694750e-09 0s 0s 209694830e-09 1s 1s 209698030e-09 0s 0s 209705030e-09 0s 0s 209705070e-09 1s 1s 209708270e-09 0s 0s 209715310e-09 1s 1s 209715350e-09 1s 1s 209718550e-09 0s 0s 209725550e-09 1s 1s 209725630e-09 1s 1s 209728790e-09 0s 0s 209735790e-09 1s 1s 209735910e-09 1s 1s 209739030e-09 0s 0s 209746030e-09 1s 1s 209746190e-09 1s 1s 209749270e-09 0s 0s 209756270e-09 1s 1s 209756470e-09 1s 1s 209759510e-09 0s 0s 209766510e-09 1s 1s 209766750e-09 1s 1s 209769750e-09 0s 0s 209776750e-09 1s 1s 209777030e-09 1s 1s 209779990e-09 0s 0s 209786990e-09 1s 1s 209787310e-09 1s 1s 209790230e-09 0s 0s 209797230e-09 1s 1s 209797590e-09 1s 1s 209800470e-09 0s 0s 209807470e-09 1s 1s 209807870e-09 1s 1s 209810710e-09 0s 0s 209817710e-09 1s 1s 209818150e-09 1s 1s 209820950e-09 0s 0s 209827950e-09 1s 1s 209828430e-09 1s 1s 209831190e-09 0s 0s 209838190e-09 1s 1s 209838710e-09 1s 1s 209841430e-09 0s 0s 209848430e-09 1s 1s 209848990e-09 1s 1s 209851670e-09 0s 0s 209858670e-09 1s 1s 209859270e-09 1s 1s 209861910e-09 0s 0s 209868910e-09 1s 1s 209869550e-09 1s 1s 209872150e-09 0s 0s 209879150e-09 1s 1s 209879830e-09 1s 1s 209882390e-09 0s 0s 209889390e-09 1s 1s 209890110e-09 1s 1s 209892630e-09 0s 0s 209899630e-09 1s 1s 209900390e-09 1s 1s 209902870e-09 0s 0s 209909870e-09 1s 1s 209910670e-09 1s 1s 209913110e-09 0s 0s 209920110e-09 1s 1s 209920950e-09 1s 1s 209923350e-09 0s 0s 209930350e-09 1s 1s 209931230e-09 1s 1s 209933590e-09 0s 0s 209940590e-09 1s 1s 209941510e-09 1s 1s 209943830e-09 0s 0s 209950830e-09 1s 1s 209951790e-09 1s 1s 209954070e-09 0s 0s 209961070e-09 1s 1s 209962070e-09 1s 1s 209964310e-09 0s 0s 209971310e-09 1s 1s 209972350e-09 1s 1s 209974550e-09 0s 0s 209981550e-09 1s 1s 209982630e-09 1s 1s 209984790e-09 0s 0s 209991790e-09 1s 1s 209992910e-09 1s 1s 209995030e-09 0s 0s 210002030e-09 1s 1s 210003190e-09 1s 1s 210005270e-09 0s 0s 210012270e-09 1s 1s 210013470e-09 1s 1s 210015510e-09 0s 0s 210022510e-09 1s 1s 210023750e-09 1s 1s 210025750e-09 0s 0s 210032750e-09 1s 1s 210034030e-09 1s 1s 210035990e-09 0s 0s 210042990e-09 1s 1s 210044310e-09 1s 1s 210046230e-09 0s 0s 210053230e-09 1s 1s 210054590e-09 1s 1s 210056470e-09 0s 0s 210063470e-09 1s 1s 210064870e-09 1s 1s 210066710e-09 0s 0s 210073710e-09 1s 1s 210075150e-09 1s 1s 210076950e-09 0s 0s 210083950e-09 1s 1s 210085430e-09 1s 1s 210087190e-09 0s 0s 210094190e-09 1s 1s 210095710e-09 1s 1s 210097430e-09 0s 0s 210104430e-09 1s 1s 210105990e-09 1s 1s 210107670e-09 0s 0s 210114670e-09 1s 1s 210116270e-09 1s 1s 210117910e-09 0s 0s 210124910e-09 1s 1s 210126550e-09 1s 1s 210128150e-09 0s 0s 210135150e-09 1s 1s 210136830e-09 1s 1s 210138390e-09 0s 0s 210145390e-09 1s 1s 210147110e-09 1s 1s 210148630e-09 0s 0s 210155630e-09 1s 1s 210157390e-09 1s 1s 210158870e-09 0s 0s 210165870e-09 1s 1s 210167670e-09 1s 1s 210169110e-09 0s 0s 210176110e-09 1s 1s 210177950e-09 1s 1s 210179350e-09 0s 0s 210186350e-09 1s 1s 210188230e-09 1s 1s 210189590e-09 0s 0s 210196590e-09 1s 1s 210198510e-09 1s 1s 210199830e-09 0s 0s 210206830e-09 1s 1s 210208790e-09 1s 1s 210210070e-09 0s 0s 210217070e-09 1s 1s 210219070e-09 1s 1s 210220310e-09 0s 0s 210227310e-09 1s 1s 210229350e-09 1s 1s 210230550e-09 0s 0s 210237550e-09 1s 1s 210239630e-09 1s 1s 210240790e-09 0s 0s 210247790e-09 1s 1s 210249910e-09 1s 1s 210251030e-09 0s 0s 210258030e-09 1s 1s 210260190e-09 1s 1s 210261270e-09 0s 0s 210268270e-09 1s 1s 210270470e-09 1s 1s 210271510e-09 0s 0s 210278510e-09 1s 1s 210280750e-09 1s 1s 210281750e-09 0s 0s 210288750e-09 1s 1s 210291030e-09 1s 1s 210291990e-09 0s 0s 210298990e-09 1s 1s 210301310e-09 1s 1s 210302230e-09 0s 0s 210309230e-09 1s 1s 210311590e-09 1s 1s 210312470e-09 0s 0s 210319470e-09 1s 1s 210321870e-09 1s 1s 210322710e-09 0s 0s 210329710e-09 1s 1s 210332150e-09 1s 1s 210332950e-09 0s 0s 210339950e-09 1s 1s 210342430e-09 1s 1s 210343190e-09 0s 0s 210350190e-09 1s 1s 210352710e-09 1s 1s 210353430e-09 0s 0s 210360430e-09 1s 1s 210362990e-09 1s 1s 210363670e-09 0s 0s 210370670e-09 1s 1s 210373270e-09 1s 1s 210373910e-09 0s 0s 210380910e-09 1s 1s 210383550e-09 1s 1s 210384150e-09 0s 0s 210391150e-09 1s 1s 210393830e-09 1s 1s 210394390e-09 0s 0s 210401390e-09 1s 1s 210404110e-09 1s 1s 210404630e-09 0s 0s 210411630e-09 1s 1s 210414390e-09 1s 1s 210414870e-09 0s 0s 210421870e-09 1s 1s 210424670e-09 1s 1s 210425110e-09 0s 0s 210432110e-09 1s 1s 210434950e-09 1s 1s 210435350e-09 0s 0s 210442350e-09 1s 1s 210445230e-09 1s 1s 210445590e-09 0s 0s 210452590e-09 1s 1s 210455510e-09 1s 1s 210455830e-09 0s 0s 210462830e-09 1s 1s 210465790e-09 1s 1s 210466070e-09 0s 0s 210473070e-09 1s 1s 210476070e-09 1s 1s 210476310e-09 0s 0s 210483310e-09 1s 1s 210486350e-09 1s 1s 210486550e-09 0s 0s 210493550e-09 1s 1s 210496630e-09 1s 1s 210496790e-09 0s 0s 210503790e-09 1s 1s 210506910e-09 1s 1s 210507030e-09 0s 0s 210514030e-09 1s 1s 210517190e-09 1s 1s 210517270e-09 0s 0s 210524270e-09 1s 1s 210527470e-09 1s 1s 210527510e-09 0s 0s 210534510e-09 1s 1s 210537750e-09 0s 0s 210544750e-09 1s 1s 210547990e-09 0s 0s 210548030e-09 0s 0s 210554990e-09 1s 1s 210558230e-09 0s 0s 210558310e-09 0s 0s 210565230e-09 1s 1s 210568470e-09 0s 0s 210568590e-09 0s 0s 210575470e-09 1s 1s 210578710e-09 0s 0s 210578870e-09 0s 0s 210585710e-09 1s 1s 210588950e-09 0s 0s 210589150e-09 0s 0s 210595950e-09 1s 1s 210599190e-09 0s 0s 210599430e-09 0s 0s 210606190e-09 1s 1s 210609430e-09 0s 0s 210609710e-09 0s 0s 210616430e-09 1s 1s 210619670e-09 0s 0s 210619990e-09 0s 0s 210626670e-09 1s 1s 210629910e-09 0s 0s 210630270e-09 0s 0s 210636910e-09 1s 1s 210640150e-09 0s 0s 210640550e-09 0s 0s 210647150e-09 1s 1s 210650390e-09 0s 0s 210650830e-09 0s 0s 210657390e-09 1s 1s 210660630e-09 0s 0s 210661110e-09 0s 0s 210667630e-09 1s 1s 210670870e-09 0s 0s 210671390e-09 0s 0s 210677870e-09 1s 1s 210681110e-09 0s 0s 210681670e-09 0s 0s 210688110e-09 1s 1s 210691350e-09 0s 0s 210691950e-09 0s 0s 210698350e-09 1s 1s 210701590e-09 0s 0s 210702230e-09 0s 0s 210708590e-09 1s 1s 210711830e-09 0s 0s 210712510e-09 0s 0s 210718830e-09 1s 1s 210722070e-09 0s 0s 210722790e-09 0s 0s 210729070e-09 1s 1s 210732310e-09 0s 0s 210733070e-09 0s 0s 210739310e-09 1s 1s 210742550e-09 0s 0s 210743350e-09 0s 0s 210749550e-09 1s 1s 210752790e-09 0s 0s 210753630e-09 0s 0s 210759790e-09 1s 1s 210763030e-09 0s 0s 210763910e-09 0s 0s 210770030e-09 1s 1s 210773270e-09 0s 0s 210774190e-09 0s 0s 210780270e-09 1s 1s 210783510e-09 0s 0s 210784470e-09 0s 0s 210790510e-09 1s 1s 210793750e-09 0s 0s 210794750e-09 0s 0s 210800750e-09 1s 1s 210803990e-09 0s 0s 210805030e-09 0s 0s 210810990e-09 1s 1s 210814230e-09 0s 0s 210815310e-09 0s 0s 210821230e-09 1s 1s 210824470e-09 0s 0s 210825590e-09 0s 0s 210831470e-09 1s 1s 210834710e-09 0s 0s 210835870e-09 0s 0s 210841710e-09 1s 1s 210844950e-09 0s 0s 210846150e-09 0s 0s 210851950e-09 1s 1s 210855190e-09 0s 0s 210856430e-09 0s 0s 210862190e-09 1s 1s 210865430e-09 0s 0s 210866710e-09 0s 0s 210872430e-09 1s 1s 210875670e-09 0s 0s 210876990e-09 0s 0s 210882670e-09 1s 1s 210885910e-09 0s 0s 210887270e-09 0s 0s 210892910e-09 1s 1s 210896150e-09 0s 0s 210897550e-09 0s 0s 210903150e-09 1s 1s 210906390e-09 0s 0s 210907830e-09 0s 0s 210913390e-09 1s 1s 210916630e-09 0s 0s 210918110e-09 0s 0s 210923630e-09 1s 1s 210926870e-09 0s 0s 210928390e-09 0s 0s 210933870e-09 1s 1s 210937110e-09 0s 0s 210938670e-09 0s 0s 210944110e-09 1s 1s 210947350e-09 0s 0s 210948950e-09 0s 0s 210954350e-09 1s 1s 210957590e-09 0s 0s 210959230e-09 0s 0s 210964590e-09 1s 1s 210967830e-09 0s 0s 210969510e-09 0s 0s 210974830e-09 1s 1s 210978070e-09 0s 0s 210979790e-09 0s 0s 210985070e-09 1s 1s 210988310e-09 0s 0s 210990070e-09 0s 0s 210995310e-09 1s 1s 210998550e-09 0s 0s 211000350e-09 0s 0s 211005550e-09 1s 1s 211008790e-09 0s 0s 211010630e-09 0s 0s 211015790e-09 1s 1s 211019030e-09 0s 0s 211020910e-09 0s 0s 211026030e-09 1s 1s 211029270e-09 0s 0s 211031190e-09 0s 0s 211036270e-09 1s 1s 211039510e-09 0s 0s 211041470e-09 0s 0s 211046510e-09 1s 1s 211049750e-09 0s 0s 211051750e-09 0s 0s 211056750e-09 1s 1s 211059990e-09 0s 0s 211062030e-09 0s 0s 211066990e-09 1s 1s 211070230e-09 0s 0s 211072310e-09 0s 0s 211077230e-09 1s 1s 211080470e-09 0s 0s 211082590e-09 0s 0s 211087470e-09 1s 1s 211090710e-09 0s 0s 211092870e-09 0s 0s 211097710e-09 1s 1s 211100950e-09 0s 0s 211103150e-09 0s 0s 211107950e-09 1s 1s 211111190e-09 0s 0s 211113430e-09 0s 0s 211118190e-09 1s 1s 211121430e-09 0s 0s 211123710e-09 0s 0s 211128430e-09 1s 1s 211131670e-09 0s 0s 211133990e-09 0s 0s 211138670e-09 1s 1s 211141910e-09 0s 0s 211144270e-09 0s 0s 211148910e-09 1s 1s 211152150e-09 0s 0s 211154550e-09 0s 0s 211159150e-09 1s 1s 211162390e-09 0s 0s 211164830e-09 0s 0s 211169390e-09 1s 1s 211172630e-09 0s 0s 211175110e-09 0s 0s 211179630e-09 1s 1s 211182870e-09 0s 0s 211185390e-09 0s 0s 211189870e-09 1s 1s 211193110e-09 0s 0s 211195670e-09 0s 0s 211200110e-09 1s 1s 211203350e-09 0s 0s 211205950e-09 0s 0s 211210350e-09 1s 1s 211213590e-09 0s 0s 211216230e-09 0s 0s 211220590e-09 1s 1s 211223830e-09 0s 0s 211226510e-09 0s 0s 211230830e-09 1s 1s 211234070e-09 0s 0s 211236790e-09 0s 0s 211241070e-09 1s 1s 211244310e-09 0s 0s 211247070e-09 0s 0s 211251310e-09 1s 1s 211254550e-09 0s 0s 211257350e-09 0s 0s 211261550e-09 1s 1s 211264790e-09 0s 0s 211267630e-09 0s 0s 211271790e-09 1s 1s 211275030e-09 0s 0s 211277910e-09 0s 0s 211282030e-09 1s 1s 211285270e-09 0s 0s 211288190e-09 0s 0s 211292270e-09 1s 1s 211295510e-09 0s 0s 211298470e-09 0s 0s 211302510e-09 1s 1s 211305750e-09 0s 0s 211308750e-09 0s 0s 211312750e-09 1s 1s 211315990e-09 0s 0s 211319030e-09 0s 0s 211322990e-09 1s 1s 211326230e-09 0s 0s 211329310e-09 0s 0s 211333230e-09 1s 1s 211336470e-09 0s 0s 211339590e-09 0s 0s 211343470e-09 1s 1s 211346710e-09 0s 0s 211349870e-09 0s 0s 211353710e-09 1s 1s 211356950e-09 0s 0s 211360150e-09 0s 0s 211363950e-09 1s 1s 211367190e-09 0s 0s 211370430e-09 0s 0s 211374190e-09 1s 1s 211377430e-09 0s 0s 211380710e-09 0s 0s 211384430e-09 1s 1s 211387670e-09 0s 0s 211390990e-09 0s 0s 211394670e-09 1s 1s 211397910e-09 0s 0s 211401270e-09 0s 0s 211404910e-09 1s 1s 211408150e-09 0s 0s 211411550e-09 0s 0s 211415150e-09 1s 1s 211418390e-09 0s 0s 211421830e-09 0s 0s 211425390e-09 1s 1s 211428630e-09 0s 0s 211432110e-09 0s 0s 211435630e-09 1s 1s 211438870e-09 0s 0s 211442390e-09 0s 0s 211445870e-09 1s 1s 211449110e-09 0s 0s 211452670e-09 0s 0s 211456110e-09 1s 1s 211459350e-09 0s 0s 211462950e-09 0s 0s 211466350e-09 1s 1s 211469590e-09 0s 0s 211473230e-09 0s 0s 211476590e-09 1s 1s 211479830e-09 0s 0s 211483510e-09 0s 0s 211486830e-09 1s 1s 211490070e-09 0s 0s 211493790e-09 0s 0s 211497070e-09 1s 1s 211500310e-09 0s 0s 211504070e-09 0s 0s 211507310e-09 1s 1s 211510550e-09 0s 0s 211514350e-09 0s 0s 211517550e-09 1s 1s 211520790e-09 0s 0s 211524630e-09 0s 0s 211527790e-09 1s 1s 211531030e-09 0s 0s 211534910e-09 0s 0s 211538030e-09 1s 1s 211541270e-09 0s 0s 211545190e-09 0s 0s 211548270e-09 1s 1s 211551510e-09 0s 0s 211555470e-09 0s 0s 211558510e-09 1s 1s 211561750e-09 0s 0s 211565750e-09 0s 0s 211568750e-09 1s 1s 211571990e-09 0s 0s 211576030e-09 0s 0s 211578990e-09 1s 1s 211582230e-09 0s 0s 211586310e-09 0s 0s 211589230e-09 1s 1s 211592470e-09 0s 0s 211596590e-09 0s 0s 211599470e-09 1s 1s 211602710e-09 0s 0s 211606870e-09 0s 0s 211609710e-09 1s 1s 211612950e-09 0s 0s 211617150e-09 0s 0s 211619950e-09 1s 1s 211623190e-09 0s 0s 211627430e-09 0s 0s 211630190e-09 1s 1s 211633430e-09 0s 0s 211637710e-09 0s 0s 211640430e-09 1s 1s 211643670e-09 0s 0s 211647990e-09 0s 0s 211650670e-09 1s 1s 211653910e-09 0s 0s 211658270e-09 0s 0s 211660910e-09 1s 1s 211664150e-09 0s 0s 211668550e-09 0s 0s 211671150e-09 1s 1s 211674390e-09 0s 0s 211678830e-09 0s 0s 211681390e-09 1s 1s 211684630e-09 0s 0s 211689110e-09 0s 0s 211691630e-09 1s 1s 211694870e-09 0s 0s 211699390e-09 0s 0s 211701870e-09 1s 1s 211705110e-09 0s 0s 211709670e-09 0s 0s 211712110e-09 1s 1s 211715350e-09 0s 0s 211719950e-09 0s 0s 211722350e-09 1s 1s 211725590e-09 0s 0s 211730230e-09 0s 0s 211732590e-09 1s 1s 211735830e-09 0s 0s 211740510e-09 0s 0s 211742830e-09 1s 1s 211746070e-09 0s 0s 211750790e-09 0s 0s 211753070e-09 1s 1s 211756310e-09 0s 0s 211761070e-09 0s 0s 211763310e-09 1s 1s 211766550e-09 0s 0s 211771350e-09 0s 0s 211773550e-09 1s 1s 211776790e-09 0s 0s 211781630e-09 0s 0s 211783790e-09 1s 1s 211787030e-09 0s 0s 211791910e-09 0s 0s 211794030e-09 1s 1s 211797270e-09 0s 0s 211802190e-09 0s 0s 211804270e-09 1s 1s 211807510e-09 0s 0s 211812470e-09 0s 0s 211814510e-09 1s 1s 211817750e-09 0s 0s 211822750e-09 0s 0s 211824750e-09 1s 1s 211827990e-09 0s 0s 211833030e-09 0s 0s 211834990e-09 1s 1s 211838230e-09 0s 0s 211843310e-09 0s 0s 211845230e-09 1s 1s 211848470e-09 0s 0s 211853590e-09 0s 0s 211855470e-09 1s 1s 211858710e-09 0s 0s 211863870e-09 0s 0s 211865710e-09 1s 1s 211868950e-09 0s 0s 211874150e-09 0s 0s 211875950e-09 1s 1s 211879190e-09 0s 0s 211884430e-09 0s 0s 211886190e-09 1s 1s 211889430e-09 0s 0s 211894710e-09 0s 0s 211896430e-09 1s 1s 211899670e-09 0s 0s 211904990e-09 0s 0s 211906670e-09 1s 1s 211909910e-09 0s 0s 211915270e-09 0s 0s 211916910e-09 1s 1s 211920150e-09 0s 0s 211925550e-09 0s 0s 211927150e-09 1s 1s 211930390e-09 0s 0s 211935830e-09 0s 0s 211937390e-09 1s 1s 211940630e-09 0s 0s 211946110e-09 0s 0s 211947630e-09 1s 1s 211950870e-09 0s 0s 211956390e-09 0s 0s 211957870e-09 1s 1s 211961110e-09 0s 0s 211966670e-09 0s 0s 211968110e-09 1s 1s 211971350e-09 0s 0s 211976950e-09 0s 0s 211978350e-09 1s 1s 211981590e-09 0s 0s 211987230e-09 0s 0s 211988590e-09 1s 1s 211991830e-09 0s 0s 211997510e-09 0s 0s 211998830e-09 1s 1s 212002070e-09 0s 0s 212007790e-09 0s 0s 212009070e-09 1s 1s 212012310e-09 0s 0s 212018070e-09 0s 0s 212019310e-09 1s 1s 212022550e-09 0s 0s 212028350e-09 0s 0s 212029550e-09 1s 1s 212032790e-09 0s 0s 212038630e-09 0s 0s 212039790e-09 1s 1s 212043030e-09 0s 0s 212048910e-09 0s 0s 212050030e-09 1s 1s 212053270e-09 0s 0s 212059190e-09 0s 0s 212060270e-09 1s 1s 212063510e-09 0s 0s 212069470e-09 0s 0s 212070510e-09 1s 1s 212073750e-09 0s 0s 212079750e-09 0s 0s 212080750e-09 1s 1s 212083990e-09 0s 0s 212090030e-09 0s 0s 212090990e-09 1s 1s 212094230e-09 0s 0s 212100310e-09 0s 0s 212101230e-09 1s 1s 212104470e-09 0s 0s 212110590e-09 0s 0s 212111470e-09 1s 1s 212114710e-09 0s 0s 212120870e-09 0s 0s 212121710e-09 1s 1s 212124950e-09 0s 0s 212131150e-09 0s 0s 212131950e-09 1s 1s 212135190e-09 0s 0s 212141430e-09 0s 0s 212142190e-09 1s 1s 212145430e-09 0s 0s 212151710e-09 0s 0s 212152430e-09 1s 1s 212155670e-09 0s 0s 212161990e-09 0s 0s 212162670e-09 1s 1s 212165910e-09 0s 0s 212172270e-09 0s 0s 212172910e-09 1s 1s 212176150e-09 0s 0s 212182550e-09 0s 0s 212183150e-09 1s 1s 212186390e-09 0s 0s 212192830e-09 0s 0s 212193390e-09 1s 1s 212196630e-09 0s 0s 212203110e-09 0s 0s 212203630e-09 1s 1s 212206870e-09 0s 0s 212213390e-09 0s 0s 212213870e-09 1s 1s 212217110e-09 0s 0s 212223670e-09 0s 0s 212224110e-09 1s 1s 212227350e-09 0s 0s 212233950e-09 0s 0s 212234350e-09 1s 1s 212237590e-09 0s 0s 212244230e-09 0s 0s 212244590e-09 1s 1s 212247830e-09 0s 0s 212254510e-09 0s 0s 212254830e-09 1s 1s 212258070e-09 0s 0s 212264790e-09 0s 0s 212265070e-09 1s 1s 212268310e-09 0s 0s 212275070e-09 0s 0s 212275310e-09 1s 1s 212278550e-09 0s 0s 212285350e-09 0s 0s 212285550e-09 1s 1s 212288790e-09 0s 0s 212295630e-09 0s 0s 212295790e-09 1s 1s 212299030e-09 0s 0s 212305910e-09 0s 0s 212306030e-09 1s 1s 212309270e-09 0s 0s 212316190e-09 0s 0s 212316270e-09 1s 1s 212319510e-09 0s 0s 212326470e-09 0s 0s 212326510e-09 1s 1s 212329750e-09 0s 0s 212336750e-09 1s 1s 212336790e-09 1s 1s 212340030e-09 0s 0s 212346990e-09 1s 1s 212347070e-09 1s 1s 212350270e-09 0s 0s 212357230e-09 1s 1s 212357350e-09 1s 1s 212360510e-09 0s 0s 212367470e-09 1s 1s 212367630e-09 1s 1s 212370750e-09 0s 0s 212377710e-09 1s 1s 212377910e-09 1s 1s 212380990e-09 0s 0s 212387950e-09 1s 1s 212388190e-09 1s 1s 212391230e-09 0s 0s 212398190e-09 1s 1s 212398470e-09 1s 1s 212401470e-09 0s 0s 212408430e-09 1s 1s 212408750e-09 1s 1s 212411710e-09 0s 0s 212418670e-09 1s 1s 212419030e-09 1s 1s 212421950e-09 0s 0s 212428910e-09 1s 1s 212429310e-09 1s 1s 212432190e-09 0s 0s 212439150e-09 1s 1s 212439590e-09 1s 1s 212442430e-09 0s 0s 212449390e-09 1s 1s 212449870e-09 1s 1s 212452670e-09 0s 0s 212459630e-09 1s 1s 212460150e-09 1s 1s 212462910e-09 0s 0s 212469870e-09 1s 1s 212470430e-09 1s 1s 212473150e-09 0s 0s 212480110e-09 1s 1s 212480710e-09 1s 1s 212483390e-09 0s 0s 212490350e-09 1s 1s 212490990e-09 1s 1s 212493630e-09 0s 0s 212500590e-09 1s 1s 212501270e-09 1s 1s 212503870e-09 0s 0s 212510830e-09 1s 1s 212511550e-09 1s 1s 212514110e-09 0s 0s 212521070e-09 1s 1s 212521830e-09 1s 1s 212524350e-09 0s 0s 212531310e-09 1s 1s 212532110e-09 1s 1s 212534590e-09 0s 0s 212541550e-09 1s 1s 212542390e-09 1s 1s 212544830e-09 0s 0s 212551790e-09 1s 1s 212552670e-09 1s 1s 212555070e-09 0s 0s 212562030e-09 1s 1s 212562950e-09 1s 1s 212565310e-09 0s 0s 212572270e-09 1s 1s 212573230e-09 1s 1s 212575550e-09 0s 0s 212582510e-09 1s 1s 212583510e-09 1s 1s 212585790e-09 0s 0s 212592750e-09 1s 1s 212593790e-09 1s 1s 212596030e-09 0s 0s 212602990e-09 1s 1s 212604070e-09 1s 1s 212606270e-09 0s 0s 212613230e-09 1s 1s 212614350e-09 1s 1s 212616510e-09 0s 0s 212623470e-09 1s 1s 212624630e-09 1s 1s 212626750e-09 0s 0s 212633710e-09 1s 1s 212634910e-09 1s 1s 212636990e-09 0s 0s 212643950e-09 1s 1s 212645190e-09 1s 1s 212647230e-09 0s 0s 212654190e-09 1s 1s 212655470e-09 1s 1s 212657470e-09 0s 0s 212664430e-09 1s 1s 212665750e-09 1s 1s 212667710e-09 0s 0s 212674670e-09 1s 1s 212676030e-09 1s 1s 212677950e-09 0s 0s 212684910e-09 1s 1s 212686310e-09 1s 1s 212688190e-09 0s 0s 212695150e-09 1s 1s 212696590e-09 1s 1s 212698430e-09 0s 0s 212705390e-09 1s 1s 212706870e-09 1s 1s 212708670e-09 0s 0s 212715630e-09 1s 1s 212717150e-09 1s 1s 212718910e-09 0s 0s 212725870e-09 1s 1s 212727430e-09 1s 1s 212729150e-09 0s 0s 212736110e-09 1s 1s 212737710e-09 1s 1s 212739390e-09 0s 0s 212746350e-09 1s 1s 212747990e-09 1s 1s 212749630e-09 0s 0s 212756590e-09 1s 1s 212758270e-09 1s 1s 212759870e-09 0s 0s 212766830e-09 1s 1s 212768550e-09 1s 1s 212770110e-09 0s 0s 212777070e-09 1s 1s 212778830e-09 1s 1s 212780350e-09 0s 0s 212787310e-09 1s 1s 212789110e-09 1s 1s 212790590e-09 0s 0s 212797550e-09 1s 1s 212799390e-09 1s 1s 212800830e-09 0s 0s 212807790e-09 1s 1s 212809670e-09 1s 1s 212811070e-09 0s 0s 212818030e-09 1s 1s 212819950e-09 1s 1s 212821310e-09 0s 0s 212828270e-09 1s 1s 212830230e-09 1s 1s 212831550e-09 0s 0s 212838510e-09 1s 1s 212840510e-09 1s 1s 212841790e-09 0s 0s 212848750e-09 1s 1s 212850790e-09 1s 1s 212852030e-09 0s 0s 212858990e-09 1s 1s 212861070e-09 1s 1s 212862270e-09 0s 0s 212869230e-09 1s 1s 212871350e-09 1s 1s 212872510e-09 0s 0s 212879470e-09 1s 1s 212881630e-09 1s 1s 212882750e-09 0s 0s 212889710e-09 1s 1s 212891910e-09 1s 1s 212892990e-09 0s 0s 212899950e-09 1s 1s 212902190e-09 1s 1s 212903230e-09 0s 0s 212910190e-09 1s 1s 212912470e-09 1s 1s 212913470e-09 0s 0s 212920430e-09 1s 1s 212922750e-09 1s 1s 212923710e-09 0s 0s 212930670e-09 1s 1s 212933030e-09 1s 1s 212933950e-09 0s 0s 212940910e-09 1s 1s 212943310e-09 1s 1s 212944190e-09 0s 0s 212951150e-09 1s 1s 212953590e-09 1s 1s 212954430e-09 0s 0s 212961390e-09 1s 1s 212963870e-09 1s 1s 212964670e-09 0s 0s 212971630e-09 1s 1s 212974150e-09 1s 1s 212974910e-09 0s 0s 212981870e-09 1s 1s 212984430e-09 1s 1s 212985150e-09 0s 0s 212992110e-09 1s 1s 212994710e-09 1s 1s 212995390e-09 0s 0s 213002350e-09 1s 1s 213004990e-09 1s 1s 213005630e-09 0s 0s 213012590e-09 1s 1s 213015270e-09 1s 1s 213015870e-09 0s 0s 213022830e-09 1s 1s 213025550e-09 1s 1s 213026110e-09 0s 0s 213033070e-09 1s 1s 213035830e-09 1s 1s 213036350e-09 0s 0s 213043310e-09 1s 1s 213046110e-09 1s 1s 213046590e-09 0s 0s 213053550e-09 1s 1s 213056390e-09 1s 1s 213056830e-09 0s 0s 213063790e-09 1s 1s 213066670e-09 1s 1s 213067070e-09 0s 0s 213074030e-09 1s 1s 213076950e-09 1s 1s 213077310e-09 0s 0s 213084270e-09 1s 1s 213087230e-09 1s 1s 213087550e-09 0s 0s 213094510e-09 1s 1s 213097510e-09 1s 1s 213097790e-09 0s 0s 213104750e-09 1s 1s 213107790e-09 1s 1s 213108030e-09 0s 0s 213114990e-09 1s 1s 213118070e-09 1s 1s 213118270e-09 0s 0s 213125230e-09 1s 1s 213128350e-09 1s 1s 213128510e-09 0s 0s 213135470e-09 1s 1s 213138630e-09 1s 1s 213138750e-09 0s 0s 213145710e-09 1s 1s 213148910e-09 1s 1s 213148990e-09 0s 0s 213155950e-09 1s 1s 213159190e-09 1s 1s 213159230e-09 0s 0s 213166190e-09 1s 1s 213169470e-09 0s 0s 213176430e-09 1s 1s 213179710e-09 0s 0s 213179750e-09 0s 0s 213186670e-09 1s 1s 213189950e-09 0s 0s 213190030e-09 0s 0s 213196910e-09 1s 1s 213200190e-09 0s 0s 213200310e-09 0s 0s 213207150e-09 1s 1s 213210430e-09 0s 0s 213210590e-09 0s 0s 213217390e-09 1s 1s 213220670e-09 0s 0s 213220870e-09 0s 0s 213227630e-09 1s 1s 213230910e-09 0s 0s 213231150e-09 0s 0s 213237870e-09 1s 1s 213241150e-09 0s 0s 213241430e-09 0s 0s 213248110e-09 1s 1s 213251390e-09 0s 0s 213251710e-09 0s 0s 213258350e-09 1s 1s 213261630e-09 0s 0s 213261990e-09 0s 0s 213268590e-09 1s 1s 213271870e-09 0s 0s 213272270e-09 0s 0s 213278830e-09 1s 1s 213282110e-09 0s 0s 213282550e-09 0s 0s 213289070e-09 1s 1s 213292350e-09 0s 0s 213292830e-09 0s 0s 213299310e-09 1s 1s 213302590e-09 0s 0s 213303110e-09 0s 0s 213309550e-09 1s 1s 213312830e-09 0s 0s 213313390e-09 0s 0s 213319790e-09 1s 1s 213323070e-09 0s 0s 213323670e-09 0s 0s 213330030e-09 1s 1s 213333310e-09 0s 0s 213333950e-09 0s 0s 213340270e-09 1s 1s 213343550e-09 0s 0s 213344230e-09 0s 0s 213350510e-09 1s 1s 213353790e-09 0s 0s 213354510e-09 0s 0s 213360750e-09 1s 1s 213364030e-09 0s 0s 213364790e-09 0s 0s 213370990e-09 1s 1s 213374270e-09 0s 0s 213375070e-09 0s 0s 213381230e-09 1s 1s 213384510e-09 0s 0s 213385350e-09 0s 0s 213391470e-09 1s 1s 213394750e-09 0s 0s 213395630e-09 0s 0s 213401710e-09 1s 1s 213404990e-09 0s 0s 213405910e-09 0s 0s 213411950e-09 1s 1s 213415230e-09 0s 0s 213416190e-09 0s 0s 213422190e-09 1s 1s 213425470e-09 0s 0s 213426470e-09 0s 0s 213432430e-09 1s 1s 213435710e-09 0s 0s 213436750e-09 0s 0s 213442670e-09 1s 1s 213445950e-09 0s 0s 213447030e-09 0s 0s 213452910e-09 1s 1s 213456190e-09 0s 0s 213457310e-09 0s 0s 213463150e-09 1s 1s 213466430e-09 0s 0s 213467590e-09 0s 0s 213473390e-09 1s 1s 213476670e-09 0s 0s 213477870e-09 0s 0s 213483630e-09 1s 1s 213486910e-09 0s 0s 213488150e-09 0s 0s 213493870e-09 1s 1s 213497150e-09 0s 0s 213498430e-09 0s 0s 213504110e-09 1s 1s 213507390e-09 0s 0s 213508710e-09 0s 0s 213514350e-09 1s 1s 213517630e-09 0s 0s 213518990e-09 0s 0s 213524590e-09 1s 1s 213527870e-09 0s 0s 213529270e-09 0s 0s 213534830e-09 1s 1s 213538110e-09 0s 0s 213539550e-09 0s 0s 213545070e-09 1s 1s 213548350e-09 0s 0s 213549830e-09 0s 0s 213555310e-09 1s 1s 213558590e-09 0s 0s 213560110e-09 0s 0s 213565550e-09 1s 1s 213568830e-09 0s 0s 213570390e-09 0s 0s 213575790e-09 1s 1s 213579070e-09 0s 0s 213580670e-09 0s 0s 213586030e-09 1s 1s 213589310e-09 0s 0s 213590950e-09 0s 0s 213596270e-09 1s 1s 213599550e-09 0s 0s 213601230e-09 0s 0s 213606510e-09 1s 1s 213609790e-09 0s 0s 213611510e-09 0s 0s 213616750e-09 1s 1s 213620030e-09 0s 0s 213621790e-09 0s 0s 213626990e-09 1s 1s 213630270e-09 0s 0s 213632070e-09 0s 0s 213637230e-09 1s 1s 213640510e-09 0s 0s 213642350e-09 0s 0s 213647470e-09 1s 1s 213650750e-09 0s 0s 213652630e-09 0s 0s 213657710e-09 1s 1s 213660990e-09 0s 0s 213662910e-09 0s 0s 213667950e-09 1s 1s 213671230e-09 0s 0s 213673190e-09 0s 0s 213678190e-09 1s 1s 213681470e-09 0s 0s 213683470e-09 0s 0s 213688430e-09 1s 1s 213691710e-09 0s 0s 213693750e-09 0s 0s 213698670e-09 1s 1s 213701950e-09 0s 0s 213704030e-09 0s 0s 213708910e-09 1s 1s 213712190e-09 0s 0s 213714310e-09 0s 0s 213719150e-09 1s 1s 213722430e-09 0s 0s 213724590e-09 0s 0s 213729390e-09 1s 1s 213732670e-09 0s 0s 213734870e-09 0s 0s 213739630e-09 1s 1s 213742910e-09 0s 0s 213745150e-09 0s 0s 213749870e-09 1s 1s 213753150e-09 0s 0s 213755430e-09 0s 0s 213760110e-09 1s 1s 213763390e-09 0s 0s 213765710e-09 0s 0s 213770350e-09 1s 1s 213773630e-09 0s 0s 213775990e-09 0s 0s 213780590e-09 1s 1s 213783870e-09 0s 0s 213786270e-09 0s 0s 213790830e-09 1s 1s 213794110e-09 0s 0s 213796550e-09 0s 0s 213801070e-09 1s 1s 213804350e-09 0s 0s 213806830e-09 0s 0s 213811310e-09 1s 1s 213814590e-09 0s 0s 213817110e-09 0s 0s 213821550e-09 1s 1s 213824830e-09 0s 0s 213827390e-09 0s 0s 213831790e-09 1s 1s 213835070e-09 0s 0s 213837670e-09 0s 0s 213842030e-09 1s 1s 213845310e-09 0s 0s 213847950e-09 0s 0s 213852270e-09 1s 1s 213855550e-09 0s 0s 213858230e-09 0s 0s 213862510e-09 1s 1s 213865790e-09 0s 0s 213868510e-09 0s 0s 213872750e-09 1s 1s 213876030e-09 0s 0s 213878790e-09 0s 0s 213882990e-09 1s 1s 213886270e-09 0s 0s 213889070e-09 0s 0s 213893230e-09 1s 1s 213896510e-09 0s 0s 213899350e-09 0s 0s 213903470e-09 1s 1s 213906750e-09 0s 0s 213909630e-09 0s 0s 213913710e-09 1s 1s 213916990e-09 0s 0s 213919910e-09 0s 0s 213923950e-09 1s 1s 213927230e-09 0s 0s 213930190e-09 0s 0s 213934190e-09 1s 1s 213937470e-09 0s 0s 213940470e-09 0s 0s 213944430e-09 1s 1s 213947710e-09 0s 0s 213950750e-09 0s 0s 213954670e-09 1s 1s 213957950e-09 0s 0s 213961030e-09 0s 0s 213964910e-09 1s 1s 213968190e-09 0s 0s 213971310e-09 0s 0s 213975150e-09 1s 1s 213978430e-09 0s 0s 213981590e-09 0s 0s 213985390e-09 1s 1s 213988670e-09 0s 0s 213991870e-09 0s 0s 213995630e-09 1s 1s 213998910e-09 0s 0s 214002150e-09 0s 0s 214005870e-09 1s 1s 214009150e-09 0s 0s 214012430e-09 0s 0s 214016110e-09 1s 1s 214019390e-09 0s 0s 214022710e-09 0s 0s 214026350e-09 1s 1s 214029630e-09 0s 0s 214032990e-09 0s 0s 214036590e-09 1s 1s 214039870e-09 0s 0s 214043270e-09 0s 0s 214046830e-09 1s 1s 214050110e-09 0s 0s 214053550e-09 0s 0s 214057070e-09 1s 1s 214060350e-09 0s 0s 214063830e-09 0s 0s 214067310e-09 1s 1s 214070590e-09 0s 0s 214074110e-09 0s 0s 214077550e-09 1s 1s 214080830e-09 0s 0s 214084390e-09 0s 0s 214087790e-09 1s 1s 214091070e-09 0s 0s 214094670e-09 0s 0s 214098030e-09 1s 1s 214101310e-09 0s 0s 214104950e-09 0s 0s 214108270e-09 1s 1s 214111550e-09 0s 0s 214115230e-09 0s 0s 214118510e-09 1s 1s 214121790e-09 0s 0s 214125510e-09 0s 0s 214128750e-09 1s 1s 214132030e-09 0s 0s 214135790e-09 0s 0s 214138990e-09 1s 1s 214142270e-09 0s 0s 214146070e-09 0s 0s 214149230e-09 1s 1s 214152510e-09 0s 0s 214156350e-09 0s 0s 214159470e-09 1s 1s 214162750e-09 0s 0s 214166630e-09 0s 0s 214169710e-09 1s 1s 214172990e-09 0s 0s 214176910e-09 0s 0s 214179950e-09 1s 1s 214183230e-09 0s 0s 214187190e-09 0s 0s 214190190e-09 1s 1s 214193470e-09 0s 0s 214197470e-09 0s 0s 214200430e-09 1s 1s 214203710e-09 0s 0s 214207750e-09 0s 0s 214210670e-09 1s 1s 214213950e-09 0s 0s 214218030e-09 0s 0s 214220910e-09 1s 1s 214224190e-09 0s 0s 214228310e-09 0s 0s 214231150e-09 1s 1s 214234430e-09 0s 0s 214238590e-09 0s 0s 214241390e-09 1s 1s 214244670e-09 0s 0s 214248870e-09 0s 0s 214251630e-09 1s 1s 214254910e-09 0s 0s 214259150e-09 0s 0s 214261870e-09 1s 1s 214265150e-09 0s 0s 214269430e-09 0s 0s 214272110e-09 1s 1s 214275390e-09 0s 0s 214279710e-09 0s 0s 214282350e-09 1s 1s 214285630e-09 0s 0s 214289990e-09 0s 0s 214292590e-09 1s 1s 214295870e-09 0s 0s 214300270e-09 0s 0s 214302830e-09 1s 1s 214306110e-09 0s 0s 214310550e-09 0s 0s 214313070e-09 1s 1s 214316350e-09 0s 0s 214320830e-09 0s 0s 214323310e-09 1s 1s 214326590e-09 0s 0s 214331110e-09 0s 0s 214333550e-09 1s 1s 214336830e-09 0s 0s 214341390e-09 0s 0s 214343790e-09 1s 1s 214347070e-09 0s 0s 214351670e-09 0s 0s 214354030e-09 1s 1s 214357310e-09 0s 0s 214361950e-09 0s 0s 214364270e-09 1s 1s 214367550e-09 0s 0s 214372230e-09 0s 0s 214374510e-09 1s 1s 214377790e-09 0s 0s 214382510e-09 0s 0s 214384750e-09 1s 1s 214388030e-09 0s 0s 214392790e-09 0s 0s 214394990e-09 1s 1s 214398270e-09 0s 0s 214403070e-09 0s 0s 214405230e-09 1s 1s 214408510e-09 0s 0s 214413350e-09 0s 0s 214415470e-09 1s 1s 214418750e-09 0s 0s 214423630e-09 0s 0s 214425710e-09 1s 1s 214428990e-09 0s 0s 214433910e-09 0s 0s 214435950e-09 1s 1s 214439230e-09 0s 0s 214444190e-09 0s 0s 214446190e-09 1s 1s 214449470e-09 0s 0s 214454470e-09 0s 0s 214456430e-09 1s 1s 214459710e-09 0s 0s 214464750e-09 0s 0s 214466670e-09 1s 1s 214469950e-09 0s 0s 214475030e-09 0s 0s 214476910e-09 1s 1s 214480190e-09 0s 0s 214485310e-09 0s 0s 214487150e-09 1s 1s 214490430e-09 0s 0s 214495590e-09 0s 0s 214497390e-09 1s 1s 214500670e-09 0s 0s 214505870e-09 0s 0s 214507630e-09 1s 1s 214510910e-09 0s 0s 214516150e-09 0s 0s 214517870e-09 1s 1s 214521150e-09 0s 0s 214526430e-09 0s 0s 214528110e-09 1s 1s 214531390e-09 0s 0s 214536710e-09 0s 0s 214538350e-09 1s 1s 214541630e-09 0s 0s 214546990e-09 0s 0s 214548590e-09 1s 1s 214551870e-09 0s 0s 214557270e-09 0s 0s 214558830e-09 1s 1s 214562110e-09 0s 0s 214567550e-09 0s 0s 214569070e-09 1s 1s 214572350e-09 0s 0s 214577830e-09 0s 0s 214579310e-09 1s 1s 214582590e-09 0s 0s 214588110e-09 0s 0s 214589550e-09 1s 1s 214592830e-09 0s 0s 214598390e-09 0s 0s 214599790e-09 1s 1s 214603070e-09 0s 0s 214608670e-09 0s 0s 214610030e-09 1s 1s 214613310e-09 0s 0s 214618950e-09 0s 0s 214620270e-09 1s 1s 214623550e-09 0s 0s 214629230e-09 0s 0s 214630510e-09 1s 1s 214633790e-09 0s 0s 214639510e-09 0s 0s 214640750e-09 1s 1s 214644030e-09 0s 0s 214649790e-09 0s 0s 214650990e-09 1s 1s 214654270e-09 0s 0s 214660070e-09 0s 0s 214661230e-09 1s 1s 214664510e-09 0s 0s 214670350e-09 0s 0s 214671470e-09 1s 1s 214674750e-09 0s 0s 214680630e-09 0s 0s 214681710e-09 1s 1s 214684990e-09 0s 0s 214690910e-09 0s 0s 214691950e-09 1s 1s 214695230e-09 0s 0s 214701190e-09 0s 0s 214702190e-09 1s 1s 214705470e-09 0s 0s 214711470e-09 0s 0s 214712430e-09 1s 1s 214715710e-09 0s 0s 214721750e-09 0s 0s 214722670e-09 1s 1s 214725950e-09 0s 0s 214732030e-09 0s 0s 214732910e-09 1s 1s 214736190e-09 0s 0s 214742310e-09 0s 0s 214743150e-09 1s 1s 214746430e-09 0s 0s 214752590e-09 0s 0s 214753390e-09 1s 1s 214756670e-09 0s 0s 214762870e-09 0s 0s 214763630e-09 1s 1s 214766910e-09 0s 0s 214773150e-09 0s 0s 214773870e-09 1s 1s 214777150e-09 0s 0s 214783430e-09 0s 0s 214784110e-09 1s 1s 214787390e-09 0s 0s 214793710e-09 0s 0s 214794350e-09 1s 1s 214797630e-09 0s 0s 214803990e-09 0s 0s 214804590e-09 1s 1s 214807870e-09 0s 0s 214814270e-09 0s 0s 214814830e-09 1s 1s 214818110e-09 0s 0s 214824550e-09 0s 0s 214825070e-09 1s 1s 214828350e-09 0s 0s 214834830e-09 0s 0s 214835310e-09 1s 1s 214838590e-09 0s 0s 214845110e-09 0s 0s 214845550e-09 1s 1s 214848830e-09 0s 0s 214855390e-09 0s 0s 214855790e-09 1s 1s 214859070e-09 0s 0s 214865670e-09 0s 0s 214866030e-09 1s 1s 214869310e-09 0s 0s 214875950e-09 0s 0s 214876270e-09 1s 1s 214879550e-09 0s 0s 214886230e-09 0s 0s 214886510e-09 1s 1s 214889790e-09 0s 0s 214896510e-09 0s 0s 214896750e-09 1s 1s 214900030e-09 0s 0s 214906790e-09 0s 0s 214906990e-09 1s 1s 214910270e-09 0s 0s 214917070e-09 0s 0s 214917230e-09 1s 1s 214920510e-09 0s 0s 214927350e-09 0s 0s 214927470e-09 1s 1s 214930750e-09 0s 0s 214937630e-09 0s 0s 214937710e-09 1s 1s 214940990e-09 0s 0s 214947910e-09 0s 0s 214947950e-09 1s 1s 214951230e-09 0s 0s 214958190e-09 1s 1s 214958230e-09 1s 1s 214961510e-09 0s 0s 214968430e-09 1s 1s 214968510e-09 1s 1s 214971750e-09 0s 0s 214978670e-09 1s 1s 214978790e-09 1s 1s 214981990e-09 0s 0s 214988910e-09 1s 1s 214989070e-09 1s 1s 214992230e-09 0s 0s 214999150e-09 1s 1s 214999350e-09 1s 1s 215002470e-09 0s 0s 215009390e-09 1s 1s 215009630e-09 1s 1s 215012710e-09 0s 0s 215019630e-09 1s 1s 215019910e-09 1s 1s 215022950e-09 0s 0s 215029870e-09 1s 1s 215030190e-09 1s 1s 215033190e-09 0s 0s 215040110e-09 1s 1s 215040470e-09 1s 1s 215043430e-09 0s 0s 215050350e-09 1s 1s 215050750e-09 1s 1s 215053670e-09 0s 0s 215060590e-09 1s 1s 215061030e-09 1s 1s 215063910e-09 0s 0s 215070830e-09 1s 1s 215071310e-09 1s 1s 215074150e-09 0s 0s 215081070e-09 1s 1s 215081590e-09 1s 1s 215084390e-09 0s 0s 215091310e-09 1s 1s 215091870e-09 1s 1s 215094630e-09 0s 0s 215101550e-09 1s 1s 215102150e-09 1s 1s 215104870e-09 0s 0s 215111790e-09 1s 1s 215112430e-09 1s 1s 215115110e-09 0s 0s 215122030e-09 1s 1s 215122710e-09 1s 1s 215125350e-09 0s 0s 215132270e-09 1s 1s 215132990e-09 1s 1s 215135590e-09 0s 0s 215142510e-09 1s 1s 215143270e-09 1s 1s 215145830e-09 0s 0s 215152750e-09 1s 1s 215153550e-09 1s 1s 215156070e-09 0s 0s 215162990e-09 1s 1s 215163830e-09 1s 1s 215166310e-09 0s 0s 215173230e-09 1s 1s 215174110e-09 1s 1s 215176550e-09 0s 0s 215183470e-09 1s 1s 215184390e-09 1s 1s 215186790e-09 0s 0s 215193710e-09 1s 1s 215194670e-09 1s 1s 215197030e-09 0s 0s 215203950e-09 1s 1s 215204950e-09 1s 1s 215207270e-09 0s 0s 215214190e-09 1s 1s 215215230e-09 1s 1s 215217510e-09 0s 0s 215224430e-09 1s 1s 215225510e-09 1s 1s 215227750e-09 0s 0s 215234670e-09 1s 1s 215235790e-09 1s 1s 215237990e-09 0s 0s 215244910e-09 1s 1s 215246070e-09 1s 1s 215248230e-09 0s 0s 215255150e-09 1s 1s 215256350e-09 1s 1s 215258470e-09 0s 0s 215265390e-09 1s 1s 215266630e-09 1s 1s 215268710e-09 0s 0s 215275630e-09 1s 1s 215276910e-09 1s 1s 215278950e-09 0s 0s 215285870e-09 1s 1s 215287190e-09 1s 1s 215289190e-09 0s 0s 215296110e-09 1s 1s 215297470e-09 1s 1s 215299430e-09 0s 0s 215306350e-09 1s 1s 215307750e-09 1s 1s 215309670e-09 0s 0s 215316590e-09 1s 1s 215318030e-09 1s 1s 215319910e-09 0s 0s 215326830e-09 1s 1s 215328310e-09 1s 1s 215330150e-09 0s 0s 215337070e-09 1s 1s 215338590e-09 1s 1s 215340390e-09 0s 0s 215347310e-09 1s 1s 215348870e-09 1s 1s 215350630e-09 0s 0s 215357550e-09 1s 1s 215359150e-09 1s 1s 215360870e-09 0s 0s 215367790e-09 1s 1s 215369430e-09 1s 1s 215371110e-09 0s 0s 215378030e-09 1s 1s 215379710e-09 1s 1s 215381350e-09 0s 0s 215388270e-09 1s 1s 215389990e-09 1s 1s 215391590e-09 0s 0s 215398510e-09 1s 1s 215400270e-09 1s 1s 215401830e-09 0s 0s 215408750e-09 1s 1s 215410550e-09 1s 1s 215412070e-09 0s 0s 215418990e-09 1s 1s 215420830e-09 1s 1s 215422310e-09 0s 0s 215429230e-09 1s 1s 215431110e-09 1s 1s 215432550e-09 0s 0s 215439470e-09 1s 1s 215441390e-09 1s 1s 215442790e-09 0s 0s 215449710e-09 1s 1s 215451670e-09 1s 1s 215453030e-09 0s 0s 215459950e-09 1s 1s 215461950e-09 1s 1s 215463270e-09 0s 0s 215470190e-09 1s 1s 215472230e-09 1s 1s 215473510e-09 0s 0s 215480430e-09 1s 1s 215482510e-09 1s 1s 215483750e-09 0s 0s 215490670e-09 1s 1s 215492790e-09 1s 1s 215493990e-09 0s 0s 215500910e-09 1s 1s 215503070e-09 1s 1s 215504230e-09 0s 0s 215511150e-09 1s 1s 215513350e-09 1s 1s 215514470e-09 0s 0s 215521390e-09 1s 1s 215523630e-09 1s 1s 215524710e-09 0s 0s 215531630e-09 1s 1s 215533910e-09 1s 1s 215534950e-09 0s 0s 215541870e-09 1s 1s 215544190e-09 1s 1s 215545190e-09 0s 0s 215552110e-09 1s 1s 215554470e-09 1s 1s 215555430e-09 0s 0s 215562350e-09 1s 1s 215564750e-09 1s 1s 215565670e-09 0s 0s 215572590e-09 1s 1s 215575030e-09 1s 1s 215575910e-09 0s 0s 215582830e-09 1s 1s 215585310e-09 1s 1s 215586150e-09 0s 0s 215593070e-09 1s 1s 215595590e-09 1s 1s 215596390e-09 0s 0s 215603310e-09 1s 1s 215605870e-09 1s 1s 215606630e-09 0s 0s 215613550e-09 1s 1s 215616150e-09 1s 1s 215616870e-09 0s 0s 215623790e-09 1s 1s 215626430e-09 1s 1s 215627110e-09 0s 0s 215634030e-09 1s 1s 215636710e-09 1s 1s 215637350e-09 0s 0s 215644270e-09 1s 1s 215646990e-09 1s 1s 215647590e-09 0s 0s 215654510e-09 1s 1s 215657270e-09 1s 1s 215657830e-09 0s 0s 215664750e-09 1s 1s 215667550e-09 1s 1s 215668070e-09 0s 0s 215674990e-09 1s 1s 215677830e-09 1s 1s 215678310e-09 0s 0s 215685230e-09 1s 1s 215688110e-09 1s 1s 215688550e-09 0s 0s 215695470e-09 1s 1s 215698390e-09 1s 1s 215698790e-09 0s 0s 215705710e-09 1s 1s 215708670e-09 1s 1s 215709030e-09 0s 0s 215715950e-09 1s 1s 215718950e-09 1s 1s 215719270e-09 0s 0s 215726190e-09 1s 1s 215729230e-09 1s 1s 215729510e-09 0s 0s 215736430e-09 1s 1s 215739510e-09 1s 1s 215739750e-09 0s 0s 215746670e-09 1s 1s 215749790e-09 1s 1s 215749990e-09 0s 0s 215756910e-09 1s 1s 215760070e-09 1s 1s 215760230e-09 0s 0s 215767150e-09 1s 1s 215770350e-09 1s 1s 215770470e-09 0s 0s 215777390e-09 1s 1s 215780630e-09 1s 1s 215780710e-09 0s 0s 215787630e-09 1s 1s 215790910e-09 1s 1s 215790950e-09 0s 0s 215797870e-09 1s 1s 215801190e-09 0s 0s 215808110e-09 1s 1s 215811430e-09 0s 0s 215811470e-09 0s 0s 215818350e-09 1s 1s 215821670e-09 0s 0s 215821750e-09 0s 0s 215828590e-09 1s 1s 215831910e-09 0s 0s 215832030e-09 0s 0s 215838830e-09 1s 1s 215842150e-09 0s 0s 215842310e-09 0s 0s 215849070e-09 1s 1s 215852390e-09 0s 0s 215852590e-09 0s 0s 215859310e-09 1s 1s 215862630e-09 0s 0s 215862870e-09 0s 0s 215869550e-09 1s 1s 215872870e-09 0s 0s 215873150e-09 0s 0s 215879790e-09 1s 1s 215883110e-09 0s 0s 215883430e-09 0s 0s 215890030e-09 1s 1s 215893350e-09 0s 0s 215893710e-09 0s 0s 215900270e-09 1s 1s 215903590e-09 0s 0s 215903990e-09 0s 0s 215910510e-09 1s 1s 215913830e-09 0s 0s 215914270e-09 0s 0s 215920750e-09 1s 1s 215924070e-09 0s 0s 215924550e-09 0s 0s 215930990e-09 1s 1s 215934310e-09 0s 0s 215934830e-09 0s 0s 215941230e-09 1s 1s 215944550e-09 0s 0s 215945110e-09 0s 0s 215951470e-09 1s 1s 215954790e-09 0s 0s 215955390e-09 0s 0s 215961710e-09 1s 1s 215965030e-09 0s 0s 215965670e-09 0s 0s 215971950e-09 1s 1s 215975270e-09 0s 0s 215975950e-09 0s 0s 215982190e-09 1s 1s 215985510e-09 0s 0s 215986230e-09 0s 0s 215992430e-09 1s 1s 215995750e-09 0s 0s 215996510e-09 0s 0s 216002670e-09 1s 1s 216005990e-09 0s 0s 216006790e-09 0s 0s 216012910e-09 1s 1s 216016230e-09 0s 0s 216017070e-09 0s 0s 216023150e-09 1s 1s 216026470e-09 0s 0s 216027350e-09 0s 0s 216033390e-09 1s 1s 216036710e-09 0s 0s 216037630e-09 0s 0s 216043630e-09 1s 1s 216046950e-09 0s 0s 216047910e-09 0s 0s 216053870e-09 1s 1s 216057190e-09 0s 0s 216058190e-09 0s 0s 216064110e-09 1s 1s 216067430e-09 0s 0s 216068470e-09 0s 0s 216074350e-09 1s 1s 216077670e-09 0s 0s 216078750e-09 0s 0s 216084590e-09 1s 1s 216087910e-09 0s 0s 216089030e-09 0s 0s 216094830e-09 1s 1s 216098150e-09 0s 0s 216099310e-09 0s 0s 216105070e-09 1s 1s 216108390e-09 0s 0s 216109590e-09 0s 0s 216115310e-09 1s 1s 216118630e-09 0s 0s 216119870e-09 0s 0s 216125550e-09 1s 1s 216128870e-09 0s 0s 216130150e-09 0s 0s 216135790e-09 1s 1s 216139110e-09 0s 0s 216140430e-09 0s 0s 216146030e-09 1s 1s 216149350e-09 0s 0s 216150710e-09 0s 0s 216156270e-09 1s 1s 216159590e-09 0s 0s 216160990e-09 0s 0s 216166510e-09 1s 1s 216169830e-09 0s 0s 216171270e-09 0s 0s 216176750e-09 1s 1s 216180070e-09 0s 0s 216181550e-09 0s 0s 216186990e-09 1s 1s 216190310e-09 0s 0s 216191830e-09 0s 0s 216197230e-09 1s 1s 216200550e-09 0s 0s 216202110e-09 0s 0s 216207470e-09 1s 1s 216210790e-09 0s 0s 216212390e-09 0s 0s 216217710e-09 1s 1s 216221030e-09 0s 0s 216222670e-09 0s 0s 216227950e-09 1s 1s 216231270e-09 0s 0s 216232950e-09 0s 0s 216238190e-09 1s 1s 216241510e-09 0s 0s 216243230e-09 0s 0s 216248430e-09 1s 1s 216251750e-09 0s 0s 216253510e-09 0s 0s 216258670e-09 1s 1s 216261990e-09 0s 0s 216263790e-09 0s 0s 216268910e-09 1s 1s 216272230e-09 0s 0s 216274070e-09 0s 0s 216279150e-09 1s 1s 216282470e-09 0s 0s 216284350e-09 0s 0s 216289390e-09 1s 1s 216292710e-09 0s 0s 216294630e-09 0s 0s 216299630e-09 1s 1s 216302950e-09 0s 0s 216304910e-09 0s 0s 216309870e-09 1s 1s 216313190e-09 0s 0s 216315190e-09 0s 0s 216320110e-09 1s 1s 216323430e-09 0s 0s 216325470e-09 0s 0s 216330350e-09 1s 1s 216333670e-09 0s 0s 216335750e-09 0s 0s 216340590e-09 1s 1s 216343910e-09 0s 0s 216346030e-09 0s 0s 216350830e-09 1s 1s 216354150e-09 0s 0s 216356310e-09 0s 0s 216361070e-09 1s 1s 216364390e-09 0s 0s 216366590e-09 0s 0s 216371310e-09 1s 1s 216374630e-09 0s 0s 216376870e-09 0s 0s 216381550e-09 1s 1s 216384870e-09 0s 0s 216387150e-09 0s 0s 216391790e-09 1s 1s 216395110e-09 0s 0s 216397430e-09 0s 0s 216402030e-09 1s 1s 216405350e-09 0s 0s 216407710e-09 0s 0s 216412270e-09 1s 1s 216415590e-09 0s 0s 216417990e-09 0s 0s 216422510e-09 1s 1s 216425830e-09 0s 0s 216428270e-09 0s 0s 216432750e-09 1s 1s 216436070e-09 0s 0s 216438550e-09 0s 0s 216442990e-09 1s 1s 216446310e-09 0s 0s 216448830e-09 0s 0s 216453230e-09 1s 1s 216456550e-09 0s 0s 216459110e-09 0s 0s 216463470e-09 1s 1s 216466790e-09 0s 0s 216469390e-09 0s 0s 216473710e-09 1s 1s 216477030e-09 0s 0s 216479670e-09 0s 0s 216483950e-09 1s 1s 216487270e-09 0s 0s 216489950e-09 0s 0s 216494190e-09 1s 1s 216497510e-09 0s 0s 216500230e-09 0s 0s 216504430e-09 1s 1s 216507750e-09 0s 0s 216510510e-09 0s 0s 216514670e-09 1s 1s 216517990e-09 0s 0s 216520790e-09 0s 0s 216524910e-09 1s 1s 216528230e-09 0s 0s 216531070e-09 0s 0s 216535150e-09 1s 1s 216538470e-09 0s 0s 216541350e-09 0s 0s 216545390e-09 1s 1s 216548710e-09 0s 0s 216551630e-09 0s 0s 216555630e-09 1s 1s 216558950e-09 0s 0s 216561910e-09 0s 0s 216565870e-09 1s 1s 216569190e-09 0s 0s 216572190e-09 0s 0s 216576110e-09 1s 1s 216579430e-09 0s 0s 216582470e-09 0s 0s 216586350e-09 1s 1s 216589670e-09 0s 0s 216592750e-09 0s 0s 216596590e-09 1s 1s 216599910e-09 0s 0s 216603030e-09 0s 0s 216606830e-09 1s 1s 216610150e-09 0s 0s 216613310e-09 0s 0s 216617070e-09 1s 1s 216620390e-09 0s 0s 216623590e-09 0s 0s 216627310e-09 1s 1s 216630630e-09 0s 0s 216633870e-09 0s 0s 216637550e-09 1s 1s 216640870e-09 0s 0s 216644150e-09 0s 0s 216647790e-09 1s 1s 216651110e-09 0s 0s 216654430e-09 0s 0s 216658030e-09 1s 1s 216661350e-09 0s 0s 216664710e-09 0s 0s 216668270e-09 1s 1s 216671590e-09 0s 0s 216674990e-09 0s 0s 216678510e-09 1s 1s 216681830e-09 0s 0s 216685270e-09 0s 0s 216688750e-09 1s 1s 216692070e-09 0s 0s 216695550e-09 0s 0s 216698990e-09 1s 1s 216702310e-09 0s 0s 216705830e-09 0s 0s 216709230e-09 1s 1s 216712550e-09 0s 0s 216716110e-09 0s 0s 216719470e-09 1s 1s 216722790e-09 0s 0s 216726390e-09 0s 0s 216729710e-09 1s 1s 216733030e-09 0s 0s 216736670e-09 0s 0s 216739950e-09 1s 1s 216743270e-09 0s 0s 216746950e-09 0s 0s 216750190e-09 1s 1s 216753510e-09 0s 0s 216757230e-09 0s 0s 216760430e-09 1s 1s 216763750e-09 0s 0s 216767510e-09 0s 0s 216770670e-09 1s 1s 216773990e-09 0s 0s 216777790e-09 0s 0s 216780910e-09 1s 1s 216784230e-09 0s 0s 216788070e-09 0s 0s 216791150e-09 1s 1s 216794470e-09 0s 0s 216798350e-09 0s 0s 216801390e-09 1s 1s 216804710e-09 0s 0s 216808630e-09 0s 0s 216811630e-09 1s 1s 216814950e-09 0s 0s 216818910e-09 0s 0s 216821870e-09 1s 1s 216825190e-09 0s 0s 216829190e-09 0s 0s 216832110e-09 1s 1s 216835430e-09 0s 0s 216839470e-09 0s 0s 216842350e-09 1s 1s 216845670e-09 0s 0s 216849750e-09 0s 0s 216852590e-09 1s 1s 216855910e-09 0s 0s 216860030e-09 0s 0s 216862830e-09 1s 1s 216866150e-09 0s 0s 216870310e-09 0s 0s 216873070e-09 1s 1s 216876390e-09 0s 0s 216880590e-09 0s 0s 216883310e-09 1s 1s 216886630e-09 0s 0s 216890870e-09 0s 0s 216893550e-09 1s 1s 216896870e-09 0s 0s 216901150e-09 0s 0s 216903790e-09 1s 1s 216907110e-09 0s 0s 216911430e-09 0s 0s 216914030e-09 1s 1s 216917350e-09 0s 0s 216921710e-09 0s 0s 216924270e-09 1s 1s 216927590e-09 0s 0s 216931990e-09 0s 0s 216934510e-09 1s 1s 216937830e-09 0s 0s 216942270e-09 0s 0s 216944750e-09 1s 1s 216948070e-09 0s 0s 216952550e-09 0s 0s 216954990e-09 1s 1s 216958310e-09 0s 0s 216962830e-09 0s 0s 216965230e-09 1s 1s 216968550e-09 0s 0s 216973110e-09 0s 0s 216975470e-09 1s 1s 216978790e-09 0s 0s 216983390e-09 0s 0s 216985710e-09 1s 1s 216989030e-09 0s 0s 216993670e-09 0s 0s 216995950e-09 1s 1s 216999270e-09 0s 0s 217003950e-09 0s 0s 217006190e-09 1s 1s 217009510e-09 0s 0s 217014230e-09 0s 0s 217016430e-09 1s 1s 217019750e-09 0s 0s 217024510e-09 0s 0s 217026670e-09 1s 1s 217029990e-09 0s 0s 217034790e-09 0s 0s 217036910e-09 1s 1s 217040230e-09 0s 0s 217045070e-09 0s 0s 217047150e-09 1s 1s 217050470e-09 0s 0s 217055350e-09 0s 0s 217057390e-09 1s 1s 217060710e-09 0s 0s 217065630e-09 0s 0s 217067630e-09 1s 1s 217070950e-09 0s 0s 217075910e-09 0s 0s 217077870e-09 1s 1s 217081190e-09 0s 0s 217086190e-09 0s 0s 217088110e-09 1s 1s 217091430e-09 0s 0s 217096470e-09 0s 0s 217098350e-09 1s 1s 217101670e-09 0s 0s 217106750e-09 0s 0s 217108590e-09 1s 1s 217111910e-09 0s 0s 217117030e-09 0s 0s 217118830e-09 1s 1s 217122150e-09 0s 0s 217127310e-09 0s 0s 217129070e-09 1s 1s 217132390e-09 0s 0s 217137590e-09 0s 0s 217139310e-09 1s 1s 217142630e-09 0s 0s 217147870e-09 0s 0s 217149550e-09 1s 1s 217152870e-09 0s 0s 217158150e-09 0s 0s 217159790e-09 1s 1s 217163110e-09 0s 0s 217168430e-09 0s 0s 217170030e-09 1s 1s 217173350e-09 0s 0s 217178710e-09 0s 0s 217180270e-09 1s 1s 217183590e-09 0s 0s 217188990e-09 0s 0s 217190510e-09 1s 1s 217193830e-09 0s 0s 217199270e-09 0s 0s 217200750e-09 1s 1s 217204070e-09 0s 0s 217209550e-09 0s 0s 217210990e-09 1s 1s 217214310e-09 0s 0s 217219830e-09 0s 0s 217221230e-09 1s 1s 217224550e-09 0s 0s 217230110e-09 0s 0s 217231470e-09 1s 1s 217234790e-09 0s 0s 217240390e-09 0s 0s 217241710e-09 1s 1s 217245030e-09 0s 0s 217250670e-09 0s 0s 217251950e-09 1s 1s 217255270e-09 0s 0s 217260950e-09 0s 0s 217262190e-09 1s 1s 217265510e-09 0s 0s 217271230e-09 0s 0s 217272430e-09 1s 1s 217275750e-09 0s 0s 217281510e-09 0s 0s 217282670e-09 1s 1s 217285990e-09 0s 0s 217291790e-09 0s 0s 217292910e-09 1s 1s 217296230e-09 0s 0s 217302070e-09 0s 0s 217303150e-09 1s 1s 217306470e-09 0s 0s 217312350e-09 0s 0s 217313390e-09 1s 1s 217316710e-09 0s 0s 217322630e-09 0s 0s 217323630e-09 1s 1s 217326950e-09 0s 0s 217332910e-09 0s 0s 217333870e-09 1s 1s 217337190e-09 0s 0s 217343190e-09 0s 0s 217344110e-09 1s 1s 217347430e-09 0s 0s 217353470e-09 0s 0s 217354350e-09 1s 1s 217357670e-09 0s 0s 217363750e-09 0s 0s 217364590e-09 1s 1s 217367910e-09 0s 0s 217374030e-09 0s 0s 217374830e-09 1s 1s 217378150e-09 0s 0s 217384310e-09 0s 0s 217385070e-09 1s 1s 217388390e-09 0s 0s 217394590e-09 0s 0s 217395310e-09 1s 1s 217398630e-09 0s 0s 217404870e-09 0s 0s 217405550e-09 1s 1s 217408870e-09 0s 0s 217415150e-09 0s 0s 217415790e-09 1s 1s 217419110e-09 0s 0s 217425430e-09 0s 0s 217426030e-09 1s 1s 217429350e-09 0s 0s 217435710e-09 0s 0s 217436270e-09 1s 1s 217439590e-09 0s 0s 217445990e-09 0s 0s 217446510e-09 1s 1s 217449830e-09 0s 0s 217456270e-09 0s 0s 217456750e-09 1s 1s 217460070e-09 0s 0s 217466550e-09 0s 0s 217466990e-09 1s 1s 217470310e-09 0s 0s 217476830e-09 0s 0s 217477230e-09 1s 1s 217480550e-09 0s 0s 217487110e-09 0s 0s 217487470e-09 1s 1s 217490790e-09 0s 0s 217497390e-09 0s 0s 217497710e-09 1s 1s 217501030e-09 0s 0s 217507670e-09 0s 0s 217507950e-09 1s 1s 217511270e-09 0s 0s 217517950e-09 0s 0s 217518190e-09 1s 1s 217521510e-09 0s 0s 217528230e-09 0s 0s 217528430e-09 1s 1s 217531750e-09 0s 0s 217538510e-09 0s 0s 217538670e-09 1s 1s 217541990e-09 0s 0s 217548790e-09 0s 0s 217548910e-09 1s 1s 217552230e-09 0s 0s 217559070e-09 0s 0s 217559150e-09 1s 1s 217562470e-09 0s 0s 217569350e-09 0s 0s 217569390e-09 1s 1s 217572710e-09 0s 0s 217579630e-09 1s 1s 217579670e-09 1s 1s 217582990e-09 0s 0s 217589870e-09 1s 1s 217589950e-09 1s 1s 217593230e-09 0s 0s 217600110e-09 1s 1s 217600230e-09 1s 1s 217603470e-09 0s 0s 217610350e-09 1s 1s 217610510e-09 1s 1s 217613710e-09 0s 0s 217620590e-09 1s 1s 217620790e-09 1s 1s 217623950e-09 0s 0s 217630830e-09 1s 1s 217631070e-09 1s 1s 217634190e-09 0s 0s 217641070e-09 1s 1s 217641350e-09 1s 1s 217644430e-09 0s 0s 217651310e-09 1s 1s 217651630e-09 1s 1s 217654670e-09 0s 0s 217661550e-09 1s 1s 217661910e-09 1s 1s 217664910e-09 0s 0s 217671790e-09 1s 1s 217672190e-09 1s 1s 217675150e-09 0s 0s 217682030e-09 1s 1s 217682470e-09 1s 1s 217685390e-09 0s 0s 217692270e-09 1s 1s 217692750e-09 1s 1s 217695630e-09 0s 0s 217702510e-09 1s 1s 217703030e-09 1s 1s 217705870e-09 0s 0s 217712750e-09 1s 1s 217713310e-09 1s 1s 217716110e-09 0s 0s 217722990e-09 1s 1s 217723590e-09 1s 1s 217726350e-09 0s 0s 217733230e-09 1s 1s 217733870e-09 1s 1s 217736590e-09 0s 0s 217743470e-09 1s 1s 217744150e-09 1s 1s 217746830e-09 0s 0s 217753710e-09 1s 1s 217754430e-09 1s 1s 217757070e-09 0s 0s 217763950e-09 1s 1s 217764710e-09 1s 1s 217767310e-09 0s 0s 217774190e-09 1s 1s 217774990e-09 1s 1s 217777550e-09 0s 0s 217784430e-09 1s 1s 217785270e-09 1s 1s 217787790e-09 0s 0s 217794670e-09 1s 1s 217795550e-09 1s 1s 217798030e-09 0s 0s 217804910e-09 1s 1s 217805830e-09 1s 1s 217808270e-09 0s 0s 217815150e-09 1s 1s 217816110e-09 1s 1s 217818510e-09 0s 0s 217825390e-09 1s 1s 217826390e-09 1s 1s 217828750e-09 0s 0s 217835630e-09 1s 1s 217836670e-09 1s 1s 217838990e-09 0s 0s 217845870e-09 1s 1s 217846950e-09 1s 1s 217849230e-09 0s 0s 217856110e-09 1s 1s 217857230e-09 1s 1s 217859470e-09 0s 0s 217866350e-09 1s 1s 217867510e-09 1s 1s 217869710e-09 0s 0s 217876590e-09 1s 1s 217877790e-09 1s 1s 217879950e-09 0s 0s 217886830e-09 1s 1s 217888070e-09 1s 1s 217890190e-09 0s 0s 217897070e-09 1s 1s 217898350e-09 1s 1s 217900430e-09 0s 0s 217907310e-09 1s 1s 217908630e-09 1s 1s 217910670e-09 0s 0s 217917550e-09 1s 1s 217918910e-09 1s 1s 217920910e-09 0s 0s 217927790e-09 1s 1s 217929190e-09 1s 1s 217931150e-09 0s 0s 217938030e-09 1s 1s 217939470e-09 1s 1s 217941390e-09 0s 0s 217948270e-09 1s 1s 217949750e-09 1s 1s 217951630e-09 0s 0s 217958510e-09 1s 1s 217960030e-09 1s 1s 217961870e-09 0s 0s 217968750e-09 1s 1s 217970310e-09 1s 1s 217972110e-09 0s 0s 217978990e-09 1s 1s 217980590e-09 1s 1s 217982350e-09 0s 0s 217989230e-09 1s 1s 217990870e-09 1s 1s 217992590e-09 0s 0s 217999470e-09 1s 1s 218001150e-09 1s 1s 218002830e-09 0s 0s 218009710e-09 1s 1s 218011430e-09 1s 1s 218013070e-09 0s 0s 218019950e-09 1s 1s 218021710e-09 1s 1s 218023310e-09 0s 0s 218030190e-09 1s 1s 218031990e-09 1s 1s 218033550e-09 0s 0s 218040430e-09 1s 1s 218042270e-09 1s 1s 218043790e-09 0s 0s 218050670e-09 1s 1s 218052550e-09 1s 1s 218054030e-09 0s 0s 218060910e-09 1s 1s 218062830e-09 1s 1s 218064270e-09 0s 0s 218071150e-09 1s 1s 218073110e-09 1s 1s 218074510e-09 0s 0s 218081390e-09 1s 1s 218083390e-09 1s 1s 218084750e-09 0s 0s 218091630e-09 1s 1s 218093670e-09 1s 1s 218094990e-09 0s 0s 218101870e-09 1s 1s 218103950e-09 1s 1s 218105230e-09 0s 0s 218112110e-09 1s 1s 218114230e-09 1s 1s 218115470e-09 0s 0s 218122350e-09 1s 1s 218124510e-09 1s 1s 218125710e-09 0s 0s 218132590e-09 1s 1s 218134790e-09 1s 1s 218135950e-09 0s 0s 218142830e-09 1s 1s 218145070e-09 1s 1s 218146190e-09 0s 0s 218153070e-09 1s 1s 218155350e-09 1s 1s 218156430e-09 0s 0s 218163310e-09 1s 1s 218165630e-09 1s 1s 218166670e-09 0s 0s 218173550e-09 1s 1s 218175910e-09 1s 1s 218176910e-09 0s 0s 218183790e-09 1s 1s 218186190e-09 1s 1s 218187150e-09 0s 0s 218194030e-09 1s 1s 218196470e-09 1s 1s 218197390e-09 0s 0s 218204270e-09 1s 1s 218206750e-09 1s 1s 218207630e-09 0s 0s 218214510e-09 1s 1s 218217030e-09 1s 1s 218217870e-09 0s 0s 218224750e-09 1s 1s 218227310e-09 1s 1s 218228110e-09 0s 0s 218234990e-09 1s 1s 218237590e-09 1s 1s 218238350e-09 0s 0s 218245230e-09 1s 1s 218247870e-09 1s 1s 218248590e-09 0s 0s 218255470e-09 1s 1s 218258150e-09 1s 1s 218258830e-09 0s 0s 218265710e-09 1s 1s 218268430e-09 1s 1s 218269070e-09 0s 0s 218275950e-09 1s 1s 218278710e-09 1s 1s 218279310e-09 0s 0s 218286190e-09 1s 1s 218288990e-09 1s 1s 218289550e-09 0s 0s 218296430e-09 1s 1s 218299270e-09 1s 1s 218299790e-09 0s 0s 218306670e-09 1s 1s 218309550e-09 1s 1s 218310030e-09 0s 0s 218316910e-09 1s 1s 218319830e-09 1s 1s 218320270e-09 0s 0s 218327150e-09 1s 1s 218330110e-09 1s 1s 218330510e-09 0s 0s 218337390e-09 1s 1s 218340390e-09 1s 1s 218340750e-09 0s 0s 218347630e-09 1s 1s 218350670e-09 1s 1s 218350990e-09 0s 0s 218357870e-09 1s 1s 218360950e-09 1s 1s 218361230e-09 0s 0s 218368110e-09 1s 1s 218371230e-09 1s 1s 218371470e-09 0s 0s 218378350e-09 1s 1s 218381510e-09 1s 1s 218381710e-09 0s 0s 218388590e-09 1s 1s 218391790e-09 1s 1s 218391950e-09 0s 0s 218398830e-09 1s 1s 218402070e-09 1s 1s 218402190e-09 0s 0s 218409070e-09 1s 1s 218412350e-09 1s 1s 218412430e-09 0s 0s 218419310e-09 1s 1s 218422630e-09 1s 1s 218422670e-09 0s 0s 218429550e-09 1s 1s 218432910e-09 0s 0s 218439790e-09 1s 1s 218443150e-09 0s 0s 218443190e-09 0s 0s 218450030e-09 1s 1s 218453390e-09 0s 0s 218453470e-09 0s 0s 218460270e-09 1s 1s 218463630e-09 0s 0s 218463750e-09 0s 0s 218470510e-09 1s 1s 218473870e-09 0s 0s 218474030e-09 0s 0s 218480750e-09 1s 1s 218484110e-09 0s 0s 218484310e-09 0s 0s 218490990e-09 1s 1s 218494350e-09 0s 0s 218494590e-09 0s 0s 218501230e-09 1s 1s 218504590e-09 0s 0s 218504870e-09 0s 0s 218511470e-09 1s 1s 218514830e-09 0s 0s 218515150e-09 0s 0s 218521710e-09 1s 1s 218525070e-09 0s 0s 218525430e-09 0s 0s 218531950e-09 1s 1s 218535310e-09 0s 0s 218535710e-09 0s 0s 218542190e-09 1s 1s 218545550e-09 0s 0s 218545990e-09 0s 0s 218552430e-09 1s 1s 218555790e-09 0s 0s 218556270e-09 0s 0s 218562670e-09 1s 1s 218566030e-09 0s 0s 218566550e-09 0s 0s 218572910e-09 1s 1s 218576270e-09 0s 0s 218576830e-09 0s 0s 218583150e-09 1s 1s 218586510e-09 0s 0s 218587110e-09 0s 0s 218593390e-09 1s 1s 218596750e-09 0s 0s 218597390e-09 0s 0s 218603630e-09 1s 1s 218606990e-09 0s 0s 218607670e-09 0s 0s 218613870e-09 1s 1s 218617230e-09 0s 0s 218617950e-09 0s 0s 218624110e-09 1s 1s 218627470e-09 0s 0s 218628230e-09 0s 0s 218634350e-09 1s 1s 218637710e-09 0s 0s 218638510e-09 0s 0s 218644590e-09 1s 1s 218647950e-09 0s 0s 218648790e-09 0s 0s 218654830e-09 1s 1s 218658190e-09 0s 0s 218659070e-09 0s 0s 218665070e-09 1s 1s 218668430e-09 0s 0s 218669350e-09 0s 0s 218675310e-09 1s 1s 218678670e-09 0s 0s 218679630e-09 0s 0s 218685550e-09 1s 1s 218688910e-09 0s 0s 218689910e-09 0s 0s 218695790e-09 1s 1s 218699150e-09 0s 0s 218700190e-09 0s 0s 218706030e-09 1s 1s 218709390e-09 0s 0s 218710470e-09 0s 0s 218716270e-09 1s 1s 218719630e-09 0s 0s 218720750e-09 0s 0s 218726510e-09 1s 1s 218729870e-09 0s 0s 218731030e-09 0s 0s 218736750e-09 1s 1s 218740110e-09 0s 0s 218741310e-09 0s 0s 218746990e-09 1s 1s 218750350e-09 0s 0s 218751590e-09 0s 0s 218757230e-09 1s 1s 218760590e-09 0s 0s 218761870e-09 0s 0s 218767470e-09 1s 1s 218770830e-09 0s 0s 218772150e-09 0s 0s 218777710e-09 1s 1s 218781070e-09 0s 0s 218782430e-09 0s 0s 218787950e-09 1s 1s 218791310e-09 0s 0s 218792710e-09 0s 0s 218798190e-09 1s 1s 218801550e-09 0s 0s 218802990e-09 0s 0s 218808430e-09 1s 1s 218811790e-09 0s 0s 218813270e-09 0s 0s 218818670e-09 1s 1s 218822030e-09 0s 0s 218823550e-09 0s 0s 218828910e-09 1s 1s 218832270e-09 0s 0s 218833830e-09 0s 0s 218839150e-09 1s 1s 218842510e-09 0s 0s 218844110e-09 0s 0s 218849390e-09 1s 1s 218852750e-09 0s 0s 218854390e-09 0s 0s 218859630e-09 1s 1s 218862990e-09 0s 0s 218864670e-09 0s 0s 218869870e-09 1s 1s 218873230e-09 0s 0s 218874950e-09 0s 0s 218880110e-09 1s 1s 218883470e-09 0s 0s 218885230e-09 0s 0s 218890350e-09 1s 1s 218893710e-09 0s 0s 218895510e-09 0s 0s 218900590e-09 1s 1s 218903950e-09 0s 0s 218905790e-09 0s 0s 218910830e-09 1s 1s 218914190e-09 0s 0s 218916070e-09 0s 0s 218921070e-09 1s 1s 218924430e-09 0s 0s 218926350e-09 0s 0s 218931310e-09 1s 1s 218934670e-09 0s 0s 218936630e-09 0s 0s 218941550e-09 1s 1s 218944910e-09 0s 0s 218946910e-09 0s 0s 218951790e-09 1s 1s 218955150e-09 0s 0s 218957190e-09 0s 0s 218962030e-09 1s 1s 218965390e-09 0s 0s 218967470e-09 0s 0s 218972270e-09 1s 1s 218975630e-09 0s 0s 218977750e-09 0s 0s 218982510e-09 1s 1s 218985870e-09 0s 0s 218988030e-09 0s 0s 218992750e-09 1s 1s 218996110e-09 0s 0s 218998310e-09 0s 0s 219002990e-09 1s 1s 219006350e-09 0s 0s 219008590e-09 0s 0s 219013230e-09 1s 1s 219016590e-09 0s 0s 219018870e-09 0s 0s 219023470e-09 1s 1s 219026830e-09 0s 0s 219029150e-09 0s 0s 219033710e-09 1s 1s 219037070e-09 0s 0s 219039430e-09 0s 0s 219043950e-09 1s 1s 219047310e-09 0s 0s 219049710e-09 0s 0s 219054190e-09 1s 1s 219057550e-09 0s 0s 219059990e-09 0s 0s 219064430e-09 1s 1s 219067790e-09 0s 0s 219070270e-09 0s 0s 219074670e-09 1s 1s 219078030e-09 0s 0s 219080550e-09 0s 0s 219084910e-09 1s 1s 219088270e-09 0s 0s 219090830e-09 0s 0s 219095150e-09 1s 1s 219098510e-09 0s 0s 219101110e-09 0s 0s 219105390e-09 1s 1s 219108750e-09 0s 0s 219111390e-09 0s 0s 219115630e-09 1s 1s 219118990e-09 0s 0s 219121670e-09 0s 0s 219125870e-09 1s 1s 219129230e-09 0s 0s 219131950e-09 0s 0s 219136110e-09 1s 1s 219139470e-09 0s 0s 219142230e-09 0s 0s 219146350e-09 1s 1s 219149710e-09 0s 0s 219152510e-09 0s 0s 219156590e-09 1s 1s 219159950e-09 0s 0s 219162790e-09 0s 0s 219166830e-09 1s 1s 219170190e-09 0s 0s 219173070e-09 0s 0s 219177070e-09 1s 1s 219180430e-09 0s 0s 219183350e-09 0s 0s 219187310e-09 1s 1s 219190670e-09 0s 0s 219193630e-09 0s 0s 219197550e-09 1s 1s 219200910e-09 0s 0s 219203910e-09 0s 0s 219207790e-09 1s 1s 219211150e-09 0s 0s 219214190e-09 0s 0s 219218030e-09 1s 1s 219221390e-09 0s 0s 219224470e-09 0s 0s 219228270e-09 1s 1s 219231630e-09 0s 0s 219234750e-09 0s 0s 219238510e-09 1s 1s 219241870e-09 0s 0s 219245030e-09 0s 0s 219248750e-09 1s 1s 219252110e-09 0s 0s 219255310e-09 0s 0s 219258990e-09 1s 1s 219262350e-09 0s 0s 219265590e-09 0s 0s 219269230e-09 1s 1s 219272590e-09 0s 0s 219275870e-09 0s 0s 219279470e-09 1s 1s 219282830e-09 0s 0s 219286150e-09 0s 0s 219289710e-09 1s 1s 219293070e-09 0s 0s 219296430e-09 0s 0s 219299950e-09 1s 1s 219303310e-09 0s 0s 219306710e-09 0s 0s 219310190e-09 1s 1s 219313550e-09 0s 0s 219316990e-09 0s 0s 219320430e-09 1s 1s 219323790e-09 0s 0s 219327270e-09 0s 0s 219330670e-09 1s 1s 219334030e-09 0s 0s 219337550e-09 0s 0s 219340910e-09 1s 1s 219344270e-09 0s 0s 219347830e-09 0s 0s 219351150e-09 1s 1s 219354510e-09 0s 0s 219358110e-09 0s 0s 219361390e-09 1s 1s 219364750e-09 0s 0s 219368390e-09 0s 0s 219371630e-09 1s 1s 219374990e-09 0s 0s 219378670e-09 0s 0s 219381870e-09 1s 1s 219385230e-09 0s 0s 219388950e-09 0s 0s 219392110e-09 1s 1s 219395470e-09 0s 0s 219399230e-09 0s 0s 219402350e-09 1s 1s 219405710e-09 0s 0s 219409510e-09 0s 0s 219412590e-09 1s 1s 219415950e-09 0s 0s 219419790e-09 0s 0s 219422830e-09 1s 1s 219426190e-09 0s 0s 219430070e-09 0s 0s 219433070e-09 1s 1s 219436430e-09 0s 0s 219440350e-09 0s 0s 219443310e-09 1s 1s 219446670e-09 0s 0s 219450630e-09 0s 0s 219453550e-09 1s 1s 219456910e-09 0s 0s 219460910e-09 0s 0s 219463790e-09 1s 1s 219467150e-09 0s 0s 219471190e-09 0s 0s 219474030e-09 1s 1s 219477390e-09 0s 0s 219481470e-09 0s 0s 219484270e-09 1s 1s 219487630e-09 0s 0s 219491750e-09 0s 0s 219494510e-09 1s 1s 219497870e-09 0s 0s 219502030e-09 0s 0s 219504750e-09 1s 1s 219508110e-09 0s 0s 219512310e-09 0s 0s 219514990e-09 1s 1s 219518350e-09 0s 0s 219522590e-09 0s 0s 219525230e-09 1s 1s 219528590e-09 0s 0s 219532870e-09 0s 0s 219535470e-09 1s 1s 219538830e-09 0s 0s 219543150e-09 0s 0s 219545710e-09 1s 1s 219549070e-09 0s 0s 219553430e-09 0s 0s 219555950e-09 1s 1s 219559310e-09 0s 0s 219563710e-09 0s 0s 219566190e-09 1s 1s 219569550e-09 0s 0s 219573990e-09 0s 0s 219576430e-09 1s 1s 219579790e-09 0s 0s 219584270e-09 0s 0s 219586670e-09 1s 1s 219590030e-09 0s 0s 219594550e-09 0s 0s 219596910e-09 1s 1s 219600270e-09 0s 0s 219604830e-09 0s 0s 219607150e-09 1s 1s 219610510e-09 0s 0s 219615110e-09 0s 0s 219617390e-09 1s 1s 219620750e-09 0s 0s 219625390e-09 0s 0s 219627630e-09 1s 1s 219630990e-09 0s 0s 219635670e-09 0s 0s 219637870e-09 1s 1s 219641230e-09 0s 0s 219645950e-09 0s 0s 219648110e-09 1s 1s 219651470e-09 0s 0s 219656230e-09 0s 0s 219658350e-09 1s 1s 219661710e-09 0s 0s 219666510e-09 0s 0s 219668590e-09 1s 1s 219671950e-09 0s 0s 219676790e-09 0s 0s 219678830e-09 1s 1s 219682190e-09 0s 0s 219687070e-09 0s 0s 219689070e-09 1s 1s 219692430e-09 0s 0s 219697350e-09 0s 0s 219699310e-09 1s 1s 219702670e-09 0s 0s 219707630e-09 0s 0s 219709550e-09 1s 1s 219712910e-09 0s 0s 219717910e-09 0s 0s 219719790e-09 1s 1s 219723150e-09 0s 0s 219728190e-09 0s 0s 219730030e-09 1s 1s 219733390e-09 0s 0s 219738470e-09 0s 0s 219740270e-09 1s 1s 219743630e-09 0s 0s 219748750e-09 0s 0s 219750510e-09 1s 1s 219753870e-09 0s 0s 219759030e-09 0s 0s 219760750e-09 1s 1s 219764110e-09 0s 0s 219769310e-09 0s 0s 219770990e-09 1s 1s 219774350e-09 0s 0s 219779590e-09 0s 0s 219781230e-09 1s 1s 219784590e-09 0s 0s 219789870e-09 0s 0s 219791470e-09 1s 1s 219794830e-09 0s 0s 219800150e-09 0s 0s 219801710e-09 1s 1s 219805070e-09 0s 0s 219810430e-09 0s 0s 219811950e-09 1s 1s 219815310e-09 0s 0s 219820710e-09 0s 0s 219822190e-09 1s 1s 219825550e-09 0s 0s 219830990e-09 0s 0s 219832430e-09 1s 1s 219835790e-09 0s 0s 219841270e-09 0s 0s 219842670e-09 1s 1s 219846030e-09 0s 0s 219851550e-09 0s 0s 219852910e-09 1s 1s 219856270e-09 0s 0s 219861830e-09 0s 0s 219863150e-09 1s 1s 219866510e-09 0s 0s 219872110e-09 0s 0s 219873390e-09 1s 1s 219876750e-09 0s 0s 219882390e-09 0s 0s 219883630e-09 1s 1s 219886990e-09 0s 0s 219892670e-09 0s 0s 219893870e-09 1s 1s 219897230e-09 0s 0s 219902950e-09 0s 0s 219904110e-09 1s 1s 219907470e-09 0s 0s 219913230e-09 0s 0s 219914350e-09 1s 1s 219917710e-09 0s 0s 219923510e-09 0s 0s 219924590e-09 1s 1s 219927950e-09 0s 0s 219933790e-09 0s 0s 219934830e-09 1s 1s 219938190e-09 0s 0s 219944070e-09 0s 0s 219945070e-09 1s 1s 219948430e-09 0s 0s 219954350e-09 0s 0s 219955310e-09 1s 1s 219958670e-09 0s 0s 219964630e-09 0s 0s 219965550e-09 1s 1s 219968910e-09 0s 0s 219974910e-09 0s 0s 219975790e-09 1s 1s 219979150e-09 0s 0s 219985190e-09 0s 0s 219986030e-09 1s 1s 219989390e-09 0s 0s 219995470e-09 0s 0s 219996270e-09 1s 1s 219999630e-09 0s 0s 220005750e-09 0s 0s 220006510e-09 1s 1s 220009870e-09 0s 0s 220016030e-09 0s 0s 220016750e-09 1s 1s 220020110e-09 0s 0s 220026310e-09 0s 0s 220026990e-09 1s 1s 220030350e-09 0s 0s 220036590e-09 0s 0s 220037230e-09 1s 1s 220040590e-09 0s 0s 220046870e-09 0s 0s 220047470e-09 1s 1s 220050830e-09 0s 0s 220057150e-09 0s 0s 220057710e-09 1s 1s 220061070e-09 0s 0s 220067430e-09 0s 0s 220067950e-09 1s 1s 220071310e-09 0s 0s 220077710e-09 0s 0s 220078190e-09 1s 1s 220081550e-09 0s 0s 220087990e-09 0s 0s 220088430e-09 1s 1s 220091790e-09 0s 0s 220098270e-09 0s 0s 220098670e-09 1s 1s 220102030e-09 0s 0s 220108550e-09 0s 0s 220108910e-09 1s 1s 220112270e-09 0s 0s 220118830e-09 0s 0s 220119150e-09 1s 1s 220122510e-09 0s 0s 220129110e-09 0s 0s 220129390e-09 1s 1s 220132750e-09 0s 0s 220139390e-09 0s 0s 220139630e-09 1s 1s 220142990e-09 0s 0s 220149670e-09 0s 0s 220149870e-09 1s 1s 220153230e-09 0s 0s 220159950e-09 0s 0s 220160110e-09 1s 1s 220163470e-09 0s 0s 220170230e-09 0s 0s 220170350e-09 1s 1s 220173710e-09 0s 0s 220180510e-09 0s 0s 220180590e-09 1s 1s 220183950e-09 0s 0s 220190790e-09 0s 0s 220190830e-09 1s 1s 220194190e-09 0s 0s 220201070e-09 1s 1s 220201110e-09 1s 1s 220204470e-09 0s 0s 220211310e-09 1s 1s 220211390e-09 1s 1s 220214710e-09 0s 0s 220221550e-09 1s 1s 220221670e-09 1s 1s 220224950e-09 0s 0s 220231790e-09 1s 1s 220231950e-09 1s 1s 220235190e-09 0s 0s 220242030e-09 1s 1s 220242230e-09 1s 1s 220245430e-09 0s 0s 220252270e-09 1s 1s 220252510e-09 1s 1s 220255670e-09 0s 0s 220262510e-09 1s 1s 220262790e-09 1s 1s 220265910e-09 0s 0s 220272750e-09 1s 1s 220273070e-09 1s 1s 220276150e-09 0s 0s 220282990e-09 1s 1s 220283350e-09 1s 1s 220286390e-09 0s 0s 220293230e-09 1s 1s 220293630e-09 1s 1s 220296630e-09 0s 0s 220303470e-09 1s 1s 220303910e-09 1s 1s 220306870e-09 0s 0s 220313710e-09 1s 1s 220314190e-09 1s 1s 220317110e-09 0s 0s 220323950e-09 1s 1s 220324470e-09 1s 1s 220327350e-09 0s 0s 220334190e-09 1s 1s 220334750e-09 1s 1s 220337590e-09 0s 0s 220344430e-09 1s 1s 220345030e-09 1s 1s 220347830e-09 0s 0s 220354670e-09 1s 1s 220355310e-09 1s 1s 220358070e-09 0s 0s 220364910e-09 1s 1s 220365590e-09 1s 1s 220368310e-09 0s 0s 220375150e-09 1s 1s 220375870e-09 1s 1s 220378550e-09 0s 0s 220385390e-09 1s 1s 220386150e-09 1s 1s 220388790e-09 0s 0s 220395630e-09 1s 1s 220396430e-09 1s 1s 220399030e-09 0s 0s 220405870e-09 1s 1s 220406710e-09 1s 1s 220409270e-09 0s 0s 220416110e-09 1s 1s 220416990e-09 1s 1s 220419510e-09 0s 0s 220426350e-09 1s 1s 220427270e-09 1s 1s 220429750e-09 0s 0s 220436590e-09 1s 1s 220437550e-09 1s 1s 220439990e-09 0s 0s 220446830e-09 1s 1s 220447830e-09 1s 1s 220450230e-09 0s 0s 220457070e-09 1s 1s 220458110e-09 1s 1s 220460470e-09 0s 0s 220467310e-09 1s 1s 220468390e-09 1s 1s 220470710e-09 0s 0s 220477550e-09 1s 1s 220478670e-09 1s 1s 220480950e-09 0s 0s 220487790e-09 1s 1s 220488950e-09 1s 1s 220491190e-09 0s 0s 220498030e-09 1s 1s 220499230e-09 1s 1s 220501430e-09 0s 0s 220508270e-09 1s 1s 220509510e-09 1s 1s 220511670e-09 0s 0s 220518510e-09 1s 1s 220519790e-09 1s 1s 220521910e-09 0s 0s 220528750e-09 1s 1s 220530070e-09 1s 1s 220532150e-09 0s 0s 220538990e-09 1s 1s 220540350e-09 1s 1s 220542390e-09 0s 0s 220549230e-09 1s 1s 220550630e-09 1s 1s 220552630e-09 0s 0s 220559470e-09 1s 1s 220560910e-09 1s 1s 220562870e-09 0s 0s 220569710e-09 1s 1s 220571190e-09 1s 1s 220573110e-09 0s 0s 220579950e-09 1s 1s 220581470e-09 1s 1s 220583350e-09 0s 0s 220590190e-09 1s 1s 220591750e-09 1s 1s 220593590e-09 0s 0s 220600430e-09 1s 1s 220602030e-09 1s 1s 220603830e-09 0s 0s 220610670e-09 1s 1s 220612310e-09 1s 1s 220614070e-09 0s 0s 220620910e-09 1s 1s 220622590e-09 1s 1s 220624310e-09 0s 0s 220631150e-09 1s 1s 220632870e-09 1s 1s 220634550e-09 0s 0s 220641390e-09 1s 1s 220643150e-09 1s 1s 220644790e-09 0s 0s 220651630e-09 1s 1s 220653430e-09 1s 1s 220655030e-09 0s 0s 220661870e-09 1s 1s 220663710e-09 1s 1s 220665270e-09 0s 0s 220672110e-09 1s 1s 220673990e-09 1s 1s 220675510e-09 0s 0s 220682350e-09 1s 1s 220684270e-09 1s 1s 220685750e-09 0s 0s 220692590e-09 1s 1s 220694550e-09 1s 1s 220695990e-09 0s 0s 220702830e-09 1s 1s 220704830e-09 1s 1s 220706230e-09 0s 0s 220713070e-09 1s 1s 220715110e-09 1s 1s 220716470e-09 0s 0s 220723310e-09 1s 1s 220725390e-09 1s 1s 220726710e-09 0s 0s 220733550e-09 1s 1s 220735670e-09 1s 1s 220736950e-09 0s 0s 220743790e-09 1s 1s 220745950e-09 1s 1s 220747190e-09 0s 0s 220754030e-09 1s 1s 220756230e-09 1s 1s 220757430e-09 0s 0s 220764270e-09 1s 1s 220766510e-09 1s 1s 220767670e-09 0s 0s 220774510e-09 1s 1s 220776790e-09 1s 1s 220777910e-09 0s 0s 220784750e-09 1s 1s 220787070e-09 1s 1s 220788150e-09 0s 0s 220794990e-09 1s 1s 220797350e-09 1s 1s 220798390e-09 0s 0s 220805230e-09 1s 1s 220807630e-09 1s 1s 220808630e-09 0s 0s 220815470e-09 1s 1s 220817910e-09 1s 1s 220818870e-09 0s 0s 220825710e-09 1s 1s 220828190e-09 1s 1s 220829110e-09 0s 0s 220835950e-09 1s 1s 220838470e-09 1s 1s 220839350e-09 0s 0s 220846190e-09 1s 1s 220848750e-09 1s 1s 220849590e-09 0s 0s 220856430e-09 1s 1s 220859030e-09 1s 1s 220859830e-09 0s 0s 220866670e-09 1s 1s 220869310e-09 1s 1s 220870070e-09 0s 0s 220876910e-09 1s 1s 220879590e-09 1s 1s 220880310e-09 0s 0s 220887150e-09 1s 1s 220889870e-09 1s 1s 220890550e-09 0s 0s 220897390e-09 1s 1s 220900150e-09 1s 1s 220900790e-09 0s 0s 220907630e-09 1s 1s 220910430e-09 1s 1s 220911030e-09 0s 0s 220917870e-09 1s 1s 220920710e-09 1s 1s 220921270e-09 0s 0s 220928110e-09 1s 1s 220930990e-09 1s 1s 220931510e-09 0s 0s 220938350e-09 1s 1s 220941270e-09 1s 1s 220941750e-09 0s 0s 220948590e-09 1s 1s 220951550e-09 1s 1s 220951990e-09 0s 0s 220958830e-09 1s 1s 220961830e-09 1s 1s 220962230e-09 0s 0s 220969070e-09 1s 1s 220972110e-09 1s 1s 220972470e-09 0s 0s 220979310e-09 1s 1s 220982390e-09 1s 1s 220982710e-09 0s 0s 220989550e-09 1s 1s 220992670e-09 1s 1s 220992950e-09 0s 0s 220999790e-09 1s 1s 221002950e-09 1s 1s 221003190e-09 0s 0s 221010030e-09 1s 1s 221013230e-09 1s 1s 221013430e-09 0s 0s 221020270e-09 1s 1s 221023510e-09 1s 1s 221023670e-09 0s 0s 221030510e-09 1s 1s 221033790e-09 1s 1s 221033910e-09 0s 0s 221040750e-09 1s 1s 221044070e-09 1s 1s 221044150e-09 0s 0s 221050990e-09 1s 1s 221054350e-09 1s 1s 221054390e-09 0s 0s 221061230e-09 1s 1s 221064630e-09 0s 0s 221071470e-09 1s 1s 221074870e-09 0s 0s 221074910e-09 0s 0s 221081710e-09 1s 1s 221085110e-09 0s 0s 221085190e-09 0s 0s 221091950e-09 1s 1s 221095350e-09 0s 0s 221095470e-09 0s 0s 221102190e-09 1s 1s 221105590e-09 0s 0s 221105750e-09 0s 0s 221112430e-09 1s 1s 221115830e-09 0s 0s 221116030e-09 0s 0s 221122670e-09 1s 1s 221126070e-09 0s 0s 221126310e-09 0s 0s 221132910e-09 1s 1s 221136310e-09 0s 0s 221136590e-09 0s 0s 221143150e-09 1s 1s 221146550e-09 0s 0s 221146870e-09 0s 0s 221153390e-09 1s 1s 221156790e-09 0s 0s 221157150e-09 0s 0s 221163630e-09 1s 1s 221167030e-09 0s 0s 221167430e-09 0s 0s 221173870e-09 1s 1s 221177270e-09 0s 0s 221177710e-09 0s 0s 221184110e-09 1s 1s 221187510e-09 0s 0s 221187990e-09 0s 0s 221194350e-09 1s 1s 221197750e-09 0s 0s 221198270e-09 0s 0s 221204590e-09 1s 1s 221207990e-09 0s 0s 221208550e-09 0s 0s 221214830e-09 1s 1s 221218230e-09 0s 0s 221218830e-09 0s 0s 221225070e-09 1s 1s 221228470e-09 0s 0s 221229110e-09 0s 0s 221235310e-09 1s 1s 221238710e-09 0s 0s 221239390e-09 0s 0s 221245550e-09 1s 1s 221248950e-09 0s 0s 221249670e-09 0s 0s 221255790e-09 1s 1s 221259190e-09 0s 0s 221259950e-09 0s 0s 221266030e-09 1s 1s 221269430e-09 0s 0s 221270230e-09 0s 0s 221276270e-09 1s 1s 221279670e-09 0s 0s 221280510e-09 0s 0s 221286510e-09 1s 1s 221289910e-09 0s 0s 221290790e-09 0s 0s 221296750e-09 1s 1s 221300150e-09 0s 0s 221301070e-09 0s 0s 221306990e-09 1s 1s 221310390e-09 0s 0s 221311350e-09 0s 0s 221317230e-09 1s 1s 221320630e-09 0s 0s 221321630e-09 0s 0s 221327470e-09 1s 1s 221330870e-09 0s 0s 221331910e-09 0s 0s 221337710e-09 1s 1s 221341110e-09 0s 0s 221342190e-09 0s 0s 221347950e-09 1s 1s 221351350e-09 0s 0s 221352470e-09 0s 0s 221358190e-09 1s 1s 221361590e-09 0s 0s 221362750e-09 0s 0s 221368430e-09 1s 1s 221371830e-09 0s 0s 221373030e-09 0s 0s 221378670e-09 1s 1s 221382070e-09 0s 0s 221383310e-09 0s 0s 221388910e-09 1s 1s 221392310e-09 0s 0s 221393590e-09 0s 0s 221399150e-09 1s 1s 221402550e-09 0s 0s 221403870e-09 0s 0s 221409390e-09 1s 1s 221412790e-09 0s 0s 221414150e-09 0s 0s 221419630e-09 1s 1s 221423030e-09 0s 0s 221424430e-09 0s 0s 221429870e-09 1s 1s 221433270e-09 0s 0s 221434710e-09 0s 0s 221440110e-09 1s 1s 221443510e-09 0s 0s 221444990e-09 0s 0s 221450350e-09 1s 1s 221453750e-09 0s 0s 221455270e-09 0s 0s 221460590e-09 1s 1s 221463990e-09 0s 0s 221465550e-09 0s 0s 221470830e-09 1s 1s 221474230e-09 0s 0s 221475830e-09 0s 0s 221481070e-09 1s 1s 221484470e-09 0s 0s 221486110e-09 0s 0s 221491310e-09 1s 1s 221494710e-09 0s 0s 221496390e-09 0s 0s 221501550e-09 1s 1s 221504950e-09 0s 0s 221506670e-09 0s 0s 221511790e-09 1s 1s 221515190e-09 0s 0s 221516950e-09 0s 0s 221522030e-09 1s 1s 221525430e-09 0s 0s 221527230e-09 0s 0s 221532270e-09 1s 1s 221535670e-09 0s 0s 221537510e-09 0s 0s 221542510e-09 1s 1s 221545910e-09 0s 0s 221547790e-09 0s 0s 221552750e-09 1s 1s 221556150e-09 0s 0s 221558070e-09 0s 0s 221562990e-09 1s 1s 221566390e-09 0s 0s 221568350e-09 0s 0s 221573230e-09 1s 1s 221576630e-09 0s 0s 221578630e-09 0s 0s 221583470e-09 1s 1s 221586870e-09 0s 0s 221588910e-09 0s 0s 221593710e-09 1s 1s 221597110e-09 0s 0s 221599190e-09 0s 0s 221603950e-09 1s 1s 221607350e-09 0s 0s 221609470e-09 0s 0s 221614190e-09 1s 1s 221617590e-09 0s 0s 221619750e-09 0s 0s 221624430e-09 1s 1s 221627830e-09 0s 0s 221630030e-09 0s 0s 221634670e-09 1s 1s 221638070e-09 0s 0s 221640310e-09 0s 0s 221644910e-09 1s 1s 221648310e-09 0s 0s 221650590e-09 0s 0s 221655150e-09 1s 1s 221658550e-09 0s 0s 221660870e-09 0s 0s 221665390e-09 1s 1s 221668790e-09 0s 0s 221671150e-09 0s 0s 221675630e-09 1s 1s 221679030e-09 0s 0s 221681430e-09 0s 0s 221685870e-09 1s 1s 221689270e-09 0s 0s 221691710e-09 0s 0s 221696110e-09 1s 1s 221699510e-09 0s 0s 221701990e-09 0s 0s 221706350e-09 1s 1s 221709750e-09 0s 0s 221712270e-09 0s 0s 221716590e-09 1s 1s 221719990e-09 0s 0s 221722550e-09 0s 0s 221726830e-09 1s 1s 221730230e-09 0s 0s 221732830e-09 0s 0s 221737070e-09 1s 1s 221740470e-09 0s 0s 221743110e-09 0s 0s 221747310e-09 1s 1s 221750710e-09 0s 0s 221753390e-09 0s 0s 221757550e-09 1s 1s 221760950e-09 0s 0s 221763670e-09 0s 0s 221767790e-09 1s 1s 221771190e-09 0s 0s 221773950e-09 0s 0s 221778030e-09 1s 1s 221781430e-09 0s 0s 221784230e-09 0s 0s 221788270e-09 1s 1s 221791670e-09 0s 0s 221794510e-09 0s 0s 221798510e-09 1s 1s 221801910e-09 0s 0s 221804790e-09 0s 0s 221808750e-09 1s 1s 221812150e-09 0s 0s 221815070e-09 0s 0s 221818990e-09 1s 1s 221822390e-09 0s 0s 221825350e-09 0s 0s 221829230e-09 1s 1s 221832630e-09 0s 0s 221835630e-09 0s 0s 221839470e-09 1s 1s 221842870e-09 0s 0s 221845910e-09 0s 0s 221849710e-09 1s 1s 221853110e-09 0s 0s 221856190e-09 0s 0s 221859950e-09 1s 1s 221863350e-09 0s 0s 221866470e-09 0s 0s 221870190e-09 1s 1s 221873590e-09 0s 0s 221876750e-09 0s 0s 221880430e-09 1s 1s 221883830e-09 0s 0s 221887030e-09 0s 0s 221890670e-09 1s 1s 221894070e-09 0s 0s 221897310e-09 0s 0s 221900910e-09 1s 1s 221904310e-09 0s 0s 221907590e-09 0s 0s 221911150e-09 1s 1s 221914550e-09 0s 0s 221917870e-09 0s 0s 221921390e-09 1s 1s 221924790e-09 0s 0s 221928150e-09 0s 0s 221931630e-09 1s 1s 221935030e-09 0s 0s 221938430e-09 0s 0s 221941870e-09 1s 1s 221945270e-09 0s 0s 221948710e-09 0s 0s 221952110e-09 1s 1s 221955510e-09 0s 0s 221958990e-09 0s 0s 221962350e-09 1s 1s 221965750e-09 0s 0s 221969270e-09 0s 0s 221972590e-09 1s 1s 221975990e-09 0s 0s 221979550e-09 0s 0s 221982830e-09 1s 1s 221986230e-09 0s 0s 221989830e-09 0s 0s 221993070e-09 1s 1s 221996470e-09 0s 0s 222000110e-09 0s 0s 222003310e-09 1s 1s 222006710e-09 0s 0s 222010390e-09 0s 0s 222013550e-09 1s 1s 222016950e-09 0s 0s 222020670e-09 0s 0s 222023790e-09 1s 1s 222027190e-09 0s 0s 222030950e-09 0s 0s 222034030e-09 1s 1s 222037430e-09 0s 0s 222041230e-09 0s 0s 222044270e-09 1s 1s 222047670e-09 0s 0s 222051510e-09 0s 0s 222054510e-09 1s 1s 222057910e-09 0s 0s 222061790e-09 0s 0s 222064750e-09 1s 1s 222068150e-09 0s 0s 222072070e-09 0s 0s 222074990e-09 1s 1s 222078390e-09 0s 0s 222082350e-09 0s 0s 222085230e-09 1s 1s 222088630e-09 0s 0s 222092630e-09 0s 0s 222095470e-09 1s 1s 222098870e-09 0s 0s 222102910e-09 0s 0s 222105710e-09 1s 1s 222109110e-09 0s 0s 222113190e-09 0s 0s 222115950e-09 1s 1s 222119350e-09 0s 0s 222123470e-09 0s 0s 222126190e-09 1s 1s 222129590e-09 0s 0s 222133750e-09 0s 0s 222136430e-09 1s 1s 222139830e-09 0s 0s 222144030e-09 0s 0s 222146670e-09 1s 1s 222150070e-09 0s 0s 222154310e-09 0s 0s 222156910e-09 1s 1s 222160310e-09 0s 0s 222164590e-09 0s 0s 222167150e-09 1s 1s 222170550e-09 0s 0s 222174870e-09 0s 0s 222177390e-09 1s 1s 222180790e-09 0s 0s 222185150e-09 0s 0s 222187630e-09 1s 1s 222191030e-09 0s 0s 222195430e-09 0s 0s 222197870e-09 1s 1s 222201270e-09 0s 0s 222205710e-09 0s 0s 222208110e-09 1s 1s 222211510e-09 0s 0s 222215990e-09 0s 0s 222218350e-09 1s 1s 222221750e-09 0s 0s 222226270e-09 0s 0s 222228590e-09 1s 1s 222231990e-09 0s 0s 222236550e-09 0s 0s 222238830e-09 1s 1s 222242230e-09 0s 0s 222246830e-09 0s 0s 222249070e-09 1s 1s 222252470e-09 0s 0s 222257110e-09 0s 0s 222259310e-09 1s 1s 222262710e-09 0s 0s 222267390e-09 0s 0s 222269550e-09 1s 1s 222272950e-09 0s 0s 222277670e-09 0s 0s 222279790e-09 1s 1s 222283190e-09 0s 0s 222287950e-09 0s 0s 222290030e-09 1s 1s 222293430e-09 0s 0s 222298230e-09 0s 0s 222300270e-09 1s 1s 222303670e-09 0s 0s 222308510e-09 0s 0s 222310510e-09 1s 1s 222313910e-09 0s 0s 222318790e-09 0s 0s 222320750e-09 1s 1s 222324150e-09 0s 0s 222329070e-09 0s 0s 222330990e-09 1s 1s 222334390e-09 0s 0s 222339350e-09 0s 0s 222341230e-09 1s 1s 222344630e-09 0s 0s 222349630e-09 0s 0s 222351470e-09 1s 1s 222354870e-09 0s 0s 222359910e-09 0s 0s 222361710e-09 1s 1s 222365110e-09 0s 0s 222370190e-09 0s 0s 222371950e-09 1s 1s 222375350e-09 0s 0s 222380470e-09 0s 0s 222382190e-09 1s 1s 222385590e-09 0s 0s 222390750e-09 0s 0s 222392430e-09 1s 1s 222395830e-09 0s 0s 222401030e-09 0s 0s 222402670e-09 1s 1s 222406070e-09 0s 0s 222411310e-09 0s 0s 222412910e-09 1s 1s 222416310e-09 0s 0s 222421590e-09 0s 0s 222423150e-09 1s 1s 222426550e-09 0s 0s 222431870e-09 0s 0s 222433390e-09 1s 1s 222436790e-09 0s 0s 222442150e-09 0s 0s 222443630e-09 1s 1s 222447030e-09 0s 0s 222452430e-09 0s 0s 222453870e-09 1s 1s 222457270e-09 0s 0s 222462710e-09 0s 0s 222464110e-09 1s 1s 222467510e-09 0s 0s 222472990e-09 0s 0s 222474350e-09 1s 1s 222477750e-09 0s 0s 222483270e-09 0s 0s 222484590e-09 1s 1s 222487990e-09 0s 0s 222493550e-09 0s 0s 222494830e-09 1s 1s 222498230e-09 0s 0s 222503830e-09 0s 0s 222505070e-09 1s 1s 222508470e-09 0s 0s 222514110e-09 0s 0s 222515310e-09 1s 1s 222518710e-09 0s 0s 222524390e-09 0s 0s 222525550e-09 1s 1s 222528950e-09 0s 0s 222534670e-09 0s 0s 222535790e-09 1s 1s 222539190e-09 0s 0s 222544950e-09 0s 0s 222546030e-09 1s 1s 222549430e-09 0s 0s 222555230e-09 0s 0s 222556270e-09 1s 1s 222559670e-09 0s 0s 222565510e-09 0s 0s 222566510e-09 1s 1s 222569910e-09 0s 0s 222575790e-09 0s 0s 222576750e-09 1s 1s 222580150e-09 0s 0s 222586070e-09 0s 0s 222586990e-09 1s 1s 222590390e-09 0s 0s 222596350e-09 0s 0s 222597230e-09 1s 1s 222600630e-09 0s 0s 222606630e-09 0s 0s 222607470e-09 1s 1s 222610870e-09 0s 0s 222616910e-09 0s 0s 222617710e-09 1s 1s 222621110e-09 0s 0s 222627190e-09 0s 0s 222627950e-09 1s 1s 222631350e-09 0s 0s 222637470e-09 0s 0s 222638190e-09 1s 1s 222641590e-09 0s 0s 222647750e-09 0s 0s 222648430e-09 1s 1s 222651830e-09 0s 0s 222658030e-09 0s 0s 222658670e-09 1s 1s 222662070e-09 0s 0s 222668310e-09 0s 0s 222668910e-09 1s 1s 222672310e-09 0s 0s 222678590e-09 0s 0s 222679150e-09 1s 1s 222682550e-09 0s 0s 222688870e-09 0s 0s 222689390e-09 1s 1s 222692790e-09 0s 0s 222699150e-09 0s 0s 222699630e-09 1s 1s 222703030e-09 0s 0s 222709430e-09 0s 0s 222709870e-09 1s 1s 222713270e-09 0s 0s 222719710e-09 0s 0s 222720110e-09 1s 1s 222723510e-09 0s 0s 222729990e-09 0s 0s 222730350e-09 1s 1s 222733750e-09 0s 0s 222740270e-09 0s 0s 222740590e-09 1s 1s 222743990e-09 0s 0s 222750550e-09 0s 0s 222750830e-09 1s 1s 222754230e-09 0s 0s 222760830e-09 0s 0s 222761070e-09 1s 1s 222764470e-09 0s 0s 222771110e-09 0s 0s 222771310e-09 1s 1s 222774710e-09 0s 0s 222781390e-09 0s 0s 222781550e-09 1s 1s 222784950e-09 0s 0s 222791670e-09 0s 0s 222791790e-09 1s 1s 222795190e-09 0s 0s 222801950e-09 0s 0s 222802030e-09 1s 1s 222805430e-09 0s 0s 222812230e-09 0s 0s 222812270e-09 1s 1s 222815670e-09 0s 0s 222822510e-09 1s 1s 222822550e-09 1s 1s 222825950e-09 0s 0s 222832750e-09 1s 1s 222832830e-09 1s 1s 222836190e-09 0s 0s 222842990e-09 1s 1s 222843110e-09 1s 1s 222846430e-09 0s 0s 222853230e-09 1s 1s 222853390e-09 1s 1s 222856670e-09 0s 0s 222863470e-09 1s 1s 222863670e-09 1s 1s 222866910e-09 0s 0s 222873710e-09 1s 1s 222873950e-09 1s 1s 222877150e-09 0s 0s 222883950e-09 1s 1s 222884230e-09 1s 1s 222887390e-09 0s 0s 222894190e-09 1s 1s 222894510e-09 1s 1s 222897630e-09 0s 0s 222904430e-09 1s 1s 222904790e-09 1s 1s 222907870e-09 0s 0s 222914670e-09 1s 1s 222915070e-09 1s 1s 222918110e-09 0s 0s 222924910e-09 1s 1s 222925350e-09 1s 1s 222928350e-09 0s 0s 222935150e-09 1s 1s 222935630e-09 1s 1s 222938590e-09 0s 0s 222945390e-09 1s 1s 222945910e-09 1s 1s 222948830e-09 0s 0s 222955630e-09 1s 1s 222956190e-09 1s 1s 222959070e-09 0s 0s 222965870e-09 1s 1s 222966470e-09 1s 1s 222969310e-09 0s 0s 222976110e-09 1s 1s 222976750e-09 1s 1s 222979550e-09 0s 0s 222986350e-09 1s 1s 222987030e-09 1s 1s 222989790e-09 0s 0s 222996590e-09 1s 1s 222997310e-09 1s 1s 223000030e-09 0s 0s 223006830e-09 1s 1s 223007590e-09 1s 1s 223010270e-09 0s 0s 223017070e-09 1s 1s 223017870e-09 1s 1s 223020510e-09 0s 0s 223027310e-09 1s 1s 223028150e-09 1s 1s 223030750e-09 0s 0s 223037550e-09 1s 1s 223038430e-09 1s 1s 223040990e-09 0s 0s 223047790e-09 1s 1s 223048710e-09 1s 1s 223051230e-09 0s 0s 223058030e-09 1s 1s 223058990e-09 1s 1s 223061470e-09 0s 0s 223068270e-09 1s 1s 223069270e-09 1s 1s 223071710e-09 0s 0s 223078510e-09 1s 1s 223079550e-09 1s 1s 223081950e-09 0s 0s 223088750e-09 1s 1s 223089830e-09 1s 1s 223092190e-09 0s 0s 223098990e-09 1s 1s 223100110e-09 1s 1s 223102430e-09 0s 0s 223109230e-09 1s 1s 223110390e-09 1s 1s 223112670e-09 0s 0s 223119470e-09 1s 1s 223120670e-09 1s 1s 223122910e-09 0s 0s 223129710e-09 1s 1s 223130950e-09 1s 1s 223133150e-09 0s 0s 223139950e-09 1s 1s 223141230e-09 1s 1s 223143390e-09 0s 0s 223150190e-09 1s 1s 223151510e-09 1s 1s 223153630e-09 0s 0s 223160430e-09 1s 1s 223161790e-09 1s 1s 223163870e-09 0s 0s 223170670e-09 1s 1s 223172070e-09 1s 1s 223174110e-09 0s 0s 223180910e-09 1s 1s 223182350e-09 1s 1s 223184350e-09 0s 0s 223191150e-09 1s 1s 223192630e-09 1s 1s 223194590e-09 0s 0s 223201390e-09 1s 1s 223202910e-09 1s 1s 223204830e-09 0s 0s 223211630e-09 1s 1s 223213190e-09 1s 1s 223215070e-09 0s 0s 223221870e-09 1s 1s 223223470e-09 1s 1s 223225310e-09 0s 0s 223232110e-09 1s 1s 223233750e-09 1s 1s 223235550e-09 0s 0s 223242350e-09 1s 1s 223244030e-09 1s 1s 223245790e-09 0s 0s 223252590e-09 1s 1s 223254310e-09 1s 1s 223256030e-09 0s 0s 223262830e-09 1s 1s 223264590e-09 1s 1s 223266270e-09 0s 0s 223273070e-09 1s 1s 223274870e-09 1s 1s 223276510e-09 0s 0s 223283310e-09 1s 1s 223285150e-09 1s 1s 223286750e-09 0s 0s 223293550e-09 1s 1s 223295430e-09 1s 1s 223296990e-09 0s 0s 223303790e-09 1s 1s 223305710e-09 1s 1s 223307230e-09 0s 0s 223314030e-09 1s 1s 223315990e-09 1s 1s 223317470e-09 0s 0s 223324270e-09 1s 1s 223326270e-09 1s 1s 223327710e-09 0s 0s 223334510e-09 1s 1s 223336550e-09 1s 1s 223337950e-09 0s 0s 223344750e-09 1s 1s 223346830e-09 1s 1s 223348190e-09 0s 0s 223354990e-09 1s 1s 223357110e-09 1s 1s 223358430e-09 0s 0s 223365230e-09 1s 1s 223367390e-09 1s 1s 223368670e-09 0s 0s 223375470e-09 1s 1s 223377670e-09 1s 1s 223378910e-09 0s 0s 223385710e-09 1s 1s 223387950e-09 1s 1s 223389150e-09 0s 0s 223395950e-09 1s 1s 223398230e-09 1s 1s 223399390e-09 0s 0s 223406190e-09 1s 1s 223408510e-09 1s 1s 223409630e-09 0s 0s 223416430e-09 1s 1s 223418790e-09 1s 1s 223419870e-09 0s 0s 223426670e-09 1s 1s 223429070e-09 1s 1s 223430110e-09 0s 0s 223436910e-09 1s 1s 223439350e-09 1s 1s 223440350e-09 0s 0s 223447150e-09 1s 1s 223449630e-09 1s 1s 223450590e-09 0s 0s 223457390e-09 1s 1s 223459910e-09 1s 1s 223460830e-09 0s 0s 223467630e-09 1s 1s 223470190e-09 1s 1s 223471070e-09 0s 0s 223477870e-09 1s 1s 223480470e-09 1s 1s 223481310e-09 0s 0s 223488110e-09 1s 1s 223490750e-09 1s 1s 223491550e-09 0s 0s 223498350e-09 1s 1s 223501030e-09 1s 1s 223501790e-09 0s 0s 223508590e-09 1s 1s 223511310e-09 1s 1s 223512030e-09 0s 0s 223518830e-09 1s 1s 223521590e-09 1s 1s 223522270e-09 0s 0s 223529070e-09 1s 1s 223531870e-09 1s 1s 223532510e-09 0s 0s 223539310e-09 1s 1s 223542150e-09 1s 1s 223542750e-09 0s 0s 223549550e-09 1s 1s 223552430e-09 1s 1s 223552990e-09 0s 0s 223559790e-09 1s 1s 223562710e-09 1s 1s 223563230e-09 0s 0s 223570030e-09 1s 1s 223572990e-09 1s 1s 223573470e-09 0s 0s 223580270e-09 1s 1s 223583270e-09 1s 1s 223583710e-09 0s 0s 223590510e-09 1s 1s 223593550e-09 1s 1s 223593950e-09 0s 0s 223600750e-09 1s 1s 223603830e-09 1s 1s 223604190e-09 0s 0s 223610990e-09 1s 1s 223614110e-09 1s 1s 223614430e-09 0s 0s 223621230e-09 1s 1s 223624390e-09 1s 1s 223624670e-09 0s 0s 223631470e-09 1s 1s 223634670e-09 1s 1s 223634910e-09 0s 0s 223641710e-09 1s 1s 223644950e-09 1s 1s 223645150e-09 0s 0s 223651950e-09 1s 1s 223655230e-09 1s 1s 223655390e-09 0s 0s 223662190e-09 1s 1s 223665510e-09 1s 1s 223665630e-09 0s 0s 223672430e-09 1s 1s 223675790e-09 1s 1s 223675870e-09 0s 0s 223682670e-09 1s 1s 223686070e-09 1s 1s 223686110e-09 0s 0s 223692910e-09 1s 1s 223696350e-09 0s 0s 223703150e-09 1s 1s 223706590e-09 0s 0s 223706630e-09 0s 0s 223713390e-09 1s 1s 223716830e-09 0s 0s 223716910e-09 0s 0s 223723630e-09 1s 1s 223727070e-09 0s 0s 223727190e-09 0s 0s 223733870e-09 1s 1s 223737310e-09 0s 0s 223737470e-09 0s 0s 223744110e-09 1s 1s 223747550e-09 0s 0s 223747750e-09 0s 0s 223754350e-09 1s 1s 223757790e-09 0s 0s 223758030e-09 0s 0s 223764590e-09 1s 1s 223768030e-09 0s 0s 223768310e-09 0s 0s 223774830e-09 1s 1s 223778270e-09 0s 0s 223778590e-09 0s 0s 223785070e-09 1s 1s 223788510e-09 0s 0s 223788870e-09 0s 0s 223795310e-09 1s 1s 223798750e-09 0s 0s 223799150e-09 0s 0s 223805550e-09 1s 1s 223808990e-09 0s 0s 223809430e-09 0s 0s 223815790e-09 1s 1s 223819230e-09 0s 0s 223819710e-09 0s 0s 223826030e-09 1s 1s 223829470e-09 0s 0s 223829990e-09 0s 0s 223836270e-09 1s 1s 223839710e-09 0s 0s 223840270e-09 0s 0s 223846510e-09 1s 1s 223849950e-09 0s 0s 223850550e-09 0s 0s 223856750e-09 1s 1s 223860190e-09 0s 0s 223860830e-09 0s 0s 223866990e-09 1s 1s 223870430e-09 0s 0s 223871110e-09 0s 0s 223877230e-09 1s 1s 223880670e-09 0s 0s 223881390e-09 0s 0s 223887470e-09 1s 1s 223890910e-09 0s 0s 223891670e-09 0s 0s 223897710e-09 1s 1s 223901150e-09 0s 0s 223901950e-09 0s 0s 223907950e-09 1s 1s 223911390e-09 0s 0s 223912230e-09 0s 0s 223918190e-09 1s 1s 223921630e-09 0s 0s 223922510e-09 0s 0s 223928430e-09 1s 1s 223931870e-09 0s 0s 223932790e-09 0s 0s 223938670e-09 1s 1s 223942110e-09 0s 0s 223943070e-09 0s 0s 223948910e-09 1s 1s 223952350e-09 0s 0s 223953350e-09 0s 0s 223959150e-09 1s 1s 223962590e-09 0s 0s 223963630e-09 0s 0s 223969390e-09 1s 1s 223972830e-09 0s 0s 223973910e-09 0s 0s 223979630e-09 1s 1s 223983070e-09 0s 0s 223984190e-09 0s 0s 223989870e-09 1s 1s 223993310e-09 0s 0s 223994470e-09 0s 0s 224000110e-09 1s 1s 224003550e-09 0s 0s 224004750e-09 0s 0s 224010350e-09 1s 1s 224013790e-09 0s 0s 224015030e-09 0s 0s 224020590e-09 1s 1s 224024030e-09 0s 0s 224025310e-09 0s 0s 224030830e-09 1s 1s 224034270e-09 0s 0s 224035590e-09 0s 0s 224041070e-09 1s 1s 224044510e-09 0s 0s 224045870e-09 0s 0s 224051310e-09 1s 1s 224054750e-09 0s 0s 224056150e-09 0s 0s 224061550e-09 1s 1s 224064990e-09 0s 0s 224066430e-09 0s 0s 224071790e-09 1s 1s 224075230e-09 0s 0s 224076710e-09 0s 0s 224082030e-09 1s 1s 224085470e-09 0s 0s 224086990e-09 0s 0s 224092270e-09 1s 1s 224095710e-09 0s 0s 224097270e-09 0s 0s 224102510e-09 1s 1s 224105950e-09 0s 0s 224107550e-09 0s 0s 224112750e-09 1s 1s 224116190e-09 0s 0s 224117830e-09 0s 0s 224122990e-09 1s 1s 224126430e-09 0s 0s 224128110e-09 0s 0s 224133230e-09 1s 1s 224136670e-09 0s 0s 224138390e-09 0s 0s 224143470e-09 1s 1s 224146910e-09 0s 0s 224148670e-09 0s 0s 224153710e-09 1s 1s 224157150e-09 0s 0s 224158950e-09 0s 0s 224163950e-09 1s 1s 224167390e-09 0s 0s 224169230e-09 0s 0s 224174190e-09 1s 1s 224177630e-09 0s 0s 224179510e-09 0s 0s 224184430e-09 1s 1s 224187870e-09 0s 0s 224189790e-09 0s 0s 224194670e-09 1s 1s 224198110e-09 0s 0s 224200070e-09 0s 0s 224204910e-09 1s 1s 224208350e-09 0s 0s 224210350e-09 0s 0s 224215150e-09 1s 1s 224218590e-09 0s 0s 224220630e-09 0s 0s 224225390e-09 1s 1s 224228830e-09 0s 0s 224230910e-09 0s 0s 224235630e-09 1s 1s 224239070e-09 0s 0s 224241190e-09 0s 0s 224245870e-09 1s 1s 224249310e-09 0s 0s 224251470e-09 0s 0s 224256110e-09 1s 1s 224259550e-09 0s 0s 224261750e-09 0s 0s 224266350e-09 1s 1s 224269790e-09 0s 0s 224272030e-09 0s 0s 224276590e-09 1s 1s 224280030e-09 0s 0s 224282310e-09 0s 0s 224286830e-09 1s 1s 224290270e-09 0s 0s 224292590e-09 0s 0s 224297070e-09 1s 1s 224300510e-09 0s 0s 224302870e-09 0s 0s 224307310e-09 1s 1s 224310750e-09 0s 0s 224313150e-09 0s 0s 224317550e-09 1s 1s 224320990e-09 0s 0s 224323430e-09 0s 0s 224327790e-09 1s 1s 224331230e-09 0s 0s 224333710e-09 0s 0s 224338030e-09 1s 1s 224341470e-09 0s 0s 224343990e-09 0s 0s 224348270e-09 1s 1s 224351710e-09 0s 0s 224354270e-09 0s 0s 224358510e-09 1s 1s 224361950e-09 0s 0s 224364550e-09 0s 0s 224368750e-09 1s 1s 224372190e-09 0s 0s 224374830e-09 0s 0s 224378990e-09 1s 1s 224382430e-09 0s 0s 224385110e-09 0s 0s 224389230e-09 1s 1s 224392670e-09 0s 0s 224395390e-09 0s 0s 224399470e-09 1s 1s 224402910e-09 0s 0s 224405670e-09 0s 0s 224409710e-09 1s 1s 224413150e-09 0s 0s 224415950e-09 0s 0s 224419950e-09 1s 1s 224423390e-09 0s 0s 224426230e-09 0s 0s 224430190e-09 1s 1s 224433630e-09 0s 0s 224436510e-09 0s 0s 224440430e-09 1s 1s 224443870e-09 0s 0s 224446790e-09 0s 0s 224450670e-09 1s 1s 224454110e-09 0s 0s 224457070e-09 0s 0s 224460910e-09 1s 1s 224464350e-09 0s 0s 224467350e-09 0s 0s 224471150e-09 1s 1s 224474590e-09 0s 0s 224477630e-09 0s 0s 224481390e-09 1s 1s 224484830e-09 0s 0s 224487910e-09 0s 0s 224491630e-09 1s 1s 224495070e-09 0s 0s 224498190e-09 0s 0s 224501870e-09 1s 1s 224505310e-09 0s 0s 224508470e-09 0s 0s 224512110e-09 1s 1s 224515550e-09 0s 0s 224518750e-09 0s 0s 224522350e-09 1s 1s 224525790e-09 0s 0s 224529030e-09 0s 0s 224532590e-09 1s 1s 224536030e-09 0s 0s 224539310e-09 0s 0s 224542830e-09 1s 1s 224546270e-09 0s 0s 224549590e-09 0s 0s 224553070e-09 1s 1s 224556510e-09 0s 0s 224559870e-09 0s 0s 224563310e-09 1s 1s 224566750e-09 0s 0s 224570150e-09 0s 0s 224573550e-09 1s 1s 224576990e-09 0s 0s 224580430e-09 0s 0s 224583790e-09 1s 1s 224587230e-09 0s 0s 224590710e-09 0s 0s 224594030e-09 1s 1s 224597470e-09 0s 0s 224600990e-09 0s 0s 224604270e-09 1s 1s 224607710e-09 0s 0s 224611270e-09 0s 0s 224614510e-09 1s 1s 224617950e-09 0s 0s 224621550e-09 0s 0s 224624750e-09 1s 1s 224628190e-09 0s 0s 224631830e-09 0s 0s 224634990e-09 1s 1s 224638430e-09 0s 0s 224642110e-09 0s 0s 224645230e-09 1s 1s 224648670e-09 0s 0s 224652390e-09 0s 0s 224655470e-09 1s 1s 224658910e-09 0s 0s 224662670e-09 0s 0s 224665710e-09 1s 1s 224669150e-09 0s 0s 224672950e-09 0s 0s 224675950e-09 1s 1s 224679390e-09 0s 0s 224683230e-09 0s 0s 224686190e-09 1s 1s 224689630e-09 0s 0s 224693510e-09 0s 0s 224696430e-09 1s 1s 224699870e-09 0s 0s 224703790e-09 0s 0s 224706670e-09 1s 1s 224710110e-09 0s 0s 224714070e-09 0s 0s 224716910e-09 1s 1s 224720350e-09 0s 0s 224724350e-09 0s 0s 224727150e-09 1s 1s 224730590e-09 0s 0s 224734630e-09 0s 0s 224737390e-09 1s 1s 224740830e-09 0s 0s 224744910e-09 0s 0s 224747630e-09 1s 1s 224751070e-09 0s 0s 224755190e-09 0s 0s 224757870e-09 1s 1s 224761310e-09 0s 0s 224765470e-09 0s 0s 224768110e-09 1s 1s 224771550e-09 0s 0s 224775750e-09 0s 0s 224778350e-09 1s 1s 224781790e-09 0s 0s 224786030e-09 0s 0s 224788590e-09 1s 1s 224792030e-09 0s 0s 224796310e-09 0s 0s 224798830e-09 1s 1s 224802270e-09 0s 0s 224806590e-09 0s 0s 224809070e-09 1s 1s 224812510e-09 0s 0s 224816870e-09 0s 0s 224819310e-09 1s 1s 224822750e-09 0s 0s 224827150e-09 0s 0s 224829550e-09 1s 1s 224832990e-09 0s 0s 224837430e-09 0s 0s 224839790e-09 1s 1s 224843230e-09 0s 0s 224847710e-09 0s 0s 224850030e-09 1s 1s 224853470e-09 0s 0s 224857990e-09 0s 0s 224860270e-09 1s 1s 224863710e-09 0s 0s 224868270e-09 0s 0s 224870510e-09 1s 1s 224873950e-09 0s 0s 224878550e-09 0s 0s 224880750e-09 1s 1s 224884190e-09 0s 0s 224888830e-09 0s 0s 224890990e-09 1s 1s 224894430e-09 0s 0s 224899110e-09 0s 0s 224901230e-09 1s 1s 224904670e-09 0s 0s 224909390e-09 0s 0s 224911470e-09 1s 1s 224914910e-09 0s 0s 224919670e-09 0s 0s 224921710e-09 1s 1s 224925150e-09 0s 0s 224929950e-09 0s 0s 224931950e-09 1s 1s 224935390e-09 0s 0s 224940230e-09 0s 0s 224942190e-09 1s 1s 224945630e-09 0s 0s 224950510e-09 0s 0s 224952430e-09 1s 1s 224955870e-09 0s 0s 224960790e-09 0s 0s 224962670e-09 1s 1s 224966110e-09 0s 0s 224971070e-09 0s 0s 224972910e-09 1s 1s 224976350e-09 0s 0s 224981350e-09 0s 0s 224983150e-09 1s 1s 224986590e-09 0s 0s 224991630e-09 0s 0s 224993390e-09 1s 1s 224996830e-09 0s 0s 225001910e-09 0s 0s 225003630e-09 1s 1s 225007070e-09 0s 0s 225012190e-09 0s 0s 225013870e-09 1s 1s 225017310e-09 0s 0s 225022470e-09 0s 0s 225024110e-09 1s 1s 225027550e-09 0s 0s 225032750e-09 0s 0s 225034350e-09 1s 1s 225037790e-09 0s 0s 225043030e-09 0s 0s 225044590e-09 1s 1s 225048030e-09 0s 0s 225053310e-09 0s 0s 225054830e-09 1s 1s 225058270e-09 0s 0s 225063590e-09 0s 0s 225065070e-09 1s 1s 225068510e-09 0s 0s 225073870e-09 0s 0s 225075310e-09 1s 1s 225078750e-09 0s 0s 225084150e-09 0s 0s 225085550e-09 1s 1s 225088990e-09 0s 0s 225094430e-09 0s 0s 225095790e-09 1s 1s 225099230e-09 0s 0s 225104710e-09 0s 0s 225106030e-09 1s 1s 225109470e-09 0s 0s 225114990e-09 0s 0s 225116270e-09 1s 1s 225119710e-09 0s 0s 225125270e-09 0s 0s 225126510e-09 1s 1s 225129950e-09 0s 0s 225135550e-09 0s 0s 225136750e-09 1s 1s 225140190e-09 0s 0s 225145830e-09 0s 0s 225146990e-09 1s 1s 225150430e-09 0s 0s 225156110e-09 0s 0s 225157230e-09 1s 1s 225160670e-09 0s 0s 225166390e-09 0s 0s 225167470e-09 1s 1s 225170910e-09 0s 0s 225176670e-09 0s 0s 225177710e-09 1s 1s 225181150e-09 0s 0s 225186950e-09 0s 0s 225187950e-09 1s 1s 225191390e-09 0s 0s 225197230e-09 0s 0s 225198190e-09 1s 1s 225201630e-09 0s 0s 225207510e-09 0s 0s 225208430e-09 1s 1s 225211870e-09 0s 0s 225217790e-09 0s 0s 225218670e-09 1s 1s 225222110e-09 0s 0s 225228070e-09 0s 0s 225228910e-09 1s 1s 225232350e-09 0s 0s 225238350e-09 0s 0s 225239150e-09 1s 1s 225242590e-09 0s 0s 225248630e-09 0s 0s 225249390e-09 1s 1s 225252830e-09 0s 0s 225258910e-09 0s 0s 225259630e-09 1s 1s 225263070e-09 0s 0s 225269190e-09 0s 0s 225269870e-09 1s 1s 225273310e-09 0s 0s 225279470e-09 0s 0s 225280110e-09 1s 1s 225283550e-09 0s 0s 225289750e-09 0s 0s 225290350e-09 1s 1s 225293790e-09 0s 0s 225300030e-09 0s 0s 225300590e-09 1s 1s 225304030e-09 0s 0s 225310310e-09 0s 0s 225310830e-09 1s 1s 225314270e-09 0s 0s 225320590e-09 0s 0s 225321070e-09 1s 1s 225324510e-09 0s 0s 225330870e-09 0s 0s 225331310e-09 1s 1s 225334750e-09 0s 0s 225341150e-09 0s 0s 225341550e-09 1s 1s 225344990e-09 0s 0s 225351430e-09 0s 0s 225351790e-09 1s 1s 225355230e-09 0s 0s 225361710e-09 0s 0s 225362030e-09 1s 1s 225365470e-09 0s 0s 225371990e-09 0s 0s 225372270e-09 1s 1s 225375710e-09 0s 0s 225382270e-09 0s 0s 225382510e-09 1s 1s 225385950e-09 0s 0s 225392550e-09 0s 0s 225392750e-09 1s 1s 225396190e-09 0s 0s 225402830e-09 0s 0s 225402990e-09 1s 1s 225406430e-09 0s 0s 225413110e-09 0s 0s 225413230e-09 1s 1s 225416670e-09 0s 0s 225423390e-09 0s 0s 225423470e-09 1s 1s 225426910e-09 0s 0s 225433670e-09 0s 0s 225433710e-09 1s 1s 225437150e-09 0s 0s 225443950e-09 1s 1s 225443990e-09 1s 1s 225447430e-09 0s 0s 225454190e-09 1s 1s 225454270e-09 1s 1s 225457670e-09 0s 0s 225464430e-09 1s 1s 225464550e-09 1s 1s 225467910e-09 0s 0s 225474670e-09 1s 1s 225474830e-09 1s 1s 225478150e-09 0s 0s 225484910e-09 1s 1s 225485110e-09 1s 1s 225488390e-09 0s 0s 225495150e-09 1s 1s 225495390e-09 1s 1s 225498630e-09 0s 0s 225505390e-09 1s 1s 225505670e-09 1s 1s 225508870e-09 0s 0s 225515630e-09 1s 1s 225515950e-09 1s 1s 225519110e-09 0s 0s 225525870e-09 1s 1s 225526230e-09 1s 1s 225529350e-09 0s 0s 225536110e-09 1s 1s 225536510e-09 1s 1s 225539590e-09 0s 0s 225546350e-09 1s 1s 225546790e-09 1s 1s 225549830e-09 0s 0s 225556590e-09 1s 1s 225557070e-09 1s 1s 225560070e-09 0s 0s 225566830e-09 1s 1s 225567350e-09 1s 1s 225570310e-09 0s 0s 225577070e-09 1s 1s 225577630e-09 1s 1s 225580550e-09 0s 0s 225587310e-09 1s 1s 225587910e-09 1s 1s 225590790e-09 0s 0s 225597550e-09 1s 1s 225598190e-09 1s 1s 225601030e-09 0s 0s 225607790e-09 1s 1s 225608470e-09 1s 1s 225611270e-09 0s 0s 225618030e-09 1s 1s 225618750e-09 1s 1s 225621510e-09 0s 0s 225628270e-09 1s 1s 225629030e-09 1s 1s 225631750e-09 0s 0s 225638510e-09 1s 1s 225639310e-09 1s 1s 225641990e-09 0s 0s 225648750e-09 1s 1s 225649590e-09 1s 1s 225652230e-09 0s 0s 225658990e-09 1s 1s 225659870e-09 1s 1s 225662470e-09 0s 0s 225669230e-09 1s 1s 225670150e-09 1s 1s 225672710e-09 0s 0s 225679470e-09 1s 1s 225680430e-09 1s 1s 225682950e-09 0s 0s 225689710e-09 1s 1s 225690710e-09 1s 1s 225693190e-09 0s 0s 225699950e-09 1s 1s 225700990e-09 1s 1s 225703430e-09 0s 0s 225710190e-09 1s 1s 225711270e-09 1s 1s 225713670e-09 0s 0s 225720430e-09 1s 1s 225721550e-09 1s 1s 225723910e-09 0s 0s 225730670e-09 1s 1s 225731830e-09 1s 1s 225734150e-09 0s 0s 225740910e-09 1s 1s 225742110e-09 1s 1s 225744390e-09 0s 0s 225751150e-09 1s 1s 225752390e-09 1s 1s 225754630e-09 0s 0s 225761390e-09 1s 1s 225762670e-09 1s 1s 225764870e-09 0s 0s 225771630e-09 1s 1s 225772950e-09 1s 1s 225775110e-09 0s 0s 225781870e-09 1s 1s 225783230e-09 1s 1s 225785350e-09 0s 0s 225792110e-09 1s 1s 225793510e-09 1s 1s 225795590e-09 0s 0s 225802350e-09 1s 1s 225803790e-09 1s 1s 225805830e-09 0s 0s 225812590e-09 1s 1s 225814070e-09 1s 1s 225816070e-09 0s 0s 225822830e-09 1s 1s 225824350e-09 1s 1s 225826310e-09 0s 0s 225833070e-09 1s 1s 225834630e-09 1s 1s 225836550e-09 0s 0s 225843310e-09 1s 1s 225844910e-09 1s 1s 225846790e-09 0s 0s 225853550e-09 1s 1s 225855190e-09 1s 1s 225857030e-09 0s 0s 225863790e-09 1s 1s 225865470e-09 1s 1s 225867270e-09 0s 0s 225874030e-09 1s 1s 225875750e-09 1s 1s 225877510e-09 0s 0s 225884270e-09 1s 1s 225886030e-09 1s 1s 225887750e-09 0s 0s 225894510e-09 1s 1s 225896310e-09 1s 1s 225897990e-09 0s 0s 225904750e-09 1s 1s 225906590e-09 1s 1s 225908230e-09 0s 0s 225914990e-09 1s 1s 225916870e-09 1s 1s 225918470e-09 0s 0s 225925230e-09 1s 1s 225927150e-09 1s 1s 225928710e-09 0s 0s 225935470e-09 1s 1s 225937430e-09 1s 1s 225938950e-09 0s 0s 225945710e-09 1s 1s 225947710e-09 1s 1s 225949190e-09 0s 0s 225955950e-09 1s 1s 225957990e-09 1s 1s 225959430e-09 0s 0s 225966190e-09 1s 1s 225968270e-09 1s 1s 225969670e-09 0s 0s 225976430e-09 1s 1s 225978550e-09 1s 1s 225979910e-09 0s 0s 225986670e-09 1s 1s 225988830e-09 1s 1s 225990150e-09 0s 0s 225996910e-09 1s 1s 225999110e-09 1s 1s 226000390e-09 0s 0s 226007150e-09 1s 1s 226009390e-09 1s 1s 226010630e-09 0s 0s 226017390e-09 1s 1s 226019670e-09 1s 1s 226020870e-09 0s 0s 226027630e-09 1s 1s 226029950e-09 1s 1s 226031110e-09 0s 0s 226037870e-09 1s 1s 226040230e-09 1s 1s 226041350e-09 0s 0s 226048110e-09 1s 1s 226050510e-09 1s 1s 226051590e-09 0s 0s 226058350e-09 1s 1s 226060790e-09 1s 1s 226061830e-09 0s 0s 226068590e-09 1s 1s 226071070e-09 1s 1s 226072070e-09 0s 0s 226078830e-09 1s 1s 226081350e-09 1s 1s 226082310e-09 0s 0s 226089070e-09 1s 1s 226091630e-09 1s 1s 226092550e-09 0s 0s 226099310e-09 1s 1s 226101910e-09 1s 1s 226102790e-09 0s 0s 226109550e-09 1s 1s 226112190e-09 1s 1s 226113030e-09 0s 0s 226119790e-09 1s 1s 226122470e-09 1s 1s 226123270e-09 0s 0s 226130030e-09 1s 1s 226132750e-09 1s 1s 226133510e-09 0s 0s 226140270e-09 1s 1s 226143030e-09 1s 1s 226143750e-09 0s 0s 226150510e-09 1s 1s 226153310e-09 1s 1s 226153990e-09 0s 0s 226160750e-09 1s 1s 226163590e-09 1s 1s 226164230e-09 0s 0s 226170990e-09 1s 1s 226173870e-09 1s 1s 226174470e-09 0s 0s 226181230e-09 1s 1s 226184150e-09 1s 1s 226184710e-09 0s 0s 226191470e-09 1s 1s 226194430e-09 1s 1s 226194950e-09 0s 0s 226201710e-09 1s 1s 226204710e-09 1s 1s 226205190e-09 0s 0s 226211950e-09 1s 1s 226214990e-09 1s 1s 226215430e-09 0s 0s 226222190e-09 1s 1s 226225270e-09 1s 1s 226225670e-09 0s 0s 226232430e-09 1s 1s 226235550e-09 1s 1s 226235910e-09 0s 0s 226242670e-09 1s 1s 226245830e-09 1s 1s 226246150e-09 0s 0s 226252910e-09 1s 1s 226256110e-09 1s 1s 226256390e-09 0s 0s 226263150e-09 1s 1s 226266390e-09 1s 1s 226266630e-09 0s 0s 226273390e-09 1s 1s 226276670e-09 1s 1s 226276870e-09 0s 0s 226283630e-09 1s 1s 226286950e-09 1s 1s 226287110e-09 0s 0s 226293870e-09 1s 1s 226297230e-09 1s 1s 226297350e-09 0s 0s 226304110e-09 1s 1s 226307510e-09 1s 1s 226307590e-09 0s 0s 226314350e-09 1s 1s 226317790e-09 1s 1s 226317830e-09 0s 0s 226324590e-09 1s 1s 226328070e-09 0s 0s 226334830e-09 1s 1s 226338310e-09 0s 0s 226338350e-09 0s 0s 226345070e-09 1s 1s 226348550e-09 0s 0s 226348630e-09 0s 0s 226355310e-09 1s 1s 226358790e-09 0s 0s 226358910e-09 0s 0s 226365550e-09 1s 1s 226369030e-09 0s 0s 226369190e-09 0s 0s 226375790e-09 1s 1s 226379270e-09 0s 0s 226379470e-09 0s 0s 226386030e-09 1s 1s 226389510e-09 0s 0s 226389750e-09 0s 0s 226396270e-09 1s 1s 226399750e-09 0s 0s 226400030e-09 0s 0s 226406510e-09 1s 1s 226409990e-09 0s 0s 226410310e-09 0s 0s 226416750e-09 1s 1s 226420230e-09 0s 0s 226420590e-09 0s 0s 226426990e-09 1s 1s 226430470e-09 0s 0s 226430870e-09 0s 0s 226437230e-09 1s 1s 226440710e-09 0s 0s 226441150e-09 0s 0s 226447470e-09 1s 1s 226450950e-09 0s 0s 226451430e-09 0s 0s 226457710e-09 1s 1s 226461190e-09 0s 0s 226461710e-09 0s 0s 226467950e-09 1s 1s 226471430e-09 0s 0s 226471990e-09 0s 0s 226478190e-09 1s 1s 226481670e-09 0s 0s 226482270e-09 0s 0s 226488430e-09 1s 1s 226491910e-09 0s 0s 226492550e-09 0s 0s 226498670e-09 1s 1s 226502150e-09 0s 0s 226502830e-09 0s 0s 226508910e-09 1s 1s 226512390e-09 0s 0s 226513110e-09 0s 0s 226519150e-09 1s 1s 226522630e-09 0s 0s 226523390e-09 0s 0s 226529390e-09 1s 1s 226532870e-09 0s 0s 226533670e-09 0s 0s 226539630e-09 1s 1s 226543110e-09 0s 0s 226543950e-09 0s 0s 226549870e-09 1s 1s 226553350e-09 0s 0s 226554230e-09 0s 0s 226560110e-09 1s 1s 226563590e-09 0s 0s 226564510e-09 0s 0s 226570350e-09 1s 1s 226573830e-09 0s 0s 226574790e-09 0s 0s 226580590e-09 1s 1s 226584070e-09 0s 0s 226585070e-09 0s 0s 226590830e-09 1s 1s 226594310e-09 0s 0s 226595350e-09 0s 0s 226601070e-09 1s 1s 226604550e-09 0s 0s 226605630e-09 0s 0s 226611310e-09 1s 1s 226614790e-09 0s 0s 226615910e-09 0s 0s 226621550e-09 1s 1s 226625030e-09 0s 0s 226626190e-09 0s 0s 226631790e-09 1s 1s 226635270e-09 0s 0s 226636470e-09 0s 0s 226642030e-09 1s 1s 226645510e-09 0s 0s 226646750e-09 0s 0s 226652270e-09 1s 1s 226655750e-09 0s 0s 226657030e-09 0s 0s 226662510e-09 1s 1s 226665990e-09 0s 0s 226667310e-09 0s 0s 226672750e-09 1s 1s 226676230e-09 0s 0s 226677590e-09 0s 0s 226682990e-09 1s 1s 226686470e-09 0s 0s 226687870e-09 0s 0s 226693230e-09 1s 1s 226696710e-09 0s 0s 226698150e-09 0s 0s 226703470e-09 1s 1s 226706950e-09 0s 0s 226708430e-09 0s 0s 226713710e-09 1s 1s 226717190e-09 0s 0s 226718710e-09 0s 0s 226723950e-09 1s 1s 226727430e-09 0s 0s 226728990e-09 0s 0s 226734190e-09 1s 1s 226737670e-09 0s 0s 226739270e-09 0s 0s 226744430e-09 1s 1s 226747910e-09 0s 0s 226749550e-09 0s 0s 226754670e-09 1s 1s 226758150e-09 0s 0s 226759830e-09 0s 0s 226764910e-09 1s 1s 226768390e-09 0s 0s 226770110e-09 0s 0s 226775150e-09 1s 1s 226778630e-09 0s 0s 226780390e-09 0s 0s 226785390e-09 1s 1s 226788870e-09 0s 0s 226790670e-09 0s 0s 226795630e-09 1s 1s 226799110e-09 0s 0s 226800950e-09 0s 0s 226805870e-09 1s 1s 226809350e-09 0s 0s 226811230e-09 0s 0s 226816110e-09 1s 1s 226819590e-09 0s 0s 226821510e-09 0s 0s 226826350e-09 1s 1s 226829830e-09 0s 0s 226831790e-09 0s 0s 226836590e-09 1s 1s 226840070e-09 0s 0s 226842070e-09 0s 0s 226846830e-09 1s 1s 226850310e-09 0s 0s 226852350e-09 0s 0s 226857070e-09 1s 1s 226860550e-09 0s 0s 226862630e-09 0s 0s 226867310e-09 1s 1s 226870790e-09 0s 0s 226872910e-09 0s 0s 226877550e-09 1s 1s 226881030e-09 0s 0s 226883190e-09 0s 0s 226887790e-09 1s 1s 226891270e-09 0s 0s 226893470e-09 0s 0s 226898030e-09 1s 1s 226901510e-09 0s 0s 226903750e-09 0s 0s 226908270e-09 1s 1s 226911750e-09 0s 0s 226914030e-09 0s 0s 226918510e-09 1s 1s 226921990e-09 0s 0s 226924310e-09 0s 0s 226928750e-09 1s 1s 226932230e-09 0s 0s 226934590e-09 0s 0s 226938990e-09 1s 1s 226942470e-09 0s 0s 226944870e-09 0s 0s 226949230e-09 1s 1s 226952710e-09 0s 0s 226955150e-09 0s 0s 226959470e-09 1s 1s 226962950e-09 0s 0s 226965430e-09 0s 0s 226969710e-09 1s 1s 226973190e-09 0s 0s 226975710e-09 0s 0s 226979950e-09 1s 1s 226983430e-09 0s 0s 226985990e-09 0s 0s 226990190e-09 1s 1s 226993670e-09 0s 0s 226996270e-09 0s 0s 227000430e-09 1s 1s 227003910e-09 0s 0s 227006550e-09 0s 0s 227010670e-09 1s 1s 227014150e-09 0s 0s 227016830e-09 0s 0s 227020910e-09 1s 1s 227024390e-09 0s 0s 227027110e-09 0s 0s 227031150e-09 1s 1s 227034630e-09 0s 0s 227037390e-09 0s 0s 227041390e-09 1s 1s 227044870e-09 0s 0s 227047670e-09 0s 0s 227051630e-09 1s 1s 227055110e-09 0s 0s 227057950e-09 0s 0s 227061870e-09 1s 1s 227065350e-09 0s 0s 227068230e-09 0s 0s 227072110e-09 1s 1s 227075590e-09 0s 0s 227078510e-09 0s 0s 227082350e-09 1s 1s 227085830e-09 0s 0s 227088790e-09 0s 0s 227092590e-09 1s 1s 227096070e-09 0s 0s 227099070e-09 0s 0s 227102830e-09 1s 1s 227106310e-09 0s 0s 227109350e-09 0s 0s 227113070e-09 1s 1s 227116550e-09 0s 0s 227119630e-09 0s 0s 227123310e-09 1s 1s 227126790e-09 0s 0s 227129910e-09 0s 0s 227133550e-09 1s 1s 227137030e-09 0s 0s 227140190e-09 0s 0s 227143790e-09 1s 1s 227147270e-09 0s 0s 227150470e-09 0s 0s 227154030e-09 1s 1s 227157510e-09 0s 0s 227160750e-09 0s 0s 227164270e-09 1s 1s 227167750e-09 0s 0s 227171030e-09 0s 0s 227174510e-09 1s 1s 227177990e-09 0s 0s 227181310e-09 0s 0s 227184750e-09 1s 1s 227188230e-09 0s 0s 227191590e-09 0s 0s 227194990e-09 1s 1s 227198470e-09 0s 0s 227201870e-09 0s 0s 227205230e-09 1s 1s 227208710e-09 0s 0s 227212150e-09 0s 0s 227215470e-09 1s 1s 227218950e-09 0s 0s 227222430e-09 0s 0s 227225710e-09 1s 1s 227229190e-09 0s 0s 227232710e-09 0s 0s 227235950e-09 1s 1s 227239430e-09 0s 0s 227242990e-09 0s 0s 227246190e-09 1s 1s 227249670e-09 0s 0s 227253270e-09 0s 0s 227256430e-09 1s 1s 227259910e-09 0s 0s 227263550e-09 0s 0s 227266670e-09 1s 1s 227270150e-09 0s 0s 227273830e-09 0s 0s 227276910e-09 1s 1s 227280390e-09 0s 0s 227284110e-09 0s 0s 227287150e-09 1s 1s 227290630e-09 0s 0s 227294390e-09 0s 0s 227297390e-09 1s 1s 227300870e-09 0s 0s 227304670e-09 0s 0s 227307630e-09 1s 1s 227311110e-09 0s 0s 227314950e-09 0s 0s 227317870e-09 1s 1s 227321350e-09 0s 0s 227325230e-09 0s 0s 227328110e-09 1s 1s 227331590e-09 0s 0s 227335510e-09 0s 0s 227338350e-09 1s 1s 227341830e-09 0s 0s 227345790e-09 0s 0s 227348590e-09 1s 1s 227352070e-09 0s 0s 227356070e-09 0s 0s 227358830e-09 1s 1s 227362310e-09 0s 0s 227366350e-09 0s 0s 227369070e-09 1s 1s 227372550e-09 0s 0s 227376630e-09 0s 0s 227379310e-09 1s 1s 227382790e-09 0s 0s 227386910e-09 0s 0s 227389550e-09 1s 1s 227393030e-09 0s 0s 227397190e-09 0s 0s 227399790e-09 1s 1s 227403270e-09 0s 0s 227407470e-09 0s 0s 227410030e-09 1s 1s 227413510e-09 0s 0s 227417750e-09 0s 0s 227420270e-09 1s 1s 227423750e-09 0s 0s 227428030e-09 0s 0s 227430510e-09 1s 1s 227433990e-09 0s 0s 227438310e-09 0s 0s 227440750e-09 1s 1s 227444230e-09 0s 0s 227448590e-09 0s 0s 227450990e-09 1s 1s 227454470e-09 0s 0s 227458870e-09 0s 0s 227461230e-09 1s 1s 227464710e-09 0s 0s 227469150e-09 0s 0s 227471470e-09 1s 1s 227474950e-09 0s 0s 227479430e-09 0s 0s 227481710e-09 1s 1s 227485190e-09 0s 0s 227489710e-09 0s 0s 227491950e-09 1s 1s 227495430e-09 0s 0s 227499990e-09 0s 0s 227502190e-09 1s 1s 227505670e-09 0s 0s 227510270e-09 0s 0s 227512430e-09 1s 1s 227515910e-09 0s 0s 227520550e-09 0s 0s 227522670e-09 1s 1s 227526150e-09 0s 0s 227530830e-09 0s 0s 227532910e-09 1s 1s 227536390e-09 0s 0s 227541110e-09 0s 0s 227543150e-09 1s 1s 227546630e-09 0s 0s 227551390e-09 0s 0s 227553390e-09 1s 1s 227556870e-09 0s 0s 227561670e-09 0s 0s 227563630e-09 1s 1s 227567110e-09 0s 0s 227571950e-09 0s 0s 227573870e-09 1s 1s 227577350e-09 0s 0s 227582230e-09 0s 0s 227584110e-09 1s 1s 227587590e-09 0s 0s 227592510e-09 0s 0s 227594350e-09 1s 1s 227597830e-09 0s 0s 227602790e-09 0s 0s 227604590e-09 1s 1s 227608070e-09 0s 0s 227613070e-09 0s 0s 227614830e-09 1s 1s 227618310e-09 0s 0s 227623350e-09 0s 0s 227625070e-09 1s 1s 227628550e-09 0s 0s 227633630e-09 0s 0s 227635310e-09 1s 1s 227638790e-09 0s 0s 227643910e-09 0s 0s 227645550e-09 1s 1s 227649030e-09 0s 0s 227654190e-09 0s 0s 227655790e-09 1s 1s 227659270e-09 0s 0s 227664470e-09 0s 0s 227666030e-09 1s 1s 227669510e-09 0s 0s 227674750e-09 0s 0s 227676270e-09 1s 1s 227679750e-09 0s 0s 227685030e-09 0s 0s 227686510e-09 1s 1s 227689990e-09 0s 0s 227695310e-09 0s 0s 227696750e-09 1s 1s 227700230e-09 0s 0s 227705590e-09 0s 0s 227706990e-09 1s 1s 227710470e-09 0s 0s 227715870e-09 0s 0s 227717230e-09 1s 1s 227720710e-09 0s 0s 227726150e-09 0s 0s 227727470e-09 1s 1s 227730950e-09 0s 0s 227736430e-09 0s 0s 227737710e-09 1s 1s 227741190e-09 0s 0s 227746710e-09 0s 0s 227747950e-09 1s 1s 227751430e-09 0s 0s 227756990e-09 0s 0s 227758190e-09 1s 1s 227761670e-09 0s 0s 227767270e-09 0s 0s 227768430e-09 1s 1s 227771910e-09 0s 0s 227777550e-09 0s 0s 227778670e-09 1s 1s 227782150e-09 0s 0s 227787830e-09 0s 0s 227788910e-09 1s 1s 227792390e-09 0s 0s 227798110e-09 0s 0s 227799150e-09 1s 1s 227802630e-09 0s 0s 227808390e-09 0s 0s 227809390e-09 1s 1s 227812870e-09 0s 0s 227818670e-09 0s 0s 227819630e-09 1s 1s 227823110e-09 0s 0s 227828950e-09 0s 0s 227829870e-09 1s 1s 227833350e-09 0s 0s 227839230e-09 0s 0s 227840110e-09 1s 1s 227843590e-09 0s 0s 227849510e-09 0s 0s 227850350e-09 1s 1s 227853830e-09 0s 0s 227859790e-09 0s 0s 227860590e-09 1s 1s 227864070e-09 0s 0s 227870070e-09 0s 0s 227870830e-09 1s 1s 227874310e-09 0s 0s 227880350e-09 0s 0s 227881070e-09 1s 1s 227884550e-09 0s 0s 227890630e-09 0s 0s 227891310e-09 1s 1s 227894790e-09 0s 0s 227900910e-09 0s 0s 227901550e-09 1s 1s 227905030e-09 0s 0s 227911190e-09 0s 0s 227911790e-09 1s 1s 227915270e-09 0s 0s 227921470e-09 0s 0s 227922030e-09 1s 1s 227925510e-09 0s 0s 227931750e-09 0s 0s 227932270e-09 1s 1s 227935750e-09 0s 0s 227942030e-09 0s 0s 227942510e-09 1s 1s 227945990e-09 0s 0s 227952310e-09 0s 0s 227952750e-09 1s 1s 227956230e-09 0s 0s 227962590e-09 0s 0s 227962990e-09 1s 1s 227966470e-09 0s 0s 227972870e-09 0s 0s 227973230e-09 1s 1s 227976710e-09 0s 0s 227983150e-09 0s 0s 227983470e-09 1s 1s 227986950e-09 0s 0s 227993430e-09 0s 0s 227993710e-09 1s 1s 227997190e-09 0s 0s 228003710e-09 0s 0s 228003950e-09 1s 1s 228007430e-09 0s 0s 228013990e-09 0s 0s 228014190e-09 1s 1s 228017670e-09 0s 0s 228024270e-09 0s 0s 228024430e-09 1s 1s 228027910e-09 0s 0s 228034550e-09 0s 0s 228034670e-09 1s 1s 228038150e-09 0s 0s 228044830e-09 0s 0s 228044910e-09 1s 1s 228048390e-09 0s 0s 228055110e-09 0s 0s 228055150e-09 1s 1s 228058630e-09 0s 0s 228065390e-09 1s 1s 228065430e-09 1s 1s 228068910e-09 0s 0s 228075630e-09 1s 1s 228075710e-09 1s 1s 228079150e-09 0s 0s 228085870e-09 1s 1s 228085990e-09 1s 1s 228089390e-09 0s 0s 228096110e-09 1s 1s 228096270e-09 1s 1s 228099630e-09 0s 0s 228106350e-09 1s 1s 228106550e-09 1s 1s 228109870e-09 0s 0s 228116590e-09 1s 1s 228116830e-09 1s 1s 228120110e-09 0s 0s 228126830e-09 1s 1s 228127110e-09 1s 1s 228130350e-09 0s 0s 228137070e-09 1s 1s 228137390e-09 1s 1s 228140590e-09 0s 0s 228147310e-09 1s 1s 228147670e-09 1s 1s 228150830e-09 0s 0s 228157550e-09 1s 1s 228157950e-09 1s 1s 228161070e-09 0s 0s 228167790e-09 1s 1s 228168230e-09 1s 1s 228171310e-09 0s 0s 228178030e-09 1s 1s 228178510e-09 1s 1s 228181550e-09 0s 0s 228188270e-09 1s 1s 228188790e-09 1s 1s 228191790e-09 0s 0s 228198510e-09 1s 1s 228199070e-09 1s 1s 228202030e-09 0s 0s 228208750e-09 1s 1s 228209350e-09 1s 1s 228212270e-09 0s 0s 228218990e-09 1s 1s 228219630e-09 1s 1s 228222510e-09 0s 0s 228229230e-09 1s 1s 228229910e-09 1s 1s 228232750e-09 0s 0s 228239470e-09 1s 1s 228240190e-09 1s 1s 228242990e-09 0s 0s 228249710e-09 1s 1s 228250470e-09 1s 1s 228253230e-09 0s 0s 228259950e-09 1s 1s 228260750e-09 1s 1s 228263470e-09 0s 0s 228270190e-09 1s 1s 228271030e-09 1s 1s 228273710e-09 0s 0s 228280430e-09 1s 1s 228281310e-09 1s 1s 228283950e-09 0s 0s 228290670e-09 1s 1s 228291590e-09 1s 1s 228294190e-09 0s 0s 228300910e-09 1s 1s 228301870e-09 1s 1s 228304430e-09 0s 0s 228311150e-09 1s 1s 228312150e-09 1s 1s 228314670e-09 0s 0s 228321390e-09 1s 1s 228322430e-09 1s 1s 228324910e-09 0s 0s 228331630e-09 1s 1s 228332710e-09 1s 1s 228335150e-09 0s 0s 228341870e-09 1s 1s 228342990e-09 1s 1s 228345390e-09 0s 0s 228352110e-09 1s 1s 228353270e-09 1s 1s 228355630e-09 0s 0s 228362350e-09 1s 1s 228363550e-09 1s 1s 228365870e-09 0s 0s 228372590e-09 1s 1s 228373830e-09 1s 1s 228376110e-09 0s 0s 228382830e-09 1s 1s 228384110e-09 1s 1s 228386350e-09 0s 0s 228393070e-09 1s 1s 228394390e-09 1s 1s 228396590e-09 0s 0s 228403310e-09 1s 1s 228404670e-09 1s 1s 228406830e-09 0s 0s 228413550e-09 1s 1s 228414950e-09 1s 1s 228417070e-09 0s 0s 228423790e-09 1s 1s 228425230e-09 1s 1s 228427310e-09 0s 0s 228434030e-09 1s 1s 228435510e-09 1s 1s 228437550e-09 0s 0s 228444270e-09 1s 1s 228445790e-09 1s 1s 228447790e-09 0s 0s 228454510e-09 1s 1s 228456070e-09 1s 1s 228458030e-09 0s 0s 228464750e-09 1s 1s 228466350e-09 1s 1s 228468270e-09 0s 0s 228474990e-09 1s 1s 228476630e-09 1s 1s 228478510e-09 0s 0s 228485230e-09 1s 1s 228486910e-09 1s 1s 228488750e-09 0s 0s 228495470e-09 1s 1s 228497190e-09 1s 1s 228498990e-09 0s 0s 228505710e-09 1s 1s 228507470e-09 1s 1s 228509230e-09 0s 0s 228515950e-09 1s 1s 228517750e-09 1s 1s 228519470e-09 0s 0s 228526190e-09 1s 1s 228528030e-09 1s 1s 228529710e-09 0s 0s 228536430e-09 1s 1s 228538310e-09 1s 1s 228539950e-09 0s 0s 228546670e-09 1s 1s 228548590e-09 1s 1s 228550190e-09 0s 0s 228556910e-09 1s 1s 228558870e-09 1s 1s 228560430e-09 0s 0s 228567150e-09 1s 1s 228569150e-09 1s 1s 228570670e-09 0s 0s 228577390e-09 1s 1s 228579430e-09 1s 1s 228580910e-09 0s 0s 228587630e-09 1s 1s 228589710e-09 1s 1s 228591150e-09 0s 0s 228597870e-09 1s 1s 228599990e-09 1s 1s 228601390e-09 0s 0s 228608110e-09 1s 1s 228610270e-09 1s 1s 228611630e-09 0s 0s 228618350e-09 1s 1s 228620550e-09 1s 1s 228621870e-09 0s 0s 228628590e-09 1s 1s 228630830e-09 1s 1s 228632110e-09 0s 0s 228638830e-09 1s 1s 228641110e-09 1s 1s 228642350e-09 0s 0s 228649070e-09 1s 1s 228651390e-09 1s 1s 228652590e-09 0s 0s 228659310e-09 1s 1s 228661670e-09 1s 1s 228662830e-09 0s 0s 228669550e-09 1s 1s 228671950e-09 1s 1s 228673070e-09 0s 0s 228679790e-09 1s 1s 228682230e-09 1s 1s 228683310e-09 0s 0s 228690030e-09 1s 1s 228692510e-09 1s 1s 228693550e-09 0s 0s 228700270e-09 1s 1s 228702790e-09 1s 1s 228703790e-09 0s 0s 228710510e-09 1s 1s 228713070e-09 1s 1s 228714030e-09 0s 0s 228720750e-09 1s 1s 228723350e-09 1s 1s 228724270e-09 0s 0s 228730990e-09 1s 1s 228733630e-09 1s 1s 228734510e-09 0s 0s 228741230e-09 1s 1s 228743910e-09 1s 1s 228744750e-09 0s 0s 228751470e-09 1s 1s 228754190e-09 1s 1s 228754990e-09 0s 0s 228761710e-09 1s 1s 228764470e-09 1s 1s 228765230e-09 0s 0s 228771950e-09 1s 1s 228774750e-09 1s 1s 228775470e-09 0s 0s 228782190e-09 1s 1s 228785030e-09 1s 1s 228785710e-09 0s 0s 228792430e-09 1s 1s 228795310e-09 1s 1s 228795950e-09 0s 0s 228802670e-09 1s 1s 228805590e-09 1s 1s 228806190e-09 0s 0s 228812910e-09 1s 1s 228815870e-09 1s 1s 228816430e-09 0s 0s 228823150e-09 1s 1s 228826150e-09 1s 1s 228826670e-09 0s 0s 228833390e-09 1s 1s 228836430e-09 1s 1s 228836910e-09 0s 0s 228843630e-09 1s 1s 228846710e-09 1s 1s 228847150e-09 0s 0s 228853870e-09 1s 1s 228856990e-09 1s 1s 228857390e-09 0s 0s 228864110e-09 1s 1s 228867270e-09 1s 1s 228867630e-09 0s 0s 228874350e-09 1s 1s 228877550e-09 1s 1s 228877870e-09 0s 0s 228884590e-09 1s 1s 228887830e-09 1s 1s 228888110e-09 0s 0s 228894830e-09 1s 1s 228898110e-09 1s 1s 228898350e-09 0s 0s 228905070e-09 1s 1s 228908390e-09 1s 1s 228908590e-09 0s 0s 228915310e-09 1s 1s 228918670e-09 1s 1s 228918830e-09 0s 0s 228925550e-09 1s 1s 228928950e-09 1s 1s 228929070e-09 0s 0s 228935790e-09 1s 1s 228939230e-09 1s 1s 228939310e-09 0s 0s 228946030e-09 1s 1s 228949510e-09 1s 1s 228949550e-09 0s 0s 228956270e-09 1s 1s 228959790e-09 0s 0s 228966510e-09 1s 1s 228970030e-09 0s 0s 228970070e-09 0s 0s 228976750e-09 1s 1s 228980270e-09 0s 0s 228980350e-09 0s 0s 228986990e-09 1s 1s 228990510e-09 0s 0s 228990630e-09 0s 0s 228997230e-09 1s 1s 229000750e-09 0s 0s 229000910e-09 0s 0s 229007470e-09 1s 1s 229010990e-09 0s 0s 229011190e-09 0s 0s 229017710e-09 1s 1s 229021230e-09 0s 0s 229021470e-09 0s 0s 229027950e-09 1s 1s 229031470e-09 0s 0s 229031750e-09 0s 0s 229038190e-09 1s 1s 229041710e-09 0s 0s 229042030e-09 0s 0s 229048430e-09 1s 1s 229051950e-09 0s 0s 229052310e-09 0s 0s 229058670e-09 1s 1s 229062190e-09 0s 0s 229062590e-09 0s 0s 229068910e-09 1s 1s 229072430e-09 0s 0s 229072870e-09 0s 0s 229079150e-09 1s 1s 229082670e-09 0s 0s 229083150e-09 0s 0s 229089390e-09 1s 1s 229092910e-09 0s 0s 229093430e-09 0s 0s 229099630e-09 1s 1s 229103150e-09 0s 0s 229103710e-09 0s 0s 229109870e-09 1s 1s 229113390e-09 0s 0s 229113990e-09 0s 0s 229120110e-09 1s 1s 229123630e-09 0s 0s 229124270e-09 0s 0s 229130350e-09 1s 1s 229133870e-09 0s 0s 229134550e-09 0s 0s 229140590e-09 1s 1s 229144110e-09 0s 0s 229144830e-09 0s 0s 229150830e-09 1s 1s 229154350e-09 0s 0s 229155110e-09 0s 0s 229161070e-09 1s 1s 229164590e-09 0s 0s 229165390e-09 0s 0s 229171310e-09 1s 1s 229174830e-09 0s 0s 229175670e-09 0s 0s 229181550e-09 1s 1s 229185070e-09 0s 0s 229185950e-09 0s 0s 229191790e-09 1s 1s 229195310e-09 0s 0s 229196230e-09 0s 0s 229202030e-09 1s 1s 229205550e-09 0s 0s 229206510e-09 0s 0s 229212270e-09 1s 1s 229215790e-09 0s 0s 229216790e-09 0s 0s 229222510e-09 1s 1s 229226030e-09 0s 0s 229227070e-09 0s 0s 229232750e-09 1s 1s 229236270e-09 0s 0s 229237350e-09 0s 0s 229242990e-09 1s 1s 229246510e-09 0s 0s 229247630e-09 0s 0s 229253230e-09 1s 1s 229256750e-09 0s 0s 229257910e-09 0s 0s 229263470e-09 1s 1s 229266990e-09 0s 0s 229268190e-09 0s 0s 229273710e-09 1s 1s 229277230e-09 0s 0s 229278470e-09 0s 0s 229283950e-09 1s 1s 229287470e-09 0s 0s 229288750e-09 0s 0s 229294190e-09 1s 1s 229297710e-09 0s 0s 229299030e-09 0s 0s 229304430e-09 1s 1s 229307950e-09 0s 0s 229309310e-09 0s 0s 229314670e-09 1s 1s 229318190e-09 0s 0s 229319590e-09 0s 0s 229324910e-09 1s 1s 229328430e-09 0s 0s 229329870e-09 0s 0s 229335150e-09 1s 1s 229338670e-09 0s 0s 229340150e-09 0s 0s 229345390e-09 1s 1s 229348910e-09 0s 0s 229350430e-09 0s 0s 229355630e-09 1s 1s 229359150e-09 0s 0s 229360710e-09 0s 0s 229365870e-09 1s 1s 229369390e-09 0s 0s 229370990e-09 0s 0s 229376110e-09 1s 1s 229379630e-09 0s 0s 229381270e-09 0s 0s 229386350e-09 1s 1s 229389870e-09 0s 0s 229391550e-09 0s 0s 229396590e-09 1s 1s 229400110e-09 0s 0s 229401830e-09 0s 0s 229406830e-09 1s 1s 229410350e-09 0s 0s 229412110e-09 0s 0s 229417070e-09 1s 1s 229420590e-09 0s 0s 229422390e-09 0s 0s 229427310e-09 1s 1s 229430830e-09 0s 0s 229432670e-09 0s 0s 229437550e-09 1s 1s 229441070e-09 0s 0s 229442950e-09 0s 0s 229447790e-09 1s 1s 229451310e-09 0s 0s 229453230e-09 0s 0s 229458030e-09 1s 1s 229461550e-09 0s 0s 229463510e-09 0s 0s 229468270e-09 1s 1s 229471790e-09 0s 0s 229473790e-09 0s 0s 229478510e-09 1s 1s 229482030e-09 0s 0s 229484070e-09 0s 0s 229488750e-09 1s 1s 229492270e-09 0s 0s 229494350e-09 0s 0s 229498990e-09 1s 1s 229502510e-09 0s 0s 229504630e-09 0s 0s 229509230e-09 1s 1s 229512750e-09 0s 0s 229514910e-09 0s 0s 229519470e-09 1s 1s 229522990e-09 0s 0s 229525190e-09 0s 0s 229529710e-09 1s 1s 229533230e-09 0s 0s 229535470e-09 0s 0s 229539950e-09 1s 1s 229543470e-09 0s 0s 229545750e-09 0s 0s 229550190e-09 1s 1s 229553710e-09 0s 0s 229556030e-09 0s 0s 229560430e-09 1s 1s 229563950e-09 0s 0s 229566310e-09 0s 0s 229570670e-09 1s 1s 229574190e-09 0s 0s 229576590e-09 0s 0s 229580910e-09 1s 1s 229584430e-09 0s 0s 229586870e-09 0s 0s 229591150e-09 1s 1s 229594670e-09 0s 0s 229597150e-09 0s 0s 229601390e-09 1s 1s 229604910e-09 0s 0s 229607430e-09 0s 0s 229611630e-09 1s 1s 229615150e-09 0s 0s 229617710e-09 0s 0s 229621870e-09 1s 1s 229625390e-09 0s 0s 229627990e-09 0s 0s 229632110e-09 1s 1s 229635630e-09 0s 0s 229638270e-09 0s 0s 229642350e-09 1s 1s 229645870e-09 0s 0s 229648550e-09 0s 0s 229652590e-09 1s 1s 229656110e-09 0s 0s 229658830e-09 0s 0s 229662830e-09 1s 1s 229666350e-09 0s 0s 229669110e-09 0s 0s 229673070e-09 1s 1s 229676590e-09 0s 0s 229679390e-09 0s 0s 229683310e-09 1s 1s 229686830e-09 0s 0s 229689670e-09 0s 0s 229693550e-09 1s 1s 229697070e-09 0s 0s 229699950e-09 0s 0s 229703790e-09 1s 1s 229707310e-09 0s 0s 229710230e-09 0s 0s 229714030e-09 1s 1s 229717550e-09 0s 0s 229720510e-09 0s 0s 229724270e-09 1s 1s 229727790e-09 0s 0s 229730790e-09 0s 0s 229734510e-09 1s 1s 229738030e-09 0s 0s 229741070e-09 0s 0s 229744750e-09 1s 1s 229748270e-09 0s 0s 229751350e-09 0s 0s 229754990e-09 1s 1s 229758510e-09 0s 0s 229761630e-09 0s 0s 229765230e-09 1s 1s 229768750e-09 0s 0s 229771910e-09 0s 0s 229775470e-09 1s 1s 229778990e-09 0s 0s 229782190e-09 0s 0s 229785710e-09 1s 1s 229789230e-09 0s 0s 229792470e-09 0s 0s 229795950e-09 1s 1s 229799470e-09 0s 0s 229802750e-09 0s 0s 229806190e-09 1s 1s 229809710e-09 0s 0s 229813030e-09 0s 0s 229816430e-09 1s 1s 229819950e-09 0s 0s 229823310e-09 0s 0s 229826670e-09 1s 1s 229830190e-09 0s 0s 229833590e-09 0s 0s 229836910e-09 1s 1s 229840430e-09 0s 0s 229843870e-09 0s 0s 229847150e-09 1s 1s 229850670e-09 0s 0s 229854150e-09 0s 0s 229857390e-09 1s 1s 229860910e-09 0s 0s 229864430e-09 0s 0s 229867630e-09 1s 1s 229871150e-09 0s 0s 229874710e-09 0s 0s 229877870e-09 1s 1s 229881390e-09 0s 0s 229884990e-09 0s 0s 229888110e-09 1s 1s 229891630e-09 0s 0s 229895270e-09 0s 0s 229898350e-09 1s 1s 229901870e-09 0s 0s 229905550e-09 0s 0s 229908590e-09 1s 1s 229912110e-09 0s 0s 229915830e-09 0s 0s 229918830e-09 1s 1s 229922350e-09 0s 0s 229926110e-09 0s 0s 229929070e-09 1s 1s 229932590e-09 0s 0s 229936390e-09 0s 0s 229939310e-09 1s 1s 229942830e-09 0s 0s 229946670e-09 0s 0s 229949550e-09 1s 1s 229953070e-09 0s 0s 229956950e-09 0s 0s 229959790e-09 1s 1s 229963310e-09 0s 0s 229967230e-09 0s 0s 229970030e-09 1s 1s 229973550e-09 0s 0s 229977510e-09 0s 0s 229980270e-09 1s 1s 229983790e-09 0s 0s 229987790e-09 0s 0s 229990510e-09 1s 1s 229994030e-09 0s 0s 229998070e-09 0s 0s 230000750e-09 1s 1s 230004270e-09 0s 0s 230008350e-09 0s 0s 230010990e-09 1s 1s 230014510e-09 0s 0s 230018630e-09 0s 0s 230021230e-09 1s 1s 230024750e-09 0s 0s 230028910e-09 0s 0s 230031470e-09 1s 1s 230034990e-09 0s 0s 230039190e-09 0s 0s 230041710e-09 1s 1s 230045230e-09 0s 0s 230049470e-09 0s 0s 230051950e-09 1s 1s 230055470e-09 0s 0s 230059750e-09 0s 0s 230062190e-09 1s 1s 230065710e-09 0s 0s 230070030e-09 0s 0s 230072430e-09 1s 1s 230075950e-09 0s 0s 230080310e-09 0s 0s 230082670e-09 1s 1s 230086190e-09 0s 0s 230090590e-09 0s 0s 230092910e-09 1s 1s 230096430e-09 0s 0s 230100870e-09 0s 0s 230103150e-09 1s 1s 230106670e-09 0s 0s 230111150e-09 0s 0s 230113390e-09 1s 1s 230116910e-09 0s 0s 230121430e-09 0s 0s 230123630e-09 1s 1s 230127150e-09 0s 0s 230131710e-09 0s 0s 230133870e-09 1s 1s 230137390e-09 0s 0s 230141990e-09 0s 0s 230144110e-09 1s 1s 230147630e-09 0s 0s 230152270e-09 0s 0s 230154350e-09 1s 1s 230157870e-09 0s 0s 230162550e-09 0s 0s 230164590e-09 1s 1s 230168110e-09 0s 0s 230172830e-09 0s 0s 230174830e-09 1s 1s 230178350e-09 0s 0s 230183110e-09 0s 0s 230185070e-09 1s 1s 230188590e-09 0s 0s 230193390e-09 0s 0s 230195310e-09 1s 1s 230198830e-09 0s 0s 230203670e-09 0s 0s 230205550e-09 1s 1s 230209070e-09 0s 0s 230213950e-09 0s 0s 230215790e-09 1s 1s 230219310e-09 0s 0s 230224230e-09 0s 0s 230226030e-09 1s 1s 230229550e-09 0s 0s 230234510e-09 0s 0s 230236270e-09 1s 1s 230239790e-09 0s 0s 230244790e-09 0s 0s 230246510e-09 1s 1s 230250030e-09 0s 0s 230255070e-09 0s 0s 230256750e-09 1s 1s 230260270e-09 0s 0s 230265350e-09 0s 0s 230266990e-09 1s 1s 230270510e-09 0s 0s 230275630e-09 0s 0s 230277230e-09 1s 1s 230280750e-09 0s 0s 230285910e-09 0s 0s 230287470e-09 1s 1s 230290990e-09 0s 0s 230296190e-09 0s 0s 230297710e-09 1s 1s 230301230e-09 0s 0s 230306470e-09 0s 0s 230307950e-09 1s 1s 230311470e-09 0s 0s 230316750e-09 0s 0s 230318190e-09 1s 1s 230321710e-09 0s 0s 230327030e-09 0s 0s 230328430e-09 1s 1s 230331950e-09 0s 0s 230337310e-09 0s 0s 230338670e-09 1s 1s 230342190e-09 0s 0s 230347590e-09 0s 0s 230348910e-09 1s 1s 230352430e-09 0s 0s 230357870e-09 0s 0s 230359150e-09 1s 1s 230362670e-09 0s 0s 230368150e-09 0s 0s 230369390e-09 1s 1s 230372910e-09 0s 0s 230378430e-09 0s 0s 230379630e-09 1s 1s 230383150e-09 0s 0s 230388710e-09 0s 0s 230389870e-09 1s 1s 230393390e-09 0s 0s 230398990e-09 0s 0s 230400110e-09 1s 1s 230403630e-09 0s 0s 230409270e-09 0s 0s 230410350e-09 1s 1s 230413870e-09 0s 0s 230419550e-09 0s 0s 230420590e-09 1s 1s 230424110e-09 0s 0s 230429830e-09 0s 0s 230430830e-09 1s 1s 230434350e-09 0s 0s 230440110e-09 0s 0s 230441070e-09 1s 1s 230444590e-09 0s 0s 230450390e-09 0s 0s 230451310e-09 1s 1s 230454830e-09 0s 0s 230460670e-09 0s 0s 230461550e-09 1s 1s 230465070e-09 0s 0s 230470950e-09 0s 0s 230471790e-09 1s 1s 230475310e-09 0s 0s 230481230e-09 0s 0s 230482030e-09 1s 1s 230485550e-09 0s 0s 230491510e-09 0s 0s 230492270e-09 1s 1s 230495790e-09 0s 0s 230501790e-09 0s 0s 230502510e-09 1s 1s 230506030e-09 0s 0s 230512070e-09 0s 0s 230512750e-09 1s 1s 230516270e-09 0s 0s 230522350e-09 0s 0s 230522990e-09 1s 1s 230526510e-09 0s 0s 230532630e-09 0s 0s 230533230e-09 1s 1s 230536750e-09 0s 0s 230542910e-09 0s 0s 230543470e-09 1s 1s 230546990e-09 0s 0s 230553190e-09 0s 0s 230553710e-09 1s 1s 230557230e-09 0s 0s 230563470e-09 0s 0s 230563950e-09 1s 1s 230567470e-09 0s 0s 230573750e-09 0s 0s 230574190e-09 1s 1s 230577710e-09 0s 0s 230584030e-09 0s 0s 230584430e-09 1s 1s 230587950e-09 0s 0s 230594310e-09 0s 0s 230594670e-09 1s 1s 230598190e-09 0s 0s 230604590e-09 0s 0s 230604910e-09 1s 1s 230608430e-09 0s 0s 230614870e-09 0s 0s 230615150e-09 1s 1s 230618670e-09 0s 0s 230625150e-09 0s 0s 230625390e-09 1s 1s 230628910e-09 0s 0s 230635430e-09 0s 0s 230635630e-09 1s 1s 230639150e-09 0s 0s 230645710e-09 0s 0s 230645870e-09 1s 1s 230649390e-09 0s 0s 230655990e-09 0s 0s 230656110e-09 1s 1s 230659630e-09 0s 0s 230666270e-09 0s 0s 230666350e-09 1s 1s 230669870e-09 0s 0s 230676550e-09 0s 0s 230676590e-09 1s 1s 230680110e-09 0s 0s 230686830e-09 1s 1s 230686870e-09 1s 1s 230690390e-09 0s 0s 230697070e-09 1s 1s 230697150e-09 1s 1s 230700630e-09 0s 0s 230707310e-09 1s 1s 230707430e-09 1s 1s 230710870e-09 0s 0s 230717550e-09 1s 1s 230717710e-09 1s 1s 230721110e-09 0s 0s 230727790e-09 1s 1s 230727990e-09 1s 1s 230731350e-09 0s 0s 230738030e-09 1s 1s 230738270e-09 1s 1s 230741590e-09 0s 0s 230748270e-09 1s 1s 230748550e-09 1s 1s 230751830e-09 0s 0s 230758510e-09 1s 1s 230758830e-09 1s 1s 230762070e-09 0s 0s 230768750e-09 1s 1s 230769110e-09 1s 1s 230772310e-09 0s 0s 230778990e-09 1s 1s 230779390e-09 1s 1s 230782550e-09 0s 0s 230789230e-09 1s 1s 230789670e-09 1s 1s 230792790e-09 0s 0s 230799470e-09 1s 1s 230799950e-09 1s 1s 230803030e-09 0s 0s 230809710e-09 1s 1s 230810230e-09 1s 1s 230813270e-09 0s 0s 230819950e-09 1s 1s 230820510e-09 1s 1s 230823510e-09 0s 0s 230830190e-09 1s 1s 230830790e-09 1s 1s 230833750e-09 0s 0s 230840430e-09 1s 1s 230841070e-09 1s 1s 230843990e-09 0s 0s 230850670e-09 1s 1s 230851350e-09 1s 1s 230854230e-09 0s 0s 230860910e-09 1s 1s 230861630e-09 1s 1s 230864470e-09 0s 0s 230871150e-09 1s 1s 230871910e-09 1s 1s 230874710e-09 0s 0s 230881390e-09 1s 1s 230882190e-09 1s 1s 230884950e-09 0s 0s 230891630e-09 1s 1s 230892470e-09 1s 1s 230895190e-09 0s 0s 230901870e-09 1s 1s 230902750e-09 1s 1s 230905430e-09 0s 0s 230912110e-09 1s 1s 230913030e-09 1s 1s 230915670e-09 0s 0s 230922350e-09 1s 1s 230923310e-09 1s 1s 230925910e-09 0s 0s 230932590e-09 1s 1s 230933590e-09 1s 1s 230936150e-09 0s 0s 230942830e-09 1s 1s 230943870e-09 1s 1s 230946390e-09 0s 0s 230953070e-09 1s 1s 230954150e-09 1s 1s 230956630e-09 0s 0s 230963310e-09 1s 1s 230964430e-09 1s 1s 230966870e-09 0s 0s 230973550e-09 1s 1s 230974710e-09 1s 1s 230977110e-09 0s 0s 230983790e-09 1s 1s 230984990e-09 1s 1s 230987350e-09 0s 0s 230994030e-09 1s 1s 230995270e-09 1s 1s 230997590e-09 0s 0s 231004270e-09 1s 1s 231005550e-09 1s 1s 231007830e-09 0s 0s 231014510e-09 1s 1s 231015830e-09 1s 1s 231018070e-09 0s 0s 231024750e-09 1s 1s 231026110e-09 1s 1s 231028310e-09 0s 0s 231034990e-09 1s 1s 231036390e-09 1s 1s 231038550e-09 0s 0s 231045230e-09 1s 1s 231046670e-09 1s 1s 231048790e-09 0s 0s 231055470e-09 1s 1s 231056950e-09 1s 1s 231059030e-09 0s 0s 231065710e-09 1s 1s 231067230e-09 1s 1s 231069270e-09 0s 0s 231075950e-09 1s 1s 231077510e-09 1s 1s 231079510e-09 0s 0s 231086190e-09 1s 1s 231087790e-09 1s 1s 231089750e-09 0s 0s 231096430e-09 1s 1s 231098070e-09 1s 1s 231099990e-09 0s 0s 231106670e-09 1s 1s 231108350e-09 1s 1s 231110230e-09 0s 0s 231116910e-09 1s 1s 231118630e-09 1s 1s 231120470e-09 0s 0s 231127150e-09 1s 1s 231128910e-09 1s 1s 231130710e-09 0s 0s 231137390e-09 1s 1s 231139190e-09 1s 1s 231140950e-09 0s 0s 231147630e-09 1s 1s 231149470e-09 1s 1s 231151190e-09 0s 0s 231157870e-09 1s 1s 231159750e-09 1s 1s 231161430e-09 0s 0s 231168110e-09 1s 1s 231170030e-09 1s 1s 231171670e-09 0s 0s 231178350e-09 1s 1s 231180310e-09 1s 1s 231181910e-09 0s 0s 231188590e-09 1s 1s 231190590e-09 1s 1s 231192150e-09 0s 0s 231198830e-09 1s 1s 231200870e-09 1s 1s 231202390e-09 0s 0s 231209070e-09 1s 1s 231211150e-09 1s 1s 231212630e-09 0s 0s 231219310e-09 1s 1s 231221430e-09 1s 1s 231222870e-09 0s 0s 231229550e-09 1s 1s 231231710e-09 1s 1s 231233110e-09 0s 0s 231239790e-09 1s 1s 231241990e-09 1s 1s 231243350e-09 0s 0s 231250030e-09 1s 1s 231252270e-09 1s 1s 231253590e-09 0s 0s 231260270e-09 1s 1s 231262550e-09 1s 1s 231263830e-09 0s 0s 231270510e-09 1s 1s 231272830e-09 1s 1s 231274070e-09 0s 0s 231280750e-09 1s 1s 231283110e-09 1s 1s 231284310e-09 0s 0s 231290990e-09 1s 1s 231293390e-09 1s 1s 231294550e-09 0s 0s 231301230e-09 1s 1s 231303670e-09 1s 1s 231304790e-09 0s 0s 231311470e-09 1s 1s 231313950e-09 1s 1s 231315030e-09 0s 0s 231321710e-09 1s 1s 231324230e-09 1s 1s 231325270e-09 0s 0s 231331950e-09 1s 1s 231334510e-09 1s 1s 231335510e-09 0s 0s 231342190e-09 1s 1s 231344790e-09 1s 1s 231345750e-09 0s 0s 231352430e-09 1s 1s 231355070e-09 1s 1s 231355990e-09 0s 0s 231362670e-09 1s 1s 231365350e-09 1s 1s 231366230e-09 0s 0s 231372910e-09 1s 1s 231375630e-09 1s 1s 231376470e-09 0s 0s 231383150e-09 1s 1s 231385910e-09 1s 1s 231386710e-09 0s 0s 231393390e-09 1s 1s 231396190e-09 1s 1s 231396950e-09 0s 0s 231403630e-09 1s 1s 231406470e-09 1s 1s 231407190e-09 0s 0s 231413870e-09 1s 1s 231416750e-09 1s 1s 231417430e-09 0s 0s 231424110e-09 1s 1s 231427030e-09 1s 1s 231427670e-09 0s 0s 231434350e-09 1s 1s 231437310e-09 1s 1s 231437910e-09 0s 0s 231444590e-09 1s 1s 231447590e-09 1s 1s 231448150e-09 0s 0s 231454830e-09 1s 1s 231457870e-09 1s 1s 231458390e-09 0s 0s 231465070e-09 1s 1s 231468150e-09 1s 1s 231468630e-09 0s 0s 231475310e-09 1s 1s 231478430e-09 1s 1s 231478870e-09 0s 0s 231485550e-09 1s 1s 231488710e-09 1s 1s 231489110e-09 0s 0s 231495790e-09 1s 1s 231498990e-09 1s 1s 231499350e-09 0s 0s 231506030e-09 1s 1s 231509270e-09 1s 1s 231509590e-09 0s 0s 231516270e-09 1s 1s 231519550e-09 1s 1s 231519830e-09 0s 0s 231526510e-09 1s 1s 231529830e-09 1s 1s 231530070e-09 0s 0s 231536750e-09 1s 1s 231540110e-09 1s 1s 231540310e-09 0s 0s 231546990e-09 1s 1s 231550390e-09 1s 1s 231550550e-09 0s 0s 231557230e-09 1s 1s 231560670e-09 1s 1s 231560790e-09 0s 0s 231567470e-09 1s 1s 231570950e-09 1s 1s 231571030e-09 0s 0s 231577710e-09 1s 1s 231581230e-09 1s 1s 231581270e-09 0s 0s 231587950e-09 1s 1s 231591510e-09 0s 0s 231598190e-09 1s 1s 231601750e-09 0s 0s 231601790e-09 0s 0s 231608430e-09 1s 1s 231611990e-09 0s 0s 231612070e-09 0s 0s 231618670e-09 1s 1s 231622230e-09 0s 0s 231622350e-09 0s 0s 231628910e-09 1s 1s 231632470e-09 0s 0s 231632630e-09 0s 0s 231639150e-09 1s 1s 231642710e-09 0s 0s 231642910e-09 0s 0s 231649390e-09 1s 1s 231652950e-09 0s 0s 231653190e-09 0s 0s 231659630e-09 1s 1s 231663190e-09 0s 0s 231663470e-09 0s 0s 231669870e-09 1s 1s 231673430e-09 0s 0s 231673750e-09 0s 0s 231680110e-09 1s 1s 231683670e-09 0s 0s 231684030e-09 0s 0s 231690350e-09 1s 1s 231693910e-09 0s 0s 231694310e-09 0s 0s 231700590e-09 1s 1s 231704150e-09 0s 0s 231704590e-09 0s 0s 231710830e-09 1s 1s 231714390e-09 0s 0s 231714870e-09 0s 0s 231721070e-09 1s 1s 231724630e-09 0s 0s 231725150e-09 0s 0s 231731310e-09 1s 1s 231734870e-09 0s 0s 231735430e-09 0s 0s 231741550e-09 1s 1s 231745110e-09 0s 0s 231745710e-09 0s 0s 231751790e-09 1s 1s 231755350e-09 0s 0s 231755990e-09 0s 0s 231762030e-09 1s 1s 231765590e-09 0s 0s 231766270e-09 0s 0s 231772270e-09 1s 1s 231775830e-09 0s 0s 231776550e-09 0s 0s 231782510e-09 1s 1s 231786070e-09 0s 0s 231786830e-09 0s 0s 231792750e-09 1s 1s 231796310e-09 0s 0s 231797110e-09 0s 0s 231802990e-09 1s 1s 231806550e-09 0s 0s 231807390e-09 0s 0s 231813230e-09 1s 1s 231816790e-09 0s 0s 231817670e-09 0s 0s 231823470e-09 1s 1s 231827030e-09 0s 0s 231827950e-09 0s 0s 231833710e-09 1s 1s 231837270e-09 0s 0s 231838230e-09 0s 0s 231843950e-09 1s 1s 231847510e-09 0s 0s 231848510e-09 0s 0s 231854190e-09 1s 1s 231857750e-09 0s 0s 231858790e-09 0s 0s 231864430e-09 1s 1s 231867990e-09 0s 0s 231869070e-09 0s 0s 231874670e-09 1s 1s 231878230e-09 0s 0s 231879350e-09 0s 0s 231884910e-09 1s 1s 231888470e-09 0s 0s 231889630e-09 0s 0s 231895150e-09 1s 1s 231898710e-09 0s 0s 231899910e-09 0s 0s 231905390e-09 1s 1s 231908950e-09 0s 0s 231910190e-09 0s 0s 231915630e-09 1s 1s 231919190e-09 0s 0s 231920470e-09 0s 0s 231925870e-09 1s 1s 231929430e-09 0s 0s 231930750e-09 0s 0s 231936110e-09 1s 1s 231939670e-09 0s 0s 231941030e-09 0s 0s 231946350e-09 1s 1s 231949910e-09 0s 0s 231951310e-09 0s 0s 231956590e-09 1s 1s 231960150e-09 0s 0s 231961590e-09 0s 0s 231966830e-09 1s 1s 231970390e-09 0s 0s 231971870e-09 0s 0s 231977070e-09 1s 1s 231980630e-09 0s 0s 231982150e-09 0s 0s 231987310e-09 1s 1s 231990870e-09 0s 0s 231992430e-09 0s 0s 231997550e-09 1s 1s 232001110e-09 0s 0s 232002710e-09 0s 0s 232007790e-09 1s 1s 232011350e-09 0s 0s 232012990e-09 0s 0s 232018030e-09 1s 1s 232021590e-09 0s 0s 232023270e-09 0s 0s 232028270e-09 1s 1s 232031830e-09 0s 0s 232033550e-09 0s 0s 232038510e-09 1s 1s 232042070e-09 0s 0s 232043830e-09 0s 0s 232048750e-09 1s 1s 232052310e-09 0s 0s 232054110e-09 0s 0s 232058990e-09 1s 1s 232062550e-09 0s 0s 232064390e-09 0s 0s 232069230e-09 1s 1s 232072790e-09 0s 0s 232074670e-09 0s 0s 232079470e-09 1s 1s 232083030e-09 0s 0s 232084950e-09 0s 0s 232089710e-09 1s 1s 232093270e-09 0s 0s 232095230e-09 0s 0s 232099950e-09 1s 1s 232103510e-09 0s 0s 232105510e-09 0s 0s 232110190e-09 1s 1s 232113750e-09 0s 0s 232115790e-09 0s 0s 232120430e-09 1s 1s 232123990e-09 0s 0s 232126070e-09 0s 0s 232130670e-09 1s 1s 232134230e-09 0s 0s 232136350e-09 0s 0s 232140910e-09 1s 1s 232144470e-09 0s 0s 232146630e-09 0s 0s 232151150e-09 1s 1s 232154710e-09 0s 0s 232156910e-09 0s 0s 232161390e-09 1s 1s 232164950e-09 0s 0s 232167190e-09 0s 0s 232171630e-09 1s 1s 232175190e-09 0s 0s 232177470e-09 0s 0s 232181870e-09 1s 1s 232185430e-09 0s 0s 232187750e-09 0s 0s 232192110e-09 1s 1s 232195670e-09 0s 0s 232198030e-09 0s 0s 232202350e-09 1s 1s 232205910e-09 0s 0s 232208310e-09 0s 0s 232212590e-09 1s 1s 232216150e-09 0s 0s 232218590e-09 0s 0s 232222830e-09 1s 1s 232226390e-09 0s 0s 232228870e-09 0s 0s 232233070e-09 1s 1s 232236630e-09 0s 0s 232239150e-09 0s 0s 232243310e-09 1s 1s 232246870e-09 0s 0s 232249430e-09 0s 0s 232253550e-09 1s 1s 232257110e-09 0s 0s 232259710e-09 0s 0s 232263790e-09 1s 1s 232267350e-09 0s 0s 232269990e-09 0s 0s 232274030e-09 1s 1s 232277590e-09 0s 0s 232280270e-09 0s 0s 232284270e-09 1s 1s 232287830e-09 0s 0s 232290550e-09 0s 0s 232294510e-09 1s 1s 232298070e-09 0s 0s 232300830e-09 0s 0s 232304750e-09 1s 1s 232308310e-09 0s 0s 232311110e-09 0s 0s 232314990e-09 1s 1s 232318550e-09 0s 0s 232321390e-09 0s 0s 232325230e-09 1s 1s 232328790e-09 0s 0s 232331670e-09 0s 0s 232335470e-09 1s 1s 232339030e-09 0s 0s 232341950e-09 0s 0s 232345710e-09 1s 1s 232349270e-09 0s 0s 232352230e-09 0s 0s 232355950e-09 1s 1s 232359510e-09 0s 0s 232362510e-09 0s 0s 232366190e-09 1s 1s 232369750e-09 0s 0s 232372790e-09 0s 0s 232376430e-09 1s 1s 232379990e-09 0s 0s 232383070e-09 0s 0s 232386670e-09 1s 1s 232390230e-09 0s 0s 232393350e-09 0s 0s 232396910e-09 1s 1s 232400470e-09 0s 0s 232403630e-09 0s 0s 232407150e-09 1s 1s 232410710e-09 0s 0s 232413910e-09 0s 0s 232417390e-09 1s 1s 232420950e-09 0s 0s 232424190e-09 0s 0s 232427630e-09 1s 1s 232431190e-09 0s 0s 232434470e-09 0s 0s 232437870e-09 1s 1s 232441430e-09 0s 0s 232444750e-09 0s 0s 232448110e-09 1s 1s 232451670e-09 0s 0s 232455030e-09 0s 0s 232458350e-09 1s 1s 232461910e-09 0s 0s 232465310e-09 0s 0s 232468590e-09 1s 1s 232472150e-09 0s 0s 232475590e-09 0s 0s 232478830e-09 1s 1s 232482390e-09 0s 0s 232485870e-09 0s 0s 232489070e-09 1s 1s 232492630e-09 0s 0s 232496150e-09 0s 0s 232499310e-09 1s 1s 232502870e-09 0s 0s 232506430e-09 0s 0s 232509550e-09 1s 1s 232513110e-09 0s 0s 232516710e-09 0s 0s 232519790e-09 1s 1s 232523350e-09 0s 0s 232526990e-09 0s 0s 232530030e-09 1s 1s 232533590e-09 0s 0s 232537270e-09 0s 0s 232540270e-09 1s 1s 232543830e-09 0s 0s 232547550e-09 0s 0s 232550510e-09 1s 1s 232554070e-09 0s 0s 232557830e-09 0s 0s 232560750e-09 1s 1s 232564310e-09 0s 0s 232568110e-09 0s 0s 232570990e-09 1s 1s 232574550e-09 0s 0s 232578390e-09 0s 0s 232581230e-09 1s 1s 232584790e-09 0s 0s 232588670e-09 0s 0s 232591470e-09 1s 1s 232595030e-09 0s 0s 232598950e-09 0s 0s 232601710e-09 1s 1s 232605270e-09 0s 0s 232609230e-09 0s 0s 232611950e-09 1s 1s 232615510e-09 0s 0s 232619510e-09 0s 0s 232622190e-09 1s 1s 232625750e-09 0s 0s 232629790e-09 0s 0s 232632430e-09 1s 1s 232635990e-09 0s 0s 232640070e-09 0s 0s 232642670e-09 1s 1s 232646230e-09 0s 0s 232650350e-09 0s 0s 232652910e-09 1s 1s 232656470e-09 0s 0s 232660630e-09 0s 0s 232663150e-09 1s 1s 232666710e-09 0s 0s 232670910e-09 0s 0s 232673390e-09 1s 1s 232676950e-09 0s 0s 232681190e-09 0s 0s 232683630e-09 1s 1s 232687190e-09 0s 0s 232691470e-09 0s 0s 232693870e-09 1s 1s 232697430e-09 0s 0s 232701750e-09 0s 0s 232704110e-09 1s 1s 232707670e-09 0s 0s 232712030e-09 0s 0s 232714350e-09 1s 1s 232717910e-09 0s 0s 232722310e-09 0s 0s 232724590e-09 1s 1s 232728150e-09 0s 0s 232732590e-09 0s 0s 232734830e-09 1s 1s 232738390e-09 0s 0s 232742870e-09 0s 0s 232745070e-09 1s 1s 232748630e-09 0s 0s 232753150e-09 0s 0s 232755310e-09 1s 1s 232758870e-09 0s 0s 232763430e-09 0s 0s 232765550e-09 1s 1s 232769110e-09 0s 0s 232773710e-09 0s 0s 232775790e-09 1s 1s 232779350e-09 0s 0s 232783990e-09 0s 0s 232786030e-09 1s 1s 232789590e-09 0s 0s 232794270e-09 0s 0s 232796270e-09 1s 1s 232799830e-09 0s 0s 232804550e-09 0s 0s 232806510e-09 1s 1s 232810070e-09 0s 0s 232814830e-09 0s 0s 232816750e-09 1s 1s 232820310e-09 0s 0s 232825110e-09 0s 0s 232826990e-09 1s 1s 232830550e-09 0s 0s 232835390e-09 0s 0s 232837230e-09 1s 1s 232840790e-09 0s 0s 232845670e-09 0s 0s 232847470e-09 1s 1s 232851030e-09 0s 0s 232855950e-09 0s 0s 232857710e-09 1s 1s 232861270e-09 0s 0s 232866230e-09 0s 0s 232867950e-09 1s 1s 232871510e-09 0s 0s 232876510e-09 0s 0s 232878190e-09 1s 1s 232881750e-09 0s 0s 232886790e-09 0s 0s 232888430e-09 1s 1s 232891990e-09 0s 0s 232897070e-09 0s 0s 232898670e-09 1s 1s 232902230e-09 0s 0s 232907350e-09 0s 0s 232908910e-09 1s 1s 232912470e-09 0s 0s 232917630e-09 0s 0s 232919150e-09 1s 1s 232922710e-09 0s 0s 232927910e-09 0s 0s 232929390e-09 1s 1s 232932950e-09 0s 0s 232938190e-09 0s 0s 232939630e-09 1s 1s 232943190e-09 0s 0s 232948470e-09 0s 0s 232949870e-09 1s 1s 232953430e-09 0s 0s 232958750e-09 0s 0s 232960110e-09 1s 1s 232963670e-09 0s 0s 232969030e-09 0s 0s 232970350e-09 1s 1s 232973910e-09 0s 0s 232979310e-09 0s 0s 232980590e-09 1s 1s 232984150e-09 0s 0s 232989590e-09 0s 0s 232990830e-09 1s 1s 232994390e-09 0s 0s 232999870e-09 0s 0s 233001070e-09 1s 1s 233004630e-09 0s 0s 233010150e-09 0s 0s 233011310e-09 1s 1s 233014870e-09 0s 0s 233020430e-09 0s 0s 233021550e-09 1s 1s 233025110e-09 0s 0s 233030710e-09 0s 0s 233031790e-09 1s 1s 233035350e-09 0s 0s 233040990e-09 0s 0s 233042030e-09 1s 1s 233045590e-09 0s 0s 233051270e-09 0s 0s 233052270e-09 1s 1s 233055830e-09 0s 0s 233061550e-09 0s 0s 233062510e-09 1s 1s 233066070e-09 0s 0s 233071830e-09 0s 0s 233072750e-09 1s 1s 233076310e-09 0s 0s 233082110e-09 0s 0s 233082990e-09 1s 1s 233086550e-09 0s 0s 233092390e-09 0s 0s 233093230e-09 1s 1s 233096790e-09 0s 0s 233102670e-09 0s 0s 233103470e-09 1s 1s 233107030e-09 0s 0s 233112950e-09 0s 0s 233113710e-09 1s 1s 233117270e-09 0s 0s 233123230e-09 0s 0s 233123950e-09 1s 1s 233127510e-09 0s 0s 233133510e-09 0s 0s 233134190e-09 1s 1s 233137750e-09 0s 0s 233143790e-09 0s 0s 233144430e-09 1s 1s 233147990e-09 0s 0s 233154070e-09 0s 0s 233154670e-09 1s 1s 233158230e-09 0s 0s 233164350e-09 0s 0s 233164910e-09 1s 1s 233168470e-09 0s 0s 233174630e-09 0s 0s 233175150e-09 1s 1s 233178710e-09 0s 0s 233184910e-09 0s 0s 233185390e-09 1s 1s 233188950e-09 0s 0s 233195190e-09 0s 0s 233195630e-09 1s 1s 233199190e-09 0s 0s 233205470e-09 0s 0s 233205870e-09 1s 1s 233209430e-09 0s 0s 233215750e-09 0s 0s 233216110e-09 1s 1s 233219670e-09 0s 0s 233226030e-09 0s 0s 233226350e-09 1s 1s 233229910e-09 0s 0s 233236310e-09 0s 0s 233236590e-09 1s 1s 233240150e-09 0s 0s 233246590e-09 0s 0s 233246830e-09 1s 1s 233250390e-09 0s 0s 233256870e-09 0s 0s 233257070e-09 1s 1s 233260630e-09 0s 0s 233267150e-09 0s 0s 233267310e-09 1s 1s 233270870e-09 0s 0s 233277430e-09 0s 0s 233277550e-09 1s 1s 233281110e-09 0s 0s 233287710e-09 0s 0s 233287790e-09 1s 1s 233291350e-09 0s 0s 233297990e-09 0s 0s 233298030e-09 1s 1s 233301590e-09 0s 0s 233308270e-09 1s 1s 233308310e-09 1s 1s 233311870e-09 0s 0s 233318510e-09 1s 1s 233318590e-09 1s 1s 233322110e-09 0s 0s 233328750e-09 1s 1s 233328870e-09 1s 1s 233332350e-09 0s 0s 233338990e-09 1s 1s 233339150e-09 1s 1s 233342590e-09 0s 0s 233349230e-09 1s 1s 233349430e-09 1s 1s 233352830e-09 0s 0s 233359470e-09 1s 1s 233359710e-09 1s 1s 233363070e-09 0s 0s 233369710e-09 1s 1s 233369990e-09 1s 1s 233373310e-09 0s 0s 233379950e-09 1s 1s 233380270e-09 1s 1s 233383550e-09 0s 0s 233390190e-09 1s 1s 233390550e-09 1s 1s 233393790e-09 0s 0s 233400430e-09 1s 1s 233400830e-09 1s 1s 233404030e-09 0s 0s 233410670e-09 1s 1s 233411110e-09 1s 1s 233414270e-09 0s 0s 233420910e-09 1s 1s 233421390e-09 1s 1s 233424510e-09 0s 0s 233431150e-09 1s 1s 233431670e-09 1s 1s 233434750e-09 0s 0s 233441390e-09 1s 1s 233441950e-09 1s 1s 233444990e-09 0s 0s 233451630e-09 1s 1s 233452230e-09 1s 1s 233455230e-09 0s 0s 233461870e-09 1s 1s 233462510e-09 1s 1s 233465470e-09 0s 0s 233472110e-09 1s 1s 233472790e-09 1s 1s 233475710e-09 0s 0s 233482350e-09 1s 1s 233483070e-09 1s 1s 233485950e-09 0s 0s 233492590e-09 1s 1s 233493350e-09 1s 1s 233496190e-09 0s 0s 233502830e-09 1s 1s 233503630e-09 1s 1s 233506430e-09 0s 0s 233513070e-09 1s 1s 233513910e-09 1s 1s 233516670e-09 0s 0s 233523310e-09 1s 1s 233524190e-09 1s 1s 233526910e-09 0s 0s 233533550e-09 1s 1s 233534470e-09 1s 1s 233537150e-09 0s 0s 233543790e-09 1s 1s 233544750e-09 1s 1s 233547390e-09 0s 0s 233554030e-09 1s 1s 233555030e-09 1s 1s 233557630e-09 0s 0s 233564270e-09 1s 1s 233565310e-09 1s 1s 233567870e-09 0s 0s 233574510e-09 1s 1s 233575590e-09 1s 1s 233578110e-09 0s 0s 233584750e-09 1s 1s 233585870e-09 1s 1s 233588350e-09 0s 0s 233594990e-09 1s 1s 233596150e-09 1s 1s 233598590e-09 0s 0s 233605230e-09 1s 1s 233606430e-09 1s 1s 233608830e-09 0s 0s 233615470e-09 1s 1s 233616710e-09 1s 1s 233619070e-09 0s 0s 233625710e-09 1s 1s 233626990e-09 1s 1s 233629310e-09 0s 0s 233635950e-09 1s 1s 233637270e-09 1s 1s 233639550e-09 0s 0s 233646190e-09 1s 1s 233647550e-09 1s 1s 233649790e-09 0s 0s 233656430e-09 1s 1s 233657830e-09 1s 1s 233660030e-09 0s 0s 233666670e-09 1s 1s 233668110e-09 1s 1s 233670270e-09 0s 0s 233676910e-09 1s 1s 233678390e-09 1s 1s 233680510e-09 0s 0s 233687150e-09 1s 1s 233688670e-09 1s 1s 233690750e-09 0s 0s 233697390e-09 1s 1s 233698950e-09 1s 1s 233700990e-09 0s 0s 233707630e-09 1s 1s 233709230e-09 1s 1s 233711230e-09 0s 0s 233717870e-09 1s 1s 233719510e-09 1s 1s 233721470e-09 0s 0s 233728110e-09 1s 1s 233729790e-09 1s 1s 233731710e-09 0s 0s 233738350e-09 1s 1s 233740070e-09 1s 1s 233741950e-09 0s 0s 233748590e-09 1s 1s 233750350e-09 1s 1s 233752190e-09 0s 0s 233758830e-09 1s 1s 233760630e-09 1s 1s 233762430e-09 0s 0s 233769070e-09 1s 1s 233770910e-09 1s 1s 233772670e-09 0s 0s 233779310e-09 1s 1s 233781190e-09 1s 1s 233782910e-09 0s 0s 233789550e-09 1s 1s 233791470e-09 1s 1s 233793150e-09 0s 0s 233799790e-09 1s 1s 233801750e-09 1s 1s 233803390e-09 0s 0s 233810030e-09 1s 1s 233812030e-09 1s 1s 233813630e-09 0s 0s 233820270e-09 1s 1s 233822310e-09 1s 1s 233823870e-09 0s 0s 233830510e-09 1s 1s 233832590e-09 1s 1s 233834110e-09 0s 0s 233840750e-09 1s 1s 233842870e-09 1s 1s 233844350e-09 0s 0s 233850990e-09 1s 1s 233853150e-09 1s 1s 233854590e-09 0s 0s 233861230e-09 1s 1s 233863430e-09 1s 1s 233864830e-09 0s 0s 233871470e-09 1s 1s 233873710e-09 1s 1s 233875070e-09 0s 0s 233881710e-09 1s 1s 233883990e-09 1s 1s 233885310e-09 0s 0s 233891950e-09 1s 1s 233894270e-09 1s 1s 233895550e-09 0s 0s 233902190e-09 1s 1s 233904550e-09 1s 1s 233905790e-09 0s 0s 233912430e-09 1s 1s 233914830e-09 1s 1s 233916030e-09 0s 0s 233922670e-09 1s 1s 233925110e-09 1s 1s 233926270e-09 0s 0s 233932910e-09 1s 1s 233935390e-09 1s 1s 233936510e-09 0s 0s 233943150e-09 1s 1s 233945670e-09 1s 1s 233946750e-09 0s 0s 233953390e-09 1s 1s 233955950e-09 1s 1s 233956990e-09 0s 0s 233963630e-09 1s 1s 233966230e-09 1s 1s 233967230e-09 0s 0s 233973870e-09 1s 1s 233976510e-09 1s 1s 233977470e-09 0s 0s 233984110e-09 1s 1s 233986790e-09 1s 1s 233987710e-09 0s 0s 233994350e-09 1s 1s 233997070e-09 1s 1s 233997950e-09 0s 0s 234004590e-09 1s 1s 234007350e-09 1s 1s 234008190e-09 0s 0s 234014830e-09 1s 1s 234017630e-09 1s 1s 234018430e-09 0s 0s 234025070e-09 1s 1s 234027910e-09 1s 1s 234028670e-09 0s 0s 234035310e-09 1s 1s 234038190e-09 1s 1s 234038910e-09 0s 0s 234045550e-09 1s 1s 234048470e-09 1s 1s 234049150e-09 0s 0s 234055790e-09 1s 1s 234058750e-09 1s 1s 234059390e-09 0s 0s 234066030e-09 1s 1s 234069030e-09 1s 1s 234069630e-09 0s 0s 234076270e-09 1s 1s 234079310e-09 1s 1s 234079870e-09 0s 0s 234086510e-09 1s 1s 234089590e-09 1s 1s 234090110e-09 0s 0s 234096750e-09 1s 1s 234099870e-09 1s 1s 234100350e-09 0s 0s 234106990e-09 1s 1s 234110150e-09 1s 1s 234110590e-09 0s 0s 234117230e-09 1s 1s 234120430e-09 1s 1s 234120830e-09 0s 0s 234127470e-09 1s 1s 234130710e-09 1s 1s 234131070e-09 0s 0s 234137710e-09 1s 1s 234140990e-09 1s 1s 234141310e-09 0s 0s 234147950e-09 1s 1s 234151270e-09 1s 1s 234151550e-09 0s 0s 234158190e-09 1s 1s 234161550e-09 1s 1s 234161790e-09 0s 0s 234168430e-09 1s 1s 234171830e-09 1s 1s 234172030e-09 0s 0s 234178670e-09 1s 1s 234182110e-09 1s 1s 234182270e-09 0s 0s 234188910e-09 1s 1s 234192390e-09 1s 1s 234192510e-09 0s 0s 234199150e-09 1s 1s 234202670e-09 1s 1s 234202750e-09 0s 0s 234209390e-09 1s 1s 234212950e-09 1s 1s 234212990e-09 0s 0s 234219630e-09 1s 1s 234223230e-09 0s 0s 234229870e-09 1s 1s 234233470e-09 0s 0s 234233510e-09 0s 0s 234240110e-09 1s 1s 234243710e-09 0s 0s 234243790e-09 0s 0s 234250350e-09 1s 1s 234253950e-09 0s 0s 234254070e-09 0s 0s 234260590e-09 1s 1s 234264190e-09 0s 0s 234264350e-09 0s 0s 234270830e-09 1s 1s 234274430e-09 0s 0s 234274630e-09 0s 0s 234281070e-09 1s 1s 234284670e-09 0s 0s 234284910e-09 0s 0s 234291310e-09 1s 1s 234294910e-09 0s 0s 234295190e-09 0s 0s 234301550e-09 1s 1s 234305150e-09 0s 0s 234305470e-09 0s 0s 234311790e-09 1s 1s 234315390e-09 0s 0s 234315750e-09 0s 0s 234322030e-09 1s 1s 234325630e-09 0s 0s 234326030e-09 0s 0s 234332270e-09 1s 1s 234335870e-09 0s 0s 234336310e-09 0s 0s 234342510e-09 1s 1s 234346110e-09 0s 0s 234346590e-09 0s 0s 234352750e-09 1s 1s 234356350e-09 0s 0s 234356870e-09 0s 0s 234362990e-09 1s 1s 234366590e-09 0s 0s 234367150e-09 0s 0s 234373230e-09 1s 1s 234376830e-09 0s 0s 234377430e-09 0s 0s 234383470e-09 1s 1s 234387070e-09 0s 0s 234387710e-09 0s 0s 234393710e-09 1s 1s 234397310e-09 0s 0s 234397990e-09 0s 0s 234403950e-09 1s 1s 234407550e-09 0s 0s 234408270e-09 0s 0s 234414190e-09 1s 1s 234417790e-09 0s 0s 234418550e-09 0s 0s 234424430e-09 1s 1s 234428030e-09 0s 0s 234428830e-09 0s 0s 234434670e-09 1s 1s 234438270e-09 0s 0s 234439110e-09 0s 0s 234444910e-09 1s 1s 234448510e-09 0s 0s 234449390e-09 0s 0s 234455150e-09 1s 1s 234458750e-09 0s 0s 234459670e-09 0s 0s 234465390e-09 1s 1s 234468990e-09 0s 0s 234469950e-09 0s 0s 234475630e-09 1s 1s 234479230e-09 0s 0s 234480230e-09 0s 0s 234485870e-09 1s 1s 234489470e-09 0s 0s 234490510e-09 0s 0s 234496110e-09 1s 1s 234499710e-09 0s 0s 234500790e-09 0s 0s 234506350e-09 1s 1s 234509950e-09 0s 0s 234511070e-09 0s 0s 234516590e-09 1s 1s 234520190e-09 0s 0s 234521350e-09 0s 0s 234526830e-09 1s 1s 234530430e-09 0s 0s 234531630e-09 0s 0s 234537070e-09 1s 1s 234540670e-09 0s 0s 234541910e-09 0s 0s 234547310e-09 1s 1s 234550910e-09 0s 0s 234552190e-09 0s 0s 234557550e-09 1s 1s 234561150e-09 0s 0s 234562470e-09 0s 0s 234567790e-09 1s 1s 234571390e-09 0s 0s 234572750e-09 0s 0s 234578030e-09 1s 1s 234581630e-09 0s 0s 234583030e-09 0s 0s 234588270e-09 1s 1s 234591870e-09 0s 0s 234593310e-09 0s 0s 234598510e-09 1s 1s 234602110e-09 0s 0s 234603590e-09 0s 0s 234608750e-09 1s 1s 234612350e-09 0s 0s 234613870e-09 0s 0s 234618990e-09 1s 1s 234622590e-09 0s 0s 234624150e-09 0s 0s 234629230e-09 1s 1s 234632830e-09 0s 0s 234634430e-09 0s 0s 234639470e-09 1s 1s 234643070e-09 0s 0s 234644710e-09 0s 0s 234649710e-09 1s 1s 234653310e-09 0s 0s 234654990e-09 0s 0s 234659950e-09 1s 1s 234663550e-09 0s 0s 234665270e-09 0s 0s 234670190e-09 1s 1s 234673790e-09 0s 0s 234675550e-09 0s 0s 234680430e-09 1s 1s 234684030e-09 0s 0s 234685830e-09 0s 0s 234690670e-09 1s 1s 234694270e-09 0s 0s 234696110e-09 0s 0s 234700910e-09 1s 1s 234704510e-09 0s 0s 234706390e-09 0s 0s 234711150e-09 1s 1s 234714750e-09 0s 0s 234716670e-09 0s 0s 234721390e-09 1s 1s 234724990e-09 0s 0s 234726950e-09 0s 0s 234731630e-09 1s 1s 234735230e-09 0s 0s 234737230e-09 0s 0s 234741870e-09 1s 1s 234745470e-09 0s 0s 234747510e-09 0s 0s 234752110e-09 1s 1s 234755710e-09 0s 0s 234757790e-09 0s 0s 234762350e-09 1s 1s 234765950e-09 0s 0s 234768070e-09 0s 0s 234772590e-09 1s 1s 234776190e-09 0s 0s 234778350e-09 0s 0s 234782830e-09 1s 1s 234786430e-09 0s 0s 234788630e-09 0s 0s 234793070e-09 1s 1s 234796670e-09 0s 0s 234798910e-09 0s 0s 234803310e-09 1s 1s 234806910e-09 0s 0s 234809190e-09 0s 0s 234813550e-09 1s 1s 234817150e-09 0s 0s 234819470e-09 0s 0s 234823790e-09 1s 1s 234827390e-09 0s 0s 234829750e-09 0s 0s 234834030e-09 1s 1s 234837630e-09 0s 0s 234840030e-09 0s 0s 234844270e-09 1s 1s 234847870e-09 0s 0s 234850310e-09 0s 0s 234854510e-09 1s 1s 234858110e-09 0s 0s 234860590e-09 0s 0s 234864750e-09 1s 1s 234868350e-09 0s 0s 234870870e-09 0s 0s 234874990e-09 1s 1s 234878590e-09 0s 0s 234881150e-09 0s 0s 234885230e-09 1s 1s 234888830e-09 0s 0s 234891430e-09 0s 0s 234895470e-09 1s 1s 234899070e-09 0s 0s 234901710e-09 0s 0s 234905710e-09 1s 1s 234909310e-09 0s 0s 234911990e-09 0s 0s 234915950e-09 1s 1s 234919550e-09 0s 0s 234922270e-09 0s 0s 234926190e-09 1s 1s 234929790e-09 0s 0s 234932550e-09 0s 0s 234936430e-09 1s 1s 234940030e-09 0s 0s 234942830e-09 0s 0s 234946670e-09 1s 1s 234950270e-09 0s 0s 234953110e-09 0s 0s 234956910e-09 1s 1s 234960510e-09 0s 0s 234963390e-09 0s 0s 234967150e-09 1s 1s 234970750e-09 0s 0s 234973670e-09 0s 0s 234977390e-09 1s 1s 234980990e-09 0s 0s 234983950e-09 0s 0s 234987630e-09 1s 1s 234991230e-09 0s 0s 234994230e-09 0s 0s 234997870e-09 1s 1s 235001470e-09 0s 0s 235004510e-09 0s 0s 235008110e-09 1s 1s 235011710e-09 0s 0s 235014790e-09 0s 0s 235018350e-09 1s 1s 235021950e-09 0s 0s 235025070e-09 0s 0s 235028590e-09 1s 1s 235032190e-09 0s 0s 235035350e-09 0s 0s 235038830e-09 1s 1s 235042430e-09 0s 0s 235045630e-09 0s 0s 235049070e-09 1s 1s 235052670e-09 0s 0s 235055910e-09 0s 0s 235059310e-09 1s 1s 235062910e-09 0s 0s 235066190e-09 0s 0s 235069550e-09 1s 1s 235073150e-09 0s 0s 235076470e-09 0s 0s 235079790e-09 1s 1s 235083390e-09 0s 0s 235086750e-09 0s 0s 235090030e-09 1s 1s 235093630e-09 0s 0s 235097030e-09 0s 0s 235100270e-09 1s 1s 235103870e-09 0s 0s 235107310e-09 0s 0s 235110510e-09 1s 1s 235114110e-09 0s 0s 235117590e-09 0s 0s 235120750e-09 1s 1s 235124350e-09 0s 0s 235127870e-09 0s 0s 235130990e-09 1s 1s 235134590e-09 0s 0s 235138150e-09 0s 0s 235141230e-09 1s 1s 235144830e-09 0s 0s 235148430e-09 0s 0s 235151470e-09 1s 1s 235155070e-09 0s 0s 235158710e-09 0s 0s 235161710e-09 1s 1s 235165310e-09 0s 0s 235168990e-09 0s 0s 235171950e-09 1s 1s 235175550e-09 0s 0s 235179270e-09 0s 0s 235182190e-09 1s 1s 235185790e-09 0s 0s 235189550e-09 0s 0s 235192430e-09 1s 1s 235196030e-09 0s 0s 235199830e-09 0s 0s 235202670e-09 1s 1s 235206270e-09 0s 0s 235210110e-09 0s 0s 235212910e-09 1s 1s 235216510e-09 0s 0s 235220390e-09 0s 0s 235223150e-09 1s 1s 235226750e-09 0s 0s 235230670e-09 0s 0s 235233390e-09 1s 1s 235236990e-09 0s 0s 235240950e-09 0s 0s 235243630e-09 1s 1s 235247230e-09 0s 0s 235251230e-09 0s 0s 235253870e-09 1s 1s 235257470e-09 0s 0s 235261510e-09 0s 0s 235264110e-09 1s 1s 235267710e-09 0s 0s 235271790e-09 0s 0s 235274350e-09 1s 1s 235277950e-09 0s 0s 235282070e-09 0s 0s 235284590e-09 1s 1s 235288190e-09 0s 0s 235292350e-09 0s 0s 235294830e-09 1s 1s 235298430e-09 0s 0s 235302630e-09 0s 0s 235305070e-09 1s 1s 235308670e-09 0s 0s 235312910e-09 0s 0s 235315310e-09 1s 1s 235318910e-09 0s 0s 235323190e-09 0s 0s 235325550e-09 1s 1s 235329150e-09 0s 0s 235333470e-09 0s 0s 235335790e-09 1s 1s 235339390e-09 0s 0s 235343750e-09 0s 0s 235346030e-09 1s 1s 235349630e-09 0s 0s 235354030e-09 0s 0s 235356270e-09 1s 1s 235359870e-09 0s 0s 235364310e-09 0s 0s 235366510e-09 1s 1s 235370110e-09 0s 0s 235374590e-09 0s 0s 235376750e-09 1s 1s 235380350e-09 0s 0s 235384870e-09 0s 0s 235386990e-09 1s 1s 235390590e-09 0s 0s 235395150e-09 0s 0s 235397230e-09 1s 1s 235400830e-09 0s 0s 235405430e-09 0s 0s 235407470e-09 1s 1s 235411070e-09 0s 0s 235415710e-09 0s 0s 235417710e-09 1s 1s 235421310e-09 0s 0s 235425990e-09 0s 0s 235427950e-09 1s 1s 235431550e-09 0s 0s 235436270e-09 0s 0s 235438190e-09 1s 1s 235441790e-09 0s 0s 235446550e-09 0s 0s 235448430e-09 1s 1s 235452030e-09 0s 0s 235456830e-09 0s 0s 235458670e-09 1s 1s 235462270e-09 0s 0s 235467110e-09 0s 0s 235468910e-09 1s 1s 235472510e-09 0s 0s 235477390e-09 0s 0s 235479150e-09 1s 1s 235482750e-09 0s 0s 235487670e-09 0s 0s 235489390e-09 1s 1s 235492990e-09 0s 0s 235497950e-09 0s 0s 235499630e-09 1s 1s 235503230e-09 0s 0s 235508230e-09 0s 0s 235509870e-09 1s 1s 235513470e-09 0s 0s 235518510e-09 0s 0s 235520110e-09 1s 1s 235523710e-09 0s 0s 235528790e-09 0s 0s 235530350e-09 1s 1s 235533950e-09 0s 0s 235539070e-09 0s 0s 235540590e-09 1s 1s 235544190e-09 0s 0s 235549350e-09 0s 0s 235550830e-09 1s 1s 235554430e-09 0s 0s 235559630e-09 0s 0s 235561070e-09 1s 1s 235564670e-09 0s 0s 235569910e-09 0s 0s 235571310e-09 1s 1s 235574910e-09 0s 0s 235580190e-09 0s 0s 235581550e-09 1s 1s 235585150e-09 0s 0s 235590470e-09 0s 0s 235591790e-09 1s 1s 235595390e-09 0s 0s 235600750e-09 0s 0s 235602030e-09 1s 1s 235605630e-09 0s 0s 235611030e-09 0s 0s 235612270e-09 1s 1s 235615870e-09 0s 0s 235621310e-09 0s 0s 235622510e-09 1s 1s 235626110e-09 0s 0s 235631590e-09 0s 0s 235632750e-09 1s 1s 235636350e-09 0s 0s 235641870e-09 0s 0s 235642990e-09 1s 1s 235646590e-09 0s 0s 235652150e-09 0s 0s 235653230e-09 1s 1s 235656830e-09 0s 0s 235662430e-09 0s 0s 235663470e-09 1s 1s 235667070e-09 0s 0s 235672710e-09 0s 0s 235673710e-09 1s 1s 235677310e-09 0s 0s 235682990e-09 0s 0s 235683950e-09 1s 1s 235687550e-09 0s 0s 235693270e-09 0s 0s 235694190e-09 1s 1s 235697790e-09 0s 0s 235703550e-09 0s 0s 235704430e-09 1s 1s 235708030e-09 0s 0s 235713830e-09 0s 0s 235714670e-09 1s 1s 235718270e-09 0s 0s 235724110e-09 0s 0s 235724910e-09 1s 1s 235728510e-09 0s 0s 235734390e-09 0s 0s 235735150e-09 1s 1s 235738750e-09 0s 0s 235744670e-09 0s 0s 235745390e-09 1s 1s 235748990e-09 0s 0s 235754950e-09 0s 0s 235755630e-09 1s 1s 235759230e-09 0s 0s 235765230e-09 0s 0s 235765870e-09 1s 1s 235769470e-09 0s 0s 235775510e-09 0s 0s 235776110e-09 1s 1s 235779710e-09 0s 0s 235785790e-09 0s 0s 235786350e-09 1s 1s 235789950e-09 0s 0s 235796070e-09 0s 0s 235796590e-09 1s 1s 235800190e-09 0s 0s 235806350e-09 0s 0s 235806830e-09 1s 1s 235810430e-09 0s 0s 235816630e-09 0s 0s 235817070e-09 1s 1s 235820670e-09 0s 0s 235826910e-09 0s 0s 235827310e-09 1s 1s 235830910e-09 0s 0s 235837190e-09 0s 0s 235837550e-09 1s 1s 235841150e-09 0s 0s 235847470e-09 0s 0s 235847790e-09 1s 1s 235851390e-09 0s 0s 235857750e-09 0s 0s 235858030e-09 1s 1s 235861630e-09 0s 0s 235868030e-09 0s 0s 235868270e-09 1s 1s 235871870e-09 0s 0s 235878310e-09 0s 0s 235878510e-09 1s 1s 235882110e-09 0s 0s 235888590e-09 0s 0s 235888750e-09 1s 1s 235892350e-09 0s 0s 235898870e-09 0s 0s 235898990e-09 1s 1s 235902590e-09 0s 0s 235909150e-09 0s 0s 235909230e-09 1s 1s 235912830e-09 0s 0s 235919430e-09 0s 0s 235919470e-09 1s 1s 235923070e-09 0s 0s 235929710e-09 1s 1s 235929750e-09 1s 1s 235933350e-09 0s 0s 235939950e-09 1s 1s 235940030e-09 1s 1s 235943590e-09 0s 0s 235950190e-09 1s 1s 235950310e-09 1s 1s 235953830e-09 0s 0s 235960430e-09 1s 1s 235960590e-09 1s 1s 235964070e-09 0s 0s 235970670e-09 1s 1s 235970870e-09 1s 1s 235974310e-09 0s 0s 235980910e-09 1s 1s 235981150e-09 1s 1s 235984550e-09 0s 0s 235991150e-09 1s 1s 235991430e-09 1s 1s 235994790e-09 0s 0s 236001390e-09 1s 1s 236001710e-09 1s 1s 236005030e-09 0s 0s 236011630e-09 1s 1s 236011990e-09 1s 1s 236015270e-09 0s 0s 236021870e-09 1s 1s 236022270e-09 1s 1s 236025510e-09 0s 0s 236032110e-09 1s 1s 236032550e-09 1s 1s 236035750e-09 0s 0s 236042350e-09 1s 1s 236042830e-09 1s 1s 236045990e-09 0s 0s 236052590e-09 1s 1s 236053110e-09 1s 1s 236056230e-09 0s 0s 236062830e-09 1s 1s 236063390e-09 1s 1s 236066470e-09 0s 0s 236073070e-09 1s 1s 236073670e-09 1s 1s 236076710e-09 0s 0s 236083310e-09 1s 1s 236083950e-09 1s 1s 236086950e-09 0s 0s 236093550e-09 1s 1s 236094230e-09 1s 1s 236097190e-09 0s 0s 236103790e-09 1s 1s 236104510e-09 1s 1s 236107430e-09 0s 0s 236114030e-09 1s 1s 236114790e-09 1s 1s 236117670e-09 0s 0s 236124270e-09 1s 1s 236125070e-09 1s 1s 236127910e-09 0s 0s 236134510e-09 1s 1s 236135350e-09 1s 1s 236138150e-09 0s 0s 236144750e-09 1s 1s 236145630e-09 1s 1s 236148390e-09 0s 0s 236154990e-09 1s 1s 236155910e-09 1s 1s 236158630e-09 0s 0s 236165230e-09 1s 1s 236166190e-09 1s 1s 236168870e-09 0s 0s 236175470e-09 1s 1s 236176470e-09 1s 1s 236179110e-09 0s 0s 236185710e-09 1s 1s 236186750e-09 1s 1s 236189350e-09 0s 0s 236195950e-09 1s 1s 236197030e-09 1s 1s 236199590e-09 0s 0s 236206190e-09 1s 1s 236207310e-09 1s 1s 236209830e-09 0s 0s 236216430e-09 1s 1s 236217590e-09 1s 1s 236220070e-09 0s 0s 236226670e-09 1s 1s 236227870e-09 1s 1s 236230310e-09 0s 0s 236236910e-09 1s 1s 236238150e-09 1s 1s 236240550e-09 0s 0s 236247150e-09 1s 1s 236248430e-09 1s 1s 236250790e-09 0s 0s 236257390e-09 1s 1s 236258710e-09 1s 1s 236261030e-09 0s 0s 236267630e-09 1s 1s 236268990e-09 1s 1s 236271270e-09 0s 0s 236277870e-09 1s 1s 236279270e-09 1s 1s 236281510e-09 0s 0s 236288110e-09 1s 1s 236289550e-09 1s 1s 236291750e-09 0s 0s 236298350e-09 1s 1s 236299830e-09 1s 1s 236301990e-09 0s 0s 236308590e-09 1s 1s 236310110e-09 1s 1s 236312230e-09 0s 0s 236318830e-09 1s 1s 236320390e-09 1s 1s 236322470e-09 0s 0s 236329070e-09 1s 1s 236330670e-09 1s 1s 236332710e-09 0s 0s 236339310e-09 1s 1s 236340950e-09 1s 1s 236342950e-09 0s 0s 236349550e-09 1s 1s 236351230e-09 1s 1s 236353190e-09 0s 0s 236359790e-09 1s 1s 236361510e-09 1s 1s 236363430e-09 0s 0s 236370030e-09 1s 1s 236371790e-09 1s 1s 236373670e-09 0s 0s 236380270e-09 1s 1s 236382070e-09 1s 1s 236383910e-09 0s 0s 236390510e-09 1s 1s 236392350e-09 1s 1s 236394150e-09 0s 0s 236400750e-09 1s 1s 236402630e-09 1s 1s 236404390e-09 0s 0s 236410990e-09 1s 1s 236412910e-09 1s 1s 236414630e-09 0s 0s 236421230e-09 1s 1s 236423190e-09 1s 1s 236424870e-09 0s 0s 236431470e-09 1s 1s 236433470e-09 1s 1s 236435110e-09 0s 0s 236441710e-09 1s 1s 236443750e-09 1s 1s 236445350e-09 0s 0s 236451950e-09 1s 1s 236454030e-09 1s 1s 236455590e-09 0s 0s 236462190e-09 1s 1s 236464310e-09 1s 1s 236465830e-09 0s 0s 236472430e-09 1s 1s 236474590e-09 1s 1s 236476070e-09 0s 0s 236482670e-09 1s 1s 236484870e-09 1s 1s 236486310e-09 0s 0s 236492910e-09 1s 1s 236495150e-09 1s 1s 236496550e-09 0s 0s 236503150e-09 1s 1s 236505430e-09 1s 1s 236506790e-09 0s 0s 236513390e-09 1s 1s 236515710e-09 1s 1s 236517030e-09 0s 0s 236523630e-09 1s 1s 236525990e-09 1s 1s 236527270e-09 0s 0s 236533870e-09 1s 1s 236536270e-09 1s 1s 236537510e-09 0s 0s 236544110e-09 1s 1s 236546550e-09 1s 1s 236547750e-09 0s 0s 236554350e-09 1s 1s 236556830e-09 1s 1s 236557990e-09 0s 0s 236564590e-09 1s 1s 236567110e-09 1s 1s 236568230e-09 0s 0s 236574830e-09 1s 1s 236577390e-09 1s 1s 236578470e-09 0s 0s 236585070e-09 1s 1s 236587670e-09 1s 1s 236588710e-09 0s 0s 236595310e-09 1s 1s 236597950e-09 1s 1s 236598950e-09 0s 0s 236605550e-09 1s 1s 236608230e-09 1s 1s 236609190e-09 0s 0s 236615790e-09 1s 1s 236618510e-09 1s 1s 236619430e-09 0s 0s 236626030e-09 1s 1s 236628790e-09 1s 1s 236629670e-09 0s 0s 236636270e-09 1s 1s 236639070e-09 1s 1s 236639910e-09 0s 0s 236646510e-09 1s 1s 236649350e-09 1s 1s 236650150e-09 0s 0s 236656750e-09 1s 1s 236659630e-09 1s 1s 236660390e-09 0s 0s 236666990e-09 1s 1s 236669910e-09 1s 1s 236670630e-09 0s 0s 236677230e-09 1s 1s 236680190e-09 1s 1s 236680870e-09 0s 0s 236687470e-09 1s 1s 236690470e-09 1s 1s 236691110e-09 0s 0s 236697710e-09 1s 1s 236700750e-09 1s 1s 236701350e-09 0s 0s 236707950e-09 1s 1s 236711030e-09 1s 1s 236711590e-09 0s 0s 236718190e-09 1s 1s 236721310e-09 1s 1s 236721830e-09 0s 0s 236728430e-09 1s 1s 236731590e-09 1s 1s 236732070e-09 0s 0s 236738670e-09 1s 1s 236741870e-09 1s 1s 236742310e-09 0s 0s 236748910e-09 1s 1s 236752150e-09 1s 1s 236752550e-09 0s 0s 236759150e-09 1s 1s 236762430e-09 1s 1s 236762790e-09 0s 0s 236769390e-09 1s 1s 236772710e-09 1s 1s 236773030e-09 0s 0s 236779630e-09 1s 1s 236782990e-09 1s 1s 236783270e-09 0s 0s 236789870e-09 1s 1s 236793270e-09 1s 1s 236793510e-09 0s 0s 236800110e-09 1s 1s 236803550e-09 1s 1s 236803750e-09 0s 0s 236810350e-09 1s 1s 236813830e-09 1s 1s 236813990e-09 0s 0s 236820590e-09 1s 1s 236824110e-09 1s 1s 236824230e-09 0s 0s 236830830e-09 1s 1s 236834390e-09 1s 1s 236834470e-09 0s 0s 236841070e-09 1s 1s 236844670e-09 1s 1s 236844710e-09 0s 0s 236851310e-09 1s 1s 236854950e-09 0s 0s 236861550e-09 1s 1s 236865190e-09 0s 0s 236865230e-09 0s 0s 236871790e-09 1s 1s 236875430e-09 0s 0s 236875510e-09 0s 0s 236882030e-09 1s 1s 236885670e-09 0s 0s 236885790e-09 0s 0s 236892270e-09 1s 1s 236895910e-09 0s 0s 236896070e-09 0s 0s 236902510e-09 1s 1s 236906150e-09 0s 0s 236906350e-09 0s 0s 236912750e-09 1s 1s 236916390e-09 0s 0s 236916630e-09 0s 0s 236922990e-09 1s 1s 236926630e-09 0s 0s 236926910e-09 0s 0s 236933230e-09 1s 1s 236936870e-09 0s 0s 236937190e-09 0s 0s 236943470e-09 1s 1s 236947110e-09 0s 0s 236947470e-09 0s 0s 236953710e-09 1s 1s 236957350e-09 0s 0s 236957750e-09 0s 0s 236963950e-09 1s 1s 236967590e-09 0s 0s 236968030e-09 0s 0s 236974190e-09 1s 1s 236977830e-09 0s 0s 236978310e-09 0s 0s 236984430e-09 1s 1s 236988070e-09 0s 0s 236988590e-09 0s 0s 236994670e-09 1s 1s 236998310e-09 0s 0s 236998870e-09 0s 0s 237004910e-09 1s 1s 237008550e-09 0s 0s 237009150e-09 0s 0s 237015150e-09 1s 1s 237018790e-09 0s 0s 237019430e-09 0s 0s 237025390e-09 1s 1s 237029030e-09 0s 0s 237029710e-09 0s 0s 237035630e-09 1s 1s 237039270e-09 0s 0s 237039990e-09 0s 0s 237045870e-09 1s 1s 237049510e-09 0s 0s 237050270e-09 0s 0s 237056110e-09 1s 1s 237059750e-09 0s 0s 237060550e-09 0s 0s 237066350e-09 1s 1s 237069990e-09 0s 0s 237070830e-09 0s 0s 237076590e-09 1s 1s 237080230e-09 0s 0s 237081110e-09 0s 0s 237086830e-09 1s 1s 237090470e-09 0s 0s 237091390e-09 0s 0s 237097070e-09 1s 1s 237100710e-09 0s 0s 237101670e-09 0s 0s 237107310e-09 1s 1s 237110950e-09 0s 0s 237111950e-09 0s 0s 237117550e-09 1s 1s 237121190e-09 0s 0s 237122230e-09 0s 0s 237127790e-09 1s 1s 237131430e-09 0s 0s 237132510e-09 0s 0s 237138030e-09 1s 1s 237141670e-09 0s 0s 237142790e-09 0s 0s 237148270e-09 1s 1s 237151910e-09 0s 0s 237153070e-09 0s 0s 237158510e-09 1s 1s 237162150e-09 0s 0s 237163350e-09 0s 0s 237168750e-09 1s 1s 237172390e-09 0s 0s 237173630e-09 0s 0s 237178990e-09 1s 1s 237182630e-09 0s 0s 237183910e-09 0s 0s 237189230e-09 1s 1s 237192870e-09 0s 0s 237194190e-09 0s 0s 237199470e-09 1s 1s 237203110e-09 0s 0s 237204470e-09 0s 0s 237209710e-09 1s 1s 237213350e-09 0s 0s 237214750e-09 0s 0s 237219950e-09 1s 1s 237223590e-09 0s 0s 237225030e-09 0s 0s 237230190e-09 1s 1s 237233830e-09 0s 0s 237235310e-09 0s 0s 237240430e-09 1s 1s 237244070e-09 0s 0s 237245590e-09 0s 0s 237250670e-09 1s 1s 237254310e-09 0s 0s 237255870e-09 0s 0s 237260910e-09 1s 1s 237264550e-09 0s 0s 237266150e-09 0s 0s 237271150e-09 1s 1s 237274790e-09 0s 0s 237276430e-09 0s 0s 237281390e-09 1s 1s 237285030e-09 0s 0s 237286710e-09 0s 0s 237291630e-09 1s 1s 237295270e-09 0s 0s 237296990e-09 0s 0s 237301870e-09 1s 1s 237305510e-09 0s 0s 237307270e-09 0s 0s 237312110e-09 1s 1s 237315750e-09 0s 0s 237317550e-09 0s 0s 237322350e-09 1s 1s 237325990e-09 0s 0s 237327830e-09 0s 0s 237332590e-09 1s 1s 237336230e-09 0s 0s 237338110e-09 0s 0s 237342830e-09 1s 1s 237346470e-09 0s 0s 237348390e-09 0s 0s 237353070e-09 1s 1s 237356710e-09 0s 0s 237358670e-09 0s 0s 237363310e-09 1s 1s 237366950e-09 0s 0s 237368950e-09 0s 0s 237373550e-09 1s 1s 237377190e-09 0s 0s 237379230e-09 0s 0s 237383790e-09 1s 1s 237387430e-09 0s 0s 237389510e-09 0s 0s 237394030e-09 1s 1s 237397670e-09 0s 0s 237399790e-09 0s 0s 237404270e-09 1s 1s 237407910e-09 0s 0s 237410070e-09 0s 0s 237414510e-09 1s 1s 237418150e-09 0s 0s 237420350e-09 0s 0s 237424750e-09 1s 1s 237428390e-09 0s 0s 237430630e-09 0s 0s 237434990e-09 1s 1s 237438630e-09 0s 0s 237440910e-09 0s 0s 237445230e-09 1s 1s 237448870e-09 0s 0s 237451190e-09 0s 0s 237455470e-09 1s 1s 237459110e-09 0s 0s 237461470e-09 0s 0s 237465710e-09 1s 1s 237469350e-09 0s 0s 237471750e-09 0s 0s 237475950e-09 1s 1s 237479590e-09 0s 0s 237482030e-09 0s 0s 237486190e-09 1s 1s 237489830e-09 0s 0s 237492310e-09 0s 0s 237496430e-09 1s 1s 237500070e-09 0s 0s 237502590e-09 0s 0s 237506670e-09 1s 1s 237510310e-09 0s 0s 237512870e-09 0s 0s 237516910e-09 1s 1s 237520550e-09 0s 0s 237523150e-09 0s 0s 237527150e-09 1s 1s 237530790e-09 0s 0s 237533430e-09 0s 0s 237537390e-09 1s 1s 237541030e-09 0s 0s 237543710e-09 0s 0s 237547630e-09 1s 1s 237551270e-09 0s 0s 237553990e-09 0s 0s 237557870e-09 1s 1s 237561510e-09 0s 0s 237564270e-09 0s 0s 237568110e-09 1s 1s 237571750e-09 0s 0s 237574550e-09 0s 0s 237578350e-09 1s 1s 237581990e-09 0s 0s 237584830e-09 0s 0s 237588590e-09 1s 1s 237592230e-09 0s 0s 237595110e-09 0s 0s 237598830e-09 1s 1s 237602470e-09 0s 0s 237605390e-09 0s 0s 237609070e-09 1s 1s 237612710e-09 0s 0s 237615670e-09 0s 0s 237619310e-09 1s 1s 237622950e-09 0s 0s 237625950e-09 0s 0s 237629550e-09 1s 1s 237633190e-09 0s 0s 237636230e-09 0s 0s 237639790e-09 1s 1s 237643430e-09 0s 0s 237646510e-09 0s 0s 237650030e-09 1s 1s 237653670e-09 0s 0s 237656790e-09 0s 0s 237660270e-09 1s 1s 237663910e-09 0s 0s 237667070e-09 0s 0s 237670510e-09 1s 1s 237674150e-09 0s 0s 237677350e-09 0s 0s 237680750e-09 1s 1s 237684390e-09 0s 0s 237687630e-09 0s 0s 237690990e-09 1s 1s 237694630e-09 0s 0s 237697910e-09 0s 0s 237701230e-09 1s 1s 237704870e-09 0s 0s 237708190e-09 0s 0s 237711470e-09 1s 1s 237715110e-09 0s 0s 237718470e-09 0s 0s 237721710e-09 1s 1s 237725350e-09 0s 0s 237728750e-09 0s 0s 237731950e-09 1s 1s 237735590e-09 0s 0s 237739030e-09 0s 0s 237742190e-09 1s 1s 237745830e-09 0s 0s 237749310e-09 0s 0s 237752430e-09 1s 1s 237756070e-09 0s 0s 237759590e-09 0s 0s 237762670e-09 1s 1s 237766310e-09 0s 0s 237769870e-09 0s 0s 237772910e-09 1s 1s 237776550e-09 0s 0s 237780150e-09 0s 0s 237783150e-09 1s 1s 237786790e-09 0s 0s 237790430e-09 0s 0s 237793390e-09 1s 1s 237797030e-09 0s 0s 237800710e-09 0s 0s 237803630e-09 1s 1s 237807270e-09 0s 0s 237810990e-09 0s 0s 237813870e-09 1s 1s 237817510e-09 0s 0s 237821270e-09 0s 0s 237824110e-09 1s 1s 237827750e-09 0s 0s 237831550e-09 0s 0s 237834350e-09 1s 1s 237837990e-09 0s 0s 237841830e-09 0s 0s 237844590e-09 1s 1s 237848230e-09 0s 0s 237852110e-09 0s 0s 237854830e-09 1s 1s 237858470e-09 0s 0s 237862390e-09 0s 0s 237865070e-09 1s 1s 237868710e-09 0s 0s 237872670e-09 0s 0s 237875310e-09 1s 1s 237878950e-09 0s 0s 237882950e-09 0s 0s 237885550e-09 1s 1s 237889190e-09 0s 0s 237893230e-09 0s 0s 237895790e-09 1s 1s 237899430e-09 0s 0s 237903510e-09 0s 0s 237906030e-09 1s 1s 237909670e-09 0s 0s 237913790e-09 0s 0s 237916270e-09 1s 1s 237919910e-09 0s 0s 237924070e-09 0s 0s 237926510e-09 1s 1s 237930150e-09 0s 0s 237934350e-09 0s 0s 237936750e-09 1s 1s 237940390e-09 0s 0s 237944630e-09 0s 0s 237946990e-09 1s 1s 237950630e-09 0s 0s 237954910e-09 0s 0s 237957230e-09 1s 1s 237960870e-09 0s 0s 237965190e-09 0s 0s 237967470e-09 1s 1s 237971110e-09 0s 0s 237975470e-09 0s 0s 237977710e-09 1s 1s 237981350e-09 0s 0s 237985750e-09 0s 0s 237987950e-09 1s 1s 237991590e-09 0s 0s 237996030e-09 0s 0s 237998190e-09 1s 1s 238001830e-09 0s 0s 238006310e-09 0s 0s 238008430e-09 1s 1s 238012070e-09 0s 0s 238016590e-09 0s 0s 238018670e-09 1s 1s 238022310e-09 0s 0s 238026870e-09 0s 0s 238028910e-09 1s 1s 238032550e-09 0s 0s 238037150e-09 0s 0s 238039150e-09 1s 1s 238042790e-09 0s 0s 238047430e-09 0s 0s 238049390e-09 1s 1s 238053030e-09 0s 0s 238057710e-09 0s 0s 238059630e-09 1s 1s 238063270e-09 0s 0s 238067990e-09 0s 0s 238069870e-09 1s 1s 238073510e-09 0s 0s 238078270e-09 0s 0s 238080110e-09 1s 1s 238083750e-09 0s 0s 238088550e-09 0s 0s 238090350e-09 1s 1s 238093990e-09 0s 0s 238098830e-09 0s 0s 238100590e-09 1s 1s 238104230e-09 0s 0s 238109110e-09 0s 0s 238110830e-09 1s 1s 238114470e-09 0s 0s 238119390e-09 0s 0s 238121070e-09 1s 1s 238124710e-09 0s 0s 238129670e-09 0s 0s 238131310e-09 1s 1s 238134950e-09 0s 0s 238139950e-09 0s 0s 238141550e-09 1s 1s 238145190e-09 0s 0s 238150230e-09 0s 0s 238151790e-09 1s 1s 238155430e-09 0s 0s 238160510e-09 0s 0s 238162030e-09 1s 1s 238165670e-09 0s 0s 238170790e-09 0s 0s 238172270e-09 1s 1s 238175910e-09 0s 0s 238181070e-09 0s 0s 238182510e-09 1s 1s 238186150e-09 0s 0s 238191350e-09 0s 0s 238192750e-09 1s 1s 238196390e-09 0s 0s 238201630e-09 0s 0s 238202990e-09 1s 1s 238206630e-09 0s 0s 238211910e-09 0s 0s 238213230e-09 1s 1s 238216870e-09 0s 0s 238222190e-09 0s 0s 238223470e-09 1s 1s 238227110e-09 0s 0s 238232470e-09 0s 0s 238233710e-09 1s 1s 238237350e-09 0s 0s 238242750e-09 0s 0s 238243950e-09 1s 1s 238247590e-09 0s 0s 238253030e-09 0s 0s 238254190e-09 1s 1s 238257830e-09 0s 0s 238263310e-09 0s 0s 238264430e-09 1s 1s 238268070e-09 0s 0s 238273590e-09 0s 0s 238274670e-09 1s 1s 238278310e-09 0s 0s 238283870e-09 0s 0s 238284910e-09 1s 1s 238288550e-09 0s 0s 238294150e-09 0s 0s 238295150e-09 1s 1s 238298790e-09 0s 0s 238304430e-09 0s 0s 238305390e-09 1s 1s 238309030e-09 0s 0s 238314710e-09 0s 0s 238315630e-09 1s 1s 238319270e-09 0s 0s 238324990e-09 0s 0s 238325870e-09 1s 1s 238329510e-09 0s 0s 238335270e-09 0s 0s 238336110e-09 1s 1s 238339750e-09 0s 0s 238345550e-09 0s 0s 238346350e-09 1s 1s 238349990e-09 0s 0s 238355830e-09 0s 0s 238356590e-09 1s 1s 238360230e-09 0s 0s 238366110e-09 0s 0s 238366830e-09 1s 1s 238370470e-09 0s 0s 238376390e-09 0s 0s 238377070e-09 1s 1s 238380710e-09 0s 0s 238386670e-09 0s 0s 238387310e-09 1s 1s 238390950e-09 0s 0s 238396950e-09 0s 0s 238397550e-09 1s 1s 238401190e-09 0s 0s 238407230e-09 0s 0s 238407790e-09 1s 1s 238411430e-09 0s 0s 238417510e-09 0s 0s 238418030e-09 1s 1s 238421670e-09 0s 0s 238427790e-09 0s 0s 238428270e-09 1s 1s 238431910e-09 0s 0s 238438070e-09 0s 0s 238438510e-09 1s 1s 238442150e-09 0s 0s 238448350e-09 0s 0s 238448750e-09 1s 1s 238452390e-09 0s 0s 238458630e-09 0s 0s 238458990e-09 1s 1s 238462630e-09 0s 0s 238468910e-09 0s 0s 238469230e-09 1s 1s 238472870e-09 0s 0s 238479190e-09 0s 0s 238479470e-09 1s 1s 238483110e-09 0s 0s 238489470e-09 0s 0s 238489710e-09 1s 1s 238493350e-09 0s 0s 238499750e-09 0s 0s 238499950e-09 1s 1s 238503590e-09 0s 0s 238510030e-09 0s 0s 238510190e-09 1s 1s 238513830e-09 0s 0s 238520310e-09 0s 0s 238520430e-09 1s 1s 238524070e-09 0s 0s 238530590e-09 0s 0s 238530670e-09 1s 1s 238534310e-09 0s 0s 238540870e-09 0s 0s 238540910e-09 1s 1s 238544550e-09 0s 0s 238551150e-09 1s 1s 238551190e-09 1s 1s 238554830e-09 0s 0s 238561390e-09 1s 1s 238561470e-09 1s 1s 238565070e-09 0s 0s 238571630e-09 1s 1s 238571750e-09 1s 1s 238575310e-09 0s 0s 238581870e-09 1s 1s 238582030e-09 1s 1s 238585550e-09 0s 0s 238592110e-09 1s 1s 238592310e-09 1s 1s 238595790e-09 0s 0s 238602350e-09 1s 1s 238602590e-09 1s 1s 238606030e-09 0s 0s 238612590e-09 1s 1s 238612870e-09 1s 1s 238616270e-09 0s 0s 238622830e-09 1s 1s 238623150e-09 1s 1s 238626510e-09 0s 0s 238633070e-09 1s 1s 238633430e-09 1s 1s 238636750e-09 0s 0s 238643310e-09 1s 1s 238643710e-09 1s 1s 238646990e-09 0s 0s 238653550e-09 1s 1s 238653990e-09 1s 1s 238657230e-09 0s 0s 238663790e-09 1s 1s 238664270e-09 1s 1s 238667470e-09 0s 0s 238674030e-09 1s 1s 238674550e-09 1s 1s 238677710e-09 0s 0s 238684270e-09 1s 1s 238684830e-09 1s 1s 238687950e-09 0s 0s 238694510e-09 1s 1s 238695110e-09 1s 1s 238698190e-09 0s 0s 238704750e-09 1s 1s 238705390e-09 1s 1s 238708430e-09 0s 0s 238714990e-09 1s 1s 238715670e-09 1s 1s 238718670e-09 0s 0s 238725230e-09 1s 1s 238725950e-09 1s 1s 238728910e-09 0s 0s 238735470e-09 1s 1s 238736230e-09 1s 1s 238739150e-09 0s 0s 238745710e-09 1s 1s 238746510e-09 1s 1s 238749390e-09 0s 0s 238755950e-09 1s 1s 238756790e-09 1s 1s 238759630e-09 0s 0s 238766190e-09 1s 1s 238767070e-09 1s 1s 238769870e-09 0s 0s 238776430e-09 1s 1s 238777350e-09 1s 1s 238780110e-09 0s 0s 238786670e-09 1s 1s 238787630e-09 1s 1s 238790350e-09 0s 0s 238796910e-09 1s 1s 238797910e-09 1s 1s 238800590e-09 0s 0s 238807150e-09 1s 1s 238808190e-09 1s 1s 238810830e-09 0s 0s 238817390e-09 1s 1s 238818470e-09 1s 1s 238821070e-09 0s 0s 238827630e-09 1s 1s 238828750e-09 1s 1s 238831310e-09 0s 0s 238837870e-09 1s 1s 238839030e-09 1s 1s 238841550e-09 0s 0s 238848110e-09 1s 1s 238849310e-09 1s 1s 238851790e-09 0s 0s 238858350e-09 1s 1s 238859590e-09 1s 1s 238862030e-09 0s 0s 238868590e-09 1s 1s 238869870e-09 1s 1s 238872270e-09 0s 0s 238878830e-09 1s 1s 238880150e-09 1s 1s 238882510e-09 0s 0s 238889070e-09 1s 1s 238890430e-09 1s 1s 238892750e-09 0s 0s 238899310e-09 1s 1s 238900710e-09 1s 1s 238902990e-09 0s 0s 238909550e-09 1s 1s 238910990e-09 1s 1s 238913230e-09 0s 0s 238919790e-09 1s 1s 238921270e-09 1s 1s 238923470e-09 0s 0s 238930030e-09 1s 1s 238931550e-09 1s 1s 238933710e-09 0s 0s 238940270e-09 1s 1s 238941830e-09 1s 1s 238943950e-09 0s 0s 238950510e-09 1s 1s 238952110e-09 1s 1s 238954190e-09 0s 0s 238960750e-09 1s 1s 238962390e-09 1s 1s 238964430e-09 0s 0s 238970990e-09 1s 1s 238972670e-09 1s 1s 238974670e-09 0s 0s 238981230e-09 1s 1s 238982950e-09 1s 1s 238984910e-09 0s 0s 238991470e-09 1s 1s 238993230e-09 1s 1s 238995150e-09 0s 0s 239001710e-09 1s 1s 239003510e-09 1s 1s 239005390e-09 0s 0s 239011950e-09 1s 1s 239013790e-09 1s 1s 239015630e-09 0s 0s 239022190e-09 1s 1s 239024070e-09 1s 1s 239025870e-09 0s 0s 239032430e-09 1s 1s 239034350e-09 1s 1s 239036110e-09 0s 0s 239042670e-09 1s 1s 239044630e-09 1s 1s 239046350e-09 0s 0s 239052910e-09 1s 1s 239054910e-09 1s 1s 239056590e-09 0s 0s 239063150e-09 1s 1s 239065190e-09 1s 1s 239066830e-09 0s 0s 239073390e-09 1s 1s 239075470e-09 1s 1s 239077070e-09 0s 0s 239083630e-09 1s 1s 239085750e-09 1s 1s 239087310e-09 0s 0s 239093870e-09 1s 1s 239096030e-09 1s 1s 239097550e-09 0s 0s 239104110e-09 1s 1s 239106310e-09 1s 1s 239107790e-09 0s 0s 239114350e-09 1s 1s 239116590e-09 1s 1s 239118030e-09 0s 0s 239124590e-09 1s 1s 239126870e-09 1s 1s 239128270e-09 0s 0s 239134830e-09 1s 1s 239137150e-09 1s 1s 239138510e-09 0s 0s 239145070e-09 1s 1s 239147430e-09 1s 1s 239148750e-09 0s 0s 239155310e-09 1s 1s 239157710e-09 1s 1s 239158990e-09 0s 0s 239165550e-09 1s 1s 239167990e-09 1s 1s 239169230e-09 0s 0s 239175790e-09 1s 1s 239178270e-09 1s 1s 239179470e-09 0s 0s 239186030e-09 1s 1s 239188550e-09 1s 1s 239189710e-09 0s 0s 239196270e-09 1s 1s 239198830e-09 1s 1s 239199950e-09 0s 0s 239206510e-09 1s 1s 239209110e-09 1s 1s 239210190e-09 0s 0s 239216750e-09 1s 1s 239219390e-09 1s 1s 239220430e-09 0s 0s 239226990e-09 1s 1s 239229670e-09 1s 1s 239230670e-09 0s 0s 239237230e-09 1s 1s 239239950e-09 1s 1s 239240910e-09 0s 0s 239247470e-09 1s 1s 239250230e-09 1s 1s 239251150e-09 0s 0s 239257710e-09 1s 1s 239260510e-09 1s 1s 239261390e-09 0s 0s 239267950e-09 1s 1s 239270790e-09 1s 1s 239271630e-09 0s 0s 239278190e-09 1s 1s 239281070e-09 1s 1s 239281870e-09 0s 0s 239288430e-09 1s 1s 239291350e-09 1s 1s 239292110e-09 0s 0s 239298670e-09 1s 1s 239301630e-09 1s 1s 239302350e-09 0s 0s 239308910e-09 1s 1s 239311910e-09 1s 1s 239312590e-09 0s 0s 239319150e-09 1s 1s 239322190e-09 1s 1s 239322830e-09 0s 0s 239329390e-09 1s 1s 239332470e-09 1s 1s 239333070e-09 0s 0s 239339630e-09 1s 1s 239342750e-09 1s 1s 239343310e-09 0s 0s 239349870e-09 1s 1s 239353030e-09 1s 1s 239353550e-09 0s 0s 239360110e-09 1s 1s 239363310e-09 1s 1s 239363790e-09 0s 0s 239370350e-09 1s 1s 239373590e-09 1s 1s 239374030e-09 0s 0s 239380590e-09 1s 1s 239383870e-09 1s 1s 239384270e-09 0s 0s 239390830e-09 1s 1s 239394150e-09 1s 1s 239394510e-09 0s 0s 239401070e-09 1s 1s 239404430e-09 1s 1s 239404750e-09 0s 0s 239411310e-09 1s 1s 239414710e-09 1s 1s 239414990e-09 0s 0s 239421550e-09 1s 1s 239424990e-09 1s 1s 239425230e-09 0s 0s 239431790e-09 1s 1s 239435270e-09 1s 1s 239435470e-09 0s 0s 239442030e-09 1s 1s 239445550e-09 1s 1s 239445710e-09 0s 0s 239452270e-09 1s 1s 239455830e-09 1s 1s 239455950e-09 0s 0s 239462510e-09 1s 1s 239466110e-09 1s 1s 239466190e-09 0s 0s 239472750e-09 1s 1s 239476390e-09 1s 1s 239476430e-09 0s 0s 239482990e-09 1s 1s 239486670e-09 0s 0s 239493230e-09 1s 1s 239496910e-09 0s 0s 239496950e-09 0s 0s 239503470e-09 1s 1s 239507150e-09 0s 0s 239507230e-09 0s 0s 239513710e-09 1s 1s 239517390e-09 0s 0s 239517510e-09 0s 0s 239523950e-09 1s 1s 239527630e-09 0s 0s 239527790e-09 0s 0s 239534190e-09 1s 1s 239537870e-09 0s 0s 239538070e-09 0s 0s 239544430e-09 1s 1s 239548110e-09 0s 0s 239548350e-09 0s 0s 239554670e-09 1s 1s 239558350e-09 0s 0s 239558630e-09 0s 0s 239564910e-09 1s 1s 239568590e-09 0s 0s 239568910e-09 0s 0s 239575150e-09 1s 1s 239578830e-09 0s 0s 239579190e-09 0s 0s 239585390e-09 1s 1s 239589070e-09 0s 0s 239589470e-09 0s 0s 239595630e-09 1s 1s 239599310e-09 0s 0s 239599750e-09 0s 0s 239605870e-09 1s 1s 239609550e-09 0s 0s 239610030e-09 0s 0s 239616110e-09 1s 1s 239619790e-09 0s 0s 239620310e-09 0s 0s 239626350e-09 1s 1s 239630030e-09 0s 0s 239630590e-09 0s 0s 239636590e-09 1s 1s 239640270e-09 0s 0s 239640870e-09 0s 0s 239646830e-09 1s 1s 239650510e-09 0s 0s 239651150e-09 0s 0s 239657070e-09 1s 1s 239660750e-09 0s 0s 239661430e-09 0s 0s 239667310e-09 1s 1s 239670990e-09 0s 0s 239671710e-09 0s 0s 239677550e-09 1s 1s 239681230e-09 0s 0s 239681990e-09 0s 0s 239687790e-09 1s 1s 239691470e-09 0s 0s 239692270e-09 0s 0s 239698030e-09 1s 1s 239701710e-09 0s 0s 239702550e-09 0s 0s 239708270e-09 1s 1s 239711950e-09 0s 0s 239712830e-09 0s 0s 239718510e-09 1s 1s 239722190e-09 0s 0s 239723110e-09 0s 0s 239728750e-09 1s 1s 239732430e-09 0s 0s 239733390e-09 0s 0s 239738990e-09 1s 1s 239742670e-09 0s 0s 239743670e-09 0s 0s 239749230e-09 1s 1s 239752910e-09 0s 0s 239753950e-09 0s 0s 239759470e-09 1s 1s 239763150e-09 0s 0s 239764230e-09 0s 0s 239769710e-09 1s 1s 239773390e-09 0s 0s 239774510e-09 0s 0s 239779950e-09 1s 1s 239783630e-09 0s 0s 239784790e-09 0s 0s 239790190e-09 1s 1s 239793870e-09 0s 0s 239795070e-09 0s 0s 239800430e-09 1s 1s 239804110e-09 0s 0s 239805350e-09 0s 0s 239810670e-09 1s 1s 239814350e-09 0s 0s 239815630e-09 0s 0s 239820910e-09 1s 1s 239824590e-09 0s 0s 239825910e-09 0s 0s 239831150e-09 1s 1s 239834830e-09 0s 0s 239836190e-09 0s 0s 239841390e-09 1s 1s 239845070e-09 0s 0s 239846470e-09 0s 0s 239851630e-09 1s 1s 239855310e-09 0s 0s 239856750e-09 0s 0s 239861870e-09 1s 1s 239865550e-09 0s 0s 239867030e-09 0s 0s 239872110e-09 1s 1s 239875790e-09 0s 0s 239877310e-09 0s 0s 239882350e-09 1s 1s 239886030e-09 0s 0s 239887590e-09 0s 0s 239892590e-09 1s 1s 239896270e-09 0s 0s 239897870e-09 0s 0s 239902830e-09 1s 1s 239906510e-09 0s 0s 239908150e-09 0s 0s 239913070e-09 1s 1s 239916750e-09 0s 0s 239918430e-09 0s 0s 239923310e-09 1s 1s 239926990e-09 0s 0s 239928710e-09 0s 0s 239933550e-09 1s 1s 239937230e-09 0s 0s 239938990e-09 0s 0s 239943790e-09 1s 1s 239947470e-09 0s 0s 239949270e-09 0s 0s 239954030e-09 1s 1s 239957710e-09 0s 0s 239959550e-09 0s 0s 239964270e-09 1s 1s 239967950e-09 0s 0s 239969830e-09 0s 0s 239974510e-09 1s 1s 239978190e-09 0s 0s 239980110e-09 0s 0s 239984750e-09 1s 1s 239988430e-09 0s 0s 239990390e-09 0s 0s 239994990e-09 1s 1s 239998670e-09 0s 0s 240000670e-09 0s 0s 240005230e-09 1s 1s 240008910e-09 0s 0s 240010950e-09 0s 0s 240015470e-09 1s 1s 240019150e-09 0s 0s 240021230e-09 0s 0s 240025710e-09 1s 1s 240029390e-09 0s 0s 240031510e-09 0s 0s 240035950e-09 1s 1s 240039630e-09 0s 0s 240041790e-09 0s 0s 240046190e-09 1s 1s 240049870e-09 0s 0s 240052070e-09 0s 0s 240056430e-09 1s 1s 240060110e-09 0s 0s 240062350e-09 0s 0s 240066670e-09 1s 1s 240070350e-09 0s 0s 240072630e-09 0s 0s 240076910e-09 1s 1s 240080590e-09 0s 0s 240082910e-09 0s 0s 240087150e-09 1s 1s 240090830e-09 0s 0s 240093190e-09 0s 0s 240097390e-09 1s 1s 240101070e-09 0s 0s 240103470e-09 0s 0s 240107630e-09 1s 1s 240111310e-09 0s 0s 240113750e-09 0s 0s 240117870e-09 1s 1s 240121550e-09 0s 0s 240124030e-09 0s 0s 240128110e-09 1s 1s 240131790e-09 0s 0s 240134310e-09 0s 0s 240138350e-09 1s 1s 240142030e-09 0s 0s 240144590e-09 0s 0s 240148590e-09 1s 1s 240152270e-09 0s 0s 240154870e-09 0s 0s 240158830e-09 1s 1s 240162510e-09 0s 0s 240165150e-09 0s 0s 240169070e-09 1s 1s 240172750e-09 0s 0s 240175430e-09 0s 0s 240179310e-09 1s 1s 240182990e-09 0s 0s 240185710e-09 0s 0s 240189550e-09 1s 1s 240193230e-09 0s 0s 240195990e-09 0s 0s 240199790e-09 1s 1s 240203470e-09 0s 0s 240206270e-09 0s 0s 240210030e-09 1s 1s 240213710e-09 0s 0s 240216550e-09 0s 0s 240220270e-09 1s 1s 240223950e-09 0s 0s 240226830e-09 0s 0s 240230510e-09 1s 1s 240234190e-09 0s 0s 240237110e-09 0s 0s 240240750e-09 1s 1s 240244430e-09 0s 0s 240247390e-09 0s 0s 240250990e-09 1s 1s 240254670e-09 0s 0s 240257670e-09 0s 0s 240261230e-09 1s 1s 240264910e-09 0s 0s 240267950e-09 0s 0s 240271470e-09 1s 1s 240275150e-09 0s 0s 240278230e-09 0s 0s 240281710e-09 1s 1s 240285390e-09 0s 0s 240288510e-09 0s 0s 240291950e-09 1s 1s 240295630e-09 0s 0s 240298790e-09 0s 0s 240302190e-09 1s 1s 240305870e-09 0s 0s 240309070e-09 0s 0s 240312430e-09 1s 1s 240316110e-09 0s 0s 240319350e-09 0s 0s 240322670e-09 1s 1s 240326350e-09 0s 0s 240329630e-09 0s 0s 240332910e-09 1s 1s 240336590e-09 0s 0s 240339910e-09 0s 0s 240343150e-09 1s 1s 240346830e-09 0s 0s 240350190e-09 0s 0s 240353390e-09 1s 1s 240357070e-09 0s 0s 240360470e-09 0s 0s 240363630e-09 1s 1s 240367310e-09 0s 0s 240370750e-09 0s 0s 240373870e-09 1s 1s 240377550e-09 0s 0s 240381030e-09 0s 0s 240384110e-09 1s 1s 240387790e-09 0s 0s 240391310e-09 0s 0s 240394350e-09 1s 1s 240398030e-09 0s 0s 240401590e-09 0s 0s 240404590e-09 1s 1s 240408270e-09 0s 0s 240411870e-09 0s 0s 240414830e-09 1s 1s 240418510e-09 0s 0s 240422150e-09 0s 0s 240425070e-09 1s 1s 240428750e-09 0s 0s 240432430e-09 0s 0s 240435310e-09 1s 1s 240438990e-09 0s 0s 240442710e-09 0s 0s 240445550e-09 1s 1s 240449230e-09 0s 0s 240452990e-09 0s 0s 240455790e-09 1s 1s 240459470e-09 0s 0s 240463270e-09 0s 0s 240466030e-09 1s 1s 240469710e-09 0s 0s 240473550e-09 0s 0s 240476270e-09 1s 1s 240479950e-09 0s 0s 240483830e-09 0s 0s 240486510e-09 1s 1s 240490190e-09 0s 0s 240494110e-09 0s 0s 240496750e-09 1s 1s 240500430e-09 0s 0s 240504390e-09 0s 0s 240506990e-09 1s 1s 240510670e-09 0s 0s 240514670e-09 0s 0s 240517230e-09 1s 1s 240520910e-09 0s 0s 240524950e-09 0s 0s 240527470e-09 1s 1s 240531150e-09 0s 0s 240535230e-09 0s 0s 240537710e-09 1s 1s 240541390e-09 0s 0s 240545510e-09 0s 0s 240547950e-09 1s 1s 240551630e-09 0s 0s 240555790e-09 0s 0s 240558190e-09 1s 1s 240561870e-09 0s 0s 240566070e-09 0s 0s 240568430e-09 1s 1s 240572110e-09 0s 0s 240576350e-09 0s 0s 240578670e-09 1s 1s 240582350e-09 0s 0s 240586630e-09 0s 0s 240588910e-09 1s 1s 240592590e-09 0s 0s 240596910e-09 0s 0s 240599150e-09 1s 1s 240602830e-09 0s 0s 240607190e-09 0s 0s 240609390e-09 1s 1s 240613070e-09 0s 0s 240617470e-09 0s 0s 240619630e-09 1s 1s 240623310e-09 0s 0s 240627750e-09 0s 0s 240629870e-09 1s 1s 240633550e-09 0s 0s 240638030e-09 0s 0s 240640110e-09 1s 1s 240643790e-09 0s 0s 240648310e-09 0s 0s 240650350e-09 1s 1s 240654030e-09 0s 0s 240658590e-09 0s 0s 240660590e-09 1s 1s 240664270e-09 0s 0s 240668870e-09 0s 0s 240670830e-09 1s 1s 240674510e-09 0s 0s 240679150e-09 0s 0s 240681070e-09 1s 1s 240684750e-09 0s 0s 240689430e-09 0s 0s 240691310e-09 1s 1s 240694990e-09 0s 0s 240699710e-09 0s 0s 240701550e-09 1s 1s 240705230e-09 0s 0s 240709990e-09 0s 0s 240711790e-09 1s 1s 240715470e-09 0s 0s 240720270e-09 0s 0s 240722030e-09 1s 1s 240725710e-09 0s 0s 240730550e-09 0s 0s 240732270e-09 1s 1s 240735950e-09 0s 0s 240740830e-09 0s 0s 240742510e-09 1s 1s 240746190e-09 0s 0s 240751110e-09 0s 0s 240752750e-09 1s 1s 240756430e-09 0s 0s 240761390e-09 0s 0s 240762990e-09 1s 1s 240766670e-09 0s 0s 240771670e-09 0s 0s 240773230e-09 1s 1s 240776910e-09 0s 0s 240781950e-09 0s 0s 240783470e-09 1s 1s 240787150e-09 0s 0s 240792230e-09 0s 0s 240793710e-09 1s 1s 240797390e-09 0s 0s 240802510e-09 0s 0s 240803950e-09 1s 1s 240807630e-09 0s 0s 240812790e-09 0s 0s 240814190e-09 1s 1s 240817870e-09 0s 0s 240823070e-09 0s 0s 240824430e-09 1s 1s 240828110e-09 0s 0s 240833350e-09 0s 0s 240834670e-09 1s 1s 240838350e-09 0s 0s 240843630e-09 0s 0s 240844910e-09 1s 1s 240848590e-09 0s 0s 240853910e-09 0s 0s 240855150e-09 1s 1s 240858830e-09 0s 0s 240864190e-09 0s 0s 240865390e-09 1s 1s 240869070e-09 0s 0s 240874470e-09 0s 0s 240875630e-09 1s 1s 240879310e-09 0s 0s 240884750e-09 0s 0s 240885870e-09 1s 1s 240889550e-09 0s 0s 240895030e-09 0s 0s 240896110e-09 1s 1s 240899790e-09 0s 0s 240905310e-09 0s 0s 240906350e-09 1s 1s 240910030e-09 0s 0s 240915590e-09 0s 0s 240916590e-09 1s 1s 240920270e-09 0s 0s 240925870e-09 0s 0s 240926830e-09 1s 1s 240930510e-09 0s 0s 240936150e-09 0s 0s 240937070e-09 1s 1s 240940750e-09 0s 0s 240946430e-09 0s 0s 240947310e-09 1s 1s 240950990e-09 0s 0s 240956710e-09 0s 0s 240957550e-09 1s 1s 240961230e-09 0s 0s 240966990e-09 0s 0s 240967790e-09 1s 1s 240971470e-09 0s 0s 240977270e-09 0s 0s 240978030e-09 1s 1s 240981710e-09 0s 0s 240987550e-09 0s 0s 240988270e-09 1s 1s 240991950e-09 0s 0s 240997830e-09 0s 0s 240998510e-09 1s 1s 241002190e-09 0s 0s 241008110e-09 0s 0s 241008750e-09 1s 1s 241012430e-09 0s 0s 241018390e-09 0s 0s 241018990e-09 1s 1s 241022670e-09 0s 0s 241028670e-09 0s 0s 241029230e-09 1s 1s 241032910e-09 0s 0s 241038950e-09 0s 0s 241039470e-09 1s 1s 241043150e-09 0s 0s 241049230e-09 0s 0s 241049710e-09 1s 1s 241053390e-09 0s 0s 241059510e-09 0s 0s 241059950e-09 1s 1s 241063630e-09 0s 0s 241069790e-09 0s 0s 241070190e-09 1s 1s 241073870e-09 0s 0s 241080070e-09 0s 0s 241080430e-09 1s 1s 241084110e-09 0s 0s 241090350e-09 0s 0s 241090670e-09 1s 1s 241094350e-09 0s 0s 241100630e-09 0s 0s 241100910e-09 1s 1s 241104590e-09 0s 0s 241110910e-09 0s 0s 241111150e-09 1s 1s 241114830e-09 0s 0s 241121190e-09 0s 0s 241121390e-09 1s 1s 241125070e-09 0s 0s 241131470e-09 0s 0s 241131630e-09 1s 1s 241135310e-09 0s 0s 241141750e-09 0s 0s 241141870e-09 1s 1s 241145550e-09 0s 0s 241152030e-09 0s 0s 241152110e-09 1s 1s 241155790e-09 0s 0s 241162310e-09 0s 0s 241162350e-09 1s 1s 241166030e-09 0s 0s 241172590e-09 1s 1s 241172630e-09 1s 1s 241176310e-09 0s 0s 241182830e-09 1s 1s 241182910e-09 1s 1s 241186550e-09 0s 0s 241193070e-09 1s 1s 241193190e-09 1s 1s 241196790e-09 0s 0s 241203310e-09 1s 1s 241203470e-09 1s 1s 241207030e-09 0s 0s 241213550e-09 1s 1s 241213750e-09 1s 1s 241217270e-09 0s 0s 241223790e-09 1s 1s 241224030e-09 1s 1s 241227510e-09 0s 0s 241234030e-09 1s 1s 241234310e-09 1s 1s 241237750e-09 0s 0s 241244270e-09 1s 1s 241244590e-09 1s 1s 241247990e-09 0s 0s 241254510e-09 1s 1s 241254870e-09 1s 1s 241258230e-09 0s 0s 241264750e-09 1s 1s 241265150e-09 1s 1s 241268470e-09 0s 0s 241274990e-09 1s 1s 241275430e-09 1s 1s 241278710e-09 0s 0s 241285230e-09 1s 1s 241285710e-09 1s 1s 241288950e-09 0s 0s 241295470e-09 1s 1s 241295990e-09 1s 1s 241299190e-09 0s 0s 241305710e-09 1s 1s 241306270e-09 1s 1s 241309430e-09 0s 0s 241315950e-09 1s 1s 241316550e-09 1s 1s 241319670e-09 0s 0s 241326190e-09 1s 1s 241326830e-09 1s 1s 241329910e-09 0s 0s 241336430e-09 1s 1s 241337110e-09 1s 1s 241340150e-09 0s 0s 241346670e-09 1s 1s 241347390e-09 1s 1s 241350390e-09 0s 0s 241356910e-09 1s 1s 241357670e-09 1s 1s 241360630e-09 0s 0s 241367150e-09 1s 1s 241367950e-09 1s 1s 241370870e-09 0s 0s 241377390e-09 1s 1s 241378230e-09 1s 1s 241381110e-09 0s 0s 241387630e-09 1s 1s 241388510e-09 1s 1s 241391350e-09 0s 0s 241397870e-09 1s 1s 241398790e-09 1s 1s 241401590e-09 0s 0s 241408110e-09 1s 1s 241409070e-09 1s 1s 241411830e-09 0s 0s 241418350e-09 1s 1s 241419350e-09 1s 1s 241422070e-09 0s 0s 241428590e-09 1s 1s 241429630e-09 1s 1s 241432310e-09 0s 0s 241438830e-09 1s 1s 241439910e-09 1s 1s 241442550e-09 0s 0s 241449070e-09 1s 1s 241450190e-09 1s 1s 241452790e-09 0s 0s 241459310e-09 1s 1s 241460470e-09 1s 1s 241463030e-09 0s 0s 241469550e-09 1s 1s 241470750e-09 1s 1s 241473270e-09 0s 0s 241479790e-09 1s 1s 241481030e-09 1s 1s 241483510e-09 0s 0s 241490030e-09 1s 1s 241491310e-09 1s 1s 241493750e-09 0s 0s 241500270e-09 1s 1s 241501590e-09 1s 1s 241503990e-09 0s 0s 241510510e-09 1s 1s 241511870e-09 1s 1s 241514230e-09 0s 0s 241520750e-09 1s 1s 241522150e-09 1s 1s 241524470e-09 0s 0s 241530990e-09 1s 1s 241532430e-09 1s 1s 241534710e-09 0s 0s 241541230e-09 1s 1s 241542710e-09 1s 1s 241544950e-09 0s 0s 241551470e-09 1s 1s 241552990e-09 1s 1s 241555190e-09 0s 0s 241561710e-09 1s 1s 241563270e-09 1s 1s 241565430e-09 0s 0s 241571950e-09 1s 1s 241573550e-09 1s 1s 241575670e-09 0s 0s 241582190e-09 1s 1s 241583830e-09 1s 1s 241585910e-09 0s 0s 241592430e-09 1s 1s 241594110e-09 1s 1s 241596150e-09 0s 0s 241602670e-09 1s 1s 241604390e-09 1s 1s 241606390e-09 0s 0s 241612910e-09 1s 1s 241614670e-09 1s 1s 241616630e-09 0s 0s 241623150e-09 1s 1s 241624950e-09 1s 1s 241626870e-09 0s 0s 241633390e-09 1s 1s 241635230e-09 1s 1s 241637110e-09 0s 0s 241643630e-09 1s 1s 241645510e-09 1s 1s 241647350e-09 0s 0s 241653870e-09 1s 1s 241655790e-09 1s 1s 241657590e-09 0s 0s 241664110e-09 1s 1s 241666070e-09 1s 1s 241667830e-09 0s 0s 241674350e-09 1s 1s 241676350e-09 1s 1s 241678070e-09 0s 0s 241684590e-09 1s 1s 241686630e-09 1s 1s 241688310e-09 0s 0s 241694830e-09 1s 1s 241696910e-09 1s 1s 241698550e-09 0s 0s 241705070e-09 1s 1s 241707190e-09 1s 1s 241708790e-09 0s 0s 241715310e-09 1s 1s 241717470e-09 1s 1s 241719030e-09 0s 0s 241725550e-09 1s 1s 241727750e-09 1s 1s 241729270e-09 0s 0s 241735790e-09 1s 1s 241738030e-09 1s 1s 241739510e-09 0s 0s 241746030e-09 1s 1s 241748310e-09 1s 1s 241749750e-09 0s 0s 241756270e-09 1s 1s 241758590e-09 1s 1s 241759990e-09 0s 0s 241766510e-09 1s 1s 241768870e-09 1s 1s 241770230e-09 0s 0s 241776750e-09 1s 1s 241779150e-09 1s 1s 241780470e-09 0s 0s 241786990e-09 1s 1s 241789430e-09 1s 1s 241790710e-09 0s 0s 241797230e-09 1s 1s 241799710e-09 1s 1s 241800950e-09 0s 0s 241807470e-09 1s 1s 241809990e-09 1s 1s 241811190e-09 0s 0s 241817710e-09 1s 1s 241820270e-09 1s 1s 241821430e-09 0s 0s 241827950e-09 1s 1s 241830550e-09 1s 1s 241831670e-09 0s 0s 241838190e-09 1s 1s 241840830e-09 1s 1s 241841910e-09 0s 0s 241848430e-09 1s 1s 241851110e-09 1s 1s 241852150e-09 0s 0s 241858670e-09 1s 1s 241861390e-09 1s 1s 241862390e-09 0s 0s 241868910e-09 1s 1s 241871670e-09 1s 1s 241872630e-09 0s 0s 241879150e-09 1s 1s 241881950e-09 1s 1s 241882870e-09 0s 0s 241889390e-09 1s 1s 241892230e-09 1s 1s 241893110e-09 0s 0s 241899630e-09 1s 1s 241902510e-09 1s 1s 241903350e-09 0s 0s 241909870e-09 1s 1s 241912790e-09 1s 1s 241913590e-09 0s 0s 241920110e-09 1s 1s 241923070e-09 1s 1s 241923830e-09 0s 0s 241930350e-09 1s 1s 241933350e-09 1s 1s 241934070e-09 0s 0s 241940590e-09 1s 1s 241943630e-09 1s 1s 241944310e-09 0s 0s 241950830e-09 1s 1s 241953910e-09 1s 1s 241954550e-09 0s 0s 241961070e-09 1s 1s 241964190e-09 1s 1s 241964790e-09 0s 0s 241971310e-09 1s 1s 241974470e-09 1s 1s 241975030e-09 0s 0s 241981550e-09 1s 1s 241984750e-09 1s 1s 241985270e-09 0s 0s 241991790e-09 1s 1s 241995030e-09 1s 1s 241995510e-09 0s 0s 242002030e-09 1s 1s 242005310e-09 1s 1s 242005750e-09 0s 0s 242012270e-09 1s 1s 242015590e-09 1s 1s 242015990e-09 0s 0s 242022510e-09 1s 1s 242025870e-09 1s 1s 242026230e-09 0s 0s 242032750e-09 1s 1s 242036150e-09 1s 1s 242036470e-09 0s 0s 242042990e-09 1s 1s 242046430e-09 1s 1s 242046710e-09 0s 0s 242053230e-09 1s 1s 242056710e-09 1s 1s 242056950e-09 0s 0s 242063470e-09 1s 1s 242066990e-09 1s 1s 242067190e-09 0s 0s 242073710e-09 1s 1s 242077270e-09 1s 1s 242077430e-09 0s 0s 242083950e-09 1s 1s 242087550e-09 1s 1s 242087670e-09 0s 0s 242094190e-09 1s 1s 242097830e-09 1s 1s 242097910e-09 0s 0s 242104430e-09 1s 1s 242108110e-09 1s 1s 242108150e-09 0s 0s 242114670e-09 1s 1s 242118390e-09 0s 0s 242124910e-09 1s 1s 242128630e-09 0s 0s 242128670e-09 0s 0s 242135150e-09 1s 1s 242138870e-09 0s 0s 242138950e-09 0s 0s 242145390e-09 1s 1s 242149110e-09 0s 0s 242149230e-09 0s 0s 242155630e-09 1s 1s 242159350e-09 0s 0s 242159510e-09 0s 0s 242165870e-09 1s 1s 242169590e-09 0s 0s 242169790e-09 0s 0s 242176110e-09 1s 1s 242179830e-09 0s 0s 242180070e-09 0s 0s 242186350e-09 1s 1s 242190070e-09 0s 0s 242190350e-09 0s 0s 242196590e-09 1s 1s 242200310e-09 0s 0s 242200630e-09 0s 0s 242206830e-09 1s 1s 242210550e-09 0s 0s 242210910e-09 0s 0s 242217070e-09 1s 1s 242220790e-09 0s 0s 242221190e-09 0s 0s 242227310e-09 1s 1s 242231030e-09 0s 0s 242231470e-09 0s 0s 242237550e-09 1s 1s 242241270e-09 0s 0s 242241750e-09 0s 0s 242247790e-09 1s 1s 242251510e-09 0s 0s 242252030e-09 0s 0s 242258030e-09 1s 1s 242261750e-09 0s 0s 242262310e-09 0s 0s 242268270e-09 1s 1s 242271990e-09 0s 0s 242272590e-09 0s 0s 242278510e-09 1s 1s 242282230e-09 0s 0s 242282870e-09 0s 0s 242288750e-09 1s 1s 242292470e-09 0s 0s 242293150e-09 0s 0s 242298990e-09 1s 1s 242302710e-09 0s 0s 242303430e-09 0s 0s 242309230e-09 1s 1s 242312950e-09 0s 0s 242313710e-09 0s 0s 242319470e-09 1s 1s 242323190e-09 0s 0s 242323990e-09 0s 0s 242329710e-09 1s 1s 242333430e-09 0s 0s 242334270e-09 0s 0s 242339950e-09 1s 1s 242343670e-09 0s 0s 242344550e-09 0s 0s 242350190e-09 1s 1s 242353910e-09 0s 0s 242354830e-09 0s 0s 242360430e-09 1s 1s 242364150e-09 0s 0s 242365110e-09 0s 0s 242370670e-09 1s 1s 242374390e-09 0s 0s 242375390e-09 0s 0s 242380910e-09 1s 1s 242384630e-09 0s 0s 242385670e-09 0s 0s 242391150e-09 1s 1s 242394870e-09 0s 0s 242395950e-09 0s 0s 242401390e-09 1s 1s 242405110e-09 0s 0s 242406230e-09 0s 0s 242411630e-09 1s 1s 242415350e-09 0s 0s 242416510e-09 0s 0s 242421870e-09 1s 1s 242425590e-09 0s 0s 242426790e-09 0s 0s 242432110e-09 1s 1s 242435830e-09 0s 0s 242437070e-09 0s 0s 242442350e-09 1s 1s 242446070e-09 0s 0s 242447350e-09 0s 0s 242452590e-09 1s 1s 242456310e-09 0s 0s 242457630e-09 0s 0s 242462830e-09 1s 1s 242466550e-09 0s 0s 242467910e-09 0s 0s 242473070e-09 1s 1s 242476790e-09 0s 0s 242478190e-09 0s 0s 242483310e-09 1s 1s 242487030e-09 0s 0s 242488470e-09 0s 0s 242493550e-09 1s 1s 242497270e-09 0s 0s 242498750e-09 0s 0s 242503790e-09 1s 1s 242507510e-09 0s 0s 242509030e-09 0s 0s 242514030e-09 1s 1s 242517750e-09 0s 0s 242519310e-09 0s 0s 242524270e-09 1s 1s 242527990e-09 0s 0s 242529590e-09 0s 0s 242534510e-09 1s 1s 242538230e-09 0s 0s 242539870e-09 0s 0s 242544750e-09 1s 1s 242548470e-09 0s 0s 242550150e-09 0s 0s 242554990e-09 1s 1s 242558710e-09 0s 0s 242560430e-09 0s 0s 242565230e-09 1s 1s 242568950e-09 0s 0s 242570710e-09 0s 0s 242575470e-09 1s 1s 242579190e-09 0s 0s 242580990e-09 0s 0s 242585710e-09 1s 1s 242589430e-09 0s 0s 242591270e-09 0s 0s 242595950e-09 1s 1s 242599670e-09 0s 0s 242601550e-09 0s 0s 242606190e-09 1s 1s 242609910e-09 0s 0s 242611830e-09 0s 0s 242616430e-09 1s 1s 242620150e-09 0s 0s 242622110e-09 0s 0s 242626670e-09 1s 1s 242630390e-09 0s 0s 242632390e-09 0s 0s 242636910e-09 1s 1s 242640630e-09 0s 0s 242642670e-09 0s 0s 242647150e-09 1s 1s 242650870e-09 0s 0s 242652950e-09 0s 0s 242657390e-09 1s 1s 242661110e-09 0s 0s 242663230e-09 0s 0s 242667630e-09 1s 1s 242671350e-09 0s 0s 242673510e-09 0s 0s 242677870e-09 1s 1s 242681590e-09 0s 0s 242683790e-09 0s 0s 242688110e-09 1s 1s 242691830e-09 0s 0s 242694070e-09 0s 0s 242698350e-09 1s 1s 242702070e-09 0s 0s 242704350e-09 0s 0s 242708590e-09 1s 1s 242712310e-09 0s 0s 242714630e-09 0s 0s 242718830e-09 1s 1s 242722550e-09 0s 0s 242724910e-09 0s 0s 242729070e-09 1s 1s 242732790e-09 0s 0s 242735190e-09 0s 0s 242739310e-09 1s 1s 242743030e-09 0s 0s 242745470e-09 0s 0s 242749550e-09 1s 1s 242753270e-09 0s 0s 242755750e-09 0s 0s 242759790e-09 1s 1s 242763510e-09 0s 0s 242766030e-09 0s 0s 242770030e-09 1s 1s 242773750e-09 0s 0s 242776310e-09 0s 0s 242780270e-09 1s 1s 242783990e-09 0s 0s 242786590e-09 0s 0s 242790510e-09 1s 1s 242794230e-09 0s 0s 242796870e-09 0s 0s 242800750e-09 1s 1s 242804470e-09 0s 0s 242807150e-09 0s 0s 242810990e-09 1s 1s 242814710e-09 0s 0s 242817430e-09 0s 0s 242821230e-09 1s 1s 242824950e-09 0s 0s 242827710e-09 0s 0s 242831470e-09 1s 1s 242835190e-09 0s 0s 242837990e-09 0s 0s 242841710e-09 1s 1s 242845430e-09 0s 0s 242848270e-09 0s 0s 242851950e-09 1s 1s 242855670e-09 0s 0s 242858550e-09 0s 0s 242862190e-09 1s 1s 242865910e-09 0s 0s 242868830e-09 0s 0s 242872430e-09 1s 1s 242876150e-09 0s 0s 242879110e-09 0s 0s 242882670e-09 1s 1s 242886390e-09 0s 0s 242889390e-09 0s 0s 242892910e-09 1s 1s 242896630e-09 0s 0s 242899670e-09 0s 0s 242903150e-09 1s 1s 242906870e-09 0s 0s 242909950e-09 0s 0s 242913390e-09 1s 1s 242917110e-09 0s 0s 242920230e-09 0s 0s 242923630e-09 1s 1s 242927350e-09 0s 0s 242930510e-09 0s 0s 242933870e-09 1s 1s 242937590e-09 0s 0s 242940790e-09 0s 0s 242944110e-09 1s 1s 242947830e-09 0s 0s 242951070e-09 0s 0s 242954350e-09 1s 1s 242958070e-09 0s 0s 242961350e-09 0s 0s 242964590e-09 1s 1s 242968310e-09 0s 0s 242971630e-09 0s 0s 242974830e-09 1s 1s 242978550e-09 0s 0s 242981910e-09 0s 0s 242985070e-09 1s 1s 242988790e-09 0s 0s 242992190e-09 0s 0s 242995310e-09 1s 1s 242999030e-09 0s 0s 243002470e-09 0s 0s 243005550e-09 1s 1s 243009270e-09 0s 0s 243012750e-09 0s 0s 243015790e-09 1s 1s 243019510e-09 0s 0s 243023030e-09 0s 0s 243026030e-09 1s 1s 243029750e-09 0s 0s 243033310e-09 0s 0s 243036270e-09 1s 1s 243039990e-09 0s 0s 243043590e-09 0s 0s 243046510e-09 1s 1s 243050230e-09 0s 0s 243053870e-09 0s 0s 243056750e-09 1s 1s 243060470e-09 0s 0s 243064150e-09 0s 0s 243066990e-09 1s 1s 243070710e-09 0s 0s 243074430e-09 0s 0s 243077230e-09 1s 1s 243080950e-09 0s 0s 243084710e-09 0s 0s 243087470e-09 1s 1s 243091190e-09 0s 0s 243094990e-09 0s 0s 243097710e-09 1s 1s 243101430e-09 0s 0s 243105270e-09 0s 0s 243107950e-09 1s 1s 243111670e-09 0s 0s 243115550e-09 0s 0s 243118190e-09 1s 1s 243121910e-09 0s 0s 243125830e-09 0s 0s 243128430e-09 1s 1s 243132150e-09 0s 0s 243136110e-09 0s 0s 243138670e-09 1s 1s 243142390e-09 0s 0s 243146390e-09 0s 0s 243148910e-09 1s 1s 243152630e-09 0s 0s 243156670e-09 0s 0s 243159150e-09 1s 1s 243162870e-09 0s 0s 243166950e-09 0s 0s 243169390e-09 1s 1s 243173110e-09 0s 0s 243177230e-09 0s 0s 243179630e-09 1s 1s 243183350e-09 0s 0s 243187510e-09 0s 0s 243189870e-09 1s 1s 243193590e-09 0s 0s 243197790e-09 0s 0s 243200110e-09 1s 1s 243203830e-09 0s 0s 243208070e-09 0s 0s 243210350e-09 1s 1s 243214070e-09 0s 0s 243218350e-09 0s 0s 243220590e-09 1s 1s 243224310e-09 0s 0s 243228630e-09 0s 0s 243230830e-09 1s 1s 243234550e-09 0s 0s 243238910e-09 0s 0s 243241070e-09 1s 1s 243244790e-09 0s 0s 243249190e-09 0s 0s 243251310e-09 1s 1s 243255030e-09 0s 0s 243259470e-09 0s 0s 243261550e-09 1s 1s 243265270e-09 0s 0s 243269750e-09 0s 0s 243271790e-09 1s 1s 243275510e-09 0s 0s 243280030e-09 0s 0s 243282030e-09 1s 1s 243285750e-09 0s 0s 243290310e-09 0s 0s 243292270e-09 1s 1s 243295990e-09 0s 0s 243300590e-09 0s 0s 243302510e-09 1s 1s 243306230e-09 0s 0s 243310870e-09 0s 0s 243312750e-09 1s 1s 243316470e-09 0s 0s 243321150e-09 0s 0s 243322990e-09 1s 1s 243326710e-09 0s 0s 243331430e-09 0s 0s 243333230e-09 1s 1s 243336950e-09 0s 0s 243341710e-09 0s 0s 243343470e-09 1s 1s 243347190e-09 0s 0s 243351990e-09 0s 0s 243353710e-09 1s 1s 243357430e-09 0s 0s 243362270e-09 0s 0s 243363950e-09 1s 1s 243367670e-09 0s 0s 243372550e-09 0s 0s 243374190e-09 1s 1s 243377910e-09 0s 0s 243382830e-09 0s 0s 243384430e-09 1s 1s 243388150e-09 0s 0s 243393110e-09 0s 0s 243394670e-09 1s 1s 243398390e-09 0s 0s 243403390e-09 0s 0s 243404910e-09 1s 1s 243408630e-09 0s 0s 243413670e-09 0s 0s 243415150e-09 1s 1s 243418870e-09 0s 0s 243423950e-09 0s 0s 243425390e-09 1s 1s 243429110e-09 0s 0s 243434230e-09 0s 0s 243435630e-09 1s 1s 243439350e-09 0s 0s 243444510e-09 0s 0s 243445870e-09 1s 1s 243449590e-09 0s 0s 243454790e-09 0s 0s 243456110e-09 1s 1s 243459830e-09 0s 0s 243465070e-09 0s 0s 243466350e-09 1s 1s 243470070e-09 0s 0s 243475350e-09 0s 0s 243476590e-09 1s 1s 243480310e-09 0s 0s 243485630e-09 0s 0s 243486830e-09 1s 1s 243490550e-09 0s 0s 243495910e-09 0s 0s 243497070e-09 1s 1s 243500790e-09 0s 0s 243506190e-09 0s 0s 243507310e-09 1s 1s 243511030e-09 0s 0s 243516470e-09 0s 0s 243517550e-09 1s 1s 243521270e-09 0s 0s 243526750e-09 0s 0s 243527790e-09 1s 1s 243531510e-09 0s 0s 243537030e-09 0s 0s 243538030e-09 1s 1s 243541750e-09 0s 0s 243547310e-09 0s 0s 243548270e-09 1s 1s 243551990e-09 0s 0s 243557590e-09 0s 0s 243558510e-09 1s 1s 243562230e-09 0s 0s 243567870e-09 0s 0s 243568750e-09 1s 1s 243572470e-09 0s 0s 243578150e-09 0s 0s 243578990e-09 1s 1s 243582710e-09 0s 0s 243588430e-09 0s 0s 243589230e-09 1s 1s 243592950e-09 0s 0s 243598710e-09 0s 0s 243599470e-09 1s 1s 243603190e-09 0s 0s 243608990e-09 0s 0s 243609710e-09 1s 1s 243613430e-09 0s 0s 243619270e-09 0s 0s 243619950e-09 1s 1s 243623670e-09 0s 0s 243629550e-09 0s 0s 243630190e-09 1s 1s 243633910e-09 0s 0s 243639830e-09 0s 0s 243640430e-09 1s 1s 243644150e-09 0s 0s 243650110e-09 0s 0s 243650670e-09 1s 1s 243654390e-09 0s 0s 243660390e-09 0s 0s 243660910e-09 1s 1s 243664630e-09 0s 0s 243670670e-09 0s 0s 243671150e-09 1s 1s 243674870e-09 0s 0s 243680950e-09 0s 0s 243681390e-09 1s 1s 243685110e-09 0s 0s 243691230e-09 0s 0s 243691630e-09 1s 1s 243695350e-09 0s 0s 243701510e-09 0s 0s 243701870e-09 1s 1s 243705590e-09 0s 0s 243711790e-09 0s 0s 243712110e-09 1s 1s 243715830e-09 0s 0s 243722070e-09 0s 0s 243722350e-09 1s 1s 243726070e-09 0s 0s 243732350e-09 0s 0s 243732590e-09 1s 1s 243736310e-09 0s 0s 243742630e-09 0s 0s 243742830e-09 1s 1s 243746550e-09 0s 0s 243752910e-09 0s 0s 243753070e-09 1s 1s 243756790e-09 0s 0s 243763190e-09 0s 0s 243763310e-09 1s 1s 243767030e-09 0s 0s 243773470e-09 0s 0s 243773550e-09 1s 1s 243777270e-09 0s 0s 243783750e-09 0s 0s 243783790e-09 1s 1s 243787510e-09 0s 0s 243794030e-09 1s 1s 243794070e-09 1s 1s 243797790e-09 0s 0s 243804270e-09 1s 1s 243804350e-09 1s 1s 243808030e-09 0s 0s 243814510e-09 1s 1s 243814630e-09 1s 1s 243818270e-09 0s 0s 243824750e-09 1s 1s 243824910e-09 1s 1s 243828510e-09 0s 0s 243834990e-09 1s 1s 243835190e-09 1s 1s 243838750e-09 0s 0s 243845230e-09 1s 1s 243845470e-09 1s 1s 243848990e-09 0s 0s 243855470e-09 1s 1s 243855750e-09 1s 1s 243859230e-09 0s 0s 243865710e-09 1s 1s 243866030e-09 1s 1s 243869470e-09 0s 0s 243875950e-09 1s 1s 243876310e-09 1s 1s 243879710e-09 0s 0s 243886190e-09 1s 1s 243886590e-09 1s 1s 243889950e-09 0s 0s 243896430e-09 1s 1s 243896870e-09 1s 1s 243900190e-09 0s 0s 243906670e-09 1s 1s 243907150e-09 1s 1s 243910430e-09 0s 0s 243916910e-09 1s 1s 243917430e-09 1s 1s 243920670e-09 0s 0s 243927150e-09 1s 1s 243927710e-09 1s 1s 243930910e-09 0s 0s 243937390e-09 1s 1s 243937990e-09 1s 1s 243941150e-09 0s 0s 243947630e-09 1s 1s 243948270e-09 1s 1s 243951390e-09 0s 0s 243957870e-09 1s 1s 243958550e-09 1s 1s 243961630e-09 0s 0s 243968110e-09 1s 1s 243968830e-09 1s 1s 243971870e-09 0s 0s 243978350e-09 1s 1s 243979110e-09 1s 1s 243982110e-09 0s 0s 243988590e-09 1s 1s 243989390e-09 1s 1s 243992350e-09 0s 0s 243998830e-09 1s 1s 243999670e-09 1s 1s 244002590e-09 0s 0s 244009070e-09 1s 1s 244009950e-09 1s 1s 244012830e-09 0s 0s 244019310e-09 1s 1s 244020230e-09 1s 1s 244023070e-09 0s 0s 244029550e-09 1s 1s 244030510e-09 1s 1s 244033310e-09 0s 0s 244039790e-09 1s 1s 244040790e-09 1s 1s 244043550e-09 0s 0s 244050030e-09 1s 1s 244051070e-09 1s 1s 244053790e-09 0s 0s 244060270e-09 1s 1s 244061350e-09 1s 1s 244064030e-09 0s 0s 244070510e-09 1s 1s 244071630e-09 1s 1s 244074270e-09 0s 0s 244080750e-09 1s 1s 244081910e-09 1s 1s 244084510e-09 0s 0s 244090990e-09 1s 1s 244092190e-09 1s 1s 244094750e-09 0s 0s 244101230e-09 1s 1s 244102470e-09 1s 1s 244104990e-09 0s 0s 244111470e-09 1s 1s 244112750e-09 1s 1s 244115230e-09 0s 0s 244121710e-09 1s 1s 244123030e-09 1s 1s 244125470e-09 0s 0s 244131950e-09 1s 1s 244133310e-09 1s 1s 244135710e-09 0s 0s 244142190e-09 1s 1s 244143590e-09 1s 1s 244145950e-09 0s 0s 244152430e-09 1s 1s 244153870e-09 1s 1s 244156190e-09 0s 0s 244162670e-09 1s 1s 244164150e-09 1s 1s 244166430e-09 0s 0s 244172910e-09 1s 1s 244174430e-09 1s 1s 244176670e-09 0s 0s 244183150e-09 1s 1s 244184710e-09 1s 1s 244186910e-09 0s 0s 244193390e-09 1s 1s 244194990e-09 1s 1s 244197150e-09 0s 0s 244203630e-09 1s 1s 244205270e-09 1s 1s 244207390e-09 0s 0s 244213870e-09 1s 1s 244215550e-09 1s 1s 244217630e-09 0s 0s 244224110e-09 1s 1s 244225830e-09 1s 1s 244227870e-09 0s 0s 244234350e-09 1s 1s 244236110e-09 1s 1s 244238110e-09 0s 0s 244244590e-09 1s 1s 244246390e-09 1s 1s 244248350e-09 0s 0s 244254830e-09 1s 1s 244256670e-09 1s 1s 244258590e-09 0s 0s 244265070e-09 1s 1s 244266950e-09 1s 1s 244268830e-09 0s 0s 244275310e-09 1s 1s 244277230e-09 1s 1s 244279070e-09 0s 0s 244285550e-09 1s 1s 244287510e-09 1s 1s 244289310e-09 0s 0s 244295790e-09 1s 1s 244297790e-09 1s 1s 244299550e-09 0s 0s 244306030e-09 1s 1s 244308070e-09 1s 1s 244309790e-09 0s 0s 244316270e-09 1s 1s 244318350e-09 1s 1s 244320030e-09 0s 0s 244326510e-09 1s 1s 244328630e-09 1s 1s 244330270e-09 0s 0s 244336750e-09 1s 1s 244338910e-09 1s 1s 244340510e-09 0s 0s 244346990e-09 1s 1s 244349190e-09 1s 1s 244350750e-09 0s 0s 244357230e-09 1s 1s 244359470e-09 1s 1s 244360990e-09 0s 0s 244367470e-09 1s 1s 244369750e-09 1s 1s 244371230e-09 0s 0s 244377710e-09 1s 1s 244380030e-09 1s 1s 244381470e-09 0s 0s 244387950e-09 1s 1s 244390310e-09 1s 1s 244391710e-09 0s 0s 244398190e-09 1s 1s 244400590e-09 1s 1s 244401950e-09 0s 0s 244408430e-09 1s 1s 244410870e-09 1s 1s 244412190e-09 0s 0s 244418670e-09 1s 1s 244421150e-09 1s 1s 244422430e-09 0s 0s 244428910e-09 1s 1s 244431430e-09 1s 1s 244432670e-09 0s 0s 244439150e-09 1s 1s 244441710e-09 1s 1s 244442910e-09 0s 0s 244449390e-09 1s 1s 244451990e-09 1s 1s 244453150e-09 0s 0s 244459630e-09 1s 1s 244462270e-09 1s 1s 244463390e-09 0s 0s 244469870e-09 1s 1s 244472550e-09 1s 1s 244473630e-09 0s 0s 244480110e-09 1s 1s 244482830e-09 1s 1s 244483870e-09 0s 0s 244490350e-09 1s 1s 244493110e-09 1s 1s 244494110e-09 0s 0s 244500590e-09 1s 1s 244503390e-09 1s 1s 244504350e-09 0s 0s 244510830e-09 1s 1s 244513670e-09 1s 1s 244514590e-09 0s 0s 244521070e-09 1s 1s 244523950e-09 1s 1s 244524830e-09 0s 0s 244531310e-09 1s 1s 244534230e-09 1s 1s 244535070e-09 0s 0s 244541550e-09 1s 1s 244544510e-09 1s 1s 244545310e-09 0s 0s 244551790e-09 1s 1s 244554790e-09 1s 1s 244555550e-09 0s 0s 244562030e-09 1s 1s 244565070e-09 1s 1s 244565790e-09 0s 0s 244572270e-09 1s 1s 244575350e-09 1s 1s 244576030e-09 0s 0s 244582510e-09 1s 1s 244585630e-09 1s 1s 244586270e-09 0s 0s 244592750e-09 1s 1s 244595910e-09 1s 1s 244596510e-09 0s 0s 244602990e-09 1s 1s 244606190e-09 1s 1s 244606750e-09 0s 0s 244613230e-09 1s 1s 244616470e-09 1s 1s 244616990e-09 0s 0s 244623470e-09 1s 1s 244626750e-09 1s 1s 244627230e-09 0s 0s 244633710e-09 1s 1s 244637030e-09 1s 1s 244637470e-09 0s 0s 244643950e-09 1s 1s 244647310e-09 1s 1s 244647710e-09 0s 0s 244654190e-09 1s 1s 244657590e-09 1s 1s 244657950e-09 0s 0s 244664430e-09 1s 1s 244667870e-09 1s 1s 244668190e-09 0s 0s 244674670e-09 1s 1s 244678150e-09 1s 1s 244678430e-09 0s 0s 244684910e-09 1s 1s 244688430e-09 1s 1s 244688670e-09 0s 0s 244695150e-09 1s 1s 244698710e-09 1s 1s 244698910e-09 0s 0s 244705390e-09 1s 1s 244708990e-09 1s 1s 244709150e-09 0s 0s 244715630e-09 1s 1s 244719270e-09 1s 1s 244719390e-09 0s 0s 244725870e-09 1s 1s 244729550e-09 1s 1s 244729630e-09 0s 0s 244736110e-09 1s 1s 244739830e-09 1s 1s 244739870e-09 0s 0s 244746350e-09 1s 1s 244750110e-09 0s 0s 244756590e-09 1s 1s 244760350e-09 0s 0s 244760390e-09 0s 0s 244766830e-09 1s 1s 244770590e-09 0s 0s 244770670e-09 0s 0s 244777070e-09 1s 1s 244780830e-09 0s 0s 244780950e-09 0s 0s 244787310e-09 1s 1s 244791070e-09 0s 0s 244791230e-09 0s 0s 244797550e-09 1s 1s 244801310e-09 0s 0s 244801510e-09 0s 0s 244807790e-09 1s 1s 244811550e-09 0s 0s 244811790e-09 0s 0s 244818030e-09 1s 1s 244821790e-09 0s 0s 244822070e-09 0s 0s 244828270e-09 1s 1s 244832030e-09 0s 0s 244832350e-09 0s 0s 244838510e-09 1s 1s 244842270e-09 0s 0s 244842630e-09 0s 0s 244848750e-09 1s 1s 244852510e-09 0s 0s 244852910e-09 0s 0s 244858990e-09 1s 1s 244862750e-09 0s 0s 244863190e-09 0s 0s 244869230e-09 1s 1s 244872990e-09 0s 0s 244873470e-09 0s 0s 244879470e-09 1s 1s 244883230e-09 0s 0s 244883750e-09 0s 0s 244889710e-09 1s 1s 244893470e-09 0s 0s 244894030e-09 0s 0s 244899950e-09 1s 1s 244903710e-09 0s 0s 244904310e-09 0s 0s 244910190e-09 1s 1s 244913950e-09 0s 0s 244914590e-09 0s 0s 244920430e-09 1s 1s 244924190e-09 0s 0s 244924870e-09 0s 0s 244930670e-09 1s 1s 244934430e-09 0s 0s 244935150e-09 0s 0s 244940910e-09 1s 1s 244944670e-09 0s 0s 244945430e-09 0s 0s 244951150e-09 1s 1s 244954910e-09 0s 0s 244955710e-09 0s 0s 244961390e-09 1s 1s 244965150e-09 0s 0s 244965990e-09 0s 0s 244971630e-09 1s 1s 244975390e-09 0s 0s 244976270e-09 0s 0s 244981870e-09 1s 1s 244985630e-09 0s 0s 244986550e-09 0s 0s 244992110e-09 1s 1s 244995870e-09 0s 0s 244996830e-09 0s 0s 245002350e-09 1s 1s 245006110e-09 0s 0s 245007110e-09 0s 0s 245012590e-09 1s 1s 245016350e-09 0s 0s 245017390e-09 0s 0s 245022830e-09 1s 1s 245026590e-09 0s 0s 245027670e-09 0s 0s 245033070e-09 1s 1s 245036830e-09 0s 0s 245037950e-09 0s 0s 245043310e-09 1s 1s 245047070e-09 0s 0s 245048230e-09 0s 0s 245053550e-09 1s 1s 245057310e-09 0s 0s 245058510e-09 0s 0s 245063790e-09 1s 1s 245067550e-09 0s 0s 245068790e-09 0s 0s 245074030e-09 1s 1s 245077790e-09 0s 0s 245079070e-09 0s 0s 245084270e-09 1s 1s 245088030e-09 0s 0s 245089350e-09 0s 0s 245094510e-09 1s 1s 245098270e-09 0s 0s 245099630e-09 0s 0s 245104750e-09 1s 1s 245108510e-09 0s 0s 245109910e-09 0s 0s 245114990e-09 1s 1s 245118750e-09 0s 0s 245120190e-09 0s 0s 245125230e-09 1s 1s 245128990e-09 0s 0s 245130470e-09 0s 0s 245135470e-09 1s 1s 245139230e-09 0s 0s 245140750e-09 0s 0s 245145710e-09 1s 1s 245149470e-09 0s 0s 245151030e-09 0s 0s 245155950e-09 1s 1s 245159710e-09 0s 0s 245161310e-09 0s 0s 245166190e-09 1s 1s 245169950e-09 0s 0s 245171590e-09 0s 0s 245176430e-09 1s 1s 245180190e-09 0s 0s 245181870e-09 0s 0s 245186670e-09 1s 1s 245190430e-09 0s 0s 245192150e-09 0s 0s 245196910e-09 1s 1s 245200670e-09 0s 0s 245202430e-09 0s 0s 245207150e-09 1s 1s 245210910e-09 0s 0s 245212710e-09 0s 0s 245217390e-09 1s 1s 245221150e-09 0s 0s 245222990e-09 0s 0s 245227630e-09 1s 1s 245231390e-09 0s 0s 245233270e-09 0s 0s 245237870e-09 1s 1s 245241630e-09 0s 0s 245243550e-09 0s 0s 245248110e-09 1s 1s 245251870e-09 0s 0s 245253830e-09 0s 0s 245258350e-09 1s 1s 245262110e-09 0s 0s 245264110e-09 0s 0s 245268590e-09 1s 1s 245272350e-09 0s 0s 245274390e-09 0s 0s 245278830e-09 1s 1s 245282590e-09 0s 0s 245284670e-09 0s 0s 245289070e-09 1s 1s 245292830e-09 0s 0s 245294950e-09 0s 0s 245299310e-09 1s 1s 245303070e-09 0s 0s 245305230e-09 0s 0s 245309550e-09 1s 1s 245313310e-09 0s 0s 245315510e-09 0s 0s 245319790e-09 1s 1s 245323550e-09 0s 0s 245325790e-09 0s 0s 245330030e-09 1s 1s 245333790e-09 0s 0s 245336070e-09 0s 0s 245340270e-09 1s 1s 245344030e-09 0s 0s 245346350e-09 0s 0s 245350510e-09 1s 1s 245354270e-09 0s 0s 245356630e-09 0s 0s 245360750e-09 1s 1s 245364510e-09 0s 0s 245366910e-09 0s 0s 245370990e-09 1s 1s 245374750e-09 0s 0s 245377190e-09 0s 0s 245381230e-09 1s 1s 245384990e-09 0s 0s 245387470e-09 0s 0s 245391470e-09 1s 1s 245395230e-09 0s 0s 245397750e-09 0s 0s 245401710e-09 1s 1s 245405470e-09 0s 0s 245408030e-09 0s 0s 245411950e-09 1s 1s 245415710e-09 0s 0s 245418310e-09 0s 0s 245422190e-09 1s 1s 245425950e-09 0s 0s 245428590e-09 0s 0s 245432430e-09 1s 1s 245436190e-09 0s 0s 245438870e-09 0s 0s 245442670e-09 1s 1s 245446430e-09 0s 0s 245449150e-09 0s 0s 245452910e-09 1s 1s 245456670e-09 0s 0s 245459430e-09 0s 0s 245463150e-09 1s 1s 245466910e-09 0s 0s 245469710e-09 0s 0s 245473390e-09 1s 1s 245477150e-09 0s 0s 245479990e-09 0s 0s 245483630e-09 1s 1s 245487390e-09 0s 0s 245490270e-09 0s 0s 245493870e-09 1s 1s 245497630e-09 0s 0s 245500550e-09 0s 0s 245504110e-09 1s 1s 245507870e-09 0s 0s 245510830e-09 0s 0s 245514350e-09 1s 1s 245518110e-09 0s 0s 245521110e-09 0s 0s 245524590e-09 1s 1s 245528350e-09 0s 0s 245531390e-09 0s 0s 245534830e-09 1s 1s 245538590e-09 0s 0s 245541670e-09 0s 0s 245545070e-09 1s 1s 245548830e-09 0s 0s 245551950e-09 0s 0s 245555310e-09 1s 1s 245559070e-09 0s 0s 245562230e-09 0s 0s 245565550e-09 1s 1s 245569310e-09 0s 0s 245572510e-09 0s 0s 245575790e-09 1s 1s 245579550e-09 0s 0s 245582790e-09 0s 0s 245586030e-09 1s 1s 245589790e-09 0s 0s 245593070e-09 0s 0s 245596270e-09 1s 1s 245600030e-09 0s 0s 245603350e-09 0s 0s 245606510e-09 1s 1s 245610270e-09 0s 0s 245613630e-09 0s 0s 245616750e-09 1s 1s 245620510e-09 0s 0s 245623910e-09 0s 0s 245626990e-09 1s 1s 245630750e-09 0s 0s 245634190e-09 0s 0s 245637230e-09 1s 1s 245640990e-09 0s 0s 245644470e-09 0s 0s 245647470e-09 1s 1s 245651230e-09 0s 0s 245654750e-09 0s 0s 245657710e-09 1s 1s 245661470e-09 0s 0s 245665030e-09 0s 0s 245667950e-09 1s 1s 245671710e-09 0s 0s 245675310e-09 0s 0s 245678190e-09 1s 1s 245681950e-09 0s 0s 245685590e-09 0s 0s 245688430e-09 1s 1s 245692190e-09 0s 0s 245695870e-09 0s 0s 245698670e-09 1s 1s 245702430e-09 0s 0s 245706150e-09 0s 0s 245708910e-09 1s 1s 245712670e-09 0s 0s 245716430e-09 0s 0s 245719150e-09 1s 1s 245722910e-09 0s 0s 245726710e-09 0s 0s 245729390e-09 1s 1s 245733150e-09 0s 0s 245736990e-09 0s 0s 245739630e-09 1s 1s 245743390e-09 0s 0s 245747270e-09 0s 0s 245749870e-09 1s 1s 245753630e-09 0s 0s 245757550e-09 0s 0s 245760110e-09 1s 1s 245763870e-09 0s 0s 245767830e-09 0s 0s 245770350e-09 1s 1s 245774110e-09 0s 0s 245778110e-09 0s 0s 245780590e-09 1s 1s 245784350e-09 0s 0s 245788390e-09 0s 0s 245790830e-09 1s 1s 245794590e-09 0s 0s 245798670e-09 0s 0s 245801070e-09 1s 1s 245804830e-09 0s 0s 245808950e-09 0s 0s 245811310e-09 1s 1s 245815070e-09 0s 0s 245819230e-09 0s 0s 245821550e-09 1s 1s 245825310e-09 0s 0s 245829510e-09 0s 0s 245831790e-09 1s 1s 245835550e-09 0s 0s 245839790e-09 0s 0s 245842030e-09 1s 1s 245845790e-09 0s 0s 245850070e-09 0s 0s 245852270e-09 1s 1s 245856030e-09 0s 0s 245860350e-09 0s 0s 245862510e-09 1s 1s 245866270e-09 0s 0s 245870630e-09 0s 0s 245872750e-09 1s 1s 245876510e-09 0s 0s 245880910e-09 0s 0s 245882990e-09 1s 1s 245886750e-09 0s 0s 245891190e-09 0s 0s 245893230e-09 1s 1s 245896990e-09 0s 0s 245901470e-09 0s 0s 245903470e-09 1s 1s 245907230e-09 0s 0s 245911750e-09 0s 0s 245913710e-09 1s 1s 245917470e-09 0s 0s 245922030e-09 0s 0s 245923950e-09 1s 1s 245927710e-09 0s 0s 245932310e-09 0s 0s 245934190e-09 1s 1s 245937950e-09 0s 0s 245942590e-09 0s 0s 245944430e-09 1s 1s 245948190e-09 0s 0s 245952870e-09 0s 0s 245954670e-09 1s 1s 245958430e-09 0s 0s 245963150e-09 0s 0s 245964910e-09 1s 1s 245968670e-09 0s 0s 245973430e-09 0s 0s 245975150e-09 1s 1s 245978910e-09 0s 0s 245983710e-09 0s 0s 245985390e-09 1s 1s 245989150e-09 0s 0s 245993990e-09 0s 0s 245995630e-09 1s 1s 245999390e-09 0s 0s 246004270e-09 0s 0s 246005870e-09 1s 1s 246009630e-09 0s 0s 246014550e-09 0s 0s 246016110e-09 1s 1s 246019870e-09 0s 0s 246024830e-09 0s 0s 246026350e-09 1s 1s 246030110e-09 0s 0s 246035110e-09 0s 0s 246036590e-09 1s 1s 246040350e-09 0s 0s 246045390e-09 0s 0s 246046830e-09 1s 1s 246050590e-09 0s 0s 246055670e-09 0s 0s 246057070e-09 1s 1s 246060830e-09 0s 0s 246065950e-09 0s 0s 246067310e-09 1s 1s 246071070e-09 0s 0s 246076230e-09 0s 0s 246077550e-09 1s 1s 246081310e-09 0s 0s 246086510e-09 0s 0s 246087790e-09 1s 1s 246091550e-09 0s 0s 246096790e-09 0s 0s 246098030e-09 1s 1s 246101790e-09 0s 0s 246107070e-09 0s 0s 246108270e-09 1s 1s 246112030e-09 0s 0s 246117350e-09 0s 0s 246118510e-09 1s 1s 246122270e-09 0s 0s 246127630e-09 0s 0s 246128750e-09 1s 1s 246132510e-09 0s 0s 246137910e-09 0s 0s 246138990e-09 1s 1s 246142750e-09 0s 0s 246148190e-09 0s 0s 246149230e-09 1s 1s 246152990e-09 0s 0s 246158470e-09 0s 0s 246159470e-09 1s 1s 246163230e-09 0s 0s 246168750e-09 0s 0s 246169710e-09 1s 1s 246173470e-09 0s 0s 246179030e-09 0s 0s 246179950e-09 1s 1s 246183710e-09 0s 0s 246189310e-09 0s 0s 246190190e-09 1s 1s 246193950e-09 0s 0s 246199590e-09 0s 0s 246200430e-09 1s 1s 246204190e-09 0s 0s 246209870e-09 0s 0s 246210670e-09 1s 1s 246214430e-09 0s 0s 246220150e-09 0s 0s 246220910e-09 1s 1s 246224670e-09 0s 0s 246230430e-09 0s 0s 246231150e-09 1s 1s 246234910e-09 0s 0s 246240710e-09 0s 0s 246241390e-09 1s 1s 246245150e-09 0s 0s 246250990e-09 0s 0s 246251630e-09 1s 1s 246255390e-09 0s 0s 246261270e-09 0s 0s 246261870e-09 1s 1s 246265630e-09 0s 0s 246271550e-09 0s 0s 246272110e-09 1s 1s 246275870e-09 0s 0s 246281830e-09 0s 0s 246282350e-09 1s 1s 246286110e-09 0s 0s 246292110e-09 0s 0s 246292590e-09 1s 1s 246296350e-09 0s 0s 246302390e-09 0s 0s 246302830e-09 1s 1s 246306590e-09 0s 0s 246312670e-09 0s 0s 246313070e-09 1s 1s 246316830e-09 0s 0s 246322950e-09 0s 0s 246323310e-09 1s 1s 246327070e-09 0s 0s 246333230e-09 0s 0s 246333550e-09 1s 1s 246337310e-09 0s 0s 246343510e-09 0s 0s 246343790e-09 1s 1s 246347550e-09 0s 0s 246353790e-09 0s 0s 246354030e-09 1s 1s 246357790e-09 0s 0s 246364070e-09 0s 0s 246364270e-09 1s 1s 246368030e-09 0s 0s 246374350e-09 0s 0s 246374510e-09 1s 1s 246378270e-09 0s 0s 246384630e-09 0s 0s 246384750e-09 1s 1s 246388510e-09 0s 0s 246394910e-09 0s 0s 246394990e-09 1s 1s 246398750e-09 0s 0s 246405190e-09 0s 0s 246405230e-09 1s 1s 246408990e-09 0s 0s 246415470e-09 1s 1s 246415510e-09 1s 1s 246419270e-09 0s 0s 246425710e-09 1s 1s 246425790e-09 1s 1s 246429510e-09 0s 0s 246435950e-09 1s 1s 246436070e-09 1s 1s 246439750e-09 0s 0s 246446190e-09 1s 1s 246446350e-09 1s 1s 246449990e-09 0s 0s 246456430e-09 1s 1s 246456630e-09 1s 1s 246460230e-09 0s 0s 246466670e-09 1s 1s 246466910e-09 1s 1s 246470470e-09 0s 0s 246476910e-09 1s 1s 246477190e-09 1s 1s 246480710e-09 0s 0s 246487150e-09 1s 1s 246487470e-09 1s 1s 246490950e-09 0s 0s 246497390e-09 1s 1s 246497750e-09 1s 1s 246501190e-09 0s 0s 246507630e-09 1s 1s 246508030e-09 1s 1s 246511430e-09 0s 0s 246517870e-09 1s 1s 246518310e-09 1s 1s 246521670e-09 0s 0s 246528110e-09 1s 1s 246528590e-09 1s 1s 246531910e-09 0s 0s 246538350e-09 1s 1s 246538870e-09 1s 1s 246542150e-09 0s 0s 246548590e-09 1s 1s 246549150e-09 1s 1s 246552390e-09 0s 0s 246558830e-09 1s 1s 246559430e-09 1s 1s 246562630e-09 0s 0s 246569070e-09 1s 1s 246569710e-09 1s 1s 246572870e-09 0s 0s 246579310e-09 1s 1s 246579990e-09 1s 1s 246583110e-09 0s 0s 246589550e-09 1s 1s 246590270e-09 1s 1s 246593350e-09 0s 0s 246599790e-09 1s 1s 246600550e-09 1s 1s 246603590e-09 0s 0s 246610030e-09 1s 1s 246610830e-09 1s 1s 246613830e-09 0s 0s 246620270e-09 1s 1s 246621110e-09 1s 1s 246624070e-09 0s 0s 246630510e-09 1s 1s 246631390e-09 1s 1s 246634310e-09 0s 0s 246640750e-09 1s 1s 246641670e-09 1s 1s 246644550e-09 0s 0s 246650990e-09 1s 1s 246651950e-09 1s 1s 246654790e-09 0s 0s 246661230e-09 1s 1s 246662230e-09 1s 1s 246665030e-09 0s 0s 246671470e-09 1s 1s 246672510e-09 1s 1s 246675270e-09 0s 0s 246681710e-09 1s 1s 246682790e-09 1s 1s 246685510e-09 0s 0s 246691950e-09 1s 1s 246693070e-09 1s 1s 246695750e-09 0s 0s 246702190e-09 1s 1s 246703350e-09 1s 1s 246705990e-09 0s 0s 246712430e-09 1s 1s 246713630e-09 1s 1s 246716230e-09 0s 0s 246722670e-09 1s 1s 246723910e-09 1s 1s 246726470e-09 0s 0s 246732910e-09 1s 1s 246734190e-09 1s 1s 246736710e-09 0s 0s 246743150e-09 1s 1s 246744470e-09 1s 1s 246746950e-09 0s 0s 246753390e-09 1s 1s 246754750e-09 1s 1s 246757190e-09 0s 0s 246763630e-09 1s 1s 246765030e-09 1s 1s 246767430e-09 0s 0s 246773870e-09 1s 1s 246775310e-09 1s 1s 246777670e-09 0s 0s 246784110e-09 1s 1s 246785590e-09 1s 1s 246787910e-09 0s 0s 246794350e-09 1s 1s 246795870e-09 1s 1s 246798150e-09 0s 0s 246804590e-09 1s 1s 246806150e-09 1s 1s 246808390e-09 0s 0s 246814830e-09 1s 1s 246816430e-09 1s 1s 246818630e-09 0s 0s 246825070e-09 1s 1s 246826710e-09 1s 1s 246828870e-09 0s 0s 246835310e-09 1s 1s 246836990e-09 1s 1s 246839110e-09 0s 0s 246845550e-09 1s 1s 246847270e-09 1s 1s 246849350e-09 0s 0s 246855790e-09 1s 1s 246857550e-09 1s 1s 246859590e-09 0s 0s 246866030e-09 1s 1s 246867830e-09 1s 1s 246869830e-09 0s 0s 246876270e-09 1s 1s 246878110e-09 1s 1s 246880070e-09 0s 0s 246886510e-09 1s 1s 246888390e-09 1s 1s 246890310e-09 0s 0s 246896750e-09 1s 1s 246898670e-09 1s 1s 246900550e-09 0s 0s 246906990e-09 1s 1s 246908950e-09 1s 1s 246910790e-09 0s 0s 246917230e-09 1s 1s 246919230e-09 1s 1s 246921030e-09 0s 0s 246927470e-09 1s 1s 246929510e-09 1s 1s 246931270e-09 0s 0s 246937710e-09 1s 1s 246939790e-09 1s 1s 246941510e-09 0s 0s 246947950e-09 1s 1s 246950070e-09 1s 1s 246951750e-09 0s 0s 246958190e-09 1s 1s 246960350e-09 1s 1s 246961990e-09 0s 0s 246968430e-09 1s 1s 246970630e-09 1s 1s 246972230e-09 0s 0s 246978670e-09 1s 1s 246980910e-09 1s 1s 246982470e-09 0s 0s 246988910e-09 1s 1s 246991190e-09 1s 1s 246992710e-09 0s 0s 246999150e-09 1s 1s 247001470e-09 1s 1s 247002950e-09 0s 0s 247009390e-09 1s 1s 247011750e-09 1s 1s 247013190e-09 0s 0s 247019630e-09 1s 1s 247022030e-09 1s 1s 247023430e-09 0s 0s 247029870e-09 1s 1s 247032310e-09 1s 1s 247033670e-09 0s 0s 247040110e-09 1s 1s 247042590e-09 1s 1s 247043910e-09 0s 0s 247050350e-09 1s 1s 247052870e-09 1s 1s 247054150e-09 0s 0s 247060590e-09 1s 1s 247063150e-09 1s 1s 247064390e-09 0s 0s 247070830e-09 1s 1s 247073430e-09 1s 1s 247074630e-09 0s 0s 247081070e-09 1s 1s 247083710e-09 1s 1s 247084870e-09 0s 0s 247091310e-09 1s 1s 247093990e-09 1s 1s 247095110e-09 0s 0s 247101550e-09 1s 1s 247104270e-09 1s 1s 247105350e-09 0s 0s 247111790e-09 1s 1s 247114550e-09 1s 1s 247115590e-09 0s 0s 247122030e-09 1s 1s 247124830e-09 1s 1s 247125830e-09 0s 0s 247132270e-09 1s 1s 247135110e-09 1s 1s 247136070e-09 0s 0s 247142510e-09 1s 1s 247145390e-09 1s 1s 247146310e-09 0s 0s 247152750e-09 1s 1s 247155670e-09 1s 1s 247156550e-09 0s 0s 247162990e-09 1s 1s 247165950e-09 1s 1s 247166790e-09 0s 0s 247173230e-09 1s 1s 247176230e-09 1s 1s 247177030e-09 0s 0s 247183470e-09 1s 1s 247186510e-09 1s 1s 247187270e-09 0s 0s 247193710e-09 1s 1s 247196790e-09 1s 1s 247197510e-09 0s 0s 247203950e-09 1s 1s 247207070e-09 1s 1s 247207750e-09 0s 0s 247214190e-09 1s 1s 247217350e-09 1s 1s 247217990e-09 0s 0s 247224430e-09 1s 1s 247227630e-09 1s 1s 247228230e-09 0s 0s 247234670e-09 1s 1s 247237910e-09 1s 1s 247238470e-09 0s 0s 247244910e-09 1s 1s 247248190e-09 1s 1s 247248710e-09 0s 0s 247255150e-09 1s 1s 247258470e-09 1s 1s 247258950e-09 0s 0s 247265390e-09 1s 1s 247268750e-09 1s 1s 247269190e-09 0s 0s 247275630e-09 1s 1s 247279030e-09 1s 1s 247279430e-09 0s 0s 247285870e-09 1s 1s 247289310e-09 1s 1s 247289670e-09 0s 0s 247296110e-09 1s 1s 247299590e-09 1s 1s 247299910e-09 0s 0s 247306350e-09 1s 1s 247309870e-09 1s 1s 247310150e-09 0s 0s 247316590e-09 1s 1s 247320150e-09 1s 1s 247320390e-09 0s 0s 247326830e-09 1s 1s 247330430e-09 1s 1s 247330630e-09 0s 0s 247337070e-09 1s 1s 247340710e-09 1s 1s 247340870e-09 0s 0s 247347310e-09 1s 1s 247350990e-09 1s 1s 247351110e-09 0s 0s 247357550e-09 1s 1s 247361270e-09 1s 1s 247361350e-09 0s 0s 247367790e-09 1s 1s 247371550e-09 1s 1s 247371590e-09 0s 0s 247378030e-09 1s 1s 247381830e-09 0s 0s 247388270e-09 1s 1s 247392070e-09 0s 0s 247392110e-09 0s 0s 247398510e-09 1s 1s 247402310e-09 0s 0s 247402390e-09 0s 0s 247408750e-09 1s 1s 247412550e-09 0s 0s 247412670e-09 0s 0s 247418990e-09 1s 1s 247422790e-09 0s 0s 247422950e-09 0s 0s 247429230e-09 1s 1s 247433030e-09 0s 0s 247433230e-09 0s 0s 247439470e-09 1s 1s 247443270e-09 0s 0s 247443510e-09 0s 0s 247449710e-09 1s 1s 247453510e-09 0s 0s 247453790e-09 0s 0s 247459950e-09 1s 1s 247463750e-09 0s 0s 247464070e-09 0s 0s 247470190e-09 1s 1s 247473990e-09 0s 0s 247474350e-09 0s 0s 247480430e-09 1s 1s 247484230e-09 0s 0s 247484630e-09 0s 0s 247490670e-09 1s 1s 247494470e-09 0s 0s 247494910e-09 0s 0s 247500910e-09 1s 1s 247504710e-09 0s 0s 247505190e-09 0s 0s 247511150e-09 1s 1s 247514950e-09 0s 0s 247515470e-09 0s 0s 247521390e-09 1s 1s 247525190e-09 0s 0s 247525750e-09 0s 0s 247531630e-09 1s 1s 247535430e-09 0s 0s 247536030e-09 0s 0s 247541870e-09 1s 1s 247545670e-09 0s 0s 247546310e-09 0s 0s 247552110e-09 1s 1s 247555910e-09 0s 0s 247556590e-09 0s 0s 247562350e-09 1s 1s 247566150e-09 0s 0s 247566870e-09 0s 0s 247572590e-09 1s 1s 247576390e-09 0s 0s 247577150e-09 0s 0s 247582830e-09 1s 1s 247586630e-09 0s 0s 247587430e-09 0s 0s 247593070e-09 1s 1s 247596870e-09 0s 0s 247597710e-09 0s 0s 247603310e-09 1s 1s 247607110e-09 0s 0s 247607990e-09 0s 0s 247613550e-09 1s 1s 247617350e-09 0s 0s 247618270e-09 0s 0s 247623790e-09 1s 1s 247627590e-09 0s 0s 247628550e-09 0s 0s 247634030e-09 1s 1s 247637830e-09 0s 0s 247638830e-09 0s 0s 247644270e-09 1s 1s 247648070e-09 0s 0s 247649110e-09 0s 0s 247654510e-09 1s 1s 247658310e-09 0s 0s 247659390e-09 0s 0s 247664750e-09 1s 1s 247668550e-09 0s 0s 247669670e-09 0s 0s 247674990e-09 1s 1s 247678790e-09 0s 0s 247679950e-09 0s 0s 247685230e-09 1s 1s 247689030e-09 0s 0s 247690230e-09 0s 0s 247695470e-09 1s 1s 247699270e-09 0s 0s 247700510e-09 0s 0s 247705710e-09 1s 1s 247709510e-09 0s 0s 247710790e-09 0s 0s 247715950e-09 1s 1s 247719750e-09 0s 0s 247721070e-09 0s 0s 247726190e-09 1s 1s 247729990e-09 0s 0s 247731350e-09 0s 0s 247736430e-09 1s 1s 247740230e-09 0s 0s 247741630e-09 0s 0s 247746670e-09 1s 1s 247750470e-09 0s 0s 247751910e-09 0s 0s 247756910e-09 1s 1s 247760710e-09 0s 0s 247762190e-09 0s 0s 247767150e-09 1s 1s 247770950e-09 0s 0s 247772470e-09 0s 0s 247777390e-09 1s 1s 247781190e-09 0s 0s 247782750e-09 0s 0s 247787630e-09 1s 1s 247791430e-09 0s 0s 247793030e-09 0s 0s 247797870e-09 1s 1s 247801670e-09 0s 0s 247803310e-09 0s 0s 247808110e-09 1s 1s 247811910e-09 0s 0s 247813590e-09 0s 0s 247818350e-09 1s 1s 247822150e-09 0s 0s 247823870e-09 0s 0s 247828590e-09 1s 1s 247832390e-09 0s 0s 247834150e-09 0s 0s 247838830e-09 1s 1s 247842630e-09 0s 0s 247844430e-09 0s 0s 247849070e-09 1s 1s 247852870e-09 0s 0s 247854710e-09 0s 0s 247859310e-09 1s 1s 247863110e-09 0s 0s 247864990e-09 0s 0s 247869550e-09 1s 1s 247873350e-09 0s 0s 247875270e-09 0s 0s 247879790e-09 1s 1s 247883590e-09 0s 0s 247885550e-09 0s 0s 247890030e-09 1s 1s 247893830e-09 0s 0s 247895830e-09 0s 0s 247900270e-09 1s 1s 247904070e-09 0s 0s 247906110e-09 0s 0s 247910510e-09 1s 1s 247914310e-09 0s 0s 247916390e-09 0s 0s 247920750e-09 1s 1s 247924550e-09 0s 0s 247926670e-09 0s 0s 247930990e-09 1s 1s 247934790e-09 0s 0s 247936950e-09 0s 0s 247941230e-09 1s 1s 247945030e-09 0s 0s 247947230e-09 0s 0s 247951470e-09 1s 1s 247955270e-09 0s 0s 247957510e-09 0s 0s 247961710e-09 1s 1s 247965510e-09 0s 0s 247967790e-09 0s 0s 247971950e-09 1s 1s 247975750e-09 0s 0s 247978070e-09 0s 0s 247982190e-09 1s 1s 247985990e-09 0s 0s 247988350e-09 0s 0s 247992430e-09 1s 1s 247996230e-09 0s 0s 247998630e-09 0s 0s 248002670e-09 1s 1s 248006470e-09 0s 0s 248008910e-09 0s 0s 248012910e-09 1s 1s 248016710e-09 0s 0s 248019190e-09 0s 0s 248023150e-09 1s 1s 248026950e-09 0s 0s 248029470e-09 0s 0s 248033390e-09 1s 1s 248037190e-09 0s 0s 248039750e-09 0s 0s 248043630e-09 1s 1s 248047430e-09 0s 0s 248050030e-09 0s 0s 248053870e-09 1s 1s 248057670e-09 0s 0s 248060310e-09 0s 0s 248064110e-09 1s 1s 248067910e-09 0s 0s 248070590e-09 0s 0s 248074350e-09 1s 1s 248078150e-09 0s 0s 248080870e-09 0s 0s 248084590e-09 1s 1s 248088390e-09 0s 0s 248091150e-09 0s 0s 248094830e-09 1s 1s 248098630e-09 0s 0s 248101430e-09 0s 0s 248105070e-09 1s 1s 248108870e-09 0s 0s 248111710e-09 0s 0s 248115310e-09 1s 1s 248119110e-09 0s 0s 248121990e-09 0s 0s 248125550e-09 1s 1s 248129350e-09 0s 0s 248132270e-09 0s 0s 248135790e-09 1s 1s 248139590e-09 0s 0s 248142550e-09 0s 0s 248146030e-09 1s 1s 248149830e-09 0s 0s 248152830e-09 0s 0s 248156270e-09 1s 1s 248160070e-09 0s 0s 248163110e-09 0s 0s 248166510e-09 1s 1s 248170310e-09 0s 0s 248173390e-09 0s 0s 248176750e-09 1s 1s 248180550e-09 0s 0s 248183670e-09 0s 0s 248186990e-09 1s 1s 248190790e-09 0s 0s 248193950e-09 0s 0s 248197230e-09 1s 1s 248201030e-09 0s 0s 248204230e-09 0s 0s 248207470e-09 1s 1s 248211270e-09 0s 0s 248214510e-09 0s 0s 248217710e-09 1s 1s 248221510e-09 0s 0s 248224790e-09 0s 0s 248227950e-09 1s 1s 248231750e-09 0s 0s 248235070e-09 0s 0s 248238190e-09 1s 1s 248241990e-09 0s 0s 248245350e-09 0s 0s 248248430e-09 1s 1s 248252230e-09 0s 0s 248255630e-09 0s 0s 248258670e-09 1s 1s 248262470e-09 0s 0s 248265910e-09 0s 0s 248268910e-09 1s 1s 248272710e-09 0s 0s 248276190e-09 0s 0s 248279150e-09 1s 1s 248282950e-09 0s 0s 248286470e-09 0s 0s 248289390e-09 1s 1s 248293190e-09 0s 0s 248296750e-09 0s 0s 248299630e-09 1s 1s 248303430e-09 0s 0s 248307030e-09 0s 0s 248309870e-09 1s 1s 248313670e-09 0s 0s 248317310e-09 0s 0s 248320110e-09 1s 1s 248323910e-09 0s 0s 248327590e-09 0s 0s 248330350e-09 1s 1s 248334150e-09 0s 0s 248337870e-09 0s 0s 248340590e-09 1s 1s 248344390e-09 0s 0s 248348150e-09 0s 0s 248350830e-09 1s 1s 248354630e-09 0s 0s 248358430e-09 0s 0s 248361070e-09 1s 1s 248364870e-09 0s 0s 248368710e-09 0s 0s 248371310e-09 1s 1s 248375110e-09 0s 0s 248378990e-09 0s 0s 248381550e-09 1s 1s 248385350e-09 0s 0s 248389270e-09 0s 0s 248391790e-09 1s 1s 248395590e-09 0s 0s 248399550e-09 0s 0s 248402030e-09 1s 1s 248405830e-09 0s 0s 248409830e-09 0s 0s 248412270e-09 1s 1s 248416070e-09 0s 0s 248420110e-09 0s 0s 248422510e-09 1s 1s 248426310e-09 0s 0s 248430390e-09 0s 0s 248432750e-09 1s 1s 248436550e-09 0s 0s 248440670e-09 0s 0s 248442990e-09 1s 1s 248446790e-09 0s 0s 248450950e-09 0s 0s 248453230e-09 1s 1s 248457030e-09 0s 0s 248461230e-09 0s 0s 248463470e-09 1s 1s 248467270e-09 0s 0s 248471510e-09 0s 0s 248473710e-09 1s 1s 248477510e-09 0s 0s 248481790e-09 0s 0s 248483950e-09 1s 1s 248487750e-09 0s 0s 248492070e-09 0s 0s 248494190e-09 1s 1s 248497990e-09 0s 0s 248502350e-09 0s 0s 248504430e-09 1s 1s 248508230e-09 0s 0s 248512630e-09 0s 0s 248514670e-09 1s 1s 248518470e-09 0s 0s 248522910e-09 0s 0s 248524910e-09 1s 1s 248528710e-09 0s 0s 248533190e-09 0s 0s 248535150e-09 1s 1s 248538950e-09 0s 0s 248543470e-09 0s 0s 248545390e-09 1s 1s 248549190e-09 0s 0s 248553750e-09 0s 0s 248555630e-09 1s 1s 248559430e-09 0s 0s 248564030e-09 0s 0s 248565870e-09 1s 1s 248569670e-09 0s 0s 248574310e-09 0s 0s 248576110e-09 1s 1s 248579910e-09 0s 0s 248584590e-09 0s 0s 248586350e-09 1s 1s 248590150e-09 0s 0s 248594870e-09 0s 0s 248596590e-09 1s 1s 248600390e-09 0s 0s 248605150e-09 0s 0s 248606830e-09 1s 1s 248610630e-09 0s 0s 248615430e-09 0s 0s 248617070e-09 1s 1s 248620870e-09 0s 0s 248625710e-09 0s 0s 248627310e-09 1s 1s 248631110e-09 0s 0s 248635990e-09 0s 0s 248637550e-09 1s 1s 248641350e-09 0s 0s 248646270e-09 0s 0s 248647790e-09 1s 1s 248651590e-09 0s 0s 248656550e-09 0s 0s 248658030e-09 1s 1s 248661830e-09 0s 0s 248666830e-09 0s 0s 248668270e-09 1s 1s 248672070e-09 0s 0s 248677110e-09 0s 0s 248678510e-09 1s 1s 248682310e-09 0s 0s 248687390e-09 0s 0s 248688750e-09 1s 1s 248692550e-09 0s 0s 248697670e-09 0s 0s 248698990e-09 1s 1s 248702790e-09 0s 0s 248707950e-09 0s 0s 248709230e-09 1s 1s 248713030e-09 0s 0s 248718230e-09 0s 0s 248719470e-09 1s 1s 248723270e-09 0s 0s 248728510e-09 0s 0s 248729710e-09 1s 1s 248733510e-09 0s 0s 248738790e-09 0s 0s 248739950e-09 1s 1s 248743750e-09 0s 0s 248749070e-09 0s 0s 248750190e-09 1s 1s 248753990e-09 0s 0s 248759350e-09 0s 0s 248760430e-09 1s 1s 248764230e-09 0s 0s 248769630e-09 0s 0s 248770670e-09 1s 1s 248774470e-09 0s 0s 248779910e-09 0s 0s 248780910e-09 1s 1s 248784710e-09 0s 0s 248790190e-09 0s 0s 248791150e-09 1s 1s 248794950e-09 0s 0s 248800470e-09 0s 0s 248801390e-09 1s 1s 248805190e-09 0s 0s 248810750e-09 0s 0s 248811630e-09 1s 1s 248815430e-09 0s 0s 248821030e-09 0s 0s 248821870e-09 1s 1s 248825670e-09 0s 0s 248831310e-09 0s 0s 248832110e-09 1s 1s 248835910e-09 0s 0s 248841590e-09 0s 0s 248842350e-09 1s 1s 248846150e-09 0s 0s 248851870e-09 0s 0s 248852590e-09 1s 1s 248856390e-09 0s 0s 248862150e-09 0s 0s 248862830e-09 1s 1s 248866630e-09 0s 0s 248872430e-09 0s 0s 248873070e-09 1s 1s 248876870e-09 0s 0s 248882710e-09 0s 0s 248883310e-09 1s 1s 248887110e-09 0s 0s 248892990e-09 0s 0s 248893550e-09 1s 1s 248897350e-09 0s 0s 248903270e-09 0s 0s 248903790e-09 1s 1s 248907590e-09 0s 0s 248913550e-09 0s 0s 248914030e-09 1s 1s 248917830e-09 0s 0s 248923830e-09 0s 0s 248924270e-09 1s 1s 248928070e-09 0s 0s 248934110e-09 0s 0s 248934510e-09 1s 1s 248938310e-09 0s 0s 248944390e-09 0s 0s 248944750e-09 1s 1s 248948550e-09 0s 0s 248954670e-09 0s 0s 248954990e-09 1s 1s 248958790e-09 0s 0s 248964950e-09 0s 0s 248965230e-09 1s 1s 248969030e-09 0s 0s 248975230e-09 0s 0s 248975470e-09 1s 1s 248979270e-09 0s 0s 248985510e-09 0s 0s 248985710e-09 1s 1s 248989510e-09 0s 0s 248995790e-09 0s 0s 248995950e-09 1s 1s 248999750e-09 0s 0s 249006070e-09 0s 0s 249006190e-09 1s 1s 249009990e-09 0s 0s 249016350e-09 0s 0s 249016430e-09 1s 1s 249020230e-09 0s 0s 249026630e-09 0s 0s 249026670e-09 1s 1s 249030470e-09 0s 0s 249036910e-09 1s 1s 249036950e-09 1s 1s 249040750e-09 0s 0s 249047150e-09 1s 1s 249047230e-09 1s 1s 249050990e-09 0s 0s 249057390e-09 1s 1s 249057510e-09 1s 1s 249061230e-09 0s 0s 249067630e-09 1s 1s 249067790e-09 1s 1s 249071470e-09 0s 0s 249077870e-09 1s 1s 249078070e-09 1s 1s 249081710e-09 0s 0s 249088110e-09 1s 1s 249088350e-09 1s 1s 249091950e-09 0s 0s 249098350e-09 1s 1s 249098630e-09 1s 1s 249102190e-09 0s 0s 249108590e-09 1s 1s 249108910e-09 1s 1s 249112430e-09 0s 0s 249118830e-09 1s 1s 249119190e-09 1s 1s 249122670e-09 0s 0s 249129070e-09 1s 1s 249129470e-09 1s 1s 249132910e-09 0s 0s 249139310e-09 1s 1s 249139750e-09 1s 1s 249143150e-09 0s 0s 249149550e-09 1s 1s 249150030e-09 1s 1s 249153390e-09 0s 0s 249159790e-09 1s 1s 249160310e-09 1s 1s 249163630e-09 0s 0s 249170030e-09 1s 1s 249170590e-09 1s 1s 249173870e-09 0s 0s 249180270e-09 1s 1s 249180870e-09 1s 1s 249184110e-09 0s 0s 249190510e-09 1s 1s 249191150e-09 1s 1s 249194350e-09 0s 0s 249200750e-09 1s 1s 249201430e-09 1s 1s 249204590e-09 0s 0s 249210990e-09 1s 1s 249211710e-09 1s 1s 249214830e-09 0s 0s 249221230e-09 1s 1s 249221990e-09 1s 1s 249225070e-09 0s 0s 249231470e-09 1s 1s 249232270e-09 1s 1s 249235310e-09 0s 0s 249241710e-09 1s 1s 249242550e-09 1s 1s 249245550e-09 0s 0s 249251950e-09 1s 1s 249252830e-09 1s 1s 249255790e-09 0s 0s 249262190e-09 1s 1s 249263110e-09 1s 1s 249266030e-09 0s 0s 249272430e-09 1s 1s 249273390e-09 1s 1s 249276270e-09 0s 0s 249282670e-09 1s 1s 249283670e-09 1s 1s 249286510e-09 0s 0s 249292910e-09 1s 1s 249293950e-09 1s 1s 249296750e-09 0s 0s 249303150e-09 1s 1s 249304230e-09 1s 1s 249306990e-09 0s 0s 249313390e-09 1s 1s 249314510e-09 1s 1s 249317230e-09 0s 0s 249323630e-09 1s 1s 249324790e-09 1s 1s 249327470e-09 0s 0s 249333870e-09 1s 1s 249335070e-09 1s 1s 249337710e-09 0s 0s 249344110e-09 1s 1s 249345350e-09 1s 1s 249347950e-09 0s 0s 249354350e-09 1s 1s 249355630e-09 1s 1s 249358190e-09 0s 0s 249364590e-09 1s 1s 249365910e-09 1s 1s 249368430e-09 0s 0s 249374830e-09 1s 1s 249376190e-09 1s 1s 249378670e-09 0s 0s 249385070e-09 1s 1s 249386470e-09 1s 1s 249388910e-09 0s 0s 249395310e-09 1s 1s 249396750e-09 1s 1s 249399150e-09 0s 0s 249405550e-09 1s 1s 249407030e-09 1s 1s 249409390e-09 0s 0s 249415790e-09 1s 1s 249417310e-09 1s 1s 249419630e-09 0s 0s 249426030e-09 1s 1s 249427590e-09 1s 1s 249429870e-09 0s 0s 249436270e-09 1s 1s 249437870e-09 1s 1s 249440110e-09 0s 0s 249446510e-09 1s 1s 249448150e-09 1s 1s 249450350e-09 0s 0s 249456750e-09 1s 1s 249458430e-09 1s 1s 249460590e-09 0s 0s 249466990e-09 1s 1s 249468710e-09 1s 1s 249470830e-09 0s 0s 249477230e-09 1s 1s 249478990e-09 1s 1s 249481070e-09 0s 0s 249487470e-09 1s 1s 249489270e-09 1s 1s 249491310e-09 0s 0s 249497710e-09 1s 1s 249499550e-09 1s 1s 249501550e-09 0s 0s 249507950e-09 1s 1s 249509830e-09 1s 1s 249511790e-09 0s 0s 249518190e-09 1s 1s 249520110e-09 1s 1s 249522030e-09 0s 0s 249528430e-09 1s 1s 249530390e-09 1s 1s 249532270e-09 0s 0s 249538670e-09 1s 1s 249540670e-09 1s 1s 249542510e-09 0s 0s 249548910e-09 1s 1s 249550950e-09 1s 1s 249552750e-09 0s 0s 249559150e-09 1s 1s 249561230e-09 1s 1s 249562990e-09 0s 0s 249569390e-09 1s 1s 249571510e-09 1s 1s 249573230e-09 0s 0s 249579630e-09 1s 1s 249581790e-09 1s 1s 249583470e-09 0s 0s 249589870e-09 1s 1s 249592070e-09 1s 1s 249593710e-09 0s 0s 249600110e-09 1s 1s 249602350e-09 1s 1s 249603950e-09 0s 0s 249610350e-09 1s 1s 249612630e-09 1s 1s 249614190e-09 0s 0s 249620590e-09 1s 1s 249622910e-09 1s 1s 249624430e-09 0s 0s 249630830e-09 1s 1s 249633190e-09 1s 1s 249634670e-09 0s 0s 249641070e-09 1s 1s 249643470e-09 1s 1s 249644910e-09 0s 0s 249651310e-09 1s 1s 249653750e-09 1s 1s 249655150e-09 0s 0s 249661550e-09 1s 1s 249664030e-09 1s 1s 249665390e-09 0s 0s 249671790e-09 1s 1s 249674310e-09 1s 1s 249675630e-09 0s 0s 249682030e-09 1s 1s 249684590e-09 1s 1s 249685870e-09 0s 0s 249692270e-09 1s 1s 249694870e-09 1s 1s 249696110e-09 0s 0s 249702510e-09 1s 1s 249705150e-09 1s 1s 249706350e-09 0s 0s 249712750e-09 1s 1s 249715430e-09 1s 1s 249716590e-09 0s 0s 249722990e-09 1s 1s 249725710e-09 1s 1s 249726830e-09 0s 0s 249733230e-09 1s 1s 249735990e-09 1s 1s 249737070e-09 0s 0s 249743470e-09 1s 1s 249746270e-09 1s 1s 249747310e-09 0s 0s 249753710e-09 1s 1s 249756550e-09 1s 1s 249757550e-09 0s 0s 249763950e-09 1s 1s 249766830e-09 1s 1s 249767790e-09 0s 0s 249774190e-09 1s 1s 249777110e-09 1s 1s 249778030e-09 0s 0s 249784430e-09 1s 1s 249787390e-09 1s 1s 249788270e-09 0s 0s 249794670e-09 1s 1s 249797670e-09 1s 1s 249798510e-09 0s 0s 249804910e-09 1s 1s 249807950e-09 1s 1s 249808750e-09 0s 0s 249815150e-09 1s 1s 249818230e-09 1s 1s 249818990e-09 0s 0s 249825390e-09 1s 1s 249828510e-09 1s 1s 249829230e-09 0s 0s 249835630e-09 1s 1s 249838790e-09 1s 1s 249839470e-09 0s 0s 249845870e-09 1s 1s 249849070e-09 1s 1s 249849710e-09 0s 0s 249856110e-09 1s 1s 249859350e-09 1s 1s 249859950e-09 0s 0s 249866350e-09 1s 1s 249869630e-09 1s 1s 249870190e-09 0s 0s 249876590e-09 1s 1s 249879910e-09 1s 1s 249880430e-09 0s 0s 249886830e-09 1s 1s 249890190e-09 1s 1s 249890670e-09 0s 0s 249897070e-09 1s 1s 249900470e-09 1s 1s 249900910e-09 0s 0s 249907310e-09 1s 1s 249910750e-09 1s 1s 249911150e-09 0s 0s 249917550e-09 1s 1s 249921030e-09 1s 1s 249921390e-09 0s 0s 249927790e-09 1s 1s 249931310e-09 1s 1s 249931630e-09 0s 0s 249938030e-09 1s 1s 249941590e-09 1s 1s 249941870e-09 0s 0s 249948270e-09 1s 1s 249951870e-09 1s 1s 249952110e-09 0s 0s 249958510e-09 1s 1s 249962150e-09 1s 1s 249962350e-09 0s 0s 249968750e-09 1s 1s 249972430e-09 1s 1s 249972590e-09 0s 0s 249978990e-09 1s 1s 249982710e-09 1s 1s 249982830e-09 0s 0s 249989230e-09 1s 1s 249992990e-09 1s 1s 249993070e-09 0s 0s 249999470e-09 1s 1s 250003270e-09 1s 1s 250003310e-09 0s 0s 250009710e-09 1s 1s 250013550e-09 0s 0s 250019950e-09 1s 1s 250023790e-09 0s 0s 250023830e-09 0s 0s 250030190e-09 1s 1s 250034030e-09 0s 0s 250034110e-09 0s 0s 250040430e-09 1s 1s 250044270e-09 0s 0s 250044390e-09 0s 0s 250050670e-09 1s 1s 250054510e-09 0s 0s 250054670e-09 0s 0s 250060910e-09 1s 1s 250064750e-09 0s 0s 250064950e-09 0s 0s 250071150e-09 1s 1s 250074990e-09 0s 0s 250075230e-09 0s 0s 250081390e-09 1s 1s 250085230e-09 0s 0s 250085510e-09 0s 0s 250091630e-09 1s 1s 250095470e-09 0s 0s 250095790e-09 0s 0s 250101870e-09 1s 1s 250105710e-09 0s 0s 250106070e-09 0s 0s 250112110e-09 1s 1s 250115950e-09 0s 0s 250116350e-09 0s 0s 250122350e-09 1s 1s 250126190e-09 0s 0s 250126630e-09 0s 0s 250132590e-09 1s 1s 250136430e-09 0s 0s 250136910e-09 0s 0s 250142830e-09 1s 1s 250146670e-09 0s 0s 250147190e-09 0s 0s 250153070e-09 1s 1s 250156910e-09 0s 0s 250157470e-09 0s 0s 250163310e-09 1s 1s 250167150e-09 0s 0s 250167750e-09 0s 0s 250173550e-09 1s 1s 250177390e-09 0s 0s 250178030e-09 0s 0s 250183790e-09 1s 1s 250187630e-09 0s 0s 250188310e-09 0s 0s 250194030e-09 1s 1s 250197870e-09 0s 0s 250198590e-09 0s 0s 250204270e-09 1s 1s 250208110e-09 0s 0s 250208870e-09 0s 0s 250214510e-09 1s 1s 250218350e-09 0s 0s 250219150e-09 0s 0s 250224750e-09 1s 1s 250228590e-09 0s 0s 250229430e-09 0s 0s 250234990e-09 1s 1s 250238830e-09 0s 0s 250239710e-09 0s 0s 250245230e-09 1s 1s 250249070e-09 0s 0s 250249990e-09 0s 0s 250255470e-09 1s 1s 250259310e-09 0s 0s 250260270e-09 0s 0s 250265710e-09 1s 1s 250269550e-09 0s 0s 250270550e-09 0s 0s 250275950e-09 1s 1s 250279790e-09 0s 0s 250280830e-09 0s 0s 250286190e-09 1s 1s 250290030e-09 0s 0s 250291110e-09 0s 0s 250296430e-09 1s 1s 250300270e-09 0s 0s 250301390e-09 0s 0s 250306670e-09 1s 1s 250310510e-09 0s 0s 250311670e-09 0s 0s 250316910e-09 1s 1s 250320750e-09 0s 0s 250321950e-09 0s 0s 250327150e-09 1s 1s 250330990e-09 0s 0s 250332230e-09 0s 0s 250337390e-09 1s 1s 250341230e-09 0s 0s 250342510e-09 0s 0s 250347630e-09 1s 1s 250351470e-09 0s 0s 250352790e-09 0s 0s 250357870e-09 1s 1s 250361710e-09 0s 0s 250363070e-09 0s 0s 250368110e-09 1s 1s 250371950e-09 0s 0s 250373350e-09 0s 0s 250378350e-09 1s 1s 250382190e-09 0s 0s 250383630e-09 0s 0s 250388590e-09 1s 1s 250392430e-09 0s 0s 250393910e-09 0s 0s 250398830e-09 1s 1s 250402670e-09 0s 0s 250404190e-09 0s 0s 250409070e-09 1s 1s 250412910e-09 0s 0s 250414470e-09 0s 0s 250419310e-09 1s 1s 250423150e-09 0s 0s 250424750e-09 0s 0s 250429550e-09 1s 1s 250433390e-09 0s 0s 250435030e-09 0s 0s 250439790e-09 1s 1s 250443630e-09 0s 0s 250445310e-09 0s 0s 250450030e-09 1s 1s 250453870e-09 0s 0s 250455590e-09 0s 0s 250460270e-09 1s 1s 250464110e-09 0s 0s 250465870e-09 0s 0s 250470510e-09 1s 1s 250474350e-09 0s 0s 250476150e-09 0s 0s 250480750e-09 1s 1s 250484590e-09 0s 0s 250486430e-09 0s 0s 250490990e-09 1s 1s 250494830e-09 0s 0s 250496710e-09 0s 0s 250501230e-09 1s 1s 250505070e-09 0s 0s 250506990e-09 0s 0s 250511470e-09 1s 1s 250515310e-09 0s 0s 250517270e-09 0s 0s 250521710e-09 1s 1s 250525550e-09 0s 0s 250527550e-09 0s 0s 250531950e-09 1s 1s 250535790e-09 0s 0s 250537830e-09 0s 0s 250542190e-09 1s 1s 250546030e-09 0s 0s 250548110e-09 0s 0s 250552430e-09 1s 1s 250556270e-09 0s 0s 250558390e-09 0s 0s 250562670e-09 1s 1s 250566510e-09 0s 0s 250568670e-09 0s 0s 250572910e-09 1s 1s 250576750e-09 0s 0s 250578950e-09 0s 0s 250583150e-09 1s 1s 250586990e-09 0s 0s 250589230e-09 0s 0s 250593390e-09 1s 1s 250597230e-09 0s 0s 250599510e-09 0s 0s 250603630e-09 1s 1s 250607470e-09 0s 0s 250609790e-09 0s 0s 250613870e-09 1s 1s 250617710e-09 0s 0s 250620070e-09 0s 0s 250624110e-09 1s 1s 250627950e-09 0s 0s 250630350e-09 0s 0s 250634350e-09 1s 1s 250638190e-09 0s 0s 250640630e-09 0s 0s 250644590e-09 1s 1s 250648430e-09 0s 0s 250650910e-09 0s 0s 250654830e-09 1s 1s 250658670e-09 0s 0s 250661190e-09 0s 0s 250665070e-09 1s 1s 250668910e-09 0s 0s 250671470e-09 0s 0s 250675310e-09 1s 1s 250679150e-09 0s 0s 250681750e-09 0s 0s 250685550e-09 1s 1s 250689390e-09 0s 0s 250692030e-09 0s 0s 250695790e-09 1s 1s 250699630e-09 0s 0s 250702310e-09 0s 0s 250706030e-09 1s 1s 250709870e-09 0s 0s 250712590e-09 0s 0s 250716270e-09 1s 1s 250720110e-09 0s 0s 250722870e-09 0s 0s 250726510e-09 1s 1s 250730350e-09 0s 0s 250733150e-09 0s 0s 250736750e-09 1s 1s 250740590e-09 0s 0s 250743430e-09 0s 0s 250746990e-09 1s 1s 250750830e-09 0s 0s 250753710e-09 0s 0s 250757230e-09 1s 1s 250761070e-09 0s 0s 250763990e-09 0s 0s 250767470e-09 1s 1s 250771310e-09 0s 0s 250774270e-09 0s 0s 250777710e-09 1s 1s 250781550e-09 0s 0s 250784550e-09 0s 0s 250787950e-09 1s 1s 250791790e-09 0s 0s 250794830e-09 0s 0s 250798190e-09 1s 1s 250802030e-09 0s 0s 250805110e-09 0s 0s 250808430e-09 1s 1s 250812270e-09 0s 0s 250815390e-09 0s 0s 250818670e-09 1s 1s 250822510e-09 0s 0s 250825670e-09 0s 0s 250828910e-09 1s 1s 250832750e-09 0s 0s 250835950e-09 0s 0s 250839150e-09 1s 1s 250842990e-09 0s 0s 250846230e-09 0s 0s 250849390e-09 1s 1s 250853230e-09 0s 0s 250856510e-09 0s 0s 250859630e-09 1s 1s 250863470e-09 0s 0s 250866790e-09 0s 0s 250869870e-09 1s 1s 250873710e-09 0s 0s 250877070e-09 0s 0s 250880110e-09 1s 1s 250883950e-09 0s 0s 250887350e-09 0s 0s 250890350e-09 1s 1s 250894190e-09 0s 0s 250897630e-09 0s 0s 250900590e-09 1s 1s 250904430e-09 0s 0s 250907910e-09 0s 0s 250910830e-09 1s 1s 250914670e-09 0s 0s 250918190e-09 0s 0s 250921070e-09 1s 1s 250924910e-09 0s 0s 250928470e-09 0s 0s 250931310e-09 1s 1s 250935150e-09 0s 0s 250938750e-09 0s 0s 250941550e-09 1s 1s 250945390e-09 0s 0s 250949030e-09 0s 0s 250951790e-09 1s 1s 250955630e-09 0s 0s 250959310e-09 0s 0s 250962030e-09 1s 1s 250965870e-09 0s 0s 250969590e-09 0s 0s 250972270e-09 1s 1s 250976110e-09 0s 0s 250979870e-09 0s 0s 250982510e-09 1s 1s 250986350e-09 0s 0s 250990150e-09 0s 0s 250992750e-09 1s 1s 250996590e-09 0s 0s 251000430e-09 0s 0s 251002990e-09 1s 1s 251006830e-09 0s 0s 251010710e-09 0s 0s 251013230e-09 1s 1s 251017070e-09 0s 0s 251020990e-09 0s 0s 251023470e-09 1s 1s 251027310e-09 0s 0s 251031270e-09 0s 0s 251033710e-09 1s 1s 251037550e-09 0s 0s 251041550e-09 0s 0s 251043950e-09 1s 1s 251047790e-09 0s 0s 251051830e-09 0s 0s 251054190e-09 1s 1s 251058030e-09 0s 0s 251062110e-09 0s 0s 251064430e-09 1s 1s 251068270e-09 0s 0s 251072390e-09 0s 0s 251074670e-09 1s 1s 251078510e-09 0s 0s 251082670e-09 0s 0s 251084910e-09 1s 1s 251088750e-09 0s 0s 251092950e-09 0s 0s 251095150e-09 1s 1s 251098990e-09 0s 0s 251103230e-09 0s 0s 251105390e-09 1s 1s 251109230e-09 0s 0s 251113510e-09 0s 0s 251115630e-09 1s 1s 251119470e-09 0s 0s 251123790e-09 0s 0s 251125870e-09 1s 1s 251129710e-09 0s 0s 251134070e-09 0s 0s 251136110e-09 1s 1s 251139950e-09 0s 0s 251144350e-09 0s 0s 251146350e-09 1s 1s 251150190e-09 0s 0s 251154630e-09 0s 0s 251156590e-09 1s 1s 251160430e-09 0s 0s 251164910e-09 0s 0s 251166830e-09 1s 1s 251170670e-09 0s 0s 251175190e-09 0s 0s 251177070e-09 1s 1s 251180910e-09 0s 0s 251185470e-09 0s 0s 251187310e-09 1s 1s 251191150e-09 0s 0s 251195750e-09 0s 0s 251197550e-09 1s 1s 251201390e-09 0s 0s 251206030e-09 0s 0s 251207790e-09 1s 1s 251211630e-09 0s 0s 251216310e-09 0s 0s 251218030e-09 1s 1s 251221870e-09 0s 0s 251226590e-09 0s 0s 251228270e-09 1s 1s 251232110e-09 0s 0s 251236870e-09 0s 0s 251238510e-09 1s 1s 251242350e-09 0s 0s 251247150e-09 0s 0s 251248750e-09 1s 1s 251252590e-09 0s 0s 251257430e-09 0s 0s 251258990e-09 1s 1s 251262830e-09 0s 0s 251267710e-09 0s 0s 251269230e-09 1s 1s 251273070e-09 0s 0s 251277990e-09 0s 0s 251279470e-09 1s 1s 251283310e-09 0s 0s 251288270e-09 0s 0s 251289710e-09 1s 1s 251293550e-09 0s 0s 251298550e-09 0s 0s 251299950e-09 1s 1s 251303790e-09 0s 0s 251308830e-09 0s 0s 251310190e-09 1s 1s 251314030e-09 0s 0s 251319110e-09 0s 0s 251320430e-09 1s 1s 251324270e-09 0s 0s 251329390e-09 0s 0s 251330670e-09 1s 1s 251334510e-09 0s 0s 251339670e-09 0s 0s 251340910e-09 1s 1s 251344750e-09 0s 0s 251349950e-09 0s 0s 251351150e-09 1s 1s 251354990e-09 0s 0s 251360230e-09 0s 0s 251361390e-09 1s 1s 251365230e-09 0s 0s 251370510e-09 0s 0s 251371630e-09 1s 1s 251375470e-09 0s 0s 251380790e-09 0s 0s 251381870e-09 1s 1s 251385710e-09 0s 0s 251391070e-09 0s 0s 251392110e-09 1s 1s 251395950e-09 0s 0s 251401350e-09 0s 0s 251402350e-09 1s 1s 251406190e-09 0s 0s 251411630e-09 0s 0s 251412590e-09 1s 1s 251416430e-09 0s 0s 251421910e-09 0s 0s 251422830e-09 1s 1s 251426670e-09 0s 0s 251432190e-09 0s 0s 251433070e-09 1s 1s 251436910e-09 0s 0s 251442470e-09 0s 0s 251443310e-09 1s 1s 251447150e-09 0s 0s 251452750e-09 0s 0s 251453550e-09 1s 1s 251457390e-09 0s 0s 251463030e-09 0s 0s 251463790e-09 1s 1s 251467630e-09 0s 0s 251473310e-09 0s 0s 251474030e-09 1s 1s 251477870e-09 0s 0s 251483590e-09 0s 0s 251484270e-09 1s 1s 251488110e-09 0s 0s 251493870e-09 0s 0s 251494510e-09 1s 1s 251498350e-09 0s 0s 251504150e-09 0s 0s 251504750e-09 1s 1s 251508590e-09 0s 0s 251514430e-09 0s 0s 251514990e-09 1s 1s 251518830e-09 0s 0s 251524710e-09 0s 0s 251525230e-09 1s 1s 251529070e-09 0s 0s 251534990e-09 0s 0s 251535470e-09 1s 1s 251539310e-09 0s 0s 251545270e-09 0s 0s 251545710e-09 1s 1s 251549550e-09 0s 0s 251555550e-09 0s 0s 251555950e-09 1s 1s 251559790e-09 0s 0s 251565830e-09 0s 0s 251566190e-09 1s 1s 251570030e-09 0s 0s 251576110e-09 0s 0s 251576430e-09 1s 1s 251580270e-09 0s 0s 251586390e-09 0s 0s 251586670e-09 1s 1s 251590510e-09 0s 0s 251596670e-09 0s 0s 251596910e-09 1s 1s 251600750e-09 0s 0s 251606950e-09 0s 0s 251607150e-09 1s 1s 251610990e-09 0s 0s 251617230e-09 0s 0s 251617390e-09 1s 1s 251621230e-09 0s 0s 251627510e-09 0s 0s 251627630e-09 1s 1s 251631470e-09 0s 0s 251637790e-09 0s 0s 251637870e-09 1s 1s 251641710e-09 0s 0s 251648070e-09 0s 0s 251648110e-09 1s 1s 251651950e-09 0s 0s 251658350e-09 1s 1s 251658390e-09 1s 1s 251662230e-09 0s 0s 251668590e-09 1s 1s 251668670e-09 1s 1s 251672470e-09 0s 0s 251678830e-09 1s 1s 251678950e-09 1s 1s 251682710e-09 0s 0s 251689070e-09 1s 1s 251689230e-09 1s 1s 251692950e-09 0s 0s 251699310e-09 1s 1s 251699510e-09 1s 1s 251703190e-09 0s 0s 251709550e-09 1s 1s 251709790e-09 1s 1s 251713430e-09 0s 0s 251719790e-09 1s 1s 251720070e-09 1s 1s 251723670e-09 0s 0s 251730030e-09 1s 1s 251730350e-09 1s 1s 251733910e-09 0s 0s 251740270e-09 1s 1s 251740630e-09 1s 1s 251744150e-09 0s 0s 251750510e-09 1s 1s 251750910e-09 1s 1s 251754390e-09 0s 0s 251760750e-09 1s 1s 251761190e-09 1s 1s 251764630e-09 0s 0s 251770990e-09 1s 1s 251771470e-09 1s 1s 251774870e-09 0s 0s 251781230e-09 1s 1s 251781750e-09 1s 1s 251785110e-09 0s 0s 251791470e-09 1s 1s 251792030e-09 1s 1s 251795350e-09 0s 0s 251801710e-09 1s 1s 251802310e-09 1s 1s 251805590e-09 0s 0s 251811950e-09 1s 1s 251812590e-09 1s 1s 251815830e-09 0s 0s 251822190e-09 1s 1s 251822870e-09 1s 1s 251826070e-09 0s 0s 251832430e-09 1s 1s 251833150e-09 1s 1s 251836310e-09 0s 0s 251842670e-09 1s 1s 251843430e-09 1s 1s 251846550e-09 0s 0s 251852910e-09 1s 1s 251853710e-09 1s 1s 251856790e-09 0s 0s 251863150e-09 1s 1s 251863990e-09 1s 1s 251867030e-09 0s 0s 251873390e-09 1s 1s 251874270e-09 1s 1s 251877270e-09 0s 0s 251883630e-09 1s 1s 251884550e-09 1s 1s 251887510e-09 0s 0s 251893870e-09 1s 1s 251894830e-09 1s 1s 251897750e-09 0s 0s 251904110e-09 1s 1s 251905110e-09 1s 1s 251907990e-09 0s 0s 251914350e-09 1s 1s 251915390e-09 1s 1s 251918230e-09 0s 0s 251924590e-09 1s 1s 251925670e-09 1s 1s 251928470e-09 0s 0s 251934830e-09 1s 1s 251935950e-09 1s 1s 251938710e-09 0s 0s 251945070e-09 1s 1s 251946230e-09 1s 1s 251948950e-09 0s 0s 251955310e-09 1s 1s 251956510e-09 1s 1s 251959190e-09 0s 0s 251965550e-09 1s 1s 251966790e-09 1s 1s 251969430e-09 0s 0s 251975790e-09 1s 1s 251977070e-09 1s 1s 251979670e-09 0s 0s 251986030e-09 1s 1s 251987350e-09 1s 1s 251989910e-09 0s 0s 251996270e-09 1s 1s 251997630e-09 1s 1s 252000150e-09 0s 0s 252006510e-09 1s 1s 252007910e-09 1s 1s 252010390e-09 0s 0s 252016750e-09 1s 1s 252018190e-09 1s 1s 252020630e-09 0s 0s 252026990e-09 1s 1s 252028470e-09 1s 1s 252030870e-09 0s 0s 252037230e-09 1s 1s 252038750e-09 1s 1s 252041110e-09 0s 0s 252047470e-09 1s 1s 252049030e-09 1s 1s 252051350e-09 0s 0s 252057710e-09 1s 1s 252059310e-09 1s 1s 252061590e-09 0s 0s 252067950e-09 1s 1s 252069590e-09 1s 1s 252071830e-09 0s 0s 252078190e-09 1s 1s 252079870e-09 1s 1s 252082070e-09 0s 0s 252088430e-09 1s 1s 252090150e-09 1s 1s 252092310e-09 0s 0s 252098670e-09 1s 1s 252100430e-09 1s 1s 252102550e-09 0s 0s 252108910e-09 1s 1s 252110710e-09 1s 1s 252112790e-09 0s 0s 252119150e-09 1s 1s 252120990e-09 1s 1s 252123030e-09 0s 0s 252129390e-09 1s 1s 252131270e-09 1s 1s 252133270e-09 0s 0s 252139630e-09 1s 1s 252141550e-09 1s 1s 252143510e-09 0s 0s 252149870e-09 1s 1s 252151830e-09 1s 1s 252153750e-09 0s 0s 252160110e-09 1s 1s 252162110e-09 1s 1s 252163990e-09 0s 0s 252170350e-09 1s 1s 252172390e-09 1s 1s 252174230e-09 0s 0s 252180590e-09 1s 1s 252182670e-09 1s 1s 252184470e-09 0s 0s 252190830e-09 1s 1s 252192950e-09 1s 1s 252194710e-09 0s 0s 252201070e-09 1s 1s 252203230e-09 1s 1s 252204950e-09 0s 0s 252211310e-09 1s 1s 252213510e-09 1s 1s 252215190e-09 0s 0s 252221550e-09 1s 1s 252223790e-09 1s 1s 252225430e-09 0s 0s 252231790e-09 1s 1s 252234070e-09 1s 1s 252235670e-09 0s 0s 252242030e-09 1s 1s 252244350e-09 1s 1s 252245910e-09 0s 0s 252252270e-09 1s 1s 252254630e-09 1s 1s 252256150e-09 0s 0s 252262510e-09 1s 1s 252264910e-09 1s 1s 252266390e-09 0s 0s 252272750e-09 1s 1s 252275190e-09 1s 1s 252276630e-09 0s 0s 252282990e-09 1s 1s 252285470e-09 1s 1s 252286870e-09 0s 0s 252293230e-09 1s 1s 252295750e-09 1s 1s 252297110e-09 0s 0s 252303470e-09 1s 1s 252306030e-09 1s 1s 252307350e-09 0s 0s 252313710e-09 1s 1s 252316310e-09 1s 1s 252317590e-09 0s 0s 252323950e-09 1s 1s 252326590e-09 1s 1s 252327830e-09 0s 0s 252334190e-09 1s 1s 252336870e-09 1s 1s 252338070e-09 0s 0s 252344430e-09 1s 1s 252347150e-09 1s 1s 252348310e-09 0s 0s 252354670e-09 1s 1s 252357430e-09 1s 1s 252358550e-09 0s 0s 252364910e-09 1s 1s 252367710e-09 1s 1s 252368790e-09 0s 0s 252375150e-09 1s 1s 252377990e-09 1s 1s 252379030e-09 0s 0s 252385390e-09 1s 1s 252388270e-09 1s 1s 252389270e-09 0s 0s 252395630e-09 1s 1s 252398550e-09 1s 1s 252399510e-09 0s 0s 252405870e-09 1s 1s 252408830e-09 1s 1s 252409750e-09 0s 0s 252416110e-09 1s 1s 252419110e-09 1s 1s 252419990e-09 0s 0s 252426350e-09 1s 1s 252429390e-09 1s 1s 252430230e-09 0s 0s 252436590e-09 1s 1s 252439670e-09 1s 1s 252440470e-09 0s 0s 252446830e-09 1s 1s 252449950e-09 1s 1s 252450710e-09 0s 0s 252457070e-09 1s 1s 252460230e-09 1s 1s 252460950e-09 0s 0s 252467310e-09 1s 1s 252470510e-09 1s 1s 252471190e-09 0s 0s 252477550e-09 1s 1s 252480790e-09 1s 1s 252481430e-09 0s 0s 252487790e-09 1s 1s 252491070e-09 1s 1s 252491670e-09 0s 0s 252498030e-09 1s 1s 252501350e-09 1s 1s 252501910e-09 0s 0s 252508270e-09 1s 1s 252511630e-09 1s 1s 252512150e-09 0s 0s 252518510e-09 1s 1s 252521910e-09 1s 1s 252522390e-09 0s 0s 252528750e-09 1s 1s 252532190e-09 1s 1s 252532630e-09 0s 0s 252538990e-09 1s 1s 252542470e-09 1s 1s 252542870e-09 0s 0s 252549230e-09 1s 1s 252552750e-09 1s 1s 252553110e-09 0s 0s 252559470e-09 1s 1s 252563030e-09 1s 1s 252563350e-09 0s 0s 252569710e-09 1s 1s 252573310e-09 1s 1s 252573590e-09 0s 0s 252579950e-09 1s 1s 252583590e-09 1s 1s 252583830e-09 0s 0s 252590190e-09 1s 1s 252593870e-09 1s 1s 252594070e-09 0s 0s 252600430e-09 1s 1s 252604150e-09 1s 1s 252604310e-09 0s 0s 252610670e-09 1s 1s 252614430e-09 1s 1s 252614550e-09 0s 0s 252620910e-09 1s 1s 252624710e-09 1s 1s 252624790e-09 0s 0s 252631150e-09 1s 1s 252634990e-09 1s 1s 252635030e-09 0s 0s 252641390e-09 1s 1s 252645270e-09 0s 0s 252651630e-09 1s 1s 252655510e-09 0s 0s 252655550e-09 0s 0s 252661870e-09 1s 1s 252665750e-09 0s 0s 252665830e-09 0s 0s 252672110e-09 1s 1s 252675990e-09 0s 0s 252676110e-09 0s 0s 252682350e-09 1s 1s 252686230e-09 0s 0s 252686390e-09 0s 0s 252692590e-09 1s 1s 252696470e-09 0s 0s 252696670e-09 0s 0s 252702830e-09 1s 1s 252706710e-09 0s 0s 252706950e-09 0s 0s 252713070e-09 1s 1s 252716950e-09 0s 0s 252717230e-09 0s 0s 252723310e-09 1s 1s 252727190e-09 0s 0s 252727510e-09 0s 0s 252733550e-09 1s 1s 252737430e-09 0s 0s 252737790e-09 0s 0s 252743790e-09 1s 1s 252747670e-09 0s 0s 252748070e-09 0s 0s 252754030e-09 1s 1s 252757910e-09 0s 0s 252758350e-09 0s 0s 252764270e-09 1s 1s 252768150e-09 0s 0s 252768630e-09 0s 0s 252774510e-09 1s 1s 252778390e-09 0s 0s 252778910e-09 0s 0s 252784750e-09 1s 1s 252788630e-09 0s 0s 252789190e-09 0s 0s 252794990e-09 1s 1s 252798870e-09 0s 0s 252799470e-09 0s 0s 252805230e-09 1s 1s 252809110e-09 0s 0s 252809750e-09 0s 0s 252815470e-09 1s 1s 252819350e-09 0s 0s 252820030e-09 0s 0s 252825710e-09 1s 1s 252829590e-09 0s 0s 252830310e-09 0s 0s 252835950e-09 1s 1s 252839830e-09 0s 0s 252840590e-09 0s 0s 252846190e-09 1s 1s 252850070e-09 0s 0s 252850870e-09 0s 0s 252856430e-09 1s 1s 252860310e-09 0s 0s 252861150e-09 0s 0s 252866670e-09 1s 1s 252870550e-09 0s 0s 252871430e-09 0s 0s 252876910e-09 1s 1s 252880790e-09 0s 0s 252881710e-09 0s 0s 252887150e-09 1s 1s 252891030e-09 0s 0s 252891990e-09 0s 0s 252897390e-09 1s 1s 252901270e-09 0s 0s 252902270e-09 0s 0s 252907630e-09 1s 1s 252911510e-09 0s 0s 252912550e-09 0s 0s 252917870e-09 1s 1s 252921750e-09 0s 0s 252922830e-09 0s 0s 252928110e-09 1s 1s 252931990e-09 0s 0s 252933110e-09 0s 0s 252938350e-09 1s 1s 252942230e-09 0s 0s 252943390e-09 0s 0s 252948590e-09 1s 1s 252952470e-09 0s 0s 252953670e-09 0s 0s 252958830e-09 1s 1s 252962710e-09 0s 0s 252963950e-09 0s 0s 252969070e-09 1s 1s 252972950e-09 0s 0s 252974230e-09 0s 0s 252979310e-09 1s 1s 252983190e-09 0s 0s 252984510e-09 0s 0s 252989550e-09 1s 1s 252993430e-09 0s 0s 252994790e-09 0s 0s 252999790e-09 1s 1s 253003670e-09 0s 0s 253005070e-09 0s 0s 253010030e-09 1s 1s 253013910e-09 0s 0s 253015350e-09 0s 0s 253020270e-09 1s 1s 253024150e-09 0s 0s 253025630e-09 0s 0s 253030510e-09 1s 1s 253034390e-09 0s 0s 253035910e-09 0s 0s 253040750e-09 1s 1s 253044630e-09 0s 0s 253046190e-09 0s 0s 253050990e-09 1s 1s 253054870e-09 0s 0s 253056470e-09 0s 0s 253061230e-09 1s 1s 253065110e-09 0s 0s 253066750e-09 0s 0s 253071470e-09 1s 1s 253075350e-09 0s 0s 253077030e-09 0s 0s 253081710e-09 1s 1s 253085590e-09 0s 0s 253087310e-09 0s 0s 253091950e-09 1s 1s 253095830e-09 0s 0s 253097590e-09 0s 0s 253102190e-09 1s 1s 253106070e-09 0s 0s 253107870e-09 0s 0s 253112430e-09 1s 1s 253116310e-09 0s 0s 253118150e-09 0s 0s 253122670e-09 1s 1s 253126550e-09 0s 0s 253128430e-09 0s 0s 253132910e-09 1s 1s 253136790e-09 0s 0s 253138710e-09 0s 0s 253143150e-09 1s 1s 253147030e-09 0s 0s 253148990e-09 0s 0s 253153390e-09 1s 1s 253157270e-09 0s 0s 253159270e-09 0s 0s 253163630e-09 1s 1s 253167510e-09 0s 0s 253169550e-09 0s 0s 253173870e-09 1s 1s 253177750e-09 0s 0s 253179830e-09 0s 0s 253184110e-09 1s 1s 253187990e-09 0s 0s 253190110e-09 0s 0s 253194350e-09 1s 1s 253198230e-09 0s 0s 253200390e-09 0s 0s 253204590e-09 1s 1s 253208470e-09 0s 0s 253210670e-09 0s 0s 253214830e-09 1s 1s 253218710e-09 0s 0s 253220950e-09 0s 0s 253225070e-09 1s 1s 253228950e-09 0s 0s 253231230e-09 0s 0s 253235310e-09 1s 1s 253239190e-09 0s 0s 253241510e-09 0s 0s 253245550e-09 1s 1s 253249430e-09 0s 0s 253251790e-09 0s 0s 253255790e-09 1s 1s 253259670e-09 0s 0s 253262070e-09 0s 0s 253266030e-09 1s 1s 253269910e-09 0s 0s 253272350e-09 0s 0s 253276270e-09 1s 1s 253280150e-09 0s 0s 253282630e-09 0s 0s 253286510e-09 1s 1s 253290390e-09 0s 0s 253292910e-09 0s 0s 253296750e-09 1s 1s 253300630e-09 0s 0s 253303190e-09 0s 0s 253306990e-09 1s 1s 253310870e-09 0s 0s 253313470e-09 0s 0s 253317230e-09 1s 1s 253321110e-09 0s 0s 253323750e-09 0s 0s 253327470e-09 1s 1s 253331350e-09 0s 0s 253334030e-09 0s 0s 253337710e-09 1s 1s 253341590e-09 0s 0s 253344310e-09 0s 0s 253347950e-09 1s 1s 253351830e-09 0s 0s 253354590e-09 0s 0s 253358190e-09 1s 1s 253362070e-09 0s 0s 253364870e-09 0s 0s 253368430e-09 1s 1s 253372310e-09 0s 0s 253375150e-09 0s 0s 253378670e-09 1s 1s 253382550e-09 0s 0s 253385430e-09 0s 0s 253388910e-09 1s 1s 253392790e-09 0s 0s 253395710e-09 0s 0s 253399150e-09 1s 1s 253403030e-09 0s 0s 253405990e-09 0s 0s 253409390e-09 1s 1s 253413270e-09 0s 0s 253416270e-09 0s 0s 253419630e-09 1s 1s 253423510e-09 0s 0s 253426550e-09 0s 0s 253429870e-09 1s 1s 253433750e-09 0s 0s 253436830e-09 0s 0s 253440110e-09 1s 1s 253443990e-09 0s 0s 253447110e-09 0s 0s 253450350e-09 1s 1s 253454230e-09 0s 0s 253457390e-09 0s 0s 253460590e-09 1s 1s 253464470e-09 0s 0s 253467670e-09 0s 0s 253470830e-09 1s 1s 253474710e-09 0s 0s 253477950e-09 0s 0s 253481070e-09 1s 1s 253484950e-09 0s 0s 253488230e-09 0s 0s 253491310e-09 1s 1s 253495190e-09 0s 0s 253498510e-09 0s 0s 253501550e-09 1s 1s 253505430e-09 0s 0s 253508790e-09 0s 0s 253511790e-09 1s 1s 253515670e-09 0s 0s 253519070e-09 0s 0s 253522030e-09 1s 1s 253525910e-09 0s 0s 253529350e-09 0s 0s 253532270e-09 1s 1s 253536150e-09 0s 0s 253539630e-09 0s 0s 253542510e-09 1s 1s 253546390e-09 0s 0s 253549910e-09 0s 0s 253552750e-09 1s 1s 253556630e-09 0s 0s 253560190e-09 0s 0s 253562990e-09 1s 1s 253566870e-09 0s 0s 253570470e-09 0s 0s 253573230e-09 1s 1s 253577110e-09 0s 0s 253580750e-09 0s 0s 253583470e-09 1s 1s 253587350e-09 0s 0s 253591030e-09 0s 0s 253593710e-09 1s 1s 253597590e-09 0s 0s 253601310e-09 0s 0s 253603950e-09 1s 1s 253607830e-09 0s 0s 253611590e-09 0s 0s 253614190e-09 1s 1s 253618070e-09 0s 0s 253621870e-09 0s 0s 253624430e-09 1s 1s 253628310e-09 0s 0s 253632150e-09 0s 0s 253634670e-09 1s 1s 253638550e-09 0s 0s 253642430e-09 0s 0s 253644910e-09 1s 1s 253648790e-09 0s 0s 253652710e-09 0s 0s 253655150e-09 1s 1s 253659030e-09 0s 0s 253662990e-09 0s 0s 253665390e-09 1s 1s 253669270e-09 0s 0s 253673270e-09 0s 0s 253675630e-09 1s 1s 253679510e-09 0s 0s 253683550e-09 0s 0s 253685870e-09 1s 1s 253689750e-09 0s 0s 253693830e-09 0s 0s 253696110e-09 1s 1s 253699990e-09 0s 0s 253704110e-09 0s 0s 253706350e-09 1s 1s 253710230e-09 0s 0s 253714390e-09 0s 0s 253716590e-09 1s 1s 253720470e-09 0s 0s 253724670e-09 0s 0s 253726830e-09 1s 1s 253730710e-09 0s 0s 253734950e-09 0s 0s 253737070e-09 1s 1s 253740950e-09 0s 0s 253745230e-09 0s 0s 253747310e-09 1s 1s 253751190e-09 0s 0s 253755510e-09 0s 0s 253757550e-09 1s 1s 253761430e-09 0s 0s 253765790e-09 0s 0s 253767790e-09 1s 1s 253771670e-09 0s 0s 253776070e-09 0s 0s 253778030e-09 1s 1s 253781910e-09 0s 0s 253786350e-09 0s 0s 253788270e-09 1s 1s 253792150e-09 0s 0s 253796630e-09 0s 0s 253798510e-09 1s 1s 253802390e-09 0s 0s 253806910e-09 0s 0s 253808750e-09 1s 1s 253812630e-09 0s 0s 253817190e-09 0s 0s 253818990e-09 1s 1s 253822870e-09 0s 0s 253827470e-09 0s 0s 253829230e-09 1s 1s 253833110e-09 0s 0s 253837750e-09 0s 0s 253839470e-09 1s 1s 253843350e-09 0s 0s 253848030e-09 0s 0s 253849710e-09 1s 1s 253853590e-09 0s 0s 253858310e-09 0s 0s 253859950e-09 1s 1s 253863830e-09 0s 0s 253868590e-09 0s 0s 253870190e-09 1s 1s 253874070e-09 0s 0s 253878870e-09 0s 0s 253880430e-09 1s 1s 253884310e-09 0s 0s 253889150e-09 0s 0s 253890670e-09 1s 1s 253894550e-09 0s 0s 253899430e-09 0s 0s 253900910e-09 1s 1s 253904790e-09 0s 0s 253909710e-09 0s 0s 253911150e-09 1s 1s 253915030e-09 0s 0s 253919990e-09 0s 0s 253921390e-09 1s 1s 253925270e-09 0s 0s 253930270e-09 0s 0s 253931630e-09 1s 1s 253935510e-09 0s 0s 253940550e-09 0s 0s 253941870e-09 1s 1s 253945750e-09 0s 0s 253950830e-09 0s 0s 253952110e-09 1s 1s 253955990e-09 0s 0s 253961110e-09 0s 0s 253962350e-09 1s 1s 253966230e-09 0s 0s 253971390e-09 0s 0s 253972590e-09 1s 1s 253976470e-09 0s 0s 253981670e-09 0s 0s 253982830e-09 1s 1s 253986710e-09 0s 0s 253991950e-09 0s 0s 253993070e-09 1s 1s 253996950e-09 0s 0s 254002230e-09 0s 0s 254003310e-09 1s 1s 254007190e-09 0s 0s 254012510e-09 0s 0s 254013550e-09 1s 1s 254017430e-09 0s 0s 254022790e-09 0s 0s 254023790e-09 1s 1s 254027670e-09 0s 0s 254033070e-09 0s 0s 254034030e-09 1s 1s 254037910e-09 0s 0s 254043350e-09 0s 0s 254044270e-09 1s 1s 254048150e-09 0s 0s 254053630e-09 0s 0s 254054510e-09 1s 1s 254058390e-09 0s 0s 254063910e-09 0s 0s 254064750e-09 1s 1s 254068630e-09 0s 0s 254074190e-09 0s 0s 254074990e-09 1s 1s 254078870e-09 0s 0s 254084470e-09 0s 0s 254085230e-09 1s 1s 254089110e-09 0s 0s 254094750e-09 0s 0s 254095470e-09 1s 1s 254099350e-09 0s 0s 254105030e-09 0s 0s 254105710e-09 1s 1s 254109590e-09 0s 0s 254115310e-09 0s 0s 254115950e-09 1s 1s 254119830e-09 0s 0s 254125590e-09 0s 0s 254126190e-09 1s 1s 254130070e-09 0s 0s 254135870e-09 0s 0s 254136430e-09 1s 1s 254140310e-09 0s 0s 254146150e-09 0s 0s 254146670e-09 1s 1s 254150550e-09 0s 0s 254156430e-09 0s 0s 254156910e-09 1s 1s 254160790e-09 0s 0s 254166710e-09 0s 0s 254167150e-09 1s 1s 254171030e-09 0s 0s 254176990e-09 0s 0s 254177390e-09 1s 1s 254181270e-09 0s 0s 254187270e-09 0s 0s 254187630e-09 1s 1s 254191510e-09 0s 0s 254197550e-09 0s 0s 254197870e-09 1s 1s 254201750e-09 0s 0s 254207830e-09 0s 0s 254208110e-09 1s 1s 254211990e-09 0s 0s 254218110e-09 0s 0s 254218350e-09 1s 1s 254222230e-09 0s 0s 254228390e-09 0s 0s 254228590e-09 1s 1s 254232470e-09 0s 0s 254238670e-09 0s 0s 254238830e-09 1s 1s 254242710e-09 0s 0s 254248950e-09 0s 0s 254249070e-09 1s 1s 254252950e-09 0s 0s 254259230e-09 0s 0s 254259310e-09 1s 1s 254263190e-09 0s 0s 254269510e-09 0s 0s 254269550e-09 1s 1s 254273430e-09 0s 0s 254279790e-09 1s 1s 254279830e-09 1s 1s 254283710e-09 0s 0s 254290030e-09 1s 1s 254290110e-09 1s 1s 254293950e-09 0s 0s 254300270e-09 1s 1s 254300390e-09 1s 1s 254304190e-09 0s 0s 254310510e-09 1s 1s 254310670e-09 1s 1s 254314430e-09 0s 0s 254320750e-09 1s 1s 254320950e-09 1s 1s 254324670e-09 0s 0s 254330990e-09 1s 1s 254331230e-09 1s 1s 254334910e-09 0s 0s 254341230e-09 1s 1s 254341510e-09 1s 1s 254345150e-09 0s 0s 254351470e-09 1s 1s 254351790e-09 1s 1s 254355390e-09 0s 0s 254361710e-09 1s 1s 254362070e-09 1s 1s 254365630e-09 0s 0s 254371950e-09 1s 1s 254372350e-09 1s 1s 254375870e-09 0s 0s 254382190e-09 1s 1s 254382630e-09 1s 1s 254386110e-09 0s 0s 254392430e-09 1s 1s 254392910e-09 1s 1s 254396350e-09 0s 0s 254402670e-09 1s 1s 254403190e-09 1s 1s 254406590e-09 0s 0s 254412910e-09 1s 1s 254413470e-09 1s 1s 254416830e-09 0s 0s 254423150e-09 1s 1s 254423750e-09 1s 1s 254427070e-09 0s 0s 254433390e-09 1s 1s 254434030e-09 1s 1s 254437310e-09 0s 0s 254443630e-09 1s 1s 254444310e-09 1s 1s 254447550e-09 0s 0s 254453870e-09 1s 1s 254454590e-09 1s 1s 254457790e-09 0s 0s 254464110e-09 1s 1s 254464870e-09 1s 1s 254468030e-09 0s 0s 254474350e-09 1s 1s 254475150e-09 1s 1s 254478270e-09 0s 0s 254484590e-09 1s 1s 254485430e-09 1s 1s 254488510e-09 0s 0s 254494830e-09 1s 1s 254495710e-09 1s 1s 254498750e-09 0s 0s 254505070e-09 1s 1s 254505990e-09 1s 1s 254508990e-09 0s 0s 254515310e-09 1s 1s 254516270e-09 1s 1s 254519230e-09 0s 0s 254525550e-09 1s 1s 254526550e-09 1s 1s 254529470e-09 0s 0s 254535790e-09 1s 1s 254536830e-09 1s 1s 254539710e-09 0s 0s 254546030e-09 1s 1s 254547110e-09 1s 1s 254549950e-09 0s 0s 254556270e-09 1s 1s 254557390e-09 1s 1s 254560190e-09 0s 0s 254566510e-09 1s 1s 254567670e-09 1s 1s 254570430e-09 0s 0s 254576750e-09 1s 1s 254577950e-09 1s 1s 254580670e-09 0s 0s 254586990e-09 1s 1s 254588230e-09 1s 1s 254590910e-09 0s 0s 254597230e-09 1s 1s 254598510e-09 1s 1s 254601150e-09 0s 0s 254607470e-09 1s 1s 254608790e-09 1s 1s 254611390e-09 0s 0s 254617710e-09 1s 1s 254619070e-09 1s 1s 254621630e-09 0s 0s 254627950e-09 1s 1s 254629350e-09 1s 1s 254631870e-09 0s 0s 254638190e-09 1s 1s 254639630e-09 1s 1s 254642110e-09 0s 0s 254648430e-09 1s 1s 254649910e-09 1s 1s 254652350e-09 0s 0s 254658670e-09 1s 1s 254660190e-09 1s 1s 254662590e-09 0s 0s 254668910e-09 1s 1s 254670470e-09 1s 1s 254672830e-09 0s 0s 254679150e-09 1s 1s 254680750e-09 1s 1s 254683070e-09 0s 0s 254689390e-09 1s 1s 254691030e-09 1s 1s 254693310e-09 0s 0s 254699630e-09 1s 1s 254701310e-09 1s 1s 254703550e-09 0s 0s 254709870e-09 1s 1s 254711590e-09 1s 1s 254713790e-09 0s 0s 254720110e-09 1s 1s 254721870e-09 1s 1s 254724030e-09 0s 0s 254730350e-09 1s 1s 254732150e-09 1s 1s 254734270e-09 0s 0s 254740590e-09 1s 1s 254742430e-09 1s 1s 254744510e-09 0s 0s 254750830e-09 1s 1s 254752710e-09 1s 1s 254754750e-09 0s 0s 254761070e-09 1s 1s 254762990e-09 1s 1s 254764990e-09 0s 0s 254771310e-09 1s 1s 254773270e-09 1s 1s 254775230e-09 0s 0s 254781550e-09 1s 1s 254783550e-09 1s 1s 254785470e-09 0s 0s 254791790e-09 1s 1s 254793830e-09 1s 1s 254795710e-09 0s 0s 254802030e-09 1s 1s 254804110e-09 1s 1s 254805950e-09 0s 0s 254812270e-09 1s 1s 254814390e-09 1s 1s 254816190e-09 0s 0s 254822510e-09 1s 1s 254824670e-09 1s 1s 254826430e-09 0s 0s 254832750e-09 1s 1s 254834950e-09 1s 1s 254836670e-09 0s 0s 254842990e-09 1s 1s 254845230e-09 1s 1s 254846910e-09 0s 0s 254853230e-09 1s 1s 254855510e-09 1s 1s 254857150e-09 0s 0s 254863470e-09 1s 1s 254865790e-09 1s 1s 254867390e-09 0s 0s 254873710e-09 1s 1s 254876070e-09 1s 1s 254877630e-09 0s 0s 254883950e-09 1s 1s 254886350e-09 1s 1s 254887870e-09 0s 0s 254894190e-09 1s 1s 254896630e-09 1s 1s 254898110e-09 0s 0s 254904430e-09 1s 1s 254906910e-09 1s 1s 254908350e-09 0s 0s 254914670e-09 1s 1s 254917190e-09 1s 1s 254918590e-09 0s 0s 254924910e-09 1s 1s 254927470e-09 1s 1s 254928830e-09 0s 0s 254935150e-09 1s 1s 254937750e-09 1s 1s 254939070e-09 0s 0s 254945390e-09 1s 1s 254948030e-09 1s 1s 254949310e-09 0s 0s 254955630e-09 1s 1s 254958310e-09 1s 1s 254959550e-09 0s 0s 254965870e-09 1s 1s 254968590e-09 1s 1s 254969790e-09 0s 0s 254976110e-09 1s 1s 254978870e-09 1s 1s 254980030e-09 0s 0s 254986350e-09 1s 1s 254989150e-09 1s 1s 254990270e-09 0s 0s 254996590e-09 1s 1s 254999430e-09 1s 1s 255000510e-09 0s 0s 255006830e-09 1s 1s 255009710e-09 1s 1s 255010750e-09 0s 0s 255017070e-09 1s 1s 255019990e-09 1s 1s 255020990e-09 0s 0s 255027310e-09 1s 1s 255030270e-09 1s 1s 255031230e-09 0s 0s 255037550e-09 1s 1s 255040550e-09 1s 1s 255041470e-09 0s 0s 255047790e-09 1s 1s 255050830e-09 1s 1s 255051710e-09 0s 0s 255058030e-09 1s 1s 255061110e-09 1s 1s 255061950e-09 0s 0s 255068270e-09 1s 1s 255071390e-09 1s 1s 255072190e-09 0s 0s 255078510e-09 1s 1s 255081670e-09 1s 1s 255082430e-09 0s 0s 255088750e-09 1s 1s 255091950e-09 1s 1s 255092670e-09 0s 0s 255098990e-09 1s 1s 255102230e-09 1s 1s 255102910e-09 0s 0s 255109230e-09 1s 1s 255112510e-09 1s 1s 255113150e-09 0s 0s 255119470e-09 1s 1s 255122790e-09 1s 1s 255123390e-09 0s 0s 255129710e-09 1s 1s 255133070e-09 1s 1s 255133630e-09 0s 0s 255139950e-09 1s 1s 255143350e-09 1s 1s 255143870e-09 0s 0s 255150190e-09 1s 1s 255153630e-09 1s 1s 255154110e-09 0s 0s 255160430e-09 1s 1s 255163910e-09 1s 1s 255164350e-09 0s 0s 255170670e-09 1s 1s 255174190e-09 1s 1s 255174590e-09 0s 0s 255180910e-09 1s 1s 255184470e-09 1s 1s 255184830e-09 0s 0s 255191150e-09 1s 1s 255194750e-09 1s 1s 255195070e-09 0s 0s 255201390e-09 1s 1s 255205030e-09 1s 1s 255205310e-09 0s 0s 255211630e-09 1s 1s 255215310e-09 1s 1s 255215550e-09 0s 0s 255221870e-09 1s 1s 255225590e-09 1s 1s 255225790e-09 0s 0s 255232110e-09 1s 1s 255235870e-09 1s 1s 255236030e-09 0s 0s 255242350e-09 1s 1s 255246150e-09 1s 1s 255246270e-09 0s 0s 255252590e-09 1s 1s 255256430e-09 1s 1s 255256510e-09 0s 0s 255262830e-09 1s 1s 255266710e-09 1s 1s 255266750e-09 0s 0s 255273070e-09 1s 1s 255276990e-09 0s 0s 255283310e-09 1s 1s 255287230e-09 0s 0s 255287270e-09 0s 0s 255293550e-09 1s 1s 255297470e-09 0s 0s 255297550e-09 0s 0s 255303790e-09 1s 1s 255307710e-09 0s 0s 255307830e-09 0s 0s 255314030e-09 1s 1s 255317950e-09 0s 0s 255318110e-09 0s 0s 255324270e-09 1s 1s 255328190e-09 0s 0s 255328390e-09 0s 0s 255334510e-09 1s 1s 255338430e-09 0s 0s 255338670e-09 0s 0s 255344750e-09 1s 1s 255348670e-09 0s 0s 255348950e-09 0s 0s 255354990e-09 1s 1s 255358910e-09 0s 0s 255359230e-09 0s 0s 255365230e-09 1s 1s 255369150e-09 0s 0s 255369510e-09 0s 0s 255375470e-09 1s 1s 255379390e-09 0s 0s 255379790e-09 0s 0s 255385710e-09 1s 1s 255389630e-09 0s 0s 255390070e-09 0s 0s 255395950e-09 1s 1s 255399870e-09 0s 0s 255400350e-09 0s 0s 255406190e-09 1s 1s 255410110e-09 0s 0s 255410630e-09 0s 0s 255416430e-09 1s 1s 255420350e-09 0s 0s 255420910e-09 0s 0s 255426670e-09 1s 1s 255430590e-09 0s 0s 255431190e-09 0s 0s 255436910e-09 1s 1s 255440830e-09 0s 0s 255441470e-09 0s 0s 255447150e-09 1s 1s 255451070e-09 0s 0s 255451750e-09 0s 0s 255457390e-09 1s 1s 255461310e-09 0s 0s 255462030e-09 0s 0s 255467630e-09 1s 1s 255471550e-09 0s 0s 255472310e-09 0s 0s 255477870e-09 1s 1s 255481790e-09 0s 0s 255482590e-09 0s 0s 255488110e-09 1s 1s 255492030e-09 0s 0s 255492870e-09 0s 0s 255498350e-09 1s 1s 255502270e-09 0s 0s 255503150e-09 0s 0s 255508590e-09 1s 1s 255512510e-09 0s 0s 255513430e-09 0s 0s 255518830e-09 1s 1s 255522750e-09 0s 0s 255523710e-09 0s 0s 255529070e-09 1s 1s 255532990e-09 0s 0s 255533990e-09 0s 0s 255539310e-09 1s 1s 255543230e-09 0s 0s 255544270e-09 0s 0s 255549550e-09 1s 1s 255553470e-09 0s 0s 255554550e-09 0s 0s 255559790e-09 1s 1s 255563710e-09 0s 0s 255564830e-09 0s 0s 255570030e-09 1s 1s 255573950e-09 0s 0s 255575110e-09 0s 0s 255580270e-09 1s 1s 255584190e-09 0s 0s 255585390e-09 0s 0s 255590510e-09 1s 1s 255594430e-09 0s 0s 255595670e-09 0s 0s 255600750e-09 1s 1s 255604670e-09 0s 0s 255605950e-09 0s 0s 255610990e-09 1s 1s 255614910e-09 0s 0s 255616230e-09 0s 0s 255621230e-09 1s 1s 255625150e-09 0s 0s 255626510e-09 0s 0s 255631470e-09 1s 1s 255635390e-09 0s 0s 255636790e-09 0s 0s 255641710e-09 1s 1s 255645630e-09 0s 0s 255647070e-09 0s 0s 255651950e-09 1s 1s 255655870e-09 0s 0s 255657350e-09 0s 0s 255662190e-09 1s 1s 255666110e-09 0s 0s 255667630e-09 0s 0s 255672430e-09 1s 1s 255676350e-09 0s 0s 255677910e-09 0s 0s 255682670e-09 1s 1s 255686590e-09 0s 0s 255688190e-09 0s 0s 255692910e-09 1s 1s 255696830e-09 0s 0s 255698470e-09 0s 0s 255703150e-09 1s 1s 255707070e-09 0s 0s 255708750e-09 0s 0s 255713390e-09 1s 1s 255717310e-09 0s 0s 255719030e-09 0s 0s 255723630e-09 1s 1s 255727550e-09 0s 0s 255729310e-09 0s 0s 255733870e-09 1s 1s 255737790e-09 0s 0s 255739590e-09 0s 0s 255744110e-09 1s 1s 255748030e-09 0s 0s 255749870e-09 0s 0s 255754350e-09 1s 1s 255758270e-09 0s 0s 255760150e-09 0s 0s 255764590e-09 1s 1s 255768510e-09 0s 0s 255770430e-09 0s 0s 255774830e-09 1s 1s 255778750e-09 0s 0s 255780710e-09 0s 0s 255785070e-09 1s 1s 255788990e-09 0s 0s 255790990e-09 0s 0s 255795310e-09 1s 1s 255799230e-09 0s 0s 255801270e-09 0s 0s 255805550e-09 1s 1s 255809470e-09 0s 0s 255811550e-09 0s 0s 255815790e-09 1s 1s 255819710e-09 0s 0s 255821830e-09 0s 0s 255826030e-09 1s 1s 255829950e-09 0s 0s 255832110e-09 0s 0s 255836270e-09 1s 1s 255840190e-09 0s 0s 255842390e-09 0s 0s 255846510e-09 1s 1s 255850430e-09 0s 0s 255852670e-09 0s 0s 255856750e-09 1s 1s 255860670e-09 0s 0s 255862950e-09 0s 0s 255866990e-09 1s 1s 255870910e-09 0s 0s 255873230e-09 0s 0s 255877230e-09 1s 1s 255881150e-09 0s 0s 255883510e-09 0s 0s 255887470e-09 1s 1s 255891390e-09 0s 0s 255893790e-09 0s 0s 255897710e-09 1s 1s 255901630e-09 0s 0s 255904070e-09 0s 0s 255907950e-09 1s 1s 255911870e-09 0s 0s 255914350e-09 0s 0s 255918190e-09 1s 1s 255922110e-09 0s 0s 255924630e-09 0s 0s 255928430e-09 1s 1s 255932350e-09 0s 0s 255934910e-09 0s 0s 255938670e-09 1s 1s 255942590e-09 0s 0s 255945190e-09 0s 0s 255948910e-09 1s 1s 255952830e-09 0s 0s 255955470e-09 0s 0s 255959150e-09 1s 1s 255963070e-09 0s 0s 255965750e-09 0s 0s 255969390e-09 1s 1s 255973310e-09 0s 0s 255976030e-09 0s 0s 255979630e-09 1s 1s 255983550e-09 0s 0s 255986310e-09 0s 0s 255989870e-09 1s 1s 255993790e-09 0s 0s 255996590e-09 0s 0s 256000110e-09 1s 1s 256004030e-09 0s 0s 256006870e-09 0s 0s 256010350e-09 1s 1s 256014270e-09 0s 0s 256017150e-09 0s 0s 256020590e-09 1s 1s 256024510e-09 0s 0s 256027430e-09 0s 0s 256030830e-09 1s 1s 256034750e-09 0s 0s 256037710e-09 0s 0s 256041070e-09 1s 1s 256044990e-09 0s 0s 256047990e-09 0s 0s 256051310e-09 1s 1s 256055230e-09 0s 0s 256058270e-09 0s 0s 256061550e-09 1s 1s 256065470e-09 0s 0s 256068550e-09 0s 0s 256071790e-09 1s 1s 256075710e-09 0s 0s 256078830e-09 0s 0s 256082030e-09 1s 1s 256085950e-09 0s 0s 256089110e-09 0s 0s 256092270e-09 1s 1s 256096190e-09 0s 0s 256099390e-09 0s 0s 256102510e-09 1s 1s 256106430e-09 0s 0s 256109670e-09 0s 0s 256112750e-09 1s 1s 256116670e-09 0s 0s 256119950e-09 0s 0s 256122990e-09 1s 1s 256126910e-09 0s 0s 256130230e-09 0s 0s 256133230e-09 1s 1s 256137150e-09 0s 0s 256140510e-09 0s 0s 256143470e-09 1s 1s 256147390e-09 0s 0s 256150790e-09 0s 0s 256153710e-09 1s 1s 256157630e-09 0s 0s 256161070e-09 0s 0s 256163950e-09 1s 1s 256167870e-09 0s 0s 256171350e-09 0s 0s 256174190e-09 1s 1s 256178110e-09 0s 0s 256181630e-09 0s 0s 256184430e-09 1s 1s 256188350e-09 0s 0s 256191910e-09 0s 0s 256194670e-09 1s 1s 256198590e-09 0s 0s 256202190e-09 0s 0s 256204910e-09 1s 1s 256208830e-09 0s 0s 256212470e-09 0s 0s 256215150e-09 1s 1s 256219070e-09 0s 0s 256222750e-09 0s 0s 256225390e-09 1s 1s 256229310e-09 0s 0s 256233030e-09 0s 0s 256235630e-09 1s 1s 256239550e-09 0s 0s 256243310e-09 0s 0s 256245870e-09 1s 1s 256249790e-09 0s 0s 256253590e-09 0s 0s 256256110e-09 1s 1s 256260030e-09 0s 0s 256263870e-09 0s 0s 256266350e-09 1s 1s 256270270e-09 0s 0s 256274150e-09 0s 0s 256276590e-09 1s 1s 256280510e-09 0s 0s 256284430e-09 0s 0s 256286830e-09 1s 1s 256290750e-09 0s 0s 256294710e-09 0s 0s 256297070e-09 1s 1s 256300990e-09 0s 0s 256304990e-09 0s 0s 256307310e-09 1s 1s 256311230e-09 0s 0s 256315270e-09 0s 0s 256317550e-09 1s 1s 256321470e-09 0s 0s 256325550e-09 0s 0s 256327790e-09 1s 1s 256331710e-09 0s 0s 256335830e-09 0s 0s 256338030e-09 1s 1s 256341950e-09 0s 0s 256346110e-09 0s 0s 256348270e-09 1s 1s 256352190e-09 0s 0s 256356390e-09 0s 0s 256358510e-09 1s 1s 256362430e-09 0s 0s 256366670e-09 0s 0s 256368750e-09 1s 1s 256372670e-09 0s 0s 256376950e-09 0s 0s 256378990e-09 1s 1s 256382910e-09 0s 0s 256387230e-09 0s 0s 256389230e-09 1s 1s 256393150e-09 0s 0s 256397510e-09 0s 0s 256399470e-09 1s 1s 256403390e-09 0s 0s 256407790e-09 0s 0s 256409710e-09 1s 1s 256413630e-09 0s 0s 256418070e-09 0s 0s 256419950e-09 1s 1s 256423870e-09 0s 0s 256428350e-09 0s 0s 256430190e-09 1s 1s 256434110e-09 0s 0s 256438630e-09 0s 0s 256440430e-09 1s 1s 256444350e-09 0s 0s 256448910e-09 0s 0s 256450670e-09 1s 1s 256454590e-09 0s 0s 256459190e-09 0s 0s 256460910e-09 1s 1s 256464830e-09 0s 0s 256469470e-09 0s 0s 256471150e-09 1s 1s 256475070e-09 0s 0s 256479750e-09 0s 0s 256481390e-09 1s 1s 256485310e-09 0s 0s 256490030e-09 0s 0s 256491630e-09 1s 1s 256495550e-09 0s 0s 256500310e-09 0s 0s 256501870e-09 1s 1s 256505790e-09 0s 0s 256510590e-09 0s 0s 256512110e-09 1s 1s 256516030e-09 0s 0s 256520870e-09 0s 0s 256522350e-09 1s 1s 256526270e-09 0s 0s 256531150e-09 0s 0s 256532590e-09 1s 1s 256536510e-09 0s 0s 256541430e-09 0s 0s 256542830e-09 1s 1s 256546750e-09 0s 0s 256551710e-09 0s 0s 256553070e-09 1s 1s 256556990e-09 0s 0s 256561990e-09 0s 0s 256563310e-09 1s 1s 256567230e-09 0s 0s 256572270e-09 0s 0s 256573550e-09 1s 1s 256577470e-09 0s 0s 256582550e-09 0s 0s 256583790e-09 1s 1s 256587710e-09 0s 0s 256592830e-09 0s 0s 256594030e-09 1s 1s 256597950e-09 0s 0s 256603110e-09 0s 0s 256604270e-09 1s 1s 256608190e-09 0s 0s 256613390e-09 0s 0s 256614510e-09 1s 1s 256618430e-09 0s 0s 256623670e-09 0s 0s 256624750e-09 1s 1s 256628670e-09 0s 0s 256633950e-09 0s 0s 256634990e-09 1s 1s 256638910e-09 0s 0s 256644230e-09 0s 0s 256645230e-09 1s 1s 256649150e-09 0s 0s 256654510e-09 0s 0s 256655470e-09 1s 1s 256659390e-09 0s 0s 256664790e-09 0s 0s 256665710e-09 1s 1s 256669630e-09 0s 0s 256675070e-09 0s 0s 256675950e-09 1s 1s 256679870e-09 0s 0s 256685350e-09 0s 0s 256686190e-09 1s 1s 256690110e-09 0s 0s 256695630e-09 0s 0s 256696430e-09 1s 1s 256700350e-09 0s 0s 256705910e-09 0s 0s 256706670e-09 1s 1s 256710590e-09 0s 0s 256716190e-09 0s 0s 256716910e-09 1s 1s 256720830e-09 0s 0s 256726470e-09 0s 0s 256727150e-09 1s 1s 256731070e-09 0s 0s 256736750e-09 0s 0s 256737390e-09 1s 1s 256741310e-09 0s 0s 256747030e-09 0s 0s 256747630e-09 1s 1s 256751550e-09 0s 0s 256757310e-09 0s 0s 256757870e-09 1s 1s 256761790e-09 0s 0s 256767590e-09 0s 0s 256768110e-09 1s 1s 256772030e-09 0s 0s 256777870e-09 0s 0s 256778350e-09 1s 1s 256782270e-09 0s 0s 256788150e-09 0s 0s 256788590e-09 1s 1s 256792510e-09 0s 0s 256798430e-09 0s 0s 256798830e-09 1s 1s 256802750e-09 0s 0s 256808710e-09 0s 0s 256809070e-09 1s 1s 256812990e-09 0s 0s 256818990e-09 0s 0s 256819310e-09 1s 1s 256823230e-09 0s 0s 256829270e-09 0s 0s 256829550e-09 1s 1s 256833470e-09 0s 0s 256839550e-09 0s 0s 256839790e-09 1s 1s 256843710e-09 0s 0s 256849830e-09 0s 0s 256850030e-09 1s 1s 256853950e-09 0s 0s 256860110e-09 0s 0s 256860270e-09 1s 1s 256864190e-09 0s 0s 256870390e-09 0s 0s 256870510e-09 1s 1s 256874430e-09 0s 0s 256880670e-09 0s 0s 256880750e-09 1s 1s 256884670e-09 0s 0s 256890950e-09 0s 0s 256890990e-09 1s 1s 256894910e-09 0s 0s 256901230e-09 1s 1s 256901270e-09 1s 1s 256905190e-09 0s 0s 256911470e-09 1s 1s 256911550e-09 1s 1s 256915430e-09 0s 0s 256921710e-09 1s 1s 256921830e-09 1s 1s 256925670e-09 0s 0s 256931950e-09 1s 1s 256932110e-09 1s 1s 256935910e-09 0s 0s 256942190e-09 1s 1s 256942390e-09 1s 1s 256946150e-09 0s 0s 256952430e-09 1s 1s 256952670e-09 1s 1s 256956390e-09 0s 0s 256962670e-09 1s 1s 256962950e-09 1s 1s 256966630e-09 0s 0s 256972910e-09 1s 1s 256973230e-09 1s 1s 256976870e-09 0s 0s 256983150e-09 1s 1s 256983510e-09 1s 1s 256987110e-09 0s 0s 256993390e-09 1s 1s 256993790e-09 1s 1s 256997350e-09 0s 0s 257003630e-09 1s 1s 257004070e-09 1s 1s 257007590e-09 0s 0s 257013870e-09 1s 1s 257014350e-09 1s 1s 257017830e-09 0s 0s 257024110e-09 1s 1s 257024630e-09 1s 1s 257028070e-09 0s 0s 257034350e-09 1s 1s 257034910e-09 1s 1s 257038310e-09 0s 0s 257044590e-09 1s 1s 257045190e-09 1s 1s 257048550e-09 0s 0s 257054830e-09 1s 1s 257055470e-09 1s 1s 257058790e-09 0s 0s 257065070e-09 1s 1s 257065750e-09 1s 1s 257069030e-09 0s 0s 257075310e-09 1s 1s 257076030e-09 1s 1s 257079270e-09 0s 0s 257085550e-09 1s 1s 257086310e-09 1s 1s 257089510e-09 0s 0s 257095790e-09 1s 1s 257096590e-09 1s 1s 257099750e-09 0s 0s 257106030e-09 1s 1s 257106870e-09 1s 1s 257109990e-09 0s 0s 257116270e-09 1s 1s 257117150e-09 1s 1s 257120230e-09 0s 0s 257126510e-09 1s 1s 257127430e-09 1s 1s 257130470e-09 0s 0s 257136750e-09 1s 1s 257137710e-09 1s 1s 257140710e-09 0s 0s 257146990e-09 1s 1s 257147990e-09 1s 1s 257150950e-09 0s 0s 257157230e-09 1s 1s 257158270e-09 1s 1s 257161190e-09 0s 0s 257167470e-09 1s 1s 257168550e-09 1s 1s 257171430e-09 0s 0s 257177710e-09 1s 1s 257178830e-09 1s 1s 257181670e-09 0s 0s 257187950e-09 1s 1s 257189110e-09 1s 1s 257191910e-09 0s 0s 257198190e-09 1s 1s 257199390e-09 1s 1s 257202150e-09 0s 0s 257208430e-09 1s 1s 257209670e-09 1s 1s 257212390e-09 0s 0s 257218670e-09 1s 1s 257219950e-09 1s 1s 257222630e-09 0s 0s 257228910e-09 1s 1s 257230230e-09 1s 1s 257232870e-09 0s 0s 257239150e-09 1s 1s 257240510e-09 1s 1s 257243110e-09 0s 0s 257249390e-09 1s 1s 257250790e-09 1s 1s 257253350e-09 0s 0s 257259630e-09 1s 1s 257261070e-09 1s 1s 257263590e-09 0s 0s 257269870e-09 1s 1s 257271350e-09 1s 1s 257273830e-09 0s 0s 257280110e-09 1s 1s 257281630e-09 1s 1s 257284070e-09 0s 0s 257290350e-09 1s 1s 257291910e-09 1s 1s 257294310e-09 0s 0s 257300590e-09 1s 1s 257302190e-09 1s 1s 257304550e-09 0s 0s 257310830e-09 1s 1s 257312470e-09 1s 1s 257314790e-09 0s 0s 257321070e-09 1s 1s 257322750e-09 1s 1s 257325030e-09 0s 0s 257331310e-09 1s 1s 257333030e-09 1s 1s 257335270e-09 0s 0s 257341550e-09 1s 1s 257343310e-09 1s 1s 257345510e-09 0s 0s 257351790e-09 1s 1s 257353590e-09 1s 1s 257355750e-09 0s 0s 257362030e-09 1s 1s 257363870e-09 1s 1s 257365990e-09 0s 0s 257372270e-09 1s 1s 257374150e-09 1s 1s 257376230e-09 0s 0s 257382510e-09 1s 1s 257384430e-09 1s 1s 257386470e-09 0s 0s 257392750e-09 1s 1s 257394710e-09 1s 1s 257396710e-09 0s 0s 257402990e-09 1s 1s 257404990e-09 1s 1s 257406950e-09 0s 0s 257413230e-09 1s 1s 257415270e-09 1s 1s 257417190e-09 0s 0s 257423470e-09 1s 1s 257425550e-09 1s 1s 257427430e-09 0s 0s 257433710e-09 1s 1s 257435830e-09 1s 1s 257437670e-09 0s 0s 257443950e-09 1s 1s 257446110e-09 1s 1s 257447910e-09 0s 0s 257454190e-09 1s 1s 257456390e-09 1s 1s 257458150e-09 0s 0s 257464430e-09 1s 1s 257466670e-09 1s 1s 257468390e-09 0s 0s 257474670e-09 1s 1s 257476950e-09 1s 1s 257478630e-09 0s 0s 257484910e-09 1s 1s 257487230e-09 1s 1s 257488870e-09 0s 0s 257495150e-09 1s 1s 257497510e-09 1s 1s 257499110e-09 0s 0s 257505390e-09 1s 1s 257507790e-09 1s 1s 257509350e-09 0s 0s 257515630e-09 1s 1s 257518070e-09 1s 1s 257519590e-09 0s 0s 257525870e-09 1s 1s 257528350e-09 1s 1s 257529830e-09 0s 0s 257536110e-09 1s 1s 257538630e-09 1s 1s 257540070e-09 0s 0s 257546350e-09 1s 1s 257548910e-09 1s 1s 257550310e-09 0s 0s 257556590e-09 1s 1s 257559190e-09 1s 1s 257560550e-09 0s 0s 257566830e-09 1s 1s 257569470e-09 1s 1s 257570790e-09 0s 0s 257577070e-09 1s 1s 257579750e-09 1s 1s 257581030e-09 0s 0s 257587310e-09 1s 1s 257590030e-09 1s 1s 257591270e-09 0s 0s 257597550e-09 1s 1s 257600310e-09 1s 1s 257601510e-09 0s 0s 257607790e-09 1s 1s 257610590e-09 1s 1s 257611750e-09 0s 0s 257618030e-09 1s 1s 257620870e-09 1s 1s 257621990e-09 0s 0s 257628270e-09 1s 1s 257631150e-09 1s 1s 257632230e-09 0s 0s 257638510e-09 1s 1s 257641430e-09 1s 1s 257642470e-09 0s 0s 257648750e-09 1s 1s 257651710e-09 1s 1s 257652710e-09 0s 0s 257658990e-09 1s 1s 257661990e-09 1s 1s 257662950e-09 0s 0s 257669230e-09 1s 1s 257672270e-09 1s 1s 257673190e-09 0s 0s 257679470e-09 1s 1s 257682550e-09 1s 1s 257683430e-09 0s 0s 257689710e-09 1s 1s 257692830e-09 1s 1s 257693670e-09 0s 0s 257699950e-09 1s 1s 257703110e-09 1s 1s 257703910e-09 0s 0s 257710190e-09 1s 1s 257713390e-09 1s 1s 257714150e-09 0s 0s 257720430e-09 1s 1s 257723670e-09 1s 1s 257724390e-09 0s 0s 257730670e-09 1s 1s 257733950e-09 1s 1s 257734630e-09 0s 0s 257740910e-09 1s 1s 257744230e-09 1s 1s 257744870e-09 0s 0s 257751150e-09 1s 1s 257754510e-09 1s 1s 257755110e-09 0s 0s 257761390e-09 1s 1s 257764790e-09 1s 1s 257765350e-09 0s 0s 257771630e-09 1s 1s 257775070e-09 1s 1s 257775590e-09 0s 0s 257781870e-09 1s 1s 257785350e-09 1s 1s 257785830e-09 0s 0s 257792110e-09 1s 1s 257795630e-09 1s 1s 257796070e-09 0s 0s 257802350e-09 1s 1s 257805910e-09 1s 1s 257806310e-09 0s 0s 257812590e-09 1s 1s 257816190e-09 1s 1s 257816550e-09 0s 0s 257822830e-09 1s 1s 257826470e-09 1s 1s 257826790e-09 0s 0s 257833070e-09 1s 1s 257836750e-09 1s 1s 257837030e-09 0s 0s 257843310e-09 1s 1s 257847030e-09 1s 1s 257847270e-09 0s 0s 257853550e-09 1s 1s 257857310e-09 1s 1s 257857510e-09 0s 0s 257863790e-09 1s 1s 257867590e-09 1s 1s 257867750e-09 0s 0s 257874030e-09 1s 1s 257877870e-09 1s 1s 257877990e-09 0s 0s 257884270e-09 1s 1s 257888150e-09 1s 1s 257888230e-09 0s 0s 257894510e-09 1s 1s 257898430e-09 1s 1s 257898470e-09 0s 0s 257904750e-09 1s 1s 257908710e-09 0s 0s 257914990e-09 1s 1s 257918950e-09 0s 0s 257918990e-09 0s 0s 257925230e-09 1s 1s 257929190e-09 0s 0s 257929270e-09 0s 0s 257935470e-09 1s 1s 257939430e-09 0s 0s 257939550e-09 0s 0s 257945710e-09 1s 1s 257949670e-09 0s 0s 257949830e-09 0s 0s 257955950e-09 1s 1s 257959910e-09 0s 0s 257960110e-09 0s 0s 257966190e-09 1s 1s 257970150e-09 0s 0s 257970390e-09 0s 0s 257976430e-09 1s 1s 257980390e-09 0s 0s 257980670e-09 0s 0s 257986670e-09 1s 1s 257990630e-09 0s 0s 257990950e-09 0s 0s 257996910e-09 1s 1s 258000870e-09 0s 0s 258001230e-09 0s 0s 258007150e-09 1s 1s 258011110e-09 0s 0s 258011510e-09 0s 0s 258017390e-09 1s 1s 258021350e-09 0s 0s 258021790e-09 0s 0s 258027630e-09 1s 1s 258031590e-09 0s 0s 258032070e-09 0s 0s 258037870e-09 1s 1s 258041830e-09 0s 0s 258042350e-09 0s 0s 258048110e-09 1s 1s 258052070e-09 0s 0s 258052630e-09 0s 0s 258058350e-09 1s 1s 258062310e-09 0s 0s 258062910e-09 0s 0s 258068590e-09 1s 1s 258072550e-09 0s 0s 258073190e-09 0s 0s 258078830e-09 1s 1s 258082790e-09 0s 0s 258083470e-09 0s 0s 258089070e-09 1s 1s 258093030e-09 0s 0s 258093750e-09 0s 0s 258099310e-09 1s 1s 258103270e-09 0s 0s 258104030e-09 0s 0s 258109550e-09 1s 1s 258113510e-09 0s 0s 258114310e-09 0s 0s 258119790e-09 1s 1s 258123750e-09 0s 0s 258124590e-09 0s 0s 258130030e-09 1s 1s 258133990e-09 0s 0s 258134870e-09 0s 0s 258140270e-09 1s 1s 258144230e-09 0s 0s 258145150e-09 0s 0s 258150510e-09 1s 1s 258154470e-09 0s 0s 258155430e-09 0s 0s 258160750e-09 1s 1s 258164710e-09 0s 0s 258165710e-09 0s 0s 258170990e-09 1s 1s 258174950e-09 0s 0s 258175990e-09 0s 0s 258181230e-09 1s 1s 258185190e-09 0s 0s 258186270e-09 0s 0s 258191470e-09 1s 1s 258195430e-09 0s 0s 258196550e-09 0s 0s 258201710e-09 1s 1s 258205670e-09 0s 0s 258206830e-09 0s 0s 258211950e-09 1s 1s 258215910e-09 0s 0s 258217110e-09 0s 0s 258222190e-09 1s 1s 258226150e-09 0s 0s 258227390e-09 0s 0s 258232430e-09 1s 1s 258236390e-09 0s 0s 258237670e-09 0s 0s 258242670e-09 1s 1s 258246630e-09 0s 0s 258247950e-09 0s 0s 258252910e-09 1s 1s 258256870e-09 0s 0s 258258230e-09 0s 0s 258263150e-09 1s 1s 258267110e-09 0s 0s 258268510e-09 0s 0s 258273390e-09 1s 1s 258277350e-09 0s 0s 258278790e-09 0s 0s 258283630e-09 1s 1s 258287590e-09 0s 0s 258289070e-09 0s 0s 258293870e-09 1s 1s 258297830e-09 0s 0s 258299350e-09 0s 0s 258304110e-09 1s 1s 258308070e-09 0s 0s 258309630e-09 0s 0s 258314350e-09 1s 1s 258318310e-09 0s 0s 258319910e-09 0s 0s 258324590e-09 1s 1s 258328550e-09 0s 0s 258330190e-09 0s 0s 258334830e-09 1s 1s 258338790e-09 0s 0s 258340470e-09 0s 0s 258345070e-09 1s 1s 258349030e-09 0s 0s 258350750e-09 0s 0s 258355310e-09 1s 1s 258359270e-09 0s 0s 258361030e-09 0s 0s 258365550e-09 1s 1s 258369510e-09 0s 0s 258371310e-09 0s 0s 258375790e-09 1s 1s 258379750e-09 0s 0s 258381590e-09 0s 0s 258386030e-09 1s 1s 258389990e-09 0s 0s 258391870e-09 0s 0s 258396270e-09 1s 1s 258400230e-09 0s 0s 258402150e-09 0s 0s 258406510e-09 1s 1s 258410470e-09 0s 0s 258412430e-09 0s 0s 258416750e-09 1s 1s 258420710e-09 0s 0s 258422710e-09 0s 0s 258426990e-09 1s 1s 258430950e-09 0s 0s 258432990e-09 0s 0s 258437230e-09 1s 1s 258441190e-09 0s 0s 258443270e-09 0s 0s 258447470e-09 1s 1s 258451430e-09 0s 0s 258453550e-09 0s 0s 258457710e-09 1s 1s 258461670e-09 0s 0s 258463830e-09 0s 0s 258467950e-09 1s 1s 258471910e-09 0s 0s 258474110e-09 0s 0s 258478190e-09 1s 1s 258482150e-09 0s 0s 258484390e-09 0s 0s 258488430e-09 1s 1s 258492390e-09 0s 0s 258494670e-09 0s 0s 258498670e-09 1s 1s 258502630e-09 0s 0s 258504950e-09 0s 0s 258508910e-09 1s 1s 258512870e-09 0s 0s 258515230e-09 0s 0s 258519150e-09 1s 1s 258523110e-09 0s 0s 258525510e-09 0s 0s 258529390e-09 1s 1s 258533350e-09 0s 0s 258535790e-09 0s 0s 258539630e-09 1s 1s 258543590e-09 0s 0s 258546070e-09 0s 0s 258549870e-09 1s 1s 258553830e-09 0s 0s 258556350e-09 0s 0s 258560110e-09 1s 1s 258564070e-09 0s 0s 258566630e-09 0s 0s 258570350e-09 1s 1s 258574310e-09 0s 0s 258576910e-09 0s 0s 258580590e-09 1s 1s 258584550e-09 0s 0s 258587190e-09 0s 0s 258590830e-09 1s 1s 258594790e-09 0s 0s 258597470e-09 0s 0s 258601070e-09 1s 1s 258605030e-09 0s 0s 258607750e-09 0s 0s 258611310e-09 1s 1s 258615270e-09 0s 0s 258618030e-09 0s 0s 258621550e-09 1s 1s 258625510e-09 0s 0s 258628310e-09 0s 0s 258631790e-09 1s 1s 258635750e-09 0s 0s 258638590e-09 0s 0s 258642030e-09 1s 1s 258645990e-09 0s 0s 258648870e-09 0s 0s 258652270e-09 1s 1s 258656230e-09 0s 0s 258659150e-09 0s 0s 258662510e-09 1s 1s 258666470e-09 0s 0s 258669430e-09 0s 0s 258672750e-09 1s 1s 258676710e-09 0s 0s 258679710e-09 0s 0s 258682990e-09 1s 1s 258686950e-09 0s 0s 258689990e-09 0s 0s 258693230e-09 1s 1s 258697190e-09 0s 0s 258700270e-09 0s 0s 258703470e-09 1s 1s 258707430e-09 0s 0s 258710550e-09 0s 0s 258713710e-09 1s 1s 258717670e-09 0s 0s 258720830e-09 0s 0s 258723950e-09 1s 1s 258727910e-09 0s 0s 258731110e-09 0s 0s 258734190e-09 1s 1s 258738150e-09 0s 0s 258741390e-09 0s 0s 258744430e-09 1s 1s 258748390e-09 0s 0s 258751670e-09 0s 0s 258754670e-09 1s 1s 258758630e-09 0s 0s 258761950e-09 0s 0s 258764910e-09 1s 1s 258768870e-09 0s 0s 258772230e-09 0s 0s 258775150e-09 1s 1s 258779110e-09 0s 0s 258782510e-09 0s 0s 258785390e-09 1s 1s 258789350e-09 0s 0s 258792790e-09 0s 0s 258795630e-09 1s 1s 258799590e-09 0s 0s 258803070e-09 0s 0s 258805870e-09 1s 1s 258809830e-09 0s 0s 258813350e-09 0s 0s 258816110e-09 1s 1s 258820070e-09 0s 0s 258823630e-09 0s 0s 258826350e-09 1s 1s 258830310e-09 0s 0s 258833910e-09 0s 0s 258836590e-09 1s 1s 258840550e-09 0s 0s 258844190e-09 0s 0s 258846830e-09 1s 1s 258850790e-09 0s 0s 258854470e-09 0s 0s 258857070e-09 1s 1s 258861030e-09 0s 0s 258864750e-09 0s 0s 258867310e-09 1s 1s 258871270e-09 0s 0s 258875030e-09 0s 0s 258877550e-09 1s 1s 258881510e-09 0s 0s 258885310e-09 0s 0s 258887790e-09 1s 1s 258891750e-09 0s 0s 258895590e-09 0s 0s 258898030e-09 1s 1s 258901990e-09 0s 0s 258905870e-09 0s 0s 258908270e-09 1s 1s 258912230e-09 0s 0s 258916150e-09 0s 0s 258918510e-09 1s 1s 258922470e-09 0s 0s 258926430e-09 0s 0s 258928750e-09 1s 1s 258932710e-09 0s 0s 258936710e-09 0s 0s 258938990e-09 1s 1s 258942950e-09 0s 0s 258946990e-09 0s 0s 258949230e-09 1s 1s 258953190e-09 0s 0s 258957270e-09 0s 0s 258959470e-09 1s 1s 258963430e-09 0s 0s 258967550e-09 0s 0s 258969710e-09 1s 1s 258973670e-09 0s 0s 258977830e-09 0s 0s 258979950e-09 1s 1s 258983910e-09 0s 0s 258988110e-09 0s 0s 258990190e-09 1s 1s 258994150e-09 0s 0s 258998390e-09 0s 0s 259000430e-09 1s 1s 259004390e-09 0s 0s 259008670e-09 0s 0s 259010670e-09 1s 1s 259014630e-09 0s 0s 259018950e-09 0s 0s 259020910e-09 1s 1s 259024870e-09 0s 0s 259029230e-09 0s 0s 259031150e-09 1s 1s 259035110e-09 0s 0s 259039510e-09 0s 0s 259041390e-09 1s 1s 259045350e-09 0s 0s 259049790e-09 0s 0s 259051630e-09 1s 1s 259055590e-09 0s 0s 259060070e-09 0s 0s 259061870e-09 1s 1s 259065830e-09 0s 0s 259070350e-09 0s 0s 259072110e-09 1s 1s 259076070e-09 0s 0s 259080630e-09 0s 0s 259082350e-09 1s 1s 259086310e-09 0s 0s 259090910e-09 0s 0s 259092590e-09 1s 1s 259096550e-09 0s 0s 259101190e-09 0s 0s 259102830e-09 1s 1s 259106790e-09 0s 0s 259111470e-09 0s 0s 259113070e-09 1s 1s 259117030e-09 0s 0s 259121750e-09 0s 0s 259123310e-09 1s 1s 259127270e-09 0s 0s 259132030e-09 0s 0s 259133550e-09 1s 1s 259137510e-09 0s 0s 259142310e-09 0s 0s 259143790e-09 1s 1s 259147750e-09 0s 0s 259152590e-09 0s 0s 259154030e-09 1s 1s 259157990e-09 0s 0s 259162870e-09 0s 0s 259164270e-09 1s 1s 259168230e-09 0s 0s 259173150e-09 0s 0s 259174510e-09 1s 1s 259178470e-09 0s 0s 259183430e-09 0s 0s 259184750e-09 1s 1s 259188710e-09 0s 0s 259193710e-09 0s 0s 259194990e-09 1s 1s 259198950e-09 0s 0s 259203990e-09 0s 0s 259205230e-09 1s 1s 259209190e-09 0s 0s 259214270e-09 0s 0s 259215470e-09 1s 1s 259219430e-09 0s 0s 259224550e-09 0s 0s 259225710e-09 1s 1s 259229670e-09 0s 0s 259234830e-09 0s 0s 259235950e-09 1s 1s 259239910e-09 0s 0s 259245110e-09 0s 0s 259246190e-09 1s 1s 259250150e-09 0s 0s 259255390e-09 0s 0s 259256430e-09 1s 1s 259260390e-09 0s 0s 259265670e-09 0s 0s 259266670e-09 1s 1s 259270630e-09 0s 0s 259275950e-09 0s 0s 259276910e-09 1s 1s 259280870e-09 0s 0s 259286230e-09 0s 0s 259287150e-09 1s 1s 259291110e-09 0s 0s 259296510e-09 0s 0s 259297390e-09 1s 1s 259301350e-09 0s 0s 259306790e-09 0s 0s 259307630e-09 1s 1s 259311590e-09 0s 0s 259317070e-09 0s 0s 259317870e-09 1s 1s 259321830e-09 0s 0s 259327350e-09 0s 0s 259328110e-09 1s 1s 259332070e-09 0s 0s 259337630e-09 0s 0s 259338350e-09 1s 1s 259342310e-09 0s 0s 259347910e-09 0s 0s 259348590e-09 1s 1s 259352550e-09 0s 0s 259358190e-09 0s 0s 259358830e-09 1s 1s 259362790e-09 0s 0s 259368470e-09 0s 0s 259369070e-09 1s 1s 259373030e-09 0s 0s 259378750e-09 0s 0s 259379310e-09 1s 1s 259383270e-09 0s 0s 259389030e-09 0s 0s 259389550e-09 1s 1s 259393510e-09 0s 0s 259399310e-09 0s 0s 259399790e-09 1s 1s 259403750e-09 0s 0s 259409590e-09 0s 0s 259410030e-09 1s 1s 259413990e-09 0s 0s 259419870e-09 0s 0s 259420270e-09 1s 1s 259424230e-09 0s 0s 259430150e-09 0s 0s 259430510e-09 1s 1s 259434470e-09 0s 0s 259440430e-09 0s 0s 259440750e-09 1s 1s 259444710e-09 0s 0s 259450710e-09 0s 0s 259450990e-09 1s 1s 259454950e-09 0s 0s 259460990e-09 0s 0s 259461230e-09 1s 1s 259465190e-09 0s 0s 259471270e-09 0s 0s 259471470e-09 1s 1s 259475430e-09 0s 0s 259481550e-09 0s 0s 259481710e-09 1s 1s 259485670e-09 0s 0s 259491830e-09 0s 0s 259491950e-09 1s 1s 259495910e-09 0s 0s 259502110e-09 0s 0s 259502190e-09 1s 1s 259506150e-09 0s 0s 259512390e-09 0s 0s 259512430e-09 1s 1s 259516390e-09 0s 0s 259522670e-09 1s 1s 259522710e-09 1s 1s 259526670e-09 0s 0s 259532910e-09 1s 1s 259532990e-09 1s 1s 259536910e-09 0s 0s 259543150e-09 1s 1s 259543270e-09 1s 1s 259547150e-09 0s 0s 259553390e-09 1s 1s 259553550e-09 1s 1s 259557390e-09 0s 0s 259563630e-09 1s 1s 259563830e-09 1s 1s 259567630e-09 0s 0s 259573870e-09 1s 1s 259574110e-09 1s 1s 259577870e-09 0s 0s 259584110e-09 1s 1s 259584390e-09 1s 1s 259588110e-09 0s 0s 259594350e-09 1s 1s 259594670e-09 1s 1s 259598350e-09 0s 0s 259604590e-09 1s 1s 259604950e-09 1s 1s 259608590e-09 0s 0s 259614830e-09 1s 1s 259615230e-09 1s 1s 259618830e-09 0s 0s 259625070e-09 1s 1s 259625510e-09 1s 1s 259629070e-09 0s 0s 259635310e-09 1s 1s 259635790e-09 1s 1s 259639310e-09 0s 0s 259645550e-09 1s 1s 259646070e-09 1s 1s 259649550e-09 0s 0s 259655790e-09 1s 1s 259656350e-09 1s 1s 259659790e-09 0s 0s 259666030e-09 1s 1s 259666630e-09 1s 1s 259670030e-09 0s 0s 259676270e-09 1s 1s 259676910e-09 1s 1s 259680270e-09 0s 0s 259686510e-09 1s 1s 259687190e-09 1s 1s 259690510e-09 0s 0s 259696750e-09 1s 1s 259697470e-09 1s 1s 259700750e-09 0s 0s 259706990e-09 1s 1s 259707750e-09 1s 1s 259710990e-09 0s 0s 259717230e-09 1s 1s 259718030e-09 1s 1s 259721230e-09 0s 0s 259727470e-09 1s 1s 259728310e-09 1s 1s 259731470e-09 0s 0s 259737710e-09 1s 1s 259738590e-09 1s 1s 259741710e-09 0s 0s 259747950e-09 1s 1s 259748870e-09 1s 1s 259751950e-09 0s 0s 259758190e-09 1s 1s 259759150e-09 1s 1s 259762190e-09 0s 0s 259768430e-09 1s 1s 259769430e-09 1s 1s 259772430e-09 0s 0s 259778670e-09 1s 1s 259779710e-09 1s 1s 259782670e-09 0s 0s 259788910e-09 1s 1s 259789990e-09 1s 1s 259792910e-09 0s 0s 259799150e-09 1s 1s 259800270e-09 1s 1s 259803150e-09 0s 0s 259809390e-09 1s 1s 259810550e-09 1s 1s 259813390e-09 0s 0s 259819630e-09 1s 1s 259820830e-09 1s 1s 259823630e-09 0s 0s 259829870e-09 1s 1s 259831110e-09 1s 1s 259833870e-09 0s 0s 259840110e-09 1s 1s 259841390e-09 1s 1s 259844110e-09 0s 0s 259850350e-09 1s 1s 259851670e-09 1s 1s 259854350e-09 0s 0s 259860590e-09 1s 1s 259861950e-09 1s 1s 259864590e-09 0s 0s 259870830e-09 1s 1s 259872230e-09 1s 1s 259874830e-09 0s 0s 259881070e-09 1s 1s 259882510e-09 1s 1s 259885070e-09 0s 0s 259891310e-09 1s 1s 259892790e-09 1s 1s 259895310e-09 0s 0s 259901550e-09 1s 1s 259903070e-09 1s 1s 259905550e-09 0s 0s 259911790e-09 1s 1s 259913350e-09 1s 1s 259915790e-09 0s 0s 259922030e-09 1s 1s 259923630e-09 1s 1s 259926030e-09 0s 0s 259932270e-09 1s 1s 259933910e-09 1s 1s 259936270e-09 0s 0s 259942510e-09 1s 1s 259944190e-09 1s 1s 259946510e-09 0s 0s 259952750e-09 1s 1s 259954470e-09 1s 1s 259956750e-09 0s 0s 259962990e-09 1s 1s 259964750e-09 1s 1s 259966990e-09 0s 0s 259973230e-09 1s 1s 259975030e-09 1s 1s 259977230e-09 0s 0s 259983470e-09 1s 1s 259985310e-09 1s 1s 259987470e-09 0s 0s 259993710e-09 1s 1s 259995590e-09 1s 1s 259997710e-09 0s 0s 260003950e-09 1s 1s 260005870e-09 1s 1s 260007950e-09 0s 0s 260014190e-09 1s 1s 260016150e-09 1s 1s 260018190e-09 0s 0s 260024430e-09 1s 1s 260026430e-09 1s 1s 260028430e-09 0s 0s 260034670e-09 1s 1s 260036710e-09 1s 1s 260038670e-09 0s 0s 260044910e-09 1s 1s 260046990e-09 1s 1s 260048910e-09 0s 0s 260055150e-09 1s 1s 260057270e-09 1s 1s 260059150e-09 0s 0s 260065390e-09 1s 1s 260067550e-09 1s 1s 260069390e-09 0s 0s 260075630e-09 1s 1s 260077830e-09 1s 1s 260079630e-09 0s 0s 260085870e-09 1s 1s 260088110e-09 1s 1s 260089870e-09 0s 0s 260096110e-09 1s 1s 260098390e-09 1s 1s 260100110e-09 0s 0s 260106350e-09 1s 1s 260108670e-09 1s 1s 260110350e-09 0s 0s 260116590e-09 1s 1s 260118950e-09 1s 1s 260120590e-09 0s 0s 260126830e-09 1s 1s 260129230e-09 1s 1s 260130830e-09 0s 0s 260137070e-09 1s 1s 260139510e-09 1s 1s 260141070e-09 0s 0s 260147310e-09 1s 1s 260149790e-09 1s 1s 260151310e-09 0s 0s 260157550e-09 1s 1s 260160070e-09 1s 1s 260161550e-09 0s 0s 260167790e-09 1s 1s 260170350e-09 1s 1s 260171790e-09 0s 0s 260178030e-09 1s 1s 260180630e-09 1s 1s 260182030e-09 0s 0s 260188270e-09 1s 1s 260190910e-09 1s 1s 260192270e-09 0s 0s 260198510e-09 1s 1s 260201190e-09 1s 1s 260202510e-09 0s 0s 260208750e-09 1s 1s 260211470e-09 1s 1s 260212750e-09 0s 0s 260218990e-09 1s 1s 260221750e-09 1s 1s 260222990e-09 0s 0s 260229230e-09 1s 1s 260232030e-09 1s 1s 260233230e-09 0s 0s 260239470e-09 1s 1s 260242310e-09 1s 1s 260243470e-09 0s 0s 260249710e-09 1s 1s 260252590e-09 1s 1s 260253710e-09 0s 0s 260259950e-09 1s 1s 260262870e-09 1s 1s 260263950e-09 0s 0s 260270190e-09 1s 1s 260273150e-09 1s 1s 260274190e-09 0s 0s 260280430e-09 1s 1s 260283430e-09 1s 1s 260284430e-09 0s 0s 260290670e-09 1s 1s 260293710e-09 1s 1s 260294670e-09 0s 0s 260300910e-09 1s 1s 260303990e-09 1s 1s 260304910e-09 0s 0s 260311150e-09 1s 1s 260314270e-09 1s 1s 260315150e-09 0s 0s 260321390e-09 1s 1s 260324550e-09 1s 1s 260325390e-09 0s 0s 260331630e-09 1s 1s 260334830e-09 1s 1s 260335630e-09 0s 0s 260341870e-09 1s 1s 260345110e-09 1s 1s 260345870e-09 0s 0s 260352110e-09 1s 1s 260355390e-09 1s 1s 260356110e-09 0s 0s 260362350e-09 1s 1s 260365670e-09 1s 1s 260366350e-09 0s 0s 260372590e-09 1s 1s 260375950e-09 1s 1s 260376590e-09 0s 0s 260382830e-09 1s 1s 260386230e-09 1s 1s 260386830e-09 0s 0s 260393070e-09 1s 1s 260396510e-09 1s 1s 260397070e-09 0s 0s 260403310e-09 1s 1s 260406790e-09 1s 1s 260407310e-09 0s 0s 260413550e-09 1s 1s 260417070e-09 1s 1s 260417550e-09 0s 0s 260423790e-09 1s 1s 260427350e-09 1s 1s 260427790e-09 0s 0s 260434030e-09 1s 1s 260437630e-09 1s 1s 260438030e-09 0s 0s 260444270e-09 1s 1s 260447910e-09 1s 1s 260448270e-09 0s 0s 260454510e-09 1s 1s 260458190e-09 1s 1s 260458510e-09 0s 0s 260464750e-09 1s 1s 260468470e-09 1s 1s 260468750e-09 0s 0s 260474990e-09 1s 1s 260478750e-09 1s 1s 260478990e-09 0s 0s 260485230e-09 1s 1s 260489030e-09 1s 1s 260489230e-09 0s 0s 260495470e-09 1s 1s 260499310e-09 1s 1s 260499470e-09 0s 0s 260505710e-09 1s 1s 260509590e-09 1s 1s 260509710e-09 0s 0s 260515950e-09 1s 1s 260519870e-09 1s 1s 260519950e-09 0s 0s 260526190e-09 1s 1s 260530150e-09 1s 1s 260530190e-09 0s 0s 260536430e-09 1s 1s 260540430e-09 0s 0s 260546670e-09 1s 1s 260550670e-09 0s 0s 260550710e-09 0s 0s 260556910e-09 1s 1s 260560910e-09 0s 0s 260560990e-09 0s 0s 260567150e-09 1s 1s 260571150e-09 0s 0s 260571270e-09 0s 0s 260577390e-09 1s 1s 260581390e-09 0s 0s 260581550e-09 0s 0s 260587630e-09 1s 1s 260591630e-09 0s 0s 260591830e-09 0s 0s 260597870e-09 1s 1s 260601870e-09 0s 0s 260602110e-09 0s 0s 260608110e-09 1s 1s 260612110e-09 0s 0s 260612390e-09 0s 0s 260618350e-09 1s 1s 260622350e-09 0s 0s 260622670e-09 0s 0s 260628590e-09 1s 1s 260632590e-09 0s 0s 260632950e-09 0s 0s 260638830e-09 1s 1s 260642830e-09 0s 0s 260643230e-09 0s 0s 260649070e-09 1s 1s 260653070e-09 0s 0s 260653510e-09 0s 0s 260659310e-09 1s 1s 260663310e-09 0s 0s 260663790e-09 0s 0s 260669550e-09 1s 1s 260673550e-09 0s 0s 260674070e-09 0s 0s 260679790e-09 1s 1s 260683790e-09 0s 0s 260684350e-09 0s 0s 260690030e-09 1s 1s 260694030e-09 0s 0s 260694630e-09 0s 0s 260700270e-09 1s 1s 260704270e-09 0s 0s 260704910e-09 0s 0s 260710510e-09 1s 1s 260714510e-09 0s 0s 260715190e-09 0s 0s 260720750e-09 1s 1s 260724750e-09 0s 0s 260725470e-09 0s 0s 260730990e-09 1s 1s 260734990e-09 0s 0s 260735750e-09 0s 0s 260741230e-09 1s 1s 260745230e-09 0s 0s 260746030e-09 0s 0s 260751470e-09 1s 1s 260755470e-09 0s 0s 260756310e-09 0s 0s 260761710e-09 1s 1s 260765710e-09 0s 0s 260766590e-09 0s 0s 260771950e-09 1s 1s 260775950e-09 0s 0s 260776870e-09 0s 0s 260782190e-09 1s 1s 260786190e-09 0s 0s 260787150e-09 0s 0s 260792430e-09 1s 1s 260796430e-09 0s 0s 260797430e-09 0s 0s 260802670e-09 1s 1s 260806670e-09 0s 0s 260807710e-09 0s 0s 260812910e-09 1s 1s 260816910e-09 0s 0s 260817990e-09 0s 0s 260823150e-09 1s 1s 260827150e-09 0s 0s 260828270e-09 0s 0s 260833390e-09 1s 1s 260837390e-09 0s 0s 260838550e-09 0s 0s 260843630e-09 1s 1s 260847630e-09 0s 0s 260848830e-09 0s 0s 260853870e-09 1s 1s 260857870e-09 0s 0s 260859110e-09 0s 0s 260864110e-09 1s 1s 260868110e-09 0s 0s 260869390e-09 0s 0s 260874350e-09 1s 1s 260878350e-09 0s 0s 260879670e-09 0s 0s 260884590e-09 1s 1s 260888590e-09 0s 0s 260889950e-09 0s 0s 260894830e-09 1s 1s 260898830e-09 0s 0s 260900230e-09 0s 0s 260905070e-09 1s 1s 260909070e-09 0s 0s 260910510e-09 0s 0s 260915310e-09 1s 1s 260919310e-09 0s 0s 260920790e-09 0s 0s 260925550e-09 1s 1s 260929550e-09 0s 0s 260931070e-09 0s 0s 260935790e-09 1s 1s 260939790e-09 0s 0s 260941350e-09 0s 0s 260946030e-09 1s 1s 260950030e-09 0s 0s 260951630e-09 0s 0s 260956270e-09 1s 1s 260960270e-09 0s 0s 260961910e-09 0s 0s 260966510e-09 1s 1s 260970510e-09 0s 0s 260972190e-09 0s 0s 260976750e-09 1s 1s 260980750e-09 0s 0s 260982470e-09 0s 0s 260986990e-09 1s 1s 260990990e-09 0s 0s 260992750e-09 0s 0s 260997230e-09 1s 1s 261001230e-09 0s 0s 261003030e-09 0s 0s 261007470e-09 1s 1s 261011470e-09 0s 0s 261013310e-09 0s 0s 261017710e-09 1s 1s 261021710e-09 0s 0s 261023590e-09 0s 0s 261027950e-09 1s 1s 261031950e-09 0s 0s 261033870e-09 0s 0s 261038190e-09 1s 1s 261042190e-09 0s 0s 261044150e-09 0s 0s 261048430e-09 1s 1s 261052430e-09 0s 0s 261054430e-09 0s 0s 261058670e-09 1s 1s 261062670e-09 0s 0s 261064710e-09 0s 0s 261068910e-09 1s 1s 261072910e-09 0s 0s 261074990e-09 0s 0s 261079150e-09 1s 1s 261083150e-09 0s 0s 261085270e-09 0s 0s 261089390e-09 1s 1s 261093390e-09 0s 0s 261095550e-09 0s 0s 261099630e-09 1s 1s 261103630e-09 0s 0s 261105830e-09 0s 0s 261109870e-09 1s 1s 261113870e-09 0s 0s 261116110e-09 0s 0s 261120110e-09 1s 1s 261124110e-09 0s 0s 261126390e-09 0s 0s 261130350e-09 1s 1s 261134350e-09 0s 0s 261136670e-09 0s 0s 261140590e-09 1s 1s 261144590e-09 0s 0s 261146950e-09 0s 0s 261150830e-09 1s 1s 261154830e-09 0s 0s 261157230e-09 0s 0s 261161070e-09 1s 1s 261165070e-09 0s 0s 261167510e-09 0s 0s 261171310e-09 1s 1s 261175310e-09 0s 0s 261177790e-09 0s 0s 261181550e-09 1s 1s 261185550e-09 0s 0s 261188070e-09 0s 0s 261191790e-09 1s 1s 261195790e-09 0s 0s 261198350e-09 0s 0s 261202030e-09 1s 1s 261206030e-09 0s 0s 261208630e-09 0s 0s 261212270e-09 1s 1s 261216270e-09 0s 0s 261218910e-09 0s 0s 261222510e-09 1s 1s 261226510e-09 0s 0s 261229190e-09 0s 0s 261232750e-09 1s 1s 261236750e-09 0s 0s 261239470e-09 0s 0s 261242990e-09 1s 1s 261246990e-09 0s 0s 261249750e-09 0s 0s 261253230e-09 1s 1s 261257230e-09 0s 0s 261260030e-09 0s 0s 261263470e-09 1s 1s 261267470e-09 0s 0s 261270310e-09 0s 0s 261273710e-09 1s 1s 261277710e-09 0s 0s 261280590e-09 0s 0s 261283950e-09 1s 1s 261287950e-09 0s 0s 261290870e-09 0s 0s 261294190e-09 1s 1s 261298190e-09 0s 0s 261301150e-09 0s 0s 261304430e-09 1s 1s 261308430e-09 0s 0s 261311430e-09 0s 0s 261314670e-09 1s 1s 261318670e-09 0s 0s 261321710e-09 0s 0s 261324910e-09 1s 1s 261328910e-09 0s 0s 261331990e-09 0s 0s 261335150e-09 1s 1s 261339150e-09 0s 0s 261342270e-09 0s 0s 261345390e-09 1s 1s 261349390e-09 0s 0s 261352550e-09 0s 0s 261355630e-09 1s 1s 261359630e-09 0s 0s 261362830e-09 0s 0s 261365870e-09 1s 1s 261369870e-09 0s 0s 261373110e-09 0s 0s 261376110e-09 1s 1s 261380110e-09 0s 0s 261383390e-09 0s 0s 261386350e-09 1s 1s 261390350e-09 0s 0s 261393670e-09 0s 0s 261396590e-09 1s 1s 261400590e-09 0s 0s 261403950e-09 0s 0s 261406830e-09 1s 1s 261410830e-09 0s 0s 261414230e-09 0s 0s 261417070e-09 1s 1s 261421070e-09 0s 0s 261424510e-09 0s 0s 261427310e-09 1s 1s 261431310e-09 0s 0s 261434790e-09 0s 0s 261437550e-09 1s 1s 261441550e-09 0s 0s 261445070e-09 0s 0s 261447790e-09 1s 1s 261451790e-09 0s 0s 261455350e-09 0s 0s 261458030e-09 1s 1s 261462030e-09 0s 0s 261465630e-09 0s 0s 261468270e-09 1s 1s 261472270e-09 0s 0s 261475910e-09 0s 0s 261478510e-09 1s 1s 261482510e-09 0s 0s 261486190e-09 0s 0s 261488750e-09 1s 1s 261492750e-09 0s 0s 261496470e-09 0s 0s 261498990e-09 1s 1s 261502990e-09 0s 0s 261506750e-09 0s 0s 261509230e-09 1s 1s 261513230e-09 0s 0s 261517030e-09 0s 0s 261519470e-09 1s 1s 261523470e-09 0s 0s 261527310e-09 0s 0s 261529710e-09 1s 1s 261533710e-09 0s 0s 261537590e-09 0s 0s 261539950e-09 1s 1s 261543950e-09 0s 0s 261547870e-09 0s 0s 261550190e-09 1s 1s 261554190e-09 0s 0s 261558150e-09 0s 0s 261560430e-09 1s 1s 261564430e-09 0s 0s 261568430e-09 0s 0s 261570670e-09 1s 1s 261574670e-09 0s 0s 261578710e-09 0s 0s 261580910e-09 1s 1s 261584910e-09 0s 0s 261588990e-09 0s 0s 261591150e-09 1s 1s 261595150e-09 0s 0s 261599270e-09 0s 0s 261601390e-09 1s 1s 261605390e-09 0s 0s 261609550e-09 0s 0s 261611630e-09 1s 1s 261615630e-09 0s 0s 261619830e-09 0s 0s 261621870e-09 1s 1s 261625870e-09 0s 0s 261630110e-09 0s 0s 261632110e-09 1s 1s 261636110e-09 0s 0s 261640390e-09 0s 0s 261642350e-09 1s 1s 261646350e-09 0s 0s 261650670e-09 0s 0s 261652590e-09 1s 1s 261656590e-09 0s 0s 261660950e-09 0s 0s 261662830e-09 1s 1s 261666830e-09 0s 0s 261671230e-09 0s 0s 261673070e-09 1s 1s 261677070e-09 0s 0s 261681510e-09 0s 0s 261683310e-09 1s 1s 261687310e-09 0s 0s 261691790e-09 0s 0s 261693550e-09 1s 1s 261697550e-09 0s 0s 261702070e-09 0s 0s 261703790e-09 1s 1s 261707790e-09 0s 0s 261712350e-09 0s 0s 261714030e-09 1s 1s 261718030e-09 0s 0s 261722630e-09 0s 0s 261724270e-09 1s 1s 261728270e-09 0s 0s 261732910e-09 0s 0s 261734510e-09 1s 1s 261738510e-09 0s 0s 261743190e-09 0s 0s 261744750e-09 1s 1s 261748750e-09 0s 0s 261753470e-09 0s 0s 261754990e-09 1s 1s 261758990e-09 0s 0s 261763750e-09 0s 0s 261765230e-09 1s 1s 261769230e-09 0s 0s 261774030e-09 0s 0s 261775470e-09 1s 1s 261779470e-09 0s 0s 261784310e-09 0s 0s 261785710e-09 1s 1s 261789710e-09 0s 0s 261794590e-09 0s 0s 261795950e-09 1s 1s 261799950e-09 0s 0s 261804870e-09 0s 0s 261806190e-09 1s 1s 261810190e-09 0s 0s 261815150e-09 0s 0s 261816430e-09 1s 1s 261820430e-09 0s 0s 261825430e-09 0s 0s 261826670e-09 1s 1s 261830670e-09 0s 0s 261835710e-09 0s 0s 261836910e-09 1s 1s 261840910e-09 0s 0s 261845990e-09 0s 0s 261847150e-09 1s 1s 261851150e-09 0s 0s 261856270e-09 0s 0s 261857390e-09 1s 1s 261861390e-09 0s 0s 261866550e-09 0s 0s 261867630e-09 1s 1s 261871630e-09 0s 0s 261876830e-09 0s 0s 261877870e-09 1s 1s 261881870e-09 0s 0s 261887110e-09 0s 0s 261888110e-09 1s 1s 261892110e-09 0s 0s 261897390e-09 0s 0s 261898350e-09 1s 1s 261902350e-09 0s 0s 261907670e-09 0s 0s 261908590e-09 1s 1s 261912590e-09 0s 0s 261917950e-09 0s 0s 261918830e-09 1s 1s 261922830e-09 0s 0s 261928230e-09 0s 0s 261929070e-09 1s 1s 261933070e-09 0s 0s 261938510e-09 0s 0s 261939310e-09 1s 1s 261943310e-09 0s 0s 261948790e-09 0s 0s 261949550e-09 1s 1s 261953550e-09 0s 0s 261959070e-09 0s 0s 261959790e-09 1s 1s 261963790e-09 0s 0s 261969350e-09 0s 0s 261970030e-09 1s 1s 261974030e-09 0s 0s 261979630e-09 0s 0s 261980270e-09 1s 1s 261984270e-09 0s 0s 261989910e-09 0s 0s 261990510e-09 1s 1s 261994510e-09 0s 0s 262000190e-09 0s 0s 262000750e-09 1s 1s 262004750e-09 0s 0s 262010470e-09 0s 0s 262010990e-09 1s 1s 262014990e-09 0s 0s 262020750e-09 0s 0s 262021230e-09 1s 1s 262025230e-09 0s 0s 262031030e-09 0s 0s 262031470e-09 1s 1s 262035470e-09 0s 0s 262041310e-09 0s 0s 262041710e-09 1s 1s 262045710e-09 0s 0s 262051590e-09 0s 0s 262051950e-09 1s 1s 262055950e-09 0s 0s 262061870e-09 0s 0s 262062190e-09 1s 1s 262066190e-09 0s 0s 262072150e-09 0s 0s 262072430e-09 1s 1s 262076430e-09 0s 0s 262082430e-09 0s 0s 262082670e-09 1s 1s 262086670e-09 0s 0s 262092710e-09 0s 0s 262092910e-09 1s 1s 262096910e-09 0s 0s 262102990e-09 0s 0s 262103150e-09 1s 1s 262107150e-09 0s 0s 262113270e-09 0s 0s 262113390e-09 1s 1s 262117390e-09 0s 0s 262123550e-09 0s 0s 262123630e-09 1s 1s 262127630e-09 0s 0s 262133830e-09 0s 0s 262133870e-09 1s 1s 262137870e-09 0s 0s 262144110e-09 1s 1s 262144150e-09 1s 1s 262148150e-09 0s 0s 262154350e-09 1s 1s 262154430e-09 1s 1s 262158390e-09 0s 0s 262164590e-09 1s 1s 262164710e-09 1s 1s 262168630e-09 0s 0s 262174830e-09 1s 1s 262174990e-09 1s 1s 262178870e-09 0s 0s 262185070e-09 1s 1s 262185270e-09 1s 1s 262189110e-09 0s 0s 262195310e-09 1s 1s 262195550e-09 1s 1s 262199350e-09 0s 0s 262205550e-09 1s 1s 262205830e-09 1s 1s 262209590e-09 0s 0s 262215790e-09 1s 1s 262216110e-09 1s 1s 262219830e-09 0s 0s 262226030e-09 1s 1s 262226390e-09 1s 1s 262230070e-09 0s 0s 262236270e-09 1s 1s 262236670e-09 1s 1s 262240310e-09 0s 0s 262246510e-09 1s 1s 262246950e-09 1s 1s 262250550e-09 0s 0s 262256750e-09 1s 1s 262257230e-09 1s 1s 262260790e-09 0s 0s 262266990e-09 1s 1s 262267510e-09 1s 1s 262271030e-09 0s 0s 262277230e-09 1s 1s 262277790e-09 1s 1s 262281270e-09 0s 0s 262287470e-09 1s 1s 262288070e-09 1s 1s 262291510e-09 0s 0s 262297710e-09 1s 1s 262298350e-09 1s 1s 262301750e-09 0s 0s 262307950e-09 1s 1s 262308630e-09 1s 1s 262311990e-09 0s 0s 262318190e-09 1s 1s 262318910e-09 1s 1s 262322230e-09 0s 0s 262328430e-09 1s 1s 262329190e-09 1s 1s 262332470e-09 0s 0s 262338670e-09 1s 1s 262339470e-09 1s 1s 262342710e-09 0s 0s 262348910e-09 1s 1s 262349750e-09 1s 1s 262352950e-09 0s 0s 262359150e-09 1s 1s 262360030e-09 1s 1s 262363190e-09 0s 0s 262369390e-09 1s 1s 262370310e-09 1s 1s 262373430e-09 0s 0s 262379630e-09 1s 1s 262380590e-09 1s 1s 262383670e-09 0s 0s 262389870e-09 1s 1s 262390870e-09 1s 1s 262393910e-09 0s 0s 262400110e-09 1s 1s 262401150e-09 1s 1s 262404150e-09 0s 0s 262410350e-09 1s 1s 262411430e-09 1s 1s 262414390e-09 0s 0s 262420590e-09 1s 1s 262421710e-09 1s 1s 262424630e-09 0s 0s 262430830e-09 1s 1s 262431990e-09 1s 1s 262434870e-09 0s 0s 262441070e-09 1s 1s 262442270e-09 1s 1s 262445110e-09 0s 0s 262451310e-09 1s 1s 262452550e-09 1s 1s 262455350e-09 0s 0s 262461550e-09 1s 1s 262462830e-09 1s 1s 262465590e-09 0s 0s 262471790e-09 1s 1s 262473110e-09 1s 1s 262475830e-09 0s 0s 262482030e-09 1s 1s 262483390e-09 1s 1s 262486070e-09 0s 0s 262492270e-09 1s 1s 262493670e-09 1s 1s 262496310e-09 0s 0s 262502510e-09 1s 1s 262503950e-09 1s 1s 262506550e-09 0s 0s 262512750e-09 1s 1s 262514230e-09 1s 1s 262516790e-09 0s 0s 262522990e-09 1s 1s 262524510e-09 1s 1s 262527030e-09 0s 0s 262533230e-09 1s 1s 262534790e-09 1s 1s 262537270e-09 0s 0s 262543470e-09 1s 1s 262545070e-09 1s 1s 262547510e-09 0s 0s 262553710e-09 1s 1s 262555350e-09 1s 1s 262557750e-09 0s 0s 262563950e-09 1s 1s 262565630e-09 1s 1s 262567990e-09 0s 0s 262574190e-09 1s 1s 262575910e-09 1s 1s 262578230e-09 0s 0s 262584430e-09 1s 1s 262586190e-09 1s 1s 262588470e-09 0s 0s 262594670e-09 1s 1s 262596470e-09 1s 1s 262598710e-09 0s 0s 262604910e-09 1s 1s 262606750e-09 1s 1s 262608950e-09 0s 0s 262615150e-09 1s 1s 262617030e-09 1s 1s 262619190e-09 0s 0s 262625390e-09 1s 1s 262627310e-09 1s 1s 262629430e-09 0s 0s 262635630e-09 1s 1s 262637590e-09 1s 1s 262639670e-09 0s 0s 262645870e-09 1s 1s 262647870e-09 1s 1s 262649910e-09 0s 0s 262656110e-09 1s 1s 262658150e-09 1s 1s 262660150e-09 0s 0s 262666350e-09 1s 1s 262668430e-09 1s 1s 262670390e-09 0s 0s 262676590e-09 1s 1s 262678710e-09 1s 1s 262680630e-09 0s 0s 262686830e-09 1s 1s 262688990e-09 1s 1s 262690870e-09 0s 0s 262697070e-09 1s 1s 262699270e-09 1s 1s 262701110e-09 0s 0s 262707310e-09 1s 1s 262709550e-09 1s 1s 262711350e-09 0s 0s 262717550e-09 1s 1s 262719830e-09 1s 1s 262721590e-09 0s 0s 262727790e-09 1s 1s 262730110e-09 1s 1s 262731830e-09 0s 0s 262738030e-09 1s 1s 262740390e-09 1s 1s 262742070e-09 0s 0s 262748270e-09 1s 1s 262750670e-09 1s 1s 262752310e-09 0s 0s 262758510e-09 1s 1s 262760950e-09 1s 1s 262762550e-09 0s 0s 262768750e-09 1s 1s 262771230e-09 1s 1s 262772790e-09 0s 0s 262778990e-09 1s 1s 262781510e-09 1s 1s 262783030e-09 0s 0s 262789230e-09 1s 1s 262791790e-09 1s 1s 262793270e-09 0s 0s 262799470e-09 1s 1s 262802070e-09 1s 1s 262803510e-09 0s 0s 262809710e-09 1s 1s 262812350e-09 1s 1s 262813750e-09 0s 0s 262819950e-09 1s 1s 262822630e-09 1s 1s 262823990e-09 0s 0s 262830190e-09 1s 1s 262832910e-09 1s 1s 262834230e-09 0s 0s 262840430e-09 1s 1s 262843190e-09 1s 1s 262844470e-09 0s 0s 262850670e-09 1s 1s 262853470e-09 1s 1s 262854710e-09 0s 0s 262860910e-09 1s 1s 262863750e-09 1s 1s 262864950e-09 0s 0s 262871150e-09 1s 1s 262874030e-09 1s 1s 262875190e-09 0s 0s 262881390e-09 1s 1s 262884310e-09 1s 1s 262885430e-09 0s 0s 262891630e-09 1s 1s 262894590e-09 1s 1s 262895670e-09 0s 0s 262901870e-09 1s 1s 262904870e-09 1s 1s 262905910e-09 0s 0s 262912110e-09 1s 1s 262915150e-09 1s 1s 262916150e-09 0s 0s 262922350e-09 1s 1s 262925430e-09 1s 1s 262926390e-09 0s 0s 262932590e-09 1s 1s 262935710e-09 1s 1s 262936630e-09 0s 0s 262942830e-09 1s 1s 262945990e-09 1s 1s 262946870e-09 0s 0s 262953070e-09 1s 1s 262956270e-09 1s 1s 262957110e-09 0s 0s 262963310e-09 1s 1s 262966550e-09 1s 1s 262967350e-09 0s 0s 262973550e-09 1s 1s 262976830e-09 1s 1s 262977590e-09 0s 0s 262983790e-09 1s 1s 262987110e-09 1s 1s 262987830e-09 0s 0s 262994030e-09 1s 1s 262997390e-09 1s 1s 262998070e-09 0s 0s 263004270e-09 1s 1s 263007670e-09 1s 1s 263008310e-09 0s 0s 263014510e-09 1s 1s 263017950e-09 1s 1s 263018550e-09 0s 0s 263024750e-09 1s 1s 263028230e-09 1s 1s 263028790e-09 0s 0s 263034990e-09 1s 1s 263038510e-09 1s 1s 263039030e-09 0s 0s 263045230e-09 1s 1s 263048790e-09 1s 1s 263049270e-09 0s 0s 263055470e-09 1s 1s 263059070e-09 1s 1s 263059510e-09 0s 0s 263065710e-09 1s 1s 263069350e-09 1s 1s 263069750e-09 0s 0s 263075950e-09 1s 1s 263079630e-09 1s 1s 263079990e-09 0s 0s 263086190e-09 1s 1s 263089910e-09 1s 1s 263090230e-09 0s 0s 263096430e-09 1s 1s 263100190e-09 1s 1s 263100470e-09 0s 0s 263106670e-09 1s 1s 263110470e-09 1s 1s 263110710e-09 0s 0s 263116910e-09 1s 1s 263120750e-09 1s 1s 263120950e-09 0s 0s 263127150e-09 1s 1s 263131030e-09 1s 1s 263131190e-09 0s 0s 263137390e-09 1s 1s 263141310e-09 1s 1s 263141430e-09 0s 0s 263147630e-09 1s 1s 263151590e-09 1s 1s 263151670e-09 0s 0s 263157870e-09 1s 1s 263161870e-09 1s 1s 263161910e-09 0s 0s 263168110e-09 1s 1s 263172150e-09 0s 0s 263178350e-09 1s 1s 263182390e-09 0s 0s 263182430e-09 0s 0s 263188590e-09 1s 1s 263192630e-09 0s 0s 263192710e-09 0s 0s 263198830e-09 1s 1s 263202870e-09 0s 0s 263202990e-09 0s 0s 263209070e-09 1s 1s 263213110e-09 0s 0s 263213270e-09 0s 0s 263219310e-09 1s 1s 263223350e-09 0s 0s 263223550e-09 0s 0s 263229550e-09 1s 1s 263233590e-09 0s 0s 263233830e-09 0s 0s 263239790e-09 1s 1s 263243830e-09 0s 0s 263244110e-09 0s 0s 263250030e-09 1s 1s 263254070e-09 0s 0s 263254390e-09 0s 0s 263260270e-09 1s 1s 263264310e-09 0s 0s 263264670e-09 0s 0s 263270510e-09 1s 1s 263274550e-09 0s 0s 263274950e-09 0s 0s 263280750e-09 1s 1s 263284790e-09 0s 0s 263285230e-09 0s 0s 263290990e-09 1s 1s 263295030e-09 0s 0s 263295510e-09 0s 0s 263301230e-09 1s 1s 263305270e-09 0s 0s 263305790e-09 0s 0s 263311470e-09 1s 1s 263315510e-09 0s 0s 263316070e-09 0s 0s 263321710e-09 1s 1s 263325750e-09 0s 0s 263326350e-09 0s 0s 263331950e-09 1s 1s 263335990e-09 0s 0s 263336630e-09 0s 0s 263342190e-09 1s 1s 263346230e-09 0s 0s 263346910e-09 0s 0s 263352430e-09 1s 1s 263356470e-09 0s 0s 263357190e-09 0s 0s 263362670e-09 1s 1s 263366710e-09 0s 0s 263367470e-09 0s 0s 263372910e-09 1s 1s 263376950e-09 0s 0s 263377750e-09 0s 0s 263383150e-09 1s 1s 263387190e-09 0s 0s 263388030e-09 0s 0s 263393390e-09 1s 1s 263397430e-09 0s 0s 263398310e-09 0s 0s 263403630e-09 1s 1s 263407670e-09 0s 0s 263408590e-09 0s 0s 263413870e-09 1s 1s 263417910e-09 0s 0s 263418870e-09 0s 0s 263424110e-09 1s 1s 263428150e-09 0s 0s 263429150e-09 0s 0s 263434350e-09 1s 1s 263438390e-09 0s 0s 263439430e-09 0s 0s 263444590e-09 1s 1s 263448630e-09 0s 0s 263449710e-09 0s 0s 263454830e-09 1s 1s 263458870e-09 0s 0s 263459990e-09 0s 0s 263465070e-09 1s 1s 263469110e-09 0s 0s 263470270e-09 0s 0s 263475310e-09 1s 1s 263479350e-09 0s 0s 263480550e-09 0s 0s 263485550e-09 1s 1s 263489590e-09 0s 0s 263490830e-09 0s 0s 263495790e-09 1s 1s 263499830e-09 0s 0s 263501110e-09 0s 0s 263506030e-09 1s 1s 263510070e-09 0s 0s 263511390e-09 0s 0s 263516270e-09 1s 1s 263520310e-09 0s 0s 263521670e-09 0s 0s 263526510e-09 1s 1s 263530550e-09 0s 0s 263531950e-09 0s 0s 263536750e-09 1s 1s 263540790e-09 0s 0s 263542230e-09 0s 0s 263546990e-09 1s 1s 263551030e-09 0s 0s 263552510e-09 0s 0s 263557230e-09 1s 1s 263561270e-09 0s 0s 263562790e-09 0s 0s 263567470e-09 1s 1s 263571510e-09 0s 0s 263573070e-09 0s 0s 263577710e-09 1s 1s 263581750e-09 0s 0s 263583350e-09 0s 0s 263587950e-09 1s 1s 263591990e-09 0s 0s 263593630e-09 0s 0s 263598190e-09 1s 1s 263602230e-09 0s 0s 263603910e-09 0s 0s 263608430e-09 1s 1s 263612470e-09 0s 0s 263614190e-09 0s 0s 263618670e-09 1s 1s 263622710e-09 0s 0s 263624470e-09 0s 0s 263628910e-09 1s 1s 263632950e-09 0s 0s 263634750e-09 0s 0s 263639150e-09 1s 1s 263643190e-09 0s 0s 263645030e-09 0s 0s 263649390e-09 1s 1s 263653430e-09 0s 0s 263655310e-09 0s 0s 263659630e-09 1s 1s 263663670e-09 0s 0s 263665590e-09 0s 0s 263669870e-09 1s 1s 263673910e-09 0s 0s 263675870e-09 0s 0s 263680110e-09 1s 1s 263684150e-09 0s 0s 263686150e-09 0s 0s 263690350e-09 1s 1s 263694390e-09 0s 0s 263696430e-09 0s 0s 263700590e-09 1s 1s 263704630e-09 0s 0s 263706710e-09 0s 0s 263710830e-09 1s 1s 263714870e-09 0s 0s 263716990e-09 0s 0s 263721070e-09 1s 1s 263725110e-09 0s 0s 263727270e-09 0s 0s 263731310e-09 1s 1s 263735350e-09 0s 0s 263737550e-09 0s 0s 263741550e-09 1s 1s 263745590e-09 0s 0s 263747830e-09 0s 0s 263751790e-09 1s 1s 263755830e-09 0s 0s 263758110e-09 0s 0s 263762030e-09 1s 1s 263766070e-09 0s 0s 263768390e-09 0s 0s 263772270e-09 1s 1s 263776310e-09 0s 0s 263778670e-09 0s 0s 263782510e-09 1s 1s 263786550e-09 0s 0s 263788950e-09 0s 0s 263792750e-09 1s 1s 263796790e-09 0s 0s 263799230e-09 0s 0s 263802990e-09 1s 1s 263807030e-09 0s 0s 263809510e-09 0s 0s 263813230e-09 1s 1s 263817270e-09 0s 0s 263819790e-09 0s 0s 263823470e-09 1s 1s 263827510e-09 0s 0s 263830070e-09 0s 0s 263833710e-09 1s 1s 263837750e-09 0s 0s 263840350e-09 0s 0s 263843950e-09 1s 1s 263847990e-09 0s 0s 263850630e-09 0s 0s 263854190e-09 1s 1s 263858230e-09 0s 0s 263860910e-09 0s 0s 263864430e-09 1s 1s 263868470e-09 0s 0s 263871190e-09 0s 0s 263874670e-09 1s 1s 263878710e-09 0s 0s 263881470e-09 0s 0s 263884910e-09 1s 1s 263888950e-09 0s 0s 263891750e-09 0s 0s 263895150e-09 1s 1s 263899190e-09 0s 0s 263902030e-09 0s 0s 263905390e-09 1s 1s 263909430e-09 0s 0s 263912310e-09 0s 0s 263915630e-09 1s 1s 263919670e-09 0s 0s 263922590e-09 0s 0s 263925870e-09 1s 1s 263929910e-09 0s 0s 263932870e-09 0s 0s 263936110e-09 1s 1s 263940150e-09 0s 0s 263943150e-09 0s 0s 263946350e-09 1s 1s 263950390e-09 0s 0s 263953430e-09 0s 0s 263956590e-09 1s 1s 263960630e-09 0s 0s 263963710e-09 0s 0s 263966830e-09 1s 1s 263970870e-09 0s 0s 263973990e-09 0s 0s 263977070e-09 1s 1s 263981110e-09 0s 0s 263984270e-09 0s 0s 263987310e-09 1s 1s 263991350e-09 0s 0s 263994550e-09 0s 0s 263997550e-09 1s 1s 264001590e-09 0s 0s 264004830e-09 0s 0s 264007790e-09 1s 1s 264011830e-09 0s 0s 264015110e-09 0s 0s 264018030e-09 1s 1s 264022070e-09 0s 0s 264025390e-09 0s 0s 264028270e-09 1s 1s 264032310e-09 0s 0s 264035670e-09 0s 0s 264038510e-09 1s 1s 264042550e-09 0s 0s 264045950e-09 0s 0s 264048750e-09 1s 1s 264052790e-09 0s 0s 264056230e-09 0s 0s 264058990e-09 1s 1s 264063030e-09 0s 0s 264066510e-09 0s 0s 264069230e-09 1s 1s 264073270e-09 0s 0s 264076790e-09 0s 0s 264079470e-09 1s 1s 264083510e-09 0s 0s 264087070e-09 0s 0s 264089710e-09 1s 1s 264093750e-09 0s 0s 264097350e-09 0s 0s 264099950e-09 1s 1s 264103990e-09 0s 0s 264107630e-09 0s 0s 264110190e-09 1s 1s 264114230e-09 0s 0s 264117910e-09 0s 0s 264120430e-09 1s 1s 264124470e-09 0s 0s 264128190e-09 0s 0s 264130670e-09 1s 1s 264134710e-09 0s 0s 264138470e-09 0s 0s 264140910e-09 1s 1s 264144950e-09 0s 0s 264148750e-09 0s 0s 264151150e-09 1s 1s 264155190e-09 0s 0s 264159030e-09 0s 0s 264161390e-09 1s 1s 264165430e-09 0s 0s 264169310e-09 0s 0s 264171630e-09 1s 1s 264175670e-09 0s 0s 264179590e-09 0s 0s 264181870e-09 1s 1s 264185910e-09 0s 0s 264189870e-09 0s 0s 264192110e-09 1s 1s 264196150e-09 0s 0s 264200150e-09 0s 0s 264202350e-09 1s 1s 264206390e-09 0s 0s 264210430e-09 0s 0s 264212590e-09 1s 1s 264216630e-09 0s 0s 264220710e-09 0s 0s 264222830e-09 1s 1s 264226870e-09 0s 0s 264230990e-09 0s 0s 264233070e-09 1s 1s 264237110e-09 0s 0s 264241270e-09 0s 0s 264243310e-09 1s 1s 264247350e-09 0s 0s 264251550e-09 0s 0s 264253550e-09 1s 1s 264257590e-09 0s 0s 264261830e-09 0s 0s 264263790e-09 1s 1s 264267830e-09 0s 0s 264272110e-09 0s 0s 264274030e-09 1s 1s 264278070e-09 0s 0s 264282390e-09 0s 0s 264284270e-09 1s 1s 264288310e-09 0s 0s 264292670e-09 0s 0s 264294510e-09 1s 1s 264298550e-09 0s 0s 264302950e-09 0s 0s 264304750e-09 1s 1s 264308790e-09 0s 0s 264313230e-09 0s 0s 264314990e-09 1s 1s 264319030e-09 0s 0s 264323510e-09 0s 0s 264325230e-09 1s 1s 264329270e-09 0s 0s 264333790e-09 0s 0s 264335470e-09 1s 1s 264339510e-09 0s 0s 264344070e-09 0s 0s 264345710e-09 1s 1s 264349750e-09 0s 0s 264354350e-09 0s 0s 264355950e-09 1s 1s 264359990e-09 0s 0s 264364630e-09 0s 0s 264366190e-09 1s 1s 264370230e-09 0s 0s 264374910e-09 0s 0s 264376430e-09 1s 1s 264380470e-09 0s 0s 264385190e-09 0s 0s 264386670e-09 1s 1s 264390710e-09 0s 0s 264395470e-09 0s 0s 264396910e-09 1s 1s 264400950e-09 0s 0s 264405750e-09 0s 0s 264407150e-09 1s 1s 264411190e-09 0s 0s 264416030e-09 0s 0s 264417390e-09 1s 1s 264421430e-09 0s 0s 264426310e-09 0s 0s 264427630e-09 1s 1s 264431670e-09 0s 0s 264436590e-09 0s 0s 264437870e-09 1s 1s 264441910e-09 0s 0s 264446870e-09 0s 0s 264448110e-09 1s 1s 264452150e-09 0s 0s 264457150e-09 0s 0s 264458350e-09 1s 1s 264462390e-09 0s 0s 264467430e-09 0s 0s 264468590e-09 1s 1s 264472630e-09 0s 0s 264477710e-09 0s 0s 264478830e-09 1s 1s 264482870e-09 0s 0s 264487990e-09 0s 0s 264489070e-09 1s 1s 264493110e-09 0s 0s 264498270e-09 0s 0s 264499310e-09 1s 1s 264503350e-09 0s 0s 264508550e-09 0s 0s 264509550e-09 1s 1s 264513590e-09 0s 0s 264518830e-09 0s 0s 264519790e-09 1s 1s 264523830e-09 0s 0s 264529110e-09 0s 0s 264530030e-09 1s 1s 264534070e-09 0s 0s 264539390e-09 0s 0s 264540270e-09 1s 1s 264544310e-09 0s 0s 264549670e-09 0s 0s 264550510e-09 1s 1s 264554550e-09 0s 0s 264559950e-09 0s 0s 264560750e-09 1s 1s 264564790e-09 0s 0s 264570230e-09 0s 0s 264570990e-09 1s 1s 264575030e-09 0s 0s 264580510e-09 0s 0s 264581230e-09 1s 1s 264585270e-09 0s 0s 264590790e-09 0s 0s 264591470e-09 1s 1s 264595510e-09 0s 0s 264601070e-09 0s 0s 264601710e-09 1s 1s 264605750e-09 0s 0s 264611350e-09 0s 0s 264611950e-09 1s 1s 264615990e-09 0s 0s 264621630e-09 0s 0s 264622190e-09 1s 1s 264626230e-09 0s 0s 264631910e-09 0s 0s 264632430e-09 1s 1s 264636470e-09 0s 0s 264642190e-09 0s 0s 264642670e-09 1s 1s 264646710e-09 0s 0s 264652470e-09 0s 0s 264652910e-09 1s 1s 264656950e-09 0s 0s 264662750e-09 0s 0s 264663150e-09 1s 1s 264667190e-09 0s 0s 264673030e-09 0s 0s 264673390e-09 1s 1s 264677430e-09 0s 0s 264683310e-09 0s 0s 264683630e-09 1s 1s 264687670e-09 0s 0s 264693590e-09 0s 0s 264693870e-09 1s 1s 264697910e-09 0s 0s 264703870e-09 0s 0s 264704110e-09 1s 1s 264708150e-09 0s 0s 264714150e-09 0s 0s 264714350e-09 1s 1s 264718390e-09 0s 0s 264724430e-09 0s 0s 264724590e-09 1s 1s 264728630e-09 0s 0s 264734710e-09 0s 0s 264734830e-09 1s 1s 264738870e-09 0s 0s 264744990e-09 0s 0s 264745070e-09 1s 1s 264749110e-09 0s 0s 264755270e-09 0s 0s 264755310e-09 1s 1s 264759350e-09 0s 0s 264765550e-09 1s 1s 264765590e-09 1s 1s 264769630e-09 0s 0s 264775790e-09 1s 1s 264775870e-09 1s 1s 264779870e-09 0s 0s 264786030e-09 1s 1s 264786150e-09 1s 1s 264790110e-09 0s 0s 264796270e-09 1s 1s 264796430e-09 1s 1s 264800350e-09 0s 0s 264806510e-09 1s 1s 264806710e-09 1s 1s 264810590e-09 0s 0s 264816750e-09 1s 1s 264816990e-09 1s 1s 264820830e-09 0s 0s 264826990e-09 1s 1s 264827270e-09 1s 1s 264831070e-09 0s 0s 264837230e-09 1s 1s 264837550e-09 1s 1s 264841310e-09 0s 0s 264847470e-09 1s 1s 264847830e-09 1s 1s 264851550e-09 0s 0s 264857710e-09 1s 1s 264858110e-09 1s 1s 264861790e-09 0s 0s 264867950e-09 1s 1s 264868390e-09 1s 1s 264872030e-09 0s 0s 264878190e-09 1s 1s 264878670e-09 1s 1s 264882270e-09 0s 0s 264888430e-09 1s 1s 264888950e-09 1s 1s 264892510e-09 0s 0s 264898670e-09 1s 1s 264899230e-09 1s 1s 264902750e-09 0s 0s 264908910e-09 1s 1s 264909510e-09 1s 1s 264912990e-09 0s 0s 264919150e-09 1s 1s 264919790e-09 1s 1s 264923230e-09 0s 0s 264929390e-09 1s 1s 264930070e-09 1s 1s 264933470e-09 0s 0s 264939630e-09 1s 1s 264940350e-09 1s 1s 264943710e-09 0s 0s 264949870e-09 1s 1s 264950630e-09 1s 1s 264953950e-09 0s 0s 264960110e-09 1s 1s 264960910e-09 1s 1s 264964190e-09 0s 0s 264970350e-09 1s 1s 264971190e-09 1s 1s 264974430e-09 0s 0s 264980590e-09 1s 1s 264981470e-09 1s 1s 264984670e-09 0s 0s 264990830e-09 1s 1s 264991750e-09 1s 1s 264994910e-09 0s 0s 265001070e-09 1s 1s 265002030e-09 1s 1s 265005150e-09 0s 0s 265011310e-09 1s 1s 265012310e-09 1s 1s 265015390e-09 0s 0s 265021550e-09 1s 1s 265022590e-09 1s 1s 265025630e-09 0s 0s 265031790e-09 1s 1s 265032870e-09 1s 1s 265035870e-09 0s 0s 265042030e-09 1s 1s 265043150e-09 1s 1s 265046110e-09 0s 0s 265052270e-09 1s 1s 265053430e-09 1s 1s 265056350e-09 0s 0s 265062510e-09 1s 1s 265063710e-09 1s 1s 265066590e-09 0s 0s 265072750e-09 1s 1s 265073990e-09 1s 1s 265076830e-09 0s 0s 265082990e-09 1s 1s 265084270e-09 1s 1s 265087070e-09 0s 0s 265093230e-09 1s 1s 265094550e-09 1s 1s 265097310e-09 0s 0s 265103470e-09 1s 1s 265104830e-09 1s 1s 265107550e-09 0s 0s 265113710e-09 1s 1s 265115110e-09 1s 1s 265117790e-09 0s 0s 265123950e-09 1s 1s 265125390e-09 1s 1s 265128030e-09 0s 0s 265134190e-09 1s 1s 265135670e-09 1s 1s 265138270e-09 0s 0s 265144430e-09 1s 1s 265145950e-09 1s 1s 265148510e-09 0s 0s 265154670e-09 1s 1s 265156230e-09 1s 1s 265158750e-09 0s 0s 265164910e-09 1s 1s 265166510e-09 1s 1s 265168990e-09 0s 0s 265175150e-09 1s 1s 265176790e-09 1s 1s 265179230e-09 0s 0s 265185390e-09 1s 1s 265187070e-09 1s 1s 265189470e-09 0s 0s 265195630e-09 1s 1s 265197350e-09 1s 1s 265199710e-09 0s 0s 265205870e-09 1s 1s 265207630e-09 1s 1s 265209950e-09 0s 0s 265216110e-09 1s 1s 265217910e-09 1s 1s 265220190e-09 0s 0s 265226350e-09 1s 1s 265228190e-09 1s 1s 265230430e-09 0s 0s 265236590e-09 1s 1s 265238470e-09 1s 1s 265240670e-09 0s 0s 265246830e-09 1s 1s 265248750e-09 1s 1s 265250910e-09 0s 0s 265257070e-09 1s 1s 265259030e-09 1s 1s 265261150e-09 0s 0s 265267310e-09 1s 1s 265269310e-09 1s 1s 265271390e-09 0s 0s 265277550e-09 1s 1s 265279590e-09 1s 1s 265281630e-09 0s 0s 265287790e-09 1s 1s 265289870e-09 1s 1s 265291870e-09 0s 0s 265298030e-09 1s 1s 265300150e-09 1s 1s 265302110e-09 0s 0s 265308270e-09 1s 1s 265310430e-09 1s 1s 265312350e-09 0s 0s 265318510e-09 1s 1s 265320710e-09 1s 1s 265322590e-09 0s 0s 265328750e-09 1s 1s 265330990e-09 1s 1s 265332830e-09 0s 0s 265338990e-09 1s 1s 265341270e-09 1s 1s 265343070e-09 0s 0s 265349230e-09 1s 1s 265351550e-09 1s 1s 265353310e-09 0s 0s 265359470e-09 1s 1s 265361830e-09 1s 1s 265363550e-09 0s 0s 265369710e-09 1s 1s 265372110e-09 1s 1s 265373790e-09 0s 0s 265379950e-09 1s 1s 265382390e-09 1s 1s 265384030e-09 0s 0s 265390190e-09 1s 1s 265392670e-09 1s 1s 265394270e-09 0s 0s 265400430e-09 1s 1s 265402950e-09 1s 1s 265404510e-09 0s 0s 265410670e-09 1s 1s 265413230e-09 1s 1s 265414750e-09 0s 0s 265420910e-09 1s 1s 265423510e-09 1s 1s 265424990e-09 0s 0s 265431150e-09 1s 1s 265433790e-09 1s 1s 265435230e-09 0s 0s 265441390e-09 1s 1s 265444070e-09 1s 1s 265445470e-09 0s 0s 265451630e-09 1s 1s 265454350e-09 1s 1s 265455710e-09 0s 0s 265461870e-09 1s 1s 265464630e-09 1s 1s 265465950e-09 0s 0s 265472110e-09 1s 1s 265474910e-09 1s 1s 265476190e-09 0s 0s 265482350e-09 1s 1s 265485190e-09 1s 1s 265486430e-09 0s 0s 265492590e-09 1s 1s 265495470e-09 1s 1s 265496670e-09 0s 0s 265502830e-09 1s 1s 265505750e-09 1s 1s 265506910e-09 0s 0s 265513070e-09 1s 1s 265516030e-09 1s 1s 265517150e-09 0s 0s 265523310e-09 1s 1s 265526310e-09 1s 1s 265527390e-09 0s 0s 265533550e-09 1s 1s 265536590e-09 1s 1s 265537630e-09 0s 0s 265543790e-09 1s 1s 265546870e-09 1s 1s 265547870e-09 0s 0s 265554030e-09 1s 1s 265557150e-09 1s 1s 265558110e-09 0s 0s 265564270e-09 1s 1s 265567430e-09 1s 1s 265568350e-09 0s 0s 265574510e-09 1s 1s 265577710e-09 1s 1s 265578590e-09 0s 0s 265584750e-09 1s 1s 265587990e-09 1s 1s 265588830e-09 0s 0s 265594990e-09 1s 1s 265598270e-09 1s 1s 265599070e-09 0s 0s 265605230e-09 1s 1s 265608550e-09 1s 1s 265609310e-09 0s 0s 265615470e-09 1s 1s 265618830e-09 1s 1s 265619550e-09 0s 0s 265625710e-09 1s 1s 265629110e-09 1s 1s 265629790e-09 0s 0s 265635950e-09 1s 1s 265639390e-09 1s 1s 265640030e-09 0s 0s 265646190e-09 1s 1s 265649670e-09 1s 1s 265650270e-09 0s 0s 265656430e-09 1s 1s 265659950e-09 1s 1s 265660510e-09 0s 0s 265666670e-09 1s 1s 265670230e-09 1s 1s 265670750e-09 0s 0s 265676910e-09 1s 1s 265680510e-09 1s 1s 265680990e-09 0s 0s 265687150e-09 1s 1s 265690790e-09 1s 1s 265691230e-09 0s 0s 265697390e-09 1s 1s 265701070e-09 1s 1s 265701470e-09 0s 0s 265707630e-09 1s 1s 265711350e-09 1s 1s 265711710e-09 0s 0s 265717870e-09 1s 1s 265721630e-09 1s 1s 265721950e-09 0s 0s 265728110e-09 1s 1s 265731910e-09 1s 1s 265732190e-09 0s 0s 265738350e-09 1s 1s 265742190e-09 1s 1s 265742430e-09 0s 0s 265748590e-09 1s 1s 265752470e-09 1s 1s 265752670e-09 0s 0s 265758830e-09 1s 1s 265762750e-09 1s 1s 265762910e-09 0s 0s 265769070e-09 1s 1s 265773030e-09 1s 1s 265773150e-09 0s 0s 265779310e-09 1s 1s 265783310e-09 1s 1s 265783390e-09 0s 0s 265789550e-09 1s 1s 265793590e-09 1s 1s 265793630e-09 0s 0s 265799790e-09 1s 1s 265803870e-09 0s 0s 265810030e-09 1s 1s 265814110e-09 0s 0s 265814150e-09 0s 0s 265820270e-09 1s 1s 265824350e-09 0s 0s 265824430e-09 0s 0s 265830510e-09 1s 1s 265834590e-09 0s 0s 265834710e-09 0s 0s 265840750e-09 1s 1s 265844830e-09 0s 0s 265844990e-09 0s 0s 265850990e-09 1s 1s 265855070e-09 0s 0s 265855270e-09 0s 0s 265861230e-09 1s 1s 265865310e-09 0s 0s 265865550e-09 0s 0s 265871470e-09 1s 1s 265875550e-09 0s 0s 265875830e-09 0s 0s 265881710e-09 1s 1s 265885790e-09 0s 0s 265886110e-09 0s 0s 265891950e-09 1s 1s 265896030e-09 0s 0s 265896390e-09 0s 0s 265902190e-09 1s 1s 265906270e-09 0s 0s 265906670e-09 0s 0s 265912430e-09 1s 1s 265916510e-09 0s 0s 265916950e-09 0s 0s 265922670e-09 1s 1s 265926750e-09 0s 0s 265927230e-09 0s 0s 265932910e-09 1s 1s 265936990e-09 0s 0s 265937510e-09 0s 0s 265943150e-09 1s 1s 265947230e-09 0s 0s 265947790e-09 0s 0s 265953390e-09 1s 1s 265957470e-09 0s 0s 265958070e-09 0s 0s 265963630e-09 1s 1s 265967710e-09 0s 0s 265968350e-09 0s 0s 265973870e-09 1s 1s 265977950e-09 0s 0s 265978630e-09 0s 0s 265984110e-09 1s 1s 265988190e-09 0s 0s 265988910e-09 0s 0s 265994350e-09 1s 1s 265998430e-09 0s 0s 265999190e-09 0s 0s 266004590e-09 1s 1s 266008670e-09 0s 0s 266009470e-09 0s 0s 266014830e-09 1s 1s 266018910e-09 0s 0s 266019750e-09 0s 0s 266025070e-09 1s 1s 266029150e-09 0s 0s 266030030e-09 0s 0s 266035310e-09 1s 1s 266039390e-09 0s 0s 266040310e-09 0s 0s 266045550e-09 1s 1s 266049630e-09 0s 0s 266050590e-09 0s 0s 266055790e-09 1s 1s 266059870e-09 0s 0s 266060870e-09 0s 0s 266066030e-09 1s 1s 266070110e-09 0s 0s 266071150e-09 0s 0s 266076270e-09 1s 1s 266080350e-09 0s 0s 266081430e-09 0s 0s 266086510e-09 1s 1s 266090590e-09 0s 0s 266091710e-09 0s 0s 266096750e-09 1s 1s 266100830e-09 0s 0s 266101990e-09 0s 0s 266106990e-09 1s 1s 266111070e-09 0s 0s 266112270e-09 0s 0s 266117230e-09 1s 1s 266121310e-09 0s 0s 266122550e-09 0s 0s 266127470e-09 1s 1s 266131550e-09 0s 0s 266132830e-09 0s 0s 266137710e-09 1s 1s 266141790e-09 0s 0s 266143110e-09 0s 0s 266147950e-09 1s 1s 266152030e-09 0s 0s 266153390e-09 0s 0s 266158190e-09 1s 1s 266162270e-09 0s 0s 266163670e-09 0s 0s 266168430e-09 1s 1s 266172510e-09 0s 0s 266173950e-09 0s 0s 266178670e-09 1s 1s 266182750e-09 0s 0s 266184230e-09 0s 0s 266188910e-09 1s 1s 266192990e-09 0s 0s 266194510e-09 0s 0s 266199150e-09 1s 1s 266203230e-09 0s 0s 266204790e-09 0s 0s 266209390e-09 1s 1s 266213470e-09 0s 0s 266215070e-09 0s 0s 266219630e-09 1s 1s 266223710e-09 0s 0s 266225350e-09 0s 0s 266229870e-09 1s 1s 266233950e-09 0s 0s 266235630e-09 0s 0s 266240110e-09 1s 1s 266244190e-09 0s 0s 266245910e-09 0s 0s 266250350e-09 1s 1s 266254430e-09 0s 0s 266256190e-09 0s 0s 266260590e-09 1s 1s 266264670e-09 0s 0s 266266470e-09 0s 0s 266270830e-09 1s 1s 266274910e-09 0s 0s 266276750e-09 0s 0s 266281070e-09 1s 1s 266285150e-09 0s 0s 266287030e-09 0s 0s 266291310e-09 1s 1s 266295390e-09 0s 0s 266297310e-09 0s 0s 266301550e-09 1s 1s 266305630e-09 0s 0s 266307590e-09 0s 0s 266311790e-09 1s 1s 266315870e-09 0s 0s 266317870e-09 0s 0s 266322030e-09 1s 1s 266326110e-09 0s 0s 266328150e-09 0s 0s 266332270e-09 1s 1s 266336350e-09 0s 0s 266338430e-09 0s 0s 266342510e-09 1s 1s 266346590e-09 0s 0s 266348710e-09 0s 0s 266352750e-09 1s 1s 266356830e-09 0s 0s 266358990e-09 0s 0s 266362990e-09 1s 1s 266367070e-09 0s 0s 266369270e-09 0s 0s 266373230e-09 1s 1s 266377310e-09 0s 0s 266379550e-09 0s 0s 266383470e-09 1s 1s 266387550e-09 0s 0s 266389830e-09 0s 0s 266393710e-09 1s 1s 266397790e-09 0s 0s 266400110e-09 0s 0s 266403950e-09 1s 1s 266408030e-09 0s 0s 266410390e-09 0s 0s 266414190e-09 1s 1s 266418270e-09 0s 0s 266420670e-09 0s 0s 266424430e-09 1s 1s 266428510e-09 0s 0s 266430950e-09 0s 0s 266434670e-09 1s 1s 266438750e-09 0s 0s 266441230e-09 0s 0s 266444910e-09 1s 1s 266448990e-09 0s 0s 266451510e-09 0s 0s 266455150e-09 1s 1s 266459230e-09 0s 0s 266461790e-09 0s 0s 266465390e-09 1s 1s 266469470e-09 0s 0s 266472070e-09 0s 0s 266475630e-09 1s 1s 266479710e-09 0s 0s 266482350e-09 0s 0s 266485870e-09 1s 1s 266489950e-09 0s 0s 266492630e-09 0s 0s 266496110e-09 1s 1s 266500190e-09 0s 0s 266502910e-09 0s 0s 266506350e-09 1s 1s 266510430e-09 0s 0s 266513190e-09 0s 0s 266516590e-09 1s 1s 266520670e-09 0s 0s 266523470e-09 0s 0s 266526830e-09 1s 1s 266530910e-09 0s 0s 266533750e-09 0s 0s 266537070e-09 1s 1s 266541150e-09 0s 0s 266544030e-09 0s 0s 266547310e-09 1s 1s 266551390e-09 0s 0s 266554310e-09 0s 0s 266557550e-09 1s 1s 266561630e-09 0s 0s 266564590e-09 0s 0s 266567790e-09 1s 1s 266571870e-09 0s 0s 266574870e-09 0s 0s 266578030e-09 1s 1s 266582110e-09 0s 0s 266585150e-09 0s 0s 266588270e-09 1s 1s 266592350e-09 0s 0s 266595430e-09 0s 0s 266598510e-09 1s 1s 266602590e-09 0s 0s 266605710e-09 0s 0s 266608750e-09 1s 1s 266612830e-09 0s 0s 266615990e-09 0s 0s 266618990e-09 1s 1s 266623070e-09 0s 0s 266626270e-09 0s 0s 266629230e-09 1s 1s 266633310e-09 0s 0s 266636550e-09 0s 0s 266639470e-09 1s 1s 266643550e-09 0s 0s 266646830e-09 0s 0s 266649710e-09 1s 1s 266653790e-09 0s 0s 266657110e-09 0s 0s 266659950e-09 1s 1s 266664030e-09 0s 0s 266667390e-09 0s 0s 266670190e-09 1s 1s 266674270e-09 0s 0s 266677670e-09 0s 0s 266680430e-09 1s 1s 266684510e-09 0s 0s 266687950e-09 0s 0s 266690670e-09 1s 1s 266694750e-09 0s 0s 266698230e-09 0s 0s 266700910e-09 1s 1s 266704990e-09 0s 0s 266708510e-09 0s 0s 266711150e-09 1s 1s 266715230e-09 0s 0s 266718790e-09 0s 0s 266721390e-09 1s 1s 266725470e-09 0s 0s 266729070e-09 0s 0s 266731630e-09 1s 1s 266735710e-09 0s 0s 266739350e-09 0s 0s 266741870e-09 1s 1s 266745950e-09 0s 0s 266749630e-09 0s 0s 266752110e-09 1s 1s 266756190e-09 0s 0s 266759910e-09 0s 0s 266762350e-09 1s 1s 266766430e-09 0s 0s 266770190e-09 0s 0s 266772590e-09 1s 1s 266776670e-09 0s 0s 266780470e-09 0s 0s 266782830e-09 1s 1s 266786910e-09 0s 0s 266790750e-09 0s 0s 266793070e-09 1s 1s 266797150e-09 0s 0s 266801030e-09 0s 0s 266803310e-09 1s 1s 266807390e-09 0s 0s 266811310e-09 0s 0s 266813550e-09 1s 1s 266817630e-09 0s 0s 266821590e-09 0s 0s 266823790e-09 1s 1s 266827870e-09 0s 0s 266831870e-09 0s 0s 266834030e-09 1s 1s 266838110e-09 0s 0s 266842150e-09 0s 0s 266844270e-09 1s 1s 266848350e-09 0s 0s 266852430e-09 0s 0s 266854510e-09 1s 1s 266858590e-09 0s 0s 266862710e-09 0s 0s 266864750e-09 1s 1s 266868830e-09 0s 0s 266872990e-09 0s 0s 266874990e-09 1s 1s 266879070e-09 0s 0s 266883270e-09 0s 0s 266885230e-09 1s 1s 266889310e-09 0s 0s 266893550e-09 0s 0s 266895470e-09 1s 1s 266899550e-09 0s 0s 266903830e-09 0s 0s 266905710e-09 1s 1s 266909790e-09 0s 0s 266914110e-09 0s 0s 266915950e-09 1s 1s 266920030e-09 0s 0s 266924390e-09 0s 0s 266926190e-09 1s 1s 266930270e-09 0s 0s 266934670e-09 0s 0s 266936430e-09 1s 1s 266940510e-09 0s 0s 266944950e-09 0s 0s 266946670e-09 1s 1s 266950750e-09 0s 0s 266955230e-09 0s 0s 266956910e-09 1s 1s 266960990e-09 0s 0s 266965510e-09 0s 0s 266967150e-09 1s 1s 266971230e-09 0s 0s 266975790e-09 0s 0s 266977390e-09 1s 1s 266981470e-09 0s 0s 266986070e-09 0s 0s 266987630e-09 1s 1s 266991710e-09 0s 0s 266996350e-09 0s 0s 266997870e-09 1s 1s 267001950e-09 0s 0s 267006630e-09 0s 0s 267008110e-09 1s 1s 267012190e-09 0s 0s 267016910e-09 0s 0s 267018350e-09 1s 1s 267022430e-09 0s 0s 267027190e-09 0s 0s 267028590e-09 1s 1s 267032670e-09 0s 0s 267037470e-09 0s 0s 267038830e-09 1s 1s 267042910e-09 0s 0s 267047750e-09 0s 0s 267049070e-09 1s 1s 267053150e-09 0s 0s 267058030e-09 0s 0s 267059310e-09 1s 1s 267063390e-09 0s 0s 267068310e-09 0s 0s 267069550e-09 1s 1s 267073630e-09 0s 0s 267078590e-09 0s 0s 267079790e-09 1s 1s 267083870e-09 0s 0s 267088870e-09 0s 0s 267090030e-09 1s 1s 267094110e-09 0s 0s 267099150e-09 0s 0s 267100270e-09 1s 1s 267104350e-09 0s 0s 267109430e-09 0s 0s 267110510e-09 1s 1s 267114590e-09 0s 0s 267119710e-09 0s 0s 267120750e-09 1s 1s 267124830e-09 0s 0s 267129990e-09 0s 0s 267130990e-09 1s 1s 267135070e-09 0s 0s 267140270e-09 0s 0s 267141230e-09 1s 1s 267145310e-09 0s 0s 267150550e-09 0s 0s 267151470e-09 1s 1s 267155550e-09 0s 0s 267160830e-09 0s 0s 267161710e-09 1s 1s 267165790e-09 0s 0s 267171110e-09 0s 0s 267171950e-09 1s 1s 267176030e-09 0s 0s 267181390e-09 0s 0s 267182190e-09 1s 1s 267186270e-09 0s 0s 267191670e-09 0s 0s 267192430e-09 1s 1s 267196510e-09 0s 0s 267201950e-09 0s 0s 267202670e-09 1s 1s 267206750e-09 0s 0s 267212230e-09 0s 0s 267212910e-09 1s 1s 267216990e-09 0s 0s 267222510e-09 0s 0s 267223150e-09 1s 1s 267227230e-09 0s 0s 267232790e-09 0s 0s 267233390e-09 1s 1s 267237470e-09 0s 0s 267243070e-09 0s 0s 267243630e-09 1s 1s 267247710e-09 0s 0s 267253350e-09 0s 0s 267253870e-09 1s 1s 267257950e-09 0s 0s 267263630e-09 0s 0s 267264110e-09 1s 1s 267268190e-09 0s 0s 267273910e-09 0s 0s 267274350e-09 1s 1s 267278430e-09 0s 0s 267284190e-09 0s 0s 267284590e-09 1s 1s 267288670e-09 0s 0s 267294470e-09 0s 0s 267294830e-09 1s 1s 267298910e-09 0s 0s 267304750e-09 0s 0s 267305070e-09 1s 1s 267309150e-09 0s 0s 267315030e-09 0s 0s 267315310e-09 1s 1s 267319390e-09 0s 0s 267325310e-09 0s 0s 267325550e-09 1s 1s 267329630e-09 0s 0s 267335590e-09 0s 0s 267335790e-09 1s 1s 267339870e-09 0s 0s 267345870e-09 0s 0s 267346030e-09 1s 1s 267350110e-09 0s 0s 267356150e-09 0s 0s 267356270e-09 1s 1s 267360350e-09 0s 0s 267366430e-09 0s 0s 267366510e-09 1s 1s 267370590e-09 0s 0s 267376710e-09 0s 0s 267376750e-09 1s 1s 267380830e-09 0s 0s 267386990e-09 1s 1s 267387030e-09 1s 1s 267391110e-09 0s 0s 267397230e-09 1s 1s 267397310e-09 1s 1s 267401350e-09 0s 0s 267407470e-09 1s 1s 267407590e-09 1s 1s 267411590e-09 0s 0s 267417710e-09 1s 1s 267417870e-09 1s 1s 267421830e-09 0s 0s 267427950e-09 1s 1s 267428150e-09 1s 1s 267432070e-09 0s 0s 267438190e-09 1s 1s 267438430e-09 1s 1s 267442310e-09 0s 0s 267448430e-09 1s 1s 267448710e-09 1s 1s 267452550e-09 0s 0s 267458670e-09 1s 1s 267458990e-09 1s 1s 267462790e-09 0s 0s 267468910e-09 1s 1s 267469270e-09 1s 1s 267473030e-09 0s 0s 267479150e-09 1s 1s 267479550e-09 1s 1s 267483270e-09 0s 0s 267489390e-09 1s 1s 267489830e-09 1s 1s 267493510e-09 0s 0s 267499630e-09 1s 1s 267500110e-09 1s 1s 267503750e-09 0s 0s 267509870e-09 1s 1s 267510390e-09 1s 1s 267513990e-09 0s 0s 267520110e-09 1s 1s 267520670e-09 1s 1s 267524230e-09 0s 0s 267530350e-09 1s 1s 267530950e-09 1s 1s 267534470e-09 0s 0s 267540590e-09 1s 1s 267541230e-09 1s 1s 267544710e-09 0s 0s 267550830e-09 1s 1s 267551510e-09 1s 1s 267554950e-09 0s 0s 267561070e-09 1s 1s 267561790e-09 1s 1s 267565190e-09 0s 0s 267571310e-09 1s 1s 267572070e-09 1s 1s 267575430e-09 0s 0s 267581550e-09 1s 1s 267582350e-09 1s 1s 267585670e-09 0s 0s 267591790e-09 1s 1s 267592630e-09 1s 1s 267595910e-09 0s 0s 267602030e-09 1s 1s 267602910e-09 1s 1s 267606150e-09 0s 0s 267612270e-09 1s 1s 267613190e-09 1s 1s 267616390e-09 0s 0s 267622510e-09 1s 1s 267623470e-09 1s 1s 267626630e-09 0s 0s 267632750e-09 1s 1s 267633750e-09 1s 1s 267636870e-09 0s 0s 267642990e-09 1s 1s 267644030e-09 1s 1s 267647110e-09 0s 0s 267653230e-09 1s 1s 267654310e-09 1s 1s 267657350e-09 0s 0s 267663470e-09 1s 1s 267664590e-09 1s 1s 267667590e-09 0s 0s 267673710e-09 1s 1s 267674870e-09 1s 1s 267677830e-09 0s 0s 267683950e-09 1s 1s 267685150e-09 1s 1s 267688070e-09 0s 0s 267694190e-09 1s 1s 267695430e-09 1s 1s 267698310e-09 0s 0s 267704430e-09 1s 1s 267705710e-09 1s 1s 267708550e-09 0s 0s 267714670e-09 1s 1s 267715990e-09 1s 1s 267718790e-09 0s 0s 267724910e-09 1s 1s 267726270e-09 1s 1s 267729030e-09 0s 0s 267735150e-09 1s 1s 267736550e-09 1s 1s 267739270e-09 0s 0s 267745390e-09 1s 1s 267746830e-09 1s 1s 267749510e-09 0s 0s 267755630e-09 1s 1s 267757110e-09 1s 1s 267759750e-09 0s 0s 267765870e-09 1s 1s 267767390e-09 1s 1s 267769990e-09 0s 0s 267776110e-09 1s 1s 267777670e-09 1s 1s 267780230e-09 0s 0s 267786350e-09 1s 1s 267787950e-09 1s 1s 267790470e-09 0s 0s 267796590e-09 1s 1s 267798230e-09 1s 1s 267800710e-09 0s 0s 267806830e-09 1s 1s 267808510e-09 1s 1s 267810950e-09 0s 0s 267817070e-09 1s 1s 267818790e-09 1s 1s 267821190e-09 0s 0s 267827310e-09 1s 1s 267829070e-09 1s 1s 267831430e-09 0s 0s 267837550e-09 1s 1s 267839350e-09 1s 1s 267841670e-09 0s 0s 267847790e-09 1s 1s 267849630e-09 1s 1s 267851910e-09 0s 0s 267858030e-09 1s 1s 267859910e-09 1s 1s 267862150e-09 0s 0s 267868270e-09 1s 1s 267870190e-09 1s 1s 267872390e-09 0s 0s 267878510e-09 1s 1s 267880470e-09 1s 1s 267882630e-09 0s 0s 267888750e-09 1s 1s 267890750e-09 1s 1s 267892870e-09 0s 0s 267898990e-09 1s 1s 267901030e-09 1s 1s 267903110e-09 0s 0s 267909230e-09 1s 1s 267911310e-09 1s 1s 267913350e-09 0s 0s 267919470e-09 1s 1s 267921590e-09 1s 1s 267923590e-09 0s 0s 267929710e-09 1s 1s 267931870e-09 1s 1s 267933830e-09 0s 0s 267939950e-09 1s 1s 267942150e-09 1s 1s 267944070e-09 0s 0s 267950190e-09 1s 1s 267952430e-09 1s 1s 267954310e-09 0s 0s 267960430e-09 1s 1s 267962710e-09 1s 1s 267964550e-09 0s 0s 267970670e-09 1s 1s 267972990e-09 1s 1s 267974790e-09 0s 0s 267980910e-09 1s 1s 267983270e-09 1s 1s 267985030e-09 0s 0s 267991150e-09 1s 1s 267993550e-09 1s 1s 267995270e-09 0s 0s 268001390e-09 1s 1s 268003830e-09 1s 1s 268005510e-09 0s 0s 268011630e-09 1s 1s 268014110e-09 1s 1s 268015750e-09 0s 0s 268021870e-09 1s 1s 268024390e-09 1s 1s 268025990e-09 0s 0s 268032110e-09 1s 1s 268034670e-09 1s 1s 268036230e-09 0s 0s 268042350e-09 1s 1s 268044950e-09 1s 1s 268046470e-09 0s 0s 268052590e-09 1s 1s 268055230e-09 1s 1s 268056710e-09 0s 0s 268062830e-09 1s 1s 268065510e-09 1s 1s 268066950e-09 0s 0s 268073070e-09 1s 1s 268075790e-09 1s 1s 268077190e-09 0s 0s 268083310e-09 1s 1s 268086070e-09 1s 1s 268087430e-09 0s 0s 268093550e-09 1s 1s 268096350e-09 1s 1s 268097670e-09 0s 0s 268103790e-09 1s 1s 268106630e-09 1s 1s 268107910e-09 0s 0s 268114030e-09 1s 1s 268116910e-09 1s 1s 268118150e-09 0s 0s 268124270e-09 1s 1s 268127190e-09 1s 1s 268128390e-09 0s 0s 268134510e-09 1s 1s 268137470e-09 1s 1s 268138630e-09 0s 0s 268144750e-09 1s 1s 268147750e-09 1s 1s 268148870e-09 0s 0s 268154990e-09 1s 1s 268158030e-09 1s 1s 268159110e-09 0s 0s 268165230e-09 1s 1s 268168310e-09 1s 1s 268169350e-09 0s 0s 268175470e-09 1s 1s 268178590e-09 1s 1s 268179590e-09 0s 0s 268185710e-09 1s 1s 268188870e-09 1s 1s 268189830e-09 0s 0s 268195950e-09 1s 1s 268199150e-09 1s 1s 268200070e-09 0s 0s 268206190e-09 1s 1s 268209430e-09 1s 1s 268210310e-09 0s 0s 268216430e-09 1s 1s 268219710e-09 1s 1s 268220550e-09 0s 0s 268226670e-09 1s 1s 268229990e-09 1s 1s 268230790e-09 0s 0s 268236910e-09 1s 1s 268240270e-09 1s 1s 268241030e-09 0s 0s 268247150e-09 1s 1s 268250550e-09 1s 1s 268251270e-09 0s 0s 268257390e-09 1s 1s 268260830e-09 1s 1s 268261510e-09 0s 0s 268267630e-09 1s 1s 268271110e-09 1s 1s 268271750e-09 0s 0s 268277870e-09 1s 1s 268281390e-09 1s 1s 268281990e-09 0s 0s 268288110e-09 1s 1s 268291670e-09 1s 1s 268292230e-09 0s 0s 268298350e-09 1s 1s 268301950e-09 1s 1s 268302470e-09 0s 0s 268308590e-09 1s 1s 268312230e-09 1s 1s 268312710e-09 0s 0s 268318830e-09 1s 1s 268322510e-09 1s 1s 268322950e-09 0s 0s 268329070e-09 1s 1s 268332790e-09 1s 1s 268333190e-09 0s 0s 268339310e-09 1s 1s 268343070e-09 1s 1s 268343430e-09 0s 0s 268349550e-09 1s 1s 268353350e-09 1s 1s 268353670e-09 0s 0s 268359790e-09 1s 1s 268363630e-09 1s 1s 268363910e-09 0s 0s 268370030e-09 1s 1s 268373910e-09 1s 1s 268374150e-09 0s 0s 268380270e-09 1s 1s 268384190e-09 1s 1s 268384390e-09 0s 0s 268390510e-09 1s 1s 268394470e-09 1s 1s 268394630e-09 0s 0s 268400750e-09 1s 1s 268404750e-09 1s 1s 268404870e-09 0s 0s 268410990e-09 1s 1s 268415030e-09 1s 1s 268415110e-09 0s 0s 268421230e-09 1s 1s 268425310e-09 1s 1s 268425350e-09 0s 0s 268431470e-09 1s 1s 268435590e-09 0s 0s 268441710e-09 1s 1s 268445830e-09 0s 0s 268445870e-09 0s 0s 268451950e-09 1s 1s 268456070e-09 0s 0s 268456150e-09 0s 0s 268462190e-09 1s 1s 268466310e-09 0s 0s 268466430e-09 0s 0s 268472430e-09 1s 1s 268476550e-09 0s 0s 268476710e-09 0s 0s 268482670e-09 1s 1s 268486790e-09 0s 0s 268486990e-09 0s 0s 268492910e-09 1s 1s 268497030e-09 0s 0s 268497270e-09 0s 0s 268503150e-09 1s 1s 268507270e-09 0s 0s 268507550e-09 0s 0s 268513390e-09 1s 1s 268517510e-09 0s 0s 268517830e-09 0s 0s 268523630e-09 1s 1s 268527750e-09 0s 0s 268528110e-09 0s 0s 268533870e-09 1s 1s 268537990e-09 0s 0s 268538390e-09 0s 0s 268544110e-09 1s 1s 268548230e-09 0s 0s 268548670e-09 0s 0s 268554350e-09 1s 1s 268558470e-09 0s 0s 268558950e-09 0s 0s 268564590e-09 1s 1s 268568710e-09 0s 0s 268569230e-09 0s 0s 268574830e-09 1s 1s 268578950e-09 0s 0s 268579510e-09 0s 0s 268585070e-09 1s 1s 268589190e-09 0s 0s 268589790e-09 0s 0s 268595310e-09 1s 1s 268599430e-09 0s 0s 268600070e-09 0s 0s 268605550e-09 1s 1s 268609670e-09 0s 0s 268610350e-09 0s 0s 268615790e-09 1s 1s 268619910e-09 0s 0s 268620630e-09 0s 0s 268626030e-09 1s 1s 268630150e-09 0s 0s 268630910e-09 0s 0s 268636270e-09 1s 1s 268640390e-09 0s 0s 268641190e-09 0s 0s 268646510e-09 1s 1s 268650630e-09 0s 0s 268651470e-09 0s 0s 268656750e-09 1s 1s 268660870e-09 0s 0s 268661750e-09 0s 0s 268666990e-09 1s 1s 268671110e-09 0s 0s 268672030e-09 0s 0s 268677230e-09 1s 1s 268681350e-09 0s 0s 268682310e-09 0s 0s 268687470e-09 1s 1s 268691590e-09 0s 0s 268692590e-09 0s 0s 268697710e-09 1s 1s 268701830e-09 0s 0s 268702870e-09 0s 0s 268707950e-09 1s 1s 268712070e-09 0s 0s 268713150e-09 0s 0s 268718190e-09 1s 1s 268722310e-09 0s 0s 268723430e-09 0s 0s 268728430e-09 1s 1s 268732550e-09 0s 0s 268733710e-09 0s 0s 268738670e-09 1s 1s 268742790e-09 0s 0s 268743990e-09 0s 0s 268748910e-09 1s 1s 268753030e-09 0s 0s 268754270e-09 0s 0s 268759150e-09 1s 1s 268763270e-09 0s 0s 268764550e-09 0s 0s 268769390e-09 1s 1s 268773510e-09 0s 0s 268774830e-09 0s 0s 268779630e-09 1s 1s 268783750e-09 0s 0s 268785110e-09 0s 0s 268789870e-09 1s 1s 268793990e-09 0s 0s 268795390e-09 0s 0s 268800110e-09 1s 1s 268804230e-09 0s 0s 268805670e-09 0s 0s 268810350e-09 1s 1s 268814470e-09 0s 0s 268815950e-09 0s 0s 268820590e-09 1s 1s 268824710e-09 0s 0s 268826230e-09 0s 0s 268830830e-09 1s 1s 268834950e-09 0s 0s 268836510e-09 0s 0s 268841070e-09 1s 1s 268845190e-09 0s 0s 268846790e-09 0s 0s 268851310e-09 1s 1s 268855430e-09 0s 0s 268857070e-09 0s 0s 268861550e-09 1s 1s 268865670e-09 0s 0s 268867350e-09 0s 0s 268871790e-09 1s 1s 268875910e-09 0s 0s 268877630e-09 0s 0s 268882030e-09 1s 1s 268886150e-09 0s 0s 268887910e-09 0s 0s 268892270e-09 1s 1s 268896390e-09 0s 0s 268898190e-09 0s 0s 268902510e-09 1s 1s 268906630e-09 0s 0s 268908470e-09 0s 0s 268912750e-09 1s 1s 268916870e-09 0s 0s 268918750e-09 0s 0s 268922990e-09 1s 1s 268927110e-09 0s 0s 268929030e-09 0s 0s 268933230e-09 1s 1s 268937350e-09 0s 0s 268939310e-09 0s 0s 268943470e-09 1s 1s 268947590e-09 0s 0s 268949590e-09 0s 0s 268953710e-09 1s 1s 268957830e-09 0s 0s 268959870e-09 0s 0s 268963950e-09 1s 1s 268968070e-09 0s 0s 268970150e-09 0s 0s 268974190e-09 1s 1s 268978310e-09 0s 0s 268980430e-09 0s 0s 268984430e-09 1s 1s 268988550e-09 0s 0s 268990710e-09 0s 0s 268994670e-09 1s 1s 268998790e-09 0s 0s 269000990e-09 0s 0s 269004910e-09 1s 1s 269009030e-09 0s 0s 269011270e-09 0s 0s 269015150e-09 1s 1s 269019270e-09 0s 0s 269021550e-09 0s 0s 269025390e-09 1s 1s 269029510e-09 0s 0s 269031830e-09 0s 0s 269035630e-09 1s 1s 269039750e-09 0s 0s 269042110e-09 0s 0s 269045870e-09 1s 1s 269049990e-09 0s 0s 269052390e-09 0s 0s 269056110e-09 1s 1s 269060230e-09 0s 0s 269062670e-09 0s 0s 269066350e-09 1s 1s 269070470e-09 0s 0s 269072950e-09 0s 0s 269076590e-09 1s 1s 269080710e-09 0s 0s 269083230e-09 0s 0s 269086830e-09 1s 1s 269090950e-09 0s 0s 269093510e-09 0s 0s 269097070e-09 1s 1s 269101190e-09 0s 0s 269103790e-09 0s 0s 269107310e-09 1s 1s 269111430e-09 0s 0s 269114070e-09 0s 0s 269117550e-09 1s 1s 269121670e-09 0s 0s 269124350e-09 0s 0s 269127790e-09 1s 1s 269131910e-09 0s 0s 269134630e-09 0s 0s 269138030e-09 1s 1s 269142150e-09 0s 0s 269144910e-09 0s 0s 269148270e-09 1s 1s 269152390e-09 0s 0s 269155190e-09 0s 0s 269158510e-09 1s 1s 269162630e-09 0s 0s 269165470e-09 0s 0s 269168750e-09 1s 1s 269172870e-09 0s 0s 269175750e-09 0s 0s 269178990e-09 1s 1s 269183110e-09 0s 0s 269186030e-09 0s 0s 269189230e-09 1s 1s 269193350e-09 0s 0s 269196310e-09 0s 0s 269199470e-09 1s 1s 269203590e-09 0s 0s 269206590e-09 0s 0s 269209710e-09 1s 1s 269213830e-09 0s 0s 269216870e-09 0s 0s 269219950e-09 1s 1s 269224070e-09 0s 0s 269227150e-09 0s 0s 269230190e-09 1s 1s 269234310e-09 0s 0s 269237430e-09 0s 0s 269240430e-09 1s 1s 269244550e-09 0s 0s 269247710e-09 0s 0s 269250670e-09 1s 1s 269254790e-09 0s 0s 269257990e-09 0s 0s 269260910e-09 1s 1s 269265030e-09 0s 0s 269268270e-09 0s 0s 269271150e-09 1s 1s 269275270e-09 0s 0s 269278550e-09 0s 0s 269281390e-09 1s 1s 269285510e-09 0s 0s 269288830e-09 0s 0s 269291630e-09 1s 1s 269295750e-09 0s 0s 269299110e-09 0s 0s 269301870e-09 1s 1s 269305990e-09 0s 0s 269309390e-09 0s 0s 269312110e-09 1s 1s 269316230e-09 0s 0s 269319670e-09 0s 0s 269322350e-09 1s 1s 269326470e-09 0s 0s 269329950e-09 0s 0s 269332590e-09 1s 1s 269336710e-09 0s 0s 269340230e-09 0s 0s 269342830e-09 1s 1s 269346950e-09 0s 0s 269350510e-09 0s 0s 269353070e-09 1s 1s 269357190e-09 0s 0s 269360790e-09 0s 0s 269363310e-09 1s 1s 269367430e-09 0s 0s 269371070e-09 0s 0s 269373550e-09 1s 1s 269377670e-09 0s 0s 269381350e-09 0s 0s 269383790e-09 1s 1s 269387910e-09 0s 0s 269391630e-09 0s 0s 269394030e-09 1s 1s 269398150e-09 0s 0s 269401910e-09 0s 0s 269404270e-09 1s 1s 269408390e-09 0s 0s 269412190e-09 0s 0s 269414510e-09 1s 1s 269418630e-09 0s 0s 269422470e-09 0s 0s 269424750e-09 1s 1s 269428870e-09 0s 0s 269432750e-09 0s 0s 269434990e-09 1s 1s 269439110e-09 0s 0s 269443030e-09 0s 0s 269445230e-09 1s 1s 269449350e-09 0s 0s 269453310e-09 0s 0s 269455470e-09 1s 1s 269459590e-09 0s 0s 269463590e-09 0s 0s 269465710e-09 1s 1s 269469830e-09 0s 0s 269473870e-09 0s 0s 269475950e-09 1s 1s 269480070e-09 0s 0s 269484150e-09 0s 0s 269486190e-09 1s 1s 269490310e-09 0s 0s 269494430e-09 0s 0s 269496430e-09 1s 1s 269500550e-09 0s 0s 269504710e-09 0s 0s 269506670e-09 1s 1s 269510790e-09 0s 0s 269514990e-09 0s 0s 269516910e-09 1s 1s 269521030e-09 0s 0s 269525270e-09 0s 0s 269527150e-09 1s 1s 269531270e-09 0s 0s 269535550e-09 0s 0s 269537390e-09 1s 1s 269541510e-09 0s 0s 269545830e-09 0s 0s 269547630e-09 1s 1s 269551750e-09 0s 0s 269556110e-09 0s 0s 269557870e-09 1s 1s 269561990e-09 0s 0s 269566390e-09 0s 0s 269568110e-09 1s 1s 269572230e-09 0s 0s 269576670e-09 0s 0s 269578350e-09 1s 1s 269582470e-09 0s 0s 269586950e-09 0s 0s 269588590e-09 1s 1s 269592710e-09 0s 0s 269597230e-09 0s 0s 269598830e-09 1s 1s 269602950e-09 0s 0s 269607510e-09 0s 0s 269609070e-09 1s 1s 269613190e-09 0s 0s 269617790e-09 0s 0s 269619310e-09 1s 1s 269623430e-09 0s 0s 269628070e-09 0s 0s 269629550e-09 1s 1s 269633670e-09 0s 0s 269638350e-09 0s 0s 269639790e-09 1s 1s 269643910e-09 0s 0s 269648630e-09 0s 0s 269650030e-09 1s 1s 269654150e-09 0s 0s 269658910e-09 0s 0s 269660270e-09 1s 1s 269664390e-09 0s 0s 269669190e-09 0s 0s 269670510e-09 1s 1s 269674630e-09 0s 0s 269679470e-09 0s 0s 269680750e-09 1s 1s 269684870e-09 0s 0s 269689750e-09 0s 0s 269690990e-09 1s 1s 269695110e-09 0s 0s 269700030e-09 0s 0s 269701230e-09 1s 1s 269705350e-09 0s 0s 269710310e-09 0s 0s 269711470e-09 1s 1s 269715590e-09 0s 0s 269720590e-09 0s 0s 269721710e-09 1s 1s 269725830e-09 0s 0s 269730870e-09 0s 0s 269731950e-09 1s 1s 269736070e-09 0s 0s 269741150e-09 0s 0s 269742190e-09 1s 1s 269746310e-09 0s 0s 269751430e-09 0s 0s 269752430e-09 1s 1s 269756550e-09 0s 0s 269761710e-09 0s 0s 269762670e-09 1s 1s 269766790e-09 0s 0s 269771990e-09 0s 0s 269772910e-09 1s 1s 269777030e-09 0s 0s 269782270e-09 0s 0s 269783150e-09 1s 1s 269787270e-09 0s 0s 269792550e-09 0s 0s 269793390e-09 1s 1s 269797510e-09 0s 0s 269802830e-09 0s 0s 269803630e-09 1s 1s 269807750e-09 0s 0s 269813110e-09 0s 0s 269813870e-09 1s 1s 269817990e-09 0s 0s 269823390e-09 0s 0s 269824110e-09 1s 1s 269828230e-09 0s 0s 269833670e-09 0s 0s 269834350e-09 1s 1s 269838470e-09 0s 0s 269843950e-09 0s 0s 269844590e-09 1s 1s 269848710e-09 0s 0s 269854230e-09 0s 0s 269854830e-09 1s 1s 269858950e-09 0s 0s 269864510e-09 0s 0s 269865070e-09 1s 1s 269869190e-09 0s 0s 269874790e-09 0s 0s 269875310e-09 1s 1s 269879430e-09 0s 0s 269885070e-09 0s 0s 269885550e-09 1s 1s 269889670e-09 0s 0s 269895350e-09 0s 0s 269895790e-09 1s 1s 269899910e-09 0s 0s 269905630e-09 0s 0s 269906030e-09 1s 1s 269910150e-09 0s 0s 269915910e-09 0s 0s 269916270e-09 1s 1s 269920390e-09 0s 0s 269926190e-09 0s 0s 269926510e-09 1s 1s 269930630e-09 0s 0s 269936470e-09 0s 0s 269936750e-09 1s 1s 269940870e-09 0s 0s 269946750e-09 0s 0s 269946990e-09 1s 1s 269951110e-09 0s 0s 269957030e-09 0s 0s 269957230e-09 1s 1s 269961350e-09 0s 0s 269967310e-09 0s 0s 269967470e-09 1s 1s 269971590e-09 0s 0s 269977590e-09 0s 0s 269977710e-09 1s 1s 269981830e-09 0s 0s 269987870e-09 0s 0s 269987950e-09 1s 1s 269992070e-09 0s 0s 269998150e-09 0s 0s 269998190e-09 1s 1s 270002310e-09 0s 0s 270008430e-09 1s 1s 270008470e-09 1s 1s 270012590e-09 0s 0s 270018670e-09 1s 1s 270018750e-09 1s 1s 270022830e-09 0s 0s 270028910e-09 1s 1s 270029030e-09 1s 1s 270033070e-09 0s 0s 270039150e-09 1s 1s 270039310e-09 1s 1s 270043310e-09 0s 0s 270049390e-09 1s 1s 270049590e-09 1s 1s 270053550e-09 0s 0s 270059630e-09 1s 1s 270059870e-09 1s 1s 270063790e-09 0s 0s 270069870e-09 1s 1s 270070150e-09 1s 1s 270074030e-09 0s 0s 270080110e-09 1s 1s 270080430e-09 1s 1s 270084270e-09 0s 0s 270090350e-09 1s 1s 270090710e-09 1s 1s 270094510e-09 0s 0s 270100590e-09 1s 1s 270100990e-09 1s 1s 270104750e-09 0s 0s 270110830e-09 1s 1s 270111270e-09 1s 1s 270114990e-09 0s 0s 270121070e-09 1s 1s 270121550e-09 1s 1s 270125230e-09 0s 0s 270131310e-09 1s 1s 270131830e-09 1s 1s 270135470e-09 0s 0s 270141550e-09 1s 1s 270142110e-09 1s 1s 270145710e-09 0s 0s 270151790e-09 1s 1s 270152390e-09 1s 1s 270155950e-09 0s 0s 270162030e-09 1s 1s 270162670e-09 1s 1s 270166190e-09 0s 0s 270172270e-09 1s 1s 270172950e-09 1s 1s 270176430e-09 0s 0s 270182510e-09 1s 1s 270183230e-09 1s 1s 270186670e-09 0s 0s 270192750e-09 1s 1s 270193510e-09 1s 1s 270196910e-09 0s 0s 270202990e-09 1s 1s 270203790e-09 1s 1s 270207150e-09 0s 0s 270213230e-09 1s 1s 270214070e-09 1s 1s 270217390e-09 0s 0s 270223470e-09 1s 1s 270224350e-09 1s 1s 270227630e-09 0s 0s 270233710e-09 1s 1s 270234630e-09 1s 1s 270237870e-09 0s 0s 270243950e-09 1s 1s 270244910e-09 1s 1s 270248110e-09 0s 0s 270254190e-09 1s 1s 270255190e-09 1s 1s 270258350e-09 0s 0s 270264430e-09 1s 1s 270265470e-09 1s 1s 270268590e-09 0s 0s 270274670e-09 1s 1s 270275750e-09 1s 1s 270278830e-09 0s 0s 270284910e-09 1s 1s 270286030e-09 1s 1s 270289070e-09 0s 0s 270295150e-09 1s 1s 270296310e-09 1s 1s 270299310e-09 0s 0s 270305390e-09 1s 1s 270306590e-09 1s 1s 270309550e-09 0s 0s 270315630e-09 1s 1s 270316870e-09 1s 1s 270319790e-09 0s 0s 270325870e-09 1s 1s 270327150e-09 1s 1s 270330030e-09 0s 0s 270336110e-09 1s 1s 270337430e-09 1s 1s 270340270e-09 0s 0s 270346350e-09 1s 1s 270347710e-09 1s 1s 270350510e-09 0s 0s 270356590e-09 1s 1s 270357990e-09 1s 1s 270360750e-09 0s 0s 270366830e-09 1s 1s 270368270e-09 1s 1s 270370990e-09 0s 0s 270377070e-09 1s 1s 270378550e-09 1s 1s 270381230e-09 0s 0s 270387310e-09 1s 1s 270388830e-09 1s 1s 270391470e-09 0s 0s 270397550e-09 1s 1s 270399110e-09 1s 1s 270401710e-09 0s 0s 270407790e-09 1s 1s 270409390e-09 1s 1s 270411950e-09 0s 0s 270418030e-09 1s 1s 270419670e-09 1s 1s 270422190e-09 0s 0s 270428270e-09 1s 1s 270429950e-09 1s 1s 270432430e-09 0s 0s 270438510e-09 1s 1s 270440230e-09 1s 1s 270442670e-09 0s 0s 270448750e-09 1s 1s 270450510e-09 1s 1s 270452910e-09 0s 0s 270458990e-09 1s 1s 270460790e-09 1s 1s 270463150e-09 0s 0s 270469230e-09 1s 1s 270471070e-09 1s 1s 270473390e-09 0s 0s 270479470e-09 1s 1s 270481350e-09 1s 1s 270483630e-09 0s 0s 270489710e-09 1s 1s 270491630e-09 1s 1s 270493870e-09 0s 0s 270499950e-09 1s 1s 270501910e-09 1s 1s 270504110e-09 0s 0s 270510190e-09 1s 1s 270512190e-09 1s 1s 270514350e-09 0s 0s 270520430e-09 1s 1s 270522470e-09 1s 1s 270524590e-09 0s 0s 270530670e-09 1s 1s 270532750e-09 1s 1s 270534830e-09 0s 0s 270540910e-09 1s 1s 270543030e-09 1s 1s 270545070e-09 0s 0s 270551150e-09 1s 1s 270553310e-09 1s 1s 270555310e-09 0s 0s 270561390e-09 1s 1s 270563590e-09 1s 1s 270565550e-09 0s 0s 270571630e-09 1s 1s 270573870e-09 1s 1s 270575790e-09 0s 0s 270581870e-09 1s 1s 270584150e-09 1s 1s 270586030e-09 0s 0s 270592110e-09 1s 1s 270594430e-09 1s 1s 270596270e-09 0s 0s 270602350e-09 1s 1s 270604710e-09 1s 1s 270606510e-09 0s 0s 270612590e-09 1s 1s 270614990e-09 1s 1s 270616750e-09 0s 0s 270622830e-09 1s 1s 270625270e-09 1s 1s 270626990e-09 0s 0s 270633070e-09 1s 1s 270635550e-09 1s 1s 270637230e-09 0s 0s 270643310e-09 1s 1s 270645830e-09 1s 1s 270647470e-09 0s 0s 270653550e-09 1s 1s 270656110e-09 1s 1s 270657710e-09 0s 0s 270663790e-09 1s 1s 270666390e-09 1s 1s 270667950e-09 0s 0s 270674030e-09 1s 1s 270676670e-09 1s 1s 270678190e-09 0s 0s 270684270e-09 1s 1s 270686950e-09 1s 1s 270688430e-09 0s 0s 270694510e-09 1s 1s 270697230e-09 1s 1s 270698670e-09 0s 0s 270704750e-09 1s 1s 270707510e-09 1s 1s 270708910e-09 0s 0s 270714990e-09 1s 1s 270717790e-09 1s 1s 270719150e-09 0s 0s 270725230e-09 1s 1s 270728070e-09 1s 1s 270729390e-09 0s 0s 270735470e-09 1s 1s 270738350e-09 1s 1s 270739630e-09 0s 0s 270745710e-09 1s 1s 270748630e-09 1s 1s 270749870e-09 0s 0s 270755950e-09 1s 1s 270758910e-09 1s 1s 270760110e-09 0s 0s 270766190e-09 1s 1s 270769190e-09 1s 1s 270770350e-09 0s 0s 270776430e-09 1s 1s 270779470e-09 1s 1s 270780590e-09 0s 0s 270786670e-09 1s 1s 270789750e-09 1s 1s 270790830e-09 0s 0s 270796910e-09 1s 1s 270800030e-09 1s 1s 270801070e-09 0s 0s 270807150e-09 1s 1s 270810310e-09 1s 1s 270811310e-09 0s 0s 270817390e-09 1s 1s 270820590e-09 1s 1s 270821550e-09 0s 0s 270827630e-09 1s 1s 270830870e-09 1s 1s 270831790e-09 0s 0s 270837870e-09 1s 1s 270841150e-09 1s 1s 270842030e-09 0s 0s 270848110e-09 1s 1s 270851430e-09 1s 1s 270852270e-09 0s 0s 270858350e-09 1s 1s 270861710e-09 1s 1s 270862510e-09 0s 0s 270868590e-09 1s 1s 270871990e-09 1s 1s 270872750e-09 0s 0s 270878830e-09 1s 1s 270882270e-09 1s 1s 270882990e-09 0s 0s 270889070e-09 1s 1s 270892550e-09 1s 1s 270893230e-09 0s 0s 270899310e-09 1s 1s 270902830e-09 1s 1s 270903470e-09 0s 0s 270909550e-09 1s 1s 270913110e-09 1s 1s 270913710e-09 0s 0s 270919790e-09 1s 1s 270923390e-09 1s 1s 270923950e-09 0s 0s 270930030e-09 1s 1s 270933670e-09 1s 1s 270934190e-09 0s 0s 270940270e-09 1s 1s 270943950e-09 1s 1s 270944430e-09 0s 0s 270950510e-09 1s 1s 270954230e-09 1s 1s 270954670e-09 0s 0s 270960750e-09 1s 1s 270964510e-09 1s 1s 270964910e-09 0s 0s 270970990e-09 1s 1s 270974790e-09 1s 1s 270975150e-09 0s 0s 270981230e-09 1s 1s 270985070e-09 1s 1s 270985390e-09 0s 0s 270991470e-09 1s 1s 270995350e-09 1s 1s 270995630e-09 0s 0s 271001710e-09 1s 1s 271005630e-09 1s 1s 271005870e-09 0s 0s 271011950e-09 1s 1s 271015910e-09 1s 1s 271016110e-09 0s 0s 271022190e-09 1s 1s 271026190e-09 1s 1s 271026350e-09 0s 0s 271032430e-09 1s 1s 271036470e-09 1s 1s 271036590e-09 0s 0s 271042670e-09 1s 1s 271046750e-09 1s 1s 271046830e-09 0s 0s 271052910e-09 1s 1s 271057030e-09 1s 1s 271057070e-09 0s 0s 271063150e-09 1s 1s 271067310e-09 0s 0s 271073390e-09 1s 1s 271077550e-09 0s 0s 271077590e-09 0s 0s 271083630e-09 1s 1s 271087790e-09 0s 0s 271087870e-09 0s 0s 271093870e-09 1s 1s 271098030e-09 0s 0s 271098150e-09 0s 0s 271104110e-09 1s 1s 271108270e-09 0s 0s 271108430e-09 0s 0s 271114350e-09 1s 1s 271118510e-09 0s 0s 271118710e-09 0s 0s 271124590e-09 1s 1s 271128750e-09 0s 0s 271128990e-09 0s 0s 271134830e-09 1s 1s 271138990e-09 0s 0s 271139270e-09 0s 0s 271145070e-09 1s 1s 271149230e-09 0s 0s 271149550e-09 0s 0s 271155310e-09 1s 1s 271159470e-09 0s 0s 271159830e-09 0s 0s 271165550e-09 1s 1s 271169710e-09 0s 0s 271170110e-09 0s 0s 271175790e-09 1s 1s 271179950e-09 0s 0s 271180390e-09 0s 0s 271186030e-09 1s 1s 271190190e-09 0s 0s 271190670e-09 0s 0s 271196270e-09 1s 1s 271200430e-09 0s 0s 271200950e-09 0s 0s 271206510e-09 1s 1s 271210670e-09 0s 0s 271211230e-09 0s 0s 271216750e-09 1s 1s 271220910e-09 0s 0s 271221510e-09 0s 0s 271226990e-09 1s 1s 271231150e-09 0s 0s 271231790e-09 0s 0s 271237230e-09 1s 1s 271241390e-09 0s 0s 271242070e-09 0s 0s 271247470e-09 1s 1s 271251630e-09 0s 0s 271252350e-09 0s 0s 271257710e-09 1s 1s 271261870e-09 0s 0s 271262630e-09 0s 0s 271267950e-09 1s 1s 271272110e-09 0s 0s 271272910e-09 0s 0s 271278190e-09 1s 1s 271282350e-09 0s 0s 271283190e-09 0s 0s 271288430e-09 1s 1s 271292590e-09 0s 0s 271293470e-09 0s 0s 271298670e-09 1s 1s 271302830e-09 0s 0s 271303750e-09 0s 0s 271308910e-09 1s 1s 271313070e-09 0s 0s 271314030e-09 0s 0s 271319150e-09 1s 1s 271323310e-09 0s 0s 271324310e-09 0s 0s 271329390e-09 1s 1s 271333550e-09 0s 0s 271334590e-09 0s 0s 271339630e-09 1s 1s 271343790e-09 0s 0s 271344870e-09 0s 0s 271349870e-09 1s 1s 271354030e-09 0s 0s 271355150e-09 0s 0s 271360110e-09 1s 1s 271364270e-09 0s 0s 271365430e-09 0s 0s 271370350e-09 1s 1s 271374510e-09 0s 0s 271375710e-09 0s 0s 271380590e-09 1s 1s 271384750e-09 0s 0s 271385990e-09 0s 0s 271390830e-09 1s 1s 271394990e-09 0s 0s 271396270e-09 0s 0s 271401070e-09 1s 1s 271405230e-09 0s 0s 271406550e-09 0s 0s 271411310e-09 1s 1s 271415470e-09 0s 0s 271416830e-09 0s 0s 271421550e-09 1s 1s 271425710e-09 0s 0s 271427110e-09 0s 0s 271431790e-09 1s 1s 271435950e-09 0s 0s 271437390e-09 0s 0s 271442030e-09 1s 1s 271446190e-09 0s 0s 271447670e-09 0s 0s 271452270e-09 1s 1s 271456430e-09 0s 0s 271457950e-09 0s 0s 271462510e-09 1s 1s 271466670e-09 0s 0s 271468230e-09 0s 0s 271472750e-09 1s 1s 271476910e-09 0s 0s 271478510e-09 0s 0s 271482990e-09 1s 1s 271487150e-09 0s 0s 271488790e-09 0s 0s 271493230e-09 1s 1s 271497390e-09 0s 0s 271499070e-09 0s 0s 271503470e-09 1s 1s 271507630e-09 0s 0s 271509350e-09 0s 0s 271513710e-09 1s 1s 271517870e-09 0s 0s 271519630e-09 0s 0s 271523950e-09 1s 1s 271528110e-09 0s 0s 271529910e-09 0s 0s 271534190e-09 1s 1s 271538350e-09 0s 0s 271540190e-09 0s 0s 271544430e-09 1s 1s 271548590e-09 0s 0s 271550470e-09 0s 0s 271554670e-09 1s 1s 271558830e-09 0s 0s 271560750e-09 0s 0s 271564910e-09 1s 1s 271569070e-09 0s 0s 271571030e-09 0s 0s 271575150e-09 1s 1s 271579310e-09 0s 0s 271581310e-09 0s 0s 271585390e-09 1s 1s 271589550e-09 0s 0s 271591590e-09 0s 0s 271595630e-09 1s 1s 271599790e-09 0s 0s 271601870e-09 0s 0s 271605870e-09 1s 1s 271610030e-09 0s 0s 271612150e-09 0s 0s 271616110e-09 1s 1s 271620270e-09 0s 0s 271622430e-09 0s 0s 271626350e-09 1s 1s 271630510e-09 0s 0s 271632710e-09 0s 0s 271636590e-09 1s 1s 271640750e-09 0s 0s 271642990e-09 0s 0s 271646830e-09 1s 1s 271650990e-09 0s 0s 271653270e-09 0s 0s 271657070e-09 1s 1s 271661230e-09 0s 0s 271663550e-09 0s 0s 271667310e-09 1s 1s 271671470e-09 0s 0s 271673830e-09 0s 0s 271677550e-09 1s 1s 271681710e-09 0s 0s 271684110e-09 0s 0s 271687790e-09 1s 1s 271691950e-09 0s 0s 271694390e-09 0s 0s 271698030e-09 1s 1s 271702190e-09 0s 0s 271704670e-09 0s 0s 271708270e-09 1s 1s 271712430e-09 0s 0s 271714950e-09 0s 0s 271718510e-09 1s 1s 271722670e-09 0s 0s 271725230e-09 0s 0s 271728750e-09 1s 1s 271732910e-09 0s 0s 271735510e-09 0s 0s 271738990e-09 1s 1s 271743150e-09 0s 0s 271745790e-09 0s 0s 271749230e-09 1s 1s 271753390e-09 0s 0s 271756070e-09 0s 0s 271759470e-09 1s 1s 271763630e-09 0s 0s 271766350e-09 0s 0s 271769710e-09 1s 1s 271773870e-09 0s 0s 271776630e-09 0s 0s 271779950e-09 1s 1s 271784110e-09 0s 0s 271786910e-09 0s 0s 271790190e-09 1s 1s 271794350e-09 0s 0s 271797190e-09 0s 0s 271800430e-09 1s 1s 271804590e-09 0s 0s 271807470e-09 0s 0s 271810670e-09 1s 1s 271814830e-09 0s 0s 271817750e-09 0s 0s 271820910e-09 1s 1s 271825070e-09 0s 0s 271828030e-09 0s 0s 271831150e-09 1s 1s 271835310e-09 0s 0s 271838310e-09 0s 0s 271841390e-09 1s 1s 271845550e-09 0s 0s 271848590e-09 0s 0s 271851630e-09 1s 1s 271855790e-09 0s 0s 271858870e-09 0s 0s 271861870e-09 1s 1s 271866030e-09 0s 0s 271869150e-09 0s 0s 271872110e-09 1s 1s 271876270e-09 0s 0s 271879430e-09 0s 0s 271882350e-09 1s 1s 271886510e-09 0s 0s 271889710e-09 0s 0s 271892590e-09 1s 1s 271896750e-09 0s 0s 271899990e-09 0s 0s 271902830e-09 1s 1s 271906990e-09 0s 0s 271910270e-09 0s 0s 271913070e-09 1s 1s 271917230e-09 0s 0s 271920550e-09 0s 0s 271923310e-09 1s 1s 271927470e-09 0s 0s 271930830e-09 0s 0s 271933550e-09 1s 1s 271937710e-09 0s 0s 271941110e-09 0s 0s 271943790e-09 1s 1s 271947950e-09 0s 0s 271951390e-09 0s 0s 271954030e-09 1s 1s 271958190e-09 0s 0s 271961670e-09 0s 0s 271964270e-09 1s 1s 271968430e-09 0s 0s 271971950e-09 0s 0s 271974510e-09 1s 1s 271978670e-09 0s 0s 271982230e-09 0s 0s 271984750e-09 1s 1s 271988910e-09 0s 0s 271992510e-09 0s 0s 271994990e-09 1s 1s 271999150e-09 0s 0s 272002790e-09 0s 0s 272005230e-09 1s 1s 272009390e-09 0s 0s 272013070e-09 0s 0s 272015470e-09 1s 1s 272019630e-09 0s 0s 272023350e-09 0s 0s 272025710e-09 1s 1s 272029870e-09 0s 0s 272033630e-09 0s 0s 272035950e-09 1s 1s 272040110e-09 0s 0s 272043910e-09 0s 0s 272046190e-09 1s 1s 272050350e-09 0s 0s 272054190e-09 0s 0s 272056430e-09 1s 1s 272060590e-09 0s 0s 272064470e-09 0s 0s 272066670e-09 1s 1s 272070830e-09 0s 0s 272074750e-09 0s 0s 272076910e-09 1s 1s 272081070e-09 0s 0s 272085030e-09 0s 0s 272087150e-09 1s 1s 272091310e-09 0s 0s 272095310e-09 0s 0s 272097390e-09 1s 1s 272101550e-09 0s 0s 272105590e-09 0s 0s 272107630e-09 1s 1s 272111790e-09 0s 0s 272115870e-09 0s 0s 272117870e-09 1s 1s 272122030e-09 0s 0s 272126150e-09 0s 0s 272128110e-09 1s 1s 272132270e-09 0s 0s 272136430e-09 0s 0s 272138350e-09 1s 1s 272142510e-09 0s 0s 272146710e-09 0s 0s 272148590e-09 1s 1s 272152750e-09 0s 0s 272156990e-09 0s 0s 272158830e-09 1s 1s 272162990e-09 0s 0s 272167270e-09 0s 0s 272169070e-09 1s 1s 272173230e-09 0s 0s 272177550e-09 0s 0s 272179310e-09 1s 1s 272183470e-09 0s 0s 272187830e-09 0s 0s 272189550e-09 1s 1s 272193710e-09 0s 0s 272198110e-09 0s 0s 272199790e-09 1s 1s 272203950e-09 0s 0s 272208390e-09 0s 0s 272210030e-09 1s 1s 272214190e-09 0s 0s 272218670e-09 0s 0s 272220270e-09 1s 1s 272224430e-09 0s 0s 272228950e-09 0s 0s 272230510e-09 1s 1s 272234670e-09 0s 0s 272239230e-09 0s 0s 272240750e-09 1s 1s 272244910e-09 0s 0s 272249510e-09 0s 0s 272250990e-09 1s 1s 272255150e-09 0s 0s 272259790e-09 0s 0s 272261230e-09 1s 1s 272265390e-09 0s 0s 272270070e-09 0s 0s 272271470e-09 1s 1s 272275630e-09 0s 0s 272280350e-09 0s 0s 272281710e-09 1s 1s 272285870e-09 0s 0s 272290630e-09 0s 0s 272291950e-09 1s 1s 272296110e-09 0s 0s 272300910e-09 0s 0s 272302190e-09 1s 1s 272306350e-09 0s 0s 272311190e-09 0s 0s 272312430e-09 1s 1s 272316590e-09 0s 0s 272321470e-09 0s 0s 272322670e-09 1s 1s 272326830e-09 0s 0s 272331750e-09 0s 0s 272332910e-09 1s 1s 272337070e-09 0s 0s 272342030e-09 0s 0s 272343150e-09 1s 1s 272347310e-09 0s 0s 272352310e-09 0s 0s 272353390e-09 1s 1s 272357550e-09 0s 0s 272362590e-09 0s 0s 272363630e-09 1s 1s 272367790e-09 0s 0s 272372870e-09 0s 0s 272373870e-09 1s 1s 272378030e-09 0s 0s 272383150e-09 0s 0s 272384110e-09 1s 1s 272388270e-09 0s 0s 272393430e-09 0s 0s 272394350e-09 1s 1s 272398510e-09 0s 0s 272403710e-09 0s 0s 272404590e-09 1s 1s 272408750e-09 0s 0s 272413990e-09 0s 0s 272414830e-09 1s 1s 272418990e-09 0s 0s 272424270e-09 0s 0s 272425070e-09 1s 1s 272429230e-09 0s 0s 272434550e-09 0s 0s 272435310e-09 1s 1s 272439470e-09 0s 0s 272444830e-09 0s 0s 272445550e-09 1s 1s 272449710e-09 0s 0s 272455110e-09 0s 0s 272455790e-09 1s 1s 272459950e-09 0s 0s 272465390e-09 0s 0s 272466030e-09 1s 1s 272470190e-09 0s 0s 272475670e-09 0s 0s 272476270e-09 1s 1s 272480430e-09 0s 0s 272485950e-09 0s 0s 272486510e-09 1s 1s 272490670e-09 0s 0s 272496230e-09 0s 0s 272496750e-09 1s 1s 272500910e-09 0s 0s 272506510e-09 0s 0s 272506990e-09 1s 1s 272511150e-09 0s 0s 272516790e-09 0s 0s 272517230e-09 1s 1s 272521390e-09 0s 0s 272527070e-09 0s 0s 272527470e-09 1s 1s 272531630e-09 0s 0s 272537350e-09 0s 0s 272537710e-09 1s 1s 272541870e-09 0s 0s 272547630e-09 0s 0s 272547950e-09 1s 1s 272552110e-09 0s 0s 272557910e-09 0s 0s 272558190e-09 1s 1s 272562350e-09 0s 0s 272568190e-09 0s 0s 272568430e-09 1s 1s 272572590e-09 0s 0s 272578470e-09 0s 0s 272578670e-09 1s 1s 272582830e-09 0s 0s 272588750e-09 0s 0s 272588910e-09 1s 1s 272593070e-09 0s 0s 272599030e-09 0s 0s 272599150e-09 1s 1s 272603310e-09 0s 0s 272609310e-09 0s 0s 272609390e-09 1s 1s 272613550e-09 0s 0s 272619590e-09 0s 0s 272619630e-09 1s 1s 272623790e-09 0s 0s 272629870e-09 1s 1s 272629910e-09 1s 1s 272634070e-09 0s 0s 272640110e-09 1s 1s 272640190e-09 1s 1s 272644310e-09 0s 0s 272650350e-09 1s 1s 272650470e-09 1s 1s 272654550e-09 0s 0s 272660590e-09 1s 1s 272660750e-09 1s 1s 272664790e-09 0s 0s 272670830e-09 1s 1s 272671030e-09 1s 1s 272675030e-09 0s 0s 272681070e-09 1s 1s 272681310e-09 1s 1s 272685270e-09 0s 0s 272691310e-09 1s 1s 272691590e-09 1s 1s 272695510e-09 0s 0s 272701550e-09 1s 1s 272701870e-09 1s 1s 272705750e-09 0s 0s 272711790e-09 1s 1s 272712150e-09 1s 1s 272715990e-09 0s 0s 272722030e-09 1s 1s 272722430e-09 1s 1s 272726230e-09 0s 0s 272732270e-09 1s 1s 272732710e-09 1s 1s 272736470e-09 0s 0s 272742510e-09 1s 1s 272742990e-09 1s 1s 272746710e-09 0s 0s 272752750e-09 1s 1s 272753270e-09 1s 1s 272756950e-09 0s 0s 272762990e-09 1s 1s 272763550e-09 1s 1s 272767190e-09 0s 0s 272773230e-09 1s 1s 272773830e-09 1s 1s 272777430e-09 0s 0s 272783470e-09 1s 1s 272784110e-09 1s 1s 272787670e-09 0s 0s 272793710e-09 1s 1s 272794390e-09 1s 1s 272797910e-09 0s 0s 272803950e-09 1s 1s 272804670e-09 1s 1s 272808150e-09 0s 0s 272814190e-09 1s 1s 272814950e-09 1s 1s 272818390e-09 0s 0s 272824430e-09 1s 1s 272825230e-09 1s 1s 272828630e-09 0s 0s 272834670e-09 1s 1s 272835510e-09 1s 1s 272838870e-09 0s 0s 272844910e-09 1s 1s 272845790e-09 1s 1s 272849110e-09 0s 0s 272855150e-09 1s 1s 272856070e-09 1s 1s 272859350e-09 0s 0s 272865390e-09 1s 1s 272866350e-09 1s 1s 272869590e-09 0s 0s 272875630e-09 1s 1s 272876630e-09 1s 1s 272879830e-09 0s 0s 272885870e-09 1s 1s 272886910e-09 1s 1s 272890070e-09 0s 0s 272896110e-09 1s 1s 272897190e-09 1s 1s 272900310e-09 0s 0s 272906350e-09 1s 1s 272907470e-09 1s 1s 272910550e-09 0s 0s 272916590e-09 1s 1s 272917750e-09 1s 1s 272920790e-09 0s 0s 272926830e-09 1s 1s 272928030e-09 1s 1s 272931030e-09 0s 0s 272937070e-09 1s 1s 272938310e-09 1s 1s 272941270e-09 0s 0s 272947310e-09 1s 1s 272948590e-09 1s 1s 272951510e-09 0s 0s 272957550e-09 1s 1s 272958870e-09 1s 1s 272961750e-09 0s 0s 272967790e-09 1s 1s 272969150e-09 1s 1s 272971990e-09 0s 0s 272978030e-09 1s 1s 272979430e-09 1s 1s 272982230e-09 0s 0s 272988270e-09 1s 1s 272989710e-09 1s 1s 272992470e-09 0s 0s 272998510e-09 1s 1s 272999990e-09 1s 1s 273002710e-09 0s 0s 273008750e-09 1s 1s 273010270e-09 1s 1s 273012950e-09 0s 0s 273018990e-09 1s 1s 273020550e-09 1s 1s 273023190e-09 0s 0s 273029230e-09 1s 1s 273030830e-09 1s 1s 273033430e-09 0s 0s 273039470e-09 1s 1s 273041110e-09 1s 1s 273043670e-09 0s 0s 273049710e-09 1s 1s 273051390e-09 1s 1s 273053910e-09 0s 0s 273059950e-09 1s 1s 273061670e-09 1s 1s 273064150e-09 0s 0s 273070190e-09 1s 1s 273071950e-09 1s 1s 273074390e-09 0s 0s 273080430e-09 1s 1s 273082230e-09 1s 1s 273084630e-09 0s 0s 273090670e-09 1s 1s 273092510e-09 1s 1s 273094870e-09 0s 0s 273100910e-09 1s 1s 273102790e-09 1s 1s 273105110e-09 0s 0s 273111150e-09 1s 1s 273113070e-09 1s 1s 273115350e-09 0s 0s 273121390e-09 1s 1s 273123350e-09 1s 1s 273125590e-09 0s 0s 273131630e-09 1s 1s 273133630e-09 1s 1s 273135830e-09 0s 0s 273141870e-09 1s 1s 273143910e-09 1s 1s 273146070e-09 0s 0s 273152110e-09 1s 1s 273154190e-09 1s 1s 273156310e-09 0s 0s 273162350e-09 1s 1s 273164470e-09 1s 1s 273166550e-09 0s 0s 273172590e-09 1s 1s 273174750e-09 1s 1s 273176790e-09 0s 0s 273182830e-09 1s 1s 273185030e-09 1s 1s 273187030e-09 0s 0s 273193070e-09 1s 1s 273195310e-09 1s 1s 273197270e-09 0s 0s 273203310e-09 1s 1s 273205590e-09 1s 1s 273207510e-09 0s 0s 273213550e-09 1s 1s 273215870e-09 1s 1s 273217750e-09 0s 0s 273223790e-09 1s 1s 273226150e-09 1s 1s 273227990e-09 0s 0s 273234030e-09 1s 1s 273236430e-09 1s 1s 273238230e-09 0s 0s 273244270e-09 1s 1s 273246710e-09 1s 1s 273248470e-09 0s 0s 273254510e-09 1s 1s 273256990e-09 1s 1s 273258710e-09 0s 0s 273264750e-09 1s 1s 273267270e-09 1s 1s 273268950e-09 0s 0s 273274990e-09 1s 1s 273277550e-09 1s 1s 273279190e-09 0s 0s 273285230e-09 1s 1s 273287830e-09 1s 1s 273289430e-09 0s 0s 273295470e-09 1s 1s 273298110e-09 1s 1s 273299670e-09 0s 0s 273305710e-09 1s 1s 273308390e-09 1s 1s 273309910e-09 0s 0s 273315950e-09 1s 1s 273318670e-09 1s 1s 273320150e-09 0s 0s 273326190e-09 1s 1s 273328950e-09 1s 1s 273330390e-09 0s 0s 273336430e-09 1s 1s 273339230e-09 1s 1s 273340630e-09 0s 0s 273346670e-09 1s 1s 273349510e-09 1s 1s 273350870e-09 0s 0s 273356910e-09 1s 1s 273359790e-09 1s 1s 273361110e-09 0s 0s 273367150e-09 1s 1s 273370070e-09 1s 1s 273371350e-09 0s 0s 273377390e-09 1s 1s 273380350e-09 1s 1s 273381590e-09 0s 0s 273387630e-09 1s 1s 273390630e-09 1s 1s 273391830e-09 0s 0s 273397870e-09 1s 1s 273400910e-09 1s 1s 273402070e-09 0s 0s 273408110e-09 1s 1s 273411190e-09 1s 1s 273412310e-09 0s 0s 273418350e-09 1s 1s 273421470e-09 1s 1s 273422550e-09 0s 0s 273428590e-09 1s 1s 273431750e-09 1s 1s 273432790e-09 0s 0s 273438830e-09 1s 1s 273442030e-09 1s 1s 273443030e-09 0s 0s 273449070e-09 1s 1s 273452310e-09 1s 1s 273453270e-09 0s 0s 273459310e-09 1s 1s 273462590e-09 1s 1s 273463510e-09 0s 0s 273469550e-09 1s 1s 273472870e-09 1s 1s 273473750e-09 0s 0s 273479790e-09 1s 1s 273483150e-09 1s 1s 273483990e-09 0s 0s 273490030e-09 1s 1s 273493430e-09 1s 1s 273494230e-09 0s 0s 273500270e-09 1s 1s 273503710e-09 1s 1s 273504470e-09 0s 0s 273510510e-09 1s 1s 273513990e-09 1s 1s 273514710e-09 0s 0s 273520750e-09 1s 1s 273524270e-09 1s 1s 273524950e-09 0s 0s 273530990e-09 1s 1s 273534550e-09 1s 1s 273535190e-09 0s 0s 273541230e-09 1s 1s 273544830e-09 1s 1s 273545430e-09 0s 0s 273551470e-09 1s 1s 273555110e-09 1s 1s 273555670e-09 0s 0s 273561710e-09 1s 1s 273565390e-09 1s 1s 273565910e-09 0s 0s 273571950e-09 1s 1s 273575670e-09 1s 1s 273576150e-09 0s 0s 273582190e-09 1s 1s 273585950e-09 1s 1s 273586390e-09 0s 0s 273592430e-09 1s 1s 273596230e-09 1s 1s 273596630e-09 0s 0s 273602670e-09 1s 1s 273606510e-09 1s 1s 273606870e-09 0s 0s 273612910e-09 1s 1s 273616790e-09 1s 1s 273617110e-09 0s 0s 273623150e-09 1s 1s 273627070e-09 1s 1s 273627350e-09 0s 0s 273633390e-09 1s 1s 273637350e-09 1s 1s 273637590e-09 0s 0s 273643630e-09 1s 1s 273647630e-09 1s 1s 273647830e-09 0s 0s 273653870e-09 1s 1s 273657910e-09 1s 1s 273658070e-09 0s 0s 273664110e-09 1s 1s 273668190e-09 1s 1s 273668310e-09 0s 0s 273674350e-09 1s 1s 273678470e-09 1s 1s 273678550e-09 0s 0s 273684590e-09 1s 1s 273688750e-09 1s 1s 273688790e-09 0s 0s 273694830e-09 1s 1s 273699030e-09 0s 0s 273705070e-09 1s 1s 273709270e-09 0s 0s 273709310e-09 0s 0s 273715310e-09 1s 1s 273719510e-09 0s 0s 273719590e-09 0s 0s 273725550e-09 1s 1s 273729750e-09 0s 0s 273729870e-09 0s 0s 273735790e-09 1s 1s 273739990e-09 0s 0s 273740150e-09 0s 0s 273746030e-09 1s 1s 273750230e-09 0s 0s 273750430e-09 0s 0s 273756270e-09 1s 1s 273760470e-09 0s 0s 273760710e-09 0s 0s 273766510e-09 1s 1s 273770710e-09 0s 0s 273770990e-09 0s 0s 273776750e-09 1s 1s 273780950e-09 0s 0s 273781270e-09 0s 0s 273786990e-09 1s 1s 273791190e-09 0s 0s 273791550e-09 0s 0s 273797230e-09 1s 1s 273801430e-09 0s 0s 273801830e-09 0s 0s 273807470e-09 1s 1s 273811670e-09 0s 0s 273812110e-09 0s 0s 273817710e-09 1s 1s 273821910e-09 0s 0s 273822390e-09 0s 0s 273827950e-09 1s 1s 273832150e-09 0s 0s 273832670e-09 0s 0s 273838190e-09 1s 1s 273842390e-09 0s 0s 273842950e-09 0s 0s 273848430e-09 1s 1s 273852630e-09 0s 0s 273853230e-09 0s 0s 273858670e-09 1s 1s 273862870e-09 0s 0s 273863510e-09 0s 0s 273868910e-09 1s 1s 273873110e-09 0s 0s 273873790e-09 0s 0s 273879150e-09 1s 1s 273883350e-09 0s 0s 273884070e-09 0s 0s 273889390e-09 1s 1s 273893590e-09 0s 0s 273894350e-09 0s 0s 273899630e-09 1s 1s 273903830e-09 0s 0s 273904630e-09 0s 0s 273909870e-09 1s 1s 273914070e-09 0s 0s 273914910e-09 0s 0s 273920110e-09 1s 1s 273924310e-09 0s 0s 273925190e-09 0s 0s 273930350e-09 1s 1s 273934550e-09 0s 0s 273935470e-09 0s 0s 273940590e-09 1s 1s 273944790e-09 0s 0s 273945750e-09 0s 0s 273950830e-09 1s 1s 273955030e-09 0s 0s 273956030e-09 0s 0s 273961070e-09 1s 1s 273965270e-09 0s 0s 273966310e-09 0s 0s 273971310e-09 1s 1s 273975510e-09 0s 0s 273976590e-09 0s 0s 273981550e-09 1s 1s 273985750e-09 0s 0s 273986870e-09 0s 0s 273991790e-09 1s 1s 273995990e-09 0s 0s 273997150e-09 0s 0s 274002030e-09 1s 1s 274006230e-09 0s 0s 274007430e-09 0s 0s 274012270e-09 1s 1s 274016470e-09 0s 0s 274017710e-09 0s 0s 274022510e-09 1s 1s 274026710e-09 0s 0s 274027990e-09 0s 0s 274032750e-09 1s 1s 274036950e-09 0s 0s 274038270e-09 0s 0s 274042990e-09 1s 1s 274047190e-09 0s 0s 274048550e-09 0s 0s 274053230e-09 1s 1s 274057430e-09 0s 0s 274058830e-09 0s 0s 274063470e-09 1s 1s 274067670e-09 0s 0s 274069110e-09 0s 0s 274073710e-09 1s 1s 274077910e-09 0s 0s 274079390e-09 0s 0s 274083950e-09 1s 1s 274088150e-09 0s 0s 274089670e-09 0s 0s 274094190e-09 1s 1s 274098390e-09 0s 0s 274099950e-09 0s 0s 274104430e-09 1s 1s 274108630e-09 0s 0s 274110230e-09 0s 0s 274114670e-09 1s 1s 274118870e-09 0s 0s 274120510e-09 0s 0s 274124910e-09 1s 1s 274129110e-09 0s 0s 274130790e-09 0s 0s 274135150e-09 1s 1s 274139350e-09 0s 0s 274141070e-09 0s 0s 274145390e-09 1s 1s 274149590e-09 0s 0s 274151350e-09 0s 0s 274155630e-09 1s 1s 274159830e-09 0s 0s 274161630e-09 0s 0s 274165870e-09 1s 1s 274170070e-09 0s 0s 274171910e-09 0s 0s 274176110e-09 1s 1s 274180310e-09 0s 0s 274182190e-09 0s 0s 274186350e-09 1s 1s 274190550e-09 0s 0s 274192470e-09 0s 0s 274196590e-09 1s 1s 274200790e-09 0s 0s 274202750e-09 0s 0s 274206830e-09 1s 1s 274211030e-09 0s 0s 274213030e-09 0s 0s 274217070e-09 1s 1s 274221270e-09 0s 0s 274223310e-09 0s 0s 274227310e-09 1s 1s 274231510e-09 0s 0s 274233590e-09 0s 0s 274237550e-09 1s 1s 274241750e-09 0s 0s 274243870e-09 0s 0s 274247790e-09 1s 1s 274251990e-09 0s 0s 274254150e-09 0s 0s 274258030e-09 1s 1s 274262230e-09 0s 0s 274264430e-09 0s 0s 274268270e-09 1s 1s 274272470e-09 0s 0s 274274710e-09 0s 0s 274278510e-09 1s 1s 274282710e-09 0s 0s 274284990e-09 0s 0s 274288750e-09 1s 1s 274292950e-09 0s 0s 274295270e-09 0s 0s 274298990e-09 1s 1s 274303190e-09 0s 0s 274305550e-09 0s 0s 274309230e-09 1s 1s 274313430e-09 0s 0s 274315830e-09 0s 0s 274319470e-09 1s 1s 274323670e-09 0s 0s 274326110e-09 0s 0s 274329710e-09 1s 1s 274333910e-09 0s 0s 274336390e-09 0s 0s 274339950e-09 1s 1s 274344150e-09 0s 0s 274346670e-09 0s 0s 274350190e-09 1s 1s 274354390e-09 0s 0s 274356950e-09 0s 0s 274360430e-09 1s 1s 274364630e-09 0s 0s 274367230e-09 0s 0s 274370670e-09 1s 1s 274374870e-09 0s 0s 274377510e-09 0s 0s 274380910e-09 1s 1s 274385110e-09 0s 0s 274387790e-09 0s 0s 274391150e-09 1s 1s 274395350e-09 0s 0s 274398070e-09 0s 0s 274401390e-09 1s 1s 274405590e-09 0s 0s 274408350e-09 0s 0s 274411630e-09 1s 1s 274415830e-09 0s 0s 274418630e-09 0s 0s 274421870e-09 1s 1s 274426070e-09 0s 0s 274428910e-09 0s 0s 274432110e-09 1s 1s 274436310e-09 0s 0s 274439190e-09 0s 0s 274442350e-09 1s 1s 274446550e-09 0s 0s 274449470e-09 0s 0s 274452590e-09 1s 1s 274456790e-09 0s 0s 274459750e-09 0s 0s 274462830e-09 1s 1s 274467030e-09 0s 0s 274470030e-09 0s 0s 274473070e-09 1s 1s 274477270e-09 0s 0s 274480310e-09 0s 0s 274483310e-09 1s 1s 274487510e-09 0s 0s 274490590e-09 0s 0s 274493550e-09 1s 1s 274497750e-09 0s 0s 274500870e-09 0s 0s 274503790e-09 1s 1s 274507990e-09 0s 0s 274511150e-09 0s 0s 274514030e-09 1s 1s 274518230e-09 0s 0s 274521430e-09 0s 0s 274524270e-09 1s 1s 274528470e-09 0s 0s 274531710e-09 0s 0s 274534510e-09 1s 1s 274538710e-09 0s 0s 274541990e-09 0s 0s 274544750e-09 1s 1s 274548950e-09 0s 0s 274552270e-09 0s 0s 274554990e-09 1s 1s 274559190e-09 0s 0s 274562550e-09 0s 0s 274565230e-09 1s 1s 274569430e-09 0s 0s 274572830e-09 0s 0s 274575470e-09 1s 1s 274579670e-09 0s 0s 274583110e-09 0s 0s 274585710e-09 1s 1s 274589910e-09 0s 0s 274593390e-09 0s 0s 274595950e-09 1s 1s 274600150e-09 0s 0s 274603670e-09 0s 0s 274606190e-09 1s 1s 274610390e-09 0s 0s 274613950e-09 0s 0s 274616430e-09 1s 1s 274620630e-09 0s 0s 274624230e-09 0s 0s 274626670e-09 1s 1s 274630870e-09 0s 0s 274634510e-09 0s 0s 274636910e-09 1s 1s 274641110e-09 0s 0s 274644790e-09 0s 0s 274647150e-09 1s 1s 274651350e-09 0s 0s 274655070e-09 0s 0s 274657390e-09 1s 1s 274661590e-09 0s 0s 274665350e-09 0s 0s 274667630e-09 1s 1s 274671830e-09 0s 0s 274675630e-09 0s 0s 274677870e-09 1s 1s 274682070e-09 0s 0s 274685910e-09 0s 0s 274688110e-09 1s 1s 274692310e-09 0s 0s 274696190e-09 0s 0s 274698350e-09 1s 1s 274702550e-09 0s 0s 274706470e-09 0s 0s 274708590e-09 1s 1s 274712790e-09 0s 0s 274716750e-09 0s 0s 274718830e-09 1s 1s 274723030e-09 0s 0s 274727030e-09 0s 0s 274729070e-09 1s 1s 274733270e-09 0s 0s 274737310e-09 0s 0s 274739310e-09 1s 1s 274743510e-09 0s 0s 274747590e-09 0s 0s 274749550e-09 1s 1s 274753750e-09 0s 0s 274757870e-09 0s 0s 274759790e-09 1s 1s 274763990e-09 0s 0s 274768150e-09 0s 0s 274770030e-09 1s 1s 274774230e-09 0s 0s 274778430e-09 0s 0s 274780270e-09 1s 1s 274784470e-09 0s 0s 274788710e-09 0s 0s 274790510e-09 1s 1s 274794710e-09 0s 0s 274798990e-09 0s 0s 274800750e-09 1s 1s 274804950e-09 0s 0s 274809270e-09 0s 0s 274810990e-09 1s 1s 274815190e-09 0s 0s 274819550e-09 0s 0s 274821230e-09 1s 1s 274825430e-09 0s 0s 274829830e-09 0s 0s 274831470e-09 1s 1s 274835670e-09 0s 0s 274840110e-09 0s 0s 274841710e-09 1s 1s 274845910e-09 0s 0s 274850390e-09 0s 0s 274851950e-09 1s 1s 274856150e-09 0s 0s 274860670e-09 0s 0s 274862190e-09 1s 1s 274866390e-09 0s 0s 274870950e-09 0s 0s 274872430e-09 1s 1s 274876630e-09 0s 0s 274881230e-09 0s 0s 274882670e-09 1s 1s 274886870e-09 0s 0s 274891510e-09 0s 0s 274892910e-09 1s 1s 274897110e-09 0s 0s 274901790e-09 0s 0s 274903150e-09 1s 1s 274907350e-09 0s 0s 274912070e-09 0s 0s 274913390e-09 1s 1s 274917590e-09 0s 0s 274922350e-09 0s 0s 274923630e-09 1s 1s 274927830e-09 0s 0s 274932630e-09 0s 0s 274933870e-09 1s 1s 274938070e-09 0s 0s 274942910e-09 0s 0s 274944110e-09 1s 1s 274948310e-09 0s 0s 274953190e-09 0s 0s 274954350e-09 1s 1s 274958550e-09 0s 0s 274963470e-09 0s 0s 274964590e-09 1s 1s 274968790e-09 0s 0s 274973750e-09 0s 0s 274974830e-09 1s 1s 274979030e-09 0s 0s 274984030e-09 0s 0s 274985070e-09 1s 1s 274989270e-09 0s 0s 274994310e-09 0s 0s 274995310e-09 1s 1s 274999510e-09 0s 0s 275004590e-09 0s 0s 275005550e-09 1s 1s 275009750e-09 0s 0s 275014870e-09 0s 0s 275015790e-09 1s 1s 275019990e-09 0s 0s 275025150e-09 0s 0s 275026030e-09 1s 1s 275030230e-09 0s 0s 275035430e-09 0s 0s 275036270e-09 1s 1s 275040470e-09 0s 0s 275045710e-09 0s 0s 275046510e-09 1s 1s 275050710e-09 0s 0s 275055990e-09 0s 0s 275056750e-09 1s 1s 275060950e-09 0s 0s 275066270e-09 0s 0s 275066990e-09 1s 1s 275071190e-09 0s 0s 275076550e-09 0s 0s 275077230e-09 1s 1s 275081430e-09 0s 0s 275086830e-09 0s 0s 275087470e-09 1s 1s 275091670e-09 0s 0s 275097110e-09 0s 0s 275097710e-09 1s 1s 275101910e-09 0s 0s 275107390e-09 0s 0s 275107950e-09 1s 1s 275112150e-09 0s 0s 275117670e-09 0s 0s 275118190e-09 1s 1s 275122390e-09 0s 0s 275127950e-09 0s 0s 275128430e-09 1s 1s 275132630e-09 0s 0s 275138230e-09 0s 0s 275138670e-09 1s 1s 275142870e-09 0s 0s 275148510e-09 0s 0s 275148910e-09 1s 1s 275153110e-09 0s 0s 275158790e-09 0s 0s 275159150e-09 1s 1s 275163350e-09 0s 0s 275169070e-09 0s 0s 275169390e-09 1s 1s 275173590e-09 0s 0s 275179350e-09 0s 0s 275179630e-09 1s 1s 275183830e-09 0s 0s 275189630e-09 0s 0s 275189870e-09 1s 1s 275194070e-09 0s 0s 275199910e-09 0s 0s 275200110e-09 1s 1s 275204310e-09 0s 0s 275210190e-09 0s 0s 275210350e-09 1s 1s 275214550e-09 0s 0s 275220470e-09 0s 0s 275220590e-09 1s 1s 275224790e-09 0s 0s 275230750e-09 0s 0s 275230830e-09 1s 1s 275235030e-09 0s 0s 275241030e-09 0s 0s 275241070e-09 1s 1s 275245270e-09 0s 0s 275251310e-09 1s 1s 275251350e-09 1s 1s 275255550e-09 0s 0s 275261550e-09 1s 1s 275261630e-09 1s 1s 275265790e-09 0s 0s 275271790e-09 1s 1s 275271910e-09 1s 1s 275276030e-09 0s 0s 275282030e-09 1s 1s 275282190e-09 1s 1s 275286270e-09 0s 0s 275292270e-09 1s 1s 275292470e-09 1s 1s 275296510e-09 0s 0s 275302510e-09 1s 1s 275302750e-09 1s 1s 275306750e-09 0s 0s 275312750e-09 1s 1s 275313030e-09 1s 1s 275316990e-09 0s 0s 275322990e-09 1s 1s 275323310e-09 1s 1s 275327230e-09 0s 0s 275333230e-09 1s 1s 275333590e-09 1s 1s 275337470e-09 0s 0s 275343470e-09 1s 1s 275343870e-09 1s 1s 275347710e-09 0s 0s 275353710e-09 1s 1s 275354150e-09 1s 1s 275357950e-09 0s 0s 275363950e-09 1s 1s 275364430e-09 1s 1s 275368190e-09 0s 0s 275374190e-09 1s 1s 275374710e-09 1s 1s 275378430e-09 0s 0s 275384430e-09 1s 1s 275384990e-09 1s 1s 275388670e-09 0s 0s 275394670e-09 1s 1s 275395270e-09 1s 1s 275398910e-09 0s 0s 275404910e-09 1s 1s 275405550e-09 1s 1s 275409150e-09 0s 0s 275415150e-09 1s 1s 275415830e-09 1s 1s 275419390e-09 0s 0s 275425390e-09 1s 1s 275426110e-09 1s 1s 275429630e-09 0s 0s 275435630e-09 1s 1s 275436390e-09 1s 1s 275439870e-09 0s 0s 275445870e-09 1s 1s 275446670e-09 1s 1s 275450110e-09 0s 0s 275456110e-09 1s 1s 275456950e-09 1s 1s 275460350e-09 0s 0s 275466350e-09 1s 1s 275467230e-09 1s 1s 275470590e-09 0s 0s 275476590e-09 1s 1s 275477510e-09 1s 1s 275480830e-09 0s 0s 275486830e-09 1s 1s 275487790e-09 1s 1s 275491070e-09 0s 0s 275497070e-09 1s 1s 275498070e-09 1s 1s 275501310e-09 0s 0s 275507310e-09 1s 1s 275508350e-09 1s 1s 275511550e-09 0s 0s 275517550e-09 1s 1s 275518630e-09 1s 1s 275521790e-09 0s 0s 275527790e-09 1s 1s 275528910e-09 1s 1s 275532030e-09 0s 0s 275538030e-09 1s 1s 275539190e-09 1s 1s 275542270e-09 0s 0s 275548270e-09 1s 1s 275549470e-09 1s 1s 275552510e-09 0s 0s 275558510e-09 1s 1s 275559750e-09 1s 1s 275562750e-09 0s 0s 275568750e-09 1s 1s 275570030e-09 1s 1s 275572990e-09 0s 0s 275578990e-09 1s 1s 275580310e-09 1s 1s 275583230e-09 0s 0s 275589230e-09 1s 1s 275590590e-09 1s 1s 275593470e-09 0s 0s 275599470e-09 1s 1s 275600870e-09 1s 1s 275603710e-09 0s 0s 275609710e-09 1s 1s 275611150e-09 1s 1s 275613950e-09 0s 0s 275619950e-09 1s 1s 275621430e-09 1s 1s 275624190e-09 0s 0s 275630190e-09 1s 1s 275631710e-09 1s 1s 275634430e-09 0s 0s 275640430e-09 1s 1s 275641990e-09 1s 1s 275644670e-09 0s 0s 275650670e-09 1s 1s 275652270e-09 1s 1s 275654910e-09 0s 0s 275660910e-09 1s 1s 275662550e-09 1s 1s 275665150e-09 0s 0s 275671150e-09 1s 1s 275672830e-09 1s 1s 275675390e-09 0s 0s 275681390e-09 1s 1s 275683110e-09 1s 1s 275685630e-09 0s 0s 275691630e-09 1s 1s 275693390e-09 1s 1s 275695870e-09 0s 0s 275701870e-09 1s 1s 275703670e-09 1s 1s 275706110e-09 0s 0s 275712110e-09 1s 1s 275713950e-09 1s 1s 275716350e-09 0s 0s 275722350e-09 1s 1s 275724230e-09 1s 1s 275726590e-09 0s 0s 275732590e-09 1s 1s 275734510e-09 1s 1s 275736830e-09 0s 0s 275742830e-09 1s 1s 275744790e-09 1s 1s 275747070e-09 0s 0s 275753070e-09 1s 1s 275755070e-09 1s 1s 275757310e-09 0s 0s 275763310e-09 1s 1s 275765350e-09 1s 1s 275767550e-09 0s 0s 275773550e-09 1s 1s 275775630e-09 1s 1s 275777790e-09 0s 0s 275783790e-09 1s 1s 275785910e-09 1s 1s 275788030e-09 0s 0s 275794030e-09 1s 1s 275796190e-09 1s 1s 275798270e-09 0s 0s 275804270e-09 1s 1s 275806470e-09 1s 1s 275808510e-09 0s 0s 275814510e-09 1s 1s 275816750e-09 1s 1s 275818750e-09 0s 0s 275824750e-09 1s 1s 275827030e-09 1s 1s 275828990e-09 0s 0s 275834990e-09 1s 1s 275837310e-09 1s 1s 275839230e-09 0s 0s 275845230e-09 1s 1s 275847590e-09 1s 1s 275849470e-09 0s 0s 275855470e-09 1s 1s 275857870e-09 1s 1s 275859710e-09 0s 0s 275865710e-09 1s 1s 275868150e-09 1s 1s 275869950e-09 0s 0s 275875950e-09 1s 1s 275878430e-09 1s 1s 275880190e-09 0s 0s 275886190e-09 1s 1s 275888710e-09 1s 1s 275890430e-09 0s 0s 275896430e-09 1s 1s 275898990e-09 1s 1s 275900670e-09 0s 0s 275906670e-09 1s 1s 275909270e-09 1s 1s 275910910e-09 0s 0s 275916910e-09 1s 1s 275919550e-09 1s 1s 275921150e-09 0s 0s 275927150e-09 1s 1s 275929830e-09 1s 1s 275931390e-09 0s 0s 275937390e-09 1s 1s 275940110e-09 1s 1s 275941630e-09 0s 0s 275947630e-09 1s 1s 275950390e-09 1s 1s 275951870e-09 0s 0s 275957870e-09 1s 1s 275960670e-09 1s 1s 275962110e-09 0s 0s 275968110e-09 1s 1s 275970950e-09 1s 1s 275972350e-09 0s 0s 275978350e-09 1s 1s 275981230e-09 1s 1s 275982590e-09 0s 0s 275988590e-09 1s 1s 275991510e-09 1s 1s 275992830e-09 0s 0s 275998830e-09 1s 1s 276001790e-09 1s 1s 276003070e-09 0s 0s 276009070e-09 1s 1s 276012070e-09 1s 1s 276013310e-09 0s 0s 276019310e-09 1s 1s 276022350e-09 1s 1s 276023550e-09 0s 0s 276029550e-09 1s 1s 276032630e-09 1s 1s 276033790e-09 0s 0s 276039790e-09 1s 1s 276042910e-09 1s 1s 276044030e-09 0s 0s 276050030e-09 1s 1s 276053190e-09 1s 1s 276054270e-09 0s 0s 276060270e-09 1s 1s 276063470e-09 1s 1s 276064510e-09 0s 0s 276070510e-09 1s 1s 276073750e-09 1s 1s 276074750e-09 0s 0s 276080750e-09 1s 1s 276084030e-09 1s 1s 276084990e-09 0s 0s 276090990e-09 1s 1s 276094310e-09 1s 1s 276095230e-09 0s 0s 276101230e-09 1s 1s 276104590e-09 1s 1s 276105470e-09 0s 0s 276111470e-09 1s 1s 276114870e-09 1s 1s 276115710e-09 0s 0s 276121710e-09 1s 1s 276125150e-09 1s 1s 276125950e-09 0s 0s 276131950e-09 1s 1s 276135430e-09 1s 1s 276136190e-09 0s 0s 276142190e-09 1s 1s 276145710e-09 1s 1s 276146430e-09 0s 0s 276152430e-09 1s 1s 276155990e-09 1s 1s 276156670e-09 0s 0s 276162670e-09 1s 1s 276166270e-09 1s 1s 276166910e-09 0s 0s 276172910e-09 1s 1s 276176550e-09 1s 1s 276177150e-09 0s 0s 276183150e-09 1s 1s 276186830e-09 1s 1s 276187390e-09 0s 0s 276193390e-09 1s 1s 276197110e-09 1s 1s 276197630e-09 0s 0s 276203630e-09 1s 1s 276207390e-09 1s 1s 276207870e-09 0s 0s 276213870e-09 1s 1s 276217670e-09 1s 1s 276218110e-09 0s 0s 276224110e-09 1s 1s 276227950e-09 1s 1s 276228350e-09 0s 0s 276234350e-09 1s 1s 276238230e-09 1s 1s 276238590e-09 0s 0s 276244590e-09 1s 1s 276248510e-09 1s 1s 276248830e-09 0s 0s 276254830e-09 1s 1s 276258790e-09 1s 1s 276259070e-09 0s 0s 276265070e-09 1s 1s 276269070e-09 1s 1s 276269310e-09 0s 0s 276275310e-09 1s 1s 276279350e-09 1s 1s 276279550e-09 0s 0s 276285550e-09 1s 1s 276289630e-09 1s 1s 276289790e-09 0s 0s 276295790e-09 1s 1s 276299910e-09 1s 1s 276300030e-09 0s 0s 276306030e-09 1s 1s 276310190e-09 1s 1s 276310270e-09 0s 0s 276316270e-09 1s 1s 276320470e-09 1s 1s 276320510e-09 0s 0s 276326510e-09 1s 1s 276330750e-09 0s 0s 276336750e-09 1s 1s 276340990e-09 0s 0s 276341030e-09 0s 0s 276346990e-09 1s 1s 276351230e-09 0s 0s 276351310e-09 0s 0s 276357230e-09 1s 1s 276361470e-09 0s 0s 276361590e-09 0s 0s 276367470e-09 1s 1s 276371710e-09 0s 0s 276371870e-09 0s 0s 276377710e-09 1s 1s 276381950e-09 0s 0s 276382150e-09 0s 0s 276387950e-09 1s 1s 276392190e-09 0s 0s 276392430e-09 0s 0s 276398190e-09 1s 1s 276402430e-09 0s 0s 276402710e-09 0s 0s 276408430e-09 1s 1s 276412670e-09 0s 0s 276412990e-09 0s 0s 276418670e-09 1s 1s 276422910e-09 0s 0s 276423270e-09 0s 0s 276428910e-09 1s 1s 276433150e-09 0s 0s 276433550e-09 0s 0s 276439150e-09 1s 1s 276443390e-09 0s 0s 276443830e-09 0s 0s 276449390e-09 1s 1s 276453630e-09 0s 0s 276454110e-09 0s 0s 276459630e-09 1s 1s 276463870e-09 0s 0s 276464390e-09 0s 0s 276469870e-09 1s 1s 276474110e-09 0s 0s 276474670e-09 0s 0s 276480110e-09 1s 1s 276484350e-09 0s 0s 276484950e-09 0s 0s 276490350e-09 1s 1s 276494590e-09 0s 0s 276495230e-09 0s 0s 276500590e-09 1s 1s 276504830e-09 0s 0s 276505510e-09 0s 0s 276510830e-09 1s 1s 276515070e-09 0s 0s 276515790e-09 0s 0s 276521070e-09 1s 1s 276525310e-09 0s 0s 276526070e-09 0s 0s 276531310e-09 1s 1s 276535550e-09 0s 0s 276536350e-09 0s 0s 276541550e-09 1s 1s 276545790e-09 0s 0s 276546630e-09 0s 0s 276551790e-09 1s 1s 276556030e-09 0s 0s 276556910e-09 0s 0s 276562030e-09 1s 1s 276566270e-09 0s 0s 276567190e-09 0s 0s 276572270e-09 1s 1s 276576510e-09 0s 0s 276577470e-09 0s 0s 276582510e-09 1s 1s 276586750e-09 0s 0s 276587750e-09 0s 0s 276592750e-09 1s 1s 276596990e-09 0s 0s 276598030e-09 0s 0s 276602990e-09 1s 1s 276607230e-09 0s 0s 276608310e-09 0s 0s 276613230e-09 1s 1s 276617470e-09 0s 0s 276618590e-09 0s 0s 276623470e-09 1s 1s 276627710e-09 0s 0s 276628870e-09 0s 0s 276633710e-09 1s 1s 276637950e-09 0s 0s 276639150e-09 0s 0s 276643950e-09 1s 1s 276648190e-09 0s 0s 276649430e-09 0s 0s 276654190e-09 1s 1s 276658430e-09 0s 0s 276659710e-09 0s 0s 276664430e-09 1s 1s 276668670e-09 0s 0s 276669990e-09 0s 0s 276674670e-09 1s 1s 276678910e-09 0s 0s 276680270e-09 0s 0s 276684910e-09 1s 1s 276689150e-09 0s 0s 276690550e-09 0s 0s 276695150e-09 1s 1s 276699390e-09 0s 0s 276700830e-09 0s 0s 276705390e-09 1s 1s 276709630e-09 0s 0s 276711110e-09 0s 0s 276715630e-09 1s 1s 276719870e-09 0s 0s 276721390e-09 0s 0s 276725870e-09 1s 1s 276730110e-09 0s 0s 276731670e-09 0s 0s 276736110e-09 1s 1s 276740350e-09 0s 0s 276741950e-09 0s 0s 276746350e-09 1s 1s 276750590e-09 0s 0s 276752230e-09 0s 0s 276756590e-09 1s 1s 276760830e-09 0s 0s 276762510e-09 0s 0s 276766830e-09 1s 1s 276771070e-09 0s 0s 276772790e-09 0s 0s 276777070e-09 1s 1s 276781310e-09 0s 0s 276783070e-09 0s 0s 276787310e-09 1s 1s 276791550e-09 0s 0s 276793350e-09 0s 0s 276797550e-09 1s 1s 276801790e-09 0s 0s 276803630e-09 0s 0s 276807790e-09 1s 1s 276812030e-09 0s 0s 276813910e-09 0s 0s 276818030e-09 1s 1s 276822270e-09 0s 0s 276824190e-09 0s 0s 276828270e-09 1s 1s 276832510e-09 0s 0s 276834470e-09 0s 0s 276838510e-09 1s 1s 276842750e-09 0s 0s 276844750e-09 0s 0s 276848750e-09 1s 1s 276852990e-09 0s 0s 276855030e-09 0s 0s 276858990e-09 1s 1s 276863230e-09 0s 0s 276865310e-09 0s 0s 276869230e-09 1s 1s 276873470e-09 0s 0s 276875590e-09 0s 0s 276879470e-09 1s 1s 276883710e-09 0s 0s 276885870e-09 0s 0s 276889710e-09 1s 1s 276893950e-09 0s 0s 276896150e-09 0s 0s 276899950e-09 1s 1s 276904190e-09 0s 0s 276906430e-09 0s 0s 276910190e-09 1s 1s 276914430e-09 0s 0s 276916710e-09 0s 0s 276920430e-09 1s 1s 276924670e-09 0s 0s 276926990e-09 0s 0s 276930670e-09 1s 1s 276934910e-09 0s 0s 276937270e-09 0s 0s 276940910e-09 1s 1s 276945150e-09 0s 0s 276947550e-09 0s 0s 276951150e-09 1s 1s 276955390e-09 0s 0s 276957830e-09 0s 0s 276961390e-09 1s 1s 276965630e-09 0s 0s 276968110e-09 0s 0s 276971630e-09 1s 1s 276975870e-09 0s 0s 276978390e-09 0s 0s 276981870e-09 1s 1s 276986110e-09 0s 0s 276988670e-09 0s 0s 276992110e-09 1s 1s 276996350e-09 0s 0s 276998950e-09 0s 0s 277002350e-09 1s 1s 277006590e-09 0s 0s 277009230e-09 0s 0s 277012590e-09 1s 1s 277016830e-09 0s 0s 277019510e-09 0s 0s 277022830e-09 1s 1s 277027070e-09 0s 0s 277029790e-09 0s 0s 277033070e-09 1s 1s 277037310e-09 0s 0s 277040070e-09 0s 0s 277043310e-09 1s 1s 277047550e-09 0s 0s 277050350e-09 0s 0s 277053550e-09 1s 1s 277057790e-09 0s 0s 277060630e-09 0s 0s 277063790e-09 1s 1s 277068030e-09 0s 0s 277070910e-09 0s 0s 277074030e-09 1s 1s 277078270e-09 0s 0s 277081190e-09 0s 0s 277084270e-09 1s 1s 277088510e-09 0s 0s 277091470e-09 0s 0s 277094510e-09 1s 1s 277098750e-09 0s 0s 277101750e-09 0s 0s 277104750e-09 1s 1s 277108990e-09 0s 0s 277112030e-09 0s 0s 277114990e-09 1s 1s 277119230e-09 0s 0s 277122310e-09 0s 0s 277125230e-09 1s 1s 277129470e-09 0s 0s 277132590e-09 0s 0s 277135470e-09 1s 1s 277139710e-09 0s 0s 277142870e-09 0s 0s 277145710e-09 1s 1s 277149950e-09 0s 0s 277153150e-09 0s 0s 277155950e-09 1s 1s 277160190e-09 0s 0s 277163430e-09 0s 0s 277166190e-09 1s 1s 277170430e-09 0s 0s 277173710e-09 0s 0s 277176430e-09 1s 1s 277180670e-09 0s 0s 277183990e-09 0s 0s 277186670e-09 1s 1s 277190910e-09 0s 0s 277194270e-09 0s 0s 277196910e-09 1s 1s 277201150e-09 0s 0s 277204550e-09 0s 0s 277207150e-09 1s 1s 277211390e-09 0s 0s 277214830e-09 0s 0s 277217390e-09 1s 1s 277221630e-09 0s 0s 277225110e-09 0s 0s 277227630e-09 1s 1s 277231870e-09 0s 0s 277235390e-09 0s 0s 277237870e-09 1s 1s 277242110e-09 0s 0s 277245670e-09 0s 0s 277248110e-09 1s 1s 277252350e-09 0s 0s 277255950e-09 0s 0s 277258350e-09 1s 1s 277262590e-09 0s 0s 277266230e-09 0s 0s 277268590e-09 1s 1s 277272830e-09 0s 0s 277276510e-09 0s 0s 277278830e-09 1s 1s 277283070e-09 0s 0s 277286790e-09 0s 0s 277289070e-09 1s 1s 277293310e-09 0s 0s 277297070e-09 0s 0s 277299310e-09 1s 1s 277303550e-09 0s 0s 277307350e-09 0s 0s 277309550e-09 1s 1s 277313790e-09 0s 0s 277317630e-09 0s 0s 277319790e-09 1s 1s 277324030e-09 0s 0s 277327910e-09 0s 0s 277330030e-09 1s 1s 277334270e-09 0s 0s 277338190e-09 0s 0s 277340270e-09 1s 1s 277344510e-09 0s 0s 277348470e-09 0s 0s 277350510e-09 1s 1s 277354750e-09 0s 0s 277358750e-09 0s 0s 277360750e-09 1s 1s 277364990e-09 0s 0s 277369030e-09 0s 0s 277370990e-09 1s 1s 277375230e-09 0s 0s 277379310e-09 0s 0s 277381230e-09 1s 1s 277385470e-09 0s 0s 277389590e-09 0s 0s 277391470e-09 1s 1s 277395710e-09 0s 0s 277399870e-09 0s 0s 277401710e-09 1s 1s 277405950e-09 0s 0s 277410150e-09 0s 0s 277411950e-09 1s 1s 277416190e-09 0s 0s 277420430e-09 0s 0s 277422190e-09 1s 1s 277426430e-09 0s 0s 277430710e-09 0s 0s 277432430e-09 1s 1s 277436670e-09 0s 0s 277440990e-09 0s 0s 277442670e-09 1s 1s 277446910e-09 0s 0s 277451270e-09 0s 0s 277452910e-09 1s 1s 277457150e-09 0s 0s 277461550e-09 0s 0s 277463150e-09 1s 1s 277467390e-09 0s 0s 277471830e-09 0s 0s 277473390e-09 1s 1s 277477630e-09 0s 0s 277482110e-09 0s 0s 277483630e-09 1s 1s 277487870e-09 0s 0s 277492390e-09 0s 0s 277493870e-09 1s 1s 277498110e-09 0s 0s 277502670e-09 0s 0s 277504110e-09 1s 1s 277508350e-09 0s 0s 277512950e-09 0s 0s 277514350e-09 1s 1s 277518590e-09 0s 0s 277523230e-09 0s 0s 277524590e-09 1s 1s 277528830e-09 0s 0s 277533510e-09 0s 0s 277534830e-09 1s 1s 277539070e-09 0s 0s 277543790e-09 0s 0s 277545070e-09 1s 1s 277549310e-09 0s 0s 277554070e-09 0s 0s 277555310e-09 1s 1s 277559550e-09 0s 0s 277564350e-09 0s 0s 277565550e-09 1s 1s 277569790e-09 0s 0s 277574630e-09 0s 0s 277575790e-09 1s 1s 277580030e-09 0s 0s 277584910e-09 0s 0s 277586030e-09 1s 1s 277590270e-09 0s 0s 277595190e-09 0s 0s 277596270e-09 1s 1s 277600510e-09 0s 0s 277605470e-09 0s 0s 277606510e-09 1s 1s 277610750e-09 0s 0s 277615750e-09 0s 0s 277616750e-09 1s 1s 277620990e-09 0s 0s 277626030e-09 0s 0s 277626990e-09 1s 1s 277631230e-09 0s 0s 277636310e-09 0s 0s 277637230e-09 1s 1s 277641470e-09 0s 0s 277646590e-09 0s 0s 277647470e-09 1s 1s 277651710e-09 0s 0s 277656870e-09 0s 0s 277657710e-09 1s 1s 277661950e-09 0s 0s 277667150e-09 0s 0s 277667950e-09 1s 1s 277672190e-09 0s 0s 277677430e-09 0s 0s 277678190e-09 1s 1s 277682430e-09 0s 0s 277687710e-09 0s 0s 277688430e-09 1s 1s 277692670e-09 0s 0s 277697990e-09 0s 0s 277698670e-09 1s 1s 277702910e-09 0s 0s 277708270e-09 0s 0s 277708910e-09 1s 1s 277713150e-09 0s 0s 277718550e-09 0s 0s 277719150e-09 1s 1s 277723390e-09 0s 0s 277728830e-09 0s 0s 277729390e-09 1s 1s 277733630e-09 0s 0s 277739110e-09 0s 0s 277739630e-09 1s 1s 277743870e-09 0s 0s 277749390e-09 0s 0s 277749870e-09 1s 1s 277754110e-09 0s 0s 277759670e-09 0s 0s 277760110e-09 1s 1s 277764350e-09 0s 0s 277769950e-09 0s 0s 277770350e-09 1s 1s 277774590e-09 0s 0s 277780230e-09 0s 0s 277780590e-09 1s 1s 277784830e-09 0s 0s 277790510e-09 0s 0s 277790830e-09 1s 1s 277795070e-09 0s 0s 277800790e-09 0s 0s 277801070e-09 1s 1s 277805310e-09 0s 0s 277811070e-09 0s 0s 277811310e-09 1s 1s 277815550e-09 0s 0s 277821350e-09 0s 0s 277821550e-09 1s 1s 277825790e-09 0s 0s 277831630e-09 0s 0s 277831790e-09 1s 1s 277836030e-09 0s 0s 277841910e-09 0s 0s 277842030e-09 1s 1s 277846270e-09 0s 0s 277852190e-09 0s 0s 277852270e-09 1s 1s 277856510e-09 0s 0s 277862470e-09 0s 0s 277862510e-09 1s 1s 277866750e-09 0s 0s 277872750e-09 1s 1s 277872790e-09 1s 1s 277877030e-09 0s 0s 277882990e-09 1s 1s 277883070e-09 1s 1s 277887270e-09 0s 0s 277893230e-09 1s 1s 277893350e-09 1s 1s 277897510e-09 0s 0s 277903470e-09 1s 1s 277903630e-09 1s 1s 277907750e-09 0s 0s 277913710e-09 1s 1s 277913910e-09 1s 1s 277917990e-09 0s 0s 277923950e-09 1s 1s 277924190e-09 1s 1s 277928230e-09 0s 0s 277934190e-09 1s 1s 277934470e-09 1s 1s 277938470e-09 0s 0s 277944430e-09 1s 1s 277944750e-09 1s 1s 277948710e-09 0s 0s 277954670e-09 1s 1s 277955030e-09 1s 1s 277958950e-09 0s 0s 277964910e-09 1s 1s 277965310e-09 1s 1s 277969190e-09 0s 0s 277975150e-09 1s 1s 277975590e-09 1s 1s 277979430e-09 0s 0s 277985390e-09 1s 1s 277985870e-09 1s 1s 277989670e-09 0s 0s 277995630e-09 1s 1s 277996150e-09 1s 1s 277999910e-09 0s 0s 278005870e-09 1s 1s 278006430e-09 1s 1s 278010150e-09 0s 0s 278016110e-09 1s 1s 278016710e-09 1s 1s 278020390e-09 0s 0s 278026350e-09 1s 1s 278026990e-09 1s 1s 278030630e-09 0s 0s 278036590e-09 1s 1s 278037270e-09 1s 1s 278040870e-09 0s 0s 278046830e-09 1s 1s 278047550e-09 1s 1s 278051110e-09 0s 0s 278057070e-09 1s 1s 278057830e-09 1s 1s 278061350e-09 0s 0s 278067310e-09 1s 1s 278068110e-09 1s 1s 278071590e-09 0s 0s 278077550e-09 1s 1s 278078390e-09 1s 1s 278081830e-09 0s 0s 278087790e-09 1s 1s 278088670e-09 1s 1s 278092070e-09 0s 0s 278098030e-09 1s 1s 278098950e-09 1s 1s 278102310e-09 0s 0s 278108270e-09 1s 1s 278109230e-09 1s 1s 278112550e-09 0s 0s 278118510e-09 1s 1s 278119510e-09 1s 1s 278122790e-09 0s 0s 278128750e-09 1s 1s 278129790e-09 1s 1s 278133030e-09 0s 0s 278138990e-09 1s 1s 278140070e-09 1s 1s 278143270e-09 0s 0s 278149230e-09 1s 1s 278150350e-09 1s 1s 278153510e-09 0s 0s 278159470e-09 1s 1s 278160630e-09 1s 1s 278163750e-09 0s 0s 278169710e-09 1s 1s 278170910e-09 1s 1s 278173990e-09 0s 0s 278179950e-09 1s 1s 278181190e-09 1s 1s 278184230e-09 0s 0s 278190190e-09 1s 1s 278191470e-09 1s 1s 278194470e-09 0s 0s 278200430e-09 1s 1s 278201750e-09 1s 1s 278204710e-09 0s 0s 278210670e-09 1s 1s 278212030e-09 1s 1s 278214950e-09 0s 0s 278220910e-09 1s 1s 278222310e-09 1s 1s 278225190e-09 0s 0s 278231150e-09 1s 1s 278232590e-09 1s 1s 278235430e-09 0s 0s 278241390e-09 1s 1s 278242870e-09 1s 1s 278245670e-09 0s 0s 278251630e-09 1s 1s 278253150e-09 1s 1s 278255910e-09 0s 0s 278261870e-09 1s 1s 278263430e-09 1s 1s 278266150e-09 0s 0s 278272110e-09 1s 1s 278273710e-09 1s 1s 278276390e-09 0s 0s 278282350e-09 1s 1s 278283990e-09 1s 1s 278286630e-09 0s 0s 278292590e-09 1s 1s 278294270e-09 1s 1s 278296870e-09 0s 0s 278302830e-09 1s 1s 278304550e-09 1s 1s 278307110e-09 0s 0s 278313070e-09 1s 1s 278314830e-09 1s 1s 278317350e-09 0s 0s 278323310e-09 1s 1s 278325110e-09 1s 1s 278327590e-09 0s 0s 278333550e-09 1s 1s 278335390e-09 1s 1s 278337830e-09 0s 0s 278343790e-09 1s 1s 278345670e-09 1s 1s 278348070e-09 0s 0s 278354030e-09 1s 1s 278355950e-09 1s 1s 278358310e-09 0s 0s 278364270e-09 1s 1s 278366230e-09 1s 1s 278368550e-09 0s 0s 278374510e-09 1s 1s 278376510e-09 1s 1s 278378790e-09 0s 0s 278384750e-09 1s 1s 278386790e-09 1s 1s 278389030e-09 0s 0s 278394990e-09 1s 1s 278397070e-09 1s 1s 278399270e-09 0s 0s 278405230e-09 1s 1s 278407350e-09 1s 1s 278409510e-09 0s 0s 278415470e-09 1s 1s 278417630e-09 1s 1s 278419750e-09 0s 0s 278425710e-09 1s 1s 278427910e-09 1s 1s 278429990e-09 0s 0s 278435950e-09 1s 1s 278438190e-09 1s 1s 278440230e-09 0s 0s 278446190e-09 1s 1s 278448470e-09 1s 1s 278450470e-09 0s 0s 278456430e-09 1s 1s 278458750e-09 1s 1s 278460710e-09 0s 0s 278466670e-09 1s 1s 278469030e-09 1s 1s 278470950e-09 0s 0s 278476910e-09 1s 1s 278479310e-09 1s 1s 278481190e-09 0s 0s 278487150e-09 1s 1s 278489590e-09 1s 1s 278491430e-09 0s 0s 278497390e-09 1s 1s 278499870e-09 1s 1s 278501670e-09 0s 0s 278507630e-09 1s 1s 278510150e-09 1s 1s 278511910e-09 0s 0s 278517870e-09 1s 1s 278520430e-09 1s 1s 278522150e-09 0s 0s 278528110e-09 1s 1s 278530710e-09 1s 1s 278532390e-09 0s 0s 278538350e-09 1s 1s 278540990e-09 1s 1s 278542630e-09 0s 0s 278548590e-09 1s 1s 278551270e-09 1s 1s 278552870e-09 0s 0s 278558830e-09 1s 1s 278561550e-09 1s 1s 278563110e-09 0s 0s 278569070e-09 1s 1s 278571830e-09 1s 1s 278573350e-09 0s 0s 278579310e-09 1s 1s 278582110e-09 1s 1s 278583590e-09 0s 0s 278589550e-09 1s 1s 278592390e-09 1s 1s 278593830e-09 0s 0s 278599790e-09 1s 1s 278602670e-09 1s 1s 278604070e-09 0s 0s 278610030e-09 1s 1s 278612950e-09 1s 1s 278614310e-09 0s 0s 278620270e-09 1s 1s 278623230e-09 1s 1s 278624550e-09 0s 0s 278630510e-09 1s 1s 278633510e-09 1s 1s 278634790e-09 0s 0s 278640750e-09 1s 1s 278643790e-09 1s 1s 278645030e-09 0s 0s 278650990e-09 1s 1s 278654070e-09 1s 1s 278655270e-09 0s 0s 278661230e-09 1s 1s 278664350e-09 1s 1s 278665510e-09 0s 0s 278671470e-09 1s 1s 278674630e-09 1s 1s 278675750e-09 0s 0s 278681710e-09 1s 1s 278684910e-09 1s 1s 278685990e-09 0s 0s 278691950e-09 1s 1s 278695190e-09 1s 1s 278696230e-09 0s 0s 278702190e-09 1s 1s 278705470e-09 1s 1s 278706470e-09 0s 0s 278712430e-09 1s 1s 278715750e-09 1s 1s 278716710e-09 0s 0s 278722670e-09 1s 1s 278726030e-09 1s 1s 278726950e-09 0s 0s 278732910e-09 1s 1s 278736310e-09 1s 1s 278737190e-09 0s 0s 278743150e-09 1s 1s 278746590e-09 1s 1s 278747430e-09 0s 0s 278753390e-09 1s 1s 278756870e-09 1s 1s 278757670e-09 0s 0s 278763630e-09 1s 1s 278767150e-09 1s 1s 278767910e-09 0s 0s 278773870e-09 1s 1s 278777430e-09 1s 1s 278778150e-09 0s 0s 278784110e-09 1s 1s 278787710e-09 1s 1s 278788390e-09 0s 0s 278794350e-09 1s 1s 278797990e-09 1s 1s 278798630e-09 0s 0s 278804590e-09 1s 1s 278808270e-09 1s 1s 278808870e-09 0s 0s 278814830e-09 1s 1s 278818550e-09 1s 1s 278819110e-09 0s 0s 278825070e-09 1s 1s 278828830e-09 1s 1s 278829350e-09 0s 0s 278835310e-09 1s 1s 278839110e-09 1s 1s 278839590e-09 0s 0s 278845550e-09 1s 1s 278849390e-09 1s 1s 278849830e-09 0s 0s 278855790e-09 1s 1s 278859670e-09 1s 1s 278860070e-09 0s 0s 278866030e-09 1s 1s 278869950e-09 1s 1s 278870310e-09 0s 0s 278876270e-09 1s 1s 278880230e-09 1s 1s 278880550e-09 0s 0s 278886510e-09 1s 1s 278890510e-09 1s 1s 278890790e-09 0s 0s 278896750e-09 1s 1s 278900790e-09 1s 1s 278901030e-09 0s 0s 278906990e-09 1s 1s 278911070e-09 1s 1s 278911270e-09 0s 0s 278917230e-09 1s 1s 278921350e-09 1s 1s 278921510e-09 0s 0s 278927470e-09 1s 1s 278931630e-09 1s 1s 278931750e-09 0s 0s 278937710e-09 1s 1s 278941910e-09 1s 1s 278941990e-09 0s 0s 278947950e-09 1s 1s 278952190e-09 1s 1s 278952230e-09 0s 0s 278958190e-09 1s 1s 278962470e-09 0s 0s 278968430e-09 1s 1s 278972710e-09 0s 0s 278972750e-09 0s 0s 278978670e-09 1s 1s 278982950e-09 0s 0s 278983030e-09 0s 0s 278988910e-09 1s 1s 278993190e-09 0s 0s 278993310e-09 0s 0s 278999150e-09 1s 1s 279003430e-09 0s 0s 279003590e-09 0s 0s 279009390e-09 1s 1s 279013670e-09 0s 0s 279013870e-09 0s 0s 279019630e-09 1s 1s 279023910e-09 0s 0s 279024150e-09 0s 0s 279029870e-09 1s 1s 279034150e-09 0s 0s 279034430e-09 0s 0s 279040110e-09 1s 1s 279044390e-09 0s 0s 279044710e-09 0s 0s 279050350e-09 1s 1s 279054630e-09 0s 0s 279054990e-09 0s 0s 279060590e-09 1s 1s 279064870e-09 0s 0s 279065270e-09 0s 0s 279070830e-09 1s 1s 279075110e-09 0s 0s 279075550e-09 0s 0s 279081070e-09 1s 1s 279085350e-09 0s 0s 279085830e-09 0s 0s 279091310e-09 1s 1s 279095590e-09 0s 0s 279096110e-09 0s 0s 279101550e-09 1s 1s 279105830e-09 0s 0s 279106390e-09 0s 0s 279111790e-09 1s 1s 279116070e-09 0s 0s 279116670e-09 0s 0s 279122030e-09 1s 1s 279126310e-09 0s 0s 279126950e-09 0s 0s 279132270e-09 1s 1s 279136550e-09 0s 0s 279137230e-09 0s 0s 279142510e-09 1s 1s 279146790e-09 0s 0s 279147510e-09 0s 0s 279152750e-09 1s 1s 279157030e-09 0s 0s 279157790e-09 0s 0s 279162990e-09 1s 1s 279167270e-09 0s 0s 279168070e-09 0s 0s 279173230e-09 1s 1s 279177510e-09 0s 0s 279178350e-09 0s 0s 279183470e-09 1s 1s 279187750e-09 0s 0s 279188630e-09 0s 0s 279193710e-09 1s 1s 279197990e-09 0s 0s 279198910e-09 0s 0s 279203950e-09 1s 1s 279208230e-09 0s 0s 279209190e-09 0s 0s 279214190e-09 1s 1s 279218470e-09 0s 0s 279219470e-09 0s 0s 279224430e-09 1s 1s 279228710e-09 0s 0s 279229750e-09 0s 0s 279234670e-09 1s 1s 279238950e-09 0s 0s 279240030e-09 0s 0s 279244910e-09 1s 1s 279249190e-09 0s 0s 279250310e-09 0s 0s 279255150e-09 1s 1s 279259430e-09 0s 0s 279260590e-09 0s 0s 279265390e-09 1s 1s 279269670e-09 0s 0s 279270870e-09 0s 0s 279275630e-09 1s 1s 279279910e-09 0s 0s 279281150e-09 0s 0s 279285870e-09 1s 1s 279290150e-09 0s 0s 279291430e-09 0s 0s 279296110e-09 1s 1s 279300390e-09 0s 0s 279301710e-09 0s 0s 279306350e-09 1s 1s 279310630e-09 0s 0s 279311990e-09 0s 0s 279316590e-09 1s 1s 279320870e-09 0s 0s 279322270e-09 0s 0s 279326830e-09 1s 1s 279331110e-09 0s 0s 279332550e-09 0s 0s 279337070e-09 1s 1s 279341350e-09 0s 0s 279342830e-09 0s 0s 279347310e-09 1s 1s 279351590e-09 0s 0s 279353110e-09 0s 0s 279357550e-09 1s 1s 279361830e-09 0s 0s 279363390e-09 0s 0s 279367790e-09 1s 1s 279372070e-09 0s 0s 279373670e-09 0s 0s 279378030e-09 1s 1s 279382310e-09 0s 0s 279383950e-09 0s 0s 279388270e-09 1s 1s 279392550e-09 0s 0s 279394230e-09 0s 0s 279398510e-09 1s 1s 279402790e-09 0s 0s 279404510e-09 0s 0s 279408750e-09 1s 1s 279413030e-09 0s 0s 279414790e-09 0s 0s 279418990e-09 1s 1s 279423270e-09 0s 0s 279425070e-09 0s 0s 279429230e-09 1s 1s 279433510e-09 0s 0s 279435350e-09 0s 0s 279439470e-09 1s 1s 279443750e-09 0s 0s 279445630e-09 0s 0s 279449710e-09 1s 1s 279453990e-09 0s 0s 279455910e-09 0s 0s 279459950e-09 1s 1s 279464230e-09 0s 0s 279466190e-09 0s 0s 279470190e-09 1s 1s 279474470e-09 0s 0s 279476470e-09 0s 0s 279480430e-09 1s 1s 279484710e-09 0s 0s 279486750e-09 0s 0s 279490670e-09 1s 1s 279494950e-09 0s 0s 279497030e-09 0s 0s 279500910e-09 1s 1s 279505190e-09 0s 0s 279507310e-09 0s 0s 279511150e-09 1s 1s 279515430e-09 0s 0s 279517590e-09 0s 0s 279521390e-09 1s 1s 279525670e-09 0s 0s 279527870e-09 0s 0s 279531630e-09 1s 1s 279535910e-09 0s 0s 279538150e-09 0s 0s 279541870e-09 1s 1s 279546150e-09 0s 0s 279548430e-09 0s 0s 279552110e-09 1s 1s 279556390e-09 0s 0s 279558710e-09 0s 0s 279562350e-09 1s 1s 279566630e-09 0s 0s 279568990e-09 0s 0s 279572590e-09 1s 1s 279576870e-09 0s 0s 279579270e-09 0s 0s 279582830e-09 1s 1s 279587110e-09 0s 0s 279589550e-09 0s 0s 279593070e-09 1s 1s 279597350e-09 0s 0s 279599830e-09 0s 0s 279603310e-09 1s 1s 279607590e-09 0s 0s 279610110e-09 0s 0s 279613550e-09 1s 1s 279617830e-09 0s 0s 279620390e-09 0s 0s 279623790e-09 1s 1s 279628070e-09 0s 0s 279630670e-09 0s 0s 279634030e-09 1s 1s 279638310e-09 0s 0s 279640950e-09 0s 0s 279644270e-09 1s 1s 279648550e-09 0s 0s 279651230e-09 0s 0s 279654510e-09 1s 1s 279658790e-09 0s 0s 279661510e-09 0s 0s 279664750e-09 1s 1s 279669030e-09 0s 0s 279671790e-09 0s 0s 279674990e-09 1s 1s 279679270e-09 0s 0s 279682070e-09 0s 0s 279685230e-09 1s 1s 279689510e-09 0s 0s 279692350e-09 0s 0s 279695470e-09 1s 1s 279699750e-09 0s 0s 279702630e-09 0s 0s 279705710e-09 1s 1s 279709990e-09 0s 0s 279712910e-09 0s 0s 279715950e-09 1s 1s 279720230e-09 0s 0s 279723190e-09 0s 0s 279726190e-09 1s 1s 279730470e-09 0s 0s 279733470e-09 0s 0s 279736430e-09 1s 1s 279740710e-09 0s 0s 279743750e-09 0s 0s 279746670e-09 1s 1s 279750950e-09 0s 0s 279754030e-09 0s 0s 279756910e-09 1s 1s 279761190e-09 0s 0s 279764310e-09 0s 0s 279767150e-09 1s 1s 279771430e-09 0s 0s 279774590e-09 0s 0s 279777390e-09 1s 1s 279781670e-09 0s 0s 279784870e-09 0s 0s 279787630e-09 1s 1s 279791910e-09 0s 0s 279795150e-09 0s 0s 279797870e-09 1s 1s 279802150e-09 0s 0s 279805430e-09 0s 0s 279808110e-09 1s 1s 279812390e-09 0s 0s 279815710e-09 0s 0s 279818350e-09 1s 1s 279822630e-09 0s 0s 279825990e-09 0s 0s 279828590e-09 1s 1s 279832870e-09 0s 0s 279836270e-09 0s 0s 279838830e-09 1s 1s 279843110e-09 0s 0s 279846550e-09 0s 0s 279849070e-09 1s 1s 279853350e-09 0s 0s 279856830e-09 0s 0s 279859310e-09 1s 1s 279863590e-09 0s 0s 279867110e-09 0s 0s 279869550e-09 1s 1s 279873830e-09 0s 0s 279877390e-09 0s 0s 279879790e-09 1s 1s 279884070e-09 0s 0s 279887670e-09 0s 0s 279890030e-09 1s 1s 279894310e-09 0s 0s 279897950e-09 0s 0s 279900270e-09 1s 1s 279904550e-09 0s 0s 279908230e-09 0s 0s 279910510e-09 1s 1s 279914790e-09 0s 0s 279918510e-09 0s 0s 279920750e-09 1s 1s 279925030e-09 0s 0s 279928790e-09 0s 0s 279930990e-09 1s 1s 279935270e-09 0s 0s 279939070e-09 0s 0s 279941230e-09 1s 1s 279945510e-09 0s 0s 279949350e-09 0s 0s 279951470e-09 1s 1s 279955750e-09 0s 0s 279959630e-09 0s 0s 279961710e-09 1s 1s 279965990e-09 0s 0s 279969910e-09 0s 0s 279971950e-09 1s 1s 279976230e-09 0s 0s 279980190e-09 0s 0s 279982190e-09 1s 1s 279986470e-09 0s 0s 279990470e-09 0s 0s 279992430e-09 1s 1s 279996710e-09 0s 0s 280000750e-09 0s 0s 280002670e-09 1s 1s 280006950e-09 0s 0s 280011030e-09 0s 0s 280012910e-09 1s 1s 280017190e-09 0s 0s 280021310e-09 0s 0s 280023150e-09 1s 1s 280027430e-09 0s 0s 280031590e-09 0s 0s 280033390e-09 1s 1s 280037670e-09 0s 0s 280041870e-09 0s 0s 280043630e-09 1s 1s 280047910e-09 0s 0s 280052150e-09 0s 0s 280053870e-09 1s 1s 280058150e-09 0s 0s 280062430e-09 0s 0s 280064110e-09 1s 1s 280068390e-09 0s 0s 280072710e-09 0s 0s 280074350e-09 1s 1s 280078630e-09 0s 0s 280082990e-09 0s 0s 280084590e-09 1s 1s 280088870e-09 0s 0s 280093270e-09 0s 0s 280094830e-09 1s 1s 280099110e-09 0s 0s 280103550e-09 0s 0s 280105070e-09 1s 1s 280109350e-09 0s 0s 280113830e-09 0s 0s 280115310e-09 1s 1s 280119590e-09 0s 0s 280124110e-09 0s 0s 280125550e-09 1s 1s 280129830e-09 0s 0s 280134390e-09 0s 0s 280135790e-09 1s 1s 280140070e-09 0s 0s 280144670e-09 0s 0s 280146030e-09 1s 1s 280150310e-09 0s 0s 280154950e-09 0s 0s 280156270e-09 1s 1s 280160550e-09 0s 0s 280165230e-09 0s 0s 280166510e-09 1s 1s 280170790e-09 0s 0s 280175510e-09 0s 0s 280176750e-09 1s 1s 280181030e-09 0s 0s 280185790e-09 0s 0s 280186990e-09 1s 1s 280191270e-09 0s 0s 280196070e-09 0s 0s 280197230e-09 1s 1s 280201510e-09 0s 0s 280206350e-09 0s 0s 280207470e-09 1s 1s 280211750e-09 0s 0s 280216630e-09 0s 0s 280217710e-09 1s 1s 280221990e-09 0s 0s 280226910e-09 0s 0s 280227950e-09 1s 1s 280232230e-09 0s 0s 280237190e-09 0s 0s 280238190e-09 1s 1s 280242470e-09 0s 0s 280247470e-09 0s 0s 280248430e-09 1s 1s 280252710e-09 0s 0s 280257750e-09 0s 0s 280258670e-09 1s 1s 280262950e-09 0s 0s 280268030e-09 0s 0s 280268910e-09 1s 1s 280273190e-09 0s 0s 280278310e-09 0s 0s 280279150e-09 1s 1s 280283430e-09 0s 0s 280288590e-09 0s 0s 280289390e-09 1s 1s 280293670e-09 0s 0s 280298870e-09 0s 0s 280299630e-09 1s 1s 280303910e-09 0s 0s 280309150e-09 0s 0s 280309870e-09 1s 1s 280314150e-09 0s 0s 280319430e-09 0s 0s 280320110e-09 1s 1s 280324390e-09 0s 0s 280329710e-09 0s 0s 280330350e-09 1s 1s 280334630e-09 0s 0s 280339990e-09 0s 0s 280340590e-09 1s 1s 280344870e-09 0s 0s 280350270e-09 0s 0s 280350830e-09 1s 1s 280355110e-09 0s 0s 280360550e-09 0s 0s 280361070e-09 1s 1s 280365350e-09 0s 0s 280370830e-09 0s 0s 280371310e-09 1s 1s 280375590e-09 0s 0s 280381110e-09 0s 0s 280381550e-09 1s 1s 280385830e-09 0s 0s 280391390e-09 0s 0s 280391790e-09 1s 1s 280396070e-09 0s 0s 280401670e-09 0s 0s 280402030e-09 1s 1s 280406310e-09 0s 0s 280411950e-09 0s 0s 280412270e-09 1s 1s 280416550e-09 0s 0s 280422230e-09 0s 0s 280422510e-09 1s 1s 280426790e-09 0s 0s 280432510e-09 0s 0s 280432750e-09 1s 1s 280437030e-09 0s 0s 280442790e-09 0s 0s 280442990e-09 1s 1s 280447270e-09 0s 0s 280453070e-09 0s 0s 280453230e-09 1s 1s 280457510e-09 0s 0s 280463350e-09 0s 0s 280463470e-09 1s 1s 280467750e-09 0s 0s 280473630e-09 0s 0s 280473710e-09 1s 1s 280477990e-09 0s 0s 280483910e-09 0s 0s 280483950e-09 1s 1s 280488230e-09 0s 0s 280494190e-09 1s 1s 280494230e-09 1s 1s 280498510e-09 0s 0s 280504430e-09 1s 1s 280504510e-09 1s 1s 280508750e-09 0s 0s 280514670e-09 1s 1s 280514790e-09 1s 1s 280518990e-09 0s 0s 280524910e-09 1s 1s 280525070e-09 1s 1s 280529230e-09 0s 0s 280535150e-09 1s 1s 280535350e-09 1s 1s 280539470e-09 0s 0s 280545390e-09 1s 1s 280545630e-09 1s 1s 280549710e-09 0s 0s 280555630e-09 1s 1s 280555910e-09 1s 1s 280559950e-09 0s 0s 280565870e-09 1s 1s 280566190e-09 1s 1s 280570190e-09 0s 0s 280576110e-09 1s 1s 280576470e-09 1s 1s 280580430e-09 0s 0s 280586350e-09 1s 1s 280586750e-09 1s 1s 280590670e-09 0s 0s 280596590e-09 1s 1s 280597030e-09 1s 1s 280600910e-09 0s 0s 280606830e-09 1s 1s 280607310e-09 1s 1s 280611150e-09 0s 0s 280617070e-09 1s 1s 280617590e-09 1s 1s 280621390e-09 0s 0s 280627310e-09 1s 1s 280627870e-09 1s 1s 280631630e-09 0s 0s 280637550e-09 1s 1s 280638150e-09 1s 1s 280641870e-09 0s 0s 280647790e-09 1s 1s 280648430e-09 1s 1s 280652110e-09 0s 0s 280658030e-09 1s 1s 280658710e-09 1s 1s 280662350e-09 0s 0s 280668270e-09 1s 1s 280668990e-09 1s 1s 280672590e-09 0s 0s 280678510e-09 1s 1s 280679270e-09 1s 1s 280682830e-09 0s 0s 280688750e-09 1s 1s 280689550e-09 1s 1s 280693070e-09 0s 0s 280698990e-09 1s 1s 280699830e-09 1s 1s 280703310e-09 0s 0s 280709230e-09 1s 1s 280710110e-09 1s 1s 280713550e-09 0s 0s 280719470e-09 1s 1s 280720390e-09 1s 1s 280723790e-09 0s 0s 280729710e-09 1s 1s 280730670e-09 1s 1s 280734030e-09 0s 0s 280739950e-09 1s 1s 280740950e-09 1s 1s 280744270e-09 0s 0s 280750190e-09 1s 1s 280751230e-09 1s 1s 280754510e-09 0s 0s 280760430e-09 1s 1s 280761510e-09 1s 1s 280764750e-09 0s 0s 280770670e-09 1s 1s 280771790e-09 1s 1s 280774990e-09 0s 0s 280780910e-09 1s 1s 280782070e-09 1s 1s 280785230e-09 0s 0s 280791150e-09 1s 1s 280792350e-09 1s 1s 280795470e-09 0s 0s 280801390e-09 1s 1s 280802630e-09 1s 1s 280805710e-09 0s 0s 280811630e-09 1s 1s 280812910e-09 1s 1s 280815950e-09 0s 0s 280821870e-09 1s 1s 280823190e-09 1s 1s 280826190e-09 0s 0s 280832110e-09 1s 1s 280833470e-09 1s 1s 280836430e-09 0s 0s 280842350e-09 1s 1s 280843750e-09 1s 1s 280846670e-09 0s 0s 280852590e-09 1s 1s 280854030e-09 1s 1s 280856910e-09 0s 0s 280862830e-09 1s 1s 280864310e-09 1s 1s 280867150e-09 0s 0s 280873070e-09 1s 1s 280874590e-09 1s 1s 280877390e-09 0s 0s 280883310e-09 1s 1s 280884870e-09 1s 1s 280887630e-09 0s 0s 280893550e-09 1s 1s 280895150e-09 1s 1s 280897870e-09 0s 0s 280903790e-09 1s 1s 280905430e-09 1s 1s 280908110e-09 0s 0s 280914030e-09 1s 1s 280915710e-09 1s 1s 280918350e-09 0s 0s 280924270e-09 1s 1s 280925990e-09 1s 1s 280928590e-09 0s 0s 280934510e-09 1s 1s 280936270e-09 1s 1s 280938830e-09 0s 0s 280944750e-09 1s 1s 280946550e-09 1s 1s 280949070e-09 0s 0s 280954990e-09 1s 1s 280956830e-09 1s 1s 280959310e-09 0s 0s 280965230e-09 1s 1s 280967110e-09 1s 1s 280969550e-09 0s 0s 280975470e-09 1s 1s 280977390e-09 1s 1s 280979790e-09 0s 0s 280985710e-09 1s 1s 280987670e-09 1s 1s 280990030e-09 0s 0s 280995950e-09 1s 1s 280997950e-09 1s 1s 281000270e-09 0s 0s 281006190e-09 1s 1s 281008230e-09 1s 1s 281010510e-09 0s 0s 281016430e-09 1s 1s 281018510e-09 1s 1s 281020750e-09 0s 0s 281026670e-09 1s 1s 281028790e-09 1s 1s 281030990e-09 0s 0s 281036910e-09 1s 1s 281039070e-09 1s 1s 281041230e-09 0s 0s 281047150e-09 1s 1s 281049350e-09 1s 1s 281051470e-09 0s 0s 281057390e-09 1s 1s 281059630e-09 1s 1s 281061710e-09 0s 0s 281067630e-09 1s 1s 281069910e-09 1s 1s 281071950e-09 0s 0s 281077870e-09 1s 1s 281080190e-09 1s 1s 281082190e-09 0s 0s 281088110e-09 1s 1s 281090470e-09 1s 1s 281092430e-09 0s 0s 281098350e-09 1s 1s 281100750e-09 1s 1s 281102670e-09 0s 0s 281108590e-09 1s 1s 281111030e-09 1s 1s 281112910e-09 0s 0s 281118830e-09 1s 1s 281121310e-09 1s 1s 281123150e-09 0s 0s 281129070e-09 1s 1s 281131590e-09 1s 1s 281133390e-09 0s 0s 281139310e-09 1s 1s 281141870e-09 1s 1s 281143630e-09 0s 0s 281149550e-09 1s 1s 281152150e-09 1s 1s 281153870e-09 0s 0s 281159790e-09 1s 1s 281162430e-09 1s 1s 281164110e-09 0s 0s 281170030e-09 1s 1s 281172710e-09 1s 1s 281174350e-09 0s 0s 281180270e-09 1s 1s 281182990e-09 1s 1s 281184590e-09 0s 0s 281190510e-09 1s 1s 281193270e-09 1s 1s 281194830e-09 0s 0s 281200750e-09 1s 1s 281203550e-09 1s 1s 281205070e-09 0s 0s 281210990e-09 1s 1s 281213830e-09 1s 1s 281215310e-09 0s 0s 281221230e-09 1s 1s 281224110e-09 1s 1s 281225550e-09 0s 0s 281231470e-09 1s 1s 281234390e-09 1s 1s 281235790e-09 0s 0s 281241710e-09 1s 1s 281244670e-09 1s 1s 281246030e-09 0s 0s 281251950e-09 1s 1s 281254950e-09 1s 1s 281256270e-09 0s 0s 281262190e-09 1s 1s 281265230e-09 1s 1s 281266510e-09 0s 0s 281272430e-09 1s 1s 281275510e-09 1s 1s 281276750e-09 0s 0s 281282670e-09 1s 1s 281285790e-09 1s 1s 281286990e-09 0s 0s 281292910e-09 1s 1s 281296070e-09 1s 1s 281297230e-09 0s 0s 281303150e-09 1s 1s 281306350e-09 1s 1s 281307470e-09 0s 0s 281313390e-09 1s 1s 281316630e-09 1s 1s 281317710e-09 0s 0s 281323630e-09 1s 1s 281326910e-09 1s 1s 281327950e-09 0s 0s 281333870e-09 1s 1s 281337190e-09 1s 1s 281338190e-09 0s 0s 281344110e-09 1s 1s 281347470e-09 1s 1s 281348430e-09 0s 0s 281354350e-09 1s 1s 281357750e-09 1s 1s 281358670e-09 0s 0s 281364590e-09 1s 1s 281368030e-09 1s 1s 281368910e-09 0s 0s 281374830e-09 1s 1s 281378310e-09 1s 1s 281379150e-09 0s 0s 281385070e-09 1s 1s 281388590e-09 1s 1s 281389390e-09 0s 0s 281395310e-09 1s 1s 281398870e-09 1s 1s 281399630e-09 0s 0s 281405550e-09 1s 1s 281409150e-09 1s 1s 281409870e-09 0s 0s 281415790e-09 1s 1s 281419430e-09 1s 1s 281420110e-09 0s 0s 281426030e-09 1s 1s 281429710e-09 1s 1s 281430350e-09 0s 0s 281436270e-09 1s 1s 281439990e-09 1s 1s 281440590e-09 0s 0s 281446510e-09 1s 1s 281450270e-09 1s 1s 281450830e-09 0s 0s 281456750e-09 1s 1s 281460550e-09 1s 1s 281461070e-09 0s 0s 281466990e-09 1s 1s 281470830e-09 1s 1s 281471310e-09 0s 0s 281477230e-09 1s 1s 281481110e-09 1s 1s 281481550e-09 0s 0s 281487470e-09 1s 1s 281491390e-09 1s 1s 281491790e-09 0s 0s 281497710e-09 1s 1s 281501670e-09 1s 1s 281502030e-09 0s 0s 281507950e-09 1s 1s 281511950e-09 1s 1s 281512270e-09 0s 0s 281518190e-09 1s 1s 281522230e-09 1s 1s 281522510e-09 0s 0s 281528430e-09 1s 1s 281532510e-09 1s 1s 281532750e-09 0s 0s 281538670e-09 1s 1s 281542790e-09 1s 1s 281542990e-09 0s 0s 281548910e-09 1s 1s 281553070e-09 1s 1s 281553230e-09 0s 0s 281559150e-09 1s 1s 281563350e-09 1s 1s 281563470e-09 0s 0s 281569390e-09 1s 1s 281573630e-09 1s 1s 281573710e-09 0s 0s 281579630e-09 1s 1s 281583910e-09 1s 1s 281583950e-09 0s 0s 281589870e-09 1s 1s 281594190e-09 0s 0s 281600110e-09 1s 1s 281604430e-09 0s 0s 281604470e-09 0s 0s 281610350e-09 1s 1s 281614670e-09 0s 0s 281614750e-09 0s 0s 281620590e-09 1s 1s 281624910e-09 0s 0s 281625030e-09 0s 0s 281630830e-09 1s 1s 281635150e-09 0s 0s 281635310e-09 0s 0s 281641070e-09 1s 1s 281645390e-09 0s 0s 281645590e-09 0s 0s 281651310e-09 1s 1s 281655630e-09 0s 0s 281655870e-09 0s 0s 281661550e-09 1s 1s 281665870e-09 0s 0s 281666150e-09 0s 0s 281671790e-09 1s 1s 281676110e-09 0s 0s 281676430e-09 0s 0s 281682030e-09 1s 1s 281686350e-09 0s 0s 281686710e-09 0s 0s 281692270e-09 1s 1s 281696590e-09 0s 0s 281696990e-09 0s 0s 281702510e-09 1s 1s 281706830e-09 0s 0s 281707270e-09 0s 0s 281712750e-09 1s 1s 281717070e-09 0s 0s 281717550e-09 0s 0s 281722990e-09 1s 1s 281727310e-09 0s 0s 281727830e-09 0s 0s 281733230e-09 1s 1s 281737550e-09 0s 0s 281738110e-09 0s 0s 281743470e-09 1s 1s 281747790e-09 0s 0s 281748390e-09 0s 0s 281753710e-09 1s 1s 281758030e-09 0s 0s 281758670e-09 0s 0s 281763950e-09 1s 1s 281768270e-09 0s 0s 281768950e-09 0s 0s 281774190e-09 1s 1s 281778510e-09 0s 0s 281779230e-09 0s 0s 281784430e-09 1s 1s 281788750e-09 0s 0s 281789510e-09 0s 0s 281794670e-09 1s 1s 281798990e-09 0s 0s 281799790e-09 0s 0s 281804910e-09 1s 1s 281809230e-09 0s 0s 281810070e-09 0s 0s 281815150e-09 1s 1s 281819470e-09 0s 0s 281820350e-09 0s 0s 281825390e-09 1s 1s 281829710e-09 0s 0s 281830630e-09 0s 0s 281835630e-09 1s 1s 281839950e-09 0s 0s 281840910e-09 0s 0s 281845870e-09 1s 1s 281850190e-09 0s 0s 281851190e-09 0s 0s 281856110e-09 1s 1s 281860430e-09 0s 0s 281861470e-09 0s 0s 281866350e-09 1s 1s 281870670e-09 0s 0s 281871750e-09 0s 0s 281876590e-09 1s 1s 281880910e-09 0s 0s 281882030e-09 0s 0s 281886830e-09 1s 1s 281891150e-09 0s 0s 281892310e-09 0s 0s 281897070e-09 1s 1s 281901390e-09 0s 0s 281902590e-09 0s 0s 281907310e-09 1s 1s 281911630e-09 0s 0s 281912870e-09 0s 0s 281917550e-09 1s 1s 281921870e-09 0s 0s 281923150e-09 0s 0s 281927790e-09 1s 1s 281932110e-09 0s 0s 281933430e-09 0s 0s 281938030e-09 1s 1s 281942350e-09 0s 0s 281943710e-09 0s 0s 281948270e-09 1s 1s 281952590e-09 0s 0s 281953990e-09 0s 0s 281958510e-09 1s 1s 281962830e-09 0s 0s 281964270e-09 0s 0s 281968750e-09 1s 1s 281973070e-09 0s 0s 281974550e-09 0s 0s 281978990e-09 1s 1s 281983310e-09 0s 0s 281984830e-09 0s 0s 281989230e-09 1s 1s 281993550e-09 0s 0s 281995110e-09 0s 0s 281999470e-09 1s 1s 282003790e-09 0s 0s 282005390e-09 0s 0s 282009710e-09 1s 1s 282014030e-09 0s 0s 282015670e-09 0s 0s 282019950e-09 1s 1s 282024270e-09 0s 0s 282025950e-09 0s 0s 282030190e-09 1s 1s 282034510e-09 0s 0s 282036230e-09 0s 0s 282040430e-09 1s 1s 282044750e-09 0s 0s 282046510e-09 0s 0s 282050670e-09 1s 1s 282054990e-09 0s 0s 282056790e-09 0s 0s 282060910e-09 1s 1s 282065230e-09 0s 0s 282067070e-09 0s 0s 282071150e-09 1s 1s 282075470e-09 0s 0s 282077350e-09 0s 0s 282081390e-09 1s 1s 282085710e-09 0s 0s 282087630e-09 0s 0s 282091630e-09 1s 1s 282095950e-09 0s 0s 282097910e-09 0s 0s 282101870e-09 1s 1s 282106190e-09 0s 0s 282108190e-09 0s 0s 282112110e-09 1s 1s 282116430e-09 0s 0s 282118470e-09 0s 0s 282122350e-09 1s 1s 282126670e-09 0s 0s 282128750e-09 0s 0s 282132590e-09 1s 1s 282136910e-09 0s 0s 282139030e-09 0s 0s 282142830e-09 1s 1s 282147150e-09 0s 0s 282149310e-09 0s 0s 282153070e-09 1s 1s 282157390e-09 0s 0s 282159590e-09 0s 0s 282163310e-09 1s 1s 282167630e-09 0s 0s 282169870e-09 0s 0s 282173550e-09 1s 1s 282177870e-09 0s 0s 282180150e-09 0s 0s 282183790e-09 1s 1s 282188110e-09 0s 0s 282190430e-09 0s 0s 282194030e-09 1s 1s 282198350e-09 0s 0s 282200710e-09 0s 0s 282204270e-09 1s 1s 282208590e-09 0s 0s 282210990e-09 0s 0s 282214510e-09 1s 1s 282218830e-09 0s 0s 282221270e-09 0s 0s 282224750e-09 1s 1s 282229070e-09 0s 0s 282231550e-09 0s 0s 282234990e-09 1s 1s 282239310e-09 0s 0s 282241830e-09 0s 0s 282245230e-09 1s 1s 282249550e-09 0s 0s 282252110e-09 0s 0s 282255470e-09 1s 1s 282259790e-09 0s 0s 282262390e-09 0s 0s 282265710e-09 1s 1s 282270030e-09 0s 0s 282272670e-09 0s 0s 282275950e-09 1s 1s 282280270e-09 0s 0s 282282950e-09 0s 0s 282286190e-09 1s 1s 282290510e-09 0s 0s 282293230e-09 0s 0s 282296430e-09 1s 1s 282300750e-09 0s 0s 282303510e-09 0s 0s 282306670e-09 1s 1s 282310990e-09 0s 0s 282313790e-09 0s 0s 282316910e-09 1s 1s 282321230e-09 0s 0s 282324070e-09 0s 0s 282327150e-09 1s 1s 282331470e-09 0s 0s 282334350e-09 0s 0s 282337390e-09 1s 1s 282341710e-09 0s 0s 282344630e-09 0s 0s 282347630e-09 1s 1s 282351950e-09 0s 0s 282354910e-09 0s 0s 282357870e-09 1s 1s 282362190e-09 0s 0s 282365190e-09 0s 0s 282368110e-09 1s 1s 282372430e-09 0s 0s 282375470e-09 0s 0s 282378350e-09 1s 1s 282382670e-09 0s 0s 282385750e-09 0s 0s 282388590e-09 1s 1s 282392910e-09 0s 0s 282396030e-09 0s 0s 282398830e-09 1s 1s 282403150e-09 0s 0s 282406310e-09 0s 0s 282409070e-09 1s 1s 282413390e-09 0s 0s 282416590e-09 0s 0s 282419310e-09 1s 1s 282423630e-09 0s 0s 282426870e-09 0s 0s 282429550e-09 1s 1s 282433870e-09 0s 0s 282437150e-09 0s 0s 282439790e-09 1s 1s 282444110e-09 0s 0s 282447430e-09 0s 0s 282450030e-09 1s 1s 282454350e-09 0s 0s 282457710e-09 0s 0s 282460270e-09 1s 1s 282464590e-09 0s 0s 282467990e-09 0s 0s 282470510e-09 1s 1s 282474830e-09 0s 0s 282478270e-09 0s 0s 282480750e-09 1s 1s 282485070e-09 0s 0s 282488550e-09 0s 0s 282490990e-09 1s 1s 282495310e-09 0s 0s 282498830e-09 0s 0s 282501230e-09 1s 1s 282505550e-09 0s 0s 282509110e-09 0s 0s 282511470e-09 1s 1s 282515790e-09 0s 0s 282519390e-09 0s 0s 282521710e-09 1s 1s 282526030e-09 0s 0s 282529670e-09 0s 0s 282531950e-09 1s 1s 282536270e-09 0s 0s 282539950e-09 0s 0s 282542190e-09 1s 1s 282546510e-09 0s 0s 282550230e-09 0s 0s 282552430e-09 1s 1s 282556750e-09 0s 0s 282560510e-09 0s 0s 282562670e-09 1s 1s 282566990e-09 0s 0s 282570790e-09 0s 0s 282572910e-09 1s 1s 282577230e-09 0s 0s 282581070e-09 0s 0s 282583150e-09 1s 1s 282587470e-09 0s 0s 282591350e-09 0s 0s 282593390e-09 1s 1s 282597710e-09 0s 0s 282601630e-09 0s 0s 282603630e-09 1s 1s 282607950e-09 0s 0s 282611910e-09 0s 0s 282613870e-09 1s 1s 282618190e-09 0s 0s 282622190e-09 0s 0s 282624110e-09 1s 1s 282628430e-09 0s 0s 282632470e-09 0s 0s 282634350e-09 1s 1s 282638670e-09 0s 0s 282642750e-09 0s 0s 282644590e-09 1s 1s 282648910e-09 0s 0s 282653030e-09 0s 0s 282654830e-09 1s 1s 282659150e-09 0s 0s 282663310e-09 0s 0s 282665070e-09 1s 1s 282669390e-09 0s 0s 282673590e-09 0s 0s 282675310e-09 1s 1s 282679630e-09 0s 0s 282683870e-09 0s 0s 282685550e-09 1s 1s 282689870e-09 0s 0s 282694150e-09 0s 0s 282695790e-09 1s 1s 282700110e-09 0s 0s 282704430e-09 0s 0s 282706030e-09 1s 1s 282710350e-09 0s 0s 282714710e-09 0s 0s 282716270e-09 1s 1s 282720590e-09 0s 0s 282724990e-09 0s 0s 282726510e-09 1s 1s 282730830e-09 0s 0s 282735270e-09 0s 0s 282736750e-09 1s 1s 282741070e-09 0s 0s 282745550e-09 0s 0s 282746990e-09 1s 1s 282751310e-09 0s 0s 282755830e-09 0s 0s 282757230e-09 1s 1s 282761550e-09 0s 0s 282766110e-09 0s 0s 282767470e-09 1s 1s 282771790e-09 0s 0s 282776390e-09 0s 0s 282777710e-09 1s 1s 282782030e-09 0s 0s 282786670e-09 0s 0s 282787950e-09 1s 1s 282792270e-09 0s 0s 282796950e-09 0s 0s 282798190e-09 1s 1s 282802510e-09 0s 0s 282807230e-09 0s 0s 282808430e-09 1s 1s 282812750e-09 0s 0s 282817510e-09 0s 0s 282818670e-09 1s 1s 282822990e-09 0s 0s 282827790e-09 0s 0s 282828910e-09 1s 1s 282833230e-09 0s 0s 282838070e-09 0s 0s 282839150e-09 1s 1s 282843470e-09 0s 0s 282848350e-09 0s 0s 282849390e-09 1s 1s 282853710e-09 0s 0s 282858630e-09 0s 0s 282859630e-09 1s 1s 282863950e-09 0s 0s 282868910e-09 0s 0s 282869870e-09 1s 1s 282874190e-09 0s 0s 282879190e-09 0s 0s 282880110e-09 1s 1s 282884430e-09 0s 0s 282889470e-09 0s 0s 282890350e-09 1s 1s 282894670e-09 0s 0s 282899750e-09 0s 0s 282900590e-09 1s 1s 282904910e-09 0s 0s 282910030e-09 0s 0s 282910830e-09 1s 1s 282915150e-09 0s 0s 282920310e-09 0s 0s 282921070e-09 1s 1s 282925390e-09 0s 0s 282930590e-09 0s 0s 282931310e-09 1s 1s 282935630e-09 0s 0s 282940870e-09 0s 0s 282941550e-09 1s 1s 282945870e-09 0s 0s 282951150e-09 0s 0s 282951790e-09 1s 1s 282956110e-09 0s 0s 282961430e-09 0s 0s 282962030e-09 1s 1s 282966350e-09 0s 0s 282971710e-09 0s 0s 282972270e-09 1s 1s 282976590e-09 0s 0s 282981990e-09 0s 0s 282982510e-09 1s 1s 282986830e-09 0s 0s 282992270e-09 0s 0s 282992750e-09 1s 1s 282997070e-09 0s 0s 283002550e-09 0s 0s 283002990e-09 1s 1s 283007310e-09 0s 0s 283012830e-09 0s 0s 283013230e-09 1s 1s 283017550e-09 0s 0s 283023110e-09 0s 0s 283023470e-09 1s 1s 283027790e-09 0s 0s 283033390e-09 0s 0s 283033710e-09 1s 1s 283038030e-09 0s 0s 283043670e-09 0s 0s 283043950e-09 1s 1s 283048270e-09 0s 0s 283053950e-09 0s 0s 283054190e-09 1s 1s 283058510e-09 0s 0s 283064230e-09 0s 0s 283064430e-09 1s 1s 283068750e-09 0s 0s 283074510e-09 0s 0s 283074670e-09 1s 1s 283078990e-09 0s 0s 283084790e-09 0s 0s 283084910e-09 1s 1s 283089230e-09 0s 0s 283095070e-09 0s 0s 283095150e-09 1s 1s 283099470e-09 0s 0s 283105350e-09 0s 0s 283105390e-09 1s 1s 283109710e-09 0s 0s 283115630e-09 1s 1s 283115670e-09 1s 1s 283119990e-09 0s 0s 283125870e-09 1s 1s 283125950e-09 1s 1s 283130230e-09 0s 0s 283136110e-09 1s 1s 283136230e-09 1s 1s 283140470e-09 0s 0s 283146350e-09 1s 1s 283146510e-09 1s 1s 283150710e-09 0s 0s 283156590e-09 1s 1s 283156790e-09 1s 1s 283160950e-09 0s 0s 283166830e-09 1s 1s 283167070e-09 1s 1s 283171190e-09 0s 0s 283177070e-09 1s 1s 283177350e-09 1s 1s 283181430e-09 0s 0s 283187310e-09 1s 1s 283187630e-09 1s 1s 283191670e-09 0s 0s 283197550e-09 1s 1s 283197910e-09 1s 1s 283201910e-09 0s 0s 283207790e-09 1s 1s 283208190e-09 1s 1s 283212150e-09 0s 0s 283218030e-09 1s 1s 283218470e-09 1s 1s 283222390e-09 0s 0s 283228270e-09 1s 1s 283228750e-09 1s 1s 283232630e-09 0s 0s 283238510e-09 1s 1s 283239030e-09 1s 1s 283242870e-09 0s 0s 283248750e-09 1s 1s 283249310e-09 1s 1s 283253110e-09 0s 0s 283258990e-09 1s 1s 283259590e-09 1s 1s 283263350e-09 0s 0s 283269230e-09 1s 1s 283269870e-09 1s 1s 283273590e-09 0s 0s 283279470e-09 1s 1s 283280150e-09 1s 1s 283283830e-09 0s 0s 283289710e-09 1s 1s 283290430e-09 1s 1s 283294070e-09 0s 0s 283299950e-09 1s 1s 283300710e-09 1s 1s 283304310e-09 0s 0s 283310190e-09 1s 1s 283310990e-09 1s 1s 283314550e-09 0s 0s 283320430e-09 1s 1s 283321270e-09 1s 1s 283324790e-09 0s 0s 283330670e-09 1s 1s 283331550e-09 1s 1s 283335030e-09 0s 0s 283340910e-09 1s 1s 283341830e-09 1s 1s 283345270e-09 0s 0s 283351150e-09 1s 1s 283352110e-09 1s 1s 283355510e-09 0s 0s 283361390e-09 1s 1s 283362390e-09 1s 1s 283365750e-09 0s 0s 283371630e-09 1s 1s 283372670e-09 1s 1s 283375990e-09 0s 0s 283381870e-09 1s 1s 283382950e-09 1s 1s 283386230e-09 0s 0s 283392110e-09 1s 1s 283393230e-09 1s 1s 283396470e-09 0s 0s 283402350e-09 1s 1s 283403510e-09 1s 1s 283406710e-09 0s 0s 283412590e-09 1s 1s 283413790e-09 1s 1s 283416950e-09 0s 0s 283422830e-09 1s 1s 283424070e-09 1s 1s 283427190e-09 0s 0s 283433070e-09 1s 1s 283434350e-09 1s 1s 283437430e-09 0s 0s 283443310e-09 1s 1s 283444630e-09 1s 1s 283447670e-09 0s 0s 283453550e-09 1s 1s 283454910e-09 1s 1s 283457910e-09 0s 0s 283463790e-09 1s 1s 283465190e-09 1s 1s 283468150e-09 0s 0s 283474030e-09 1s 1s 283475470e-09 1s 1s 283478390e-09 0s 0s 283484270e-09 1s 1s 283485750e-09 1s 1s 283488630e-09 0s 0s 283494510e-09 1s 1s 283496030e-09 1s 1s 283498870e-09 0s 0s 283504750e-09 1s 1s 283506310e-09 1s 1s 283509110e-09 0s 0s 283514990e-09 1s 1s 283516590e-09 1s 1s 283519350e-09 0s 0s 283525230e-09 1s 1s 283526870e-09 1s 1s 283529590e-09 0s 0s 283535470e-09 1s 1s 283537150e-09 1s 1s 283539830e-09 0s 0s 283545710e-09 1s 1s 283547430e-09 1s 1s 283550070e-09 0s 0s 283555950e-09 1s 1s 283557710e-09 1s 1s 283560310e-09 0s 0s 283566190e-09 1s 1s 283567990e-09 1s 1s 283570550e-09 0s 0s 283576430e-09 1s 1s 283578270e-09 1s 1s 283580790e-09 0s 0s 283586670e-09 1s 1s 283588550e-09 1s 1s 283591030e-09 0s 0s 283596910e-09 1s 1s 283598830e-09 1s 1s 283601270e-09 0s 0s 283607150e-09 1s 1s 283609110e-09 1s 1s 283611510e-09 0s 0s 283617390e-09 1s 1s 283619390e-09 1s 1s 283621750e-09 0s 0s 283627630e-09 1s 1s 283629670e-09 1s 1s 283631990e-09 0s 0s 283637870e-09 1s 1s 283639950e-09 1s 1s 283642230e-09 0s 0s 283648110e-09 1s 1s 283650230e-09 1s 1s 283652470e-09 0s 0s 283658350e-09 1s 1s 283660510e-09 1s 1s 283662710e-09 0s 0s 283668590e-09 1s 1s 283670790e-09 1s 1s 283672950e-09 0s 0s 283678830e-09 1s 1s 283681070e-09 1s 1s 283683190e-09 0s 0s 283689070e-09 1s 1s 283691350e-09 1s 1s 283693430e-09 0s 0s 283699310e-09 1s 1s 283701630e-09 1s 1s 283703670e-09 0s 0s 283709550e-09 1s 1s 283711910e-09 1s 1s 283713910e-09 0s 0s 283719790e-09 1s 1s 283722190e-09 1s 1s 283724150e-09 0s 0s 283730030e-09 1s 1s 283732470e-09 1s 1s 283734390e-09 0s 0s 283740270e-09 1s 1s 283742750e-09 1s 1s 283744630e-09 0s 0s 283750510e-09 1s 1s 283753030e-09 1s 1s 283754870e-09 0s 0s 283760750e-09 1s 1s 283763310e-09 1s 1s 283765110e-09 0s 0s 283770990e-09 1s 1s 283773590e-09 1s 1s 283775350e-09 0s 0s 283781230e-09 1s 1s 283783870e-09 1s 1s 283785590e-09 0s 0s 283791470e-09 1s 1s 283794150e-09 1s 1s 283795830e-09 0s 0s 283801710e-09 1s 1s 283804430e-09 1s 1s 283806070e-09 0s 0s 283811950e-09 1s 1s 283814710e-09 1s 1s 283816310e-09 0s 0s 283822190e-09 1s 1s 283824990e-09 1s 1s 283826550e-09 0s 0s 283832430e-09 1s 1s 283835270e-09 1s 1s 283836790e-09 0s 0s 283842670e-09 1s 1s 283845550e-09 1s 1s 283847030e-09 0s 0s 283852910e-09 1s 1s 283855830e-09 1s 1s 283857270e-09 0s 0s 283863150e-09 1s 1s 283866110e-09 1s 1s 283867510e-09 0s 0s 283873390e-09 1s 1s 283876390e-09 1s 1s 283877750e-09 0s 0s 283883630e-09 1s 1s 283886670e-09 1s 1s 283887990e-09 0s 0s 283893870e-09 1s 1s 283896950e-09 1s 1s 283898230e-09 0s 0s 283904110e-09 1s 1s 283907230e-09 1s 1s 283908470e-09 0s 0s 283914350e-09 1s 1s 283917510e-09 1s 1s 283918710e-09 0s 0s 283924590e-09 1s 1s 283927790e-09 1s 1s 283928950e-09 0s 0s 283934830e-09 1s 1s 283938070e-09 1s 1s 283939190e-09 0s 0s 283945070e-09 1s 1s 283948350e-09 1s 1s 283949430e-09 0s 0s 283955310e-09 1s 1s 283958630e-09 1s 1s 283959670e-09 0s 0s 283965550e-09 1s 1s 283968910e-09 1s 1s 283969910e-09 0s 0s 283975790e-09 1s 1s 283979190e-09 1s 1s 283980150e-09 0s 0s 283986030e-09 1s 1s 283989470e-09 1s 1s 283990390e-09 0s 0s 283996270e-09 1s 1s 283999750e-09 1s 1s 284000630e-09 0s 0s 284006510e-09 1s 1s 284010030e-09 1s 1s 284010870e-09 0s 0s 284016750e-09 1s 1s 284020310e-09 1s 1s 284021110e-09 0s 0s 284026990e-09 1s 1s 284030590e-09 1s 1s 284031350e-09 0s 0s 284037230e-09 1s 1s 284040870e-09 1s 1s 284041590e-09 0s 0s 284047470e-09 1s 1s 284051150e-09 1s 1s 284051830e-09 0s 0s 284057710e-09 1s 1s 284061430e-09 1s 1s 284062070e-09 0s 0s 284067950e-09 1s 1s 284071710e-09 1s 1s 284072310e-09 0s 0s 284078190e-09 1s 1s 284081990e-09 1s 1s 284082550e-09 0s 0s 284088430e-09 1s 1s 284092270e-09 1s 1s 284092790e-09 0s 0s 284098670e-09 1s 1s 284102550e-09 1s 1s 284103030e-09 0s 0s 284108910e-09 1s 1s 284112830e-09 1s 1s 284113270e-09 0s 0s 284119150e-09 1s 1s 284123110e-09 1s 1s 284123510e-09 0s 0s 284129390e-09 1s 1s 284133390e-09 1s 1s 284133750e-09 0s 0s 284139630e-09 1s 1s 284143670e-09 1s 1s 284143990e-09 0s 0s 284149870e-09 1s 1s 284153950e-09 1s 1s 284154230e-09 0s 0s 284160110e-09 1s 1s 284164230e-09 1s 1s 284164470e-09 0s 0s 284170350e-09 1s 1s 284174510e-09 1s 1s 284174710e-09 0s 0s 284180590e-09 1s 1s 284184790e-09 1s 1s 284184950e-09 0s 0s 284190830e-09 1s 1s 284195070e-09 1s 1s 284195190e-09 0s 0s 284201070e-09 1s 1s 284205350e-09 1s 1s 284205430e-09 0s 0s 284211310e-09 1s 1s 284215630e-09 1s 1s 284215670e-09 0s 0s 284221550e-09 1s 1s 284225910e-09 0s 0s 284231790e-09 1s 1s 284236150e-09 0s 0s 284236190e-09 0s 0s 284242030e-09 1s 1s 284246390e-09 0s 0s 284246470e-09 0s 0s 284252270e-09 1s 1s 284256630e-09 0s 0s 284256750e-09 0s 0s 284262510e-09 1s 1s 284266870e-09 0s 0s 284267030e-09 0s 0s 284272750e-09 1s 1s 284277110e-09 0s 0s 284277310e-09 0s 0s 284282990e-09 1s 1s 284287350e-09 0s 0s 284287590e-09 0s 0s 284293230e-09 1s 1s 284297590e-09 0s 0s 284297870e-09 0s 0s 284303470e-09 1s 1s 284307830e-09 0s 0s 284308150e-09 0s 0s 284313710e-09 1s 1s 284318070e-09 0s 0s 284318430e-09 0s 0s 284323950e-09 1s 1s 284328310e-09 0s 0s 284328710e-09 0s 0s 284334190e-09 1s 1s 284338550e-09 0s 0s 284338990e-09 0s 0s 284344430e-09 1s 1s 284348790e-09 0s 0s 284349270e-09 0s 0s 284354670e-09 1s 1s 284359030e-09 0s 0s 284359550e-09 0s 0s 284364910e-09 1s 1s 284369270e-09 0s 0s 284369830e-09 0s 0s 284375150e-09 1s 1s 284379510e-09 0s 0s 284380110e-09 0s 0s 284385390e-09 1s 1s 284389750e-09 0s 0s 284390390e-09 0s 0s 284395630e-09 1s 1s 284399990e-09 0s 0s 284400670e-09 0s 0s 284405870e-09 1s 1s 284410230e-09 0s 0s 284410950e-09 0s 0s 284416110e-09 1s 1s 284420470e-09 0s 0s 284421230e-09 0s 0s 284426350e-09 1s 1s 284430710e-09 0s 0s 284431510e-09 0s 0s 284436590e-09 1s 1s 284440950e-09 0s 0s 284441790e-09 0s 0s 284446830e-09 1s 1s 284451190e-09 0s 0s 284452070e-09 0s 0s 284457070e-09 1s 1s 284461430e-09 0s 0s 284462350e-09 0s 0s 284467310e-09 1s 1s 284471670e-09 0s 0s 284472630e-09 0s 0s 284477550e-09 1s 1s 284481910e-09 0s 0s 284482910e-09 0s 0s 284487790e-09 1s 1s 284492150e-09 0s 0s 284493190e-09 0s 0s 284498030e-09 1s 1s 284502390e-09 0s 0s 284503470e-09 0s 0s 284508270e-09 1s 1s 284512630e-09 0s 0s 284513750e-09 0s 0s 284518510e-09 1s 1s 284522870e-09 0s 0s 284524030e-09 0s 0s 284528750e-09 1s 1s 284533110e-09 0s 0s 284534310e-09 0s 0s 284538990e-09 1s 1s 284543350e-09 0s 0s 284544590e-09 0s 0s 284549230e-09 1s 1s 284553590e-09 0s 0s 284554870e-09 0s 0s 284559470e-09 1s 1s 284563830e-09 0s 0s 284565150e-09 0s 0s 284569710e-09 1s 1s 284574070e-09 0s 0s 284575430e-09 0s 0s 284579950e-09 1s 1s 284584310e-09 0s 0s 284585710e-09 0s 0s 284590190e-09 1s 1s 284594550e-09 0s 0s 284595990e-09 0s 0s 284600430e-09 1s 1s 284604790e-09 0s 0s 284606270e-09 0s 0s 284610670e-09 1s 1s 284615030e-09 0s 0s 284616550e-09 0s 0s 284620910e-09 1s 1s 284625270e-09 0s 0s 284626830e-09 0s 0s 284631150e-09 1s 1s 284635510e-09 0s 0s 284637110e-09 0s 0s 284641390e-09 1s 1s 284645750e-09 0s 0s 284647390e-09 0s 0s 284651630e-09 1s 1s 284655990e-09 0s 0s 284657670e-09 0s 0s 284661870e-09 1s 1s 284666230e-09 0s 0s 284667950e-09 0s 0s 284672110e-09 1s 1s 284676470e-09 0s 0s 284678230e-09 0s 0s 284682350e-09 1s 1s 284686710e-09 0s 0s 284688510e-09 0s 0s 284692590e-09 1s 1s 284696950e-09 0s 0s 284698790e-09 0s 0s 284702830e-09 1s 1s 284707190e-09 0s 0s 284709070e-09 0s 0s 284713070e-09 1s 1s 284717430e-09 0s 0s 284719350e-09 0s 0s 284723310e-09 1s 1s 284727670e-09 0s 0s 284729630e-09 0s 0s 284733550e-09 1s 1s 284737910e-09 0s 0s 284739910e-09 0s 0s 284743790e-09 1s 1s 284748150e-09 0s 0s 284750190e-09 0s 0s 284754030e-09 1s 1s 284758390e-09 0s 0s 284760470e-09 0s 0s 284764270e-09 1s 1s 284768630e-09 0s 0s 284770750e-09 0s 0s 284774510e-09 1s 1s 284778870e-09 0s 0s 284781030e-09 0s 0s 284784750e-09 1s 1s 284789110e-09 0s 0s 284791310e-09 0s 0s 284794990e-09 1s 1s 284799350e-09 0s 0s 284801590e-09 0s 0s 284805230e-09 1s 1s 284809590e-09 0s 0s 284811870e-09 0s 0s 284815470e-09 1s 1s 284819830e-09 0s 0s 284822150e-09 0s 0s 284825710e-09 1s 1s 284830070e-09 0s 0s 284832430e-09 0s 0s 284835950e-09 1s 1s 284840310e-09 0s 0s 284842710e-09 0s 0s 284846190e-09 1s 1s 284850550e-09 0s 0s 284852990e-09 0s 0s 284856430e-09 1s 1s 284860790e-09 0s 0s 284863270e-09 0s 0s 284866670e-09 1s 1s 284871030e-09 0s 0s 284873550e-09 0s 0s 284876910e-09 1s 1s 284881270e-09 0s 0s 284883830e-09 0s 0s 284887150e-09 1s 1s 284891510e-09 0s 0s 284894110e-09 0s 0s 284897390e-09 1s 1s 284901750e-09 0s 0s 284904390e-09 0s 0s 284907630e-09 1s 1s 284911990e-09 0s 0s 284914670e-09 0s 0s 284917870e-09 1s 1s 284922230e-09 0s 0s 284924950e-09 0s 0s 284928110e-09 1s 1s 284932470e-09 0s 0s 284935230e-09 0s 0s 284938350e-09 1s 1s 284942710e-09 0s 0s 284945510e-09 0s 0s 284948590e-09 1s 1s 284952950e-09 0s 0s 284955790e-09 0s 0s 284958830e-09 1s 1s 284963190e-09 0s 0s 284966070e-09 0s 0s 284969070e-09 1s 1s 284973430e-09 0s 0s 284976350e-09 0s 0s 284979310e-09 1s 1s 284983670e-09 0s 0s 284986630e-09 0s 0s 284989550e-09 1s 1s 284993910e-09 0s 0s 284996910e-09 0s 0s 284999790e-09 1s 1s 285004150e-09 0s 0s 285007190e-09 0s 0s 285010030e-09 1s 1s 285014390e-09 0s 0s 285017470e-09 0s 0s 285020270e-09 1s 1s 285024630e-09 0s 0s 285027750e-09 0s 0s 285030510e-09 1s 1s 285034870e-09 0s 0s 285038030e-09 0s 0s 285040750e-09 1s 1s 285045110e-09 0s 0s 285048310e-09 0s 0s 285050990e-09 1s 1s 285055350e-09 0s 0s 285058590e-09 0s 0s 285061230e-09 1s 1s 285065590e-09 0s 0s 285068870e-09 0s 0s 285071470e-09 1s 1s 285075830e-09 0s 0s 285079150e-09 0s 0s 285081710e-09 1s 1s 285086070e-09 0s 0s 285089430e-09 0s 0s 285091950e-09 1s 1s 285096310e-09 0s 0s 285099710e-09 0s 0s 285102190e-09 1s 1s 285106550e-09 0s 0s 285109990e-09 0s 0s 285112430e-09 1s 1s 285116790e-09 0s 0s 285120270e-09 0s 0s 285122670e-09 1s 1s 285127030e-09 0s 0s 285130550e-09 0s 0s 285132910e-09 1s 1s 285137270e-09 0s 0s 285140830e-09 0s 0s 285143150e-09 1s 1s 285147510e-09 0s 0s 285151110e-09 0s 0s 285153390e-09 1s 1s 285157750e-09 0s 0s 285161390e-09 0s 0s 285163630e-09 1s 1s 285167990e-09 0s 0s 285171670e-09 0s 0s 285173870e-09 1s 1s 285178230e-09 0s 0s 285181950e-09 0s 0s 285184110e-09 1s 1s 285188470e-09 0s 0s 285192230e-09 0s 0s 285194350e-09 1s 1s 285198710e-09 0s 0s 285202510e-09 0s 0s 285204590e-09 1s 1s 285208950e-09 0s 0s 285212790e-09 0s 0s 285214830e-09 1s 1s 285219190e-09 0s 0s 285223070e-09 0s 0s 285225070e-09 1s 1s 285229430e-09 0s 0s 285233350e-09 0s 0s 285235310e-09 1s 1s 285239670e-09 0s 0s 285243630e-09 0s 0s 285245550e-09 1s 1s 285249910e-09 0s 0s 285253910e-09 0s 0s 285255790e-09 1s 1s 285260150e-09 0s 0s 285264190e-09 0s 0s 285266030e-09 1s 1s 285270390e-09 0s 0s 285274470e-09 0s 0s 285276270e-09 1s 1s 285280630e-09 0s 0s 285284750e-09 0s 0s 285286510e-09 1s 1s 285290870e-09 0s 0s 285295030e-09 0s 0s 285296750e-09 1s 1s 285301110e-09 0s 0s 285305310e-09 0s 0s 285306990e-09 1s 1s 285311350e-09 0s 0s 285315590e-09 0s 0s 285317230e-09 1s 1s 285321590e-09 0s 0s 285325870e-09 0s 0s 285327470e-09 1s 1s 285331830e-09 0s 0s 285336150e-09 0s 0s 285337710e-09 1s 1s 285342070e-09 0s 0s 285346430e-09 0s 0s 285347950e-09 1s 1s 285352310e-09 0s 0s 285356710e-09 0s 0s 285358190e-09 1s 1s 285362550e-09 0s 0s 285366990e-09 0s 0s 285368430e-09 1s 1s 285372790e-09 0s 0s 285377270e-09 0s 0s 285378670e-09 1s 1s 285383030e-09 0s 0s 285387550e-09 0s 0s 285388910e-09 1s 1s 285393270e-09 0s 0s 285397830e-09 0s 0s 285399150e-09 1s 1s 285403510e-09 0s 0s 285408110e-09 0s 0s 285409390e-09 1s 1s 285413750e-09 0s 0s 285418390e-09 0s 0s 285419630e-09 1s 1s 285423990e-09 0s 0s 285428670e-09 0s 0s 285429870e-09 1s 1s 285434230e-09 0s 0s 285438950e-09 0s 0s 285440110e-09 1s 1s 285444470e-09 0s 0s 285449230e-09 0s 0s 285450350e-09 1s 1s 285454710e-09 0s 0s 285459510e-09 0s 0s 285460590e-09 1s 1s 285464950e-09 0s 0s 285469790e-09 0s 0s 285470830e-09 1s 1s 285475190e-09 0s 0s 285480070e-09 0s 0s 285481070e-09 1s 1s 285485430e-09 0s 0s 285490350e-09 0s 0s 285491310e-09 1s 1s 285495670e-09 0s 0s 285500630e-09 0s 0s 285501550e-09 1s 1s 285505910e-09 0s 0s 285510910e-09 0s 0s 285511790e-09 1s 1s 285516150e-09 0s 0s 285521190e-09 0s 0s 285522030e-09 1s 1s 285526390e-09 0s 0s 285531470e-09 0s 0s 285532270e-09 1s 1s 285536630e-09 0s 0s 285541750e-09 0s 0s 285542510e-09 1s 1s 285546870e-09 0s 0s 285552030e-09 0s 0s 285552750e-09 1s 1s 285557110e-09 0s 0s 285562310e-09 0s 0s 285562990e-09 1s 1s 285567350e-09 0s 0s 285572590e-09 0s 0s 285573230e-09 1s 1s 285577590e-09 0s 0s 285582870e-09 0s 0s 285583470e-09 1s 1s 285587830e-09 0s 0s 285593150e-09 0s 0s 285593710e-09 1s 1s 285598070e-09 0s 0s 285603430e-09 0s 0s 285603950e-09 1s 1s 285608310e-09 0s 0s 285613710e-09 0s 0s 285614190e-09 1s 1s 285618550e-09 0s 0s 285623990e-09 0s 0s 285624430e-09 1s 1s 285628790e-09 0s 0s 285634270e-09 0s 0s 285634670e-09 1s 1s 285639030e-09 0s 0s 285644550e-09 0s 0s 285644910e-09 1s 1s 285649270e-09 0s 0s 285654830e-09 0s 0s 285655150e-09 1s 1s 285659510e-09 0s 0s 285665110e-09 0s 0s 285665390e-09 1s 1s 285669750e-09 0s 0s 285675390e-09 0s 0s 285675630e-09 1s 1s 285679990e-09 0s 0s 285685670e-09 0s 0s 285685870e-09 1s 1s 285690230e-09 0s 0s 285695950e-09 0s 0s 285696110e-09 1s 1s 285700470e-09 0s 0s 285706230e-09 0s 0s 285706350e-09 1s 1s 285710710e-09 0s 0s 285716510e-09 0s 0s 285716590e-09 1s 1s 285720950e-09 0s 0s 285726790e-09 0s 0s 285726830e-09 1s 1s 285731190e-09 0s 0s 285737070e-09 1s 1s 285737110e-09 1s 1s 285741470e-09 0s 0s 285747310e-09 1s 1s 285747390e-09 1s 1s 285751710e-09 0s 0s 285757550e-09 1s 1s 285757670e-09 1s 1s 285761950e-09 0s 0s 285767790e-09 1s 1s 285767950e-09 1s 1s 285772190e-09 0s 0s 285778030e-09 1s 1s 285778230e-09 1s 1s 285782430e-09 0s 0s 285788270e-09 1s 1s 285788510e-09 1s 1s 285792670e-09 0s 0s 285798510e-09 1s 1s 285798790e-09 1s 1s 285802910e-09 0s 0s 285808750e-09 1s 1s 285809070e-09 1s 1s 285813150e-09 0s 0s 285818990e-09 1s 1s 285819350e-09 1s 1s 285823390e-09 0s 0s 285829230e-09 1s 1s 285829630e-09 1s 1s 285833630e-09 0s 0s 285839470e-09 1s 1s 285839910e-09 1s 1s 285843870e-09 0s 0s 285849710e-09 1s 1s 285850190e-09 1s 1s 285854110e-09 0s 0s 285859950e-09 1s 1s 285860470e-09 1s 1s 285864350e-09 0s 0s 285870190e-09 1s 1s 285870750e-09 1s 1s 285874590e-09 0s 0s 285880430e-09 1s 1s 285881030e-09 1s 1s 285884830e-09 0s 0s 285890670e-09 1s 1s 285891310e-09 1s 1s 285895070e-09 0s 0s 285900910e-09 1s 1s 285901590e-09 1s 1s 285905310e-09 0s 0s 285911150e-09 1s 1s 285911870e-09 1s 1s 285915550e-09 0s 0s 285921390e-09 1s 1s 285922150e-09 1s 1s 285925790e-09 0s 0s 285931630e-09 1s 1s 285932430e-09 1s 1s 285936030e-09 0s 0s 285941870e-09 1s 1s 285942710e-09 1s 1s 285946270e-09 0s 0s 285952110e-09 1s 1s 285952990e-09 1s 1s 285956510e-09 0s 0s 285962350e-09 1s 1s 285963270e-09 1s 1s 285966750e-09 0s 0s 285972590e-09 1s 1s 285973550e-09 1s 1s 285976990e-09 0s 0s 285982830e-09 1s 1s 285983830e-09 1s 1s 285987230e-09 0s 0s 285993070e-09 1s 1s 285994110e-09 1s 1s 285997470e-09 0s 0s 286003310e-09 1s 1s 286004390e-09 1s 1s 286007710e-09 0s 0s 286013550e-09 1s 1s 286014670e-09 1s 1s 286017950e-09 0s 0s 286023790e-09 1s 1s 286024950e-09 1s 1s 286028190e-09 0s 0s 286034030e-09 1s 1s 286035230e-09 1s 1s 286038430e-09 0s 0s 286044270e-09 1s 1s 286045510e-09 1s 1s 286048670e-09 0s 0s 286054510e-09 1s 1s 286055790e-09 1s 1s 286058910e-09 0s 0s 286064750e-09 1s 1s 286066070e-09 1s 1s 286069150e-09 0s 0s 286074990e-09 1s 1s 286076350e-09 1s 1s 286079390e-09 0s 0s 286085230e-09 1s 1s 286086630e-09 1s 1s 286089630e-09 0s 0s 286095470e-09 1s 1s 286096910e-09 1s 1s 286099870e-09 0s 0s 286105710e-09 1s 1s 286107190e-09 1s 1s 286110110e-09 0s 0s 286115950e-09 1s 1s 286117470e-09 1s 1s 286120350e-09 0s 0s 286126190e-09 1s 1s 286127750e-09 1s 1s 286130590e-09 0s 0s 286136430e-09 1s 1s 286138030e-09 1s 1s 286140830e-09 0s 0s 286146670e-09 1s 1s 286148310e-09 1s 1s 286151070e-09 0s 0s 286156910e-09 1s 1s 286158590e-09 1s 1s 286161310e-09 0s 0s 286167150e-09 1s 1s 286168870e-09 1s 1s 286171550e-09 0s 0s 286177390e-09 1s 1s 286179150e-09 1s 1s 286181790e-09 0s 0s 286187630e-09 1s 1s 286189430e-09 1s 1s 286192030e-09 0s 0s 286197870e-09 1s 1s 286199710e-09 1s 1s 286202270e-09 0s 0s 286208110e-09 1s 1s 286209990e-09 1s 1s 286212510e-09 0s 0s 286218350e-09 1s 1s 286220270e-09 1s 1s 286222750e-09 0s 0s 286228590e-09 1s 1s 286230550e-09 1s 1s 286232990e-09 0s 0s 286238830e-09 1s 1s 286240830e-09 1s 1s 286243230e-09 0s 0s 286249070e-09 1s 1s 286251110e-09 1s 1s 286253470e-09 0s 0s 286259310e-09 1s 1s 286261390e-09 1s 1s 286263710e-09 0s 0s 286269550e-09 1s 1s 286271670e-09 1s 1s 286273950e-09 0s 0s 286279790e-09 1s 1s 286281950e-09 1s 1s 286284190e-09 0s 0s 286290030e-09 1s 1s 286292230e-09 1s 1s 286294430e-09 0s 0s 286300270e-09 1s 1s 286302510e-09 1s 1s 286304670e-09 0s 0s 286310510e-09 1s 1s 286312790e-09 1s 1s 286314910e-09 0s 0s 286320750e-09 1s 1s 286323070e-09 1s 1s 286325150e-09 0s 0s 286330990e-09 1s 1s 286333350e-09 1s 1s 286335390e-09 0s 0s 286341230e-09 1s 1s 286343630e-09 1s 1s 286345630e-09 0s 0s 286351470e-09 1s 1s 286353910e-09 1s 1s 286355870e-09 0s 0s 286361710e-09 1s 1s 286364190e-09 1s 1s 286366110e-09 0s 0s 286371950e-09 1s 1s 286374470e-09 1s 1s 286376350e-09 0s 0s 286382190e-09 1s 1s 286384750e-09 1s 1s 286386590e-09 0s 0s 286392430e-09 1s 1s 286395030e-09 1s 1s 286396830e-09 0s 0s 286402670e-09 1s 1s 286405310e-09 1s 1s 286407070e-09 0s 0s 286412910e-09 1s 1s 286415590e-09 1s 1s 286417310e-09 0s 0s 286423150e-09 1s 1s 286425870e-09 1s 1s 286427550e-09 0s 0s 286433390e-09 1s 1s 286436150e-09 1s 1s 286437790e-09 0s 0s 286443630e-09 1s 1s 286446430e-09 1s 1s 286448030e-09 0s 0s 286453870e-09 1s 1s 286456710e-09 1s 1s 286458270e-09 0s 0s 286464110e-09 1s 1s 286466990e-09 1s 1s 286468510e-09 0s 0s 286474350e-09 1s 1s 286477270e-09 1s 1s 286478750e-09 0s 0s 286484590e-09 1s 1s 286487550e-09 1s 1s 286488990e-09 0s 0s 286494830e-09 1s 1s 286497830e-09 1s 1s 286499230e-09 0s 0s 286505070e-09 1s 1s 286508110e-09 1s 1s 286509470e-09 0s 0s 286515310e-09 1s 1s 286518390e-09 1s 1s 286519710e-09 0s 0s 286525550e-09 1s 1s 286528670e-09 1s 1s 286529950e-09 0s 0s 286535790e-09 1s 1s 286538950e-09 1s 1s 286540190e-09 0s 0s 286546030e-09 1s 1s 286549230e-09 1s 1s 286550430e-09 0s 0s 286556270e-09 1s 1s 286559510e-09 1s 1s 286560670e-09 0s 0s 286566510e-09 1s 1s 286569790e-09 1s 1s 286570910e-09 0s 0s 286576750e-09 1s 1s 286580070e-09 1s 1s 286581150e-09 0s 0s 286586990e-09 1s 1s 286590350e-09 1s 1s 286591390e-09 0s 0s 286597230e-09 1s 1s 286600630e-09 1s 1s 286601630e-09 0s 0s 286607470e-09 1s 1s 286610910e-09 1s 1s 286611870e-09 0s 0s 286617710e-09 1s 1s 286621190e-09 1s 1s 286622110e-09 0s 0s 286627950e-09 1s 1s 286631470e-09 1s 1s 286632350e-09 0s 0s 286638190e-09 1s 1s 286641750e-09 1s 1s 286642590e-09 0s 0s 286648430e-09 1s 1s 286652030e-09 1s 1s 286652830e-09 0s 0s 286658670e-09 1s 1s 286662310e-09 1s 1s 286663070e-09 0s 0s 286668910e-09 1s 1s 286672590e-09 1s 1s 286673310e-09 0s 0s 286679150e-09 1s 1s 286682870e-09 1s 1s 286683550e-09 0s 0s 286689390e-09 1s 1s 286693150e-09 1s 1s 286693790e-09 0s 0s 286699630e-09 1s 1s 286703430e-09 1s 1s 286704030e-09 0s 0s 286709870e-09 1s 1s 286713710e-09 1s 1s 286714270e-09 0s 0s 286720110e-09 1s 1s 286723990e-09 1s 1s 286724510e-09 0s 0s 286730350e-09 1s 1s 286734270e-09 1s 1s 286734750e-09 0s 0s 286740590e-09 1s 1s 286744550e-09 1s 1s 286744990e-09 0s 0s 286750830e-09 1s 1s 286754830e-09 1s 1s 286755230e-09 0s 0s 286761070e-09 1s 1s 286765110e-09 1s 1s 286765470e-09 0s 0s 286771310e-09 1s 1s 286775390e-09 1s 1s 286775710e-09 0s 0s 286781550e-09 1s 1s 286785670e-09 1s 1s 286785950e-09 0s 0s 286791790e-09 1s 1s 286795950e-09 1s 1s 286796190e-09 0s 0s 286802030e-09 1s 1s 286806230e-09 1s 1s 286806430e-09 0s 0s 286812270e-09 1s 1s 286816510e-09 1s 1s 286816670e-09 0s 0s 286822510e-09 1s 1s 286826790e-09 1s 1s 286826910e-09 0s 0s 286832750e-09 1s 1s 286837070e-09 1s 1s 286837150e-09 0s 0s 286842990e-09 1s 1s 286847350e-09 1s 1s 286847390e-09 0s 0s 286853230e-09 1s 1s 286857630e-09 0s 0s 286863470e-09 1s 1s 286867870e-09 0s 0s 286867910e-09 0s 0s 286873710e-09 1s 1s 286878110e-09 0s 0s 286878190e-09 0s 0s 286883950e-09 1s 1s 286888350e-09 0s 0s 286888470e-09 0s 0s 286894190e-09 1s 1s 286898590e-09 0s 0s 286898750e-09 0s 0s 286904430e-09 1s 1s 286908830e-09 0s 0s 286909030e-09 0s 0s 286914670e-09 1s 1s 286919070e-09 0s 0s 286919310e-09 0s 0s 286924910e-09 1s 1s 286929310e-09 0s 0s 286929590e-09 0s 0s 286935150e-09 1s 1s 286939550e-09 0s 0s 286939870e-09 0s 0s 286945390e-09 1s 1s 286949790e-09 0s 0s 286950150e-09 0s 0s 286955630e-09 1s 1s 286960030e-09 0s 0s 286960430e-09 0s 0s 286965870e-09 1s 1s 286970270e-09 0s 0s 286970710e-09 0s 0s 286976110e-09 1s 1s 286980510e-09 0s 0s 286980990e-09 0s 0s 286986350e-09 1s 1s 286990750e-09 0s 0s 286991270e-09 0s 0s 286996590e-09 1s 1s 287000990e-09 0s 0s 287001550e-09 0s 0s 287006830e-09 1s 1s 287011230e-09 0s 0s 287011830e-09 0s 0s 287017070e-09 1s 1s 287021470e-09 0s 0s 287022110e-09 0s 0s 287027310e-09 1s 1s 287031710e-09 0s 0s 287032390e-09 0s 0s 287037550e-09 1s 1s 287041950e-09 0s 0s 287042670e-09 0s 0s 287047790e-09 1s 1s 287052190e-09 0s 0s 287052950e-09 0s 0s 287058030e-09 1s 1s 287062430e-09 0s 0s 287063230e-09 0s 0s 287068270e-09 1s 1s 287072670e-09 0s 0s 287073510e-09 0s 0s 287078510e-09 1s 1s 287082910e-09 0s 0s 287083790e-09 0s 0s 287088750e-09 1s 1s 287093150e-09 0s 0s 287094070e-09 0s 0s 287098990e-09 1s 1s 287103390e-09 0s 0s 287104350e-09 0s 0s 287109230e-09 1s 1s 287113630e-09 0s 0s 287114630e-09 0s 0s 287119470e-09 1s 1s 287123870e-09 0s 0s 287124910e-09 0s 0s 287129710e-09 1s 1s 287134110e-09 0s 0s 287135190e-09 0s 0s 287139950e-09 1s 1s 287144350e-09 0s 0s 287145470e-09 0s 0s 287150190e-09 1s 1s 287154590e-09 0s 0s 287155750e-09 0s 0s 287160430e-09 1s 1s 287164830e-09 0s 0s 287166030e-09 0s 0s 287170670e-09 1s 1s 287175070e-09 0s 0s 287176310e-09 0s 0s 287180910e-09 1s 1s 287185310e-09 0s 0s 287186590e-09 0s 0s 287191150e-09 1s 1s 287195550e-09 0s 0s 287196870e-09 0s 0s 287201390e-09 1s 1s 287205790e-09 0s 0s 287207150e-09 0s 0s 287211630e-09 1s 1s 287216030e-09 0s 0s 287217430e-09 0s 0s 287221870e-09 1s 1s 287226270e-09 0s 0s 287227710e-09 0s 0s 287232110e-09 1s 1s 287236510e-09 0s 0s 287237990e-09 0s 0s 287242350e-09 1s 1s 287246750e-09 0s 0s 287248270e-09 0s 0s 287252590e-09 1s 1s 287256990e-09 0s 0s 287258550e-09 0s 0s 287262830e-09 1s 1s 287267230e-09 0s 0s 287268830e-09 0s 0s 287273070e-09 1s 1s 287277470e-09 0s 0s 287279110e-09 0s 0s 287283310e-09 1s 1s 287287710e-09 0s 0s 287289390e-09 0s 0s 287293550e-09 1s 1s 287297950e-09 0s 0s 287299670e-09 0s 0s 287303790e-09 1s 1s 287308190e-09 0s 0s 287309950e-09 0s 0s 287314030e-09 1s 1s 287318430e-09 0s 0s 287320230e-09 0s 0s 287324270e-09 1s 1s 287328670e-09 0s 0s 287330510e-09 0s 0s 287334510e-09 1s 1s 287338910e-09 0s 0s 287340790e-09 0s 0s 287344750e-09 1s 1s 287349150e-09 0s 0s 287351070e-09 0s 0s 287354990e-09 1s 1s 287359390e-09 0s 0s 287361350e-09 0s 0s 287365230e-09 1s 1s 287369630e-09 0s 0s 287371630e-09 0s 0s 287375470e-09 1s 1s 287379870e-09 0s 0s 287381910e-09 0s 0s 287385710e-09 1s 1s 287390110e-09 0s 0s 287392190e-09 0s 0s 287395950e-09 1s 1s 287400350e-09 0s 0s 287402470e-09 0s 0s 287406190e-09 1s 1s 287410590e-09 0s 0s 287412750e-09 0s 0s 287416430e-09 1s 1s 287420830e-09 0s 0s 287423030e-09 0s 0s 287426670e-09 1s 1s 287431070e-09 0s 0s 287433310e-09 0s 0s 287436910e-09 1s 1s 287441310e-09 0s 0s 287443590e-09 0s 0s 287447150e-09 1s 1s 287451550e-09 0s 0s 287453870e-09 0s 0s 287457390e-09 1s 1s 287461790e-09 0s 0s 287464150e-09 0s 0s 287467630e-09 1s 1s 287472030e-09 0s 0s 287474430e-09 0s 0s 287477870e-09 1s 1s 287482270e-09 0s 0s 287484710e-09 0s 0s 287488110e-09 1s 1s 287492510e-09 0s 0s 287494990e-09 0s 0s 287498350e-09 1s 1s 287502750e-09 0s 0s 287505270e-09 0s 0s 287508590e-09 1s 1s 287512990e-09 0s 0s 287515550e-09 0s 0s 287518830e-09 1s 1s 287523230e-09 0s 0s 287525830e-09 0s 0s 287529070e-09 1s 1s 287533470e-09 0s 0s 287536110e-09 0s 0s 287539310e-09 1s 1s 287543710e-09 0s 0s 287546390e-09 0s 0s 287549550e-09 1s 1s 287553950e-09 0s 0s 287556670e-09 0s 0s 287559790e-09 1s 1s 287564190e-09 0s 0s 287566950e-09 0s 0s 287570030e-09 1s 1s 287574430e-09 0s 0s 287577230e-09 0s 0s 287580270e-09 1s 1s 287584670e-09 0s 0s 287587510e-09 0s 0s 287590510e-09 1s 1s 287594910e-09 0s 0s 287597790e-09 0s 0s 287600750e-09 1s 1s 287605150e-09 0s 0s 287608070e-09 0s 0s 287610990e-09 1s 1s 287615390e-09 0s 0s 287618350e-09 0s 0s 287621230e-09 1s 1s 287625630e-09 0s 0s 287628630e-09 0s 0s 287631470e-09 1s 1s 287635870e-09 0s 0s 287638910e-09 0s 0s 287641710e-09 1s 1s 287646110e-09 0s 0s 287649190e-09 0s 0s 287651950e-09 1s 1s 287656350e-09 0s 0s 287659470e-09 0s 0s 287662190e-09 1s 1s 287666590e-09 0s 0s 287669750e-09 0s 0s 287672430e-09 1s 1s 287676830e-09 0s 0s 287680030e-09 0s 0s 287682670e-09 1s 1s 287687070e-09 0s 0s 287690310e-09 0s 0s 287692910e-09 1s 1s 287697310e-09 0s 0s 287700590e-09 0s 0s 287703150e-09 1s 1s 287707550e-09 0s 0s 287710870e-09 0s 0s 287713390e-09 1s 1s 287717790e-09 0s 0s 287721150e-09 0s 0s 287723630e-09 1s 1s 287728030e-09 0s 0s 287731430e-09 0s 0s 287733870e-09 1s 1s 287738270e-09 0s 0s 287741710e-09 0s 0s 287744110e-09 1s 1s 287748510e-09 0s 0s 287751990e-09 0s 0s 287754350e-09 1s 1s 287758750e-09 0s 0s 287762270e-09 0s 0s 287764590e-09 1s 1s 287768990e-09 0s 0s 287772550e-09 0s 0s 287774830e-09 1s 1s 287779230e-09 0s 0s 287782830e-09 0s 0s 287785070e-09 1s 1s 287789470e-09 0s 0s 287793110e-09 0s 0s 287795310e-09 1s 1s 287799710e-09 0s 0s 287803390e-09 0s 0s 287805550e-09 1s 1s 287809950e-09 0s 0s 287813670e-09 0s 0s 287815790e-09 1s 1s 287820190e-09 0s 0s 287823950e-09 0s 0s 287826030e-09 1s 1s 287830430e-09 0s 0s 287834230e-09 0s 0s 287836270e-09 1s 1s 287840670e-09 0s 0s 287844510e-09 0s 0s 287846510e-09 1s 1s 287850910e-09 0s 0s 287854790e-09 0s 0s 287856750e-09 1s 1s 287861150e-09 0s 0s 287865070e-09 0s 0s 287866990e-09 1s 1s 287871390e-09 0s 0s 287875350e-09 0s 0s 287877230e-09 1s 1s 287881630e-09 0s 0s 287885630e-09 0s 0s 287887470e-09 1s 1s 287891870e-09 0s 0s 287895910e-09 0s 0s 287897710e-09 1s 1s 287902110e-09 0s 0s 287906190e-09 0s 0s 287907950e-09 1s 1s 287912350e-09 0s 0s 287916470e-09 0s 0s 287918190e-09 1s 1s 287922590e-09 0s 0s 287926750e-09 0s 0s 287928430e-09 1s 1s 287932830e-09 0s 0s 287937030e-09 0s 0s 287938670e-09 1s 1s 287943070e-09 0s 0s 287947310e-09 0s 0s 287948910e-09 1s 1s 287953310e-09 0s 0s 287957590e-09 0s 0s 287959150e-09 1s 1s 287963550e-09 0s 0s 287967870e-09 0s 0s 287969390e-09 1s 1s 287973790e-09 0s 0s 287978150e-09 0s 0s 287979630e-09 1s 1s 287984030e-09 0s 0s 287988430e-09 0s 0s 287989870e-09 1s 1s 287994270e-09 0s 0s 287998710e-09 0s 0s 288000110e-09 1s 1s 288004510e-09 0s 0s 288008990e-09 0s 0s 288010350e-09 1s 1s 288014750e-09 0s 0s 288019270e-09 0s 0s 288020590e-09 1s 1s 288024990e-09 0s 0s 288029550e-09 0s 0s 288030830e-09 1s 1s 288035230e-09 0s 0s 288039830e-09 0s 0s 288041070e-09 1s 1s 288045470e-09 0s 0s 288050110e-09 0s 0s 288051310e-09 1s 1s 288055710e-09 0s 0s 288060390e-09 0s 0s 288061550e-09 1s 1s 288065950e-09 0s 0s 288070670e-09 0s 0s 288071790e-09 1s 1s 288076190e-09 0s 0s 288080950e-09 0s 0s 288082030e-09 1s 1s 288086430e-09 0s 0s 288091230e-09 0s 0s 288092270e-09 1s 1s 288096670e-09 0s 0s 288101510e-09 0s 0s 288102510e-09 1s 1s 288106910e-09 0s 0s 288111790e-09 0s 0s 288112750e-09 1s 1s 288117150e-09 0s 0s 288122070e-09 0s 0s 288122990e-09 1s 1s 288127390e-09 0s 0s 288132350e-09 0s 0s 288133230e-09 1s 1s 288137630e-09 0s 0s 288142630e-09 0s 0s 288143470e-09 1s 1s 288147870e-09 0s 0s 288152910e-09 0s 0s 288153710e-09 1s 1s 288158110e-09 0s 0s 288163190e-09 0s 0s 288163950e-09 1s 1s 288168350e-09 0s 0s 288173470e-09 0s 0s 288174190e-09 1s 1s 288178590e-09 0s 0s 288183750e-09 0s 0s 288184430e-09 1s 1s 288188830e-09 0s 0s 288194030e-09 0s 0s 288194670e-09 1s 1s 288199070e-09 0s 0s 288204310e-09 0s 0s 288204910e-09 1s 1s 288209310e-09 0s 0s 288214590e-09 0s 0s 288215150e-09 1s 1s 288219550e-09 0s 0s 288224870e-09 0s 0s 288225390e-09 1s 1s 288229790e-09 0s 0s 288235150e-09 0s 0s 288235630e-09 1s 1s 288240030e-09 0s 0s 288245430e-09 0s 0s 288245870e-09 1s 1s 288250270e-09 0s 0s 288255710e-09 0s 0s 288256110e-09 1s 1s 288260510e-09 0s 0s 288265990e-09 0s 0s 288266350e-09 1s 1s 288270750e-09 0s 0s 288276270e-09 0s 0s 288276590e-09 1s 1s 288280990e-09 0s 0s 288286550e-09 0s 0s 288286830e-09 1s 1s 288291230e-09 0s 0s 288296830e-09 0s 0s 288297070e-09 1s 1s 288301470e-09 0s 0s 288307110e-09 0s 0s 288307310e-09 1s 1s 288311710e-09 0s 0s 288317390e-09 0s 0s 288317550e-09 1s 1s 288321950e-09 0s 0s 288327670e-09 0s 0s 288327790e-09 1s 1s 288332190e-09 0s 0s 288337950e-09 0s 0s 288338030e-09 1s 1s 288342430e-09 0s 0s 288348230e-09 0s 0s 288348270e-09 1s 1s 288352670e-09 0s 0s 288358510e-09 1s 1s 288358550e-09 1s 1s 288362950e-09 0s 0s 288368750e-09 1s 1s 288368830e-09 1s 1s 288373190e-09 0s 0s 288378990e-09 1s 1s 288379110e-09 1s 1s 288383430e-09 0s 0s 288389230e-09 1s 1s 288389390e-09 1s 1s 288393670e-09 0s 0s 288399470e-09 1s 1s 288399670e-09 1s 1s 288403910e-09 0s 0s 288409710e-09 1s 1s 288409950e-09 1s 1s 288414150e-09 0s 0s 288419950e-09 1s 1s 288420230e-09 1s 1s 288424390e-09 0s 0s 288430190e-09 1s 1s 288430510e-09 1s 1s 288434630e-09 0s 0s 288440430e-09 1s 1s 288440790e-09 1s 1s 288444870e-09 0s 0s 288450670e-09 1s 1s 288451070e-09 1s 1s 288455110e-09 0s 0s 288460910e-09 1s 1s 288461350e-09 1s 1s 288465350e-09 0s 0s 288471150e-09 1s 1s 288471630e-09 1s 1s 288475590e-09 0s 0s 288481390e-09 1s 1s 288481910e-09 1s 1s 288485830e-09 0s 0s 288491630e-09 1s 1s 288492190e-09 1s 1s 288496070e-09 0s 0s 288501870e-09 1s 1s 288502470e-09 1s 1s 288506310e-09 0s 0s 288512110e-09 1s 1s 288512750e-09 1s 1s 288516550e-09 0s 0s 288522350e-09 1s 1s 288523030e-09 1s 1s 288526790e-09 0s 0s 288532590e-09 1s 1s 288533310e-09 1s 1s 288537030e-09 0s 0s 288542830e-09 1s 1s 288543590e-09 1s 1s 288547270e-09 0s 0s 288553070e-09 1s 1s 288553870e-09 1s 1s 288557510e-09 0s 0s 288563310e-09 1s 1s 288564150e-09 1s 1s 288567750e-09 0s 0s 288573550e-09 1s 1s 288574430e-09 1s 1s 288577990e-09 0s 0s 288583790e-09 1s 1s 288584710e-09 1s 1s 288588230e-09 0s 0s 288594030e-09 1s 1s 288594990e-09 1s 1s 288598470e-09 0s 0s 288604270e-09 1s 1s 288605270e-09 1s 1s 288608710e-09 0s 0s 288614510e-09 1s 1s 288615550e-09 1s 1s 288618950e-09 0s 0s 288624750e-09 1s 1s 288625830e-09 1s 1s 288629190e-09 0s 0s 288634990e-09 1s 1s 288636110e-09 1s 1s 288639430e-09 0s 0s 288645230e-09 1s 1s 288646390e-09 1s 1s 288649670e-09 0s 0s 288655470e-09 1s 1s 288656670e-09 1s 1s 288659910e-09 0s 0s 288665710e-09 1s 1s 288666950e-09 1s 1s 288670150e-09 0s 0s 288675950e-09 1s 1s 288677230e-09 1s 1s 288680390e-09 0s 0s 288686190e-09 1s 1s 288687510e-09 1s 1s 288690630e-09 0s 0s 288696430e-09 1s 1s 288697790e-09 1s 1s 288700870e-09 0s 0s 288706670e-09 1s 1s 288708070e-09 1s 1s 288711110e-09 0s 0s 288716910e-09 1s 1s 288718350e-09 1s 1s 288721350e-09 0s 0s 288727150e-09 1s 1s 288728630e-09 1s 1s 288731590e-09 0s 0s 288737390e-09 1s 1s 288738910e-09 1s 1s 288741830e-09 0s 0s 288747630e-09 1s 1s 288749190e-09 1s 1s 288752070e-09 0s 0s 288757870e-09 1s 1s 288759470e-09 1s 1s 288762310e-09 0s 0s 288768110e-09 1s 1s 288769750e-09 1s 1s 288772550e-09 0s 0s 288778350e-09 1s 1s 288780030e-09 1s 1s 288782790e-09 0s 0s 288788590e-09 1s 1s 288790310e-09 1s 1s 288793030e-09 0s 0s 288798830e-09 1s 1s 288800590e-09 1s 1s 288803270e-09 0s 0s 288809070e-09 1s 1s 288810870e-09 1s 1s 288813510e-09 0s 0s 288819310e-09 1s 1s 288821150e-09 1s 1s 288823750e-09 0s 0s 288829550e-09 1s 1s 288831430e-09 1s 1s 288833990e-09 0s 0s 288839790e-09 1s 1s 288841710e-09 1s 1s 288844230e-09 0s 0s 288850030e-09 1s 1s 288851990e-09 1s 1s 288854470e-09 0s 0s 288860270e-09 1s 1s 288862270e-09 1s 1s 288864710e-09 0s 0s 288870510e-09 1s 1s 288872550e-09 1s 1s 288874950e-09 0s 0s 288880750e-09 1s 1s 288882830e-09 1s 1s 288885190e-09 0s 0s 288890990e-09 1s 1s 288893110e-09 1s 1s 288895430e-09 0s 0s 288901230e-09 1s 1s 288903390e-09 1s 1s 288905670e-09 0s 0s 288911470e-09 1s 1s 288913670e-09 1s 1s 288915910e-09 0s 0s 288921710e-09 1s 1s 288923950e-09 1s 1s 288926150e-09 0s 0s 288931950e-09 1s 1s 288934230e-09 1s 1s 288936390e-09 0s 0s 288942190e-09 1s 1s 288944510e-09 1s 1s 288946630e-09 0s 0s 288952430e-09 1s 1s 288954790e-09 1s 1s 288956870e-09 0s 0s 288962670e-09 1s 1s 288965070e-09 1s 1s 288967110e-09 0s 0s 288972910e-09 1s 1s 288975350e-09 1s 1s 288977350e-09 0s 0s 288983150e-09 1s 1s 288985630e-09 1s 1s 288987590e-09 0s 0s 288993390e-09 1s 1s 288995910e-09 1s 1s 288997830e-09 0s 0s 289003630e-09 1s 1s 289006190e-09 1s 1s 289008070e-09 0s 0s 289013870e-09 1s 1s 289016470e-09 1s 1s 289018310e-09 0s 0s 289024110e-09 1s 1s 289026750e-09 1s 1s 289028550e-09 0s 0s 289034350e-09 1s 1s 289037030e-09 1s 1s 289038790e-09 0s 0s 289044590e-09 1s 1s 289047310e-09 1s 1s 289049030e-09 0s 0s 289054830e-09 1s 1s 289057590e-09 1s 1s 289059270e-09 0s 0s 289065070e-09 1s 1s 289067870e-09 1s 1s 289069510e-09 0s 0s 289075310e-09 1s 1s 289078150e-09 1s 1s 289079750e-09 0s 0s 289085550e-09 1s 1s 289088430e-09 1s 1s 289089990e-09 0s 0s 289095790e-09 1s 1s 289098710e-09 1s 1s 289100230e-09 0s 0s 289106030e-09 1s 1s 289108990e-09 1s 1s 289110470e-09 0s 0s 289116270e-09 1s 1s 289119270e-09 1s 1s 289120710e-09 0s 0s 289126510e-09 1s 1s 289129550e-09 1s 1s 289130950e-09 0s 0s 289136750e-09 1s 1s 289139830e-09 1s 1s 289141190e-09 0s 0s 289146990e-09 1s 1s 289150110e-09 1s 1s 289151430e-09 0s 0s 289157230e-09 1s 1s 289160390e-09 1s 1s 289161670e-09 0s 0s 289167470e-09 1s 1s 289170670e-09 1s 1s 289171910e-09 0s 0s 289177710e-09 1s 1s 289180950e-09 1s 1s 289182150e-09 0s 0s 289187950e-09 1s 1s 289191230e-09 1s 1s 289192390e-09 0s 0s 289198190e-09 1s 1s 289201510e-09 1s 1s 289202630e-09 0s 0s 289208430e-09 1s 1s 289211790e-09 1s 1s 289212870e-09 0s 0s 289218670e-09 1s 1s 289222070e-09 1s 1s 289223110e-09 0s 0s 289228910e-09 1s 1s 289232350e-09 1s 1s 289233350e-09 0s 0s 289239150e-09 1s 1s 289242630e-09 1s 1s 289243590e-09 0s 0s 289249390e-09 1s 1s 289252910e-09 1s 1s 289253830e-09 0s 0s 289259630e-09 1s 1s 289263190e-09 1s 1s 289264070e-09 0s 0s 289269870e-09 1s 1s 289273470e-09 1s 1s 289274310e-09 0s 0s 289280110e-09 1s 1s 289283750e-09 1s 1s 289284550e-09 0s 0s 289290350e-09 1s 1s 289294030e-09 1s 1s 289294790e-09 0s 0s 289300590e-09 1s 1s 289304310e-09 1s 1s 289305030e-09 0s 0s 289310830e-09 1s 1s 289314590e-09 1s 1s 289315270e-09 0s 0s 289321070e-09 1s 1s 289324870e-09 1s 1s 289325510e-09 0s 0s 289331310e-09 1s 1s 289335150e-09 1s 1s 289335750e-09 0s 0s 289341550e-09 1s 1s 289345430e-09 1s 1s 289345990e-09 0s 0s 289351790e-09 1s 1s 289355710e-09 1s 1s 289356230e-09 0s 0s 289362030e-09 1s 1s 289365990e-09 1s 1s 289366470e-09 0s 0s 289372270e-09 1s 1s 289376270e-09 1s 1s 289376710e-09 0s 0s 289382510e-09 1s 1s 289386550e-09 1s 1s 289386950e-09 0s 0s 289392750e-09 1s 1s 289396830e-09 1s 1s 289397190e-09 0s 0s 289402990e-09 1s 1s 289407110e-09 1s 1s 289407430e-09 0s 0s 289413230e-09 1s 1s 289417390e-09 1s 1s 289417670e-09 0s 0s 289423470e-09 1s 1s 289427670e-09 1s 1s 289427910e-09 0s 0s 289433710e-09 1s 1s 289437950e-09 1s 1s 289438150e-09 0s 0s 289443950e-09 1s 1s 289448230e-09 1s 1s 289448390e-09 0s 0s 289454190e-09 1s 1s 289458510e-09 1s 1s 289458630e-09 0s 0s 289464430e-09 1s 1s 289468790e-09 1s 1s 289468870e-09 0s 0s 289474670e-09 1s 1s 289479070e-09 1s 1s 289479110e-09 0s 0s 289484910e-09 1s 1s 289489350e-09 0s 0s 289495150e-09 1s 1s 289499590e-09 0s 0s 289499630e-09 0s 0s 289505390e-09 1s 1s 289509830e-09 0s 0s 289509910e-09 0s 0s 289515630e-09 1s 1s 289520070e-09 0s 0s 289520190e-09 0s 0s 289525870e-09 1s 1s 289530310e-09 0s 0s 289530470e-09 0s 0s 289536110e-09 1s 1s 289540550e-09 0s 0s 289540750e-09 0s 0s 289546350e-09 1s 1s 289550790e-09 0s 0s 289551030e-09 0s 0s 289556590e-09 1s 1s 289561030e-09 0s 0s 289561310e-09 0s 0s 289566830e-09 1s 1s 289571270e-09 0s 0s 289571590e-09 0s 0s 289577070e-09 1s 1s 289581510e-09 0s 0s 289581870e-09 0s 0s 289587310e-09 1s 1s 289591750e-09 0s 0s 289592150e-09 0s 0s 289597550e-09 1s 1s 289601990e-09 0s 0s 289602430e-09 0s 0s 289607790e-09 1s 1s 289612230e-09 0s 0s 289612710e-09 0s 0s 289618030e-09 1s 1s 289622470e-09 0s 0s 289622990e-09 0s 0s 289628270e-09 1s 1s 289632710e-09 0s 0s 289633270e-09 0s 0s 289638510e-09 1s 1s 289642950e-09 0s 0s 289643550e-09 0s 0s 289648750e-09 1s 1s 289653190e-09 0s 0s 289653830e-09 0s 0s 289658990e-09 1s 1s 289663430e-09 0s 0s 289664110e-09 0s 0s 289669230e-09 1s 1s 289673670e-09 0s 0s 289674390e-09 0s 0s 289679470e-09 1s 1s 289683910e-09 0s 0s 289684670e-09 0s 0s 289689710e-09 1s 1s 289694150e-09 0s 0s 289694950e-09 0s 0s 289699950e-09 1s 1s 289704390e-09 0s 0s 289705230e-09 0s 0s 289710190e-09 1s 1s 289714630e-09 0s 0s 289715510e-09 0s 0s 289720430e-09 1s 1s 289724870e-09 0s 0s 289725790e-09 0s 0s 289730670e-09 1s 1s 289735110e-09 0s 0s 289736070e-09 0s 0s 289740910e-09 1s 1s 289745350e-09 0s 0s 289746350e-09 0s 0s 289751150e-09 1s 1s 289755590e-09 0s 0s 289756630e-09 0s 0s 289761390e-09 1s 1s 289765830e-09 0s 0s 289766910e-09 0s 0s 289771630e-09 1s 1s 289776070e-09 0s 0s 289777190e-09 0s 0s 289781870e-09 1s 1s 289786310e-09 0s 0s 289787470e-09 0s 0s 289792110e-09 1s 1s 289796550e-09 0s 0s 289797750e-09 0s 0s 289802350e-09 1s 1s 289806790e-09 0s 0s 289808030e-09 0s 0s 289812590e-09 1s 1s 289817030e-09 0s 0s 289818310e-09 0s 0s 289822830e-09 1s 1s 289827270e-09 0s 0s 289828590e-09 0s 0s 289833070e-09 1s 1s 289837510e-09 0s 0s 289838870e-09 0s 0s 289843310e-09 1s 1s 289847750e-09 0s 0s 289849150e-09 0s 0s 289853550e-09 1s 1s 289857990e-09 0s 0s 289859430e-09 0s 0s 289863790e-09 1s 1s 289868230e-09 0s 0s 289869710e-09 0s 0s 289874030e-09 1s 1s 289878470e-09 0s 0s 289879990e-09 0s 0s 289884270e-09 1s 1s 289888710e-09 0s 0s 289890270e-09 0s 0s 289894510e-09 1s 1s 289898950e-09 0s 0s 289900550e-09 0s 0s 289904750e-09 1s 1s 289909190e-09 0s 0s 289910830e-09 0s 0s 289914990e-09 1s 1s 289919430e-09 0s 0s 289921110e-09 0s 0s 289925230e-09 1s 1s 289929670e-09 0s 0s 289931390e-09 0s 0s 289935470e-09 1s 1s 289939910e-09 0s 0s 289941670e-09 0s 0s 289945710e-09 1s 1s 289950150e-09 0s 0s 289951950e-09 0s 0s 289955950e-09 1s 1s 289960390e-09 0s 0s 289962230e-09 0s 0s 289966190e-09 1s 1s 289970630e-09 0s 0s 289972510e-09 0s 0s 289976430e-09 1s 1s 289980870e-09 0s 0s 289982790e-09 0s 0s 289986670e-09 1s 1s 289991110e-09 0s 0s 289993070e-09 0s 0s 289996910e-09 1s 1s 290001350e-09 0s 0s 290003350e-09 0s 0s 290007150e-09 1s 1s 290011590e-09 0s 0s 290013630e-09 0s 0s 290017390e-09 1s 1s 290021830e-09 0s 0s 290023910e-09 0s 0s 290027630e-09 1s 1s 290032070e-09 0s 0s 290034190e-09 0s 0s 290037870e-09 1s 1s 290042310e-09 0s 0s 290044470e-09 0s 0s 290048110e-09 1s 1s 290052550e-09 0s 0s 290054750e-09 0s 0s 290058350e-09 1s 1s 290062790e-09 0s 0s 290065030e-09 0s 0s 290068590e-09 1s 1s 290073030e-09 0s 0s 290075310e-09 0s 0s 290078830e-09 1s 1s 290083270e-09 0s 0s 290085590e-09 0s 0s 290089070e-09 1s 1s 290093510e-09 0s 0s 290095870e-09 0s 0s 290099310e-09 1s 1s 290103750e-09 0s 0s 290106150e-09 0s 0s 290109550e-09 1s 1s 290113990e-09 0s 0s 290116430e-09 0s 0s 290119790e-09 1s 1s 290124230e-09 0s 0s 290126710e-09 0s 0s 290130030e-09 1s 1s 290134470e-09 0s 0s 290136990e-09 0s 0s 290140270e-09 1s 1s 290144710e-09 0s 0s 290147270e-09 0s 0s 290150510e-09 1s 1s 290154950e-09 0s 0s 290157550e-09 0s 0s 290160750e-09 1s 1s 290165190e-09 0s 0s 290167830e-09 0s 0s 290170990e-09 1s 1s 290175430e-09 0s 0s 290178110e-09 0s 0s 290181230e-09 1s 1s 290185670e-09 0s 0s 290188390e-09 0s 0s 290191470e-09 1s 1s 290195910e-09 0s 0s 290198670e-09 0s 0s 290201710e-09 1s 1s 290206150e-09 0s 0s 290208950e-09 0s 0s 290211950e-09 1s 1s 290216390e-09 0s 0s 290219230e-09 0s 0s 290222190e-09 1s 1s 290226630e-09 0s 0s 290229510e-09 0s 0s 290232430e-09 1s 1s 290236870e-09 0s 0s 290239790e-09 0s 0s 290242670e-09 1s 1s 290247110e-09 0s 0s 290250070e-09 0s 0s 290252910e-09 1s 1s 290257350e-09 0s 0s 290260350e-09 0s 0s 290263150e-09 1s 1s 290267590e-09 0s 0s 290270630e-09 0s 0s 290273390e-09 1s 1s 290277830e-09 0s 0s 290280910e-09 0s 0s 290283630e-09 1s 1s 290288070e-09 0s 0s 290291190e-09 0s 0s 290293870e-09 1s 1s 290298310e-09 0s 0s 290301470e-09 0s 0s 290304110e-09 1s 1s 290308550e-09 0s 0s 290311750e-09 0s 0s 290314350e-09 1s 1s 290318790e-09 0s 0s 290322030e-09 0s 0s 290324590e-09 1s 1s 290329030e-09 0s 0s 290332310e-09 0s 0s 290334830e-09 1s 1s 290339270e-09 0s 0s 290342590e-09 0s 0s 290345070e-09 1s 1s 290349510e-09 0s 0s 290352870e-09 0s 0s 290355310e-09 1s 1s 290359750e-09 0s 0s 290363150e-09 0s 0s 290365550e-09 1s 1s 290369990e-09 0s 0s 290373430e-09 0s 0s 290375790e-09 1s 1s 290380230e-09 0s 0s 290383710e-09 0s 0s 290386030e-09 1s 1s 290390470e-09 0s 0s 290393990e-09 0s 0s 290396270e-09 1s 1s 290400710e-09 0s 0s 290404270e-09 0s 0s 290406510e-09 1s 1s 290410950e-09 0s 0s 290414550e-09 0s 0s 290416750e-09 1s 1s 290421190e-09 0s 0s 290424830e-09 0s 0s 290426990e-09 1s 1s 290431430e-09 0s 0s 290435110e-09 0s 0s 290437230e-09 1s 1s 290441670e-09 0s 0s 290445390e-09 0s 0s 290447470e-09 1s 1s 290451910e-09 0s 0s 290455670e-09 0s 0s 290457710e-09 1s 1s 290462150e-09 0s 0s 290465950e-09 0s 0s 290467950e-09 1s 1s 290472390e-09 0s 0s 290476230e-09 0s 0s 290478190e-09 1s 1s 290482630e-09 0s 0s 290486510e-09 0s 0s 290488430e-09 1s 1s 290492870e-09 0s 0s 290496790e-09 0s 0s 290498670e-09 1s 1s 290503110e-09 0s 0s 290507070e-09 0s 0s 290508910e-09 1s 1s 290513350e-09 0s 0s 290517350e-09 0s 0s 290519150e-09 1s 1s 290523590e-09 0s 0s 290527630e-09 0s 0s 290529390e-09 1s 1s 290533830e-09 0s 0s 290537910e-09 0s 0s 290539630e-09 1s 1s 290544070e-09 0s 0s 290548190e-09 0s 0s 290549870e-09 1s 1s 290554310e-09 0s 0s 290558470e-09 0s 0s 290560110e-09 1s 1s 290564550e-09 0s 0s 290568750e-09 0s 0s 290570350e-09 1s 1s 290574790e-09 0s 0s 290579030e-09 0s 0s 290580590e-09 1s 1s 290585030e-09 0s 0s 290589310e-09 0s 0s 290590830e-09 1s 1s 290595270e-09 0s 0s 290599590e-09 0s 0s 290601070e-09 1s 1s 290605510e-09 0s 0s 290609870e-09 0s 0s 290611310e-09 1s 1s 290615750e-09 0s 0s 290620150e-09 0s 0s 290621550e-09 1s 1s 290625990e-09 0s 0s 290630430e-09 0s 0s 290631790e-09 1s 1s 290636230e-09 0s 0s 290640710e-09 0s 0s 290642030e-09 1s 1s 290646470e-09 0s 0s 290650990e-09 0s 0s 290652270e-09 1s 1s 290656710e-09 0s 0s 290661270e-09 0s 0s 290662510e-09 1s 1s 290666950e-09 0s 0s 290671550e-09 0s 0s 290672750e-09 1s 1s 290677190e-09 0s 0s 290681830e-09 0s 0s 290682990e-09 1s 1s 290687430e-09 0s 0s 290692110e-09 0s 0s 290693230e-09 1s 1s 290697670e-09 0s 0s 290702390e-09 0s 0s 290703470e-09 1s 1s 290707910e-09 0s 0s 290712670e-09 0s 0s 290713710e-09 1s 1s 290718150e-09 0s 0s 290722950e-09 0s 0s 290723950e-09 1s 1s 290728390e-09 0s 0s 290733230e-09 0s 0s 290734190e-09 1s 1s 290738630e-09 0s 0s 290743510e-09 0s 0s 290744430e-09 1s 1s 290748870e-09 0s 0s 290753790e-09 0s 0s 290754670e-09 1s 1s 290759110e-09 0s 0s 290764070e-09 0s 0s 290764910e-09 1s 1s 290769350e-09 0s 0s 290774350e-09 0s 0s 290775150e-09 1s 1s 290779590e-09 0s 0s 290784630e-09 0s 0s 290785390e-09 1s 1s 290789830e-09 0s 0s 290794910e-09 0s 0s 290795630e-09 1s 1s 290800070e-09 0s 0s 290805190e-09 0s 0s 290805870e-09 1s 1s 290810310e-09 0s 0s 290815470e-09 0s 0s 290816110e-09 1s 1s 290820550e-09 0s 0s 290825750e-09 0s 0s 290826350e-09 1s 1s 290830790e-09 0s 0s 290836030e-09 0s 0s 290836590e-09 1s 1s 290841030e-09 0s 0s 290846310e-09 0s 0s 290846830e-09 1s 1s 290851270e-09 0s 0s 290856590e-09 0s 0s 290857070e-09 1s 1s 290861510e-09 0s 0s 290866870e-09 0s 0s 290867310e-09 1s 1s 290871750e-09 0s 0s 290877150e-09 0s 0s 290877550e-09 1s 1s 290881990e-09 0s 0s 290887430e-09 0s 0s 290887790e-09 1s 1s 290892230e-09 0s 0s 290897710e-09 0s 0s 290898030e-09 1s 1s 290902470e-09 0s 0s 290907990e-09 0s 0s 290908270e-09 1s 1s 290912710e-09 0s 0s 290918270e-09 0s 0s 290918510e-09 1s 1s 290922950e-09 0s 0s 290928550e-09 0s 0s 290928750e-09 1s 1s 290933190e-09 0s 0s 290938830e-09 0s 0s 290938990e-09 1s 1s 290943430e-09 0s 0s 290949110e-09 0s 0s 290949230e-09 1s 1s 290953670e-09 0s 0s 290959390e-09 0s 0s 290959470e-09 1s 1s 290963910e-09 0s 0s 290969670e-09 0s 0s 290969710e-09 1s 1s 290974150e-09 0s 0s 290979950e-09 1s 1s 290979990e-09 1s 1s 290984430e-09 0s 0s 290990190e-09 1s 1s 290990270e-09 1s 1s 290994670e-09 0s 0s 291000430e-09 1s 1s 291000550e-09 1s 1s 291004910e-09 0s 0s 291010670e-09 1s 1s 291010830e-09 1s 1s 291015150e-09 0s 0s 291020910e-09 1s 1s 291021110e-09 1s 1s 291025390e-09 0s 0s 291031150e-09 1s 1s 291031390e-09 1s 1s 291035630e-09 0s 0s 291041390e-09 1s 1s 291041670e-09 1s 1s 291045870e-09 0s 0s 291051630e-09 1s 1s 291051950e-09 1s 1s 291056110e-09 0s 0s 291061870e-09 1s 1s 291062230e-09 1s 1s 291066350e-09 0s 0s 291072110e-09 1s 1s 291072510e-09 1s 1s 291076590e-09 0s 0s 291082350e-09 1s 1s 291082790e-09 1s 1s 291086830e-09 0s 0s 291092590e-09 1s 1s 291093070e-09 1s 1s 291097070e-09 0s 0s 291102830e-09 1s 1s 291103350e-09 1s 1s 291107310e-09 0s 0s 291113070e-09 1s 1s 291113630e-09 1s 1s 291117550e-09 0s 0s 291123310e-09 1s 1s 291123910e-09 1s 1s 291127790e-09 0s 0s 291133550e-09 1s 1s 291134190e-09 1s 1s 291138030e-09 0s 0s 291143790e-09 1s 1s 291144470e-09 1s 1s 291148270e-09 0s 0s 291154030e-09 1s 1s 291154750e-09 1s 1s 291158510e-09 0s 0s 291164270e-09 1s 1s 291165030e-09 1s 1s 291168750e-09 0s 0s 291174510e-09 1s 1s 291175310e-09 1s 1s 291178990e-09 0s 0s 291184750e-09 1s 1s 291185590e-09 1s 1s 291189230e-09 0s 0s 291194990e-09 1s 1s 291195870e-09 1s 1s 291199470e-09 0s 0s 291205230e-09 1s 1s 291206150e-09 1s 1s 291209710e-09 0s 0s 291215470e-09 1s 1s 291216430e-09 1s 1s 291219950e-09 0s 0s 291225710e-09 1s 1s 291226710e-09 1s 1s 291230190e-09 0s 0s 291235950e-09 1s 1s 291236990e-09 1s 1s 291240430e-09 0s 0s 291246190e-09 1s 1s 291247270e-09 1s 1s 291250670e-09 0s 0s 291256430e-09 1s 1s 291257550e-09 1s 1s 291260910e-09 0s 0s 291266670e-09 1s 1s 291267830e-09 1s 1s 291271150e-09 0s 0s 291276910e-09 1s 1s 291278110e-09 1s 1s 291281390e-09 0s 0s 291287150e-09 1s 1s 291288390e-09 1s 1s 291291630e-09 0s 0s 291297390e-09 1s 1s 291298670e-09 1s 1s 291301870e-09 0s 0s 291307630e-09 1s 1s 291308950e-09 1s 1s 291312110e-09 0s 0s 291317870e-09 1s 1s 291319230e-09 1s 1s 291322350e-09 0s 0s 291328110e-09 1s 1s 291329510e-09 1s 1s 291332590e-09 0s 0s 291338350e-09 1s 1s 291339790e-09 1s 1s 291342830e-09 0s 0s 291348590e-09 1s 1s 291350070e-09 1s 1s 291353070e-09 0s 0s 291358830e-09 1s 1s 291360350e-09 1s 1s 291363310e-09 0s 0s 291369070e-09 1s 1s 291370630e-09 1s 1s 291373550e-09 0s 0s 291379310e-09 1s 1s 291380910e-09 1s 1s 291383790e-09 0s 0s 291389550e-09 1s 1s 291391190e-09 1s 1s 291394030e-09 0s 0s 291399790e-09 1s 1s 291401470e-09 1s 1s 291404270e-09 0s 0s 291410030e-09 1s 1s 291411750e-09 1s 1s 291414510e-09 0s 0s 291420270e-09 1s 1s 291422030e-09 1s 1s 291424750e-09 0s 0s 291430510e-09 1s 1s 291432310e-09 1s 1s 291434990e-09 0s 0s 291440750e-09 1s 1s 291442590e-09 1s 1s 291445230e-09 0s 0s 291450990e-09 1s 1s 291452870e-09 1s 1s 291455470e-09 0s 0s 291461230e-09 1s 1s 291463150e-09 1s 1s 291465710e-09 0s 0s 291471470e-09 1s 1s 291473430e-09 1s 1s 291475950e-09 0s 0s 291481710e-09 1s 1s 291483710e-09 1s 1s 291486190e-09 0s 0s 291491950e-09 1s 1s 291493990e-09 1s 1s 291496430e-09 0s 0s 291502190e-09 1s 1s 291504270e-09 1s 1s 291506670e-09 0s 0s 291512430e-09 1s 1s 291514550e-09 1s 1s 291516910e-09 0s 0s 291522670e-09 1s 1s 291524830e-09 1s 1s 291527150e-09 0s 0s 291532910e-09 1s 1s 291535110e-09 1s 1s 291537390e-09 0s 0s 291543150e-09 1s 1s 291545390e-09 1s 1s 291547630e-09 0s 0s 291553390e-09 1s 1s 291555670e-09 1s 1s 291557870e-09 0s 0s 291563630e-09 1s 1s 291565950e-09 1s 1s 291568110e-09 0s 0s 291573870e-09 1s 1s 291576230e-09 1s 1s 291578350e-09 0s 0s 291584110e-09 1s 1s 291586510e-09 1s 1s 291588590e-09 0s 0s 291594350e-09 1s 1s 291596790e-09 1s 1s 291598830e-09 0s 0s 291604590e-09 1s 1s 291607070e-09 1s 1s 291609070e-09 0s 0s 291614830e-09 1s 1s 291617350e-09 1s 1s 291619310e-09 0s 0s 291625070e-09 1s 1s 291627630e-09 1s 1s 291629550e-09 0s 0s 291635310e-09 1s 1s 291637910e-09 1s 1s 291639790e-09 0s 0s 291645550e-09 1s 1s 291648190e-09 1s 1s 291650030e-09 0s 0s 291655790e-09 1s 1s 291658470e-09 1s 1s 291660270e-09 0s 0s 291666030e-09 1s 1s 291668750e-09 1s 1s 291670510e-09 0s 0s 291676270e-09 1s 1s 291679030e-09 1s 1s 291680750e-09 0s 0s 291686510e-09 1s 1s 291689310e-09 1s 1s 291690990e-09 0s 0s 291696750e-09 1s 1s 291699590e-09 1s 1s 291701230e-09 0s 0s 291706990e-09 1s 1s 291709870e-09 1s 1s 291711470e-09 0s 0s 291717230e-09 1s 1s 291720150e-09 1s 1s 291721710e-09 0s 0s 291727470e-09 1s 1s 291730430e-09 1s 1s 291731950e-09 0s 0s 291737710e-09 1s 1s 291740710e-09 1s 1s 291742190e-09 0s 0s 291747950e-09 1s 1s 291750990e-09 1s 1s 291752430e-09 0s 0s 291758190e-09 1s 1s 291761270e-09 1s 1s 291762670e-09 0s 0s 291768430e-09 1s 1s 291771550e-09 1s 1s 291772910e-09 0s 0s 291778670e-09 1s 1s 291781830e-09 1s 1s 291783150e-09 0s 0s 291788910e-09 1s 1s 291792110e-09 1s 1s 291793390e-09 0s 0s 291799150e-09 1s 1s 291802390e-09 1s 1s 291803630e-09 0s 0s 291809390e-09 1s 1s 291812670e-09 1s 1s 291813870e-09 0s 0s 291819630e-09 1s 1s 291822950e-09 1s 1s 291824110e-09 0s 0s 291829870e-09 1s 1s 291833230e-09 1s 1s 291834350e-09 0s 0s 291840110e-09 1s 1s 291843510e-09 1s 1s 291844590e-09 0s 0s 291850350e-09 1s 1s 291853790e-09 1s 1s 291854830e-09 0s 0s 291860590e-09 1s 1s 291864070e-09 1s 1s 291865070e-09 0s 0s 291870830e-09 1s 1s 291874350e-09 1s 1s 291875310e-09 0s 0s 291881070e-09 1s 1s 291884630e-09 1s 1s 291885550e-09 0s 0s 291891310e-09 1s 1s 291894910e-09 1s 1s 291895790e-09 0s 0s 291901550e-09 1s 1s 291905190e-09 1s 1s 291906030e-09 0s 0s 291911790e-09 1s 1s 291915470e-09 1s 1s 291916270e-09 0s 0s 291922030e-09 1s 1s 291925750e-09 1s 1s 291926510e-09 0s 0s 291932270e-09 1s 1s 291936030e-09 1s 1s 291936750e-09 0s 0s 291942510e-09 1s 1s 291946310e-09 1s 1s 291946990e-09 0s 0s 291952750e-09 1s 1s 291956590e-09 1s 1s 291957230e-09 0s 0s 291962990e-09 1s 1s 291966870e-09 1s 1s 291967470e-09 0s 0s 291973230e-09 1s 1s 291977150e-09 1s 1s 291977710e-09 0s 0s 291983470e-09 1s 1s 291987430e-09 1s 1s 291987950e-09 0s 0s 291993710e-09 1s 1s 291997710e-09 1s 1s 291998190e-09 0s 0s 292003950e-09 1s 1s 292007990e-09 1s 1s 292008430e-09 0s 0s 292014190e-09 1s 1s 292018270e-09 1s 1s 292018670e-09 0s 0s 292024430e-09 1s 1s 292028550e-09 1s 1s 292028910e-09 0s 0s 292034670e-09 1s 1s 292038830e-09 1s 1s 292039150e-09 0s 0s 292044910e-09 1s 1s 292049110e-09 1s 1s 292049390e-09 0s 0s 292055150e-09 1s 1s 292059390e-09 1s 1s 292059630e-09 0s 0s 292065390e-09 1s 1s 292069670e-09 1s 1s 292069870e-09 0s 0s 292075630e-09 1s 1s 292079950e-09 1s 1s 292080110e-09 0s 0s 292085870e-09 1s 1s 292090230e-09 1s 1s 292090350e-09 0s 0s 292096110e-09 1s 1s 292100510e-09 1s 1s 292100590e-09 0s 0s 292106350e-09 1s 1s 292110790e-09 1s 1s 292110830e-09 0s 0s 292116590e-09 1s 1s 292121070e-09 0s 0s 292126830e-09 1s 1s 292131310e-09 0s 0s 292131350e-09 0s 0s 292137070e-09 1s 1s 292141550e-09 0s 0s 292141630e-09 0s 0s 292147310e-09 1s 1s 292151790e-09 0s 0s 292151910e-09 0s 0s 292157550e-09 1s 1s 292162030e-09 0s 0s 292162190e-09 0s 0s 292167790e-09 1s 1s 292172270e-09 0s 0s 292172470e-09 0s 0s 292178030e-09 1s 1s 292182510e-09 0s 0s 292182750e-09 0s 0s 292188270e-09 1s 1s 292192750e-09 0s 0s 292193030e-09 0s 0s 292198510e-09 1s 1s 292202990e-09 0s 0s 292203310e-09 0s 0s 292208750e-09 1s 1s 292213230e-09 0s 0s 292213590e-09 0s 0s 292218990e-09 1s 1s 292223470e-09 0s 0s 292223870e-09 0s 0s 292229230e-09 1s 1s 292233710e-09 0s 0s 292234150e-09 0s 0s 292239470e-09 1s 1s 292243950e-09 0s 0s 292244430e-09 0s 0s 292249710e-09 1s 1s 292254190e-09 0s 0s 292254710e-09 0s 0s 292259950e-09 1s 1s 292264430e-09 0s 0s 292264990e-09 0s 0s 292270190e-09 1s 1s 292274670e-09 0s 0s 292275270e-09 0s 0s 292280430e-09 1s 1s 292284910e-09 0s 0s 292285550e-09 0s 0s 292290670e-09 1s 1s 292295150e-09 0s 0s 292295830e-09 0s 0s 292300910e-09 1s 1s 292305390e-09 0s 0s 292306110e-09 0s 0s 292311150e-09 1s 1s 292315630e-09 0s 0s 292316390e-09 0s 0s 292321390e-09 1s 1s 292325870e-09 0s 0s 292326670e-09 0s 0s 292331630e-09 1s 1s 292336110e-09 0s 0s 292336950e-09 0s 0s 292341870e-09 1s 1s 292346350e-09 0s 0s 292347230e-09 0s 0s 292352110e-09 1s 1s 292356590e-09 0s 0s 292357510e-09 0s 0s 292362350e-09 1s 1s 292366830e-09 0s 0s 292367790e-09 0s 0s 292372590e-09 1s 1s 292377070e-09 0s 0s 292378070e-09 0s 0s 292382830e-09 1s 1s 292387310e-09 0s 0s 292388350e-09 0s 0s 292393070e-09 1s 1s 292397550e-09 0s 0s 292398630e-09 0s 0s 292403310e-09 1s 1s 292407790e-09 0s 0s 292408910e-09 0s 0s 292413550e-09 1s 1s 292418030e-09 0s 0s 292419190e-09 0s 0s 292423790e-09 1s 1s 292428270e-09 0s 0s 292429470e-09 0s 0s 292434030e-09 1s 1s 292438510e-09 0s 0s 292439750e-09 0s 0s 292444270e-09 1s 1s 292448750e-09 0s 0s 292450030e-09 0s 0s 292454510e-09 1s 1s 292458990e-09 0s 0s 292460310e-09 0s 0s 292464750e-09 1s 1s 292469230e-09 0s 0s 292470590e-09 0s 0s 292474990e-09 1s 1s 292479470e-09 0s 0s 292480870e-09 0s 0s 292485230e-09 1s 1s 292489710e-09 0s 0s 292491150e-09 0s 0s 292495470e-09 1s 1s 292499950e-09 0s 0s 292501430e-09 0s 0s 292505710e-09 1s 1s 292510190e-09 0s 0s 292511710e-09 0s 0s 292515950e-09 1s 1s 292520430e-09 0s 0s 292521990e-09 0s 0s 292526190e-09 1s 1s 292530670e-09 0s 0s 292532270e-09 0s 0s 292536430e-09 1s 1s 292540910e-09 0s 0s 292542550e-09 0s 0s 292546670e-09 1s 1s 292551150e-09 0s 0s 292552830e-09 0s 0s 292556910e-09 1s 1s 292561390e-09 0s 0s 292563110e-09 0s 0s 292567150e-09 1s 1s 292571630e-09 0s 0s 292573390e-09 0s 0s 292577390e-09 1s 1s 292581870e-09 0s 0s 292583670e-09 0s 0s 292587630e-09 1s 1s 292592110e-09 0s 0s 292593950e-09 0s 0s 292597870e-09 1s 1s 292602350e-09 0s 0s 292604230e-09 0s 0s 292608110e-09 1s 1s 292612590e-09 0s 0s 292614510e-09 0s 0s 292618350e-09 1s 1s 292622830e-09 0s 0s 292624790e-09 0s 0s 292628590e-09 1s 1s 292633070e-09 0s 0s 292635070e-09 0s 0s 292638830e-09 1s 1s 292643310e-09 0s 0s 292645350e-09 0s 0s 292649070e-09 1s 1s 292653550e-09 0s 0s 292655630e-09 0s 0s 292659310e-09 1s 1s 292663790e-09 0s 0s 292665910e-09 0s 0s 292669550e-09 1s 1s 292674030e-09 0s 0s 292676190e-09 0s 0s 292679790e-09 1s 1s 292684270e-09 0s 0s 292686470e-09 0s 0s 292690030e-09 1s 1s 292694510e-09 0s 0s 292696750e-09 0s 0s 292700270e-09 1s 1s 292704750e-09 0s 0s 292707030e-09 0s 0s 292710510e-09 1s 1s 292714990e-09 0s 0s 292717310e-09 0s 0s 292720750e-09 1s 1s 292725230e-09 0s 0s 292727590e-09 0s 0s 292730990e-09 1s 1s 292735470e-09 0s 0s 292737870e-09 0s 0s 292741230e-09 1s 1s 292745710e-09 0s 0s 292748150e-09 0s 0s 292751470e-09 1s 1s 292755950e-09 0s 0s 292758430e-09 0s 0s 292761710e-09 1s 1s 292766190e-09 0s 0s 292768710e-09 0s 0s 292771950e-09 1s 1s 292776430e-09 0s 0s 292778990e-09 0s 0s 292782190e-09 1s 1s 292786670e-09 0s 0s 292789270e-09 0s 0s 292792430e-09 1s 1s 292796910e-09 0s 0s 292799550e-09 0s 0s 292802670e-09 1s 1s 292807150e-09 0s 0s 292809830e-09 0s 0s 292812910e-09 1s 1s 292817390e-09 0s 0s 292820110e-09 0s 0s 292823150e-09 1s 1s 292827630e-09 0s 0s 292830390e-09 0s 0s 292833390e-09 1s 1s 292837870e-09 0s 0s 292840670e-09 0s 0s 292843630e-09 1s 1s 292848110e-09 0s 0s 292850950e-09 0s 0s 292853870e-09 1s 1s 292858350e-09 0s 0s 292861230e-09 0s 0s 292864110e-09 1s 1s 292868590e-09 0s 0s 292871510e-09 0s 0s 292874350e-09 1s 1s 292878830e-09 0s 0s 292881790e-09 0s 0s 292884590e-09 1s 1s 292889070e-09 0s 0s 292892070e-09 0s 0s 292894830e-09 1s 1s 292899310e-09 0s 0s 292902350e-09 0s 0s 292905070e-09 1s 1s 292909550e-09 0s 0s 292912630e-09 0s 0s 292915310e-09 1s 1s 292919790e-09 0s 0s 292922910e-09 0s 0s 292925550e-09 1s 1s 292930030e-09 0s 0s 292933190e-09 0s 0s 292935790e-09 1s 1s 292940270e-09 0s 0s 292943470e-09 0s 0s 292946030e-09 1s 1s 292950510e-09 0s 0s 292953750e-09 0s 0s 292956270e-09 1s 1s 292960750e-09 0s 0s 292964030e-09 0s 0s 292966510e-09 1s 1s 292970990e-09 0s 0s 292974310e-09 0s 0s 292976750e-09 1s 1s 292981230e-09 0s 0s 292984590e-09 0s 0s 292986990e-09 1s 1s 292991470e-09 0s 0s 292994870e-09 0s 0s 292997230e-09 1s 1s 293001710e-09 0s 0s 293005150e-09 0s 0s 293007470e-09 1s 1s 293011950e-09 0s 0s 293015430e-09 0s 0s 293017710e-09 1s 1s 293022190e-09 0s 0s 293025710e-09 0s 0s 293027950e-09 1s 1s 293032430e-09 0s 0s 293035990e-09 0s 0s 293038190e-09 1s 1s 293042670e-09 0s 0s 293046270e-09 0s 0s 293048430e-09 1s 1s 293052910e-09 0s 0s 293056550e-09 0s 0s 293058670e-09 1s 1s 293063150e-09 0s 0s 293066830e-09 0s 0s 293068910e-09 1s 1s 293073390e-09 0s 0s 293077110e-09 0s 0s 293079150e-09 1s 1s 293083630e-09 0s 0s 293087390e-09 0s 0s 293089390e-09 1s 1s 293093870e-09 0s 0s 293097670e-09 0s 0s 293099630e-09 1s 1s 293104110e-09 0s 0s 293107950e-09 0s 0s 293109870e-09 1s 1s 293114350e-09 0s 0s 293118230e-09 0s 0s 293120110e-09 1s 1s 293124590e-09 0s 0s 293128510e-09 0s 0s 293130350e-09 1s 1s 293134830e-09 0s 0s 293138790e-09 0s 0s 293140590e-09 1s 1s 293145070e-09 0s 0s 293149070e-09 0s 0s 293150830e-09 1s 1s 293155310e-09 0s 0s 293159350e-09 0s 0s 293161070e-09 1s 1s 293165550e-09 0s 0s 293169630e-09 0s 0s 293171310e-09 1s 1s 293175790e-09 0s 0s 293179910e-09 0s 0s 293181550e-09 1s 1s 293186030e-09 0s 0s 293190190e-09 0s 0s 293191790e-09 1s 1s 293196270e-09 0s 0s 293200470e-09 0s 0s 293202030e-09 1s 1s 293206510e-09 0s 0s 293210750e-09 0s 0s 293212270e-09 1s 1s 293216750e-09 0s 0s 293221030e-09 0s 0s 293222510e-09 1s 1s 293226990e-09 0s 0s 293231310e-09 0s 0s 293232750e-09 1s 1s 293237230e-09 0s 0s 293241590e-09 0s 0s 293242990e-09 1s 1s 293247470e-09 0s 0s 293251870e-09 0s 0s 293253230e-09 1s 1s 293257710e-09 0s 0s 293262150e-09 0s 0s 293263470e-09 1s 1s 293267950e-09 0s 0s 293272430e-09 0s 0s 293273710e-09 1s 1s 293278190e-09 0s 0s 293282710e-09 0s 0s 293283950e-09 1s 1s 293288430e-09 0s 0s 293292990e-09 0s 0s 293294190e-09 1s 1s 293298670e-09 0s 0s 293303270e-09 0s 0s 293304430e-09 1s 1s 293308910e-09 0s 0s 293313550e-09 0s 0s 293314670e-09 1s 1s 293319150e-09 0s 0s 293323830e-09 0s 0s 293324910e-09 1s 1s 293329390e-09 0s 0s 293334110e-09 0s 0s 293335150e-09 1s 1s 293339630e-09 0s 0s 293344390e-09 0s 0s 293345390e-09 1s 1s 293349870e-09 0s 0s 293354670e-09 0s 0s 293355630e-09 1s 1s 293360110e-09 0s 0s 293364950e-09 0s 0s 293365870e-09 1s 1s 293370350e-09 0s 0s 293375230e-09 0s 0s 293376110e-09 1s 1s 293380590e-09 0s 0s 293385510e-09 0s 0s 293386350e-09 1s 1s 293390830e-09 0s 0s 293395790e-09 0s 0s 293396590e-09 1s 1s 293401070e-09 0s 0s 293406070e-09 0s 0s 293406830e-09 1s 1s 293411310e-09 0s 0s 293416350e-09 0s 0s 293417070e-09 1s 1s 293421550e-09 0s 0s 293426630e-09 0s 0s 293427310e-09 1s 1s 293431790e-09 0s 0s 293436910e-09 0s 0s 293437550e-09 1s 1s 293442030e-09 0s 0s 293447190e-09 0s 0s 293447790e-09 1s 1s 293452270e-09 0s 0s 293457470e-09 0s 0s 293458030e-09 1s 1s 293462510e-09 0s 0s 293467750e-09 0s 0s 293468270e-09 1s 1s 293472750e-09 0s 0s 293478030e-09 0s 0s 293478510e-09 1s 1s 293482990e-09 0s 0s 293488310e-09 0s 0s 293488750e-09 1s 1s 293493230e-09 0s 0s 293498590e-09 0s 0s 293498990e-09 1s 1s 293503470e-09 0s 0s 293508870e-09 0s 0s 293509230e-09 1s 1s 293513710e-09 0s 0s 293519150e-09 0s 0s 293519470e-09 1s 1s 293523950e-09 0s 0s 293529430e-09 0s 0s 293529710e-09 1s 1s 293534190e-09 0s 0s 293539710e-09 0s 0s 293539950e-09 1s 1s 293544430e-09 0s 0s 293549990e-09 0s 0s 293550190e-09 1s 1s 293554670e-09 0s 0s 293560270e-09 0s 0s 293560430e-09 1s 1s 293564910e-09 0s 0s 293570550e-09 0s 0s 293570670e-09 1s 1s 293575150e-09 0s 0s 293580830e-09 0s 0s 293580910e-09 1s 1s 293585390e-09 0s 0s 293591110e-09 0s 0s 293591150e-09 1s 1s 293595630e-09 0s 0s 293601390e-09 1s 1s 293601430e-09 1s 1s 293605910e-09 0s 0s 293611630e-09 1s 1s 293611710e-09 1s 1s 293616150e-09 0s 0s 293621870e-09 1s 1s 293621990e-09 1s 1s 293626390e-09 0s 0s 293632110e-09 1s 1s 293632270e-09 1s 1s 293636630e-09 0s 0s 293642350e-09 1s 1s 293642550e-09 1s 1s 293646870e-09 0s 0s 293652590e-09 1s 1s 293652830e-09 1s 1s 293657110e-09 0s 0s 293662830e-09 1s 1s 293663110e-09 1s 1s 293667350e-09 0s 0s 293673070e-09 1s 1s 293673390e-09 1s 1s 293677590e-09 0s 0s 293683310e-09 1s 1s 293683670e-09 1s 1s 293687830e-09 0s 0s 293693550e-09 1s 1s 293693950e-09 1s 1s 293698070e-09 0s 0s 293703790e-09 1s 1s 293704230e-09 1s 1s 293708310e-09 0s 0s 293714030e-09 1s 1s 293714510e-09 1s 1s 293718550e-09 0s 0s 293724270e-09 1s 1s 293724790e-09 1s 1s 293728790e-09 0s 0s 293734510e-09 1s 1s 293735070e-09 1s 1s 293739030e-09 0s 0s 293744750e-09 1s 1s 293745350e-09 1s 1s 293749270e-09 0s 0s 293754990e-09 1s 1s 293755630e-09 1s 1s 293759510e-09 0s 0s 293765230e-09 1s 1s 293765910e-09 1s 1s 293769750e-09 0s 0s 293775470e-09 1s 1s 293776190e-09 1s 1s 293779990e-09 0s 0s 293785710e-09 1s 1s 293786470e-09 1s 1s 293790230e-09 0s 0s 293795950e-09 1s 1s 293796750e-09 1s 1s 293800470e-09 0s 0s 293806190e-09 1s 1s 293807030e-09 1s 1s 293810710e-09 0s 0s 293816430e-09 1s 1s 293817310e-09 1s 1s 293820950e-09 0s 0s 293826670e-09 1s 1s 293827590e-09 1s 1s 293831190e-09 0s 0s 293836910e-09 1s 1s 293837870e-09 1s 1s 293841430e-09 0s 0s 293847150e-09 1s 1s 293848150e-09 1s 1s 293851670e-09 0s 0s 293857390e-09 1s 1s 293858430e-09 1s 1s 293861910e-09 0s 0s 293867630e-09 1s 1s 293868710e-09 1s 1s 293872150e-09 0s 0s 293877870e-09 1s 1s 293878990e-09 1s 1s 293882390e-09 0s 0s 293888110e-09 1s 1s 293889270e-09 1s 1s 293892630e-09 0s 0s 293898350e-09 1s 1s 293899550e-09 1s 1s 293902870e-09 0s 0s 293908590e-09 1s 1s 293909830e-09 1s 1s 293913110e-09 0s 0s 293918830e-09 1s 1s 293920110e-09 1s 1s 293923350e-09 0s 0s 293929070e-09 1s 1s 293930390e-09 1s 1s 293933590e-09 0s 0s 293939310e-09 1s 1s 293940670e-09 1s 1s 293943830e-09 0s 0s 293949550e-09 1s 1s 293950950e-09 1s 1s 293954070e-09 0s 0s 293959790e-09 1s 1s 293961230e-09 1s 1s 293964310e-09 0s 0s 293970030e-09 1s 1s 293971510e-09 1s 1s 293974550e-09 0s 0s 293980270e-09 1s 1s 293981790e-09 1s 1s 293984790e-09 0s 0s 293990510e-09 1s 1s 293992070e-09 1s 1s 293995030e-09 0s 0s 294000750e-09 1s 1s 294002350e-09 1s 1s 294005270e-09 0s 0s 294010990e-09 1s 1s 294012630e-09 1s 1s 294015510e-09 0s 0s 294021230e-09 1s 1s 294022910e-09 1s 1s 294025750e-09 0s 0s 294031470e-09 1s 1s 294033190e-09 1s 1s 294035990e-09 0s 0s 294041710e-09 1s 1s 294043470e-09 1s 1s 294046230e-09 0s 0s 294051950e-09 1s 1s 294053750e-09 1s 1s 294056470e-09 0s 0s 294062190e-09 1s 1s 294064030e-09 1s 1s 294066710e-09 0s 0s 294072430e-09 1s 1s 294074310e-09 1s 1s 294076950e-09 0s 0s 294082670e-09 1s 1s 294084590e-09 1s 1s 294087190e-09 0s 0s 294092910e-09 1s 1s 294094870e-09 1s 1s 294097430e-09 0s 0s 294103150e-09 1s 1s 294105150e-09 1s 1s 294107670e-09 0s 0s 294113390e-09 1s 1s 294115430e-09 1s 1s 294117910e-09 0s 0s 294123630e-09 1s 1s 294125710e-09 1s 1s 294128150e-09 0s 0s 294133870e-09 1s 1s 294135990e-09 1s 1s 294138390e-09 0s 0s 294144110e-09 1s 1s 294146270e-09 1s 1s 294148630e-09 0s 0s 294154350e-09 1s 1s 294156550e-09 1s 1s 294158870e-09 0s 0s 294164590e-09 1s 1s 294166830e-09 1s 1s 294169110e-09 0s 0s 294174830e-09 1s 1s 294177110e-09 1s 1s 294179350e-09 0s 0s 294185070e-09 1s 1s 294187390e-09 1s 1s 294189590e-09 0s 0s 294195310e-09 1s 1s 294197670e-09 1s 1s 294199830e-09 0s 0s 294205550e-09 1s 1s 294207950e-09 1s 1s 294210070e-09 0s 0s 294215790e-09 1s 1s 294218230e-09 1s 1s 294220310e-09 0s 0s 294226030e-09 1s 1s 294228510e-09 1s 1s 294230550e-09 0s 0s 294236270e-09 1s 1s 294238790e-09 1s 1s 294240790e-09 0s 0s 294246510e-09 1s 1s 294249070e-09 1s 1s 294251030e-09 0s 0s 294256750e-09 1s 1s 294259350e-09 1s 1s 294261270e-09 0s 0s 294266990e-09 1s 1s 294269630e-09 1s 1s 294271510e-09 0s 0s 294277230e-09 1s 1s 294279910e-09 1s 1s 294281750e-09 0s 0s 294287470e-09 1s 1s 294290190e-09 1s 1s 294291990e-09 0s 0s 294297710e-09 1s 1s 294300470e-09 1s 1s 294302230e-09 0s 0s 294307950e-09 1s 1s 294310750e-09 1s 1s 294312470e-09 0s 0s 294318190e-09 1s 1s 294321030e-09 1s 1s 294322710e-09 0s 0s 294328430e-09 1s 1s 294331310e-09 1s 1s 294332950e-09 0s 0s 294338670e-09 1s 1s 294341590e-09 1s 1s 294343190e-09 0s 0s 294348910e-09 1s 1s 294351870e-09 1s 1s 294353430e-09 0s 0s 294359150e-09 1s 1s 294362150e-09 1s 1s 294363670e-09 0s 0s 294369390e-09 1s 1s 294372430e-09 1s 1s 294373910e-09 0s 0s 294379630e-09 1s 1s 294382710e-09 1s 1s 294384150e-09 0s 0s 294389870e-09 1s 1s 294392990e-09 1s 1s 294394390e-09 0s 0s 294400110e-09 1s 1s 294403270e-09 1s 1s 294404630e-09 0s 0s 294410350e-09 1s 1s 294413550e-09 1s 1s 294414870e-09 0s 0s 294420590e-09 1s 1s 294423830e-09 1s 1s 294425110e-09 0s 0s 294430830e-09 1s 1s 294434110e-09 1s 1s 294435350e-09 0s 0s 294441070e-09 1s 1s 294444390e-09 1s 1s 294445590e-09 0s 0s 294451310e-09 1s 1s 294454670e-09 1s 1s 294455830e-09 0s 0s 294461550e-09 1s 1s 294464950e-09 1s 1s 294466070e-09 0s 0s 294471790e-09 1s 1s 294475230e-09 1s 1s 294476310e-09 0s 0s 294482030e-09 1s 1s 294485510e-09 1s 1s 294486550e-09 0s 0s 294492270e-09 1s 1s 294495790e-09 1s 1s 294496790e-09 0s 0s 294502510e-09 1s 1s 294506070e-09 1s 1s 294507030e-09 0s 0s 294512750e-09 1s 1s 294516350e-09 1s 1s 294517270e-09 0s 0s 294522990e-09 1s 1s 294526630e-09 1s 1s 294527510e-09 0s 0s 294533230e-09 1s 1s 294536910e-09 1s 1s 294537750e-09 0s 0s 294543470e-09 1s 1s 294547190e-09 1s 1s 294547990e-09 0s 0s 294553710e-09 1s 1s 294557470e-09 1s 1s 294558230e-09 0s 0s 294563950e-09 1s 1s 294567750e-09 1s 1s 294568470e-09 0s 0s 294574190e-09 1s 1s 294578030e-09 1s 1s 294578710e-09 0s 0s 294584430e-09 1s 1s 294588310e-09 1s 1s 294588950e-09 0s 0s 294594670e-09 1s 1s 294598590e-09 1s 1s 294599190e-09 0s 0s 294604910e-09 1s 1s 294608870e-09 1s 1s 294609430e-09 0s 0s 294615150e-09 1s 1s 294619150e-09 1s 1s 294619670e-09 0s 0s 294625390e-09 1s 1s 294629430e-09 1s 1s 294629910e-09 0s 0s 294635630e-09 1s 1s 294639710e-09 1s 1s 294640150e-09 0s 0s 294645870e-09 1s 1s 294649990e-09 1s 1s 294650390e-09 0s 0s 294656110e-09 1s 1s 294660270e-09 1s 1s 294660630e-09 0s 0s 294666350e-09 1s 1s 294670550e-09 1s 1s 294670870e-09 0s 0s 294676590e-09 1s 1s 294680830e-09 1s 1s 294681110e-09 0s 0s 294686830e-09 1s 1s 294691110e-09 1s 1s 294691350e-09 0s 0s 294697070e-09 1s 1s 294701390e-09 1s 1s 294701590e-09 0s 0s 294707310e-09 1s 1s 294711670e-09 1s 1s 294711830e-09 0s 0s 294717550e-09 1s 1s 294721950e-09 1s 1s 294722070e-09 0s 0s 294727790e-09 1s 1s 294732230e-09 1s 1s 294732310e-09 0s 0s 294738030e-09 1s 1s 294742510e-09 1s 1s 294742550e-09 0s 0s 294748270e-09 1s 1s 294752790e-09 0s 0s 294758510e-09 1s 1s 294763030e-09 0s 0s 294763070e-09 0s 0s 294768750e-09 1s 1s 294773270e-09 0s 0s 294773350e-09 0s 0s 294778990e-09 1s 1s 294783510e-09 0s 0s 294783630e-09 0s 0s 294789230e-09 1s 1s 294793750e-09 0s 0s 294793910e-09 0s 0s 294799470e-09 1s 1s 294803990e-09 0s 0s 294804190e-09 0s 0s 294809710e-09 1s 1s 294814230e-09 0s 0s 294814470e-09 0s 0s 294819950e-09 1s 1s 294824470e-09 0s 0s 294824750e-09 0s 0s 294830190e-09 1s 1s 294834710e-09 0s 0s 294835030e-09 0s 0s 294840430e-09 1s 1s 294844950e-09 0s 0s 294845310e-09 0s 0s 294850670e-09 1s 1s 294855190e-09 0s 0s 294855590e-09 0s 0s 294860910e-09 1s 1s 294865430e-09 0s 0s 294865870e-09 0s 0s 294871150e-09 1s 1s 294875670e-09 0s 0s 294876150e-09 0s 0s 294881390e-09 1s 1s 294885910e-09 0s 0s 294886430e-09 0s 0s 294891630e-09 1s 1s 294896150e-09 0s 0s 294896710e-09 0s 0s 294901870e-09 1s 1s 294906390e-09 0s 0s 294906990e-09 0s 0s 294912110e-09 1s 1s 294916630e-09 0s 0s 294917270e-09 0s 0s 294922350e-09 1s 1s 294926870e-09 0s 0s 294927550e-09 0s 0s 294932590e-09 1s 1s 294937110e-09 0s 0s 294937830e-09 0s 0s 294942830e-09 1s 1s 294947350e-09 0s 0s 294948110e-09 0s 0s 294953070e-09 1s 1s 294957590e-09 0s 0s 294958390e-09 0s 0s 294963310e-09 1s 1s 294967830e-09 0s 0s 294968670e-09 0s 0s 294973550e-09 1s 1s 294978070e-09 0s 0s 294978950e-09 0s 0s 294983790e-09 1s 1s 294988310e-09 0s 0s 294989230e-09 0s 0s 294994030e-09 1s 1s 294998550e-09 0s 0s 294999510e-09 0s 0s 295004270e-09 1s 1s 295008790e-09 0s 0s 295009790e-09 0s 0s 295014510e-09 1s 1s 295019030e-09 0s 0s 295020070e-09 0s 0s 295024750e-09 1s 1s 295029270e-09 0s 0s 295030350e-09 0s 0s 295034990e-09 1s 1s 295039510e-09 0s 0s 295040630e-09 0s 0s 295045230e-09 1s 1s 295049750e-09 0s 0s 295050910e-09 0s 0s 295055470e-09 1s 1s 295059990e-09 0s 0s 295061190e-09 0s 0s 295065710e-09 1s 1s 295070230e-09 0s 0s 295071470e-09 0s 0s 295075950e-09 1s 1s 295080470e-09 0s 0s 295081750e-09 0s 0s 295086190e-09 1s 1s 295090710e-09 0s 0s 295092030e-09 0s 0s 295096430e-09 1s 1s 295100950e-09 0s 0s 295102310e-09 0s 0s 295106670e-09 1s 1s 295111190e-09 0s 0s 295112590e-09 0s 0s 295116910e-09 1s 1s 295121430e-09 0s 0s 295122870e-09 0s 0s 295127150e-09 1s 1s 295131670e-09 0s 0s 295133150e-09 0s 0s 295137390e-09 1s 1s 295141910e-09 0s 0s 295143430e-09 0s 0s 295147630e-09 1s 1s 295152150e-09 0s 0s 295153710e-09 0s 0s 295157870e-09 1s 1s 295162390e-09 0s 0s 295163990e-09 0s 0s 295168110e-09 1s 1s 295172630e-09 0s 0s 295174270e-09 0s 0s 295178350e-09 1s 1s 295182870e-09 0s 0s 295184550e-09 0s 0s 295188590e-09 1s 1s 295193110e-09 0s 0s 295194830e-09 0s 0s 295198830e-09 1s 1s 295203350e-09 0s 0s 295205110e-09 0s 0s 295209070e-09 1s 1s 295213590e-09 0s 0s 295215390e-09 0s 0s 295219310e-09 1s 1s 295223830e-09 0s 0s 295225670e-09 0s 0s 295229550e-09 1s 1s 295234070e-09 0s 0s 295235950e-09 0s 0s 295239790e-09 1s 1s 295244310e-09 0s 0s 295246230e-09 0s 0s 295250030e-09 1s 1s 295254550e-09 0s 0s 295256510e-09 0s 0s 295260270e-09 1s 1s 295264790e-09 0s 0s 295266790e-09 0s 0s 295270510e-09 1s 1s 295275030e-09 0s 0s 295277070e-09 0s 0s 295280750e-09 1s 1s 295285270e-09 0s 0s 295287350e-09 0s 0s 295290990e-09 1s 1s 295295510e-09 0s 0s 295297630e-09 0s 0s 295301230e-09 1s 1s 295305750e-09 0s 0s 295307910e-09 0s 0s 295311470e-09 1s 1s 295315990e-09 0s 0s 295318190e-09 0s 0s 295321710e-09 1s 1s 295326230e-09 0s 0s 295328470e-09 0s 0s 295331950e-09 1s 1s 295336470e-09 0s 0s 295338750e-09 0s 0s 295342190e-09 1s 1s 295346710e-09 0s 0s 295349030e-09 0s 0s 295352430e-09 1s 1s 295356950e-09 0s 0s 295359310e-09 0s 0s 295362670e-09 1s 1s 295367190e-09 0s 0s 295369590e-09 0s 0s 295372910e-09 1s 1s 295377430e-09 0s 0s 295379870e-09 0s 0s 295383150e-09 1s 1s 295387670e-09 0s 0s 295390150e-09 0s 0s 295393390e-09 1s 1s 295397910e-09 0s 0s 295400430e-09 0s 0s 295403630e-09 1s 1s 295408150e-09 0s 0s 295410710e-09 0s 0s 295413870e-09 1s 1s 295418390e-09 0s 0s 295420990e-09 0s 0s 295424110e-09 1s 1s 295428630e-09 0s 0s 295431270e-09 0s 0s 295434350e-09 1s 1s 295438870e-09 0s 0s 295441550e-09 0s 0s 295444590e-09 1s 1s 295449110e-09 0s 0s 295451830e-09 0s 0s 295454830e-09 1s 1s 295459350e-09 0s 0s 295462110e-09 0s 0s 295465070e-09 1s 1s 295469590e-09 0s 0s 295472390e-09 0s 0s 295475310e-09 1s 1s 295479830e-09 0s 0s 295482670e-09 0s 0s 295485550e-09 1s 1s 295490070e-09 0s 0s 295492950e-09 0s 0s 295495790e-09 1s 1s 295500310e-09 0s 0s 295503230e-09 0s 0s 295506030e-09 1s 1s 295510550e-09 0s 0s 295513510e-09 0s 0s 295516270e-09 1s 1s 295520790e-09 0s 0s 295523790e-09 0s 0s 295526510e-09 1s 1s 295531030e-09 0s 0s 295534070e-09 0s 0s 295536750e-09 1s 1s 295541270e-09 0s 0s 295544350e-09 0s 0s 295546990e-09 1s 1s 295551510e-09 0s 0s 295554630e-09 0s 0s 295557230e-09 1s 1s 295561750e-09 0s 0s 295564910e-09 0s 0s 295567470e-09 1s 1s 295571990e-09 0s 0s 295575190e-09 0s 0s 295577710e-09 1s 1s 295582230e-09 0s 0s 295585470e-09 0s 0s 295587950e-09 1s 1s 295592470e-09 0s 0s 295595750e-09 0s 0s 295598190e-09 1s 1s 295602710e-09 0s 0s 295606030e-09 0s 0s 295608430e-09 1s 1s 295612950e-09 0s 0s 295616310e-09 0s 0s 295618670e-09 1s 1s 295623190e-09 0s 0s 295626590e-09 0s 0s 295628910e-09 1s 1s 295633430e-09 0s 0s 295636870e-09 0s 0s 295639150e-09 1s 1s 295643670e-09 0s 0s 295647150e-09 0s 0s 295649390e-09 1s 1s 295653910e-09 0s 0s 295657430e-09 0s 0s 295659630e-09 1s 1s 295664150e-09 0s 0s 295667710e-09 0s 0s 295669870e-09 1s 1s 295674390e-09 0s 0s 295677990e-09 0s 0s 295680110e-09 1s 1s 295684630e-09 0s 0s 295688270e-09 0s 0s 295690350e-09 1s 1s 295694870e-09 0s 0s 295698550e-09 0s 0s 295700590e-09 1s 1s 295705110e-09 0s 0s 295708830e-09 0s 0s 295710830e-09 1s 1s 295715350e-09 0s 0s 295719110e-09 0s 0s 295721070e-09 1s 1s 295725590e-09 0s 0s 295729390e-09 0s 0s 295731310e-09 1s 1s 295735830e-09 0s 0s 295739670e-09 0s 0s 295741550e-09 1s 1s 295746070e-09 0s 0s 295749950e-09 0s 0s 295751790e-09 1s 1s 295756310e-09 0s 0s 295760230e-09 0s 0s 295762030e-09 1s 1s 295766550e-09 0s 0s 295770510e-09 0s 0s 295772270e-09 1s 1s 295776790e-09 0s 0s 295780790e-09 0s 0s 295782510e-09 1s 1s 295787030e-09 0s 0s 295791070e-09 0s 0s 295792750e-09 1s 1s 295797270e-09 0s 0s 295801350e-09 0s 0s 295802990e-09 1s 1s 295807510e-09 0s 0s 295811630e-09 0s 0s 295813230e-09 1s 1s 295817750e-09 0s 0s 295821910e-09 0s 0s 295823470e-09 1s 1s 295827990e-09 0s 0s 295832190e-09 0s 0s 295833710e-09 1s 1s 295838230e-09 0s 0s 295842470e-09 0s 0s 295843950e-09 1s 1s 295848470e-09 0s 0s 295852750e-09 0s 0s 295854190e-09 1s 1s 295858710e-09 0s 0s 295863030e-09 0s 0s 295864430e-09 1s 1s 295868950e-09 0s 0s 295873310e-09 0s 0s 295874670e-09 1s 1s 295879190e-09 0s 0s 295883590e-09 0s 0s 295884910e-09 1s 1s 295889430e-09 0s 0s 295893870e-09 0s 0s 295895150e-09 1s 1s 295899670e-09 0s 0s 295904150e-09 0s 0s 295905390e-09 1s 1s 295909910e-09 0s 0s 295914430e-09 0s 0s 295915630e-09 1s 1s 295920150e-09 0s 0s 295924710e-09 0s 0s 295925870e-09 1s 1s 295930390e-09 0s 0s 295934990e-09 0s 0s 295936110e-09 1s 1s 295940630e-09 0s 0s 295945270e-09 0s 0s 295946350e-09 1s 1s 295950870e-09 0s 0s 295955550e-09 0s 0s 295956590e-09 1s 1s 295961110e-09 0s 0s 295965830e-09 0s 0s 295966830e-09 1s 1s 295971350e-09 0s 0s 295976110e-09 0s 0s 295977070e-09 1s 1s 295981590e-09 0s 0s 295986390e-09 0s 0s 295987310e-09 1s 1s 295991830e-09 0s 0s 295996670e-09 0s 0s 295997550e-09 1s 1s 296002070e-09 0s 0s 296006950e-09 0s 0s 296007790e-09 1s 1s 296012310e-09 0s 0s 296017230e-09 0s 0s 296018030e-09 1s 1s 296022550e-09 0s 0s 296027510e-09 0s 0s 296028270e-09 1s 1s 296032790e-09 0s 0s 296037790e-09 0s 0s 296038510e-09 1s 1s 296043030e-09 0s 0s 296048070e-09 0s 0s 296048750e-09 1s 1s 296053270e-09 0s 0s 296058350e-09 0s 0s 296058990e-09 1s 1s 296063510e-09 0s 0s 296068630e-09 0s 0s 296069230e-09 1s 1s 296073750e-09 0s 0s 296078910e-09 0s 0s 296079470e-09 1s 1s 296083990e-09 0s 0s 296089190e-09 0s 0s 296089710e-09 1s 1s 296094230e-09 0s 0s 296099470e-09 0s 0s 296099950e-09 1s 1s 296104470e-09 0s 0s 296109750e-09 0s 0s 296110190e-09 1s 1s 296114710e-09 0s 0s 296120030e-09 0s 0s 296120430e-09 1s 1s 296124950e-09 0s 0s 296130310e-09 0s 0s 296130670e-09 1s 1s 296135190e-09 0s 0s 296140590e-09 0s 0s 296140910e-09 1s 1s 296145430e-09 0s 0s 296150870e-09 0s 0s 296151150e-09 1s 1s 296155670e-09 0s 0s 296161150e-09 0s 0s 296161390e-09 1s 1s 296165910e-09 0s 0s 296171430e-09 0s 0s 296171630e-09 1s 1s 296176150e-09 0s 0s 296181710e-09 0s 0s 296181870e-09 1s 1s 296186390e-09 0s 0s 296191990e-09 0s 0s 296192110e-09 1s 1s 296196630e-09 0s 0s 296202270e-09 0s 0s 296202350e-09 1s 1s 296206870e-09 0s 0s 296212550e-09 0s 0s 296212590e-09 1s 1s 296217110e-09 0s 0s 296222830e-09 1s 1s 296222870e-09 1s 1s 296227390e-09 0s 0s 296233070e-09 1s 1s 296233150e-09 1s 1s 296237630e-09 0s 0s 296243310e-09 1s 1s 296243430e-09 1s 1s 296247870e-09 0s 0s 296253550e-09 1s 1s 296253710e-09 1s 1s 296258110e-09 0s 0s 296263790e-09 1s 1s 296263990e-09 1s 1s 296268350e-09 0s 0s 296274030e-09 1s 1s 296274270e-09 1s 1s 296278590e-09 0s 0s 296284270e-09 1s 1s 296284550e-09 1s 1s 296288830e-09 0s 0s 296294510e-09 1s 1s 296294830e-09 1s 1s 296299070e-09 0s 0s 296304750e-09 1s 1s 296305110e-09 1s 1s 296309310e-09 0s 0s 296314990e-09 1s 1s 296315390e-09 1s 1s 296319550e-09 0s 0s 296325230e-09 1s 1s 296325670e-09 1s 1s 296329790e-09 0s 0s 296335470e-09 1s 1s 296335950e-09 1s 1s 296340030e-09 0s 0s 296345710e-09 1s 1s 296346230e-09 1s 1s 296350270e-09 0s 0s 296355950e-09 1s 1s 296356510e-09 1s 1s 296360510e-09 0s 0s 296366190e-09 1s 1s 296366790e-09 1s 1s 296370750e-09 0s 0s 296376430e-09 1s 1s 296377070e-09 1s 1s 296380990e-09 0s 0s 296386670e-09 1s 1s 296387350e-09 1s 1s 296391230e-09 0s 0s 296396910e-09 1s 1s 296397630e-09 1s 1s 296401470e-09 0s 0s 296407150e-09 1s 1s 296407910e-09 1s 1s 296411710e-09 0s 0s 296417390e-09 1s 1s 296418190e-09 1s 1s 296421950e-09 0s 0s 296427630e-09 1s 1s 296428470e-09 1s 1s 296432190e-09 0s 0s 296437870e-09 1s 1s 296438750e-09 1s 1s 296442430e-09 0s 0s 296448110e-09 1s 1s 296449030e-09 1s 1s 296452670e-09 0s 0s 296458350e-09 1s 1s 296459310e-09 1s 1s 296462910e-09 0s 0s 296468590e-09 1s 1s 296469590e-09 1s 1s 296473150e-09 0s 0s 296478830e-09 1s 1s 296479870e-09 1s 1s 296483390e-09 0s 0s 296489070e-09 1s 1s 296490150e-09 1s 1s 296493630e-09 0s 0s 296499310e-09 1s 1s 296500430e-09 1s 1s 296503870e-09 0s 0s 296509550e-09 1s 1s 296510710e-09 1s 1s 296514110e-09 0s 0s 296519790e-09 1s 1s 296520990e-09 1s 1s 296524350e-09 0s 0s 296530030e-09 1s 1s 296531270e-09 1s 1s 296534590e-09 0s 0s 296540270e-09 1s 1s 296541550e-09 1s 1s 296544830e-09 0s 0s 296550510e-09 1s 1s 296551830e-09 1s 1s 296555070e-09 0s 0s 296560750e-09 1s 1s 296562110e-09 1s 1s 296565310e-09 0s 0s 296570990e-09 1s 1s 296572390e-09 1s 1s 296575550e-09 0s 0s 296581230e-09 1s 1s 296582670e-09 1s 1s 296585790e-09 0s 0s 296591470e-09 1s 1s 296592950e-09 1s 1s 296596030e-09 0s 0s 296601710e-09 1s 1s 296603230e-09 1s 1s 296606270e-09 0s 0s 296611950e-09 1s 1s 296613510e-09 1s 1s 296616510e-09 0s 0s 296622190e-09 1s 1s 296623790e-09 1s 1s 296626750e-09 0s 0s 296632430e-09 1s 1s 296634070e-09 1s 1s 296636990e-09 0s 0s 296642670e-09 1s 1s 296644350e-09 1s 1s 296647230e-09 0s 0s 296652910e-09 1s 1s 296654630e-09 1s 1s 296657470e-09 0s 0s 296663150e-09 1s 1s 296664910e-09 1s 1s 296667710e-09 0s 0s 296673390e-09 1s 1s 296675190e-09 1s 1s 296677950e-09 0s 0s 296683630e-09 1s 1s 296685470e-09 1s 1s 296688190e-09 0s 0s 296693870e-09 1s 1s 296695750e-09 1s 1s 296698430e-09 0s 0s 296704110e-09 1s 1s 296706030e-09 1s 1s 296708670e-09 0s 0s 296714350e-09 1s 1s 296716310e-09 1s 1s 296718910e-09 0s 0s 296724590e-09 1s 1s 296726590e-09 1s 1s 296729150e-09 0s 0s 296734830e-09 1s 1s 296736870e-09 1s 1s 296739390e-09 0s 0s 296745070e-09 1s 1s 296747150e-09 1s 1s 296749630e-09 0s 0s 296755310e-09 1s 1s 296757430e-09 1s 1s 296759870e-09 0s 0s 296765550e-09 1s 1s 296767710e-09 1s 1s 296770110e-09 0s 0s 296775790e-09 1s 1s 296777990e-09 1s 1s 296780350e-09 0s 0s 296786030e-09 1s 1s 296788270e-09 1s 1s 296790590e-09 0s 0s 296796270e-09 1s 1s 296798550e-09 1s 1s 296800830e-09 0s 0s 296806510e-09 1s 1s 296808830e-09 1s 1s 296811070e-09 0s 0s 296816750e-09 1s 1s 296819110e-09 1s 1s 296821310e-09 0s 0s 296826990e-09 1s 1s 296829390e-09 1s 1s 296831550e-09 0s 0s 296837230e-09 1s 1s 296839670e-09 1s 1s 296841790e-09 0s 0s 296847470e-09 1s 1s 296849950e-09 1s 1s 296852030e-09 0s 0s 296857710e-09 1s 1s 296860230e-09 1s 1s 296862270e-09 0s 0s 296867950e-09 1s 1s 296870510e-09 1s 1s 296872510e-09 0s 0s 296878190e-09 1s 1s 296880790e-09 1s 1s 296882750e-09 0s 0s 296888430e-09 1s 1s 296891070e-09 1s 1s 296892990e-09 0s 0s 296898670e-09 1s 1s 296901350e-09 1s 1s 296903230e-09 0s 0s 296908910e-09 1s 1s 296911630e-09 1s 1s 296913470e-09 0s 0s 296919150e-09 1s 1s 296921910e-09 1s 1s 296923710e-09 0s 0s 296929390e-09 1s 1s 296932190e-09 1s 1s 296933950e-09 0s 0s 296939630e-09 1s 1s 296942470e-09 1s 1s 296944190e-09 0s 0s 296949870e-09 1s 1s 296952750e-09 1s 1s 296954430e-09 0s 0s 296960110e-09 1s 1s 296963030e-09 1s 1s 296964670e-09 0s 0s 296970350e-09 1s 1s 296973310e-09 1s 1s 296974910e-09 0s 0s 296980590e-09 1s 1s 296983590e-09 1s 1s 296985150e-09 0s 0s 296990830e-09 1s 1s 296993870e-09 1s 1s 296995390e-09 0s 0s 297001070e-09 1s 1s 297004150e-09 1s 1s 297005630e-09 0s 0s 297011310e-09 1s 1s 297014430e-09 1s 1s 297015870e-09 0s 0s 297021550e-09 1s 1s 297024710e-09 1s 1s 297026110e-09 0s 0s 297031790e-09 1s 1s 297034990e-09 1s 1s 297036350e-09 0s 0s 297042030e-09 1s 1s 297045270e-09 1s 1s 297046590e-09 0s 0s 297052270e-09 1s 1s 297055550e-09 1s 1s 297056830e-09 0s 0s 297062510e-09 1s 1s 297065830e-09 1s 1s 297067070e-09 0s 0s 297072750e-09 1s 1s 297076110e-09 1s 1s 297077310e-09 0s 0s 297082990e-09 1s 1s 297086390e-09 1s 1s 297087550e-09 0s 0s 297093230e-09 1s 1s 297096670e-09 1s 1s 297097790e-09 0s 0s 297103470e-09 1s 1s 297106950e-09 1s 1s 297108030e-09 0s 0s 297113710e-09 1s 1s 297117230e-09 1s 1s 297118270e-09 0s 0s 297123950e-09 1s 1s 297127510e-09 1s 1s 297128510e-09 0s 0s 297134190e-09 1s 1s 297137790e-09 1s 1s 297138750e-09 0s 0s 297144430e-09 1s 1s 297148070e-09 1s 1s 297148990e-09 0s 0s 297154670e-09 1s 1s 297158350e-09 1s 1s 297159230e-09 0s 0s 297164910e-09 1s 1s 297168630e-09 1s 1s 297169470e-09 0s 0s 297175150e-09 1s 1s 297178910e-09 1s 1s 297179710e-09 0s 0s 297185390e-09 1s 1s 297189190e-09 1s 1s 297189950e-09 0s 0s 297195630e-09 1s 1s 297199470e-09 1s 1s 297200190e-09 0s 0s 297205870e-09 1s 1s 297209750e-09 1s 1s 297210430e-09 0s 0s 297216110e-09 1s 1s 297220030e-09 1s 1s 297220670e-09 0s 0s 297226350e-09 1s 1s 297230310e-09 1s 1s 297230910e-09 0s 0s 297236590e-09 1s 1s 297240590e-09 1s 1s 297241150e-09 0s 0s 297246830e-09 1s 1s 297250870e-09 1s 1s 297251390e-09 0s 0s 297257070e-09 1s 1s 297261150e-09 1s 1s 297261630e-09 0s 0s 297267310e-09 1s 1s 297271430e-09 1s 1s 297271870e-09 0s 0s 297277550e-09 1s 1s 297281710e-09 1s 1s 297282110e-09 0s 0s 297287790e-09 1s 1s 297291990e-09 1s 1s 297292350e-09 0s 0s 297298030e-09 1s 1s 297302270e-09 1s 1s 297302590e-09 0s 0s 297308270e-09 1s 1s 297312550e-09 1s 1s 297312830e-09 0s 0s 297318510e-09 1s 1s 297322830e-09 1s 1s 297323070e-09 0s 0s 297328750e-09 1s 1s 297333110e-09 1s 1s 297333310e-09 0s 0s 297338990e-09 1s 1s 297343390e-09 1s 1s 297343550e-09 0s 0s 297349230e-09 1s 1s 297353670e-09 1s 1s 297353790e-09 0s 0s 297359470e-09 1s 1s 297363950e-09 1s 1s 297364030e-09 0s 0s 297369710e-09 1s 1s 297374230e-09 1s 1s 297374270e-09 0s 0s 297379950e-09 1s 1s 297384510e-09 0s 0s 297390190e-09 1s 1s 297394750e-09 0s 0s 297394790e-09 0s 0s 297400430e-09 1s 1s 297404990e-09 0s 0s 297405070e-09 0s 0s 297410670e-09 1s 1s 297415230e-09 0s 0s 297415350e-09 0s 0s 297420910e-09 1s 1s 297425470e-09 0s 0s 297425630e-09 0s 0s 297431150e-09 1s 1s 297435710e-09 0s 0s 297435910e-09 0s 0s 297441390e-09 1s 1s 297445950e-09 0s 0s 297446190e-09 0s 0s 297451630e-09 1s 1s 297456190e-09 0s 0s 297456470e-09 0s 0s 297461870e-09 1s 1s 297466430e-09 0s 0s 297466750e-09 0s 0s 297472110e-09 1s 1s 297476670e-09 0s 0s 297477030e-09 0s 0s 297482350e-09 1s 1s 297486910e-09 0s 0s 297487310e-09 0s 0s 297492590e-09 1s 1s 297497150e-09 0s 0s 297497590e-09 0s 0s 297502830e-09 1s 1s 297507390e-09 0s 0s 297507870e-09 0s 0s 297513070e-09 1s 1s 297517630e-09 0s 0s 297518150e-09 0s 0s 297523310e-09 1s 1s 297527870e-09 0s 0s 297528430e-09 0s 0s 297533550e-09 1s 1s 297538110e-09 0s 0s 297538710e-09 0s 0s 297543790e-09 1s 1s 297548350e-09 0s 0s 297548990e-09 0s 0s 297554030e-09 1s 1s 297558590e-09 0s 0s 297559270e-09 0s 0s 297564270e-09 1s 1s 297568830e-09 0s 0s 297569550e-09 0s 0s 297574510e-09 1s 1s 297579070e-09 0s 0s 297579830e-09 0s 0s 297584750e-09 1s 1s 297589310e-09 0s 0s 297590110e-09 0s 0s 297594990e-09 1s 1s 297599550e-09 0s 0s 297600390e-09 0s 0s 297605230e-09 1s 1s 297609790e-09 0s 0s 297610670e-09 0s 0s 297615470e-09 1s 1s 297620030e-09 0s 0s 297620950e-09 0s 0s 297625710e-09 1s 1s 297630270e-09 0s 0s 297631230e-09 0s 0s 297635950e-09 1s 1s 297640510e-09 0s 0s 297641510e-09 0s 0s 297646190e-09 1s 1s 297650750e-09 0s 0s 297651790e-09 0s 0s 297656430e-09 1s 1s 297660990e-09 0s 0s 297662070e-09 0s 0s 297666670e-09 1s 1s 297671230e-09 0s 0s 297672350e-09 0s 0s 297676910e-09 1s 1s 297681470e-09 0s 0s 297682630e-09 0s 0s 297687150e-09 1s 1s 297691710e-09 0s 0s 297692910e-09 0s 0s 297697390e-09 1s 1s 297701950e-09 0s 0s 297703190e-09 0s 0s 297707630e-09 1s 1s 297712190e-09 0s 0s 297713470e-09 0s 0s 297717870e-09 1s 1s 297722430e-09 0s 0s 297723750e-09 0s 0s 297728110e-09 1s 1s 297732670e-09 0s 0s 297734030e-09 0s 0s 297738350e-09 1s 1s 297742910e-09 0s 0s 297744310e-09 0s 0s 297748590e-09 1s 1s 297753150e-09 0s 0s 297754590e-09 0s 0s 297758830e-09 1s 1s 297763390e-09 0s 0s 297764870e-09 0s 0s 297769070e-09 1s 1s 297773630e-09 0s 0s 297775150e-09 0s 0s 297779310e-09 1s 1s 297783870e-09 0s 0s 297785430e-09 0s 0s 297789550e-09 1s 1s 297794110e-09 0s 0s 297795710e-09 0s 0s 297799790e-09 1s 1s 297804350e-09 0s 0s 297805990e-09 0s 0s 297810030e-09 1s 1s 297814590e-09 0s 0s 297816270e-09 0s 0s 297820270e-09 1s 1s 297824830e-09 0s 0s 297826550e-09 0s 0s 297830510e-09 1s 1s 297835070e-09 0s 0s 297836830e-09 0s 0s 297840750e-09 1s 1s 297845310e-09 0s 0s 297847110e-09 0s 0s 297850990e-09 1s 1s 297855550e-09 0s 0s 297857390e-09 0s 0s 297861230e-09 1s 1s 297865790e-09 0s 0s 297867670e-09 0s 0s 297871470e-09 1s 1s 297876030e-09 0s 0s 297877950e-09 0s 0s 297881710e-09 1s 1s 297886270e-09 0s 0s 297888230e-09 0s 0s 297891950e-09 1s 1s 297896510e-09 0s 0s 297898510e-09 0s 0s 297902190e-09 1s 1s 297906750e-09 0s 0s 297908790e-09 0s 0s 297912430e-09 1s 1s 297916990e-09 0s 0s 297919070e-09 0s 0s 297922670e-09 1s 1s 297927230e-09 0s 0s 297929350e-09 0s 0s 297932910e-09 1s 1s 297937470e-09 0s 0s 297939630e-09 0s 0s 297943150e-09 1s 1s 297947710e-09 0s 0s 297949910e-09 0s 0s 297953390e-09 1s 1s 297957950e-09 0s 0s 297960190e-09 0s 0s 297963630e-09 1s 1s 297968190e-09 0s 0s 297970470e-09 0s 0s 297973870e-09 1s 1s 297978430e-09 0s 0s 297980750e-09 0s 0s 297984110e-09 1s 1s 297988670e-09 0s 0s 297991030e-09 0s 0s 297994350e-09 1s 1s 297998910e-09 0s 0s 298001310e-09 0s 0s 298004590e-09 1s 1s 298009150e-09 0s 0s 298011590e-09 0s 0s 298014830e-09 1s 1s 298019390e-09 0s 0s 298021870e-09 0s 0s 298025070e-09 1s 1s 298029630e-09 0s 0s 298032150e-09 0s 0s 298035310e-09 1s 1s 298039870e-09 0s 0s 298042430e-09 0s 0s 298045550e-09 1s 1s 298050110e-09 0s 0s 298052710e-09 0s 0s 298055790e-09 1s 1s 298060350e-09 0s 0s 298062990e-09 0s 0s 298066030e-09 1s 1s 298070590e-09 0s 0s 298073270e-09 0s 0s 298076270e-09 1s 1s 298080830e-09 0s 0s 298083550e-09 0s 0s 298086510e-09 1s 1s 298091070e-09 0s 0s 298093830e-09 0s 0s 298096750e-09 1s 1s 298101310e-09 0s 0s 298104110e-09 0s 0s 298106990e-09 1s 1s 298111550e-09 0s 0s 298114390e-09 0s 0s 298117230e-09 1s 1s 298121790e-09 0s 0s 298124670e-09 0s 0s 298127470e-09 1s 1s 298132030e-09 0s 0s 298134950e-09 0s 0s 298137710e-09 1s 1s 298142270e-09 0s 0s 298145230e-09 0s 0s 298147950e-09 1s 1s 298152510e-09 0s 0s 298155510e-09 0s 0s 298158190e-09 1s 1s 298162750e-09 0s 0s 298165790e-09 0s 0s 298168430e-09 1s 1s 298172990e-09 0s 0s 298176070e-09 0s 0s 298178670e-09 1s 1s 298183230e-09 0s 0s 298186350e-09 0s 0s 298188910e-09 1s 1s 298193470e-09 0s 0s 298196630e-09 0s 0s 298199150e-09 1s 1s 298203710e-09 0s 0s 298206910e-09 0s 0s 298209390e-09 1s 1s 298213950e-09 0s 0s 298217190e-09 0s 0s 298219630e-09 1s 1s 298224190e-09 0s 0s 298227470e-09 0s 0s 298229870e-09 1s 1s 298234430e-09 0s 0s 298237750e-09 0s 0s 298240110e-09 1s 1s 298244670e-09 0s 0s 298248030e-09 0s 0s 298250350e-09 1s 1s 298254910e-09 0s 0s 298258310e-09 0s 0s 298260590e-09 1s 1s 298265150e-09 0s 0s 298268590e-09 0s 0s 298270830e-09 1s 1s 298275390e-09 0s 0s 298278870e-09 0s 0s 298281070e-09 1s 1s 298285630e-09 0s 0s 298289150e-09 0s 0s 298291310e-09 1s 1s 298295870e-09 0s 0s 298299430e-09 0s 0s 298301550e-09 1s 1s 298306110e-09 0s 0s 298309710e-09 0s 0s 298311790e-09 1s 1s 298316350e-09 0s 0s 298319990e-09 0s 0s 298322030e-09 1s 1s 298326590e-09 0s 0s 298330270e-09 0s 0s 298332270e-09 1s 1s 298336830e-09 0s 0s 298340550e-09 0s 0s 298342510e-09 1s 1s 298347070e-09 0s 0s 298350830e-09 0s 0s 298352750e-09 1s 1s 298357310e-09 0s 0s 298361110e-09 0s 0s 298362990e-09 1s 1s 298367550e-09 0s 0s 298371390e-09 0s 0s 298373230e-09 1s 1s 298377790e-09 0s 0s 298381670e-09 0s 0s 298383470e-09 1s 1s 298388030e-09 0s 0s 298391950e-09 0s 0s 298393710e-09 1s 1s 298398270e-09 0s 0s 298402230e-09 0s 0s 298403950e-09 1s 1s 298408510e-09 0s 0s 298412510e-09 0s 0s 298414190e-09 1s 1s 298418750e-09 0s 0s 298422790e-09 0s 0s 298424430e-09 1s 1s 298428990e-09 0s 0s 298433070e-09 0s 0s 298434670e-09 1s 1s 298439230e-09 0s 0s 298443350e-09 0s 0s 298444910e-09 1s 1s 298449470e-09 0s 0s 298453630e-09 0s 0s 298455150e-09 1s 1s 298459710e-09 0s 0s 298463910e-09 0s 0s 298465390e-09 1s 1s 298469950e-09 0s 0s 298474190e-09 0s 0s 298475630e-09 1s 1s 298480190e-09 0s 0s 298484470e-09 0s 0s 298485870e-09 1s 1s 298490430e-09 0s 0s 298494750e-09 0s 0s 298496110e-09 1s 1s 298500670e-09 0s 0s 298505030e-09 0s 0s 298506350e-09 1s 1s 298510910e-09 0s 0s 298515310e-09 0s 0s 298516590e-09 1s 1s 298521150e-09 0s 0s 298525590e-09 0s 0s 298526830e-09 1s 1s 298531390e-09 0s 0s 298535870e-09 0s 0s 298537070e-09 1s 1s 298541630e-09 0s 0s 298546150e-09 0s 0s 298547310e-09 1s 1s 298551870e-09 0s 0s 298556430e-09 0s 0s 298557550e-09 1s 1s 298562110e-09 0s 0s 298566710e-09 0s 0s 298567790e-09 1s 1s 298572350e-09 0s 0s 298576990e-09 0s 0s 298578030e-09 1s 1s 298582590e-09 0s 0s 298587270e-09 0s 0s 298588270e-09 1s 1s 298592830e-09 0s 0s 298597550e-09 0s 0s 298598510e-09 1s 1s 298603070e-09 0s 0s 298607830e-09 0s 0s 298608750e-09 1s 1s 298613310e-09 0s 0s 298618110e-09 0s 0s 298618990e-09 1s 1s 298623550e-09 0s 0s 298628390e-09 0s 0s 298629230e-09 1s 1s 298633790e-09 0s 0s 298638670e-09 0s 0s 298639470e-09 1s 1s 298644030e-09 0s 0s 298648950e-09 0s 0s 298649710e-09 1s 1s 298654270e-09 0s 0s 298659230e-09 0s 0s 298659950e-09 1s 1s 298664510e-09 0s 0s 298669510e-09 0s 0s 298670190e-09 1s 1s 298674750e-09 0s 0s 298679790e-09 0s 0s 298680430e-09 1s 1s 298684990e-09 0s 0s 298690070e-09 0s 0s 298690670e-09 1s 1s 298695230e-09 0s 0s 298700350e-09 0s 0s 298700910e-09 1s 1s 298705470e-09 0s 0s 298710630e-09 0s 0s 298711150e-09 1s 1s 298715710e-09 0s 0s 298720910e-09 0s 0s 298721390e-09 1s 1s 298725950e-09 0s 0s 298731190e-09 0s 0s 298731630e-09 1s 1s 298736190e-09 0s 0s 298741470e-09 0s 0s 298741870e-09 1s 1s 298746430e-09 0s 0s 298751750e-09 0s 0s 298752110e-09 1s 1s 298756670e-09 0s 0s 298762030e-09 0s 0s 298762350e-09 1s 1s 298766910e-09 0s 0s 298772310e-09 0s 0s 298772590e-09 1s 1s 298777150e-09 0s 0s 298782590e-09 0s 0s 298782830e-09 1s 1s 298787390e-09 0s 0s 298792870e-09 0s 0s 298793070e-09 1s 1s 298797630e-09 0s 0s 298803150e-09 0s 0s 298803310e-09 1s 1s 298807870e-09 0s 0s 298813430e-09 0s 0s 298813550e-09 1s 1s 298818110e-09 0s 0s 298823710e-09 0s 0s 298823790e-09 1s 1s 298828350e-09 0s 0s 298833990e-09 0s 0s 298834030e-09 1s 1s 298838590e-09 0s 0s 298844270e-09 1s 1s 298844310e-09 1s 1s 298848870e-09 0s 0s 298854510e-09 1s 1s 298854590e-09 1s 1s 298859110e-09 0s 0s 298864750e-09 1s 1s 298864870e-09 1s 1s 298869350e-09 0s 0s 298874990e-09 1s 1s 298875150e-09 1s 1s 298879590e-09 0s 0s 298885230e-09 1s 1s 298885430e-09 1s 1s 298889830e-09 0s 0s 298895470e-09 1s 1s 298895710e-09 1s 1s 298900070e-09 0s 0s 298905710e-09 1s 1s 298905990e-09 1s 1s 298910310e-09 0s 0s 298915950e-09 1s 1s 298916270e-09 1s 1s 298920550e-09 0s 0s 298926190e-09 1s 1s 298926550e-09 1s 1s 298930790e-09 0s 0s 298936430e-09 1s 1s 298936830e-09 1s 1s 298941030e-09 0s 0s 298946670e-09 1s 1s 298947110e-09 1s 1s 298951270e-09 0s 0s 298956910e-09 1s 1s 298957390e-09 1s 1s 298961510e-09 0s 0s 298967150e-09 1s 1s 298967670e-09 1s 1s 298971750e-09 0s 0s 298977390e-09 1s 1s 298977950e-09 1s 1s 298981990e-09 0s 0s 298987630e-09 1s 1s 298988230e-09 1s 1s 298992230e-09 0s 0s 298997870e-09 1s 1s 298998510e-09 1s 1s 299002470e-09 0s 0s 299008110e-09 1s 1s 299008790e-09 1s 1s 299012710e-09 0s 0s 299018350e-09 1s 1s 299019070e-09 1s 1s 299022950e-09 0s 0s 299028590e-09 1s 1s 299029350e-09 1s 1s 299033190e-09 0s 0s 299038830e-09 1s 1s 299039630e-09 1s 1s 299043430e-09 0s 0s 299049070e-09 1s 1s 299049910e-09 1s 1s 299053670e-09 0s 0s 299059310e-09 1s 1s 299060190e-09 1s 1s 299063910e-09 0s 0s 299069550e-09 1s 1s 299070470e-09 1s 1s 299074150e-09 0s 0s 299079790e-09 1s 1s 299080750e-09 1s 1s 299084390e-09 0s 0s 299090030e-09 1s 1s 299091030e-09 1s 1s 299094630e-09 0s 0s 299100270e-09 1s 1s 299101310e-09 1s 1s 299104870e-09 0s 0s 299110510e-09 1s 1s 299111590e-09 1s 1s 299115110e-09 0s 0s 299120750e-09 1s 1s 299121870e-09 1s 1s 299125350e-09 0s 0s 299130990e-09 1s 1s 299132150e-09 1s 1s 299135590e-09 0s 0s 299141230e-09 1s 1s 299142430e-09 1s 1s 299145830e-09 0s 0s 299151470e-09 1s 1s 299152710e-09 1s 1s 299156070e-09 0s 0s 299161710e-09 1s 1s 299162990e-09 1s 1s 299166310e-09 0s 0s 299171950e-09 1s 1s 299173270e-09 1s 1s 299176550e-09 0s 0s 299182190e-09 1s 1s 299183550e-09 1s 1s 299186790e-09 0s 0s 299192430e-09 1s 1s 299193830e-09 1s 1s 299197030e-09 0s 0s 299202670e-09 1s 1s 299204110e-09 1s 1s 299207270e-09 0s 0s 299212910e-09 1s 1s 299214390e-09 1s 1s 299217510e-09 0s 0s 299223150e-09 1s 1s 299224670e-09 1s 1s 299227750e-09 0s 0s 299233390e-09 1s 1s 299234950e-09 1s 1s 299237990e-09 0s 0s 299243630e-09 1s 1s 299245230e-09 1s 1s 299248230e-09 0s 0s 299253870e-09 1s 1s 299255510e-09 1s 1s 299258470e-09 0s 0s 299264110e-09 1s 1s 299265790e-09 1s 1s 299268710e-09 0s 0s 299274350e-09 1s 1s 299276070e-09 1s 1s 299278950e-09 0s 0s 299284590e-09 1s 1s 299286350e-09 1s 1s 299289190e-09 0s 0s 299294830e-09 1s 1s 299296630e-09 1s 1s 299299430e-09 0s 0s 299305070e-09 1s 1s 299306910e-09 1s 1s 299309670e-09 0s 0s 299315310e-09 1s 1s 299317190e-09 1s 1s 299319910e-09 0s 0s 299325550e-09 1s 1s 299327470e-09 1s 1s 299330150e-09 0s 0s 299335790e-09 1s 1s 299337750e-09 1s 1s 299340390e-09 0s 0s 299346030e-09 1s 1s 299348030e-09 1s 1s 299350630e-09 0s 0s 299356270e-09 1s 1s 299358310e-09 1s 1s 299360870e-09 0s 0s 299366510e-09 1s 1s 299368590e-09 1s 1s 299371110e-09 0s 0s 299376750e-09 1s 1s 299378870e-09 1s 1s 299381350e-09 0s 0s 299386990e-09 1s 1s 299389150e-09 1s 1s 299391590e-09 0s 0s 299397230e-09 1s 1s 299399430e-09 1s 1s 299401830e-09 0s 0s 299407470e-09 1s 1s 299409710e-09 1s 1s 299412070e-09 0s 0s 299417710e-09 1s 1s 299419990e-09 1s 1s 299422310e-09 0s 0s 299427950e-09 1s 1s 299430270e-09 1s 1s 299432550e-09 0s 0s 299438190e-09 1s 1s 299440550e-09 1s 1s 299442790e-09 0s 0s 299448430e-09 1s 1s 299450830e-09 1s 1s 299453030e-09 0s 0s 299458670e-09 1s 1s 299461110e-09 1s 1s 299463270e-09 0s 0s 299468910e-09 1s 1s 299471390e-09 1s 1s 299473510e-09 0s 0s 299479150e-09 1s 1s 299481670e-09 1s 1s 299483750e-09 0s 0s 299489390e-09 1s 1s 299491950e-09 1s 1s 299493990e-09 0s 0s 299499630e-09 1s 1s 299502230e-09 1s 1s 299504230e-09 0s 0s 299509870e-09 1s 1s 299512510e-09 1s 1s 299514470e-09 0s 0s 299520110e-09 1s 1s 299522790e-09 1s 1s 299524710e-09 0s 0s 299530350e-09 1s 1s 299533070e-09 1s 1s 299534950e-09 0s 0s 299540590e-09 1s 1s 299543350e-09 1s 1s 299545190e-09 0s 0s 299550830e-09 1s 1s 299553630e-09 1s 1s 299555430e-09 0s 0s 299561070e-09 1s 1s 299563910e-09 1s 1s 299565670e-09 0s 0s 299571310e-09 1s 1s 299574190e-09 1s 1s 299575910e-09 0s 0s 299581550e-09 1s 1s 299584470e-09 1s 1s 299586150e-09 0s 0s 299591790e-09 1s 1s 299594750e-09 1s 1s 299596390e-09 0s 0s 299602030e-09 1s 1s 299605030e-09 1s 1s 299606630e-09 0s 0s 299612270e-09 1s 1s 299615310e-09 1s 1s 299616870e-09 0s 0s 299622510e-09 1s 1s 299625590e-09 1s 1s 299627110e-09 0s 0s 299632750e-09 1s 1s 299635870e-09 1s 1s 299637350e-09 0s 0s 299642990e-09 1s 1s 299646150e-09 1s 1s 299647590e-09 0s 0s 299653230e-09 1s 1s 299656430e-09 1s 1s 299657830e-09 0s 0s 299663470e-09 1s 1s 299666710e-09 1s 1s 299668070e-09 0s 0s 299673710e-09 1s 1s 299676990e-09 1s 1s 299678310e-09 0s 0s 299683950e-09 1s 1s 299687270e-09 1s 1s 299688550e-09 0s 0s 299694190e-09 1s 1s 299697550e-09 1s 1s 299698790e-09 0s 0s 299704430e-09 1s 1s 299707830e-09 1s 1s 299709030e-09 0s 0s 299714670e-09 1s 1s 299718110e-09 1s 1s 299719270e-09 0s 0s 299724910e-09 1s 1s 299728390e-09 1s 1s 299729510e-09 0s 0s 299735150e-09 1s 1s 299738670e-09 1s 1s 299739750e-09 0s 0s 299745390e-09 1s 1s 299748950e-09 1s 1s 299749990e-09 0s 0s 299755630e-09 1s 1s 299759230e-09 1s 1s 299760230e-09 0s 0s 299765870e-09 1s 1s 299769510e-09 1s 1s 299770470e-09 0s 0s 299776110e-09 1s 1s 299779790e-09 1s 1s 299780710e-09 0s 0s 299786350e-09 1s 1s 299790070e-09 1s 1s 299790950e-09 0s 0s 299796590e-09 1s 1s 299800350e-09 1s 1s 299801190e-09 0s 0s 299806830e-09 1s 1s 299810630e-09 1s 1s 299811430e-09 0s 0s 299817070e-09 1s 1s 299820910e-09 1s 1s 299821670e-09 0s 0s 299827310e-09 1s 1s 299831190e-09 1s 1s 299831910e-09 0s 0s 299837550e-09 1s 1s 299841470e-09 1s 1s 299842150e-09 0s 0s 299847790e-09 1s 1s 299851750e-09 1s 1s 299852390e-09 0s 0s 299858030e-09 1s 1s 299862030e-09 1s 1s 299862630e-09 0s 0s 299868270e-09 1s 1s 299872310e-09 1s 1s 299872870e-09 0s 0s 299878510e-09 1s 1s 299882590e-09 1s 1s 299883110e-09 0s 0s 299888750e-09 1s 1s 299892870e-09 1s 1s 299893350e-09 0s 0s 299898990e-09 1s 1s 299903150e-09 1s 1s 299903590e-09 0s 0s 299909230e-09 1s 1s 299913430e-09 1s 1s 299913830e-09 0s 0s 299919470e-09 1s 1s 299923710e-09 1s 1s 299924070e-09 0s 0s 299929710e-09 1s 1s 299933990e-09 1s 1s 299934310e-09 0s 0s 299939950e-09 1s 1s 299944270e-09 1s 1s 299944550e-09 0s 0s 299950190e-09 1s 1s 299954550e-09 1s 1s 299954790e-09 0s 0s 299960430e-09 1s 1s 299964830e-09 1s 1s 299965030e-09 0s 0s 299970670e-09 1s 1s 299975110e-09 1s 1s 299975270e-09 0s 0s 299980910e-09 1s 1s 299985390e-09 1s 1s 299985510e-09 0s 0s 299991150e-09 1s 1s 299995670e-09 1s 1s 299995750e-09 0s 0s 300001390e-09 1s 1s 300005950e-09 1s 1s 300005990e-09 0s 0s 300011630e-09 1s 1s 300016230e-09 0s 0s 300021870e-09 1s 1s 300026470e-09 0s 0s 300026510e-09 0s 0s 300032110e-09 1s 1s 300036710e-09 0s 0s 300036790e-09 0s 0s 300042350e-09 1s 1s 300046950e-09 0s 0s 300047070e-09 0s 0s 300052590e-09 1s 1s 300057190e-09 0s 0s 300057350e-09 0s 0s 300062830e-09 1s 1s 300067430e-09 0s 0s 300067630e-09 0s 0s 300073070e-09 1s 1s 300077670e-09 0s 0s 300077910e-09 0s 0s 300083310e-09 1s 1s 300087910e-09 0s 0s 300088190e-09 0s 0s 300093550e-09 1s 1s 300098150e-09 0s 0s 300098470e-09 0s 0s 300103790e-09 1s 1s 300108390e-09 0s 0s 300108750e-09 0s 0s 300114030e-09 1s 1s 300118630e-09 0s 0s 300119030e-09 0s 0s 300124270e-09 1s 1s 300128870e-09 0s 0s 300129310e-09 0s 0s 300134510e-09 1s 1s 300139110e-09 0s 0s 300139590e-09 0s 0s 300144750e-09 1s 1s 300149350e-09 0s 0s 300149870e-09 0s 0s 300154990e-09 1s 1s 300159590e-09 0s 0s 300160150e-09 0s 0s 300165230e-09 1s 1s 300169830e-09 0s 0s 300170430e-09 0s 0s 300175470e-09 1s 1s 300180070e-09 0s 0s 300180710e-09 0s 0s 300185710e-09 1s 1s 300190310e-09 0s 0s 300190990e-09 0s 0s 300195950e-09 1s 1s 300200550e-09 0s 0s 300201270e-09 0s 0s 300206190e-09 1s 1s 300210790e-09 0s 0s 300211550e-09 0s 0s 300216430e-09 1s 1s 300221030e-09 0s 0s 300221830e-09 0s 0s 300226670e-09 1s 1s 300231270e-09 0s 0s 300232110e-09 0s 0s 300236910e-09 1s 1s 300241510e-09 0s 0s 300242390e-09 0s 0s 300247150e-09 1s 1s 300251750e-09 0s 0s 300252670e-09 0s 0s 300257390e-09 1s 1s 300261990e-09 0s 0s 300262950e-09 0s 0s 300267630e-09 1s 1s 300272230e-09 0s 0s 300273230e-09 0s 0s 300277870e-09 1s 1s 300282470e-09 0s 0s 300283510e-09 0s 0s 300288110e-09 1s 1s 300292710e-09 0s 0s 300293790e-09 0s 0s 300298350e-09 1s 1s 300302950e-09 0s 0s 300304070e-09 0s 0s 300308590e-09 1s 1s 300313190e-09 0s 0s 300314350e-09 0s 0s 300318830e-09 1s 1s 300323430e-09 0s 0s 300324630e-09 0s 0s 300329070e-09 1s 1s 300333670e-09 0s 0s 300334910e-09 0s 0s 300339310e-09 1s 1s 300343910e-09 0s 0s 300345190e-09 0s 0s 300349550e-09 1s 1s 300354150e-09 0s 0s 300355470e-09 0s 0s 300359790e-09 1s 1s 300364390e-09 0s 0s 300365750e-09 0s 0s 300370030e-09 1s 1s 300374630e-09 0s 0s 300376030e-09 0s 0s 300380270e-09 1s 1s 300384870e-09 0s 0s 300386310e-09 0s 0s 300390510e-09 1s 1s 300395110e-09 0s 0s 300396590e-09 0s 0s 300400750e-09 1s 1s 300405350e-09 0s 0s 300406870e-09 0s 0s 300410990e-09 1s 1s 300415590e-09 0s 0s 300417150e-09 0s 0s 300421230e-09 1s 1s 300425830e-09 0s 0s 300427430e-09 0s 0s 300431470e-09 1s 1s 300436070e-09 0s 0s 300437710e-09 0s 0s 300441710e-09 1s 1s 300446310e-09 0s 0s 300447990e-09 0s 0s 300451950e-09 1s 1s 300456550e-09 0s 0s 300458270e-09 0s 0s 300462190e-09 1s 1s 300466790e-09 0s 0s 300468550e-09 0s 0s 300472430e-09 1s 1s 300477030e-09 0s 0s 300478830e-09 0s 0s 300482670e-09 1s 1s 300487270e-09 0s 0s 300489110e-09 0s 0s 300492910e-09 1s 1s 300497510e-09 0s 0s 300499390e-09 0s 0s 300503150e-09 1s 1s 300507750e-09 0s 0s 300509670e-09 0s 0s 300513390e-09 1s 1s 300517990e-09 0s 0s 300519950e-09 0s 0s 300523630e-09 1s 1s 300528230e-09 0s 0s 300530230e-09 0s 0s 300533870e-09 1s 1s 300538470e-09 0s 0s 300540510e-09 0s 0s 300544110e-09 1s 1s 300548710e-09 0s 0s 300550790e-09 0s 0s 300554350e-09 1s 1s 300558950e-09 0s 0s 300561070e-09 0s 0s 300564590e-09 1s 1s 300569190e-09 0s 0s 300571350e-09 0s 0s 300574830e-09 1s 1s 300579430e-09 0s 0s 300581630e-09 0s 0s 300585070e-09 1s 1s 300589670e-09 0s 0s 300591910e-09 0s 0s 300595310e-09 1s 1s 300599910e-09 0s 0s 300602190e-09 0s 0s 300605550e-09 1s 1s 300610150e-09 0s 0s 300612470e-09 0s 0s 300615790e-09 1s 1s 300620390e-09 0s 0s 300622750e-09 0s 0s 300626030e-09 1s 1s 300630630e-09 0s 0s 300633030e-09 0s 0s 300636270e-09 1s 1s 300640870e-09 0s 0s 300643310e-09 0s 0s 300646510e-09 1s 1s 300651110e-09 0s 0s 300653590e-09 0s 0s 300656750e-09 1s 1s 300661350e-09 0s 0s 300663870e-09 0s 0s 300666990e-09 1s 1s 300671590e-09 0s 0s 300674150e-09 0s 0s 300677230e-09 1s 1s 300681830e-09 0s 0s 300684430e-09 0s 0s 300687470e-09 1s 1s 300692070e-09 0s 0s 300694710e-09 0s 0s 300697710e-09 1s 1s 300702310e-09 0s 0s 300704990e-09 0s 0s 300707950e-09 1s 1s 300712550e-09 0s 0s 300715270e-09 0s 0s 300718190e-09 1s 1s 300722790e-09 0s 0s 300725550e-09 0s 0s 300728430e-09 1s 1s 300733030e-09 0s 0s 300735830e-09 0s 0s 300738670e-09 1s 1s 300743270e-09 0s 0s 300746110e-09 0s 0s 300748910e-09 1s 1s 300753510e-09 0s 0s 300756390e-09 0s 0s 300759150e-09 1s 1s 300763750e-09 0s 0s 300766670e-09 0s 0s 300769390e-09 1s 1s 300773990e-09 0s 0s 300776950e-09 0s 0s 300779630e-09 1s 1s 300784230e-09 0s 0s 300787230e-09 0s 0s 300789870e-09 1s 1s 300794470e-09 0s 0s 300797510e-09 0s 0s 300800110e-09 1s 1s 300804710e-09 0s 0s 300807790e-09 0s 0s 300810350e-09 1s 1s 300814950e-09 0s 0s 300818070e-09 0s 0s 300820590e-09 1s 1s 300825190e-09 0s 0s 300828350e-09 0s 0s 300830830e-09 1s 1s 300835430e-09 0s 0s 300838630e-09 0s 0s 300841070e-09 1s 1s 300845670e-09 0s 0s 300848910e-09 0s 0s 300851310e-09 1s 1s 300855910e-09 0s 0s 300859190e-09 0s 0s 300861550e-09 1s 1s 300866150e-09 0s 0s 300869470e-09 0s 0s 300871790e-09 1s 1s 300876390e-09 0s 0s 300879750e-09 0s 0s 300882030e-09 1s 1s 300886630e-09 0s 0s 300890030e-09 0s 0s 300892270e-09 1s 1s 300896870e-09 0s 0s 300900310e-09 0s 0s 300902510e-09 1s 1s 300907110e-09 0s 0s 300910590e-09 0s 0s 300912750e-09 1s 1s 300917350e-09 0s 0s 300920870e-09 0s 0s 300922990e-09 1s 1s 300927590e-09 0s 0s 300931150e-09 0s 0s 300933230e-09 1s 1s 300937830e-09 0s 0s 300941430e-09 0s 0s 300943470e-09 1s 1s 300948070e-09 0s 0s 300951710e-09 0s 0s 300953710e-09 1s 1s 300958310e-09 0s 0s 300961990e-09 0s 0s 300963950e-09 1s 1s 300968550e-09 0s 0s 300972270e-09 0s 0s 300974190e-09 1s 1s 300978790e-09 0s 0s 300982550e-09 0s 0s 300984430e-09 1s 1s 300989030e-09 0s 0s 300992830e-09 0s 0s 300994670e-09 1s 1s 300999270e-09 0s 0s 301003110e-09 0s 0s 301004910e-09 1s 1s 301009510e-09 0s 0s 301013390e-09 0s 0s 301015150e-09 1s 1s 301019750e-09 0s 0s 301023670e-09 0s 0s 301025390e-09 1s 1s 301029990e-09 0s 0s 301033950e-09 0s 0s 301035630e-09 1s 1s 301040230e-09 0s 0s 301044230e-09 0s 0s 301045870e-09 1s 1s 301050470e-09 0s 0s 301054510e-09 0s 0s 301056110e-09 1s 1s 301060710e-09 0s 0s 301064790e-09 0s 0s 301066350e-09 1s 1s 301070950e-09 0s 0s 301075070e-09 0s 0s 301076590e-09 1s 1s 301081190e-09 0s 0s 301085350e-09 0s 0s 301086830e-09 1s 1s 301091430e-09 0s 0s 301095630e-09 0s 0s 301097070e-09 1s 1s 301101670e-09 0s 0s 301105910e-09 0s 0s 301107310e-09 1s 1s 301111910e-09 0s 0s 301116190e-09 0s 0s 301117550e-09 1s 1s 301122150e-09 0s 0s 301126470e-09 0s 0s 301127790e-09 1s 1s 301132390e-09 0s 0s 301136750e-09 0s 0s 301138030e-09 1s 1s 301142630e-09 0s 0s 301147030e-09 0s 0s 301148270e-09 1s 1s 301152870e-09 0s 0s 301157310e-09 0s 0s 301158510e-09 1s 1s 301163110e-09 0s 0s 301167590e-09 0s 0s 301168750e-09 1s 1s 301173350e-09 0s 0s 301177870e-09 0s 0s 301178990e-09 1s 1s 301183590e-09 0s 0s 301188150e-09 0s 0s 301189230e-09 1s 1s 301193830e-09 0s 0s 301198430e-09 0s 0s 301199470e-09 1s 1s 301204070e-09 0s 0s 301208710e-09 0s 0s 301209710e-09 1s 1s 301214310e-09 0s 0s 301218990e-09 0s 0s 301219950e-09 1s 1s 301224550e-09 0s 0s 301229270e-09 0s 0s 301230190e-09 1s 1s 301234790e-09 0s 0s 301239550e-09 0s 0s 301240430e-09 1s 1s 301245030e-09 0s 0s 301249830e-09 0s 0s 301250670e-09 1s 1s 301255270e-09 0s 0s 301260110e-09 0s 0s 301260910e-09 1s 1s 301265510e-09 0s 0s 301270390e-09 0s 0s 301271150e-09 1s 1s 301275750e-09 0s 0s 301280670e-09 0s 0s 301281390e-09 1s 1s 301285990e-09 0s 0s 301290950e-09 0s 0s 301291630e-09 1s 1s 301296230e-09 0s 0s 301301230e-09 0s 0s 301301870e-09 1s 1s 301306470e-09 0s 0s 301311510e-09 0s 0s 301312110e-09 1s 1s 301316710e-09 0s 0s 301321790e-09 0s 0s 301322350e-09 1s 1s 301326950e-09 0s 0s 301332070e-09 0s 0s 301332590e-09 1s 1s 301337190e-09 0s 0s 301342350e-09 0s 0s 301342830e-09 1s 1s 301347430e-09 0s 0s 301352630e-09 0s 0s 301353070e-09 1s 1s 301357670e-09 0s 0s 301362910e-09 0s 0s 301363310e-09 1s 1s 301367910e-09 0s 0s 301373190e-09 0s 0s 301373550e-09 1s 1s 301378150e-09 0s 0s 301383470e-09 0s 0s 301383790e-09 1s 1s 301388390e-09 0s 0s 301393750e-09 0s 0s 301394030e-09 1s 1s 301398630e-09 0s 0s 301404030e-09 0s 0s 301404270e-09 1s 1s 301408870e-09 0s 0s 301414310e-09 0s 0s 301414510e-09 1s 1s 301419110e-09 0s 0s 301424590e-09 0s 0s 301424750e-09 1s 1s 301429350e-09 0s 0s 301434870e-09 0s 0s 301434990e-09 1s 1s 301439590e-09 0s 0s 301445150e-09 0s 0s 301445230e-09 1s 1s 301449830e-09 0s 0s 301455430e-09 0s 0s 301455470e-09 1s 1s 301460070e-09 0s 0s 301465710e-09 1s 1s 301465750e-09 1s 1s 301470350e-09 0s 0s 301475950e-09 1s 1s 301476030e-09 1s 1s 301480590e-09 0s 0s 301486190e-09 1s 1s 301486310e-09 1s 1s 301490830e-09 0s 0s 301496430e-09 1s 1s 301496590e-09 1s 1s 301501070e-09 0s 0s 301506670e-09 1s 1s 301506870e-09 1s 1s 301511310e-09 0s 0s 301516910e-09 1s 1s 301517150e-09 1s 1s 301521550e-09 0s 0s 301527150e-09 1s 1s 301527430e-09 1s 1s 301531790e-09 0s 0s 301537390e-09 1s 1s 301537710e-09 1s 1s 301542030e-09 0s 0s 301547630e-09 1s 1s 301547990e-09 1s 1s 301552270e-09 0s 0s 301557870e-09 1s 1s 301558270e-09 1s 1s 301562510e-09 0s 0s 301568110e-09 1s 1s 301568550e-09 1s 1s 301572750e-09 0s 0s 301578350e-09 1s 1s 301578830e-09 1s 1s 301582990e-09 0s 0s 301588590e-09 1s 1s 301589110e-09 1s 1s 301593230e-09 0s 0s 301598830e-09 1s 1s 301599390e-09 1s 1s 301603470e-09 0s 0s 301609070e-09 1s 1s 301609670e-09 1s 1s 301613710e-09 0s 0s 301619310e-09 1s 1s 301619950e-09 1s 1s 301623950e-09 0s 0s 301629550e-09 1s 1s 301630230e-09 1s 1s 301634190e-09 0s 0s 301639790e-09 1s 1s 301640510e-09 1s 1s 301644430e-09 0s 0s 301650030e-09 1s 1s 301650790e-09 1s 1s 301654670e-09 0s 0s 301660270e-09 1s 1s 301661070e-09 1s 1s 301664910e-09 0s 0s 301670510e-09 1s 1s 301671350e-09 1s 1s 301675150e-09 0s 0s 301680750e-09 1s 1s 301681630e-09 1s 1s 301685390e-09 0s 0s 301690990e-09 1s 1s 301691910e-09 1s 1s 301695630e-09 0s 0s 301701230e-09 1s 1s 301702190e-09 1s 1s 301705870e-09 0s 0s 301711470e-09 1s 1s 301712470e-09 1s 1s 301716110e-09 0s 0s 301721710e-09 1s 1s 301722750e-09 1s 1s 301726350e-09 0s 0s 301731950e-09 1s 1s 301733030e-09 1s 1s 301736590e-09 0s 0s 301742190e-09 1s 1s 301743310e-09 1s 1s 301746830e-09 0s 0s 301752430e-09 1s 1s 301753590e-09 1s 1s 301757070e-09 0s 0s 301762670e-09 1s 1s 301763870e-09 1s 1s 301767310e-09 0s 0s 301772910e-09 1s 1s 301774150e-09 1s 1s 301777550e-09 0s 0s 301783150e-09 1s 1s 301784430e-09 1s 1s 301787790e-09 0s 0s 301793390e-09 1s 1s 301794710e-09 1s 1s 301798030e-09 0s 0s 301803630e-09 1s 1s 301804990e-09 1s 1s 301808270e-09 0s 0s 301813870e-09 1s 1s 301815270e-09 1s 1s 301818510e-09 0s 0s 301824110e-09 1s 1s 301825550e-09 1s 1s 301828750e-09 0s 0s 301834350e-09 1s 1s 301835830e-09 1s 1s 301838990e-09 0s 0s 301844590e-09 1s 1s 301846110e-09 1s 1s 301849230e-09 0s 0s 301854830e-09 1s 1s 301856390e-09 1s 1s 301859470e-09 0s 0s 301865070e-09 1s 1s 301866670e-09 1s 1s 301869710e-09 0s 0s 301875310e-09 1s 1s 301876950e-09 1s 1s 301879950e-09 0s 0s 301885550e-09 1s 1s 301887230e-09 1s 1s 301890190e-09 0s 0s 301895790e-09 1s 1s 301897510e-09 1s 1s 301900430e-09 0s 0s 301906030e-09 1s 1s 301907790e-09 1s 1s 301910670e-09 0s 0s 301916270e-09 1s 1s 301918070e-09 1s 1s 301920910e-09 0s 0s 301926510e-09 1s 1s 301928350e-09 1s 1s 301931150e-09 0s 0s 301936750e-09 1s 1s 301938630e-09 1s 1s 301941390e-09 0s 0s 301946990e-09 1s 1s 301948910e-09 1s 1s 301951630e-09 0s 0s 301957230e-09 1s 1s 301959190e-09 1s 1s 301961870e-09 0s 0s 301967470e-09 1s 1s 301969470e-09 1s 1s 301972110e-09 0s 0s 301977710e-09 1s 1s 301979750e-09 1s 1s 301982350e-09 0s 0s 301987950e-09 1s 1s 301990030e-09 1s 1s 301992590e-09 0s 0s 301998190e-09 1s 1s 302000310e-09 1s 1s 302002830e-09 0s 0s 302008430e-09 1s 1s 302010590e-09 1s 1s 302013070e-09 0s 0s 302018670e-09 1s 1s 302020870e-09 1s 1s 302023310e-09 0s 0s 302028910e-09 1s 1s 302031150e-09 1s 1s 302033550e-09 0s 0s 302039150e-09 1s 1s 302041430e-09 1s 1s 302043790e-09 0s 0s 302049390e-09 1s 1s 302051710e-09 1s 1s 302054030e-09 0s 0s 302059630e-09 1s 1s 302061990e-09 1s 1s 302064270e-09 0s 0s 302069870e-09 1s 1s 302072270e-09 1s 1s 302074510e-09 0s 0s 302080110e-09 1s 1s 302082550e-09 1s 1s 302084750e-09 0s 0s 302090350e-09 1s 1s 302092830e-09 1s 1s 302094990e-09 0s 0s 302100590e-09 1s 1s 302103110e-09 1s 1s 302105230e-09 0s 0s 302110830e-09 1s 1s 302113390e-09 1s 1s 302115470e-09 0s 0s 302121070e-09 1s 1s 302123670e-09 1s 1s 302125710e-09 0s 0s 302131310e-09 1s 1s 302133950e-09 1s 1s 302135950e-09 0s 0s 302141550e-09 1s 1s 302144230e-09 1s 1s 302146190e-09 0s 0s 302151790e-09 1s 1s 302154510e-09 1s 1s 302156430e-09 0s 0s 302162030e-09 1s 1s 302164790e-09 1s 1s 302166670e-09 0s 0s 302172270e-09 1s 1s 302175070e-09 1s 1s 302176910e-09 0s 0s 302182510e-09 1s 1s 302185350e-09 1s 1s 302187150e-09 0s 0s 302192750e-09 1s 1s 302195630e-09 1s 1s 302197390e-09 0s 0s 302202990e-09 1s 1s 302205910e-09 1s 1s 302207630e-09 0s 0s 302213230e-09 1s 1s 302216190e-09 1s 1s 302217870e-09 0s 0s 302223470e-09 1s 1s 302226470e-09 1s 1s 302228110e-09 0s 0s 302233710e-09 1s 1s 302236750e-09 1s 1s 302238350e-09 0s 0s 302243950e-09 1s 1s 302247030e-09 1s 1s 302248590e-09 0s 0s 302254190e-09 1s 1s 302257310e-09 1s 1s 302258830e-09 0s 0s 302264430e-09 1s 1s 302267590e-09 1s 1s 302269070e-09 0s 0s 302274670e-09 1s 1s 302277870e-09 1s 1s 302279310e-09 0s 0s 302284910e-09 1s 1s 302288150e-09 1s 1s 302289550e-09 0s 0s 302295150e-09 1s 1s 302298430e-09 1s 1s 302299790e-09 0s 0s 302305390e-09 1s 1s 302308710e-09 1s 1s 302310030e-09 0s 0s 302315630e-09 1s 1s 302318990e-09 1s 1s 302320270e-09 0s 0s 302325870e-09 1s 1s 302329270e-09 1s 1s 302330510e-09 0s 0s 302336110e-09 1s 1s 302339550e-09 1s 1s 302340750e-09 0s 0s 302346350e-09 1s 1s 302349830e-09 1s 1s 302350990e-09 0s 0s 302356590e-09 1s 1s 302360110e-09 1s 1s 302361230e-09 0s 0s 302366830e-09 1s 1s 302370390e-09 1s 1s 302371470e-09 0s 0s 302377070e-09 1s 1s 302380670e-09 1s 1s 302381710e-09 0s 0s 302387310e-09 1s 1s 302390950e-09 1s 1s 302391950e-09 0s 0s 302397550e-09 1s 1s 302401230e-09 1s 1s 302402190e-09 0s 0s 302407790e-09 1s 1s 302411510e-09 1s 1s 302412430e-09 0s 0s 302418030e-09 1s 1s 302421790e-09 1s 1s 302422670e-09 0s 0s 302428270e-09 1s 1s 302432070e-09 1s 1s 302432910e-09 0s 0s 302438510e-09 1s 1s 302442350e-09 1s 1s 302443150e-09 0s 0s 302448750e-09 1s 1s 302452630e-09 1s 1s 302453390e-09 0s 0s 302458990e-09 1s 1s 302462910e-09 1s 1s 302463630e-09 0s 0s 302469230e-09 1s 1s 302473190e-09 1s 1s 302473870e-09 0s 0s 302479470e-09 1s 1s 302483470e-09 1s 1s 302484110e-09 0s 0s 302489710e-09 1s 1s 302493750e-09 1s 1s 302494350e-09 0s 0s 302499950e-09 1s 1s 302504030e-09 1s 1s 302504590e-09 0s 0s 302510190e-09 1s 1s 302514310e-09 1s 1s 302514830e-09 0s 0s 302520430e-09 1s 1s 302524590e-09 1s 1s 302525070e-09 0s 0s 302530670e-09 1s 1s 302534870e-09 1s 1s 302535310e-09 0s 0s 302540910e-09 1s 1s 302545150e-09 1s 1s 302545550e-09 0s 0s 302551150e-09 1s 1s 302555430e-09 1s 1s 302555790e-09 0s 0s 302561390e-09 1s 1s 302565710e-09 1s 1s 302566030e-09 0s 0s 302571630e-09 1s 1s 302575990e-09 1s 1s 302576270e-09 0s 0s 302581870e-09 1s 1s 302586270e-09 1s 1s 302586510e-09 0s 0s 302592110e-09 1s 1s 302596550e-09 1s 1s 302596750e-09 0s 0s 302602350e-09 1s 1s 302606830e-09 1s 1s 302606990e-09 0s 0s 302612590e-09 1s 1s 302617110e-09 1s 1s 302617230e-09 0s 0s 302622830e-09 1s 1s 302627390e-09 1s 1s 302627470e-09 0s 0s 302633070e-09 1s 1s 302637670e-09 1s 1s 302637710e-09 0s 0s 302643310e-09 1s 1s 302647950e-09 0s 0s 302653550e-09 1s 1s 302658190e-09 0s 0s 302658230e-09 0s 0s 302663790e-09 1s 1s 302668430e-09 0s 0s 302668510e-09 0s 0s 302674030e-09 1s 1s 302678670e-09 0s 0s 302678790e-09 0s 0s 302684270e-09 1s 1s 302688910e-09 0s 0s 302689070e-09 0s 0s 302694510e-09 1s 1s 302699150e-09 0s 0s 302699350e-09 0s 0s 302704750e-09 1s 1s 302709390e-09 0s 0s 302709630e-09 0s 0s 302714990e-09 1s 1s 302719630e-09 0s 0s 302719910e-09 0s 0s 302725230e-09 1s 1s 302729870e-09 0s 0s 302730190e-09 0s 0s 302735470e-09 1s 1s 302740110e-09 0s 0s 302740470e-09 0s 0s 302745710e-09 1s 1s 302750350e-09 0s 0s 302750750e-09 0s 0s 302755950e-09 1s 1s 302760590e-09 0s 0s 302761030e-09 0s 0s 302766190e-09 1s 1s 302770830e-09 0s 0s 302771310e-09 0s 0s 302776430e-09 1s 1s 302781070e-09 0s 0s 302781590e-09 0s 0s 302786670e-09 1s 1s 302791310e-09 0s 0s 302791870e-09 0s 0s 302796910e-09 1s 1s 302801550e-09 0s 0s 302802150e-09 0s 0s 302807150e-09 1s 1s 302811790e-09 0s 0s 302812430e-09 0s 0s 302817390e-09 1s 1s 302822030e-09 0s 0s 302822710e-09 0s 0s 302827630e-09 1s 1s 302832270e-09 0s 0s 302832990e-09 0s 0s 302837870e-09 1s 1s 302842510e-09 0s 0s 302843270e-09 0s 0s 302848110e-09 1s 1s 302852750e-09 0s 0s 302853550e-09 0s 0s 302858350e-09 1s 1s 302862990e-09 0s 0s 302863830e-09 0s 0s 302868590e-09 1s 1s 302873230e-09 0s 0s 302874110e-09 0s 0s 302878830e-09 1s 1s 302883470e-09 0s 0s 302884390e-09 0s 0s 302889070e-09 1s 1s 302893710e-09 0s 0s 302894670e-09 0s 0s 302899310e-09 1s 1s 302903950e-09 0s 0s 302904950e-09 0s 0s 302909550e-09 1s 1s 302914190e-09 0s 0s 302915230e-09 0s 0s 302919790e-09 1s 1s 302924430e-09 0s 0s 302925510e-09 0s 0s 302930030e-09 1s 1s 302934670e-09 0s 0s 302935790e-09 0s 0s 302940270e-09 1s 1s 302944910e-09 0s 0s 302946070e-09 0s 0s 302950510e-09 1s 1s 302955150e-09 0s 0s 302956350e-09 0s 0s 302960750e-09 1s 1s 302965390e-09 0s 0s 302966630e-09 0s 0s 302970990e-09 1s 1s 302975630e-09 0s 0s 302976910e-09 0s 0s 302981230e-09 1s 1s 302985870e-09 0s 0s 302987190e-09 0s 0s 302991470e-09 1s 1s 302996110e-09 0s 0s 302997470e-09 0s 0s 303001710e-09 1s 1s 303006350e-09 0s 0s 303007750e-09 0s 0s 303011950e-09 1s 1s 303016590e-09 0s 0s 303018030e-09 0s 0s 303022190e-09 1s 1s 303026830e-09 0s 0s 303028310e-09 0s 0s 303032430e-09 1s 1s 303037070e-09 0s 0s 303038590e-09 0s 0s 303042670e-09 1s 1s 303047310e-09 0s 0s 303048870e-09 0s 0s 303052910e-09 1s 1s 303057550e-09 0s 0s 303059150e-09 0s 0s 303063150e-09 1s 1s 303067790e-09 0s 0s 303069430e-09 0s 0s 303073390e-09 1s 1s 303078030e-09 0s 0s 303079710e-09 0s 0s 303083630e-09 1s 1s 303088270e-09 0s 0s 303089990e-09 0s 0s 303093870e-09 1s 1s 303098510e-09 0s 0s 303100270e-09 0s 0s 303104110e-09 1s 1s 303108750e-09 0s 0s 303110550e-09 0s 0s 303114350e-09 1s 1s 303118990e-09 0s 0s 303120830e-09 0s 0s 303124590e-09 1s 1s 303129230e-09 0s 0s 303131110e-09 0s 0s 303134830e-09 1s 1s 303139470e-09 0s 0s 303141390e-09 0s 0s 303145070e-09 1s 1s 303149710e-09 0s 0s 303151670e-09 0s 0s 303155310e-09 1s 1s 303159950e-09 0s 0s 303161950e-09 0s 0s 303165550e-09 1s 1s 303170190e-09 0s 0s 303172230e-09 0s 0s 303175790e-09 1s 1s 303180430e-09 0s 0s 303182510e-09 0s 0s 303186030e-09 1s 1s 303190670e-09 0s 0s 303192790e-09 0s 0s 303196270e-09 1s 1s 303200910e-09 0s 0s 303203070e-09 0s 0s 303206510e-09 1s 1s 303211150e-09 0s 0s 303213350e-09 0s 0s 303216750e-09 1s 1s 303221390e-09 0s 0s 303223630e-09 0s 0s 303226990e-09 1s 1s 303231630e-09 0s 0s 303233910e-09 0s 0s 303237230e-09 1s 1s 303241870e-09 0s 0s 303244190e-09 0s 0s 303247470e-09 1s 1s 303252110e-09 0s 0s 303254470e-09 0s 0s 303257710e-09 1s 1s 303262350e-09 0s 0s 303264750e-09 0s 0s 303267950e-09 1s 1s 303272590e-09 0s 0s 303275030e-09 0s 0s 303278190e-09 1s 1s 303282830e-09 0s 0s 303285310e-09 0s 0s 303288430e-09 1s 1s 303293070e-09 0s 0s 303295590e-09 0s 0s 303298670e-09 1s 1s 303303310e-09 0s 0s 303305870e-09 0s 0s 303308910e-09 1s 1s 303313550e-09 0s 0s 303316150e-09 0s 0s 303319150e-09 1s 1s 303323790e-09 0s 0s 303326430e-09 0s 0s 303329390e-09 1s 1s 303334030e-09 0s 0s 303336710e-09 0s 0s 303339630e-09 1s 1s 303344270e-09 0s 0s 303346990e-09 0s 0s 303349870e-09 1s 1s 303354510e-09 0s 0s 303357270e-09 0s 0s 303360110e-09 1s 1s 303364750e-09 0s 0s 303367550e-09 0s 0s 303370350e-09 1s 1s 303374990e-09 0s 0s 303377830e-09 0s 0s 303380590e-09 1s 1s 303385230e-09 0s 0s 303388110e-09 0s 0s 303390830e-09 1s 1s 303395470e-09 0s 0s 303398390e-09 0s 0s 303401070e-09 1s 1s 303405710e-09 0s 0s 303408670e-09 0s 0s 303411310e-09 1s 1s 303415950e-09 0s 0s 303418950e-09 0s 0s 303421550e-09 1s 1s 303426190e-09 0s 0s 303429230e-09 0s 0s 303431790e-09 1s 1s 303436430e-09 0s 0s 303439510e-09 0s 0s 303442030e-09 1s 1s 303446670e-09 0s 0s 303449790e-09 0s 0s 303452270e-09 1s 1s 303456910e-09 0s 0s 303460070e-09 0s 0s 303462510e-09 1s 1s 303467150e-09 0s 0s 303470350e-09 0s 0s 303472750e-09 1s 1s 303477390e-09 0s 0s 303480630e-09 0s 0s 303482990e-09 1s 1s 303487630e-09 0s 0s 303490910e-09 0s 0s 303493230e-09 1s 1s 303497870e-09 0s 0s 303501190e-09 0s 0s 303503470e-09 1s 1s 303508110e-09 0s 0s 303511470e-09 0s 0s 303513710e-09 1s 1s 303518350e-09 0s 0s 303521750e-09 0s 0s 303523950e-09 1s 1s 303528590e-09 0s 0s 303532030e-09 0s 0s 303534190e-09 1s 1s 303538830e-09 0s 0s 303542310e-09 0s 0s 303544430e-09 1s 1s 303549070e-09 0s 0s 303552590e-09 0s 0s 303554670e-09 1s 1s 303559310e-09 0s 0s 303562870e-09 0s 0s 303564910e-09 1s 1s 303569550e-09 0s 0s 303573150e-09 0s 0s 303575150e-09 1s 1s 303579790e-09 0s 0s 303583430e-09 0s 0s 303585390e-09 1s 1s 303590030e-09 0s 0s 303593710e-09 0s 0s 303595630e-09 1s 1s 303600270e-09 0s 0s 303603990e-09 0s 0s 303605870e-09 1s 1s 303610510e-09 0s 0s 303614270e-09 0s 0s 303616110e-09 1s 1s 303620750e-09 0s 0s 303624550e-09 0s 0s 303626350e-09 1s 1s 303630990e-09 0s 0s 303634830e-09 0s 0s 303636590e-09 1s 1s 303641230e-09 0s 0s 303645110e-09 0s 0s 303646830e-09 1s 1s 303651470e-09 0s 0s 303655390e-09 0s 0s 303657070e-09 1s 1s 303661710e-09 0s 0s 303665670e-09 0s 0s 303667310e-09 1s 1s 303671950e-09 0s 0s 303675950e-09 0s 0s 303677550e-09 1s 1s 303682190e-09 0s 0s 303686230e-09 0s 0s 303687790e-09 1s 1s 303692430e-09 0s 0s 303696510e-09 0s 0s 303698030e-09 1s 1s 303702670e-09 0s 0s 303706790e-09 0s 0s 303708270e-09 1s 1s 303712910e-09 0s 0s 303717070e-09 0s 0s 303718510e-09 1s 1s 303723150e-09 0s 0s 303727350e-09 0s 0s 303728750e-09 1s 1s 303733390e-09 0s 0s 303737630e-09 0s 0s 303738990e-09 1s 1s 303743630e-09 0s 0s 303747910e-09 0s 0s 303749230e-09 1s 1s 303753870e-09 0s 0s 303758190e-09 0s 0s 303759470e-09 1s 1s 303764110e-09 0s 0s 303768470e-09 0s 0s 303769710e-09 1s 1s 303774350e-09 0s 0s 303778750e-09 0s 0s 303779950e-09 1s 1s 303784590e-09 0s 0s 303789030e-09 0s 0s 303790190e-09 1s 1s 303794830e-09 0s 0s 303799310e-09 0s 0s 303800430e-09 1s 1s 303805070e-09 0s 0s 303809590e-09 0s 0s 303810670e-09 1s 1s 303815310e-09 0s 0s 303819870e-09 0s 0s 303820910e-09 1s 1s 303825550e-09 0s 0s 303830150e-09 0s 0s 303831150e-09 1s 1s 303835790e-09 0s 0s 303840430e-09 0s 0s 303841390e-09 1s 1s 303846030e-09 0s 0s 303850710e-09 0s 0s 303851630e-09 1s 1s 303856270e-09 0s 0s 303860990e-09 0s 0s 303861870e-09 1s 1s 303866510e-09 0s 0s 303871270e-09 0s 0s 303872110e-09 1s 1s 303876750e-09 0s 0s 303881550e-09 0s 0s 303882350e-09 1s 1s 303886990e-09 0s 0s 303891830e-09 0s 0s 303892590e-09 1s 1s 303897230e-09 0s 0s 303902110e-09 0s 0s 303902830e-09 1s 1s 303907470e-09 0s 0s 303912390e-09 0s 0s 303913070e-09 1s 1s 303917710e-09 0s 0s 303922670e-09 0s 0s 303923310e-09 1s 1s 303927950e-09 0s 0s 303932950e-09 0s 0s 303933550e-09 1s 1s 303938190e-09 0s 0s 303943230e-09 0s 0s 303943790e-09 1s 1s 303948430e-09 0s 0s 303953510e-09 0s 0s 303954030e-09 1s 1s 303958670e-09 0s 0s 303963790e-09 0s 0s 303964270e-09 1s 1s 303968910e-09 0s 0s 303974070e-09 0s 0s 303974510e-09 1s 1s 303979150e-09 0s 0s 303984350e-09 0s 0s 303984750e-09 1s 1s 303989390e-09 0s 0s 303994630e-09 0s 0s 303994990e-09 1s 1s 303999630e-09 0s 0s 304004910e-09 0s 0s 304005230e-09 1s 1s 304009870e-09 0s 0s 304015190e-09 0s 0s 304015470e-09 1s 1s 304020110e-09 0s 0s 304025470e-09 0s 0s 304025710e-09 1s 1s 304030350e-09 0s 0s 304035750e-09 0s 0s 304035950e-09 1s 1s 304040590e-09 0s 0s 304046030e-09 0s 0s 304046190e-09 1s 1s 304050830e-09 0s 0s 304056310e-09 0s 0s 304056430e-09 1s 1s 304061070e-09 0s 0s 304066590e-09 0s 0s 304066670e-09 1s 1s 304071310e-09 0s 0s 304076870e-09 0s 0s 304076910e-09 1s 1s 304081550e-09 0s 0s 304087150e-09 1s 1s 304087190e-09 1s 1s 304091830e-09 0s 0s 304097390e-09 1s 1s 304097470e-09 1s 1s 304102070e-09 0s 0s 304107630e-09 1s 1s 304107750e-09 1s 1s 304112310e-09 0s 0s 304117870e-09 1s 1s 304118030e-09 1s 1s 304122550e-09 0s 0s 304128110e-09 1s 1s 304128310e-09 1s 1s 304132790e-09 0s 0s 304138350e-09 1s 1s 304138590e-09 1s 1s 304143030e-09 0s 0s 304148590e-09 1s 1s 304148870e-09 1s 1s 304153270e-09 0s 0s 304158830e-09 1s 1s 304159150e-09 1s 1s 304163510e-09 0s 0s 304169070e-09 1s 1s 304169430e-09 1s 1s 304173750e-09 0s 0s 304179310e-09 1s 1s 304179710e-09 1s 1s 304183990e-09 0s 0s 304189550e-09 1s 1s 304189990e-09 1s 1s 304194230e-09 0s 0s 304199790e-09 1s 1s 304200270e-09 1s 1s 304204470e-09 0s 0s 304210030e-09 1s 1s 304210550e-09 1s 1s 304214710e-09 0s 0s 304220270e-09 1s 1s 304220830e-09 1s 1s 304224950e-09 0s 0s 304230510e-09 1s 1s 304231110e-09 1s 1s 304235190e-09 0s 0s 304240750e-09 1s 1s 304241390e-09 1s 1s 304245430e-09 0s 0s 304250990e-09 1s 1s 304251670e-09 1s 1s 304255670e-09 0s 0s 304261230e-09 1s 1s 304261950e-09 1s 1s 304265910e-09 0s 0s 304271470e-09 1s 1s 304272230e-09 1s 1s 304276150e-09 0s 0s 304281710e-09 1s 1s 304282510e-09 1s 1s 304286390e-09 0s 0s 304291950e-09 1s 1s 304292790e-09 1s 1s 304296630e-09 0s 0s 304302190e-09 1s 1s 304303070e-09 1s 1s 304306870e-09 0s 0s 304312430e-09 1s 1s 304313350e-09 1s 1s 304317110e-09 0s 0s 304322670e-09 1s 1s 304323630e-09 1s 1s 304327350e-09 0s 0s 304332910e-09 1s 1s 304333910e-09 1s 1s 304337590e-09 0s 0s 304343150e-09 1s 1s 304344190e-09 1s 1s 304347830e-09 0s 0s 304353390e-09 1s 1s 304354470e-09 1s 1s 304358070e-09 0s 0s 304363630e-09 1s 1s 304364750e-09 1s 1s 304368310e-09 0s 0s 304373870e-09 1s 1s 304375030e-09 1s 1s 304378550e-09 0s 0s 304384110e-09 1s 1s 304385310e-09 1s 1s 304388790e-09 0s 0s 304394350e-09 1s 1s 304395590e-09 1s 1s 304399030e-09 0s 0s 304404590e-09 1s 1s 304405870e-09 1s 1s 304409270e-09 0s 0s 304414830e-09 1s 1s 304416150e-09 1s 1s 304419510e-09 0s 0s 304425070e-09 1s 1s 304426430e-09 1s 1s 304429750e-09 0s 0s 304435310e-09 1s 1s 304436710e-09 1s 1s 304439990e-09 0s 0s 304445550e-09 1s 1s 304446990e-09 1s 1s 304450230e-09 0s 0s 304455790e-09 1s 1s 304457270e-09 1s 1s 304460470e-09 0s 0s 304466030e-09 1s 1s 304467550e-09 1s 1s 304470710e-09 0s 0s 304476270e-09 1s 1s 304477830e-09 1s 1s 304480950e-09 0s 0s 304486510e-09 1s 1s 304488110e-09 1s 1s 304491190e-09 0s 0s 304496750e-09 1s 1s 304498390e-09 1s 1s 304501430e-09 0s 0s 304506990e-09 1s 1s 304508670e-09 1s 1s 304511670e-09 0s 0s 304517230e-09 1s 1s 304518950e-09 1s 1s 304521910e-09 0s 0s 304527470e-09 1s 1s 304529230e-09 1s 1s 304532150e-09 0s 0s 304537710e-09 1s 1s 304539510e-09 1s 1s 304542390e-09 0s 0s 304547950e-09 1s 1s 304549790e-09 1s 1s 304552630e-09 0s 0s 304558190e-09 1s 1s 304560070e-09 1s 1s 304562870e-09 0s 0s 304568430e-09 1s 1s 304570350e-09 1s 1s 304573110e-09 0s 0s 304578670e-09 1s 1s 304580630e-09 1s 1s 304583350e-09 0s 0s 304588910e-09 1s 1s 304590910e-09 1s 1s 304593590e-09 0s 0s 304599150e-09 1s 1s 304601190e-09 1s 1s 304603830e-09 0s 0s 304609390e-09 1s 1s 304611470e-09 1s 1s 304614070e-09 0s 0s 304619630e-09 1s 1s 304621750e-09 1s 1s 304624310e-09 0s 0s 304629870e-09 1s 1s 304632030e-09 1s 1s 304634550e-09 0s 0s 304640110e-09 1s 1s 304642310e-09 1s 1s 304644790e-09 0s 0s 304650350e-09 1s 1s 304652590e-09 1s 1s 304655030e-09 0s 0s 304660590e-09 1s 1s 304662870e-09 1s 1s 304665270e-09 0s 0s 304670830e-09 1s 1s 304673150e-09 1s 1s 304675510e-09 0s 0s 304681070e-09 1s 1s 304683430e-09 1s 1s 304685750e-09 0s 0s 304691310e-09 1s 1s 304693710e-09 1s 1s 304695990e-09 0s 0s 304701550e-09 1s 1s 304703990e-09 1s 1s 304706230e-09 0s 0s 304711790e-09 1s 1s 304714270e-09 1s 1s 304716470e-09 0s 0s 304722030e-09 1s 1s 304724550e-09 1s 1s 304726710e-09 0s 0s 304732270e-09 1s 1s 304734830e-09 1s 1s 304736950e-09 0s 0s 304742510e-09 1s 1s 304745110e-09 1s 1s 304747190e-09 0s 0s 304752750e-09 1s 1s 304755390e-09 1s 1s 304757430e-09 0s 0s 304762990e-09 1s 1s 304765670e-09 1s 1s 304767670e-09 0s 0s 304773230e-09 1s 1s 304775950e-09 1s 1s 304777910e-09 0s 0s 304783470e-09 1s 1s 304786230e-09 1s 1s 304788150e-09 0s 0s 304793710e-09 1s 1s 304796510e-09 1s 1s 304798390e-09 0s 0s 304803950e-09 1s 1s 304806790e-09 1s 1s 304808630e-09 0s 0s 304814190e-09 1s 1s 304817070e-09 1s 1s 304818870e-09 0s 0s 304824430e-09 1s 1s 304827350e-09 1s 1s 304829110e-09 0s 0s 304834670e-09 1s 1s 304837630e-09 1s 1s 304839350e-09 0s 0s 304844910e-09 1s 1s 304847910e-09 1s 1s 304849590e-09 0s 0s 304855150e-09 1s 1s 304858190e-09 1s 1s 304859830e-09 0s 0s 304865390e-09 1s 1s 304868470e-09 1s 1s 304870070e-09 0s 0s 304875630e-09 1s 1s 304878750e-09 1s 1s 304880310e-09 0s 0s 304885870e-09 1s 1s 304889030e-09 1s 1s 304890550e-09 0s 0s 304896110e-09 1s 1s 304899310e-09 1s 1s 304900790e-09 0s 0s 304906350e-09 1s 1s 304909590e-09 1s 1s 304911030e-09 0s 0s 304916590e-09 1s 1s 304919870e-09 1s 1s 304921270e-09 0s 0s 304926830e-09 1s 1s 304930150e-09 1s 1s 304931510e-09 0s 0s 304937070e-09 1s 1s 304940430e-09 1s 1s 304941750e-09 0s 0s 304947310e-09 1s 1s 304950710e-09 1s 1s 304951990e-09 0s 0s 304957550e-09 1s 1s 304960990e-09 1s 1s 304962230e-09 0s 0s 304967790e-09 1s 1s 304971270e-09 1s 1s 304972470e-09 0s 0s 304978030e-09 1s 1s 304981550e-09 1s 1s 304982710e-09 0s 0s 304988270e-09 1s 1s 304991830e-09 1s 1s 304992950e-09 0s 0s 304998510e-09 1s 1s 305002110e-09 1s 1s 305003190e-09 0s 0s 305008750e-09 1s 1s 305012390e-09 1s 1s 305013430e-09 0s 0s 305018990e-09 1s 1s 305022670e-09 1s 1s 305023670e-09 0s 0s 305029230e-09 1s 1s 305032950e-09 1s 1s 305033910e-09 0s 0s 305039470e-09 1s 1s 305043230e-09 1s 1s 305044150e-09 0s 0s 305049710e-09 1s 1s 305053510e-09 1s 1s 305054390e-09 0s 0s 305059950e-09 1s 1s 305063790e-09 1s 1s 305064630e-09 0s 0s 305070190e-09 1s 1s 305074070e-09 1s 1s 305074870e-09 0s 0s 305080430e-09 1s 1s 305084350e-09 1s 1s 305085110e-09 0s 0s 305090670e-09 1s 1s 305094630e-09 1s 1s 305095350e-09 0s 0s 305100910e-09 1s 1s 305104910e-09 1s 1s 305105590e-09 0s 0s 305111150e-09 1s 1s 305115190e-09 1s 1s 305115830e-09 0s 0s 305121390e-09 1s 1s 305125470e-09 1s 1s 305126070e-09 0s 0s 305131630e-09 1s 1s 305135750e-09 1s 1s 305136310e-09 0s 0s 305141870e-09 1s 1s 305146030e-09 1s 1s 305146550e-09 0s 0s 305152110e-09 1s 1s 305156310e-09 1s 1s 305156790e-09 0s 0s 305162350e-09 1s 1s 305166590e-09 1s 1s 305167030e-09 0s 0s 305172590e-09 1s 1s 305176870e-09 1s 1s 305177270e-09 0s 0s 305182830e-09 1s 1s 305187150e-09 1s 1s 305187510e-09 0s 0s 305193070e-09 1s 1s 305197430e-09 1s 1s 305197750e-09 0s 0s 305203310e-09 1s 1s 305207710e-09 1s 1s 305207990e-09 0s 0s 305213550e-09 1s 1s 305217990e-09 1s 1s 305218230e-09 0s 0s 305223790e-09 1s 1s 305228270e-09 1s 1s 305228470e-09 0s 0s 305234030e-09 1s 1s 305238550e-09 1s 1s 305238710e-09 0s 0s 305244270e-09 1s 1s 305248830e-09 1s 1s 305248950e-09 0s 0s 305254510e-09 1s 1s 305259110e-09 1s 1s 305259190e-09 0s 0s 305264750e-09 1s 1s 305269390e-09 1s 1s 305269430e-09 0s 0s 305274990e-09 1s 1s 305279670e-09 0s 0s 305285230e-09 1s 1s 305289910e-09 0s 0s 305289950e-09 0s 0s 305295470e-09 1s 1s 305300150e-09 0s 0s 305300230e-09 0s 0s 305305710e-09 1s 1s 305310390e-09 0s 0s 305310510e-09 0s 0s 305315950e-09 1s 1s 305320630e-09 0s 0s 305320790e-09 0s 0s 305326190e-09 1s 1s 305330870e-09 0s 0s 305331070e-09 0s 0s 305336430e-09 1s 1s 305341110e-09 0s 0s 305341350e-09 0s 0s 305346670e-09 1s 1s 305351350e-09 0s 0s 305351630e-09 0s 0s 305356910e-09 1s 1s 305361590e-09 0s 0s 305361910e-09 0s 0s 305367150e-09 1s 1s 305371830e-09 0s 0s 305372190e-09 0s 0s 305377390e-09 1s 1s 305382070e-09 0s 0s 305382470e-09 0s 0s 305387630e-09 1s 1s 305392310e-09 0s 0s 305392750e-09 0s 0s 305397870e-09 1s 1s 305402550e-09 0s 0s 305403030e-09 0s 0s 305408110e-09 1s 1s 305412790e-09 0s 0s 305413310e-09 0s 0s 305418350e-09 1s 1s 305423030e-09 0s 0s 305423590e-09 0s 0s 305428590e-09 1s 1s 305433270e-09 0s 0s 305433870e-09 0s 0s 305438830e-09 1s 1s 305443510e-09 0s 0s 305444150e-09 0s 0s 305449070e-09 1s 1s 305453750e-09 0s 0s 305454430e-09 0s 0s 305459310e-09 1s 1s 305463990e-09 0s 0s 305464710e-09 0s 0s 305469550e-09 1s 1s 305474230e-09 0s 0s 305474990e-09 0s 0s 305479790e-09 1s 1s 305484470e-09 0s 0s 305485270e-09 0s 0s 305490030e-09 1s 1s 305494710e-09 0s 0s 305495550e-09 0s 0s 305500270e-09 1s 1s 305504950e-09 0s 0s 305505830e-09 0s 0s 305510510e-09 1s 1s 305515190e-09 0s 0s 305516110e-09 0s 0s 305520750e-09 1s 1s 305525430e-09 0s 0s 305526390e-09 0s 0s 305530990e-09 1s 1s 305535670e-09 0s 0s 305536670e-09 0s 0s 305541230e-09 1s 1s 305545910e-09 0s 0s 305546950e-09 0s 0s 305551470e-09 1s 1s 305556150e-09 0s 0s 305557230e-09 0s 0s 305561710e-09 1s 1s 305566390e-09 0s 0s 305567510e-09 0s 0s 305571950e-09 1s 1s 305576630e-09 0s 0s 305577790e-09 0s 0s 305582190e-09 1s 1s 305586870e-09 0s 0s 305588070e-09 0s 0s 305592430e-09 1s 1s 305597110e-09 0s 0s 305598350e-09 0s 0s 305602670e-09 1s 1s 305607350e-09 0s 0s 305608630e-09 0s 0s 305612910e-09 1s 1s 305617590e-09 0s 0s 305618910e-09 0s 0s 305623150e-09 1s 1s 305627830e-09 0s 0s 305629190e-09 0s 0s 305633390e-09 1s 1s 305638070e-09 0s 0s 305639470e-09 0s 0s 305643630e-09 1s 1s 305648310e-09 0s 0s 305649750e-09 0s 0s 305653870e-09 1s 1s 305658550e-09 0s 0s 305660030e-09 0s 0s 305664110e-09 1s 1s 305668790e-09 0s 0s 305670310e-09 0s 0s 305674350e-09 1s 1s 305679030e-09 0s 0s 305680590e-09 0s 0s 305684590e-09 1s 1s 305689270e-09 0s 0s 305690870e-09 0s 0s 305694830e-09 1s 1s 305699510e-09 0s 0s 305701150e-09 0s 0s 305705070e-09 1s 1s 305709750e-09 0s 0s 305711430e-09 0s 0s 305715310e-09 1s 1s 305719990e-09 0s 0s 305721710e-09 0s 0s 305725550e-09 1s 1s 305730230e-09 0s 0s 305731990e-09 0s 0s 305735790e-09 1s 1s 305740470e-09 0s 0s 305742270e-09 0s 0s 305746030e-09 1s 1s 305750710e-09 0s 0s 305752550e-09 0s 0s 305756270e-09 1s 1s 305760950e-09 0s 0s 305762830e-09 0s 0s 305766510e-09 1s 1s 305771190e-09 0s 0s 305773110e-09 0s 0s 305776750e-09 1s 1s 305781430e-09 0s 0s 305783390e-09 0s 0s 305786990e-09 1s 1s 305791670e-09 0s 0s 305793670e-09 0s 0s 305797230e-09 1s 1s 305801910e-09 0s 0s 305803950e-09 0s 0s 305807470e-09 1s 1s 305812150e-09 0s 0s 305814230e-09 0s 0s 305817710e-09 1s 1s 305822390e-09 0s 0s 305824510e-09 0s 0s 305827950e-09 1s 1s 305832630e-09 0s 0s 305834790e-09 0s 0s 305838190e-09 1s 1s 305842870e-09 0s 0s 305845070e-09 0s 0s 305848430e-09 1s 1s 305853110e-09 0s 0s 305855350e-09 0s 0s 305858670e-09 1s 1s 305863350e-09 0s 0s 305865630e-09 0s 0s 305868910e-09 1s 1s 305873590e-09 0s 0s 305875910e-09 0s 0s 305879150e-09 1s 1s 305883830e-09 0s 0s 305886190e-09 0s 0s 305889390e-09 1s 1s 305894070e-09 0s 0s 305896470e-09 0s 0s 305899630e-09 1s 1s 305904310e-09 0s 0s 305906750e-09 0s 0s 305909870e-09 1s 1s 305914550e-09 0s 0s 305917030e-09 0s 0s 305920110e-09 1s 1s 305924790e-09 0s 0s 305927310e-09 0s 0s 305930350e-09 1s 1s 305935030e-09 0s 0s 305937590e-09 0s 0s 305940590e-09 1s 1s 305945270e-09 0s 0s 305947870e-09 0s 0s 305950830e-09 1s 1s 305955510e-09 0s 0s 305958150e-09 0s 0s 305961070e-09 1s 1s 305965750e-09 0s 0s 305968430e-09 0s 0s 305971310e-09 1s 1s 305975990e-09 0s 0s 305978710e-09 0s 0s 305981550e-09 1s 1s 305986230e-09 0s 0s 305988990e-09 0s 0s 305991790e-09 1s 1s 305996470e-09 0s 0s 305999270e-09 0s 0s 306002030e-09 1s 1s 306006710e-09 0s 0s 306009550e-09 0s 0s 306012270e-09 1s 1s 306016950e-09 0s 0s 306019830e-09 0s 0s 306022510e-09 1s 1s 306027190e-09 0s 0s 306030110e-09 0s 0s 306032750e-09 1s 1s 306037430e-09 0s 0s 306040390e-09 0s 0s 306042990e-09 1s 1s 306047670e-09 0s 0s 306050670e-09 0s 0s 306053230e-09 1s 1s 306057910e-09 0s 0s 306060950e-09 0s 0s 306063470e-09 1s 1s 306068150e-09 0s 0s 306071230e-09 0s 0s 306073710e-09 1s 1s 306078390e-09 0s 0s 306081510e-09 0s 0s 306083950e-09 1s 1s 306088630e-09 0s 0s 306091790e-09 0s 0s 306094190e-09 1s 1s 306098870e-09 0s 0s 306102070e-09 0s 0s 306104430e-09 1s 1s 306109110e-09 0s 0s 306112350e-09 0s 0s 306114670e-09 1s 1s 306119350e-09 0s 0s 306122630e-09 0s 0s 306124910e-09 1s 1s 306129590e-09 0s 0s 306132910e-09 0s 0s 306135150e-09 1s 1s 306139830e-09 0s 0s 306143190e-09 0s 0s 306145390e-09 1s 1s 306150070e-09 0s 0s 306153470e-09 0s 0s 306155630e-09 1s 1s 306160310e-09 0s 0s 306163750e-09 0s 0s 306165870e-09 1s 1s 306170550e-09 0s 0s 306174030e-09 0s 0s 306176110e-09 1s 1s 306180790e-09 0s 0s 306184310e-09 0s 0s 306186350e-09 1s 1s 306191030e-09 0s 0s 306194590e-09 0s 0s 306196590e-09 1s 1s 306201270e-09 0s 0s 306204870e-09 0s 0s 306206830e-09 1s 1s 306211510e-09 0s 0s 306215150e-09 0s 0s 306217070e-09 1s 1s 306221750e-09 0s 0s 306225430e-09 0s 0s 306227310e-09 1s 1s 306231990e-09 0s 0s 306235710e-09 0s 0s 306237550e-09 1s 1s 306242230e-09 0s 0s 306245990e-09 0s 0s 306247790e-09 1s 1s 306252470e-09 0s 0s 306256270e-09 0s 0s 306258030e-09 1s 1s 306262710e-09 0s 0s 306266550e-09 0s 0s 306268270e-09 1s 1s 306272950e-09 0s 0s 306276830e-09 0s 0s 306278510e-09 1s 1s 306283190e-09 0s 0s 306287110e-09 0s 0s 306288750e-09 1s 1s 306293430e-09 0s 0s 306297390e-09 0s 0s 306298990e-09 1s 1s 306303670e-09 0s 0s 306307670e-09 0s 0s 306309230e-09 1s 1s 306313910e-09 0s 0s 306317950e-09 0s 0s 306319470e-09 1s 1s 306324150e-09 0s 0s 306328230e-09 0s 0s 306329710e-09 1s 1s 306334390e-09 0s 0s 306338510e-09 0s 0s 306339950e-09 1s 1s 306344630e-09 0s 0s 306348790e-09 0s 0s 306350190e-09 1s 1s 306354870e-09 0s 0s 306359070e-09 0s 0s 306360430e-09 1s 1s 306365110e-09 0s 0s 306369350e-09 0s 0s 306370670e-09 1s 1s 306375350e-09 0s 0s 306379630e-09 0s 0s 306380910e-09 1s 1s 306385590e-09 0s 0s 306389910e-09 0s 0s 306391150e-09 1s 1s 306395830e-09 0s 0s 306400190e-09 0s 0s 306401390e-09 1s 1s 306406070e-09 0s 0s 306410470e-09 0s 0s 306411630e-09 1s 1s 306416310e-09 0s 0s 306420750e-09 0s 0s 306421870e-09 1s 1s 306426550e-09 0s 0s 306431030e-09 0s 0s 306432110e-09 1s 1s 306436790e-09 0s 0s 306441310e-09 0s 0s 306442350e-09 1s 1s 306447030e-09 0s 0s 306451590e-09 0s 0s 306452590e-09 1s 1s 306457270e-09 0s 0s 306461870e-09 0s 0s 306462830e-09 1s 1s 306467510e-09 0s 0s 306472150e-09 0s 0s 306473070e-09 1s 1s 306477750e-09 0s 0s 306482430e-09 0s 0s 306483310e-09 1s 1s 306487990e-09 0s 0s 306492710e-09 0s 0s 306493550e-09 1s 1s 306498230e-09 0s 0s 306502990e-09 0s 0s 306503790e-09 1s 1s 306508470e-09 0s 0s 306513270e-09 0s 0s 306514030e-09 1s 1s 306518710e-09 0s 0s 306523550e-09 0s 0s 306524270e-09 1s 1s 306528950e-09 0s 0s 306533830e-09 0s 0s 306534510e-09 1s 1s 306539190e-09 0s 0s 306544110e-09 0s 0s 306544750e-09 1s 1s 306549430e-09 0s 0s 306554390e-09 0s 0s 306554990e-09 1s 1s 306559670e-09 0s 0s 306564670e-09 0s 0s 306565230e-09 1s 1s 306569910e-09 0s 0s 306574950e-09 0s 0s 306575470e-09 1s 1s 306580150e-09 0s 0s 306585230e-09 0s 0s 306585710e-09 1s 1s 306590390e-09 0s 0s 306595510e-09 0s 0s 306595950e-09 1s 1s 306600630e-09 0s 0s 306605790e-09 0s 0s 306606190e-09 1s 1s 306610870e-09 0s 0s 306616070e-09 0s 0s 306616430e-09 1s 1s 306621110e-09 0s 0s 306626350e-09 0s 0s 306626670e-09 1s 1s 306631350e-09 0s 0s 306636630e-09 0s 0s 306636910e-09 1s 1s 306641590e-09 0s 0s 306646910e-09 0s 0s 306647150e-09 1s 1s 306651830e-09 0s 0s 306657190e-09 0s 0s 306657390e-09 1s 1s 306662070e-09 0s 0s 306667470e-09 0s 0s 306667630e-09 1s 1s 306672310e-09 0s 0s 306677750e-09 0s 0s 306677870e-09 1s 1s 306682550e-09 0s 0s 306688030e-09 0s 0s 306688110e-09 1s 1s 306692790e-09 0s 0s 306698310e-09 0s 0s 306698350e-09 1s 1s 306703030e-09 0s 0s 306708590e-09 1s 1s 306708630e-09 1s 1s 306713310e-09 0s 0s 306718830e-09 1s 1s 306718910e-09 1s 1s 306723550e-09 0s 0s 306729070e-09 1s 1s 306729190e-09 1s 1s 306733790e-09 0s 0s 306739310e-09 1s 1s 306739470e-09 1s 1s 306744030e-09 0s 0s 306749550e-09 1s 1s 306749750e-09 1s 1s 306754270e-09 0s 0s 306759790e-09 1s 1s 306760030e-09 1s 1s 306764510e-09 0s 0s 306770030e-09 1s 1s 306770310e-09 1s 1s 306774750e-09 0s 0s 306780270e-09 1s 1s 306780590e-09 1s 1s 306784990e-09 0s 0s 306790510e-09 1s 1s 306790870e-09 1s 1s 306795230e-09 0s 0s 306800750e-09 1s 1s 306801150e-09 1s 1s 306805470e-09 0s 0s 306810990e-09 1s 1s 306811430e-09 1s 1s 306815710e-09 0s 0s 306821230e-09 1s 1s 306821710e-09 1s 1s 306825950e-09 0s 0s 306831470e-09 1s 1s 306831990e-09 1s 1s 306836190e-09 0s 0s 306841710e-09 1s 1s 306842270e-09 1s 1s 306846430e-09 0s 0s 306851950e-09 1s 1s 306852550e-09 1s 1s 306856670e-09 0s 0s 306862190e-09 1s 1s 306862830e-09 1s 1s 306866910e-09 0s 0s 306872430e-09 1s 1s 306873110e-09 1s 1s 306877150e-09 0s 0s 306882670e-09 1s 1s 306883390e-09 1s 1s 306887390e-09 0s 0s 306892910e-09 1s 1s 306893670e-09 1s 1s 306897630e-09 0s 0s 306903150e-09 1s 1s 306903950e-09 1s 1s 306907870e-09 0s 0s 306913390e-09 1s 1s 306914230e-09 1s 1s 306918110e-09 0s 0s 306923630e-09 1s 1s 306924510e-09 1s 1s 306928350e-09 0s 0s 306933870e-09 1s 1s 306934790e-09 1s 1s 306938590e-09 0s 0s 306944110e-09 1s 1s 306945070e-09 1s 1s 306948830e-09 0s 0s 306954350e-09 1s 1s 306955350e-09 1s 1s 306959070e-09 0s 0s 306964590e-09 1s 1s 306965630e-09 1s 1s 306969310e-09 0s 0s 306974830e-09 1s 1s 306975910e-09 1s 1s 306979550e-09 0s 0s 306985070e-09 1s 1s 306986190e-09 1s 1s 306989790e-09 0s 0s 306995310e-09 1s 1s 306996470e-09 1s 1s 307000030e-09 0s 0s 307005550e-09 1s 1s 307006750e-09 1s 1s 307010270e-09 0s 0s 307015790e-09 1s 1s 307017030e-09 1s 1s 307020510e-09 0s 0s 307026030e-09 1s 1s 307027310e-09 1s 1s 307030750e-09 0s 0s 307036270e-09 1s 1s 307037590e-09 1s 1s 307040990e-09 0s 0s 307046510e-09 1s 1s 307047870e-09 1s 1s 307051230e-09 0s 0s 307056750e-09 1s 1s 307058150e-09 1s 1s 307061470e-09 0s 0s 307066990e-09 1s 1s 307068430e-09 1s 1s 307071710e-09 0s 0s 307077230e-09 1s 1s 307078710e-09 1s 1s 307081950e-09 0s 0s 307087470e-09 1s 1s 307088990e-09 1s 1s 307092190e-09 0s 0s 307097710e-09 1s 1s 307099270e-09 1s 1s 307102430e-09 0s 0s 307107950e-09 1s 1s 307109550e-09 1s 1s 307112670e-09 0s 0s 307118190e-09 1s 1s 307119830e-09 1s 1s 307122910e-09 0s 0s 307128430e-09 1s 1s 307130110e-09 1s 1s 307133150e-09 0s 0s 307138670e-09 1s 1s 307140390e-09 1s 1s 307143390e-09 0s 0s 307148910e-09 1s 1s 307150670e-09 1s 1s 307153630e-09 0s 0s 307159150e-09 1s 1s 307160950e-09 1s 1s 307163870e-09 0s 0s 307169390e-09 1s 1s 307171230e-09 1s 1s 307174110e-09 0s 0s 307179630e-09 1s 1s 307181510e-09 1s 1s 307184350e-09 0s 0s 307189870e-09 1s 1s 307191790e-09 1s 1s 307194590e-09 0s 0s 307200110e-09 1s 1s 307202070e-09 1s 1s 307204830e-09 0s 0s 307210350e-09 1s 1s 307212350e-09 1s 1s 307215070e-09 0s 0s 307220590e-09 1s 1s 307222630e-09 1s 1s 307225310e-09 0s 0s 307230830e-09 1s 1s 307232910e-09 1s 1s 307235550e-09 0s 0s 307241070e-09 1s 1s 307243190e-09 1s 1s 307245790e-09 0s 0s 307251310e-09 1s 1s 307253470e-09 1s 1s 307256030e-09 0s 0s 307261550e-09 1s 1s 307263750e-09 1s 1s 307266270e-09 0s 0s 307271790e-09 1s 1s 307274030e-09 1s 1s 307276510e-09 0s 0s 307282030e-09 1s 1s 307284310e-09 1s 1s 307286750e-09 0s 0s 307292270e-09 1s 1s 307294590e-09 1s 1s 307296990e-09 0s 0s 307302510e-09 1s 1s 307304870e-09 1s 1s 307307230e-09 0s 0s 307312750e-09 1s 1s 307315150e-09 1s 1s 307317470e-09 0s 0s 307322990e-09 1s 1s 307325430e-09 1s 1s 307327710e-09 0s 0s 307333230e-09 1s 1s 307335710e-09 1s 1s 307337950e-09 0s 0s 307343470e-09 1s 1s 307345990e-09 1s 1s 307348190e-09 0s 0s 307353710e-09 1s 1s 307356270e-09 1s 1s 307358430e-09 0s 0s 307363950e-09 1s 1s 307366550e-09 1s 1s 307368670e-09 0s 0s 307374190e-09 1s 1s 307376830e-09 1s 1s 307378910e-09 0s 0s 307384430e-09 1s 1s 307387110e-09 1s 1s 307389150e-09 0s 0s 307394670e-09 1s 1s 307397390e-09 1s 1s 307399390e-09 0s 0s 307404910e-09 1s 1s 307407670e-09 1s 1s 307409630e-09 0s 0s 307415150e-09 1s 1s 307417950e-09 1s 1s 307419870e-09 0s 0s 307425390e-09 1s 1s 307428230e-09 1s 1s 307430110e-09 0s 0s 307435630e-09 1s 1s 307438510e-09 1s 1s 307440350e-09 0s 0s 307445870e-09 1s 1s 307448790e-09 1s 1s 307450590e-09 0s 0s 307456110e-09 1s 1s 307459070e-09 1s 1s 307460830e-09 0s 0s 307466350e-09 1s 1s 307469350e-09 1s 1s 307471070e-09 0s 0s 307476590e-09 1s 1s 307479630e-09 1s 1s 307481310e-09 0s 0s 307486830e-09 1s 1s 307489910e-09 1s 1s 307491550e-09 0s 0s 307497070e-09 1s 1s 307500190e-09 1s 1s 307501790e-09 0s 0s 307507310e-09 1s 1s 307510470e-09 1s 1s 307512030e-09 0s 0s 307517550e-09 1s 1s 307520750e-09 1s 1s 307522270e-09 0s 0s 307527790e-09 1s 1s 307531030e-09 1s 1s 307532510e-09 0s 0s 307538030e-09 1s 1s 307541310e-09 1s 1s 307542750e-09 0s 0s 307548270e-09 1s 1s 307551590e-09 1s 1s 307552990e-09 0s 0s 307558510e-09 1s 1s 307561870e-09 1s 1s 307563230e-09 0s 0s 307568750e-09 1s 1s 307572150e-09 1s 1s 307573470e-09 0s 0s 307578990e-09 1s 1s 307582430e-09 1s 1s 307583710e-09 0s 0s 307589230e-09 1s 1s 307592710e-09 1s 1s 307593950e-09 0s 0s 307599470e-09 1s 1s 307602990e-09 1s 1s 307604190e-09 0s 0s 307609710e-09 1s 1s 307613270e-09 1s 1s 307614430e-09 0s 0s 307619950e-09 1s 1s 307623550e-09 1s 1s 307624670e-09 0s 0s 307630190e-09 1s 1s 307633830e-09 1s 1s 307634910e-09 0s 0s 307640430e-09 1s 1s 307644110e-09 1s 1s 307645150e-09 0s 0s 307650670e-09 1s 1s 307654390e-09 1s 1s 307655390e-09 0s 0s 307660910e-09 1s 1s 307664670e-09 1s 1s 307665630e-09 0s 0s 307671150e-09 1s 1s 307674950e-09 1s 1s 307675870e-09 0s 0s 307681390e-09 1s 1s 307685230e-09 1s 1s 307686110e-09 0s 0s 307691630e-09 1s 1s 307695510e-09 1s 1s 307696350e-09 0s 0s 307701870e-09 1s 1s 307705790e-09 1s 1s 307706590e-09 0s 0s 307712110e-09 1s 1s 307716070e-09 1s 1s 307716830e-09 0s 0s 307722350e-09 1s 1s 307726350e-09 1s 1s 307727070e-09 0s 0s 307732590e-09 1s 1s 307736630e-09 1s 1s 307737310e-09 0s 0s 307742830e-09 1s 1s 307746910e-09 1s 1s 307747550e-09 0s 0s 307753070e-09 1s 1s 307757190e-09 1s 1s 307757790e-09 0s 0s 307763310e-09 1s 1s 307767470e-09 1s 1s 307768030e-09 0s 0s 307773550e-09 1s 1s 307777750e-09 1s 1s 307778270e-09 0s 0s 307783790e-09 1s 1s 307788030e-09 1s 1s 307788510e-09 0s 0s 307794030e-09 1s 1s 307798310e-09 1s 1s 307798750e-09 0s 0s 307804270e-09 1s 1s 307808590e-09 1s 1s 307808990e-09 0s 0s 307814510e-09 1s 1s 307818870e-09 1s 1s 307819230e-09 0s 0s 307824750e-09 1s 1s 307829150e-09 1s 1s 307829470e-09 0s 0s 307834990e-09 1s 1s 307839430e-09 1s 1s 307839710e-09 0s 0s 307845230e-09 1s 1s 307849710e-09 1s 1s 307849950e-09 0s 0s 307855470e-09 1s 1s 307859990e-09 1s 1s 307860190e-09 0s 0s 307865710e-09 1s 1s 307870270e-09 1s 1s 307870430e-09 0s 0s 307875950e-09 1s 1s 307880550e-09 1s 1s 307880670e-09 0s 0s 307886190e-09 1s 1s 307890830e-09 1s 1s 307890910e-09 0s 0s 307896430e-09 1s 1s 307901110e-09 1s 1s 307901150e-09 0s 0s 307906670e-09 1s 1s 307911390e-09 0s 0s 307916910e-09 1s 1s 307921630e-09 0s 0s 307921670e-09 0s 0s 307927150e-09 1s 1s 307931870e-09 0s 0s 307931950e-09 0s 0s 307937390e-09 1s 1s 307942110e-09 0s 0s 307942230e-09 0s 0s 307947630e-09 1s 1s 307952350e-09 0s 0s 307952510e-09 0s 0s 307957870e-09 1s 1s 307962590e-09 0s 0s 307962790e-09 0s 0s 307968110e-09 1s 1s 307972830e-09 0s 0s 307973070e-09 0s 0s 307978350e-09 1s 1s 307983070e-09 0s 0s 307983350e-09 0s 0s 307988590e-09 1s 1s 307993310e-09 0s 0s 307993630e-09 0s 0s 307998830e-09 1s 1s 308003550e-09 0s 0s 308003910e-09 0s 0s 308009070e-09 1s 1s 308013790e-09 0s 0s 308014190e-09 0s 0s 308019310e-09 1s 1s 308024030e-09 0s 0s 308024470e-09 0s 0s 308029550e-09 1s 1s 308034270e-09 0s 0s 308034750e-09 0s 0s 308039790e-09 1s 1s 308044510e-09 0s 0s 308045030e-09 0s 0s 308050030e-09 1s 1s 308054750e-09 0s 0s 308055310e-09 0s 0s 308060270e-09 1s 1s 308064990e-09 0s 0s 308065590e-09 0s 0s 308070510e-09 1s 1s 308075230e-09 0s 0s 308075870e-09 0s 0s 308080750e-09 1s 1s 308085470e-09 0s 0s 308086150e-09 0s 0s 308090990e-09 1s 1s 308095710e-09 0s 0s 308096430e-09 0s 0s 308101230e-09 1s 1s 308105950e-09 0s 0s 308106710e-09 0s 0s 308111470e-09 1s 1s 308116190e-09 0s 0s 308116990e-09 0s 0s 308121710e-09 1s 1s 308126430e-09 0s 0s 308127270e-09 0s 0s 308131950e-09 1s 1s 308136670e-09 0s 0s 308137550e-09 0s 0s 308142190e-09 1s 1s 308146910e-09 0s 0s 308147830e-09 0s 0s 308152430e-09 1s 1s 308157150e-09 0s 0s 308158110e-09 0s 0s 308162670e-09 1s 1s 308167390e-09 0s 0s 308168390e-09 0s 0s 308172910e-09 1s 1s 308177630e-09 0s 0s 308178670e-09 0s 0s 308183150e-09 1s 1s 308187870e-09 0s 0s 308188950e-09 0s 0s 308193390e-09 1s 1s 308198110e-09 0s 0s 308199230e-09 0s 0s 308203630e-09 1s 1s 308208350e-09 0s 0s 308209510e-09 0s 0s 308213870e-09 1s 1s 308218590e-09 0s 0s 308219790e-09 0s 0s 308224110e-09 1s 1s 308228830e-09 0s 0s 308230070e-09 0s 0s 308234350e-09 1s 1s 308239070e-09 0s 0s 308240350e-09 0s 0s 308244590e-09 1s 1s 308249310e-09 0s 0s 308250630e-09 0s 0s 308254830e-09 1s 1s 308259550e-09 0s 0s 308260910e-09 0s 0s 308265070e-09 1s 1s 308269790e-09 0s 0s 308271190e-09 0s 0s 308275310e-09 1s 1s 308280030e-09 0s 0s 308281470e-09 0s 0s 308285550e-09 1s 1s 308290270e-09 0s 0s 308291750e-09 0s 0s 308295790e-09 1s 1s 308300510e-09 0s 0s 308302030e-09 0s 0s 308306030e-09 1s 1s 308310750e-09 0s 0s 308312310e-09 0s 0s 308316270e-09 1s 1s 308320990e-09 0s 0s 308322590e-09 0s 0s 308326510e-09 1s 1s 308331230e-09 0s 0s 308332870e-09 0s 0s 308336750e-09 1s 1s 308341470e-09 0s 0s 308343150e-09 0s 0s 308346990e-09 1s 1s 308351710e-09 0s 0s 308353430e-09 0s 0s 308357230e-09 1s 1s 308361950e-09 0s 0s 308363710e-09 0s 0s 308367470e-09 1s 1s 308372190e-09 0s 0s 308373990e-09 0s 0s 308377710e-09 1s 1s 308382430e-09 0s 0s 308384270e-09 0s 0s 308387950e-09 1s 1s 308392670e-09 0s 0s 308394550e-09 0s 0s 308398190e-09 1s 1s 308402910e-09 0s 0s 308404830e-09 0s 0s 308408430e-09 1s 1s 308413150e-09 0s 0s 308415110e-09 0s 0s 308418670e-09 1s 1s 308423390e-09 0s 0s 308425390e-09 0s 0s 308428910e-09 1s 1s 308433630e-09 0s 0s 308435670e-09 0s 0s 308439150e-09 1s 1s 308443870e-09 0s 0s 308445950e-09 0s 0s 308449390e-09 1s 1s 308454110e-09 0s 0s 308456230e-09 0s 0s 308459630e-09 1s 1s 308464350e-09 0s 0s 308466510e-09 0s 0s 308469870e-09 1s 1s 308474590e-09 0s 0s 308476790e-09 0s 0s 308480110e-09 1s 1s 308484830e-09 0s 0s 308487070e-09 0s 0s 308490350e-09 1s 1s 308495070e-09 0s 0s 308497350e-09 0s 0s 308500590e-09 1s 1s 308505310e-09 0s 0s 308507630e-09 0s 0s 308510830e-09 1s 1s 308515550e-09 0s 0s 308517910e-09 0s 0s 308521070e-09 1s 1s 308525790e-09 0s 0s 308528190e-09 0s 0s 308531310e-09 1s 1s 308536030e-09 0s 0s 308538470e-09 0s 0s 308541550e-09 1s 1s 308546270e-09 0s 0s 308548750e-09 0s 0s 308551790e-09 1s 1s 308556510e-09 0s 0s 308559030e-09 0s 0s 308562030e-09 1s 1s 308566750e-09 0s 0s 308569310e-09 0s 0s 308572270e-09 1s 1s 308576990e-09 0s 0s 308579590e-09 0s 0s 308582510e-09 1s 1s 308587230e-09 0s 0s 308589870e-09 0s 0s 308592750e-09 1s 1s 308597470e-09 0s 0s 308600150e-09 0s 0s 308602990e-09 1s 1s 308607710e-09 0s 0s 308610430e-09 0s 0s 308613230e-09 1s 1s 308617950e-09 0s 0s 308620710e-09 0s 0s 308623470e-09 1s 1s 308628190e-09 0s 0s 308630990e-09 0s 0s 308633710e-09 1s 1s 308638430e-09 0s 0s 308641270e-09 0s 0s 308643950e-09 1s 1s 308648670e-09 0s 0s 308651550e-09 0s 0s 308654190e-09 1s 1s 308658910e-09 0s 0s 308661830e-09 0s 0s 308664430e-09 1s 1s 308669150e-09 0s 0s 308672110e-09 0s 0s 308674670e-09 1s 1s 308679390e-09 0s 0s 308682390e-09 0s 0s 308684910e-09 1s 1s 308689630e-09 0s 0s 308692670e-09 0s 0s 308695150e-09 1s 1s 308699870e-09 0s 0s 308702950e-09 0s 0s 308705390e-09 1s 1s 308710110e-09 0s 0s 308713230e-09 0s 0s 308715630e-09 1s 1s 308720350e-09 0s 0s 308723510e-09 0s 0s 308725870e-09 1s 1s 308730590e-09 0s 0s 308733790e-09 0s 0s 308736110e-09 1s 1s 308740830e-09 0s 0s 308744070e-09 0s 0s 308746350e-09 1s 1s 308751070e-09 0s 0s 308754350e-09 0s 0s 308756590e-09 1s 1s 308761310e-09 0s 0s 308764630e-09 0s 0s 308766830e-09 1s 1s 308771550e-09 0s 0s 308774910e-09 0s 0s 308777070e-09 1s 1s 308781790e-09 0s 0s 308785190e-09 0s 0s 308787310e-09 1s 1s 308792030e-09 0s 0s 308795470e-09 0s 0s 308797550e-09 1s 1s 308802270e-09 0s 0s 308805750e-09 0s 0s 308807790e-09 1s 1s 308812510e-09 0s 0s 308816030e-09 0s 0s 308818030e-09 1s 1s 308822750e-09 0s 0s 308826310e-09 0s 0s 308828270e-09 1s 1s 308832990e-09 0s 0s 308836590e-09 0s 0s 308838510e-09 1s 1s 308843230e-09 0s 0s 308846870e-09 0s 0s 308848750e-09 1s 1s 308853470e-09 0s 0s 308857150e-09 0s 0s 308858990e-09 1s 1s 308863710e-09 0s 0s 308867430e-09 0s 0s 308869230e-09 1s 1s 308873950e-09 0s 0s 308877710e-09 0s 0s 308879470e-09 1s 1s 308884190e-09 0s 0s 308887990e-09 0s 0s 308889710e-09 1s 1s 308894430e-09 0s 0s 308898270e-09 0s 0s 308899950e-09 1s 1s 308904670e-09 0s 0s 308908550e-09 0s 0s 308910190e-09 1s 1s 308914910e-09 0s 0s 308918830e-09 0s 0s 308920430e-09 1s 1s 308925150e-09 0s 0s 308929110e-09 0s 0s 308930670e-09 1s 1s 308935390e-09 0s 0s 308939390e-09 0s 0s 308940910e-09 1s 1s 308945630e-09 0s 0s 308949670e-09 0s 0s 308951150e-09 1s 1s 308955870e-09 0s 0s 308959950e-09 0s 0s 308961390e-09 1s 1s 308966110e-09 0s 0s 308970230e-09 0s 0s 308971630e-09 1s 1s 308976350e-09 0s 0s 308980510e-09 0s 0s 308981870e-09 1s 1s 308986590e-09 0s 0s 308990790e-09 0s 0s 308992110e-09 1s 1s 308996830e-09 0s 0s 309001070e-09 0s 0s 309002350e-09 1s 1s 309007070e-09 0s 0s 309011350e-09 0s 0s 309012590e-09 1s 1s 309017310e-09 0s 0s 309021630e-09 0s 0s 309022830e-09 1s 1s 309027550e-09 0s 0s 309031910e-09 0s 0s 309033070e-09 1s 1s 309037790e-09 0s 0s 309042190e-09 0s 0s 309043310e-09 1s 1s 309048030e-09 0s 0s 309052470e-09 0s 0s 309053550e-09 1s 1s 309058270e-09 0s 0s 309062750e-09 0s 0s 309063790e-09 1s 1s 309068510e-09 0s 0s 309073030e-09 0s 0s 309074030e-09 1s 1s 309078750e-09 0s 0s 309083310e-09 0s 0s 309084270e-09 1s 1s 309088990e-09 0s 0s 309093590e-09 0s 0s 309094510e-09 1s 1s 309099230e-09 0s 0s 309103870e-09 0s 0s 309104750e-09 1s 1s 309109470e-09 0s 0s 309114150e-09 0s 0s 309114990e-09 1s 1s 309119710e-09 0s 0s 309124430e-09 0s 0s 309125230e-09 1s 1s 309129950e-09 0s 0s 309134710e-09 0s 0s 309135470e-09 1s 1s 309140190e-09 0s 0s 309144990e-09 0s 0s 309145710e-09 1s 1s 309150430e-09 0s 0s 309155270e-09 0s 0s 309155950e-09 1s 1s 309160670e-09 0s 0s 309165550e-09 0s 0s 309166190e-09 1s 1s 309170910e-09 0s 0s 309175830e-09 0s 0s 309176430e-09 1s 1s 309181150e-09 0s 0s 309186110e-09 0s 0s 309186670e-09 1s 1s 309191390e-09 0s 0s 309196390e-09 0s 0s 309196910e-09 1s 1s 309201630e-09 0s 0s 309206670e-09 0s 0s 309207150e-09 1s 1s 309211870e-09 0s 0s 309216950e-09 0s 0s 309217390e-09 1s 1s 309222110e-09 0s 0s 309227230e-09 0s 0s 309227630e-09 1s 1s 309232350e-09 0s 0s 309237510e-09 0s 0s 309237870e-09 1s 1s 309242590e-09 0s 0s 309247790e-09 0s 0s 309248110e-09 1s 1s 309252830e-09 0s 0s 309258070e-09 0s 0s 309258350e-09 1s 1s 309263070e-09 0s 0s 309268350e-09 0s 0s 309268590e-09 1s 1s 309273310e-09 0s 0s 309278630e-09 0s 0s 309278830e-09 1s 1s 309283550e-09 0s 0s 309288910e-09 0s 0s 309289070e-09 1s 1s 309293790e-09 0s 0s 309299190e-09 0s 0s 309299310e-09 1s 1s 309304030e-09 0s 0s 309309470e-09 0s 0s 309309550e-09 1s 1s 309314270e-09 0s 0s 309319750e-09 0s 0s 309319790e-09 1s 1s 309324510e-09 0s 0s 309330030e-09 1s 1s 309330070e-09 1s 1s 309334790e-09 0s 0s 309340270e-09 1s 1s 309340350e-09 1s 1s 309345030e-09 0s 0s 309350510e-09 1s 1s 309350630e-09 1s 1s 309355270e-09 0s 0s 309360750e-09 1s 1s 309360910e-09 1s 1s 309365510e-09 0s 0s 309370990e-09 1s 1s 309371190e-09 1s 1s 309375750e-09 0s 0s 309381230e-09 1s 1s 309381470e-09 1s 1s 309385990e-09 0s 0s 309391470e-09 1s 1s 309391750e-09 1s 1s 309396230e-09 0s 0s 309401710e-09 1s 1s 309402030e-09 1s 1s 309406470e-09 0s 0s 309411950e-09 1s 1s 309412310e-09 1s 1s 309416710e-09 0s 0s 309422190e-09 1s 1s 309422590e-09 1s 1s 309426950e-09 0s 0s 309432430e-09 1s 1s 309432870e-09 1s 1s 309437190e-09 0s 0s 309442670e-09 1s 1s 309443150e-09 1s 1s 309447430e-09 0s 0s 309452910e-09 1s 1s 309453430e-09 1s 1s 309457670e-09 0s 0s 309463150e-09 1s 1s 309463710e-09 1s 1s 309467910e-09 0s 0s 309473390e-09 1s 1s 309473990e-09 1s 1s 309478150e-09 0s 0s 309483630e-09 1s 1s 309484270e-09 1s 1s 309488390e-09 0s 0s 309493870e-09 1s 1s 309494550e-09 1s 1s 309498630e-09 0s 0s 309504110e-09 1s 1s 309504830e-09 1s 1s 309508870e-09 0s 0s 309514350e-09 1s 1s 309515110e-09 1s 1s 309519110e-09 0s 0s 309524590e-09 1s 1s 309525390e-09 1s 1s 309529350e-09 0s 0s 309534830e-09 1s 1s 309535670e-09 1s 1s 309539590e-09 0s 0s 309545070e-09 1s 1s 309545950e-09 1s 1s 309549830e-09 0s 0s 309555310e-09 1s 1s 309556230e-09 1s 1s 309560070e-09 0s 0s 309565550e-09 1s 1s 309566510e-09 1s 1s 309570310e-09 0s 0s 309575790e-09 1s 1s 309576790e-09 1s 1s 309580550e-09 0s 0s 309586030e-09 1s 1s 309587070e-09 1s 1s 309590790e-09 0s 0s 309596270e-09 1s 1s 309597350e-09 1s 1s 309601030e-09 0s 0s 309606510e-09 1s 1s 309607630e-09 1s 1s 309611270e-09 0s 0s 309616750e-09 1s 1s 309617910e-09 1s 1s 309621510e-09 0s 0s 309626990e-09 1s 1s 309628190e-09 1s 1s 309631750e-09 0s 0s 309637230e-09 1s 1s 309638470e-09 1s 1s 309641990e-09 0s 0s 309647470e-09 1s 1s 309648750e-09 1s 1s 309652230e-09 0s 0s 309657710e-09 1s 1s 309659030e-09 1s 1s 309662470e-09 0s 0s 309667950e-09 1s 1s 309669310e-09 1s 1s 309672710e-09 0s 0s 309678190e-09 1s 1s 309679590e-09 1s 1s 309682950e-09 0s 0s 309688430e-09 1s 1s 309689870e-09 1s 1s 309693190e-09 0s 0s 309698670e-09 1s 1s 309700150e-09 1s 1s 309703430e-09 0s 0s 309708910e-09 1s 1s 309710430e-09 1s 1s 309713670e-09 0s 0s 309719150e-09 1s 1s 309720710e-09 1s 1s 309723910e-09 0s 0s 309729390e-09 1s 1s 309730990e-09 1s 1s 309734150e-09 0s 0s 309739630e-09 1s 1s 309741270e-09 1s 1s 309744390e-09 0s 0s 309749870e-09 1s 1s 309751550e-09 1s 1s 309754630e-09 0s 0s 309760110e-09 1s 1s 309761830e-09 1s 1s 309764870e-09 0s 0s 309770350e-09 1s 1s 309772110e-09 1s 1s 309775110e-09 0s 0s 309780590e-09 1s 1s 309782390e-09 1s 1s 309785350e-09 0s 0s 309790830e-09 1s 1s 309792670e-09 1s 1s 309795590e-09 0s 0s 309801070e-09 1s 1s 309802950e-09 1s 1s 309805830e-09 0s 0s 309811310e-09 1s 1s 309813230e-09 1s 1s 309816070e-09 0s 0s 309821550e-09 1s 1s 309823510e-09 1s 1s 309826310e-09 0s 0s 309831790e-09 1s 1s 309833790e-09 1s 1s 309836550e-09 0s 0s 309842030e-09 1s 1s 309844070e-09 1s 1s 309846790e-09 0s 0s 309852270e-09 1s 1s 309854350e-09 1s 1s 309857030e-09 0s 0s 309862510e-09 1s 1s 309864630e-09 1s 1s 309867270e-09 0s 0s 309872750e-09 1s 1s 309874910e-09 1s 1s 309877510e-09 0s 0s 309882990e-09 1s 1s 309885190e-09 1s 1s 309887750e-09 0s 0s 309893230e-09 1s 1s 309895470e-09 1s 1s 309897990e-09 0s 0s 309903470e-09 1s 1s 309905750e-09 1s 1s 309908230e-09 0s 0s 309913710e-09 1s 1s 309916030e-09 1s 1s 309918470e-09 0s 0s 309923950e-09 1s 1s 309926310e-09 1s 1s 309928710e-09 0s 0s 309934190e-09 1s 1s 309936590e-09 1s 1s 309938950e-09 0s 0s 309944430e-09 1s 1s 309946870e-09 1s 1s 309949190e-09 0s 0s 309954670e-09 1s 1s 309957150e-09 1s 1s 309959430e-09 0s 0s 309964910e-09 1s 1s 309967430e-09 1s 1s 309969670e-09 0s 0s 309975150e-09 1s 1s 309977710e-09 1s 1s 309979910e-09 0s 0s 309985390e-09 1s 1s 309987990e-09 1s 1s 309990150e-09 0s 0s 309995630e-09 1s 1s 309998270e-09 1s 1s 310000390e-09 0s 0s 310005870e-09 1s 1s 310008550e-09 1s 1s 310010630e-09 0s 0s 310016110e-09 1s 1s 310018830e-09 1s 1s 310020870e-09 0s 0s 310026350e-09 1s 1s 310029110e-09 1s 1s 310031110e-09 0s 0s 310036590e-09 1s 1s 310039390e-09 1s 1s 310041350e-09 0s 0s 310046830e-09 1s 1s 310049670e-09 1s 1s 310051590e-09 0s 0s 310057070e-09 1s 1s 310059950e-09 1s 1s 310061830e-09 0s 0s 310067310e-09 1s 1s 310070230e-09 1s 1s 310072070e-09 0s 0s 310077550e-09 1s 1s 310080510e-09 1s 1s 310082310e-09 0s 0s 310087790e-09 1s 1s 310090790e-09 1s 1s 310092550e-09 0s 0s 310098030e-09 1s 1s 310101070e-09 1s 1s 310102790e-09 0s 0s 310108270e-09 1s 1s 310111350e-09 1s 1s 310113030e-09 0s 0s 310118510e-09 1s 1s 310121630e-09 1s 1s 310123270e-09 0s 0s 310128750e-09 1s 1s 310131910e-09 1s 1s 310133510e-09 0s 0s 310138990e-09 1s 1s 310142190e-09 1s 1s 310143750e-09 0s 0s 310149230e-09 1s 1s 310152470e-09 1s 1s 310153990e-09 0s 0s 310159470e-09 1s 1s 310162750e-09 1s 1s 310164230e-09 0s 0s 310169710e-09 1s 1s 310173030e-09 1s 1s 310174470e-09 0s 0s 310179950e-09 1s 1s 310183310e-09 1s 1s 310184710e-09 0s 0s 310190190e-09 1s 1s 310193590e-09 1s 1s 310194950e-09 0s 0s 310200430e-09 1s 1s 310203870e-09 1s 1s 310205190e-09 0s 0s 310210670e-09 1s 1s 310214150e-09 1s 1s 310215430e-09 0s 0s 310220910e-09 1s 1s 310224430e-09 1s 1s 310225670e-09 0s 0s 310231150e-09 1s 1s 310234710e-09 1s 1s 310235910e-09 0s 0s 310241390e-09 1s 1s 310244990e-09 1s 1s 310246150e-09 0s 0s 310251630e-09 1s 1s 310255270e-09 1s 1s 310256390e-09 0s 0s 310261870e-09 1s 1s 310265550e-09 1s 1s 310266630e-09 0s 0s 310272110e-09 1s 1s 310275830e-09 1s 1s 310276870e-09 0s 0s 310282350e-09 1s 1s 310286110e-09 1s 1s 310287110e-09 0s 0s 310292590e-09 1s 1s 310296390e-09 1s 1s 310297350e-09 0s 0s 310302830e-09 1s 1s 310306670e-09 1s 1s 310307590e-09 0s 0s 310313070e-09 1s 1s 310316950e-09 1s 1s 310317830e-09 0s 0s 310323310e-09 1s 1s 310327230e-09 1s 1s 310328070e-09 0s 0s 310333550e-09 1s 1s 310337510e-09 1s 1s 310338310e-09 0s 0s 310343790e-09 1s 1s 310347790e-09 1s 1s 310348550e-09 0s 0s 310354030e-09 1s 1s 310358070e-09 1s 1s 310358790e-09 0s 0s 310364270e-09 1s 1s 310368350e-09 1s 1s 310369030e-09 0s 0s 310374510e-09 1s 1s 310378630e-09 1s 1s 310379270e-09 0s 0s 310384750e-09 1s 1s 310388910e-09 1s 1s 310389510e-09 0s 0s 310394990e-09 1s 1s 310399190e-09 1s 1s 310399750e-09 0s 0s 310405230e-09 1s 1s 310409470e-09 1s 1s 310409990e-09 0s 0s 310415470e-09 1s 1s 310419750e-09 1s 1s 310420230e-09 0s 0s 310425710e-09 1s 1s 310430030e-09 1s 1s 310430470e-09 0s 0s 310435950e-09 1s 1s 310440310e-09 1s 1s 310440710e-09 0s 0s 310446190e-09 1s 1s 310450590e-09 1s 1s 310450950e-09 0s 0s 310456430e-09 1s 1s 310460870e-09 1s 1s 310461190e-09 0s 0s 310466670e-09 1s 1s 310471150e-09 1s 1s 310471430e-09 0s 0s 310476910e-09 1s 1s 310481430e-09 1s 1s 310481670e-09 0s 0s 310487150e-09 1s 1s 310491710e-09 1s 1s 310491910e-09 0s 0s 310497390e-09 1s 1s 310501990e-09 1s 1s 310502150e-09 0s 0s 310507630e-09 1s 1s 310512270e-09 1s 1s 310512390e-09 0s 0s 310517870e-09 1s 1s 310522550e-09 1s 1s 310522630e-09 0s 0s 310528110e-09 1s 1s 310532830e-09 1s 1s 310532870e-09 0s 0s 310538350e-09 1s 1s 310543110e-09 0s 0s 310548590e-09 1s 1s 310553350e-09 0s 0s 310553390e-09 0s 0s 310558830e-09 1s 1s 310563590e-09 0s 0s 310563670e-09 0s 0s 310569070e-09 1s 1s 310573830e-09 0s 0s 310573950e-09 0s 0s 310579310e-09 1s 1s 310584070e-09 0s 0s 310584230e-09 0s 0s 310589550e-09 1s 1s 310594310e-09 0s 0s 310594510e-09 0s 0s 310599790e-09 1s 1s 310604550e-09 0s 0s 310604790e-09 0s 0s 310610030e-09 1s 1s 310614790e-09 0s 0s 310615070e-09 0s 0s 310620270e-09 1s 1s 310625030e-09 0s 0s 310625350e-09 0s 0s 310630510e-09 1s 1s 310635270e-09 0s 0s 310635630e-09 0s 0s 310640750e-09 1s 1s 310645510e-09 0s 0s 310645910e-09 0s 0s 310650990e-09 1s 1s 310655750e-09 0s 0s 310656190e-09 0s 0s 310661230e-09 1s 1s 310665990e-09 0s 0s 310666470e-09 0s 0s 310671470e-09 1s 1s 310676230e-09 0s 0s 310676750e-09 0s 0s 310681710e-09 1s 1s 310686470e-09 0s 0s 310687030e-09 0s 0s 310691950e-09 1s 1s 310696710e-09 0s 0s 310697310e-09 0s 0s 310702190e-09 1s 1s 310706950e-09 0s 0s 310707590e-09 0s 0s 310712430e-09 1s 1s 310717190e-09 0s 0s 310717870e-09 0s 0s 310722670e-09 1s 1s 310727430e-09 0s 0s 310728150e-09 0s 0s 310732910e-09 1s 1s 310737670e-09 0s 0s 310738430e-09 0s 0s 310743150e-09 1s 1s 310747910e-09 0s 0s 310748710e-09 0s 0s 310753390e-09 1s 1s 310758150e-09 0s 0s 310758990e-09 0s 0s 310763630e-09 1s 1s 310768390e-09 0s 0s 310769270e-09 0s 0s 310773870e-09 1s 1s 310778630e-09 0s 0s 310779550e-09 0s 0s 310784110e-09 1s 1s 310788870e-09 0s 0s 310789830e-09 0s 0s 310794350e-09 1s 1s 310799110e-09 0s 0s 310800110e-09 0s 0s 310804590e-09 1s 1s 310809350e-09 0s 0s 310810390e-09 0s 0s 310814830e-09 1s 1s 310819590e-09 0s 0s 310820670e-09 0s 0s 310825070e-09 1s 1s 310829830e-09 0s 0s 310830950e-09 0s 0s 310835310e-09 1s 1s 310840070e-09 0s 0s 310841230e-09 0s 0s 310845550e-09 1s 1s 310850310e-09 0s 0s 310851510e-09 0s 0s 310855790e-09 1s 1s 310860550e-09 0s 0s 310861790e-09 0s 0s 310866030e-09 1s 1s 310870790e-09 0s 0s 310872070e-09 0s 0s 310876270e-09 1s 1s 310881030e-09 0s 0s 310882350e-09 0s 0s 310886510e-09 1s 1s 310891270e-09 0s 0s 310892630e-09 0s 0s 310896750e-09 1s 1s 310901510e-09 0s 0s 310902910e-09 0s 0s 310906990e-09 1s 1s 310911750e-09 0s 0s 310913190e-09 0s 0s 310917230e-09 1s 1s 310921990e-09 0s 0s 310923470e-09 0s 0s 310927470e-09 1s 1s 310932230e-09 0s 0s 310933750e-09 0s 0s 310937710e-09 1s 1s 310942470e-09 0s 0s 310944030e-09 0s 0s 310947950e-09 1s 1s 310952710e-09 0s 0s 310954310e-09 0s 0s 310958190e-09 1s 1s 310962950e-09 0s 0s 310964590e-09 0s 0s 310968430e-09 1s 1s 310973190e-09 0s 0s 310974870e-09 0s 0s 310978670e-09 1s 1s 310983430e-09 0s 0s 310985150e-09 0s 0s 310988910e-09 1s 1s 310993670e-09 0s 0s 310995430e-09 0s 0s 310999150e-09 1s 1s 311003910e-09 0s 0s 311005710e-09 0s 0s 311009390e-09 1s 1s 311014150e-09 0s 0s 311015990e-09 0s 0s 311019630e-09 1s 1s 311024390e-09 0s 0s 311026270e-09 0s 0s 311029870e-09 1s 1s 311034630e-09 0s 0s 311036550e-09 0s 0s 311040110e-09 1s 1s 311044870e-09 0s 0s 311046830e-09 0s 0s 311050350e-09 1s 1s 311055110e-09 0s 0s 311057110e-09 0s 0s 311060590e-09 1s 1s 311065350e-09 0s 0s 311067390e-09 0s 0s 311070830e-09 1s 1s 311075590e-09 0s 0s 311077670e-09 0s 0s 311081070e-09 1s 1s 311085830e-09 0s 0s 311087950e-09 0s 0s 311091310e-09 1s 1s 311096070e-09 0s 0s 311098230e-09 0s 0s 311101550e-09 1s 1s 311106310e-09 0s 0s 311108510e-09 0s 0s 311111790e-09 1s 1s 311116550e-09 0s 0s 311118790e-09 0s 0s 311122030e-09 1s 1s 311126790e-09 0s 0s 311129070e-09 0s 0s 311132270e-09 1s 1s 311137030e-09 0s 0s 311139350e-09 0s 0s 311142510e-09 1s 1s 311147270e-09 0s 0s 311149630e-09 0s 0s 311152750e-09 1s 1s 311157510e-09 0s 0s 311159910e-09 0s 0s 311162990e-09 1s 1s 311167750e-09 0s 0s 311170190e-09 0s 0s 311173230e-09 1s 1s 311177990e-09 0s 0s 311180470e-09 0s 0s 311183470e-09 1s 1s 311188230e-09 0s 0s 311190750e-09 0s 0s 311193710e-09 1s 1s 311198470e-09 0s 0s 311201030e-09 0s 0s 311203950e-09 1s 1s 311208710e-09 0s 0s 311211310e-09 0s 0s 311214190e-09 1s 1s 311218950e-09 0s 0s 311221590e-09 0s 0s 311224430e-09 1s 1s 311229190e-09 0s 0s 311231870e-09 0s 0s 311234670e-09 1s 1s 311239430e-09 0s 0s 311242150e-09 0s 0s 311244910e-09 1s 1s 311249670e-09 0s 0s 311252430e-09 0s 0s 311255150e-09 1s 1s 311259910e-09 0s 0s 311262710e-09 0s 0s 311265390e-09 1s 1s 311270150e-09 0s 0s 311272990e-09 0s 0s 311275630e-09 1s 1s 311280390e-09 0s 0s 311283270e-09 0s 0s 311285870e-09 1s 1s 311290630e-09 0s 0s 311293550e-09 0s 0s 311296110e-09 1s 1s 311300870e-09 0s 0s 311303830e-09 0s 0s 311306350e-09 1s 1s 311311110e-09 0s 0s 311314110e-09 0s 0s 311316590e-09 1s 1s 311321350e-09 0s 0s 311324390e-09 0s 0s 311326830e-09 1s 1s 311331590e-09 0s 0s 311334670e-09 0s 0s 311337070e-09 1s 1s 311341830e-09 0s 0s 311344950e-09 0s 0s 311347310e-09 1s 1s 311352070e-09 0s 0s 311355230e-09 0s 0s 311357550e-09 1s 1s 311362310e-09 0s 0s 311365510e-09 0s 0s 311367790e-09 1s 1s 311372550e-09 0s 0s 311375790e-09 0s 0s 311378030e-09 1s 1s 311382790e-09 0s 0s 311386070e-09 0s 0s 311388270e-09 1s 1s 311393030e-09 0s 0s 311396350e-09 0s 0s 311398510e-09 1s 1s 311403270e-09 0s 0s 311406630e-09 0s 0s 311408750e-09 1s 1s 311413510e-09 0s 0s 311416910e-09 0s 0s 311418990e-09 1s 1s 311423750e-09 0s 0s 311427190e-09 0s 0s 311429230e-09 1s 1s 311433990e-09 0s 0s 311437470e-09 0s 0s 311439470e-09 1s 1s 311444230e-09 0s 0s 311447750e-09 0s 0s 311449710e-09 1s 1s 311454470e-09 0s 0s 311458030e-09 0s 0s 311459950e-09 1s 1s 311464710e-09 0s 0s 311468310e-09 0s 0s 311470190e-09 1s 1s 311474950e-09 0s 0s 311478590e-09 0s 0s 311480430e-09 1s 1s 311485190e-09 0s 0s 311488870e-09 0s 0s 311490670e-09 1s 1s 311495430e-09 0s 0s 311499150e-09 0s 0s 311500910e-09 1s 1s 311505670e-09 0s 0s 311509430e-09 0s 0s 311511150e-09 1s 1s 311515910e-09 0s 0s 311519710e-09 0s 0s 311521390e-09 1s 1s 311526150e-09 0s 0s 311529990e-09 0s 0s 311531630e-09 1s 1s 311536390e-09 0s 0s 311540270e-09 0s 0s 311541870e-09 1s 1s 311546630e-09 0s 0s 311550550e-09 0s 0s 311552110e-09 1s 1s 311556870e-09 0s 0s 311560830e-09 0s 0s 311562350e-09 1s 1s 311567110e-09 0s 0s 311571110e-09 0s 0s 311572590e-09 1s 1s 311577350e-09 0s 0s 311581390e-09 0s 0s 311582830e-09 1s 1s 311587590e-09 0s 0s 311591670e-09 0s 0s 311593070e-09 1s 1s 311597830e-09 0s 0s 311601950e-09 0s 0s 311603310e-09 1s 1s 311608070e-09 0s 0s 311612230e-09 0s 0s 311613550e-09 1s 1s 311618310e-09 0s 0s 311622510e-09 0s 0s 311623790e-09 1s 1s 311628550e-09 0s 0s 311632790e-09 0s 0s 311634030e-09 1s 1s 311638790e-09 0s 0s 311643070e-09 0s 0s 311644270e-09 1s 1s 311649030e-09 0s 0s 311653350e-09 0s 0s 311654510e-09 1s 1s 311659270e-09 0s 0s 311663630e-09 0s 0s 311664750e-09 1s 1s 311669510e-09 0s 0s 311673910e-09 0s 0s 311674990e-09 1s 1s 311679750e-09 0s 0s 311684190e-09 0s 0s 311685230e-09 1s 1s 311689990e-09 0s 0s 311694470e-09 0s 0s 311695470e-09 1s 1s 311700230e-09 0s 0s 311704750e-09 0s 0s 311705710e-09 1s 1s 311710470e-09 0s 0s 311715030e-09 0s 0s 311715950e-09 1s 1s 311720710e-09 0s 0s 311725310e-09 0s 0s 311726190e-09 1s 1s 311730950e-09 0s 0s 311735590e-09 0s 0s 311736430e-09 1s 1s 311741190e-09 0s 0s 311745870e-09 0s 0s 311746670e-09 1s 1s 311751430e-09 0s 0s 311756150e-09 0s 0s 311756910e-09 1s 1s 311761670e-09 0s 0s 311766430e-09 0s 0s 311767150e-09 1s 1s 311771910e-09 0s 0s 311776710e-09 0s 0s 311777390e-09 1s 1s 311782150e-09 0s 0s 311786990e-09 0s 0s 311787630e-09 1s 1s 311792390e-09 0s 0s 311797270e-09 0s 0s 311797870e-09 1s 1s 311802630e-09 0s 0s 311807550e-09 0s 0s 311808110e-09 1s 1s 311812870e-09 0s 0s 311817830e-09 0s 0s 311818350e-09 1s 1s 311823110e-09 0s 0s 311828110e-09 0s 0s 311828590e-09 1s 1s 311833350e-09 0s 0s 311838390e-09 0s 0s 311838830e-09 1s 1s 311843590e-09 0s 0s 311848670e-09 0s 0s 311849070e-09 1s 1s 311853830e-09 0s 0s 311858950e-09 0s 0s 311859310e-09 1s 1s 311864070e-09 0s 0s 311869230e-09 0s 0s 311869550e-09 1s 1s 311874310e-09 0s 0s 311879510e-09 0s 0s 311879790e-09 1s 1s 311884550e-09 0s 0s 311889790e-09 0s 0s 311890030e-09 1s 1s 311894790e-09 0s 0s 311900070e-09 0s 0s 311900270e-09 1s 1s 311905030e-09 0s 0s 311910350e-09 0s 0s 311910510e-09 1s 1s 311915270e-09 0s 0s 311920630e-09 0s 0s 311920750e-09 1s 1s 311925510e-09 0s 0s 311930910e-09 0s 0s 311930990e-09 1s 1s 311935750e-09 0s 0s 311941190e-09 0s 0s 311941230e-09 1s 1s 311945990e-09 0s 0s 311951470e-09 1s 1s 311951510e-09 1s 1s 311956270e-09 0s 0s 311961710e-09 1s 1s 311961790e-09 1s 1s 311966510e-09 0s 0s 311971950e-09 1s 1s 311972070e-09 1s 1s 311976750e-09 0s 0s 311982190e-09 1s 1s 311982350e-09 1s 1s 311986990e-09 0s 0s 311992430e-09 1s 1s 311992630e-09 1s 1s 311997230e-09 0s 0s 312002670e-09 1s 1s 312002910e-09 1s 1s 312007470e-09 0s 0s 312012910e-09 1s 1s 312013190e-09 1s 1s 312017710e-09 0s 0s 312023150e-09 1s 1s 312023470e-09 1s 1s 312027950e-09 0s 0s 312033390e-09 1s 1s 312033750e-09 1s 1s 312038190e-09 0s 0s 312043630e-09 1s 1s 312044030e-09 1s 1s 312048430e-09 0s 0s 312053870e-09 1s 1s 312054310e-09 1s 1s 312058670e-09 0s 0s 312064110e-09 1s 1s 312064590e-09 1s 1s 312068910e-09 0s 0s 312074350e-09 1s 1s 312074870e-09 1s 1s 312079150e-09 0s 0s 312084590e-09 1s 1s 312085150e-09 1s 1s 312089390e-09 0s 0s 312094830e-09 1s 1s 312095430e-09 1s 1s 312099630e-09 0s 0s 312105070e-09 1s 1s 312105710e-09 1s 1s 312109870e-09 0s 0s 312115310e-09 1s 1s 312115990e-09 1s 1s 312120110e-09 0s 0s 312125550e-09 1s 1s 312126270e-09 1s 1s 312130350e-09 0s 0s 312135790e-09 1s 1s 312136550e-09 1s 1s 312140590e-09 0s 0s 312146030e-09 1s 1s 312146830e-09 1s 1s 312150830e-09 0s 0s 312156270e-09 1s 1s 312157110e-09 1s 1s 312161070e-09 0s 0s 312166510e-09 1s 1s 312167390e-09 1s 1s 312171310e-09 0s 0s 312176750e-09 1s 1s 312177670e-09 1s 1s 312181550e-09 0s 0s 312186990e-09 1s 1s 312187950e-09 1s 1s 312191790e-09 0s 0s 312197230e-09 1s 1s 312198230e-09 1s 1s 312202030e-09 0s 0s 312207470e-09 1s 1s 312208510e-09 1s 1s 312212270e-09 0s 0s 312217710e-09 1s 1s 312218790e-09 1s 1s 312222510e-09 0s 0s 312227950e-09 1s 1s 312229070e-09 1s 1s 312232750e-09 0s 0s 312238190e-09 1s 1s 312239350e-09 1s 1s 312242990e-09 0s 0s 312248430e-09 1s 1s 312249630e-09 1s 1s 312253230e-09 0s 0s 312258670e-09 1s 1s 312259910e-09 1s 1s 312263470e-09 0s 0s 312268910e-09 1s 1s 312270190e-09 1s 1s 312273710e-09 0s 0s 312279150e-09 1s 1s 312280470e-09 1s 1s 312283950e-09 0s 0s 312289390e-09 1s 1s 312290750e-09 1s 1s 312294190e-09 0s 0s 312299630e-09 1s 1s 312301030e-09 1s 1s 312304430e-09 0s 0s 312309870e-09 1s 1s 312311310e-09 1s 1s 312314670e-09 0s 0s 312320110e-09 1s 1s 312321590e-09 1s 1s 312324910e-09 0s 0s 312330350e-09 1s 1s 312331870e-09 1s 1s 312335150e-09 0s 0s 312340590e-09 1s 1s 312342150e-09 1s 1s 312345390e-09 0s 0s 312350830e-09 1s 1s 312352430e-09 1s 1s 312355630e-09 0s 0s 312361070e-09 1s 1s 312362710e-09 1s 1s 312365870e-09 0s 0s 312371310e-09 1s 1s 312372990e-09 1s 1s 312376110e-09 0s 0s 312381550e-09 1s 1s 312383270e-09 1s 1s 312386350e-09 0s 0s 312391790e-09 1s 1s 312393550e-09 1s 1s 312396590e-09 0s 0s 312402030e-09 1s 1s 312403830e-09 1s 1s 312406830e-09 0s 0s 312412270e-09 1s 1s 312414110e-09 1s 1s 312417070e-09 0s 0s 312422510e-09 1s 1s 312424390e-09 1s 1s 312427310e-09 0s 0s 312432750e-09 1s 1s 312434670e-09 1s 1s 312437550e-09 0s 0s 312442990e-09 1s 1s 312444950e-09 1s 1s 312447790e-09 0s 0s 312453230e-09 1s 1s 312455230e-09 1s 1s 312458030e-09 0s 0s 312463470e-09 1s 1s 312465510e-09 1s 1s 312468270e-09 0s 0s 312473710e-09 1s 1s 312475790e-09 1s 1s 312478510e-09 0s 0s 312483950e-09 1s 1s 312486070e-09 1s 1s 312488750e-09 0s 0s 312494190e-09 1s 1s 312496350e-09 1s 1s 312498990e-09 0s 0s 312504430e-09 1s 1s 312506630e-09 1s 1s 312509230e-09 0s 0s 312514670e-09 1s 1s 312516910e-09 1s 1s 312519470e-09 0s 0s 312524910e-09 1s 1s 312527190e-09 1s 1s 312529710e-09 0s 0s 312535150e-09 1s 1s 312537470e-09 1s 1s 312539950e-09 0s 0s 312545390e-09 1s 1s 312547750e-09 1s 1s 312550190e-09 0s 0s 312555630e-09 1s 1s 312558030e-09 1s 1s 312560430e-09 0s 0s 312565870e-09 1s 1s 312568310e-09 1s 1s 312570670e-09 0s 0s 312576110e-09 1s 1s 312578590e-09 1s 1s 312580910e-09 0s 0s 312586350e-09 1s 1s 312588870e-09 1s 1s 312591150e-09 0s 0s 312596590e-09 1s 1s 312599150e-09 1s 1s 312601390e-09 0s 0s 312606830e-09 1s 1s 312609430e-09 1s 1s 312611630e-09 0s 0s 312617070e-09 1s 1s 312619710e-09 1s 1s 312621870e-09 0s 0s 312627310e-09 1s 1s 312629990e-09 1s 1s 312632110e-09 0s 0s 312637550e-09 1s 1s 312640270e-09 1s 1s 312642350e-09 0s 0s 312647790e-09 1s 1s 312650550e-09 1s 1s 312652590e-09 0s 0s 312658030e-09 1s 1s 312660830e-09 1s 1s 312662830e-09 0s 0s 312668270e-09 1s 1s 312671110e-09 1s 1s 312673070e-09 0s 0s 312678510e-09 1s 1s 312681390e-09 1s 1s 312683310e-09 0s 0s 312688750e-09 1s 1s 312691670e-09 1s 1s 312693550e-09 0s 0s 312698990e-09 1s 1s 312701950e-09 1s 1s 312703790e-09 0s 0s 312709230e-09 1s 1s 312712230e-09 1s 1s 312714030e-09 0s 0s 312719470e-09 1s 1s 312722510e-09 1s 1s 312724270e-09 0s 0s 312729710e-09 1s 1s 312732790e-09 1s 1s 312734510e-09 0s 0s 312739950e-09 1s 1s 312743070e-09 1s 1s 312744750e-09 0s 0s 312750190e-09 1s 1s 312753350e-09 1s 1s 312754990e-09 0s 0s 312760430e-09 1s 1s 312763630e-09 1s 1s 312765230e-09 0s 0s 312770670e-09 1s 1s 312773910e-09 1s 1s 312775470e-09 0s 0s 312780910e-09 1s 1s 312784190e-09 1s 1s 312785710e-09 0s 0s 312791150e-09 1s 1s 312794470e-09 1s 1s 312795950e-09 0s 0s 312801390e-09 1s 1s 312804750e-09 1s 1s 312806190e-09 0s 0s 312811630e-09 1s 1s 312815030e-09 1s 1s 312816430e-09 0s 0s 312821870e-09 1s 1s 312825310e-09 1s 1s 312826670e-09 0s 0s 312832110e-09 1s 1s 312835590e-09 1s 1s 312836910e-09 0s 0s 312842350e-09 1s 1s 312845870e-09 1s 1s 312847150e-09 0s 0s 312852590e-09 1s 1s 312856150e-09 1s 1s 312857390e-09 0s 0s 312862830e-09 1s 1s 312866430e-09 1s 1s 312867630e-09 0s 0s 312873070e-09 1s 1s 312876710e-09 1s 1s 312877870e-09 0s 0s 312883310e-09 1s 1s 312886990e-09 1s 1s 312888110e-09 0s 0s 312893550e-09 1s 1s 312897270e-09 1s 1s 312898350e-09 0s 0s 312903790e-09 1s 1s 312907550e-09 1s 1s 312908590e-09 0s 0s 312914030e-09 1s 1s 312917830e-09 1s 1s 312918830e-09 0s 0s 312924270e-09 1s 1s 312928110e-09 1s 1s 312929070e-09 0s 0s 312934510e-09 1s 1s 312938390e-09 1s 1s 312939310e-09 0s 0s 312944750e-09 1s 1s 312948670e-09 1s 1s 312949550e-09 0s 0s 312954990e-09 1s 1s 312958950e-09 1s 1s 312959790e-09 0s 0s 312965230e-09 1s 1s 312969230e-09 1s 1s 312970030e-09 0s 0s 312975470e-09 1s 1s 312979510e-09 1s 1s 312980270e-09 0s 0s 312985710e-09 1s 1s 312989790e-09 1s 1s 312990510e-09 0s 0s 312995950e-09 1s 1s 313000070e-09 1s 1s 313000750e-09 0s 0s 313006190e-09 1s 1s 313010350e-09 1s 1s 313010990e-09 0s 0s 313016430e-09 1s 1s 313020630e-09 1s 1s 313021230e-09 0s 0s 313026670e-09 1s 1s 313030910e-09 1s 1s 313031470e-09 0s 0s 313036910e-09 1s 1s 313041190e-09 1s 1s 313041710e-09 0s 0s 313047150e-09 1s 1s 313051470e-09 1s 1s 313051950e-09 0s 0s 313057390e-09 1s 1s 313061750e-09 1s 1s 313062190e-09 0s 0s 313067630e-09 1s 1s 313072030e-09 1s 1s 313072430e-09 0s 0s 313077870e-09 1s 1s 313082310e-09 1s 1s 313082670e-09 0s 0s 313088110e-09 1s 1s 313092590e-09 1s 1s 313092910e-09 0s 0s 313098350e-09 1s 1s 313102870e-09 1s 1s 313103150e-09 0s 0s 313108590e-09 1s 1s 313113150e-09 1s 1s 313113390e-09 0s 0s 313118830e-09 1s 1s 313123430e-09 1s 1s 313123630e-09 0s 0s 313129070e-09 1s 1s 313133710e-09 1s 1s 313133870e-09 0s 0s 313139310e-09 1s 1s 313143990e-09 1s 1s 313144110e-09 0s 0s 313149550e-09 1s 1s 313154270e-09 1s 1s 313154350e-09 0s 0s 313159790e-09 1s 1s 313164550e-09 1s 1s 313164590e-09 0s 0s 313170030e-09 1s 1s 313174830e-09 0s 0s 313180270e-09 1s 1s 313185070e-09 0s 0s 313185110e-09 0s 0s 313190510e-09 1s 1s 313195310e-09 0s 0s 313195390e-09 0s 0s 313200750e-09 1s 1s 313205550e-09 0s 0s 313205670e-09 0s 0s 313210990e-09 1s 1s 313215790e-09 0s 0s 313215950e-09 0s 0s 313221230e-09 1s 1s 313226030e-09 0s 0s 313226230e-09 0s 0s 313231470e-09 1s 1s 313236270e-09 0s 0s 313236510e-09 0s 0s 313241710e-09 1s 1s 313246510e-09 0s 0s 313246790e-09 0s 0s 313251950e-09 1s 1s 313256750e-09 0s 0s 313257070e-09 0s 0s 313262190e-09 1s 1s 313266990e-09 0s 0s 313267350e-09 0s 0s 313272430e-09 1s 1s 313277230e-09 0s 0s 313277630e-09 0s 0s 313282670e-09 1s 1s 313287470e-09 0s 0s 313287910e-09 0s 0s 313292910e-09 1s 1s 313297710e-09 0s 0s 313298190e-09 0s 0s 313303150e-09 1s 1s 313307950e-09 0s 0s 313308470e-09 0s 0s 313313390e-09 1s 1s 313318190e-09 0s 0s 313318750e-09 0s 0s 313323630e-09 1s 1s 313328430e-09 0s 0s 313329030e-09 0s 0s 313333870e-09 1s 1s 313338670e-09 0s 0s 313339310e-09 0s 0s 313344110e-09 1s 1s 313348910e-09 0s 0s 313349590e-09 0s 0s 313354350e-09 1s 1s 313359150e-09 0s 0s 313359870e-09 0s 0s 313364590e-09 1s 1s 313369390e-09 0s 0s 313370150e-09 0s 0s 313374830e-09 1s 1s 313379630e-09 0s 0s 313380430e-09 0s 0s 313385070e-09 1s 1s 313389870e-09 0s 0s 313390710e-09 0s 0s 313395310e-09 1s 1s 313400110e-09 0s 0s 313400990e-09 0s 0s 313405550e-09 1s 1s 313410350e-09 0s 0s 313411270e-09 0s 0s 313415790e-09 1s 1s 313420590e-09 0s 0s 313421550e-09 0s 0s 313426030e-09 1s 1s 313430830e-09 0s 0s 313431830e-09 0s 0s 313436270e-09 1s 1s 313441070e-09 0s 0s 313442110e-09 0s 0s 313446510e-09 1s 1s 313451310e-09 0s 0s 313452390e-09 0s 0s 313456750e-09 1s 1s 313461550e-09 0s 0s 313462670e-09 0s 0s 313466990e-09 1s 1s 313471790e-09 0s 0s 313472950e-09 0s 0s 313477230e-09 1s 1s 313482030e-09 0s 0s 313483230e-09 0s 0s 313487470e-09 1s 1s 313492270e-09 0s 0s 313493510e-09 0s 0s 313497710e-09 1s 1s 313502510e-09 0s 0s 313503790e-09 0s 0s 313507950e-09 1s 1s 313512750e-09 0s 0s 313514070e-09 0s 0s 313518190e-09 1s 1s 313522990e-09 0s 0s 313524350e-09 0s 0s 313528430e-09 1s 1s 313533230e-09 0s 0s 313534630e-09 0s 0s 313538670e-09 1s 1s 313543470e-09 0s 0s 313544910e-09 0s 0s 313548910e-09 1s 1s 313553710e-09 0s 0s 313555190e-09 0s 0s 313559150e-09 1s 1s 313563950e-09 0s 0s 313565470e-09 0s 0s 313569390e-09 1s 1s 313574190e-09 0s 0s 313575750e-09 0s 0s 313579630e-09 1s 1s 313584430e-09 0s 0s 313586030e-09 0s 0s 313589870e-09 1s 1s 313594670e-09 0s 0s 313596310e-09 0s 0s 313600110e-09 1s 1s 313604910e-09 0s 0s 313606590e-09 0s 0s 313610350e-09 1s 1s 313615150e-09 0s 0s 313616870e-09 0s 0s 313620590e-09 1s 1s 313625390e-09 0s 0s 313627150e-09 0s 0s 313630830e-09 1s 1s 313635630e-09 0s 0s 313637430e-09 0s 0s 313641070e-09 1s 1s 313645870e-09 0s 0s 313647710e-09 0s 0s 313651310e-09 1s 1s 313656110e-09 0s 0s 313657990e-09 0s 0s 313661550e-09 1s 1s 313666350e-09 0s 0s 313668270e-09 0s 0s 313671790e-09 1s 1s 313676590e-09 0s 0s 313678550e-09 0s 0s 313682030e-09 1s 1s 313686830e-09 0s 0s 313688830e-09 0s 0s 313692270e-09 1s 1s 313697070e-09 0s 0s 313699110e-09 0s 0s 313702510e-09 1s 1s 313707310e-09 0s 0s 313709390e-09 0s 0s 313712750e-09 1s 1s 313717550e-09 0s 0s 313719670e-09 0s 0s 313722990e-09 1s 1s 313727790e-09 0s 0s 313729950e-09 0s 0s 313733230e-09 1s 1s 313738030e-09 0s 0s 313740230e-09 0s 0s 313743470e-09 1s 1s 313748270e-09 0s 0s 313750510e-09 0s 0s 313753710e-09 1s 1s 313758510e-09 0s 0s 313760790e-09 0s 0s 313763950e-09 1s 1s 313768750e-09 0s 0s 313771070e-09 0s 0s 313774190e-09 1s 1s 313778990e-09 0s 0s 313781350e-09 0s 0s 313784430e-09 1s 1s 313789230e-09 0s 0s 313791630e-09 0s 0s 313794670e-09 1s 1s 313799470e-09 0s 0s 313801910e-09 0s 0s 313804910e-09 1s 1s 313809710e-09 0s 0s 313812190e-09 0s 0s 313815150e-09 1s 1s 313819950e-09 0s 0s 313822470e-09 0s 0s 313825390e-09 1s 1s 313830190e-09 0s 0s 313832750e-09 0s 0s 313835630e-09 1s 1s 313840430e-09 0s 0s 313843030e-09 0s 0s 313845870e-09 1s 1s 313850670e-09 0s 0s 313853310e-09 0s 0s 313856110e-09 1s 1s 313860910e-09 0s 0s 313863590e-09 0s 0s 313866350e-09 1s 1s 313871150e-09 0s 0s 313873870e-09 0s 0s 313876590e-09 1s 1s 313881390e-09 0s 0s 313884150e-09 0s 0s 313886830e-09 1s 1s 313891630e-09 0s 0s 313894430e-09 0s 0s 313897070e-09 1s 1s 313901870e-09 0s 0s 313904710e-09 0s 0s 313907310e-09 1s 1s 313912110e-09 0s 0s 313914990e-09 0s 0s 313917550e-09 1s 1s 313922350e-09 0s 0s 313925270e-09 0s 0s 313927790e-09 1s 1s 313932590e-09 0s 0s 313935550e-09 0s 0s 313938030e-09 1s 1s 313942830e-09 0s 0s 313945830e-09 0s 0s 313948270e-09 1s 1s 313953070e-09 0s 0s 313956110e-09 0s 0s 313958510e-09 1s 1s 313963310e-09 0s 0s 313966390e-09 0s 0s 313968750e-09 1s 1s 313973550e-09 0s 0s 313976670e-09 0s 0s 313978990e-09 1s 1s 313983790e-09 0s 0s 313986950e-09 0s 0s 313989230e-09 1s 1s 313994030e-09 0s 0s 313997230e-09 0s 0s 313999470e-09 1s 1s 314004270e-09 0s 0s 314007510e-09 0s 0s 314009710e-09 1s 1s 314014510e-09 0s 0s 314017790e-09 0s 0s 314019950e-09 1s 1s 314024750e-09 0s 0s 314028070e-09 0s 0s 314030190e-09 1s 1s 314034990e-09 0s 0s 314038350e-09 0s 0s 314040430e-09 1s 1s 314045230e-09 0s 0s 314048630e-09 0s 0s 314050670e-09 1s 1s 314055470e-09 0s 0s 314058910e-09 0s 0s 314060910e-09 1s 1s 314065710e-09 0s 0s 314069190e-09 0s 0s 314071150e-09 1s 1s 314075950e-09 0s 0s 314079470e-09 0s 0s 314081390e-09 1s 1s 314086190e-09 0s 0s 314089750e-09 0s 0s 314091630e-09 1s 1s 314096430e-09 0s 0s 314100030e-09 0s 0s 314101870e-09 1s 1s 314106670e-09 0s 0s 314110310e-09 0s 0s 314112110e-09 1s 1s 314116910e-09 0s 0s 314120590e-09 0s 0s 314122350e-09 1s 1s 314127150e-09 0s 0s 314130870e-09 0s 0s 314132590e-09 1s 1s 314137390e-09 0s 0s 314141150e-09 0s 0s 314142830e-09 1s 1s 314147630e-09 0s 0s 314151430e-09 0s 0s 314153070e-09 1s 1s 314157870e-09 0s 0s 314161710e-09 0s 0s 314163310e-09 1s 1s 314168110e-09 0s 0s 314171990e-09 0s 0s 314173550e-09 1s 1s 314178350e-09 0s 0s 314182270e-09 0s 0s 314183790e-09 1s 1s 314188590e-09 0s 0s 314192550e-09 0s 0s 314194030e-09 1s 1s 314198830e-09 0s 0s 314202830e-09 0s 0s 314204270e-09 1s 1s 314209070e-09 0s 0s 314213110e-09 0s 0s 314214510e-09 1s 1s 314219310e-09 0s 0s 314223390e-09 0s 0s 314224750e-09 1s 1s 314229550e-09 0s 0s 314233670e-09 0s 0s 314234990e-09 1s 1s 314239790e-09 0s 0s 314243950e-09 0s 0s 314245230e-09 1s 1s 314250030e-09 0s 0s 314254230e-09 0s 0s 314255470e-09 1s 1s 314260270e-09 0s 0s 314264510e-09 0s 0s 314265710e-09 1s 1s 314270510e-09 0s 0s 314274790e-09 0s 0s 314275950e-09 1s 1s 314280750e-09 0s 0s 314285070e-09 0s 0s 314286190e-09 1s 1s 314290990e-09 0s 0s 314295350e-09 0s 0s 314296430e-09 1s 1s 314301230e-09 0s 0s 314305630e-09 0s 0s 314306670e-09 1s 1s 314311470e-09 0s 0s 314315910e-09 0s 0s 314316910e-09 1s 1s 314321710e-09 0s 0s 314326190e-09 0s 0s 314327150e-09 1s 1s 314331950e-09 0s 0s 314336470e-09 0s 0s 314337390e-09 1s 1s 314342190e-09 0s 0s 314346750e-09 0s 0s 314347630e-09 1s 1s 314352430e-09 0s 0s 314357030e-09 0s 0s 314357870e-09 1s 1s 314362670e-09 0s 0s 314367310e-09 0s 0s 314368110e-09 1s 1s 314372910e-09 0s 0s 314377590e-09 0s 0s 314378350e-09 1s 1s 314383150e-09 0s 0s 314387870e-09 0s 0s 314388590e-09 1s 1s 314393390e-09 0s 0s 314398150e-09 0s 0s 314398830e-09 1s 1s 314403630e-09 0s 0s 314408430e-09 0s 0s 314409070e-09 1s 1s 314413870e-09 0s 0s 314418710e-09 0s 0s 314419310e-09 1s 1s 314424110e-09 0s 0s 314428990e-09 0s 0s 314429550e-09 1s 1s 314434350e-09 0s 0s 314439270e-09 0s 0s 314439790e-09 1s 1s 314444590e-09 0s 0s 314449550e-09 0s 0s 314450030e-09 1s 1s 314454830e-09 0s 0s 314459830e-09 0s 0s 314460270e-09 1s 1s 314465070e-09 0s 0s 314470110e-09 0s 0s 314470510e-09 1s 1s 314475310e-09 0s 0s 314480390e-09 0s 0s 314480750e-09 1s 1s 314485550e-09 0s 0s 314490670e-09 0s 0s 314490990e-09 1s 1s 314495790e-09 0s 0s 314500950e-09 0s 0s 314501230e-09 1s 1s 314506030e-09 0s 0s 314511230e-09 0s 0s 314511470e-09 1s 1s 314516270e-09 0s 0s 314521510e-09 0s 0s 314521710e-09 1s 1s 314526510e-09 0s 0s 314531790e-09 0s 0s 314531950e-09 1s 1s 314536750e-09 0s 0s 314542070e-09 0s 0s 314542190e-09 1s 1s 314546990e-09 0s 0s 314552350e-09 0s 0s 314552430e-09 1s 1s 314557230e-09 0s 0s 314562630e-09 0s 0s 314562670e-09 1s 1s 314567470e-09 0s 0s 314572910e-09 1s 1s 314572950e-09 1s 1s 314577750e-09 0s 0s 314583150e-09 1s 1s 314583230e-09 1s 1s 314587990e-09 0s 0s 314593390e-09 1s 1s 314593510e-09 1s 1s 314598230e-09 0s 0s 314603630e-09 1s 1s 314603790e-09 1s 1s 314608470e-09 0s 0s 314613870e-09 1s 1s 314614070e-09 1s 1s 314618710e-09 0s 0s 314624110e-09 1s 1s 314624350e-09 1s 1s 314628950e-09 0s 0s 314634350e-09 1s 1s 314634630e-09 1s 1s 314639190e-09 0s 0s 314644590e-09 1s 1s 314644910e-09 1s 1s 314649430e-09 0s 0s 314654830e-09 1s 1s 314655190e-09 1s 1s 314659670e-09 0s 0s 314665070e-09 1s 1s 314665470e-09 1s 1s 314669910e-09 0s 0s 314675310e-09 1s 1s 314675750e-09 1s 1s 314680150e-09 0s 0s 314685550e-09 1s 1s 314686030e-09 1s 1s 314690390e-09 0s 0s 314695790e-09 1s 1s 314696310e-09 1s 1s 314700630e-09 0s 0s 314706030e-09 1s 1s 314706590e-09 1s 1s 314710870e-09 0s 0s 314716270e-09 1s 1s 314716870e-09 1s 1s 314721110e-09 0s 0s 314726510e-09 1s 1s 314727150e-09 1s 1s 314731350e-09 0s 0s 314736750e-09 1s 1s 314737430e-09 1s 1s 314741590e-09 0s 0s 314746990e-09 1s 1s 314747710e-09 1s 1s 314751830e-09 0s 0s 314757230e-09 1s 1s 314757990e-09 1s 1s 314762070e-09 0s 0s 314767470e-09 1s 1s 314768270e-09 1s 1s 314772310e-09 0s 0s 314777710e-09 1s 1s 314778550e-09 1s 1s 314782550e-09 0s 0s 314787950e-09 1s 1s 314788830e-09 1s 1s 314792790e-09 0s 0s 314798190e-09 1s 1s 314799110e-09 1s 1s 314803030e-09 0s 0s 314808430e-09 1s 1s 314809390e-09 1s 1s 314813270e-09 0s 0s 314818670e-09 1s 1s 314819670e-09 1s 1s 314823510e-09 0s 0s 314828910e-09 1s 1s 314829950e-09 1s 1s 314833750e-09 0s 0s 314839150e-09 1s 1s 314840230e-09 1s 1s 314843990e-09 0s 0s 314849390e-09 1s 1s 314850510e-09 1s 1s 314854230e-09 0s 0s 314859630e-09 1s 1s 314860790e-09 1s 1s 314864470e-09 0s 0s 314869870e-09 1s 1s 314871070e-09 1s 1s 314874710e-09 0s 0s 314880110e-09 1s 1s 314881350e-09 1s 1s 314884950e-09 0s 0s 314890350e-09 1s 1s 314891630e-09 1s 1s 314895190e-09 0s 0s 314900590e-09 1s 1s 314901910e-09 1s 1s 314905430e-09 0s 0s 314910830e-09 1s 1s 314912190e-09 1s 1s 314915670e-09 0s 0s 314921070e-09 1s 1s 314922470e-09 1s 1s 314925910e-09 0s 0s 314931310e-09 1s 1s 314932750e-09 1s 1s 314936150e-09 0s 0s 314941550e-09 1s 1s 314943030e-09 1s 1s 314946390e-09 0s 0s 314951790e-09 1s 1s 314953310e-09 1s 1s 314956630e-09 0s 0s 314962030e-09 1s 1s 314963590e-09 1s 1s 314966870e-09 0s 0s 314972270e-09 1s 1s 314973870e-09 1s 1s 314977110e-09 0s 0s 314982510e-09 1s 1s 314984150e-09 1s 1s 314987350e-09 0s 0s 314992750e-09 1s 1s 314994430e-09 1s 1s 314997590e-09 0s 0s 315002990e-09 1s 1s 315004710e-09 1s 1s 315007830e-09 0s 0s 315013230e-09 1s 1s 315014990e-09 1s 1s 315018070e-09 0s 0s 315023470e-09 1s 1s 315025270e-09 1s 1s 315028310e-09 0s 0s 315033710e-09 1s 1s 315035550e-09 1s 1s 315038550e-09 0s 0s 315043950e-09 1s 1s 315045830e-09 1s 1s 315048790e-09 0s 0s 315054190e-09 1s 1s 315056110e-09 1s 1s 315059030e-09 0s 0s 315064430e-09 1s 1s 315066390e-09 1s 1s 315069270e-09 0s 0s 315074670e-09 1s 1s 315076670e-09 1s 1s 315079510e-09 0s 0s 315084910e-09 1s 1s 315086950e-09 1s 1s 315089750e-09 0s 0s 315095150e-09 1s 1s 315097230e-09 1s 1s 315099990e-09 0s 0s 315105390e-09 1s 1s 315107510e-09 1s 1s 315110230e-09 0s 0s 315115630e-09 1s 1s 315117790e-09 1s 1s 315120470e-09 0s 0s 315125870e-09 1s 1s 315128070e-09 1s 1s 315130710e-09 0s 0s 315136110e-09 1s 1s 315138350e-09 1s 1s 315140950e-09 0s 0s 315146350e-09 1s 1s 315148630e-09 1s 1s 315151190e-09 0s 0s 315156590e-09 1s 1s 315158910e-09 1s 1s 315161430e-09 0s 0s 315166830e-09 1s 1s 315169190e-09 1s 1s 315171670e-09 0s 0s 315177070e-09 1s 1s 315179470e-09 1s 1s 315181910e-09 0s 0s 315187310e-09 1s 1s 315189750e-09 1s 1s 315192150e-09 0s 0s 315197550e-09 1s 1s 315200030e-09 1s 1s 315202390e-09 0s 0s 315207790e-09 1s 1s 315210310e-09 1s 1s 315212630e-09 0s 0s 315218030e-09 1s 1s 315220590e-09 1s 1s 315222870e-09 0s 0s 315228270e-09 1s 1s 315230870e-09 1s 1s 315233110e-09 0s 0s 315238510e-09 1s 1s 315241150e-09 1s 1s 315243350e-09 0s 0s 315248750e-09 1s 1s 315251430e-09 1s 1s 315253590e-09 0s 0s 315258990e-09 1s 1s 315261710e-09 1s 1s 315263830e-09 0s 0s 315269230e-09 1s 1s 315271990e-09 1s 1s 315274070e-09 0s 0s 315279470e-09 1s 1s 315282270e-09 1s 1s 315284310e-09 0s 0s 315289710e-09 1s 1s 315292550e-09 1s 1s 315294550e-09 0s 0s 315299950e-09 1s 1s 315302830e-09 1s 1s 315304790e-09 0s 0s 315310190e-09 1s 1s 315313110e-09 1s 1s 315315030e-09 0s 0s 315320430e-09 1s 1s 315323390e-09 1s 1s 315325270e-09 0s 0s 315330670e-09 1s 1s 315333670e-09 1s 1s 315335510e-09 0s 0s 315340910e-09 1s 1s 315343950e-09 1s 1s 315345750e-09 0s 0s 315351150e-09 1s 1s 315354230e-09 1s 1s 315355990e-09 0s 0s 315361390e-09 1s 1s 315364510e-09 1s 1s 315366230e-09 0s 0s 315371630e-09 1s 1s 315374790e-09 1s 1s 315376470e-09 0s 0s 315381870e-09 1s 1s 315385070e-09 1s 1s 315386710e-09 0s 0s 315392110e-09 1s 1s 315395350e-09 1s 1s 315396950e-09 0s 0s 315402350e-09 1s 1s 315405630e-09 1s 1s 315407190e-09 0s 0s 315412590e-09 1s 1s 315415910e-09 1s 1s 315417430e-09 0s 0s 315422830e-09 1s 1s 315426190e-09 1s 1s 315427670e-09 0s 0s 315433070e-09 1s 1s 315436470e-09 1s 1s 315437910e-09 0s 0s 315443310e-09 1s 1s 315446750e-09 1s 1s 315448150e-09 0s 0s 315453550e-09 1s 1s 315457030e-09 1s 1s 315458390e-09 0s 0s 315463790e-09 1s 1s 315467310e-09 1s 1s 315468630e-09 0s 0s 315474030e-09 1s 1s 315477590e-09 1s 1s 315478870e-09 0s 0s 315484270e-09 1s 1s 315487870e-09 1s 1s 315489110e-09 0s 0s 315494510e-09 1s 1s 315498150e-09 1s 1s 315499350e-09 0s 0s 315504750e-09 1s 1s 315508430e-09 1s 1s 315509590e-09 0s 0s 315514990e-09 1s 1s 315518710e-09 1s 1s 315519830e-09 0s 0s 315525230e-09 1s 1s 315528990e-09 1s 1s 315530070e-09 0s 0s 315535470e-09 1s 1s 315539270e-09 1s 1s 315540310e-09 0s 0s 315545710e-09 1s 1s 315549550e-09 1s 1s 315550550e-09 0s 0s 315555950e-09 1s 1s 315559830e-09 1s 1s 315560790e-09 0s 0s 315566190e-09 1s 1s 315570110e-09 1s 1s 315571030e-09 0s 0s 315576430e-09 1s 1s 315580390e-09 1s 1s 315581270e-09 0s 0s 315586670e-09 1s 1s 315590670e-09 1s 1s 315591510e-09 0s 0s 315596910e-09 1s 1s 315600950e-09 1s 1s 315601750e-09 0s 0s 315607150e-09 1s 1s 315611230e-09 1s 1s 315611990e-09 0s 0s 315617390e-09 1s 1s 315621510e-09 1s 1s 315622230e-09 0s 0s 315627630e-09 1s 1s 315631790e-09 1s 1s 315632470e-09 0s 0s 315637870e-09 1s 1s 315642070e-09 1s 1s 315642710e-09 0s 0s 315648110e-09 1s 1s 315652350e-09 1s 1s 315652950e-09 0s 0s 315658350e-09 1s 1s 315662630e-09 1s 1s 315663190e-09 0s 0s 315668590e-09 1s 1s 315672910e-09 1s 1s 315673430e-09 0s 0s 315678830e-09 1s 1s 315683190e-09 1s 1s 315683670e-09 0s 0s 315689070e-09 1s 1s 315693470e-09 1s 1s 315693910e-09 0s 0s 315699310e-09 1s 1s 315703750e-09 1s 1s 315704150e-09 0s 0s 315709550e-09 1s 1s 315714030e-09 1s 1s 315714390e-09 0s 0s 315719790e-09 1s 1s 315724310e-09 1s 1s 315724630e-09 0s 0s 315730030e-09 1s 1s 315734590e-09 1s 1s 315734870e-09 0s 0s 315740270e-09 1s 1s 315744870e-09 1s 1s 315745110e-09 0s 0s 315750510e-09 1s 1s 315755150e-09 1s 1s 315755350e-09 0s 0s 315760750e-09 1s 1s 315765430e-09 1s 1s 315765590e-09 0s 0s 315770990e-09 1s 1s 315775710e-09 1s 1s 315775830e-09 0s 0s 315781230e-09 1s 1s 315785990e-09 1s 1s 315786070e-09 0s 0s 315791470e-09 1s 1s 315796270e-09 1s 1s 315796310e-09 0s 0s 315801710e-09 1s 1s 315806550e-09 0s 0s 315811950e-09 1s 1s 315816790e-09 0s 0s 315816830e-09 0s 0s 315822190e-09 1s 1s 315827030e-09 0s 0s 315827110e-09 0s 0s 315832430e-09 1s 1s 315837270e-09 0s 0s 315837390e-09 0s 0s 315842670e-09 1s 1s 315847510e-09 0s 0s 315847670e-09 0s 0s 315852910e-09 1s 1s 315857750e-09 0s 0s 315857950e-09 0s 0s 315863150e-09 1s 1s 315867990e-09 0s 0s 315868230e-09 0s 0s 315873390e-09 1s 1s 315878230e-09 0s 0s 315878510e-09 0s 0s 315883630e-09 1s 1s 315888470e-09 0s 0s 315888790e-09 0s 0s 315893870e-09 1s 1s 315898710e-09 0s 0s 315899070e-09 0s 0s 315904110e-09 1s 1s 315908950e-09 0s 0s 315909350e-09 0s 0s 315914350e-09 1s 1s 315919190e-09 0s 0s 315919630e-09 0s 0s 315924590e-09 1s 1s 315929430e-09 0s 0s 315929910e-09 0s 0s 315934830e-09 1s 1s 315939670e-09 0s 0s 315940190e-09 0s 0s 315945070e-09 1s 1s 315949910e-09 0s 0s 315950470e-09 0s 0s 315955310e-09 1s 1s 315960150e-09 0s 0s 315960750e-09 0s 0s 315965550e-09 1s 1s 315970390e-09 0s 0s 315971030e-09 0s 0s 315975790e-09 1s 1s 315980630e-09 0s 0s 315981310e-09 0s 0s 315986030e-09 1s 1s 315990870e-09 0s 0s 315991590e-09 0s 0s 315996270e-09 1s 1s 316001110e-09 0s 0s 316001870e-09 0s 0s 316006510e-09 1s 1s 316011350e-09 0s 0s 316012150e-09 0s 0s 316016750e-09 1s 1s 316021590e-09 0s 0s 316022430e-09 0s 0s 316026990e-09 1s 1s 316031830e-09 0s 0s 316032710e-09 0s 0s 316037230e-09 1s 1s 316042070e-09 0s 0s 316042990e-09 0s 0s 316047470e-09 1s 1s 316052310e-09 0s 0s 316053270e-09 0s 0s 316057710e-09 1s 1s 316062550e-09 0s 0s 316063550e-09 0s 0s 316067950e-09 1s 1s 316072790e-09 0s 0s 316073830e-09 0s 0s 316078190e-09 1s 1s 316083030e-09 0s 0s 316084110e-09 0s 0s 316088430e-09 1s 1s 316093270e-09 0s 0s 316094390e-09 0s 0s 316098670e-09 1s 1s 316103510e-09 0s 0s 316104670e-09 0s 0s 316108910e-09 1s 1s 316113750e-09 0s 0s 316114950e-09 0s 0s 316119150e-09 1s 1s 316123990e-09 0s 0s 316125230e-09 0s 0s 316129390e-09 1s 1s 316134230e-09 0s 0s 316135510e-09 0s 0s 316139630e-09 1s 1s 316144470e-09 0s 0s 316145790e-09 0s 0s 316149870e-09 1s 1s 316154710e-09 0s 0s 316156070e-09 0s 0s 316160110e-09 1s 1s 316164950e-09 0s 0s 316166350e-09 0s 0s 316170350e-09 1s 1s 316175190e-09 0s 0s 316176630e-09 0s 0s 316180590e-09 1s 1s 316185430e-09 0s 0s 316186910e-09 0s 0s 316190830e-09 1s 1s 316195670e-09 0s 0s 316197190e-09 0s 0s 316201070e-09 1s 1s 316205910e-09 0s 0s 316207470e-09 0s 0s 316211310e-09 1s 1s 316216150e-09 0s 0s 316217750e-09 0s 0s 316221550e-09 1s 1s 316226390e-09 0s 0s 316228030e-09 0s 0s 316231790e-09 1s 1s 316236630e-09 0s 0s 316238310e-09 0s 0s 316242030e-09 1s 1s 316246870e-09 0s 0s 316248590e-09 0s 0s 316252270e-09 1s 1s 316257110e-09 0s 0s 316258870e-09 0s 0s 316262510e-09 1s 1s 316267350e-09 0s 0s 316269150e-09 0s 0s 316272750e-09 1s 1s 316277590e-09 0s 0s 316279430e-09 0s 0s 316282990e-09 1s 1s 316287830e-09 0s 0s 316289710e-09 0s 0s 316293230e-09 1s 1s 316298070e-09 0s 0s 316299990e-09 0s 0s 316303470e-09 1s 1s 316308310e-09 0s 0s 316310270e-09 0s 0s 316313710e-09 1s 1s 316318550e-09 0s 0s 316320550e-09 0s 0s 316323950e-09 1s 1s 316328790e-09 0s 0s 316330830e-09 0s 0s 316334190e-09 1s 1s 316339030e-09 0s 0s 316341110e-09 0s 0s 316344430e-09 1s 1s 316349270e-09 0s 0s 316351390e-09 0s 0s 316354670e-09 1s 1s 316359510e-09 0s 0s 316361670e-09 0s 0s 316364910e-09 1s 1s 316369750e-09 0s 0s 316371950e-09 0s 0s 316375150e-09 1s 1s 316379990e-09 0s 0s 316382230e-09 0s 0s 316385390e-09 1s 1s 316390230e-09 0s 0s 316392510e-09 0s 0s 316395630e-09 1s 1s 316400470e-09 0s 0s 316402790e-09 0s 0s 316405870e-09 1s 1s 316410710e-09 0s 0s 316413070e-09 0s 0s 316416110e-09 1s 1s 316420950e-09 0s 0s 316423350e-09 0s 0s 316426350e-09 1s 1s 316431190e-09 0s 0s 316433630e-09 0s 0s 316436590e-09 1s 1s 316441430e-09 0s 0s 316443910e-09 0s 0s 316446830e-09 1s 1s 316451670e-09 0s 0s 316454190e-09 0s 0s 316457070e-09 1s 1s 316461910e-09 0s 0s 316464470e-09 0s 0s 316467310e-09 1s 1s 316472150e-09 0s 0s 316474750e-09 0s 0s 316477550e-09 1s 1s 316482390e-09 0s 0s 316485030e-09 0s 0s 316487790e-09 1s 1s 316492630e-09 0s 0s 316495310e-09 0s 0s 316498030e-09 1s 1s 316502870e-09 0s 0s 316505590e-09 0s 0s 316508270e-09 1s 1s 316513110e-09 0s 0s 316515870e-09 0s 0s 316518510e-09 1s 1s 316523350e-09 0s 0s 316526150e-09 0s 0s 316528750e-09 1s 1s 316533590e-09 0s 0s 316536430e-09 0s 0s 316538990e-09 1s 1s 316543830e-09 0s 0s 316546710e-09 0s 0s 316549230e-09 1s 1s 316554070e-09 0s 0s 316556990e-09 0s 0s 316559470e-09 1s 1s 316564310e-09 0s 0s 316567270e-09 0s 0s 316569710e-09 1s 1s 316574550e-09 0s 0s 316577550e-09 0s 0s 316579950e-09 1s 1s 316584790e-09 0s 0s 316587830e-09 0s 0s 316590190e-09 1s 1s 316595030e-09 0s 0s 316598110e-09 0s 0s 316600430e-09 1s 1s 316605270e-09 0s 0s 316608390e-09 0s 0s 316610670e-09 1s 1s 316615510e-09 0s 0s 316618670e-09 0s 0s 316620910e-09 1s 1s 316625750e-09 0s 0s 316628950e-09 0s 0s 316631150e-09 1s 1s 316635990e-09 0s 0s 316639230e-09 0s 0s 316641390e-09 1s 1s 316646230e-09 0s 0s 316649510e-09 0s 0s 316651630e-09 1s 1s 316656470e-09 0s 0s 316659790e-09 0s 0s 316661870e-09 1s 1s 316666710e-09 0s 0s 316670070e-09 0s 0s 316672110e-09 1s 1s 316676950e-09 0s 0s 316680350e-09 0s 0s 316682350e-09 1s 1s 316687190e-09 0s 0s 316690630e-09 0s 0s 316692590e-09 1s 1s 316697430e-09 0s 0s 316700910e-09 0s 0s 316702830e-09 1s 1s 316707670e-09 0s 0s 316711190e-09 0s 0s 316713070e-09 1s 1s 316717910e-09 0s 0s 316721470e-09 0s 0s 316723310e-09 1s 1s 316728150e-09 0s 0s 316731750e-09 0s 0s 316733550e-09 1s 1s 316738390e-09 0s 0s 316742030e-09 0s 0s 316743790e-09 1s 1s 316748630e-09 0s 0s 316752310e-09 0s 0s 316754030e-09 1s 1s 316758870e-09 0s 0s 316762590e-09 0s 0s 316764270e-09 1s 1s 316769110e-09 0s 0s 316772870e-09 0s 0s 316774510e-09 1s 1s 316779350e-09 0s 0s 316783150e-09 0s 0s 316784750e-09 1s 1s 316789590e-09 0s 0s 316793430e-09 0s 0s 316794990e-09 1s 1s 316799830e-09 0s 0s 316803710e-09 0s 0s 316805230e-09 1s 1s 316810070e-09 0s 0s 316813990e-09 0s 0s 316815470e-09 1s 1s 316820310e-09 0s 0s 316824270e-09 0s 0s 316825710e-09 1s 1s 316830550e-09 0s 0s 316834550e-09 0s 0s 316835950e-09 1s 1s 316840790e-09 0s 0s 316844830e-09 0s 0s 316846190e-09 1s 1s 316851030e-09 0s 0s 316855110e-09 0s 0s 316856430e-09 1s 1s 316861270e-09 0s 0s 316865390e-09 0s 0s 316866670e-09 1s 1s 316871510e-09 0s 0s 316875670e-09 0s 0s 316876910e-09 1s 1s 316881750e-09 0s 0s 316885950e-09 0s 0s 316887150e-09 1s 1s 316891990e-09 0s 0s 316896230e-09 0s 0s 316897390e-09 1s 1s 316902230e-09 0s 0s 316906510e-09 0s 0s 316907630e-09 1s 1s 316912470e-09 0s 0s 316916790e-09 0s 0s 316917870e-09 1s 1s 316922710e-09 0s 0s 316927070e-09 0s 0s 316928110e-09 1s 1s 316932950e-09 0s 0s 316937350e-09 0s 0s 316938350e-09 1s 1s 316943190e-09 0s 0s 316947630e-09 0s 0s 316948590e-09 1s 1s 316953430e-09 0s 0s 316957910e-09 0s 0s 316958830e-09 1s 1s 316963670e-09 0s 0s 316968190e-09 0s 0s 316969070e-09 1s 1s 316973910e-09 0s 0s 316978470e-09 0s 0s 316979310e-09 1s 1s 316984150e-09 0s 0s 316988750e-09 0s 0s 316989550e-09 1s 1s 316994390e-09 0s 0s 316999030e-09 0s 0s 316999790e-09 1s 1s 317004630e-09 0s 0s 317009310e-09 0s 0s 317010030e-09 1s 1s 317014870e-09 0s 0s 317019590e-09 0s 0s 317020270e-09 1s 1s 317025110e-09 0s 0s 317029870e-09 0s 0s 317030510e-09 1s 1s 317035350e-09 0s 0s 317040150e-09 0s 0s 317040750e-09 1s 1s 317045590e-09 0s 0s 317050430e-09 0s 0s 317050990e-09 1s 1s 317055830e-09 0s 0s 317060710e-09 0s 0s 317061230e-09 1s 1s 317066070e-09 0s 0s 317070990e-09 0s 0s 317071470e-09 1s 1s 317076310e-09 0s 0s 317081270e-09 0s 0s 317081710e-09 1s 1s 317086550e-09 0s 0s 317091550e-09 0s 0s 317091950e-09 1s 1s 317096790e-09 0s 0s 317101830e-09 0s 0s 317102190e-09 1s 1s 317107030e-09 0s 0s 317112110e-09 0s 0s 317112430e-09 1s 1s 317117270e-09 0s 0s 317122390e-09 0s 0s 317122670e-09 1s 1s 317127510e-09 0s 0s 317132670e-09 0s 0s 317132910e-09 1s 1s 317137750e-09 0s 0s 317142950e-09 0s 0s 317143150e-09 1s 1s 317147990e-09 0s 0s 317153230e-09 0s 0s 317153390e-09 1s 1s 317158230e-09 0s 0s 317163510e-09 0s 0s 317163630e-09 1s 1s 317168470e-09 0s 0s 317173790e-09 0s 0s 317173870e-09 1s 1s 317178710e-09 0s 0s 317184070e-09 0s 0s 317184110e-09 1s 1s 317188950e-09 0s 0s 317194350e-09 1s 1s 317194390e-09 1s 1s 317199230e-09 0s 0s 317204590e-09 1s 1s 317204670e-09 1s 1s 317209470e-09 0s 0s 317214830e-09 1s 1s 317214950e-09 1s 1s 317219710e-09 0s 0s 317225070e-09 1s 1s 317225230e-09 1s 1s 317229950e-09 0s 0s 317235310e-09 1s 1s 317235510e-09 1s 1s 317240190e-09 0s 0s 317245550e-09 1s 1s 317245790e-09 1s 1s 317250430e-09 0s 0s 317255790e-09 1s 1s 317256070e-09 1s 1s 317260670e-09 0s 0s 317266030e-09 1s 1s 317266350e-09 1s 1s 317270910e-09 0s 0s 317276270e-09 1s 1s 317276630e-09 1s 1s 317281150e-09 0s 0s 317286510e-09 1s 1s 317286910e-09 1s 1s 317291390e-09 0s 0s 317296750e-09 1s 1s 317297190e-09 1s 1s 317301630e-09 0s 0s 317306990e-09 1s 1s 317307470e-09 1s 1s 317311870e-09 0s 0s 317317230e-09 1s 1s 317317750e-09 1s 1s 317322110e-09 0s 0s 317327470e-09 1s 1s 317328030e-09 1s 1s 317332350e-09 0s 0s 317337710e-09 1s 1s 317338310e-09 1s 1s 317342590e-09 0s 0s 317347950e-09 1s 1s 317348590e-09 1s 1s 317352830e-09 0s 0s 317358190e-09 1s 1s 317358870e-09 1s 1s 317363070e-09 0s 0s 317368430e-09 1s 1s 317369150e-09 1s 1s 317373310e-09 0s 0s 317378670e-09 1s 1s 317379430e-09 1s 1s 317383550e-09 0s 0s 317388910e-09 1s 1s 317389710e-09 1s 1s 317393790e-09 0s 0s 317399150e-09 1s 1s 317399990e-09 1s 1s 317404030e-09 0s 0s 317409390e-09 1s 1s 317410270e-09 1s 1s 317414270e-09 0s 0s 317419630e-09 1s 1s 317420550e-09 1s 1s 317424510e-09 0s 0s 317429870e-09 1s 1s 317430830e-09 1s 1s 317434750e-09 0s 0s 317440110e-09 1s 1s 317441110e-09 1s 1s 317444990e-09 0s 0s 317450350e-09 1s 1s 317451390e-09 1s 1s 317455230e-09 0s 0s 317460590e-09 1s 1s 317461670e-09 1s 1s 317465470e-09 0s 0s 317470830e-09 1s 1s 317471950e-09 1s 1s 317475710e-09 0s 0s 317481070e-09 1s 1s 317482230e-09 1s 1s 317485950e-09 0s 0s 317491310e-09 1s 1s 317492510e-09 1s 1s 317496190e-09 0s 0s 317501550e-09 1s 1s 317502790e-09 1s 1s 317506430e-09 0s 0s 317511790e-09 1s 1s 317513070e-09 1s 1s 317516670e-09 0s 0s 317522030e-09 1s 1s 317523350e-09 1s 1s 317526910e-09 0s 0s 317532270e-09 1s 1s 317533630e-09 1s 1s 317537150e-09 0s 0s 317542510e-09 1s 1s 317543910e-09 1s 1s 317547390e-09 0s 0s 317552750e-09 1s 1s 317554190e-09 1s 1s 317557630e-09 0s 0s 317562990e-09 1s 1s 317564470e-09 1s 1s 317567870e-09 0s 0s 317573230e-09 1s 1s 317574750e-09 1s 1s 317578110e-09 0s 0s 317583470e-09 1s 1s 317585030e-09 1s 1s 317588350e-09 0s 0s 317593710e-09 1s 1s 317595310e-09 1s 1s 317598590e-09 0s 0s 317603950e-09 1s 1s 317605590e-09 1s 1s 317608830e-09 0s 0s 317614190e-09 1s 1s 317615870e-09 1s 1s 317619070e-09 0s 0s 317624430e-09 1s 1s 317626150e-09 1s 1s 317629310e-09 0s 0s 317634670e-09 1s 1s 317636430e-09 1s 1s 317639550e-09 0s 0s 317644910e-09 1s 1s 317646710e-09 1s 1s 317649790e-09 0s 0s 317655150e-09 1s 1s 317656990e-09 1s 1s 317660030e-09 0s 0s 317665390e-09 1s 1s 317667270e-09 1s 1s 317670270e-09 0s 0s 317675630e-09 1s 1s 317677550e-09 1s 1s 317680510e-09 0s 0s 317685870e-09 1s 1s 317687830e-09 1s 1s 317690750e-09 0s 0s 317696110e-09 1s 1s 317698110e-09 1s 1s 317700990e-09 0s 0s 317706350e-09 1s 1s 317708390e-09 1s 1s 317711230e-09 0s 0s 317716590e-09 1s 1s 317718670e-09 1s 1s 317721470e-09 0s 0s 317726830e-09 1s 1s 317728950e-09 1s 1s 317731710e-09 0s 0s 317737070e-09 1s 1s 317739230e-09 1s 1s 317741950e-09 0s 0s 317747310e-09 1s 1s 317749510e-09 1s 1s 317752190e-09 0s 0s 317757550e-09 1s 1s 317759790e-09 1s 1s 317762430e-09 0s 0s 317767790e-09 1s 1s 317770070e-09 1s 1s 317772670e-09 0s 0s 317778030e-09 1s 1s 317780350e-09 1s 1s 317782910e-09 0s 0s 317788270e-09 1s 1s 317790630e-09 1s 1s 317793150e-09 0s 0s 317798510e-09 1s 1s 317800910e-09 1s 1s 317803390e-09 0s 0s 317808750e-09 1s 1s 317811190e-09 1s 1s 317813630e-09 0s 0s 317818990e-09 1s 1s 317821470e-09 1s 1s 317823870e-09 0s 0s 317829230e-09 1s 1s 317831750e-09 1s 1s 317834110e-09 0s 0s 317839470e-09 1s 1s 317842030e-09 1s 1s 317844350e-09 0s 0s 317849710e-09 1s 1s 317852310e-09 1s 1s 317854590e-09 0s 0s 317859950e-09 1s 1s 317862590e-09 1s 1s 317864830e-09 0s 0s 317870190e-09 1s 1s 317872870e-09 1s 1s 317875070e-09 0s 0s 317880430e-09 1s 1s 317883150e-09 1s 1s 317885310e-09 0s 0s 317890670e-09 1s 1s 317893430e-09 1s 1s 317895550e-09 0s 0s 317900910e-09 1s 1s 317903710e-09 1s 1s 317905790e-09 0s 0s 317911150e-09 1s 1s 317913990e-09 1s 1s 317916030e-09 0s 0s 317921390e-09 1s 1s 317924270e-09 1s 1s 317926270e-09 0s 0s 317931630e-09 1s 1s 317934550e-09 1s 1s 317936510e-09 0s 0s 317941870e-09 1s 1s 317944830e-09 1s 1s 317946750e-09 0s 0s 317952110e-09 1s 1s 317955110e-09 1s 1s 317956990e-09 0s 0s 317962350e-09 1s 1s 317965390e-09 1s 1s 317967230e-09 0s 0s 317972590e-09 1s 1s 317975670e-09 1s 1s 317977470e-09 0s 0s 317982830e-09 1s 1s 317985950e-09 1s 1s 317987710e-09 0s 0s 317993070e-09 1s 1s 317996230e-09 1s 1s 317997950e-09 0s 0s 318003310e-09 1s 1s 318006510e-09 1s 1s 318008190e-09 0s 0s 318013550e-09 1s 1s 318016790e-09 1s 1s 318018430e-09 0s 0s 318023790e-09 1s 1s 318027070e-09 1s 1s 318028670e-09 0s 0s 318034030e-09 1s 1s 318037350e-09 1s 1s 318038910e-09 0s 0s 318044270e-09 1s 1s 318047630e-09 1s 1s 318049150e-09 0s 0s 318054510e-09 1s 1s 318057910e-09 1s 1s 318059390e-09 0s 0s 318064750e-09 1s 1s 318068190e-09 1s 1s 318069630e-09 0s 0s 318074990e-09 1s 1s 318078470e-09 1s 1s 318079870e-09 0s 0s 318085230e-09 1s 1s 318088750e-09 1s 1s 318090110e-09 0s 0s 318095470e-09 1s 1s 318099030e-09 1s 1s 318100350e-09 0s 0s 318105710e-09 1s 1s 318109310e-09 1s 1s 318110590e-09 0s 0s 318115950e-09 1s 1s 318119590e-09 1s 1s 318120830e-09 0s 0s 318126190e-09 1s 1s 318129870e-09 1s 1s 318131070e-09 0s 0s 318136430e-09 1s 1s 318140150e-09 1s 1s 318141310e-09 0s 0s 318146670e-09 1s 1s 318150430e-09 1s 1s 318151550e-09 0s 0s 318156910e-09 1s 1s 318160710e-09 1s 1s 318161790e-09 0s 0s 318167150e-09 1s 1s 318170990e-09 1s 1s 318172030e-09 0s 0s 318177390e-09 1s 1s 318181270e-09 1s 1s 318182270e-09 0s 0s 318187630e-09 1s 1s 318191550e-09 1s 1s 318192510e-09 0s 0s 318197870e-09 1s 1s 318201830e-09 1s 1s 318202750e-09 0s 0s 318208110e-09 1s 1s 318212110e-09 1s 1s 318212990e-09 0s 0s 318218350e-09 1s 1s 318222390e-09 1s 1s 318223230e-09 0s 0s 318228590e-09 1s 1s 318232670e-09 1s 1s 318233470e-09 0s 0s 318238830e-09 1s 1s 318242950e-09 1s 1s 318243710e-09 0s 0s 318249070e-09 1s 1s 318253230e-09 1s 1s 318253950e-09 0s 0s 318259310e-09 1s 1s 318263510e-09 1s 1s 318264190e-09 0s 0s 318269550e-09 1s 1s 318273790e-09 1s 1s 318274430e-09 0s 0s 318279790e-09 1s 1s 318284070e-09 1s 1s 318284670e-09 0s 0s 318290030e-09 1s 1s 318294350e-09 1s 1s 318294910e-09 0s 0s 318300270e-09 1s 1s 318304630e-09 1s 1s 318305150e-09 0s 0s 318310510e-09 1s 1s 318314910e-09 1s 1s 318315390e-09 0s 0s 318320750e-09 1s 1s 318325190e-09 1s 1s 318325630e-09 0s 0s 318330990e-09 1s 1s 318335470e-09 1s 1s 318335870e-09 0s 0s 318341230e-09 1s 1s 318345750e-09 1s 1s 318346110e-09 0s 0s 318351470e-09 1s 1s 318356030e-09 1s 1s 318356350e-09 0s 0s 318361710e-09 1s 1s 318366310e-09 1s 1s 318366590e-09 0s 0s 318371950e-09 1s 1s 318376590e-09 1s 1s 318376830e-09 0s 0s 318382190e-09 1s 1s 318386870e-09 1s 1s 318387070e-09 0s 0s 318392430e-09 1s 1s 318397150e-09 1s 1s 318397310e-09 0s 0s 318402670e-09 1s 1s 318407430e-09 1s 1s 318407550e-09 0s 0s 318412910e-09 1s 1s 318417710e-09 1s 1s 318417790e-09 0s 0s 318423150e-09 1s 1s 318427990e-09 1s 1s 318428030e-09 0s 0s 318433390e-09 1s 1s 318438270e-09 0s 0s 318443630e-09 1s 1s 318448510e-09 0s 0s 318448550e-09 0s 0s 318453870e-09 1s 1s 318458750e-09 0s 0s 318458830e-09 0s 0s 318464110e-09 1s 1s 318468990e-09 0s 0s 318469110e-09 0s 0s 318474350e-09 1s 1s 318479230e-09 0s 0s 318479390e-09 0s 0s 318484590e-09 1s 1s 318489470e-09 0s 0s 318489670e-09 0s 0s 318494830e-09 1s 1s 318499710e-09 0s 0s 318499950e-09 0s 0s 318505070e-09 1s 1s 318509950e-09 0s 0s 318510230e-09 0s 0s 318515310e-09 1s 1s 318520190e-09 0s 0s 318520510e-09 0s 0s 318525550e-09 1s 1s 318530430e-09 0s 0s 318530790e-09 0s 0s 318535790e-09 1s 1s 318540670e-09 0s 0s 318541070e-09 0s 0s 318546030e-09 1s 1s 318550910e-09 0s 0s 318551350e-09 0s 0s 318556270e-09 1s 1s 318561150e-09 0s 0s 318561630e-09 0s 0s 318566510e-09 1s 1s 318571390e-09 0s 0s 318571910e-09 0s 0s 318576750e-09 1s 1s 318581630e-09 0s 0s 318582190e-09 0s 0s 318586990e-09 1s 1s 318591870e-09 0s 0s 318592470e-09 0s 0s 318597230e-09 1s 1s 318602110e-09 0s 0s 318602750e-09 0s 0s 318607470e-09 1s 1s 318612350e-09 0s 0s 318613030e-09 0s 0s 318617710e-09 1s 1s 318622590e-09 0s 0s 318623310e-09 0s 0s 318627950e-09 1s 1s 318632830e-09 0s 0s 318633590e-09 0s 0s 318638190e-09 1s 1s 318643070e-09 0s 0s 318643870e-09 0s 0s 318648430e-09 1s 1s 318653310e-09 0s 0s 318654150e-09 0s 0s 318658670e-09 1s 1s 318663550e-09 0s 0s 318664430e-09 0s 0s 318668910e-09 1s 1s 318673790e-09 0s 0s 318674710e-09 0s 0s 318679150e-09 1s 1s 318684030e-09 0s 0s 318684990e-09 0s 0s 318689390e-09 1s 1s 318694270e-09 0s 0s 318695270e-09 0s 0s 318699630e-09 1s 1s 318704510e-09 0s 0s 318705550e-09 0s 0s 318709870e-09 1s 1s 318714750e-09 0s 0s 318715830e-09 0s 0s 318720110e-09 1s 1s 318724990e-09 0s 0s 318726110e-09 0s 0s 318730350e-09 1s 1s 318735230e-09 0s 0s 318736390e-09 0s 0s 318740590e-09 1s 1s 318745470e-09 0s 0s 318746670e-09 0s 0s 318750830e-09 1s 1s 318755710e-09 0s 0s 318756950e-09 0s 0s 318761070e-09 1s 1s 318765950e-09 0s 0s 318767230e-09 0s 0s 318771310e-09 1s 1s 318776190e-09 0s 0s 318777510e-09 0s 0s 318781550e-09 1s 1s 318786430e-09 0s 0s 318787790e-09 0s 0s 318791790e-09 1s 1s 318796670e-09 0s 0s 318798070e-09 0s 0s 318802030e-09 1s 1s 318806910e-09 0s 0s 318808350e-09 0s 0s 318812270e-09 1s 1s 318817150e-09 0s 0s 318818630e-09 0s 0s 318822510e-09 1s 1s 318827390e-09 0s 0s 318828910e-09 0s 0s 318832750e-09 1s 1s 318837630e-09 0s 0s 318839190e-09 0s 0s 318842990e-09 1s 1s 318847870e-09 0s 0s 318849470e-09 0s 0s 318853230e-09 1s 1s 318858110e-09 0s 0s 318859750e-09 0s 0s 318863470e-09 1s 1s 318868350e-09 0s 0s 318870030e-09 0s 0s 318873710e-09 1s 1s 318878590e-09 0s 0s 318880310e-09 0s 0s 318883950e-09 1s 1s 318888830e-09 0s 0s 318890590e-09 0s 0s 318894190e-09 1s 1s 318899070e-09 0s 0s 318900870e-09 0s 0s 318904430e-09 1s 1s 318909310e-09 0s 0s 318911150e-09 0s 0s 318914670e-09 1s 1s 318919550e-09 0s 0s 318921430e-09 0s 0s 318924910e-09 1s 1s 318929790e-09 0s 0s 318931710e-09 0s 0s 318935150e-09 1s 1s 318940030e-09 0s 0s 318941990e-09 0s 0s 318945390e-09 1s 1s 318950270e-09 0s 0s 318952270e-09 0s 0s 318955630e-09 1s 1s 318960510e-09 0s 0s 318962550e-09 0s 0s 318965870e-09 1s 1s 318970750e-09 0s 0s 318972830e-09 0s 0s 318976110e-09 1s 1s 318980990e-09 0s 0s 318983110e-09 0s 0s 318986350e-09 1s 1s 318991230e-09 0s 0s 318993390e-09 0s 0s 318996590e-09 1s 1s 319001470e-09 0s 0s 319003670e-09 0s 0s 319006830e-09 1s 1s 319011710e-09 0s 0s 319013950e-09 0s 0s 319017070e-09 1s 1s 319021950e-09 0s 0s 319024230e-09 0s 0s 319027310e-09 1s 1s 319032190e-09 0s 0s 319034510e-09 0s 0s 319037550e-09 1s 1s 319042430e-09 0s 0s 319044790e-09 0s 0s 319047790e-09 1s 1s 319052670e-09 0s 0s 319055070e-09 0s 0s 319058030e-09 1s 1s 319062910e-09 0s 0s 319065350e-09 0s 0s 319068270e-09 1s 1s 319073150e-09 0s 0s 319075630e-09 0s 0s 319078510e-09 1s 1s 319083390e-09 0s 0s 319085910e-09 0s 0s 319088750e-09 1s 1s 319093630e-09 0s 0s 319096190e-09 0s 0s 319098990e-09 1s 1s 319103870e-09 0s 0s 319106470e-09 0s 0s 319109230e-09 1s 1s 319114110e-09 0s 0s 319116750e-09 0s 0s 319119470e-09 1s 1s 319124350e-09 0s 0s 319127030e-09 0s 0s 319129710e-09 1s 1s 319134590e-09 0s 0s 319137310e-09 0s 0s 319139950e-09 1s 1s 319144830e-09 0s 0s 319147590e-09 0s 0s 319150190e-09 1s 1s 319155070e-09 0s 0s 319157870e-09 0s 0s 319160430e-09 1s 1s 319165310e-09 0s 0s 319168150e-09 0s 0s 319170670e-09 1s 1s 319175550e-09 0s 0s 319178430e-09 0s 0s 319180910e-09 1s 1s 319185790e-09 0s 0s 319188710e-09 0s 0s 319191150e-09 1s 1s 319196030e-09 0s 0s 319198990e-09 0s 0s 319201390e-09 1s 1s 319206270e-09 0s 0s 319209270e-09 0s 0s 319211630e-09 1s 1s 319216510e-09 0s 0s 319219550e-09 0s 0s 319221870e-09 1s 1s 319226750e-09 0s 0s 319229830e-09 0s 0s 319232110e-09 1s 1s 319236990e-09 0s 0s 319240110e-09 0s 0s 319242350e-09 1s 1s 319247230e-09 0s 0s 319250390e-09 0s 0s 319252590e-09 1s 1s 319257470e-09 0s 0s 319260670e-09 0s 0s 319262830e-09 1s 1s 319267710e-09 0s 0s 319270950e-09 0s 0s 319273070e-09 1s 1s 319277950e-09 0s 0s 319281230e-09 0s 0s 319283310e-09 1s 1s 319288190e-09 0s 0s 319291510e-09 0s 0s 319293550e-09 1s 1s 319298430e-09 0s 0s 319301790e-09 0s 0s 319303790e-09 1s 1s 319308670e-09 0s 0s 319312070e-09 0s 0s 319314030e-09 1s 1s 319318910e-09 0s 0s 319322350e-09 0s 0s 319324270e-09 1s 1s 319329150e-09 0s 0s 319332630e-09 0s 0s 319334510e-09 1s 1s 319339390e-09 0s 0s 319342910e-09 0s 0s 319344750e-09 1s 1s 319349630e-09 0s 0s 319353190e-09 0s 0s 319354990e-09 1s 1s 319359870e-09 0s 0s 319363470e-09 0s 0s 319365230e-09 1s 1s 319370110e-09 0s 0s 319373750e-09 0s 0s 319375470e-09 1s 1s 319380350e-09 0s 0s 319384030e-09 0s 0s 319385710e-09 1s 1s 319390590e-09 0s 0s 319394310e-09 0s 0s 319395950e-09 1s 1s 319400830e-09 0s 0s 319404590e-09 0s 0s 319406190e-09 1s 1s 319411070e-09 0s 0s 319414870e-09 0s 0s 319416430e-09 1s 1s 319421310e-09 0s 0s 319425150e-09 0s 0s 319426670e-09 1s 1s 319431550e-09 0s 0s 319435430e-09 0s 0s 319436910e-09 1s 1s 319441790e-09 0s 0s 319445710e-09 0s 0s 319447150e-09 1s 1s 319452030e-09 0s 0s 319455990e-09 0s 0s 319457390e-09 1s 1s 319462270e-09 0s 0s 319466270e-09 0s 0s 319467630e-09 1s 1s 319472510e-09 0s 0s 319476550e-09 0s 0s 319477870e-09 1s 1s 319482750e-09 0s 0s 319486830e-09 0s 0s 319488110e-09 1s 1s 319492990e-09 0s 0s 319497110e-09 0s 0s 319498350e-09 1s 1s 319503230e-09 0s 0s 319507390e-09 0s 0s 319508590e-09 1s 1s 319513470e-09 0s 0s 319517670e-09 0s 0s 319518830e-09 1s 1s 319523710e-09 0s 0s 319527950e-09 0s 0s 319529070e-09 1s 1s 319533950e-09 0s 0s 319538230e-09 0s 0s 319539310e-09 1s 1s 319544190e-09 0s 0s 319548510e-09 0s 0s 319549550e-09 1s 1s 319554430e-09 0s 0s 319558790e-09 0s 0s 319559790e-09 1s 1s 319564670e-09 0s 0s 319569070e-09 0s 0s 319570030e-09 1s 1s 319574910e-09 0s 0s 319579350e-09 0s 0s 319580270e-09 1s 1s 319585150e-09 0s 0s 319589630e-09 0s 0s 319590510e-09 1s 1s 319595390e-09 0s 0s 319599910e-09 0s 0s 319600750e-09 1s 1s 319605630e-09 0s 0s 319610190e-09 0s 0s 319610990e-09 1s 1s 319615870e-09 0s 0s 319620470e-09 0s 0s 319621230e-09 1s 1s 319626110e-09 0s 0s 319630750e-09 0s 0s 319631470e-09 1s 1s 319636350e-09 0s 0s 319641030e-09 0s 0s 319641710e-09 1s 1s 319646590e-09 0s 0s 319651310e-09 0s 0s 319651950e-09 1s 1s 319656830e-09 0s 0s 319661590e-09 0s 0s 319662190e-09 1s 1s 319667070e-09 0s 0s 319671870e-09 0s 0s 319672430e-09 1s 1s 319677310e-09 0s 0s 319682150e-09 0s 0s 319682670e-09 1s 1s 319687550e-09 0s 0s 319692430e-09 0s 0s 319692910e-09 1s 1s 319697790e-09 0s 0s 319702710e-09 0s 0s 319703150e-09 1s 1s 319708030e-09 0s 0s 319712990e-09 0s 0s 319713390e-09 1s 1s 319718270e-09 0s 0s 319723270e-09 0s 0s 319723630e-09 1s 1s 319728510e-09 0s 0s 319733550e-09 0s 0s 319733870e-09 1s 1s 319738750e-09 0s 0s 319743830e-09 0s 0s 319744110e-09 1s 1s 319748990e-09 0s 0s 319754110e-09 0s 0s 319754350e-09 1s 1s 319759230e-09 0s 0s 319764390e-09 0s 0s 319764590e-09 1s 1s 319769470e-09 0s 0s 319774670e-09 0s 0s 319774830e-09 1s 1s 319779710e-09 0s 0s 319784950e-09 0s 0s 319785070e-09 1s 1s 319789950e-09 0s 0s 319795230e-09 0s 0s 319795310e-09 1s 1s 319800190e-09 0s 0s 319805510e-09 0s 0s 319805550e-09 1s 1s 319810430e-09 0s 0s 319815790e-09 1s 1s 319815830e-09 1s 1s 319820710e-09 0s 0s 319826030e-09 1s 1s 319826110e-09 1s 1s 319830950e-09 0s 0s 319836270e-09 1s 1s 319836390e-09 1s 1s 319841190e-09 0s 0s 319846510e-09 1s 1s 319846670e-09 1s 1s 319851430e-09 0s 0s 319856750e-09 1s 1s 319856950e-09 1s 1s 319861670e-09 0s 0s 319866990e-09 1s 1s 319867230e-09 1s 1s 319871910e-09 0s 0s 319877230e-09 1s 1s 319877510e-09 1s 1s 319882150e-09 0s 0s 319887470e-09 1s 1s 319887790e-09 1s 1s 319892390e-09 0s 0s 319897710e-09 1s 1s 319898070e-09 1s 1s 319902630e-09 0s 0s 319907950e-09 1s 1s 319908350e-09 1s 1s 319912870e-09 0s 0s 319918190e-09 1s 1s 319918630e-09 1s 1s 319923110e-09 0s 0s 319928430e-09 1s 1s 319928910e-09 1s 1s 319933350e-09 0s 0s 319938670e-09 1s 1s 319939190e-09 1s 1s 319943590e-09 0s 0s 319948910e-09 1s 1s 319949470e-09 1s 1s 319953830e-09 0s 0s 319959150e-09 1s 1s 319959750e-09 1s 1s 319964070e-09 0s 0s 319969390e-09 1s 1s 319970030e-09 1s 1s 319974310e-09 0s 0s 319979630e-09 1s 1s 319980310e-09 1s 1s 319984550e-09 0s 0s 319989870e-09 1s 1s 319990590e-09 1s 1s 319994790e-09 0s 0s 320000110e-09 1s 1s 320000870e-09 1s 1s 320005030e-09 0s 0s 320010350e-09 1s 1s 320011150e-09 1s 1s 320015270e-09 0s 0s 320020590e-09 1s 1s 320021430e-09 1s 1s 320025510e-09 0s 0s 320030830e-09 1s 1s 320031710e-09 1s 1s 320035750e-09 0s 0s 320041070e-09 1s 1s 320041990e-09 1s 1s 320045990e-09 0s 0s 320051310e-09 1s 1s 320052270e-09 1s 1s 320056230e-09 0s 0s 320061550e-09 1s 1s 320062550e-09 1s 1s 320066470e-09 0s 0s 320071790e-09 1s 1s 320072830e-09 1s 1s 320076710e-09 0s 0s 320082030e-09 1s 1s 320083110e-09 1s 1s 320086950e-09 0s 0s 320092270e-09 1s 1s 320093390e-09 1s 1s 320097190e-09 0s 0s 320102510e-09 1s 1s 320103670e-09 1s 1s 320107430e-09 0s 0s 320112750e-09 1s 1s 320113950e-09 1s 1s 320117670e-09 0s 0s 320122990e-09 1s 1s 320124230e-09 1s 1s 320127910e-09 0s 0s 320133230e-09 1s 1s 320134510e-09 1s 1s 320138150e-09 0s 0s 320143470e-09 1s 1s 320144790e-09 1s 1s 320148390e-09 0s 0s 320153710e-09 1s 1s 320155070e-09 1s 1s 320158630e-09 0s 0s 320163950e-09 1s 1s 320165350e-09 1s 1s 320168870e-09 0s 0s 320174190e-09 1s 1s 320175630e-09 1s 1s 320179110e-09 0s 0s 320184430e-09 1s 1s 320185910e-09 1s 1s 320189350e-09 0s 0s 320194670e-09 1s 1s 320196190e-09 1s 1s 320199590e-09 0s 0s 320204910e-09 1s 1s 320206470e-09 1s 1s 320209830e-09 0s 0s 320215150e-09 1s 1s 320216750e-09 1s 1s 320220070e-09 0s 0s 320225390e-09 1s 1s 320227030e-09 1s 1s 320230310e-09 0s 0s 320235630e-09 1s 1s 320237310e-09 1s 1s 320240550e-09 0s 0s 320245870e-09 1s 1s 320247590e-09 1s 1s 320250790e-09 0s 0s 320256110e-09 1s 1s 320257870e-09 1s 1s 320261030e-09 0s 0s 320266350e-09 1s 1s 320268150e-09 1s 1s 320271270e-09 0s 0s 320276590e-09 1s 1s 320278430e-09 1s 1s 320281510e-09 0s 0s 320286830e-09 1s 1s 320288710e-09 1s 1s 320291750e-09 0s 0s 320297070e-09 1s 1s 320298990e-09 1s 1s 320301990e-09 0s 0s 320307310e-09 1s 1s 320309270e-09 1s 1s 320312230e-09 0s 0s 320317550e-09 1s 1s 320319550e-09 1s 1s 320322470e-09 0s 0s 320327790e-09 1s 1s 320329830e-09 1s 1s 320332710e-09 0s 0s 320338030e-09 1s 1s 320340110e-09 1s 1s 320342950e-09 0s 0s 320348270e-09 1s 1s 320350390e-09 1s 1s 320353190e-09 0s 0s 320358510e-09 1s 1s 320360670e-09 1s 1s 320363430e-09 0s 0s 320368750e-09 1s 1s 320370950e-09 1s 1s 320373670e-09 0s 0s 320378990e-09 1s 1s 320381230e-09 1s 1s 320383910e-09 0s 0s 320389230e-09 1s 1s 320391510e-09 1s 1s 320394150e-09 0s 0s 320399470e-09 1s 1s 320401790e-09 1s 1s 320404390e-09 0s 0s 320409710e-09 1s 1s 320412070e-09 1s 1s 320414630e-09 0s 0s 320419950e-09 1s 1s 320422350e-09 1s 1s 320424870e-09 0s 0s 320430190e-09 1s 1s 320432630e-09 1s 1s 320435110e-09 0s 0s 320440430e-09 1s 1s 320442910e-09 1s 1s 320445350e-09 0s 0s 320450670e-09 1s 1s 320453190e-09 1s 1s 320455590e-09 0s 0s 320460910e-09 1s 1s 320463470e-09 1s 1s 320465830e-09 0s 0s 320471150e-09 1s 1s 320473750e-09 1s 1s 320476070e-09 0s 0s 320481390e-09 1s 1s 320484030e-09 1s 1s 320486310e-09 0s 0s 320491630e-09 1s 1s 320494310e-09 1s 1s 320496550e-09 0s 0s 320501870e-09 1s 1s 320504590e-09 1s 1s 320506790e-09 0s 0s 320512110e-09 1s 1s 320514870e-09 1s 1s 320517030e-09 0s 0s 320522350e-09 1s 1s 320525150e-09 1s 1s 320527270e-09 0s 0s 320532590e-09 1s 1s 320535430e-09 1s 1s 320537510e-09 0s 0s 320542830e-09 1s 1s 320545710e-09 1s 1s 320547750e-09 0s 0s 320553070e-09 1s 1s 320555990e-09 1s 1s 320557990e-09 0s 0s 320563310e-09 1s 1s 320566270e-09 1s 1s 320568230e-09 0s 0s 320573550e-09 1s 1s 320576550e-09 1s 1s 320578470e-09 0s 0s 320583790e-09 1s 1s 320586830e-09 1s 1s 320588710e-09 0s 0s 320594030e-09 1s 1s 320597110e-09 1s 1s 320598950e-09 0s 0s 320604270e-09 1s 1s 320607390e-09 1s 1s 320609190e-09 0s 0s 320614510e-09 1s 1s 320617670e-09 1s 1s 320619430e-09 0s 0s 320624750e-09 1s 1s 320627950e-09 1s 1s 320629670e-09 0s 0s 320634990e-09 1s 1s 320638230e-09 1s 1s 320639910e-09 0s 0s 320645230e-09 1s 1s 320648510e-09 1s 1s 320650150e-09 0s 0s 320655470e-09 1s 1s 320658790e-09 1s 1s 320660390e-09 0s 0s 320665710e-09 1s 1s 320669070e-09 1s 1s 320670630e-09 0s 0s 320675950e-09 1s 1s 320679350e-09 1s 1s 320680870e-09 0s 0s 320686190e-09 1s 1s 320689630e-09 1s 1s 320691110e-09 0s 0s 320696430e-09 1s 1s 320699910e-09 1s 1s 320701350e-09 0s 0s 320706670e-09 1s 1s 320710190e-09 1s 1s 320711590e-09 0s 0s 320716910e-09 1s 1s 320720470e-09 1s 1s 320721830e-09 0s 0s 320727150e-09 1s 1s 320730750e-09 1s 1s 320732070e-09 0s 0s 320737390e-09 1s 1s 320741030e-09 1s 1s 320742310e-09 0s 0s 320747630e-09 1s 1s 320751310e-09 1s 1s 320752550e-09 0s 0s 320757870e-09 1s 1s 320761590e-09 1s 1s 320762790e-09 0s 0s 320768110e-09 1s 1s 320771870e-09 1s 1s 320773030e-09 0s 0s 320778350e-09 1s 1s 320782150e-09 1s 1s 320783270e-09 0s 0s 320788590e-09 1s 1s 320792430e-09 1s 1s 320793510e-09 0s 0s 320798830e-09 1s 1s 320802710e-09 1s 1s 320803750e-09 0s 0s 320809070e-09 1s 1s 320812990e-09 1s 1s 320813990e-09 0s 0s 320819310e-09 1s 1s 320823270e-09 1s 1s 320824230e-09 0s 0s 320829550e-09 1s 1s 320833550e-09 1s 1s 320834470e-09 0s 0s 320839790e-09 1s 1s 320843830e-09 1s 1s 320844710e-09 0s 0s 320850030e-09 1s 1s 320854110e-09 1s 1s 320854950e-09 0s 0s 320860270e-09 1s 1s 320864390e-09 1s 1s 320865190e-09 0s 0s 320870510e-09 1s 1s 320874670e-09 1s 1s 320875430e-09 0s 0s 320880750e-09 1s 1s 320884950e-09 1s 1s 320885670e-09 0s 0s 320890990e-09 1s 1s 320895230e-09 1s 1s 320895910e-09 0s 0s 320901230e-09 1s 1s 320905510e-09 1s 1s 320906150e-09 0s 0s 320911470e-09 1s 1s 320915790e-09 1s 1s 320916390e-09 0s 0s 320921710e-09 1s 1s 320926070e-09 1s 1s 320926630e-09 0s 0s 320931950e-09 1s 1s 320936350e-09 1s 1s 320936870e-09 0s 0s 320942190e-09 1s 1s 320946630e-09 1s 1s 320947110e-09 0s 0s 320952430e-09 1s 1s 320956910e-09 1s 1s 320957350e-09 0s 0s 320962670e-09 1s 1s 320967190e-09 1s 1s 320967590e-09 0s 0s 320972910e-09 1s 1s 320977470e-09 1s 1s 320977830e-09 0s 0s 320983150e-09 1s 1s 320987750e-09 1s 1s 320988070e-09 0s 0s 320993390e-09 1s 1s 320998030e-09 1s 1s 320998310e-09 0s 0s 321003630e-09 1s 1s 321008310e-09 1s 1s 321008550e-09 0s 0s 321013870e-09 1s 1s 321018590e-09 1s 1s 321018790e-09 0s 0s 321024110e-09 1s 1s 321028870e-09 1s 1s 321029030e-09 0s 0s 321034350e-09 1s 1s 321039150e-09 1s 1s 321039270e-09 0s 0s 321044590e-09 1s 1s 321049430e-09 1s 1s 321049510e-09 0s 0s 321054830e-09 1s 1s 321059710e-09 1s 1s 321059750e-09 0s 0s 321065070e-09 1s 1s 321069990e-09 0s 0s 321075310e-09 1s 1s 321080230e-09 0s 0s 321080270e-09 0s 0s 321085550e-09 1s 1s 321090470e-09 0s 0s 321090550e-09 0s 0s 321095790e-09 1s 1s 321100710e-09 0s 0s 321100830e-09 0s 0s 321106030e-09 1s 1s 321110950e-09 0s 0s 321111110e-09 0s 0s 321116270e-09 1s 1s 321121190e-09 0s 0s 321121390e-09 0s 0s 321126510e-09 1s 1s 321131430e-09 0s 0s 321131670e-09 0s 0s 321136750e-09 1s 1s 321141670e-09 0s 0s 321141950e-09 0s 0s 321146990e-09 1s 1s 321151910e-09 0s 0s 321152230e-09 0s 0s 321157230e-09 1s 1s 321162150e-09 0s 0s 321162510e-09 0s 0s 321167470e-09 1s 1s 321172390e-09 0s 0s 321172790e-09 0s 0s 321177710e-09 1s 1s 321182630e-09 0s 0s 321183070e-09 0s 0s 321187950e-09 1s 1s 321192870e-09 0s 0s 321193350e-09 0s 0s 321198190e-09 1s 1s 321203110e-09 0s 0s 321203630e-09 0s 0s 321208430e-09 1s 1s 321213350e-09 0s 0s 321213910e-09 0s 0s 321218670e-09 1s 1s 321223590e-09 0s 0s 321224190e-09 0s 0s 321228910e-09 1s 1s 321233830e-09 0s 0s 321234470e-09 0s 0s 321239150e-09 1s 1s 321244070e-09 0s 0s 321244750e-09 0s 0s 321249390e-09 1s 1s 321254310e-09 0s 0s 321255030e-09 0s 0s 321259630e-09 1s 1s 321264550e-09 0s 0s 321265310e-09 0s 0s 321269870e-09 1s 1s 321274790e-09 0s 0s 321275590e-09 0s 0s 321280110e-09 1s 1s 321285030e-09 0s 0s 321285870e-09 0s 0s 321290350e-09 1s 1s 321295270e-09 0s 0s 321296150e-09 0s 0s 321300590e-09 1s 1s 321305510e-09 0s 0s 321306430e-09 0s 0s 321310830e-09 1s 1s 321315750e-09 0s 0s 321316710e-09 0s 0s 321321070e-09 1s 1s 321325990e-09 0s 0s 321326990e-09 0s 0s 321331310e-09 1s 1s 321336230e-09 0s 0s 321337270e-09 0s 0s 321341550e-09 1s 1s 321346470e-09 0s 0s 321347550e-09 0s 0s 321351790e-09 1s 1s 321356710e-09 0s 0s 321357830e-09 0s 0s 321362030e-09 1s 1s 321366950e-09 0s 0s 321368110e-09 0s 0s 321372270e-09 1s 1s 321377190e-09 0s 0s 321378390e-09 0s 0s 321382510e-09 1s 1s 321387430e-09 0s 0s 321388670e-09 0s 0s 321392750e-09 1s 1s 321397670e-09 0s 0s 321398950e-09 0s 0s 321402990e-09 1s 1s 321407910e-09 0s 0s 321409230e-09 0s 0s 321413230e-09 1s 1s 321418150e-09 0s 0s 321419510e-09 0s 0s 321423470e-09 1s 1s 321428390e-09 0s 0s 321429790e-09 0s 0s 321433710e-09 1s 1s 321438630e-09 0s 0s 321440070e-09 0s 0s 321443950e-09 1s 1s 321448870e-09 0s 0s 321450350e-09 0s 0s 321454190e-09 1s 1s 321459110e-09 0s 0s 321460630e-09 0s 0s 321464430e-09 1s 1s 321469350e-09 0s 0s 321470910e-09 0s 0s 321474670e-09 1s 1s 321479590e-09 0s 0s 321481190e-09 0s 0s 321484910e-09 1s 1s 321489830e-09 0s 0s 321491470e-09 0s 0s 321495150e-09 1s 1s 321500070e-09 0s 0s 321501750e-09 0s 0s 321505390e-09 1s 1s 321510310e-09 0s 0s 321512030e-09 0s 0s 321515630e-09 1s 1s 321520550e-09 0s 0s 321522310e-09 0s 0s 321525870e-09 1s 1s 321530790e-09 0s 0s 321532590e-09 0s 0s 321536110e-09 1s 1s 321541030e-09 0s 0s 321542870e-09 0s 0s 321546350e-09 1s 1s 321551270e-09 0s 0s 321553150e-09 0s 0s 321556590e-09 1s 1s 321561510e-09 0s 0s 321563430e-09 0s 0s 321566830e-09 1s 1s 321571750e-09 0s 0s 321573710e-09 0s 0s 321577070e-09 1s 1s 321581990e-09 0s 0s 321583990e-09 0s 0s 321587310e-09 1s 1s 321592230e-09 0s 0s 321594270e-09 0s 0s 321597550e-09 1s 1s 321602470e-09 0s 0s 321604550e-09 0s 0s 321607790e-09 1s 1s 321612710e-09 0s 0s 321614830e-09 0s 0s 321618030e-09 1s 1s 321622950e-09 0s 0s 321625110e-09 0s 0s 321628270e-09 1s 1s 321633190e-09 0s 0s 321635390e-09 0s 0s 321638510e-09 1s 1s 321643430e-09 0s 0s 321645670e-09 0s 0s 321648750e-09 1s 1s 321653670e-09 0s 0s 321655950e-09 0s 0s 321658990e-09 1s 1s 321663910e-09 0s 0s 321666230e-09 0s 0s 321669230e-09 1s 1s 321674150e-09 0s 0s 321676510e-09 0s 0s 321679470e-09 1s 1s 321684390e-09 0s 0s 321686790e-09 0s 0s 321689710e-09 1s 1s 321694630e-09 0s 0s 321697070e-09 0s 0s 321699950e-09 1s 1s 321704870e-09 0s 0s 321707350e-09 0s 0s 321710190e-09 1s 1s 321715110e-09 0s 0s 321717630e-09 0s 0s 321720430e-09 1s 1s 321725350e-09 0s 0s 321727910e-09 0s 0s 321730670e-09 1s 1s 321735590e-09 0s 0s 321738190e-09 0s 0s 321740910e-09 1s 1s 321745830e-09 0s 0s 321748470e-09 0s 0s 321751150e-09 1s 1s 321756070e-09 0s 0s 321758750e-09 0s 0s 321761390e-09 1s 1s 321766310e-09 0s 0s 321769030e-09 0s 0s 321771630e-09 1s 1s 321776550e-09 0s 0s 321779310e-09 0s 0s 321781870e-09 1s 1s 321786790e-09 0s 0s 321789590e-09 0s 0s 321792110e-09 1s 1s 321797030e-09 0s 0s 321799870e-09 0s 0s 321802350e-09 1s 1s 321807270e-09 0s 0s 321810150e-09 0s 0s 321812590e-09 1s 1s 321817510e-09 0s 0s 321820430e-09 0s 0s 321822830e-09 1s 1s 321827750e-09 0s 0s 321830710e-09 0s 0s 321833070e-09 1s 1s 321837990e-09 0s 0s 321840990e-09 0s 0s 321843310e-09 1s 1s 321848230e-09 0s 0s 321851270e-09 0s 0s 321853550e-09 1s 1s 321858470e-09 0s 0s 321861550e-09 0s 0s 321863790e-09 1s 1s 321868710e-09 0s 0s 321871830e-09 0s 0s 321874030e-09 1s 1s 321878950e-09 0s 0s 321882110e-09 0s 0s 321884270e-09 1s 1s 321889190e-09 0s 0s 321892390e-09 0s 0s 321894510e-09 1s 1s 321899430e-09 0s 0s 321902670e-09 0s 0s 321904750e-09 1s 1s 321909670e-09 0s 0s 321912950e-09 0s 0s 321914990e-09 1s 1s 321919910e-09 0s 0s 321923230e-09 0s 0s 321925230e-09 1s 1s 321930150e-09 0s 0s 321933510e-09 0s 0s 321935470e-09 1s 1s 321940390e-09 0s 0s 321943790e-09 0s 0s 321945710e-09 1s 1s 321950630e-09 0s 0s 321954070e-09 0s 0s 321955950e-09 1s 1s 321960870e-09 0s 0s 321964350e-09 0s 0s 321966190e-09 1s 1s 321971110e-09 0s 0s 321974630e-09 0s 0s 321976430e-09 1s 1s 321981350e-09 0s 0s 321984910e-09 0s 0s 321986670e-09 1s 1s 321991590e-09 0s 0s 321995190e-09 0s 0s 321996910e-09 1s 1s 322001830e-09 0s 0s 322005470e-09 0s 0s 322007150e-09 1s 1s 322012070e-09 0s 0s 322015750e-09 0s 0s 322017390e-09 1s 1s 322022310e-09 0s 0s 322026030e-09 0s 0s 322027630e-09 1s 1s 322032550e-09 0s 0s 322036310e-09 0s 0s 322037870e-09 1s 1s 322042790e-09 0s 0s 322046590e-09 0s 0s 322048110e-09 1s 1s 322053030e-09 0s 0s 322056870e-09 0s 0s 322058350e-09 1s 1s 322063270e-09 0s 0s 322067150e-09 0s 0s 322068590e-09 1s 1s 322073510e-09 0s 0s 322077430e-09 0s 0s 322078830e-09 1s 1s 322083750e-09 0s 0s 322087710e-09 0s 0s 322089070e-09 1s 1s 322093990e-09 0s 0s 322097990e-09 0s 0s 322099310e-09 1s 1s 322104230e-09 0s 0s 322108270e-09 0s 0s 322109550e-09 1s 1s 322114470e-09 0s 0s 322118550e-09 0s 0s 322119790e-09 1s 1s 322124710e-09 0s 0s 322128830e-09 0s 0s 322130030e-09 1s 1s 322134950e-09 0s 0s 322139110e-09 0s 0s 322140270e-09 1s 1s 322145190e-09 0s 0s 322149390e-09 0s 0s 322150510e-09 1s 1s 322155430e-09 0s 0s 322159670e-09 0s 0s 322160750e-09 1s 1s 322165670e-09 0s 0s 322169950e-09 0s 0s 322170990e-09 1s 1s 322175910e-09 0s 0s 322180230e-09 0s 0s 322181230e-09 1s 1s 322186150e-09 0s 0s 322190510e-09 0s 0s 322191470e-09 1s 1s 322196390e-09 0s 0s 322200790e-09 0s 0s 322201710e-09 1s 1s 322206630e-09 0s 0s 322211070e-09 0s 0s 322211950e-09 1s 1s 322216870e-09 0s 0s 322221350e-09 0s 0s 322222190e-09 1s 1s 322227110e-09 0s 0s 322231630e-09 0s 0s 322232430e-09 1s 1s 322237350e-09 0s 0s 322241910e-09 0s 0s 322242670e-09 1s 1s 322247590e-09 0s 0s 322252190e-09 0s 0s 322252910e-09 1s 1s 322257830e-09 0s 0s 322262470e-09 0s 0s 322263150e-09 1s 1s 322268070e-09 0s 0s 322272750e-09 0s 0s 322273390e-09 1s 1s 322278310e-09 0s 0s 322283030e-09 0s 0s 322283630e-09 1s 1s 322288550e-09 0s 0s 322293310e-09 0s 0s 322293870e-09 1s 1s 322298790e-09 0s 0s 322303590e-09 0s 0s 322304110e-09 1s 1s 322309030e-09 0s 0s 322313870e-09 0s 0s 322314350e-09 1s 1s 322319270e-09 0s 0s 322324150e-09 0s 0s 322324590e-09 1s 1s 322329510e-09 0s 0s 322334430e-09 0s 0s 322334830e-09 1s 1s 322339750e-09 0s 0s 322344710e-09 0s 0s 322345070e-09 1s 1s 322349990e-09 0s 0s 322354990e-09 0s 0s 322355310e-09 1s 1s 322360230e-09 0s 0s 322365270e-09 0s 0s 322365550e-09 1s 1s 322370470e-09 0s 0s 322375550e-09 0s 0s 322375790e-09 1s 1s 322380710e-09 0s 0s 322385830e-09 0s 0s 322386030e-09 1s 1s 322390950e-09 0s 0s 322396110e-09 0s 0s 322396270e-09 1s 1s 322401190e-09 0s 0s 322406390e-09 0s 0s 322406510e-09 1s 1s 322411430e-09 0s 0s 322416670e-09 0s 0s 322416750e-09 1s 1s 322421670e-09 0s 0s 322426950e-09 0s 0s 322426990e-09 1s 1s 322431910e-09 0s 0s 322437230e-09 1s 1s 322437270e-09 1s 1s 322442190e-09 0s 0s 322447470e-09 1s 1s 322447550e-09 1s 1s 322452430e-09 0s 0s 322457710e-09 1s 1s 322457830e-09 1s 1s 322462670e-09 0s 0s 322467950e-09 1s 1s 322468110e-09 1s 1s 322472910e-09 0s 0s 322478190e-09 1s 1s 322478390e-09 1s 1s 322483150e-09 0s 0s 322488430e-09 1s 1s 322488670e-09 1s 1s 322493390e-09 0s 0s 322498670e-09 1s 1s 322498950e-09 1s 1s 322503630e-09 0s 0s 322508910e-09 1s 1s 322509230e-09 1s 1s 322513870e-09 0s 0s 322519150e-09 1s 1s 322519510e-09 1s 1s 322524110e-09 0s 0s 322529390e-09 1s 1s 322529790e-09 1s 1s 322534350e-09 0s 0s 322539630e-09 1s 1s 322540070e-09 1s 1s 322544590e-09 0s 0s 322549870e-09 1s 1s 322550350e-09 1s 1s 322554830e-09 0s 0s 322560110e-09 1s 1s 322560630e-09 1s 1s 322565070e-09 0s 0s 322570350e-09 1s 1s 322570910e-09 1s 1s 322575310e-09 0s 0s 322580590e-09 1s 1s 322581190e-09 1s 1s 322585550e-09 0s 0s 322590830e-09 1s 1s 322591470e-09 1s 1s 322595790e-09 0s 0s 322601070e-09 1s 1s 322601750e-09 1s 1s 322606030e-09 0s 0s 322611310e-09 1s 1s 322612030e-09 1s 1s 322616270e-09 0s 0s 322621550e-09 1s 1s 322622310e-09 1s 1s 322626510e-09 0s 0s 322631790e-09 1s 1s 322632590e-09 1s 1s 322636750e-09 0s 0s 322642030e-09 1s 1s 322642870e-09 1s 1s 322646990e-09 0s 0s 322652270e-09 1s 1s 322653150e-09 1s 1s 322657230e-09 0s 0s 322662510e-09 1s 1s 322663430e-09 1s 1s 322667470e-09 0s 0s 322672750e-09 1s 1s 322673710e-09 1s 1s 322677710e-09 0s 0s 322682990e-09 1s 1s 322683990e-09 1s 1s 322687950e-09 0s 0s 322693230e-09 1s 1s 322694270e-09 1s 1s 322698190e-09 0s 0s 322703470e-09 1s 1s 322704550e-09 1s 1s 322708430e-09 0s 0s 322713710e-09 1s 1s 322714830e-09 1s 1s 322718670e-09 0s 0s 322723950e-09 1s 1s 322725110e-09 1s 1s 322728910e-09 0s 0s 322734190e-09 1s 1s 322735390e-09 1s 1s 322739150e-09 0s 0s 322744430e-09 1s 1s 322745670e-09 1s 1s 322749390e-09 0s 0s 322754670e-09 1s 1s 322755950e-09 1s 1s 322759630e-09 0s 0s 322764910e-09 1s 1s 322766230e-09 1s 1s 322769870e-09 0s 0s 322775150e-09 1s 1s 322776510e-09 1s 1s 322780110e-09 0s 0s 322785390e-09 1s 1s 322786790e-09 1s 1s 322790350e-09 0s 0s 322795630e-09 1s 1s 322797070e-09 1s 1s 322800590e-09 0s 0s 322805870e-09 1s 1s 322807350e-09 1s 1s 322810830e-09 0s 0s 322816110e-09 1s 1s 322817630e-09 1s 1s 322821070e-09 0s 0s 322826350e-09 1s 1s 322827910e-09 1s 1s 322831310e-09 0s 0s 322836590e-09 1s 1s 322838190e-09 1s 1s 322841550e-09 0s 0s 322846830e-09 1s 1s 322848470e-09 1s 1s 322851790e-09 0s 0s 322857070e-09 1s 1s 322858750e-09 1s 1s 322862030e-09 0s 0s 322867310e-09 1s 1s 322869030e-09 1s 1s 322872270e-09 0s 0s 322877550e-09 1s 1s 322879310e-09 1s 1s 322882510e-09 0s 0s 322887790e-09 1s 1s 322889590e-09 1s 1s 322892750e-09 0s 0s 322898030e-09 1s 1s 322899870e-09 1s 1s 322902990e-09 0s 0s 322908270e-09 1s 1s 322910150e-09 1s 1s 322913230e-09 0s 0s 322918510e-09 1s 1s 322920430e-09 1s 1s 322923470e-09 0s 0s 322928750e-09 1s 1s 322930710e-09 1s 1s 322933710e-09 0s 0s 322938990e-09 1s 1s 322940990e-09 1s 1s 322943950e-09 0s 0s 322949230e-09 1s 1s 322951270e-09 1s 1s 322954190e-09 0s 0s 322959470e-09 1s 1s 322961550e-09 1s 1s 322964430e-09 0s 0s 322969710e-09 1s 1s 322971830e-09 1s 1s 322974670e-09 0s 0s 322979950e-09 1s 1s 322982110e-09 1s 1s 322984910e-09 0s 0s 322990190e-09 1s 1s 322992390e-09 1s 1s 322995150e-09 0s 0s 323000430e-09 1s 1s 323002670e-09 1s 1s 323005390e-09 0s 0s 323010670e-09 1s 1s 323012950e-09 1s 1s 323015630e-09 0s 0s 323020910e-09 1s 1s 323023230e-09 1s 1s 323025870e-09 0s 0s 323031150e-09 1s 1s 323033510e-09 1s 1s 323036110e-09 0s 0s 323041390e-09 1s 1s 323043790e-09 1s 1s 323046350e-09 0s 0s 323051630e-09 1s 1s 323054070e-09 1s 1s 323056590e-09 0s 0s 323061870e-09 1s 1s 323064350e-09 1s 1s 323066830e-09 0s 0s 323072110e-09 1s 1s 323074630e-09 1s 1s 323077070e-09 0s 0s 323082350e-09 1s 1s 323084910e-09 1s 1s 323087310e-09 0s 0s 323092590e-09 1s 1s 323095190e-09 1s 1s 323097550e-09 0s 0s 323102830e-09 1s 1s 323105470e-09 1s 1s 323107790e-09 0s 0s 323113070e-09 1s 1s 323115750e-09 1s 1s 323118030e-09 0s 0s 323123310e-09 1s 1s 323126030e-09 1s 1s 323128270e-09 0s 0s 323133550e-09 1s 1s 323136310e-09 1s 1s 323138510e-09 0s 0s 323143790e-09 1s 1s 323146590e-09 1s 1s 323148750e-09 0s 0s 323154030e-09 1s 1s 323156870e-09 1s 1s 323158990e-09 0s 0s 323164270e-09 1s 1s 323167150e-09 1s 1s 323169230e-09 0s 0s 323174510e-09 1s 1s 323177430e-09 1s 1s 323179470e-09 0s 0s 323184750e-09 1s 1s 323187710e-09 1s 1s 323189710e-09 0s 0s 323194990e-09 1s 1s 323197990e-09 1s 1s 323199950e-09 0s 0s 323205230e-09 1s 1s 323208270e-09 1s 1s 323210190e-09 0s 0s 323215470e-09 1s 1s 323218550e-09 1s 1s 323220430e-09 0s 0s 323225710e-09 1s 1s 323228830e-09 1s 1s 323230670e-09 0s 0s 323235950e-09 1s 1s 323239110e-09 1s 1s 323240910e-09 0s 0s 323246190e-09 1s 1s 323249390e-09 1s 1s 323251150e-09 0s 0s 323256430e-09 1s 1s 323259670e-09 1s 1s 323261390e-09 0s 0s 323266670e-09 1s 1s 323269950e-09 1s 1s 323271630e-09 0s 0s 323276910e-09 1s 1s 323280230e-09 1s 1s 323281870e-09 0s 0s 323287150e-09 1s 1s 323290510e-09 1s 1s 323292110e-09 0s 0s 323297390e-09 1s 1s 323300790e-09 1s 1s 323302350e-09 0s 0s 323307630e-09 1s 1s 323311070e-09 1s 1s 323312590e-09 0s 0s 323317870e-09 1s 1s 323321350e-09 1s 1s 323322830e-09 0s 0s 323328110e-09 1s 1s 323331630e-09 1s 1s 323333070e-09 0s 0s 323338350e-09 1s 1s 323341910e-09 1s 1s 323343310e-09 0s 0s 323348590e-09 1s 1s 323352190e-09 1s 1s 323353550e-09 0s 0s 323358830e-09 1s 1s 323362470e-09 1s 1s 323363790e-09 0s 0s 323369070e-09 1s 1s 323372750e-09 1s 1s 323374030e-09 0s 0s 323379310e-09 1s 1s 323383030e-09 1s 1s 323384270e-09 0s 0s 323389550e-09 1s 1s 323393310e-09 1s 1s 323394510e-09 0s 0s 323399790e-09 1s 1s 323403590e-09 1s 1s 323404750e-09 0s 0s 323410030e-09 1s 1s 323413870e-09 1s 1s 323414990e-09 0s 0s 323420270e-09 1s 1s 323424150e-09 1s 1s 323425230e-09 0s 0s 323430510e-09 1s 1s 323434430e-09 1s 1s 323435470e-09 0s 0s 323440750e-09 1s 1s 323444710e-09 1s 1s 323445710e-09 0s 0s 323450990e-09 1s 1s 323454990e-09 1s 1s 323455950e-09 0s 0s 323461230e-09 1s 1s 323465270e-09 1s 1s 323466190e-09 0s 0s 323471470e-09 1s 1s 323475550e-09 1s 1s 323476430e-09 0s 0s 323481710e-09 1s 1s 323485830e-09 1s 1s 323486670e-09 0s 0s 323491950e-09 1s 1s 323496110e-09 1s 1s 323496910e-09 0s 0s 323502190e-09 1s 1s 323506390e-09 1s 1s 323507150e-09 0s 0s 323512430e-09 1s 1s 323516670e-09 1s 1s 323517390e-09 0s 0s 323522670e-09 1s 1s 323526950e-09 1s 1s 323527630e-09 0s 0s 323532910e-09 1s 1s 323537230e-09 1s 1s 323537870e-09 0s 0s 323543150e-09 1s 1s 323547510e-09 1s 1s 323548110e-09 0s 0s 323553390e-09 1s 1s 323557790e-09 1s 1s 323558350e-09 0s 0s 323563630e-09 1s 1s 323568070e-09 1s 1s 323568590e-09 0s 0s 323573870e-09 1s 1s 323578350e-09 1s 1s 323578830e-09 0s 0s 323584110e-09 1s 1s 323588630e-09 1s 1s 323589070e-09 0s 0s 323594350e-09 1s 1s 323598910e-09 1s 1s 323599310e-09 0s 0s 323604590e-09 1s 1s 323609190e-09 1s 1s 323609550e-09 0s 0s 323614830e-09 1s 1s 323619470e-09 1s 1s 323619790e-09 0s 0s 323625070e-09 1s 1s 323629750e-09 1s 1s 323630030e-09 0s 0s 323635310e-09 1s 1s 323640030e-09 1s 1s 323640270e-09 0s 0s 323645550e-09 1s 1s 323650310e-09 1s 1s 323650510e-09 0s 0s 323655790e-09 1s 1s 323660590e-09 1s 1s 323660750e-09 0s 0s 323666030e-09 1s 1s 323670870e-09 1s 1s 323670990e-09 0s 0s 323676270e-09 1s 1s 323681150e-09 1s 1s 323681230e-09 0s 0s 323686510e-09 1s 1s 323691430e-09 1s 1s 323691470e-09 0s 0s 323696750e-09 1s 1s 323701710e-09 0s 0s 323706990e-09 1s 1s 323711950e-09 0s 0s 323711990e-09 0s 0s 323717230e-09 1s 1s 323722190e-09 0s 0s 323722270e-09 0s 0s 323727470e-09 1s 1s 323732430e-09 0s 0s 323732550e-09 0s 0s 323737710e-09 1s 1s 323742670e-09 0s 0s 323742830e-09 0s 0s 323747950e-09 1s 1s 323752910e-09 0s 0s 323753110e-09 0s 0s 323758190e-09 1s 1s 323763150e-09 0s 0s 323763390e-09 0s 0s 323768430e-09 1s 1s 323773390e-09 0s 0s 323773670e-09 0s 0s 323778670e-09 1s 1s 323783630e-09 0s 0s 323783950e-09 0s 0s 323788910e-09 1s 1s 323793870e-09 0s 0s 323794230e-09 0s 0s 323799150e-09 1s 1s 323804110e-09 0s 0s 323804510e-09 0s 0s 323809390e-09 1s 1s 323814350e-09 0s 0s 323814790e-09 0s 0s 323819630e-09 1s 1s 323824590e-09 0s 0s 323825070e-09 0s 0s 323829870e-09 1s 1s 323834830e-09 0s 0s 323835350e-09 0s 0s 323840110e-09 1s 1s 323845070e-09 0s 0s 323845630e-09 0s 0s 323850350e-09 1s 1s 323855310e-09 0s 0s 323855910e-09 0s 0s 323860590e-09 1s 1s 323865550e-09 0s 0s 323866190e-09 0s 0s 323870830e-09 1s 1s 323875790e-09 0s 0s 323876470e-09 0s 0s 323881070e-09 1s 1s 323886030e-09 0s 0s 323886750e-09 0s 0s 323891310e-09 1s 1s 323896270e-09 0s 0s 323897030e-09 0s 0s 323901550e-09 1s 1s 323906510e-09 0s 0s 323907310e-09 0s 0s 323911790e-09 1s 1s 323916750e-09 0s 0s 323917590e-09 0s 0s 323922030e-09 1s 1s 323926990e-09 0s 0s 323927870e-09 0s 0s 323932270e-09 1s 1s 323937230e-09 0s 0s 323938150e-09 0s 0s 323942510e-09 1s 1s 323947470e-09 0s 0s 323948430e-09 0s 0s 323952750e-09 1s 1s 323957710e-09 0s 0s 323958710e-09 0s 0s 323962990e-09 1s 1s 323967950e-09 0s 0s 323968990e-09 0s 0s 323973230e-09 1s 1s 323978190e-09 0s 0s 323979270e-09 0s 0s 323983470e-09 1s 1s 323988430e-09 0s 0s 323989550e-09 0s 0s 323993710e-09 1s 1s 323998670e-09 0s 0s 323999830e-09 0s 0s 324003950e-09 1s 1s 324008910e-09 0s 0s 324010110e-09 0s 0s 324014190e-09 1s 1s 324019150e-09 0s 0s 324020390e-09 0s 0s 324024430e-09 1s 1s 324029390e-09 0s 0s 324030670e-09 0s 0s 324034670e-09 1s 1s 324039630e-09 0s 0s 324040950e-09 0s 0s 324044910e-09 1s 1s 324049870e-09 0s 0s 324051230e-09 0s 0s 324055150e-09 1s 1s 324060110e-09 0s 0s 324061510e-09 0s 0s 324065390e-09 1s 1s 324070350e-09 0s 0s 324071790e-09 0s 0s 324075630e-09 1s 1s 324080590e-09 0s 0s 324082070e-09 0s 0s 324085870e-09 1s 1s 324090830e-09 0s 0s 324092350e-09 0s 0s 324096110e-09 1s 1s 324101070e-09 0s 0s 324102630e-09 0s 0s 324106350e-09 1s 1s 324111310e-09 0s 0s 324112910e-09 0s 0s 324116590e-09 1s 1s 324121550e-09 0s 0s 324123190e-09 0s 0s 324126830e-09 1s 1s 324131790e-09 0s 0s 324133470e-09 0s 0s 324137070e-09 1s 1s 324142030e-09 0s 0s 324143750e-09 0s 0s 324147310e-09 1s 1s 324152270e-09 0s 0s 324154030e-09 0s 0s 324157550e-09 1s 1s 324162510e-09 0s 0s 324164310e-09 0s 0s 324167790e-09 1s 1s 324172750e-09 0s 0s 324174590e-09 0s 0s 324178030e-09 1s 1s 324182990e-09 0s 0s 324184870e-09 0s 0s 324188270e-09 1s 1s 324193230e-09 0s 0s 324195150e-09 0s 0s 324198510e-09 1s 1s 324203470e-09 0s 0s 324205430e-09 0s 0s 324208750e-09 1s 1s 324213710e-09 0s 0s 324215710e-09 0s 0s 324218990e-09 1s 1s 324223950e-09 0s 0s 324225990e-09 0s 0s 324229230e-09 1s 1s 324234190e-09 0s 0s 324236270e-09 0s 0s 324239470e-09 1s 1s 324244430e-09 0s 0s 324246550e-09 0s 0s 324249710e-09 1s 1s 324254670e-09 0s 0s 324256830e-09 0s 0s 324259950e-09 1s 1s 324264910e-09 0s 0s 324267110e-09 0s 0s 324270190e-09 1s 1s 324275150e-09 0s 0s 324277390e-09 0s 0s 324280430e-09 1s 1s 324285390e-09 0s 0s 324287670e-09 0s 0s 324290670e-09 1s 1s 324295630e-09 0s 0s 324297950e-09 0s 0s 324300910e-09 1s 1s 324305870e-09 0s 0s 324308230e-09 0s 0s 324311150e-09 1s 1s 324316110e-09 0s 0s 324318510e-09 0s 0s 324321390e-09 1s 1s 324326350e-09 0s 0s 324328790e-09 0s 0s 324331630e-09 1s 1s 324336590e-09 0s 0s 324339070e-09 0s 0s 324341870e-09 1s 1s 324346830e-09 0s 0s 324349350e-09 0s 0s 324352110e-09 1s 1s 324357070e-09 0s 0s 324359630e-09 0s 0s 324362350e-09 1s 1s 324367310e-09 0s 0s 324369910e-09 0s 0s 324372590e-09 1s 1s 324377550e-09 0s 0s 324380190e-09 0s 0s 324382830e-09 1s 1s 324387790e-09 0s 0s 324390470e-09 0s 0s 324393070e-09 1s 1s 324398030e-09 0s 0s 324400750e-09 0s 0s 324403310e-09 1s 1s 324408270e-09 0s 0s 324411030e-09 0s 0s 324413550e-09 1s 1s 324418510e-09 0s 0s 324421310e-09 0s 0s 324423790e-09 1s 1s 324428750e-09 0s 0s 324431590e-09 0s 0s 324434030e-09 1s 1s 324438990e-09 0s 0s 324441870e-09 0s 0s 324444270e-09 1s 1s 324449230e-09 0s 0s 324452150e-09 0s 0s 324454510e-09 1s 1s 324459470e-09 0s 0s 324462430e-09 0s 0s 324464750e-09 1s 1s 324469710e-09 0s 0s 324472710e-09 0s 0s 324474990e-09 1s 1s 324479950e-09 0s 0s 324482990e-09 0s 0s 324485230e-09 1s 1s 324490190e-09 0s 0s 324493270e-09 0s 0s 324495470e-09 1s 1s 324500430e-09 0s 0s 324503550e-09 0s 0s 324505710e-09 1s 1s 324510670e-09 0s 0s 324513830e-09 0s 0s 324515950e-09 1s 1s 324520910e-09 0s 0s 324524110e-09 0s 0s 324526190e-09 1s 1s 324531150e-09 0s 0s 324534390e-09 0s 0s 324536430e-09 1s 1s 324541390e-09 0s 0s 324544670e-09 0s 0s 324546670e-09 1s 1s 324551630e-09 0s 0s 324554950e-09 0s 0s 324556910e-09 1s 1s 324561870e-09 0s 0s 324565230e-09 0s 0s 324567150e-09 1s 1s 324572110e-09 0s 0s 324575510e-09 0s 0s 324577390e-09 1s 1s 324582350e-09 0s 0s 324585790e-09 0s 0s 324587630e-09 1s 1s 324592590e-09 0s 0s 324596070e-09 0s 0s 324597870e-09 1s 1s 324602830e-09 0s 0s 324606350e-09 0s 0s 324608110e-09 1s 1s 324613070e-09 0s 0s 324616630e-09 0s 0s 324618350e-09 1s 1s 324623310e-09 0s 0s 324626910e-09 0s 0s 324628590e-09 1s 1s 324633550e-09 0s 0s 324637190e-09 0s 0s 324638830e-09 1s 1s 324643790e-09 0s 0s 324647470e-09 0s 0s 324649070e-09 1s 1s 324654030e-09 0s 0s 324657750e-09 0s 0s 324659310e-09 1s 1s 324664270e-09 0s 0s 324668030e-09 0s 0s 324669550e-09 1s 1s 324674510e-09 0s 0s 324678310e-09 0s 0s 324679790e-09 1s 1s 324684750e-09 0s 0s 324688590e-09 0s 0s 324690030e-09 1s 1s 324694990e-09 0s 0s 324698870e-09 0s 0s 324700270e-09 1s 1s 324705230e-09 0s 0s 324709150e-09 0s 0s 324710510e-09 1s 1s 324715470e-09 0s 0s 324719430e-09 0s 0s 324720750e-09 1s 1s 324725710e-09 0s 0s 324729710e-09 0s 0s 324730990e-09 1s 1s 324735950e-09 0s 0s 324739990e-09 0s 0s 324741230e-09 1s 1s 324746190e-09 0s 0s 324750270e-09 0s 0s 324751470e-09 1s 1s 324756430e-09 0s 0s 324760550e-09 0s 0s 324761710e-09 1s 1s 324766670e-09 0s 0s 324770830e-09 0s 0s 324771950e-09 1s 1s 324776910e-09 0s 0s 324781110e-09 0s 0s 324782190e-09 1s 1s 324787150e-09 0s 0s 324791390e-09 0s 0s 324792430e-09 1s 1s 324797390e-09 0s 0s 324801670e-09 0s 0s 324802670e-09 1s 1s 324807630e-09 0s 0s 324811950e-09 0s 0s 324812910e-09 1s 1s 324817870e-09 0s 0s 324822230e-09 0s 0s 324823150e-09 1s 1s 324828110e-09 0s 0s 324832510e-09 0s 0s 324833390e-09 1s 1s 324838350e-09 0s 0s 324842790e-09 0s 0s 324843630e-09 1s 1s 324848590e-09 0s 0s 324853070e-09 0s 0s 324853870e-09 1s 1s 324858830e-09 0s 0s 324863350e-09 0s 0s 324864110e-09 1s 1s 324869070e-09 0s 0s 324873630e-09 0s 0s 324874350e-09 1s 1s 324879310e-09 0s 0s 324883910e-09 0s 0s 324884590e-09 1s 1s 324889550e-09 0s 0s 324894190e-09 0s 0s 324894830e-09 1s 1s 324899790e-09 0s 0s 324904470e-09 0s 0s 324905070e-09 1s 1s 324910030e-09 0s 0s 324914750e-09 0s 0s 324915310e-09 1s 1s 324920270e-09 0s 0s 324925030e-09 0s 0s 324925550e-09 1s 1s 324930510e-09 0s 0s 324935310e-09 0s 0s 324935790e-09 1s 1s 324940750e-09 0s 0s 324945590e-09 0s 0s 324946030e-09 1s 1s 324950990e-09 0s 0s 324955870e-09 0s 0s 324956270e-09 1s 1s 324961230e-09 0s 0s 324966150e-09 0s 0s 324966510e-09 1s 1s 324971470e-09 0s 0s 324976430e-09 0s 0s 324976750e-09 1s 1s 324981710e-09 0s 0s 324986710e-09 0s 0s 324986990e-09 1s 1s 324991950e-09 0s 0s 324996990e-09 0s 0s 324997230e-09 1s 1s 325002190e-09 0s 0s 325007270e-09 0s 0s 325007470e-09 1s 1s 325012430e-09 0s 0s 325017550e-09 0s 0s 325017710e-09 1s 1s 325022670e-09 0s 0s 325027830e-09 0s 0s 325027950e-09 1s 1s 325032910e-09 0s 0s 325038110e-09 0s 0s 325038190e-09 1s 1s 325043150e-09 0s 0s 325048390e-09 0s 0s 325048430e-09 1s 1s 325053390e-09 0s 0s 325058670e-09 1s 1s 325058710e-09 1s 1s 325063670e-09 0s 0s 325068910e-09 1s 1s 325068990e-09 1s 1s 325073910e-09 0s 0s 325079150e-09 1s 1s 325079270e-09 1s 1s 325084150e-09 0s 0s 325089390e-09 1s 1s 325089550e-09 1s 1s 325094390e-09 0s 0s 325099630e-09 1s 1s 325099830e-09 1s 1s 325104630e-09 0s 0s 325109870e-09 1s 1s 325110110e-09 1s 1s 325114870e-09 0s 0s 325120110e-09 1s 1s 325120390e-09 1s 1s 325125110e-09 0s 0s 325130350e-09 1s 1s 325130670e-09 1s 1s 325135350e-09 0s 0s 325140590e-09 1s 1s 325140950e-09 1s 1s 325145590e-09 0s 0s 325150830e-09 1s 1s 325151230e-09 1s 1s 325155830e-09 0s 0s 325161070e-09 1s 1s 325161510e-09 1s 1s 325166070e-09 0s 0s 325171310e-09 1s 1s 325171790e-09 1s 1s 325176310e-09 0s 0s 325181550e-09 1s 1s 325182070e-09 1s 1s 325186550e-09 0s 0s 325191790e-09 1s 1s 325192350e-09 1s 1s 325196790e-09 0s 0s 325202030e-09 1s 1s 325202630e-09 1s 1s 325207030e-09 0s 0s 325212270e-09 1s 1s 325212910e-09 1s 1s 325217270e-09 0s 0s 325222510e-09 1s 1s 325223190e-09 1s 1s 325227510e-09 0s 0s 325232750e-09 1s 1s 325233470e-09 1s 1s 325237750e-09 0s 0s 325242990e-09 1s 1s 325243750e-09 1s 1s 325247990e-09 0s 0s 325253230e-09 1s 1s 325254030e-09 1s 1s 325258230e-09 0s 0s 325263470e-09 1s 1s 325264310e-09 1s 1s 325268470e-09 0s 0s 325273710e-09 1s 1s 325274590e-09 1s 1s 325278710e-09 0s 0s 325283950e-09 1s 1s 325284870e-09 1s 1s 325288950e-09 0s 0s 325294190e-09 1s 1s 325295150e-09 1s 1s 325299190e-09 0s 0s 325304430e-09 1s 1s 325305430e-09 1s 1s 325309430e-09 0s 0s 325314670e-09 1s 1s 325315710e-09 1s 1s 325319670e-09 0s 0s 325324910e-09 1s 1s 325325990e-09 1s 1s 325329910e-09 0s 0s 325335150e-09 1s 1s 325336270e-09 1s 1s 325340150e-09 0s 0s 325345390e-09 1s 1s 325346550e-09 1s 1s 325350390e-09 0s 0s 325355630e-09 1s 1s 325356830e-09 1s 1s 325360630e-09 0s 0s 325365870e-09 1s 1s 325367110e-09 1s 1s 325370870e-09 0s 0s 325376110e-09 1s 1s 325377390e-09 1s 1s 325381110e-09 0s 0s 325386350e-09 1s 1s 325387670e-09 1s 1s 325391350e-09 0s 0s 325396590e-09 1s 1s 325397950e-09 1s 1s 325401590e-09 0s 0s 325406830e-09 1s 1s 325408230e-09 1s 1s 325411830e-09 0s 0s 325417070e-09 1s 1s 325418510e-09 1s 1s 325422070e-09 0s 0s 325427310e-09 1s 1s 325428790e-09 1s 1s 325432310e-09 0s 0s 325437550e-09 1s 1s 325439070e-09 1s 1s 325442550e-09 0s 0s 325447790e-09 1s 1s 325449350e-09 1s 1s 325452790e-09 0s 0s 325458030e-09 1s 1s 325459630e-09 1s 1s 325463030e-09 0s 0s 325468270e-09 1s 1s 325469910e-09 1s 1s 325473270e-09 0s 0s 325478510e-09 1s 1s 325480190e-09 1s 1s 325483510e-09 0s 0s 325488750e-09 1s 1s 325490470e-09 1s 1s 325493750e-09 0s 0s 325498990e-09 1s 1s 325500750e-09 1s 1s 325503990e-09 0s 0s 325509230e-09 1s 1s 325511030e-09 1s 1s 325514230e-09 0s 0s 325519470e-09 1s 1s 325521310e-09 1s 1s 325524470e-09 0s 0s 325529710e-09 1s 1s 325531590e-09 1s 1s 325534710e-09 0s 0s 325539950e-09 1s 1s 325541870e-09 1s 1s 325544950e-09 0s 0s 325550190e-09 1s 1s 325552150e-09 1s 1s 325555190e-09 0s 0s 325560430e-09 1s 1s 325562430e-09 1s 1s 325565430e-09 0s 0s 325570670e-09 1s 1s 325572710e-09 1s 1s 325575670e-09 0s 0s 325580910e-09 1s 1s 325582990e-09 1s 1s 325585910e-09 0s 0s 325591150e-09 1s 1s 325593270e-09 1s 1s 325596150e-09 0s 0s 325601390e-09 1s 1s 325603550e-09 1s 1s 325606390e-09 0s 0s 325611630e-09 1s 1s 325613830e-09 1s 1s 325616630e-09 0s 0s 325621870e-09 1s 1s 325624110e-09 1s 1s 325626870e-09 0s 0s 325632110e-09 1s 1s 325634390e-09 1s 1s 325637110e-09 0s 0s 325642350e-09 1s 1s 325644670e-09 1s 1s 325647350e-09 0s 0s 325652590e-09 1s 1s 325654950e-09 1s 1s 325657590e-09 0s 0s 325662830e-09 1s 1s 325665230e-09 1s 1s 325667830e-09 0s 0s 325673070e-09 1s 1s 325675510e-09 1s 1s 325678070e-09 0s 0s 325683310e-09 1s 1s 325685790e-09 1s 1s 325688310e-09 0s 0s 325693550e-09 1s 1s 325696070e-09 1s 1s 325698550e-09 0s 0s 325703790e-09 1s 1s 325706350e-09 1s 1s 325708790e-09 0s 0s 325714030e-09 1s 1s 325716630e-09 1s 1s 325719030e-09 0s 0s 325724270e-09 1s 1s 325726910e-09 1s 1s 325729270e-09 0s 0s 325734510e-09 1s 1s 325737190e-09 1s 1s 325739510e-09 0s 0s 325744750e-09 1s 1s 325747470e-09 1s 1s 325749750e-09 0s 0s 325754990e-09 1s 1s 325757750e-09 1s 1s 325759990e-09 0s 0s 325765230e-09 1s 1s 325768030e-09 1s 1s 325770230e-09 0s 0s 325775470e-09 1s 1s 325778310e-09 1s 1s 325780470e-09 0s 0s 325785710e-09 1s 1s 325788590e-09 1s 1s 325790710e-09 0s 0s 325795950e-09 1s 1s 325798870e-09 1s 1s 325800950e-09 0s 0s 325806190e-09 1s 1s 325809150e-09 1s 1s 325811190e-09 0s 0s 325816430e-09 1s 1s 325819430e-09 1s 1s 325821430e-09 0s 0s 325826670e-09 1s 1s 325829710e-09 1s 1s 325831670e-09 0s 0s 325836910e-09 1s 1s 325839990e-09 1s 1s 325841910e-09 0s 0s 325847150e-09 1s 1s 325850270e-09 1s 1s 325852150e-09 0s 0s 325857390e-09 1s 1s 325860550e-09 1s 1s 325862390e-09 0s 0s 325867630e-09 1s 1s 325870830e-09 1s 1s 325872630e-09 0s 0s 325877870e-09 1s 1s 325881110e-09 1s 1s 325882870e-09 0s 0s 325888110e-09 1s 1s 325891390e-09 1s 1s 325893110e-09 0s 0s 325898350e-09 1s 1s 325901670e-09 1s 1s 325903350e-09 0s 0s 325908590e-09 1s 1s 325911950e-09 1s 1s 325913590e-09 0s 0s 325918830e-09 1s 1s 325922230e-09 1s 1s 325923830e-09 0s 0s 325929070e-09 1s 1s 325932510e-09 1s 1s 325934070e-09 0s 0s 325939310e-09 1s 1s 325942790e-09 1s 1s 325944310e-09 0s 0s 325949550e-09 1s 1s 325953070e-09 1s 1s 325954550e-09 0s 0s 325959790e-09 1s 1s 325963350e-09 1s 1s 325964790e-09 0s 0s 325970030e-09 1s 1s 325973630e-09 1s 1s 325975030e-09 0s 0s 325980270e-09 1s 1s 325983910e-09 1s 1s 325985270e-09 0s 0s 325990510e-09 1s 1s 325994190e-09 1s 1s 325995510e-09 0s 0s 326000750e-09 1s 1s 326004470e-09 1s 1s 326005750e-09 0s 0s 326010990e-09 1s 1s 326014750e-09 1s 1s 326015990e-09 0s 0s 326021230e-09 1s 1s 326025030e-09 1s 1s 326026230e-09 0s 0s 326031470e-09 1s 1s 326035310e-09 1s 1s 326036470e-09 0s 0s 326041710e-09 1s 1s 326045590e-09 1s 1s 326046710e-09 0s 0s 326051950e-09 1s 1s 326055870e-09 1s 1s 326056950e-09 0s 0s 326062190e-09 1s 1s 326066150e-09 1s 1s 326067190e-09 0s 0s 326072430e-09 1s 1s 326076430e-09 1s 1s 326077430e-09 0s 0s 326082670e-09 1s 1s 326086710e-09 1s 1s 326087670e-09 0s 0s 326092910e-09 1s 1s 326096990e-09 1s 1s 326097910e-09 0s 0s 326103150e-09 1s 1s 326107270e-09 1s 1s 326108150e-09 0s 0s 326113390e-09 1s 1s 326117550e-09 1s 1s 326118390e-09 0s 0s 326123630e-09 1s 1s 326127830e-09 1s 1s 326128630e-09 0s 0s 326133870e-09 1s 1s 326138110e-09 1s 1s 326138870e-09 0s 0s 326144110e-09 1s 1s 326148390e-09 1s 1s 326149110e-09 0s 0s 326154350e-09 1s 1s 326158670e-09 1s 1s 326159350e-09 0s 0s 326164590e-09 1s 1s 326168950e-09 1s 1s 326169590e-09 0s 0s 326174830e-09 1s 1s 326179230e-09 1s 1s 326179830e-09 0s 0s 326185070e-09 1s 1s 326189510e-09 1s 1s 326190070e-09 0s 0s 326195310e-09 1s 1s 326199790e-09 1s 1s 326200310e-09 0s 0s 326205550e-09 1s 1s 326210070e-09 1s 1s 326210550e-09 0s 0s 326215790e-09 1s 1s 326220350e-09 1s 1s 326220790e-09 0s 0s 326226030e-09 1s 1s 326230630e-09 1s 1s 326231030e-09 0s 0s 326236270e-09 1s 1s 326240910e-09 1s 1s 326241270e-09 0s 0s 326246510e-09 1s 1s 326251190e-09 1s 1s 326251510e-09 0s 0s 326256750e-09 1s 1s 326261470e-09 1s 1s 326261750e-09 0s 0s 326266990e-09 1s 1s 326271750e-09 1s 1s 326271990e-09 0s 0s 326277230e-09 1s 1s 326282030e-09 1s 1s 326282230e-09 0s 0s 326287470e-09 1s 1s 326292310e-09 1s 1s 326292470e-09 0s 0s 326297710e-09 1s 1s 326302590e-09 1s 1s 326302710e-09 0s 0s 326307950e-09 1s 1s 326312870e-09 1s 1s 326312950e-09 0s 0s 326318190e-09 1s 1s 326323150e-09 1s 1s 326323190e-09 0s 0s 326328430e-09 1s 1s 326333430e-09 0s 0s 326338670e-09 1s 1s 326343670e-09 0s 0s 326343710e-09 0s 0s 326348910e-09 1s 1s 326353910e-09 0s 0s 326353990e-09 0s 0s 326359150e-09 1s 1s 326364150e-09 0s 0s 326364270e-09 0s 0s 326369390e-09 1s 1s 326374390e-09 0s 0s 326374550e-09 0s 0s 326379630e-09 1s 1s 326384630e-09 0s 0s 326384830e-09 0s 0s 326389870e-09 1s 1s 326394870e-09 0s 0s 326395110e-09 0s 0s 326400110e-09 1s 1s 326405110e-09 0s 0s 326405390e-09 0s 0s 326410350e-09 1s 1s 326415350e-09 0s 0s 326415670e-09 0s 0s 326420590e-09 1s 1s 326425590e-09 0s 0s 326425950e-09 0s 0s 326430830e-09 1s 1s 326435830e-09 0s 0s 326436230e-09 0s 0s 326441070e-09 1s 1s 326446070e-09 0s 0s 326446510e-09 0s 0s 326451310e-09 1s 1s 326456310e-09 0s 0s 326456790e-09 0s 0s 326461550e-09 1s 1s 326466550e-09 0s 0s 326467070e-09 0s 0s 326471790e-09 1s 1s 326476790e-09 0s 0s 326477350e-09 0s 0s 326482030e-09 1s 1s 326487030e-09 0s 0s 326487630e-09 0s 0s 326492270e-09 1s 1s 326497270e-09 0s 0s 326497910e-09 0s 0s 326502510e-09 1s 1s 326507510e-09 0s 0s 326508190e-09 0s 0s 326512750e-09 1s 1s 326517750e-09 0s 0s 326518470e-09 0s 0s 326522990e-09 1s 1s 326527990e-09 0s 0s 326528750e-09 0s 0s 326533230e-09 1s 1s 326538230e-09 0s 0s 326539030e-09 0s 0s 326543470e-09 1s 1s 326548470e-09 0s 0s 326549310e-09 0s 0s 326553710e-09 1s 1s 326558710e-09 0s 0s 326559590e-09 0s 0s 326563950e-09 1s 1s 326568950e-09 0s 0s 326569870e-09 0s 0s 326574190e-09 1s 1s 326579190e-09 0s 0s 326580150e-09 0s 0s 326584430e-09 1s 1s 326589430e-09 0s 0s 326590430e-09 0s 0s 326594670e-09 1s 1s 326599670e-09 0s 0s 326600710e-09 0s 0s 326604910e-09 1s 1s 326609910e-09 0s 0s 326610990e-09 0s 0s 326615150e-09 1s 1s 326620150e-09 0s 0s 326621270e-09 0s 0s 326625390e-09 1s 1s 326630390e-09 0s 0s 326631550e-09 0s 0s 326635630e-09 1s 1s 326640630e-09 0s 0s 326641830e-09 0s 0s 326645870e-09 1s 1s 326650870e-09 0s 0s 326652110e-09 0s 0s 326656110e-09 1s 1s 326661110e-09 0s 0s 326662390e-09 0s 0s 326666350e-09 1s 1s 326671350e-09 0s 0s 326672670e-09 0s 0s 326676590e-09 1s 1s 326681590e-09 0s 0s 326682950e-09 0s 0s 326686830e-09 1s 1s 326691830e-09 0s 0s 326693230e-09 0s 0s 326697070e-09 1s 1s 326702070e-09 0s 0s 326703510e-09 0s 0s 326707310e-09 1s 1s 326712310e-09 0s 0s 326713790e-09 0s 0s 326717550e-09 1s 1s 326722550e-09 0s 0s 326724070e-09 0s 0s 326727790e-09 1s 1s 326732790e-09 0s 0s 326734350e-09 0s 0s 326738030e-09 1s 1s 326743030e-09 0s 0s 326744630e-09 0s 0s 326748270e-09 1s 1s 326753270e-09 0s 0s 326754910e-09 0s 0s 326758510e-09 1s 1s 326763510e-09 0s 0s 326765190e-09 0s 0s 326768750e-09 1s 1s 326773750e-09 0s 0s 326775470e-09 0s 0s 326778990e-09 1s 1s 326783990e-09 0s 0s 326785750e-09 0s 0s 326789230e-09 1s 1s 326794230e-09 0s 0s 326796030e-09 0s 0s 326799470e-09 1s 1s 326804470e-09 0s 0s 326806310e-09 0s 0s 326809710e-09 1s 1s 326814710e-09 0s 0s 326816590e-09 0s 0s 326819950e-09 1s 1s 326824950e-09 0s 0s 326826870e-09 0s 0s 326830190e-09 1s 1s 326835190e-09 0s 0s 326837150e-09 0s 0s 326840430e-09 1s 1s 326845430e-09 0s 0s 326847430e-09 0s 0s 326850670e-09 1s 1s 326855670e-09 0s 0s 326857710e-09 0s 0s 326860910e-09 1s 1s 326865910e-09 0s 0s 326867990e-09 0s 0s 326871150e-09 1s 1s 326876150e-09 0s 0s 326878270e-09 0s 0s 326881390e-09 1s 1s 326886390e-09 0s 0s 326888550e-09 0s 0s 326891630e-09 1s 1s 326896630e-09 0s 0s 326898830e-09 0s 0s 326901870e-09 1s 1s 326906870e-09 0s 0s 326909110e-09 0s 0s 326912110e-09 1s 1s 326917110e-09 0s 0s 326919390e-09 0s 0s 326922350e-09 1s 1s 326927350e-09 0s 0s 326929670e-09 0s 0s 326932590e-09 1s 1s 326937590e-09 0s 0s 326939950e-09 0s 0s 326942830e-09 1s 1s 326947830e-09 0s 0s 326950230e-09 0s 0s 326953070e-09 1s 1s 326958070e-09 0s 0s 326960510e-09 0s 0s 326963310e-09 1s 1s 326968310e-09 0s 0s 326970790e-09 0s 0s 326973550e-09 1s 1s 326978550e-09 0s 0s 326981070e-09 0s 0s 326983790e-09 1s 1s 326988790e-09 0s 0s 326991350e-09 0s 0s 326994030e-09 1s 1s 326999030e-09 0s 0s 327001630e-09 0s 0s 327004270e-09 1s 1s 327009270e-09 0s 0s 327011910e-09 0s 0s 327014510e-09 1s 1s 327019510e-09 0s 0s 327022190e-09 0s 0s 327024750e-09 1s 1s 327029750e-09 0s 0s 327032470e-09 0s 0s 327034990e-09 1s 1s 327039990e-09 0s 0s 327042750e-09 0s 0s 327045230e-09 1s 1s 327050230e-09 0s 0s 327053030e-09 0s 0s 327055470e-09 1s 1s 327060470e-09 0s 0s 327063310e-09 0s 0s 327065710e-09 1s 1s 327070710e-09 0s 0s 327073590e-09 0s 0s 327075950e-09 1s 1s 327080950e-09 0s 0s 327083870e-09 0s 0s 327086190e-09 1s 1s 327091190e-09 0s 0s 327094150e-09 0s 0s 327096430e-09 1s 1s 327101430e-09 0s 0s 327104430e-09 0s 0s 327106670e-09 1s 1s 327111670e-09 0s 0s 327114710e-09 0s 0s 327116910e-09 1s 1s 327121910e-09 0s 0s 327124990e-09 0s 0s 327127150e-09 1s 1s 327132150e-09 0s 0s 327135270e-09 0s 0s 327137390e-09 1s 1s 327142390e-09 0s 0s 327145550e-09 0s 0s 327147630e-09 1s 1s 327152630e-09 0s 0s 327155830e-09 0s 0s 327157870e-09 1s 1s 327162870e-09 0s 0s 327166110e-09 0s 0s 327168110e-09 1s 1s 327173110e-09 0s 0s 327176390e-09 0s 0s 327178350e-09 1s 1s 327183350e-09 0s 0s 327186670e-09 0s 0s 327188590e-09 1s 1s 327193590e-09 0s 0s 327196950e-09 0s 0s 327198830e-09 1s 1s 327203830e-09 0s 0s 327207230e-09 0s 0s 327209070e-09 1s 1s 327214070e-09 0s 0s 327217510e-09 0s 0s 327219310e-09 1s 1s 327224310e-09 0s 0s 327227790e-09 0s 0s 327229550e-09 1s 1s 327234550e-09 0s 0s 327238070e-09 0s 0s 327239790e-09 1s 1s 327244790e-09 0s 0s 327248350e-09 0s 0s 327250030e-09 1s 1s 327255030e-09 0s 0s 327258630e-09 0s 0s 327260270e-09 1s 1s 327265270e-09 0s 0s 327268910e-09 0s 0s 327270510e-09 1s 1s 327275510e-09 0s 0s 327279190e-09 0s 0s 327280750e-09 1s 1s 327285750e-09 0s 0s 327289470e-09 0s 0s 327290990e-09 1s 1s 327295990e-09 0s 0s 327299750e-09 0s 0s 327301230e-09 1s 1s 327306230e-09 0s 0s 327310030e-09 0s 0s 327311470e-09 1s 1s 327316470e-09 0s 0s 327320310e-09 0s 0s 327321710e-09 1s 1s 327326710e-09 0s 0s 327330590e-09 0s 0s 327331950e-09 1s 1s 327336950e-09 0s 0s 327340870e-09 0s 0s 327342190e-09 1s 1s 327347190e-09 0s 0s 327351150e-09 0s 0s 327352430e-09 1s 1s 327357430e-09 0s 0s 327361430e-09 0s 0s 327362670e-09 1s 1s 327367670e-09 0s 0s 327371710e-09 0s 0s 327372910e-09 1s 1s 327377910e-09 0s 0s 327381990e-09 0s 0s 327383150e-09 1s 1s 327388150e-09 0s 0s 327392270e-09 0s 0s 327393390e-09 1s 1s 327398390e-09 0s 0s 327402550e-09 0s 0s 327403630e-09 1s 1s 327408630e-09 0s 0s 327412830e-09 0s 0s 327413870e-09 1s 1s 327418870e-09 0s 0s 327423110e-09 0s 0s 327424110e-09 1s 1s 327429110e-09 0s 0s 327433390e-09 0s 0s 327434350e-09 1s 1s 327439350e-09 0s 0s 327443670e-09 0s 0s 327444590e-09 1s 1s 327449590e-09 0s 0s 327453950e-09 0s 0s 327454830e-09 1s 1s 327459830e-09 0s 0s 327464230e-09 0s 0s 327465070e-09 1s 1s 327470070e-09 0s 0s 327474510e-09 0s 0s 327475310e-09 1s 1s 327480310e-09 0s 0s 327484790e-09 0s 0s 327485550e-09 1s 1s 327490550e-09 0s 0s 327495070e-09 0s 0s 327495790e-09 1s 1s 327500790e-09 0s 0s 327505350e-09 0s 0s 327506030e-09 1s 1s 327511030e-09 0s 0s 327515630e-09 0s 0s 327516270e-09 1s 1s 327521270e-09 0s 0s 327525910e-09 0s 0s 327526510e-09 1s 1s 327531510e-09 0s 0s 327536190e-09 0s 0s 327536750e-09 1s 1s 327541750e-09 0s 0s 327546470e-09 0s 0s 327546990e-09 1s 1s 327551990e-09 0s 0s 327556750e-09 0s 0s 327557230e-09 1s 1s 327562230e-09 0s 0s 327567030e-09 0s 0s 327567470e-09 1s 1s 327572470e-09 0s 0s 327577310e-09 0s 0s 327577710e-09 1s 1s 327582710e-09 0s 0s 327587590e-09 0s 0s 327587950e-09 1s 1s 327592950e-09 0s 0s 327597870e-09 0s 0s 327598190e-09 1s 1s 327603190e-09 0s 0s 327608150e-09 0s 0s 327608430e-09 1s 1s 327613430e-09 0s 0s 327618430e-09 0s 0s 327618670e-09 1s 1s 327623670e-09 0s 0s 327628710e-09 0s 0s 327628910e-09 1s 1s 327633910e-09 0s 0s 327638990e-09 0s 0s 327639150e-09 1s 1s 327644150e-09 0s 0s 327649270e-09 0s 0s 327649390e-09 1s 1s 327654390e-09 0s 0s 327659550e-09 0s 0s 327659630e-09 1s 1s 327664630e-09 0s 0s 327669830e-09 0s 0s 327669870e-09 1s 1s 327674870e-09 0s 0s 327680110e-09 1s 1s 327680150e-09 1s 1s 327685150e-09 0s 0s 327690350e-09 1s 1s 327690430e-09 1s 1s 327695390e-09 0s 0s 327700590e-09 1s 1s 327700710e-09 1s 1s 327705630e-09 0s 0s 327710830e-09 1s 1s 327710990e-09 1s 1s 327715870e-09 0s 0s 327721070e-09 1s 1s 327721270e-09 1s 1s 327726110e-09 0s 0s 327731310e-09 1s 1s 327731550e-09 1s 1s 327736350e-09 0s 0s 327741550e-09 1s 1s 327741830e-09 1s 1s 327746590e-09 0s 0s 327751790e-09 1s 1s 327752110e-09 1s 1s 327756830e-09 0s 0s 327762030e-09 1s 1s 327762390e-09 1s 1s 327767070e-09 0s 0s 327772270e-09 1s 1s 327772670e-09 1s 1s 327777310e-09 0s 0s 327782510e-09 1s 1s 327782950e-09 1s 1s 327787550e-09 0s 0s 327792750e-09 1s 1s 327793230e-09 1s 1s 327797790e-09 0s 0s 327802990e-09 1s 1s 327803510e-09 1s 1s 327808030e-09 0s 0s 327813230e-09 1s 1s 327813790e-09 1s 1s 327818270e-09 0s 0s 327823470e-09 1s 1s 327824070e-09 1s 1s 327828510e-09 0s 0s 327833710e-09 1s 1s 327834350e-09 1s 1s 327838750e-09 0s 0s 327843950e-09 1s 1s 327844630e-09 1s 1s 327848990e-09 0s 0s 327854190e-09 1s 1s 327854910e-09 1s 1s 327859230e-09 0s 0s 327864430e-09 1s 1s 327865190e-09 1s 1s 327869470e-09 0s 0s 327874670e-09 1s 1s 327875470e-09 1s 1s 327879710e-09 0s 0s 327884910e-09 1s 1s 327885750e-09 1s 1s 327889950e-09 0s 0s 327895150e-09 1s 1s 327896030e-09 1s 1s 327900190e-09 0s 0s 327905390e-09 1s 1s 327906310e-09 1s 1s 327910430e-09 0s 0s 327915630e-09 1s 1s 327916590e-09 1s 1s 327920670e-09 0s 0s 327925870e-09 1s 1s 327926870e-09 1s 1s 327930910e-09 0s 0s 327936110e-09 1s 1s 327937150e-09 1s 1s 327941150e-09 0s 0s 327946350e-09 1s 1s 327947430e-09 1s 1s 327951390e-09 0s 0s 327956590e-09 1s 1s 327957710e-09 1s 1s 327961630e-09 0s 0s 327966830e-09 1s 1s 327967990e-09 1s 1s 327971870e-09 0s 0s 327977070e-09 1s 1s 327978270e-09 1s 1s 327982110e-09 0s 0s 327987310e-09 1s 1s 327988550e-09 1s 1s 327992350e-09 0s 0s 327997550e-09 1s 1s 327998830e-09 1s 1s 328002590e-09 0s 0s 328007790e-09 1s 1s 328009110e-09 1s 1s 328012830e-09 0s 0s 328018030e-09 1s 1s 328019390e-09 1s 1s 328023070e-09 0s 0s 328028270e-09 1s 1s 328029670e-09 1s 1s 328033310e-09 0s 0s 328038510e-09 1s 1s 328039950e-09 1s 1s 328043550e-09 0s 0s 328048750e-09 1s 1s 328050230e-09 1s 1s 328053790e-09 0s 0s 328058990e-09 1s 1s 328060510e-09 1s 1s 328064030e-09 0s 0s 328069230e-09 1s 1s 328070790e-09 1s 1s 328074270e-09 0s 0s 328079470e-09 1s 1s 328081070e-09 1s 1s 328084510e-09 0s 0s 328089710e-09 1s 1s 328091350e-09 1s 1s 328094750e-09 0s 0s 328099950e-09 1s 1s 328101630e-09 1s 1s 328104990e-09 0s 0s 328110190e-09 1s 1s 328111910e-09 1s 1s 328115230e-09 0s 0s 328120430e-09 1s 1s 328122190e-09 1s 1s 328125470e-09 0s 0s 328130670e-09 1s 1s 328132470e-09 1s 1s 328135710e-09 0s 0s 328140910e-09 1s 1s 328142750e-09 1s 1s 328145950e-09 0s 0s 328151150e-09 1s 1s 328153030e-09 1s 1s 328156190e-09 0s 0s 328161390e-09 1s 1s 328163310e-09 1s 1s 328166430e-09 0s 0s 328171630e-09 1s 1s 328173590e-09 1s 1s 328176670e-09 0s 0s 328181870e-09 1s 1s 328183870e-09 1s 1s 328186910e-09 0s 0s 328192110e-09 1s 1s 328194150e-09 1s 1s 328197150e-09 0s 0s 328202350e-09 1s 1s 328204430e-09 1s 1s 328207390e-09 0s 0s 328212590e-09 1s 1s 328214710e-09 1s 1s 328217630e-09 0s 0s 328222830e-09 1s 1s 328224990e-09 1s 1s 328227870e-09 0s 0s 328233070e-09 1s 1s 328235270e-09 1s 1s 328238110e-09 0s 0s 328243310e-09 1s 1s 328245550e-09 1s 1s 328248350e-09 0s 0s 328253550e-09 1s 1s 328255830e-09 1s 1s 328258590e-09 0s 0s 328263790e-09 1s 1s 328266110e-09 1s 1s 328268830e-09 0s 0s 328274030e-09 1s 1s 328276390e-09 1s 1s 328279070e-09 0s 0s 328284270e-09 1s 1s 328286670e-09 1s 1s 328289310e-09 0s 0s 328294510e-09 1s 1s 328296950e-09 1s 1s 328299550e-09 0s 0s 328304750e-09 1s 1s 328307230e-09 1s 1s 328309790e-09 0s 0s 328314990e-09 1s 1s 328317510e-09 1s 1s 328320030e-09 0s 0s 328325230e-09 1s 1s 328327790e-09 1s 1s 328330270e-09 0s 0s 328335470e-09 1s 1s 328338070e-09 1s 1s 328340510e-09 0s 0s 328345710e-09 1s 1s 328348350e-09 1s 1s 328350750e-09 0s 0s 328355950e-09 1s 1s 328358630e-09 1s 1s 328360990e-09 0s 0s 328366190e-09 1s 1s 328368910e-09 1s 1s 328371230e-09 0s 0s 328376430e-09 1s 1s 328379190e-09 1s 1s 328381470e-09 0s 0s 328386670e-09 1s 1s 328389470e-09 1s 1s 328391710e-09 0s 0s 328396910e-09 1s 1s 328399750e-09 1s 1s 328401950e-09 0s 0s 328407150e-09 1s 1s 328410030e-09 1s 1s 328412190e-09 0s 0s 328417390e-09 1s 1s 328420310e-09 1s 1s 328422430e-09 0s 0s 328427630e-09 1s 1s 328430590e-09 1s 1s 328432670e-09 0s 0s 328437870e-09 1s 1s 328440870e-09 1s 1s 328442910e-09 0s 0s 328448110e-09 1s 1s 328451150e-09 1s 1s 328453150e-09 0s 0s 328458350e-09 1s 1s 328461430e-09 1s 1s 328463390e-09 0s 0s 328468590e-09 1s 1s 328471710e-09 1s 1s 328473630e-09 0s 0s 328478830e-09 1s 1s 328481990e-09 1s 1s 328483870e-09 0s 0s 328489070e-09 1s 1s 328492270e-09 1s 1s 328494110e-09 0s 0s 328499310e-09 1s 1s 328502550e-09 1s 1s 328504350e-09 0s 0s 328509550e-09 1s 1s 328512830e-09 1s 1s 328514590e-09 0s 0s 328519790e-09 1s 1s 328523110e-09 1s 1s 328524830e-09 0s 0s 328530030e-09 1s 1s 328533390e-09 1s 1s 328535070e-09 0s 0s 328540270e-09 1s 1s 328543670e-09 1s 1s 328545310e-09 0s 0s 328550510e-09 1s 1s 328553950e-09 1s 1s 328555550e-09 0s 0s 328560750e-09 1s 1s 328564230e-09 1s 1s 328565790e-09 0s 0s 328570990e-09 1s 1s 328574510e-09 1s 1s 328576030e-09 0s 0s 328581230e-09 1s 1s 328584790e-09 1s 1s 328586270e-09 0s 0s 328591470e-09 1s 1s 328595070e-09 1s 1s 328596510e-09 0s 0s 328601710e-09 1s 1s 328605350e-09 1s 1s 328606750e-09 0s 0s 328611950e-09 1s 1s 328615630e-09 1s 1s 328616990e-09 0s 0s 328622190e-09 1s 1s 328625910e-09 1s 1s 328627230e-09 0s 0s 328632430e-09 1s 1s 328636190e-09 1s 1s 328637470e-09 0s 0s 328642670e-09 1s 1s 328646470e-09 1s 1s 328647710e-09 0s 0s 328652910e-09 1s 1s 328656750e-09 1s 1s 328657950e-09 0s 0s 328663150e-09 1s 1s 328667030e-09 1s 1s 328668190e-09 0s 0s 328673390e-09 1s 1s 328677310e-09 1s 1s 328678430e-09 0s 0s 328683630e-09 1s 1s 328687590e-09 1s 1s 328688670e-09 0s 0s 328693870e-09 1s 1s 328697870e-09 1s 1s 328698910e-09 0s 0s 328704110e-09 1s 1s 328708150e-09 1s 1s 328709150e-09 0s 0s 328714350e-09 1s 1s 328718430e-09 1s 1s 328719390e-09 0s 0s 328724590e-09 1s 1s 328728710e-09 1s 1s 328729630e-09 0s 0s 328734830e-09 1s 1s 328738990e-09 1s 1s 328739870e-09 0s 0s 328745070e-09 1s 1s 328749270e-09 1s 1s 328750110e-09 0s 0s 328755310e-09 1s 1s 328759550e-09 1s 1s 328760350e-09 0s 0s 328765550e-09 1s 1s 328769830e-09 1s 1s 328770590e-09 0s 0s 328775790e-09 1s 1s 328780110e-09 1s 1s 328780830e-09 0s 0s 328786030e-09 1s 1s 328790390e-09 1s 1s 328791070e-09 0s 0s 328796270e-09 1s 1s 328800670e-09 1s 1s 328801310e-09 0s 0s 328806510e-09 1s 1s 328810950e-09 1s 1s 328811550e-09 0s 0s 328816750e-09 1s 1s 328821230e-09 1s 1s 328821790e-09 0s 0s 328826990e-09 1s 1s 328831510e-09 1s 1s 328832030e-09 0s 0s 328837230e-09 1s 1s 328841790e-09 1s 1s 328842270e-09 0s 0s 328847470e-09 1s 1s 328852070e-09 1s 1s 328852510e-09 0s 0s 328857710e-09 1s 1s 328862350e-09 1s 1s 328862750e-09 0s 0s 328867950e-09 1s 1s 328872630e-09 1s 1s 328872990e-09 0s 0s 328878190e-09 1s 1s 328882910e-09 1s 1s 328883230e-09 0s 0s 328888430e-09 1s 1s 328893190e-09 1s 1s 328893470e-09 0s 0s 328898670e-09 1s 1s 328903470e-09 1s 1s 328903710e-09 0s 0s 328908910e-09 1s 1s 328913750e-09 1s 1s 328913950e-09 0s 0s 328919150e-09 1s 1s 328924030e-09 1s 1s 328924190e-09 0s 0s 328929390e-09 1s 1s 328934310e-09 1s 1s 328934430e-09 0s 0s 328939630e-09 1s 1s 328944590e-09 1s 1s 328944670e-09 0s 0s 328949870e-09 1s 1s 328954870e-09 1s 1s 328954910e-09 0s 0s 328960110e-09 1s 1s 328965150e-09 0s 0s 328970350e-09 1s 1s 328975390e-09 0s 0s 328975430e-09 0s 0s 328980590e-09 1s 1s 328985630e-09 0s 0s 328985710e-09 0s 0s 328990830e-09 1s 1s 328995870e-09 0s 0s 328995990e-09 0s 0s 329001070e-09 1s 1s 329006110e-09 0s 0s 329006270e-09 0s 0s 329011310e-09 1s 1s 329016350e-09 0s 0s 329016550e-09 0s 0s 329021550e-09 1s 1s 329026590e-09 0s 0s 329026830e-09 0s 0s 329031790e-09 1s 1s 329036830e-09 0s 0s 329037110e-09 0s 0s 329042030e-09 1s 1s 329047070e-09 0s 0s 329047390e-09 0s 0s 329052270e-09 1s 1s 329057310e-09 0s 0s 329057670e-09 0s 0s 329062510e-09 1s 1s 329067550e-09 0s 0s 329067950e-09 0s 0s 329072750e-09 1s 1s 329077790e-09 0s 0s 329078230e-09 0s 0s 329082990e-09 1s 1s 329088030e-09 0s 0s 329088510e-09 0s 0s 329093230e-09 1s 1s 329098270e-09 0s 0s 329098790e-09 0s 0s 329103470e-09 1s 1s 329108510e-09 0s 0s 329109070e-09 0s 0s 329113710e-09 1s 1s 329118750e-09 0s 0s 329119350e-09 0s 0s 329123950e-09 1s 1s 329128990e-09 0s 0s 329129630e-09 0s 0s 329134190e-09 1s 1s 329139230e-09 0s 0s 329139910e-09 0s 0s 329144430e-09 1s 1s 329149470e-09 0s 0s 329150190e-09 0s 0s 329154670e-09 1s 1s 329159710e-09 0s 0s 329160470e-09 0s 0s 329164910e-09 1s 1s 329169950e-09 0s 0s 329170750e-09 0s 0s 329175150e-09 1s 1s 329180190e-09 0s 0s 329181030e-09 0s 0s 329185390e-09 1s 1s 329190430e-09 0s 0s 329191310e-09 0s 0s 329195630e-09 1s 1s 329200670e-09 0s 0s 329201590e-09 0s 0s 329205870e-09 1s 1s 329210910e-09 0s 0s 329211870e-09 0s 0s 329216110e-09 1s 1s 329221150e-09 0s 0s 329222150e-09 0s 0s 329226350e-09 1s 1s 329231390e-09 0s 0s 329232430e-09 0s 0s 329236590e-09 1s 1s 329241630e-09 0s 0s 329242710e-09 0s 0s 329246830e-09 1s 1s 329251870e-09 0s 0s 329252990e-09 0s 0s 329257070e-09 1s 1s 329262110e-09 0s 0s 329263270e-09 0s 0s 329267310e-09 1s 1s 329272350e-09 0s 0s 329273550e-09 0s 0s 329277550e-09 1s 1s 329282590e-09 0s 0s 329283830e-09 0s 0s 329287790e-09 1s 1s 329292830e-09 0s 0s 329294110e-09 0s 0s 329298030e-09 1s 1s 329303070e-09 0s 0s 329304390e-09 0s 0s 329308270e-09 1s 1s 329313310e-09 0s 0s 329314670e-09 0s 0s 329318510e-09 1s 1s 329323550e-09 0s 0s 329324950e-09 0s 0s 329328750e-09 1s 1s 329333790e-09 0s 0s 329335230e-09 0s 0s 329338990e-09 1s 1s 329344030e-09 0s 0s 329345510e-09 0s 0s 329349230e-09 1s 1s 329354270e-09 0s 0s 329355790e-09 0s 0s 329359470e-09 1s 1s 329364510e-09 0s 0s 329366070e-09 0s 0s 329369710e-09 1s 1s 329374750e-09 0s 0s 329376350e-09 0s 0s 329379950e-09 1s 1s 329384990e-09 0s 0s 329386630e-09 0s 0s 329390190e-09 1s 1s 329395230e-09 0s 0s 329396910e-09 0s 0s 329400430e-09 1s 1s 329405470e-09 0s 0s 329407190e-09 0s 0s 329410670e-09 1s 1s 329415710e-09 0s 0s 329417470e-09 0s 0s 329420910e-09 1s 1s 329425950e-09 0s 0s 329427750e-09 0s 0s 329431150e-09 1s 1s 329436190e-09 0s 0s 329438030e-09 0s 0s 329441390e-09 1s 1s 329446430e-09 0s 0s 329448310e-09 0s 0s 329451630e-09 1s 1s 329456670e-09 0s 0s 329458590e-09 0s 0s 329461870e-09 1s 1s 329466910e-09 0s 0s 329468870e-09 0s 0s 329472110e-09 1s 1s 329477150e-09 0s 0s 329479150e-09 0s 0s 329482350e-09 1s 1s 329487390e-09 0s 0s 329489430e-09 0s 0s 329492590e-09 1s 1s 329497630e-09 0s 0s 329499710e-09 0s 0s 329502830e-09 1s 1s 329507870e-09 0s 0s 329509990e-09 0s 0s 329513070e-09 1s 1s 329518110e-09 0s 0s 329520270e-09 0s 0s 329523310e-09 1s 1s 329528350e-09 0s 0s 329530550e-09 0s 0s 329533550e-09 1s 1s 329538590e-09 0s 0s 329540830e-09 0s 0s 329543790e-09 1s 1s 329548830e-09 0s 0s 329551110e-09 0s 0s 329554030e-09 1s 1s 329559070e-09 0s 0s 329561390e-09 0s 0s 329564270e-09 1s 1s 329569310e-09 0s 0s 329571670e-09 0s 0s 329574510e-09 1s 1s 329579550e-09 0s 0s 329581950e-09 0s 0s 329584750e-09 1s 1s 329589790e-09 0s 0s 329592230e-09 0s 0s 329594990e-09 1s 1s 329600030e-09 0s 0s 329602510e-09 0s 0s 329605230e-09 1s 1s 329610270e-09 0s 0s 329612790e-09 0s 0s 329615470e-09 1s 1s 329620510e-09 0s 0s 329623070e-09 0s 0s 329625710e-09 1s 1s 329630750e-09 0s 0s 329633350e-09 0s 0s 329635950e-09 1s 1s 329640990e-09 0s 0s 329643630e-09 0s 0s 329646190e-09 1s 1s 329651230e-09 0s 0s 329653910e-09 0s 0s 329656430e-09 1s 1s 329661470e-09 0s 0s 329664190e-09 0s 0s 329666670e-09 1s 1s 329671710e-09 0s 0s 329674470e-09 0s 0s 329676910e-09 1s 1s 329681950e-09 0s 0s 329684750e-09 0s 0s 329687150e-09 1s 1s 329692190e-09 0s 0s 329695030e-09 0s 0s 329697390e-09 1s 1s 329702430e-09 0s 0s 329705310e-09 0s 0s 329707630e-09 1s 1s 329712670e-09 0s 0s 329715590e-09 0s 0s 329717870e-09 1s 1s 329722910e-09 0s 0s 329725870e-09 0s 0s 329728110e-09 1s 1s 329733150e-09 0s 0s 329736150e-09 0s 0s 329738350e-09 1s 1s 329743390e-09 0s 0s 329746430e-09 0s 0s 329748590e-09 1s 1s 329753630e-09 0s 0s 329756710e-09 0s 0s 329758830e-09 1s 1s 329763870e-09 0s 0s 329766990e-09 0s 0s 329769070e-09 1s 1s 329774110e-09 0s 0s 329777270e-09 0s 0s 329779310e-09 1s 1s 329784350e-09 0s 0s 329787550e-09 0s 0s 329789550e-09 1s 1s 329794590e-09 0s 0s 329797830e-09 0s 0s 329799790e-09 1s 1s 329804830e-09 0s 0s 329808110e-09 0s 0s 329810030e-09 1s 1s 329815070e-09 0s 0s 329818390e-09 0s 0s 329820270e-09 1s 1s 329825310e-09 0s 0s 329828670e-09 0s 0s 329830510e-09 1s 1s 329835550e-09 0s 0s 329838950e-09 0s 0s 329840750e-09 1s 1s 329845790e-09 0s 0s 329849230e-09 0s 0s 329850990e-09 1s 1s 329856030e-09 0s 0s 329859510e-09 0s 0s 329861230e-09 1s 1s 329866270e-09 0s 0s 329869790e-09 0s 0s 329871470e-09 1s 1s 329876510e-09 0s 0s 329880070e-09 0s 0s 329881710e-09 1s 1s 329886750e-09 0s 0s 329890350e-09 0s 0s 329891950e-09 1s 1s 329896990e-09 0s 0s 329900630e-09 0s 0s 329902190e-09 1s 1s 329907230e-09 0s 0s 329910910e-09 0s 0s 329912430e-09 1s 1s 329917470e-09 0s 0s 329921190e-09 0s 0s 329922670e-09 1s 1s 329927710e-09 0s 0s 329931470e-09 0s 0s 329932910e-09 1s 1s 329937950e-09 0s 0s 329941750e-09 0s 0s 329943150e-09 1s 1s 329948190e-09 0s 0s 329952030e-09 0s 0s 329953390e-09 1s 1s 329958430e-09 0s 0s 329962310e-09 0s 0s 329963630e-09 1s 1s 329968670e-09 0s 0s 329972590e-09 0s 0s 329973870e-09 1s 1s 329978910e-09 0s 0s 329982870e-09 0s 0s 329984110e-09 1s 1s 329989150e-09 0s 0s 329993150e-09 0s 0s 329994350e-09 1s 1s 329999390e-09 0s 0s 330003430e-09 0s 0s 330004590e-09 1s 1s 330009630e-09 0s 0s 330013710e-09 0s 0s 330014830e-09 1s 1s 330019870e-09 0s 0s 330023990e-09 0s 0s 330025070e-09 1s 1s 330030110e-09 0s 0s 330034270e-09 0s 0s 330035310e-09 1s 1s 330040350e-09 0s 0s 330044550e-09 0s 0s 330045550e-09 1s 1s 330050590e-09 0s 0s 330054830e-09 0s 0s 330055790e-09 1s 1s 330060830e-09 0s 0s 330065110e-09 0s 0s 330066030e-09 1s 1s 330071070e-09 0s 0s 330075390e-09 0s 0s 330076270e-09 1s 1s 330081310e-09 0s 0s 330085670e-09 0s 0s 330086510e-09 1s 1s 330091550e-09 0s 0s 330095950e-09 0s 0s 330096750e-09 1s 1s 330101790e-09 0s 0s 330106230e-09 0s 0s 330106990e-09 1s 1s 330112030e-09 0s 0s 330116510e-09 0s 0s 330117230e-09 1s 1s 330122270e-09 0s 0s 330126790e-09 0s 0s 330127470e-09 1s 1s 330132510e-09 0s 0s 330137070e-09 0s 0s 330137710e-09 1s 1s 330142750e-09 0s 0s 330147350e-09 0s 0s 330147950e-09 1s 1s 330152990e-09 0s 0s 330157630e-09 0s 0s 330158190e-09 1s 1s 330163230e-09 0s 0s 330167910e-09 0s 0s 330168430e-09 1s 1s 330173470e-09 0s 0s 330178190e-09 0s 0s 330178670e-09 1s 1s 330183710e-09 0s 0s 330188470e-09 0s 0s 330188910e-09 1s 1s 330193950e-09 0s 0s 330198750e-09 0s 0s 330199150e-09 1s 1s 330204190e-09 0s 0s 330209030e-09 0s 0s 330209390e-09 1s 1s 330214430e-09 0s 0s 330219310e-09 0s 0s 330219630e-09 1s 1s 330224670e-09 0s 0s 330229590e-09 0s 0s 330229870e-09 1s 1s 330234910e-09 0s 0s 330239870e-09 0s 0s 330240110e-09 1s 1s 330245150e-09 0s 0s 330250150e-09 0s 0s 330250350e-09 1s 1s 330255390e-09 0s 0s 330260430e-09 0s 0s 330260590e-09 1s 1s 330265630e-09 0s 0s 330270710e-09 0s 0s 330270830e-09 1s 1s 330275870e-09 0s 0s 330280990e-09 0s 0s 330281070e-09 1s 1s 330286110e-09 0s 0s 330291270e-09 0s 0s 330291310e-09 1s 1s 330296350e-09 0s 0s 330301550e-09 1s 1s 330301590e-09 1s 1s 330306630e-09 0s 0s 330311790e-09 1s 1s 330311870e-09 1s 1s 330316870e-09 0s 0s 330322030e-09 1s 1s 330322150e-09 1s 1s 330327110e-09 0s 0s 330332270e-09 1s 1s 330332430e-09 1s 1s 330337350e-09 0s 0s 330342510e-09 1s 1s 330342710e-09 1s 1s 330347590e-09 0s 0s 330352750e-09 1s 1s 330352990e-09 1s 1s 330357830e-09 0s 0s 330362990e-09 1s 1s 330363270e-09 1s 1s 330368070e-09 0s 0s 330373230e-09 1s 1s 330373550e-09 1s 1s 330378310e-09 0s 0s 330383470e-09 1s 1s 330383830e-09 1s 1s 330388550e-09 0s 0s 330393710e-09 1s 1s 330394110e-09 1s 1s 330398790e-09 0s 0s 330403950e-09 1s 1s 330404390e-09 1s 1s 330409030e-09 0s 0s 330414190e-09 1s 1s 330414670e-09 1s 1s 330419270e-09 0s 0s 330424430e-09 1s 1s 330424950e-09 1s 1s 330429510e-09 0s 0s 330434670e-09 1s 1s 330435230e-09 1s 1s 330439750e-09 0s 0s 330444910e-09 1s 1s 330445510e-09 1s 1s 330449990e-09 0s 0s 330455150e-09 1s 1s 330455790e-09 1s 1s 330460230e-09 0s 0s 330465390e-09 1s 1s 330466070e-09 1s 1s 330470470e-09 0s 0s 330475630e-09 1s 1s 330476350e-09 1s 1s 330480710e-09 0s 0s 330485870e-09 1s 1s 330486630e-09 1s 1s 330490950e-09 0s 0s 330496110e-09 1s 1s 330496910e-09 1s 1s 330501190e-09 0s 0s 330506350e-09 1s 1s 330507190e-09 1s 1s 330511430e-09 0s 0s 330516590e-09 1s 1s 330517470e-09 1s 1s 330521670e-09 0s 0s 330526830e-09 1s 1s 330527750e-09 1s 1s 330531910e-09 0s 0s 330537070e-09 1s 1s 330538030e-09 1s 1s 330542150e-09 0s 0s 330547310e-09 1s 1s 330548310e-09 1s 1s 330552390e-09 0s 0s 330557550e-09 1s 1s 330558590e-09 1s 1s 330562630e-09 0s 0s 330567790e-09 1s 1s 330568870e-09 1s 1s 330572870e-09 0s 0s 330578030e-09 1s 1s 330579150e-09 1s 1s 330583110e-09 0s 0s 330588270e-09 1s 1s 330589430e-09 1s 1s 330593350e-09 0s 0s 330598510e-09 1s 1s 330599710e-09 1s 1s 330603590e-09 0s 0s 330608750e-09 1s 1s 330609990e-09 1s 1s 330613830e-09 0s 0s 330618990e-09 1s 1s 330620270e-09 1s 1s 330624070e-09 0s 0s 330629230e-09 1s 1s 330630550e-09 1s 1s 330634310e-09 0s 0s 330639470e-09 1s 1s 330640830e-09 1s 1s 330644550e-09 0s 0s 330649710e-09 1s 1s 330651110e-09 1s 1s 330654790e-09 0s 0s 330659950e-09 1s 1s 330661390e-09 1s 1s 330665030e-09 0s 0s 330670190e-09 1s 1s 330671670e-09 1s 1s 330675270e-09 0s 0s 330680430e-09 1s 1s 330681950e-09 1s 1s 330685510e-09 0s 0s 330690670e-09 1s 1s 330692230e-09 1s 1s 330695750e-09 0s 0s 330700910e-09 1s 1s 330702510e-09 1s 1s 330705990e-09 0s 0s 330711150e-09 1s 1s 330712790e-09 1s 1s 330716230e-09 0s 0s 330721390e-09 1s 1s 330723070e-09 1s 1s 330726470e-09 0s 0s 330731630e-09 1s 1s 330733350e-09 1s 1s 330736710e-09 0s 0s 330741870e-09 1s 1s 330743630e-09 1s 1s 330746950e-09 0s 0s 330752110e-09 1s 1s 330753910e-09 1s 1s 330757190e-09 0s 0s 330762350e-09 1s 1s 330764190e-09 1s 1s 330767430e-09 0s 0s 330772590e-09 1s 1s 330774470e-09 1s 1s 330777670e-09 0s 0s 330782830e-09 1s 1s 330784750e-09 1s 1s 330787910e-09 0s 0s 330793070e-09 1s 1s 330795030e-09 1s 1s 330798150e-09 0s 0s 330803310e-09 1s 1s 330805310e-09 1s 1s 330808390e-09 0s 0s 330813550e-09 1s 1s 330815590e-09 1s 1s 330818630e-09 0s 0s 330823790e-09 1s 1s 330825870e-09 1s 1s 330828870e-09 0s 0s 330834030e-09 1s 1s 330836150e-09 1s 1s 330839110e-09 0s 0s 330844270e-09 1s 1s 330846430e-09 1s 1s 330849350e-09 0s 0s 330854510e-09 1s 1s 330856710e-09 1s 1s 330859590e-09 0s 0s 330864750e-09 1s 1s 330866990e-09 1s 1s 330869830e-09 0s 0s 330874990e-09 1s 1s 330877270e-09 1s 1s 330880070e-09 0s 0s 330885230e-09 1s 1s 330887550e-09 1s 1s 330890310e-09 0s 0s 330895470e-09 1s 1s 330897830e-09 1s 1s 330900550e-09 0s 0s 330905710e-09 1s 1s 330908110e-09 1s 1s 330910790e-09 0s 0s 330915950e-09 1s 1s 330918390e-09 1s 1s 330921030e-09 0s 0s 330926190e-09 1s 1s 330928670e-09 1s 1s 330931270e-09 0s 0s 330936430e-09 1s 1s 330938950e-09 1s 1s 330941510e-09 0s 0s 330946670e-09 1s 1s 330949230e-09 1s 1s 330951750e-09 0s 0s 330956910e-09 1s 1s 330959510e-09 1s 1s 330961990e-09 0s 0s 330967150e-09 1s 1s 330969790e-09 1s 1s 330972230e-09 0s 0s 330977390e-09 1s 1s 330980070e-09 1s 1s 330982470e-09 0s 0s 330987630e-09 1s 1s 330990350e-09 1s 1s 330992710e-09 0s 0s 330997870e-09 1s 1s 331000630e-09 1s 1s 331002950e-09 0s 0s 331008110e-09 1s 1s 331010910e-09 1s 1s 331013190e-09 0s 0s 331018350e-09 1s 1s 331021190e-09 1s 1s 331023430e-09 0s 0s 331028590e-09 1s 1s 331031470e-09 1s 1s 331033670e-09 0s 0s 331038830e-09 1s 1s 331041750e-09 1s 1s 331043910e-09 0s 0s 331049070e-09 1s 1s 331052030e-09 1s 1s 331054150e-09 0s 0s 331059310e-09 1s 1s 331062310e-09 1s 1s 331064390e-09 0s 0s 331069550e-09 1s 1s 331072590e-09 1s 1s 331074630e-09 0s 0s 331079790e-09 1s 1s 331082870e-09 1s 1s 331084870e-09 0s 0s 331090030e-09 1s 1s 331093150e-09 1s 1s 331095110e-09 0s 0s 331100270e-09 1s 1s 331103430e-09 1s 1s 331105350e-09 0s 0s 331110510e-09 1s 1s 331113710e-09 1s 1s 331115590e-09 0s 0s 331120750e-09 1s 1s 331123990e-09 1s 1s 331125830e-09 0s 0s 331130990e-09 1s 1s 331134270e-09 1s 1s 331136070e-09 0s 0s 331141230e-09 1s 1s 331144550e-09 1s 1s 331146310e-09 0s 0s 331151470e-09 1s 1s 331154830e-09 1s 1s 331156550e-09 0s 0s 331161710e-09 1s 1s 331165110e-09 1s 1s 331166790e-09 0s 0s 331171950e-09 1s 1s 331175390e-09 1s 1s 331177030e-09 0s 0s 331182190e-09 1s 1s 331185670e-09 1s 1s 331187270e-09 0s 0s 331192430e-09 1s 1s 331195950e-09 1s 1s 331197510e-09 0s 0s 331202670e-09 1s 1s 331206230e-09 1s 1s 331207750e-09 0s 0s 331212910e-09 1s 1s 331216510e-09 1s 1s 331217990e-09 0s 0s 331223150e-09 1s 1s 331226790e-09 1s 1s 331228230e-09 0s 0s 331233390e-09 1s 1s 331237070e-09 1s 1s 331238470e-09 0s 0s 331243630e-09 1s 1s 331247350e-09 1s 1s 331248710e-09 0s 0s 331253870e-09 1s 1s 331257630e-09 1s 1s 331258950e-09 0s 0s 331264110e-09 1s 1s 331267910e-09 1s 1s 331269190e-09 0s 0s 331274350e-09 1s 1s 331278190e-09 1s 1s 331279430e-09 0s 0s 331284590e-09 1s 1s 331288470e-09 1s 1s 331289670e-09 0s 0s 331294830e-09 1s 1s 331298750e-09 1s 1s 331299910e-09 0s 0s 331305070e-09 1s 1s 331309030e-09 1s 1s 331310150e-09 0s 0s 331315310e-09 1s 1s 331319310e-09 1s 1s 331320390e-09 0s 0s 331325550e-09 1s 1s 331329590e-09 1s 1s 331330630e-09 0s 0s 331335790e-09 1s 1s 331339870e-09 1s 1s 331340870e-09 0s 0s 331346030e-09 1s 1s 331350150e-09 1s 1s 331351110e-09 0s 0s 331356270e-09 1s 1s 331360430e-09 1s 1s 331361350e-09 0s 0s 331366510e-09 1s 1s 331370710e-09 1s 1s 331371590e-09 0s 0s 331376750e-09 1s 1s 331380990e-09 1s 1s 331381830e-09 0s 0s 331386990e-09 1s 1s 331391270e-09 1s 1s 331392070e-09 0s 0s 331397230e-09 1s 1s 331401550e-09 1s 1s 331402310e-09 0s 0s 331407470e-09 1s 1s 331411830e-09 1s 1s 331412550e-09 0s 0s 331417710e-09 1s 1s 331422110e-09 1s 1s 331422790e-09 0s 0s 331427950e-09 1s 1s 331432390e-09 1s 1s 331433030e-09 0s 0s 331438190e-09 1s 1s 331442670e-09 1s 1s 331443270e-09 0s 0s 331448430e-09 1s 1s 331452950e-09 1s 1s 331453510e-09 0s 0s 331458670e-09 1s 1s 331463230e-09 1s 1s 331463750e-09 0s 0s 331468910e-09 1s 1s 331473510e-09 1s 1s 331473990e-09 0s 0s 331479150e-09 1s 1s 331483790e-09 1s 1s 331484230e-09 0s 0s 331489390e-09 1s 1s 331494070e-09 1s 1s 331494470e-09 0s 0s 331499630e-09 1s 1s 331504350e-09 1s 1s 331504710e-09 0s 0s 331509870e-09 1s 1s 331514630e-09 1s 1s 331514950e-09 0s 0s 331520110e-09 1s 1s 331524910e-09 1s 1s 331525190e-09 0s 0s 331530350e-09 1s 1s 331535190e-09 1s 1s 331535430e-09 0s 0s 331540590e-09 1s 1s 331545470e-09 1s 1s 331545670e-09 0s 0s 331550830e-09 1s 1s 331555750e-09 1s 1s 331555910e-09 0s 0s 331561070e-09 1s 1s 331566030e-09 1s 1s 331566150e-09 0s 0s 331571310e-09 1s 1s 331576310e-09 1s 1s 331576390e-09 0s 0s 331581550e-09 1s 1s 331586590e-09 1s 1s 331586630e-09 0s 0s 331591790e-09 1s 1s 331596870e-09 0s 0s 331602030e-09 1s 1s 331607110e-09 0s 0s 331607150e-09 0s 0s 331612270e-09 1s 1s 331617350e-09 0s 0s 331617430e-09 0s 0s 331622510e-09 1s 1s 331627590e-09 0s 0s 331627710e-09 0s 0s 331632750e-09 1s 1s 331637830e-09 0s 0s 331637990e-09 0s 0s 331642990e-09 1s 1s 331648070e-09 0s 0s 331648270e-09 0s 0s 331653230e-09 1s 1s 331658310e-09 0s 0s 331658550e-09 0s 0s 331663470e-09 1s 1s 331668550e-09 0s 0s 331668830e-09 0s 0s 331673710e-09 1s 1s 331678790e-09 0s 0s 331679110e-09 0s 0s 331683950e-09 1s 1s 331689030e-09 0s 0s 331689390e-09 0s 0s 331694190e-09 1s 1s 331699270e-09 0s 0s 331699670e-09 0s 0s 331704430e-09 1s 1s 331709510e-09 0s 0s 331709950e-09 0s 0s 331714670e-09 1s 1s 331719750e-09 0s 0s 331720230e-09 0s 0s 331724910e-09 1s 1s 331729990e-09 0s 0s 331730510e-09 0s 0s 331735150e-09 1s 1s 331740230e-09 0s 0s 331740790e-09 0s 0s 331745390e-09 1s 1s 331750470e-09 0s 0s 331751070e-09 0s 0s 331755630e-09 1s 1s 331760710e-09 0s 0s 331761350e-09 0s 0s 331765870e-09 1s 1s 331770950e-09 0s 0s 331771630e-09 0s 0s 331776110e-09 1s 1s 331781190e-09 0s 0s 331781910e-09 0s 0s 331786350e-09 1s 1s 331791430e-09 0s 0s 331792190e-09 0s 0s 331796590e-09 1s 1s 331801670e-09 0s 0s 331802470e-09 0s 0s 331806830e-09 1s 1s 331811910e-09 0s 0s 331812750e-09 0s 0s 331817070e-09 1s 1s 331822150e-09 0s 0s 331823030e-09 0s 0s 331827310e-09 1s 1s 331832390e-09 0s 0s 331833310e-09 0s 0s 331837550e-09 1s 1s 331842630e-09 0s 0s 331843590e-09 0s 0s 331847790e-09 1s 1s 331852870e-09 0s 0s 331853870e-09 0s 0s 331858030e-09 1s 1s 331863110e-09 0s 0s 331864150e-09 0s 0s 331868270e-09 1s 1s 331873350e-09 0s 0s 331874430e-09 0s 0s 331878510e-09 1s 1s 331883590e-09 0s 0s 331884710e-09 0s 0s 331888750e-09 1s 1s 331893830e-09 0s 0s 331894990e-09 0s 0s 331898990e-09 1s 1s 331904070e-09 0s 0s 331905270e-09 0s 0s 331909230e-09 1s 1s 331914310e-09 0s 0s 331915550e-09 0s 0s 331919470e-09 1s 1s 331924550e-09 0s 0s 331925830e-09 0s 0s 331929710e-09 1s 1s 331934790e-09 0s 0s 331936110e-09 0s 0s 331939950e-09 1s 1s 331945030e-09 0s 0s 331946390e-09 0s 0s 331950190e-09 1s 1s 331955270e-09 0s 0s 331956670e-09 0s 0s 331960430e-09 1s 1s 331965510e-09 0s 0s 331966950e-09 0s 0s 331970670e-09 1s 1s 331975750e-09 0s 0s 331977230e-09 0s 0s 331980910e-09 1s 1s 331985990e-09 0s 0s 331987510e-09 0s 0s 331991150e-09 1s 1s 331996230e-09 0s 0s 331997790e-09 0s 0s 332001390e-09 1s 1s 332006470e-09 0s 0s 332008070e-09 0s 0s 332011630e-09 1s 1s 332016710e-09 0s 0s 332018350e-09 0s 0s 332021870e-09 1s 1s 332026950e-09 0s 0s 332028630e-09 0s 0s 332032110e-09 1s 1s 332037190e-09 0s 0s 332038910e-09 0s 0s 332042350e-09 1s 1s 332047430e-09 0s 0s 332049190e-09 0s 0s 332052590e-09 1s 1s 332057670e-09 0s 0s 332059470e-09 0s 0s 332062830e-09 1s 1s 332067910e-09 0s 0s 332069750e-09 0s 0s 332073070e-09 1s 1s 332078150e-09 0s 0s 332080030e-09 0s 0s 332083310e-09 1s 1s 332088390e-09 0s 0s 332090310e-09 0s 0s 332093550e-09 1s 1s 332098630e-09 0s 0s 332100590e-09 0s 0s 332103790e-09 1s 1s 332108870e-09 0s 0s 332110870e-09 0s 0s 332114030e-09 1s 1s 332119110e-09 0s 0s 332121150e-09 0s 0s 332124270e-09 1s 1s 332129350e-09 0s 0s 332131430e-09 0s 0s 332134510e-09 1s 1s 332139590e-09 0s 0s 332141710e-09 0s 0s 332144750e-09 1s 1s 332149830e-09 0s 0s 332151990e-09 0s 0s 332154990e-09 1s 1s 332160070e-09 0s 0s 332162270e-09 0s 0s 332165230e-09 1s 1s 332170310e-09 0s 0s 332172550e-09 0s 0s 332175470e-09 1s 1s 332180550e-09 0s 0s 332182830e-09 0s 0s 332185710e-09 1s 1s 332190790e-09 0s 0s 332193110e-09 0s 0s 332195950e-09 1s 1s 332201030e-09 0s 0s 332203390e-09 0s 0s 332206190e-09 1s 1s 332211270e-09 0s 0s 332213670e-09 0s 0s 332216430e-09 1s 1s 332221510e-09 0s 0s 332223950e-09 0s 0s 332226670e-09 1s 1s 332231750e-09 0s 0s 332234230e-09 0s 0s 332236910e-09 1s 1s 332241990e-09 0s 0s 332244510e-09 0s 0s 332247150e-09 1s 1s 332252230e-09 0s 0s 332254790e-09 0s 0s 332257390e-09 1s 1s 332262470e-09 0s 0s 332265070e-09 0s 0s 332267630e-09 1s 1s 332272710e-09 0s 0s 332275350e-09 0s 0s 332277870e-09 1s 1s 332282950e-09 0s 0s 332285630e-09 0s 0s 332288110e-09 1s 1s 332293190e-09 0s 0s 332295910e-09 0s 0s 332298350e-09 1s 1s 332303430e-09 0s 0s 332306190e-09 0s 0s 332308590e-09 1s 1s 332313670e-09 0s 0s 332316470e-09 0s 0s 332318830e-09 1s 1s 332323910e-09 0s 0s 332326750e-09 0s 0s 332329070e-09 1s 1s 332334150e-09 0s 0s 332337030e-09 0s 0s 332339310e-09 1s 1s 332344390e-09 0s 0s 332347310e-09 0s 0s 332349550e-09 1s 1s 332354630e-09 0s 0s 332357590e-09 0s 0s 332359790e-09 1s 1s 332364870e-09 0s 0s 332367870e-09 0s 0s 332370030e-09 1s 1s 332375110e-09 0s 0s 332378150e-09 0s 0s 332380270e-09 1s 1s 332385350e-09 0s 0s 332388430e-09 0s 0s 332390510e-09 1s 1s 332395590e-09 0s 0s 332398710e-09 0s 0s 332400750e-09 1s 1s 332405830e-09 0s 0s 332408990e-09 0s 0s 332410990e-09 1s 1s 332416070e-09 0s 0s 332419270e-09 0s 0s 332421230e-09 1s 1s 332426310e-09 0s 0s 332429550e-09 0s 0s 332431470e-09 1s 1s 332436550e-09 0s 0s 332439830e-09 0s 0s 332441710e-09 1s 1s 332446790e-09 0s 0s 332450110e-09 0s 0s 332451950e-09 1s 1s 332457030e-09 0s 0s 332460390e-09 0s 0s 332462190e-09 1s 1s 332467270e-09 0s 0s 332470670e-09 0s 0s 332472430e-09 1s 1s 332477510e-09 0s 0s 332480950e-09 0s 0s 332482670e-09 1s 1s 332487750e-09 0s 0s 332491230e-09 0s 0s 332492910e-09 1s 1s 332497990e-09 0s 0s 332501510e-09 0s 0s 332503150e-09 1s 1s 332508230e-09 0s 0s 332511790e-09 0s 0s 332513390e-09 1s 1s 332518470e-09 0s 0s 332522070e-09 0s 0s 332523630e-09 1s 1s 332528710e-09 0s 0s 332532350e-09 0s 0s 332533870e-09 1s 1s 332538950e-09 0s 0s 332542630e-09 0s 0s 332544110e-09 1s 1s 332549190e-09 0s 0s 332552910e-09 0s 0s 332554350e-09 1s 1s 332559430e-09 0s 0s 332563190e-09 0s 0s 332564590e-09 1s 1s 332569670e-09 0s 0s 332573470e-09 0s 0s 332574830e-09 1s 1s 332579910e-09 0s 0s 332583750e-09 0s 0s 332585070e-09 1s 1s 332590150e-09 0s 0s 332594030e-09 0s 0s 332595310e-09 1s 1s 332600390e-09 0s 0s 332604310e-09 0s 0s 332605550e-09 1s 1s 332610630e-09 0s 0s 332614590e-09 0s 0s 332615790e-09 1s 1s 332620870e-09 0s 0s 332624870e-09 0s 0s 332626030e-09 1s 1s 332631110e-09 0s 0s 332635150e-09 0s 0s 332636270e-09 1s 1s 332641350e-09 0s 0s 332645430e-09 0s 0s 332646510e-09 1s 1s 332651590e-09 0s 0s 332655710e-09 0s 0s 332656750e-09 1s 1s 332661830e-09 0s 0s 332665990e-09 0s 0s 332666990e-09 1s 1s 332672070e-09 0s 0s 332676270e-09 0s 0s 332677230e-09 1s 1s 332682310e-09 0s 0s 332686550e-09 0s 0s 332687470e-09 1s 1s 332692550e-09 0s 0s 332696830e-09 0s 0s 332697710e-09 1s 1s 332702790e-09 0s 0s 332707110e-09 0s 0s 332707950e-09 1s 1s 332713030e-09 0s 0s 332717390e-09 0s 0s 332718190e-09 1s 1s 332723270e-09 0s 0s 332727670e-09 0s 0s 332728430e-09 1s 1s 332733510e-09 0s 0s 332737950e-09 0s 0s 332738670e-09 1s 1s 332743750e-09 0s 0s 332748230e-09 0s 0s 332748910e-09 1s 1s 332753990e-09 0s 0s 332758510e-09 0s 0s 332759150e-09 1s 1s 332764230e-09 0s 0s 332768790e-09 0s 0s 332769390e-09 1s 1s 332774470e-09 0s 0s 332779070e-09 0s 0s 332779630e-09 1s 1s 332784710e-09 0s 0s 332789350e-09 0s 0s 332789870e-09 1s 1s 332794950e-09 0s 0s 332799630e-09 0s 0s 332800110e-09 1s 1s 332805190e-09 0s 0s 332809910e-09 0s 0s 332810350e-09 1s 1s 332815430e-09 0s 0s 332820190e-09 0s 0s 332820590e-09 1s 1s 332825670e-09 0s 0s 332830470e-09 0s 0s 332830830e-09 1s 1s 332835910e-09 0s 0s 332840750e-09 0s 0s 332841070e-09 1s 1s 332846150e-09 0s 0s 332851030e-09 0s 0s 332851310e-09 1s 1s 332856390e-09 0s 0s 332861310e-09 0s 0s 332861550e-09 1s 1s 332866630e-09 0s 0s 332871590e-09 0s 0s 332871790e-09 1s 1s 332876870e-09 0s 0s 332881870e-09 0s 0s 332882030e-09 1s 1s 332887110e-09 0s 0s 332892150e-09 0s 0s 332892270e-09 1s 1s 332897350e-09 0s 0s 332902430e-09 0s 0s 332902510e-09 1s 1s 332907590e-09 0s 0s 332912710e-09 0s 0s 332912750e-09 1s 1s 332917830e-09 0s 0s 332922990e-09 1s 1s 332923030e-09 1s 1s 332928110e-09 0s 0s 332933230e-09 1s 1s 332933310e-09 1s 1s 332938350e-09 0s 0s 332943470e-09 1s 1s 332943590e-09 1s 1s 332948590e-09 0s 0s 332953710e-09 1s 1s 332953870e-09 1s 1s 332958830e-09 0s 0s 332963950e-09 1s 1s 332964150e-09 1s 1s 332969070e-09 0s 0s 332974190e-09 1s 1s 332974430e-09 1s 1s 332979310e-09 0s 0s 332984430e-09 1s 1s 332984710e-09 1s 1s 332989550e-09 0s 0s 332994670e-09 1s 1s 332994990e-09 1s 1s 332999790e-09 0s 0s 333004910e-09 1s 1s 333005270e-09 1s 1s 333010030e-09 0s 0s 333015150e-09 1s 1s 333015550e-09 1s 1s 333020270e-09 0s 0s 333025390e-09 1s 1s 333025830e-09 1s 1s 333030510e-09 0s 0s 333035630e-09 1s 1s 333036110e-09 1s 1s 333040750e-09 0s 0s 333045870e-09 1s 1s 333046390e-09 1s 1s 333050990e-09 0s 0s 333056110e-09 1s 1s 333056670e-09 1s 1s 333061230e-09 0s 0s 333066350e-09 1s 1s 333066950e-09 1s 1s 333071470e-09 0s 0s 333076590e-09 1s 1s 333077230e-09 1s 1s 333081710e-09 0s 0s 333086830e-09 1s 1s 333087510e-09 1s 1s 333091950e-09 0s 0s 333097070e-09 1s 1s 333097790e-09 1s 1s 333102190e-09 0s 0s 333107310e-09 1s 1s 333108070e-09 1s 1s 333112430e-09 0s 0s 333117550e-09 1s 1s 333118350e-09 1s 1s 333122670e-09 0s 0s 333127790e-09 1s 1s 333128630e-09 1s 1s 333132910e-09 0s 0s 333138030e-09 1s 1s 333138910e-09 1s 1s 333143150e-09 0s 0s 333148270e-09 1s 1s 333149190e-09 1s 1s 333153390e-09 0s 0s 333158510e-09 1s 1s 333159470e-09 1s 1s 333163630e-09 0s 0s 333168750e-09 1s 1s 333169750e-09 1s 1s 333173870e-09 0s 0s 333178990e-09 1s 1s 333180030e-09 1s 1s 333184110e-09 0s 0s 333189230e-09 1s 1s 333190310e-09 1s 1s 333194350e-09 0s 0s 333199470e-09 1s 1s 333200590e-09 1s 1s 333204590e-09 0s 0s 333209710e-09 1s 1s 333210870e-09 1s 1s 333214830e-09 0s 0s 333219950e-09 1s 1s 333221150e-09 1s 1s 333225070e-09 0s 0s 333230190e-09 1s 1s 333231430e-09 1s 1s 333235310e-09 0s 0s 333240430e-09 1s 1s 333241710e-09 1s 1s 333245550e-09 0s 0s 333250670e-09 1s 1s 333251990e-09 1s 1s 333255790e-09 0s 0s 333260910e-09 1s 1s 333262270e-09 1s 1s 333266030e-09 0s 0s 333271150e-09 1s 1s 333272550e-09 1s 1s 333276270e-09 0s 0s 333281390e-09 1s 1s 333282830e-09 1s 1s 333286510e-09 0s 0s 333291630e-09 1s 1s 333293110e-09 1s 1s 333296750e-09 0s 0s 333301870e-09 1s 1s 333303390e-09 1s 1s 333306990e-09 0s 0s 333312110e-09 1s 1s 333313670e-09 1s 1s 333317230e-09 0s 0s 333322350e-09 1s 1s 333323950e-09 1s 1s 333327470e-09 0s 0s 333332590e-09 1s 1s 333334230e-09 1s 1s 333337710e-09 0s 0s 333342830e-09 1s 1s 333344510e-09 1s 1s 333347950e-09 0s 0s 333353070e-09 1s 1s 333354790e-09 1s 1s 333358190e-09 0s 0s 333363310e-09 1s 1s 333365070e-09 1s 1s 333368430e-09 0s 0s 333373550e-09 1s 1s 333375350e-09 1s 1s 333378670e-09 0s 0s 333383790e-09 1s 1s 333385630e-09 1s 1s 333388910e-09 0s 0s 333394030e-09 1s 1s 333395910e-09 1s 1s 333399150e-09 0s 0s 333404270e-09 1s 1s 333406190e-09 1s 1s 333409390e-09 0s 0s 333414510e-09 1s 1s 333416470e-09 1s 1s 333419630e-09 0s 0s 333424750e-09 1s 1s 333426750e-09 1s 1s 333429870e-09 0s 0s 333434990e-09 1s 1s 333437030e-09 1s 1s 333440110e-09 0s 0s 333445230e-09 1s 1s 333447310e-09 1s 1s 333450350e-09 0s 0s 333455470e-09 1s 1s 333457590e-09 1s 1s 333460590e-09 0s 0s 333465710e-09 1s 1s 333467870e-09 1s 1s 333470830e-09 0s 0s 333475950e-09 1s 1s 333478150e-09 1s 1s 333481070e-09 0s 0s 333486190e-09 1s 1s 333488430e-09 1s 1s 333491310e-09 0s 0s 333496430e-09 1s 1s 333498710e-09 1s 1s 333501550e-09 0s 0s 333506670e-09 1s 1s 333508990e-09 1s 1s 333511790e-09 0s 0s 333516910e-09 1s 1s 333519270e-09 1s 1s 333522030e-09 0s 0s 333527150e-09 1s 1s 333529550e-09 1s 1s 333532270e-09 0s 0s 333537390e-09 1s 1s 333539830e-09 1s 1s 333542510e-09 0s 0s 333547630e-09 1s 1s 333550110e-09 1s 1s 333552750e-09 0s 0s 333557870e-09 1s 1s 333560390e-09 1s 1s 333562990e-09 0s 0s 333568110e-09 1s 1s 333570670e-09 1s 1s 333573230e-09 0s 0s 333578350e-09 1s 1s 333580950e-09 1s 1s 333583470e-09 0s 0s 333588590e-09 1s 1s 333591230e-09 1s 1s 333593710e-09 0s 0s 333598830e-09 1s 1s 333601510e-09 1s 1s 333603950e-09 0s 0s 333609070e-09 1s 1s 333611790e-09 1s 1s 333614190e-09 0s 0s 333619310e-09 1s 1s 333622070e-09 1s 1s 333624430e-09 0s 0s 333629550e-09 1s 1s 333632350e-09 1s 1s 333634670e-09 0s 0s 333639790e-09 1s 1s 333642630e-09 1s 1s 333644910e-09 0s 0s 333650030e-09 1s 1s 333652910e-09 1s 1s 333655150e-09 0s 0s 333660270e-09 1s 1s 333663190e-09 1s 1s 333665390e-09 0s 0s 333670510e-09 1s 1s 333673470e-09 1s 1s 333675630e-09 0s 0s 333680750e-09 1s 1s 333683750e-09 1s 1s 333685870e-09 0s 0s 333690990e-09 1s 1s 333694030e-09 1s 1s 333696110e-09 0s 0s 333701230e-09 1s 1s 333704310e-09 1s 1s 333706350e-09 0s 0s 333711470e-09 1s 1s 333714590e-09 1s 1s 333716590e-09 0s 0s 333721710e-09 1s 1s 333724870e-09 1s 1s 333726830e-09 0s 0s 333731950e-09 1s 1s 333735150e-09 1s 1s 333737070e-09 0s 0s 333742190e-09 1s 1s 333745430e-09 1s 1s 333747310e-09 0s 0s 333752430e-09 1s 1s 333755710e-09 1s 1s 333757550e-09 0s 0s 333762670e-09 1s 1s 333765990e-09 1s 1s 333767790e-09 0s 0s 333772910e-09 1s 1s 333776270e-09 1s 1s 333778030e-09 0s 0s 333783150e-09 1s 1s 333786550e-09 1s 1s 333788270e-09 0s 0s 333793390e-09 1s 1s 333796830e-09 1s 1s 333798510e-09 0s 0s 333803630e-09 1s 1s 333807110e-09 1s 1s 333808750e-09 0s 0s 333813870e-09 1s 1s 333817390e-09 1s 1s 333818990e-09 0s 0s 333824110e-09 1s 1s 333827670e-09 1s 1s 333829230e-09 0s 0s 333834350e-09 1s 1s 333837950e-09 1s 1s 333839470e-09 0s 0s 333844590e-09 1s 1s 333848230e-09 1s 1s 333849710e-09 0s 0s 333854830e-09 1s 1s 333858510e-09 1s 1s 333859950e-09 0s 0s 333865070e-09 1s 1s 333868790e-09 1s 1s 333870190e-09 0s 0s 333875310e-09 1s 1s 333879070e-09 1s 1s 333880430e-09 0s 0s 333885550e-09 1s 1s 333889350e-09 1s 1s 333890670e-09 0s 0s 333895790e-09 1s 1s 333899630e-09 1s 1s 333900910e-09 0s 0s 333906030e-09 1s 1s 333909910e-09 1s 1s 333911150e-09 0s 0s 333916270e-09 1s 1s 333920190e-09 1s 1s 333921390e-09 0s 0s 333926510e-09 1s 1s 333930470e-09 1s 1s 333931630e-09 0s 0s 333936750e-09 1s 1s 333940750e-09 1s 1s 333941870e-09 0s 0s 333946990e-09 1s 1s 333951030e-09 1s 1s 333952110e-09 0s 0s 333957230e-09 1s 1s 333961310e-09 1s 1s 333962350e-09 0s 0s 333967470e-09 1s 1s 333971590e-09 1s 1s 333972590e-09 0s 0s 333977710e-09 1s 1s 333981870e-09 1s 1s 333982830e-09 0s 0s 333987950e-09 1s 1s 333992150e-09 1s 1s 333993070e-09 0s 0s 333998190e-09 1s 1s 334002430e-09 1s 1s 334003310e-09 0s 0s 334008430e-09 1s 1s 334012710e-09 1s 1s 334013550e-09 0s 0s 334018670e-09 1s 1s 334022990e-09 1s 1s 334023790e-09 0s 0s 334028910e-09 1s 1s 334033270e-09 1s 1s 334034030e-09 0s 0s 334039150e-09 1s 1s 334043550e-09 1s 1s 334044270e-09 0s 0s 334049390e-09 1s 1s 334053830e-09 1s 1s 334054510e-09 0s 0s 334059630e-09 1s 1s 334064110e-09 1s 1s 334064750e-09 0s 0s 334069870e-09 1s 1s 334074390e-09 1s 1s 334074990e-09 0s 0s 334080110e-09 1s 1s 334084670e-09 1s 1s 334085230e-09 0s 0s 334090350e-09 1s 1s 334094950e-09 1s 1s 334095470e-09 0s 0s 334100590e-09 1s 1s 334105230e-09 1s 1s 334105710e-09 0s 0s 334110830e-09 1s 1s 334115510e-09 1s 1s 334115950e-09 0s 0s 334121070e-09 1s 1s 334125790e-09 1s 1s 334126190e-09 0s 0s 334131310e-09 1s 1s 334136070e-09 1s 1s 334136430e-09 0s 0s 334141550e-09 1s 1s 334146350e-09 1s 1s 334146670e-09 0s 0s 334151790e-09 1s 1s 334156630e-09 1s 1s 334156910e-09 0s 0s 334162030e-09 1s 1s 334166910e-09 1s 1s 334167150e-09 0s 0s 334172270e-09 1s 1s 334177190e-09 1s 1s 334177390e-09 0s 0s 334182510e-09 1s 1s 334187470e-09 1s 1s 334187630e-09 0s 0s 334192750e-09 1s 1s 334197750e-09 1s 1s 334197870e-09 0s 0s 334202990e-09 1s 1s 334208030e-09 1s 1s 334208110e-09 0s 0s 334213230e-09 1s 1s 334218310e-09 1s 1s 334218350e-09 0s 0s 334223470e-09 1s 1s 334228590e-09 0s 0s 334233710e-09 1s 1s 334238830e-09 0s 0s 334238870e-09 0s 0s 334243950e-09 1s 1s 334249070e-09 0s 0s 334249150e-09 0s 0s 334254190e-09 1s 1s 334259310e-09 0s 0s 334259430e-09 0s 0s 334264430e-09 1s 1s 334269550e-09 0s 0s 334269710e-09 0s 0s 334274670e-09 1s 1s 334279790e-09 0s 0s 334279990e-09 0s 0s 334284910e-09 1s 1s 334290030e-09 0s 0s 334290270e-09 0s 0s 334295150e-09 1s 1s 334300270e-09 0s 0s 334300550e-09 0s 0s 334305390e-09 1s 1s 334310510e-09 0s 0s 334310830e-09 0s 0s 334315630e-09 1s 1s 334320750e-09 0s 0s 334321110e-09 0s 0s 334325870e-09 1s 1s 334330990e-09 0s 0s 334331390e-09 0s 0s 334336110e-09 1s 1s 334341230e-09 0s 0s 334341670e-09 0s 0s 334346350e-09 1s 1s 334351470e-09 0s 0s 334351950e-09 0s 0s 334356590e-09 1s 1s 334361710e-09 0s 0s 334362230e-09 0s 0s 334366830e-09 1s 1s 334371950e-09 0s 0s 334372510e-09 0s 0s 334377070e-09 1s 1s 334382190e-09 0s 0s 334382790e-09 0s 0s 334387310e-09 1s 1s 334392430e-09 0s 0s 334393070e-09 0s 0s 334397550e-09 1s 1s 334402670e-09 0s 0s 334403350e-09 0s 0s 334407790e-09 1s 1s 334412910e-09 0s 0s 334413630e-09 0s 0s 334418030e-09 1s 1s 334423150e-09 0s 0s 334423910e-09 0s 0s 334428270e-09 1s 1s 334433390e-09 0s 0s 334434190e-09 0s 0s 334438510e-09 1s 1s 334443630e-09 0s 0s 334444470e-09 0s 0s 334448750e-09 1s 1s 334453870e-09 0s 0s 334454750e-09 0s 0s 334458990e-09 1s 1s 334464110e-09 0s 0s 334465030e-09 0s 0s 334469230e-09 1s 1s 334474350e-09 0s 0s 334475310e-09 0s 0s 334479470e-09 1s 1s 334484590e-09 0s 0s 334485590e-09 0s 0s 334489710e-09 1s 1s 334494830e-09 0s 0s 334495870e-09 0s 0s 334499950e-09 1s 1s 334505070e-09 0s 0s 334506150e-09 0s 0s 334510190e-09 1s 1s 334515310e-09 0s 0s 334516430e-09 0s 0s 334520430e-09 1s 1s 334525550e-09 0s 0s 334526710e-09 0s 0s 334530670e-09 1s 1s 334535790e-09 0s 0s 334536990e-09 0s 0s 334540910e-09 1s 1s 334546030e-09 0s 0s 334547270e-09 0s 0s 334551150e-09 1s 1s 334556270e-09 0s 0s 334557550e-09 0s 0s 334561390e-09 1s 1s 334566510e-09 0s 0s 334567830e-09 0s 0s 334571630e-09 1s 1s 334576750e-09 0s 0s 334578110e-09 0s 0s 334581870e-09 1s 1s 334586990e-09 0s 0s 334588390e-09 0s 0s 334592110e-09 1s 1s 334597230e-09 0s 0s 334598670e-09 0s 0s 334602350e-09 1s 1s 334607470e-09 0s 0s 334608950e-09 0s 0s 334612590e-09 1s 1s 334617710e-09 0s 0s 334619230e-09 0s 0s 334622830e-09 1s 1s 334627950e-09 0s 0s 334629510e-09 0s 0s 334633070e-09 1s 1s 334638190e-09 0s 0s 334639790e-09 0s 0s 334643310e-09 1s 1s 334648430e-09 0s 0s 334650070e-09 0s 0s 334653550e-09 1s 1s 334658670e-09 0s 0s 334660350e-09 0s 0s 334663790e-09 1s 1s 334668910e-09 0s 0s 334670630e-09 0s 0s 334674030e-09 1s 1s 334679150e-09 0s 0s 334680910e-09 0s 0s 334684270e-09 1s 1s 334689390e-09 0s 0s 334691190e-09 0s 0s 334694510e-09 1s 1s 334699630e-09 0s 0s 334701470e-09 0s 0s 334704750e-09 1s 1s 334709870e-09 0s 0s 334711750e-09 0s 0s 334714990e-09 1s 1s 334720110e-09 0s 0s 334722030e-09 0s 0s 334725230e-09 1s 1s 334730350e-09 0s 0s 334732310e-09 0s 0s 334735470e-09 1s 1s 334740590e-09 0s 0s 334742590e-09 0s 0s 334745710e-09 1s 1s 334750830e-09 0s 0s 334752870e-09 0s 0s 334755950e-09 1s 1s 334761070e-09 0s 0s 334763150e-09 0s 0s 334766190e-09 1s 1s 334771310e-09 0s 0s 334773430e-09 0s 0s 334776430e-09 1s 1s 334781550e-09 0s 0s 334783710e-09 0s 0s 334786670e-09 1s 1s 334791790e-09 0s 0s 334793990e-09 0s 0s 334796910e-09 1s 1s 334802030e-09 0s 0s 334804270e-09 0s 0s 334807150e-09 1s 1s 334812270e-09 0s 0s 334814550e-09 0s 0s 334817390e-09 1s 1s 334822510e-09 0s 0s 334824830e-09 0s 0s 334827630e-09 1s 1s 334832750e-09 0s 0s 334835110e-09 0s 0s 334837870e-09 1s 1s 334842990e-09 0s 0s 334845390e-09 0s 0s 334848110e-09 1s 1s 334853230e-09 0s 0s 334855670e-09 0s 0s 334858350e-09 1s 1s 334863470e-09 0s 0s 334865950e-09 0s 0s 334868590e-09 1s 1s 334873710e-09 0s 0s 334876230e-09 0s 0s 334878830e-09 1s 1s 334883950e-09 0s 0s 334886510e-09 0s 0s 334889070e-09 1s 1s 334894190e-09 0s 0s 334896790e-09 0s 0s 334899310e-09 1s 1s 334904430e-09 0s 0s 334907070e-09 0s 0s 334909550e-09 1s 1s 334914670e-09 0s 0s 334917350e-09 0s 0s 334919790e-09 1s 1s 334924910e-09 0s 0s 334927630e-09 0s 0s 334930030e-09 1s 1s 334935150e-09 0s 0s 334937910e-09 0s 0s 334940270e-09 1s 1s 334945390e-09 0s 0s 334948190e-09 0s 0s 334950510e-09 1s 1s 334955630e-09 0s 0s 334958470e-09 0s 0s 334960750e-09 1s 1s 334965870e-09 0s 0s 334968750e-09 0s 0s 334970990e-09 1s 1s 334976110e-09 0s 0s 334979030e-09 0s 0s 334981230e-09 1s 1s 334986350e-09 0s 0s 334989310e-09 0s 0s 334991470e-09 1s 1s 334996590e-09 0s 0s 334999590e-09 0s 0s 335001710e-09 1s 1s 335006830e-09 0s 0s 335009870e-09 0s 0s 335011950e-09 1s 1s 335017070e-09 0s 0s 335020150e-09 0s 0s 335022190e-09 1s 1s 335027310e-09 0s 0s 335030430e-09 0s 0s 335032430e-09 1s 1s 335037550e-09 0s 0s 335040710e-09 0s 0s 335042670e-09 1s 1s 335047790e-09 0s 0s 335050990e-09 0s 0s 335052910e-09 1s 1s 335058030e-09 0s 0s 335061270e-09 0s 0s 335063150e-09 1s 1s 335068270e-09 0s 0s 335071550e-09 0s 0s 335073390e-09 1s 1s 335078510e-09 0s 0s 335081830e-09 0s 0s 335083630e-09 1s 1s 335088750e-09 0s 0s 335092110e-09 0s 0s 335093870e-09 1s 1s 335098990e-09 0s 0s 335102390e-09 0s 0s 335104110e-09 1s 1s 335109230e-09 0s 0s 335112670e-09 0s 0s 335114350e-09 1s 1s 335119470e-09 0s 0s 335122950e-09 0s 0s 335124590e-09 1s 1s 335129710e-09 0s 0s 335133230e-09 0s 0s 335134830e-09 1s 1s 335139950e-09 0s 0s 335143510e-09 0s 0s 335145070e-09 1s 1s 335150190e-09 0s 0s 335153790e-09 0s 0s 335155310e-09 1s 1s 335160430e-09 0s 0s 335164070e-09 0s 0s 335165550e-09 1s 1s 335170670e-09 0s 0s 335174350e-09 0s 0s 335175790e-09 1s 1s 335180910e-09 0s 0s 335184630e-09 0s 0s 335186030e-09 1s 1s 335191150e-09 0s 0s 335194910e-09 0s 0s 335196270e-09 1s 1s 335201390e-09 0s 0s 335205190e-09 0s 0s 335206510e-09 1s 1s 335211630e-09 0s 0s 335215470e-09 0s 0s 335216750e-09 1s 1s 335221870e-09 0s 0s 335225750e-09 0s 0s 335226990e-09 1s 1s 335232110e-09 0s 0s 335236030e-09 0s 0s 335237230e-09 1s 1s 335242350e-09 0s 0s 335246310e-09 0s 0s 335247470e-09 1s 1s 335252590e-09 0s 0s 335256590e-09 0s 0s 335257710e-09 1s 1s 335262830e-09 0s 0s 335266870e-09 0s 0s 335267950e-09 1s 1s 335273070e-09 0s 0s 335277150e-09 0s 0s 335278190e-09 1s 1s 335283310e-09 0s 0s 335287430e-09 0s 0s 335288430e-09 1s 1s 335293550e-09 0s 0s 335297710e-09 0s 0s 335298670e-09 1s 1s 335303790e-09 0s 0s 335307990e-09 0s 0s 335308910e-09 1s 1s 335314030e-09 0s 0s 335318270e-09 0s 0s 335319150e-09 1s 1s 335324270e-09 0s 0s 335328550e-09 0s 0s 335329390e-09 1s 1s 335334510e-09 0s 0s 335338830e-09 0s 0s 335339630e-09 1s 1s 335344750e-09 0s 0s 335349110e-09 0s 0s 335349870e-09 1s 1s 335354990e-09 0s 0s 335359390e-09 0s 0s 335360110e-09 1s 1s 335365230e-09 0s 0s 335369670e-09 0s 0s 335370350e-09 1s 1s 335375470e-09 0s 0s 335379950e-09 0s 0s 335380590e-09 1s 1s 335385710e-09 0s 0s 335390230e-09 0s 0s 335390830e-09 1s 1s 335395950e-09 0s 0s 335400510e-09 0s 0s 335401070e-09 1s 1s 335406190e-09 0s 0s 335410790e-09 0s 0s 335411310e-09 1s 1s 335416430e-09 0s 0s 335421070e-09 0s 0s 335421550e-09 1s 1s 335426670e-09 0s 0s 335431350e-09 0s 0s 335431790e-09 1s 1s 335436910e-09 0s 0s 335441630e-09 0s 0s 335442030e-09 1s 1s 335447150e-09 0s 0s 335451910e-09 0s 0s 335452270e-09 1s 1s 335457390e-09 0s 0s 335462190e-09 0s 0s 335462510e-09 1s 1s 335467630e-09 0s 0s 335472470e-09 0s 0s 335472750e-09 1s 1s 335477870e-09 0s 0s 335482750e-09 0s 0s 335482990e-09 1s 1s 335488110e-09 0s 0s 335493030e-09 0s 0s 335493230e-09 1s 1s 335498350e-09 0s 0s 335503310e-09 0s 0s 335503470e-09 1s 1s 335508590e-09 0s 0s 335513590e-09 0s 0s 335513710e-09 1s 1s 335518830e-09 0s 0s 335523870e-09 0s 0s 335523950e-09 1s 1s 335529070e-09 0s 0s 335534150e-09 0s 0s 335534190e-09 1s 1s 335539310e-09 0s 0s 335544430e-09 1s 1s 335544470e-09 1s 1s 335549590e-09 0s 0s 335554670e-09 1s 1s 335554750e-09 1s 1s 335559830e-09 0s 0s 335564910e-09 1s 1s 335565030e-09 1s 1s 335570070e-09 0s 0s 335575150e-09 1s 1s 335575310e-09 1s 1s 335580310e-09 0s 0s 335585390e-09 1s 1s 335585590e-09 1s 1s 335590550e-09 0s 0s 335595630e-09 1s 1s 335595870e-09 1s 1s 335600790e-09 0s 0s 335605870e-09 1s 1s 335606150e-09 1s 1s 335611030e-09 0s 0s 335616110e-09 1s 1s 335616430e-09 1s 1s 335621270e-09 0s 0s 335626350e-09 1s 1s 335626710e-09 1s 1s 335631510e-09 0s 0s 335636590e-09 1s 1s 335636990e-09 1s 1s 335641750e-09 0s 0s 335646830e-09 1s 1s 335647270e-09 1s 1s 335651990e-09 0s 0s 335657070e-09 1s 1s 335657550e-09 1s 1s 335662230e-09 0s 0s 335667310e-09 1s 1s 335667830e-09 1s 1s 335672470e-09 0s 0s 335677550e-09 1s 1s 335678110e-09 1s 1s 335682710e-09 0s 0s 335687790e-09 1s 1s 335688390e-09 1s 1s 335692950e-09 0s 0s 335698030e-09 1s 1s 335698670e-09 1s 1s 335703190e-09 0s 0s 335708270e-09 1s 1s 335708950e-09 1s 1s 335713430e-09 0s 0s 335718510e-09 1s 1s 335719230e-09 1s 1s 335723670e-09 0s 0s 335728750e-09 1s 1s 335729510e-09 1s 1s 335733910e-09 0s 0s 335738990e-09 1s 1s 335739790e-09 1s 1s 335744150e-09 0s 0s 335749230e-09 1s 1s 335750070e-09 1s 1s 335754390e-09 0s 0s 335759470e-09 1s 1s 335760350e-09 1s 1s 335764630e-09 0s 0s 335769710e-09 1s 1s 335770630e-09 1s 1s 335774870e-09 0s 0s 335779950e-09 1s 1s 335780910e-09 1s 1s 335785110e-09 0s 0s 335790190e-09 1s 1s 335791190e-09 1s 1s 335795350e-09 0s 0s 335800430e-09 1s 1s 335801470e-09 1s 1s 335805590e-09 0s 0s 335810670e-09 1s 1s 335811750e-09 1s 1s 335815830e-09 0s 0s 335820910e-09 1s 1s 335822030e-09 1s 1s 335826070e-09 0s 0s 335831150e-09 1s 1s 335832310e-09 1s 1s 335836310e-09 0s 0s 335841390e-09 1s 1s 335842590e-09 1s 1s 335846550e-09 0s 0s 335851630e-09 1s 1s 335852870e-09 1s 1s 335856790e-09 0s 0s 335861870e-09 1s 1s 335863150e-09 1s 1s 335867030e-09 0s 0s 335872110e-09 1s 1s 335873430e-09 1s 1s 335877270e-09 0s 0s 335882350e-09 1s 1s 335883710e-09 1s 1s 335887510e-09 0s 0s 335892590e-09 1s 1s 335893990e-09 1s 1s 335897750e-09 0s 0s 335902830e-09 1s 1s 335904270e-09 1s 1s 335907990e-09 0s 0s 335913070e-09 1s 1s 335914550e-09 1s 1s 335918230e-09 0s 0s 335923310e-09 1s 1s 335924830e-09 1s 1s 335928470e-09 0s 0s 335933550e-09 1s 1s 335935110e-09 1s 1s 335938710e-09 0s 0s 335943790e-09 1s 1s 335945390e-09 1s 1s 335948950e-09 0s 0s 335954030e-09 1s 1s 335955670e-09 1s 1s 335959190e-09 0s 0s 335964270e-09 1s 1s 335965950e-09 1s 1s 335969430e-09 0s 0s 335974510e-09 1s 1s 335976230e-09 1s 1s 335979670e-09 0s 0s 335984750e-09 1s 1s 335986510e-09 1s 1s 335989910e-09 0s 0s 335994990e-09 1s 1s 335996790e-09 1s 1s 336000150e-09 0s 0s 336005230e-09 1s 1s 336007070e-09 1s 1s 336010390e-09 0s 0s 336015470e-09 1s 1s 336017350e-09 1s 1s 336020630e-09 0s 0s 336025710e-09 1s 1s 336027630e-09 1s 1s 336030870e-09 0s 0s 336035950e-09 1s 1s 336037910e-09 1s 1s 336041110e-09 0s 0s 336046190e-09 1s 1s 336048190e-09 1s 1s 336051350e-09 0s 0s 336056430e-09 1s 1s 336058470e-09 1s 1s 336061590e-09 0s 0s 336066670e-09 1s 1s 336068750e-09 1s 1s 336071830e-09 0s 0s 336076910e-09 1s 1s 336079030e-09 1s 1s 336082070e-09 0s 0s 336087150e-09 1s 1s 336089310e-09 1s 1s 336092310e-09 0s 0s 336097390e-09 1s 1s 336099590e-09 1s 1s 336102550e-09 0s 0s 336107630e-09 1s 1s 336109870e-09 1s 1s 336112790e-09 0s 0s 336117870e-09 1s 1s 336120150e-09 1s 1s 336123030e-09 0s 0s 336128110e-09 1s 1s 336130430e-09 1s 1s 336133270e-09 0s 0s 336138350e-09 1s 1s 336140710e-09 1s 1s 336143510e-09 0s 0s 336148590e-09 1s 1s 336150990e-09 1s 1s 336153750e-09 0s 0s 336158830e-09 1s 1s 336161270e-09 1s 1s 336163990e-09 0s 0s 336169070e-09 1s 1s 336171550e-09 1s 1s 336174230e-09 0s 0s 336179310e-09 1s 1s 336181830e-09 1s 1s 336184470e-09 0s 0s 336189550e-09 1s 1s 336192110e-09 1s 1s 336194710e-09 0s 0s 336199790e-09 1s 1s 336202390e-09 1s 1s 336204950e-09 0s 0s 336210030e-09 1s 1s 336212670e-09 1s 1s 336215190e-09 0s 0s 336220270e-09 1s 1s 336222950e-09 1s 1s 336225430e-09 0s 0s 336230510e-09 1s 1s 336233230e-09 1s 1s 336235670e-09 0s 0s 336240750e-09 1s 1s 336243510e-09 1s 1s 336245910e-09 0s 0s 336250990e-09 1s 1s 336253790e-09 1s 1s 336256150e-09 0s 0s 336261230e-09 1s 1s 336264070e-09 1s 1s 336266390e-09 0s 0s 336271470e-09 1s 1s 336274350e-09 1s 1s 336276630e-09 0s 0s 336281710e-09 1s 1s 336284630e-09 1s 1s 336286870e-09 0s 0s 336291950e-09 1s 1s 336294910e-09 1s 1s 336297110e-09 0s 0s 336302190e-09 1s 1s 336305190e-09 1s 1s 336307350e-09 0s 0s 336312430e-09 1s 1s 336315470e-09 1s 1s 336317590e-09 0s 0s 336322670e-09 1s 1s 336325750e-09 1s 1s 336327830e-09 0s 0s 336332910e-09 1s 1s 336336030e-09 1s 1s 336338070e-09 0s 0s 336343150e-09 1s 1s 336346310e-09 1s 1s 336348310e-09 0s 0s 336353390e-09 1s 1s 336356590e-09 1s 1s 336358550e-09 0s 0s 336363630e-09 1s 1s 336366870e-09 1s 1s 336368790e-09 0s 0s 336373870e-09 1s 1s 336377150e-09 1s 1s 336379030e-09 0s 0s 336384110e-09 1s 1s 336387430e-09 1s 1s 336389270e-09 0s 0s 336394350e-09 1s 1s 336397710e-09 1s 1s 336399510e-09 0s 0s 336404590e-09 1s 1s 336407990e-09 1s 1s 336409750e-09 0s 0s 336414830e-09 1s 1s 336418270e-09 1s 1s 336419990e-09 0s 0s 336425070e-09 1s 1s 336428550e-09 1s 1s 336430230e-09 0s 0s 336435310e-09 1s 1s 336438830e-09 1s 1s 336440470e-09 0s 0s 336445550e-09 1s 1s 336449110e-09 1s 1s 336450710e-09 0s 0s 336455790e-09 1s 1s 336459390e-09 1s 1s 336460950e-09 0s 0s 336466030e-09 1s 1s 336469670e-09 1s 1s 336471190e-09 0s 0s 336476270e-09 1s 1s 336479950e-09 1s 1s 336481430e-09 0s 0s 336486510e-09 1s 1s 336490230e-09 1s 1s 336491670e-09 0s 0s 336496750e-09 1s 1s 336500510e-09 1s 1s 336501910e-09 0s 0s 336506990e-09 1s 1s 336510790e-09 1s 1s 336512150e-09 0s 0s 336517230e-09 1s 1s 336521070e-09 1s 1s 336522390e-09 0s 0s 336527470e-09 1s 1s 336531350e-09 1s 1s 336532630e-09 0s 0s 336537710e-09 1s 1s 336541630e-09 1s 1s 336542870e-09 0s 0s 336547950e-09 1s 1s 336551910e-09 1s 1s 336553110e-09 0s 0s 336558190e-09 1s 1s 336562190e-09 1s 1s 336563350e-09 0s 0s 336568430e-09 1s 1s 336572470e-09 1s 1s 336573590e-09 0s 0s 336578670e-09 1s 1s 336582750e-09 1s 1s 336583830e-09 0s 0s 336588910e-09 1s 1s 336593030e-09 1s 1s 336594070e-09 0s 0s 336599150e-09 1s 1s 336603310e-09 1s 1s 336604310e-09 0s 0s 336609390e-09 1s 1s 336613590e-09 1s 1s 336614550e-09 0s 0s 336619630e-09 1s 1s 336623870e-09 1s 1s 336624790e-09 0s 0s 336629870e-09 1s 1s 336634150e-09 1s 1s 336635030e-09 0s 0s 336640110e-09 1s 1s 336644430e-09 1s 1s 336645270e-09 0s 0s 336650350e-09 1s 1s 336654710e-09 1s 1s 336655510e-09 0s 0s 336660590e-09 1s 1s 336664990e-09 1s 1s 336665750e-09 0s 0s 336670830e-09 1s 1s 336675270e-09 1s 1s 336675990e-09 0s 0s 336681070e-09 1s 1s 336685550e-09 1s 1s 336686230e-09 0s 0s 336691310e-09 1s 1s 336695830e-09 1s 1s 336696470e-09 0s 0s 336701550e-09 1s 1s 336706110e-09 1s 1s 336706710e-09 0s 0s 336711790e-09 1s 1s 336716390e-09 1s 1s 336716950e-09 0s 0s 336722030e-09 1s 1s 336726670e-09 1s 1s 336727190e-09 0s 0s 336732270e-09 1s 1s 336736950e-09 1s 1s 336737430e-09 0s 0s 336742510e-09 1s 1s 336747230e-09 1s 1s 336747670e-09 0s 0s 336752750e-09 1s 1s 336757510e-09 1s 1s 336757910e-09 0s 0s 336762990e-09 1s 1s 336767790e-09 1s 1s 336768150e-09 0s 0s 336773230e-09 1s 1s 336778070e-09 1s 1s 336778390e-09 0s 0s 336783470e-09 1s 1s 336788350e-09 1s 1s 336788630e-09 0s 0s 336793710e-09 1s 1s 336798630e-09 1s 1s 336798870e-09 0s 0s 336803950e-09 1s 1s 336808910e-09 1s 1s 336809110e-09 0s 0s 336814190e-09 1s 1s 336819190e-09 1s 1s 336819350e-09 0s 0s 336824430e-09 1s 1s 336829470e-09 1s 1s 336829590e-09 0s 0s 336834670e-09 1s 1s 336839750e-09 1s 1s 336839830e-09 0s 0s 336844910e-09 1s 1s 336850030e-09 1s 1s 336850070e-09 0s 0s 336855150e-09 1s 1s 336860310e-09 0s 0s 336865390e-09 1s 1s 336870550e-09 0s 0s 336870590e-09 0s 0s 336875630e-09 1s 1s 336880790e-09 0s 0s 336880870e-09 0s 0s 336885870e-09 1s 1s 336891030e-09 0s 0s 336891150e-09 0s 0s 336896110e-09 1s 1s 336901270e-09 0s 0s 336901430e-09 0s 0s 336906350e-09 1s 1s 336911510e-09 0s 0s 336911710e-09 0s 0s 336916590e-09 1s 1s 336921750e-09 0s 0s 336921990e-09 0s 0s 336926830e-09 1s 1s 336931990e-09 0s 0s 336932270e-09 0s 0s 336937070e-09 1s 1s 336942230e-09 0s 0s 336942550e-09 0s 0s 336947310e-09 1s 1s 336952470e-09 0s 0s 336952830e-09 0s 0s 336957550e-09 1s 1s 336962710e-09 0s 0s 336963110e-09 0s 0s 336967790e-09 1s 1s 336972950e-09 0s 0s 336973390e-09 0s 0s 336978030e-09 1s 1s 336983190e-09 0s 0s 336983670e-09 0s 0s 336988270e-09 1s 1s 336993430e-09 0s 0s 336993950e-09 0s 0s 336998510e-09 1s 1s 337003670e-09 0s 0s 337004230e-09 0s 0s 337008750e-09 1s 1s 337013910e-09 0s 0s 337014510e-09 0s 0s 337018990e-09 1s 1s 337024150e-09 0s 0s 337024790e-09 0s 0s 337029230e-09 1s 1s 337034390e-09 0s 0s 337035070e-09 0s 0s 337039470e-09 1s 1s 337044630e-09 0s 0s 337045350e-09 0s 0s 337049710e-09 1s 1s 337054870e-09 0s 0s 337055630e-09 0s 0s 337059950e-09 1s 1s 337065110e-09 0s 0s 337065910e-09 0s 0s 337070190e-09 1s 1s 337075350e-09 0s 0s 337076190e-09 0s 0s 337080430e-09 1s 1s 337085590e-09 0s 0s 337086470e-09 0s 0s 337090670e-09 1s 1s 337095830e-09 0s 0s 337096750e-09 0s 0s 337100910e-09 1s 1s 337106070e-09 0s 0s 337107030e-09 0s 0s 337111150e-09 1s 1s 337116310e-09 0s 0s 337117310e-09 0s 0s 337121390e-09 1s 1s 337126550e-09 0s 0s 337127590e-09 0s 0s 337131630e-09 1s 1s 337136790e-09 0s 0s 337137870e-09 0s 0s 337141870e-09 1s 1s 337147030e-09 0s 0s 337148150e-09 0s 0s 337152110e-09 1s 1s 337157270e-09 0s 0s 337158430e-09 0s 0s 337162350e-09 1s 1s 337167510e-09 0s 0s 337168710e-09 0s 0s 337172590e-09 1s 1s 337177750e-09 0s 0s 337178990e-09 0s 0s 337182830e-09 1s 1s 337187990e-09 0s 0s 337189270e-09 0s 0s 337193070e-09 1s 1s 337198230e-09 0s 0s 337199550e-09 0s 0s 337203310e-09 1s 1s 337208470e-09 0s 0s 337209830e-09 0s 0s 337213550e-09 1s 1s 337218710e-09 0s 0s 337220110e-09 0s 0s 337223790e-09 1s 1s 337228950e-09 0s 0s 337230390e-09 0s 0s 337234030e-09 1s 1s 337239190e-09 0s 0s 337240670e-09 0s 0s 337244270e-09 1s 1s 337249430e-09 0s 0s 337250950e-09 0s 0s 337254510e-09 1s 1s 337259670e-09 0s 0s 337261230e-09 0s 0s 337264750e-09 1s 1s 337269910e-09 0s 0s 337271510e-09 0s 0s 337274990e-09 1s 1s 337280150e-09 0s 0s 337281790e-09 0s 0s 337285230e-09 1s 1s 337290390e-09 0s 0s 337292070e-09 0s 0s 337295470e-09 1s 1s 337300630e-09 0s 0s 337302350e-09 0s 0s 337305710e-09 1s 1s 337310870e-09 0s 0s 337312630e-09 0s 0s 337315950e-09 1s 1s 337321110e-09 0s 0s 337322910e-09 0s 0s 337326190e-09 1s 1s 337331350e-09 0s 0s 337333190e-09 0s 0s 337336430e-09 1s 1s 337341590e-09 0s 0s 337343470e-09 0s 0s 337346670e-09 1s 1s 337351830e-09 0s 0s 337353750e-09 0s 0s 337356910e-09 1s 1s 337362070e-09 0s 0s 337364030e-09 0s 0s 337367150e-09 1s 1s 337372310e-09 0s 0s 337374310e-09 0s 0s 337377390e-09 1s 1s 337382550e-09 0s 0s 337384590e-09 0s 0s 337387630e-09 1s 1s 337392790e-09 0s 0s 337394870e-09 0s 0s 337397870e-09 1s 1s 337403030e-09 0s 0s 337405150e-09 0s 0s 337408110e-09 1s 1s 337413270e-09 0s 0s 337415430e-09 0s 0s 337418350e-09 1s 1s 337423510e-09 0s 0s 337425710e-09 0s 0s 337428590e-09 1s 1s 337433750e-09 0s 0s 337435990e-09 0s 0s 337438830e-09 1s 1s 337443990e-09 0s 0s 337446270e-09 0s 0s 337449070e-09 1s 1s 337454230e-09 0s 0s 337456550e-09 0s 0s 337459310e-09 1s 1s 337464470e-09 0s 0s 337466830e-09 0s 0s 337469550e-09 1s 1s 337474710e-09 0s 0s 337477110e-09 0s 0s 337479790e-09 1s 1s 337484950e-09 0s 0s 337487390e-09 0s 0s 337490030e-09 1s 1s 337495190e-09 0s 0s 337497670e-09 0s 0s 337500270e-09 1s 1s 337505430e-09 0s 0s 337507950e-09 0s 0s 337510510e-09 1s 1s 337515670e-09 0s 0s 337518230e-09 0s 0s 337520750e-09 1s 1s 337525910e-09 0s 0s 337528510e-09 0s 0s 337530990e-09 1s 1s 337536150e-09 0s 0s 337538790e-09 0s 0s 337541230e-09 1s 1s 337546390e-09 0s 0s 337549070e-09 0s 0s 337551470e-09 1s 1s 337556630e-09 0s 0s 337559350e-09 0s 0s 337561710e-09 1s 1s 337566870e-09 0s 0s 337569630e-09 0s 0s 337571950e-09 1s 1s 337577110e-09 0s 0s 337579910e-09 0s 0s 337582190e-09 1s 1s 337587350e-09 0s 0s 337590190e-09 0s 0s 337592430e-09 1s 1s 337597590e-09 0s 0s 337600470e-09 0s 0s 337602670e-09 1s 1s 337607830e-09 0s 0s 337610750e-09 0s 0s 337612910e-09 1s 1s 337618070e-09 0s 0s 337621030e-09 0s 0s 337623150e-09 1s 1s 337628310e-09 0s 0s 337631310e-09 0s 0s 337633390e-09 1s 1s 337638550e-09 0s 0s 337641590e-09 0s 0s 337643630e-09 1s 1s 337648790e-09 0s 0s 337651870e-09 0s 0s 337653870e-09 1s 1s 337659030e-09 0s 0s 337662150e-09 0s 0s 337664110e-09 1s 1s 337669270e-09 0s 0s 337672430e-09 0s 0s 337674350e-09 1s 1s 337679510e-09 0s 0s 337682710e-09 0s 0s 337684590e-09 1s 1s 337689750e-09 0s 0s 337692990e-09 0s 0s 337694830e-09 1s 1s 337699990e-09 0s 0s 337703270e-09 0s 0s 337705070e-09 1s 1s 337710230e-09 0s 0s 337713550e-09 0s 0s 337715310e-09 1s 1s 337720470e-09 0s 0s 337723830e-09 0s 0s 337725550e-09 1s 1s 337730710e-09 0s 0s 337734110e-09 0s 0s 337735790e-09 1s 1s 337740950e-09 0s 0s 337744390e-09 0s 0s 337746030e-09 1s 1s 337751190e-09 0s 0s 337754670e-09 0s 0s 337756270e-09 1s 1s 337761430e-09 0s 0s 337764950e-09 0s 0s 337766510e-09 1s 1s 337771670e-09 0s 0s 337775230e-09 0s 0s 337776750e-09 1s 1s 337781910e-09 0s 0s 337785510e-09 0s 0s 337786990e-09 1s 1s 337792150e-09 0s 0s 337795790e-09 0s 0s 337797230e-09 1s 1s 337802390e-09 0s 0s 337806070e-09 0s 0s 337807470e-09 1s 1s 337812630e-09 0s 0s 337816350e-09 0s 0s 337817710e-09 1s 1s 337822870e-09 0s 0s 337826630e-09 0s 0s 337827950e-09 1s 1s 337833110e-09 0s 0s 337836910e-09 0s 0s 337838190e-09 1s 1s 337843350e-09 0s 0s 337847190e-09 0s 0s 337848430e-09 1s 1s 337853590e-09 0s 0s 337857470e-09 0s 0s 337858670e-09 1s 1s 337863830e-09 0s 0s 337867750e-09 0s 0s 337868910e-09 1s 1s 337874070e-09 0s 0s 337878030e-09 0s 0s 337879150e-09 1s 1s 337884310e-09 0s 0s 337888310e-09 0s 0s 337889390e-09 1s 1s 337894550e-09 0s 0s 337898590e-09 0s 0s 337899630e-09 1s 1s 337904790e-09 0s 0s 337908870e-09 0s 0s 337909870e-09 1s 1s 337915030e-09 0s 0s 337919150e-09 0s 0s 337920110e-09 1s 1s 337925270e-09 0s 0s 337929430e-09 0s 0s 337930350e-09 1s 1s 337935510e-09 0s 0s 337939710e-09 0s 0s 337940590e-09 1s 1s 337945750e-09 0s 0s 337949990e-09 0s 0s 337950830e-09 1s 1s 337955990e-09 0s 0s 337960270e-09 0s 0s 337961070e-09 1s 1s 337966230e-09 0s 0s 337970550e-09 0s 0s 337971310e-09 1s 1s 337976470e-09 0s 0s 337980830e-09 0s 0s 337981550e-09 1s 1s 337986710e-09 0s 0s 337991110e-09 0s 0s 337991790e-09 1s 1s 337996950e-09 0s 0s 338001390e-09 0s 0s 338002030e-09 1s 1s 338007190e-09 0s 0s 338011670e-09 0s 0s 338012270e-09 1s 1s 338017430e-09 0s 0s 338021950e-09 0s 0s 338022510e-09 1s 1s 338027670e-09 0s 0s 338032230e-09 0s 0s 338032750e-09 1s 1s 338037910e-09 0s 0s 338042510e-09 0s 0s 338042990e-09 1s 1s 338048150e-09 0s 0s 338052790e-09 0s 0s 338053230e-09 1s 1s 338058390e-09 0s 0s 338063070e-09 0s 0s 338063470e-09 1s 1s 338068630e-09 0s 0s 338073350e-09 0s 0s 338073710e-09 1s 1s 338078870e-09 0s 0s 338083630e-09 0s 0s 338083950e-09 1s 1s 338089110e-09 0s 0s 338093910e-09 0s 0s 338094190e-09 1s 1s 338099350e-09 0s 0s 338104190e-09 0s 0s 338104430e-09 1s 1s 338109590e-09 0s 0s 338114470e-09 0s 0s 338114670e-09 1s 1s 338119830e-09 0s 0s 338124750e-09 0s 0s 338124910e-09 1s 1s 338130070e-09 0s 0s 338135030e-09 0s 0s 338135150e-09 1s 1s 338140310e-09 0s 0s 338145310e-09 0s 0s 338145390e-09 1s 1s 338150550e-09 0s 0s 338155590e-09 0s 0s 338155630e-09 1s 1s 338160790e-09 0s 0s 338165870e-09 1s 1s 338165910e-09 1s 1s 338171070e-09 0s 0s 338176110e-09 1s 1s 338176190e-09 1s 1s 338181310e-09 0s 0s 338186350e-09 1s 1s 338186470e-09 1s 1s 338191550e-09 0s 0s 338196590e-09 1s 1s 338196750e-09 1s 1s 338201790e-09 0s 0s 338206830e-09 1s 1s 338207030e-09 1s 1s 338212030e-09 0s 0s 338217070e-09 1s 1s 338217310e-09 1s 1s 338222270e-09 0s 0s 338227310e-09 1s 1s 338227590e-09 1s 1s 338232510e-09 0s 0s 338237550e-09 1s 1s 338237870e-09 1s 1s 338242750e-09 0s 0s 338247790e-09 1s 1s 338248150e-09 1s 1s 338252990e-09 0s 0s 338258030e-09 1s 1s 338258430e-09 1s 1s 338263230e-09 0s 0s 338268270e-09 1s 1s 338268710e-09 1s 1s 338273470e-09 0s 0s 338278510e-09 1s 1s 338278990e-09 1s 1s 338283710e-09 0s 0s 338288750e-09 1s 1s 338289270e-09 1s 1s 338293950e-09 0s 0s 338298990e-09 1s 1s 338299550e-09 1s 1s 338304190e-09 0s 0s 338309230e-09 1s 1s 338309830e-09 1s 1s 338314430e-09 0s 0s 338319470e-09 1s 1s 338320110e-09 1s 1s 338324670e-09 0s 0s 338329710e-09 1s 1s 338330390e-09 1s 1s 338334910e-09 0s 0s 338339950e-09 1s 1s 338340670e-09 1s 1s 338345150e-09 0s 0s 338350190e-09 1s 1s 338350950e-09 1s 1s 338355390e-09 0s 0s 338360430e-09 1s 1s 338361230e-09 1s 1s 338365630e-09 0s 0s 338370670e-09 1s 1s 338371510e-09 1s 1s 338375870e-09 0s 0s 338380910e-09 1s 1s 338381790e-09 1s 1s 338386110e-09 0s 0s 338391150e-09 1s 1s 338392070e-09 1s 1s 338396350e-09 0s 0s 338401390e-09 1s 1s 338402350e-09 1s 1s 338406590e-09 0s 0s 338411630e-09 1s 1s 338412630e-09 1s 1s 338416830e-09 0s 0s 338421870e-09 1s 1s 338422910e-09 1s 1s 338427070e-09 0s 0s 338432110e-09 1s 1s 338433190e-09 1s 1s 338437310e-09 0s 0s 338442350e-09 1s 1s 338443470e-09 1s 1s 338447550e-09 0s 0s 338452590e-09 1s 1s 338453750e-09 1s 1s 338457790e-09 0s 0s 338462830e-09 1s 1s 338464030e-09 1s 1s 338468030e-09 0s 0s 338473070e-09 1s 1s 338474310e-09 1s 1s 338478270e-09 0s 0s 338483310e-09 1s 1s 338484590e-09 1s 1s 338488510e-09 0s 0s 338493550e-09 1s 1s 338494870e-09 1s 1s 338498750e-09 0s 0s 338503790e-09 1s 1s 338505150e-09 1s 1s 338508990e-09 0s 0s 338514030e-09 1s 1s 338515430e-09 1s 1s 338519230e-09 0s 0s 338524270e-09 1s 1s 338525710e-09 1s 1s 338529470e-09 0s 0s 338534510e-09 1s 1s 338535990e-09 1s 1s 338539710e-09 0s 0s 338544750e-09 1s 1s 338546270e-09 1s 1s 338549950e-09 0s 0s 338554990e-09 1s 1s 338556550e-09 1s 1s 338560190e-09 0s 0s 338565230e-09 1s 1s 338566830e-09 1s 1s 338570430e-09 0s 0s 338575470e-09 1s 1s 338577110e-09 1s 1s 338580670e-09 0s 0s 338585710e-09 1s 1s 338587390e-09 1s 1s 338590910e-09 0s 0s 338595950e-09 1s 1s 338597670e-09 1s 1s 338601150e-09 0s 0s 338606190e-09 1s 1s 338607950e-09 1s 1s 338611390e-09 0s 0s 338616430e-09 1s 1s 338618230e-09 1s 1s 338621630e-09 0s 0s 338626670e-09 1s 1s 338628510e-09 1s 1s 338631870e-09 0s 0s 338636910e-09 1s 1s 338638790e-09 1s 1s 338642110e-09 0s 0s 338647150e-09 1s 1s 338649070e-09 1s 1s 338652350e-09 0s 0s 338657390e-09 1s 1s 338659350e-09 1s 1s 338662590e-09 0s 0s 338667630e-09 1s 1s 338669630e-09 1s 1s 338672830e-09 0s 0s 338677870e-09 1s 1s 338679910e-09 1s 1s 338683070e-09 0s 0s 338688110e-09 1s 1s 338690190e-09 1s 1s 338693310e-09 0s 0s 338698350e-09 1s 1s 338700470e-09 1s 1s 338703550e-09 0s 0s 338708590e-09 1s 1s 338710750e-09 1s 1s 338713790e-09 0s 0s 338718830e-09 1s 1s 338721030e-09 1s 1s 338724030e-09 0s 0s 338729070e-09 1s 1s 338731310e-09 1s 1s 338734270e-09 0s 0s 338739310e-09 1s 1s 338741590e-09 1s 1s 338744510e-09 0s 0s 338749550e-09 1s 1s 338751870e-09 1s 1s 338754750e-09 0s 0s 338759790e-09 1s 1s 338762150e-09 1s 1s 338764990e-09 0s 0s 338770030e-09 1s 1s 338772430e-09 1s 1s 338775230e-09 0s 0s 338780270e-09 1s 1s 338782710e-09 1s 1s 338785470e-09 0s 0s 338790510e-09 1s 1s 338792990e-09 1s 1s 338795710e-09 0s 0s 338800750e-09 1s 1s 338803270e-09 1s 1s 338805950e-09 0s 0s 338810990e-09 1s 1s 338813550e-09 1s 1s 338816190e-09 0s 0s 338821230e-09 1s 1s 338823830e-09 1s 1s 338826430e-09 0s 0s 338831470e-09 1s 1s 338834110e-09 1s 1s 338836670e-09 0s 0s 338841710e-09 1s 1s 338844390e-09 1s 1s 338846910e-09 0s 0s 338851950e-09 1s 1s 338854670e-09 1s 1s 338857150e-09 0s 0s 338862190e-09 1s 1s 338864950e-09 1s 1s 338867390e-09 0s 0s 338872430e-09 1s 1s 338875230e-09 1s 1s 338877630e-09 0s 0s 338882670e-09 1s 1s 338885510e-09 1s 1s 338887870e-09 0s 0s 338892910e-09 1s 1s 338895790e-09 1s 1s 338898110e-09 0s 0s 338903150e-09 1s 1s 338906070e-09 1s 1s 338908350e-09 0s 0s 338913390e-09 1s 1s 338916350e-09 1s 1s 338918590e-09 0s 0s 338923630e-09 1s 1s 338926630e-09 1s 1s 338928830e-09 0s 0s 338933870e-09 1s 1s 338936910e-09 1s 1s 338939070e-09 0s 0s 338944110e-09 1s 1s 338947190e-09 1s 1s 338949310e-09 0s 0s 338954350e-09 1s 1s 338957470e-09 1s 1s 338959550e-09 0s 0s 338964590e-09 1s 1s 338967750e-09 1s 1s 338969790e-09 0s 0s 338974830e-09 1s 1s 338978030e-09 1s 1s 338980030e-09 0s 0s 338985070e-09 1s 1s 338988310e-09 1s 1s 338990270e-09 0s 0s 338995310e-09 1s 1s 338998590e-09 1s 1s 339000510e-09 0s 0s 339005550e-09 1s 1s 339008870e-09 1s 1s 339010750e-09 0s 0s 339015790e-09 1s 1s 339019150e-09 1s 1s 339020990e-09 0s 0s 339026030e-09 1s 1s 339029430e-09 1s 1s 339031230e-09 0s 0s 339036270e-09 1s 1s 339039710e-09 1s 1s 339041470e-09 0s 0s 339046510e-09 1s 1s 339049990e-09 1s 1s 339051710e-09 0s 0s 339056750e-09 1s 1s 339060270e-09 1s 1s 339061950e-09 0s 0s 339066990e-09 1s 1s 339070550e-09 1s 1s 339072190e-09 0s 0s 339077230e-09 1s 1s 339080830e-09 1s 1s 339082430e-09 0s 0s 339087470e-09 1s 1s 339091110e-09 1s 1s 339092670e-09 0s 0s 339097710e-09 1s 1s 339101390e-09 1s 1s 339102910e-09 0s 0s 339107950e-09 1s 1s 339111670e-09 1s 1s 339113150e-09 0s 0s 339118190e-09 1s 1s 339121950e-09 1s 1s 339123390e-09 0s 0s 339128430e-09 1s 1s 339132230e-09 1s 1s 339133630e-09 0s 0s 339138670e-09 1s 1s 339142510e-09 1s 1s 339143870e-09 0s 0s 339148910e-09 1s 1s 339152790e-09 1s 1s 339154110e-09 0s 0s 339159150e-09 1s 1s 339163070e-09 1s 1s 339164350e-09 0s 0s 339169390e-09 1s 1s 339173350e-09 1s 1s 339174590e-09 0s 0s 339179630e-09 1s 1s 339183630e-09 1s 1s 339184830e-09 0s 0s 339189870e-09 1s 1s 339193910e-09 1s 1s 339195070e-09 0s 0s 339200110e-09 1s 1s 339204190e-09 1s 1s 339205310e-09 0s 0s 339210350e-09 1s 1s 339214470e-09 1s 1s 339215550e-09 0s 0s 339220590e-09 1s 1s 339224750e-09 1s 1s 339225790e-09 0s 0s 339230830e-09 1s 1s 339235030e-09 1s 1s 339236030e-09 0s 0s 339241070e-09 1s 1s 339245310e-09 1s 1s 339246270e-09 0s 0s 339251310e-09 1s 1s 339255590e-09 1s 1s 339256510e-09 0s 0s 339261550e-09 1s 1s 339265870e-09 1s 1s 339266750e-09 0s 0s 339271790e-09 1s 1s 339276150e-09 1s 1s 339276990e-09 0s 0s 339282030e-09 1s 1s 339286430e-09 1s 1s 339287230e-09 0s 0s 339292270e-09 1s 1s 339296710e-09 1s 1s 339297470e-09 0s 0s 339302510e-09 1s 1s 339306990e-09 1s 1s 339307710e-09 0s 0s 339312750e-09 1s 1s 339317270e-09 1s 1s 339317950e-09 0s 0s 339322990e-09 1s 1s 339327550e-09 1s 1s 339328190e-09 0s 0s 339333230e-09 1s 1s 339337830e-09 1s 1s 339338430e-09 0s 0s 339343470e-09 1s 1s 339348110e-09 1s 1s 339348670e-09 0s 0s 339353710e-09 1s 1s 339358390e-09 1s 1s 339358910e-09 0s 0s 339363950e-09 1s 1s 339368670e-09 1s 1s 339369150e-09 0s 0s 339374190e-09 1s 1s 339378950e-09 1s 1s 339379390e-09 0s 0s 339384430e-09 1s 1s 339389230e-09 1s 1s 339389630e-09 0s 0s 339394670e-09 1s 1s 339399510e-09 1s 1s 339399870e-09 0s 0s 339404910e-09 1s 1s 339409790e-09 1s 1s 339410110e-09 0s 0s 339415150e-09 1s 1s 339420070e-09 1s 1s 339420350e-09 0s 0s 339425390e-09 1s 1s 339430350e-09 1s 1s 339430590e-09 0s 0s 339435630e-09 1s 1s 339440630e-09 1s 1s 339440830e-09 0s 0s 339445870e-09 1s 1s 339450910e-09 1s 1s 339451070e-09 0s 0s 339456110e-09 1s 1s 339461190e-09 1s 1s 339461310e-09 0s 0s 339466350e-09 1s 1s 339471470e-09 1s 1s 339471550e-09 0s 0s 339476590e-09 1s 1s 339481750e-09 1s 1s 339481790e-09 0s 0s 339486830e-09 1s 1s 339492030e-09 0s 0s 339497070e-09 1s 1s 339502270e-09 0s 0s 339502310e-09 0s 0s 339507310e-09 1s 1s 339512510e-09 0s 0s 339512590e-09 0s 0s 339517550e-09 1s 1s 339522750e-09 0s 0s 339522870e-09 0s 0s 339527790e-09 1s 1s 339532990e-09 0s 0s 339533150e-09 0s 0s 339538030e-09 1s 1s 339543230e-09 0s 0s 339543430e-09 0s 0s 339548270e-09 1s 1s 339553470e-09 0s 0s 339553710e-09 0s 0s 339558510e-09 1s 1s 339563710e-09 0s 0s 339563990e-09 0s 0s 339568750e-09 1s 1s 339573950e-09 0s 0s 339574270e-09 0s 0s 339578990e-09 1s 1s 339584190e-09 0s 0s 339584550e-09 0s 0s 339589230e-09 1s 1s 339594430e-09 0s 0s 339594830e-09 0s 0s 339599470e-09 1s 1s 339604670e-09 0s 0s 339605110e-09 0s 0s 339609710e-09 1s 1s 339614910e-09 0s 0s 339615390e-09 0s 0s 339619950e-09 1s 1s 339625150e-09 0s 0s 339625670e-09 0s 0s 339630190e-09 1s 1s 339635390e-09 0s 0s 339635950e-09 0s 0s 339640430e-09 1s 1s 339645630e-09 0s 0s 339646230e-09 0s 0s 339650670e-09 1s 1s 339655870e-09 0s 0s 339656510e-09 0s 0s 339660910e-09 1s 1s 339666110e-09 0s 0s 339666790e-09 0s 0s 339671150e-09 1s 1s 339676350e-09 0s 0s 339677070e-09 0s 0s 339681390e-09 1s 1s 339686590e-09 0s 0s 339687350e-09 0s 0s 339691630e-09 1s 1s 339696830e-09 0s 0s 339697630e-09 0s 0s 339701870e-09 1s 1s 339707070e-09 0s 0s 339707910e-09 0s 0s 339712110e-09 1s 1s 339717310e-09 0s 0s 339718190e-09 0s 0s 339722350e-09 1s 1s 339727550e-09 0s 0s 339728470e-09 0s 0s 339732590e-09 1s 1s 339737790e-09 0s 0s 339738750e-09 0s 0s 339742830e-09 1s 1s 339748030e-09 0s 0s 339749030e-09 0s 0s 339753070e-09 1s 1s 339758270e-09 0s 0s 339759310e-09 0s 0s 339763310e-09 1s 1s 339768510e-09 0s 0s 339769590e-09 0s 0s 339773550e-09 1s 1s 339778750e-09 0s 0s 339779870e-09 0s 0s 339783790e-09 1s 1s 339788990e-09 0s 0s 339790150e-09 0s 0s 339794030e-09 1s 1s 339799230e-09 0s 0s 339800430e-09 0s 0s 339804270e-09 1s 1s 339809470e-09 0s 0s 339810710e-09 0s 0s 339814510e-09 1s 1s 339819710e-09 0s 0s 339820990e-09 0s 0s 339824750e-09 1s 1s 339829950e-09 0s 0s 339831270e-09 0s 0s 339834990e-09 1s 1s 339840190e-09 0s 0s 339841550e-09 0s 0s 339845230e-09 1s 1s 339850430e-09 0s 0s 339851830e-09 0s 0s 339855470e-09 1s 1s 339860670e-09 0s 0s 339862110e-09 0s 0s 339865710e-09 1s 1s 339870910e-09 0s 0s 339872390e-09 0s 0s 339875950e-09 1s 1s 339881150e-09 0s 0s 339882670e-09 0s 0s 339886190e-09 1s 1s 339891390e-09 0s 0s 339892950e-09 0s 0s 339896430e-09 1s 1s 339901630e-09 0s 0s 339903230e-09 0s 0s 339906670e-09 1s 1s 339911870e-09 0s 0s 339913510e-09 0s 0s 339916910e-09 1s 1s 339922110e-09 0s 0s 339923790e-09 0s 0s 339927150e-09 1s 1s 339932350e-09 0s 0s 339934070e-09 0s 0s 339937390e-09 1s 1s 339942590e-09 0s 0s 339944350e-09 0s 0s 339947630e-09 1s 1s 339952830e-09 0s 0s 339954630e-09 0s 0s 339957870e-09 1s 1s 339963070e-09 0s 0s 339964910e-09 0s 0s 339968110e-09 1s 1s 339973310e-09 0s 0s 339975190e-09 0s 0s 339978350e-09 1s 1s 339983550e-09 0s 0s 339985470e-09 0s 0s 339988590e-09 1s 1s 339993790e-09 0s 0s 339995750e-09 0s 0s 339998830e-09 1s 1s 340004030e-09 0s 0s 340006030e-09 0s 0s 340009070e-09 1s 1s 340014270e-09 0s 0s 340016310e-09 0s 0s 340019310e-09 1s 1s 340024510e-09 0s 0s 340026590e-09 0s 0s 340029550e-09 1s 1s 340034750e-09 0s 0s 340036870e-09 0s 0s 340039790e-09 1s 1s 340044990e-09 0s 0s 340047150e-09 0s 0s 340050030e-09 1s 1s 340055230e-09 0s 0s 340057430e-09 0s 0s 340060270e-09 1s 1s 340065470e-09 0s 0s 340067710e-09 0s 0s 340070510e-09 1s 1s 340075710e-09 0s 0s 340077990e-09 0s 0s 340080750e-09 1s 1s 340085950e-09 0s 0s 340088270e-09 0s 0s 340090990e-09 1s 1s 340096190e-09 0s 0s 340098550e-09 0s 0s 340101230e-09 1s 1s 340106430e-09 0s 0s 340108830e-09 0s 0s 340111470e-09 1s 1s 340116670e-09 0s 0s 340119110e-09 0s 0s 340121710e-09 1s 1s 340126910e-09 0s 0s 340129390e-09 0s 0s 340131950e-09 1s 1s 340137150e-09 0s 0s 340139670e-09 0s 0s 340142190e-09 1s 1s 340147390e-09 0s 0s 340149950e-09 0s 0s 340152430e-09 1s 1s 340157630e-09 0s 0s 340160230e-09 0s 0s 340162670e-09 1s 1s 340167870e-09 0s 0s 340170510e-09 0s 0s 340172910e-09 1s 1s 340178110e-09 0s 0s 340180790e-09 0s 0s 340183150e-09 1s 1s 340188350e-09 0s 0s 340191070e-09 0s 0s 340193390e-09 1s 1s 340198590e-09 0s 0s 340201350e-09 0s 0s 340203630e-09 1s 1s 340208830e-09 0s 0s 340211630e-09 0s 0s 340213870e-09 1s 1s 340219070e-09 0s 0s 340221910e-09 0s 0s 340224110e-09 1s 1s 340229310e-09 0s 0s 340232190e-09 0s 0s 340234350e-09 1s 1s 340239550e-09 0s 0s 340242470e-09 0s 0s 340244590e-09 1s 1s 340249790e-09 0s 0s 340252750e-09 0s 0s 340254830e-09 1s 1s 340260030e-09 0s 0s 340263030e-09 0s 0s 340265070e-09 1s 1s 340270270e-09 0s 0s 340273310e-09 0s 0s 340275310e-09 1s 1s 340280510e-09 0s 0s 340283590e-09 0s 0s 340285550e-09 1s 1s 340290750e-09 0s 0s 340293870e-09 0s 0s 340295790e-09 1s 1s 340300990e-09 0s 0s 340304150e-09 0s 0s 340306030e-09 1s 1s 340311230e-09 0s 0s 340314430e-09 0s 0s 340316270e-09 1s 1s 340321470e-09 0s 0s 340324710e-09 0s 0s 340326510e-09 1s 1s 340331710e-09 0s 0s 340334990e-09 0s 0s 340336750e-09 1s 1s 340341950e-09 0s 0s 340345270e-09 0s 0s 340346990e-09 1s 1s 340352190e-09 0s 0s 340355550e-09 0s 0s 340357230e-09 1s 1s 340362430e-09 0s 0s 340365830e-09 0s 0s 340367470e-09 1s 1s 340372670e-09 0s 0s 340376110e-09 0s 0s 340377710e-09 1s 1s 340382910e-09 0s 0s 340386390e-09 0s 0s 340387950e-09 1s 1s 340393150e-09 0s 0s 340396670e-09 0s 0s 340398190e-09 1s 1s 340403390e-09 0s 0s 340406950e-09 0s 0s 340408430e-09 1s 1s 340413630e-09 0s 0s 340417230e-09 0s 0s 340418670e-09 1s 1s 340423870e-09 0s 0s 340427510e-09 0s 0s 340428910e-09 1s 1s 340434110e-09 0s 0s 340437790e-09 0s 0s 340439150e-09 1s 1s 340444350e-09 0s 0s 340448070e-09 0s 0s 340449390e-09 1s 1s 340454590e-09 0s 0s 340458350e-09 0s 0s 340459630e-09 1s 1s 340464830e-09 0s 0s 340468630e-09 0s 0s 340469870e-09 1s 1s 340475070e-09 0s 0s 340478910e-09 0s 0s 340480110e-09 1s 1s 340485310e-09 0s 0s 340489190e-09 0s 0s 340490350e-09 1s 1s 340495550e-09 0s 0s 340499470e-09 0s 0s 340500590e-09 1s 1s 340505790e-09 0s 0s 340509750e-09 0s 0s 340510830e-09 1s 1s 340516030e-09 0s 0s 340520030e-09 0s 0s 340521070e-09 1s 1s 340526270e-09 0s 0s 340530310e-09 0s 0s 340531310e-09 1s 1s 340536510e-09 0s 0s 340540590e-09 0s 0s 340541550e-09 1s 1s 340546750e-09 0s 0s 340550870e-09 0s 0s 340551790e-09 1s 1s 340556990e-09 0s 0s 340561150e-09 0s 0s 340562030e-09 1s 1s 340567230e-09 0s 0s 340571430e-09 0s 0s 340572270e-09 1s 1s 340577470e-09 0s 0s 340581710e-09 0s 0s 340582510e-09 1s 1s 340587710e-09 0s 0s 340591990e-09 0s 0s 340592750e-09 1s 1s 340597950e-09 0s 0s 340602270e-09 0s 0s 340602990e-09 1s 1s 340608190e-09 0s 0s 340612550e-09 0s 0s 340613230e-09 1s 1s 340618430e-09 0s 0s 340622830e-09 0s 0s 340623470e-09 1s 1s 340628670e-09 0s 0s 340633110e-09 0s 0s 340633710e-09 1s 1s 340638910e-09 0s 0s 340643390e-09 0s 0s 340643950e-09 1s 1s 340649150e-09 0s 0s 340653670e-09 0s 0s 340654190e-09 1s 1s 340659390e-09 0s 0s 340663950e-09 0s 0s 340664430e-09 1s 1s 340669630e-09 0s 0s 340674230e-09 0s 0s 340674670e-09 1s 1s 340679870e-09 0s 0s 340684510e-09 0s 0s 340684910e-09 1s 1s 340690110e-09 0s 0s 340694790e-09 0s 0s 340695150e-09 1s 1s 340700350e-09 0s 0s 340705070e-09 0s 0s 340705390e-09 1s 1s 340710590e-09 0s 0s 340715350e-09 0s 0s 340715630e-09 1s 1s 340720830e-09 0s 0s 340725630e-09 0s 0s 340725870e-09 1s 1s 340731070e-09 0s 0s 340735910e-09 0s 0s 340736110e-09 1s 1s 340741310e-09 0s 0s 340746190e-09 0s 0s 340746350e-09 1s 1s 340751550e-09 0s 0s 340756470e-09 0s 0s 340756590e-09 1s 1s 340761790e-09 0s 0s 340766750e-09 0s 0s 340766830e-09 1s 1s 340772030e-09 0s 0s 340777030e-09 0s 0s 340777070e-09 1s 1s 340782270e-09 0s 0s 340787310e-09 1s 1s 340787350e-09 1s 1s 340792550e-09 0s 0s 340797550e-09 1s 1s 340797630e-09 1s 1s 340802790e-09 0s 0s 340807790e-09 1s 1s 340807910e-09 1s 1s 340813030e-09 0s 0s 340818030e-09 1s 1s 340818190e-09 1s 1s 340823270e-09 0s 0s 340828270e-09 1s 1s 340828470e-09 1s 1s 340833510e-09 0s 0s 340838510e-09 1s 1s 340838750e-09 1s 1s 340843750e-09 0s 0s 340848750e-09 1s 1s 340849030e-09 1s 1s 340853990e-09 0s 0s 340858990e-09 1s 1s 340859310e-09 1s 1s 340864230e-09 0s 0s 340869230e-09 1s 1s 340869590e-09 1s 1s 340874470e-09 0s 0s 340879470e-09 1s 1s 340879870e-09 1s 1s 340884710e-09 0s 0s 340889710e-09 1s 1s 340890150e-09 1s 1s 340894950e-09 0s 0s 340899950e-09 1s 1s 340900430e-09 1s 1s 340905190e-09 0s 0s 340910190e-09 1s 1s 340910710e-09 1s 1s 340915430e-09 0s 0s 340920430e-09 1s 1s 340920990e-09 1s 1s 340925670e-09 0s 0s 340930670e-09 1s 1s 340931270e-09 1s 1s 340935910e-09 0s 0s 340940910e-09 1s 1s 340941550e-09 1s 1s 340946150e-09 0s 0s 340951150e-09 1s 1s 340951830e-09 1s 1s 340956390e-09 0s 0s 340961390e-09 1s 1s 340962110e-09 1s 1s 340966630e-09 0s 0s 340971630e-09 1s 1s 340972390e-09 1s 1s 340976870e-09 0s 0s 340981870e-09 1s 1s 340982670e-09 1s 1s 340987110e-09 0s 0s 340992110e-09 1s 1s 340992950e-09 1s 1s 340997350e-09 0s 0s 341002350e-09 1s 1s 341003230e-09 1s 1s 341007590e-09 0s 0s 341012590e-09 1s 1s 341013510e-09 1s 1s 341017830e-09 0s 0s 341022830e-09 1s 1s 341023790e-09 1s 1s 341028070e-09 0s 0s 341033070e-09 1s 1s 341034070e-09 1s 1s 341038310e-09 0s 0s 341043310e-09 1s 1s 341044350e-09 1s 1s 341048550e-09 0s 0s 341053550e-09 1s 1s 341054630e-09 1s 1s 341058790e-09 0s 0s 341063790e-09 1s 1s 341064910e-09 1s 1s 341069030e-09 0s 0s 341074030e-09 1s 1s 341075190e-09 1s 1s 341079270e-09 0s 0s 341084270e-09 1s 1s 341085470e-09 1s 1s 341089510e-09 0s 0s 341094510e-09 1s 1s 341095750e-09 1s 1s 341099750e-09 0s 0s 341104750e-09 1s 1s 341106030e-09 1s 1s 341109990e-09 0s 0s 341114990e-09 1s 1s 341116310e-09 1s 1s 341120230e-09 0s 0s 341125230e-09 1s 1s 341126590e-09 1s 1s 341130470e-09 0s 0s 341135470e-09 1s 1s 341136870e-09 1s 1s 341140710e-09 0s 0s 341145710e-09 1s 1s 341147150e-09 1s 1s 341150950e-09 0s 0s 341155950e-09 1s 1s 341157430e-09 1s 1s 341161190e-09 0s 0s 341166190e-09 1s 1s 341167710e-09 1s 1s 341171430e-09 0s 0s 341176430e-09 1s 1s 341177990e-09 1s 1s 341181670e-09 0s 0s 341186670e-09 1s 1s 341188270e-09 1s 1s 341191910e-09 0s 0s 341196910e-09 1s 1s 341198550e-09 1s 1s 341202150e-09 0s 0s 341207150e-09 1s 1s 341208830e-09 1s 1s 341212390e-09 0s 0s 341217390e-09 1s 1s 341219110e-09 1s 1s 341222630e-09 0s 0s 341227630e-09 1s 1s 341229390e-09 1s 1s 341232870e-09 0s 0s 341237870e-09 1s 1s 341239670e-09 1s 1s 341243110e-09 0s 0s 341248110e-09 1s 1s 341249950e-09 1s 1s 341253350e-09 0s 0s 341258350e-09 1s 1s 341260230e-09 1s 1s 341263590e-09 0s 0s 341268590e-09 1s 1s 341270510e-09 1s 1s 341273830e-09 0s 0s 341278830e-09 1s 1s 341280790e-09 1s 1s 341284070e-09 0s 0s 341289070e-09 1s 1s 341291070e-09 1s 1s 341294310e-09 0s 0s 341299310e-09 1s 1s 341301350e-09 1s 1s 341304550e-09 0s 0s 341309550e-09 1s 1s 341311630e-09 1s 1s 341314790e-09 0s 0s 341319790e-09 1s 1s 341321910e-09 1s 1s 341325030e-09 0s 0s 341330030e-09 1s 1s 341332190e-09 1s 1s 341335270e-09 0s 0s 341340270e-09 1s 1s 341342470e-09 1s 1s 341345510e-09 0s 0s 341350510e-09 1s 1s 341352750e-09 1s 1s 341355750e-09 0s 0s 341360750e-09 1s 1s 341363030e-09 1s 1s 341365990e-09 0s 0s 341370990e-09 1s 1s 341373310e-09 1s 1s 341376230e-09 0s 0s 341381230e-09 1s 1s 341383590e-09 1s 1s 341386470e-09 0s 0s 341391470e-09 1s 1s 341393870e-09 1s 1s 341396710e-09 0s 0s 341401710e-09 1s 1s 341404150e-09 1s 1s 341406950e-09 0s 0s 341411950e-09 1s 1s 341414430e-09 1s 1s 341417190e-09 0s 0s 341422190e-09 1s 1s 341424710e-09 1s 1s 341427430e-09 0s 0s 341432430e-09 1s 1s 341434990e-09 1s 1s 341437670e-09 0s 0s 341442670e-09 1s 1s 341445270e-09 1s 1s 341447910e-09 0s 0s 341452910e-09 1s 1s 341455550e-09 1s 1s 341458150e-09 0s 0s 341463150e-09 1s 1s 341465830e-09 1s 1s 341468390e-09 0s 0s 341473390e-09 1s 1s 341476110e-09 1s 1s 341478630e-09 0s 0s 341483630e-09 1s 1s 341486390e-09 1s 1s 341488870e-09 0s 0s 341493870e-09 1s 1s 341496670e-09 1s 1s 341499110e-09 0s 0s 341504110e-09 1s 1s 341506950e-09 1s 1s 341509350e-09 0s 0s 341514350e-09 1s 1s 341517230e-09 1s 1s 341519590e-09 0s 0s 341524590e-09 1s 1s 341527510e-09 1s 1s 341529830e-09 0s 0s 341534830e-09 1s 1s 341537790e-09 1s 1s 341540070e-09 0s 0s 341545070e-09 1s 1s 341548070e-09 1s 1s 341550310e-09 0s 0s 341555310e-09 1s 1s 341558350e-09 1s 1s 341560550e-09 0s 0s 341565550e-09 1s 1s 341568630e-09 1s 1s 341570790e-09 0s 0s 341575790e-09 1s 1s 341578910e-09 1s 1s 341581030e-09 0s 0s 341586030e-09 1s 1s 341589190e-09 1s 1s 341591270e-09 0s 0s 341596270e-09 1s 1s 341599470e-09 1s 1s 341601510e-09 0s 0s 341606510e-09 1s 1s 341609750e-09 1s 1s 341611750e-09 0s 0s 341616750e-09 1s 1s 341620030e-09 1s 1s 341621990e-09 0s 0s 341626990e-09 1s 1s 341630310e-09 1s 1s 341632230e-09 0s 0s 341637230e-09 1s 1s 341640590e-09 1s 1s 341642470e-09 0s 0s 341647470e-09 1s 1s 341650870e-09 1s 1s 341652710e-09 0s 0s 341657710e-09 1s 1s 341661150e-09 1s 1s 341662950e-09 0s 0s 341667950e-09 1s 1s 341671430e-09 1s 1s 341673190e-09 0s 0s 341678190e-09 1s 1s 341681710e-09 1s 1s 341683430e-09 0s 0s 341688430e-09 1s 1s 341691990e-09 1s 1s 341693670e-09 0s 0s 341698670e-09 1s 1s 341702270e-09 1s 1s 341703910e-09 0s 0s 341708910e-09 1s 1s 341712550e-09 1s 1s 341714150e-09 0s 0s 341719150e-09 1s 1s 341722830e-09 1s 1s 341724390e-09 0s 0s 341729390e-09 1s 1s 341733110e-09 1s 1s 341734630e-09 0s 0s 341739630e-09 1s 1s 341743390e-09 1s 1s 341744870e-09 0s 0s 341749870e-09 1s 1s 341753670e-09 1s 1s 341755110e-09 0s 0s 341760110e-09 1s 1s 341763950e-09 1s 1s 341765350e-09 0s 0s 341770350e-09 1s 1s 341774230e-09 1s 1s 341775590e-09 0s 0s 341780590e-09 1s 1s 341784510e-09 1s 1s 341785830e-09 0s 0s 341790830e-09 1s 1s 341794790e-09 1s 1s 341796070e-09 0s 0s 341801070e-09 1s 1s 341805070e-09 1s 1s 341806310e-09 0s 0s 341811310e-09 1s 1s 341815350e-09 1s 1s 341816550e-09 0s 0s 341821550e-09 1s 1s 341825630e-09 1s 1s 341826790e-09 0s 0s 341831790e-09 1s 1s 341835910e-09 1s 1s 341837030e-09 0s 0s 341842030e-09 1s 1s 341846190e-09 1s 1s 341847270e-09 0s 0s 341852270e-09 1s 1s 341856470e-09 1s 1s 341857510e-09 0s 0s 341862510e-09 1s 1s 341866750e-09 1s 1s 341867750e-09 0s 0s 341872750e-09 1s 1s 341877030e-09 1s 1s 341877990e-09 0s 0s 341882990e-09 1s 1s 341887310e-09 1s 1s 341888230e-09 0s 0s 341893230e-09 1s 1s 341897590e-09 1s 1s 341898470e-09 0s 0s 341903470e-09 1s 1s 341907870e-09 1s 1s 341908710e-09 0s 0s 341913710e-09 1s 1s 341918150e-09 1s 1s 341918950e-09 0s 0s 341923950e-09 1s 1s 341928430e-09 1s 1s 341929190e-09 0s 0s 341934190e-09 1s 1s 341938710e-09 1s 1s 341939430e-09 0s 0s 341944430e-09 1s 1s 341948990e-09 1s 1s 341949670e-09 0s 0s 341954670e-09 1s 1s 341959270e-09 1s 1s 341959910e-09 0s 0s 341964910e-09 1s 1s 341969550e-09 1s 1s 341970150e-09 0s 0s 341975150e-09 1s 1s 341979830e-09 1s 1s 341980390e-09 0s 0s 341985390e-09 1s 1s 341990110e-09 1s 1s 341990630e-09 0s 0s 341995630e-09 1s 1s 342000390e-09 1s 1s 342000870e-09 0s 0s 342005870e-09 1s 1s 342010670e-09 1s 1s 342011110e-09 0s 0s 342016110e-09 1s 1s 342020950e-09 1s 1s 342021350e-09 0s 0s 342026350e-09 1s 1s 342031230e-09 1s 1s 342031590e-09 0s 0s 342036590e-09 1s 1s 342041510e-09 1s 1s 342041830e-09 0s 0s 342046830e-09 1s 1s 342051790e-09 1s 1s 342052070e-09 0s 0s 342057070e-09 1s 1s 342062070e-09 1s 1s 342062310e-09 0s 0s 342067310e-09 1s 1s 342072350e-09 1s 1s 342072550e-09 0s 0s 342077550e-09 1s 1s 342082630e-09 1s 1s 342082790e-09 0s 0s 342087790e-09 1s 1s 342092910e-09 1s 1s 342093030e-09 0s 0s 342098030e-09 1s 1s 342103190e-09 1s 1s 342103270e-09 0s 0s 342108270e-09 1s 1s 342113470e-09 1s 1s 342113510e-09 0s 0s 342118510e-09 1s 1s 342123750e-09 0s 0s 342128750e-09 1s 1s 342133990e-09 0s 0s 342134030e-09 0s 0s 342138990e-09 1s 1s 342144230e-09 0s 0s 342144310e-09 0s 0s 342149230e-09 1s 1s 342154470e-09 0s 0s 342154590e-09 0s 0s 342159470e-09 1s 1s 342164710e-09 0s 0s 342164870e-09 0s 0s 342169710e-09 1s 1s 342174950e-09 0s 0s 342175150e-09 0s 0s 342179950e-09 1s 1s 342185190e-09 0s 0s 342185430e-09 0s 0s 342190190e-09 1s 1s 342195430e-09 0s 0s 342195710e-09 0s 0s 342200430e-09 1s 1s 342205670e-09 0s 0s 342205990e-09 0s 0s 342210670e-09 1s 1s 342215910e-09 0s 0s 342216270e-09 0s 0s 342220910e-09 1s 1s 342226150e-09 0s 0s 342226550e-09 0s 0s 342231150e-09 1s 1s 342236390e-09 0s 0s 342236830e-09 0s 0s 342241390e-09 1s 1s 342246630e-09 0s 0s 342247110e-09 0s 0s 342251630e-09 1s 1s 342256870e-09 0s 0s 342257390e-09 0s 0s 342261870e-09 1s 1s 342267110e-09 0s 0s 342267670e-09 0s 0s 342272110e-09 1s 1s 342277350e-09 0s 0s 342277950e-09 0s 0s 342282350e-09 1s 1s 342287590e-09 0s 0s 342288230e-09 0s 0s 342292590e-09 1s 1s 342297830e-09 0s 0s 342298510e-09 0s 0s 342302830e-09 1s 1s 342308070e-09 0s 0s 342308790e-09 0s 0s 342313070e-09 1s 1s 342318310e-09 0s 0s 342319070e-09 0s 0s 342323310e-09 1s 1s 342328550e-09 0s 0s 342329350e-09 0s 0s 342333550e-09 1s 1s 342338790e-09 0s 0s 342339630e-09 0s 0s 342343790e-09 1s 1s 342349030e-09 0s 0s 342349910e-09 0s 0s 342354030e-09 1s 1s 342359270e-09 0s 0s 342360190e-09 0s 0s 342364270e-09 1s 1s 342369510e-09 0s 0s 342370470e-09 0s 0s 342374510e-09 1s 1s 342379750e-09 0s 0s 342380750e-09 0s 0s 342384750e-09 1s 1s 342389990e-09 0s 0s 342391030e-09 0s 0s 342394990e-09 1s 1s 342400230e-09 0s 0s 342401310e-09 0s 0s 342405230e-09 1s 1s 342410470e-09 0s 0s 342411590e-09 0s 0s 342415470e-09 1s 1s 342420710e-09 0s 0s 342421870e-09 0s 0s 342425710e-09 1s 1s 342430950e-09 0s 0s 342432150e-09 0s 0s 342435950e-09 1s 1s 342441190e-09 0s 0s 342442430e-09 0s 0s 342446190e-09 1s 1s 342451430e-09 0s 0s 342452710e-09 0s 0s 342456430e-09 1s 1s 342461670e-09 0s 0s 342462990e-09 0s 0s 342466670e-09 1s 1s 342471910e-09 0s 0s 342473270e-09 0s 0s 342476910e-09 1s 1s 342482150e-09 0s 0s 342483550e-09 0s 0s 342487150e-09 1s 1s 342492390e-09 0s 0s 342493830e-09 0s 0s 342497390e-09 1s 1s 342502630e-09 0s 0s 342504110e-09 0s 0s 342507630e-09 1s 1s 342512870e-09 0s 0s 342514390e-09 0s 0s 342517870e-09 1s 1s 342523110e-09 0s 0s 342524670e-09 0s 0s 342528110e-09 1s 1s 342533350e-09 0s 0s 342534950e-09 0s 0s 342538350e-09 1s 1s 342543590e-09 0s 0s 342545230e-09 0s 0s 342548590e-09 1s 1s 342553830e-09 0s 0s 342555510e-09 0s 0s 342558830e-09 1s 1s 342564070e-09 0s 0s 342565790e-09 0s 0s 342569070e-09 1s 1s 342574310e-09 0s 0s 342576070e-09 0s 0s 342579310e-09 1s 1s 342584550e-09 0s 0s 342586350e-09 0s 0s 342589550e-09 1s 1s 342594790e-09 0s 0s 342596630e-09 0s 0s 342599790e-09 1s 1s 342605030e-09 0s 0s 342606910e-09 0s 0s 342610030e-09 1s 1s 342615270e-09 0s 0s 342617190e-09 0s 0s 342620270e-09 1s 1s 342625510e-09 0s 0s 342627470e-09 0s 0s 342630510e-09 1s 1s 342635750e-09 0s 0s 342637750e-09 0s 0s 342640750e-09 1s 1s 342645990e-09 0s 0s 342648030e-09 0s 0s 342650990e-09 1s 1s 342656230e-09 0s 0s 342658310e-09 0s 0s 342661230e-09 1s 1s 342666470e-09 0s 0s 342668590e-09 0s 0s 342671470e-09 1s 1s 342676710e-09 0s 0s 342678870e-09 0s 0s 342681710e-09 1s 1s 342686950e-09 0s 0s 342689150e-09 0s 0s 342691950e-09 1s 1s 342697190e-09 0s 0s 342699430e-09 0s 0s 342702190e-09 1s 1s 342707430e-09 0s 0s 342709710e-09 0s 0s 342712430e-09 1s 1s 342717670e-09 0s 0s 342719990e-09 0s 0s 342722670e-09 1s 1s 342727910e-09 0s 0s 342730270e-09 0s 0s 342732910e-09 1s 1s 342738150e-09 0s 0s 342740550e-09 0s 0s 342743150e-09 1s 1s 342748390e-09 0s 0s 342750830e-09 0s 0s 342753390e-09 1s 1s 342758630e-09 0s 0s 342761110e-09 0s 0s 342763630e-09 1s 1s 342768870e-09 0s 0s 342771390e-09 0s 0s 342773870e-09 1s 1s 342779110e-09 0s 0s 342781670e-09 0s 0s 342784110e-09 1s 1s 342789350e-09 0s 0s 342791950e-09 0s 0s 342794350e-09 1s 1s 342799590e-09 0s 0s 342802230e-09 0s 0s 342804590e-09 1s 1s 342809830e-09 0s 0s 342812510e-09 0s 0s 342814830e-09 1s 1s 342820070e-09 0s 0s 342822790e-09 0s 0s 342825070e-09 1s 1s 342830310e-09 0s 0s 342833070e-09 0s 0s 342835310e-09 1s 1s 342840550e-09 0s 0s 342843350e-09 0s 0s 342845550e-09 1s 1s 342850790e-09 0s 0s 342853630e-09 0s 0s 342855790e-09 1s 1s 342861030e-09 0s 0s 342863910e-09 0s 0s 342866030e-09 1s 1s 342871270e-09 0s 0s 342874190e-09 0s 0s 342876270e-09 1s 1s 342881510e-09 0s 0s 342884470e-09 0s 0s 342886510e-09 1s 1s 342891750e-09 0s 0s 342894750e-09 0s 0s 342896750e-09 1s 1s 342901990e-09 0s 0s 342905030e-09 0s 0s 342906990e-09 1s 1s 342912230e-09 0s 0s 342915310e-09 0s 0s 342917230e-09 1s 1s 342922470e-09 0s 0s 342925590e-09 0s 0s 342927470e-09 1s 1s 342932710e-09 0s 0s 342935870e-09 0s 0s 342937710e-09 1s 1s 342942950e-09 0s 0s 342946150e-09 0s 0s 342947950e-09 1s 1s 342953190e-09 0s 0s 342956430e-09 0s 0s 342958190e-09 1s 1s 342963430e-09 0s 0s 342966710e-09 0s 0s 342968430e-09 1s 1s 342973670e-09 0s 0s 342976990e-09 0s 0s 342978670e-09 1s 1s 342983910e-09 0s 0s 342987270e-09 0s 0s 342988910e-09 1s 1s 342994150e-09 0s 0s 342997550e-09 0s 0s 342999150e-09 1s 1s 343004390e-09 0s 0s 343007830e-09 0s 0s 343009390e-09 1s 1s 343014630e-09 0s 0s 343018110e-09 0s 0s 343019630e-09 1s 1s 343024870e-09 0s 0s 343028390e-09 0s 0s 343029870e-09 1s 1s 343035110e-09 0s 0s 343038670e-09 0s 0s 343040110e-09 1s 1s 343045350e-09 0s 0s 343048950e-09 0s 0s 343050350e-09 1s 1s 343055590e-09 0s 0s 343059230e-09 0s 0s 343060590e-09 1s 1s 343065830e-09 0s 0s 343069510e-09 0s 0s 343070830e-09 1s 1s 343076070e-09 0s 0s 343079790e-09 0s 0s 343081070e-09 1s 1s 343086310e-09 0s 0s 343090070e-09 0s 0s 343091310e-09 1s 1s 343096550e-09 0s 0s 343100350e-09 0s 0s 343101550e-09 1s 1s 343106790e-09 0s 0s 343110630e-09 0s 0s 343111790e-09 1s 1s 343117030e-09 0s 0s 343120910e-09 0s 0s 343122030e-09 1s 1s 343127270e-09 0s 0s 343131190e-09 0s 0s 343132270e-09 1s 1s 343137510e-09 0s 0s 343141470e-09 0s 0s 343142510e-09 1s 1s 343147750e-09 0s 0s 343151750e-09 0s 0s 343152750e-09 1s 1s 343157990e-09 0s 0s 343162030e-09 0s 0s 343162990e-09 1s 1s 343168230e-09 0s 0s 343172310e-09 0s 0s 343173230e-09 1s 1s 343178470e-09 0s 0s 343182590e-09 0s 0s 343183470e-09 1s 1s 343188710e-09 0s 0s 343192870e-09 0s 0s 343193710e-09 1s 1s 343198950e-09 0s 0s 343203150e-09 0s 0s 343203950e-09 1s 1s 343209190e-09 0s 0s 343213430e-09 0s 0s 343214190e-09 1s 1s 343219430e-09 0s 0s 343223710e-09 0s 0s 343224430e-09 1s 1s 343229670e-09 0s 0s 343233990e-09 0s 0s 343234670e-09 1s 1s 343239910e-09 0s 0s 343244270e-09 0s 0s 343244910e-09 1s 1s 343250150e-09 0s 0s 343254550e-09 0s 0s 343255150e-09 1s 1s 343260390e-09 0s 0s 343264830e-09 0s 0s 343265390e-09 1s 1s 343270630e-09 0s 0s 343275110e-09 0s 0s 343275630e-09 1s 1s 343280870e-09 0s 0s 343285390e-09 0s 0s 343285870e-09 1s 1s 343291110e-09 0s 0s 343295670e-09 0s 0s 343296110e-09 1s 1s 343301350e-09 0s 0s 343305950e-09 0s 0s 343306350e-09 1s 1s 343311590e-09 0s 0s 343316230e-09 0s 0s 343316590e-09 1s 1s 343321830e-09 0s 0s 343326510e-09 0s 0s 343326830e-09 1s 1s 343332070e-09 0s 0s 343336790e-09 0s 0s 343337070e-09 1s 1s 343342310e-09 0s 0s 343347070e-09 0s 0s 343347310e-09 1s 1s 343352550e-09 0s 0s 343357350e-09 0s 0s 343357550e-09 1s 1s 343362790e-09 0s 0s 343367630e-09 0s 0s 343367790e-09 1s 1s 343373030e-09 0s 0s 343377910e-09 0s 0s 343378030e-09 1s 1s 343383270e-09 0s 0s 343388190e-09 0s 0s 343388270e-09 1s 1s 343393510e-09 0s 0s 343398470e-09 0s 0s 343398510e-09 1s 1s 343403750e-09 0s 0s 343408750e-09 1s 1s 343408790e-09 1s 1s 343414030e-09 0s 0s 343418990e-09 1s 1s 343419070e-09 1s 1s 343424270e-09 0s 0s 343429230e-09 1s 1s 343429350e-09 1s 1s 343434510e-09 0s 0s 343439470e-09 1s 1s 343439630e-09 1s 1s 343444750e-09 0s 0s 343449710e-09 1s 1s 343449910e-09 1s 1s 343454990e-09 0s 0s 343459950e-09 1s 1s 343460190e-09 1s 1s 343465230e-09 0s 0s 343470190e-09 1s 1s 343470470e-09 1s 1s 343475470e-09 0s 0s 343480430e-09 1s 1s 343480750e-09 1s 1s 343485710e-09 0s 0s 343490670e-09 1s 1s 343491030e-09 1s 1s 343495950e-09 0s 0s 343500910e-09 1s 1s 343501310e-09 1s 1s 343506190e-09 0s 0s 343511150e-09 1s 1s 343511590e-09 1s 1s 343516430e-09 0s 0s 343521390e-09 1s 1s 343521870e-09 1s 1s 343526670e-09 0s 0s 343531630e-09 1s 1s 343532150e-09 1s 1s 343536910e-09 0s 0s 343541870e-09 1s 1s 343542430e-09 1s 1s 343547150e-09 0s 0s 343552110e-09 1s 1s 343552710e-09 1s 1s 343557390e-09 0s 0s 343562350e-09 1s 1s 343562990e-09 1s 1s 343567630e-09 0s 0s 343572590e-09 1s 1s 343573270e-09 1s 1s 343577870e-09 0s 0s 343582830e-09 1s 1s 343583550e-09 1s 1s 343588110e-09 0s 0s 343593070e-09 1s 1s 343593830e-09 1s 1s 343598350e-09 0s 0s 343603310e-09 1s 1s 343604110e-09 1s 1s 343608590e-09 0s 0s 343613550e-09 1s 1s 343614390e-09 1s 1s 343618830e-09 0s 0s 343623790e-09 1s 1s 343624670e-09 1s 1s 343629070e-09 0s 0s 343634030e-09 1s 1s 343634950e-09 1s 1s 343639310e-09 0s 0s 343644270e-09 1s 1s 343645230e-09 1s 1s 343649550e-09 0s 0s 343654510e-09 1s 1s 343655510e-09 1s 1s 343659790e-09 0s 0s 343664750e-09 1s 1s 343665790e-09 1s 1s 343670030e-09 0s 0s 343674990e-09 1s 1s 343676070e-09 1s 1s 343680270e-09 0s 0s 343685230e-09 1s 1s 343686350e-09 1s 1s 343690510e-09 0s 0s 343695470e-09 1s 1s 343696630e-09 1s 1s 343700750e-09 0s 0s 343705710e-09 1s 1s 343706910e-09 1s 1s 343710990e-09 0s 0s 343715950e-09 1s 1s 343717190e-09 1s 1s 343721230e-09 0s 0s 343726190e-09 1s 1s 343727470e-09 1s 1s 343731470e-09 0s 0s 343736430e-09 1s 1s 343737750e-09 1s 1s 343741710e-09 0s 0s 343746670e-09 1s 1s 343748030e-09 1s 1s 343751950e-09 0s 0s 343756910e-09 1s 1s 343758310e-09 1s 1s 343762190e-09 0s 0s 343767150e-09 1s 1s 343768590e-09 1s 1s 343772430e-09 0s 0s 343777390e-09 1s 1s 343778870e-09 1s 1s 343782670e-09 0s 0s 343787630e-09 1s 1s 343789150e-09 1s 1s 343792910e-09 0s 0s 343797870e-09 1s 1s 343799430e-09 1s 1s 343803150e-09 0s 0s 343808110e-09 1s 1s 343809710e-09 1s 1s 343813390e-09 0s 0s 343818350e-09 1s 1s 343819990e-09 1s 1s 343823630e-09 0s 0s 343828590e-09 1s 1s 343830270e-09 1s 1s 343833870e-09 0s 0s 343838830e-09 1s 1s 343840550e-09 1s 1s 343844110e-09 0s 0s 343849070e-09 1s 1s 343850830e-09 1s 1s 343854350e-09 0s 0s 343859310e-09 1s 1s 343861110e-09 1s 1s 343864590e-09 0s 0s 343869550e-09 1s 1s 343871390e-09 1s 1s 343874830e-09 0s 0s 343879790e-09 1s 1s 343881670e-09 1s 1s 343885070e-09 0s 0s 343890030e-09 1s 1s 343891950e-09 1s 1s 343895310e-09 0s 0s 343900270e-09 1s 1s 343902230e-09 1s 1s 343905550e-09 0s 0s 343910510e-09 1s 1s 343912510e-09 1s 1s 343915790e-09 0s 0s 343920750e-09 1s 1s 343922790e-09 1s 1s 343926030e-09 0s 0s 343930990e-09 1s 1s 343933070e-09 1s 1s 343936270e-09 0s 0s 343941230e-09 1s 1s 343943350e-09 1s 1s 343946510e-09 0s 0s 343951470e-09 1s 1s 343953630e-09 1s 1s 343956750e-09 0s 0s 343961710e-09 1s 1s 343963910e-09 1s 1s 343966990e-09 0s 0s 343971950e-09 1s 1s 343974190e-09 1s 1s 343977230e-09 0s 0s 343982190e-09 1s 1s 343984470e-09 1s 1s 343987470e-09 0s 0s 343992430e-09 1s 1s 343994750e-09 1s 1s 343997710e-09 0s 0s 344002670e-09 1s 1s 344005030e-09 1s 1s 344007950e-09 0s 0s 344012910e-09 1s 1s 344015310e-09 1s 1s 344018190e-09 0s 0s 344023150e-09 1s 1s 344025590e-09 1s 1s 344028430e-09 0s 0s 344033390e-09 1s 1s 344035870e-09 1s 1s 344038670e-09 0s 0s 344043630e-09 1s 1s 344046150e-09 1s 1s 344048910e-09 0s 0s 344053870e-09 1s 1s 344056430e-09 1s 1s 344059150e-09 0s 0s 344064110e-09 1s 1s 344066710e-09 1s 1s 344069390e-09 0s 0s 344074350e-09 1s 1s 344076990e-09 1s 1s 344079630e-09 0s 0s 344084590e-09 1s 1s 344087270e-09 1s 1s 344089870e-09 0s 0s 344094830e-09 1s 1s 344097550e-09 1s 1s 344100110e-09 0s 0s 344105070e-09 1s 1s 344107830e-09 1s 1s 344110350e-09 0s 0s 344115310e-09 1s 1s 344118110e-09 1s 1s 344120590e-09 0s 0s 344125550e-09 1s 1s 344128390e-09 1s 1s 344130830e-09 0s 0s 344135790e-09 1s 1s 344138670e-09 1s 1s 344141070e-09 0s 0s 344146030e-09 1s 1s 344148950e-09 1s 1s 344151310e-09 0s 0s 344156270e-09 1s 1s 344159230e-09 1s 1s 344161550e-09 0s 0s 344166510e-09 1s 1s 344169510e-09 1s 1s 344171790e-09 0s 0s 344176750e-09 1s 1s 344179790e-09 1s 1s 344182030e-09 0s 0s 344186990e-09 1s 1s 344190070e-09 1s 1s 344192270e-09 0s 0s 344197230e-09 1s 1s 344200350e-09 1s 1s 344202510e-09 0s 0s 344207470e-09 1s 1s 344210630e-09 1s 1s 344212750e-09 0s 0s 344217710e-09 1s 1s 344220910e-09 1s 1s 344222990e-09 0s 0s 344227950e-09 1s 1s 344231190e-09 1s 1s 344233230e-09 0s 0s 344238190e-09 1s 1s 344241470e-09 1s 1s 344243470e-09 0s 0s 344248430e-09 1s 1s 344251750e-09 1s 1s 344253710e-09 0s 0s 344258670e-09 1s 1s 344262030e-09 1s 1s 344263950e-09 0s 0s 344268910e-09 1s 1s 344272310e-09 1s 1s 344274190e-09 0s 0s 344279150e-09 1s 1s 344282590e-09 1s 1s 344284430e-09 0s 0s 344289390e-09 1s 1s 344292870e-09 1s 1s 344294670e-09 0s 0s 344299630e-09 1s 1s 344303150e-09 1s 1s 344304910e-09 0s 0s 344309870e-09 1s 1s 344313430e-09 1s 1s 344315150e-09 0s 0s 344320110e-09 1s 1s 344323710e-09 1s 1s 344325390e-09 0s 0s 344330350e-09 1s 1s 344333990e-09 1s 1s 344335630e-09 0s 0s 344340590e-09 1s 1s 344344270e-09 1s 1s 344345870e-09 0s 0s 344350830e-09 1s 1s 344354550e-09 1s 1s 344356110e-09 0s 0s 344361070e-09 1s 1s 344364830e-09 1s 1s 344366350e-09 0s 0s 344371310e-09 1s 1s 344375110e-09 1s 1s 344376590e-09 0s 0s 344381550e-09 1s 1s 344385390e-09 1s 1s 344386830e-09 0s 0s 344391790e-09 1s 1s 344395670e-09 1s 1s 344397070e-09 0s 0s 344402030e-09 1s 1s 344405950e-09 1s 1s 344407310e-09 0s 0s 344412270e-09 1s 1s 344416230e-09 1s 1s 344417550e-09 0s 0s 344422510e-09 1s 1s 344426510e-09 1s 1s 344427790e-09 0s 0s 344432750e-09 1s 1s 344436790e-09 1s 1s 344438030e-09 0s 0s 344442990e-09 1s 1s 344447070e-09 1s 1s 344448270e-09 0s 0s 344453230e-09 1s 1s 344457350e-09 1s 1s 344458510e-09 0s 0s 344463470e-09 1s 1s 344467630e-09 1s 1s 344468750e-09 0s 0s 344473710e-09 1s 1s 344477910e-09 1s 1s 344478990e-09 0s 0s 344483950e-09 1s 1s 344488190e-09 1s 1s 344489230e-09 0s 0s 344494190e-09 1s 1s 344498470e-09 1s 1s 344499470e-09 0s 0s 344504430e-09 1s 1s 344508750e-09 1s 1s 344509710e-09 0s 0s 344514670e-09 1s 1s 344519030e-09 1s 1s 344519950e-09 0s 0s 344524910e-09 1s 1s 344529310e-09 1s 1s 344530190e-09 0s 0s 344535150e-09 1s 1s 344539590e-09 1s 1s 344540430e-09 0s 0s 344545390e-09 1s 1s 344549870e-09 1s 1s 344550670e-09 0s 0s 344555630e-09 1s 1s 344560150e-09 1s 1s 344560910e-09 0s 0s 344565870e-09 1s 1s 344570430e-09 1s 1s 344571150e-09 0s 0s 344576110e-09 1s 1s 344580710e-09 1s 1s 344581390e-09 0s 0s 344586350e-09 1s 1s 344590990e-09 1s 1s 344591630e-09 0s 0s 344596590e-09 1s 1s 344601270e-09 1s 1s 344601870e-09 0s 0s 344606830e-09 1s 1s 344611550e-09 1s 1s 344612110e-09 0s 0s 344617070e-09 1s 1s 344621830e-09 1s 1s 344622350e-09 0s 0s 344627310e-09 1s 1s 344632110e-09 1s 1s 344632590e-09 0s 0s 344637550e-09 1s 1s 344642390e-09 1s 1s 344642830e-09 0s 0s 344647790e-09 1s 1s 344652670e-09 1s 1s 344653070e-09 0s 0s 344658030e-09 1s 1s 344662950e-09 1s 1s 344663310e-09 0s 0s 344668270e-09 1s 1s 344673230e-09 1s 1s 344673550e-09 0s 0s 344678510e-09 1s 1s 344683510e-09 1s 1s 344683790e-09 0s 0s 344688750e-09 1s 1s 344693790e-09 1s 1s 344694030e-09 0s 0s 344698990e-09 1s 1s 344704070e-09 1s 1s 344704270e-09 0s 0s 344709230e-09 1s 1s 344714350e-09 1s 1s 344714510e-09 0s 0s 344719470e-09 1s 1s 344724630e-09 1s 1s 344724750e-09 0s 0s 344729710e-09 1s 1s 344734910e-09 1s 1s 344734990e-09 0s 0s 344739950e-09 1s 1s 344745190e-09 1s 1s 344745230e-09 0s 0s 344750190e-09 1s 1s 344755470e-09 0s 0s 344760430e-09 1s 1s 344765710e-09 0s 0s 344765750e-09 0s 0s 344770670e-09 1s 1s 344775950e-09 0s 0s 344776030e-09 0s 0s 344780910e-09 1s 1s 344786190e-09 0s 0s 344786310e-09 0s 0s 344791150e-09 1s 1s 344796430e-09 0s 0s 344796590e-09 0s 0s 344801390e-09 1s 1s 344806670e-09 0s 0s 344806870e-09 0s 0s 344811630e-09 1s 1s 344816910e-09 0s 0s 344817150e-09 0s 0s 344821870e-09 1s 1s 344827150e-09 0s 0s 344827430e-09 0s 0s 344832110e-09 1s 1s 344837390e-09 0s 0s 344837710e-09 0s 0s 344842350e-09 1s 1s 344847630e-09 0s 0s 344847990e-09 0s 0s 344852590e-09 1s 1s 344857870e-09 0s 0s 344858270e-09 0s 0s 344862830e-09 1s 1s 344868110e-09 0s 0s 344868550e-09 0s 0s 344873070e-09 1s 1s 344878350e-09 0s 0s 344878830e-09 0s 0s 344883310e-09 1s 1s 344888590e-09 0s 0s 344889110e-09 0s 0s 344893550e-09 1s 1s 344898830e-09 0s 0s 344899390e-09 0s 0s 344903790e-09 1s 1s 344909070e-09 0s 0s 344909670e-09 0s 0s 344914030e-09 1s 1s 344919310e-09 0s 0s 344919950e-09 0s 0s 344924270e-09 1s 1s 344929550e-09 0s 0s 344930230e-09 0s 0s 344934510e-09 1s 1s 344939790e-09 0s 0s 344940510e-09 0s 0s 344944750e-09 1s 1s 344950030e-09 0s 0s 344950790e-09 0s 0s 344954990e-09 1s 1s 344960270e-09 0s 0s 344961070e-09 0s 0s 344965230e-09 1s 1s 344970510e-09 0s 0s 344971350e-09 0s 0s 344975470e-09 1s 1s 344980750e-09 0s 0s 344981630e-09 0s 0s 344985710e-09 1s 1s 344990990e-09 0s 0s 344991910e-09 0s 0s 344995950e-09 1s 1s 345001230e-09 0s 0s 345002190e-09 0s 0s 345006190e-09 1s 1s 345011470e-09 0s 0s 345012470e-09 0s 0s 345016430e-09 1s 1s 345021710e-09 0s 0s 345022750e-09 0s 0s 345026670e-09 1s 1s 345031950e-09 0s 0s 345033030e-09 0s 0s 345036910e-09 1s 1s 345042190e-09 0s 0s 345043310e-09 0s 0s 345047150e-09 1s 1s 345052430e-09 0s 0s 345053590e-09 0s 0s 345057390e-09 1s 1s 345062670e-09 0s 0s 345063870e-09 0s 0s 345067630e-09 1s 1s 345072910e-09 0s 0s 345074150e-09 0s 0s 345077870e-09 1s 1s 345083150e-09 0s 0s 345084430e-09 0s 0s 345088110e-09 1s 1s 345093390e-09 0s 0s 345094710e-09 0s 0s 345098350e-09 1s 1s 345103630e-09 0s 0s 345104990e-09 0s 0s 345108590e-09 1s 1s 345113870e-09 0s 0s 345115270e-09 0s 0s 345118830e-09 1s 1s 345124110e-09 0s 0s 345125550e-09 0s 0s 345129070e-09 1s 1s 345134350e-09 0s 0s 345135830e-09 0s 0s 345139310e-09 1s 1s 345144590e-09 0s 0s 345146110e-09 0s 0s 345149550e-09 1s 1s 345154830e-09 0s 0s 345156390e-09 0s 0s 345159790e-09 1s 1s 345165070e-09 0s 0s 345166670e-09 0s 0s 345170030e-09 1s 1s 345175310e-09 0s 0s 345176950e-09 0s 0s 345180270e-09 1s 1s 345185550e-09 0s 0s 345187230e-09 0s 0s 345190510e-09 1s 1s 345195790e-09 0s 0s 345197510e-09 0s 0s 345200750e-09 1s 1s 345206030e-09 0s 0s 345207790e-09 0s 0s 345210990e-09 1s 1s 345216270e-09 0s 0s 345218070e-09 0s 0s 345221230e-09 1s 1s 345226510e-09 0s 0s 345228350e-09 0s 0s 345231470e-09 1s 1s 345236750e-09 0s 0s 345238630e-09 0s 0s 345241710e-09 1s 1s 345246990e-09 0s 0s 345248910e-09 0s 0s 345251950e-09 1s 1s 345257230e-09 0s 0s 345259190e-09 0s 0s 345262190e-09 1s 1s 345267470e-09 0s 0s 345269470e-09 0s 0s 345272430e-09 1s 1s 345277710e-09 0s 0s 345279750e-09 0s 0s 345282670e-09 1s 1s 345287950e-09 0s 0s 345290030e-09 0s 0s 345292910e-09 1s 1s 345298190e-09 0s 0s 345300310e-09 0s 0s 345303150e-09 1s 1s 345308430e-09 0s 0s 345310590e-09 0s 0s 345313390e-09 1s 1s 345318670e-09 0s 0s 345320870e-09 0s 0s 345323630e-09 1s 1s 345328910e-09 0s 0s 345331150e-09 0s 0s 345333870e-09 1s 1s 345339150e-09 0s 0s 345341430e-09 0s 0s 345344110e-09 1s 1s 345349390e-09 0s 0s 345351710e-09 0s 0s 345354350e-09 1s 1s 345359630e-09 0s 0s 345361990e-09 0s 0s 345364590e-09 1s 1s 345369870e-09 0s 0s 345372270e-09 0s 0s 345374830e-09 1s 1s 345380110e-09 0s 0s 345382550e-09 0s 0s 345385070e-09 1s 1s 345390350e-09 0s 0s 345392830e-09 0s 0s 345395310e-09 1s 1s 345400590e-09 0s 0s 345403110e-09 0s 0s 345405550e-09 1s 1s 345410830e-09 0s 0s 345413390e-09 0s 0s 345415790e-09 1s 1s 345421070e-09 0s 0s 345423670e-09 0s 0s 345426030e-09 1s 1s 345431310e-09 0s 0s 345433950e-09 0s 0s 345436270e-09 1s 1s 345441550e-09 0s 0s 345444230e-09 0s 0s 345446510e-09 1s 1s 345451790e-09 0s 0s 345454510e-09 0s 0s 345456750e-09 1s 1s 345462030e-09 0s 0s 345464790e-09 0s 0s 345466990e-09 1s 1s 345472270e-09 0s 0s 345475070e-09 0s 0s 345477230e-09 1s 1s 345482510e-09 0s 0s 345485350e-09 0s 0s 345487470e-09 1s 1s 345492750e-09 0s 0s 345495630e-09 0s 0s 345497710e-09 1s 1s 345502990e-09 0s 0s 345505910e-09 0s 0s 345507950e-09 1s 1s 345513230e-09 0s 0s 345516190e-09 0s 0s 345518190e-09 1s 1s 345523470e-09 0s 0s 345526470e-09 0s 0s 345528430e-09 1s 1s 345533710e-09 0s 0s 345536750e-09 0s 0s 345538670e-09 1s 1s 345543950e-09 0s 0s 345547030e-09 0s 0s 345548910e-09 1s 1s 345554190e-09 0s 0s 345557310e-09 0s 0s 345559150e-09 1s 1s 345564430e-09 0s 0s 345567590e-09 0s 0s 345569390e-09 1s 1s 345574670e-09 0s 0s 345577870e-09 0s 0s 345579630e-09 1s 1s 345584910e-09 0s 0s 345588150e-09 0s 0s 345589870e-09 1s 1s 345595150e-09 0s 0s 345598430e-09 0s 0s 345600110e-09 1s 1s 345605390e-09 0s 0s 345608710e-09 0s 0s 345610350e-09 1s 1s 345615630e-09 0s 0s 345618990e-09 0s 0s 345620590e-09 1s 1s 345625870e-09 0s 0s 345629270e-09 0s 0s 345630830e-09 1s 1s 345636110e-09 0s 0s 345639550e-09 0s 0s 345641070e-09 1s 1s 345646350e-09 0s 0s 345649830e-09 0s 0s 345651310e-09 1s 1s 345656590e-09 0s 0s 345660110e-09 0s 0s 345661550e-09 1s 1s 345666830e-09 0s 0s 345670390e-09 0s 0s 345671790e-09 1s 1s 345677070e-09 0s 0s 345680670e-09 0s 0s 345682030e-09 1s 1s 345687310e-09 0s 0s 345690950e-09 0s 0s 345692270e-09 1s 1s 345697550e-09 0s 0s 345701230e-09 0s 0s 345702510e-09 1s 1s 345707790e-09 0s 0s 345711510e-09 0s 0s 345712750e-09 1s 1s 345718030e-09 0s 0s 345721790e-09 0s 0s 345722990e-09 1s 1s 345728270e-09 0s 0s 345732070e-09 0s 0s 345733230e-09 1s 1s 345738510e-09 0s 0s 345742350e-09 0s 0s 345743470e-09 1s 1s 345748750e-09 0s 0s 345752630e-09 0s 0s 345753710e-09 1s 1s 345758990e-09 0s 0s 345762910e-09 0s 0s 345763950e-09 1s 1s 345769230e-09 0s 0s 345773190e-09 0s 0s 345774190e-09 1s 1s 345779470e-09 0s 0s 345783470e-09 0s 0s 345784430e-09 1s 1s 345789710e-09 0s 0s 345793750e-09 0s 0s 345794670e-09 1s 1s 345799950e-09 0s 0s 345804030e-09 0s 0s 345804910e-09 1s 1s 345810190e-09 0s 0s 345814310e-09 0s 0s 345815150e-09 1s 1s 345820430e-09 0s 0s 345824590e-09 0s 0s 345825390e-09 1s 1s 345830670e-09 0s 0s 345834870e-09 0s 0s 345835630e-09 1s 1s 345840910e-09 0s 0s 345845150e-09 0s 0s 345845870e-09 1s 1s 345851150e-09 0s 0s 345855430e-09 0s 0s 345856110e-09 1s 1s 345861390e-09 0s 0s 345865710e-09 0s 0s 345866350e-09 1s 1s 345871630e-09 0s 0s 345875990e-09 0s 0s 345876590e-09 1s 1s 345881870e-09 0s 0s 345886270e-09 0s 0s 345886830e-09 1s 1s 345892110e-09 0s 0s 345896550e-09 0s 0s 345897070e-09 1s 1s 345902350e-09 0s 0s 345906830e-09 0s 0s 345907310e-09 1s 1s 345912590e-09 0s 0s 345917110e-09 0s 0s 345917550e-09 1s 1s 345922830e-09 0s 0s 345927390e-09 0s 0s 345927790e-09 1s 1s 345933070e-09 0s 0s 345937670e-09 0s 0s 345938030e-09 1s 1s 345943310e-09 0s 0s 345947950e-09 0s 0s 345948270e-09 1s 1s 345953550e-09 0s 0s 345958230e-09 0s 0s 345958510e-09 1s 1s 345963790e-09 0s 0s 345968510e-09 0s 0s 345968750e-09 1s 1s 345974030e-09 0s 0s 345978790e-09 0s 0s 345978990e-09 1s 1s 345984270e-09 0s 0s 345989070e-09 0s 0s 345989230e-09 1s 1s 345994510e-09 0s 0s 345999350e-09 0s 0s 345999470e-09 1s 1s 346004750e-09 0s 0s 346009630e-09 0s 0s 346009710e-09 1s 1s 346014990e-09 0s 0s 346019910e-09 0s 0s 346019950e-09 1s 1s 346025230e-09 0s 0s 346030190e-09 1s 1s 346030230e-09 1s 1s 346035510e-09 0s 0s 346040430e-09 1s 1s 346040510e-09 1s 1s 346045750e-09 0s 0s 346050670e-09 1s 1s 346050790e-09 1s 1s 346055990e-09 0s 0s 346060910e-09 1s 1s 346061070e-09 1s 1s 346066230e-09 0s 0s 346071150e-09 1s 1s 346071350e-09 1s 1s 346076470e-09 0s 0s 346081390e-09 1s 1s 346081630e-09 1s 1s 346086710e-09 0s 0s 346091630e-09 1s 1s 346091910e-09 1s 1s 346096950e-09 0s 0s 346101870e-09 1s 1s 346102190e-09 1s 1s 346107190e-09 0s 0s 346112110e-09 1s 1s 346112470e-09 1s 1s 346117430e-09 0s 0s 346122350e-09 1s 1s 346122750e-09 1s 1s 346127670e-09 0s 0s 346132590e-09 1s 1s 346133030e-09 1s 1s 346137910e-09 0s 0s 346142830e-09 1s 1s 346143310e-09 1s 1s 346148150e-09 0s 0s 346153070e-09 1s 1s 346153590e-09 1s 1s 346158390e-09 0s 0s 346163310e-09 1s 1s 346163870e-09 1s 1s 346168630e-09 0s 0s 346173550e-09 1s 1s 346174150e-09 1s 1s 346178870e-09 0s 0s 346183790e-09 1s 1s 346184430e-09 1s 1s 346189110e-09 0s 0s 346194030e-09 1s 1s 346194710e-09 1s 1s 346199350e-09 0s 0s 346204270e-09 1s 1s 346204990e-09 1s 1s 346209590e-09 0s 0s 346214510e-09 1s 1s 346215270e-09 1s 1s 346219830e-09 0s 0s 346224750e-09 1s 1s 346225550e-09 1s 1s 346230070e-09 0s 0s 346234990e-09 1s 1s 346235830e-09 1s 1s 346240310e-09 0s 0s 346245230e-09 1s 1s 346246110e-09 1s 1s 346250550e-09 0s 0s 346255470e-09 1s 1s 346256390e-09 1s 1s 346260790e-09 0s 0s 346265710e-09 1s 1s 346266670e-09 1s 1s 346271030e-09 0s 0s 346275950e-09 1s 1s 346276950e-09 1s 1s 346281270e-09 0s 0s 346286190e-09 1s 1s 346287230e-09 1s 1s 346291510e-09 0s 0s 346296430e-09 1s 1s 346297510e-09 1s 1s 346301750e-09 0s 0s 346306670e-09 1s 1s 346307790e-09 1s 1s 346311990e-09 0s 0s 346316910e-09 1s 1s 346318070e-09 1s 1s 346322230e-09 0s 0s 346327150e-09 1s 1s 346328350e-09 1s 1s 346332470e-09 0s 0s 346337390e-09 1s 1s 346338630e-09 1s 1s 346342710e-09 0s 0s 346347630e-09 1s 1s 346348910e-09 1s 1s 346352950e-09 0s 0s 346357870e-09 1s 1s 346359190e-09 1s 1s 346363190e-09 0s 0s 346368110e-09 1s 1s 346369470e-09 1s 1s 346373430e-09 0s 0s 346378350e-09 1s 1s 346379750e-09 1s 1s 346383670e-09 0s 0s 346388590e-09 1s 1s 346390030e-09 1s 1s 346393910e-09 0s 0s 346398830e-09 1s 1s 346400310e-09 1s 1s 346404150e-09 0s 0s 346409070e-09 1s 1s 346410590e-09 1s 1s 346414390e-09 0s 0s 346419310e-09 1s 1s 346420870e-09 1s 1s 346424630e-09 0s 0s 346429550e-09 1s 1s 346431150e-09 1s 1s 346434870e-09 0s 0s 346439790e-09 1s 1s 346441430e-09 1s 1s 346445110e-09 0s 0s 346450030e-09 1s 1s 346451710e-09 1s 1s 346455350e-09 0s 0s 346460270e-09 1s 1s 346461990e-09 1s 1s 346465590e-09 0s 0s 346470510e-09 1s 1s 346472270e-09 1s 1s 346475830e-09 0s 0s 346480750e-09 1s 1s 346482550e-09 1s 1s 346486070e-09 0s 0s 346490990e-09 1s 1s 346492830e-09 1s 1s 346496310e-09 0s 0s 346501230e-09 1s 1s 346503110e-09 1s 1s 346506550e-09 0s 0s 346511470e-09 1s 1s 346513390e-09 1s 1s 346516790e-09 0s 0s 346521710e-09 1s 1s 346523670e-09 1s 1s 346527030e-09 0s 0s 346531950e-09 1s 1s 346533950e-09 1s 1s 346537270e-09 0s 0s 346542190e-09 1s 1s 346544230e-09 1s 1s 346547510e-09 0s 0s 346552430e-09 1s 1s 346554510e-09 1s 1s 346557750e-09 0s 0s 346562670e-09 1s 1s 346564790e-09 1s 1s 346567990e-09 0s 0s 346572910e-09 1s 1s 346575070e-09 1s 1s 346578230e-09 0s 0s 346583150e-09 1s 1s 346585350e-09 1s 1s 346588470e-09 0s 0s 346593390e-09 1s 1s 346595630e-09 1s 1s 346598710e-09 0s 0s 346603630e-09 1s 1s 346605910e-09 1s 1s 346608950e-09 0s 0s 346613870e-09 1s 1s 346616190e-09 1s 1s 346619190e-09 0s 0s 346624110e-09 1s 1s 346626470e-09 1s 1s 346629430e-09 0s 0s 346634350e-09 1s 1s 346636750e-09 1s 1s 346639670e-09 0s 0s 346644590e-09 1s 1s 346647030e-09 1s 1s 346649910e-09 0s 0s 346654830e-09 1s 1s 346657310e-09 1s 1s 346660150e-09 0s 0s 346665070e-09 1s 1s 346667590e-09 1s 1s 346670390e-09 0s 0s 346675310e-09 1s 1s 346677870e-09 1s 1s 346680630e-09 0s 0s 346685550e-09 1s 1s 346688150e-09 1s 1s 346690870e-09 0s 0s 346695790e-09 1s 1s 346698430e-09 1s 1s 346701110e-09 0s 0s 346706030e-09 1s 1s 346708710e-09 1s 1s 346711350e-09 0s 0s 346716270e-09 1s 1s 346718990e-09 1s 1s 346721590e-09 0s 0s 346726510e-09 1s 1s 346729270e-09 1s 1s 346731830e-09 0s 0s 346736750e-09 1s 1s 346739550e-09 1s 1s 346742070e-09 0s 0s 346746990e-09 1s 1s 346749830e-09 1s 1s 346752310e-09 0s 0s 346757230e-09 1s 1s 346760110e-09 1s 1s 346762550e-09 0s 0s 346767470e-09 1s 1s 346770390e-09 1s 1s 346772790e-09 0s 0s 346777710e-09 1s 1s 346780670e-09 1s 1s 346783030e-09 0s 0s 346787950e-09 1s 1s 346790950e-09 1s 1s 346793270e-09 0s 0s 346798190e-09 1s 1s 346801230e-09 1s 1s 346803510e-09 0s 0s 346808430e-09 1s 1s 346811510e-09 1s 1s 346813750e-09 0s 0s 346818670e-09 1s 1s 346821790e-09 1s 1s 346823990e-09 0s 0s 346828910e-09 1s 1s 346832070e-09 1s 1s 346834230e-09 0s 0s 346839150e-09 1s 1s 346842350e-09 1s 1s 346844470e-09 0s 0s 346849390e-09 1s 1s 346852630e-09 1s 1s 346854710e-09 0s 0s 346859630e-09 1s 1s 346862910e-09 1s 1s 346864950e-09 0s 0s 346869870e-09 1s 1s 346873190e-09 1s 1s 346875190e-09 0s 0s 346880110e-09 1s 1s 346883470e-09 1s 1s 346885430e-09 0s 0s 346890350e-09 1s 1s 346893750e-09 1s 1s 346895670e-09 0s 0s 346900590e-09 1s 1s 346904030e-09 1s 1s 346905910e-09 0s 0s 346910830e-09 1s 1s 346914310e-09 1s 1s 346916150e-09 0s 0s 346921070e-09 1s 1s 346924590e-09 1s 1s 346926390e-09 0s 0s 346931310e-09 1s 1s 346934870e-09 1s 1s 346936630e-09 0s 0s 346941550e-09 1s 1s 346945150e-09 1s 1s 346946870e-09 0s 0s 346951790e-09 1s 1s 346955430e-09 1s 1s 346957110e-09 0s 0s 346962030e-09 1s 1s 346965710e-09 1s 1s 346967350e-09 0s 0s 346972270e-09 1s 1s 346975990e-09 1s 1s 346977590e-09 0s 0s 346982510e-09 1s 1s 346986270e-09 1s 1s 346987830e-09 0s 0s 346992750e-09 1s 1s 346996550e-09 1s 1s 346998070e-09 0s 0s 347002990e-09 1s 1s 347006830e-09 1s 1s 347008310e-09 0s 0s 347013230e-09 1s 1s 347017110e-09 1s 1s 347018550e-09 0s 0s 347023470e-09 1s 1s 347027390e-09 1s 1s 347028790e-09 0s 0s 347033710e-09 1s 1s 347037670e-09 1s 1s 347039030e-09 0s 0s 347043950e-09 1s 1s 347047950e-09 1s 1s 347049270e-09 0s 0s 347054190e-09 1s 1s 347058230e-09 1s 1s 347059510e-09 0s 0s 347064430e-09 1s 1s 347068510e-09 1s 1s 347069750e-09 0s 0s 347074670e-09 1s 1s 347078790e-09 1s 1s 347079990e-09 0s 0s 347084910e-09 1s 1s 347089070e-09 1s 1s 347090230e-09 0s 0s 347095150e-09 1s 1s 347099350e-09 1s 1s 347100470e-09 0s 0s 347105390e-09 1s 1s 347109630e-09 1s 1s 347110710e-09 0s 0s 347115630e-09 1s 1s 347119910e-09 1s 1s 347120950e-09 0s 0s 347125870e-09 1s 1s 347130190e-09 1s 1s 347131190e-09 0s 0s 347136110e-09 1s 1s 347140470e-09 1s 1s 347141430e-09 0s 0s 347146350e-09 1s 1s 347150750e-09 1s 1s 347151670e-09 0s 0s 347156590e-09 1s 1s 347161030e-09 1s 1s 347161910e-09 0s 0s 347166830e-09 1s 1s 347171310e-09 1s 1s 347172150e-09 0s 0s 347177070e-09 1s 1s 347181590e-09 1s 1s 347182390e-09 0s 0s 347187310e-09 1s 1s 347191870e-09 1s 1s 347192630e-09 0s 0s 347197550e-09 1s 1s 347202150e-09 1s 1s 347202870e-09 0s 0s 347207790e-09 1s 1s 347212430e-09 1s 1s 347213110e-09 0s 0s 347218030e-09 1s 1s 347222710e-09 1s 1s 347223350e-09 0s 0s 347228270e-09 1s 1s 347232990e-09 1s 1s 347233590e-09 0s 0s 347238510e-09 1s 1s 347243270e-09 1s 1s 347243830e-09 0s 0s 347248750e-09 1s 1s 347253550e-09 1s 1s 347254070e-09 0s 0s 347258990e-09 1s 1s 347263830e-09 1s 1s 347264310e-09 0s 0s 347269230e-09 1s 1s 347274110e-09 1s 1s 347274550e-09 0s 0s 347279470e-09 1s 1s 347284390e-09 1s 1s 347284790e-09 0s 0s 347289710e-09 1s 1s 347294670e-09 1s 1s 347295030e-09 0s 0s 347299950e-09 1s 1s 347304950e-09 1s 1s 347305270e-09 0s 0s 347310190e-09 1s 1s 347315230e-09 1s 1s 347315510e-09 0s 0s 347320430e-09 1s 1s 347325510e-09 1s 1s 347325750e-09 0s 0s 347330670e-09 1s 1s 347335790e-09 1s 1s 347335990e-09 0s 0s 347340910e-09 1s 1s 347346070e-09 1s 1s 347346230e-09 0s 0s 347351150e-09 1s 1s 347356350e-09 1s 1s 347356470e-09 0s 0s 347361390e-09 1s 1s 347366630e-09 1s 1s 347366710e-09 0s 0s 347371630e-09 1s 1s 347376910e-09 1s 1s 347376950e-09 0s 0s 347381870e-09 1s 1s 347387190e-09 0s 0s 347392110e-09 1s 1s 347397430e-09 0s 0s 347397470e-09 0s 0s 347402350e-09 1s 1s 347407670e-09 0s 0s 347407750e-09 0s 0s 347412590e-09 1s 1s 347417910e-09 0s 0s 347418030e-09 0s 0s 347422830e-09 1s 1s 347428150e-09 0s 0s 347428310e-09 0s 0s 347433070e-09 1s 1s 347438390e-09 0s 0s 347438590e-09 0s 0s 347443310e-09 1s 1s 347448630e-09 0s 0s 347448870e-09 0s 0s 347453550e-09 1s 1s 347458870e-09 0s 0s 347459150e-09 0s 0s 347463790e-09 1s 1s 347469110e-09 0s 0s 347469430e-09 0s 0s 347474030e-09 1s 1s 347479350e-09 0s 0s 347479710e-09 0s 0s 347484270e-09 1s 1s 347489590e-09 0s 0s 347489990e-09 0s 0s 347494510e-09 1s 1s 347499830e-09 0s 0s 347500270e-09 0s 0s 347504750e-09 1s 1s 347510070e-09 0s 0s 347510550e-09 0s 0s 347514990e-09 1s 1s 347520310e-09 0s 0s 347520830e-09 0s 0s 347525230e-09 1s 1s 347530550e-09 0s 0s 347531110e-09 0s 0s 347535470e-09 1s 1s 347540790e-09 0s 0s 347541390e-09 0s 0s 347545710e-09 1s 1s 347551030e-09 0s 0s 347551670e-09 0s 0s 347555950e-09 1s 1s 347561270e-09 0s 0s 347561950e-09 0s 0s 347566190e-09 1s 1s 347571510e-09 0s 0s 347572230e-09 0s 0s 347576430e-09 1s 1s 347581750e-09 0s 0s 347582510e-09 0s 0s 347586670e-09 1s 1s 347591990e-09 0s 0s 347592790e-09 0s 0s 347596910e-09 1s 1s 347602230e-09 0s 0s 347603070e-09 0s 0s 347607150e-09 1s 1s 347612470e-09 0s 0s 347613350e-09 0s 0s 347617390e-09 1s 1s 347622710e-09 0s 0s 347623630e-09 0s 0s 347627630e-09 1s 1s 347632950e-09 0s 0s 347633910e-09 0s 0s 347637870e-09 1s 1s 347643190e-09 0s 0s 347644190e-09 0s 0s 347648110e-09 1s 1s 347653430e-09 0s 0s 347654470e-09 0s 0s 347658350e-09 1s 1s 347663670e-09 0s 0s 347664750e-09 0s 0s 347668590e-09 1s 1s 347673910e-09 0s 0s 347675030e-09 0s 0s 347678830e-09 1s 1s 347684150e-09 0s 0s 347685310e-09 0s 0s 347689070e-09 1s 1s 347694390e-09 0s 0s 347695590e-09 0s 0s 347699310e-09 1s 1s 347704630e-09 0s 0s 347705870e-09 0s 0s 347709550e-09 1s 1s 347714870e-09 0s 0s 347716150e-09 0s 0s 347719790e-09 1s 1s 347725110e-09 0s 0s 347726430e-09 0s 0s 347730030e-09 1s 1s 347735350e-09 0s 0s 347736710e-09 0s 0s 347740270e-09 1s 1s 347745590e-09 0s 0s 347746990e-09 0s 0s 347750510e-09 1s 1s 347755830e-09 0s 0s 347757270e-09 0s 0s 347760750e-09 1s 1s 347766070e-09 0s 0s 347767550e-09 0s 0s 347770990e-09 1s 1s 347776310e-09 0s 0s 347777830e-09 0s 0s 347781230e-09 1s 1s 347786550e-09 0s 0s 347788110e-09 0s 0s 347791470e-09 1s 1s 347796790e-09 0s 0s 347798390e-09 0s 0s 347801710e-09 1s 1s 347807030e-09 0s 0s 347808670e-09 0s 0s 347811950e-09 1s 1s 347817270e-09 0s 0s 347818950e-09 0s 0s 347822190e-09 1s 1s 347827510e-09 0s 0s 347829230e-09 0s 0s 347832430e-09 1s 1s 347837750e-09 0s 0s 347839510e-09 0s 0s 347842670e-09 1s 1s 347847990e-09 0s 0s 347849790e-09 0s 0s 347852910e-09 1s 1s 347858230e-09 0s 0s 347860070e-09 0s 0s 347863150e-09 1s 1s 347868470e-09 0s 0s 347870350e-09 0s 0s 347873390e-09 1s 1s 347878710e-09 0s 0s 347880630e-09 0s 0s 347883630e-09 1s 1s 347888950e-09 0s 0s 347890910e-09 0s 0s 347893870e-09 1s 1s 347899190e-09 0s 0s 347901190e-09 0s 0s 347904110e-09 1s 1s 347909430e-09 0s 0s 347911470e-09 0s 0s 347914350e-09 1s 1s 347919670e-09 0s 0s 347921750e-09 0s 0s 347924590e-09 1s 1s 347929910e-09 0s 0s 347932030e-09 0s 0s 347934830e-09 1s 1s 347940150e-09 0s 0s 347942310e-09 0s 0s 347945070e-09 1s 1s 347950390e-09 0s 0s 347952590e-09 0s 0s 347955310e-09 1s 1s 347960630e-09 0s 0s 347962870e-09 0s 0s 347965550e-09 1s 1s 347970870e-09 0s 0s 347973150e-09 0s 0s 347975790e-09 1s 1s 347981110e-09 0s 0s 347983430e-09 0s 0s 347986030e-09 1s 1s 347991350e-09 0s 0s 347993710e-09 0s 0s 347996270e-09 1s 1s 348001590e-09 0s 0s 348003990e-09 0s 0s 348006510e-09 1s 1s 348011830e-09 0s 0s 348014270e-09 0s 0s 348016750e-09 1s 1s 348022070e-09 0s 0s 348024550e-09 0s 0s 348026990e-09 1s 1s 348032310e-09 0s 0s 348034830e-09 0s 0s 348037230e-09 1s 1s 348042550e-09 0s 0s 348045110e-09 0s 0s 348047470e-09 1s 1s 348052790e-09 0s 0s 348055390e-09 0s 0s 348057710e-09 1s 1s 348063030e-09 0s 0s 348065670e-09 0s 0s 348067950e-09 1s 1s 348073270e-09 0s 0s 348075950e-09 0s 0s 348078190e-09 1s 1s 348083510e-09 0s 0s 348086230e-09 0s 0s 348088430e-09 1s 1s 348093750e-09 0s 0s 348096510e-09 0s 0s 348098670e-09 1s 1s 348103990e-09 0s 0s 348106790e-09 0s 0s 348108910e-09 1s 1s 348114230e-09 0s 0s 348117070e-09 0s 0s 348119150e-09 1s 1s 348124470e-09 0s 0s 348127350e-09 0s 0s 348129390e-09 1s 1s 348134710e-09 0s 0s 348137630e-09 0s 0s 348139630e-09 1s 1s 348144950e-09 0s 0s 348147910e-09 0s 0s 348149870e-09 1s 1s 348155190e-09 0s 0s 348158190e-09 0s 0s 348160110e-09 1s 1s 348165430e-09 0s 0s 348168470e-09 0s 0s 348170350e-09 1s 1s 348175670e-09 0s 0s 348178750e-09 0s 0s 348180590e-09 1s 1s 348185910e-09 0s 0s 348189030e-09 0s 0s 348190830e-09 1s 1s 348196150e-09 0s 0s 348199310e-09 0s 0s 348201070e-09 1s 1s 348206390e-09 0s 0s 348209590e-09 0s 0s 348211310e-09 1s 1s 348216630e-09 0s 0s 348219870e-09 0s 0s 348221550e-09 1s 1s 348226870e-09 0s 0s 348230150e-09 0s 0s 348231790e-09 1s 1s 348237110e-09 0s 0s 348240430e-09 0s 0s 348242030e-09 1s 1s 348247350e-09 0s 0s 348250710e-09 0s 0s 348252270e-09 1s 1s 348257590e-09 0s 0s 348260990e-09 0s 0s 348262510e-09 1s 1s 348267830e-09 0s 0s 348271270e-09 0s 0s 348272750e-09 1s 1s 348278070e-09 0s 0s 348281550e-09 0s 0s 348282990e-09 1s 1s 348288310e-09 0s 0s 348291830e-09 0s 0s 348293230e-09 1s 1s 348298550e-09 0s 0s 348302110e-09 0s 0s 348303470e-09 1s 1s 348308790e-09 0s 0s 348312390e-09 0s 0s 348313710e-09 1s 1s 348319030e-09 0s 0s 348322670e-09 0s 0s 348323950e-09 1s 1s 348329270e-09 0s 0s 348332950e-09 0s 0s 348334190e-09 1s 1s 348339510e-09 0s 0s 348343230e-09 0s 0s 348344430e-09 1s 1s 348349750e-09 0s 0s 348353510e-09 0s 0s 348354670e-09 1s 1s 348359990e-09 0s 0s 348363790e-09 0s 0s 348364910e-09 1s 1s 348370230e-09 0s 0s 348374070e-09 0s 0s 348375150e-09 1s 1s 348380470e-09 0s 0s 348384350e-09 0s 0s 348385390e-09 1s 1s 348390710e-09 0s 0s 348394630e-09 0s 0s 348395630e-09 1s 1s 348400950e-09 0s 0s 348404910e-09 0s 0s 348405870e-09 1s 1s 348411190e-09 0s 0s 348415190e-09 0s 0s 348416110e-09 1s 1s 348421430e-09 0s 0s 348425470e-09 0s 0s 348426350e-09 1s 1s 348431670e-09 0s 0s 348435750e-09 0s 0s 348436590e-09 1s 1s 348441910e-09 0s 0s 348446030e-09 0s 0s 348446830e-09 1s 1s 348452150e-09 0s 0s 348456310e-09 0s 0s 348457070e-09 1s 1s 348462390e-09 0s 0s 348466590e-09 0s 0s 348467310e-09 1s 1s 348472630e-09 0s 0s 348476870e-09 0s 0s 348477550e-09 1s 1s 348482870e-09 0s 0s 348487150e-09 0s 0s 348487790e-09 1s 1s 348493110e-09 0s 0s 348497430e-09 0s 0s 348498030e-09 1s 1s 348503350e-09 0s 0s 348507710e-09 0s 0s 348508270e-09 1s 1s 348513590e-09 0s 0s 348517990e-09 0s 0s 348518510e-09 1s 1s 348523830e-09 0s 0s 348528270e-09 0s 0s 348528750e-09 1s 1s 348534070e-09 0s 0s 348538550e-09 0s 0s 348538990e-09 1s 1s 348544310e-09 0s 0s 348548830e-09 0s 0s 348549230e-09 1s 1s 348554550e-09 0s 0s 348559110e-09 0s 0s 348559470e-09 1s 1s 348564790e-09 0s 0s 348569390e-09 0s 0s 348569710e-09 1s 1s 348575030e-09 0s 0s 348579670e-09 0s 0s 348579950e-09 1s 1s 348585270e-09 0s 0s 348589950e-09 0s 0s 348590190e-09 1s 1s 348595510e-09 0s 0s 348600230e-09 0s 0s 348600430e-09 1s 1s 348605750e-09 0s 0s 348610510e-09 0s 0s 348610670e-09 1s 1s 348615990e-09 0s 0s 348620790e-09 0s 0s 348620910e-09 1s 1s 348626230e-09 0s 0s 348631070e-09 0s 0s 348631150e-09 1s 1s 348636470e-09 0s 0s 348641350e-09 0s 0s 348641390e-09 1s 1s 348646710e-09 0s 0s 348651630e-09 1s 1s 348651670e-09 1s 1s 348656990e-09 0s 0s 348661870e-09 1s 1s 348661950e-09 1s 1s 348667230e-09 0s 0s 348672110e-09 1s 1s 348672230e-09 1s 1s 348677470e-09 0s 0s 348682350e-09 1s 1s 348682510e-09 1s 1s 348687710e-09 0s 0s 348692590e-09 1s 1s 348692790e-09 1s 1s 348697950e-09 0s 0s 348702830e-09 1s 1s 348703070e-09 1s 1s 348708190e-09 0s 0s 348713070e-09 1s 1s 348713350e-09 1s 1s 348718430e-09 0s 0s 348723310e-09 1s 1s 348723630e-09 1s 1s 348728670e-09 0s 0s 348733550e-09 1s 1s 348733910e-09 1s 1s 348738910e-09 0s 0s 348743790e-09 1s 1s 348744190e-09 1s 1s 348749150e-09 0s 0s 348754030e-09 1s 1s 348754470e-09 1s 1s 348759390e-09 0s 0s 348764270e-09 1s 1s 348764750e-09 1s 1s 348769630e-09 0s 0s 348774510e-09 1s 1s 348775030e-09 1s 1s 348779870e-09 0s 0s 348784750e-09 1s 1s 348785310e-09 1s 1s 348790110e-09 0s 0s 348794990e-09 1s 1s 348795590e-09 1s 1s 348800350e-09 0s 0s 348805230e-09 1s 1s 348805870e-09 1s 1s 348810590e-09 0s 0s 348815470e-09 1s 1s 348816150e-09 1s 1s 348820830e-09 0s 0s 348825710e-09 1s 1s 348826430e-09 1s 1s 348831070e-09 0s 0s 348835950e-09 1s 1s 348836710e-09 1s 1s 348841310e-09 0s 0s 348846190e-09 1s 1s 348846990e-09 1s 1s 348851550e-09 0s 0s 348856430e-09 1s 1s 348857270e-09 1s 1s 348861790e-09 0s 0s 348866670e-09 1s 1s 348867550e-09 1s 1s 348872030e-09 0s 0s 348876910e-09 1s 1s 348877830e-09 1s 1s 348882270e-09 0s 0s 348887150e-09 1s 1s 348888110e-09 1s 1s 348892510e-09 0s 0s 348897390e-09 1s 1s 348898390e-09 1s 1s 348902750e-09 0s 0s 348907630e-09 1s 1s 348908670e-09 1s 1s 348912990e-09 0s 0s 348917870e-09 1s 1s 348918950e-09 1s 1s 348923230e-09 0s 0s 348928110e-09 1s 1s 348929230e-09 1s 1s 348933470e-09 0s 0s 348938350e-09 1s 1s 348939510e-09 1s 1s 348943710e-09 0s 0s 348948590e-09 1s 1s 348949790e-09 1s 1s 348953950e-09 0s 0s 348958830e-09 1s 1s 348960070e-09 1s 1s 348964190e-09 0s 0s 348969070e-09 1s 1s 348970350e-09 1s 1s 348974430e-09 0s 0s 348979310e-09 1s 1s 348980630e-09 1s 1s 348984670e-09 0s 0s 348989550e-09 1s 1s 348990910e-09 1s 1s 348994910e-09 0s 0s 348999790e-09 1s 1s 349001190e-09 1s 1s 349005150e-09 0s 0s 349010030e-09 1s 1s 349011470e-09 1s 1s 349015390e-09 0s 0s 349020270e-09 1s 1s 349021750e-09 1s 1s 349025630e-09 0s 0s 349030510e-09 1s 1s 349032030e-09 1s 1s 349035870e-09 0s 0s 349040750e-09 1s 1s 349042310e-09 1s 1s 349046110e-09 0s 0s 349050990e-09 1s 1s 349052590e-09 1s 1s 349056350e-09 0s 0s 349061230e-09 1s 1s 349062870e-09 1s 1s 349066590e-09 0s 0s 349071470e-09 1s 1s 349073150e-09 1s 1s 349076830e-09 0s 0s 349081710e-09 1s 1s 349083430e-09 1s 1s 349087070e-09 0s 0s 349091950e-09 1s 1s 349093710e-09 1s 1s 349097310e-09 0s 0s 349102190e-09 1s 1s 349103990e-09 1s 1s 349107550e-09 0s 0s 349112430e-09 1s 1s 349114270e-09 1s 1s 349117790e-09 0s 0s 349122670e-09 1s 1s 349124550e-09 1s 1s 349128030e-09 0s 0s 349132910e-09 1s 1s 349134830e-09 1s 1s 349138270e-09 0s 0s 349143150e-09 1s 1s 349145110e-09 1s 1s 349148510e-09 0s 0s 349153390e-09 1s 1s 349155390e-09 1s 1s 349158750e-09 0s 0s 349163630e-09 1s 1s 349165670e-09 1s 1s 349168990e-09 0s 0s 349173870e-09 1s 1s 349175950e-09 1s 1s 349179230e-09 0s 0s 349184110e-09 1s 1s 349186230e-09 1s 1s 349189470e-09 0s 0s 349194350e-09 1s 1s 349196510e-09 1s 1s 349199710e-09 0s 0s 349204590e-09 1s 1s 349206790e-09 1s 1s 349209950e-09 0s 0s 349214830e-09 1s 1s 349217070e-09 1s 1s 349220190e-09 0s 0s 349225070e-09 1s 1s 349227350e-09 1s 1s 349230430e-09 0s 0s 349235310e-09 1s 1s 349237630e-09 1s 1s 349240670e-09 0s 0s 349245550e-09 1s 1s 349247910e-09 1s 1s 349250910e-09 0s 0s 349255790e-09 1s 1s 349258190e-09 1s 1s 349261150e-09 0s 0s 349266030e-09 1s 1s 349268470e-09 1s 1s 349271390e-09 0s 0s 349276270e-09 1s 1s 349278750e-09 1s 1s 349281630e-09 0s 0s 349286510e-09 1s 1s 349289030e-09 1s 1s 349291870e-09 0s 0s 349296750e-09 1s 1s 349299310e-09 1s 1s 349302110e-09 0s 0s 349306990e-09 1s 1s 349309590e-09 1s 1s 349312350e-09 0s 0s 349317230e-09 1s 1s 349319870e-09 1s 1s 349322590e-09 0s 0s 349327470e-09 1s 1s 349330150e-09 1s 1s 349332830e-09 0s 0s 349337710e-09 1s 1s 349340430e-09 1s 1s 349343070e-09 0s 0s 349347950e-09 1s 1s 349350710e-09 1s 1s 349353310e-09 0s 0s 349358190e-09 1s 1s 349360990e-09 1s 1s 349363550e-09 0s 0s 349368430e-09 1s 1s 349371270e-09 1s 1s 349373790e-09 0s 0s 349378670e-09 1s 1s 349381550e-09 1s 1s 349384030e-09 0s 0s 349388910e-09 1s 1s 349391830e-09 1s 1s 349394270e-09 0s 0s 349399150e-09 1s 1s 349402110e-09 1s 1s 349404510e-09 0s 0s 349409390e-09 1s 1s 349412390e-09 1s 1s 349414750e-09 0s 0s 349419630e-09 1s 1s 349422670e-09 1s 1s 349424990e-09 0s 0s 349429870e-09 1s 1s 349432950e-09 1s 1s 349435230e-09 0s 0s 349440110e-09 1s 1s 349443230e-09 1s 1s 349445470e-09 0s 0s 349450350e-09 1s 1s 349453510e-09 1s 1s 349455710e-09 0s 0s 349460590e-09 1s 1s 349463790e-09 1s 1s 349465950e-09 0s 0s 349470830e-09 1s 1s 349474070e-09 1s 1s 349476190e-09 0s 0s 349481070e-09 1s 1s 349484350e-09 1s 1s 349486430e-09 0s 0s 349491310e-09 1s 1s 349494630e-09 1s 1s 349496670e-09 0s 0s 349501550e-09 1s 1s 349504910e-09 1s 1s 349506910e-09 0s 0s 349511790e-09 1s 1s 349515190e-09 1s 1s 349517150e-09 0s 0s 349522030e-09 1s 1s 349525470e-09 1s 1s 349527390e-09 0s 0s 349532270e-09 1s 1s 349535750e-09 1s 1s 349537630e-09 0s 0s 349542510e-09 1s 1s 349546030e-09 1s 1s 349547870e-09 0s 0s 349552750e-09 1s 1s 349556310e-09 1s 1s 349558110e-09 0s 0s 349562990e-09 1s 1s 349566590e-09 1s 1s 349568350e-09 0s 0s 349573230e-09 1s 1s 349576870e-09 1s 1s 349578590e-09 0s 0s 349583470e-09 1s 1s 349587150e-09 1s 1s 349588830e-09 0s 0s 349593710e-09 1s 1s 349597430e-09 1s 1s 349599070e-09 0s 0s 349603950e-09 1s 1s 349607710e-09 1s 1s 349609310e-09 0s 0s 349614190e-09 1s 1s 349617990e-09 1s 1s 349619550e-09 0s 0s 349624430e-09 1s 1s 349628270e-09 1s 1s 349629790e-09 0s 0s 349634670e-09 1s 1s 349638550e-09 1s 1s 349640030e-09 0s 0s 349644910e-09 1s 1s 349648830e-09 1s 1s 349650270e-09 0s 0s 349655150e-09 1s 1s 349659110e-09 1s 1s 349660510e-09 0s 0s 349665390e-09 1s 1s 349669390e-09 1s 1s 349670750e-09 0s 0s 349675630e-09 1s 1s 349679670e-09 1s 1s 349680990e-09 0s 0s 349685870e-09 1s 1s 349689950e-09 1s 1s 349691230e-09 0s 0s 349696110e-09 1s 1s 349700230e-09 1s 1s 349701470e-09 0s 0s 349706350e-09 1s 1s 349710510e-09 1s 1s 349711710e-09 0s 0s 349716590e-09 1s 1s 349720790e-09 1s 1s 349721950e-09 0s 0s 349726830e-09 1s 1s 349731070e-09 1s 1s 349732190e-09 0s 0s 349737070e-09 1s 1s 349741350e-09 1s 1s 349742430e-09 0s 0s 349747310e-09 1s 1s 349751630e-09 1s 1s 349752670e-09 0s 0s 349757550e-09 1s 1s 349761910e-09 1s 1s 349762910e-09 0s 0s 349767790e-09 1s 1s 349772190e-09 1s 1s 349773150e-09 0s 0s 349778030e-09 1s 1s 349782470e-09 1s 1s 349783390e-09 0s 0s 349788270e-09 1s 1s 349792750e-09 1s 1s 349793630e-09 0s 0s 349798510e-09 1s 1s 349803030e-09 1s 1s 349803870e-09 0s 0s 349808750e-09 1s 1s 349813310e-09 1s 1s 349814110e-09 0s 0s 349818990e-09 1s 1s 349823590e-09 1s 1s 349824350e-09 0s 0s 349829230e-09 1s 1s 349833870e-09 1s 1s 349834590e-09 0s 0s 349839470e-09 1s 1s 349844150e-09 1s 1s 349844830e-09 0s 0s 349849710e-09 1s 1s 349854430e-09 1s 1s 349855070e-09 0s 0s 349859950e-09 1s 1s 349864710e-09 1s 1s 349865310e-09 0s 0s 349870190e-09 1s 1s 349874990e-09 1s 1s 349875550e-09 0s 0s 349880430e-09 1s 1s 349885270e-09 1s 1s 349885790e-09 0s 0s 349890670e-09 1s 1s 349895550e-09 1s 1s 349896030e-09 0s 0s 349900910e-09 1s 1s 349905830e-09 1s 1s 349906270e-09 0s 0s 349911150e-09 1s 1s 349916110e-09 1s 1s 349916510e-09 0s 0s 349921390e-09 1s 1s 349926390e-09 1s 1s 349926750e-09 0s 0s 349931630e-09 1s 1s 349936670e-09 1s 1s 349936990e-09 0s 0s 349941870e-09 1s 1s 349946950e-09 1s 1s 349947230e-09 0s 0s 349952110e-09 1s 1s 349957230e-09 1s 1s 349957470e-09 0s 0s 349962350e-09 1s 1s 349967510e-09 1s 1s 349967710e-09 0s 0s 349972590e-09 1s 1s 349977790e-09 1s 1s 349977950e-09 0s 0s 349982830e-09 1s 1s 349988070e-09 1s 1s 349988190e-09 0s 0s 349993070e-09 1s 1s 349998350e-09 1s 1s 349998430e-09 0s 0s 350003310e-09 1s 1s 350008630e-09 1s 1s 350008670e-09 0s 0s 350013550e-09 1s 1s 350018910e-09 0s 0s 350023790e-09 1s 1s 350029150e-09 0s 0s 350029190e-09 0s 0s 350034030e-09 1s 1s 350039390e-09 0s 0s 350039470e-09 0s 0s 350044270e-09 1s 1s 350049630e-09 0s 0s 350049750e-09 0s 0s 350054510e-09 1s 1s 350059870e-09 0s 0s 350060030e-09 0s 0s 350064750e-09 1s 1s 350070110e-09 0s 0s 350070310e-09 0s 0s 350074990e-09 1s 1s 350080350e-09 0s 0s 350080590e-09 0s 0s 350085230e-09 1s 1s 350090590e-09 0s 0s 350090870e-09 0s 0s 350095470e-09 1s 1s 350100830e-09 0s 0s 350101150e-09 0s 0s 350105710e-09 1s 1s 350111070e-09 0s 0s 350111430e-09 0s 0s 350115950e-09 1s 1s 350121310e-09 0s 0s 350121710e-09 0s 0s 350126190e-09 1s 1s 350131550e-09 0s 0s 350131990e-09 0s 0s 350136430e-09 1s 1s 350141790e-09 0s 0s 350142270e-09 0s 0s 350146670e-09 1s 1s 350152030e-09 0s 0s 350152550e-09 0s 0s 350156910e-09 1s 1s 350162270e-09 0s 0s 350162830e-09 0s 0s 350167150e-09 1s 1s 350172510e-09 0s 0s 350173110e-09 0s 0s 350177390e-09 1s 1s 350182750e-09 0s 0s 350183390e-09 0s 0s 350187630e-09 1s 1s 350192990e-09 0s 0s 350193670e-09 0s 0s 350197870e-09 1s 1s 350203230e-09 0s 0s 350203950e-09 0s 0s 350208110e-09 1s 1s 350213470e-09 0s 0s 350214230e-09 0s 0s 350218350e-09 1s 1s 350223710e-09 0s 0s 350224510e-09 0s 0s 350228590e-09 1s 1s 350233950e-09 0s 0s 350234790e-09 0s 0s 350238830e-09 1s 1s 350244190e-09 0s 0s 350245070e-09 0s 0s 350249070e-09 1s 1s 350254430e-09 0s 0s 350255350e-09 0s 0s 350259310e-09 1s 1s 350264670e-09 0s 0s 350265630e-09 0s 0s 350269550e-09 1s 1s 350274910e-09 0s 0s 350275910e-09 0s 0s 350279790e-09 1s 1s 350285150e-09 0s 0s 350286190e-09 0s 0s 350290030e-09 1s 1s 350295390e-09 0s 0s 350296470e-09 0s 0s 350300270e-09 1s 1s 350305630e-09 0s 0s 350306750e-09 0s 0s 350310510e-09 1s 1s 350315870e-09 0s 0s 350317030e-09 0s 0s 350320750e-09 1s 1s 350326110e-09 0s 0s 350327310e-09 0s 0s 350330990e-09 1s 1s 350336350e-09 0s 0s 350337590e-09 0s 0s 350341230e-09 1s 1s 350346590e-09 0s 0s 350347870e-09 0s 0s 350351470e-09 1s 1s 350356830e-09 0s 0s 350358150e-09 0s 0s 350361710e-09 1s 1s 350367070e-09 0s 0s 350368430e-09 0s 0s 350371950e-09 1s 1s 350377310e-09 0s 0s 350378710e-09 0s 0s 350382190e-09 1s 1s 350387550e-09 0s 0s 350388990e-09 0s 0s 350392430e-09 1s 1s 350397790e-09 0s 0s 350399270e-09 0s 0s 350402670e-09 1s 1s 350408030e-09 0s 0s 350409550e-09 0s 0s 350412910e-09 1s 1s 350418270e-09 0s 0s 350419830e-09 0s 0s 350423150e-09 1s 1s 350428510e-09 0s 0s 350430110e-09 0s 0s 350433390e-09 1s 1s 350438750e-09 0s 0s 350440390e-09 0s 0s 350443630e-09 1s 1s 350448990e-09 0s 0s 350450670e-09 0s 0s 350453870e-09 1s 1s 350459230e-09 0s 0s 350460950e-09 0s 0s 350464110e-09 1s 1s 350469470e-09 0s 0s 350471230e-09 0s 0s 350474350e-09 1s 1s 350479710e-09 0s 0s 350481510e-09 0s 0s 350484590e-09 1s 1s 350489950e-09 0s 0s 350491790e-09 0s 0s 350494830e-09 1s 1s 350500190e-09 0s 0s 350502070e-09 0s 0s 350505070e-09 1s 1s 350510430e-09 0s 0s 350512350e-09 0s 0s 350515310e-09 1s 1s 350520670e-09 0s 0s 350522630e-09 0s 0s 350525550e-09 1s 1s 350530910e-09 0s 0s 350532910e-09 0s 0s 350535790e-09 1s 1s 350541150e-09 0s 0s 350543190e-09 0s 0s 350546030e-09 1s 1s 350551390e-09 0s 0s 350553470e-09 0s 0s 350556270e-09 1s 1s 350561630e-09 0s 0s 350563750e-09 0s 0s 350566510e-09 1s 1s 350571870e-09 0s 0s 350574030e-09 0s 0s 350576750e-09 1s 1s 350582110e-09 0s 0s 350584310e-09 0s 0s 350586990e-09 1s 1s 350592350e-09 0s 0s 350594590e-09 0s 0s 350597230e-09 1s 1s 350602590e-09 0s 0s 350604870e-09 0s 0s 350607470e-09 1s 1s 350612830e-09 0s 0s 350615150e-09 0s 0s 350617710e-09 1s 1s 350623070e-09 0s 0s 350625430e-09 0s 0s 350627950e-09 1s 1s 350633310e-09 0s 0s 350635710e-09 0s 0s 350638190e-09 1s 1s 350643550e-09 0s 0s 350645990e-09 0s 0s 350648430e-09 1s 1s 350653790e-09 0s 0s 350656270e-09 0s 0s 350658670e-09 1s 1s 350664030e-09 0s 0s 350666550e-09 0s 0s 350668910e-09 1s 1s 350674270e-09 0s 0s 350676830e-09 0s 0s 350679150e-09 1s 1s 350684510e-09 0s 0s 350687110e-09 0s 0s 350689390e-09 1s 1s 350694750e-09 0s 0s 350697390e-09 0s 0s 350699630e-09 1s 1s 350704990e-09 0s 0s 350707670e-09 0s 0s 350709870e-09 1s 1s 350715230e-09 0s 0s 350717950e-09 0s 0s 350720110e-09 1s 1s 350725470e-09 0s 0s 350728230e-09 0s 0s 350730350e-09 1s 1s 350735710e-09 0s 0s 350738510e-09 0s 0s 350740590e-09 1s 1s 350745950e-09 0s 0s 350748790e-09 0s 0s 350750830e-09 1s 1s 350756190e-09 0s 0s 350759070e-09 0s 0s 350761070e-09 1s 1s 350766430e-09 0s 0s 350769350e-09 0s 0s 350771310e-09 1s 1s 350776670e-09 0s 0s 350779630e-09 0s 0s 350781550e-09 1s 1s 350786910e-09 0s 0s 350789910e-09 0s 0s 350791790e-09 1s 1s 350797150e-09 0s 0s 350800190e-09 0s 0s 350802030e-09 1s 1s 350807390e-09 0s 0s 350810470e-09 0s 0s 350812270e-09 1s 1s 350817630e-09 0s 0s 350820750e-09 0s 0s 350822510e-09 1s 1s 350827870e-09 0s 0s 350831030e-09 0s 0s 350832750e-09 1s 1s 350838110e-09 0s 0s 350841310e-09 0s 0s 350842990e-09 1s 1s 350848350e-09 0s 0s 350851590e-09 0s 0s 350853230e-09 1s 1s 350858590e-09 0s 0s 350861870e-09 0s 0s 350863470e-09 1s 1s 350868830e-09 0s 0s 350872150e-09 0s 0s 350873710e-09 1s 1s 350879070e-09 0s 0s 350882430e-09 0s 0s 350883950e-09 1s 1s 350889310e-09 0s 0s 350892710e-09 0s 0s 350894190e-09 1s 1s 350899550e-09 0s 0s 350902990e-09 0s 0s 350904430e-09 1s 1s 350909790e-09 0s 0s 350913270e-09 0s 0s 350914670e-09 1s 1s 350920030e-09 0s 0s 350923550e-09 0s 0s 350924910e-09 1s 1s 350930270e-09 0s 0s 350933830e-09 0s 0s 350935150e-09 1s 1s 350940510e-09 0s 0s 350944110e-09 0s 0s 350945390e-09 1s 1s 350950750e-09 0s 0s 350954390e-09 0s 0s 350955630e-09 1s 1s 350960990e-09 0s 0s 350964670e-09 0s 0s 350965870e-09 1s 1s 350971230e-09 0s 0s 350974950e-09 0s 0s 350976110e-09 1s 1s 350981470e-09 0s 0s 350985230e-09 0s 0s 350986350e-09 1s 1s 350991710e-09 0s 0s 350995510e-09 0s 0s 350996590e-09 1s 1s 351001950e-09 0s 0s 351005790e-09 0s 0s 351006830e-09 1s 1s 351012190e-09 0s 0s 351016070e-09 0s 0s 351017070e-09 1s 1s 351022430e-09 0s 0s 351026350e-09 0s 0s 351027310e-09 1s 1s 351032670e-09 0s 0s 351036630e-09 0s 0s 351037550e-09 1s 1s 351042910e-09 0s 0s 351046910e-09 0s 0s 351047790e-09 1s 1s 351053150e-09 0s 0s 351057190e-09 0s 0s 351058030e-09 1s 1s 351063390e-09 0s 0s 351067470e-09 0s 0s 351068270e-09 1s 1s 351073630e-09 0s 0s 351077750e-09 0s 0s 351078510e-09 1s 1s 351083870e-09 0s 0s 351088030e-09 0s 0s 351088750e-09 1s 1s 351094110e-09 0s 0s 351098310e-09 0s 0s 351098990e-09 1s 1s 351104350e-09 0s 0s 351108590e-09 0s 0s 351109230e-09 1s 1s 351114590e-09 0s 0s 351118870e-09 0s 0s 351119470e-09 1s 1s 351124830e-09 0s 0s 351129150e-09 0s 0s 351129710e-09 1s 1s 351135070e-09 0s 0s 351139430e-09 0s 0s 351139950e-09 1s 1s 351145310e-09 0s 0s 351149710e-09 0s 0s 351150190e-09 1s 1s 351155550e-09 0s 0s 351159990e-09 0s 0s 351160430e-09 1s 1s 351165790e-09 0s 0s 351170270e-09 0s 0s 351170670e-09 1s 1s 351176030e-09 0s 0s 351180550e-09 0s 0s 351180910e-09 1s 1s 351186270e-09 0s 0s 351190830e-09 0s 0s 351191150e-09 1s 1s 351196510e-09 0s 0s 351201110e-09 0s 0s 351201390e-09 1s 1s 351206750e-09 0s 0s 351211390e-09 0s 0s 351211630e-09 1s 1s 351216990e-09 0s 0s 351221670e-09 0s 0s 351221870e-09 1s 1s 351227230e-09 0s 0s 351231950e-09 0s 0s 351232110e-09 1s 1s 351237470e-09 0s 0s 351242230e-09 0s 0s 351242350e-09 1s 1s 351247710e-09 0s 0s 351252510e-09 0s 0s 351252590e-09 1s 1s 351257950e-09 0s 0s 351262790e-09 0s 0s 351262830e-09 1s 1s 351268190e-09 0s 0s 351273070e-09 1s 1s 351273110e-09 1s 1s 351278470e-09 0s 0s 351283310e-09 1s 1s 351283390e-09 1s 1s 351288710e-09 0s 0s 351293550e-09 1s 1s 351293670e-09 1s 1s 351298950e-09 0s 0s 351303790e-09 1s 1s 351303950e-09 1s 1s 351309190e-09 0s 0s 351314030e-09 1s 1s 351314230e-09 1s 1s 351319430e-09 0s 0s 351324270e-09 1s 1s 351324510e-09 1s 1s 351329670e-09 0s 0s 351334510e-09 1s 1s 351334790e-09 1s 1s 351339910e-09 0s 0s 351344750e-09 1s 1s 351345070e-09 1s 1s 351350150e-09 0s 0s 351354990e-09 1s 1s 351355350e-09 1s 1s 351360390e-09 0s 0s 351365230e-09 1s 1s 351365630e-09 1s 1s 351370630e-09 0s 0s 351375470e-09 1s 1s 351375910e-09 1s 1s 351380870e-09 0s 0s 351385710e-09 1s 1s 351386190e-09 1s 1s 351391110e-09 0s 0s 351395950e-09 1s 1s 351396470e-09 1s 1s 351401350e-09 0s 0s 351406190e-09 1s 1s 351406750e-09 1s 1s 351411590e-09 0s 0s 351416430e-09 1s 1s 351417030e-09 1s 1s 351421830e-09 0s 0s 351426670e-09 1s 1s 351427310e-09 1s 1s 351432070e-09 0s 0s 351436910e-09 1s 1s 351437590e-09 1s 1s 351442310e-09 0s 0s 351447150e-09 1s 1s 351447870e-09 1s 1s 351452550e-09 0s 0s 351457390e-09 1s 1s 351458150e-09 1s 1s 351462790e-09 0s 0s 351467630e-09 1s 1s 351468430e-09 1s 1s 351473030e-09 0s 0s 351477870e-09 1s 1s 351478710e-09 1s 1s 351483270e-09 0s 0s 351488110e-09 1s 1s 351488990e-09 1s 1s 351493510e-09 0s 0s 351498350e-09 1s 1s 351499270e-09 1s 1s 351503750e-09 0s 0s 351508590e-09 1s 1s 351509550e-09 1s 1s 351513990e-09 0s 0s 351518830e-09 1s 1s 351519830e-09 1s 1s 351524230e-09 0s 0s 351529070e-09 1s 1s 351530110e-09 1s 1s 351534470e-09 0s 0s 351539310e-09 1s 1s 351540390e-09 1s 1s 351544710e-09 0s 0s 351549550e-09 1s 1s 351550670e-09 1s 1s 351554950e-09 0s 0s 351559790e-09 1s 1s 351560950e-09 1s 1s 351565190e-09 0s 0s 351570030e-09 1s 1s 351571230e-09 1s 1s 351575430e-09 0s 0s 351580270e-09 1s 1s 351581510e-09 1s 1s 351585670e-09 0s 0s 351590510e-09 1s 1s 351591790e-09 1s 1s 351595910e-09 0s 0s 351600750e-09 1s 1s 351602070e-09 1s 1s 351606150e-09 0s 0s 351610990e-09 1s 1s 351612350e-09 1s 1s 351616390e-09 0s 0s 351621230e-09 1s 1s 351622630e-09 1s 1s 351626630e-09 0s 0s 351631470e-09 1s 1s 351632910e-09 1s 1s 351636870e-09 0s 0s 351641710e-09 1s 1s 351643190e-09 1s 1s 351647110e-09 0s 0s 351651950e-09 1s 1s 351653470e-09 1s 1s 351657350e-09 0s 0s 351662190e-09 1s 1s 351663750e-09 1s 1s 351667590e-09 0s 0s 351672430e-09 1s 1s 351674030e-09 1s 1s 351677830e-09 0s 0s 351682670e-09 1s 1s 351684310e-09 1s 1s 351688070e-09 0s 0s 351692910e-09 1s 1s 351694590e-09 1s 1s 351698310e-09 0s 0s 351703150e-09 1s 1s 351704870e-09 1s 1s 351708550e-09 0s 0s 351713390e-09 1s 1s 351715150e-09 1s 1s 351718790e-09 0s 0s 351723630e-09 1s 1s 351725430e-09 1s 1s 351729030e-09 0s 0s 351733870e-09 1s 1s 351735710e-09 1s 1s 351739270e-09 0s 0s 351744110e-09 1s 1s 351745990e-09 1s 1s 351749510e-09 0s 0s 351754350e-09 1s 1s 351756270e-09 1s 1s 351759750e-09 0s 0s 351764590e-09 1s 1s 351766550e-09 1s 1s 351769990e-09 0s 0s 351774830e-09 1s 1s 351776830e-09 1s 1s 351780230e-09 0s 0s 351785070e-09 1s 1s 351787110e-09 1s 1s 351790470e-09 0s 0s 351795310e-09 1s 1s 351797390e-09 1s 1s 351800710e-09 0s 0s 351805550e-09 1s 1s 351807670e-09 1s 1s 351810950e-09 0s 0s 351815790e-09 1s 1s 351817950e-09 1s 1s 351821190e-09 0s 0s 351826030e-09 1s 1s 351828230e-09 1s 1s 351831430e-09 0s 0s 351836270e-09 1s 1s 351838510e-09 1s 1s 351841670e-09 0s 0s 351846510e-09 1s 1s 351848790e-09 1s 1s 351851910e-09 0s 0s 351856750e-09 1s 1s 351859070e-09 1s 1s 351862150e-09 0s 0s 351866990e-09 1s 1s 351869350e-09 1s 1s 351872390e-09 0s 0s 351877230e-09 1s 1s 351879630e-09 1s 1s 351882630e-09 0s 0s 351887470e-09 1s 1s 351889910e-09 1s 1s 351892870e-09 0s 0s 351897710e-09 1s 1s 351900190e-09 1s 1s 351903110e-09 0s 0s 351907950e-09 1s 1s 351910470e-09 1s 1s 351913350e-09 0s 0s 351918190e-09 1s 1s 351920750e-09 1s 1s 351923590e-09 0s 0s 351928430e-09 1s 1s 351931030e-09 1s 1s 351933830e-09 0s 0s 351938670e-09 1s 1s 351941310e-09 1s 1s 351944070e-09 0s 0s 351948910e-09 1s 1s 351951590e-09 1s 1s 351954310e-09 0s 0s 351959150e-09 1s 1s 351961870e-09 1s 1s 351964550e-09 0s 0s 351969390e-09 1s 1s 351972150e-09 1s 1s 351974790e-09 0s 0s 351979630e-09 1s 1s 351982430e-09 1s 1s 351985030e-09 0s 0s 351989870e-09 1s 1s 351992710e-09 1s 1s 351995270e-09 0s 0s 352000110e-09 1s 1s 352002990e-09 1s 1s 352005510e-09 0s 0s 352010350e-09 1s 1s 352013270e-09 1s 1s 352015750e-09 0s 0s 352020590e-09 1s 1s 352023550e-09 1s 1s 352025990e-09 0s 0s 352030830e-09 1s 1s 352033830e-09 1s 1s 352036230e-09 0s 0s 352041070e-09 1s 1s 352044110e-09 1s 1s 352046470e-09 0s 0s 352051310e-09 1s 1s 352054390e-09 1s 1s 352056710e-09 0s 0s 352061550e-09 1s 1s 352064670e-09 1s 1s 352066950e-09 0s 0s 352071790e-09 1s 1s 352074950e-09 1s 1s 352077190e-09 0s 0s 352082030e-09 1s 1s 352085230e-09 1s 1s 352087430e-09 0s 0s 352092270e-09 1s 1s 352095510e-09 1s 1s 352097670e-09 0s 0s 352102510e-09 1s 1s 352105790e-09 1s 1s 352107910e-09 0s 0s 352112750e-09 1s 1s 352116070e-09 1s 1s 352118150e-09 0s 0s 352122990e-09 1s 1s 352126350e-09 1s 1s 352128390e-09 0s 0s 352133230e-09 1s 1s 352136630e-09 1s 1s 352138630e-09 0s 0s 352143470e-09 1s 1s 352146910e-09 1s 1s 352148870e-09 0s 0s 352153710e-09 1s 1s 352157190e-09 1s 1s 352159110e-09 0s 0s 352163950e-09 1s 1s 352167470e-09 1s 1s 352169350e-09 0s 0s 352174190e-09 1s 1s 352177750e-09 1s 1s 352179590e-09 0s 0s 352184430e-09 1s 1s 352188030e-09 1s 1s 352189830e-09 0s 0s 352194670e-09 1s 1s 352198310e-09 1s 1s 352200070e-09 0s 0s 352204910e-09 1s 1s 352208590e-09 1s 1s 352210310e-09 0s 0s 352215150e-09 1s 1s 352218870e-09 1s 1s 352220550e-09 0s 0s 352225390e-09 1s 1s 352229150e-09 1s 1s 352230790e-09 0s 0s 352235630e-09 1s 1s 352239430e-09 1s 1s 352241030e-09 0s 0s 352245870e-09 1s 1s 352249710e-09 1s 1s 352251270e-09 0s 0s 352256110e-09 1s 1s 352259990e-09 1s 1s 352261510e-09 0s 0s 352266350e-09 1s 1s 352270270e-09 1s 1s 352271750e-09 0s 0s 352276590e-09 1s 1s 352280550e-09 1s 1s 352281990e-09 0s 0s 352286830e-09 1s 1s 352290830e-09 1s 1s 352292230e-09 0s 0s 352297070e-09 1s 1s 352301110e-09 1s 1s 352302470e-09 0s 0s 352307310e-09 1s 1s 352311390e-09 1s 1s 352312710e-09 0s 0s 352317550e-09 1s 1s 352321670e-09 1s 1s 352322950e-09 0s 0s 352327790e-09 1s 1s 352331950e-09 1s 1s 352333190e-09 0s 0s 352338030e-09 1s 1s 352342230e-09 1s 1s 352343430e-09 0s 0s 352348270e-09 1s 1s 352352510e-09 1s 1s 352353670e-09 0s 0s 352358510e-09 1s 1s 352362790e-09 1s 1s 352363910e-09 0s 0s 352368750e-09 1s 1s 352373070e-09 1s 1s 352374150e-09 0s 0s 352378990e-09 1s 1s 352383350e-09 1s 1s 352384390e-09 0s 0s 352389230e-09 1s 1s 352393630e-09 1s 1s 352394630e-09 0s 0s 352399470e-09 1s 1s 352403910e-09 1s 1s 352404870e-09 0s 0s 352409710e-09 1s 1s 352414190e-09 1s 1s 352415110e-09 0s 0s 352419950e-09 1s 1s 352424470e-09 1s 1s 352425350e-09 0s 0s 352430190e-09 1s 1s 352434750e-09 1s 1s 352435590e-09 0s 0s 352440430e-09 1s 1s 352445030e-09 1s 1s 352445830e-09 0s 0s 352450670e-09 1s 1s 352455310e-09 1s 1s 352456070e-09 0s 0s 352460910e-09 1s 1s 352465590e-09 1s 1s 352466310e-09 0s 0s 352471150e-09 1s 1s 352475870e-09 1s 1s 352476550e-09 0s 0s 352481390e-09 1s 1s 352486150e-09 1s 1s 352486790e-09 0s 0s 352491630e-09 1s 1s 352496430e-09 1s 1s 352497030e-09 0s 0s 352501870e-09 1s 1s 352506710e-09 1s 1s 352507270e-09 0s 0s 352512110e-09 1s 1s 352516990e-09 1s 1s 352517510e-09 0s 0s 352522350e-09 1s 1s 352527270e-09 1s 1s 352527750e-09 0s 0s 352532590e-09 1s 1s 352537550e-09 1s 1s 352537990e-09 0s 0s 352542830e-09 1s 1s 352547830e-09 1s 1s 352548230e-09 0s 0s 352553070e-09 1s 1s 352558110e-09 1s 1s 352558470e-09 0s 0s 352563310e-09 1s 1s 352568390e-09 1s 1s 352568710e-09 0s 0s 352573550e-09 1s 1s 352578670e-09 1s 1s 352578950e-09 0s 0s 352583790e-09 1s 1s 352588950e-09 1s 1s 352589190e-09 0s 0s 352594030e-09 1s 1s 352599230e-09 1s 1s 352599430e-09 0s 0s 352604270e-09 1s 1s 352609510e-09 1s 1s 352609670e-09 0s 0s 352614510e-09 1s 1s 352619790e-09 1s 1s 352619910e-09 0s 0s 352624750e-09 1s 1s 352630070e-09 1s 1s 352630150e-09 0s 0s 352634990e-09 1s 1s 352640350e-09 1s 1s 352640390e-09 0s 0s 352645230e-09 1s 1s 352650630e-09 0s 0s 352655470e-09 1s 1s 352660870e-09 0s 0s 352660910e-09 0s 0s 352665710e-09 1s 1s 352671110e-09 0s 0s 352671190e-09 0s 0s 352675950e-09 1s 1s 352681350e-09 0s 0s 352681470e-09 0s 0s 352686190e-09 1s 1s 352691590e-09 0s 0s 352691750e-09 0s 0s 352696430e-09 1s 1s 352701830e-09 0s 0s 352702030e-09 0s 0s 352706670e-09 1s 1s 352712070e-09 0s 0s 352712310e-09 0s 0s 352716910e-09 1s 1s 352722310e-09 0s 0s 352722590e-09 0s 0s 352727150e-09 1s 1s 352732550e-09 0s 0s 352732870e-09 0s 0s 352737390e-09 1s 1s 352742790e-09 0s 0s 352743150e-09 0s 0s 352747630e-09 1s 1s 352753030e-09 0s 0s 352753430e-09 0s 0s 352757870e-09 1s 1s 352763270e-09 0s 0s 352763710e-09 0s 0s 352768110e-09 1s 1s 352773510e-09 0s 0s 352773990e-09 0s 0s 352778350e-09 1s 1s 352783750e-09 0s 0s 352784270e-09 0s 0s 352788590e-09 1s 1s 352793990e-09 0s 0s 352794550e-09 0s 0s 352798830e-09 1s 1s 352804230e-09 0s 0s 352804830e-09 0s 0s 352809070e-09 1s 1s 352814470e-09 0s 0s 352815110e-09 0s 0s 352819310e-09 1s 1s 352824710e-09 0s 0s 352825390e-09 0s 0s 352829550e-09 1s 1s 352834950e-09 0s 0s 352835670e-09 0s 0s 352839790e-09 1s 1s 352845190e-09 0s 0s 352845950e-09 0s 0s 352850030e-09 1s 1s 352855430e-09 0s 0s 352856230e-09 0s 0s 352860270e-09 1s 1s 352865670e-09 0s 0s 352866510e-09 0s 0s 352870510e-09 1s 1s 352875910e-09 0s 0s 352876790e-09 0s 0s 352880750e-09 1s 1s 352886150e-09 0s 0s 352887070e-09 0s 0s 352890990e-09 1s 1s 352896390e-09 0s 0s 352897350e-09 0s 0s 352901230e-09 1s 1s 352906630e-09 0s 0s 352907630e-09 0s 0s 352911470e-09 1s 1s 352916870e-09 0s 0s 352917910e-09 0s 0s 352921710e-09 1s 1s 352927110e-09 0s 0s 352928190e-09 0s 0s 352931950e-09 1s 1s 352937350e-09 0s 0s 352938470e-09 0s 0s 352942190e-09 1s 1s 352947590e-09 0s 0s 352948750e-09 0s 0s 352952430e-09 1s 1s 352957830e-09 0s 0s 352959030e-09 0s 0s 352962670e-09 1s 1s 352968070e-09 0s 0s 352969310e-09 0s 0s 352972910e-09 1s 1s 352978310e-09 0s 0s 352979590e-09 0s 0s 352983150e-09 1s 1s 352988550e-09 0s 0s 352989870e-09 0s 0s 352993390e-09 1s 1s 352998790e-09 0s 0s 353000150e-09 0s 0s 353003630e-09 1s 1s 353009030e-09 0s 0s 353010430e-09 0s 0s 353013870e-09 1s 1s 353019270e-09 0s 0s 353020710e-09 0s 0s 353024110e-09 1s 1s 353029510e-09 0s 0s 353030990e-09 0s 0s 353034350e-09 1s 1s 353039750e-09 0s 0s 353041270e-09 0s 0s 353044590e-09 1s 1s 353049990e-09 0s 0s 353051550e-09 0s 0s 353054830e-09 1s 1s 353060230e-09 0s 0s 353061830e-09 0s 0s 353065070e-09 1s 1s 353070470e-09 0s 0s 353072110e-09 0s 0s 353075310e-09 1s 1s 353080710e-09 0s 0s 353082390e-09 0s 0s 353085550e-09 1s 1s 353090950e-09 0s 0s 353092670e-09 0s 0s 353095790e-09 1s 1s 353101190e-09 0s 0s 353102950e-09 0s 0s 353106030e-09 1s 1s 353111430e-09 0s 0s 353113230e-09 0s 0s 353116270e-09 1s 1s 353121670e-09 0s 0s 353123510e-09 0s 0s 353126510e-09 1s 1s 353131910e-09 0s 0s 353133790e-09 0s 0s 353136750e-09 1s 1s 353142150e-09 0s 0s 353144070e-09 0s 0s 353146990e-09 1s 1s 353152390e-09 0s 0s 353154350e-09 0s 0s 353157230e-09 1s 1s 353162630e-09 0s 0s 353164630e-09 0s 0s 353167470e-09 1s 1s 353172870e-09 0s 0s 353174910e-09 0s 0s 353177710e-09 1s 1s 353183110e-09 0s 0s 353185190e-09 0s 0s 353187950e-09 1s 1s 353193350e-09 0s 0s 353195470e-09 0s 0s 353198190e-09 1s 1s 353203590e-09 0s 0s 353205750e-09 0s 0s 353208430e-09 1s 1s 353213830e-09 0s 0s 353216030e-09 0s 0s 353218670e-09 1s 1s 353224070e-09 0s 0s 353226310e-09 0s 0s 353228910e-09 1s 1s 353234310e-09 0s 0s 353236590e-09 0s 0s 353239150e-09 1s 1s 353244550e-09 0s 0s 353246870e-09 0s 0s 353249390e-09 1s 1s 353254790e-09 0s 0s 353257150e-09 0s 0s 353259630e-09 1s 1s 353265030e-09 0s 0s 353267430e-09 0s 0s 353269870e-09 1s 1s 353275270e-09 0s 0s 353277710e-09 0s 0s 353280110e-09 1s 1s 353285510e-09 0s 0s 353287990e-09 0s 0s 353290350e-09 1s 1s 353295750e-09 0s 0s 353298270e-09 0s 0s 353300590e-09 1s 1s 353305990e-09 0s 0s 353308550e-09 0s 0s 353310830e-09 1s 1s 353316230e-09 0s 0s 353318830e-09 0s 0s 353321070e-09 1s 1s 353326470e-09 0s 0s 353329110e-09 0s 0s 353331310e-09 1s 1s 353336710e-09 0s 0s 353339390e-09 0s 0s 353341550e-09 1s 1s 353346950e-09 0s 0s 353349670e-09 0s 0s 353351790e-09 1s 1s 353357190e-09 0s 0s 353359950e-09 0s 0s 353362030e-09 1s 1s 353367430e-09 0s 0s 353370230e-09 0s 0s 353372270e-09 1s 1s 353377670e-09 0s 0s 353380510e-09 0s 0s 353382510e-09 1s 1s 353387910e-09 0s 0s 353390790e-09 0s 0s 353392750e-09 1s 1s 353398150e-09 0s 0s 353401070e-09 0s 0s 353402990e-09 1s 1s 353408390e-09 0s 0s 353411350e-09 0s 0s 353413230e-09 1s 1s 353418630e-09 0s 0s 353421630e-09 0s 0s 353423470e-09 1s 1s 353428870e-09 0s 0s 353431910e-09 0s 0s 353433710e-09 1s 1s 353439110e-09 0s 0s 353442190e-09 0s 0s 353443950e-09 1s 1s 353449350e-09 0s 0s 353452470e-09 0s 0s 353454190e-09 1s 1s 353459590e-09 0s 0s 353462750e-09 0s 0s 353464430e-09 1s 1s 353469830e-09 0s 0s 353473030e-09 0s 0s 353474670e-09 1s 1s 353480070e-09 0s 0s 353483310e-09 0s 0s 353484910e-09 1s 1s 353490310e-09 0s 0s 353493590e-09 0s 0s 353495150e-09 1s 1s 353500550e-09 0s 0s 353503870e-09 0s 0s 353505390e-09 1s 1s 353510790e-09 0s 0s 353514150e-09 0s 0s 353515630e-09 1s 1s 353521030e-09 0s 0s 353524430e-09 0s 0s 353525870e-09 1s 1s 353531270e-09 0s 0s 353534710e-09 0s 0s 353536110e-09 1s 1s 353541510e-09 0s 0s 353544990e-09 0s 0s 353546350e-09 1s 1s 353551750e-09 0s 0s 353555270e-09 0s 0s 353556590e-09 1s 1s 353561990e-09 0s 0s 353565550e-09 0s 0s 353566830e-09 1s 1s 353572230e-09 0s 0s 353575830e-09 0s 0s 353577070e-09 1s 1s 353582470e-09 0s 0s 353586110e-09 0s 0s 353587310e-09 1s 1s 353592710e-09 0s 0s 353596390e-09 0s 0s 353597550e-09 1s 1s 353602950e-09 0s 0s 353606670e-09 0s 0s 353607790e-09 1s 1s 353613190e-09 0s 0s 353616950e-09 0s 0s 353618030e-09 1s 1s 353623430e-09 0s 0s 353627230e-09 0s 0s 353628270e-09 1s 1s 353633670e-09 0s 0s 353637510e-09 0s 0s 353638510e-09 1s 1s 353643910e-09 0s 0s 353647790e-09 0s 0s 353648750e-09 1s 1s 353654150e-09 0s 0s 353658070e-09 0s 0s 353658990e-09 1s 1s 353664390e-09 0s 0s 353668350e-09 0s 0s 353669230e-09 1s 1s 353674630e-09 0s 0s 353678630e-09 0s 0s 353679470e-09 1s 1s 353684870e-09 0s 0s 353688910e-09 0s 0s 353689710e-09 1s 1s 353695110e-09 0s 0s 353699190e-09 0s 0s 353699950e-09 1s 1s 353705350e-09 0s 0s 353709470e-09 0s 0s 353710190e-09 1s 1s 353715590e-09 0s 0s 353719750e-09 0s 0s 353720430e-09 1s 1s 353725830e-09 0s 0s 353730030e-09 0s 0s 353730670e-09 1s 1s 353736070e-09 0s 0s 353740310e-09 0s 0s 353740910e-09 1s 1s 353746310e-09 0s 0s 353750590e-09 0s 0s 353751150e-09 1s 1s 353756550e-09 0s 0s 353760870e-09 0s 0s 353761390e-09 1s 1s 353766790e-09 0s 0s 353771150e-09 0s 0s 353771630e-09 1s 1s 353777030e-09 0s 0s 353781430e-09 0s 0s 353781870e-09 1s 1s 353787270e-09 0s 0s 353791710e-09 0s 0s 353792110e-09 1s 1s 353797510e-09 0s 0s 353801990e-09 0s 0s 353802350e-09 1s 1s 353807750e-09 0s 0s 353812270e-09 0s 0s 353812590e-09 1s 1s 353817990e-09 0s 0s 353822550e-09 0s 0s 353822830e-09 1s 1s 353828230e-09 0s 0s 353832830e-09 0s 0s 353833070e-09 1s 1s 353838470e-09 0s 0s 353843110e-09 0s 0s 353843310e-09 1s 1s 353848710e-09 0s 0s 353853390e-09 0s 0s 353853550e-09 1s 1s 353858950e-09 0s 0s 353863670e-09 0s 0s 353863790e-09 1s 1s 353869190e-09 0s 0s 353873950e-09 0s 0s 353874030e-09 1s 1s 353879430e-09 0s 0s 353884230e-09 0s 0s 353884270e-09 1s 1s 353889670e-09 0s 0s 353894510e-09 1s 1s 353894550e-09 1s 1s 353899950e-09 0s 0s 353904750e-09 1s 1s 353904830e-09 1s 1s 353910190e-09 0s 0s 353914990e-09 1s 1s 353915110e-09 1s 1s 353920430e-09 0s 0s 353925230e-09 1s 1s 353925390e-09 1s 1s 353930670e-09 0s 0s 353935470e-09 1s 1s 353935670e-09 1s 1s 353940910e-09 0s 0s 353945710e-09 1s 1s 353945950e-09 1s 1s 353951150e-09 0s 0s 353955950e-09 1s 1s 353956230e-09 1s 1s 353961390e-09 0s 0s 353966190e-09 1s 1s 353966510e-09 1s 1s 353971630e-09 0s 0s 353976430e-09 1s 1s 353976790e-09 1s 1s 353981870e-09 0s 0s 353986670e-09 1s 1s 353987070e-09 1s 1s 353992110e-09 0s 0s 353996910e-09 1s 1s 353997350e-09 1s 1s 354002350e-09 0s 0s 354007150e-09 1s 1s 354007630e-09 1s 1s 354012590e-09 0s 0s 354017390e-09 1s 1s 354017910e-09 1s 1s 354022830e-09 0s 0s 354027630e-09 1s 1s 354028190e-09 1s 1s 354033070e-09 0s 0s 354037870e-09 1s 1s 354038470e-09 1s 1s 354043310e-09 0s 0s 354048110e-09 1s 1s 354048750e-09 1s 1s 354053550e-09 0s 0s 354058350e-09 1s 1s 354059030e-09 1s 1s 354063790e-09 0s 0s 354068590e-09 1s 1s 354069310e-09 1s 1s 354074030e-09 0s 0s 354078830e-09 1s 1s 354079590e-09 1s 1s 354084270e-09 0s 0s 354089070e-09 1s 1s 354089870e-09 1s 1s 354094510e-09 0s 0s 354099310e-09 1s 1s 354100150e-09 1s 1s 354104750e-09 0s 0s 354109550e-09 1s 1s 354110430e-09 1s 1s 354114990e-09 0s 0s 354119790e-09 1s 1s 354120710e-09 1s 1s 354125230e-09 0s 0s 354130030e-09 1s 1s 354130990e-09 1s 1s 354135470e-09 0s 0s 354140270e-09 1s 1s 354141270e-09 1s 1s 354145710e-09 0s 0s 354150510e-09 1s 1s 354151550e-09 1s 1s 354155950e-09 0s 0s 354160750e-09 1s 1s 354161830e-09 1s 1s 354166190e-09 0s 0s 354170990e-09 1s 1s 354172110e-09 1s 1s 354176430e-09 0s 0s 354181230e-09 1s 1s 354182390e-09 1s 1s 354186670e-09 0s 0s 354191470e-09 1s 1s 354192670e-09 1s 1s 354196910e-09 0s 0s 354201710e-09 1s 1s 354202950e-09 1s 1s 354207150e-09 0s 0s 354211950e-09 1s 1s 354213230e-09 1s 1s 354217390e-09 0s 0s 354222190e-09 1s 1s 354223510e-09 1s 1s 354227630e-09 0s 0s 354232430e-09 1s 1s 354233790e-09 1s 1s 354237870e-09 0s 0s 354242670e-09 1s 1s 354244070e-09 1s 1s 354248110e-09 0s 0s 354252910e-09 1s 1s 354254350e-09 1s 1s 354258350e-09 0s 0s 354263150e-09 1s 1s 354264630e-09 1s 1s 354268590e-09 0s 0s 354273390e-09 1s 1s 354274910e-09 1s 1s 354278830e-09 0s 0s 354283630e-09 1s 1s 354285190e-09 1s 1s 354289070e-09 0s 0s 354293870e-09 1s 1s 354295470e-09 1s 1s 354299310e-09 0s 0s 354304110e-09 1s 1s 354305750e-09 1s 1s 354309550e-09 0s 0s 354314350e-09 1s 1s 354316030e-09 1s 1s 354319790e-09 0s 0s 354324590e-09 1s 1s 354326310e-09 1s 1s 354330030e-09 0s 0s 354334830e-09 1s 1s 354336590e-09 1s 1s 354340270e-09 0s 0s 354345070e-09 1s 1s 354346870e-09 1s 1s 354350510e-09 0s 0s 354355310e-09 1s 1s 354357150e-09 1s 1s 354360750e-09 0s 0s 354365550e-09 1s 1s 354367430e-09 1s 1s 354370990e-09 0s 0s 354375790e-09 1s 1s 354377710e-09 1s 1s 354381230e-09 0s 0s 354386030e-09 1s 1s 354387990e-09 1s 1s 354391470e-09 0s 0s 354396270e-09 1s 1s 354398270e-09 1s 1s 354401710e-09 0s 0s 354406510e-09 1s 1s 354408550e-09 1s 1s 354411950e-09 0s 0s 354416750e-09 1s 1s 354418830e-09 1s 1s 354422190e-09 0s 0s 354426990e-09 1s 1s 354429110e-09 1s 1s 354432430e-09 0s 0s 354437230e-09 1s 1s 354439390e-09 1s 1s 354442670e-09 0s 0s 354447470e-09 1s 1s 354449670e-09 1s 1s 354452910e-09 0s 0s 354457710e-09 1s 1s 354459950e-09 1s 1s 354463150e-09 0s 0s 354467950e-09 1s 1s 354470230e-09 1s 1s 354473390e-09 0s 0s 354478190e-09 1s 1s 354480510e-09 1s 1s 354483630e-09 0s 0s 354488430e-09 1s 1s 354490790e-09 1s 1s 354493870e-09 0s 0s 354498670e-09 1s 1s 354501070e-09 1s 1s 354504110e-09 0s 0s 354508910e-09 1s 1s 354511350e-09 1s 1s 354514350e-09 0s 0s 354519150e-09 1s 1s 354521630e-09 1s 1s 354524590e-09 0s 0s 354529390e-09 1s 1s 354531910e-09 1s 1s 354534830e-09 0s 0s 354539630e-09 1s 1s 354542190e-09 1s 1s 354545070e-09 0s 0s 354549870e-09 1s 1s 354552470e-09 1s 1s 354555310e-09 0s 0s 354560110e-09 1s 1s 354562750e-09 1s 1s 354565550e-09 0s 0s 354570350e-09 1s 1s 354573030e-09 1s 1s 354575790e-09 0s 0s 354580590e-09 1s 1s 354583310e-09 1s 1s 354586030e-09 0s 0s 354590830e-09 1s 1s 354593590e-09 1s 1s 354596270e-09 0s 0s 354601070e-09 1s 1s 354603870e-09 1s 1s 354606510e-09 0s 0s 354611310e-09 1s 1s 354614150e-09 1s 1s 354616750e-09 0s 0s 354621550e-09 1s 1s 354624430e-09 1s 1s 354626990e-09 0s 0s 354631790e-09 1s 1s 354634710e-09 1s 1s 354637230e-09 0s 0s 354642030e-09 1s 1s 354644990e-09 1s 1s 354647470e-09 0s 0s 354652270e-09 1s 1s 354655270e-09 1s 1s 354657710e-09 0s 0s 354662510e-09 1s 1s 354665550e-09 1s 1s 354667950e-09 0s 0s 354672750e-09 1s 1s 354675830e-09 1s 1s 354678190e-09 0s 0s 354682990e-09 1s 1s 354686110e-09 1s 1s 354688430e-09 0s 0s 354693230e-09 1s 1s 354696390e-09 1s 1s 354698670e-09 0s 0s 354703470e-09 1s 1s 354706670e-09 1s 1s 354708910e-09 0s 0s 354713710e-09 1s 1s 354716950e-09 1s 1s 354719150e-09 0s 0s 354723950e-09 1s 1s 354727230e-09 1s 1s 354729390e-09 0s 0s 354734190e-09 1s 1s 354737510e-09 1s 1s 354739630e-09 0s 0s 354744430e-09 1s 1s 354747790e-09 1s 1s 354749870e-09 0s 0s 354754670e-09 1s 1s 354758070e-09 1s 1s 354760110e-09 0s 0s 354764910e-09 1s 1s 354768350e-09 1s 1s 354770350e-09 0s 0s 354775150e-09 1s 1s 354778630e-09 1s 1s 354780590e-09 0s 0s 354785390e-09 1s 1s 354788910e-09 1s 1s 354790830e-09 0s 0s 354795630e-09 1s 1s 354799190e-09 1s 1s 354801070e-09 0s 0s 354805870e-09 1s 1s 354809470e-09 1s 1s 354811310e-09 0s 0s 354816110e-09 1s 1s 354819750e-09 1s 1s 354821550e-09 0s 0s 354826350e-09 1s 1s 354830030e-09 1s 1s 354831790e-09 0s 0s 354836590e-09 1s 1s 354840310e-09 1s 1s 354842030e-09 0s 0s 354846830e-09 1s 1s 354850590e-09 1s 1s 354852270e-09 0s 0s 354857070e-09 1s 1s 354860870e-09 1s 1s 354862510e-09 0s 0s 354867310e-09 1s 1s 354871150e-09 1s 1s 354872750e-09 0s 0s 354877550e-09 1s 1s 354881430e-09 1s 1s 354882990e-09 0s 0s 354887790e-09 1s 1s 354891710e-09 1s 1s 354893230e-09 0s 0s 354898030e-09 1s 1s 354901990e-09 1s 1s 354903470e-09 0s 0s 354908270e-09 1s 1s 354912270e-09 1s 1s 354913710e-09 0s 0s 354918510e-09 1s 1s 354922550e-09 1s 1s 354923950e-09 0s 0s 354928750e-09 1s 1s 354932830e-09 1s 1s 354934190e-09 0s 0s 354938990e-09 1s 1s 354943110e-09 1s 1s 354944430e-09 0s 0s 354949230e-09 1s 1s 354953390e-09 1s 1s 354954670e-09 0s 0s 354959470e-09 1s 1s 354963670e-09 1s 1s 354964910e-09 0s 0s 354969710e-09 1s 1s 354973950e-09 1s 1s 354975150e-09 0s 0s 354979950e-09 1s 1s 354984230e-09 1s 1s 354985390e-09 0s 0s 354990190e-09 1s 1s 354994510e-09 1s 1s 354995630e-09 0s 0s 355000430e-09 1s 1s 355004790e-09 1s 1s 355005870e-09 0s 0s 355010670e-09 1s 1s 355015070e-09 1s 1s 355016110e-09 0s 0s 355020910e-09 1s 1s 355025350e-09 1s 1s 355026350e-09 0s 0s 355031150e-09 1s 1s 355035630e-09 1s 1s 355036590e-09 0s 0s 355041390e-09 1s 1s 355045910e-09 1s 1s 355046830e-09 0s 0s 355051630e-09 1s 1s 355056190e-09 1s 1s 355057070e-09 0s 0s 355061870e-09 1s 1s 355066470e-09 1s 1s 355067310e-09 0s 0s 355072110e-09 1s 1s 355076750e-09 1s 1s 355077550e-09 0s 0s 355082350e-09 1s 1s 355087030e-09 1s 1s 355087790e-09 0s 0s 355092590e-09 1s 1s 355097310e-09 1s 1s 355098030e-09 0s 0s 355102830e-09 1s 1s 355107590e-09 1s 1s 355108270e-09 0s 0s 355113070e-09 1s 1s 355117870e-09 1s 1s 355118510e-09 0s 0s 355123310e-09 1s 1s 355128150e-09 1s 1s 355128750e-09 0s 0s 355133550e-09 1s 1s 355138430e-09 1s 1s 355138990e-09 0s 0s 355143790e-09 1s 1s 355148710e-09 1s 1s 355149230e-09 0s 0s 355154030e-09 1s 1s 355158990e-09 1s 1s 355159470e-09 0s 0s 355164270e-09 1s 1s 355169270e-09 1s 1s 355169710e-09 0s 0s 355174510e-09 1s 1s 355179550e-09 1s 1s 355179950e-09 0s 0s 355184750e-09 1s 1s 355189830e-09 1s 1s 355190190e-09 0s 0s 355194990e-09 1s 1s 355200110e-09 1s 1s 355200430e-09 0s 0s 355205230e-09 1s 1s 355210390e-09 1s 1s 355210670e-09 0s 0s 355215470e-09 1s 1s 355220670e-09 1s 1s 355220910e-09 0s 0s 355225710e-09 1s 1s 355230950e-09 1s 1s 355231150e-09 0s 0s 355235950e-09 1s 1s 355241230e-09 1s 1s 355241390e-09 0s 0s 355246190e-09 1s 1s 355251510e-09 1s 1s 355251630e-09 0s 0s 355256430e-09 1s 1s 355261790e-09 1s 1s 355261870e-09 0s 0s 355266670e-09 1s 1s 355272070e-09 1s 1s 355272110e-09 0s 0s 355276910e-09 1s 1s 355282350e-09 0s 0s 355287150e-09 1s 1s 355292590e-09 0s 0s 355292630e-09 0s 0s 355297390e-09 1s 1s 355302830e-09 0s 0s 355302910e-09 0s 0s 355307630e-09 1s 1s 355313070e-09 0s 0s 355313190e-09 0s 0s 355317870e-09 1s 1s 355323310e-09 0s 0s 355323470e-09 0s 0s 355328110e-09 1s 1s 355333550e-09 0s 0s 355333750e-09 0s 0s 355338350e-09 1s 1s 355343790e-09 0s 0s 355344030e-09 0s 0s 355348590e-09 1s 1s 355354030e-09 0s 0s 355354310e-09 0s 0s 355358830e-09 1s 1s 355364270e-09 0s 0s 355364590e-09 0s 0s 355369070e-09 1s 1s 355374510e-09 0s 0s 355374870e-09 0s 0s 355379310e-09 1s 1s 355384750e-09 0s 0s 355385150e-09 0s 0s 355389550e-09 1s 1s 355394990e-09 0s 0s 355395430e-09 0s 0s 355399790e-09 1s 1s 355405230e-09 0s 0s 355405710e-09 0s 0s 355410030e-09 1s 1s 355415470e-09 0s 0s 355415990e-09 0s 0s 355420270e-09 1s 1s 355425710e-09 0s 0s 355426270e-09 0s 0s 355430510e-09 1s 1s 355435950e-09 0s 0s 355436550e-09 0s 0s 355440750e-09 1s 1s 355446190e-09 0s 0s 355446830e-09 0s 0s 355450990e-09 1s 1s 355456430e-09 0s 0s 355457110e-09 0s 0s 355461230e-09 1s 1s 355466670e-09 0s 0s 355467390e-09 0s 0s 355471470e-09 1s 1s 355476910e-09 0s 0s 355477670e-09 0s 0s 355481710e-09 1s 1s 355487150e-09 0s 0s 355487950e-09 0s 0s 355491950e-09 1s 1s 355497390e-09 0s 0s 355498230e-09 0s 0s 355502190e-09 1s 1s 355507630e-09 0s 0s 355508510e-09 0s 0s 355512430e-09 1s 1s 355517870e-09 0s 0s 355518790e-09 0s 0s 355522670e-09 1s 1s 355528110e-09 0s 0s 355529070e-09 0s 0s 355532910e-09 1s 1s 355538350e-09 0s 0s 355539350e-09 0s 0s 355543150e-09 1s 1s 355548590e-09 0s 0s 355549630e-09 0s 0s 355553390e-09 1s 1s 355558830e-09 0s 0s 355559910e-09 0s 0s 355563630e-09 1s 1s 355569070e-09 0s 0s 355570190e-09 0s 0s 355573870e-09 1s 1s 355579310e-09 0s 0s 355580470e-09 0s 0s 355584110e-09 1s 1s 355589550e-09 0s 0s 355590750e-09 0s 0s 355594350e-09 1s 1s 355599790e-09 0s 0s 355601030e-09 0s 0s 355604590e-09 1s 1s 355610030e-09 0s 0s 355611310e-09 0s 0s 355614830e-09 1s 1s 355620270e-09 0s 0s 355621590e-09 0s 0s 355625070e-09 1s 1s 355630510e-09 0s 0s 355631870e-09 0s 0s 355635310e-09 1s 1s 355640750e-09 0s 0s 355642150e-09 0s 0s 355645550e-09 1s 1s 355650990e-09 0s 0s 355652430e-09 0s 0s 355655790e-09 1s 1s 355661230e-09 0s 0s 355662710e-09 0s 0s 355666030e-09 1s 1s 355671470e-09 0s 0s 355672990e-09 0s 0s 355676270e-09 1s 1s 355681710e-09 0s 0s 355683270e-09 0s 0s 355686510e-09 1s 1s 355691950e-09 0s 0s 355693550e-09 0s 0s 355696750e-09 1s 1s 355702190e-09 0s 0s 355703830e-09 0s 0s 355706990e-09 1s 1s 355712430e-09 0s 0s 355714110e-09 0s 0s 355717230e-09 1s 1s 355722670e-09 0s 0s 355724390e-09 0s 0s 355727470e-09 1s 1s 355732910e-09 0s 0s 355734670e-09 0s 0s 355737710e-09 1s 1s 355743150e-09 0s 0s 355744950e-09 0s 0s 355747950e-09 1s 1s 355753390e-09 0s 0s 355755230e-09 0s 0s 355758190e-09 1s 1s 355763630e-09 0s 0s 355765510e-09 0s 0s 355768430e-09 1s 1s 355773870e-09 0s 0s 355775790e-09 0s 0s 355778670e-09 1s 1s 355784110e-09 0s 0s 355786070e-09 0s 0s 355788910e-09 1s 1s 355794350e-09 0s 0s 355796350e-09 0s 0s 355799150e-09 1s 1s 355804590e-09 0s 0s 355806630e-09 0s 0s 355809390e-09 1s 1s 355814830e-09 0s 0s 355816910e-09 0s 0s 355819630e-09 1s 1s 355825070e-09 0s 0s 355827190e-09 0s 0s 355829870e-09 1s 1s 355835310e-09 0s 0s 355837470e-09 0s 0s 355840110e-09 1s 1s 355845550e-09 0s 0s 355847750e-09 0s 0s 355850350e-09 1s 1s 355855790e-09 0s 0s 355858030e-09 0s 0s 355860590e-09 1s 1s 355866030e-09 0s 0s 355868310e-09 0s 0s 355870830e-09 1s 1s 355876270e-09 0s 0s 355878590e-09 0s 0s 355881070e-09 1s 1s 355886510e-09 0s 0s 355888870e-09 0s 0s 355891310e-09 1s 1s 355896750e-09 0s 0s 355899150e-09 0s 0s 355901550e-09 1s 1s 355906990e-09 0s 0s 355909430e-09 0s 0s 355911790e-09 1s 1s 355917230e-09 0s 0s 355919710e-09 0s 0s 355922030e-09 1s 1s 355927470e-09 0s 0s 355929990e-09 0s 0s 355932270e-09 1s 1s 355937710e-09 0s 0s 355940270e-09 0s 0s 355942510e-09 1s 1s 355947950e-09 0s 0s 355950550e-09 0s 0s 355952750e-09 1s 1s 355958190e-09 0s 0s 355960830e-09 0s 0s 355962990e-09 1s 1s 355968430e-09 0s 0s 355971110e-09 0s 0s 355973230e-09 1s 1s 355978670e-09 0s 0s 355981390e-09 0s 0s 355983470e-09 1s 1s 355988910e-09 0s 0s 355991670e-09 0s 0s 355993710e-09 1s 1s 355999150e-09 0s 0s 356001950e-09 0s 0s 356003950e-09 1s 1s 356009390e-09 0s 0s 356012230e-09 0s 0s 356014190e-09 1s 1s 356019630e-09 0s 0s 356022510e-09 0s 0s 356024430e-09 1s 1s 356029870e-09 0s 0s 356032790e-09 0s 0s 356034670e-09 1s 1s 356040110e-09 0s 0s 356043070e-09 0s 0s 356044910e-09 1s 1s 356050350e-09 0s 0s 356053350e-09 0s 0s 356055150e-09 1s 1s 356060590e-09 0s 0s 356063630e-09 0s 0s 356065390e-09 1s 1s 356070830e-09 0s 0s 356073910e-09 0s 0s 356075630e-09 1s 1s 356081070e-09 0s 0s 356084190e-09 0s 0s 356085870e-09 1s 1s 356091310e-09 0s 0s 356094470e-09 0s 0s 356096110e-09 1s 1s 356101550e-09 0s 0s 356104750e-09 0s 0s 356106350e-09 1s 1s 356111790e-09 0s 0s 356115030e-09 0s 0s 356116590e-09 1s 1s 356122030e-09 0s 0s 356125310e-09 0s 0s 356126830e-09 1s 1s 356132270e-09 0s 0s 356135590e-09 0s 0s 356137070e-09 1s 1s 356142510e-09 0s 0s 356145870e-09 0s 0s 356147310e-09 1s 1s 356152750e-09 0s 0s 356156150e-09 0s 0s 356157550e-09 1s 1s 356162990e-09 0s 0s 356166430e-09 0s 0s 356167790e-09 1s 1s 356173230e-09 0s 0s 356176710e-09 0s 0s 356178030e-09 1s 1s 356183470e-09 0s 0s 356186990e-09 0s 0s 356188270e-09 1s 1s 356193710e-09 0s 0s 356197270e-09 0s 0s 356198510e-09 1s 1s 356203950e-09 0s 0s 356207550e-09 0s 0s 356208750e-09 1s 1s 356214190e-09 0s 0s 356217830e-09 0s 0s 356218990e-09 1s 1s 356224430e-09 0s 0s 356228110e-09 0s 0s 356229230e-09 1s 1s 356234670e-09 0s 0s 356238390e-09 0s 0s 356239470e-09 1s 1s 356244910e-09 0s 0s 356248670e-09 0s 0s 356249710e-09 1s 1s 356255150e-09 0s 0s 356258950e-09 0s 0s 356259950e-09 1s 1s 356265390e-09 0s 0s 356269230e-09 0s 0s 356270190e-09 1s 1s 356275630e-09 0s 0s 356279510e-09 0s 0s 356280430e-09 1s 1s 356285870e-09 0s 0s 356289790e-09 0s 0s 356290670e-09 1s 1s 356296110e-09 0s 0s 356300070e-09 0s 0s 356300910e-09 1s 1s 356306350e-09 0s 0s 356310350e-09 0s 0s 356311150e-09 1s 1s 356316590e-09 0s 0s 356320630e-09 0s 0s 356321390e-09 1s 1s 356326830e-09 0s 0s 356330910e-09 0s 0s 356331630e-09 1s 1s 356337070e-09 0s 0s 356341190e-09 0s 0s 356341870e-09 1s 1s 356347310e-09 0s 0s 356351470e-09 0s 0s 356352110e-09 1s 1s 356357550e-09 0s 0s 356361750e-09 0s 0s 356362350e-09 1s 1s 356367790e-09 0s 0s 356372030e-09 0s 0s 356372590e-09 1s 1s 356378030e-09 0s 0s 356382310e-09 0s 0s 356382830e-09 1s 1s 356388270e-09 0s 0s 356392590e-09 0s 0s 356393070e-09 1s 1s 356398510e-09 0s 0s 356402870e-09 0s 0s 356403310e-09 1s 1s 356408750e-09 0s 0s 356413150e-09 0s 0s 356413550e-09 1s 1s 356418990e-09 0s 0s 356423430e-09 0s 0s 356423790e-09 1s 1s 356429230e-09 0s 0s 356433710e-09 0s 0s 356434030e-09 1s 1s 356439470e-09 0s 0s 356443990e-09 0s 0s 356444270e-09 1s 1s 356449710e-09 0s 0s 356454270e-09 0s 0s 356454510e-09 1s 1s 356459950e-09 0s 0s 356464550e-09 0s 0s 356464750e-09 1s 1s 356470190e-09 0s 0s 356474830e-09 0s 0s 356474990e-09 1s 1s 356480430e-09 0s 0s 356485110e-09 0s 0s 356485230e-09 1s 1s 356490670e-09 0s 0s 356495390e-09 0s 0s 356495470e-09 1s 1s 356500910e-09 0s 0s 356505670e-09 0s 0s 356505710e-09 1s 1s 356511150e-09 0s 0s 356515950e-09 1s 1s 356515990e-09 1s 1s 356521430e-09 0s 0s 356526190e-09 1s 1s 356526270e-09 1s 1s 356531670e-09 0s 0s 356536430e-09 1s 1s 356536550e-09 1s 1s 356541910e-09 0s 0s 356546670e-09 1s 1s 356546830e-09 1s 1s 356552150e-09 0s 0s 356556910e-09 1s 1s 356557110e-09 1s 1s 356562390e-09 0s 0s 356567150e-09 1s 1s 356567390e-09 1s 1s 356572630e-09 0s 0s 356577390e-09 1s 1s 356577670e-09 1s 1s 356582870e-09 0s 0s 356587630e-09 1s 1s 356587950e-09 1s 1s 356593110e-09 0s 0s 356597870e-09 1s 1s 356598230e-09 1s 1s 356603350e-09 0s 0s 356608110e-09 1s 1s 356608510e-09 1s 1s 356613590e-09 0s 0s 356618350e-09 1s 1s 356618790e-09 1s 1s 356623830e-09 0s 0s 356628590e-09 1s 1s 356629070e-09 1s 1s 356634070e-09 0s 0s 356638830e-09 1s 1s 356639350e-09 1s 1s 356644310e-09 0s 0s 356649070e-09 1s 1s 356649630e-09 1s 1s 356654550e-09 0s 0s 356659310e-09 1s 1s 356659910e-09 1s 1s 356664790e-09 0s 0s 356669550e-09 1s 1s 356670190e-09 1s 1s 356675030e-09 0s 0s 356679790e-09 1s 1s 356680470e-09 1s 1s 356685270e-09 0s 0s 356690030e-09 1s 1s 356690750e-09 1s 1s 356695510e-09 0s 0s 356700270e-09 1s 1s 356701030e-09 1s 1s 356705750e-09 0s 0s 356710510e-09 1s 1s 356711310e-09 1s 1s 356715990e-09 0s 0s 356720750e-09 1s 1s 356721590e-09 1s 1s 356726230e-09 0s 0s 356730990e-09 1s 1s 356731870e-09 1s 1s 356736470e-09 0s 0s 356741230e-09 1s 1s 356742150e-09 1s 1s 356746710e-09 0s 0s 356751470e-09 1s 1s 356752430e-09 1s 1s 356756950e-09 0s 0s 356761710e-09 1s 1s 356762710e-09 1s 1s 356767190e-09 0s 0s 356771950e-09 1s 1s 356772990e-09 1s 1s 356777430e-09 0s 0s 356782190e-09 1s 1s 356783270e-09 1s 1s 356787670e-09 0s 0s 356792430e-09 1s 1s 356793550e-09 1s 1s 356797910e-09 0s 0s 356802670e-09 1s 1s 356803830e-09 1s 1s 356808150e-09 0s 0s 356812910e-09 1s 1s 356814110e-09 1s 1s 356818390e-09 0s 0s 356823150e-09 1s 1s 356824390e-09 1s 1s 356828630e-09 0s 0s 356833390e-09 1s 1s 356834670e-09 1s 1s 356838870e-09 0s 0s 356843630e-09 1s 1s 356844950e-09 1s 1s 356849110e-09 0s 0s 356853870e-09 1s 1s 356855230e-09 1s 1s 356859350e-09 0s 0s 356864110e-09 1s 1s 356865510e-09 1s 1s 356869590e-09 0s 0s 356874350e-09 1s 1s 356875790e-09 1s 1s 356879830e-09 0s 0s 356884590e-09 1s 1s 356886070e-09 1s 1s 356890070e-09 0s 0s 356894830e-09 1s 1s 356896350e-09 1s 1s 356900310e-09 0s 0s 356905070e-09 1s 1s 356906630e-09 1s 1s 356910550e-09 0s 0s 356915310e-09 1s 1s 356916910e-09 1s 1s 356920790e-09 0s 0s 356925550e-09 1s 1s 356927190e-09 1s 1s 356931030e-09 0s 0s 356935790e-09 1s 1s 356937470e-09 1s 1s 356941270e-09 0s 0s 356946030e-09 1s 1s 356947750e-09 1s 1s 356951510e-09 0s 0s 356956270e-09 1s 1s 356958030e-09 1s 1s 356961750e-09 0s 0s 356966510e-09 1s 1s 356968310e-09 1s 1s 356971990e-09 0s 0s 356976750e-09 1s 1s 356978590e-09 1s 1s 356982230e-09 0s 0s 356986990e-09 1s 1s 356988870e-09 1s 1s 356992470e-09 0s 0s 356997230e-09 1s 1s 356999150e-09 1s 1s 357002710e-09 0s 0s 357007470e-09 1s 1s 357009430e-09 1s 1s 357012950e-09 0s 0s 357017710e-09 1s 1s 357019710e-09 1s 1s 357023190e-09 0s 0s 357027950e-09 1s 1s 357029990e-09 1s 1s 357033430e-09 0s 0s 357038190e-09 1s 1s 357040270e-09 1s 1s 357043670e-09 0s 0s 357048430e-09 1s 1s 357050550e-09 1s 1s 357053910e-09 0s 0s 357058670e-09 1s 1s 357060830e-09 1s 1s 357064150e-09 0s 0s 357068910e-09 1s 1s 357071110e-09 1s 1s 357074390e-09 0s 0s 357079150e-09 1s 1s 357081390e-09 1s 1s 357084630e-09 0s 0s 357089390e-09 1s 1s 357091670e-09 1s 1s 357094870e-09 0s 0s 357099630e-09 1s 1s 357101950e-09 1s 1s 357105110e-09 0s 0s 357109870e-09 1s 1s 357112230e-09 1s 1s 357115350e-09 0s 0s 357120110e-09 1s 1s 357122510e-09 1s 1s 357125590e-09 0s 0s 357130350e-09 1s 1s 357132790e-09 1s 1s 357135830e-09 0s 0s 357140590e-09 1s 1s 357143070e-09 1s 1s 357146070e-09 0s 0s 357150830e-09 1s 1s 357153350e-09 1s 1s 357156310e-09 0s 0s 357161070e-09 1s 1s 357163630e-09 1s 1s 357166550e-09 0s 0s 357171310e-09 1s 1s 357173910e-09 1s 1s 357176790e-09 0s 0s 357181550e-09 1s 1s 357184190e-09 1s 1s 357187030e-09 0s 0s 357191790e-09 1s 1s 357194470e-09 1s 1s 357197270e-09 0s 0s 357202030e-09 1s 1s 357204750e-09 1s 1s 357207510e-09 0s 0s 357212270e-09 1s 1s 357215030e-09 1s 1s 357217750e-09 0s 0s 357222510e-09 1s 1s 357225310e-09 1s 1s 357227990e-09 0s 0s 357232750e-09 1s 1s 357235590e-09 1s 1s 357238230e-09 0s 0s 357242990e-09 1s 1s 357245870e-09 1s 1s 357248470e-09 0s 0s 357253230e-09 1s 1s 357256150e-09 1s 1s 357258710e-09 0s 0s 357263470e-09 1s 1s 357266430e-09 1s 1s 357268950e-09 0s 0s 357273710e-09 1s 1s 357276710e-09 1s 1s 357279190e-09 0s 0s 357283950e-09 1s 1s 357286990e-09 1s 1s 357289430e-09 0s 0s 357294190e-09 1s 1s 357297270e-09 1s 1s 357299670e-09 0s 0s 357304430e-09 1s 1s 357307550e-09 1s 1s 357309910e-09 0s 0s 357314670e-09 1s 1s 357317830e-09 1s 1s 357320150e-09 0s 0s 357324910e-09 1s 1s 357328110e-09 1s 1s 357330390e-09 0s 0s 357335150e-09 1s 1s 357338390e-09 1s 1s 357340630e-09 0s 0s 357345390e-09 1s 1s 357348670e-09 1s 1s 357350870e-09 0s 0s 357355630e-09 1s 1s 357358950e-09 1s 1s 357361110e-09 0s 0s 357365870e-09 1s 1s 357369230e-09 1s 1s 357371350e-09 0s 0s 357376110e-09 1s 1s 357379510e-09 1s 1s 357381590e-09 0s 0s 357386350e-09 1s 1s 357389790e-09 1s 1s 357391830e-09 0s 0s 357396590e-09 1s 1s 357400070e-09 1s 1s 357402070e-09 0s 0s 357406830e-09 1s 1s 357410350e-09 1s 1s 357412310e-09 0s 0s 357417070e-09 1s 1s 357420630e-09 1s 1s 357422550e-09 0s 0s 357427310e-09 1s 1s 357430910e-09 1s 1s 357432790e-09 0s 0s 357437550e-09 1s 1s 357441190e-09 1s 1s 357443030e-09 0s 0s 357447790e-09 1s 1s 357451470e-09 1s 1s 357453270e-09 0s 0s 357458030e-09 1s 1s 357461750e-09 1s 1s 357463510e-09 0s 0s 357468270e-09 1s 1s 357472030e-09 1s 1s 357473750e-09 0s 0s 357478510e-09 1s 1s 357482310e-09 1s 1s 357483990e-09 0s 0s 357488750e-09 1s 1s 357492590e-09 1s 1s 357494230e-09 0s 0s 357498990e-09 1s 1s 357502870e-09 1s 1s 357504470e-09 0s 0s 357509230e-09 1s 1s 357513150e-09 1s 1s 357514710e-09 0s 0s 357519470e-09 1s 1s 357523430e-09 1s 1s 357524950e-09 0s 0s 357529710e-09 1s 1s 357533710e-09 1s 1s 357535190e-09 0s 0s 357539950e-09 1s 1s 357543990e-09 1s 1s 357545430e-09 0s 0s 357550190e-09 1s 1s 357554270e-09 1s 1s 357555670e-09 0s 0s 357560430e-09 1s 1s 357564550e-09 1s 1s 357565910e-09 0s 0s 357570670e-09 1s 1s 357574830e-09 1s 1s 357576150e-09 0s 0s 357580910e-09 1s 1s 357585110e-09 1s 1s 357586390e-09 0s 0s 357591150e-09 1s 1s 357595390e-09 1s 1s 357596630e-09 0s 0s 357601390e-09 1s 1s 357605670e-09 1s 1s 357606870e-09 0s 0s 357611630e-09 1s 1s 357615950e-09 1s 1s 357617110e-09 0s 0s 357621870e-09 1s 1s 357626230e-09 1s 1s 357627350e-09 0s 0s 357632110e-09 1s 1s 357636510e-09 1s 1s 357637590e-09 0s 0s 357642350e-09 1s 1s 357646790e-09 1s 1s 357647830e-09 0s 0s 357652590e-09 1s 1s 357657070e-09 1s 1s 357658070e-09 0s 0s 357662830e-09 1s 1s 357667350e-09 1s 1s 357668310e-09 0s 0s 357673070e-09 1s 1s 357677630e-09 1s 1s 357678550e-09 0s 0s 357683310e-09 1s 1s 357687910e-09 1s 1s 357688790e-09 0s 0s 357693550e-09 1s 1s 357698190e-09 1s 1s 357699030e-09 0s 0s 357703790e-09 1s 1s 357708470e-09 1s 1s 357709270e-09 0s 0s 357714030e-09 1s 1s 357718750e-09 1s 1s 357719510e-09 0s 0s 357724270e-09 1s 1s 357729030e-09 1s 1s 357729750e-09 0s 0s 357734510e-09 1s 1s 357739310e-09 1s 1s 357739990e-09 0s 0s 357744750e-09 1s 1s 357749590e-09 1s 1s 357750230e-09 0s 0s 357754990e-09 1s 1s 357759870e-09 1s 1s 357760470e-09 0s 0s 357765230e-09 1s 1s 357770150e-09 1s 1s 357770710e-09 0s 0s 357775470e-09 1s 1s 357780430e-09 1s 1s 357780950e-09 0s 0s 357785710e-09 1s 1s 357790710e-09 1s 1s 357791190e-09 0s 0s 357795950e-09 1s 1s 357800990e-09 1s 1s 357801430e-09 0s 0s 357806190e-09 1s 1s 357811270e-09 1s 1s 357811670e-09 0s 0s 357816430e-09 1s 1s 357821550e-09 1s 1s 357821910e-09 0s 0s 357826670e-09 1s 1s 357831830e-09 1s 1s 357832150e-09 0s 0s 357836910e-09 1s 1s 357842110e-09 1s 1s 357842390e-09 0s 0s 357847150e-09 1s 1s 357852390e-09 1s 1s 357852630e-09 0s 0s 357857390e-09 1s 1s 357862670e-09 1s 1s 357862870e-09 0s 0s 357867630e-09 1s 1s 357872950e-09 1s 1s 357873110e-09 0s 0s 357877870e-09 1s 1s 357883230e-09 1s 1s 357883350e-09 0s 0s 357888110e-09 1s 1s 357893510e-09 1s 1s 357893590e-09 0s 0s 357898350e-09 1s 1s 357903790e-09 1s 1s 357903830e-09 0s 0s 357908590e-09 1s 1s 357914070e-09 0s 0s 357918830e-09 1s 1s 357924310e-09 0s 0s 357924350e-09 0s 0s 357929070e-09 1s 1s 357934550e-09 0s 0s 357934630e-09 0s 0s 357939310e-09 1s 1s 357944790e-09 0s 0s 357944910e-09 0s 0s 357949550e-09 1s 1s 357955030e-09 0s 0s 357955190e-09 0s 0s 357959790e-09 1s 1s 357965270e-09 0s 0s 357965470e-09 0s 0s 357970030e-09 1s 1s 357975510e-09 0s 0s 357975750e-09 0s 0s 357980270e-09 1s 1s 357985750e-09 0s 0s 357986030e-09 0s 0s 357990510e-09 1s 1s 357995990e-09 0s 0s 357996310e-09 0s 0s 358000750e-09 1s 1s 358006230e-09 0s 0s 358006590e-09 0s 0s 358010990e-09 1s 1s 358016470e-09 0s 0s 358016870e-09 0s 0s 358021230e-09 1s 1s 358026710e-09 0s 0s 358027150e-09 0s 0s 358031470e-09 1s 1s 358036950e-09 0s 0s 358037430e-09 0s 0s 358041710e-09 1s 1s 358047190e-09 0s 0s 358047710e-09 0s 0s 358051950e-09 1s 1s 358057430e-09 0s 0s 358057990e-09 0s 0s 358062190e-09 1s 1s 358067670e-09 0s 0s 358068270e-09 0s 0s 358072430e-09 1s 1s 358077910e-09 0s 0s 358078550e-09 0s 0s 358082670e-09 1s 1s 358088150e-09 0s 0s 358088830e-09 0s 0s 358092910e-09 1s 1s 358098390e-09 0s 0s 358099110e-09 0s 0s 358103150e-09 1s 1s 358108630e-09 0s 0s 358109390e-09 0s 0s 358113390e-09 1s 1s 358118870e-09 0s 0s 358119670e-09 0s 0s 358123630e-09 1s 1s 358129110e-09 0s 0s 358129950e-09 0s 0s 358133870e-09 1s 1s 358139350e-09 0s 0s 358140230e-09 0s 0s 358144110e-09 1s 1s 358149590e-09 0s 0s 358150510e-09 0s 0s 358154350e-09 1s 1s 358159830e-09 0s 0s 358160790e-09 0s 0s 358164590e-09 1s 1s 358170070e-09 0s 0s 358171070e-09 0s 0s 358174830e-09 1s 1s 358180310e-09 0s 0s 358181350e-09 0s 0s 358185070e-09 1s 1s 358190550e-09 0s 0s 358191630e-09 0s 0s 358195310e-09 1s 1s 358200790e-09 0s 0s 358201910e-09 0s 0s 358205550e-09 1s 1s 358211030e-09 0s 0s 358212190e-09 0s 0s 358215790e-09 1s 1s 358221270e-09 0s 0s 358222470e-09 0s 0s 358226030e-09 1s 1s 358231510e-09 0s 0s 358232750e-09 0s 0s 358236270e-09 1s 1s 358241750e-09 0s 0s 358243030e-09 0s 0s 358246510e-09 1s 1s 358251990e-09 0s 0s 358253310e-09 0s 0s 358256750e-09 1s 1s 358262230e-09 0s 0s 358263590e-09 0s 0s 358266990e-09 1s 1s 358272470e-09 0s 0s 358273870e-09 0s 0s 358277230e-09 1s 1s 358282710e-09 0s 0s 358284150e-09 0s 0s 358287470e-09 1s 1s 358292950e-09 0s 0s 358294430e-09 0s 0s 358297710e-09 1s 1s 358303190e-09 0s 0s 358304710e-09 0s 0s 358307950e-09 1s 1s 358313430e-09 0s 0s 358314990e-09 0s 0s 358318190e-09 1s 1s 358323670e-09 0s 0s 358325270e-09 0s 0s 358328430e-09 1s 1s 358333910e-09 0s 0s 358335550e-09 0s 0s 358338670e-09 1s 1s 358344150e-09 0s 0s 358345830e-09 0s 0s 358348910e-09 1s 1s 358354390e-09 0s 0s 358356110e-09 0s 0s 358359150e-09 1s 1s 358364630e-09 0s 0s 358366390e-09 0s 0s 358369390e-09 1s 1s 358374870e-09 0s 0s 358376670e-09 0s 0s 358379630e-09 1s 1s 358385110e-09 0s 0s 358386950e-09 0s 0s 358389870e-09 1s 1s 358395350e-09 0s 0s 358397230e-09 0s 0s 358400110e-09 1s 1s 358405590e-09 0s 0s 358407510e-09 0s 0s 358410350e-09 1s 1s 358415830e-09 0s 0s 358417790e-09 0s 0s 358420590e-09 1s 1s 358426070e-09 0s 0s 358428070e-09 0s 0s 358430830e-09 1s 1s 358436310e-09 0s 0s 358438350e-09 0s 0s 358441070e-09 1s 1s 358446550e-09 0s 0s 358448630e-09 0s 0s 358451310e-09 1s 1s 358456790e-09 0s 0s 358458910e-09 0s 0s 358461550e-09 1s 1s 358467030e-09 0s 0s 358469190e-09 0s 0s 358471790e-09 1s 1s 358477270e-09 0s 0s 358479470e-09 0s 0s 358482030e-09 1s 1s 358487510e-09 0s 0s 358489750e-09 0s 0s 358492270e-09 1s 1s 358497750e-09 0s 0s 358500030e-09 0s 0s 358502510e-09 1s 1s 358507990e-09 0s 0s 358510310e-09 0s 0s 358512750e-09 1s 1s 358518230e-09 0s 0s 358520590e-09 0s 0s 358522990e-09 1s 1s 358528470e-09 0s 0s 358530870e-09 0s 0s 358533230e-09 1s 1s 358538710e-09 0s 0s 358541150e-09 0s 0s 358543470e-09 1s 1s 358548950e-09 0s 0s 358551430e-09 0s 0s 358553710e-09 1s 1s 358559190e-09 0s 0s 358561710e-09 0s 0s 358563950e-09 1s 1s 358569430e-09 0s 0s 358571990e-09 0s 0s 358574190e-09 1s 1s 358579670e-09 0s 0s 358582270e-09 0s 0s 358584430e-09 1s 1s 358589910e-09 0s 0s 358592550e-09 0s 0s 358594670e-09 1s 1s 358600150e-09 0s 0s 358602830e-09 0s 0s 358604910e-09 1s 1s 358610390e-09 0s 0s 358613110e-09 0s 0s 358615150e-09 1s 1s 358620630e-09 0s 0s 358623390e-09 0s 0s 358625390e-09 1s 1s 358630870e-09 0s 0s 358633670e-09 0s 0s 358635630e-09 1s 1s 358641110e-09 0s 0s 358643950e-09 0s 0s 358645870e-09 1s 1s 358651350e-09 0s 0s 358654230e-09 0s 0s 358656110e-09 1s 1s 358661590e-09 0s 0s 358664510e-09 0s 0s 358666350e-09 1s 1s 358671830e-09 0s 0s 358674790e-09 0s 0s 358676590e-09 1s 1s 358682070e-09 0s 0s 358685070e-09 0s 0s 358686830e-09 1s 1s 358692310e-09 0s 0s 358695350e-09 0s 0s 358697070e-09 1s 1s 358702550e-09 0s 0s 358705630e-09 0s 0s 358707310e-09 1s 1s 358712790e-09 0s 0s 358715910e-09 0s 0s 358717550e-09 1s 1s 358723030e-09 0s 0s 358726190e-09 0s 0s 358727790e-09 1s 1s 358733270e-09 0s 0s 358736470e-09 0s 0s 358738030e-09 1s 1s 358743510e-09 0s 0s 358746750e-09 0s 0s 358748270e-09 1s 1s 358753750e-09 0s 0s 358757030e-09 0s 0s 358758510e-09 1s 1s 358763990e-09 0s 0s 358767310e-09 0s 0s 358768750e-09 1s 1s 358774230e-09 0s 0s 358777590e-09 0s 0s 358778990e-09 1s 1s 358784470e-09 0s 0s 358787870e-09 0s 0s 358789230e-09 1s 1s 358794710e-09 0s 0s 358798150e-09 0s 0s 358799470e-09 1s 1s 358804950e-09 0s 0s 358808430e-09 0s 0s 358809710e-09 1s 1s 358815190e-09 0s 0s 358818710e-09 0s 0s 358819950e-09 1s 1s 358825430e-09 0s 0s 358828990e-09 0s 0s 358830190e-09 1s 1s 358835670e-09 0s 0s 358839270e-09 0s 0s 358840430e-09 1s 1s 358845910e-09 0s 0s 358849550e-09 0s 0s 358850670e-09 1s 1s 358856150e-09 0s 0s 358859830e-09 0s 0s 358860910e-09 1s 1s 358866390e-09 0s 0s 358870110e-09 0s 0s 358871150e-09 1s 1s 358876630e-09 0s 0s 358880390e-09 0s 0s 358881390e-09 1s 1s 358886870e-09 0s 0s 358890670e-09 0s 0s 358891630e-09 1s 1s 358897110e-09 0s 0s 358900950e-09 0s 0s 358901870e-09 1s 1s 358907350e-09 0s 0s 358911230e-09 0s 0s 358912110e-09 1s 1s 358917590e-09 0s 0s 358921510e-09 0s 0s 358922350e-09 1s 1s 358927830e-09 0s 0s 358931790e-09 0s 0s 358932590e-09 1s 1s 358938070e-09 0s 0s 358942070e-09 0s 0s 358942830e-09 1s 1s 358948310e-09 0s 0s 358952350e-09 0s 0s 358953070e-09 1s 1s 358958550e-09 0s 0s 358962630e-09 0s 0s 358963310e-09 1s 1s 358968790e-09 0s 0s 358972910e-09 0s 0s 358973550e-09 1s 1s 358979030e-09 0s 0s 358983190e-09 0s 0s 358983790e-09 1s 1s 358989270e-09 0s 0s 358993470e-09 0s 0s 358994030e-09 1s 1s 358999510e-09 0s 0s 359003750e-09 0s 0s 359004270e-09 1s 1s 359009750e-09 0s 0s 359014030e-09 0s 0s 359014510e-09 1s 1s 359019990e-09 0s 0s 359024310e-09 0s 0s 359024750e-09 1s 1s 359030230e-09 0s 0s 359034590e-09 0s 0s 359034990e-09 1s 1s 359040470e-09 0s 0s 359044870e-09 0s 0s 359045230e-09 1s 1s 359050710e-09 0s 0s 359055150e-09 0s 0s 359055470e-09 1s 1s 359060950e-09 0s 0s 359065430e-09 0s 0s 359065710e-09 1s 1s 359071190e-09 0s 0s 359075710e-09 0s 0s 359075950e-09 1s 1s 359081430e-09 0s 0s 359085990e-09 0s 0s 359086190e-09 1s 1s 359091670e-09 0s 0s 359096270e-09 0s 0s 359096430e-09 1s 1s 359101910e-09 0s 0s 359106550e-09 0s 0s 359106670e-09 1s 1s 359112150e-09 0s 0s 359116830e-09 0s 0s 359116910e-09 1s 1s 359122390e-09 0s 0s 359127110e-09 0s 0s 359127150e-09 1s 1s 359132630e-09 0s 0s 359137390e-09 1s 1s 359137430e-09 1s 1s 359142910e-09 0s 0s 359147630e-09 1s 1s 359147710e-09 1s 1s 359153150e-09 0s 0s 359157870e-09 1s 1s 359157990e-09 1s 1s 359163390e-09 0s 0s 359168110e-09 1s 1s 359168270e-09 1s 1s 359173630e-09 0s 0s 359178350e-09 1s 1s 359178550e-09 1s 1s 359183870e-09 0s 0s 359188590e-09 1s 1s 359188830e-09 1s 1s 359194110e-09 0s 0s 359198830e-09 1s 1s 359199110e-09 1s 1s 359204350e-09 0s 0s 359209070e-09 1s 1s 359209390e-09 1s 1s 359214590e-09 0s 0s 359219310e-09 1s 1s 359219670e-09 1s 1s 359224830e-09 0s 0s 359229550e-09 1s 1s 359229950e-09 1s 1s 359235070e-09 0s 0s 359239790e-09 1s 1s 359240230e-09 1s 1s 359245310e-09 0s 0s 359250030e-09 1s 1s 359250510e-09 1s 1s 359255550e-09 0s 0s 359260270e-09 1s 1s 359260790e-09 1s 1s 359265790e-09 0s 0s 359270510e-09 1s 1s 359271070e-09 1s 1s 359276030e-09 0s 0s 359280750e-09 1s 1s 359281350e-09 1s 1s 359286270e-09 0s 0s 359290990e-09 1s 1s 359291630e-09 1s 1s 359296510e-09 0s 0s 359301230e-09 1s 1s 359301910e-09 1s 1s 359306750e-09 0s 0s 359311470e-09 1s 1s 359312190e-09 1s 1s 359316990e-09 0s 0s 359321710e-09 1s 1s 359322470e-09 1s 1s 359327230e-09 0s 0s 359331950e-09 1s 1s 359332750e-09 1s 1s 359337470e-09 0s 0s 359342190e-09 1s 1s 359343030e-09 1s 1s 359347710e-09 0s 0s 359352430e-09 1s 1s 359353310e-09 1s 1s 359357950e-09 0s 0s 359362670e-09 1s 1s 359363590e-09 1s 1s 359368190e-09 0s 0s 359372910e-09 1s 1s 359373870e-09 1s 1s 359378430e-09 0s 0s 359383150e-09 1s 1s 359384150e-09 1s 1s 359388670e-09 0s 0s 359393390e-09 1s 1s 359394430e-09 1s 1s 359398910e-09 0s 0s 359403630e-09 1s 1s 359404710e-09 1s 1s 359409150e-09 0s 0s 359413870e-09 1s 1s 359414990e-09 1s 1s 359419390e-09 0s 0s 359424110e-09 1s 1s 359425270e-09 1s 1s 359429630e-09 0s 0s 359434350e-09 1s 1s 359435550e-09 1s 1s 359439870e-09 0s 0s 359444590e-09 1s 1s 359445830e-09 1s 1s 359450110e-09 0s 0s 359454830e-09 1s 1s 359456110e-09 1s 1s 359460350e-09 0s 0s 359465070e-09 1s 1s 359466390e-09 1s 1s 359470590e-09 0s 0s 359475310e-09 1s 1s 359476670e-09 1s 1s 359480830e-09 0s 0s 359485550e-09 1s 1s 359486950e-09 1s 1s 359491070e-09 0s 0s 359495790e-09 1s 1s 359497230e-09 1s 1s 359501310e-09 0s 0s 359506030e-09 1s 1s 359507510e-09 1s 1s 359511550e-09 0s 0s 359516270e-09 1s 1s 359517790e-09 1s 1s 359521790e-09 0s 0s 359526510e-09 1s 1s 359528070e-09 1s 1s 359532030e-09 0s 0s 359536750e-09 1s 1s 359538350e-09 1s 1s 359542270e-09 0s 0s 359546990e-09 1s 1s 359548630e-09 1s 1s 359552510e-09 0s 0s 359557230e-09 1s 1s 359558910e-09 1s 1s 359562750e-09 0s 0s 359567470e-09 1s 1s 359569190e-09 1s 1s 359572990e-09 0s 0s 359577710e-09 1s 1s 359579470e-09 1s 1s 359583230e-09 0s 0s 359587950e-09 1s 1s 359589750e-09 1s 1s 359593470e-09 0s 0s 359598190e-09 1s 1s 359600030e-09 1s 1s 359603710e-09 0s 0s 359608430e-09 1s 1s 359610310e-09 1s 1s 359613950e-09 0s 0s 359618670e-09 1s 1s 359620590e-09 1s 1s 359624190e-09 0s 0s 359628910e-09 1s 1s 359630870e-09 1s 1s 359634430e-09 0s 0s 359639150e-09 1s 1s 359641150e-09 1s 1s 359644670e-09 0s 0s 359649390e-09 1s 1s 359651430e-09 1s 1s 359654910e-09 0s 0s 359659630e-09 1s 1s 359661710e-09 1s 1s 359665150e-09 0s 0s 359669870e-09 1s 1s 359671990e-09 1s 1s 359675390e-09 0s 0s 359680110e-09 1s 1s 359682270e-09 1s 1s 359685630e-09 0s 0s 359690350e-09 1s 1s 359692550e-09 1s 1s 359695870e-09 0s 0s 359700590e-09 1s 1s 359702830e-09 1s 1s 359706110e-09 0s 0s 359710830e-09 1s 1s 359713110e-09 1s 1s 359716350e-09 0s 0s 359721070e-09 1s 1s 359723390e-09 1s 1s 359726590e-09 0s 0s 359731310e-09 1s 1s 359733670e-09 1s 1s 359736830e-09 0s 0s 359741550e-09 1s 1s 359743950e-09 1s 1s 359747070e-09 0s 0s 359751790e-09 1s 1s 359754230e-09 1s 1s 359757310e-09 0s 0s 359762030e-09 1s 1s 359764510e-09 1s 1s 359767550e-09 0s 0s 359772270e-09 1s 1s 359774790e-09 1s 1s 359777790e-09 0s 0s 359782510e-09 1s 1s 359785070e-09 1s 1s 359788030e-09 0s 0s 359792750e-09 1s 1s 359795350e-09 1s 1s 359798270e-09 0s 0s 359802990e-09 1s 1s 359805630e-09 1s 1s 359808510e-09 0s 0s 359813230e-09 1s 1s 359815910e-09 1s 1s 359818750e-09 0s 0s 359823470e-09 1s 1s 359826190e-09 1s 1s 359828990e-09 0s 0s 359833710e-09 1s 1s 359836470e-09 1s 1s 359839230e-09 0s 0s 359843950e-09 1s 1s 359846750e-09 1s 1s 359849470e-09 0s 0s 359854190e-09 1s 1s 359857030e-09 1s 1s 359859710e-09 0s 0s 359864430e-09 1s 1s 359867310e-09 1s 1s 359869950e-09 0s 0s 359874670e-09 1s 1s 359877590e-09 1s 1s 359880190e-09 0s 0s 359884910e-09 1s 1s 359887870e-09 1s 1s 359890430e-09 0s 0s 359895150e-09 1s 1s 359898150e-09 1s 1s 359900670e-09 0s 0s 359905390e-09 1s 1s 359908430e-09 1s 1s 359910910e-09 0s 0s 359915630e-09 1s 1s 359918710e-09 1s 1s 359921150e-09 0s 0s 359925870e-09 1s 1s 359928990e-09 1s 1s 359931390e-09 0s 0s 359936110e-09 1s 1s 359939270e-09 1s 1s 359941630e-09 0s 0s 359946350e-09 1s 1s 359949550e-09 1s 1s 359951870e-09 0s 0s 359956590e-09 1s 1s 359959830e-09 1s 1s 359962110e-09 0s 0s 359966830e-09 1s 1s 359970110e-09 1s 1s 359972350e-09 0s 0s 359977070e-09 1s 1s 359980390e-09 1s 1s 359982590e-09 0s 0s 359987310e-09 1s 1s 359990670e-09 1s 1s 359992830e-09 0s 0s 359997550e-09 1s 1s 360000950e-09 1s 1s 360003070e-09 0s 0s 360007790e-09 1s 1s 360011230e-09 1s 1s 360013310e-09 0s 0s 360018030e-09 1s 1s 360021510e-09 1s 1s 360023550e-09 0s 0s 360028270e-09 1s 1s 360031790e-09 1s 1s 360033790e-09 0s 0s 360038510e-09 1s 1s 360042070e-09 1s 1s 360044030e-09 0s 0s 360048750e-09 1s 1s 360052350e-09 1s 1s 360054270e-09 0s 0s 360058990e-09 1s 1s 360062630e-09 1s 1s 360064510e-09 0s 0s 360069230e-09 1s 1s 360072910e-09 1s 1s 360074750e-09 0s 0s 360079470e-09 1s 1s 360083190e-09 1s 1s 360084990e-09 0s 0s 360089710e-09 1s 1s 360093470e-09 1s 1s 360095230e-09 0s 0s 360099950e-09 1s 1s 360103750e-09 1s 1s 360105470e-09 0s 0s 360110190e-09 1s 1s 360114030e-09 1s 1s 360115710e-09 0s 0s 360120430e-09 1s 1s 360124310e-09 1s 1s 360125950e-09 0s 0s 360130670e-09 1s 1s 360134590e-09 1s 1s 360136190e-09 0s 0s 360140910e-09 1s 1s 360144870e-09 1s 1s 360146430e-09 0s 0s 360151150e-09 1s 1s 360155150e-09 1s 1s 360156670e-09 0s 0s 360161390e-09 1s 1s 360165430e-09 1s 1s 360166910e-09 0s 0s 360171630e-09 1s 1s 360175710e-09 1s 1s 360177150e-09 0s 0s 360181870e-09 1s 1s 360185990e-09 1s 1s 360187390e-09 0s 0s 360192110e-09 1s 1s 360196270e-09 1s 1s 360197630e-09 0s 0s 360202350e-09 1s 1s 360206550e-09 1s 1s 360207870e-09 0s 0s 360212590e-09 1s 1s 360216830e-09 1s 1s 360218110e-09 0s 0s 360222830e-09 1s 1s 360227110e-09 1s 1s 360228350e-09 0s 0s 360233070e-09 1s 1s 360237390e-09 1s 1s 360238590e-09 0s 0s 360243310e-09 1s 1s 360247670e-09 1s 1s 360248830e-09 0s 0s 360253550e-09 1s 1s 360257950e-09 1s 1s 360259070e-09 0s 0s 360263790e-09 1s 1s 360268230e-09 1s 1s 360269310e-09 0s 0s 360274030e-09 1s 1s 360278510e-09 1s 1s 360279550e-09 0s 0s 360284270e-09 1s 1s 360288790e-09 1s 1s 360289790e-09 0s 0s 360294510e-09 1s 1s 360299070e-09 1s 1s 360300030e-09 0s 0s 360304750e-09 1s 1s 360309350e-09 1s 1s 360310270e-09 0s 0s 360314990e-09 1s 1s 360319630e-09 1s 1s 360320510e-09 0s 0s 360325230e-09 1s 1s 360329910e-09 1s 1s 360330750e-09 0s 0s 360335470e-09 1s 1s 360340190e-09 1s 1s 360340990e-09 0s 0s 360345710e-09 1s 1s 360350470e-09 1s 1s 360351230e-09 0s 0s 360355950e-09 1s 1s 360360750e-09 1s 1s 360361470e-09 0s 0s 360366190e-09 1s 1s 360371030e-09 1s 1s 360371710e-09 0s 0s 360376430e-09 1s 1s 360381310e-09 1s 1s 360381950e-09 0s 0s 360386670e-09 1s 1s 360391590e-09 1s 1s 360392190e-09 0s 0s 360396910e-09 1s 1s 360401870e-09 1s 1s 360402430e-09 0s 0s 360407150e-09 1s 1s 360412150e-09 1s 1s 360412670e-09 0s 0s 360417390e-09 1s 1s 360422430e-09 1s 1s 360422910e-09 0s 0s 360427630e-09 1s 1s 360432710e-09 1s 1s 360433150e-09 0s 0s 360437870e-09 1s 1s 360442990e-09 1s 1s 360443390e-09 0s 0s 360448110e-09 1s 1s 360453270e-09 1s 1s 360453630e-09 0s 0s 360458350e-09 1s 1s 360463550e-09 1s 1s 360463870e-09 0s 0s 360468590e-09 1s 1s 360473830e-09 1s 1s 360474110e-09 0s 0s 360478830e-09 1s 1s 360484110e-09 1s 1s 360484350e-09 0s 0s 360489070e-09 1s 1s 360494390e-09 1s 1s 360494590e-09 0s 0s 360499310e-09 1s 1s 360504670e-09 1s 1s 360504830e-09 0s 0s 360509550e-09 1s 1s 360514950e-09 1s 1s 360515070e-09 0s 0s 360519790e-09 1s 1s 360525230e-09 1s 1s 360525310e-09 0s 0s 360530030e-09 1s 1s 360535510e-09 1s 1s 360535550e-09 0s 0s 360540270e-09 1s 1s 360545790e-09 0s 0s 360550510e-09 1s 1s 360556030e-09 0s 0s 360556070e-09 0s 0s 360560750e-09 1s 1s 360566270e-09 0s 0s 360566350e-09 0s 0s 360570990e-09 1s 1s 360576510e-09 0s 0s 360576630e-09 0s 0s 360581230e-09 1s 1s 360586750e-09 0s 0s 360586910e-09 0s 0s 360591470e-09 1s 1s 360596990e-09 0s 0s 360597190e-09 0s 0s 360601710e-09 1s 1s 360607230e-09 0s 0s 360607470e-09 0s 0s 360611950e-09 1s 1s 360617470e-09 0s 0s 360617750e-09 0s 0s 360622190e-09 1s 1s 360627710e-09 0s 0s 360628030e-09 0s 0s 360632430e-09 1s 1s 360637950e-09 0s 0s 360638310e-09 0s 0s 360642670e-09 1s 1s 360648190e-09 0s 0s 360648590e-09 0s 0s 360652910e-09 1s 1s 360658430e-09 0s 0s 360658870e-09 0s 0s 360663150e-09 1s 1s 360668670e-09 0s 0s 360669150e-09 0s 0s 360673390e-09 1s 1s 360678910e-09 0s 0s 360679430e-09 0s 0s 360683630e-09 1s 1s 360689150e-09 0s 0s 360689710e-09 0s 0s 360693870e-09 1s 1s 360699390e-09 0s 0s 360699990e-09 0s 0s 360704110e-09 1s 1s 360709630e-09 0s 0s 360710270e-09 0s 0s 360714350e-09 1s 1s 360719870e-09 0s 0s 360720550e-09 0s 0s 360724590e-09 1s 1s 360730110e-09 0s 0s 360730830e-09 0s 0s 360734830e-09 1s 1s 360740350e-09 0s 0s 360741110e-09 0s 0s 360745070e-09 1s 1s 360750590e-09 0s 0s 360751390e-09 0s 0s 360755310e-09 1s 1s 360760830e-09 0s 0s 360761670e-09 0s 0s 360765550e-09 1s 1s 360771070e-09 0s 0s 360771950e-09 0s 0s 360775790e-09 1s 1s 360781310e-09 0s 0s 360782230e-09 0s 0s 360786030e-09 1s 1s 360791550e-09 0s 0s 360792510e-09 0s 0s 360796270e-09 1s 1s 360801790e-09 0s 0s 360802790e-09 0s 0s 360806510e-09 1s 1s 360812030e-09 0s 0s 360813070e-09 0s 0s 360816750e-09 1s 1s 360822270e-09 0s 0s 360823350e-09 0s 0s 360826990e-09 1s 1s 360832510e-09 0s 0s 360833630e-09 0s 0s 360837230e-09 1s 1s 360842750e-09 0s 0s 360843910e-09 0s 0s 360847470e-09 1s 1s 360852990e-09 0s 0s 360854190e-09 0s 0s 360857710e-09 1s 1s 360863230e-09 0s 0s 360864470e-09 0s 0s 360867950e-09 1s 1s 360873470e-09 0s 0s 360874750e-09 0s 0s 360878190e-09 1s 1s 360883710e-09 0s 0s 360885030e-09 0s 0s 360888430e-09 1s 1s 360893950e-09 0s 0s 360895310e-09 0s 0s 360898670e-09 1s 1s 360904190e-09 0s 0s 360905590e-09 0s 0s 360908910e-09 1s 1s 360914430e-09 0s 0s 360915870e-09 0s 0s 360919150e-09 1s 1s 360924670e-09 0s 0s 360926150e-09 0s 0s 360929390e-09 1s 1s 360934910e-09 0s 0s 360936430e-09 0s 0s 360939630e-09 1s 1s 360945150e-09 0s 0s 360946710e-09 0s 0s 360949870e-09 1s 1s 360955390e-09 0s 0s 360956990e-09 0s 0s 360960110e-09 1s 1s 360965630e-09 0s 0s 360967270e-09 0s 0s 360970350e-09 1s 1s 360975870e-09 0s 0s 360977550e-09 0s 0s 360980590e-09 1s 1s 360986110e-09 0s 0s 360987830e-09 0s 0s 360990830e-09 1s 1s 360996350e-09 0s 0s 360998110e-09 0s 0s 361001070e-09 1s 1s 361006590e-09 0s 0s 361008390e-09 0s 0s 361011310e-09 1s 1s 361016830e-09 0s 0s 361018670e-09 0s 0s 361021550e-09 1s 1s 361027070e-09 0s 0s 361028950e-09 0s 0s 361031790e-09 1s 1s 361037310e-09 0s 0s 361039230e-09 0s 0s 361042030e-09 1s 1s 361047550e-09 0s 0s 361049510e-09 0s 0s 361052270e-09 1s 1s 361057790e-09 0s 0s 361059790e-09 0s 0s 361062510e-09 1s 1s 361068030e-09 0s 0s 361070070e-09 0s 0s 361072750e-09 1s 1s 361078270e-09 0s 0s 361080350e-09 0s 0s 361082990e-09 1s 1s 361088510e-09 0s 0s 361090630e-09 0s 0s 361093230e-09 1s 1s 361098750e-09 0s 0s 361100910e-09 0s 0s 361103470e-09 1s 1s 361108990e-09 0s 0s 361111190e-09 0s 0s 361113710e-09 1s 1s 361119230e-09 0s 0s 361121470e-09 0s 0s 361123950e-09 1s 1s 361129470e-09 0s 0s 361131750e-09 0s 0s 361134190e-09 1s 1s 361139710e-09 0s 0s 361142030e-09 0s 0s 361144430e-09 1s 1s 361149950e-09 0s 0s 361152310e-09 0s 0s 361154670e-09 1s 1s 361160190e-09 0s 0s 361162590e-09 0s 0s 361164910e-09 1s 1s 361170430e-09 0s 0s 361172870e-09 0s 0s 361175150e-09 1s 1s 361180670e-09 0s 0s 361183150e-09 0s 0s 361185390e-09 1s 1s 361190910e-09 0s 0s 361193430e-09 0s 0s 361195630e-09 1s 1s 361201150e-09 0s 0s 361203710e-09 0s 0s 361205870e-09 1s 1s 361211390e-09 0s 0s 361213990e-09 0s 0s 361216110e-09 1s 1s 361221630e-09 0s 0s 361224270e-09 0s 0s 361226350e-09 1s 1s 361231870e-09 0s 0s 361234550e-09 0s 0s 361236590e-09 1s 1s 361242110e-09 0s 0s 361244830e-09 0s 0s 361246830e-09 1s 1s 361252350e-09 0s 0s 361255110e-09 0s 0s 361257070e-09 1s 1s 361262590e-09 0s 0s 361265390e-09 0s 0s 361267310e-09 1s 1s 361272830e-09 0s 0s 361275670e-09 0s 0s 361277550e-09 1s 1s 361283070e-09 0s 0s 361285950e-09 0s 0s 361287790e-09 1s 1s 361293310e-09 0s 0s 361296230e-09 0s 0s 361298030e-09 1s 1s 361303550e-09 0s 0s 361306510e-09 0s 0s 361308270e-09 1s 1s 361313790e-09 0s 0s 361316790e-09 0s 0s 361318510e-09 1s 1s 361324030e-09 0s 0s 361327070e-09 0s 0s 361328750e-09 1s 1s 361334270e-09 0s 0s 361337350e-09 0s 0s 361338990e-09 1s 1s 361344510e-09 0s 0s 361347630e-09 0s 0s 361349230e-09 1s 1s 361354750e-09 0s 0s 361357910e-09 0s 0s 361359470e-09 1s 1s 361364990e-09 0s 0s 361368190e-09 0s 0s 361369710e-09 1s 1s 361375230e-09 0s 0s 361378470e-09 0s 0s 361379950e-09 1s 1s 361385470e-09 0s 0s 361388750e-09 0s 0s 361390190e-09 1s 1s 361395710e-09 0s 0s 361399030e-09 0s 0s 361400430e-09 1s 1s 361405950e-09 0s 0s 361409310e-09 0s 0s 361410670e-09 1s 1s 361416190e-09 0s 0s 361419590e-09 0s 0s 361420910e-09 1s 1s 361426430e-09 0s 0s 361429870e-09 0s 0s 361431150e-09 1s 1s 361436670e-09 0s 0s 361440150e-09 0s 0s 361441390e-09 1s 1s 361446910e-09 0s 0s 361450430e-09 0s 0s 361451630e-09 1s 1s 361457150e-09 0s 0s 361460710e-09 0s 0s 361461870e-09 1s 1s 361467390e-09 0s 0s 361470990e-09 0s 0s 361472110e-09 1s 1s 361477630e-09 0s 0s 361481270e-09 0s 0s 361482350e-09 1s 1s 361487870e-09 0s 0s 361491550e-09 0s 0s 361492590e-09 1s 1s 361498110e-09 0s 0s 361501830e-09 0s 0s 361502830e-09 1s 1s 361508350e-09 0s 0s 361512110e-09 0s 0s 361513070e-09 1s 1s 361518590e-09 0s 0s 361522390e-09 0s 0s 361523310e-09 1s 1s 361528830e-09 0s 0s 361532670e-09 0s 0s 361533550e-09 1s 1s 361539070e-09 0s 0s 361542950e-09 0s 0s 361543790e-09 1s 1s 361549310e-09 0s 0s 361553230e-09 0s 0s 361554030e-09 1s 1s 361559550e-09 0s 0s 361563510e-09 0s 0s 361564270e-09 1s 1s 361569790e-09 0s 0s 361573790e-09 0s 0s 361574510e-09 1s 1s 361580030e-09 0s 0s 361584070e-09 0s 0s 361584750e-09 1s 1s 361590270e-09 0s 0s 361594350e-09 0s 0s 361594990e-09 1s 1s 361600510e-09 0s 0s 361604630e-09 0s 0s 361605230e-09 1s 1s 361610750e-09 0s 0s 361614910e-09 0s 0s 361615470e-09 1s 1s 361620990e-09 0s 0s 361625190e-09 0s 0s 361625710e-09 1s 1s 361631230e-09 0s 0s 361635470e-09 0s 0s 361635950e-09 1s 1s 361641470e-09 0s 0s 361645750e-09 0s 0s 361646190e-09 1s 1s 361651710e-09 0s 0s 361656030e-09 0s 0s 361656430e-09 1s 1s 361661950e-09 0s 0s 361666310e-09 0s 0s 361666670e-09 1s 1s 361672190e-09 0s 0s 361676590e-09 0s 0s 361676910e-09 1s 1s 361682430e-09 0s 0s 361686870e-09 0s 0s 361687150e-09 1s 1s 361692670e-09 0s 0s 361697150e-09 0s 0s 361697390e-09 1s 1s 361702910e-09 0s 0s 361707430e-09 0s 0s 361707630e-09 1s 1s 361713150e-09 0s 0s 361717710e-09 0s 0s 361717870e-09 1s 1s 361723390e-09 0s 0s 361727990e-09 0s 0s 361728110e-09 1s 1s 361733630e-09 0s 0s 361738270e-09 0s 0s 361738350e-09 1s 1s 361743870e-09 0s 0s 361748550e-09 0s 0s 361748590e-09 1s 1s 361754110e-09 0s 0s 361758830e-09 1s 1s 361758870e-09 1s 1s 361764390e-09 0s 0s 361769070e-09 1s 1s 361769150e-09 1s 1s 361774630e-09 0s 0s 361779310e-09 1s 1s 361779430e-09 1s 1s 361784870e-09 0s 0s 361789550e-09 1s 1s 361789710e-09 1s 1s 361795110e-09 0s 0s 361799790e-09 1s 1s 361799990e-09 1s 1s 361805350e-09 0s 0s 361810030e-09 1s 1s 361810270e-09 1s 1s 361815590e-09 0s 0s 361820270e-09 1s 1s 361820550e-09 1s 1s 361825830e-09 0s 0s 361830510e-09 1s 1s 361830830e-09 1s 1s 361836070e-09 0s 0s 361840750e-09 1s 1s 361841110e-09 1s 1s 361846310e-09 0s 0s 361850990e-09 1s 1s 361851390e-09 1s 1s 361856550e-09 0s 0s 361861230e-09 1s 1s 361861670e-09 1s 1s 361866790e-09 0s 0s 361871470e-09 1s 1s 361871950e-09 1s 1s 361877030e-09 0s 0s 361881710e-09 1s 1s 361882230e-09 1s 1s 361887270e-09 0s 0s 361891950e-09 1s 1s 361892510e-09 1s 1s 361897510e-09 0s 0s 361902190e-09 1s 1s 361902790e-09 1s 1s 361907750e-09 0s 0s 361912430e-09 1s 1s 361913070e-09 1s 1s 361917990e-09 0s 0s 361922670e-09 1s 1s 361923350e-09 1s 1s 361928230e-09 0s 0s 361932910e-09 1s 1s 361933630e-09 1s 1s 361938470e-09 0s 0s 361943150e-09 1s 1s 361943910e-09 1s 1s 361948710e-09 0s 0s 361953390e-09 1s 1s 361954190e-09 1s 1s 361958950e-09 0s 0s 361963630e-09 1s 1s 361964470e-09 1s 1s 361969190e-09 0s 0s 361973870e-09 1s 1s 361974750e-09 1s 1s 361979430e-09 0s 0s 361984110e-09 1s 1s 361985030e-09 1s 1s 361989670e-09 0s 0s 361994350e-09 1s 1s 361995310e-09 1s 1s 361999910e-09 0s 0s 362004590e-09 1s 1s 362005590e-09 1s 1s 362010150e-09 0s 0s 362014830e-09 1s 1s 362015870e-09 1s 1s 362020390e-09 0s 0s 362025070e-09 1s 1s 362026150e-09 1s 1s 362030630e-09 0s 0s 362035310e-09 1s 1s 362036430e-09 1s 1s 362040870e-09 0s 0s 362045550e-09 1s 1s 362046710e-09 1s 1s 362051110e-09 0s 0s 362055790e-09 1s 1s 362056990e-09 1s 1s 362061350e-09 0s 0s 362066030e-09 1s 1s 362067270e-09 1s 1s 362071590e-09 0s 0s 362076270e-09 1s 1s 362077550e-09 1s 1s 362081830e-09 0s 0s 362086510e-09 1s 1s 362087830e-09 1s 1s 362092070e-09 0s 0s 362096750e-09 1s 1s 362098110e-09 1s 1s 362102310e-09 0s 0s 362106990e-09 1s 1s 362108390e-09 1s 1s 362112550e-09 0s 0s 362117230e-09 1s 1s 362118670e-09 1s 1s 362122790e-09 0s 0s 362127470e-09 1s 1s 362128950e-09 1s 1s 362133030e-09 0s 0s 362137710e-09 1s 1s 362139230e-09 1s 1s 362143270e-09 0s 0s 362147950e-09 1s 1s 362149510e-09 1s 1s 362153510e-09 0s 0s 362158190e-09 1s 1s 362159790e-09 1s 1s 362163750e-09 0s 0s 362168430e-09 1s 1s 362170070e-09 1s 1s 362173990e-09 0s 0s 362178670e-09 1s 1s 362180350e-09 1s 1s 362184230e-09 0s 0s 362188910e-09 1s 1s 362190630e-09 1s 1s 362194470e-09 0s 0s 362199150e-09 1s 1s 362200910e-09 1s 1s 362204710e-09 0s 0s 362209390e-09 1s 1s 362211190e-09 1s 1s 362214950e-09 0s 0s 362219630e-09 1s 1s 362221470e-09 1s 1s 362225190e-09 0s 0s 362229870e-09 1s 1s 362231750e-09 1s 1s 362235430e-09 0s 0s 362240110e-09 1s 1s 362242030e-09 1s 1s 362245670e-09 0s 0s 362250350e-09 1s 1s 362252310e-09 1s 1s 362255910e-09 0s 0s 362260590e-09 1s 1s 362262590e-09 1s 1s 362266150e-09 0s 0s 362270830e-09 1s 1s 362272870e-09 1s 1s 362276390e-09 0s 0s 362281070e-09 1s 1s 362283150e-09 1s 1s 362286630e-09 0s 0s 362291310e-09 1s 1s 362293430e-09 1s 1s 362296870e-09 0s 0s 362301550e-09 1s 1s 362303710e-09 1s 1s 362307110e-09 0s 0s 362311790e-09 1s 1s 362313990e-09 1s 1s 362317350e-09 0s 0s 362322030e-09 1s 1s 362324270e-09 1s 1s 362327590e-09 0s 0s 362332270e-09 1s 1s 362334550e-09 1s 1s 362337830e-09 0s 0s 362342510e-09 1s 1s 362344830e-09 1s 1s 362348070e-09 0s 0s 362352750e-09 1s 1s 362355110e-09 1s 1s 362358310e-09 0s 0s 362362990e-09 1s 1s 362365390e-09 1s 1s 362368550e-09 0s 0s 362373230e-09 1s 1s 362375670e-09 1s 1s 362378790e-09 0s 0s 362383470e-09 1s 1s 362385950e-09 1s 1s 362389030e-09 0s 0s 362393710e-09 1s 1s 362396230e-09 1s 1s 362399270e-09 0s 0s 362403950e-09 1s 1s 362406510e-09 1s 1s 362409510e-09 0s 0s 362414190e-09 1s 1s 362416790e-09 1s 1s 362419750e-09 0s 0s 362424430e-09 1s 1s 362427070e-09 1s 1s 362429990e-09 0s 0s 362434670e-09 1s 1s 362437350e-09 1s 1s 362440230e-09 0s 0s 362444910e-09 1s 1s 362447630e-09 1s 1s 362450470e-09 0s 0s 362455150e-09 1s 1s 362457910e-09 1s 1s 362460710e-09 0s 0s 362465390e-09 1s 1s 362468190e-09 1s 1s 362470950e-09 0s 0s 362475630e-09 1s 1s 362478470e-09 1s 1s 362481190e-09 0s 0s 362485870e-09 1s 1s 362488750e-09 1s 1s 362491430e-09 0s 0s 362496110e-09 1s 1s 362499030e-09 1s 1s 362501670e-09 0s 0s 362506350e-09 1s 1s 362509310e-09 1s 1s 362511910e-09 0s 0s 362516590e-09 1s 1s 362519590e-09 1s 1s 362522150e-09 0s 0s 362526830e-09 1s 1s 362529870e-09 1s 1s 362532390e-09 0s 0s 362537070e-09 1s 1s 362540150e-09 1s 1s 362542630e-09 0s 0s 362547310e-09 1s 1s 362550430e-09 1s 1s 362552870e-09 0s 0s 362557550e-09 1s 1s 362560710e-09 1s 1s 362563110e-09 0s 0s 362567790e-09 1s 1s 362570990e-09 1s 1s 362573350e-09 0s 0s 362578030e-09 1s 1s 362581270e-09 1s 1s 362583590e-09 0s 0s 362588270e-09 1s 1s 362591550e-09 1s 1s 362593830e-09 0s 0s 362598510e-09 1s 1s 362601830e-09 1s 1s 362604070e-09 0s 0s 362608750e-09 1s 1s 362612110e-09 1s 1s 362614310e-09 0s 0s 362618990e-09 1s 1s 362622390e-09 1s 1s 362624550e-09 0s 0s 362629230e-09 1s 1s 362632670e-09 1s 1s 362634790e-09 0s 0s 362639470e-09 1s 1s 362642950e-09 1s 1s 362645030e-09 0s 0s 362649710e-09 1s 1s 362653230e-09 1s 1s 362655270e-09 0s 0s 362659950e-09 1s 1s 362663510e-09 1s 1s 362665510e-09 0s 0s 362670190e-09 1s 1s 362673790e-09 1s 1s 362675750e-09 0s 0s 362680430e-09 1s 1s 362684070e-09 1s 1s 362685990e-09 0s 0s 362690670e-09 1s 1s 362694350e-09 1s 1s 362696230e-09 0s 0s 362700910e-09 1s 1s 362704630e-09 1s 1s 362706470e-09 0s 0s 362711150e-09 1s 1s 362714910e-09 1s 1s 362716710e-09 0s 0s 362721390e-09 1s 1s 362725190e-09 1s 1s 362726950e-09 0s 0s 362731630e-09 1s 1s 362735470e-09 1s 1s 362737190e-09 0s 0s 362741870e-09 1s 1s 362745750e-09 1s 1s 362747430e-09 0s 0s 362752110e-09 1s 1s 362756030e-09 1s 1s 362757670e-09 0s 0s 362762350e-09 1s 1s 362766310e-09 1s 1s 362767910e-09 0s 0s 362772590e-09 1s 1s 362776590e-09 1s 1s 362778150e-09 0s 0s 362782830e-09 1s 1s 362786870e-09 1s 1s 362788390e-09 0s 0s 362793070e-09 1s 1s 362797150e-09 1s 1s 362798630e-09 0s 0s 362803310e-09 1s 1s 362807430e-09 1s 1s 362808870e-09 0s 0s 362813550e-09 1s 1s 362817710e-09 1s 1s 362819110e-09 0s 0s 362823790e-09 1s 1s 362827990e-09 1s 1s 362829350e-09 0s 0s 362834030e-09 1s 1s 362838270e-09 1s 1s 362839590e-09 0s 0s 362844270e-09 1s 1s 362848550e-09 1s 1s 362849830e-09 0s 0s 362854510e-09 1s 1s 362858830e-09 1s 1s 362860070e-09 0s 0s 362864750e-09 1s 1s 362869110e-09 1s 1s 362870310e-09 0s 0s 362874990e-09 1s 1s 362879390e-09 1s 1s 362880550e-09 0s 0s 362885230e-09 1s 1s 362889670e-09 1s 1s 362890790e-09 0s 0s 362895470e-09 1s 1s 362899950e-09 1s 1s 362901030e-09 0s 0s 362905710e-09 1s 1s 362910230e-09 1s 1s 362911270e-09 0s 0s 362915950e-09 1s 1s 362920510e-09 1s 1s 362921510e-09 0s 0s 362926190e-09 1s 1s 362930790e-09 1s 1s 362931750e-09 0s 0s 362936430e-09 1s 1s 362941070e-09 1s 1s 362941990e-09 0s 0s 362946670e-09 1s 1s 362951350e-09 1s 1s 362952230e-09 0s 0s 362956910e-09 1s 1s 362961630e-09 1s 1s 362962470e-09 0s 0s 362967150e-09 1s 1s 362971910e-09 1s 1s 362972710e-09 0s 0s 362977390e-09 1s 1s 362982190e-09 1s 1s 362982950e-09 0s 0s 362987630e-09 1s 1s 362992470e-09 1s 1s 362993190e-09 0s 0s 362997870e-09 1s 1s 363002750e-09 1s 1s 363003430e-09 0s 0s 363008110e-09 1s 1s 363013030e-09 1s 1s 363013670e-09 0s 0s 363018350e-09 1s 1s 363023310e-09 1s 1s 363023910e-09 0s 0s 363028590e-09 1s 1s 363033590e-09 1s 1s 363034150e-09 0s 0s 363038830e-09 1s 1s 363043870e-09 1s 1s 363044390e-09 0s 0s 363049070e-09 1s 1s 363054150e-09 1s 1s 363054630e-09 0s 0s 363059310e-09 1s 1s 363064430e-09 1s 1s 363064870e-09 0s 0s 363069550e-09 1s 1s 363074710e-09 1s 1s 363075110e-09 0s 0s 363079790e-09 1s 1s 363084990e-09 1s 1s 363085350e-09 0s 0s 363090030e-09 1s 1s 363095270e-09 1s 1s 363095590e-09 0s 0s 363100270e-09 1s 1s 363105550e-09 1s 1s 363105830e-09 0s 0s 363110510e-09 1s 1s 363115830e-09 1s 1s 363116070e-09 0s 0s 363120750e-09 1s 1s 363126110e-09 1s 1s 363126310e-09 0s 0s 363130990e-09 1s 1s 363136390e-09 1s 1s 363136550e-09 0s 0s 363141230e-09 1s 1s 363146670e-09 1s 1s 363146790e-09 0s 0s 363151470e-09 1s 1s 363156950e-09 1s 1s 363157030e-09 0s 0s 363161710e-09 1s 1s 363167230e-09 1s 1s 363167270e-09 0s 0s 363171950e-09 1s 1s 363177510e-09 0s 0s 363182190e-09 1s 1s 363187750e-09 0s 0s 363187790e-09 0s 0s 363192430e-09 1s 1s 363197990e-09 0s 0s 363198070e-09 0s 0s 363202670e-09 1s 1s 363208230e-09 0s 0s 363208350e-09 0s 0s 363212910e-09 1s 1s 363218470e-09 0s 0s 363218630e-09 0s 0s 363223150e-09 1s 1s 363228710e-09 0s 0s 363228910e-09 0s 0s 363233390e-09 1s 1s 363238950e-09 0s 0s 363239190e-09 0s 0s 363243630e-09 1s 1s 363249190e-09 0s 0s 363249470e-09 0s 0s 363253870e-09 1s 1s 363259430e-09 0s 0s 363259750e-09 0s 0s 363264110e-09 1s 1s 363269670e-09 0s 0s 363270030e-09 0s 0s 363274350e-09 1s 1s 363279910e-09 0s 0s 363280310e-09 0s 0s 363284590e-09 1s 1s 363290150e-09 0s 0s 363290590e-09 0s 0s 363294830e-09 1s 1s 363300390e-09 0s 0s 363300870e-09 0s 0s 363305070e-09 1s 1s 363310630e-09 0s 0s 363311150e-09 0s 0s 363315310e-09 1s 1s 363320870e-09 0s 0s 363321430e-09 0s 0s 363325550e-09 1s 1s 363331110e-09 0s 0s 363331710e-09 0s 0s 363335790e-09 1s 1s 363341350e-09 0s 0s 363341990e-09 0s 0s 363346030e-09 1s 1s 363351590e-09 0s 0s 363352270e-09 0s 0s 363356270e-09 1s 1s 363361830e-09 0s 0s 363362550e-09 0s 0s 363366510e-09 1s 1s 363372070e-09 0s 0s 363372830e-09 0s 0s 363376750e-09 1s 1s 363382310e-09 0s 0s 363383110e-09 0s 0s 363386990e-09 1s 1s 363392550e-09 0s 0s 363393390e-09 0s 0s 363397230e-09 1s 1s 363402790e-09 0s 0s 363403670e-09 0s 0s 363407470e-09 1s 1s 363413030e-09 0s 0s 363413950e-09 0s 0s 363417710e-09 1s 1s 363423270e-09 0s 0s 363424230e-09 0s 0s 363427950e-09 1s 1s 363433510e-09 0s 0s 363434510e-09 0s 0s 363438190e-09 1s 1s 363443750e-09 0s 0s 363444790e-09 0s 0s 363448430e-09 1s 1s 363453990e-09 0s 0s 363455070e-09 0s 0s 363458670e-09 1s 1s 363464230e-09 0s 0s 363465350e-09 0s 0s 363468910e-09 1s 1s 363474470e-09 0s 0s 363475630e-09 0s 0s 363479150e-09 1s 1s 363484710e-09 0s 0s 363485910e-09 0s 0s 363489390e-09 1s 1s 363494950e-09 0s 0s 363496190e-09 0s 0s 363499630e-09 1s 1s 363505190e-09 0s 0s 363506470e-09 0s 0s 363509870e-09 1s 1s 363515430e-09 0s 0s 363516750e-09 0s 0s 363520110e-09 1s 1s 363525670e-09 0s 0s 363527030e-09 0s 0s 363530350e-09 1s 1s 363535910e-09 0s 0s 363537310e-09 0s 0s 363540590e-09 1s 1s 363546150e-09 0s 0s 363547590e-09 0s 0s 363550830e-09 1s 1s 363556390e-09 0s 0s 363557870e-09 0s 0s 363561070e-09 1s 1s 363566630e-09 0s 0s 363568150e-09 0s 0s 363571310e-09 1s 1s 363576870e-09 0s 0s 363578430e-09 0s 0s 363581550e-09 1s 1s 363587110e-09 0s 0s 363588710e-09 0s 0s 363591790e-09 1s 1s 363597350e-09 0s 0s 363598990e-09 0s 0s 363602030e-09 1s 1s 363607590e-09 0s 0s 363609270e-09 0s 0s 363612270e-09 1s 1s 363617830e-09 0s 0s 363619550e-09 0s 0s 363622510e-09 1s 1s 363628070e-09 0s 0s 363629830e-09 0s 0s 363632750e-09 1s 1s 363638310e-09 0s 0s 363640110e-09 0s 0s 363642990e-09 1s 1s 363648550e-09 0s 0s 363650390e-09 0s 0s 363653230e-09 1s 1s 363658790e-09 0s 0s 363660670e-09 0s 0s 363663470e-09 1s 1s 363669030e-09 0s 0s 363670950e-09 0s 0s 363673710e-09 1s 1s 363679270e-09 0s 0s 363681230e-09 0s 0s 363683950e-09 1s 1s 363689510e-09 0s 0s 363691510e-09 0s 0s 363694190e-09 1s 1s 363699750e-09 0s 0s 363701790e-09 0s 0s 363704430e-09 1s 1s 363709990e-09 0s 0s 363712070e-09 0s 0s 363714670e-09 1s 1s 363720230e-09 0s 0s 363722350e-09 0s 0s 363724910e-09 1s 1s 363730470e-09 0s 0s 363732630e-09 0s 0s 363735150e-09 1s 1s 363740710e-09 0s 0s 363742910e-09 0s 0s 363745390e-09 1s 1s 363750950e-09 0s 0s 363753190e-09 0s 0s 363755630e-09 1s 1s 363761190e-09 0s 0s 363763470e-09 0s 0s 363765870e-09 1s 1s 363771430e-09 0s 0s 363773750e-09 0s 0s 363776110e-09 1s 1s 363781670e-09 0s 0s 363784030e-09 0s 0s 363786350e-09 1s 1s 363791910e-09 0s 0s 363794310e-09 0s 0s 363796590e-09 1s 1s 363802150e-09 0s 0s 363804590e-09 0s 0s 363806830e-09 1s 1s 363812390e-09 0s 0s 363814870e-09 0s 0s 363817070e-09 1s 1s 363822630e-09 0s 0s 363825150e-09 0s 0s 363827310e-09 1s 1s 363832870e-09 0s 0s 363835430e-09 0s 0s 363837550e-09 1s 1s 363843110e-09 0s 0s 363845710e-09 0s 0s 363847790e-09 1s 1s 363853350e-09 0s 0s 363855990e-09 0s 0s 363858030e-09 1s 1s 363863590e-09 0s 0s 363866270e-09 0s 0s 363868270e-09 1s 1s 363873830e-09 0s 0s 363876550e-09 0s 0s 363878510e-09 1s 1s 363884070e-09 0s 0s 363886830e-09 0s 0s 363888750e-09 1s 1s 363894310e-09 0s 0s 363897110e-09 0s 0s 363898990e-09 1s 1s 363904550e-09 0s 0s 363907390e-09 0s 0s 363909230e-09 1s 1s 363914790e-09 0s 0s 363917670e-09 0s 0s 363919470e-09 1s 1s 363925030e-09 0s 0s 363927950e-09 0s 0s 363929710e-09 1s 1s 363935270e-09 0s 0s 363938230e-09 0s 0s 363939950e-09 1s 1s 363945510e-09 0s 0s 363948510e-09 0s 0s 363950190e-09 1s 1s 363955750e-09 0s 0s 363958790e-09 0s 0s 363960430e-09 1s 1s 363965990e-09 0s 0s 363969070e-09 0s 0s 363970670e-09 1s 1s 363976230e-09 0s 0s 363979350e-09 0s 0s 363980910e-09 1s 1s 363986470e-09 0s 0s 363989630e-09 0s 0s 363991150e-09 1s 1s 363996710e-09 0s 0s 363999910e-09 0s 0s 364001390e-09 1s 1s 364006950e-09 0s 0s 364010190e-09 0s 0s 364011630e-09 1s 1s 364017190e-09 0s 0s 364020470e-09 0s 0s 364021870e-09 1s 1s 364027430e-09 0s 0s 364030750e-09 0s 0s 364032110e-09 1s 1s 364037670e-09 0s 0s 364041030e-09 0s 0s 364042350e-09 1s 1s 364047910e-09 0s 0s 364051310e-09 0s 0s 364052590e-09 1s 1s 364058150e-09 0s 0s 364061590e-09 0s 0s 364062830e-09 1s 1s 364068390e-09 0s 0s 364071870e-09 0s 0s 364073070e-09 1s 1s 364078630e-09 0s 0s 364082150e-09 0s 0s 364083310e-09 1s 1s 364088870e-09 0s 0s 364092430e-09 0s 0s 364093550e-09 1s 1s 364099110e-09 0s 0s 364102710e-09 0s 0s 364103790e-09 1s 1s 364109350e-09 0s 0s 364112990e-09 0s 0s 364114030e-09 1s 1s 364119590e-09 0s 0s 364123270e-09 0s 0s 364124270e-09 1s 1s 364129830e-09 0s 0s 364133550e-09 0s 0s 364134510e-09 1s 1s 364140070e-09 0s 0s 364143830e-09 0s 0s 364144750e-09 1s 1s 364150310e-09 0s 0s 364154110e-09 0s 0s 364154990e-09 1s 1s 364160550e-09 0s 0s 364164390e-09 0s 0s 364165230e-09 1s 1s 364170790e-09 0s 0s 364174670e-09 0s 0s 364175470e-09 1s 1s 364181030e-09 0s 0s 364184950e-09 0s 0s 364185710e-09 1s 1s 364191270e-09 0s 0s 364195230e-09 0s 0s 364195950e-09 1s 1s 364201510e-09 0s 0s 364205510e-09 0s 0s 364206190e-09 1s 1s 364211750e-09 0s 0s 364215790e-09 0s 0s 364216430e-09 1s 1s 364221990e-09 0s 0s 364226070e-09 0s 0s 364226670e-09 1s 1s 364232230e-09 0s 0s 364236350e-09 0s 0s 364236910e-09 1s 1s 364242470e-09 0s 0s 364246630e-09 0s 0s 364247150e-09 1s 1s 364252710e-09 0s 0s 364256910e-09 0s 0s 364257390e-09 1s 1s 364262950e-09 0s 0s 364267190e-09 0s 0s 364267630e-09 1s 1s 364273190e-09 0s 0s 364277470e-09 0s 0s 364277870e-09 1s 1s 364283430e-09 0s 0s 364287750e-09 0s 0s 364288110e-09 1s 1s 364293670e-09 0s 0s 364298030e-09 0s 0s 364298350e-09 1s 1s 364303910e-09 0s 0s 364308310e-09 0s 0s 364308590e-09 1s 1s 364314150e-09 0s 0s 364318590e-09 0s 0s 364318830e-09 1s 1s 364324390e-09 0s 0s 364328870e-09 0s 0s 364329070e-09 1s 1s 364334630e-09 0s 0s 364339150e-09 0s 0s 364339310e-09 1s 1s 364344870e-09 0s 0s 364349430e-09 0s 0s 364349550e-09 1s 1s 364355110e-09 0s 0s 364359710e-09 0s 0s 364359790e-09 1s 1s 364365350e-09 0s 0s 364369990e-09 0s 0s 364370030e-09 1s 1s 364375590e-09 0s 0s 364380270e-09 1s 1s 364380310e-09 1s 1s 364385870e-09 0s 0s 364390510e-09 1s 1s 364390590e-09 1s 1s 364396110e-09 0s 0s 364400750e-09 1s 1s 364400870e-09 1s 1s 364406350e-09 0s 0s 364410990e-09 1s 1s 364411150e-09 1s 1s 364416590e-09 0s 0s 364421230e-09 1s 1s 364421430e-09 1s 1s 364426830e-09 0s 0s 364431470e-09 1s 1s 364431710e-09 1s 1s 364437070e-09 0s 0s 364441710e-09 1s 1s 364441990e-09 1s 1s 364447310e-09 0s 0s 364451950e-09 1s 1s 364452270e-09 1s 1s 364457550e-09 0s 0s 364462190e-09 1s 1s 364462550e-09 1s 1s 364467790e-09 0s 0s 364472430e-09 1s 1s 364472830e-09 1s 1s 364478030e-09 0s 0s 364482670e-09 1s 1s 364483110e-09 1s 1s 364488270e-09 0s 0s 364492910e-09 1s 1s 364493390e-09 1s 1s 364498510e-09 0s 0s 364503150e-09 1s 1s 364503670e-09 1s 1s 364508750e-09 0s 0s 364513390e-09 1s 1s 364513950e-09 1s 1s 364518990e-09 0s 0s 364523630e-09 1s 1s 364524230e-09 1s 1s 364529230e-09 0s 0s 364533870e-09 1s 1s 364534510e-09 1s 1s 364539470e-09 0s 0s 364544110e-09 1s 1s 364544790e-09 1s 1s 364549710e-09 0s 0s 364554350e-09 1s 1s 364555070e-09 1s 1s 364559950e-09 0s 0s 364564590e-09 1s 1s 364565350e-09 1s 1s 364570190e-09 0s 0s 364574830e-09 1s 1s 364575630e-09 1s 1s 364580430e-09 0s 0s 364585070e-09 1s 1s 364585910e-09 1s 1s 364590670e-09 0s 0s 364595310e-09 1s 1s 364596190e-09 1s 1s 364600910e-09 0s 0s 364605550e-09 1s 1s 364606470e-09 1s 1s 364611150e-09 0s 0s 364615790e-09 1s 1s 364616750e-09 1s 1s 364621390e-09 0s 0s 364626030e-09 1s 1s 364627030e-09 1s 1s 364631630e-09 0s 0s 364636270e-09 1s 1s 364637310e-09 1s 1s 364641870e-09 0s 0s 364646510e-09 1s 1s 364647590e-09 1s 1s 364652110e-09 0s 0s 364656750e-09 1s 1s 364657870e-09 1s 1s 364662350e-09 0s 0s 364666990e-09 1s 1s 364668150e-09 1s 1s 364672590e-09 0s 0s 364677230e-09 1s 1s 364678430e-09 1s 1s 364682830e-09 0s 0s 364687470e-09 1s 1s 364688710e-09 1s 1s 364693070e-09 0s 0s 364697710e-09 1s 1s 364698990e-09 1s 1s 364703310e-09 0s 0s 364707950e-09 1s 1s 364709270e-09 1s 1s 364713550e-09 0s 0s 364718190e-09 1s 1s 364719550e-09 1s 1s 364723790e-09 0s 0s 364728430e-09 1s 1s 364729830e-09 1s 1s 364734030e-09 0s 0s 364738670e-09 1s 1s 364740110e-09 1s 1s 364744270e-09 0s 0s 364748910e-09 1s 1s 364750390e-09 1s 1s 364754510e-09 0s 0s 364759150e-09 1s 1s 364760670e-09 1s 1s 364764750e-09 0s 0s 364769390e-09 1s 1s 364770950e-09 1s 1s 364774990e-09 0s 0s 364779630e-09 1s 1s 364781230e-09 1s 1s 364785230e-09 0s 0s 364789870e-09 1s 1s 364791510e-09 1s 1s 364795470e-09 0s 0s 364800110e-09 1s 1s 364801790e-09 1s 1s 364805710e-09 0s 0s 364810350e-09 1s 1s 364812070e-09 1s 1s 364815950e-09 0s 0s 364820590e-09 1s 1s 364822350e-09 1s 1s 364826190e-09 0s 0s 364830830e-09 1s 1s 364832630e-09 1s 1s 364836430e-09 0s 0s 364841070e-09 1s 1s 364842910e-09 1s 1s 364846670e-09 0s 0s 364851310e-09 1s 1s 364853190e-09 1s 1s 364856910e-09 0s 0s 364861550e-09 1s 1s 364863470e-09 1s 1s 364867150e-09 0s 0s 364871790e-09 1s 1s 364873750e-09 1s 1s 364877390e-09 0s 0s 364882030e-09 1s 1s 364884030e-09 1s 1s 364887630e-09 0s 0s 364892270e-09 1s 1s 364894310e-09 1s 1s 364897870e-09 0s 0s 364902510e-09 1s 1s 364904590e-09 1s 1s 364908110e-09 0s 0s 364912750e-09 1s 1s 364914870e-09 1s 1s 364918350e-09 0s 0s 364922990e-09 1s 1s 364925150e-09 1s 1s 364928590e-09 0s 0s 364933230e-09 1s 1s 364935430e-09 1s 1s 364938830e-09 0s 0s 364943470e-09 1s 1s 364945710e-09 1s 1s 364949070e-09 0s 0s 364953710e-09 1s 1s 364955990e-09 1s 1s 364959310e-09 0s 0s 364963950e-09 1s 1s 364966270e-09 1s 1s 364969550e-09 0s 0s 364974190e-09 1s 1s 364976550e-09 1s 1s 364979790e-09 0s 0s 364984430e-09 1s 1s 364986830e-09 1s 1s 364990030e-09 0s 0s 364994670e-09 1s 1s 364997110e-09 1s 1s 365000270e-09 0s 0s 365004910e-09 1s 1s 365007390e-09 1s 1s 365010510e-09 0s 0s 365015150e-09 1s 1s 365017670e-09 1s 1s 365020750e-09 0s 0s 365025390e-09 1s 1s 365027950e-09 1s 1s 365030990e-09 0s 0s 365035630e-09 1s 1s 365038230e-09 1s 1s 365041230e-09 0s 0s 365045870e-09 1s 1s 365048510e-09 1s 1s 365051470e-09 0s 0s 365056110e-09 1s 1s 365058790e-09 1s 1s 365061710e-09 0s 0s 365066350e-09 1s 1s 365069070e-09 1s 1s 365071950e-09 0s 0s 365076590e-09 1s 1s 365079350e-09 1s 1s 365082190e-09 0s 0s 365086830e-09 1s 1s 365089630e-09 1s 1s 365092430e-09 0s 0s 365097070e-09 1s 1s 365099910e-09 1s 1s 365102670e-09 0s 0s 365107310e-09 1s 1s 365110190e-09 1s 1s 365112910e-09 0s 0s 365117550e-09 1s 1s 365120470e-09 1s 1s 365123150e-09 0s 0s 365127790e-09 1s 1s 365130750e-09 1s 1s 365133390e-09 0s 0s 365138030e-09 1s 1s 365141030e-09 1s 1s 365143630e-09 0s 0s 365148270e-09 1s 1s 365151310e-09 1s 1s 365153870e-09 0s 0s 365158510e-09 1s 1s 365161590e-09 1s 1s 365164110e-09 0s 0s 365168750e-09 1s 1s 365171870e-09 1s 1s 365174350e-09 0s 0s 365178990e-09 1s 1s 365182150e-09 1s 1s 365184590e-09 0s 0s 365189230e-09 1s 1s 365192430e-09 1s 1s 365194830e-09 0s 0s 365199470e-09 1s 1s 365202710e-09 1s 1s 365205070e-09 0s 0s 365209710e-09 1s 1s 365212990e-09 1s 1s 365215310e-09 0s 0s 365219950e-09 1s 1s 365223270e-09 1s 1s 365225550e-09 0s 0s 365230190e-09 1s 1s 365233550e-09 1s 1s 365235790e-09 0s 0s 365240430e-09 1s 1s 365243830e-09 1s 1s 365246030e-09 0s 0s 365250670e-09 1s 1s 365254110e-09 1s 1s 365256270e-09 0s 0s 365260910e-09 1s 1s 365264390e-09 1s 1s 365266510e-09 0s 0s 365271150e-09 1s 1s 365274670e-09 1s 1s 365276750e-09 0s 0s 365281390e-09 1s 1s 365284950e-09 1s 1s 365286990e-09 0s 0s 365291630e-09 1s 1s 365295230e-09 1s 1s 365297230e-09 0s 0s 365301870e-09 1s 1s 365305510e-09 1s 1s 365307470e-09 0s 0s 365312110e-09 1s 1s 365315790e-09 1s 1s 365317710e-09 0s 0s 365322350e-09 1s 1s 365326070e-09 1s 1s 365327950e-09 0s 0s 365332590e-09 1s 1s 365336350e-09 1s 1s 365338190e-09 0s 0s 365342830e-09 1s 1s 365346630e-09 1s 1s 365348430e-09 0s 0s 365353070e-09 1s 1s 365356910e-09 1s 1s 365358670e-09 0s 0s 365363310e-09 1s 1s 365367190e-09 1s 1s 365368910e-09 0s 0s 365373550e-09 1s 1s 365377470e-09 1s 1s 365379150e-09 0s 0s 365383790e-09 1s 1s 365387750e-09 1s 1s 365389390e-09 0s 0s 365394030e-09 1s 1s 365398030e-09 1s 1s 365399630e-09 0s 0s 365404270e-09 1s 1s 365408310e-09 1s 1s 365409870e-09 0s 0s 365414510e-09 1s 1s 365418590e-09 1s 1s 365420110e-09 0s 0s 365424750e-09 1s 1s 365428870e-09 1s 1s 365430350e-09 0s 0s 365434990e-09 1s 1s 365439150e-09 1s 1s 365440590e-09 0s 0s 365445230e-09 1s 1s 365449430e-09 1s 1s 365450830e-09 0s 0s 365455470e-09 1s 1s 365459710e-09 1s 1s 365461070e-09 0s 0s 365465710e-09 1s 1s 365469990e-09 1s 1s 365471310e-09 0s 0s 365475950e-09 1s 1s 365480270e-09 1s 1s 365481550e-09 0s 0s 365486190e-09 1s 1s 365490550e-09 1s 1s 365491790e-09 0s 0s 365496430e-09 1s 1s 365500830e-09 1s 1s 365502030e-09 0s 0s 365506670e-09 1s 1s 365511110e-09 1s 1s 365512270e-09 0s 0s 365516910e-09 1s 1s 365521390e-09 1s 1s 365522510e-09 0s 0s 365527150e-09 1s 1s 365531670e-09 1s 1s 365532750e-09 0s 0s 365537390e-09 1s 1s 365541950e-09 1s 1s 365542990e-09 0s 0s 365547630e-09 1s 1s 365552230e-09 1s 1s 365553230e-09 0s 0s 365557870e-09 1s 1s 365562510e-09 1s 1s 365563470e-09 0s 0s 365568110e-09 1s 1s 365572790e-09 1s 1s 365573710e-09 0s 0s 365578350e-09 1s 1s 365583070e-09 1s 1s 365583950e-09 0s 0s 365588590e-09 1s 1s 365593350e-09 1s 1s 365594190e-09 0s 0s 365598830e-09 1s 1s 365603630e-09 1s 1s 365604430e-09 0s 0s 365609070e-09 1s 1s 365613910e-09 1s 1s 365614670e-09 0s 0s 365619310e-09 1s 1s 365624190e-09 1s 1s 365624910e-09 0s 0s 365629550e-09 1s 1s 365634470e-09 1s 1s 365635150e-09 0s 0s 365639790e-09 1s 1s 365644750e-09 1s 1s 365645390e-09 0s 0s 365650030e-09 1s 1s 365655030e-09 1s 1s 365655630e-09 0s 0s 365660270e-09 1s 1s 365665310e-09 1s 1s 365665870e-09 0s 0s 365670510e-09 1s 1s 365675590e-09 1s 1s 365676110e-09 0s 0s 365680750e-09 1s 1s 365685870e-09 1s 1s 365686350e-09 0s 0s 365690990e-09 1s 1s 365696150e-09 1s 1s 365696590e-09 0s 0s 365701230e-09 1s 1s 365706430e-09 1s 1s 365706830e-09 0s 0s 365711470e-09 1s 1s 365716710e-09 1s 1s 365717070e-09 0s 0s 365721710e-09 1s 1s 365726990e-09 1s 1s 365727310e-09 0s 0s 365731950e-09 1s 1s 365737270e-09 1s 1s 365737550e-09 0s 0s 365742190e-09 1s 1s 365747550e-09 1s 1s 365747790e-09 0s 0s 365752430e-09 1s 1s 365757830e-09 1s 1s 365758030e-09 0s 0s 365762670e-09 1s 1s 365768110e-09 1s 1s 365768270e-09 0s 0s 365772910e-09 1s 1s 365778390e-09 1s 1s 365778510e-09 0s 0s 365783150e-09 1s 1s 365788670e-09 1s 1s 365788750e-09 0s 0s 365793390e-09 1s 1s 365798950e-09 1s 1s 365798990e-09 0s 0s 365803630e-09 1s 1s 365809230e-09 0s 0s 365813870e-09 1s 1s 365819470e-09 0s 0s 365819510e-09 0s 0s 365824110e-09 1s 1s 365829710e-09 0s 0s 365829790e-09 0s 0s 365834350e-09 1s 1s 365839950e-09 0s 0s 365840070e-09 0s 0s 365844590e-09 1s 1s 365850190e-09 0s 0s 365850350e-09 0s 0s 365854830e-09 1s 1s 365860430e-09 0s 0s 365860630e-09 0s 0s 365865070e-09 1s 1s 365870670e-09 0s 0s 365870910e-09 0s 0s 365875310e-09 1s 1s 365880910e-09 0s 0s 365881190e-09 0s 0s 365885550e-09 1s 1s 365891150e-09 0s 0s 365891470e-09 0s 0s 365895790e-09 1s 1s 365901390e-09 0s 0s 365901750e-09 0s 0s 365906030e-09 1s 1s 365911630e-09 0s 0s 365912030e-09 0s 0s 365916270e-09 1s 1s 365921870e-09 0s 0s 365922310e-09 0s 0s 365926510e-09 1s 1s 365932110e-09 0s 0s 365932590e-09 0s 0s 365936750e-09 1s 1s 365942350e-09 0s 0s 365942870e-09 0s 0s 365946990e-09 1s 1s 365952590e-09 0s 0s 365953150e-09 0s 0s 365957230e-09 1s 1s 365962830e-09 0s 0s 365963430e-09 0s 0s 365967470e-09 1s 1s 365973070e-09 0s 0s 365973710e-09 0s 0s 365977710e-09 1s 1s 365983310e-09 0s 0s 365983990e-09 0s 0s 365987950e-09 1s 1s 365993550e-09 0s 0s 365994270e-09 0s 0s 365998190e-09 1s 1s 366003790e-09 0s 0s 366004550e-09 0s 0s 366008430e-09 1s 1s 366014030e-09 0s 0s 366014830e-09 0s 0s 366018670e-09 1s 1s 366024270e-09 0s 0s 366025110e-09 0s 0s 366028910e-09 1s 1s 366034510e-09 0s 0s 366035390e-09 0s 0s 366039150e-09 1s 1s 366044750e-09 0s 0s 366045670e-09 0s 0s 366049390e-09 1s 1s 366054990e-09 0s 0s 366055950e-09 0s 0s 366059630e-09 1s 1s 366065230e-09 0s 0s 366066230e-09 0s 0s 366069870e-09 1s 1s 366075470e-09 0s 0s 366076510e-09 0s 0s 366080110e-09 1s 1s 366085710e-09 0s 0s 366086790e-09 0s 0s 366090350e-09 1s 1s 366095950e-09 0s 0s 366097070e-09 0s 0s 366100590e-09 1s 1s 366106190e-09 0s 0s 366107350e-09 0s 0s 366110830e-09 1s 1s 366116430e-09 0s 0s 366117630e-09 0s 0s 366121070e-09 1s 1s 366126670e-09 0s 0s 366127910e-09 0s 0s 366131310e-09 1s 1s 366136910e-09 0s 0s 366138190e-09 0s 0s 366141550e-09 1s 1s 366147150e-09 0s 0s 366148470e-09 0s 0s 366151790e-09 1s 1s 366157390e-09 0s 0s 366158750e-09 0s 0s 366162030e-09 1s 1s 366167630e-09 0s 0s 366169030e-09 0s 0s 366172270e-09 1s 1s 366177870e-09 0s 0s 366179310e-09 0s 0s 366182510e-09 1s 1s 366188110e-09 0s 0s 366189590e-09 0s 0s 366192750e-09 1s 1s 366198350e-09 0s 0s 366199870e-09 0s 0s 366202990e-09 1s 1s 366208590e-09 0s 0s 366210150e-09 0s 0s 366213230e-09 1s 1s 366218830e-09 0s 0s 366220430e-09 0s 0s 366223470e-09 1s 1s 366229070e-09 0s 0s 366230710e-09 0s 0s 366233710e-09 1s 1s 366239310e-09 0s 0s 366240990e-09 0s 0s 366243950e-09 1s 1s 366249550e-09 0s 0s 366251270e-09 0s 0s 366254190e-09 1s 1s 366259790e-09 0s 0s 366261550e-09 0s 0s 366264430e-09 1s 1s 366270030e-09 0s 0s 366271830e-09 0s 0s 366274670e-09 1s 1s 366280270e-09 0s 0s 366282110e-09 0s 0s 366284910e-09 1s 1s 366290510e-09 0s 0s 366292390e-09 0s 0s 366295150e-09 1s 1s 366300750e-09 0s 0s 366302670e-09 0s 0s 366305390e-09 1s 1s 366310990e-09 0s 0s 366312950e-09 0s 0s 366315630e-09 1s 1s 366321230e-09 0s 0s 366323230e-09 0s 0s 366325870e-09 1s 1s 366331470e-09 0s 0s 366333510e-09 0s 0s 366336110e-09 1s 1s 366341710e-09 0s 0s 366343790e-09 0s 0s 366346350e-09 1s 1s 366351950e-09 0s 0s 366354070e-09 0s 0s 366356590e-09 1s 1s 366362190e-09 0s 0s 366364350e-09 0s 0s 366366830e-09 1s 1s 366372430e-09 0s 0s 366374630e-09 0s 0s 366377070e-09 1s 1s 366382670e-09 0s 0s 366384910e-09 0s 0s 366387310e-09 1s 1s 366392910e-09 0s 0s 366395190e-09 0s 0s 366397550e-09 1s 1s 366403150e-09 0s 0s 366405470e-09 0s 0s 366407790e-09 1s 1s 366413390e-09 0s 0s 366415750e-09 0s 0s 366418030e-09 1s 1s 366423630e-09 0s 0s 366426030e-09 0s 0s 366428270e-09 1s 1s 366433870e-09 0s 0s 366436310e-09 0s 0s 366438510e-09 1s 1s 366444110e-09 0s 0s 366446590e-09 0s 0s 366448750e-09 1s 1s 366454350e-09 0s 0s 366456870e-09 0s 0s 366458990e-09 1s 1s 366464590e-09 0s 0s 366467150e-09 0s 0s 366469230e-09 1s 1s 366474830e-09 0s 0s 366477430e-09 0s 0s 366479470e-09 1s 1s 366485070e-09 0s 0s 366487710e-09 0s 0s 366489710e-09 1s 1s 366495310e-09 0s 0s 366497990e-09 0s 0s 366499950e-09 1s 1s 366505550e-09 0s 0s 366508270e-09 0s 0s 366510190e-09 1s 1s 366515790e-09 0s 0s 366518550e-09 0s 0s 366520430e-09 1s 1s 366526030e-09 0s 0s 366528830e-09 0s 0s 366530670e-09 1s 1s 366536270e-09 0s 0s 366539110e-09 0s 0s 366540910e-09 1s 1s 366546510e-09 0s 0s 366549390e-09 0s 0s 366551150e-09 1s 1s 366556750e-09 0s 0s 366559670e-09 0s 0s 366561390e-09 1s 1s 366566990e-09 0s 0s 366569950e-09 0s 0s 366571630e-09 1s 1s 366577230e-09 0s 0s 366580230e-09 0s 0s 366581870e-09 1s 1s 366587470e-09 0s 0s 366590510e-09 0s 0s 366592110e-09 1s 1s 366597710e-09 0s 0s 366600790e-09 0s 0s 366602350e-09 1s 1s 366607950e-09 0s 0s 366611070e-09 0s 0s 366612590e-09 1s 1s 366618190e-09 0s 0s 366621350e-09 0s 0s 366622830e-09 1s 1s 366628430e-09 0s 0s 366631630e-09 0s 0s 366633070e-09 1s 1s 366638670e-09 0s 0s 366641910e-09 0s 0s 366643310e-09 1s 1s 366648910e-09 0s 0s 366652190e-09 0s 0s 366653550e-09 1s 1s 366659150e-09 0s 0s 366662470e-09 0s 0s 366663790e-09 1s 1s 366669390e-09 0s 0s 366672750e-09 0s 0s 366674030e-09 1s 1s 366679630e-09 0s 0s 366683030e-09 0s 0s 366684270e-09 1s 1s 366689870e-09 0s 0s 366693310e-09 0s 0s 366694510e-09 1s 1s 366700110e-09 0s 0s 366703590e-09 0s 0s 366704750e-09 1s 1s 366710350e-09 0s 0s 366713870e-09 0s 0s 366714990e-09 1s 1s 366720590e-09 0s 0s 366724150e-09 0s 0s 366725230e-09 1s 1s 366730830e-09 0s 0s 366734430e-09 0s 0s 366735470e-09 1s 1s 366741070e-09 0s 0s 366744710e-09 0s 0s 366745710e-09 1s 1s 366751310e-09 0s 0s 366754990e-09 0s 0s 366755950e-09 1s 1s 366761550e-09 0s 0s 366765270e-09 0s 0s 366766190e-09 1s 1s 366771790e-09 0s 0s 366775550e-09 0s 0s 366776430e-09 1s 1s 366782030e-09 0s 0s 366785830e-09 0s 0s 366786670e-09 1s 1s 366792270e-09 0s 0s 366796110e-09 0s 0s 366796910e-09 1s 1s 366802510e-09 0s 0s 366806390e-09 0s 0s 366807150e-09 1s 1s 366812750e-09 0s 0s 366816670e-09 0s 0s 366817390e-09 1s 1s 366822990e-09 0s 0s 366826950e-09 0s 0s 366827630e-09 1s 1s 366833230e-09 0s 0s 366837230e-09 0s 0s 366837870e-09 1s 1s 366843470e-09 0s 0s 366847510e-09 0s 0s 366848110e-09 1s 1s 366853710e-09 0s 0s 366857790e-09 0s 0s 366858350e-09 1s 1s 366863950e-09 0s 0s 366868070e-09 0s 0s 366868590e-09 1s 1s 366874190e-09 0s 0s 366878350e-09 0s 0s 366878830e-09 1s 1s 366884430e-09 0s 0s 366888630e-09 0s 0s 366889070e-09 1s 1s 366894670e-09 0s 0s 366898910e-09 0s 0s 366899310e-09 1s 1s 366904910e-09 0s 0s 366909190e-09 0s 0s 366909550e-09 1s 1s 366915150e-09 0s 0s 366919470e-09 0s 0s 366919790e-09 1s 1s 366925390e-09 0s 0s 366929750e-09 0s 0s 366930030e-09 1s 1s 366935630e-09 0s 0s 366940030e-09 0s 0s 366940270e-09 1s 1s 366945870e-09 0s 0s 366950310e-09 0s 0s 366950510e-09 1s 1s 366956110e-09 0s 0s 366960590e-09 0s 0s 366960750e-09 1s 1s 366966350e-09 0s 0s 366970870e-09 0s 0s 366970990e-09 1s 1s 366976590e-09 0s 0s 366981150e-09 0s 0s 366981230e-09 1s 1s 366986830e-09 0s 0s 366991430e-09 0s 0s 366991470e-09 1s 1s 366997070e-09 0s 0s 367001710e-09 1s 1s 367001750e-09 1s 1s 367007350e-09 0s 0s 367011950e-09 1s 1s 367012030e-09 1s 1s 367017590e-09 0s 0s 367022190e-09 1s 1s 367022310e-09 1s 1s 367027830e-09 0s 0s 367032430e-09 1s 1s 367032590e-09 1s 1s 367038070e-09 0s 0s 367042670e-09 1s 1s 367042870e-09 1s 1s 367048310e-09 0s 0s 367052910e-09 1s 1s 367053150e-09 1s 1s 367058550e-09 0s 0s 367063150e-09 1s 1s 367063430e-09 1s 1s 367068790e-09 0s 0s 367073390e-09 1s 1s 367073710e-09 1s 1s 367079030e-09 0s 0s 367083630e-09 1s 1s 367083990e-09 1s 1s 367089270e-09 0s 0s 367093870e-09 1s 1s 367094270e-09 1s 1s 367099510e-09 0s 0s 367104110e-09 1s 1s 367104550e-09 1s 1s 367109750e-09 0s 0s 367114350e-09 1s 1s 367114830e-09 1s 1s 367119990e-09 0s 0s 367124590e-09 1s 1s 367125110e-09 1s 1s 367130230e-09 0s 0s 367134830e-09 1s 1s 367135390e-09 1s 1s 367140470e-09 0s 0s 367145070e-09 1s 1s 367145670e-09 1s 1s 367150710e-09 0s 0s 367155310e-09 1s 1s 367155950e-09 1s 1s 367160950e-09 0s 0s 367165550e-09 1s 1s 367166230e-09 1s 1s 367171190e-09 0s 0s 367175790e-09 1s 1s 367176510e-09 1s 1s 367181430e-09 0s 0s 367186030e-09 1s 1s 367186790e-09 1s 1s 367191670e-09 0s 0s 367196270e-09 1s 1s 367197070e-09 1s 1s 367201910e-09 0s 0s 367206510e-09 1s 1s 367207350e-09 1s 1s 367212150e-09 0s 0s 367216750e-09 1s 1s 367217630e-09 1s 1s 367222390e-09 0s 0s 367226990e-09 1s 1s 367227910e-09 1s 1s 367232630e-09 0s 0s 367237230e-09 1s 1s 367238190e-09 1s 1s 367242870e-09 0s 0s 367247470e-09 1s 1s 367248470e-09 1s 1s 367253110e-09 0s 0s 367257710e-09 1s 1s 367258750e-09 1s 1s 367263350e-09 0s 0s 367267950e-09 1s 1s 367269030e-09 1s 1s 367273590e-09 0s 0s 367278190e-09 1s 1s 367279310e-09 1s 1s 367283830e-09 0s 0s 367288430e-09 1s 1s 367289590e-09 1s 1s 367294070e-09 0s 0s 367298670e-09 1s 1s 367299870e-09 1s 1s 367304310e-09 0s 0s 367308910e-09 1s 1s 367310150e-09 1s 1s 367314550e-09 0s 0s 367319150e-09 1s 1s 367320430e-09 1s 1s 367324790e-09 0s 0s 367329390e-09 1s 1s 367330710e-09 1s 1s 367335030e-09 0s 0s 367339630e-09 1s 1s 367340990e-09 1s 1s 367345270e-09 0s 0s 367349870e-09 1s 1s 367351270e-09 1s 1s 367355510e-09 0s 0s 367360110e-09 1s 1s 367361550e-09 1s 1s 367365750e-09 0s 0s 367370350e-09 1s 1s 367371830e-09 1s 1s 367375990e-09 0s 0s 367380590e-09 1s 1s 367382110e-09 1s 1s 367386230e-09 0s 0s 367390830e-09 1s 1s 367392390e-09 1s 1s 367396470e-09 0s 0s 367401070e-09 1s 1s 367402670e-09 1s 1s 367406710e-09 0s 0s 367411310e-09 1s 1s 367412950e-09 1s 1s 367416950e-09 0s 0s 367421550e-09 1s 1s 367423230e-09 1s 1s 367427190e-09 0s 0s 367431790e-09 1s 1s 367433510e-09 1s 1s 367437430e-09 0s 0s 367442030e-09 1s 1s 367443790e-09 1s 1s 367447670e-09 0s 0s 367452270e-09 1s 1s 367454070e-09 1s 1s 367457910e-09 0s 0s 367462510e-09 1s 1s 367464350e-09 1s 1s 367468150e-09 0s 0s 367472750e-09 1s 1s 367474630e-09 1s 1s 367478390e-09 0s 0s 367482990e-09 1s 1s 367484910e-09 1s 1s 367488630e-09 0s 0s 367493230e-09 1s 1s 367495190e-09 1s 1s 367498870e-09 0s 0s 367503470e-09 1s 1s 367505470e-09 1s 1s 367509110e-09 0s 0s 367513710e-09 1s 1s 367515750e-09 1s 1s 367519350e-09 0s 0s 367523950e-09 1s 1s 367526030e-09 1s 1s 367529590e-09 0s 0s 367534190e-09 1s 1s 367536310e-09 1s 1s 367539830e-09 0s 0s 367544430e-09 1s 1s 367546590e-09 1s 1s 367550070e-09 0s 0s 367554670e-09 1s 1s 367556870e-09 1s 1s 367560310e-09 0s 0s 367564910e-09 1s 1s 367567150e-09 1s 1s 367570550e-09 0s 0s 367575150e-09 1s 1s 367577430e-09 1s 1s 367580790e-09 0s 0s 367585390e-09 1s 1s 367587710e-09 1s 1s 367591030e-09 0s 0s 367595630e-09 1s 1s 367597990e-09 1s 1s 367601270e-09 0s 0s 367605870e-09 1s 1s 367608270e-09 1s 1s 367611510e-09 0s 0s 367616110e-09 1s 1s 367618550e-09 1s 1s 367621750e-09 0s 0s 367626350e-09 1s 1s 367628830e-09 1s 1s 367631990e-09 0s 0s 367636590e-09 1s 1s 367639110e-09 1s 1s 367642230e-09 0s 0s 367646830e-09 1s 1s 367649390e-09 1s 1s 367652470e-09 0s 0s 367657070e-09 1s 1s 367659670e-09 1s 1s 367662710e-09 0s 0s 367667310e-09 1s 1s 367669950e-09 1s 1s 367672950e-09 0s 0s 367677550e-09 1s 1s 367680230e-09 1s 1s 367683190e-09 0s 0s 367687790e-09 1s 1s 367690510e-09 1s 1s 367693430e-09 0s 0s 367698030e-09 1s 1s 367700790e-09 1s 1s 367703670e-09 0s 0s 367708270e-09 1s 1s 367711070e-09 1s 1s 367713910e-09 0s 0s 367718510e-09 1s 1s 367721350e-09 1s 1s 367724150e-09 0s 0s 367728750e-09 1s 1s 367731630e-09 1s 1s 367734390e-09 0s 0s 367738990e-09 1s 1s 367741910e-09 1s 1s 367744630e-09 0s 0s 367749230e-09 1s 1s 367752190e-09 1s 1s 367754870e-09 0s 0s 367759470e-09 1s 1s 367762470e-09 1s 1s 367765110e-09 0s 0s 367769710e-09 1s 1s 367772750e-09 1s 1s 367775350e-09 0s 0s 367779950e-09 1s 1s 367783030e-09 1s 1s 367785590e-09 0s 0s 367790190e-09 1s 1s 367793310e-09 1s 1s 367795830e-09 0s 0s 367800430e-09 1s 1s 367803590e-09 1s 1s 367806070e-09 0s 0s 367810670e-09 1s 1s 367813870e-09 1s 1s 367816310e-09 0s 0s 367820910e-09 1s 1s 367824150e-09 1s 1s 367826550e-09 0s 0s 367831150e-09 1s 1s 367834430e-09 1s 1s 367836790e-09 0s 0s 367841390e-09 1s 1s 367844710e-09 1s 1s 367847030e-09 0s 0s 367851630e-09 1s 1s 367854990e-09 1s 1s 367857270e-09 0s 0s 367861870e-09 1s 1s 367865270e-09 1s 1s 367867510e-09 0s 0s 367872110e-09 1s 1s 367875550e-09 1s 1s 367877750e-09 0s 0s 367882350e-09 1s 1s 367885830e-09 1s 1s 367887990e-09 0s 0s 367892590e-09 1s 1s 367896110e-09 1s 1s 367898230e-09 0s 0s 367902830e-09 1s 1s 367906390e-09 1s 1s 367908470e-09 0s 0s 367913070e-09 1s 1s 367916670e-09 1s 1s 367918710e-09 0s 0s 367923310e-09 1s 1s 367926950e-09 1s 1s 367928950e-09 0s 0s 367933550e-09 1s 1s 367937230e-09 1s 1s 367939190e-09 0s 0s 367943790e-09 1s 1s 367947510e-09 1s 1s 367949430e-09 0s 0s 367954030e-09 1s 1s 367957790e-09 1s 1s 367959670e-09 0s 0s 367964270e-09 1s 1s 367968070e-09 1s 1s 367969910e-09 0s 0s 367974510e-09 1s 1s 367978350e-09 1s 1s 367980150e-09 0s 0s 367984750e-09 1s 1s 367988630e-09 1s 1s 367990390e-09 0s 0s 367994990e-09 1s 1s 367998910e-09 1s 1s 368000630e-09 0s 0s 368005230e-09 1s 1s 368009190e-09 1s 1s 368010870e-09 0s 0s 368015470e-09 1s 1s 368019470e-09 1s 1s 368021110e-09 0s 0s 368025710e-09 1s 1s 368029750e-09 1s 1s 368031350e-09 0s 0s 368035950e-09 1s 1s 368040030e-09 1s 1s 368041590e-09 0s 0s 368046190e-09 1s 1s 368050310e-09 1s 1s 368051830e-09 0s 0s 368056430e-09 1s 1s 368060590e-09 1s 1s 368062070e-09 0s 0s 368066670e-09 1s 1s 368070870e-09 1s 1s 368072310e-09 0s 0s 368076910e-09 1s 1s 368081150e-09 1s 1s 368082550e-09 0s 0s 368087150e-09 1s 1s 368091430e-09 1s 1s 368092790e-09 0s 0s 368097390e-09 1s 1s 368101710e-09 1s 1s 368103030e-09 0s 0s 368107630e-09 1s 1s 368111990e-09 1s 1s 368113270e-09 0s 0s 368117870e-09 1s 1s 368122270e-09 1s 1s 368123510e-09 0s 0s 368128110e-09 1s 1s 368132550e-09 1s 1s 368133750e-09 0s 0s 368138350e-09 1s 1s 368142830e-09 1s 1s 368143990e-09 0s 0s 368148590e-09 1s 1s 368153110e-09 1s 1s 368154230e-09 0s 0s 368158830e-09 1s 1s 368163390e-09 1s 1s 368164470e-09 0s 0s 368169070e-09 1s 1s 368173670e-09 1s 1s 368174710e-09 0s 0s 368179310e-09 1s 1s 368183950e-09 1s 1s 368184950e-09 0s 0s 368189550e-09 1s 1s 368194230e-09 1s 1s 368195190e-09 0s 0s 368199790e-09 1s 1s 368204510e-09 1s 1s 368205430e-09 0s 0s 368210030e-09 1s 1s 368214790e-09 1s 1s 368215670e-09 0s 0s 368220270e-09 1s 1s 368225070e-09 1s 1s 368225910e-09 0s 0s 368230510e-09 1s 1s 368235350e-09 1s 1s 368236150e-09 0s 0s 368240750e-09 1s 1s 368245630e-09 1s 1s 368246390e-09 0s 0s 368250990e-09 1s 1s 368255910e-09 1s 1s 368256630e-09 0s 0s 368261230e-09 1s 1s 368266190e-09 1s 1s 368266870e-09 0s 0s 368271470e-09 1s 1s 368276470e-09 1s 1s 368277110e-09 0s 0s 368281710e-09 1s 1s 368286750e-09 1s 1s 368287350e-09 0s 0s 368291950e-09 1s 1s 368297030e-09 1s 1s 368297590e-09 0s 0s 368302190e-09 1s 1s 368307310e-09 1s 1s 368307830e-09 0s 0s 368312430e-09 1s 1s 368317590e-09 1s 1s 368318070e-09 0s 0s 368322670e-09 1s 1s 368327870e-09 1s 1s 368328310e-09 0s 0s 368332910e-09 1s 1s 368338150e-09 1s 1s 368338550e-09 0s 0s 368343150e-09 1s 1s 368348430e-09 1s 1s 368348790e-09 0s 0s 368353390e-09 1s 1s 368358710e-09 1s 1s 368359030e-09 0s 0s 368363630e-09 1s 1s 368368990e-09 1s 1s 368369270e-09 0s 0s 368373870e-09 1s 1s 368379270e-09 1s 1s 368379510e-09 0s 0s 368384110e-09 1s 1s 368389550e-09 1s 1s 368389750e-09 0s 0s 368394350e-09 1s 1s 368399830e-09 1s 1s 368399990e-09 0s 0s 368404590e-09 1s 1s 368410110e-09 1s 1s 368410230e-09 0s 0s 368414830e-09 1s 1s 368420390e-09 1s 1s 368420470e-09 0s 0s 368425070e-09 1s 1s 368430670e-09 1s 1s 368430710e-09 0s 0s 368435310e-09 1s 1s 368440950e-09 0s 0s 368445550e-09 1s 1s 368451190e-09 0s 0s 368451230e-09 0s 0s 368455790e-09 1s 1s 368461430e-09 0s 0s 368461510e-09 0s 0s 368466030e-09 1s 1s 368471670e-09 0s 0s 368471790e-09 0s 0s 368476270e-09 1s 1s 368481910e-09 0s 0s 368482070e-09 0s 0s 368486510e-09 1s 1s 368492150e-09 0s 0s 368492350e-09 0s 0s 368496750e-09 1s 1s 368502390e-09 0s 0s 368502630e-09 0s 0s 368506990e-09 1s 1s 368512630e-09 0s 0s 368512910e-09 0s 0s 368517230e-09 1s 1s 368522870e-09 0s 0s 368523190e-09 0s 0s 368527470e-09 1s 1s 368533110e-09 0s 0s 368533470e-09 0s 0s 368537710e-09 1s 1s 368543350e-09 0s 0s 368543750e-09 0s 0s 368547950e-09 1s 1s 368553590e-09 0s 0s 368554030e-09 0s 0s 368558190e-09 1s 1s 368563830e-09 0s 0s 368564310e-09 0s 0s 368568430e-09 1s 1s 368574070e-09 0s 0s 368574590e-09 0s 0s 368578670e-09 1s 1s 368584310e-09 0s 0s 368584870e-09 0s 0s 368588910e-09 1s 1s 368594550e-09 0s 0s 368595150e-09 0s 0s 368599150e-09 1s 1s 368604790e-09 0s 0s 368605430e-09 0s 0s 368609390e-09 1s 1s 368615030e-09 0s 0s 368615710e-09 0s 0s 368619630e-09 1s 1s 368625270e-09 0s 0s 368625990e-09 0s 0s 368629870e-09 1s 1s 368635510e-09 0s 0s 368636270e-09 0s 0s 368640110e-09 1s 1s 368645750e-09 0s 0s 368646550e-09 0s 0s 368650350e-09 1s 1s 368655990e-09 0s 0s 368656830e-09 0s 0s 368660590e-09 1s 1s 368666230e-09 0s 0s 368667110e-09 0s 0s 368670830e-09 1s 1s 368676470e-09 0s 0s 368677390e-09 0s 0s 368681070e-09 1s 1s 368686710e-09 0s 0s 368687670e-09 0s 0s 368691310e-09 1s 1s 368696950e-09 0s 0s 368697950e-09 0s 0s 368701550e-09 1s 1s 368707190e-09 0s 0s 368708230e-09 0s 0s 368711790e-09 1s 1s 368717430e-09 0s 0s 368718510e-09 0s 0s 368722030e-09 1s 1s 368727670e-09 0s 0s 368728790e-09 0s 0s 368732270e-09 1s 1s 368737910e-09 0s 0s 368739070e-09 0s 0s 368742510e-09 1s 1s 368748150e-09 0s 0s 368749350e-09 0s 0s 368752750e-09 1s 1s 368758390e-09 0s 0s 368759630e-09 0s 0s 368762990e-09 1s 1s 368768630e-09 0s 0s 368769910e-09 0s 0s 368773230e-09 1s 1s 368778870e-09 0s 0s 368780190e-09 0s 0s 368783470e-09 1s 1s 368789110e-09 0s 0s 368790470e-09 0s 0s 368793710e-09 1s 1s 368799350e-09 0s 0s 368800750e-09 0s 0s 368803950e-09 1s 1s 368809590e-09 0s 0s 368811030e-09 0s 0s 368814190e-09 1s 1s 368819830e-09 0s 0s 368821310e-09 0s 0s 368824430e-09 1s 1s 368830070e-09 0s 0s 368831590e-09 0s 0s 368834670e-09 1s 1s 368840310e-09 0s 0s 368841870e-09 0s 0s 368844910e-09 1s 1s 368850550e-09 0s 0s 368852150e-09 0s 0s 368855150e-09 1s 1s 368860790e-09 0s 0s 368862430e-09 0s 0s 368865390e-09 1s 1s 368871030e-09 0s 0s 368872710e-09 0s 0s 368875630e-09 1s 1s 368881270e-09 0s 0s 368882990e-09 0s 0s 368885870e-09 1s 1s 368891510e-09 0s 0s 368893270e-09 0s 0s 368896110e-09 1s 1s 368901750e-09 0s 0s 368903550e-09 0s 0s 368906350e-09 1s 1s 368911990e-09 0s 0s 368913830e-09 0s 0s 368916590e-09 1s 1s 368922230e-09 0s 0s 368924110e-09 0s 0s 368926830e-09 1s 1s 368932470e-09 0s 0s 368934390e-09 0s 0s 368937070e-09 1s 1s 368942710e-09 0s 0s 368944670e-09 0s 0s 368947310e-09 1s 1s 368952950e-09 0s 0s 368954950e-09 0s 0s 368957550e-09 1s 1s 368963190e-09 0s 0s 368965230e-09 0s 0s 368967790e-09 1s 1s 368973430e-09 0s 0s 368975510e-09 0s 0s 368978030e-09 1s 1s 368983670e-09 0s 0s 368985790e-09 0s 0s 368988270e-09 1s 1s 368993910e-09 0s 0s 368996070e-09 0s 0s 368998510e-09 1s 1s 369004150e-09 0s 0s 369006350e-09 0s 0s 369008750e-09 1s 1s 369014390e-09 0s 0s 369016630e-09 0s 0s 369018990e-09 1s 1s 369024630e-09 0s 0s 369026910e-09 0s 0s 369029230e-09 1s 1s 369034870e-09 0s 0s 369037190e-09 0s 0s 369039470e-09 1s 1s 369045110e-09 0s 0s 369047470e-09 0s 0s 369049710e-09 1s 1s 369055350e-09 0s 0s 369057750e-09 0s 0s 369059950e-09 1s 1s 369065590e-09 0s 0s 369068030e-09 0s 0s 369070190e-09 1s 1s 369075830e-09 0s 0s 369078310e-09 0s 0s 369080430e-09 1s 1s 369086070e-09 0s 0s 369088590e-09 0s 0s 369090670e-09 1s 1s 369096310e-09 0s 0s 369098870e-09 0s 0s 369100910e-09 1s 1s 369106550e-09 0s 0s 369109150e-09 0s 0s 369111150e-09 1s 1s 369116790e-09 0s 0s 369119430e-09 0s 0s 369121390e-09 1s 1s 369127030e-09 0s 0s 369129710e-09 0s 0s 369131630e-09 1s 1s 369137270e-09 0s 0s 369139990e-09 0s 0s 369141870e-09 1s 1s 369147510e-09 0s 0s 369150270e-09 0s 0s 369152110e-09 1s 1s 369157750e-09 0s 0s 369160550e-09 0s 0s 369162350e-09 1s 1s 369167990e-09 0s 0s 369170830e-09 0s 0s 369172590e-09 1s 1s 369178230e-09 0s 0s 369181110e-09 0s 0s 369182830e-09 1s 1s 369188470e-09 0s 0s 369191390e-09 0s 0s 369193070e-09 1s 1s 369198710e-09 0s 0s 369201670e-09 0s 0s 369203310e-09 1s 1s 369208950e-09 0s 0s 369211950e-09 0s 0s 369213550e-09 1s 1s 369219190e-09 0s 0s 369222230e-09 0s 0s 369223790e-09 1s 1s 369229430e-09 0s 0s 369232510e-09 0s 0s 369234030e-09 1s 1s 369239670e-09 0s 0s 369242790e-09 0s 0s 369244270e-09 1s 1s 369249910e-09 0s 0s 369253070e-09 0s 0s 369254510e-09 1s 1s 369260150e-09 0s 0s 369263350e-09 0s 0s 369264750e-09 1s 1s 369270390e-09 0s 0s 369273630e-09 0s 0s 369274990e-09 1s 1s 369280630e-09 0s 0s 369283910e-09 0s 0s 369285230e-09 1s 1s 369290870e-09 0s 0s 369294190e-09 0s 0s 369295470e-09 1s 1s 369301110e-09 0s 0s 369304470e-09 0s 0s 369305710e-09 1s 1s 369311350e-09 0s 0s 369314750e-09 0s 0s 369315950e-09 1s 1s 369321590e-09 0s 0s 369325030e-09 0s 0s 369326190e-09 1s 1s 369331830e-09 0s 0s 369335310e-09 0s 0s 369336430e-09 1s 1s 369342070e-09 0s 0s 369345590e-09 0s 0s 369346670e-09 1s 1s 369352310e-09 0s 0s 369355870e-09 0s 0s 369356910e-09 1s 1s 369362550e-09 0s 0s 369366150e-09 0s 0s 369367150e-09 1s 1s 369372790e-09 0s 0s 369376430e-09 0s 0s 369377390e-09 1s 1s 369383030e-09 0s 0s 369386710e-09 0s 0s 369387630e-09 1s 1s 369393270e-09 0s 0s 369396990e-09 0s 0s 369397870e-09 1s 1s 369403510e-09 0s 0s 369407270e-09 0s 0s 369408110e-09 1s 1s 369413750e-09 0s 0s 369417550e-09 0s 0s 369418350e-09 1s 1s 369423990e-09 0s 0s 369427830e-09 0s 0s 369428590e-09 1s 1s 369434230e-09 0s 0s 369438110e-09 0s 0s 369438830e-09 1s 1s 369444470e-09 0s 0s 369448390e-09 0s 0s 369449070e-09 1s 1s 369454710e-09 0s 0s 369458670e-09 0s 0s 369459310e-09 1s 1s 369464950e-09 0s 0s 369468950e-09 0s 0s 369469550e-09 1s 1s 369475190e-09 0s 0s 369479230e-09 0s 0s 369479790e-09 1s 1s 369485430e-09 0s 0s 369489510e-09 0s 0s 369490030e-09 1s 1s 369495670e-09 0s 0s 369499790e-09 0s 0s 369500270e-09 1s 1s 369505910e-09 0s 0s 369510070e-09 0s 0s 369510510e-09 1s 1s 369516150e-09 0s 0s 369520350e-09 0s 0s 369520750e-09 1s 1s 369526390e-09 0s 0s 369530630e-09 0s 0s 369530990e-09 1s 1s 369536630e-09 0s 0s 369540910e-09 0s 0s 369541230e-09 1s 1s 369546870e-09 0s 0s 369551190e-09 0s 0s 369551470e-09 1s 1s 369557110e-09 0s 0s 369561470e-09 0s 0s 369561710e-09 1s 1s 369567350e-09 0s 0s 369571750e-09 0s 0s 369571950e-09 1s 1s 369577590e-09 0s 0s 369582030e-09 0s 0s 369582190e-09 1s 1s 369587830e-09 0s 0s 369592310e-09 0s 0s 369592430e-09 1s 1s 369598070e-09 0s 0s 369602590e-09 0s 0s 369602670e-09 1s 1s 369608310e-09 0s 0s 369612870e-09 0s 0s 369612910e-09 1s 1s 369618550e-09 0s 0s 369623150e-09 1s 1s 369623190e-09 1s 1s 369628830e-09 0s 0s 369633390e-09 1s 1s 369633470e-09 1s 1s 369639070e-09 0s 0s 369643630e-09 1s 1s 369643750e-09 1s 1s 369649310e-09 0s 0s 369653870e-09 1s 1s 369654030e-09 1s 1s 369659550e-09 0s 0s 369664110e-09 1s 1s 369664310e-09 1s 1s 369669790e-09 0s 0s 369674350e-09 1s 1s 369674590e-09 1s 1s 369680030e-09 0s 0s 369684590e-09 1s 1s 369684870e-09 1s 1s 369690270e-09 0s 0s 369694830e-09 1s 1s 369695150e-09 1s 1s 369700510e-09 0s 0s 369705070e-09 1s 1s 369705430e-09 1s 1s 369710750e-09 0s 0s 369715310e-09 1s 1s 369715710e-09 1s 1s 369720990e-09 0s 0s 369725550e-09 1s 1s 369725990e-09 1s 1s 369731230e-09 0s 0s 369735790e-09 1s 1s 369736270e-09 1s 1s 369741470e-09 0s 0s 369746030e-09 1s 1s 369746550e-09 1s 1s 369751710e-09 0s 0s 369756270e-09 1s 1s 369756830e-09 1s 1s 369761950e-09 0s 0s 369766510e-09 1s 1s 369767110e-09 1s 1s 369772190e-09 0s 0s 369776750e-09 1s 1s 369777390e-09 1s 1s 369782430e-09 0s 0s 369786990e-09 1s 1s 369787670e-09 1s 1s 369792670e-09 0s 0s 369797230e-09 1s 1s 369797950e-09 1s 1s 369802910e-09 0s 0s 369807470e-09 1s 1s 369808230e-09 1s 1s 369813150e-09 0s 0s 369817710e-09 1s 1s 369818510e-09 1s 1s 369823390e-09 0s 0s 369827950e-09 1s 1s 369828790e-09 1s 1s 369833630e-09 0s 0s 369838190e-09 1s 1s 369839070e-09 1s 1s 369843870e-09 0s 0s 369848430e-09 1s 1s 369849350e-09 1s 1s 369854110e-09 0s 0s 369858670e-09 1s 1s 369859630e-09 1s 1s 369864350e-09 0s 0s 369868910e-09 1s 1s 369869910e-09 1s 1s 369874590e-09 0s 0s 369879150e-09 1s 1s 369880190e-09 1s 1s 369884830e-09 0s 0s 369889390e-09 1s 1s 369890470e-09 1s 1s 369895070e-09 0s 0s 369899630e-09 1s 1s 369900750e-09 1s 1s 369905310e-09 0s 0s 369909870e-09 1s 1s 369911030e-09 1s 1s 369915550e-09 0s 0s 369920110e-09 1s 1s 369921310e-09 1s 1s 369925790e-09 0s 0s 369930350e-09 1s 1s 369931590e-09 1s 1s 369936030e-09 0s 0s 369940590e-09 1s 1s 369941870e-09 1s 1s 369946270e-09 0s 0s 369950830e-09 1s 1s 369952150e-09 1s 1s 369956510e-09 0s 0s 369961070e-09 1s 1s 369962430e-09 1s 1s 369966750e-09 0s 0s 369971310e-09 1s 1s 369972710e-09 1s 1s 369976990e-09 0s 0s 369981550e-09 1s 1s 369982990e-09 1s 1s 369987230e-09 0s 0s 369991790e-09 1s 1s 369993270e-09 1s 1s 369997470e-09 0s 0s 370002030e-09 1s 1s 370003550e-09 1s 1s 370007710e-09 0s 0s 370012270e-09 1s 1s 370013830e-09 1s 1s 370017950e-09 0s 0s 370022510e-09 1s 1s 370024110e-09 1s 1s 370028190e-09 0s 0s 370032750e-09 1s 1s 370034390e-09 1s 1s 370038430e-09 0s 0s 370042990e-09 1s 1s 370044670e-09 1s 1s 370048670e-09 0s 0s 370053230e-09 1s 1s 370054950e-09 1s 1s 370058910e-09 0s 0s 370063470e-09 1s 1s 370065230e-09 1s 1s 370069150e-09 0s 0s 370073710e-09 1s 1s 370075510e-09 1s 1s 370079390e-09 0s 0s 370083950e-09 1s 1s 370085790e-09 1s 1s 370089630e-09 0s 0s 370094190e-09 1s 1s 370096070e-09 1s 1s 370099870e-09 0s 0s 370104430e-09 1s 1s 370106350e-09 1s 1s 370110110e-09 0s 0s 370114670e-09 1s 1s 370116630e-09 1s 1s 370120350e-09 0s 0s 370124910e-09 1s 1s 370126910e-09 1s 1s 370130590e-09 0s 0s 370135150e-09 1s 1s 370137190e-09 1s 1s 370140830e-09 0s 0s 370145390e-09 1s 1s 370147470e-09 1s 1s 370151070e-09 0s 0s 370155630e-09 1s 1s 370157750e-09 1s 1s 370161310e-09 0s 0s 370165870e-09 1s 1s 370168030e-09 1s 1s 370171550e-09 0s 0s 370176110e-09 1s 1s 370178310e-09 1s 1s 370181790e-09 0s 0s 370186350e-09 1s 1s 370188590e-09 1s 1s 370192030e-09 0s 0s 370196590e-09 1s 1s 370198870e-09 1s 1s 370202270e-09 0s 0s 370206830e-09 1s 1s 370209150e-09 1s 1s 370212510e-09 0s 0s 370217070e-09 1s 1s 370219430e-09 1s 1s 370222750e-09 0s 0s 370227310e-09 1s 1s 370229710e-09 1s 1s 370232990e-09 0s 0s 370237550e-09 1s 1s 370239990e-09 1s 1s 370243230e-09 0s 0s 370247790e-09 1s 1s 370250270e-09 1s 1s 370253470e-09 0s 0s 370258030e-09 1s 1s 370260550e-09 1s 1s 370263710e-09 0s 0s 370268270e-09 1s 1s 370270830e-09 1s 1s 370273950e-09 0s 0s 370278510e-09 1s 1s 370281110e-09 1s 1s 370284190e-09 0s 0s 370288750e-09 1s 1s 370291390e-09 1s 1s 370294430e-09 0s 0s 370298990e-09 1s 1s 370301670e-09 1s 1s 370304670e-09 0s 0s 370309230e-09 1s 1s 370311950e-09 1s 1s 370314910e-09 0s 0s 370319470e-09 1s 1s 370322230e-09 1s 1s 370325150e-09 0s 0s 370329710e-09 1s 1s 370332510e-09 1s 1s 370335390e-09 0s 0s 370339950e-09 1s 1s 370342790e-09 1s 1s 370345630e-09 0s 0s 370350190e-09 1s 1s 370353070e-09 1s 1s 370355870e-09 0s 0s 370360430e-09 1s 1s 370363350e-09 1s 1s 370366110e-09 0s 0s 370370670e-09 1s 1s 370373630e-09 1s 1s 370376350e-09 0s 0s 370380910e-09 1s 1s 370383910e-09 1s 1s 370386590e-09 0s 0s 370391150e-09 1s 1s 370394190e-09 1s 1s 370396830e-09 0s 0s 370401390e-09 1s 1s 370404470e-09 1s 1s 370407070e-09 0s 0s 370411630e-09 1s 1s 370414750e-09 1s 1s 370417310e-09 0s 0s 370421870e-09 1s 1s 370425030e-09 1s 1s 370427550e-09 0s 0s 370432110e-09 1s 1s 370435310e-09 1s 1s 370437790e-09 0s 0s 370442350e-09 1s 1s 370445590e-09 1s 1s 370448030e-09 0s 0s 370452590e-09 1s 1s 370455870e-09 1s 1s 370458270e-09 0s 0s 370462830e-09 1s 1s 370466150e-09 1s 1s 370468510e-09 0s 0s 370473070e-09 1s 1s 370476430e-09 1s 1s 370478750e-09 0s 0s 370483310e-09 1s 1s 370486710e-09 1s 1s 370488990e-09 0s 0s 370493550e-09 1s 1s 370496990e-09 1s 1s 370499230e-09 0s 0s 370503790e-09 1s 1s 370507270e-09 1s 1s 370509470e-09 0s 0s 370514030e-09 1s 1s 370517550e-09 1s 1s 370519710e-09 0s 0s 370524270e-09 1s 1s 370527830e-09 1s 1s 370529950e-09 0s 0s 370534510e-09 1s 1s 370538110e-09 1s 1s 370540190e-09 0s 0s 370544750e-09 1s 1s 370548390e-09 1s 1s 370550430e-09 0s 0s 370554990e-09 1s 1s 370558670e-09 1s 1s 370560670e-09 0s 0s 370565230e-09 1s 1s 370568950e-09 1s 1s 370570910e-09 0s 0s 370575470e-09 1s 1s 370579230e-09 1s 1s 370581150e-09 0s 0s 370585710e-09 1s 1s 370589510e-09 1s 1s 370591390e-09 0s 0s 370595950e-09 1s 1s 370599790e-09 1s 1s 370601630e-09 0s 0s 370606190e-09 1s 1s 370610070e-09 1s 1s 370611870e-09 0s 0s 370616430e-09 1s 1s 370620350e-09 1s 1s 370622110e-09 0s 0s 370626670e-09 1s 1s 370630630e-09 1s 1s 370632350e-09 0s 0s 370636910e-09 1s 1s 370640910e-09 1s 1s 370642590e-09 0s 0s 370647150e-09 1s 1s 370651190e-09 1s 1s 370652830e-09 0s 0s 370657390e-09 1s 1s 370661470e-09 1s 1s 370663070e-09 0s 0s 370667630e-09 1s 1s 370671750e-09 1s 1s 370673310e-09 0s 0s 370677870e-09 1s 1s 370682030e-09 1s 1s 370683550e-09 0s 0s 370688110e-09 1s 1s 370692310e-09 1s 1s 370693790e-09 0s 0s 370698350e-09 1s 1s 370702590e-09 1s 1s 370704030e-09 0s 0s 370708590e-09 1s 1s 370712870e-09 1s 1s 370714270e-09 0s 0s 370718830e-09 1s 1s 370723150e-09 1s 1s 370724510e-09 0s 0s 370729070e-09 1s 1s 370733430e-09 1s 1s 370734750e-09 0s 0s 370739310e-09 1s 1s 370743710e-09 1s 1s 370744990e-09 0s 0s 370749550e-09 1s 1s 370753990e-09 1s 1s 370755230e-09 0s 0s 370759790e-09 1s 1s 370764270e-09 1s 1s 370765470e-09 0s 0s 370770030e-09 1s 1s 370774550e-09 1s 1s 370775710e-09 0s 0s 370780270e-09 1s 1s 370784830e-09 1s 1s 370785950e-09 0s 0s 370790510e-09 1s 1s 370795110e-09 1s 1s 370796190e-09 0s 0s 370800750e-09 1s 1s 370805390e-09 1s 1s 370806430e-09 0s 0s 370810990e-09 1s 1s 370815670e-09 1s 1s 370816670e-09 0s 0s 370821230e-09 1s 1s 370825950e-09 1s 1s 370826910e-09 0s 0s 370831470e-09 1s 1s 370836230e-09 1s 1s 370837150e-09 0s 0s 370841710e-09 1s 1s 370846510e-09 1s 1s 370847390e-09 0s 0s 370851950e-09 1s 1s 370856790e-09 1s 1s 370857630e-09 0s 0s 370862190e-09 1s 1s 370867070e-09 1s 1s 370867870e-09 0s 0s 370872430e-09 1s 1s 370877350e-09 1s 1s 370878110e-09 0s 0s 370882670e-09 1s 1s 370887630e-09 1s 1s 370888350e-09 0s 0s 370892910e-09 1s 1s 370897910e-09 1s 1s 370898590e-09 0s 0s 370903150e-09 1s 1s 370908190e-09 1s 1s 370908830e-09 0s 0s 370913390e-09 1s 1s 370918470e-09 1s 1s 370919070e-09 0s 0s 370923630e-09 1s 1s 370928750e-09 1s 1s 370929310e-09 0s 0s 370933870e-09 1s 1s 370939030e-09 1s 1s 370939550e-09 0s 0s 370944110e-09 1s 1s 370949310e-09 1s 1s 370949790e-09 0s 0s 370954350e-09 1s 1s 370959590e-09 1s 1s 370960030e-09 0s 0s 370964590e-09 1s 1s 370969870e-09 1s 1s 370970270e-09 0s 0s 370974830e-09 1s 1s 370980150e-09 1s 1s 370980510e-09 0s 0s 370985070e-09 1s 1s 370990430e-09 1s 1s 370990750e-09 0s 0s 370995310e-09 1s 1s 371000710e-09 1s 1s 371000990e-09 0s 0s 371005550e-09 1s 1s 371010990e-09 1s 1s 371011230e-09 0s 0s 371015790e-09 1s 1s 371021270e-09 1s 1s 371021470e-09 0s 0s 371026030e-09 1s 1s 371031550e-09 1s 1s 371031710e-09 0s 0s 371036270e-09 1s 1s 371041830e-09 1s 1s 371041950e-09 0s 0s 371046510e-09 1s 1s 371052110e-09 1s 1s 371052190e-09 0s 0s 371056750e-09 1s 1s 371062390e-09 1s 1s 371062430e-09 0s 0s 371066990e-09 1s 1s 371072670e-09 0s 0s 371077230e-09 1s 1s 371082910e-09 0s 0s 371082950e-09 0s 0s 371087470e-09 1s 1s 371093150e-09 0s 0s 371093230e-09 0s 0s 371097710e-09 1s 1s 371103390e-09 0s 0s 371103510e-09 0s 0s 371107950e-09 1s 1s 371113630e-09 0s 0s 371113790e-09 0s 0s 371118190e-09 1s 1s 371123870e-09 0s 0s 371124070e-09 0s 0s 371128430e-09 1s 1s 371134110e-09 0s 0s 371134350e-09 0s 0s 371138670e-09 1s 1s 371144350e-09 0s 0s 371144630e-09 0s 0s 371148910e-09 1s 1s 371154590e-09 0s 0s 371154910e-09 0s 0s 371159150e-09 1s 1s 371164830e-09 0s 0s 371165190e-09 0s 0s 371169390e-09 1s 1s 371175070e-09 0s 0s 371175470e-09 0s 0s 371179630e-09 1s 1s 371185310e-09 0s 0s 371185750e-09 0s 0s 371189870e-09 1s 1s 371195550e-09 0s 0s 371196030e-09 0s 0s 371200110e-09 1s 1s 371205790e-09 0s 0s 371206310e-09 0s 0s 371210350e-09 1s 1s 371216030e-09 0s 0s 371216590e-09 0s 0s 371220590e-09 1s 1s 371226270e-09 0s 0s 371226870e-09 0s 0s 371230830e-09 1s 1s 371236510e-09 0s 0s 371237150e-09 0s 0s 371241070e-09 1s 1s 371246750e-09 0s 0s 371247430e-09 0s 0s 371251310e-09 1s 1s 371256990e-09 0s 0s 371257710e-09 0s 0s 371261550e-09 1s 1s 371267230e-09 0s 0s 371267990e-09 0s 0s 371271790e-09 1s 1s 371277470e-09 0s 0s 371278270e-09 0s 0s 371282030e-09 1s 1s 371287710e-09 0s 0s 371288550e-09 0s 0s 371292270e-09 1s 1s 371297950e-09 0s 0s 371298830e-09 0s 0s 371302510e-09 1s 1s 371308190e-09 0s 0s 371309110e-09 0s 0s 371312750e-09 1s 1s 371318430e-09 0s 0s 371319390e-09 0s 0s 371322990e-09 1s 1s 371328670e-09 0s 0s 371329670e-09 0s 0s 371333230e-09 1s 1s 371338910e-09 0s 0s 371339950e-09 0s 0s 371343470e-09 1s 1s 371349150e-09 0s 0s 371350230e-09 0s 0s 371353710e-09 1s 1s 371359390e-09 0s 0s 371360510e-09 0s 0s 371363950e-09 1s 1s 371369630e-09 0s 0s 371370790e-09 0s 0s 371374190e-09 1s 1s 371379870e-09 0s 0s 371381070e-09 0s 0s 371384430e-09 1s 1s 371390110e-09 0s 0s 371391350e-09 0s 0s 371394670e-09 1s 1s 371400350e-09 0s 0s 371401630e-09 0s 0s 371404910e-09 1s 1s 371410590e-09 0s 0s 371411910e-09 0s 0s 371415150e-09 1s 1s 371420830e-09 0s 0s 371422190e-09 0s 0s 371425390e-09 1s 1s 371431070e-09 0s 0s 371432470e-09 0s 0s 371435630e-09 1s 1s 371441310e-09 0s 0s 371442750e-09 0s 0s 371445870e-09 1s 1s 371451550e-09 0s 0s 371453030e-09 0s 0s 371456110e-09 1s 1s 371461790e-09 0s 0s 371463310e-09 0s 0s 371466350e-09 1s 1s 371472030e-09 0s 0s 371473590e-09 0s 0s 371476590e-09 1s 1s 371482270e-09 0s 0s 371483870e-09 0s 0s 371486830e-09 1s 1s 371492510e-09 0s 0s 371494150e-09 0s 0s 371497070e-09 1s 1s 371502750e-09 0s 0s 371504430e-09 0s 0s 371507310e-09 1s 1s 371512990e-09 0s 0s 371514710e-09 0s 0s 371517550e-09 1s 1s 371523230e-09 0s 0s 371524990e-09 0s 0s 371527790e-09 1s 1s 371533470e-09 0s 0s 371535270e-09 0s 0s 371538030e-09 1s 1s 371543710e-09 0s 0s 371545550e-09 0s 0s 371548270e-09 1s 1s 371553950e-09 0s 0s 371555830e-09 0s 0s 371558510e-09 1s 1s 371564190e-09 0s 0s 371566110e-09 0s 0s 371568750e-09 1s 1s 371574430e-09 0s 0s 371576390e-09 0s 0s 371578990e-09 1s 1s 371584670e-09 0s 0s 371586670e-09 0s 0s 371589230e-09 1s 1s 371594910e-09 0s 0s 371596950e-09 0s 0s 371599470e-09 1s 1s 371605150e-09 0s 0s 371607230e-09 0s 0s 371609710e-09 1s 1s 371615390e-09 0s 0s 371617510e-09 0s 0s 371619950e-09 1s 1s 371625630e-09 0s 0s 371627790e-09 0s 0s 371630190e-09 1s 1s 371635870e-09 0s 0s 371638070e-09 0s 0s 371640430e-09 1s 1s 371646110e-09 0s 0s 371648350e-09 0s 0s 371650670e-09 1s 1s 371656350e-09 0s 0s 371658630e-09 0s 0s 371660910e-09 1s 1s 371666590e-09 0s 0s 371668910e-09 0s 0s 371671150e-09 1s 1s 371676830e-09 0s 0s 371679190e-09 0s 0s 371681390e-09 1s 1s 371687070e-09 0s 0s 371689470e-09 0s 0s 371691630e-09 1s 1s 371697310e-09 0s 0s 371699750e-09 0s 0s 371701870e-09 1s 1s 371707550e-09 0s 0s 371710030e-09 0s 0s 371712110e-09 1s 1s 371717790e-09 0s 0s 371720310e-09 0s 0s 371722350e-09 1s 1s 371728030e-09 0s 0s 371730590e-09 0s 0s 371732590e-09 1s 1s 371738270e-09 0s 0s 371740870e-09 0s 0s 371742830e-09 1s 1s 371748510e-09 0s 0s 371751150e-09 0s 0s 371753070e-09 1s 1s 371758750e-09 0s 0s 371761430e-09 0s 0s 371763310e-09 1s 1s 371768990e-09 0s 0s 371771710e-09 0s 0s 371773550e-09 1s 1s 371779230e-09 0s 0s 371781990e-09 0s 0s 371783790e-09 1s 1s 371789470e-09 0s 0s 371792270e-09 0s 0s 371794030e-09 1s 1s 371799710e-09 0s 0s 371802550e-09 0s 0s 371804270e-09 1s 1s 371809950e-09 0s 0s 371812830e-09 0s 0s 371814510e-09 1s 1s 371820190e-09 0s 0s 371823110e-09 0s 0s 371824750e-09 1s 1s 371830430e-09 0s 0s 371833390e-09 0s 0s 371834990e-09 1s 1s 371840670e-09 0s 0s 371843670e-09 0s 0s 371845230e-09 1s 1s 371850910e-09 0s 0s 371853950e-09 0s 0s 371855470e-09 1s 1s 371861150e-09 0s 0s 371864230e-09 0s 0s 371865710e-09 1s 1s 371871390e-09 0s 0s 371874510e-09 0s 0s 371875950e-09 1s 1s 371881630e-09 0s 0s 371884790e-09 0s 0s 371886190e-09 1s 1s 371891870e-09 0s 0s 371895070e-09 0s 0s 371896430e-09 1s 1s 371902110e-09 0s 0s 371905350e-09 0s 0s 371906670e-09 1s 1s 371912350e-09 0s 0s 371915630e-09 0s 0s 371916910e-09 1s 1s 371922590e-09 0s 0s 371925910e-09 0s 0s 371927150e-09 1s 1s 371932830e-09 0s 0s 371936190e-09 0s 0s 371937390e-09 1s 1s 371943070e-09 0s 0s 371946470e-09 0s 0s 371947630e-09 1s 1s 371953310e-09 0s 0s 371956750e-09 0s 0s 371957870e-09 1s 1s 371963550e-09 0s 0s 371967030e-09 0s 0s 371968110e-09 1s 1s 371973790e-09 0s 0s 371977310e-09 0s 0s 371978350e-09 1s 1s 371984030e-09 0s 0s 371987590e-09 0s 0s 371988590e-09 1s 1s 371994270e-09 0s 0s 371997870e-09 0s 0s 371998830e-09 1s 1s 372004510e-09 0s 0s 372008150e-09 0s 0s 372009070e-09 1s 1s 372014750e-09 0s 0s 372018430e-09 0s 0s 372019310e-09 1s 1s 372024990e-09 0s 0s 372028710e-09 0s 0s 372029550e-09 1s 1s 372035230e-09 0s 0s 372038990e-09 0s 0s 372039790e-09 1s 1s 372045470e-09 0s 0s 372049270e-09 0s 0s 372050030e-09 1s 1s 372055710e-09 0s 0s 372059550e-09 0s 0s 372060270e-09 1s 1s 372065950e-09 0s 0s 372069830e-09 0s 0s 372070510e-09 1s 1s 372076190e-09 0s 0s 372080110e-09 0s 0s 372080750e-09 1s 1s 372086430e-09 0s 0s 372090390e-09 0s 0s 372090990e-09 1s 1s 372096670e-09 0s 0s 372100670e-09 0s 0s 372101230e-09 1s 1s 372106910e-09 0s 0s 372110950e-09 0s 0s 372111470e-09 1s 1s 372117150e-09 0s 0s 372121230e-09 0s 0s 372121710e-09 1s 1s 372127390e-09 0s 0s 372131510e-09 0s 0s 372131950e-09 1s 1s 372137630e-09 0s 0s 372141790e-09 0s 0s 372142190e-09 1s 1s 372147870e-09 0s 0s 372152070e-09 0s 0s 372152430e-09 1s 1s 372158110e-09 0s 0s 372162350e-09 0s 0s 372162670e-09 1s 1s 372168350e-09 0s 0s 372172630e-09 0s 0s 372172910e-09 1s 1s 372178590e-09 0s 0s 372182910e-09 0s 0s 372183150e-09 1s 1s 372188830e-09 0s 0s 372193190e-09 0s 0s 372193390e-09 1s 1s 372199070e-09 0s 0s 372203470e-09 0s 0s 372203630e-09 1s 1s 372209310e-09 0s 0s 372213750e-09 0s 0s 372213870e-09 1s 1s 372219550e-09 0s 0s 372224030e-09 0s 0s 372224110e-09 1s 1s 372229790e-09 0s 0s 372234310e-09 0s 0s 372234350e-09 1s 1s 372240030e-09 0s 0s 372244590e-09 1s 1s 372244630e-09 1s 1s 372250310e-09 0s 0s 372254830e-09 1s 1s 372254910e-09 1s 1s 372260550e-09 0s 0s 372265070e-09 1s 1s 372265190e-09 1s 1s 372270790e-09 0s 0s 372275310e-09 1s 1s 372275470e-09 1s 1s 372281030e-09 0s 0s 372285550e-09 1s 1s 372285750e-09 1s 1s 372291270e-09 0s 0s 372295790e-09 1s 1s 372296030e-09 1s 1s 372301510e-09 0s 0s 372306030e-09 1s 1s 372306310e-09 1s 1s 372311750e-09 0s 0s 372316270e-09 1s 1s 372316590e-09 1s 1s 372321990e-09 0s 0s 372326510e-09 1s 1s 372326870e-09 1s 1s 372332230e-09 0s 0s 372336750e-09 1s 1s 372337150e-09 1s 1s 372342470e-09 0s 0s 372346990e-09 1s 1s 372347430e-09 1s 1s 372352710e-09 0s 0s 372357230e-09 1s 1s 372357710e-09 1s 1s 372362950e-09 0s 0s 372367470e-09 1s 1s 372367990e-09 1s 1s 372373190e-09 0s 0s 372377710e-09 1s 1s 372378270e-09 1s 1s 372383430e-09 0s 0s 372387950e-09 1s 1s 372388550e-09 1s 1s 372393670e-09 0s 0s 372398190e-09 1s 1s 372398830e-09 1s 1s 372403910e-09 0s 0s 372408430e-09 1s 1s 372409110e-09 1s 1s 372414150e-09 0s 0s 372418670e-09 1s 1s 372419390e-09 1s 1s 372424390e-09 0s 0s 372428910e-09 1s 1s 372429670e-09 1s 1s 372434630e-09 0s 0s 372439150e-09 1s 1s 372439950e-09 1s 1s 372444870e-09 0s 0s 372449390e-09 1s 1s 372450230e-09 1s 1s 372455110e-09 0s 0s 372459630e-09 1s 1s 372460510e-09 1s 1s 372465350e-09 0s 0s 372469870e-09 1s 1s 372470790e-09 1s 1s 372475590e-09 0s 0s 372480110e-09 1s 1s 372481070e-09 1s 1s 372485830e-09 0s 0s 372490350e-09 1s 1s 372491350e-09 1s 1s 372496070e-09 0s 0s 372500590e-09 1s 1s 372501630e-09 1s 1s 372506310e-09 0s 0s 372510830e-09 1s 1s 372511910e-09 1s 1s 372516550e-09 0s 0s 372521070e-09 1s 1s 372522190e-09 1s 1s 372526790e-09 0s 0s 372531310e-09 1s 1s 372532470e-09 1s 1s 372537030e-09 0s 0s 372541550e-09 1s 1s 372542750e-09 1s 1s 372547270e-09 0s 0s 372551790e-09 1s 1s 372553030e-09 1s 1s 372557510e-09 0s 0s 372562030e-09 1s 1s 372563310e-09 1s 1s 372567750e-09 0s 0s 372572270e-09 1s 1s 372573590e-09 1s 1s 372577990e-09 0s 0s 372582510e-09 1s 1s 372583870e-09 1s 1s 372588230e-09 0s 0s 372592750e-09 1s 1s 372594150e-09 1s 1s 372598470e-09 0s 0s 372602990e-09 1s 1s 372604430e-09 1s 1s 372608710e-09 0s 0s 372613230e-09 1s 1s 372614710e-09 1s 1s 372618950e-09 0s 0s 372623470e-09 1s 1s 372624990e-09 1s 1s 372629190e-09 0s 0s 372633710e-09 1s 1s 372635270e-09 1s 1s 372639430e-09 0s 0s 372643950e-09 1s 1s 372645550e-09 1s 1s 372649670e-09 0s 0s 372654190e-09 1s 1s 372655830e-09 1s 1s 372659910e-09 0s 0s 372664430e-09 1s 1s 372666110e-09 1s 1s 372670150e-09 0s 0s 372674670e-09 1s 1s 372676390e-09 1s 1s 372680390e-09 0s 0s 372684910e-09 1s 1s 372686670e-09 1s 1s 372690630e-09 0s 0s 372695150e-09 1s 1s 372696950e-09 1s 1s 372700870e-09 0s 0s 372705390e-09 1s 1s 372707230e-09 1s 1s 372711110e-09 0s 0s 372715630e-09 1s 1s 372717510e-09 1s 1s 372721350e-09 0s 0s 372725870e-09 1s 1s 372727790e-09 1s 1s 372731590e-09 0s 0s 372736110e-09 1s 1s 372738070e-09 1s 1s 372741830e-09 0s 0s 372746350e-09 1s 1s 372748350e-09 1s 1s 372752070e-09 0s 0s 372756590e-09 1s 1s 372758630e-09 1s 1s 372762310e-09 0s 0s 372766830e-09 1s 1s 372768910e-09 1s 1s 372772550e-09 0s 0s 372777070e-09 1s 1s 372779190e-09 1s 1s 372782790e-09 0s 0s 372787310e-09 1s 1s 372789470e-09 1s 1s 372793030e-09 0s 0s 372797550e-09 1s 1s 372799750e-09 1s 1s 372803270e-09 0s 0s 372807790e-09 1s 1s 372810030e-09 1s 1s 372813510e-09 0s 0s 372818030e-09 1s 1s 372820310e-09 1s 1s 372823750e-09 0s 0s 372828270e-09 1s 1s 372830590e-09 1s 1s 372833990e-09 0s 0s 372838510e-09 1s 1s 372840870e-09 1s 1s 372844230e-09 0s 0s 372848750e-09 1s 1s 372851150e-09 1s 1s 372854470e-09 0s 0s 372858990e-09 1s 1s 372861430e-09 1s 1s 372864710e-09 0s 0s 372869230e-09 1s 1s 372871710e-09 1s 1s 372874950e-09 0s 0s 372879470e-09 1s 1s 372881990e-09 1s 1s 372885190e-09 0s 0s 372889710e-09 1s 1s 372892270e-09 1s 1s 372895430e-09 0s 0s 372899950e-09 1s 1s 372902550e-09 1s 1s 372905670e-09 0s 0s 372910190e-09 1s 1s 372912830e-09 1s 1s 372915910e-09 0s 0s 372920430e-09 1s 1s 372923110e-09 1s 1s 372926150e-09 0s 0s 372930670e-09 1s 1s 372933390e-09 1s 1s 372936390e-09 0s 0s 372940910e-09 1s 1s 372943670e-09 1s 1s 372946630e-09 0s 0s 372951150e-09 1s 1s 372953950e-09 1s 1s 372956870e-09 0s 0s 372961390e-09 1s 1s 372964230e-09 1s 1s 372967110e-09 0s 0s 372971630e-09 1s 1s 372974510e-09 1s 1s 372977350e-09 0s 0s 372981870e-09 1s 1s 372984790e-09 1s 1s 372987590e-09 0s 0s 372992110e-09 1s 1s 372995070e-09 1s 1s 372997830e-09 0s 0s 373002350e-09 1s 1s 373005350e-09 1s 1s 373008070e-09 0s 0s 373012590e-09 1s 1s 373015630e-09 1s 1s 373018310e-09 0s 0s 373022830e-09 1s 1s 373025910e-09 1s 1s 373028550e-09 0s 0s 373033070e-09 1s 1s 373036190e-09 1s 1s 373038790e-09 0s 0s 373043310e-09 1s 1s 373046470e-09 1s 1s 373049030e-09 0s 0s 373053550e-09 1s 1s 373056750e-09 1s 1s 373059270e-09 0s 0s 373063790e-09 1s 1s 373067030e-09 1s 1s 373069510e-09 0s 0s 373074030e-09 1s 1s 373077310e-09 1s 1s 373079750e-09 0s 0s 373084270e-09 1s 1s 373087590e-09 1s 1s 373089990e-09 0s 0s 373094510e-09 1s 1s 373097870e-09 1s 1s 373100230e-09 0s 0s 373104750e-09 1s 1s 373108150e-09 1s 1s 373110470e-09 0s 0s 373114990e-09 1s 1s 373118430e-09 1s 1s 373120710e-09 0s 0s 373125230e-09 1s 1s 373128710e-09 1s 1s 373130950e-09 0s 0s 373135470e-09 1s 1s 373138990e-09 1s 1s 373141190e-09 0s 0s 373145710e-09 1s 1s 373149270e-09 1s 1s 373151430e-09 0s 0s 373155950e-09 1s 1s 373159550e-09 1s 1s 373161670e-09 0s 0s 373166190e-09 1s 1s 373169830e-09 1s 1s 373171910e-09 0s 0s 373176430e-09 1s 1s 373180110e-09 1s 1s 373182150e-09 0s 0s 373186670e-09 1s 1s 373190390e-09 1s 1s 373192390e-09 0s 0s 373196910e-09 1s 1s 373200670e-09 1s 1s 373202630e-09 0s 0s 373207150e-09 1s 1s 373210950e-09 1s 1s 373212870e-09 0s 0s 373217390e-09 1s 1s 373221230e-09 1s 1s 373223110e-09 0s 0s 373227630e-09 1s 1s 373231510e-09 1s 1s 373233350e-09 0s 0s 373237870e-09 1s 1s 373241790e-09 1s 1s 373243590e-09 0s 0s 373248110e-09 1s 1s 373252070e-09 1s 1s 373253830e-09 0s 0s 373258350e-09 1s 1s 373262350e-09 1s 1s 373264070e-09 0s 0s 373268590e-09 1s 1s 373272630e-09 1s 1s 373274310e-09 0s 0s 373278830e-09 1s 1s 373282910e-09 1s 1s 373284550e-09 0s 0s 373289070e-09 1s 1s 373293190e-09 1s 1s 373294790e-09 0s 0s 373299310e-09 1s 1s 373303470e-09 1s 1s 373305030e-09 0s 0s 373309550e-09 1s 1s 373313750e-09 1s 1s 373315270e-09 0s 0s 373319790e-09 1s 1s 373324030e-09 1s 1s 373325510e-09 0s 0s 373330030e-09 1s 1s 373334310e-09 1s 1s 373335750e-09 0s 0s 373340270e-09 1s 1s 373344590e-09 1s 1s 373345990e-09 0s 0s 373350510e-09 1s 1s 373354870e-09 1s 1s 373356230e-09 0s 0s 373360750e-09 1s 1s 373365150e-09 1s 1s 373366470e-09 0s 0s 373370990e-09 1s 1s 373375430e-09 1s 1s 373376710e-09 0s 0s 373381230e-09 1s 1s 373385710e-09 1s 1s 373386950e-09 0s 0s 373391470e-09 1s 1s 373395990e-09 1s 1s 373397190e-09 0s 0s 373401710e-09 1s 1s 373406270e-09 1s 1s 373407430e-09 0s 0s 373411950e-09 1s 1s 373416550e-09 1s 1s 373417670e-09 0s 0s 373422190e-09 1s 1s 373426830e-09 1s 1s 373427910e-09 0s 0s 373432430e-09 1s 1s 373437110e-09 1s 1s 373438150e-09 0s 0s 373442670e-09 1s 1s 373447390e-09 1s 1s 373448390e-09 0s 0s 373452910e-09 1s 1s 373457670e-09 1s 1s 373458630e-09 0s 0s 373463150e-09 1s 1s 373467950e-09 1s 1s 373468870e-09 0s 0s 373473390e-09 1s 1s 373478230e-09 1s 1s 373479110e-09 0s 0s 373483630e-09 1s 1s 373488510e-09 1s 1s 373489350e-09 0s 0s 373493870e-09 1s 1s 373498790e-09 1s 1s 373499590e-09 0s 0s 373504110e-09 1s 1s 373509070e-09 1s 1s 373509830e-09 0s 0s 373514350e-09 1s 1s 373519350e-09 1s 1s 373520070e-09 0s 0s 373524590e-09 1s 1s 373529630e-09 1s 1s 373530310e-09 0s 0s 373534830e-09 1s 1s 373539910e-09 1s 1s 373540550e-09 0s 0s 373545070e-09 1s 1s 373550190e-09 1s 1s 373550790e-09 0s 0s 373555310e-09 1s 1s 373560470e-09 1s 1s 373561030e-09 0s 0s 373565550e-09 1s 1s 373570750e-09 1s 1s 373571270e-09 0s 0s 373575790e-09 1s 1s 373581030e-09 1s 1s 373581510e-09 0s 0s 373586030e-09 1s 1s 373591310e-09 1s 1s 373591750e-09 0s 0s 373596270e-09 1s 1s 373601590e-09 1s 1s 373601990e-09 0s 0s 373606510e-09 1s 1s 373611870e-09 1s 1s 373612230e-09 0s 0s 373616750e-09 1s 1s 373622150e-09 1s 1s 373622470e-09 0s 0s 373626990e-09 1s 1s 373632430e-09 1s 1s 373632710e-09 0s 0s 373637230e-09 1s 1s 373642710e-09 1s 1s 373642950e-09 0s 0s 373647470e-09 1s 1s 373652990e-09 1s 1s 373653190e-09 0s 0s 373657710e-09 1s 1s 373663270e-09 1s 1s 373663430e-09 0s 0s 373667950e-09 1s 1s 373673550e-09 1s 1s 373673670e-09 0s 0s 373678190e-09 1s 1s 373683830e-09 1s 1s 373683910e-09 0s 0s 373688430e-09 1s 1s 373694110e-09 1s 1s 373694150e-09 0s 0s 373698670e-09 1s 1s 373704390e-09 0s 0s 373708910e-09 1s 1s 373714630e-09 0s 0s 373714670e-09 0s 0s 373719150e-09 1s 1s 373724870e-09 0s 0s 373724950e-09 0s 0s 373729390e-09 1s 1s 373735110e-09 0s 0s 373735230e-09 0s 0s 373739630e-09 1s 1s 373745350e-09 0s 0s 373745510e-09 0s 0s 373749870e-09 1s 1s 373755590e-09 0s 0s 373755790e-09 0s 0s 373760110e-09 1s 1s 373765830e-09 0s 0s 373766070e-09 0s 0s 373770350e-09 1s 1s 373776070e-09 0s 0s 373776350e-09 0s 0s 373780590e-09 1s 1s 373786310e-09 0s 0s 373786630e-09 0s 0s 373790830e-09 1s 1s 373796550e-09 0s 0s 373796910e-09 0s 0s 373801070e-09 1s 1s 373806790e-09 0s 0s 373807190e-09 0s 0s 373811310e-09 1s 1s 373817030e-09 0s 0s 373817470e-09 0s 0s 373821550e-09 1s 1s 373827270e-09 0s 0s 373827750e-09 0s 0s 373831790e-09 1s 1s 373837510e-09 0s 0s 373838030e-09 0s 0s 373842030e-09 1s 1s 373847750e-09 0s 0s 373848310e-09 0s 0s 373852270e-09 1s 1s 373857990e-09 0s 0s 373858590e-09 0s 0s 373862510e-09 1s 1s 373868230e-09 0s 0s 373868870e-09 0s 0s 373872750e-09 1s 1s 373878470e-09 0s 0s 373879150e-09 0s 0s 373882990e-09 1s 1s 373888710e-09 0s 0s 373889430e-09 0s 0s 373893230e-09 1s 1s 373898950e-09 0s 0s 373899710e-09 0s 0s 373903470e-09 1s 1s 373909190e-09 0s 0s 373909990e-09 0s 0s 373913710e-09 1s 1s 373919430e-09 0s 0s 373920270e-09 0s 0s 373923950e-09 1s 1s 373929670e-09 0s 0s 373930550e-09 0s 0s 373934190e-09 1s 1s 373939910e-09 0s 0s 373940830e-09 0s 0s 373944430e-09 1s 1s 373950150e-09 0s 0s 373951110e-09 0s 0s 373954670e-09 1s 1s 373960390e-09 0s 0s 373961390e-09 0s 0s 373964910e-09 1s 1s 373970630e-09 0s 0s 373971670e-09 0s 0s 373975150e-09 1s 1s 373980870e-09 0s 0s 373981950e-09 0s 0s 373985390e-09 1s 1s 373991110e-09 0s 0s 373992230e-09 0s 0s 373995630e-09 1s 1s 374001350e-09 0s 0s 374002510e-09 0s 0s 374005870e-09 1s 1s 374011590e-09 0s 0s 374012790e-09 0s 0s 374016110e-09 1s 1s 374021830e-09 0s 0s 374023070e-09 0s 0s 374026350e-09 1s 1s 374032070e-09 0s 0s 374033350e-09 0s 0s 374036590e-09 1s 1s 374042310e-09 0s 0s 374043630e-09 0s 0s 374046830e-09 1s 1s 374052550e-09 0s 0s 374053910e-09 0s 0s 374057070e-09 1s 1s 374062790e-09 0s 0s 374064190e-09 0s 0s 374067310e-09 1s 1s 374073030e-09 0s 0s 374074470e-09 0s 0s 374077550e-09 1s 1s 374083270e-09 0s 0s 374084750e-09 0s 0s 374087790e-09 1s 1s 374093510e-09 0s 0s 374095030e-09 0s 0s 374098030e-09 1s 1s 374103750e-09 0s 0s 374105310e-09 0s 0s 374108270e-09 1s 1s 374113990e-09 0s 0s 374115590e-09 0s 0s 374118510e-09 1s 1s 374124230e-09 0s 0s 374125870e-09 0s 0s 374128750e-09 1s 1s 374134470e-09 0s 0s 374136150e-09 0s 0s 374138990e-09 1s 1s 374144710e-09 0s 0s 374146430e-09 0s 0s 374149230e-09 1s 1s 374154950e-09 0s 0s 374156710e-09 0s 0s 374159470e-09 1s 1s 374165190e-09 0s 0s 374166990e-09 0s 0s 374169710e-09 1s 1s 374175430e-09 0s 0s 374177270e-09 0s 0s 374179950e-09 1s 1s 374185670e-09 0s 0s 374187550e-09 0s 0s 374190190e-09 1s 1s 374195910e-09 0s 0s 374197830e-09 0s 0s 374200430e-09 1s 1s 374206150e-09 0s 0s 374208110e-09 0s 0s 374210670e-09 1s 1s 374216390e-09 0s 0s 374218390e-09 0s 0s 374220910e-09 1s 1s 374226630e-09 0s 0s 374228670e-09 0s 0s 374231150e-09 1s 1s 374236870e-09 0s 0s 374238950e-09 0s 0s 374241390e-09 1s 1s 374247110e-09 0s 0s 374249230e-09 0s 0s 374251630e-09 1s 1s 374257350e-09 0s 0s 374259510e-09 0s 0s 374261870e-09 1s 1s 374267590e-09 0s 0s 374269790e-09 0s 0s 374272110e-09 1s 1s 374277830e-09 0s 0s 374280070e-09 0s 0s 374282350e-09 1s 1s 374288070e-09 0s 0s 374290350e-09 0s 0s 374292590e-09 1s 1s 374298310e-09 0s 0s 374300630e-09 0s 0s 374302830e-09 1s 1s 374308550e-09 0s 0s 374310910e-09 0s 0s 374313070e-09 1s 1s 374318790e-09 0s 0s 374321190e-09 0s 0s 374323310e-09 1s 1s 374329030e-09 0s 0s 374331470e-09 0s 0s 374333550e-09 1s 1s 374339270e-09 0s 0s 374341750e-09 0s 0s 374343790e-09 1s 1s 374349510e-09 0s 0s 374352030e-09 0s 0s 374354030e-09 1s 1s 374359750e-09 0s 0s 374362310e-09 0s 0s 374364270e-09 1s 1s 374369990e-09 0s 0s 374372590e-09 0s 0s 374374510e-09 1s 1s 374380230e-09 0s 0s 374382870e-09 0s 0s 374384750e-09 1s 1s 374390470e-09 0s 0s 374393150e-09 0s 0s 374394990e-09 1s 1s 374400710e-09 0s 0s 374403430e-09 0s 0s 374405230e-09 1s 1s 374410950e-09 0s 0s 374413710e-09 0s 0s 374415470e-09 1s 1s 374421190e-09 0s 0s 374423990e-09 0s 0s 374425710e-09 1s 1s 374431430e-09 0s 0s 374434270e-09 0s 0s 374435950e-09 1s 1s 374441670e-09 0s 0s 374444550e-09 0s 0s 374446190e-09 1s 1s 374451910e-09 0s 0s 374454830e-09 0s 0s 374456430e-09 1s 1s 374462150e-09 0s 0s 374465110e-09 0s 0s 374466670e-09 1s 1s 374472390e-09 0s 0s 374475390e-09 0s 0s 374476910e-09 1s 1s 374482630e-09 0s 0s 374485670e-09 0s 0s 374487150e-09 1s 1s 374492870e-09 0s 0s 374495950e-09 0s 0s 374497390e-09 1s 1s 374503110e-09 0s 0s 374506230e-09 0s 0s 374507630e-09 1s 1s 374513350e-09 0s 0s 374516510e-09 0s 0s 374517870e-09 1s 1s 374523590e-09 0s 0s 374526790e-09 0s 0s 374528110e-09 1s 1s 374533830e-09 0s 0s 374537070e-09 0s 0s 374538350e-09 1s 1s 374544070e-09 0s 0s 374547350e-09 0s 0s 374548590e-09 1s 1s 374554310e-09 0s 0s 374557630e-09 0s 0s 374558830e-09 1s 1s 374564550e-09 0s 0s 374567910e-09 0s 0s 374569070e-09 1s 1s 374574790e-09 0s 0s 374578190e-09 0s 0s 374579310e-09 1s 1s 374585030e-09 0s 0s 374588470e-09 0s 0s 374589550e-09 1s 1s 374595270e-09 0s 0s 374598750e-09 0s 0s 374599790e-09 1s 1s 374605510e-09 0s 0s 374609030e-09 0s 0s 374610030e-09 1s 1s 374615750e-09 0s 0s 374619310e-09 0s 0s 374620270e-09 1s 1s 374625990e-09 0s 0s 374629590e-09 0s 0s 374630510e-09 1s 1s 374636230e-09 0s 0s 374639870e-09 0s 0s 374640750e-09 1s 1s 374646470e-09 0s 0s 374650150e-09 0s 0s 374650990e-09 1s 1s 374656710e-09 0s 0s 374660430e-09 0s 0s 374661230e-09 1s 1s 374666950e-09 0s 0s 374670710e-09 0s 0s 374671470e-09 1s 1s 374677190e-09 0s 0s 374680990e-09 0s 0s 374681710e-09 1s 1s 374687430e-09 0s 0s 374691270e-09 0s 0s 374691950e-09 1s 1s 374697670e-09 0s 0s 374701550e-09 0s 0s 374702190e-09 1s 1s 374707910e-09 0s 0s 374711830e-09 0s 0s 374712430e-09 1s 1s 374718150e-09 0s 0s 374722110e-09 0s 0s 374722670e-09 1s 1s 374728390e-09 0s 0s 374732390e-09 0s 0s 374732910e-09 1s 1s 374738630e-09 0s 0s 374742670e-09 0s 0s 374743150e-09 1s 1s 374748870e-09 0s 0s 374752950e-09 0s 0s 374753390e-09 1s 1s 374759110e-09 0s 0s 374763230e-09 0s 0s 374763630e-09 1s 1s 374769350e-09 0s 0s 374773510e-09 0s 0s 374773870e-09 1s 1s 374779590e-09 0s 0s 374783790e-09 0s 0s 374784110e-09 1s 1s 374789830e-09 0s 0s 374794070e-09 0s 0s 374794350e-09 1s 1s 374800070e-09 0s 0s 374804350e-09 0s 0s 374804590e-09 1s 1s 374810310e-09 0s 0s 374814630e-09 0s 0s 374814830e-09 1s 1s 374820550e-09 0s 0s 374824910e-09 0s 0s 374825070e-09 1s 1s 374830790e-09 0s 0s 374835190e-09 0s 0s 374835310e-09 1s 1s 374841030e-09 0s 0s 374845470e-09 0s 0s 374845550e-09 1s 1s 374851270e-09 0s 0s 374855750e-09 0s 0s 374855790e-09 1s 1s 374861510e-09 0s 0s 374866030e-09 1s 1s 374866070e-09 1s 1s 374871790e-09 0s 0s 374876270e-09 1s 1s 374876350e-09 1s 1s 374882030e-09 0s 0s 374886510e-09 1s 1s 374886630e-09 1s 1s 374892270e-09 0s 0s 374896750e-09 1s 1s 374896910e-09 1s 1s 374902510e-09 0s 0s 374906990e-09 1s 1s 374907190e-09 1s 1s 374912750e-09 0s 0s 374917230e-09 1s 1s 374917470e-09 1s 1s 374922990e-09 0s 0s 374927470e-09 1s 1s 374927750e-09 1s 1s 374933230e-09 0s 0s 374937710e-09 1s 1s 374938030e-09 1s 1s 374943470e-09 0s 0s 374947950e-09 1s 1s 374948310e-09 1s 1s 374953710e-09 0s 0s 374958190e-09 1s 1s 374958590e-09 1s 1s 374963950e-09 0s 0s 374968430e-09 1s 1s 374968870e-09 1s 1s 374974190e-09 0s 0s 374978670e-09 1s 1s 374979150e-09 1s 1s 374984430e-09 0s 0s 374988910e-09 1s 1s 374989430e-09 1s 1s 374994670e-09 0s 0s 374999150e-09 1s 1s 374999710e-09 1s 1s 375004910e-09 0s 0s 375009390e-09 1s 1s 375009990e-09 1s 1s 375015150e-09 0s 0s 375019630e-09 1s 1s 375020270e-09 1s 1s 375025390e-09 0s 0s 375029870e-09 1s 1s 375030550e-09 1s 1s 375035630e-09 0s 0s 375040110e-09 1s 1s 375040830e-09 1s 1s 375045870e-09 0s 0s 375050350e-09 1s 1s 375051110e-09 1s 1s 375056110e-09 0s 0s 375060590e-09 1s 1s 375061390e-09 1s 1s 375066350e-09 0s 0s 375070830e-09 1s 1s 375071670e-09 1s 1s 375076590e-09 0s 0s 375081070e-09 1s 1s 375081950e-09 1s 1s 375086830e-09 0s 0s 375091310e-09 1s 1s 375092230e-09 1s 1s 375097070e-09 0s 0s 375101550e-09 1s 1s 375102510e-09 1s 1s 375107310e-09 0s 0s 375111790e-09 1s 1s 375112790e-09 1s 1s 375117550e-09 0s 0s 375122030e-09 1s 1s 375123070e-09 1s 1s 375127790e-09 0s 0s 375132270e-09 1s 1s 375133350e-09 1s 1s 375138030e-09 0s 0s 375142510e-09 1s 1s 375143630e-09 1s 1s 375148270e-09 0s 0s 375152750e-09 1s 1s 375153910e-09 1s 1s 375158510e-09 0s 0s 375162990e-09 1s 1s 375164190e-09 1s 1s 375168750e-09 0s 0s 375173230e-09 1s 1s 375174470e-09 1s 1s 375178990e-09 0s 0s 375183470e-09 1s 1s 375184750e-09 1s 1s 375189230e-09 0s 0s 375193710e-09 1s 1s 375195030e-09 1s 1s 375199470e-09 0s 0s 375203950e-09 1s 1s 375205310e-09 1s 1s 375209710e-09 0s 0s 375214190e-09 1s 1s 375215590e-09 1s 1s 375219950e-09 0s 0s 375224430e-09 1s 1s 375225870e-09 1s 1s 375230190e-09 0s 0s 375234670e-09 1s 1s 375236150e-09 1s 1s 375240430e-09 0s 0s 375244910e-09 1s 1s 375246430e-09 1s 1s 375250670e-09 0s 0s 375255150e-09 1s 1s 375256710e-09 1s 1s 375260910e-09 0s 0s 375265390e-09 1s 1s 375266990e-09 1s 1s 375271150e-09 0s 0s 375275630e-09 1s 1s 375277270e-09 1s 1s 375281390e-09 0s 0s 375285870e-09 1s 1s 375287550e-09 1s 1s 375291630e-09 0s 0s 375296110e-09 1s 1s 375297830e-09 1s 1s 375301870e-09 0s 0s 375306350e-09 1s 1s 375308110e-09 1s 1s 375312110e-09 0s 0s 375316590e-09 1s 1s 375318390e-09 1s 1s 375322350e-09 0s 0s 375326830e-09 1s 1s 375328670e-09 1s 1s 375332590e-09 0s 0s 375337070e-09 1s 1s 375338950e-09 1s 1s 375342830e-09 0s 0s 375347310e-09 1s 1s 375349230e-09 1s 1s 375353070e-09 0s 0s 375357550e-09 1s 1s 375359510e-09 1s 1s 375363310e-09 0s 0s 375367790e-09 1s 1s 375369790e-09 1s 1s 375373550e-09 0s 0s 375378030e-09 1s 1s 375380070e-09 1s 1s 375383790e-09 0s 0s 375388270e-09 1s 1s 375390350e-09 1s 1s 375394030e-09 0s 0s 375398510e-09 1s 1s 375400630e-09 1s 1s 375404270e-09 0s 0s 375408750e-09 1s 1s 375410910e-09 1s 1s 375414510e-09 0s 0s 375418990e-09 1s 1s 375421190e-09 1s 1s 375424750e-09 0s 0s 375429230e-09 1s 1s 375431470e-09 1s 1s 375434990e-09 0s 0s 375439470e-09 1s 1s 375441750e-09 1s 1s 375445230e-09 0s 0s 375449710e-09 1s 1s 375452030e-09 1s 1s 375455470e-09 0s 0s 375459950e-09 1s 1s 375462310e-09 1s 1s 375465710e-09 0s 0s 375470190e-09 1s 1s 375472590e-09 1s 1s 375475950e-09 0s 0s 375480430e-09 1s 1s 375482870e-09 1s 1s 375486190e-09 0s 0s 375490670e-09 1s 1s 375493150e-09 1s 1s 375496430e-09 0s 0s 375500910e-09 1s 1s 375503430e-09 1s 1s 375506670e-09 0s 0s 375511150e-09 1s 1s 375513710e-09 1s 1s 375516910e-09 0s 0s 375521390e-09 1s 1s 375523990e-09 1s 1s 375527150e-09 0s 0s 375531630e-09 1s 1s 375534270e-09 1s 1s 375537390e-09 0s 0s 375541870e-09 1s 1s 375544550e-09 1s 1s 375547630e-09 0s 0s 375552110e-09 1s 1s 375554830e-09 1s 1s 375557870e-09 0s 0s 375562350e-09 1s 1s 375565110e-09 1s 1s 375568110e-09 0s 0s 375572590e-09 1s 1s 375575390e-09 1s 1s 375578350e-09 0s 0s 375582830e-09 1s 1s 375585670e-09 1s 1s 375588590e-09 0s 0s 375593070e-09 1s 1s 375595950e-09 1s 1s 375598830e-09 0s 0s 375603310e-09 1s 1s 375606230e-09 1s 1s 375609070e-09 0s 0s 375613550e-09 1s 1s 375616510e-09 1s 1s 375619310e-09 0s 0s 375623790e-09 1s 1s 375626790e-09 1s 1s 375629550e-09 0s 0s 375634030e-09 1s 1s 375637070e-09 1s 1s 375639790e-09 0s 0s 375644270e-09 1s 1s 375647350e-09 1s 1s 375650030e-09 0s 0s 375654510e-09 1s 1s 375657630e-09 1s 1s 375660270e-09 0s 0s 375664750e-09 1s 1s 375667910e-09 1s 1s 375670510e-09 0s 0s 375674990e-09 1s 1s 375678190e-09 1s 1s 375680750e-09 0s 0s 375685230e-09 1s 1s 375688470e-09 1s 1s 375690990e-09 0s 0s 375695470e-09 1s 1s 375698750e-09 1s 1s 375701230e-09 0s 0s 375705710e-09 1s 1s 375709030e-09 1s 1s 375711470e-09 0s 0s 375715950e-09 1s 1s 375719310e-09 1s 1s 375721710e-09 0s 0s 375726190e-09 1s 1s 375729590e-09 1s 1s 375731950e-09 0s 0s 375736430e-09 1s 1s 375739870e-09 1s 1s 375742190e-09 0s 0s 375746670e-09 1s 1s 375750150e-09 1s 1s 375752430e-09 0s 0s 375756910e-09 1s 1s 375760430e-09 1s 1s 375762670e-09 0s 0s 375767150e-09 1s 1s 375770710e-09 1s 1s 375772910e-09 0s 0s 375777390e-09 1s 1s 375780990e-09 1s 1s 375783150e-09 0s 0s 375787630e-09 1s 1s 375791270e-09 1s 1s 375793390e-09 0s 0s 375797870e-09 1s 1s 375801550e-09 1s 1s 375803630e-09 0s 0s 375808110e-09 1s 1s 375811830e-09 1s 1s 375813870e-09 0s 0s 375818350e-09 1s 1s 375822110e-09 1s 1s 375824110e-09 0s 0s 375828590e-09 1s 1s 375832390e-09 1s 1s 375834350e-09 0s 0s 375838830e-09 1s 1s 375842670e-09 1s 1s 375844590e-09 0s 0s 375849070e-09 1s 1s 375852950e-09 1s 1s 375854830e-09 0s 0s 375859310e-09 1s 1s 375863230e-09 1s 1s 375865070e-09 0s 0s 375869550e-09 1s 1s 375873510e-09 1s 1s 375875310e-09 0s 0s 375879790e-09 1s 1s 375883790e-09 1s 1s 375885550e-09 0s 0s 375890030e-09 1s 1s 375894070e-09 1s 1s 375895790e-09 0s 0s 375900270e-09 1s 1s 375904350e-09 1s 1s 375906030e-09 0s 0s 375910510e-09 1s 1s 375914630e-09 1s 1s 375916270e-09 0s 0s 375920750e-09 1s 1s 375924910e-09 1s 1s 375926510e-09 0s 0s 375930990e-09 1s 1s 375935190e-09 1s 1s 375936750e-09 0s 0s 375941230e-09 1s 1s 375945470e-09 1s 1s 375946990e-09 0s 0s 375951470e-09 1s 1s 375955750e-09 1s 1s 375957230e-09 0s 0s 375961710e-09 1s 1s 375966030e-09 1s 1s 375967470e-09 0s 0s 375971950e-09 1s 1s 375976310e-09 1s 1s 375977710e-09 0s 0s 375982190e-09 1s 1s 375986590e-09 1s 1s 375987950e-09 0s 0s 375992430e-09 1s 1s 375996870e-09 1s 1s 375998190e-09 0s 0s 376002670e-09 1s 1s 376007150e-09 1s 1s 376008430e-09 0s 0s 376012910e-09 1s 1s 376017430e-09 1s 1s 376018670e-09 0s 0s 376023150e-09 1s 1s 376027710e-09 1s 1s 376028910e-09 0s 0s 376033390e-09 1s 1s 376037990e-09 1s 1s 376039150e-09 0s 0s 376043630e-09 1s 1s 376048270e-09 1s 1s 376049390e-09 0s 0s 376053870e-09 1s 1s 376058550e-09 1s 1s 376059630e-09 0s 0s 376064110e-09 1s 1s 376068830e-09 1s 1s 376069870e-09 0s 0s 376074350e-09 1s 1s 376079110e-09 1s 1s 376080110e-09 0s 0s 376084590e-09 1s 1s 376089390e-09 1s 1s 376090350e-09 0s 0s 376094830e-09 1s 1s 376099670e-09 1s 1s 376100590e-09 0s 0s 376105070e-09 1s 1s 376109950e-09 1s 1s 376110830e-09 0s 0s 376115310e-09 1s 1s 376120230e-09 1s 1s 376121070e-09 0s 0s 376125550e-09 1s 1s 376130510e-09 1s 1s 376131310e-09 0s 0s 376135790e-09 1s 1s 376140790e-09 1s 1s 376141550e-09 0s 0s 376146030e-09 1s 1s 376151070e-09 1s 1s 376151790e-09 0s 0s 376156270e-09 1s 1s 376161350e-09 1s 1s 376162030e-09 0s 0s 376166510e-09 1s 1s 376171630e-09 1s 1s 376172270e-09 0s 0s 376176750e-09 1s 1s 376181910e-09 1s 1s 376182510e-09 0s 0s 376186990e-09 1s 1s 376192190e-09 1s 1s 376192750e-09 0s 0s 376197230e-09 1s 1s 376202470e-09 1s 1s 376202990e-09 0s 0s 376207470e-09 1s 1s 376212750e-09 1s 1s 376213230e-09 0s 0s 376217710e-09 1s 1s 376223030e-09 1s 1s 376223470e-09 0s 0s 376227950e-09 1s 1s 376233310e-09 1s 1s 376233710e-09 0s 0s 376238190e-09 1s 1s 376243590e-09 1s 1s 376243950e-09 0s 0s 376248430e-09 1s 1s 376253870e-09 1s 1s 376254190e-09 0s 0s 376258670e-09 1s 1s 376264150e-09 1s 1s 376264430e-09 0s 0s 376268910e-09 1s 1s 376274430e-09 1s 1s 376274670e-09 0s 0s 376279150e-09 1s 1s 376284710e-09 1s 1s 376284910e-09 0s 0s 376289390e-09 1s 1s 376294990e-09 1s 1s 376295150e-09 0s 0s 376299630e-09 1s 1s 376305270e-09 1s 1s 376305390e-09 0s 0s 376309870e-09 1s 1s 376315550e-09 1s 1s 376315630e-09 0s 0s 376320110e-09 1s 1s 376325830e-09 1s 1s 376325870e-09 0s 0s 376330350e-09 1s 1s 376336110e-09 0s 0s 376340590e-09 1s 1s 376346350e-09 0s 0s 376346390e-09 0s 0s 376350830e-09 1s 1s 376356590e-09 0s 0s 376356670e-09 0s 0s 376361070e-09 1s 1s 376366830e-09 0s 0s 376366950e-09 0s 0s 376371310e-09 1s 1s 376377070e-09 0s 0s 376377230e-09 0s 0s 376381550e-09 1s 1s 376387310e-09 0s 0s 376387510e-09 0s 0s 376391790e-09 1s 1s 376397550e-09 0s 0s 376397790e-09 0s 0s 376402030e-09 1s 1s 376407790e-09 0s 0s 376408070e-09 0s 0s 376412270e-09 1s 1s 376418030e-09 0s 0s 376418350e-09 0s 0s 376422510e-09 1s 1s 376428270e-09 0s 0s 376428630e-09 0s 0s 376432750e-09 1s 1s 376438510e-09 0s 0s 376438910e-09 0s 0s 376442990e-09 1s 1s 376448750e-09 0s 0s 376449190e-09 0s 0s 376453230e-09 1s 1s 376458990e-09 0s 0s 376459470e-09 0s 0s 376463470e-09 1s 1s 376469230e-09 0s 0s 376469750e-09 0s 0s 376473710e-09 1s 1s 376479470e-09 0s 0s 376480030e-09 0s 0s 376483950e-09 1s 1s 376489710e-09 0s 0s 376490310e-09 0s 0s 376494190e-09 1s 1s 376499950e-09 0s 0s 376500590e-09 0s 0s 376504430e-09 1s 1s 376510190e-09 0s 0s 376510870e-09 0s 0s 376514670e-09 1s 1s 376520430e-09 0s 0s 376521150e-09 0s 0s 376524910e-09 1s 1s 376530670e-09 0s 0s 376531430e-09 0s 0s 376535150e-09 1s 1s 376540910e-09 0s 0s 376541710e-09 0s 0s 376545390e-09 1s 1s 376551150e-09 0s 0s 376551990e-09 0s 0s 376555630e-09 1s 1s 376561390e-09 0s 0s 376562270e-09 0s 0s 376565870e-09 1s 1s 376571630e-09 0s 0s 376572550e-09 0s 0s 376576110e-09 1s 1s 376581870e-09 0s 0s 376582830e-09 0s 0s 376586350e-09 1s 1s 376592110e-09 0s 0s 376593110e-09 0s 0s 376596590e-09 1s 1s 376602350e-09 0s 0s 376603390e-09 0s 0s 376606830e-09 1s 1s 376612590e-09 0s 0s 376613670e-09 0s 0s 376617070e-09 1s 1s 376622830e-09 0s 0s 376623950e-09 0s 0s 376627310e-09 1s 1s 376633070e-09 0s 0s 376634230e-09 0s 0s 376637550e-09 1s 1s 376643310e-09 0s 0s 376644510e-09 0s 0s 376647790e-09 1s 1s 376653550e-09 0s 0s 376654790e-09 0s 0s 376658030e-09 1s 1s 376663790e-09 0s 0s 376665070e-09 0s 0s 376668270e-09 1s 1s 376674030e-09 0s 0s 376675350e-09 0s 0s 376678510e-09 1s 1s 376684270e-09 0s 0s 376685630e-09 0s 0s 376688750e-09 1s 1s 376694510e-09 0s 0s 376695910e-09 0s 0s 376698990e-09 1s 1s 376704750e-09 0s 0s 376706190e-09 0s 0s 376709230e-09 1s 1s 376714990e-09 0s 0s 376716470e-09 0s 0s 376719470e-09 1s 1s 376725230e-09 0s 0s 376726750e-09 0s 0s 376729710e-09 1s 1s 376735470e-09 0s 0s 376737030e-09 0s 0s 376739950e-09 1s 1s 376745710e-09 0s 0s 376747310e-09 0s 0s 376750190e-09 1s 1s 376755950e-09 0s 0s 376757590e-09 0s 0s 376760430e-09 1s 1s 376766190e-09 0s 0s 376767870e-09 0s 0s 376770670e-09 1s 1s 376776430e-09 0s 0s 376778150e-09 0s 0s 376780910e-09 1s 1s 376786670e-09 0s 0s 376788430e-09 0s 0s 376791150e-09 1s 1s 376796910e-09 0s 0s 376798710e-09 0s 0s 376801390e-09 1s 1s 376807150e-09 0s 0s 376808990e-09 0s 0s 376811630e-09 1s 1s 376817390e-09 0s 0s 376819270e-09 0s 0s 376821870e-09 1s 1s 376827630e-09 0s 0s 376829550e-09 0s 0s 376832110e-09 1s 1s 376837870e-09 0s 0s 376839830e-09 0s 0s 376842350e-09 1s 1s 376848110e-09 0s 0s 376850110e-09 0s 0s 376852590e-09 1s 1s 376858350e-09 0s 0s 376860390e-09 0s 0s 376862830e-09 1s 1s 376868590e-09 0s 0s 376870670e-09 0s 0s 376873070e-09 1s 1s 376878830e-09 0s 0s 376880950e-09 0s 0s 376883310e-09 1s 1s 376889070e-09 0s 0s 376891230e-09 0s 0s 376893550e-09 1s 1s 376899310e-09 0s 0s 376901510e-09 0s 0s 376903790e-09 1s 1s 376909550e-09 0s 0s 376911790e-09 0s 0s 376914030e-09 1s 1s 376919790e-09 0s 0s 376922070e-09 0s 0s 376924270e-09 1s 1s 376930030e-09 0s 0s 376932350e-09 0s 0s 376934510e-09 1s 1s 376940270e-09 0s 0s 376942630e-09 0s 0s 376944750e-09 1s 1s 376950510e-09 0s 0s 376952910e-09 0s 0s 376954990e-09 1s 1s 376960750e-09 0s 0s 376963190e-09 0s 0s 376965230e-09 1s 1s 376970990e-09 0s 0s 376973470e-09 0s 0s 376975470e-09 1s 1s 376981230e-09 0s 0s 376983750e-09 0s 0s 376985710e-09 1s 1s 376991470e-09 0s 0s 376994030e-09 0s 0s 376995950e-09 1s 1s 377001710e-09 0s 0s 377004310e-09 0s 0s 377006190e-09 1s 1s 377011950e-09 0s 0s 377014590e-09 0s 0s 377016430e-09 1s 1s 377022190e-09 0s 0s 377024870e-09 0s 0s 377026670e-09 1s 1s 377032430e-09 0s 0s 377035150e-09 0s 0s 377036910e-09 1s 1s 377042670e-09 0s 0s 377045430e-09 0s 0s 377047150e-09 1s 1s 377052910e-09 0s 0s 377055710e-09 0s 0s 377057390e-09 1s 1s 377063150e-09 0s 0s 377065990e-09 0s 0s 377067630e-09 1s 1s 377073390e-09 0s 0s 377076270e-09 0s 0s 377077870e-09 1s 1s 377083630e-09 0s 0s 377086550e-09 0s 0s 377088110e-09 1s 1s 377093870e-09 0s 0s 377096830e-09 0s 0s 377098350e-09 1s 1s 377104110e-09 0s 0s 377107110e-09 0s 0s 377108590e-09 1s 1s 377114350e-09 0s 0s 377117390e-09 0s 0s 377118830e-09 1s 1s 377124590e-09 0s 0s 377127670e-09 0s 0s 377129070e-09 1s 1s 377134830e-09 0s 0s 377137950e-09 0s 0s 377139310e-09 1s 1s 377145070e-09 0s 0s 377148230e-09 0s 0s 377149550e-09 1s 1s 377155310e-09 0s 0s 377158510e-09 0s 0s 377159790e-09 1s 1s 377165550e-09 0s 0s 377168790e-09 0s 0s 377170030e-09 1s 1s 377175790e-09 0s 0s 377179070e-09 0s 0s 377180270e-09 1s 1s 377186030e-09 0s 0s 377189350e-09 0s 0s 377190510e-09 1s 1s 377196270e-09 0s 0s 377199630e-09 0s 0s 377200750e-09 1s 1s 377206510e-09 0s 0s 377209910e-09 0s 0s 377210990e-09 1s 1s 377216750e-09 0s 0s 377220190e-09 0s 0s 377221230e-09 1s 1s 377226990e-09 0s 0s 377230470e-09 0s 0s 377231470e-09 1s 1s 377237230e-09 0s 0s 377240750e-09 0s 0s 377241710e-09 1s 1s 377247470e-09 0s 0s 377251030e-09 0s 0s 377251950e-09 1s 1s 377257710e-09 0s 0s 377261310e-09 0s 0s 377262190e-09 1s 1s 377267950e-09 0s 0s 377271590e-09 0s 0s 377272430e-09 1s 1s 377278190e-09 0s 0s 377281870e-09 0s 0s 377282670e-09 1s 1s 377288430e-09 0s 0s 377292150e-09 0s 0s 377292910e-09 1s 1s 377298670e-09 0s 0s 377302430e-09 0s 0s 377303150e-09 1s 1s 377308910e-09 0s 0s 377312710e-09 0s 0s 377313390e-09 1s 1s 377319150e-09 0s 0s 377322990e-09 0s 0s 377323630e-09 1s 1s 377329390e-09 0s 0s 377333270e-09 0s 0s 377333870e-09 1s 1s 377339630e-09 0s 0s 377343550e-09 0s 0s 377344110e-09 1s 1s 377349870e-09 0s 0s 377353830e-09 0s 0s 377354350e-09 1s 1s 377360110e-09 0s 0s 377364110e-09 0s 0s 377364590e-09 1s 1s 377370350e-09 0s 0s 377374390e-09 0s 0s 377374830e-09 1s 1s 377380590e-09 0s 0s 377384670e-09 0s 0s 377385070e-09 1s 1s 377390830e-09 0s 0s 377394950e-09 0s 0s 377395310e-09 1s 1s 377401070e-09 0s 0s 377405230e-09 0s 0s 377405550e-09 1s 1s 377411310e-09 0s 0s 377415510e-09 0s 0s 377415790e-09 1s 1s 377421550e-09 0s 0s 377425790e-09 0s 0s 377426030e-09 1s 1s 377431790e-09 0s 0s 377436070e-09 0s 0s 377436270e-09 1s 1s 377442030e-09 0s 0s 377446350e-09 0s 0s 377446510e-09 1s 1s 377452270e-09 0s 0s 377456630e-09 0s 0s 377456750e-09 1s 1s 377462510e-09 0s 0s 377466910e-09 0s 0s 377466990e-09 1s 1s 377472750e-09 0s 0s 377477190e-09 0s 0s 377477230e-09 1s 1s 377482990e-09 0s 0s 377487470e-09 1s 1s 377487510e-09 1s 1s 377493270e-09 0s 0s 377497710e-09 1s 1s 377497790e-09 1s 1s 377503510e-09 0s 0s 377507950e-09 1s 1s 377508070e-09 1s 1s 377513750e-09 0s 0s 377518190e-09 1s 1s 377518350e-09 1s 1s 377523990e-09 0s 0s 377528430e-09 1s 1s 377528630e-09 1s 1s 377534230e-09 0s 0s 377538670e-09 1s 1s 377538910e-09 1s 1s 377544470e-09 0s 0s 377548910e-09 1s 1s 377549190e-09 1s 1s 377554710e-09 0s 0s 377559150e-09 1s 1s 377559470e-09 1s 1s 377564950e-09 0s 0s 377569390e-09 1s 1s 377569750e-09 1s 1s 377575190e-09 0s 0s 377579630e-09 1s 1s 377580030e-09 1s 1s 377585430e-09 0s 0s 377589870e-09 1s 1s 377590310e-09 1s 1s 377595670e-09 0s 0s 377600110e-09 1s 1s 377600590e-09 1s 1s 377605910e-09 0s 0s 377610350e-09 1s 1s 377610870e-09 1s 1s 377616150e-09 0s 0s 377620590e-09 1s 1s 377621150e-09 1s 1s 377626390e-09 0s 0s 377630830e-09 1s 1s 377631430e-09 1s 1s 377636630e-09 0s 0s 377641070e-09 1s 1s 377641710e-09 1s 1s 377646870e-09 0s 0s 377651310e-09 1s 1s 377651990e-09 1s 1s 377657110e-09 0s 0s 377661550e-09 1s 1s 377662270e-09 1s 1s 377667350e-09 0s 0s 377671790e-09 1s 1s 377672550e-09 1s 1s 377677590e-09 0s 0s 377682030e-09 1s 1s 377682830e-09 1s 1s 377687830e-09 0s 0s 377692270e-09 1s 1s 377693110e-09 1s 1s 377698070e-09 0s 0s 377702510e-09 1s 1s 377703390e-09 1s 1s 377708310e-09 0s 0s 377712750e-09 1s 1s 377713670e-09 1s 1s 377718550e-09 0s 0s 377722990e-09 1s 1s 377723950e-09 1s 1s 377728790e-09 0s 0s 377733230e-09 1s 1s 377734230e-09 1s 1s 377739030e-09 0s 0s 377743470e-09 1s 1s 377744510e-09 1s 1s 377749270e-09 0s 0s 377753710e-09 1s 1s 377754790e-09 1s 1s 377759510e-09 0s 0s 377763950e-09 1s 1s 377765070e-09 1s 1s 377769750e-09 0s 0s 377774190e-09 1s 1s 377775350e-09 1s 1s 377779990e-09 0s 0s 377784430e-09 1s 1s 377785630e-09 1s 1s 377790230e-09 0s 0s 377794670e-09 1s 1s 377795910e-09 1s 1s 377800470e-09 0s 0s 377804910e-09 1s 1s 377806190e-09 1s 1s 377810710e-09 0s 0s 377815150e-09 1s 1s 377816470e-09 1s 1s 377820950e-09 0s 0s 377825390e-09 1s 1s 377826750e-09 1s 1s 377831190e-09 0s 0s 377835630e-09 1s 1s 377837030e-09 1s 1s 377841430e-09 0s 0s 377845870e-09 1s 1s 377847310e-09 1s 1s 377851670e-09 0s 0s 377856110e-09 1s 1s 377857590e-09 1s 1s 377861910e-09 0s 0s 377866350e-09 1s 1s 377867870e-09 1s 1s 377872150e-09 0s 0s 377876590e-09 1s 1s 377878150e-09 1s 1s 377882390e-09 0s 0s 377886830e-09 1s 1s 377888430e-09 1s 1s 377892630e-09 0s 0s 377897070e-09 1s 1s 377898710e-09 1s 1s 377902870e-09 0s 0s 377907310e-09 1s 1s 377908990e-09 1s 1s 377913110e-09 0s 0s 377917550e-09 1s 1s 377919270e-09 1s 1s 377923350e-09 0s 0s 377927790e-09 1s 1s 377929550e-09 1s 1s 377933590e-09 0s 0s 377938030e-09 1s 1s 377939830e-09 1s 1s 377943830e-09 0s 0s 377948270e-09 1s 1s 377950110e-09 1s 1s 377954070e-09 0s 0s 377958510e-09 1s 1s 377960390e-09 1s 1s 377964310e-09 0s 0s 377968750e-09 1s 1s 377970670e-09 1s 1s 377974550e-09 0s 0s 377978990e-09 1s 1s 377980950e-09 1s 1s 377984790e-09 0s 0s 377989230e-09 1s 1s 377991230e-09 1s 1s 377995030e-09 0s 0s 377999470e-09 1s 1s 378001510e-09 1s 1s 378005270e-09 0s 0s 378009710e-09 1s 1s 378011790e-09 1s 1s 378015510e-09 0s 0s 378019950e-09 1s 1s 378022070e-09 1s 1s 378025750e-09 0s 0s 378030190e-09 1s 1s 378032350e-09 1s 1s 378035990e-09 0s 0s 378040430e-09 1s 1s 378042630e-09 1s 1s 378046230e-09 0s 0s 378050670e-09 1s 1s 378052910e-09 1s 1s 378056470e-09 0s 0s 378060910e-09 1s 1s 378063190e-09 1s 1s 378066710e-09 0s 0s 378071150e-09 1s 1s 378073470e-09 1s 1s 378076950e-09 0s 0s 378081390e-09 1s 1s 378083750e-09 1s 1s 378087190e-09 0s 0s 378091630e-09 1s 1s 378094030e-09 1s 1s 378097430e-09 0s 0s 378101870e-09 1s 1s 378104310e-09 1s 1s 378107670e-09 0s 0s 378112110e-09 1s 1s 378114590e-09 1s 1s 378117910e-09 0s 0s 378122350e-09 1s 1s 378124870e-09 1s 1s 378128150e-09 0s 0s 378132590e-09 1s 1s 378135150e-09 1s 1s 378138390e-09 0s 0s 378142830e-09 1s 1s 378145430e-09 1s 1s 378148630e-09 0s 0s 378153070e-09 1s 1s 378155710e-09 1s 1s 378158870e-09 0s 0s 378163310e-09 1s 1s 378165990e-09 1s 1s 378169110e-09 0s 0s 378173550e-09 1s 1s 378176270e-09 1s 1s 378179350e-09 0s 0s 378183790e-09 1s 1s 378186550e-09 1s 1s 378189590e-09 0s 0s 378194030e-09 1s 1s 378196830e-09 1s 1s 378199830e-09 0s 0s 378204270e-09 1s 1s 378207110e-09 1s 1s 378210070e-09 0s 0s 378214510e-09 1s 1s 378217390e-09 1s 1s 378220310e-09 0s 0s 378224750e-09 1s 1s 378227670e-09 1s 1s 378230550e-09 0s 0s 378234990e-09 1s 1s 378237950e-09 1s 1s 378240790e-09 0s 0s 378245230e-09 1s 1s 378248230e-09 1s 1s 378251030e-09 0s 0s 378255470e-09 1s 1s 378258510e-09 1s 1s 378261270e-09 0s 0s 378265710e-09 1s 1s 378268790e-09 1s 1s 378271510e-09 0s 0s 378275950e-09 1s 1s 378279070e-09 1s 1s 378281750e-09 0s 0s 378286190e-09 1s 1s 378289350e-09 1s 1s 378291990e-09 0s 0s 378296430e-09 1s 1s 378299630e-09 1s 1s 378302230e-09 0s 0s 378306670e-09 1s 1s 378309910e-09 1s 1s 378312470e-09 0s 0s 378316910e-09 1s 1s 378320190e-09 1s 1s 378322710e-09 0s 0s 378327150e-09 1s 1s 378330470e-09 1s 1s 378332950e-09 0s 0s 378337390e-09 1s 1s 378340750e-09 1s 1s 378343190e-09 0s 0s 378347630e-09 1s 1s 378351030e-09 1s 1s 378353430e-09 0s 0s 378357870e-09 1s 1s 378361310e-09 1s 1s 378363670e-09 0s 0s 378368110e-09 1s 1s 378371590e-09 1s 1s 378373910e-09 0s 0s 378378350e-09 1s 1s 378381870e-09 1s 1s 378384150e-09 0s 0s 378388590e-09 1s 1s 378392150e-09 1s 1s 378394390e-09 0s 0s 378398830e-09 1s 1s 378402430e-09 1s 1s 378404630e-09 0s 0s 378409070e-09 1s 1s 378412710e-09 1s 1s 378414870e-09 0s 0s 378419310e-09 1s 1s 378422990e-09 1s 1s 378425110e-09 0s 0s 378429550e-09 1s 1s 378433270e-09 1s 1s 378435350e-09 0s 0s 378439790e-09 1s 1s 378443550e-09 1s 1s 378445590e-09 0s 0s 378450030e-09 1s 1s 378453830e-09 1s 1s 378455830e-09 0s 0s 378460270e-09 1s 1s 378464110e-09 1s 1s 378466070e-09 0s 0s 378470510e-09 1s 1s 378474390e-09 1s 1s 378476310e-09 0s 0s 378480750e-09 1s 1s 378484670e-09 1s 1s 378486550e-09 0s 0s 378490990e-09 1s 1s 378494950e-09 1s 1s 378496790e-09 0s 0s 378501230e-09 1s 1s 378505230e-09 1s 1s 378507030e-09 0s 0s 378511470e-09 1s 1s 378515510e-09 1s 1s 378517270e-09 0s 0s 378521710e-09 1s 1s 378525790e-09 1s 1s 378527510e-09 0s 0s 378531950e-09 1s 1s 378536070e-09 1s 1s 378537750e-09 0s 0s 378542190e-09 1s 1s 378546350e-09 1s 1s 378547990e-09 0s 0s 378552430e-09 1s 1s 378556630e-09 1s 1s 378558230e-09 0s 0s 378562670e-09 1s 1s 378566910e-09 1s 1s 378568470e-09 0s 0s 378572910e-09 1s 1s 378577190e-09 1s 1s 378578710e-09 0s 0s 378583150e-09 1s 1s 378587470e-09 1s 1s 378588950e-09 0s 0s 378593390e-09 1s 1s 378597750e-09 1s 1s 378599190e-09 0s 0s 378603630e-09 1s 1s 378608030e-09 1s 1s 378609430e-09 0s 0s 378613870e-09 1s 1s 378618310e-09 1s 1s 378619670e-09 0s 0s 378624110e-09 1s 1s 378628590e-09 1s 1s 378629910e-09 0s 0s 378634350e-09 1s 1s 378638870e-09 1s 1s 378640150e-09 0s 0s 378644590e-09 1s 1s 378649150e-09 1s 1s 378650390e-09 0s 0s 378654830e-09 1s 1s 378659430e-09 1s 1s 378660630e-09 0s 0s 378665070e-09 1s 1s 378669710e-09 1s 1s 378670870e-09 0s 0s 378675310e-09 1s 1s 378679990e-09 1s 1s 378681110e-09 0s 0s 378685550e-09 1s 1s 378690270e-09 1s 1s 378691350e-09 0s 0s 378695790e-09 1s 1s 378700550e-09 1s 1s 378701590e-09 0s 0s 378706030e-09 1s 1s 378710830e-09 1s 1s 378711830e-09 0s 0s 378716270e-09 1s 1s 378721110e-09 1s 1s 378722070e-09 0s 0s 378726510e-09 1s 1s 378731390e-09 1s 1s 378732310e-09 0s 0s 378736750e-09 1s 1s 378741670e-09 1s 1s 378742550e-09 0s 0s 378746990e-09 1s 1s 378751950e-09 1s 1s 378752790e-09 0s 0s 378757230e-09 1s 1s 378762230e-09 1s 1s 378763030e-09 0s 0s 378767470e-09 1s 1s 378772510e-09 1s 1s 378773270e-09 0s 0s 378777710e-09 1s 1s 378782790e-09 1s 1s 378783510e-09 0s 0s 378787950e-09 1s 1s 378793070e-09 1s 1s 378793750e-09 0s 0s 378798190e-09 1s 1s 378803350e-09 1s 1s 378803990e-09 0s 0s 378808430e-09 1s 1s 378813630e-09 1s 1s 378814230e-09 0s 0s 378818670e-09 1s 1s 378823910e-09 1s 1s 378824470e-09 0s 0s 378828910e-09 1s 1s 378834190e-09 1s 1s 378834710e-09 0s 0s 378839150e-09 1s 1s 378844470e-09 1s 1s 378844950e-09 0s 0s 378849390e-09 1s 1s 378854750e-09 1s 1s 378855190e-09 0s 0s 378859630e-09 1s 1s 378865030e-09 1s 1s 378865430e-09 0s 0s 378869870e-09 1s 1s 378875310e-09 1s 1s 378875670e-09 0s 0s 378880110e-09 1s 1s 378885590e-09 1s 1s 378885910e-09 0s 0s 378890350e-09 1s 1s 378895870e-09 1s 1s 378896150e-09 0s 0s 378900590e-09 1s 1s 378906150e-09 1s 1s 378906390e-09 0s 0s 378910830e-09 1s 1s 378916430e-09 1s 1s 378916630e-09 0s 0s 378921070e-09 1s 1s 378926710e-09 1s 1s 378926870e-09 0s 0s 378931310e-09 1s 1s 378936990e-09 1s 1s 378937110e-09 0s 0s 378941550e-09 1s 1s 378947270e-09 1s 1s 378947350e-09 0s 0s 378951790e-09 1s 1s 378957550e-09 1s 1s 378957590e-09 0s 0s 378962030e-09 1s 1s 378967830e-09 0s 0s 378972270e-09 1s 1s 378978070e-09 0s 0s 378978110e-09 0s 0s 378982510e-09 1s 1s 378988310e-09 0s 0s 378988390e-09 0s 0s 378992750e-09 1s 1s 378998550e-09 0s 0s 378998670e-09 0s 0s 379002990e-09 1s 1s 379008790e-09 0s 0s 379008950e-09 0s 0s 379013230e-09 1s 1s 379019030e-09 0s 0s 379019230e-09 0s 0s 379023470e-09 1s 1s 379029270e-09 0s 0s 379029510e-09 0s 0s 379033710e-09 1s 1s 379039510e-09 0s 0s 379039790e-09 0s 0s 379043950e-09 1s 1s 379049750e-09 0s 0s 379050070e-09 0s 0s 379054190e-09 1s 1s 379059990e-09 0s 0s 379060350e-09 0s 0s 379064430e-09 1s 1s 379070230e-09 0s 0s 379070630e-09 0s 0s 379074670e-09 1s 1s 379080470e-09 0s 0s 379080910e-09 0s 0s 379084910e-09 1s 1s 379090710e-09 0s 0s 379091190e-09 0s 0s 379095150e-09 1s 1s 379100950e-09 0s 0s 379101470e-09 0s 0s 379105390e-09 1s 1s 379111190e-09 0s 0s 379111750e-09 0s 0s 379115630e-09 1s 1s 379121430e-09 0s 0s 379122030e-09 0s 0s 379125870e-09 1s 1s 379131670e-09 0s 0s 379132310e-09 0s 0s 379136110e-09 1s 1s 379141910e-09 0s 0s 379142590e-09 0s 0s 379146350e-09 1s 1s 379152150e-09 0s 0s 379152870e-09 0s 0s 379156590e-09 1s 1s 379162390e-09 0s 0s 379163150e-09 0s 0s 379166830e-09 1s 1s 379172630e-09 0s 0s 379173430e-09 0s 0s 379177070e-09 1s 1s 379182870e-09 0s 0s 379183710e-09 0s 0s 379187310e-09 1s 1s 379193110e-09 0s 0s 379193990e-09 0s 0s 379197550e-09 1s 1s 379203350e-09 0s 0s 379204270e-09 0s 0s 379207790e-09 1s 1s 379213590e-09 0s 0s 379214550e-09 0s 0s 379218030e-09 1s 1s 379223830e-09 0s 0s 379224830e-09 0s 0s 379228270e-09 1s 1s 379234070e-09 0s 0s 379235110e-09 0s 0s 379238510e-09 1s 1s 379244310e-09 0s 0s 379245390e-09 0s 0s 379248750e-09 1s 1s 379254550e-09 0s 0s 379255670e-09 0s 0s 379258990e-09 1s 1s 379264790e-09 0s 0s 379265950e-09 0s 0s 379269230e-09 1s 1s 379275030e-09 0s 0s 379276230e-09 0s 0s 379279470e-09 1s 1s 379285270e-09 0s 0s 379286510e-09 0s 0s 379289710e-09 1s 1s 379295510e-09 0s 0s 379296790e-09 0s 0s 379299950e-09 1s 1s 379305750e-09 0s 0s 379307070e-09 0s 0s 379310190e-09 1s 1s 379315990e-09 0s 0s 379317350e-09 0s 0s 379320430e-09 1s 1s 379326230e-09 0s 0s 379327630e-09 0s 0s 379330670e-09 1s 1s 379336470e-09 0s 0s 379337910e-09 0s 0s 379340910e-09 1s 1s 379346710e-09 0s 0s 379348190e-09 0s 0s 379351150e-09 1s 1s 379356950e-09 0s 0s 379358470e-09 0s 0s 379361390e-09 1s 1s 379367190e-09 0s 0s 379368750e-09 0s 0s 379371630e-09 1s 1s 379377430e-09 0s 0s 379379030e-09 0s 0s 379381870e-09 1s 1s 379387670e-09 0s 0s 379389310e-09 0s 0s 379392110e-09 1s 1s 379397910e-09 0s 0s 379399590e-09 0s 0s 379402350e-09 1s 1s 379408150e-09 0s 0s 379409870e-09 0s 0s 379412590e-09 1s 1s 379418390e-09 0s 0s 379420150e-09 0s 0s 379422830e-09 1s 1s 379428630e-09 0s 0s 379430430e-09 0s 0s 379433070e-09 1s 1s 379438870e-09 0s 0s 379440710e-09 0s 0s 379443310e-09 1s 1s 379449110e-09 0s 0s 379450990e-09 0s 0s 379453550e-09 1s 1s 379459350e-09 0s 0s 379461270e-09 0s 0s 379463790e-09 1s 1s 379469590e-09 0s 0s 379471550e-09 0s 0s 379474030e-09 1s 1s 379479830e-09 0s 0s 379481830e-09 0s 0s 379484270e-09 1s 1s 379490070e-09 0s 0s 379492110e-09 0s 0s 379494510e-09 1s 1s 379500310e-09 0s 0s 379502390e-09 0s 0s 379504750e-09 1s 1s 379510550e-09 0s 0s 379512670e-09 0s 0s 379514990e-09 1s 1s 379520790e-09 0s 0s 379522950e-09 0s 0s 379525230e-09 1s 1s 379531030e-09 0s 0s 379533230e-09 0s 0s 379535470e-09 1s 1s 379541270e-09 0s 0s 379543510e-09 0s 0s 379545710e-09 1s 1s 379551510e-09 0s 0s 379553790e-09 0s 0s 379555950e-09 1s 1s 379561750e-09 0s 0s 379564070e-09 0s 0s 379566190e-09 1s 1s 379571990e-09 0s 0s 379574350e-09 0s 0s 379576430e-09 1s 1s 379582230e-09 0s 0s 379584630e-09 0s 0s 379586670e-09 1s 1s 379592470e-09 0s 0s 379594910e-09 0s 0s 379596910e-09 1s 1s 379602710e-09 0s 0s 379605190e-09 0s 0s 379607150e-09 1s 1s 379612950e-09 0s 0s 379615470e-09 0s 0s 379617390e-09 1s 1s 379623190e-09 0s 0s 379625750e-09 0s 0s 379627630e-09 1s 1s 379633430e-09 0s 0s 379636030e-09 0s 0s 379637870e-09 1s 1s 379643670e-09 0s 0s 379646310e-09 0s 0s 379648110e-09 1s 1s 379653910e-09 0s 0s 379656590e-09 0s 0s 379658350e-09 1s 1s 379664150e-09 0s 0s 379666870e-09 0s 0s 379668590e-09 1s 1s 379674390e-09 0s 0s 379677150e-09 0s 0s 379678830e-09 1s 1s 379684630e-09 0s 0s 379687430e-09 0s 0s 379689070e-09 1s 1s 379694870e-09 0s 0s 379697710e-09 0s 0s 379699310e-09 1s 1s 379705110e-09 0s 0s 379707990e-09 0s 0s 379709550e-09 1s 1s 379715350e-09 0s 0s 379718270e-09 0s 0s 379719790e-09 1s 1s 379725590e-09 0s 0s 379728550e-09 0s 0s 379730030e-09 1s 1s 379735830e-09 0s 0s 379738830e-09 0s 0s 379740270e-09 1s 1s 379746070e-09 0s 0s 379749110e-09 0s 0s 379750510e-09 1s 1s 379756310e-09 0s 0s 379759390e-09 0s 0s 379760750e-09 1s 1s 379766550e-09 0s 0s 379769670e-09 0s 0s 379770990e-09 1s 1s 379776790e-09 0s 0s 379779950e-09 0s 0s 379781230e-09 1s 1s 379787030e-09 0s 0s 379790230e-09 0s 0s 379791470e-09 1s 1s 379797270e-09 0s 0s 379800510e-09 0s 0s 379801710e-09 1s 1s 379807510e-09 0s 0s 379810790e-09 0s 0s 379811950e-09 1s 1s 379817750e-09 0s 0s 379821070e-09 0s 0s 379822190e-09 1s 1s 379827990e-09 0s 0s 379831350e-09 0s 0s 379832430e-09 1s 1s 379838230e-09 0s 0s 379841630e-09 0s 0s 379842670e-09 1s 1s 379848470e-09 0s 0s 379851910e-09 0s 0s 379852910e-09 1s 1s 379858710e-09 0s 0s 379862190e-09 0s 0s 379863150e-09 1s 1s 379868950e-09 0s 0s 379872470e-09 0s 0s 379873390e-09 1s 1s 379879190e-09 0s 0s 379882750e-09 0s 0s 379883630e-09 1s 1s 379889430e-09 0s 0s 379893030e-09 0s 0s 379893870e-09 1s 1s 379899670e-09 0s 0s 379903310e-09 0s 0s 379904110e-09 1s 1s 379909910e-09 0s 0s 379913590e-09 0s 0s 379914350e-09 1s 1s 379920150e-09 0s 0s 379923870e-09 0s 0s 379924590e-09 1s 1s 379930390e-09 0s 0s 379934150e-09 0s 0s 379934830e-09 1s 1s 379940630e-09 0s 0s 379944430e-09 0s 0s 379945070e-09 1s 1s 379950870e-09 0s 0s 379954710e-09 0s 0s 379955310e-09 1s 1s 379961110e-09 0s 0s 379964990e-09 0s 0s 379965550e-09 1s 1s 379971350e-09 0s 0s 379975270e-09 0s 0s 379975790e-09 1s 1s 379981590e-09 0s 0s 379985550e-09 0s 0s 379986030e-09 1s 1s 379991830e-09 0s 0s 379995830e-09 0s 0s 379996270e-09 1s 1s 380002070e-09 0s 0s 380006110e-09 0s 0s 380006510e-09 1s 1s 380012310e-09 0s 0s 380016390e-09 0s 0s 380016750e-09 1s 1s 380022550e-09 0s 0s 380026670e-09 0s 0s 380026990e-09 1s 1s 380032790e-09 0s 0s 380036950e-09 0s 0s 380037230e-09 1s 1s 380043030e-09 0s 0s 380047230e-09 0s 0s 380047470e-09 1s 1s 380053270e-09 0s 0s 380057510e-09 0s 0s 380057710e-09 1s 1s 380063510e-09 0s 0s 380067790e-09 0s 0s 380067950e-09 1s 1s 380073750e-09 0s 0s 380078070e-09 0s 0s 380078190e-09 1s 1s 380083990e-09 0s 0s 380088350e-09 0s 0s 380088430e-09 1s 1s 380094230e-09 0s 0s 380098630e-09 0s 0s 380098670e-09 1s 1s 380104470e-09 0s 0s 380108910e-09 1s 1s 380108950e-09 1s 1s 380114750e-09 0s 0s 380119150e-09 1s 1s 380119230e-09 1s 1s 380124990e-09 0s 0s 380129390e-09 1s 1s 380129510e-09 1s 1s 380135230e-09 0s 0s 380139630e-09 1s 1s 380139790e-09 1s 1s 380145470e-09 0s 0s 380149870e-09 1s 1s 380150070e-09 1s 1s 380155710e-09 0s 0s 380160110e-09 1s 1s 380160350e-09 1s 1s 380165950e-09 0s 0s 380170350e-09 1s 1s 380170630e-09 1s 1s 380176190e-09 0s 0s 380180590e-09 1s 1s 380180910e-09 1s 1s 380186430e-09 0s 0s 380190830e-09 1s 1s 380191190e-09 1s 1s 380196670e-09 0s 0s 380201070e-09 1s 1s 380201470e-09 1s 1s 380206910e-09 0s 0s 380211310e-09 1s 1s 380211750e-09 1s 1s 380217150e-09 0s 0s 380221550e-09 1s 1s 380222030e-09 1s 1s 380227390e-09 0s 0s 380231790e-09 1s 1s 380232310e-09 1s 1s 380237630e-09 0s 0s 380242030e-09 1s 1s 380242590e-09 1s 1s 380247870e-09 0s 0s 380252270e-09 1s 1s 380252870e-09 1s 1s 380258110e-09 0s 0s 380262510e-09 1s 1s 380263150e-09 1s 1s 380268350e-09 0s 0s 380272750e-09 1s 1s 380273430e-09 1s 1s 380278590e-09 0s 0s 380282990e-09 1s 1s 380283710e-09 1s 1s 380288830e-09 0s 0s 380293230e-09 1s 1s 380293990e-09 1s 1s 380299070e-09 0s 0s 380303470e-09 1s 1s 380304270e-09 1s 1s 380309310e-09 0s 0s 380313710e-09 1s 1s 380314550e-09 1s 1s 380319550e-09 0s 0s 380323950e-09 1s 1s 380324830e-09 1s 1s 380329790e-09 0s 0s 380334190e-09 1s 1s 380335110e-09 1s 1s 380340030e-09 0s 0s 380344430e-09 1s 1s 380345390e-09 1s 1s 380350270e-09 0s 0s 380354670e-09 1s 1s 380355670e-09 1s 1s 380360510e-09 0s 0s 380364910e-09 1s 1s 380365950e-09 1s 1s 380370750e-09 0s 0s 380375150e-09 1s 1s 380376230e-09 1s 1s 380380990e-09 0s 0s 380385390e-09 1s 1s 380386510e-09 1s 1s 380391230e-09 0s 0s 380395630e-09 1s 1s 380396790e-09 1s 1s 380401470e-09 0s 0s 380405870e-09 1s 1s 380407070e-09 1s 1s 380411710e-09 0s 0s 380416110e-09 1s 1s 380417350e-09 1s 1s 380421950e-09 0s 0s 380426350e-09 1s 1s 380427630e-09 1s 1s 380432190e-09 0s 0s 380436590e-09 1s 1s 380437910e-09 1s 1s 380442430e-09 0s 0s 380446830e-09 1s 1s 380448190e-09 1s 1s 380452670e-09 0s 0s 380457070e-09 1s 1s 380458470e-09 1s 1s 380462910e-09 0s 0s 380467310e-09 1s 1s 380468750e-09 1s 1s 380473150e-09 0s 0s 380477550e-09 1s 1s 380479030e-09 1s 1s 380483390e-09 0s 0s 380487790e-09 1s 1s 380489310e-09 1s 1s 380493630e-09 0s 0s 380498030e-09 1s 1s 380499590e-09 1s 1s 380503870e-09 0s 0s 380508270e-09 1s 1s 380509870e-09 1s 1s 380514110e-09 0s 0s 380518510e-09 1s 1s 380520150e-09 1s 1s 380524350e-09 0s 0s 380528750e-09 1s 1s 380530430e-09 1s 1s 380534590e-09 0s 0s 380538990e-09 1s 1s 380540710e-09 1s 1s 380544830e-09 0s 0s 380549230e-09 1s 1s 380550990e-09 1s 1s 380555070e-09 0s 0s 380559470e-09 1s 1s 380561270e-09 1s 1s 380565310e-09 0s 0s 380569710e-09 1s 1s 380571550e-09 1s 1s 380575550e-09 0s 0s 380579950e-09 1s 1s 380581830e-09 1s 1s 380585790e-09 0s 0s 380590190e-09 1s 1s 380592110e-09 1s 1s 380596030e-09 0s 0s 380600430e-09 1s 1s 380602390e-09 1s 1s 380606270e-09 0s 0s 380610670e-09 1s 1s 380612670e-09 1s 1s 380616510e-09 0s 0s 380620910e-09 1s 1s 380622950e-09 1s 1s 380626750e-09 0s 0s 380631150e-09 1s 1s 380633230e-09 1s 1s 380636990e-09 0s 0s 380641390e-09 1s 1s 380643510e-09 1s 1s 380647230e-09 0s 0s 380651630e-09 1s 1s 380653790e-09 1s 1s 380657470e-09 0s 0s 380661870e-09 1s 1s 380664070e-09 1s 1s 380667710e-09 0s 0s 380672110e-09 1s 1s 380674350e-09 1s 1s 380677950e-09 0s 0s 380682350e-09 1s 1s 380684630e-09 1s 1s 380688190e-09 0s 0s 380692590e-09 1s 1s 380694910e-09 1s 1s 380698430e-09 0s 0s 380702830e-09 1s 1s 380705190e-09 1s 1s 380708670e-09 0s 0s 380713070e-09 1s 1s 380715470e-09 1s 1s 380718910e-09 0s 0s 380723310e-09 1s 1s 380725750e-09 1s 1s 380729150e-09 0s 0s 380733550e-09 1s 1s 380736030e-09 1s 1s 380739390e-09 0s 0s 380743790e-09 1s 1s 380746310e-09 1s 1s 380749630e-09 0s 0s 380754030e-09 1s 1s 380756590e-09 1s 1s 380759870e-09 0s 0s 380764270e-09 1s 1s 380766870e-09 1s 1s 380770110e-09 0s 0s 380774510e-09 1s 1s 380777150e-09 1s 1s 380780350e-09 0s 0s 380784750e-09 1s 1s 380787430e-09 1s 1s 380790590e-09 0s 0s 380794990e-09 1s 1s 380797710e-09 1s 1s 380800830e-09 0s 0s 380805230e-09 1s 1s 380807990e-09 1s 1s 380811070e-09 0s 0s 380815470e-09 1s 1s 380818270e-09 1s 1s 380821310e-09 0s 0s 380825710e-09 1s 1s 380828550e-09 1s 1s 380831550e-09 0s 0s 380835950e-09 1s 1s 380838830e-09 1s 1s 380841790e-09 0s 0s 380846190e-09 1s 1s 380849110e-09 1s 1s 380852030e-09 0s 0s 380856430e-09 1s 1s 380859390e-09 1s 1s 380862270e-09 0s 0s 380866670e-09 1s 1s 380869670e-09 1s 1s 380872510e-09 0s 0s 380876910e-09 1s 1s 380879950e-09 1s 1s 380882750e-09 0s 0s 380887150e-09 1s 1s 380890230e-09 1s 1s 380892990e-09 0s 0s 380897390e-09 1s 1s 380900510e-09 1s 1s 380903230e-09 0s 0s 380907630e-09 1s 1s 380910790e-09 1s 1s 380913470e-09 0s 0s 380917870e-09 1s 1s 380921070e-09 1s 1s 380923710e-09 0s 0s 380928110e-09 1s 1s 380931350e-09 1s 1s 380933950e-09 0s 0s 380938350e-09 1s 1s 380941630e-09 1s 1s 380944190e-09 0s 0s 380948590e-09 1s 1s 380951910e-09 1s 1s 380954430e-09 0s 0s 380958830e-09 1s 1s 380962190e-09 1s 1s 380964670e-09 0s 0s 380969070e-09 1s 1s 380972470e-09 1s 1s 380974910e-09 0s 0s 380979310e-09 1s 1s 380982750e-09 1s 1s 380985150e-09 0s 0s 380989550e-09 1s 1s 380993030e-09 1s 1s 380995390e-09 0s 0s 380999790e-09 1s 1s 381003310e-09 1s 1s 381005630e-09 0s 0s 381010030e-09 1s 1s 381013590e-09 1s 1s 381015870e-09 0s 0s 381020270e-09 1s 1s 381023870e-09 1s 1s 381026110e-09 0s 0s 381030510e-09 1s 1s 381034150e-09 1s 1s 381036350e-09 0s 0s 381040750e-09 1s 1s 381044430e-09 1s 1s 381046590e-09 0s 0s 381050990e-09 1s 1s 381054710e-09 1s 1s 381056830e-09 0s 0s 381061230e-09 1s 1s 381064990e-09 1s 1s 381067070e-09 0s 0s 381071470e-09 1s 1s 381075270e-09 1s 1s 381077310e-09 0s 0s 381081710e-09 1s 1s 381085550e-09 1s 1s 381087550e-09 0s 0s 381091950e-09 1s 1s 381095830e-09 1s 1s 381097790e-09 0s 0s 381102190e-09 1s 1s 381106110e-09 1s 1s 381108030e-09 0s 0s 381112430e-09 1s 1s 381116390e-09 1s 1s 381118270e-09 0s 0s 381122670e-09 1s 1s 381126670e-09 1s 1s 381128510e-09 0s 0s 381132910e-09 1s 1s 381136950e-09 1s 1s 381138750e-09 0s 0s 381143150e-09 1s 1s 381147230e-09 1s 1s 381148990e-09 0s 0s 381153390e-09 1s 1s 381157510e-09 1s 1s 381159230e-09 0s 0s 381163630e-09 1s 1s 381167790e-09 1s 1s 381169470e-09 0s 0s 381173870e-09 1s 1s 381178070e-09 1s 1s 381179710e-09 0s 0s 381184110e-09 1s 1s 381188350e-09 1s 1s 381189950e-09 0s 0s 381194350e-09 1s 1s 381198630e-09 1s 1s 381200190e-09 0s 0s 381204590e-09 1s 1s 381208910e-09 1s 1s 381210430e-09 0s 0s 381214830e-09 1s 1s 381219190e-09 1s 1s 381220670e-09 0s 0s 381225070e-09 1s 1s 381229470e-09 1s 1s 381230910e-09 0s 0s 381235310e-09 1s 1s 381239750e-09 1s 1s 381241150e-09 0s 0s 381245550e-09 1s 1s 381250030e-09 1s 1s 381251390e-09 0s 0s 381255790e-09 1s 1s 381260310e-09 1s 1s 381261630e-09 0s 0s 381266030e-09 1s 1s 381270590e-09 1s 1s 381271870e-09 0s 0s 381276270e-09 1s 1s 381280870e-09 1s 1s 381282110e-09 0s 0s 381286510e-09 1s 1s 381291150e-09 1s 1s 381292350e-09 0s 0s 381296750e-09 1s 1s 381301430e-09 1s 1s 381302590e-09 0s 0s 381306990e-09 1s 1s 381311710e-09 1s 1s 381312830e-09 0s 0s 381317230e-09 1s 1s 381321990e-09 1s 1s 381323070e-09 0s 0s 381327470e-09 1s 1s 381332270e-09 1s 1s 381333310e-09 0s 0s 381337710e-09 1s 1s 381342550e-09 1s 1s 381343550e-09 0s 0s 381347950e-09 1s 1s 381352830e-09 1s 1s 381353790e-09 0s 0s 381358190e-09 1s 1s 381363110e-09 1s 1s 381364030e-09 0s 0s 381368430e-09 1s 1s 381373390e-09 1s 1s 381374270e-09 0s 0s 381378670e-09 1s 1s 381383670e-09 1s 1s 381384510e-09 0s 0s 381388910e-09 1s 1s 381393950e-09 1s 1s 381394750e-09 0s 0s 381399150e-09 1s 1s 381404230e-09 1s 1s 381404990e-09 0s 0s 381409390e-09 1s 1s 381414510e-09 1s 1s 381415230e-09 0s 0s 381419630e-09 1s 1s 381424790e-09 1s 1s 381425470e-09 0s 0s 381429870e-09 1s 1s 381435070e-09 1s 1s 381435710e-09 0s 0s 381440110e-09 1s 1s 381445350e-09 1s 1s 381445950e-09 0s 0s 381450350e-09 1s 1s 381455630e-09 1s 1s 381456190e-09 0s 0s 381460590e-09 1s 1s 381465910e-09 1s 1s 381466430e-09 0s 0s 381470830e-09 1s 1s 381476190e-09 1s 1s 381476670e-09 0s 0s 381481070e-09 1s 1s 381486470e-09 1s 1s 381486910e-09 0s 0s 381491310e-09 1s 1s 381496750e-09 1s 1s 381497150e-09 0s 0s 381501550e-09 1s 1s 381507030e-09 1s 1s 381507390e-09 0s 0s 381511790e-09 1s 1s 381517310e-09 1s 1s 381517630e-09 0s 0s 381522030e-09 1s 1s 381527590e-09 1s 1s 381527870e-09 0s 0s 381532270e-09 1s 1s 381537870e-09 1s 1s 381538110e-09 0s 0s 381542510e-09 1s 1s 381548150e-09 1s 1s 381548350e-09 0s 0s 381552750e-09 1s 1s 381558430e-09 1s 1s 381558590e-09 0s 0s 381562990e-09 1s 1s 381568710e-09 1s 1s 381568830e-09 0s 0s 381573230e-09 1s 1s 381578990e-09 1s 1s 381579070e-09 0s 0s 381583470e-09 1s 1s 381589270e-09 1s 1s 381589310e-09 0s 0s 381593710e-09 1s 1s 381599550e-09 0s 0s 381603950e-09 1s 1s 381609790e-09 0s 0s 381609830e-09 0s 0s 381614190e-09 1s 1s 381620030e-09 0s 0s 381620110e-09 0s 0s 381624430e-09 1s 1s 381630270e-09 0s 0s 381630390e-09 0s 0s 381634670e-09 1s 1s 381640510e-09 0s 0s 381640670e-09 0s 0s 381644910e-09 1s 1s 381650750e-09 0s 0s 381650950e-09 0s 0s 381655150e-09 1s 1s 381660990e-09 0s 0s 381661230e-09 0s 0s 381665390e-09 1s 1s 381671230e-09 0s 0s 381671510e-09 0s 0s 381675630e-09 1s 1s 381681470e-09 0s 0s 381681790e-09 0s 0s 381685870e-09 1s 1s 381691710e-09 0s 0s 381692070e-09 0s 0s 381696110e-09 1s 1s 381701950e-09 0s 0s 381702350e-09 0s 0s 381706350e-09 1s 1s 381712190e-09 0s 0s 381712630e-09 0s 0s 381716590e-09 1s 1s 381722430e-09 0s 0s 381722910e-09 0s 0s 381726830e-09 1s 1s 381732670e-09 0s 0s 381733190e-09 0s 0s 381737070e-09 1s 1s 381742910e-09 0s 0s 381743470e-09 0s 0s 381747310e-09 1s 1s 381753150e-09 0s 0s 381753750e-09 0s 0s 381757550e-09 1s 1s 381763390e-09 0s 0s 381764030e-09 0s 0s 381767790e-09 1s 1s 381773630e-09 0s 0s 381774310e-09 0s 0s 381778030e-09 1s 1s 381783870e-09 0s 0s 381784590e-09 0s 0s 381788270e-09 1s 1s 381794110e-09 0s 0s 381794870e-09 0s 0s 381798510e-09 1s 1s 381804350e-09 0s 0s 381805150e-09 0s 0s 381808750e-09 1s 1s 381814590e-09 0s 0s 381815430e-09 0s 0s 381818990e-09 1s 1s 381824830e-09 0s 0s 381825710e-09 0s 0s 381829230e-09 1s 1s 381835070e-09 0s 0s 381835990e-09 0s 0s 381839470e-09 1s 1s 381845310e-09 0s 0s 381846270e-09 0s 0s 381849710e-09 1s 1s 381855550e-09 0s 0s 381856550e-09 0s 0s 381859950e-09 1s 1s 381865790e-09 0s 0s 381866830e-09 0s 0s 381870190e-09 1s 1s 381876030e-09 0s 0s 381877110e-09 0s 0s 381880430e-09 1s 1s 381886270e-09 0s 0s 381887390e-09 0s 0s 381890670e-09 1s 1s 381896510e-09 0s 0s 381897670e-09 0s 0s 381900910e-09 1s 1s 381906750e-09 0s 0s 381907950e-09 0s 0s 381911150e-09 1s 1s 381916990e-09 0s 0s 381918230e-09 0s 0s 381921390e-09 1s 1s 381927230e-09 0s 0s 381928510e-09 0s 0s 381931630e-09 1s 1s 381937470e-09 0s 0s 381938790e-09 0s 0s 381941870e-09 1s 1s 381947710e-09 0s 0s 381949070e-09 0s 0s 381952110e-09 1s 1s 381957950e-09 0s 0s 381959350e-09 0s 0s 381962350e-09 1s 1s 381968190e-09 0s 0s 381969630e-09 0s 0s 381972590e-09 1s 1s 381978430e-09 0s 0s 381979910e-09 0s 0s 381982830e-09 1s 1s 381988670e-09 0s 0s 381990190e-09 0s 0s 381993070e-09 1s 1s 381998910e-09 0s 0s 382000470e-09 0s 0s 382003310e-09 1s 1s 382009150e-09 0s 0s 382010750e-09 0s 0s 382013550e-09 1s 1s 382019390e-09 0s 0s 382021030e-09 0s 0s 382023790e-09 1s 1s 382029630e-09 0s 0s 382031310e-09 0s 0s 382034030e-09 1s 1s 382039870e-09 0s 0s 382041590e-09 0s 0s 382044270e-09 1s 1s 382050110e-09 0s 0s 382051870e-09 0s 0s 382054510e-09 1s 1s 382060350e-09 0s 0s 382062150e-09 0s 0s 382064750e-09 1s 1s 382070590e-09 0s 0s 382072430e-09 0s 0s 382074990e-09 1s 1s 382080830e-09 0s 0s 382082710e-09 0s 0s 382085230e-09 1s 1s 382091070e-09 0s 0s 382092990e-09 0s 0s 382095470e-09 1s 1s 382101310e-09 0s 0s 382103270e-09 0s 0s 382105710e-09 1s 1s 382111550e-09 0s 0s 382113550e-09 0s 0s 382115950e-09 1s 1s 382121790e-09 0s 0s 382123830e-09 0s 0s 382126190e-09 1s 1s 382132030e-09 0s 0s 382134110e-09 0s 0s 382136430e-09 1s 1s 382142270e-09 0s 0s 382144390e-09 0s 0s 382146670e-09 1s 1s 382152510e-09 0s 0s 382154670e-09 0s 0s 382156910e-09 1s 1s 382162750e-09 0s 0s 382164950e-09 0s 0s 382167150e-09 1s 1s 382172990e-09 0s 0s 382175230e-09 0s 0s 382177390e-09 1s 1s 382183230e-09 0s 0s 382185510e-09 0s 0s 382187630e-09 1s 1s 382193470e-09 0s 0s 382195790e-09 0s 0s 382197870e-09 1s 1s 382203710e-09 0s 0s 382206070e-09 0s 0s 382208110e-09 1s 1s 382213950e-09 0s 0s 382216350e-09 0s 0s 382218350e-09 1s 1s 382224190e-09 0s 0s 382226630e-09 0s 0s 382228590e-09 1s 1s 382234430e-09 0s 0s 382236910e-09 0s 0s 382238830e-09 1s 1s 382244670e-09 0s 0s 382247190e-09 0s 0s 382249070e-09 1s 1s 382254910e-09 0s 0s 382257470e-09 0s 0s 382259310e-09 1s 1s 382265150e-09 0s 0s 382267750e-09 0s 0s 382269550e-09 1s 1s 382275390e-09 0s 0s 382278030e-09 0s 0s 382279790e-09 1s 1s 382285630e-09 0s 0s 382288310e-09 0s 0s 382290030e-09 1s 1s 382295870e-09 0s 0s 382298590e-09 0s 0s 382300270e-09 1s 1s 382306110e-09 0s 0s 382308870e-09 0s 0s 382310510e-09 1s 1s 382316350e-09 0s 0s 382319150e-09 0s 0s 382320750e-09 1s 1s 382326590e-09 0s 0s 382329430e-09 0s 0s 382330990e-09 1s 1s 382336830e-09 0s 0s 382339710e-09 0s 0s 382341230e-09 1s 1s 382347070e-09 0s 0s 382349990e-09 0s 0s 382351470e-09 1s 1s 382357310e-09 0s 0s 382360270e-09 0s 0s 382361710e-09 1s 1s 382367550e-09 0s 0s 382370550e-09 0s 0s 382371950e-09 1s 1s 382377790e-09 0s 0s 382380830e-09 0s 0s 382382190e-09 1s 1s 382388030e-09 0s 0s 382391110e-09 0s 0s 382392430e-09 1s 1s 382398270e-09 0s 0s 382401390e-09 0s 0s 382402670e-09 1s 1s 382408510e-09 0s 0s 382411670e-09 0s 0s 382412910e-09 1s 1s 382418750e-09 0s 0s 382421950e-09 0s 0s 382423150e-09 1s 1s 382428990e-09 0s 0s 382432230e-09 0s 0s 382433390e-09 1s 1s 382439230e-09 0s 0s 382442510e-09 0s 0s 382443630e-09 1s 1s 382449470e-09 0s 0s 382452790e-09 0s 0s 382453870e-09 1s 1s 382459710e-09 0s 0s 382463070e-09 0s 0s 382464110e-09 1s 1s 382469950e-09 0s 0s 382473350e-09 0s 0s 382474350e-09 1s 1s 382480190e-09 0s 0s 382483630e-09 0s 0s 382484590e-09 1s 1s 382490430e-09 0s 0s 382493910e-09 0s 0s 382494830e-09 1s 1s 382500670e-09 0s 0s 382504190e-09 0s 0s 382505070e-09 1s 1s 382510910e-09 0s 0s 382514470e-09 0s 0s 382515310e-09 1s 1s 382521150e-09 0s 0s 382524750e-09 0s 0s 382525550e-09 1s 1s 382531390e-09 0s 0s 382535030e-09 0s 0s 382535790e-09 1s 1s 382541630e-09 0s 0s 382545310e-09 0s 0s 382546030e-09 1s 1s 382551870e-09 0s 0s 382555590e-09 0s 0s 382556270e-09 1s 1s 382562110e-09 0s 0s 382565870e-09 0s 0s 382566510e-09 1s 1s 382572350e-09 0s 0s 382576150e-09 0s 0s 382576750e-09 1s 1s 382582590e-09 0s 0s 382586430e-09 0s 0s 382586990e-09 1s 1s 382592830e-09 0s 0s 382596710e-09 0s 0s 382597230e-09 1s 1s 382603070e-09 0s 0s 382606990e-09 0s 0s 382607470e-09 1s 1s 382613310e-09 0s 0s 382617270e-09 0s 0s 382617710e-09 1s 1s 382623550e-09 0s 0s 382627550e-09 0s 0s 382627950e-09 1s 1s 382633790e-09 0s 0s 382637830e-09 0s 0s 382638190e-09 1s 1s 382644030e-09 0s 0s 382648110e-09 0s 0s 382648430e-09 1s 1s 382654270e-09 0s 0s 382658390e-09 0s 0s 382658670e-09 1s 1s 382664510e-09 0s 0s 382668670e-09 0s 0s 382668910e-09 1s 1s 382674750e-09 0s 0s 382678950e-09 0s 0s 382679150e-09 1s 1s 382684990e-09 0s 0s 382689230e-09 0s 0s 382689390e-09 1s 1s 382695230e-09 0s 0s 382699510e-09 0s 0s 382699630e-09 1s 1s 382705470e-09 0s 0s 382709790e-09 0s 0s 382709870e-09 1s 1s 382715710e-09 0s 0s 382720070e-09 0s 0s 382720110e-09 1s 1s 382725950e-09 0s 0s 382730350e-09 1s 1s 382730390e-09 1s 1s 382736230e-09 0s 0s 382740590e-09 1s 1s 382740670e-09 1s 1s 382746470e-09 0s 0s 382750830e-09 1s 1s 382750950e-09 1s 1s 382756710e-09 0s 0s 382761070e-09 1s 1s 382761230e-09 1s 1s 382766950e-09 0s 0s 382771310e-09 1s 1s 382771510e-09 1s 1s 382777190e-09 0s 0s 382781550e-09 1s 1s 382781790e-09 1s 1s 382787430e-09 0s 0s 382791790e-09 1s 1s 382792070e-09 1s 1s 382797670e-09 0s 0s 382802030e-09 1s 1s 382802350e-09 1s 1s 382807910e-09 0s 0s 382812270e-09 1s 1s 382812630e-09 1s 1s 382818150e-09 0s 0s 382822510e-09 1s 1s 382822910e-09 1s 1s 382828390e-09 0s 0s 382832750e-09 1s 1s 382833190e-09 1s 1s 382838630e-09 0s 0s 382842990e-09 1s 1s 382843470e-09 1s 1s 382848870e-09 0s 0s 382853230e-09 1s 1s 382853750e-09 1s 1s 382859110e-09 0s 0s 382863470e-09 1s 1s 382864030e-09 1s 1s 382869350e-09 0s 0s 382873710e-09 1s 1s 382874310e-09 1s 1s 382879590e-09 0s 0s 382883950e-09 1s 1s 382884590e-09 1s 1s 382889830e-09 0s 0s 382894190e-09 1s 1s 382894870e-09 1s 1s 382900070e-09 0s 0s 382904430e-09 1s 1s 382905150e-09 1s 1s 382910310e-09 0s 0s 382914670e-09 1s 1s 382915430e-09 1s 1s 382920550e-09 0s 0s 382924910e-09 1s 1s 382925710e-09 1s 1s 382930790e-09 0s 0s 382935150e-09 1s 1s 382935990e-09 1s 1s 382941030e-09 0s 0s 382945390e-09 1s 1s 382946270e-09 1s 1s 382951270e-09 0s 0s 382955630e-09 1s 1s 382956550e-09 1s 1s 382961510e-09 0s 0s 382965870e-09 1s 1s 382966830e-09 1s 1s 382971750e-09 0s 0s 382976110e-09 1s 1s 382977110e-09 1s 1s 382981990e-09 0s 0s 382986350e-09 1s 1s 382987390e-09 1s 1s 382992230e-09 0s 0s 382996590e-09 1s 1s 382997670e-09 1s 1s 383002470e-09 0s 0s 383006830e-09 1s 1s 383007950e-09 1s 1s 383012710e-09 0s 0s 383017070e-09 1s 1s 383018230e-09 1s 1s 383022950e-09 0s 0s 383027310e-09 1s 1s 383028510e-09 1s 1s 383033190e-09 0s 0s 383037550e-09 1s 1s 383038790e-09 1s 1s 383043430e-09 0s 0s 383047790e-09 1s 1s 383049070e-09 1s 1s 383053670e-09 0s 0s 383058030e-09 1s 1s 383059350e-09 1s 1s 383063910e-09 0s 0s 383068270e-09 1s 1s 383069630e-09 1s 1s 383074150e-09 0s 0s 383078510e-09 1s 1s 383079910e-09 1s 1s 383084390e-09 0s 0s 383088750e-09 1s 1s 383090190e-09 1s 1s 383094630e-09 0s 0s 383098990e-09 1s 1s 383100470e-09 1s 1s 383104870e-09 0s 0s 383109230e-09 1s 1s 383110750e-09 1s 1s 383115110e-09 0s 0s 383119470e-09 1s 1s 383121030e-09 1s 1s 383125350e-09 0s 0s 383129710e-09 1s 1s 383131310e-09 1s 1s 383135590e-09 0s 0s 383139950e-09 1s 1s 383141590e-09 1s 1s 383145830e-09 0s 0s 383150190e-09 1s 1s 383151870e-09 1s 1s 383156070e-09 0s 0s 383160430e-09 1s 1s 383162150e-09 1s 1s 383166310e-09 0s 0s 383170670e-09 1s 1s 383172430e-09 1s 1s 383176550e-09 0s 0s 383180910e-09 1s 1s 383182710e-09 1s 1s 383186790e-09 0s 0s 383191150e-09 1s 1s 383192990e-09 1s 1s 383197030e-09 0s 0s 383201390e-09 1s 1s 383203270e-09 1s 1s 383207270e-09 0s 0s 383211630e-09 1s 1s 383213550e-09 1s 1s 383217510e-09 0s 0s 383221870e-09 1s 1s 383223830e-09 1s 1s 383227750e-09 0s 0s 383232110e-09 1s 1s 383234110e-09 1s 1s 383237990e-09 0s 0s 383242350e-09 1s 1s 383244390e-09 1s 1s 383248230e-09 0s 0s 383252590e-09 1s 1s 383254670e-09 1s 1s 383258470e-09 0s 0s 383262830e-09 1s 1s 383264950e-09 1s 1s 383268710e-09 0s 0s 383273070e-09 1s 1s 383275230e-09 1s 1s 383278950e-09 0s 0s 383283310e-09 1s 1s 383285510e-09 1s 1s 383289190e-09 0s 0s 383293550e-09 1s 1s 383295790e-09 1s 1s 383299430e-09 0s 0s 383303790e-09 1s 1s 383306070e-09 1s 1s 383309670e-09 0s 0s 383314030e-09 1s 1s 383316350e-09 1s 1s 383319910e-09 0s 0s 383324270e-09 1s 1s 383326630e-09 1s 1s 383330150e-09 0s 0s 383334510e-09 1s 1s 383336910e-09 1s 1s 383340390e-09 0s 0s 383344750e-09 1s 1s 383347190e-09 1s 1s 383350630e-09 0s 0s 383354990e-09 1s 1s 383357470e-09 1s 1s 383360870e-09 0s 0s 383365230e-09 1s 1s 383367750e-09 1s 1s 383371110e-09 0s 0s 383375470e-09 1s 1s 383378030e-09 1s 1s 383381350e-09 0s 0s 383385710e-09 1s 1s 383388310e-09 1s 1s 383391590e-09 0s 0s 383395950e-09 1s 1s 383398590e-09 1s 1s 383401830e-09 0s 0s 383406190e-09 1s 1s 383408870e-09 1s 1s 383412070e-09 0s 0s 383416430e-09 1s 1s 383419150e-09 1s 1s 383422310e-09 0s 0s 383426670e-09 1s 1s 383429430e-09 1s 1s 383432550e-09 0s 0s 383436910e-09 1s 1s 383439710e-09 1s 1s 383442790e-09 0s 0s 383447150e-09 1s 1s 383449990e-09 1s 1s 383453030e-09 0s 0s 383457390e-09 1s 1s 383460270e-09 1s 1s 383463270e-09 0s 0s 383467630e-09 1s 1s 383470550e-09 1s 1s 383473510e-09 0s 0s 383477870e-09 1s 1s 383480830e-09 1s 1s 383483750e-09 0s 0s 383488110e-09 1s 1s 383491110e-09 1s 1s 383493990e-09 0s 0s 383498350e-09 1s 1s 383501390e-09 1s 1s 383504230e-09 0s 0s 383508590e-09 1s 1s 383511670e-09 1s 1s 383514470e-09 0s 0s 383518830e-09 1s 1s 383521950e-09 1s 1s 383524710e-09 0s 0s 383529070e-09 1s 1s 383532230e-09 1s 1s 383534950e-09 0s 0s 383539310e-09 1s 1s 383542510e-09 1s 1s 383545190e-09 0s 0s 383549550e-09 1s 1s 383552790e-09 1s 1s 383555430e-09 0s 0s 383559790e-09 1s 1s 383563070e-09 1s 1s 383565670e-09 0s 0s 383570030e-09 1s 1s 383573350e-09 1s 1s 383575910e-09 0s 0s 383580270e-09 1s 1s 383583630e-09 1s 1s 383586150e-09 0s 0s 383590510e-09 1s 1s 383593910e-09 1s 1s 383596390e-09 0s 0s 383600750e-09 1s 1s 383604190e-09 1s 1s 383606630e-09 0s 0s 383610990e-09 1s 1s 383614470e-09 1s 1s 383616870e-09 0s 0s 383621230e-09 1s 1s 383624750e-09 1s 1s 383627110e-09 0s 0s 383631470e-09 1s 1s 383635030e-09 1s 1s 383637350e-09 0s 0s 383641710e-09 1s 1s 383645310e-09 1s 1s 383647590e-09 0s 0s 383651950e-09 1s 1s 383655590e-09 1s 1s 383657830e-09 0s 0s 383662190e-09 1s 1s 383665870e-09 1s 1s 383668070e-09 0s 0s 383672430e-09 1s 1s 383676150e-09 1s 1s 383678310e-09 0s 0s 383682670e-09 1s 1s 383686430e-09 1s 1s 383688550e-09 0s 0s 383692910e-09 1s 1s 383696710e-09 1s 1s 383698790e-09 0s 0s 383703150e-09 1s 1s 383706990e-09 1s 1s 383709030e-09 0s 0s 383713390e-09 1s 1s 383717270e-09 1s 1s 383719270e-09 0s 0s 383723630e-09 1s 1s 383727550e-09 1s 1s 383729510e-09 0s 0s 383733870e-09 1s 1s 383737830e-09 1s 1s 383739750e-09 0s 0s 383744110e-09 1s 1s 383748110e-09 1s 1s 383749990e-09 0s 0s 383754350e-09 1s 1s 383758390e-09 1s 1s 383760230e-09 0s 0s 383764590e-09 1s 1s 383768670e-09 1s 1s 383770470e-09 0s 0s 383774830e-09 1s 1s 383778950e-09 1s 1s 383780710e-09 0s 0s 383785070e-09 1s 1s 383789230e-09 1s 1s 383790950e-09 0s 0s 383795310e-09 1s 1s 383799510e-09 1s 1s 383801190e-09 0s 0s 383805550e-09 1s 1s 383809790e-09 1s 1s 383811430e-09 0s 0s 383815790e-09 1s 1s 383820070e-09 1s 1s 383821670e-09 0s 0s 383826030e-09 1s 1s 383830350e-09 1s 1s 383831910e-09 0s 0s 383836270e-09 1s 1s 383840630e-09 1s 1s 383842150e-09 0s 0s 383846510e-09 1s 1s 383850910e-09 1s 1s 383852390e-09 0s 0s 383856750e-09 1s 1s 383861190e-09 1s 1s 383862630e-09 0s 0s 383866990e-09 1s 1s 383871470e-09 1s 1s 383872870e-09 0s 0s 383877230e-09 1s 1s 383881750e-09 1s 1s 383883110e-09 0s 0s 383887470e-09 1s 1s 383892030e-09 1s 1s 383893350e-09 0s 0s 383897710e-09 1s 1s 383902310e-09 1s 1s 383903590e-09 0s 0s 383907950e-09 1s 1s 383912590e-09 1s 1s 383913830e-09 0s 0s 383918190e-09 1s 1s 383922870e-09 1s 1s 383924070e-09 0s 0s 383928430e-09 1s 1s 383933150e-09 1s 1s 383934310e-09 0s 0s 383938670e-09 1s 1s 383943430e-09 1s 1s 383944550e-09 0s 0s 383948910e-09 1s 1s 383953710e-09 1s 1s 383954790e-09 0s 0s 383959150e-09 1s 1s 383963990e-09 1s 1s 383965030e-09 0s 0s 383969390e-09 1s 1s 383974270e-09 1s 1s 383975270e-09 0s 0s 383979630e-09 1s 1s 383984550e-09 1s 1s 383985510e-09 0s 0s 383989870e-09 1s 1s 383994830e-09 1s 1s 383995750e-09 0s 0s 384000110e-09 1s 1s 384005110e-09 1s 1s 384005990e-09 0s 0s 384010350e-09 1s 1s 384015390e-09 1s 1s 384016230e-09 0s 0s 384020590e-09 1s 1s 384025670e-09 1s 1s 384026470e-09 0s 0s 384030830e-09 1s 1s 384035950e-09 1s 1s 384036710e-09 0s 0s 384041070e-09 1s 1s 384046230e-09 1s 1s 384046950e-09 0s 0s 384051310e-09 1s 1s 384056510e-09 1s 1s 384057190e-09 0s 0s 384061550e-09 1s 1s 384066790e-09 1s 1s 384067430e-09 0s 0s 384071790e-09 1s 1s 384077070e-09 1s 1s 384077670e-09 0s 0s 384082030e-09 1s 1s 384087350e-09 1s 1s 384087910e-09 0s 0s 384092270e-09 1s 1s 384097630e-09 1s 1s 384098150e-09 0s 0s 384102510e-09 1s 1s 384107910e-09 1s 1s 384108390e-09 0s 0s 384112750e-09 1s 1s 384118190e-09 1s 1s 384118630e-09 0s 0s 384122990e-09 1s 1s 384128470e-09 1s 1s 384128870e-09 0s 0s 384133230e-09 1s 1s 384138750e-09 1s 1s 384139110e-09 0s 0s 384143470e-09 1s 1s 384149030e-09 1s 1s 384149350e-09 0s 0s 384153710e-09 1s 1s 384159310e-09 1s 1s 384159590e-09 0s 0s 384163950e-09 1s 1s 384169590e-09 1s 1s 384169830e-09 0s 0s 384174190e-09 1s 1s 384179870e-09 1s 1s 384180070e-09 0s 0s 384184430e-09 1s 1s 384190150e-09 1s 1s 384190310e-09 0s 0s 384194670e-09 1s 1s 384200430e-09 1s 1s 384200550e-09 0s 0s 384204910e-09 1s 1s 384210710e-09 1s 1s 384210790e-09 0s 0s 384215150e-09 1s 1s 384220990e-09 1s 1s 384221030e-09 0s 0s 384225390e-09 1s 1s 384231270e-09 0s 0s 384235630e-09 1s 1s 384241510e-09 0s 0s 384241550e-09 0s 0s 384245870e-09 1s 1s 384251750e-09 0s 0s 384251830e-09 0s 0s 384256110e-09 1s 1s 384261990e-09 0s 0s 384262110e-09 0s 0s 384266350e-09 1s 1s 384272230e-09 0s 0s 384272390e-09 0s 0s 384276590e-09 1s 1s 384282470e-09 0s 0s 384282670e-09 0s 0s 384286830e-09 1s 1s 384292710e-09 0s 0s 384292950e-09 0s 0s 384297070e-09 1s 1s 384302950e-09 0s 0s 384303230e-09 0s 0s 384307310e-09 1s 1s 384313190e-09 0s 0s 384313510e-09 0s 0s 384317550e-09 1s 1s 384323430e-09 0s 0s 384323790e-09 0s 0s 384327790e-09 1s 1s 384333670e-09 0s 0s 384334070e-09 0s 0s 384338030e-09 1s 1s 384343910e-09 0s 0s 384344350e-09 0s 0s 384348270e-09 1s 1s 384354150e-09 0s 0s 384354630e-09 0s 0s 384358510e-09 1s 1s 384364390e-09 0s 0s 384364910e-09 0s 0s 384368750e-09 1s 1s 384374630e-09 0s 0s 384375190e-09 0s 0s 384378990e-09 1s 1s 384384870e-09 0s 0s 384385470e-09 0s 0s 384389230e-09 1s 1s 384395110e-09 0s 0s 384395750e-09 0s 0s 384399470e-09 1s 1s 384405350e-09 0s 0s 384406030e-09 0s 0s 384409710e-09 1s 1s 384415590e-09 0s 0s 384416310e-09 0s 0s 384419950e-09 1s 1s 384425830e-09 0s 0s 384426590e-09 0s 0s 384430190e-09 1s 1s 384436070e-09 0s 0s 384436870e-09 0s 0s 384440430e-09 1s 1s 384446310e-09 0s 0s 384447150e-09 0s 0s 384450670e-09 1s 1s 384456550e-09 0s 0s 384457430e-09 0s 0s 384460910e-09 1s 1s 384466790e-09 0s 0s 384467710e-09 0s 0s 384471150e-09 1s 1s 384477030e-09 0s 0s 384477990e-09 0s 0s 384481390e-09 1s 1s 384487270e-09 0s 0s 384488270e-09 0s 0s 384491630e-09 1s 1s 384497510e-09 0s 0s 384498550e-09 0s 0s 384501870e-09 1s 1s 384507750e-09 0s 0s 384508830e-09 0s 0s 384512110e-09 1s 1s 384517990e-09 0s 0s 384519110e-09 0s 0s 384522350e-09 1s 1s 384528230e-09 0s 0s 384529390e-09 0s 0s 384532590e-09 1s 1s 384538470e-09 0s 0s 384539670e-09 0s 0s 384542830e-09 1s 1s 384548710e-09 0s 0s 384549950e-09 0s 0s 384553070e-09 1s 1s 384558950e-09 0s 0s 384560230e-09 0s 0s 384563310e-09 1s 1s 384569190e-09 0s 0s 384570510e-09 0s 0s 384573550e-09 1s 1s 384579430e-09 0s 0s 384580790e-09 0s 0s 384583790e-09 1s 1s 384589670e-09 0s 0s 384591070e-09 0s 0s 384594030e-09 1s 1s 384599910e-09 0s 0s 384601350e-09 0s 0s 384604270e-09 1s 1s 384610150e-09 0s 0s 384611630e-09 0s 0s 384614510e-09 1s 1s 384620390e-09 0s 0s 384621910e-09 0s 0s 384624750e-09 1s 1s 384630630e-09 0s 0s 384632190e-09 0s 0s 384634990e-09 1s 1s 384640870e-09 0s 0s 384642470e-09 0s 0s 384645230e-09 1s 1s 384651110e-09 0s 0s 384652750e-09 0s 0s 384655470e-09 1s 1s 384661350e-09 0s 0s 384663030e-09 0s 0s 384665710e-09 1s 1s 384671590e-09 0s 0s 384673310e-09 0s 0s 384675950e-09 1s 1s 384681830e-09 0s 0s 384683590e-09 0s 0s 384686190e-09 1s 1s 384692070e-09 0s 0s 384693870e-09 0s 0s 384696430e-09 1s 1s 384702310e-09 0s 0s 384704150e-09 0s 0s 384706670e-09 1s 1s 384712550e-09 0s 0s 384714430e-09 0s 0s 384716910e-09 1s 1s 384722790e-09 0s 0s 384724710e-09 0s 0s 384727150e-09 1s 1s 384733030e-09 0s 0s 384734990e-09 0s 0s 384737390e-09 1s 1s 384743270e-09 0s 0s 384745270e-09 0s 0s 384747630e-09 1s 1s 384753510e-09 0s 0s 384755550e-09 0s 0s 384757870e-09 1s 1s 384763750e-09 0s 0s 384765830e-09 0s 0s 384768110e-09 1s 1s 384773990e-09 0s 0s 384776110e-09 0s 0s 384778350e-09 1s 1s 384784230e-09 0s 0s 384786390e-09 0s 0s 384788590e-09 1s 1s 384794470e-09 0s 0s 384796670e-09 0s 0s 384798830e-09 1s 1s 384804710e-09 0s 0s 384806950e-09 0s 0s 384809070e-09 1s 1s 384814950e-09 0s 0s 384817230e-09 0s 0s 384819310e-09 1s 1s 384825190e-09 0s 0s 384827510e-09 0s 0s 384829550e-09 1s 1s 384835430e-09 0s 0s 384837790e-09 0s 0s 384839790e-09 1s 1s 384845670e-09 0s 0s 384848070e-09 0s 0s 384850030e-09 1s 1s 384855910e-09 0s 0s 384858350e-09 0s 0s 384860270e-09 1s 1s 384866150e-09 0s 0s 384868630e-09 0s 0s 384870510e-09 1s 1s 384876390e-09 0s 0s 384878910e-09 0s 0s 384880750e-09 1s 1s 384886630e-09 0s 0s 384889190e-09 0s 0s 384890990e-09 1s 1s 384896870e-09 0s 0s 384899470e-09 0s 0s 384901230e-09 1s 1s 384907110e-09 0s 0s 384909750e-09 0s 0s 384911470e-09 1s 1s 384917350e-09 0s 0s 384920030e-09 0s 0s 384921710e-09 1s 1s 384927590e-09 0s 0s 384930310e-09 0s 0s 384931950e-09 1s 1s 384937830e-09 0s 0s 384940590e-09 0s 0s 384942190e-09 1s 1s 384948070e-09 0s 0s 384950870e-09 0s 0s 384952430e-09 1s 1s 384958310e-09 0s 0s 384961150e-09 0s 0s 384962670e-09 1s 1s 384968550e-09 0s 0s 384971430e-09 0s 0s 384972910e-09 1s 1s 384978790e-09 0s 0s 384981710e-09 0s 0s 384983150e-09 1s 1s 384989030e-09 0s 0s 384991990e-09 0s 0s 384993390e-09 1s 1s 384999270e-09 0s 0s 385002270e-09 0s 0s 385003630e-09 1s 1s 385009510e-09 0s 0s 385012550e-09 0s 0s 385013870e-09 1s 1s 385019750e-09 0s 0s 385022830e-09 0s 0s 385024110e-09 1s 1s 385029990e-09 0s 0s 385033110e-09 0s 0s 385034350e-09 1s 1s 385040230e-09 0s 0s 385043390e-09 0s 0s 385044590e-09 1s 1s 385050470e-09 0s 0s 385053670e-09 0s 0s 385054830e-09 1s 1s 385060710e-09 0s 0s 385063950e-09 0s 0s 385065070e-09 1s 1s 385070950e-09 0s 0s 385074230e-09 0s 0s 385075310e-09 1s 1s 385081190e-09 0s 0s 385084510e-09 0s 0s 385085550e-09 1s 1s 385091430e-09 0s 0s 385094790e-09 0s 0s 385095790e-09 1s 1s 385101670e-09 0s 0s 385105070e-09 0s 0s 385106030e-09 1s 1s 385111910e-09 0s 0s 385115350e-09 0s 0s 385116270e-09 1s 1s 385122150e-09 0s 0s 385125630e-09 0s 0s 385126510e-09 1s 1s 385132390e-09 0s 0s 385135910e-09 0s 0s 385136750e-09 1s 1s 385142630e-09 0s 0s 385146190e-09 0s 0s 385146990e-09 1s 1s 385152870e-09 0s 0s 385156470e-09 0s 0s 385157230e-09 1s 1s 385163110e-09 0s 0s 385166750e-09 0s 0s 385167470e-09 1s 1s 385173350e-09 0s 0s 385177030e-09 0s 0s 385177710e-09 1s 1s 385183590e-09 0s 0s 385187310e-09 0s 0s 385187950e-09 1s 1s 385193830e-09 0s 0s 385197590e-09 0s 0s 385198190e-09 1s 1s 385204070e-09 0s 0s 385207870e-09 0s 0s 385208430e-09 1s 1s 385214310e-09 0s 0s 385218150e-09 0s 0s 385218670e-09 1s 1s 385224550e-09 0s 0s 385228430e-09 0s 0s 385228910e-09 1s 1s 385234790e-09 0s 0s 385238710e-09 0s 0s 385239150e-09 1s 1s 385245030e-09 0s 0s 385248990e-09 0s 0s 385249390e-09 1s 1s 385255270e-09 0s 0s 385259270e-09 0s 0s 385259630e-09 1s 1s 385265510e-09 0s 0s 385269550e-09 0s 0s 385269870e-09 1s 1s 385275750e-09 0s 0s 385279830e-09 0s 0s 385280110e-09 1s 1s 385285990e-09 0s 0s 385290110e-09 0s 0s 385290350e-09 1s 1s 385296230e-09 0s 0s 385300390e-09 0s 0s 385300590e-09 1s 1s 385306470e-09 0s 0s 385310670e-09 0s 0s 385310830e-09 1s 1s 385316710e-09 0s 0s 385320950e-09 0s 0s 385321070e-09 1s 1s 385326950e-09 0s 0s 385331230e-09 0s 0s 385331310e-09 1s 1s 385337190e-09 0s 0s 385341510e-09 0s 0s 385341550e-09 1s 1s 385347430e-09 0s 0s 385351790e-09 1s 1s 385351830e-09 1s 1s 385357710e-09 0s 0s 385362030e-09 1s 1s 385362110e-09 1s 1s 385367950e-09 0s 0s 385372270e-09 1s 1s 385372390e-09 1s 1s 385378190e-09 0s 0s 385382510e-09 1s 1s 385382670e-09 1s 1s 385388430e-09 0s 0s 385392750e-09 1s 1s 385392950e-09 1s 1s 385398670e-09 0s 0s 385402990e-09 1s 1s 385403230e-09 1s 1s 385408910e-09 0s 0s 385413230e-09 1s 1s 385413510e-09 1s 1s 385419150e-09 0s 0s 385423470e-09 1s 1s 385423790e-09 1s 1s 385429390e-09 0s 0s 385433710e-09 1s 1s 385434070e-09 1s 1s 385439630e-09 0s 0s 385443950e-09 1s 1s 385444350e-09 1s 1s 385449870e-09 0s 0s 385454190e-09 1s 1s 385454630e-09 1s 1s 385460110e-09 0s 0s 385464430e-09 1s 1s 385464910e-09 1s 1s 385470350e-09 0s 0s 385474670e-09 1s 1s 385475190e-09 1s 1s 385480590e-09 0s 0s 385484910e-09 1s 1s 385485470e-09 1s 1s 385490830e-09 0s 0s 385495150e-09 1s 1s 385495750e-09 1s 1s 385501070e-09 0s 0s 385505390e-09 1s 1s 385506030e-09 1s 1s 385511310e-09 0s 0s 385515630e-09 1s 1s 385516310e-09 1s 1s 385521550e-09 0s 0s 385525870e-09 1s 1s 385526590e-09 1s 1s 385531790e-09 0s 0s 385536110e-09 1s 1s 385536870e-09 1s 1s 385542030e-09 0s 0s 385546350e-09 1s 1s 385547150e-09 1s 1s 385552270e-09 0s 0s 385556590e-09 1s 1s 385557430e-09 1s 1s 385562510e-09 0s 0s 385566830e-09 1s 1s 385567710e-09 1s 1s 385572750e-09 0s 0s 385577070e-09 1s 1s 385577990e-09 1s 1s 385582990e-09 0s 0s 385587310e-09 1s 1s 385588270e-09 1s 1s 385593230e-09 0s 0s 385597550e-09 1s 1s 385598550e-09 1s 1s 385603470e-09 0s 0s 385607790e-09 1s 1s 385608830e-09 1s 1s 385613710e-09 0s 0s 385618030e-09 1s 1s 385619110e-09 1s 1s 385623950e-09 0s 0s 385628270e-09 1s 1s 385629390e-09 1s 1s 385634190e-09 0s 0s 385638510e-09 1s 1s 385639670e-09 1s 1s 385644430e-09 0s 0s 385648750e-09 1s 1s 385649950e-09 1s 1s 385654670e-09 0s 0s 385658990e-09 1s 1s 385660230e-09 1s 1s 385664910e-09 0s 0s 385669230e-09 1s 1s 385670510e-09 1s 1s 385675150e-09 0s 0s 385679470e-09 1s 1s 385680790e-09 1s 1s 385685390e-09 0s 0s 385689710e-09 1s 1s 385691070e-09 1s 1s 385695630e-09 0s 0s 385699950e-09 1s 1s 385701350e-09 1s 1s 385705870e-09 0s 0s 385710190e-09 1s 1s 385711630e-09 1s 1s 385716110e-09 0s 0s 385720430e-09 1s 1s 385721910e-09 1s 1s 385726350e-09 0s 0s 385730670e-09 1s 1s 385732190e-09 1s 1s 385736590e-09 0s 0s 385740910e-09 1s 1s 385742470e-09 1s 1s 385746830e-09 0s 0s 385751150e-09 1s 1s 385752750e-09 1s 1s 385757070e-09 0s 0s 385761390e-09 1s 1s 385763030e-09 1s 1s 385767310e-09 0s 0s 385771630e-09 1s 1s 385773310e-09 1s 1s 385777550e-09 0s 0s 385781870e-09 1s 1s 385783590e-09 1s 1s 385787790e-09 0s 0s 385792110e-09 1s 1s 385793870e-09 1s 1s 385798030e-09 0s 0s 385802350e-09 1s 1s 385804150e-09 1s 1s 385808270e-09 0s 0s 385812590e-09 1s 1s 385814430e-09 1s 1s 385818510e-09 0s 0s 385822830e-09 1s 1s 385824710e-09 1s 1s 385828750e-09 0s 0s 385833070e-09 1s 1s 385834990e-09 1s 1s 385838990e-09 0s 0s 385843310e-09 1s 1s 385845270e-09 1s 1s 385849230e-09 0s 0s 385853550e-09 1s 1s 385855550e-09 1s 1s 385859470e-09 0s 0s 385863790e-09 1s 1s 385865830e-09 1s 1s 385869710e-09 0s 0s 385874030e-09 1s 1s 385876110e-09 1s 1s 385879950e-09 0s 0s 385884270e-09 1s 1s 385886390e-09 1s 1s 385890190e-09 0s 0s 385894510e-09 1s 1s 385896670e-09 1s 1s 385900430e-09 0s 0s 385904750e-09 1s 1s 385906950e-09 1s 1s 385910670e-09 0s 0s 385914990e-09 1s 1s 385917230e-09 1s 1s 385920910e-09 0s 0s 385925230e-09 1s 1s 385927510e-09 1s 1s 385931150e-09 0s 0s 385935470e-09 1s 1s 385937790e-09 1s 1s 385941390e-09 0s 0s 385945710e-09 1s 1s 385948070e-09 1s 1s 385951630e-09 0s 0s 385955950e-09 1s 1s 385958350e-09 1s 1s 385961870e-09 0s 0s 385966190e-09 1s 1s 385968630e-09 1s 1s 385972110e-09 0s 0s 385976430e-09 1s 1s 385978910e-09 1s 1s 385982350e-09 0s 0s 385986670e-09 1s 1s 385989190e-09 1s 1s 385992590e-09 0s 0s 385996910e-09 1s 1s 385999470e-09 1s 1s 386002830e-09 0s 0s 386007150e-09 1s 1s 386009750e-09 1s 1s 386013070e-09 0s 0s 386017390e-09 1s 1s 386020030e-09 1s 1s 386023310e-09 0s 0s 386027630e-09 1s 1s 386030310e-09 1s 1s 386033550e-09 0s 0s 386037870e-09 1s 1s 386040590e-09 1s 1s 386043790e-09 0s 0s 386048110e-09 1s 1s 386050870e-09 1s 1s 386054030e-09 0s 0s 386058350e-09 1s 1s 386061150e-09 1s 1s 386064270e-09 0s 0s 386068590e-09 1s 1s 386071430e-09 1s 1s 386074510e-09 0s 0s 386078830e-09 1s 1s 386081710e-09 1s 1s 386084750e-09 0s 0s 386089070e-09 1s 1s 386091990e-09 1s 1s 386094990e-09 0s 0s 386099310e-09 1s 1s 386102270e-09 1s 1s 386105230e-09 0s 0s 386109550e-09 1s 1s 386112550e-09 1s 1s 386115470e-09 0s 0s 386119790e-09 1s 1s 386122830e-09 1s 1s 386125710e-09 0s 0s 386130030e-09 1s 1s 386133110e-09 1s 1s 386135950e-09 0s 0s 386140270e-09 1s 1s 386143390e-09 1s 1s 386146190e-09 0s 0s 386150510e-09 1s 1s 386153670e-09 1s 1s 386156430e-09 0s 0s 386160750e-09 1s 1s 386163950e-09 1s 1s 386166670e-09 0s 0s 386170990e-09 1s 1s 386174230e-09 1s 1s 386176910e-09 0s 0s 386181230e-09 1s 1s 386184510e-09 1s 1s 386187150e-09 0s 0s 386191470e-09 1s 1s 386194790e-09 1s 1s 386197390e-09 0s 0s 386201710e-09 1s 1s 386205070e-09 1s 1s 386207630e-09 0s 0s 386211950e-09 1s 1s 386215350e-09 1s 1s 386217870e-09 0s 0s 386222190e-09 1s 1s 386225630e-09 1s 1s 386228110e-09 0s 0s 386232430e-09 1s 1s 386235910e-09 1s 1s 386238350e-09 0s 0s 386242670e-09 1s 1s 386246190e-09 1s 1s 386248590e-09 0s 0s 386252910e-09 1s 1s 386256470e-09 1s 1s 386258830e-09 0s 0s 386263150e-09 1s 1s 386266750e-09 1s 1s 386269070e-09 0s 0s 386273390e-09 1s 1s 386277030e-09 1s 1s 386279310e-09 0s 0s 386283630e-09 1s 1s 386287310e-09 1s 1s 386289550e-09 0s 0s 386293870e-09 1s 1s 386297590e-09 1s 1s 386299790e-09 0s 0s 386304110e-09 1s 1s 386307870e-09 1s 1s 386310030e-09 0s 0s 386314350e-09 1s 1s 386318150e-09 1s 1s 386320270e-09 0s 0s 386324590e-09 1s 1s 386328430e-09 1s 1s 386330510e-09 0s 0s 386334830e-09 1s 1s 386338710e-09 1s 1s 386340750e-09 0s 0s 386345070e-09 1s 1s 386348990e-09 1s 1s 386350990e-09 0s 0s 386355310e-09 1s 1s 386359270e-09 1s 1s 386361230e-09 0s 0s 386365550e-09 1s 1s 386369550e-09 1s 1s 386371470e-09 0s 0s 386375790e-09 1s 1s 386379830e-09 1s 1s 386381710e-09 0s 0s 386386030e-09 1s 1s 386390110e-09 1s 1s 386391950e-09 0s 0s 386396270e-09 1s 1s 386400390e-09 1s 1s 386402190e-09 0s 0s 386406510e-09 1s 1s 386410670e-09 1s 1s 386412430e-09 0s 0s 386416750e-09 1s 1s 386420950e-09 1s 1s 386422670e-09 0s 0s 386426990e-09 1s 1s 386431230e-09 1s 1s 386432910e-09 0s 0s 386437230e-09 1s 1s 386441510e-09 1s 1s 386443150e-09 0s 0s 386447470e-09 1s 1s 386451790e-09 1s 1s 386453390e-09 0s 0s 386457710e-09 1s 1s 386462070e-09 1s 1s 386463630e-09 0s 0s 386467950e-09 1s 1s 386472350e-09 1s 1s 386473870e-09 0s 0s 386478190e-09 1s 1s 386482630e-09 1s 1s 386484110e-09 0s 0s 386488430e-09 1s 1s 386492910e-09 1s 1s 386494350e-09 0s 0s 386498670e-09 1s 1s 386503190e-09 1s 1s 386504590e-09 0s 0s 386508910e-09 1s 1s 386513470e-09 1s 1s 386514830e-09 0s 0s 386519150e-09 1s 1s 386523750e-09 1s 1s 386525070e-09 0s 0s 386529390e-09 1s 1s 386534030e-09 1s 1s 386535310e-09 0s 0s 386539630e-09 1s 1s 386544310e-09 1s 1s 386545550e-09 0s 0s 386549870e-09 1s 1s 386554590e-09 1s 1s 386555790e-09 0s 0s 386560110e-09 1s 1s 386564870e-09 1s 1s 386566030e-09 0s 0s 386570350e-09 1s 1s 386575150e-09 1s 1s 386576270e-09 0s 0s 386580590e-09 1s 1s 386585430e-09 1s 1s 386586510e-09 0s 0s 386590830e-09 1s 1s 386595710e-09 1s 1s 386596750e-09 0s 0s 386601070e-09 1s 1s 386605990e-09 1s 1s 386606990e-09 0s 0s 386611310e-09 1s 1s 386616270e-09 1s 1s 386617230e-09 0s 0s 386621550e-09 1s 1s 386626550e-09 1s 1s 386627470e-09 0s 0s 386631790e-09 1s 1s 386636830e-09 1s 1s 386637710e-09 0s 0s 386642030e-09 1s 1s 386647110e-09 1s 1s 386647950e-09 0s 0s 386652270e-09 1s 1s 386657390e-09 1s 1s 386658190e-09 0s 0s 386662510e-09 1s 1s 386667670e-09 1s 1s 386668430e-09 0s 0s 386672750e-09 1s 1s 386677950e-09 1s 1s 386678670e-09 0s 0s 386682990e-09 1s 1s 386688230e-09 1s 1s 386688910e-09 0s 0s 386693230e-09 1s 1s 386698510e-09 1s 1s 386699150e-09 0s 0s 386703470e-09 1s 1s 386708790e-09 1s 1s 386709390e-09 0s 0s 386713710e-09 1s 1s 386719070e-09 1s 1s 386719630e-09 0s 0s 386723950e-09 1s 1s 386729350e-09 1s 1s 386729870e-09 0s 0s 386734190e-09 1s 1s 386739630e-09 1s 1s 386740110e-09 0s 0s 386744430e-09 1s 1s 386749910e-09 1s 1s 386750350e-09 0s 0s 386754670e-09 1s 1s 386760190e-09 1s 1s 386760590e-09 0s 0s 386764910e-09 1s 1s 386770470e-09 1s 1s 386770830e-09 0s 0s 386775150e-09 1s 1s 386780750e-09 1s 1s 386781070e-09 0s 0s 386785390e-09 1s 1s 386791030e-09 1s 1s 386791310e-09 0s 0s 386795630e-09 1s 1s 386801310e-09 1s 1s 386801550e-09 0s 0s 386805870e-09 1s 1s 386811590e-09 1s 1s 386811790e-09 0s 0s 386816110e-09 1s 1s 386821870e-09 1s 1s 386822030e-09 0s 0s 386826350e-09 1s 1s 386832150e-09 1s 1s 386832270e-09 0s 0s 386836590e-09 1s 1s 386842430e-09 1s 1s 386842510e-09 0s 0s 386846830e-09 1s 1s 386852710e-09 1s 1s 386852750e-09 0s 0s 386857070e-09 1s 1s 386862990e-09 0s 0s 386867310e-09 1s 1s 386873230e-09 0s 0s 386873270e-09 0s 0s 386877550e-09 1s 1s 386883470e-09 0s 0s 386883550e-09 0s 0s 386887790e-09 1s 1s 386893710e-09 0s 0s 386893830e-09 0s 0s 386898030e-09 1s 1s 386903950e-09 0s 0s 386904110e-09 0s 0s 386908270e-09 1s 1s 386914190e-09 0s 0s 386914390e-09 0s 0s 386918510e-09 1s 1s 386924430e-09 0s 0s 386924670e-09 0s 0s 386928750e-09 1s 1s 386934670e-09 0s 0s 386934950e-09 0s 0s 386938990e-09 1s 1s 386944910e-09 0s 0s 386945230e-09 0s 0s 386949230e-09 1s 1s 386955150e-09 0s 0s 386955510e-09 0s 0s 386959470e-09 1s 1s 386965390e-09 0s 0s 386965790e-09 0s 0s 386969710e-09 1s 1s 386975630e-09 0s 0s 386976070e-09 0s 0s 386979950e-09 1s 1s 386985870e-09 0s 0s 386986350e-09 0s 0s 386990190e-09 1s 1s 386996110e-09 0s 0s 386996630e-09 0s 0s 387000430e-09 1s 1s 387006350e-09 0s 0s 387006910e-09 0s 0s 387010670e-09 1s 1s 387016590e-09 0s 0s 387017190e-09 0s 0s 387020910e-09 1s 1s 387026830e-09 0s 0s 387027470e-09 0s 0s 387031150e-09 1s 1s 387037070e-09 0s 0s 387037750e-09 0s 0s 387041390e-09 1s 1s 387047310e-09 0s 0s 387048030e-09 0s 0s 387051630e-09 1s 1s 387057550e-09 0s 0s 387058310e-09 0s 0s 387061870e-09 1s 1s 387067790e-09 0s 0s 387068590e-09 0s 0s 387072110e-09 1s 1s 387078030e-09 0s 0s 387078870e-09 0s 0s 387082350e-09 1s 1s 387088270e-09 0s 0s 387089150e-09 0s 0s 387092590e-09 1s 1s 387098510e-09 0s 0s 387099430e-09 0s 0s 387102830e-09 1s 1s 387108750e-09 0s 0s 387109710e-09 0s 0s 387113070e-09 1s 1s 387118990e-09 0s 0s 387119990e-09 0s 0s 387123310e-09 1s 1s 387129230e-09 0s 0s 387130270e-09 0s 0s 387133550e-09 1s 1s 387139470e-09 0s 0s 387140550e-09 0s 0s 387143790e-09 1s 1s 387149710e-09 0s 0s 387150830e-09 0s 0s 387154030e-09 1s 1s 387159950e-09 0s 0s 387161110e-09 0s 0s 387164270e-09 1s 1s 387170190e-09 0s 0s 387171390e-09 0s 0s 387174510e-09 1s 1s 387180430e-09 0s 0s 387181670e-09 0s 0s 387184750e-09 1s 1s 387190670e-09 0s 0s 387191950e-09 0s 0s 387194990e-09 1s 1s 387200910e-09 0s 0s 387202230e-09 0s 0s 387205230e-09 1s 1s 387211150e-09 0s 0s 387212510e-09 0s 0s 387215470e-09 1s 1s 387221390e-09 0s 0s 387222790e-09 0s 0s 387225710e-09 1s 1s 387231630e-09 0s 0s 387233070e-09 0s 0s 387235950e-09 1s 1s 387241870e-09 0s 0s 387243350e-09 0s 0s 387246190e-09 1s 1s 387252110e-09 0s 0s 387253630e-09 0s 0s 387256430e-09 1s 1s 387262350e-09 0s 0s 387263910e-09 0s 0s 387266670e-09 1s 1s 387272590e-09 0s 0s 387274190e-09 0s 0s 387276910e-09 1s 1s 387282830e-09 0s 0s 387284470e-09 0s 0s 387287150e-09 1s 1s 387293070e-09 0s 0s 387294750e-09 0s 0s 387297390e-09 1s 1s 387303310e-09 0s 0s 387305030e-09 0s 0s 387307630e-09 1s 1s 387313550e-09 0s 0s 387315310e-09 0s 0s 387317870e-09 1s 1s 387323790e-09 0s 0s 387325590e-09 0s 0s 387328110e-09 1s 1s 387334030e-09 0s 0s 387335870e-09 0s 0s 387338350e-09 1s 1s 387344270e-09 0s 0s 387346150e-09 0s 0s 387348590e-09 1s 1s 387354510e-09 0s 0s 387356430e-09 0s 0s 387358830e-09 1s 1s 387364750e-09 0s 0s 387366710e-09 0s 0s 387369070e-09 1s 1s 387374990e-09 0s 0s 387376990e-09 0s 0s 387379310e-09 1s 1s 387385230e-09 0s 0s 387387270e-09 0s 0s 387389550e-09 1s 1s 387395470e-09 0s 0s 387397550e-09 0s 0s 387399790e-09 1s 1s 387405710e-09 0s 0s 387407830e-09 0s 0s 387410030e-09 1s 1s 387415950e-09 0s 0s 387418110e-09 0s 0s 387420270e-09 1s 1s 387426190e-09 0s 0s 387428390e-09 0s 0s 387430510e-09 1s 1s 387436430e-09 0s 0s 387438670e-09 0s 0s 387440750e-09 1s 1s 387446670e-09 0s 0s 387448950e-09 0s 0s 387450990e-09 1s 1s 387456910e-09 0s 0s 387459230e-09 0s 0s 387461230e-09 1s 1s 387467150e-09 0s 0s 387469510e-09 0s 0s 387471470e-09 1s 1s 387477390e-09 0s 0s 387479790e-09 0s 0s 387481710e-09 1s 1s 387487630e-09 0s 0s 387490070e-09 0s 0s 387491950e-09 1s 1s 387497870e-09 0s 0s 387500350e-09 0s 0s 387502190e-09 1s 1s 387508110e-09 0s 0s 387510630e-09 0s 0s 387512430e-09 1s 1s 387518350e-09 0s 0s 387520910e-09 0s 0s 387522670e-09 1s 1s 387528590e-09 0s 0s 387531190e-09 0s 0s 387532910e-09 1s 1s 387538830e-09 0s 0s 387541470e-09 0s 0s 387543150e-09 1s 1s 387549070e-09 0s 0s 387551750e-09 0s 0s 387553390e-09 1s 1s 387559310e-09 0s 0s 387562030e-09 0s 0s 387563630e-09 1s 1s 387569550e-09 0s 0s 387572310e-09 0s 0s 387573870e-09 1s 1s 387579790e-09 0s 0s 387582590e-09 0s 0s 387584110e-09 1s 1s 387590030e-09 0s 0s 387592870e-09 0s 0s 387594350e-09 1s 1s 387600270e-09 0s 0s 387603150e-09 0s 0s 387604590e-09 1s 1s 387610510e-09 0s 0s 387613430e-09 0s 0s 387614830e-09 1s 1s 387620750e-09 0s 0s 387623710e-09 0s 0s 387625070e-09 1s 1s 387630990e-09 0s 0s 387633990e-09 0s 0s 387635310e-09 1s 1s 387641230e-09 0s 0s 387644270e-09 0s 0s 387645550e-09 1s 1s 387651470e-09 0s 0s 387654550e-09 0s 0s 387655790e-09 1s 1s 387661710e-09 0s 0s 387664830e-09 0s 0s 387666030e-09 1s 1s 387671950e-09 0s 0s 387675110e-09 0s 0s 387676270e-09 1s 1s 387682190e-09 0s 0s 387685390e-09 0s 0s 387686510e-09 1s 1s 387692430e-09 0s 0s 387695670e-09 0s 0s 387696750e-09 1s 1s 387702670e-09 0s 0s 387705950e-09 0s 0s 387706990e-09 1s 1s 387712910e-09 0s 0s 387716230e-09 0s 0s 387717230e-09 1s 1s 387723150e-09 0s 0s 387726510e-09 0s 0s 387727470e-09 1s 1s 387733390e-09 0s 0s 387736790e-09 0s 0s 387737710e-09 1s 1s 387743630e-09 0s 0s 387747070e-09 0s 0s 387747950e-09 1s 1s 387753870e-09 0s 0s 387757350e-09 0s 0s 387758190e-09 1s 1s 387764110e-09 0s 0s 387767630e-09 0s 0s 387768430e-09 1s 1s 387774350e-09 0s 0s 387777910e-09 0s 0s 387778670e-09 1s 1s 387784590e-09 0s 0s 387788190e-09 0s 0s 387788910e-09 1s 1s 387794830e-09 0s 0s 387798470e-09 0s 0s 387799150e-09 1s 1s 387805070e-09 0s 0s 387808750e-09 0s 0s 387809390e-09 1s 1s 387815310e-09 0s 0s 387819030e-09 0s 0s 387819630e-09 1s 1s 387825550e-09 0s 0s 387829310e-09 0s 0s 387829870e-09 1s 1s 387835790e-09 0s 0s 387839590e-09 0s 0s 387840110e-09 1s 1s 387846030e-09 0s 0s 387849870e-09 0s 0s 387850350e-09 1s 1s 387856270e-09 0s 0s 387860150e-09 0s 0s 387860590e-09 1s 1s 387866510e-09 0s 0s 387870430e-09 0s 0s 387870830e-09 1s 1s 387876750e-09 0s 0s 387880710e-09 0s 0s 387881070e-09 1s 1s 387886990e-09 0s 0s 387890990e-09 0s 0s 387891310e-09 1s 1s 387897230e-09 0s 0s 387901270e-09 0s 0s 387901550e-09 1s 1s 387907470e-09 0s 0s 387911550e-09 0s 0s 387911790e-09 1s 1s 387917710e-09 0s 0s 387921830e-09 0s 0s 387922030e-09 1s 1s 387927950e-09 0s 0s 387932110e-09 0s 0s 387932270e-09 1s 1s 387938190e-09 0s 0s 387942390e-09 0s 0s 387942510e-09 1s 1s 387948430e-09 0s 0s 387952670e-09 0s 0s 387952750e-09 1s 1s 387958670e-09 0s 0s 387962950e-09 0s 0s 387962990e-09 1s 1s 387968910e-09 0s 0s 387973230e-09 1s 1s 387973270e-09 1s 1s 387979190e-09 0s 0s 387983470e-09 1s 1s 387983550e-09 1s 1s 387989430e-09 0s 0s 387993710e-09 1s 1s 387993830e-09 1s 1s 387999670e-09 0s 0s 388003950e-09 1s 1s 388004110e-09 1s 1s 388009910e-09 0s 0s 388014190e-09 1s 1s 388014390e-09 1s 1s 388020150e-09 0s 0s 388024430e-09 1s 1s 388024670e-09 1s 1s 388030390e-09 0s 0s 388034670e-09 1s 1s 388034950e-09 1s 1s 388040630e-09 0s 0s 388044910e-09 1s 1s 388045230e-09 1s 1s 388050870e-09 0s 0s 388055150e-09 1s 1s 388055510e-09 1s 1s 388061110e-09 0s 0s 388065390e-09 1s 1s 388065790e-09 1s 1s 388071350e-09 0s 0s 388075630e-09 1s 1s 388076070e-09 1s 1s 388081590e-09 0s 0s 388085870e-09 1s 1s 388086350e-09 1s 1s 388091830e-09 0s 0s 388096110e-09 1s 1s 388096630e-09 1s 1s 388102070e-09 0s 0s 388106350e-09 1s 1s 388106910e-09 1s 1s 388112310e-09 0s 0s 388116590e-09 1s 1s 388117190e-09 1s 1s 388122550e-09 0s 0s 388126830e-09 1s 1s 388127470e-09 1s 1s 388132790e-09 0s 0s 388137070e-09 1s 1s 388137750e-09 1s 1s 388143030e-09 0s 0s 388147310e-09 1s 1s 388148030e-09 1s 1s 388153270e-09 0s 0s 388157550e-09 1s 1s 388158310e-09 1s 1s 388163510e-09 0s 0s 388167790e-09 1s 1s 388168590e-09 1s 1s 388173750e-09 0s 0s 388178030e-09 1s 1s 388178870e-09 1s 1s 388183990e-09 0s 0s 388188270e-09 1s 1s 388189150e-09 1s 1s 388194230e-09 0s 0s 388198510e-09 1s 1s 388199430e-09 1s 1s 388204470e-09 0s 0s 388208750e-09 1s 1s 388209710e-09 1s 1s 388214710e-09 0s 0s 388218990e-09 1s 1s 388219990e-09 1s 1s 388224950e-09 0s 0s 388229230e-09 1s 1s 388230270e-09 1s 1s 388235190e-09 0s 0s 388239470e-09 1s 1s 388240550e-09 1s 1s 388245430e-09 0s 0s 388249710e-09 1s 1s 388250830e-09 1s 1s 388255670e-09 0s 0s 388259950e-09 1s 1s 388261110e-09 1s 1s 388265910e-09 0s 0s 388270190e-09 1s 1s 388271390e-09 1s 1s 388276150e-09 0s 0s 388280430e-09 1s 1s 388281670e-09 1s 1s 388286390e-09 0s 0s 388290670e-09 1s 1s 388291950e-09 1s 1s 388296630e-09 0s 0s 388300910e-09 1s 1s 388302230e-09 1s 1s 388306870e-09 0s 0s 388311150e-09 1s 1s 388312510e-09 1s 1s 388317110e-09 0s 0s 388321390e-09 1s 1s 388322790e-09 1s 1s 388327350e-09 0s 0s 388331630e-09 1s 1s 388333070e-09 1s 1s 388337590e-09 0s 0s 388341870e-09 1s 1s 388343350e-09 1s 1s 388347830e-09 0s 0s 388352110e-09 1s 1s 388353630e-09 1s 1s 388358070e-09 0s 0s 388362350e-09 1s 1s 388363910e-09 1s 1s 388368310e-09 0s 0s 388372590e-09 1s 1s 388374190e-09 1s 1s 388378550e-09 0s 0s 388382830e-09 1s 1s 388384470e-09 1s 1s 388388790e-09 0s 0s 388393070e-09 1s 1s 388394750e-09 1s 1s 388399030e-09 0s 0s 388403310e-09 1s 1s 388405030e-09 1s 1s 388409270e-09 0s 0s 388413550e-09 1s 1s 388415310e-09 1s 1s 388419510e-09 0s 0s 388423790e-09 1s 1s 388425590e-09 1s 1s 388429750e-09 0s 0s 388434030e-09 1s 1s 388435870e-09 1s 1s 388439990e-09 0s 0s 388444270e-09 1s 1s 388446150e-09 1s 1s 388450230e-09 0s 0s 388454510e-09 1s 1s 388456430e-09 1s 1s 388460470e-09 0s 0s 388464750e-09 1s 1s 388466710e-09 1s 1s 388470710e-09 0s 0s 388474990e-09 1s 1s 388476990e-09 1s 1s 388480950e-09 0s 0s 388485230e-09 1s 1s 388487270e-09 1s 1s 388491190e-09 0s 0s 388495470e-09 1s 1s 388497550e-09 1s 1s 388501430e-09 0s 0s 388505710e-09 1s 1s 388507830e-09 1s 1s 388511670e-09 0s 0s 388515950e-09 1s 1s 388518110e-09 1s 1s 388521910e-09 0s 0s 388526190e-09 1s 1s 388528390e-09 1s 1s 388532150e-09 0s 0s 388536430e-09 1s 1s 388538670e-09 1s 1s 388542390e-09 0s 0s 388546670e-09 1s 1s 388548950e-09 1s 1s 388552630e-09 0s 0s 388556910e-09 1s 1s 388559230e-09 1s 1s 388562870e-09 0s 0s 388567150e-09 1s 1s 388569510e-09 1s 1s 388573110e-09 0s 0s 388577390e-09 1s 1s 388579790e-09 1s 1s 388583350e-09 0s 0s 388587630e-09 1s 1s 388590070e-09 1s 1s 388593590e-09 0s 0s 388597870e-09 1s 1s 388600350e-09 1s 1s 388603830e-09 0s 0s 388608110e-09 1s 1s 388610630e-09 1s 1s 388614070e-09 0s 0s 388618350e-09 1s 1s 388620910e-09 1s 1s 388624310e-09 0s 0s 388628590e-09 1s 1s 388631190e-09 1s 1s 388634550e-09 0s 0s 388638830e-09 1s 1s 388641470e-09 1s 1s 388644790e-09 0s 0s 388649070e-09 1s 1s 388651750e-09 1s 1s 388655030e-09 0s 0s 388659310e-09 1s 1s 388662030e-09 1s 1s 388665270e-09 0s 0s 388669550e-09 1s 1s 388672310e-09 1s 1s 388675510e-09 0s 0s 388679790e-09 1s 1s 388682590e-09 1s 1s 388685750e-09 0s 0s 388690030e-09 1s 1s 388692870e-09 1s 1s 388695990e-09 0s 0s 388700270e-09 1s 1s 388703150e-09 1s 1s 388706230e-09 0s 0s 388710510e-09 1s 1s 388713430e-09 1s 1s 388716470e-09 0s 0s 388720750e-09 1s 1s 388723710e-09 1s 1s 388726710e-09 0s 0s 388730990e-09 1s 1s 388733990e-09 1s 1s 388736950e-09 0s 0s 388741230e-09 1s 1s 388744270e-09 1s 1s 388747190e-09 0s 0s 388751470e-09 1s 1s 388754550e-09 1s 1s 388757430e-09 0s 0s 388761710e-09 1s 1s 388764830e-09 1s 1s 388767670e-09 0s 0s 388771950e-09 1s 1s 388775110e-09 1s 1s 388777910e-09 0s 0s 388782190e-09 1s 1s 388785390e-09 1s 1s 388788150e-09 0s 0s 388792430e-09 1s 1s 388795670e-09 1s 1s 388798390e-09 0s 0s 388802670e-09 1s 1s 388805950e-09 1s 1s 388808630e-09 0s 0s 388812910e-09 1s 1s 388816230e-09 1s 1s 388818870e-09 0s 0s 388823150e-09 1s 1s 388826510e-09 1s 1s 388829110e-09 0s 0s 388833390e-09 1s 1s 388836790e-09 1s 1s 388839350e-09 0s 0s 388843630e-09 1s 1s 388847070e-09 1s 1s 388849590e-09 0s 0s 388853870e-09 1s 1s 388857350e-09 1s 1s 388859830e-09 0s 0s 388864110e-09 1s 1s 388867630e-09 1s 1s 388870070e-09 0s 0s 388874350e-09 1s 1s 388877910e-09 1s 1s 388880310e-09 0s 0s 388884590e-09 1s 1s 388888190e-09 1s 1s 388890550e-09 0s 0s 388894830e-09 1s 1s 388898470e-09 1s 1s 388900790e-09 0s 0s 388905070e-09 1s 1s 388908750e-09 1s 1s 388911030e-09 0s 0s 388915310e-09 1s 1s 388919030e-09 1s 1s 388921270e-09 0s 0s 388925550e-09 1s 1s 388929310e-09 1s 1s 388931510e-09 0s 0s 388935790e-09 1s 1s 388939590e-09 1s 1s 388941750e-09 0s 0s 388946030e-09 1s 1s 388949870e-09 1s 1s 388951990e-09 0s 0s 388956270e-09 1s 1s 388960150e-09 1s 1s 388962230e-09 0s 0s 388966510e-09 1s 1s 388970430e-09 1s 1s 388972470e-09 0s 0s 388976750e-09 1s 1s 388980710e-09 1s 1s 388982710e-09 0s 0s 388986990e-09 1s 1s 388990990e-09 1s 1s 388992950e-09 0s 0s 388997230e-09 1s 1s 389001270e-09 1s 1s 389003190e-09 0s 0s 389007470e-09 1s 1s 389011550e-09 1s 1s 389013430e-09 0s 0s 389017710e-09 1s 1s 389021830e-09 1s 1s 389023670e-09 0s 0s 389027950e-09 1s 1s 389032110e-09 1s 1s 389033910e-09 0s 0s 389038190e-09 1s 1s 389042390e-09 1s 1s 389044150e-09 0s 0s 389048430e-09 1s 1s 389052670e-09 1s 1s 389054390e-09 0s 0s 389058670e-09 1s 1s 389062950e-09 1s 1s 389064630e-09 0s 0s 389068910e-09 1s 1s 389073230e-09 1s 1s 389074870e-09 0s 0s 389079150e-09 1s 1s 389083510e-09 1s 1s 389085110e-09 0s 0s 389089390e-09 1s 1s 389093790e-09 1s 1s 389095350e-09 0s 0s 389099630e-09 1s 1s 389104070e-09 1s 1s 389105590e-09 0s 0s 389109870e-09 1s 1s 389114350e-09 1s 1s 389115830e-09 0s 0s 389120110e-09 1s 1s 389124630e-09 1s 1s 389126070e-09 0s 0s 389130350e-09 1s 1s 389134910e-09 1s 1s 389136310e-09 0s 0s 389140590e-09 1s 1s 389145190e-09 1s 1s 389146550e-09 0s 0s 389150830e-09 1s 1s 389155470e-09 1s 1s 389156790e-09 0s 0s 389161070e-09 1s 1s 389165750e-09 1s 1s 389167030e-09 0s 0s 389171310e-09 1s 1s 389176030e-09 1s 1s 389177270e-09 0s 0s 389181550e-09 1s 1s 389186310e-09 1s 1s 389187510e-09 0s 0s 389191790e-09 1s 1s 389196590e-09 1s 1s 389197750e-09 0s 0s 389202030e-09 1s 1s 389206870e-09 1s 1s 389207990e-09 0s 0s 389212270e-09 1s 1s 389217150e-09 1s 1s 389218230e-09 0s 0s 389222510e-09 1s 1s 389227430e-09 1s 1s 389228470e-09 0s 0s 389232750e-09 1s 1s 389237710e-09 1s 1s 389238710e-09 0s 0s 389242990e-09 1s 1s 389247990e-09 1s 1s 389248950e-09 0s 0s 389253230e-09 1s 1s 389258270e-09 1s 1s 389259190e-09 0s 0s 389263470e-09 1s 1s 389268550e-09 1s 1s 389269430e-09 0s 0s 389273710e-09 1s 1s 389278830e-09 1s 1s 389279670e-09 0s 0s 389283950e-09 1s 1s 389289110e-09 1s 1s 389289910e-09 0s 0s 389294190e-09 1s 1s 389299390e-09 1s 1s 389300150e-09 0s 0s 389304430e-09 1s 1s 389309670e-09 1s 1s 389310390e-09 0s 0s 389314670e-09 1s 1s 389319950e-09 1s 1s 389320630e-09 0s 0s 389324910e-09 1s 1s 389330230e-09 1s 1s 389330870e-09 0s 0s 389335150e-09 1s 1s 389340510e-09 1s 1s 389341110e-09 0s 0s 389345390e-09 1s 1s 389350790e-09 1s 1s 389351350e-09 0s 0s 389355630e-09 1s 1s 389361070e-09 1s 1s 389361590e-09 0s 0s 389365870e-09 1s 1s 389371350e-09 1s 1s 389371830e-09 0s 0s 389376110e-09 1s 1s 389381630e-09 1s 1s 389382070e-09 0s 0s 389386350e-09 1s 1s 389391910e-09 1s 1s 389392310e-09 0s 0s 389396590e-09 1s 1s 389402190e-09 1s 1s 389402550e-09 0s 0s 389406830e-09 1s 1s 389412470e-09 1s 1s 389412790e-09 0s 0s 389417070e-09 1s 1s 389422750e-09 1s 1s 389423030e-09 0s 0s 389427310e-09 1s 1s 389433030e-09 1s 1s 389433270e-09 0s 0s 389437550e-09 1s 1s 389443310e-09 1s 1s 389443510e-09 0s 0s 389447790e-09 1s 1s 389453590e-09 1s 1s 389453750e-09 0s 0s 389458030e-09 1s 1s 389463870e-09 1s 1s 389463990e-09 0s 0s 389468270e-09 1s 1s 389474150e-09 1s 1s 389474230e-09 0s 0s 389478510e-09 1s 1s 389484430e-09 1s 1s 389484470e-09 0s 0s 389488750e-09 1s 1s 389494710e-09 0s 0s 389498990e-09 1s 1s 389504950e-09 0s 0s 389504990e-09 0s 0s 389509230e-09 1s 1s 389515190e-09 0s 0s 389515270e-09 0s 0s 389519470e-09 1s 1s 389525430e-09 0s 0s 389525550e-09 0s 0s 389529710e-09 1s 1s 389535670e-09 0s 0s 389535830e-09 0s 0s 389539950e-09 1s 1s 389545910e-09 0s 0s 389546110e-09 0s 0s 389550190e-09 1s 1s 389556150e-09 0s 0s 389556390e-09 0s 0s 389560430e-09 1s 1s 389566390e-09 0s 0s 389566670e-09 0s 0s 389570670e-09 1s 1s 389576630e-09 0s 0s 389576950e-09 0s 0s 389580910e-09 1s 1s 389586870e-09 0s 0s 389587230e-09 0s 0s 389591150e-09 1s 1s 389597110e-09 0s 0s 389597510e-09 0s 0s 389601390e-09 1s 1s 389607350e-09 0s 0s 389607790e-09 0s 0s 389611630e-09 1s 1s 389617590e-09 0s 0s 389618070e-09 0s 0s 389621870e-09 1s 1s 389627830e-09 0s 0s 389628350e-09 0s 0s 389632110e-09 1s 1s 389638070e-09 0s 0s 389638630e-09 0s 0s 389642350e-09 1s 1s 389648310e-09 0s 0s 389648910e-09 0s 0s 389652590e-09 1s 1s 389658550e-09 0s 0s 389659190e-09 0s 0s 389662830e-09 1s 1s 389668790e-09 0s 0s 389669470e-09 0s 0s 389673070e-09 1s 1s 389679030e-09 0s 0s 389679750e-09 0s 0s 389683310e-09 1s 1s 389689270e-09 0s 0s 389690030e-09 0s 0s 389693550e-09 1s 1s 389699510e-09 0s 0s 389700310e-09 0s 0s 389703790e-09 1s 1s 389709750e-09 0s 0s 389710590e-09 0s 0s 389714030e-09 1s 1s 389719990e-09 0s 0s 389720870e-09 0s 0s 389724270e-09 1s 1s 389730230e-09 0s 0s 389731150e-09 0s 0s 389734510e-09 1s 1s 389740470e-09 0s 0s 389741430e-09 0s 0s 389744750e-09 1s 1s 389750710e-09 0s 0s 389751710e-09 0s 0s 389754990e-09 1s 1s 389760950e-09 0s 0s 389761990e-09 0s 0s 389765230e-09 1s 1s 389771190e-09 0s 0s 389772270e-09 0s 0s 389775470e-09 1s 1s 389781430e-09 0s 0s 389782550e-09 0s 0s 389785710e-09 1s 1s 389791670e-09 0s 0s 389792830e-09 0s 0s 389795950e-09 1s 1s 389801910e-09 0s 0s 389803110e-09 0s 0s 389806190e-09 1s 1s 389812150e-09 0s 0s 389813390e-09 0s 0s 389816430e-09 1s 1s 389822390e-09 0s 0s 389823670e-09 0s 0s 389826670e-09 1s 1s 389832630e-09 0s 0s 389833950e-09 0s 0s 389836910e-09 1s 1s 389842870e-09 0s 0s 389844230e-09 0s 0s 389847150e-09 1s 1s 389853110e-09 0s 0s 389854510e-09 0s 0s 389857390e-09 1s 1s 389863350e-09 0s 0s 389864790e-09 0s 0s 389867630e-09 1s 1s 389873590e-09 0s 0s 389875070e-09 0s 0s 389877870e-09 1s 1s 389883830e-09 0s 0s 389885350e-09 0s 0s 389888110e-09 1s 1s 389894070e-09 0s 0s 389895630e-09 0s 0s 389898350e-09 1s 1s 389904310e-09 0s 0s 389905910e-09 0s 0s 389908590e-09 1s 1s 389914550e-09 0s 0s 389916190e-09 0s 0s 389918830e-09 1s 1s 389924790e-09 0s 0s 389926470e-09 0s 0s 389929070e-09 1s 1s 389935030e-09 0s 0s 389936750e-09 0s 0s 389939310e-09 1s 1s 389945270e-09 0s 0s 389947030e-09 0s 0s 389949550e-09 1s 1s 389955510e-09 0s 0s 389957310e-09 0s 0s 389959790e-09 1s 1s 389965750e-09 0s 0s 389967590e-09 0s 0s 389970030e-09 1s 1s 389975990e-09 0s 0s 389977870e-09 0s 0s 389980270e-09 1s 1s 389986230e-09 0s 0s 389988150e-09 0s 0s 389990510e-09 1s 1s 389996470e-09 0s 0s 389998430e-09 0s 0s 390000750e-09 1s 1s 390006710e-09 0s 0s 390008710e-09 0s 0s 390010990e-09 1s 1s 390016950e-09 0s 0s 390018990e-09 0s 0s 390021230e-09 1s 1s 390027190e-09 0s 0s 390029270e-09 0s 0s 390031470e-09 1s 1s 390037430e-09 0s 0s 390039550e-09 0s 0s 390041710e-09 1s 1s 390047670e-09 0s 0s 390049830e-09 0s 0s 390051950e-09 1s 1s 390057910e-09 0s 0s 390060110e-09 0s 0s 390062190e-09 1s 1s 390068150e-09 0s 0s 390070390e-09 0s 0s 390072430e-09 1s 1s 390078390e-09 0s 0s 390080670e-09 0s 0s 390082670e-09 1s 1s 390088630e-09 0s 0s 390090950e-09 0s 0s 390092910e-09 1s 1s 390098870e-09 0s 0s 390101230e-09 0s 0s 390103150e-09 1s 1s 390109110e-09 0s 0s 390111510e-09 0s 0s 390113390e-09 1s 1s 390119350e-09 0s 0s 390121790e-09 0s 0s 390123630e-09 1s 1s 390129590e-09 0s 0s 390132070e-09 0s 0s 390133870e-09 1s 1s 390139830e-09 0s 0s 390142350e-09 0s 0s 390144110e-09 1s 1s 390150070e-09 0s 0s 390152630e-09 0s 0s 390154350e-09 1s 1s 390160310e-09 0s 0s 390162910e-09 0s 0s 390164590e-09 1s 1s 390170550e-09 0s 0s 390173190e-09 0s 0s 390174830e-09 1s 1s 390180790e-09 0s 0s 390183470e-09 0s 0s 390185070e-09 1s 1s 390191030e-09 0s 0s 390193750e-09 0s 0s 390195310e-09 1s 1s 390201270e-09 0s 0s 390204030e-09 0s 0s 390205550e-09 1s 1s 390211510e-09 0s 0s 390214310e-09 0s 0s 390215790e-09 1s 1s 390221750e-09 0s 0s 390224590e-09 0s 0s 390226030e-09 1s 1s 390231990e-09 0s 0s 390234870e-09 0s 0s 390236270e-09 1s 1s 390242230e-09 0s 0s 390245150e-09 0s 0s 390246510e-09 1s 1s 390252470e-09 0s 0s 390255430e-09 0s 0s 390256750e-09 1s 1s 390262710e-09 0s 0s 390265710e-09 0s 0s 390266990e-09 1s 1s 390272950e-09 0s 0s 390275990e-09 0s 0s 390277230e-09 1s 1s 390283190e-09 0s 0s 390286270e-09 0s 0s 390287470e-09 1s 1s 390293430e-09 0s 0s 390296550e-09 0s 0s 390297710e-09 1s 1s 390303670e-09 0s 0s 390306830e-09 0s 0s 390307950e-09 1s 1s 390313910e-09 0s 0s 390317110e-09 0s 0s 390318190e-09 1s 1s 390324150e-09 0s 0s 390327390e-09 0s 0s 390328430e-09 1s 1s 390334390e-09 0s 0s 390337670e-09 0s 0s 390338670e-09 1s 1s 390344630e-09 0s 0s 390347950e-09 0s 0s 390348910e-09 1s 1s 390354870e-09 0s 0s 390358230e-09 0s 0s 390359150e-09 1s 1s 390365110e-09 0s 0s 390368510e-09 0s 0s 390369390e-09 1s 1s 390375350e-09 0s 0s 390378790e-09 0s 0s 390379630e-09 1s 1s 390385590e-09 0s 0s 390389070e-09 0s 0s 390389870e-09 1s 1s 390395830e-09 0s 0s 390399350e-09 0s 0s 390400110e-09 1s 1s 390406070e-09 0s 0s 390409630e-09 0s 0s 390410350e-09 1s 1s 390416310e-09 0s 0s 390419910e-09 0s 0s 390420590e-09 1s 1s 390426550e-09 0s 0s 390430190e-09 0s 0s 390430830e-09 1s 1s 390436790e-09 0s 0s 390440470e-09 0s 0s 390441070e-09 1s 1s 390447030e-09 0s 0s 390450750e-09 0s 0s 390451310e-09 1s 1s 390457270e-09 0s 0s 390461030e-09 0s 0s 390461550e-09 1s 1s 390467510e-09 0s 0s 390471310e-09 0s 0s 390471790e-09 1s 1s 390477750e-09 0s 0s 390481590e-09 0s 0s 390482030e-09 1s 1s 390487990e-09 0s 0s 390491870e-09 0s 0s 390492270e-09 1s 1s 390498230e-09 0s 0s 390502150e-09 0s 0s 390502510e-09 1s 1s 390508470e-09 0s 0s 390512430e-09 0s 0s 390512750e-09 1s 1s 390518710e-09 0s 0s 390522710e-09 0s 0s 390522990e-09 1s 1s 390528950e-09 0s 0s 390532990e-09 0s 0s 390533230e-09 1s 1s 390539190e-09 0s 0s 390543270e-09 0s 0s 390543470e-09 1s 1s 390549430e-09 0s 0s 390553550e-09 0s 0s 390553710e-09 1s 1s 390559670e-09 0s 0s 390563830e-09 0s 0s 390563950e-09 1s 1s 390569910e-09 0s 0s 390574110e-09 0s 0s 390574190e-09 1s 1s 390580150e-09 0s 0s 390584390e-09 0s 0s 390584430e-09 1s 1s 390590390e-09 0s 0s 390594670e-09 1s 1s 390594710e-09 1s 1s 390600670e-09 0s 0s 390604910e-09 1s 1s 390604990e-09 1s 1s 390610910e-09 0s 0s 390615150e-09 1s 1s 390615270e-09 1s 1s 390621150e-09 0s 0s 390625390e-09 1s 1s 390625550e-09 1s 1s 390631390e-09 0s 0s 390635630e-09 1s 1s 390635830e-09 1s 1s 390641630e-09 0s 0s 390645870e-09 1s 1s 390646110e-09 1s 1s 390651870e-09 0s 0s 390656110e-09 1s 1s 390656390e-09 1s 1s 390662110e-09 0s 0s 390666350e-09 1s 1s 390666670e-09 1s 1s 390672350e-09 0s 0s 390676590e-09 1s 1s 390676950e-09 1s 1s 390682590e-09 0s 0s 390686830e-09 1s 1s 390687230e-09 1s 1s 390692830e-09 0s 0s 390697070e-09 1s 1s 390697510e-09 1s 1s 390703070e-09 0s 0s 390707310e-09 1s 1s 390707790e-09 1s 1s 390713310e-09 0s 0s 390717550e-09 1s 1s 390718070e-09 1s 1s 390723550e-09 0s 0s 390727790e-09 1s 1s 390728350e-09 1s 1s 390733790e-09 0s 0s 390738030e-09 1s 1s 390738630e-09 1s 1s 390744030e-09 0s 0s 390748270e-09 1s 1s 390748910e-09 1s 1s 390754270e-09 0s 0s 390758510e-09 1s 1s 390759190e-09 1s 1s 390764510e-09 0s 0s 390768750e-09 1s 1s 390769470e-09 1s 1s 390774750e-09 0s 0s 390778990e-09 1s 1s 390779750e-09 1s 1s 390784990e-09 0s 0s 390789230e-09 1s 1s 390790030e-09 1s 1s 390795230e-09 0s 0s 390799470e-09 1s 1s 390800310e-09 1s 1s 390805470e-09 0s 0s 390809710e-09 1s 1s 390810590e-09 1s 1s 390815710e-09 0s 0s 390819950e-09 1s 1s 390820870e-09 1s 1s 390825950e-09 0s 0s 390830190e-09 1s 1s 390831150e-09 1s 1s 390836190e-09 0s 0s 390840430e-09 1s 1s 390841430e-09 1s 1s 390846430e-09 0s 0s 390850670e-09 1s 1s 390851710e-09 1s 1s 390856670e-09 0s 0s 390860910e-09 1s 1s 390861990e-09 1s 1s 390866910e-09 0s 0s 390871150e-09 1s 1s 390872270e-09 1s 1s 390877150e-09 0s 0s 390881390e-09 1s 1s 390882550e-09 1s 1s 390887390e-09 0s 0s 390891630e-09 1s 1s 390892830e-09 1s 1s 390897630e-09 0s 0s 390901870e-09 1s 1s 390903110e-09 1s 1s 390907870e-09 0s 0s 390912110e-09 1s 1s 390913390e-09 1s 1s 390918110e-09 0s 0s 390922350e-09 1s 1s 390923670e-09 1s 1s 390928350e-09 0s 0s 390932590e-09 1s 1s 390933950e-09 1s 1s 390938590e-09 0s 0s 390942830e-09 1s 1s 390944230e-09 1s 1s 390948830e-09 0s 0s 390953070e-09 1s 1s 390954510e-09 1s 1s 390959070e-09 0s 0s 390963310e-09 1s 1s 390964790e-09 1s 1s 390969310e-09 0s 0s 390973550e-09 1s 1s 390975070e-09 1s 1s 390979550e-09 0s 0s 390983790e-09 1s 1s 390985350e-09 1s 1s 390989790e-09 0s 0s 390994030e-09 1s 1s 390995630e-09 1s 1s 391000030e-09 0s 0s 391004270e-09 1s 1s 391005910e-09 1s 1s 391010270e-09 0s 0s 391014510e-09 1s 1s 391016190e-09 1s 1s 391020510e-09 0s 0s 391024750e-09 1s 1s 391026470e-09 1s 1s 391030750e-09 0s 0s 391034990e-09 1s 1s 391036750e-09 1s 1s 391040990e-09 0s 0s 391045230e-09 1s 1s 391047030e-09 1s 1s 391051230e-09 0s 0s 391055470e-09 1s 1s 391057310e-09 1s 1s 391061470e-09 0s 0s 391065710e-09 1s 1s 391067590e-09 1s 1s 391071710e-09 0s 0s 391075950e-09 1s 1s 391077870e-09 1s 1s 391081950e-09 0s 0s 391086190e-09 1s 1s 391088150e-09 1s 1s 391092190e-09 0s 0s 391096430e-09 1s 1s 391098430e-09 1s 1s 391102430e-09 0s 0s 391106670e-09 1s 1s 391108710e-09 1s 1s 391112670e-09 0s 0s 391116910e-09 1s 1s 391118990e-09 1s 1s 391122910e-09 0s 0s 391127150e-09 1s 1s 391129270e-09 1s 1s 391133150e-09 0s 0s 391137390e-09 1s 1s 391139550e-09 1s 1s 391143390e-09 0s 0s 391147630e-09 1s 1s 391149830e-09 1s 1s 391153630e-09 0s 0s 391157870e-09 1s 1s 391160110e-09 1s 1s 391163870e-09 0s 0s 391168110e-09 1s 1s 391170390e-09 1s 1s 391174110e-09 0s 0s 391178350e-09 1s 1s 391180670e-09 1s 1s 391184350e-09 0s 0s 391188590e-09 1s 1s 391190950e-09 1s 1s 391194590e-09 0s 0s 391198830e-09 1s 1s 391201230e-09 1s 1s 391204830e-09 0s 0s 391209070e-09 1s 1s 391211510e-09 1s 1s 391215070e-09 0s 0s 391219310e-09 1s 1s 391221790e-09 1s 1s 391225310e-09 0s 0s 391229550e-09 1s 1s 391232070e-09 1s 1s 391235550e-09 0s 0s 391239790e-09 1s 1s 391242350e-09 1s 1s 391245790e-09 0s 0s 391250030e-09 1s 1s 391252630e-09 1s 1s 391256030e-09 0s 0s 391260270e-09 1s 1s 391262910e-09 1s 1s 391266270e-09 0s 0s 391270510e-09 1s 1s 391273190e-09 1s 1s 391276510e-09 0s 0s 391280750e-09 1s 1s 391283470e-09 1s 1s 391286750e-09 0s 0s 391290990e-09 1s 1s 391293750e-09 1s 1s 391296990e-09 0s 0s 391301230e-09 1s 1s 391304030e-09 1s 1s 391307230e-09 0s 0s 391311470e-09 1s 1s 391314310e-09 1s 1s 391317470e-09 0s 0s 391321710e-09 1s 1s 391324590e-09 1s 1s 391327710e-09 0s 0s 391331950e-09 1s 1s 391334870e-09 1s 1s 391337950e-09 0s 0s 391342190e-09 1s 1s 391345150e-09 1s 1s 391348190e-09 0s 0s 391352430e-09 1s 1s 391355430e-09 1s 1s 391358430e-09 0s 0s 391362670e-09 1s 1s 391365710e-09 1s 1s 391368670e-09 0s 0s 391372910e-09 1s 1s 391375990e-09 1s 1s 391378910e-09 0s 0s 391383150e-09 1s 1s 391386270e-09 1s 1s 391389150e-09 0s 0s 391393390e-09 1s 1s 391396550e-09 1s 1s 391399390e-09 0s 0s 391403630e-09 1s 1s 391406830e-09 1s 1s 391409630e-09 0s 0s 391413870e-09 1s 1s 391417110e-09 1s 1s 391419870e-09 0s 0s 391424110e-09 1s 1s 391427390e-09 1s 1s 391430110e-09 0s 0s 391434350e-09 1s 1s 391437670e-09 1s 1s 391440350e-09 0s 0s 391444590e-09 1s 1s 391447950e-09 1s 1s 391450590e-09 0s 0s 391454830e-09 1s 1s 391458230e-09 1s 1s 391460830e-09 0s 0s 391465070e-09 1s 1s 391468510e-09 1s 1s 391471070e-09 0s 0s 391475310e-09 1s 1s 391478790e-09 1s 1s 391481310e-09 0s 0s 391485550e-09 1s 1s 391489070e-09 1s 1s 391491550e-09 0s 0s 391495790e-09 1s 1s 391499350e-09 1s 1s 391501790e-09 0s 0s 391506030e-09 1s 1s 391509630e-09 1s 1s 391512030e-09 0s 0s 391516270e-09 1s 1s 391519910e-09 1s 1s 391522270e-09 0s 0s 391526510e-09 1s 1s 391530190e-09 1s 1s 391532510e-09 0s 0s 391536750e-09 1s 1s 391540470e-09 1s 1s 391542750e-09 0s 0s 391546990e-09 1s 1s 391550750e-09 1s 1s 391552990e-09 0s 0s 391557230e-09 1s 1s 391561030e-09 1s 1s 391563230e-09 0s 0s 391567470e-09 1s 1s 391571310e-09 1s 1s 391573470e-09 0s 0s 391577710e-09 1s 1s 391581590e-09 1s 1s 391583710e-09 0s 0s 391587950e-09 1s 1s 391591870e-09 1s 1s 391593950e-09 0s 0s 391598190e-09 1s 1s 391602150e-09 1s 1s 391604190e-09 0s 0s 391608430e-09 1s 1s 391612430e-09 1s 1s 391614430e-09 0s 0s 391618670e-09 1s 1s 391622710e-09 1s 1s 391624670e-09 0s 0s 391628910e-09 1s 1s 391632990e-09 1s 1s 391634910e-09 0s 0s 391639150e-09 1s 1s 391643270e-09 1s 1s 391645150e-09 0s 0s 391649390e-09 1s 1s 391653550e-09 1s 1s 391655390e-09 0s 0s 391659630e-09 1s 1s 391663830e-09 1s 1s 391665630e-09 0s 0s 391669870e-09 1s 1s 391674110e-09 1s 1s 391675870e-09 0s 0s 391680110e-09 1s 1s 391684390e-09 1s 1s 391686110e-09 0s 0s 391690350e-09 1s 1s 391694670e-09 1s 1s 391696350e-09 0s 0s 391700590e-09 1s 1s 391704950e-09 1s 1s 391706590e-09 0s 0s 391710830e-09 1s 1s 391715230e-09 1s 1s 391716830e-09 0s 0s 391721070e-09 1s 1s 391725510e-09 1s 1s 391727070e-09 0s 0s 391731310e-09 1s 1s 391735790e-09 1s 1s 391737310e-09 0s 0s 391741550e-09 1s 1s 391746070e-09 1s 1s 391747550e-09 0s 0s 391751790e-09 1s 1s 391756350e-09 1s 1s 391757790e-09 0s 0s 391762030e-09 1s 1s 391766630e-09 1s 1s 391768030e-09 0s 0s 391772270e-09 1s 1s 391776910e-09 1s 1s 391778270e-09 0s 0s 391782510e-09 1s 1s 391787190e-09 1s 1s 391788510e-09 0s 0s 391792750e-09 1s 1s 391797470e-09 1s 1s 391798750e-09 0s 0s 391802990e-09 1s 1s 391807750e-09 1s 1s 391808990e-09 0s 0s 391813230e-09 1s 1s 391818030e-09 1s 1s 391819230e-09 0s 0s 391823470e-09 1s 1s 391828310e-09 1s 1s 391829470e-09 0s 0s 391833710e-09 1s 1s 391838590e-09 1s 1s 391839710e-09 0s 0s 391843950e-09 1s 1s 391848870e-09 1s 1s 391849950e-09 0s 0s 391854190e-09 1s 1s 391859150e-09 1s 1s 391860190e-09 0s 0s 391864430e-09 1s 1s 391869430e-09 1s 1s 391870430e-09 0s 0s 391874670e-09 1s 1s 391879710e-09 1s 1s 391880670e-09 0s 0s 391884910e-09 1s 1s 391889990e-09 1s 1s 391890910e-09 0s 0s 391895150e-09 1s 1s 391900270e-09 1s 1s 391901150e-09 0s 0s 391905390e-09 1s 1s 391910550e-09 1s 1s 391911390e-09 0s 0s 391915630e-09 1s 1s 391920830e-09 1s 1s 391921630e-09 0s 0s 391925870e-09 1s 1s 391931110e-09 1s 1s 391931870e-09 0s 0s 391936110e-09 1s 1s 391941390e-09 1s 1s 391942110e-09 0s 0s 391946350e-09 1s 1s 391951670e-09 1s 1s 391952350e-09 0s 0s 391956590e-09 1s 1s 391961950e-09 1s 1s 391962590e-09 0s 0s 391966830e-09 1s 1s 391972230e-09 1s 1s 391972830e-09 0s 0s 391977070e-09 1s 1s 391982510e-09 1s 1s 391983070e-09 0s 0s 391987310e-09 1s 1s 391992790e-09 1s 1s 391993310e-09 0s 0s 391997550e-09 1s 1s 392003070e-09 1s 1s 392003550e-09 0s 0s 392007790e-09 1s 1s 392013350e-09 1s 1s 392013790e-09 0s 0s 392018030e-09 1s 1s 392023630e-09 1s 1s 392024030e-09 0s 0s 392028270e-09 1s 1s 392033910e-09 1s 1s 392034270e-09 0s 0s 392038510e-09 1s 1s 392044190e-09 1s 1s 392044510e-09 0s 0s 392048750e-09 1s 1s 392054470e-09 1s 1s 392054750e-09 0s 0s 392058990e-09 1s 1s 392064750e-09 1s 1s 392064990e-09 0s 0s 392069230e-09 1s 1s 392075030e-09 1s 1s 392075230e-09 0s 0s 392079470e-09 1s 1s 392085310e-09 1s 1s 392085470e-09 0s 0s 392089710e-09 1s 1s 392095590e-09 1s 1s 392095710e-09 0s 0s 392099950e-09 1s 1s 392105870e-09 1s 1s 392105950e-09 0s 0s 392110190e-09 1s 1s 392116150e-09 1s 1s 392116190e-09 0s 0s 392120430e-09 1s 1s 392126430e-09 0s 0s 392130670e-09 1s 1s 392136670e-09 0s 0s 392136710e-09 0s 0s 392140910e-09 1s 1s 392146910e-09 0s 0s 392146990e-09 0s 0s 392151150e-09 1s 1s 392157150e-09 0s 0s 392157270e-09 0s 0s 392161390e-09 1s 1s 392167390e-09 0s 0s 392167550e-09 0s 0s 392171630e-09 1s 1s 392177630e-09 0s 0s 392177830e-09 0s 0s 392181870e-09 1s 1s 392187870e-09 0s 0s 392188110e-09 0s 0s 392192110e-09 1s 1s 392198110e-09 0s 0s 392198390e-09 0s 0s 392202350e-09 1s 1s 392208350e-09 0s 0s 392208670e-09 0s 0s 392212590e-09 1s 1s 392218590e-09 0s 0s 392218950e-09 0s 0s 392222830e-09 1s 1s 392228830e-09 0s 0s 392229230e-09 0s 0s 392233070e-09 1s 1s 392239070e-09 0s 0s 392239510e-09 0s 0s 392243310e-09 1s 1s 392249310e-09 0s 0s 392249790e-09 0s 0s 392253550e-09 1s 1s 392259550e-09 0s 0s 392260070e-09 0s 0s 392263790e-09 1s 1s 392269790e-09 0s 0s 392270350e-09 0s 0s 392274030e-09 1s 1s 392280030e-09 0s 0s 392280630e-09 0s 0s 392284270e-09 1s 1s 392290270e-09 0s 0s 392290910e-09 0s 0s 392294510e-09 1s 1s 392300510e-09 0s 0s 392301190e-09 0s 0s 392304750e-09 1s 1s 392310750e-09 0s 0s 392311470e-09 0s 0s 392314990e-09 1s 1s 392320990e-09 0s 0s 392321750e-09 0s 0s 392325230e-09 1s 1s 392331230e-09 0s 0s 392332030e-09 0s 0s 392335470e-09 1s 1s 392341470e-09 0s 0s 392342310e-09 0s 0s 392345710e-09 1s 1s 392351710e-09 0s 0s 392352590e-09 0s 0s 392355950e-09 1s 1s 392361950e-09 0s 0s 392362870e-09 0s 0s 392366190e-09 1s 1s 392372190e-09 0s 0s 392373150e-09 0s 0s 392376430e-09 1s 1s 392382430e-09 0s 0s 392383430e-09 0s 0s 392386670e-09 1s 1s 392392670e-09 0s 0s 392393710e-09 0s 0s 392396910e-09 1s 1s 392402910e-09 0s 0s 392403990e-09 0s 0s 392407150e-09 1s 1s 392413150e-09 0s 0s 392414270e-09 0s 0s 392417390e-09 1s 1s 392423390e-09 0s 0s 392424550e-09 0s 0s 392427630e-09 1s 1s 392433630e-09 0s 0s 392434830e-09 0s 0s 392437870e-09 1s 1s 392443870e-09 0s 0s 392445110e-09 0s 0s 392448110e-09 1s 1s 392454110e-09 0s 0s 392455390e-09 0s 0s 392458350e-09 1s 1s 392464350e-09 0s 0s 392465670e-09 0s 0s 392468590e-09 1s 1s 392474590e-09 0s 0s 392475950e-09 0s 0s 392478830e-09 1s 1s 392484830e-09 0s 0s 392486230e-09 0s 0s 392489070e-09 1s 1s 392495070e-09 0s 0s 392496510e-09 0s 0s 392499310e-09 1s 1s 392505310e-09 0s 0s 392506790e-09 0s 0s 392509550e-09 1s 1s 392515550e-09 0s 0s 392517070e-09 0s 0s 392519790e-09 1s 1s 392525790e-09 0s 0s 392527350e-09 0s 0s 392530030e-09 1s 1s 392536030e-09 0s 0s 392537630e-09 0s 0s 392540270e-09 1s 1s 392546270e-09 0s 0s 392547910e-09 0s 0s 392550510e-09 1s 1s 392556510e-09 0s 0s 392558190e-09 0s 0s 392560750e-09 1s 1s 392566750e-09 0s 0s 392568470e-09 0s 0s 392570990e-09 1s 1s 392576990e-09 0s 0s 392578750e-09 0s 0s 392581230e-09 1s 1s 392587230e-09 0s 0s 392589030e-09 0s 0s 392591470e-09 1s 1s 392597470e-09 0s 0s 392599310e-09 0s 0s 392601710e-09 1s 1s 392607710e-09 0s 0s 392609590e-09 0s 0s 392611950e-09 1s 1s 392617950e-09 0s 0s 392619870e-09 0s 0s 392622190e-09 1s 1s 392628190e-09 0s 0s 392630150e-09 0s 0s 392632430e-09 1s 1s 392638430e-09 0s 0s 392640430e-09 0s 0s 392642670e-09 1s 1s 392648670e-09 0s 0s 392650710e-09 0s 0s 392652910e-09 1s 1s 392658910e-09 0s 0s 392660990e-09 0s 0s 392663150e-09 1s 1s 392669150e-09 0s 0s 392671270e-09 0s 0s 392673390e-09 1s 1s 392679390e-09 0s 0s 392681550e-09 0s 0s 392683630e-09 1s 1s 392689630e-09 0s 0s 392691830e-09 0s 0s 392693870e-09 1s 1s 392699870e-09 0s 0s 392702110e-09 0s 0s 392704110e-09 1s 1s 392710110e-09 0s 0s 392712390e-09 0s 0s 392714350e-09 1s 1s 392720350e-09 0s 0s 392722670e-09 0s 0s 392724590e-09 1s 1s 392730590e-09 0s 0s 392732950e-09 0s 0s 392734830e-09 1s 1s 392740830e-09 0s 0s 392743230e-09 0s 0s 392745070e-09 1s 1s 392751070e-09 0s 0s 392753510e-09 0s 0s 392755310e-09 1s 1s 392761310e-09 0s 0s 392763790e-09 0s 0s 392765550e-09 1s 1s 392771550e-09 0s 0s 392774070e-09 0s 0s 392775790e-09 1s 1s 392781790e-09 0s 0s 392784350e-09 0s 0s 392786030e-09 1s 1s 392792030e-09 0s 0s 392794630e-09 0s 0s 392796270e-09 1s 1s 392802270e-09 0s 0s 392804910e-09 0s 0s 392806510e-09 1s 1s 392812510e-09 0s 0s 392815190e-09 0s 0s 392816750e-09 1s 1s 392822750e-09 0s 0s 392825470e-09 0s 0s 392826990e-09 1s 1s 392832990e-09 0s 0s 392835750e-09 0s 0s 392837230e-09 1s 1s 392843230e-09 0s 0s 392846030e-09 0s 0s 392847470e-09 1s 1s 392853470e-09 0s 0s 392856310e-09 0s 0s 392857710e-09 1s 1s 392863710e-09 0s 0s 392866590e-09 0s 0s 392867950e-09 1s 1s 392873950e-09 0s 0s 392876870e-09 0s 0s 392878190e-09 1s 1s 392884190e-09 0s 0s 392887150e-09 0s 0s 392888430e-09 1s 1s 392894430e-09 0s 0s 392897430e-09 0s 0s 392898670e-09 1s 1s 392904670e-09 0s 0s 392907710e-09 0s 0s 392908910e-09 1s 1s 392914910e-09 0s 0s 392917990e-09 0s 0s 392919150e-09 1s 1s 392925150e-09 0s 0s 392928270e-09 0s 0s 392929390e-09 1s 1s 392935390e-09 0s 0s 392938550e-09 0s 0s 392939630e-09 1s 1s 392945630e-09 0s 0s 392948830e-09 0s 0s 392949870e-09 1s 1s 392955870e-09 0s 0s 392959110e-09 0s 0s 392960110e-09 1s 1s 392966110e-09 0s 0s 392969390e-09 0s 0s 392970350e-09 1s 1s 392976350e-09 0s 0s 392979670e-09 0s 0s 392980590e-09 1s 1s 392986590e-09 0s 0s 392989950e-09 0s 0s 392990830e-09 1s 1s 392996830e-09 0s 0s 393000230e-09 0s 0s 393001070e-09 1s 1s 393007070e-09 0s 0s 393010510e-09 0s 0s 393011310e-09 1s 1s 393017310e-09 0s 0s 393020790e-09 0s 0s 393021550e-09 1s 1s 393027550e-09 0s 0s 393031070e-09 0s 0s 393031790e-09 1s 1s 393037790e-09 0s 0s 393041350e-09 0s 0s 393042030e-09 1s 1s 393048030e-09 0s 0s 393051630e-09 0s 0s 393052270e-09 1s 1s 393058270e-09 0s 0s 393061910e-09 0s 0s 393062510e-09 1s 1s 393068510e-09 0s 0s 393072190e-09 0s 0s 393072750e-09 1s 1s 393078750e-09 0s 0s 393082470e-09 0s 0s 393082990e-09 1s 1s 393088990e-09 0s 0s 393092750e-09 0s 0s 393093230e-09 1s 1s 393099230e-09 0s 0s 393103030e-09 0s 0s 393103470e-09 1s 1s 393109470e-09 0s 0s 393113310e-09 0s 0s 393113710e-09 1s 1s 393119710e-09 0s 0s 393123590e-09 0s 0s 393123950e-09 1s 1s 393129950e-09 0s 0s 393133870e-09 0s 0s 393134190e-09 1s 1s 393140190e-09 0s 0s 393144150e-09 0s 0s 393144430e-09 1s 1s 393150430e-09 0s 0s 393154430e-09 0s 0s 393154670e-09 1s 1s 393160670e-09 0s 0s 393164710e-09 0s 0s 393164910e-09 1s 1s 393170910e-09 0s 0s 393174990e-09 0s 0s 393175150e-09 1s 1s 393181150e-09 0s 0s 393185270e-09 0s 0s 393185390e-09 1s 1s 393191390e-09 0s 0s 393195550e-09 0s 0s 393195630e-09 1s 1s 393201630e-09 0s 0s 393205830e-09 0s 0s 393205870e-09 1s 1s 393211870e-09 0s 0s 393216110e-09 1s 1s 393216150e-09 1s 1s 393222150e-09 0s 0s 393226350e-09 1s 1s 393226430e-09 1s 1s 393232390e-09 0s 0s 393236590e-09 1s 1s 393236710e-09 1s 1s 393242630e-09 0s 0s 393246830e-09 1s 1s 393246990e-09 1s 1s 393252870e-09 0s 0s 393257070e-09 1s 1s 393257270e-09 1s 1s 393263110e-09 0s 0s 393267310e-09 1s 1s 393267550e-09 1s 1s 393273350e-09 0s 0s 393277550e-09 1s 1s 393277830e-09 1s 1s 393283590e-09 0s 0s 393287790e-09 1s 1s 393288110e-09 1s 1s 393293830e-09 0s 0s 393298030e-09 1s 1s 393298390e-09 1s 1s 393304070e-09 0s 0s 393308270e-09 1s 1s 393308670e-09 1s 1s 393314310e-09 0s 0s 393318510e-09 1s 1s 393318950e-09 1s 1s 393324550e-09 0s 0s 393328750e-09 1s 1s 393329230e-09 1s 1s 393334790e-09 0s 0s 393338990e-09 1s 1s 393339510e-09 1s 1s 393345030e-09 0s 0s 393349230e-09 1s 1s 393349790e-09 1s 1s 393355270e-09 0s 0s 393359470e-09 1s 1s 393360070e-09 1s 1s 393365510e-09 0s 0s 393369710e-09 1s 1s 393370350e-09 1s 1s 393375750e-09 0s 0s 393379950e-09 1s 1s 393380630e-09 1s 1s 393385990e-09 0s 0s 393390190e-09 1s 1s 393390910e-09 1s 1s 393396230e-09 0s 0s 393400430e-09 1s 1s 393401190e-09 1s 1s 393406470e-09 0s 0s 393410670e-09 1s 1s 393411470e-09 1s 1s 393416710e-09 0s 0s 393420910e-09 1s 1s 393421750e-09 1s 1s 393426950e-09 0s 0s 393431150e-09 1s 1s 393432030e-09 1s 1s 393437190e-09 0s 0s 393441390e-09 1s 1s 393442310e-09 1s 1s 393447430e-09 0s 0s 393451630e-09 1s 1s 393452590e-09 1s 1s 393457670e-09 0s 0s 393461870e-09 1s 1s 393462870e-09 1s 1s 393467910e-09 0s 0s 393472110e-09 1s 1s 393473150e-09 1s 1s 393478150e-09 0s 0s 393482350e-09 1s 1s 393483430e-09 1s 1s 393488390e-09 0s 0s 393492590e-09 1s 1s 393493710e-09 1s 1s 393498630e-09 0s 0s 393502830e-09 1s 1s 393503990e-09 1s 1s 393508870e-09 0s 0s 393513070e-09 1s 1s 393514270e-09 1s 1s 393519110e-09 0s 0s 393523310e-09 1s 1s 393524550e-09 1s 1s 393529350e-09 0s 0s 393533550e-09 1s 1s 393534830e-09 1s 1s 393539590e-09 0s 0s 393543790e-09 1s 1s 393545110e-09 1s 1s 393549830e-09 0s 0s 393554030e-09 1s 1s 393555390e-09 1s 1s 393560070e-09 0s 0s 393564270e-09 1s 1s 393565670e-09 1s 1s 393570310e-09 0s 0s 393574510e-09 1s 1s 393575950e-09 1s 1s 393580550e-09 0s 0s 393584750e-09 1s 1s 393586230e-09 1s 1s 393590790e-09 0s 0s 393594990e-09 1s 1s 393596510e-09 1s 1s 393601030e-09 0s 0s 393605230e-09 1s 1s 393606790e-09 1s 1s 393611270e-09 0s 0s 393615470e-09 1s 1s 393617070e-09 1s 1s 393621510e-09 0s 0s 393625710e-09 1s 1s 393627350e-09 1s 1s 393631750e-09 0s 0s 393635950e-09 1s 1s 393637630e-09 1s 1s 393641990e-09 0s 0s 393646190e-09 1s 1s 393647910e-09 1s 1s 393652230e-09 0s 0s 393656430e-09 1s 1s 393658190e-09 1s 1s 393662470e-09 0s 0s 393666670e-09 1s 1s 393668470e-09 1s 1s 393672710e-09 0s 0s 393676910e-09 1s 1s 393678750e-09 1s 1s 393682950e-09 0s 0s 393687150e-09 1s 1s 393689030e-09 1s 1s 393693190e-09 0s 0s 393697390e-09 1s 1s 393699310e-09 1s 1s 393703430e-09 0s 0s 393707630e-09 1s 1s 393709590e-09 1s 1s 393713670e-09 0s 0s 393717870e-09 1s 1s 393719870e-09 1s 1s 393723910e-09 0s 0s 393728110e-09 1s 1s 393730150e-09 1s 1s 393734150e-09 0s 0s 393738350e-09 1s 1s 393740430e-09 1s 1s 393744390e-09 0s 0s 393748590e-09 1s 1s 393750710e-09 1s 1s 393754630e-09 0s 0s 393758830e-09 1s 1s 393760990e-09 1s 1s 393764870e-09 0s 0s 393769070e-09 1s 1s 393771270e-09 1s 1s 393775110e-09 0s 0s 393779310e-09 1s 1s 393781550e-09 1s 1s 393785350e-09 0s 0s 393789550e-09 1s 1s 393791830e-09 1s 1s 393795590e-09 0s 0s 393799790e-09 1s 1s 393802110e-09 1s 1s 393805830e-09 0s 0s 393810030e-09 1s 1s 393812390e-09 1s 1s 393816070e-09 0s 0s 393820270e-09 1s 1s 393822670e-09 1s 1s 393826310e-09 0s 0s 393830510e-09 1s 1s 393832950e-09 1s 1s 393836550e-09 0s 0s 393840750e-09 1s 1s 393843230e-09 1s 1s 393846790e-09 0s 0s 393850990e-09 1s 1s 393853510e-09 1s 1s 393857030e-09 0s 0s 393861230e-09 1s 1s 393863790e-09 1s 1s 393867270e-09 0s 0s 393871470e-09 1s 1s 393874070e-09 1s 1s 393877510e-09 0s 0s 393881710e-09 1s 1s 393884350e-09 1s 1s 393887750e-09 0s 0s 393891950e-09 1s 1s 393894630e-09 1s 1s 393897990e-09 0s 0s 393902190e-09 1s 1s 393904910e-09 1s 1s 393908230e-09 0s 0s 393912430e-09 1s 1s 393915190e-09 1s 1s 393918470e-09 0s 0s 393922670e-09 1s 1s 393925470e-09 1s 1s 393928710e-09 0s 0s 393932910e-09 1s 1s 393935750e-09 1s 1s 393938950e-09 0s 0s 393943150e-09 1s 1s 393946030e-09 1s 1s 393949190e-09 0s 0s 393953390e-09 1s 1s 393956310e-09 1s 1s 393959430e-09 0s 0s 393963630e-09 1s 1s 393966590e-09 1s 1s 393969670e-09 0s 0s 393973870e-09 1s 1s 393976870e-09 1s 1s 393979910e-09 0s 0s 393984110e-09 1s 1s 393987150e-09 1s 1s 393990150e-09 0s 0s 393994350e-09 1s 1s 393997430e-09 1s 1s 394000390e-09 0s 0s 394004590e-09 1s 1s 394007710e-09 1s 1s 394010630e-09 0s 0s 394014830e-09 1s 1s 394017990e-09 1s 1s 394020870e-09 0s 0s 394025070e-09 1s 1s 394028270e-09 1s 1s 394031110e-09 0s 0s 394035310e-09 1s 1s 394038550e-09 1s 1s 394041350e-09 0s 0s 394045550e-09 1s 1s 394048830e-09 1s 1s 394051590e-09 0s 0s 394055790e-09 1s 1s 394059110e-09 1s 1s 394061830e-09 0s 0s 394066030e-09 1s 1s 394069390e-09 1s 1s 394072070e-09 0s 0s 394076270e-09 1s 1s 394079670e-09 1s 1s 394082310e-09 0s 0s 394086510e-09 1s 1s 394089950e-09 1s 1s 394092550e-09 0s 0s 394096750e-09 1s 1s 394100230e-09 1s 1s 394102790e-09 0s 0s 394106990e-09 1s 1s 394110510e-09 1s 1s 394113030e-09 0s 0s 394117230e-09 1s 1s 394120790e-09 1s 1s 394123270e-09 0s 0s 394127470e-09 1s 1s 394131070e-09 1s 1s 394133510e-09 0s 0s 394137710e-09 1s 1s 394141350e-09 1s 1s 394143750e-09 0s 0s 394147950e-09 1s 1s 394151630e-09 1s 1s 394153990e-09 0s 0s 394158190e-09 1s 1s 394161910e-09 1s 1s 394164230e-09 0s 0s 394168430e-09 1s 1s 394172190e-09 1s 1s 394174470e-09 0s 0s 394178670e-09 1s 1s 394182470e-09 1s 1s 394184710e-09 0s 0s 394188910e-09 1s 1s 394192750e-09 1s 1s 394194950e-09 0s 0s 394199150e-09 1s 1s 394203030e-09 1s 1s 394205190e-09 0s 0s 394209390e-09 1s 1s 394213310e-09 1s 1s 394215430e-09 0s 0s 394219630e-09 1s 1s 394223590e-09 1s 1s 394225670e-09 0s 0s 394229870e-09 1s 1s 394233870e-09 1s 1s 394235910e-09 0s 0s 394240110e-09 1s 1s 394244150e-09 1s 1s 394246150e-09 0s 0s 394250350e-09 1s 1s 394254430e-09 1s 1s 394256390e-09 0s 0s 394260590e-09 1s 1s 394264710e-09 1s 1s 394266630e-09 0s 0s 394270830e-09 1s 1s 394274990e-09 1s 1s 394276870e-09 0s 0s 394281070e-09 1s 1s 394285270e-09 1s 1s 394287110e-09 0s 0s 394291310e-09 1s 1s 394295550e-09 1s 1s 394297350e-09 0s 0s 394301550e-09 1s 1s 394305830e-09 1s 1s 394307590e-09 0s 0s 394311790e-09 1s 1s 394316110e-09 1s 1s 394317830e-09 0s 0s 394322030e-09 1s 1s 394326390e-09 1s 1s 394328070e-09 0s 0s 394332270e-09 1s 1s 394336670e-09 1s 1s 394338310e-09 0s 0s 394342510e-09 1s 1s 394346950e-09 1s 1s 394348550e-09 0s 0s 394352750e-09 1s 1s 394357230e-09 1s 1s 394358790e-09 0s 0s 394362990e-09 1s 1s 394367510e-09 1s 1s 394369030e-09 0s 0s 394373230e-09 1s 1s 394377790e-09 1s 1s 394379270e-09 0s 0s 394383470e-09 1s 1s 394388070e-09 1s 1s 394389510e-09 0s 0s 394393710e-09 1s 1s 394398350e-09 1s 1s 394399750e-09 0s 0s 394403950e-09 1s 1s 394408630e-09 1s 1s 394409990e-09 0s 0s 394414190e-09 1s 1s 394418910e-09 1s 1s 394420230e-09 0s 0s 394424430e-09 1s 1s 394429190e-09 1s 1s 394430470e-09 0s 0s 394434670e-09 1s 1s 394439470e-09 1s 1s 394440710e-09 0s 0s 394444910e-09 1s 1s 394449750e-09 1s 1s 394450950e-09 0s 0s 394455150e-09 1s 1s 394460030e-09 1s 1s 394461190e-09 0s 0s 394465390e-09 1s 1s 394470310e-09 1s 1s 394471430e-09 0s 0s 394475630e-09 1s 1s 394480590e-09 1s 1s 394481670e-09 0s 0s 394485870e-09 1s 1s 394490870e-09 1s 1s 394491910e-09 0s 0s 394496110e-09 1s 1s 394501150e-09 1s 1s 394502150e-09 0s 0s 394506350e-09 1s 1s 394511430e-09 1s 1s 394512390e-09 0s 0s 394516590e-09 1s 1s 394521710e-09 1s 1s 394522630e-09 0s 0s 394526830e-09 1s 1s 394531990e-09 1s 1s 394532870e-09 0s 0s 394537070e-09 1s 1s 394542270e-09 1s 1s 394543110e-09 0s 0s 394547310e-09 1s 1s 394552550e-09 1s 1s 394553350e-09 0s 0s 394557550e-09 1s 1s 394562830e-09 1s 1s 394563590e-09 0s 0s 394567790e-09 1s 1s 394573110e-09 1s 1s 394573830e-09 0s 0s 394578030e-09 1s 1s 394583390e-09 1s 1s 394584070e-09 0s 0s 394588270e-09 1s 1s 394593670e-09 1s 1s 394594310e-09 0s 0s 394598510e-09 1s 1s 394603950e-09 1s 1s 394604550e-09 0s 0s 394608750e-09 1s 1s 394614230e-09 1s 1s 394614790e-09 0s 0s 394618990e-09 1s 1s 394624510e-09 1s 1s 394625030e-09 0s 0s 394629230e-09 1s 1s 394634790e-09 1s 1s 394635270e-09 0s 0s 394639470e-09 1s 1s 394645070e-09 1s 1s 394645510e-09 0s 0s 394649710e-09 1s 1s 394655350e-09 1s 1s 394655750e-09 0s 0s 394659950e-09 1s 1s 394665630e-09 1s 1s 394665990e-09 0s 0s 394670190e-09 1s 1s 394675910e-09 1s 1s 394676230e-09 0s 0s 394680430e-09 1s 1s 394686190e-09 1s 1s 394686470e-09 0s 0s 394690670e-09 1s 1s 394696470e-09 1s 1s 394696710e-09 0s 0s 394700910e-09 1s 1s 394706750e-09 1s 1s 394706950e-09 0s 0s 394711150e-09 1s 1s 394717030e-09 1s 1s 394717190e-09 0s 0s 394721390e-09 1s 1s 394727310e-09 1s 1s 394727430e-09 0s 0s 394731630e-09 1s 1s 394737590e-09 1s 1s 394737670e-09 0s 0s 394741870e-09 1s 1s 394747870e-09 1s 1s 394747910e-09 0s 0s 394752110e-09 1s 1s 394758150e-09 0s 0s 394762350e-09 1s 1s 394768390e-09 0s 0s 394768430e-09 0s 0s 394772590e-09 1s 1s 394778630e-09 0s 0s 394778710e-09 0s 0s 394782830e-09 1s 1s 394788870e-09 0s 0s 394788990e-09 0s 0s 394793070e-09 1s 1s 394799110e-09 0s 0s 394799270e-09 0s 0s 394803310e-09 1s 1s 394809350e-09 0s 0s 394809550e-09 0s 0s 394813550e-09 1s 1s 394819590e-09 0s 0s 394819830e-09 0s 0s 394823790e-09 1s 1s 394829830e-09 0s 0s 394830110e-09 0s 0s 394834030e-09 1s 1s 394840070e-09 0s 0s 394840390e-09 0s 0s 394844270e-09 1s 1s 394850310e-09 0s 0s 394850670e-09 0s 0s 394854510e-09 1s 1s 394860550e-09 0s 0s 394860950e-09 0s 0s 394864750e-09 1s 1s 394870790e-09 0s 0s 394871230e-09 0s 0s 394874990e-09 1s 1s 394881030e-09 0s 0s 394881510e-09 0s 0s 394885230e-09 1s 1s 394891270e-09 0s 0s 394891790e-09 0s 0s 394895470e-09 1s 1s 394901510e-09 0s 0s 394902070e-09 0s 0s 394905710e-09 1s 1s 394911750e-09 0s 0s 394912350e-09 0s 0s 394915950e-09 1s 1s 394921990e-09 0s 0s 394922630e-09 0s 0s 394926190e-09 1s 1s 394932230e-09 0s 0s 394932910e-09 0s 0s 394936430e-09 1s 1s 394942470e-09 0s 0s 394943190e-09 0s 0s 394946670e-09 1s 1s 394952710e-09 0s 0s 394953470e-09 0s 0s 394956910e-09 1s 1s 394962950e-09 0s 0s 394963750e-09 0s 0s 394967150e-09 1s 1s 394973190e-09 0s 0s 394974030e-09 0s 0s 394977390e-09 1s 1s 394983430e-09 0s 0s 394984310e-09 0s 0s 394987630e-09 1s 1s 394993670e-09 0s 0s 394994590e-09 0s 0s 394997870e-09 1s 1s 395003910e-09 0s 0s 395004870e-09 0s 0s 395008110e-09 1s 1s 395014150e-09 0s 0s 395015150e-09 0s 0s 395018350e-09 1s 1s 395024390e-09 0s 0s 395025430e-09 0s 0s 395028590e-09 1s 1s 395034630e-09 0s 0s 395035710e-09 0s 0s 395038830e-09 1s 1s 395044870e-09 0s 0s 395045990e-09 0s 0s 395049070e-09 1s 1s 395055110e-09 0s 0s 395056270e-09 0s 0s 395059310e-09 1s 1s 395065350e-09 0s 0s 395066550e-09 0s 0s 395069550e-09 1s 1s 395075590e-09 0s 0s 395076830e-09 0s 0s 395079790e-09 1s 1s 395085830e-09 0s 0s 395087110e-09 0s 0s 395090030e-09 1s 1s 395096070e-09 0s 0s 395097390e-09 0s 0s 395100270e-09 1s 1s 395106310e-09 0s 0s 395107670e-09 0s 0s 395110510e-09 1s 1s 395116550e-09 0s 0s 395117950e-09 0s 0s 395120750e-09 1s 1s 395126790e-09 0s 0s 395128230e-09 0s 0s 395130990e-09 1s 1s 395137030e-09 0s 0s 395138510e-09 0s 0s 395141230e-09 1s 1s 395147270e-09 0s 0s 395148790e-09 0s 0s 395151470e-09 1s 1s 395157510e-09 0s 0s 395159070e-09 0s 0s 395161710e-09 1s 1s 395167750e-09 0s 0s 395169350e-09 0s 0s 395171950e-09 1s 1s 395177990e-09 0s 0s 395179630e-09 0s 0s 395182190e-09 1s 1s 395188230e-09 0s 0s 395189910e-09 0s 0s 395192430e-09 1s 1s 395198470e-09 0s 0s 395200190e-09 0s 0s 395202670e-09 1s 1s 395208710e-09 0s 0s 395210470e-09 0s 0s 395212910e-09 1s 1s 395218950e-09 0s 0s 395220750e-09 0s 0s 395223150e-09 1s 1s 395229190e-09 0s 0s 395231030e-09 0s 0s 395233390e-09 1s 1s 395239430e-09 0s 0s 395241310e-09 0s 0s 395243630e-09 1s 1s 395249670e-09 0s 0s 395251590e-09 0s 0s 395253870e-09 1s 1s 395259910e-09 0s 0s 395261870e-09 0s 0s 395264110e-09 1s 1s 395270150e-09 0s 0s 395272150e-09 0s 0s 395274350e-09 1s 1s 395280390e-09 0s 0s 395282430e-09 0s 0s 395284590e-09 1s 1s 395290630e-09 0s 0s 395292710e-09 0s 0s 395294830e-09 1s 1s 395300870e-09 0s 0s 395302990e-09 0s 0s 395305070e-09 1s 1s 395311110e-09 0s 0s 395313270e-09 0s 0s 395315310e-09 1s 1s 395321350e-09 0s 0s 395323550e-09 0s 0s 395325550e-09 1s 1s 395331590e-09 0s 0s 395333830e-09 0s 0s 395335790e-09 1s 1s 395341830e-09 0s 0s 395344110e-09 0s 0s 395346030e-09 1s 1s 395352070e-09 0s 0s 395354390e-09 0s 0s 395356270e-09 1s 1s 395362310e-09 0s 0s 395364670e-09 0s 0s 395366510e-09 1s 1s 395372550e-09 0s 0s 395374950e-09 0s 0s 395376750e-09 1s 1s 395382790e-09 0s 0s 395385230e-09 0s 0s 395386990e-09 1s 1s 395393030e-09 0s 0s 395395510e-09 0s 0s 395397230e-09 1s 1s 395403270e-09 0s 0s 395405790e-09 0s 0s 395407470e-09 1s 1s 395413510e-09 0s 0s 395416070e-09 0s 0s 395417710e-09 1s 1s 395423750e-09 0s 0s 395426350e-09 0s 0s 395427950e-09 1s 1s 395433990e-09 0s 0s 395436630e-09 0s 0s 395438190e-09 1s 1s 395444230e-09 0s 0s 395446910e-09 0s 0s 395448430e-09 1s 1s 395454470e-09 0s 0s 395457190e-09 0s 0s 395458670e-09 1s 1s 395464710e-09 0s 0s 395467470e-09 0s 0s 395468910e-09 1s 1s 395474950e-09 0s 0s 395477750e-09 0s 0s 395479150e-09 1s 1s 395485190e-09 0s 0s 395488030e-09 0s 0s 395489390e-09 1s 1s 395495430e-09 0s 0s 395498310e-09 0s 0s 395499630e-09 1s 1s 395505670e-09 0s 0s 395508590e-09 0s 0s 395509870e-09 1s 1s 395515910e-09 0s 0s 395518870e-09 0s 0s 395520110e-09 1s 1s 395526150e-09 0s 0s 395529150e-09 0s 0s 395530350e-09 1s 1s 395536390e-09 0s 0s 395539430e-09 0s 0s 395540590e-09 1s 1s 395546630e-09 0s 0s 395549710e-09 0s 0s 395550830e-09 1s 1s 395556870e-09 0s 0s 395559990e-09 0s 0s 395561070e-09 1s 1s 395567110e-09 0s 0s 395570270e-09 0s 0s 395571310e-09 1s 1s 395577350e-09 0s 0s 395580550e-09 0s 0s 395581550e-09 1s 1s 395587590e-09 0s 0s 395590830e-09 0s 0s 395591790e-09 1s 1s 395597830e-09 0s 0s 395601110e-09 0s 0s 395602030e-09 1s 1s 395608070e-09 0s 0s 395611390e-09 0s 0s 395612270e-09 1s 1s 395618310e-09 0s 0s 395621670e-09 0s 0s 395622510e-09 1s 1s 395628550e-09 0s 0s 395631950e-09 0s 0s 395632750e-09 1s 1s 395638790e-09 0s 0s 395642230e-09 0s 0s 395642990e-09 1s 1s 395649030e-09 0s 0s 395652510e-09 0s 0s 395653230e-09 1s 1s 395659270e-09 0s 0s 395662790e-09 0s 0s 395663470e-09 1s 1s 395669510e-09 0s 0s 395673070e-09 0s 0s 395673710e-09 1s 1s 395679750e-09 0s 0s 395683350e-09 0s 0s 395683950e-09 1s 1s 395689990e-09 0s 0s 395693630e-09 0s 0s 395694190e-09 1s 1s 395700230e-09 0s 0s 395703910e-09 0s 0s 395704430e-09 1s 1s 395710470e-09 0s 0s 395714190e-09 0s 0s 395714670e-09 1s 1s 395720710e-09 0s 0s 395724470e-09 0s 0s 395724910e-09 1s 1s 395730950e-09 0s 0s 395734750e-09 0s 0s 395735150e-09 1s 1s 395741190e-09 0s 0s 395745030e-09 0s 0s 395745390e-09 1s 1s 395751430e-09 0s 0s 395755310e-09 0s 0s 395755630e-09 1s 1s 395761670e-09 0s 0s 395765590e-09 0s 0s 395765870e-09 1s 1s 395771910e-09 0s 0s 395775870e-09 0s 0s 395776110e-09 1s 1s 395782150e-09 0s 0s 395786150e-09 0s 0s 395786350e-09 1s 1s 395792390e-09 0s 0s 395796430e-09 0s 0s 395796590e-09 1s 1s 395802630e-09 0s 0s 395806710e-09 0s 0s 395806830e-09 1s 1s 395812870e-09 0s 0s 395816990e-09 0s 0s 395817070e-09 1s 1s 395823110e-09 0s 0s 395827270e-09 0s 0s 395827310e-09 1s 1s 395833350e-09 0s 0s 395837550e-09 1s 1s 395837590e-09 1s 1s 395843630e-09 0s 0s 395847790e-09 1s 1s 395847870e-09 1s 1s 395853870e-09 0s 0s 395858030e-09 1s 1s 395858150e-09 1s 1s 395864110e-09 0s 0s 395868270e-09 1s 1s 395868430e-09 1s 1s 395874350e-09 0s 0s 395878510e-09 1s 1s 395878710e-09 1s 1s 395884590e-09 0s 0s 395888750e-09 1s 1s 395888990e-09 1s 1s 395894830e-09 0s 0s 395898990e-09 1s 1s 395899270e-09 1s 1s 395905070e-09 0s 0s 395909230e-09 1s 1s 395909550e-09 1s 1s 395915310e-09 0s 0s 395919470e-09 1s 1s 395919830e-09 1s 1s 395925550e-09 0s 0s 395929710e-09 1s 1s 395930110e-09 1s 1s 395935790e-09 0s 0s 395939950e-09 1s 1s 395940390e-09 1s 1s 395946030e-09 0s 0s 395950190e-09 1s 1s 395950670e-09 1s 1s 395956270e-09 0s 0s 395960430e-09 1s 1s 395960950e-09 1s 1s 395966510e-09 0s 0s 395970670e-09 1s 1s 395971230e-09 1s 1s 395976750e-09 0s 0s 395980910e-09 1s 1s 395981510e-09 1s 1s 395986990e-09 0s 0s 395991150e-09 1s 1s 395991790e-09 1s 1s 395997230e-09 0s 0s 396001390e-09 1s 1s 396002070e-09 1s 1s 396007470e-09 0s 0s 396011630e-09 1s 1s 396012350e-09 1s 1s 396017710e-09 0s 0s 396021870e-09 1s 1s 396022630e-09 1s 1s 396027950e-09 0s 0s 396032110e-09 1s 1s 396032910e-09 1s 1s 396038190e-09 0s 0s 396042350e-09 1s 1s 396043190e-09 1s 1s 396048430e-09 0s 0s 396052590e-09 1s 1s 396053470e-09 1s 1s 396058670e-09 0s 0s 396062830e-09 1s 1s 396063750e-09 1s 1s 396068910e-09 0s 0s 396073070e-09 1s 1s 396074030e-09 1s 1s 396079150e-09 0s 0s 396083310e-09 1s 1s 396084310e-09 1s 1s 396089390e-09 0s 0s 396093550e-09 1s 1s 396094590e-09 1s 1s 396099630e-09 0s 0s 396103790e-09 1s 1s 396104870e-09 1s 1s 396109870e-09 0s 0s 396114030e-09 1s 1s 396115150e-09 1s 1s 396120110e-09 0s 0s 396124270e-09 1s 1s 396125430e-09 1s 1s 396130350e-09 0s 0s 396134510e-09 1s 1s 396135710e-09 1s 1s 396140590e-09 0s 0s 396144750e-09 1s 1s 396145990e-09 1s 1s 396150830e-09 0s 0s 396154990e-09 1s 1s 396156270e-09 1s 1s 396161070e-09 0s 0s 396165230e-09 1s 1s 396166550e-09 1s 1s 396171310e-09 0s 0s 396175470e-09 1s 1s 396176830e-09 1s 1s 396181550e-09 0s 0s 396185710e-09 1s 1s 396187110e-09 1s 1s 396191790e-09 0s 0s 396195950e-09 1s 1s 396197390e-09 1s 1s 396202030e-09 0s 0s 396206190e-09 1s 1s 396207670e-09 1s 1s 396212270e-09 0s 0s 396216430e-09 1s 1s 396217950e-09 1s 1s 396222510e-09 0s 0s 396226670e-09 1s 1s 396228230e-09 1s 1s 396232750e-09 0s 0s 396236910e-09 1s 1s 396238510e-09 1s 1s 396242990e-09 0s 0s 396247150e-09 1s 1s 396248790e-09 1s 1s 396253230e-09 0s 0s 396257390e-09 1s 1s 396259070e-09 1s 1s 396263470e-09 0s 0s 396267630e-09 1s 1s 396269350e-09 1s 1s 396273710e-09 0s 0s 396277870e-09 1s 1s 396279630e-09 1s 1s 396283950e-09 0s 0s 396288110e-09 1s 1s 396289910e-09 1s 1s 396294190e-09 0s 0s 396298350e-09 1s 1s 396300190e-09 1s 1s 396304430e-09 0s 0s 396308590e-09 1s 1s 396310470e-09 1s 1s 396314670e-09 0s 0s 396318830e-09 1s 1s 396320750e-09 1s 1s 396324910e-09 0s 0s 396329070e-09 1s 1s 396331030e-09 1s 1s 396335150e-09 0s 0s 396339310e-09 1s 1s 396341310e-09 1s 1s 396345390e-09 0s 0s 396349550e-09 1s 1s 396351590e-09 1s 1s 396355630e-09 0s 0s 396359790e-09 1s 1s 396361870e-09 1s 1s 396365870e-09 0s 0s 396370030e-09 1s 1s 396372150e-09 1s 1s 396376110e-09 0s 0s 396380270e-09 1s 1s 396382430e-09 1s 1s 396386350e-09 0s 0s 396390510e-09 1s 1s 396392710e-09 1s 1s 396396590e-09 0s 0s 396400750e-09 1s 1s 396402990e-09 1s 1s 396406830e-09 0s 0s 396410990e-09 1s 1s 396413270e-09 1s 1s 396417070e-09 0s 0s 396421230e-09 1s 1s 396423550e-09 1s 1s 396427310e-09 0s 0s 396431470e-09 1s 1s 396433830e-09 1s 1s 396437550e-09 0s 0s 396441710e-09 1s 1s 396444110e-09 1s 1s 396447790e-09 0s 0s 396451950e-09 1s 1s 396454390e-09 1s 1s 396458030e-09 0s 0s 396462190e-09 1s 1s 396464670e-09 1s 1s 396468270e-09 0s 0s 396472430e-09 1s 1s 396474950e-09 1s 1s 396478510e-09 0s 0s 396482670e-09 1s 1s 396485230e-09 1s 1s 396488750e-09 0s 0s 396492910e-09 1s 1s 396495510e-09 1s 1s 396498990e-09 0s 0s 396503150e-09 1s 1s 396505790e-09 1s 1s 396509230e-09 0s 0s 396513390e-09 1s 1s 396516070e-09 1s 1s 396519470e-09 0s 0s 396523630e-09 1s 1s 396526350e-09 1s 1s 396529710e-09 0s 0s 396533870e-09 1s 1s 396536630e-09 1s 1s 396539950e-09 0s 0s 396544110e-09 1s 1s 396546910e-09 1s 1s 396550190e-09 0s 0s 396554350e-09 1s 1s 396557190e-09 1s 1s 396560430e-09 0s 0s 396564590e-09 1s 1s 396567470e-09 1s 1s 396570670e-09 0s 0s 396574830e-09 1s 1s 396577750e-09 1s 1s 396580910e-09 0s 0s 396585070e-09 1s 1s 396588030e-09 1s 1s 396591150e-09 0s 0s 396595310e-09 1s 1s 396598310e-09 1s 1s 396601390e-09 0s 0s 396605550e-09 1s 1s 396608590e-09 1s 1s 396611630e-09 0s 0s 396615790e-09 1s 1s 396618870e-09 1s 1s 396621870e-09 0s 0s 396626030e-09 1s 1s 396629150e-09 1s 1s 396632110e-09 0s 0s 396636270e-09 1s 1s 396639430e-09 1s 1s 396642350e-09 0s 0s 396646510e-09 1s 1s 396649710e-09 1s 1s 396652590e-09 0s 0s 396656750e-09 1s 1s 396659990e-09 1s 1s 396662830e-09 0s 0s 396666990e-09 1s 1s 396670270e-09 1s 1s 396673070e-09 0s 0s 396677230e-09 1s 1s 396680550e-09 1s 1s 396683310e-09 0s 0s 396687470e-09 1s 1s 396690830e-09 1s 1s 396693550e-09 0s 0s 396697710e-09 1s 1s 396701110e-09 1s 1s 396703790e-09 0s 0s 396707950e-09 1s 1s 396711390e-09 1s 1s 396714030e-09 0s 0s 396718190e-09 1s 1s 396721670e-09 1s 1s 396724270e-09 0s 0s 396728430e-09 1s 1s 396731950e-09 1s 1s 396734510e-09 0s 0s 396738670e-09 1s 1s 396742230e-09 1s 1s 396744750e-09 0s 0s 396748910e-09 1s 1s 396752510e-09 1s 1s 396754990e-09 0s 0s 396759150e-09 1s 1s 396762790e-09 1s 1s 396765230e-09 0s 0s 396769390e-09 1s 1s 396773070e-09 1s 1s 396775470e-09 0s 0s 396779630e-09 1s 1s 396783350e-09 1s 1s 396785710e-09 0s 0s 396789870e-09 1s 1s 396793630e-09 1s 1s 396795950e-09 0s 0s 396800110e-09 1s 1s 396803910e-09 1s 1s 396806190e-09 0s 0s 396810350e-09 1s 1s 396814190e-09 1s 1s 396816430e-09 0s 0s 396820590e-09 1s 1s 396824470e-09 1s 1s 396826670e-09 0s 0s 396830830e-09 1s 1s 396834750e-09 1s 1s 396836910e-09 0s 0s 396841070e-09 1s 1s 396845030e-09 1s 1s 396847150e-09 0s 0s 396851310e-09 1s 1s 396855310e-09 1s 1s 396857390e-09 0s 0s 396861550e-09 1s 1s 396865590e-09 1s 1s 396867630e-09 0s 0s 396871790e-09 1s 1s 396875870e-09 1s 1s 396877870e-09 0s 0s 396882030e-09 1s 1s 396886150e-09 1s 1s 396888110e-09 0s 0s 396892270e-09 1s 1s 396896430e-09 1s 1s 396898350e-09 0s 0s 396902510e-09 1s 1s 396906710e-09 1s 1s 396908590e-09 0s 0s 396912750e-09 1s 1s 396916990e-09 1s 1s 396918830e-09 0s 0s 396922990e-09 1s 1s 396927270e-09 1s 1s 396929070e-09 0s 0s 396933230e-09 1s 1s 396937550e-09 1s 1s 396939310e-09 0s 0s 396943470e-09 1s 1s 396947830e-09 1s 1s 396949550e-09 0s 0s 396953710e-09 1s 1s 396958110e-09 1s 1s 396959790e-09 0s 0s 396963950e-09 1s 1s 396968390e-09 1s 1s 396970030e-09 0s 0s 396974190e-09 1s 1s 396978670e-09 1s 1s 396980270e-09 0s 0s 396984430e-09 1s 1s 396988950e-09 1s 1s 396990510e-09 0s 0s 396994670e-09 1s 1s 396999230e-09 1s 1s 397000750e-09 0s 0s 397004910e-09 1s 1s 397009510e-09 1s 1s 397010990e-09 0s 0s 397015150e-09 1s 1s 397019790e-09 1s 1s 397021230e-09 0s 0s 397025390e-09 1s 1s 397030070e-09 1s 1s 397031470e-09 0s 0s 397035630e-09 1s 1s 397040350e-09 1s 1s 397041710e-09 0s 0s 397045870e-09 1s 1s 397050630e-09 1s 1s 397051950e-09 0s 0s 397056110e-09 1s 1s 397060910e-09 1s 1s 397062190e-09 0s 0s 397066350e-09 1s 1s 397071190e-09 1s 1s 397072430e-09 0s 0s 397076590e-09 1s 1s 397081470e-09 1s 1s 397082670e-09 0s 0s 397086830e-09 1s 1s 397091750e-09 1s 1s 397092910e-09 0s 0s 397097070e-09 1s 1s 397102030e-09 1s 1s 397103150e-09 0s 0s 397107310e-09 1s 1s 397112310e-09 1s 1s 397113390e-09 0s 0s 397117550e-09 1s 1s 397122590e-09 1s 1s 397123630e-09 0s 0s 397127790e-09 1s 1s 397132870e-09 1s 1s 397133870e-09 0s 0s 397138030e-09 1s 1s 397143150e-09 1s 1s 397144110e-09 0s 0s 397148270e-09 1s 1s 397153430e-09 1s 1s 397154350e-09 0s 0s 397158510e-09 1s 1s 397163710e-09 1s 1s 397164590e-09 0s 0s 397168750e-09 1s 1s 397173990e-09 1s 1s 397174830e-09 0s 0s 397178990e-09 1s 1s 397184270e-09 1s 1s 397185070e-09 0s 0s 397189230e-09 1s 1s 397194550e-09 1s 1s 397195310e-09 0s 0s 397199470e-09 1s 1s 397204830e-09 1s 1s 397205550e-09 0s 0s 397209710e-09 1s 1s 397215110e-09 1s 1s 397215790e-09 0s 0s 397219950e-09 1s 1s 397225390e-09 1s 1s 397226030e-09 0s 0s 397230190e-09 1s 1s 397235670e-09 1s 1s 397236270e-09 0s 0s 397240430e-09 1s 1s 397245950e-09 1s 1s 397246510e-09 0s 0s 397250670e-09 1s 1s 397256230e-09 1s 1s 397256750e-09 0s 0s 397260910e-09 1s 1s 397266510e-09 1s 1s 397266990e-09 0s 0s 397271150e-09 1s 1s 397276790e-09 1s 1s 397277230e-09 0s 0s 397281390e-09 1s 1s 397287070e-09 1s 1s 397287470e-09 0s 0s 397291630e-09 1s 1s 397297350e-09 1s 1s 397297710e-09 0s 0s 397301870e-09 1s 1s 397307630e-09 1s 1s 397307950e-09 0s 0s 397312110e-09 1s 1s 397317910e-09 1s 1s 397318190e-09 0s 0s 397322350e-09 1s 1s 397328190e-09 1s 1s 397328430e-09 0s 0s 397332590e-09 1s 1s 397338470e-09 1s 1s 397338670e-09 0s 0s 397342830e-09 1s 1s 397348750e-09 1s 1s 397348910e-09 0s 0s 397353070e-09 1s 1s 397359030e-09 1s 1s 397359150e-09 0s 0s 397363310e-09 1s 1s 397369310e-09 1s 1s 397369390e-09 0s 0s 397373550e-09 1s 1s 397379590e-09 1s 1s 397379630e-09 0s 0s 397383790e-09 1s 1s 397389870e-09 0s 0s 397394030e-09 1s 1s 397400110e-09 0s 0s 397400150e-09 0s 0s 397404270e-09 1s 1s 397410350e-09 0s 0s 397410430e-09 0s 0s 397414510e-09 1s 1s 397420590e-09 0s 0s 397420710e-09 0s 0s 397424750e-09 1s 1s 397430830e-09 0s 0s 397430990e-09 0s 0s 397434990e-09 1s 1s 397441070e-09 0s 0s 397441270e-09 0s 0s 397445230e-09 1s 1s 397451310e-09 0s 0s 397451550e-09 0s 0s 397455470e-09 1s 1s 397461550e-09 0s 0s 397461830e-09 0s 0s 397465710e-09 1s 1s 397471790e-09 0s 0s 397472110e-09 0s 0s 397475950e-09 1s 1s 397482030e-09 0s 0s 397482390e-09 0s 0s 397486190e-09 1s 1s 397492270e-09 0s 0s 397492670e-09 0s 0s 397496430e-09 1s 1s 397502510e-09 0s 0s 397502950e-09 0s 0s 397506670e-09 1s 1s 397512750e-09 0s 0s 397513230e-09 0s 0s 397516910e-09 1s 1s 397522990e-09 0s 0s 397523510e-09 0s 0s 397527150e-09 1s 1s 397533230e-09 0s 0s 397533790e-09 0s 0s 397537390e-09 1s 1s 397543470e-09 0s 0s 397544070e-09 0s 0s 397547630e-09 1s 1s 397553710e-09 0s 0s 397554350e-09 0s 0s 397557870e-09 1s 1s 397563950e-09 0s 0s 397564630e-09 0s 0s 397568110e-09 1s 1s 397574190e-09 0s 0s 397574910e-09 0s 0s 397578350e-09 1s 1s 397584430e-09 0s 0s 397585190e-09 0s 0s 397588590e-09 1s 1s 397594670e-09 0s 0s 397595470e-09 0s 0s 397598830e-09 1s 1s 397604910e-09 0s 0s 397605750e-09 0s 0s 397609070e-09 1s 1s 397615150e-09 0s 0s 397616030e-09 0s 0s 397619310e-09 1s 1s 397625390e-09 0s 0s 397626310e-09 0s 0s 397629550e-09 1s 1s 397635630e-09 0s 0s 397636590e-09 0s 0s 397639790e-09 1s 1s 397645870e-09 0s 0s 397646870e-09 0s 0s 397650030e-09 1s 1s 397656110e-09 0s 0s 397657150e-09 0s 0s 397660270e-09 1s 1s 397666350e-09 0s 0s 397667430e-09 0s 0s 397670510e-09 1s 1s 397676590e-09 0s 0s 397677710e-09 0s 0s 397680750e-09 1s 1s 397686830e-09 0s 0s 397687990e-09 0s 0s 397690990e-09 1s 1s 397697070e-09 0s 0s 397698270e-09 0s 0s 397701230e-09 1s 1s 397707310e-09 0s 0s 397708550e-09 0s 0s 397711470e-09 1s 1s 397717550e-09 0s 0s 397718830e-09 0s 0s 397721710e-09 1s 1s 397727790e-09 0s 0s 397729110e-09 0s 0s 397731950e-09 1s 1s 397738030e-09 0s 0s 397739390e-09 0s 0s 397742190e-09 1s 1s 397748270e-09 0s 0s 397749670e-09 0s 0s 397752430e-09 1s 1s 397758510e-09 0s 0s 397759950e-09 0s 0s 397762670e-09 1s 1s 397768750e-09 0s 0s 397770230e-09 0s 0s 397772910e-09 1s 1s 397778990e-09 0s 0s 397780510e-09 0s 0s 397783150e-09 1s 1s 397789230e-09 0s 0s 397790790e-09 0s 0s 397793390e-09 1s 1s 397799470e-09 0s 0s 397801070e-09 0s 0s 397803630e-09 1s 1s 397809710e-09 0s 0s 397811350e-09 0s 0s 397813870e-09 1s 1s 397819950e-09 0s 0s 397821630e-09 0s 0s 397824110e-09 1s 1s 397830190e-09 0s 0s 397831910e-09 0s 0s 397834350e-09 1s 1s 397840430e-09 0s 0s 397842190e-09 0s 0s 397844590e-09 1s 1s 397850670e-09 0s 0s 397852470e-09 0s 0s 397854830e-09 1s 1s 397860910e-09 0s 0s 397862750e-09 0s 0s 397865070e-09 1s 1s 397871150e-09 0s 0s 397873030e-09 0s 0s 397875310e-09 1s 1s 397881390e-09 0s 0s 397883310e-09 0s 0s 397885550e-09 1s 1s 397891630e-09 0s 0s 397893590e-09 0s 0s 397895790e-09 1s 1s 397901870e-09 0s 0s 397903870e-09 0s 0s 397906030e-09 1s 1s 397912110e-09 0s 0s 397914150e-09 0s 0s 397916270e-09 1s 1s 397922350e-09 0s 0s 397924430e-09 0s 0s 397926510e-09 1s 1s 397932590e-09 0s 0s 397934710e-09 0s 0s 397936750e-09 1s 1s 397942830e-09 0s 0s 397944990e-09 0s 0s 397946990e-09 1s 1s 397953070e-09 0s 0s 397955270e-09 0s 0s 397957230e-09 1s 1s 397963310e-09 0s 0s 397965550e-09 0s 0s 397967470e-09 1s 1s 397973550e-09 0s 0s 397975830e-09 0s 0s 397977710e-09 1s 1s 397983790e-09 0s 0s 397986110e-09 0s 0s 397987950e-09 1s 1s 397994030e-09 0s 0s 397996390e-09 0s 0s 397998190e-09 1s 1s 398004270e-09 0s 0s 398006670e-09 0s 0s 398008430e-09 1s 1s 398014510e-09 0s 0s 398016950e-09 0s 0s 398018670e-09 1s 1s 398024750e-09 0s 0s 398027230e-09 0s 0s 398028910e-09 1s 1s 398034990e-09 0s 0s 398037510e-09 0s 0s 398039150e-09 1s 1s 398045230e-09 0s 0s 398047790e-09 0s 0s 398049390e-09 1s 1s 398055470e-09 0s 0s 398058070e-09 0s 0s 398059630e-09 1s 1s 398065710e-09 0s 0s 398068350e-09 0s 0s 398069870e-09 1s 1s 398075950e-09 0s 0s 398078630e-09 0s 0s 398080110e-09 1s 1s 398086190e-09 0s 0s 398088910e-09 0s 0s 398090350e-09 1s 1s 398096430e-09 0s 0s 398099190e-09 0s 0s 398100590e-09 1s 1s 398106670e-09 0s 0s 398109470e-09 0s 0s 398110830e-09 1s 1s 398116910e-09 0s 0s 398119750e-09 0s 0s 398121070e-09 1s 1s 398127150e-09 0s 0s 398130030e-09 0s 0s 398131310e-09 1s 1s 398137390e-09 0s 0s 398140310e-09 0s 0s 398141550e-09 1s 1s 398147630e-09 0s 0s 398150590e-09 0s 0s 398151790e-09 1s 1s 398157870e-09 0s 0s 398160870e-09 0s 0s 398162030e-09 1s 1s 398168110e-09 0s 0s 398171150e-09 0s 0s 398172270e-09 1s 1s 398178350e-09 0s 0s 398181430e-09 0s 0s 398182510e-09 1s 1s 398188590e-09 0s 0s 398191710e-09 0s 0s 398192750e-09 1s 1s 398198830e-09 0s 0s 398201990e-09 0s 0s 398202990e-09 1s 1s 398209070e-09 0s 0s 398212270e-09 0s 0s 398213230e-09 1s 1s 398219310e-09 0s 0s 398222550e-09 0s 0s 398223470e-09 1s 1s 398229550e-09 0s 0s 398232830e-09 0s 0s 398233710e-09 1s 1s 398239790e-09 0s 0s 398243110e-09 0s 0s 398243950e-09 1s 1s 398250030e-09 0s 0s 398253390e-09 0s 0s 398254190e-09 1s 1s 398260270e-09 0s 0s 398263670e-09 0s 0s 398264430e-09 1s 1s 398270510e-09 0s 0s 398273950e-09 0s 0s 398274670e-09 1s 1s 398280750e-09 0s 0s 398284230e-09 0s 0s 398284910e-09 1s 1s 398290990e-09 0s 0s 398294510e-09 0s 0s 398295150e-09 1s 1s 398301230e-09 0s 0s 398304790e-09 0s 0s 398305390e-09 1s 1s 398311470e-09 0s 0s 398315070e-09 0s 0s 398315630e-09 1s 1s 398321710e-09 0s 0s 398325350e-09 0s 0s 398325870e-09 1s 1s 398331950e-09 0s 0s 398335630e-09 0s 0s 398336110e-09 1s 1s 398342190e-09 0s 0s 398345910e-09 0s 0s 398346350e-09 1s 1s 398352430e-09 0s 0s 398356190e-09 0s 0s 398356590e-09 1s 1s 398362670e-09 0s 0s 398366470e-09 0s 0s 398366830e-09 1s 1s 398372910e-09 0s 0s 398376750e-09 0s 0s 398377070e-09 1s 1s 398383150e-09 0s 0s 398387030e-09 0s 0s 398387310e-09 1s 1s 398393390e-09 0s 0s 398397310e-09 0s 0s 398397550e-09 1s 1s 398403630e-09 0s 0s 398407590e-09 0s 0s 398407790e-09 1s 1s 398413870e-09 0s 0s 398417870e-09 0s 0s 398418030e-09 1s 1s 398424110e-09 0s 0s 398428150e-09 0s 0s 398428270e-09 1s 1s 398434350e-09 0s 0s 398438430e-09 0s 0s 398438510e-09 1s 1s 398444590e-09 0s 0s 398448710e-09 0s 0s 398448750e-09 1s 1s 398454830e-09 0s 0s 398458990e-09 1s 1s 398459030e-09 1s 1s 398465110e-09 0s 0s 398469230e-09 1s 1s 398469310e-09 1s 1s 398475350e-09 0s 0s 398479470e-09 1s 1s 398479590e-09 1s 1s 398485590e-09 0s 0s 398489710e-09 1s 1s 398489870e-09 1s 1s 398495830e-09 0s 0s 398499950e-09 1s 1s 398500150e-09 1s 1s 398506070e-09 0s 0s 398510190e-09 1s 1s 398510430e-09 1s 1s 398516310e-09 0s 0s 398520430e-09 1s 1s 398520710e-09 1s 1s 398526550e-09 0s 0s 398530670e-09 1s 1s 398530990e-09 1s 1s 398536790e-09 0s 0s 398540910e-09 1s 1s 398541270e-09 1s 1s 398547030e-09 0s 0s 398551150e-09 1s 1s 398551550e-09 1s 1s 398557270e-09 0s 0s 398561390e-09 1s 1s 398561830e-09 1s 1s 398567510e-09 0s 0s 398571630e-09 1s 1s 398572110e-09 1s 1s 398577750e-09 0s 0s 398581870e-09 1s 1s 398582390e-09 1s 1s 398587990e-09 0s 0s 398592110e-09 1s 1s 398592670e-09 1s 1s 398598230e-09 0s 0s 398602350e-09 1s 1s 398602950e-09 1s 1s 398608470e-09 0s 0s 398612590e-09 1s 1s 398613230e-09 1s 1s 398618710e-09 0s 0s 398622830e-09 1s 1s 398623510e-09 1s 1s 398628950e-09 0s 0s 398633070e-09 1s 1s 398633790e-09 1s 1s 398639190e-09 0s 0s 398643310e-09 1s 1s 398644070e-09 1s 1s 398649430e-09 0s 0s 398653550e-09 1s 1s 398654350e-09 1s 1s 398659670e-09 0s 0s 398663790e-09 1s 1s 398664630e-09 1s 1s 398669910e-09 0s 0s 398674030e-09 1s 1s 398674910e-09 1s 1s 398680150e-09 0s 0s 398684270e-09 1s 1s 398685190e-09 1s 1s 398690390e-09 0s 0s 398694510e-09 1s 1s 398695470e-09 1s 1s 398700630e-09 0s 0s 398704750e-09 1s 1s 398705750e-09 1s 1s 398710870e-09 0s 0s 398714990e-09 1s 1s 398716030e-09 1s 1s 398721110e-09 0s 0s 398725230e-09 1s 1s 398726310e-09 1s 1s 398731350e-09 0s 0s 398735470e-09 1s 1s 398736590e-09 1s 1s 398741590e-09 0s 0s 398745710e-09 1s 1s 398746870e-09 1s 1s 398751830e-09 0s 0s 398755950e-09 1s 1s 398757150e-09 1s 1s 398762070e-09 0s 0s 398766190e-09 1s 1s 398767430e-09 1s 1s 398772310e-09 0s 0s 398776430e-09 1s 1s 398777710e-09 1s 1s 398782550e-09 0s 0s 398786670e-09 1s 1s 398787990e-09 1s 1s 398792790e-09 0s 0s 398796910e-09 1s 1s 398798270e-09 1s 1s 398803030e-09 0s 0s 398807150e-09 1s 1s 398808550e-09 1s 1s 398813270e-09 0s 0s 398817390e-09 1s 1s 398818830e-09 1s 1s 398823510e-09 0s 0s 398827630e-09 1s 1s 398829110e-09 1s 1s 398833750e-09 0s 0s 398837870e-09 1s 1s 398839390e-09 1s 1s 398843990e-09 0s 0s 398848110e-09 1s 1s 398849670e-09 1s 1s 398854230e-09 0s 0s 398858350e-09 1s 1s 398859950e-09 1s 1s 398864470e-09 0s 0s 398868590e-09 1s 1s 398870230e-09 1s 1s 398874710e-09 0s 0s 398878830e-09 1s 1s 398880510e-09 1s 1s 398884950e-09 0s 0s 398889070e-09 1s 1s 398890790e-09 1s 1s 398895190e-09 0s 0s 398899310e-09 1s 1s 398901070e-09 1s 1s 398905430e-09 0s 0s 398909550e-09 1s 1s 398911350e-09 1s 1s 398915670e-09 0s 0s 398919790e-09 1s 1s 398921630e-09 1s 1s 398925910e-09 0s 0s 398930030e-09 1s 1s 398931910e-09 1s 1s 398936150e-09 0s 0s 398940270e-09 1s 1s 398942190e-09 1s 1s 398946390e-09 0s 0s 398950510e-09 1s 1s 398952470e-09 1s 1s 398956630e-09 0s 0s 398960750e-09 1s 1s 398962750e-09 1s 1s 398966870e-09 0s 0s 398970990e-09 1s 1s 398973030e-09 1s 1s 398977110e-09 0s 0s 398981230e-09 1s 1s 398983310e-09 1s 1s 398987350e-09 0s 0s 398991470e-09 1s 1s 398993590e-09 1s 1s 398997590e-09 0s 0s 399001710e-09 1s 1s 399003870e-09 1s 1s 399007830e-09 0s 0s 399011950e-09 1s 1s 399014150e-09 1s 1s 399018070e-09 0s 0s 399022190e-09 1s 1s 399024430e-09 1s 1s 399028310e-09 0s 0s 399032430e-09 1s 1s 399034710e-09 1s 1s 399038550e-09 0s 0s 399042670e-09 1s 1s 399044990e-09 1s 1s 399048790e-09 0s 0s 399052910e-09 1s 1s 399055270e-09 1s 1s 399059030e-09 0s 0s 399063150e-09 1s 1s 399065550e-09 1s 1s 399069270e-09 0s 0s 399073390e-09 1s 1s 399075830e-09 1s 1s 399079510e-09 0s 0s 399083630e-09 1s 1s 399086110e-09 1s 1s 399089750e-09 0s 0s 399093870e-09 1s 1s 399096390e-09 1s 1s 399099990e-09 0s 0s 399104110e-09 1s 1s 399106670e-09 1s 1s 399110230e-09 0s 0s 399114350e-09 1s 1s 399116950e-09 1s 1s 399120470e-09 0s 0s 399124590e-09 1s 1s 399127230e-09 1s 1s 399130710e-09 0s 0s 399134830e-09 1s 1s 399137510e-09 1s 1s 399140950e-09 0s 0s 399145070e-09 1s 1s 399147790e-09 1s 1s 399151190e-09 0s 0s 399155310e-09 1s 1s 399158070e-09 1s 1s 399161430e-09 0s 0s 399165550e-09 1s 1s 399168350e-09 1s 1s 399171670e-09 0s 0s 399175790e-09 1s 1s 399178630e-09 1s 1s 399181910e-09 0s 0s 399186030e-09 1s 1s 399188910e-09 1s 1s 399192150e-09 0s 0s 399196270e-09 1s 1s 399199190e-09 1s 1s 399202390e-09 0s 0s 399206510e-09 1s 1s 399209470e-09 1s 1s 399212630e-09 0s 0s 399216750e-09 1s 1s 399219750e-09 1s 1s 399222870e-09 0s 0s 399226990e-09 1s 1s 399230030e-09 1s 1s 399233110e-09 0s 0s 399237230e-09 1s 1s 399240310e-09 1s 1s 399243350e-09 0s 0s 399247470e-09 1s 1s 399250590e-09 1s 1s 399253590e-09 0s 0s 399257710e-09 1s 1s 399260870e-09 1s 1s 399263830e-09 0s 0s 399267950e-09 1s 1s 399271150e-09 1s 1s 399274070e-09 0s 0s 399278190e-09 1s 1s 399281430e-09 1s 1s 399284310e-09 0s 0s 399288430e-09 1s 1s 399291710e-09 1s 1s 399294550e-09 0s 0s 399298670e-09 1s 1s 399301990e-09 1s 1s 399304790e-09 0s 0s 399308910e-09 1s 1s 399312270e-09 1s 1s 399315030e-09 0s 0s 399319150e-09 1s 1s 399322550e-09 1s 1s 399325270e-09 0s 0s 399329390e-09 1s 1s 399332830e-09 1s 1s 399335510e-09 0s 0s 399339630e-09 1s 1s 399343110e-09 1s 1s 399345750e-09 0s 0s 399349870e-09 1s 1s 399353390e-09 1s 1s 399355990e-09 0s 0s 399360110e-09 1s 1s 399363670e-09 1s 1s 399366230e-09 0s 0s 399370350e-09 1s 1s 399373950e-09 1s 1s 399376470e-09 0s 0s 399380590e-09 1s 1s 399384230e-09 1s 1s 399386710e-09 0s 0s 399390830e-09 1s 1s 399394510e-09 1s 1s 399396950e-09 0s 0s 399401070e-09 1s 1s 399404790e-09 1s 1s 399407190e-09 0s 0s 399411310e-09 1s 1s 399415070e-09 1s 1s 399417430e-09 0s 0s 399421550e-09 1s 1s 399425350e-09 1s 1s 399427670e-09 0s 0s 399431790e-09 1s 1s 399435630e-09 1s 1s 399437910e-09 0s 0s 399442030e-09 1s 1s 399445910e-09 1s 1s 399448150e-09 0s 0s 399452270e-09 1s 1s 399456190e-09 1s 1s 399458390e-09 0s 0s 399462510e-09 1s 1s 399466470e-09 1s 1s 399468630e-09 0s 0s 399472750e-09 1s 1s 399476750e-09 1s 1s 399478870e-09 0s 0s 399482990e-09 1s 1s 399487030e-09 1s 1s 399489110e-09 0s 0s 399493230e-09 1s 1s 399497310e-09 1s 1s 399499350e-09 0s 0s 399503470e-09 1s 1s 399507590e-09 1s 1s 399509590e-09 0s 0s 399513710e-09 1s 1s 399517870e-09 1s 1s 399519830e-09 0s 0s 399523950e-09 1s 1s 399528150e-09 1s 1s 399530070e-09 0s 0s 399534190e-09 1s 1s 399538430e-09 1s 1s 399540310e-09 0s 0s 399544430e-09 1s 1s 399548710e-09 1s 1s 399550550e-09 0s 0s 399554670e-09 1s 1s 399558990e-09 1s 1s 399560790e-09 0s 0s 399564910e-09 1s 1s 399569270e-09 1s 1s 399571030e-09 0s 0s 399575150e-09 1s 1s 399579550e-09 1s 1s 399581270e-09 0s 0s 399585390e-09 1s 1s 399589830e-09 1s 1s 399591510e-09 0s 0s 399595630e-09 1s 1s 399600110e-09 1s 1s 399601750e-09 0s 0s 399605870e-09 1s 1s 399610390e-09 1s 1s 399611990e-09 0s 0s 399616110e-09 1s 1s 399620670e-09 1s 1s 399622230e-09 0s 0s 399626350e-09 1s 1s 399630950e-09 1s 1s 399632470e-09 0s 0s 399636590e-09 1s 1s 399641230e-09 1s 1s 399642710e-09 0s 0s 399646830e-09 1s 1s 399651510e-09 1s 1s 399652950e-09 0s 0s 399657070e-09 1s 1s 399661790e-09 1s 1s 399663190e-09 0s 0s 399667310e-09 1s 1s 399672070e-09 1s 1s 399673430e-09 0s 0s 399677550e-09 1s 1s 399682350e-09 1s 1s 399683670e-09 0s 0s 399687790e-09 1s 1s 399692630e-09 1s 1s 399693910e-09 0s 0s 399698030e-09 1s 1s 399702910e-09 1s 1s 399704150e-09 0s 0s 399708270e-09 1s 1s 399713190e-09 1s 1s 399714390e-09 0s 0s 399718510e-09 1s 1s 399723470e-09 1s 1s 399724630e-09 0s 0s 399728750e-09 1s 1s 399733750e-09 1s 1s 399734870e-09 0s 0s 399738990e-09 1s 1s 399744030e-09 1s 1s 399745110e-09 0s 0s 399749230e-09 1s 1s 399754310e-09 1s 1s 399755350e-09 0s 0s 399759470e-09 1s 1s 399764590e-09 1s 1s 399765590e-09 0s 0s 399769710e-09 1s 1s 399774870e-09 1s 1s 399775830e-09 0s 0s 399779950e-09 1s 1s 399785150e-09 1s 1s 399786070e-09 0s 0s 399790190e-09 1s 1s 399795430e-09 1s 1s 399796310e-09 0s 0s 399800430e-09 1s 1s 399805710e-09 1s 1s 399806550e-09 0s 0s 399810670e-09 1s 1s 399815990e-09 1s 1s 399816790e-09 0s 0s 399820910e-09 1s 1s 399826270e-09 1s 1s 399827030e-09 0s 0s 399831150e-09 1s 1s 399836550e-09 1s 1s 399837270e-09 0s 0s 399841390e-09 1s 1s 399846830e-09 1s 1s 399847510e-09 0s 0s 399851630e-09 1s 1s 399857110e-09 1s 1s 399857750e-09 0s 0s 399861870e-09 1s 1s 399867390e-09 1s 1s 399867990e-09 0s 0s 399872110e-09 1s 1s 399877670e-09 1s 1s 399878230e-09 0s 0s 399882350e-09 1s 1s 399887950e-09 1s 1s 399888470e-09 0s 0s 399892590e-09 1s 1s 399898230e-09 1s 1s 399898710e-09 0s 0s 399902830e-09 1s 1s 399908510e-09 1s 1s 399908950e-09 0s 0s 399913070e-09 1s 1s 399918790e-09 1s 1s 399919190e-09 0s 0s 399923310e-09 1s 1s 399929070e-09 1s 1s 399929430e-09 0s 0s 399933550e-09 1s 1s 399939350e-09 1s 1s 399939670e-09 0s 0s 399943790e-09 1s 1s 399949630e-09 1s 1s 399949910e-09 0s 0s 399954030e-09 1s 1s 399959910e-09 1s 1s 399960150e-09 0s 0s 399964270e-09 1s 1s 399970190e-09 1s 1s 399970390e-09 0s 0s 399974510e-09 1s 1s 399980470e-09 1s 1s 399980630e-09 0s 0s 399984750e-09 1s 1s 399990750e-09 1s 1s 399990870e-09 0s 0s 399994990e-09 1s 1s 400001030e-09 1s 1s 400001110e-09 0s 0s 400005230e-09 1s 1s 400011310e-09 1s 1s 400011350e-09 0s 0s 400015470e-09 1s 1s 400021590e-09 0s 0s 400025710e-09 1s 1s 400031830e-09 0s 0s 400031870e-09 0s 0s 400035950e-09 1s 1s 400042070e-09 0s 0s 400042150e-09 0s 0s 400046190e-09 1s 1s 400052310e-09 0s 0s 400052430e-09 0s 0s 400056430e-09 1s 1s 400062550e-09 0s 0s 400062710e-09 0s 0s 400066670e-09 1s 1s 400072790e-09 0s 0s 400072990e-09 0s 0s 400076910e-09 1s 1s 400083030e-09 0s 0s 400083270e-09 0s 0s 400087150e-09 1s 1s 400093270e-09 0s 0s 400093550e-09 0s 0s 400097390e-09 1s 1s 400103510e-09 0s 0s 400103830e-09 0s 0s 400107630e-09 1s 1s 400113750e-09 0s 0s 400114110e-09 0s 0s 400117870e-09 1s 1s 400123990e-09 0s 0s 400124390e-09 0s 0s 400128110e-09 1s 1s 400134230e-09 0s 0s 400134670e-09 0s 0s 400138350e-09 1s 1s 400144470e-09 0s 0s 400144950e-09 0s 0s 400148590e-09 1s 1s 400154710e-09 0s 0s 400155230e-09 0s 0s 400158830e-09 1s 1s 400164950e-09 0s 0s 400165510e-09 0s 0s 400169070e-09 1s 1s 400175190e-09 0s 0s 400175790e-09 0s 0s 400179310e-09 1s 1s 400185430e-09 0s 0s 400186070e-09 0s 0s 400189550e-09 1s 1s 400195670e-09 0s 0s 400196350e-09 0s 0s 400199790e-09 1s 1s 400205910e-09 0s 0s 400206630e-09 0s 0s 400210030e-09 1s 1s 400216150e-09 0s 0s 400216910e-09 0s 0s 400220270e-09 1s 1s 400226390e-09 0s 0s 400227190e-09 0s 0s 400230510e-09 1s 1s 400236630e-09 0s 0s 400237470e-09 0s 0s 400240750e-09 1s 1s 400246870e-09 0s 0s 400247750e-09 0s 0s 400250990e-09 1s 1s 400257110e-09 0s 0s 400258030e-09 0s 0s 400261230e-09 1s 1s 400267350e-09 0s 0s 400268310e-09 0s 0s 400271470e-09 1s 1s 400277590e-09 0s 0s 400278590e-09 0s 0s 400281710e-09 1s 1s 400287830e-09 0s 0s 400288870e-09 0s 0s 400291950e-09 1s 1s 400298070e-09 0s 0s 400299150e-09 0s 0s 400302190e-09 1s 1s 400308310e-09 0s 0s 400309430e-09 0s 0s 400312430e-09 1s 1s 400318550e-09 0s 0s 400319710e-09 0s 0s 400322670e-09 1s 1s 400328790e-09 0s 0s 400329990e-09 0s 0s 400332910e-09 1s 1s 400339030e-09 0s 0s 400340270e-09 0s 0s 400343150e-09 1s 1s 400349270e-09 0s 0s 400350550e-09 0s 0s 400353390e-09 1s 1s 400359510e-09 0s 0s 400360830e-09 0s 0s 400363630e-09 1s 1s 400369750e-09 0s 0s 400371110e-09 0s 0s 400373870e-09 1s 1s 400379990e-09 0s 0s 400381390e-09 0s 0s 400384110e-09 1s 1s 400390230e-09 0s 0s 400391670e-09 0s 0s 400394350e-09 1s 1s 400400470e-09 0s 0s 400401950e-09 0s 0s 400404590e-09 1s 1s 400410710e-09 0s 0s 400412230e-09 0s 0s 400414830e-09 1s 1s 400420950e-09 0s 0s 400422510e-09 0s 0s 400425070e-09 1s 1s 400431190e-09 0s 0s 400432790e-09 0s 0s 400435310e-09 1s 1s 400441430e-09 0s 0s 400443070e-09 0s 0s 400445550e-09 1s 1s 400451670e-09 0s 0s 400453350e-09 0s 0s 400455790e-09 1s 1s 400461910e-09 0s 0s 400463630e-09 0s 0s 400466030e-09 1s 1s 400472150e-09 0s 0s 400473910e-09 0s 0s 400476270e-09 1s 1s 400482390e-09 0s 0s 400484190e-09 0s 0s 400486510e-09 1s 1s 400492630e-09 0s 0s 400494470e-09 0s 0s 400496750e-09 1s 1s 400502870e-09 0s 0s 400504750e-09 0s 0s 400506990e-09 1s 1s 400513110e-09 0s 0s 400515030e-09 0s 0s 400517230e-09 1s 1s 400523350e-09 0s 0s 400525310e-09 0s 0s 400527470e-09 1s 1s 400533590e-09 0s 0s 400535590e-09 0s 0s 400537710e-09 1s 1s 400543830e-09 0s 0s 400545870e-09 0s 0s 400547950e-09 1s 1s 400554070e-09 0s 0s 400556150e-09 0s 0s 400558190e-09 1s 1s 400564310e-09 0s 0s 400566430e-09 0s 0s 400568430e-09 1s 1s 400574550e-09 0s 0s 400576710e-09 0s 0s 400578670e-09 1s 1s 400584790e-09 0s 0s 400586990e-09 0s 0s 400588910e-09 1s 1s 400595030e-09 0s 0s 400597270e-09 0s 0s 400599150e-09 1s 1s 400605270e-09 0s 0s 400607550e-09 0s 0s 400609390e-09 1s 1s 400615510e-09 0s 0s 400617830e-09 0s 0s 400619630e-09 1s 1s 400625750e-09 0s 0s 400628110e-09 0s 0s 400629870e-09 1s 1s 400635990e-09 0s 0s 400638390e-09 0s 0s 400640110e-09 1s 1s 400646230e-09 0s 0s 400648670e-09 0s 0s 400650350e-09 1s 1s 400656470e-09 0s 0s 400658950e-09 0s 0s 400660590e-09 1s 1s 400666710e-09 0s 0s 400669230e-09 0s 0s 400670830e-09 1s 1s 400676950e-09 0s 0s 400679510e-09 0s 0s 400681070e-09 1s 1s 400687190e-09 0s 0s 400689790e-09 0s 0s 400691310e-09 1s 1s 400697430e-09 0s 0s 400700070e-09 0s 0s 400701550e-09 1s 1s 400707670e-09 0s 0s 400710350e-09 0s 0s 400711790e-09 1s 1s 400717910e-09 0s 0s 400720630e-09 0s 0s 400722030e-09 1s 1s 400728150e-09 0s 0s 400730910e-09 0s 0s 400732270e-09 1s 1s 400738390e-09 0s 0s 400741190e-09 0s 0s 400742510e-09 1s 1s 400748630e-09 0s 0s 400751470e-09 0s 0s 400752750e-09 1s 1s 400758870e-09 0s 0s 400761750e-09 0s 0s 400762990e-09 1s 1s 400769110e-09 0s 0s 400772030e-09 0s 0s 400773230e-09 1s 1s 400779350e-09 0s 0s 400782310e-09 0s 0s 400783470e-09 1s 1s 400789590e-09 0s 0s 400792590e-09 0s 0s 400793710e-09 1s 1s 400799830e-09 0s 0s 400802870e-09 0s 0s 400803950e-09 1s 1s 400810070e-09 0s 0s 400813150e-09 0s 0s 400814190e-09 1s 1s 400820310e-09 0s 0s 400823430e-09 0s 0s 400824430e-09 1s 1s 400830550e-09 0s 0s 400833710e-09 0s 0s 400834670e-09 1s 1s 400840790e-09 0s 0s 400843990e-09 0s 0s 400844910e-09 1s 1s 400851030e-09 0s 0s 400854270e-09 0s 0s 400855150e-09 1s 1s 400861270e-09 0s 0s 400864550e-09 0s 0s 400865390e-09 1s 1s 400871510e-09 0s 0s 400874830e-09 0s 0s 400875630e-09 1s 1s 400881750e-09 0s 0s 400885110e-09 0s 0s 400885870e-09 1s 1s 400891990e-09 0s 0s 400895390e-09 0s 0s 400896110e-09 1s 1s 400902230e-09 0s 0s 400905670e-09 0s 0s 400906350e-09 1s 1s 400912470e-09 0s 0s 400915950e-09 0s 0s 400916590e-09 1s 1s 400922710e-09 0s 0s 400926230e-09 0s 0s 400926830e-09 1s 1s 400932950e-09 0s 0s 400936510e-09 0s 0s 400937070e-09 1s 1s 400943190e-09 0s 0s 400946790e-09 0s 0s 400947310e-09 1s 1s 400953430e-09 0s 0s 400957070e-09 0s 0s 400957550e-09 1s 1s 400963670e-09 0s 0s 400967350e-09 0s 0s 400967790e-09 1s 1s 400973910e-09 0s 0s 400977630e-09 0s 0s 400978030e-09 1s 1s 400984150e-09 0s 0s 400987910e-09 0s 0s 400988270e-09 1s 1s 400994390e-09 0s 0s 400998190e-09 0s 0s 400998510e-09 1s 1s 401004630e-09 0s 0s 401008470e-09 0s 0s 401008750e-09 1s 1s 401014870e-09 0s 0s 401018750e-09 0s 0s 401018990e-09 1s 1s 401025110e-09 0s 0s 401029030e-09 0s 0s 401029230e-09 1s 1s 401035350e-09 0s 0s 401039310e-09 0s 0s 401039470e-09 1s 1s 401045590e-09 0s 0s 401049590e-09 0s 0s 401049710e-09 1s 1s 401055830e-09 0s 0s 401059870e-09 0s 0s 401059950e-09 1s 1s 401066070e-09 0s 0s 401070150e-09 0s 0s 401070190e-09 1s 1s 401076310e-09 0s 0s 401080430e-09 1s 1s 401080470e-09 1s 1s 401086590e-09 0s 0s 401090670e-09 1s 1s 401090750e-09 1s 1s 401096830e-09 0s 0s 401100910e-09 1s 1s 401101030e-09 1s 1s 401107070e-09 0s 0s 401111150e-09 1s 1s 401111310e-09 1s 1s 401117310e-09 0s 0s 401121390e-09 1s 1s 401121590e-09 1s 1s 401127550e-09 0s 0s 401131630e-09 1s 1s 401131870e-09 1s 1s 401137790e-09 0s 0s 401141870e-09 1s 1s 401142150e-09 1s 1s 401148030e-09 0s 0s 401152110e-09 1s 1s 401152430e-09 1s 1s 401158270e-09 0s 0s 401162350e-09 1s 1s 401162710e-09 1s 1s 401168510e-09 0s 0s 401172590e-09 1s 1s 401172990e-09 1s 1s 401178750e-09 0s 0s 401182830e-09 1s 1s 401183270e-09 1s 1s 401188990e-09 0s 0s 401193070e-09 1s 1s 401193550e-09 1s 1s 401199230e-09 0s 0s 401203310e-09 1s 1s 401203830e-09 1s 1s 401209470e-09 0s 0s 401213550e-09 1s 1s 401214110e-09 1s 1s 401219710e-09 0s 0s 401223790e-09 1s 1s 401224390e-09 1s 1s 401229950e-09 0s 0s 401234030e-09 1s 1s 401234670e-09 1s 1s 401240190e-09 0s 0s 401244270e-09 1s 1s 401244950e-09 1s 1s 401250430e-09 0s 0s 401254510e-09 1s 1s 401255230e-09 1s 1s 401260670e-09 0s 0s 401264750e-09 1s 1s 401265510e-09 1s 1s 401270910e-09 0s 0s 401274990e-09 1s 1s 401275790e-09 1s 1s 401281150e-09 0s 0s 401285230e-09 1s 1s 401286070e-09 1s 1s 401291390e-09 0s 0s 401295470e-09 1s 1s 401296350e-09 1s 1s 401301630e-09 0s 0s 401305710e-09 1s 1s 401306630e-09 1s 1s 401311870e-09 0s 0s 401315950e-09 1s 1s 401316910e-09 1s 1s 401322110e-09 0s 0s 401326190e-09 1s 1s 401327190e-09 1s 1s 401332350e-09 0s 0s 401336430e-09 1s 1s 401337470e-09 1s 1s 401342590e-09 0s 0s 401346670e-09 1s 1s 401347750e-09 1s 1s 401352830e-09 0s 0s 401356910e-09 1s 1s 401358030e-09 1s 1s 401363070e-09 0s 0s 401367150e-09 1s 1s 401368310e-09 1s 1s 401373310e-09 0s 0s 401377390e-09 1s 1s 401378590e-09 1s 1s 401383550e-09 0s 0s 401387630e-09 1s 1s 401388870e-09 1s 1s 401393790e-09 0s 0s 401397870e-09 1s 1s 401399150e-09 1s 1s 401404030e-09 0s 0s 401408110e-09 1s 1s 401409430e-09 1s 1s 401414270e-09 0s 0s 401418350e-09 1s 1s 401419710e-09 1s 1s 401424510e-09 0s 0s 401428590e-09 1s 1s 401429990e-09 1s 1s 401434750e-09 0s 0s 401438830e-09 1s 1s 401440270e-09 1s 1s 401444990e-09 0s 0s 401449070e-09 1s 1s 401450550e-09 1s 1s 401455230e-09 0s 0s 401459310e-09 1s 1s 401460830e-09 1s 1s 401465470e-09 0s 0s 401469550e-09 1s 1s 401471110e-09 1s 1s 401475710e-09 0s 0s 401479790e-09 1s 1s 401481390e-09 1s 1s 401485950e-09 0s 0s 401490030e-09 1s 1s 401491670e-09 1s 1s 401496190e-09 0s 0s 401500270e-09 1s 1s 401501950e-09 1s 1s 401506430e-09 0s 0s 401510510e-09 1s 1s 401512230e-09 1s 1s 401516670e-09 0s 0s 401520750e-09 1s 1s 401522510e-09 1s 1s 401526910e-09 0s 0s 401530990e-09 1s 1s 401532790e-09 1s 1s 401537150e-09 0s 0s 401541230e-09 1s 1s 401543070e-09 1s 1s 401547390e-09 0s 0s 401551470e-09 1s 1s 401553350e-09 1s 1s 401557630e-09 0s 0s 401561710e-09 1s 1s 401563630e-09 1s 1s 401567870e-09 0s 0s 401571950e-09 1s 1s 401573910e-09 1s 1s 401578110e-09 0s 0s 401582190e-09 1s 1s 401584190e-09 1s 1s 401588350e-09 0s 0s 401592430e-09 1s 1s 401594470e-09 1s 1s 401598590e-09 0s 0s 401602670e-09 1s 1s 401604750e-09 1s 1s 401608830e-09 0s 0s 401612910e-09 1s 1s 401615030e-09 1s 1s 401619070e-09 0s 0s 401623150e-09 1s 1s 401625310e-09 1s 1s 401629310e-09 0s 0s 401633390e-09 1s 1s 401635590e-09 1s 1s 401639550e-09 0s 0s 401643630e-09 1s 1s 401645870e-09 1s 1s 401649790e-09 0s 0s 401653870e-09 1s 1s 401656150e-09 1s 1s 401660030e-09 0s 0s 401664110e-09 1s 1s 401666430e-09 1s 1s 401670270e-09 0s 0s 401674350e-09 1s 1s 401676710e-09 1s 1s 401680510e-09 0s 0s 401684590e-09 1s 1s 401686990e-09 1s 1s 401690750e-09 0s 0s 401694830e-09 1s 1s 401697270e-09 1s 1s 401700990e-09 0s 0s 401705070e-09 1s 1s 401707550e-09 1s 1s 401711230e-09 0s 0s 401715310e-09 1s 1s 401717830e-09 1s 1s 401721470e-09 0s 0s 401725550e-09 1s 1s 401728110e-09 1s 1s 401731710e-09 0s 0s 401735790e-09 1s 1s 401738390e-09 1s 1s 401741950e-09 0s 0s 401746030e-09 1s 1s 401748670e-09 1s 1s 401752190e-09 0s 0s 401756270e-09 1s 1s 401758950e-09 1s 1s 401762430e-09 0s 0s 401766510e-09 1s 1s 401769230e-09 1s 1s 401772670e-09 0s 0s 401776750e-09 1s 1s 401779510e-09 1s 1s 401782910e-09 0s 0s 401786990e-09 1s 1s 401789790e-09 1s 1s 401793150e-09 0s 0s 401797230e-09 1s 1s 401800070e-09 1s 1s 401803390e-09 0s 0s 401807470e-09 1s 1s 401810350e-09 1s 1s 401813630e-09 0s 0s 401817710e-09 1s 1s 401820630e-09 1s 1s 401823870e-09 0s 0s 401827950e-09 1s 1s 401830910e-09 1s 1s 401834110e-09 0s 0s 401838190e-09 1s 1s 401841190e-09 1s 1s 401844350e-09 0s 0s 401848430e-09 1s 1s 401851470e-09 1s 1s 401854590e-09 0s 0s 401858670e-09 1s 1s 401861750e-09 1s 1s 401864830e-09 0s 0s 401868910e-09 1s 1s 401872030e-09 1s 1s 401875070e-09 0s 0s 401879150e-09 1s 1s 401882310e-09 1s 1s 401885310e-09 0s 0s 401889390e-09 1s 1s 401892590e-09 1s 1s 401895550e-09 0s 0s 401899630e-09 1s 1s 401902870e-09 1s 1s 401905790e-09 0s 0s 401909870e-09 1s 1s 401913150e-09 1s 1s 401916030e-09 0s 0s 401920110e-09 1s 1s 401923430e-09 1s 1s 401926270e-09 0s 0s 401930350e-09 1s 1s 401933710e-09 1s 1s 401936510e-09 0s 0s 401940590e-09 1s 1s 401943990e-09 1s 1s 401946750e-09 0s 0s 401950830e-09 1s 1s 401954270e-09 1s 1s 401956990e-09 0s 0s 401961070e-09 1s 1s 401964550e-09 1s 1s 401967230e-09 0s 0s 401971310e-09 1s 1s 401974830e-09 1s 1s 401977470e-09 0s 0s 401981550e-09 1s 1s 401985110e-09 1s 1s 401987710e-09 0s 0s 401991790e-09 1s 1s 401995390e-09 1s 1s 401997950e-09 0s 0s 402002030e-09 1s 1s 402005670e-09 1s 1s 402008190e-09 0s 0s 402012270e-09 1s 1s 402015950e-09 1s 1s 402018430e-09 0s 0s 402022510e-09 1s 1s 402026230e-09 1s 1s 402028670e-09 0s 0s 402032750e-09 1s 1s 402036510e-09 1s 1s 402038910e-09 0s 0s 402042990e-09 1s 1s 402046790e-09 1s 1s 402049150e-09 0s 0s 402053230e-09 1s 1s 402057070e-09 1s 1s 402059390e-09 0s 0s 402063470e-09 1s 1s 402067350e-09 1s 1s 402069630e-09 0s 0s 402073710e-09 1s 1s 402077630e-09 1s 1s 402079870e-09 0s 0s 402083950e-09 1s 1s 402087910e-09 1s 1s 402090110e-09 0s 0s 402094190e-09 1s 1s 402098190e-09 1s 1s 402100350e-09 0s 0s 402104430e-09 1s 1s 402108470e-09 1s 1s 402110590e-09 0s 0s 402114670e-09 1s 1s 402118750e-09 1s 1s 402120830e-09 0s 0s 402124910e-09 1s 1s 402129030e-09 1s 1s 402131070e-09 0s 0s 402135150e-09 1s 1s 402139310e-09 1s 1s 402141310e-09 0s 0s 402145390e-09 1s 1s 402149590e-09 1s 1s 402151550e-09 0s 0s 402155630e-09 1s 1s 402159870e-09 1s 1s 402161790e-09 0s 0s 402165870e-09 1s 1s 402170150e-09 1s 1s 402172030e-09 0s 0s 402176110e-09 1s 1s 402180430e-09 1s 1s 402182270e-09 0s 0s 402186350e-09 1s 1s 402190710e-09 1s 1s 402192510e-09 0s 0s 402196590e-09 1s 1s 402200990e-09 1s 1s 402202750e-09 0s 0s 402206830e-09 1s 1s 402211270e-09 1s 1s 402212990e-09 0s 0s 402217070e-09 1s 1s 402221550e-09 1s 1s 402223230e-09 0s 0s 402227310e-09 1s 1s 402231830e-09 1s 1s 402233470e-09 0s 0s 402237550e-09 1s 1s 402242110e-09 1s 1s 402243710e-09 0s 0s 402247790e-09 1s 1s 402252390e-09 1s 1s 402253950e-09 0s 0s 402258030e-09 1s 1s 402262670e-09 1s 1s 402264190e-09 0s 0s 402268270e-09 1s 1s 402272950e-09 1s 1s 402274430e-09 0s 0s 402278510e-09 1s 1s 402283230e-09 1s 1s 402284670e-09 0s 0s 402288750e-09 1s 1s 402293510e-09 1s 1s 402294910e-09 0s 0s 402298990e-09 1s 1s 402303790e-09 1s 1s 402305150e-09 0s 0s 402309230e-09 1s 1s 402314070e-09 1s 1s 402315390e-09 0s 0s 402319470e-09 1s 1s 402324350e-09 1s 1s 402325630e-09 0s 0s 402329710e-09 1s 1s 402334630e-09 1s 1s 402335870e-09 0s 0s 402339950e-09 1s 1s 402344910e-09 1s 1s 402346110e-09 0s 0s 402350190e-09 1s 1s 402355190e-09 1s 1s 402356350e-09 0s 0s 402360430e-09 1s 1s 402365470e-09 1s 1s 402366590e-09 0s 0s 402370670e-09 1s 1s 402375750e-09 1s 1s 402376830e-09 0s 0s 402380910e-09 1s 1s 402386030e-09 1s 1s 402387070e-09 0s 0s 402391150e-09 1s 1s 402396310e-09 1s 1s 402397310e-09 0s 0s 402401390e-09 1s 1s 402406590e-09 1s 1s 402407550e-09 0s 0s 402411630e-09 1s 1s 402416870e-09 1s 1s 402417790e-09 0s 0s 402421870e-09 1s 1s 402427150e-09 1s 1s 402428030e-09 0s 0s 402432110e-09 1s 1s 402437430e-09 1s 1s 402438270e-09 0s 0s 402442350e-09 1s 1s 402447710e-09 1s 1s 402448510e-09 0s 0s 402452590e-09 1s 1s 402457990e-09 1s 1s 402458750e-09 0s 0s 402462830e-09 1s 1s 402468270e-09 1s 1s 402468990e-09 0s 0s 402473070e-09 1s 1s 402478550e-09 1s 1s 402479230e-09 0s 0s 402483310e-09 1s 1s 402488830e-09 1s 1s 402489470e-09 0s 0s 402493550e-09 1s 1s 402499110e-09 1s 1s 402499710e-09 0s 0s 402503790e-09 1s 1s 402509390e-09 1s 1s 402509950e-09 0s 0s 402514030e-09 1s 1s 402519670e-09 1s 1s 402520190e-09 0s 0s 402524270e-09 1s 1s 402529950e-09 1s 1s 402530430e-09 0s 0s 402534510e-09 1s 1s 402540230e-09 1s 1s 402540670e-09 0s 0s 402544750e-09 1s 1s 402550510e-09 1s 1s 402550910e-09 0s 0s 402554990e-09 1s 1s 402560790e-09 1s 1s 402561150e-09 0s 0s 402565230e-09 1s 1s 402571070e-09 1s 1s 402571390e-09 0s 0s 402575470e-09 1s 1s 402581350e-09 1s 1s 402581630e-09 0s 0s 402585710e-09 1s 1s 402591630e-09 1s 1s 402591870e-09 0s 0s 402595950e-09 1s 1s 402601910e-09 1s 1s 402602110e-09 0s 0s 402606190e-09 1s 1s 402612190e-09 1s 1s 402612350e-09 0s 0s 402616430e-09 1s 1s 402622470e-09 1s 1s 402622590e-09 0s 0s 402626670e-09 1s 1s 402632750e-09 1s 1s 402632830e-09 0s 0s 402636910e-09 1s 1s 402643030e-09 1s 1s 402643070e-09 0s 0s 402647150e-09 1s 1s 402653310e-09 0s 0s 402657390e-09 1s 1s 402663550e-09 0s 0s 402663590e-09 0s 0s 402667630e-09 1s 1s 402673790e-09 0s 0s 402673870e-09 0s 0s 402677870e-09 1s 1s 402684030e-09 0s 0s 402684150e-09 0s 0s 402688110e-09 1s 1s 402694270e-09 0s 0s 402694430e-09 0s 0s 402698350e-09 1s 1s 402704510e-09 0s 0s 402704710e-09 0s 0s 402708590e-09 1s 1s 402714750e-09 0s 0s 402714990e-09 0s 0s 402718830e-09 1s 1s 402724990e-09 0s 0s 402725270e-09 0s 0s 402729070e-09 1s 1s 402735230e-09 0s 0s 402735550e-09 0s 0s 402739310e-09 1s 1s 402745470e-09 0s 0s 402745830e-09 0s 0s 402749550e-09 1s 1s 402755710e-09 0s 0s 402756110e-09 0s 0s 402759790e-09 1s 1s 402765950e-09 0s 0s 402766390e-09 0s 0s 402770030e-09 1s 1s 402776190e-09 0s 0s 402776670e-09 0s 0s 402780270e-09 1s 1s 402786430e-09 0s 0s 402786950e-09 0s 0s 402790510e-09 1s 1s 402796670e-09 0s 0s 402797230e-09 0s 0s 402800750e-09 1s 1s 402806910e-09 0s 0s 402807510e-09 0s 0s 402810990e-09 1s 1s 402817150e-09 0s 0s 402817790e-09 0s 0s 402821230e-09 1s 1s 402827390e-09 0s 0s 402828070e-09 0s 0s 402831470e-09 1s 1s 402837630e-09 0s 0s 402838350e-09 0s 0s 402841710e-09 1s 1s 402847870e-09 0s 0s 402848630e-09 0s 0s 402851950e-09 1s 1s 402858110e-09 0s 0s 402858910e-09 0s 0s 402862190e-09 1s 1s 402868350e-09 0s 0s 402869190e-09 0s 0s 402872430e-09 1s 1s 402878590e-09 0s 0s 402879470e-09 0s 0s 402882670e-09 1s 1s 402888830e-09 0s 0s 402889750e-09 0s 0s 402892910e-09 1s 1s 402899070e-09 0s 0s 402900030e-09 0s 0s 402903150e-09 1s 1s 402909310e-09 0s 0s 402910310e-09 0s 0s 402913390e-09 1s 1s 402919550e-09 0s 0s 402920590e-09 0s 0s 402923630e-09 1s 1s 402929790e-09 0s 0s 402930870e-09 0s 0s 402933870e-09 1s 1s 402940030e-09 0s 0s 402941150e-09 0s 0s 402944110e-09 1s 1s 402950270e-09 0s 0s 402951430e-09 0s 0s 402954350e-09 1s 1s 402960510e-09 0s 0s 402961710e-09 0s 0s 402964590e-09 1s 1s 402970750e-09 0s 0s 402971990e-09 0s 0s 402974830e-09 1s 1s 402980990e-09 0s 0s 402982270e-09 0s 0s 402985070e-09 1s 1s 402991230e-09 0s 0s 402992550e-09 0s 0s 402995310e-09 1s 1s 403001470e-09 0s 0s 403002830e-09 0s 0s 403005550e-09 1s 1s 403011710e-09 0s 0s 403013110e-09 0s 0s 403015790e-09 1s 1s 403021950e-09 0s 0s 403023390e-09 0s 0s 403026030e-09 1s 1s 403032190e-09 0s 0s 403033670e-09 0s 0s 403036270e-09 1s 1s 403042430e-09 0s 0s 403043950e-09 0s 0s 403046510e-09 1s 1s 403052670e-09 0s 0s 403054230e-09 0s 0s 403056750e-09 1s 1s 403062910e-09 0s 0s 403064510e-09 0s 0s 403066990e-09 1s 1s 403073150e-09 0s 0s 403074790e-09 0s 0s 403077230e-09 1s 1s 403083390e-09 0s 0s 403085070e-09 0s 0s 403087470e-09 1s 1s 403093630e-09 0s 0s 403095350e-09 0s 0s 403097710e-09 1s 1s 403103870e-09 0s 0s 403105630e-09 0s 0s 403107950e-09 1s 1s 403114110e-09 0s 0s 403115910e-09 0s 0s 403118190e-09 1s 1s 403124350e-09 0s 0s 403126190e-09 0s 0s 403128430e-09 1s 1s 403134590e-09 0s 0s 403136470e-09 0s 0s 403138670e-09 1s 1s 403144830e-09 0s 0s 403146750e-09 0s 0s 403148910e-09 1s 1s 403155070e-09 0s 0s 403157030e-09 0s 0s 403159150e-09 1s 1s 403165310e-09 0s 0s 403167310e-09 0s 0s 403169390e-09 1s 1s 403175550e-09 0s 0s 403177590e-09 0s 0s 403179630e-09 1s 1s 403185790e-09 0s 0s 403187870e-09 0s 0s 403189870e-09 1s 1s 403196030e-09 0s 0s 403198150e-09 0s 0s 403200110e-09 1s 1s 403206270e-09 0s 0s 403208430e-09 0s 0s 403210350e-09 1s 1s 403216510e-09 0s 0s 403218710e-09 0s 0s 403220590e-09 1s 1s 403226750e-09 0s 0s 403228990e-09 0s 0s 403230830e-09 1s 1s 403236990e-09 0s 0s 403239270e-09 0s 0s 403241070e-09 1s 1s 403247230e-09 0s 0s 403249550e-09 0s 0s 403251310e-09 1s 1s 403257470e-09 0s 0s 403259830e-09 0s 0s 403261550e-09 1s 1s 403267710e-09 0s 0s 403270110e-09 0s 0s 403271790e-09 1s 1s 403277950e-09 0s 0s 403280390e-09 0s 0s 403282030e-09 1s 1s 403288190e-09 0s 0s 403290670e-09 0s 0s 403292270e-09 1s 1s 403298430e-09 0s 0s 403300950e-09 0s 0s 403302510e-09 1s 1s 403308670e-09 0s 0s 403311230e-09 0s 0s 403312750e-09 1s 1s 403318910e-09 0s 0s 403321510e-09 0s 0s 403322990e-09 1s 1s 403329150e-09 0s 0s 403331790e-09 0s 0s 403333230e-09 1s 1s 403339390e-09 0s 0s 403342070e-09 0s 0s 403343470e-09 1s 1s 403349630e-09 0s 0s 403352350e-09 0s 0s 403353710e-09 1s 1s 403359870e-09 0s 0s 403362630e-09 0s 0s 403363950e-09 1s 1s 403370110e-09 0s 0s 403372910e-09 0s 0s 403374190e-09 1s 1s 403380350e-09 0s 0s 403383190e-09 0s 0s 403384430e-09 1s 1s 403390590e-09 0s 0s 403393470e-09 0s 0s 403394670e-09 1s 1s 403400830e-09 0s 0s 403403750e-09 0s 0s 403404910e-09 1s 1s 403411070e-09 0s 0s 403414030e-09 0s 0s 403415150e-09 1s 1s 403421310e-09 0s 0s 403424310e-09 0s 0s 403425390e-09 1s 1s 403431550e-09 0s 0s 403434590e-09 0s 0s 403435630e-09 1s 1s 403441790e-09 0s 0s 403444870e-09 0s 0s 403445870e-09 1s 1s 403452030e-09 0s 0s 403455150e-09 0s 0s 403456110e-09 1s 1s 403462270e-09 0s 0s 403465430e-09 0s 0s 403466350e-09 1s 1s 403472510e-09 0s 0s 403475710e-09 0s 0s 403476590e-09 1s 1s 403482750e-09 0s 0s 403485990e-09 0s 0s 403486830e-09 1s 1s 403492990e-09 0s 0s 403496270e-09 0s 0s 403497070e-09 1s 1s 403503230e-09 0s 0s 403506550e-09 0s 0s 403507310e-09 1s 1s 403513470e-09 0s 0s 403516830e-09 0s 0s 403517550e-09 1s 1s 403523710e-09 0s 0s 403527110e-09 0s 0s 403527790e-09 1s 1s 403533950e-09 0s 0s 403537390e-09 0s 0s 403538030e-09 1s 1s 403544190e-09 0s 0s 403547670e-09 0s 0s 403548270e-09 1s 1s 403554430e-09 0s 0s 403557950e-09 0s 0s 403558510e-09 1s 1s 403564670e-09 0s 0s 403568230e-09 0s 0s 403568750e-09 1s 1s 403574910e-09 0s 0s 403578510e-09 0s 0s 403578990e-09 1s 1s 403585150e-09 0s 0s 403588790e-09 0s 0s 403589230e-09 1s 1s 403595390e-09 0s 0s 403599070e-09 0s 0s 403599470e-09 1s 1s 403605630e-09 0s 0s 403609350e-09 0s 0s 403609710e-09 1s 1s 403615870e-09 0s 0s 403619630e-09 0s 0s 403619950e-09 1s 1s 403626110e-09 0s 0s 403629910e-09 0s 0s 403630190e-09 1s 1s 403636350e-09 0s 0s 403640190e-09 0s 0s 403640430e-09 1s 1s 403646590e-09 0s 0s 403650470e-09 0s 0s 403650670e-09 1s 1s 403656830e-09 0s 0s 403660750e-09 0s 0s 403660910e-09 1s 1s 403667070e-09 0s 0s 403671030e-09 0s 0s 403671150e-09 1s 1s 403677310e-09 0s 0s 403681310e-09 0s 0s 403681390e-09 1s 1s 403687550e-09 0s 0s 403691590e-09 0s 0s 403691630e-09 1s 1s 403697790e-09 0s 0s 403701870e-09 1s 1s 403701910e-09 1s 1s 403708070e-09 0s 0s 403712110e-09 1s 1s 403712190e-09 1s 1s 403718310e-09 0s 0s 403722350e-09 1s 1s 403722470e-09 1s 1s 403728550e-09 0s 0s 403732590e-09 1s 1s 403732750e-09 1s 1s 403738790e-09 0s 0s 403742830e-09 1s 1s 403743030e-09 1s 1s 403749030e-09 0s 0s 403753070e-09 1s 1s 403753310e-09 1s 1s 403759270e-09 0s 0s 403763310e-09 1s 1s 403763590e-09 1s 1s 403769510e-09 0s 0s 403773550e-09 1s 1s 403773870e-09 1s 1s 403779750e-09 0s 0s 403783790e-09 1s 1s 403784150e-09 1s 1s 403789990e-09 0s 0s 403794030e-09 1s 1s 403794430e-09 1s 1s 403800230e-09 0s 0s 403804270e-09 1s 1s 403804710e-09 1s 1s 403810470e-09 0s 0s 403814510e-09 1s 1s 403814990e-09 1s 1s 403820710e-09 0s 0s 403824750e-09 1s 1s 403825270e-09 1s 1s 403830950e-09 0s 0s 403834990e-09 1s 1s 403835550e-09 1s 1s 403841190e-09 0s 0s 403845230e-09 1s 1s 403845830e-09 1s 1s 403851430e-09 0s 0s 403855470e-09 1s 1s 403856110e-09 1s 1s 403861670e-09 0s 0s 403865710e-09 1s 1s 403866390e-09 1s 1s 403871910e-09 0s 0s 403875950e-09 1s 1s 403876670e-09 1s 1s 403882150e-09 0s 0s 403886190e-09 1s 1s 403886950e-09 1s 1s 403892390e-09 0s 0s 403896430e-09 1s 1s 403897230e-09 1s 1s 403902630e-09 0s 0s 403906670e-09 1s 1s 403907510e-09 1s 1s 403912870e-09 0s 0s 403916910e-09 1s 1s 403917790e-09 1s 1s 403923110e-09 0s 0s 403927150e-09 1s 1s 403928070e-09 1s 1s 403933350e-09 0s 0s 403937390e-09 1s 1s 403938350e-09 1s 1s 403943590e-09 0s 0s 403947630e-09 1s 1s 403948630e-09 1s 1s 403953830e-09 0s 0s 403957870e-09 1s 1s 403958910e-09 1s 1s 403964070e-09 0s 0s 403968110e-09 1s 1s 403969190e-09 1s 1s 403974310e-09 0s 0s 403978350e-09 1s 1s 403979470e-09 1s 1s 403984550e-09 0s 0s 403988590e-09 1s 1s 403989750e-09 1s 1s 403994790e-09 0s 0s 403998830e-09 1s 1s 404000030e-09 1s 1s 404005030e-09 0s 0s 404009070e-09 1s 1s 404010310e-09 1s 1s 404015270e-09 0s 0s 404019310e-09 1s 1s 404020590e-09 1s 1s 404025510e-09 0s 0s 404029550e-09 1s 1s 404030870e-09 1s 1s 404035750e-09 0s 0s 404039790e-09 1s 1s 404041150e-09 1s 1s 404045990e-09 0s 0s 404050030e-09 1s 1s 404051430e-09 1s 1s 404056230e-09 0s 0s 404060270e-09 1s 1s 404061710e-09 1s 1s 404066470e-09 0s 0s 404070510e-09 1s 1s 404071990e-09 1s 1s 404076710e-09 0s 0s 404080750e-09 1s 1s 404082270e-09 1s 1s 404086950e-09 0s 0s 404090990e-09 1s 1s 404092550e-09 1s 1s 404097190e-09 0s 0s 404101230e-09 1s 1s 404102830e-09 1s 1s 404107430e-09 0s 0s 404111470e-09 1s 1s 404113110e-09 1s 1s 404117670e-09 0s 0s 404121710e-09 1s 1s 404123390e-09 1s 1s 404127910e-09 0s 0s 404131950e-09 1s 1s 404133670e-09 1s 1s 404138150e-09 0s 0s 404142190e-09 1s 1s 404143950e-09 1s 1s 404148390e-09 0s 0s 404152430e-09 1s 1s 404154230e-09 1s 1s 404158630e-09 0s 0s 404162670e-09 1s 1s 404164510e-09 1s 1s 404168870e-09 0s 0s 404172910e-09 1s 1s 404174790e-09 1s 1s 404179110e-09 0s 0s 404183150e-09 1s 1s 404185070e-09 1s 1s 404189350e-09 0s 0s 404193390e-09 1s 1s 404195350e-09 1s 1s 404199590e-09 0s 0s 404203630e-09 1s 1s 404205630e-09 1s 1s 404209830e-09 0s 0s 404213870e-09 1s 1s 404215910e-09 1s 1s 404220070e-09 0s 0s 404224110e-09 1s 1s 404226190e-09 1s 1s 404230310e-09 0s 0s 404234350e-09 1s 1s 404236470e-09 1s 1s 404240550e-09 0s 0s 404244590e-09 1s 1s 404246750e-09 1s 1s 404250790e-09 0s 0s 404254830e-09 1s 1s 404257030e-09 1s 1s 404261030e-09 0s 0s 404265070e-09 1s 1s 404267310e-09 1s 1s 404271270e-09 0s 0s 404275310e-09 1s 1s 404277590e-09 1s 1s 404281510e-09 0s 0s 404285550e-09 1s 1s 404287870e-09 1s 1s 404291750e-09 0s 0s 404295790e-09 1s 1s 404298150e-09 1s 1s 404301990e-09 0s 0s 404306030e-09 1s 1s 404308430e-09 1s 1s 404312230e-09 0s 0s 404316270e-09 1s 1s 404318710e-09 1s 1s 404322470e-09 0s 0s 404326510e-09 1s 1s 404328990e-09 1s 1s 404332710e-09 0s 0s 404336750e-09 1s 1s 404339270e-09 1s 1s 404342950e-09 0s 0s 404346990e-09 1s 1s 404349550e-09 1s 1s 404353190e-09 0s 0s 404357230e-09 1s 1s 404359830e-09 1s 1s 404363430e-09 0s 0s 404367470e-09 1s 1s 404370110e-09 1s 1s 404373670e-09 0s 0s 404377710e-09 1s 1s 404380390e-09 1s 1s 404383910e-09 0s 0s 404387950e-09 1s 1s 404390670e-09 1s 1s 404394150e-09 0s 0s 404398190e-09 1s 1s 404400950e-09 1s 1s 404404390e-09 0s 0s 404408430e-09 1s 1s 404411230e-09 1s 1s 404414630e-09 0s 0s 404418670e-09 1s 1s 404421510e-09 1s 1s 404424870e-09 0s 0s 404428910e-09 1s 1s 404431790e-09 1s 1s 404435110e-09 0s 0s 404439150e-09 1s 1s 404442070e-09 1s 1s 404445350e-09 0s 0s 404449390e-09 1s 1s 404452350e-09 1s 1s 404455590e-09 0s 0s 404459630e-09 1s 1s 404462630e-09 1s 1s 404465830e-09 0s 0s 404469870e-09 1s 1s 404472910e-09 1s 1s 404476070e-09 0s 0s 404480110e-09 1s 1s 404483190e-09 1s 1s 404486310e-09 0s 0s 404490350e-09 1s 1s 404493470e-09 1s 1s 404496550e-09 0s 0s 404500590e-09 1s 1s 404503750e-09 1s 1s 404506790e-09 0s 0s 404510830e-09 1s 1s 404514030e-09 1s 1s 404517030e-09 0s 0s 404521070e-09 1s 1s 404524310e-09 1s 1s 404527270e-09 0s 0s 404531310e-09 1s 1s 404534590e-09 1s 1s 404537510e-09 0s 0s 404541550e-09 1s 1s 404544870e-09 1s 1s 404547750e-09 0s 0s 404551790e-09 1s 1s 404555150e-09 1s 1s 404557990e-09 0s 0s 404562030e-09 1s 1s 404565430e-09 1s 1s 404568230e-09 0s 0s 404572270e-09 1s 1s 404575710e-09 1s 1s 404578470e-09 0s 0s 404582510e-09 1s 1s 404585990e-09 1s 1s 404588710e-09 0s 0s 404592750e-09 1s 1s 404596270e-09 1s 1s 404598950e-09 0s 0s 404602990e-09 1s 1s 404606550e-09 1s 1s 404609190e-09 0s 0s 404613230e-09 1s 1s 404616830e-09 1s 1s 404619430e-09 0s 0s 404623470e-09 1s 1s 404627110e-09 1s 1s 404629670e-09 0s 0s 404633710e-09 1s 1s 404637390e-09 1s 1s 404639910e-09 0s 0s 404643950e-09 1s 1s 404647670e-09 1s 1s 404650150e-09 0s 0s 404654190e-09 1s 1s 404657950e-09 1s 1s 404660390e-09 0s 0s 404664430e-09 1s 1s 404668230e-09 1s 1s 404670630e-09 0s 0s 404674670e-09 1s 1s 404678510e-09 1s 1s 404680870e-09 0s 0s 404684910e-09 1s 1s 404688790e-09 1s 1s 404691110e-09 0s 0s 404695150e-09 1s 1s 404699070e-09 1s 1s 404701350e-09 0s 0s 404705390e-09 1s 1s 404709350e-09 1s 1s 404711590e-09 0s 0s 404715630e-09 1s 1s 404719630e-09 1s 1s 404721830e-09 0s 0s 404725870e-09 1s 1s 404729910e-09 1s 1s 404732070e-09 0s 0s 404736110e-09 1s 1s 404740190e-09 1s 1s 404742310e-09 0s 0s 404746350e-09 1s 1s 404750470e-09 1s 1s 404752550e-09 0s 0s 404756590e-09 1s 1s 404760750e-09 1s 1s 404762790e-09 0s 0s 404766830e-09 1s 1s 404771030e-09 1s 1s 404773030e-09 0s 0s 404777070e-09 1s 1s 404781310e-09 1s 1s 404783270e-09 0s 0s 404787310e-09 1s 1s 404791590e-09 1s 1s 404793510e-09 0s 0s 404797550e-09 1s 1s 404801870e-09 1s 1s 404803750e-09 0s 0s 404807790e-09 1s 1s 404812150e-09 1s 1s 404813990e-09 0s 0s 404818030e-09 1s 1s 404822430e-09 1s 1s 404824230e-09 0s 0s 404828270e-09 1s 1s 404832710e-09 1s 1s 404834470e-09 0s 0s 404838510e-09 1s 1s 404842990e-09 1s 1s 404844710e-09 0s 0s 404848750e-09 1s 1s 404853270e-09 1s 1s 404854950e-09 0s 0s 404858990e-09 1s 1s 404863550e-09 1s 1s 404865190e-09 0s 0s 404869230e-09 1s 1s 404873830e-09 1s 1s 404875430e-09 0s 0s 404879470e-09 1s 1s 404884110e-09 1s 1s 404885670e-09 0s 0s 404889710e-09 1s 1s 404894390e-09 1s 1s 404895910e-09 0s 0s 404899950e-09 1s 1s 404904670e-09 1s 1s 404906150e-09 0s 0s 404910190e-09 1s 1s 404914950e-09 1s 1s 404916390e-09 0s 0s 404920430e-09 1s 1s 404925230e-09 1s 1s 404926630e-09 0s 0s 404930670e-09 1s 1s 404935510e-09 1s 1s 404936870e-09 0s 0s 404940910e-09 1s 1s 404945790e-09 1s 1s 404947110e-09 0s 0s 404951150e-09 1s 1s 404956070e-09 1s 1s 404957350e-09 0s 0s 404961390e-09 1s 1s 404966350e-09 1s 1s 404967590e-09 0s 0s 404971630e-09 1s 1s 404976630e-09 1s 1s 404977830e-09 0s 0s 404981870e-09 1s 1s 404986910e-09 1s 1s 404988070e-09 0s 0s 404992110e-09 1s 1s 404997190e-09 1s 1s 404998310e-09 0s 0s 405002350e-09 1s 1s 405007470e-09 1s 1s 405008550e-09 0s 0s 405012590e-09 1s 1s 405017750e-09 1s 1s 405018790e-09 0s 0s 405022830e-09 1s 1s 405028030e-09 1s 1s 405029030e-09 0s 0s 405033070e-09 1s 1s 405038310e-09 1s 1s 405039270e-09 0s 0s 405043310e-09 1s 1s 405048590e-09 1s 1s 405049510e-09 0s 0s 405053550e-09 1s 1s 405058870e-09 1s 1s 405059750e-09 0s 0s 405063790e-09 1s 1s 405069150e-09 1s 1s 405069990e-09 0s 0s 405074030e-09 1s 1s 405079430e-09 1s 1s 405080230e-09 0s 0s 405084270e-09 1s 1s 405089710e-09 1s 1s 405090470e-09 0s 0s 405094510e-09 1s 1s 405099990e-09 1s 1s 405100710e-09 0s 0s 405104750e-09 1s 1s 405110270e-09 1s 1s 405110950e-09 0s 0s 405114990e-09 1s 1s 405120550e-09 1s 1s 405121190e-09 0s 0s 405125230e-09 1s 1s 405130830e-09 1s 1s 405131430e-09 0s 0s 405135470e-09 1s 1s 405141110e-09 1s 1s 405141670e-09 0s 0s 405145710e-09 1s 1s 405151390e-09 1s 1s 405151910e-09 0s 0s 405155950e-09 1s 1s 405161670e-09 1s 1s 405162150e-09 0s 0s 405166190e-09 1s 1s 405171950e-09 1s 1s 405172390e-09 0s 0s 405176430e-09 1s 1s 405182230e-09 1s 1s 405182630e-09 0s 0s 405186670e-09 1s 1s 405192510e-09 1s 1s 405192870e-09 0s 0s 405196910e-09 1s 1s 405202790e-09 1s 1s 405203110e-09 0s 0s 405207150e-09 1s 1s 405213070e-09 1s 1s 405213350e-09 0s 0s 405217390e-09 1s 1s 405223350e-09 1s 1s 405223590e-09 0s 0s 405227630e-09 1s 1s 405233630e-09 1s 1s 405233830e-09 0s 0s 405237870e-09 1s 1s 405243910e-09 1s 1s 405244070e-09 0s 0s 405248110e-09 1s 1s 405254190e-09 1s 1s 405254310e-09 0s 0s 405258350e-09 1s 1s 405264470e-09 1s 1s 405264550e-09 0s 0s 405268590e-09 1s 1s 405274750e-09 1s 1s 405274790e-09 0s 0s 405278830e-09 1s 1s 405285030e-09 0s 0s 405289070e-09 1s 1s 405295270e-09 0s 0s 405295310e-09 0s 0s 405299310e-09 1s 1s 405305510e-09 0s 0s 405305590e-09 0s 0s 405309550e-09 1s 1s 405315750e-09 0s 0s 405315870e-09 0s 0s 405319790e-09 1s 1s 405325990e-09 0s 0s 405326150e-09 0s 0s 405330030e-09 1s 1s 405336230e-09 0s 0s 405336430e-09 0s 0s 405340270e-09 1s 1s 405346470e-09 0s 0s 405346710e-09 0s 0s 405350510e-09 1s 1s 405356710e-09 0s 0s 405356990e-09 0s 0s 405360750e-09 1s 1s 405366950e-09 0s 0s 405367270e-09 0s 0s 405370990e-09 1s 1s 405377190e-09 0s 0s 405377550e-09 0s 0s 405381230e-09 1s 1s 405387430e-09 0s 0s 405387830e-09 0s 0s 405391470e-09 1s 1s 405397670e-09 0s 0s 405398110e-09 0s 0s 405401710e-09 1s 1s 405407910e-09 0s 0s 405408390e-09 0s 0s 405411950e-09 1s 1s 405418150e-09 0s 0s 405418670e-09 0s 0s 405422190e-09 1s 1s 405428390e-09 0s 0s 405428950e-09 0s 0s 405432430e-09 1s 1s 405438630e-09 0s 0s 405439230e-09 0s 0s 405442670e-09 1s 1s 405448870e-09 0s 0s 405449510e-09 0s 0s 405452910e-09 1s 1s 405459110e-09 0s 0s 405459790e-09 0s 0s 405463150e-09 1s 1s 405469350e-09 0s 0s 405470070e-09 0s 0s 405473390e-09 1s 1s 405479590e-09 0s 0s 405480350e-09 0s 0s 405483630e-09 1s 1s 405489830e-09 0s 0s 405490630e-09 0s 0s 405493870e-09 1s 1s 405500070e-09 0s 0s 405500910e-09 0s 0s 405504110e-09 1s 1s 405510310e-09 0s 0s 405511190e-09 0s 0s 405514350e-09 1s 1s 405520550e-09 0s 0s 405521470e-09 0s 0s 405524590e-09 1s 1s 405530790e-09 0s 0s 405531750e-09 0s 0s 405534830e-09 1s 1s 405541030e-09 0s 0s 405542030e-09 0s 0s 405545070e-09 1s 1s 405551270e-09 0s 0s 405552310e-09 0s 0s 405555310e-09 1s 1s 405561510e-09 0s 0s 405562590e-09 0s 0s 405565550e-09 1s 1s 405571750e-09 0s 0s 405572870e-09 0s 0s 405575790e-09 1s 1s 405581990e-09 0s 0s 405583150e-09 0s 0s 405586030e-09 1s 1s 405592230e-09 0s 0s 405593430e-09 0s 0s 405596270e-09 1s 1s 405602470e-09 0s 0s 405603710e-09 0s 0s 405606510e-09 1s 1s 405612710e-09 0s 0s 405613990e-09 0s 0s 405616750e-09 1s 1s 405622950e-09 0s 0s 405624270e-09 0s 0s 405626990e-09 1s 1s 405633190e-09 0s 0s 405634550e-09 0s 0s 405637230e-09 1s 1s 405643430e-09 0s 0s 405644830e-09 0s 0s 405647470e-09 1s 1s 405653670e-09 0s 0s 405655110e-09 0s 0s 405657710e-09 1s 1s 405663910e-09 0s 0s 405665390e-09 0s 0s 405667950e-09 1s 1s 405674150e-09 0s 0s 405675670e-09 0s 0s 405678190e-09 1s 1s 405684390e-09 0s 0s 405685950e-09 0s 0s 405688430e-09 1s 1s 405694630e-09 0s 0s 405696230e-09 0s 0s 405698670e-09 1s 1s 405704870e-09 0s 0s 405706510e-09 0s 0s 405708910e-09 1s 1s 405715110e-09 0s 0s 405716790e-09 0s 0s 405719150e-09 1s 1s 405725350e-09 0s 0s 405727070e-09 0s 0s 405729390e-09 1s 1s 405735590e-09 0s 0s 405737350e-09 0s 0s 405739630e-09 1s 1s 405745830e-09 0s 0s 405747630e-09 0s 0s 405749870e-09 1s 1s 405756070e-09 0s 0s 405757910e-09 0s 0s 405760110e-09 1s 1s 405766310e-09 0s 0s 405768190e-09 0s 0s 405770350e-09 1s 1s 405776550e-09 0s 0s 405778470e-09 0s 0s 405780590e-09 1s 1s 405786790e-09 0s 0s 405788750e-09 0s 0s 405790830e-09 1s 1s 405797030e-09 0s 0s 405799030e-09 0s 0s 405801070e-09 1s 1s 405807270e-09 0s 0s 405809310e-09 0s 0s 405811310e-09 1s 1s 405817510e-09 0s 0s 405819590e-09 0s 0s 405821550e-09 1s 1s 405827750e-09 0s 0s 405829870e-09 0s 0s 405831790e-09 1s 1s 405837990e-09 0s 0s 405840150e-09 0s 0s 405842030e-09 1s 1s 405848230e-09 0s 0s 405850430e-09 0s 0s 405852270e-09 1s 1s 405858470e-09 0s 0s 405860710e-09 0s 0s 405862510e-09 1s 1s 405868710e-09 0s 0s 405870990e-09 0s 0s 405872750e-09 1s 1s 405878950e-09 0s 0s 405881270e-09 0s 0s 405882990e-09 1s 1s 405889190e-09 0s 0s 405891550e-09 0s 0s 405893230e-09 1s 1s 405899430e-09 0s 0s 405901830e-09 0s 0s 405903470e-09 1s 1s 405909670e-09 0s 0s 405912110e-09 0s 0s 405913710e-09 1s 1s 405919910e-09 0s 0s 405922390e-09 0s 0s 405923950e-09 1s 1s 405930150e-09 0s 0s 405932670e-09 0s 0s 405934190e-09 1s 1s 405940390e-09 0s 0s 405942950e-09 0s 0s 405944430e-09 1s 1s 405950630e-09 0s 0s 405953230e-09 0s 0s 405954670e-09 1s 1s 405960870e-09 0s 0s 405963510e-09 0s 0s 405964910e-09 1s 1s 405971110e-09 0s 0s 405973790e-09 0s 0s 405975150e-09 1s 1s 405981350e-09 0s 0s 405984070e-09 0s 0s 405985390e-09 1s 1s 405991590e-09 0s 0s 405994350e-09 0s 0s 405995630e-09 1s 1s 406001830e-09 0s 0s 406004630e-09 0s 0s 406005870e-09 1s 1s 406012070e-09 0s 0s 406014910e-09 0s 0s 406016110e-09 1s 1s 406022310e-09 0s 0s 406025190e-09 0s 0s 406026350e-09 1s 1s 406032550e-09 0s 0s 406035470e-09 0s 0s 406036590e-09 1s 1s 406042790e-09 0s 0s 406045750e-09 0s 0s 406046830e-09 1s 1s 406053030e-09 0s 0s 406056030e-09 0s 0s 406057070e-09 1s 1s 406063270e-09 0s 0s 406066310e-09 0s 0s 406067310e-09 1s 1s 406073510e-09 0s 0s 406076590e-09 0s 0s 406077550e-09 1s 1s 406083750e-09 0s 0s 406086870e-09 0s 0s 406087790e-09 1s 1s 406093990e-09 0s 0s 406097150e-09 0s 0s 406098030e-09 1s 1s 406104230e-09 0s 0s 406107430e-09 0s 0s 406108270e-09 1s 1s 406114470e-09 0s 0s 406117710e-09 0s 0s 406118510e-09 1s 1s 406124710e-09 0s 0s 406127990e-09 0s 0s 406128750e-09 1s 1s 406134950e-09 0s 0s 406138270e-09 0s 0s 406138990e-09 1s 1s 406145190e-09 0s 0s 406148550e-09 0s 0s 406149230e-09 1s 1s 406155430e-09 0s 0s 406158830e-09 0s 0s 406159470e-09 1s 1s 406165670e-09 0s 0s 406169110e-09 0s 0s 406169710e-09 1s 1s 406175910e-09 0s 0s 406179390e-09 0s 0s 406179950e-09 1s 1s 406186150e-09 0s 0s 406189670e-09 0s 0s 406190190e-09 1s 1s 406196390e-09 0s 0s 406199950e-09 0s 0s 406200430e-09 1s 1s 406206630e-09 0s 0s 406210230e-09 0s 0s 406210670e-09 1s 1s 406216870e-09 0s 0s 406220510e-09 0s 0s 406220910e-09 1s 1s 406227110e-09 0s 0s 406230790e-09 0s 0s 406231150e-09 1s 1s 406237350e-09 0s 0s 406241070e-09 0s 0s 406241390e-09 1s 1s 406247590e-09 0s 0s 406251350e-09 0s 0s 406251630e-09 1s 1s 406257830e-09 0s 0s 406261630e-09 0s 0s 406261870e-09 1s 1s 406268070e-09 0s 0s 406271910e-09 0s 0s 406272110e-09 1s 1s 406278310e-09 0s 0s 406282190e-09 0s 0s 406282350e-09 1s 1s 406288550e-09 0s 0s 406292470e-09 0s 0s 406292590e-09 1s 1s 406298790e-09 0s 0s 406302750e-09 0s 0s 406302830e-09 1s 1s 406309030e-09 0s 0s 406313030e-09 0s 0s 406313070e-09 1s 1s 406319270e-09 0s 0s 406323310e-09 1s 1s 406323350e-09 1s 1s 406329550e-09 0s 0s 406333550e-09 1s 1s 406333630e-09 1s 1s 406339790e-09 0s 0s 406343790e-09 1s 1s 406343910e-09 1s 1s 406350030e-09 0s 0s 406354030e-09 1s 1s 406354190e-09 1s 1s 406360270e-09 0s 0s 406364270e-09 1s 1s 406364470e-09 1s 1s 406370510e-09 0s 0s 406374510e-09 1s 1s 406374750e-09 1s 1s 406380750e-09 0s 0s 406384750e-09 1s 1s 406385030e-09 1s 1s 406390990e-09 0s 0s 406394990e-09 1s 1s 406395310e-09 1s 1s 406401230e-09 0s 0s 406405230e-09 1s 1s 406405590e-09 1s 1s 406411470e-09 0s 0s 406415470e-09 1s 1s 406415870e-09 1s 1s 406421710e-09 0s 0s 406425710e-09 1s 1s 406426150e-09 1s 1s 406431950e-09 0s 0s 406435950e-09 1s 1s 406436430e-09 1s 1s 406442190e-09 0s 0s 406446190e-09 1s 1s 406446710e-09 1s 1s 406452430e-09 0s 0s 406456430e-09 1s 1s 406456990e-09 1s 1s 406462670e-09 0s 0s 406466670e-09 1s 1s 406467270e-09 1s 1s 406472910e-09 0s 0s 406476910e-09 1s 1s 406477550e-09 1s 1s 406483150e-09 0s 0s 406487150e-09 1s 1s 406487830e-09 1s 1s 406493390e-09 0s 0s 406497390e-09 1s 1s 406498110e-09 1s 1s 406503630e-09 0s 0s 406507630e-09 1s 1s 406508390e-09 1s 1s 406513870e-09 0s 0s 406517870e-09 1s 1s 406518670e-09 1s 1s 406524110e-09 0s 0s 406528110e-09 1s 1s 406528950e-09 1s 1s 406534350e-09 0s 0s 406538350e-09 1s 1s 406539230e-09 1s 1s 406544590e-09 0s 0s 406548590e-09 1s 1s 406549510e-09 1s 1s 406554830e-09 0s 0s 406558830e-09 1s 1s 406559790e-09 1s 1s 406565070e-09 0s 0s 406569070e-09 1s 1s 406570070e-09 1s 1s 406575310e-09 0s 0s 406579310e-09 1s 1s 406580350e-09 1s 1s 406585550e-09 0s 0s 406589550e-09 1s 1s 406590630e-09 1s 1s 406595790e-09 0s 0s 406599790e-09 1s 1s 406600910e-09 1s 1s 406606030e-09 0s 0s 406610030e-09 1s 1s 406611190e-09 1s 1s 406616270e-09 0s 0s 406620270e-09 1s 1s 406621470e-09 1s 1s 406626510e-09 0s 0s 406630510e-09 1s 1s 406631750e-09 1s 1s 406636750e-09 0s 0s 406640750e-09 1s 1s 406642030e-09 1s 1s 406646990e-09 0s 0s 406650990e-09 1s 1s 406652310e-09 1s 1s 406657230e-09 0s 0s 406661230e-09 1s 1s 406662590e-09 1s 1s 406667470e-09 0s 0s 406671470e-09 1s 1s 406672870e-09 1s 1s 406677710e-09 0s 0s 406681710e-09 1s 1s 406683150e-09 1s 1s 406687950e-09 0s 0s 406691950e-09 1s 1s 406693430e-09 1s 1s 406698190e-09 0s 0s 406702190e-09 1s 1s 406703710e-09 1s 1s 406708430e-09 0s 0s 406712430e-09 1s 1s 406713990e-09 1s 1s 406718670e-09 0s 0s 406722670e-09 1s 1s 406724270e-09 1s 1s 406728910e-09 0s 0s 406732910e-09 1s 1s 406734550e-09 1s 1s 406739150e-09 0s 0s 406743150e-09 1s 1s 406744830e-09 1s 1s 406749390e-09 0s 0s 406753390e-09 1s 1s 406755110e-09 1s 1s 406759630e-09 0s 0s 406763630e-09 1s 1s 406765390e-09 1s 1s 406769870e-09 0s 0s 406773870e-09 1s 1s 406775670e-09 1s 1s 406780110e-09 0s 0s 406784110e-09 1s 1s 406785950e-09 1s 1s 406790350e-09 0s 0s 406794350e-09 1s 1s 406796230e-09 1s 1s 406800590e-09 0s 0s 406804590e-09 1s 1s 406806510e-09 1s 1s 406810830e-09 0s 0s 406814830e-09 1s 1s 406816790e-09 1s 1s 406821070e-09 0s 0s 406825070e-09 1s 1s 406827070e-09 1s 1s 406831310e-09 0s 0s 406835310e-09 1s 1s 406837350e-09 1s 1s 406841550e-09 0s 0s 406845550e-09 1s 1s 406847630e-09 1s 1s 406851790e-09 0s 0s 406855790e-09 1s 1s 406857910e-09 1s 1s 406862030e-09 0s 0s 406866030e-09 1s 1s 406868190e-09 1s 1s 406872270e-09 0s 0s 406876270e-09 1s 1s 406878470e-09 1s 1s 406882510e-09 0s 0s 406886510e-09 1s 1s 406888750e-09 1s 1s 406892750e-09 0s 0s 406896750e-09 1s 1s 406899030e-09 1s 1s 406902990e-09 0s 0s 406906990e-09 1s 1s 406909310e-09 1s 1s 406913230e-09 0s 0s 406917230e-09 1s 1s 406919590e-09 1s 1s 406923470e-09 0s 0s 406927470e-09 1s 1s 406929870e-09 1s 1s 406933710e-09 0s 0s 406937710e-09 1s 1s 406940150e-09 1s 1s 406943950e-09 0s 0s 406947950e-09 1s 1s 406950430e-09 1s 1s 406954190e-09 0s 0s 406958190e-09 1s 1s 406960710e-09 1s 1s 406964430e-09 0s 0s 406968430e-09 1s 1s 406970990e-09 1s 1s 406974670e-09 0s 0s 406978670e-09 1s 1s 406981270e-09 1s 1s 406984910e-09 0s 0s 406988910e-09 1s 1s 406991550e-09 1s 1s 406995150e-09 0s 0s 406999150e-09 1s 1s 407001830e-09 1s 1s 407005390e-09 0s 0s 407009390e-09 1s 1s 407012110e-09 1s 1s 407015630e-09 0s 0s 407019630e-09 1s 1s 407022390e-09 1s 1s 407025870e-09 0s 0s 407029870e-09 1s 1s 407032670e-09 1s 1s 407036110e-09 0s 0s 407040110e-09 1s 1s 407042950e-09 1s 1s 407046350e-09 0s 0s 407050350e-09 1s 1s 407053230e-09 1s 1s 407056590e-09 0s 0s 407060590e-09 1s 1s 407063510e-09 1s 1s 407066830e-09 0s 0s 407070830e-09 1s 1s 407073790e-09 1s 1s 407077070e-09 0s 0s 407081070e-09 1s 1s 407084070e-09 1s 1s 407087310e-09 0s 0s 407091310e-09 1s 1s 407094350e-09 1s 1s 407097550e-09 0s 0s 407101550e-09 1s 1s 407104630e-09 1s 1s 407107790e-09 0s 0s 407111790e-09 1s 1s 407114910e-09 1s 1s 407118030e-09 0s 0s 407122030e-09 1s 1s 407125190e-09 1s 1s 407128270e-09 0s 0s 407132270e-09 1s 1s 407135470e-09 1s 1s 407138510e-09 0s 0s 407142510e-09 1s 1s 407145750e-09 1s 1s 407148750e-09 0s 0s 407152750e-09 1s 1s 407156030e-09 1s 1s 407158990e-09 0s 0s 407162990e-09 1s 1s 407166310e-09 1s 1s 407169230e-09 0s 0s 407173230e-09 1s 1s 407176590e-09 1s 1s 407179470e-09 0s 0s 407183470e-09 1s 1s 407186870e-09 1s 1s 407189710e-09 0s 0s 407193710e-09 1s 1s 407197150e-09 1s 1s 407199950e-09 0s 0s 407203950e-09 1s 1s 407207430e-09 1s 1s 407210190e-09 0s 0s 407214190e-09 1s 1s 407217710e-09 1s 1s 407220430e-09 0s 0s 407224430e-09 1s 1s 407227990e-09 1s 1s 407230670e-09 0s 0s 407234670e-09 1s 1s 407238270e-09 1s 1s 407240910e-09 0s 0s 407244910e-09 1s 1s 407248550e-09 1s 1s 407251150e-09 0s 0s 407255150e-09 1s 1s 407258830e-09 1s 1s 407261390e-09 0s 0s 407265390e-09 1s 1s 407269110e-09 1s 1s 407271630e-09 0s 0s 407275630e-09 1s 1s 407279390e-09 1s 1s 407281870e-09 0s 0s 407285870e-09 1s 1s 407289670e-09 1s 1s 407292110e-09 0s 0s 407296110e-09 1s 1s 407299950e-09 1s 1s 407302350e-09 0s 0s 407306350e-09 1s 1s 407310230e-09 1s 1s 407312590e-09 0s 0s 407316590e-09 1s 1s 407320510e-09 1s 1s 407322830e-09 0s 0s 407326830e-09 1s 1s 407330790e-09 1s 1s 407333070e-09 0s 0s 407337070e-09 1s 1s 407341070e-09 1s 1s 407343310e-09 0s 0s 407347310e-09 1s 1s 407351350e-09 1s 1s 407353550e-09 0s 0s 407357550e-09 1s 1s 407361630e-09 1s 1s 407363790e-09 0s 0s 407367790e-09 1s 1s 407371910e-09 1s 1s 407374030e-09 0s 0s 407378030e-09 1s 1s 407382190e-09 1s 1s 407384270e-09 0s 0s 407388270e-09 1s 1s 407392470e-09 1s 1s 407394510e-09 0s 0s 407398510e-09 1s 1s 407402750e-09 1s 1s 407404750e-09 0s 0s 407408750e-09 1s 1s 407413030e-09 1s 1s 407414990e-09 0s 0s 407418990e-09 1s 1s 407423310e-09 1s 1s 407425230e-09 0s 0s 407429230e-09 1s 1s 407433590e-09 1s 1s 407435470e-09 0s 0s 407439470e-09 1s 1s 407443870e-09 1s 1s 407445710e-09 0s 0s 407449710e-09 1s 1s 407454150e-09 1s 1s 407455950e-09 0s 0s 407459950e-09 1s 1s 407464430e-09 1s 1s 407466190e-09 0s 0s 407470190e-09 1s 1s 407474710e-09 1s 1s 407476430e-09 0s 0s 407480430e-09 1s 1s 407484990e-09 1s 1s 407486670e-09 0s 0s 407490670e-09 1s 1s 407495270e-09 1s 1s 407496910e-09 0s 0s 407500910e-09 1s 1s 407505550e-09 1s 1s 407507150e-09 0s 0s 407511150e-09 1s 1s 407515830e-09 1s 1s 407517390e-09 0s 0s 407521390e-09 1s 1s 407526110e-09 1s 1s 407527630e-09 0s 0s 407531630e-09 1s 1s 407536390e-09 1s 1s 407537870e-09 0s 0s 407541870e-09 1s 1s 407546670e-09 1s 1s 407548110e-09 0s 0s 407552110e-09 1s 1s 407556950e-09 1s 1s 407558350e-09 0s 0s 407562350e-09 1s 1s 407567230e-09 1s 1s 407568590e-09 0s 0s 407572590e-09 1s 1s 407577510e-09 1s 1s 407578830e-09 0s 0s 407582830e-09 1s 1s 407587790e-09 1s 1s 407589070e-09 0s 0s 407593070e-09 1s 1s 407598070e-09 1s 1s 407599310e-09 0s 0s 407603310e-09 1s 1s 407608350e-09 1s 1s 407609550e-09 0s 0s 407613550e-09 1s 1s 407618630e-09 1s 1s 407619790e-09 0s 0s 407623790e-09 1s 1s 407628910e-09 1s 1s 407630030e-09 0s 0s 407634030e-09 1s 1s 407639190e-09 1s 1s 407640270e-09 0s 0s 407644270e-09 1s 1s 407649470e-09 1s 1s 407650510e-09 0s 0s 407654510e-09 1s 1s 407659750e-09 1s 1s 407660750e-09 0s 0s 407664750e-09 1s 1s 407670030e-09 1s 1s 407670990e-09 0s 0s 407674990e-09 1s 1s 407680310e-09 1s 1s 407681230e-09 0s 0s 407685230e-09 1s 1s 407690590e-09 1s 1s 407691470e-09 0s 0s 407695470e-09 1s 1s 407700870e-09 1s 1s 407701710e-09 0s 0s 407705710e-09 1s 1s 407711150e-09 1s 1s 407711950e-09 0s 0s 407715950e-09 1s 1s 407721430e-09 1s 1s 407722190e-09 0s 0s 407726190e-09 1s 1s 407731710e-09 1s 1s 407732430e-09 0s 0s 407736430e-09 1s 1s 407741990e-09 1s 1s 407742670e-09 0s 0s 407746670e-09 1s 1s 407752270e-09 1s 1s 407752910e-09 0s 0s 407756910e-09 1s 1s 407762550e-09 1s 1s 407763150e-09 0s 0s 407767150e-09 1s 1s 407772830e-09 1s 1s 407773390e-09 0s 0s 407777390e-09 1s 1s 407783110e-09 1s 1s 407783630e-09 0s 0s 407787630e-09 1s 1s 407793390e-09 1s 1s 407793870e-09 0s 0s 407797870e-09 1s 1s 407803670e-09 1s 1s 407804110e-09 0s 0s 407808110e-09 1s 1s 407813950e-09 1s 1s 407814350e-09 0s 0s 407818350e-09 1s 1s 407824230e-09 1s 1s 407824590e-09 0s 0s 407828590e-09 1s 1s 407834510e-09 1s 1s 407834830e-09 0s 0s 407838830e-09 1s 1s 407844790e-09 1s 1s 407845070e-09 0s 0s 407849070e-09 1s 1s 407855070e-09 1s 1s 407855310e-09 0s 0s 407859310e-09 1s 1s 407865350e-09 1s 1s 407865550e-09 0s 0s 407869550e-09 1s 1s 407875630e-09 1s 1s 407875790e-09 0s 0s 407879790e-09 1s 1s 407885910e-09 1s 1s 407886030e-09 0s 0s 407890030e-09 1s 1s 407896190e-09 1s 1s 407896270e-09 0s 0s 407900270e-09 1s 1s 407906470e-09 1s 1s 407906510e-09 0s 0s 407910510e-09 1s 1s 407916750e-09 0s 0s 407920750e-09 1s 1s 407926990e-09 0s 0s 407927030e-09 0s 0s 407930990e-09 1s 1s 407937230e-09 0s 0s 407937310e-09 0s 0s 407941230e-09 1s 1s 407947470e-09 0s 0s 407947590e-09 0s 0s 407951470e-09 1s 1s 407957710e-09 0s 0s 407957870e-09 0s 0s 407961710e-09 1s 1s 407967950e-09 0s 0s 407968150e-09 0s 0s 407971950e-09 1s 1s 407978190e-09 0s 0s 407978430e-09 0s 0s 407982190e-09 1s 1s 407988430e-09 0s 0s 407988710e-09 0s 0s 407992430e-09 1s 1s 407998670e-09 0s 0s 407998990e-09 0s 0s 408002670e-09 1s 1s 408008910e-09 0s 0s 408009270e-09 0s 0s 408012910e-09 1s 1s 408019150e-09 0s 0s 408019550e-09 0s 0s 408023150e-09 1s 1s 408029390e-09 0s 0s 408029830e-09 0s 0s 408033390e-09 1s 1s 408039630e-09 0s 0s 408040110e-09 0s 0s 408043630e-09 1s 1s 408049870e-09 0s 0s 408050390e-09 0s 0s 408053870e-09 1s 1s 408060110e-09 0s 0s 408060670e-09 0s 0s 408064110e-09 1s 1s 408070350e-09 0s 0s 408070950e-09 0s 0s 408074350e-09 1s 1s 408080590e-09 0s 0s 408081230e-09 0s 0s 408084590e-09 1s 1s 408090830e-09 0s 0s 408091510e-09 0s 0s 408094830e-09 1s 1s 408101070e-09 0s 0s 408101790e-09 0s 0s 408105070e-09 1s 1s 408111310e-09 0s 0s 408112070e-09 0s 0s 408115310e-09 1s 1s 408121550e-09 0s 0s 408122350e-09 0s 0s 408125550e-09 1s 1s 408131790e-09 0s 0s 408132630e-09 0s 0s 408135790e-09 1s 1s 408142030e-09 0s 0s 408142910e-09 0s 0s 408146030e-09 1s 1s 408152270e-09 0s 0s 408153190e-09 0s 0s 408156270e-09 1s 1s 408162510e-09 0s 0s 408163470e-09 0s 0s 408166510e-09 1s 1s 408172750e-09 0s 0s 408173750e-09 0s 0s 408176750e-09 1s 1s 408182990e-09 0s 0s 408184030e-09 0s 0s 408186990e-09 1s 1s 408193230e-09 0s 0s 408194310e-09 0s 0s 408197230e-09 1s 1s 408203470e-09 0s 0s 408204590e-09 0s 0s 408207470e-09 1s 1s 408213710e-09 0s 0s 408214870e-09 0s 0s 408217710e-09 1s 1s 408223950e-09 0s 0s 408225150e-09 0s 0s 408227950e-09 1s 1s 408234190e-09 0s 0s 408235430e-09 0s 0s 408238190e-09 1s 1s 408244430e-09 0s 0s 408245710e-09 0s 0s 408248430e-09 1s 1s 408254670e-09 0s 0s 408255990e-09 0s 0s 408258670e-09 1s 1s 408264910e-09 0s 0s 408266270e-09 0s 0s 408268910e-09 1s 1s 408275150e-09 0s 0s 408276550e-09 0s 0s 408279150e-09 1s 1s 408285390e-09 0s 0s 408286830e-09 0s 0s 408289390e-09 1s 1s 408295630e-09 0s 0s 408297110e-09 0s 0s 408299630e-09 1s 1s 408305870e-09 0s 0s 408307390e-09 0s 0s 408309870e-09 1s 1s 408316110e-09 0s 0s 408317670e-09 0s 0s 408320110e-09 1s 1s 408326350e-09 0s 0s 408327950e-09 0s 0s 408330350e-09 1s 1s 408336590e-09 0s 0s 408338230e-09 0s 0s 408340590e-09 1s 1s 408346830e-09 0s 0s 408348510e-09 0s 0s 408350830e-09 1s 1s 408357070e-09 0s 0s 408358790e-09 0s 0s 408361070e-09 1s 1s 408367310e-09 0s 0s 408369070e-09 0s 0s 408371310e-09 1s 1s 408377550e-09 0s 0s 408379350e-09 0s 0s 408381550e-09 1s 1s 408387790e-09 0s 0s 408389630e-09 0s 0s 408391790e-09 1s 1s 408398030e-09 0s 0s 408399910e-09 0s 0s 408402030e-09 1s 1s 408408270e-09 0s 0s 408410190e-09 0s 0s 408412270e-09 1s 1s 408418510e-09 0s 0s 408420470e-09 0s 0s 408422510e-09 1s 1s 408428750e-09 0s 0s 408430750e-09 0s 0s 408432750e-09 1s 1s 408438990e-09 0s 0s 408441030e-09 0s 0s 408442990e-09 1s 1s 408449230e-09 0s 0s 408451310e-09 0s 0s 408453230e-09 1s 1s 408459470e-09 0s 0s 408461590e-09 0s 0s 408463470e-09 1s 1s 408469710e-09 0s 0s 408471870e-09 0s 0s 408473710e-09 1s 1s 408479950e-09 0s 0s 408482150e-09 0s 0s 408483950e-09 1s 1s 408490190e-09 0s 0s 408492430e-09 0s 0s 408494190e-09 1s 1s 408500430e-09 0s 0s 408502710e-09 0s 0s 408504430e-09 1s 1s 408510670e-09 0s 0s 408512990e-09 0s 0s 408514670e-09 1s 1s 408520910e-09 0s 0s 408523270e-09 0s 0s 408524910e-09 1s 1s 408531150e-09 0s 0s 408533550e-09 0s 0s 408535150e-09 1s 1s 408541390e-09 0s 0s 408543830e-09 0s 0s 408545390e-09 1s 1s 408551630e-09 0s 0s 408554110e-09 0s 0s 408555630e-09 1s 1s 408561870e-09 0s 0s 408564390e-09 0s 0s 408565870e-09 1s 1s 408572110e-09 0s 0s 408574670e-09 0s 0s 408576110e-09 1s 1s 408582350e-09 0s 0s 408584950e-09 0s 0s 408586350e-09 1s 1s 408592590e-09 0s 0s 408595230e-09 0s 0s 408596590e-09 1s 1s 408602830e-09 0s 0s 408605510e-09 0s 0s 408606830e-09 1s 1s 408613070e-09 0s 0s 408615790e-09 0s 0s 408617070e-09 1s 1s 408623310e-09 0s 0s 408626070e-09 0s 0s 408627310e-09 1s 1s 408633550e-09 0s 0s 408636350e-09 0s 0s 408637550e-09 1s 1s 408643790e-09 0s 0s 408646630e-09 0s 0s 408647790e-09 1s 1s 408654030e-09 0s 0s 408656910e-09 0s 0s 408658030e-09 1s 1s 408664270e-09 0s 0s 408667190e-09 0s 0s 408668270e-09 1s 1s 408674510e-09 0s 0s 408677470e-09 0s 0s 408678510e-09 1s 1s 408684750e-09 0s 0s 408687750e-09 0s 0s 408688750e-09 1s 1s 408694990e-09 0s 0s 408698030e-09 0s 0s 408698990e-09 1s 1s 408705230e-09 0s 0s 408708310e-09 0s 0s 408709230e-09 1s 1s 408715470e-09 0s 0s 408718590e-09 0s 0s 408719470e-09 1s 1s 408725710e-09 0s 0s 408728870e-09 0s 0s 408729710e-09 1s 1s 408735950e-09 0s 0s 408739150e-09 0s 0s 408739950e-09 1s 1s 408746190e-09 0s 0s 408749430e-09 0s 0s 408750190e-09 1s 1s 408756430e-09 0s 0s 408759710e-09 0s 0s 408760430e-09 1s 1s 408766670e-09 0s 0s 408769990e-09 0s 0s 408770670e-09 1s 1s 408776910e-09 0s 0s 408780270e-09 0s 0s 408780910e-09 1s 1s 408787150e-09 0s 0s 408790550e-09 0s 0s 408791150e-09 1s 1s 408797390e-09 0s 0s 408800830e-09 0s 0s 408801390e-09 1s 1s 408807630e-09 0s 0s 408811110e-09 0s 0s 408811630e-09 1s 1s 408817870e-09 0s 0s 408821390e-09 0s 0s 408821870e-09 1s 1s 408828110e-09 0s 0s 408831670e-09 0s 0s 408832110e-09 1s 1s 408838350e-09 0s 0s 408841950e-09 0s 0s 408842350e-09 1s 1s 408848590e-09 0s 0s 408852230e-09 0s 0s 408852590e-09 1s 1s 408858830e-09 0s 0s 408862510e-09 0s 0s 408862830e-09 1s 1s 408869070e-09 0s 0s 408872790e-09 0s 0s 408873070e-09 1s 1s 408879310e-09 0s 0s 408883070e-09 0s 0s 408883310e-09 1s 1s 408889550e-09 0s 0s 408893350e-09 0s 0s 408893550e-09 1s 1s 408899790e-09 0s 0s 408903630e-09 0s 0s 408903790e-09 1s 1s 408910030e-09 0s 0s 408913910e-09 0s 0s 408914030e-09 1s 1s 408920270e-09 0s 0s 408924190e-09 0s 0s 408924270e-09 1s 1s 408930510e-09 0s 0s 408934470e-09 0s 0s 408934510e-09 1s 1s 408940750e-09 0s 0s 408944750e-09 1s 1s 408944790e-09 1s 1s 408951030e-09 0s 0s 408954990e-09 1s 1s 408955070e-09 1s 1s 408961270e-09 0s 0s 408965230e-09 1s 1s 408965350e-09 1s 1s 408971510e-09 0s 0s 408975470e-09 1s 1s 408975630e-09 1s 1s 408981750e-09 0s 0s 408985710e-09 1s 1s 408985910e-09 1s 1s 408991990e-09 0s 0s 408995950e-09 1s 1s 408996190e-09 1s 1s 409002230e-09 0s 0s 409006190e-09 1s 1s 409006470e-09 1s 1s 409012470e-09 0s 0s 409016430e-09 1s 1s 409016750e-09 1s 1s 409022710e-09 0s 0s 409026670e-09 1s 1s 409027030e-09 1s 1s 409032950e-09 0s 0s 409036910e-09 1s 1s 409037310e-09 1s 1s 409043190e-09 0s 0s 409047150e-09 1s 1s 409047590e-09 1s 1s 409053430e-09 0s 0s 409057390e-09 1s 1s 409057870e-09 1s 1s 409063670e-09 0s 0s 409067630e-09 1s 1s 409068150e-09 1s 1s 409073910e-09 0s 0s 409077870e-09 1s 1s 409078430e-09 1s 1s 409084150e-09 0s 0s 409088110e-09 1s 1s 409088710e-09 1s 1s 409094390e-09 0s 0s 409098350e-09 1s 1s 409098990e-09 1s 1s 409104630e-09 0s 0s 409108590e-09 1s 1s 409109270e-09 1s 1s 409114870e-09 0s 0s 409118830e-09 1s 1s 409119550e-09 1s 1s 409125110e-09 0s 0s 409129070e-09 1s 1s 409129830e-09 1s 1s 409135350e-09 0s 0s 409139310e-09 1s 1s 409140110e-09 1s 1s 409145590e-09 0s 0s 409149550e-09 1s 1s 409150390e-09 1s 1s 409155830e-09 0s 0s 409159790e-09 1s 1s 409160670e-09 1s 1s 409166070e-09 0s 0s 409170030e-09 1s 1s 409170950e-09 1s 1s 409176310e-09 0s 0s 409180270e-09 1s 1s 409181230e-09 1s 1s 409186550e-09 0s 0s 409190510e-09 1s 1s 409191510e-09 1s 1s 409196790e-09 0s 0s 409200750e-09 1s 1s 409201790e-09 1s 1s 409207030e-09 0s 0s 409210990e-09 1s 1s 409212070e-09 1s 1s 409217270e-09 0s 0s 409221230e-09 1s 1s 409222350e-09 1s 1s 409227510e-09 0s 0s 409231470e-09 1s 1s 409232630e-09 1s 1s 409237750e-09 0s 0s 409241710e-09 1s 1s 409242910e-09 1s 1s 409247990e-09 0s 0s 409251950e-09 1s 1s 409253190e-09 1s 1s 409258230e-09 0s 0s 409262190e-09 1s 1s 409263470e-09 1s 1s 409268470e-09 0s 0s 409272430e-09 1s 1s 409273750e-09 1s 1s 409278710e-09 0s 0s 409282670e-09 1s 1s 409284030e-09 1s 1s 409288950e-09 0s 0s 409292910e-09 1s 1s 409294310e-09 1s 1s 409299190e-09 0s 0s 409303150e-09 1s 1s 409304590e-09 1s 1s 409309430e-09 0s 0s 409313390e-09 1s 1s 409314870e-09 1s 1s 409319670e-09 0s 0s 409323630e-09 1s 1s 409325150e-09 1s 1s 409329910e-09 0s 0s 409333870e-09 1s 1s 409335430e-09 1s 1s 409340150e-09 0s 0s 409344110e-09 1s 1s 409345710e-09 1s 1s 409350390e-09 0s 0s 409354350e-09 1s 1s 409355990e-09 1s 1s 409360630e-09 0s 0s 409364590e-09 1s 1s 409366270e-09 1s 1s 409370870e-09 0s 0s 409374830e-09 1s 1s 409376550e-09 1s 1s 409381110e-09 0s 0s 409385070e-09 1s 1s 409386830e-09 1s 1s 409391350e-09 0s 0s 409395310e-09 1s 1s 409397110e-09 1s 1s 409401590e-09 0s 0s 409405550e-09 1s 1s 409407390e-09 1s 1s 409411830e-09 0s 0s 409415790e-09 1s 1s 409417670e-09 1s 1s 409422070e-09 0s 0s 409426030e-09 1s 1s 409427950e-09 1s 1s 409432310e-09 0s 0s 409436270e-09 1s 1s 409438230e-09 1s 1s 409442550e-09 0s 0s 409446510e-09 1s 1s 409448510e-09 1s 1s 409452790e-09 0s 0s 409456750e-09 1s 1s 409458790e-09 1s 1s 409463030e-09 0s 0s 409466990e-09 1s 1s 409469070e-09 1s 1s 409473270e-09 0s 0s 409477230e-09 1s 1s 409479350e-09 1s 1s 409483510e-09 0s 0s 409487470e-09 1s 1s 409489630e-09 1s 1s 409493750e-09 0s 0s 409497710e-09 1s 1s 409499910e-09 1s 1s 409503990e-09 0s 0s 409507950e-09 1s 1s 409510190e-09 1s 1s 409514230e-09 0s 0s 409518190e-09 1s 1s 409520470e-09 1s 1s 409524470e-09 0s 0s 409528430e-09 1s 1s 409530750e-09 1s 1s 409534710e-09 0s 0s 409538670e-09 1s 1s 409541030e-09 1s 1s 409544950e-09 0s 0s 409548910e-09 1s 1s 409551310e-09 1s 1s 409555190e-09 0s 0s 409559150e-09 1s 1s 409561590e-09 1s 1s 409565430e-09 0s 0s 409569390e-09 1s 1s 409571870e-09 1s 1s 409575670e-09 0s 0s 409579630e-09 1s 1s 409582150e-09 1s 1s 409585910e-09 0s 0s 409589870e-09 1s 1s 409592430e-09 1s 1s 409596150e-09 0s 0s 409600110e-09 1s 1s 409602710e-09 1s 1s 409606390e-09 0s 0s 409610350e-09 1s 1s 409612990e-09 1s 1s 409616630e-09 0s 0s 409620590e-09 1s 1s 409623270e-09 1s 1s 409626870e-09 0s 0s 409630830e-09 1s 1s 409633550e-09 1s 1s 409637110e-09 0s 0s 409641070e-09 1s 1s 409643830e-09 1s 1s 409647350e-09 0s 0s 409651310e-09 1s 1s 409654110e-09 1s 1s 409657590e-09 0s 0s 409661550e-09 1s 1s 409664390e-09 1s 1s 409667830e-09 0s 0s 409671790e-09 1s 1s 409674670e-09 1s 1s 409678070e-09 0s 0s 409682030e-09 1s 1s 409684950e-09 1s 1s 409688310e-09 0s 0s 409692270e-09 1s 1s 409695230e-09 1s 1s 409698550e-09 0s 0s 409702510e-09 1s 1s 409705510e-09 1s 1s 409708790e-09 0s 0s 409712750e-09 1s 1s 409715790e-09 1s 1s 409719030e-09 0s 0s 409722990e-09 1s 1s 409726070e-09 1s 1s 409729270e-09 0s 0s 409733230e-09 1s 1s 409736350e-09 1s 1s 409739510e-09 0s 0s 409743470e-09 1s 1s 409746630e-09 1s 1s 409749750e-09 0s 0s 409753710e-09 1s 1s 409756910e-09 1s 1s 409759990e-09 0s 0s 409763950e-09 1s 1s 409767190e-09 1s 1s 409770230e-09 0s 0s 409774190e-09 1s 1s 409777470e-09 1s 1s 409780470e-09 0s 0s 409784430e-09 1s 1s 409787750e-09 1s 1s 409790710e-09 0s 0s 409794670e-09 1s 1s 409798030e-09 1s 1s 409800950e-09 0s 0s 409804910e-09 1s 1s 409808310e-09 1s 1s 409811190e-09 0s 0s 409815150e-09 1s 1s 409818590e-09 1s 1s 409821430e-09 0s 0s 409825390e-09 1s 1s 409828870e-09 1s 1s 409831670e-09 0s 0s 409835630e-09 1s 1s 409839150e-09 1s 1s 409841910e-09 0s 0s 409845870e-09 1s 1s 409849430e-09 1s 1s 409852150e-09 0s 0s 409856110e-09 1s 1s 409859710e-09 1s 1s 409862390e-09 0s 0s 409866350e-09 1s 1s 409869990e-09 1s 1s 409872630e-09 0s 0s 409876590e-09 1s 1s 409880270e-09 1s 1s 409882870e-09 0s 0s 409886830e-09 1s 1s 409890550e-09 1s 1s 409893110e-09 0s 0s 409897070e-09 1s 1s 409900830e-09 1s 1s 409903350e-09 0s 0s 409907310e-09 1s 1s 409911110e-09 1s 1s 409913590e-09 0s 0s 409917550e-09 1s 1s 409921390e-09 1s 1s 409923830e-09 0s 0s 409927790e-09 1s 1s 409931670e-09 1s 1s 409934070e-09 0s 0s 409938030e-09 1s 1s 409941950e-09 1s 1s 409944310e-09 0s 0s 409948270e-09 1s 1s 409952230e-09 1s 1s 409954550e-09 0s 0s 409958510e-09 1s 1s 409962510e-09 1s 1s 409964790e-09 0s 0s 409968750e-09 1s 1s 409972790e-09 1s 1s 409975030e-09 0s 0s 409978990e-09 1s 1s 409983070e-09 1s 1s 409985270e-09 0s 0s 409989230e-09 1s 1s 409993350e-09 1s 1s 409995510e-09 0s 0s 409999470e-09 1s 1s 410003630e-09 1s 1s 410005750e-09 0s 0s 410009710e-09 1s 1s 410013910e-09 1s 1s 410015990e-09 0s 0s 410019950e-09 1s 1s 410024190e-09 1s 1s 410026230e-09 0s 0s 410030190e-09 1s 1s 410034470e-09 1s 1s 410036470e-09 0s 0s 410040430e-09 1s 1s 410044750e-09 1s 1s 410046710e-09 0s 0s 410050670e-09 1s 1s 410055030e-09 1s 1s 410056950e-09 0s 0s 410060910e-09 1s 1s 410065310e-09 1s 1s 410067190e-09 0s 0s 410071150e-09 1s 1s 410075590e-09 1s 1s 410077430e-09 0s 0s 410081390e-09 1s 1s 410085870e-09 1s 1s 410087670e-09 0s 0s 410091630e-09 1s 1s 410096150e-09 1s 1s 410097910e-09 0s 0s 410101870e-09 1s 1s 410106430e-09 1s 1s 410108150e-09 0s 0s 410112110e-09 1s 1s 410116710e-09 1s 1s 410118390e-09 0s 0s 410122350e-09 1s 1s 410126990e-09 1s 1s 410128630e-09 0s 0s 410132590e-09 1s 1s 410137270e-09 1s 1s 410138870e-09 0s 0s 410142830e-09 1s 1s 410147550e-09 1s 1s 410149110e-09 0s 0s 410153070e-09 1s 1s 410157830e-09 1s 1s 410159350e-09 0s 0s 410163310e-09 1s 1s 410168110e-09 1s 1s 410169590e-09 0s 0s 410173550e-09 1s 1s 410178390e-09 1s 1s 410179830e-09 0s 0s 410183790e-09 1s 1s 410188670e-09 1s 1s 410190070e-09 0s 0s 410194030e-09 1s 1s 410198950e-09 1s 1s 410200310e-09 0s 0s 410204270e-09 1s 1s 410209230e-09 1s 1s 410210550e-09 0s 0s 410214510e-09 1s 1s 410219510e-09 1s 1s 410220790e-09 0s 0s 410224750e-09 1s 1s 410229790e-09 1s 1s 410231030e-09 0s 0s 410234990e-09 1s 1s 410240070e-09 1s 1s 410241270e-09 0s 0s 410245230e-09 1s 1s 410250350e-09 1s 1s 410251510e-09 0s 0s 410255470e-09 1s 1s 410260630e-09 1s 1s 410261750e-09 0s 0s 410265710e-09 1s 1s 410270910e-09 1s 1s 410271990e-09 0s 0s 410275950e-09 1s 1s 410281190e-09 1s 1s 410282230e-09 0s 0s 410286190e-09 1s 1s 410291470e-09 1s 1s 410292470e-09 0s 0s 410296430e-09 1s 1s 410301750e-09 1s 1s 410302710e-09 0s 0s 410306670e-09 1s 1s 410312030e-09 1s 1s 410312950e-09 0s 0s 410316910e-09 1s 1s 410322310e-09 1s 1s 410323190e-09 0s 0s 410327150e-09 1s 1s 410332590e-09 1s 1s 410333430e-09 0s 0s 410337390e-09 1s 1s 410342870e-09 1s 1s 410343670e-09 0s 0s 410347630e-09 1s 1s 410353150e-09 1s 1s 410353910e-09 0s 0s 410357870e-09 1s 1s 410363430e-09 1s 1s 410364150e-09 0s 0s 410368110e-09 1s 1s 410373710e-09 1s 1s 410374390e-09 0s 0s 410378350e-09 1s 1s 410383990e-09 1s 1s 410384630e-09 0s 0s 410388590e-09 1s 1s 410394270e-09 1s 1s 410394870e-09 0s 0s 410398830e-09 1s 1s 410404550e-09 1s 1s 410405110e-09 0s 0s 410409070e-09 1s 1s 410414830e-09 1s 1s 410415350e-09 0s 0s 410419310e-09 1s 1s 410425110e-09 1s 1s 410425590e-09 0s 0s 410429550e-09 1s 1s 410435390e-09 1s 1s 410435830e-09 0s 0s 410439790e-09 1s 1s 410445670e-09 1s 1s 410446070e-09 0s 0s 410450030e-09 1s 1s 410455950e-09 1s 1s 410456310e-09 0s 0s 410460270e-09 1s 1s 410466230e-09 1s 1s 410466550e-09 0s 0s 410470510e-09 1s 1s 410476510e-09 1s 1s 410476790e-09 0s 0s 410480750e-09 1s 1s 410486790e-09 1s 1s 410487030e-09 0s 0s 410490990e-09 1s 1s 410497070e-09 1s 1s 410497270e-09 0s 0s 410501230e-09 1s 1s 410507350e-09 1s 1s 410507510e-09 0s 0s 410511470e-09 1s 1s 410517630e-09 1s 1s 410517750e-09 0s 0s 410521710e-09 1s 1s 410527910e-09 1s 1s 410527990e-09 0s 0s 410531950e-09 1s 1s 410538190e-09 1s 1s 410538230e-09 0s 0s 410542190e-09 1s 1s 410548470e-09 0s 0s 410552430e-09 1s 1s 410558710e-09 0s 0s 410558750e-09 0s 0s 410562670e-09 1s 1s 410568950e-09 0s 0s 410569030e-09 0s 0s 410572910e-09 1s 1s 410579190e-09 0s 0s 410579310e-09 0s 0s 410583150e-09 1s 1s 410589430e-09 0s 0s 410589590e-09 0s 0s 410593390e-09 1s 1s 410599670e-09 0s 0s 410599870e-09 0s 0s 410603630e-09 1s 1s 410609910e-09 0s 0s 410610150e-09 0s 0s 410613870e-09 1s 1s 410620150e-09 0s 0s 410620430e-09 0s 0s 410624110e-09 1s 1s 410630390e-09 0s 0s 410630710e-09 0s 0s 410634350e-09 1s 1s 410640630e-09 0s 0s 410640990e-09 0s 0s 410644590e-09 1s 1s 410650870e-09 0s 0s 410651270e-09 0s 0s 410654830e-09 1s 1s 410661110e-09 0s 0s 410661550e-09 0s 0s 410665070e-09 1s 1s 410671350e-09 0s 0s 410671830e-09 0s 0s 410675310e-09 1s 1s 410681590e-09 0s 0s 410682110e-09 0s 0s 410685550e-09 1s 1s 410691830e-09 0s 0s 410692390e-09 0s 0s 410695790e-09 1s 1s 410702070e-09 0s 0s 410702670e-09 0s 0s 410706030e-09 1s 1s 410712310e-09 0s 0s 410712950e-09 0s 0s 410716270e-09 1s 1s 410722550e-09 0s 0s 410723230e-09 0s 0s 410726510e-09 1s 1s 410732790e-09 0s 0s 410733510e-09 0s 0s 410736750e-09 1s 1s 410743030e-09 0s 0s 410743790e-09 0s 0s 410746990e-09 1s 1s 410753270e-09 0s 0s 410754070e-09 0s 0s 410757230e-09 1s 1s 410763510e-09 0s 0s 410764350e-09 0s 0s 410767470e-09 1s 1s 410773750e-09 0s 0s 410774630e-09 0s 0s 410777710e-09 1s 1s 410783990e-09 0s 0s 410784910e-09 0s 0s 410787950e-09 1s 1s 410794230e-09 0s 0s 410795190e-09 0s 0s 410798190e-09 1s 1s 410804470e-09 0s 0s 410805470e-09 0s 0s 410808430e-09 1s 1s 410814710e-09 0s 0s 410815750e-09 0s 0s 410818670e-09 1s 1s 410824950e-09 0s 0s 410826030e-09 0s 0s 410828910e-09 1s 1s 410835190e-09 0s 0s 410836310e-09 0s 0s 410839150e-09 1s 1s 410845430e-09 0s 0s 410846590e-09 0s 0s 410849390e-09 1s 1s 410855670e-09 0s 0s 410856870e-09 0s 0s 410859630e-09 1s 1s 410865910e-09 0s 0s 410867150e-09 0s 0s 410869870e-09 1s 1s 410876150e-09 0s 0s 410877430e-09 0s 0s 410880110e-09 1s 1s 410886390e-09 0s 0s 410887710e-09 0s 0s 410890350e-09 1s 1s 410896630e-09 0s 0s 410897990e-09 0s 0s 410900590e-09 1s 1s 410906870e-09 0s 0s 410908270e-09 0s 0s 410910830e-09 1s 1s 410917110e-09 0s 0s 410918550e-09 0s 0s 410921070e-09 1s 1s 410927350e-09 0s 0s 410928830e-09 0s 0s 410931310e-09 1s 1s 410937590e-09 0s 0s 410939110e-09 0s 0s 410941550e-09 1s 1s 410947830e-09 0s 0s 410949390e-09 0s 0s 410951790e-09 1s 1s 410958070e-09 0s 0s 410959670e-09 0s 0s 410962030e-09 1s 1s 410968310e-09 0s 0s 410969950e-09 0s 0s 410972270e-09 1s 1s 410978550e-09 0s 0s 410980230e-09 0s 0s 410982510e-09 1s 1s 410988790e-09 0s 0s 410990510e-09 0s 0s 410992750e-09 1s 1s 410999030e-09 0s 0s 411000790e-09 0s 0s 411002990e-09 1s 1s 411009270e-09 0s 0s 411011070e-09 0s 0s 411013230e-09 1s 1s 411019510e-09 0s 0s 411021350e-09 0s 0s 411023470e-09 1s 1s 411029750e-09 0s 0s 411031630e-09 0s 0s 411033710e-09 1s 1s 411039990e-09 0s 0s 411041910e-09 0s 0s 411043950e-09 1s 1s 411050230e-09 0s 0s 411052190e-09 0s 0s 411054190e-09 1s 1s 411060470e-09 0s 0s 411062470e-09 0s 0s 411064430e-09 1s 1s 411070710e-09 0s 0s 411072750e-09 0s 0s 411074670e-09 1s 1s 411080950e-09 0s 0s 411083030e-09 0s 0s 411084910e-09 1s 1s 411091190e-09 0s 0s 411093310e-09 0s 0s 411095150e-09 1s 1s 411101430e-09 0s 0s 411103590e-09 0s 0s 411105390e-09 1s 1s 411111670e-09 0s 0s 411113870e-09 0s 0s 411115630e-09 1s 1s 411121910e-09 0s 0s 411124150e-09 0s 0s 411125870e-09 1s 1s 411132150e-09 0s 0s 411134430e-09 0s 0s 411136110e-09 1s 1s 411142390e-09 0s 0s 411144710e-09 0s 0s 411146350e-09 1s 1s 411152630e-09 0s 0s 411154990e-09 0s 0s 411156590e-09 1s 1s 411162870e-09 0s 0s 411165270e-09 0s 0s 411166830e-09 1s 1s 411173110e-09 0s 0s 411175550e-09 0s 0s 411177070e-09 1s 1s 411183350e-09 0s 0s 411185830e-09 0s 0s 411187310e-09 1s 1s 411193590e-09 0s 0s 411196110e-09 0s 0s 411197550e-09 1s 1s 411203830e-09 0s 0s 411206390e-09 0s 0s 411207790e-09 1s 1s 411214070e-09 0s 0s 411216670e-09 0s 0s 411218030e-09 1s 1s 411224310e-09 0s 0s 411226950e-09 0s 0s 411228270e-09 1s 1s 411234550e-09 0s 0s 411237230e-09 0s 0s 411238510e-09 1s 1s 411244790e-09 0s 0s 411247510e-09 0s 0s 411248750e-09 1s 1s 411255030e-09 0s 0s 411257790e-09 0s 0s 411258990e-09 1s 1s 411265270e-09 0s 0s 411268070e-09 0s 0s 411269230e-09 1s 1s 411275510e-09 0s 0s 411278350e-09 0s 0s 411279470e-09 1s 1s 411285750e-09 0s 0s 411288630e-09 0s 0s 411289710e-09 1s 1s 411295990e-09 0s 0s 411298910e-09 0s 0s 411299950e-09 1s 1s 411306230e-09 0s 0s 411309190e-09 0s 0s 411310190e-09 1s 1s 411316470e-09 0s 0s 411319470e-09 0s 0s 411320430e-09 1s 1s 411326710e-09 0s 0s 411329750e-09 0s 0s 411330670e-09 1s 1s 411336950e-09 0s 0s 411340030e-09 0s 0s 411340910e-09 1s 1s 411347190e-09 0s 0s 411350310e-09 0s 0s 411351150e-09 1s 1s 411357430e-09 0s 0s 411360590e-09 0s 0s 411361390e-09 1s 1s 411367670e-09 0s 0s 411370870e-09 0s 0s 411371630e-09 1s 1s 411377910e-09 0s 0s 411381150e-09 0s 0s 411381870e-09 1s 1s 411388150e-09 0s 0s 411391430e-09 0s 0s 411392110e-09 1s 1s 411398390e-09 0s 0s 411401710e-09 0s 0s 411402350e-09 1s 1s 411408630e-09 0s 0s 411411990e-09 0s 0s 411412590e-09 1s 1s 411418870e-09 0s 0s 411422270e-09 0s 0s 411422830e-09 1s 1s 411429110e-09 0s 0s 411432550e-09 0s 0s 411433070e-09 1s 1s 411439350e-09 0s 0s 411442830e-09 0s 0s 411443310e-09 1s 1s 411449590e-09 0s 0s 411453110e-09 0s 0s 411453550e-09 1s 1s 411459830e-09 0s 0s 411463390e-09 0s 0s 411463790e-09 1s 1s 411470070e-09 0s 0s 411473670e-09 0s 0s 411474030e-09 1s 1s 411480310e-09 0s 0s 411483950e-09 0s 0s 411484270e-09 1s 1s 411490550e-09 0s 0s 411494230e-09 0s 0s 411494510e-09 1s 1s 411500790e-09 0s 0s 411504510e-09 0s 0s 411504750e-09 1s 1s 411511030e-09 0s 0s 411514790e-09 0s 0s 411514990e-09 1s 1s 411521270e-09 0s 0s 411525070e-09 0s 0s 411525230e-09 1s 1s 411531510e-09 0s 0s 411535350e-09 0s 0s 411535470e-09 1s 1s 411541750e-09 0s 0s 411545630e-09 0s 0s 411545710e-09 1s 1s 411551990e-09 0s 0s 411555910e-09 0s 0s 411555950e-09 1s 1s 411562230e-09 0s 0s 411566190e-09 1s 1s 411566230e-09 1s 1s 411572510e-09 0s 0s 411576430e-09 1s 1s 411576510e-09 1s 1s 411582750e-09 0s 0s 411586670e-09 1s 1s 411586790e-09 1s 1s 411592990e-09 0s 0s 411596910e-09 1s 1s 411597070e-09 1s 1s 411603230e-09 0s 0s 411607150e-09 1s 1s 411607350e-09 1s 1s 411613470e-09 0s 0s 411617390e-09 1s 1s 411617630e-09 1s 1s 411623710e-09 0s 0s 411627630e-09 1s 1s 411627910e-09 1s 1s 411633950e-09 0s 0s 411637870e-09 1s 1s 411638190e-09 1s 1s 411644190e-09 0s 0s 411648110e-09 1s 1s 411648470e-09 1s 1s 411654430e-09 0s 0s 411658350e-09 1s 1s 411658750e-09 1s 1s 411664670e-09 0s 0s 411668590e-09 1s 1s 411669030e-09 1s 1s 411674910e-09 0s 0s 411678830e-09 1s 1s 411679310e-09 1s 1s 411685150e-09 0s 0s 411689070e-09 1s 1s 411689590e-09 1s 1s 411695390e-09 0s 0s 411699310e-09 1s 1s 411699870e-09 1s 1s 411705630e-09 0s 0s 411709550e-09 1s 1s 411710150e-09 1s 1s 411715870e-09 0s 0s 411719790e-09 1s 1s 411720430e-09 1s 1s 411726110e-09 0s 0s 411730030e-09 1s 1s 411730710e-09 1s 1s 411736350e-09 0s 0s 411740270e-09 1s 1s 411740990e-09 1s 1s 411746590e-09 0s 0s 411750510e-09 1s 1s 411751270e-09 1s 1s 411756830e-09 0s 0s 411760750e-09 1s 1s 411761550e-09 1s 1s 411767070e-09 0s 0s 411770990e-09 1s 1s 411771830e-09 1s 1s 411777310e-09 0s 0s 411781230e-09 1s 1s 411782110e-09 1s 1s 411787550e-09 0s 0s 411791470e-09 1s 1s 411792390e-09 1s 1s 411797790e-09 0s 0s 411801710e-09 1s 1s 411802670e-09 1s 1s 411808030e-09 0s 0s 411811950e-09 1s 1s 411812950e-09 1s 1s 411818270e-09 0s 0s 411822190e-09 1s 1s 411823230e-09 1s 1s 411828510e-09 0s 0s 411832430e-09 1s 1s 411833510e-09 1s 1s 411838750e-09 0s 0s 411842670e-09 1s 1s 411843790e-09 1s 1s 411848990e-09 0s 0s 411852910e-09 1s 1s 411854070e-09 1s 1s 411859230e-09 0s 0s 411863150e-09 1s 1s 411864350e-09 1s 1s 411869470e-09 0s 0s 411873390e-09 1s 1s 411874630e-09 1s 1s 411879710e-09 0s 0s 411883630e-09 1s 1s 411884910e-09 1s 1s 411889950e-09 0s 0s 411893870e-09 1s 1s 411895190e-09 1s 1s 411900190e-09 0s 0s 411904110e-09 1s 1s 411905470e-09 1s 1s 411910430e-09 0s 0s 411914350e-09 1s 1s 411915750e-09 1s 1s 411920670e-09 0s 0s 411924590e-09 1s 1s 411926030e-09 1s 1s 411930910e-09 0s 0s 411934830e-09 1s 1s 411936310e-09 1s 1s 411941150e-09 0s 0s 411945070e-09 1s 1s 411946590e-09 1s 1s 411951390e-09 0s 0s 411955310e-09 1s 1s 411956870e-09 1s 1s 411961630e-09 0s 0s 411965550e-09 1s 1s 411967150e-09 1s 1s 411971870e-09 0s 0s 411975790e-09 1s 1s 411977430e-09 1s 1s 411982110e-09 0s 0s 411986030e-09 1s 1s 411987710e-09 1s 1s 411992350e-09 0s 0s 411996270e-09 1s 1s 411997990e-09 1s 1s 412002590e-09 0s 0s 412006510e-09 1s 1s 412008270e-09 1s 1s 412012830e-09 0s 0s 412016750e-09 1s 1s 412018550e-09 1s 1s 412023070e-09 0s 0s 412026990e-09 1s 1s 412028830e-09 1s 1s 412033310e-09 0s 0s 412037230e-09 1s 1s 412039110e-09 1s 1s 412043550e-09 0s 0s 412047470e-09 1s 1s 412049390e-09 1s 1s 412053790e-09 0s 0s 412057710e-09 1s 1s 412059670e-09 1s 1s 412064030e-09 0s 0s 412067950e-09 1s 1s 412069950e-09 1s 1s 412074270e-09 0s 0s 412078190e-09 1s 1s 412080230e-09 1s 1s 412084510e-09 0s 0s 412088430e-09 1s 1s 412090510e-09 1s 1s 412094750e-09 0s 0s 412098670e-09 1s 1s 412100790e-09 1s 1s 412104990e-09 0s 0s 412108910e-09 1s 1s 412111070e-09 1s 1s 412115230e-09 0s 0s 412119150e-09 1s 1s 412121350e-09 1s 1s 412125470e-09 0s 0s 412129390e-09 1s 1s 412131630e-09 1s 1s 412135710e-09 0s 0s 412139630e-09 1s 1s 412141910e-09 1s 1s 412145950e-09 0s 0s 412149870e-09 1s 1s 412152190e-09 1s 1s 412156190e-09 0s 0s 412160110e-09 1s 1s 412162470e-09 1s 1s 412166430e-09 0s 0s 412170350e-09 1s 1s 412172750e-09 1s 1s 412176670e-09 0s 0s 412180590e-09 1s 1s 412183030e-09 1s 1s 412186910e-09 0s 0s 412190830e-09 1s 1s 412193310e-09 1s 1s 412197150e-09 0s 0s 412201070e-09 1s 1s 412203590e-09 1s 1s 412207390e-09 0s 0s 412211310e-09 1s 1s 412213870e-09 1s 1s 412217630e-09 0s 0s 412221550e-09 1s 1s 412224150e-09 1s 1s 412227870e-09 0s 0s 412231790e-09 1s 1s 412234430e-09 1s 1s 412238110e-09 0s 0s 412242030e-09 1s 1s 412244710e-09 1s 1s 412248350e-09 0s 0s 412252270e-09 1s 1s 412254990e-09 1s 1s 412258590e-09 0s 0s 412262510e-09 1s 1s 412265270e-09 1s 1s 412268830e-09 0s 0s 412272750e-09 1s 1s 412275550e-09 1s 1s 412279070e-09 0s 0s 412282990e-09 1s 1s 412285830e-09 1s 1s 412289310e-09 0s 0s 412293230e-09 1s 1s 412296110e-09 1s 1s 412299550e-09 0s 0s 412303470e-09 1s 1s 412306390e-09 1s 1s 412309790e-09 0s 0s 412313710e-09 1s 1s 412316670e-09 1s 1s 412320030e-09 0s 0s 412323950e-09 1s 1s 412326950e-09 1s 1s 412330270e-09 0s 0s 412334190e-09 1s 1s 412337230e-09 1s 1s 412340510e-09 0s 0s 412344430e-09 1s 1s 412347510e-09 1s 1s 412350750e-09 0s 0s 412354670e-09 1s 1s 412357790e-09 1s 1s 412360990e-09 0s 0s 412364910e-09 1s 1s 412368070e-09 1s 1s 412371230e-09 0s 0s 412375150e-09 1s 1s 412378350e-09 1s 1s 412381470e-09 0s 0s 412385390e-09 1s 1s 412388630e-09 1s 1s 412391710e-09 0s 0s 412395630e-09 1s 1s 412398910e-09 1s 1s 412401950e-09 0s 0s 412405870e-09 1s 1s 412409190e-09 1s 1s 412412190e-09 0s 0s 412416110e-09 1s 1s 412419470e-09 1s 1s 412422430e-09 0s 0s 412426350e-09 1s 1s 412429750e-09 1s 1s 412432670e-09 0s 0s 412436590e-09 1s 1s 412440030e-09 1s 1s 412442910e-09 0s 0s 412446830e-09 1s 1s 412450310e-09 1s 1s 412453150e-09 0s 0s 412457070e-09 1s 1s 412460590e-09 1s 1s 412463390e-09 0s 0s 412467310e-09 1s 1s 412470870e-09 1s 1s 412473630e-09 0s 0s 412477550e-09 1s 1s 412481150e-09 1s 1s 412483870e-09 0s 0s 412487790e-09 1s 1s 412491430e-09 1s 1s 412494110e-09 0s 0s 412498030e-09 1s 1s 412501710e-09 1s 1s 412504350e-09 0s 0s 412508270e-09 1s 1s 412511990e-09 1s 1s 412514590e-09 0s 0s 412518510e-09 1s 1s 412522270e-09 1s 1s 412524830e-09 0s 0s 412528750e-09 1s 1s 412532550e-09 1s 1s 412535070e-09 0s 0s 412538990e-09 1s 1s 412542830e-09 1s 1s 412545310e-09 0s 0s 412549230e-09 1s 1s 412553110e-09 1s 1s 412555550e-09 0s 0s 412559470e-09 1s 1s 412563390e-09 1s 1s 412565790e-09 0s 0s 412569710e-09 1s 1s 412573670e-09 1s 1s 412576030e-09 0s 0s 412579950e-09 1s 1s 412583950e-09 1s 1s 412586270e-09 0s 0s 412590190e-09 1s 1s 412594230e-09 1s 1s 412596510e-09 0s 0s 412600430e-09 1s 1s 412604510e-09 1s 1s 412606750e-09 0s 0s 412610670e-09 1s 1s 412614790e-09 1s 1s 412616990e-09 0s 0s 412620910e-09 1s 1s 412625070e-09 1s 1s 412627230e-09 0s 0s 412631150e-09 1s 1s 412635350e-09 1s 1s 412637470e-09 0s 0s 412641390e-09 1s 1s 412645630e-09 1s 1s 412647710e-09 0s 0s 412651630e-09 1s 1s 412655910e-09 1s 1s 412657950e-09 0s 0s 412661870e-09 1s 1s 412666190e-09 1s 1s 412668190e-09 0s 0s 412672110e-09 1s 1s 412676470e-09 1s 1s 412678430e-09 0s 0s 412682350e-09 1s 1s 412686750e-09 1s 1s 412688670e-09 0s 0s 412692590e-09 1s 1s 412697030e-09 1s 1s 412698910e-09 0s 0s 412702830e-09 1s 1s 412707310e-09 1s 1s 412709150e-09 0s 0s 412713070e-09 1s 1s 412717590e-09 1s 1s 412719390e-09 0s 0s 412723310e-09 1s 1s 412727870e-09 1s 1s 412729630e-09 0s 0s 412733550e-09 1s 1s 412738150e-09 1s 1s 412739870e-09 0s 0s 412743790e-09 1s 1s 412748430e-09 1s 1s 412750110e-09 0s 0s 412754030e-09 1s 1s 412758710e-09 1s 1s 412760350e-09 0s 0s 412764270e-09 1s 1s 412768990e-09 1s 1s 412770590e-09 0s 0s 412774510e-09 1s 1s 412779270e-09 1s 1s 412780830e-09 0s 0s 412784750e-09 1s 1s 412789550e-09 1s 1s 412791070e-09 0s 0s 412794990e-09 1s 1s 412799830e-09 1s 1s 412801310e-09 0s 0s 412805230e-09 1s 1s 412810110e-09 1s 1s 412811550e-09 0s 0s 412815470e-09 1s 1s 412820390e-09 1s 1s 412821790e-09 0s 0s 412825710e-09 1s 1s 412830670e-09 1s 1s 412832030e-09 0s 0s 412835950e-09 1s 1s 412840950e-09 1s 1s 412842270e-09 0s 0s 412846190e-09 1s 1s 412851230e-09 1s 1s 412852510e-09 0s 0s 412856430e-09 1s 1s 412861510e-09 1s 1s 412862750e-09 0s 0s 412866670e-09 1s 1s 412871790e-09 1s 1s 412872990e-09 0s 0s 412876910e-09 1s 1s 412882070e-09 1s 1s 412883230e-09 0s 0s 412887150e-09 1s 1s 412892350e-09 1s 1s 412893470e-09 0s 0s 412897390e-09 1s 1s 412902630e-09 1s 1s 412903710e-09 0s 0s 412907630e-09 1s 1s 412912910e-09 1s 1s 412913950e-09 0s 0s 412917870e-09 1s 1s 412923190e-09 1s 1s 412924190e-09 0s 0s 412928110e-09 1s 1s 412933470e-09 1s 1s 412934430e-09 0s 0s 412938350e-09 1s 1s 412943750e-09 1s 1s 412944670e-09 0s 0s 412948590e-09 1s 1s 412954030e-09 1s 1s 412954910e-09 0s 0s 412958830e-09 1s 1s 412964310e-09 1s 1s 412965150e-09 0s 0s 412969070e-09 1s 1s 412974590e-09 1s 1s 412975390e-09 0s 0s 412979310e-09 1s 1s 412984870e-09 1s 1s 412985630e-09 0s 0s 412989550e-09 1s 1s 412995150e-09 1s 1s 412995870e-09 0s 0s 412999790e-09 1s 1s 413005430e-09 1s 1s 413006110e-09 0s 0s 413010030e-09 1s 1s 413015710e-09 1s 1s 413016350e-09 0s 0s 413020270e-09 1s 1s 413025990e-09 1s 1s 413026590e-09 0s 0s 413030510e-09 1s 1s 413036270e-09 1s 1s 413036830e-09 0s 0s 413040750e-09 1s 1s 413046550e-09 1s 1s 413047070e-09 0s 0s 413050990e-09 1s 1s 413056830e-09 1s 1s 413057310e-09 0s 0s 413061230e-09 1s 1s 413067110e-09 1s 1s 413067550e-09 0s 0s 413071470e-09 1s 1s 413077390e-09 1s 1s 413077790e-09 0s 0s 413081710e-09 1s 1s 413087670e-09 1s 1s 413088030e-09 0s 0s 413091950e-09 1s 1s 413097950e-09 1s 1s 413098270e-09 0s 0s 413102190e-09 1s 1s 413108230e-09 1s 1s 413108510e-09 0s 0s 413112430e-09 1s 1s 413118510e-09 1s 1s 413118750e-09 0s 0s 413122670e-09 1s 1s 413128790e-09 1s 1s 413128990e-09 0s 0s 413132910e-09 1s 1s 413139070e-09 1s 1s 413139230e-09 0s 0s 413143150e-09 1s 1s 413149350e-09 1s 1s 413149470e-09 0s 0s 413153390e-09 1s 1s 413159630e-09 1s 1s 413159710e-09 0s 0s 413163630e-09 1s 1s 413169910e-09 1s 1s 413169950e-09 0s 0s 413173870e-09 1s 1s 413180190e-09 0s 0s 413184110e-09 1s 1s 413190430e-09 0s 0s 413190470e-09 0s 0s 413194350e-09 1s 1s 413200670e-09 0s 0s 413200750e-09 0s 0s 413204590e-09 1s 1s 413210910e-09 0s 0s 413211030e-09 0s 0s 413214830e-09 1s 1s 413221150e-09 0s 0s 413221310e-09 0s 0s 413225070e-09 1s 1s 413231390e-09 0s 0s 413231590e-09 0s 0s 413235310e-09 1s 1s 413241630e-09 0s 0s 413241870e-09 0s 0s 413245550e-09 1s 1s 413251870e-09 0s 0s 413252150e-09 0s 0s 413255790e-09 1s 1s 413262110e-09 0s 0s 413262430e-09 0s 0s 413266030e-09 1s 1s 413272350e-09 0s 0s 413272710e-09 0s 0s 413276270e-09 1s 1s 413282590e-09 0s 0s 413282990e-09 0s 0s 413286510e-09 1s 1s 413292830e-09 0s 0s 413293270e-09 0s 0s 413296750e-09 1s 1s 413303070e-09 0s 0s 413303550e-09 0s 0s 413306990e-09 1s 1s 413313310e-09 0s 0s 413313830e-09 0s 0s 413317230e-09 1s 1s 413323550e-09 0s 0s 413324110e-09 0s 0s 413327470e-09 1s 1s 413333790e-09 0s 0s 413334390e-09 0s 0s 413337710e-09 1s 1s 413344030e-09 0s 0s 413344670e-09 0s 0s 413347950e-09 1s 1s 413354270e-09 0s 0s 413354950e-09 0s 0s 413358190e-09 1s 1s 413364510e-09 0s 0s 413365230e-09 0s 0s 413368430e-09 1s 1s 413374750e-09 0s 0s 413375510e-09 0s 0s 413378670e-09 1s 1s 413384990e-09 0s 0s 413385790e-09 0s 0s 413388910e-09 1s 1s 413395230e-09 0s 0s 413396070e-09 0s 0s 413399150e-09 1s 1s 413405470e-09 0s 0s 413406350e-09 0s 0s 413409390e-09 1s 1s 413415710e-09 0s 0s 413416630e-09 0s 0s 413419630e-09 1s 1s 413425950e-09 0s 0s 413426910e-09 0s 0s 413429870e-09 1s 1s 413436190e-09 0s 0s 413437190e-09 0s 0s 413440110e-09 1s 1s 413446430e-09 0s 0s 413447470e-09 0s 0s 413450350e-09 1s 1s 413456670e-09 0s 0s 413457750e-09 0s 0s 413460590e-09 1s 1s 413466910e-09 0s 0s 413468030e-09 0s 0s 413470830e-09 1s 1s 413477150e-09 0s 0s 413478310e-09 0s 0s 413481070e-09 1s 1s 413487390e-09 0s 0s 413488590e-09 0s 0s 413491310e-09 1s 1s 413497630e-09 0s 0s 413498870e-09 0s 0s 413501550e-09 1s 1s 413507870e-09 0s 0s 413509150e-09 0s 0s 413511790e-09 1s 1s 413518110e-09 0s 0s 413519430e-09 0s 0s 413522030e-09 1s 1s 413528350e-09 0s 0s 413529710e-09 0s 0s 413532270e-09 1s 1s 413538590e-09 0s 0s 413539990e-09 0s 0s 413542510e-09 1s 1s 413548830e-09 0s 0s 413550270e-09 0s 0s 413552750e-09 1s 1s 413559070e-09 0s 0s 413560550e-09 0s 0s 413562990e-09 1s 1s 413569310e-09 0s 0s 413570830e-09 0s 0s 413573230e-09 1s 1s 413579550e-09 0s 0s 413581110e-09 0s 0s 413583470e-09 1s 1s 413589790e-09 0s 0s 413591390e-09 0s 0s 413593710e-09 1s 1s 413600030e-09 0s 0s 413601670e-09 0s 0s 413603950e-09 1s 1s 413610270e-09 0s 0s 413611950e-09 0s 0s 413614190e-09 1s 1s 413620510e-09 0s 0s 413622230e-09 0s 0s 413624430e-09 1s 1s 413630750e-09 0s 0s 413632510e-09 0s 0s 413634670e-09 1s 1s 413640990e-09 0s 0s 413642790e-09 0s 0s 413644910e-09 1s 1s 413651230e-09 0s 0s 413653070e-09 0s 0s 413655150e-09 1s 1s 413661470e-09 0s 0s 413663350e-09 0s 0s 413665390e-09 1s 1s 413671710e-09 0s 0s 413673630e-09 0s 0s 413675630e-09 1s 1s 413681950e-09 0s 0s 413683910e-09 0s 0s 413685870e-09 1s 1s 413692190e-09 0s 0s 413694190e-09 0s 0s 413696110e-09 1s 1s 413702430e-09 0s 0s 413704470e-09 0s 0s 413706350e-09 1s 1s 413712670e-09 0s 0s 413714750e-09 0s 0s 413716590e-09 1s 1s 413722910e-09 0s 0s 413725030e-09 0s 0s 413726830e-09 1s 1s 413733150e-09 0s 0s 413735310e-09 0s 0s 413737070e-09 1s 1s 413743390e-09 0s 0s 413745590e-09 0s 0s 413747310e-09 1s 1s 413753630e-09 0s 0s 413755870e-09 0s 0s 413757550e-09 1s 1s 413763870e-09 0s 0s 413766150e-09 0s 0s 413767790e-09 1s 1s 413774110e-09 0s 0s 413776430e-09 0s 0s 413778030e-09 1s 1s 413784350e-09 0s 0s 413786710e-09 0s 0s 413788270e-09 1s 1s 413794590e-09 0s 0s 413796990e-09 0s 0s 413798510e-09 1s 1s 413804830e-09 0s 0s 413807270e-09 0s 0s 413808750e-09 1s 1s 413815070e-09 0s 0s 413817550e-09 0s 0s 413818990e-09 1s 1s 413825310e-09 0s 0s 413827830e-09 0s 0s 413829230e-09 1s 1s 413835550e-09 0s 0s 413838110e-09 0s 0s 413839470e-09 1s 1s 413845790e-09 0s 0s 413848390e-09 0s 0s 413849710e-09 1s 1s 413856030e-09 0s 0s 413858670e-09 0s 0s 413859950e-09 1s 1s 413866270e-09 0s 0s 413868950e-09 0s 0s 413870190e-09 1s 1s 413876510e-09 0s 0s 413879230e-09 0s 0s 413880430e-09 1s 1s 413886750e-09 0s 0s 413889510e-09 0s 0s 413890670e-09 1s 1s 413896990e-09 0s 0s 413899790e-09 0s 0s 413900910e-09 1s 1s 413907230e-09 0s 0s 413910070e-09 0s 0s 413911150e-09 1s 1s 413917470e-09 0s 0s 413920350e-09 0s 0s 413921390e-09 1s 1s 413927710e-09 0s 0s 413930630e-09 0s 0s 413931630e-09 1s 1s 413937950e-09 0s 0s 413940910e-09 0s 0s 413941870e-09 1s 1s 413948190e-09 0s 0s 413951190e-09 0s 0s 413952110e-09 1s 1s 413958430e-09 0s 0s 413961470e-09 0s 0s 413962350e-09 1s 1s 413968670e-09 0s 0s 413971750e-09 0s 0s 413972590e-09 1s 1s 413978910e-09 0s 0s 413982030e-09 0s 0s 413982830e-09 1s 1s 413989150e-09 0s 0s 413992310e-09 0s 0s 413993070e-09 1s 1s 413999390e-09 0s 0s 414002590e-09 0s 0s 414003310e-09 1s 1s 414009630e-09 0s 0s 414012870e-09 0s 0s 414013550e-09 1s 1s 414019870e-09 0s 0s 414023150e-09 0s 0s 414023790e-09 1s 1s 414030110e-09 0s 0s 414033430e-09 0s 0s 414034030e-09 1s 1s 414040350e-09 0s 0s 414043710e-09 0s 0s 414044270e-09 1s 1s 414050590e-09 0s 0s 414053990e-09 0s 0s 414054510e-09 1s 1s 414060830e-09 0s 0s 414064270e-09 0s 0s 414064750e-09 1s 1s 414071070e-09 0s 0s 414074550e-09 0s 0s 414074990e-09 1s 1s 414081310e-09 0s 0s 414084830e-09 0s 0s 414085230e-09 1s 1s 414091550e-09 0s 0s 414095110e-09 0s 0s 414095470e-09 1s 1s 414101790e-09 0s 0s 414105390e-09 0s 0s 414105710e-09 1s 1s 414112030e-09 0s 0s 414115670e-09 0s 0s 414115950e-09 1s 1s 414122270e-09 0s 0s 414125950e-09 0s 0s 414126190e-09 1s 1s 414132510e-09 0s 0s 414136230e-09 0s 0s 414136430e-09 1s 1s 414142750e-09 0s 0s 414146510e-09 0s 0s 414146670e-09 1s 1s 414152990e-09 0s 0s 414156790e-09 0s 0s 414156910e-09 1s 1s 414163230e-09 0s 0s 414167070e-09 0s 0s 414167150e-09 1s 1s 414173470e-09 0s 0s 414177350e-09 0s 0s 414177390e-09 1s 1s 414183710e-09 0s 0s 414187630e-09 1s 1s 414187670e-09 1s 1s 414193990e-09 0s 0s 414197870e-09 1s 1s 414197950e-09 1s 1s 414204230e-09 0s 0s 414208110e-09 1s 1s 414208230e-09 1s 1s 414214470e-09 0s 0s 414218350e-09 1s 1s 414218510e-09 1s 1s 414224710e-09 0s 0s 414228590e-09 1s 1s 414228790e-09 1s 1s 414234950e-09 0s 0s 414238830e-09 1s 1s 414239070e-09 1s 1s 414245190e-09 0s 0s 414249070e-09 1s 1s 414249350e-09 1s 1s 414255430e-09 0s 0s 414259310e-09 1s 1s 414259630e-09 1s 1s 414265670e-09 0s 0s 414269550e-09 1s 1s 414269910e-09 1s 1s 414275910e-09 0s 0s 414279790e-09 1s 1s 414280190e-09 1s 1s 414286150e-09 0s 0s 414290030e-09 1s 1s 414290470e-09 1s 1s 414296390e-09 0s 0s 414300270e-09 1s 1s 414300750e-09 1s 1s 414306630e-09 0s 0s 414310510e-09 1s 1s 414311030e-09 1s 1s 414316870e-09 0s 0s 414320750e-09 1s 1s 414321310e-09 1s 1s 414327110e-09 0s 0s 414330990e-09 1s 1s 414331590e-09 1s 1s 414337350e-09 0s 0s 414341230e-09 1s 1s 414341870e-09 1s 1s 414347590e-09 0s 0s 414351470e-09 1s 1s 414352150e-09 1s 1s 414357830e-09 0s 0s 414361710e-09 1s 1s 414362430e-09 1s 1s 414368070e-09 0s 0s 414371950e-09 1s 1s 414372710e-09 1s 1s 414378310e-09 0s 0s 414382190e-09 1s 1s 414382990e-09 1s 1s 414388550e-09 0s 0s 414392430e-09 1s 1s 414393270e-09 1s 1s 414398790e-09 0s 0s 414402670e-09 1s 1s 414403550e-09 1s 1s 414409030e-09 0s 0s 414412910e-09 1s 1s 414413830e-09 1s 1s 414419270e-09 0s 0s 414423150e-09 1s 1s 414424110e-09 1s 1s 414429510e-09 0s 0s 414433390e-09 1s 1s 414434390e-09 1s 1s 414439750e-09 0s 0s 414443630e-09 1s 1s 414444670e-09 1s 1s 414449990e-09 0s 0s 414453870e-09 1s 1s 414454950e-09 1s 1s 414460230e-09 0s 0s 414464110e-09 1s 1s 414465230e-09 1s 1s 414470470e-09 0s 0s 414474350e-09 1s 1s 414475510e-09 1s 1s 414480710e-09 0s 0s 414484590e-09 1s 1s 414485790e-09 1s 1s 414490950e-09 0s 0s 414494830e-09 1s 1s 414496070e-09 1s 1s 414501190e-09 0s 0s 414505070e-09 1s 1s 414506350e-09 1s 1s 414511430e-09 0s 0s 414515310e-09 1s 1s 414516630e-09 1s 1s 414521670e-09 0s 0s 414525550e-09 1s 1s 414526910e-09 1s 1s 414531910e-09 0s 0s 414535790e-09 1s 1s 414537190e-09 1s 1s 414542150e-09 0s 0s 414546030e-09 1s 1s 414547470e-09 1s 1s 414552390e-09 0s 0s 414556270e-09 1s 1s 414557750e-09 1s 1s 414562630e-09 0s 0s 414566510e-09 1s 1s 414568030e-09 1s 1s 414572870e-09 0s 0s 414576750e-09 1s 1s 414578310e-09 1s 1s 414583110e-09 0s 0s 414586990e-09 1s 1s 414588590e-09 1s 1s 414593350e-09 0s 0s 414597230e-09 1s 1s 414598870e-09 1s 1s 414603590e-09 0s 0s 414607470e-09 1s 1s 414609150e-09 1s 1s 414613830e-09 0s 0s 414617710e-09 1s 1s 414619430e-09 1s 1s 414624070e-09 0s 0s 414627950e-09 1s 1s 414629710e-09 1s 1s 414634310e-09 0s 0s 414638190e-09 1s 1s 414639990e-09 1s 1s 414644550e-09 0s 0s 414648430e-09 1s 1s 414650270e-09 1s 1s 414654790e-09 0s 0s 414658670e-09 1s 1s 414660550e-09 1s 1s 414665030e-09 0s 0s 414668910e-09 1s 1s 414670830e-09 1s 1s 414675270e-09 0s 0s 414679150e-09 1s 1s 414681110e-09 1s 1s 414685510e-09 0s 0s 414689390e-09 1s 1s 414691390e-09 1s 1s 414695750e-09 0s 0s 414699630e-09 1s 1s 414701670e-09 1s 1s 414705990e-09 0s 0s 414709870e-09 1s 1s 414711950e-09 1s 1s 414716230e-09 0s 0s 414720110e-09 1s 1s 414722230e-09 1s 1s 414726470e-09 0s 0s 414730350e-09 1s 1s 414732510e-09 1s 1s 414736710e-09 0s 0s 414740590e-09 1s 1s 414742790e-09 1s 1s 414746950e-09 0s 0s 414750830e-09 1s 1s 414753070e-09 1s 1s 414757190e-09 0s 0s 414761070e-09 1s 1s 414763350e-09 1s 1s 414767430e-09 0s 0s 414771310e-09 1s 1s 414773630e-09 1s 1s 414777670e-09 0s 0s 414781550e-09 1s 1s 414783910e-09 1s 1s 414787910e-09 0s 0s 414791790e-09 1s 1s 414794190e-09 1s 1s 414798150e-09 0s 0s 414802030e-09 1s 1s 414804470e-09 1s 1s 414808390e-09 0s 0s 414812270e-09 1s 1s 414814750e-09 1s 1s 414818630e-09 0s 0s 414822510e-09 1s 1s 414825030e-09 1s 1s 414828870e-09 0s 0s 414832750e-09 1s 1s 414835310e-09 1s 1s 414839110e-09 0s 0s 414842990e-09 1s 1s 414845590e-09 1s 1s 414849350e-09 0s 0s 414853230e-09 1s 1s 414855870e-09 1s 1s 414859590e-09 0s 0s 414863470e-09 1s 1s 414866150e-09 1s 1s 414869830e-09 0s 0s 414873710e-09 1s 1s 414876430e-09 1s 1s 414880070e-09 0s 0s 414883950e-09 1s 1s 414886710e-09 1s 1s 414890310e-09 0s 0s 414894190e-09 1s 1s 414896990e-09 1s 1s 414900550e-09 0s 0s 414904430e-09 1s 1s 414907270e-09 1s 1s 414910790e-09 0s 0s 414914670e-09 1s 1s 414917550e-09 1s 1s 414921030e-09 0s 0s 414924910e-09 1s 1s 414927830e-09 1s 1s 414931270e-09 0s 0s 414935150e-09 1s 1s 414938110e-09 1s 1s 414941510e-09 0s 0s 414945390e-09 1s 1s 414948390e-09 1s 1s 414951750e-09 0s 0s 414955630e-09 1s 1s 414958670e-09 1s 1s 414961990e-09 0s 0s 414965870e-09 1s 1s 414968950e-09 1s 1s 414972230e-09 0s 0s 414976110e-09 1s 1s 414979230e-09 1s 1s 414982470e-09 0s 0s 414986350e-09 1s 1s 414989510e-09 1s 1s 414992710e-09 0s 0s 414996590e-09 1s 1s 414999790e-09 1s 1s 415002950e-09 0s 0s 415006830e-09 1s 1s 415010070e-09 1s 1s 415013190e-09 0s 0s 415017070e-09 1s 1s 415020350e-09 1s 1s 415023430e-09 0s 0s 415027310e-09 1s 1s 415030630e-09 1s 1s 415033670e-09 0s 0s 415037550e-09 1s 1s 415040910e-09 1s 1s 415043910e-09 0s 0s 415047790e-09 1s 1s 415051190e-09 1s 1s 415054150e-09 0s 0s 415058030e-09 1s 1s 415061470e-09 1s 1s 415064390e-09 0s 0s 415068270e-09 1s 1s 415071750e-09 1s 1s 415074630e-09 0s 0s 415078510e-09 1s 1s 415082030e-09 1s 1s 415084870e-09 0s 0s 415088750e-09 1s 1s 415092310e-09 1s 1s 415095110e-09 0s 0s 415098990e-09 1s 1s 415102590e-09 1s 1s 415105350e-09 0s 0s 415109230e-09 1s 1s 415112870e-09 1s 1s 415115590e-09 0s 0s 415119470e-09 1s 1s 415123150e-09 1s 1s 415125830e-09 0s 0s 415129710e-09 1s 1s 415133430e-09 1s 1s 415136070e-09 0s 0s 415139950e-09 1s 1s 415143710e-09 1s 1s 415146310e-09 0s 0s 415150190e-09 1s 1s 415153990e-09 1s 1s 415156550e-09 0s 0s 415160430e-09 1s 1s 415164270e-09 1s 1s 415166790e-09 0s 0s 415170670e-09 1s 1s 415174550e-09 1s 1s 415177030e-09 0s 0s 415180910e-09 1s 1s 415184830e-09 1s 1s 415187270e-09 0s 0s 415191150e-09 1s 1s 415195110e-09 1s 1s 415197510e-09 0s 0s 415201390e-09 1s 1s 415205390e-09 1s 1s 415207750e-09 0s 0s 415211630e-09 1s 1s 415215670e-09 1s 1s 415217990e-09 0s 0s 415221870e-09 1s 1s 415225950e-09 1s 1s 415228230e-09 0s 0s 415232110e-09 1s 1s 415236230e-09 1s 1s 415238470e-09 0s 0s 415242350e-09 1s 1s 415246510e-09 1s 1s 415248710e-09 0s 0s 415252590e-09 1s 1s 415256790e-09 1s 1s 415258950e-09 0s 0s 415262830e-09 1s 1s 415267070e-09 1s 1s 415269190e-09 0s 0s 415273070e-09 1s 1s 415277350e-09 1s 1s 415279430e-09 0s 0s 415283310e-09 1s 1s 415287630e-09 1s 1s 415289670e-09 0s 0s 415293550e-09 1s 1s 415297910e-09 1s 1s 415299910e-09 0s 0s 415303790e-09 1s 1s 415308190e-09 1s 1s 415310150e-09 0s 0s 415314030e-09 1s 1s 415318470e-09 1s 1s 415320390e-09 0s 0s 415324270e-09 1s 1s 415328750e-09 1s 1s 415330630e-09 0s 0s 415334510e-09 1s 1s 415339030e-09 1s 1s 415340870e-09 0s 0s 415344750e-09 1s 1s 415349310e-09 1s 1s 415351110e-09 0s 0s 415354990e-09 1s 1s 415359590e-09 1s 1s 415361350e-09 0s 0s 415365230e-09 1s 1s 415369870e-09 1s 1s 415371590e-09 0s 0s 415375470e-09 1s 1s 415380150e-09 1s 1s 415381830e-09 0s 0s 415385710e-09 1s 1s 415390430e-09 1s 1s 415392070e-09 0s 0s 415395950e-09 1s 1s 415400710e-09 1s 1s 415402310e-09 0s 0s 415406190e-09 1s 1s 415410990e-09 1s 1s 415412550e-09 0s 0s 415416430e-09 1s 1s 415421270e-09 1s 1s 415422790e-09 0s 0s 415426670e-09 1s 1s 415431550e-09 1s 1s 415433030e-09 0s 0s 415436910e-09 1s 1s 415441830e-09 1s 1s 415443270e-09 0s 0s 415447150e-09 1s 1s 415452110e-09 1s 1s 415453510e-09 0s 0s 415457390e-09 1s 1s 415462390e-09 1s 1s 415463750e-09 0s 0s 415467630e-09 1s 1s 415472670e-09 1s 1s 415473990e-09 0s 0s 415477870e-09 1s 1s 415482950e-09 1s 1s 415484230e-09 0s 0s 415488110e-09 1s 1s 415493230e-09 1s 1s 415494470e-09 0s 0s 415498350e-09 1s 1s 415503510e-09 1s 1s 415504710e-09 0s 0s 415508590e-09 1s 1s 415513790e-09 1s 1s 415514950e-09 0s 0s 415518830e-09 1s 1s 415524070e-09 1s 1s 415525190e-09 0s 0s 415529070e-09 1s 1s 415534350e-09 1s 1s 415535430e-09 0s 0s 415539310e-09 1s 1s 415544630e-09 1s 1s 415545670e-09 0s 0s 415549550e-09 1s 1s 415554910e-09 1s 1s 415555910e-09 0s 0s 415559790e-09 1s 1s 415565190e-09 1s 1s 415566150e-09 0s 0s 415570030e-09 1s 1s 415575470e-09 1s 1s 415576390e-09 0s 0s 415580270e-09 1s 1s 415585750e-09 1s 1s 415586630e-09 0s 0s 415590510e-09 1s 1s 415596030e-09 1s 1s 415596870e-09 0s 0s 415600750e-09 1s 1s 415606310e-09 1s 1s 415607110e-09 0s 0s 415610990e-09 1s 1s 415616590e-09 1s 1s 415617350e-09 0s 0s 415621230e-09 1s 1s 415626870e-09 1s 1s 415627590e-09 0s 0s 415631470e-09 1s 1s 415637150e-09 1s 1s 415637830e-09 0s 0s 415641710e-09 1s 1s 415647430e-09 1s 1s 415648070e-09 0s 0s 415651950e-09 1s 1s 415657710e-09 1s 1s 415658310e-09 0s 0s 415662190e-09 1s 1s 415667990e-09 1s 1s 415668550e-09 0s 0s 415672430e-09 1s 1s 415678270e-09 1s 1s 415678790e-09 0s 0s 415682670e-09 1s 1s 415688550e-09 1s 1s 415689030e-09 0s 0s 415692910e-09 1s 1s 415698830e-09 1s 1s 415699270e-09 0s 0s 415703150e-09 1s 1s 415709110e-09 1s 1s 415709510e-09 0s 0s 415713390e-09 1s 1s 415719390e-09 1s 1s 415719750e-09 0s 0s 415723630e-09 1s 1s 415729670e-09 1s 1s 415729990e-09 0s 0s 415733870e-09 1s 1s 415739950e-09 1s 1s 415740230e-09 0s 0s 415744110e-09 1s 1s 415750230e-09 1s 1s 415750470e-09 0s 0s 415754350e-09 1s 1s 415760510e-09 1s 1s 415760710e-09 0s 0s 415764590e-09 1s 1s 415770790e-09 1s 1s 415770950e-09 0s 0s 415774830e-09 1s 1s 415781070e-09 1s 1s 415781190e-09 0s 0s 415785070e-09 1s 1s 415791350e-09 1s 1s 415791430e-09 0s 0s 415795310e-09 1s 1s 415801630e-09 1s 1s 415801670e-09 0s 0s 415805550e-09 1s 1s 415811910e-09 0s 0s 415815790e-09 1s 1s 415822150e-09 0s 0s 415822190e-09 0s 0s 415826030e-09 1s 1s 415832390e-09 0s 0s 415832470e-09 0s 0s 415836270e-09 1s 1s 415842630e-09 0s 0s 415842750e-09 0s 0s 415846510e-09 1s 1s 415852870e-09 0s 0s 415853030e-09 0s 0s 415856750e-09 1s 1s 415863110e-09 0s 0s 415863310e-09 0s 0s 415866990e-09 1s 1s 415873350e-09 0s 0s 415873590e-09 0s 0s 415877230e-09 1s 1s 415883590e-09 0s 0s 415883870e-09 0s 0s 415887470e-09 1s 1s 415893830e-09 0s 0s 415894150e-09 0s 0s 415897710e-09 1s 1s 415904070e-09 0s 0s 415904430e-09 0s 0s 415907950e-09 1s 1s 415914310e-09 0s 0s 415914710e-09 0s 0s 415918190e-09 1s 1s 415924550e-09 0s 0s 415924990e-09 0s 0s 415928430e-09 1s 1s 415934790e-09 0s 0s 415935270e-09 0s 0s 415938670e-09 1s 1s 415945030e-09 0s 0s 415945550e-09 0s 0s 415948910e-09 1s 1s 415955270e-09 0s 0s 415955830e-09 0s 0s 415959150e-09 1s 1s 415965510e-09 0s 0s 415966110e-09 0s 0s 415969390e-09 1s 1s 415975750e-09 0s 0s 415976390e-09 0s 0s 415979630e-09 1s 1s 415985990e-09 0s 0s 415986670e-09 0s 0s 415989870e-09 1s 1s 415996230e-09 0s 0s 415996950e-09 0s 0s 416000110e-09 1s 1s 416006470e-09 0s 0s 416007230e-09 0s 0s 416010350e-09 1s 1s 416016710e-09 0s 0s 416017510e-09 0s 0s 416020590e-09 1s 1s 416026950e-09 0s 0s 416027790e-09 0s 0s 416030830e-09 1s 1s 416037190e-09 0s 0s 416038070e-09 0s 0s 416041070e-09 1s 1s 416047430e-09 0s 0s 416048350e-09 0s 0s 416051310e-09 1s 1s 416057670e-09 0s 0s 416058630e-09 0s 0s 416061550e-09 1s 1s 416067910e-09 0s 0s 416068910e-09 0s 0s 416071790e-09 1s 1s 416078150e-09 0s 0s 416079190e-09 0s 0s 416082030e-09 1s 1s 416088390e-09 0s 0s 416089470e-09 0s 0s 416092270e-09 1s 1s 416098630e-09 0s 0s 416099750e-09 0s 0s 416102510e-09 1s 1s 416108870e-09 0s 0s 416110030e-09 0s 0s 416112750e-09 1s 1s 416119110e-09 0s 0s 416120310e-09 0s 0s 416122990e-09 1s 1s 416129350e-09 0s 0s 416130590e-09 0s 0s 416133230e-09 1s 1s 416139590e-09 0s 0s 416140870e-09 0s 0s 416143470e-09 1s 1s 416149830e-09 0s 0s 416151150e-09 0s 0s 416153710e-09 1s 1s 416160070e-09 0s 0s 416161430e-09 0s 0s 416163950e-09 1s 1s 416170310e-09 0s 0s 416171710e-09 0s 0s 416174190e-09 1s 1s 416180550e-09 0s 0s 416181990e-09 0s 0s 416184430e-09 1s 1s 416190790e-09 0s 0s 416192270e-09 0s 0s 416194670e-09 1s 1s 416201030e-09 0s 0s 416202550e-09 0s 0s 416204910e-09 1s 1s 416211270e-09 0s 0s 416212830e-09 0s 0s 416215150e-09 1s 1s 416221510e-09 0s 0s 416223110e-09 0s 0s 416225390e-09 1s 1s 416231750e-09 0s 0s 416233390e-09 0s 0s 416235630e-09 1s 1s 416241990e-09 0s 0s 416243670e-09 0s 0s 416245870e-09 1s 1s 416252230e-09 0s 0s 416253950e-09 0s 0s 416256110e-09 1s 1s 416262470e-09 0s 0s 416264230e-09 0s 0s 416266350e-09 1s 1s 416272710e-09 0s 0s 416274510e-09 0s 0s 416276590e-09 1s 1s 416282950e-09 0s 0s 416284790e-09 0s 0s 416286830e-09 1s 1s 416293190e-09 0s 0s 416295070e-09 0s 0s 416297070e-09 1s 1s 416303430e-09 0s 0s 416305350e-09 0s 0s 416307310e-09 1s 1s 416313670e-09 0s 0s 416315630e-09 0s 0s 416317550e-09 1s 1s 416323910e-09 0s 0s 416325910e-09 0s 0s 416327790e-09 1s 1s 416334150e-09 0s 0s 416336190e-09 0s 0s 416338030e-09 1s 1s 416344390e-09 0s 0s 416346470e-09 0s 0s 416348270e-09 1s 1s 416354630e-09 0s 0s 416356750e-09 0s 0s 416358510e-09 1s 1s 416364870e-09 0s 0s 416367030e-09 0s 0s 416368750e-09 1s 1s 416375110e-09 0s 0s 416377310e-09 0s 0s 416378990e-09 1s 1s 416385350e-09 0s 0s 416387590e-09 0s 0s 416389230e-09 1s 1s 416395590e-09 0s 0s 416397870e-09 0s 0s 416399470e-09 1s 1s 416405830e-09 0s 0s 416408150e-09 0s 0s 416409710e-09 1s 1s 416416070e-09 0s 0s 416418430e-09 0s 0s 416419950e-09 1s 1s 416426310e-09 0s 0s 416428710e-09 0s 0s 416430190e-09 1s 1s 416436550e-09 0s 0s 416438990e-09 0s 0s 416440430e-09 1s 1s 416446790e-09 0s 0s 416449270e-09 0s 0s 416450670e-09 1s 1s 416457030e-09 0s 0s 416459550e-09 0s 0s 416460910e-09 1s 1s 416467270e-09 0s 0s 416469830e-09 0s 0s 416471150e-09 1s 1s 416477510e-09 0s 0s 416480110e-09 0s 0s 416481390e-09 1s 1s 416487750e-09 0s 0s 416490390e-09 0s 0s 416491630e-09 1s 1s 416497990e-09 0s 0s 416500670e-09 0s 0s 416501870e-09 1s 1s 416508230e-09 0s 0s 416510950e-09 0s 0s 416512110e-09 1s 1s 416518470e-09 0s 0s 416521230e-09 0s 0s 416522350e-09 1s 1s 416528710e-09 0s 0s 416531510e-09 0s 0s 416532590e-09 1s 1s 416538950e-09 0s 0s 416541790e-09 0s 0s 416542830e-09 1s 1s 416549190e-09 0s 0s 416552070e-09 0s 0s 416553070e-09 1s 1s 416559430e-09 0s 0s 416562350e-09 0s 0s 416563310e-09 1s 1s 416569670e-09 0s 0s 416572630e-09 0s 0s 416573550e-09 1s 1s 416579910e-09 0s 0s 416582910e-09 0s 0s 416583790e-09 1s 1s 416590150e-09 0s 0s 416593190e-09 0s 0s 416594030e-09 1s 1s 416600390e-09 0s 0s 416603470e-09 0s 0s 416604270e-09 1s 1s 416610630e-09 0s 0s 416613750e-09 0s 0s 416614510e-09 1s 1s 416620870e-09 0s 0s 416624030e-09 0s 0s 416624750e-09 1s 1s 416631110e-09 0s 0s 416634310e-09 0s 0s 416634990e-09 1s 1s 416641350e-09 0s 0s 416644590e-09 0s 0s 416645230e-09 1s 1s 416651590e-09 0s 0s 416654870e-09 0s 0s 416655470e-09 1s 1s 416661830e-09 0s 0s 416665150e-09 0s 0s 416665710e-09 1s 1s 416672070e-09 0s 0s 416675430e-09 0s 0s 416675950e-09 1s 1s 416682310e-09 0s 0s 416685710e-09 0s 0s 416686190e-09 1s 1s 416692550e-09 0s 0s 416695990e-09 0s 0s 416696430e-09 1s 1s 416702790e-09 0s 0s 416706270e-09 0s 0s 416706670e-09 1s 1s 416713030e-09 0s 0s 416716550e-09 0s 0s 416716910e-09 1s 1s 416723270e-09 0s 0s 416726830e-09 0s 0s 416727150e-09 1s 1s 416733510e-09 0s 0s 416737110e-09 0s 0s 416737390e-09 1s 1s 416743750e-09 0s 0s 416747390e-09 0s 0s 416747630e-09 1s 1s 416753990e-09 0s 0s 416757670e-09 0s 0s 416757870e-09 1s 1s 416764230e-09 0s 0s 416767950e-09 0s 0s 416768110e-09 1s 1s 416774470e-09 0s 0s 416778230e-09 0s 0s 416778350e-09 1s 1s 416784710e-09 0s 0s 416788510e-09 0s 0s 416788590e-09 1s 1s 416794950e-09 0s 0s 416798790e-09 0s 0s 416798830e-09 1s 1s 416805190e-09 0s 0s 416809070e-09 1s 1s 416809110e-09 1s 1s 416815470e-09 0s 0s 416819310e-09 1s 1s 416819390e-09 1s 1s 416825710e-09 0s 0s 416829550e-09 1s 1s 416829670e-09 1s 1s 416835950e-09 0s 0s 416839790e-09 1s 1s 416839950e-09 1s 1s 416846190e-09 0s 0s 416850030e-09 1s 1s 416850230e-09 1s 1s 416856430e-09 0s 0s 416860270e-09 1s 1s 416860510e-09 1s 1s 416866670e-09 0s 0s 416870510e-09 1s 1s 416870790e-09 1s 1s 416876910e-09 0s 0s 416880750e-09 1s 1s 416881070e-09 1s 1s 416887150e-09 0s 0s 416890990e-09 1s 1s 416891350e-09 1s 1s 416897390e-09 0s 0s 416901230e-09 1s 1s 416901630e-09 1s 1s 416907630e-09 0s 0s 416911470e-09 1s 1s 416911910e-09 1s 1s 416917870e-09 0s 0s 416921710e-09 1s 1s 416922190e-09 1s 1s 416928110e-09 0s 0s 416931950e-09 1s 1s 416932470e-09 1s 1s 416938350e-09 0s 0s 416942190e-09 1s 1s 416942750e-09 1s 1s 416948590e-09 0s 0s 416952430e-09 1s 1s 416953030e-09 1s 1s 416958830e-09 0s 0s 416962670e-09 1s 1s 416963310e-09 1s 1s 416969070e-09 0s 0s 416972910e-09 1s 1s 416973590e-09 1s 1s 416979310e-09 0s 0s 416983150e-09 1s 1s 416983870e-09 1s 1s 416989550e-09 0s 0s 416993390e-09 1s 1s 416994150e-09 1s 1s 416999790e-09 0s 0s 417003630e-09 1s 1s 417004430e-09 1s 1s 417010030e-09 0s 0s 417013870e-09 1s 1s 417014710e-09 1s 1s 417020270e-09 0s 0s 417024110e-09 1s 1s 417024990e-09 1s 1s 417030510e-09 0s 0s 417034350e-09 1s 1s 417035270e-09 1s 1s 417040750e-09 0s 0s 417044590e-09 1s 1s 417045550e-09 1s 1s 417050990e-09 0s 0s 417054830e-09 1s 1s 417055830e-09 1s 1s 417061230e-09 0s 0s 417065070e-09 1s 1s 417066110e-09 1s 1s 417071470e-09 0s 0s 417075310e-09 1s 1s 417076390e-09 1s 1s 417081710e-09 0s 0s 417085550e-09 1s 1s 417086670e-09 1s 1s 417091950e-09 0s 0s 417095790e-09 1s 1s 417096950e-09 1s 1s 417102190e-09 0s 0s 417106030e-09 1s 1s 417107230e-09 1s 1s 417112430e-09 0s 0s 417116270e-09 1s 1s 417117510e-09 1s 1s 417122670e-09 0s 0s 417126510e-09 1s 1s 417127790e-09 1s 1s 417132910e-09 0s 0s 417136750e-09 1s 1s 417138070e-09 1s 1s 417143150e-09 0s 0s 417146990e-09 1s 1s 417148350e-09 1s 1s 417153390e-09 0s 0s 417157230e-09 1s 1s 417158630e-09 1s 1s 417163630e-09 0s 0s 417167470e-09 1s 1s 417168910e-09 1s 1s 417173870e-09 0s 0s 417177710e-09 1s 1s 417179190e-09 1s 1s 417184110e-09 0s 0s 417187950e-09 1s 1s 417189470e-09 1s 1s 417194350e-09 0s 0s 417198190e-09 1s 1s 417199750e-09 1s 1s 417204590e-09 0s 0s 417208430e-09 1s 1s 417210030e-09 1s 1s 417214830e-09 0s 0s 417218670e-09 1s 1s 417220310e-09 1s 1s 417225070e-09 0s 0s 417228910e-09 1s 1s 417230590e-09 1s 1s 417235310e-09 0s 0s 417239150e-09 1s 1s 417240870e-09 1s 1s 417245550e-09 0s 0s 417249390e-09 1s 1s 417251150e-09 1s 1s 417255790e-09 0s 0s 417259630e-09 1s 1s 417261430e-09 1s 1s 417266030e-09 0s 0s 417269870e-09 1s 1s 417271710e-09 1s 1s 417276270e-09 0s 0s 417280110e-09 1s 1s 417281990e-09 1s 1s 417286510e-09 0s 0s 417290350e-09 1s 1s 417292270e-09 1s 1s 417296750e-09 0s 0s 417300590e-09 1s 1s 417302550e-09 1s 1s 417306990e-09 0s 0s 417310830e-09 1s 1s 417312830e-09 1s 1s 417317230e-09 0s 0s 417321070e-09 1s 1s 417323110e-09 1s 1s 417327470e-09 0s 0s 417331310e-09 1s 1s 417333390e-09 1s 1s 417337710e-09 0s 0s 417341550e-09 1s 1s 417343670e-09 1s 1s 417347950e-09 0s 0s 417351790e-09 1s 1s 417353950e-09 1s 1s 417358190e-09 0s 0s 417362030e-09 1s 1s 417364230e-09 1s 1s 417368430e-09 0s 0s 417372270e-09 1s 1s 417374510e-09 1s 1s 417378670e-09 0s 0s 417382510e-09 1s 1s 417384790e-09 1s 1s 417388910e-09 0s 0s 417392750e-09 1s 1s 417395070e-09 1s 1s 417399150e-09 0s 0s 417402990e-09 1s 1s 417405350e-09 1s 1s 417409390e-09 0s 0s 417413230e-09 1s 1s 417415630e-09 1s 1s 417419630e-09 0s 0s 417423470e-09 1s 1s 417425910e-09 1s 1s 417429870e-09 0s 0s 417433710e-09 1s 1s 417436190e-09 1s 1s 417440110e-09 0s 0s 417443950e-09 1s 1s 417446470e-09 1s 1s 417450350e-09 0s 0s 417454190e-09 1s 1s 417456750e-09 1s 1s 417460590e-09 0s 0s 417464430e-09 1s 1s 417467030e-09 1s 1s 417470830e-09 0s 0s 417474670e-09 1s 1s 417477310e-09 1s 1s 417481070e-09 0s 0s 417484910e-09 1s 1s 417487590e-09 1s 1s 417491310e-09 0s 0s 417495150e-09 1s 1s 417497870e-09 1s 1s 417501550e-09 0s 0s 417505390e-09 1s 1s 417508150e-09 1s 1s 417511790e-09 0s 0s 417515630e-09 1s 1s 417518430e-09 1s 1s 417522030e-09 0s 0s 417525870e-09 1s 1s 417528710e-09 1s 1s 417532270e-09 0s 0s 417536110e-09 1s 1s 417538990e-09 1s 1s 417542510e-09 0s 0s 417546350e-09 1s 1s 417549270e-09 1s 1s 417552750e-09 0s 0s 417556590e-09 1s 1s 417559550e-09 1s 1s 417562990e-09 0s 0s 417566830e-09 1s 1s 417569830e-09 1s 1s 417573230e-09 0s 0s 417577070e-09 1s 1s 417580110e-09 1s 1s 417583470e-09 0s 0s 417587310e-09 1s 1s 417590390e-09 1s 1s 417593710e-09 0s 0s 417597550e-09 1s 1s 417600670e-09 1s 1s 417603950e-09 0s 0s 417607790e-09 1s 1s 417610950e-09 1s 1s 417614190e-09 0s 0s 417618030e-09 1s 1s 417621230e-09 1s 1s 417624430e-09 0s 0s 417628270e-09 1s 1s 417631510e-09 1s 1s 417634670e-09 0s 0s 417638510e-09 1s 1s 417641790e-09 1s 1s 417644910e-09 0s 0s 417648750e-09 1s 1s 417652070e-09 1s 1s 417655150e-09 0s 0s 417658990e-09 1s 1s 417662350e-09 1s 1s 417665390e-09 0s 0s 417669230e-09 1s 1s 417672630e-09 1s 1s 417675630e-09 0s 0s 417679470e-09 1s 1s 417682910e-09 1s 1s 417685870e-09 0s 0s 417689710e-09 1s 1s 417693190e-09 1s 1s 417696110e-09 0s 0s 417699950e-09 1s 1s 417703470e-09 1s 1s 417706350e-09 0s 0s 417710190e-09 1s 1s 417713750e-09 1s 1s 417716590e-09 0s 0s 417720430e-09 1s 1s 417724030e-09 1s 1s 417726830e-09 0s 0s 417730670e-09 1s 1s 417734310e-09 1s 1s 417737070e-09 0s 0s 417740910e-09 1s 1s 417744590e-09 1s 1s 417747310e-09 0s 0s 417751150e-09 1s 1s 417754870e-09 1s 1s 417757550e-09 0s 0s 417761390e-09 1s 1s 417765150e-09 1s 1s 417767790e-09 0s 0s 417771630e-09 1s 1s 417775430e-09 1s 1s 417778030e-09 0s 0s 417781870e-09 1s 1s 417785710e-09 1s 1s 417788270e-09 0s 0s 417792110e-09 1s 1s 417795990e-09 1s 1s 417798510e-09 0s 0s 417802350e-09 1s 1s 417806270e-09 1s 1s 417808750e-09 0s 0s 417812590e-09 1s 1s 417816550e-09 1s 1s 417818990e-09 0s 0s 417822830e-09 1s 1s 417826830e-09 1s 1s 417829230e-09 0s 0s 417833070e-09 1s 1s 417837110e-09 1s 1s 417839470e-09 0s 0s 417843310e-09 1s 1s 417847390e-09 1s 1s 417849710e-09 0s 0s 417853550e-09 1s 1s 417857670e-09 1s 1s 417859950e-09 0s 0s 417863790e-09 1s 1s 417867950e-09 1s 1s 417870190e-09 0s 0s 417874030e-09 1s 1s 417878230e-09 1s 1s 417880430e-09 0s 0s 417884270e-09 1s 1s 417888510e-09 1s 1s 417890670e-09 0s 0s 417894510e-09 1s 1s 417898790e-09 1s 1s 417900910e-09 0s 0s 417904750e-09 1s 1s 417909070e-09 1s 1s 417911150e-09 0s 0s 417914990e-09 1s 1s 417919350e-09 1s 1s 417921390e-09 0s 0s 417925230e-09 1s 1s 417929630e-09 1s 1s 417931630e-09 0s 0s 417935470e-09 1s 1s 417939910e-09 1s 1s 417941870e-09 0s 0s 417945710e-09 1s 1s 417950190e-09 1s 1s 417952110e-09 0s 0s 417955950e-09 1s 1s 417960470e-09 1s 1s 417962350e-09 0s 0s 417966190e-09 1s 1s 417970750e-09 1s 1s 417972590e-09 0s 0s 417976430e-09 1s 1s 417981030e-09 1s 1s 417982830e-09 0s 0s 417986670e-09 1s 1s 417991310e-09 1s 1s 417993070e-09 0s 0s 417996910e-09 1s 1s 418001590e-09 1s 1s 418003310e-09 0s 0s 418007150e-09 1s 1s 418011870e-09 1s 1s 418013550e-09 0s 0s 418017390e-09 1s 1s 418022150e-09 1s 1s 418023790e-09 0s 0s 418027630e-09 1s 1s 418032430e-09 1s 1s 418034030e-09 0s 0s 418037870e-09 1s 1s 418042710e-09 1s 1s 418044270e-09 0s 0s 418048110e-09 1s 1s 418052990e-09 1s 1s 418054510e-09 0s 0s 418058350e-09 1s 1s 418063270e-09 1s 1s 418064750e-09 0s 0s 418068590e-09 1s 1s 418073550e-09 1s 1s 418074990e-09 0s 0s 418078830e-09 1s 1s 418083830e-09 1s 1s 418085230e-09 0s 0s 418089070e-09 1s 1s 418094110e-09 1s 1s 418095470e-09 0s 0s 418099310e-09 1s 1s 418104390e-09 1s 1s 418105710e-09 0s 0s 418109550e-09 1s 1s 418114670e-09 1s 1s 418115950e-09 0s 0s 418119790e-09 1s 1s 418124950e-09 1s 1s 418126190e-09 0s 0s 418130030e-09 1s 1s 418135230e-09 1s 1s 418136430e-09 0s 0s 418140270e-09 1s 1s 418145510e-09 1s 1s 418146670e-09 0s 0s 418150510e-09 1s 1s 418155790e-09 1s 1s 418156910e-09 0s 0s 418160750e-09 1s 1s 418166070e-09 1s 1s 418167150e-09 0s 0s 418170990e-09 1s 1s 418176350e-09 1s 1s 418177390e-09 0s 0s 418181230e-09 1s 1s 418186630e-09 1s 1s 418187630e-09 0s 0s 418191470e-09 1s 1s 418196910e-09 1s 1s 418197870e-09 0s 0s 418201710e-09 1s 1s 418207190e-09 1s 1s 418208110e-09 0s 0s 418211950e-09 1s 1s 418217470e-09 1s 1s 418218350e-09 0s 0s 418222190e-09 1s 1s 418227750e-09 1s 1s 418228590e-09 0s 0s 418232430e-09 1s 1s 418238030e-09 1s 1s 418238830e-09 0s 0s 418242670e-09 1s 1s 418248310e-09 1s 1s 418249070e-09 0s 0s 418252910e-09 1s 1s 418258590e-09 1s 1s 418259310e-09 0s 0s 418263150e-09 1s 1s 418268870e-09 1s 1s 418269550e-09 0s 0s 418273390e-09 1s 1s 418279150e-09 1s 1s 418279790e-09 0s 0s 418283630e-09 1s 1s 418289430e-09 1s 1s 418290030e-09 0s 0s 418293870e-09 1s 1s 418299710e-09 1s 1s 418300270e-09 0s 0s 418304110e-09 1s 1s 418309990e-09 1s 1s 418310510e-09 0s 0s 418314350e-09 1s 1s 418320270e-09 1s 1s 418320750e-09 0s 0s 418324590e-09 1s 1s 418330550e-09 1s 1s 418330990e-09 0s 0s 418334830e-09 1s 1s 418340830e-09 1s 1s 418341230e-09 0s 0s 418345070e-09 1s 1s 418351110e-09 1s 1s 418351470e-09 0s 0s 418355310e-09 1s 1s 418361390e-09 1s 1s 418361710e-09 0s 0s 418365550e-09 1s 1s 418371670e-09 1s 1s 418371950e-09 0s 0s 418375790e-09 1s 1s 418381950e-09 1s 1s 418382190e-09 0s 0s 418386030e-09 1s 1s 418392230e-09 1s 1s 418392430e-09 0s 0s 418396270e-09 1s 1s 418402510e-09 1s 1s 418402670e-09 0s 0s 418406510e-09 1s 1s 418412790e-09 1s 1s 418412910e-09 0s 0s 418416750e-09 1s 1s 418423070e-09 1s 1s 418423150e-09 0s 0s 418426990e-09 1s 1s 418433350e-09 1s 1s 418433390e-09 0s 0s 418437230e-09 1s 1s 418443630e-09 0s 0s 418447470e-09 1s 1s 418453870e-09 0s 0s 418453910e-09 0s 0s 418457710e-09 1s 1s 418464110e-09 0s 0s 418464190e-09 0s 0s 418467950e-09 1s 1s 418474350e-09 0s 0s 418474470e-09 0s 0s 418478190e-09 1s 1s 418484590e-09 0s 0s 418484750e-09 0s 0s 418488430e-09 1s 1s 418494830e-09 0s 0s 418495030e-09 0s 0s 418498670e-09 1s 1s 418505070e-09 0s 0s 418505310e-09 0s 0s 418508910e-09 1s 1s 418515310e-09 0s 0s 418515590e-09 0s 0s 418519150e-09 1s 1s 418525550e-09 0s 0s 418525870e-09 0s 0s 418529390e-09 1s 1s 418535790e-09 0s 0s 418536150e-09 0s 0s 418539630e-09 1s 1s 418546030e-09 0s 0s 418546430e-09 0s 0s 418549870e-09 1s 1s 418556270e-09 0s 0s 418556710e-09 0s 0s 418560110e-09 1s 1s 418566510e-09 0s 0s 418566990e-09 0s 0s 418570350e-09 1s 1s 418576750e-09 0s 0s 418577270e-09 0s 0s 418580590e-09 1s 1s 418586990e-09 0s 0s 418587550e-09 0s 0s 418590830e-09 1s 1s 418597230e-09 0s 0s 418597830e-09 0s 0s 418601070e-09 1s 1s 418607470e-09 0s 0s 418608110e-09 0s 0s 418611310e-09 1s 1s 418617710e-09 0s 0s 418618390e-09 0s 0s 418621550e-09 1s 1s 418627950e-09 0s 0s 418628670e-09 0s 0s 418631790e-09 1s 1s 418638190e-09 0s 0s 418638950e-09 0s 0s 418642030e-09 1s 1s 418648430e-09 0s 0s 418649230e-09 0s 0s 418652270e-09 1s 1s 418658670e-09 0s 0s 418659510e-09 0s 0s 418662510e-09 1s 1s 418668910e-09 0s 0s 418669790e-09 0s 0s 418672750e-09 1s 1s 418679150e-09 0s 0s 418680070e-09 0s 0s 418682990e-09 1s 1s 418689390e-09 0s 0s 418690350e-09 0s 0s 418693230e-09 1s 1s 418699630e-09 0s 0s 418700630e-09 0s 0s 418703470e-09 1s 1s 418709870e-09 0s 0s 418710910e-09 0s 0s 418713710e-09 1s 1s 418720110e-09 0s 0s 418721190e-09 0s 0s 418723950e-09 1s 1s 418730350e-09 0s 0s 418731470e-09 0s 0s 418734190e-09 1s 1s 418740590e-09 0s 0s 418741750e-09 0s 0s 418744430e-09 1s 1s 418750830e-09 0s 0s 418752030e-09 0s 0s 418754670e-09 1s 1s 418761070e-09 0s 0s 418762310e-09 0s 0s 418764910e-09 1s 1s 418771310e-09 0s 0s 418772590e-09 0s 0s 418775150e-09 1s 1s 418781550e-09 0s 0s 418782870e-09 0s 0s 418785390e-09 1s 1s 418791790e-09 0s 0s 418793150e-09 0s 0s 418795630e-09 1s 1s 418802030e-09 0s 0s 418803430e-09 0s 0s 418805870e-09 1s 1s 418812270e-09 0s 0s 418813710e-09 0s 0s 418816110e-09 1s 1s 418822510e-09 0s 0s 418823990e-09 0s 0s 418826350e-09 1s 1s 418832750e-09 0s 0s 418834270e-09 0s 0s 418836590e-09 1s 1s 418842990e-09 0s 0s 418844550e-09 0s 0s 418846830e-09 1s 1s 418853230e-09 0s 0s 418854830e-09 0s 0s 418857070e-09 1s 1s 418863470e-09 0s 0s 418865110e-09 0s 0s 418867310e-09 1s 1s 418873710e-09 0s 0s 418875390e-09 0s 0s 418877550e-09 1s 1s 418883950e-09 0s 0s 418885670e-09 0s 0s 418887790e-09 1s 1s 418894190e-09 0s 0s 418895950e-09 0s 0s 418898030e-09 1s 1s 418904430e-09 0s 0s 418906230e-09 0s 0s 418908270e-09 1s 1s 418914670e-09 0s 0s 418916510e-09 0s 0s 418918510e-09 1s 1s 418924910e-09 0s 0s 418926790e-09 0s 0s 418928750e-09 1s 1s 418935150e-09 0s 0s 418937070e-09 0s 0s 418938990e-09 1s 1s 418945390e-09 0s 0s 418947350e-09 0s 0s 418949230e-09 1s 1s 418955630e-09 0s 0s 418957630e-09 0s 0s 418959470e-09 1s 1s 418965870e-09 0s 0s 418967910e-09 0s 0s 418969710e-09 1s 1s 418976110e-09 0s 0s 418978190e-09 0s 0s 418979950e-09 1s 1s 418986350e-09 0s 0s 418988470e-09 0s 0s 418990190e-09 1s 1s 418996590e-09 0s 0s 418998750e-09 0s 0s 419000430e-09 1s 1s 419006830e-09 0s 0s 419009030e-09 0s 0s 419010670e-09 1s 1s 419017070e-09 0s 0s 419019310e-09 0s 0s 419020910e-09 1s 1s 419027310e-09 0s 0s 419029590e-09 0s 0s 419031150e-09 1s 1s 419037550e-09 0s 0s 419039870e-09 0s 0s 419041390e-09 1s 1s 419047790e-09 0s 0s 419050150e-09 0s 0s 419051630e-09 1s 1s 419058030e-09 0s 0s 419060430e-09 0s 0s 419061870e-09 1s 1s 419068270e-09 0s 0s 419070710e-09 0s 0s 419072110e-09 1s 1s 419078510e-09 0s 0s 419080990e-09 0s 0s 419082350e-09 1s 1s 419088750e-09 0s 0s 419091270e-09 0s 0s 419092590e-09 1s 1s 419098990e-09 0s 0s 419101550e-09 0s 0s 419102830e-09 1s 1s 419109230e-09 0s 0s 419111830e-09 0s 0s 419113070e-09 1s 1s 419119470e-09 0s 0s 419122110e-09 0s 0s 419123310e-09 1s 1s 419129710e-09 0s 0s 419132390e-09 0s 0s 419133550e-09 1s 1s 419139950e-09 0s 0s 419142670e-09 0s 0s 419143790e-09 1s 1s 419150190e-09 0s 0s 419152950e-09 0s 0s 419154030e-09 1s 1s 419160430e-09 0s 0s 419163230e-09 0s 0s 419164270e-09 1s 1s 419170670e-09 0s 0s 419173510e-09 0s 0s 419174510e-09 1s 1s 419180910e-09 0s 0s 419183790e-09 0s 0s 419184750e-09 1s 1s 419191150e-09 0s 0s 419194070e-09 0s 0s 419194990e-09 1s 1s 419201390e-09 0s 0s 419204350e-09 0s 0s 419205230e-09 1s 1s 419211630e-09 0s 0s 419214630e-09 0s 0s 419215470e-09 1s 1s 419221870e-09 0s 0s 419224910e-09 0s 0s 419225710e-09 1s 1s 419232110e-09 0s 0s 419235190e-09 0s 0s 419235950e-09 1s 1s 419242350e-09 0s 0s 419245470e-09 0s 0s 419246190e-09 1s 1s 419252590e-09 0s 0s 419255750e-09 0s 0s 419256430e-09 1s 1s 419262830e-09 0s 0s 419266030e-09 0s 0s 419266670e-09 1s 1s 419273070e-09 0s 0s 419276310e-09 0s 0s 419276910e-09 1s 1s 419283310e-09 0s 0s 419286590e-09 0s 0s 419287150e-09 1s 1s 419293550e-09 0s 0s 419296870e-09 0s 0s 419297390e-09 1s 1s 419303790e-09 0s 0s 419307150e-09 0s 0s 419307630e-09 1s 1s 419314030e-09 0s 0s 419317430e-09 0s 0s 419317870e-09 1s 1s 419324270e-09 0s 0s 419327710e-09 0s 0s 419328110e-09 1s 1s 419334510e-09 0s 0s 419337990e-09 0s 0s 419338350e-09 1s 1s 419344750e-09 0s 0s 419348270e-09 0s 0s 419348590e-09 1s 1s 419354990e-09 0s 0s 419358550e-09 0s 0s 419358830e-09 1s 1s 419365230e-09 0s 0s 419368830e-09 0s 0s 419369070e-09 1s 1s 419375470e-09 0s 0s 419379110e-09 0s 0s 419379310e-09 1s 1s 419385710e-09 0s 0s 419389390e-09 0s 0s 419389550e-09 1s 1s 419395950e-09 0s 0s 419399670e-09 0s 0s 419399790e-09 1s 1s 419406190e-09 0s 0s 419409950e-09 0s 0s 419410030e-09 1s 1s 419416430e-09 0s 0s 419420230e-09 0s 0s 419420270e-09 1s 1s 419426670e-09 0s 0s 419430510e-09 1s 1s 419430550e-09 1s 1s 419436950e-09 0s 0s 419440750e-09 1s 1s 419440830e-09 1s 1s 419447190e-09 0s 0s 419450990e-09 1s 1s 419451110e-09 1s 1s 419457430e-09 0s 0s 419461230e-09 1s 1s 419461390e-09 1s 1s 419467670e-09 0s 0s 419471470e-09 1s 1s 419471670e-09 1s 1s 419477910e-09 0s 0s 419481710e-09 1s 1s 419481950e-09 1s 1s 419488150e-09 0s 0s 419491950e-09 1s 1s 419492230e-09 1s 1s 419498390e-09 0s 0s 419502190e-09 1s 1s 419502510e-09 1s 1s 419508630e-09 0s 0s 419512430e-09 1s 1s 419512790e-09 1s 1s 419518870e-09 0s 0s 419522670e-09 1s 1s 419523070e-09 1s 1s 419529110e-09 0s 0s 419532910e-09 1s 1s 419533350e-09 1s 1s 419539350e-09 0s 0s 419543150e-09 1s 1s 419543630e-09 1s 1s 419549590e-09 0s 0s 419553390e-09 1s 1s 419553910e-09 1s 1s 419559830e-09 0s 0s 419563630e-09 1s 1s 419564190e-09 1s 1s 419570070e-09 0s 0s 419573870e-09 1s 1s 419574470e-09 1s 1s 419580310e-09 0s 0s 419584110e-09 1s 1s 419584750e-09 1s 1s 419590550e-09 0s 0s 419594350e-09 1s 1s 419595030e-09 1s 1s 419600790e-09 0s 0s 419604590e-09 1s 1s 419605310e-09 1s 1s 419611030e-09 0s 0s 419614830e-09 1s 1s 419615590e-09 1s 1s 419621270e-09 0s 0s 419625070e-09 1s 1s 419625870e-09 1s 1s 419631510e-09 0s 0s 419635310e-09 1s 1s 419636150e-09 1s 1s 419641750e-09 0s 0s 419645550e-09 1s 1s 419646430e-09 1s 1s 419651990e-09 0s 0s 419655790e-09 1s 1s 419656710e-09 1s 1s 419662230e-09 0s 0s 419666030e-09 1s 1s 419666990e-09 1s 1s 419672470e-09 0s 0s 419676270e-09 1s 1s 419677270e-09 1s 1s 419682710e-09 0s 0s 419686510e-09 1s 1s 419687550e-09 1s 1s 419692950e-09 0s 0s 419696750e-09 1s 1s 419697830e-09 1s 1s 419703190e-09 0s 0s 419706990e-09 1s 1s 419708110e-09 1s 1s 419713430e-09 0s 0s 419717230e-09 1s 1s 419718390e-09 1s 1s 419723670e-09 0s 0s 419727470e-09 1s 1s 419728670e-09 1s 1s 419733910e-09 0s 0s 419737710e-09 1s 1s 419738950e-09 1s 1s 419744150e-09 0s 0s 419747950e-09 1s 1s 419749230e-09 1s 1s 419754390e-09 0s 0s 419758190e-09 1s 1s 419759510e-09 1s 1s 419764630e-09 0s 0s 419768430e-09 1s 1s 419769790e-09 1s 1s 419774870e-09 0s 0s 419778670e-09 1s 1s 419780070e-09 1s 1s 419785110e-09 0s 0s 419788910e-09 1s 1s 419790350e-09 1s 1s 419795350e-09 0s 0s 419799150e-09 1s 1s 419800630e-09 1s 1s 419805590e-09 0s 0s 419809390e-09 1s 1s 419810910e-09 1s 1s 419815830e-09 0s 0s 419819630e-09 1s 1s 419821190e-09 1s 1s 419826070e-09 0s 0s 419829870e-09 1s 1s 419831470e-09 1s 1s 419836310e-09 0s 0s 419840110e-09 1s 1s 419841750e-09 1s 1s 419846550e-09 0s 0s 419850350e-09 1s 1s 419852030e-09 1s 1s 419856790e-09 0s 0s 419860590e-09 1s 1s 419862310e-09 1s 1s 419867030e-09 0s 0s 419870830e-09 1s 1s 419872590e-09 1s 1s 419877270e-09 0s 0s 419881070e-09 1s 1s 419882870e-09 1s 1s 419887510e-09 0s 0s 419891310e-09 1s 1s 419893150e-09 1s 1s 419897750e-09 0s 0s 419901550e-09 1s 1s 419903430e-09 1s 1s 419907990e-09 0s 0s 419911790e-09 1s 1s 419913710e-09 1s 1s 419918230e-09 0s 0s 419922030e-09 1s 1s 419923990e-09 1s 1s 419928470e-09 0s 0s 419932270e-09 1s 1s 419934270e-09 1s 1s 419938710e-09 0s 0s 419942510e-09 1s 1s 419944550e-09 1s 1s 419948950e-09 0s 0s 419952750e-09 1s 1s 419954830e-09 1s 1s 419959190e-09 0s 0s 419962990e-09 1s 1s 419965110e-09 1s 1s 419969430e-09 0s 0s 419973230e-09 1s 1s 419975390e-09 1s 1s 419979670e-09 0s 0s 419983470e-09 1s 1s 419985670e-09 1s 1s 419989910e-09 0s 0s 419993710e-09 1s 1s 419995950e-09 1s 1s 420000150e-09 0s 0s 420003950e-09 1s 1s 420006230e-09 1s 1s 420010390e-09 0s 0s 420014190e-09 1s 1s 420016510e-09 1s 1s 420020630e-09 0s 0s 420024430e-09 1s 1s 420026790e-09 1s 1s 420030870e-09 0s 0s 420034670e-09 1s 1s 420037070e-09 1s 1s 420041110e-09 0s 0s 420044910e-09 1s 1s 420047350e-09 1s 1s 420051350e-09 0s 0s 420055150e-09 1s 1s 420057630e-09 1s 1s 420061590e-09 0s 0s 420065390e-09 1s 1s 420067910e-09 1s 1s 420071830e-09 0s 0s 420075630e-09 1s 1s 420078190e-09 1s 1s 420082070e-09 0s 0s 420085870e-09 1s 1s 420088470e-09 1s 1s 420092310e-09 0s 0s 420096110e-09 1s 1s 420098750e-09 1s 1s 420102550e-09 0s 0s 420106350e-09 1s 1s 420109030e-09 1s 1s 420112790e-09 0s 0s 420116590e-09 1s 1s 420119310e-09 1s 1s 420123030e-09 0s 0s 420126830e-09 1s 1s 420129590e-09 1s 1s 420133270e-09 0s 0s 420137070e-09 1s 1s 420139870e-09 1s 1s 420143510e-09 0s 0s 420147310e-09 1s 1s 420150150e-09 1s 1s 420153750e-09 0s 0s 420157550e-09 1s 1s 420160430e-09 1s 1s 420163990e-09 0s 0s 420167790e-09 1s 1s 420170710e-09 1s 1s 420174230e-09 0s 0s 420178030e-09 1s 1s 420180990e-09 1s 1s 420184470e-09 0s 0s 420188270e-09 1s 1s 420191270e-09 1s 1s 420194710e-09 0s 0s 420198510e-09 1s 1s 420201550e-09 1s 1s 420204950e-09 0s 0s 420208750e-09 1s 1s 420211830e-09 1s 1s 420215190e-09 0s 0s 420218990e-09 1s 1s 420222110e-09 1s 1s 420225430e-09 0s 0s 420229230e-09 1s 1s 420232390e-09 1s 1s 420235670e-09 0s 0s 420239470e-09 1s 1s 420242670e-09 1s 1s 420245910e-09 0s 0s 420249710e-09 1s 1s 420252950e-09 1s 1s 420256150e-09 0s 0s 420259950e-09 1s 1s 420263230e-09 1s 1s 420266390e-09 0s 0s 420270190e-09 1s 1s 420273510e-09 1s 1s 420276630e-09 0s 0s 420280430e-09 1s 1s 420283790e-09 1s 1s 420286870e-09 0s 0s 420290670e-09 1s 1s 420294070e-09 1s 1s 420297110e-09 0s 0s 420300910e-09 1s 1s 420304350e-09 1s 1s 420307350e-09 0s 0s 420311150e-09 1s 1s 420314630e-09 1s 1s 420317590e-09 0s 0s 420321390e-09 1s 1s 420324910e-09 1s 1s 420327830e-09 0s 0s 420331630e-09 1s 1s 420335190e-09 1s 1s 420338070e-09 0s 0s 420341870e-09 1s 1s 420345470e-09 1s 1s 420348310e-09 0s 0s 420352110e-09 1s 1s 420355750e-09 1s 1s 420358550e-09 0s 0s 420362350e-09 1s 1s 420366030e-09 1s 1s 420368790e-09 0s 0s 420372590e-09 1s 1s 420376310e-09 1s 1s 420379030e-09 0s 0s 420382830e-09 1s 1s 420386590e-09 1s 1s 420389270e-09 0s 0s 420393070e-09 1s 1s 420396870e-09 1s 1s 420399510e-09 0s 0s 420403310e-09 1s 1s 420407150e-09 1s 1s 420409750e-09 0s 0s 420413550e-09 1s 1s 420417430e-09 1s 1s 420419990e-09 0s 0s 420423790e-09 1s 1s 420427710e-09 1s 1s 420430230e-09 0s 0s 420434030e-09 1s 1s 420437990e-09 1s 1s 420440470e-09 0s 0s 420444270e-09 1s 1s 420448270e-09 1s 1s 420450710e-09 0s 0s 420454510e-09 1s 1s 420458550e-09 1s 1s 420460950e-09 0s 0s 420464750e-09 1s 1s 420468830e-09 1s 1s 420471190e-09 0s 0s 420474990e-09 1s 1s 420479110e-09 1s 1s 420481430e-09 0s 0s 420485230e-09 1s 1s 420489390e-09 1s 1s 420491670e-09 0s 0s 420495470e-09 1s 1s 420499670e-09 1s 1s 420501910e-09 0s 0s 420505710e-09 1s 1s 420509950e-09 1s 1s 420512150e-09 0s 0s 420515950e-09 1s 1s 420520230e-09 1s 1s 420522390e-09 0s 0s 420526190e-09 1s 1s 420530510e-09 1s 1s 420532630e-09 0s 0s 420536430e-09 1s 1s 420540790e-09 1s 1s 420542870e-09 0s 0s 420546670e-09 1s 1s 420551070e-09 1s 1s 420553110e-09 0s 0s 420556910e-09 1s 1s 420561350e-09 1s 1s 420563350e-09 0s 0s 420567150e-09 1s 1s 420571630e-09 1s 1s 420573590e-09 0s 0s 420577390e-09 1s 1s 420581910e-09 1s 1s 420583830e-09 0s 0s 420587630e-09 1s 1s 420592190e-09 1s 1s 420594070e-09 0s 0s 420597870e-09 1s 1s 420602470e-09 1s 1s 420604310e-09 0s 0s 420608110e-09 1s 1s 420612750e-09 1s 1s 420614550e-09 0s 0s 420618350e-09 1s 1s 420623030e-09 1s 1s 420624790e-09 0s 0s 420628590e-09 1s 1s 420633310e-09 1s 1s 420635030e-09 0s 0s 420638830e-09 1s 1s 420643590e-09 1s 1s 420645270e-09 0s 0s 420649070e-09 1s 1s 420653870e-09 1s 1s 420655510e-09 0s 0s 420659310e-09 1s 1s 420664150e-09 1s 1s 420665750e-09 0s 0s 420669550e-09 1s 1s 420674430e-09 1s 1s 420675990e-09 0s 0s 420679790e-09 1s 1s 420684710e-09 1s 1s 420686230e-09 0s 0s 420690030e-09 1s 1s 420694990e-09 1s 1s 420696470e-09 0s 0s 420700270e-09 1s 1s 420705270e-09 1s 1s 420706710e-09 0s 0s 420710510e-09 1s 1s 420715550e-09 1s 1s 420716950e-09 0s 0s 420720750e-09 1s 1s 420725830e-09 1s 1s 420727190e-09 0s 0s 420730990e-09 1s 1s 420736110e-09 1s 1s 420737430e-09 0s 0s 420741230e-09 1s 1s 420746390e-09 1s 1s 420747670e-09 0s 0s 420751470e-09 1s 1s 420756670e-09 1s 1s 420757910e-09 0s 0s 420761710e-09 1s 1s 420766950e-09 1s 1s 420768150e-09 0s 0s 420771950e-09 1s 1s 420777230e-09 1s 1s 420778390e-09 0s 0s 420782190e-09 1s 1s 420787510e-09 1s 1s 420788630e-09 0s 0s 420792430e-09 1s 1s 420797790e-09 1s 1s 420798870e-09 0s 0s 420802670e-09 1s 1s 420808070e-09 1s 1s 420809110e-09 0s 0s 420812910e-09 1s 1s 420818350e-09 1s 1s 420819350e-09 0s 0s 420823150e-09 1s 1s 420828630e-09 1s 1s 420829590e-09 0s 0s 420833390e-09 1s 1s 420838910e-09 1s 1s 420839830e-09 0s 0s 420843630e-09 1s 1s 420849190e-09 1s 1s 420850070e-09 0s 0s 420853870e-09 1s 1s 420859470e-09 1s 1s 420860310e-09 0s 0s 420864110e-09 1s 1s 420869750e-09 1s 1s 420870550e-09 0s 0s 420874350e-09 1s 1s 420880030e-09 1s 1s 420880790e-09 0s 0s 420884590e-09 1s 1s 420890310e-09 1s 1s 420891030e-09 0s 0s 420894830e-09 1s 1s 420900590e-09 1s 1s 420901270e-09 0s 0s 420905070e-09 1s 1s 420910870e-09 1s 1s 420911510e-09 0s 0s 420915310e-09 1s 1s 420921150e-09 1s 1s 420921750e-09 0s 0s 420925550e-09 1s 1s 420931430e-09 1s 1s 420931990e-09 0s 0s 420935790e-09 1s 1s 420941710e-09 1s 1s 420942230e-09 0s 0s 420946030e-09 1s 1s 420951990e-09 1s 1s 420952470e-09 0s 0s 420956270e-09 1s 1s 420962270e-09 1s 1s 420962710e-09 0s 0s 420966510e-09 1s 1s 420972550e-09 1s 1s 420972950e-09 0s 0s 420976750e-09 1s 1s 420982830e-09 1s 1s 420983190e-09 0s 0s 420986990e-09 1s 1s 420993110e-09 1s 1s 420993430e-09 0s 0s 420997230e-09 1s 1s 421003390e-09 1s 1s 421003670e-09 0s 0s 421007470e-09 1s 1s 421013670e-09 1s 1s 421013910e-09 0s 0s 421017710e-09 1s 1s 421023950e-09 1s 1s 421024150e-09 0s 0s 421027950e-09 1s 1s 421034230e-09 1s 1s 421034390e-09 0s 0s 421038190e-09 1s 1s 421044510e-09 1s 1s 421044630e-09 0s 0s 421048430e-09 1s 1s 421054790e-09 1s 1s 421054870e-09 0s 0s 421058670e-09 1s 1s 421065070e-09 1s 1s 421065110e-09 0s 0s 421068910e-09 1s 1s 421075350e-09 0s 0s 421079150e-09 1s 1s 421085590e-09 0s 0s 421085630e-09 0s 0s 421089390e-09 1s 1s 421095830e-09 0s 0s 421095910e-09 0s 0s 421099630e-09 1s 1s 421106070e-09 0s 0s 421106190e-09 0s 0s 421109870e-09 1s 1s 421116310e-09 0s 0s 421116470e-09 0s 0s 421120110e-09 1s 1s 421126550e-09 0s 0s 421126750e-09 0s 0s 421130350e-09 1s 1s 421136790e-09 0s 0s 421137030e-09 0s 0s 421140590e-09 1s 1s 421147030e-09 0s 0s 421147310e-09 0s 0s 421150830e-09 1s 1s 421157270e-09 0s 0s 421157590e-09 0s 0s 421161070e-09 1s 1s 421167510e-09 0s 0s 421167870e-09 0s 0s 421171310e-09 1s 1s 421177750e-09 0s 0s 421178150e-09 0s 0s 421181550e-09 1s 1s 421187990e-09 0s 0s 421188430e-09 0s 0s 421191790e-09 1s 1s 421198230e-09 0s 0s 421198710e-09 0s 0s 421202030e-09 1s 1s 421208470e-09 0s 0s 421208990e-09 0s 0s 421212270e-09 1s 1s 421218710e-09 0s 0s 421219270e-09 0s 0s 421222510e-09 1s 1s 421228950e-09 0s 0s 421229550e-09 0s 0s 421232750e-09 1s 1s 421239190e-09 0s 0s 421239830e-09 0s 0s 421242990e-09 1s 1s 421249430e-09 0s 0s 421250110e-09 0s 0s 421253230e-09 1s 1s 421259670e-09 0s 0s 421260390e-09 0s 0s 421263470e-09 1s 1s 421269910e-09 0s 0s 421270670e-09 0s 0s 421273710e-09 1s 1s 421280150e-09 0s 0s 421280950e-09 0s 0s 421283950e-09 1s 1s 421290390e-09 0s 0s 421291230e-09 0s 0s 421294190e-09 1s 1s 421300630e-09 0s 0s 421301510e-09 0s 0s 421304430e-09 1s 1s 421310870e-09 0s 0s 421311790e-09 0s 0s 421314670e-09 1s 1s 421321110e-09 0s 0s 421322070e-09 0s 0s 421324910e-09 1s 1s 421331350e-09 0s 0s 421332350e-09 0s 0s 421335150e-09 1s 1s 421341590e-09 0s 0s 421342630e-09 0s 0s 421345390e-09 1s 1s 421351830e-09 0s 0s 421352910e-09 0s 0s 421355630e-09 1s 1s 421362070e-09 0s 0s 421363190e-09 0s 0s 421365870e-09 1s 1s 421372310e-09 0s 0s 421373470e-09 0s 0s 421376110e-09 1s 1s 421382550e-09 0s 0s 421383750e-09 0s 0s 421386350e-09 1s 1s 421392790e-09 0s 0s 421394030e-09 0s 0s 421396590e-09 1s 1s 421403030e-09 0s 0s 421404310e-09 0s 0s 421406830e-09 1s 1s 421413270e-09 0s 0s 421414590e-09 0s 0s 421417070e-09 1s 1s 421423510e-09 0s 0s 421424870e-09 0s 0s 421427310e-09 1s 1s 421433750e-09 0s 0s 421435150e-09 0s 0s 421437550e-09 1s 1s 421443990e-09 0s 0s 421445430e-09 0s 0s 421447790e-09 1s 1s 421454230e-09 0s 0s 421455710e-09 0s 0s 421458030e-09 1s 1s 421464470e-09 0s 0s 421465990e-09 0s 0s 421468270e-09 1s 1s 421474710e-09 0s 0s 421476270e-09 0s 0s 421478510e-09 1s 1s 421484950e-09 0s 0s 421486550e-09 0s 0s 421488750e-09 1s 1s 421495190e-09 0s 0s 421496830e-09 0s 0s 421498990e-09 1s 1s 421505430e-09 0s 0s 421507110e-09 0s 0s 421509230e-09 1s 1s 421515670e-09 0s 0s 421517390e-09 0s 0s 421519470e-09 1s 1s 421525910e-09 0s 0s 421527670e-09 0s 0s 421529710e-09 1s 1s 421536150e-09 0s 0s 421537950e-09 0s 0s 421539950e-09 1s 1s 421546390e-09 0s 0s 421548230e-09 0s 0s 421550190e-09 1s 1s 421556630e-09 0s 0s 421558510e-09 0s 0s 421560430e-09 1s 1s 421566870e-09 0s 0s 421568790e-09 0s 0s 421570670e-09 1s 1s 421577110e-09 0s 0s 421579070e-09 0s 0s 421580910e-09 1s 1s 421587350e-09 0s 0s 421589350e-09 0s 0s 421591150e-09 1s 1s 421597590e-09 0s 0s 421599630e-09 0s 0s 421601390e-09 1s 1s 421607830e-09 0s 0s 421609910e-09 0s 0s 421611630e-09 1s 1s 421618070e-09 0s 0s 421620190e-09 0s 0s 421621870e-09 1s 1s 421628310e-09 0s 0s 421630470e-09 0s 0s 421632110e-09 1s 1s 421638550e-09 0s 0s 421640750e-09 0s 0s 421642350e-09 1s 1s 421648790e-09 0s 0s 421651030e-09 0s 0s 421652590e-09 1s 1s 421659030e-09 0s 0s 421661310e-09 0s 0s 421662830e-09 1s 1s 421669270e-09 0s 0s 421671590e-09 0s 0s 421673070e-09 1s 1s 421679510e-09 0s 0s 421681870e-09 0s 0s 421683310e-09 1s 1s 421689750e-09 0s 0s 421692150e-09 0s 0s 421693550e-09 1s 1s 421699990e-09 0s 0s 421702430e-09 0s 0s 421703790e-09 1s 1s 421710230e-09 0s 0s 421712710e-09 0s 0s 421714030e-09 1s 1s 421720470e-09 0s 0s 421722990e-09 0s 0s 421724270e-09 1s 1s 421730710e-09 0s 0s 421733270e-09 0s 0s 421734510e-09 1s 1s 421740950e-09 0s 0s 421743550e-09 0s 0s 421744750e-09 1s 1s 421751190e-09 0s 0s 421753830e-09 0s 0s 421754990e-09 1s 1s 421761430e-09 0s 0s 421764110e-09 0s 0s 421765230e-09 1s 1s 421771670e-09 0s 0s 421774390e-09 0s 0s 421775470e-09 1s 1s 421781910e-09 0s 0s 421784670e-09 0s 0s 421785710e-09 1s 1s 421792150e-09 0s 0s 421794950e-09 0s 0s 421795950e-09 1s 1s 421802390e-09 0s 0s 421805230e-09 0s 0s 421806190e-09 1s 1s 421812630e-09 0s 0s 421815510e-09 0s 0s 421816430e-09 1s 1s 421822870e-09 0s 0s 421825790e-09 0s 0s 421826670e-09 1s 1s 421833110e-09 0s 0s 421836070e-09 0s 0s 421836910e-09 1s 1s 421843350e-09 0s 0s 421846350e-09 0s 0s 421847150e-09 1s 1s 421853590e-09 0s 0s 421856630e-09 0s 0s 421857390e-09 1s 1s 421863830e-09 0s 0s 421866910e-09 0s 0s 421867630e-09 1s 1s 421874070e-09 0s 0s 421877190e-09 0s 0s 421877870e-09 1s 1s 421884310e-09 0s 0s 421887470e-09 0s 0s 421888110e-09 1s 1s 421894550e-09 0s 0s 421897750e-09 0s 0s 421898350e-09 1s 1s 421904790e-09 0s 0s 421908030e-09 0s 0s 421908590e-09 1s 1s 421915030e-09 0s 0s 421918310e-09 0s 0s 421918830e-09 1s 1s 421925270e-09 0s 0s 421928590e-09 0s 0s 421929070e-09 1s 1s 421935510e-09 0s 0s 421938870e-09 0s 0s 421939310e-09 1s 1s 421945750e-09 0s 0s 421949150e-09 0s 0s 421949550e-09 1s 1s 421955990e-09 0s 0s 421959430e-09 0s 0s 421959790e-09 1s 1s 421966230e-09 0s 0s 421969710e-09 0s 0s 421970030e-09 1s 1s 421976470e-09 0s 0s 421979990e-09 0s 0s 421980270e-09 1s 1s 421986710e-09 0s 0s 421990270e-09 0s 0s 421990510e-09 1s 1s 421996950e-09 0s 0s 422000550e-09 0s 0s 422000750e-09 1s 1s 422007190e-09 0s 0s 422010830e-09 0s 0s 422010990e-09 1s 1s 422017430e-09 0s 0s 422021110e-09 0s 0s 422021230e-09 1s 1s 422027670e-09 0s 0s 422031390e-09 0s 0s 422031470e-09 1s 1s 422037910e-09 0s 0s 422041670e-09 0s 0s 422041710e-09 1s 1s 422048150e-09 0s 0s 422051950e-09 1s 1s 422051990e-09 1s 1s 422058430e-09 0s 0s 422062190e-09 1s 1s 422062270e-09 1s 1s 422068670e-09 0s 0s 422072430e-09 1s 1s 422072550e-09 1s 1s 422078910e-09 0s 0s 422082670e-09 1s 1s 422082830e-09 1s 1s 422089150e-09 0s 0s 422092910e-09 1s 1s 422093110e-09 1s 1s 422099390e-09 0s 0s 422103150e-09 1s 1s 422103390e-09 1s 1s 422109630e-09 0s 0s 422113390e-09 1s 1s 422113670e-09 1s 1s 422119870e-09 0s 0s 422123630e-09 1s 1s 422123950e-09 1s 1s 422130110e-09 0s 0s 422133870e-09 1s 1s 422134230e-09 1s 1s 422140350e-09 0s 0s 422144110e-09 1s 1s 422144510e-09 1s 1s 422150590e-09 0s 0s 422154350e-09 1s 1s 422154790e-09 1s 1s 422160830e-09 0s 0s 422164590e-09 1s 1s 422165070e-09 1s 1s 422171070e-09 0s 0s 422174830e-09 1s 1s 422175350e-09 1s 1s 422181310e-09 0s 0s 422185070e-09 1s 1s 422185630e-09 1s 1s 422191550e-09 0s 0s 422195310e-09 1s 1s 422195910e-09 1s 1s 422201790e-09 0s 0s 422205550e-09 1s 1s 422206190e-09 1s 1s 422212030e-09 0s 0s 422215790e-09 1s 1s 422216470e-09 1s 1s 422222270e-09 0s 0s 422226030e-09 1s 1s 422226750e-09 1s 1s 422232510e-09 0s 0s 422236270e-09 1s 1s 422237030e-09 1s 1s 422242750e-09 0s 0s 422246510e-09 1s 1s 422247310e-09 1s 1s 422252990e-09 0s 0s 422256750e-09 1s 1s 422257590e-09 1s 1s 422263230e-09 0s 0s 422266990e-09 1s 1s 422267870e-09 1s 1s 422273470e-09 0s 0s 422277230e-09 1s 1s 422278150e-09 1s 1s 422283710e-09 0s 0s 422287470e-09 1s 1s 422288430e-09 1s 1s 422293950e-09 0s 0s 422297710e-09 1s 1s 422298710e-09 1s 1s 422304190e-09 0s 0s 422307950e-09 1s 1s 422308990e-09 1s 1s 422314430e-09 0s 0s 422318190e-09 1s 1s 422319270e-09 1s 1s 422324670e-09 0s 0s 422328430e-09 1s 1s 422329550e-09 1s 1s 422334910e-09 0s 0s 422338670e-09 1s 1s 422339830e-09 1s 1s 422345150e-09 0s 0s 422348910e-09 1s 1s 422350110e-09 1s 1s 422355390e-09 0s 0s 422359150e-09 1s 1s 422360390e-09 1s 1s 422365630e-09 0s 0s 422369390e-09 1s 1s 422370670e-09 1s 1s 422375870e-09 0s 0s 422379630e-09 1s 1s 422380950e-09 1s 1s 422386110e-09 0s 0s 422389870e-09 1s 1s 422391230e-09 1s 1s 422396350e-09 0s 0s 422400110e-09 1s 1s 422401510e-09 1s 1s 422406590e-09 0s 0s 422410350e-09 1s 1s 422411790e-09 1s 1s 422416830e-09 0s 0s 422420590e-09 1s 1s 422422070e-09 1s 1s 422427070e-09 0s 0s 422430830e-09 1s 1s 422432350e-09 1s 1s 422437310e-09 0s 0s 422441070e-09 1s 1s 422442630e-09 1s 1s 422447550e-09 0s 0s 422451310e-09 1s 1s 422452910e-09 1s 1s 422457790e-09 0s 0s 422461550e-09 1s 1s 422463190e-09 1s 1s 422468030e-09 0s 0s 422471790e-09 1s 1s 422473470e-09 1s 1s 422478270e-09 0s 0s 422482030e-09 1s 1s 422483750e-09 1s 1s 422488510e-09 0s 0s 422492270e-09 1s 1s 422494030e-09 1s 1s 422498750e-09 0s 0s 422502510e-09 1s 1s 422504310e-09 1s 1s 422508990e-09 0s 0s 422512750e-09 1s 1s 422514590e-09 1s 1s 422519230e-09 0s 0s 422522990e-09 1s 1s 422524870e-09 1s 1s 422529470e-09 0s 0s 422533230e-09 1s 1s 422535150e-09 1s 1s 422539710e-09 0s 0s 422543470e-09 1s 1s 422545430e-09 1s 1s 422549950e-09 0s 0s 422553710e-09 1s 1s 422555710e-09 1s 1s 422560190e-09 0s 0s 422563950e-09 1s 1s 422565990e-09 1s 1s 422570430e-09 0s 0s 422574190e-09 1s 1s 422576270e-09 1s 1s 422580670e-09 0s 0s 422584430e-09 1s 1s 422586550e-09 1s 1s 422590910e-09 0s 0s 422594670e-09 1s 1s 422596830e-09 1s 1s 422601150e-09 0s 0s 422604910e-09 1s 1s 422607110e-09 1s 1s 422611390e-09 0s 0s 422615150e-09 1s 1s 422617390e-09 1s 1s 422621630e-09 0s 0s 422625390e-09 1s 1s 422627670e-09 1s 1s 422631870e-09 0s 0s 422635630e-09 1s 1s 422637950e-09 1s 1s 422642110e-09 0s 0s 422645870e-09 1s 1s 422648230e-09 1s 1s 422652350e-09 0s 0s 422656110e-09 1s 1s 422658510e-09 1s 1s 422662590e-09 0s 0s 422666350e-09 1s 1s 422668790e-09 1s 1s 422672830e-09 0s 0s 422676590e-09 1s 1s 422679070e-09 1s 1s 422683070e-09 0s 0s 422686830e-09 1s 1s 422689350e-09 1s 1s 422693310e-09 0s 0s 422697070e-09 1s 1s 422699630e-09 1s 1s 422703550e-09 0s 0s 422707310e-09 1s 1s 422709910e-09 1s 1s 422713790e-09 0s 0s 422717550e-09 1s 1s 422720190e-09 1s 1s 422724030e-09 0s 0s 422727790e-09 1s 1s 422730470e-09 1s 1s 422734270e-09 0s 0s 422738030e-09 1s 1s 422740750e-09 1s 1s 422744510e-09 0s 0s 422748270e-09 1s 1s 422751030e-09 1s 1s 422754750e-09 0s 0s 422758510e-09 1s 1s 422761310e-09 1s 1s 422764990e-09 0s 0s 422768750e-09 1s 1s 422771590e-09 1s 1s 422775230e-09 0s 0s 422778990e-09 1s 1s 422781870e-09 1s 1s 422785470e-09 0s 0s 422789230e-09 1s 1s 422792150e-09 1s 1s 422795710e-09 0s 0s 422799470e-09 1s 1s 422802430e-09 1s 1s 422805950e-09 0s 0s 422809710e-09 1s 1s 422812710e-09 1s 1s 422816190e-09 0s 0s 422819950e-09 1s 1s 422822990e-09 1s 1s 422826430e-09 0s 0s 422830190e-09 1s 1s 422833270e-09 1s 1s 422836670e-09 0s 0s 422840430e-09 1s 1s 422843550e-09 1s 1s 422846910e-09 0s 0s 422850670e-09 1s 1s 422853830e-09 1s 1s 422857150e-09 0s 0s 422860910e-09 1s 1s 422864110e-09 1s 1s 422867390e-09 0s 0s 422871150e-09 1s 1s 422874390e-09 1s 1s 422877630e-09 0s 0s 422881390e-09 1s 1s 422884670e-09 1s 1s 422887870e-09 0s 0s 422891630e-09 1s 1s 422894950e-09 1s 1s 422898110e-09 0s 0s 422901870e-09 1s 1s 422905230e-09 1s 1s 422908350e-09 0s 0s 422912110e-09 1s 1s 422915510e-09 1s 1s 422918590e-09 0s 0s 422922350e-09 1s 1s 422925790e-09 1s 1s 422928830e-09 0s 0s 422932590e-09 1s 1s 422936070e-09 1s 1s 422939070e-09 0s 0s 422942830e-09 1s 1s 422946350e-09 1s 1s 422949310e-09 0s 0s 422953070e-09 1s 1s 422956630e-09 1s 1s 422959550e-09 0s 0s 422963310e-09 1s 1s 422966910e-09 1s 1s 422969790e-09 0s 0s 422973550e-09 1s 1s 422977190e-09 1s 1s 422980030e-09 0s 0s 422983790e-09 1s 1s 422987470e-09 1s 1s 422990270e-09 0s 0s 422994030e-09 1s 1s 422997750e-09 1s 1s 423000510e-09 0s 0s 423004270e-09 1s 1s 423008030e-09 1s 1s 423010750e-09 0s 0s 423014510e-09 1s 1s 423018310e-09 1s 1s 423020990e-09 0s 0s 423024750e-09 1s 1s 423028590e-09 1s 1s 423031230e-09 0s 0s 423034990e-09 1s 1s 423038870e-09 1s 1s 423041470e-09 0s 0s 423045230e-09 1s 1s 423049150e-09 1s 1s 423051710e-09 0s 0s 423055470e-09 1s 1s 423059430e-09 1s 1s 423061950e-09 0s 0s 423065710e-09 1s 1s 423069710e-09 1s 1s 423072190e-09 0s 0s 423075950e-09 1s 1s 423079990e-09 1s 1s 423082430e-09 0s 0s 423086190e-09 1s 1s 423090270e-09 1s 1s 423092670e-09 0s 0s 423096430e-09 1s 1s 423100550e-09 1s 1s 423102910e-09 0s 0s 423106670e-09 1s 1s 423110830e-09 1s 1s 423113150e-09 0s 0s 423116910e-09 1s 1s 423121110e-09 1s 1s 423123390e-09 0s 0s 423127150e-09 1s 1s 423131390e-09 1s 1s 423133630e-09 0s 0s 423137390e-09 1s 1s 423141670e-09 1s 1s 423143870e-09 0s 0s 423147630e-09 1s 1s 423151950e-09 1s 1s 423154110e-09 0s 0s 423157870e-09 1s 1s 423162230e-09 1s 1s 423164350e-09 0s 0s 423168110e-09 1s 1s 423172510e-09 1s 1s 423174590e-09 0s 0s 423178350e-09 1s 1s 423182790e-09 1s 1s 423184830e-09 0s 0s 423188590e-09 1s 1s 423193070e-09 1s 1s 423195070e-09 0s 0s 423198830e-09 1s 1s 423203350e-09 1s 1s 423205310e-09 0s 0s 423209070e-09 1s 1s 423213630e-09 1s 1s 423215550e-09 0s 0s 423219310e-09 1s 1s 423223910e-09 1s 1s 423225790e-09 0s 0s 423229550e-09 1s 1s 423234190e-09 1s 1s 423236030e-09 0s 0s 423239790e-09 1s 1s 423244470e-09 1s 1s 423246270e-09 0s 0s 423250030e-09 1s 1s 423254750e-09 1s 1s 423256510e-09 0s 0s 423260270e-09 1s 1s 423265030e-09 1s 1s 423266750e-09 0s 0s 423270510e-09 1s 1s 423275310e-09 1s 1s 423276990e-09 0s 0s 423280750e-09 1s 1s 423285590e-09 1s 1s 423287230e-09 0s 0s 423290990e-09 1s 1s 423295870e-09 1s 1s 423297470e-09 0s 0s 423301230e-09 1s 1s 423306150e-09 1s 1s 423307710e-09 0s 0s 423311470e-09 1s 1s 423316430e-09 1s 1s 423317950e-09 0s 0s 423321710e-09 1s 1s 423326710e-09 1s 1s 423328190e-09 0s 0s 423331950e-09 1s 1s 423336990e-09 1s 1s 423338430e-09 0s 0s 423342190e-09 1s 1s 423347270e-09 1s 1s 423348670e-09 0s 0s 423352430e-09 1s 1s 423357550e-09 1s 1s 423358910e-09 0s 0s 423362670e-09 1s 1s 423367830e-09 1s 1s 423369150e-09 0s 0s 423372910e-09 1s 1s 423378110e-09 1s 1s 423379390e-09 0s 0s 423383150e-09 1s 1s 423388390e-09 1s 1s 423389630e-09 0s 0s 423393390e-09 1s 1s 423398670e-09 1s 1s 423399870e-09 0s 0s 423403630e-09 1s 1s 423408950e-09 1s 1s 423410110e-09 0s 0s 423413870e-09 1s 1s 423419230e-09 1s 1s 423420350e-09 0s 0s 423424110e-09 1s 1s 423429510e-09 1s 1s 423430590e-09 0s 0s 423434350e-09 1s 1s 423439790e-09 1s 1s 423440830e-09 0s 0s 423444590e-09 1s 1s 423450070e-09 1s 1s 423451070e-09 0s 0s 423454830e-09 1s 1s 423460350e-09 1s 1s 423461310e-09 0s 0s 423465070e-09 1s 1s 423470630e-09 1s 1s 423471550e-09 0s 0s 423475310e-09 1s 1s 423480910e-09 1s 1s 423481790e-09 0s 0s 423485550e-09 1s 1s 423491190e-09 1s 1s 423492030e-09 0s 0s 423495790e-09 1s 1s 423501470e-09 1s 1s 423502270e-09 0s 0s 423506030e-09 1s 1s 423511750e-09 1s 1s 423512510e-09 0s 0s 423516270e-09 1s 1s 423522030e-09 1s 1s 423522750e-09 0s 0s 423526510e-09 1s 1s 423532310e-09 1s 1s 423532990e-09 0s 0s 423536750e-09 1s 1s 423542590e-09 1s 1s 423543230e-09 0s 0s 423546990e-09 1s 1s 423552870e-09 1s 1s 423553470e-09 0s 0s 423557230e-09 1s 1s 423563150e-09 1s 1s 423563710e-09 0s 0s 423567470e-09 1s 1s 423573430e-09 1s 1s 423573950e-09 0s 0s 423577710e-09 1s 1s 423583710e-09 1s 1s 423584190e-09 0s 0s 423587950e-09 1s 1s 423593990e-09 1s 1s 423594430e-09 0s 0s 423598190e-09 1s 1s 423604270e-09 1s 1s 423604670e-09 0s 0s 423608430e-09 1s 1s 423614550e-09 1s 1s 423614910e-09 0s 0s 423618670e-09 1s 1s 423624830e-09 1s 1s 423625150e-09 0s 0s 423628910e-09 1s 1s 423635110e-09 1s 1s 423635390e-09 0s 0s 423639150e-09 1s 1s 423645390e-09 1s 1s 423645630e-09 0s 0s 423649390e-09 1s 1s 423655670e-09 1s 1s 423655870e-09 0s 0s 423659630e-09 1s 1s 423665950e-09 1s 1s 423666110e-09 0s 0s 423669870e-09 1s 1s 423676230e-09 1s 1s 423676350e-09 0s 0s 423680110e-09 1s 1s 423686510e-09 1s 1s 423686590e-09 0s 0s 423690350e-09 1s 1s 423696790e-09 1s 1s 423696830e-09 0s 0s 423700590e-09 1s 1s 423707070e-09 0s 0s 423710830e-09 1s 1s 423717310e-09 0s 0s 423717350e-09 0s 0s 423721070e-09 1s 1s 423727550e-09 0s 0s 423727630e-09 0s 0s 423731310e-09 1s 1s 423737790e-09 0s 0s 423737910e-09 0s 0s 423741550e-09 1s 1s 423748030e-09 0s 0s 423748190e-09 0s 0s 423751790e-09 1s 1s 423758270e-09 0s 0s 423758470e-09 0s 0s 423762030e-09 1s 1s 423768510e-09 0s 0s 423768750e-09 0s 0s 423772270e-09 1s 1s 423778750e-09 0s 0s 423779030e-09 0s 0s 423782510e-09 1s 1s 423788990e-09 0s 0s 423789310e-09 0s 0s 423792750e-09 1s 1s 423799230e-09 0s 0s 423799590e-09 0s 0s 423802990e-09 1s 1s 423809470e-09 0s 0s 423809870e-09 0s 0s 423813230e-09 1s 1s 423819710e-09 0s 0s 423820150e-09 0s 0s 423823470e-09 1s 1s 423829950e-09 0s 0s 423830430e-09 0s 0s 423833710e-09 1s 1s 423840190e-09 0s 0s 423840710e-09 0s 0s 423843950e-09 1s 1s 423850430e-09 0s 0s 423850990e-09 0s 0s 423854190e-09 1s 1s 423860670e-09 0s 0s 423861270e-09 0s 0s 423864430e-09 1s 1s 423870910e-09 0s 0s 423871550e-09 0s 0s 423874670e-09 1s 1s 423881150e-09 0s 0s 423881830e-09 0s 0s 423884910e-09 1s 1s 423891390e-09 0s 0s 423892110e-09 0s 0s 423895150e-09 1s 1s 423901630e-09 0s 0s 423902390e-09 0s 0s 423905390e-09 1s 1s 423911870e-09 0s 0s 423912670e-09 0s 0s 423915630e-09 1s 1s 423922110e-09 0s 0s 423922950e-09 0s 0s 423925870e-09 1s 1s 423932350e-09 0s 0s 423933230e-09 0s 0s 423936110e-09 1s 1s 423942590e-09 0s 0s 423943510e-09 0s 0s 423946350e-09 1s 1s 423952830e-09 0s 0s 423953790e-09 0s 0s 423956590e-09 1s 1s 423963070e-09 0s 0s 423964070e-09 0s 0s 423966830e-09 1s 1s 423973310e-09 0s 0s 423974350e-09 0s 0s 423977070e-09 1s 1s 423983550e-09 0s 0s 423984630e-09 0s 0s 423987310e-09 1s 1s 423993790e-09 0s 0s 423994910e-09 0s 0s 423997550e-09 1s 1s 424004030e-09 0s 0s 424005190e-09 0s 0s 424007790e-09 1s 1s 424014270e-09 0s 0s 424015470e-09 0s 0s 424018030e-09 1s 1s 424024510e-09 0s 0s 424025750e-09 0s 0s 424028270e-09 1s 1s 424034750e-09 0s 0s 424036030e-09 0s 0s 424038510e-09 1s 1s 424044990e-09 0s 0s 424046310e-09 0s 0s 424048750e-09 1s 1s 424055230e-09 0s 0s 424056590e-09 0s 0s 424058990e-09 1s 1s 424065470e-09 0s 0s 424066870e-09 0s 0s 424069230e-09 1s 1s 424075710e-09 0s 0s 424077150e-09 0s 0s 424079470e-09 1s 1s 424085950e-09 0s 0s 424087430e-09 0s 0s 424089710e-09 1s 1s 424096190e-09 0s 0s 424097710e-09 0s 0s 424099950e-09 1s 1s 424106430e-09 0s 0s 424107990e-09 0s 0s 424110190e-09 1s 1s 424116670e-09 0s 0s 424118270e-09 0s 0s 424120430e-09 1s 1s 424126910e-09 0s 0s 424128550e-09 0s 0s 424130670e-09 1s 1s 424137150e-09 0s 0s 424138830e-09 0s 0s 424140910e-09 1s 1s 424147390e-09 0s 0s 424149110e-09 0s 0s 424151150e-09 1s 1s 424157630e-09 0s 0s 424159390e-09 0s 0s 424161390e-09 1s 1s 424167870e-09 0s 0s 424169670e-09 0s 0s 424171630e-09 1s 1s 424178110e-09 0s 0s 424179950e-09 0s 0s 424181870e-09 1s 1s 424188350e-09 0s 0s 424190230e-09 0s 0s 424192110e-09 1s 1s 424198590e-09 0s 0s 424200510e-09 0s 0s 424202350e-09 1s 1s 424208830e-09 0s 0s 424210790e-09 0s 0s 424212590e-09 1s 1s 424219070e-09 0s 0s 424221070e-09 0s 0s 424222830e-09 1s 1s 424229310e-09 0s 0s 424231350e-09 0s 0s 424233070e-09 1s 1s 424239550e-09 0s 0s 424241630e-09 0s 0s 424243310e-09 1s 1s 424249790e-09 0s 0s 424251910e-09 0s 0s 424253550e-09 1s 1s 424260030e-09 0s 0s 424262190e-09 0s 0s 424263790e-09 1s 1s 424270270e-09 0s 0s 424272470e-09 0s 0s 424274030e-09 1s 1s 424280510e-09 0s 0s 424282750e-09 0s 0s 424284270e-09 1s 1s 424290750e-09 0s 0s 424293030e-09 0s 0s 424294510e-09 1s 1s 424300990e-09 0s 0s 424303310e-09 0s 0s 424304750e-09 1s 1s 424311230e-09 0s 0s 424313590e-09 0s 0s 424314990e-09 1s 1s 424321470e-09 0s 0s 424323870e-09 0s 0s 424325230e-09 1s 1s 424331710e-09 0s 0s 424334150e-09 0s 0s 424335470e-09 1s 1s 424341950e-09 0s 0s 424344430e-09 0s 0s 424345710e-09 1s 1s 424352190e-09 0s 0s 424354710e-09 0s 0s 424355950e-09 1s 1s 424362430e-09 0s 0s 424364990e-09 0s 0s 424366190e-09 1s 1s 424372670e-09 0s 0s 424375270e-09 0s 0s 424376430e-09 1s 1s 424382910e-09 0s 0s 424385550e-09 0s 0s 424386670e-09 1s 1s 424393150e-09 0s 0s 424395830e-09 0s 0s 424396910e-09 1s 1s 424403390e-09 0s 0s 424406110e-09 0s 0s 424407150e-09 1s 1s 424413630e-09 0s 0s 424416390e-09 0s 0s 424417390e-09 1s 1s 424423870e-09 0s 0s 424426670e-09 0s 0s 424427630e-09 1s 1s 424434110e-09 0s 0s 424436950e-09 0s 0s 424437870e-09 1s 1s 424444350e-09 0s 0s 424447230e-09 0s 0s 424448110e-09 1s 1s 424454590e-09 0s 0s 424457510e-09 0s 0s 424458350e-09 1s 1s 424464830e-09 0s 0s 424467790e-09 0s 0s 424468590e-09 1s 1s 424475070e-09 0s 0s 424478070e-09 0s 0s 424478830e-09 1s 1s 424485310e-09 0s 0s 424488350e-09 0s 0s 424489070e-09 1s 1s 424495550e-09 0s 0s 424498630e-09 0s 0s 424499310e-09 1s 1s 424505790e-09 0s 0s 424508910e-09 0s 0s 424509550e-09 1s 1s 424516030e-09 0s 0s 424519190e-09 0s 0s 424519790e-09 1s 1s 424526270e-09 0s 0s 424529470e-09 0s 0s 424530030e-09 1s 1s 424536510e-09 0s 0s 424539750e-09 0s 0s 424540270e-09 1s 1s 424546750e-09 0s 0s 424550030e-09 0s 0s 424550510e-09 1s 1s 424556990e-09 0s 0s 424560310e-09 0s 0s 424560750e-09 1s 1s 424567230e-09 0s 0s 424570590e-09 0s 0s 424570990e-09 1s 1s 424577470e-09 0s 0s 424580870e-09 0s 0s 424581230e-09 1s 1s 424587710e-09 0s 0s 424591150e-09 0s 0s 424591470e-09 1s 1s 424597950e-09 0s 0s 424601430e-09 0s 0s 424601710e-09 1s 1s 424608190e-09 0s 0s 424611710e-09 0s 0s 424611950e-09 1s 1s 424618430e-09 0s 0s 424621990e-09 0s 0s 424622190e-09 1s 1s 424628670e-09 0s 0s 424632270e-09 0s 0s 424632430e-09 1s 1s 424638910e-09 0s 0s 424642550e-09 0s 0s 424642670e-09 1s 1s 424649150e-09 0s 0s 424652830e-09 0s 0s 424652910e-09 1s 1s 424659390e-09 0s 0s 424663110e-09 0s 0s 424663150e-09 1s 1s 424669630e-09 0s 0s 424673390e-09 1s 1s 424673430e-09 1s 1s 424679910e-09 0s 0s 424683630e-09 1s 1s 424683710e-09 1s 1s 424690150e-09 0s 0s 424693870e-09 1s 1s 424693990e-09 1s 1s 424700390e-09 0s 0s 424704110e-09 1s 1s 424704270e-09 1s 1s 424710630e-09 0s 0s 424714350e-09 1s 1s 424714550e-09 1s 1s 424720870e-09 0s 0s 424724590e-09 1s 1s 424724830e-09 1s 1s 424731110e-09 0s 0s 424734830e-09 1s 1s 424735110e-09 1s 1s 424741350e-09 0s 0s 424745070e-09 1s 1s 424745390e-09 1s 1s 424751590e-09 0s 0s 424755310e-09 1s 1s 424755670e-09 1s 1s 424761830e-09 0s 0s 424765550e-09 1s 1s 424765950e-09 1s 1s 424772070e-09 0s 0s 424775790e-09 1s 1s 424776230e-09 1s 1s 424782310e-09 0s 0s 424786030e-09 1s 1s 424786510e-09 1s 1s 424792550e-09 0s 0s 424796270e-09 1s 1s 424796790e-09 1s 1s 424802790e-09 0s 0s 424806510e-09 1s 1s 424807070e-09 1s 1s 424813030e-09 0s 0s 424816750e-09 1s 1s 424817350e-09 1s 1s 424823270e-09 0s 0s 424826990e-09 1s 1s 424827630e-09 1s 1s 424833510e-09 0s 0s 424837230e-09 1s 1s 424837910e-09 1s 1s 424843750e-09 0s 0s 424847470e-09 1s 1s 424848190e-09 1s 1s 424853990e-09 0s 0s 424857710e-09 1s 1s 424858470e-09 1s 1s 424864230e-09 0s 0s 424867950e-09 1s 1s 424868750e-09 1s 1s 424874470e-09 0s 0s 424878190e-09 1s 1s 424879030e-09 1s 1s 424884710e-09 0s 0s 424888430e-09 1s 1s 424889310e-09 1s 1s 424894950e-09 0s 0s 424898670e-09 1s 1s 424899590e-09 1s 1s 424905190e-09 0s 0s 424908910e-09 1s 1s 424909870e-09 1s 1s 424915430e-09 0s 0s 424919150e-09 1s 1s 424920150e-09 1s 1s 424925670e-09 0s 0s 424929390e-09 1s 1s 424930430e-09 1s 1s 424935910e-09 0s 0s 424939630e-09 1s 1s 424940710e-09 1s 1s 424946150e-09 0s 0s 424949870e-09 1s 1s 424950990e-09 1s 1s 424956390e-09 0s 0s 424960110e-09 1s 1s 424961270e-09 1s 1s 424966630e-09 0s 0s 424970350e-09 1s 1s 424971550e-09 1s 1s 424976870e-09 0s 0s 424980590e-09 1s 1s 424981830e-09 1s 1s 424987110e-09 0s 0s 424990830e-09 1s 1s 424992110e-09 1s 1s 424997350e-09 0s 0s 425001070e-09 1s 1s 425002390e-09 1s 1s 425007590e-09 0s 0s 425011310e-09 1s 1s 425012670e-09 1s 1s 425017830e-09 0s 0s 425021550e-09 1s 1s 425022950e-09 1s 1s 425028070e-09 0s 0s 425031790e-09 1s 1s 425033230e-09 1s 1s 425038310e-09 0s 0s 425042030e-09 1s 1s 425043510e-09 1s 1s 425048550e-09 0s 0s 425052270e-09 1s 1s 425053790e-09 1s 1s 425058790e-09 0s 0s 425062510e-09 1s 1s 425064070e-09 1s 1s 425069030e-09 0s 0s 425072750e-09 1s 1s 425074350e-09 1s 1s 425079270e-09 0s 0s 425082990e-09 1s 1s 425084630e-09 1s 1s 425089510e-09 0s 0s 425093230e-09 1s 1s 425094910e-09 1s 1s 425099750e-09 0s 0s 425103470e-09 1s 1s 425105190e-09 1s 1s 425109990e-09 0s 0s 425113710e-09 1s 1s 425115470e-09 1s 1s 425120230e-09 0s 0s 425123950e-09 1s 1s 425125750e-09 1s 1s 425130470e-09 0s 0s 425134190e-09 1s 1s 425136030e-09 1s 1s 425140710e-09 0s 0s 425144430e-09 1s 1s 425146310e-09 1s 1s 425150950e-09 0s 0s 425154670e-09 1s 1s 425156590e-09 1s 1s 425161190e-09 0s 0s 425164910e-09 1s 1s 425166870e-09 1s 1s 425171430e-09 0s 0s 425175150e-09 1s 1s 425177150e-09 1s 1s 425181670e-09 0s 0s 425185390e-09 1s 1s 425187430e-09 1s 1s 425191910e-09 0s 0s 425195630e-09 1s 1s 425197710e-09 1s 1s 425202150e-09 0s 0s 425205870e-09 1s 1s 425207990e-09 1s 1s 425212390e-09 0s 0s 425216110e-09 1s 1s 425218270e-09 1s 1s 425222630e-09 0s 0s 425226350e-09 1s 1s 425228550e-09 1s 1s 425232870e-09 0s 0s 425236590e-09 1s 1s 425238830e-09 1s 1s 425243110e-09 0s 0s 425246830e-09 1s 1s 425249110e-09 1s 1s 425253350e-09 0s 0s 425257070e-09 1s 1s 425259390e-09 1s 1s 425263590e-09 0s 0s 425267310e-09 1s 1s 425269670e-09 1s 1s 425273830e-09 0s 0s 425277550e-09 1s 1s 425279950e-09 1s 1s 425284070e-09 0s 0s 425287790e-09 1s 1s 425290230e-09 1s 1s 425294310e-09 0s 0s 425298030e-09 1s 1s 425300510e-09 1s 1s 425304550e-09 0s 0s 425308270e-09 1s 1s 425310790e-09 1s 1s 425314790e-09 0s 0s 425318510e-09 1s 1s 425321070e-09 1s 1s 425325030e-09 0s 0s 425328750e-09 1s 1s 425331350e-09 1s 1s 425335270e-09 0s 0s 425338990e-09 1s 1s 425341630e-09 1s 1s 425345510e-09 0s 0s 425349230e-09 1s 1s 425351910e-09 1s 1s 425355750e-09 0s 0s 425359470e-09 1s 1s 425362190e-09 1s 1s 425365990e-09 0s 0s 425369710e-09 1s 1s 425372470e-09 1s 1s 425376230e-09 0s 0s 425379950e-09 1s 1s 425382750e-09 1s 1s 425386470e-09 0s 0s 425390190e-09 1s 1s 425393030e-09 1s 1s 425396710e-09 0s 0s 425400430e-09 1s 1s 425403310e-09 1s 1s 425406950e-09 0s 0s 425410670e-09 1s 1s 425413590e-09 1s 1s 425417190e-09 0s 0s 425420910e-09 1s 1s 425423870e-09 1s 1s 425427430e-09 0s 0s 425431150e-09 1s 1s 425434150e-09 1s 1s 425437670e-09 0s 0s 425441390e-09 1s 1s 425444430e-09 1s 1s 425447910e-09 0s 0s 425451630e-09 1s 1s 425454710e-09 1s 1s 425458150e-09 0s 0s 425461870e-09 1s 1s 425464990e-09 1s 1s 425468390e-09 0s 0s 425472110e-09 1s 1s 425475270e-09 1s 1s 425478630e-09 0s 0s 425482350e-09 1s 1s 425485550e-09 1s 1s 425488870e-09 0s 0s 425492590e-09 1s 1s 425495830e-09 1s 1s 425499110e-09 0s 0s 425502830e-09 1s 1s 425506110e-09 1s 1s 425509350e-09 0s 0s 425513070e-09 1s 1s 425516390e-09 1s 1s 425519590e-09 0s 0s 425523310e-09 1s 1s 425526670e-09 1s 1s 425529830e-09 0s 0s 425533550e-09 1s 1s 425536950e-09 1s 1s 425540070e-09 0s 0s 425543790e-09 1s 1s 425547230e-09 1s 1s 425550310e-09 0s 0s 425554030e-09 1s 1s 425557510e-09 1s 1s 425560550e-09 0s 0s 425564270e-09 1s 1s 425567790e-09 1s 1s 425570790e-09 0s 0s 425574510e-09 1s 1s 425578070e-09 1s 1s 425581030e-09 0s 0s 425584750e-09 1s 1s 425588350e-09 1s 1s 425591270e-09 0s 0s 425594990e-09 1s 1s 425598630e-09 1s 1s 425601510e-09 0s 0s 425605230e-09 1s 1s 425608910e-09 1s 1s 425611750e-09 0s 0s 425615470e-09 1s 1s 425619190e-09 1s 1s 425621990e-09 0s 0s 425625710e-09 1s 1s 425629470e-09 1s 1s 425632230e-09 0s 0s 425635950e-09 1s 1s 425639750e-09 1s 1s 425642470e-09 0s 0s 425646190e-09 1s 1s 425650030e-09 1s 1s 425652710e-09 0s 0s 425656430e-09 1s 1s 425660310e-09 1s 1s 425662950e-09 0s 0s 425666670e-09 1s 1s 425670590e-09 1s 1s 425673190e-09 0s 0s 425676910e-09 1s 1s 425680870e-09 1s 1s 425683430e-09 0s 0s 425687150e-09 1s 1s 425691150e-09 1s 1s 425693670e-09 0s 0s 425697390e-09 1s 1s 425701430e-09 1s 1s 425703910e-09 0s 0s 425707630e-09 1s 1s 425711710e-09 1s 1s 425714150e-09 0s 0s 425717870e-09 1s 1s 425721990e-09 1s 1s 425724390e-09 0s 0s 425728110e-09 1s 1s 425732270e-09 1s 1s 425734630e-09 0s 0s 425738350e-09 1s 1s 425742550e-09 1s 1s 425744870e-09 0s 0s 425748590e-09 1s 1s 425752830e-09 1s 1s 425755110e-09 0s 0s 425758830e-09 1s 1s 425763110e-09 1s 1s 425765350e-09 0s 0s 425769070e-09 1s 1s 425773390e-09 1s 1s 425775590e-09 0s 0s 425779310e-09 1s 1s 425783670e-09 1s 1s 425785830e-09 0s 0s 425789550e-09 1s 1s 425793950e-09 1s 1s 425796070e-09 0s 0s 425799790e-09 1s 1s 425804230e-09 1s 1s 425806310e-09 0s 0s 425810030e-09 1s 1s 425814510e-09 1s 1s 425816550e-09 0s 0s 425820270e-09 1s 1s 425824790e-09 1s 1s 425826790e-09 0s 0s 425830510e-09 1s 1s 425835070e-09 1s 1s 425837030e-09 0s 0s 425840750e-09 1s 1s 425845350e-09 1s 1s 425847270e-09 0s 0s 425850990e-09 1s 1s 425855630e-09 1s 1s 425857510e-09 0s 0s 425861230e-09 1s 1s 425865910e-09 1s 1s 425867750e-09 0s 0s 425871470e-09 1s 1s 425876190e-09 1s 1s 425877990e-09 0s 0s 425881710e-09 1s 1s 425886470e-09 1s 1s 425888230e-09 0s 0s 425891950e-09 1s 1s 425896750e-09 1s 1s 425898470e-09 0s 0s 425902190e-09 1s 1s 425907030e-09 1s 1s 425908710e-09 0s 0s 425912430e-09 1s 1s 425917310e-09 1s 1s 425918950e-09 0s 0s 425922670e-09 1s 1s 425927590e-09 1s 1s 425929190e-09 0s 0s 425932910e-09 1s 1s 425937870e-09 1s 1s 425939430e-09 0s 0s 425943150e-09 1s 1s 425948150e-09 1s 1s 425949670e-09 0s 0s 425953390e-09 1s 1s 425958430e-09 1s 1s 425959910e-09 0s 0s 425963630e-09 1s 1s 425968710e-09 1s 1s 425970150e-09 0s 0s 425973870e-09 1s 1s 425978990e-09 1s 1s 425980390e-09 0s 0s 425984110e-09 1s 1s 425989270e-09 1s 1s 425990630e-09 0s 0s 425994350e-09 1s 1s 425999550e-09 1s 1s 426000870e-09 0s 0s 426004590e-09 1s 1s 426009830e-09 1s 1s 426011110e-09 0s 0s 426014830e-09 1s 1s 426020110e-09 1s 1s 426021350e-09 0s 0s 426025070e-09 1s 1s 426030390e-09 1s 1s 426031590e-09 0s 0s 426035310e-09 1s 1s 426040670e-09 1s 1s 426041830e-09 0s 0s 426045550e-09 1s 1s 426050950e-09 1s 1s 426052070e-09 0s 0s 426055790e-09 1s 1s 426061230e-09 1s 1s 426062310e-09 0s 0s 426066030e-09 1s 1s 426071510e-09 1s 1s 426072550e-09 0s 0s 426076270e-09 1s 1s 426081790e-09 1s 1s 426082790e-09 0s 0s 426086510e-09 1s 1s 426092070e-09 1s 1s 426093030e-09 0s 0s 426096750e-09 1s 1s 426102350e-09 1s 1s 426103270e-09 0s 0s 426106990e-09 1s 1s 426112630e-09 1s 1s 426113510e-09 0s 0s 426117230e-09 1s 1s 426122910e-09 1s 1s 426123750e-09 0s 0s 426127470e-09 1s 1s 426133190e-09 1s 1s 426133990e-09 0s 0s 426137710e-09 1s 1s 426143470e-09 1s 1s 426144230e-09 0s 0s 426147950e-09 1s 1s 426153750e-09 1s 1s 426154470e-09 0s 0s 426158190e-09 1s 1s 426164030e-09 1s 1s 426164710e-09 0s 0s 426168430e-09 1s 1s 426174310e-09 1s 1s 426174950e-09 0s 0s 426178670e-09 1s 1s 426184590e-09 1s 1s 426185190e-09 0s 0s 426188910e-09 1s 1s 426194870e-09 1s 1s 426195430e-09 0s 0s 426199150e-09 1s 1s 426205150e-09 1s 1s 426205670e-09 0s 0s 426209390e-09 1s 1s 426215430e-09 1s 1s 426215910e-09 0s 0s 426219630e-09 1s 1s 426225710e-09 1s 1s 426226150e-09 0s 0s 426229870e-09 1s 1s 426235990e-09 1s 1s 426236390e-09 0s 0s 426240110e-09 1s 1s 426246270e-09 1s 1s 426246630e-09 0s 0s 426250350e-09 1s 1s 426256550e-09 1s 1s 426256870e-09 0s 0s 426260590e-09 1s 1s 426266830e-09 1s 1s 426267110e-09 0s 0s 426270830e-09 1s 1s 426277110e-09 1s 1s 426277350e-09 0s 0s 426281070e-09 1s 1s 426287390e-09 1s 1s 426287590e-09 0s 0s 426291310e-09 1s 1s 426297670e-09 1s 1s 426297830e-09 0s 0s 426301550e-09 1s 1s 426307950e-09 1s 1s 426308070e-09 0s 0s 426311790e-09 1s 1s 426318230e-09 1s 1s 426318310e-09 0s 0s 426322030e-09 1s 1s 426328510e-09 1s 1s 426328550e-09 0s 0s 426332270e-09 1s 1s 426338790e-09 0s 0s 426342510e-09 1s 1s 426349030e-09 0s 0s 426349070e-09 0s 0s 426352750e-09 1s 1s 426359270e-09 0s 0s 426359350e-09 0s 0s 426362990e-09 1s 1s 426369510e-09 0s 0s 426369630e-09 0s 0s 426373230e-09 1s 1s 426379750e-09 0s 0s 426379910e-09 0s 0s 426383470e-09 1s 1s 426389990e-09 0s 0s 426390190e-09 0s 0s 426393710e-09 1s 1s 426400230e-09 0s 0s 426400470e-09 0s 0s 426403950e-09 1s 1s 426410470e-09 0s 0s 426410750e-09 0s 0s 426414190e-09 1s 1s 426420710e-09 0s 0s 426421030e-09 0s 0s 426424430e-09 1s 1s 426430950e-09 0s 0s 426431310e-09 0s 0s 426434670e-09 1s 1s 426441190e-09 0s 0s 426441590e-09 0s 0s 426444910e-09 1s 1s 426451430e-09 0s 0s 426451870e-09 0s 0s 426455150e-09 1s 1s 426461670e-09 0s 0s 426462150e-09 0s 0s 426465390e-09 1s 1s 426471910e-09 0s 0s 426472430e-09 0s 0s 426475630e-09 1s 1s 426482150e-09 0s 0s 426482710e-09 0s 0s 426485870e-09 1s 1s 426492390e-09 0s 0s 426492990e-09 0s 0s 426496110e-09 1s 1s 426502630e-09 0s 0s 426503270e-09 0s 0s 426506350e-09 1s 1s 426512870e-09 0s 0s 426513550e-09 0s 0s 426516590e-09 1s 1s 426523110e-09 0s 0s 426523830e-09 0s 0s 426526830e-09 1s 1s 426533350e-09 0s 0s 426534110e-09 0s 0s 426537070e-09 1s 1s 426543590e-09 0s 0s 426544390e-09 0s 0s 426547310e-09 1s 1s 426553830e-09 0s 0s 426554670e-09 0s 0s 426557550e-09 1s 1s 426564070e-09 0s 0s 426564950e-09 0s 0s 426567790e-09 1s 1s 426574310e-09 0s 0s 426575230e-09 0s 0s 426578030e-09 1s 1s 426584550e-09 0s 0s 426585510e-09 0s 0s 426588270e-09 1s 1s 426594790e-09 0s 0s 426595790e-09 0s 0s 426598510e-09 1s 1s 426605030e-09 0s 0s 426606070e-09 0s 0s 426608750e-09 1s 1s 426615270e-09 0s 0s 426616350e-09 0s 0s 426618990e-09 1s 1s 426625510e-09 0s 0s 426626630e-09 0s 0s 426629230e-09 1s 1s 426635750e-09 0s 0s 426636910e-09 0s 0s 426639470e-09 1s 1s 426645990e-09 0s 0s 426647190e-09 0s 0s 426649710e-09 1s 1s 426656230e-09 0s 0s 426657470e-09 0s 0s 426659950e-09 1s 1s 426666470e-09 0s 0s 426667750e-09 0s 0s 426670190e-09 1s 1s 426676710e-09 0s 0s 426678030e-09 0s 0s 426680430e-09 1s 1s 426686950e-09 0s 0s 426688310e-09 0s 0s 426690670e-09 1s 1s 426697190e-09 0s 0s 426698590e-09 0s 0s 426700910e-09 1s 1s 426707430e-09 0s 0s 426708870e-09 0s 0s 426711150e-09 1s 1s 426717670e-09 0s 0s 426719150e-09 0s 0s 426721390e-09 1s 1s 426727910e-09 0s 0s 426729430e-09 0s 0s 426731630e-09 1s 1s 426738150e-09 0s 0s 426739710e-09 0s 0s 426741870e-09 1s 1s 426748390e-09 0s 0s 426749990e-09 0s 0s 426752110e-09 1s 1s 426758630e-09 0s 0s 426760270e-09 0s 0s 426762350e-09 1s 1s 426768870e-09 0s 0s 426770550e-09 0s 0s 426772590e-09 1s 1s 426779110e-09 0s 0s 426780830e-09 0s 0s 426782830e-09 1s 1s 426789350e-09 0s 0s 426791110e-09 0s 0s 426793070e-09 1s 1s 426799590e-09 0s 0s 426801390e-09 0s 0s 426803310e-09 1s 1s 426809830e-09 0s 0s 426811670e-09 0s 0s 426813550e-09 1s 1s 426820070e-09 0s 0s 426821950e-09 0s 0s 426823790e-09 1s 1s 426830310e-09 0s 0s 426832230e-09 0s 0s 426834030e-09 1s 1s 426840550e-09 0s 0s 426842510e-09 0s 0s 426844270e-09 1s 1s 426850790e-09 0s 0s 426852790e-09 0s 0s 426854510e-09 1s 1s 426861030e-09 0s 0s 426863070e-09 0s 0s 426864750e-09 1s 1s 426871270e-09 0s 0s 426873350e-09 0s 0s 426874990e-09 1s 1s 426881510e-09 0s 0s 426883630e-09 0s 0s 426885230e-09 1s 1s 426891750e-09 0s 0s 426893910e-09 0s 0s 426895470e-09 1s 1s 426901990e-09 0s 0s 426904190e-09 0s 0s 426905710e-09 1s 1s 426912230e-09 0s 0s 426914470e-09 0s 0s 426915950e-09 1s 1s 426922470e-09 0s 0s 426924750e-09 0s 0s 426926190e-09 1s 1s 426932710e-09 0s 0s 426935030e-09 0s 0s 426936430e-09 1s 1s 426942950e-09 0s 0s 426945310e-09 0s 0s 426946670e-09 1s 1s 426953190e-09 0s 0s 426955590e-09 0s 0s 426956910e-09 1s 1s 426963430e-09 0s 0s 426965870e-09 0s 0s 426967150e-09 1s 1s 426973670e-09 0s 0s 426976150e-09 0s 0s 426977390e-09 1s 1s 426983910e-09 0s 0s 426986430e-09 0s 0s 426987630e-09 1s 1s 426994150e-09 0s 0s 426996710e-09 0s 0s 426997870e-09 1s 1s 427004390e-09 0s 0s 427006990e-09 0s 0s 427008110e-09 1s 1s 427014630e-09 0s 0s 427017270e-09 0s 0s 427018350e-09 1s 1s 427024870e-09 0s 0s 427027550e-09 0s 0s 427028590e-09 1s 1s 427035110e-09 0s 0s 427037830e-09 0s 0s 427038830e-09 1s 1s 427045350e-09 0s 0s 427048110e-09 0s 0s 427049070e-09 1s 1s 427055590e-09 0s 0s 427058390e-09 0s 0s 427059310e-09 1s 1s 427065830e-09 0s 0s 427068670e-09 0s 0s 427069550e-09 1s 1s 427076070e-09 0s 0s 427078950e-09 0s 0s 427079790e-09 1s 1s 427086310e-09 0s 0s 427089230e-09 0s 0s 427090030e-09 1s 1s 427096550e-09 0s 0s 427099510e-09 0s 0s 427100270e-09 1s 1s 427106790e-09 0s 0s 427109790e-09 0s 0s 427110510e-09 1s 1s 427117030e-09 0s 0s 427120070e-09 0s 0s 427120750e-09 1s 1s 427127270e-09 0s 0s 427130350e-09 0s 0s 427130990e-09 1s 1s 427137510e-09 0s 0s 427140630e-09 0s 0s 427141230e-09 1s 1s 427147750e-09 0s 0s 427150910e-09 0s 0s 427151470e-09 1s 1s 427157990e-09 0s 0s 427161190e-09 0s 0s 427161710e-09 1s 1s 427168230e-09 0s 0s 427171470e-09 0s 0s 427171950e-09 1s 1s 427178470e-09 0s 0s 427181750e-09 0s 0s 427182190e-09 1s 1s 427188710e-09 0s 0s 427192030e-09 0s 0s 427192430e-09 1s 1s 427198950e-09 0s 0s 427202310e-09 0s 0s 427202670e-09 1s 1s 427209190e-09 0s 0s 427212590e-09 0s 0s 427212910e-09 1s 1s 427219430e-09 0s 0s 427222870e-09 0s 0s 427223150e-09 1s 1s 427229670e-09 0s 0s 427233150e-09 0s 0s 427233390e-09 1s 1s 427239910e-09 0s 0s 427243430e-09 0s 0s 427243630e-09 1s 1s 427250150e-09 0s 0s 427253710e-09 0s 0s 427253870e-09 1s 1s 427260390e-09 0s 0s 427263990e-09 0s 0s 427264110e-09 1s 1s 427270630e-09 0s 0s 427274270e-09 0s 0s 427274350e-09 1s 1s 427280870e-09 0s 0s 427284550e-09 0s 0s 427284590e-09 1s 1s 427291110e-09 0s 0s 427294830e-09 1s 1s 427294870e-09 1s 1s 427301390e-09 0s 0s 427305070e-09 1s 1s 427305150e-09 1s 1s 427311630e-09 0s 0s 427315310e-09 1s 1s 427315430e-09 1s 1s 427321870e-09 0s 0s 427325550e-09 1s 1s 427325710e-09 1s 1s 427332110e-09 0s 0s 427335790e-09 1s 1s 427335990e-09 1s 1s 427342350e-09 0s 0s 427346030e-09 1s 1s 427346270e-09 1s 1s 427352590e-09 0s 0s 427356270e-09 1s 1s 427356550e-09 1s 1s 427362830e-09 0s 0s 427366510e-09 1s 1s 427366830e-09 1s 1s 427373070e-09 0s 0s 427376750e-09 1s 1s 427377110e-09 1s 1s 427383310e-09 0s 0s 427386990e-09 1s 1s 427387390e-09 1s 1s 427393550e-09 0s 0s 427397230e-09 1s 1s 427397670e-09 1s 1s 427403790e-09 0s 0s 427407470e-09 1s 1s 427407950e-09 1s 1s 427414030e-09 0s 0s 427417710e-09 1s 1s 427418230e-09 1s 1s 427424270e-09 0s 0s 427427950e-09 1s 1s 427428510e-09 1s 1s 427434510e-09 0s 0s 427438190e-09 1s 1s 427438790e-09 1s 1s 427444750e-09 0s 0s 427448430e-09 1s 1s 427449070e-09 1s 1s 427454990e-09 0s 0s 427458670e-09 1s 1s 427459350e-09 1s 1s 427465230e-09 0s 0s 427468910e-09 1s 1s 427469630e-09 1s 1s 427475470e-09 0s 0s 427479150e-09 1s 1s 427479910e-09 1s 1s 427485710e-09 0s 0s 427489390e-09 1s 1s 427490190e-09 1s 1s 427495950e-09 0s 0s 427499630e-09 1s 1s 427500470e-09 1s 1s 427506190e-09 0s 0s 427509870e-09 1s 1s 427510750e-09 1s 1s 427516430e-09 0s 0s 427520110e-09 1s 1s 427521030e-09 1s 1s 427526670e-09 0s 0s 427530350e-09 1s 1s 427531310e-09 1s 1s 427536910e-09 0s 0s 427540590e-09 1s 1s 427541590e-09 1s 1s 427547150e-09 0s 0s 427550830e-09 1s 1s 427551870e-09 1s 1s 427557390e-09 0s 0s 427561070e-09 1s 1s 427562150e-09 1s 1s 427567630e-09 0s 0s 427571310e-09 1s 1s 427572430e-09 1s 1s 427577870e-09 0s 0s 427581550e-09 1s 1s 427582710e-09 1s 1s 427588110e-09 0s 0s 427591790e-09 1s 1s 427592990e-09 1s 1s 427598350e-09 0s 0s 427602030e-09 1s 1s 427603270e-09 1s 1s 427608590e-09 0s 0s 427612270e-09 1s 1s 427613550e-09 1s 1s 427618830e-09 0s 0s 427622510e-09 1s 1s 427623830e-09 1s 1s 427629070e-09 0s 0s 427632750e-09 1s 1s 427634110e-09 1s 1s 427639310e-09 0s 0s 427642990e-09 1s 1s 427644390e-09 1s 1s 427649550e-09 0s 0s 427653230e-09 1s 1s 427654670e-09 1s 1s 427659790e-09 0s 0s 427663470e-09 1s 1s 427664950e-09 1s 1s 427670030e-09 0s 0s 427673710e-09 1s 1s 427675230e-09 1s 1s 427680270e-09 0s 0s 427683950e-09 1s 1s 427685510e-09 1s 1s 427690510e-09 0s 0s 427694190e-09 1s 1s 427695790e-09 1s 1s 427700750e-09 0s 0s 427704430e-09 1s 1s 427706070e-09 1s 1s 427710990e-09 0s 0s 427714670e-09 1s 1s 427716350e-09 1s 1s 427721230e-09 0s 0s 427724910e-09 1s 1s 427726630e-09 1s 1s 427731470e-09 0s 0s 427735150e-09 1s 1s 427736910e-09 1s 1s 427741710e-09 0s 0s 427745390e-09 1s 1s 427747190e-09 1s 1s 427751950e-09 0s 0s 427755630e-09 1s 1s 427757470e-09 1s 1s 427762190e-09 0s 0s 427765870e-09 1s 1s 427767750e-09 1s 1s 427772430e-09 0s 0s 427776110e-09 1s 1s 427778030e-09 1s 1s 427782670e-09 0s 0s 427786350e-09 1s 1s 427788310e-09 1s 1s 427792910e-09 0s 0s 427796590e-09 1s 1s 427798590e-09 1s 1s 427803150e-09 0s 0s 427806830e-09 1s 1s 427808870e-09 1s 1s 427813390e-09 0s 0s 427817070e-09 1s 1s 427819150e-09 1s 1s 427823630e-09 0s 0s 427827310e-09 1s 1s 427829430e-09 1s 1s 427833870e-09 0s 0s 427837550e-09 1s 1s 427839710e-09 1s 1s 427844110e-09 0s 0s 427847790e-09 1s 1s 427849990e-09 1s 1s 427854350e-09 0s 0s 427858030e-09 1s 1s 427860270e-09 1s 1s 427864590e-09 0s 0s 427868270e-09 1s 1s 427870550e-09 1s 1s 427874830e-09 0s 0s 427878510e-09 1s 1s 427880830e-09 1s 1s 427885070e-09 0s 0s 427888750e-09 1s 1s 427891110e-09 1s 1s 427895310e-09 0s 0s 427898990e-09 1s 1s 427901390e-09 1s 1s 427905550e-09 0s 0s 427909230e-09 1s 1s 427911670e-09 1s 1s 427915790e-09 0s 0s 427919470e-09 1s 1s 427921950e-09 1s 1s 427926030e-09 0s 0s 427929710e-09 1s 1s 427932230e-09 1s 1s 427936270e-09 0s 0s 427939950e-09 1s 1s 427942510e-09 1s 1s 427946510e-09 0s 0s 427950190e-09 1s 1s 427952790e-09 1s 1s 427956750e-09 0s 0s 427960430e-09 1s 1s 427963070e-09 1s 1s 427966990e-09 0s 0s 427970670e-09 1s 1s 427973350e-09 1s 1s 427977230e-09 0s 0s 427980910e-09 1s 1s 427983630e-09 1s 1s 427987470e-09 0s 0s 427991150e-09 1s 1s 427993910e-09 1s 1s 427997710e-09 0s 0s 428001390e-09 1s 1s 428004190e-09 1s 1s 428007950e-09 0s 0s 428011630e-09 1s 1s 428014470e-09 1s 1s 428018190e-09 0s 0s 428021870e-09 1s 1s 428024750e-09 1s 1s 428028430e-09 0s 0s 428032110e-09 1s 1s 428035030e-09 1s 1s 428038670e-09 0s 0s 428042350e-09 1s 1s 428045310e-09 1s 1s 428048910e-09 0s 0s 428052590e-09 1s 1s 428055590e-09 1s 1s 428059150e-09 0s 0s 428062830e-09 1s 1s 428065870e-09 1s 1s 428069390e-09 0s 0s 428073070e-09 1s 1s 428076150e-09 1s 1s 428079630e-09 0s 0s 428083310e-09 1s 1s 428086430e-09 1s 1s 428089870e-09 0s 0s 428093550e-09 1s 1s 428096710e-09 1s 1s 428100110e-09 0s 0s 428103790e-09 1s 1s 428106990e-09 1s 1s 428110350e-09 0s 0s 428114030e-09 1s 1s 428117270e-09 1s 1s 428120590e-09 0s 0s 428124270e-09 1s 1s 428127550e-09 1s 1s 428130830e-09 0s 0s 428134510e-09 1s 1s 428137830e-09 1s 1s 428141070e-09 0s 0s 428144750e-09 1s 1s 428148110e-09 1s 1s 428151310e-09 0s 0s 428154990e-09 1s 1s 428158390e-09 1s 1s 428161550e-09 0s 0s 428165230e-09 1s 1s 428168670e-09 1s 1s 428171790e-09 0s 0s 428175470e-09 1s 1s 428178950e-09 1s 1s 428182030e-09 0s 0s 428185710e-09 1s 1s 428189230e-09 1s 1s 428192270e-09 0s 0s 428195950e-09 1s 1s 428199510e-09 1s 1s 428202510e-09 0s 0s 428206190e-09 1s 1s 428209790e-09 1s 1s 428212750e-09 0s 0s 428216430e-09 1s 1s 428220070e-09 1s 1s 428222990e-09 0s 0s 428226670e-09 1s 1s 428230350e-09 1s 1s 428233230e-09 0s 0s 428236910e-09 1s 1s 428240630e-09 1s 1s 428243470e-09 0s 0s 428247150e-09 1s 1s 428250910e-09 1s 1s 428253710e-09 0s 0s 428257390e-09 1s 1s 428261190e-09 1s 1s 428263950e-09 0s 0s 428267630e-09 1s 1s 428271470e-09 1s 1s 428274190e-09 0s 0s 428277870e-09 1s 1s 428281750e-09 1s 1s 428284430e-09 0s 0s 428288110e-09 1s 1s 428292030e-09 1s 1s 428294670e-09 0s 0s 428298350e-09 1s 1s 428302310e-09 1s 1s 428304910e-09 0s 0s 428308590e-09 1s 1s 428312590e-09 1s 1s 428315150e-09 0s 0s 428318830e-09 1s 1s 428322870e-09 1s 1s 428325390e-09 0s 0s 428329070e-09 1s 1s 428333150e-09 1s 1s 428335630e-09 0s 0s 428339310e-09 1s 1s 428343430e-09 1s 1s 428345870e-09 0s 0s 428349550e-09 1s 1s 428353710e-09 1s 1s 428356110e-09 0s 0s 428359790e-09 1s 1s 428363990e-09 1s 1s 428366350e-09 0s 0s 428370030e-09 1s 1s 428374270e-09 1s 1s 428376590e-09 0s 0s 428380270e-09 1s 1s 428384550e-09 1s 1s 428386830e-09 0s 0s 428390510e-09 1s 1s 428394830e-09 1s 1s 428397070e-09 0s 0s 428400750e-09 1s 1s 428405110e-09 1s 1s 428407310e-09 0s 0s 428410990e-09 1s 1s 428415390e-09 1s 1s 428417550e-09 0s 0s 428421230e-09 1s 1s 428425670e-09 1s 1s 428427790e-09 0s 0s 428431470e-09 1s 1s 428435950e-09 1s 1s 428438030e-09 0s 0s 428441710e-09 1s 1s 428446230e-09 1s 1s 428448270e-09 0s 0s 428451950e-09 1s 1s 428456510e-09 1s 1s 428458510e-09 0s 0s 428462190e-09 1s 1s 428466790e-09 1s 1s 428468750e-09 0s 0s 428472430e-09 1s 1s 428477070e-09 1s 1s 428478990e-09 0s 0s 428482670e-09 1s 1s 428487350e-09 1s 1s 428489230e-09 0s 0s 428492910e-09 1s 1s 428497630e-09 1s 1s 428499470e-09 0s 0s 428503150e-09 1s 1s 428507910e-09 1s 1s 428509710e-09 0s 0s 428513390e-09 1s 1s 428518190e-09 1s 1s 428519950e-09 0s 0s 428523630e-09 1s 1s 428528470e-09 1s 1s 428530190e-09 0s 0s 428533870e-09 1s 1s 428538750e-09 1s 1s 428540430e-09 0s 0s 428544110e-09 1s 1s 428549030e-09 1s 1s 428550670e-09 0s 0s 428554350e-09 1s 1s 428559310e-09 1s 1s 428560910e-09 0s 0s 428564590e-09 1s 1s 428569590e-09 1s 1s 428571150e-09 0s 0s 428574830e-09 1s 1s 428579870e-09 1s 1s 428581390e-09 0s 0s 428585070e-09 1s 1s 428590150e-09 1s 1s 428591630e-09 0s 0s 428595310e-09 1s 1s 428600430e-09 1s 1s 428601870e-09 0s 0s 428605550e-09 1s 1s 428610710e-09 1s 1s 428612110e-09 0s 0s 428615790e-09 1s 1s 428620990e-09 1s 1s 428622350e-09 0s 0s 428626030e-09 1s 1s 428631270e-09 1s 1s 428632590e-09 0s 0s 428636270e-09 1s 1s 428641550e-09 1s 1s 428642830e-09 0s 0s 428646510e-09 1s 1s 428651830e-09 1s 1s 428653070e-09 0s 0s 428656750e-09 1s 1s 428662110e-09 1s 1s 428663310e-09 0s 0s 428666990e-09 1s 1s 428672390e-09 1s 1s 428673550e-09 0s 0s 428677230e-09 1s 1s 428682670e-09 1s 1s 428683790e-09 0s 0s 428687470e-09 1s 1s 428692950e-09 1s 1s 428694030e-09 0s 0s 428697710e-09 1s 1s 428703230e-09 1s 1s 428704270e-09 0s 0s 428707950e-09 1s 1s 428713510e-09 1s 1s 428714510e-09 0s 0s 428718190e-09 1s 1s 428723790e-09 1s 1s 428724750e-09 0s 0s 428728430e-09 1s 1s 428734070e-09 1s 1s 428734990e-09 0s 0s 428738670e-09 1s 1s 428744350e-09 1s 1s 428745230e-09 0s 0s 428748910e-09 1s 1s 428754630e-09 1s 1s 428755470e-09 0s 0s 428759150e-09 1s 1s 428764910e-09 1s 1s 428765710e-09 0s 0s 428769390e-09 1s 1s 428775190e-09 1s 1s 428775950e-09 0s 0s 428779630e-09 1s 1s 428785470e-09 1s 1s 428786190e-09 0s 0s 428789870e-09 1s 1s 428795750e-09 1s 1s 428796430e-09 0s 0s 428800110e-09 1s 1s 428806030e-09 1s 1s 428806670e-09 0s 0s 428810350e-09 1s 1s 428816310e-09 1s 1s 428816910e-09 0s 0s 428820590e-09 1s 1s 428826590e-09 1s 1s 428827150e-09 0s 0s 428830830e-09 1s 1s 428836870e-09 1s 1s 428837390e-09 0s 0s 428841070e-09 1s 1s 428847150e-09 1s 1s 428847630e-09 0s 0s 428851310e-09 1s 1s 428857430e-09 1s 1s 428857870e-09 0s 0s 428861550e-09 1s 1s 428867710e-09 1s 1s 428868110e-09 0s 0s 428871790e-09 1s 1s 428877990e-09 1s 1s 428878350e-09 0s 0s 428882030e-09 1s 1s 428888270e-09 1s 1s 428888590e-09 0s 0s 428892270e-09 1s 1s 428898550e-09 1s 1s 428898830e-09 0s 0s 428902510e-09 1s 1s 428908830e-09 1s 1s 428909070e-09 0s 0s 428912750e-09 1s 1s 428919110e-09 1s 1s 428919310e-09 0s 0s 428922990e-09 1s 1s 428929390e-09 1s 1s 428929550e-09 0s 0s 428933230e-09 1s 1s 428939670e-09 1s 1s 428939790e-09 0s 0s 428943470e-09 1s 1s 428949950e-09 1s 1s 428950030e-09 0s 0s 428953710e-09 1s 1s 428960230e-09 1s 1s 428960270e-09 0s 0s 428963950e-09 1s 1s 428970510e-09 0s 0s 428974190e-09 1s 1s 428980750e-09 0s 0s 428980790e-09 0s 0s 428984430e-09 1s 1s 428990990e-09 0s 0s 428991070e-09 0s 0s 428994670e-09 1s 1s 429001230e-09 0s 0s 429001350e-09 0s 0s 429004910e-09 1s 1s 429011470e-09 0s 0s 429011630e-09 0s 0s 429015150e-09 1s 1s 429021710e-09 0s 0s 429021910e-09 0s 0s 429025390e-09 1s 1s 429031950e-09 0s 0s 429032190e-09 0s 0s 429035630e-09 1s 1s 429042190e-09 0s 0s 429042470e-09 0s 0s 429045870e-09 1s 1s 429052430e-09 0s 0s 429052750e-09 0s 0s 429056110e-09 1s 1s 429062670e-09 0s 0s 429063030e-09 0s 0s 429066350e-09 1s 1s 429072910e-09 0s 0s 429073310e-09 0s 0s 429076590e-09 1s 1s 429083150e-09 0s 0s 429083590e-09 0s 0s 429086830e-09 1s 1s 429093390e-09 0s 0s 429093870e-09 0s 0s 429097070e-09 1s 1s 429103630e-09 0s 0s 429104150e-09 0s 0s 429107310e-09 1s 1s 429113870e-09 0s 0s 429114430e-09 0s 0s 429117550e-09 1s 1s 429124110e-09 0s 0s 429124710e-09 0s 0s 429127790e-09 1s 1s 429134350e-09 0s 0s 429134990e-09 0s 0s 429138030e-09 1s 1s 429144590e-09 0s 0s 429145270e-09 0s 0s 429148270e-09 1s 1s 429154830e-09 0s 0s 429155550e-09 0s 0s 429158510e-09 1s 1s 429165070e-09 0s 0s 429165830e-09 0s 0s 429168750e-09 1s 1s 429175310e-09 0s 0s 429176110e-09 0s 0s 429178990e-09 1s 1s 429185550e-09 0s 0s 429186390e-09 0s 0s 429189230e-09 1s 1s 429195790e-09 0s 0s 429196670e-09 0s 0s 429199470e-09 1s 1s 429206030e-09 0s 0s 429206950e-09 0s 0s 429209710e-09 1s 1s 429216270e-09 0s 0s 429217230e-09 0s 0s 429219950e-09 1s 1s 429226510e-09 0s 0s 429227510e-09 0s 0s 429230190e-09 1s 1s 429236750e-09 0s 0s 429237790e-09 0s 0s 429240430e-09 1s 1s 429246990e-09 0s 0s 429248070e-09 0s 0s 429250670e-09 1s 1s 429257230e-09 0s 0s 429258350e-09 0s 0s 429260910e-09 1s 1s 429267470e-09 0s 0s 429268630e-09 0s 0s 429271150e-09 1s 1s 429277710e-09 0s 0s 429278910e-09 0s 0s 429281390e-09 1s 1s 429287950e-09 0s 0s 429289190e-09 0s 0s 429291630e-09 1s 1s 429298190e-09 0s 0s 429299470e-09 0s 0s 429301870e-09 1s 1s 429308430e-09 0s 0s 429309750e-09 0s 0s 429312110e-09 1s 1s 429318670e-09 0s 0s 429320030e-09 0s 0s 429322350e-09 1s 1s 429328910e-09 0s 0s 429330310e-09 0s 0s 429332590e-09 1s 1s 429339150e-09 0s 0s 429340590e-09 0s 0s 429342830e-09 1s 1s 429349390e-09 0s 0s 429350870e-09 0s 0s 429353070e-09 1s 1s 429359630e-09 0s 0s 429361150e-09 0s 0s 429363310e-09 1s 1s 429369870e-09 0s 0s 429371430e-09 0s 0s 429373550e-09 1s 1s 429380110e-09 0s 0s 429381710e-09 0s 0s 429383790e-09 1s 1s 429390350e-09 0s 0s 429391990e-09 0s 0s 429394030e-09 1s 1s 429400590e-09 0s 0s 429402270e-09 0s 0s 429404270e-09 1s 1s 429410830e-09 0s 0s 429412550e-09 0s 0s 429414510e-09 1s 1s 429421070e-09 0s 0s 429422830e-09 0s 0s 429424750e-09 1s 1s 429431310e-09 0s 0s 429433110e-09 0s 0s 429434990e-09 1s 1s 429441550e-09 0s 0s 429443390e-09 0s 0s 429445230e-09 1s 1s 429451790e-09 0s 0s 429453670e-09 0s 0s 429455470e-09 1s 1s 429462030e-09 0s 0s 429463950e-09 0s 0s 429465710e-09 1s 1s 429472270e-09 0s 0s 429474230e-09 0s 0s 429475950e-09 1s 1s 429482510e-09 0s 0s 429484510e-09 0s 0s 429486190e-09 1s 1s 429492750e-09 0s 0s 429494790e-09 0s 0s 429496430e-09 1s 1s 429502990e-09 0s 0s 429505070e-09 0s 0s 429506670e-09 1s 1s 429513230e-09 0s 0s 429515350e-09 0s 0s 429516910e-09 1s 1s 429523470e-09 0s 0s 429525630e-09 0s 0s 429527150e-09 1s 1s 429533710e-09 0s 0s 429535910e-09 0s 0s 429537390e-09 1s 1s 429543950e-09 0s 0s 429546190e-09 0s 0s 429547630e-09 1s 1s 429554190e-09 0s 0s 429556470e-09 0s 0s 429557870e-09 1s 1s 429564430e-09 0s 0s 429566750e-09 0s 0s 429568110e-09 1s 1s 429574670e-09 0s 0s 429577030e-09 0s 0s 429578350e-09 1s 1s 429584910e-09 0s 0s 429587310e-09 0s 0s 429588590e-09 1s 1s 429595150e-09 0s 0s 429597590e-09 0s 0s 429598830e-09 1s 1s 429605390e-09 0s 0s 429607870e-09 0s 0s 429609070e-09 1s 1s 429615630e-09 0s 0s 429618150e-09 0s 0s 429619310e-09 1s 1s 429625870e-09 0s 0s 429628430e-09 0s 0s 429629550e-09 1s 1s 429636110e-09 0s 0s 429638710e-09 0s 0s 429639790e-09 1s 1s 429646350e-09 0s 0s 429648990e-09 0s 0s 429650030e-09 1s 1s 429656590e-09 0s 0s 429659270e-09 0s 0s 429660270e-09 1s 1s 429666830e-09 0s 0s 429669550e-09 0s 0s 429670510e-09 1s 1s 429677070e-09 0s 0s 429679830e-09 0s 0s 429680750e-09 1s 1s 429687310e-09 0s 0s 429690110e-09 0s 0s 429690990e-09 1s 1s 429697550e-09 0s 0s 429700390e-09 0s 0s 429701230e-09 1s 1s 429707790e-09 0s 0s 429710670e-09 0s 0s 429711470e-09 1s 1s 429718030e-09 0s 0s 429720950e-09 0s 0s 429721710e-09 1s 1s 429728270e-09 0s 0s 429731230e-09 0s 0s 429731950e-09 1s 1s 429738510e-09 0s 0s 429741510e-09 0s 0s 429742190e-09 1s 1s 429748750e-09 0s 0s 429751790e-09 0s 0s 429752430e-09 1s 1s 429758990e-09 0s 0s 429762070e-09 0s 0s 429762670e-09 1s 1s 429769230e-09 0s 0s 429772350e-09 0s 0s 429772910e-09 1s 1s 429779470e-09 0s 0s 429782630e-09 0s 0s 429783150e-09 1s 1s 429789710e-09 0s 0s 429792910e-09 0s 0s 429793390e-09 1s 1s 429799950e-09 0s 0s 429803190e-09 0s 0s 429803630e-09 1s 1s 429810190e-09 0s 0s 429813470e-09 0s 0s 429813870e-09 1s 1s 429820430e-09 0s 0s 429823750e-09 0s 0s 429824110e-09 1s 1s 429830670e-09 0s 0s 429834030e-09 0s 0s 429834350e-09 1s 1s 429840910e-09 0s 0s 429844310e-09 0s 0s 429844590e-09 1s 1s 429851150e-09 0s 0s 429854590e-09 0s 0s 429854830e-09 1s 1s 429861390e-09 0s 0s 429864870e-09 0s 0s 429865070e-09 1s 1s 429871630e-09 0s 0s 429875150e-09 0s 0s 429875310e-09 1s 1s 429881870e-09 0s 0s 429885430e-09 0s 0s 429885550e-09 1s 1s 429892110e-09 0s 0s 429895710e-09 0s 0s 429895790e-09 1s 1s 429902350e-09 0s 0s 429905990e-09 0s 0s 429906030e-09 1s 1s 429912590e-09 0s 0s 429916270e-09 1s 1s 429916310e-09 1s 1s 429922870e-09 0s 0s 429926510e-09 1s 1s 429926590e-09 1s 1s 429933110e-09 0s 0s 429936750e-09 1s 1s 429936870e-09 1s 1s 429943350e-09 0s 0s 429946990e-09 1s 1s 429947150e-09 1s 1s 429953590e-09 0s 0s 429957230e-09 1s 1s 429957430e-09 1s 1s 429963830e-09 0s 0s 429967470e-09 1s 1s 429967710e-09 1s 1s 429974070e-09 0s 0s 429977710e-09 1s 1s 429977990e-09 1s 1s 429984310e-09 0s 0s 429987950e-09 1s 1s 429988270e-09 1s 1s 429994550e-09 0s 0s 429998190e-09 1s 1s 429998550e-09 1s 1s 430004790e-09 0s 0s 430008430e-09 1s 1s 430008830e-09 1s 1s 430015030e-09 0s 0s 430018670e-09 1s 1s 430019110e-09 1s 1s 430025270e-09 0s 0s 430028910e-09 1s 1s 430029390e-09 1s 1s 430035510e-09 0s 0s 430039150e-09 1s 1s 430039670e-09 1s 1s 430045750e-09 0s 0s 430049390e-09 1s 1s 430049950e-09 1s 1s 430055990e-09 0s 0s 430059630e-09 1s 1s 430060230e-09 1s 1s 430066230e-09 0s 0s 430069870e-09 1s 1s 430070510e-09 1s 1s 430076470e-09 0s 0s 430080110e-09 1s 1s 430080790e-09 1s 1s 430086710e-09 0s 0s 430090350e-09 1s 1s 430091070e-09 1s 1s 430096950e-09 0s 0s 430100590e-09 1s 1s 430101350e-09 1s 1s 430107190e-09 0s 0s 430110830e-09 1s 1s 430111630e-09 1s 1s 430117430e-09 0s 0s 430121070e-09 1s 1s 430121910e-09 1s 1s 430127670e-09 0s 0s 430131310e-09 1s 1s 430132190e-09 1s 1s 430137910e-09 0s 0s 430141550e-09 1s 1s 430142470e-09 1s 1s 430148150e-09 0s 0s 430151790e-09 1s 1s 430152750e-09 1s 1s 430158390e-09 0s 0s 430162030e-09 1s 1s 430163030e-09 1s 1s 430168630e-09 0s 0s 430172270e-09 1s 1s 430173310e-09 1s 1s 430178870e-09 0s 0s 430182510e-09 1s 1s 430183590e-09 1s 1s 430189110e-09 0s 0s 430192750e-09 1s 1s 430193870e-09 1s 1s 430199350e-09 0s 0s 430202990e-09 1s 1s 430204150e-09 1s 1s 430209590e-09 0s 0s 430213230e-09 1s 1s 430214430e-09 1s 1s 430219830e-09 0s 0s 430223470e-09 1s 1s 430224710e-09 1s 1s 430230070e-09 0s 0s 430233710e-09 1s 1s 430234990e-09 1s 1s 430240310e-09 0s 0s 430243950e-09 1s 1s 430245270e-09 1s 1s 430250550e-09 0s 0s 430254190e-09 1s 1s 430255550e-09 1s 1s 430260790e-09 0s 0s 430264430e-09 1s 1s 430265830e-09 1s 1s 430271030e-09 0s 0s 430274670e-09 1s 1s 430276110e-09 1s 1s 430281270e-09 0s 0s 430284910e-09 1s 1s 430286390e-09 1s 1s 430291510e-09 0s 0s 430295150e-09 1s 1s 430296670e-09 1s 1s 430301750e-09 0s 0s 430305390e-09 1s 1s 430306950e-09 1s 1s 430311990e-09 0s 0s 430315630e-09 1s 1s 430317230e-09 1s 1s 430322230e-09 0s 0s 430325870e-09 1s 1s 430327510e-09 1s 1s 430332470e-09 0s 0s 430336110e-09 1s 1s 430337790e-09 1s 1s 430342710e-09 0s 0s 430346350e-09 1s 1s 430348070e-09 1s 1s 430352950e-09 0s 0s 430356590e-09 1s 1s 430358350e-09 1s 1s 430363190e-09 0s 0s 430366830e-09 1s 1s 430368630e-09 1s 1s 430373430e-09 0s 0s 430377070e-09 1s 1s 430378910e-09 1s 1s 430383670e-09 0s 0s 430387310e-09 1s 1s 430389190e-09 1s 1s 430393910e-09 0s 0s 430397550e-09 1s 1s 430399470e-09 1s 1s 430404150e-09 0s 0s 430407790e-09 1s 1s 430409750e-09 1s 1s 430414390e-09 0s 0s 430418030e-09 1s 1s 430420030e-09 1s 1s 430424630e-09 0s 0s 430428270e-09 1s 1s 430430310e-09 1s 1s 430434870e-09 0s 0s 430438510e-09 1s 1s 430440590e-09 1s 1s 430445110e-09 0s 0s 430448750e-09 1s 1s 430450870e-09 1s 1s 430455350e-09 0s 0s 430458990e-09 1s 1s 430461150e-09 1s 1s 430465590e-09 0s 0s 430469230e-09 1s 1s 430471430e-09 1s 1s 430475830e-09 0s 0s 430479470e-09 1s 1s 430481710e-09 1s 1s 430486070e-09 0s 0s 430489710e-09 1s 1s 430491990e-09 1s 1s 430496310e-09 0s 0s 430499950e-09 1s 1s 430502270e-09 1s 1s 430506550e-09 0s 0s 430510190e-09 1s 1s 430512550e-09 1s 1s 430516790e-09 0s 0s 430520430e-09 1s 1s 430522830e-09 1s 1s 430527030e-09 0s 0s 430530670e-09 1s 1s 430533110e-09 1s 1s 430537270e-09 0s 0s 430540910e-09 1s 1s 430543390e-09 1s 1s 430547510e-09 0s 0s 430551150e-09 1s 1s 430553670e-09 1s 1s 430557750e-09 0s 0s 430561390e-09 1s 1s 430563950e-09 1s 1s 430567990e-09 0s 0s 430571630e-09 1s 1s 430574230e-09 1s 1s 430578230e-09 0s 0s 430581870e-09 1s 1s 430584510e-09 1s 1s 430588470e-09 0s 0s 430592110e-09 1s 1s 430594790e-09 1s 1s 430598710e-09 0s 0s 430602350e-09 1s 1s 430605070e-09 1s 1s 430608950e-09 0s 0s 430612590e-09 1s 1s 430615350e-09 1s 1s 430619190e-09 0s 0s 430622830e-09 1s 1s 430625630e-09 1s 1s 430629430e-09 0s 0s 430633070e-09 1s 1s 430635910e-09 1s 1s 430639670e-09 0s 0s 430643310e-09 1s 1s 430646190e-09 1s 1s 430649910e-09 0s 0s 430653550e-09 1s 1s 430656470e-09 1s 1s 430660150e-09 0s 0s 430663790e-09 1s 1s 430666750e-09 1s 1s 430670390e-09 0s 0s 430674030e-09 1s 1s 430677030e-09 1s 1s 430680630e-09 0s 0s 430684270e-09 1s 1s 430687310e-09 1s 1s 430690870e-09 0s 0s 430694510e-09 1s 1s 430697590e-09 1s 1s 430701110e-09 0s 0s 430704750e-09 1s 1s 430707870e-09 1s 1s 430711350e-09 0s 0s 430714990e-09 1s 1s 430718150e-09 1s 1s 430721590e-09 0s 0s 430725230e-09 1s 1s 430728430e-09 1s 1s 430731830e-09 0s 0s 430735470e-09 1s 1s 430738710e-09 1s 1s 430742070e-09 0s 0s 430745710e-09 1s 1s 430748990e-09 1s 1s 430752310e-09 0s 0s 430755950e-09 1s 1s 430759270e-09 1s 1s 430762550e-09 0s 0s 430766190e-09 1s 1s 430769550e-09 1s 1s 430772790e-09 0s 0s 430776430e-09 1s 1s 430779830e-09 1s 1s 430783030e-09 0s 0s 430786670e-09 1s 1s 430790110e-09 1s 1s 430793270e-09 0s 0s 430796910e-09 1s 1s 430800390e-09 1s 1s 430803510e-09 0s 0s 430807150e-09 1s 1s 430810670e-09 1s 1s 430813750e-09 0s 0s 430817390e-09 1s 1s 430820950e-09 1s 1s 430823990e-09 0s 0s 430827630e-09 1s 1s 430831230e-09 1s 1s 430834230e-09 0s 0s 430837870e-09 1s 1s 430841510e-09 1s 1s 430844470e-09 0s 0s 430848110e-09 1s 1s 430851790e-09 1s 1s 430854710e-09 0s 0s 430858350e-09 1s 1s 430862070e-09 1s 1s 430864950e-09 0s 0s 430868590e-09 1s 1s 430872350e-09 1s 1s 430875190e-09 0s 0s 430878830e-09 1s 1s 430882630e-09 1s 1s 430885430e-09 0s 0s 430889070e-09 1s 1s 430892910e-09 1s 1s 430895670e-09 0s 0s 430899310e-09 1s 1s 430903190e-09 1s 1s 430905910e-09 0s 0s 430909550e-09 1s 1s 430913470e-09 1s 1s 430916150e-09 0s 0s 430919790e-09 1s 1s 430923750e-09 1s 1s 430926390e-09 0s 0s 430930030e-09 1s 1s 430934030e-09 1s 1s 430936630e-09 0s 0s 430940270e-09 1s 1s 430944310e-09 1s 1s 430946870e-09 0s 0s 430950510e-09 1s 1s 430954590e-09 1s 1s 430957110e-09 0s 0s 430960750e-09 1s 1s 430964870e-09 1s 1s 430967350e-09 0s 0s 430970990e-09 1s 1s 430975150e-09 1s 1s 430977590e-09 0s 0s 430981230e-09 1s 1s 430985430e-09 1s 1s 430987830e-09 0s 0s 430991470e-09 1s 1s 430995710e-09 1s 1s 430998070e-09 0s 0s 431001710e-09 1s 1s 431005990e-09 1s 1s 431008310e-09 0s 0s 431011950e-09 1s 1s 431016270e-09 1s 1s 431018550e-09 0s 0s 431022190e-09 1s 1s 431026550e-09 1s 1s 431028790e-09 0s 0s 431032430e-09 1s 1s 431036830e-09 1s 1s 431039030e-09 0s 0s 431042670e-09 1s 1s 431047110e-09 1s 1s 431049270e-09 0s 0s 431052910e-09 1s 1s 431057390e-09 1s 1s 431059510e-09 0s 0s 431063150e-09 1s 1s 431067670e-09 1s 1s 431069750e-09 0s 0s 431073390e-09 1s 1s 431077950e-09 1s 1s 431079990e-09 0s 0s 431083630e-09 1s 1s 431088230e-09 1s 1s 431090230e-09 0s 0s 431093870e-09 1s 1s 431098510e-09 1s 1s 431100470e-09 0s 0s 431104110e-09 1s 1s 431108790e-09 1s 1s 431110710e-09 0s 0s 431114350e-09 1s 1s 431119070e-09 1s 1s 431120950e-09 0s 0s 431124590e-09 1s 1s 431129350e-09 1s 1s 431131190e-09 0s 0s 431134830e-09 1s 1s 431139630e-09 1s 1s 431141430e-09 0s 0s 431145070e-09 1s 1s 431149910e-09 1s 1s 431151670e-09 0s 0s 431155310e-09 1s 1s 431160190e-09 1s 1s 431161910e-09 0s 0s 431165550e-09 1s 1s 431170470e-09 1s 1s 431172150e-09 0s 0s 431175790e-09 1s 1s 431180750e-09 1s 1s 431182390e-09 0s 0s 431186030e-09 1s 1s 431191030e-09 1s 1s 431192630e-09 0s 0s 431196270e-09 1s 1s 431201310e-09 1s 1s 431202870e-09 0s 0s 431206510e-09 1s 1s 431211590e-09 1s 1s 431213110e-09 0s 0s 431216750e-09 1s 1s 431221870e-09 1s 1s 431223350e-09 0s 0s 431226990e-09 1s 1s 431232150e-09 1s 1s 431233590e-09 0s 0s 431237230e-09 1s 1s 431242430e-09 1s 1s 431243830e-09 0s 0s 431247470e-09 1s 1s 431252710e-09 1s 1s 431254070e-09 0s 0s 431257710e-09 1s 1s 431262990e-09 1s 1s 431264310e-09 0s 0s 431267950e-09 1s 1s 431273270e-09 1s 1s 431274550e-09 0s 0s 431278190e-09 1s 1s 431283550e-09 1s 1s 431284790e-09 0s 0s 431288430e-09 1s 1s 431293830e-09 1s 1s 431295030e-09 0s 0s 431298670e-09 1s 1s 431304110e-09 1s 1s 431305270e-09 0s 0s 431308910e-09 1s 1s 431314390e-09 1s 1s 431315510e-09 0s 0s 431319150e-09 1s 1s 431324670e-09 1s 1s 431325750e-09 0s 0s 431329390e-09 1s 1s 431334950e-09 1s 1s 431335990e-09 0s 0s 431339630e-09 1s 1s 431345230e-09 1s 1s 431346230e-09 0s 0s 431349870e-09 1s 1s 431355510e-09 1s 1s 431356470e-09 0s 0s 431360110e-09 1s 1s 431365790e-09 1s 1s 431366710e-09 0s 0s 431370350e-09 1s 1s 431376070e-09 1s 1s 431376950e-09 0s 0s 431380590e-09 1s 1s 431386350e-09 1s 1s 431387190e-09 0s 0s 431390830e-09 1s 1s 431396630e-09 1s 1s 431397430e-09 0s 0s 431401070e-09 1s 1s 431406910e-09 1s 1s 431407670e-09 0s 0s 431411310e-09 1s 1s 431417190e-09 1s 1s 431417910e-09 0s 0s 431421550e-09 1s 1s 431427470e-09 1s 1s 431428150e-09 0s 0s 431431790e-09 1s 1s 431437750e-09 1s 1s 431438390e-09 0s 0s 431442030e-09 1s 1s 431448030e-09 1s 1s 431448630e-09 0s 0s 431452270e-09 1s 1s 431458310e-09 1s 1s 431458870e-09 0s 0s 431462510e-09 1s 1s 431468590e-09 1s 1s 431469110e-09 0s 0s 431472750e-09 1s 1s 431478870e-09 1s 1s 431479350e-09 0s 0s 431482990e-09 1s 1s 431489150e-09 1s 1s 431489590e-09 0s 0s 431493230e-09 1s 1s 431499430e-09 1s 1s 431499830e-09 0s 0s 431503470e-09 1s 1s 431509710e-09 1s 1s 431510070e-09 0s 0s 431513710e-09 1s 1s 431519990e-09 1s 1s 431520310e-09 0s 0s 431523950e-09 1s 1s 431530270e-09 1s 1s 431530550e-09 0s 0s 431534190e-09 1s 1s 431540550e-09 1s 1s 431540790e-09 0s 0s 431544430e-09 1s 1s 431550830e-09 1s 1s 431551030e-09 0s 0s 431554670e-09 1s 1s 431561110e-09 1s 1s 431561270e-09 0s 0s 431564910e-09 1s 1s 431571390e-09 1s 1s 431571510e-09 0s 0s 431575150e-09 1s 1s 431581670e-09 1s 1s 431581750e-09 0s 0s 431585390e-09 1s 1s 431591950e-09 1s 1s 431591990e-09 0s 0s 431595630e-09 1s 1s 431602230e-09 0s 0s 431605870e-09 1s 1s 431612470e-09 0s 0s 431612510e-09 0s 0s 431616110e-09 1s 1s 431622710e-09 0s 0s 431622790e-09 0s 0s 431626350e-09 1s 1s 431632950e-09 0s 0s 431633070e-09 0s 0s 431636590e-09 1s 1s 431643190e-09 0s 0s 431643350e-09 0s 0s 431646830e-09 1s 1s 431653430e-09 0s 0s 431653630e-09 0s 0s 431657070e-09 1s 1s 431663670e-09 0s 0s 431663910e-09 0s 0s 431667310e-09 1s 1s 431673910e-09 0s 0s 431674190e-09 0s 0s 431677550e-09 1s 1s 431684150e-09 0s 0s 431684470e-09 0s 0s 431687790e-09 1s 1s 431694390e-09 0s 0s 431694750e-09 0s 0s 431698030e-09 1s 1s 431704630e-09 0s 0s 431705030e-09 0s 0s 431708270e-09 1s 1s 431714870e-09 0s 0s 431715310e-09 0s 0s 431718510e-09 1s 1s 431725110e-09 0s 0s 431725590e-09 0s 0s 431728750e-09 1s 1s 431735350e-09 0s 0s 431735870e-09 0s 0s 431738990e-09 1s 1s 431745590e-09 0s 0s 431746150e-09 0s 0s 431749230e-09 1s 1s 431755830e-09 0s 0s 431756430e-09 0s 0s 431759470e-09 1s 1s 431766070e-09 0s 0s 431766710e-09 0s 0s 431769710e-09 1s 1s 431776310e-09 0s 0s 431776990e-09 0s 0s 431779950e-09 1s 1s 431786550e-09 0s 0s 431787270e-09 0s 0s 431790190e-09 1s 1s 431796790e-09 0s 0s 431797550e-09 0s 0s 431800430e-09 1s 1s 431807030e-09 0s 0s 431807830e-09 0s 0s 431810670e-09 1s 1s 431817270e-09 0s 0s 431818110e-09 0s 0s 431820910e-09 1s 1s 431827510e-09 0s 0s 431828390e-09 0s 0s 431831150e-09 1s 1s 431837750e-09 0s 0s 431838670e-09 0s 0s 431841390e-09 1s 1s 431847990e-09 0s 0s 431848950e-09 0s 0s 431851630e-09 1s 1s 431858230e-09 0s 0s 431859230e-09 0s 0s 431861870e-09 1s 1s 431868470e-09 0s 0s 431869510e-09 0s 0s 431872110e-09 1s 1s 431878710e-09 0s 0s 431879790e-09 0s 0s 431882350e-09 1s 1s 431888950e-09 0s 0s 431890070e-09 0s 0s 431892590e-09 1s 1s 431899190e-09 0s 0s 431900350e-09 0s 0s 431902830e-09 1s 1s 431909430e-09 0s 0s 431910630e-09 0s 0s 431913070e-09 1s 1s 431919670e-09 0s 0s 431920910e-09 0s 0s 431923310e-09 1s 1s 431929910e-09 0s 0s 431931190e-09 0s 0s 431933550e-09 1s 1s 431940150e-09 0s 0s 431941470e-09 0s 0s 431943790e-09 1s 1s 431950390e-09 0s 0s 431951750e-09 0s 0s 431954030e-09 1s 1s 431960630e-09 0s 0s 431962030e-09 0s 0s 431964270e-09 1s 1s 431970870e-09 0s 0s 431972310e-09 0s 0s 431974510e-09 1s 1s 431981110e-09 0s 0s 431982590e-09 0s 0s 431984750e-09 1s 1s 431991350e-09 0s 0s 431992870e-09 0s 0s 431994990e-09 1s 1s 432001590e-09 0s 0s 432003150e-09 0s 0s 432005230e-09 1s 1s 432011830e-09 0s 0s 432013430e-09 0s 0s 432015470e-09 1s 1s 432022070e-09 0s 0s 432023710e-09 0s 0s 432025710e-09 1s 1s 432032310e-09 0s 0s 432033990e-09 0s 0s 432035950e-09 1s 1s 432042550e-09 0s 0s 432044270e-09 0s 0s 432046190e-09 1s 1s 432052790e-09 0s 0s 432054550e-09 0s 0s 432056430e-09 1s 1s 432063030e-09 0s 0s 432064830e-09 0s 0s 432066670e-09 1s 1s 432073270e-09 0s 0s 432075110e-09 0s 0s 432076910e-09 1s 1s 432083510e-09 0s 0s 432085390e-09 0s 0s 432087150e-09 1s 1s 432093750e-09 0s 0s 432095670e-09 0s 0s 432097390e-09 1s 1s 432103990e-09 0s 0s 432105950e-09 0s 0s 432107630e-09 1s 1s 432114230e-09 0s 0s 432116230e-09 0s 0s 432117870e-09 1s 1s 432124470e-09 0s 0s 432126510e-09 0s 0s 432128110e-09 1s 1s 432134710e-09 0s 0s 432136790e-09 0s 0s 432138350e-09 1s 1s 432144950e-09 0s 0s 432147070e-09 0s 0s 432148590e-09 1s 1s 432155190e-09 0s 0s 432157350e-09 0s 0s 432158830e-09 1s 1s 432165430e-09 0s 0s 432167630e-09 0s 0s 432169070e-09 1s 1s 432175670e-09 0s 0s 432177910e-09 0s 0s 432179310e-09 1s 1s 432185910e-09 0s 0s 432188190e-09 0s 0s 432189550e-09 1s 1s 432196150e-09 0s 0s 432198470e-09 0s 0s 432199790e-09 1s 1s 432206390e-09 0s 0s 432208750e-09 0s 0s 432210030e-09 1s 1s 432216630e-09 0s 0s 432219030e-09 0s 0s 432220270e-09 1s 1s 432226870e-09 0s 0s 432229310e-09 0s 0s 432230510e-09 1s 1s 432237110e-09 0s 0s 432239590e-09 0s 0s 432240750e-09 1s 1s 432247350e-09 0s 0s 432249870e-09 0s 0s 432250990e-09 1s 1s 432257590e-09 0s 0s 432260150e-09 0s 0s 432261230e-09 1s 1s 432267830e-09 0s 0s 432270430e-09 0s 0s 432271470e-09 1s 1s 432278070e-09 0s 0s 432280710e-09 0s 0s 432281710e-09 1s 1s 432288310e-09 0s 0s 432290990e-09 0s 0s 432291950e-09 1s 1s 432298550e-09 0s 0s 432301270e-09 0s 0s 432302190e-09 1s 1s 432308790e-09 0s 0s 432311550e-09 0s 0s 432312430e-09 1s 1s 432319030e-09 0s 0s 432321830e-09 0s 0s 432322670e-09 1s 1s 432329270e-09 0s 0s 432332110e-09 0s 0s 432332910e-09 1s 1s 432339510e-09 0s 0s 432342390e-09 0s 0s 432343150e-09 1s 1s 432349750e-09 0s 0s 432352670e-09 0s 0s 432353390e-09 1s 1s 432359990e-09 0s 0s 432362950e-09 0s 0s 432363630e-09 1s 1s 432370230e-09 0s 0s 432373230e-09 0s 0s 432373870e-09 1s 1s 432380470e-09 0s 0s 432383510e-09 0s 0s 432384110e-09 1s 1s 432390710e-09 0s 0s 432393790e-09 0s 0s 432394350e-09 1s 1s 432400950e-09 0s 0s 432404070e-09 0s 0s 432404590e-09 1s 1s 432411190e-09 0s 0s 432414350e-09 0s 0s 432414830e-09 1s 1s 432421430e-09 0s 0s 432424630e-09 0s 0s 432425070e-09 1s 1s 432431670e-09 0s 0s 432434910e-09 0s 0s 432435310e-09 1s 1s 432441910e-09 0s 0s 432445190e-09 0s 0s 432445550e-09 1s 1s 432452150e-09 0s 0s 432455470e-09 0s 0s 432455790e-09 1s 1s 432462390e-09 0s 0s 432465750e-09 0s 0s 432466030e-09 1s 1s 432472630e-09 0s 0s 432476030e-09 0s 0s 432476270e-09 1s 1s 432482870e-09 0s 0s 432486310e-09 0s 0s 432486510e-09 1s 1s 432493110e-09 0s 0s 432496590e-09 0s 0s 432496750e-09 1s 1s 432503350e-09 0s 0s 432506870e-09 0s 0s 432506990e-09 1s 1s 432513590e-09 0s 0s 432517150e-09 0s 0s 432517230e-09 1s 1s 432523830e-09 0s 0s 432527430e-09 0s 0s 432527470e-09 1s 1s 432534070e-09 0s 0s 432537710e-09 1s 1s 432537750e-09 1s 1s 432544350e-09 0s 0s 432547950e-09 1s 1s 432548030e-09 1s 1s 432554590e-09 0s 0s 432558190e-09 1s 1s 432558310e-09 1s 1s 432564830e-09 0s 0s 432568430e-09 1s 1s 432568590e-09 1s 1s 432575070e-09 0s 0s 432578670e-09 1s 1s 432578870e-09 1s 1s 432585310e-09 0s 0s 432588910e-09 1s 1s 432589150e-09 1s 1s 432595550e-09 0s 0s 432599150e-09 1s 1s 432599430e-09 1s 1s 432605790e-09 0s 0s 432609390e-09 1s 1s 432609710e-09 1s 1s 432616030e-09 0s 0s 432619630e-09 1s 1s 432619990e-09 1s 1s 432626270e-09 0s 0s 432629870e-09 1s 1s 432630270e-09 1s 1s 432636510e-09 0s 0s 432640110e-09 1s 1s 432640550e-09 1s 1s 432646750e-09 0s 0s 432650350e-09 1s 1s 432650830e-09 1s 1s 432656990e-09 0s 0s 432660590e-09 1s 1s 432661110e-09 1s 1s 432667230e-09 0s 0s 432670830e-09 1s 1s 432671390e-09 1s 1s 432677470e-09 0s 0s 432681070e-09 1s 1s 432681670e-09 1s 1s 432687710e-09 0s 0s 432691310e-09 1s 1s 432691950e-09 1s 1s 432697950e-09 0s 0s 432701550e-09 1s 1s 432702230e-09 1s 1s 432708190e-09 0s 0s 432711790e-09 1s 1s 432712510e-09 1s 1s 432718430e-09 0s 0s 432722030e-09 1s 1s 432722790e-09 1s 1s 432728670e-09 0s 0s 432732270e-09 1s 1s 432733070e-09 1s 1s 432738910e-09 0s 0s 432742510e-09 1s 1s 432743350e-09 1s 1s 432749150e-09 0s 0s 432752750e-09 1s 1s 432753630e-09 1s 1s 432759390e-09 0s 0s 432762990e-09 1s 1s 432763910e-09 1s 1s 432769630e-09 0s 0s 432773230e-09 1s 1s 432774190e-09 1s 1s 432779870e-09 0s 0s 432783470e-09 1s 1s 432784470e-09 1s 1s 432790110e-09 0s 0s 432793710e-09 1s 1s 432794750e-09 1s 1s 432800350e-09 0s 0s 432803950e-09 1s 1s 432805030e-09 1s 1s 432810590e-09 0s 0s 432814190e-09 1s 1s 432815310e-09 1s 1s 432820830e-09 0s 0s 432824430e-09 1s 1s 432825590e-09 1s 1s 432831070e-09 0s 0s 432834670e-09 1s 1s 432835870e-09 1s 1s 432841310e-09 0s 0s 432844910e-09 1s 1s 432846150e-09 1s 1s 432851550e-09 0s 0s 432855150e-09 1s 1s 432856430e-09 1s 1s 432861790e-09 0s 0s 432865390e-09 1s 1s 432866710e-09 1s 1s 432872030e-09 0s 0s 432875630e-09 1s 1s 432876990e-09 1s 1s 432882270e-09 0s 0s 432885870e-09 1s 1s 432887270e-09 1s 1s 432892510e-09 0s 0s 432896110e-09 1s 1s 432897550e-09 1s 1s 432902750e-09 0s 0s 432906350e-09 1s 1s 432907830e-09 1s 1s 432912990e-09 0s 0s 432916590e-09 1s 1s 432918110e-09 1s 1s 432923230e-09 0s 0s 432926830e-09 1s 1s 432928390e-09 1s 1s 432933470e-09 0s 0s 432937070e-09 1s 1s 432938670e-09 1s 1s 432943710e-09 0s 0s 432947310e-09 1s 1s 432948950e-09 1s 1s 432953950e-09 0s 0s 432957550e-09 1s 1s 432959230e-09 1s 1s 432964190e-09 0s 0s 432967790e-09 1s 1s 432969510e-09 1s 1s 432974430e-09 0s 0s 432978030e-09 1s 1s 432979790e-09 1s 1s 432984670e-09 0s 0s 432988270e-09 1s 1s 432990070e-09 1s 1s 432994910e-09 0s 0s 432998510e-09 1s 1s 433000350e-09 1s 1s 433005150e-09 0s 0s 433008750e-09 1s 1s 433010630e-09 1s 1s 433015390e-09 0s 0s 433018990e-09 1s 1s 433020910e-09 1s 1s 433025630e-09 0s 0s 433029230e-09 1s 1s 433031190e-09 1s 1s 433035870e-09 0s 0s 433039470e-09 1s 1s 433041470e-09 1s 1s 433046110e-09 0s 0s 433049710e-09 1s 1s 433051750e-09 1s 1s 433056350e-09 0s 0s 433059950e-09 1s 1s 433062030e-09 1s 1s 433066590e-09 0s 0s 433070190e-09 1s 1s 433072310e-09 1s 1s 433076830e-09 0s 0s 433080430e-09 1s 1s 433082590e-09 1s 1s 433087070e-09 0s 0s 433090670e-09 1s 1s 433092870e-09 1s 1s 433097310e-09 0s 0s 433100910e-09 1s 1s 433103150e-09 1s 1s 433107550e-09 0s 0s 433111150e-09 1s 1s 433113430e-09 1s 1s 433117790e-09 0s 0s 433121390e-09 1s 1s 433123710e-09 1s 1s 433128030e-09 0s 0s 433131630e-09 1s 1s 433133990e-09 1s 1s 433138270e-09 0s 0s 433141870e-09 1s 1s 433144270e-09 1s 1s 433148510e-09 0s 0s 433152110e-09 1s 1s 433154550e-09 1s 1s 433158750e-09 0s 0s 433162350e-09 1s 1s 433164830e-09 1s 1s 433168990e-09 0s 0s 433172590e-09 1s 1s 433175110e-09 1s 1s 433179230e-09 0s 0s 433182830e-09 1s 1s 433185390e-09 1s 1s 433189470e-09 0s 0s 433193070e-09 1s 1s 433195670e-09 1s 1s 433199710e-09 0s 0s 433203310e-09 1s 1s 433205950e-09 1s 1s 433209950e-09 0s 0s 433213550e-09 1s 1s 433216230e-09 1s 1s 433220190e-09 0s 0s 433223790e-09 1s 1s 433226510e-09 1s 1s 433230430e-09 0s 0s 433234030e-09 1s 1s 433236790e-09 1s 1s 433240670e-09 0s 0s 433244270e-09 1s 1s 433247070e-09 1s 1s 433250910e-09 0s 0s 433254510e-09 1s 1s 433257350e-09 1s 1s 433261150e-09 0s 0s 433264750e-09 1s 1s 433267630e-09 1s 1s 433271390e-09 0s 0s 433274990e-09 1s 1s 433277910e-09 1s 1s 433281630e-09 0s 0s 433285230e-09 1s 1s 433288190e-09 1s 1s 433291870e-09 0s 0s 433295470e-09 1s 1s 433298470e-09 1s 1s 433302110e-09 0s 0s 433305710e-09 1s 1s 433308750e-09 1s 1s 433312350e-09 0s 0s 433315950e-09 1s 1s 433319030e-09 1s 1s 433322590e-09 0s 0s 433326190e-09 1s 1s 433329310e-09 1s 1s 433332830e-09 0s 0s 433336430e-09 1s 1s 433339590e-09 1s 1s 433343070e-09 0s 0s 433346670e-09 1s 1s 433349870e-09 1s 1s 433353310e-09 0s 0s 433356910e-09 1s 1s 433360150e-09 1s 1s 433363550e-09 0s 0s 433367150e-09 1s 1s 433370430e-09 1s 1s 433373790e-09 0s 0s 433377390e-09 1s 1s 433380710e-09 1s 1s 433384030e-09 0s 0s 433387630e-09 1s 1s 433390990e-09 1s 1s 433394270e-09 0s 0s 433397870e-09 1s 1s 433401270e-09 1s 1s 433404510e-09 0s 0s 433408110e-09 1s 1s 433411550e-09 1s 1s 433414750e-09 0s 0s 433418350e-09 1s 1s 433421830e-09 1s 1s 433424990e-09 0s 0s 433428590e-09 1s 1s 433432110e-09 1s 1s 433435230e-09 0s 0s 433438830e-09 1s 1s 433442390e-09 1s 1s 433445470e-09 0s 0s 433449070e-09 1s 1s 433452670e-09 1s 1s 433455710e-09 0s 0s 433459310e-09 1s 1s 433462950e-09 1s 1s 433465950e-09 0s 0s 433469550e-09 1s 1s 433473230e-09 1s 1s 433476190e-09 0s 0s 433479790e-09 1s 1s 433483510e-09 1s 1s 433486430e-09 0s 0s 433490030e-09 1s 1s 433493790e-09 1s 1s 433496670e-09 0s 0s 433500270e-09 1s 1s 433504070e-09 1s 1s 433506910e-09 0s 0s 433510510e-09 1s 1s 433514350e-09 1s 1s 433517150e-09 0s 0s 433520750e-09 1s 1s 433524630e-09 1s 1s 433527390e-09 0s 0s 433530990e-09 1s 1s 433534910e-09 1s 1s 433537630e-09 0s 0s 433541230e-09 1s 1s 433545190e-09 1s 1s 433547870e-09 0s 0s 433551470e-09 1s 1s 433555470e-09 1s 1s 433558110e-09 0s 0s 433561710e-09 1s 1s 433565750e-09 1s 1s 433568350e-09 0s 0s 433571950e-09 1s 1s 433576030e-09 1s 1s 433578590e-09 0s 0s 433582190e-09 1s 1s 433586310e-09 1s 1s 433588830e-09 0s 0s 433592430e-09 1s 1s 433596590e-09 1s 1s 433599070e-09 0s 0s 433602670e-09 1s 1s 433606870e-09 1s 1s 433609310e-09 0s 0s 433612910e-09 1s 1s 433617150e-09 1s 1s 433619550e-09 0s 0s 433623150e-09 1s 1s 433627430e-09 1s 1s 433629790e-09 0s 0s 433633390e-09 1s 1s 433637710e-09 1s 1s 433640030e-09 0s 0s 433643630e-09 1s 1s 433647990e-09 1s 1s 433650270e-09 0s 0s 433653870e-09 1s 1s 433658270e-09 1s 1s 433660510e-09 0s 0s 433664110e-09 1s 1s 433668550e-09 1s 1s 433670750e-09 0s 0s 433674350e-09 1s 1s 433678830e-09 1s 1s 433680990e-09 0s 0s 433684590e-09 1s 1s 433689110e-09 1s 1s 433691230e-09 0s 0s 433694830e-09 1s 1s 433699390e-09 1s 1s 433701470e-09 0s 0s 433705070e-09 1s 1s 433709670e-09 1s 1s 433711710e-09 0s 0s 433715310e-09 1s 1s 433719950e-09 1s 1s 433721950e-09 0s 0s 433725550e-09 1s 1s 433730230e-09 1s 1s 433732190e-09 0s 0s 433735790e-09 1s 1s 433740510e-09 1s 1s 433742430e-09 0s 0s 433746030e-09 1s 1s 433750790e-09 1s 1s 433752670e-09 0s 0s 433756270e-09 1s 1s 433761070e-09 1s 1s 433762910e-09 0s 0s 433766510e-09 1s 1s 433771350e-09 1s 1s 433773150e-09 0s 0s 433776750e-09 1s 1s 433781630e-09 1s 1s 433783390e-09 0s 0s 433786990e-09 1s 1s 433791910e-09 1s 1s 433793630e-09 0s 0s 433797230e-09 1s 1s 433802190e-09 1s 1s 433803870e-09 0s 0s 433807470e-09 1s 1s 433812470e-09 1s 1s 433814110e-09 0s 0s 433817710e-09 1s 1s 433822750e-09 1s 1s 433824350e-09 0s 0s 433827950e-09 1s 1s 433833030e-09 1s 1s 433834590e-09 0s 0s 433838190e-09 1s 1s 433843310e-09 1s 1s 433844830e-09 0s 0s 433848430e-09 1s 1s 433853590e-09 1s 1s 433855070e-09 0s 0s 433858670e-09 1s 1s 433863870e-09 1s 1s 433865310e-09 0s 0s 433868910e-09 1s 1s 433874150e-09 1s 1s 433875550e-09 0s 0s 433879150e-09 1s 1s 433884430e-09 1s 1s 433885790e-09 0s 0s 433889390e-09 1s 1s 433894710e-09 1s 1s 433896030e-09 0s 0s 433899630e-09 1s 1s 433904990e-09 1s 1s 433906270e-09 0s 0s 433909870e-09 1s 1s 433915270e-09 1s 1s 433916510e-09 0s 0s 433920110e-09 1s 1s 433925550e-09 1s 1s 433926750e-09 0s 0s 433930350e-09 1s 1s 433935830e-09 1s 1s 433936990e-09 0s 0s 433940590e-09 1s 1s 433946110e-09 1s 1s 433947230e-09 0s 0s 433950830e-09 1s 1s 433956390e-09 1s 1s 433957470e-09 0s 0s 433961070e-09 1s 1s 433966670e-09 1s 1s 433967710e-09 0s 0s 433971310e-09 1s 1s 433976950e-09 1s 1s 433977950e-09 0s 0s 433981550e-09 1s 1s 433987230e-09 1s 1s 433988190e-09 0s 0s 433991790e-09 1s 1s 433997510e-09 1s 1s 433998430e-09 0s 0s 434002030e-09 1s 1s 434007790e-09 1s 1s 434008670e-09 0s 0s 434012270e-09 1s 1s 434018070e-09 1s 1s 434018910e-09 0s 0s 434022510e-09 1s 1s 434028350e-09 1s 1s 434029150e-09 0s 0s 434032750e-09 1s 1s 434038630e-09 1s 1s 434039390e-09 0s 0s 434042990e-09 1s 1s 434048910e-09 1s 1s 434049630e-09 0s 0s 434053230e-09 1s 1s 434059190e-09 1s 1s 434059870e-09 0s 0s 434063470e-09 1s 1s 434069470e-09 1s 1s 434070110e-09 0s 0s 434073710e-09 1s 1s 434079750e-09 1s 1s 434080350e-09 0s 0s 434083950e-09 1s 1s 434090030e-09 1s 1s 434090590e-09 0s 0s 434094190e-09 1s 1s 434100310e-09 1s 1s 434100830e-09 0s 0s 434104430e-09 1s 1s 434110590e-09 1s 1s 434111070e-09 0s 0s 434114670e-09 1s 1s 434120870e-09 1s 1s 434121310e-09 0s 0s 434124910e-09 1s 1s 434131150e-09 1s 1s 434131550e-09 0s 0s 434135150e-09 1s 1s 434141430e-09 1s 1s 434141790e-09 0s 0s 434145390e-09 1s 1s 434151710e-09 1s 1s 434152030e-09 0s 0s 434155630e-09 1s 1s 434161990e-09 1s 1s 434162270e-09 0s 0s 434165870e-09 1s 1s 434172270e-09 1s 1s 434172510e-09 0s 0s 434176110e-09 1s 1s 434182550e-09 1s 1s 434182750e-09 0s 0s 434186350e-09 1s 1s 434192830e-09 1s 1s 434192990e-09 0s 0s 434196590e-09 1s 1s 434203110e-09 1s 1s 434203230e-09 0s 0s 434206830e-09 1s 1s 434213390e-09 1s 1s 434213470e-09 0s 0s 434217070e-09 1s 1s 434223670e-09 1s 1s 434223710e-09 0s 0s 434227310e-09 1s 1s 434233950e-09 0s 0s 434237550e-09 1s 1s 434244190e-09 0s 0s 434244230e-09 0s 0s 434247790e-09 1s 1s 434254430e-09 0s 0s 434254510e-09 0s 0s 434258030e-09 1s 1s 434264670e-09 0s 0s 434264790e-09 0s 0s 434268270e-09 1s 1s 434274910e-09 0s 0s 434275070e-09 0s 0s 434278510e-09 1s 1s 434285150e-09 0s 0s 434285350e-09 0s 0s 434288750e-09 1s 1s 434295390e-09 0s 0s 434295630e-09 0s 0s 434298990e-09 1s 1s 434305630e-09 0s 0s 434305910e-09 0s 0s 434309230e-09 1s 1s 434315870e-09 0s 0s 434316190e-09 0s 0s 434319470e-09 1s 1s 434326110e-09 0s 0s 434326470e-09 0s 0s 434329710e-09 1s 1s 434336350e-09 0s 0s 434336750e-09 0s 0s 434339950e-09 1s 1s 434346590e-09 0s 0s 434347030e-09 0s 0s 434350190e-09 1s 1s 434356830e-09 0s 0s 434357310e-09 0s 0s 434360430e-09 1s 1s 434367070e-09 0s 0s 434367590e-09 0s 0s 434370670e-09 1s 1s 434377310e-09 0s 0s 434377870e-09 0s 0s 434380910e-09 1s 1s 434387550e-09 0s 0s 434388150e-09 0s 0s 434391150e-09 1s 1s 434397790e-09 0s 0s 434398430e-09 0s 0s 434401390e-09 1s 1s 434408030e-09 0s 0s 434408710e-09 0s 0s 434411630e-09 1s 1s 434418270e-09 0s 0s 434418990e-09 0s 0s 434421870e-09 1s 1s 434428510e-09 0s 0s 434429270e-09 0s 0s 434432110e-09 1s 1s 434438750e-09 0s 0s 434439550e-09 0s 0s 434442350e-09 1s 1s 434448990e-09 0s 0s 434449830e-09 0s 0s 434452590e-09 1s 1s 434459230e-09 0s 0s 434460110e-09 0s 0s 434462830e-09 1s 1s 434469470e-09 0s 0s 434470390e-09 0s 0s 434473070e-09 1s 1s 434479710e-09 0s 0s 434480670e-09 0s 0s 434483310e-09 1s 1s 434489950e-09 0s 0s 434490950e-09 0s 0s 434493550e-09 1s 1s 434500190e-09 0s 0s 434501230e-09 0s 0s 434503790e-09 1s 1s 434510430e-09 0s 0s 434511510e-09 0s 0s 434514030e-09 1s 1s 434520670e-09 0s 0s 434521790e-09 0s 0s 434524270e-09 1s 1s 434530910e-09 0s 0s 434532070e-09 0s 0s 434534510e-09 1s 1s 434541150e-09 0s 0s 434542350e-09 0s 0s 434544750e-09 1s 1s 434551390e-09 0s 0s 434552630e-09 0s 0s 434554990e-09 1s 1s 434561630e-09 0s 0s 434562910e-09 0s 0s 434565230e-09 1s 1s 434571870e-09 0s 0s 434573190e-09 0s 0s 434575470e-09 1s 1s 434582110e-09 0s 0s 434583470e-09 0s 0s 434585710e-09 1s 1s 434592350e-09 0s 0s 434593750e-09 0s 0s 434595950e-09 1s 1s 434602590e-09 0s 0s 434604030e-09 0s 0s 434606190e-09 1s 1s 434612830e-09 0s 0s 434614310e-09 0s 0s 434616430e-09 1s 1s 434623070e-09 0s 0s 434624590e-09 0s 0s 434626670e-09 1s 1s 434633310e-09 0s 0s 434634870e-09 0s 0s 434636910e-09 1s 1s 434643550e-09 0s 0s 434645150e-09 0s 0s 434647150e-09 1s 1s 434653790e-09 0s 0s 434655430e-09 0s 0s 434657390e-09 1s 1s 434664030e-09 0s 0s 434665710e-09 0s 0s 434667630e-09 1s 1s 434674270e-09 0s 0s 434675990e-09 0s 0s 434677870e-09 1s 1s 434684510e-09 0s 0s 434686270e-09 0s 0s 434688110e-09 1s 1s 434694750e-09 0s 0s 434696550e-09 0s 0s 434698350e-09 1s 1s 434704990e-09 0s 0s 434706830e-09 0s 0s 434708590e-09 1s 1s 434715230e-09 0s 0s 434717110e-09 0s 0s 434718830e-09 1s 1s 434725470e-09 0s 0s 434727390e-09 0s 0s 434729070e-09 1s 1s 434735710e-09 0s 0s 434737670e-09 0s 0s 434739310e-09 1s 1s 434745950e-09 0s 0s 434747950e-09 0s 0s 434749550e-09 1s 1s 434756190e-09 0s 0s 434758230e-09 0s 0s 434759790e-09 1s 1s 434766430e-09 0s 0s 434768510e-09 0s 0s 434770030e-09 1s 1s 434776670e-09 0s 0s 434778790e-09 0s 0s 434780270e-09 1s 1s 434786910e-09 0s 0s 434789070e-09 0s 0s 434790510e-09 1s 1s 434797150e-09 0s 0s 434799350e-09 0s 0s 434800750e-09 1s 1s 434807390e-09 0s 0s 434809630e-09 0s 0s 434810990e-09 1s 1s 434817630e-09 0s 0s 434819910e-09 0s 0s 434821230e-09 1s 1s 434827870e-09 0s 0s 434830190e-09 0s 0s 434831470e-09 1s 1s 434838110e-09 0s 0s 434840470e-09 0s 0s 434841710e-09 1s 1s 434848350e-09 0s 0s 434850750e-09 0s 0s 434851950e-09 1s 1s 434858590e-09 0s 0s 434861030e-09 0s 0s 434862190e-09 1s 1s 434868830e-09 0s 0s 434871310e-09 0s 0s 434872430e-09 1s 1s 434879070e-09 0s 0s 434881590e-09 0s 0s 434882670e-09 1s 1s 434889310e-09 0s 0s 434891870e-09 0s 0s 434892910e-09 1s 1s 434899550e-09 0s 0s 434902150e-09 0s 0s 434903150e-09 1s 1s 434909790e-09 0s 0s 434912430e-09 0s 0s 434913390e-09 1s 1s 434920030e-09 0s 0s 434922710e-09 0s 0s 434923630e-09 1s 1s 434930270e-09 0s 0s 434932990e-09 0s 0s 434933870e-09 1s 1s 434940510e-09 0s 0s 434943270e-09 0s 0s 434944110e-09 1s 1s 434950750e-09 0s 0s 434953550e-09 0s 0s 434954350e-09 1s 1s 434960990e-09 0s 0s 434963830e-09 0s 0s 434964590e-09 1s 1s 434971230e-09 0s 0s 434974110e-09 0s 0s 434974830e-09 1s 1s 434981470e-09 0s 0s 434984390e-09 0s 0s 434985070e-09 1s 1s 434991710e-09 0s 0s 434994670e-09 0s 0s 434995310e-09 1s 1s 435001950e-09 0s 0s 435004950e-09 0s 0s 435005550e-09 1s 1s 435012190e-09 0s 0s 435015230e-09 0s 0s 435015790e-09 1s 1s 435022430e-09 0s 0s 435025510e-09 0s 0s 435026030e-09 1s 1s 435032670e-09 0s 0s 435035790e-09 0s 0s 435036270e-09 1s 1s 435042910e-09 0s 0s 435046070e-09 0s 0s 435046510e-09 1s 1s 435053150e-09 0s 0s 435056350e-09 0s 0s 435056750e-09 1s 1s 435063390e-09 0s 0s 435066630e-09 0s 0s 435066990e-09 1s 1s 435073630e-09 0s 0s 435076910e-09 0s 0s 435077230e-09 1s 1s 435083870e-09 0s 0s 435087190e-09 0s 0s 435087470e-09 1s 1s 435094110e-09 0s 0s 435097470e-09 0s 0s 435097710e-09 1s 1s 435104350e-09 0s 0s 435107750e-09 0s 0s 435107950e-09 1s 1s 435114590e-09 0s 0s 435118030e-09 0s 0s 435118190e-09 1s 1s 435124830e-09 0s 0s 435128310e-09 0s 0s 435128430e-09 1s 1s 435135070e-09 0s 0s 435138590e-09 0s 0s 435138670e-09 1s 1s 435145310e-09 0s 0s 435148870e-09 0s 0s 435148910e-09 1s 1s 435155550e-09 0s 0s 435159150e-09 1s 1s 435159190e-09 1s 1s 435165830e-09 0s 0s 435169390e-09 1s 1s 435169470e-09 1s 1s 435176070e-09 0s 0s 435179630e-09 1s 1s 435179750e-09 1s 1s 435186310e-09 0s 0s 435189870e-09 1s 1s 435190030e-09 1s 1s 435196550e-09 0s 0s 435200110e-09 1s 1s 435200310e-09 1s 1s 435206790e-09 0s 0s 435210350e-09 1s 1s 435210590e-09 1s 1s 435217030e-09 0s 0s 435220590e-09 1s 1s 435220870e-09 1s 1s 435227270e-09 0s 0s 435230830e-09 1s 1s 435231150e-09 1s 1s 435237510e-09 0s 0s 435241070e-09 1s 1s 435241430e-09 1s 1s 435247750e-09 0s 0s 435251310e-09 1s 1s 435251710e-09 1s 1s 435257990e-09 0s 0s 435261550e-09 1s 1s 435261990e-09 1s 1s 435268230e-09 0s 0s 435271790e-09 1s 1s 435272270e-09 1s 1s 435278470e-09 0s 0s 435282030e-09 1s 1s 435282550e-09 1s 1s 435288710e-09 0s 0s 435292270e-09 1s 1s 435292830e-09 1s 1s 435298950e-09 0s 0s 435302510e-09 1s 1s 435303110e-09 1s 1s 435309190e-09 0s 0s 435312750e-09 1s 1s 435313390e-09 1s 1s 435319430e-09 0s 0s 435322990e-09 1s 1s 435323670e-09 1s 1s 435329670e-09 0s 0s 435333230e-09 1s 1s 435333950e-09 1s 1s 435339910e-09 0s 0s 435343470e-09 1s 1s 435344230e-09 1s 1s 435350150e-09 0s 0s 435353710e-09 1s 1s 435354510e-09 1s 1s 435360390e-09 0s 0s 435363950e-09 1s 1s 435364790e-09 1s 1s 435370630e-09 0s 0s 435374190e-09 1s 1s 435375070e-09 1s 1s 435380870e-09 0s 0s 435384430e-09 1s 1s 435385350e-09 1s 1s 435391110e-09 0s 0s 435394670e-09 1s 1s 435395630e-09 1s 1s 435401350e-09 0s 0s 435404910e-09 1s 1s 435405910e-09 1s 1s 435411590e-09 0s 0s 435415150e-09 1s 1s 435416190e-09 1s 1s 435421830e-09 0s 0s 435425390e-09 1s 1s 435426470e-09 1s 1s 435432070e-09 0s 0s 435435630e-09 1s 1s 435436750e-09 1s 1s 435442310e-09 0s 0s 435445870e-09 1s 1s 435447030e-09 1s 1s 435452550e-09 0s 0s 435456110e-09 1s 1s 435457310e-09 1s 1s 435462790e-09 0s 0s 435466350e-09 1s 1s 435467590e-09 1s 1s 435473030e-09 0s 0s 435476590e-09 1s 1s 435477870e-09 1s 1s 435483270e-09 0s 0s 435486830e-09 1s 1s 435488150e-09 1s 1s 435493510e-09 0s 0s 435497070e-09 1s 1s 435498430e-09 1s 1s 435503750e-09 0s 0s 435507310e-09 1s 1s 435508710e-09 1s 1s 435513990e-09 0s 0s 435517550e-09 1s 1s 435518990e-09 1s 1s 435524230e-09 0s 0s 435527790e-09 1s 1s 435529270e-09 1s 1s 435534470e-09 0s 0s 435538030e-09 1s 1s 435539550e-09 1s 1s 435544710e-09 0s 0s 435548270e-09 1s 1s 435549830e-09 1s 1s 435554950e-09 0s 0s 435558510e-09 1s 1s 435560110e-09 1s 1s 435565190e-09 0s 0s 435568750e-09 1s 1s 435570390e-09 1s 1s 435575430e-09 0s 0s 435578990e-09 1s 1s 435580670e-09 1s 1s 435585670e-09 0s 0s 435589230e-09 1s 1s 435590950e-09 1s 1s 435595910e-09 0s 0s 435599470e-09 1s 1s 435601230e-09 1s 1s 435606150e-09 0s 0s 435609710e-09 1s 1s 435611510e-09 1s 1s 435616390e-09 0s 0s 435619950e-09 1s 1s 435621790e-09 1s 1s 435626630e-09 0s 0s 435630190e-09 1s 1s 435632070e-09 1s 1s 435636870e-09 0s 0s 435640430e-09 1s 1s 435642350e-09 1s 1s 435647110e-09 0s 0s 435650670e-09 1s 1s 435652630e-09 1s 1s 435657350e-09 0s 0s 435660910e-09 1s 1s 435662910e-09 1s 1s 435667590e-09 0s 0s 435671150e-09 1s 1s 435673190e-09 1s 1s 435677830e-09 0s 0s 435681390e-09 1s 1s 435683470e-09 1s 1s 435688070e-09 0s 0s 435691630e-09 1s 1s 435693750e-09 1s 1s 435698310e-09 0s 0s 435701870e-09 1s 1s 435704030e-09 1s 1s 435708550e-09 0s 0s 435712110e-09 1s 1s 435714310e-09 1s 1s 435718790e-09 0s 0s 435722350e-09 1s 1s 435724590e-09 1s 1s 435729030e-09 0s 0s 435732590e-09 1s 1s 435734870e-09 1s 1s 435739270e-09 0s 0s 435742830e-09 1s 1s 435745150e-09 1s 1s 435749510e-09 0s 0s 435753070e-09 1s 1s 435755430e-09 1s 1s 435759750e-09 0s 0s 435763310e-09 1s 1s 435765710e-09 1s 1s 435769990e-09 0s 0s 435773550e-09 1s 1s 435775990e-09 1s 1s 435780230e-09 0s 0s 435783790e-09 1s 1s 435786270e-09 1s 1s 435790470e-09 0s 0s 435794030e-09 1s 1s 435796550e-09 1s 1s 435800710e-09 0s 0s 435804270e-09 1s 1s 435806830e-09 1s 1s 435810950e-09 0s 0s 435814510e-09 1s 1s 435817110e-09 1s 1s 435821190e-09 0s 0s 435824750e-09 1s 1s 435827390e-09 1s 1s 435831430e-09 0s 0s 435834990e-09 1s 1s 435837670e-09 1s 1s 435841670e-09 0s 0s 435845230e-09 1s 1s 435847950e-09 1s 1s 435851910e-09 0s 0s 435855470e-09 1s 1s 435858230e-09 1s 1s 435862150e-09 0s 0s 435865710e-09 1s 1s 435868510e-09 1s 1s 435872390e-09 0s 0s 435875950e-09 1s 1s 435878790e-09 1s 1s 435882630e-09 0s 0s 435886190e-09 1s 1s 435889070e-09 1s 1s 435892870e-09 0s 0s 435896430e-09 1s 1s 435899350e-09 1s 1s 435903110e-09 0s 0s 435906670e-09 1s 1s 435909630e-09 1s 1s 435913350e-09 0s 0s 435916910e-09 1s 1s 435919910e-09 1s 1s 435923590e-09 0s 0s 435927150e-09 1s 1s 435930190e-09 1s 1s 435933830e-09 0s 0s 435937390e-09 1s 1s 435940470e-09 1s 1s 435944070e-09 0s 0s 435947630e-09 1s 1s 435950750e-09 1s 1s 435954310e-09 0s 0s 435957870e-09 1s 1s 435961030e-09 1s 1s 435964550e-09 0s 0s 435968110e-09 1s 1s 435971310e-09 1s 1s 435974790e-09 0s 0s 435978350e-09 1s 1s 435981590e-09 1s 1s 435985030e-09 0s 0s 435988590e-09 1s 1s 435991870e-09 1s 1s 435995270e-09 0s 0s 435998830e-09 1s 1s 436002150e-09 1s 1s 436005510e-09 0s 0s 436009070e-09 1s 1s 436012430e-09 1s 1s 436015750e-09 0s 0s 436019310e-09 1s 1s 436022710e-09 1s 1s 436025990e-09 0s 0s 436029550e-09 1s 1s 436032990e-09 1s 1s 436036230e-09 0s 0s 436039790e-09 1s 1s 436043270e-09 1s 1s 436046470e-09 0s 0s 436050030e-09 1s 1s 436053550e-09 1s 1s 436056710e-09 0s 0s 436060270e-09 1s 1s 436063830e-09 1s 1s 436066950e-09 0s 0s 436070510e-09 1s 1s 436074110e-09 1s 1s 436077190e-09 0s 0s 436080750e-09 1s 1s 436084390e-09 1s 1s 436087430e-09 0s 0s 436090990e-09 1s 1s 436094670e-09 1s 1s 436097670e-09 0s 0s 436101230e-09 1s 1s 436104950e-09 1s 1s 436107910e-09 0s 0s 436111470e-09 1s 1s 436115230e-09 1s 1s 436118150e-09 0s 0s 436121710e-09 1s 1s 436125510e-09 1s 1s 436128390e-09 0s 0s 436131950e-09 1s 1s 436135790e-09 1s 1s 436138630e-09 0s 0s 436142190e-09 1s 1s 436146070e-09 1s 1s 436148870e-09 0s 0s 436152430e-09 1s 1s 436156350e-09 1s 1s 436159110e-09 0s 0s 436162670e-09 1s 1s 436166630e-09 1s 1s 436169350e-09 0s 0s 436172910e-09 1s 1s 436176910e-09 1s 1s 436179590e-09 0s 0s 436183150e-09 1s 1s 436187190e-09 1s 1s 436189830e-09 0s 0s 436193390e-09 1s 1s 436197470e-09 1s 1s 436200070e-09 0s 0s 436203630e-09 1s 1s 436207750e-09 1s 1s 436210310e-09 0s 0s 436213870e-09 1s 1s 436218030e-09 1s 1s 436220550e-09 0s 0s 436224110e-09 1s 1s 436228310e-09 1s 1s 436230790e-09 0s 0s 436234350e-09 1s 1s 436238590e-09 1s 1s 436241030e-09 0s 0s 436244590e-09 1s 1s 436248870e-09 1s 1s 436251270e-09 0s 0s 436254830e-09 1s 1s 436259150e-09 1s 1s 436261510e-09 0s 0s 436265070e-09 1s 1s 436269430e-09 1s 1s 436271750e-09 0s 0s 436275310e-09 1s 1s 436279710e-09 1s 1s 436281990e-09 0s 0s 436285550e-09 1s 1s 436289990e-09 1s 1s 436292230e-09 0s 0s 436295790e-09 1s 1s 436300270e-09 1s 1s 436302470e-09 0s 0s 436306030e-09 1s 1s 436310550e-09 1s 1s 436312710e-09 0s 0s 436316270e-09 1s 1s 436320830e-09 1s 1s 436322950e-09 0s 0s 436326510e-09 1s 1s 436331110e-09 1s 1s 436333190e-09 0s 0s 436336750e-09 1s 1s 436341390e-09 1s 1s 436343430e-09 0s 0s 436346990e-09 1s 1s 436351670e-09 1s 1s 436353670e-09 0s 0s 436357230e-09 1s 1s 436361950e-09 1s 1s 436363910e-09 0s 0s 436367470e-09 1s 1s 436372230e-09 1s 1s 436374150e-09 0s 0s 436377710e-09 1s 1s 436382510e-09 1s 1s 436384390e-09 0s 0s 436387950e-09 1s 1s 436392790e-09 1s 1s 436394630e-09 0s 0s 436398190e-09 1s 1s 436403070e-09 1s 1s 436404870e-09 0s 0s 436408430e-09 1s 1s 436413350e-09 1s 1s 436415110e-09 0s 0s 436418670e-09 1s 1s 436423630e-09 1s 1s 436425350e-09 0s 0s 436428910e-09 1s 1s 436433910e-09 1s 1s 436435590e-09 0s 0s 436439150e-09 1s 1s 436444190e-09 1s 1s 436445830e-09 0s 0s 436449390e-09 1s 1s 436454470e-09 1s 1s 436456070e-09 0s 0s 436459630e-09 1s 1s 436464750e-09 1s 1s 436466310e-09 0s 0s 436469870e-09 1s 1s 436475030e-09 1s 1s 436476550e-09 0s 0s 436480110e-09 1s 1s 436485310e-09 1s 1s 436486790e-09 0s 0s 436490350e-09 1s 1s 436495590e-09 1s 1s 436497030e-09 0s 0s 436500590e-09 1s 1s 436505870e-09 1s 1s 436507270e-09 0s 0s 436510830e-09 1s 1s 436516150e-09 1s 1s 436517510e-09 0s 0s 436521070e-09 1s 1s 436526430e-09 1s 1s 436527750e-09 0s 0s 436531310e-09 1s 1s 436536710e-09 1s 1s 436537990e-09 0s 0s 436541550e-09 1s 1s 436546990e-09 1s 1s 436548230e-09 0s 0s 436551790e-09 1s 1s 436557270e-09 1s 1s 436558470e-09 0s 0s 436562030e-09 1s 1s 436567550e-09 1s 1s 436568710e-09 0s 0s 436572270e-09 1s 1s 436577830e-09 1s 1s 436578950e-09 0s 0s 436582510e-09 1s 1s 436588110e-09 1s 1s 436589190e-09 0s 0s 436592750e-09 1s 1s 436598390e-09 1s 1s 436599430e-09 0s 0s 436602990e-09 1s 1s 436608670e-09 1s 1s 436609670e-09 0s 0s 436613230e-09 1s 1s 436618950e-09 1s 1s 436619910e-09 0s 0s 436623470e-09 1s 1s 436629230e-09 1s 1s 436630150e-09 0s 0s 436633710e-09 1s 1s 436639510e-09 1s 1s 436640390e-09 0s 0s 436643950e-09 1s 1s 436649790e-09 1s 1s 436650630e-09 0s 0s 436654190e-09 1s 1s 436660070e-09 1s 1s 436660870e-09 0s 0s 436664430e-09 1s 1s 436670350e-09 1s 1s 436671110e-09 0s 0s 436674670e-09 1s 1s 436680630e-09 1s 1s 436681350e-09 0s 0s 436684910e-09 1s 1s 436690910e-09 1s 1s 436691590e-09 0s 0s 436695150e-09 1s 1s 436701190e-09 1s 1s 436701830e-09 0s 0s 436705390e-09 1s 1s 436711470e-09 1s 1s 436712070e-09 0s 0s 436715630e-09 1s 1s 436721750e-09 1s 1s 436722310e-09 0s 0s 436725870e-09 1s 1s 436732030e-09 1s 1s 436732550e-09 0s 0s 436736110e-09 1s 1s 436742310e-09 1s 1s 436742790e-09 0s 0s 436746350e-09 1s 1s 436752590e-09 1s 1s 436753030e-09 0s 0s 436756590e-09 1s 1s 436762870e-09 1s 1s 436763270e-09 0s 0s 436766830e-09 1s 1s 436773150e-09 1s 1s 436773510e-09 0s 0s 436777070e-09 1s 1s 436783430e-09 1s 1s 436783750e-09 0s 0s 436787310e-09 1s 1s 436793710e-09 1s 1s 436793990e-09 0s 0s 436797550e-09 1s 1s 436803990e-09 1s 1s 436804230e-09 0s 0s 436807790e-09 1s 1s 436814270e-09 1s 1s 436814470e-09 0s 0s 436818030e-09 1s 1s 436824550e-09 1s 1s 436824710e-09 0s 0s 436828270e-09 1s 1s 436834830e-09 1s 1s 436834950e-09 0s 0s 436838510e-09 1s 1s 436845110e-09 1s 1s 436845190e-09 0s 0s 436848750e-09 1s 1s 436855390e-09 1s 1s 436855430e-09 0s 0s 436858990e-09 1s 1s 436865670e-09 0s 0s 436869230e-09 1s 1s 436875910e-09 0s 0s 436875950e-09 0s 0s 436879470e-09 1s 1s 436886150e-09 0s 0s 436886230e-09 0s 0s 436889710e-09 1s 1s 436896390e-09 0s 0s 436896510e-09 0s 0s 436899950e-09 1s 1s 436906630e-09 0s 0s 436906790e-09 0s 0s 436910190e-09 1s 1s 436916870e-09 0s 0s 436917070e-09 0s 0s 436920430e-09 1s 1s 436927110e-09 0s 0s 436927350e-09 0s 0s 436930670e-09 1s 1s 436937350e-09 0s 0s 436937630e-09 0s 0s 436940910e-09 1s 1s 436947590e-09 0s 0s 436947910e-09 0s 0s 436951150e-09 1s 1s 436957830e-09 0s 0s 436958190e-09 0s 0s 436961390e-09 1s 1s 436968070e-09 0s 0s 436968470e-09 0s 0s 436971630e-09 1s 1s 436978310e-09 0s 0s 436978750e-09 0s 0s 436981870e-09 1s 1s 436988550e-09 0s 0s 436989030e-09 0s 0s 436992110e-09 1s 1s 436998790e-09 0s 0s 436999310e-09 0s 0s 437002350e-09 1s 1s 437009030e-09 0s 0s 437009590e-09 0s 0s 437012590e-09 1s 1s 437019270e-09 0s 0s 437019870e-09 0s 0s 437022830e-09 1s 1s 437029510e-09 0s 0s 437030150e-09 0s 0s 437033070e-09 1s 1s 437039750e-09 0s 0s 437040430e-09 0s 0s 437043310e-09 1s 1s 437049990e-09 0s 0s 437050710e-09 0s 0s 437053550e-09 1s 1s 437060230e-09 0s 0s 437060990e-09 0s 0s 437063790e-09 1s 1s 437070470e-09 0s 0s 437071270e-09 0s 0s 437074030e-09 1s 1s 437080710e-09 0s 0s 437081550e-09 0s 0s 437084270e-09 1s 1s 437090950e-09 0s 0s 437091830e-09 0s 0s 437094510e-09 1s 1s 437101190e-09 0s 0s 437102110e-09 0s 0s 437104750e-09 1s 1s 437111430e-09 0s 0s 437112390e-09 0s 0s 437114990e-09 1s 1s 437121670e-09 0s 0s 437122670e-09 0s 0s 437125230e-09 1s 1s 437131910e-09 0s 0s 437132950e-09 0s 0s 437135470e-09 1s 1s 437142150e-09 0s 0s 437143230e-09 0s 0s 437145710e-09 1s 1s 437152390e-09 0s 0s 437153510e-09 0s 0s 437155950e-09 1s 1s 437162630e-09 0s 0s 437163790e-09 0s 0s 437166190e-09 1s 1s 437172870e-09 0s 0s 437174070e-09 0s 0s 437176430e-09 1s 1s 437183110e-09 0s 0s 437184350e-09 0s 0s 437186670e-09 1s 1s 437193350e-09 0s 0s 437194630e-09 0s 0s 437196910e-09 1s 1s 437203590e-09 0s 0s 437204910e-09 0s 0s 437207150e-09 1s 1s 437213830e-09 0s 0s 437215190e-09 0s 0s 437217390e-09 1s 1s 437224070e-09 0s 0s 437225470e-09 0s 0s 437227630e-09 1s 1s 437234310e-09 0s 0s 437235750e-09 0s 0s 437237870e-09 1s 1s 437244550e-09 0s 0s 437246030e-09 0s 0s 437248110e-09 1s 1s 437254790e-09 0s 0s 437256310e-09 0s 0s 437258350e-09 1s 1s 437265030e-09 0s 0s 437266590e-09 0s 0s 437268590e-09 1s 1s 437275270e-09 0s 0s 437276870e-09 0s 0s 437278830e-09 1s 1s 437285510e-09 0s 0s 437287150e-09 0s 0s 437289070e-09 1s 1s 437295750e-09 0s 0s 437297430e-09 0s 0s 437299310e-09 1s 1s 437305990e-09 0s 0s 437307710e-09 0s 0s 437309550e-09 1s 1s 437316230e-09 0s 0s 437317990e-09 0s 0s 437319790e-09 1s 1s 437326470e-09 0s 0s 437328270e-09 0s 0s 437330030e-09 1s 1s 437336710e-09 0s 0s 437338550e-09 0s 0s 437340270e-09 1s 1s 437346950e-09 0s 0s 437348830e-09 0s 0s 437350510e-09 1s 1s 437357190e-09 0s 0s 437359110e-09 0s 0s 437360750e-09 1s 1s 437367430e-09 0s 0s 437369390e-09 0s 0s 437370990e-09 1s 1s 437377670e-09 0s 0s 437379670e-09 0s 0s 437381230e-09 1s 1s 437387910e-09 0s 0s 437389950e-09 0s 0s 437391470e-09 1s 1s 437398150e-09 0s 0s 437400230e-09 0s 0s 437401710e-09 1s 1s 437408390e-09 0s 0s 437410510e-09 0s 0s 437411950e-09 1s 1s 437418630e-09 0s 0s 437420790e-09 0s 0s 437422190e-09 1s 1s 437428870e-09 0s 0s 437431070e-09 0s 0s 437432430e-09 1s 1s 437439110e-09 0s 0s 437441350e-09 0s 0s 437442670e-09 1s 1s 437449350e-09 0s 0s 437451630e-09 0s 0s 437452910e-09 1s 1s 437459590e-09 0s 0s 437461910e-09 0s 0s 437463150e-09 1s 1s 437469830e-09 0s 0s 437472190e-09 0s 0s 437473390e-09 1s 1s 437480070e-09 0s 0s 437482470e-09 0s 0s 437483630e-09 1s 1s 437490310e-09 0s 0s 437492750e-09 0s 0s 437493870e-09 1s 1s 437500550e-09 0s 0s 437503030e-09 0s 0s 437504110e-09 1s 1s 437510790e-09 0s 0s 437513310e-09 0s 0s 437514350e-09 1s 1s 437521030e-09 0s 0s 437523590e-09 0s 0s 437524590e-09 1s 1s 437531270e-09 0s 0s 437533870e-09 0s 0s 437534830e-09 1s 1s 437541510e-09 0s 0s 437544150e-09 0s 0s 437545070e-09 1s 1s 437551750e-09 0s 0s 437554430e-09 0s 0s 437555310e-09 1s 1s 437561990e-09 0s 0s 437564710e-09 0s 0s 437565550e-09 1s 1s 437572230e-09 0s 0s 437574990e-09 0s 0s 437575790e-09 1s 1s 437582470e-09 0s 0s 437585270e-09 0s 0s 437586030e-09 1s 1s 437592710e-09 0s 0s 437595550e-09 0s 0s 437596270e-09 1s 1s 437602950e-09 0s 0s 437605830e-09 0s 0s 437606510e-09 1s 1s 437613190e-09 0s 0s 437616110e-09 0s 0s 437616750e-09 1s 1s 437623430e-09 0s 0s 437626390e-09 0s 0s 437626990e-09 1s 1s 437633670e-09 0s 0s 437636670e-09 0s 0s 437637230e-09 1s 1s 437643910e-09 0s 0s 437646950e-09 0s 0s 437647470e-09 1s 1s 437654150e-09 0s 0s 437657230e-09 0s 0s 437657710e-09 1s 1s 437664390e-09 0s 0s 437667510e-09 0s 0s 437667950e-09 1s 1s 437674630e-09 0s 0s 437677790e-09 0s 0s 437678190e-09 1s 1s 437684870e-09 0s 0s 437688070e-09 0s 0s 437688430e-09 1s 1s 437695110e-09 0s 0s 437698350e-09 0s 0s 437698670e-09 1s 1s 437705350e-09 0s 0s 437708630e-09 0s 0s 437708910e-09 1s 1s 437715590e-09 0s 0s 437718910e-09 0s 0s 437719150e-09 1s 1s 437725830e-09 0s 0s 437729190e-09 0s 0s 437729390e-09 1s 1s 437736070e-09 0s 0s 437739470e-09 0s 0s 437739630e-09 1s 1s 437746310e-09 0s 0s 437749750e-09 0s 0s 437749870e-09 1s 1s 437756550e-09 0s 0s 437760030e-09 0s 0s 437760110e-09 1s 1s 437766790e-09 0s 0s 437770310e-09 0s 0s 437770350e-09 1s 1s 437777030e-09 0s 0s 437780590e-09 1s 1s 437780630e-09 1s 1s 437787310e-09 0s 0s 437790830e-09 1s 1s 437790910e-09 1s 1s 437797550e-09 0s 0s 437801070e-09 1s 1s 437801190e-09 1s 1s 437807790e-09 0s 0s 437811310e-09 1s 1s 437811470e-09 1s 1s 437818030e-09 0s 0s 437821550e-09 1s 1s 437821750e-09 1s 1s 437828270e-09 0s 0s 437831790e-09 1s 1s 437832030e-09 1s 1s 437838510e-09 0s 0s 437842030e-09 1s 1s 437842310e-09 1s 1s 437848750e-09 0s 0s 437852270e-09 1s 1s 437852590e-09 1s 1s 437858990e-09 0s 0s 437862510e-09 1s 1s 437862870e-09 1s 1s 437869230e-09 0s 0s 437872750e-09 1s 1s 437873150e-09 1s 1s 437879470e-09 0s 0s 437882990e-09 1s 1s 437883430e-09 1s 1s 437889710e-09 0s 0s 437893230e-09 1s 1s 437893710e-09 1s 1s 437899950e-09 0s 0s 437903470e-09 1s 1s 437903990e-09 1s 1s 437910190e-09 0s 0s 437913710e-09 1s 1s 437914270e-09 1s 1s 437920430e-09 0s 0s 437923950e-09 1s 1s 437924550e-09 1s 1s 437930670e-09 0s 0s 437934190e-09 1s 1s 437934830e-09 1s 1s 437940910e-09 0s 0s 437944430e-09 1s 1s 437945110e-09 1s 1s 437951150e-09 0s 0s 437954670e-09 1s 1s 437955390e-09 1s 1s 437961390e-09 0s 0s 437964910e-09 1s 1s 437965670e-09 1s 1s 437971630e-09 0s 0s 437975150e-09 1s 1s 437975950e-09 1s 1s 437981870e-09 0s 0s 437985390e-09 1s 1s 437986230e-09 1s 1s 437992110e-09 0s 0s 437995630e-09 1s 1s 437996510e-09 1s 1s 438002350e-09 0s 0s 438005870e-09 1s 1s 438006790e-09 1s 1s 438012590e-09 0s 0s 438016110e-09 1s 1s 438017070e-09 1s 1s 438022830e-09 0s 0s 438026350e-09 1s 1s 438027350e-09 1s 1s 438033070e-09 0s 0s 438036590e-09 1s 1s 438037630e-09 1s 1s 438043310e-09 0s 0s 438046830e-09 1s 1s 438047910e-09 1s 1s 438053550e-09 0s 0s 438057070e-09 1s 1s 438058190e-09 1s 1s 438063790e-09 0s 0s 438067310e-09 1s 1s 438068470e-09 1s 1s 438074030e-09 0s 0s 438077550e-09 1s 1s 438078750e-09 1s 1s 438084270e-09 0s 0s 438087790e-09 1s 1s 438089030e-09 1s 1s 438094510e-09 0s 0s 438098030e-09 1s 1s 438099310e-09 1s 1s 438104750e-09 0s 0s 438108270e-09 1s 1s 438109590e-09 1s 1s 438114990e-09 0s 0s 438118510e-09 1s 1s 438119870e-09 1s 1s 438125230e-09 0s 0s 438128750e-09 1s 1s 438130150e-09 1s 1s 438135470e-09 0s 0s 438138990e-09 1s 1s 438140430e-09 1s 1s 438145710e-09 0s 0s 438149230e-09 1s 1s 438150710e-09 1s 1s 438155950e-09 0s 0s 438159470e-09 1s 1s 438160990e-09 1s 1s 438166190e-09 0s 0s 438169710e-09 1s 1s 438171270e-09 1s 1s 438176430e-09 0s 0s 438179950e-09 1s 1s 438181550e-09 1s 1s 438186670e-09 0s 0s 438190190e-09 1s 1s 438191830e-09 1s 1s 438196910e-09 0s 0s 438200430e-09 1s 1s 438202110e-09 1s 1s 438207150e-09 0s 0s 438210670e-09 1s 1s 438212390e-09 1s 1s 438217390e-09 0s 0s 438220910e-09 1s 1s 438222670e-09 1s 1s 438227630e-09 0s 0s 438231150e-09 1s 1s 438232950e-09 1s 1s 438237870e-09 0s 0s 438241390e-09 1s 1s 438243230e-09 1s 1s 438248110e-09 0s 0s 438251630e-09 1s 1s 438253510e-09 1s 1s 438258350e-09 0s 0s 438261870e-09 1s 1s 438263790e-09 1s 1s 438268590e-09 0s 0s 438272110e-09 1s 1s 438274070e-09 1s 1s 438278830e-09 0s 0s 438282350e-09 1s 1s 438284350e-09 1s 1s 438289070e-09 0s 0s 438292590e-09 1s 1s 438294630e-09 1s 1s 438299310e-09 0s 0s 438302830e-09 1s 1s 438304910e-09 1s 1s 438309550e-09 0s 0s 438313070e-09 1s 1s 438315190e-09 1s 1s 438319790e-09 0s 0s 438323310e-09 1s 1s 438325470e-09 1s 1s 438330030e-09 0s 0s 438333550e-09 1s 1s 438335750e-09 1s 1s 438340270e-09 0s 0s 438343790e-09 1s 1s 438346030e-09 1s 1s 438350510e-09 0s 0s 438354030e-09 1s 1s 438356310e-09 1s 1s 438360750e-09 0s 0s 438364270e-09 1s 1s 438366590e-09 1s 1s 438370990e-09 0s 0s 438374510e-09 1s 1s 438376870e-09 1s 1s 438381230e-09 0s 0s 438384750e-09 1s 1s 438387150e-09 1s 1s 438391470e-09 0s 0s 438394990e-09 1s 1s 438397430e-09 1s 1s 438401710e-09 0s 0s 438405230e-09 1s 1s 438407710e-09 1s 1s 438411950e-09 0s 0s 438415470e-09 1s 1s 438417990e-09 1s 1s 438422190e-09 0s 0s 438425710e-09 1s 1s 438428270e-09 1s 1s 438432430e-09 0s 0s 438435950e-09 1s 1s 438438550e-09 1s 1s 438442670e-09 0s 0s 438446190e-09 1s 1s 438448830e-09 1s 1s 438452910e-09 0s 0s 438456430e-09 1s 1s 438459110e-09 1s 1s 438463150e-09 0s 0s 438466670e-09 1s 1s 438469390e-09 1s 1s 438473390e-09 0s 0s 438476910e-09 1s 1s 438479670e-09 1s 1s 438483630e-09 0s 0s 438487150e-09 1s 1s 438489950e-09 1s 1s 438493870e-09 0s 0s 438497390e-09 1s 1s 438500230e-09 1s 1s 438504110e-09 0s 0s 438507630e-09 1s 1s 438510510e-09 1s 1s 438514350e-09 0s 0s 438517870e-09 1s 1s 438520790e-09 1s 1s 438524590e-09 0s 0s 438528110e-09 1s 1s 438531070e-09 1s 1s 438534830e-09 0s 0s 438538350e-09 1s 1s 438541350e-09 1s 1s 438545070e-09 0s 0s 438548590e-09 1s 1s 438551630e-09 1s 1s 438555310e-09 0s 0s 438558830e-09 1s 1s 438561910e-09 1s 1s 438565550e-09 0s 0s 438569070e-09 1s 1s 438572190e-09 1s 1s 438575790e-09 0s 0s 438579310e-09 1s 1s 438582470e-09 1s 1s 438586030e-09 0s 0s 438589550e-09 1s 1s 438592750e-09 1s 1s 438596270e-09 0s 0s 438599790e-09 1s 1s 438603030e-09 1s 1s 438606510e-09 0s 0s 438610030e-09 1s 1s 438613310e-09 1s 1s 438616750e-09 0s 0s 438620270e-09 1s 1s 438623590e-09 1s 1s 438626990e-09 0s 0s 438630510e-09 1s 1s 438633870e-09 1s 1s 438637230e-09 0s 0s 438640750e-09 1s 1s 438644150e-09 1s 1s 438647470e-09 0s 0s 438650990e-09 1s 1s 438654430e-09 1s 1s 438657710e-09 0s 0s 438661230e-09 1s 1s 438664710e-09 1s 1s 438667950e-09 0s 0s 438671470e-09 1s 1s 438674990e-09 1s 1s 438678190e-09 0s 0s 438681710e-09 1s 1s 438685270e-09 1s 1s 438688430e-09 0s 0s 438691950e-09 1s 1s 438695550e-09 1s 1s 438698670e-09 0s 0s 438702190e-09 1s 1s 438705830e-09 1s 1s 438708910e-09 0s 0s 438712430e-09 1s 1s 438716110e-09 1s 1s 438719150e-09 0s 0s 438722670e-09 1s 1s 438726390e-09 1s 1s 438729390e-09 0s 0s 438732910e-09 1s 1s 438736670e-09 1s 1s 438739630e-09 0s 0s 438743150e-09 1s 1s 438746950e-09 1s 1s 438749870e-09 0s 0s 438753390e-09 1s 1s 438757230e-09 1s 1s 438760110e-09 0s 0s 438763630e-09 1s 1s 438767510e-09 1s 1s 438770350e-09 0s 0s 438773870e-09 1s 1s 438777790e-09 1s 1s 438780590e-09 0s 0s 438784110e-09 1s 1s 438788070e-09 1s 1s 438790830e-09 0s 0s 438794350e-09 1s 1s 438798350e-09 1s 1s 438801070e-09 0s 0s 438804590e-09 1s 1s 438808630e-09 1s 1s 438811310e-09 0s 0s 438814830e-09 1s 1s 438818910e-09 1s 1s 438821550e-09 0s 0s 438825070e-09 1s 1s 438829190e-09 1s 1s 438831790e-09 0s 0s 438835310e-09 1s 1s 438839470e-09 1s 1s 438842030e-09 0s 0s 438845550e-09 1s 1s 438849750e-09 1s 1s 438852270e-09 0s 0s 438855790e-09 1s 1s 438860030e-09 1s 1s 438862510e-09 0s 0s 438866030e-09 1s 1s 438870310e-09 1s 1s 438872750e-09 0s 0s 438876270e-09 1s 1s 438880590e-09 1s 1s 438882990e-09 0s 0s 438886510e-09 1s 1s 438890870e-09 1s 1s 438893230e-09 0s 0s 438896750e-09 1s 1s 438901150e-09 1s 1s 438903470e-09 0s 0s 438906990e-09 1s 1s 438911430e-09 1s 1s 438913710e-09 0s 0s 438917230e-09 1s 1s 438921710e-09 1s 1s 438923950e-09 0s 0s 438927470e-09 1s 1s 438931990e-09 1s 1s 438934190e-09 0s 0s 438937710e-09 1s 1s 438942270e-09 1s 1s 438944430e-09 0s 0s 438947950e-09 1s 1s 438952550e-09 1s 1s 438954670e-09 0s 0s 438958190e-09 1s 1s 438962830e-09 1s 1s 438964910e-09 0s 0s 438968430e-09 1s 1s 438973110e-09 1s 1s 438975150e-09 0s 0s 438978670e-09 1s 1s 438983390e-09 1s 1s 438985390e-09 0s 0s 438988910e-09 1s 1s 438993670e-09 1s 1s 438995630e-09 0s 0s 438999150e-09 1s 1s 439003950e-09 1s 1s 439005870e-09 0s 0s 439009390e-09 1s 1s 439014230e-09 1s 1s 439016110e-09 0s 0s 439019630e-09 1s 1s 439024510e-09 1s 1s 439026350e-09 0s 0s 439029870e-09 1s 1s 439034790e-09 1s 1s 439036590e-09 0s 0s 439040110e-09 1s 1s 439045070e-09 1s 1s 439046830e-09 0s 0s 439050350e-09 1s 1s 439055350e-09 1s 1s 439057070e-09 0s 0s 439060590e-09 1s 1s 439065630e-09 1s 1s 439067310e-09 0s 0s 439070830e-09 1s 1s 439075910e-09 1s 1s 439077550e-09 0s 0s 439081070e-09 1s 1s 439086190e-09 1s 1s 439087790e-09 0s 0s 439091310e-09 1s 1s 439096470e-09 1s 1s 439098030e-09 0s 0s 439101550e-09 1s 1s 439106750e-09 1s 1s 439108270e-09 0s 0s 439111790e-09 1s 1s 439117030e-09 1s 1s 439118510e-09 0s 0s 439122030e-09 1s 1s 439127310e-09 1s 1s 439128750e-09 0s 0s 439132270e-09 1s 1s 439137590e-09 1s 1s 439138990e-09 0s 0s 439142510e-09 1s 1s 439147870e-09 1s 1s 439149230e-09 0s 0s 439152750e-09 1s 1s 439158150e-09 1s 1s 439159470e-09 0s 0s 439162990e-09 1s 1s 439168430e-09 1s 1s 439169710e-09 0s 0s 439173230e-09 1s 1s 439178710e-09 1s 1s 439179950e-09 0s 0s 439183470e-09 1s 1s 439188990e-09 1s 1s 439190190e-09 0s 0s 439193710e-09 1s 1s 439199270e-09 1s 1s 439200430e-09 0s 0s 439203950e-09 1s 1s 439209550e-09 1s 1s 439210670e-09 0s 0s 439214190e-09 1s 1s 439219830e-09 1s 1s 439220910e-09 0s 0s 439224430e-09 1s 1s 439230110e-09 1s 1s 439231150e-09 0s 0s 439234670e-09 1s 1s 439240390e-09 1s 1s 439241390e-09 0s 0s 439244910e-09 1s 1s 439250670e-09 1s 1s 439251630e-09 0s 0s 439255150e-09 1s 1s 439260950e-09 1s 1s 439261870e-09 0s 0s 439265390e-09 1s 1s 439271230e-09 1s 1s 439272110e-09 0s 0s 439275630e-09 1s 1s 439281510e-09 1s 1s 439282350e-09 0s 0s 439285870e-09 1s 1s 439291790e-09 1s 1s 439292590e-09 0s 0s 439296110e-09 1s 1s 439302070e-09 1s 1s 439302830e-09 0s 0s 439306350e-09 1s 1s 439312350e-09 1s 1s 439313070e-09 0s 0s 439316590e-09 1s 1s 439322630e-09 1s 1s 439323310e-09 0s 0s 439326830e-09 1s 1s 439332910e-09 1s 1s 439333550e-09 0s 0s 439337070e-09 1s 1s 439343190e-09 1s 1s 439343790e-09 0s 0s 439347310e-09 1s 1s 439353470e-09 1s 1s 439354030e-09 0s 0s 439357550e-09 1s 1s 439363750e-09 1s 1s 439364270e-09 0s 0s 439367790e-09 1s 1s 439374030e-09 1s 1s 439374510e-09 0s 0s 439378030e-09 1s 1s 439384310e-09 1s 1s 439384750e-09 0s 0s 439388270e-09 1s 1s 439394590e-09 1s 1s 439394990e-09 0s 0s 439398510e-09 1s 1s 439404870e-09 1s 1s 439405230e-09 0s 0s 439408750e-09 1s 1s 439415150e-09 1s 1s 439415470e-09 0s 0s 439418990e-09 1s 1s 439425430e-09 1s 1s 439425710e-09 0s 0s 439429230e-09 1s 1s 439435710e-09 1s 1s 439435950e-09 0s 0s 439439470e-09 1s 1s 439445990e-09 1s 1s 439446190e-09 0s 0s 439449710e-09 1s 1s 439456270e-09 1s 1s 439456430e-09 0s 0s 439459950e-09 1s 1s 439466550e-09 1s 1s 439466670e-09 0s 0s 439470190e-09 1s 1s 439476830e-09 1s 1s 439476910e-09 0s 0s 439480430e-09 1s 1s 439487110e-09 1s 1s 439487150e-09 0s 0s 439490670e-09 1s 1s 439497390e-09 0s 0s 439500910e-09 1s 1s 439507630e-09 0s 0s 439507670e-09 0s 0s 439511150e-09 1s 1s 439517870e-09 0s 0s 439517950e-09 0s 0s 439521390e-09 1s 1s 439528110e-09 0s 0s 439528230e-09 0s 0s 439531630e-09 1s 1s 439538350e-09 0s 0s 439538510e-09 0s 0s 439541870e-09 1s 1s 439548590e-09 0s 0s 439548790e-09 0s 0s 439552110e-09 1s 1s 439558830e-09 0s 0s 439559070e-09 0s 0s 439562350e-09 1s 1s 439569070e-09 0s 0s 439569350e-09 0s 0s 439572590e-09 1s 1s 439579310e-09 0s 0s 439579630e-09 0s 0s 439582830e-09 1s 1s 439589550e-09 0s 0s 439589910e-09 0s 0s 439593070e-09 1s 1s 439599790e-09 0s 0s 439600190e-09 0s 0s 439603310e-09 1s 1s 439610030e-09 0s 0s 439610470e-09 0s 0s 439613550e-09 1s 1s 439620270e-09 0s 0s 439620750e-09 0s 0s 439623790e-09 1s 1s 439630510e-09 0s 0s 439631030e-09 0s 0s 439634030e-09 1s 1s 439640750e-09 0s 0s 439641310e-09 0s 0s 439644270e-09 1s 1s 439650990e-09 0s 0s 439651590e-09 0s 0s 439654510e-09 1s 1s 439661230e-09 0s 0s 439661870e-09 0s 0s 439664750e-09 1s 1s 439671470e-09 0s 0s 439672150e-09 0s 0s 439674990e-09 1s 1s 439681710e-09 0s 0s 439682430e-09 0s 0s 439685230e-09 1s 1s 439691950e-09 0s 0s 439692710e-09 0s 0s 439695470e-09 1s 1s 439702190e-09 0s 0s 439702990e-09 0s 0s 439705710e-09 1s 1s 439712430e-09 0s 0s 439713270e-09 0s 0s 439715950e-09 1s 1s 439722670e-09 0s 0s 439723550e-09 0s 0s 439726190e-09 1s 1s 439732910e-09 0s 0s 439733830e-09 0s 0s 439736430e-09 1s 1s 439743150e-09 0s 0s 439744110e-09 0s 0s 439746670e-09 1s 1s 439753390e-09 0s 0s 439754390e-09 0s 0s 439756910e-09 1s 1s 439763630e-09 0s 0s 439764670e-09 0s 0s 439767150e-09 1s 1s 439773870e-09 0s 0s 439774950e-09 0s 0s 439777390e-09 1s 1s 439784110e-09 0s 0s 439785230e-09 0s 0s 439787630e-09 1s 1s 439794350e-09 0s 0s 439795510e-09 0s 0s 439797870e-09 1s 1s 439804590e-09 0s 0s 439805790e-09 0s 0s 439808110e-09 1s 1s 439814830e-09 0s 0s 439816070e-09 0s 0s 439818350e-09 1s 1s 439825070e-09 0s 0s 439826350e-09 0s 0s 439828590e-09 1s 1s 439835310e-09 0s 0s 439836630e-09 0s 0s 439838830e-09 1s 1s 439845550e-09 0s 0s 439846910e-09 0s 0s 439849070e-09 1s 1s 439855790e-09 0s 0s 439857190e-09 0s 0s 439859310e-09 1s 1s 439866030e-09 0s 0s 439867470e-09 0s 0s 439869550e-09 1s 1s 439876270e-09 0s 0s 439877750e-09 0s 0s 439879790e-09 1s 1s 439886510e-09 0s 0s 439888030e-09 0s 0s 439890030e-09 1s 1s 439896750e-09 0s 0s 439898310e-09 0s 0s 439900270e-09 1s 1s 439906990e-09 0s 0s 439908590e-09 0s 0s 439910510e-09 1s 1s 439917230e-09 0s 0s 439918870e-09 0s 0s 439920750e-09 1s 1s 439927470e-09 0s 0s 439929150e-09 0s 0s 439930990e-09 1s 1s 439937710e-09 0s 0s 439939430e-09 0s 0s 439941230e-09 1s 1s 439947950e-09 0s 0s 439949710e-09 0s 0s 439951470e-09 1s 1s 439958190e-09 0s 0s 439959990e-09 0s 0s 439961710e-09 1s 1s 439968430e-09 0s 0s 439970270e-09 0s 0s 439971950e-09 1s 1s 439978670e-09 0s 0s 439980550e-09 0s 0s 439982190e-09 1s 1s 439988910e-09 0s 0s 439990830e-09 0s 0s 439992430e-09 1s 1s 439999150e-09 0s 0s 440001110e-09 0s 0s 440002670e-09 1s 1s 440009390e-09 0s 0s 440011390e-09 0s 0s 440012910e-09 1s 1s 440019630e-09 0s 0s 440021670e-09 0s 0s 440023150e-09 1s 1s 440029870e-09 0s 0s 440031950e-09 0s 0s 440033390e-09 1s 1s 440040110e-09 0s 0s 440042230e-09 0s 0s 440043630e-09 1s 1s 440050350e-09 0s 0s 440052510e-09 0s 0s 440053870e-09 1s 1s 440060590e-09 0s 0s 440062790e-09 0s 0s 440064110e-09 1s 1s 440070830e-09 0s 0s 440073070e-09 0s 0s 440074350e-09 1s 1s 440081070e-09 0s 0s 440083350e-09 0s 0s 440084590e-09 1s 1s 440091310e-09 0s 0s 440093630e-09 0s 0s 440094830e-09 1s 1s 440101550e-09 0s 0s 440103910e-09 0s 0s 440105070e-09 1s 1s 440111790e-09 0s 0s 440114190e-09 0s 0s 440115310e-09 1s 1s 440122030e-09 0s 0s 440124470e-09 0s 0s 440125550e-09 1s 1s 440132270e-09 0s 0s 440134750e-09 0s 0s 440135790e-09 1s 1s 440142510e-09 0s 0s 440145030e-09 0s 0s 440146030e-09 1s 1s 440152750e-09 0s 0s 440155310e-09 0s 0s 440156270e-09 1s 1s 440162990e-09 0s 0s 440165590e-09 0s 0s 440166510e-09 1s 1s 440173230e-09 0s 0s 440175870e-09 0s 0s 440176750e-09 1s 1s 440183470e-09 0s 0s 440186150e-09 0s 0s 440186990e-09 1s 1s 440193710e-09 0s 0s 440196430e-09 0s 0s 440197230e-09 1s 1s 440203950e-09 0s 0s 440206710e-09 0s 0s 440207470e-09 1s 1s 440214190e-09 0s 0s 440216990e-09 0s 0s 440217710e-09 1s 1s 440224430e-09 0s 0s 440227270e-09 0s 0s 440227950e-09 1s 1s 440234670e-09 0s 0s 440237550e-09 0s 0s 440238190e-09 1s 1s 440244910e-09 0s 0s 440247830e-09 0s 0s 440248430e-09 1s 1s 440255150e-09 0s 0s 440258110e-09 0s 0s 440258670e-09 1s 1s 440265390e-09 0s 0s 440268390e-09 0s 0s 440268910e-09 1s 1s 440275630e-09 0s 0s 440278670e-09 0s 0s 440279150e-09 1s 1s 440285870e-09 0s 0s 440288950e-09 0s 0s 440289390e-09 1s 1s 440296110e-09 0s 0s 440299230e-09 0s 0s 440299630e-09 1s 1s 440306350e-09 0s 0s 440309510e-09 0s 0s 440309870e-09 1s 1s 440316590e-09 0s 0s 440319790e-09 0s 0s 440320110e-09 1s 1s 440326830e-09 0s 0s 440330070e-09 0s 0s 440330350e-09 1s 1s 440337070e-09 0s 0s 440340350e-09 0s 0s 440340590e-09 1s 1s 440347310e-09 0s 0s 440350630e-09 0s 0s 440350830e-09 1s 1s 440357550e-09 0s 0s 440360910e-09 0s 0s 440361070e-09 1s 1s 440367790e-09 0s 0s 440371190e-09 0s 0s 440371310e-09 1s 1s 440378030e-09 0s 0s 440381470e-09 0s 0s 440381550e-09 1s 1s 440388270e-09 0s 0s 440391750e-09 0s 0s 440391790e-09 1s 1s 440398510e-09 0s 0s 440402030e-09 1s 1s 440402070e-09 1s 1s 440408790e-09 0s 0s 440412270e-09 1s 1s 440412350e-09 1s 1s 440419030e-09 0s 0s 440422510e-09 1s 1s 440422630e-09 1s 1s 440429270e-09 0s 0s 440432750e-09 1s 1s 440432910e-09 1s 1s 440439510e-09 0s 0s 440442990e-09 1s 1s 440443190e-09 1s 1s 440449750e-09 0s 0s 440453230e-09 1s 1s 440453470e-09 1s 1s 440459990e-09 0s 0s 440463470e-09 1s 1s 440463750e-09 1s 1s 440470230e-09 0s 0s 440473710e-09 1s 1s 440474030e-09 1s 1s 440480470e-09 0s 0s 440483950e-09 1s 1s 440484310e-09 1s 1s 440490710e-09 0s 0s 440494190e-09 1s 1s 440494590e-09 1s 1s 440500950e-09 0s 0s 440504430e-09 1s 1s 440504870e-09 1s 1s 440511190e-09 0s 0s 440514670e-09 1s 1s 440515150e-09 1s 1s 440521430e-09 0s 0s 440524910e-09 1s 1s 440525430e-09 1s 1s 440531670e-09 0s 0s 440535150e-09 1s 1s 440535710e-09 1s 1s 440541910e-09 0s 0s 440545390e-09 1s 1s 440545990e-09 1s 1s 440552150e-09 0s 0s 440555630e-09 1s 1s 440556270e-09 1s 1s 440562390e-09 0s 0s 440565870e-09 1s 1s 440566550e-09 1s 1s 440572630e-09 0s 0s 440576110e-09 1s 1s 440576830e-09 1s 1s 440582870e-09 0s 0s 440586350e-09 1s 1s 440587110e-09 1s 1s 440593110e-09 0s 0s 440596590e-09 1s 1s 440597390e-09 1s 1s 440603350e-09 0s 0s 440606830e-09 1s 1s 440607670e-09 1s 1s 440613590e-09 0s 0s 440617070e-09 1s 1s 440617950e-09 1s 1s 440623830e-09 0s 0s 440627310e-09 1s 1s 440628230e-09 1s 1s 440634070e-09 0s 0s 440637550e-09 1s 1s 440638510e-09 1s 1s 440644310e-09 0s 0s 440647790e-09 1s 1s 440648790e-09 1s 1s 440654550e-09 0s 0s 440658030e-09 1s 1s 440659070e-09 1s 1s 440664790e-09 0s 0s 440668270e-09 1s 1s 440669350e-09 1s 1s 440675030e-09 0s 0s 440678510e-09 1s 1s 440679630e-09 1s 1s 440685270e-09 0s 0s 440688750e-09 1s 1s 440689910e-09 1s 1s 440695510e-09 0s 0s 440698990e-09 1s 1s 440700190e-09 1s 1s 440705750e-09 0s 0s 440709230e-09 1s 1s 440710470e-09 1s 1s 440715990e-09 0s 0s 440719470e-09 1s 1s 440720750e-09 1s 1s 440726230e-09 0s 0s 440729710e-09 1s 1s 440731030e-09 1s 1s 440736470e-09 0s 0s 440739950e-09 1s 1s 440741310e-09 1s 1s 440746710e-09 0s 0s 440750190e-09 1s 1s 440751590e-09 1s 1s 440756950e-09 0s 0s 440760430e-09 1s 1s 440761870e-09 1s 1s 440767190e-09 0s 0s 440770670e-09 1s 1s 440772150e-09 1s 1s 440777430e-09 0s 0s 440780910e-09 1s 1s 440782430e-09 1s 1s 440787670e-09 0s 0s 440791150e-09 1s 1s 440792710e-09 1s 1s 440797910e-09 0s 0s 440801390e-09 1s 1s 440802990e-09 1s 1s 440808150e-09 0s 0s 440811630e-09 1s 1s 440813270e-09 1s 1s 440818390e-09 0s 0s 440821870e-09 1s 1s 440823550e-09 1s 1s 440828630e-09 0s 0s 440832110e-09 1s 1s 440833830e-09 1s 1s 440838870e-09 0s 0s 440842350e-09 1s 1s 440844110e-09 1s 1s 440849110e-09 0s 0s 440852590e-09 1s 1s 440854390e-09 1s 1s 440859350e-09 0s 0s 440862830e-09 1s 1s 440864670e-09 1s 1s 440869590e-09 0s 0s 440873070e-09 1s 1s 440874950e-09 1s 1s 440879830e-09 0s 0s 440883310e-09 1s 1s 440885230e-09 1s 1s 440890070e-09 0s 0s 440893550e-09 1s 1s 440895510e-09 1s 1s 440900310e-09 0s 0s 440903790e-09 1s 1s 440905790e-09 1s 1s 440910550e-09 0s 0s 440914030e-09 1s 1s 440916070e-09 1s 1s 440920790e-09 0s 0s 440924270e-09 1s 1s 440926350e-09 1s 1s 440931030e-09 0s 0s 440934510e-09 1s 1s 440936630e-09 1s 1s 440941270e-09 0s 0s 440944750e-09 1s 1s 440946910e-09 1s 1s 440951510e-09 0s 0s 440954990e-09 1s 1s 440957190e-09 1s 1s 440961750e-09 0s 0s 440965230e-09 1s 1s 440967470e-09 1s 1s 440971990e-09 0s 0s 440975470e-09 1s 1s 440977750e-09 1s 1s 440982230e-09 0s 0s 440985710e-09 1s 1s 440988030e-09 1s 1s 440992470e-09 0s 0s 440995950e-09 1s 1s 440998310e-09 1s 1s 441002710e-09 0s 0s 441006190e-09 1s 1s 441008590e-09 1s 1s 441012950e-09 0s 0s 441016430e-09 1s 1s 441018870e-09 1s 1s 441023190e-09 0s 0s 441026670e-09 1s 1s 441029150e-09 1s 1s 441033430e-09 0s 0s 441036910e-09 1s 1s 441039430e-09 1s 1s 441043670e-09 0s 0s 441047150e-09 1s 1s 441049710e-09 1s 1s 441053910e-09 0s 0s 441057390e-09 1s 1s 441059990e-09 1s 1s 441064150e-09 0s 0s 441067630e-09 1s 1s 441070270e-09 1s 1s 441074390e-09 0s 0s 441077870e-09 1s 1s 441080550e-09 1s 1s 441084630e-09 0s 0s 441088110e-09 1s 1s 441090830e-09 1s 1s 441094870e-09 0s 0s 441098350e-09 1s 1s 441101110e-09 1s 1s 441105110e-09 0s 0s 441108590e-09 1s 1s 441111390e-09 1s 1s 441115350e-09 0s 0s 441118830e-09 1s 1s 441121670e-09 1s 1s 441125590e-09 0s 0s 441129070e-09 1s 1s 441131950e-09 1s 1s 441135830e-09 0s 0s 441139310e-09 1s 1s 441142230e-09 1s 1s 441146070e-09 0s 0s 441149550e-09 1s 1s 441152510e-09 1s 1s 441156310e-09 0s 0s 441159790e-09 1s 1s 441162790e-09 1s 1s 441166550e-09 0s 0s 441170030e-09 1s 1s 441173070e-09 1s 1s 441176790e-09 0s 0s 441180270e-09 1s 1s 441183350e-09 1s 1s 441187030e-09 0s 0s 441190510e-09 1s 1s 441193630e-09 1s 1s 441197270e-09 0s 0s 441200750e-09 1s 1s 441203910e-09 1s 1s 441207510e-09 0s 0s 441210990e-09 1s 1s 441214190e-09 1s 1s 441217750e-09 0s 0s 441221230e-09 1s 1s 441224470e-09 1s 1s 441227990e-09 0s 0s 441231470e-09 1s 1s 441234750e-09 1s 1s 441238230e-09 0s 0s 441241710e-09 1s 1s 441245030e-09 1s 1s 441248470e-09 0s 0s 441251950e-09 1s 1s 441255310e-09 1s 1s 441258710e-09 0s 0s 441262190e-09 1s 1s 441265590e-09 1s 1s 441268950e-09 0s 0s 441272430e-09 1s 1s 441275870e-09 1s 1s 441279190e-09 0s 0s 441282670e-09 1s 1s 441286150e-09 1s 1s 441289430e-09 0s 0s 441292910e-09 1s 1s 441296430e-09 1s 1s 441299670e-09 0s 0s 441303150e-09 1s 1s 441306710e-09 1s 1s 441309910e-09 0s 0s 441313390e-09 1s 1s 441316990e-09 1s 1s 441320150e-09 0s 0s 441323630e-09 1s 1s 441327270e-09 1s 1s 441330390e-09 0s 0s 441333870e-09 1s 1s 441337550e-09 1s 1s 441340630e-09 0s 0s 441344110e-09 1s 1s 441347830e-09 1s 1s 441350870e-09 0s 0s 441354350e-09 1s 1s 441358110e-09 1s 1s 441361110e-09 0s 0s 441364590e-09 1s 1s 441368390e-09 1s 1s 441371350e-09 0s 0s 441374830e-09 1s 1s 441378670e-09 1s 1s 441381590e-09 0s 0s 441385070e-09 1s 1s 441388950e-09 1s 1s 441391830e-09 0s 0s 441395310e-09 1s 1s 441399230e-09 1s 1s 441402070e-09 0s 0s 441405550e-09 1s 1s 441409510e-09 1s 1s 441412310e-09 0s 0s 441415790e-09 1s 1s 441419790e-09 1s 1s 441422550e-09 0s 0s 441426030e-09 1s 1s 441430070e-09 1s 1s 441432790e-09 0s 0s 441436270e-09 1s 1s 441440350e-09 1s 1s 441443030e-09 0s 0s 441446510e-09 1s 1s 441450630e-09 1s 1s 441453270e-09 0s 0s 441456750e-09 1s 1s 441460910e-09 1s 1s 441463510e-09 0s 0s 441466990e-09 1s 1s 441471190e-09 1s 1s 441473750e-09 0s 0s 441477230e-09 1s 1s 441481470e-09 1s 1s 441483990e-09 0s 0s 441487470e-09 1s 1s 441491750e-09 1s 1s 441494230e-09 0s 0s 441497710e-09 1s 1s 441502030e-09 1s 1s 441504470e-09 0s 0s 441507950e-09 1s 1s 441512310e-09 1s 1s 441514710e-09 0s 0s 441518190e-09 1s 1s 441522590e-09 1s 1s 441524950e-09 0s 0s 441528430e-09 1s 1s 441532870e-09 1s 1s 441535190e-09 0s 0s 441538670e-09 1s 1s 441543150e-09 1s 1s 441545430e-09 0s 0s 441548910e-09 1s 1s 441553430e-09 1s 1s 441555670e-09 0s 0s 441559150e-09 1s 1s 441563710e-09 1s 1s 441565910e-09 0s 0s 441569390e-09 1s 1s 441573990e-09 1s 1s 441576150e-09 0s 0s 441579630e-09 1s 1s 441584270e-09 1s 1s 441586390e-09 0s 0s 441589870e-09 1s 1s 441594550e-09 1s 1s 441596630e-09 0s 0s 441600110e-09 1s 1s 441604830e-09 1s 1s 441606870e-09 0s 0s 441610350e-09 1s 1s 441615110e-09 1s 1s 441617110e-09 0s 0s 441620590e-09 1s 1s 441625390e-09 1s 1s 441627350e-09 0s 0s 441630830e-09 1s 1s 441635670e-09 1s 1s 441637590e-09 0s 0s 441641070e-09 1s 1s 441645950e-09 1s 1s 441647830e-09 0s 0s 441651310e-09 1s 1s 441656230e-09 1s 1s 441658070e-09 0s 0s 441661550e-09 1s 1s 441666510e-09 1s 1s 441668310e-09 0s 0s 441671790e-09 1s 1s 441676790e-09 1s 1s 441678550e-09 0s 0s 441682030e-09 1s 1s 441687070e-09 1s 1s 441688790e-09 0s 0s 441692270e-09 1s 1s 441697350e-09 1s 1s 441699030e-09 0s 0s 441702510e-09 1s 1s 441707630e-09 1s 1s 441709270e-09 0s 0s 441712750e-09 1s 1s 441717910e-09 1s 1s 441719510e-09 0s 0s 441722990e-09 1s 1s 441728190e-09 1s 1s 441729750e-09 0s 0s 441733230e-09 1s 1s 441738470e-09 1s 1s 441739990e-09 0s 0s 441743470e-09 1s 1s 441748750e-09 1s 1s 441750230e-09 0s 0s 441753710e-09 1s 1s 441759030e-09 1s 1s 441760470e-09 0s 0s 441763950e-09 1s 1s 441769310e-09 1s 1s 441770710e-09 0s 0s 441774190e-09 1s 1s 441779590e-09 1s 1s 441780950e-09 0s 0s 441784430e-09 1s 1s 441789870e-09 1s 1s 441791190e-09 0s 0s 441794670e-09 1s 1s 441800150e-09 1s 1s 441801430e-09 0s 0s 441804910e-09 1s 1s 441810430e-09 1s 1s 441811670e-09 0s 0s 441815150e-09 1s 1s 441820710e-09 1s 1s 441821910e-09 0s 0s 441825390e-09 1s 1s 441830990e-09 1s 1s 441832150e-09 0s 0s 441835630e-09 1s 1s 441841270e-09 1s 1s 441842390e-09 0s 0s 441845870e-09 1s 1s 441851550e-09 1s 1s 441852630e-09 0s 0s 441856110e-09 1s 1s 441861830e-09 1s 1s 441862870e-09 0s 0s 441866350e-09 1s 1s 441872110e-09 1s 1s 441873110e-09 0s 0s 441876590e-09 1s 1s 441882390e-09 1s 1s 441883350e-09 0s 0s 441886830e-09 1s 1s 441892670e-09 1s 1s 441893590e-09 0s 0s 441897070e-09 1s 1s 441902950e-09 1s 1s 441903830e-09 0s 0s 441907310e-09 1s 1s 441913230e-09 1s 1s 441914070e-09 0s 0s 441917550e-09 1s 1s 441923510e-09 1s 1s 441924310e-09 0s 0s 441927790e-09 1s 1s 441933790e-09 1s 1s 441934550e-09 0s 0s 441938030e-09 1s 1s 441944070e-09 1s 1s 441944790e-09 0s 0s 441948270e-09 1s 1s 441954350e-09 1s 1s 441955030e-09 0s 0s 441958510e-09 1s 1s 441964630e-09 1s 1s 441965270e-09 0s 0s 441968750e-09 1s 1s 441974910e-09 1s 1s 441975510e-09 0s 0s 441978990e-09 1s 1s 441985190e-09 1s 1s 441985750e-09 0s 0s 441989230e-09 1s 1s 441995470e-09 1s 1s 441995990e-09 0s 0s 441999470e-09 1s 1s 442005750e-09 1s 1s 442006230e-09 0s 0s 442009710e-09 1s 1s 442016030e-09 1s 1s 442016470e-09 0s 0s 442019950e-09 1s 1s 442026310e-09 1s 1s 442026710e-09 0s 0s 442030190e-09 1s 1s 442036590e-09 1s 1s 442036950e-09 0s 0s 442040430e-09 1s 1s 442046870e-09 1s 1s 442047190e-09 0s 0s 442050670e-09 1s 1s 442057150e-09 1s 1s 442057430e-09 0s 0s 442060910e-09 1s 1s 442067430e-09 1s 1s 442067670e-09 0s 0s 442071150e-09 1s 1s 442077710e-09 1s 1s 442077910e-09 0s 0s 442081390e-09 1s 1s 442087990e-09 1s 1s 442088150e-09 0s 0s 442091630e-09 1s 1s 442098270e-09 1s 1s 442098390e-09 0s 0s 442101870e-09 1s 1s 442108550e-09 1s 1s 442108630e-09 0s 0s 442112110e-09 1s 1s 442118830e-09 1s 1s 442118870e-09 0s 0s 442122350e-09 1s 1s 442129110e-09 0s 0s 442132590e-09 1s 1s 442139350e-09 0s 0s 442139390e-09 0s 0s 442142830e-09 1s 1s 442149590e-09 0s 0s 442149670e-09 0s 0s 442153070e-09 1s 1s 442159830e-09 0s 0s 442159950e-09 0s 0s 442163310e-09 1s 1s 442170070e-09 0s 0s 442170230e-09 0s 0s 442173550e-09 1s 1s 442180310e-09 0s 0s 442180510e-09 0s 0s 442183790e-09 1s 1s 442190550e-09 0s 0s 442190790e-09 0s 0s 442194030e-09 1s 1s 442200790e-09 0s 0s 442201070e-09 0s 0s 442204270e-09 1s 1s 442211030e-09 0s 0s 442211350e-09 0s 0s 442214510e-09 1s 1s 442221270e-09 0s 0s 442221630e-09 0s 0s 442224750e-09 1s 1s 442231510e-09 0s 0s 442231910e-09 0s 0s 442234990e-09 1s 1s 442241750e-09 0s 0s 442242190e-09 0s 0s 442245230e-09 1s 1s 442251990e-09 0s 0s 442252470e-09 0s 0s 442255470e-09 1s 1s 442262230e-09 0s 0s 442262750e-09 0s 0s 442265710e-09 1s 1s 442272470e-09 0s 0s 442273030e-09 0s 0s 442275950e-09 1s 1s 442282710e-09 0s 0s 442283310e-09 0s 0s 442286190e-09 1s 1s 442292950e-09 0s 0s 442293590e-09 0s 0s 442296430e-09 1s 1s 442303190e-09 0s 0s 442303870e-09 0s 0s 442306670e-09 1s 1s 442313430e-09 0s 0s 442314150e-09 0s 0s 442316910e-09 1s 1s 442323670e-09 0s 0s 442324430e-09 0s 0s 442327150e-09 1s 1s 442333910e-09 0s 0s 442334710e-09 0s 0s 442337390e-09 1s 1s 442344150e-09 0s 0s 442344990e-09 0s 0s 442347630e-09 1s 1s 442354390e-09 0s 0s 442355270e-09 0s 0s 442357870e-09 1s 1s 442364630e-09 0s 0s 442365550e-09 0s 0s 442368110e-09 1s 1s 442374870e-09 0s 0s 442375830e-09 0s 0s 442378350e-09 1s 1s 442385110e-09 0s 0s 442386110e-09 0s 0s 442388590e-09 1s 1s 442395350e-09 0s 0s 442396390e-09 0s 0s 442398830e-09 1s 1s 442405590e-09 0s 0s 442406670e-09 0s 0s 442409070e-09 1s 1s 442415830e-09 0s 0s 442416950e-09 0s 0s 442419310e-09 1s 1s 442426070e-09 0s 0s 442427230e-09 0s 0s 442429550e-09 1s 1s 442436310e-09 0s 0s 442437510e-09 0s 0s 442439790e-09 1s 1s 442446550e-09 0s 0s 442447790e-09 0s 0s 442450030e-09 1s 1s 442456790e-09 0s 0s 442458070e-09 0s 0s 442460270e-09 1s 1s 442467030e-09 0s 0s 442468350e-09 0s 0s 442470510e-09 1s 1s 442477270e-09 0s 0s 442478630e-09 0s 0s 442480750e-09 1s 1s 442487510e-09 0s 0s 442488910e-09 0s 0s 442490990e-09 1s 1s 442497750e-09 0s 0s 442499190e-09 0s 0s 442501230e-09 1s 1s 442507990e-09 0s 0s 442509470e-09 0s 0s 442511470e-09 1s 1s 442518230e-09 0s 0s 442519750e-09 0s 0s 442521710e-09 1s 1s 442528470e-09 0s 0s 442530030e-09 0s 0s 442531950e-09 1s 1s 442538710e-09 0s 0s 442540310e-09 0s 0s 442542190e-09 1s 1s 442548950e-09 0s 0s 442550590e-09 0s 0s 442552430e-09 1s 1s 442559190e-09 0s 0s 442560870e-09 0s 0s 442562670e-09 1s 1s 442569430e-09 0s 0s 442571150e-09 0s 0s 442572910e-09 1s 1s 442579670e-09 0s 0s 442581430e-09 0s 0s 442583150e-09 1s 1s 442589910e-09 0s 0s 442591710e-09 0s 0s 442593390e-09 1s 1s 442600150e-09 0s 0s 442601990e-09 0s 0s 442603630e-09 1s 1s 442610390e-09 0s 0s 442612270e-09 0s 0s 442613870e-09 1s 1s 442620630e-09 0s 0s 442622550e-09 0s 0s 442624110e-09 1s 1s 442630870e-09 0s 0s 442632830e-09 0s 0s 442634350e-09 1s 1s 442641110e-09 0s 0s 442643110e-09 0s 0s 442644590e-09 1s 1s 442651350e-09 0s 0s 442653390e-09 0s 0s 442654830e-09 1s 1s 442661590e-09 0s 0s 442663670e-09 0s 0s 442665070e-09 1s 1s 442671830e-09 0s 0s 442673950e-09 0s 0s 442675310e-09 1s 1s 442682070e-09 0s 0s 442684230e-09 0s 0s 442685550e-09 1s 1s 442692310e-09 0s 0s 442694510e-09 0s 0s 442695790e-09 1s 1s 442702550e-09 0s 0s 442704790e-09 0s 0s 442706030e-09 1s 1s 442712790e-09 0s 0s 442715070e-09 0s 0s 442716270e-09 1s 1s 442723030e-09 0s 0s 442725350e-09 0s 0s 442726510e-09 1s 1s 442733270e-09 0s 0s 442735630e-09 0s 0s 442736750e-09 1s 1s 442743510e-09 0s 0s 442745910e-09 0s 0s 442746990e-09 1s 1s 442753750e-09 0s 0s 442756190e-09 0s 0s 442757230e-09 1s 1s 442763990e-09 0s 0s 442766470e-09 0s 0s 442767470e-09 1s 1s 442774230e-09 0s 0s 442776750e-09 0s 0s 442777710e-09 1s 1s 442784470e-09 0s 0s 442787030e-09 0s 0s 442787950e-09 1s 1s 442794710e-09 0s 0s 442797310e-09 0s 0s 442798190e-09 1s 1s 442804950e-09 0s 0s 442807590e-09 0s 0s 442808430e-09 1s 1s 442815190e-09 0s 0s 442817870e-09 0s 0s 442818670e-09 1s 1s 442825430e-09 0s 0s 442828150e-09 0s 0s 442828910e-09 1s 1s 442835670e-09 0s 0s 442838430e-09 0s 0s 442839150e-09 1s 1s 442845910e-09 0s 0s 442848710e-09 0s 0s 442849390e-09 1s 1s 442856150e-09 0s 0s 442858990e-09 0s 0s 442859630e-09 1s 1s 442866390e-09 0s 0s 442869270e-09 0s 0s 442869870e-09 1s 1s 442876630e-09 0s 0s 442879550e-09 0s 0s 442880110e-09 1s 1s 442886870e-09 0s 0s 442889830e-09 0s 0s 442890350e-09 1s 1s 442897110e-09 0s 0s 442900110e-09 0s 0s 442900590e-09 1s 1s 442907350e-09 0s 0s 442910390e-09 0s 0s 442910830e-09 1s 1s 442917590e-09 0s 0s 442920670e-09 0s 0s 442921070e-09 1s 1s 442927830e-09 0s 0s 442930950e-09 0s 0s 442931310e-09 1s 1s 442938070e-09 0s 0s 442941230e-09 0s 0s 442941550e-09 1s 1s 442948310e-09 0s 0s 442951510e-09 0s 0s 442951790e-09 1s 1s 442958550e-09 0s 0s 442961790e-09 0s 0s 442962030e-09 1s 1s 442968790e-09 0s 0s 442972070e-09 0s 0s 442972270e-09 1s 1s 442979030e-09 0s 0s 442982350e-09 0s 0s 442982510e-09 1s 1s 442989270e-09 0s 0s 442992630e-09 0s 0s 442992750e-09 1s 1s 442999510e-09 0s 0s 443002910e-09 0s 0s 443002990e-09 1s 1s 443009750e-09 0s 0s 443013190e-09 0s 0s 443013230e-09 1s 1s 443019990e-09 0s 0s 443023470e-09 1s 1s 443023510e-09 1s 1s 443030270e-09 0s 0s 443033710e-09 1s 1s 443033790e-09 1s 1s 443040510e-09 0s 0s 443043950e-09 1s 1s 443044070e-09 1s 1s 443050750e-09 0s 0s 443054190e-09 1s 1s 443054350e-09 1s 1s 443060990e-09 0s 0s 443064430e-09 1s 1s 443064630e-09 1s 1s 443071230e-09 0s 0s 443074670e-09 1s 1s 443074910e-09 1s 1s 443081470e-09 0s 0s 443084910e-09 1s 1s 443085190e-09 1s 1s 443091710e-09 0s 0s 443095150e-09 1s 1s 443095470e-09 1s 1s 443101950e-09 0s 0s 443105390e-09 1s 1s 443105750e-09 1s 1s 443112190e-09 0s 0s 443115630e-09 1s 1s 443116030e-09 1s 1s 443122430e-09 0s 0s 443125870e-09 1s 1s 443126310e-09 1s 1s 443132670e-09 0s 0s 443136110e-09 1s 1s 443136590e-09 1s 1s 443142910e-09 0s 0s 443146350e-09 1s 1s 443146870e-09 1s 1s 443153150e-09 0s 0s 443156590e-09 1s 1s 443157150e-09 1s 1s 443163390e-09 0s 0s 443166830e-09 1s 1s 443167430e-09 1s 1s 443173630e-09 0s 0s 443177070e-09 1s 1s 443177710e-09 1s 1s 443183870e-09 0s 0s 443187310e-09 1s 1s 443187990e-09 1s 1s 443194110e-09 0s 0s 443197550e-09 1s 1s 443198270e-09 1s 1s 443204350e-09 0s 0s 443207790e-09 1s 1s 443208550e-09 1s 1s 443214590e-09 0s 0s 443218030e-09 1s 1s 443218830e-09 1s 1s 443224830e-09 0s 0s 443228270e-09 1s 1s 443229110e-09 1s 1s 443235070e-09 0s 0s 443238510e-09 1s 1s 443239390e-09 1s 1s 443245310e-09 0s 0s 443248750e-09 1s 1s 443249670e-09 1s 1s 443255550e-09 0s 0s 443258990e-09 1s 1s 443259950e-09 1s 1s 443265790e-09 0s 0s 443269230e-09 1s 1s 443270230e-09 1s 1s 443276030e-09 0s 0s 443279470e-09 1s 1s 443280510e-09 1s 1s 443286270e-09 0s 0s 443289710e-09 1s 1s 443290790e-09 1s 1s 443296510e-09 0s 0s 443299950e-09 1s 1s 443301070e-09 1s 1s 443306750e-09 0s 0s 443310190e-09 1s 1s 443311350e-09 1s 1s 443316990e-09 0s 0s 443320430e-09 1s 1s 443321630e-09 1s 1s 443327230e-09 0s 0s 443330670e-09 1s 1s 443331910e-09 1s 1s 443337470e-09 0s 0s 443340910e-09 1s 1s 443342190e-09 1s 1s 443347710e-09 0s 0s 443351150e-09 1s 1s 443352470e-09 1s 1s 443357950e-09 0s 0s 443361390e-09 1s 1s 443362750e-09 1s 1s 443368190e-09 0s 0s 443371630e-09 1s 1s 443373030e-09 1s 1s 443378430e-09 0s 0s 443381870e-09 1s 1s 443383310e-09 1s 1s 443388670e-09 0s 0s 443392110e-09 1s 1s 443393590e-09 1s 1s 443398910e-09 0s 0s 443402350e-09 1s 1s 443403870e-09 1s 1s 443409150e-09 0s 0s 443412590e-09 1s 1s 443414150e-09 1s 1s 443419390e-09 0s 0s 443422830e-09 1s 1s 443424430e-09 1s 1s 443429630e-09 0s 0s 443433070e-09 1s 1s 443434710e-09 1s 1s 443439870e-09 0s 0s 443443310e-09 1s 1s 443444990e-09 1s 1s 443450110e-09 0s 0s 443453550e-09 1s 1s 443455270e-09 1s 1s 443460350e-09 0s 0s 443463790e-09 1s 1s 443465550e-09 1s 1s 443470590e-09 0s 0s 443474030e-09 1s 1s 443475830e-09 1s 1s 443480830e-09 0s 0s 443484270e-09 1s 1s 443486110e-09 1s 1s 443491070e-09 0s 0s 443494510e-09 1s 1s 443496390e-09 1s 1s 443501310e-09 0s 0s 443504750e-09 1s 1s 443506670e-09 1s 1s 443511550e-09 0s 0s 443514990e-09 1s 1s 443516950e-09 1s 1s 443521790e-09 0s 0s 443525230e-09 1s 1s 443527230e-09 1s 1s 443532030e-09 0s 0s 443535470e-09 1s 1s 443537510e-09 1s 1s 443542270e-09 0s 0s 443545710e-09 1s 1s 443547790e-09 1s 1s 443552510e-09 0s 0s 443555950e-09 1s 1s 443558070e-09 1s 1s 443562750e-09 0s 0s 443566190e-09 1s 1s 443568350e-09 1s 1s 443572990e-09 0s 0s 443576430e-09 1s 1s 443578630e-09 1s 1s 443583230e-09 0s 0s 443586670e-09 1s 1s 443588910e-09 1s 1s 443593470e-09 0s 0s 443596910e-09 1s 1s 443599190e-09 1s 1s 443603710e-09 0s 0s 443607150e-09 1s 1s 443609470e-09 1s 1s 443613950e-09 0s 0s 443617390e-09 1s 1s 443619750e-09 1s 1s 443624190e-09 0s 0s 443627630e-09 1s 1s 443630030e-09 1s 1s 443634430e-09 0s 0s 443637870e-09 1s 1s 443640310e-09 1s 1s 443644670e-09 0s 0s 443648110e-09 1s 1s 443650590e-09 1s 1s 443654910e-09 0s 0s 443658350e-09 1s 1s 443660870e-09 1s 1s 443665150e-09 0s 0s 443668590e-09 1s 1s 443671150e-09 1s 1s 443675390e-09 0s 0s 443678830e-09 1s 1s 443681430e-09 1s 1s 443685630e-09 0s 0s 443689070e-09 1s 1s 443691710e-09 1s 1s 443695870e-09 0s 0s 443699310e-09 1s 1s 443701990e-09 1s 1s 443706110e-09 0s 0s 443709550e-09 1s 1s 443712270e-09 1s 1s 443716350e-09 0s 0s 443719790e-09 1s 1s 443722550e-09 1s 1s 443726590e-09 0s 0s 443730030e-09 1s 1s 443732830e-09 1s 1s 443736830e-09 0s 0s 443740270e-09 1s 1s 443743110e-09 1s 1s 443747070e-09 0s 0s 443750510e-09 1s 1s 443753390e-09 1s 1s 443757310e-09 0s 0s 443760750e-09 1s 1s 443763670e-09 1s 1s 443767550e-09 0s 0s 443770990e-09 1s 1s 443773950e-09 1s 1s 443777790e-09 0s 0s 443781230e-09 1s 1s 443784230e-09 1s 1s 443788030e-09 0s 0s 443791470e-09 1s 1s 443794510e-09 1s 1s 443798270e-09 0s 0s 443801710e-09 1s 1s 443804790e-09 1s 1s 443808510e-09 0s 0s 443811950e-09 1s 1s 443815070e-09 1s 1s 443818750e-09 0s 0s 443822190e-09 1s 1s 443825350e-09 1s 1s 443828990e-09 0s 0s 443832430e-09 1s 1s 443835630e-09 1s 1s 443839230e-09 0s 0s 443842670e-09 1s 1s 443845910e-09 1s 1s 443849470e-09 0s 0s 443852910e-09 1s 1s 443856190e-09 1s 1s 443859710e-09 0s 0s 443863150e-09 1s 1s 443866470e-09 1s 1s 443869950e-09 0s 0s 443873390e-09 1s 1s 443876750e-09 1s 1s 443880190e-09 0s 0s 443883630e-09 1s 1s 443887030e-09 1s 1s 443890430e-09 0s 0s 443893870e-09 1s 1s 443897310e-09 1s 1s 443900670e-09 0s 0s 443904110e-09 1s 1s 443907590e-09 1s 1s 443910910e-09 0s 0s 443914350e-09 1s 1s 443917870e-09 1s 1s 443921150e-09 0s 0s 443924590e-09 1s 1s 443928150e-09 1s 1s 443931390e-09 0s 0s 443934830e-09 1s 1s 443938430e-09 1s 1s 443941630e-09 0s 0s 443945070e-09 1s 1s 443948710e-09 1s 1s 443951870e-09 0s 0s 443955310e-09 1s 1s 443958990e-09 1s 1s 443962110e-09 0s 0s 443965550e-09 1s 1s 443969270e-09 1s 1s 443972350e-09 0s 0s 443975790e-09 1s 1s 443979550e-09 1s 1s 443982590e-09 0s 0s 443986030e-09 1s 1s 443989830e-09 1s 1s 443992830e-09 0s 0s 443996270e-09 1s 1s 444000110e-09 1s 1s 444003070e-09 0s 0s 444006510e-09 1s 1s 444010390e-09 1s 1s 444013310e-09 0s 0s 444016750e-09 1s 1s 444020670e-09 1s 1s 444023550e-09 0s 0s 444026990e-09 1s 1s 444030950e-09 1s 1s 444033790e-09 0s 0s 444037230e-09 1s 1s 444041230e-09 1s 1s 444044030e-09 0s 0s 444047470e-09 1s 1s 444051510e-09 1s 1s 444054270e-09 0s 0s 444057710e-09 1s 1s 444061790e-09 1s 1s 444064510e-09 0s 0s 444067950e-09 1s 1s 444072070e-09 1s 1s 444074750e-09 0s 0s 444078190e-09 1s 1s 444082350e-09 1s 1s 444084990e-09 0s 0s 444088430e-09 1s 1s 444092630e-09 1s 1s 444095230e-09 0s 0s 444098670e-09 1s 1s 444102910e-09 1s 1s 444105470e-09 0s 0s 444108910e-09 1s 1s 444113190e-09 1s 1s 444115710e-09 0s 0s 444119150e-09 1s 1s 444123470e-09 1s 1s 444125950e-09 0s 0s 444129390e-09 1s 1s 444133750e-09 1s 1s 444136190e-09 0s 0s 444139630e-09 1s 1s 444144030e-09 1s 1s 444146430e-09 0s 0s 444149870e-09 1s 1s 444154310e-09 1s 1s 444156670e-09 0s 0s 444160110e-09 1s 1s 444164590e-09 1s 1s 444166910e-09 0s 0s 444170350e-09 1s 1s 444174870e-09 1s 1s 444177150e-09 0s 0s 444180590e-09 1s 1s 444185150e-09 1s 1s 444187390e-09 0s 0s 444190830e-09 1s 1s 444195430e-09 1s 1s 444197630e-09 0s 0s 444201070e-09 1s 1s 444205710e-09 1s 1s 444207870e-09 0s 0s 444211310e-09 1s 1s 444215990e-09 1s 1s 444218110e-09 0s 0s 444221550e-09 1s 1s 444226270e-09 1s 1s 444228350e-09 0s 0s 444231790e-09 1s 1s 444236550e-09 1s 1s 444238590e-09 0s 0s 444242030e-09 1s 1s 444246830e-09 1s 1s 444248830e-09 0s 0s 444252270e-09 1s 1s 444257110e-09 1s 1s 444259070e-09 0s 0s 444262510e-09 1s 1s 444267390e-09 1s 1s 444269310e-09 0s 0s 444272750e-09 1s 1s 444277670e-09 1s 1s 444279550e-09 0s 0s 444282990e-09 1s 1s 444287950e-09 1s 1s 444289790e-09 0s 0s 444293230e-09 1s 1s 444298230e-09 1s 1s 444300030e-09 0s 0s 444303470e-09 1s 1s 444308510e-09 1s 1s 444310270e-09 0s 0s 444313710e-09 1s 1s 444318790e-09 1s 1s 444320510e-09 0s 0s 444323950e-09 1s 1s 444329070e-09 1s 1s 444330750e-09 0s 0s 444334190e-09 1s 1s 444339350e-09 1s 1s 444340990e-09 0s 0s 444344430e-09 1s 1s 444349630e-09 1s 1s 444351230e-09 0s 0s 444354670e-09 1s 1s 444359910e-09 1s 1s 444361470e-09 0s 0s 444364910e-09 1s 1s 444370190e-09 1s 1s 444371710e-09 0s 0s 444375150e-09 1s 1s 444380470e-09 1s 1s 444381950e-09 0s 0s 444385390e-09 1s 1s 444390750e-09 1s 1s 444392190e-09 0s 0s 444395630e-09 1s 1s 444401030e-09 1s 1s 444402430e-09 0s 0s 444405870e-09 1s 1s 444411310e-09 1s 1s 444412670e-09 0s 0s 444416110e-09 1s 1s 444421590e-09 1s 1s 444422910e-09 0s 0s 444426350e-09 1s 1s 444431870e-09 1s 1s 444433150e-09 0s 0s 444436590e-09 1s 1s 444442150e-09 1s 1s 444443390e-09 0s 0s 444446830e-09 1s 1s 444452430e-09 1s 1s 444453630e-09 0s 0s 444457070e-09 1s 1s 444462710e-09 1s 1s 444463870e-09 0s 0s 444467310e-09 1s 1s 444472990e-09 1s 1s 444474110e-09 0s 0s 444477550e-09 1s 1s 444483270e-09 1s 1s 444484350e-09 0s 0s 444487790e-09 1s 1s 444493550e-09 1s 1s 444494590e-09 0s 0s 444498030e-09 1s 1s 444503830e-09 1s 1s 444504830e-09 0s 0s 444508270e-09 1s 1s 444514110e-09 1s 1s 444515070e-09 0s 0s 444518510e-09 1s 1s 444524390e-09 1s 1s 444525310e-09 0s 0s 444528750e-09 1s 1s 444534670e-09 1s 1s 444535550e-09 0s 0s 444538990e-09 1s 1s 444544950e-09 1s 1s 444545790e-09 0s 0s 444549230e-09 1s 1s 444555230e-09 1s 1s 444556030e-09 0s 0s 444559470e-09 1s 1s 444565510e-09 1s 1s 444566270e-09 0s 0s 444569710e-09 1s 1s 444575790e-09 1s 1s 444576510e-09 0s 0s 444579950e-09 1s 1s 444586070e-09 1s 1s 444586750e-09 0s 0s 444590190e-09 1s 1s 444596350e-09 1s 1s 444596990e-09 0s 0s 444600430e-09 1s 1s 444606630e-09 1s 1s 444607230e-09 0s 0s 444610670e-09 1s 1s 444616910e-09 1s 1s 444617470e-09 0s 0s 444620910e-09 1s 1s 444627190e-09 1s 1s 444627710e-09 0s 0s 444631150e-09 1s 1s 444637470e-09 1s 1s 444637950e-09 0s 0s 444641390e-09 1s 1s 444647750e-09 1s 1s 444648190e-09 0s 0s 444651630e-09 1s 1s 444658030e-09 1s 1s 444658430e-09 0s 0s 444661870e-09 1s 1s 444668310e-09 1s 1s 444668670e-09 0s 0s 444672110e-09 1s 1s 444678590e-09 1s 1s 444678910e-09 0s 0s 444682350e-09 1s 1s 444688870e-09 1s 1s 444689150e-09 0s 0s 444692590e-09 1s 1s 444699150e-09 1s 1s 444699390e-09 0s 0s 444702830e-09 1s 1s 444709430e-09 1s 1s 444709630e-09 0s 0s 444713070e-09 1s 1s 444719710e-09 1s 1s 444719870e-09 0s 0s 444723310e-09 1s 1s 444729990e-09 1s 1s 444730110e-09 0s 0s 444733550e-09 1s 1s 444740270e-09 1s 1s 444740350e-09 0s 0s 444743790e-09 1s 1s 444750550e-09 1s 1s 444750590e-09 0s 0s 444754030e-09 1s 1s 444760830e-09 0s 0s 444764270e-09 1s 1s 444771070e-09 0s 0s 444771110e-09 0s 0s 444774510e-09 1s 1s 444781310e-09 0s 0s 444781390e-09 0s 0s 444784750e-09 1s 1s 444791550e-09 0s 0s 444791670e-09 0s 0s 444794990e-09 1s 1s 444801790e-09 0s 0s 444801950e-09 0s 0s 444805230e-09 1s 1s 444812030e-09 0s 0s 444812230e-09 0s 0s 444815470e-09 1s 1s 444822270e-09 0s 0s 444822510e-09 0s 0s 444825710e-09 1s 1s 444832510e-09 0s 0s 444832790e-09 0s 0s 444835950e-09 1s 1s 444842750e-09 0s 0s 444843070e-09 0s 0s 444846190e-09 1s 1s 444852990e-09 0s 0s 444853350e-09 0s 0s 444856430e-09 1s 1s 444863230e-09 0s 0s 444863630e-09 0s 0s 444866670e-09 1s 1s 444873470e-09 0s 0s 444873910e-09 0s 0s 444876910e-09 1s 1s 444883710e-09 0s 0s 444884190e-09 0s 0s 444887150e-09 1s 1s 444893950e-09 0s 0s 444894470e-09 0s 0s 444897390e-09 1s 1s 444904190e-09 0s 0s 444904750e-09 0s 0s 444907630e-09 1s 1s 444914430e-09 0s 0s 444915030e-09 0s 0s 444917870e-09 1s 1s 444924670e-09 0s 0s 444925310e-09 0s 0s 444928110e-09 1s 1s 444934910e-09 0s 0s 444935590e-09 0s 0s 444938350e-09 1s 1s 444945150e-09 0s 0s 444945870e-09 0s 0s 444948590e-09 1s 1s 444955390e-09 0s 0s 444956150e-09 0s 0s 444958830e-09 1s 1s 444965630e-09 0s 0s 444966430e-09 0s 0s 444969070e-09 1s 1s 444975870e-09 0s 0s 444976710e-09 0s 0s 444979310e-09 1s 1s 444986110e-09 0s 0s 444986990e-09 0s 0s 444989550e-09 1s 1s 444996350e-09 0s 0s 444997270e-09 0s 0s 444999790e-09 1s 1s 445006590e-09 0s 0s 445007550e-09 0s 0s 445010030e-09 1s 1s 445016830e-09 0s 0s 445017830e-09 0s 0s 445020270e-09 1s 1s 445027070e-09 0s 0s 445028110e-09 0s 0s 445030510e-09 1s 1s 445037310e-09 0s 0s 445038390e-09 0s 0s 445040750e-09 1s 1s 445047550e-09 0s 0s 445048670e-09 0s 0s 445050990e-09 1s 1s 445057790e-09 0s 0s 445058950e-09 0s 0s 445061230e-09 1s 1s 445068030e-09 0s 0s 445069230e-09 0s 0s 445071470e-09 1s 1s 445078270e-09 0s 0s 445079510e-09 0s 0s 445081710e-09 1s 1s 445088510e-09 0s 0s 445089790e-09 0s 0s 445091950e-09 1s 1s 445098750e-09 0s 0s 445100070e-09 0s 0s 445102190e-09 1s 1s 445108990e-09 0s 0s 445110350e-09 0s 0s 445112430e-09 1s 1s 445119230e-09 0s 0s 445120630e-09 0s 0s 445122670e-09 1s 1s 445129470e-09 0s 0s 445130910e-09 0s 0s 445132910e-09 1s 1s 445139710e-09 0s 0s 445141190e-09 0s 0s 445143150e-09 1s 1s 445149950e-09 0s 0s 445151470e-09 0s 0s 445153390e-09 1s 1s 445160190e-09 0s 0s 445161750e-09 0s 0s 445163630e-09 1s 1s 445170430e-09 0s 0s 445172030e-09 0s 0s 445173870e-09 1s 1s 445180670e-09 0s 0s 445182310e-09 0s 0s 445184110e-09 1s 1s 445190910e-09 0s 0s 445192590e-09 0s 0s 445194350e-09 1s 1s 445201150e-09 0s 0s 445202870e-09 0s 0s 445204590e-09 1s 1s 445211390e-09 0s 0s 445213150e-09 0s 0s 445214830e-09 1s 1s 445221630e-09 0s 0s 445223430e-09 0s 0s 445225070e-09 1s 1s 445231870e-09 0s 0s 445233710e-09 0s 0s 445235310e-09 1s 1s 445242110e-09 0s 0s 445243990e-09 0s 0s 445245550e-09 1s 1s 445252350e-09 0s 0s 445254270e-09 0s 0s 445255790e-09 1s 1s 445262590e-09 0s 0s 445264550e-09 0s 0s 445266030e-09 1s 1s 445272830e-09 0s 0s 445274830e-09 0s 0s 445276270e-09 1s 1s 445283070e-09 0s 0s 445285110e-09 0s 0s 445286510e-09 1s 1s 445293310e-09 0s 0s 445295390e-09 0s 0s 445296750e-09 1s 1s 445303550e-09 0s 0s 445305670e-09 0s 0s 445306990e-09 1s 1s 445313790e-09 0s 0s 445315950e-09 0s 0s 445317230e-09 1s 1s 445324030e-09 0s 0s 445326230e-09 0s 0s 445327470e-09 1s 1s 445334270e-09 0s 0s 445336510e-09 0s 0s 445337710e-09 1s 1s 445344510e-09 0s 0s 445346790e-09 0s 0s 445347950e-09 1s 1s 445354750e-09 0s 0s 445357070e-09 0s 0s 445358190e-09 1s 1s 445364990e-09 0s 0s 445367350e-09 0s 0s 445368430e-09 1s 1s 445375230e-09 0s 0s 445377630e-09 0s 0s 445378670e-09 1s 1s 445385470e-09 0s 0s 445387910e-09 0s 0s 445388910e-09 1s 1s 445395710e-09 0s 0s 445398190e-09 0s 0s 445399150e-09 1s 1s 445405950e-09 0s 0s 445408470e-09 0s 0s 445409390e-09 1s 1s 445416190e-09 0s 0s 445418750e-09 0s 0s 445419630e-09 1s 1s 445426430e-09 0s 0s 445429030e-09 0s 0s 445429870e-09 1s 1s 445436670e-09 0s 0s 445439310e-09 0s 0s 445440110e-09 1s 1s 445446910e-09 0s 0s 445449590e-09 0s 0s 445450350e-09 1s 1s 445457150e-09 0s 0s 445459870e-09 0s 0s 445460590e-09 1s 1s 445467390e-09 0s 0s 445470150e-09 0s 0s 445470830e-09 1s 1s 445477630e-09 0s 0s 445480430e-09 0s 0s 445481070e-09 1s 1s 445487870e-09 0s 0s 445490710e-09 0s 0s 445491310e-09 1s 1s 445498110e-09 0s 0s 445500990e-09 0s 0s 445501550e-09 1s 1s 445508350e-09 0s 0s 445511270e-09 0s 0s 445511790e-09 1s 1s 445518590e-09 0s 0s 445521550e-09 0s 0s 445522030e-09 1s 1s 445528830e-09 0s 0s 445531830e-09 0s 0s 445532270e-09 1s 1s 445539070e-09 0s 0s 445542110e-09 0s 0s 445542510e-09 1s 1s 445549310e-09 0s 0s 445552390e-09 0s 0s 445552750e-09 1s 1s 445559550e-09 0s 0s 445562670e-09 0s 0s 445562990e-09 1s 1s 445569790e-09 0s 0s 445572950e-09 0s 0s 445573230e-09 1s 1s 445580030e-09 0s 0s 445583230e-09 0s 0s 445583470e-09 1s 1s 445590270e-09 0s 0s 445593510e-09 0s 0s 445593710e-09 1s 1s 445600510e-09 0s 0s 445603790e-09 0s 0s 445603950e-09 1s 1s 445610750e-09 0s 0s 445614070e-09 0s 0s 445614190e-09 1s 1s 445620990e-09 0s 0s 445624350e-09 0s 0s 445624430e-09 1s 1s 445631230e-09 0s 0s 445634630e-09 0s 0s 445634670e-09 1s 1s 445641470e-09 0s 0s 445644910e-09 1s 1s 445644950e-09 1s 1s 445651750e-09 0s 0s 445655150e-09 1s 1s 445655230e-09 1s 1s 445661990e-09 0s 0s 445665390e-09 1s 1s 445665510e-09 1s 1s 445672230e-09 0s 0s 445675630e-09 1s 1s 445675790e-09 1s 1s 445682470e-09 0s 0s 445685870e-09 1s 1s 445686070e-09 1s 1s 445692710e-09 0s 0s 445696110e-09 1s 1s 445696350e-09 1s 1s 445702950e-09 0s 0s 445706350e-09 1s 1s 445706630e-09 1s 1s 445713190e-09 0s 0s 445716590e-09 1s 1s 445716910e-09 1s 1s 445723430e-09 0s 0s 445726830e-09 1s 1s 445727190e-09 1s 1s 445733670e-09 0s 0s 445737070e-09 1s 1s 445737470e-09 1s 1s 445743910e-09 0s 0s 445747310e-09 1s 1s 445747750e-09 1s 1s 445754150e-09 0s 0s 445757550e-09 1s 1s 445758030e-09 1s 1s 445764390e-09 0s 0s 445767790e-09 1s 1s 445768310e-09 1s 1s 445774630e-09 0s 0s 445778030e-09 1s 1s 445778590e-09 1s 1s 445784870e-09 0s 0s 445788270e-09 1s 1s 445788870e-09 1s 1s 445795110e-09 0s 0s 445798510e-09 1s 1s 445799150e-09 1s 1s 445805350e-09 0s 0s 445808750e-09 1s 1s 445809430e-09 1s 1s 445815590e-09 0s 0s 445818990e-09 1s 1s 445819710e-09 1s 1s 445825830e-09 0s 0s 445829230e-09 1s 1s 445829990e-09 1s 1s 445836070e-09 0s 0s 445839470e-09 1s 1s 445840270e-09 1s 1s 445846310e-09 0s 0s 445849710e-09 1s 1s 445850550e-09 1s 1s 445856550e-09 0s 0s 445859950e-09 1s 1s 445860830e-09 1s 1s 445866790e-09 0s 0s 445870190e-09 1s 1s 445871110e-09 1s 1s 445877030e-09 0s 0s 445880430e-09 1s 1s 445881390e-09 1s 1s 445887270e-09 0s 0s 445890670e-09 1s 1s 445891670e-09 1s 1s 445897510e-09 0s 0s 445900910e-09 1s 1s 445901950e-09 1s 1s 445907750e-09 0s 0s 445911150e-09 1s 1s 445912230e-09 1s 1s 445917990e-09 0s 0s 445921390e-09 1s 1s 445922510e-09 1s 1s 445928230e-09 0s 0s 445931630e-09 1s 1s 445932790e-09 1s 1s 445938470e-09 0s 0s 445941870e-09 1s 1s 445943070e-09 1s 1s 445948710e-09 0s 0s 445952110e-09 1s 1s 445953350e-09 1s 1s 445958950e-09 0s 0s 445962350e-09 1s 1s 445963630e-09 1s 1s 445969190e-09 0s 0s 445972590e-09 1s 1s 445973910e-09 1s 1s 445979430e-09 0s 0s 445982830e-09 1s 1s 445984190e-09 1s 1s 445989670e-09 0s 0s 445993070e-09 1s 1s 445994470e-09 1s 1s 445999910e-09 0s 0s 446003310e-09 1s 1s 446004750e-09 1s 1s 446010150e-09 0s 0s 446013550e-09 1s 1s 446015030e-09 1s 1s 446020390e-09 0s 0s 446023790e-09 1s 1s 446025310e-09 1s 1s 446030630e-09 0s 0s 446034030e-09 1s 1s 446035590e-09 1s 1s 446040870e-09 0s 0s 446044270e-09 1s 1s 446045870e-09 1s 1s 446051110e-09 0s 0s 446054510e-09 1s 1s 446056150e-09 1s 1s 446061350e-09 0s 0s 446064750e-09 1s 1s 446066430e-09 1s 1s 446071590e-09 0s 0s 446074990e-09 1s 1s 446076710e-09 1s 1s 446081830e-09 0s 0s 446085230e-09 1s 1s 446086990e-09 1s 1s 446092070e-09 0s 0s 446095470e-09 1s 1s 446097270e-09 1s 1s 446102310e-09 0s 0s 446105710e-09 1s 1s 446107550e-09 1s 1s 446112550e-09 0s 0s 446115950e-09 1s 1s 446117830e-09 1s 1s 446122790e-09 0s 0s 446126190e-09 1s 1s 446128110e-09 1s 1s 446133030e-09 0s 0s 446136430e-09 1s 1s 446138390e-09 1s 1s 446143270e-09 0s 0s 446146670e-09 1s 1s 446148670e-09 1s 1s 446153510e-09 0s 0s 446156910e-09 1s 1s 446158950e-09 1s 1s 446163750e-09 0s 0s 446167150e-09 1s 1s 446169230e-09 1s 1s 446173990e-09 0s 0s 446177390e-09 1s 1s 446179510e-09 1s 1s 446184230e-09 0s 0s 446187630e-09 1s 1s 446189790e-09 1s 1s 446194470e-09 0s 0s 446197870e-09 1s 1s 446200070e-09 1s 1s 446204710e-09 0s 0s 446208110e-09 1s 1s 446210350e-09 1s 1s 446214950e-09 0s 0s 446218350e-09 1s 1s 446220630e-09 1s 1s 446225190e-09 0s 0s 446228590e-09 1s 1s 446230910e-09 1s 1s 446235430e-09 0s 0s 446238830e-09 1s 1s 446241190e-09 1s 1s 446245670e-09 0s 0s 446249070e-09 1s 1s 446251470e-09 1s 1s 446255910e-09 0s 0s 446259310e-09 1s 1s 446261750e-09 1s 1s 446266150e-09 0s 0s 446269550e-09 1s 1s 446272030e-09 1s 1s 446276390e-09 0s 0s 446279790e-09 1s 1s 446282310e-09 1s 1s 446286630e-09 0s 0s 446290030e-09 1s 1s 446292590e-09 1s 1s 446296870e-09 0s 0s 446300270e-09 1s 1s 446302870e-09 1s 1s 446307110e-09 0s 0s 446310510e-09 1s 1s 446313150e-09 1s 1s 446317350e-09 0s 0s 446320750e-09 1s 1s 446323430e-09 1s 1s 446327590e-09 0s 0s 446330990e-09 1s 1s 446333710e-09 1s 1s 446337830e-09 0s 0s 446341230e-09 1s 1s 446343990e-09 1s 1s 446348070e-09 0s 0s 446351470e-09 1s 1s 446354270e-09 1s 1s 446358310e-09 0s 0s 446361710e-09 1s 1s 446364550e-09 1s 1s 446368550e-09 0s 0s 446371950e-09 1s 1s 446374830e-09 1s 1s 446378790e-09 0s 0s 446382190e-09 1s 1s 446385110e-09 1s 1s 446389030e-09 0s 0s 446392430e-09 1s 1s 446395390e-09 1s 1s 446399270e-09 0s 0s 446402670e-09 1s 1s 446405670e-09 1s 1s 446409510e-09 0s 0s 446412910e-09 1s 1s 446415950e-09 1s 1s 446419750e-09 0s 0s 446423150e-09 1s 1s 446426230e-09 1s 1s 446429990e-09 0s 0s 446433390e-09 1s 1s 446436510e-09 1s 1s 446440230e-09 0s 0s 446443630e-09 1s 1s 446446790e-09 1s 1s 446450470e-09 0s 0s 446453870e-09 1s 1s 446457070e-09 1s 1s 446460710e-09 0s 0s 446464110e-09 1s 1s 446467350e-09 1s 1s 446470950e-09 0s 0s 446474350e-09 1s 1s 446477630e-09 1s 1s 446481190e-09 0s 0s 446484590e-09 1s 1s 446487910e-09 1s 1s 446491430e-09 0s 0s 446494830e-09 1s 1s 446498190e-09 1s 1s 446501670e-09 0s 0s 446505070e-09 1s 1s 446508470e-09 1s 1s 446511910e-09 0s 0s 446515310e-09 1s 1s 446518750e-09 1s 1s 446522150e-09 0s 0s 446525550e-09 1s 1s 446529030e-09 1s 1s 446532390e-09 0s 0s 446535790e-09 1s 1s 446539310e-09 1s 1s 446542630e-09 0s 0s 446546030e-09 1s 1s 446549590e-09 1s 1s 446552870e-09 0s 0s 446556270e-09 1s 1s 446559870e-09 1s 1s 446563110e-09 0s 0s 446566510e-09 1s 1s 446570150e-09 1s 1s 446573350e-09 0s 0s 446576750e-09 1s 1s 446580430e-09 1s 1s 446583590e-09 0s 0s 446586990e-09 1s 1s 446590710e-09 1s 1s 446593830e-09 0s 0s 446597230e-09 1s 1s 446600990e-09 1s 1s 446604070e-09 0s 0s 446607470e-09 1s 1s 446611270e-09 1s 1s 446614310e-09 0s 0s 446617710e-09 1s 1s 446621550e-09 1s 1s 446624550e-09 0s 0s 446627950e-09 1s 1s 446631830e-09 1s 1s 446634790e-09 0s 0s 446638190e-09 1s 1s 446642110e-09 1s 1s 446645030e-09 0s 0s 446648430e-09 1s 1s 446652390e-09 1s 1s 446655270e-09 0s 0s 446658670e-09 1s 1s 446662670e-09 1s 1s 446665510e-09 0s 0s 446668910e-09 1s 1s 446672950e-09 1s 1s 446675750e-09 0s 0s 446679150e-09 1s 1s 446683230e-09 1s 1s 446685990e-09 0s 0s 446689390e-09 1s 1s 446693510e-09 1s 1s 446696230e-09 0s 0s 446699630e-09 1s 1s 446703790e-09 1s 1s 446706470e-09 0s 0s 446709870e-09 1s 1s 446714070e-09 1s 1s 446716710e-09 0s 0s 446720110e-09 1s 1s 446724350e-09 1s 1s 446726950e-09 0s 0s 446730350e-09 1s 1s 446734630e-09 1s 1s 446737190e-09 0s 0s 446740590e-09 1s 1s 446744910e-09 1s 1s 446747430e-09 0s 0s 446750830e-09 1s 1s 446755190e-09 1s 1s 446757670e-09 0s 0s 446761070e-09 1s 1s 446765470e-09 1s 1s 446767910e-09 0s 0s 446771310e-09 1s 1s 446775750e-09 1s 1s 446778150e-09 0s 0s 446781550e-09 1s 1s 446786030e-09 1s 1s 446788390e-09 0s 0s 446791790e-09 1s 1s 446796310e-09 1s 1s 446798630e-09 0s 0s 446802030e-09 1s 1s 446806590e-09 1s 1s 446808870e-09 0s 0s 446812270e-09 1s 1s 446816870e-09 1s 1s 446819110e-09 0s 0s 446822510e-09 1s 1s 446827150e-09 1s 1s 446829350e-09 0s 0s 446832750e-09 1s 1s 446837430e-09 1s 1s 446839590e-09 0s 0s 446842990e-09 1s 1s 446847710e-09 1s 1s 446849830e-09 0s 0s 446853230e-09 1s 1s 446857990e-09 1s 1s 446860070e-09 0s 0s 446863470e-09 1s 1s 446868270e-09 1s 1s 446870310e-09 0s 0s 446873710e-09 1s 1s 446878550e-09 1s 1s 446880550e-09 0s 0s 446883950e-09 1s 1s 446888830e-09 1s 1s 446890790e-09 0s 0s 446894190e-09 1s 1s 446899110e-09 1s 1s 446901030e-09 0s 0s 446904430e-09 1s 1s 446909390e-09 1s 1s 446911270e-09 0s 0s 446914670e-09 1s 1s 446919670e-09 1s 1s 446921510e-09 0s 0s 446924910e-09 1s 1s 446929950e-09 1s 1s 446931750e-09 0s 0s 446935150e-09 1s 1s 446940230e-09 1s 1s 446941990e-09 0s 0s 446945390e-09 1s 1s 446950510e-09 1s 1s 446952230e-09 0s 0s 446955630e-09 1s 1s 446960790e-09 1s 1s 446962470e-09 0s 0s 446965870e-09 1s 1s 446971070e-09 1s 1s 446972710e-09 0s 0s 446976110e-09 1s 1s 446981350e-09 1s 1s 446982950e-09 0s 0s 446986350e-09 1s 1s 446991630e-09 1s 1s 446993190e-09 0s 0s 446996590e-09 1s 1s 447001910e-09 1s 1s 447003430e-09 0s 0s 447006830e-09 1s 1s 447012190e-09 1s 1s 447013670e-09 0s 0s 447017070e-09 1s 1s 447022470e-09 1s 1s 447023910e-09 0s 0s 447027310e-09 1s 1s 447032750e-09 1s 1s 447034150e-09 0s 0s 447037550e-09 1s 1s 447043030e-09 1s 1s 447044390e-09 0s 0s 447047790e-09 1s 1s 447053310e-09 1s 1s 447054630e-09 0s 0s 447058030e-09 1s 1s 447063590e-09 1s 1s 447064870e-09 0s 0s 447068270e-09 1s 1s 447073870e-09 1s 1s 447075110e-09 0s 0s 447078510e-09 1s 1s 447084150e-09 1s 1s 447085350e-09 0s 0s 447088750e-09 1s 1s 447094430e-09 1s 1s 447095590e-09 0s 0s 447098990e-09 1s 1s 447104710e-09 1s 1s 447105830e-09 0s 0s 447109230e-09 1s 1s 447114990e-09 1s 1s 447116070e-09 0s 0s 447119470e-09 1s 1s 447125270e-09 1s 1s 447126310e-09 0s 0s 447129710e-09 1s 1s 447135550e-09 1s 1s 447136550e-09 0s 0s 447139950e-09 1s 1s 447145830e-09 1s 1s 447146790e-09 0s 0s 447150190e-09 1s 1s 447156110e-09 1s 1s 447157030e-09 0s 0s 447160430e-09 1s 1s 447166390e-09 1s 1s 447167270e-09 0s 0s 447170670e-09 1s 1s 447176670e-09 1s 1s 447177510e-09 0s 0s 447180910e-09 1s 1s 447186950e-09 1s 1s 447187750e-09 0s 0s 447191150e-09 1s 1s 447197230e-09 1s 1s 447197990e-09 0s 0s 447201390e-09 1s 1s 447207510e-09 1s 1s 447208230e-09 0s 0s 447211630e-09 1s 1s 447217790e-09 1s 1s 447218470e-09 0s 0s 447221870e-09 1s 1s 447228070e-09 1s 1s 447228710e-09 0s 0s 447232110e-09 1s 1s 447238350e-09 1s 1s 447238950e-09 0s 0s 447242350e-09 1s 1s 447248630e-09 1s 1s 447249190e-09 0s 0s 447252590e-09 1s 1s 447258910e-09 1s 1s 447259430e-09 0s 0s 447262830e-09 1s 1s 447269190e-09 1s 1s 447269670e-09 0s 0s 447273070e-09 1s 1s 447279470e-09 1s 1s 447279910e-09 0s 0s 447283310e-09 1s 1s 447289750e-09 1s 1s 447290150e-09 0s 0s 447293550e-09 1s 1s 447300030e-09 1s 1s 447300390e-09 0s 0s 447303790e-09 1s 1s 447310310e-09 1s 1s 447310630e-09 0s 0s 447314030e-09 1s 1s 447320590e-09 1s 1s 447320870e-09 0s 0s 447324270e-09 1s 1s 447330870e-09 1s 1s 447331110e-09 0s 0s 447334510e-09 1s 1s 447341150e-09 1s 1s 447341350e-09 0s 0s 447344750e-09 1s 1s 447351430e-09 1s 1s 447351590e-09 0s 0s 447354990e-09 1s 1s 447361710e-09 1s 1s 447361830e-09 0s 0s 447365230e-09 1s 1s 447371990e-09 1s 1s 447372070e-09 0s 0s 447375470e-09 1s 1s 447382270e-09 1s 1s 447382310e-09 0s 0s 447385710e-09 1s 1s 447392550e-09 0s 0s 447395950e-09 1s 1s 447402790e-09 0s 0s 447402830e-09 0s 0s 447406190e-09 1s 1s 447413030e-09 0s 0s 447413110e-09 0s 0s 447416430e-09 1s 1s 447423270e-09 0s 0s 447423390e-09 0s 0s 447426670e-09 1s 1s 447433510e-09 0s 0s 447433670e-09 0s 0s 447436910e-09 1s 1s 447443750e-09 0s 0s 447443950e-09 0s 0s 447447150e-09 1s 1s 447453990e-09 0s 0s 447454230e-09 0s 0s 447457390e-09 1s 1s 447464230e-09 0s 0s 447464510e-09 0s 0s 447467630e-09 1s 1s 447474470e-09 0s 0s 447474790e-09 0s 0s 447477870e-09 1s 1s 447484710e-09 0s 0s 447485070e-09 0s 0s 447488110e-09 1s 1s 447494950e-09 0s 0s 447495350e-09 0s 0s 447498350e-09 1s 1s 447505190e-09 0s 0s 447505630e-09 0s 0s 447508590e-09 1s 1s 447515430e-09 0s 0s 447515910e-09 0s 0s 447518830e-09 1s 1s 447525670e-09 0s 0s 447526190e-09 0s 0s 447529070e-09 1s 1s 447535910e-09 0s 0s 447536470e-09 0s 0s 447539310e-09 1s 1s 447546150e-09 0s 0s 447546750e-09 0s 0s 447549550e-09 1s 1s 447556390e-09 0s 0s 447557030e-09 0s 0s 447559790e-09 1s 1s 447566630e-09 0s 0s 447567310e-09 0s 0s 447570030e-09 1s 1s 447576870e-09 0s 0s 447577590e-09 0s 0s 447580270e-09 1s 1s 447587110e-09 0s 0s 447587870e-09 0s 0s 447590510e-09 1s 1s 447597350e-09 0s 0s 447598150e-09 0s 0s 447600750e-09 1s 1s 447607590e-09 0s 0s 447608430e-09 0s 0s 447610990e-09 1s 1s 447617830e-09 0s 0s 447618710e-09 0s 0s 447621230e-09 1s 1s 447628070e-09 0s 0s 447628990e-09 0s 0s 447631470e-09 1s 1s 447638310e-09 0s 0s 447639270e-09 0s 0s 447641710e-09 1s 1s 447648550e-09 0s 0s 447649550e-09 0s 0s 447651950e-09 1s 1s 447658790e-09 0s 0s 447659830e-09 0s 0s 447662190e-09 1s 1s 447669030e-09 0s 0s 447670110e-09 0s 0s 447672430e-09 1s 1s 447679270e-09 0s 0s 447680390e-09 0s 0s 447682670e-09 1s 1s 447689510e-09 0s 0s 447690670e-09 0s 0s 447692910e-09 1s 1s 447699750e-09 0s 0s 447700950e-09 0s 0s 447703150e-09 1s 1s 447709990e-09 0s 0s 447711230e-09 0s 0s 447713390e-09 1s 1s 447720230e-09 0s 0s 447721510e-09 0s 0s 447723630e-09 1s 1s 447730470e-09 0s 0s 447731790e-09 0s 0s 447733870e-09 1s 1s 447740710e-09 0s 0s 447742070e-09 0s 0s 447744110e-09 1s 1s 447750950e-09 0s 0s 447752350e-09 0s 0s 447754350e-09 1s 1s 447761190e-09 0s 0s 447762630e-09 0s 0s 447764590e-09 1s 1s 447771430e-09 0s 0s 447772910e-09 0s 0s 447774830e-09 1s 1s 447781670e-09 0s 0s 447783190e-09 0s 0s 447785070e-09 1s 1s 447791910e-09 0s 0s 447793470e-09 0s 0s 447795310e-09 1s 1s 447802150e-09 0s 0s 447803750e-09 0s 0s 447805550e-09 1s 1s 447812390e-09 0s 0s 447814030e-09 0s 0s 447815790e-09 1s 1s 447822630e-09 0s 0s 447824310e-09 0s 0s 447826030e-09 1s 1s 447832870e-09 0s 0s 447834590e-09 0s 0s 447836270e-09 1s 1s 447843110e-09 0s 0s 447844870e-09 0s 0s 447846510e-09 1s 1s 447853350e-09 0s 0s 447855150e-09 0s 0s 447856750e-09 1s 1s 447863590e-09 0s 0s 447865430e-09 0s 0s 447866990e-09 1s 1s 447873830e-09 0s 0s 447875710e-09 0s 0s 447877230e-09 1s 1s 447884070e-09 0s 0s 447885990e-09 0s 0s 447887470e-09 1s 1s 447894310e-09 0s 0s 447896270e-09 0s 0s 447897710e-09 1s 1s 447904550e-09 0s 0s 447906550e-09 0s 0s 447907950e-09 1s 1s 447914790e-09 0s 0s 447916830e-09 0s 0s 447918190e-09 1s 1s 447925030e-09 0s 0s 447927110e-09 0s 0s 447928430e-09 1s 1s 447935270e-09 0s 0s 447937390e-09 0s 0s 447938670e-09 1s 1s 447945510e-09 0s 0s 447947670e-09 0s 0s 447948910e-09 1s 1s 447955750e-09 0s 0s 447957950e-09 0s 0s 447959150e-09 1s 1s 447965990e-09 0s 0s 447968230e-09 0s 0s 447969390e-09 1s 1s 447976230e-09 0s 0s 447978510e-09 0s 0s 447979630e-09 1s 1s 447986470e-09 0s 0s 447988790e-09 0s 0s 447989870e-09 1s 1s 447996710e-09 0s 0s 447999070e-09 0s 0s 448000110e-09 1s 1s 448006950e-09 0s 0s 448009350e-09 0s 0s 448010350e-09 1s 1s 448017190e-09 0s 0s 448019630e-09 0s 0s 448020590e-09 1s 1s 448027430e-09 0s 0s 448029910e-09 0s 0s 448030830e-09 1s 1s 448037670e-09 0s 0s 448040190e-09 0s 0s 448041070e-09 1s 1s 448047910e-09 0s 0s 448050470e-09 0s 0s 448051310e-09 1s 1s 448058150e-09 0s 0s 448060750e-09 0s 0s 448061550e-09 1s 1s 448068390e-09 0s 0s 448071030e-09 0s 0s 448071790e-09 1s 1s 448078630e-09 0s 0s 448081310e-09 0s 0s 448082030e-09 1s 1s 448088870e-09 0s 0s 448091590e-09 0s 0s 448092270e-09 1s 1s 448099110e-09 0s 0s 448101870e-09 0s 0s 448102510e-09 1s 1s 448109350e-09 0s 0s 448112150e-09 0s 0s 448112750e-09 1s 1s 448119590e-09 0s 0s 448122430e-09 0s 0s 448122990e-09 1s 1s 448129830e-09 0s 0s 448132710e-09 0s 0s 448133230e-09 1s 1s 448140070e-09 0s 0s 448142990e-09 0s 0s 448143470e-09 1s 1s 448150310e-09 0s 0s 448153270e-09 0s 0s 448153710e-09 1s 1s 448160550e-09 0s 0s 448163550e-09 0s 0s 448163950e-09 1s 1s 448170790e-09 0s 0s 448173830e-09 0s 0s 448174190e-09 1s 1s 448181030e-09 0s 0s 448184110e-09 0s 0s 448184430e-09 1s 1s 448191270e-09 0s 0s 448194390e-09 0s 0s 448194670e-09 1s 1s 448201510e-09 0s 0s 448204670e-09 0s 0s 448204910e-09 1s 1s 448211750e-09 0s 0s 448214950e-09 0s 0s 448215150e-09 1s 1s 448221990e-09 0s 0s 448225230e-09 0s 0s 448225390e-09 1s 1s 448232230e-09 0s 0s 448235510e-09 0s 0s 448235630e-09 1s 1s 448242470e-09 0s 0s 448245790e-09 0s 0s 448245870e-09 1s 1s 448252710e-09 0s 0s 448256070e-09 0s 0s 448256110e-09 1s 1s 448262950e-09 0s 0s 448266350e-09 1s 1s 448266390e-09 1s 1s 448273230e-09 0s 0s 448276590e-09 1s 1s 448276670e-09 1s 1s 448283470e-09 0s 0s 448286830e-09 1s 1s 448286950e-09 1s 1s 448293710e-09 0s 0s 448297070e-09 1s 1s 448297230e-09 1s 1s 448303950e-09 0s 0s 448307310e-09 1s 1s 448307510e-09 1s 1s 448314190e-09 0s 0s 448317550e-09 1s 1s 448317790e-09 1s 1s 448324430e-09 0s 0s 448327790e-09 1s 1s 448328070e-09 1s 1s 448334670e-09 0s 0s 448338030e-09 1s 1s 448338350e-09 1s 1s 448344910e-09 0s 0s 448348270e-09 1s 1s 448348630e-09 1s 1s 448355150e-09 0s 0s 448358510e-09 1s 1s 448358910e-09 1s 1s 448365390e-09 0s 0s 448368750e-09 1s 1s 448369190e-09 1s 1s 448375630e-09 0s 0s 448378990e-09 1s 1s 448379470e-09 1s 1s 448385870e-09 0s 0s 448389230e-09 1s 1s 448389750e-09 1s 1s 448396110e-09 0s 0s 448399470e-09 1s 1s 448400030e-09 1s 1s 448406350e-09 0s 0s 448409710e-09 1s 1s 448410310e-09 1s 1s 448416590e-09 0s 0s 448419950e-09 1s 1s 448420590e-09 1s 1s 448426830e-09 0s 0s 448430190e-09 1s 1s 448430870e-09 1s 1s 448437070e-09 0s 0s 448440430e-09 1s 1s 448441150e-09 1s 1s 448447310e-09 0s 0s 448450670e-09 1s 1s 448451430e-09 1s 1s 448457550e-09 0s 0s 448460910e-09 1s 1s 448461710e-09 1s 1s 448467790e-09 0s 0s 448471150e-09 1s 1s 448471990e-09 1s 1s 448478030e-09 0s 0s 448481390e-09 1s 1s 448482270e-09 1s 1s 448488270e-09 0s 0s 448491630e-09 1s 1s 448492550e-09 1s 1s 448498510e-09 0s 0s 448501870e-09 1s 1s 448502830e-09 1s 1s 448508750e-09 0s 0s 448512110e-09 1s 1s 448513110e-09 1s 1s 448518990e-09 0s 0s 448522350e-09 1s 1s 448523390e-09 1s 1s 448529230e-09 0s 0s 448532590e-09 1s 1s 448533670e-09 1s 1s 448539470e-09 0s 0s 448542830e-09 1s 1s 448543950e-09 1s 1s 448549710e-09 0s 0s 448553070e-09 1s 1s 448554230e-09 1s 1s 448559950e-09 0s 0s 448563310e-09 1s 1s 448564510e-09 1s 1s 448570190e-09 0s 0s 448573550e-09 1s 1s 448574790e-09 1s 1s 448580430e-09 0s 0s 448583790e-09 1s 1s 448585070e-09 1s 1s 448590670e-09 0s 0s 448594030e-09 1s 1s 448595350e-09 1s 1s 448600910e-09 0s 0s 448604270e-09 1s 1s 448605630e-09 1s 1s 448611150e-09 0s 0s 448614510e-09 1s 1s 448615910e-09 1s 1s 448621390e-09 0s 0s 448624750e-09 1s 1s 448626190e-09 1s 1s 448631630e-09 0s 0s 448634990e-09 1s 1s 448636470e-09 1s 1s 448641870e-09 0s 0s 448645230e-09 1s 1s 448646750e-09 1s 1s 448652110e-09 0s 0s 448655470e-09 1s 1s 448657030e-09 1s 1s 448662350e-09 0s 0s 448665710e-09 1s 1s 448667310e-09 1s 1s 448672590e-09 0s 0s 448675950e-09 1s 1s 448677590e-09 1s 1s 448682830e-09 0s 0s 448686190e-09 1s 1s 448687870e-09 1s 1s 448693070e-09 0s 0s 448696430e-09 1s 1s 448698150e-09 1s 1s 448703310e-09 0s 0s 448706670e-09 1s 1s 448708430e-09 1s 1s 448713550e-09 0s 0s 448716910e-09 1s 1s 448718710e-09 1s 1s 448723790e-09 0s 0s 448727150e-09 1s 1s 448728990e-09 1s 1s 448734030e-09 0s 0s 448737390e-09 1s 1s 448739270e-09 1s 1s 448744270e-09 0s 0s 448747630e-09 1s 1s 448749550e-09 1s 1s 448754510e-09 0s 0s 448757870e-09 1s 1s 448759830e-09 1s 1s 448764750e-09 0s 0s 448768110e-09 1s 1s 448770110e-09 1s 1s 448774990e-09 0s 0s 448778350e-09 1s 1s 448780390e-09 1s 1s 448785230e-09 0s 0s 448788590e-09 1s 1s 448790670e-09 1s 1s 448795470e-09 0s 0s 448798830e-09 1s 1s 448800950e-09 1s 1s 448805710e-09 0s 0s 448809070e-09 1s 1s 448811230e-09 1s 1s 448815950e-09 0s 0s 448819310e-09 1s 1s 448821510e-09 1s 1s 448826190e-09 0s 0s 448829550e-09 1s 1s 448831790e-09 1s 1s 448836430e-09 0s 0s 448839790e-09 1s 1s 448842070e-09 1s 1s 448846670e-09 0s 0s 448850030e-09 1s 1s 448852350e-09 1s 1s 448856910e-09 0s 0s 448860270e-09 1s 1s 448862630e-09 1s 1s 448867150e-09 0s 0s 448870510e-09 1s 1s 448872910e-09 1s 1s 448877390e-09 0s 0s 448880750e-09 1s 1s 448883190e-09 1s 1s 448887630e-09 0s 0s 448890990e-09 1s 1s 448893470e-09 1s 1s 448897870e-09 0s 0s 448901230e-09 1s 1s 448903750e-09 1s 1s 448908110e-09 0s 0s 448911470e-09 1s 1s 448914030e-09 1s 1s 448918350e-09 0s 0s 448921710e-09 1s 1s 448924310e-09 1s 1s 448928590e-09 0s 0s 448931950e-09 1s 1s 448934590e-09 1s 1s 448938830e-09 0s 0s 448942190e-09 1s 1s 448944870e-09 1s 1s 448949070e-09 0s 0s 448952430e-09 1s 1s 448955150e-09 1s 1s 448959310e-09 0s 0s 448962670e-09 1s 1s 448965430e-09 1s 1s 448969550e-09 0s 0s 448972910e-09 1s 1s 448975710e-09 1s 1s 448979790e-09 0s 0s 448983150e-09 1s 1s 448985990e-09 1s 1s 448990030e-09 0s 0s 448993390e-09 1s 1s 448996270e-09 1s 1s 449000270e-09 0s 0s 449003630e-09 1s 1s 449006550e-09 1s 1s 449010510e-09 0s 0s 449013870e-09 1s 1s 449016830e-09 1s 1s 449020750e-09 0s 0s 449024110e-09 1s 1s 449027110e-09 1s 1s 449030990e-09 0s 0s 449034350e-09 1s 1s 449037390e-09 1s 1s 449041230e-09 0s 0s 449044590e-09 1s 1s 449047670e-09 1s 1s 449051470e-09 0s 0s 449054830e-09 1s 1s 449057950e-09 1s 1s 449061710e-09 0s 0s 449065070e-09 1s 1s 449068230e-09 1s 1s 449071950e-09 0s 0s 449075310e-09 1s 1s 449078510e-09 1s 1s 449082190e-09 0s 0s 449085550e-09 1s 1s 449088790e-09 1s 1s 449092430e-09 0s 0s 449095790e-09 1s 1s 449099070e-09 1s 1s 449102670e-09 0s 0s 449106030e-09 1s 1s 449109350e-09 1s 1s 449112910e-09 0s 0s 449116270e-09 1s 1s 449119630e-09 1s 1s 449123150e-09 0s 0s 449126510e-09 1s 1s 449129910e-09 1s 1s 449133390e-09 0s 0s 449136750e-09 1s 1s 449140190e-09 1s 1s 449143630e-09 0s 0s 449146990e-09 1s 1s 449150470e-09 1s 1s 449153870e-09 0s 0s 449157230e-09 1s 1s 449160750e-09 1s 1s 449164110e-09 0s 0s 449167470e-09 1s 1s 449171030e-09 1s 1s 449174350e-09 0s 0s 449177710e-09 1s 1s 449181310e-09 1s 1s 449184590e-09 0s 0s 449187950e-09 1s 1s 449191590e-09 1s 1s 449194830e-09 0s 0s 449198190e-09 1s 1s 449201870e-09 1s 1s 449205070e-09 0s 0s 449208430e-09 1s 1s 449212150e-09 1s 1s 449215310e-09 0s 0s 449218670e-09 1s 1s 449222430e-09 1s 1s 449225550e-09 0s 0s 449228910e-09 1s 1s 449232710e-09 1s 1s 449235790e-09 0s 0s 449239150e-09 1s 1s 449242990e-09 1s 1s 449246030e-09 0s 0s 449249390e-09 1s 1s 449253270e-09 1s 1s 449256270e-09 0s 0s 449259630e-09 1s 1s 449263550e-09 1s 1s 449266510e-09 0s 0s 449269870e-09 1s 1s 449273830e-09 1s 1s 449276750e-09 0s 0s 449280110e-09 1s 1s 449284110e-09 1s 1s 449286990e-09 0s 0s 449290350e-09 1s 1s 449294390e-09 1s 1s 449297230e-09 0s 0s 449300590e-09 1s 1s 449304670e-09 1s 1s 449307470e-09 0s 0s 449310830e-09 1s 1s 449314950e-09 1s 1s 449317710e-09 0s 0s 449321070e-09 1s 1s 449325230e-09 1s 1s 449327950e-09 0s 0s 449331310e-09 1s 1s 449335510e-09 1s 1s 449338190e-09 0s 0s 449341550e-09 1s 1s 449345790e-09 1s 1s 449348430e-09 0s 0s 449351790e-09 1s 1s 449356070e-09 1s 1s 449358670e-09 0s 0s 449362030e-09 1s 1s 449366350e-09 1s 1s 449368910e-09 0s 0s 449372270e-09 1s 1s 449376630e-09 1s 1s 449379150e-09 0s 0s 449382510e-09 1s 1s 449386910e-09 1s 1s 449389390e-09 0s 0s 449392750e-09 1s 1s 449397190e-09 1s 1s 449399630e-09 0s 0s 449402990e-09 1s 1s 449407470e-09 1s 1s 449409870e-09 0s 0s 449413230e-09 1s 1s 449417750e-09 1s 1s 449420110e-09 0s 0s 449423470e-09 1s 1s 449428030e-09 1s 1s 449430350e-09 0s 0s 449433710e-09 1s 1s 449438310e-09 1s 1s 449440590e-09 0s 0s 449443950e-09 1s 1s 449448590e-09 1s 1s 449450830e-09 0s 0s 449454190e-09 1s 1s 449458870e-09 1s 1s 449461070e-09 0s 0s 449464430e-09 1s 1s 449469150e-09 1s 1s 449471310e-09 0s 0s 449474670e-09 1s 1s 449479430e-09 1s 1s 449481550e-09 0s 0s 449484910e-09 1s 1s 449489710e-09 1s 1s 449491790e-09 0s 0s 449495150e-09 1s 1s 449499990e-09 1s 1s 449502030e-09 0s 0s 449505390e-09 1s 1s 449510270e-09 1s 1s 449512270e-09 0s 0s 449515630e-09 1s 1s 449520550e-09 1s 1s 449522510e-09 0s 0s 449525870e-09 1s 1s 449530830e-09 1s 1s 449532750e-09 0s 0s 449536110e-09 1s 1s 449541110e-09 1s 1s 449542990e-09 0s 0s 449546350e-09 1s 1s 449551390e-09 1s 1s 449553230e-09 0s 0s 449556590e-09 1s 1s 449561670e-09 1s 1s 449563470e-09 0s 0s 449566830e-09 1s 1s 449571950e-09 1s 1s 449573710e-09 0s 0s 449577070e-09 1s 1s 449582230e-09 1s 1s 449583950e-09 0s 0s 449587310e-09 1s 1s 449592510e-09 1s 1s 449594190e-09 0s 0s 449597550e-09 1s 1s 449602790e-09 1s 1s 449604430e-09 0s 0s 449607790e-09 1s 1s 449613070e-09 1s 1s 449614670e-09 0s 0s 449618030e-09 1s 1s 449623350e-09 1s 1s 449624910e-09 0s 0s 449628270e-09 1s 1s 449633630e-09 1s 1s 449635150e-09 0s 0s 449638510e-09 1s 1s 449643910e-09 1s 1s 449645390e-09 0s 0s 449648750e-09 1s 1s 449654190e-09 1s 1s 449655630e-09 0s 0s 449658990e-09 1s 1s 449664470e-09 1s 1s 449665870e-09 0s 0s 449669230e-09 1s 1s 449674750e-09 1s 1s 449676110e-09 0s 0s 449679470e-09 1s 1s 449685030e-09 1s 1s 449686350e-09 0s 0s 449689710e-09 1s 1s 449695310e-09 1s 1s 449696590e-09 0s 0s 449699950e-09 1s 1s 449705590e-09 1s 1s 449706830e-09 0s 0s 449710190e-09 1s 1s 449715870e-09 1s 1s 449717070e-09 0s 0s 449720430e-09 1s 1s 449726150e-09 1s 1s 449727310e-09 0s 0s 449730670e-09 1s 1s 449736430e-09 1s 1s 449737550e-09 0s 0s 449740910e-09 1s 1s 449746710e-09 1s 1s 449747790e-09 0s 0s 449751150e-09 1s 1s 449756990e-09 1s 1s 449758030e-09 0s 0s 449761390e-09 1s 1s 449767270e-09 1s 1s 449768270e-09 0s 0s 449771630e-09 1s 1s 449777550e-09 1s 1s 449778510e-09 0s 0s 449781870e-09 1s 1s 449787830e-09 1s 1s 449788750e-09 0s 0s 449792110e-09 1s 1s 449798110e-09 1s 1s 449798990e-09 0s 0s 449802350e-09 1s 1s 449808390e-09 1s 1s 449809230e-09 0s 0s 449812590e-09 1s 1s 449818670e-09 1s 1s 449819470e-09 0s 0s 449822830e-09 1s 1s 449828950e-09 1s 1s 449829710e-09 0s 0s 449833070e-09 1s 1s 449839230e-09 1s 1s 449839950e-09 0s 0s 449843310e-09 1s 1s 449849510e-09 1s 1s 449850190e-09 0s 0s 449853550e-09 1s 1s 449859790e-09 1s 1s 449860430e-09 0s 0s 449863790e-09 1s 1s 449870070e-09 1s 1s 449870670e-09 0s 0s 449874030e-09 1s 1s 449880350e-09 1s 1s 449880910e-09 0s 0s 449884270e-09 1s 1s 449890630e-09 1s 1s 449891150e-09 0s 0s 449894510e-09 1s 1s 449900910e-09 1s 1s 449901390e-09 0s 0s 449904750e-09 1s 1s 449911190e-09 1s 1s 449911630e-09 0s 0s 449914990e-09 1s 1s 449921470e-09 1s 1s 449921870e-09 0s 0s 449925230e-09 1s 1s 449931750e-09 1s 1s 449932110e-09 0s 0s 449935470e-09 1s 1s 449942030e-09 1s 1s 449942350e-09 0s 0s 449945710e-09 1s 1s 449952310e-09 1s 1s 449952590e-09 0s 0s 449955950e-09 1s 1s 449962590e-09 1s 1s 449962830e-09 0s 0s 449966190e-09 1s 1s 449972870e-09 1s 1s 449973070e-09 0s 0s 449976430e-09 1s 1s 449983150e-09 1s 1s 449983310e-09 0s 0s 449986670e-09 1s 1s 449993430e-09 1s 1s 449993550e-09 0s 0s 449996910e-09 1s 1s 450003710e-09 1s 1s 450003790e-09 0s 0s 450007150e-09 1s 1s 450013990e-09 1s 1s 450014030e-09 0s 0s 450017390e-09 1s 1s 450024270e-09 0s 0s 450027630e-09 1s 1s 450034510e-09 0s 0s 450034550e-09 0s 0s 450037870e-09 1s 1s 450044750e-09 0s 0s 450044830e-09 0s 0s 450048110e-09 1s 1s 450054990e-09 0s 0s 450055110e-09 0s 0s 450058350e-09 1s 1s 450065230e-09 0s 0s 450065390e-09 0s 0s 450068590e-09 1s 1s 450075470e-09 0s 0s 450075670e-09 0s 0s 450078830e-09 1s 1s 450085710e-09 0s 0s 450085950e-09 0s 0s 450089070e-09 1s 1s 450095950e-09 0s 0s 450096230e-09 0s 0s 450099310e-09 1s 1s 450106190e-09 0s 0s 450106510e-09 0s 0s 450109550e-09 1s 1s 450116430e-09 0s 0s 450116790e-09 0s 0s 450119790e-09 1s 1s 450126670e-09 0s 0s 450127070e-09 0s 0s 450130030e-09 1s 1s 450136910e-09 0s 0s 450137350e-09 0s 0s 450140270e-09 1s 1s 450147150e-09 0s 0s 450147630e-09 0s 0s 450150510e-09 1s 1s 450157390e-09 0s 0s 450157910e-09 0s 0s 450160750e-09 1s 1s 450167630e-09 0s 0s 450168190e-09 0s 0s 450170990e-09 1s 1s 450177870e-09 0s 0s 450178470e-09 0s 0s 450181230e-09 1s 1s 450188110e-09 0s 0s 450188750e-09 0s 0s 450191470e-09 1s 1s 450198350e-09 0s 0s 450199030e-09 0s 0s 450201710e-09 1s 1s 450208590e-09 0s 0s 450209310e-09 0s 0s 450211950e-09 1s 1s 450218830e-09 0s 0s 450219590e-09 0s 0s 450222190e-09 1s 1s 450229070e-09 0s 0s 450229870e-09 0s 0s 450232430e-09 1s 1s 450239310e-09 0s 0s 450240150e-09 0s 0s 450242670e-09 1s 1s 450249550e-09 0s 0s 450250430e-09 0s 0s 450252910e-09 1s 1s 450259790e-09 0s 0s 450260710e-09 0s 0s 450263150e-09 1s 1s 450270030e-09 0s 0s 450270990e-09 0s 0s 450273390e-09 1s 1s 450280270e-09 0s 0s 450281270e-09 0s 0s 450283630e-09 1s 1s 450290510e-09 0s 0s 450291550e-09 0s 0s 450293870e-09 1s 1s 450300750e-09 0s 0s 450301830e-09 0s 0s 450304110e-09 1s 1s 450310990e-09 0s 0s 450312110e-09 0s 0s 450314350e-09 1s 1s 450321230e-09 0s 0s 450322390e-09 0s 0s 450324590e-09 1s 1s 450331470e-09 0s 0s 450332670e-09 0s 0s 450334830e-09 1s 1s 450341710e-09 0s 0s 450342950e-09 0s 0s 450345070e-09 1s 1s 450351950e-09 0s 0s 450353230e-09 0s 0s 450355310e-09 1s 1s 450362190e-09 0s 0s 450363510e-09 0s 0s 450365550e-09 1s 1s 450372430e-09 0s 0s 450373790e-09 0s 0s 450375790e-09 1s 1s 450382670e-09 0s 0s 450384070e-09 0s 0s 450386030e-09 1s 1s 450392910e-09 0s 0s 450394350e-09 0s 0s 450396270e-09 1s 1s 450403150e-09 0s 0s 450404630e-09 0s 0s 450406510e-09 1s 1s 450413390e-09 0s 0s 450414910e-09 0s 0s 450416750e-09 1s 1s 450423630e-09 0s 0s 450425190e-09 0s 0s 450426990e-09 1s 1s 450433870e-09 0s 0s 450435470e-09 0s 0s 450437230e-09 1s 1s 450444110e-09 0s 0s 450445750e-09 0s 0s 450447470e-09 1s 1s 450454350e-09 0s 0s 450456030e-09 0s 0s 450457710e-09 1s 1s 450464590e-09 0s 0s 450466310e-09 0s 0s 450467950e-09 1s 1s 450474830e-09 0s 0s 450476590e-09 0s 0s 450478190e-09 1s 1s 450485070e-09 0s 0s 450486870e-09 0s 0s 450488430e-09 1s 1s 450495310e-09 0s 0s 450497150e-09 0s 0s 450498670e-09 1s 1s 450505550e-09 0s 0s 450507430e-09 0s 0s 450508910e-09 1s 1s 450515790e-09 0s 0s 450517710e-09 0s 0s 450519150e-09 1s 1s 450526030e-09 0s 0s 450527990e-09 0s 0s 450529390e-09 1s 1s 450536270e-09 0s 0s 450538270e-09 0s 0s 450539630e-09 1s 1s 450546510e-09 0s 0s 450548550e-09 0s 0s 450549870e-09 1s 1s 450556750e-09 0s 0s 450558830e-09 0s 0s 450560110e-09 1s 1s 450566990e-09 0s 0s 450569110e-09 0s 0s 450570350e-09 1s 1s 450577230e-09 0s 0s 450579390e-09 0s 0s 450580590e-09 1s 1s 450587470e-09 0s 0s 450589670e-09 0s 0s 450590830e-09 1s 1s 450597710e-09 0s 0s 450599950e-09 0s 0s 450601070e-09 1s 1s 450607950e-09 0s 0s 450610230e-09 0s 0s 450611310e-09 1s 1s 450618190e-09 0s 0s 450620510e-09 0s 0s 450621550e-09 1s 1s 450628430e-09 0s 0s 450630790e-09 0s 0s 450631790e-09 1s 1s 450638670e-09 0s 0s 450641070e-09 0s 0s 450642030e-09 1s 1s 450648910e-09 0s 0s 450651350e-09 0s 0s 450652270e-09 1s 1s 450659150e-09 0s 0s 450661630e-09 0s 0s 450662510e-09 1s 1s 450669390e-09 0s 0s 450671910e-09 0s 0s 450672750e-09 1s 1s 450679630e-09 0s 0s 450682190e-09 0s 0s 450682990e-09 1s 1s 450689870e-09 0s 0s 450692470e-09 0s 0s 450693230e-09 1s 1s 450700110e-09 0s 0s 450702750e-09 0s 0s 450703470e-09 1s 1s 450710350e-09 0s 0s 450713030e-09 0s 0s 450713710e-09 1s 1s 450720590e-09 0s 0s 450723310e-09 0s 0s 450723950e-09 1s 1s 450730830e-09 0s 0s 450733590e-09 0s 0s 450734190e-09 1s 1s 450741070e-09 0s 0s 450743870e-09 0s 0s 450744430e-09 1s 1s 450751310e-09 0s 0s 450754150e-09 0s 0s 450754670e-09 1s 1s 450761550e-09 0s 0s 450764430e-09 0s 0s 450764910e-09 1s 1s 450771790e-09 0s 0s 450774710e-09 0s 0s 450775150e-09 1s 1s 450782030e-09 0s 0s 450784990e-09 0s 0s 450785390e-09 1s 1s 450792270e-09 0s 0s 450795270e-09 0s 0s 450795630e-09 1s 1s 450802510e-09 0s 0s 450805550e-09 0s 0s 450805870e-09 1s 1s 450812750e-09 0s 0s 450815830e-09 0s 0s 450816110e-09 1s 1s 450822990e-09 0s 0s 450826110e-09 0s 0s 450826350e-09 1s 1s 450833230e-09 0s 0s 450836390e-09 0s 0s 450836590e-09 1s 1s 450843470e-09 0s 0s 450846670e-09 0s 0s 450846830e-09 1s 1s 450853710e-09 0s 0s 450856950e-09 0s 0s 450857070e-09 1s 1s 450863950e-09 0s 0s 450867230e-09 0s 0s 450867310e-09 1s 1s 450874190e-09 0s 0s 450877510e-09 0s 0s 450877550e-09 1s 1s 450884430e-09 0s 0s 450887790e-09 1s 1s 450887830e-09 1s 1s 450894710e-09 0s 0s 450898030e-09 1s 1s 450898110e-09 1s 1s 450904950e-09 0s 0s 450908270e-09 1s 1s 450908390e-09 1s 1s 450915190e-09 0s 0s 450918510e-09 1s 1s 450918670e-09 1s 1s 450925430e-09 0s 0s 450928750e-09 1s 1s 450928950e-09 1s 1s 450935670e-09 0s 0s 450938990e-09 1s 1s 450939230e-09 1s 1s 450945910e-09 0s 0s 450949230e-09 1s 1s 450949510e-09 1s 1s 450956150e-09 0s 0s 450959470e-09 1s 1s 450959790e-09 1s 1s 450966390e-09 0s 0s 450969710e-09 1s 1s 450970070e-09 1s 1s 450976630e-09 0s 0s 450979950e-09 1s 1s 450980350e-09 1s 1s 450986870e-09 0s 0s 450990190e-09 1s 1s 450990630e-09 1s 1s 450997110e-09 0s 0s 451000430e-09 1s 1s 451000910e-09 1s 1s 451007350e-09 0s 0s 451010670e-09 1s 1s 451011190e-09 1s 1s 451017590e-09 0s 0s 451020910e-09 1s 1s 451021470e-09 1s 1s 451027830e-09 0s 0s 451031150e-09 1s 1s 451031750e-09 1s 1s 451038070e-09 0s 0s 451041390e-09 1s 1s 451042030e-09 1s 1s 451048310e-09 0s 0s 451051630e-09 1s 1s 451052310e-09 1s 1s 451058550e-09 0s 0s 451061870e-09 1s 1s 451062590e-09 1s 1s 451068790e-09 0s 0s 451072110e-09 1s 1s 451072870e-09 1s 1s 451079030e-09 0s 0s 451082350e-09 1s 1s 451083150e-09 1s 1s 451089270e-09 0s 0s 451092590e-09 1s 1s 451093430e-09 1s 1s 451099510e-09 0s 0s 451102830e-09 1s 1s 451103710e-09 1s 1s 451109750e-09 0s 0s 451113070e-09 1s 1s 451113990e-09 1s 1s 451119990e-09 0s 0s 451123310e-09 1s 1s 451124270e-09 1s 1s 451130230e-09 0s 0s 451133550e-09 1s 1s 451134550e-09 1s 1s 451140470e-09 0s 0s 451143790e-09 1s 1s 451144830e-09 1s 1s 451150710e-09 0s 0s 451154030e-09 1s 1s 451155110e-09 1s 1s 451160950e-09 0s 0s 451164270e-09 1s 1s 451165390e-09 1s 1s 451171190e-09 0s 0s 451174510e-09 1s 1s 451175670e-09 1s 1s 451181430e-09 0s 0s 451184750e-09 1s 1s 451185950e-09 1s 1s 451191670e-09 0s 0s 451194990e-09 1s 1s 451196230e-09 1s 1s 451201910e-09 0s 0s 451205230e-09 1s 1s 451206510e-09 1s 1s 451212150e-09 0s 0s 451215470e-09 1s 1s 451216790e-09 1s 1s 451222390e-09 0s 0s 451225710e-09 1s 1s 451227070e-09 1s 1s 451232630e-09 0s 0s 451235950e-09 1s 1s 451237350e-09 1s 1s 451242870e-09 0s 0s 451246190e-09 1s 1s 451247630e-09 1s 1s 451253110e-09 0s 0s 451256430e-09 1s 1s 451257910e-09 1s 1s 451263350e-09 0s 0s 451266670e-09 1s 1s 451268190e-09 1s 1s 451273590e-09 0s 0s 451276910e-09 1s 1s 451278470e-09 1s 1s 451283830e-09 0s 0s 451287150e-09 1s 1s 451288750e-09 1s 1s 451294070e-09 0s 0s 451297390e-09 1s 1s 451299030e-09 1s 1s 451304310e-09 0s 0s 451307630e-09 1s 1s 451309310e-09 1s 1s 451314550e-09 0s 0s 451317870e-09 1s 1s 451319590e-09 1s 1s 451324790e-09 0s 0s 451328110e-09 1s 1s 451329870e-09 1s 1s 451335030e-09 0s 0s 451338350e-09 1s 1s 451340150e-09 1s 1s 451345270e-09 0s 0s 451348590e-09 1s 1s 451350430e-09 1s 1s 451355510e-09 0s 0s 451358830e-09 1s 1s 451360710e-09 1s 1s 451365750e-09 0s 0s 451369070e-09 1s 1s 451370990e-09 1s 1s 451375990e-09 0s 0s 451379310e-09 1s 1s 451381270e-09 1s 1s 451386230e-09 0s 0s 451389550e-09 1s 1s 451391550e-09 1s 1s 451396470e-09 0s 0s 451399790e-09 1s 1s 451401830e-09 1s 1s 451406710e-09 0s 0s 451410030e-09 1s 1s 451412110e-09 1s 1s 451416950e-09 0s 0s 451420270e-09 1s 1s 451422390e-09 1s 1s 451427190e-09 0s 0s 451430510e-09 1s 1s 451432670e-09 1s 1s 451437430e-09 0s 0s 451440750e-09 1s 1s 451442950e-09 1s 1s 451447670e-09 0s 0s 451450990e-09 1s 1s 451453230e-09 1s 1s 451457910e-09 0s 0s 451461230e-09 1s 1s 451463510e-09 1s 1s 451468150e-09 0s 0s 451471470e-09 1s 1s 451473790e-09 1s 1s 451478390e-09 0s 0s 451481710e-09 1s 1s 451484070e-09 1s 1s 451488630e-09 0s 0s 451491950e-09 1s 1s 451494350e-09 1s 1s 451498870e-09 0s 0s 451502190e-09 1s 1s 451504630e-09 1s 1s 451509110e-09 0s 0s 451512430e-09 1s 1s 451514910e-09 1s 1s 451519350e-09 0s 0s 451522670e-09 1s 1s 451525190e-09 1s 1s 451529590e-09 0s 0s 451532910e-09 1s 1s 451535470e-09 1s 1s 451539830e-09 0s 0s 451543150e-09 1s 1s 451545750e-09 1s 1s 451550070e-09 0s 0s 451553390e-09 1s 1s 451556030e-09 1s 1s 451560310e-09 0s 0s 451563630e-09 1s 1s 451566310e-09 1s 1s 451570550e-09 0s 0s 451573870e-09 1s 1s 451576590e-09 1s 1s 451580790e-09 0s 0s 451584110e-09 1s 1s 451586870e-09 1s 1s 451591030e-09 0s 0s 451594350e-09 1s 1s 451597150e-09 1s 1s 451601270e-09 0s 0s 451604590e-09 1s 1s 451607430e-09 1s 1s 451611510e-09 0s 0s 451614830e-09 1s 1s 451617710e-09 1s 1s 451621750e-09 0s 0s 451625070e-09 1s 1s 451627990e-09 1s 1s 451631990e-09 0s 0s 451635310e-09 1s 1s 451638270e-09 1s 1s 451642230e-09 0s 0s 451645550e-09 1s 1s 451648550e-09 1s 1s 451652470e-09 0s 0s 451655790e-09 1s 1s 451658830e-09 1s 1s 451662710e-09 0s 0s 451666030e-09 1s 1s 451669110e-09 1s 1s 451672950e-09 0s 0s 451676270e-09 1s 1s 451679390e-09 1s 1s 451683190e-09 0s 0s 451686510e-09 1s 1s 451689670e-09 1s 1s 451693430e-09 0s 0s 451696750e-09 1s 1s 451699950e-09 1s 1s 451703670e-09 0s 0s 451706990e-09 1s 1s 451710230e-09 1s 1s 451713910e-09 0s 0s 451717230e-09 1s 1s 451720510e-09 1s 1s 451724150e-09 0s 0s 451727470e-09 1s 1s 451730790e-09 1s 1s 451734390e-09 0s 0s 451737710e-09 1s 1s 451741070e-09 1s 1s 451744630e-09 0s 0s 451747950e-09 1s 1s 451751350e-09 1s 1s 451754870e-09 0s 0s 451758190e-09 1s 1s 451761630e-09 1s 1s 451765110e-09 0s 0s 451768430e-09 1s 1s 451771910e-09 1s 1s 451775350e-09 0s 0s 451778670e-09 1s 1s 451782190e-09 1s 1s 451785590e-09 0s 0s 451788910e-09 1s 1s 451792470e-09 1s 1s 451795830e-09 0s 0s 451799150e-09 1s 1s 451802750e-09 1s 1s 451806070e-09 0s 0s 451809390e-09 1s 1s 451813030e-09 1s 1s 451816310e-09 0s 0s 451819630e-09 1s 1s 451823310e-09 1s 1s 451826550e-09 0s 0s 451829870e-09 1s 1s 451833590e-09 1s 1s 451836790e-09 0s 0s 451840110e-09 1s 1s 451843870e-09 1s 1s 451847030e-09 0s 0s 451850350e-09 1s 1s 451854150e-09 1s 1s 451857270e-09 0s 0s 451860590e-09 1s 1s 451864430e-09 1s 1s 451867510e-09 0s 0s 451870830e-09 1s 1s 451874710e-09 1s 1s 451877750e-09 0s 0s 451881070e-09 1s 1s 451884990e-09 1s 1s 451887990e-09 0s 0s 451891310e-09 1s 1s 451895270e-09 1s 1s 451898230e-09 0s 0s 451901550e-09 1s 1s 451905550e-09 1s 1s 451908470e-09 0s 0s 451911790e-09 1s 1s 451915830e-09 1s 1s 451918710e-09 0s 0s 451922030e-09 1s 1s 451926110e-09 1s 1s 451928950e-09 0s 0s 451932270e-09 1s 1s 451936390e-09 1s 1s 451939190e-09 0s 0s 451942510e-09 1s 1s 451946670e-09 1s 1s 451949430e-09 0s 0s 451952750e-09 1s 1s 451956950e-09 1s 1s 451959670e-09 0s 0s 451962990e-09 1s 1s 451967230e-09 1s 1s 451969910e-09 0s 0s 451973230e-09 1s 1s 451977510e-09 1s 1s 451980150e-09 0s 0s 451983470e-09 1s 1s 451987790e-09 1s 1s 451990390e-09 0s 0s 451993710e-09 1s 1s 451998070e-09 1s 1s 452000630e-09 0s 0s 452003950e-09 1s 1s 452008350e-09 1s 1s 452010870e-09 0s 0s 452014190e-09 1s 1s 452018630e-09 1s 1s 452021110e-09 0s 0s 452024430e-09 1s 1s 452028910e-09 1s 1s 452031350e-09 0s 0s 452034670e-09 1s 1s 452039190e-09 1s 1s 452041590e-09 0s 0s 452044910e-09 1s 1s 452049470e-09 1s 1s 452051830e-09 0s 0s 452055150e-09 1s 1s 452059750e-09 1s 1s 452062070e-09 0s 0s 452065390e-09 1s 1s 452070030e-09 1s 1s 452072310e-09 0s 0s 452075630e-09 1s 1s 452080310e-09 1s 1s 452082550e-09 0s 0s 452085870e-09 1s 1s 452090590e-09 1s 1s 452092790e-09 0s 0s 452096110e-09 1s 1s 452100870e-09 1s 1s 452103030e-09 0s 0s 452106350e-09 1s 1s 452111150e-09 1s 1s 452113270e-09 0s 0s 452116590e-09 1s 1s 452121430e-09 1s 1s 452123510e-09 0s 0s 452126830e-09 1s 1s 452131710e-09 1s 1s 452133750e-09 0s 0s 452137070e-09 1s 1s 452141990e-09 1s 1s 452143990e-09 0s 0s 452147310e-09 1s 1s 452152270e-09 1s 1s 452154230e-09 0s 0s 452157550e-09 1s 1s 452162550e-09 1s 1s 452164470e-09 0s 0s 452167790e-09 1s 1s 452172830e-09 1s 1s 452174710e-09 0s 0s 452178030e-09 1s 1s 452183110e-09 1s 1s 452184950e-09 0s 0s 452188270e-09 1s 1s 452193390e-09 1s 1s 452195190e-09 0s 0s 452198510e-09 1s 1s 452203670e-09 1s 1s 452205430e-09 0s 0s 452208750e-09 1s 1s 452213950e-09 1s 1s 452215670e-09 0s 0s 452218990e-09 1s 1s 452224230e-09 1s 1s 452225910e-09 0s 0s 452229230e-09 1s 1s 452234510e-09 1s 1s 452236150e-09 0s 0s 452239470e-09 1s 1s 452244790e-09 1s 1s 452246390e-09 0s 0s 452249710e-09 1s 1s 452255070e-09 1s 1s 452256630e-09 0s 0s 452259950e-09 1s 1s 452265350e-09 1s 1s 452266870e-09 0s 0s 452270190e-09 1s 1s 452275630e-09 1s 1s 452277110e-09 0s 0s 452280430e-09 1s 1s 452285910e-09 1s 1s 452287350e-09 0s 0s 452290670e-09 1s 1s 452296190e-09 1s 1s 452297590e-09 0s 0s 452300910e-09 1s 1s 452306470e-09 1s 1s 452307830e-09 0s 0s 452311150e-09 1s 1s 452316750e-09 1s 1s 452318070e-09 0s 0s 452321390e-09 1s 1s 452327030e-09 1s 1s 452328310e-09 0s 0s 452331630e-09 1s 1s 452337310e-09 1s 1s 452338550e-09 0s 0s 452341870e-09 1s 1s 452347590e-09 1s 1s 452348790e-09 0s 0s 452352110e-09 1s 1s 452357870e-09 1s 1s 452359030e-09 0s 0s 452362350e-09 1s 1s 452368150e-09 1s 1s 452369270e-09 0s 0s 452372590e-09 1s 1s 452378430e-09 1s 1s 452379510e-09 0s 0s 452382830e-09 1s 1s 452388710e-09 1s 1s 452389750e-09 0s 0s 452393070e-09 1s 1s 452398990e-09 1s 1s 452399990e-09 0s 0s 452403310e-09 1s 1s 452409270e-09 1s 1s 452410230e-09 0s 0s 452413550e-09 1s 1s 452419550e-09 1s 1s 452420470e-09 0s 0s 452423790e-09 1s 1s 452429830e-09 1s 1s 452430710e-09 0s 0s 452434030e-09 1s 1s 452440110e-09 1s 1s 452440950e-09 0s 0s 452444270e-09 1s 1s 452450390e-09 1s 1s 452451190e-09 0s 0s 452454510e-09 1s 1s 452460670e-09 1s 1s 452461430e-09 0s 0s 452464750e-09 1s 1s 452470950e-09 1s 1s 452471670e-09 0s 0s 452474990e-09 1s 1s 452481230e-09 1s 1s 452481910e-09 0s 0s 452485230e-09 1s 1s 452491510e-09 1s 1s 452492150e-09 0s 0s 452495470e-09 1s 1s 452501790e-09 1s 1s 452502390e-09 0s 0s 452505710e-09 1s 1s 452512070e-09 1s 1s 452512630e-09 0s 0s 452515950e-09 1s 1s 452522350e-09 1s 1s 452522870e-09 0s 0s 452526190e-09 1s 1s 452532630e-09 1s 1s 452533110e-09 0s 0s 452536430e-09 1s 1s 452542910e-09 1s 1s 452543350e-09 0s 0s 452546670e-09 1s 1s 452553190e-09 1s 1s 452553590e-09 0s 0s 452556910e-09 1s 1s 452563470e-09 1s 1s 452563830e-09 0s 0s 452567150e-09 1s 1s 452573750e-09 1s 1s 452574070e-09 0s 0s 452577390e-09 1s 1s 452584030e-09 1s 1s 452584310e-09 0s 0s 452587630e-09 1s 1s 452594310e-09 1s 1s 452594550e-09 0s 0s 452597870e-09 1s 1s 452604590e-09 1s 1s 452604790e-09 0s 0s 452608110e-09 1s 1s 452614870e-09 1s 1s 452615030e-09 0s 0s 452618350e-09 1s 1s 452625150e-09 1s 1s 452625270e-09 0s 0s 452628590e-09 1s 1s 452635430e-09 1s 1s 452635510e-09 0s 0s 452638830e-09 1s 1s 452645710e-09 1s 1s 452645750e-09 0s 0s 452649070e-09 1s 1s 452655990e-09 0s 0s 452659310e-09 1s 1s 452666230e-09 0s 0s 452666270e-09 0s 0s 452669550e-09 1s 1s 452676470e-09 0s 0s 452676550e-09 0s 0s 452679790e-09 1s 1s 452686710e-09 0s 0s 452686830e-09 0s 0s 452690030e-09 1s 1s 452696950e-09 0s 0s 452697110e-09 0s 0s 452700270e-09 1s 1s 452707190e-09 0s 0s 452707390e-09 0s 0s 452710510e-09 1s 1s 452717430e-09 0s 0s 452717670e-09 0s 0s 452720750e-09 1s 1s 452727670e-09 0s 0s 452727950e-09 0s 0s 452730990e-09 1s 1s 452737910e-09 0s 0s 452738230e-09 0s 0s 452741230e-09 1s 1s 452748150e-09 0s 0s 452748510e-09 0s 0s 452751470e-09 1s 1s 452758390e-09 0s 0s 452758790e-09 0s 0s 452761710e-09 1s 1s 452768630e-09 0s 0s 452769070e-09 0s 0s 452771950e-09 1s 1s 452778870e-09 0s 0s 452779350e-09 0s 0s 452782190e-09 1s 1s 452789110e-09 0s 0s 452789630e-09 0s 0s 452792430e-09 1s 1s 452799350e-09 0s 0s 452799910e-09 0s 0s 452802670e-09 1s 1s 452809590e-09 0s 0s 452810190e-09 0s 0s 452812910e-09 1s 1s 452819830e-09 0s 0s 452820470e-09 0s 0s 452823150e-09 1s 1s 452830070e-09 0s 0s 452830750e-09 0s 0s 452833390e-09 1s 1s 452840310e-09 0s 0s 452841030e-09 0s 0s 452843630e-09 1s 1s 452850550e-09 0s 0s 452851310e-09 0s 0s 452853870e-09 1s 1s 452860790e-09 0s 0s 452861590e-09 0s 0s 452864110e-09 1s 1s 452871030e-09 0s 0s 452871870e-09 0s 0s 452874350e-09 1s 1s 452881270e-09 0s 0s 452882150e-09 0s 0s 452884590e-09 1s 1s 452891510e-09 0s 0s 452892430e-09 0s 0s 452894830e-09 1s 1s 452901750e-09 0s 0s 452902710e-09 0s 0s 452905070e-09 1s 1s 452911990e-09 0s 0s 452912990e-09 0s 0s 452915310e-09 1s 1s 452922230e-09 0s 0s 452923270e-09 0s 0s 452925550e-09 1s 1s 452932470e-09 0s 0s 452933550e-09 0s 0s 452935790e-09 1s 1s 452942710e-09 0s 0s 452943830e-09 0s 0s 452946030e-09 1s 1s 452952950e-09 0s 0s 452954110e-09 0s 0s 452956270e-09 1s 1s 452963190e-09 0s 0s 452964390e-09 0s 0s 452966510e-09 1s 1s 452973430e-09 0s 0s 452974670e-09 0s 0s 452976750e-09 1s 1s 452983670e-09 0s 0s 452984950e-09 0s 0s 452986990e-09 1s 1s 452993910e-09 0s 0s 452995230e-09 0s 0s 452997230e-09 1s 1s 453004150e-09 0s 0s 453005510e-09 0s 0s 453007470e-09 1s 1s 453014390e-09 0s 0s 453015790e-09 0s 0s 453017710e-09 1s 1s 453024630e-09 0s 0s 453026070e-09 0s 0s 453027950e-09 1s 1s 453034870e-09 0s 0s 453036350e-09 0s 0s 453038190e-09 1s 1s 453045110e-09 0s 0s 453046630e-09 0s 0s 453048430e-09 1s 1s 453055350e-09 0s 0s 453056910e-09 0s 0s 453058670e-09 1s 1s 453065590e-09 0s 0s 453067190e-09 0s 0s 453068910e-09 1s 1s 453075830e-09 0s 0s 453077470e-09 0s 0s 453079150e-09 1s 1s 453086070e-09 0s 0s 453087750e-09 0s 0s 453089390e-09 1s 1s 453096310e-09 0s 0s 453098030e-09 0s 0s 453099630e-09 1s 1s 453106550e-09 0s 0s 453108310e-09 0s 0s 453109870e-09 1s 1s 453116790e-09 0s 0s 453118590e-09 0s 0s 453120110e-09 1s 1s 453127030e-09 0s 0s 453128870e-09 0s 0s 453130350e-09 1s 1s 453137270e-09 0s 0s 453139150e-09 0s 0s 453140590e-09 1s 1s 453147510e-09 0s 0s 453149430e-09 0s 0s 453150830e-09 1s 1s 453157750e-09 0s 0s 453159710e-09 0s 0s 453161070e-09 1s 1s 453167990e-09 0s 0s 453169990e-09 0s 0s 453171310e-09 1s 1s 453178230e-09 0s 0s 453180270e-09 0s 0s 453181550e-09 1s 1s 453188470e-09 0s 0s 453190550e-09 0s 0s 453191790e-09 1s 1s 453198710e-09 0s 0s 453200830e-09 0s 0s 453202030e-09 1s 1s 453208950e-09 0s 0s 453211110e-09 0s 0s 453212270e-09 1s 1s 453219190e-09 0s 0s 453221390e-09 0s 0s 453222510e-09 1s 1s 453229430e-09 0s 0s 453231670e-09 0s 0s 453232750e-09 1s 1s 453239670e-09 0s 0s 453241950e-09 0s 0s 453242990e-09 1s 1s 453249910e-09 0s 0s 453252230e-09 0s 0s 453253230e-09 1s 1s 453260150e-09 0s 0s 453262510e-09 0s 0s 453263470e-09 1s 1s 453270390e-09 0s 0s 453272790e-09 0s 0s 453273710e-09 1s 1s 453280630e-09 0s 0s 453283070e-09 0s 0s 453283950e-09 1s 1s 453290870e-09 0s 0s 453293350e-09 0s 0s 453294190e-09 1s 1s 453301110e-09 0s 0s 453303630e-09 0s 0s 453304430e-09 1s 1s 453311350e-09 0s 0s 453313910e-09 0s 0s 453314670e-09 1s 1s 453321590e-09 0s 0s 453324190e-09 0s 0s 453324910e-09 1s 1s 453331830e-09 0s 0s 453334470e-09 0s 0s 453335150e-09 1s 1s 453342070e-09 0s 0s 453344750e-09 0s 0s 453345390e-09 1s 1s 453352310e-09 0s 0s 453355030e-09 0s 0s 453355630e-09 1s 1s 453362550e-09 0s 0s 453365310e-09 0s 0s 453365870e-09 1s 1s 453372790e-09 0s 0s 453375590e-09 0s 0s 453376110e-09 1s 1s 453383030e-09 0s 0s 453385870e-09 0s 0s 453386350e-09 1s 1s 453393270e-09 0s 0s 453396150e-09 0s 0s 453396590e-09 1s 1s 453403510e-09 0s 0s 453406430e-09 0s 0s 453406830e-09 1s 1s 453413750e-09 0s 0s 453416710e-09 0s 0s 453417070e-09 1s 1s 453423990e-09 0s 0s 453426990e-09 0s 0s 453427310e-09 1s 1s 453434230e-09 0s 0s 453437270e-09 0s 0s 453437550e-09 1s 1s 453444470e-09 0s 0s 453447550e-09 0s 0s 453447790e-09 1s 1s 453454710e-09 0s 0s 453457830e-09 0s 0s 453458030e-09 1s 1s 453464950e-09 0s 0s 453468110e-09 0s 0s 453468270e-09 1s 1s 453475190e-09 0s 0s 453478390e-09 0s 0s 453478510e-09 1s 1s 453485430e-09 0s 0s 453488670e-09 0s 0s 453488750e-09 1s 1s 453495670e-09 0s 0s 453498950e-09 0s 0s 453498990e-09 1s 1s 453505910e-09 0s 0s 453509230e-09 1s 1s 453509270e-09 1s 1s 453516190e-09 0s 0s 453519470e-09 1s 1s 453519550e-09 1s 1s 453526430e-09 0s 0s 453529710e-09 1s 1s 453529830e-09 1s 1s 453536670e-09 0s 0s 453539950e-09 1s 1s 453540110e-09 1s 1s 453546910e-09 0s 0s 453550190e-09 1s 1s 453550390e-09 1s 1s 453557150e-09 0s 0s 453560430e-09 1s 1s 453560670e-09 1s 1s 453567390e-09 0s 0s 453570670e-09 1s 1s 453570950e-09 1s 1s 453577630e-09 0s 0s 453580910e-09 1s 1s 453581230e-09 1s 1s 453587870e-09 0s 0s 453591150e-09 1s 1s 453591510e-09 1s 1s 453598110e-09 0s 0s 453601390e-09 1s 1s 453601790e-09 1s 1s 453608350e-09 0s 0s 453611630e-09 1s 1s 453612070e-09 1s 1s 453618590e-09 0s 0s 453621870e-09 1s 1s 453622350e-09 1s 1s 453628830e-09 0s 0s 453632110e-09 1s 1s 453632630e-09 1s 1s 453639070e-09 0s 0s 453642350e-09 1s 1s 453642910e-09 1s 1s 453649310e-09 0s 0s 453652590e-09 1s 1s 453653190e-09 1s 1s 453659550e-09 0s 0s 453662830e-09 1s 1s 453663470e-09 1s 1s 453669790e-09 0s 0s 453673070e-09 1s 1s 453673750e-09 1s 1s 453680030e-09 0s 0s 453683310e-09 1s 1s 453684030e-09 1s 1s 453690270e-09 0s 0s 453693550e-09 1s 1s 453694310e-09 1s 1s 453700510e-09 0s 0s 453703790e-09 1s 1s 453704590e-09 1s 1s 453710750e-09 0s 0s 453714030e-09 1s 1s 453714870e-09 1s 1s 453720990e-09 0s 0s 453724270e-09 1s 1s 453725150e-09 1s 1s 453731230e-09 0s 0s 453734510e-09 1s 1s 453735430e-09 1s 1s 453741470e-09 0s 0s 453744750e-09 1s 1s 453745710e-09 1s 1s 453751710e-09 0s 0s 453754990e-09 1s 1s 453755990e-09 1s 1s 453761950e-09 0s 0s 453765230e-09 1s 1s 453766270e-09 1s 1s 453772190e-09 0s 0s 453775470e-09 1s 1s 453776550e-09 1s 1s 453782430e-09 0s 0s 453785710e-09 1s 1s 453786830e-09 1s 1s 453792670e-09 0s 0s 453795950e-09 1s 1s 453797110e-09 1s 1s 453802910e-09 0s 0s 453806190e-09 1s 1s 453807390e-09 1s 1s 453813150e-09 0s 0s 453816430e-09 1s 1s 453817670e-09 1s 1s 453823390e-09 0s 0s 453826670e-09 1s 1s 453827950e-09 1s 1s 453833630e-09 0s 0s 453836910e-09 1s 1s 453838230e-09 1s 1s 453843870e-09 0s 0s 453847150e-09 1s 1s 453848510e-09 1s 1s 453854110e-09 0s 0s 453857390e-09 1s 1s 453858790e-09 1s 1s 453864350e-09 0s 0s 453867630e-09 1s 1s 453869070e-09 1s 1s 453874590e-09 0s 0s 453877870e-09 1s 1s 453879350e-09 1s 1s 453884830e-09 0s 0s 453888110e-09 1s 1s 453889630e-09 1s 1s 453895070e-09 0s 0s 453898350e-09 1s 1s 453899910e-09 1s 1s 453905310e-09 0s 0s 453908590e-09 1s 1s 453910190e-09 1s 1s 453915550e-09 0s 0s 453918830e-09 1s 1s 453920470e-09 1s 1s 453925790e-09 0s 0s 453929070e-09 1s 1s 453930750e-09 1s 1s 453936030e-09 0s 0s 453939310e-09 1s 1s 453941030e-09 1s 1s 453946270e-09 0s 0s 453949550e-09 1s 1s 453951310e-09 1s 1s 453956510e-09 0s 0s 453959790e-09 1s 1s 453961590e-09 1s 1s 453966750e-09 0s 0s 453970030e-09 1s 1s 453971870e-09 1s 1s 453976990e-09 0s 0s 453980270e-09 1s 1s 453982150e-09 1s 1s 453987230e-09 0s 0s 453990510e-09 1s 1s 453992430e-09 1s 1s 453997470e-09 0s 0s 454000750e-09 1s 1s 454002710e-09 1s 1s 454007710e-09 0s 0s 454010990e-09 1s 1s 454012990e-09 1s 1s 454017950e-09 0s 0s 454021230e-09 1s 1s 454023270e-09 1s 1s 454028190e-09 0s 0s 454031470e-09 1s 1s 454033550e-09 1s 1s 454038430e-09 0s 0s 454041710e-09 1s 1s 454043830e-09 1s 1s 454048670e-09 0s 0s 454051950e-09 1s 1s 454054110e-09 1s 1s 454058910e-09 0s 0s 454062190e-09 1s 1s 454064390e-09 1s 1s 454069150e-09 0s 0s 454072430e-09 1s 1s 454074670e-09 1s 1s 454079390e-09 0s 0s 454082670e-09 1s 1s 454084950e-09 1s 1s 454089630e-09 0s 0s 454092910e-09 1s 1s 454095230e-09 1s 1s 454099870e-09 0s 0s 454103150e-09 1s 1s 454105510e-09 1s 1s 454110110e-09 0s 0s 454113390e-09 1s 1s 454115790e-09 1s 1s 454120350e-09 0s 0s 454123630e-09 1s 1s 454126070e-09 1s 1s 454130590e-09 0s 0s 454133870e-09 1s 1s 454136350e-09 1s 1s 454140830e-09 0s 0s 454144110e-09 1s 1s 454146630e-09 1s 1s 454151070e-09 0s 0s 454154350e-09 1s 1s 454156910e-09 1s 1s 454161310e-09 0s 0s 454164590e-09 1s 1s 454167190e-09 1s 1s 454171550e-09 0s 0s 454174830e-09 1s 1s 454177470e-09 1s 1s 454181790e-09 0s 0s 454185070e-09 1s 1s 454187750e-09 1s 1s 454192030e-09 0s 0s 454195310e-09 1s 1s 454198030e-09 1s 1s 454202270e-09 0s 0s 454205550e-09 1s 1s 454208310e-09 1s 1s 454212510e-09 0s 0s 454215790e-09 1s 1s 454218590e-09 1s 1s 454222750e-09 0s 0s 454226030e-09 1s 1s 454228870e-09 1s 1s 454232990e-09 0s 0s 454236270e-09 1s 1s 454239150e-09 1s 1s 454243230e-09 0s 0s 454246510e-09 1s 1s 454249430e-09 1s 1s 454253470e-09 0s 0s 454256750e-09 1s 1s 454259710e-09 1s 1s 454263710e-09 0s 0s 454266990e-09 1s 1s 454269990e-09 1s 1s 454273950e-09 0s 0s 454277230e-09 1s 1s 454280270e-09 1s 1s 454284190e-09 0s 0s 454287470e-09 1s 1s 454290550e-09 1s 1s 454294430e-09 0s 0s 454297710e-09 1s 1s 454300830e-09 1s 1s 454304670e-09 0s 0s 454307950e-09 1s 1s 454311110e-09 1s 1s 454314910e-09 0s 0s 454318190e-09 1s 1s 454321390e-09 1s 1s 454325150e-09 0s 0s 454328430e-09 1s 1s 454331670e-09 1s 1s 454335390e-09 0s 0s 454338670e-09 1s 1s 454341950e-09 1s 1s 454345630e-09 0s 0s 454348910e-09 1s 1s 454352230e-09 1s 1s 454355870e-09 0s 0s 454359150e-09 1s 1s 454362510e-09 1s 1s 454366110e-09 0s 0s 454369390e-09 1s 1s 454372790e-09 1s 1s 454376350e-09 0s 0s 454379630e-09 1s 1s 454383070e-09 1s 1s 454386590e-09 0s 0s 454389870e-09 1s 1s 454393350e-09 1s 1s 454396830e-09 0s 0s 454400110e-09 1s 1s 454403630e-09 1s 1s 454407070e-09 0s 0s 454410350e-09 1s 1s 454413910e-09 1s 1s 454417310e-09 0s 0s 454420590e-09 1s 1s 454424190e-09 1s 1s 454427550e-09 0s 0s 454430830e-09 1s 1s 454434470e-09 1s 1s 454437790e-09 0s 0s 454441070e-09 1s 1s 454444750e-09 1s 1s 454448030e-09 0s 0s 454451310e-09 1s 1s 454455030e-09 1s 1s 454458270e-09 0s 0s 454461550e-09 1s 1s 454465310e-09 1s 1s 454468510e-09 0s 0s 454471790e-09 1s 1s 454475590e-09 1s 1s 454478750e-09 0s 0s 454482030e-09 1s 1s 454485870e-09 1s 1s 454488990e-09 0s 0s 454492270e-09 1s 1s 454496150e-09 1s 1s 454499230e-09 0s 0s 454502510e-09 1s 1s 454506430e-09 1s 1s 454509470e-09 0s 0s 454512750e-09 1s 1s 454516710e-09 1s 1s 454519710e-09 0s 0s 454522990e-09 1s 1s 454526990e-09 1s 1s 454529950e-09 0s 0s 454533230e-09 1s 1s 454537270e-09 1s 1s 454540190e-09 0s 0s 454543470e-09 1s 1s 454547550e-09 1s 1s 454550430e-09 0s 0s 454553710e-09 1s 1s 454557830e-09 1s 1s 454560670e-09 0s 0s 454563950e-09 1s 1s 454568110e-09 1s 1s 454570910e-09 0s 0s 454574190e-09 1s 1s 454578390e-09 1s 1s 454581150e-09 0s 0s 454584430e-09 1s 1s 454588670e-09 1s 1s 454591390e-09 0s 0s 454594670e-09 1s 1s 454598950e-09 1s 1s 454601630e-09 0s 0s 454604910e-09 1s 1s 454609230e-09 1s 1s 454611870e-09 0s 0s 454615150e-09 1s 1s 454619510e-09 1s 1s 454622110e-09 0s 0s 454625390e-09 1s 1s 454629790e-09 1s 1s 454632350e-09 0s 0s 454635630e-09 1s 1s 454640070e-09 1s 1s 454642590e-09 0s 0s 454645870e-09 1s 1s 454650350e-09 1s 1s 454652830e-09 0s 0s 454656110e-09 1s 1s 454660630e-09 1s 1s 454663070e-09 0s 0s 454666350e-09 1s 1s 454670910e-09 1s 1s 454673310e-09 0s 0s 454676590e-09 1s 1s 454681190e-09 1s 1s 454683550e-09 0s 0s 454686830e-09 1s 1s 454691470e-09 1s 1s 454693790e-09 0s 0s 454697070e-09 1s 1s 454701750e-09 1s 1s 454704030e-09 0s 0s 454707310e-09 1s 1s 454712030e-09 1s 1s 454714270e-09 0s 0s 454717550e-09 1s 1s 454722310e-09 1s 1s 454724510e-09 0s 0s 454727790e-09 1s 1s 454732590e-09 1s 1s 454734750e-09 0s 0s 454738030e-09 1s 1s 454742870e-09 1s 1s 454744990e-09 0s 0s 454748270e-09 1s 1s 454753150e-09 1s 1s 454755230e-09 0s 0s 454758510e-09 1s 1s 454763430e-09 1s 1s 454765470e-09 0s 0s 454768750e-09 1s 1s 454773710e-09 1s 1s 454775710e-09 0s 0s 454778990e-09 1s 1s 454783990e-09 1s 1s 454785950e-09 0s 0s 454789230e-09 1s 1s 454794270e-09 1s 1s 454796190e-09 0s 0s 454799470e-09 1s 1s 454804550e-09 1s 1s 454806430e-09 0s 0s 454809710e-09 1s 1s 454814830e-09 1s 1s 454816670e-09 0s 0s 454819950e-09 1s 1s 454825110e-09 1s 1s 454826910e-09 0s 0s 454830190e-09 1s 1s 454835390e-09 1s 1s 454837150e-09 0s 0s 454840430e-09 1s 1s 454845670e-09 1s 1s 454847390e-09 0s 0s 454850670e-09 1s 1s 454855950e-09 1s 1s 454857630e-09 0s 0s 454860910e-09 1s 1s 454866230e-09 1s 1s 454867870e-09 0s 0s 454871150e-09 1s 1s 454876510e-09 1s 1s 454878110e-09 0s 0s 454881390e-09 1s 1s 454886790e-09 1s 1s 454888350e-09 0s 0s 454891630e-09 1s 1s 454897070e-09 1s 1s 454898590e-09 0s 0s 454901870e-09 1s 1s 454907350e-09 1s 1s 454908830e-09 0s 0s 454912110e-09 1s 1s 454917630e-09 1s 1s 454919070e-09 0s 0s 454922350e-09 1s 1s 454927910e-09 1s 1s 454929310e-09 0s 0s 454932590e-09 1s 1s 454938190e-09 1s 1s 454939550e-09 0s 0s 454942830e-09 1s 1s 454948470e-09 1s 1s 454949790e-09 0s 0s 454953070e-09 1s 1s 454958750e-09 1s 1s 454960030e-09 0s 0s 454963310e-09 1s 1s 454969030e-09 1s 1s 454970270e-09 0s 0s 454973550e-09 1s 1s 454979310e-09 1s 1s 454980510e-09 0s 0s 454983790e-09 1s 1s 454989590e-09 1s 1s 454990750e-09 0s 0s 454994030e-09 1s 1s 454999870e-09 1s 1s 455000990e-09 0s 0s 455004270e-09 1s 1s 455010150e-09 1s 1s 455011230e-09 0s 0s 455014510e-09 1s 1s 455020430e-09 1s 1s 455021470e-09 0s 0s 455024750e-09 1s 1s 455030710e-09 1s 1s 455031710e-09 0s 0s 455034990e-09 1s 1s 455040990e-09 1s 1s 455041950e-09 0s 0s 455045230e-09 1s 1s 455051270e-09 1s 1s 455052190e-09 0s 0s 455055470e-09 1s 1s 455061550e-09 1s 1s 455062430e-09 0s 0s 455065710e-09 1s 1s 455071830e-09 1s 1s 455072670e-09 0s 0s 455075950e-09 1s 1s 455082110e-09 1s 1s 455082910e-09 0s 0s 455086190e-09 1s 1s 455092390e-09 1s 1s 455093150e-09 0s 0s 455096430e-09 1s 1s 455102670e-09 1s 1s 455103390e-09 0s 0s 455106670e-09 1s 1s 455112950e-09 1s 1s 455113630e-09 0s 0s 455116910e-09 1s 1s 455123230e-09 1s 1s 455123870e-09 0s 0s 455127150e-09 1s 1s 455133510e-09 1s 1s 455134110e-09 0s 0s 455137390e-09 1s 1s 455143790e-09 1s 1s 455144350e-09 0s 0s 455147630e-09 1s 1s 455154070e-09 1s 1s 455154590e-09 0s 0s 455157870e-09 1s 1s 455164350e-09 1s 1s 455164830e-09 0s 0s 455168110e-09 1s 1s 455174630e-09 1s 1s 455175070e-09 0s 0s 455178350e-09 1s 1s 455184910e-09 1s 1s 455185310e-09 0s 0s 455188590e-09 1s 1s 455195190e-09 1s 1s 455195550e-09 0s 0s 455198830e-09 1s 1s 455205470e-09 1s 1s 455205790e-09 0s 0s 455209070e-09 1s 1s 455215750e-09 1s 1s 455216030e-09 0s 0s 455219310e-09 1s 1s 455226030e-09 1s 1s 455226270e-09 0s 0s 455229550e-09 1s 1s 455236310e-09 1s 1s 455236510e-09 0s 0s 455239790e-09 1s 1s 455246590e-09 1s 1s 455246750e-09 0s 0s 455250030e-09 1s 1s 455256870e-09 1s 1s 455256990e-09 0s 0s 455260270e-09 1s 1s 455267150e-09 1s 1s 455267230e-09 0s 0s 455270510e-09 1s 1s 455277430e-09 1s 1s 455277470e-09 0s 0s 455280750e-09 1s 1s 455287710e-09 0s 0s 455290990e-09 1s 1s 455297950e-09 0s 0s 455297990e-09 0s 0s 455301230e-09 1s 1s 455308190e-09 0s 0s 455308270e-09 0s 0s 455311470e-09 1s 1s 455318430e-09 0s 0s 455318550e-09 0s 0s 455321710e-09 1s 1s 455328670e-09 0s 0s 455328830e-09 0s 0s 455331950e-09 1s 1s 455338910e-09 0s 0s 455339110e-09 0s 0s 455342190e-09 1s 1s 455349150e-09 0s 0s 455349390e-09 0s 0s 455352430e-09 1s 1s 455359390e-09 0s 0s 455359670e-09 0s 0s 455362670e-09 1s 1s 455369630e-09 0s 0s 455369950e-09 0s 0s 455372910e-09 1s 1s 455379870e-09 0s 0s 455380230e-09 0s 0s 455383150e-09 1s 1s 455390110e-09 0s 0s 455390510e-09 0s 0s 455393390e-09 1s 1s 455400350e-09 0s 0s 455400790e-09 0s 0s 455403630e-09 1s 1s 455410590e-09 0s 0s 455411070e-09 0s 0s 455413870e-09 1s 1s 455420830e-09 0s 0s 455421350e-09 0s 0s 455424110e-09 1s 1s 455431070e-09 0s 0s 455431630e-09 0s 0s 455434350e-09 1s 1s 455441310e-09 0s 0s 455441910e-09 0s 0s 455444590e-09 1s 1s 455451550e-09 0s 0s 455452190e-09 0s 0s 455454830e-09 1s 1s 455461790e-09 0s 0s 455462470e-09 0s 0s 455465070e-09 1s 1s 455472030e-09 0s 0s 455472750e-09 0s 0s 455475310e-09 1s 1s 455482270e-09 0s 0s 455483030e-09 0s 0s 455485550e-09 1s 1s 455492510e-09 0s 0s 455493310e-09 0s 0s 455495790e-09 1s 1s 455502750e-09 0s 0s 455503590e-09 0s 0s 455506030e-09 1s 1s 455512990e-09 0s 0s 455513870e-09 0s 0s 455516270e-09 1s 1s 455523230e-09 0s 0s 455524150e-09 0s 0s 455526510e-09 1s 1s 455533470e-09 0s 0s 455534430e-09 0s 0s 455536750e-09 1s 1s 455543710e-09 0s 0s 455544710e-09 0s 0s 455546990e-09 1s 1s 455553950e-09 0s 0s 455554990e-09 0s 0s 455557230e-09 1s 1s 455564190e-09 0s 0s 455565270e-09 0s 0s 455567470e-09 1s 1s 455574430e-09 0s 0s 455575550e-09 0s 0s 455577710e-09 1s 1s 455584670e-09 0s 0s 455585830e-09 0s 0s 455587950e-09 1s 1s 455594910e-09 0s 0s 455596110e-09 0s 0s 455598190e-09 1s 1s 455605150e-09 0s 0s 455606390e-09 0s 0s 455608430e-09 1s 1s 455615390e-09 0s 0s 455616670e-09 0s 0s 455618670e-09 1s 1s 455625630e-09 0s 0s 455626950e-09 0s 0s 455628910e-09 1s 1s 455635870e-09 0s 0s 455637230e-09 0s 0s 455639150e-09 1s 1s 455646110e-09 0s 0s 455647510e-09 0s 0s 455649390e-09 1s 1s 455656350e-09 0s 0s 455657790e-09 0s 0s 455659630e-09 1s 1s 455666590e-09 0s 0s 455668070e-09 0s 0s 455669870e-09 1s 1s 455676830e-09 0s 0s 455678350e-09 0s 0s 455680110e-09 1s 1s 455687070e-09 0s 0s 455688630e-09 0s 0s 455690350e-09 1s 1s 455697310e-09 0s 0s 455698910e-09 0s 0s 455700590e-09 1s 1s 455707550e-09 0s 0s 455709190e-09 0s 0s 455710830e-09 1s 1s 455717790e-09 0s 0s 455719470e-09 0s 0s 455721070e-09 1s 1s 455728030e-09 0s 0s 455729750e-09 0s 0s 455731310e-09 1s 1s 455738270e-09 0s 0s 455740030e-09 0s 0s 455741550e-09 1s 1s 455748510e-09 0s 0s 455750310e-09 0s 0s 455751790e-09 1s 1s 455758750e-09 0s 0s 455760590e-09 0s 0s 455762030e-09 1s 1s 455768990e-09 0s 0s 455770870e-09 0s 0s 455772270e-09 1s 1s 455779230e-09 0s 0s 455781150e-09 0s 0s 455782510e-09 1s 1s 455789470e-09 0s 0s 455791430e-09 0s 0s 455792750e-09 1s 1s 455799710e-09 0s 0s 455801710e-09 0s 0s 455802990e-09 1s 1s 455809950e-09 0s 0s 455811990e-09 0s 0s 455813230e-09 1s 1s 455820190e-09 0s 0s 455822270e-09 0s 0s 455823470e-09 1s 1s 455830430e-09 0s 0s 455832550e-09 0s 0s 455833710e-09 1s 1s 455840670e-09 0s 0s 455842830e-09 0s 0s 455843950e-09 1s 1s 455850910e-09 0s 0s 455853110e-09 0s 0s 455854190e-09 1s 1s 455861150e-09 0s 0s 455863390e-09 0s 0s 455864430e-09 1s 1s 455871390e-09 0s 0s 455873670e-09 0s 0s 455874670e-09 1s 1s 455881630e-09 0s 0s 455883950e-09 0s 0s 455884910e-09 1s 1s 455891870e-09 0s 0s 455894230e-09 0s 0s 455895150e-09 1s 1s 455902110e-09 0s 0s 455904510e-09 0s 0s 455905390e-09 1s 1s 455912350e-09 0s 0s 455914790e-09 0s 0s 455915630e-09 1s 1s 455922590e-09 0s 0s 455925070e-09 0s 0s 455925870e-09 1s 1s 455932830e-09 0s 0s 455935350e-09 0s 0s 455936110e-09 1s 1s 455943070e-09 0s 0s 455945630e-09 0s 0s 455946350e-09 1s 1s 455953310e-09 0s 0s 455955910e-09 0s 0s 455956590e-09 1s 1s 455963550e-09 0s 0s 455966190e-09 0s 0s 455966830e-09 1s 1s 455973790e-09 0s 0s 455976470e-09 0s 0s 455977070e-09 1s 1s 455984030e-09 0s 0s 455986750e-09 0s 0s 455987310e-09 1s 1s 455994270e-09 0s 0s 455997030e-09 0s 0s 455997550e-09 1s 1s 456004510e-09 0s 0s 456007310e-09 0s 0s 456007790e-09 1s 1s 456014750e-09 0s 0s 456017590e-09 0s 0s 456018030e-09 1s 1s 456024990e-09 0s 0s 456027870e-09 0s 0s 456028270e-09 1s 1s 456035230e-09 0s 0s 456038150e-09 0s 0s 456038510e-09 1s 1s 456045470e-09 0s 0s 456048430e-09 0s 0s 456048750e-09 1s 1s 456055710e-09 0s 0s 456058710e-09 0s 0s 456058990e-09 1s 1s 456065950e-09 0s 0s 456068990e-09 0s 0s 456069230e-09 1s 1s 456076190e-09 0s 0s 456079270e-09 0s 0s 456079470e-09 1s 1s 456086430e-09 0s 0s 456089550e-09 0s 0s 456089710e-09 1s 1s 456096670e-09 0s 0s 456099830e-09 0s 0s 456099950e-09 1s 1s 456106910e-09 0s 0s 456110110e-09 0s 0s 456110190e-09 1s 1s 456117150e-09 0s 0s 456120390e-09 0s 0s 456120430e-09 1s 1s 456127390e-09 0s 0s 456130670e-09 1s 1s 456130710e-09 1s 1s 456137670e-09 0s 0s 456140910e-09 1s 1s 456140990e-09 1s 1s 456147910e-09 0s 0s 456151150e-09 1s 1s 456151270e-09 1s 1s 456158150e-09 0s 0s 456161390e-09 1s 1s 456161550e-09 1s 1s 456168390e-09 0s 0s 456171630e-09 1s 1s 456171830e-09 1s 1s 456178630e-09 0s 0s 456181870e-09 1s 1s 456182110e-09 1s 1s 456188870e-09 0s 0s 456192110e-09 1s 1s 456192390e-09 1s 1s 456199110e-09 0s 0s 456202350e-09 1s 1s 456202670e-09 1s 1s 456209350e-09 0s 0s 456212590e-09 1s 1s 456212950e-09 1s 1s 456219590e-09 0s 0s 456222830e-09 1s 1s 456223230e-09 1s 1s 456229830e-09 0s 0s 456233070e-09 1s 1s 456233510e-09 1s 1s 456240070e-09 0s 0s 456243310e-09 1s 1s 456243790e-09 1s 1s 456250310e-09 0s 0s 456253550e-09 1s 1s 456254070e-09 1s 1s 456260550e-09 0s 0s 456263790e-09 1s 1s 456264350e-09 1s 1s 456270790e-09 0s 0s 456274030e-09 1s 1s 456274630e-09 1s 1s 456281030e-09 0s 0s 456284270e-09 1s 1s 456284910e-09 1s 1s 456291270e-09 0s 0s 456294510e-09 1s 1s 456295190e-09 1s 1s 456301510e-09 0s 0s 456304750e-09 1s 1s 456305470e-09 1s 1s 456311750e-09 0s 0s 456314990e-09 1s 1s 456315750e-09 1s 1s 456321990e-09 0s 0s 456325230e-09 1s 1s 456326030e-09 1s 1s 456332230e-09 0s 0s 456335470e-09 1s 1s 456336310e-09 1s 1s 456342470e-09 0s 0s 456345710e-09 1s 1s 456346590e-09 1s 1s 456352710e-09 0s 0s 456355950e-09 1s 1s 456356870e-09 1s 1s 456362950e-09 0s 0s 456366190e-09 1s 1s 456367150e-09 1s 1s 456373190e-09 0s 0s 456376430e-09 1s 1s 456377430e-09 1s 1s 456383430e-09 0s 0s 456386670e-09 1s 1s 456387710e-09 1s 1s 456393670e-09 0s 0s 456396910e-09 1s 1s 456397990e-09 1s 1s 456403910e-09 0s 0s 456407150e-09 1s 1s 456408270e-09 1s 1s 456414150e-09 0s 0s 456417390e-09 1s 1s 456418550e-09 1s 1s 456424390e-09 0s 0s 456427630e-09 1s 1s 456428830e-09 1s 1s 456434630e-09 0s 0s 456437870e-09 1s 1s 456439110e-09 1s 1s 456444870e-09 0s 0s 456448110e-09 1s 1s 456449390e-09 1s 1s 456455110e-09 0s 0s 456458350e-09 1s 1s 456459670e-09 1s 1s 456465350e-09 0s 0s 456468590e-09 1s 1s 456469950e-09 1s 1s 456475590e-09 0s 0s 456478830e-09 1s 1s 456480230e-09 1s 1s 456485830e-09 0s 0s 456489070e-09 1s 1s 456490510e-09 1s 1s 456496070e-09 0s 0s 456499310e-09 1s 1s 456500790e-09 1s 1s 456506310e-09 0s 0s 456509550e-09 1s 1s 456511070e-09 1s 1s 456516550e-09 0s 0s 456519790e-09 1s 1s 456521350e-09 1s 1s 456526790e-09 0s 0s 456530030e-09 1s 1s 456531630e-09 1s 1s 456537030e-09 0s 0s 456540270e-09 1s 1s 456541910e-09 1s 1s 456547270e-09 0s 0s 456550510e-09 1s 1s 456552190e-09 1s 1s 456557510e-09 0s 0s 456560750e-09 1s 1s 456562470e-09 1s 1s 456567750e-09 0s 0s 456570990e-09 1s 1s 456572750e-09 1s 1s 456577990e-09 0s 0s 456581230e-09 1s 1s 456583030e-09 1s 1s 456588230e-09 0s 0s 456591470e-09 1s 1s 456593310e-09 1s 1s 456598470e-09 0s 0s 456601710e-09 1s 1s 456603590e-09 1s 1s 456608710e-09 0s 0s 456611950e-09 1s 1s 456613870e-09 1s 1s 456618950e-09 0s 0s 456622190e-09 1s 1s 456624150e-09 1s 1s 456629190e-09 0s 0s 456632430e-09 1s 1s 456634430e-09 1s 1s 456639430e-09 0s 0s 456642670e-09 1s 1s 456644710e-09 1s 1s 456649670e-09 0s 0s 456652910e-09 1s 1s 456654990e-09 1s 1s 456659910e-09 0s 0s 456663150e-09 1s 1s 456665270e-09 1s 1s 456670150e-09 0s 0s 456673390e-09 1s 1s 456675550e-09 1s 1s 456680390e-09 0s 0s 456683630e-09 1s 1s 456685830e-09 1s 1s 456690630e-09 0s 0s 456693870e-09 1s 1s 456696110e-09 1s 1s 456700870e-09 0s 0s 456704110e-09 1s 1s 456706390e-09 1s 1s 456711110e-09 0s 0s 456714350e-09 1s 1s 456716670e-09 1s 1s 456721350e-09 0s 0s 456724590e-09 1s 1s 456726950e-09 1s 1s 456731590e-09 0s 0s 456734830e-09 1s 1s 456737230e-09 1s 1s 456741830e-09 0s 0s 456745070e-09 1s 1s 456747510e-09 1s 1s 456752070e-09 0s 0s 456755310e-09 1s 1s 456757790e-09 1s 1s 456762310e-09 0s 0s 456765550e-09 1s 1s 456768070e-09 1s 1s 456772550e-09 0s 0s 456775790e-09 1s 1s 456778350e-09 1s 1s 456782790e-09 0s 0s 456786030e-09 1s 1s 456788630e-09 1s 1s 456793030e-09 0s 0s 456796270e-09 1s 1s 456798910e-09 1s 1s 456803270e-09 0s 0s 456806510e-09 1s 1s 456809190e-09 1s 1s 456813510e-09 0s 0s 456816750e-09 1s 1s 456819470e-09 1s 1s 456823750e-09 0s 0s 456826990e-09 1s 1s 456829750e-09 1s 1s 456833990e-09 0s 0s 456837230e-09 1s 1s 456840030e-09 1s 1s 456844230e-09 0s 0s 456847470e-09 1s 1s 456850310e-09 1s 1s 456854470e-09 0s 0s 456857710e-09 1s 1s 456860590e-09 1s 1s 456864710e-09 0s 0s 456867950e-09 1s 1s 456870870e-09 1s 1s 456874950e-09 0s 0s 456878190e-09 1s 1s 456881150e-09 1s 1s 456885190e-09 0s 0s 456888430e-09 1s 1s 456891430e-09 1s 1s 456895430e-09 0s 0s 456898670e-09 1s 1s 456901710e-09 1s 1s 456905670e-09 0s 0s 456908910e-09 1s 1s 456911990e-09 1s 1s 456915910e-09 0s 0s 456919150e-09 1s 1s 456922270e-09 1s 1s 456926150e-09 0s 0s 456929390e-09 1s 1s 456932550e-09 1s 1s 456936390e-09 0s 0s 456939630e-09 1s 1s 456942830e-09 1s 1s 456946630e-09 0s 0s 456949870e-09 1s 1s 456953110e-09 1s 1s 456956870e-09 0s 0s 456960110e-09 1s 1s 456963390e-09 1s 1s 456967110e-09 0s 0s 456970350e-09 1s 1s 456973670e-09 1s 1s 456977350e-09 0s 0s 456980590e-09 1s 1s 456983950e-09 1s 1s 456987590e-09 0s 0s 456990830e-09 1s 1s 456994230e-09 1s 1s 456997830e-09 0s 0s 457001070e-09 1s 1s 457004510e-09 1s 1s 457008070e-09 0s 0s 457011310e-09 1s 1s 457014790e-09 1s 1s 457018310e-09 0s 0s 457021550e-09 1s 1s 457025070e-09 1s 1s 457028550e-09 0s 0s 457031790e-09 1s 1s 457035350e-09 1s 1s 457038790e-09 0s 0s 457042030e-09 1s 1s 457045630e-09 1s 1s 457049030e-09 0s 0s 457052270e-09 1s 1s 457055910e-09 1s 1s 457059270e-09 0s 0s 457062510e-09 1s 1s 457066190e-09 1s 1s 457069510e-09 0s 0s 457072750e-09 1s 1s 457076470e-09 1s 1s 457079750e-09 0s 0s 457082990e-09 1s 1s 457086750e-09 1s 1s 457089990e-09 0s 0s 457093230e-09 1s 1s 457097030e-09 1s 1s 457100230e-09 0s 0s 457103470e-09 1s 1s 457107310e-09 1s 1s 457110470e-09 0s 0s 457113710e-09 1s 1s 457117590e-09 1s 1s 457120710e-09 0s 0s 457123950e-09 1s 1s 457127870e-09 1s 1s 457130950e-09 0s 0s 457134190e-09 1s 1s 457138150e-09 1s 1s 457141190e-09 0s 0s 457144430e-09 1s 1s 457148430e-09 1s 1s 457151430e-09 0s 0s 457154670e-09 1s 1s 457158710e-09 1s 1s 457161670e-09 0s 0s 457164910e-09 1s 1s 457168990e-09 1s 1s 457171910e-09 0s 0s 457175150e-09 1s 1s 457179270e-09 1s 1s 457182150e-09 0s 0s 457185390e-09 1s 1s 457189550e-09 1s 1s 457192390e-09 0s 0s 457195630e-09 1s 1s 457199830e-09 1s 1s 457202630e-09 0s 0s 457205870e-09 1s 1s 457210110e-09 1s 1s 457212870e-09 0s 0s 457216110e-09 1s 1s 457220390e-09 1s 1s 457223110e-09 0s 0s 457226350e-09 1s 1s 457230670e-09 1s 1s 457233350e-09 0s 0s 457236590e-09 1s 1s 457240950e-09 1s 1s 457243590e-09 0s 0s 457246830e-09 1s 1s 457251230e-09 1s 1s 457253830e-09 0s 0s 457257070e-09 1s 1s 457261510e-09 1s 1s 457264070e-09 0s 0s 457267310e-09 1s 1s 457271790e-09 1s 1s 457274310e-09 0s 0s 457277550e-09 1s 1s 457282070e-09 1s 1s 457284550e-09 0s 0s 457287790e-09 1s 1s 457292350e-09 1s 1s 457294790e-09 0s 0s 457298030e-09 1s 1s 457302630e-09 1s 1s 457305030e-09 0s 0s 457308270e-09 1s 1s 457312910e-09 1s 1s 457315270e-09 0s 0s 457318510e-09 1s 1s 457323190e-09 1s 1s 457325510e-09 0s 0s 457328750e-09 1s 1s 457333470e-09 1s 1s 457335750e-09 0s 0s 457338990e-09 1s 1s 457343750e-09 1s 1s 457345990e-09 0s 0s 457349230e-09 1s 1s 457354030e-09 1s 1s 457356230e-09 0s 0s 457359470e-09 1s 1s 457364310e-09 1s 1s 457366470e-09 0s 0s 457369710e-09 1s 1s 457374590e-09 1s 1s 457376710e-09 0s 0s 457379950e-09 1s 1s 457384870e-09 1s 1s 457386950e-09 0s 0s 457390190e-09 1s 1s 457395150e-09 1s 1s 457397190e-09 0s 0s 457400430e-09 1s 1s 457405430e-09 1s 1s 457407430e-09 0s 0s 457410670e-09 1s 1s 457415710e-09 1s 1s 457417670e-09 0s 0s 457420910e-09 1s 1s 457425990e-09 1s 1s 457427910e-09 0s 0s 457431150e-09 1s 1s 457436270e-09 1s 1s 457438150e-09 0s 0s 457441390e-09 1s 1s 457446550e-09 1s 1s 457448390e-09 0s 0s 457451630e-09 1s 1s 457456830e-09 1s 1s 457458630e-09 0s 0s 457461870e-09 1s 1s 457467110e-09 1s 1s 457468870e-09 0s 0s 457472110e-09 1s 1s 457477390e-09 1s 1s 457479110e-09 0s 0s 457482350e-09 1s 1s 457487670e-09 1s 1s 457489350e-09 0s 0s 457492590e-09 1s 1s 457497950e-09 1s 1s 457499590e-09 0s 0s 457502830e-09 1s 1s 457508230e-09 1s 1s 457509830e-09 0s 0s 457513070e-09 1s 1s 457518510e-09 1s 1s 457520070e-09 0s 0s 457523310e-09 1s 1s 457528790e-09 1s 1s 457530310e-09 0s 0s 457533550e-09 1s 1s 457539070e-09 1s 1s 457540550e-09 0s 0s 457543790e-09 1s 1s 457549350e-09 1s 1s 457550790e-09 0s 0s 457554030e-09 1s 1s 457559630e-09 1s 1s 457561030e-09 0s 0s 457564270e-09 1s 1s 457569910e-09 1s 1s 457571270e-09 0s 0s 457574510e-09 1s 1s 457580190e-09 1s 1s 457581510e-09 0s 0s 457584750e-09 1s 1s 457590470e-09 1s 1s 457591750e-09 0s 0s 457594990e-09 1s 1s 457600750e-09 1s 1s 457601990e-09 0s 0s 457605230e-09 1s 1s 457611030e-09 1s 1s 457612230e-09 0s 0s 457615470e-09 1s 1s 457621310e-09 1s 1s 457622470e-09 0s 0s 457625710e-09 1s 1s 457631590e-09 1s 1s 457632710e-09 0s 0s 457635950e-09 1s 1s 457641870e-09 1s 1s 457642950e-09 0s 0s 457646190e-09 1s 1s 457652150e-09 1s 1s 457653190e-09 0s 0s 457656430e-09 1s 1s 457662430e-09 1s 1s 457663430e-09 0s 0s 457666670e-09 1s 1s 457672710e-09 1s 1s 457673670e-09 0s 0s 457676910e-09 1s 1s 457682990e-09 1s 1s 457683910e-09 0s 0s 457687150e-09 1s 1s 457693270e-09 1s 1s 457694150e-09 0s 0s 457697390e-09 1s 1s 457703550e-09 1s 1s 457704390e-09 0s 0s 457707630e-09 1s 1s 457713830e-09 1s 1s 457714630e-09 0s 0s 457717870e-09 1s 1s 457724110e-09 1s 1s 457724870e-09 0s 0s 457728110e-09 1s 1s 457734390e-09 1s 1s 457735110e-09 0s 0s 457738350e-09 1s 1s 457744670e-09 1s 1s 457745350e-09 0s 0s 457748590e-09 1s 1s 457754950e-09 1s 1s 457755590e-09 0s 0s 457758830e-09 1s 1s 457765230e-09 1s 1s 457765830e-09 0s 0s 457769070e-09 1s 1s 457775510e-09 1s 1s 457776070e-09 0s 0s 457779310e-09 1s 1s 457785790e-09 1s 1s 457786310e-09 0s 0s 457789550e-09 1s 1s 457796070e-09 1s 1s 457796550e-09 0s 0s 457799790e-09 1s 1s 457806350e-09 1s 1s 457806790e-09 0s 0s 457810030e-09 1s 1s 457816630e-09 1s 1s 457817030e-09 0s 0s 457820270e-09 1s 1s 457826910e-09 1s 1s 457827270e-09 0s 0s 457830510e-09 1s 1s 457837190e-09 1s 1s 457837510e-09 0s 0s 457840750e-09 1s 1s 457847470e-09 1s 1s 457847750e-09 0s 0s 457850990e-09 1s 1s 457857750e-09 1s 1s 457857990e-09 0s 0s 457861230e-09 1s 1s 457868030e-09 1s 1s 457868230e-09 0s 0s 457871470e-09 1s 1s 457878310e-09 1s 1s 457878470e-09 0s 0s 457881710e-09 1s 1s 457888590e-09 1s 1s 457888710e-09 0s 0s 457891950e-09 1s 1s 457898870e-09 1s 1s 457898950e-09 0s 0s 457902190e-09 1s 1s 457909150e-09 1s 1s 457909190e-09 0s 0s 457912430e-09 1s 1s 457919430e-09 0s 0s 457922670e-09 1s 1s 457929670e-09 0s 0s 457929710e-09 0s 0s 457932910e-09 1s 1s 457939910e-09 0s 0s 457939990e-09 0s 0s 457943150e-09 1s 1s 457950150e-09 0s 0s 457950270e-09 0s 0s 457953390e-09 1s 1s 457960390e-09 0s 0s 457960550e-09 0s 0s 457963630e-09 1s 1s 457970630e-09 0s 0s 457970830e-09 0s 0s 457973870e-09 1s 1s 457980870e-09 0s 0s 457981110e-09 0s 0s 457984110e-09 1s 1s 457991110e-09 0s 0s 457991390e-09 0s 0s 457994350e-09 1s 1s 458001350e-09 0s 0s 458001670e-09 0s 0s 458004590e-09 1s 1s 458011590e-09 0s 0s 458011950e-09 0s 0s 458014830e-09 1s 1s 458021830e-09 0s 0s 458022230e-09 0s 0s 458025070e-09 1s 1s 458032070e-09 0s 0s 458032510e-09 0s 0s 458035310e-09 1s 1s 458042310e-09 0s 0s 458042790e-09 0s 0s 458045550e-09 1s 1s 458052550e-09 0s 0s 458053070e-09 0s 0s 458055790e-09 1s 1s 458062790e-09 0s 0s 458063350e-09 0s 0s 458066030e-09 1s 1s 458073030e-09 0s 0s 458073630e-09 0s 0s 458076270e-09 1s 1s 458083270e-09 0s 0s 458083910e-09 0s 0s 458086510e-09 1s 1s 458093510e-09 0s 0s 458094190e-09 0s 0s 458096750e-09 1s 1s 458103750e-09 0s 0s 458104470e-09 0s 0s 458106990e-09 1s 1s 458113990e-09 0s 0s 458114750e-09 0s 0s 458117230e-09 1s 1s 458124230e-09 0s 0s 458125030e-09 0s 0s 458127470e-09 1s 1s 458134470e-09 0s 0s 458135310e-09 0s 0s 458137710e-09 1s 1s 458144710e-09 0s 0s 458145590e-09 0s 0s 458147950e-09 1s 1s 458154950e-09 0s 0s 458155870e-09 0s 0s 458158190e-09 1s 1s 458165190e-09 0s 0s 458166150e-09 0s 0s 458168430e-09 1s 1s 458175430e-09 0s 0s 458176430e-09 0s 0s 458178670e-09 1s 1s 458185670e-09 0s 0s 458186710e-09 0s 0s 458188910e-09 1s 1s 458195910e-09 0s 0s 458196990e-09 0s 0s 458199150e-09 1s 1s 458206150e-09 0s 0s 458207270e-09 0s 0s 458209390e-09 1s 1s 458216390e-09 0s 0s 458217550e-09 0s 0s 458219630e-09 1s 1s 458226630e-09 0s 0s 458227830e-09 0s 0s 458229870e-09 1s 1s 458236870e-09 0s 0s 458238110e-09 0s 0s 458240110e-09 1s 1s 458247110e-09 0s 0s 458248390e-09 0s 0s 458250350e-09 1s 1s 458257350e-09 0s 0s 458258670e-09 0s 0s 458260590e-09 1s 1s 458267590e-09 0s 0s 458268950e-09 0s 0s 458270830e-09 1s 1s 458277830e-09 0s 0s 458279230e-09 0s 0s 458281070e-09 1s 1s 458288070e-09 0s 0s 458289510e-09 0s 0s 458291310e-09 1s 1s 458298310e-09 0s 0s 458299790e-09 0s 0s 458301550e-09 1s 1s 458308550e-09 0s 0s 458310070e-09 0s 0s 458311790e-09 1s 1s 458318790e-09 0s 0s 458320350e-09 0s 0s 458322030e-09 1s 1s 458329030e-09 0s 0s 458330630e-09 0s 0s 458332270e-09 1s 1s 458339270e-09 0s 0s 458340910e-09 0s 0s 458342510e-09 1s 1s 458349510e-09 0s 0s 458351190e-09 0s 0s 458352750e-09 1s 1s 458359750e-09 0s 0s 458361470e-09 0s 0s 458362990e-09 1s 1s 458369990e-09 0s 0s 458371750e-09 0s 0s 458373230e-09 1s 1s 458380230e-09 0s 0s 458382030e-09 0s 0s 458383470e-09 1s 1s 458390470e-09 0s 0s 458392310e-09 0s 0s 458393710e-09 1s 1s 458400710e-09 0s 0s 458402590e-09 0s 0s 458403950e-09 1s 1s 458410950e-09 0s 0s 458412870e-09 0s 0s 458414190e-09 1s 1s 458421190e-09 0s 0s 458423150e-09 0s 0s 458424430e-09 1s 1s 458431430e-09 0s 0s 458433430e-09 0s 0s 458434670e-09 1s 1s 458441670e-09 0s 0s 458443710e-09 0s 0s 458444910e-09 1s 1s 458451910e-09 0s 0s 458453990e-09 0s 0s 458455150e-09 1s 1s 458462150e-09 0s 0s 458464270e-09 0s 0s 458465390e-09 1s 1s 458472390e-09 0s 0s 458474550e-09 0s 0s 458475630e-09 1s 1s 458482630e-09 0s 0s 458484830e-09 0s 0s 458485870e-09 1s 1s 458492870e-09 0s 0s 458495110e-09 0s 0s 458496110e-09 1s 1s 458503110e-09 0s 0s 458505390e-09 0s 0s 458506350e-09 1s 1s 458513350e-09 0s 0s 458515670e-09 0s 0s 458516590e-09 1s 1s 458523590e-09 0s 0s 458525950e-09 0s 0s 458526830e-09 1s 1s 458533830e-09 0s 0s 458536230e-09 0s 0s 458537070e-09 1s 1s 458544070e-09 0s 0s 458546510e-09 0s 0s 458547310e-09 1s 1s 458554310e-09 0s 0s 458556790e-09 0s 0s 458557550e-09 1s 1s 458564550e-09 0s 0s 458567070e-09 0s 0s 458567790e-09 1s 1s 458574790e-09 0s 0s 458577350e-09 0s 0s 458578030e-09 1s 1s 458585030e-09 0s 0s 458587630e-09 0s 0s 458588270e-09 1s 1s 458595270e-09 0s 0s 458597910e-09 0s 0s 458598510e-09 1s 1s 458605510e-09 0s 0s 458608190e-09 0s 0s 458608750e-09 1s 1s 458615750e-09 0s 0s 458618470e-09 0s 0s 458618990e-09 1s 1s 458625990e-09 0s 0s 458628750e-09 0s 0s 458629230e-09 1s 1s 458636230e-09 0s 0s 458639030e-09 0s 0s 458639470e-09 1s 1s 458646470e-09 0s 0s 458649310e-09 0s 0s 458649710e-09 1s 1s 458656710e-09 0s 0s 458659590e-09 0s 0s 458659950e-09 1s 1s 458666950e-09 0s 0s 458669870e-09 0s 0s 458670190e-09 1s 1s 458677190e-09 0s 0s 458680150e-09 0s 0s 458680430e-09 1s 1s 458687430e-09 0s 0s 458690430e-09 0s 0s 458690670e-09 1s 1s 458697670e-09 0s 0s 458700710e-09 0s 0s 458700910e-09 1s 1s 458707910e-09 0s 0s 458710990e-09 0s 0s 458711150e-09 1s 1s 458718150e-09 0s 0s 458721270e-09 0s 0s 458721390e-09 1s 1s 458728390e-09 0s 0s 458731550e-09 0s 0s 458731630e-09 1s 1s 458738630e-09 0s 0s 458741830e-09 0s 0s 458741870e-09 1s 1s 458748870e-09 0s 0s 458752110e-09 1s 1s 458752150e-09 1s 1s 458759150e-09 0s 0s 458762350e-09 1s 1s 458762430e-09 1s 1s 458769390e-09 0s 0s 458772590e-09 1s 1s 458772710e-09 1s 1s 458779630e-09 0s 0s 458782830e-09 1s 1s 458782990e-09 1s 1s 458789870e-09 0s 0s 458793070e-09 1s 1s 458793270e-09 1s 1s 458800110e-09 0s 0s 458803310e-09 1s 1s 458803550e-09 1s 1s 458810350e-09 0s 0s 458813550e-09 1s 1s 458813830e-09 1s 1s 458820590e-09 0s 0s 458823790e-09 1s 1s 458824110e-09 1s 1s 458830830e-09 0s 0s 458834030e-09 1s 1s 458834390e-09 1s 1s 458841070e-09 0s 0s 458844270e-09 1s 1s 458844670e-09 1s 1s 458851310e-09 0s 0s 458854510e-09 1s 1s 458854950e-09 1s 1s 458861550e-09 0s 0s 458864750e-09 1s 1s 458865230e-09 1s 1s 458871790e-09 0s 0s 458874990e-09 1s 1s 458875510e-09 1s 1s 458882030e-09 0s 0s 458885230e-09 1s 1s 458885790e-09 1s 1s 458892270e-09 0s 0s 458895470e-09 1s 1s 458896070e-09 1s 1s 458902510e-09 0s 0s 458905710e-09 1s 1s 458906350e-09 1s 1s 458912750e-09 0s 0s 458915950e-09 1s 1s 458916630e-09 1s 1s 458922990e-09 0s 0s 458926190e-09 1s 1s 458926910e-09 1s 1s 458933230e-09 0s 0s 458936430e-09 1s 1s 458937190e-09 1s 1s 458943470e-09 0s 0s 458946670e-09 1s 1s 458947470e-09 1s 1s 458953710e-09 0s 0s 458956910e-09 1s 1s 458957750e-09 1s 1s 458963950e-09 0s 0s 458967150e-09 1s 1s 458968030e-09 1s 1s 458974190e-09 0s 0s 458977390e-09 1s 1s 458978310e-09 1s 1s 458984430e-09 0s 0s 458987630e-09 1s 1s 458988590e-09 1s 1s 458994670e-09 0s 0s 458997870e-09 1s 1s 458998870e-09 1s 1s 459004910e-09 0s 0s 459008110e-09 1s 1s 459009150e-09 1s 1s 459015150e-09 0s 0s 459018350e-09 1s 1s 459019430e-09 1s 1s 459025390e-09 0s 0s 459028590e-09 1s 1s 459029710e-09 1s 1s 459035630e-09 0s 0s 459038830e-09 1s 1s 459039990e-09 1s 1s 459045870e-09 0s 0s 459049070e-09 1s 1s 459050270e-09 1s 1s 459056110e-09 0s 0s 459059310e-09 1s 1s 459060550e-09 1s 1s 459066350e-09 0s 0s 459069550e-09 1s 1s 459070830e-09 1s 1s 459076590e-09 0s 0s 459079790e-09 1s 1s 459081110e-09 1s 1s 459086830e-09 0s 0s 459090030e-09 1s 1s 459091390e-09 1s 1s 459097070e-09 0s 0s 459100270e-09 1s 1s 459101670e-09 1s 1s 459107310e-09 0s 0s 459110510e-09 1s 1s 459111950e-09 1s 1s 459117550e-09 0s 0s 459120750e-09 1s 1s 459122230e-09 1s 1s 459127790e-09 0s 0s 459130990e-09 1s 1s 459132510e-09 1s 1s 459138030e-09 0s 0s 459141230e-09 1s 1s 459142790e-09 1s 1s 459148270e-09 0s 0s 459151470e-09 1s 1s 459153070e-09 1s 1s 459158510e-09 0s 0s 459161710e-09 1s 1s 459163350e-09 1s 1s 459168750e-09 0s 0s 459171950e-09 1s 1s 459173630e-09 1s 1s 459178990e-09 0s 0s 459182190e-09 1s 1s 459183910e-09 1s 1s 459189230e-09 0s 0s 459192430e-09 1s 1s 459194190e-09 1s 1s 459199470e-09 0s 0s 459202670e-09 1s 1s 459204470e-09 1s 1s 459209710e-09 0s 0s 459212910e-09 1s 1s 459214750e-09 1s 1s 459219950e-09 0s 0s 459223150e-09 1s 1s 459225030e-09 1s 1s 459230190e-09 0s 0s 459233390e-09 1s 1s 459235310e-09 1s 1s 459240430e-09 0s 0s 459243630e-09 1s 1s 459245590e-09 1s 1s 459250670e-09 0s 0s 459253870e-09 1s 1s 459255870e-09 1s 1s 459260910e-09 0s 0s 459264110e-09 1s 1s 459266150e-09 1s 1s 459271150e-09 0s 0s 459274350e-09 1s 1s 459276430e-09 1s 1s 459281390e-09 0s 0s 459284590e-09 1s 1s 459286710e-09 1s 1s 459291630e-09 0s 0s 459294830e-09 1s 1s 459296990e-09 1s 1s 459301870e-09 0s 0s 459305070e-09 1s 1s 459307270e-09 1s 1s 459312110e-09 0s 0s 459315310e-09 1s 1s 459317550e-09 1s 1s 459322350e-09 0s 0s 459325550e-09 1s 1s 459327830e-09 1s 1s 459332590e-09 0s 0s 459335790e-09 1s 1s 459338110e-09 1s 1s 459342830e-09 0s 0s 459346030e-09 1s 1s 459348390e-09 1s 1s 459353070e-09 0s 0s 459356270e-09 1s 1s 459358670e-09 1s 1s 459363310e-09 0s 0s 459366510e-09 1s 1s 459368950e-09 1s 1s 459373550e-09 0s 0s 459376750e-09 1s 1s 459379230e-09 1s 1s 459383790e-09 0s 0s 459386990e-09 1s 1s 459389510e-09 1s 1s 459394030e-09 0s 0s 459397230e-09 1s 1s 459399790e-09 1s 1s 459404270e-09 0s 0s 459407470e-09 1s 1s 459410070e-09 1s 1s 459414510e-09 0s 0s 459417710e-09 1s 1s 459420350e-09 1s 1s 459424750e-09 0s 0s 459427950e-09 1s 1s 459430630e-09 1s 1s 459434990e-09 0s 0s 459438190e-09 1s 1s 459440910e-09 1s 1s 459445230e-09 0s 0s 459448430e-09 1s 1s 459451190e-09 1s 1s 459455470e-09 0s 0s 459458670e-09 1s 1s 459461470e-09 1s 1s 459465710e-09 0s 0s 459468910e-09 1s 1s 459471750e-09 1s 1s 459475950e-09 0s 0s 459479150e-09 1s 1s 459482030e-09 1s 1s 459486190e-09 0s 0s 459489390e-09 1s 1s 459492310e-09 1s 1s 459496430e-09 0s 0s 459499630e-09 1s 1s 459502590e-09 1s 1s 459506670e-09 0s 0s 459509870e-09 1s 1s 459512870e-09 1s 1s 459516910e-09 0s 0s 459520110e-09 1s 1s 459523150e-09 1s 1s 459527150e-09 0s 0s 459530350e-09 1s 1s 459533430e-09 1s 1s 459537390e-09 0s 0s 459540590e-09 1s 1s 459543710e-09 1s 1s 459547630e-09 0s 0s 459550830e-09 1s 1s 459553990e-09 1s 1s 459557870e-09 0s 0s 459561070e-09 1s 1s 459564270e-09 1s 1s 459568110e-09 0s 0s 459571310e-09 1s 1s 459574550e-09 1s 1s 459578350e-09 0s 0s 459581550e-09 1s 1s 459584830e-09 1s 1s 459588590e-09 0s 0s 459591790e-09 1s 1s 459595110e-09 1s 1s 459598830e-09 0s 0s 459602030e-09 1s 1s 459605390e-09 1s 1s 459609070e-09 0s 0s 459612270e-09 1s 1s 459615670e-09 1s 1s 459619310e-09 0s 0s 459622510e-09 1s 1s 459625950e-09 1s 1s 459629550e-09 0s 0s 459632750e-09 1s 1s 459636230e-09 1s 1s 459639790e-09 0s 0s 459642990e-09 1s 1s 459646510e-09 1s 1s 459650030e-09 0s 0s 459653230e-09 1s 1s 459656790e-09 1s 1s 459660270e-09 0s 0s 459663470e-09 1s 1s 459667070e-09 1s 1s 459670510e-09 0s 0s 459673710e-09 1s 1s 459677350e-09 1s 1s 459680750e-09 0s 0s 459683950e-09 1s 1s 459687630e-09 1s 1s 459690990e-09 0s 0s 459694190e-09 1s 1s 459697910e-09 1s 1s 459701230e-09 0s 0s 459704430e-09 1s 1s 459708190e-09 1s 1s 459711470e-09 0s 0s 459714670e-09 1s 1s 459718470e-09 1s 1s 459721710e-09 0s 0s 459724910e-09 1s 1s 459728750e-09 1s 1s 459731950e-09 0s 0s 459735150e-09 1s 1s 459739030e-09 1s 1s 459742190e-09 0s 0s 459745390e-09 1s 1s 459749310e-09 1s 1s 459752430e-09 0s 0s 459755630e-09 1s 1s 459759590e-09 1s 1s 459762670e-09 0s 0s 459765870e-09 1s 1s 459769870e-09 1s 1s 459772910e-09 0s 0s 459776110e-09 1s 1s 459780150e-09 1s 1s 459783150e-09 0s 0s 459786350e-09 1s 1s 459790430e-09 1s 1s 459793390e-09 0s 0s 459796590e-09 1s 1s 459800710e-09 1s 1s 459803630e-09 0s 0s 459806830e-09 1s 1s 459810990e-09 1s 1s 459813870e-09 0s 0s 459817070e-09 1s 1s 459821270e-09 1s 1s 459824110e-09 0s 0s 459827310e-09 1s 1s 459831550e-09 1s 1s 459834350e-09 0s 0s 459837550e-09 1s 1s 459841830e-09 1s 1s 459844590e-09 0s 0s 459847790e-09 1s 1s 459852110e-09 1s 1s 459854830e-09 0s 0s 459858030e-09 1s 1s 459862390e-09 1s 1s 459865070e-09 0s 0s 459868270e-09 1s 1s 459872670e-09 1s 1s 459875310e-09 0s 0s 459878510e-09 1s 1s 459882950e-09 1s 1s 459885550e-09 0s 0s 459888750e-09 1s 1s 459893230e-09 1s 1s 459895790e-09 0s 0s 459898990e-09 1s 1s 459903510e-09 1s 1s 459906030e-09 0s 0s 459909230e-09 1s 1s 459913790e-09 1s 1s 459916270e-09 0s 0s 459919470e-09 1s 1s 459924070e-09 1s 1s 459926510e-09 0s 0s 459929710e-09 1s 1s 459934350e-09 1s 1s 459936750e-09 0s 0s 459939950e-09 1s 1s 459944630e-09 1s 1s 459946990e-09 0s 0s 459950190e-09 1s 1s 459954910e-09 1s 1s 459957230e-09 0s 0s 459960430e-09 1s 1s 459965190e-09 1s 1s 459967470e-09 0s 0s 459970670e-09 1s 1s 459975470e-09 1s 1s 459977710e-09 0s 0s 459980910e-09 1s 1s 459985750e-09 1s 1s 459987950e-09 0s 0s 459991150e-09 1s 1s 459996030e-09 1s 1s 459998190e-09 0s 0s 460001390e-09 1s 1s 460006310e-09 1s 1s 460008430e-09 0s 0s 460011630e-09 1s 1s 460016590e-09 1s 1s 460018670e-09 0s 0s 460021870e-09 1s 1s 460026870e-09 1s 1s 460028910e-09 0s 0s 460032110e-09 1s 1s 460037150e-09 1s 1s 460039150e-09 0s 0s 460042350e-09 1s 1s 460047430e-09 1s 1s 460049390e-09 0s 0s 460052590e-09 1s 1s 460057710e-09 1s 1s 460059630e-09 0s 0s 460062830e-09 1s 1s 460067990e-09 1s 1s 460069870e-09 0s 0s 460073070e-09 1s 1s 460078270e-09 1s 1s 460080110e-09 0s 0s 460083310e-09 1s 1s 460088550e-09 1s 1s 460090350e-09 0s 0s 460093550e-09 1s 1s 460098830e-09 1s 1s 460100590e-09 0s 0s 460103790e-09 1s 1s 460109110e-09 1s 1s 460110830e-09 0s 0s 460114030e-09 1s 1s 460119390e-09 1s 1s 460121070e-09 0s 0s 460124270e-09 1s 1s 460129670e-09 1s 1s 460131310e-09 0s 0s 460134510e-09 1s 1s 460139950e-09 1s 1s 460141550e-09 0s 0s 460144750e-09 1s 1s 460150230e-09 1s 1s 460151790e-09 0s 0s 460154990e-09 1s 1s 460160510e-09 1s 1s 460162030e-09 0s 0s 460165230e-09 1s 1s 460170790e-09 1s 1s 460172270e-09 0s 0s 460175470e-09 1s 1s 460181070e-09 1s 1s 460182510e-09 0s 0s 460185710e-09 1s 1s 460191350e-09 1s 1s 460192750e-09 0s 0s 460195950e-09 1s 1s 460201630e-09 1s 1s 460202990e-09 0s 0s 460206190e-09 1s 1s 460211910e-09 1s 1s 460213230e-09 0s 0s 460216430e-09 1s 1s 460222190e-09 1s 1s 460223470e-09 0s 0s 460226670e-09 1s 1s 460232470e-09 1s 1s 460233710e-09 0s 0s 460236910e-09 1s 1s 460242750e-09 1s 1s 460243950e-09 0s 0s 460247150e-09 1s 1s 460253030e-09 1s 1s 460254190e-09 0s 0s 460257390e-09 1s 1s 460263310e-09 1s 1s 460264430e-09 0s 0s 460267630e-09 1s 1s 460273590e-09 1s 1s 460274670e-09 0s 0s 460277870e-09 1s 1s 460283870e-09 1s 1s 460284910e-09 0s 0s 460288110e-09 1s 1s 460294150e-09 1s 1s 460295150e-09 0s 0s 460298350e-09 1s 1s 460304430e-09 1s 1s 460305390e-09 0s 0s 460308590e-09 1s 1s 460314710e-09 1s 1s 460315630e-09 0s 0s 460318830e-09 1s 1s 460324990e-09 1s 1s 460325870e-09 0s 0s 460329070e-09 1s 1s 460335270e-09 1s 1s 460336110e-09 0s 0s 460339310e-09 1s 1s 460345550e-09 1s 1s 460346350e-09 0s 0s 460349550e-09 1s 1s 460355830e-09 1s 1s 460356590e-09 0s 0s 460359790e-09 1s 1s 460366110e-09 1s 1s 460366830e-09 0s 0s 460370030e-09 1s 1s 460376390e-09 1s 1s 460377070e-09 0s 0s 460380270e-09 1s 1s 460386670e-09 1s 1s 460387310e-09 0s 0s 460390510e-09 1s 1s 460396950e-09 1s 1s 460397550e-09 0s 0s 460400750e-09 1s 1s 460407230e-09 1s 1s 460407790e-09 0s 0s 460410990e-09 1s 1s 460417510e-09 1s 1s 460418030e-09 0s 0s 460421230e-09 1s 1s 460427790e-09 1s 1s 460428270e-09 0s 0s 460431470e-09 1s 1s 460438070e-09 1s 1s 460438510e-09 0s 0s 460441710e-09 1s 1s 460448350e-09 1s 1s 460448750e-09 0s 0s 460451950e-09 1s 1s 460458630e-09 1s 1s 460458990e-09 0s 0s 460462190e-09 1s 1s 460468910e-09 1s 1s 460469230e-09 0s 0s 460472430e-09 1s 1s 460479190e-09 1s 1s 460479470e-09 0s 0s 460482670e-09 1s 1s 460489470e-09 1s 1s 460489710e-09 0s 0s 460492910e-09 1s 1s 460499750e-09 1s 1s 460499950e-09 0s 0s 460503150e-09 1s 1s 460510030e-09 1s 1s 460510190e-09 0s 0s 460513390e-09 1s 1s 460520310e-09 1s 1s 460520430e-09 0s 0s 460523630e-09 1s 1s 460530590e-09 1s 1s 460530670e-09 0s 0s 460533870e-09 1s 1s 460540870e-09 1s 1s 460540910e-09 0s 0s 460544110e-09 1s 1s 460551150e-09 0s 0s 460554350e-09 1s 1s 460561390e-09 0s 0s 460561430e-09 0s 0s 460564590e-09 1s 1s 460571630e-09 0s 0s 460571710e-09 0s 0s 460574830e-09 1s 1s 460581870e-09 0s 0s 460581990e-09 0s 0s 460585070e-09 1s 1s 460592110e-09 0s 0s 460592270e-09 0s 0s 460595310e-09 1s 1s 460602350e-09 0s 0s 460602550e-09 0s 0s 460605550e-09 1s 1s 460612590e-09 0s 0s 460612830e-09 0s 0s 460615790e-09 1s 1s 460622830e-09 0s 0s 460623110e-09 0s 0s 460626030e-09 1s 1s 460633070e-09 0s 0s 460633390e-09 0s 0s 460636270e-09 1s 1s 460643310e-09 0s 0s 460643670e-09 0s 0s 460646510e-09 1s 1s 460653550e-09 0s 0s 460653950e-09 0s 0s 460656750e-09 1s 1s 460663790e-09 0s 0s 460664230e-09 0s 0s 460666990e-09 1s 1s 460674030e-09 0s 0s 460674510e-09 0s 0s 460677230e-09 1s 1s 460684270e-09 0s 0s 460684790e-09 0s 0s 460687470e-09 1s 1s 460694510e-09 0s 0s 460695070e-09 0s 0s 460697710e-09 1s 1s 460704750e-09 0s 0s 460705350e-09 0s 0s 460707950e-09 1s 1s 460714990e-09 0s 0s 460715630e-09 0s 0s 460718190e-09 1s 1s 460725230e-09 0s 0s 460725910e-09 0s 0s 460728430e-09 1s 1s 460735470e-09 0s 0s 460736190e-09 0s 0s 460738670e-09 1s 1s 460745710e-09 0s 0s 460746470e-09 0s 0s 460748910e-09 1s 1s 460755950e-09 0s 0s 460756750e-09 0s 0s 460759150e-09 1s 1s 460766190e-09 0s 0s 460767030e-09 0s 0s 460769390e-09 1s 1s 460776430e-09 0s 0s 460777310e-09 0s 0s 460779630e-09 1s 1s 460786670e-09 0s 0s 460787590e-09 0s 0s 460789870e-09 1s 1s 460796910e-09 0s 0s 460797870e-09 0s 0s 460800110e-09 1s 1s 460807150e-09 0s 0s 460808150e-09 0s 0s 460810350e-09 1s 1s 460817390e-09 0s 0s 460818430e-09 0s 0s 460820590e-09 1s 1s 460827630e-09 0s 0s 460828710e-09 0s 0s 460830830e-09 1s 1s 460837870e-09 0s 0s 460838990e-09 0s 0s 460841070e-09 1s 1s 460848110e-09 0s 0s 460849270e-09 0s 0s 460851310e-09 1s 1s 460858350e-09 0s 0s 460859550e-09 0s 0s 460861550e-09 1s 1s 460868590e-09 0s 0s 460869830e-09 0s 0s 460871790e-09 1s 1s 460878830e-09 0s 0s 460880110e-09 0s 0s 460882030e-09 1s 1s 460889070e-09 0s 0s 460890390e-09 0s 0s 460892270e-09 1s 1s 460899310e-09 0s 0s 460900670e-09 0s 0s 460902510e-09 1s 1s 460909550e-09 0s 0s 460910950e-09 0s 0s 460912750e-09 1s 1s 460919790e-09 0s 0s 460921230e-09 0s 0s 460922990e-09 1s 1s 460930030e-09 0s 0s 460931510e-09 0s 0s 460933230e-09 1s 1s 460940270e-09 0s 0s 460941790e-09 0s 0s 460943470e-09 1s 1s 460950510e-09 0s 0s 460952070e-09 0s 0s 460953710e-09 1s 1s 460960750e-09 0s 0s 460962350e-09 0s 0s 460963950e-09 1s 1s 460970990e-09 0s 0s 460972630e-09 0s 0s 460974190e-09 1s 1s 460981230e-09 0s 0s 460982910e-09 0s 0s 460984430e-09 1s 1s 460991470e-09 0s 0s 460993190e-09 0s 0s 460994670e-09 1s 1s 461001710e-09 0s 0s 461003470e-09 0s 0s 461004910e-09 1s 1s 461011950e-09 0s 0s 461013750e-09 0s 0s 461015150e-09 1s 1s 461022190e-09 0s 0s 461024030e-09 0s 0s 461025390e-09 1s 1s 461032430e-09 0s 0s 461034310e-09 0s 0s 461035630e-09 1s 1s 461042670e-09 0s 0s 461044590e-09 0s 0s 461045870e-09 1s 1s 461052910e-09 0s 0s 461054870e-09 0s 0s 461056110e-09 1s 1s 461063150e-09 0s 0s 461065150e-09 0s 0s 461066350e-09 1s 1s 461073390e-09 0s 0s 461075430e-09 0s 0s 461076590e-09 1s 1s 461083630e-09 0s 0s 461085710e-09 0s 0s 461086830e-09 1s 1s 461093870e-09 0s 0s 461095990e-09 0s 0s 461097070e-09 1s 1s 461104110e-09 0s 0s 461106270e-09 0s 0s 461107310e-09 1s 1s 461114350e-09 0s 0s 461116550e-09 0s 0s 461117550e-09 1s 1s 461124590e-09 0s 0s 461126830e-09 0s 0s 461127790e-09 1s 1s 461134830e-09 0s 0s 461137110e-09 0s 0s 461138030e-09 1s 1s 461145070e-09 0s 0s 461147390e-09 0s 0s 461148270e-09 1s 1s 461155310e-09 0s 0s 461157670e-09 0s 0s 461158510e-09 1s 1s 461165550e-09 0s 0s 461167950e-09 0s 0s 461168750e-09 1s 1s 461175790e-09 0s 0s 461178230e-09 0s 0s 461178990e-09 1s 1s 461186030e-09 0s 0s 461188510e-09 0s 0s 461189230e-09 1s 1s 461196270e-09 0s 0s 461198790e-09 0s 0s 461199470e-09 1s 1s 461206510e-09 0s 0s 461209070e-09 0s 0s 461209710e-09 1s 1s 461216750e-09 0s 0s 461219350e-09 0s 0s 461219950e-09 1s 1s 461226990e-09 0s 0s 461229630e-09 0s 0s 461230190e-09 1s 1s 461237230e-09 0s 0s 461239910e-09 0s 0s 461240430e-09 1s 1s 461247470e-09 0s 0s 461250190e-09 0s 0s 461250670e-09 1s 1s 461257710e-09 0s 0s 461260470e-09 0s 0s 461260910e-09 1s 1s 461267950e-09 0s 0s 461270750e-09 0s 0s 461271150e-09 1s 1s 461278190e-09 0s 0s 461281030e-09 0s 0s 461281390e-09 1s 1s 461288430e-09 0s 0s 461291310e-09 0s 0s 461291630e-09 1s 1s 461298670e-09 0s 0s 461301590e-09 0s 0s 461301870e-09 1s 1s 461308910e-09 0s 0s 461311870e-09 0s 0s 461312110e-09 1s 1s 461319150e-09 0s 0s 461322150e-09 0s 0s 461322350e-09 1s 1s 461329390e-09 0s 0s 461332430e-09 0s 0s 461332590e-09 1s 1s 461339630e-09 0s 0s 461342710e-09 0s 0s 461342830e-09 1s 1s 461349870e-09 0s 0s 461352990e-09 0s 0s 461353070e-09 1s 1s 461360110e-09 0s 0s 461363270e-09 0s 0s 461363310e-09 1s 1s 461370350e-09 0s 0s 461373550e-09 1s 1s 461373590e-09 1s 1s 461380630e-09 0s 0s 461383790e-09 1s 1s 461383870e-09 1s 1s 461390870e-09 0s 0s 461394030e-09 1s 1s 461394150e-09 1s 1s 461401110e-09 0s 0s 461404270e-09 1s 1s 461404430e-09 1s 1s 461411350e-09 0s 0s 461414510e-09 1s 1s 461414710e-09 1s 1s 461421590e-09 0s 0s 461424750e-09 1s 1s 461424990e-09 1s 1s 461431830e-09 0s 0s 461434990e-09 1s 1s 461435270e-09 1s 1s 461442070e-09 0s 0s 461445230e-09 1s 1s 461445550e-09 1s 1s 461452310e-09 0s 0s 461455470e-09 1s 1s 461455830e-09 1s 1s 461462550e-09 0s 0s 461465710e-09 1s 1s 461466110e-09 1s 1s 461472790e-09 0s 0s 461475950e-09 1s 1s 461476390e-09 1s 1s 461483030e-09 0s 0s 461486190e-09 1s 1s 461486670e-09 1s 1s 461493270e-09 0s 0s 461496430e-09 1s 1s 461496950e-09 1s 1s 461503510e-09 0s 0s 461506670e-09 1s 1s 461507230e-09 1s 1s 461513750e-09 0s 0s 461516910e-09 1s 1s 461517510e-09 1s 1s 461523990e-09 0s 0s 461527150e-09 1s 1s 461527790e-09 1s 1s 461534230e-09 0s 0s 461537390e-09 1s 1s 461538070e-09 1s 1s 461544470e-09 0s 0s 461547630e-09 1s 1s 461548350e-09 1s 1s 461554710e-09 0s 0s 461557870e-09 1s 1s 461558630e-09 1s 1s 461564950e-09 0s 0s 461568110e-09 1s 1s 461568910e-09 1s 1s 461575190e-09 0s 0s 461578350e-09 1s 1s 461579190e-09 1s 1s 461585430e-09 0s 0s 461588590e-09 1s 1s 461589470e-09 1s 1s 461595670e-09 0s 0s 461598830e-09 1s 1s 461599750e-09 1s 1s 461605910e-09 0s 0s 461609070e-09 1s 1s 461610030e-09 1s 1s 461616150e-09 0s 0s 461619310e-09 1s 1s 461620310e-09 1s 1s 461626390e-09 0s 0s 461629550e-09 1s 1s 461630590e-09 1s 1s 461636630e-09 0s 0s 461639790e-09 1s 1s 461640870e-09 1s 1s 461646870e-09 0s 0s 461650030e-09 1s 1s 461651150e-09 1s 1s 461657110e-09 0s 0s 461660270e-09 1s 1s 461661430e-09 1s 1s 461667350e-09 0s 0s 461670510e-09 1s 1s 461671710e-09 1s 1s 461677590e-09 0s 0s 461680750e-09 1s 1s 461681990e-09 1s 1s 461687830e-09 0s 0s 461690990e-09 1s 1s 461692270e-09 1s 1s 461698070e-09 0s 0s 461701230e-09 1s 1s 461702550e-09 1s 1s 461708310e-09 0s 0s 461711470e-09 1s 1s 461712830e-09 1s 1s 461718550e-09 0s 0s 461721710e-09 1s 1s 461723110e-09 1s 1s 461728790e-09 0s 0s 461731950e-09 1s 1s 461733390e-09 1s 1s 461739030e-09 0s 0s 461742190e-09 1s 1s 461743670e-09 1s 1s 461749270e-09 0s 0s 461752430e-09 1s 1s 461753950e-09 1s 1s 461759510e-09 0s 0s 461762670e-09 1s 1s 461764230e-09 1s 1s 461769750e-09 0s 0s 461772910e-09 1s 1s 461774510e-09 1s 1s 461779990e-09 0s 0s 461783150e-09 1s 1s 461784790e-09 1s 1s 461790230e-09 0s 0s 461793390e-09 1s 1s 461795070e-09 1s 1s 461800470e-09 0s 0s 461803630e-09 1s 1s 461805350e-09 1s 1s 461810710e-09 0s 0s 461813870e-09 1s 1s 461815630e-09 1s 1s 461820950e-09 0s 0s 461824110e-09 1s 1s 461825910e-09 1s 1s 461831190e-09 0s 0s 461834350e-09 1s 1s 461836190e-09 1s 1s 461841430e-09 0s 0s 461844590e-09 1s 1s 461846470e-09 1s 1s 461851670e-09 0s 0s 461854830e-09 1s 1s 461856750e-09 1s 1s 461861910e-09 0s 0s 461865070e-09 1s 1s 461867030e-09 1s 1s 461872150e-09 0s 0s 461875310e-09 1s 1s 461877310e-09 1s 1s 461882390e-09 0s 0s 461885550e-09 1s 1s 461887590e-09 1s 1s 461892630e-09 0s 0s 461895790e-09 1s 1s 461897870e-09 1s 1s 461902870e-09 0s 0s 461906030e-09 1s 1s 461908150e-09 1s 1s 461913110e-09 0s 0s 461916270e-09 1s 1s 461918430e-09 1s 1s 461923350e-09 0s 0s 461926510e-09 1s 1s 461928710e-09 1s 1s 461933590e-09 0s 0s 461936750e-09 1s 1s 461938990e-09 1s 1s 461943830e-09 0s 0s 461946990e-09 1s 1s 461949270e-09 1s 1s 461954070e-09 0s 0s 461957230e-09 1s 1s 461959550e-09 1s 1s 461964310e-09 0s 0s 461967470e-09 1s 1s 461969830e-09 1s 1s 461974550e-09 0s 0s 461977710e-09 1s 1s 461980110e-09 1s 1s 461984790e-09 0s 0s 461987950e-09 1s 1s 461990390e-09 1s 1s 461995030e-09 0s 0s 461998190e-09 1s 1s 462000670e-09 1s 1s 462005270e-09 0s 0s 462008430e-09 1s 1s 462010950e-09 1s 1s 462015510e-09 0s 0s 462018670e-09 1s 1s 462021230e-09 1s 1s 462025750e-09 0s 0s 462028910e-09 1s 1s 462031510e-09 1s 1s 462035990e-09 0s 0s 462039150e-09 1s 1s 462041790e-09 1s 1s 462046230e-09 0s 0s 462049390e-09 1s 1s 462052070e-09 1s 1s 462056470e-09 0s 0s 462059630e-09 1s 1s 462062350e-09 1s 1s 462066710e-09 0s 0s 462069870e-09 1s 1s 462072630e-09 1s 1s 462076950e-09 0s 0s 462080110e-09 1s 1s 462082910e-09 1s 1s 462087190e-09 0s 0s 462090350e-09 1s 1s 462093190e-09 1s 1s 462097430e-09 0s 0s 462100590e-09 1s 1s 462103470e-09 1s 1s 462107670e-09 0s 0s 462110830e-09 1s 1s 462113750e-09 1s 1s 462117910e-09 0s 0s 462121070e-09 1s 1s 462124030e-09 1s 1s 462128150e-09 0s 0s 462131310e-09 1s 1s 462134310e-09 1s 1s 462138390e-09 0s 0s 462141550e-09 1s 1s 462144590e-09 1s 1s 462148630e-09 0s 0s 462151790e-09 1s 1s 462154870e-09 1s 1s 462158870e-09 0s 0s 462162030e-09 1s 1s 462165150e-09 1s 1s 462169110e-09 0s 0s 462172270e-09 1s 1s 462175430e-09 1s 1s 462179350e-09 0s 0s 462182510e-09 1s 1s 462185710e-09 1s 1s 462189590e-09 0s 0s 462192750e-09 1s 1s 462195990e-09 1s 1s 462199830e-09 0s 0s 462202990e-09 1s 1s 462206270e-09 1s 1s 462210070e-09 0s 0s 462213230e-09 1s 1s 462216550e-09 1s 1s 462220310e-09 0s 0s 462223470e-09 1s 1s 462226830e-09 1s 1s 462230550e-09 0s 0s 462233710e-09 1s 1s 462237110e-09 1s 1s 462240790e-09 0s 0s 462243950e-09 1s 1s 462247390e-09 1s 1s 462251030e-09 0s 0s 462254190e-09 1s 1s 462257670e-09 1s 1s 462261270e-09 0s 0s 462264430e-09 1s 1s 462267950e-09 1s 1s 462271510e-09 0s 0s 462274670e-09 1s 1s 462278230e-09 1s 1s 462281750e-09 0s 0s 462284910e-09 1s 1s 462288510e-09 1s 1s 462291990e-09 0s 0s 462295150e-09 1s 1s 462298790e-09 1s 1s 462302230e-09 0s 0s 462305390e-09 1s 1s 462309070e-09 1s 1s 462312470e-09 0s 0s 462315630e-09 1s 1s 462319350e-09 1s 1s 462322710e-09 0s 0s 462325870e-09 1s 1s 462329630e-09 1s 1s 462332950e-09 0s 0s 462336110e-09 1s 1s 462339910e-09 1s 1s 462343190e-09 0s 0s 462346350e-09 1s 1s 462350190e-09 1s 1s 462353430e-09 0s 0s 462356590e-09 1s 1s 462360470e-09 1s 1s 462363670e-09 0s 0s 462366830e-09 1s 1s 462370750e-09 1s 1s 462373910e-09 0s 0s 462377070e-09 1s 1s 462381030e-09 1s 1s 462384150e-09 0s 0s 462387310e-09 1s 1s 462391310e-09 1s 1s 462394390e-09 0s 0s 462397550e-09 1s 1s 462401590e-09 1s 1s 462404630e-09 0s 0s 462407790e-09 1s 1s 462411870e-09 1s 1s 462414870e-09 0s 0s 462418030e-09 1s 1s 462422150e-09 1s 1s 462425110e-09 0s 0s 462428270e-09 1s 1s 462432430e-09 1s 1s 462435350e-09 0s 0s 462438510e-09 1s 1s 462442710e-09 1s 1s 462445590e-09 0s 0s 462448750e-09 1s 1s 462452990e-09 1s 1s 462455830e-09 0s 0s 462458990e-09 1s 1s 462463270e-09 1s 1s 462466070e-09 0s 0s 462469230e-09 1s 1s 462473550e-09 1s 1s 462476310e-09 0s 0s 462479470e-09 1s 1s 462483830e-09 1s 1s 462486550e-09 0s 0s 462489710e-09 1s 1s 462494110e-09 1s 1s 462496790e-09 0s 0s 462499950e-09 1s 1s 462504390e-09 1s 1s 462507030e-09 0s 0s 462510190e-09 1s 1s 462514670e-09 1s 1s 462517270e-09 0s 0s 462520430e-09 1s 1s 462524950e-09 1s 1s 462527510e-09 0s 0s 462530670e-09 1s 1s 462535230e-09 1s 1s 462537750e-09 0s 0s 462540910e-09 1s 1s 462545510e-09 1s 1s 462547990e-09 0s 0s 462551150e-09 1s 1s 462555790e-09 1s 1s 462558230e-09 0s 0s 462561390e-09 1s 1s 462566070e-09 1s 1s 462568470e-09 0s 0s 462571630e-09 1s 1s 462576350e-09 1s 1s 462578710e-09 0s 0s 462581870e-09 1s 1s 462586630e-09 1s 1s 462588950e-09 0s 0s 462592110e-09 1s 1s 462596910e-09 1s 1s 462599190e-09 0s 0s 462602350e-09 1s 1s 462607190e-09 1s 1s 462609430e-09 0s 0s 462612590e-09 1s 1s 462617470e-09 1s 1s 462619670e-09 0s 0s 462622830e-09 1s 1s 462627750e-09 1s 1s 462629910e-09 0s 0s 462633070e-09 1s 1s 462638030e-09 1s 1s 462640150e-09 0s 0s 462643310e-09 1s 1s 462648310e-09 1s 1s 462650390e-09 0s 0s 462653550e-09 1s 1s 462658590e-09 1s 1s 462660630e-09 0s 0s 462663790e-09 1s 1s 462668870e-09 1s 1s 462670870e-09 0s 0s 462674030e-09 1s 1s 462679150e-09 1s 1s 462681110e-09 0s 0s 462684270e-09 1s 1s 462689430e-09 1s 1s 462691350e-09 0s 0s 462694510e-09 1s 1s 462699710e-09 1s 1s 462701590e-09 0s 0s 462704750e-09 1s 1s 462709990e-09 1s 1s 462711830e-09 0s 0s 462714990e-09 1s 1s 462720270e-09 1s 1s 462722070e-09 0s 0s 462725230e-09 1s 1s 462730550e-09 1s 1s 462732310e-09 0s 0s 462735470e-09 1s 1s 462740830e-09 1s 1s 462742550e-09 0s 0s 462745710e-09 1s 1s 462751110e-09 1s 1s 462752790e-09 0s 0s 462755950e-09 1s 1s 462761390e-09 1s 1s 462763030e-09 0s 0s 462766190e-09 1s 1s 462771670e-09 1s 1s 462773270e-09 0s 0s 462776430e-09 1s 1s 462781950e-09 1s 1s 462783510e-09 0s 0s 462786670e-09 1s 1s 462792230e-09 1s 1s 462793750e-09 0s 0s 462796910e-09 1s 1s 462802510e-09 1s 1s 462803990e-09 0s 0s 462807150e-09 1s 1s 462812790e-09 1s 1s 462814230e-09 0s 0s 462817390e-09 1s 1s 462823070e-09 1s 1s 462824470e-09 0s 0s 462827630e-09 1s 1s 462833350e-09 1s 1s 462834710e-09 0s 0s 462837870e-09 1s 1s 462843630e-09 1s 1s 462844950e-09 0s 0s 462848110e-09 1s 1s 462853910e-09 1s 1s 462855190e-09 0s 0s 462858350e-09 1s 1s 462864190e-09 1s 1s 462865430e-09 0s 0s 462868590e-09 1s 1s 462874470e-09 1s 1s 462875670e-09 0s 0s 462878830e-09 1s 1s 462884750e-09 1s 1s 462885910e-09 0s 0s 462889070e-09 1s 1s 462895030e-09 1s 1s 462896150e-09 0s 0s 462899310e-09 1s 1s 462905310e-09 1s 1s 462906390e-09 0s 0s 462909550e-09 1s 1s 462915590e-09 1s 1s 462916630e-09 0s 0s 462919790e-09 1s 1s 462925870e-09 1s 1s 462926870e-09 0s 0s 462930030e-09 1s 1s 462936150e-09 1s 1s 462937110e-09 0s 0s 462940270e-09 1s 1s 462946430e-09 1s 1s 462947350e-09 0s 0s 462950510e-09 1s 1s 462956710e-09 1s 1s 462957590e-09 0s 0s 462960750e-09 1s 1s 462966990e-09 1s 1s 462967830e-09 0s 0s 462970990e-09 1s 1s 462977270e-09 1s 1s 462978070e-09 0s 0s 462981230e-09 1s 1s 462987550e-09 1s 1s 462988310e-09 0s 0s 462991470e-09 1s 1s 462997830e-09 1s 1s 462998550e-09 0s 0s 463001710e-09 1s 1s 463008110e-09 1s 1s 463008790e-09 0s 0s 463011950e-09 1s 1s 463018390e-09 1s 1s 463019030e-09 0s 0s 463022190e-09 1s 1s 463028670e-09 1s 1s 463029270e-09 0s 0s 463032430e-09 1s 1s 463038950e-09 1s 1s 463039510e-09 0s 0s 463042670e-09 1s 1s 463049230e-09 1s 1s 463049750e-09 0s 0s 463052910e-09 1s 1s 463059510e-09 1s 1s 463059990e-09 0s 0s 463063150e-09 1s 1s 463069790e-09 1s 1s 463070230e-09 0s 0s 463073390e-09 1s 1s 463080070e-09 1s 1s 463080470e-09 0s 0s 463083630e-09 1s 1s 463090350e-09 1s 1s 463090710e-09 0s 0s 463093870e-09 1s 1s 463100630e-09 1s 1s 463100950e-09 0s 0s 463104110e-09 1s 1s 463110910e-09 1s 1s 463111190e-09 0s 0s 463114350e-09 1s 1s 463121190e-09 1s 1s 463121430e-09 0s 0s 463124590e-09 1s 1s 463131470e-09 1s 1s 463131670e-09 0s 0s 463134830e-09 1s 1s 463141750e-09 1s 1s 463141910e-09 0s 0s 463145070e-09 1s 1s 463152030e-09 1s 1s 463152150e-09 0s 0s 463155310e-09 1s 1s 463162310e-09 1s 1s 463162390e-09 0s 0s 463165550e-09 1s 1s 463172590e-09 1s 1s 463172630e-09 0s 0s 463175790e-09 1s 1s 463182870e-09 0s 0s 463186030e-09 1s 1s 463193110e-09 0s 0s 463193150e-09 0s 0s 463196270e-09 1s 1s 463203350e-09 0s 0s 463203430e-09 0s 0s 463206510e-09 1s 1s 463213590e-09 0s 0s 463213710e-09 0s 0s 463216750e-09 1s 1s 463223830e-09 0s 0s 463223990e-09 0s 0s 463226990e-09 1s 1s 463234070e-09 0s 0s 463234270e-09 0s 0s 463237230e-09 1s 1s 463244310e-09 0s 0s 463244550e-09 0s 0s 463247470e-09 1s 1s 463254550e-09 0s 0s 463254830e-09 0s 0s 463257710e-09 1s 1s 463264790e-09 0s 0s 463265110e-09 0s 0s 463267950e-09 1s 1s 463275030e-09 0s 0s 463275390e-09 0s 0s 463278190e-09 1s 1s 463285270e-09 0s 0s 463285670e-09 0s 0s 463288430e-09 1s 1s 463295510e-09 0s 0s 463295950e-09 0s 0s 463298670e-09 1s 1s 463305750e-09 0s 0s 463306230e-09 0s 0s 463308910e-09 1s 1s 463315990e-09 0s 0s 463316510e-09 0s 0s 463319150e-09 1s 1s 463326230e-09 0s 0s 463326790e-09 0s 0s 463329390e-09 1s 1s 463336470e-09 0s 0s 463337070e-09 0s 0s 463339630e-09 1s 1s 463346710e-09 0s 0s 463347350e-09 0s 0s 463349870e-09 1s 1s 463356950e-09 0s 0s 463357630e-09 0s 0s 463360110e-09 1s 1s 463367190e-09 0s 0s 463367910e-09 0s 0s 463370350e-09 1s 1s 463377430e-09 0s 0s 463378190e-09 0s 0s 463380590e-09 1s 1s 463387670e-09 0s 0s 463388470e-09 0s 0s 463390830e-09 1s 1s 463397910e-09 0s 0s 463398750e-09 0s 0s 463401070e-09 1s 1s 463408150e-09 0s 0s 463409030e-09 0s 0s 463411310e-09 1s 1s 463418390e-09 0s 0s 463419310e-09 0s 0s 463421550e-09 1s 1s 463428630e-09 0s 0s 463429590e-09 0s 0s 463431790e-09 1s 1s 463438870e-09 0s 0s 463439870e-09 0s 0s 463442030e-09 1s 1s 463449110e-09 0s 0s 463450150e-09 0s 0s 463452270e-09 1s 1s 463459350e-09 0s 0s 463460430e-09 0s 0s 463462510e-09 1s 1s 463469590e-09 0s 0s 463470710e-09 0s 0s 463472750e-09 1s 1s 463479830e-09 0s 0s 463480990e-09 0s 0s 463482990e-09 1s 1s 463490070e-09 0s 0s 463491270e-09 0s 0s 463493230e-09 1s 1s 463500310e-09 0s 0s 463501550e-09 0s 0s 463503470e-09 1s 1s 463510550e-09 0s 0s 463511830e-09 0s 0s 463513710e-09 1s 1s 463520790e-09 0s 0s 463522110e-09 0s 0s 463523950e-09 1s 1s 463531030e-09 0s 0s 463532390e-09 0s 0s 463534190e-09 1s 1s 463541270e-09 0s 0s 463542670e-09 0s 0s 463544430e-09 1s 1s 463551510e-09 0s 0s 463552950e-09 0s 0s 463554670e-09 1s 1s 463561750e-09 0s 0s 463563230e-09 0s 0s 463564910e-09 1s 1s 463571990e-09 0s 0s 463573510e-09 0s 0s 463575150e-09 1s 1s 463582230e-09 0s 0s 463583790e-09 0s 0s 463585390e-09 1s 1s 463592470e-09 0s 0s 463594070e-09 0s 0s 463595630e-09 1s 1s 463602710e-09 0s 0s 463604350e-09 0s 0s 463605870e-09 1s 1s 463612950e-09 0s 0s 463614630e-09 0s 0s 463616110e-09 1s 1s 463623190e-09 0s 0s 463624910e-09 0s 0s 463626350e-09 1s 1s 463633430e-09 0s 0s 463635190e-09 0s 0s 463636590e-09 1s 1s 463643670e-09 0s 0s 463645470e-09 0s 0s 463646830e-09 1s 1s 463653910e-09 0s 0s 463655750e-09 0s 0s 463657070e-09 1s 1s 463664150e-09 0s 0s 463666030e-09 0s 0s 463667310e-09 1s 1s 463674390e-09 0s 0s 463676310e-09 0s 0s 463677550e-09 1s 1s 463684630e-09 0s 0s 463686590e-09 0s 0s 463687790e-09 1s 1s 463694870e-09 0s 0s 463696870e-09 0s 0s 463698030e-09 1s 1s 463705110e-09 0s 0s 463707150e-09 0s 0s 463708270e-09 1s 1s 463715350e-09 0s 0s 463717430e-09 0s 0s 463718510e-09 1s 1s 463725590e-09 0s 0s 463727710e-09 0s 0s 463728750e-09 1s 1s 463735830e-09 0s 0s 463737990e-09 0s 0s 463738990e-09 1s 1s 463746070e-09 0s 0s 463748270e-09 0s 0s 463749230e-09 1s 1s 463756310e-09 0s 0s 463758550e-09 0s 0s 463759470e-09 1s 1s 463766550e-09 0s 0s 463768830e-09 0s 0s 463769710e-09 1s 1s 463776790e-09 0s 0s 463779110e-09 0s 0s 463779950e-09 1s 1s 463787030e-09 0s 0s 463789390e-09 0s 0s 463790190e-09 1s 1s 463797270e-09 0s 0s 463799670e-09 0s 0s 463800430e-09 1s 1s 463807510e-09 0s 0s 463809950e-09 0s 0s 463810670e-09 1s 1s 463817750e-09 0s 0s 463820230e-09 0s 0s 463820910e-09 1s 1s 463827990e-09 0s 0s 463830510e-09 0s 0s 463831150e-09 1s 1s 463838230e-09 0s 0s 463840790e-09 0s 0s 463841390e-09 1s 1s 463848470e-09 0s 0s 463851070e-09 0s 0s 463851630e-09 1s 1s 463858710e-09 0s 0s 463861350e-09 0s 0s 463861870e-09 1s 1s 463868950e-09 0s 0s 463871630e-09 0s 0s 463872110e-09 1s 1s 463879190e-09 0s 0s 463881910e-09 0s 0s 463882350e-09 1s 1s 463889430e-09 0s 0s 463892190e-09 0s 0s 463892590e-09 1s 1s 463899670e-09 0s 0s 463902470e-09 0s 0s 463902830e-09 1s 1s 463909910e-09 0s 0s 463912750e-09 0s 0s 463913070e-09 1s 1s 463920150e-09 0s 0s 463923030e-09 0s 0s 463923310e-09 1s 1s 463930390e-09 0s 0s 463933310e-09 0s 0s 463933550e-09 1s 1s 463940630e-09 0s 0s 463943590e-09 0s 0s 463943790e-09 1s 1s 463950870e-09 0s 0s 463953870e-09 0s 0s 463954030e-09 1s 1s 463961110e-09 0s 0s 463964150e-09 0s 0s 463964270e-09 1s 1s 463971350e-09 0s 0s 463974430e-09 0s 0s 463974510e-09 1s 1s 463981590e-09 0s 0s 463984710e-09 0s 0s 463984750e-09 1s 1s 463991830e-09 0s 0s 463994990e-09 1s 1s 463995030e-09 1s 1s 464002110e-09 0s 0s 464005230e-09 1s 1s 464005310e-09 1s 1s 464012350e-09 0s 0s 464015470e-09 1s 1s 464015590e-09 1s 1s 464022590e-09 0s 0s 464025710e-09 1s 1s 464025870e-09 1s 1s 464032830e-09 0s 0s 464035950e-09 1s 1s 464036150e-09 1s 1s 464043070e-09 0s 0s 464046190e-09 1s 1s 464046430e-09 1s 1s 464053310e-09 0s 0s 464056430e-09 1s 1s 464056710e-09 1s 1s 464063550e-09 0s 0s 464066670e-09 1s 1s 464066990e-09 1s 1s 464073790e-09 0s 0s 464076910e-09 1s 1s 464077270e-09 1s 1s 464084030e-09 0s 0s 464087150e-09 1s 1s 464087550e-09 1s 1s 464094270e-09 0s 0s 464097390e-09 1s 1s 464097830e-09 1s 1s 464104510e-09 0s 0s 464107630e-09 1s 1s 464108110e-09 1s 1s 464114750e-09 0s 0s 464117870e-09 1s 1s 464118390e-09 1s 1s 464124990e-09 0s 0s 464128110e-09 1s 1s 464128670e-09 1s 1s 464135230e-09 0s 0s 464138350e-09 1s 1s 464138950e-09 1s 1s 464145470e-09 0s 0s 464148590e-09 1s 1s 464149230e-09 1s 1s 464155710e-09 0s 0s 464158830e-09 1s 1s 464159510e-09 1s 1s 464165950e-09 0s 0s 464169070e-09 1s 1s 464169790e-09 1s 1s 464176190e-09 0s 0s 464179310e-09 1s 1s 464180070e-09 1s 1s 464186430e-09 0s 0s 464189550e-09 1s 1s 464190350e-09 1s 1s 464196670e-09 0s 0s 464199790e-09 1s 1s 464200630e-09 1s 1s 464206910e-09 0s 0s 464210030e-09 1s 1s 464210910e-09 1s 1s 464217150e-09 0s 0s 464220270e-09 1s 1s 464221190e-09 1s 1s 464227390e-09 0s 0s 464230510e-09 1s 1s 464231470e-09 1s 1s 464237630e-09 0s 0s 464240750e-09 1s 1s 464241750e-09 1s 1s 464247870e-09 0s 0s 464250990e-09 1s 1s 464252030e-09 1s 1s 464258110e-09 0s 0s 464261230e-09 1s 1s 464262310e-09 1s 1s 464268350e-09 0s 0s 464271470e-09 1s 1s 464272590e-09 1s 1s 464278590e-09 0s 0s 464281710e-09 1s 1s 464282870e-09 1s 1s 464288830e-09 0s 0s 464291950e-09 1s 1s 464293150e-09 1s 1s 464299070e-09 0s 0s 464302190e-09 1s 1s 464303430e-09 1s 1s 464309310e-09 0s 0s 464312430e-09 1s 1s 464313710e-09 1s 1s 464319550e-09 0s 0s 464322670e-09 1s 1s 464323990e-09 1s 1s 464329790e-09 0s 0s 464332910e-09 1s 1s 464334270e-09 1s 1s 464340030e-09 0s 0s 464343150e-09 1s 1s 464344550e-09 1s 1s 464350270e-09 0s 0s 464353390e-09 1s 1s 464354830e-09 1s 1s 464360510e-09 0s 0s 464363630e-09 1s 1s 464365110e-09 1s 1s 464370750e-09 0s 0s 464373870e-09 1s 1s 464375390e-09 1s 1s 464380990e-09 0s 0s 464384110e-09 1s 1s 464385670e-09 1s 1s 464391230e-09 0s 0s 464394350e-09 1s 1s 464395950e-09 1s 1s 464401470e-09 0s 0s 464404590e-09 1s 1s 464406230e-09 1s 1s 464411710e-09 0s 0s 464414830e-09 1s 1s 464416510e-09 1s 1s 464421950e-09 0s 0s 464425070e-09 1s 1s 464426790e-09 1s 1s 464432190e-09 0s 0s 464435310e-09 1s 1s 464437070e-09 1s 1s 464442430e-09 0s 0s 464445550e-09 1s 1s 464447350e-09 1s 1s 464452670e-09 0s 0s 464455790e-09 1s 1s 464457630e-09 1s 1s 464462910e-09 0s 0s 464466030e-09 1s 1s 464467910e-09 1s 1s 464473150e-09 0s 0s 464476270e-09 1s 1s 464478190e-09 1s 1s 464483390e-09 0s 0s 464486510e-09 1s 1s 464488470e-09 1s 1s 464493630e-09 0s 0s 464496750e-09 1s 1s 464498750e-09 1s 1s 464503870e-09 0s 0s 464506990e-09 1s 1s 464509030e-09 1s 1s 464514110e-09 0s 0s 464517230e-09 1s 1s 464519310e-09 1s 1s 464524350e-09 0s 0s 464527470e-09 1s 1s 464529590e-09 1s 1s 464534590e-09 0s 0s 464537710e-09 1s 1s 464539870e-09 1s 1s 464544830e-09 0s 0s 464547950e-09 1s 1s 464550150e-09 1s 1s 464555070e-09 0s 0s 464558190e-09 1s 1s 464560430e-09 1s 1s 464565310e-09 0s 0s 464568430e-09 1s 1s 464570710e-09 1s 1s 464575550e-09 0s 0s 464578670e-09 1s 1s 464580990e-09 1s 1s 464585790e-09 0s 0s 464588910e-09 1s 1s 464591270e-09 1s 1s 464596030e-09 0s 0s 464599150e-09 1s 1s 464601550e-09 1s 1s 464606270e-09 0s 0s 464609390e-09 1s 1s 464611830e-09 1s 1s 464616510e-09 0s 0s 464619630e-09 1s 1s 464622110e-09 1s 1s 464626750e-09 0s 0s 464629870e-09 1s 1s 464632390e-09 1s 1s 464636990e-09 0s 0s 464640110e-09 1s 1s 464642670e-09 1s 1s 464647230e-09 0s 0s 464650350e-09 1s 1s 464652950e-09 1s 1s 464657470e-09 0s 0s 464660590e-09 1s 1s 464663230e-09 1s 1s 464667710e-09 0s 0s 464670830e-09 1s 1s 464673510e-09 1s 1s 464677950e-09 0s 0s 464681070e-09 1s 1s 464683790e-09 1s 1s 464688190e-09 0s 0s 464691310e-09 1s 1s 464694070e-09 1s 1s 464698430e-09 0s 0s 464701550e-09 1s 1s 464704350e-09 1s 1s 464708670e-09 0s 0s 464711790e-09 1s 1s 464714630e-09 1s 1s 464718910e-09 0s 0s 464722030e-09 1s 1s 464724910e-09 1s 1s 464729150e-09 0s 0s 464732270e-09 1s 1s 464735190e-09 1s 1s 464739390e-09 0s 0s 464742510e-09 1s 1s 464745470e-09 1s 1s 464749630e-09 0s 0s 464752750e-09 1s 1s 464755750e-09 1s 1s 464759870e-09 0s 0s 464762990e-09 1s 1s 464766030e-09 1s 1s 464770110e-09 0s 0s 464773230e-09 1s 1s 464776310e-09 1s 1s 464780350e-09 0s 0s 464783470e-09 1s 1s 464786590e-09 1s 1s 464790590e-09 0s 0s 464793710e-09 1s 1s 464796870e-09 1s 1s 464800830e-09 0s 0s 464803950e-09 1s 1s 464807150e-09 1s 1s 464811070e-09 0s 0s 464814190e-09 1s 1s 464817430e-09 1s 1s 464821310e-09 0s 0s 464824430e-09 1s 1s 464827710e-09 1s 1s 464831550e-09 0s 0s 464834670e-09 1s 1s 464837990e-09 1s 1s 464841790e-09 0s 0s 464844910e-09 1s 1s 464848270e-09 1s 1s 464852030e-09 0s 0s 464855150e-09 1s 1s 464858550e-09 1s 1s 464862270e-09 0s 0s 464865390e-09 1s 1s 464868830e-09 1s 1s 464872510e-09 0s 0s 464875630e-09 1s 1s 464879110e-09 1s 1s 464882750e-09 0s 0s 464885870e-09 1s 1s 464889390e-09 1s 1s 464892990e-09 0s 0s 464896110e-09 1s 1s 464899670e-09 1s 1s 464903230e-09 0s 0s 464906350e-09 1s 1s 464909950e-09 1s 1s 464913470e-09 0s 0s 464916590e-09 1s 1s 464920230e-09 1s 1s 464923710e-09 0s 0s 464926830e-09 1s 1s 464930510e-09 1s 1s 464933950e-09 0s 0s 464937070e-09 1s 1s 464940790e-09 1s 1s 464944190e-09 0s 0s 464947310e-09 1s 1s 464951070e-09 1s 1s 464954430e-09 0s 0s 464957550e-09 1s 1s 464961350e-09 1s 1s 464964670e-09 0s 0s 464967790e-09 1s 1s 464971630e-09 1s 1s 464974910e-09 0s 0s 464978030e-09 1s 1s 464981910e-09 1s 1s 464985150e-09 0s 0s 464988270e-09 1s 1s 464992190e-09 1s 1s 464995390e-09 0s 0s 464998510e-09 1s 1s 465002470e-09 1s 1s 465005630e-09 0s 0s 465008750e-09 1s 1s 465012750e-09 1s 1s 465015870e-09 0s 0s 465018990e-09 1s 1s 465023030e-09 1s 1s 465026110e-09 0s 0s 465029230e-09 1s 1s 465033310e-09 1s 1s 465036350e-09 0s 0s 465039470e-09 1s 1s 465043590e-09 1s 1s 465046590e-09 0s 0s 465049710e-09 1s 1s 465053870e-09 1s 1s 465056830e-09 0s 0s 465059950e-09 1s 1s 465064150e-09 1s 1s 465067070e-09 0s 0s 465070190e-09 1s 1s 465074430e-09 1s 1s 465077310e-09 0s 0s 465080430e-09 1s 1s 465084710e-09 1s 1s 465087550e-09 0s 0s 465090670e-09 1s 1s 465094990e-09 1s 1s 465097790e-09 0s 0s 465100910e-09 1s 1s 465105270e-09 1s 1s 465108030e-09 0s 0s 465111150e-09 1s 1s 465115550e-09 1s 1s 465118270e-09 0s 0s 465121390e-09 1s 1s 465125830e-09 1s 1s 465128510e-09 0s 0s 465131630e-09 1s 1s 465136110e-09 1s 1s 465138750e-09 0s 0s 465141870e-09 1s 1s 465146390e-09 1s 1s 465148990e-09 0s 0s 465152110e-09 1s 1s 465156670e-09 1s 1s 465159230e-09 0s 0s 465162350e-09 1s 1s 465166950e-09 1s 1s 465169470e-09 0s 0s 465172590e-09 1s 1s 465177230e-09 1s 1s 465179710e-09 0s 0s 465182830e-09 1s 1s 465187510e-09 1s 1s 465189950e-09 0s 0s 465193070e-09 1s 1s 465197790e-09 1s 1s 465200190e-09 0s 0s 465203310e-09 1s 1s 465208070e-09 1s 1s 465210430e-09 0s 0s 465213550e-09 1s 1s 465218350e-09 1s 1s 465220670e-09 0s 0s 465223790e-09 1s 1s 465228630e-09 1s 1s 465230910e-09 0s 0s 465234030e-09 1s 1s 465238910e-09 1s 1s 465241150e-09 0s 0s 465244270e-09 1s 1s 465249190e-09 1s 1s 465251390e-09 0s 0s 465254510e-09 1s 1s 465259470e-09 1s 1s 465261630e-09 0s 0s 465264750e-09 1s 1s 465269750e-09 1s 1s 465271870e-09 0s 0s 465274990e-09 1s 1s 465280030e-09 1s 1s 465282110e-09 0s 0s 465285230e-09 1s 1s 465290310e-09 1s 1s 465292350e-09 0s 0s 465295470e-09 1s 1s 465300590e-09 1s 1s 465302590e-09 0s 0s 465305710e-09 1s 1s 465310870e-09 1s 1s 465312830e-09 0s 0s 465315950e-09 1s 1s 465321150e-09 1s 1s 465323070e-09 0s 0s 465326190e-09 1s 1s 465331430e-09 1s 1s 465333310e-09 0s 0s 465336430e-09 1s 1s 465341710e-09 1s 1s 465343550e-09 0s 0s 465346670e-09 1s 1s 465351990e-09 1s 1s 465353790e-09 0s 0s 465356910e-09 1s 1s 465362270e-09 1s 1s 465364030e-09 0s 0s 465367150e-09 1s 1s 465372550e-09 1s 1s 465374270e-09 0s 0s 465377390e-09 1s 1s 465382830e-09 1s 1s 465384510e-09 0s 0s 465387630e-09 1s 1s 465393110e-09 1s 1s 465394750e-09 0s 0s 465397870e-09 1s 1s 465403390e-09 1s 1s 465404990e-09 0s 0s 465408110e-09 1s 1s 465413670e-09 1s 1s 465415230e-09 0s 0s 465418350e-09 1s 1s 465423950e-09 1s 1s 465425470e-09 0s 0s 465428590e-09 1s 1s 465434230e-09 1s 1s 465435710e-09 0s 0s 465438830e-09 1s 1s 465444510e-09 1s 1s 465445950e-09 0s 0s 465449070e-09 1s 1s 465454790e-09 1s 1s 465456190e-09 0s 0s 465459310e-09 1s 1s 465465070e-09 1s 1s 465466430e-09 0s 0s 465469550e-09 1s 1s 465475350e-09 1s 1s 465476670e-09 0s 0s 465479790e-09 1s 1s 465485630e-09 1s 1s 465486910e-09 0s 0s 465490030e-09 1s 1s 465495910e-09 1s 1s 465497150e-09 0s 0s 465500270e-09 1s 1s 465506190e-09 1s 1s 465507390e-09 0s 0s 465510510e-09 1s 1s 465516470e-09 1s 1s 465517630e-09 0s 0s 465520750e-09 1s 1s 465526750e-09 1s 1s 465527870e-09 0s 0s 465530990e-09 1s 1s 465537030e-09 1s 1s 465538110e-09 0s 0s 465541230e-09 1s 1s 465547310e-09 1s 1s 465548350e-09 0s 0s 465551470e-09 1s 1s 465557590e-09 1s 1s 465558590e-09 0s 0s 465561710e-09 1s 1s 465567870e-09 1s 1s 465568830e-09 0s 0s 465571950e-09 1s 1s 465578150e-09 1s 1s 465579070e-09 0s 0s 465582190e-09 1s 1s 465588430e-09 1s 1s 465589310e-09 0s 0s 465592430e-09 1s 1s 465598710e-09 1s 1s 465599550e-09 0s 0s 465602670e-09 1s 1s 465608990e-09 1s 1s 465609790e-09 0s 0s 465612910e-09 1s 1s 465619270e-09 1s 1s 465620030e-09 0s 0s 465623150e-09 1s 1s 465629550e-09 1s 1s 465630270e-09 0s 0s 465633390e-09 1s 1s 465639830e-09 1s 1s 465640510e-09 0s 0s 465643630e-09 1s 1s 465650110e-09 1s 1s 465650750e-09 0s 0s 465653870e-09 1s 1s 465660390e-09 1s 1s 465660990e-09 0s 0s 465664110e-09 1s 1s 465670670e-09 1s 1s 465671230e-09 0s 0s 465674350e-09 1s 1s 465680950e-09 1s 1s 465681470e-09 0s 0s 465684590e-09 1s 1s 465691230e-09 1s 1s 465691710e-09 0s 0s 465694830e-09 1s 1s 465701510e-09 1s 1s 465701950e-09 0s 0s 465705070e-09 1s 1s 465711790e-09 1s 1s 465712190e-09 0s 0s 465715310e-09 1s 1s 465722070e-09 1s 1s 465722430e-09 0s 0s 465725550e-09 1s 1s 465732350e-09 1s 1s 465732670e-09 0s 0s 465735790e-09 1s 1s 465742630e-09 1s 1s 465742910e-09 0s 0s 465746030e-09 1s 1s 465752910e-09 1s 1s 465753150e-09 0s 0s 465756270e-09 1s 1s 465763190e-09 1s 1s 465763390e-09 0s 0s 465766510e-09 1s 1s 465773470e-09 1s 1s 465773630e-09 0s 0s 465776750e-09 1s 1s 465783750e-09 1s 1s 465783870e-09 0s 0s 465786990e-09 1s 1s 465794030e-09 1s 1s 465794110e-09 0s 0s 465797230e-09 1s 1s 465804310e-09 1s 1s 465804350e-09 0s 0s 465807470e-09 1s 1s 465814590e-09 0s 0s 465817710e-09 1s 1s 465824830e-09 0s 0s 465824870e-09 0s 0s 465827950e-09 1s 1s 465835070e-09 0s 0s 465835150e-09 0s 0s 465838190e-09 1s 1s 465845310e-09 0s 0s 465845430e-09 0s 0s 465848430e-09 1s 1s 465855550e-09 0s 0s 465855710e-09 0s 0s 465858670e-09 1s 1s 465865790e-09 0s 0s 465865990e-09 0s 0s 465868910e-09 1s 1s 465876030e-09 0s 0s 465876270e-09 0s 0s 465879150e-09 1s 1s 465886270e-09 0s 0s 465886550e-09 0s 0s 465889390e-09 1s 1s 465896510e-09 0s 0s 465896830e-09 0s 0s 465899630e-09 1s 1s 465906750e-09 0s 0s 465907110e-09 0s 0s 465909870e-09 1s 1s 465916990e-09 0s 0s 465917390e-09 0s 0s 465920110e-09 1s 1s 465927230e-09 0s 0s 465927670e-09 0s 0s 465930350e-09 1s 1s 465937470e-09 0s 0s 465937950e-09 0s 0s 465940590e-09 1s 1s 465947710e-09 0s 0s 465948230e-09 0s 0s 465950830e-09 1s 1s 465957950e-09 0s 0s 465958510e-09 0s 0s 465961070e-09 1s 1s 465968190e-09 0s 0s 465968790e-09 0s 0s 465971310e-09 1s 1s 465978430e-09 0s 0s 465979070e-09 0s 0s 465981550e-09 1s 1s 465988670e-09 0s 0s 465989350e-09 0s 0s 465991790e-09 1s 1s 465998910e-09 0s 0s 465999630e-09 0s 0s 466002030e-09 1s 1s 466009150e-09 0s 0s 466009910e-09 0s 0s 466012270e-09 1s 1s 466019390e-09 0s 0s 466020190e-09 0s 0s 466022510e-09 1s 1s 466029630e-09 0s 0s 466030470e-09 0s 0s 466032750e-09 1s 1s 466039870e-09 0s 0s 466040750e-09 0s 0s 466042990e-09 1s 1s 466050110e-09 0s 0s 466051030e-09 0s 0s 466053230e-09 1s 1s 466060350e-09 0s 0s 466061310e-09 0s 0s 466063470e-09 1s 1s 466070590e-09 0s 0s 466071590e-09 0s 0s 466073710e-09 1s 1s 466080830e-09 0s 0s 466081870e-09 0s 0s 466083950e-09 1s 1s 466091070e-09 0s 0s 466092150e-09 0s 0s 466094190e-09 1s 1s 466101310e-09 0s 0s 466102430e-09 0s 0s 466104430e-09 1s 1s 466111550e-09 0s 0s 466112710e-09 0s 0s 466114670e-09 1s 1s 466121790e-09 0s 0s 466122990e-09 0s 0s 466124910e-09 1s 1s 466132030e-09 0s 0s 466133270e-09 0s 0s 466135150e-09 1s 1s 466142270e-09 0s 0s 466143550e-09 0s 0s 466145390e-09 1s 1s 466152510e-09 0s 0s 466153830e-09 0s 0s 466155630e-09 1s 1s 466162750e-09 0s 0s 466164110e-09 0s 0s 466165870e-09 1s 1s 466172990e-09 0s 0s 466174390e-09 0s 0s 466176110e-09 1s 1s 466183230e-09 0s 0s 466184670e-09 0s 0s 466186350e-09 1s 1s 466193470e-09 0s 0s 466194950e-09 0s 0s 466196590e-09 1s 1s 466203710e-09 0s 0s 466205230e-09 0s 0s 466206830e-09 1s 1s 466213950e-09 0s 0s 466215510e-09 0s 0s 466217070e-09 1s 1s 466224190e-09 0s 0s 466225790e-09 0s 0s 466227310e-09 1s 1s 466234430e-09 0s 0s 466236070e-09 0s 0s 466237550e-09 1s 1s 466244670e-09 0s 0s 466246350e-09 0s 0s 466247790e-09 1s 1s 466254910e-09 0s 0s 466256630e-09 0s 0s 466258030e-09 1s 1s 466265150e-09 0s 0s 466266910e-09 0s 0s 466268270e-09 1s 1s 466275390e-09 0s 0s 466277190e-09 0s 0s 466278510e-09 1s 1s 466285630e-09 0s 0s 466287470e-09 0s 0s 466288750e-09 1s 1s 466295870e-09 0s 0s 466297750e-09 0s 0s 466298990e-09 1s 1s 466306110e-09 0s 0s 466308030e-09 0s 0s 466309230e-09 1s 1s 466316350e-09 0s 0s 466318310e-09 0s 0s 466319470e-09 1s 1s 466326590e-09 0s 0s 466328590e-09 0s 0s 466329710e-09 1s 1s 466336830e-09 0s 0s 466338870e-09 0s 0s 466339950e-09 1s 1s 466347070e-09 0s 0s 466349150e-09 0s 0s 466350190e-09 1s 1s 466357310e-09 0s 0s 466359430e-09 0s 0s 466360430e-09 1s 1s 466367550e-09 0s 0s 466369710e-09 0s 0s 466370670e-09 1s 1s 466377790e-09 0s 0s 466379990e-09 0s 0s 466380910e-09 1s 1s 466388030e-09 0s 0s 466390270e-09 0s 0s 466391150e-09 1s 1s 466398270e-09 0s 0s 466400550e-09 0s 0s 466401390e-09 1s 1s 466408510e-09 0s 0s 466410830e-09 0s 0s 466411630e-09 1s 1s 466418750e-09 0s 0s 466421110e-09 0s 0s 466421870e-09 1s 1s 466428990e-09 0s 0s 466431390e-09 0s 0s 466432110e-09 1s 1s 466439230e-09 0s 0s 466441670e-09 0s 0s 466442350e-09 1s 1s 466449470e-09 0s 0s 466451950e-09 0s 0s 466452590e-09 1s 1s 466459710e-09 0s 0s 466462230e-09 0s 0s 466462830e-09 1s 1s 466469950e-09 0s 0s 466472510e-09 0s 0s 466473070e-09 1s 1s 466480190e-09 0s 0s 466482790e-09 0s 0s 466483310e-09 1s 1s 466490430e-09 0s 0s 466493070e-09 0s 0s 466493550e-09 1s 1s 466500670e-09 0s 0s 466503350e-09 0s 0s 466503790e-09 1s 1s 466510910e-09 0s 0s 466513630e-09 0s 0s 466514030e-09 1s 1s 466521150e-09 0s 0s 466523910e-09 0s 0s 466524270e-09 1s 1s 466531390e-09 0s 0s 466534190e-09 0s 0s 466534510e-09 1s 1s 466541630e-09 0s 0s 466544470e-09 0s 0s 466544750e-09 1s 1s 466551870e-09 0s 0s 466554750e-09 0s 0s 466554990e-09 1s 1s 466562110e-09 0s 0s 466565030e-09 0s 0s 466565230e-09 1s 1s 466572350e-09 0s 0s 466575310e-09 0s 0s 466575470e-09 1s 1s 466582590e-09 0s 0s 466585590e-09 0s 0s 466585710e-09 1s 1s 466592830e-09 0s 0s 466595870e-09 0s 0s 466595950e-09 1s 1s 466603070e-09 0s 0s 466606150e-09 0s 0s 466606190e-09 1s 1s 466613310e-09 0s 0s 466616430e-09 1s 1s 466616470e-09 1s 1s 466623590e-09 0s 0s 466626670e-09 1s 1s 466626750e-09 1s 1s 466633830e-09 0s 0s 466636910e-09 1s 1s 466637030e-09 1s 1s 466644070e-09 0s 0s 466647150e-09 1s 1s 466647310e-09 1s 1s 466654310e-09 0s 0s 466657390e-09 1s 1s 466657590e-09 1s 1s 466664550e-09 0s 0s 466667630e-09 1s 1s 466667870e-09 1s 1s 466674790e-09 0s 0s 466677870e-09 1s 1s 466678150e-09 1s 1s 466685030e-09 0s 0s 466688110e-09 1s 1s 466688430e-09 1s 1s 466695270e-09 0s 0s 466698350e-09 1s 1s 466698710e-09 1s 1s 466705510e-09 0s 0s 466708590e-09 1s 1s 466708990e-09 1s 1s 466715750e-09 0s 0s 466718830e-09 1s 1s 466719270e-09 1s 1s 466725990e-09 0s 0s 466729070e-09 1s 1s 466729550e-09 1s 1s 466736230e-09 0s 0s 466739310e-09 1s 1s 466739830e-09 1s 1s 466746470e-09 0s 0s 466749550e-09 1s 1s 466750110e-09 1s 1s 466756710e-09 0s 0s 466759790e-09 1s 1s 466760390e-09 1s 1s 466766950e-09 0s 0s 466770030e-09 1s 1s 466770670e-09 1s 1s 466777190e-09 0s 0s 466780270e-09 1s 1s 466780950e-09 1s 1s 466787430e-09 0s 0s 466790510e-09 1s 1s 466791230e-09 1s 1s 466797670e-09 0s 0s 466800750e-09 1s 1s 466801510e-09 1s 1s 466807910e-09 0s 0s 466810990e-09 1s 1s 466811790e-09 1s 1s 466818150e-09 0s 0s 466821230e-09 1s 1s 466822070e-09 1s 1s 466828390e-09 0s 0s 466831470e-09 1s 1s 466832350e-09 1s 1s 466838630e-09 0s 0s 466841710e-09 1s 1s 466842630e-09 1s 1s 466848870e-09 0s 0s 466851950e-09 1s 1s 466852910e-09 1s 1s 466859110e-09 0s 0s 466862190e-09 1s 1s 466863190e-09 1s 1s 466869350e-09 0s 0s 466872430e-09 1s 1s 466873470e-09 1s 1s 466879590e-09 0s 0s 466882670e-09 1s 1s 466883750e-09 1s 1s 466889830e-09 0s 0s 466892910e-09 1s 1s 466894030e-09 1s 1s 466900070e-09 0s 0s 466903150e-09 1s 1s 466904310e-09 1s 1s 466910310e-09 0s 0s 466913390e-09 1s 1s 466914590e-09 1s 1s 466920550e-09 0s 0s 466923630e-09 1s 1s 466924870e-09 1s 1s 466930790e-09 0s 0s 466933870e-09 1s 1s 466935150e-09 1s 1s 466941030e-09 0s 0s 466944110e-09 1s 1s 466945430e-09 1s 1s 466951270e-09 0s 0s 466954350e-09 1s 1s 466955710e-09 1s 1s 466961510e-09 0s 0s 466964590e-09 1s 1s 466965990e-09 1s 1s 466971750e-09 0s 0s 466974830e-09 1s 1s 466976270e-09 1s 1s 466981990e-09 0s 0s 466985070e-09 1s 1s 466986550e-09 1s 1s 466992230e-09 0s 0s 466995310e-09 1s 1s 466996830e-09 1s 1s 467002470e-09 0s 0s 467005550e-09 1s 1s 467007110e-09 1s 1s 467012710e-09 0s 0s 467015790e-09 1s 1s 467017390e-09 1s 1s 467022950e-09 0s 0s 467026030e-09 1s 1s 467027670e-09 1s 1s 467033190e-09 0s 0s 467036270e-09 1s 1s 467037950e-09 1s 1s 467043430e-09 0s 0s 467046510e-09 1s 1s 467048230e-09 1s 1s 467053670e-09 0s 0s 467056750e-09 1s 1s 467058510e-09 1s 1s 467063910e-09 0s 0s 467066990e-09 1s 1s 467068790e-09 1s 1s 467074150e-09 0s 0s 467077230e-09 1s 1s 467079070e-09 1s 1s 467084390e-09 0s 0s 467087470e-09 1s 1s 467089350e-09 1s 1s 467094630e-09 0s 0s 467097710e-09 1s 1s 467099630e-09 1s 1s 467104870e-09 0s 0s 467107950e-09 1s 1s 467109910e-09 1s 1s 467115110e-09 0s 0s 467118190e-09 1s 1s 467120190e-09 1s 1s 467125350e-09 0s 0s 467128430e-09 1s 1s 467130470e-09 1s 1s 467135590e-09 0s 0s 467138670e-09 1s 1s 467140750e-09 1s 1s 467145830e-09 0s 0s 467148910e-09 1s 1s 467151030e-09 1s 1s 467156070e-09 0s 0s 467159150e-09 1s 1s 467161310e-09 1s 1s 467166310e-09 0s 0s 467169390e-09 1s 1s 467171590e-09 1s 1s 467176550e-09 0s 0s 467179630e-09 1s 1s 467181870e-09 1s 1s 467186790e-09 0s 0s 467189870e-09 1s 1s 467192150e-09 1s 1s 467197030e-09 0s 0s 467200110e-09 1s 1s 467202430e-09 1s 1s 467207270e-09 0s 0s 467210350e-09 1s 1s 467212710e-09 1s 1s 467217510e-09 0s 0s 467220590e-09 1s 1s 467222990e-09 1s 1s 467227750e-09 0s 0s 467230830e-09 1s 1s 467233270e-09 1s 1s 467237990e-09 0s 0s 467241070e-09 1s 1s 467243550e-09 1s 1s 467248230e-09 0s 0s 467251310e-09 1s 1s 467253830e-09 1s 1s 467258470e-09 0s 0s 467261550e-09 1s 1s 467264110e-09 1s 1s 467268710e-09 0s 0s 467271790e-09 1s 1s 467274390e-09 1s 1s 467278950e-09 0s 0s 467282030e-09 1s 1s 467284670e-09 1s 1s 467289190e-09 0s 0s 467292270e-09 1s 1s 467294950e-09 1s 1s 467299430e-09 0s 0s 467302510e-09 1s 1s 467305230e-09 1s 1s 467309670e-09 0s 0s 467312750e-09 1s 1s 467315510e-09 1s 1s 467319910e-09 0s 0s 467322990e-09 1s 1s 467325790e-09 1s 1s 467330150e-09 0s 0s 467333230e-09 1s 1s 467336070e-09 1s 1s 467340390e-09 0s 0s 467343470e-09 1s 1s 467346350e-09 1s 1s 467350630e-09 0s 0s 467353710e-09 1s 1s 467356630e-09 1s 1s 467360870e-09 0s 0s 467363950e-09 1s 1s 467366910e-09 1s 1s 467371110e-09 0s 0s 467374190e-09 1s 1s 467377190e-09 1s 1s 467381350e-09 0s 0s 467384430e-09 1s 1s 467387470e-09 1s 1s 467391590e-09 0s 0s 467394670e-09 1s 1s 467397750e-09 1s 1s 467401830e-09 0s 0s 467404910e-09 1s 1s 467408030e-09 1s 1s 467412070e-09 0s 0s 467415150e-09 1s 1s 467418310e-09 1s 1s 467422310e-09 0s 0s 467425390e-09 1s 1s 467428590e-09 1s 1s 467432550e-09 0s 0s 467435630e-09 1s 1s 467438870e-09 1s 1s 467442790e-09 0s 0s 467445870e-09 1s 1s 467449150e-09 1s 1s 467453030e-09 0s 0s 467456110e-09 1s 1s 467459430e-09 1s 1s 467463270e-09 0s 0s 467466350e-09 1s 1s 467469710e-09 1s 1s 467473510e-09 0s 0s 467476590e-09 1s 1s 467479990e-09 1s 1s 467483750e-09 0s 0s 467486830e-09 1s 1s 467490270e-09 1s 1s 467493990e-09 0s 0s 467497070e-09 1s 1s 467500550e-09 1s 1s 467504230e-09 0s 0s 467507310e-09 1s 1s 467510830e-09 1s 1s 467514470e-09 0s 0s 467517550e-09 1s 1s 467521110e-09 1s 1s 467524710e-09 0s 0s 467527790e-09 1s 1s 467531390e-09 1s 1s 467534950e-09 0s 0s 467538030e-09 1s 1s 467541670e-09 1s 1s 467545190e-09 0s 0s 467548270e-09 1s 1s 467551950e-09 1s 1s 467555430e-09 0s 0s 467558510e-09 1s 1s 467562230e-09 1s 1s 467565670e-09 0s 0s 467568750e-09 1s 1s 467572510e-09 1s 1s 467575910e-09 0s 0s 467578990e-09 1s 1s 467582790e-09 1s 1s 467586150e-09 0s 0s 467589230e-09 1s 1s 467593070e-09 1s 1s 467596390e-09 0s 0s 467599470e-09 1s 1s 467603350e-09 1s 1s 467606630e-09 0s 0s 467609710e-09 1s 1s 467613630e-09 1s 1s 467616870e-09 0s 0s 467619950e-09 1s 1s 467623910e-09 1s 1s 467627110e-09 0s 0s 467630190e-09 1s 1s 467634190e-09 1s 1s 467637350e-09 0s 0s 467640430e-09 1s 1s 467644470e-09 1s 1s 467647590e-09 0s 0s 467650670e-09 1s 1s 467654750e-09 1s 1s 467657830e-09 0s 0s 467660910e-09 1s 1s 467665030e-09 1s 1s 467668070e-09 0s 0s 467671150e-09 1s 1s 467675310e-09 1s 1s 467678310e-09 0s 0s 467681390e-09 1s 1s 467685590e-09 1s 1s 467688550e-09 0s 0s 467691630e-09 1s 1s 467695870e-09 1s 1s 467698790e-09 0s 0s 467701870e-09 1s 1s 467706150e-09 1s 1s 467709030e-09 0s 0s 467712110e-09 1s 1s 467716430e-09 1s 1s 467719270e-09 0s 0s 467722350e-09 1s 1s 467726710e-09 1s 1s 467729510e-09 0s 0s 467732590e-09 1s 1s 467736990e-09 1s 1s 467739750e-09 0s 0s 467742830e-09 1s 1s 467747270e-09 1s 1s 467749990e-09 0s 0s 467753070e-09 1s 1s 467757550e-09 1s 1s 467760230e-09 0s 0s 467763310e-09 1s 1s 467767830e-09 1s 1s 467770470e-09 0s 0s 467773550e-09 1s 1s 467778110e-09 1s 1s 467780710e-09 0s 0s 467783790e-09 1s 1s 467788390e-09 1s 1s 467790950e-09 0s 0s 467794030e-09 1s 1s 467798670e-09 1s 1s 467801190e-09 0s 0s 467804270e-09 1s 1s 467808950e-09 1s 1s 467811430e-09 0s 0s 467814510e-09 1s 1s 467819230e-09 1s 1s 467821670e-09 0s 0s 467824750e-09 1s 1s 467829510e-09 1s 1s 467831910e-09 0s 0s 467834990e-09 1s 1s 467839790e-09 1s 1s 467842150e-09 0s 0s 467845230e-09 1s 1s 467850070e-09 1s 1s 467852390e-09 0s 0s 467855470e-09 1s 1s 467860350e-09 1s 1s 467862630e-09 0s 0s 467865710e-09 1s 1s 467870630e-09 1s 1s 467872870e-09 0s 0s 467875950e-09 1s 1s 467880910e-09 1s 1s 467883110e-09 0s 0s 467886190e-09 1s 1s 467891190e-09 1s 1s 467893350e-09 0s 0s 467896430e-09 1s 1s 467901470e-09 1s 1s 467903590e-09 0s 0s 467906670e-09 1s 1s 467911750e-09 1s 1s 467913830e-09 0s 0s 467916910e-09 1s 1s 467922030e-09 1s 1s 467924070e-09 0s 0s 467927150e-09 1s 1s 467932310e-09 1s 1s 467934310e-09 0s 0s 467937390e-09 1s 1s 467942590e-09 1s 1s 467944550e-09 0s 0s 467947630e-09 1s 1s 467952870e-09 1s 1s 467954790e-09 0s 0s 467957870e-09 1s 1s 467963150e-09 1s 1s 467965030e-09 0s 0s 467968110e-09 1s 1s 467973430e-09 1s 1s 467975270e-09 0s 0s 467978350e-09 1s 1s 467983710e-09 1s 1s 467985510e-09 0s 0s 467988590e-09 1s 1s 467993990e-09 1s 1s 467995750e-09 0s 0s 467998830e-09 1s 1s 468004270e-09 1s 1s 468005990e-09 0s 0s 468009070e-09 1s 1s 468014550e-09 1s 1s 468016230e-09 0s 0s 468019310e-09 1s 1s 468024830e-09 1s 1s 468026470e-09 0s 0s 468029550e-09 1s 1s 468035110e-09 1s 1s 468036710e-09 0s 0s 468039790e-09 1s 1s 468045390e-09 1s 1s 468046950e-09 0s 0s 468050030e-09 1s 1s 468055670e-09 1s 1s 468057190e-09 0s 0s 468060270e-09 1s 1s 468065950e-09 1s 1s 468067430e-09 0s 0s 468070510e-09 1s 1s 468076230e-09 1s 1s 468077670e-09 0s 0s 468080750e-09 1s 1s 468086510e-09 1s 1s 468087910e-09 0s 0s 468090990e-09 1s 1s 468096790e-09 1s 1s 468098150e-09 0s 0s 468101230e-09 1s 1s 468107070e-09 1s 1s 468108390e-09 0s 0s 468111470e-09 1s 1s 468117350e-09 1s 1s 468118630e-09 0s 0s 468121710e-09 1s 1s 468127630e-09 1s 1s 468128870e-09 0s 0s 468131950e-09 1s 1s 468137910e-09 1s 1s 468139110e-09 0s 0s 468142190e-09 1s 1s 468148190e-09 1s 1s 468149350e-09 0s 0s 468152430e-09 1s 1s 468158470e-09 1s 1s 468159590e-09 0s 0s 468162670e-09 1s 1s 468168750e-09 1s 1s 468169830e-09 0s 0s 468172910e-09 1s 1s 468179030e-09 1s 1s 468180070e-09 0s 0s 468183150e-09 1s 1s 468189310e-09 1s 1s 468190310e-09 0s 0s 468193390e-09 1s 1s 468199590e-09 1s 1s 468200550e-09 0s 0s 468203630e-09 1s 1s 468209870e-09 1s 1s 468210790e-09 0s 0s 468213870e-09 1s 1s 468220150e-09 1s 1s 468221030e-09 0s 0s 468224110e-09 1s 1s 468230430e-09 1s 1s 468231270e-09 0s 0s 468234350e-09 1s 1s 468240710e-09 1s 1s 468241510e-09 0s 0s 468244590e-09 1s 1s 468250990e-09 1s 1s 468251750e-09 0s 0s 468254830e-09 1s 1s 468261270e-09 1s 1s 468261990e-09 0s 0s 468265070e-09 1s 1s 468271550e-09 1s 1s 468272230e-09 0s 0s 468275310e-09 1s 1s 468281830e-09 1s 1s 468282470e-09 0s 0s 468285550e-09 1s 1s 468292110e-09 1s 1s 468292710e-09 0s 0s 468295790e-09 1s 1s 468302390e-09 1s 1s 468302950e-09 0s 0s 468306030e-09 1s 1s 468312670e-09 1s 1s 468313190e-09 0s 0s 468316270e-09 1s 1s 468322950e-09 1s 1s 468323430e-09 0s 0s 468326510e-09 1s 1s 468333230e-09 1s 1s 468333670e-09 0s 0s 468336750e-09 1s 1s 468343510e-09 1s 1s 468343910e-09 0s 0s 468346990e-09 1s 1s 468353790e-09 1s 1s 468354150e-09 0s 0s 468357230e-09 1s 1s 468364070e-09 1s 1s 468364390e-09 0s 0s 468367470e-09 1s 1s 468374350e-09 1s 1s 468374630e-09 0s 0s 468377710e-09 1s 1s 468384630e-09 1s 1s 468384870e-09 0s 0s 468387950e-09 1s 1s 468394910e-09 1s 1s 468395110e-09 0s 0s 468398190e-09 1s 1s 468405190e-09 1s 1s 468405350e-09 0s 0s 468408430e-09 1s 1s 468415470e-09 1s 1s 468415590e-09 0s 0s 468418670e-09 1s 1s 468425750e-09 1s 1s 468425830e-09 0s 0s 468428910e-09 1s 1s 468436030e-09 1s 1s 468436070e-09 0s 0s 468439150e-09 1s 1s 468446310e-09 0s 0s 468449390e-09 1s 1s 468456550e-09 0s 0s 468456590e-09 0s 0s 468459630e-09 1s 1s 468466790e-09 0s 0s 468466870e-09 0s 0s 468469870e-09 1s 1s 468477030e-09 0s 0s 468477150e-09 0s 0s 468480110e-09 1s 1s 468487270e-09 0s 0s 468487430e-09 0s 0s 468490350e-09 1s 1s 468497510e-09 0s 0s 468497710e-09 0s 0s 468500590e-09 1s 1s 468507750e-09 0s 0s 468507990e-09 0s 0s 468510830e-09 1s 1s 468517990e-09 0s 0s 468518270e-09 0s 0s 468521070e-09 1s 1s 468528230e-09 0s 0s 468528550e-09 0s 0s 468531310e-09 1s 1s 468538470e-09 0s 0s 468538830e-09 0s 0s 468541550e-09 1s 1s 468548710e-09 0s 0s 468549110e-09 0s 0s 468551790e-09 1s 1s 468558950e-09 0s 0s 468559390e-09 0s 0s 468562030e-09 1s 1s 468569190e-09 0s 0s 468569670e-09 0s 0s 468572270e-09 1s 1s 468579430e-09 0s 0s 468579950e-09 0s 0s 468582510e-09 1s 1s 468589670e-09 0s 0s 468590230e-09 0s 0s 468592750e-09 1s 1s 468599910e-09 0s 0s 468600510e-09 0s 0s 468602990e-09 1s 1s 468610150e-09 0s 0s 468610790e-09 0s 0s 468613230e-09 1s 1s 468620390e-09 0s 0s 468621070e-09 0s 0s 468623470e-09 1s 1s 468630630e-09 0s 0s 468631350e-09 0s 0s 468633710e-09 1s 1s 468640870e-09 0s 0s 468641630e-09 0s 0s 468643950e-09 1s 1s 468651110e-09 0s 0s 468651910e-09 0s 0s 468654190e-09 1s 1s 468661350e-09 0s 0s 468662190e-09 0s 0s 468664430e-09 1s 1s 468671590e-09 0s 0s 468672470e-09 0s 0s 468674670e-09 1s 1s 468681830e-09 0s 0s 468682750e-09 0s 0s 468684910e-09 1s 1s 468692070e-09 0s 0s 468693030e-09 0s 0s 468695150e-09 1s 1s 468702310e-09 0s 0s 468703310e-09 0s 0s 468705390e-09 1s 1s 468712550e-09 0s 0s 468713590e-09 0s 0s 468715630e-09 1s 1s 468722790e-09 0s 0s 468723870e-09 0s 0s 468725870e-09 1s 1s 468733030e-09 0s 0s 468734150e-09 0s 0s 468736110e-09 1s 1s 468743270e-09 0s 0s 468744430e-09 0s 0s 468746350e-09 1s 1s 468753510e-09 0s 0s 468754710e-09 0s 0s 468756590e-09 1s 1s 468763750e-09 0s 0s 468764990e-09 0s 0s 468766830e-09 1s 1s 468773990e-09 0s 0s 468775270e-09 0s 0s 468777070e-09 1s 1s 468784230e-09 0s 0s 468785550e-09 0s 0s 468787310e-09 1s 1s 468794470e-09 0s 0s 468795830e-09 0s 0s 468797550e-09 1s 1s 468804710e-09 0s 0s 468806110e-09 0s 0s 468807790e-09 1s 1s 468814950e-09 0s 0s 468816390e-09 0s 0s 468818030e-09 1s 1s 468825190e-09 0s 0s 468826670e-09 0s 0s 468828270e-09 1s 1s 468835430e-09 0s 0s 468836950e-09 0s 0s 468838510e-09 1s 1s 468845670e-09 0s 0s 468847230e-09 0s 0s 468848750e-09 1s 1s 468855910e-09 0s 0s 468857510e-09 0s 0s 468858990e-09 1s 1s 468866150e-09 0s 0s 468867790e-09 0s 0s 468869230e-09 1s 1s 468876390e-09 0s 0s 468878070e-09 0s 0s 468879470e-09 1s 1s 468886630e-09 0s 0s 468888350e-09 0s 0s 468889710e-09 1s 1s 468896870e-09 0s 0s 468898630e-09 0s 0s 468899950e-09 1s 1s 468907110e-09 0s 0s 468908910e-09 0s 0s 468910190e-09 1s 1s 468917350e-09 0s 0s 468919190e-09 0s 0s 468920430e-09 1s 1s 468927590e-09 0s 0s 468929470e-09 0s 0s 468930670e-09 1s 1s 468937830e-09 0s 0s 468939750e-09 0s 0s 468940910e-09 1s 1s 468948070e-09 0s 0s 468950030e-09 0s 0s 468951150e-09 1s 1s 468958310e-09 0s 0s 468960310e-09 0s 0s 468961390e-09 1s 1s 468968550e-09 0s 0s 468970590e-09 0s 0s 468971630e-09 1s 1s 468978790e-09 0s 0s 468980870e-09 0s 0s 468981870e-09 1s 1s 468989030e-09 0s 0s 468991150e-09 0s 0s 468992110e-09 1s 1s 468999270e-09 0s 0s 469001430e-09 0s 0s 469002350e-09 1s 1s 469009510e-09 0s 0s 469011710e-09 0s 0s 469012590e-09 1s 1s 469019750e-09 0s 0s 469021990e-09 0s 0s 469022830e-09 1s 1s 469029990e-09 0s 0s 469032270e-09 0s 0s 469033070e-09 1s 1s 469040230e-09 0s 0s 469042550e-09 0s 0s 469043310e-09 1s 1s 469050470e-09 0s 0s 469052830e-09 0s 0s 469053550e-09 1s 1s 469060710e-09 0s 0s 469063110e-09 0s 0s 469063790e-09 1s 1s 469070950e-09 0s 0s 469073390e-09 0s 0s 469074030e-09 1s 1s 469081190e-09 0s 0s 469083670e-09 0s 0s 469084270e-09 1s 1s 469091430e-09 0s 0s 469093950e-09 0s 0s 469094510e-09 1s 1s 469101670e-09 0s 0s 469104230e-09 0s 0s 469104750e-09 1s 1s 469111910e-09 0s 0s 469114510e-09 0s 0s 469114990e-09 1s 1s 469122150e-09 0s 0s 469124790e-09 0s 0s 469125230e-09 1s 1s 469132390e-09 0s 0s 469135070e-09 0s 0s 469135470e-09 1s 1s 469142630e-09 0s 0s 469145350e-09 0s 0s 469145710e-09 1s 1s 469152870e-09 0s 0s 469155630e-09 0s 0s 469155950e-09 1s 1s 469163110e-09 0s 0s 469165910e-09 0s 0s 469166190e-09 1s 1s 469173350e-09 0s 0s 469176190e-09 0s 0s 469176430e-09 1s 1s 469183590e-09 0s 0s 469186470e-09 0s 0s 469186670e-09 1s 1s 469193830e-09 0s 0s 469196750e-09 0s 0s 469196910e-09 1s 1s 469204070e-09 0s 0s 469207030e-09 0s 0s 469207150e-09 1s 1s 469214310e-09 0s 0s 469217310e-09 0s 0s 469217390e-09 1s 1s 469224550e-09 0s 0s 469227590e-09 0s 0s 469227630e-09 1s 1s 469234790e-09 0s 0s 469237870e-09 1s 1s 469237910e-09 1s 1s 469245070e-09 0s 0s 469248110e-09 1s 1s 469248190e-09 1s 1s 469255310e-09 0s 0s 469258350e-09 1s 1s 469258470e-09 1s 1s 469265550e-09 0s 0s 469268590e-09 1s 1s 469268750e-09 1s 1s 469275790e-09 0s 0s 469278830e-09 1s 1s 469279030e-09 1s 1s 469286030e-09 0s 0s 469289070e-09 1s 1s 469289310e-09 1s 1s 469296270e-09 0s 0s 469299310e-09 1s 1s 469299590e-09 1s 1s 469306510e-09 0s 0s 469309550e-09 1s 1s 469309870e-09 1s 1s 469316750e-09 0s 0s 469319790e-09 1s 1s 469320150e-09 1s 1s 469326990e-09 0s 0s 469330030e-09 1s 1s 469330430e-09 1s 1s 469337230e-09 0s 0s 469340270e-09 1s 1s 469340710e-09 1s 1s 469347470e-09 0s 0s 469350510e-09 1s 1s 469350990e-09 1s 1s 469357710e-09 0s 0s 469360750e-09 1s 1s 469361270e-09 1s 1s 469367950e-09 0s 0s 469370990e-09 1s 1s 469371550e-09 1s 1s 469378190e-09 0s 0s 469381230e-09 1s 1s 469381830e-09 1s 1s 469388430e-09 0s 0s 469391470e-09 1s 1s 469392110e-09 1s 1s 469398670e-09 0s 0s 469401710e-09 1s 1s 469402390e-09 1s 1s 469408910e-09 0s 0s 469411950e-09 1s 1s 469412670e-09 1s 1s 469419150e-09 0s 0s 469422190e-09 1s 1s 469422950e-09 1s 1s 469429390e-09 0s 0s 469432430e-09 1s 1s 469433230e-09 1s 1s 469439630e-09 0s 0s 469442670e-09 1s 1s 469443510e-09 1s 1s 469449870e-09 0s 0s 469452910e-09 1s 1s 469453790e-09 1s 1s 469460110e-09 0s 0s 469463150e-09 1s 1s 469464070e-09 1s 1s 469470350e-09 0s 0s 469473390e-09 1s 1s 469474350e-09 1s 1s 469480590e-09 0s 0s 469483630e-09 1s 1s 469484630e-09 1s 1s 469490830e-09 0s 0s 469493870e-09 1s 1s 469494910e-09 1s 1s 469501070e-09 0s 0s 469504110e-09 1s 1s 469505190e-09 1s 1s 469511310e-09 0s 0s 469514350e-09 1s 1s 469515470e-09 1s 1s 469521550e-09 0s 0s 469524590e-09 1s 1s 469525750e-09 1s 1s 469531790e-09 0s 0s 469534830e-09 1s 1s 469536030e-09 1s 1s 469542030e-09 0s 0s 469545070e-09 1s 1s 469546310e-09 1s 1s 469552270e-09 0s 0s 469555310e-09 1s 1s 469556590e-09 1s 1s 469562510e-09 0s 0s 469565550e-09 1s 1s 469566870e-09 1s 1s 469572750e-09 0s 0s 469575790e-09 1s 1s 469577150e-09 1s 1s 469582990e-09 0s 0s 469586030e-09 1s 1s 469587430e-09 1s 1s 469593230e-09 0s 0s 469596270e-09 1s 1s 469597710e-09 1s 1s 469603470e-09 0s 0s 469606510e-09 1s 1s 469607990e-09 1s 1s 469613710e-09 0s 0s 469616750e-09 1s 1s 469618270e-09 1s 1s 469623950e-09 0s 0s 469626990e-09 1s 1s 469628550e-09 1s 1s 469634190e-09 0s 0s 469637230e-09 1s 1s 469638830e-09 1s 1s 469644430e-09 0s 0s 469647470e-09 1s 1s 469649110e-09 1s 1s 469654670e-09 0s 0s 469657710e-09 1s 1s 469659390e-09 1s 1s 469664910e-09 0s 0s 469667950e-09 1s 1s 469669670e-09 1s 1s 469675150e-09 0s 0s 469678190e-09 1s 1s 469679950e-09 1s 1s 469685390e-09 0s 0s 469688430e-09 1s 1s 469690230e-09 1s 1s 469695630e-09 0s 0s 469698670e-09 1s 1s 469700510e-09 1s 1s 469705870e-09 0s 0s 469708910e-09 1s 1s 469710790e-09 1s 1s 469716110e-09 0s 0s 469719150e-09 1s 1s 469721070e-09 1s 1s 469726350e-09 0s 0s 469729390e-09 1s 1s 469731350e-09 1s 1s 469736590e-09 0s 0s 469739630e-09 1s 1s 469741630e-09 1s 1s 469746830e-09 0s 0s 469749870e-09 1s 1s 469751910e-09 1s 1s 469757070e-09 0s 0s 469760110e-09 1s 1s 469762190e-09 1s 1s 469767310e-09 0s 0s 469770350e-09 1s 1s 469772470e-09 1s 1s 469777550e-09 0s 0s 469780590e-09 1s 1s 469782750e-09 1s 1s 469787790e-09 0s 0s 469790830e-09 1s 1s 469793030e-09 1s 1s 469798030e-09 0s 0s 469801070e-09 1s 1s 469803310e-09 1s 1s 469808270e-09 0s 0s 469811310e-09 1s 1s 469813590e-09 1s 1s 469818510e-09 0s 0s 469821550e-09 1s 1s 469823870e-09 1s 1s 469828750e-09 0s 0s 469831790e-09 1s 1s 469834150e-09 1s 1s 469838990e-09 0s 0s 469842030e-09 1s 1s 469844430e-09 1s 1s 469849230e-09 0s 0s 469852270e-09 1s 1s 469854710e-09 1s 1s 469859470e-09 0s 0s 469862510e-09 1s 1s 469864990e-09 1s 1s 469869710e-09 0s 0s 469872750e-09 1s 1s 469875270e-09 1s 1s 469879950e-09 0s 0s 469882990e-09 1s 1s 469885550e-09 1s 1s 469890190e-09 0s 0s 469893230e-09 1s 1s 469895830e-09 1s 1s 469900430e-09 0s 0s 469903470e-09 1s 1s 469906110e-09 1s 1s 469910670e-09 0s 0s 469913710e-09 1s 1s 469916390e-09 1s 1s 469920910e-09 0s 0s 469923950e-09 1s 1s 469926670e-09 1s 1s 469931150e-09 0s 0s 469934190e-09 1s 1s 469936950e-09 1s 1s 469941390e-09 0s 0s 469944430e-09 1s 1s 469947230e-09 1s 1s 469951630e-09 0s 0s 469954670e-09 1s 1s 469957510e-09 1s 1s 469961870e-09 0s 0s 469964910e-09 1s 1s 469967790e-09 1s 1s 469972110e-09 0s 0s 469975150e-09 1s 1s 469978070e-09 1s 1s 469982350e-09 0s 0s 469985390e-09 1s 1s 469988350e-09 1s 1s 469992590e-09 0s 0s 469995630e-09 1s 1s 469998630e-09 1s 1s 470002830e-09 0s 0s 470005870e-09 1s 1s 470008910e-09 1s 1s 470013070e-09 0s 0s 470016110e-09 1s 1s 470019190e-09 1s 1s 470023310e-09 0s 0s 470026350e-09 1s 1s 470029470e-09 1s 1s 470033550e-09 0s 0s 470036590e-09 1s 1s 470039750e-09 1s 1s 470043790e-09 0s 0s 470046830e-09 1s 1s 470050030e-09 1s 1s 470054030e-09 0s 0s 470057070e-09 1s 1s 470060310e-09 1s 1s 470064270e-09 0s 0s 470067310e-09 1s 1s 470070590e-09 1s 1s 470074510e-09 0s 0s 470077550e-09 1s 1s 470080870e-09 1s 1s 470084750e-09 0s 0s 470087790e-09 1s 1s 470091150e-09 1s 1s 470094990e-09 0s 0s 470098030e-09 1s 1s 470101430e-09 1s 1s 470105230e-09 0s 0s 470108270e-09 1s 1s 470111710e-09 1s 1s 470115470e-09 0s 0s 470118510e-09 1s 1s 470121990e-09 1s 1s 470125710e-09 0s 0s 470128750e-09 1s 1s 470132270e-09 1s 1s 470135950e-09 0s 0s 470138990e-09 1s 1s 470142550e-09 1s 1s 470146190e-09 0s 0s 470149230e-09 1s 1s 470152830e-09 1s 1s 470156430e-09 0s 0s 470159470e-09 1s 1s 470163110e-09 1s 1s 470166670e-09 0s 0s 470169710e-09 1s 1s 470173390e-09 1s 1s 470176910e-09 0s 0s 470179950e-09 1s 1s 470183670e-09 1s 1s 470187150e-09 0s 0s 470190190e-09 1s 1s 470193950e-09 1s 1s 470197390e-09 0s 0s 470200430e-09 1s 1s 470204230e-09 1s 1s 470207630e-09 0s 0s 470210670e-09 1s 1s 470214510e-09 1s 1s 470217870e-09 0s 0s 470220910e-09 1s 1s 470224790e-09 1s 1s 470228110e-09 0s 0s 470231150e-09 1s 1s 470235070e-09 1s 1s 470238350e-09 0s 0s 470241390e-09 1s 1s 470245350e-09 1s 1s 470248590e-09 0s 0s 470251630e-09 1s 1s 470255630e-09 1s 1s 470258830e-09 0s 0s 470261870e-09 1s 1s 470265910e-09 1s 1s 470269070e-09 0s 0s 470272110e-09 1s 1s 470276190e-09 1s 1s 470279310e-09 0s 0s 470282350e-09 1s 1s 470286470e-09 1s 1s 470289550e-09 0s 0s 470292590e-09 1s 1s 470296750e-09 1s 1s 470299790e-09 0s 0s 470302830e-09 1s 1s 470307030e-09 1s 1s 470310030e-09 0s 0s 470313070e-09 1s 1s 470317310e-09 1s 1s 470320270e-09 0s 0s 470323310e-09 1s 1s 470327590e-09 1s 1s 470330510e-09 0s 0s 470333550e-09 1s 1s 470337870e-09 1s 1s 470340750e-09 0s 0s 470343790e-09 1s 1s 470348150e-09 1s 1s 470350990e-09 0s 0s 470354030e-09 1s 1s 470358430e-09 1s 1s 470361230e-09 0s 0s 470364270e-09 1s 1s 470368710e-09 1s 1s 470371470e-09 0s 0s 470374510e-09 1s 1s 470378990e-09 1s 1s 470381710e-09 0s 0s 470384750e-09 1s 1s 470389270e-09 1s 1s 470391950e-09 0s 0s 470394990e-09 1s 1s 470399550e-09 1s 1s 470402190e-09 0s 0s 470405230e-09 1s 1s 470409830e-09 1s 1s 470412430e-09 0s 0s 470415470e-09 1s 1s 470420110e-09 1s 1s 470422670e-09 0s 0s 470425710e-09 1s 1s 470430390e-09 1s 1s 470432910e-09 0s 0s 470435950e-09 1s 1s 470440670e-09 1s 1s 470443150e-09 0s 0s 470446190e-09 1s 1s 470450950e-09 1s 1s 470453390e-09 0s 0s 470456430e-09 1s 1s 470461230e-09 1s 1s 470463630e-09 0s 0s 470466670e-09 1s 1s 470471510e-09 1s 1s 470473870e-09 0s 0s 470476910e-09 1s 1s 470481790e-09 1s 1s 470484110e-09 0s 0s 470487150e-09 1s 1s 470492070e-09 1s 1s 470494350e-09 0s 0s 470497390e-09 1s 1s 470502350e-09 1s 1s 470504590e-09 0s 0s 470507630e-09 1s 1s 470512630e-09 1s 1s 470514830e-09 0s 0s 470517870e-09 1s 1s 470522910e-09 1s 1s 470525070e-09 0s 0s 470528110e-09 1s 1s 470533190e-09 1s 1s 470535310e-09 0s 0s 470538350e-09 1s 1s 470543470e-09 1s 1s 470545550e-09 0s 0s 470548590e-09 1s 1s 470553750e-09 1s 1s 470555790e-09 0s 0s 470558830e-09 1s 1s 470564030e-09 1s 1s 470566030e-09 0s 0s 470569070e-09 1s 1s 470574310e-09 1s 1s 470576270e-09 0s 0s 470579310e-09 1s 1s 470584590e-09 1s 1s 470586510e-09 0s 0s 470589550e-09 1s 1s 470594870e-09 1s 1s 470596750e-09 0s 0s 470599790e-09 1s 1s 470605150e-09 1s 1s 470606990e-09 0s 0s 470610030e-09 1s 1s 470615430e-09 1s 1s 470617230e-09 0s 0s 470620270e-09 1s 1s 470625710e-09 1s 1s 470627470e-09 0s 0s 470630510e-09 1s 1s 470635990e-09 1s 1s 470637710e-09 0s 0s 470640750e-09 1s 1s 470646270e-09 1s 1s 470647950e-09 0s 0s 470650990e-09 1s 1s 470656550e-09 1s 1s 470658190e-09 0s 0s 470661230e-09 1s 1s 470666830e-09 1s 1s 470668430e-09 0s 0s 470671470e-09 1s 1s 470677110e-09 1s 1s 470678670e-09 0s 0s 470681710e-09 1s 1s 470687390e-09 1s 1s 470688910e-09 0s 0s 470691950e-09 1s 1s 470697670e-09 1s 1s 470699150e-09 0s 0s 470702190e-09 1s 1s 470707950e-09 1s 1s 470709390e-09 0s 0s 470712430e-09 1s 1s 470718230e-09 1s 1s 470719630e-09 0s 0s 470722670e-09 1s 1s 470728510e-09 1s 1s 470729870e-09 0s 0s 470732910e-09 1s 1s 470738790e-09 1s 1s 470740110e-09 0s 0s 470743150e-09 1s 1s 470749070e-09 1s 1s 470750350e-09 0s 0s 470753390e-09 1s 1s 470759350e-09 1s 1s 470760590e-09 0s 0s 470763630e-09 1s 1s 470769630e-09 1s 1s 470770830e-09 0s 0s 470773870e-09 1s 1s 470779910e-09 1s 1s 470781070e-09 0s 0s 470784110e-09 1s 1s 470790190e-09 1s 1s 470791310e-09 0s 0s 470794350e-09 1s 1s 470800470e-09 1s 1s 470801550e-09 0s 0s 470804590e-09 1s 1s 470810750e-09 1s 1s 470811790e-09 0s 0s 470814830e-09 1s 1s 470821030e-09 1s 1s 470822030e-09 0s 0s 470825070e-09 1s 1s 470831310e-09 1s 1s 470832270e-09 0s 0s 470835310e-09 1s 1s 470841590e-09 1s 1s 470842510e-09 0s 0s 470845550e-09 1s 1s 470851870e-09 1s 1s 470852750e-09 0s 0s 470855790e-09 1s 1s 470862150e-09 1s 1s 470862990e-09 0s 0s 470866030e-09 1s 1s 470872430e-09 1s 1s 470873230e-09 0s 0s 470876270e-09 1s 1s 470882710e-09 1s 1s 470883470e-09 0s 0s 470886510e-09 1s 1s 470892990e-09 1s 1s 470893710e-09 0s 0s 470896750e-09 1s 1s 470903270e-09 1s 1s 470903950e-09 0s 0s 470906990e-09 1s 1s 470913550e-09 1s 1s 470914190e-09 0s 0s 470917230e-09 1s 1s 470923830e-09 1s 1s 470924430e-09 0s 0s 470927470e-09 1s 1s 470934110e-09 1s 1s 470934670e-09 0s 0s 470937710e-09 1s 1s 470944390e-09 1s 1s 470944910e-09 0s 0s 470947950e-09 1s 1s 470954670e-09 1s 1s 470955150e-09 0s 0s 470958190e-09 1s 1s 470964950e-09 1s 1s 470965390e-09 0s 0s 470968430e-09 1s 1s 470975230e-09 1s 1s 470975630e-09 0s 0s 470978670e-09 1s 1s 470985510e-09 1s 1s 470985870e-09 0s 0s 470988910e-09 1s 1s 470995790e-09 1s 1s 470996110e-09 0s 0s 470999150e-09 1s 1s 471006070e-09 1s 1s 471006350e-09 0s 0s 471009390e-09 1s 1s 471016350e-09 1s 1s 471016590e-09 0s 0s 471019630e-09 1s 1s 471026630e-09 1s 1s 471026830e-09 0s 0s 471029870e-09 1s 1s 471036910e-09 1s 1s 471037070e-09 0s 0s 471040110e-09 1s 1s 471047190e-09 1s 1s 471047310e-09 0s 0s 471050350e-09 1s 1s 471057470e-09 1s 1s 471057550e-09 0s 0s 471060590e-09 1s 1s 471067750e-09 1s 1s 471067790e-09 0s 0s 471070830e-09 1s 1s 471078030e-09 0s 0s 471081070e-09 1s 1s 471088270e-09 0s 0s 471088310e-09 0s 0s 471091310e-09 1s 1s 471098510e-09 0s 0s 471098590e-09 0s 0s 471101550e-09 1s 1s 471108750e-09 0s 0s 471108870e-09 0s 0s 471111790e-09 1s 1s 471118990e-09 0s 0s 471119150e-09 0s 0s 471122030e-09 1s 1s 471129230e-09 0s 0s 471129430e-09 0s 0s 471132270e-09 1s 1s 471139470e-09 0s 0s 471139710e-09 0s 0s 471142510e-09 1s 1s 471149710e-09 0s 0s 471149990e-09 0s 0s 471152750e-09 1s 1s 471159950e-09 0s 0s 471160270e-09 0s 0s 471162990e-09 1s 1s 471170190e-09 0s 0s 471170550e-09 0s 0s 471173230e-09 1s 1s 471180430e-09 0s 0s 471180830e-09 0s 0s 471183470e-09 1s 1s 471190670e-09 0s 0s 471191110e-09 0s 0s 471193710e-09 1s 1s 471200910e-09 0s 0s 471201390e-09 0s 0s 471203950e-09 1s 1s 471211150e-09 0s 0s 471211670e-09 0s 0s 471214190e-09 1s 1s 471221390e-09 0s 0s 471221950e-09 0s 0s 471224430e-09 1s 1s 471231630e-09 0s 0s 471232230e-09 0s 0s 471234670e-09 1s 1s 471241870e-09 0s 0s 471242510e-09 0s 0s 471244910e-09 1s 1s 471252110e-09 0s 0s 471252790e-09 0s 0s 471255150e-09 1s 1s 471262350e-09 0s 0s 471263070e-09 0s 0s 471265390e-09 1s 1s 471272590e-09 0s 0s 471273350e-09 0s 0s 471275630e-09 1s 1s 471282830e-09 0s 0s 471283630e-09 0s 0s 471285870e-09 1s 1s 471293070e-09 0s 0s 471293910e-09 0s 0s 471296110e-09 1s 1s 471303310e-09 0s 0s 471304190e-09 0s 0s 471306350e-09 1s 1s 471313550e-09 0s 0s 471314470e-09 0s 0s 471316590e-09 1s 1s 471323790e-09 0s 0s 471324750e-09 0s 0s 471326830e-09 1s 1s 471334030e-09 0s 0s 471335030e-09 0s 0s 471337070e-09 1s 1s 471344270e-09 0s 0s 471345310e-09 0s 0s 471347310e-09 1s 1s 471354510e-09 0s 0s 471355590e-09 0s 0s 471357550e-09 1s 1s 471364750e-09 0s 0s 471365870e-09 0s 0s 471367790e-09 1s 1s 471374990e-09 0s 0s 471376150e-09 0s 0s 471378030e-09 1s 1s 471385230e-09 0s 0s 471386430e-09 0s 0s 471388270e-09 1s 1s 471395470e-09 0s 0s 471396710e-09 0s 0s 471398510e-09 1s 1s 471405710e-09 0s 0s 471406990e-09 0s 0s 471408750e-09 1s 1s 471415950e-09 0s 0s 471417270e-09 0s 0s 471418990e-09 1s 1s 471426190e-09 0s 0s 471427550e-09 0s 0s 471429230e-09 1s 1s 471436430e-09 0s 0s 471437830e-09 0s 0s 471439470e-09 1s 1s 471446670e-09 0s 0s 471448110e-09 0s 0s 471449710e-09 1s 1s 471456910e-09 0s 0s 471458390e-09 0s 0s 471459950e-09 1s 1s 471467150e-09 0s 0s 471468670e-09 0s 0s 471470190e-09 1s 1s 471477390e-09 0s 0s 471478950e-09 0s 0s 471480430e-09 1s 1s 471487630e-09 0s 0s 471489230e-09 0s 0s 471490670e-09 1s 1s 471497870e-09 0s 0s 471499510e-09 0s 0s 471500910e-09 1s 1s 471508110e-09 0s 0s 471509790e-09 0s 0s 471511150e-09 1s 1s 471518350e-09 0s 0s 471520070e-09 0s 0s 471521390e-09 1s 1s 471528590e-09 0s 0s 471530350e-09 0s 0s 471531630e-09 1s 1s 471538830e-09 0s 0s 471540630e-09 0s 0s 471541870e-09 1s 1s 471549070e-09 0s 0s 471550910e-09 0s 0s 471552110e-09 1s 1s 471559310e-09 0s 0s 471561190e-09 0s 0s 471562350e-09 1s 1s 471569550e-09 0s 0s 471571470e-09 0s 0s 471572590e-09 1s 1s 471579790e-09 0s 0s 471581750e-09 0s 0s 471582830e-09 1s 1s 471590030e-09 0s 0s 471592030e-09 0s 0s 471593070e-09 1s 1s 471600270e-09 0s 0s 471602310e-09 0s 0s 471603310e-09 1s 1s 471610510e-09 0s 0s 471612590e-09 0s 0s 471613550e-09 1s 1s 471620750e-09 0s 0s 471622870e-09 0s 0s 471623790e-09 1s 1s 471630990e-09 0s 0s 471633150e-09 0s 0s 471634030e-09 1s 1s 471641230e-09 0s 0s 471643430e-09 0s 0s 471644270e-09 1s 1s 471651470e-09 0s 0s 471653710e-09 0s 0s 471654510e-09 1s 1s 471661710e-09 0s 0s 471663990e-09 0s 0s 471664750e-09 1s 1s 471671950e-09 0s 0s 471674270e-09 0s 0s 471674990e-09 1s 1s 471682190e-09 0s 0s 471684550e-09 0s 0s 471685230e-09 1s 1s 471692430e-09 0s 0s 471694830e-09 0s 0s 471695470e-09 1s 1s 471702670e-09 0s 0s 471705110e-09 0s 0s 471705710e-09 1s 1s 471712910e-09 0s 0s 471715390e-09 0s 0s 471715950e-09 1s 1s 471723150e-09 0s 0s 471725670e-09 0s 0s 471726190e-09 1s 1s 471733390e-09 0s 0s 471735950e-09 0s 0s 471736430e-09 1s 1s 471743630e-09 0s 0s 471746230e-09 0s 0s 471746670e-09 1s 1s 471753870e-09 0s 0s 471756510e-09 0s 0s 471756910e-09 1s 1s 471764110e-09 0s 0s 471766790e-09 0s 0s 471767150e-09 1s 1s 471774350e-09 0s 0s 471777070e-09 0s 0s 471777390e-09 1s 1s 471784590e-09 0s 0s 471787350e-09 0s 0s 471787630e-09 1s 1s 471794830e-09 0s 0s 471797630e-09 0s 0s 471797870e-09 1s 1s 471805070e-09 0s 0s 471807910e-09 0s 0s 471808110e-09 1s 1s 471815310e-09 0s 0s 471818190e-09 0s 0s 471818350e-09 1s 1s 471825550e-09 0s 0s 471828470e-09 0s 0s 471828590e-09 1s 1s 471835790e-09 0s 0s 471838750e-09 0s 0s 471838830e-09 1s 1s 471846030e-09 0s 0s 471849030e-09 0s 0s 471849070e-09 1s 1s 471856270e-09 0s 0s 471859310e-09 1s 1s 471859350e-09 1s 1s 471866550e-09 0s 0s 471869550e-09 1s 1s 471869630e-09 1s 1s 471876790e-09 0s 0s 471879790e-09 1s 1s 471879910e-09 1s 1s 471887030e-09 0s 0s 471890030e-09 1s 1s 471890190e-09 1s 1s 471897270e-09 0s 0s 471900270e-09 1s 1s 471900470e-09 1s 1s 471907510e-09 0s 0s 471910510e-09 1s 1s 471910750e-09 1s 1s 471917750e-09 0s 0s 471920750e-09 1s 1s 471921030e-09 1s 1s 471927990e-09 0s 0s 471930990e-09 1s 1s 471931310e-09 1s 1s 471938230e-09 0s 0s 471941230e-09 1s 1s 471941590e-09 1s 1s 471948470e-09 0s 0s 471951470e-09 1s 1s 471951870e-09 1s 1s 471958710e-09 0s 0s 471961710e-09 1s 1s 471962150e-09 1s 1s 471968950e-09 0s 0s 471971950e-09 1s 1s 471972430e-09 1s 1s 471979190e-09 0s 0s 471982190e-09 1s 1s 471982710e-09 1s 1s 471989430e-09 0s 0s 471992430e-09 1s 1s 471992990e-09 1s 1s 471999670e-09 0s 0s 472002670e-09 1s 1s 472003270e-09 1s 1s 472009910e-09 0s 0s 472012910e-09 1s 1s 472013550e-09 1s 1s 472020150e-09 0s 0s 472023150e-09 1s 1s 472023830e-09 1s 1s 472030390e-09 0s 0s 472033390e-09 1s 1s 472034110e-09 1s 1s 472040630e-09 0s 0s 472043630e-09 1s 1s 472044390e-09 1s 1s 472050870e-09 0s 0s 472053870e-09 1s 1s 472054670e-09 1s 1s 472061110e-09 0s 0s 472064110e-09 1s 1s 472064950e-09 1s 1s 472071350e-09 0s 0s 472074350e-09 1s 1s 472075230e-09 1s 1s 472081590e-09 0s 0s 472084590e-09 1s 1s 472085510e-09 1s 1s 472091830e-09 0s 0s 472094830e-09 1s 1s 472095790e-09 1s 1s 472102070e-09 0s 0s 472105070e-09 1s 1s 472106070e-09 1s 1s 472112310e-09 0s 0s 472115310e-09 1s 1s 472116350e-09 1s 1s 472122550e-09 0s 0s 472125550e-09 1s 1s 472126630e-09 1s 1s 472132790e-09 0s 0s 472135790e-09 1s 1s 472136910e-09 1s 1s 472143030e-09 0s 0s 472146030e-09 1s 1s 472147190e-09 1s 1s 472153270e-09 0s 0s 472156270e-09 1s 1s 472157470e-09 1s 1s 472163510e-09 0s 0s 472166510e-09 1s 1s 472167750e-09 1s 1s 472173750e-09 0s 0s 472176750e-09 1s 1s 472178030e-09 1s 1s 472183990e-09 0s 0s 472186990e-09 1s 1s 472188310e-09 1s 1s 472194230e-09 0s 0s 472197230e-09 1s 1s 472198590e-09 1s 1s 472204470e-09 0s 0s 472207470e-09 1s 1s 472208870e-09 1s 1s 472214710e-09 0s 0s 472217710e-09 1s 1s 472219150e-09 1s 1s 472224950e-09 0s 0s 472227950e-09 1s 1s 472229430e-09 1s 1s 472235190e-09 0s 0s 472238190e-09 1s 1s 472239710e-09 1s 1s 472245430e-09 0s 0s 472248430e-09 1s 1s 472249990e-09 1s 1s 472255670e-09 0s 0s 472258670e-09 1s 1s 472260270e-09 1s 1s 472265910e-09 0s 0s 472268910e-09 1s 1s 472270550e-09 1s 1s 472276150e-09 0s 0s 472279150e-09 1s 1s 472280830e-09 1s 1s 472286390e-09 0s 0s 472289390e-09 1s 1s 472291110e-09 1s 1s 472296630e-09 0s 0s 472299630e-09 1s 1s 472301390e-09 1s 1s 472306870e-09 0s 0s 472309870e-09 1s 1s 472311670e-09 1s 1s 472317110e-09 0s 0s 472320110e-09 1s 1s 472321950e-09 1s 1s 472327350e-09 0s 0s 472330350e-09 1s 1s 472332230e-09 1s 1s 472337590e-09 0s 0s 472340590e-09 1s 1s 472342510e-09 1s 1s 472347830e-09 0s 0s 472350830e-09 1s 1s 472352790e-09 1s 1s 472358070e-09 0s 0s 472361070e-09 1s 1s 472363070e-09 1s 1s 472368310e-09 0s 0s 472371310e-09 1s 1s 472373350e-09 1s 1s 472378550e-09 0s 0s 472381550e-09 1s 1s 472383630e-09 1s 1s 472388790e-09 0s 0s 472391790e-09 1s 1s 472393910e-09 1s 1s 472399030e-09 0s 0s 472402030e-09 1s 1s 472404190e-09 1s 1s 472409270e-09 0s 0s 472412270e-09 1s 1s 472414470e-09 1s 1s 472419510e-09 0s 0s 472422510e-09 1s 1s 472424750e-09 1s 1s 472429750e-09 0s 0s 472432750e-09 1s 1s 472435030e-09 1s 1s 472439990e-09 0s 0s 472442990e-09 1s 1s 472445310e-09 1s 1s 472450230e-09 0s 0s 472453230e-09 1s 1s 472455590e-09 1s 1s 472460470e-09 0s 0s 472463470e-09 1s 1s 472465870e-09 1s 1s 472470710e-09 0s 0s 472473710e-09 1s 1s 472476150e-09 1s 1s 472480950e-09 0s 0s 472483950e-09 1s 1s 472486430e-09 1s 1s 472491190e-09 0s 0s 472494190e-09 1s 1s 472496710e-09 1s 1s 472501430e-09 0s 0s 472504430e-09 1s 1s 472506990e-09 1s 1s 472511670e-09 0s 0s 472514670e-09 1s 1s 472517270e-09 1s 1s 472521910e-09 0s 0s 472524910e-09 1s 1s 472527550e-09 1s 1s 472532150e-09 0s 0s 472535150e-09 1s 1s 472537830e-09 1s 1s 472542390e-09 0s 0s 472545390e-09 1s 1s 472548110e-09 1s 1s 472552630e-09 0s 0s 472555630e-09 1s 1s 472558390e-09 1s 1s 472562870e-09 0s 0s 472565870e-09 1s 1s 472568670e-09 1s 1s 472573110e-09 0s 0s 472576110e-09 1s 1s 472578950e-09 1s 1s 472583350e-09 0s 0s 472586350e-09 1s 1s 472589230e-09 1s 1s 472593590e-09 0s 0s 472596590e-09 1s 1s 472599510e-09 1s 1s 472603830e-09 0s 0s 472606830e-09 1s 1s 472609790e-09 1s 1s 472614070e-09 0s 0s 472617070e-09 1s 1s 472620070e-09 1s 1s 472624310e-09 0s 0s 472627310e-09 1s 1s 472630350e-09 1s 1s 472634550e-09 0s 0s 472637550e-09 1s 1s 472640630e-09 1s 1s 472644790e-09 0s 0s 472647790e-09 1s 1s 472650910e-09 1s 1s 472655030e-09 0s 0s 472658030e-09 1s 1s 472661190e-09 1s 1s 472665270e-09 0s 0s 472668270e-09 1s 1s 472671470e-09 1s 1s 472675510e-09 0s 0s 472678510e-09 1s 1s 472681750e-09 1s 1s 472685750e-09 0s 0s 472688750e-09 1s 1s 472692030e-09 1s 1s 472695990e-09 0s 0s 472698990e-09 1s 1s 472702310e-09 1s 1s 472706230e-09 0s 0s 472709230e-09 1s 1s 472712590e-09 1s 1s 472716470e-09 0s 0s 472719470e-09 1s 1s 472722870e-09 1s 1s 472726710e-09 0s 0s 472729710e-09 1s 1s 472733150e-09 1s 1s 472736950e-09 0s 0s 472739950e-09 1s 1s 472743430e-09 1s 1s 472747190e-09 0s 0s 472750190e-09 1s 1s 472753710e-09 1s 1s 472757430e-09 0s 0s 472760430e-09 1s 1s 472763990e-09 1s 1s 472767670e-09 0s 0s 472770670e-09 1s 1s 472774270e-09 1s 1s 472777910e-09 0s 0s 472780910e-09 1s 1s 472784550e-09 1s 1s 472788150e-09 0s 0s 472791150e-09 1s 1s 472794830e-09 1s 1s 472798390e-09 0s 0s 472801390e-09 1s 1s 472805110e-09 1s 1s 472808630e-09 0s 0s 472811630e-09 1s 1s 472815390e-09 1s 1s 472818870e-09 0s 0s 472821870e-09 1s 1s 472825670e-09 1s 1s 472829110e-09 0s 0s 472832110e-09 1s 1s 472835950e-09 1s 1s 472839350e-09 0s 0s 472842350e-09 1s 1s 472846230e-09 1s 1s 472849590e-09 0s 0s 472852590e-09 1s 1s 472856510e-09 1s 1s 472859830e-09 0s 0s 472862830e-09 1s 1s 472866790e-09 1s 1s 472870070e-09 0s 0s 472873070e-09 1s 1s 472877070e-09 1s 1s 472880310e-09 0s 0s 472883310e-09 1s 1s 472887350e-09 1s 1s 472890550e-09 0s 0s 472893550e-09 1s 1s 472897630e-09 1s 1s 472900790e-09 0s 0s 472903790e-09 1s 1s 472907910e-09 1s 1s 472911030e-09 0s 0s 472914030e-09 1s 1s 472918190e-09 1s 1s 472921270e-09 0s 0s 472924270e-09 1s 1s 472928470e-09 1s 1s 472931510e-09 0s 0s 472934510e-09 1s 1s 472938750e-09 1s 1s 472941750e-09 0s 0s 472944750e-09 1s 1s 472949030e-09 1s 1s 472951990e-09 0s 0s 472954990e-09 1s 1s 472959310e-09 1s 1s 472962230e-09 0s 0s 472965230e-09 1s 1s 472969590e-09 1s 1s 472972470e-09 0s 0s 472975470e-09 1s 1s 472979870e-09 1s 1s 472982710e-09 0s 0s 472985710e-09 1s 1s 472990150e-09 1s 1s 472992950e-09 0s 0s 472995950e-09 1s 1s 473000430e-09 1s 1s 473003190e-09 0s 0s 473006190e-09 1s 1s 473010710e-09 1s 1s 473013430e-09 0s 0s 473016430e-09 1s 1s 473020990e-09 1s 1s 473023670e-09 0s 0s 473026670e-09 1s 1s 473031270e-09 1s 1s 473033910e-09 0s 0s 473036910e-09 1s 1s 473041550e-09 1s 1s 473044150e-09 0s 0s 473047150e-09 1s 1s 473051830e-09 1s 1s 473054390e-09 0s 0s 473057390e-09 1s 1s 473062110e-09 1s 1s 473064630e-09 0s 0s 473067630e-09 1s 1s 473072390e-09 1s 1s 473074870e-09 0s 0s 473077870e-09 1s 1s 473082670e-09 1s 1s 473085110e-09 0s 0s 473088110e-09 1s 1s 473092950e-09 1s 1s 473095350e-09 0s 0s 473098350e-09 1s 1s 473103230e-09 1s 1s 473105590e-09 0s 0s 473108590e-09 1s 1s 473113510e-09 1s 1s 473115830e-09 0s 0s 473118830e-09 1s 1s 473123790e-09 1s 1s 473126070e-09 0s 0s 473129070e-09 1s 1s 473134070e-09 1s 1s 473136310e-09 0s 0s 473139310e-09 1s 1s 473144350e-09 1s 1s 473146550e-09 0s 0s 473149550e-09 1s 1s 473154630e-09 1s 1s 473156790e-09 0s 0s 473159790e-09 1s 1s 473164910e-09 1s 1s 473167030e-09 0s 0s 473170030e-09 1s 1s 473175190e-09 1s 1s 473177270e-09 0s 0s 473180270e-09 1s 1s 473185470e-09 1s 1s 473187510e-09 0s 0s 473190510e-09 1s 1s 473195750e-09 1s 1s 473197750e-09 0s 0s 473200750e-09 1s 1s 473206030e-09 1s 1s 473207990e-09 0s 0s 473210990e-09 1s 1s 473216310e-09 1s 1s 473218230e-09 0s 0s 473221230e-09 1s 1s 473226590e-09 1s 1s 473228470e-09 0s 0s 473231470e-09 1s 1s 473236870e-09 1s 1s 473238710e-09 0s 0s 473241710e-09 1s 1s 473247150e-09 1s 1s 473248950e-09 0s 0s 473251950e-09 1s 1s 473257430e-09 1s 1s 473259190e-09 0s 0s 473262190e-09 1s 1s 473267710e-09 1s 1s 473269430e-09 0s 0s 473272430e-09 1s 1s 473277990e-09 1s 1s 473279670e-09 0s 0s 473282670e-09 1s 1s 473288270e-09 1s 1s 473289910e-09 0s 0s 473292910e-09 1s 1s 473298550e-09 1s 1s 473300150e-09 0s 0s 473303150e-09 1s 1s 473308830e-09 1s 1s 473310390e-09 0s 0s 473313390e-09 1s 1s 473319110e-09 1s 1s 473320630e-09 0s 0s 473323630e-09 1s 1s 473329390e-09 1s 1s 473330870e-09 0s 0s 473333870e-09 1s 1s 473339670e-09 1s 1s 473341110e-09 0s 0s 473344110e-09 1s 1s 473349950e-09 1s 1s 473351350e-09 0s 0s 473354350e-09 1s 1s 473360230e-09 1s 1s 473361590e-09 0s 0s 473364590e-09 1s 1s 473370510e-09 1s 1s 473371830e-09 0s 0s 473374830e-09 1s 1s 473380790e-09 1s 1s 473382070e-09 0s 0s 473385070e-09 1s 1s 473391070e-09 1s 1s 473392310e-09 0s 0s 473395310e-09 1s 1s 473401350e-09 1s 1s 473402550e-09 0s 0s 473405550e-09 1s 1s 473411630e-09 1s 1s 473412790e-09 0s 0s 473415790e-09 1s 1s 473421910e-09 1s 1s 473423030e-09 0s 0s 473426030e-09 1s 1s 473432190e-09 1s 1s 473433270e-09 0s 0s 473436270e-09 1s 1s 473442470e-09 1s 1s 473443510e-09 0s 0s 473446510e-09 1s 1s 473452750e-09 1s 1s 473453750e-09 0s 0s 473456750e-09 1s 1s 473463030e-09 1s 1s 473463990e-09 0s 0s 473466990e-09 1s 1s 473473310e-09 1s 1s 473474230e-09 0s 0s 473477230e-09 1s 1s 473483590e-09 1s 1s 473484470e-09 0s 0s 473487470e-09 1s 1s 473493870e-09 1s 1s 473494710e-09 0s 0s 473497710e-09 1s 1s 473504150e-09 1s 1s 473504950e-09 0s 0s 473507950e-09 1s 1s 473514430e-09 1s 1s 473515190e-09 0s 0s 473518190e-09 1s 1s 473524710e-09 1s 1s 473525430e-09 0s 0s 473528430e-09 1s 1s 473534990e-09 1s 1s 473535670e-09 0s 0s 473538670e-09 1s 1s 473545270e-09 1s 1s 473545910e-09 0s 0s 473548910e-09 1s 1s 473555550e-09 1s 1s 473556150e-09 0s 0s 473559150e-09 1s 1s 473565830e-09 1s 1s 473566390e-09 0s 0s 473569390e-09 1s 1s 473576110e-09 1s 1s 473576630e-09 0s 0s 473579630e-09 1s 1s 473586390e-09 1s 1s 473586870e-09 0s 0s 473589870e-09 1s 1s 473596670e-09 1s 1s 473597110e-09 0s 0s 473600110e-09 1s 1s 473606950e-09 1s 1s 473607350e-09 0s 0s 473610350e-09 1s 1s 473617230e-09 1s 1s 473617590e-09 0s 0s 473620590e-09 1s 1s 473627510e-09 1s 1s 473627830e-09 0s 0s 473630830e-09 1s 1s 473637790e-09 1s 1s 473638070e-09 0s 0s 473641070e-09 1s 1s 473648070e-09 1s 1s 473648310e-09 0s 0s 473651310e-09 1s 1s 473658350e-09 1s 1s 473658550e-09 0s 0s 473661550e-09 1s 1s 473668630e-09 1s 1s 473668790e-09 0s 0s 473671790e-09 1s 1s 473678910e-09 1s 1s 473679030e-09 0s 0s 473682030e-09 1s 1s 473689190e-09 1s 1s 473689270e-09 0s 0s 473692270e-09 1s 1s 473699470e-09 1s 1s 473699510e-09 0s 0s 473702510e-09 1s 1s 473709750e-09 0s 0s 473712750e-09 1s 1s 473719990e-09 0s 0s 473720030e-09 0s 0s 473722990e-09 1s 1s 473730230e-09 0s 0s 473730310e-09 0s 0s 473733230e-09 1s 1s 473740470e-09 0s 0s 473740590e-09 0s 0s 473743470e-09 1s 1s 473750710e-09 0s 0s 473750870e-09 0s 0s 473753710e-09 1s 1s 473760950e-09 0s 0s 473761150e-09 0s 0s 473763950e-09 1s 1s 473771190e-09 0s 0s 473771430e-09 0s 0s 473774190e-09 1s 1s 473781430e-09 0s 0s 473781710e-09 0s 0s 473784430e-09 1s 1s 473791670e-09 0s 0s 473791990e-09 0s 0s 473794670e-09 1s 1s 473801910e-09 0s 0s 473802270e-09 0s 0s 473804910e-09 1s 1s 473812150e-09 0s 0s 473812550e-09 0s 0s 473815150e-09 1s 1s 473822390e-09 0s 0s 473822830e-09 0s 0s 473825390e-09 1s 1s 473832630e-09 0s 0s 473833110e-09 0s 0s 473835630e-09 1s 1s 473842870e-09 0s 0s 473843390e-09 0s 0s 473845870e-09 1s 1s 473853110e-09 0s 0s 473853670e-09 0s 0s 473856110e-09 1s 1s 473863350e-09 0s 0s 473863950e-09 0s 0s 473866350e-09 1s 1s 473873590e-09 0s 0s 473874230e-09 0s 0s 473876590e-09 1s 1s 473883830e-09 0s 0s 473884510e-09 0s 0s 473886830e-09 1s 1s 473894070e-09 0s 0s 473894790e-09 0s 0s 473897070e-09 1s 1s 473904310e-09 0s 0s 473905070e-09 0s 0s 473907310e-09 1s 1s 473914550e-09 0s 0s 473915350e-09 0s 0s 473917550e-09 1s 1s 473924790e-09 0s 0s 473925630e-09 0s 0s 473927790e-09 1s 1s 473935030e-09 0s 0s 473935910e-09 0s 0s 473938030e-09 1s 1s 473945270e-09 0s 0s 473946190e-09 0s 0s 473948270e-09 1s 1s 473955510e-09 0s 0s 473956470e-09 0s 0s 473958510e-09 1s 1s 473965750e-09 0s 0s 473966750e-09 0s 0s 473968750e-09 1s 1s 473975990e-09 0s 0s 473977030e-09 0s 0s 473978990e-09 1s 1s 473986230e-09 0s 0s 473987310e-09 0s 0s 473989230e-09 1s 1s 473996470e-09 0s 0s 473997590e-09 0s 0s 473999470e-09 1s 1s 474006710e-09 0s 0s 474007870e-09 0s 0s 474009710e-09 1s 1s 474016950e-09 0s 0s 474018150e-09 0s 0s 474019950e-09 1s 1s 474027190e-09 0s 0s 474028430e-09 0s 0s 474030190e-09 1s 1s 474037430e-09 0s 0s 474038710e-09 0s 0s 474040430e-09 1s 1s 474047670e-09 0s 0s 474048990e-09 0s 0s 474050670e-09 1s 1s 474057910e-09 0s 0s 474059270e-09 0s 0s 474060910e-09 1s 1s 474068150e-09 0s 0s 474069550e-09 0s 0s 474071150e-09 1s 1s 474078390e-09 0s 0s 474079830e-09 0s 0s 474081390e-09 1s 1s 474088630e-09 0s 0s 474090110e-09 0s 0s 474091630e-09 1s 1s 474098870e-09 0s 0s 474100390e-09 0s 0s 474101870e-09 1s 1s 474109110e-09 0s 0s 474110670e-09 0s 0s 474112110e-09 1s 1s 474119350e-09 0s 0s 474120950e-09 0s 0s 474122350e-09 1s 1s 474129590e-09 0s 0s 474131230e-09 0s 0s 474132590e-09 1s 1s 474139830e-09 0s 0s 474141510e-09 0s 0s 474142830e-09 1s 1s 474150070e-09 0s 0s 474151790e-09 0s 0s 474153070e-09 1s 1s 474160310e-09 0s 0s 474162070e-09 0s 0s 474163310e-09 1s 1s 474170550e-09 0s 0s 474172350e-09 0s 0s 474173550e-09 1s 1s 474180790e-09 0s 0s 474182630e-09 0s 0s 474183790e-09 1s 1s 474191030e-09 0s 0s 474192910e-09 0s 0s 474194030e-09 1s 1s 474201270e-09 0s 0s 474203190e-09 0s 0s 474204270e-09 1s 1s 474211510e-09 0s 0s 474213470e-09 0s 0s 474214510e-09 1s 1s 474221750e-09 0s 0s 474223750e-09 0s 0s 474224750e-09 1s 1s 474231990e-09 0s 0s 474234030e-09 0s 0s 474234990e-09 1s 1s 474242230e-09 0s 0s 474244310e-09 0s 0s 474245230e-09 1s 1s 474252470e-09 0s 0s 474254590e-09 0s 0s 474255470e-09 1s 1s 474262710e-09 0s 0s 474264870e-09 0s 0s 474265710e-09 1s 1s 474272950e-09 0s 0s 474275150e-09 0s 0s 474275950e-09 1s 1s 474283190e-09 0s 0s 474285430e-09 0s 0s 474286190e-09 1s 1s 474293430e-09 0s 0s 474295710e-09 0s 0s 474296430e-09 1s 1s 474303670e-09 0s 0s 474305990e-09 0s 0s 474306670e-09 1s 1s 474313910e-09 0s 0s 474316270e-09 0s 0s 474316910e-09 1s 1s 474324150e-09 0s 0s 474326550e-09 0s 0s 474327150e-09 1s 1s 474334390e-09 0s 0s 474336830e-09 0s 0s 474337390e-09 1s 1s 474344630e-09 0s 0s 474347110e-09 0s 0s 474347630e-09 1s 1s 474354870e-09 0s 0s 474357390e-09 0s 0s 474357870e-09 1s 1s 474365110e-09 0s 0s 474367670e-09 0s 0s 474368110e-09 1s 1s 474375350e-09 0s 0s 474377950e-09 0s 0s 474378350e-09 1s 1s 474385590e-09 0s 0s 474388230e-09 0s 0s 474388590e-09 1s 1s 474395830e-09 0s 0s 474398510e-09 0s 0s 474398830e-09 1s 1s 474406070e-09 0s 0s 474408790e-09 0s 0s 474409070e-09 1s 1s 474416310e-09 0s 0s 474419070e-09 0s 0s 474419310e-09 1s 1s 474426550e-09 0s 0s 474429350e-09 0s 0s 474429550e-09 1s 1s 474436790e-09 0s 0s 474439630e-09 0s 0s 474439790e-09 1s 1s 474447030e-09 0s 0s 474449910e-09 0s 0s 474450030e-09 1s 1s 474457270e-09 0s 0s 474460190e-09 0s 0s 474460270e-09 1s 1s 474467510e-09 0s 0s 474470470e-09 0s 0s 474470510e-09 1s 1s 474477750e-09 0s 0s 474480750e-09 1s 1s 474480790e-09 1s 1s 474488030e-09 0s 0s 474490990e-09 1s 1s 474491070e-09 1s 1s 474498270e-09 0s 0s 474501230e-09 1s 1s 474501350e-09 1s 1s 474508510e-09 0s 0s 474511470e-09 1s 1s 474511630e-09 1s 1s 474518750e-09 0s 0s 474521710e-09 1s 1s 474521910e-09 1s 1s 474528990e-09 0s 0s 474531950e-09 1s 1s 474532190e-09 1s 1s 474539230e-09 0s 0s 474542190e-09 1s 1s 474542470e-09 1s 1s 474549470e-09 0s 0s 474552430e-09 1s 1s 474552750e-09 1s 1s 474559710e-09 0s 0s 474562670e-09 1s 1s 474563030e-09 1s 1s 474569950e-09 0s 0s 474572910e-09 1s 1s 474573310e-09 1s 1s 474580190e-09 0s 0s 474583150e-09 1s 1s 474583590e-09 1s 1s 474590430e-09 0s 0s 474593390e-09 1s 1s 474593870e-09 1s 1s 474600670e-09 0s 0s 474603630e-09 1s 1s 474604150e-09 1s 1s 474610910e-09 0s 0s 474613870e-09 1s 1s 474614430e-09 1s 1s 474621150e-09 0s 0s 474624110e-09 1s 1s 474624710e-09 1s 1s 474631390e-09 0s 0s 474634350e-09 1s 1s 474634990e-09 1s 1s 474641630e-09 0s 0s 474644590e-09 1s 1s 474645270e-09 1s 1s 474651870e-09 0s 0s 474654830e-09 1s 1s 474655550e-09 1s 1s 474662110e-09 0s 0s 474665070e-09 1s 1s 474665830e-09 1s 1s 474672350e-09 0s 0s 474675310e-09 1s 1s 474676110e-09 1s 1s 474682590e-09 0s 0s 474685550e-09 1s 1s 474686390e-09 1s 1s 474692830e-09 0s 0s 474695790e-09 1s 1s 474696670e-09 1s 1s 474703070e-09 0s 0s 474706030e-09 1s 1s 474706950e-09 1s 1s 474713310e-09 0s 0s 474716270e-09 1s 1s 474717230e-09 1s 1s 474723550e-09 0s 0s 474726510e-09 1s 1s 474727510e-09 1s 1s 474733790e-09 0s 0s 474736750e-09 1s 1s 474737790e-09 1s 1s 474744030e-09 0s 0s 474746990e-09 1s 1s 474748070e-09 1s 1s 474754270e-09 0s 0s 474757230e-09 1s 1s 474758350e-09 1s 1s 474764510e-09 0s 0s 474767470e-09 1s 1s 474768630e-09 1s 1s 474774750e-09 0s 0s 474777710e-09 1s 1s 474778910e-09 1s 1s 474784990e-09 0s 0s 474787950e-09 1s 1s 474789190e-09 1s 1s 474795230e-09 0s 0s 474798190e-09 1s 1s 474799470e-09 1s 1s 474805470e-09 0s 0s 474808430e-09 1s 1s 474809750e-09 1s 1s 474815710e-09 0s 0s 474818670e-09 1s 1s 474820030e-09 1s 1s 474825950e-09 0s 0s 474828910e-09 1s 1s 474830310e-09 1s 1s 474836190e-09 0s 0s 474839150e-09 1s 1s 474840590e-09 1s 1s 474846430e-09 0s 0s 474849390e-09 1s 1s 474850870e-09 1s 1s 474856670e-09 0s 0s 474859630e-09 1s 1s 474861150e-09 1s 1s 474866910e-09 0s 0s 474869870e-09 1s 1s 474871430e-09 1s 1s 474877150e-09 0s 0s 474880110e-09 1s 1s 474881710e-09 1s 1s 474887390e-09 0s 0s 474890350e-09 1s 1s 474891990e-09 1s 1s 474897630e-09 0s 0s 474900590e-09 1s 1s 474902270e-09 1s 1s 474907870e-09 0s 0s 474910830e-09 1s 1s 474912550e-09 1s 1s 474918110e-09 0s 0s 474921070e-09 1s 1s 474922830e-09 1s 1s 474928350e-09 0s 0s 474931310e-09 1s 1s 474933110e-09 1s 1s 474938590e-09 0s 0s 474941550e-09 1s 1s 474943390e-09 1s 1s 474948830e-09 0s 0s 474951790e-09 1s 1s 474953670e-09 1s 1s 474959070e-09 0s 0s 474962030e-09 1s 1s 474963950e-09 1s 1s 474969310e-09 0s 0s 474972270e-09 1s 1s 474974230e-09 1s 1s 474979550e-09 0s 0s 474982510e-09 1s 1s 474984510e-09 1s 1s 474989790e-09 0s 0s 474992750e-09 1s 1s 474994790e-09 1s 1s 475000030e-09 0s 0s 475002990e-09 1s 1s 475005070e-09 1s 1s 475010270e-09 0s 0s 475013230e-09 1s 1s 475015350e-09 1s 1s 475020510e-09 0s 0s 475023470e-09 1s 1s 475025630e-09 1s 1s 475030750e-09 0s 0s 475033710e-09 1s 1s 475035910e-09 1s 1s 475040990e-09 0s 0s 475043950e-09 1s 1s 475046190e-09 1s 1s 475051230e-09 0s 0s 475054190e-09 1s 1s 475056470e-09 1s 1s 475061470e-09 0s 0s 475064430e-09 1s 1s 475066750e-09 1s 1s 475071710e-09 0s 0s 475074670e-09 1s 1s 475077030e-09 1s 1s 475081950e-09 0s 0s 475084910e-09 1s 1s 475087310e-09 1s 1s 475092190e-09 0s 0s 475095150e-09 1s 1s 475097590e-09 1s 1s 475102430e-09 0s 0s 475105390e-09 1s 1s 475107870e-09 1s 1s 475112670e-09 0s 0s 475115630e-09 1s 1s 475118150e-09 1s 1s 475122910e-09 0s 0s 475125870e-09 1s 1s 475128430e-09 1s 1s 475133150e-09 0s 0s 475136110e-09 1s 1s 475138710e-09 1s 1s 475143390e-09 0s 0s 475146350e-09 1s 1s 475148990e-09 1s 1s 475153630e-09 0s 0s 475156590e-09 1s 1s 475159270e-09 1s 1s 475163870e-09 0s 0s 475166830e-09 1s 1s 475169550e-09 1s 1s 475174110e-09 0s 0s 475177070e-09 1s 1s 475179830e-09 1s 1s 475184350e-09 0s 0s 475187310e-09 1s 1s 475190110e-09 1s 1s 475194590e-09 0s 0s 475197550e-09 1s 1s 475200390e-09 1s 1s 475204830e-09 0s 0s 475207790e-09 1s 1s 475210670e-09 1s 1s 475215070e-09 0s 0s 475218030e-09 1s 1s 475220950e-09 1s 1s 475225310e-09 0s 0s 475228270e-09 1s 1s 475231230e-09 1s 1s 475235550e-09 0s 0s 475238510e-09 1s 1s 475241510e-09 1s 1s 475245790e-09 0s 0s 475248750e-09 1s 1s 475251790e-09 1s 1s 475256030e-09 0s 0s 475258990e-09 1s 1s 475262070e-09 1s 1s 475266270e-09 0s 0s 475269230e-09 1s 1s 475272350e-09 1s 1s 475276510e-09 0s 0s 475279470e-09 1s 1s 475282630e-09 1s 1s 475286750e-09 0s 0s 475289710e-09 1s 1s 475292910e-09 1s 1s 475296990e-09 0s 0s 475299950e-09 1s 1s 475303190e-09 1s 1s 475307230e-09 0s 0s 475310190e-09 1s 1s 475313470e-09 1s 1s 475317470e-09 0s 0s 475320430e-09 1s 1s 475323750e-09 1s 1s 475327710e-09 0s 0s 475330670e-09 1s 1s 475334030e-09 1s 1s 475337950e-09 0s 0s 475340910e-09 1s 1s 475344310e-09 1s 1s 475348190e-09 0s 0s 475351150e-09 1s 1s 475354590e-09 1s 1s 475358430e-09 0s 0s 475361390e-09 1s 1s 475364870e-09 1s 1s 475368670e-09 0s 0s 475371630e-09 1s 1s 475375150e-09 1s 1s 475378910e-09 0s 0s 475381870e-09 1s 1s 475385430e-09 1s 1s 475389150e-09 0s 0s 475392110e-09 1s 1s 475395710e-09 1s 1s 475399390e-09 0s 0s 475402350e-09 1s 1s 475405990e-09 1s 1s 475409630e-09 0s 0s 475412590e-09 1s 1s 475416270e-09 1s 1s 475419870e-09 0s 0s 475422830e-09 1s 1s 475426550e-09 1s 1s 475430110e-09 0s 0s 475433070e-09 1s 1s 475436830e-09 1s 1s 475440350e-09 0s 0s 475443310e-09 1s 1s 475447110e-09 1s 1s 475450590e-09 0s 0s 475453550e-09 1s 1s 475457390e-09 1s 1s 475460830e-09 0s 0s 475463790e-09 1s 1s 475467670e-09 1s 1s 475471070e-09 0s 0s 475474030e-09 1s 1s 475477950e-09 1s 1s 475481310e-09 0s 0s 475484270e-09 1s 1s 475488230e-09 1s 1s 475491550e-09 0s 0s 475494510e-09 1s 1s 475498510e-09 1s 1s 475501790e-09 0s 0s 475504750e-09 1s 1s 475508790e-09 1s 1s 475512030e-09 0s 0s 475514990e-09 1s 1s 475519070e-09 1s 1s 475522270e-09 0s 0s 475525230e-09 1s 1s 475529350e-09 1s 1s 475532510e-09 0s 0s 475535470e-09 1s 1s 475539630e-09 1s 1s 475542750e-09 0s 0s 475545710e-09 1s 1s 475549910e-09 1s 1s 475552990e-09 0s 0s 475555950e-09 1s 1s 475560190e-09 1s 1s 475563230e-09 0s 0s 475566190e-09 1s 1s 475570470e-09 1s 1s 475573470e-09 0s 0s 475576430e-09 1s 1s 475580750e-09 1s 1s 475583710e-09 0s 0s 475586670e-09 1s 1s 475591030e-09 1s 1s 475593950e-09 0s 0s 475596910e-09 1s 1s 475601310e-09 1s 1s 475604190e-09 0s 0s 475607150e-09 1s 1s 475611590e-09 1s 1s 475614430e-09 0s 0s 475617390e-09 1s 1s 475621870e-09 1s 1s 475624670e-09 0s 0s 475627630e-09 1s 1s 475632150e-09 1s 1s 475634910e-09 0s 0s 475637870e-09 1s 1s 475642430e-09 1s 1s 475645150e-09 0s 0s 475648110e-09 1s 1s 475652710e-09 1s 1s 475655390e-09 0s 0s 475658350e-09 1s 1s 475662990e-09 1s 1s 475665630e-09 0s 0s 475668590e-09 1s 1s 475673270e-09 1s 1s 475675870e-09 0s 0s 475678830e-09 1s 1s 475683550e-09 1s 1s 475686110e-09 0s 0s 475689070e-09 1s 1s 475693830e-09 1s 1s 475696350e-09 0s 0s 475699310e-09 1s 1s 475704110e-09 1s 1s 475706590e-09 0s 0s 475709550e-09 1s 1s 475714390e-09 1s 1s 475716830e-09 0s 0s 475719790e-09 1s 1s 475724670e-09 1s 1s 475727070e-09 0s 0s 475730030e-09 1s 1s 475734950e-09 1s 1s 475737310e-09 0s 0s 475740270e-09 1s 1s 475745230e-09 1s 1s 475747550e-09 0s 0s 475750510e-09 1s 1s 475755510e-09 1s 1s 475757790e-09 0s 0s 475760750e-09 1s 1s 475765790e-09 1s 1s 475768030e-09 0s 0s 475770990e-09 1s 1s 475776070e-09 1s 1s 475778270e-09 0s 0s 475781230e-09 1s 1s 475786350e-09 1s 1s 475788510e-09 0s 0s 475791470e-09 1s 1s 475796630e-09 1s 1s 475798750e-09 0s 0s 475801710e-09 1s 1s 475806910e-09 1s 1s 475808990e-09 0s 0s 475811950e-09 1s 1s 475817190e-09 1s 1s 475819230e-09 0s 0s 475822190e-09 1s 1s 475827470e-09 1s 1s 475829470e-09 0s 0s 475832430e-09 1s 1s 475837750e-09 1s 1s 475839710e-09 0s 0s 475842670e-09 1s 1s 475848030e-09 1s 1s 475849950e-09 0s 0s 475852910e-09 1s 1s 475858310e-09 1s 1s 475860190e-09 0s 0s 475863150e-09 1s 1s 475868590e-09 1s 1s 475870430e-09 0s 0s 475873390e-09 1s 1s 475878870e-09 1s 1s 475880670e-09 0s 0s 475883630e-09 1s 1s 475889150e-09 1s 1s 475890910e-09 0s 0s 475893870e-09 1s 1s 475899430e-09 1s 1s 475901150e-09 0s 0s 475904110e-09 1s 1s 475909710e-09 1s 1s 475911390e-09 0s 0s 475914350e-09 1s 1s 475919990e-09 1s 1s 475921630e-09 0s 0s 475924590e-09 1s 1s 475930270e-09 1s 1s 475931870e-09 0s 0s 475934830e-09 1s 1s 475940550e-09 1s 1s 475942110e-09 0s 0s 475945070e-09 1s 1s 475950830e-09 1s 1s 475952350e-09 0s 0s 475955310e-09 1s 1s 475961110e-09 1s 1s 475962590e-09 0s 0s 475965550e-09 1s 1s 475971390e-09 1s 1s 475972830e-09 0s 0s 475975790e-09 1s 1s 475981670e-09 1s 1s 475983070e-09 0s 0s 475986030e-09 1s 1s 475991950e-09 1s 1s 475993310e-09 0s 0s 475996270e-09 1s 1s 476002230e-09 1s 1s 476003550e-09 0s 0s 476006510e-09 1s 1s 476012510e-09 1s 1s 476013790e-09 0s 0s 476016750e-09 1s 1s 476022790e-09 1s 1s 476024030e-09 0s 0s 476026990e-09 1s 1s 476033070e-09 1s 1s 476034270e-09 0s 0s 476037230e-09 1s 1s 476043350e-09 1s 1s 476044510e-09 0s 0s 476047470e-09 1s 1s 476053630e-09 1s 1s 476054750e-09 0s 0s 476057710e-09 1s 1s 476063910e-09 1s 1s 476064990e-09 0s 0s 476067950e-09 1s 1s 476074190e-09 1s 1s 476075230e-09 0s 0s 476078190e-09 1s 1s 476084470e-09 1s 1s 476085470e-09 0s 0s 476088430e-09 1s 1s 476094750e-09 1s 1s 476095710e-09 0s 0s 476098670e-09 1s 1s 476105030e-09 1s 1s 476105950e-09 0s 0s 476108910e-09 1s 1s 476115310e-09 1s 1s 476116190e-09 0s 0s 476119150e-09 1s 1s 476125590e-09 1s 1s 476126430e-09 0s 0s 476129390e-09 1s 1s 476135870e-09 1s 1s 476136670e-09 0s 0s 476139630e-09 1s 1s 476146150e-09 1s 1s 476146910e-09 0s 0s 476149870e-09 1s 1s 476156430e-09 1s 1s 476157150e-09 0s 0s 476160110e-09 1s 1s 476166710e-09 1s 1s 476167390e-09 0s 0s 476170350e-09 1s 1s 476176990e-09 1s 1s 476177630e-09 0s 0s 476180590e-09 1s 1s 476187270e-09 1s 1s 476187870e-09 0s 0s 476190830e-09 1s 1s 476197550e-09 1s 1s 476198110e-09 0s 0s 476201070e-09 1s 1s 476207830e-09 1s 1s 476208350e-09 0s 0s 476211310e-09 1s 1s 476218110e-09 1s 1s 476218590e-09 0s 0s 476221550e-09 1s 1s 476228390e-09 1s 1s 476228830e-09 0s 0s 476231790e-09 1s 1s 476238670e-09 1s 1s 476239070e-09 0s 0s 476242030e-09 1s 1s 476248950e-09 1s 1s 476249310e-09 0s 0s 476252270e-09 1s 1s 476259230e-09 1s 1s 476259550e-09 0s 0s 476262510e-09 1s 1s 476269510e-09 1s 1s 476269790e-09 0s 0s 476272750e-09 1s 1s 476279790e-09 1s 1s 476280030e-09 0s 0s 476282990e-09 1s 1s 476290070e-09 1s 1s 476290270e-09 0s 0s 476293230e-09 1s 1s 476300350e-09 1s 1s 476300510e-09 0s 0s 476303470e-09 1s 1s 476310630e-09 1s 1s 476310750e-09 0s 0s 476313710e-09 1s 1s 476320910e-09 1s 1s 476320990e-09 0s 0s 476323950e-09 1s 1s 476331190e-09 1s 1s 476331230e-09 0s 0s 476334190e-09 1s 1s 476341470e-09 0s 0s 476344430e-09 1s 1s 476351710e-09 0s 0s 476351750e-09 0s 0s 476354670e-09 1s 1s 476361950e-09 0s 0s 476362030e-09 0s 0s 476364910e-09 1s 1s 476372190e-09 0s 0s 476372310e-09 0s 0s 476375150e-09 1s 1s 476382430e-09 0s 0s 476382590e-09 0s 0s 476385390e-09 1s 1s 476392670e-09 0s 0s 476392870e-09 0s 0s 476395630e-09 1s 1s 476402910e-09 0s 0s 476403150e-09 0s 0s 476405870e-09 1s 1s 476413150e-09 0s 0s 476413430e-09 0s 0s 476416110e-09 1s 1s 476423390e-09 0s 0s 476423710e-09 0s 0s 476426350e-09 1s 1s 476433630e-09 0s 0s 476433990e-09 0s 0s 476436590e-09 1s 1s 476443870e-09 0s 0s 476444270e-09 0s 0s 476446830e-09 1s 1s 476454110e-09 0s 0s 476454550e-09 0s 0s 476457070e-09 1s 1s 476464350e-09 0s 0s 476464830e-09 0s 0s 476467310e-09 1s 1s 476474590e-09 0s 0s 476475110e-09 0s 0s 476477550e-09 1s 1s 476484830e-09 0s 0s 476485390e-09 0s 0s 476487790e-09 1s 1s 476495070e-09 0s 0s 476495670e-09 0s 0s 476498030e-09 1s 1s 476505310e-09 0s 0s 476505950e-09 0s 0s 476508270e-09 1s 1s 476515550e-09 0s 0s 476516230e-09 0s 0s 476518510e-09 1s 1s 476525790e-09 0s 0s 476526510e-09 0s 0s 476528750e-09 1s 1s 476536030e-09 0s 0s 476536790e-09 0s 0s 476538990e-09 1s 1s 476546270e-09 0s 0s 476547070e-09 0s 0s 476549230e-09 1s 1s 476556510e-09 0s 0s 476557350e-09 0s 0s 476559470e-09 1s 1s 476566750e-09 0s 0s 476567630e-09 0s 0s 476569710e-09 1s 1s 476576990e-09 0s 0s 476577910e-09 0s 0s 476579950e-09 1s 1s 476587230e-09 0s 0s 476588190e-09 0s 0s 476590190e-09 1s 1s 476597470e-09 0s 0s 476598470e-09 0s 0s 476600430e-09 1s 1s 476607710e-09 0s 0s 476608750e-09 0s 0s 476610670e-09 1s 1s 476617950e-09 0s 0s 476619030e-09 0s 0s 476620910e-09 1s 1s 476628190e-09 0s 0s 476629310e-09 0s 0s 476631150e-09 1s 1s 476638430e-09 0s 0s 476639590e-09 0s 0s 476641390e-09 1s 1s 476648670e-09 0s 0s 476649870e-09 0s 0s 476651630e-09 1s 1s 476658910e-09 0s 0s 476660150e-09 0s 0s 476661870e-09 1s 1s 476669150e-09 0s 0s 476670430e-09 0s 0s 476672110e-09 1s 1s 476679390e-09 0s 0s 476680710e-09 0s 0s 476682350e-09 1s 1s 476689630e-09 0s 0s 476690990e-09 0s 0s 476692590e-09 1s 1s 476699870e-09 0s 0s 476701270e-09 0s 0s 476702830e-09 1s 1s 476710110e-09 0s 0s 476711550e-09 0s 0s 476713070e-09 1s 1s 476720350e-09 0s 0s 476721830e-09 0s 0s 476723310e-09 1s 1s 476730590e-09 0s 0s 476732110e-09 0s 0s 476733550e-09 1s 1s 476740830e-09 0s 0s 476742390e-09 0s 0s 476743790e-09 1s 1s 476751070e-09 0s 0s 476752670e-09 0s 0s 476754030e-09 1s 1s 476761310e-09 0s 0s 476762950e-09 0s 0s 476764270e-09 1s 1s 476771550e-09 0s 0s 476773230e-09 0s 0s 476774510e-09 1s 1s 476781790e-09 0s 0s 476783510e-09 0s 0s 476784750e-09 1s 1s 476792030e-09 0s 0s 476793790e-09 0s 0s 476794990e-09 1s 1s 476802270e-09 0s 0s 476804070e-09 0s 0s 476805230e-09 1s 1s 476812510e-09 0s 0s 476814350e-09 0s 0s 476815470e-09 1s 1s 476822750e-09 0s 0s 476824630e-09 0s 0s 476825710e-09 1s 1s 476832990e-09 0s 0s 476834910e-09 0s 0s 476835950e-09 1s 1s 476843230e-09 0s 0s 476845190e-09 0s 0s 476846190e-09 1s 1s 476853470e-09 0s 0s 476855470e-09 0s 0s 476856430e-09 1s 1s 476863710e-09 0s 0s 476865750e-09 0s 0s 476866670e-09 1s 1s 476873950e-09 0s 0s 476876030e-09 0s 0s 476876910e-09 1s 1s 476884190e-09 0s 0s 476886310e-09 0s 0s 476887150e-09 1s 1s 476894430e-09 0s 0s 476896590e-09 0s 0s 476897390e-09 1s 1s 476904670e-09 0s 0s 476906870e-09 0s 0s 476907630e-09 1s 1s 476914910e-09 0s 0s 476917150e-09 0s 0s 476917870e-09 1s 1s 476925150e-09 0s 0s 476927430e-09 0s 0s 476928110e-09 1s 1s 476935390e-09 0s 0s 476937710e-09 0s 0s 476938350e-09 1s 1s 476945630e-09 0s 0s 476947990e-09 0s 0s 476948590e-09 1s 1s 476955870e-09 0s 0s 476958270e-09 0s 0s 476958830e-09 1s 1s 476966110e-09 0s 0s 476968550e-09 0s 0s 476969070e-09 1s 1s 476976350e-09 0s 0s 476978830e-09 0s 0s 476979310e-09 1s 1s 476986590e-09 0s 0s 476989110e-09 0s 0s 476989550e-09 1s 1s 476996830e-09 0s 0s 476999390e-09 0s 0s 476999790e-09 1s 1s 477007070e-09 0s 0s 477009670e-09 0s 0s 477010030e-09 1s 1s 477017310e-09 0s 0s 477019950e-09 0s 0s 477020270e-09 1s 1s 477027550e-09 0s 0s 477030230e-09 0s 0s 477030510e-09 1s 1s 477037790e-09 0s 0s 477040510e-09 0s 0s 477040750e-09 1s 1s 477048030e-09 0s 0s 477050790e-09 0s 0s 477050990e-09 1s 1s 477058270e-09 0s 0s 477061070e-09 0s 0s 477061230e-09 1s 1s 477068510e-09 0s 0s 477071350e-09 0s 0s 477071470e-09 1s 1s 477078750e-09 0s 0s 477081630e-09 0s 0s 477081710e-09 1s 1s 477088990e-09 0s 0s 477091910e-09 0s 0s 477091950e-09 1s 1s 477099230e-09 0s 0s 477102190e-09 1s 1s 477102230e-09 1s 1s 477109510e-09 0s 0s 477112430e-09 1s 1s 477112510e-09 1s 1s 477119750e-09 0s 0s 477122670e-09 1s 1s 477122790e-09 1s 1s 477129990e-09 0s 0s 477132910e-09 1s 1s 477133070e-09 1s 1s 477140230e-09 0s 0s 477143150e-09 1s 1s 477143350e-09 1s 1s 477150470e-09 0s 0s 477153390e-09 1s 1s 477153630e-09 1s 1s 477160710e-09 0s 0s 477163630e-09 1s 1s 477163910e-09 1s 1s 477170950e-09 0s 0s 477173870e-09 1s 1s 477174190e-09 1s 1s 477181190e-09 0s 0s 477184110e-09 1s 1s 477184470e-09 1s 1s 477191430e-09 0s 0s 477194350e-09 1s 1s 477194750e-09 1s 1s 477201670e-09 0s 0s 477204590e-09 1s 1s 477205030e-09 1s 1s 477211910e-09 0s 0s 477214830e-09 1s 1s 477215310e-09 1s 1s 477222150e-09 0s 0s 477225070e-09 1s 1s 477225590e-09 1s 1s 477232390e-09 0s 0s 477235310e-09 1s 1s 477235870e-09 1s 1s 477242630e-09 0s 0s 477245550e-09 1s 1s 477246150e-09 1s 1s 477252870e-09 0s 0s 477255790e-09 1s 1s 477256430e-09 1s 1s 477263110e-09 0s 0s 477266030e-09 1s 1s 477266710e-09 1s 1s 477273350e-09 0s 0s 477276270e-09 1s 1s 477276990e-09 1s 1s 477283590e-09 0s 0s 477286510e-09 1s 1s 477287270e-09 1s 1s 477293830e-09 0s 0s 477296750e-09 1s 1s 477297550e-09 1s 1s 477304070e-09 0s 0s 477306990e-09 1s 1s 477307830e-09 1s 1s 477314310e-09 0s 0s 477317230e-09 1s 1s 477318110e-09 1s 1s 477324550e-09 0s 0s 477327470e-09 1s 1s 477328390e-09 1s 1s 477334790e-09 0s 0s 477337710e-09 1s 1s 477338670e-09 1s 1s 477345030e-09 0s 0s 477347950e-09 1s 1s 477348950e-09 1s 1s 477355270e-09 0s 0s 477358190e-09 1s 1s 477359230e-09 1s 1s 477365510e-09 0s 0s 477368430e-09 1s 1s 477369510e-09 1s 1s 477375750e-09 0s 0s 477378670e-09 1s 1s 477379790e-09 1s 1s 477385990e-09 0s 0s 477388910e-09 1s 1s 477390070e-09 1s 1s 477396230e-09 0s 0s 477399150e-09 1s 1s 477400350e-09 1s 1s 477406470e-09 0s 0s 477409390e-09 1s 1s 477410630e-09 1s 1s 477416710e-09 0s 0s 477419630e-09 1s 1s 477420910e-09 1s 1s 477426950e-09 0s 0s 477429870e-09 1s 1s 477431190e-09 1s 1s 477437190e-09 0s 0s 477440110e-09 1s 1s 477441470e-09 1s 1s 477447430e-09 0s 0s 477450350e-09 1s 1s 477451750e-09 1s 1s 477457670e-09 0s 0s 477460590e-09 1s 1s 477462030e-09 1s 1s 477467910e-09 0s 0s 477470830e-09 1s 1s 477472310e-09 1s 1s 477478150e-09 0s 0s 477481070e-09 1s 1s 477482590e-09 1s 1s 477488390e-09 0s 0s 477491310e-09 1s 1s 477492870e-09 1s 1s 477498630e-09 0s 0s 477501550e-09 1s 1s 477503150e-09 1s 1s 477508870e-09 0s 0s 477511790e-09 1s 1s 477513430e-09 1s 1s 477519110e-09 0s 0s 477522030e-09 1s 1s 477523710e-09 1s 1s 477529350e-09 0s 0s 477532270e-09 1s 1s 477533990e-09 1s 1s 477539590e-09 0s 0s 477542510e-09 1s 1s 477544270e-09 1s 1s 477549830e-09 0s 0s 477552750e-09 1s 1s 477554550e-09 1s 1s 477560070e-09 0s 0s 477562990e-09 1s 1s 477564830e-09 1s 1s 477570310e-09 0s 0s 477573230e-09 1s 1s 477575110e-09 1s 1s 477580550e-09 0s 0s 477583470e-09 1s 1s 477585390e-09 1s 1s 477590790e-09 0s 0s 477593710e-09 1s 1s 477595670e-09 1s 1s 477601030e-09 0s 0s 477603950e-09 1s 1s 477605950e-09 1s 1s 477611270e-09 0s 0s 477614190e-09 1s 1s 477616230e-09 1s 1s 477621510e-09 0s 0s 477624430e-09 1s 1s 477626510e-09 1s 1s 477631750e-09 0s 0s 477634670e-09 1s 1s 477636790e-09 1s 1s 477641990e-09 0s 0s 477644910e-09 1s 1s 477647070e-09 1s 1s 477652230e-09 0s 0s 477655150e-09 1s 1s 477657350e-09 1s 1s 477662470e-09 0s 0s 477665390e-09 1s 1s 477667630e-09 1s 1s 477672710e-09 0s 0s 477675630e-09 1s 1s 477677910e-09 1s 1s 477682950e-09 0s 0s 477685870e-09 1s 1s 477688190e-09 1s 1s 477693190e-09 0s 0s 477696110e-09 1s 1s 477698470e-09 1s 1s 477703430e-09 0s 0s 477706350e-09 1s 1s 477708750e-09 1s 1s 477713670e-09 0s 0s 477716590e-09 1s 1s 477719030e-09 1s 1s 477723910e-09 0s 0s 477726830e-09 1s 1s 477729310e-09 1s 1s 477734150e-09 0s 0s 477737070e-09 1s 1s 477739590e-09 1s 1s 477744390e-09 0s 0s 477747310e-09 1s 1s 477749870e-09 1s 1s 477754630e-09 0s 0s 477757550e-09 1s 1s 477760150e-09 1s 1s 477764870e-09 0s 0s 477767790e-09 1s 1s 477770430e-09 1s 1s 477775110e-09 0s 0s 477778030e-09 1s 1s 477780710e-09 1s 1s 477785350e-09 0s 0s 477788270e-09 1s 1s 477790990e-09 1s 1s 477795590e-09 0s 0s 477798510e-09 1s 1s 477801270e-09 1s 1s 477805830e-09 0s 0s 477808750e-09 1s 1s 477811550e-09 1s 1s 477816070e-09 0s 0s 477818990e-09 1s 1s 477821830e-09 1s 1s 477826310e-09 0s 0s 477829230e-09 1s 1s 477832110e-09 1s 1s 477836550e-09 0s 0s 477839470e-09 1s 1s 477842390e-09 1s 1s 477846790e-09 0s 0s 477849710e-09 1s 1s 477852670e-09 1s 1s 477857030e-09 0s 0s 477859950e-09 1s 1s 477862950e-09 1s 1s 477867270e-09 0s 0s 477870190e-09 1s 1s 477873230e-09 1s 1s 477877510e-09 0s 0s 477880430e-09 1s 1s 477883510e-09 1s 1s 477887750e-09 0s 0s 477890670e-09 1s 1s 477893790e-09 1s 1s 477897990e-09 0s 0s 477900910e-09 1s 1s 477904070e-09 1s 1s 477908230e-09 0s 0s 477911150e-09 1s 1s 477914350e-09 1s 1s 477918470e-09 0s 0s 477921390e-09 1s 1s 477924630e-09 1s 1s 477928710e-09 0s 0s 477931630e-09 1s 1s 477934910e-09 1s 1s 477938950e-09 0s 0s 477941870e-09 1s 1s 477945190e-09 1s 1s 477949190e-09 0s 0s 477952110e-09 1s 1s 477955470e-09 1s 1s 477959430e-09 0s 0s 477962350e-09 1s 1s 477965750e-09 1s 1s 477969670e-09 0s 0s 477972590e-09 1s 1s 477976030e-09 1s 1s 477979910e-09 0s 0s 477982830e-09 1s 1s 477986310e-09 1s 1s 477990150e-09 0s 0s 477993070e-09 1s 1s 477996590e-09 1s 1s 478000390e-09 0s 0s 478003310e-09 1s 1s 478006870e-09 1s 1s 478010630e-09 0s 0s 478013550e-09 1s 1s 478017150e-09 1s 1s 478020870e-09 0s 0s 478023790e-09 1s 1s 478027430e-09 1s 1s 478031110e-09 0s 0s 478034030e-09 1s 1s 478037710e-09 1s 1s 478041350e-09 0s 0s 478044270e-09 1s 1s 478047990e-09 1s 1s 478051590e-09 0s 0s 478054510e-09 1s 1s 478058270e-09 1s 1s 478061830e-09 0s 0s 478064750e-09 1s 1s 478068550e-09 1s 1s 478072070e-09 0s 0s 478074990e-09 1s 1s 478078830e-09 1s 1s 478082310e-09 0s 0s 478085230e-09 1s 1s 478089110e-09 1s 1s 478092550e-09 0s 0s 478095470e-09 1s 1s 478099390e-09 1s 1s 478102790e-09 0s 0s 478105710e-09 1s 1s 478109670e-09 1s 1s 478113030e-09 0s 0s 478115950e-09 1s 1s 478119950e-09 1s 1s 478123270e-09 0s 0s 478126190e-09 1s 1s 478130230e-09 1s 1s 478133510e-09 0s 0s 478136430e-09 1s 1s 478140510e-09 1s 1s 478143750e-09 0s 0s 478146670e-09 1s 1s 478150790e-09 1s 1s 478153990e-09 0s 0s 478156910e-09 1s 1s 478161070e-09 1s 1s 478164230e-09 0s 0s 478167150e-09 1s 1s 478171350e-09 1s 1s 478174470e-09 0s 0s 478177390e-09 1s 1s 478181630e-09 1s 1s 478184710e-09 0s 0s 478187630e-09 1s 1s 478191910e-09 1s 1s 478194950e-09 0s 0s 478197870e-09 1s 1s 478202190e-09 1s 1s 478205190e-09 0s 0s 478208110e-09 1s 1s 478212470e-09 1s 1s 478215430e-09 0s 0s 478218350e-09 1s 1s 478222750e-09 1s 1s 478225670e-09 0s 0s 478228590e-09 1s 1s 478233030e-09 1s 1s 478235910e-09 0s 0s 478238830e-09 1s 1s 478243310e-09 1s 1s 478246150e-09 0s 0s 478249070e-09 1s 1s 478253590e-09 1s 1s 478256390e-09 0s 0s 478259310e-09 1s 1s 478263870e-09 1s 1s 478266630e-09 0s 0s 478269550e-09 1s 1s 478274150e-09 1s 1s 478276870e-09 0s 0s 478279790e-09 1s 1s 478284430e-09 1s 1s 478287110e-09 0s 0s 478290030e-09 1s 1s 478294710e-09 1s 1s 478297350e-09 0s 0s 478300270e-09 1s 1s 478304990e-09 1s 1s 478307590e-09 0s 0s 478310510e-09 1s 1s 478315270e-09 1s 1s 478317830e-09 0s 0s 478320750e-09 1s 1s 478325550e-09 1s 1s 478328070e-09 0s 0s 478330990e-09 1s 1s 478335830e-09 1s 1s 478338310e-09 0s 0s 478341230e-09 1s 1s 478346110e-09 1s 1s 478348550e-09 0s 0s 478351470e-09 1s 1s 478356390e-09 1s 1s 478358790e-09 0s 0s 478361710e-09 1s 1s 478366670e-09 1s 1s 478369030e-09 0s 0s 478371950e-09 1s 1s 478376950e-09 1s 1s 478379270e-09 0s 0s 478382190e-09 1s 1s 478387230e-09 1s 1s 478389510e-09 0s 0s 478392430e-09 1s 1s 478397510e-09 1s 1s 478399750e-09 0s 0s 478402670e-09 1s 1s 478407790e-09 1s 1s 478409990e-09 0s 0s 478412910e-09 1s 1s 478418070e-09 1s 1s 478420230e-09 0s 0s 478423150e-09 1s 1s 478428350e-09 1s 1s 478430470e-09 0s 0s 478433390e-09 1s 1s 478438630e-09 1s 1s 478440710e-09 0s 0s 478443630e-09 1s 1s 478448910e-09 1s 1s 478450950e-09 0s 0s 478453870e-09 1s 1s 478459190e-09 1s 1s 478461190e-09 0s 0s 478464110e-09 1s 1s 478469470e-09 1s 1s 478471430e-09 0s 0s 478474350e-09 1s 1s 478479750e-09 1s 1s 478481670e-09 0s 0s 478484590e-09 1s 1s 478490030e-09 1s 1s 478491910e-09 0s 0s 478494830e-09 1s 1s 478500310e-09 1s 1s 478502150e-09 0s 0s 478505070e-09 1s 1s 478510590e-09 1s 1s 478512390e-09 0s 0s 478515310e-09 1s 1s 478520870e-09 1s 1s 478522630e-09 0s 0s 478525550e-09 1s 1s 478531150e-09 1s 1s 478532870e-09 0s 0s 478535790e-09 1s 1s 478541430e-09 1s 1s 478543110e-09 0s 0s 478546030e-09 1s 1s 478551710e-09 1s 1s 478553350e-09 0s 0s 478556270e-09 1s 1s 478561990e-09 1s 1s 478563590e-09 0s 0s 478566510e-09 1s 1s 478572270e-09 1s 1s 478573830e-09 0s 0s 478576750e-09 1s 1s 478582550e-09 1s 1s 478584070e-09 0s 0s 478586990e-09 1s 1s 478592830e-09 1s 1s 478594310e-09 0s 0s 478597230e-09 1s 1s 478603110e-09 1s 1s 478604550e-09 0s 0s 478607470e-09 1s 1s 478613390e-09 1s 1s 478614790e-09 0s 0s 478617710e-09 1s 1s 478623670e-09 1s 1s 478625030e-09 0s 0s 478627950e-09 1s 1s 478633950e-09 1s 1s 478635270e-09 0s 0s 478638190e-09 1s 1s 478644230e-09 1s 1s 478645510e-09 0s 0s 478648430e-09 1s 1s 478654510e-09 1s 1s 478655750e-09 0s 0s 478658670e-09 1s 1s 478664790e-09 1s 1s 478665990e-09 0s 0s 478668910e-09 1s 1s 478675070e-09 1s 1s 478676230e-09 0s 0s 478679150e-09 1s 1s 478685350e-09 1s 1s 478686470e-09 0s 0s 478689390e-09 1s 1s 478695630e-09 1s 1s 478696710e-09 0s 0s 478699630e-09 1s 1s 478705910e-09 1s 1s 478706950e-09 0s 0s 478709870e-09 1s 1s 478716190e-09 1s 1s 478717190e-09 0s 0s 478720110e-09 1s 1s 478726470e-09 1s 1s 478727430e-09 0s 0s 478730350e-09 1s 1s 478736750e-09 1s 1s 478737670e-09 0s 0s 478740590e-09 1s 1s 478747030e-09 1s 1s 478747910e-09 0s 0s 478750830e-09 1s 1s 478757310e-09 1s 1s 478758150e-09 0s 0s 478761070e-09 1s 1s 478767590e-09 1s 1s 478768390e-09 0s 0s 478771310e-09 1s 1s 478777870e-09 1s 1s 478778630e-09 0s 0s 478781550e-09 1s 1s 478788150e-09 1s 1s 478788870e-09 0s 0s 478791790e-09 1s 1s 478798430e-09 1s 1s 478799110e-09 0s 0s 478802030e-09 1s 1s 478808710e-09 1s 1s 478809350e-09 0s 0s 478812270e-09 1s 1s 478818990e-09 1s 1s 478819590e-09 0s 0s 478822510e-09 1s 1s 478829270e-09 1s 1s 478829830e-09 0s 0s 478832750e-09 1s 1s 478839550e-09 1s 1s 478840070e-09 0s 0s 478842990e-09 1s 1s 478849830e-09 1s 1s 478850310e-09 0s 0s 478853230e-09 1s 1s 478860110e-09 1s 1s 478860550e-09 0s 0s 478863470e-09 1s 1s 478870390e-09 1s 1s 478870790e-09 0s 0s 478873710e-09 1s 1s 478880670e-09 1s 1s 478881030e-09 0s 0s 478883950e-09 1s 1s 478890950e-09 1s 1s 478891270e-09 0s 0s 478894190e-09 1s 1s 478901230e-09 1s 1s 478901510e-09 0s 0s 478904430e-09 1s 1s 478911510e-09 1s 1s 478911750e-09 0s 0s 478914670e-09 1s 1s 478921790e-09 1s 1s 478921990e-09 0s 0s 478924910e-09 1s 1s 478932070e-09 1s 1s 478932230e-09 0s 0s 478935150e-09 1s 1s 478942350e-09 1s 1s 478942470e-09 0s 0s 478945390e-09 1s 1s 478952630e-09 1s 1s 478952710e-09 0s 0s 478955630e-09 1s 1s 478962910e-09 1s 1s 478962950e-09 0s 0s 478965870e-09 1s 1s 478973190e-09 0s 0s 478976110e-09 1s 1s 478983430e-09 0s 0s 478983470e-09 0s 0s 478986350e-09 1s 1s 478993670e-09 0s 0s 478993750e-09 0s 0s 478996590e-09 1s 1s 479003910e-09 0s 0s 479004030e-09 0s 0s 479006830e-09 1s 1s 479014150e-09 0s 0s 479014310e-09 0s 0s 479017070e-09 1s 1s 479024390e-09 0s 0s 479024590e-09 0s 0s 479027310e-09 1s 1s 479034630e-09 0s 0s 479034870e-09 0s 0s 479037550e-09 1s 1s 479044870e-09 0s 0s 479045150e-09 0s 0s 479047790e-09 1s 1s 479055110e-09 0s 0s 479055430e-09 0s 0s 479058030e-09 1s 1s 479065350e-09 0s 0s 479065710e-09 0s 0s 479068270e-09 1s 1s 479075590e-09 0s 0s 479075990e-09 0s 0s 479078510e-09 1s 1s 479085830e-09 0s 0s 479086270e-09 0s 0s 479088750e-09 1s 1s 479096070e-09 0s 0s 479096550e-09 0s 0s 479098990e-09 1s 1s 479106310e-09 0s 0s 479106830e-09 0s 0s 479109230e-09 1s 1s 479116550e-09 0s 0s 479117110e-09 0s 0s 479119470e-09 1s 1s 479126790e-09 0s 0s 479127390e-09 0s 0s 479129710e-09 1s 1s 479137030e-09 0s 0s 479137670e-09 0s 0s 479139950e-09 1s 1s 479147270e-09 0s 0s 479147950e-09 0s 0s 479150190e-09 1s 1s 479157510e-09 0s 0s 479158230e-09 0s 0s 479160430e-09 1s 1s 479167750e-09 0s 0s 479168510e-09 0s 0s 479170670e-09 1s 1s 479177990e-09 0s 0s 479178790e-09 0s 0s 479180910e-09 1s 1s 479188230e-09 0s 0s 479189070e-09 0s 0s 479191150e-09 1s 1s 479198470e-09 0s 0s 479199350e-09 0s 0s 479201390e-09 1s 1s 479208710e-09 0s 0s 479209630e-09 0s 0s 479211630e-09 1s 1s 479218950e-09 0s 0s 479219910e-09 0s 0s 479221870e-09 1s 1s 479229190e-09 0s 0s 479230190e-09 0s 0s 479232110e-09 1s 1s 479239430e-09 0s 0s 479240470e-09 0s 0s 479242350e-09 1s 1s 479249670e-09 0s 0s 479250750e-09 0s 0s 479252590e-09 1s 1s 479259910e-09 0s 0s 479261030e-09 0s 0s 479262830e-09 1s 1s 479270150e-09 0s 0s 479271310e-09 0s 0s 479273070e-09 1s 1s 479280390e-09 0s 0s 479281590e-09 0s 0s 479283310e-09 1s 1s 479290630e-09 0s 0s 479291870e-09 0s 0s 479293550e-09 1s 1s 479300870e-09 0s 0s 479302150e-09 0s 0s 479303790e-09 1s 1s 479311110e-09 0s 0s 479312430e-09 0s 0s 479314030e-09 1s 1s 479321350e-09 0s 0s 479322710e-09 0s 0s 479324270e-09 1s 1s 479331590e-09 0s 0s 479332990e-09 0s 0s 479334510e-09 1s 1s 479341830e-09 0s 0s 479343270e-09 0s 0s 479344750e-09 1s 1s 479352070e-09 0s 0s 479353550e-09 0s 0s 479354990e-09 1s 1s 479362310e-09 0s 0s 479363830e-09 0s 0s 479365230e-09 1s 1s 479372550e-09 0s 0s 479374110e-09 0s 0s 479375470e-09 1s 1s 479382790e-09 0s 0s 479384390e-09 0s 0s 479385710e-09 1s 1s 479393030e-09 0s 0s 479394670e-09 0s 0s 479395950e-09 1s 1s 479403270e-09 0s 0s 479404950e-09 0s 0s 479406190e-09 1s 1s 479413510e-09 0s 0s 479415230e-09 0s 0s 479416430e-09 1s 1s 479423750e-09 0s 0s 479425510e-09 0s 0s 479426670e-09 1s 1s 479433990e-09 0s 0s 479435790e-09 0s 0s 479436910e-09 1s 1s 479444230e-09 0s 0s 479446070e-09 0s 0s 479447150e-09 1s 1s 479454470e-09 0s 0s 479456350e-09 0s 0s 479457390e-09 1s 1s 479464710e-09 0s 0s 479466630e-09 0s 0s 479467630e-09 1s 1s 479474950e-09 0s 0s 479476910e-09 0s 0s 479477870e-09 1s 1s 479485190e-09 0s 0s 479487190e-09 0s 0s 479488110e-09 1s 1s 479495430e-09 0s 0s 479497470e-09 0s 0s 479498350e-09 1s 1s 479505670e-09 0s 0s 479507750e-09 0s 0s 479508590e-09 1s 1s 479515910e-09 0s 0s 479518030e-09 0s 0s 479518830e-09 1s 1s 479526150e-09 0s 0s 479528310e-09 0s 0s 479529070e-09 1s 1s 479536390e-09 0s 0s 479538590e-09 0s 0s 479539310e-09 1s 1s 479546630e-09 0s 0s 479548870e-09 0s 0s 479549550e-09 1s 1s 479556870e-09 0s 0s 479559150e-09 0s 0s 479559790e-09 1s 1s 479567110e-09 0s 0s 479569430e-09 0s 0s 479570030e-09 1s 1s 479577350e-09 0s 0s 479579710e-09 0s 0s 479580270e-09 1s 1s 479587590e-09 0s 0s 479589990e-09 0s 0s 479590510e-09 1s 1s 479597830e-09 0s 0s 479600270e-09 0s 0s 479600750e-09 1s 1s 479608070e-09 0s 0s 479610550e-09 0s 0s 479610990e-09 1s 1s 479618310e-09 0s 0s 479620830e-09 0s 0s 479621230e-09 1s 1s 479628550e-09 0s 0s 479631110e-09 0s 0s 479631470e-09 1s 1s 479638790e-09 0s 0s 479641390e-09 0s 0s 479641710e-09 1s 1s 479649030e-09 0s 0s 479651670e-09 0s 0s 479651950e-09 1s 1s 479659270e-09 0s 0s 479661950e-09 0s 0s 479662190e-09 1s 1s 479669510e-09 0s 0s 479672230e-09 0s 0s 479672430e-09 1s 1s 479679750e-09 0s 0s 479682510e-09 0s 0s 479682670e-09 1s 1s 479689990e-09 0s 0s 479692790e-09 0s 0s 479692910e-09 1s 1s 479700230e-09 0s 0s 479703070e-09 0s 0s 479703150e-09 1s 1s 479710470e-09 0s 0s 479713350e-09 0s 0s 479713390e-09 1s 1s 479720710e-09 0s 0s 479723630e-09 1s 1s 479723670e-09 1s 1s 479730990e-09 0s 0s 479733870e-09 1s 1s 479733950e-09 1s 1s 479741230e-09 0s 0s 479744110e-09 1s 1s 479744230e-09 1s 1s 479751470e-09 0s 0s 479754350e-09 1s 1s 479754510e-09 1s 1s 479761710e-09 0s 0s 479764590e-09 1s 1s 479764790e-09 1s 1s 479771950e-09 0s 0s 479774830e-09 1s 1s 479775070e-09 1s 1s 479782190e-09 0s 0s 479785070e-09 1s 1s 479785350e-09 1s 1s 479792430e-09 0s 0s 479795310e-09 1s 1s 479795630e-09 1s 1s 479802670e-09 0s 0s 479805550e-09 1s 1s 479805910e-09 1s 1s 479812910e-09 0s 0s 479815790e-09 1s 1s 479816190e-09 1s 1s 479823150e-09 0s 0s 479826030e-09 1s 1s 479826470e-09 1s 1s 479833390e-09 0s 0s 479836270e-09 1s 1s 479836750e-09 1s 1s 479843630e-09 0s 0s 479846510e-09 1s 1s 479847030e-09 1s 1s 479853870e-09 0s 0s 479856750e-09 1s 1s 479857310e-09 1s 1s 479864110e-09 0s 0s 479866990e-09 1s 1s 479867590e-09 1s 1s 479874350e-09 0s 0s 479877230e-09 1s 1s 479877870e-09 1s 1s 479884590e-09 0s 0s 479887470e-09 1s 1s 479888150e-09 1s 1s 479894830e-09 0s 0s 479897710e-09 1s 1s 479898430e-09 1s 1s 479905070e-09 0s 0s 479907950e-09 1s 1s 479908710e-09 1s 1s 479915310e-09 0s 0s 479918190e-09 1s 1s 479918990e-09 1s 1s 479925550e-09 0s 0s 479928430e-09 1s 1s 479929270e-09 1s 1s 479935790e-09 0s 0s 479938670e-09 1s 1s 479939550e-09 1s 1s 479946030e-09 0s 0s 479948910e-09 1s 1s 479949830e-09 1s 1s 479956270e-09 0s 0s 479959150e-09 1s 1s 479960110e-09 1s 1s 479966510e-09 0s 0s 479969390e-09 1s 1s 479970390e-09 1s 1s 479976750e-09 0s 0s 479979630e-09 1s 1s 479980670e-09 1s 1s 479986990e-09 0s 0s 479989870e-09 1s 1s 479990950e-09 1s 1s 479997230e-09 0s 0s 480000110e-09 1s 1s 480001230e-09 1s 1s 480007470e-09 0s 0s 480010350e-09 1s 1s 480011510e-09 1s 1s 480017710e-09 0s 0s 480020590e-09 1s 1s 480021790e-09 1s 1s 480027950e-09 0s 0s 480030830e-09 1s 1s 480032070e-09 1s 1s 480038190e-09 0s 0s 480041070e-09 1s 1s 480042350e-09 1s 1s 480048430e-09 0s 0s 480051310e-09 1s 1s 480052630e-09 1s 1s 480058670e-09 0s 0s 480061550e-09 1s 1s 480062910e-09 1s 1s 480068910e-09 0s 0s 480071790e-09 1s 1s 480073190e-09 1s 1s 480079150e-09 0s 0s 480082030e-09 1s 1s 480083470e-09 1s 1s 480089390e-09 0s 0s 480092270e-09 1s 1s 480093750e-09 1s 1s 480099630e-09 0s 0s 480102510e-09 1s 1s 480104030e-09 1s 1s 480109870e-09 0s 0s 480112750e-09 1s 1s 480114310e-09 1s 1s 480120110e-09 0s 0s 480122990e-09 1s 1s 480124590e-09 1s 1s 480130350e-09 0s 0s 480133230e-09 1s 1s 480134870e-09 1s 1s 480140590e-09 0s 0s 480143470e-09 1s 1s 480145150e-09 1s 1s 480150830e-09 0s 0s 480153710e-09 1s 1s 480155430e-09 1s 1s 480161070e-09 0s 0s 480163950e-09 1s 1s 480165710e-09 1s 1s 480171310e-09 0s 0s 480174190e-09 1s 1s 480175990e-09 1s 1s 480181550e-09 0s 0s 480184430e-09 1s 1s 480186270e-09 1s 1s 480191790e-09 0s 0s 480194670e-09 1s 1s 480196550e-09 1s 1s 480202030e-09 0s 0s 480204910e-09 1s 1s 480206830e-09 1s 1s 480212270e-09 0s 0s 480215150e-09 1s 1s 480217110e-09 1s 1s 480222510e-09 0s 0s 480225390e-09 1s 1s 480227390e-09 1s 1s 480232750e-09 0s 0s 480235630e-09 1s 1s 480237670e-09 1s 1s 480242990e-09 0s 0s 480245870e-09 1s 1s 480247950e-09 1s 1s 480253230e-09 0s 0s 480256110e-09 1s 1s 480258230e-09 1s 1s 480263470e-09 0s 0s 480266350e-09 1s 1s 480268510e-09 1s 1s 480273710e-09 0s 0s 480276590e-09 1s 1s 480278790e-09 1s 1s 480283950e-09 0s 0s 480286830e-09 1s 1s 480289070e-09 1s 1s 480294190e-09 0s 0s 480297070e-09 1s 1s 480299350e-09 1s 1s 480304430e-09 0s 0s 480307310e-09 1s 1s 480309630e-09 1s 1s 480314670e-09 0s 0s 480317550e-09 1s 1s 480319910e-09 1s 1s 480324910e-09 0s 0s 480327790e-09 1s 1s 480330190e-09 1s 1s 480335150e-09 0s 0s 480338030e-09 1s 1s 480340470e-09 1s 1s 480345390e-09 0s 0s 480348270e-09 1s 1s 480350750e-09 1s 1s 480355630e-09 0s 0s 480358510e-09 1s 1s 480361030e-09 1s 1s 480365870e-09 0s 0s 480368750e-09 1s 1s 480371310e-09 1s 1s 480376110e-09 0s 0s 480378990e-09 1s 1s 480381590e-09 1s 1s 480386350e-09 0s 0s 480389230e-09 1s 1s 480391870e-09 1s 1s 480396590e-09 0s 0s 480399470e-09 1s 1s 480402150e-09 1s 1s 480406830e-09 0s 0s 480409710e-09 1s 1s 480412430e-09 1s 1s 480417070e-09 0s 0s 480419950e-09 1s 1s 480422710e-09 1s 1s 480427310e-09 0s 0s 480430190e-09 1s 1s 480432990e-09 1s 1s 480437550e-09 0s 0s 480440430e-09 1s 1s 480443270e-09 1s 1s 480447790e-09 0s 0s 480450670e-09 1s 1s 480453550e-09 1s 1s 480458030e-09 0s 0s 480460910e-09 1s 1s 480463830e-09 1s 1s 480468270e-09 0s 0s 480471150e-09 1s 1s 480474110e-09 1s 1s 480478510e-09 0s 0s 480481390e-09 1s 1s 480484390e-09 1s 1s 480488750e-09 0s 0s 480491630e-09 1s 1s 480494670e-09 1s 1s 480498990e-09 0s 0s 480501870e-09 1s 1s 480504950e-09 1s 1s 480509230e-09 0s 0s 480512110e-09 1s 1s 480515230e-09 1s 1s 480519470e-09 0s 0s 480522350e-09 1s 1s 480525510e-09 1s 1s 480529710e-09 0s 0s 480532590e-09 1s 1s 480535790e-09 1s 1s 480539950e-09 0s 0s 480542830e-09 1s 1s 480546070e-09 1s 1s 480550190e-09 0s 0s 480553070e-09 1s 1s 480556350e-09 1s 1s 480560430e-09 0s 0s 480563310e-09 1s 1s 480566630e-09 1s 1s 480570670e-09 0s 0s 480573550e-09 1s 1s 480576910e-09 1s 1s 480580910e-09 0s 0s 480583790e-09 1s 1s 480587190e-09 1s 1s 480591150e-09 0s 0s 480594030e-09 1s 1s 480597470e-09 1s 1s 480601390e-09 0s 0s 480604270e-09 1s 1s 480607750e-09 1s 1s 480611630e-09 0s 0s 480614510e-09 1s 1s 480618030e-09 1s 1s 480621870e-09 0s 0s 480624750e-09 1s 1s 480628310e-09 1s 1s 480632110e-09 0s 0s 480634990e-09 1s 1s 480638590e-09 1s 1s 480642350e-09 0s 0s 480645230e-09 1s 1s 480648870e-09 1s 1s 480652590e-09 0s 0s 480655470e-09 1s 1s 480659150e-09 1s 1s 480662830e-09 0s 0s 480665710e-09 1s 1s 480669430e-09 1s 1s 480673070e-09 0s 0s 480675950e-09 1s 1s 480679710e-09 1s 1s 480683310e-09 0s 0s 480686190e-09 1s 1s 480689990e-09 1s 1s 480693550e-09 0s 0s 480696430e-09 1s 1s 480700270e-09 1s 1s 480703790e-09 0s 0s 480706670e-09 1s 1s 480710550e-09 1s 1s 480714030e-09 0s 0s 480716910e-09 1s 1s 480720830e-09 1s 1s 480724270e-09 0s 0s 480727150e-09 1s 1s 480731110e-09 1s 1s 480734510e-09 0s 0s 480737390e-09 1s 1s 480741390e-09 1s 1s 480744750e-09 0s 0s 480747630e-09 1s 1s 480751670e-09 1s 1s 480754990e-09 0s 0s 480757870e-09 1s 1s 480761950e-09 1s 1s 480765230e-09 0s 0s 480768110e-09 1s 1s 480772230e-09 1s 1s 480775470e-09 0s 0s 480778350e-09 1s 1s 480782510e-09 1s 1s 480785710e-09 0s 0s 480788590e-09 1s 1s 480792790e-09 1s 1s 480795950e-09 0s 0s 480798830e-09 1s 1s 480803070e-09 1s 1s 480806190e-09 0s 0s 480809070e-09 1s 1s 480813350e-09 1s 1s 480816430e-09 0s 0s 480819310e-09 1s 1s 480823630e-09 1s 1s 480826670e-09 0s 0s 480829550e-09 1s 1s 480833910e-09 1s 1s 480836910e-09 0s 0s 480839790e-09 1s 1s 480844190e-09 1s 1s 480847150e-09 0s 0s 480850030e-09 1s 1s 480854470e-09 1s 1s 480857390e-09 0s 0s 480860270e-09 1s 1s 480864750e-09 1s 1s 480867630e-09 0s 0s 480870510e-09 1s 1s 480875030e-09 1s 1s 480877870e-09 0s 0s 480880750e-09 1s 1s 480885310e-09 1s 1s 480888110e-09 0s 0s 480890990e-09 1s 1s 480895590e-09 1s 1s 480898350e-09 0s 0s 480901230e-09 1s 1s 480905870e-09 1s 1s 480908590e-09 0s 0s 480911470e-09 1s 1s 480916150e-09 1s 1s 480918830e-09 0s 0s 480921710e-09 1s 1s 480926430e-09 1s 1s 480929070e-09 0s 0s 480931950e-09 1s 1s 480936710e-09 1s 1s 480939310e-09 0s 0s 480942190e-09 1s 1s 480946990e-09 1s 1s 480949550e-09 0s 0s 480952430e-09 1s 1s 480957270e-09 1s 1s 480959790e-09 0s 0s 480962670e-09 1s 1s 480967550e-09 1s 1s 480970030e-09 0s 0s 480972910e-09 1s 1s 480977830e-09 1s 1s 480980270e-09 0s 0s 480983150e-09 1s 1s 480988110e-09 1s 1s 480990510e-09 0s 0s 480993390e-09 1s 1s 480998390e-09 1s 1s 481000750e-09 0s 0s 481003630e-09 1s 1s 481008670e-09 1s 1s 481010990e-09 0s 0s 481013870e-09 1s 1s 481018950e-09 1s 1s 481021230e-09 0s 0s 481024110e-09 1s 1s 481029230e-09 1s 1s 481031470e-09 0s 0s 481034350e-09 1s 1s 481039510e-09 1s 1s 481041710e-09 0s 0s 481044590e-09 1s 1s 481049790e-09 1s 1s 481051950e-09 0s 0s 481054830e-09 1s 1s 481060070e-09 1s 1s 481062190e-09 0s 0s 481065070e-09 1s 1s 481070350e-09 1s 1s 481072430e-09 0s 0s 481075310e-09 1s 1s 481080630e-09 1s 1s 481082670e-09 0s 0s 481085550e-09 1s 1s 481090910e-09 1s 1s 481092910e-09 0s 0s 481095790e-09 1s 1s 481101190e-09 1s 1s 481103150e-09 0s 0s 481106030e-09 1s 1s 481111470e-09 1s 1s 481113390e-09 0s 0s 481116270e-09 1s 1s 481121750e-09 1s 1s 481123630e-09 0s 0s 481126510e-09 1s 1s 481132030e-09 1s 1s 481133870e-09 0s 0s 481136750e-09 1s 1s 481142310e-09 1s 1s 481144110e-09 0s 0s 481146990e-09 1s 1s 481152590e-09 1s 1s 481154350e-09 0s 0s 481157230e-09 1s 1s 481162870e-09 1s 1s 481164590e-09 0s 0s 481167470e-09 1s 1s 481173150e-09 1s 1s 481174830e-09 0s 0s 481177710e-09 1s 1s 481183430e-09 1s 1s 481185070e-09 0s 0s 481187950e-09 1s 1s 481193710e-09 1s 1s 481195310e-09 0s 0s 481198190e-09 1s 1s 481203990e-09 1s 1s 481205550e-09 0s 0s 481208430e-09 1s 1s 481214270e-09 1s 1s 481215790e-09 0s 0s 481218670e-09 1s 1s 481224550e-09 1s 1s 481226030e-09 0s 0s 481228910e-09 1s 1s 481234830e-09 1s 1s 481236270e-09 0s 0s 481239150e-09 1s 1s 481245110e-09 1s 1s 481246510e-09 0s 0s 481249390e-09 1s 1s 481255390e-09 1s 1s 481256750e-09 0s 0s 481259630e-09 1s 1s 481265670e-09 1s 1s 481266990e-09 0s 0s 481269870e-09 1s 1s 481275950e-09 1s 1s 481277230e-09 0s 0s 481280110e-09 1s 1s 481286230e-09 1s 1s 481287470e-09 0s 0s 481290350e-09 1s 1s 481296510e-09 1s 1s 481297710e-09 0s 0s 481300590e-09 1s 1s 481306790e-09 1s 1s 481307950e-09 0s 0s 481310830e-09 1s 1s 481317070e-09 1s 1s 481318190e-09 0s 0s 481321070e-09 1s 1s 481327350e-09 1s 1s 481328430e-09 0s 0s 481331310e-09 1s 1s 481337630e-09 1s 1s 481338670e-09 0s 0s 481341550e-09 1s 1s 481347910e-09 1s 1s 481348910e-09 0s 0s 481351790e-09 1s 1s 481358190e-09 1s 1s 481359150e-09 0s 0s 481362030e-09 1s 1s 481368470e-09 1s 1s 481369390e-09 0s 0s 481372270e-09 1s 1s 481378750e-09 1s 1s 481379630e-09 0s 0s 481382510e-09 1s 1s 481389030e-09 1s 1s 481389870e-09 0s 0s 481392750e-09 1s 1s 481399310e-09 1s 1s 481400110e-09 0s 0s 481402990e-09 1s 1s 481409590e-09 1s 1s 481410350e-09 0s 0s 481413230e-09 1s 1s 481419870e-09 1s 1s 481420590e-09 0s 0s 481423470e-09 1s 1s 481430150e-09 1s 1s 481430830e-09 0s 0s 481433710e-09 1s 1s 481440430e-09 1s 1s 481441070e-09 0s 0s 481443950e-09 1s 1s 481450710e-09 1s 1s 481451310e-09 0s 0s 481454190e-09 1s 1s 481460990e-09 1s 1s 481461550e-09 0s 0s 481464430e-09 1s 1s 481471270e-09 1s 1s 481471790e-09 0s 0s 481474670e-09 1s 1s 481481550e-09 1s 1s 481482030e-09 0s 0s 481484910e-09 1s 1s 481491830e-09 1s 1s 481492270e-09 0s 0s 481495150e-09 1s 1s 481502110e-09 1s 1s 481502510e-09 0s 0s 481505390e-09 1s 1s 481512390e-09 1s 1s 481512750e-09 0s 0s 481515630e-09 1s 1s 481522670e-09 1s 1s 481522990e-09 0s 0s 481525870e-09 1s 1s 481532950e-09 1s 1s 481533230e-09 0s 0s 481536110e-09 1s 1s 481543230e-09 1s 1s 481543470e-09 0s 0s 481546350e-09 1s 1s 481553510e-09 1s 1s 481553710e-09 0s 0s 481556590e-09 1s 1s 481563790e-09 1s 1s 481563950e-09 0s 0s 481566830e-09 1s 1s 481574070e-09 1s 1s 481574190e-09 0s 0s 481577070e-09 1s 1s 481584350e-09 1s 1s 481584430e-09 0s 0s 481587310e-09 1s 1s 481594630e-09 1s 1s 481594670e-09 0s 0s 481597550e-09 1s 1s 481604910e-09 0s 0s 481607790e-09 1s 1s 481615150e-09 0s 0s 481615190e-09 0s 0s 481618030e-09 1s 1s 481625390e-09 0s 0s 481625470e-09 0s 0s 481628270e-09 1s 1s 481635630e-09 0s 0s 481635750e-09 0s 0s 481638510e-09 1s 1s 481645870e-09 0s 0s 481646030e-09 0s 0s 481648750e-09 1s 1s 481656110e-09 0s 0s 481656310e-09 0s 0s 481658990e-09 1s 1s 481666350e-09 0s 0s 481666590e-09 0s 0s 481669230e-09 1s 1s 481676590e-09 0s 0s 481676870e-09 0s 0s 481679470e-09 1s 1s 481686830e-09 0s 0s 481687150e-09 0s 0s 481689710e-09 1s 1s 481697070e-09 0s 0s 481697430e-09 0s 0s 481699950e-09 1s 1s 481707310e-09 0s 0s 481707710e-09 0s 0s 481710190e-09 1s 1s 481717550e-09 0s 0s 481717990e-09 0s 0s 481720430e-09 1s 1s 481727790e-09 0s 0s 481728270e-09 0s 0s 481730670e-09 1s 1s 481738030e-09 0s 0s 481738550e-09 0s 0s 481740910e-09 1s 1s 481748270e-09 0s 0s 481748830e-09 0s 0s 481751150e-09 1s 1s 481758510e-09 0s 0s 481759110e-09 0s 0s 481761390e-09 1s 1s 481768750e-09 0s 0s 481769390e-09 0s 0s 481771630e-09 1s 1s 481778990e-09 0s 0s 481779670e-09 0s 0s 481781870e-09 1s 1s 481789230e-09 0s 0s 481789950e-09 0s 0s 481792110e-09 1s 1s 481799470e-09 0s 0s 481800230e-09 0s 0s 481802350e-09 1s 1s 481809710e-09 0s 0s 481810510e-09 0s 0s 481812590e-09 1s 1s 481819950e-09 0s 0s 481820790e-09 0s 0s 481822830e-09 1s 1s 481830190e-09 0s 0s 481831070e-09 0s 0s 481833070e-09 1s 1s 481840430e-09 0s 0s 481841350e-09 0s 0s 481843310e-09 1s 1s 481850670e-09 0s 0s 481851630e-09 0s 0s 481853550e-09 1s 1s 481860910e-09 0s 0s 481861910e-09 0s 0s 481863790e-09 1s 1s 481871150e-09 0s 0s 481872190e-09 0s 0s 481874030e-09 1s 1s 481881390e-09 0s 0s 481882470e-09 0s 0s 481884270e-09 1s 1s 481891630e-09 0s 0s 481892750e-09 0s 0s 481894510e-09 1s 1s 481901870e-09 0s 0s 481903030e-09 0s 0s 481904750e-09 1s 1s 481912110e-09 0s 0s 481913310e-09 0s 0s 481914990e-09 1s 1s 481922350e-09 0s 0s 481923590e-09 0s 0s 481925230e-09 1s 1s 481932590e-09 0s 0s 481933870e-09 0s 0s 481935470e-09 1s 1s 481942830e-09 0s 0s 481944150e-09 0s 0s 481945710e-09 1s 1s 481953070e-09 0s 0s 481954430e-09 0s 0s 481955950e-09 1s 1s 481963310e-09 0s 0s 481964710e-09 0s 0s 481966190e-09 1s 1s 481973550e-09 0s 0s 481974990e-09 0s 0s 481976430e-09 1s 1s 481983790e-09 0s 0s 481985270e-09 0s 0s 481986670e-09 1s 1s 481994030e-09 0s 0s 481995550e-09 0s 0s 481996910e-09 1s 1s 482004270e-09 0s 0s 482005830e-09 0s 0s 482007150e-09 1s 1s 482014510e-09 0s 0s 482016110e-09 0s 0s 482017390e-09 1s 1s 482024750e-09 0s 0s 482026390e-09 0s 0s 482027630e-09 1s 1s 482034990e-09 0s 0s 482036670e-09 0s 0s 482037870e-09 1s 1s 482045230e-09 0s 0s 482046950e-09 0s 0s 482048110e-09 1s 1s 482055470e-09 0s 0s 482057230e-09 0s 0s 482058350e-09 1s 1s 482065710e-09 0s 0s 482067510e-09 0s 0s 482068590e-09 1s 1s 482075950e-09 0s 0s 482077790e-09 0s 0s 482078830e-09 1s 1s 482086190e-09 0s 0s 482088070e-09 0s 0s 482089070e-09 1s 1s 482096430e-09 0s 0s 482098350e-09 0s 0s 482099310e-09 1s 1s 482106670e-09 0s 0s 482108630e-09 0s 0s 482109550e-09 1s 1s 482116910e-09 0s 0s 482118910e-09 0s 0s 482119790e-09 1s 1s 482127150e-09 0s 0s 482129190e-09 0s 0s 482130030e-09 1s 1s 482137390e-09 0s 0s 482139470e-09 0s 0s 482140270e-09 1s 1s 482147630e-09 0s 0s 482149750e-09 0s 0s 482150510e-09 1s 1s 482157870e-09 0s 0s 482160030e-09 0s 0s 482160750e-09 1s 1s 482168110e-09 0s 0s 482170310e-09 0s 0s 482170990e-09 1s 1s 482178350e-09 0s 0s 482180590e-09 0s 0s 482181230e-09 1s 1s 482188590e-09 0s 0s 482190870e-09 0s 0s 482191470e-09 1s 1s 482198830e-09 0s 0s 482201150e-09 0s 0s 482201710e-09 1s 1s 482209070e-09 0s 0s 482211430e-09 0s 0s 482211950e-09 1s 1s 482219310e-09 0s 0s 482221710e-09 0s 0s 482222190e-09 1s 1s 482229550e-09 0s 0s 482231990e-09 0s 0s 482232430e-09 1s 1s 482239790e-09 0s 0s 482242270e-09 0s 0s 482242670e-09 1s 1s 482250030e-09 0s 0s 482252550e-09 0s 0s 482252910e-09 1s 1s 482260270e-09 0s 0s 482262830e-09 0s 0s 482263150e-09 1s 1s 482270510e-09 0s 0s 482273110e-09 0s 0s 482273390e-09 1s 1s 482280750e-09 0s 0s 482283390e-09 0s 0s 482283630e-09 1s 1s 482290990e-09 0s 0s 482293670e-09 0s 0s 482293870e-09 1s 1s 482301230e-09 0s 0s 482303950e-09 0s 0s 482304110e-09 1s 1s 482311470e-09 0s 0s 482314230e-09 0s 0s 482314350e-09 1s 1s 482321710e-09 0s 0s 482324510e-09 0s 0s 482324590e-09 1s 1s 482331950e-09 0s 0s 482334790e-09 0s 0s 482334830e-09 1s 1s 482342190e-09 0s 0s 482345070e-09 1s 1s 482345110e-09 1s 1s 482352470e-09 0s 0s 482355310e-09 1s 1s 482355390e-09 1s 1s 482362710e-09 0s 0s 482365550e-09 1s 1s 482365670e-09 1s 1s 482372950e-09 0s 0s 482375790e-09 1s 1s 482375950e-09 1s 1s 482383190e-09 0s 0s 482386030e-09 1s 1s 482386230e-09 1s 1s 482393430e-09 0s 0s 482396270e-09 1s 1s 482396510e-09 1s 1s 482403670e-09 0s 0s 482406510e-09 1s 1s 482406790e-09 1s 1s 482413910e-09 0s 0s 482416750e-09 1s 1s 482417070e-09 1s 1s 482424150e-09 0s 0s 482426990e-09 1s 1s 482427350e-09 1s 1s 482434390e-09 0s 0s 482437230e-09 1s 1s 482437630e-09 1s 1s 482444630e-09 0s 0s 482447470e-09 1s 1s 482447910e-09 1s 1s 482454870e-09 0s 0s 482457710e-09 1s 1s 482458190e-09 1s 1s 482465110e-09 0s 0s 482467950e-09 1s 1s 482468470e-09 1s 1s 482475350e-09 0s 0s 482478190e-09 1s 1s 482478750e-09 1s 1s 482485590e-09 0s 0s 482488430e-09 1s 1s 482489030e-09 1s 1s 482495830e-09 0s 0s 482498670e-09 1s 1s 482499310e-09 1s 1s 482506070e-09 0s 0s 482508910e-09 1s 1s 482509590e-09 1s 1s 482516310e-09 0s 0s 482519150e-09 1s 1s 482519870e-09 1s 1s 482526550e-09 0s 0s 482529390e-09 1s 1s 482530150e-09 1s 1s 482536790e-09 0s 0s 482539630e-09 1s 1s 482540430e-09 1s 1s 482547030e-09 0s 0s 482549870e-09 1s 1s 482550710e-09 1s 1s 482557270e-09 0s 0s 482560110e-09 1s 1s 482560990e-09 1s 1s 482567510e-09 0s 0s 482570350e-09 1s 1s 482571270e-09 1s 1s 482577750e-09 0s 0s 482580590e-09 1s 1s 482581550e-09 1s 1s 482587990e-09 0s 0s 482590830e-09 1s 1s 482591830e-09 1s 1s 482598230e-09 0s 0s 482601070e-09 1s 1s 482602110e-09 1s 1s 482608470e-09 0s 0s 482611310e-09 1s 1s 482612390e-09 1s 1s 482618710e-09 0s 0s 482621550e-09 1s 1s 482622670e-09 1s 1s 482628950e-09 0s 0s 482631790e-09 1s 1s 482632950e-09 1s 1s 482639190e-09 0s 0s 482642030e-09 1s 1s 482643230e-09 1s 1s 482649430e-09 0s 0s 482652270e-09 1s 1s 482653510e-09 1s 1s 482659670e-09 0s 0s 482662510e-09 1s 1s 482663790e-09 1s 1s 482669910e-09 0s 0s 482672750e-09 1s 1s 482674070e-09 1s 1s 482680150e-09 0s 0s 482682990e-09 1s 1s 482684350e-09 1s 1s 482690390e-09 0s 0s 482693230e-09 1s 1s 482694630e-09 1s 1s 482700630e-09 0s 0s 482703470e-09 1s 1s 482704910e-09 1s 1s 482710870e-09 0s 0s 482713710e-09 1s 1s 482715190e-09 1s 1s 482721110e-09 0s 0s 482723950e-09 1s 1s 482725470e-09 1s 1s 482731350e-09 0s 0s 482734190e-09 1s 1s 482735750e-09 1s 1s 482741590e-09 0s 0s 482744430e-09 1s 1s 482746030e-09 1s 1s 482751830e-09 0s 0s 482754670e-09 1s 1s 482756310e-09 1s 1s 482762070e-09 0s 0s 482764910e-09 1s 1s 482766590e-09 1s 1s 482772310e-09 0s 0s 482775150e-09 1s 1s 482776870e-09 1s 1s 482782550e-09 0s 0s 482785390e-09 1s 1s 482787150e-09 1s 1s 482792790e-09 0s 0s 482795630e-09 1s 1s 482797430e-09 1s 1s 482803030e-09 0s 0s 482805870e-09 1s 1s 482807710e-09 1s 1s 482813270e-09 0s 0s 482816110e-09 1s 1s 482817990e-09 1s 1s 482823510e-09 0s 0s 482826350e-09 1s 1s 482828270e-09 1s 1s 482833750e-09 0s 0s 482836590e-09 1s 1s 482838550e-09 1s 1s 482843990e-09 0s 0s 482846830e-09 1s 1s 482848830e-09 1s 1s 482854230e-09 0s 0s 482857070e-09 1s 1s 482859110e-09 1s 1s 482864470e-09 0s 0s 482867310e-09 1s 1s 482869390e-09 1s 1s 482874710e-09 0s 0s 482877550e-09 1s 1s 482879670e-09 1s 1s 482884950e-09 0s 0s 482887790e-09 1s 1s 482889950e-09 1s 1s 482895190e-09 0s 0s 482898030e-09 1s 1s 482900230e-09 1s 1s 482905430e-09 0s 0s 482908270e-09 1s 1s 482910510e-09 1s 1s 482915670e-09 0s 0s 482918510e-09 1s 1s 482920790e-09 1s 1s 482925910e-09 0s 0s 482928750e-09 1s 1s 482931070e-09 1s 1s 482936150e-09 0s 0s 482938990e-09 1s 1s 482941350e-09 1s 1s 482946390e-09 0s 0s 482949230e-09 1s 1s 482951630e-09 1s 1s 482956630e-09 0s 0s 482959470e-09 1s 1s 482961910e-09 1s 1s 482966870e-09 0s 0s 482969710e-09 1s 1s 482972190e-09 1s 1s 482977110e-09 0s 0s 482979950e-09 1s 1s 482982470e-09 1s 1s 482987350e-09 0s 0s 482990190e-09 1s 1s 482992750e-09 1s 1s 482997590e-09 0s 0s 483000430e-09 1s 1s 483003030e-09 1s 1s 483007830e-09 0s 0s 483010670e-09 1s 1s 483013310e-09 1s 1s 483018070e-09 0s 0s 483020910e-09 1s 1s 483023590e-09 1s 1s 483028310e-09 0s 0s 483031150e-09 1s 1s 483033870e-09 1s 1s 483038550e-09 0s 0s 483041390e-09 1s 1s 483044150e-09 1s 1s 483048790e-09 0s 0s 483051630e-09 1s 1s 483054430e-09 1s 1s 483059030e-09 0s 0s 483061870e-09 1s 1s 483064710e-09 1s 1s 483069270e-09 0s 0s 483072110e-09 1s 1s 483074990e-09 1s 1s 483079510e-09 0s 0s 483082350e-09 1s 1s 483085270e-09 1s 1s 483089750e-09 0s 0s 483092590e-09 1s 1s 483095550e-09 1s 1s 483099990e-09 0s 0s 483102830e-09 1s 1s 483105830e-09 1s 1s 483110230e-09 0s 0s 483113070e-09 1s 1s 483116110e-09 1s 1s 483120470e-09 0s 0s 483123310e-09 1s 1s 483126390e-09 1s 1s 483130710e-09 0s 0s 483133550e-09 1s 1s 483136670e-09 1s 1s 483140950e-09 0s 0s 483143790e-09 1s 1s 483146950e-09 1s 1s 483151190e-09 0s 0s 483154030e-09 1s 1s 483157230e-09 1s 1s 483161430e-09 0s 0s 483164270e-09 1s 1s 483167510e-09 1s 1s 483171670e-09 0s 0s 483174510e-09 1s 1s 483177790e-09 1s 1s 483181910e-09 0s 0s 483184750e-09 1s 1s 483188070e-09 1s 1s 483192150e-09 0s 0s 483194990e-09 1s 1s 483198350e-09 1s 1s 483202390e-09 0s 0s 483205230e-09 1s 1s 483208630e-09 1s 1s 483212630e-09 0s 0s 483215470e-09 1s 1s 483218910e-09 1s 1s 483222870e-09 0s 0s 483225710e-09 1s 1s 483229190e-09 1s 1s 483233110e-09 0s 0s 483235950e-09 1s 1s 483239470e-09 1s 1s 483243350e-09 0s 0s 483246190e-09 1s 1s 483249750e-09 1s 1s 483253590e-09 0s 0s 483256430e-09 1s 1s 483260030e-09 1s 1s 483263830e-09 0s 0s 483266670e-09 1s 1s 483270310e-09 1s 1s 483274070e-09 0s 0s 483276910e-09 1s 1s 483280590e-09 1s 1s 483284310e-09 0s 0s 483287150e-09 1s 1s 483290870e-09 1s 1s 483294550e-09 0s 0s 483297390e-09 1s 1s 483301150e-09 1s 1s 483304790e-09 0s 0s 483307630e-09 1s 1s 483311430e-09 1s 1s 483315030e-09 0s 0s 483317870e-09 1s 1s 483321710e-09 1s 1s 483325270e-09 0s 0s 483328110e-09 1s 1s 483331990e-09 1s 1s 483335510e-09 0s 0s 483338350e-09 1s 1s 483342270e-09 1s 1s 483345750e-09 0s 0s 483348590e-09 1s 1s 483352550e-09 1s 1s 483355990e-09 0s 0s 483358830e-09 1s 1s 483362830e-09 1s 1s 483366230e-09 0s 0s 483369070e-09 1s 1s 483373110e-09 1s 1s 483376470e-09 0s 0s 483379310e-09 1s 1s 483383390e-09 1s 1s 483386710e-09 0s 0s 483389550e-09 1s 1s 483393670e-09 1s 1s 483396950e-09 0s 0s 483399790e-09 1s 1s 483403950e-09 1s 1s 483407190e-09 0s 0s 483410030e-09 1s 1s 483414230e-09 1s 1s 483417430e-09 0s 0s 483420270e-09 1s 1s 483424510e-09 1s 1s 483427670e-09 0s 0s 483430510e-09 1s 1s 483434790e-09 1s 1s 483437910e-09 0s 0s 483440750e-09 1s 1s 483445070e-09 1s 1s 483448150e-09 0s 0s 483450990e-09 1s 1s 483455350e-09 1s 1s 483458390e-09 0s 0s 483461230e-09 1s 1s 483465630e-09 1s 1s 483468630e-09 0s 0s 483471470e-09 1s 1s 483475910e-09 1s 1s 483478870e-09 0s 0s 483481710e-09 1s 1s 483486190e-09 1s 1s 483489110e-09 0s 0s 483491950e-09 1s 1s 483496470e-09 1s 1s 483499350e-09 0s 0s 483502190e-09 1s 1s 483506750e-09 1s 1s 483509590e-09 0s 0s 483512430e-09 1s 1s 483517030e-09 1s 1s 483519830e-09 0s 0s 483522670e-09 1s 1s 483527310e-09 1s 1s 483530070e-09 0s 0s 483532910e-09 1s 1s 483537590e-09 1s 1s 483540310e-09 0s 0s 483543150e-09 1s 1s 483547870e-09 1s 1s 483550550e-09 0s 0s 483553390e-09 1s 1s 483558150e-09 1s 1s 483560790e-09 0s 0s 483563630e-09 1s 1s 483568430e-09 1s 1s 483571030e-09 0s 0s 483573870e-09 1s 1s 483578710e-09 1s 1s 483581270e-09 0s 0s 483584110e-09 1s 1s 483588990e-09 1s 1s 483591510e-09 0s 0s 483594350e-09 1s 1s 483599270e-09 1s 1s 483601750e-09 0s 0s 483604590e-09 1s 1s 483609550e-09 1s 1s 483611990e-09 0s 0s 483614830e-09 1s 1s 483619830e-09 1s 1s 483622230e-09 0s 0s 483625070e-09 1s 1s 483630110e-09 1s 1s 483632470e-09 0s 0s 483635310e-09 1s 1s 483640390e-09 1s 1s 483642710e-09 0s 0s 483645550e-09 1s 1s 483650670e-09 1s 1s 483652950e-09 0s 0s 483655790e-09 1s 1s 483660950e-09 1s 1s 483663190e-09 0s 0s 483666030e-09 1s 1s 483671230e-09 1s 1s 483673430e-09 0s 0s 483676270e-09 1s 1s 483681510e-09 1s 1s 483683670e-09 0s 0s 483686510e-09 1s 1s 483691790e-09 1s 1s 483693910e-09 0s 0s 483696750e-09 1s 1s 483702070e-09 1s 1s 483704150e-09 0s 0s 483706990e-09 1s 1s 483712350e-09 1s 1s 483714390e-09 0s 0s 483717230e-09 1s 1s 483722630e-09 1s 1s 483724630e-09 0s 0s 483727470e-09 1s 1s 483732910e-09 1s 1s 483734870e-09 0s 0s 483737710e-09 1s 1s 483743190e-09 1s 1s 483745110e-09 0s 0s 483747950e-09 1s 1s 483753470e-09 1s 1s 483755350e-09 0s 0s 483758190e-09 1s 1s 483763750e-09 1s 1s 483765590e-09 0s 0s 483768430e-09 1s 1s 483774030e-09 1s 1s 483775830e-09 0s 0s 483778670e-09 1s 1s 483784310e-09 1s 1s 483786070e-09 0s 0s 483788910e-09 1s 1s 483794590e-09 1s 1s 483796310e-09 0s 0s 483799150e-09 1s 1s 483804870e-09 1s 1s 483806550e-09 0s 0s 483809390e-09 1s 1s 483815150e-09 1s 1s 483816790e-09 0s 0s 483819630e-09 1s 1s 483825430e-09 1s 1s 483827030e-09 0s 0s 483829870e-09 1s 1s 483835710e-09 1s 1s 483837270e-09 0s 0s 483840110e-09 1s 1s 483845990e-09 1s 1s 483847510e-09 0s 0s 483850350e-09 1s 1s 483856270e-09 1s 1s 483857750e-09 0s 0s 483860590e-09 1s 1s 483866550e-09 1s 1s 483867990e-09 0s 0s 483870830e-09 1s 1s 483876830e-09 1s 1s 483878230e-09 0s 0s 483881070e-09 1s 1s 483887110e-09 1s 1s 483888470e-09 0s 0s 483891310e-09 1s 1s 483897390e-09 1s 1s 483898710e-09 0s 0s 483901550e-09 1s 1s 483907670e-09 1s 1s 483908950e-09 0s 0s 483911790e-09 1s 1s 483917950e-09 1s 1s 483919190e-09 0s 0s 483922030e-09 1s 1s 483928230e-09 1s 1s 483929430e-09 0s 0s 483932270e-09 1s 1s 483938510e-09 1s 1s 483939670e-09 0s 0s 483942510e-09 1s 1s 483948790e-09 1s 1s 483949910e-09 0s 0s 483952750e-09 1s 1s 483959070e-09 1s 1s 483960150e-09 0s 0s 483962990e-09 1s 1s 483969350e-09 1s 1s 483970390e-09 0s 0s 483973230e-09 1s 1s 483979630e-09 1s 1s 483980630e-09 0s 0s 483983470e-09 1s 1s 483989910e-09 1s 1s 483990870e-09 0s 0s 483993710e-09 1s 1s 484000190e-09 1s 1s 484001110e-09 0s 0s 484003950e-09 1s 1s 484010470e-09 1s 1s 484011350e-09 0s 0s 484014190e-09 1s 1s 484020750e-09 1s 1s 484021590e-09 0s 0s 484024430e-09 1s 1s 484031030e-09 1s 1s 484031830e-09 0s 0s 484034670e-09 1s 1s 484041310e-09 1s 1s 484042070e-09 0s 0s 484044910e-09 1s 1s 484051590e-09 1s 1s 484052310e-09 0s 0s 484055150e-09 1s 1s 484061870e-09 1s 1s 484062550e-09 0s 0s 484065390e-09 1s 1s 484072150e-09 1s 1s 484072790e-09 0s 0s 484075630e-09 1s 1s 484082430e-09 1s 1s 484083030e-09 0s 0s 484085870e-09 1s 1s 484092710e-09 1s 1s 484093270e-09 0s 0s 484096110e-09 1s 1s 484102990e-09 1s 1s 484103510e-09 0s 0s 484106350e-09 1s 1s 484113270e-09 1s 1s 484113750e-09 0s 0s 484116590e-09 1s 1s 484123550e-09 1s 1s 484123990e-09 0s 0s 484126830e-09 1s 1s 484133830e-09 1s 1s 484134230e-09 0s 0s 484137070e-09 1s 1s 484144110e-09 1s 1s 484144470e-09 0s 0s 484147310e-09 1s 1s 484154390e-09 1s 1s 484154710e-09 0s 0s 484157550e-09 1s 1s 484164670e-09 1s 1s 484164950e-09 0s 0s 484167790e-09 1s 1s 484174950e-09 1s 1s 484175190e-09 0s 0s 484178030e-09 1s 1s 484185230e-09 1s 1s 484185430e-09 0s 0s 484188270e-09 1s 1s 484195510e-09 1s 1s 484195670e-09 0s 0s 484198510e-09 1s 1s 484205790e-09 1s 1s 484205910e-09 0s 0s 484208750e-09 1s 1s 484216070e-09 1s 1s 484216150e-09 0s 0s 484218990e-09 1s 1s 484226350e-09 1s 1s 484226390e-09 0s 0s 484229230e-09 1s 1s 484236630e-09 0s 0s 484239470e-09 1s 1s 484246870e-09 0s 0s 484246910e-09 0s 0s 484249710e-09 1s 1s 484257110e-09 0s 0s 484257190e-09 0s 0s 484259950e-09 1s 1s 484267350e-09 0s 0s 484267470e-09 0s 0s 484270190e-09 1s 1s 484277590e-09 0s 0s 484277750e-09 0s 0s 484280430e-09 1s 1s 484287830e-09 0s 0s 484288030e-09 0s 0s 484290670e-09 1s 1s 484298070e-09 0s 0s 484298310e-09 0s 0s 484300910e-09 1s 1s 484308310e-09 0s 0s 484308590e-09 0s 0s 484311150e-09 1s 1s 484318550e-09 0s 0s 484318870e-09 0s 0s 484321390e-09 1s 1s 484328790e-09 0s 0s 484329150e-09 0s 0s 484331630e-09 1s 1s 484339030e-09 0s 0s 484339430e-09 0s 0s 484341870e-09 1s 1s 484349270e-09 0s 0s 484349710e-09 0s 0s 484352110e-09 1s 1s 484359510e-09 0s 0s 484359990e-09 0s 0s 484362350e-09 1s 1s 484369750e-09 0s 0s 484370270e-09 0s 0s 484372590e-09 1s 1s 484379990e-09 0s 0s 484380550e-09 0s 0s 484382830e-09 1s 1s 484390230e-09 0s 0s 484390830e-09 0s 0s 484393070e-09 1s 1s 484400470e-09 0s 0s 484401110e-09 0s 0s 484403310e-09 1s 1s 484410710e-09 0s 0s 484411390e-09 0s 0s 484413550e-09 1s 1s 484420950e-09 0s 0s 484421670e-09 0s 0s 484423790e-09 1s 1s 484431190e-09 0s 0s 484431950e-09 0s 0s 484434030e-09 1s 1s 484441430e-09 0s 0s 484442230e-09 0s 0s 484444270e-09 1s 1s 484451670e-09 0s 0s 484452510e-09 0s 0s 484454510e-09 1s 1s 484461910e-09 0s 0s 484462790e-09 0s 0s 484464750e-09 1s 1s 484472150e-09 0s 0s 484473070e-09 0s 0s 484474990e-09 1s 1s 484482390e-09 0s 0s 484483350e-09 0s 0s 484485230e-09 1s 1s 484492630e-09 0s 0s 484493630e-09 0s 0s 484495470e-09 1s 1s 484502870e-09 0s 0s 484503910e-09 0s 0s 484505710e-09 1s 1s 484513110e-09 0s 0s 484514190e-09 0s 0s 484515950e-09 1s 1s 484523350e-09 0s 0s 484524470e-09 0s 0s 484526190e-09 1s 1s 484533590e-09 0s 0s 484534750e-09 0s 0s 484536430e-09 1s 1s 484543830e-09 0s 0s 484545030e-09 0s 0s 484546670e-09 1s 1s 484554070e-09 0s 0s 484555310e-09 0s 0s 484556910e-09 1s 1s 484564310e-09 0s 0s 484565590e-09 0s 0s 484567150e-09 1s 1s 484574550e-09 0s 0s 484575870e-09 0s 0s 484577390e-09 1s 1s 484584790e-09 0s 0s 484586150e-09 0s 0s 484587630e-09 1s 1s 484595030e-09 0s 0s 484596430e-09 0s 0s 484597870e-09 1s 1s 484605270e-09 0s 0s 484606710e-09 0s 0s 484608110e-09 1s 1s 484615510e-09 0s 0s 484616990e-09 0s 0s 484618350e-09 1s 1s 484625750e-09 0s 0s 484627270e-09 0s 0s 484628590e-09 1s 1s 484635990e-09 0s 0s 484637550e-09 0s 0s 484638830e-09 1s 1s 484646230e-09 0s 0s 484647830e-09 0s 0s 484649070e-09 1s 1s 484656470e-09 0s 0s 484658110e-09 0s 0s 484659310e-09 1s 1s 484666710e-09 0s 0s 484668390e-09 0s 0s 484669550e-09 1s 1s 484676950e-09 0s 0s 484678670e-09 0s 0s 484679790e-09 1s 1s 484687190e-09 0s 0s 484688950e-09 0s 0s 484690030e-09 1s 1s 484697430e-09 0s 0s 484699230e-09 0s 0s 484700270e-09 1s 1s 484707670e-09 0s 0s 484709510e-09 0s 0s 484710510e-09 1s 1s 484717910e-09 0s 0s 484719790e-09 0s 0s 484720750e-09 1s 1s 484728150e-09 0s 0s 484730070e-09 0s 0s 484730990e-09 1s 1s 484738390e-09 0s 0s 484740350e-09 0s 0s 484741230e-09 1s 1s 484748630e-09 0s 0s 484750630e-09 0s 0s 484751470e-09 1s 1s 484758870e-09 0s 0s 484760910e-09 0s 0s 484761710e-09 1s 1s 484769110e-09 0s 0s 484771190e-09 0s 0s 484771950e-09 1s 1s 484779350e-09 0s 0s 484781470e-09 0s 0s 484782190e-09 1s 1s 484789590e-09 0s 0s 484791750e-09 0s 0s 484792430e-09 1s 1s 484799830e-09 0s 0s 484802030e-09 0s 0s 484802670e-09 1s 1s 484810070e-09 0s 0s 484812310e-09 0s 0s 484812910e-09 1s 1s 484820310e-09 0s 0s 484822590e-09 0s 0s 484823150e-09 1s 1s 484830550e-09 0s 0s 484832870e-09 0s 0s 484833390e-09 1s 1s 484840790e-09 0s 0s 484843150e-09 0s 0s 484843630e-09 1s 1s 484851030e-09 0s 0s 484853430e-09 0s 0s 484853870e-09 1s 1s 484861270e-09 0s 0s 484863710e-09 0s 0s 484864110e-09 1s 1s 484871510e-09 0s 0s 484873990e-09 0s 0s 484874350e-09 1s 1s 484881750e-09 0s 0s 484884270e-09 0s 0s 484884590e-09 1s 1s 484891990e-09 0s 0s 484894550e-09 0s 0s 484894830e-09 1s 1s 484902230e-09 0s 0s 484904830e-09 0s 0s 484905070e-09 1s 1s 484912470e-09 0s 0s 484915110e-09 0s 0s 484915310e-09 1s 1s 484922710e-09 0s 0s 484925390e-09 0s 0s 484925550e-09 1s 1s 484932950e-09 0s 0s 484935670e-09 0s 0s 484935790e-09 1s 1s 484943190e-09 0s 0s 484945950e-09 0s 0s 484946030e-09 1s 1s 484953430e-09 0s 0s 484956230e-09 0s 0s 484956270e-09 1s 1s 484963670e-09 0s 0s 484966510e-09 1s 1s 484966550e-09 1s 1s 484973950e-09 0s 0s 484976750e-09 1s 1s 484976830e-09 1s 1s 484984190e-09 0s 0s 484986990e-09 1s 1s 484987110e-09 1s 1s 484994430e-09 0s 0s 484997230e-09 1s 1s 484997390e-09 1s 1s 485004670e-09 0s 0s 485007470e-09 1s 1s 485007670e-09 1s 1s 485014910e-09 0s 0s 485017710e-09 1s 1s 485017950e-09 1s 1s 485025150e-09 0s 0s 485027950e-09 1s 1s 485028230e-09 1s 1s 485035390e-09 0s 0s 485038190e-09 1s 1s 485038510e-09 1s 1s 485045630e-09 0s 0s 485048430e-09 1s 1s 485048790e-09 1s 1s 485055870e-09 0s 0s 485058670e-09 1s 1s 485059070e-09 1s 1s 485066110e-09 0s 0s 485068910e-09 1s 1s 485069350e-09 1s 1s 485076350e-09 0s 0s 485079150e-09 1s 1s 485079630e-09 1s 1s 485086590e-09 0s 0s 485089390e-09 1s 1s 485089910e-09 1s 1s 485096830e-09 0s 0s 485099630e-09 1s 1s 485100190e-09 1s 1s 485107070e-09 0s 0s 485109870e-09 1s 1s 485110470e-09 1s 1s 485117310e-09 0s 0s 485120110e-09 1s 1s 485120750e-09 1s 1s 485127550e-09 0s 0s 485130350e-09 1s 1s 485131030e-09 1s 1s 485137790e-09 0s 0s 485140590e-09 1s 1s 485141310e-09 1s 1s 485148030e-09 0s 0s 485150830e-09 1s 1s 485151590e-09 1s 1s 485158270e-09 0s 0s 485161070e-09 1s 1s 485161870e-09 1s 1s 485168510e-09 0s 0s 485171310e-09 1s 1s 485172150e-09 1s 1s 485178750e-09 0s 0s 485181550e-09 1s 1s 485182430e-09 1s 1s 485188990e-09 0s 0s 485191790e-09 1s 1s 485192710e-09 1s 1s 485199230e-09 0s 0s 485202030e-09 1s 1s 485202990e-09 1s 1s 485209470e-09 0s 0s 485212270e-09 1s 1s 485213270e-09 1s 1s 485219710e-09 0s 0s 485222510e-09 1s 1s 485223550e-09 1s 1s 485229950e-09 0s 0s 485232750e-09 1s 1s 485233830e-09 1s 1s 485240190e-09 0s 0s 485242990e-09 1s 1s 485244110e-09 1s 1s 485250430e-09 0s 0s 485253230e-09 1s 1s 485254390e-09 1s 1s 485260670e-09 0s 0s 485263470e-09 1s 1s 485264670e-09 1s 1s 485270910e-09 0s 0s 485273710e-09 1s 1s 485274950e-09 1s 1s 485281150e-09 0s 0s 485283950e-09 1s 1s 485285230e-09 1s 1s 485291390e-09 0s 0s 485294190e-09 1s 1s 485295510e-09 1s 1s 485301630e-09 0s 0s 485304430e-09 1s 1s 485305790e-09 1s 1s 485311870e-09 0s 0s 485314670e-09 1s 1s 485316070e-09 1s 1s 485322110e-09 0s 0s 485324910e-09 1s 1s 485326350e-09 1s 1s 485332350e-09 0s 0s 485335150e-09 1s 1s 485336630e-09 1s 1s 485342590e-09 0s 0s 485345390e-09 1s 1s 485346910e-09 1s 1s 485352830e-09 0s 0s 485355630e-09 1s 1s 485357190e-09 1s 1s 485363070e-09 0s 0s 485365870e-09 1s 1s 485367470e-09 1s 1s 485373310e-09 0s 0s 485376110e-09 1s 1s 485377750e-09 1s 1s 485383550e-09 0s 0s 485386350e-09 1s 1s 485388030e-09 1s 1s 485393790e-09 0s 0s 485396590e-09 1s 1s 485398310e-09 1s 1s 485404030e-09 0s 0s 485406830e-09 1s 1s 485408590e-09 1s 1s 485414270e-09 0s 0s 485417070e-09 1s 1s 485418870e-09 1s 1s 485424510e-09 0s 0s 485427310e-09 1s 1s 485429150e-09 1s 1s 485434750e-09 0s 0s 485437550e-09 1s 1s 485439430e-09 1s 1s 485444990e-09 0s 0s 485447790e-09 1s 1s 485449710e-09 1s 1s 485455230e-09 0s 0s 485458030e-09 1s 1s 485459990e-09 1s 1s 485465470e-09 0s 0s 485468270e-09 1s 1s 485470270e-09 1s 1s 485475710e-09 0s 0s 485478510e-09 1s 1s 485480550e-09 1s 1s 485485950e-09 0s 0s 485488750e-09 1s 1s 485490830e-09 1s 1s 485496190e-09 0s 0s 485498990e-09 1s 1s 485501110e-09 1s 1s 485506430e-09 0s 0s 485509230e-09 1s 1s 485511390e-09 1s 1s 485516670e-09 0s 0s 485519470e-09 1s 1s 485521670e-09 1s 1s 485526910e-09 0s 0s 485529710e-09 1s 1s 485531950e-09 1s 1s 485537150e-09 0s 0s 485539950e-09 1s 1s 485542230e-09 1s 1s 485547390e-09 0s 0s 485550190e-09 1s 1s 485552510e-09 1s 1s 485557630e-09 0s 0s 485560430e-09 1s 1s 485562790e-09 1s 1s 485567870e-09 0s 0s 485570670e-09 1s 1s 485573070e-09 1s 1s 485578110e-09 0s 0s 485580910e-09 1s 1s 485583350e-09 1s 1s 485588350e-09 0s 0s 485591150e-09 1s 1s 485593630e-09 1s 1s 485598590e-09 0s 0s 485601390e-09 1s 1s 485603910e-09 1s 1s 485608830e-09 0s 0s 485611630e-09 1s 1s 485614190e-09 1s 1s 485619070e-09 0s 0s 485621870e-09 1s 1s 485624470e-09 1s 1s 485629310e-09 0s 0s 485632110e-09 1s 1s 485634750e-09 1s 1s 485639550e-09 0s 0s 485642350e-09 1s 1s 485645030e-09 1s 1s 485649790e-09 0s 0s 485652590e-09 1s 1s 485655310e-09 1s 1s 485660030e-09 0s 0s 485662830e-09 1s 1s 485665590e-09 1s 1s 485670270e-09 0s 0s 485673070e-09 1s 1s 485675870e-09 1s 1s 485680510e-09 0s 0s 485683310e-09 1s 1s 485686150e-09 1s 1s 485690750e-09 0s 0s 485693550e-09 1s 1s 485696430e-09 1s 1s 485700990e-09 0s 0s 485703790e-09 1s 1s 485706710e-09 1s 1s 485711230e-09 0s 0s 485714030e-09 1s 1s 485716990e-09 1s 1s 485721470e-09 0s 0s 485724270e-09 1s 1s 485727270e-09 1s 1s 485731710e-09 0s 0s 485734510e-09 1s 1s 485737550e-09 1s 1s 485741950e-09 0s 0s 485744750e-09 1s 1s 485747830e-09 1s 1s 485752190e-09 0s 0s 485754990e-09 1s 1s 485758110e-09 1s 1s 485762430e-09 0s 0s 485765230e-09 1s 1s 485768390e-09 1s 1s 485772670e-09 0s 0s 485775470e-09 1s 1s 485778670e-09 1s 1s 485782910e-09 0s 0s 485785710e-09 1s 1s 485788950e-09 1s 1s 485793150e-09 0s 0s 485795950e-09 1s 1s 485799230e-09 1s 1s 485803390e-09 0s 0s 485806190e-09 1s 1s 485809510e-09 1s 1s 485813630e-09 0s 0s 485816430e-09 1s 1s 485819790e-09 1s 1s 485823870e-09 0s 0s 485826670e-09 1s 1s 485830070e-09 1s 1s 485834110e-09 0s 0s 485836910e-09 1s 1s 485840350e-09 1s 1s 485844350e-09 0s 0s 485847150e-09 1s 1s 485850630e-09 1s 1s 485854590e-09 0s 0s 485857390e-09 1s 1s 485860910e-09 1s 1s 485864830e-09 0s 0s 485867630e-09 1s 1s 485871190e-09 1s 1s 485875070e-09 0s 0s 485877870e-09 1s 1s 485881470e-09 1s 1s 485885310e-09 0s 0s 485888110e-09 1s 1s 485891750e-09 1s 1s 485895550e-09 0s 0s 485898350e-09 1s 1s 485902030e-09 1s 1s 485905790e-09 0s 0s 485908590e-09 1s 1s 485912310e-09 1s 1s 485916030e-09 0s 0s 485918830e-09 1s 1s 485922590e-09 1s 1s 485926270e-09 0s 0s 485929070e-09 1s 1s 485932870e-09 1s 1s 485936510e-09 0s 0s 485939310e-09 1s 1s 485943150e-09 1s 1s 485946750e-09 0s 0s 485949550e-09 1s 1s 485953430e-09 1s 1s 485956990e-09 0s 0s 485959790e-09 1s 1s 485963710e-09 1s 1s 485967230e-09 0s 0s 485970030e-09 1s 1s 485973990e-09 1s 1s 485977470e-09 0s 0s 485980270e-09 1s 1s 485984270e-09 1s 1s 485987710e-09 0s 0s 485990510e-09 1s 1s 485994550e-09 1s 1s 485997950e-09 0s 0s 486000750e-09 1s 1s 486004830e-09 1s 1s 486008190e-09 0s 0s 486010990e-09 1s 1s 486015110e-09 1s 1s 486018430e-09 0s 0s 486021230e-09 1s 1s 486025390e-09 1s 1s 486028670e-09 0s 0s 486031470e-09 1s 1s 486035670e-09 1s 1s 486038910e-09 0s 0s 486041710e-09 1s 1s 486045950e-09 1s 1s 486049150e-09 0s 0s 486051950e-09 1s 1s 486056230e-09 1s 1s 486059390e-09 0s 0s 486062190e-09 1s 1s 486066510e-09 1s 1s 486069630e-09 0s 0s 486072430e-09 1s 1s 486076790e-09 1s 1s 486079870e-09 0s 0s 486082670e-09 1s 1s 486087070e-09 1s 1s 486090110e-09 0s 0s 486092910e-09 1s 1s 486097350e-09 1s 1s 486100350e-09 0s 0s 486103150e-09 1s 1s 486107630e-09 1s 1s 486110590e-09 0s 0s 486113390e-09 1s 1s 486117910e-09 1s 1s 486120830e-09 0s 0s 486123630e-09 1s 1s 486128190e-09 1s 1s 486131070e-09 0s 0s 486133870e-09 1s 1s 486138470e-09 1s 1s 486141310e-09 0s 0s 486144110e-09 1s 1s 486148750e-09 1s 1s 486151550e-09 0s 0s 486154350e-09 1s 1s 486159030e-09 1s 1s 486161790e-09 0s 0s 486164590e-09 1s 1s 486169310e-09 1s 1s 486172030e-09 0s 0s 486174830e-09 1s 1s 486179590e-09 1s 1s 486182270e-09 0s 0s 486185070e-09 1s 1s 486189870e-09 1s 1s 486192510e-09 0s 0s 486195310e-09 1s 1s 486200150e-09 1s 1s 486202750e-09 0s 0s 486205550e-09 1s 1s 486210430e-09 1s 1s 486212990e-09 0s 0s 486215790e-09 1s 1s 486220710e-09 1s 1s 486223230e-09 0s 0s 486226030e-09 1s 1s 486230990e-09 1s 1s 486233470e-09 0s 0s 486236270e-09 1s 1s 486241270e-09 1s 1s 486243710e-09 0s 0s 486246510e-09 1s 1s 486251550e-09 1s 1s 486253950e-09 0s 0s 486256750e-09 1s 1s 486261830e-09 1s 1s 486264190e-09 0s 0s 486266990e-09 1s 1s 486272110e-09 1s 1s 486274430e-09 0s 0s 486277230e-09 1s 1s 486282390e-09 1s 1s 486284670e-09 0s 0s 486287470e-09 1s 1s 486292670e-09 1s 1s 486294910e-09 0s 0s 486297710e-09 1s 1s 486302950e-09 1s 1s 486305150e-09 0s 0s 486307950e-09 1s 1s 486313230e-09 1s 1s 486315390e-09 0s 0s 486318190e-09 1s 1s 486323510e-09 1s 1s 486325630e-09 0s 0s 486328430e-09 1s 1s 486333790e-09 1s 1s 486335870e-09 0s 0s 486338670e-09 1s 1s 486344070e-09 1s 1s 486346110e-09 0s 0s 486348910e-09 1s 1s 486354350e-09 1s 1s 486356350e-09 0s 0s 486359150e-09 1s 1s 486364630e-09 1s 1s 486366590e-09 0s 0s 486369390e-09 1s 1s 486374910e-09 1s 1s 486376830e-09 0s 0s 486379630e-09 1s 1s 486385190e-09 1s 1s 486387070e-09 0s 0s 486389870e-09 1s 1s 486395470e-09 1s 1s 486397310e-09 0s 0s 486400110e-09 1s 1s 486405750e-09 1s 1s 486407550e-09 0s 0s 486410350e-09 1s 1s 486416030e-09 1s 1s 486417790e-09 0s 0s 486420590e-09 1s 1s 486426310e-09 1s 1s 486428030e-09 0s 0s 486430830e-09 1s 1s 486436590e-09 1s 1s 486438270e-09 0s 0s 486441070e-09 1s 1s 486446870e-09 1s 1s 486448510e-09 0s 0s 486451310e-09 1s 1s 486457150e-09 1s 1s 486458750e-09 0s 0s 486461550e-09 1s 1s 486467430e-09 1s 1s 486468990e-09 0s 0s 486471790e-09 1s 1s 486477710e-09 1s 1s 486479230e-09 0s 0s 486482030e-09 1s 1s 486487990e-09 1s 1s 486489470e-09 0s 0s 486492270e-09 1s 1s 486498270e-09 1s 1s 486499710e-09 0s 0s 486502510e-09 1s 1s 486508550e-09 1s 1s 486509950e-09 0s 0s 486512750e-09 1s 1s 486518830e-09 1s 1s 486520190e-09 0s 0s 486522990e-09 1s 1s 486529110e-09 1s 1s 486530430e-09 0s 0s 486533230e-09 1s 1s 486539390e-09 1s 1s 486540670e-09 0s 0s 486543470e-09 1s 1s 486549670e-09 1s 1s 486550910e-09 0s 0s 486553710e-09 1s 1s 486559950e-09 1s 1s 486561150e-09 0s 0s 486563950e-09 1s 1s 486570230e-09 1s 1s 486571390e-09 0s 0s 486574190e-09 1s 1s 486580510e-09 1s 1s 486581630e-09 0s 0s 486584430e-09 1s 1s 486590790e-09 1s 1s 486591870e-09 0s 0s 486594670e-09 1s 1s 486601070e-09 1s 1s 486602110e-09 0s 0s 486604910e-09 1s 1s 486611350e-09 1s 1s 486612350e-09 0s 0s 486615150e-09 1s 1s 486621630e-09 1s 1s 486622590e-09 0s 0s 486625390e-09 1s 1s 486631910e-09 1s 1s 486632830e-09 0s 0s 486635630e-09 1s 1s 486642190e-09 1s 1s 486643070e-09 0s 0s 486645870e-09 1s 1s 486652470e-09 1s 1s 486653310e-09 0s 0s 486656110e-09 1s 1s 486662750e-09 1s 1s 486663550e-09 0s 0s 486666350e-09 1s 1s 486673030e-09 1s 1s 486673790e-09 0s 0s 486676590e-09 1s 1s 486683310e-09 1s 1s 486684030e-09 0s 0s 486686830e-09 1s 1s 486693590e-09 1s 1s 486694270e-09 0s 0s 486697070e-09 1s 1s 486703870e-09 1s 1s 486704510e-09 0s 0s 486707310e-09 1s 1s 486714150e-09 1s 1s 486714750e-09 0s 0s 486717550e-09 1s 1s 486724430e-09 1s 1s 486724990e-09 0s 0s 486727790e-09 1s 1s 486734710e-09 1s 1s 486735230e-09 0s 0s 486738030e-09 1s 1s 486744990e-09 1s 1s 486745470e-09 0s 0s 486748270e-09 1s 1s 486755270e-09 1s 1s 486755710e-09 0s 0s 486758510e-09 1s 1s 486765550e-09 1s 1s 486765950e-09 0s 0s 486768750e-09 1s 1s 486775830e-09 1s 1s 486776190e-09 0s 0s 486778990e-09 1s 1s 486786110e-09 1s 1s 486786430e-09 0s 0s 486789230e-09 1s 1s 486796390e-09 1s 1s 486796670e-09 0s 0s 486799470e-09 1s 1s 486806670e-09 1s 1s 486806910e-09 0s 0s 486809710e-09 1s 1s 486816950e-09 1s 1s 486817150e-09 0s 0s 486819950e-09 1s 1s 486827230e-09 1s 1s 486827390e-09 0s 0s 486830190e-09 1s 1s 486837510e-09 1s 1s 486837630e-09 0s 0s 486840430e-09 1s 1s 486847790e-09 1s 1s 486847870e-09 0s 0s 486850670e-09 1s 1s 486858070e-09 1s 1s 486858110e-09 0s 0s 486860910e-09 1s 1s 486868350e-09 0s 0s 486871150e-09 1s 1s 486878590e-09 0s 0s 486878630e-09 0s 0s 486881390e-09 1s 1s 486888830e-09 0s 0s 486888910e-09 0s 0s 486891630e-09 1s 1s 486899070e-09 0s 0s 486899190e-09 0s 0s 486901870e-09 1s 1s 486909310e-09 0s 0s 486909470e-09 0s 0s 486912110e-09 1s 1s 486919550e-09 0s 0s 486919750e-09 0s 0s 486922350e-09 1s 1s 486929790e-09 0s 0s 486930030e-09 0s 0s 486932590e-09 1s 1s 486940030e-09 0s 0s 486940310e-09 0s 0s 486942830e-09 1s 1s 486950270e-09 0s 0s 486950590e-09 0s 0s 486953070e-09 1s 1s 486960510e-09 0s 0s 486960870e-09 0s 0s 486963310e-09 1s 1s 486970750e-09 0s 0s 486971150e-09 0s 0s 486973550e-09 1s 1s 486980990e-09 0s 0s 486981430e-09 0s 0s 486983790e-09 1s 1s 486991230e-09 0s 0s 486991710e-09 0s 0s 486994030e-09 1s 1s 487001470e-09 0s 0s 487001990e-09 0s 0s 487004270e-09 1s 1s 487011710e-09 0s 0s 487012270e-09 0s 0s 487014510e-09 1s 1s 487021950e-09 0s 0s 487022550e-09 0s 0s 487024750e-09 1s 1s 487032190e-09 0s 0s 487032830e-09 0s 0s 487034990e-09 1s 1s 487042430e-09 0s 0s 487043110e-09 0s 0s 487045230e-09 1s 1s 487052670e-09 0s 0s 487053390e-09 0s 0s 487055470e-09 1s 1s 487062910e-09 0s 0s 487063670e-09 0s 0s 487065710e-09 1s 1s 487073150e-09 0s 0s 487073950e-09 0s 0s 487075950e-09 1s 1s 487083390e-09 0s 0s 487084230e-09 0s 0s 487086190e-09 1s 1s 487093630e-09 0s 0s 487094510e-09 0s 0s 487096430e-09 1s 1s 487103870e-09 0s 0s 487104790e-09 0s 0s 487106670e-09 1s 1s 487114110e-09 0s 0s 487115070e-09 0s 0s 487116910e-09 1s 1s 487124350e-09 0s 0s 487125350e-09 0s 0s 487127150e-09 1s 1s 487134590e-09 0s 0s 487135630e-09 0s 0s 487137390e-09 1s 1s 487144830e-09 0s 0s 487145910e-09 0s 0s 487147630e-09 1s 1s 487155070e-09 0s 0s 487156190e-09 0s 0s 487157870e-09 1s 1s 487165310e-09 0s 0s 487166470e-09 0s 0s 487168110e-09 1s 1s 487175550e-09 0s 0s 487176750e-09 0s 0s 487178350e-09 1s 1s 487185790e-09 0s 0s 487187030e-09 0s 0s 487188590e-09 1s 1s 487196030e-09 0s 0s 487197310e-09 0s 0s 487198830e-09 1s 1s 487206270e-09 0s 0s 487207590e-09 0s 0s 487209070e-09 1s 1s 487216510e-09 0s 0s 487217870e-09 0s 0s 487219310e-09 1s 1s 487226750e-09 0s 0s 487228150e-09 0s 0s 487229550e-09 1s 1s 487236990e-09 0s 0s 487238430e-09 0s 0s 487239790e-09 1s 1s 487247230e-09 0s 0s 487248710e-09 0s 0s 487250030e-09 1s 1s 487257470e-09 0s 0s 487258990e-09 0s 0s 487260270e-09 1s 1s 487267710e-09 0s 0s 487269270e-09 0s 0s 487270510e-09 1s 1s 487277950e-09 0s 0s 487279550e-09 0s 0s 487280750e-09 1s 1s 487288190e-09 0s 0s 487289830e-09 0s 0s 487290990e-09 1s 1s 487298430e-09 0s 0s 487300110e-09 0s 0s 487301230e-09 1s 1s 487308670e-09 0s 0s 487310390e-09 0s 0s 487311470e-09 1s 1s 487318910e-09 0s 0s 487320670e-09 0s 0s 487321710e-09 1s 1s 487329150e-09 0s 0s 487330950e-09 0s 0s 487331950e-09 1s 1s 487339390e-09 0s 0s 487341230e-09 0s 0s 487342190e-09 1s 1s 487349630e-09 0s 0s 487351510e-09 0s 0s 487352430e-09 1s 1s 487359870e-09 0s 0s 487361790e-09 0s 0s 487362670e-09 1s 1s 487370110e-09 0s 0s 487372070e-09 0s 0s 487372910e-09 1s 1s 487380350e-09 0s 0s 487382350e-09 0s 0s 487383150e-09 1s 1s 487390590e-09 0s 0s 487392630e-09 0s 0s 487393390e-09 1s 1s 487400830e-09 0s 0s 487402910e-09 0s 0s 487403630e-09 1s 1s 487411070e-09 0s 0s 487413190e-09 0s 0s 487413870e-09 1s 1s 487421310e-09 0s 0s 487423470e-09 0s 0s 487424110e-09 1s 1s 487431550e-09 0s 0s 487433750e-09 0s 0s 487434350e-09 1s 1s 487441790e-09 0s 0s 487444030e-09 0s 0s 487444590e-09 1s 1s 487452030e-09 0s 0s 487454310e-09 0s 0s 487454830e-09 1s 1s 487462270e-09 0s 0s 487464590e-09 0s 0s 487465070e-09 1s 1s 487472510e-09 0s 0s 487474870e-09 0s 0s 487475310e-09 1s 1s 487482750e-09 0s 0s 487485150e-09 0s 0s 487485550e-09 1s 1s 487492990e-09 0s 0s 487495430e-09 0s 0s 487495790e-09 1s 1s 487503230e-09 0s 0s 487505710e-09 0s 0s 487506030e-09 1s 1s 487513470e-09 0s 0s 487515990e-09 0s 0s 487516270e-09 1s 1s 487523710e-09 0s 0s 487526270e-09 0s 0s 487526510e-09 1s 1s 487533950e-09 0s 0s 487536550e-09 0s 0s 487536750e-09 1s 1s 487544190e-09 0s 0s 487546830e-09 0s 0s 487546990e-09 1s 1s 487554430e-09 0s 0s 487557110e-09 0s 0s 487557230e-09 1s 1s 487564670e-09 0s 0s 487567390e-09 0s 0s 487567470e-09 1s 1s 487574910e-09 0s 0s 487577670e-09 0s 0s 487577710e-09 1s 1s 487585150e-09 0s 0s 487587950e-09 1s 1s 487587990e-09 1s 1s 487595430e-09 0s 0s 487598190e-09 1s 1s 487598270e-09 1s 1s 487605670e-09 0s 0s 487608430e-09 1s 1s 487608550e-09 1s 1s 487615910e-09 0s 0s 487618670e-09 1s 1s 487618830e-09 1s 1s 487626150e-09 0s 0s 487628910e-09 1s 1s 487629110e-09 1s 1s 487636390e-09 0s 0s 487639150e-09 1s 1s 487639390e-09 1s 1s 487646630e-09 0s 0s 487649390e-09 1s 1s 487649670e-09 1s 1s 487656870e-09 0s 0s 487659630e-09 1s 1s 487659950e-09 1s 1s 487667110e-09 0s 0s 487669870e-09 1s 1s 487670230e-09 1s 1s 487677350e-09 0s 0s 487680110e-09 1s 1s 487680510e-09 1s 1s 487687590e-09 0s 0s 487690350e-09 1s 1s 487690790e-09 1s 1s 487697830e-09 0s 0s 487700590e-09 1s 1s 487701070e-09 1s 1s 487708070e-09 0s 0s 487710830e-09 1s 1s 487711350e-09 1s 1s 487718310e-09 0s 0s 487721070e-09 1s 1s 487721630e-09 1s 1s 487728550e-09 0s 0s 487731310e-09 1s 1s 487731910e-09 1s 1s 487738790e-09 0s 0s 487741550e-09 1s 1s 487742190e-09 1s 1s 487749030e-09 0s 0s 487751790e-09 1s 1s 487752470e-09 1s 1s 487759270e-09 0s 0s 487762030e-09 1s 1s 487762750e-09 1s 1s 487769510e-09 0s 0s 487772270e-09 1s 1s 487773030e-09 1s 1s 487779750e-09 0s 0s 487782510e-09 1s 1s 487783310e-09 1s 1s 487789990e-09 0s 0s 487792750e-09 1s 1s 487793590e-09 1s 1s 487800230e-09 0s 0s 487802990e-09 1s 1s 487803870e-09 1s 1s 487810470e-09 0s 0s 487813230e-09 1s 1s 487814150e-09 1s 1s 487820710e-09 0s 0s 487823470e-09 1s 1s 487824430e-09 1s 1s 487830950e-09 0s 0s 487833710e-09 1s 1s 487834710e-09 1s 1s 487841190e-09 0s 0s 487843950e-09 1s 1s 487844990e-09 1s 1s 487851430e-09 0s 0s 487854190e-09 1s 1s 487855270e-09 1s 1s 487861670e-09 0s 0s 487864430e-09 1s 1s 487865550e-09 1s 1s 487871910e-09 0s 0s 487874670e-09 1s 1s 487875830e-09 1s 1s 487882150e-09 0s 0s 487884910e-09 1s 1s 487886110e-09 1s 1s 487892390e-09 0s 0s 487895150e-09 1s 1s 487896390e-09 1s 1s 487902630e-09 0s 0s 487905390e-09 1s 1s 487906670e-09 1s 1s 487912870e-09 0s 0s 487915630e-09 1s 1s 487916950e-09 1s 1s 487923110e-09 0s 0s 487925870e-09 1s 1s 487927230e-09 1s 1s 487933350e-09 0s 0s 487936110e-09 1s 1s 487937510e-09 1s 1s 487943590e-09 0s 0s 487946350e-09 1s 1s 487947790e-09 1s 1s 487953830e-09 0s 0s 487956590e-09 1s 1s 487958070e-09 1s 1s 487964070e-09 0s 0s 487966830e-09 1s 1s 487968350e-09 1s 1s 487974310e-09 0s 0s 487977070e-09 1s 1s 487978630e-09 1s 1s 487984550e-09 0s 0s 487987310e-09 1s 1s 487988910e-09 1s 1s 487994790e-09 0s 0s 487997550e-09 1s 1s 487999190e-09 1s 1s 488005030e-09 0s 0s 488007790e-09 1s 1s 488009470e-09 1s 1s 488015270e-09 0s 0s 488018030e-09 1s 1s 488019750e-09 1s 1s 488025510e-09 0s 0s 488028270e-09 1s 1s 488030030e-09 1s 1s 488035750e-09 0s 0s 488038510e-09 1s 1s 488040310e-09 1s 1s 488045990e-09 0s 0s 488048750e-09 1s 1s 488050590e-09 1s 1s 488056230e-09 0s 0s 488058990e-09 1s 1s 488060870e-09 1s 1s 488066470e-09 0s 0s 488069230e-09 1s 1s 488071150e-09 1s 1s 488076710e-09 0s 0s 488079470e-09 1s 1s 488081430e-09 1s 1s 488086950e-09 0s 0s 488089710e-09 1s 1s 488091710e-09 1s 1s 488097190e-09 0s 0s 488099950e-09 1s 1s 488101990e-09 1s 1s 488107430e-09 0s 0s 488110190e-09 1s 1s 488112270e-09 1s 1s 488117670e-09 0s 0s 488120430e-09 1s 1s 488122550e-09 1s 1s 488127910e-09 0s 0s 488130670e-09 1s 1s 488132830e-09 1s 1s 488138150e-09 0s 0s 488140910e-09 1s 1s 488143110e-09 1s 1s 488148390e-09 0s 0s 488151150e-09 1s 1s 488153390e-09 1s 1s 488158630e-09 0s 0s 488161390e-09 1s 1s 488163670e-09 1s 1s 488168870e-09 0s 0s 488171630e-09 1s 1s 488173950e-09 1s 1s 488179110e-09 0s 0s 488181870e-09 1s 1s 488184230e-09 1s 1s 488189350e-09 0s 0s 488192110e-09 1s 1s 488194510e-09 1s 1s 488199590e-09 0s 0s 488202350e-09 1s 1s 488204790e-09 1s 1s 488209830e-09 0s 0s 488212590e-09 1s 1s 488215070e-09 1s 1s 488220070e-09 0s 0s 488222830e-09 1s 1s 488225350e-09 1s 1s 488230310e-09 0s 0s 488233070e-09 1s 1s 488235630e-09 1s 1s 488240550e-09 0s 0s 488243310e-09 1s 1s 488245910e-09 1s 1s 488250790e-09 0s 0s 488253550e-09 1s 1s 488256190e-09 1s 1s 488261030e-09 0s 0s 488263790e-09 1s 1s 488266470e-09 1s 1s 488271270e-09 0s 0s 488274030e-09 1s 1s 488276750e-09 1s 1s 488281510e-09 0s 0s 488284270e-09 1s 1s 488287030e-09 1s 1s 488291750e-09 0s 0s 488294510e-09 1s 1s 488297310e-09 1s 1s 488301990e-09 0s 0s 488304750e-09 1s 1s 488307590e-09 1s 1s 488312230e-09 0s 0s 488314990e-09 1s 1s 488317870e-09 1s 1s 488322470e-09 0s 0s 488325230e-09 1s 1s 488328150e-09 1s 1s 488332710e-09 0s 0s 488335470e-09 1s 1s 488338430e-09 1s 1s 488342950e-09 0s 0s 488345710e-09 1s 1s 488348710e-09 1s 1s 488353190e-09 0s 0s 488355950e-09 1s 1s 488358990e-09 1s 1s 488363430e-09 0s 0s 488366190e-09 1s 1s 488369270e-09 1s 1s 488373670e-09 0s 0s 488376430e-09 1s 1s 488379550e-09 1s 1s 488383910e-09 0s 0s 488386670e-09 1s 1s 488389830e-09 1s 1s 488394150e-09 0s 0s 488396910e-09 1s 1s 488400110e-09 1s 1s 488404390e-09 0s 0s 488407150e-09 1s 1s 488410390e-09 1s 1s 488414630e-09 0s 0s 488417390e-09 1s 1s 488420670e-09 1s 1s 488424870e-09 0s 0s 488427630e-09 1s 1s 488430950e-09 1s 1s 488435110e-09 0s 0s 488437870e-09 1s 1s 488441230e-09 1s 1s 488445350e-09 0s 0s 488448110e-09 1s 1s 488451510e-09 1s 1s 488455590e-09 0s 0s 488458350e-09 1s 1s 488461790e-09 1s 1s 488465830e-09 0s 0s 488468590e-09 1s 1s 488472070e-09 1s 1s 488476070e-09 0s 0s 488478830e-09 1s 1s 488482350e-09 1s 1s 488486310e-09 0s 0s 488489070e-09 1s 1s 488492630e-09 1s 1s 488496550e-09 0s 0s 488499310e-09 1s 1s 488502910e-09 1s 1s 488506790e-09 0s 0s 488509550e-09 1s 1s 488513190e-09 1s 1s 488517030e-09 0s 0s 488519790e-09 1s 1s 488523470e-09 1s 1s 488527270e-09 0s 0s 488530030e-09 1s 1s 488533750e-09 1s 1s 488537510e-09 0s 0s 488540270e-09 1s 1s 488544030e-09 1s 1s 488547750e-09 0s 0s 488550510e-09 1s 1s 488554310e-09 1s 1s 488557990e-09 0s 0s 488560750e-09 1s 1s 488564590e-09 1s 1s 488568230e-09 0s 0s 488570990e-09 1s 1s 488574870e-09 1s 1s 488578470e-09 0s 0s 488581230e-09 1s 1s 488585150e-09 1s 1s 488588710e-09 0s 0s 488591470e-09 1s 1s 488595430e-09 1s 1s 488598950e-09 0s 0s 488601710e-09 1s 1s 488605710e-09 1s 1s 488609190e-09 0s 0s 488611950e-09 1s 1s 488615990e-09 1s 1s 488619430e-09 0s 0s 488622190e-09 1s 1s 488626270e-09 1s 1s 488629670e-09 0s 0s 488632430e-09 1s 1s 488636550e-09 1s 1s 488639910e-09 0s 0s 488642670e-09 1s 1s 488646830e-09 1s 1s 488650150e-09 0s 0s 488652910e-09 1s 1s 488657110e-09 1s 1s 488660390e-09 0s 0s 488663150e-09 1s 1s 488667390e-09 1s 1s 488670630e-09 0s 0s 488673390e-09 1s 1s 488677670e-09 1s 1s 488680870e-09 0s 0s 488683630e-09 1s 1s 488687950e-09 1s 1s 488691110e-09 0s 0s 488693870e-09 1s 1s 488698230e-09 1s 1s 488701350e-09 0s 0s 488704110e-09 1s 1s 488708510e-09 1s 1s 488711590e-09 0s 0s 488714350e-09 1s 1s 488718790e-09 1s 1s 488721830e-09 0s 0s 488724590e-09 1s 1s 488729070e-09 1s 1s 488732070e-09 0s 0s 488734830e-09 1s 1s 488739350e-09 1s 1s 488742310e-09 0s 0s 488745070e-09 1s 1s 488749630e-09 1s 1s 488752550e-09 0s 0s 488755310e-09 1s 1s 488759910e-09 1s 1s 488762790e-09 0s 0s 488765550e-09 1s 1s 488770190e-09 1s 1s 488773030e-09 0s 0s 488775790e-09 1s 1s 488780470e-09 1s 1s 488783270e-09 0s 0s 488786030e-09 1s 1s 488790750e-09 1s 1s 488793510e-09 0s 0s 488796270e-09 1s 1s 488801030e-09 1s 1s 488803750e-09 0s 0s 488806510e-09 1s 1s 488811310e-09 1s 1s 488813990e-09 0s 0s 488816750e-09 1s 1s 488821590e-09 1s 1s 488824230e-09 0s 0s 488826990e-09 1s 1s 488831870e-09 1s 1s 488834470e-09 0s 0s 488837230e-09 1s 1s 488842150e-09 1s 1s 488844710e-09 0s 0s 488847470e-09 1s 1s 488852430e-09 1s 1s 488854950e-09 0s 0s 488857710e-09 1s 1s 488862710e-09 1s 1s 488865190e-09 0s 0s 488867950e-09 1s 1s 488872990e-09 1s 1s 488875430e-09 0s 0s 488878190e-09 1s 1s 488883270e-09 1s 1s 488885670e-09 0s 0s 488888430e-09 1s 1s 488893550e-09 1s 1s 488895910e-09 0s 0s 488898670e-09 1s 1s 488903830e-09 1s 1s 488906150e-09 0s 0s 488908910e-09 1s 1s 488914110e-09 1s 1s 488916390e-09 0s 0s 488919150e-09 1s 1s 488924390e-09 1s 1s 488926630e-09 0s 0s 488929390e-09 1s 1s 488934670e-09 1s 1s 488936870e-09 0s 0s 488939630e-09 1s 1s 488944950e-09 1s 1s 488947110e-09 0s 0s 488949870e-09 1s 1s 488955230e-09 1s 1s 488957350e-09 0s 0s 488960110e-09 1s 1s 488965510e-09 1s 1s 488967590e-09 0s 0s 488970350e-09 1s 1s 488975790e-09 1s 1s 488977830e-09 0s 0s 488980590e-09 1s 1s 488986070e-09 1s 1s 488988070e-09 0s 0s 488990830e-09 1s 1s 488996350e-09 1s 1s 488998310e-09 0s 0s 489001070e-09 1s 1s 489006630e-09 1s 1s 489008550e-09 0s 0s 489011310e-09 1s 1s 489016910e-09 1s 1s 489018790e-09 0s 0s 489021550e-09 1s 1s 489027190e-09 1s 1s 489029030e-09 0s 0s 489031790e-09 1s 1s 489037470e-09 1s 1s 489039270e-09 0s 0s 489042030e-09 1s 1s 489047750e-09 1s 1s 489049510e-09 0s 0s 489052270e-09 1s 1s 489058030e-09 1s 1s 489059750e-09 0s 0s 489062510e-09 1s 1s 489068310e-09 1s 1s 489069990e-09 0s 0s 489072750e-09 1s 1s 489078590e-09 1s 1s 489080230e-09 0s 0s 489082990e-09 1s 1s 489088870e-09 1s 1s 489090470e-09 0s 0s 489093230e-09 1s 1s 489099150e-09 1s 1s 489100710e-09 0s 0s 489103470e-09 1s 1s 489109430e-09 1s 1s 489110950e-09 0s 0s 489113710e-09 1s 1s 489119710e-09 1s 1s 489121190e-09 0s 0s 489123950e-09 1s 1s 489129990e-09 1s 1s 489131430e-09 0s 0s 489134190e-09 1s 1s 489140270e-09 1s 1s 489141670e-09 0s 0s 489144430e-09 1s 1s 489150550e-09 1s 1s 489151910e-09 0s 0s 489154670e-09 1s 1s 489160830e-09 1s 1s 489162150e-09 0s 0s 489164910e-09 1s 1s 489171110e-09 1s 1s 489172390e-09 0s 0s 489175150e-09 1s 1s 489181390e-09 1s 1s 489182630e-09 0s 0s 489185390e-09 1s 1s 489191670e-09 1s 1s 489192870e-09 0s 0s 489195630e-09 1s 1s 489201950e-09 1s 1s 489203110e-09 0s 0s 489205870e-09 1s 1s 489212230e-09 1s 1s 489213350e-09 0s 0s 489216110e-09 1s 1s 489222510e-09 1s 1s 489223590e-09 0s 0s 489226350e-09 1s 1s 489232790e-09 1s 1s 489233830e-09 0s 0s 489236590e-09 1s 1s 489243070e-09 1s 1s 489244070e-09 0s 0s 489246830e-09 1s 1s 489253350e-09 1s 1s 489254310e-09 0s 0s 489257070e-09 1s 1s 489263630e-09 1s 1s 489264550e-09 0s 0s 489267310e-09 1s 1s 489273910e-09 1s 1s 489274790e-09 0s 0s 489277550e-09 1s 1s 489284190e-09 1s 1s 489285030e-09 0s 0s 489287790e-09 1s 1s 489294470e-09 1s 1s 489295270e-09 0s 0s 489298030e-09 1s 1s 489304750e-09 1s 1s 489305510e-09 0s 0s 489308270e-09 1s 1s 489315030e-09 1s 1s 489315750e-09 0s 0s 489318510e-09 1s 1s 489325310e-09 1s 1s 489325990e-09 0s 0s 489328750e-09 1s 1s 489335590e-09 1s 1s 489336230e-09 0s 0s 489338990e-09 1s 1s 489345870e-09 1s 1s 489346470e-09 0s 0s 489349230e-09 1s 1s 489356150e-09 1s 1s 489356710e-09 0s 0s 489359470e-09 1s 1s 489366430e-09 1s 1s 489366950e-09 0s 0s 489369710e-09 1s 1s 489376710e-09 1s 1s 489377190e-09 0s 0s 489379950e-09 1s 1s 489386990e-09 1s 1s 489387430e-09 0s 0s 489390190e-09 1s 1s 489397270e-09 1s 1s 489397670e-09 0s 0s 489400430e-09 1s 1s 489407550e-09 1s 1s 489407910e-09 0s 0s 489410670e-09 1s 1s 489417830e-09 1s 1s 489418150e-09 0s 0s 489420910e-09 1s 1s 489428110e-09 1s 1s 489428390e-09 0s 0s 489431150e-09 1s 1s 489438390e-09 1s 1s 489438630e-09 0s 0s 489441390e-09 1s 1s 489448670e-09 1s 1s 489448870e-09 0s 0s 489451630e-09 1s 1s 489458950e-09 1s 1s 489459110e-09 0s 0s 489461870e-09 1s 1s 489469230e-09 1s 1s 489469350e-09 0s 0s 489472110e-09 1s 1s 489479510e-09 1s 1s 489479590e-09 0s 0s 489482350e-09 1s 1s 489489790e-09 1s 1s 489489830e-09 0s 0s 489492590e-09 1s 1s 489500070e-09 0s 0s 489502830e-09 1s 1s 489510310e-09 0s 0s 489510350e-09 0s 0s 489513070e-09 1s 1s 489520550e-09 0s 0s 489520630e-09 0s 0s 489523310e-09 1s 1s 489530790e-09 0s 0s 489530910e-09 0s 0s 489533550e-09 1s 1s 489541030e-09 0s 0s 489541190e-09 0s 0s 489543790e-09 1s 1s 489551270e-09 0s 0s 489551470e-09 0s 0s 489554030e-09 1s 1s 489561510e-09 0s 0s 489561750e-09 0s 0s 489564270e-09 1s 1s 489571750e-09 0s 0s 489572030e-09 0s 0s 489574510e-09 1s 1s 489581990e-09 0s 0s 489582310e-09 0s 0s 489584750e-09 1s 1s 489592230e-09 0s 0s 489592590e-09 0s 0s 489594990e-09 1s 1s 489602470e-09 0s 0s 489602870e-09 0s 0s 489605230e-09 1s 1s 489612710e-09 0s 0s 489613150e-09 0s 0s 489615470e-09 1s 1s 489622950e-09 0s 0s 489623430e-09 0s 0s 489625710e-09 1s 1s 489633190e-09 0s 0s 489633710e-09 0s 0s 489635950e-09 1s 1s 489643430e-09 0s 0s 489643990e-09 0s 0s 489646190e-09 1s 1s 489653670e-09 0s 0s 489654270e-09 0s 0s 489656430e-09 1s 1s 489663910e-09 0s 0s 489664550e-09 0s 0s 489666670e-09 1s 1s 489674150e-09 0s 0s 489674830e-09 0s 0s 489676910e-09 1s 1s 489684390e-09 0s 0s 489685110e-09 0s 0s 489687150e-09 1s 1s 489694630e-09 0s 0s 489695390e-09 0s 0s 489697390e-09 1s 1s 489704870e-09 0s 0s 489705670e-09 0s 0s 489707630e-09 1s 1s 489715110e-09 0s 0s 489715950e-09 0s 0s 489717870e-09 1s 1s 489725350e-09 0s 0s 489726230e-09 0s 0s 489728110e-09 1s 1s 489735590e-09 0s 0s 489736510e-09 0s 0s 489738350e-09 1s 1s 489745830e-09 0s 0s 489746790e-09 0s 0s 489748590e-09 1s 1s 489756070e-09 0s 0s 489757070e-09 0s 0s 489758830e-09 1s 1s 489766310e-09 0s 0s 489767350e-09 0s 0s 489769070e-09 1s 1s 489776550e-09 0s 0s 489777630e-09 0s 0s 489779310e-09 1s 1s 489786790e-09 0s 0s 489787910e-09 0s 0s 489789550e-09 1s 1s 489797030e-09 0s 0s 489798190e-09 0s 0s 489799790e-09 1s 1s 489807270e-09 0s 0s 489808470e-09 0s 0s 489810030e-09 1s 1s 489817510e-09 0s 0s 489818750e-09 0s 0s 489820270e-09 1s 1s 489827750e-09 0s 0s 489829030e-09 0s 0s 489830510e-09 1s 1s 489837990e-09 0s 0s 489839310e-09 0s 0s 489840750e-09 1s 1s 489848230e-09 0s 0s 489849590e-09 0s 0s 489850990e-09 1s 1s 489858470e-09 0s 0s 489859870e-09 0s 0s 489861230e-09 1s 1s 489868710e-09 0s 0s 489870150e-09 0s 0s 489871470e-09 1s 1s 489878950e-09 0s 0s 489880430e-09 0s 0s 489881710e-09 1s 1s 489889190e-09 0s 0s 489890710e-09 0s 0s 489891950e-09 1s 1s 489899430e-09 0s 0s 489900990e-09 0s 0s 489902190e-09 1s 1s 489909670e-09 0s 0s 489911270e-09 0s 0s 489912430e-09 1s 1s 489919910e-09 0s 0s 489921550e-09 0s 0s 489922670e-09 1s 1s 489930150e-09 0s 0s 489931830e-09 0s 0s 489932910e-09 1s 1s 489940390e-09 0s 0s 489942110e-09 0s 0s 489943150e-09 1s 1s 489950630e-09 0s 0s 489952390e-09 0s 0s 489953390e-09 1s 1s 489960870e-09 0s 0s 489962670e-09 0s 0s 489963630e-09 1s 1s 489971110e-09 0s 0s 489972950e-09 0s 0s 489973870e-09 1s 1s 489981350e-09 0s 0s 489983230e-09 0s 0s 489984110e-09 1s 1s 489991590e-09 0s 0s 489993510e-09 0s 0s 489994350e-09 1s 1s 490001830e-09 0s 0s 490003790e-09 0s 0s 490004590e-09 1s 1s 490012070e-09 0s 0s 490014070e-09 0s 0s 490014830e-09 1s 1s 490022310e-09 0s 0s 490024350e-09 0s 0s 490025070e-09 1s 1s 490032550e-09 0s 0s 490034630e-09 0s 0s 490035310e-09 1s 1s 490042790e-09 0s 0s 490044910e-09 0s 0s 490045550e-09 1s 1s 490053030e-09 0s 0s 490055190e-09 0s 0s 490055790e-09 1s 1s 490063270e-09 0s 0s 490065470e-09 0s 0s 490066030e-09 1s 1s 490073510e-09 0s 0s 490075750e-09 0s 0s 490076270e-09 1s 1s 490083750e-09 0s 0s 490086030e-09 0s 0s 490086510e-09 1s 1s 490093990e-09 0s 0s 490096310e-09 0s 0s 490096750e-09 1s 1s 490104230e-09 0s 0s 490106590e-09 0s 0s 490106990e-09 1s 1s 490114470e-09 0s 0s 490116870e-09 0s 0s 490117230e-09 1s 1s 490124710e-09 0s 0s 490127150e-09 0s 0s 490127470e-09 1s 1s 490134950e-09 0s 0s 490137430e-09 0s 0s 490137710e-09 1s 1s 490145190e-09 0s 0s 490147710e-09 0s 0s 490147950e-09 1s 1s 490155430e-09 0s 0s 490157990e-09 0s 0s 490158190e-09 1s 1s 490165670e-09 0s 0s 490168270e-09 0s 0s 490168430e-09 1s 1s 490175910e-09 0s 0s 490178550e-09 0s 0s 490178670e-09 1s 1s 490186150e-09 0s 0s 490188830e-09 0s 0s 490188910e-09 1s 1s 490196390e-09 0s 0s 490199110e-09 0s 0s 490199150e-09 1s 1s 490206630e-09 0s 0s 490209390e-09 1s 1s 490209430e-09 1s 1s 490216910e-09 0s 0s 490219630e-09 1s 1s 490219710e-09 1s 1s 490227150e-09 0s 0s 490229870e-09 1s 1s 490229990e-09 1s 1s 490237390e-09 0s 0s 490240110e-09 1s 1s 490240270e-09 1s 1s 490247630e-09 0s 0s 490250350e-09 1s 1s 490250550e-09 1s 1s 490257870e-09 0s 0s 490260590e-09 1s 1s 490260830e-09 1s 1s 490268110e-09 0s 0s 490270830e-09 1s 1s 490271110e-09 1s 1s 490278350e-09 0s 0s 490281070e-09 1s 1s 490281390e-09 1s 1s 490288590e-09 0s 0s 490291310e-09 1s 1s 490291670e-09 1s 1s 490298830e-09 0s 0s 490301550e-09 1s 1s 490301950e-09 1s 1s 490309070e-09 0s 0s 490311790e-09 1s 1s 490312230e-09 1s 1s 490319310e-09 0s 0s 490322030e-09 1s 1s 490322510e-09 1s 1s 490329550e-09 0s 0s 490332270e-09 1s 1s 490332790e-09 1s 1s 490339790e-09 0s 0s 490342510e-09 1s 1s 490343070e-09 1s 1s 490350030e-09 0s 0s 490352750e-09 1s 1s 490353350e-09 1s 1s 490360270e-09 0s 0s 490362990e-09 1s 1s 490363630e-09 1s 1s 490370510e-09 0s 0s 490373230e-09 1s 1s 490373910e-09 1s 1s 490380750e-09 0s 0s 490383470e-09 1s 1s 490384190e-09 1s 1s 490390990e-09 0s 0s 490393710e-09 1s 1s 490394470e-09 1s 1s 490401230e-09 0s 0s 490403950e-09 1s 1s 490404750e-09 1s 1s 490411470e-09 0s 0s 490414190e-09 1s 1s 490415030e-09 1s 1s 490421710e-09 0s 0s 490424430e-09 1s 1s 490425310e-09 1s 1s 490431950e-09 0s 0s 490434670e-09 1s 1s 490435590e-09 1s 1s 490442190e-09 0s 0s 490444910e-09 1s 1s 490445870e-09 1s 1s 490452430e-09 0s 0s 490455150e-09 1s 1s 490456150e-09 1s 1s 490462670e-09 0s 0s 490465390e-09 1s 1s 490466430e-09 1s 1s 490472910e-09 0s 0s 490475630e-09 1s 1s 490476710e-09 1s 1s 490483150e-09 0s 0s 490485870e-09 1s 1s 490486990e-09 1s 1s 490493390e-09 0s 0s 490496110e-09 1s 1s 490497270e-09 1s 1s 490503630e-09 0s 0s 490506350e-09 1s 1s 490507550e-09 1s 1s 490513870e-09 0s 0s 490516590e-09 1s 1s 490517830e-09 1s 1s 490524110e-09 0s 0s 490526830e-09 1s 1s 490528110e-09 1s 1s 490534350e-09 0s 0s 490537070e-09 1s 1s 490538390e-09 1s 1s 490544590e-09 0s 0s 490547310e-09 1s 1s 490548670e-09 1s 1s 490554830e-09 0s 0s 490557550e-09 1s 1s 490558950e-09 1s 1s 490565070e-09 0s 0s 490567790e-09 1s 1s 490569230e-09 1s 1s 490575310e-09 0s 0s 490578030e-09 1s 1s 490579510e-09 1s 1s 490585550e-09 0s 0s 490588270e-09 1s 1s 490589790e-09 1s 1s 490595790e-09 0s 0s 490598510e-09 1s 1s 490600070e-09 1s 1s 490606030e-09 0s 0s 490608750e-09 1s 1s 490610350e-09 1s 1s 490616270e-09 0s 0s 490618990e-09 1s 1s 490620630e-09 1s 1s 490626510e-09 0s 0s 490629230e-09 1s 1s 490630910e-09 1s 1s 490636750e-09 0s 0s 490639470e-09 1s 1s 490641190e-09 1s 1s 490646990e-09 0s 0s 490649710e-09 1s 1s 490651470e-09 1s 1s 490657230e-09 0s 0s 490659950e-09 1s 1s 490661750e-09 1s 1s 490667470e-09 0s 0s 490670190e-09 1s 1s 490672030e-09 1s 1s 490677710e-09 0s 0s 490680430e-09 1s 1s 490682310e-09 1s 1s 490687950e-09 0s 0s 490690670e-09 1s 1s 490692590e-09 1s 1s 490698190e-09 0s 0s 490700910e-09 1s 1s 490702870e-09 1s 1s 490708430e-09 0s 0s 490711150e-09 1s 1s 490713150e-09 1s 1s 490718670e-09 0s 0s 490721390e-09 1s 1s 490723430e-09 1s 1s 490728910e-09 0s 0s 490731630e-09 1s 1s 490733710e-09 1s 1s 490739150e-09 0s 0s 490741870e-09 1s 1s 490743990e-09 1s 1s 490749390e-09 0s 0s 490752110e-09 1s 1s 490754270e-09 1s 1s 490759630e-09 0s 0s 490762350e-09 1s 1s 490764550e-09 1s 1s 490769870e-09 0s 0s 490772590e-09 1s 1s 490774830e-09 1s 1s 490780110e-09 0s 0s 490782830e-09 1s 1s 490785110e-09 1s 1s 490790350e-09 0s 0s 490793070e-09 1s 1s 490795390e-09 1s 1s 490800590e-09 0s 0s 490803310e-09 1s 1s 490805670e-09 1s 1s 490810830e-09 0s 0s 490813550e-09 1s 1s 490815950e-09 1s 1s 490821070e-09 0s 0s 490823790e-09 1s 1s 490826230e-09 1s 1s 490831310e-09 0s 0s 490834030e-09 1s 1s 490836510e-09 1s 1s 490841550e-09 0s 0s 490844270e-09 1s 1s 490846790e-09 1s 1s 490851790e-09 0s 0s 490854510e-09 1s 1s 490857070e-09 1s 1s 490862030e-09 0s 0s 490864750e-09 1s 1s 490867350e-09 1s 1s 490872270e-09 0s 0s 490874990e-09 1s 1s 490877630e-09 1s 1s 490882510e-09 0s 0s 490885230e-09 1s 1s 490887910e-09 1s 1s 490892750e-09 0s 0s 490895470e-09 1s 1s 490898190e-09 1s 1s 490902990e-09 0s 0s 490905710e-09 1s 1s 490908470e-09 1s 1s 490913230e-09 0s 0s 490915950e-09 1s 1s 490918750e-09 1s 1s 490923470e-09 0s 0s 490926190e-09 1s 1s 490929030e-09 1s 1s 490933710e-09 0s 0s 490936430e-09 1s 1s 490939310e-09 1s 1s 490943950e-09 0s 0s 490946670e-09 1s 1s 490949590e-09 1s 1s 490954190e-09 0s 0s 490956910e-09 1s 1s 490959870e-09 1s 1s 490964430e-09 0s 0s 490967150e-09 1s 1s 490970150e-09 1s 1s 490974670e-09 0s 0s 490977390e-09 1s 1s 490980430e-09 1s 1s 490984910e-09 0s 0s 490987630e-09 1s 1s 490990710e-09 1s 1s 490995150e-09 0s 0s 490997870e-09 1s 1s 491000990e-09 1s 1s 491005390e-09 0s 0s 491008110e-09 1s 1s 491011270e-09 1s 1s 491015630e-09 0s 0s 491018350e-09 1s 1s 491021550e-09 1s 1s 491025870e-09 0s 0s 491028590e-09 1s 1s 491031830e-09 1s 1s 491036110e-09 0s 0s 491038830e-09 1s 1s 491042110e-09 1s 1s 491046350e-09 0s 0s 491049070e-09 1s 1s 491052390e-09 1s 1s 491056590e-09 0s 0s 491059310e-09 1s 1s 491062670e-09 1s 1s 491066830e-09 0s 0s 491069550e-09 1s 1s 491072950e-09 1s 1s 491077070e-09 0s 0s 491079790e-09 1s 1s 491083230e-09 1s 1s 491087310e-09 0s 0s 491090030e-09 1s 1s 491093510e-09 1s 1s 491097550e-09 0s 0s 491100270e-09 1s 1s 491103790e-09 1s 1s 491107790e-09 0s 0s 491110510e-09 1s 1s 491114070e-09 1s 1s 491118030e-09 0s 0s 491120750e-09 1s 1s 491124350e-09 1s 1s 491128270e-09 0s 0s 491130990e-09 1s 1s 491134630e-09 1s 1s 491138510e-09 0s 0s 491141230e-09 1s 1s 491144910e-09 1s 1s 491148750e-09 0s 0s 491151470e-09 1s 1s 491155190e-09 1s 1s 491158990e-09 0s 0s 491161710e-09 1s 1s 491165470e-09 1s 1s 491169230e-09 0s 0s 491171950e-09 1s 1s 491175750e-09 1s 1s 491179470e-09 0s 0s 491182190e-09 1s 1s 491186030e-09 1s 1s 491189710e-09 0s 0s 491192430e-09 1s 1s 491196310e-09 1s 1s 491199950e-09 0s 0s 491202670e-09 1s 1s 491206590e-09 1s 1s 491210190e-09 0s 0s 491212910e-09 1s 1s 491216870e-09 1s 1s 491220430e-09 0s 0s 491223150e-09 1s 1s 491227150e-09 1s 1s 491230670e-09 0s 0s 491233390e-09 1s 1s 491237430e-09 1s 1s 491240910e-09 0s 0s 491243630e-09 1s 1s 491247710e-09 1s 1s 491251150e-09 0s 0s 491253870e-09 1s 1s 491257990e-09 1s 1s 491261390e-09 0s 0s 491264110e-09 1s 1s 491268270e-09 1s 1s 491271630e-09 0s 0s 491274350e-09 1s 1s 491278550e-09 1s 1s 491281870e-09 0s 0s 491284590e-09 1s 1s 491288830e-09 1s 1s 491292110e-09 0s 0s 491294830e-09 1s 1s 491299110e-09 1s 1s 491302350e-09 0s 0s 491305070e-09 1s 1s 491309390e-09 1s 1s 491312590e-09 0s 0s 491315310e-09 1s 1s 491319670e-09 1s 1s 491322830e-09 0s 0s 491325550e-09 1s 1s 491329950e-09 1s 1s 491333070e-09 0s 0s 491335790e-09 1s 1s 491340230e-09 1s 1s 491343310e-09 0s 0s 491346030e-09 1s 1s 491350510e-09 1s 1s 491353550e-09 0s 0s 491356270e-09 1s 1s 491360790e-09 1s 1s 491363790e-09 0s 0s 491366510e-09 1s 1s 491371070e-09 1s 1s 491374030e-09 0s 0s 491376750e-09 1s 1s 491381350e-09 1s 1s 491384270e-09 0s 0s 491386990e-09 1s 1s 491391630e-09 1s 1s 491394510e-09 0s 0s 491397230e-09 1s 1s 491401910e-09 1s 1s 491404750e-09 0s 0s 491407470e-09 1s 1s 491412190e-09 1s 1s 491414990e-09 0s 0s 491417710e-09 1s 1s 491422470e-09 1s 1s 491425230e-09 0s 0s 491427950e-09 1s 1s 491432750e-09 1s 1s 491435470e-09 0s 0s 491438190e-09 1s 1s 491443030e-09 1s 1s 491445710e-09 0s 0s 491448430e-09 1s 1s 491453310e-09 1s 1s 491455950e-09 0s 0s 491458670e-09 1s 1s 491463590e-09 1s 1s 491466190e-09 0s 0s 491468910e-09 1s 1s 491473870e-09 1s 1s 491476430e-09 0s 0s 491479150e-09 1s 1s 491484150e-09 1s 1s 491486670e-09 0s 0s 491489390e-09 1s 1s 491494430e-09 1s 1s 491496910e-09 0s 0s 491499630e-09 1s 1s 491504710e-09 1s 1s 491507150e-09 0s 0s 491509870e-09 1s 1s 491514990e-09 1s 1s 491517390e-09 0s 0s 491520110e-09 1s 1s 491525270e-09 1s 1s 491527630e-09 0s 0s 491530350e-09 1s 1s 491535550e-09 1s 1s 491537870e-09 0s 0s 491540590e-09 1s 1s 491545830e-09 1s 1s 491548110e-09 0s 0s 491550830e-09 1s 1s 491556110e-09 1s 1s 491558350e-09 0s 0s 491561070e-09 1s 1s 491566390e-09 1s 1s 491568590e-09 0s 0s 491571310e-09 1s 1s 491576670e-09 1s 1s 491578830e-09 0s 0s 491581550e-09 1s 1s 491586950e-09 1s 1s 491589070e-09 0s 0s 491591790e-09 1s 1s 491597230e-09 1s 1s 491599310e-09 0s 0s 491602030e-09 1s 1s 491607510e-09 1s 1s 491609550e-09 0s 0s 491612270e-09 1s 1s 491617790e-09 1s 1s 491619790e-09 0s 0s 491622510e-09 1s 1s 491628070e-09 1s 1s 491630030e-09 0s 0s 491632750e-09 1s 1s 491638350e-09 1s 1s 491640270e-09 0s 0s 491642990e-09 1s 1s 491648630e-09 1s 1s 491650510e-09 0s 0s 491653230e-09 1s 1s 491658910e-09 1s 1s 491660750e-09 0s 0s 491663470e-09 1s 1s 491669190e-09 1s 1s 491670990e-09 0s 0s 491673710e-09 1s 1s 491679470e-09 1s 1s 491681230e-09 0s 0s 491683950e-09 1s 1s 491689750e-09 1s 1s 491691470e-09 0s 0s 491694190e-09 1s 1s 491700030e-09 1s 1s 491701710e-09 0s 0s 491704430e-09 1s 1s 491710310e-09 1s 1s 491711950e-09 0s 0s 491714670e-09 1s 1s 491720590e-09 1s 1s 491722190e-09 0s 0s 491724910e-09 1s 1s 491730870e-09 1s 1s 491732430e-09 0s 0s 491735150e-09 1s 1s 491741150e-09 1s 1s 491742670e-09 0s 0s 491745390e-09 1s 1s 491751430e-09 1s 1s 491752910e-09 0s 0s 491755630e-09 1s 1s 491761710e-09 1s 1s 491763150e-09 0s 0s 491765870e-09 1s 1s 491771990e-09 1s 1s 491773390e-09 0s 0s 491776110e-09 1s 1s 491782270e-09 1s 1s 491783630e-09 0s 0s 491786350e-09 1s 1s 491792550e-09 1s 1s 491793870e-09 0s 0s 491796590e-09 1s 1s 491802830e-09 1s 1s 491804110e-09 0s 0s 491806830e-09 1s 1s 491813110e-09 1s 1s 491814350e-09 0s 0s 491817070e-09 1s 1s 491823390e-09 1s 1s 491824590e-09 0s 0s 491827310e-09 1s 1s 491833670e-09 1s 1s 491834830e-09 0s 0s 491837550e-09 1s 1s 491843950e-09 1s 1s 491845070e-09 0s 0s 491847790e-09 1s 1s 491854230e-09 1s 1s 491855310e-09 0s 0s 491858030e-09 1s 1s 491864510e-09 1s 1s 491865550e-09 0s 0s 491868270e-09 1s 1s 491874790e-09 1s 1s 491875790e-09 0s 0s 491878510e-09 1s 1s 491885070e-09 1s 1s 491886030e-09 0s 0s 491888750e-09 1s 1s 491895350e-09 1s 1s 491896270e-09 0s 0s 491898990e-09 1s 1s 491905630e-09 1s 1s 491906510e-09 0s 0s 491909230e-09 1s 1s 491915910e-09 1s 1s 491916750e-09 0s 0s 491919470e-09 1s 1s 491926190e-09 1s 1s 491926990e-09 0s 0s 491929710e-09 1s 1s 491936470e-09 1s 1s 491937230e-09 0s 0s 491939950e-09 1s 1s 491946750e-09 1s 1s 491947470e-09 0s 0s 491950190e-09 1s 1s 491957030e-09 1s 1s 491957710e-09 0s 0s 491960430e-09 1s 1s 491967310e-09 1s 1s 491967950e-09 0s 0s 491970670e-09 1s 1s 491977590e-09 1s 1s 491978190e-09 0s 0s 491980910e-09 1s 1s 491987870e-09 1s 1s 491988430e-09 0s 0s 491991150e-09 1s 1s 491998150e-09 1s 1s 491998670e-09 0s 0s 492001390e-09 1s 1s 492008430e-09 1s 1s 492008910e-09 0s 0s 492011630e-09 1s 1s 492018710e-09 1s 1s 492019150e-09 0s 0s 492021870e-09 1s 1s 492028990e-09 1s 1s 492029390e-09 0s 0s 492032110e-09 1s 1s 492039270e-09 1s 1s 492039630e-09 0s 0s 492042350e-09 1s 1s 492049550e-09 1s 1s 492049870e-09 0s 0s 492052590e-09 1s 1s 492059830e-09 1s 1s 492060110e-09 0s 0s 492062830e-09 1s 1s 492070110e-09 1s 1s 492070350e-09 0s 0s 492073070e-09 1s 1s 492080390e-09 1s 1s 492080590e-09 0s 0s 492083310e-09 1s 1s 492090670e-09 1s 1s 492090830e-09 0s 0s 492093550e-09 1s 1s 492100950e-09 1s 1s 492101070e-09 0s 0s 492103790e-09 1s 1s 492111230e-09 1s 1s 492111310e-09 0s 0s 492114030e-09 1s 1s 492121510e-09 1s 1s 492121550e-09 0s 0s 492124270e-09 1s 1s 492131790e-09 0s 0s 492134510e-09 1s 1s 492142030e-09 0s 0s 492142070e-09 0s 0s 492144750e-09 1s 1s 492152270e-09 0s 0s 492152350e-09 0s 0s 492154990e-09 1s 1s 492162510e-09 0s 0s 492162630e-09 0s 0s 492165230e-09 1s 1s 492172750e-09 0s 0s 492172910e-09 0s 0s 492175470e-09 1s 1s 492182990e-09 0s 0s 492183190e-09 0s 0s 492185710e-09 1s 1s 492193230e-09 0s 0s 492193470e-09 0s 0s 492195950e-09 1s 1s 492203470e-09 0s 0s 492203750e-09 0s 0s 492206190e-09 1s 1s 492213710e-09 0s 0s 492214030e-09 0s 0s 492216430e-09 1s 1s 492223950e-09 0s 0s 492224310e-09 0s 0s 492226670e-09 1s 1s 492234190e-09 0s 0s 492234590e-09 0s 0s 492236910e-09 1s 1s 492244430e-09 0s 0s 492244870e-09 0s 0s 492247150e-09 1s 1s 492254670e-09 0s 0s 492255150e-09 0s 0s 492257390e-09 1s 1s 492264910e-09 0s 0s 492265430e-09 0s 0s 492267630e-09 1s 1s 492275150e-09 0s 0s 492275710e-09 0s 0s 492277870e-09 1s 1s 492285390e-09 0s 0s 492285990e-09 0s 0s 492288110e-09 1s 1s 492295630e-09 0s 0s 492296270e-09 0s 0s 492298350e-09 1s 1s 492305870e-09 0s 0s 492306550e-09 0s 0s 492308590e-09 1s 1s 492316110e-09 0s 0s 492316830e-09 0s 0s 492318830e-09 1s 1s 492326350e-09 0s 0s 492327110e-09 0s 0s 492329070e-09 1s 1s 492336590e-09 0s 0s 492337390e-09 0s 0s 492339310e-09 1s 1s 492346830e-09 0s 0s 492347670e-09 0s 0s 492349550e-09 1s 1s 492357070e-09 0s 0s 492357950e-09 0s 0s 492359790e-09 1s 1s 492367310e-09 0s 0s 492368230e-09 0s 0s 492370030e-09 1s 1s 492377550e-09 0s 0s 492378510e-09 0s 0s 492380270e-09 1s 1s 492387790e-09 0s 0s 492388790e-09 0s 0s 492390510e-09 1s 1s 492398030e-09 0s 0s 492399070e-09 0s 0s 492400750e-09 1s 1s 492408270e-09 0s 0s 492409350e-09 0s 0s 492410990e-09 1s 1s 492418510e-09 0s 0s 492419630e-09 0s 0s 492421230e-09 1s 1s 492428750e-09 0s 0s 492429910e-09 0s 0s 492431470e-09 1s 1s 492438990e-09 0s 0s 492440190e-09 0s 0s 492441710e-09 1s 1s 492449230e-09 0s 0s 492450470e-09 0s 0s 492451950e-09 1s 1s 492459470e-09 0s 0s 492460750e-09 0s 0s 492462190e-09 1s 1s 492469710e-09 0s 0s 492471030e-09 0s 0s 492472430e-09 1s 1s 492479950e-09 0s 0s 492481310e-09 0s 0s 492482670e-09 1s 1s 492490190e-09 0s 0s 492491590e-09 0s 0s 492492910e-09 1s 1s 492500430e-09 0s 0s 492501870e-09 0s 0s 492503150e-09 1s 1s 492510670e-09 0s 0s 492512150e-09 0s 0s 492513390e-09 1s 1s 492520910e-09 0s 0s 492522430e-09 0s 0s 492523630e-09 1s 1s 492531150e-09 0s 0s 492532710e-09 0s 0s 492533870e-09 1s 1s 492541390e-09 0s 0s 492542990e-09 0s 0s 492544110e-09 1s 1s 492551630e-09 0s 0s 492553270e-09 0s 0s 492554350e-09 1s 1s 492561870e-09 0s 0s 492563550e-09 0s 0s 492564590e-09 1s 1s 492572110e-09 0s 0s 492573830e-09 0s 0s 492574830e-09 1s 1s 492582350e-09 0s 0s 492584110e-09 0s 0s 492585070e-09 1s 1s 492592590e-09 0s 0s 492594390e-09 0s 0s 492595310e-09 1s 1s 492602830e-09 0s 0s 492604670e-09 0s 0s 492605550e-09 1s 1s 492613070e-09 0s 0s 492614950e-09 0s 0s 492615790e-09 1s 1s 492623310e-09 0s 0s 492625230e-09 0s 0s 492626030e-09 1s 1s 492633550e-09 0s 0s 492635510e-09 0s 0s 492636270e-09 1s 1s 492643790e-09 0s 0s 492645790e-09 0s 0s 492646510e-09 1s 1s 492654030e-09 0s 0s 492656070e-09 0s 0s 492656750e-09 1s 1s 492664270e-09 0s 0s 492666350e-09 0s 0s 492666990e-09 1s 1s 492674510e-09 0s 0s 492676630e-09 0s 0s 492677230e-09 1s 1s 492684750e-09 0s 0s 492686910e-09 0s 0s 492687470e-09 1s 1s 492694990e-09 0s 0s 492697190e-09 0s 0s 492697710e-09 1s 1s 492705230e-09 0s 0s 492707470e-09 0s 0s 492707950e-09 1s 1s 492715470e-09 0s 0s 492717750e-09 0s 0s 492718190e-09 1s 1s 492725710e-09 0s 0s 492728030e-09 0s 0s 492728430e-09 1s 1s 492735950e-09 0s 0s 492738310e-09 0s 0s 492738670e-09 1s 1s 492746190e-09 0s 0s 492748590e-09 0s 0s 492748910e-09 1s 1s 492756430e-09 0s 0s 492758870e-09 0s 0s 492759150e-09 1s 1s 492766670e-09 0s 0s 492769150e-09 0s 0s 492769390e-09 1s 1s 492776910e-09 0s 0s 492779430e-09 0s 0s 492779630e-09 1s 1s 492787150e-09 0s 0s 492789710e-09 0s 0s 492789870e-09 1s 1s 492797390e-09 0s 0s 492799990e-09 0s 0s 492800110e-09 1s 1s 492807630e-09 0s 0s 492810270e-09 0s 0s 492810350e-09 1s 1s 492817870e-09 0s 0s 492820550e-09 0s 0s 492820590e-09 1s 1s 492828110e-09 0s 0s 492830830e-09 1s 1s 492830870e-09 1s 1s 492838390e-09 0s 0s 492841070e-09 1s 1s 492841150e-09 1s 1s 492848630e-09 0s 0s 492851310e-09 1s 1s 492851430e-09 1s 1s 492858870e-09 0s 0s 492861550e-09 1s 1s 492861710e-09 1s 1s 492869110e-09 0s 0s 492871790e-09 1s 1s 492871990e-09 1s 1s 492879350e-09 0s 0s 492882030e-09 1s 1s 492882270e-09 1s 1s 492889590e-09 0s 0s 492892270e-09 1s 1s 492892550e-09 1s 1s 492899830e-09 0s 0s 492902510e-09 1s 1s 492902830e-09 1s 1s 492910070e-09 0s 0s 492912750e-09 1s 1s 492913110e-09 1s 1s 492920310e-09 0s 0s 492922990e-09 1s 1s 492923390e-09 1s 1s 492930550e-09 0s 0s 492933230e-09 1s 1s 492933670e-09 1s 1s 492940790e-09 0s 0s 492943470e-09 1s 1s 492943950e-09 1s 1s 492951030e-09 0s 0s 492953710e-09 1s 1s 492954230e-09 1s 1s 492961270e-09 0s 0s 492963950e-09 1s 1s 492964510e-09 1s 1s 492971510e-09 0s 0s 492974190e-09 1s 1s 492974790e-09 1s 1s 492981750e-09 0s 0s 492984430e-09 1s 1s 492985070e-09 1s 1s 492991990e-09 0s 0s 492994670e-09 1s 1s 492995350e-09 1s 1s 493002230e-09 0s 0s 493004910e-09 1s 1s 493005630e-09 1s 1s 493012470e-09 0s 0s 493015150e-09 1s 1s 493015910e-09 1s 1s 493022710e-09 0s 0s 493025390e-09 1s 1s 493026190e-09 1s 1s 493032950e-09 0s 0s 493035630e-09 1s 1s 493036470e-09 1s 1s 493043190e-09 0s 0s 493045870e-09 1s 1s 493046750e-09 1s 1s 493053430e-09 0s 0s 493056110e-09 1s 1s 493057030e-09 1s 1s 493063670e-09 0s 0s 493066350e-09 1s 1s 493067310e-09 1s 1s 493073910e-09 0s 0s 493076590e-09 1s 1s 493077590e-09 1s 1s 493084150e-09 0s 0s 493086830e-09 1s 1s 493087870e-09 1s 1s 493094390e-09 0s 0s 493097070e-09 1s 1s 493098150e-09 1s 1s 493104630e-09 0s 0s 493107310e-09 1s 1s 493108430e-09 1s 1s 493114870e-09 0s 0s 493117550e-09 1s 1s 493118710e-09 1s 1s 493125110e-09 0s 0s 493127790e-09 1s 1s 493128990e-09 1s 1s 493135350e-09 0s 0s 493138030e-09 1s 1s 493139270e-09 1s 1s 493145590e-09 0s 0s 493148270e-09 1s 1s 493149550e-09 1s 1s 493155830e-09 0s 0s 493158510e-09 1s 1s 493159830e-09 1s 1s 493166070e-09 0s 0s 493168750e-09 1s 1s 493170110e-09 1s 1s 493176310e-09 0s 0s 493178990e-09 1s 1s 493180390e-09 1s 1s 493186550e-09 0s 0s 493189230e-09 1s 1s 493190670e-09 1s 1s 493196790e-09 0s 0s 493199470e-09 1s 1s 493200950e-09 1s 1s 493207030e-09 0s 0s 493209710e-09 1s 1s 493211230e-09 1s 1s 493217270e-09 0s 0s 493219950e-09 1s 1s 493221510e-09 1s 1s 493227510e-09 0s 0s 493230190e-09 1s 1s 493231790e-09 1s 1s 493237750e-09 0s 0s 493240430e-09 1s 1s 493242070e-09 1s 1s 493247990e-09 0s 0s 493250670e-09 1s 1s 493252350e-09 1s 1s 493258230e-09 0s 0s 493260910e-09 1s 1s 493262630e-09 1s 1s 493268470e-09 0s 0s 493271150e-09 1s 1s 493272910e-09 1s 1s 493278710e-09 0s 0s 493281390e-09 1s 1s 493283190e-09 1s 1s 493288950e-09 0s 0s 493291630e-09 1s 1s 493293470e-09 1s 1s 493299190e-09 0s 0s 493301870e-09 1s 1s 493303750e-09 1s 1s 493309430e-09 0s 0s 493312110e-09 1s 1s 493314030e-09 1s 1s 493319670e-09 0s 0s 493322350e-09 1s 1s 493324310e-09 1s 1s 493329910e-09 0s 0s 493332590e-09 1s 1s 493334590e-09 1s 1s 493340150e-09 0s 0s 493342830e-09 1s 1s 493344870e-09 1s 1s 493350390e-09 0s 0s 493353070e-09 1s 1s 493355150e-09 1s 1s 493360630e-09 0s 0s 493363310e-09 1s 1s 493365430e-09 1s 1s 493370870e-09 0s 0s 493373550e-09 1s 1s 493375710e-09 1s 1s 493381110e-09 0s 0s 493383790e-09 1s 1s 493385990e-09 1s 1s 493391350e-09 0s 0s 493394030e-09 1s 1s 493396270e-09 1s 1s 493401590e-09 0s 0s 493404270e-09 1s 1s 493406550e-09 1s 1s 493411830e-09 0s 0s 493414510e-09 1s 1s 493416830e-09 1s 1s 493422070e-09 0s 0s 493424750e-09 1s 1s 493427110e-09 1s 1s 493432310e-09 0s 0s 493434990e-09 1s 1s 493437390e-09 1s 1s 493442550e-09 0s 0s 493445230e-09 1s 1s 493447670e-09 1s 1s 493452790e-09 0s 0s 493455470e-09 1s 1s 493457950e-09 1s 1s 493463030e-09 0s 0s 493465710e-09 1s 1s 493468230e-09 1s 1s 493473270e-09 0s 0s 493475950e-09 1s 1s 493478510e-09 1s 1s 493483510e-09 0s 0s 493486190e-09 1s 1s 493488790e-09 1s 1s 493493750e-09 0s 0s 493496430e-09 1s 1s 493499070e-09 1s 1s 493503990e-09 0s 0s 493506670e-09 1s 1s 493509350e-09 1s 1s 493514230e-09 0s 0s 493516910e-09 1s 1s 493519630e-09 1s 1s 493524470e-09 0s 0s 493527150e-09 1s 1s 493529910e-09 1s 1s 493534710e-09 0s 0s 493537390e-09 1s 1s 493540190e-09 1s 1s 493544950e-09 0s 0s 493547630e-09 1s 1s 493550470e-09 1s 1s 493555190e-09 0s 0s 493557870e-09 1s 1s 493560750e-09 1s 1s 493565430e-09 0s 0s 493568110e-09 1s 1s 493571030e-09 1s 1s 493575670e-09 0s 0s 493578350e-09 1s 1s 493581310e-09 1s 1s 493585910e-09 0s 0s 493588590e-09 1s 1s 493591590e-09 1s 1s 493596150e-09 0s 0s 493598830e-09 1s 1s 493601870e-09 1s 1s 493606390e-09 0s 0s 493609070e-09 1s 1s 493612150e-09 1s 1s 493616630e-09 0s 0s 493619310e-09 1s 1s 493622430e-09 1s 1s 493626870e-09 0s 0s 493629550e-09 1s 1s 493632710e-09 1s 1s 493637110e-09 0s 0s 493639790e-09 1s 1s 493642990e-09 1s 1s 493647350e-09 0s 0s 493650030e-09 1s 1s 493653270e-09 1s 1s 493657590e-09 0s 0s 493660270e-09 1s 1s 493663550e-09 1s 1s 493667830e-09 0s 0s 493670510e-09 1s 1s 493673830e-09 1s 1s 493678070e-09 0s 0s 493680750e-09 1s 1s 493684110e-09 1s 1s 493688310e-09 0s 0s 493690990e-09 1s 1s 493694390e-09 1s 1s 493698550e-09 0s 0s 493701230e-09 1s 1s 493704670e-09 1s 1s 493708790e-09 0s 0s 493711470e-09 1s 1s 493714950e-09 1s 1s 493719030e-09 0s 0s 493721710e-09 1s 1s 493725230e-09 1s 1s 493729270e-09 0s 0s 493731950e-09 1s 1s 493735510e-09 1s 1s 493739510e-09 0s 0s 493742190e-09 1s 1s 493745790e-09 1s 1s 493749750e-09 0s 0s 493752430e-09 1s 1s 493756070e-09 1s 1s 493759990e-09 0s 0s 493762670e-09 1s 1s 493766350e-09 1s 1s 493770230e-09 0s 0s 493772910e-09 1s 1s 493776630e-09 1s 1s 493780470e-09 0s 0s 493783150e-09 1s 1s 493786910e-09 1s 1s 493790710e-09 0s 0s 493793390e-09 1s 1s 493797190e-09 1s 1s 493800950e-09 0s 0s 493803630e-09 1s 1s 493807470e-09 1s 1s 493811190e-09 0s 0s 493813870e-09 1s 1s 493817750e-09 1s 1s 493821430e-09 0s 0s 493824110e-09 1s 1s 493828030e-09 1s 1s 493831670e-09 0s 0s 493834350e-09 1s 1s 493838310e-09 1s 1s 493841910e-09 0s 0s 493844590e-09 1s 1s 493848590e-09 1s 1s 493852150e-09 0s 0s 493854830e-09 1s 1s 493858870e-09 1s 1s 493862390e-09 0s 0s 493865070e-09 1s 1s 493869150e-09 1s 1s 493872630e-09 0s 0s 493875310e-09 1s 1s 493879430e-09 1s 1s 493882870e-09 0s 0s 493885550e-09 1s 1s 493889710e-09 1s 1s 493893110e-09 0s 0s 493895790e-09 1s 1s 493899990e-09 1s 1s 493903350e-09 0s 0s 493906030e-09 1s 1s 493910270e-09 1s 1s 493913590e-09 0s 0s 493916270e-09 1s 1s 493920550e-09 1s 1s 493923830e-09 0s 0s 493926510e-09 1s 1s 493930830e-09 1s 1s 493934070e-09 0s 0s 493936750e-09 1s 1s 493941110e-09 1s 1s 493944310e-09 0s 0s 493946990e-09 1s 1s 493951390e-09 1s 1s 493954550e-09 0s 0s 493957230e-09 1s 1s 493961670e-09 1s 1s 493964790e-09 0s 0s 493967470e-09 1s 1s 493971950e-09 1s 1s 493975030e-09 0s 0s 493977710e-09 1s 1s 493982230e-09 1s 1s 493985270e-09 0s 0s 493987950e-09 1s 1s 493992510e-09 1s 1s 493995510e-09 0s 0s 493998190e-09 1s 1s 494002790e-09 1s 1s 494005750e-09 0s 0s 494008430e-09 1s 1s 494013070e-09 1s 1s 494015990e-09 0s 0s 494018670e-09 1s 1s 494023350e-09 1s 1s 494026230e-09 0s 0s 494028910e-09 1s 1s 494033630e-09 1s 1s 494036470e-09 0s 0s 494039150e-09 1s 1s 494043910e-09 1s 1s 494046710e-09 0s 0s 494049390e-09 1s 1s 494054190e-09 1s 1s 494056950e-09 0s 0s 494059630e-09 1s 1s 494064470e-09 1s 1s 494067190e-09 0s 0s 494069870e-09 1s 1s 494074750e-09 1s 1s 494077430e-09 0s 0s 494080110e-09 1s 1s 494085030e-09 1s 1s 494087670e-09 0s 0s 494090350e-09 1s 1s 494095310e-09 1s 1s 494097910e-09 0s 0s 494100590e-09 1s 1s 494105590e-09 1s 1s 494108150e-09 0s 0s 494110830e-09 1s 1s 494115870e-09 1s 1s 494118390e-09 0s 0s 494121070e-09 1s 1s 494126150e-09 1s 1s 494128630e-09 0s 0s 494131310e-09 1s 1s 494136430e-09 1s 1s 494138870e-09 0s 0s 494141550e-09 1s 1s 494146710e-09 1s 1s 494149110e-09 0s 0s 494151790e-09 1s 1s 494156990e-09 1s 1s 494159350e-09 0s 0s 494162030e-09 1s 1s 494167270e-09 1s 1s 494169590e-09 0s 0s 494172270e-09 1s 1s 494177550e-09 1s 1s 494179830e-09 0s 0s 494182510e-09 1s 1s 494187830e-09 1s 1s 494190070e-09 0s 0s 494192750e-09 1s 1s 494198110e-09 1s 1s 494200310e-09 0s 0s 494202990e-09 1s 1s 494208390e-09 1s 1s 494210550e-09 0s 0s 494213230e-09 1s 1s 494218670e-09 1s 1s 494220790e-09 0s 0s 494223470e-09 1s 1s 494228950e-09 1s 1s 494231030e-09 0s 0s 494233710e-09 1s 1s 494239230e-09 1s 1s 494241270e-09 0s 0s 494243950e-09 1s 1s 494249510e-09 1s 1s 494251510e-09 0s 0s 494254190e-09 1s 1s 494259790e-09 1s 1s 494261750e-09 0s 0s 494264430e-09 1s 1s 494270070e-09 1s 1s 494271990e-09 0s 0s 494274670e-09 1s 1s 494280350e-09 1s 1s 494282230e-09 0s 0s 494284910e-09 1s 1s 494290630e-09 1s 1s 494292470e-09 0s 0s 494295150e-09 1s 1s 494300910e-09 1s 1s 494302710e-09 0s 0s 494305390e-09 1s 1s 494311190e-09 1s 1s 494312950e-09 0s 0s 494315630e-09 1s 1s 494321470e-09 1s 1s 494323190e-09 0s 0s 494325870e-09 1s 1s 494331750e-09 1s 1s 494333430e-09 0s 0s 494336110e-09 1s 1s 494342030e-09 1s 1s 494343670e-09 0s 0s 494346350e-09 1s 1s 494352310e-09 1s 1s 494353910e-09 0s 0s 494356590e-09 1s 1s 494362590e-09 1s 1s 494364150e-09 0s 0s 494366830e-09 1s 1s 494372870e-09 1s 1s 494374390e-09 0s 0s 494377070e-09 1s 1s 494383150e-09 1s 1s 494384630e-09 0s 0s 494387310e-09 1s 1s 494393430e-09 1s 1s 494394870e-09 0s 0s 494397550e-09 1s 1s 494403710e-09 1s 1s 494405110e-09 0s 0s 494407790e-09 1s 1s 494413990e-09 1s 1s 494415350e-09 0s 0s 494418030e-09 1s 1s 494424270e-09 1s 1s 494425590e-09 0s 0s 494428270e-09 1s 1s 494434550e-09 1s 1s 494435830e-09 0s 0s 494438510e-09 1s 1s 494444830e-09 1s 1s 494446070e-09 0s 0s 494448750e-09 1s 1s 494455110e-09 1s 1s 494456310e-09 0s 0s 494458990e-09 1s 1s 494465390e-09 1s 1s 494466550e-09 0s 0s 494469230e-09 1s 1s 494475670e-09 1s 1s 494476790e-09 0s 0s 494479470e-09 1s 1s 494485950e-09 1s 1s 494487030e-09 0s 0s 494489710e-09 1s 1s 494496230e-09 1s 1s 494497270e-09 0s 0s 494499950e-09 1s 1s 494506510e-09 1s 1s 494507510e-09 0s 0s 494510190e-09 1s 1s 494516790e-09 1s 1s 494517750e-09 0s 0s 494520430e-09 1s 1s 494527070e-09 1s 1s 494527990e-09 0s 0s 494530670e-09 1s 1s 494537350e-09 1s 1s 494538230e-09 0s 0s 494540910e-09 1s 1s 494547630e-09 1s 1s 494548470e-09 0s 0s 494551150e-09 1s 1s 494557910e-09 1s 1s 494558710e-09 0s 0s 494561390e-09 1s 1s 494568190e-09 1s 1s 494568950e-09 0s 0s 494571630e-09 1s 1s 494578470e-09 1s 1s 494579190e-09 0s 0s 494581870e-09 1s 1s 494588750e-09 1s 1s 494589430e-09 0s 0s 494592110e-09 1s 1s 494599030e-09 1s 1s 494599670e-09 0s 0s 494602350e-09 1s 1s 494609310e-09 1s 1s 494609910e-09 0s 0s 494612590e-09 1s 1s 494619590e-09 1s 1s 494620150e-09 0s 0s 494622830e-09 1s 1s 494629870e-09 1s 1s 494630390e-09 0s 0s 494633070e-09 1s 1s 494640150e-09 1s 1s 494640630e-09 0s 0s 494643310e-09 1s 1s 494650430e-09 1s 1s 494650870e-09 0s 0s 494653550e-09 1s 1s 494660710e-09 1s 1s 494661110e-09 0s 0s 494663790e-09 1s 1s 494670990e-09 1s 1s 494671350e-09 0s 0s 494674030e-09 1s 1s 494681270e-09 1s 1s 494681590e-09 0s 0s 494684270e-09 1s 1s 494691550e-09 1s 1s 494691830e-09 0s 0s 494694510e-09 1s 1s 494701830e-09 1s 1s 494702070e-09 0s 0s 494704750e-09 1s 1s 494712110e-09 1s 1s 494712310e-09 0s 0s 494714990e-09 1s 1s 494722390e-09 1s 1s 494722550e-09 0s 0s 494725230e-09 1s 1s 494732670e-09 1s 1s 494732790e-09 0s 0s 494735470e-09 1s 1s 494742950e-09 1s 1s 494743030e-09 0s 0s 494745710e-09 1s 1s 494753230e-09 1s 1s 494753270e-09 0s 0s 494755950e-09 1s 1s 494763510e-09 0s 0s 494766190e-09 1s 1s 494773750e-09 0s 0s 494773790e-09 0s 0s 494776430e-09 1s 1s 494783990e-09 0s 0s 494784070e-09 0s 0s 494786670e-09 1s 1s 494794230e-09 0s 0s 494794350e-09 0s 0s 494796910e-09 1s 1s 494804470e-09 0s 0s 494804630e-09 0s 0s 494807150e-09 1s 1s 494814710e-09 0s 0s 494814910e-09 0s 0s 494817390e-09 1s 1s 494824950e-09 0s 0s 494825190e-09 0s 0s 494827630e-09 1s 1s 494835190e-09 0s 0s 494835470e-09 0s 0s 494837870e-09 1s 1s 494845430e-09 0s 0s 494845750e-09 0s 0s 494848110e-09 1s 1s 494855670e-09 0s 0s 494856030e-09 0s 0s 494858350e-09 1s 1s 494865910e-09 0s 0s 494866310e-09 0s 0s 494868590e-09 1s 1s 494876150e-09 0s 0s 494876590e-09 0s 0s 494878830e-09 1s 1s 494886390e-09 0s 0s 494886870e-09 0s 0s 494889070e-09 1s 1s 494896630e-09 0s 0s 494897150e-09 0s 0s 494899310e-09 1s 1s 494906870e-09 0s 0s 494907430e-09 0s 0s 494909550e-09 1s 1s 494917110e-09 0s 0s 494917710e-09 0s 0s 494919790e-09 1s 1s 494927350e-09 0s 0s 494927990e-09 0s 0s 494930030e-09 1s 1s 494937590e-09 0s 0s 494938270e-09 0s 0s 494940270e-09 1s 1s 494947830e-09 0s 0s 494948550e-09 0s 0s 494950510e-09 1s 1s 494958070e-09 0s 0s 494958830e-09 0s 0s 494960750e-09 1s 1s 494968310e-09 0s 0s 494969110e-09 0s 0s 494970990e-09 1s 1s 494978550e-09 0s 0s 494979390e-09 0s 0s 494981230e-09 1s 1s 494988790e-09 0s 0s 494989670e-09 0s 0s 494991470e-09 1s 1s 494999030e-09 0s 0s 494999950e-09 0s 0s 495001710e-09 1s 1s 495009270e-09 0s 0s 495010230e-09 0s 0s 495011950e-09 1s 1s 495019510e-09 0s 0s 495020510e-09 0s 0s 495022190e-09 1s 1s 495029750e-09 0s 0s 495030790e-09 0s 0s 495032430e-09 1s 1s 495039990e-09 0s 0s 495041070e-09 0s 0s 495042670e-09 1s 1s 495050230e-09 0s 0s 495051350e-09 0s 0s 495052910e-09 1s 1s 495060470e-09 0s 0s 495061630e-09 0s 0s 495063150e-09 1s 1s 495070710e-09 0s 0s 495071910e-09 0s 0s 495073390e-09 1s 1s 495080950e-09 0s 0s 495082190e-09 0s 0s 495083630e-09 1s 1s 495091190e-09 0s 0s 495092470e-09 0s 0s 495093870e-09 1s 1s 495101430e-09 0s 0s 495102750e-09 0s 0s 495104110e-09 1s 1s 495111670e-09 0s 0s 495113030e-09 0s 0s 495114350e-09 1s 1s 495121910e-09 0s 0s 495123310e-09 0s 0s 495124590e-09 1s 1s 495132150e-09 0s 0s 495133590e-09 0s 0s 495134830e-09 1s 1s 495142390e-09 0s 0s 495143870e-09 0s 0s 495145070e-09 1s 1s 495152630e-09 0s 0s 495154150e-09 0s 0s 495155310e-09 1s 1s 495162870e-09 0s 0s 495164430e-09 0s 0s 495165550e-09 1s 1s 495173110e-09 0s 0s 495174710e-09 0s 0s 495175790e-09 1s 1s 495183350e-09 0s 0s 495184990e-09 0s 0s 495186030e-09 1s 1s 495193590e-09 0s 0s 495195270e-09 0s 0s 495196270e-09 1s 1s 495203830e-09 0s 0s 495205550e-09 0s 0s 495206510e-09 1s 1s 495214070e-09 0s 0s 495215830e-09 0s 0s 495216750e-09 1s 1s 495224310e-09 0s 0s 495226110e-09 0s 0s 495226990e-09 1s 1s 495234550e-09 0s 0s 495236390e-09 0s 0s 495237230e-09 1s 1s 495244790e-09 0s 0s 495246670e-09 0s 0s 495247470e-09 1s 1s 495255030e-09 0s 0s 495256950e-09 0s 0s 495257710e-09 1s 1s 495265270e-09 0s 0s 495267230e-09 0s 0s 495267950e-09 1s 1s 495275510e-09 0s 0s 495277510e-09 0s 0s 495278190e-09 1s 1s 495285750e-09 0s 0s 495287790e-09 0s 0s 495288430e-09 1s 1s 495295990e-09 0s 0s 495298070e-09 0s 0s 495298670e-09 1s 1s 495306230e-09 0s 0s 495308350e-09 0s 0s 495308910e-09 1s 1s 495316470e-09 0s 0s 495318630e-09 0s 0s 495319150e-09 1s 1s 495326710e-09 0s 0s 495328910e-09 0s 0s 495329390e-09 1s 1s 495336950e-09 0s 0s 495339190e-09 0s 0s 495339630e-09 1s 1s 495347190e-09 0s 0s 495349470e-09 0s 0s 495349870e-09 1s 1s 495357430e-09 0s 0s 495359750e-09 0s 0s 495360110e-09 1s 1s 495367670e-09 0s 0s 495370030e-09 0s 0s 495370350e-09 1s 1s 495377910e-09 0s 0s 495380310e-09 0s 0s 495380590e-09 1s 1s 495388150e-09 0s 0s 495390590e-09 0s 0s 495390830e-09 1s 1s 495398390e-09 0s 0s 495400870e-09 0s 0s 495401070e-09 1s 1s 495408630e-09 0s 0s 495411150e-09 0s 0s 495411310e-09 1s 1s 495418870e-09 0s 0s 495421430e-09 0s 0s 495421550e-09 1s 1s 495429110e-09 0s 0s 495431710e-09 0s 0s 495431790e-09 1s 1s 495439350e-09 0s 0s 495441990e-09 0s 0s 495442030e-09 1s 1s 495449590e-09 0s 0s 495452270e-09 1s 1s 495452310e-09 1s 1s 495459870e-09 0s 0s 495462510e-09 1s 1s 495462590e-09 1s 1s 495470110e-09 0s 0s 495472750e-09 1s 1s 495472870e-09 1s 1s 495480350e-09 0s 0s 495482990e-09 1s 1s 495483150e-09 1s 1s 495490590e-09 0s 0s 495493230e-09 1s 1s 495493430e-09 1s 1s 495500830e-09 0s 0s 495503470e-09 1s 1s 495503710e-09 1s 1s 495511070e-09 0s 0s 495513710e-09 1s 1s 495513990e-09 1s 1s 495521310e-09 0s 0s 495523950e-09 1s 1s 495524270e-09 1s 1s 495531550e-09 0s 0s 495534190e-09 1s 1s 495534550e-09 1s 1s 495541790e-09 0s 0s 495544430e-09 1s 1s 495544830e-09 1s 1s 495552030e-09 0s 0s 495554670e-09 1s 1s 495555110e-09 1s 1s 495562270e-09 0s 0s 495564910e-09 1s 1s 495565390e-09 1s 1s 495572510e-09 0s 0s 495575150e-09 1s 1s 495575670e-09 1s 1s 495582750e-09 0s 0s 495585390e-09 1s 1s 495585950e-09 1s 1s 495592990e-09 0s 0s 495595630e-09 1s 1s 495596230e-09 1s 1s 495603230e-09 0s 0s 495605870e-09 1s 1s 495606510e-09 1s 1s 495613470e-09 0s 0s 495616110e-09 1s 1s 495616790e-09 1s 1s 495623710e-09 0s 0s 495626350e-09 1s 1s 495627070e-09 1s 1s 495633950e-09 0s 0s 495636590e-09 1s 1s 495637350e-09 1s 1s 495644190e-09 0s 0s 495646830e-09 1s 1s 495647630e-09 1s 1s 495654430e-09 0s 0s 495657070e-09 1s 1s 495657910e-09 1s 1s 495664670e-09 0s 0s 495667310e-09 1s 1s 495668190e-09 1s 1s 495674910e-09 0s 0s 495677550e-09 1s 1s 495678470e-09 1s 1s 495685150e-09 0s 0s 495687790e-09 1s 1s 495688750e-09 1s 1s 495695390e-09 0s 0s 495698030e-09 1s 1s 495699030e-09 1s 1s 495705630e-09 0s 0s 495708270e-09 1s 1s 495709310e-09 1s 1s 495715870e-09 0s 0s 495718510e-09 1s 1s 495719590e-09 1s 1s 495726110e-09 0s 0s 495728750e-09 1s 1s 495729870e-09 1s 1s 495736350e-09 0s 0s 495738990e-09 1s 1s 495740150e-09 1s 1s 495746590e-09 0s 0s 495749230e-09 1s 1s 495750430e-09 1s 1s 495756830e-09 0s 0s 495759470e-09 1s 1s 495760710e-09 1s 1s 495767070e-09 0s 0s 495769710e-09 1s 1s 495770990e-09 1s 1s 495777310e-09 0s 0s 495779950e-09 1s 1s 495781270e-09 1s 1s 495787550e-09 0s 0s 495790190e-09 1s 1s 495791550e-09 1s 1s 495797790e-09 0s 0s 495800430e-09 1s 1s 495801830e-09 1s 1s 495808030e-09 0s 0s 495810670e-09 1s 1s 495812110e-09 1s 1s 495818270e-09 0s 0s 495820910e-09 1s 1s 495822390e-09 1s 1s 495828510e-09 0s 0s 495831150e-09 1s 1s 495832670e-09 1s 1s 495838750e-09 0s 0s 495841390e-09 1s 1s 495842950e-09 1s 1s 495848990e-09 0s 0s 495851630e-09 1s 1s 495853230e-09 1s 1s 495859230e-09 0s 0s 495861870e-09 1s 1s 495863510e-09 1s 1s 495869470e-09 0s 0s 495872110e-09 1s 1s 495873790e-09 1s 1s 495879710e-09 0s 0s 495882350e-09 1s 1s 495884070e-09 1s 1s 495889950e-09 0s 0s 495892590e-09 1s 1s 495894350e-09 1s 1s 495900190e-09 0s 0s 495902830e-09 1s 1s 495904630e-09 1s 1s 495910430e-09 0s 0s 495913070e-09 1s 1s 495914910e-09 1s 1s 495920670e-09 0s 0s 495923310e-09 1s 1s 495925190e-09 1s 1s 495930910e-09 0s 0s 495933550e-09 1s 1s 495935470e-09 1s 1s 495941150e-09 0s 0s 495943790e-09 1s 1s 495945750e-09 1s 1s 495951390e-09 0s 0s 495954030e-09 1s 1s 495956030e-09 1s 1s 495961630e-09 0s 0s 495964270e-09 1s 1s 495966310e-09 1s 1s 495971870e-09 0s 0s 495974510e-09 1s 1s 495976590e-09 1s 1s 495982110e-09 0s 0s 495984750e-09 1s 1s 495986870e-09 1s 1s 495992350e-09 0s 0s 495994990e-09 1s 1s 495997150e-09 1s 1s 496002590e-09 0s 0s 496005230e-09 1s 1s 496007430e-09 1s 1s 496012830e-09 0s 0s 496015470e-09 1s 1s 496017710e-09 1s 1s 496023070e-09 0s 0s 496025710e-09 1s 1s 496027990e-09 1s 1s 496033310e-09 0s 0s 496035950e-09 1s 1s 496038270e-09 1s 1s 496043550e-09 0s 0s 496046190e-09 1s 1s 496048550e-09 1s 1s 496053790e-09 0s 0s 496056430e-09 1s 1s 496058830e-09 1s 1s 496064030e-09 0s 0s 496066670e-09 1s 1s 496069110e-09 1s 1s 496074270e-09 0s 0s 496076910e-09 1s 1s 496079390e-09 1s 1s 496084510e-09 0s 0s 496087150e-09 1s 1s 496089670e-09 1s 1s 496094750e-09 0s 0s 496097390e-09 1s 1s 496099950e-09 1s 1s 496104990e-09 0s 0s 496107630e-09 1s 1s 496110230e-09 1s 1s 496115230e-09 0s 0s 496117870e-09 1s 1s 496120510e-09 1s 1s 496125470e-09 0s 0s 496128110e-09 1s 1s 496130790e-09 1s 1s 496135710e-09 0s 0s 496138350e-09 1s 1s 496141070e-09 1s 1s 496145950e-09 0s 0s 496148590e-09 1s 1s 496151350e-09 1s 1s 496156190e-09 0s 0s 496158830e-09 1s 1s 496161630e-09 1s 1s 496166430e-09 0s 0s 496169070e-09 1s 1s 496171910e-09 1s 1s 496176670e-09 0s 0s 496179310e-09 1s 1s 496182190e-09 1s 1s 496186910e-09 0s 0s 496189550e-09 1s 1s 496192470e-09 1s 1s 496197150e-09 0s 0s 496199790e-09 1s 1s 496202750e-09 1s 1s 496207390e-09 0s 0s 496210030e-09 1s 1s 496213030e-09 1s 1s 496217630e-09 0s 0s 496220270e-09 1s 1s 496223310e-09 1s 1s 496227870e-09 0s 0s 496230510e-09 1s 1s 496233590e-09 1s 1s 496238110e-09 0s 0s 496240750e-09 1s 1s 496243870e-09 1s 1s 496248350e-09 0s 0s 496250990e-09 1s 1s 496254150e-09 1s 1s 496258590e-09 0s 0s 496261230e-09 1s 1s 496264430e-09 1s 1s 496268830e-09 0s 0s 496271470e-09 1s 1s 496274710e-09 1s 1s 496279070e-09 0s 0s 496281710e-09 1s 1s 496284990e-09 1s 1s 496289310e-09 0s 0s 496291950e-09 1s 1s 496295270e-09 1s 1s 496299550e-09 0s 0s 496302190e-09 1s 1s 496305550e-09 1s 1s 496309790e-09 0s 0s 496312430e-09 1s 1s 496315830e-09 1s 1s 496320030e-09 0s 0s 496322670e-09 1s 1s 496326110e-09 1s 1s 496330270e-09 0s 0s 496332910e-09 1s 1s 496336390e-09 1s 1s 496340510e-09 0s 0s 496343150e-09 1s 1s 496346670e-09 1s 1s 496350750e-09 0s 0s 496353390e-09 1s 1s 496356950e-09 1s 1s 496360990e-09 0s 0s 496363630e-09 1s 1s 496367230e-09 1s 1s 496371230e-09 0s 0s 496373870e-09 1s 1s 496377510e-09 1s 1s 496381470e-09 0s 0s 496384110e-09 1s 1s 496387790e-09 1s 1s 496391710e-09 0s 0s 496394350e-09 1s 1s 496398070e-09 1s 1s 496401950e-09 0s 0s 496404590e-09 1s 1s 496408350e-09 1s 1s 496412190e-09 0s 0s 496414830e-09 1s 1s 496418630e-09 1s 1s 496422430e-09 0s 0s 496425070e-09 1s 1s 496428910e-09 1s 1s 496432670e-09 0s 0s 496435310e-09 1s 1s 496439190e-09 1s 1s 496442910e-09 0s 0s 496445550e-09 1s 1s 496449470e-09 1s 1s 496453150e-09 0s 0s 496455790e-09 1s 1s 496459750e-09 1s 1s 496463390e-09 0s 0s 496466030e-09 1s 1s 496470030e-09 1s 1s 496473630e-09 0s 0s 496476270e-09 1s 1s 496480310e-09 1s 1s 496483870e-09 0s 0s 496486510e-09 1s 1s 496490590e-09 1s 1s 496494110e-09 0s 0s 496496750e-09 1s 1s 496500870e-09 1s 1s 496504350e-09 0s 0s 496506990e-09 1s 1s 496511150e-09 1s 1s 496514590e-09 0s 0s 496517230e-09 1s 1s 496521430e-09 1s 1s 496524830e-09 0s 0s 496527470e-09 1s 1s 496531710e-09 1s 1s 496535070e-09 0s 0s 496537710e-09 1s 1s 496541990e-09 1s 1s 496545310e-09 0s 0s 496547950e-09 1s 1s 496552270e-09 1s 1s 496555550e-09 0s 0s 496558190e-09 1s 1s 496562550e-09 1s 1s 496565790e-09 0s 0s 496568430e-09 1s 1s 496572830e-09 1s 1s 496576030e-09 0s 0s 496578670e-09 1s 1s 496583110e-09 1s 1s 496586270e-09 0s 0s 496588910e-09 1s 1s 496593390e-09 1s 1s 496596510e-09 0s 0s 496599150e-09 1s 1s 496603670e-09 1s 1s 496606750e-09 0s 0s 496609390e-09 1s 1s 496613950e-09 1s 1s 496616990e-09 0s 0s 496619630e-09 1s 1s 496624230e-09 1s 1s 496627230e-09 0s 0s 496629870e-09 1s 1s 496634510e-09 1s 1s 496637470e-09 0s 0s 496640110e-09 1s 1s 496644790e-09 1s 1s 496647710e-09 0s 0s 496650350e-09 1s 1s 496655070e-09 1s 1s 496657950e-09 0s 0s 496660590e-09 1s 1s 496665350e-09 1s 1s 496668190e-09 0s 0s 496670830e-09 1s 1s 496675630e-09 1s 1s 496678430e-09 0s 0s 496681070e-09 1s 1s 496685910e-09 1s 1s 496688670e-09 0s 0s 496691310e-09 1s 1s 496696190e-09 1s 1s 496698910e-09 0s 0s 496701550e-09 1s 1s 496706470e-09 1s 1s 496709150e-09 0s 0s 496711790e-09 1s 1s 496716750e-09 1s 1s 496719390e-09 0s 0s 496722030e-09 1s 1s 496727030e-09 1s 1s 496729630e-09 0s 0s 496732270e-09 1s 1s 496737310e-09 1s 1s 496739870e-09 0s 0s 496742510e-09 1s 1s 496747590e-09 1s 1s 496750110e-09 0s 0s 496752750e-09 1s 1s 496757870e-09 1s 1s 496760350e-09 0s 0s 496762990e-09 1s 1s 496768150e-09 1s 1s 496770590e-09 0s 0s 496773230e-09 1s 1s 496778430e-09 1s 1s 496780830e-09 0s 0s 496783470e-09 1s 1s 496788710e-09 1s 1s 496791070e-09 0s 0s 496793710e-09 1s 1s 496798990e-09 1s 1s 496801310e-09 0s 0s 496803950e-09 1s 1s 496809270e-09 1s 1s 496811550e-09 0s 0s 496814190e-09 1s 1s 496819550e-09 1s 1s 496821790e-09 0s 0s 496824430e-09 1s 1s 496829830e-09 1s 1s 496832030e-09 0s 0s 496834670e-09 1s 1s 496840110e-09 1s 1s 496842270e-09 0s 0s 496844910e-09 1s 1s 496850390e-09 1s 1s 496852510e-09 0s 0s 496855150e-09 1s 1s 496860670e-09 1s 1s 496862750e-09 0s 0s 496865390e-09 1s 1s 496870950e-09 1s 1s 496872990e-09 0s 0s 496875630e-09 1s 1s 496881230e-09 1s 1s 496883230e-09 0s 0s 496885870e-09 1s 1s 496891510e-09 1s 1s 496893470e-09 0s 0s 496896110e-09 1s 1s 496901790e-09 1s 1s 496903710e-09 0s 0s 496906350e-09 1s 1s 496912070e-09 1s 1s 496913950e-09 0s 0s 496916590e-09 1s 1s 496922350e-09 1s 1s 496924190e-09 0s 0s 496926830e-09 1s 1s 496932630e-09 1s 1s 496934430e-09 0s 0s 496937070e-09 1s 1s 496942910e-09 1s 1s 496944670e-09 0s 0s 496947310e-09 1s 1s 496953190e-09 1s 1s 496954910e-09 0s 0s 496957550e-09 1s 1s 496963470e-09 1s 1s 496965150e-09 0s 0s 496967790e-09 1s 1s 496973750e-09 1s 1s 496975390e-09 0s 0s 496978030e-09 1s 1s 496984030e-09 1s 1s 496985630e-09 0s 0s 496988270e-09 1s 1s 496994310e-09 1s 1s 496995870e-09 0s 0s 496998510e-09 1s 1s 497004590e-09 1s 1s 497006110e-09 0s 0s 497008750e-09 1s 1s 497014870e-09 1s 1s 497016350e-09 0s 0s 497018990e-09 1s 1s 497025150e-09 1s 1s 497026590e-09 0s 0s 497029230e-09 1s 1s 497035430e-09 1s 1s 497036830e-09 0s 0s 497039470e-09 1s 1s 497045710e-09 1s 1s 497047070e-09 0s 0s 497049710e-09 1s 1s 497055990e-09 1s 1s 497057310e-09 0s 0s 497059950e-09 1s 1s 497066270e-09 1s 1s 497067550e-09 0s 0s 497070190e-09 1s 1s 497076550e-09 1s 1s 497077790e-09 0s 0s 497080430e-09 1s 1s 497086830e-09 1s 1s 497088030e-09 0s 0s 497090670e-09 1s 1s 497097110e-09 1s 1s 497098270e-09 0s 0s 497100910e-09 1s 1s 497107390e-09 1s 1s 497108510e-09 0s 0s 497111150e-09 1s 1s 497117670e-09 1s 1s 497118750e-09 0s 0s 497121390e-09 1s 1s 497127950e-09 1s 1s 497128990e-09 0s 0s 497131630e-09 1s 1s 497138230e-09 1s 1s 497139230e-09 0s 0s 497141870e-09 1s 1s 497148510e-09 1s 1s 497149470e-09 0s 0s 497152110e-09 1s 1s 497158790e-09 1s 1s 497159710e-09 0s 0s 497162350e-09 1s 1s 497169070e-09 1s 1s 497169950e-09 0s 0s 497172590e-09 1s 1s 497179350e-09 1s 1s 497180190e-09 0s 0s 497182830e-09 1s 1s 497189630e-09 1s 1s 497190430e-09 0s 0s 497193070e-09 1s 1s 497199910e-09 1s 1s 497200670e-09 0s 0s 497203310e-09 1s 1s 497210190e-09 1s 1s 497210910e-09 0s 0s 497213550e-09 1s 1s 497220470e-09 1s 1s 497221150e-09 0s 0s 497223790e-09 1s 1s 497230750e-09 1s 1s 497231390e-09 0s 0s 497234030e-09 1s 1s 497241030e-09 1s 1s 497241630e-09 0s 0s 497244270e-09 1s 1s 497251310e-09 1s 1s 497251870e-09 0s 0s 497254510e-09 1s 1s 497261590e-09 1s 1s 497262110e-09 0s 0s 497264750e-09 1s 1s 497271870e-09 1s 1s 497272350e-09 0s 0s 497274990e-09 1s 1s 497282150e-09 1s 1s 497282590e-09 0s 0s 497285230e-09 1s 1s 497292430e-09 1s 1s 497292830e-09 0s 0s 497295470e-09 1s 1s 497302710e-09 1s 1s 497303070e-09 0s 0s 497305710e-09 1s 1s 497312990e-09 1s 1s 497313310e-09 0s 0s 497315950e-09 1s 1s 497323270e-09 1s 1s 497323550e-09 0s 0s 497326190e-09 1s 1s 497333550e-09 1s 1s 497333790e-09 0s 0s 497336430e-09 1s 1s 497343830e-09 1s 1s 497344030e-09 0s 0s 497346670e-09 1s 1s 497354110e-09 1s 1s 497354270e-09 0s 0s 497356910e-09 1s 1s 497364390e-09 1s 1s 497364510e-09 0s 0s 497367150e-09 1s 1s 497374670e-09 1s 1s 497374750e-09 0s 0s 497377390e-09 1s 1s 497384950e-09 1s 1s 497384990e-09 0s 0s 497387630e-09 1s 1s 497395230e-09 0s 0s 497397870e-09 1s 1s 497405470e-09 0s 0s 497405510e-09 0s 0s 497408110e-09 1s 1s 497415710e-09 0s 0s 497415790e-09 0s 0s 497418350e-09 1s 1s 497425950e-09 0s 0s 497426070e-09 0s 0s 497428590e-09 1s 1s 497436190e-09 0s 0s 497436350e-09 0s 0s 497438830e-09 1s 1s 497446430e-09 0s 0s 497446630e-09 0s 0s 497449070e-09 1s 1s 497456670e-09 0s 0s 497456910e-09 0s 0s 497459310e-09 1s 1s 497466910e-09 0s 0s 497467190e-09 0s 0s 497469550e-09 1s 1s 497477150e-09 0s 0s 497477470e-09 0s 0s 497479790e-09 1s 1s 497487390e-09 0s 0s 497487750e-09 0s 0s 497490030e-09 1s 1s 497497630e-09 0s 0s 497498030e-09 0s 0s 497500270e-09 1s 1s 497507870e-09 0s 0s 497508310e-09 0s 0s 497510510e-09 1s 1s 497518110e-09 0s 0s 497518590e-09 0s 0s 497520750e-09 1s 1s 497528350e-09 0s 0s 497528870e-09 0s 0s 497530990e-09 1s 1s 497538590e-09 0s 0s 497539150e-09 0s 0s 497541230e-09 1s 1s 497548830e-09 0s 0s 497549430e-09 0s 0s 497551470e-09 1s 1s 497559070e-09 0s 0s 497559710e-09 0s 0s 497561710e-09 1s 1s 497569310e-09 0s 0s 497569990e-09 0s 0s 497571950e-09 1s 1s 497579550e-09 0s 0s 497580270e-09 0s 0s 497582190e-09 1s 1s 497589790e-09 0s 0s 497590550e-09 0s 0s 497592430e-09 1s 1s 497600030e-09 0s 0s 497600830e-09 0s 0s 497602670e-09 1s 1s 497610270e-09 0s 0s 497611110e-09 0s 0s 497612910e-09 1s 1s 497620510e-09 0s 0s 497621390e-09 0s 0s 497623150e-09 1s 1s 497630750e-09 0s 0s 497631670e-09 0s 0s 497633390e-09 1s 1s 497640990e-09 0s 0s 497641950e-09 0s 0s 497643630e-09 1s 1s 497651230e-09 0s 0s 497652230e-09 0s 0s 497653870e-09 1s 1s 497661470e-09 0s 0s 497662510e-09 0s 0s 497664110e-09 1s 1s 497671710e-09 0s 0s 497672790e-09 0s 0s 497674350e-09 1s 1s 497681950e-09 0s 0s 497683070e-09 0s 0s 497684590e-09 1s 1s 497692190e-09 0s 0s 497693350e-09 0s 0s 497694830e-09 1s 1s 497702430e-09 0s 0s 497703630e-09 0s 0s 497705070e-09 1s 1s 497712670e-09 0s 0s 497713910e-09 0s 0s 497715310e-09 1s 1s 497722910e-09 0s 0s 497724190e-09 0s 0s 497725550e-09 1s 1s 497733150e-09 0s 0s 497734470e-09 0s 0s 497735790e-09 1s 1s 497743390e-09 0s 0s 497744750e-09 0s 0s 497746030e-09 1s 1s 497753630e-09 0s 0s 497755030e-09 0s 0s 497756270e-09 1s 1s 497763870e-09 0s 0s 497765310e-09 0s 0s 497766510e-09 1s 1s 497774110e-09 0s 0s 497775590e-09 0s 0s 497776750e-09 1s 1s 497784350e-09 0s 0s 497785870e-09 0s 0s 497786990e-09 1s 1s 497794590e-09 0s 0s 497796150e-09 0s 0s 497797230e-09 1s 1s 497804830e-09 0s 0s 497806430e-09 0s 0s 497807470e-09 1s 1s 497815070e-09 0s 0s 497816710e-09 0s 0s 497817710e-09 1s 1s 497825310e-09 0s 0s 497826990e-09 0s 0s 497827950e-09 1s 1s 497835550e-09 0s 0s 497837270e-09 0s 0s 497838190e-09 1s 1s 497845790e-09 0s 0s 497847550e-09 0s 0s 497848430e-09 1s 1s 497856030e-09 0s 0s 497857830e-09 0s 0s 497858670e-09 1s 1s 497866270e-09 0s 0s 497868110e-09 0s 0s 497868910e-09 1s 1s 497876510e-09 0s 0s 497878390e-09 0s 0s 497879150e-09 1s 1s 497886750e-09 0s 0s 497888670e-09 0s 0s 497889390e-09 1s 1s 497896990e-09 0s 0s 497898950e-09 0s 0s 497899630e-09 1s 1s 497907230e-09 0s 0s 497909230e-09 0s 0s 497909870e-09 1s 1s 497917470e-09 0s 0s 497919510e-09 0s 0s 497920110e-09 1s 1s 497927710e-09 0s 0s 497929790e-09 0s 0s 497930350e-09 1s 1s 497937950e-09 0s 0s 497940070e-09 0s 0s 497940590e-09 1s 1s 497948190e-09 0s 0s 497950350e-09 0s 0s 497950830e-09 1s 1s 497958430e-09 0s 0s 497960630e-09 0s 0s 497961070e-09 1s 1s 497968670e-09 0s 0s 497970910e-09 0s 0s 497971310e-09 1s 1s 497978910e-09 0s 0s 497981190e-09 0s 0s 497981550e-09 1s 1s 497989150e-09 0s 0s 497991470e-09 0s 0s 497991790e-09 1s 1s 497999390e-09 0s 0s 498001750e-09 0s 0s 498002030e-09 1s 1s 498009630e-09 0s 0s 498012030e-09 0s 0s 498012270e-09 1s 1s 498019870e-09 0s 0s 498022310e-09 0s 0s 498022510e-09 1s 1s 498030110e-09 0s 0s 498032590e-09 0s 0s 498032750e-09 1s 1s 498040350e-09 0s 0s 498042870e-09 0s 0s 498042990e-09 1s 1s 498050590e-09 0s 0s 498053150e-09 0s 0s 498053230e-09 1s 1s 498060830e-09 0s 0s 498063430e-09 0s 0s 498063470e-09 1s 1s 498071070e-09 0s 0s 498073710e-09 1s 1s 498073750e-09 1s 1s 498081350e-09 0s 0s 498083950e-09 1s 1s 498084030e-09 1s 1s 498091590e-09 0s 0s 498094190e-09 1s 1s 498094310e-09 1s 1s 498101830e-09 0s 0s 498104430e-09 1s 1s 498104590e-09 1s 1s 498112070e-09 0s 0s 498114670e-09 1s 1s 498114870e-09 1s 1s 498122310e-09 0s 0s 498124910e-09 1s 1s 498125150e-09 1s 1s 498132550e-09 0s 0s 498135150e-09 1s 1s 498135430e-09 1s 1s 498142790e-09 0s 0s 498145390e-09 1s 1s 498145710e-09 1s 1s 498153030e-09 0s 0s 498155630e-09 1s 1s 498155990e-09 1s 1s 498163270e-09 0s 0s 498165870e-09 1s 1s 498166270e-09 1s 1s 498173510e-09 0s 0s 498176110e-09 1s 1s 498176550e-09 1s 1s 498183750e-09 0s 0s 498186350e-09 1s 1s 498186830e-09 1s 1s 498193990e-09 0s 0s 498196590e-09 1s 1s 498197110e-09 1s 1s 498204230e-09 0s 0s 498206830e-09 1s 1s 498207390e-09 1s 1s 498214470e-09 0s 0s 498217070e-09 1s 1s 498217670e-09 1s 1s 498224710e-09 0s 0s 498227310e-09 1s 1s 498227950e-09 1s 1s 498234950e-09 0s 0s 498237550e-09 1s 1s 498238230e-09 1s 1s 498245190e-09 0s 0s 498247790e-09 1s 1s 498248510e-09 1s 1s 498255430e-09 0s 0s 498258030e-09 1s 1s 498258790e-09 1s 1s 498265670e-09 0s 0s 498268270e-09 1s 1s 498269070e-09 1s 1s 498275910e-09 0s 0s 498278510e-09 1s 1s 498279350e-09 1s 1s 498286150e-09 0s 0s 498288750e-09 1s 1s 498289630e-09 1s 1s 498296390e-09 0s 0s 498298990e-09 1s 1s 498299910e-09 1s 1s 498306630e-09 0s 0s 498309230e-09 1s 1s 498310190e-09 1s 1s 498316870e-09 0s 0s 498319470e-09 1s 1s 498320470e-09 1s 1s 498327110e-09 0s 0s 498329710e-09 1s 1s 498330750e-09 1s 1s 498337350e-09 0s 0s 498339950e-09 1s 1s 498341030e-09 1s 1s 498347590e-09 0s 0s 498350190e-09 1s 1s 498351310e-09 1s 1s 498357830e-09 0s 0s 498360430e-09 1s 1s 498361590e-09 1s 1s 498368070e-09 0s 0s 498370670e-09 1s 1s 498371870e-09 1s 1s 498378310e-09 0s 0s 498380910e-09 1s 1s 498382150e-09 1s 1s 498388550e-09 0s 0s 498391150e-09 1s 1s 498392430e-09 1s 1s 498398790e-09 0s 0s 498401390e-09 1s 1s 498402710e-09 1s 1s 498409030e-09 0s 0s 498411630e-09 1s 1s 498412990e-09 1s 1s 498419270e-09 0s 0s 498421870e-09 1s 1s 498423270e-09 1s 1s 498429510e-09 0s 0s 498432110e-09 1s 1s 498433550e-09 1s 1s 498439750e-09 0s 0s 498442350e-09 1s 1s 498443830e-09 1s 1s 498449990e-09 0s 0s 498452590e-09 1s 1s 498454110e-09 1s 1s 498460230e-09 0s 0s 498462830e-09 1s 1s 498464390e-09 1s 1s 498470470e-09 0s 0s 498473070e-09 1s 1s 498474670e-09 1s 1s 498480710e-09 0s 0s 498483310e-09 1s 1s 498484950e-09 1s 1s 498490950e-09 0s 0s 498493550e-09 1s 1s 498495230e-09 1s 1s 498501190e-09 0s 0s 498503790e-09 1s 1s 498505510e-09 1s 1s 498511430e-09 0s 0s 498514030e-09 1s 1s 498515790e-09 1s 1s 498521670e-09 0s 0s 498524270e-09 1s 1s 498526070e-09 1s 1s 498531910e-09 0s 0s 498534510e-09 1s 1s 498536350e-09 1s 1s 498542150e-09 0s 0s 498544750e-09 1s 1s 498546630e-09 1s 1s 498552390e-09 0s 0s 498554990e-09 1s 1s 498556910e-09 1s 1s 498562630e-09 0s 0s 498565230e-09 1s 1s 498567190e-09 1s 1s 498572870e-09 0s 0s 498575470e-09 1s 1s 498577470e-09 1s 1s 498583110e-09 0s 0s 498585710e-09 1s 1s 498587750e-09 1s 1s 498593350e-09 0s 0s 498595950e-09 1s 1s 498598030e-09 1s 1s 498603590e-09 0s 0s 498606190e-09 1s 1s 498608310e-09 1s 1s 498613830e-09 0s 0s 498616430e-09 1s 1s 498618590e-09 1s 1s 498624070e-09 0s 0s 498626670e-09 1s 1s 498628870e-09 1s 1s 498634310e-09 0s 0s 498636910e-09 1s 1s 498639150e-09 1s 1s 498644550e-09 0s 0s 498647150e-09 1s 1s 498649430e-09 1s 1s 498654790e-09 0s 0s 498657390e-09 1s 1s 498659710e-09 1s 1s 498665030e-09 0s 0s 498667630e-09 1s 1s 498669990e-09 1s 1s 498675270e-09 0s 0s 498677870e-09 1s 1s 498680270e-09 1s 1s 498685510e-09 0s 0s 498688110e-09 1s 1s 498690550e-09 1s 1s 498695750e-09 0s 0s 498698350e-09 1s 1s 498700830e-09 1s 1s 498705990e-09 0s 0s 498708590e-09 1s 1s 498711110e-09 1s 1s 498716230e-09 0s 0s 498718830e-09 1s 1s 498721390e-09 1s 1s 498726470e-09 0s 0s 498729070e-09 1s 1s 498731670e-09 1s 1s 498736710e-09 0s 0s 498739310e-09 1s 1s 498741950e-09 1s 1s 498746950e-09 0s 0s 498749550e-09 1s 1s 498752230e-09 1s 1s 498757190e-09 0s 0s 498759790e-09 1s 1s 498762510e-09 1s 1s 498767430e-09 0s 0s 498770030e-09 1s 1s 498772790e-09 1s 1s 498777670e-09 0s 0s 498780270e-09 1s 1s 498783070e-09 1s 1s 498787910e-09 0s 0s 498790510e-09 1s 1s 498793350e-09 1s 1s 498798150e-09 0s 0s 498800750e-09 1s 1s 498803630e-09 1s 1s 498808390e-09 0s 0s 498810990e-09 1s 1s 498813910e-09 1s 1s 498818630e-09 0s 0s 498821230e-09 1s 1s 498824190e-09 1s 1s 498828870e-09 0s 0s 498831470e-09 1s 1s 498834470e-09 1s 1s 498839110e-09 0s 0s 498841710e-09 1s 1s 498844750e-09 1s 1s 498849350e-09 0s 0s 498851950e-09 1s 1s 498855030e-09 1s 1s 498859590e-09 0s 0s 498862190e-09 1s 1s 498865310e-09 1s 1s 498869830e-09 0s 0s 498872430e-09 1s 1s 498875590e-09 1s 1s 498880070e-09 0s 0s 498882670e-09 1s 1s 498885870e-09 1s 1s 498890310e-09 0s 0s 498892910e-09 1s 1s 498896150e-09 1s 1s 498900550e-09 0s 0s 498903150e-09 1s 1s 498906430e-09 1s 1s 498910790e-09 0s 0s 498913390e-09 1s 1s 498916710e-09 1s 1s 498921030e-09 0s 0s 498923630e-09 1s 1s 498926990e-09 1s 1s 498931270e-09 0s 0s 498933870e-09 1s 1s 498937270e-09 1s 1s 498941510e-09 0s 0s 498944110e-09 1s 1s 498947550e-09 1s 1s 498951750e-09 0s 0s 498954350e-09 1s 1s 498957830e-09 1s 1s 498961990e-09 0s 0s 498964590e-09 1s 1s 498968110e-09 1s 1s 498972230e-09 0s 0s 498974830e-09 1s 1s 498978390e-09 1s 1s 498982470e-09 0s 0s 498985070e-09 1s 1s 498988670e-09 1s 1s 498992710e-09 0s 0s 498995310e-09 1s 1s 498998950e-09 1s 1s 499002950e-09 0s 0s 499005550e-09 1s 1s 499009230e-09 1s 1s 499013190e-09 0s 0s 499015790e-09 1s 1s 499019510e-09 1s 1s 499023430e-09 0s 0s 499026030e-09 1s 1s 499029790e-09 1s 1s 499033670e-09 0s 0s 499036270e-09 1s 1s 499040070e-09 1s 1s 499043910e-09 0s 0s 499046510e-09 1s 1s 499050350e-09 1s 1s 499054150e-09 0s 0s 499056750e-09 1s 1s 499060630e-09 1s 1s 499064390e-09 0s 0s 499066990e-09 1s 1s 499070910e-09 1s 1s 499074630e-09 0s 0s 499077230e-09 1s 1s 499081190e-09 1s 1s 499084870e-09 0s 0s 499087470e-09 1s 1s 499091470e-09 1s 1s 499095110e-09 0s 0s 499097710e-09 1s 1s 499101750e-09 1s 1s 499105350e-09 0s 0s 499107950e-09 1s 1s 499112030e-09 1s 1s 499115590e-09 0s 0s 499118190e-09 1s 1s 499122310e-09 1s 1s 499125830e-09 0s 0s 499128430e-09 1s 1s 499132590e-09 1s 1s 499136070e-09 0s 0s 499138670e-09 1s 1s 499142870e-09 1s 1s 499146310e-09 0s 0s 499148910e-09 1s 1s 499153150e-09 1s 1s 499156550e-09 0s 0s 499159150e-09 1s 1s 499163430e-09 1s 1s 499166790e-09 0s 0s 499169390e-09 1s 1s 499173710e-09 1s 1s 499177030e-09 0s 0s 499179630e-09 1s 1s 499183990e-09 1s 1s 499187270e-09 0s 0s 499189870e-09 1s 1s 499194270e-09 1s 1s 499197510e-09 0s 0s 499200110e-09 1s 1s 499204550e-09 1s 1s 499207750e-09 0s 0s 499210350e-09 1s 1s 499214830e-09 1s 1s 499217990e-09 0s 0s 499220590e-09 1s 1s 499225110e-09 1s 1s 499228230e-09 0s 0s 499230830e-09 1s 1s 499235390e-09 1s 1s 499238470e-09 0s 0s 499241070e-09 1s 1s 499245670e-09 1s 1s 499248710e-09 0s 0s 499251310e-09 1s 1s 499255950e-09 1s 1s 499258950e-09 0s 0s 499261550e-09 1s 1s 499266230e-09 1s 1s 499269190e-09 0s 0s 499271790e-09 1s 1s 499276510e-09 1s 1s 499279430e-09 0s 0s 499282030e-09 1s 1s 499286790e-09 1s 1s 499289670e-09 0s 0s 499292270e-09 1s 1s 499297070e-09 1s 1s 499299910e-09 0s 0s 499302510e-09 1s 1s 499307350e-09 1s 1s 499310150e-09 0s 0s 499312750e-09 1s 1s 499317630e-09 1s 1s 499320390e-09 0s 0s 499322990e-09 1s 1s 499327910e-09 1s 1s 499330630e-09 0s 0s 499333230e-09 1s 1s 499338190e-09 1s 1s 499340870e-09 0s 0s 499343470e-09 1s 1s 499348470e-09 1s 1s 499351110e-09 0s 0s 499353710e-09 1s 1s 499358750e-09 1s 1s 499361350e-09 0s 0s 499363950e-09 1s 1s 499369030e-09 1s 1s 499371590e-09 0s 0s 499374190e-09 1s 1s 499379310e-09 1s 1s 499381830e-09 0s 0s 499384430e-09 1s 1s 499389590e-09 1s 1s 499392070e-09 0s 0s 499394670e-09 1s 1s 499399870e-09 1s 1s 499402310e-09 0s 0s 499404910e-09 1s 1s 499410150e-09 1s 1s 499412550e-09 0s 0s 499415150e-09 1s 1s 499420430e-09 1s 1s 499422790e-09 0s 0s 499425390e-09 1s 1s 499430710e-09 1s 1s 499433030e-09 0s 0s 499435630e-09 1s 1s 499440990e-09 1s 1s 499443270e-09 0s 0s 499445870e-09 1s 1s 499451270e-09 1s 1s 499453510e-09 0s 0s 499456110e-09 1s 1s 499461550e-09 1s 1s 499463750e-09 0s 0s 499466350e-09 1s 1s 499471830e-09 1s 1s 499473990e-09 0s 0s 499476590e-09 1s 1s 499482110e-09 1s 1s 499484230e-09 0s 0s 499486830e-09 1s 1s 499492390e-09 1s 1s 499494470e-09 0s 0s 499497070e-09 1s 1s 499502670e-09 1s 1s 499504710e-09 0s 0s 499507310e-09 1s 1s 499512950e-09 1s 1s 499514950e-09 0s 0s 499517550e-09 1s 1s 499523230e-09 1s 1s 499525190e-09 0s 0s 499527790e-09 1s 1s 499533510e-09 1s 1s 499535430e-09 0s 0s 499538030e-09 1s 1s 499543790e-09 1s 1s 499545670e-09 0s 0s 499548270e-09 1s 1s 499554070e-09 1s 1s 499555910e-09 0s 0s 499558510e-09 1s 1s 499564350e-09 1s 1s 499566150e-09 0s 0s 499568750e-09 1s 1s 499574630e-09 1s 1s 499576390e-09 0s 0s 499578990e-09 1s 1s 499584910e-09 1s 1s 499586630e-09 0s 0s 499589230e-09 1s 1s 499595190e-09 1s 1s 499596870e-09 0s 0s 499599470e-09 1s 1s 499605470e-09 1s 1s 499607110e-09 0s 0s 499609710e-09 1s 1s 499615750e-09 1s 1s 499617350e-09 0s 0s 499619950e-09 1s 1s 499626030e-09 1s 1s 499627590e-09 0s 0s 499630190e-09 1s 1s 499636310e-09 1s 1s 499637830e-09 0s 0s 499640430e-09 1s 1s 499646590e-09 1s 1s 499648070e-09 0s 0s 499650670e-09 1s 1s 499656870e-09 1s 1s 499658310e-09 0s 0s 499660910e-09 1s 1s 499667150e-09 1s 1s 499668550e-09 0s 0s 499671150e-09 1s 1s 499677430e-09 1s 1s 499678790e-09 0s 0s 499681390e-09 1s 1s 499687710e-09 1s 1s 499689030e-09 0s 0s 499691630e-09 1s 1s 499697990e-09 1s 1s 499699270e-09 0s 0s 499701870e-09 1s 1s 499708270e-09 1s 1s 499709510e-09 0s 0s 499712110e-09 1s 1s 499718550e-09 1s 1s 499719750e-09 0s 0s 499722350e-09 1s 1s 499728830e-09 1s 1s 499729990e-09 0s 0s 499732590e-09 1s 1s 499739110e-09 1s 1s 499740230e-09 0s 0s 499742830e-09 1s 1s 499749390e-09 1s 1s 499750470e-09 0s 0s 499753070e-09 1s 1s 499759670e-09 1s 1s 499760710e-09 0s 0s 499763310e-09 1s 1s 499769950e-09 1s 1s 499770950e-09 0s 0s 499773550e-09 1s 1s 499780230e-09 1s 1s 499781190e-09 0s 0s 499783790e-09 1s 1s 499790510e-09 1s 1s 499791430e-09 0s 0s 499794030e-09 1s 1s 499800790e-09 1s 1s 499801670e-09 0s 0s 499804270e-09 1s 1s 499811070e-09 1s 1s 499811910e-09 0s 0s 499814510e-09 1s 1s 499821350e-09 1s 1s 499822150e-09 0s 0s 499824750e-09 1s 1s 499831630e-09 1s 1s 499832390e-09 0s 0s 499834990e-09 1s 1s 499841910e-09 1s 1s 499842630e-09 0s 0s 499845230e-09 1s 1s 499852190e-09 1s 1s 499852870e-09 0s 0s 499855470e-09 1s 1s 499862470e-09 1s 1s 499863110e-09 0s 0s 499865710e-09 1s 1s 499872750e-09 1s 1s 499873350e-09 0s 0s 499875950e-09 1s 1s 499883030e-09 1s 1s 499883590e-09 0s 0s 499886190e-09 1s 1s 499893310e-09 1s 1s 499893830e-09 0s 0s 499896430e-09 1s 1s 499903590e-09 1s 1s 499904070e-09 0s 0s 499906670e-09 1s 1s 499913870e-09 1s 1s 499914310e-09 0s 0s 499916910e-09 1s 1s 499924150e-09 1s 1s 499924550e-09 0s 0s 499927150e-09 1s 1s 499934430e-09 1s 1s 499934790e-09 0s 0s 499937390e-09 1s 1s 499944710e-09 1s 1s 499945030e-09 0s 0s 499947630e-09 1s 1s 499954990e-09 1s 1s 499955270e-09 0s 0s 499957870e-09 1s 1s 499965270e-09 1s 1s 499965510e-09 0s 0s 499968110e-09 1s 1s 499975550e-09 1s 1s 499975750e-09 0s 0s 499978350e-09 1s 1s 499985830e-09 1s 1s 499985990e-09 0s 0s 499988590e-09 1s 1s 499996110e-09 1s 1s 499996230e-09 0s 0s 499998830e-09 1s 1s 500006390e-09 1s 1s 500006470e-09 0s 0s 500009070e-09 1s 1s 500016670e-09 1s 1s 500016710e-09 0s 0s 500019310e-09 1s 1s 500026950e-09 0s 0s 500029550e-09 1s 1s 500037190e-09 0s 0s 500037230e-09 0s 0s 500039790e-09 1s 1s 500047430e-09 0s 0s 500047510e-09 0s 0s 500050030e-09 1s 1s 500057670e-09 0s 0s 500057790e-09 0s 0s 500060270e-09 1s 1s 500067910e-09 0s 0s 500068070e-09 0s 0s 500070510e-09 1s 1s 500078150e-09 0s 0s 500078350e-09 0s 0s 500080750e-09 1s 1s 500088390e-09 0s 0s 500088630e-09 0s 0s 500090990e-09 1s 1s 500098630e-09 0s 0s 500098910e-09 0s 0s 500101230e-09 1s 1s 500108870e-09 0s 0s 500109190e-09 0s 0s 500111470e-09 1s 1s 500119110e-09 0s 0s 500119470e-09 0s 0s 500121710e-09 1s 1s 500129350e-09 0s 0s 500129750e-09 0s 0s 500131950e-09 1s 1s 500139590e-09 0s 0s 500140030e-09 0s 0s 500142190e-09 1s 1s 500149830e-09 0s 0s 500150310e-09 0s 0s 500152430e-09 1s 1s 500160070e-09 0s 0s 500160590e-09 0s 0s 500162670e-09 1s 1s 500170310e-09 0s 0s 500170870e-09 0s 0s 500172910e-09 1s 1s 500180550e-09 0s 0s 500181150e-09 0s 0s 500183150e-09 1s 1s 500190790e-09 0s 0s 500191430e-09 0s 0s 500193390e-09 1s 1s 500201030e-09 0s 0s 500201710e-09 0s 0s 500203630e-09 1s 1s 500211270e-09 0s 0s 500211990e-09 0s 0s 500213870e-09 1s 1s 500221510e-09 0s 0s 500222270e-09 0s 0s 500224110e-09 1s 1s 500231750e-09 0s 0s 500232550e-09 0s 0s 500234350e-09 1s 1s 500241990e-09 0s 0s 500242830e-09 0s 0s 500244590e-09 1s 1s 500252230e-09 0s 0s 500253110e-09 0s 0s 500254830e-09 1s 1s 500262470e-09 0s 0s 500263390e-09 0s 0s 500265070e-09 1s 1s 500272710e-09 0s 0s 500273670e-09 0s 0s 500275310e-09 1s 1s 500282950e-09 0s 0s 500283950e-09 0s 0s 500285550e-09 1s 1s 500293190e-09 0s 0s 500294230e-09 0s 0s 500295790e-09 1s 1s 500303430e-09 0s 0s 500304510e-09 0s 0s 500306030e-09 1s 1s 500313670e-09 0s 0s 500314790e-09 0s 0s 500316270e-09 1s 1s 500323910e-09 0s 0s 500325070e-09 0s 0s 500326510e-09 1s 1s 500334150e-09 0s 0s 500335350e-09 0s 0s 500336750e-09 1s 1s 500344390e-09 0s 0s 500345630e-09 0s 0s 500346990e-09 1s 1s 500354630e-09 0s 0s 500355910e-09 0s 0s 500357230e-09 1s 1s 500364870e-09 0s 0s 500366190e-09 0s 0s 500367470e-09 1s 1s 500375110e-09 0s 0s 500376470e-09 0s 0s 500377710e-09 1s 1s 500385350e-09 0s 0s 500386750e-09 0s 0s 500387950e-09 1s 1s 500395590e-09 0s 0s 500397030e-09 0s 0s 500398190e-09 1s 1s 500405830e-09 0s 0s 500407310e-09 0s 0s 500408430e-09 1s 1s 500416070e-09 0s 0s 500417590e-09 0s 0s 500418670e-09 1s 1s 500426310e-09 0s 0s 500427870e-09 0s 0s 500428910e-09 1s 1s 500436550e-09 0s 0s 500438150e-09 0s 0s 500439150e-09 1s 1s 500446790e-09 0s 0s 500448430e-09 0s 0s 500449390e-09 1s 1s 500457030e-09 0s 0s 500458710e-09 0s 0s 500459630e-09 1s 1s 500467270e-09 0s 0s 500468990e-09 0s 0s 500469870e-09 1s 1s 500477510e-09 0s 0s 500479270e-09 0s 0s 500480110e-09 1s 1s 500487750e-09 0s 0s 500489550e-09 0s 0s 500490350e-09 1s 1s 500497990e-09 0s 0s 500499830e-09 0s 0s 500500590e-09 1s 1s 500508230e-09 0s 0s 500510110e-09 0s 0s 500510830e-09 1s 1s 500518470e-09 0s 0s 500520390e-09 0s 0s 500521070e-09 1s 1s 500528710e-09 0s 0s 500530670e-09 0s 0s 500531310e-09 1s 1s 500538950e-09 0s 0s 500540950e-09 0s 0s 500541550e-09 1s 1s 500549190e-09 0s 0s 500551230e-09 0s 0s 500551790e-09 1s 1s 500559430e-09 0s 0s 500561510e-09 0s 0s 500562030e-09 1s 1s 500569670e-09 0s 0s 500571790e-09 0s 0s 500572270e-09 1s 1s 500579910e-09 0s 0s 500582070e-09 0s 0s 500582510e-09 1s 1s 500590150e-09 0s 0s 500592350e-09 0s 0s 500592750e-09 1s 1s 500600390e-09 0s 0s 500602630e-09 0s 0s 500602990e-09 1s 1s 500610630e-09 0s 0s 500612910e-09 0s 0s 500613230e-09 1s 1s 500620870e-09 0s 0s 500623190e-09 0s 0s 500623470e-09 1s 1s 500631110e-09 0s 0s 500633470e-09 0s 0s 500633710e-09 1s 1s 500641350e-09 0s 0s 500643750e-09 0s 0s 500643950e-09 1s 1s 500651590e-09 0s 0s 500654030e-09 0s 0s 500654190e-09 1s 1s 500661830e-09 0s 0s 500664310e-09 0s 0s 500664430e-09 1s 1s 500672070e-09 0s 0s 500674590e-09 0s 0s 500674670e-09 1s 1s 500682310e-09 0s 0s 500684870e-09 0s 0s 500684910e-09 1s 1s 500692550e-09 0s 0s 500695150e-09 1s 1s 500695190e-09 1s 1s 500702830e-09 0s 0s 500705390e-09 1s 1s 500705470e-09 1s 1s 500713070e-09 0s 0s 500715630e-09 1s 1s 500715750e-09 1s 1s 500723310e-09 0s 0s 500725870e-09 1s 1s 500726030e-09 1s 1s 500733550e-09 0s 0s 500736110e-09 1s 1s 500736310e-09 1s 1s 500743790e-09 0s 0s 500746350e-09 1s 1s 500746590e-09 1s 1s 500754030e-09 0s 0s 500756590e-09 1s 1s 500756870e-09 1s 1s 500764270e-09 0s 0s 500766830e-09 1s 1s 500767150e-09 1s 1s 500774510e-09 0s 0s 500777070e-09 1s 1s 500777430e-09 1s 1s 500784750e-09 0s 0s 500787310e-09 1s 1s 500787710e-09 1s 1s 500794990e-09 0s 0s 500797550e-09 1s 1s 500797990e-09 1s 1s 500805230e-09 0s 0s 500807790e-09 1s 1s 500808270e-09 1s 1s 500815470e-09 0s 0s 500818030e-09 1s 1s 500818550e-09 1s 1s 500825710e-09 0s 0s 500828270e-09 1s 1s 500828830e-09 1s 1s 500835950e-09 0s 0s 500838510e-09 1s 1s 500839110e-09 1s 1s 500846190e-09 0s 0s 500848750e-09 1s 1s 500849390e-09 1s 1s 500856430e-09 0s 0s 500858990e-09 1s 1s 500859670e-09 1s 1s 500866670e-09 0s 0s 500869230e-09 1s 1s 500869950e-09 1s 1s 500876910e-09 0s 0s 500879470e-09 1s 1s 500880230e-09 1s 1s 500887150e-09 0s 0s 500889710e-09 1s 1s 500890510e-09 1s 1s 500897390e-09 0s 0s 500899950e-09 1s 1s 500900790e-09 1s 1s 500907630e-09 0s 0s 500910190e-09 1s 1s 500911070e-09 1s 1s 500917870e-09 0s 0s 500920430e-09 1s 1s 500921350e-09 1s 1s 500928110e-09 0s 0s 500930670e-09 1s 1s 500931630e-09 1s 1s 500938350e-09 0s 0s 500940910e-09 1s 1s 500941910e-09 1s 1s 500948590e-09 0s 0s 500951150e-09 1s 1s 500952190e-09 1s 1s 500958830e-09 0s 0s 500961390e-09 1s 1s 500962470e-09 1s 1s 500969070e-09 0s 0s 500971630e-09 1s 1s 500972750e-09 1s 1s 500979310e-09 0s 0s 500981870e-09 1s 1s 500983030e-09 1s 1s 500989550e-09 0s 0s 500992110e-09 1s 1s 500993310e-09 1s 1s 500999790e-09 0s 0s 501002350e-09 1s 1s 501003590e-09 1s 1s 501010030e-09 0s 0s 501012590e-09 1s 1s 501013870e-09 1s 1s 501020270e-09 0s 0s 501022830e-09 1s 1s 501024150e-09 1s 1s 501030510e-09 0s 0s 501033070e-09 1s 1s 501034430e-09 1s 1s 501040750e-09 0s 0s 501043310e-09 1s 1s 501044710e-09 1s 1s 501050990e-09 0s 0s 501053550e-09 1s 1s 501054990e-09 1s 1s 501061230e-09 0s 0s 501063790e-09 1s 1s 501065270e-09 1s 1s 501071470e-09 0s 0s 501074030e-09 1s 1s 501075550e-09 1s 1s 501081710e-09 0s 0s 501084270e-09 1s 1s 501085830e-09 1s 1s 501091950e-09 0s 0s 501094510e-09 1s 1s 501096110e-09 1s 1s 501102190e-09 0s 0s 501104750e-09 1s 1s 501106390e-09 1s 1s 501112430e-09 0s 0s 501114990e-09 1s 1s 501116670e-09 1s 1s 501122670e-09 0s 0s 501125230e-09 1s 1s 501126950e-09 1s 1s 501132910e-09 0s 0s 501135470e-09 1s 1s 501137230e-09 1s 1s 501143150e-09 0s 0s 501145710e-09 1s 1s 501147510e-09 1s 1s 501153390e-09 0s 0s 501155950e-09 1s 1s 501157790e-09 1s 1s 501163630e-09 0s 0s 501166190e-09 1s 1s 501168070e-09 1s 1s 501173870e-09 0s 0s 501176430e-09 1s 1s 501178350e-09 1s 1s 501184110e-09 0s 0s 501186670e-09 1s 1s 501188630e-09 1s 1s 501194350e-09 0s 0s 501196910e-09 1s 1s 501198910e-09 1s 1s 501204590e-09 0s 0s 501207150e-09 1s 1s 501209190e-09 1s 1s 501214830e-09 0s 0s 501217390e-09 1s 1s 501219470e-09 1s 1s 501225070e-09 0s 0s 501227630e-09 1s 1s 501229750e-09 1s 1s 501235310e-09 0s 0s 501237870e-09 1s 1s 501240030e-09 1s 1s 501245550e-09 0s 0s 501248110e-09 1s 1s 501250310e-09 1s 1s 501255790e-09 0s 0s 501258350e-09 1s 1s 501260590e-09 1s 1s 501266030e-09 0s 0s 501268590e-09 1s 1s 501270870e-09 1s 1s 501276270e-09 0s 0s 501278830e-09 1s 1s 501281150e-09 1s 1s 501286510e-09 0s 0s 501289070e-09 1s 1s 501291430e-09 1s 1s 501296750e-09 0s 0s 501299310e-09 1s 1s 501301710e-09 1s 1s 501306990e-09 0s 0s 501309550e-09 1s 1s 501311990e-09 1s 1s 501317230e-09 0s 0s 501319790e-09 1s 1s 501322270e-09 1s 1s 501327470e-09 0s 0s 501330030e-09 1s 1s 501332550e-09 1s 1s 501337710e-09 0s 0s 501340270e-09 1s 1s 501342830e-09 1s 1s 501347950e-09 0s 0s 501350510e-09 1s 1s 501353110e-09 1s 1s 501358190e-09 0s 0s 501360750e-09 1s 1s 501363390e-09 1s 1s 501368430e-09 0s 0s 501370990e-09 1s 1s 501373670e-09 1s 1s 501378670e-09 0s 0s 501381230e-09 1s 1s 501383950e-09 1s 1s 501388910e-09 0s 0s 501391470e-09 1s 1s 501394230e-09 1s 1s 501399150e-09 0s 0s 501401710e-09 1s 1s 501404510e-09 1s 1s 501409390e-09 0s 0s 501411950e-09 1s 1s 501414790e-09 1s 1s 501419630e-09 0s 0s 501422190e-09 1s 1s 501425070e-09 1s 1s 501429870e-09 0s 0s 501432430e-09 1s 1s 501435350e-09 1s 1s 501440110e-09 0s 0s 501442670e-09 1s 1s 501445630e-09 1s 1s 501450350e-09 0s 0s 501452910e-09 1s 1s 501455910e-09 1s 1s 501460590e-09 0s 0s 501463150e-09 1s 1s 501466190e-09 1s 1s 501470830e-09 0s 0s 501473390e-09 1s 1s 501476470e-09 1s 1s 501481070e-09 0s 0s 501483630e-09 1s 1s 501486750e-09 1s 1s 501491310e-09 0s 0s 501493870e-09 1s 1s 501497030e-09 1s 1s 501501550e-09 0s 0s 501504110e-09 1s 1s 501507310e-09 1s 1s 501511790e-09 0s 0s 501514350e-09 1s 1s 501517590e-09 1s 1s 501522030e-09 0s 0s 501524590e-09 1s 1s 501527870e-09 1s 1s 501532270e-09 0s 0s 501534830e-09 1s 1s 501538150e-09 1s 1s 501542510e-09 0s 0s 501545070e-09 1s 1s 501548430e-09 1s 1s 501552750e-09 0s 0s 501555310e-09 1s 1s 501558710e-09 1s 1s 501562990e-09 0s 0s 501565550e-09 1s 1s 501568990e-09 1s 1s 501573230e-09 0s 0s 501575790e-09 1s 1s 501579270e-09 1s 1s 501583470e-09 0s 0s 501586030e-09 1s 1s 501589550e-09 1s 1s 501593710e-09 0s 0s 501596270e-09 1s 1s 501599830e-09 1s 1s 501603950e-09 0s 0s 501606510e-09 1s 1s 501610110e-09 1s 1s 501614190e-09 0s 0s 501616750e-09 1s 1s 501620390e-09 1s 1s 501624430e-09 0s 0s 501626990e-09 1s 1s 501630670e-09 1s 1s 501634670e-09 0s 0s 501637230e-09 1s 1s 501640950e-09 1s 1s 501644910e-09 0s 0s 501647470e-09 1s 1s 501651230e-09 1s 1s 501655150e-09 0s 0s 501657710e-09 1s 1s 501661510e-09 1s 1s 501665390e-09 0s 0s 501667950e-09 1s 1s 501671790e-09 1s 1s 501675630e-09 0s 0s 501678190e-09 1s 1s 501682070e-09 1s 1s 501685870e-09 0s 0s 501688430e-09 1s 1s 501692350e-09 1s 1s 501696110e-09 0s 0s 501698670e-09 1s 1s 501702630e-09 1s 1s 501706350e-09 0s 0s 501708910e-09 1s 1s 501712910e-09 1s 1s 501716590e-09 0s 0s 501719150e-09 1s 1s 501723190e-09 1s 1s 501726830e-09 0s 0s 501729390e-09 1s 1s 501733470e-09 1s 1s 501737070e-09 0s 0s 501739630e-09 1s 1s 501743750e-09 1s 1s 501747310e-09 0s 0s 501749870e-09 1s 1s 501754030e-09 1s 1s 501757550e-09 0s 0s 501760110e-09 1s 1s 501764310e-09 1s 1s 501767790e-09 0s 0s 501770350e-09 1s 1s 501774590e-09 1s 1s 501778030e-09 0s 0s 501780590e-09 1s 1s 501784870e-09 1s 1s 501788270e-09 0s 0s 501790830e-09 1s 1s 501795150e-09 1s 1s 501798510e-09 0s 0s 501801070e-09 1s 1s 501805430e-09 1s 1s 501808750e-09 0s 0s 501811310e-09 1s 1s 501815710e-09 1s 1s 501818990e-09 0s 0s 501821550e-09 1s 1s 501825990e-09 1s 1s 501829230e-09 0s 0s 501831790e-09 1s 1s 501836270e-09 1s 1s 501839470e-09 0s 0s 501842030e-09 1s 1s 501846550e-09 1s 1s 501849710e-09 0s 0s 501852270e-09 1s 1s 501856830e-09 1s 1s 501859950e-09 0s 0s 501862510e-09 1s 1s 501867110e-09 1s 1s 501870190e-09 0s 0s 501872750e-09 1s 1s 501877390e-09 1s 1s 501880430e-09 0s 0s 501882990e-09 1s 1s 501887670e-09 1s 1s 501890670e-09 0s 0s 501893230e-09 1s 1s 501897950e-09 1s 1s 501900910e-09 0s 0s 501903470e-09 1s 1s 501908230e-09 1s 1s 501911150e-09 0s 0s 501913710e-09 1s 1s 501918510e-09 1s 1s 501921390e-09 0s 0s 501923950e-09 1s 1s 501928790e-09 1s 1s 501931630e-09 0s 0s 501934190e-09 1s 1s 501939070e-09 1s 1s 501941870e-09 0s 0s 501944430e-09 1s 1s 501949350e-09 1s 1s 501952110e-09 0s 0s 501954670e-09 1s 1s 501959630e-09 1s 1s 501962350e-09 0s 0s 501964910e-09 1s 1s 501969910e-09 1s 1s 501972590e-09 0s 0s 501975150e-09 1s 1s 501980190e-09 1s 1s 501982830e-09 0s 0s 501985390e-09 1s 1s 501990470e-09 1s 1s 501993070e-09 0s 0s 501995630e-09 1s 1s 502000750e-09 1s 1s 502003310e-09 0s 0s 502005870e-09 1s 1s 502011030e-09 1s 1s 502013550e-09 0s 0s 502016110e-09 1s 1s 502021310e-09 1s 1s 502023790e-09 0s 0s 502026350e-09 1s 1s 502031590e-09 1s 1s 502034030e-09 0s 0s 502036590e-09 1s 1s 502041870e-09 1s 1s 502044270e-09 0s 0s 502046830e-09 1s 1s 502052150e-09 1s 1s 502054510e-09 0s 0s 502057070e-09 1s 1s 502062430e-09 1s 1s 502064750e-09 0s 0s 502067310e-09 1s 1s 502072710e-09 1s 1s 502074990e-09 0s 0s 502077550e-09 1s 1s 502082990e-09 1s 1s 502085230e-09 0s 0s 502087790e-09 1s 1s 502093270e-09 1s 1s 502095470e-09 0s 0s 502098030e-09 1s 1s 502103550e-09 1s 1s 502105710e-09 0s 0s 502108270e-09 1s 1s 502113830e-09 1s 1s 502115950e-09 0s 0s 502118510e-09 1s 1s 502124110e-09 1s 1s 502126190e-09 0s 0s 502128750e-09 1s 1s 502134390e-09 1s 1s 502136430e-09 0s 0s 502138990e-09 1s 1s 502144670e-09 1s 1s 502146670e-09 0s 0s 502149230e-09 1s 1s 502154950e-09 1s 1s 502156910e-09 0s 0s 502159470e-09 1s 1s 502165230e-09 1s 1s 502167150e-09 0s 0s 502169710e-09 1s 1s 502175510e-09 1s 1s 502177390e-09 0s 0s 502179950e-09 1s 1s 502185790e-09 1s 1s 502187630e-09 0s 0s 502190190e-09 1s 1s 502196070e-09 1s 1s 502197870e-09 0s 0s 502200430e-09 1s 1s 502206350e-09 1s 1s 502208110e-09 0s 0s 502210670e-09 1s 1s 502216630e-09 1s 1s 502218350e-09 0s 0s 502220910e-09 1s 1s 502226910e-09 1s 1s 502228590e-09 0s 0s 502231150e-09 1s 1s 502237190e-09 1s 1s 502238830e-09 0s 0s 502241390e-09 1s 1s 502247470e-09 1s 1s 502249070e-09 0s 0s 502251630e-09 1s 1s 502257750e-09 1s 1s 502259310e-09 0s 0s 502261870e-09 1s 1s 502268030e-09 1s 1s 502269550e-09 0s 0s 502272110e-09 1s 1s 502278310e-09 1s 1s 502279790e-09 0s 0s 502282350e-09 1s 1s 502288590e-09 1s 1s 502290030e-09 0s 0s 502292590e-09 1s 1s 502298870e-09 1s 1s 502300270e-09 0s 0s 502302830e-09 1s 1s 502309150e-09 1s 1s 502310510e-09 0s 0s 502313070e-09 1s 1s 502319430e-09 1s 1s 502320750e-09 0s 0s 502323310e-09 1s 1s 502329710e-09 1s 1s 502330990e-09 0s 0s 502333550e-09 1s 1s 502339990e-09 1s 1s 502341230e-09 0s 0s 502343790e-09 1s 1s 502350270e-09 1s 1s 502351470e-09 0s 0s 502354030e-09 1s 1s 502360550e-09 1s 1s 502361710e-09 0s 0s 502364270e-09 1s 1s 502370830e-09 1s 1s 502371950e-09 0s 0s 502374510e-09 1s 1s 502381110e-09 1s 1s 502382190e-09 0s 0s 502384750e-09 1s 1s 502391390e-09 1s 1s 502392430e-09 0s 0s 502394990e-09 1s 1s 502401670e-09 1s 1s 502402670e-09 0s 0s 502405230e-09 1s 1s 502411950e-09 1s 1s 502412910e-09 0s 0s 502415470e-09 1s 1s 502422230e-09 1s 1s 502423150e-09 0s 0s 502425710e-09 1s 1s 502432510e-09 1s 1s 502433390e-09 0s 0s 502435950e-09 1s 1s 502442790e-09 1s 1s 502443630e-09 0s 0s 502446190e-09 1s 1s 502453070e-09 1s 1s 502453870e-09 0s 0s 502456430e-09 1s 1s 502463350e-09 1s 1s 502464110e-09 0s 0s 502466670e-09 1s 1s 502473630e-09 1s 1s 502474350e-09 0s 0s 502476910e-09 1s 1s 502483910e-09 1s 1s 502484590e-09 0s 0s 502487150e-09 1s 1s 502494190e-09 1s 1s 502494830e-09 0s 0s 502497390e-09 1s 1s 502504470e-09 1s 1s 502505070e-09 0s 0s 502507630e-09 1s 1s 502514750e-09 1s 1s 502515310e-09 0s 0s 502517870e-09 1s 1s 502525030e-09 1s 1s 502525550e-09 0s 0s 502528110e-09 1s 1s 502535310e-09 1s 1s 502535790e-09 0s 0s 502538350e-09 1s 1s 502545590e-09 1s 1s 502546030e-09 0s 0s 502548590e-09 1s 1s 502555870e-09 1s 1s 502556270e-09 0s 0s 502558830e-09 1s 1s 502566150e-09 1s 1s 502566510e-09 0s 0s 502569070e-09 1s 1s 502576430e-09 1s 1s 502576750e-09 0s 0s 502579310e-09 1s 1s 502586710e-09 1s 1s 502586990e-09 0s 0s 502589550e-09 1s 1s 502596990e-09 1s 1s 502597230e-09 0s 0s 502599790e-09 1s 1s 502607270e-09 1s 1s 502607470e-09 0s 0s 502610030e-09 1s 1s 502617550e-09 1s 1s 502617710e-09 0s 0s 502620270e-09 1s 1s 502627830e-09 1s 1s 502627950e-09 0s 0s 502630510e-09 1s 1s 502638110e-09 1s 1s 502638190e-09 0s 0s 502640750e-09 1s 1s 502648390e-09 1s 1s 502648430e-09 0s 0s 502650990e-09 1s 1s 502658670e-09 0s 0s 502661230e-09 1s 1s 502668910e-09 0s 0s 502668950e-09 0s 0s 502671470e-09 1s 1s 502679150e-09 0s 0s 502679230e-09 0s 0s 502681710e-09 1s 1s 502689390e-09 0s 0s 502689510e-09 0s 0s 502691950e-09 1s 1s 502699630e-09 0s 0s 502699790e-09 0s 0s 502702190e-09 1s 1s 502709870e-09 0s 0s 502710070e-09 0s 0s 502712430e-09 1s 1s 502720110e-09 0s 0s 502720350e-09 0s 0s 502722670e-09 1s 1s 502730350e-09 0s 0s 502730630e-09 0s 0s 502732910e-09 1s 1s 502740590e-09 0s 0s 502740910e-09 0s 0s 502743150e-09 1s 1s 502750830e-09 0s 0s 502751190e-09 0s 0s 502753390e-09 1s 1s 502761070e-09 0s 0s 502761470e-09 0s 0s 502763630e-09 1s 1s 502771310e-09 0s 0s 502771750e-09 0s 0s 502773870e-09 1s 1s 502781550e-09 0s 0s 502782030e-09 0s 0s 502784110e-09 1s 1s 502791790e-09 0s 0s 502792310e-09 0s 0s 502794350e-09 1s 1s 502802030e-09 0s 0s 502802590e-09 0s 0s 502804590e-09 1s 1s 502812270e-09 0s 0s 502812870e-09 0s 0s 502814830e-09 1s 1s 502822510e-09 0s 0s 502823150e-09 0s 0s 502825070e-09 1s 1s 502832750e-09 0s 0s 502833430e-09 0s 0s 502835310e-09 1s 1s 502842990e-09 0s 0s 502843710e-09 0s 0s 502845550e-09 1s 1s 502853230e-09 0s 0s 502853990e-09 0s 0s 502855790e-09 1s 1s 502863470e-09 0s 0s 502864270e-09 0s 0s 502866030e-09 1s 1s 502873710e-09 0s 0s 502874550e-09 0s 0s 502876270e-09 1s 1s 502883950e-09 0s 0s 502884830e-09 0s 0s 502886510e-09 1s 1s 502894190e-09 0s 0s 502895110e-09 0s 0s 502896750e-09 1s 1s 502904430e-09 0s 0s 502905390e-09 0s 0s 502906990e-09 1s 1s 502914670e-09 0s 0s 502915670e-09 0s 0s 502917230e-09 1s 1s 502924910e-09 0s 0s 502925950e-09 0s 0s 502927470e-09 1s 1s 502935150e-09 0s 0s 502936230e-09 0s 0s 502937710e-09 1s 1s 502945390e-09 0s 0s 502946510e-09 0s 0s 502947950e-09 1s 1s 502955630e-09 0s 0s 502956790e-09 0s 0s 502958190e-09 1s 1s 502965870e-09 0s 0s 502967070e-09 0s 0s 502968430e-09 1s 1s 502976110e-09 0s 0s 502977350e-09 0s 0s 502978670e-09 1s 1s 502986350e-09 0s 0s 502987630e-09 0s 0s 502988910e-09 1s 1s 502996590e-09 0s 0s 502997910e-09 0s 0s 502999150e-09 1s 1s 503006830e-09 0s 0s 503008190e-09 0s 0s 503009390e-09 1s 1s 503017070e-09 0s 0s 503018470e-09 0s 0s 503019630e-09 1s 1s 503027310e-09 0s 0s 503028750e-09 0s 0s 503029870e-09 1s 1s 503037550e-09 0s 0s 503039030e-09 0s 0s 503040110e-09 1s 1s 503047790e-09 0s 0s 503049310e-09 0s 0s 503050350e-09 1s 1s 503058030e-09 0s 0s 503059590e-09 0s 0s 503060590e-09 1s 1s 503068270e-09 0s 0s 503069870e-09 0s 0s 503070830e-09 1s 1s 503078510e-09 0s 0s 503080150e-09 0s 0s 503081070e-09 1s 1s 503088750e-09 0s 0s 503090430e-09 0s 0s 503091310e-09 1s 1s 503098990e-09 0s 0s 503100710e-09 0s 0s 503101550e-09 1s 1s 503109230e-09 0s 0s 503110990e-09 0s 0s 503111790e-09 1s 1s 503119470e-09 0s 0s 503121270e-09 0s 0s 503122030e-09 1s 1s 503129710e-09 0s 0s 503131550e-09 0s 0s 503132270e-09 1s 1s 503139950e-09 0s 0s 503141830e-09 0s 0s 503142510e-09 1s 1s 503150190e-09 0s 0s 503152110e-09 0s 0s 503152750e-09 1s 1s 503160430e-09 0s 0s 503162390e-09 0s 0s 503162990e-09 1s 1s 503170670e-09 0s 0s 503172670e-09 0s 0s 503173230e-09 1s 1s 503180910e-09 0s 0s 503182950e-09 0s 0s 503183470e-09 1s 1s 503191150e-09 0s 0s 503193230e-09 0s 0s 503193710e-09 1s 1s 503201390e-09 0s 0s 503203510e-09 0s 0s 503203950e-09 1s 1s 503211630e-09 0s 0s 503213790e-09 0s 0s 503214190e-09 1s 1s 503221870e-09 0s 0s 503224070e-09 0s 0s 503224430e-09 1s 1s 503232110e-09 0s 0s 503234350e-09 0s 0s 503234670e-09 1s 1s 503242350e-09 0s 0s 503244630e-09 0s 0s 503244910e-09 1s 1s 503252590e-09 0s 0s 503254910e-09 0s 0s 503255150e-09 1s 1s 503262830e-09 0s 0s 503265190e-09 0s 0s 503265390e-09 1s 1s 503273070e-09 0s 0s 503275470e-09 0s 0s 503275630e-09 1s 1s 503283310e-09 0s 0s 503285750e-09 0s 0s 503285870e-09 1s 1s 503293550e-09 0s 0s 503296030e-09 0s 0s 503296110e-09 1s 1s 503303790e-09 0s 0s 503306310e-09 0s 0s 503306350e-09 1s 1s 503314030e-09 0s 0s 503316590e-09 1s 1s 503316630e-09 1s 1s 503324310e-09 0s 0s 503326830e-09 1s 1s 503326910e-09 1s 1s 503334550e-09 0s 0s 503337070e-09 1s 1s 503337190e-09 1s 1s 503344790e-09 0s 0s 503347310e-09 1s 1s 503347470e-09 1s 1s 503355030e-09 0s 0s 503357550e-09 1s 1s 503357750e-09 1s 1s 503365270e-09 0s 0s 503367790e-09 1s 1s 503368030e-09 1s 1s 503375510e-09 0s 0s 503378030e-09 1s 1s 503378310e-09 1s 1s 503385750e-09 0s 0s 503388270e-09 1s 1s 503388590e-09 1s 1s 503395990e-09 0s 0s 503398510e-09 1s 1s 503398870e-09 1s 1s 503406230e-09 0s 0s 503408750e-09 1s 1s 503409150e-09 1s 1s 503416470e-09 0s 0s 503418990e-09 1s 1s 503419430e-09 1s 1s 503426710e-09 0s 0s 503429230e-09 1s 1s 503429710e-09 1s 1s 503436950e-09 0s 0s 503439470e-09 1s 1s 503439990e-09 1s 1s 503447190e-09 0s 0s 503449710e-09 1s 1s 503450270e-09 1s 1s 503457430e-09 0s 0s 503459950e-09 1s 1s 503460550e-09 1s 1s 503467670e-09 0s 0s 503470190e-09 1s 1s 503470830e-09 1s 1s 503477910e-09 0s 0s 503480430e-09 1s 1s 503481110e-09 1s 1s 503488150e-09 0s 0s 503490670e-09 1s 1s 503491390e-09 1s 1s 503498390e-09 0s 0s 503500910e-09 1s 1s 503501670e-09 1s 1s 503508630e-09 0s 0s 503511150e-09 1s 1s 503511950e-09 1s 1s 503518870e-09 0s 0s 503521390e-09 1s 1s 503522230e-09 1s 1s 503529110e-09 0s 0s 503531630e-09 1s 1s 503532510e-09 1s 1s 503539350e-09 0s 0s 503541870e-09 1s 1s 503542790e-09 1s 1s 503549590e-09 0s 0s 503552110e-09 1s 1s 503553070e-09 1s 1s 503559830e-09 0s 0s 503562350e-09 1s 1s 503563350e-09 1s 1s 503570070e-09 0s 0s 503572590e-09 1s 1s 503573630e-09 1s 1s 503580310e-09 0s 0s 503582830e-09 1s 1s 503583910e-09 1s 1s 503590550e-09 0s 0s 503593070e-09 1s 1s 503594190e-09 1s 1s 503600790e-09 0s 0s 503603310e-09 1s 1s 503604470e-09 1s 1s 503611030e-09 0s 0s 503613550e-09 1s 1s 503614750e-09 1s 1s 503621270e-09 0s 0s 503623790e-09 1s 1s 503625030e-09 1s 1s 503631510e-09 0s 0s 503634030e-09 1s 1s 503635310e-09 1s 1s 503641750e-09 0s 0s 503644270e-09 1s 1s 503645590e-09 1s 1s 503651990e-09 0s 0s 503654510e-09 1s 1s 503655870e-09 1s 1s 503662230e-09 0s 0s 503664750e-09 1s 1s 503666150e-09 1s 1s 503672470e-09 0s 0s 503674990e-09 1s 1s 503676430e-09 1s 1s 503682710e-09 0s 0s 503685230e-09 1s 1s 503686710e-09 1s 1s 503692950e-09 0s 0s 503695470e-09 1s 1s 503696990e-09 1s 1s 503703190e-09 0s 0s 503705710e-09 1s 1s 503707270e-09 1s 1s 503713430e-09 0s 0s 503715950e-09 1s 1s 503717550e-09 1s 1s 503723670e-09 0s 0s 503726190e-09 1s 1s 503727830e-09 1s 1s 503733910e-09 0s 0s 503736430e-09 1s 1s 503738110e-09 1s 1s 503744150e-09 0s 0s 503746670e-09 1s 1s 503748390e-09 1s 1s 503754390e-09 0s 0s 503756910e-09 1s 1s 503758670e-09 1s 1s 503764630e-09 0s 0s 503767150e-09 1s 1s 503768950e-09 1s 1s 503774870e-09 0s 0s 503777390e-09 1s 1s 503779230e-09 1s 1s 503785110e-09 0s 0s 503787630e-09 1s 1s 503789510e-09 1s 1s 503795350e-09 0s 0s 503797870e-09 1s 1s 503799790e-09 1s 1s 503805590e-09 0s 0s 503808110e-09 1s 1s 503810070e-09 1s 1s 503815830e-09 0s 0s 503818350e-09 1s 1s 503820350e-09 1s 1s 503826070e-09 0s 0s 503828590e-09 1s 1s 503830630e-09 1s 1s 503836310e-09 0s 0s 503838830e-09 1s 1s 503840910e-09 1s 1s 503846550e-09 0s 0s 503849070e-09 1s 1s 503851190e-09 1s 1s 503856790e-09 0s 0s 503859310e-09 1s 1s 503861470e-09 1s 1s 503867030e-09 0s 0s 503869550e-09 1s 1s 503871750e-09 1s 1s 503877270e-09 0s 0s 503879790e-09 1s 1s 503882030e-09 1s 1s 503887510e-09 0s 0s 503890030e-09 1s 1s 503892310e-09 1s 1s 503897750e-09 0s 0s 503900270e-09 1s 1s 503902590e-09 1s 1s 503907990e-09 0s 0s 503910510e-09 1s 1s 503912870e-09 1s 1s 503918230e-09 0s 0s 503920750e-09 1s 1s 503923150e-09 1s 1s 503928470e-09 0s 0s 503930990e-09 1s 1s 503933430e-09 1s 1s 503938710e-09 0s 0s 503941230e-09 1s 1s 503943710e-09 1s 1s 503948950e-09 0s 0s 503951470e-09 1s 1s 503953990e-09 1s 1s 503959190e-09 0s 0s 503961710e-09 1s 1s 503964270e-09 1s 1s 503969430e-09 0s 0s 503971950e-09 1s 1s 503974550e-09 1s 1s 503979670e-09 0s 0s 503982190e-09 1s 1s 503984830e-09 1s 1s 503989910e-09 0s 0s 503992430e-09 1s 1s 503995110e-09 1s 1s 504000150e-09 0s 0s 504002670e-09 1s 1s 504005390e-09 1s 1s 504010390e-09 0s 0s 504012910e-09 1s 1s 504015670e-09 1s 1s 504020630e-09 0s 0s 504023150e-09 1s 1s 504025950e-09 1s 1s 504030870e-09 0s 0s 504033390e-09 1s 1s 504036230e-09 1s 1s 504041110e-09 0s 0s 504043630e-09 1s 1s 504046510e-09 1s 1s 504051350e-09 0s 0s 504053870e-09 1s 1s 504056790e-09 1s 1s 504061590e-09 0s 0s 504064110e-09 1s 1s 504067070e-09 1s 1s 504071830e-09 0s 0s 504074350e-09 1s 1s 504077350e-09 1s 1s 504082070e-09 0s 0s 504084590e-09 1s 1s 504087630e-09 1s 1s 504092310e-09 0s 0s 504094830e-09 1s 1s 504097910e-09 1s 1s 504102550e-09 0s 0s 504105070e-09 1s 1s 504108190e-09 1s 1s 504112790e-09 0s 0s 504115310e-09 1s 1s 504118470e-09 1s 1s 504123030e-09 0s 0s 504125550e-09 1s 1s 504128750e-09 1s 1s 504133270e-09 0s 0s 504135790e-09 1s 1s 504139030e-09 1s 1s 504143510e-09 0s 0s 504146030e-09 1s 1s 504149310e-09 1s 1s 504153750e-09 0s 0s 504156270e-09 1s 1s 504159590e-09 1s 1s 504163990e-09 0s 0s 504166510e-09 1s 1s 504169870e-09 1s 1s 504174230e-09 0s 0s 504176750e-09 1s 1s 504180150e-09 1s 1s 504184470e-09 0s 0s 504186990e-09 1s 1s 504190430e-09 1s 1s 504194710e-09 0s 0s 504197230e-09 1s 1s 504200710e-09 1s 1s 504204950e-09 0s 0s 504207470e-09 1s 1s 504210990e-09 1s 1s 504215190e-09 0s 0s 504217710e-09 1s 1s 504221270e-09 1s 1s 504225430e-09 0s 0s 504227950e-09 1s 1s 504231550e-09 1s 1s 504235670e-09 0s 0s 504238190e-09 1s 1s 504241830e-09 1s 1s 504245910e-09 0s 0s 504248430e-09 1s 1s 504252110e-09 1s 1s 504256150e-09 0s 0s 504258670e-09 1s 1s 504262390e-09 1s 1s 504266390e-09 0s 0s 504268910e-09 1s 1s 504272670e-09 1s 1s 504276630e-09 0s 0s 504279150e-09 1s 1s 504282950e-09 1s 1s 504286870e-09 0s 0s 504289390e-09 1s 1s 504293230e-09 1s 1s 504297110e-09 0s 0s 504299630e-09 1s 1s 504303510e-09 1s 1s 504307350e-09 0s 0s 504309870e-09 1s 1s 504313790e-09 1s 1s 504317590e-09 0s 0s 504320110e-09 1s 1s 504324070e-09 1s 1s 504327830e-09 0s 0s 504330350e-09 1s 1s 504334350e-09 1s 1s 504338070e-09 0s 0s 504340590e-09 1s 1s 504344630e-09 1s 1s 504348310e-09 0s 0s 504350830e-09 1s 1s 504354910e-09 1s 1s 504358550e-09 0s 0s 504361070e-09 1s 1s 504365190e-09 1s 1s 504368790e-09 0s 0s 504371310e-09 1s 1s 504375470e-09 1s 1s 504379030e-09 0s 0s 504381550e-09 1s 1s 504385750e-09 1s 1s 504389270e-09 0s 0s 504391790e-09 1s 1s 504396030e-09 1s 1s 504399510e-09 0s 0s 504402030e-09 1s 1s 504406310e-09 1s 1s 504409750e-09 0s 0s 504412270e-09 1s 1s 504416590e-09 1s 1s 504419990e-09 0s 0s 504422510e-09 1s 1s 504426870e-09 1s 1s 504430230e-09 0s 0s 504432750e-09 1s 1s 504437150e-09 1s 1s 504440470e-09 0s 0s 504442990e-09 1s 1s 504447430e-09 1s 1s 504450710e-09 0s 0s 504453230e-09 1s 1s 504457710e-09 1s 1s 504460950e-09 0s 0s 504463470e-09 1s 1s 504467990e-09 1s 1s 504471190e-09 0s 0s 504473710e-09 1s 1s 504478270e-09 1s 1s 504481430e-09 0s 0s 504483950e-09 1s 1s 504488550e-09 1s 1s 504491670e-09 0s 0s 504494190e-09 1s 1s 504498830e-09 1s 1s 504501910e-09 0s 0s 504504430e-09 1s 1s 504509110e-09 1s 1s 504512150e-09 0s 0s 504514670e-09 1s 1s 504519390e-09 1s 1s 504522390e-09 0s 0s 504524910e-09 1s 1s 504529670e-09 1s 1s 504532630e-09 0s 0s 504535150e-09 1s 1s 504539950e-09 1s 1s 504542870e-09 0s 0s 504545390e-09 1s 1s 504550230e-09 1s 1s 504553110e-09 0s 0s 504555630e-09 1s 1s 504560510e-09 1s 1s 504563350e-09 0s 0s 504565870e-09 1s 1s 504570790e-09 1s 1s 504573590e-09 0s 0s 504576110e-09 1s 1s 504581070e-09 1s 1s 504583830e-09 0s 0s 504586350e-09 1s 1s 504591350e-09 1s 1s 504594070e-09 0s 0s 504596590e-09 1s 1s 504601630e-09 1s 1s 504604310e-09 0s 0s 504606830e-09 1s 1s 504611910e-09 1s 1s 504614550e-09 0s 0s 504617070e-09 1s 1s 504622190e-09 1s 1s 504624790e-09 0s 0s 504627310e-09 1s 1s 504632470e-09 1s 1s 504635030e-09 0s 0s 504637550e-09 1s 1s 504642750e-09 1s 1s 504645270e-09 0s 0s 504647790e-09 1s 1s 504653030e-09 1s 1s 504655510e-09 0s 0s 504658030e-09 1s 1s 504663310e-09 1s 1s 504665750e-09 0s 0s 504668270e-09 1s 1s 504673590e-09 1s 1s 504675990e-09 0s 0s 504678510e-09 1s 1s 504683870e-09 1s 1s 504686230e-09 0s 0s 504688750e-09 1s 1s 504694150e-09 1s 1s 504696470e-09 0s 0s 504698990e-09 1s 1s 504704430e-09 1s 1s 504706710e-09 0s 0s 504709230e-09 1s 1s 504714710e-09 1s 1s 504716950e-09 0s 0s 504719470e-09 1s 1s 504724990e-09 1s 1s 504727190e-09 0s 0s 504729710e-09 1s 1s 504735270e-09 1s 1s 504737430e-09 0s 0s 504739950e-09 1s 1s 504745550e-09 1s 1s 504747670e-09 0s 0s 504750190e-09 1s 1s 504755830e-09 1s 1s 504757910e-09 0s 0s 504760430e-09 1s 1s 504766110e-09 1s 1s 504768150e-09 0s 0s 504770670e-09 1s 1s 504776390e-09 1s 1s 504778390e-09 0s 0s 504780910e-09 1s 1s 504786670e-09 1s 1s 504788630e-09 0s 0s 504791150e-09 1s 1s 504796950e-09 1s 1s 504798870e-09 0s 0s 504801390e-09 1s 1s 504807230e-09 1s 1s 504809110e-09 0s 0s 504811630e-09 1s 1s 504817510e-09 1s 1s 504819350e-09 0s 0s 504821870e-09 1s 1s 504827790e-09 1s 1s 504829590e-09 0s 0s 504832110e-09 1s 1s 504838070e-09 1s 1s 504839830e-09 0s 0s 504842350e-09 1s 1s 504848350e-09 1s 1s 504850070e-09 0s 0s 504852590e-09 1s 1s 504858630e-09 1s 1s 504860310e-09 0s 0s 504862830e-09 1s 1s 504868910e-09 1s 1s 504870550e-09 0s 0s 504873070e-09 1s 1s 504879190e-09 1s 1s 504880790e-09 0s 0s 504883310e-09 1s 1s 504889470e-09 1s 1s 504891030e-09 0s 0s 504893550e-09 1s 1s 504899750e-09 1s 1s 504901270e-09 0s 0s 504903790e-09 1s 1s 504910030e-09 1s 1s 504911510e-09 0s 0s 504914030e-09 1s 1s 504920310e-09 1s 1s 504921750e-09 0s 0s 504924270e-09 1s 1s 504930590e-09 1s 1s 504931990e-09 0s 0s 504934510e-09 1s 1s 504940870e-09 1s 1s 504942230e-09 0s 0s 504944750e-09 1s 1s 504951150e-09 1s 1s 504952470e-09 0s 0s 504954990e-09 1s 1s 504961430e-09 1s 1s 504962710e-09 0s 0s 504965230e-09 1s 1s 504971710e-09 1s 1s 504972950e-09 0s 0s 504975470e-09 1s 1s 504981990e-09 1s 1s 504983190e-09 0s 0s 504985710e-09 1s 1s 504992270e-09 1s 1s 504993430e-09 0s 0s 504995950e-09 1s 1s 505002550e-09 1s 1s 505003670e-09 0s 0s 505006190e-09 1s 1s 505012830e-09 1s 1s 505013910e-09 0s 0s 505016430e-09 1s 1s 505023110e-09 1s 1s 505024150e-09 0s 0s 505026670e-09 1s 1s 505033390e-09 1s 1s 505034390e-09 0s 0s 505036910e-09 1s 1s 505043670e-09 1s 1s 505044630e-09 0s 0s 505047150e-09 1s 1s 505053950e-09 1s 1s 505054870e-09 0s 0s 505057390e-09 1s 1s 505064230e-09 1s 1s 505065110e-09 0s 0s 505067630e-09 1s 1s 505074510e-09 1s 1s 505075350e-09 0s 0s 505077870e-09 1s 1s 505084790e-09 1s 1s 505085590e-09 0s 0s 505088110e-09 1s 1s 505095070e-09 1s 1s 505095830e-09 0s 0s 505098350e-09 1s 1s 505105350e-09 1s 1s 505106070e-09 0s 0s 505108590e-09 1s 1s 505115630e-09 1s 1s 505116310e-09 0s 0s 505118830e-09 1s 1s 505125910e-09 1s 1s 505126550e-09 0s 0s 505129070e-09 1s 1s 505136190e-09 1s 1s 505136790e-09 0s 0s 505139310e-09 1s 1s 505146470e-09 1s 1s 505147030e-09 0s 0s 505149550e-09 1s 1s 505156750e-09 1s 1s 505157270e-09 0s 0s 505159790e-09 1s 1s 505167030e-09 1s 1s 505167510e-09 0s 0s 505170030e-09 1s 1s 505177310e-09 1s 1s 505177750e-09 0s 0s 505180270e-09 1s 1s 505187590e-09 1s 1s 505187990e-09 0s 0s 505190510e-09 1s 1s 505197870e-09 1s 1s 505198230e-09 0s 0s 505200750e-09 1s 1s 505208150e-09 1s 1s 505208470e-09 0s 0s 505210990e-09 1s 1s 505218430e-09 1s 1s 505218710e-09 0s 0s 505221230e-09 1s 1s 505228710e-09 1s 1s 505228950e-09 0s 0s 505231470e-09 1s 1s 505238990e-09 1s 1s 505239190e-09 0s 0s 505241710e-09 1s 1s 505249270e-09 1s 1s 505249430e-09 0s 0s 505251950e-09 1s 1s 505259550e-09 1s 1s 505259670e-09 0s 0s 505262190e-09 1s 1s 505269830e-09 1s 1s 505269910e-09 0s 0s 505272430e-09 1s 1s 505280110e-09 1s 1s 505280150e-09 0s 0s 505282670e-09 1s 1s 505290390e-09 0s 0s 505292910e-09 1s 1s 505300630e-09 0s 0s 505300670e-09 0s 0s 505303150e-09 1s 1s 505310870e-09 0s 0s 505310950e-09 0s 0s 505313390e-09 1s 1s 505321110e-09 0s 0s 505321230e-09 0s 0s 505323630e-09 1s 1s 505331350e-09 0s 0s 505331510e-09 0s 0s 505333870e-09 1s 1s 505341590e-09 0s 0s 505341790e-09 0s 0s 505344110e-09 1s 1s 505351830e-09 0s 0s 505352070e-09 0s 0s 505354350e-09 1s 1s 505362070e-09 0s 0s 505362350e-09 0s 0s 505364590e-09 1s 1s 505372310e-09 0s 0s 505372630e-09 0s 0s 505374830e-09 1s 1s 505382550e-09 0s 0s 505382910e-09 0s 0s 505385070e-09 1s 1s 505392790e-09 0s 0s 505393190e-09 0s 0s 505395310e-09 1s 1s 505403030e-09 0s 0s 505403470e-09 0s 0s 505405550e-09 1s 1s 505413270e-09 0s 0s 505413750e-09 0s 0s 505415790e-09 1s 1s 505423510e-09 0s 0s 505424030e-09 0s 0s 505426030e-09 1s 1s 505433750e-09 0s 0s 505434310e-09 0s 0s 505436270e-09 1s 1s 505443990e-09 0s 0s 505444590e-09 0s 0s 505446510e-09 1s 1s 505454230e-09 0s 0s 505454870e-09 0s 0s 505456750e-09 1s 1s 505464470e-09 0s 0s 505465150e-09 0s 0s 505466990e-09 1s 1s 505474710e-09 0s 0s 505475430e-09 0s 0s 505477230e-09 1s 1s 505484950e-09 0s 0s 505485710e-09 0s 0s 505487470e-09 1s 1s 505495190e-09 0s 0s 505495990e-09 0s 0s 505497710e-09 1s 1s 505505430e-09 0s 0s 505506270e-09 0s 0s 505507950e-09 1s 1s 505515670e-09 0s 0s 505516550e-09 0s 0s 505518190e-09 1s 1s 505525910e-09 0s 0s 505526830e-09 0s 0s 505528430e-09 1s 1s 505536150e-09 0s 0s 505537110e-09 0s 0s 505538670e-09 1s 1s 505546390e-09 0s 0s 505547390e-09 0s 0s 505548910e-09 1s 1s 505556630e-09 0s 0s 505557670e-09 0s 0s 505559150e-09 1s 1s 505566870e-09 0s 0s 505567950e-09 0s 0s 505569390e-09 1s 1s 505577110e-09 0s 0s 505578230e-09 0s 0s 505579630e-09 1s 1s 505587350e-09 0s 0s 505588510e-09 0s 0s 505589870e-09 1s 1s 505597590e-09 0s 0s 505598790e-09 0s 0s 505600110e-09 1s 1s 505607830e-09 0s 0s 505609070e-09 0s 0s 505610350e-09 1s 1s 505618070e-09 0s 0s 505619350e-09 0s 0s 505620590e-09 1s 1s 505628310e-09 0s 0s 505629630e-09 0s 0s 505630830e-09 1s 1s 505638550e-09 0s 0s 505639910e-09 0s 0s 505641070e-09 1s 1s 505648790e-09 0s 0s 505650190e-09 0s 0s 505651310e-09 1s 1s 505659030e-09 0s 0s 505660470e-09 0s 0s 505661550e-09 1s 1s 505669270e-09 0s 0s 505670750e-09 0s 0s 505671790e-09 1s 1s 505679510e-09 0s 0s 505681030e-09 0s 0s 505682030e-09 1s 1s 505689750e-09 0s 0s 505691310e-09 0s 0s 505692270e-09 1s 1s 505699990e-09 0s 0s 505701590e-09 0s 0s 505702510e-09 1s 1s 505710230e-09 0s 0s 505711870e-09 0s 0s 505712750e-09 1s 1s 505720470e-09 0s 0s 505722150e-09 0s 0s 505722990e-09 1s 1s 505730710e-09 0s 0s 505732430e-09 0s 0s 505733230e-09 1s 1s 505740950e-09 0s 0s 505742710e-09 0s 0s 505743470e-09 1s 1s 505751190e-09 0s 0s 505752990e-09 0s 0s 505753710e-09 1s 1s 505761430e-09 0s 0s 505763270e-09 0s 0s 505763950e-09 1s 1s 505771670e-09 0s 0s 505773550e-09 0s 0s 505774190e-09 1s 1s 505781910e-09 0s 0s 505783830e-09 0s 0s 505784430e-09 1s 1s 505792150e-09 0s 0s 505794110e-09 0s 0s 505794670e-09 1s 1s 505802390e-09 0s 0s 505804390e-09 0s 0s 505804910e-09 1s 1s 505812630e-09 0s 0s 505814670e-09 0s 0s 505815150e-09 1s 1s 505822870e-09 0s 0s 505824950e-09 0s 0s 505825390e-09 1s 1s 505833110e-09 0s 0s 505835230e-09 0s 0s 505835630e-09 1s 1s 505843350e-09 0s 0s 505845510e-09 0s 0s 505845870e-09 1s 1s 505853590e-09 0s 0s 505855790e-09 0s 0s 505856110e-09 1s 1s 505863830e-09 0s 0s 505866070e-09 0s 0s 505866350e-09 1s 1s 505874070e-09 0s 0s 505876350e-09 0s 0s 505876590e-09 1s 1s 505884310e-09 0s 0s 505886630e-09 0s 0s 505886830e-09 1s 1s 505894550e-09 0s 0s 505896910e-09 0s 0s 505897070e-09 1s 1s 505904790e-09 0s 0s 505907190e-09 0s 0s 505907310e-09 1s 1s 505915030e-09 0s 0s 505917470e-09 0s 0s 505917550e-09 1s 1s 505925270e-09 0s 0s 505927750e-09 0s 0s 505927790e-09 1s 1s 505935510e-09 0s 0s 505938030e-09 1s 1s 505938070e-09 1s 1s 505945790e-09 0s 0s 505948270e-09 1s 1s 505948350e-09 1s 1s 505956030e-09 0s 0s 505958510e-09 1s 1s 505958630e-09 1s 1s 505966270e-09 0s 0s 505968750e-09 1s 1s 505968910e-09 1s 1s 505976510e-09 0s 0s 505978990e-09 1s 1s 505979190e-09 1s 1s 505986750e-09 0s 0s 505989230e-09 1s 1s 505989470e-09 1s 1s 505996990e-09 0s 0s 505999470e-09 1s 1s 505999750e-09 1s 1s 506007230e-09 0s 0s 506009710e-09 1s 1s 506010030e-09 1s 1s 506017470e-09 0s 0s 506019950e-09 1s 1s 506020310e-09 1s 1s 506027710e-09 0s 0s 506030190e-09 1s 1s 506030590e-09 1s 1s 506037950e-09 0s 0s 506040430e-09 1s 1s 506040870e-09 1s 1s 506048190e-09 0s 0s 506050670e-09 1s 1s 506051150e-09 1s 1s 506058430e-09 0s 0s 506060910e-09 1s 1s 506061430e-09 1s 1s 506068670e-09 0s 0s 506071150e-09 1s 1s 506071710e-09 1s 1s 506078910e-09 0s 0s 506081390e-09 1s 1s 506081990e-09 1s 1s 506089150e-09 0s 0s 506091630e-09 1s 1s 506092270e-09 1s 1s 506099390e-09 0s 0s 506101870e-09 1s 1s 506102550e-09 1s 1s 506109630e-09 0s 0s 506112110e-09 1s 1s 506112830e-09 1s 1s 506119870e-09 0s 0s 506122350e-09 1s 1s 506123110e-09 1s 1s 506130110e-09 0s 0s 506132590e-09 1s 1s 506133390e-09 1s 1s 506140350e-09 0s 0s 506142830e-09 1s 1s 506143670e-09 1s 1s 506150590e-09 0s 0s 506153070e-09 1s 1s 506153950e-09 1s 1s 506160830e-09 0s 0s 506163310e-09 1s 1s 506164230e-09 1s 1s 506171070e-09 0s 0s 506173550e-09 1s 1s 506174510e-09 1s 1s 506181310e-09 0s 0s 506183790e-09 1s 1s 506184790e-09 1s 1s 506191550e-09 0s 0s 506194030e-09 1s 1s 506195070e-09 1s 1s 506201790e-09 0s 0s 506204270e-09 1s 1s 506205350e-09 1s 1s 506212030e-09 0s 0s 506214510e-09 1s 1s 506215630e-09 1s 1s 506222270e-09 0s 0s 506224750e-09 1s 1s 506225910e-09 1s 1s 506232510e-09 0s 0s 506234990e-09 1s 1s 506236190e-09 1s 1s 506242750e-09 0s 0s 506245230e-09 1s 1s 506246470e-09 1s 1s 506252990e-09 0s 0s 506255470e-09 1s 1s 506256750e-09 1s 1s 506263230e-09 0s 0s 506265710e-09 1s 1s 506267030e-09 1s 1s 506273470e-09 0s 0s 506275950e-09 1s 1s 506277310e-09 1s 1s 506283710e-09 0s 0s 506286190e-09 1s 1s 506287590e-09 1s 1s 506293950e-09 0s 0s 506296430e-09 1s 1s 506297870e-09 1s 1s 506304190e-09 0s 0s 506306670e-09 1s 1s 506308150e-09 1s 1s 506314430e-09 0s 0s 506316910e-09 1s 1s 506318430e-09 1s 1s 506324670e-09 0s 0s 506327150e-09 1s 1s 506328710e-09 1s 1s 506334910e-09 0s 0s 506337390e-09 1s 1s 506338990e-09 1s 1s 506345150e-09 0s 0s 506347630e-09 1s 1s 506349270e-09 1s 1s 506355390e-09 0s 0s 506357870e-09 1s 1s 506359550e-09 1s 1s 506365630e-09 0s 0s 506368110e-09 1s 1s 506369830e-09 1s 1s 506375870e-09 0s 0s 506378350e-09 1s 1s 506380110e-09 1s 1s 506386110e-09 0s 0s 506388590e-09 1s 1s 506390390e-09 1s 1s 506396350e-09 0s 0s 506398830e-09 1s 1s 506400670e-09 1s 1s 506406590e-09 0s 0s 506409070e-09 1s 1s 506410950e-09 1s 1s 506416830e-09 0s 0s 506419310e-09 1s 1s 506421230e-09 1s 1s 506427070e-09 0s 0s 506429550e-09 1s 1s 506431510e-09 1s 1s 506437310e-09 0s 0s 506439790e-09 1s 1s 506441790e-09 1s 1s 506447550e-09 0s 0s 506450030e-09 1s 1s 506452070e-09 1s 1s 506457790e-09 0s 0s 506460270e-09 1s 1s 506462350e-09 1s 1s 506468030e-09 0s 0s 506470510e-09 1s 1s 506472630e-09 1s 1s 506478270e-09 0s 0s 506480750e-09 1s 1s 506482910e-09 1s 1s 506488510e-09 0s 0s 506490990e-09 1s 1s 506493190e-09 1s 1s 506498750e-09 0s 0s 506501230e-09 1s 1s 506503470e-09 1s 1s 506508990e-09 0s 0s 506511470e-09 1s 1s 506513750e-09 1s 1s 506519230e-09 0s 0s 506521710e-09 1s 1s 506524030e-09 1s 1s 506529470e-09 0s 0s 506531950e-09 1s 1s 506534310e-09 1s 1s 506539710e-09 0s 0s 506542190e-09 1s 1s 506544590e-09 1s 1s 506549950e-09 0s 0s 506552430e-09 1s 1s 506554870e-09 1s 1s 506560190e-09 0s 0s 506562670e-09 1s 1s 506565150e-09 1s 1s 506570430e-09 0s 0s 506572910e-09 1s 1s 506575430e-09 1s 1s 506580670e-09 0s 0s 506583150e-09 1s 1s 506585710e-09 1s 1s 506590910e-09 0s 0s 506593390e-09 1s 1s 506595990e-09 1s 1s 506601150e-09 0s 0s 506603630e-09 1s 1s 506606270e-09 1s 1s 506611390e-09 0s 0s 506613870e-09 1s 1s 506616550e-09 1s 1s 506621630e-09 0s 0s 506624110e-09 1s 1s 506626830e-09 1s 1s 506631870e-09 0s 0s 506634350e-09 1s 1s 506637110e-09 1s 1s 506642110e-09 0s 0s 506644590e-09 1s 1s 506647390e-09 1s 1s 506652350e-09 0s 0s 506654830e-09 1s 1s 506657670e-09 1s 1s 506662590e-09 0s 0s 506665070e-09 1s 1s 506667950e-09 1s 1s 506672830e-09 0s 0s 506675310e-09 1s 1s 506678230e-09 1s 1s 506683070e-09 0s 0s 506685550e-09 1s 1s 506688510e-09 1s 1s 506693310e-09 0s 0s 506695790e-09 1s 1s 506698790e-09 1s 1s 506703550e-09 0s 0s 506706030e-09 1s 1s 506709070e-09 1s 1s 506713790e-09 0s 0s 506716270e-09 1s 1s 506719350e-09 1s 1s 506724030e-09 0s 0s 506726510e-09 1s 1s 506729630e-09 1s 1s 506734270e-09 0s 0s 506736750e-09 1s 1s 506739910e-09 1s 1s 506744510e-09 0s 0s 506746990e-09 1s 1s 506750190e-09 1s 1s 506754750e-09 0s 0s 506757230e-09 1s 1s 506760470e-09 1s 1s 506764990e-09 0s 0s 506767470e-09 1s 1s 506770750e-09 1s 1s 506775230e-09 0s 0s 506777710e-09 1s 1s 506781030e-09 1s 1s 506785470e-09 0s 0s 506787950e-09 1s 1s 506791310e-09 1s 1s 506795710e-09 0s 0s 506798190e-09 1s 1s 506801590e-09 1s 1s 506805950e-09 0s 0s 506808430e-09 1s 1s 506811870e-09 1s 1s 506816190e-09 0s 0s 506818670e-09 1s 1s 506822150e-09 1s 1s 506826430e-09 0s 0s 506828910e-09 1s 1s 506832430e-09 1s 1s 506836670e-09 0s 0s 506839150e-09 1s 1s 506842710e-09 1s 1s 506846910e-09 0s 0s 506849390e-09 1s 1s 506852990e-09 1s 1s 506857150e-09 0s 0s 506859630e-09 1s 1s 506863270e-09 1s 1s 506867390e-09 0s 0s 506869870e-09 1s 1s 506873550e-09 1s 1s 506877630e-09 0s 0s 506880110e-09 1s 1s 506883830e-09 1s 1s 506887870e-09 0s 0s 506890350e-09 1s 1s 506894110e-09 1s 1s 506898110e-09 0s 0s 506900590e-09 1s 1s 506904390e-09 1s 1s 506908350e-09 0s 0s 506910830e-09 1s 1s 506914670e-09 1s 1s 506918590e-09 0s 0s 506921070e-09 1s 1s 506924950e-09 1s 1s 506928830e-09 0s 0s 506931310e-09 1s 1s 506935230e-09 1s 1s 506939070e-09 0s 0s 506941550e-09 1s 1s 506945510e-09 1s 1s 506949310e-09 0s 0s 506951790e-09 1s 1s 506955790e-09 1s 1s 506959550e-09 0s 0s 506962030e-09 1s 1s 506966070e-09 1s 1s 506969790e-09 0s 0s 506972270e-09 1s 1s 506976350e-09 1s 1s 506980030e-09 0s 0s 506982510e-09 1s 1s 506986630e-09 1s 1s 506990270e-09 0s 0s 506992750e-09 1s 1s 506996910e-09 1s 1s 507000510e-09 0s 0s 507002990e-09 1s 1s 507007190e-09 1s 1s 507010750e-09 0s 0s 507013230e-09 1s 1s 507017470e-09 1s 1s 507020990e-09 0s 0s 507023470e-09 1s 1s 507027750e-09 1s 1s 507031230e-09 0s 0s 507033710e-09 1s 1s 507038030e-09 1s 1s 507041470e-09 0s 0s 507043950e-09 1s 1s 507048310e-09 1s 1s 507051710e-09 0s 0s 507054190e-09 1s 1s 507058590e-09 1s 1s 507061950e-09 0s 0s 507064430e-09 1s 1s 507068870e-09 1s 1s 507072190e-09 0s 0s 507074670e-09 1s 1s 507079150e-09 1s 1s 507082430e-09 0s 0s 507084910e-09 1s 1s 507089430e-09 1s 1s 507092670e-09 0s 0s 507095150e-09 1s 1s 507099710e-09 1s 1s 507102910e-09 0s 0s 507105390e-09 1s 1s 507109990e-09 1s 1s 507113150e-09 0s 0s 507115630e-09 1s 1s 507120270e-09 1s 1s 507123390e-09 0s 0s 507125870e-09 1s 1s 507130550e-09 1s 1s 507133630e-09 0s 0s 507136110e-09 1s 1s 507140830e-09 1s 1s 507143870e-09 0s 0s 507146350e-09 1s 1s 507151110e-09 1s 1s 507154110e-09 0s 0s 507156590e-09 1s 1s 507161390e-09 1s 1s 507164350e-09 0s 0s 507166830e-09 1s 1s 507171670e-09 1s 1s 507174590e-09 0s 0s 507177070e-09 1s 1s 507181950e-09 1s 1s 507184830e-09 0s 0s 507187310e-09 1s 1s 507192230e-09 1s 1s 507195070e-09 0s 0s 507197550e-09 1s 1s 507202510e-09 1s 1s 507205310e-09 0s 0s 507207790e-09 1s 1s 507212790e-09 1s 1s 507215550e-09 0s 0s 507218030e-09 1s 1s 507223070e-09 1s 1s 507225790e-09 0s 0s 507228270e-09 1s 1s 507233350e-09 1s 1s 507236030e-09 0s 0s 507238510e-09 1s 1s 507243630e-09 1s 1s 507246270e-09 0s 0s 507248750e-09 1s 1s 507253910e-09 1s 1s 507256510e-09 0s 0s 507258990e-09 1s 1s 507264190e-09 1s 1s 507266750e-09 0s 0s 507269230e-09 1s 1s 507274470e-09 1s 1s 507276990e-09 0s 0s 507279470e-09 1s 1s 507284750e-09 1s 1s 507287230e-09 0s 0s 507289710e-09 1s 1s 507295030e-09 1s 1s 507297470e-09 0s 0s 507299950e-09 1s 1s 507305310e-09 1s 1s 507307710e-09 0s 0s 507310190e-09 1s 1s 507315590e-09 1s 1s 507317950e-09 0s 0s 507320430e-09 1s 1s 507325870e-09 1s 1s 507328190e-09 0s 0s 507330670e-09 1s 1s 507336150e-09 1s 1s 507338430e-09 0s 0s 507340910e-09 1s 1s 507346430e-09 1s 1s 507348670e-09 0s 0s 507351150e-09 1s 1s 507356710e-09 1s 1s 507358910e-09 0s 0s 507361390e-09 1s 1s 507366990e-09 1s 1s 507369150e-09 0s 0s 507371630e-09 1s 1s 507377270e-09 1s 1s 507379390e-09 0s 0s 507381870e-09 1s 1s 507387550e-09 1s 1s 507389630e-09 0s 0s 507392110e-09 1s 1s 507397830e-09 1s 1s 507399870e-09 0s 0s 507402350e-09 1s 1s 507408110e-09 1s 1s 507410110e-09 0s 0s 507412590e-09 1s 1s 507418390e-09 1s 1s 507420350e-09 0s 0s 507422830e-09 1s 1s 507428670e-09 1s 1s 507430590e-09 0s 0s 507433070e-09 1s 1s 507438950e-09 1s 1s 507440830e-09 0s 0s 507443310e-09 1s 1s 507449230e-09 1s 1s 507451070e-09 0s 0s 507453550e-09 1s 1s 507459510e-09 1s 1s 507461310e-09 0s 0s 507463790e-09 1s 1s 507469790e-09 1s 1s 507471550e-09 0s 0s 507474030e-09 1s 1s 507480070e-09 1s 1s 507481790e-09 0s 0s 507484270e-09 1s 1s 507490350e-09 1s 1s 507492030e-09 0s 0s 507494510e-09 1s 1s 507500630e-09 1s 1s 507502270e-09 0s 0s 507504750e-09 1s 1s 507510910e-09 1s 1s 507512510e-09 0s 0s 507514990e-09 1s 1s 507521190e-09 1s 1s 507522750e-09 0s 0s 507525230e-09 1s 1s 507531470e-09 1s 1s 507532990e-09 0s 0s 507535470e-09 1s 1s 507541750e-09 1s 1s 507543230e-09 0s 0s 507545710e-09 1s 1s 507552030e-09 1s 1s 507553470e-09 0s 0s 507555950e-09 1s 1s 507562310e-09 1s 1s 507563710e-09 0s 0s 507566190e-09 1s 1s 507572590e-09 1s 1s 507573950e-09 0s 0s 507576430e-09 1s 1s 507582870e-09 1s 1s 507584190e-09 0s 0s 507586670e-09 1s 1s 507593150e-09 1s 1s 507594430e-09 0s 0s 507596910e-09 1s 1s 507603430e-09 1s 1s 507604670e-09 0s 0s 507607150e-09 1s 1s 507613710e-09 1s 1s 507614910e-09 0s 0s 507617390e-09 1s 1s 507623990e-09 1s 1s 507625150e-09 0s 0s 507627630e-09 1s 1s 507634270e-09 1s 1s 507635390e-09 0s 0s 507637870e-09 1s 1s 507644550e-09 1s 1s 507645630e-09 0s 0s 507648110e-09 1s 1s 507654830e-09 1s 1s 507655870e-09 0s 0s 507658350e-09 1s 1s 507665110e-09 1s 1s 507666110e-09 0s 0s 507668590e-09 1s 1s 507675390e-09 1s 1s 507676350e-09 0s 0s 507678830e-09 1s 1s 507685670e-09 1s 1s 507686590e-09 0s 0s 507689070e-09 1s 1s 507695950e-09 1s 1s 507696830e-09 0s 0s 507699310e-09 1s 1s 507706230e-09 1s 1s 507707070e-09 0s 0s 507709550e-09 1s 1s 507716510e-09 1s 1s 507717310e-09 0s 0s 507719790e-09 1s 1s 507726790e-09 1s 1s 507727550e-09 0s 0s 507730030e-09 1s 1s 507737070e-09 1s 1s 507737790e-09 0s 0s 507740270e-09 1s 1s 507747350e-09 1s 1s 507748030e-09 0s 0s 507750510e-09 1s 1s 507757630e-09 1s 1s 507758270e-09 0s 0s 507760750e-09 1s 1s 507767910e-09 1s 1s 507768510e-09 0s 0s 507770990e-09 1s 1s 507778190e-09 1s 1s 507778750e-09 0s 0s 507781230e-09 1s 1s 507788470e-09 1s 1s 507788990e-09 0s 0s 507791470e-09 1s 1s 507798750e-09 1s 1s 507799230e-09 0s 0s 507801710e-09 1s 1s 507809030e-09 1s 1s 507809470e-09 0s 0s 507811950e-09 1s 1s 507819310e-09 1s 1s 507819710e-09 0s 0s 507822190e-09 1s 1s 507829590e-09 1s 1s 507829950e-09 0s 0s 507832430e-09 1s 1s 507839870e-09 1s 1s 507840190e-09 0s 0s 507842670e-09 1s 1s 507850150e-09 1s 1s 507850430e-09 0s 0s 507852910e-09 1s 1s 507860430e-09 1s 1s 507860670e-09 0s 0s 507863150e-09 1s 1s 507870710e-09 1s 1s 507870910e-09 0s 0s 507873390e-09 1s 1s 507880990e-09 1s 1s 507881150e-09 0s 0s 507883630e-09 1s 1s 507891270e-09 1s 1s 507891390e-09 0s 0s 507893870e-09 1s 1s 507901550e-09 1s 1s 507901630e-09 0s 0s 507904110e-09 1s 1s 507911830e-09 1s 1s 507911870e-09 0s 0s 507914350e-09 1s 1s 507922110e-09 0s 0s 507924590e-09 1s 1s 507932350e-09 0s 0s 507932390e-09 0s 0s 507934830e-09 1s 1s 507942590e-09 0s 0s 507942670e-09 0s 0s 507945070e-09 1s 1s 507952830e-09 0s 0s 507952950e-09 0s 0s 507955310e-09 1s 1s 507963070e-09 0s 0s 507963230e-09 0s 0s 507965550e-09 1s 1s 507973310e-09 0s 0s 507973510e-09 0s 0s 507975790e-09 1s 1s 507983550e-09 0s 0s 507983790e-09 0s 0s 507986030e-09 1s 1s 507993790e-09 0s 0s 507994070e-09 0s 0s 507996270e-09 1s 1s 508004030e-09 0s 0s 508004350e-09 0s 0s 508006510e-09 1s 1s 508014270e-09 0s 0s 508014630e-09 0s 0s 508016750e-09 1s 1s 508024510e-09 0s 0s 508024910e-09 0s 0s 508026990e-09 1s 1s 508034750e-09 0s 0s 508035190e-09 0s 0s 508037230e-09 1s 1s 508044990e-09 0s 0s 508045470e-09 0s 0s 508047470e-09 1s 1s 508055230e-09 0s 0s 508055750e-09 0s 0s 508057710e-09 1s 1s 508065470e-09 0s 0s 508066030e-09 0s 0s 508067950e-09 1s 1s 508075710e-09 0s 0s 508076310e-09 0s 0s 508078190e-09 1s 1s 508085950e-09 0s 0s 508086590e-09 0s 0s 508088430e-09 1s 1s 508096190e-09 0s 0s 508096870e-09 0s 0s 508098670e-09 1s 1s 508106430e-09 0s 0s 508107150e-09 0s 0s 508108910e-09 1s 1s 508116670e-09 0s 0s 508117430e-09 0s 0s 508119150e-09 1s 1s 508126910e-09 0s 0s 508127710e-09 0s 0s 508129390e-09 1s 1s 508137150e-09 0s 0s 508137990e-09 0s 0s 508139630e-09 1s 1s 508147390e-09 0s 0s 508148270e-09 0s 0s 508149870e-09 1s 1s 508157630e-09 0s 0s 508158550e-09 0s 0s 508160110e-09 1s 1s 508167870e-09 0s 0s 508168830e-09 0s 0s 508170350e-09 1s 1s 508178110e-09 0s 0s 508179110e-09 0s 0s 508180590e-09 1s 1s 508188350e-09 0s 0s 508189390e-09 0s 0s 508190830e-09 1s 1s 508198590e-09 0s 0s 508199670e-09 0s 0s 508201070e-09 1s 1s 508208830e-09 0s 0s 508209950e-09 0s 0s 508211310e-09 1s 1s 508219070e-09 0s 0s 508220230e-09 0s 0s 508221550e-09 1s 1s 508229310e-09 0s 0s 508230510e-09 0s 0s 508231790e-09 1s 1s 508239550e-09 0s 0s 508240790e-09 0s 0s 508242030e-09 1s 1s 508249790e-09 0s 0s 508251070e-09 0s 0s 508252270e-09 1s 1s 508260030e-09 0s 0s 508261350e-09 0s 0s 508262510e-09 1s 1s 508270270e-09 0s 0s 508271630e-09 0s 0s 508272750e-09 1s 1s 508280510e-09 0s 0s 508281910e-09 0s 0s 508282990e-09 1s 1s 508290750e-09 0s 0s 508292190e-09 0s 0s 508293230e-09 1s 1s 508300990e-09 0s 0s 508302470e-09 0s 0s 508303470e-09 1s 1s 508311230e-09 0s 0s 508312750e-09 0s 0s 508313710e-09 1s 1s 508321470e-09 0s 0s 508323030e-09 0s 0s 508323950e-09 1s 1s 508331710e-09 0s 0s 508333310e-09 0s 0s 508334190e-09 1s 1s 508341950e-09 0s 0s 508343590e-09 0s 0s 508344430e-09 1s 1s 508352190e-09 0s 0s 508353870e-09 0s 0s 508354670e-09 1s 1s 508362430e-09 0s 0s 508364150e-09 0s 0s 508364910e-09 1s 1s 508372670e-09 0s 0s 508374430e-09 0s 0s 508375150e-09 1s 1s 508382910e-09 0s 0s 508384710e-09 0s 0s 508385390e-09 1s 1s 508393150e-09 0s 0s 508394990e-09 0s 0s 508395630e-09 1s 1s 508403390e-09 0s 0s 508405270e-09 0s 0s 508405870e-09 1s 1s 508413630e-09 0s 0s 508415550e-09 0s 0s 508416110e-09 1s 1s 508423870e-09 0s 0s 508425830e-09 0s 0s 508426350e-09 1s 1s 508434110e-09 0s 0s 508436110e-09 0s 0s 508436590e-09 1s 1s 508444350e-09 0s 0s 508446390e-09 0s 0s 508446830e-09 1s 1s 508454590e-09 0s 0s 508456670e-09 0s 0s 508457070e-09 1s 1s 508464830e-09 0s 0s 508466950e-09 0s 0s 508467310e-09 1s 1s 508475070e-09 0s 0s 508477230e-09 0s 0s 508477550e-09 1s 1s 508485310e-09 0s 0s 508487510e-09 0s 0s 508487790e-09 1s 1s 508495550e-09 0s 0s 508497790e-09 0s 0s 508498030e-09 1s 1s 508505790e-09 0s 0s 508508070e-09 0s 0s 508508270e-09 1s 1s 508516030e-09 0s 0s 508518350e-09 0s 0s 508518510e-09 1s 1s 508526270e-09 0s 0s 508528630e-09 0s 0s 508528750e-09 1s 1s 508536510e-09 0s 0s 508538910e-09 0s 0s 508538990e-09 1s 1s 508546750e-09 0s 0s 508549190e-09 0s 0s 508549230e-09 1s 1s 508556990e-09 0s 0s 508559470e-09 1s 1s 508559510e-09 1s 1s 508567270e-09 0s 0s 508569710e-09 1s 1s 508569790e-09 1s 1s 508577510e-09 0s 0s 508579950e-09 1s 1s 508580070e-09 1s 1s 508587750e-09 0s 0s 508590190e-09 1s 1s 508590350e-09 1s 1s 508597990e-09 0s 0s 508600430e-09 1s 1s 508600630e-09 1s 1s 508608230e-09 0s 0s 508610670e-09 1s 1s 508610910e-09 1s 1s 508618470e-09 0s 0s 508620910e-09 1s 1s 508621190e-09 1s 1s 508628710e-09 0s 0s 508631150e-09 1s 1s 508631470e-09 1s 1s 508638950e-09 0s 0s 508641390e-09 1s 1s 508641750e-09 1s 1s 508649190e-09 0s 0s 508651630e-09 1s 1s 508652030e-09 1s 1s 508659430e-09 0s 0s 508661870e-09 1s 1s 508662310e-09 1s 1s 508669670e-09 0s 0s 508672110e-09 1s 1s 508672590e-09 1s 1s 508679910e-09 0s 0s 508682350e-09 1s 1s 508682870e-09 1s 1s 508690150e-09 0s 0s 508692590e-09 1s 1s 508693150e-09 1s 1s 508700390e-09 0s 0s 508702830e-09 1s 1s 508703430e-09 1s 1s 508710630e-09 0s 0s 508713070e-09 1s 1s 508713710e-09 1s 1s 508720870e-09 0s 0s 508723310e-09 1s 1s 508723990e-09 1s 1s 508731110e-09 0s 0s 508733550e-09 1s 1s 508734270e-09 1s 1s 508741350e-09 0s 0s 508743790e-09 1s 1s 508744550e-09 1s 1s 508751590e-09 0s 0s 508754030e-09 1s 1s 508754830e-09 1s 1s 508761830e-09 0s 0s 508764270e-09 1s 1s 508765110e-09 1s 1s 508772070e-09 0s 0s 508774510e-09 1s 1s 508775390e-09 1s 1s 508782310e-09 0s 0s 508784750e-09 1s 1s 508785670e-09 1s 1s 508792550e-09 0s 0s 508794990e-09 1s 1s 508795950e-09 1s 1s 508802790e-09 0s 0s 508805230e-09 1s 1s 508806230e-09 1s 1s 508813030e-09 0s 0s 508815470e-09 1s 1s 508816510e-09 1s 1s 508823270e-09 0s 0s 508825710e-09 1s 1s 508826790e-09 1s 1s 508833510e-09 0s 0s 508835950e-09 1s 1s 508837070e-09 1s 1s 508843750e-09 0s 0s 508846190e-09 1s 1s 508847350e-09 1s 1s 508853990e-09 0s 0s 508856430e-09 1s 1s 508857630e-09 1s 1s 508864230e-09 0s 0s 508866670e-09 1s 1s 508867910e-09 1s 1s 508874470e-09 0s 0s 508876910e-09 1s 1s 508878190e-09 1s 1s 508884710e-09 0s 0s 508887150e-09 1s 1s 508888470e-09 1s 1s 508894950e-09 0s 0s 508897390e-09 1s 1s 508898750e-09 1s 1s 508905190e-09 0s 0s 508907630e-09 1s 1s 508909030e-09 1s 1s 508915430e-09 0s 0s 508917870e-09 1s 1s 508919310e-09 1s 1s 508925670e-09 0s 0s 508928110e-09 1s 1s 508929590e-09 1s 1s 508935910e-09 0s 0s 508938350e-09 1s 1s 508939870e-09 1s 1s 508946150e-09 0s 0s 508948590e-09 1s 1s 508950150e-09 1s 1s 508956390e-09 0s 0s 508958830e-09 1s 1s 508960430e-09 1s 1s 508966630e-09 0s 0s 508969070e-09 1s 1s 508970710e-09 1s 1s 508976870e-09 0s 0s 508979310e-09 1s 1s 508980990e-09 1s 1s 508987110e-09 0s 0s 508989550e-09 1s 1s 508991270e-09 1s 1s 508997350e-09 0s 0s 508999790e-09 1s 1s 509001550e-09 1s 1s 509007590e-09 0s 0s 509010030e-09 1s 1s 509011830e-09 1s 1s 509017830e-09 0s 0s 509020270e-09 1s 1s 509022110e-09 1s 1s 509028070e-09 0s 0s 509030510e-09 1s 1s 509032390e-09 1s 1s 509038310e-09 0s 0s 509040750e-09 1s 1s 509042670e-09 1s 1s 509048550e-09 0s 0s 509050990e-09 1s 1s 509052950e-09 1s 1s 509058790e-09 0s 0s 509061230e-09 1s 1s 509063230e-09 1s 1s 509069030e-09 0s 0s 509071470e-09 1s 1s 509073510e-09 1s 1s 509079270e-09 0s 0s 509081710e-09 1s 1s 509083790e-09 1s 1s 509089510e-09 0s 0s 509091950e-09 1s 1s 509094070e-09 1s 1s 509099750e-09 0s 0s 509102190e-09 1s 1s 509104350e-09 1s 1s 509109990e-09 0s 0s 509112430e-09 1s 1s 509114630e-09 1s 1s 509120230e-09 0s 0s 509122670e-09 1s 1s 509124910e-09 1s 1s 509130470e-09 0s 0s 509132910e-09 1s 1s 509135190e-09 1s 1s 509140710e-09 0s 0s 509143150e-09 1s 1s 509145470e-09 1s 1s 509150950e-09 0s 0s 509153390e-09 1s 1s 509155750e-09 1s 1s 509161190e-09 0s 0s 509163630e-09 1s 1s 509166030e-09 1s 1s 509171430e-09 0s 0s 509173870e-09 1s 1s 509176310e-09 1s 1s 509181670e-09 0s 0s 509184110e-09 1s 1s 509186590e-09 1s 1s 509191910e-09 0s 0s 509194350e-09 1s 1s 509196870e-09 1s 1s 509202150e-09 0s 0s 509204590e-09 1s 1s 509207150e-09 1s 1s 509212390e-09 0s 0s 509214830e-09 1s 1s 509217430e-09 1s 1s 509222630e-09 0s 0s 509225070e-09 1s 1s 509227710e-09 1s 1s 509232870e-09 0s 0s 509235310e-09 1s 1s 509237990e-09 1s 1s 509243110e-09 0s 0s 509245550e-09 1s 1s 509248270e-09 1s 1s 509253350e-09 0s 0s 509255790e-09 1s 1s 509258550e-09 1s 1s 509263590e-09 0s 0s 509266030e-09 1s 1s 509268830e-09 1s 1s 509273830e-09 0s 0s 509276270e-09 1s 1s 509279110e-09 1s 1s 509284070e-09 0s 0s 509286510e-09 1s 1s 509289390e-09 1s 1s 509294310e-09 0s 0s 509296750e-09 1s 1s 509299670e-09 1s 1s 509304550e-09 0s 0s 509306990e-09 1s 1s 509309950e-09 1s 1s 509314790e-09 0s 0s 509317230e-09 1s 1s 509320230e-09 1s 1s 509325030e-09 0s 0s 509327470e-09 1s 1s 509330510e-09 1s 1s 509335270e-09 0s 0s 509337710e-09 1s 1s 509340790e-09 1s 1s 509345510e-09 0s 0s 509347950e-09 1s 1s 509351070e-09 1s 1s 509355750e-09 0s 0s 509358190e-09 1s 1s 509361350e-09 1s 1s 509365990e-09 0s 0s 509368430e-09 1s 1s 509371630e-09 1s 1s 509376230e-09 0s 0s 509378670e-09 1s 1s 509381910e-09 1s 1s 509386470e-09 0s 0s 509388910e-09 1s 1s 509392190e-09 1s 1s 509396710e-09 0s 0s 509399150e-09 1s 1s 509402470e-09 1s 1s 509406950e-09 0s 0s 509409390e-09 1s 1s 509412750e-09 1s 1s 509417190e-09 0s 0s 509419630e-09 1s 1s 509423030e-09 1s 1s 509427430e-09 0s 0s 509429870e-09 1s 1s 509433310e-09 1s 1s 509437670e-09 0s 0s 509440110e-09 1s 1s 509443590e-09 1s 1s 509447910e-09 0s 0s 509450350e-09 1s 1s 509453870e-09 1s 1s 509458150e-09 0s 0s 509460590e-09 1s 1s 509464150e-09 1s 1s 509468390e-09 0s 0s 509470830e-09 1s 1s 509474430e-09 1s 1s 509478630e-09 0s 0s 509481070e-09 1s 1s 509484710e-09 1s 1s 509488870e-09 0s 0s 509491310e-09 1s 1s 509494990e-09 1s 1s 509499110e-09 0s 0s 509501550e-09 1s 1s 509505270e-09 1s 1s 509509350e-09 0s 0s 509511790e-09 1s 1s 509515550e-09 1s 1s 509519590e-09 0s 0s 509522030e-09 1s 1s 509525830e-09 1s 1s 509529830e-09 0s 0s 509532270e-09 1s 1s 509536110e-09 1s 1s 509540070e-09 0s 0s 509542510e-09 1s 1s 509546390e-09 1s 1s 509550310e-09 0s 0s 509552750e-09 1s 1s 509556670e-09 1s 1s 509560550e-09 0s 0s 509562990e-09 1s 1s 509566950e-09 1s 1s 509570790e-09 0s 0s 509573230e-09 1s 1s 509577230e-09 1s 1s 509581030e-09 0s 0s 509583470e-09 1s 1s 509587510e-09 1s 1s 509591270e-09 0s 0s 509593710e-09 1s 1s 509597790e-09 1s 1s 509601510e-09 0s 0s 509603950e-09 1s 1s 509608070e-09 1s 1s 509611750e-09 0s 0s 509614190e-09 1s 1s 509618350e-09 1s 1s 509621990e-09 0s 0s 509624430e-09 1s 1s 509628630e-09 1s 1s 509632230e-09 0s 0s 509634670e-09 1s 1s 509638910e-09 1s 1s 509642470e-09 0s 0s 509644910e-09 1s 1s 509649190e-09 1s 1s 509652710e-09 0s 0s 509655150e-09 1s 1s 509659470e-09 1s 1s 509662950e-09 0s 0s 509665390e-09 1s 1s 509669750e-09 1s 1s 509673190e-09 0s 0s 509675630e-09 1s 1s 509680030e-09 1s 1s 509683430e-09 0s 0s 509685870e-09 1s 1s 509690310e-09 1s 1s 509693670e-09 0s 0s 509696110e-09 1s 1s 509700590e-09 1s 1s 509703910e-09 0s 0s 509706350e-09 1s 1s 509710870e-09 1s 1s 509714150e-09 0s 0s 509716590e-09 1s 1s 509721150e-09 1s 1s 509724390e-09 0s 0s 509726830e-09 1s 1s 509731430e-09 1s 1s 509734630e-09 0s 0s 509737070e-09 1s 1s 509741710e-09 1s 1s 509744870e-09 0s 0s 509747310e-09 1s 1s 509751990e-09 1s 1s 509755110e-09 0s 0s 509757550e-09 1s 1s 509762270e-09 1s 1s 509765350e-09 0s 0s 509767790e-09 1s 1s 509772550e-09 1s 1s 509775590e-09 0s 0s 509778030e-09 1s 1s 509782830e-09 1s 1s 509785830e-09 0s 0s 509788270e-09 1s 1s 509793110e-09 1s 1s 509796070e-09 0s 0s 509798510e-09 1s 1s 509803390e-09 1s 1s 509806310e-09 0s 0s 509808750e-09 1s 1s 509813670e-09 1s 1s 509816550e-09 0s 0s 509818990e-09 1s 1s 509823950e-09 1s 1s 509826790e-09 0s 0s 509829230e-09 1s 1s 509834230e-09 1s 1s 509837030e-09 0s 0s 509839470e-09 1s 1s 509844510e-09 1s 1s 509847270e-09 0s 0s 509849710e-09 1s 1s 509854790e-09 1s 1s 509857510e-09 0s 0s 509859950e-09 1s 1s 509865070e-09 1s 1s 509867750e-09 0s 0s 509870190e-09 1s 1s 509875350e-09 1s 1s 509877990e-09 0s 0s 509880430e-09 1s 1s 509885630e-09 1s 1s 509888230e-09 0s 0s 509890670e-09 1s 1s 509895910e-09 1s 1s 509898470e-09 0s 0s 509900910e-09 1s 1s 509906190e-09 1s 1s 509908710e-09 0s 0s 509911150e-09 1s 1s 509916470e-09 1s 1s 509918950e-09 0s 0s 509921390e-09 1s 1s 509926750e-09 1s 1s 509929190e-09 0s 0s 509931630e-09 1s 1s 509937030e-09 1s 1s 509939430e-09 0s 0s 509941870e-09 1s 1s 509947310e-09 1s 1s 509949670e-09 0s 0s 509952110e-09 1s 1s 509957590e-09 1s 1s 509959910e-09 0s 0s 509962350e-09 1s 1s 509967870e-09 1s 1s 509970150e-09 0s 0s 509972590e-09 1s 1s 509978150e-09 1s 1s 509980390e-09 0s 0s 509982830e-09 1s 1s 509988430e-09 1s 1s 509990630e-09 0s 0s 509993070e-09 1s 1s 509998710e-09 1s 1s 510000870e-09 0s 0s 510003310e-09 1s 1s 510008990e-09 1s 1s 510011110e-09 0s 0s 510013550e-09 1s 1s 510019270e-09 1s 1s 510021350e-09 0s 0s 510023790e-09 1s 1s 510029550e-09 1s 1s 510031590e-09 0s 0s 510034030e-09 1s 1s 510039830e-09 1s 1s 510041830e-09 0s 0s 510044270e-09 1s 1s 510050110e-09 1s 1s 510052070e-09 0s 0s 510054510e-09 1s 1s 510060390e-09 1s 1s 510062310e-09 0s 0s 510064750e-09 1s 1s 510070670e-09 1s 1s 510072550e-09 0s 0s 510074990e-09 1s 1s 510080950e-09 1s 1s 510082790e-09 0s 0s 510085230e-09 1s 1s 510091230e-09 1s 1s 510093030e-09 0s 0s 510095470e-09 1s 1s 510101510e-09 1s 1s 510103270e-09 0s 0s 510105710e-09 1s 1s 510111790e-09 1s 1s 510113510e-09 0s 0s 510115950e-09 1s 1s 510122070e-09 1s 1s 510123750e-09 0s 0s 510126190e-09 1s 1s 510132350e-09 1s 1s 510133990e-09 0s 0s 510136430e-09 1s 1s 510142630e-09 1s 1s 510144230e-09 0s 0s 510146670e-09 1s 1s 510152910e-09 1s 1s 510154470e-09 0s 0s 510156910e-09 1s 1s 510163190e-09 1s 1s 510164710e-09 0s 0s 510167150e-09 1s 1s 510173470e-09 1s 1s 510174950e-09 0s 0s 510177390e-09 1s 1s 510183750e-09 1s 1s 510185190e-09 0s 0s 510187630e-09 1s 1s 510194030e-09 1s 1s 510195430e-09 0s 0s 510197870e-09 1s 1s 510204310e-09 1s 1s 510205670e-09 0s 0s 510208110e-09 1s 1s 510214590e-09 1s 1s 510215910e-09 0s 0s 510218350e-09 1s 1s 510224870e-09 1s 1s 510226150e-09 0s 0s 510228590e-09 1s 1s 510235150e-09 1s 1s 510236390e-09 0s 0s 510238830e-09 1s 1s 510245430e-09 1s 1s 510246630e-09 0s 0s 510249070e-09 1s 1s 510255710e-09 1s 1s 510256870e-09 0s 0s 510259310e-09 1s 1s 510265990e-09 1s 1s 510267110e-09 0s 0s 510269550e-09 1s 1s 510276270e-09 1s 1s 510277350e-09 0s 0s 510279790e-09 1s 1s 510286550e-09 1s 1s 510287590e-09 0s 0s 510290030e-09 1s 1s 510296830e-09 1s 1s 510297830e-09 0s 0s 510300270e-09 1s 1s 510307110e-09 1s 1s 510308070e-09 0s 0s 510310510e-09 1s 1s 510317390e-09 1s 1s 510318310e-09 0s 0s 510320750e-09 1s 1s 510327670e-09 1s 1s 510328550e-09 0s 0s 510330990e-09 1s 1s 510337950e-09 1s 1s 510338790e-09 0s 0s 510341230e-09 1s 1s 510348230e-09 1s 1s 510349030e-09 0s 0s 510351470e-09 1s 1s 510358510e-09 1s 1s 510359270e-09 0s 0s 510361710e-09 1s 1s 510368790e-09 1s 1s 510369510e-09 0s 0s 510371950e-09 1s 1s 510379070e-09 1s 1s 510379750e-09 0s 0s 510382190e-09 1s 1s 510389350e-09 1s 1s 510389990e-09 0s 0s 510392430e-09 1s 1s 510399630e-09 1s 1s 510400230e-09 0s 0s 510402670e-09 1s 1s 510409910e-09 1s 1s 510410470e-09 0s 0s 510412910e-09 1s 1s 510420190e-09 1s 1s 510420710e-09 0s 0s 510423150e-09 1s 1s 510430470e-09 1s 1s 510430950e-09 0s 0s 510433390e-09 1s 1s 510440750e-09 1s 1s 510441190e-09 0s 0s 510443630e-09 1s 1s 510451030e-09 1s 1s 510451430e-09 0s 0s 510453870e-09 1s 1s 510461310e-09 1s 1s 510461670e-09 0s 0s 510464110e-09 1s 1s 510471590e-09 1s 1s 510471910e-09 0s 0s 510474350e-09 1s 1s 510481870e-09 1s 1s 510482150e-09 0s 0s 510484590e-09 1s 1s 510492150e-09 1s 1s 510492390e-09 0s 0s 510494830e-09 1s 1s 510502430e-09 1s 1s 510502630e-09 0s 0s 510505070e-09 1s 1s 510512710e-09 1s 1s 510512870e-09 0s 0s 510515310e-09 1s 1s 510522990e-09 1s 1s 510523110e-09 0s 0s 510525550e-09 1s 1s 510533270e-09 1s 1s 510533350e-09 0s 0s 510535790e-09 1s 1s 510543550e-09 1s 1s 510543590e-09 0s 0s 510546030e-09 1s 1s 510553830e-09 0s 0s 510556270e-09 1s 1s 510564070e-09 0s 0s 510564110e-09 0s 0s 510566510e-09 1s 1s 510574310e-09 0s 0s 510574390e-09 0s 0s 510576750e-09 1s 1s 510584550e-09 0s 0s 510584670e-09 0s 0s 510586990e-09 1s 1s 510594790e-09 0s 0s 510594950e-09 0s 0s 510597230e-09 1s 1s 510605030e-09 0s 0s 510605230e-09 0s 0s 510607470e-09 1s 1s 510615270e-09 0s 0s 510615510e-09 0s 0s 510617710e-09 1s 1s 510625510e-09 0s 0s 510625790e-09 0s 0s 510627950e-09 1s 1s 510635750e-09 0s 0s 510636070e-09 0s 0s 510638190e-09 1s 1s 510645990e-09 0s 0s 510646350e-09 0s 0s 510648430e-09 1s 1s 510656230e-09 0s 0s 510656630e-09 0s 0s 510658670e-09 1s 1s 510666470e-09 0s 0s 510666910e-09 0s 0s 510668910e-09 1s 1s 510676710e-09 0s 0s 510677190e-09 0s 0s 510679150e-09 1s 1s 510686950e-09 0s 0s 510687470e-09 0s 0s 510689390e-09 1s 1s 510697190e-09 0s 0s 510697750e-09 0s 0s 510699630e-09 1s 1s 510707430e-09 0s 0s 510708030e-09 0s 0s 510709870e-09 1s 1s 510717670e-09 0s 0s 510718310e-09 0s 0s 510720110e-09 1s 1s 510727910e-09 0s 0s 510728590e-09 0s 0s 510730350e-09 1s 1s 510738150e-09 0s 0s 510738870e-09 0s 0s 510740590e-09 1s 1s 510748390e-09 0s 0s 510749150e-09 0s 0s 510750830e-09 1s 1s 510758630e-09 0s 0s 510759430e-09 0s 0s 510761070e-09 1s 1s 510768870e-09 0s 0s 510769710e-09 0s 0s 510771310e-09 1s 1s 510779110e-09 0s 0s 510779990e-09 0s 0s 510781550e-09 1s 1s 510789350e-09 0s 0s 510790270e-09 0s 0s 510791790e-09 1s 1s 510799590e-09 0s 0s 510800550e-09 0s 0s 510802030e-09 1s 1s 510809830e-09 0s 0s 510810830e-09 0s 0s 510812270e-09 1s 1s 510820070e-09 0s 0s 510821110e-09 0s 0s 510822510e-09 1s 1s 510830310e-09 0s 0s 510831390e-09 0s 0s 510832750e-09 1s 1s 510840550e-09 0s 0s 510841670e-09 0s 0s 510842990e-09 1s 1s 510850790e-09 0s 0s 510851950e-09 0s 0s 510853230e-09 1s 1s 510861030e-09 0s 0s 510862230e-09 0s 0s 510863470e-09 1s 1s 510871270e-09 0s 0s 510872510e-09 0s 0s 510873710e-09 1s 1s 510881510e-09 0s 0s 510882790e-09 0s 0s 510883950e-09 1s 1s 510891750e-09 0s 0s 510893070e-09 0s 0s 510894190e-09 1s 1s 510901990e-09 0s 0s 510903350e-09 0s 0s 510904430e-09 1s 1s 510912230e-09 0s 0s 510913630e-09 0s 0s 510914670e-09 1s 1s 510922470e-09 0s 0s 510923910e-09 0s 0s 510924910e-09 1s 1s 510932710e-09 0s 0s 510934190e-09 0s 0s 510935150e-09 1s 1s 510942950e-09 0s 0s 510944470e-09 0s 0s 510945390e-09 1s 1s 510953190e-09 0s 0s 510954750e-09 0s 0s 510955630e-09 1s 1s 510963430e-09 0s 0s 510965030e-09 0s 0s 510965870e-09 1s 1s 510973670e-09 0s 0s 510975310e-09 0s 0s 510976110e-09 1s 1s 510983910e-09 0s 0s 510985590e-09 0s 0s 510986350e-09 1s 1s 510994150e-09 0s 0s 510995870e-09 0s 0s 510996590e-09 1s 1s 511004390e-09 0s 0s 511006150e-09 0s 0s 511006830e-09 1s 1s 511014630e-09 0s 0s 511016430e-09 0s 0s 511017070e-09 1s 1s 511024870e-09 0s 0s 511026710e-09 0s 0s 511027310e-09 1s 1s 511035110e-09 0s 0s 511036990e-09 0s 0s 511037550e-09 1s 1s 511045350e-09 0s 0s 511047270e-09 0s 0s 511047790e-09 1s 1s 511055590e-09 0s 0s 511057550e-09 0s 0s 511058030e-09 1s 1s 511065830e-09 0s 0s 511067830e-09 0s 0s 511068270e-09 1s 1s 511076070e-09 0s 0s 511078110e-09 0s 0s 511078510e-09 1s 1s 511086310e-09 0s 0s 511088390e-09 0s 0s 511088750e-09 1s 1s 511096550e-09 0s 0s 511098670e-09 0s 0s 511098990e-09 1s 1s 511106790e-09 0s 0s 511108950e-09 0s 0s 511109230e-09 1s 1s 511117030e-09 0s 0s 511119230e-09 0s 0s 511119470e-09 1s 1s 511127270e-09 0s 0s 511129510e-09 0s 0s 511129710e-09 1s 1s 511137510e-09 0s 0s 511139790e-09 0s 0s 511139950e-09 1s 1s 511147750e-09 0s 0s 511150070e-09 0s 0s 511150190e-09 1s 1s 511157990e-09 0s 0s 511160350e-09 0s 0s 511160430e-09 1s 1s 511168230e-09 0s 0s 511170630e-09 0s 0s 511170670e-09 1s 1s 511178470e-09 0s 0s 511180910e-09 1s 1s 511180950e-09 1s 1s 511188750e-09 0s 0s 511191150e-09 1s 1s 511191230e-09 1s 1s 511198990e-09 0s 0s 511201390e-09 1s 1s 511201510e-09 1s 1s 511209230e-09 0s 0s 511211630e-09 1s 1s 511211790e-09 1s 1s 511219470e-09 0s 0s 511221870e-09 1s 1s 511222070e-09 1s 1s 511229710e-09 0s 0s 511232110e-09 1s 1s 511232350e-09 1s 1s 511239950e-09 0s 0s 511242350e-09 1s 1s 511242630e-09 1s 1s 511250190e-09 0s 0s 511252590e-09 1s 1s 511252910e-09 1s 1s 511260430e-09 0s 0s 511262830e-09 1s 1s 511263190e-09 1s 1s 511270670e-09 0s 0s 511273070e-09 1s 1s 511273470e-09 1s 1s 511280910e-09 0s 0s 511283310e-09 1s 1s 511283750e-09 1s 1s 511291150e-09 0s 0s 511293550e-09 1s 1s 511294030e-09 1s 1s 511301390e-09 0s 0s 511303790e-09 1s 1s 511304310e-09 1s 1s 511311630e-09 0s 0s 511314030e-09 1s 1s 511314590e-09 1s 1s 511321870e-09 0s 0s 511324270e-09 1s 1s 511324870e-09 1s 1s 511332110e-09 0s 0s 511334510e-09 1s 1s 511335150e-09 1s 1s 511342350e-09 0s 0s 511344750e-09 1s 1s 511345430e-09 1s 1s 511352590e-09 0s 0s 511354990e-09 1s 1s 511355710e-09 1s 1s 511362830e-09 0s 0s 511365230e-09 1s 1s 511365990e-09 1s 1s 511373070e-09 0s 0s 511375470e-09 1s 1s 511376270e-09 1s 1s 511383310e-09 0s 0s 511385710e-09 1s 1s 511386550e-09 1s 1s 511393550e-09 0s 0s 511395950e-09 1s 1s 511396830e-09 1s 1s 511403790e-09 0s 0s 511406190e-09 1s 1s 511407110e-09 1s 1s 511414030e-09 0s 0s 511416430e-09 1s 1s 511417390e-09 1s 1s 511424270e-09 0s 0s 511426670e-09 1s 1s 511427670e-09 1s 1s 511434510e-09 0s 0s 511436910e-09 1s 1s 511437950e-09 1s 1s 511444750e-09 0s 0s 511447150e-09 1s 1s 511448230e-09 1s 1s 511454990e-09 0s 0s 511457390e-09 1s 1s 511458510e-09 1s 1s 511465230e-09 0s 0s 511467630e-09 1s 1s 511468790e-09 1s 1s 511475470e-09 0s 0s 511477870e-09 1s 1s 511479070e-09 1s 1s 511485710e-09 0s 0s 511488110e-09 1s 1s 511489350e-09 1s 1s 511495950e-09 0s 0s 511498350e-09 1s 1s 511499630e-09 1s 1s 511506190e-09 0s 0s 511508590e-09 1s 1s 511509910e-09 1s 1s 511516430e-09 0s 0s 511518830e-09 1s 1s 511520190e-09 1s 1s 511526670e-09 0s 0s 511529070e-09 1s 1s 511530470e-09 1s 1s 511536910e-09 0s 0s 511539310e-09 1s 1s 511540750e-09 1s 1s 511547150e-09 0s 0s 511549550e-09 1s 1s 511551030e-09 1s 1s 511557390e-09 0s 0s 511559790e-09 1s 1s 511561310e-09 1s 1s 511567630e-09 0s 0s 511570030e-09 1s 1s 511571590e-09 1s 1s 511577870e-09 0s 0s 511580270e-09 1s 1s 511581870e-09 1s 1s 511588110e-09 0s 0s 511590510e-09 1s 1s 511592150e-09 1s 1s 511598350e-09 0s 0s 511600750e-09 1s 1s 511602430e-09 1s 1s 511608590e-09 0s 0s 511610990e-09 1s 1s 511612710e-09 1s 1s 511618830e-09 0s 0s 511621230e-09 1s 1s 511622990e-09 1s 1s 511629070e-09 0s 0s 511631470e-09 1s 1s 511633270e-09 1s 1s 511639310e-09 0s 0s 511641710e-09 1s 1s 511643550e-09 1s 1s 511649550e-09 0s 0s 511651950e-09 1s 1s 511653830e-09 1s 1s 511659790e-09 0s 0s 511662190e-09 1s 1s 511664110e-09 1s 1s 511670030e-09 0s 0s 511672430e-09 1s 1s 511674390e-09 1s 1s 511680270e-09 0s 0s 511682670e-09 1s 1s 511684670e-09 1s 1s 511690510e-09 0s 0s 511692910e-09 1s 1s 511694950e-09 1s 1s 511700750e-09 0s 0s 511703150e-09 1s 1s 511705230e-09 1s 1s 511710990e-09 0s 0s 511713390e-09 1s 1s 511715510e-09 1s 1s 511721230e-09 0s 0s 511723630e-09 1s 1s 511725790e-09 1s 1s 511731470e-09 0s 0s 511733870e-09 1s 1s 511736070e-09 1s 1s 511741710e-09 0s 0s 511744110e-09 1s 1s 511746350e-09 1s 1s 511751950e-09 0s 0s 511754350e-09 1s 1s 511756630e-09 1s 1s 511762190e-09 0s 0s 511764590e-09 1s 1s 511766910e-09 1s 1s 511772430e-09 0s 0s 511774830e-09 1s 1s 511777190e-09 1s 1s 511782670e-09 0s 0s 511785070e-09 1s 1s 511787470e-09 1s 1s 511792910e-09 0s 0s 511795310e-09 1s 1s 511797750e-09 1s 1s 511803150e-09 0s 0s 511805550e-09 1s 1s 511808030e-09 1s 1s 511813390e-09 0s 0s 511815790e-09 1s 1s 511818310e-09 1s 1s 511823630e-09 0s 0s 511826030e-09 1s 1s 511828590e-09 1s 1s 511833870e-09 0s 0s 511836270e-09 1s 1s 511838870e-09 1s 1s 511844110e-09 0s 0s 511846510e-09 1s 1s 511849150e-09 1s 1s 511854350e-09 0s 0s 511856750e-09 1s 1s 511859430e-09 1s 1s 511864590e-09 0s 0s 511866990e-09 1s 1s 511869710e-09 1s 1s 511874830e-09 0s 0s 511877230e-09 1s 1s 511879990e-09 1s 1s 511885070e-09 0s 0s 511887470e-09 1s 1s 511890270e-09 1s 1s 511895310e-09 0s 0s 511897710e-09 1s 1s 511900550e-09 1s 1s 511905550e-09 0s 0s 511907950e-09 1s 1s 511910830e-09 1s 1s 511915790e-09 0s 0s 511918190e-09 1s 1s 511921110e-09 1s 1s 511926030e-09 0s 0s 511928430e-09 1s 1s 511931390e-09 1s 1s 511936270e-09 0s 0s 511938670e-09 1s 1s 511941670e-09 1s 1s 511946510e-09 0s 0s 511948910e-09 1s 1s 511951950e-09 1s 1s 511956750e-09 0s 0s 511959150e-09 1s 1s 511962230e-09 1s 1s 511966990e-09 0s 0s 511969390e-09 1s 1s 511972510e-09 1s 1s 511977230e-09 0s 0s 511979630e-09 1s 1s 511982790e-09 1s 1s 511987470e-09 0s 0s 511989870e-09 1s 1s 511993070e-09 1s 1s 511997710e-09 0s 0s 512000110e-09 1s 1s 512003350e-09 1s 1s 512007950e-09 0s 0s 512010350e-09 1s 1s 512013630e-09 1s 1s 512018190e-09 0s 0s 512020590e-09 1s 1s 512023910e-09 1s 1s 512028430e-09 0s 0s 512030830e-09 1s 1s 512034190e-09 1s 1s 512038670e-09 0s 0s 512041070e-09 1s 1s 512044470e-09 1s 1s 512048910e-09 0s 0s 512051310e-09 1s 1s 512054750e-09 1s 1s 512059150e-09 0s 0s 512061550e-09 1s 1s 512065030e-09 1s 1s 512069390e-09 0s 0s 512071790e-09 1s 1s 512075310e-09 1s 1s 512079630e-09 0s 0s 512082030e-09 1s 1s 512085590e-09 1s 1s 512089870e-09 0s 0s 512092270e-09 1s 1s 512095870e-09 1s 1s 512100110e-09 0s 0s 512102510e-09 1s 1s 512106150e-09 1s 1s 512110350e-09 0s 0s 512112750e-09 1s 1s 512116430e-09 1s 1s 512120590e-09 0s 0s 512122990e-09 1s 1s 512126710e-09 1s 1s 512130830e-09 0s 0s 512133230e-09 1s 1s 512136990e-09 1s 1s 512141070e-09 0s 0s 512143470e-09 1s 1s 512147270e-09 1s 1s 512151310e-09 0s 0s 512153710e-09 1s 1s 512157550e-09 1s 1s 512161550e-09 0s 0s 512163950e-09 1s 1s 512167830e-09 1s 1s 512171790e-09 0s 0s 512174190e-09 1s 1s 512178110e-09 1s 1s 512182030e-09 0s 0s 512184430e-09 1s 1s 512188390e-09 1s 1s 512192270e-09 0s 0s 512194670e-09 1s 1s 512198670e-09 1s 1s 512202510e-09 0s 0s 512204910e-09 1s 1s 512208950e-09 1s 1s 512212750e-09 0s 0s 512215150e-09 1s 1s 512219230e-09 1s 1s 512222990e-09 0s 0s 512225390e-09 1s 1s 512229510e-09 1s 1s 512233230e-09 0s 0s 512235630e-09 1s 1s 512239790e-09 1s 1s 512243470e-09 0s 0s 512245870e-09 1s 1s 512250070e-09 1s 1s 512253710e-09 0s 0s 512256110e-09 1s 1s 512260350e-09 1s 1s 512263950e-09 0s 0s 512266350e-09 1s 1s 512270630e-09 1s 1s 512274190e-09 0s 0s 512276590e-09 1s 1s 512280910e-09 1s 1s 512284430e-09 0s 0s 512286830e-09 1s 1s 512291190e-09 1s 1s 512294670e-09 0s 0s 512297070e-09 1s 1s 512301470e-09 1s 1s 512304910e-09 0s 0s 512307310e-09 1s 1s 512311750e-09 1s 1s 512315150e-09 0s 0s 512317550e-09 1s 1s 512322030e-09 1s 1s 512325390e-09 0s 0s 512327790e-09 1s 1s 512332310e-09 1s 1s 512335630e-09 0s 0s 512338030e-09 1s 1s 512342590e-09 1s 1s 512345870e-09 0s 0s 512348270e-09 1s 1s 512352870e-09 1s 1s 512356110e-09 0s 0s 512358510e-09 1s 1s 512363150e-09 1s 1s 512366350e-09 0s 0s 512368750e-09 1s 1s 512373430e-09 1s 1s 512376590e-09 0s 0s 512378990e-09 1s 1s 512383710e-09 1s 1s 512386830e-09 0s 0s 512389230e-09 1s 1s 512393990e-09 1s 1s 512397070e-09 0s 0s 512399470e-09 1s 1s 512404270e-09 1s 1s 512407310e-09 0s 0s 512409710e-09 1s 1s 512414550e-09 1s 1s 512417550e-09 0s 0s 512419950e-09 1s 1s 512424830e-09 1s 1s 512427790e-09 0s 0s 512430190e-09 1s 1s 512435110e-09 1s 1s 512438030e-09 0s 0s 512440430e-09 1s 1s 512445390e-09 1s 1s 512448270e-09 0s 0s 512450670e-09 1s 1s 512455670e-09 1s 1s 512458510e-09 0s 0s 512460910e-09 1s 1s 512465950e-09 1s 1s 512468750e-09 0s 0s 512471150e-09 1s 1s 512476230e-09 1s 1s 512478990e-09 0s 0s 512481390e-09 1s 1s 512486510e-09 1s 1s 512489230e-09 0s 0s 512491630e-09 1s 1s 512496790e-09 1s 1s 512499470e-09 0s 0s 512501870e-09 1s 1s 512507070e-09 1s 1s 512509710e-09 0s 0s 512512110e-09 1s 1s 512517350e-09 1s 1s 512519950e-09 0s 0s 512522350e-09 1s 1s 512527630e-09 1s 1s 512530190e-09 0s 0s 512532590e-09 1s 1s 512537910e-09 1s 1s 512540430e-09 0s 0s 512542830e-09 1s 1s 512548190e-09 1s 1s 512550670e-09 0s 0s 512553070e-09 1s 1s 512558470e-09 1s 1s 512560910e-09 0s 0s 512563310e-09 1s 1s 512568750e-09 1s 1s 512571150e-09 0s 0s 512573550e-09 1s 1s 512579030e-09 1s 1s 512581390e-09 0s 0s 512583790e-09 1s 1s 512589310e-09 1s 1s 512591630e-09 0s 0s 512594030e-09 1s 1s 512599590e-09 1s 1s 512601870e-09 0s 0s 512604270e-09 1s 1s 512609870e-09 1s 1s 512612110e-09 0s 0s 512614510e-09 1s 1s 512620150e-09 1s 1s 512622350e-09 0s 0s 512624750e-09 1s 1s 512630430e-09 1s 1s 512632590e-09 0s 0s 512634990e-09 1s 1s 512640710e-09 1s 1s 512642830e-09 0s 0s 512645230e-09 1s 1s 512650990e-09 1s 1s 512653070e-09 0s 0s 512655470e-09 1s 1s 512661270e-09 1s 1s 512663310e-09 0s 0s 512665710e-09 1s 1s 512671550e-09 1s 1s 512673550e-09 0s 0s 512675950e-09 1s 1s 512681830e-09 1s 1s 512683790e-09 0s 0s 512686190e-09 1s 1s 512692110e-09 1s 1s 512694030e-09 0s 0s 512696430e-09 1s 1s 512702390e-09 1s 1s 512704270e-09 0s 0s 512706670e-09 1s 1s 512712670e-09 1s 1s 512714510e-09 0s 0s 512716910e-09 1s 1s 512722950e-09 1s 1s 512724750e-09 0s 0s 512727150e-09 1s 1s 512733230e-09 1s 1s 512734990e-09 0s 0s 512737390e-09 1s 1s 512743510e-09 1s 1s 512745230e-09 0s 0s 512747630e-09 1s 1s 512753790e-09 1s 1s 512755470e-09 0s 0s 512757870e-09 1s 1s 512764070e-09 1s 1s 512765710e-09 0s 0s 512768110e-09 1s 1s 512774350e-09 1s 1s 512775950e-09 0s 0s 512778350e-09 1s 1s 512784630e-09 1s 1s 512786190e-09 0s 0s 512788590e-09 1s 1s 512794910e-09 1s 1s 512796430e-09 0s 0s 512798830e-09 1s 1s 512805190e-09 1s 1s 512806670e-09 0s 0s 512809070e-09 1s 1s 512815470e-09 1s 1s 512816910e-09 0s 0s 512819310e-09 1s 1s 512825750e-09 1s 1s 512827150e-09 0s 0s 512829550e-09 1s 1s 512836030e-09 1s 1s 512837390e-09 0s 0s 512839790e-09 1s 1s 512846310e-09 1s 1s 512847630e-09 0s 0s 512850030e-09 1s 1s 512856590e-09 1s 1s 512857870e-09 0s 0s 512860270e-09 1s 1s 512866870e-09 1s 1s 512868110e-09 0s 0s 512870510e-09 1s 1s 512877150e-09 1s 1s 512878350e-09 0s 0s 512880750e-09 1s 1s 512887430e-09 1s 1s 512888590e-09 0s 0s 512890990e-09 1s 1s 512897710e-09 1s 1s 512898830e-09 0s 0s 512901230e-09 1s 1s 512907990e-09 1s 1s 512909070e-09 0s 0s 512911470e-09 1s 1s 512918270e-09 1s 1s 512919310e-09 0s 0s 512921710e-09 1s 1s 512928550e-09 1s 1s 512929550e-09 0s 0s 512931950e-09 1s 1s 512938830e-09 1s 1s 512939790e-09 0s 0s 512942190e-09 1s 1s 512949110e-09 1s 1s 512950030e-09 0s 0s 512952430e-09 1s 1s 512959390e-09 1s 1s 512960270e-09 0s 0s 512962670e-09 1s 1s 512969670e-09 1s 1s 512970510e-09 0s 0s 512972910e-09 1s 1s 512979950e-09 1s 1s 512980750e-09 0s 0s 512983150e-09 1s 1s 512990230e-09 1s 1s 512990990e-09 0s 0s 512993390e-09 1s 1s 513000510e-09 1s 1s 513001230e-09 0s 0s 513003630e-09 1s 1s 513010790e-09 1s 1s 513011470e-09 0s 0s 513013870e-09 1s 1s 513021070e-09 1s 1s 513021710e-09 0s 0s 513024110e-09 1s 1s 513031350e-09 1s 1s 513031950e-09 0s 0s 513034350e-09 1s 1s 513041630e-09 1s 1s 513042190e-09 0s 0s 513044590e-09 1s 1s 513051910e-09 1s 1s 513052430e-09 0s 0s 513054830e-09 1s 1s 513062190e-09 1s 1s 513062670e-09 0s 0s 513065070e-09 1s 1s 513072470e-09 1s 1s 513072910e-09 0s 0s 513075310e-09 1s 1s 513082750e-09 1s 1s 513083150e-09 0s 0s 513085550e-09 1s 1s 513093030e-09 1s 1s 513093390e-09 0s 0s 513095790e-09 1s 1s 513103310e-09 1s 1s 513103630e-09 0s 0s 513106030e-09 1s 1s 513113590e-09 1s 1s 513113870e-09 0s 0s 513116270e-09 1s 1s 513123870e-09 1s 1s 513124110e-09 0s 0s 513126510e-09 1s 1s 513134150e-09 1s 1s 513134350e-09 0s 0s 513136750e-09 1s 1s 513144430e-09 1s 1s 513144590e-09 0s 0s 513146990e-09 1s 1s 513154710e-09 1s 1s 513154830e-09 0s 0s 513157230e-09 1s 1s 513164990e-09 1s 1s 513165070e-09 0s 0s 513167470e-09 1s 1s 513175270e-09 1s 1s 513175310e-09 0s 0s 513177710e-09 1s 1s 513185550e-09 0s 0s 513187950e-09 1s 1s 513195790e-09 0s 0s 513195830e-09 0s 0s 513198190e-09 1s 1s 513206030e-09 0s 0s 513206110e-09 0s 0s 513208430e-09 1s 1s 513216270e-09 0s 0s 513216390e-09 0s 0s 513218670e-09 1s 1s 513226510e-09 0s 0s 513226670e-09 0s 0s 513228910e-09 1s 1s 513236750e-09 0s 0s 513236950e-09 0s 0s 513239150e-09 1s 1s 513246990e-09 0s 0s 513247230e-09 0s 0s 513249390e-09 1s 1s 513257230e-09 0s 0s 513257510e-09 0s 0s 513259630e-09 1s 1s 513267470e-09 0s 0s 513267790e-09 0s 0s 513269870e-09 1s 1s 513277710e-09 0s 0s 513278070e-09 0s 0s 513280110e-09 1s 1s 513287950e-09 0s 0s 513288350e-09 0s 0s 513290350e-09 1s 1s 513298190e-09 0s 0s 513298630e-09 0s 0s 513300590e-09 1s 1s 513308430e-09 0s 0s 513308910e-09 0s 0s 513310830e-09 1s 1s 513318670e-09 0s 0s 513319190e-09 0s 0s 513321070e-09 1s 1s 513328910e-09 0s 0s 513329470e-09 0s 0s 513331310e-09 1s 1s 513339150e-09 0s 0s 513339750e-09 0s 0s 513341550e-09 1s 1s 513349390e-09 0s 0s 513350030e-09 0s 0s 513351790e-09 1s 1s 513359630e-09 0s 0s 513360310e-09 0s 0s 513362030e-09 1s 1s 513369870e-09 0s 0s 513370590e-09 0s 0s 513372270e-09 1s 1s 513380110e-09 0s 0s 513380870e-09 0s 0s 513382510e-09 1s 1s 513390350e-09 0s 0s 513391150e-09 0s 0s 513392750e-09 1s 1s 513400590e-09 0s 0s 513401430e-09 0s 0s 513402990e-09 1s 1s 513410830e-09 0s 0s 513411710e-09 0s 0s 513413230e-09 1s 1s 513421070e-09 0s 0s 513421990e-09 0s 0s 513423470e-09 1s 1s 513431310e-09 0s 0s 513432270e-09 0s 0s 513433710e-09 1s 1s 513441550e-09 0s 0s 513442550e-09 0s 0s 513443950e-09 1s 1s 513451790e-09 0s 0s 513452830e-09 0s 0s 513454190e-09 1s 1s 513462030e-09 0s 0s 513463110e-09 0s 0s 513464430e-09 1s 1s 513472270e-09 0s 0s 513473390e-09 0s 0s 513474670e-09 1s 1s 513482510e-09 0s 0s 513483670e-09 0s 0s 513484910e-09 1s 1s 513492750e-09 0s 0s 513493950e-09 0s 0s 513495150e-09 1s 1s 513502990e-09 0s 0s 513504230e-09 0s 0s 513505390e-09 1s 1s 513513230e-09 0s 0s 513514510e-09 0s 0s 513515630e-09 1s 1s 513523470e-09 0s 0s 513524790e-09 0s 0s 513525870e-09 1s 1s 513533710e-09 0s 0s 513535070e-09 0s 0s 513536110e-09 1s 1s 513543950e-09 0s 0s 513545350e-09 0s 0s 513546350e-09 1s 1s 513554190e-09 0s 0s 513555630e-09 0s 0s 513556590e-09 1s 1s 513564430e-09 0s 0s 513565910e-09 0s 0s 513566830e-09 1s 1s 513574670e-09 0s 0s 513576190e-09 0s 0s 513577070e-09 1s 1s 513584910e-09 0s 0s 513586470e-09 0s 0s 513587310e-09 1s 1s 513595150e-09 0s 0s 513596750e-09 0s 0s 513597550e-09 1s 1s 513605390e-09 0s 0s 513607030e-09 0s 0s 513607790e-09 1s 1s 513615630e-09 0s 0s 513617310e-09 0s 0s 513618030e-09 1s 1s 513625870e-09 0s 0s 513627590e-09 0s 0s 513628270e-09 1s 1s 513636110e-09 0s 0s 513637870e-09 0s 0s 513638510e-09 1s 1s 513646350e-09 0s 0s 513648150e-09 0s 0s 513648750e-09 1s 1s 513656590e-09 0s 0s 513658430e-09 0s 0s 513658990e-09 1s 1s 513666830e-09 0s 0s 513668710e-09 0s 0s 513669230e-09 1s 1s 513677070e-09 0s 0s 513678990e-09 0s 0s 513679470e-09 1s 1s 513687310e-09 0s 0s 513689270e-09 0s 0s 513689710e-09 1s 1s 513697550e-09 0s 0s 513699550e-09 0s 0s 513699950e-09 1s 1s 513707790e-09 0s 0s 513709830e-09 0s 0s 513710190e-09 1s 1s 513718030e-09 0s 0s 513720110e-09 0s 0s 513720430e-09 1s 1s 513728270e-09 0s 0s 513730390e-09 0s 0s 513730670e-09 1s 1s 513738510e-09 0s 0s 513740670e-09 0s 0s 513740910e-09 1s 1s 513748750e-09 0s 0s 513750950e-09 0s 0s 513751150e-09 1s 1s 513758990e-09 0s 0s 513761230e-09 0s 0s 513761390e-09 1s 1s 513769230e-09 0s 0s 513771510e-09 0s 0s 513771630e-09 1s 1s 513779470e-09 0s 0s 513781790e-09 0s 0s 513781870e-09 1s 1s 513789710e-09 0s 0s 513792070e-09 0s 0s 513792110e-09 1s 1s 513799950e-09 0s 0s 513802350e-09 1s 1s 513802390e-09 1s 1s 513810230e-09 0s 0s 513812590e-09 1s 1s 513812670e-09 1s 1s 513820470e-09 0s 0s 513822830e-09 1s 1s 513822950e-09 1s 1s 513830710e-09 0s 0s 513833070e-09 1s 1s 513833230e-09 1s 1s 513840950e-09 0s 0s 513843310e-09 1s 1s 513843510e-09 1s 1s 513851190e-09 0s 0s 513853550e-09 1s 1s 513853790e-09 1s 1s 513861430e-09 0s 0s 513863790e-09 1s 1s 513864070e-09 1s 1s 513871670e-09 0s 0s 513874030e-09 1s 1s 513874350e-09 1s 1s 513881910e-09 0s 0s 513884270e-09 1s 1s 513884630e-09 1s 1s 513892150e-09 0s 0s 513894510e-09 1s 1s 513894910e-09 1s 1s 513902390e-09 0s 0s 513904750e-09 1s 1s 513905190e-09 1s 1s 513912630e-09 0s 0s 513914990e-09 1s 1s 513915470e-09 1s 1s 513922870e-09 0s 0s 513925230e-09 1s 1s 513925750e-09 1s 1s 513933110e-09 0s 0s 513935470e-09 1s 1s 513936030e-09 1s 1s 513943350e-09 0s 0s 513945710e-09 1s 1s 513946310e-09 1s 1s 513953590e-09 0s 0s 513955950e-09 1s 1s 513956590e-09 1s 1s 513963830e-09 0s 0s 513966190e-09 1s 1s 513966870e-09 1s 1s 513974070e-09 0s 0s 513976430e-09 1s 1s 513977150e-09 1s 1s 513984310e-09 0s 0s 513986670e-09 1s 1s 513987430e-09 1s 1s 513994550e-09 0s 0s 513996910e-09 1s 1s 513997710e-09 1s 1s 514004790e-09 0s 0s 514007150e-09 1s 1s 514007990e-09 1s 1s 514015030e-09 0s 0s 514017390e-09 1s 1s 514018270e-09 1s 1s 514025270e-09 0s 0s 514027630e-09 1s 1s 514028550e-09 1s 1s 514035510e-09 0s 0s 514037870e-09 1s 1s 514038830e-09 1s 1s 514045750e-09 0s 0s 514048110e-09 1s 1s 514049110e-09 1s 1s 514055990e-09 0s 0s 514058350e-09 1s 1s 514059390e-09 1s 1s 514066230e-09 0s 0s 514068590e-09 1s 1s 514069670e-09 1s 1s 514076470e-09 0s 0s 514078830e-09 1s 1s 514079950e-09 1s 1s 514086710e-09 0s 0s 514089070e-09 1s 1s 514090230e-09 1s 1s 514096950e-09 0s 0s 514099310e-09 1s 1s 514100510e-09 1s 1s 514107190e-09 0s 0s 514109550e-09 1s 1s 514110790e-09 1s 1s 514117430e-09 0s 0s 514119790e-09 1s 1s 514121070e-09 1s 1s 514127670e-09 0s 0s 514130030e-09 1s 1s 514131350e-09 1s 1s 514137910e-09 0s 0s 514140270e-09 1s 1s 514141630e-09 1s 1s 514148150e-09 0s 0s 514150510e-09 1s 1s 514151910e-09 1s 1s 514158390e-09 0s 0s 514160750e-09 1s 1s 514162190e-09 1s 1s 514168630e-09 0s 0s 514170990e-09 1s 1s 514172470e-09 1s 1s 514178870e-09 0s 0s 514181230e-09 1s 1s 514182750e-09 1s 1s 514189110e-09 0s 0s 514191470e-09 1s 1s 514193030e-09 1s 1s 514199350e-09 0s 0s 514201710e-09 1s 1s 514203310e-09 1s 1s 514209590e-09 0s 0s 514211950e-09 1s 1s 514213590e-09 1s 1s 514219830e-09 0s 0s 514222190e-09 1s 1s 514223870e-09 1s 1s 514230070e-09 0s 0s 514232430e-09 1s 1s 514234150e-09 1s 1s 514240310e-09 0s 0s 514242670e-09 1s 1s 514244430e-09 1s 1s 514250550e-09 0s 0s 514252910e-09 1s 1s 514254710e-09 1s 1s 514260790e-09 0s 0s 514263150e-09 1s 1s 514264990e-09 1s 1s 514271030e-09 0s 0s 514273390e-09 1s 1s 514275270e-09 1s 1s 514281270e-09 0s 0s 514283630e-09 1s 1s 514285550e-09 1s 1s 514291510e-09 0s 0s 514293870e-09 1s 1s 514295830e-09 1s 1s 514301750e-09 0s 0s 514304110e-09 1s 1s 514306110e-09 1s 1s 514311990e-09 0s 0s 514314350e-09 1s 1s 514316390e-09 1s 1s 514322230e-09 0s 0s 514324590e-09 1s 1s 514326670e-09 1s 1s 514332470e-09 0s 0s 514334830e-09 1s 1s 514336950e-09 1s 1s 514342710e-09 0s 0s 514345070e-09 1s 1s 514347230e-09 1s 1s 514352950e-09 0s 0s 514355310e-09 1s 1s 514357510e-09 1s 1s 514363190e-09 0s 0s 514365550e-09 1s 1s 514367790e-09 1s 1s 514373430e-09 0s 0s 514375790e-09 1s 1s 514378070e-09 1s 1s 514383670e-09 0s 0s 514386030e-09 1s 1s 514388350e-09 1s 1s 514393910e-09 0s 0s 514396270e-09 1s 1s 514398630e-09 1s 1s 514404150e-09 0s 0s 514406510e-09 1s 1s 514408910e-09 1s 1s 514414390e-09 0s 0s 514416750e-09 1s 1s 514419190e-09 1s 1s 514424630e-09 0s 0s 514426990e-09 1s 1s 514429470e-09 1s 1s 514434870e-09 0s 0s 514437230e-09 1s 1s 514439750e-09 1s 1s 514445110e-09 0s 0s 514447470e-09 1s 1s 514450030e-09 1s 1s 514455350e-09 0s 0s 514457710e-09 1s 1s 514460310e-09 1s 1s 514465590e-09 0s 0s 514467950e-09 1s 1s 514470590e-09 1s 1s 514475830e-09 0s 0s 514478190e-09 1s 1s 514480870e-09 1s 1s 514486070e-09 0s 0s 514488430e-09 1s 1s 514491150e-09 1s 1s 514496310e-09 0s 0s 514498670e-09 1s 1s 514501430e-09 1s 1s 514506550e-09 0s 0s 514508910e-09 1s 1s 514511710e-09 1s 1s 514516790e-09 0s 0s 514519150e-09 1s 1s 514521990e-09 1s 1s 514527030e-09 0s 0s 514529390e-09 1s 1s 514532270e-09 1s 1s 514537270e-09 0s 0s 514539630e-09 1s 1s 514542550e-09 1s 1s 514547510e-09 0s 0s 514549870e-09 1s 1s 514552830e-09 1s 1s 514557750e-09 0s 0s 514560110e-09 1s 1s 514563110e-09 1s 1s 514567990e-09 0s 0s 514570350e-09 1s 1s 514573390e-09 1s 1s 514578230e-09 0s 0s 514580590e-09 1s 1s 514583670e-09 1s 1s 514588470e-09 0s 0s 514590830e-09 1s 1s 514593950e-09 1s 1s 514598710e-09 0s 0s 514601070e-09 1s 1s 514604230e-09 1s 1s 514608950e-09 0s 0s 514611310e-09 1s 1s 514614510e-09 1s 1s 514619190e-09 0s 0s 514621550e-09 1s 1s 514624790e-09 1s 1s 514629430e-09 0s 0s 514631790e-09 1s 1s 514635070e-09 1s 1s 514639670e-09 0s 0s 514642030e-09 1s 1s 514645350e-09 1s 1s 514649910e-09 0s 0s 514652270e-09 1s 1s 514655630e-09 1s 1s 514660150e-09 0s 0s 514662510e-09 1s 1s 514665910e-09 1s 1s 514670390e-09 0s 0s 514672750e-09 1s 1s 514676190e-09 1s 1s 514680630e-09 0s 0s 514682990e-09 1s 1s 514686470e-09 1s 1s 514690870e-09 0s 0s 514693230e-09 1s 1s 514696750e-09 1s 1s 514701110e-09 0s 0s 514703470e-09 1s 1s 514707030e-09 1s 1s 514711350e-09 0s 0s 514713710e-09 1s 1s 514717310e-09 1s 1s 514721590e-09 0s 0s 514723950e-09 1s 1s 514727590e-09 1s 1s 514731830e-09 0s 0s 514734190e-09 1s 1s 514737870e-09 1s 1s 514742070e-09 0s 0s 514744430e-09 1s 1s 514748150e-09 1s 1s 514752310e-09 0s 0s 514754670e-09 1s 1s 514758430e-09 1s 1s 514762550e-09 0s 0s 514764910e-09 1s 1s 514768710e-09 1s 1s 514772790e-09 0s 0s 514775150e-09 1s 1s 514778990e-09 1s 1s 514783030e-09 0s 0s 514785390e-09 1s 1s 514789270e-09 1s 1s 514793270e-09 0s 0s 514795630e-09 1s 1s 514799550e-09 1s 1s 514803510e-09 0s 0s 514805870e-09 1s 1s 514809830e-09 1s 1s 514813750e-09 0s 0s 514816110e-09 1s 1s 514820110e-09 1s 1s 514823990e-09 0s 0s 514826350e-09 1s 1s 514830390e-09 1s 1s 514834230e-09 0s 0s 514836590e-09 1s 1s 514840670e-09 1s 1s 514844470e-09 0s 0s 514846830e-09 1s 1s 514850950e-09 1s 1s 514854710e-09 0s 0s 514857070e-09 1s 1s 514861230e-09 1s 1s 514864950e-09 0s 0s 514867310e-09 1s 1s 514871510e-09 1s 1s 514875190e-09 0s 0s 514877550e-09 1s 1s 514881790e-09 1s 1s 514885430e-09 0s 0s 514887790e-09 1s 1s 514892070e-09 1s 1s 514895670e-09 0s 0s 514898030e-09 1s 1s 514902350e-09 1s 1s 514905910e-09 0s 0s 514908270e-09 1s 1s 514912630e-09 1s 1s 514916150e-09 0s 0s 514918510e-09 1s 1s 514922910e-09 1s 1s 514926390e-09 0s 0s 514928750e-09 1s 1s 514933190e-09 1s 1s 514936630e-09 0s 0s 514938990e-09 1s 1s 514943470e-09 1s 1s 514946870e-09 0s 0s 514949230e-09 1s 1s 514953750e-09 1s 1s 514957110e-09 0s 0s 514959470e-09 1s 1s 514964030e-09 1s 1s 514967350e-09 0s 0s 514969710e-09 1s 1s 514974310e-09 1s 1s 514977590e-09 0s 0s 514979950e-09 1s 1s 514984590e-09 1s 1s 514987830e-09 0s 0s 514990190e-09 1s 1s 514994870e-09 1s 1s 514998070e-09 0s 0s 515000430e-09 1s 1s 515005150e-09 1s 1s 515008310e-09 0s 0s 515010670e-09 1s 1s 515015430e-09 1s 1s 515018550e-09 0s 0s 515020910e-09 1s 1s 515025710e-09 1s 1s 515028790e-09 0s 0s 515031150e-09 1s 1s 515035990e-09 1s 1s 515039030e-09 0s 0s 515041390e-09 1s 1s 515046270e-09 1s 1s 515049270e-09 0s 0s 515051630e-09 1s 1s 515056550e-09 1s 1s 515059510e-09 0s 0s 515061870e-09 1s 1s 515066830e-09 1s 1s 515069750e-09 0s 0s 515072110e-09 1s 1s 515077110e-09 1s 1s 515079990e-09 0s 0s 515082350e-09 1s 1s 515087390e-09 1s 1s 515090230e-09 0s 0s 515092590e-09 1s 1s 515097670e-09 1s 1s 515100470e-09 0s 0s 515102830e-09 1s 1s 515107950e-09 1s 1s 515110710e-09 0s 0s 515113070e-09 1s 1s 515118230e-09 1s 1s 515120950e-09 0s 0s 515123310e-09 1s 1s 515128510e-09 1s 1s 515131190e-09 0s 0s 515133550e-09 1s 1s 515138790e-09 1s 1s 515141430e-09 0s 0s 515143790e-09 1s 1s 515149070e-09 1s 1s 515151670e-09 0s 0s 515154030e-09 1s 1s 515159350e-09 1s 1s 515161910e-09 0s 0s 515164270e-09 1s 1s 515169630e-09 1s 1s 515172150e-09 0s 0s 515174510e-09 1s 1s 515179910e-09 1s 1s 515182390e-09 0s 0s 515184750e-09 1s 1s 515190190e-09 1s 1s 515192630e-09 0s 0s 515194990e-09 1s 1s 515200470e-09 1s 1s 515202870e-09 0s 0s 515205230e-09 1s 1s 515210750e-09 1s 1s 515213110e-09 0s 0s 515215470e-09 1s 1s 515221030e-09 1s 1s 515223350e-09 0s 0s 515225710e-09 1s 1s 515231310e-09 1s 1s 515233590e-09 0s 0s 515235950e-09 1s 1s 515241590e-09 1s 1s 515243830e-09 0s 0s 515246190e-09 1s 1s 515251870e-09 1s 1s 515254070e-09 0s 0s 515256430e-09 1s 1s 515262150e-09 1s 1s 515264310e-09 0s 0s 515266670e-09 1s 1s 515272430e-09 1s 1s 515274550e-09 0s 0s 515276910e-09 1s 1s 515282710e-09 1s 1s 515284790e-09 0s 0s 515287150e-09 1s 1s 515292990e-09 1s 1s 515295030e-09 0s 0s 515297390e-09 1s 1s 515303270e-09 1s 1s 515305270e-09 0s 0s 515307630e-09 1s 1s 515313550e-09 1s 1s 515315510e-09 0s 0s 515317870e-09 1s 1s 515323830e-09 1s 1s 515325750e-09 0s 0s 515328110e-09 1s 1s 515334110e-09 1s 1s 515335990e-09 0s 0s 515338350e-09 1s 1s 515344390e-09 1s 1s 515346230e-09 0s 0s 515348590e-09 1s 1s 515354670e-09 1s 1s 515356470e-09 0s 0s 515358830e-09 1s 1s 515364950e-09 1s 1s 515366710e-09 0s 0s 515369070e-09 1s 1s 515375230e-09 1s 1s 515376950e-09 0s 0s 515379310e-09 1s 1s 515385510e-09 1s 1s 515387190e-09 0s 0s 515389550e-09 1s 1s 515395790e-09 1s 1s 515397430e-09 0s 0s 515399790e-09 1s 1s 515406070e-09 1s 1s 515407670e-09 0s 0s 515410030e-09 1s 1s 515416350e-09 1s 1s 515417910e-09 0s 0s 515420270e-09 1s 1s 515426630e-09 1s 1s 515428150e-09 0s 0s 515430510e-09 1s 1s 515436910e-09 1s 1s 515438390e-09 0s 0s 515440750e-09 1s 1s 515447190e-09 1s 1s 515448630e-09 0s 0s 515450990e-09 1s 1s 515457470e-09 1s 1s 515458870e-09 0s 0s 515461230e-09 1s 1s 515467750e-09 1s 1s 515469110e-09 0s 0s 515471470e-09 1s 1s 515478030e-09 1s 1s 515479350e-09 0s 0s 515481710e-09 1s 1s 515488310e-09 1s 1s 515489590e-09 0s 0s 515491950e-09 1s 1s 515498590e-09 1s 1s 515499830e-09 0s 0s 515502190e-09 1s 1s 515508870e-09 1s 1s 515510070e-09 0s 0s 515512430e-09 1s 1s 515519150e-09 1s 1s 515520310e-09 0s 0s 515522670e-09 1s 1s 515529430e-09 1s 1s 515530550e-09 0s 0s 515532910e-09 1s 1s 515539710e-09 1s 1s 515540790e-09 0s 0s 515543150e-09 1s 1s 515549990e-09 1s 1s 515551030e-09 0s 0s 515553390e-09 1s 1s 515560270e-09 1s 1s 515561270e-09 0s 0s 515563630e-09 1s 1s 515570550e-09 1s 1s 515571510e-09 0s 0s 515573870e-09 1s 1s 515580830e-09 1s 1s 515581750e-09 0s 0s 515584110e-09 1s 1s 515591110e-09 1s 1s 515591990e-09 0s 0s 515594350e-09 1s 1s 515601390e-09 1s 1s 515602230e-09 0s 0s 515604590e-09 1s 1s 515611670e-09 1s 1s 515612470e-09 0s 0s 515614830e-09 1s 1s 515621950e-09 1s 1s 515622710e-09 0s 0s 515625070e-09 1s 1s 515632230e-09 1s 1s 515632950e-09 0s 0s 515635310e-09 1s 1s 515642510e-09 1s 1s 515643190e-09 0s 0s 515645550e-09 1s 1s 515652790e-09 1s 1s 515653430e-09 0s 0s 515655790e-09 1s 1s 515663070e-09 1s 1s 515663670e-09 0s 0s 515666030e-09 1s 1s 515673350e-09 1s 1s 515673910e-09 0s 0s 515676270e-09 1s 1s 515683630e-09 1s 1s 515684150e-09 0s 0s 515686510e-09 1s 1s 515693910e-09 1s 1s 515694390e-09 0s 0s 515696750e-09 1s 1s 515704190e-09 1s 1s 515704630e-09 0s 0s 515706990e-09 1s 1s 515714470e-09 1s 1s 515714870e-09 0s 0s 515717230e-09 1s 1s 515724750e-09 1s 1s 515725110e-09 0s 0s 515727470e-09 1s 1s 515735030e-09 1s 1s 515735350e-09 0s 0s 515737710e-09 1s 1s 515745310e-09 1s 1s 515745590e-09 0s 0s 515747950e-09 1s 1s 515755590e-09 1s 1s 515755830e-09 0s 0s 515758190e-09 1s 1s 515765870e-09 1s 1s 515766070e-09 0s 0s 515768430e-09 1s 1s 515776150e-09 1s 1s 515776310e-09 0s 0s 515778670e-09 1s 1s 515786430e-09 1s 1s 515786550e-09 0s 0s 515788910e-09 1s 1s 515796710e-09 1s 1s 515796790e-09 0s 0s 515799150e-09 1s 1s 515806990e-09 1s 1s 515807030e-09 0s 0s 515809390e-09 1s 1s 515817270e-09 0s 0s 515819630e-09 1s 1s 515827510e-09 0s 0s 515827550e-09 0s 0s 515829870e-09 1s 1s 515837750e-09 0s 0s 515837830e-09 0s 0s 515840110e-09 1s 1s 515847990e-09 0s 0s 515848110e-09 0s 0s 515850350e-09 1s 1s 515858230e-09 0s 0s 515858390e-09 0s 0s 515860590e-09 1s 1s 515868470e-09 0s 0s 515868670e-09 0s 0s 515870830e-09 1s 1s 515878710e-09 0s 0s 515878950e-09 0s 0s 515881070e-09 1s 1s 515888950e-09 0s 0s 515889230e-09 0s 0s 515891310e-09 1s 1s 515899190e-09 0s 0s 515899510e-09 0s 0s 515901550e-09 1s 1s 515909430e-09 0s 0s 515909790e-09 0s 0s 515911790e-09 1s 1s 515919670e-09 0s 0s 515920070e-09 0s 0s 515922030e-09 1s 1s 515929910e-09 0s 0s 515930350e-09 0s 0s 515932270e-09 1s 1s 515940150e-09 0s 0s 515940630e-09 0s 0s 515942510e-09 1s 1s 515950390e-09 0s 0s 515950910e-09 0s 0s 515952750e-09 1s 1s 515960630e-09 0s 0s 515961190e-09 0s 0s 515962990e-09 1s 1s 515970870e-09 0s 0s 515971470e-09 0s 0s 515973230e-09 1s 1s 515981110e-09 0s 0s 515981750e-09 0s 0s 515983470e-09 1s 1s 515991350e-09 0s 0s 515992030e-09 0s 0s 515993710e-09 1s 1s 516001590e-09 0s 0s 516002310e-09 0s 0s 516003950e-09 1s 1s 516011830e-09 0s 0s 516012590e-09 0s 0s 516014190e-09 1s 1s 516022070e-09 0s 0s 516022870e-09 0s 0s 516024430e-09 1s 1s 516032310e-09 0s 0s 516033150e-09 0s 0s 516034670e-09 1s 1s 516042550e-09 0s 0s 516043430e-09 0s 0s 516044910e-09 1s 1s 516052790e-09 0s 0s 516053710e-09 0s 0s 516055150e-09 1s 1s 516063030e-09 0s 0s 516063990e-09 0s 0s 516065390e-09 1s 1s 516073270e-09 0s 0s 516074270e-09 0s 0s 516075630e-09 1s 1s 516083510e-09 0s 0s 516084550e-09 0s 0s 516085870e-09 1s 1s 516093750e-09 0s 0s 516094830e-09 0s 0s 516096110e-09 1s 1s 516103990e-09 0s 0s 516105110e-09 0s 0s 516106350e-09 1s 1s 516114230e-09 0s 0s 516115390e-09 0s 0s 516116590e-09 1s 1s 516124470e-09 0s 0s 516125670e-09 0s 0s 516126830e-09 1s 1s 516134710e-09 0s 0s 516135950e-09 0s 0s 516137070e-09 1s 1s 516144950e-09 0s 0s 516146230e-09 0s 0s 516147310e-09 1s 1s 516155190e-09 0s 0s 516156510e-09 0s 0s 516157550e-09 1s 1s 516165430e-09 0s 0s 516166790e-09 0s 0s 516167790e-09 1s 1s 516175670e-09 0s 0s 516177070e-09 0s 0s 516178030e-09 1s 1s 516185910e-09 0s 0s 516187350e-09 0s 0s 516188270e-09 1s 1s 516196150e-09 0s 0s 516197630e-09 0s 0s 516198510e-09 1s 1s 516206390e-09 0s 0s 516207910e-09 0s 0s 516208750e-09 1s 1s 516216630e-09 0s 0s 516218190e-09 0s 0s 516218990e-09 1s 1s 516226870e-09 0s 0s 516228470e-09 0s 0s 516229230e-09 1s 1s 516237110e-09 0s 0s 516238750e-09 0s 0s 516239470e-09 1s 1s 516247350e-09 0s 0s 516249030e-09 0s 0s 516249710e-09 1s 1s 516257590e-09 0s 0s 516259310e-09 0s 0s 516259950e-09 1s 1s 516267830e-09 0s 0s 516269590e-09 0s 0s 516270190e-09 1s 1s 516278070e-09 0s 0s 516279870e-09 0s 0s 516280430e-09 1s 1s 516288310e-09 0s 0s 516290150e-09 0s 0s 516290670e-09 1s 1s 516298550e-09 0s 0s 516300430e-09 0s 0s 516300910e-09 1s 1s 516308790e-09 0s 0s 516310710e-09 0s 0s 516311150e-09 1s 1s 516319030e-09 0s 0s 516320990e-09 0s 0s 516321390e-09 1s 1s 516329270e-09 0s 0s 516331270e-09 0s 0s 516331630e-09 1s 1s 516339510e-09 0s 0s 516341550e-09 0s 0s 516341870e-09 1s 1s 516349750e-09 0s 0s 516351830e-09 0s 0s 516352110e-09 1s 1s 516359990e-09 0s 0s 516362110e-09 0s 0s 516362350e-09 1s 1s 516370230e-09 0s 0s 516372390e-09 0s 0s 516372590e-09 1s 1s 516380470e-09 0s 0s 516382670e-09 0s 0s 516382830e-09 1s 1s 516390710e-09 0s 0s 516392950e-09 0s 0s 516393070e-09 1s 1s 516400950e-09 0s 0s 516403230e-09 0s 0s 516403310e-09 1s 1s 516411190e-09 0s 0s 516413510e-09 0s 0s 516413550e-09 1s 1s 516421430e-09 0s 0s 516423790e-09 1s 1s 516423830e-09 1s 1s 516431710e-09 0s 0s 516434030e-09 1s 1s 516434110e-09 1s 1s 516441950e-09 0s 0s 516444270e-09 1s 1s 516444390e-09 1s 1s 516452190e-09 0s 0s 516454510e-09 1s 1s 516454670e-09 1s 1s 516462430e-09 0s 0s 516464750e-09 1s 1s 516464950e-09 1s 1s 516472670e-09 0s 0s 516474990e-09 1s 1s 516475230e-09 1s 1s 516482910e-09 0s 0s 516485230e-09 1s 1s 516485510e-09 1s 1s 516493150e-09 0s 0s 516495470e-09 1s 1s 516495790e-09 1s 1s 516503390e-09 0s 0s 516505710e-09 1s 1s 516506070e-09 1s 1s 516513630e-09 0s 0s 516515950e-09 1s 1s 516516350e-09 1s 1s 516523870e-09 0s 0s 516526190e-09 1s 1s 516526630e-09 1s 1s 516534110e-09 0s 0s 516536430e-09 1s 1s 516536910e-09 1s 1s 516544350e-09 0s 0s 516546670e-09 1s 1s 516547190e-09 1s 1s 516554590e-09 0s 0s 516556910e-09 1s 1s 516557470e-09 1s 1s 516564830e-09 0s 0s 516567150e-09 1s 1s 516567750e-09 1s 1s 516575070e-09 0s 0s 516577390e-09 1s 1s 516578030e-09 1s 1s 516585310e-09 0s 0s 516587630e-09 1s 1s 516588310e-09 1s 1s 516595550e-09 0s 0s 516597870e-09 1s 1s 516598590e-09 1s 1s 516605790e-09 0s 0s 516608110e-09 1s 1s 516608870e-09 1s 1s 516616030e-09 0s 0s 516618350e-09 1s 1s 516619150e-09 1s 1s 516626270e-09 0s 0s 516628590e-09 1s 1s 516629430e-09 1s 1s 516636510e-09 0s 0s 516638830e-09 1s 1s 516639710e-09 1s 1s 516646750e-09 0s 0s 516649070e-09 1s 1s 516649990e-09 1s 1s 516656990e-09 0s 0s 516659310e-09 1s 1s 516660270e-09 1s 1s 516667230e-09 0s 0s 516669550e-09 1s 1s 516670550e-09 1s 1s 516677470e-09 0s 0s 516679790e-09 1s 1s 516680830e-09 1s 1s 516687710e-09 0s 0s 516690030e-09 1s 1s 516691110e-09 1s 1s 516697950e-09 0s 0s 516700270e-09 1s 1s 516701390e-09 1s 1s 516708190e-09 0s 0s 516710510e-09 1s 1s 516711670e-09 1s 1s 516718430e-09 0s 0s 516720750e-09 1s 1s 516721950e-09 1s 1s 516728670e-09 0s 0s 516730990e-09 1s 1s 516732230e-09 1s 1s 516738910e-09 0s 0s 516741230e-09 1s 1s 516742510e-09 1s 1s 516749150e-09 0s 0s 516751470e-09 1s 1s 516752790e-09 1s 1s 516759390e-09 0s 0s 516761710e-09 1s 1s 516763070e-09 1s 1s 516769630e-09 0s 0s 516771950e-09 1s 1s 516773350e-09 1s 1s 516779870e-09 0s 0s 516782190e-09 1s 1s 516783630e-09 1s 1s 516790110e-09 0s 0s 516792430e-09 1s 1s 516793910e-09 1s 1s 516800350e-09 0s 0s 516802670e-09 1s 1s 516804190e-09 1s 1s 516810590e-09 0s 0s 516812910e-09 1s 1s 516814470e-09 1s 1s 516820830e-09 0s 0s 516823150e-09 1s 1s 516824750e-09 1s 1s 516831070e-09 0s 0s 516833390e-09 1s 1s 516835030e-09 1s 1s 516841310e-09 0s 0s 516843630e-09 1s 1s 516845310e-09 1s 1s 516851550e-09 0s 0s 516853870e-09 1s 1s 516855590e-09 1s 1s 516861790e-09 0s 0s 516864110e-09 1s 1s 516865870e-09 1s 1s 516872030e-09 0s 0s 516874350e-09 1s 1s 516876150e-09 1s 1s 516882270e-09 0s 0s 516884590e-09 1s 1s 516886430e-09 1s 1s 516892510e-09 0s 0s 516894830e-09 1s 1s 516896710e-09 1s 1s 516902750e-09 0s 0s 516905070e-09 1s 1s 516906990e-09 1s 1s 516912990e-09 0s 0s 516915310e-09 1s 1s 516917270e-09 1s 1s 516923230e-09 0s 0s 516925550e-09 1s 1s 516927550e-09 1s 1s 516933470e-09 0s 0s 516935790e-09 1s 1s 516937830e-09 1s 1s 516943710e-09 0s 0s 516946030e-09 1s 1s 516948110e-09 1s 1s 516953950e-09 0s 0s 516956270e-09 1s 1s 516958390e-09 1s 1s 516964190e-09 0s 0s 516966510e-09 1s 1s 516968670e-09 1s 1s 516974430e-09 0s 0s 516976750e-09 1s 1s 516978950e-09 1s 1s 516984670e-09 0s 0s 516986990e-09 1s 1s 516989230e-09 1s 1s 516994910e-09 0s 0s 516997230e-09 1s 1s 516999510e-09 1s 1s 517005150e-09 0s 0s 517007470e-09 1s 1s 517009790e-09 1s 1s 517015390e-09 0s 0s 517017710e-09 1s 1s 517020070e-09 1s 1s 517025630e-09 0s 0s 517027950e-09 1s 1s 517030350e-09 1s 1s 517035870e-09 0s 0s 517038190e-09 1s 1s 517040630e-09 1s 1s 517046110e-09 0s 0s 517048430e-09 1s 1s 517050910e-09 1s 1s 517056350e-09 0s 0s 517058670e-09 1s 1s 517061190e-09 1s 1s 517066590e-09 0s 0s 517068910e-09 1s 1s 517071470e-09 1s 1s 517076830e-09 0s 0s 517079150e-09 1s 1s 517081750e-09 1s 1s 517087070e-09 0s 0s 517089390e-09 1s 1s 517092030e-09 1s 1s 517097310e-09 0s 0s 517099630e-09 1s 1s 517102310e-09 1s 1s 517107550e-09 0s 0s 517109870e-09 1s 1s 517112590e-09 1s 1s 517117790e-09 0s 0s 517120110e-09 1s 1s 517122870e-09 1s 1s 517128030e-09 0s 0s 517130350e-09 1s 1s 517133150e-09 1s 1s 517138270e-09 0s 0s 517140590e-09 1s 1s 517143430e-09 1s 1s 517148510e-09 0s 0s 517150830e-09 1s 1s 517153710e-09 1s 1s 517158750e-09 0s 0s 517161070e-09 1s 1s 517163990e-09 1s 1s 517168990e-09 0s 0s 517171310e-09 1s 1s 517174270e-09 1s 1s 517179230e-09 0s 0s 517181550e-09 1s 1s 517184550e-09 1s 1s 517189470e-09 0s 0s 517191790e-09 1s 1s 517194830e-09 1s 1s 517199710e-09 0s 0s 517202030e-09 1s 1s 517205110e-09 1s 1s 517209950e-09 0s 0s 517212270e-09 1s 1s 517215390e-09 1s 1s 517220190e-09 0s 0s 517222510e-09 1s 1s 517225670e-09 1s 1s 517230430e-09 0s 0s 517232750e-09 1s 1s 517235950e-09 1s 1s 517240670e-09 0s 0s 517242990e-09 1s 1s 517246230e-09 1s 1s 517250910e-09 0s 0s 517253230e-09 1s 1s 517256510e-09 1s 1s 517261150e-09 0s 0s 517263470e-09 1s 1s 517266790e-09 1s 1s 517271390e-09 0s 0s 517273710e-09 1s 1s 517277070e-09 1s 1s 517281630e-09 0s 0s 517283950e-09 1s 1s 517287350e-09 1s 1s 517291870e-09 0s 0s 517294190e-09 1s 1s 517297630e-09 1s 1s 517302110e-09 0s 0s 517304430e-09 1s 1s 517307910e-09 1s 1s 517312350e-09 0s 0s 517314670e-09 1s 1s 517318190e-09 1s 1s 517322590e-09 0s 0s 517324910e-09 1s 1s 517328470e-09 1s 1s 517332830e-09 0s 0s 517335150e-09 1s 1s 517338750e-09 1s 1s 517343070e-09 0s 0s 517345390e-09 1s 1s 517349030e-09 1s 1s 517353310e-09 0s 0s 517355630e-09 1s 1s 517359310e-09 1s 1s 517363550e-09 0s 0s 517365870e-09 1s 1s 517369590e-09 1s 1s 517373790e-09 0s 0s 517376110e-09 1s 1s 517379870e-09 1s 1s 517384030e-09 0s 0s 517386350e-09 1s 1s 517390150e-09 1s 1s 517394270e-09 0s 0s 517396590e-09 1s 1s 517400430e-09 1s 1s 517404510e-09 0s 0s 517406830e-09 1s 1s 517410710e-09 1s 1s 517414750e-09 0s 0s 517417070e-09 1s 1s 517420990e-09 1s 1s 517424990e-09 0s 0s 517427310e-09 1s 1s 517431270e-09 1s 1s 517435230e-09 0s 0s 517437550e-09 1s 1s 517441550e-09 1s 1s 517445470e-09 0s 0s 517447790e-09 1s 1s 517451830e-09 1s 1s 517455710e-09 0s 0s 517458030e-09 1s 1s 517462110e-09 1s 1s 517465950e-09 0s 0s 517468270e-09 1s 1s 517472390e-09 1s 1s 517476190e-09 0s 0s 517478510e-09 1s 1s 517482670e-09 1s 1s 517486430e-09 0s 0s 517488750e-09 1s 1s 517492950e-09 1s 1s 517496670e-09 0s 0s 517498990e-09 1s 1s 517503230e-09 1s 1s 517506910e-09 0s 0s 517509230e-09 1s 1s 517513510e-09 1s 1s 517517150e-09 0s 0s 517519470e-09 1s 1s 517523790e-09 1s 1s 517527390e-09 0s 0s 517529710e-09 1s 1s 517534070e-09 1s 1s 517537630e-09 0s 0s 517539950e-09 1s 1s 517544350e-09 1s 1s 517547870e-09 0s 0s 517550190e-09 1s 1s 517554630e-09 1s 1s 517558110e-09 0s 0s 517560430e-09 1s 1s 517564910e-09 1s 1s 517568350e-09 0s 0s 517570670e-09 1s 1s 517575190e-09 1s 1s 517578590e-09 0s 0s 517580910e-09 1s 1s 517585470e-09 1s 1s 517588830e-09 0s 0s 517591150e-09 1s 1s 517595750e-09 1s 1s 517599070e-09 0s 0s 517601390e-09 1s 1s 517606030e-09 1s 1s 517609310e-09 0s 0s 517611630e-09 1s 1s 517616310e-09 1s 1s 517619550e-09 0s 0s 517621870e-09 1s 1s 517626590e-09 1s 1s 517629790e-09 0s 0s 517632110e-09 1s 1s 517636870e-09 1s 1s 517640030e-09 0s 0s 517642350e-09 1s 1s 517647150e-09 1s 1s 517650270e-09 0s 0s 517652590e-09 1s 1s 517657430e-09 1s 1s 517660510e-09 0s 0s 517662830e-09 1s 1s 517667710e-09 1s 1s 517670750e-09 0s 0s 517673070e-09 1s 1s 517677990e-09 1s 1s 517680990e-09 0s 0s 517683310e-09 1s 1s 517688270e-09 1s 1s 517691230e-09 0s 0s 517693550e-09 1s 1s 517698550e-09 1s 1s 517701470e-09 0s 0s 517703790e-09 1s 1s 517708830e-09 1s 1s 517711710e-09 0s 0s 517714030e-09 1s 1s 517719110e-09 1s 1s 517721950e-09 0s 0s 517724270e-09 1s 1s 517729390e-09 1s 1s 517732190e-09 0s 0s 517734510e-09 1s 1s 517739670e-09 1s 1s 517742430e-09 0s 0s 517744750e-09 1s 1s 517749950e-09 1s 1s 517752670e-09 0s 0s 517754990e-09 1s 1s 517760230e-09 1s 1s 517762910e-09 0s 0s 517765230e-09 1s 1s 517770510e-09 1s 1s 517773150e-09 0s 0s 517775470e-09 1s 1s 517780790e-09 1s 1s 517783390e-09 0s 0s 517785710e-09 1s 1s 517791070e-09 1s 1s 517793630e-09 0s 0s 517795950e-09 1s 1s 517801350e-09 1s 1s 517803870e-09 0s 0s 517806190e-09 1s 1s 517811630e-09 1s 1s 517814110e-09 0s 0s 517816430e-09 1s 1s 517821910e-09 1s 1s 517824350e-09 0s 0s 517826670e-09 1s 1s 517832190e-09 1s 1s 517834590e-09 0s 0s 517836910e-09 1s 1s 517842470e-09 1s 1s 517844830e-09 0s 0s 517847150e-09 1s 1s 517852750e-09 1s 1s 517855070e-09 0s 0s 517857390e-09 1s 1s 517863030e-09 1s 1s 517865310e-09 0s 0s 517867630e-09 1s 1s 517873310e-09 1s 1s 517875550e-09 0s 0s 517877870e-09 1s 1s 517883590e-09 1s 1s 517885790e-09 0s 0s 517888110e-09 1s 1s 517893870e-09 1s 1s 517896030e-09 0s 0s 517898350e-09 1s 1s 517904150e-09 1s 1s 517906270e-09 0s 0s 517908590e-09 1s 1s 517914430e-09 1s 1s 517916510e-09 0s 0s 517918830e-09 1s 1s 517924710e-09 1s 1s 517926750e-09 0s 0s 517929070e-09 1s 1s 517934990e-09 1s 1s 517936990e-09 0s 0s 517939310e-09 1s 1s 517945270e-09 1s 1s 517947230e-09 0s 0s 517949550e-09 1s 1s 517955550e-09 1s 1s 517957470e-09 0s 0s 517959790e-09 1s 1s 517965830e-09 1s 1s 517967710e-09 0s 0s 517970030e-09 1s 1s 517976110e-09 1s 1s 517977950e-09 0s 0s 517980270e-09 1s 1s 517986390e-09 1s 1s 517988190e-09 0s 0s 517990510e-09 1s 1s 517996670e-09 1s 1s 517998430e-09 0s 0s 518000750e-09 1s 1s 518006950e-09 1s 1s 518008670e-09 0s 0s 518010990e-09 1s 1s 518017230e-09 1s 1s 518018910e-09 0s 0s 518021230e-09 1s 1s 518027510e-09 1s 1s 518029150e-09 0s 0s 518031470e-09 1s 1s 518037790e-09 1s 1s 518039390e-09 0s 0s 518041710e-09 1s 1s 518048070e-09 1s 1s 518049630e-09 0s 0s 518051950e-09 1s 1s 518058350e-09 1s 1s 518059870e-09 0s 0s 518062190e-09 1s 1s 518068630e-09 1s 1s 518070110e-09 0s 0s 518072430e-09 1s 1s 518078910e-09 1s 1s 518080350e-09 0s 0s 518082670e-09 1s 1s 518089190e-09 1s 1s 518090590e-09 0s 0s 518092910e-09 1s 1s 518099470e-09 1s 1s 518100830e-09 0s 0s 518103150e-09 1s 1s 518109750e-09 1s 1s 518111070e-09 0s 0s 518113390e-09 1s 1s 518120030e-09 1s 1s 518121310e-09 0s 0s 518123630e-09 1s 1s 518130310e-09 1s 1s 518131550e-09 0s 0s 518133870e-09 1s 1s 518140590e-09 1s 1s 518141790e-09 0s 0s 518144110e-09 1s 1s 518150870e-09 1s 1s 518152030e-09 0s 0s 518154350e-09 1s 1s 518161150e-09 1s 1s 518162270e-09 0s 0s 518164590e-09 1s 1s 518171430e-09 1s 1s 518172510e-09 0s 0s 518174830e-09 1s 1s 518181710e-09 1s 1s 518182750e-09 0s 0s 518185070e-09 1s 1s 518191990e-09 1s 1s 518192990e-09 0s 0s 518195310e-09 1s 1s 518202270e-09 1s 1s 518203230e-09 0s 0s 518205550e-09 1s 1s 518212550e-09 1s 1s 518213470e-09 0s 0s 518215790e-09 1s 1s 518222830e-09 1s 1s 518223710e-09 0s 0s 518226030e-09 1s 1s 518233110e-09 1s 1s 518233950e-09 0s 0s 518236270e-09 1s 1s 518243390e-09 1s 1s 518244190e-09 0s 0s 518246510e-09 1s 1s 518253670e-09 1s 1s 518254430e-09 0s 0s 518256750e-09 1s 1s 518263950e-09 1s 1s 518264670e-09 0s 0s 518266990e-09 1s 1s 518274230e-09 1s 1s 518274910e-09 0s 0s 518277230e-09 1s 1s 518284510e-09 1s 1s 518285150e-09 0s 0s 518287470e-09 1s 1s 518294790e-09 1s 1s 518295390e-09 0s 0s 518297710e-09 1s 1s 518305070e-09 1s 1s 518305630e-09 0s 0s 518307950e-09 1s 1s 518315350e-09 1s 1s 518315870e-09 0s 0s 518318190e-09 1s 1s 518325630e-09 1s 1s 518326110e-09 0s 0s 518328430e-09 1s 1s 518335910e-09 1s 1s 518336350e-09 0s 0s 518338670e-09 1s 1s 518346190e-09 1s 1s 518346590e-09 0s 0s 518348910e-09 1s 1s 518356470e-09 1s 1s 518356830e-09 0s 0s 518359150e-09 1s 1s 518366750e-09 1s 1s 518367070e-09 0s 0s 518369390e-09 1s 1s 518377030e-09 1s 1s 518377310e-09 0s 0s 518379630e-09 1s 1s 518387310e-09 1s 1s 518387550e-09 0s 0s 518389870e-09 1s 1s 518397590e-09 1s 1s 518397790e-09 0s 0s 518400110e-09 1s 1s 518407870e-09 1s 1s 518408030e-09 0s 0s 518410350e-09 1s 1s 518418150e-09 1s 1s 518418270e-09 0s 0s 518420590e-09 1s 1s 518428430e-09 1s 1s 518428510e-09 0s 0s 518430830e-09 1s 1s 518438710e-09 1s 1s 518438750e-09 0s 0s 518441070e-09 1s 1s 518448990e-09 0s 0s 518451310e-09 1s 1s 518459230e-09 0s 0s 518459270e-09 0s 0s 518461550e-09 1s 1s 518469470e-09 0s 0s 518469550e-09 0s 0s 518471790e-09 1s 1s 518479710e-09 0s 0s 518479830e-09 0s 0s 518482030e-09 1s 1s 518489950e-09 0s 0s 518490110e-09 0s 0s 518492270e-09 1s 1s 518500190e-09 0s 0s 518500390e-09 0s 0s 518502510e-09 1s 1s 518510430e-09 0s 0s 518510670e-09 0s 0s 518512750e-09 1s 1s 518520670e-09 0s 0s 518520950e-09 0s 0s 518522990e-09 1s 1s 518530910e-09 0s 0s 518531230e-09 0s 0s 518533230e-09 1s 1s 518541150e-09 0s 0s 518541510e-09 0s 0s 518543470e-09 1s 1s 518551390e-09 0s 0s 518551790e-09 0s 0s 518553710e-09 1s 1s 518561630e-09 0s 0s 518562070e-09 0s 0s 518563950e-09 1s 1s 518571870e-09 0s 0s 518572350e-09 0s 0s 518574190e-09 1s 1s 518582110e-09 0s 0s 518582630e-09 0s 0s 518584430e-09 1s 1s 518592350e-09 0s 0s 518592910e-09 0s 0s 518594670e-09 1s 1s 518602590e-09 0s 0s 518603190e-09 0s 0s 518604910e-09 1s 1s 518612830e-09 0s 0s 518613470e-09 0s 0s 518615150e-09 1s 1s 518623070e-09 0s 0s 518623750e-09 0s 0s 518625390e-09 1s 1s 518633310e-09 0s 0s 518634030e-09 0s 0s 518635630e-09 1s 1s 518643550e-09 0s 0s 518644310e-09 0s 0s 518645870e-09 1s 1s 518653790e-09 0s 0s 518654590e-09 0s 0s 518656110e-09 1s 1s 518664030e-09 0s 0s 518664870e-09 0s 0s 518666350e-09 1s 1s 518674270e-09 0s 0s 518675150e-09 0s 0s 518676590e-09 1s 1s 518684510e-09 0s 0s 518685430e-09 0s 0s 518686830e-09 1s 1s 518694750e-09 0s 0s 518695710e-09 0s 0s 518697070e-09 1s 1s 518704990e-09 0s 0s 518705990e-09 0s 0s 518707310e-09 1s 1s 518715230e-09 0s 0s 518716270e-09 0s 0s 518717550e-09 1s 1s 518725470e-09 0s 0s 518726550e-09 0s 0s 518727790e-09 1s 1s 518735710e-09 0s 0s 518736830e-09 0s 0s 518738030e-09 1s 1s 518745950e-09 0s 0s 518747110e-09 0s 0s 518748270e-09 1s 1s 518756190e-09 0s 0s 518757390e-09 0s 0s 518758510e-09 1s 1s 518766430e-09 0s 0s 518767670e-09 0s 0s 518768750e-09 1s 1s 518776670e-09 0s 0s 518777950e-09 0s 0s 518778990e-09 1s 1s 518786910e-09 0s 0s 518788230e-09 0s 0s 518789230e-09 1s 1s 518797150e-09 0s 0s 518798510e-09 0s 0s 518799470e-09 1s 1s 518807390e-09 0s 0s 518808790e-09 0s 0s 518809710e-09 1s 1s 518817630e-09 0s 0s 518819070e-09 0s 0s 518819950e-09 1s 1s 518827870e-09 0s 0s 518829350e-09 0s 0s 518830190e-09 1s 1s 518838110e-09 0s 0s 518839630e-09 0s 0s 518840430e-09 1s 1s 518848350e-09 0s 0s 518849910e-09 0s 0s 518850670e-09 1s 1s 518858590e-09 0s 0s 518860190e-09 0s 0s 518860910e-09 1s 1s 518868830e-09 0s 0s 518870470e-09 0s 0s 518871150e-09 1s 1s 518879070e-09 0s 0s 518880750e-09 0s 0s 518881390e-09 1s 1s 518889310e-09 0s 0s 518891030e-09 0s 0s 518891630e-09 1s 1s 518899550e-09 0s 0s 518901310e-09 0s 0s 518901870e-09 1s 1s 518909790e-09 0s 0s 518911590e-09 0s 0s 518912110e-09 1s 1s 518920030e-09 0s 0s 518921870e-09 0s 0s 518922350e-09 1s 1s 518930270e-09 0s 0s 518932150e-09 0s 0s 518932590e-09 1s 1s 518940510e-09 0s 0s 518942430e-09 0s 0s 518942830e-09 1s 1s 518950750e-09 0s 0s 518952710e-09 0s 0s 518953070e-09 1s 1s 518960990e-09 0s 0s 518962990e-09 0s 0s 518963310e-09 1s 1s 518971230e-09 0s 0s 518973270e-09 0s 0s 518973550e-09 1s 1s 518981470e-09 0s 0s 518983550e-09 0s 0s 518983790e-09 1s 1s 518991710e-09 0s 0s 518993830e-09 0s 0s 518994030e-09 1s 1s 519001950e-09 0s 0s 519004110e-09 0s 0s 519004270e-09 1s 1s 519012190e-09 0s 0s 519014390e-09 0s 0s 519014510e-09 1s 1s 519022430e-09 0s 0s 519024670e-09 0s 0s 519024750e-09 1s 1s 519032670e-09 0s 0s 519034950e-09 0s 0s 519034990e-09 1s 1s 519042910e-09 0s 0s 519045230e-09 1s 1s 519045270e-09 1s 1s 519053190e-09 0s 0s 519055470e-09 1s 1s 519055550e-09 1s 1s 519063430e-09 0s 0s 519065710e-09 1s 1s 519065830e-09 1s 1s 519073670e-09 0s 0s 519075950e-09 1s 1s 519076110e-09 1s 1s 519083910e-09 0s 0s 519086190e-09 1s 1s 519086390e-09 1s 1s 519094150e-09 0s 0s 519096430e-09 1s 1s 519096670e-09 1s 1s 519104390e-09 0s 0s 519106670e-09 1s 1s 519106950e-09 1s 1s 519114630e-09 0s 0s 519116910e-09 1s 1s 519117230e-09 1s 1s 519124870e-09 0s 0s 519127150e-09 1s 1s 519127510e-09 1s 1s 519135110e-09 0s 0s 519137390e-09 1s 1s 519137790e-09 1s 1s 519145350e-09 0s 0s 519147630e-09 1s 1s 519148070e-09 1s 1s 519155590e-09 0s 0s 519157870e-09 1s 1s 519158350e-09 1s 1s 519165830e-09 0s 0s 519168110e-09 1s 1s 519168630e-09 1s 1s 519176070e-09 0s 0s 519178350e-09 1s 1s 519178910e-09 1s 1s 519186310e-09 0s 0s 519188590e-09 1s 1s 519189190e-09 1s 1s 519196550e-09 0s 0s 519198830e-09 1s 1s 519199470e-09 1s 1s 519206790e-09 0s 0s 519209070e-09 1s 1s 519209750e-09 1s 1s 519217030e-09 0s 0s 519219310e-09 1s 1s 519220030e-09 1s 1s 519227270e-09 0s 0s 519229550e-09 1s 1s 519230310e-09 1s 1s 519237510e-09 0s 0s 519239790e-09 1s 1s 519240590e-09 1s 1s 519247750e-09 0s 0s 519250030e-09 1s 1s 519250870e-09 1s 1s 519257990e-09 0s 0s 519260270e-09 1s 1s 519261150e-09 1s 1s 519268230e-09 0s 0s 519270510e-09 1s 1s 519271430e-09 1s 1s 519278470e-09 0s 0s 519280750e-09 1s 1s 519281710e-09 1s 1s 519288710e-09 0s 0s 519290990e-09 1s 1s 519291990e-09 1s 1s 519298950e-09 0s 0s 519301230e-09 1s 1s 519302270e-09 1s 1s 519309190e-09 0s 0s 519311470e-09 1s 1s 519312550e-09 1s 1s 519319430e-09 0s 0s 519321710e-09 1s 1s 519322830e-09 1s 1s 519329670e-09 0s 0s 519331950e-09 1s 1s 519333110e-09 1s 1s 519339910e-09 0s 0s 519342190e-09 1s 1s 519343390e-09 1s 1s 519350150e-09 0s 0s 519352430e-09 1s 1s 519353670e-09 1s 1s 519360390e-09 0s 0s 519362670e-09 1s 1s 519363950e-09 1s 1s 519370630e-09 0s 0s 519372910e-09 1s 1s 519374230e-09 1s 1s 519380870e-09 0s 0s 519383150e-09 1s 1s 519384510e-09 1s 1s 519391110e-09 0s 0s 519393390e-09 1s 1s 519394790e-09 1s 1s 519401350e-09 0s 0s 519403630e-09 1s 1s 519405070e-09 1s 1s 519411590e-09 0s 0s 519413870e-09 1s 1s 519415350e-09 1s 1s 519421830e-09 0s 0s 519424110e-09 1s 1s 519425630e-09 1s 1s 519432070e-09 0s 0s 519434350e-09 1s 1s 519435910e-09 1s 1s 519442310e-09 0s 0s 519444590e-09 1s 1s 519446190e-09 1s 1s 519452550e-09 0s 0s 519454830e-09 1s 1s 519456470e-09 1s 1s 519462790e-09 0s 0s 519465070e-09 1s 1s 519466750e-09 1s 1s 519473030e-09 0s 0s 519475310e-09 1s 1s 519477030e-09 1s 1s 519483270e-09 0s 0s 519485550e-09 1s 1s 519487310e-09 1s 1s 519493510e-09 0s 0s 519495790e-09 1s 1s 519497590e-09 1s 1s 519503750e-09 0s 0s 519506030e-09 1s 1s 519507870e-09 1s 1s 519513990e-09 0s 0s 519516270e-09 1s 1s 519518150e-09 1s 1s 519524230e-09 0s 0s 519526510e-09 1s 1s 519528430e-09 1s 1s 519534470e-09 0s 0s 519536750e-09 1s 1s 519538710e-09 1s 1s 519544710e-09 0s 0s 519546990e-09 1s 1s 519548990e-09 1s 1s 519554950e-09 0s 0s 519557230e-09 1s 1s 519559270e-09 1s 1s 519565190e-09 0s 0s 519567470e-09 1s 1s 519569550e-09 1s 1s 519575430e-09 0s 0s 519577710e-09 1s 1s 519579830e-09 1s 1s 519585670e-09 0s 0s 519587950e-09 1s 1s 519590110e-09 1s 1s 519595910e-09 0s 0s 519598190e-09 1s 1s 519600390e-09 1s 1s 519606150e-09 0s 0s 519608430e-09 1s 1s 519610670e-09 1s 1s 519616390e-09 0s 0s 519618670e-09 1s 1s 519620950e-09 1s 1s 519626630e-09 0s 0s 519628910e-09 1s 1s 519631230e-09 1s 1s 519636870e-09 0s 0s 519639150e-09 1s 1s 519641510e-09 1s 1s 519647110e-09 0s 0s 519649390e-09 1s 1s 519651790e-09 1s 1s 519657350e-09 0s 0s 519659630e-09 1s 1s 519662070e-09 1s 1s 519667590e-09 0s 0s 519669870e-09 1s 1s 519672350e-09 1s 1s 519677830e-09 0s 0s 519680110e-09 1s 1s 519682630e-09 1s 1s 519688070e-09 0s 0s 519690350e-09 1s 1s 519692910e-09 1s 1s 519698310e-09 0s 0s 519700590e-09 1s 1s 519703190e-09 1s 1s 519708550e-09 0s 0s 519710830e-09 1s 1s 519713470e-09 1s 1s 519718790e-09 0s 0s 519721070e-09 1s 1s 519723750e-09 1s 1s 519729030e-09 0s 0s 519731310e-09 1s 1s 519734030e-09 1s 1s 519739270e-09 0s 0s 519741550e-09 1s 1s 519744310e-09 1s 1s 519749510e-09 0s 0s 519751790e-09 1s 1s 519754590e-09 1s 1s 519759750e-09 0s 0s 519762030e-09 1s 1s 519764870e-09 1s 1s 519769990e-09 0s 0s 519772270e-09 1s 1s 519775150e-09 1s 1s 519780230e-09 0s 0s 519782510e-09 1s 1s 519785430e-09 1s 1s 519790470e-09 0s 0s 519792750e-09 1s 1s 519795710e-09 1s 1s 519800710e-09 0s 0s 519802990e-09 1s 1s 519805990e-09 1s 1s 519810950e-09 0s 0s 519813230e-09 1s 1s 519816270e-09 1s 1s 519821190e-09 0s 0s 519823470e-09 1s 1s 519826550e-09 1s 1s 519831430e-09 0s 0s 519833710e-09 1s 1s 519836830e-09 1s 1s 519841670e-09 0s 0s 519843950e-09 1s 1s 519847110e-09 1s 1s 519851910e-09 0s 0s 519854190e-09 1s 1s 519857390e-09 1s 1s 519862150e-09 0s 0s 519864430e-09 1s 1s 519867670e-09 1s 1s 519872390e-09 0s 0s 519874670e-09 1s 1s 519877950e-09 1s 1s 519882630e-09 0s 0s 519884910e-09 1s 1s 519888230e-09 1s 1s 519892870e-09 0s 0s 519895150e-09 1s 1s 519898510e-09 1s 1s 519903110e-09 0s 0s 519905390e-09 1s 1s 519908790e-09 1s 1s 519913350e-09 0s 0s 519915630e-09 1s 1s 519919070e-09 1s 1s 519923590e-09 0s 0s 519925870e-09 1s 1s 519929350e-09 1s 1s 519933830e-09 0s 0s 519936110e-09 1s 1s 519939630e-09 1s 1s 519944070e-09 0s 0s 519946350e-09 1s 1s 519949910e-09 1s 1s 519954310e-09 0s 0s 519956590e-09 1s 1s 519960190e-09 1s 1s 519964550e-09 0s 0s 519966830e-09 1s 1s 519970470e-09 1s 1s 519974790e-09 0s 0s 519977070e-09 1s 1s 519980750e-09 1s 1s 519985030e-09 0s 0s 519987310e-09 1s 1s 519991030e-09 1s 1s 519995270e-09 0s 0s 519997550e-09 1s 1s 520001310e-09 1s 1s 520005510e-09 0s 0s 520007790e-09 1s 1s 520011590e-09 1s 1s 520015750e-09 0s 0s 520018030e-09 1s 1s 520021870e-09 1s 1s 520025990e-09 0s 0s 520028270e-09 1s 1s 520032150e-09 1s 1s 520036230e-09 0s 0s 520038510e-09 1s 1s 520042430e-09 1s 1s 520046470e-09 0s 0s 520048750e-09 1s 1s 520052710e-09 1s 1s 520056710e-09 0s 0s 520058990e-09 1s 1s 520062990e-09 1s 1s 520066950e-09 0s 0s 520069230e-09 1s 1s 520073270e-09 1s 1s 520077190e-09 0s 0s 520079470e-09 1s 1s 520083550e-09 1s 1s 520087430e-09 0s 0s 520089710e-09 1s 1s 520093830e-09 1s 1s 520097670e-09 0s 0s 520099950e-09 1s 1s 520104110e-09 1s 1s 520107910e-09 0s 0s 520110190e-09 1s 1s 520114390e-09 1s 1s 520118150e-09 0s 0s 520120430e-09 1s 1s 520124670e-09 1s 1s 520128390e-09 0s 0s 520130670e-09 1s 1s 520134950e-09 1s 1s 520138630e-09 0s 0s 520140910e-09 1s 1s 520145230e-09 1s 1s 520148870e-09 0s 0s 520151150e-09 1s 1s 520155510e-09 1s 1s 520159110e-09 0s 0s 520161390e-09 1s 1s 520165790e-09 1s 1s 520169350e-09 0s 0s 520171630e-09 1s 1s 520176070e-09 1s 1s 520179590e-09 0s 0s 520181870e-09 1s 1s 520186350e-09 1s 1s 520189830e-09 0s 0s 520192110e-09 1s 1s 520196630e-09 1s 1s 520200070e-09 0s 0s 520202350e-09 1s 1s 520206910e-09 1s 1s 520210310e-09 0s 0s 520212590e-09 1s 1s 520217190e-09 1s 1s 520220550e-09 0s 0s 520222830e-09 1s 1s 520227470e-09 1s 1s 520230790e-09 0s 0s 520233070e-09 1s 1s 520237750e-09 1s 1s 520241030e-09 0s 0s 520243310e-09 1s 1s 520248030e-09 1s 1s 520251270e-09 0s 0s 520253550e-09 1s 1s 520258310e-09 1s 1s 520261510e-09 0s 0s 520263790e-09 1s 1s 520268590e-09 1s 1s 520271750e-09 0s 0s 520274030e-09 1s 1s 520278870e-09 1s 1s 520281990e-09 0s 0s 520284270e-09 1s 1s 520289150e-09 1s 1s 520292230e-09 0s 0s 520294510e-09 1s 1s 520299430e-09 1s 1s 520302470e-09 0s 0s 520304750e-09 1s 1s 520309710e-09 1s 1s 520312710e-09 0s 0s 520314990e-09 1s 1s 520319990e-09 1s 1s 520322950e-09 0s 0s 520325230e-09 1s 1s 520330270e-09 1s 1s 520333190e-09 0s 0s 520335470e-09 1s 1s 520340550e-09 1s 1s 520343430e-09 0s 0s 520345710e-09 1s 1s 520350830e-09 1s 1s 520353670e-09 0s 0s 520355950e-09 1s 1s 520361110e-09 1s 1s 520363910e-09 0s 0s 520366190e-09 1s 1s 520371390e-09 1s 1s 520374150e-09 0s 0s 520376430e-09 1s 1s 520381670e-09 1s 1s 520384390e-09 0s 0s 520386670e-09 1s 1s 520391950e-09 1s 1s 520394630e-09 0s 0s 520396910e-09 1s 1s 520402230e-09 1s 1s 520404870e-09 0s 0s 520407150e-09 1s 1s 520412510e-09 1s 1s 520415110e-09 0s 0s 520417390e-09 1s 1s 520422790e-09 1s 1s 520425350e-09 0s 0s 520427630e-09 1s 1s 520433070e-09 1s 1s 520435590e-09 0s 0s 520437870e-09 1s 1s 520443350e-09 1s 1s 520445830e-09 0s 0s 520448110e-09 1s 1s 520453630e-09 1s 1s 520456070e-09 0s 0s 520458350e-09 1s 1s 520463910e-09 1s 1s 520466310e-09 0s 0s 520468590e-09 1s 1s 520474190e-09 1s 1s 520476550e-09 0s 0s 520478830e-09 1s 1s 520484470e-09 1s 1s 520486790e-09 0s 0s 520489070e-09 1s 1s 520494750e-09 1s 1s 520497030e-09 0s 0s 520499310e-09 1s 1s 520505030e-09 1s 1s 520507270e-09 0s 0s 520509550e-09 1s 1s 520515310e-09 1s 1s 520517510e-09 0s 0s 520519790e-09 1s 1s 520525590e-09 1s 1s 520527750e-09 0s 0s 520530030e-09 1s 1s 520535870e-09 1s 1s 520537990e-09 0s 0s 520540270e-09 1s 1s 520546150e-09 1s 1s 520548230e-09 0s 0s 520550510e-09 1s 1s 520556430e-09 1s 1s 520558470e-09 0s 0s 520560750e-09 1s 1s 520566710e-09 1s 1s 520568710e-09 0s 0s 520570990e-09 1s 1s 520576990e-09 1s 1s 520578950e-09 0s 0s 520581230e-09 1s 1s 520587270e-09 1s 1s 520589190e-09 0s 0s 520591470e-09 1s 1s 520597550e-09 1s 1s 520599430e-09 0s 0s 520601710e-09 1s 1s 520607830e-09 1s 1s 520609670e-09 0s 0s 520611950e-09 1s 1s 520618110e-09 1s 1s 520619910e-09 0s 0s 520622190e-09 1s 1s 520628390e-09 1s 1s 520630150e-09 0s 0s 520632430e-09 1s 1s 520638670e-09 1s 1s 520640390e-09 0s 0s 520642670e-09 1s 1s 520648950e-09 1s 1s 520650630e-09 0s 0s 520652910e-09 1s 1s 520659230e-09 1s 1s 520660870e-09 0s 0s 520663150e-09 1s 1s 520669510e-09 1s 1s 520671110e-09 0s 0s 520673390e-09 1s 1s 520679790e-09 1s 1s 520681350e-09 0s 0s 520683630e-09 1s 1s 520690070e-09 1s 1s 520691590e-09 0s 0s 520693870e-09 1s 1s 520700350e-09 1s 1s 520701830e-09 0s 0s 520704110e-09 1s 1s 520710630e-09 1s 1s 520712070e-09 0s 0s 520714350e-09 1s 1s 520720910e-09 1s 1s 520722310e-09 0s 0s 520724590e-09 1s 1s 520731190e-09 1s 1s 520732550e-09 0s 0s 520734830e-09 1s 1s 520741470e-09 1s 1s 520742790e-09 0s 0s 520745070e-09 1s 1s 520751750e-09 1s 1s 520753030e-09 0s 0s 520755310e-09 1s 1s 520762030e-09 1s 1s 520763270e-09 0s 0s 520765550e-09 1s 1s 520772310e-09 1s 1s 520773510e-09 0s 0s 520775790e-09 1s 1s 520782590e-09 1s 1s 520783750e-09 0s 0s 520786030e-09 1s 1s 520792870e-09 1s 1s 520793990e-09 0s 0s 520796270e-09 1s 1s 520803150e-09 1s 1s 520804230e-09 0s 0s 520806510e-09 1s 1s 520813430e-09 1s 1s 520814470e-09 0s 0s 520816750e-09 1s 1s 520823710e-09 1s 1s 520824710e-09 0s 0s 520826990e-09 1s 1s 520833990e-09 1s 1s 520834950e-09 0s 0s 520837230e-09 1s 1s 520844270e-09 1s 1s 520845190e-09 0s 0s 520847470e-09 1s 1s 520854550e-09 1s 1s 520855430e-09 0s 0s 520857710e-09 1s 1s 520864830e-09 1s 1s 520865670e-09 0s 0s 520867950e-09 1s 1s 520875110e-09 1s 1s 520875910e-09 0s 0s 520878190e-09 1s 1s 520885390e-09 1s 1s 520886150e-09 0s 0s 520888430e-09 1s 1s 520895670e-09 1s 1s 520896390e-09 0s 0s 520898670e-09 1s 1s 520905950e-09 1s 1s 520906630e-09 0s 0s 520908910e-09 1s 1s 520916230e-09 1s 1s 520916870e-09 0s 0s 520919150e-09 1s 1s 520926510e-09 1s 1s 520927110e-09 0s 0s 520929390e-09 1s 1s 520936790e-09 1s 1s 520937350e-09 0s 0s 520939630e-09 1s 1s 520947070e-09 1s 1s 520947590e-09 0s 0s 520949870e-09 1s 1s 520957350e-09 1s 1s 520957830e-09 0s 0s 520960110e-09 1s 1s 520967630e-09 1s 1s 520968070e-09 0s 0s 520970350e-09 1s 1s 520977910e-09 1s 1s 520978310e-09 0s 0s 520980590e-09 1s 1s 520988190e-09 1s 1s 520988550e-09 0s 0s 520990830e-09 1s 1s 520998470e-09 1s 1s 520998790e-09 0s 0s 521001070e-09 1s 1s 521008750e-09 1s 1s 521009030e-09 0s 0s 521011310e-09 1s 1s 521019030e-09 1s 1s 521019270e-09 0s 0s 521021550e-09 1s 1s 521029310e-09 1s 1s 521029510e-09 0s 0s 521031790e-09 1s 1s 521039590e-09 1s 1s 521039750e-09 0s 0s 521042030e-09 1s 1s 521049870e-09 1s 1s 521049990e-09 0s 0s 521052270e-09 1s 1s 521060150e-09 1s 1s 521060230e-09 0s 0s 521062510e-09 1s 1s 521070430e-09 1s 1s 521070470e-09 0s 0s 521072750e-09 1s 1s 521080710e-09 0s 0s 521082990e-09 1s 1s 521090950e-09 0s 0s 521090990e-09 0s 0s 521093230e-09 1s 1s 521101190e-09 0s 0s 521101270e-09 0s 0s 521103470e-09 1s 1s 521111430e-09 0s 0s 521111550e-09 0s 0s 521113710e-09 1s 1s 521121670e-09 0s 0s 521121830e-09 0s 0s 521123950e-09 1s 1s 521131910e-09 0s 0s 521132110e-09 0s 0s 521134190e-09 1s 1s 521142150e-09 0s 0s 521142390e-09 0s 0s 521144430e-09 1s 1s 521152390e-09 0s 0s 521152670e-09 0s 0s 521154670e-09 1s 1s 521162630e-09 0s 0s 521162950e-09 0s 0s 521164910e-09 1s 1s 521172870e-09 0s 0s 521173230e-09 0s 0s 521175150e-09 1s 1s 521183110e-09 0s 0s 521183510e-09 0s 0s 521185390e-09 1s 1s 521193350e-09 0s 0s 521193790e-09 0s 0s 521195630e-09 1s 1s 521203590e-09 0s 0s 521204070e-09 0s 0s 521205870e-09 1s 1s 521213830e-09 0s 0s 521214350e-09 0s 0s 521216110e-09 1s 1s 521224070e-09 0s 0s 521224630e-09 0s 0s 521226350e-09 1s 1s 521234310e-09 0s 0s 521234910e-09 0s 0s 521236590e-09 1s 1s 521244550e-09 0s 0s 521245190e-09 0s 0s 521246830e-09 1s 1s 521254790e-09 0s 0s 521255470e-09 0s 0s 521257070e-09 1s 1s 521265030e-09 0s 0s 521265750e-09 0s 0s 521267310e-09 1s 1s 521275270e-09 0s 0s 521276030e-09 0s 0s 521277550e-09 1s 1s 521285510e-09 0s 0s 521286310e-09 0s 0s 521287790e-09 1s 1s 521295750e-09 0s 0s 521296590e-09 0s 0s 521298030e-09 1s 1s 521305990e-09 0s 0s 521306870e-09 0s 0s 521308270e-09 1s 1s 521316230e-09 0s 0s 521317150e-09 0s 0s 521318510e-09 1s 1s 521326470e-09 0s 0s 521327430e-09 0s 0s 521328750e-09 1s 1s 521336710e-09 0s 0s 521337710e-09 0s 0s 521338990e-09 1s 1s 521346950e-09 0s 0s 521347990e-09 0s 0s 521349230e-09 1s 1s 521357190e-09 0s 0s 521358270e-09 0s 0s 521359470e-09 1s 1s 521367430e-09 0s 0s 521368550e-09 0s 0s 521369710e-09 1s 1s 521377670e-09 0s 0s 521378830e-09 0s 0s 521379950e-09 1s 1s 521387910e-09 0s 0s 521389110e-09 0s 0s 521390190e-09 1s 1s 521398150e-09 0s 0s 521399390e-09 0s 0s 521400430e-09 1s 1s 521408390e-09 0s 0s 521409670e-09 0s 0s 521410670e-09 1s 1s 521418630e-09 0s 0s 521419950e-09 0s 0s 521420910e-09 1s 1s 521428870e-09 0s 0s 521430230e-09 0s 0s 521431150e-09 1s 1s 521439110e-09 0s 0s 521440510e-09 0s 0s 521441390e-09 1s 1s 521449350e-09 0s 0s 521450790e-09 0s 0s 521451630e-09 1s 1s 521459590e-09 0s 0s 521461070e-09 0s 0s 521461870e-09 1s 1s 521469830e-09 0s 0s 521471350e-09 0s 0s 521472110e-09 1s 1s 521480070e-09 0s 0s 521481630e-09 0s 0s 521482350e-09 1s 1s 521490310e-09 0s 0s 521491910e-09 0s 0s 521492590e-09 1s 1s 521500550e-09 0s 0s 521502190e-09 0s 0s 521502830e-09 1s 1s 521510790e-09 0s 0s 521512470e-09 0s 0s 521513070e-09 1s 1s 521521030e-09 0s 0s 521522750e-09 0s 0s 521523310e-09 1s 1s 521531270e-09 0s 0s 521533030e-09 0s 0s 521533550e-09 1s 1s 521541510e-09 0s 0s 521543310e-09 0s 0s 521543790e-09 1s 1s 521551750e-09 0s 0s 521553590e-09 0s 0s 521554030e-09 1s 1s 521561990e-09 0s 0s 521563870e-09 0s 0s 521564270e-09 1s 1s 521572230e-09 0s 0s 521574150e-09 0s 0s 521574510e-09 1s 1s 521582470e-09 0s 0s 521584430e-09 0s 0s 521584750e-09 1s 1s 521592710e-09 0s 0s 521594710e-09 0s 0s 521594990e-09 1s 1s 521602950e-09 0s 0s 521604990e-09 0s 0s 521605230e-09 1s 1s 521613190e-09 0s 0s 521615270e-09 0s 0s 521615470e-09 1s 1s 521623430e-09 0s 0s 521625550e-09 0s 0s 521625710e-09 1s 1s 521633670e-09 0s 0s 521635830e-09 0s 0s 521635950e-09 1s 1s 521643910e-09 0s 0s 521646110e-09 0s 0s 521646190e-09 1s 1s 521654150e-09 0s 0s 521656390e-09 0s 0s 521656430e-09 1s 1s 521664390e-09 0s 0s 521666670e-09 1s 1s 521666710e-09 1s 1s 521674670e-09 0s 0s 521676910e-09 1s 1s 521676990e-09 1s 1s 521684910e-09 0s 0s 521687150e-09 1s 1s 521687270e-09 1s 1s 521695150e-09 0s 0s 521697390e-09 1s 1s 521697550e-09 1s 1s 521705390e-09 0s 0s 521707630e-09 1s 1s 521707830e-09 1s 1s 521715630e-09 0s 0s 521717870e-09 1s 1s 521718110e-09 1s 1s 521725870e-09 0s 0s 521728110e-09 1s 1s 521728390e-09 1s 1s 521736110e-09 0s 0s 521738350e-09 1s 1s 521738670e-09 1s 1s 521746350e-09 0s 0s 521748590e-09 1s 1s 521748950e-09 1s 1s 521756590e-09 0s 0s 521758830e-09 1s 1s 521759230e-09 1s 1s 521766830e-09 0s 0s 521769070e-09 1s 1s 521769510e-09 1s 1s 521777070e-09 0s 0s 521779310e-09 1s 1s 521779790e-09 1s 1s 521787310e-09 0s 0s 521789550e-09 1s 1s 521790070e-09 1s 1s 521797550e-09 0s 0s 521799790e-09 1s 1s 521800350e-09 1s 1s 521807790e-09 0s 0s 521810030e-09 1s 1s 521810630e-09 1s 1s 521818030e-09 0s 0s 521820270e-09 1s 1s 521820910e-09 1s 1s 521828270e-09 0s 0s 521830510e-09 1s 1s 521831190e-09 1s 1s 521838510e-09 0s 0s 521840750e-09 1s 1s 521841470e-09 1s 1s 521848750e-09 0s 0s 521850990e-09 1s 1s 521851750e-09 1s 1s 521858990e-09 0s 0s 521861230e-09 1s 1s 521862030e-09 1s 1s 521869230e-09 0s 0s 521871470e-09 1s 1s 521872310e-09 1s 1s 521879470e-09 0s 0s 521881710e-09 1s 1s 521882590e-09 1s 1s 521889710e-09 0s 0s 521891950e-09 1s 1s 521892870e-09 1s 1s 521899950e-09 0s 0s 521902190e-09 1s 1s 521903150e-09 1s 1s 521910190e-09 0s 0s 521912430e-09 1s 1s 521913430e-09 1s 1s 521920430e-09 0s 0s 521922670e-09 1s 1s 521923710e-09 1s 1s 521930670e-09 0s 0s 521932910e-09 1s 1s 521933990e-09 1s 1s 521940910e-09 0s 0s 521943150e-09 1s 1s 521944270e-09 1s 1s 521951150e-09 0s 0s 521953390e-09 1s 1s 521954550e-09 1s 1s 521961390e-09 0s 0s 521963630e-09 1s 1s 521964830e-09 1s 1s 521971630e-09 0s 0s 521973870e-09 1s 1s 521975110e-09 1s 1s 521981870e-09 0s 0s 521984110e-09 1s 1s 521985390e-09 1s 1s 521992110e-09 0s 0s 521994350e-09 1s 1s 521995670e-09 1s 1s 522002350e-09 0s 0s 522004590e-09 1s 1s 522005950e-09 1s 1s 522012590e-09 0s 0s 522014830e-09 1s 1s 522016230e-09 1s 1s 522022830e-09 0s 0s 522025070e-09 1s 1s 522026510e-09 1s 1s 522033070e-09 0s 0s 522035310e-09 1s 1s 522036790e-09 1s 1s 522043310e-09 0s 0s 522045550e-09 1s 1s 522047070e-09 1s 1s 522053550e-09 0s 0s 522055790e-09 1s 1s 522057350e-09 1s 1s 522063790e-09 0s 0s 522066030e-09 1s 1s 522067630e-09 1s 1s 522074030e-09 0s 0s 522076270e-09 1s 1s 522077910e-09 1s 1s 522084270e-09 0s 0s 522086510e-09 1s 1s 522088190e-09 1s 1s 522094510e-09 0s 0s 522096750e-09 1s 1s 522098470e-09 1s 1s 522104750e-09 0s 0s 522106990e-09 1s 1s 522108750e-09 1s 1s 522114990e-09 0s 0s 522117230e-09 1s 1s 522119030e-09 1s 1s 522125230e-09 0s 0s 522127470e-09 1s 1s 522129310e-09 1s 1s 522135470e-09 0s 0s 522137710e-09 1s 1s 522139590e-09 1s 1s 522145710e-09 0s 0s 522147950e-09 1s 1s 522149870e-09 1s 1s 522155950e-09 0s 0s 522158190e-09 1s 1s 522160150e-09 1s 1s 522166190e-09 0s 0s 522168430e-09 1s 1s 522170430e-09 1s 1s 522176430e-09 0s 0s 522178670e-09 1s 1s 522180710e-09 1s 1s 522186670e-09 0s 0s 522188910e-09 1s 1s 522190990e-09 1s 1s 522196910e-09 0s 0s 522199150e-09 1s 1s 522201270e-09 1s 1s 522207150e-09 0s 0s 522209390e-09 1s 1s 522211550e-09 1s 1s 522217390e-09 0s 0s 522219630e-09 1s 1s 522221830e-09 1s 1s 522227630e-09 0s 0s 522229870e-09 1s 1s 522232110e-09 1s 1s 522237870e-09 0s 0s 522240110e-09 1s 1s 522242390e-09 1s 1s 522248110e-09 0s 0s 522250350e-09 1s 1s 522252670e-09 1s 1s 522258350e-09 0s 0s 522260590e-09 1s 1s 522262950e-09 1s 1s 522268590e-09 0s 0s 522270830e-09 1s 1s 522273230e-09 1s 1s 522278830e-09 0s 0s 522281070e-09 1s 1s 522283510e-09 1s 1s 522289070e-09 0s 0s 522291310e-09 1s 1s 522293790e-09 1s 1s 522299310e-09 0s 0s 522301550e-09 1s 1s 522304070e-09 1s 1s 522309550e-09 0s 0s 522311790e-09 1s 1s 522314350e-09 1s 1s 522319790e-09 0s 0s 522322030e-09 1s 1s 522324630e-09 1s 1s 522330030e-09 0s 0s 522332270e-09 1s 1s 522334910e-09 1s 1s 522340270e-09 0s 0s 522342510e-09 1s 1s 522345190e-09 1s 1s 522350510e-09 0s 0s 522352750e-09 1s 1s 522355470e-09 1s 1s 522360750e-09 0s 0s 522362990e-09 1s 1s 522365750e-09 1s 1s 522370990e-09 0s 0s 522373230e-09 1s 1s 522376030e-09 1s 1s 522381230e-09 0s 0s 522383470e-09 1s 1s 522386310e-09 1s 1s 522391470e-09 0s 0s 522393710e-09 1s 1s 522396590e-09 1s 1s 522401710e-09 0s 0s 522403950e-09 1s 1s 522406870e-09 1s 1s 522411950e-09 0s 0s 522414190e-09 1s 1s 522417150e-09 1s 1s 522422190e-09 0s 0s 522424430e-09 1s 1s 522427430e-09 1s 1s 522432430e-09 0s 0s 522434670e-09 1s 1s 522437710e-09 1s 1s 522442670e-09 0s 0s 522444910e-09 1s 1s 522447990e-09 1s 1s 522452910e-09 0s 0s 522455150e-09 1s 1s 522458270e-09 1s 1s 522463150e-09 0s 0s 522465390e-09 1s 1s 522468550e-09 1s 1s 522473390e-09 0s 0s 522475630e-09 1s 1s 522478830e-09 1s 1s 522483630e-09 0s 0s 522485870e-09 1s 1s 522489110e-09 1s 1s 522493870e-09 0s 0s 522496110e-09 1s 1s 522499390e-09 1s 1s 522504110e-09 0s 0s 522506350e-09 1s 1s 522509670e-09 1s 1s 522514350e-09 0s 0s 522516590e-09 1s 1s 522519950e-09 1s 1s 522524590e-09 0s 0s 522526830e-09 1s 1s 522530230e-09 1s 1s 522534830e-09 0s 0s 522537070e-09 1s 1s 522540510e-09 1s 1s 522545070e-09 0s 0s 522547310e-09 1s 1s 522550790e-09 1s 1s 522555310e-09 0s 0s 522557550e-09 1s 1s 522561070e-09 1s 1s 522565550e-09 0s 0s 522567790e-09 1s 1s 522571350e-09 1s 1s 522575790e-09 0s 0s 522578030e-09 1s 1s 522581630e-09 1s 1s 522586030e-09 0s 0s 522588270e-09 1s 1s 522591910e-09 1s 1s 522596270e-09 0s 0s 522598510e-09 1s 1s 522602190e-09 1s 1s 522606510e-09 0s 0s 522608750e-09 1s 1s 522612470e-09 1s 1s 522616750e-09 0s 0s 522618990e-09 1s 1s 522622750e-09 1s 1s 522626990e-09 0s 0s 522629230e-09 1s 1s 522633030e-09 1s 1s 522637230e-09 0s 0s 522639470e-09 1s 1s 522643310e-09 1s 1s 522647470e-09 0s 0s 522649710e-09 1s 1s 522653590e-09 1s 1s 522657710e-09 0s 0s 522659950e-09 1s 1s 522663870e-09 1s 1s 522667950e-09 0s 0s 522670190e-09 1s 1s 522674150e-09 1s 1s 522678190e-09 0s 0s 522680430e-09 1s 1s 522684430e-09 1s 1s 522688430e-09 0s 0s 522690670e-09 1s 1s 522694710e-09 1s 1s 522698670e-09 0s 0s 522700910e-09 1s 1s 522704990e-09 1s 1s 522708910e-09 0s 0s 522711150e-09 1s 1s 522715270e-09 1s 1s 522719150e-09 0s 0s 522721390e-09 1s 1s 522725550e-09 1s 1s 522729390e-09 0s 0s 522731630e-09 1s 1s 522735830e-09 1s 1s 522739630e-09 0s 0s 522741870e-09 1s 1s 522746110e-09 1s 1s 522749870e-09 0s 0s 522752110e-09 1s 1s 522756390e-09 1s 1s 522760110e-09 0s 0s 522762350e-09 1s 1s 522766670e-09 1s 1s 522770350e-09 0s 0s 522772590e-09 1s 1s 522776950e-09 1s 1s 522780590e-09 0s 0s 522782830e-09 1s 1s 522787230e-09 1s 1s 522790830e-09 0s 0s 522793070e-09 1s 1s 522797510e-09 1s 1s 522801070e-09 0s 0s 522803310e-09 1s 1s 522807790e-09 1s 1s 522811310e-09 0s 0s 522813550e-09 1s 1s 522818070e-09 1s 1s 522821550e-09 0s 0s 522823790e-09 1s 1s 522828350e-09 1s 1s 522831790e-09 0s 0s 522834030e-09 1s 1s 522838630e-09 1s 1s 522842030e-09 0s 0s 522844270e-09 1s 1s 522848910e-09 1s 1s 522852270e-09 0s 0s 522854510e-09 1s 1s 522859190e-09 1s 1s 522862510e-09 0s 0s 522864750e-09 1s 1s 522869470e-09 1s 1s 522872750e-09 0s 0s 522874990e-09 1s 1s 522879750e-09 1s 1s 522882990e-09 0s 0s 522885230e-09 1s 1s 522890030e-09 1s 1s 522893230e-09 0s 0s 522895470e-09 1s 1s 522900310e-09 1s 1s 522903470e-09 0s 0s 522905710e-09 1s 1s 522910590e-09 1s 1s 522913710e-09 0s 0s 522915950e-09 1s 1s 522920870e-09 1s 1s 522923950e-09 0s 0s 522926190e-09 1s 1s 522931150e-09 1s 1s 522934190e-09 0s 0s 522936430e-09 1s 1s 522941430e-09 1s 1s 522944430e-09 0s 0s 522946670e-09 1s 1s 522951710e-09 1s 1s 522954670e-09 0s 0s 522956910e-09 1s 1s 522961990e-09 1s 1s 522964910e-09 0s 0s 522967150e-09 1s 1s 522972270e-09 1s 1s 522975150e-09 0s 0s 522977390e-09 1s 1s 522982550e-09 1s 1s 522985390e-09 0s 0s 522987630e-09 1s 1s 522992830e-09 1s 1s 522995630e-09 0s 0s 522997870e-09 1s 1s 523003110e-09 1s 1s 523005870e-09 0s 0s 523008110e-09 1s 1s 523013390e-09 1s 1s 523016110e-09 0s 0s 523018350e-09 1s 1s 523023670e-09 1s 1s 523026350e-09 0s 0s 523028590e-09 1s 1s 523033950e-09 1s 1s 523036590e-09 0s 0s 523038830e-09 1s 1s 523044230e-09 1s 1s 523046830e-09 0s 0s 523049070e-09 1s 1s 523054510e-09 1s 1s 523057070e-09 0s 0s 523059310e-09 1s 1s 523064790e-09 1s 1s 523067310e-09 0s 0s 523069550e-09 1s 1s 523075070e-09 1s 1s 523077550e-09 0s 0s 523079790e-09 1s 1s 523085350e-09 1s 1s 523087790e-09 0s 0s 523090030e-09 1s 1s 523095630e-09 1s 1s 523098030e-09 0s 0s 523100270e-09 1s 1s 523105910e-09 1s 1s 523108270e-09 0s 0s 523110510e-09 1s 1s 523116190e-09 1s 1s 523118510e-09 0s 0s 523120750e-09 1s 1s 523126470e-09 1s 1s 523128750e-09 0s 0s 523130990e-09 1s 1s 523136750e-09 1s 1s 523138990e-09 0s 0s 523141230e-09 1s 1s 523147030e-09 1s 1s 523149230e-09 0s 0s 523151470e-09 1s 1s 523157310e-09 1s 1s 523159470e-09 0s 0s 523161710e-09 1s 1s 523167590e-09 1s 1s 523169710e-09 0s 0s 523171950e-09 1s 1s 523177870e-09 1s 1s 523179950e-09 0s 0s 523182190e-09 1s 1s 523188150e-09 1s 1s 523190190e-09 0s 0s 523192430e-09 1s 1s 523198430e-09 1s 1s 523200430e-09 0s 0s 523202670e-09 1s 1s 523208710e-09 1s 1s 523210670e-09 0s 0s 523212910e-09 1s 1s 523218990e-09 1s 1s 523220910e-09 0s 0s 523223150e-09 1s 1s 523229270e-09 1s 1s 523231150e-09 0s 0s 523233390e-09 1s 1s 523239550e-09 1s 1s 523241390e-09 0s 0s 523243630e-09 1s 1s 523249830e-09 1s 1s 523251630e-09 0s 0s 523253870e-09 1s 1s 523260110e-09 1s 1s 523261870e-09 0s 0s 523264110e-09 1s 1s 523270390e-09 1s 1s 523272110e-09 0s 0s 523274350e-09 1s 1s 523280670e-09 1s 1s 523282350e-09 0s 0s 523284590e-09 1s 1s 523290950e-09 1s 1s 523292590e-09 0s 0s 523294830e-09 1s 1s 523301230e-09 1s 1s 523302830e-09 0s 0s 523305070e-09 1s 1s 523311510e-09 1s 1s 523313070e-09 0s 0s 523315310e-09 1s 1s 523321790e-09 1s 1s 523323310e-09 0s 0s 523325550e-09 1s 1s 523332070e-09 1s 1s 523333550e-09 0s 0s 523335790e-09 1s 1s 523342350e-09 1s 1s 523343790e-09 0s 0s 523346030e-09 1s 1s 523352630e-09 1s 1s 523354030e-09 0s 0s 523356270e-09 1s 1s 523362910e-09 1s 1s 523364270e-09 0s 0s 523366510e-09 1s 1s 523373190e-09 1s 1s 523374510e-09 0s 0s 523376750e-09 1s 1s 523383470e-09 1s 1s 523384750e-09 0s 0s 523386990e-09 1s 1s 523393750e-09 1s 1s 523394990e-09 0s 0s 523397230e-09 1s 1s 523404030e-09 1s 1s 523405230e-09 0s 0s 523407470e-09 1s 1s 523414310e-09 1s 1s 523415470e-09 0s 0s 523417710e-09 1s 1s 523424590e-09 1s 1s 523425710e-09 0s 0s 523427950e-09 1s 1s 523434870e-09 1s 1s 523435950e-09 0s 0s 523438190e-09 1s 1s 523445150e-09 1s 1s 523446190e-09 0s 0s 523448430e-09 1s 1s 523455430e-09 1s 1s 523456430e-09 0s 0s 523458670e-09 1s 1s 523465710e-09 1s 1s 523466670e-09 0s 0s 523468910e-09 1s 1s 523475990e-09 1s 1s 523476910e-09 0s 0s 523479150e-09 1s 1s 523486270e-09 1s 1s 523487150e-09 0s 0s 523489390e-09 1s 1s 523496550e-09 1s 1s 523497390e-09 0s 0s 523499630e-09 1s 1s 523506830e-09 1s 1s 523507630e-09 0s 0s 523509870e-09 1s 1s 523517110e-09 1s 1s 523517870e-09 0s 0s 523520110e-09 1s 1s 523527390e-09 1s 1s 523528110e-09 0s 0s 523530350e-09 1s 1s 523537670e-09 1s 1s 523538350e-09 0s 0s 523540590e-09 1s 1s 523547950e-09 1s 1s 523548590e-09 0s 0s 523550830e-09 1s 1s 523558230e-09 1s 1s 523558830e-09 0s 0s 523561070e-09 1s 1s 523568510e-09 1s 1s 523569070e-09 0s 0s 523571310e-09 1s 1s 523578790e-09 1s 1s 523579310e-09 0s 0s 523581550e-09 1s 1s 523589070e-09 1s 1s 523589550e-09 0s 0s 523591790e-09 1s 1s 523599350e-09 1s 1s 523599790e-09 0s 0s 523602030e-09 1s 1s 523609630e-09 1s 1s 523610030e-09 0s 0s 523612270e-09 1s 1s 523619910e-09 1s 1s 523620270e-09 0s 0s 523622510e-09 1s 1s 523630190e-09 1s 1s 523630510e-09 0s 0s 523632750e-09 1s 1s 523640470e-09 1s 1s 523640750e-09 0s 0s 523642990e-09 1s 1s 523650750e-09 1s 1s 523650990e-09 0s 0s 523653230e-09 1s 1s 523661030e-09 1s 1s 523661230e-09 0s 0s 523663470e-09 1s 1s 523671310e-09 1s 1s 523671470e-09 0s 0s 523673710e-09 1s 1s 523681590e-09 1s 1s 523681710e-09 0s 0s 523683950e-09 1s 1s 523691870e-09 1s 1s 523691950e-09 0s 0s 523694190e-09 1s 1s 523702150e-09 1s 1s 523702190e-09 0s 0s 523704430e-09 1s 1s 523712430e-09 0s 0s 523714670e-09 1s 1s 523722670e-09 0s 0s 523722710e-09 0s 0s 523724910e-09 1s 1s 523732910e-09 0s 0s 523732990e-09 0s 0s 523735150e-09 1s 1s 523743150e-09 0s 0s 523743270e-09 0s 0s 523745390e-09 1s 1s 523753390e-09 0s 0s 523753550e-09 0s 0s 523755630e-09 1s 1s 523763630e-09 0s 0s 523763830e-09 0s 0s 523765870e-09 1s 1s 523773870e-09 0s 0s 523774110e-09 0s 0s 523776110e-09 1s 1s 523784110e-09 0s 0s 523784390e-09 0s 0s 523786350e-09 1s 1s 523794350e-09 0s 0s 523794670e-09 0s 0s 523796590e-09 1s 1s 523804590e-09 0s 0s 523804950e-09 0s 0s 523806830e-09 1s 1s 523814830e-09 0s 0s 523815230e-09 0s 0s 523817070e-09 1s 1s 523825070e-09 0s 0s 523825510e-09 0s 0s 523827310e-09 1s 1s 523835310e-09 0s 0s 523835790e-09 0s 0s 523837550e-09 1s 1s 523845550e-09 0s 0s 523846070e-09 0s 0s 523847790e-09 1s 1s 523855790e-09 0s 0s 523856350e-09 0s 0s 523858030e-09 1s 1s 523866030e-09 0s 0s 523866630e-09 0s 0s 523868270e-09 1s 1s 523876270e-09 0s 0s 523876910e-09 0s 0s 523878510e-09 1s 1s 523886510e-09 0s 0s 523887190e-09 0s 0s 523888750e-09 1s 1s 523896750e-09 0s 0s 523897470e-09 0s 0s 523898990e-09 1s 1s 523906990e-09 0s 0s 523907750e-09 0s 0s 523909230e-09 1s 1s 523917230e-09 0s 0s 523918030e-09 0s 0s 523919470e-09 1s 1s 523927470e-09 0s 0s 523928310e-09 0s 0s 523929710e-09 1s 1s 523937710e-09 0s 0s 523938590e-09 0s 0s 523939950e-09 1s 1s 523947950e-09 0s 0s 523948870e-09 0s 0s 523950190e-09 1s 1s 523958190e-09 0s 0s 523959150e-09 0s 0s 523960430e-09 1s 1s 523968430e-09 0s 0s 523969430e-09 0s 0s 523970670e-09 1s 1s 523978670e-09 0s 0s 523979710e-09 0s 0s 523980910e-09 1s 1s 523988910e-09 0s 0s 523989990e-09 0s 0s 523991150e-09 1s 1s 523999150e-09 0s 0s 524000270e-09 0s 0s 524001390e-09 1s 1s 524009390e-09 0s 0s 524010550e-09 0s 0s 524011630e-09 1s 1s 524019630e-09 0s 0s 524020830e-09 0s 0s 524021870e-09 1s 1s 524029870e-09 0s 0s 524031110e-09 0s 0s 524032110e-09 1s 1s 524040110e-09 0s 0s 524041390e-09 0s 0s 524042350e-09 1s 1s 524050350e-09 0s 0s 524051670e-09 0s 0s 524052590e-09 1s 1s 524060590e-09 0s 0s 524061950e-09 0s 0s 524062830e-09 1s 1s 524070830e-09 0s 0s 524072230e-09 0s 0s 524073070e-09 1s 1s 524081070e-09 0s 0s 524082510e-09 0s 0s 524083310e-09 1s 1s 524091310e-09 0s 0s 524092790e-09 0s 0s 524093550e-09 1s 1s 524101550e-09 0s 0s 524103070e-09 0s 0s 524103790e-09 1s 1s 524111790e-09 0s 0s 524113350e-09 0s 0s 524114030e-09 1s 1s 524122030e-09 0s 0s 524123630e-09 0s 0s 524124270e-09 1s 1s 524132270e-09 0s 0s 524133910e-09 0s 0s 524134510e-09 1s 1s 524142510e-09 0s 0s 524144190e-09 0s 0s 524144750e-09 1s 1s 524152750e-09 0s 0s 524154470e-09 0s 0s 524154990e-09 1s 1s 524162990e-09 0s 0s 524164750e-09 0s 0s 524165230e-09 1s 1s 524173230e-09 0s 0s 524175030e-09 0s 0s 524175470e-09 1s 1s 524183470e-09 0s 0s 524185310e-09 0s 0s 524185710e-09 1s 1s 524193710e-09 0s 0s 524195590e-09 0s 0s 524195950e-09 1s 1s 524203950e-09 0s 0s 524205870e-09 0s 0s 524206190e-09 1s 1s 524214190e-09 0s 0s 524216150e-09 0s 0s 524216430e-09 1s 1s 524224430e-09 0s 0s 524226430e-09 0s 0s 524226670e-09 1s 1s 524234670e-09 0s 0s 524236710e-09 0s 0s 524236910e-09 1s 1s 524244910e-09 0s 0s 524246990e-09 0s 0s 524247150e-09 1s 1s 524255150e-09 0s 0s 524257270e-09 0s 0s 524257390e-09 1s 1s 524265390e-09 0s 0s 524267550e-09 0s 0s 524267630e-09 1s 1s 524275630e-09 0s 0s 524277830e-09 0s 0s 524277870e-09 1s 1s 524285870e-09 0s 0s 524288110e-09 1s 1s 524288150e-09 1s 1s 524296150e-09 0s 0s 524298350e-09 1s 1s 524298430e-09 1s 1s 524306390e-09 0s 0s 524308590e-09 1s 1s 524308710e-09 1s 1s 524316630e-09 0s 0s 524318830e-09 1s 1s 524318990e-09 1s 1s 524326870e-09 0s 0s 524329070e-09 1s 1s 524329270e-09 1s 1s 524337110e-09 0s 0s 524339310e-09 1s 1s 524339550e-09 1s 1s 524347350e-09 0s 0s 524349550e-09 1s 1s 524349830e-09 1s 1s 524357590e-09 0s 0s 524359790e-09 1s 1s 524360110e-09 1s 1s 524367830e-09 0s 0s 524370030e-09 1s 1s 524370390e-09 1s 1s 524378070e-09 0s 0s 524380270e-09 1s 1s 524380670e-09 1s 1s 524388310e-09 0s 0s 524390510e-09 1s 1s 524390950e-09 1s 1s 524398550e-09 0s 0s 524400750e-09 1s 1s 524401230e-09 1s 1s 524408790e-09 0s 0s 524410990e-09 1s 1s 524411510e-09 1s 1s 524419030e-09 0s 0s 524421230e-09 1s 1s 524421790e-09 1s 1s 524429270e-09 0s 0s 524431470e-09 1s 1s 524432070e-09 1s 1s 524439510e-09 0s 0s 524441710e-09 1s 1s 524442350e-09 1s 1s 524449750e-09 0s 0s 524451950e-09 1s 1s 524452630e-09 1s 1s 524459990e-09 0s 0s 524462190e-09 1s 1s 524462910e-09 1s 1s 524470230e-09 0s 0s 524472430e-09 1s 1s 524473190e-09 1s 1s 524480470e-09 0s 0s 524482670e-09 1s 1s 524483470e-09 1s 1s 524490710e-09 0s 0s 524492910e-09 1s 1s 524493750e-09 1s 1s 524500950e-09 0s 0s 524503150e-09 1s 1s 524504030e-09 1s 1s 524511190e-09 0s 0s 524513390e-09 1s 1s 524514310e-09 1s 1s 524521430e-09 0s 0s 524523630e-09 1s 1s 524524590e-09 1s 1s 524531670e-09 0s 0s 524533870e-09 1s 1s 524534870e-09 1s 1s 524541910e-09 0s 0s 524544110e-09 1s 1s 524545150e-09 1s 1s 524552150e-09 0s 0s 524554350e-09 1s 1s 524555430e-09 1s 1s 524562390e-09 0s 0s 524564590e-09 1s 1s 524565710e-09 1s 1s 524572630e-09 0s 0s 524574830e-09 1s 1s 524575990e-09 1s 1s 524582870e-09 0s 0s 524585070e-09 1s 1s 524586270e-09 1s 1s 524593110e-09 0s 0s 524595310e-09 1s 1s 524596550e-09 1s 1s 524603350e-09 0s 0s 524605550e-09 1s 1s 524606830e-09 1s 1s 524613590e-09 0s 0s 524615790e-09 1s 1s 524617110e-09 1s 1s 524623830e-09 0s 0s 524626030e-09 1s 1s 524627390e-09 1s 1s 524634070e-09 0s 0s 524636270e-09 1s 1s 524637670e-09 1s 1s 524644310e-09 0s 0s 524646510e-09 1s 1s 524647950e-09 1s 1s 524654550e-09 0s 0s 524656750e-09 1s 1s 524658230e-09 1s 1s 524664790e-09 0s 0s 524666990e-09 1s 1s 524668510e-09 1s 1s 524675030e-09 0s 0s 524677230e-09 1s 1s 524678790e-09 1s 1s 524685270e-09 0s 0s 524687470e-09 1s 1s 524689070e-09 1s 1s 524695510e-09 0s 0s 524697710e-09 1s 1s 524699350e-09 1s 1s 524705750e-09 0s 0s 524707950e-09 1s 1s 524709630e-09 1s 1s 524715990e-09 0s 0s 524718190e-09 1s 1s 524719910e-09 1s 1s 524726230e-09 0s 0s 524728430e-09 1s 1s 524730190e-09 1s 1s 524736470e-09 0s 0s 524738670e-09 1s 1s 524740470e-09 1s 1s 524746710e-09 0s 0s 524748910e-09 1s 1s 524750750e-09 1s 1s 524756950e-09 0s 0s 524759150e-09 1s 1s 524761030e-09 1s 1s 524767190e-09 0s 0s 524769390e-09 1s 1s 524771310e-09 1s 1s 524777430e-09 0s 0s 524779630e-09 1s 1s 524781590e-09 1s 1s 524787670e-09 0s 0s 524789870e-09 1s 1s 524791870e-09 1s 1s 524797910e-09 0s 0s 524800110e-09 1s 1s 524802150e-09 1s 1s 524808150e-09 0s 0s 524810350e-09 1s 1s 524812430e-09 1s 1s 524818390e-09 0s 0s 524820590e-09 1s 1s 524822710e-09 1s 1s 524828630e-09 0s 0s 524830830e-09 1s 1s 524832990e-09 1s 1s 524838870e-09 0s 0s 524841070e-09 1s 1s 524843270e-09 1s 1s 524849110e-09 0s 0s 524851310e-09 1s 1s 524853550e-09 1s 1s 524859350e-09 0s 0s 524861550e-09 1s 1s 524863830e-09 1s 1s 524869590e-09 0s 0s 524871790e-09 1s 1s 524874110e-09 1s 1s 524879830e-09 0s 0s 524882030e-09 1s 1s 524884390e-09 1s 1s 524890070e-09 0s 0s 524892270e-09 1s 1s 524894670e-09 1s 1s 524900310e-09 0s 0s 524902510e-09 1s 1s 524904950e-09 1s 1s 524910550e-09 0s 0s 524912750e-09 1s 1s 524915230e-09 1s 1s 524920790e-09 0s 0s 524922990e-09 1s 1s 524925510e-09 1s 1s 524931030e-09 0s 0s 524933230e-09 1s 1s 524935790e-09 1s 1s 524941270e-09 0s 0s 524943470e-09 1s 1s 524946070e-09 1s 1s 524951510e-09 0s 0s 524953710e-09 1s 1s 524956350e-09 1s 1s 524961750e-09 0s 0s 524963950e-09 1s 1s 524966630e-09 1s 1s 524971990e-09 0s 0s 524974190e-09 1s 1s 524976910e-09 1s 1s 524982230e-09 0s 0s 524984430e-09 1s 1s 524987190e-09 1s 1s 524992470e-09 0s 0s 524994670e-09 1s 1s 524997470e-09 1s 1s 525002710e-09 0s 0s 525004910e-09 1s 1s 525007750e-09 1s 1s 525012950e-09 0s 0s 525015150e-09 1s 1s 525018030e-09 1s 1s 525023190e-09 0s 0s 525025390e-09 1s 1s 525028310e-09 1s 1s 525033430e-09 0s 0s 525035630e-09 1s 1s 525038590e-09 1s 1s 525043670e-09 0s 0s 525045870e-09 1s 1s 525048870e-09 1s 1s 525053910e-09 0s 0s 525056110e-09 1s 1s 525059150e-09 1s 1s 525064150e-09 0s 0s 525066350e-09 1s 1s 525069430e-09 1s 1s 525074390e-09 0s 0s 525076590e-09 1s 1s 525079710e-09 1s 1s 525084630e-09 0s 0s 525086830e-09 1s 1s 525089990e-09 1s 1s 525094870e-09 0s 0s 525097070e-09 1s 1s 525100270e-09 1s 1s 525105110e-09 0s 0s 525107310e-09 1s 1s 525110550e-09 1s 1s 525115350e-09 0s 0s 525117550e-09 1s 1s 525120830e-09 1s 1s 525125590e-09 0s 0s 525127790e-09 1s 1s 525131110e-09 1s 1s 525135830e-09 0s 0s 525138030e-09 1s 1s 525141390e-09 1s 1s 525146070e-09 0s 0s 525148270e-09 1s 1s 525151670e-09 1s 1s 525156310e-09 0s 0s 525158510e-09 1s 1s 525161950e-09 1s 1s 525166550e-09 0s 0s 525168750e-09 1s 1s 525172230e-09 1s 1s 525176790e-09 0s 0s 525178990e-09 1s 1s 525182510e-09 1s 1s 525187030e-09 0s 0s 525189230e-09 1s 1s 525192790e-09 1s 1s 525197270e-09 0s 0s 525199470e-09 1s 1s 525203070e-09 1s 1s 525207510e-09 0s 0s 525209710e-09 1s 1s 525213350e-09 1s 1s 525217750e-09 0s 0s 525219950e-09 1s 1s 525223630e-09 1s 1s 525227990e-09 0s 0s 525230190e-09 1s 1s 525233910e-09 1s 1s 525238230e-09 0s 0s 525240430e-09 1s 1s 525244190e-09 1s 1s 525248470e-09 0s 0s 525250670e-09 1s 1s 525254470e-09 1s 1s 525258710e-09 0s 0s 525260910e-09 1s 1s 525264750e-09 1s 1s 525268950e-09 0s 0s 525271150e-09 1s 1s 525275030e-09 1s 1s 525279190e-09 0s 0s 525281390e-09 1s 1s 525285310e-09 1s 1s 525289430e-09 0s 0s 525291630e-09 1s 1s 525295590e-09 1s 1s 525299670e-09 0s 0s 525301870e-09 1s 1s 525305870e-09 1s 1s 525309910e-09 0s 0s 525312110e-09 1s 1s 525316150e-09 1s 1s 525320150e-09 0s 0s 525322350e-09 1s 1s 525326430e-09 1s 1s 525330390e-09 0s 0s 525332590e-09 1s 1s 525336710e-09 1s 1s 525340630e-09 0s 0s 525342830e-09 1s 1s 525346990e-09 1s 1s 525350870e-09 0s 0s 525353070e-09 1s 1s 525357270e-09 1s 1s 525361110e-09 0s 0s 525363310e-09 1s 1s 525367550e-09 1s 1s 525371350e-09 0s 0s 525373550e-09 1s 1s 525377830e-09 1s 1s 525381590e-09 0s 0s 525383790e-09 1s 1s 525388110e-09 1s 1s 525391830e-09 0s 0s 525394030e-09 1s 1s 525398390e-09 1s 1s 525402070e-09 0s 0s 525404270e-09 1s 1s 525408670e-09 1s 1s 525412310e-09 0s 0s 525414510e-09 1s 1s 525418950e-09 1s 1s 525422550e-09 0s 0s 525424750e-09 1s 1s 525429230e-09 1s 1s 525432790e-09 0s 0s 525434990e-09 1s 1s 525439510e-09 1s 1s 525443030e-09 0s 0s 525445230e-09 1s 1s 525449790e-09 1s 1s 525453270e-09 0s 0s 525455470e-09 1s 1s 525460070e-09 1s 1s 525463510e-09 0s 0s 525465710e-09 1s 1s 525470350e-09 1s 1s 525473750e-09 0s 0s 525475950e-09 1s 1s 525480630e-09 1s 1s 525483990e-09 0s 0s 525486190e-09 1s 1s 525490910e-09 1s 1s 525494230e-09 0s 0s 525496430e-09 1s 1s 525501190e-09 1s 1s 525504470e-09 0s 0s 525506670e-09 1s 1s 525511470e-09 1s 1s 525514710e-09 0s 0s 525516910e-09 1s 1s 525521750e-09 1s 1s 525524950e-09 0s 0s 525527150e-09 1s 1s 525532030e-09 1s 1s 525535190e-09 0s 0s 525537390e-09 1s 1s 525542310e-09 1s 1s 525545430e-09 0s 0s 525547630e-09 1s 1s 525552590e-09 1s 1s 525555670e-09 0s 0s 525557870e-09 1s 1s 525562870e-09 1s 1s 525565910e-09 0s 0s 525568110e-09 1s 1s 525573150e-09 1s 1s 525576150e-09 0s 0s 525578350e-09 1s 1s 525583430e-09 1s 1s 525586390e-09 0s 0s 525588590e-09 1s 1s 525593710e-09 1s 1s 525596630e-09 0s 0s 525598830e-09 1s 1s 525603990e-09 1s 1s 525606870e-09 0s 0s 525609070e-09 1s 1s 525614270e-09 1s 1s 525617110e-09 0s 0s 525619310e-09 1s 1s 525624550e-09 1s 1s 525627350e-09 0s 0s 525629550e-09 1s 1s 525634830e-09 1s 1s 525637590e-09 0s 0s 525639790e-09 1s 1s 525645110e-09 1s 1s 525647830e-09 0s 0s 525650030e-09 1s 1s 525655390e-09 1s 1s 525658070e-09 0s 0s 525660270e-09 1s 1s 525665670e-09 1s 1s 525668310e-09 0s 0s 525670510e-09 1s 1s 525675950e-09 1s 1s 525678550e-09 0s 0s 525680750e-09 1s 1s 525686230e-09 1s 1s 525688790e-09 0s 0s 525690990e-09 1s 1s 525696510e-09 1s 1s 525699030e-09 0s 0s 525701230e-09 1s 1s 525706790e-09 1s 1s 525709270e-09 0s 0s 525711470e-09 1s 1s 525717070e-09 1s 1s 525719510e-09 0s 0s 525721710e-09 1s 1s 525727350e-09 1s 1s 525729750e-09 0s 0s 525731950e-09 1s 1s 525737630e-09 1s 1s 525739990e-09 0s 0s 525742190e-09 1s 1s 525747910e-09 1s 1s 525750230e-09 0s 0s 525752430e-09 1s 1s 525758190e-09 1s 1s 525760470e-09 0s 0s 525762670e-09 1s 1s 525768470e-09 1s 1s 525770710e-09 0s 0s 525772910e-09 1s 1s 525778750e-09 1s 1s 525780950e-09 0s 0s 525783150e-09 1s 1s 525789030e-09 1s 1s 525791190e-09 0s 0s 525793390e-09 1s 1s 525799310e-09 1s 1s 525801430e-09 0s 0s 525803630e-09 1s 1s 525809590e-09 1s 1s 525811670e-09 0s 0s 525813870e-09 1s 1s 525819870e-09 1s 1s 525821910e-09 0s 0s 525824110e-09 1s 1s 525830150e-09 1s 1s 525832150e-09 0s 0s 525834350e-09 1s 1s 525840430e-09 1s 1s 525842390e-09 0s 0s 525844590e-09 1s 1s 525850710e-09 1s 1s 525852630e-09 0s 0s 525854830e-09 1s 1s 525860990e-09 1s 1s 525862870e-09 0s 0s 525865070e-09 1s 1s 525871270e-09 1s 1s 525873110e-09 0s 0s 525875310e-09 1s 1s 525881550e-09 1s 1s 525883350e-09 0s 0s 525885550e-09 1s 1s 525891830e-09 1s 1s 525893590e-09 0s 0s 525895790e-09 1s 1s 525902110e-09 1s 1s 525903830e-09 0s 0s 525906030e-09 1s 1s 525912390e-09 1s 1s 525914070e-09 0s 0s 525916270e-09 1s 1s 525922670e-09 1s 1s 525924310e-09 0s 0s 525926510e-09 1s 1s 525932950e-09 1s 1s 525934550e-09 0s 0s 525936750e-09 1s 1s 525943230e-09 1s 1s 525944790e-09 0s 0s 525946990e-09 1s 1s 525953510e-09 1s 1s 525955030e-09 0s 0s 525957230e-09 1s 1s 525963790e-09 1s 1s 525965270e-09 0s 0s 525967470e-09 1s 1s 525974070e-09 1s 1s 525975510e-09 0s 0s 525977710e-09 1s 1s 525984350e-09 1s 1s 525985750e-09 0s 0s 525987950e-09 1s 1s 525994630e-09 1s 1s 525995990e-09 0s 0s 525998190e-09 1s 1s 526004910e-09 1s 1s 526006230e-09 0s 0s 526008430e-09 1s 1s 526015190e-09 1s 1s 526016470e-09 0s 0s 526018670e-09 1s 1s 526025470e-09 1s 1s 526026710e-09 0s 0s 526028910e-09 1s 1s 526035750e-09 1s 1s 526036950e-09 0s 0s 526039150e-09 1s 1s 526046030e-09 1s 1s 526047190e-09 0s 0s 526049390e-09 1s 1s 526056310e-09 1s 1s 526057430e-09 0s 0s 526059630e-09 1s 1s 526066590e-09 1s 1s 526067670e-09 0s 0s 526069870e-09 1s 1s 526076870e-09 1s 1s 526077910e-09 0s 0s 526080110e-09 1s 1s 526087150e-09 1s 1s 526088150e-09 0s 0s 526090350e-09 1s 1s 526097430e-09 1s 1s 526098390e-09 0s 0s 526100590e-09 1s 1s 526107710e-09 1s 1s 526108630e-09 0s 0s 526110830e-09 1s 1s 526117990e-09 1s 1s 526118870e-09 0s 0s 526121070e-09 1s 1s 526128270e-09 1s 1s 526129110e-09 0s 0s 526131310e-09 1s 1s 526138550e-09 1s 1s 526139350e-09 0s 0s 526141550e-09 1s 1s 526148830e-09 1s 1s 526149590e-09 0s 0s 526151790e-09 1s 1s 526159110e-09 1s 1s 526159830e-09 0s 0s 526162030e-09 1s 1s 526169390e-09 1s 1s 526170070e-09 0s 0s 526172270e-09 1s 1s 526179670e-09 1s 1s 526180310e-09 0s 0s 526182510e-09 1s 1s 526189950e-09 1s 1s 526190550e-09 0s 0s 526192750e-09 1s 1s 526200230e-09 1s 1s 526200790e-09 0s 0s 526202990e-09 1s 1s 526210510e-09 1s 1s 526211030e-09 0s 0s 526213230e-09 1s 1s 526220790e-09 1s 1s 526221270e-09 0s 0s 526223470e-09 1s 1s 526231070e-09 1s 1s 526231510e-09 0s 0s 526233710e-09 1s 1s 526241350e-09 1s 1s 526241750e-09 0s 0s 526243950e-09 1s 1s 526251630e-09 1s 1s 526251990e-09 0s 0s 526254190e-09 1s 1s 526261910e-09 1s 1s 526262230e-09 0s 0s 526264430e-09 1s 1s 526272190e-09 1s 1s 526272470e-09 0s 0s 526274670e-09 1s 1s 526282470e-09 1s 1s 526282710e-09 0s 0s 526284910e-09 1s 1s 526292750e-09 1s 1s 526292950e-09 0s 0s 526295150e-09 1s 1s 526303030e-09 1s 1s 526303190e-09 0s 0s 526305390e-09 1s 1s 526313310e-09 1s 1s 526313430e-09 0s 0s 526315630e-09 1s 1s 526323590e-09 1s 1s 526323670e-09 0s 0s 526325870e-09 1s 1s 526333870e-09 1s 1s 526333910e-09 0s 0s 526336110e-09 1s 1s 526344150e-09 0s 0s 526346350e-09 1s 1s 526354390e-09 0s 0s 526354430e-09 0s 0s 526356590e-09 1s 1s 526364630e-09 0s 0s 526364710e-09 0s 0s 526366830e-09 1s 1s 526374870e-09 0s 0s 526374990e-09 0s 0s 526377070e-09 1s 1s 526385110e-09 0s 0s 526385270e-09 0s 0s 526387310e-09 1s 1s 526395350e-09 0s 0s 526395550e-09 0s 0s 526397550e-09 1s 1s 526405590e-09 0s 0s 526405830e-09 0s 0s 526407790e-09 1s 1s 526415830e-09 0s 0s 526416110e-09 0s 0s 526418030e-09 1s 1s 526426070e-09 0s 0s 526426390e-09 0s 0s 526428270e-09 1s 1s 526436310e-09 0s 0s 526436670e-09 0s 0s 526438510e-09 1s 1s 526446550e-09 0s 0s 526446950e-09 0s 0s 526448750e-09 1s 1s 526456790e-09 0s 0s 526457230e-09 0s 0s 526458990e-09 1s 1s 526467030e-09 0s 0s 526467510e-09 0s 0s 526469230e-09 1s 1s 526477270e-09 0s 0s 526477790e-09 0s 0s 526479470e-09 1s 1s 526487510e-09 0s 0s 526488070e-09 0s 0s 526489710e-09 1s 1s 526497750e-09 0s 0s 526498350e-09 0s 0s 526499950e-09 1s 1s 526507990e-09 0s 0s 526508630e-09 0s 0s 526510190e-09 1s 1s 526518230e-09 0s 0s 526518910e-09 0s 0s 526520430e-09 1s 1s 526528470e-09 0s 0s 526529190e-09 0s 0s 526530670e-09 1s 1s 526538710e-09 0s 0s 526539470e-09 0s 0s 526540910e-09 1s 1s 526548950e-09 0s 0s 526549750e-09 0s 0s 526551150e-09 1s 1s 526559190e-09 0s 0s 526560030e-09 0s 0s 526561390e-09 1s 1s 526569430e-09 0s 0s 526570310e-09 0s 0s 526571630e-09 1s 1s 526579670e-09 0s 0s 526580590e-09 0s 0s 526581870e-09 1s 1s 526589910e-09 0s 0s 526590870e-09 0s 0s 526592110e-09 1s 1s 526600150e-09 0s 0s 526601150e-09 0s 0s 526602350e-09 1s 1s 526610390e-09 0s 0s 526611430e-09 0s 0s 526612590e-09 1s 1s 526620630e-09 0s 0s 526621710e-09 0s 0s 526622830e-09 1s 1s 526630870e-09 0s 0s 526631990e-09 0s 0s 526633070e-09 1s 1s 526641110e-09 0s 0s 526642270e-09 0s 0s 526643310e-09 1s 1s 526651350e-09 0s 0s 526652550e-09 0s 0s 526653550e-09 1s 1s 526661590e-09 0s 0s 526662830e-09 0s 0s 526663790e-09 1s 1s 526671830e-09 0s 0s 526673110e-09 0s 0s 526674030e-09 1s 1s 526682070e-09 0s 0s 526683390e-09 0s 0s 526684270e-09 1s 1s 526692310e-09 0s 0s 526693670e-09 0s 0s 526694510e-09 1s 1s 526702550e-09 0s 0s 526703950e-09 0s 0s 526704750e-09 1s 1s 526712790e-09 0s 0s 526714230e-09 0s 0s 526714990e-09 1s 1s 526723030e-09 0s 0s 526724510e-09 0s 0s 526725230e-09 1s 1s 526733270e-09 0s 0s 526734790e-09 0s 0s 526735470e-09 1s 1s 526743510e-09 0s 0s 526745070e-09 0s 0s 526745710e-09 1s 1s 526753750e-09 0s 0s 526755350e-09 0s 0s 526755950e-09 1s 1s 526763990e-09 0s 0s 526765630e-09 0s 0s 526766190e-09 1s 1s 526774230e-09 0s 0s 526775910e-09 0s 0s 526776430e-09 1s 1s 526784470e-09 0s 0s 526786190e-09 0s 0s 526786670e-09 1s 1s 526794710e-09 0s 0s 526796470e-09 0s 0s 526796910e-09 1s 1s 526804950e-09 0s 0s 526806750e-09 0s 0s 526807150e-09 1s 1s 526815190e-09 0s 0s 526817030e-09 0s 0s 526817390e-09 1s 1s 526825430e-09 0s 0s 526827310e-09 0s 0s 526827630e-09 1s 1s 526835670e-09 0s 0s 526837590e-09 0s 0s 526837870e-09 1s 1s 526845910e-09 0s 0s 526847870e-09 0s 0s 526848110e-09 1s 1s 526856150e-09 0s 0s 526858150e-09 0s 0s 526858350e-09 1s 1s 526866390e-09 0s 0s 526868430e-09 0s 0s 526868590e-09 1s 1s 526876630e-09 0s 0s 526878710e-09 0s 0s 526878830e-09 1s 1s 526886870e-09 0s 0s 526888990e-09 0s 0s 526889070e-09 1s 1s 526897110e-09 0s 0s 526899270e-09 0s 0s 526899310e-09 1s 1s 526907350e-09 0s 0s 526909550e-09 1s 1s 526909590e-09 1s 1s 526917630e-09 0s 0s 526919790e-09 1s 1s 526919870e-09 1s 1s 526927870e-09 0s 0s 526930030e-09 1s 1s 526930150e-09 1s 1s 526938110e-09 0s 0s 526940270e-09 1s 1s 526940430e-09 1s 1s 526948350e-09 0s 0s 526950510e-09 1s 1s 526950710e-09 1s 1s 526958590e-09 0s 0s 526960750e-09 1s 1s 526960990e-09 1s 1s 526968830e-09 0s 0s 526970990e-09 1s 1s 526971270e-09 1s 1s 526979070e-09 0s 0s 526981230e-09 1s 1s 526981550e-09 1s 1s 526989310e-09 0s 0s 526991470e-09 1s 1s 526991830e-09 1s 1s 526999550e-09 0s 0s 527001710e-09 1s 1s 527002110e-09 1s 1s 527009790e-09 0s 0s 527011950e-09 1s 1s 527012390e-09 1s 1s 527020030e-09 0s 0s 527022190e-09 1s 1s 527022670e-09 1s 1s 527030270e-09 0s 0s 527032430e-09 1s 1s 527032950e-09 1s 1s 527040510e-09 0s 0s 527042670e-09 1s 1s 527043230e-09 1s 1s 527050750e-09 0s 0s 527052910e-09 1s 1s 527053510e-09 1s 1s 527060990e-09 0s 0s 527063150e-09 1s 1s 527063790e-09 1s 1s 527071230e-09 0s 0s 527073390e-09 1s 1s 527074070e-09 1s 1s 527081470e-09 0s 0s 527083630e-09 1s 1s 527084350e-09 1s 1s 527091710e-09 0s 0s 527093870e-09 1s 1s 527094630e-09 1s 1s 527101950e-09 0s 0s 527104110e-09 1s 1s 527104910e-09 1s 1s 527112190e-09 0s 0s 527114350e-09 1s 1s 527115190e-09 1s 1s 527122430e-09 0s 0s 527124590e-09 1s 1s 527125470e-09 1s 1s 527132670e-09 0s 0s 527134830e-09 1s 1s 527135750e-09 1s 1s 527142910e-09 0s 0s 527145070e-09 1s 1s 527146030e-09 1s 1s 527153150e-09 0s 0s 527155310e-09 1s 1s 527156310e-09 1s 1s 527163390e-09 0s 0s 527165550e-09 1s 1s 527166590e-09 1s 1s 527173630e-09 0s 0s 527175790e-09 1s 1s 527176870e-09 1s 1s 527183870e-09 0s 0s 527186030e-09 1s 1s 527187150e-09 1s 1s 527194110e-09 0s 0s 527196270e-09 1s 1s 527197430e-09 1s 1s 527204350e-09 0s 0s 527206510e-09 1s 1s 527207710e-09 1s 1s 527214590e-09 0s 0s 527216750e-09 1s 1s 527217990e-09 1s 1s 527224830e-09 0s 0s 527226990e-09 1s 1s 527228270e-09 1s 1s 527235070e-09 0s 0s 527237230e-09 1s 1s 527238550e-09 1s 1s 527245310e-09 0s 0s 527247470e-09 1s 1s 527248830e-09 1s 1s 527255550e-09 0s 0s 527257710e-09 1s 1s 527259110e-09 1s 1s 527265790e-09 0s 0s 527267950e-09 1s 1s 527269390e-09 1s 1s 527276030e-09 0s 0s 527278190e-09 1s 1s 527279670e-09 1s 1s 527286270e-09 0s 0s 527288430e-09 1s 1s 527289950e-09 1s 1s 527296510e-09 0s 0s 527298670e-09 1s 1s 527300230e-09 1s 1s 527306750e-09 0s 0s 527308910e-09 1s 1s 527310510e-09 1s 1s 527316990e-09 0s 0s 527319150e-09 1s 1s 527320790e-09 1s 1s 527327230e-09 0s 0s 527329390e-09 1s 1s 527331070e-09 1s 1s 527337470e-09 0s 0s 527339630e-09 1s 1s 527341350e-09 1s 1s 527347710e-09 0s 0s 527349870e-09 1s 1s 527351630e-09 1s 1s 527357950e-09 0s 0s 527360110e-09 1s 1s 527361910e-09 1s 1s 527368190e-09 0s 0s 527370350e-09 1s 1s 527372190e-09 1s 1s 527378430e-09 0s 0s 527380590e-09 1s 1s 527382470e-09 1s 1s 527388670e-09 0s 0s 527390830e-09 1s 1s 527392750e-09 1s 1s 527398910e-09 0s 0s 527401070e-09 1s 1s 527403030e-09 1s 1s 527409150e-09 0s 0s 527411310e-09 1s 1s 527413310e-09 1s 1s 527419390e-09 0s 0s 527421550e-09 1s 1s 527423590e-09 1s 1s 527429630e-09 0s 0s 527431790e-09 1s 1s 527433870e-09 1s 1s 527439870e-09 0s 0s 527442030e-09 1s 1s 527444150e-09 1s 1s 527450110e-09 0s 0s 527452270e-09 1s 1s 527454430e-09 1s 1s 527460350e-09 0s 0s 527462510e-09 1s 1s 527464710e-09 1s 1s 527470590e-09 0s 0s 527472750e-09 1s 1s 527474990e-09 1s 1s 527480830e-09 0s 0s 527482990e-09 1s 1s 527485270e-09 1s 1s 527491070e-09 0s 0s 527493230e-09 1s 1s 527495550e-09 1s 1s 527501310e-09 0s 0s 527503470e-09 1s 1s 527505830e-09 1s 1s 527511550e-09 0s 0s 527513710e-09 1s 1s 527516110e-09 1s 1s 527521790e-09 0s 0s 527523950e-09 1s 1s 527526390e-09 1s 1s 527532030e-09 0s 0s 527534190e-09 1s 1s 527536670e-09 1s 1s 527542270e-09 0s 0s 527544430e-09 1s 1s 527546950e-09 1s 1s 527552510e-09 0s 0s 527554670e-09 1s 1s 527557230e-09 1s 1s 527562750e-09 0s 0s 527564910e-09 1s 1s 527567510e-09 1s 1s 527572990e-09 0s 0s 527575150e-09 1s 1s 527577790e-09 1s 1s 527583230e-09 0s 0s 527585390e-09 1s 1s 527588070e-09 1s 1s 527593470e-09 0s 0s 527595630e-09 1s 1s 527598350e-09 1s 1s 527603710e-09 0s 0s 527605870e-09 1s 1s 527608630e-09 1s 1s 527613950e-09 0s 0s 527616110e-09 1s 1s 527618910e-09 1s 1s 527624190e-09 0s 0s 527626350e-09 1s 1s 527629190e-09 1s 1s 527634430e-09 0s 0s 527636590e-09 1s 1s 527639470e-09 1s 1s 527644670e-09 0s 0s 527646830e-09 1s 1s 527649750e-09 1s 1s 527654910e-09 0s 0s 527657070e-09 1s 1s 527660030e-09 1s 1s 527665150e-09 0s 0s 527667310e-09 1s 1s 527670310e-09 1s 1s 527675390e-09 0s 0s 527677550e-09 1s 1s 527680590e-09 1s 1s 527685630e-09 0s 0s 527687790e-09 1s 1s 527690870e-09 1s 1s 527695870e-09 0s 0s 527698030e-09 1s 1s 527701150e-09 1s 1s 527706110e-09 0s 0s 527708270e-09 1s 1s 527711430e-09 1s 1s 527716350e-09 0s 0s 527718510e-09 1s 1s 527721710e-09 1s 1s 527726590e-09 0s 0s 527728750e-09 1s 1s 527731990e-09 1s 1s 527736830e-09 0s 0s 527738990e-09 1s 1s 527742270e-09 1s 1s 527747070e-09 0s 0s 527749230e-09 1s 1s 527752550e-09 1s 1s 527757310e-09 0s 0s 527759470e-09 1s 1s 527762830e-09 1s 1s 527767550e-09 0s 0s 527769710e-09 1s 1s 527773110e-09 1s 1s 527777790e-09 0s 0s 527779950e-09 1s 1s 527783390e-09 1s 1s 527788030e-09 0s 0s 527790190e-09 1s 1s 527793670e-09 1s 1s 527798270e-09 0s 0s 527800430e-09 1s 1s 527803950e-09 1s 1s 527808510e-09 0s 0s 527810670e-09 1s 1s 527814230e-09 1s 1s 527818750e-09 0s 0s 527820910e-09 1s 1s 527824510e-09 1s 1s 527828990e-09 0s 0s 527831150e-09 1s 1s 527834790e-09 1s 1s 527839230e-09 0s 0s 527841390e-09 1s 1s 527845070e-09 1s 1s 527849470e-09 0s 0s 527851630e-09 1s 1s 527855350e-09 1s 1s 527859710e-09 0s 0s 527861870e-09 1s 1s 527865630e-09 1s 1s 527869950e-09 0s 0s 527872110e-09 1s 1s 527875910e-09 1s 1s 527880190e-09 0s 0s 527882350e-09 1s 1s 527886190e-09 1s 1s 527890430e-09 0s 0s 527892590e-09 1s 1s 527896470e-09 1s 1s 527900670e-09 0s 0s 527902830e-09 1s 1s 527906750e-09 1s 1s 527910910e-09 0s 0s 527913070e-09 1s 1s 527917030e-09 1s 1s 527921150e-09 0s 0s 527923310e-09 1s 1s 527927310e-09 1s 1s 527931390e-09 0s 0s 527933550e-09 1s 1s 527937590e-09 1s 1s 527941630e-09 0s 0s 527943790e-09 1s 1s 527947870e-09 1s 1s 527951870e-09 0s 0s 527954030e-09 1s 1s 527958150e-09 1s 1s 527962110e-09 0s 0s 527964270e-09 1s 1s 527968430e-09 1s 1s 527972350e-09 0s 0s 527974510e-09 1s 1s 527978710e-09 1s 1s 527982590e-09 0s 0s 527984750e-09 1s 1s 527988990e-09 1s 1s 527992830e-09 0s 0s 527994990e-09 1s 1s 527999270e-09 1s 1s 528003070e-09 0s 0s 528005230e-09 1s 1s 528009550e-09 1s 1s 528013310e-09 0s 0s 528015470e-09 1s 1s 528019830e-09 1s 1s 528023550e-09 0s 0s 528025710e-09 1s 1s 528030110e-09 1s 1s 528033790e-09 0s 0s 528035950e-09 1s 1s 528040390e-09 1s 1s 528044030e-09 0s 0s 528046190e-09 1s 1s 528050670e-09 1s 1s 528054270e-09 0s 0s 528056430e-09 1s 1s 528060950e-09 1s 1s 528064510e-09 0s 0s 528066670e-09 1s 1s 528071230e-09 1s 1s 528074750e-09 0s 0s 528076910e-09 1s 1s 528081510e-09 1s 1s 528084990e-09 0s 0s 528087150e-09 1s 1s 528091790e-09 1s 1s 528095230e-09 0s 0s 528097390e-09 1s 1s 528102070e-09 1s 1s 528105470e-09 0s 0s 528107630e-09 1s 1s 528112350e-09 1s 1s 528115710e-09 0s 0s 528117870e-09 1s 1s 528122630e-09 1s 1s 528125950e-09 0s 0s 528128110e-09 1s 1s 528132910e-09 1s 1s 528136190e-09 0s 0s 528138350e-09 1s 1s 528143190e-09 1s 1s 528146430e-09 0s 0s 528148590e-09 1s 1s 528153470e-09 1s 1s 528156670e-09 0s 0s 528158830e-09 1s 1s 528163750e-09 1s 1s 528166910e-09 0s 0s 528169070e-09 1s 1s 528174030e-09 1s 1s 528177150e-09 0s 0s 528179310e-09 1s 1s 528184310e-09 1s 1s 528187390e-09 0s 0s 528189550e-09 1s 1s 528194590e-09 1s 1s 528197630e-09 0s 0s 528199790e-09 1s 1s 528204870e-09 1s 1s 528207870e-09 0s 0s 528210030e-09 1s 1s 528215150e-09 1s 1s 528218110e-09 0s 0s 528220270e-09 1s 1s 528225430e-09 1s 1s 528228350e-09 0s 0s 528230510e-09 1s 1s 528235710e-09 1s 1s 528238590e-09 0s 0s 528240750e-09 1s 1s 528245990e-09 1s 1s 528248830e-09 0s 0s 528250990e-09 1s 1s 528256270e-09 1s 1s 528259070e-09 0s 0s 528261230e-09 1s 1s 528266550e-09 1s 1s 528269310e-09 0s 0s 528271470e-09 1s 1s 528276830e-09 1s 1s 528279550e-09 0s 0s 528281710e-09 1s 1s 528287110e-09 1s 1s 528289790e-09 0s 0s 528291950e-09 1s 1s 528297390e-09 1s 1s 528300030e-09 0s 0s 528302190e-09 1s 1s 528307670e-09 1s 1s 528310270e-09 0s 0s 528312430e-09 1s 1s 528317950e-09 1s 1s 528320510e-09 0s 0s 528322670e-09 1s 1s 528328230e-09 1s 1s 528330750e-09 0s 0s 528332910e-09 1s 1s 528338510e-09 1s 1s 528340990e-09 0s 0s 528343150e-09 1s 1s 528348790e-09 1s 1s 528351230e-09 0s 0s 528353390e-09 1s 1s 528359070e-09 1s 1s 528361470e-09 0s 0s 528363630e-09 1s 1s 528369350e-09 1s 1s 528371710e-09 0s 0s 528373870e-09 1s 1s 528379630e-09 1s 1s 528381950e-09 0s 0s 528384110e-09 1s 1s 528389910e-09 1s 1s 528392190e-09 0s 0s 528394350e-09 1s 1s 528400190e-09 1s 1s 528402430e-09 0s 0s 528404590e-09 1s 1s 528410470e-09 1s 1s 528412670e-09 0s 0s 528414830e-09 1s 1s 528420750e-09 1s 1s 528422910e-09 0s 0s 528425070e-09 1s 1s 528431030e-09 1s 1s 528433150e-09 0s 0s 528435310e-09 1s 1s 528441310e-09 1s 1s 528443390e-09 0s 0s 528445550e-09 1s 1s 528451590e-09 1s 1s 528453630e-09 0s 0s 528455790e-09 1s 1s 528461870e-09 1s 1s 528463870e-09 0s 0s 528466030e-09 1s 1s 528472150e-09 1s 1s 528474110e-09 0s 0s 528476270e-09 1s 1s 528482430e-09 1s 1s 528484350e-09 0s 0s 528486510e-09 1s 1s 528492710e-09 1s 1s 528494590e-09 0s 0s 528496750e-09 1s 1s 528502990e-09 1s 1s 528504830e-09 0s 0s 528506990e-09 1s 1s 528513270e-09 1s 1s 528515070e-09 0s 0s 528517230e-09 1s 1s 528523550e-09 1s 1s 528525310e-09 0s 0s 528527470e-09 1s 1s 528533830e-09 1s 1s 528535550e-09 0s 0s 528537710e-09 1s 1s 528544110e-09 1s 1s 528545790e-09 0s 0s 528547950e-09 1s 1s 528554390e-09 1s 1s 528556030e-09 0s 0s 528558190e-09 1s 1s 528564670e-09 1s 1s 528566270e-09 0s 0s 528568430e-09 1s 1s 528574950e-09 1s 1s 528576510e-09 0s 0s 528578670e-09 1s 1s 528585230e-09 1s 1s 528586750e-09 0s 0s 528588910e-09 1s 1s 528595510e-09 1s 1s 528596990e-09 0s 0s 528599150e-09 1s 1s 528605790e-09 1s 1s 528607230e-09 0s 0s 528609390e-09 1s 1s 528616070e-09 1s 1s 528617470e-09 0s 0s 528619630e-09 1s 1s 528626350e-09 1s 1s 528627710e-09 0s 0s 528629870e-09 1s 1s 528636630e-09 1s 1s 528637950e-09 0s 0s 528640110e-09 1s 1s 528646910e-09 1s 1s 528648190e-09 0s 0s 528650350e-09 1s 1s 528657190e-09 1s 1s 528658430e-09 0s 0s 528660590e-09 1s 1s 528667470e-09 1s 1s 528668670e-09 0s 0s 528670830e-09 1s 1s 528677750e-09 1s 1s 528678910e-09 0s 0s 528681070e-09 1s 1s 528688030e-09 1s 1s 528689150e-09 0s 0s 528691310e-09 1s 1s 528698310e-09 1s 1s 528699390e-09 0s 0s 528701550e-09 1s 1s 528708590e-09 1s 1s 528709630e-09 0s 0s 528711790e-09 1s 1s 528718870e-09 1s 1s 528719870e-09 0s 0s 528722030e-09 1s 1s 528729150e-09 1s 1s 528730110e-09 0s 0s 528732270e-09 1s 1s 528739430e-09 1s 1s 528740350e-09 0s 0s 528742510e-09 1s 1s 528749710e-09 1s 1s 528750590e-09 0s 0s 528752750e-09 1s 1s 528759990e-09 1s 1s 528760830e-09 0s 0s 528762990e-09 1s 1s 528770270e-09 1s 1s 528771070e-09 0s 0s 528773230e-09 1s 1s 528780550e-09 1s 1s 528781310e-09 0s 0s 528783470e-09 1s 1s 528790830e-09 1s 1s 528791550e-09 0s 0s 528793710e-09 1s 1s 528801110e-09 1s 1s 528801790e-09 0s 0s 528803950e-09 1s 1s 528811390e-09 1s 1s 528812030e-09 0s 0s 528814190e-09 1s 1s 528821670e-09 1s 1s 528822270e-09 0s 0s 528824430e-09 1s 1s 528831950e-09 1s 1s 528832510e-09 0s 0s 528834670e-09 1s 1s 528842230e-09 1s 1s 528842750e-09 0s 0s 528844910e-09 1s 1s 528852510e-09 1s 1s 528852990e-09 0s 0s 528855150e-09 1s 1s 528862790e-09 1s 1s 528863230e-09 0s 0s 528865390e-09 1s 1s 528873070e-09 1s 1s 528873470e-09 0s 0s 528875630e-09 1s 1s 528883350e-09 1s 1s 528883710e-09 0s 0s 528885870e-09 1s 1s 528893630e-09 1s 1s 528893950e-09 0s 0s 528896110e-09 1s 1s 528903910e-09 1s 1s 528904190e-09 0s 0s 528906350e-09 1s 1s 528914190e-09 1s 1s 528914430e-09 0s 0s 528916590e-09 1s 1s 528924470e-09 1s 1s 528924670e-09 0s 0s 528926830e-09 1s 1s 528934750e-09 1s 1s 528934910e-09 0s 0s 528937070e-09 1s 1s 528945030e-09 1s 1s 528945150e-09 0s 0s 528947310e-09 1s 1s 528955310e-09 1s 1s 528955390e-09 0s 0s 528957550e-09 1s 1s 528965590e-09 1s 1s 528965630e-09 0s 0s 528967790e-09 1s 1s 528975870e-09 0s 0s 528978030e-09 1s 1s 528986110e-09 0s 0s 528986150e-09 0s 0s 528988270e-09 1s 1s 528996350e-09 0s 0s 528996430e-09 0s 0s 528998510e-09 1s 1s 529006590e-09 0s 0s 529006710e-09 0s 0s 529008750e-09 1s 1s 529016830e-09 0s 0s 529016990e-09 0s 0s 529018990e-09 1s 1s 529027070e-09 0s 0s 529027270e-09 0s 0s 529029230e-09 1s 1s 529037310e-09 0s 0s 529037550e-09 0s 0s 529039470e-09 1s 1s 529047550e-09 0s 0s 529047830e-09 0s 0s 529049710e-09 1s 1s 529057790e-09 0s 0s 529058110e-09 0s 0s 529059950e-09 1s 1s 529068030e-09 0s 0s 529068390e-09 0s 0s 529070190e-09 1s 1s 529078270e-09 0s 0s 529078670e-09 0s 0s 529080430e-09 1s 1s 529088510e-09 0s 0s 529088950e-09 0s 0s 529090670e-09 1s 1s 529098750e-09 0s 0s 529099230e-09 0s 0s 529100910e-09 1s 1s 529108990e-09 0s 0s 529109510e-09 0s 0s 529111150e-09 1s 1s 529119230e-09 0s 0s 529119790e-09 0s 0s 529121390e-09 1s 1s 529129470e-09 0s 0s 529130070e-09 0s 0s 529131630e-09 1s 1s 529139710e-09 0s 0s 529140350e-09 0s 0s 529141870e-09 1s 1s 529149950e-09 0s 0s 529150630e-09 0s 0s 529152110e-09 1s 1s 529160190e-09 0s 0s 529160910e-09 0s 0s 529162350e-09 1s 1s 529170430e-09 0s 0s 529171190e-09 0s 0s 529172590e-09 1s 1s 529180670e-09 0s 0s 529181470e-09 0s 0s 529182830e-09 1s 1s 529190910e-09 0s 0s 529191750e-09 0s 0s 529193070e-09 1s 1s 529201150e-09 0s 0s 529202030e-09 0s 0s 529203310e-09 1s 1s 529211390e-09 0s 0s 529212310e-09 0s 0s 529213550e-09 1s 1s 529221630e-09 0s 0s 529222590e-09 0s 0s 529223790e-09 1s 1s 529231870e-09 0s 0s 529232870e-09 0s 0s 529234030e-09 1s 1s 529242110e-09 0s 0s 529243150e-09 0s 0s 529244270e-09 1s 1s 529252350e-09 0s 0s 529253430e-09 0s 0s 529254510e-09 1s 1s 529262590e-09 0s 0s 529263710e-09 0s 0s 529264750e-09 1s 1s 529272830e-09 0s 0s 529273990e-09 0s 0s 529274990e-09 1s 1s 529283070e-09 0s 0s 529284270e-09 0s 0s 529285230e-09 1s 1s 529293310e-09 0s 0s 529294550e-09 0s 0s 529295470e-09 1s 1s 529303550e-09 0s 0s 529304830e-09 0s 0s 529305710e-09 1s 1s 529313790e-09 0s 0s 529315110e-09 0s 0s 529315950e-09 1s 1s 529324030e-09 0s 0s 529325390e-09 0s 0s 529326190e-09 1s 1s 529334270e-09 0s 0s 529335670e-09 0s 0s 529336430e-09 1s 1s 529344510e-09 0s 0s 529345950e-09 0s 0s 529346670e-09 1s 1s 529354750e-09 0s 0s 529356230e-09 0s 0s 529356910e-09 1s 1s 529364990e-09 0s 0s 529366510e-09 0s 0s 529367150e-09 1s 1s 529375230e-09 0s 0s 529376790e-09 0s 0s 529377390e-09 1s 1s 529385470e-09 0s 0s 529387070e-09 0s 0s 529387630e-09 1s 1s 529395710e-09 0s 0s 529397350e-09 0s 0s 529397870e-09 1s 1s 529405950e-09 0s 0s 529407630e-09 0s 0s 529408110e-09 1s 1s 529416190e-09 0s 0s 529417910e-09 0s 0s 529418350e-09 1s 1s 529426430e-09 0s 0s 529428190e-09 0s 0s 529428590e-09 1s 1s 529436670e-09 0s 0s 529438470e-09 0s 0s 529438830e-09 1s 1s 529446910e-09 0s 0s 529448750e-09 0s 0s 529449070e-09 1s 1s 529457150e-09 0s 0s 529459030e-09 0s 0s 529459310e-09 1s 1s 529467390e-09 0s 0s 529469310e-09 0s 0s 529469550e-09 1s 1s 529477630e-09 0s 0s 529479590e-09 0s 0s 529479790e-09 1s 1s 529487870e-09 0s 0s 529489870e-09 0s 0s 529490030e-09 1s 1s 529498110e-09 0s 0s 529500150e-09 0s 0s 529500270e-09 1s 1s 529508350e-09 0s 0s 529510430e-09 0s 0s 529510510e-09 1s 1s 529518590e-09 0s 0s 529520710e-09 0s 0s 529520750e-09 1s 1s 529528830e-09 0s 0s 529530990e-09 1s 1s 529531030e-09 1s 1s 529539110e-09 0s 0s 529541230e-09 1s 1s 529541310e-09 1s 1s 529549350e-09 0s 0s 529551470e-09 1s 1s 529551590e-09 1s 1s 529559590e-09 0s 0s 529561710e-09 1s 1s 529561870e-09 1s 1s 529569830e-09 0s 0s 529571950e-09 1s 1s 529572150e-09 1s 1s 529580070e-09 0s 0s 529582190e-09 1s 1s 529582430e-09 1s 1s 529590310e-09 0s 0s 529592430e-09 1s 1s 529592710e-09 1s 1s 529600550e-09 0s 0s 529602670e-09 1s 1s 529602990e-09 1s 1s 529610790e-09 0s 0s 529612910e-09 1s 1s 529613270e-09 1s 1s 529621030e-09 0s 0s 529623150e-09 1s 1s 529623550e-09 1s 1s 529631270e-09 0s 0s 529633390e-09 1s 1s 529633830e-09 1s 1s 529641510e-09 0s 0s 529643630e-09 1s 1s 529644110e-09 1s 1s 529651750e-09 0s 0s 529653870e-09 1s 1s 529654390e-09 1s 1s 529661990e-09 0s 0s 529664110e-09 1s 1s 529664670e-09 1s 1s 529672230e-09 0s 0s 529674350e-09 1s 1s 529674950e-09 1s 1s 529682470e-09 0s 0s 529684590e-09 1s 1s 529685230e-09 1s 1s 529692710e-09 0s 0s 529694830e-09 1s 1s 529695510e-09 1s 1s 529702950e-09 0s 0s 529705070e-09 1s 1s 529705790e-09 1s 1s 529713190e-09 0s 0s 529715310e-09 1s 1s 529716070e-09 1s 1s 529723430e-09 0s 0s 529725550e-09 1s 1s 529726350e-09 1s 1s 529733670e-09 0s 0s 529735790e-09 1s 1s 529736630e-09 1s 1s 529743910e-09 0s 0s 529746030e-09 1s 1s 529746910e-09 1s 1s 529754150e-09 0s 0s 529756270e-09 1s 1s 529757190e-09 1s 1s 529764390e-09 0s 0s 529766510e-09 1s 1s 529767470e-09 1s 1s 529774630e-09 0s 0s 529776750e-09 1s 1s 529777750e-09 1s 1s 529784870e-09 0s 0s 529786990e-09 1s 1s 529788030e-09 1s 1s 529795110e-09 0s 0s 529797230e-09 1s 1s 529798310e-09 1s 1s 529805350e-09 0s 0s 529807470e-09 1s 1s 529808590e-09 1s 1s 529815590e-09 0s 0s 529817710e-09 1s 1s 529818870e-09 1s 1s 529825830e-09 0s 0s 529827950e-09 1s 1s 529829150e-09 1s 1s 529836070e-09 0s 0s 529838190e-09 1s 1s 529839430e-09 1s 1s 529846310e-09 0s 0s 529848430e-09 1s 1s 529849710e-09 1s 1s 529856550e-09 0s 0s 529858670e-09 1s 1s 529859990e-09 1s 1s 529866790e-09 0s 0s 529868910e-09 1s 1s 529870270e-09 1s 1s 529877030e-09 0s 0s 529879150e-09 1s 1s 529880550e-09 1s 1s 529887270e-09 0s 0s 529889390e-09 1s 1s 529890830e-09 1s 1s 529897510e-09 0s 0s 529899630e-09 1s 1s 529901110e-09 1s 1s 529907750e-09 0s 0s 529909870e-09 1s 1s 529911390e-09 1s 1s 529917990e-09 0s 0s 529920110e-09 1s 1s 529921670e-09 1s 1s 529928230e-09 0s 0s 529930350e-09 1s 1s 529931950e-09 1s 1s 529938470e-09 0s 0s 529940590e-09 1s 1s 529942230e-09 1s 1s 529948710e-09 0s 0s 529950830e-09 1s 1s 529952510e-09 1s 1s 529958950e-09 0s 0s 529961070e-09 1s 1s 529962790e-09 1s 1s 529969190e-09 0s 0s 529971310e-09 1s 1s 529973070e-09 1s 1s 529979430e-09 0s 0s 529981550e-09 1s 1s 529983350e-09 1s 1s 529989670e-09 0s 0s 529991790e-09 1s 1s 529993630e-09 1s 1s 529999910e-09 0s 0s 530002030e-09 1s 1s 530003910e-09 1s 1s 530010150e-09 0s 0s 530012270e-09 1s 1s 530014190e-09 1s 1s 530020390e-09 0s 0s 530022510e-09 1s 1s 530024470e-09 1s 1s 530030630e-09 0s 0s 530032750e-09 1s 1s 530034750e-09 1s 1s 530040870e-09 0s 0s 530042990e-09 1s 1s 530045030e-09 1s 1s 530051110e-09 0s 0s 530053230e-09 1s 1s 530055310e-09 1s 1s 530061350e-09 0s 0s 530063470e-09 1s 1s 530065590e-09 1s 1s 530071590e-09 0s 0s 530073710e-09 1s 1s 530075870e-09 1s 1s 530081830e-09 0s 0s 530083950e-09 1s 1s 530086150e-09 1s 1s 530092070e-09 0s 0s 530094190e-09 1s 1s 530096430e-09 1s 1s 530102310e-09 0s 0s 530104430e-09 1s 1s 530106710e-09 1s 1s 530112550e-09 0s 0s 530114670e-09 1s 1s 530116990e-09 1s 1s 530122790e-09 0s 0s 530124910e-09 1s 1s 530127270e-09 1s 1s 530133030e-09 0s 0s 530135150e-09 1s 1s 530137550e-09 1s 1s 530143270e-09 0s 0s 530145390e-09 1s 1s 530147830e-09 1s 1s 530153510e-09 0s 0s 530155630e-09 1s 1s 530158110e-09 1s 1s 530163750e-09 0s 0s 530165870e-09 1s 1s 530168390e-09 1s 1s 530173990e-09 0s 0s 530176110e-09 1s 1s 530178670e-09 1s 1s 530184230e-09 0s 0s 530186350e-09 1s 1s 530188950e-09 1s 1s 530194470e-09 0s 0s 530196590e-09 1s 1s 530199230e-09 1s 1s 530204710e-09 0s 0s 530206830e-09 1s 1s 530209510e-09 1s 1s 530214950e-09 0s 0s 530217070e-09 1s 1s 530219790e-09 1s 1s 530225190e-09 0s 0s 530227310e-09 1s 1s 530230070e-09 1s 1s 530235430e-09 0s 0s 530237550e-09 1s 1s 530240350e-09 1s 1s 530245670e-09 0s 0s 530247790e-09 1s 1s 530250630e-09 1s 1s 530255910e-09 0s 0s 530258030e-09 1s 1s 530260910e-09 1s 1s 530266150e-09 0s 0s 530268270e-09 1s 1s 530271190e-09 1s 1s 530276390e-09 0s 0s 530278510e-09 1s 1s 530281470e-09 1s 1s 530286630e-09 0s 0s 530288750e-09 1s 1s 530291750e-09 1s 1s 530296870e-09 0s 0s 530298990e-09 1s 1s 530302030e-09 1s 1s 530307110e-09 0s 0s 530309230e-09 1s 1s 530312310e-09 1s 1s 530317350e-09 0s 0s 530319470e-09 1s 1s 530322590e-09 1s 1s 530327590e-09 0s 0s 530329710e-09 1s 1s 530332870e-09 1s 1s 530337830e-09 0s 0s 530339950e-09 1s 1s 530343150e-09 1s 1s 530348070e-09 0s 0s 530350190e-09 1s 1s 530353430e-09 1s 1s 530358310e-09 0s 0s 530360430e-09 1s 1s 530363710e-09 1s 1s 530368550e-09 0s 0s 530370670e-09 1s 1s 530373990e-09 1s 1s 530378790e-09 0s 0s 530380910e-09 1s 1s 530384270e-09 1s 1s 530389030e-09 0s 0s 530391150e-09 1s 1s 530394550e-09 1s 1s 530399270e-09 0s 0s 530401390e-09 1s 1s 530404830e-09 1s 1s 530409510e-09 0s 0s 530411630e-09 1s 1s 530415110e-09 1s 1s 530419750e-09 0s 0s 530421870e-09 1s 1s 530425390e-09 1s 1s 530429990e-09 0s 0s 530432110e-09 1s 1s 530435670e-09 1s 1s 530440230e-09 0s 0s 530442350e-09 1s 1s 530445950e-09 1s 1s 530450470e-09 0s 0s 530452590e-09 1s 1s 530456230e-09 1s 1s 530460710e-09 0s 0s 530462830e-09 1s 1s 530466510e-09 1s 1s 530470950e-09 0s 0s 530473070e-09 1s 1s 530476790e-09 1s 1s 530481190e-09 0s 0s 530483310e-09 1s 1s 530487070e-09 1s 1s 530491430e-09 0s 0s 530493550e-09 1s 1s 530497350e-09 1s 1s 530501670e-09 0s 0s 530503790e-09 1s 1s 530507630e-09 1s 1s 530511910e-09 0s 0s 530514030e-09 1s 1s 530517910e-09 1s 1s 530522150e-09 0s 0s 530524270e-09 1s 1s 530528190e-09 1s 1s 530532390e-09 0s 0s 530534510e-09 1s 1s 530538470e-09 1s 1s 530542630e-09 0s 0s 530544750e-09 1s 1s 530548750e-09 1s 1s 530552870e-09 0s 0s 530554990e-09 1s 1s 530559030e-09 1s 1s 530563110e-09 0s 0s 530565230e-09 1s 1s 530569310e-09 1s 1s 530573350e-09 0s 0s 530575470e-09 1s 1s 530579590e-09 1s 1s 530583590e-09 0s 0s 530585710e-09 1s 1s 530589870e-09 1s 1s 530593830e-09 0s 0s 530595950e-09 1s 1s 530600150e-09 1s 1s 530604070e-09 0s 0s 530606190e-09 1s 1s 530610430e-09 1s 1s 530614310e-09 0s 0s 530616430e-09 1s 1s 530620710e-09 1s 1s 530624550e-09 0s 0s 530626670e-09 1s 1s 530630990e-09 1s 1s 530634790e-09 0s 0s 530636910e-09 1s 1s 530641270e-09 1s 1s 530645030e-09 0s 0s 530647150e-09 1s 1s 530651550e-09 1s 1s 530655270e-09 0s 0s 530657390e-09 1s 1s 530661830e-09 1s 1s 530665510e-09 0s 0s 530667630e-09 1s 1s 530672110e-09 1s 1s 530675750e-09 0s 0s 530677870e-09 1s 1s 530682390e-09 1s 1s 530685990e-09 0s 0s 530688110e-09 1s 1s 530692670e-09 1s 1s 530696230e-09 0s 0s 530698350e-09 1s 1s 530702950e-09 1s 1s 530706470e-09 0s 0s 530708590e-09 1s 1s 530713230e-09 1s 1s 530716710e-09 0s 0s 530718830e-09 1s 1s 530723510e-09 1s 1s 530726950e-09 0s 0s 530729070e-09 1s 1s 530733790e-09 1s 1s 530737190e-09 0s 0s 530739310e-09 1s 1s 530744070e-09 1s 1s 530747430e-09 0s 0s 530749550e-09 1s 1s 530754350e-09 1s 1s 530757670e-09 0s 0s 530759790e-09 1s 1s 530764630e-09 1s 1s 530767910e-09 0s 0s 530770030e-09 1s 1s 530774910e-09 1s 1s 530778150e-09 0s 0s 530780270e-09 1s 1s 530785190e-09 1s 1s 530788390e-09 0s 0s 530790510e-09 1s 1s 530795470e-09 1s 1s 530798630e-09 0s 0s 530800750e-09 1s 1s 530805750e-09 1s 1s 530808870e-09 0s 0s 530810990e-09 1s 1s 530816030e-09 1s 1s 530819110e-09 0s 0s 530821230e-09 1s 1s 530826310e-09 1s 1s 530829350e-09 0s 0s 530831470e-09 1s 1s 530836590e-09 1s 1s 530839590e-09 0s 0s 530841710e-09 1s 1s 530846870e-09 1s 1s 530849830e-09 0s 0s 530851950e-09 1s 1s 530857150e-09 1s 1s 530860070e-09 0s 0s 530862190e-09 1s 1s 530867430e-09 1s 1s 530870310e-09 0s 0s 530872430e-09 1s 1s 530877710e-09 1s 1s 530880550e-09 0s 0s 530882670e-09 1s 1s 530887990e-09 1s 1s 530890790e-09 0s 0s 530892910e-09 1s 1s 530898270e-09 1s 1s 530901030e-09 0s 0s 530903150e-09 1s 1s 530908550e-09 1s 1s 530911270e-09 0s 0s 530913390e-09 1s 1s 530918830e-09 1s 1s 530921510e-09 0s 0s 530923630e-09 1s 1s 530929110e-09 1s 1s 530931750e-09 0s 0s 530933870e-09 1s 1s 530939390e-09 1s 1s 530941990e-09 0s 0s 530944110e-09 1s 1s 530949670e-09 1s 1s 530952230e-09 0s 0s 530954350e-09 1s 1s 530959950e-09 1s 1s 530962470e-09 0s 0s 530964590e-09 1s 1s 530970230e-09 1s 1s 530972710e-09 0s 0s 530974830e-09 1s 1s 530980510e-09 1s 1s 530982950e-09 0s 0s 530985070e-09 1s 1s 530990790e-09 1s 1s 530993190e-09 0s 0s 530995310e-09 1s 1s 531001070e-09 1s 1s 531003430e-09 0s 0s 531005550e-09 1s 1s 531011350e-09 1s 1s 531013670e-09 0s 0s 531015790e-09 1s 1s 531021630e-09 1s 1s 531023910e-09 0s 0s 531026030e-09 1s 1s 531031910e-09 1s 1s 531034150e-09 0s 0s 531036270e-09 1s 1s 531042190e-09 1s 1s 531044390e-09 0s 0s 531046510e-09 1s 1s 531052470e-09 1s 1s 531054630e-09 0s 0s 531056750e-09 1s 1s 531062750e-09 1s 1s 531064870e-09 0s 0s 531066990e-09 1s 1s 531073030e-09 1s 1s 531075110e-09 0s 0s 531077230e-09 1s 1s 531083310e-09 1s 1s 531085350e-09 0s 0s 531087470e-09 1s 1s 531093590e-09 1s 1s 531095590e-09 0s 0s 531097710e-09 1s 1s 531103870e-09 1s 1s 531105830e-09 0s 0s 531107950e-09 1s 1s 531114150e-09 1s 1s 531116070e-09 0s 0s 531118190e-09 1s 1s 531124430e-09 1s 1s 531126310e-09 0s 0s 531128430e-09 1s 1s 531134710e-09 1s 1s 531136550e-09 0s 0s 531138670e-09 1s 1s 531144990e-09 1s 1s 531146790e-09 0s 0s 531148910e-09 1s 1s 531155270e-09 1s 1s 531157030e-09 0s 0s 531159150e-09 1s 1s 531165550e-09 1s 1s 531167270e-09 0s 0s 531169390e-09 1s 1s 531175830e-09 1s 1s 531177510e-09 0s 0s 531179630e-09 1s 1s 531186110e-09 1s 1s 531187750e-09 0s 0s 531189870e-09 1s 1s 531196390e-09 1s 1s 531197990e-09 0s 0s 531200110e-09 1s 1s 531206670e-09 1s 1s 531208230e-09 0s 0s 531210350e-09 1s 1s 531216950e-09 1s 1s 531218470e-09 0s 0s 531220590e-09 1s 1s 531227230e-09 1s 1s 531228710e-09 0s 0s 531230830e-09 1s 1s 531237510e-09 1s 1s 531238950e-09 0s 0s 531241070e-09 1s 1s 531247790e-09 1s 1s 531249190e-09 0s 0s 531251310e-09 1s 1s 531258070e-09 1s 1s 531259430e-09 0s 0s 531261550e-09 1s 1s 531268350e-09 1s 1s 531269670e-09 0s 0s 531271790e-09 1s 1s 531278630e-09 1s 1s 531279910e-09 0s 0s 531282030e-09 1s 1s 531288910e-09 1s 1s 531290150e-09 0s 0s 531292270e-09 1s 1s 531299190e-09 1s 1s 531300390e-09 0s 0s 531302510e-09 1s 1s 531309470e-09 1s 1s 531310630e-09 0s 0s 531312750e-09 1s 1s 531319750e-09 1s 1s 531320870e-09 0s 0s 531322990e-09 1s 1s 531330030e-09 1s 1s 531331110e-09 0s 0s 531333230e-09 1s 1s 531340310e-09 1s 1s 531341350e-09 0s 0s 531343470e-09 1s 1s 531350590e-09 1s 1s 531351590e-09 0s 0s 531353710e-09 1s 1s 531360870e-09 1s 1s 531361830e-09 0s 0s 531363950e-09 1s 1s 531371150e-09 1s 1s 531372070e-09 0s 0s 531374190e-09 1s 1s 531381430e-09 1s 1s 531382310e-09 0s 0s 531384430e-09 1s 1s 531391710e-09 1s 1s 531392550e-09 0s 0s 531394670e-09 1s 1s 531401990e-09 1s 1s 531402790e-09 0s 0s 531404910e-09 1s 1s 531412270e-09 1s 1s 531413030e-09 0s 0s 531415150e-09 1s 1s 531422550e-09 1s 1s 531423270e-09 0s 0s 531425390e-09 1s 1s 531432830e-09 1s 1s 531433510e-09 0s 0s 531435630e-09 1s 1s 531443110e-09 1s 1s 531443750e-09 0s 0s 531445870e-09 1s 1s 531453390e-09 1s 1s 531453990e-09 0s 0s 531456110e-09 1s 1s 531463670e-09 1s 1s 531464230e-09 0s 0s 531466350e-09 1s 1s 531473950e-09 1s 1s 531474470e-09 0s 0s 531476590e-09 1s 1s 531484230e-09 1s 1s 531484710e-09 0s 0s 531486830e-09 1s 1s 531494510e-09 1s 1s 531494950e-09 0s 0s 531497070e-09 1s 1s 531504790e-09 1s 1s 531505190e-09 0s 0s 531507310e-09 1s 1s 531515070e-09 1s 1s 531515430e-09 0s 0s 531517550e-09 1s 1s 531525350e-09 1s 1s 531525670e-09 0s 0s 531527790e-09 1s 1s 531535630e-09 1s 1s 531535910e-09 0s 0s 531538030e-09 1s 1s 531545910e-09 1s 1s 531546150e-09 0s 0s 531548270e-09 1s 1s 531556190e-09 1s 1s 531556390e-09 0s 0s 531558510e-09 1s 1s 531566470e-09 1s 1s 531566630e-09 0s 0s 531568750e-09 1s 1s 531576750e-09 1s 1s 531576870e-09 0s 0s 531578990e-09 1s 1s 531587030e-09 1s 1s 531587110e-09 0s 0s 531589230e-09 1s 1s 531597310e-09 1s 1s 531597350e-09 0s 0s 531599470e-09 1s 1s 531607590e-09 0s 0s 531609710e-09 1s 1s 531617830e-09 0s 0s 531617870e-09 0s 0s 531619950e-09 1s 1s 531628070e-09 0s 0s 531628150e-09 0s 0s 531630190e-09 1s 1s 531638310e-09 0s 0s 531638430e-09 0s 0s 531640430e-09 1s 1s 531648550e-09 0s 0s 531648710e-09 0s 0s 531650670e-09 1s 1s 531658790e-09 0s 0s 531658990e-09 0s 0s 531660910e-09 1s 1s 531669030e-09 0s 0s 531669270e-09 0s 0s 531671150e-09 1s 1s 531679270e-09 0s 0s 531679550e-09 0s 0s 531681390e-09 1s 1s 531689510e-09 0s 0s 531689830e-09 0s 0s 531691630e-09 1s 1s 531699750e-09 0s 0s 531700110e-09 0s 0s 531701870e-09 1s 1s 531709990e-09 0s 0s 531710390e-09 0s 0s 531712110e-09 1s 1s 531720230e-09 0s 0s 531720670e-09 0s 0s 531722350e-09 1s 1s 531730470e-09 0s 0s 531730950e-09 0s 0s 531732590e-09 1s 1s 531740710e-09 0s 0s 531741230e-09 0s 0s 531742830e-09 1s 1s 531750950e-09 0s 0s 531751510e-09 0s 0s 531753070e-09 1s 1s 531761190e-09 0s 0s 531761790e-09 0s 0s 531763310e-09 1s 1s 531771430e-09 0s 0s 531772070e-09 0s 0s 531773550e-09 1s 1s 531781670e-09 0s 0s 531782350e-09 0s 0s 531783790e-09 1s 1s 531791910e-09 0s 0s 531792630e-09 0s 0s 531794030e-09 1s 1s 531802150e-09 0s 0s 531802910e-09 0s 0s 531804270e-09 1s 1s 531812390e-09 0s 0s 531813190e-09 0s 0s 531814510e-09 1s 1s 531822630e-09 0s 0s 531823470e-09 0s 0s 531824750e-09 1s 1s 531832870e-09 0s 0s 531833750e-09 0s 0s 531834990e-09 1s 1s 531843110e-09 0s 0s 531844030e-09 0s 0s 531845230e-09 1s 1s 531853350e-09 0s 0s 531854310e-09 0s 0s 531855470e-09 1s 1s 531863590e-09 0s 0s 531864590e-09 0s 0s 531865710e-09 1s 1s 531873830e-09 0s 0s 531874870e-09 0s 0s 531875950e-09 1s 1s 531884070e-09 0s 0s 531885150e-09 0s 0s 531886190e-09 1s 1s 531894310e-09 0s 0s 531895430e-09 0s 0s 531896430e-09 1s 1s 531904550e-09 0s 0s 531905710e-09 0s 0s 531906670e-09 1s 1s 531914790e-09 0s 0s 531915990e-09 0s 0s 531916910e-09 1s 1s 531925030e-09 0s 0s 531926270e-09 0s 0s 531927150e-09 1s 1s 531935270e-09 0s 0s 531936550e-09 0s 0s 531937390e-09 1s 1s 531945510e-09 0s 0s 531946830e-09 0s 0s 531947630e-09 1s 1s 531955750e-09 0s 0s 531957110e-09 0s 0s 531957870e-09 1s 1s 531965990e-09 0s 0s 531967390e-09 0s 0s 531968110e-09 1s 1s 531976230e-09 0s 0s 531977670e-09 0s 0s 531978350e-09 1s 1s 531986470e-09 0s 0s 531987950e-09 0s 0s 531988590e-09 1s 1s 531996710e-09 0s 0s 531998230e-09 0s 0s 531998830e-09 1s 1s 532006950e-09 0s 0s 532008510e-09 0s 0s 532009070e-09 1s 1s 532017190e-09 0s 0s 532018790e-09 0s 0s 532019310e-09 1s 1s 532027430e-09 0s 0s 532029070e-09 0s 0s 532029550e-09 1s 1s 532037670e-09 0s 0s 532039350e-09 0s 0s 532039790e-09 1s 1s 532047910e-09 0s 0s 532049630e-09 0s 0s 532050030e-09 1s 1s 532058150e-09 0s 0s 532059910e-09 0s 0s 532060270e-09 1s 1s 532068390e-09 0s 0s 532070190e-09 0s 0s 532070510e-09 1s 1s 532078630e-09 0s 0s 532080470e-09 0s 0s 532080750e-09 1s 1s 532088870e-09 0s 0s 532090750e-09 0s 0s 532090990e-09 1s 1s 532099110e-09 0s 0s 532101030e-09 0s 0s 532101230e-09 1s 1s 532109350e-09 0s 0s 532111310e-09 0s 0s 532111470e-09 1s 1s 532119590e-09 0s 0s 532121590e-09 0s 0s 532121710e-09 1s 1s 532129830e-09 0s 0s 532131870e-09 0s 0s 532131950e-09 1s 1s 532140070e-09 0s 0s 532142150e-09 0s 0s 532142190e-09 1s 1s 532150310e-09 0s 0s 532152430e-09 1s 1s 532152470e-09 1s 1s 532160590e-09 0s 0s 532162670e-09 1s 1s 532162750e-09 1s 1s 532170830e-09 0s 0s 532172910e-09 1s 1s 532173030e-09 1s 1s 532181070e-09 0s 0s 532183150e-09 1s 1s 532183310e-09 1s 1s 532191310e-09 0s 0s 532193390e-09 1s 1s 532193590e-09 1s 1s 532201550e-09 0s 0s 532203630e-09 1s 1s 532203870e-09 1s 1s 532211790e-09 0s 0s 532213870e-09 1s 1s 532214150e-09 1s 1s 532222030e-09 0s 0s 532224110e-09 1s 1s 532224430e-09 1s 1s 532232270e-09 0s 0s 532234350e-09 1s 1s 532234710e-09 1s 1s 532242510e-09 0s 0s 532244590e-09 1s 1s 532244990e-09 1s 1s 532252750e-09 0s 0s 532254830e-09 1s 1s 532255270e-09 1s 1s 532262990e-09 0s 0s 532265070e-09 1s 1s 532265550e-09 1s 1s 532273230e-09 0s 0s 532275310e-09 1s 1s 532275830e-09 1s 1s 532283470e-09 0s 0s 532285550e-09 1s 1s 532286110e-09 1s 1s 532293710e-09 0s 0s 532295790e-09 1s 1s 532296390e-09 1s 1s 532303950e-09 0s 0s 532306030e-09 1s 1s 532306670e-09 1s 1s 532314190e-09 0s 0s 532316270e-09 1s 1s 532316950e-09 1s 1s 532324430e-09 0s 0s 532326510e-09 1s 1s 532327230e-09 1s 1s 532334670e-09 0s 0s 532336750e-09 1s 1s 532337510e-09 1s 1s 532344910e-09 0s 0s 532346990e-09 1s 1s 532347790e-09 1s 1s 532355150e-09 0s 0s 532357230e-09 1s 1s 532358070e-09 1s 1s 532365390e-09 0s 0s 532367470e-09 1s 1s 532368350e-09 1s 1s 532375630e-09 0s 0s 532377710e-09 1s 1s 532378630e-09 1s 1s 532385870e-09 0s 0s 532387950e-09 1s 1s 532388910e-09 1s 1s 532396110e-09 0s 0s 532398190e-09 1s 1s 532399190e-09 1s 1s 532406350e-09 0s 0s 532408430e-09 1s 1s 532409470e-09 1s 1s 532416590e-09 0s 0s 532418670e-09 1s 1s 532419750e-09 1s 1s 532426830e-09 0s 0s 532428910e-09 1s 1s 532430030e-09 1s 1s 532437070e-09 0s 0s 532439150e-09 1s 1s 532440310e-09 1s 1s 532447310e-09 0s 0s 532449390e-09 1s 1s 532450590e-09 1s 1s 532457550e-09 0s 0s 532459630e-09 1s 1s 532460870e-09 1s 1s 532467790e-09 0s 0s 532469870e-09 1s 1s 532471150e-09 1s 1s 532478030e-09 0s 0s 532480110e-09 1s 1s 532481430e-09 1s 1s 532488270e-09 0s 0s 532490350e-09 1s 1s 532491710e-09 1s 1s 532498510e-09 0s 0s 532500590e-09 1s 1s 532501990e-09 1s 1s 532508750e-09 0s 0s 532510830e-09 1s 1s 532512270e-09 1s 1s 532518990e-09 0s 0s 532521070e-09 1s 1s 532522550e-09 1s 1s 532529230e-09 0s 0s 532531310e-09 1s 1s 532532830e-09 1s 1s 532539470e-09 0s 0s 532541550e-09 1s 1s 532543110e-09 1s 1s 532549710e-09 0s 0s 532551790e-09 1s 1s 532553390e-09 1s 1s 532559950e-09 0s 0s 532562030e-09 1s 1s 532563670e-09 1s 1s 532570190e-09 0s 0s 532572270e-09 1s 1s 532573950e-09 1s 1s 532580430e-09 0s 0s 532582510e-09 1s 1s 532584230e-09 1s 1s 532590670e-09 0s 0s 532592750e-09 1s 1s 532594510e-09 1s 1s 532600910e-09 0s 0s 532602990e-09 1s 1s 532604790e-09 1s 1s 532611150e-09 0s 0s 532613230e-09 1s 1s 532615070e-09 1s 1s 532621390e-09 0s 0s 532623470e-09 1s 1s 532625350e-09 1s 1s 532631630e-09 0s 0s 532633710e-09 1s 1s 532635630e-09 1s 1s 532641870e-09 0s 0s 532643950e-09 1s 1s 532645910e-09 1s 1s 532652110e-09 0s 0s 532654190e-09 1s 1s 532656190e-09 1s 1s 532662350e-09 0s 0s 532664430e-09 1s 1s 532666470e-09 1s 1s 532672590e-09 0s 0s 532674670e-09 1s 1s 532676750e-09 1s 1s 532682830e-09 0s 0s 532684910e-09 1s 1s 532687030e-09 1s 1s 532693070e-09 0s 0s 532695150e-09 1s 1s 532697310e-09 1s 1s 532703310e-09 0s 0s 532705390e-09 1s 1s 532707590e-09 1s 1s 532713550e-09 0s 0s 532715630e-09 1s 1s 532717870e-09 1s 1s 532723790e-09 0s 0s 532725870e-09 1s 1s 532728150e-09 1s 1s 532734030e-09 0s 0s 532736110e-09 1s 1s 532738430e-09 1s 1s 532744270e-09 0s 0s 532746350e-09 1s 1s 532748710e-09 1s 1s 532754510e-09 0s 0s 532756590e-09 1s 1s 532758990e-09 1s 1s 532764750e-09 0s 0s 532766830e-09 1s 1s 532769270e-09 1s 1s 532774990e-09 0s 0s 532777070e-09 1s 1s 532779550e-09 1s 1s 532785230e-09 0s 0s 532787310e-09 1s 1s 532789830e-09 1s 1s 532795470e-09 0s 0s 532797550e-09 1s 1s 532800110e-09 1s 1s 532805710e-09 0s 0s 532807790e-09 1s 1s 532810390e-09 1s 1s 532815950e-09 0s 0s 532818030e-09 1s 1s 532820670e-09 1s 1s 532826190e-09 0s 0s 532828270e-09 1s 1s 532830950e-09 1s 1s 532836430e-09 0s 0s 532838510e-09 1s 1s 532841230e-09 1s 1s 532846670e-09 0s 0s 532848750e-09 1s 1s 532851510e-09 1s 1s 532856910e-09 0s 0s 532858990e-09 1s 1s 532861790e-09 1s 1s 532867150e-09 0s 0s 532869230e-09 1s 1s 532872070e-09 1s 1s 532877390e-09 0s 0s 532879470e-09 1s 1s 532882350e-09 1s 1s 532887630e-09 0s 0s 532889710e-09 1s 1s 532892630e-09 1s 1s 532897870e-09 0s 0s 532899950e-09 1s 1s 532902910e-09 1s 1s 532908110e-09 0s 0s 532910190e-09 1s 1s 532913190e-09 1s 1s 532918350e-09 0s 0s 532920430e-09 1s 1s 532923470e-09 1s 1s 532928590e-09 0s 0s 532930670e-09 1s 1s 532933750e-09 1s 1s 532938830e-09 0s 0s 532940910e-09 1s 1s 532944030e-09 1s 1s 532949070e-09 0s 0s 532951150e-09 1s 1s 532954310e-09 1s 1s 532959310e-09 0s 0s 532961390e-09 1s 1s 532964590e-09 1s 1s 532969550e-09 0s 0s 532971630e-09 1s 1s 532974870e-09 1s 1s 532979790e-09 0s 0s 532981870e-09 1s 1s 532985150e-09 1s 1s 532990030e-09 0s 0s 532992110e-09 1s 1s 532995430e-09 1s 1s 533000270e-09 0s 0s 533002350e-09 1s 1s 533005710e-09 1s 1s 533010510e-09 0s 0s 533012590e-09 1s 1s 533015990e-09 1s 1s 533020750e-09 0s 0s 533022830e-09 1s 1s 533026270e-09 1s 1s 533030990e-09 0s 0s 533033070e-09 1s 1s 533036550e-09 1s 1s 533041230e-09 0s 0s 533043310e-09 1s 1s 533046830e-09 1s 1s 533051470e-09 0s 0s 533053550e-09 1s 1s 533057110e-09 1s 1s 533061710e-09 0s 0s 533063790e-09 1s 1s 533067390e-09 1s 1s 533071950e-09 0s 0s 533074030e-09 1s 1s 533077670e-09 1s 1s 533082190e-09 0s 0s 533084270e-09 1s 1s 533087950e-09 1s 1s 533092430e-09 0s 0s 533094510e-09 1s 1s 533098230e-09 1s 1s 533102670e-09 0s 0s 533104750e-09 1s 1s 533108510e-09 1s 1s 533112910e-09 0s 0s 533114990e-09 1s 1s 533118790e-09 1s 1s 533123150e-09 0s 0s 533125230e-09 1s 1s 533129070e-09 1s 1s 533133390e-09 0s 0s 533135470e-09 1s 1s 533139350e-09 1s 1s 533143630e-09 0s 0s 533145710e-09 1s 1s 533149630e-09 1s 1s 533153870e-09 0s 0s 533155950e-09 1s 1s 533159910e-09 1s 1s 533164110e-09 0s 0s 533166190e-09 1s 1s 533170190e-09 1s 1s 533174350e-09 0s 0s 533176430e-09 1s 1s 533180470e-09 1s 1s 533184590e-09 0s 0s 533186670e-09 1s 1s 533190750e-09 1s 1s 533194830e-09 0s 0s 533196910e-09 1s 1s 533201030e-09 1s 1s 533205070e-09 0s 0s 533207150e-09 1s 1s 533211310e-09 1s 1s 533215310e-09 0s 0s 533217390e-09 1s 1s 533221590e-09 1s 1s 533225550e-09 0s 0s 533227630e-09 1s 1s 533231870e-09 1s 1s 533235790e-09 0s 0s 533237870e-09 1s 1s 533242150e-09 1s 1s 533246030e-09 0s 0s 533248110e-09 1s 1s 533252430e-09 1s 1s 533256270e-09 0s 0s 533258350e-09 1s 1s 533262710e-09 1s 1s 533266510e-09 0s 0s 533268590e-09 1s 1s 533272990e-09 1s 1s 533276750e-09 0s 0s 533278830e-09 1s 1s 533283270e-09 1s 1s 533286990e-09 0s 0s 533289070e-09 1s 1s 533293550e-09 1s 1s 533297230e-09 0s 0s 533299310e-09 1s 1s 533303830e-09 1s 1s 533307470e-09 0s 0s 533309550e-09 1s 1s 533314110e-09 1s 1s 533317710e-09 0s 0s 533319790e-09 1s 1s 533324390e-09 1s 1s 533327950e-09 0s 0s 533330030e-09 1s 1s 533334670e-09 1s 1s 533338190e-09 0s 0s 533340270e-09 1s 1s 533344950e-09 1s 1s 533348430e-09 0s 0s 533350510e-09 1s 1s 533355230e-09 1s 1s 533358670e-09 0s 0s 533360750e-09 1s 1s 533365510e-09 1s 1s 533368910e-09 0s 0s 533370990e-09 1s 1s 533375790e-09 1s 1s 533379150e-09 0s 0s 533381230e-09 1s 1s 533386070e-09 1s 1s 533389390e-09 0s 0s 533391470e-09 1s 1s 533396350e-09 1s 1s 533399630e-09 0s 0s 533401710e-09 1s 1s 533406630e-09 1s 1s 533409870e-09 0s 0s 533411950e-09 1s 1s 533416910e-09 1s 1s 533420110e-09 0s 0s 533422190e-09 1s 1s 533427190e-09 1s 1s 533430350e-09 0s 0s 533432430e-09 1s 1s 533437470e-09 1s 1s 533440590e-09 0s 0s 533442670e-09 1s 1s 533447750e-09 1s 1s 533450830e-09 0s 0s 533452910e-09 1s 1s 533458030e-09 1s 1s 533461070e-09 0s 0s 533463150e-09 1s 1s 533468310e-09 1s 1s 533471310e-09 0s 0s 533473390e-09 1s 1s 533478590e-09 1s 1s 533481550e-09 0s 0s 533483630e-09 1s 1s 533488870e-09 1s 1s 533491790e-09 0s 0s 533493870e-09 1s 1s 533499150e-09 1s 1s 533502030e-09 0s 0s 533504110e-09 1s 1s 533509430e-09 1s 1s 533512270e-09 0s 0s 533514350e-09 1s 1s 533519710e-09 1s 1s 533522510e-09 0s 0s 533524590e-09 1s 1s 533529990e-09 1s 1s 533532750e-09 0s 0s 533534830e-09 1s 1s 533540270e-09 1s 1s 533542990e-09 0s 0s 533545070e-09 1s 1s 533550550e-09 1s 1s 533553230e-09 0s 0s 533555310e-09 1s 1s 533560830e-09 1s 1s 533563470e-09 0s 0s 533565550e-09 1s 1s 533571110e-09 1s 1s 533573710e-09 0s 0s 533575790e-09 1s 1s 533581390e-09 1s 1s 533583950e-09 0s 0s 533586030e-09 1s 1s 533591670e-09 1s 1s 533594190e-09 0s 0s 533596270e-09 1s 1s 533601950e-09 1s 1s 533604430e-09 0s 0s 533606510e-09 1s 1s 533612230e-09 1s 1s 533614670e-09 0s 0s 533616750e-09 1s 1s 533622510e-09 1s 1s 533624910e-09 0s 0s 533626990e-09 1s 1s 533632790e-09 1s 1s 533635150e-09 0s 0s 533637230e-09 1s 1s 533643070e-09 1s 1s 533645390e-09 0s 0s 533647470e-09 1s 1s 533653350e-09 1s 1s 533655630e-09 0s 0s 533657710e-09 1s 1s 533663630e-09 1s 1s 533665870e-09 0s 0s 533667950e-09 1s 1s 533673910e-09 1s 1s 533676110e-09 0s 0s 533678190e-09 1s 1s 533684190e-09 1s 1s 533686350e-09 0s 0s 533688430e-09 1s 1s 533694470e-09 1s 1s 533696590e-09 0s 0s 533698670e-09 1s 1s 533704750e-09 1s 1s 533706830e-09 0s 0s 533708910e-09 1s 1s 533715030e-09 1s 1s 533717070e-09 0s 0s 533719150e-09 1s 1s 533725310e-09 1s 1s 533727310e-09 0s 0s 533729390e-09 1s 1s 533735590e-09 1s 1s 533737550e-09 0s 0s 533739630e-09 1s 1s 533745870e-09 1s 1s 533747790e-09 0s 0s 533749870e-09 1s 1s 533756150e-09 1s 1s 533758030e-09 0s 0s 533760110e-09 1s 1s 533766430e-09 1s 1s 533768270e-09 0s 0s 533770350e-09 1s 1s 533776710e-09 1s 1s 533778510e-09 0s 0s 533780590e-09 1s 1s 533786990e-09 1s 1s 533788750e-09 0s 0s 533790830e-09 1s 1s 533797270e-09 1s 1s 533798990e-09 0s 0s 533801070e-09 1s 1s 533807550e-09 1s 1s 533809230e-09 0s 0s 533811310e-09 1s 1s 533817830e-09 1s 1s 533819470e-09 0s 0s 533821550e-09 1s 1s 533828110e-09 1s 1s 533829710e-09 0s 0s 533831790e-09 1s 1s 533838390e-09 1s 1s 533839950e-09 0s 0s 533842030e-09 1s 1s 533848670e-09 1s 1s 533850190e-09 0s 0s 533852270e-09 1s 1s 533858950e-09 1s 1s 533860430e-09 0s 0s 533862510e-09 1s 1s 533869230e-09 1s 1s 533870670e-09 0s 0s 533872750e-09 1s 1s 533879510e-09 1s 1s 533880910e-09 0s 0s 533882990e-09 1s 1s 533889790e-09 1s 1s 533891150e-09 0s 0s 533893230e-09 1s 1s 533900070e-09 1s 1s 533901390e-09 0s 0s 533903470e-09 1s 1s 533910350e-09 1s 1s 533911630e-09 0s 0s 533913710e-09 1s 1s 533920630e-09 1s 1s 533921870e-09 0s 0s 533923950e-09 1s 1s 533930910e-09 1s 1s 533932110e-09 0s 0s 533934190e-09 1s 1s 533941190e-09 1s 1s 533942350e-09 0s 0s 533944430e-09 1s 1s 533951470e-09 1s 1s 533952590e-09 0s 0s 533954670e-09 1s 1s 533961750e-09 1s 1s 533962830e-09 0s 0s 533964910e-09 1s 1s 533972030e-09 1s 1s 533973070e-09 0s 0s 533975150e-09 1s 1s 533982310e-09 1s 1s 533983310e-09 0s 0s 533985390e-09 1s 1s 533992590e-09 1s 1s 533993550e-09 0s 0s 533995630e-09 1s 1s 534002870e-09 1s 1s 534003790e-09 0s 0s 534005870e-09 1s 1s 534013150e-09 1s 1s 534014030e-09 0s 0s 534016110e-09 1s 1s 534023430e-09 1s 1s 534024270e-09 0s 0s 534026350e-09 1s 1s 534033710e-09 1s 1s 534034510e-09 0s 0s 534036590e-09 1s 1s 534043990e-09 1s 1s 534044750e-09 0s 0s 534046830e-09 1s 1s 534054270e-09 1s 1s 534054990e-09 0s 0s 534057070e-09 1s 1s 534064550e-09 1s 1s 534065230e-09 0s 0s 534067310e-09 1s 1s 534074830e-09 1s 1s 534075470e-09 0s 0s 534077550e-09 1s 1s 534085110e-09 1s 1s 534085710e-09 0s 0s 534087790e-09 1s 1s 534095390e-09 1s 1s 534095950e-09 0s 0s 534098030e-09 1s 1s 534105670e-09 1s 1s 534106190e-09 0s 0s 534108270e-09 1s 1s 534115950e-09 1s 1s 534116430e-09 0s 0s 534118510e-09 1s 1s 534126230e-09 1s 1s 534126670e-09 0s 0s 534128750e-09 1s 1s 534136510e-09 1s 1s 534136910e-09 0s 0s 534138990e-09 1s 1s 534146790e-09 1s 1s 534147150e-09 0s 0s 534149230e-09 1s 1s 534157070e-09 1s 1s 534157390e-09 0s 0s 534159470e-09 1s 1s 534167350e-09 1s 1s 534167630e-09 0s 0s 534169710e-09 1s 1s 534177630e-09 1s 1s 534177870e-09 0s 0s 534179950e-09 1s 1s 534187910e-09 1s 1s 534188110e-09 0s 0s 534190190e-09 1s 1s 534198190e-09 1s 1s 534198350e-09 0s 0s 534200430e-09 1s 1s 534208470e-09 1s 1s 534208590e-09 0s 0s 534210670e-09 1s 1s 534218750e-09 1s 1s 534218830e-09 0s 0s 534220910e-09 1s 1s 534229030e-09 1s 1s 534229070e-09 0s 0s 534231150e-09 1s 1s 534239310e-09 0s 0s 534241390e-09 1s 1s 534249550e-09 0s 0s 534249590e-09 0s 0s 534251630e-09 1s 1s 534259790e-09 0s 0s 534259870e-09 0s 0s 534261870e-09 1s 1s 534270030e-09 0s 0s 534270150e-09 0s 0s 534272110e-09 1s 1s 534280270e-09 0s 0s 534280430e-09 0s 0s 534282350e-09 1s 1s 534290510e-09 0s 0s 534290710e-09 0s 0s 534292590e-09 1s 1s 534300750e-09 0s 0s 534300990e-09 0s 0s 534302830e-09 1s 1s 534310990e-09 0s 0s 534311270e-09 0s 0s 534313070e-09 1s 1s 534321230e-09 0s 0s 534321550e-09 0s 0s 534323310e-09 1s 1s 534331470e-09 0s 0s 534331830e-09 0s 0s 534333550e-09 1s 1s 534341710e-09 0s 0s 534342110e-09 0s 0s 534343790e-09 1s 1s 534351950e-09 0s 0s 534352390e-09 0s 0s 534354030e-09 1s 1s 534362190e-09 0s 0s 534362670e-09 0s 0s 534364270e-09 1s 1s 534372430e-09 0s 0s 534372950e-09 0s 0s 534374510e-09 1s 1s 534382670e-09 0s 0s 534383230e-09 0s 0s 534384750e-09 1s 1s 534392910e-09 0s 0s 534393510e-09 0s 0s 534394990e-09 1s 1s 534403150e-09 0s 0s 534403790e-09 0s 0s 534405230e-09 1s 1s 534413390e-09 0s 0s 534414070e-09 0s 0s 534415470e-09 1s 1s 534423630e-09 0s 0s 534424350e-09 0s 0s 534425710e-09 1s 1s 534433870e-09 0s 0s 534434630e-09 0s 0s 534435950e-09 1s 1s 534444110e-09 0s 0s 534444910e-09 0s 0s 534446190e-09 1s 1s 534454350e-09 0s 0s 534455190e-09 0s 0s 534456430e-09 1s 1s 534464590e-09 0s 0s 534465470e-09 0s 0s 534466670e-09 1s 1s 534474830e-09 0s 0s 534475750e-09 0s 0s 534476910e-09 1s 1s 534485070e-09 0s 0s 534486030e-09 0s 0s 534487150e-09 1s 1s 534495310e-09 0s 0s 534496310e-09 0s 0s 534497390e-09 1s 1s 534505550e-09 0s 0s 534506590e-09 0s 0s 534507630e-09 1s 1s 534515790e-09 0s 0s 534516870e-09 0s 0s 534517870e-09 1s 1s 534526030e-09 0s 0s 534527150e-09 0s 0s 534528110e-09 1s 1s 534536270e-09 0s 0s 534537430e-09 0s 0s 534538350e-09 1s 1s 534546510e-09 0s 0s 534547710e-09 0s 0s 534548590e-09 1s 1s 534556750e-09 0s 0s 534557990e-09 0s 0s 534558830e-09 1s 1s 534566990e-09 0s 0s 534568270e-09 0s 0s 534569070e-09 1s 1s 534577230e-09 0s 0s 534578550e-09 0s 0s 534579310e-09 1s 1s 534587470e-09 0s 0s 534588830e-09 0s 0s 534589550e-09 1s 1s 534597710e-09 0s 0s 534599110e-09 0s 0s 534599790e-09 1s 1s 534607950e-09 0s 0s 534609390e-09 0s 0s 534610030e-09 1s 1s 534618190e-09 0s 0s 534619670e-09 0s 0s 534620270e-09 1s 1s 534628430e-09 0s 0s 534629950e-09 0s 0s 534630510e-09 1s 1s 534638670e-09 0s 0s 534640230e-09 0s 0s 534640750e-09 1s 1s 534648910e-09 0s 0s 534650510e-09 0s 0s 534650990e-09 1s 1s 534659150e-09 0s 0s 534660790e-09 0s 0s 534661230e-09 1s 1s 534669390e-09 0s 0s 534671070e-09 0s 0s 534671470e-09 1s 1s 534679630e-09 0s 0s 534681350e-09 0s 0s 534681710e-09 1s 1s 534689870e-09 0s 0s 534691630e-09 0s 0s 534691950e-09 1s 1s 534700110e-09 0s 0s 534701910e-09 0s 0s 534702190e-09 1s 1s 534710350e-09 0s 0s 534712190e-09 0s 0s 534712430e-09 1s 1s 534720590e-09 0s 0s 534722470e-09 0s 0s 534722670e-09 1s 1s 534730830e-09 0s 0s 534732750e-09 0s 0s 534732910e-09 1s 1s 534741070e-09 0s 0s 534743030e-09 0s 0s 534743150e-09 1s 1s 534751310e-09 0s 0s 534753310e-09 0s 0s 534753390e-09 1s 1s 534761550e-09 0s 0s 534763590e-09 0s 0s 534763630e-09 1s 1s 534771790e-09 0s 0s 534773870e-09 1s 1s 534773910e-09 1s 1s 534782070e-09 0s 0s 534784110e-09 1s 1s 534784190e-09 1s 1s 534792310e-09 0s 0s 534794350e-09 1s 1s 534794470e-09 1s 1s 534802550e-09 0s 0s 534804590e-09 1s 1s 534804750e-09 1s 1s 534812790e-09 0s 0s 534814830e-09 1s 1s 534815030e-09 1s 1s 534823030e-09 0s 0s 534825070e-09 1s 1s 534825310e-09 1s 1s 534833270e-09 0s 0s 534835310e-09 1s 1s 534835590e-09 1s 1s 534843510e-09 0s 0s 534845550e-09 1s 1s 534845870e-09 1s 1s 534853750e-09 0s 0s 534855790e-09 1s 1s 534856150e-09 1s 1s 534863990e-09 0s 0s 534866030e-09 1s 1s 534866430e-09 1s 1s 534874230e-09 0s 0s 534876270e-09 1s 1s 534876710e-09 1s 1s 534884470e-09 0s 0s 534886510e-09 1s 1s 534886990e-09 1s 1s 534894710e-09 0s 0s 534896750e-09 1s 1s 534897270e-09 1s 1s 534904950e-09 0s 0s 534906990e-09 1s 1s 534907550e-09 1s 1s 534915190e-09 0s 0s 534917230e-09 1s 1s 534917830e-09 1s 1s 534925430e-09 0s 0s 534927470e-09 1s 1s 534928110e-09 1s 1s 534935670e-09 0s 0s 534937710e-09 1s 1s 534938390e-09 1s 1s 534945910e-09 0s 0s 534947950e-09 1s 1s 534948670e-09 1s 1s 534956150e-09 0s 0s 534958190e-09 1s 1s 534958950e-09 1s 1s 534966390e-09 0s 0s 534968430e-09 1s 1s 534969230e-09 1s 1s 534976630e-09 0s 0s 534978670e-09 1s 1s 534979510e-09 1s 1s 534986870e-09 0s 0s 534988910e-09 1s 1s 534989790e-09 1s 1s 534997110e-09 0s 0s 534999150e-09 1s 1s 535000070e-09 1s 1s 535007350e-09 0s 0s 535009390e-09 1s 1s 535010350e-09 1s 1s 535017590e-09 0s 0s 535019630e-09 1s 1s 535020630e-09 1s 1s 535027830e-09 0s 0s 535029870e-09 1s 1s 535030910e-09 1s 1s 535038070e-09 0s 0s 535040110e-09 1s 1s 535041190e-09 1s 1s 535048310e-09 0s 0s 535050350e-09 1s 1s 535051470e-09 1s 1s 535058550e-09 0s 0s 535060590e-09 1s 1s 535061750e-09 1s 1s 535068790e-09 0s 0s 535070830e-09 1s 1s 535072030e-09 1s 1s 535079030e-09 0s 0s 535081070e-09 1s 1s 535082310e-09 1s 1s 535089270e-09 0s 0s 535091310e-09 1s 1s 535092590e-09 1s 1s 535099510e-09 0s 0s 535101550e-09 1s 1s 535102870e-09 1s 1s 535109750e-09 0s 0s 535111790e-09 1s 1s 535113150e-09 1s 1s 535119990e-09 0s 0s 535122030e-09 1s 1s 535123430e-09 1s 1s 535130230e-09 0s 0s 535132270e-09 1s 1s 535133710e-09 1s 1s 535140470e-09 0s 0s 535142510e-09 1s 1s 535143990e-09 1s 1s 535150710e-09 0s 0s 535152750e-09 1s 1s 535154270e-09 1s 1s 535160950e-09 0s 0s 535162990e-09 1s 1s 535164550e-09 1s 1s 535171190e-09 0s 0s 535173230e-09 1s 1s 535174830e-09 1s 1s 535181430e-09 0s 0s 535183470e-09 1s 1s 535185110e-09 1s 1s 535191670e-09 0s 0s 535193710e-09 1s 1s 535195390e-09 1s 1s 535201910e-09 0s 0s 535203950e-09 1s 1s 535205670e-09 1s 1s 535212150e-09 0s 0s 535214190e-09 1s 1s 535215950e-09 1s 1s 535222390e-09 0s 0s 535224430e-09 1s 1s 535226230e-09 1s 1s 535232630e-09 0s 0s 535234670e-09 1s 1s 535236510e-09 1s 1s 535242870e-09 0s 0s 535244910e-09 1s 1s 535246790e-09 1s 1s 535253110e-09 0s 0s 535255150e-09 1s 1s 535257070e-09 1s 1s 535263350e-09 0s 0s 535265390e-09 1s 1s 535267350e-09 1s 1s 535273590e-09 0s 0s 535275630e-09 1s 1s 535277630e-09 1s 1s 535283830e-09 0s 0s 535285870e-09 1s 1s 535287910e-09 1s 1s 535294070e-09 0s 0s 535296110e-09 1s 1s 535298190e-09 1s 1s 535304310e-09 0s 0s 535306350e-09 1s 1s 535308470e-09 1s 1s 535314550e-09 0s 0s 535316590e-09 1s 1s 535318750e-09 1s 1s 535324790e-09 0s 0s 535326830e-09 1s 1s 535329030e-09 1s 1s 535335030e-09 0s 0s 535337070e-09 1s 1s 535339310e-09 1s 1s 535345270e-09 0s 0s 535347310e-09 1s 1s 535349590e-09 1s 1s 535355510e-09 0s 0s 535357550e-09 1s 1s 535359870e-09 1s 1s 535365750e-09 0s 0s 535367790e-09 1s 1s 535370150e-09 1s 1s 535375990e-09 0s 0s 535378030e-09 1s 1s 535380430e-09 1s 1s 535386230e-09 0s 0s 535388270e-09 1s 1s 535390710e-09 1s 1s 535396470e-09 0s 0s 535398510e-09 1s 1s 535400990e-09 1s 1s 535406710e-09 0s 0s 535408750e-09 1s 1s 535411270e-09 1s 1s 535416950e-09 0s 0s 535418990e-09 1s 1s 535421550e-09 1s 1s 535427190e-09 0s 0s 535429230e-09 1s 1s 535431830e-09 1s 1s 535437430e-09 0s 0s 535439470e-09 1s 1s 535442110e-09 1s 1s 535447670e-09 0s 0s 535449710e-09 1s 1s 535452390e-09 1s 1s 535457910e-09 0s 0s 535459950e-09 1s 1s 535462670e-09 1s 1s 535468150e-09 0s 0s 535470190e-09 1s 1s 535472950e-09 1s 1s 535478390e-09 0s 0s 535480430e-09 1s 1s 535483230e-09 1s 1s 535488630e-09 0s 0s 535490670e-09 1s 1s 535493510e-09 1s 1s 535498870e-09 0s 0s 535500910e-09 1s 1s 535503790e-09 1s 1s 535509110e-09 0s 0s 535511150e-09 1s 1s 535514070e-09 1s 1s 535519350e-09 0s 0s 535521390e-09 1s 1s 535524350e-09 1s 1s 535529590e-09 0s 0s 535531630e-09 1s 1s 535534630e-09 1s 1s 535539830e-09 0s 0s 535541870e-09 1s 1s 535544910e-09 1s 1s 535550070e-09 0s 0s 535552110e-09 1s 1s 535555190e-09 1s 1s 535560310e-09 0s 0s 535562350e-09 1s 1s 535565470e-09 1s 1s 535570550e-09 0s 0s 535572590e-09 1s 1s 535575750e-09 1s 1s 535580790e-09 0s 0s 535582830e-09 1s 1s 535586030e-09 1s 1s 535591030e-09 0s 0s 535593070e-09 1s 1s 535596310e-09 1s 1s 535601270e-09 0s 0s 535603310e-09 1s 1s 535606590e-09 1s 1s 535611510e-09 0s 0s 535613550e-09 1s 1s 535616870e-09 1s 1s 535621750e-09 0s 0s 535623790e-09 1s 1s 535627150e-09 1s 1s 535631990e-09 0s 0s 535634030e-09 1s 1s 535637430e-09 1s 1s 535642230e-09 0s 0s 535644270e-09 1s 1s 535647710e-09 1s 1s 535652470e-09 0s 0s 535654510e-09 1s 1s 535657990e-09 1s 1s 535662710e-09 0s 0s 535664750e-09 1s 1s 535668270e-09 1s 1s 535672950e-09 0s 0s 535674990e-09 1s 1s 535678550e-09 1s 1s 535683190e-09 0s 0s 535685230e-09 1s 1s 535688830e-09 1s 1s 535693430e-09 0s 0s 535695470e-09 1s 1s 535699110e-09 1s 1s 535703670e-09 0s 0s 535705710e-09 1s 1s 535709390e-09 1s 1s 535713910e-09 0s 0s 535715950e-09 1s 1s 535719670e-09 1s 1s 535724150e-09 0s 0s 535726190e-09 1s 1s 535729950e-09 1s 1s 535734390e-09 0s 0s 535736430e-09 1s 1s 535740230e-09 1s 1s 535744630e-09 0s 0s 535746670e-09 1s 1s 535750510e-09 1s 1s 535754870e-09 0s 0s 535756910e-09 1s 1s 535760790e-09 1s 1s 535765110e-09 0s 0s 535767150e-09 1s 1s 535771070e-09 1s 1s 535775350e-09 0s 0s 535777390e-09 1s 1s 535781350e-09 1s 1s 535785590e-09 0s 0s 535787630e-09 1s 1s 535791630e-09 1s 1s 535795830e-09 0s 0s 535797870e-09 1s 1s 535801910e-09 1s 1s 535806070e-09 0s 0s 535808110e-09 1s 1s 535812190e-09 1s 1s 535816310e-09 0s 0s 535818350e-09 1s 1s 535822470e-09 1s 1s 535826550e-09 0s 0s 535828590e-09 1s 1s 535832750e-09 1s 1s 535836790e-09 0s 0s 535838830e-09 1s 1s 535843030e-09 1s 1s 535847030e-09 0s 0s 535849070e-09 1s 1s 535853310e-09 1s 1s 535857270e-09 0s 0s 535859310e-09 1s 1s 535863590e-09 1s 1s 535867510e-09 0s 0s 535869550e-09 1s 1s 535873870e-09 1s 1s 535877750e-09 0s 0s 535879790e-09 1s 1s 535884150e-09 1s 1s 535887990e-09 0s 0s 535890030e-09 1s 1s 535894430e-09 1s 1s 535898230e-09 0s 0s 535900270e-09 1s 1s 535904710e-09 1s 1s 535908470e-09 0s 0s 535910510e-09 1s 1s 535914990e-09 1s 1s 535918710e-09 0s 0s 535920750e-09 1s 1s 535925270e-09 1s 1s 535928950e-09 0s 0s 535930990e-09 1s 1s 535935550e-09 1s 1s 535939190e-09 0s 0s 535941230e-09 1s 1s 535945830e-09 1s 1s 535949430e-09 0s 0s 535951470e-09 1s 1s 535956110e-09 1s 1s 535959670e-09 0s 0s 535961710e-09 1s 1s 535966390e-09 1s 1s 535969910e-09 0s 0s 535971950e-09 1s 1s 535976670e-09 1s 1s 535980150e-09 0s 0s 535982190e-09 1s 1s 535986950e-09 1s 1s 535990390e-09 0s 0s 535992430e-09 1s 1s 535997230e-09 1s 1s 536000630e-09 0s 0s 536002670e-09 1s 1s 536007510e-09 1s 1s 536010870e-09 0s 0s 536012910e-09 1s 1s 536017790e-09 1s 1s 536021110e-09 0s 0s 536023150e-09 1s 1s 536028070e-09 1s 1s 536031350e-09 0s 0s 536033390e-09 1s 1s 536038350e-09 1s 1s 536041590e-09 0s 0s 536043630e-09 1s 1s 536048630e-09 1s 1s 536051830e-09 0s 0s 536053870e-09 1s 1s 536058910e-09 1s 1s 536062070e-09 0s 0s 536064110e-09 1s 1s 536069190e-09 1s 1s 536072310e-09 0s 0s 536074350e-09 1s 1s 536079470e-09 1s 1s 536082550e-09 0s 0s 536084590e-09 1s 1s 536089750e-09 1s 1s 536092790e-09 0s 0s 536094830e-09 1s 1s 536100030e-09 1s 1s 536103030e-09 0s 0s 536105070e-09 1s 1s 536110310e-09 1s 1s 536113270e-09 0s 0s 536115310e-09 1s 1s 536120590e-09 1s 1s 536123510e-09 0s 0s 536125550e-09 1s 1s 536130870e-09 1s 1s 536133750e-09 0s 0s 536135790e-09 1s 1s 536141150e-09 1s 1s 536143990e-09 0s 0s 536146030e-09 1s 1s 536151430e-09 1s 1s 536154230e-09 0s 0s 536156270e-09 1s 1s 536161710e-09 1s 1s 536164470e-09 0s 0s 536166510e-09 1s 1s 536171990e-09 1s 1s 536174710e-09 0s 0s 536176750e-09 1s 1s 536182270e-09 1s 1s 536184950e-09 0s 0s 536186990e-09 1s 1s 536192550e-09 1s 1s 536195190e-09 0s 0s 536197230e-09 1s 1s 536202830e-09 1s 1s 536205430e-09 0s 0s 536207470e-09 1s 1s 536213110e-09 1s 1s 536215670e-09 0s 0s 536217710e-09 1s 1s 536223390e-09 1s 1s 536225910e-09 0s 0s 536227950e-09 1s 1s 536233670e-09 1s 1s 536236150e-09 0s 0s 536238190e-09 1s 1s 536243950e-09 1s 1s 536246390e-09 0s 0s 536248430e-09 1s 1s 536254230e-09 1s 1s 536256630e-09 0s 0s 536258670e-09 1s 1s 536264510e-09 1s 1s 536266870e-09 0s 0s 536268910e-09 1s 1s 536274790e-09 1s 1s 536277110e-09 0s 0s 536279150e-09 1s 1s 536285070e-09 1s 1s 536287350e-09 0s 0s 536289390e-09 1s 1s 536295350e-09 1s 1s 536297590e-09 0s 0s 536299630e-09 1s 1s 536305630e-09 1s 1s 536307830e-09 0s 0s 536309870e-09 1s 1s 536315910e-09 1s 1s 536318070e-09 0s 0s 536320110e-09 1s 1s 536326190e-09 1s 1s 536328310e-09 0s 0s 536330350e-09 1s 1s 536336470e-09 1s 1s 536338550e-09 0s 0s 536340590e-09 1s 1s 536346750e-09 1s 1s 536348790e-09 0s 0s 536350830e-09 1s 1s 536357030e-09 1s 1s 536359030e-09 0s 0s 536361070e-09 1s 1s 536367310e-09 1s 1s 536369270e-09 0s 0s 536371310e-09 1s 1s 536377590e-09 1s 1s 536379510e-09 0s 0s 536381550e-09 1s 1s 536387870e-09 1s 1s 536389750e-09 0s 0s 536391790e-09 1s 1s 536398150e-09 1s 1s 536399990e-09 0s 0s 536402030e-09 1s 1s 536408430e-09 1s 1s 536410230e-09 0s 0s 536412270e-09 1s 1s 536418710e-09 1s 1s 536420470e-09 0s 0s 536422510e-09 1s 1s 536428990e-09 1s 1s 536430710e-09 0s 0s 536432750e-09 1s 1s 536439270e-09 1s 1s 536440950e-09 0s 0s 536442990e-09 1s 1s 536449550e-09 1s 1s 536451190e-09 0s 0s 536453230e-09 1s 1s 536459830e-09 1s 1s 536461430e-09 0s 0s 536463470e-09 1s 1s 536470110e-09 1s 1s 536471670e-09 0s 0s 536473710e-09 1s 1s 536480390e-09 1s 1s 536481910e-09 0s 0s 536483950e-09 1s 1s 536490670e-09 1s 1s 536492150e-09 0s 0s 536494190e-09 1s 1s 536500950e-09 1s 1s 536502390e-09 0s 0s 536504430e-09 1s 1s 536511230e-09 1s 1s 536512630e-09 0s 0s 536514670e-09 1s 1s 536521510e-09 1s 1s 536522870e-09 0s 0s 536524910e-09 1s 1s 536531790e-09 1s 1s 536533110e-09 0s 0s 536535150e-09 1s 1s 536542070e-09 1s 1s 536543350e-09 0s 0s 536545390e-09 1s 1s 536552350e-09 1s 1s 536553590e-09 0s 0s 536555630e-09 1s 1s 536562630e-09 1s 1s 536563830e-09 0s 0s 536565870e-09 1s 1s 536572910e-09 1s 1s 536574070e-09 0s 0s 536576110e-09 1s 1s 536583190e-09 1s 1s 536584310e-09 0s 0s 536586350e-09 1s 1s 536593470e-09 1s 1s 536594550e-09 0s 0s 536596590e-09 1s 1s 536603750e-09 1s 1s 536604790e-09 0s 0s 536606830e-09 1s 1s 536614030e-09 1s 1s 536615030e-09 0s 0s 536617070e-09 1s 1s 536624310e-09 1s 1s 536625270e-09 0s 0s 536627310e-09 1s 1s 536634590e-09 1s 1s 536635510e-09 0s 0s 536637550e-09 1s 1s 536644870e-09 1s 1s 536645750e-09 0s 0s 536647790e-09 1s 1s 536655150e-09 1s 1s 536655990e-09 0s 0s 536658030e-09 1s 1s 536665430e-09 1s 1s 536666230e-09 0s 0s 536668270e-09 1s 1s 536675710e-09 1s 1s 536676470e-09 0s 0s 536678510e-09 1s 1s 536685990e-09 1s 1s 536686710e-09 0s 0s 536688750e-09 1s 1s 536696270e-09 1s 1s 536696950e-09 0s 0s 536698990e-09 1s 1s 536706550e-09 1s 1s 536707190e-09 0s 0s 536709230e-09 1s 1s 536716830e-09 1s 1s 536717430e-09 0s 0s 536719470e-09 1s 1s 536727110e-09 1s 1s 536727670e-09 0s 0s 536729710e-09 1s 1s 536737390e-09 1s 1s 536737910e-09 0s 0s 536739950e-09 1s 1s 536747670e-09 1s 1s 536748150e-09 0s 0s 536750190e-09 1s 1s 536757950e-09 1s 1s 536758390e-09 0s 0s 536760430e-09 1s 1s 536768230e-09 1s 1s 536768630e-09 0s 0s 536770670e-09 1s 1s 536778510e-09 1s 1s 536778870e-09 0s 0s 536780910e-09 1s 1s 536788790e-09 1s 1s 536789110e-09 0s 0s 536791150e-09 1s 1s 536799070e-09 1s 1s 536799350e-09 0s 0s 536801390e-09 1s 1s 536809350e-09 1s 1s 536809590e-09 0s 0s 536811630e-09 1s 1s 536819630e-09 1s 1s 536819830e-09 0s 0s 536821870e-09 1s 1s 536829910e-09 1s 1s 536830070e-09 0s 0s 536832110e-09 1s 1s 536840190e-09 1s 1s 536840310e-09 0s 0s 536842350e-09 1s 1s 536850470e-09 1s 1s 536850550e-09 0s 0s 536852590e-09 1s 1s 536860750e-09 1s 1s 536860790e-09 0s 0s 536862830e-09 1s 1s 536871030e-09 0s 0s 536873070e-09 1s 1s 536881270e-09 0s 0s 536881310e-09 0s 0s 536883310e-09 1s 1s 536891510e-09 0s 0s 536891590e-09 0s 0s 536893550e-09 1s 1s 536901750e-09 0s 0s 536901870e-09 0s 0s 536903790e-09 1s 1s 536911990e-09 0s 0s 536912150e-09 0s 0s 536914030e-09 1s 1s 536922230e-09 0s 0s 536922430e-09 0s 0s 536924270e-09 1s 1s 536932470e-09 0s 0s 536932710e-09 0s 0s 536934510e-09 1s 1s 536942710e-09 0s 0s 536942990e-09 0s 0s 536944750e-09 1s 1s 536952950e-09 0s 0s 536953270e-09 0s 0s 536954990e-09 1s 1s 536963190e-09 0s 0s 536963550e-09 0s 0s 536965230e-09 1s 1s 536973430e-09 0s 0s 536973830e-09 0s 0s 536975470e-09 1s 1s 536983670e-09 0s 0s 536984110e-09 0s 0s 536985710e-09 1s 1s 536993910e-09 0s 0s 536994390e-09 0s 0s 536995950e-09 1s 1s 537004150e-09 0s 0s 537004670e-09 0s 0s 537006190e-09 1s 1s 537014390e-09 0s 0s 537014950e-09 0s 0s 537016430e-09 1s 1s 537024630e-09 0s 0s 537025230e-09 0s 0s 537026670e-09 1s 1s 537034870e-09 0s 0s 537035510e-09 0s 0s 537036910e-09 1s 1s 537045110e-09 0s 0s 537045790e-09 0s 0s 537047150e-09 1s 1s 537055350e-09 0s 0s 537056070e-09 0s 0s 537057390e-09 1s 1s 537065590e-09 0s 0s 537066350e-09 0s 0s 537067630e-09 1s 1s 537075830e-09 0s 0s 537076630e-09 0s 0s 537077870e-09 1s 1s 537086070e-09 0s 0s 537086910e-09 0s 0s 537088110e-09 1s 1s 537096310e-09 0s 0s 537097190e-09 0s 0s 537098350e-09 1s 1s 537106550e-09 0s 0s 537107470e-09 0s 0s 537108590e-09 1s 1s 537116790e-09 0s 0s 537117750e-09 0s 0s 537118830e-09 1s 1s 537127030e-09 0s 0s 537128030e-09 0s 0s 537129070e-09 1s 1s 537137270e-09 0s 0s 537138310e-09 0s 0s 537139310e-09 1s 1s 537147510e-09 0s 0s 537148590e-09 0s 0s 537149550e-09 1s 1s 537157750e-09 0s 0s 537158870e-09 0s 0s 537159790e-09 1s 1s 537167990e-09 0s 0s 537169150e-09 0s 0s 537170030e-09 1s 1s 537178230e-09 0s 0s 537179430e-09 0s 0s 537180270e-09 1s 1s 537188470e-09 0s 0s 537189710e-09 0s 0s 537190510e-09 1s 1s 537198710e-09 0s 0s 537199990e-09 0s 0s 537200750e-09 1s 1s 537208950e-09 0s 0s 537210270e-09 0s 0s 537210990e-09 1s 1s 537219190e-09 0s 0s 537220550e-09 0s 0s 537221230e-09 1s 1s 537229430e-09 0s 0s 537230830e-09 0s 0s 537231470e-09 1s 1s 537239670e-09 0s 0s 537241110e-09 0s 0s 537241710e-09 1s 1s 537249910e-09 0s 0s 537251390e-09 0s 0s 537251950e-09 1s 1s 537260150e-09 0s 0s 537261670e-09 0s 0s 537262190e-09 1s 1s 537270390e-09 0s 0s 537271950e-09 0s 0s 537272430e-09 1s 1s 537280630e-09 0s 0s 537282230e-09 0s 0s 537282670e-09 1s 1s 537290870e-09 0s 0s 537292510e-09 0s 0s 537292910e-09 1s 1s 537301110e-09 0s 0s 537302790e-09 0s 0s 537303150e-09 1s 1s 537311350e-09 0s 0s 537313070e-09 0s 0s 537313390e-09 1s 1s 537321590e-09 0s 0s 537323350e-09 0s 0s 537323630e-09 1s 1s 537331830e-09 0s 0s 537333630e-09 0s 0s 537333870e-09 1s 1s 537342070e-09 0s 0s 537343910e-09 0s 0s 537344110e-09 1s 1s 537352310e-09 0s 0s 537354190e-09 0s 0s 537354350e-09 1s 1s 537362550e-09 0s 0s 537364470e-09 0s 0s 537364590e-09 1s 1s 537372790e-09 0s 0s 537374750e-09 0s 0s 537374830e-09 1s 1s 537383030e-09 0s 0s 537385030e-09 0s 0s 537385070e-09 1s 1s 537393270e-09 0s 0s 537395310e-09 1s 1s 537395350e-09 1s 1s 537403550e-09 0s 0s 537405550e-09 1s 1s 537405630e-09 1s 1s 537413790e-09 0s 0s 537415790e-09 1s 1s 537415910e-09 1s 1s 537424030e-09 0s 0s 537426030e-09 1s 1s 537426190e-09 1s 1s 537434270e-09 0s 0s 537436270e-09 1s 1s 537436470e-09 1s 1s 537444510e-09 0s 0s 537446510e-09 1s 1s 537446750e-09 1s 1s 537454750e-09 0s 0s 537456750e-09 1s 1s 537457030e-09 1s 1s 537464990e-09 0s 0s 537466990e-09 1s 1s 537467310e-09 1s 1s 537475230e-09 0s 0s 537477230e-09 1s 1s 537477590e-09 1s 1s 537485470e-09 0s 0s 537487470e-09 1s 1s 537487870e-09 1s 1s 537495710e-09 0s 0s 537497710e-09 1s 1s 537498150e-09 1s 1s 537505950e-09 0s 0s 537507950e-09 1s 1s 537508430e-09 1s 1s 537516190e-09 0s 0s 537518190e-09 1s 1s 537518710e-09 1s 1s 537526430e-09 0s 0s 537528430e-09 1s 1s 537528990e-09 1s 1s 537536670e-09 0s 0s 537538670e-09 1s 1s 537539270e-09 1s 1s 537546910e-09 0s 0s 537548910e-09 1s 1s 537549550e-09 1s 1s 537557150e-09 0s 0s 537559150e-09 1s 1s 537559830e-09 1s 1s 537567390e-09 0s 0s 537569390e-09 1s 1s 537570110e-09 1s 1s 537577630e-09 0s 0s 537579630e-09 1s 1s 537580390e-09 1s 1s 537587870e-09 0s 0s 537589870e-09 1s 1s 537590670e-09 1s 1s 537598110e-09 0s 0s 537600110e-09 1s 1s 537600950e-09 1s 1s 537608350e-09 0s 0s 537610350e-09 1s 1s 537611230e-09 1s 1s 537618590e-09 0s 0s 537620590e-09 1s 1s 537621510e-09 1s 1s 537628830e-09 0s 0s 537630830e-09 1s 1s 537631790e-09 1s 1s 537639070e-09 0s 0s 537641070e-09 1s 1s 537642070e-09 1s 1s 537649310e-09 0s 0s 537651310e-09 1s 1s 537652350e-09 1s 1s 537659550e-09 0s 0s 537661550e-09 1s 1s 537662630e-09 1s 1s 537669790e-09 0s 0s 537671790e-09 1s 1s 537672910e-09 1s 1s 537680030e-09 0s 0s 537682030e-09 1s 1s 537683190e-09 1s 1s 537690270e-09 0s 0s 537692270e-09 1s 1s 537693470e-09 1s 1s 537700510e-09 0s 0s 537702510e-09 1s 1s 537703750e-09 1s 1s 537710750e-09 0s 0s 537712750e-09 1s 1s 537714030e-09 1s 1s 537720990e-09 0s 0s 537722990e-09 1s 1s 537724310e-09 1s 1s 537731230e-09 0s 0s 537733230e-09 1s 1s 537734590e-09 1s 1s 537741470e-09 0s 0s 537743470e-09 1s 1s 537744870e-09 1s 1s 537751710e-09 0s 0s 537753710e-09 1s 1s 537755150e-09 1s 1s 537761950e-09 0s 0s 537763950e-09 1s 1s 537765430e-09 1s 1s 537772190e-09 0s 0s 537774190e-09 1s 1s 537775710e-09 1s 1s 537782430e-09 0s 0s 537784430e-09 1s 1s 537785990e-09 1s 1s 537792670e-09 0s 0s 537794670e-09 1s 1s 537796270e-09 1s 1s 537802910e-09 0s 0s 537804910e-09 1s 1s 537806550e-09 1s 1s 537813150e-09 0s 0s 537815150e-09 1s 1s 537816830e-09 1s 1s 537823390e-09 0s 0s 537825390e-09 1s 1s 537827110e-09 1s 1s 537833630e-09 0s 0s 537835630e-09 1s 1s 537837390e-09 1s 1s 537843870e-09 0s 0s 537845870e-09 1s 1s 537847670e-09 1s 1s 537854110e-09 0s 0s 537856110e-09 1s 1s 537857950e-09 1s 1s 537864350e-09 0s 0s 537866350e-09 1s 1s 537868230e-09 1s 1s 537874590e-09 0s 0s 537876590e-09 1s 1s 537878510e-09 1s 1s 537884830e-09 0s 0s 537886830e-09 1s 1s 537888790e-09 1s 1s 537895070e-09 0s 0s 537897070e-09 1s 1s 537899070e-09 1s 1s 537905310e-09 0s 0s 537907310e-09 1s 1s 537909350e-09 1s 1s 537915550e-09 0s 0s 537917550e-09 1s 1s 537919630e-09 1s 1s 537925790e-09 0s 0s 537927790e-09 1s 1s 537929910e-09 1s 1s 537936030e-09 0s 0s 537938030e-09 1s 1s 537940190e-09 1s 1s 537946270e-09 0s 0s 537948270e-09 1s 1s 537950470e-09 1s 1s 537956510e-09 0s 0s 537958510e-09 1s 1s 537960750e-09 1s 1s 537966750e-09 0s 0s 537968750e-09 1s 1s 537971030e-09 1s 1s 537976990e-09 0s 0s 537978990e-09 1s 1s 537981310e-09 1s 1s 537987230e-09 0s 0s 537989230e-09 1s 1s 537991590e-09 1s 1s 537997470e-09 0s 0s 537999470e-09 1s 1s 538001870e-09 1s 1s 538007710e-09 0s 0s 538009710e-09 1s 1s 538012150e-09 1s 1s 538017950e-09 0s 0s 538019950e-09 1s 1s 538022430e-09 1s 1s 538028190e-09 0s 0s 538030190e-09 1s 1s 538032710e-09 1s 1s 538038430e-09 0s 0s 538040430e-09 1s 1s 538042990e-09 1s 1s 538048670e-09 0s 0s 538050670e-09 1s 1s 538053270e-09 1s 1s 538058910e-09 0s 0s 538060910e-09 1s 1s 538063550e-09 1s 1s 538069150e-09 0s 0s 538071150e-09 1s 1s 538073830e-09 1s 1s 538079390e-09 0s 0s 538081390e-09 1s 1s 538084110e-09 1s 1s 538089630e-09 0s 0s 538091630e-09 1s 1s 538094390e-09 1s 1s 538099870e-09 0s 0s 538101870e-09 1s 1s 538104670e-09 1s 1s 538110110e-09 0s 0s 538112110e-09 1s 1s 538114950e-09 1s 1s 538120350e-09 0s 0s 538122350e-09 1s 1s 538125230e-09 1s 1s 538130590e-09 0s 0s 538132590e-09 1s 1s 538135510e-09 1s 1s 538140830e-09 0s 0s 538142830e-09 1s 1s 538145790e-09 1s 1s 538151070e-09 0s 0s 538153070e-09 1s 1s 538156070e-09 1s 1s 538161310e-09 0s 0s 538163310e-09 1s 1s 538166350e-09 1s 1s 538171550e-09 0s 0s 538173550e-09 1s 1s 538176630e-09 1s 1s 538181790e-09 0s 0s 538183790e-09 1s 1s 538186910e-09 1s 1s 538192030e-09 0s 0s 538194030e-09 1s 1s 538197190e-09 1s 1s 538202270e-09 0s 0s 538204270e-09 1s 1s 538207470e-09 1s 1s 538212510e-09 0s 0s 538214510e-09 1s 1s 538217750e-09 1s 1s 538222750e-09 0s 0s 538224750e-09 1s 1s 538228030e-09 1s 1s 538232990e-09 0s 0s 538234990e-09 1s 1s 538238310e-09 1s 1s 538243230e-09 0s 0s 538245230e-09 1s 1s 538248590e-09 1s 1s 538253470e-09 0s 0s 538255470e-09 1s 1s 538258870e-09 1s 1s 538263710e-09 0s 0s 538265710e-09 1s 1s 538269150e-09 1s 1s 538273950e-09 0s 0s 538275950e-09 1s 1s 538279430e-09 1s 1s 538284190e-09 0s 0s 538286190e-09 1s 1s 538289710e-09 1s 1s 538294430e-09 0s 0s 538296430e-09 1s 1s 538299990e-09 1s 1s 538304670e-09 0s 0s 538306670e-09 1s 1s 538310270e-09 1s 1s 538314910e-09 0s 0s 538316910e-09 1s 1s 538320550e-09 1s 1s 538325150e-09 0s 0s 538327150e-09 1s 1s 538330830e-09 1s 1s 538335390e-09 0s 0s 538337390e-09 1s 1s 538341110e-09 1s 1s 538345630e-09 0s 0s 538347630e-09 1s 1s 538351390e-09 1s 1s 538355870e-09 0s 0s 538357870e-09 1s 1s 538361670e-09 1s 1s 538366110e-09 0s 0s 538368110e-09 1s 1s 538371950e-09 1s 1s 538376350e-09 0s 0s 538378350e-09 1s 1s 538382230e-09 1s 1s 538386590e-09 0s 0s 538388590e-09 1s 1s 538392510e-09 1s 1s 538396830e-09 0s 0s 538398830e-09 1s 1s 538402790e-09 1s 1s 538407070e-09 0s 0s 538409070e-09 1s 1s 538413070e-09 1s 1s 538417310e-09 0s 0s 538419310e-09 1s 1s 538423350e-09 1s 1s 538427550e-09 0s 0s 538429550e-09 1s 1s 538433630e-09 1s 1s 538437790e-09 0s 0s 538439790e-09 1s 1s 538443910e-09 1s 1s 538448030e-09 0s 0s 538450030e-09 1s 1s 538454190e-09 1s 1s 538458270e-09 0s 0s 538460270e-09 1s 1s 538464470e-09 1s 1s 538468510e-09 0s 0s 538470510e-09 1s 1s 538474750e-09 1s 1s 538478750e-09 0s 0s 538480750e-09 1s 1s 538485030e-09 1s 1s 538488990e-09 0s 0s 538490990e-09 1s 1s 538495310e-09 1s 1s 538499230e-09 0s 0s 538501230e-09 1s 1s 538505590e-09 1s 1s 538509470e-09 0s 0s 538511470e-09 1s 1s 538515870e-09 1s 1s 538519710e-09 0s 0s 538521710e-09 1s 1s 538526150e-09 1s 1s 538529950e-09 0s 0s 538531950e-09 1s 1s 538536430e-09 1s 1s 538540190e-09 0s 0s 538542190e-09 1s 1s 538546710e-09 1s 1s 538550430e-09 0s 0s 538552430e-09 1s 1s 538556990e-09 1s 1s 538560670e-09 0s 0s 538562670e-09 1s 1s 538567270e-09 1s 1s 538570910e-09 0s 0s 538572910e-09 1s 1s 538577550e-09 1s 1s 538581150e-09 0s 0s 538583150e-09 1s 1s 538587830e-09 1s 1s 538591390e-09 0s 0s 538593390e-09 1s 1s 538598110e-09 1s 1s 538601630e-09 0s 0s 538603630e-09 1s 1s 538608390e-09 1s 1s 538611870e-09 0s 0s 538613870e-09 1s 1s 538618670e-09 1s 1s 538622110e-09 0s 0s 538624110e-09 1s 1s 538628950e-09 1s 1s 538632350e-09 0s 0s 538634350e-09 1s 1s 538639230e-09 1s 1s 538642590e-09 0s 0s 538644590e-09 1s 1s 538649510e-09 1s 1s 538652830e-09 0s 0s 538654830e-09 1s 1s 538659790e-09 1s 1s 538663070e-09 0s 0s 538665070e-09 1s 1s 538670070e-09 1s 1s 538673310e-09 0s 0s 538675310e-09 1s 1s 538680350e-09 1s 1s 538683550e-09 0s 0s 538685550e-09 1s 1s 538690630e-09 1s 1s 538693790e-09 0s 0s 538695790e-09 1s 1s 538700910e-09 1s 1s 538704030e-09 0s 0s 538706030e-09 1s 1s 538711190e-09 1s 1s 538714270e-09 0s 0s 538716270e-09 1s 1s 538721470e-09 1s 1s 538724510e-09 0s 0s 538726510e-09 1s 1s 538731750e-09 1s 1s 538734750e-09 0s 0s 538736750e-09 1s 1s 538742030e-09 1s 1s 538744990e-09 0s 0s 538746990e-09 1s 1s 538752310e-09 1s 1s 538755230e-09 0s 0s 538757230e-09 1s 1s 538762590e-09 1s 1s 538765470e-09 0s 0s 538767470e-09 1s 1s 538772870e-09 1s 1s 538775710e-09 0s 0s 538777710e-09 1s 1s 538783150e-09 1s 1s 538785950e-09 0s 0s 538787950e-09 1s 1s 538793430e-09 1s 1s 538796190e-09 0s 0s 538798190e-09 1s 1s 538803710e-09 1s 1s 538806430e-09 0s 0s 538808430e-09 1s 1s 538813990e-09 1s 1s 538816670e-09 0s 0s 538818670e-09 1s 1s 538824270e-09 1s 1s 538826910e-09 0s 0s 538828910e-09 1s 1s 538834550e-09 1s 1s 538837150e-09 0s 0s 538839150e-09 1s 1s 538844830e-09 1s 1s 538847390e-09 0s 0s 538849390e-09 1s 1s 538855110e-09 1s 1s 538857630e-09 0s 0s 538859630e-09 1s 1s 538865390e-09 1s 1s 538867870e-09 0s 0s 538869870e-09 1s 1s 538875670e-09 1s 1s 538878110e-09 0s 0s 538880110e-09 1s 1s 538885950e-09 1s 1s 538888350e-09 0s 0s 538890350e-09 1s 1s 538896230e-09 1s 1s 538898590e-09 0s 0s 538900590e-09 1s 1s 538906510e-09 1s 1s 538908830e-09 0s 0s 538910830e-09 1s 1s 538916790e-09 1s 1s 538919070e-09 0s 0s 538921070e-09 1s 1s 538927070e-09 1s 1s 538929310e-09 0s 0s 538931310e-09 1s 1s 538937350e-09 1s 1s 538939550e-09 0s 0s 538941550e-09 1s 1s 538947630e-09 1s 1s 538949790e-09 0s 0s 538951790e-09 1s 1s 538957910e-09 1s 1s 538960030e-09 0s 0s 538962030e-09 1s 1s 538968190e-09 1s 1s 538970270e-09 0s 0s 538972270e-09 1s 1s 538978470e-09 1s 1s 538980510e-09 0s 0s 538982510e-09 1s 1s 538988750e-09 1s 1s 538990750e-09 0s 0s 538992750e-09 1s 1s 538999030e-09 1s 1s 539000990e-09 0s 0s 539002990e-09 1s 1s 539009310e-09 1s 1s 539011230e-09 0s 0s 539013230e-09 1s 1s 539019590e-09 1s 1s 539021470e-09 0s 0s 539023470e-09 1s 1s 539029870e-09 1s 1s 539031710e-09 0s 0s 539033710e-09 1s 1s 539040150e-09 1s 1s 539041950e-09 0s 0s 539043950e-09 1s 1s 539050430e-09 1s 1s 539052190e-09 0s 0s 539054190e-09 1s 1s 539060710e-09 1s 1s 539062430e-09 0s 0s 539064430e-09 1s 1s 539070990e-09 1s 1s 539072670e-09 0s 0s 539074670e-09 1s 1s 539081270e-09 1s 1s 539082910e-09 0s 0s 539084910e-09 1s 1s 539091550e-09 1s 1s 539093150e-09 0s 0s 539095150e-09 1s 1s 539101830e-09 1s 1s 539103390e-09 0s 0s 539105390e-09 1s 1s 539112110e-09 1s 1s 539113630e-09 0s 0s 539115630e-09 1s 1s 539122390e-09 1s 1s 539123870e-09 0s 0s 539125870e-09 1s 1s 539132670e-09 1s 1s 539134110e-09 0s 0s 539136110e-09 1s 1s 539142950e-09 1s 1s 539144350e-09 0s 0s 539146350e-09 1s 1s 539153230e-09 1s 1s 539154590e-09 0s 0s 539156590e-09 1s 1s 539163510e-09 1s 1s 539164830e-09 0s 0s 539166830e-09 1s 1s 539173790e-09 1s 1s 539175070e-09 0s 0s 539177070e-09 1s 1s 539184070e-09 1s 1s 539185310e-09 0s 0s 539187310e-09 1s 1s 539194350e-09 1s 1s 539195550e-09 0s 0s 539197550e-09 1s 1s 539204630e-09 1s 1s 539205790e-09 0s 0s 539207790e-09 1s 1s 539214910e-09 1s 1s 539216030e-09 0s 0s 539218030e-09 1s 1s 539225190e-09 1s 1s 539226270e-09 0s 0s 539228270e-09 1s 1s 539235470e-09 1s 1s 539236510e-09 0s 0s 539238510e-09 1s 1s 539245750e-09 1s 1s 539246750e-09 0s 0s 539248750e-09 1s 1s 539256030e-09 1s 1s 539256990e-09 0s 0s 539258990e-09 1s 1s 539266310e-09 1s 1s 539267230e-09 0s 0s 539269230e-09 1s 1s 539276590e-09 1s 1s 539277470e-09 0s 0s 539279470e-09 1s 1s 539286870e-09 1s 1s 539287710e-09 0s 0s 539289710e-09 1s 1s 539297150e-09 1s 1s 539297950e-09 0s 0s 539299950e-09 1s 1s 539307430e-09 1s 1s 539308190e-09 0s 0s 539310190e-09 1s 1s 539317710e-09 1s 1s 539318430e-09 0s 0s 539320430e-09 1s 1s 539327990e-09 1s 1s 539328670e-09 0s 0s 539330670e-09 1s 1s 539338270e-09 1s 1s 539338910e-09 0s 0s 539340910e-09 1s 1s 539348550e-09 1s 1s 539349150e-09 0s 0s 539351150e-09 1s 1s 539358830e-09 1s 1s 539359390e-09 0s 0s 539361390e-09 1s 1s 539369110e-09 1s 1s 539369630e-09 0s 0s 539371630e-09 1s 1s 539379390e-09 1s 1s 539379870e-09 0s 0s 539381870e-09 1s 1s 539389670e-09 1s 1s 539390110e-09 0s 0s 539392110e-09 1s 1s 539399950e-09 1s 1s 539400350e-09 0s 0s 539402350e-09 1s 1s 539410230e-09 1s 1s 539410590e-09 0s 0s 539412590e-09 1s 1s 539420510e-09 1s 1s 539420830e-09 0s 0s 539422830e-09 1s 1s 539430790e-09 1s 1s 539431070e-09 0s 0s 539433070e-09 1s 1s 539441070e-09 1s 1s 539441310e-09 0s 0s 539443310e-09 1s 1s 539451350e-09 1s 1s 539451550e-09 0s 0s 539453550e-09 1s 1s 539461630e-09 1s 1s 539461790e-09 0s 0s 539463790e-09 1s 1s 539471910e-09 1s 1s 539472030e-09 0s 0s 539474030e-09 1s 1s 539482190e-09 1s 1s 539482270e-09 0s 0s 539484270e-09 1s 1s 539492470e-09 1s 1s 539492510e-09 0s 0s 539494510e-09 1s 1s 539502750e-09 0s 0s 539504750e-09 1s 1s 539512990e-09 0s 0s 539513030e-09 0s 0s 539514990e-09 1s 1s 539523230e-09 0s 0s 539523310e-09 0s 0s 539525230e-09 1s 1s 539533470e-09 0s 0s 539533590e-09 0s 0s 539535470e-09 1s 1s 539543710e-09 0s 0s 539543870e-09 0s 0s 539545710e-09 1s 1s 539553950e-09 0s 0s 539554150e-09 0s 0s 539555950e-09 1s 1s 539564190e-09 0s 0s 539564430e-09 0s 0s 539566190e-09 1s 1s 539574430e-09 0s 0s 539574710e-09 0s 0s 539576430e-09 1s 1s 539584670e-09 0s 0s 539584990e-09 0s 0s 539586670e-09 1s 1s 539594910e-09 0s 0s 539595270e-09 0s 0s 539596910e-09 1s 1s 539605150e-09 0s 0s 539605550e-09 0s 0s 539607150e-09 1s 1s 539615390e-09 0s 0s 539615830e-09 0s 0s 539617390e-09 1s 1s 539625630e-09 0s 0s 539626110e-09 0s 0s 539627630e-09 1s 1s 539635870e-09 0s 0s 539636390e-09 0s 0s 539637870e-09 1s 1s 539646110e-09 0s 0s 539646670e-09 0s 0s 539648110e-09 1s 1s 539656350e-09 0s 0s 539656950e-09 0s 0s 539658350e-09 1s 1s 539666590e-09 0s 0s 539667230e-09 0s 0s 539668590e-09 1s 1s 539676830e-09 0s 0s 539677510e-09 0s 0s 539678830e-09 1s 1s 539687070e-09 0s 0s 539687790e-09 0s 0s 539689070e-09 1s 1s 539697310e-09 0s 0s 539698070e-09 0s 0s 539699310e-09 1s 1s 539707550e-09 0s 0s 539708350e-09 0s 0s 539709550e-09 1s 1s 539717790e-09 0s 0s 539718630e-09 0s 0s 539719790e-09 1s 1s 539728030e-09 0s 0s 539728910e-09 0s 0s 539730030e-09 1s 1s 539738270e-09 0s 0s 539739190e-09 0s 0s 539740270e-09 1s 1s 539748510e-09 0s 0s 539749470e-09 0s 0s 539750510e-09 1s 1s 539758750e-09 0s 0s 539759750e-09 0s 0s 539760750e-09 1s 1s 539768990e-09 0s 0s 539770030e-09 0s 0s 539770990e-09 1s 1s 539779230e-09 0s 0s 539780310e-09 0s 0s 539781230e-09 1s 1s 539789470e-09 0s 0s 539790590e-09 0s 0s 539791470e-09 1s 1s 539799710e-09 0s 0s 539800870e-09 0s 0s 539801710e-09 1s 1s 539809950e-09 0s 0s 539811150e-09 0s 0s 539811950e-09 1s 1s 539820190e-09 0s 0s 539821430e-09 0s 0s 539822190e-09 1s 1s 539830430e-09 0s 0s 539831710e-09 0s 0s 539832430e-09 1s 1s 539840670e-09 0s 0s 539841990e-09 0s 0s 539842670e-09 1s 1s 539850910e-09 0s 0s 539852270e-09 0s 0s 539852910e-09 1s 1s 539861150e-09 0s 0s 539862550e-09 0s 0s 539863150e-09 1s 1s 539871390e-09 0s 0s 539872830e-09 0s 0s 539873390e-09 1s 1s 539881630e-09 0s 0s 539883110e-09 0s 0s 539883630e-09 1s 1s 539891870e-09 0s 0s 539893390e-09 0s 0s 539893870e-09 1s 1s 539902110e-09 0s 0s 539903670e-09 0s 0s 539904110e-09 1s 1s 539912350e-09 0s 0s 539913950e-09 0s 0s 539914350e-09 1s 1s 539922590e-09 0s 0s 539924230e-09 0s 0s 539924590e-09 1s 1s 539932830e-09 0s 0s 539934510e-09 0s 0s 539934830e-09 1s 1s 539943070e-09 0s 0s 539944790e-09 0s 0s 539945070e-09 1s 1s 539953310e-09 0s 0s 539955070e-09 0s 0s 539955310e-09 1s 1s 539963550e-09 0s 0s 539965350e-09 0s 0s 539965550e-09 1s 1s 539973790e-09 0s 0s 539975630e-09 0s 0s 539975790e-09 1s 1s 539984030e-09 0s 0s 539985910e-09 0s 0s 539986030e-09 1s 1s 539994270e-09 0s 0s 539996190e-09 0s 0s 539996270e-09 1s 1s 540004510e-09 0s 0s 540006470e-09 0s 0s 540006510e-09 1s 1s 540014750e-09 0s 0s 540016750e-09 1s 1s 540016790e-09 1s 1s 540025030e-09 0s 0s 540026990e-09 1s 1s 540027070e-09 1s 1s 540035270e-09 0s 0s 540037230e-09 1s 1s 540037350e-09 1s 1s 540045510e-09 0s 0s 540047470e-09 1s 1s 540047630e-09 1s 1s 540055750e-09 0s 0s 540057710e-09 1s 1s 540057910e-09 1s 1s 540065990e-09 0s 0s 540067950e-09 1s 1s 540068190e-09 1s 1s 540076230e-09 0s 0s 540078190e-09 1s 1s 540078470e-09 1s 1s 540086470e-09 0s 0s 540088430e-09 1s 1s 540088750e-09 1s 1s 540096710e-09 0s 0s 540098670e-09 1s 1s 540099030e-09 1s 1s 540106950e-09 0s 0s 540108910e-09 1s 1s 540109310e-09 1s 1s 540117190e-09 0s 0s 540119150e-09 1s 1s 540119590e-09 1s 1s 540127430e-09 0s 0s 540129390e-09 1s 1s 540129870e-09 1s 1s 540137670e-09 0s 0s 540139630e-09 1s 1s 540140150e-09 1s 1s 540147910e-09 0s 0s 540149870e-09 1s 1s 540150430e-09 1s 1s 540158150e-09 0s 0s 540160110e-09 1s 1s 540160710e-09 1s 1s 540168390e-09 0s 0s 540170350e-09 1s 1s 540170990e-09 1s 1s 540178630e-09 0s 0s 540180590e-09 1s 1s 540181270e-09 1s 1s 540188870e-09 0s 0s 540190830e-09 1s 1s 540191550e-09 1s 1s 540199110e-09 0s 0s 540201070e-09 1s 1s 540201830e-09 1s 1s 540209350e-09 0s 0s 540211310e-09 1s 1s 540212110e-09 1s 1s 540219590e-09 0s 0s 540221550e-09 1s 1s 540222390e-09 1s 1s 540229830e-09 0s 0s 540231790e-09 1s 1s 540232670e-09 1s 1s 540240070e-09 0s 0s 540242030e-09 1s 1s 540242950e-09 1s 1s 540250310e-09 0s 0s 540252270e-09 1s 1s 540253230e-09 1s 1s 540260550e-09 0s 0s 540262510e-09 1s 1s 540263510e-09 1s 1s 540270790e-09 0s 0s 540272750e-09 1s 1s 540273790e-09 1s 1s 540281030e-09 0s 0s 540282990e-09 1s 1s 540284070e-09 1s 1s 540291270e-09 0s 0s 540293230e-09 1s 1s 540294350e-09 1s 1s 540301510e-09 0s 0s 540303470e-09 1s 1s 540304630e-09 1s 1s 540311750e-09 0s 0s 540313710e-09 1s 1s 540314910e-09 1s 1s 540321990e-09 0s 0s 540323950e-09 1s 1s 540325190e-09 1s 1s 540332230e-09 0s 0s 540334190e-09 1s 1s 540335470e-09 1s 1s 540342470e-09 0s 0s 540344430e-09 1s 1s 540345750e-09 1s 1s 540352710e-09 0s 0s 540354670e-09 1s 1s 540356030e-09 1s 1s 540362950e-09 0s 0s 540364910e-09 1s 1s 540366310e-09 1s 1s 540373190e-09 0s 0s 540375150e-09 1s 1s 540376590e-09 1s 1s 540383430e-09 0s 0s 540385390e-09 1s 1s 540386870e-09 1s 1s 540393670e-09 0s 0s 540395630e-09 1s 1s 540397150e-09 1s 1s 540403910e-09 0s 0s 540405870e-09 1s 1s 540407430e-09 1s 1s 540414150e-09 0s 0s 540416110e-09 1s 1s 540417710e-09 1s 1s 540424390e-09 0s 0s 540426350e-09 1s 1s 540427990e-09 1s 1s 540434630e-09 0s 0s 540436590e-09 1s 1s 540438270e-09 1s 1s 540444870e-09 0s 0s 540446830e-09 1s 1s 540448550e-09 1s 1s 540455110e-09 0s 0s 540457070e-09 1s 1s 540458830e-09 1s 1s 540465350e-09 0s 0s 540467310e-09 1s 1s 540469110e-09 1s 1s 540475590e-09 0s 0s 540477550e-09 1s 1s 540479390e-09 1s 1s 540485830e-09 0s 0s 540487790e-09 1s 1s 540489670e-09 1s 1s 540496070e-09 0s 0s 540498030e-09 1s 1s 540499950e-09 1s 1s 540506310e-09 0s 0s 540508270e-09 1s 1s 540510230e-09 1s 1s 540516550e-09 0s 0s 540518510e-09 1s 1s 540520510e-09 1s 1s 540526790e-09 0s 0s 540528750e-09 1s 1s 540530790e-09 1s 1s 540537030e-09 0s 0s 540538990e-09 1s 1s 540541070e-09 1s 1s 540547270e-09 0s 0s 540549230e-09 1s 1s 540551350e-09 1s 1s 540557510e-09 0s 0s 540559470e-09 1s 1s 540561630e-09 1s 1s 540567750e-09 0s 0s 540569710e-09 1s 1s 540571910e-09 1s 1s 540577990e-09 0s 0s 540579950e-09 1s 1s 540582190e-09 1s 1s 540588230e-09 0s 0s 540590190e-09 1s 1s 540592470e-09 1s 1s 540598470e-09 0s 0s 540600430e-09 1s 1s 540602750e-09 1s 1s 540608710e-09 0s 0s 540610670e-09 1s 1s 540613030e-09 1s 1s 540618950e-09 0s 0s 540620910e-09 1s 1s 540623310e-09 1s 1s 540629190e-09 0s 0s 540631150e-09 1s 1s 540633590e-09 1s 1s 540639430e-09 0s 0s 540641390e-09 1s 1s 540643870e-09 1s 1s 540649670e-09 0s 0s 540651630e-09 1s 1s 540654150e-09 1s 1s 540659910e-09 0s 0s 540661870e-09 1s 1s 540664430e-09 1s 1s 540670150e-09 0s 0s 540672110e-09 1s 1s 540674710e-09 1s 1s 540680390e-09 0s 0s 540682350e-09 1s 1s 540684990e-09 1s 1s 540690630e-09 0s 0s 540692590e-09 1s 1s 540695270e-09 1s 1s 540700870e-09 0s 0s 540702830e-09 1s 1s 540705550e-09 1s 1s 540711110e-09 0s 0s 540713070e-09 1s 1s 540715830e-09 1s 1s 540721350e-09 0s 0s 540723310e-09 1s 1s 540726110e-09 1s 1s 540731590e-09 0s 0s 540733550e-09 1s 1s 540736390e-09 1s 1s 540741830e-09 0s 0s 540743790e-09 1s 1s 540746670e-09 1s 1s 540752070e-09 0s 0s 540754030e-09 1s 1s 540756950e-09 1s 1s 540762310e-09 0s 0s 540764270e-09 1s 1s 540767230e-09 1s 1s 540772550e-09 0s 0s 540774510e-09 1s 1s 540777510e-09 1s 1s 540782790e-09 0s 0s 540784750e-09 1s 1s 540787790e-09 1s 1s 540793030e-09 0s 0s 540794990e-09 1s 1s 540798070e-09 1s 1s 540803270e-09 0s 0s 540805230e-09 1s 1s 540808350e-09 1s 1s 540813510e-09 0s 0s 540815470e-09 1s 1s 540818630e-09 1s 1s 540823750e-09 0s 0s 540825710e-09 1s 1s 540828910e-09 1s 1s 540833990e-09 0s 0s 540835950e-09 1s 1s 540839190e-09 1s 1s 540844230e-09 0s 0s 540846190e-09 1s 1s 540849470e-09 1s 1s 540854470e-09 0s 0s 540856430e-09 1s 1s 540859750e-09 1s 1s 540864710e-09 0s 0s 540866670e-09 1s 1s 540870030e-09 1s 1s 540874950e-09 0s 0s 540876910e-09 1s 1s 540880310e-09 1s 1s 540885190e-09 0s 0s 540887150e-09 1s 1s 540890590e-09 1s 1s 540895430e-09 0s 0s 540897390e-09 1s 1s 540900870e-09 1s 1s 540905670e-09 0s 0s 540907630e-09 1s 1s 540911150e-09 1s 1s 540915910e-09 0s 0s 540917870e-09 1s 1s 540921430e-09 1s 1s 540926150e-09 0s 0s 540928110e-09 1s 1s 540931710e-09 1s 1s 540936390e-09 0s 0s 540938350e-09 1s 1s 540941990e-09 1s 1s 540946630e-09 0s 0s 540948590e-09 1s 1s 540952270e-09 1s 1s 540956870e-09 0s 0s 540958830e-09 1s 1s 540962550e-09 1s 1s 540967110e-09 0s 0s 540969070e-09 1s 1s 540972830e-09 1s 1s 540977350e-09 0s 0s 540979310e-09 1s 1s 540983110e-09 1s 1s 540987590e-09 0s 0s 540989550e-09 1s 1s 540993390e-09 1s 1s 540997830e-09 0s 0s 540999790e-09 1s 1s 541003670e-09 1s 1s 541008070e-09 0s 0s 541010030e-09 1s 1s 541013950e-09 1s 1s 541018310e-09 0s 0s 541020270e-09 1s 1s 541024230e-09 1s 1s 541028550e-09 0s 0s 541030510e-09 1s 1s 541034510e-09 1s 1s 541038790e-09 0s 0s 541040750e-09 1s 1s 541044790e-09 1s 1s 541049030e-09 0s 0s 541050990e-09 1s 1s 541055070e-09 1s 1s 541059270e-09 0s 0s 541061230e-09 1s 1s 541065350e-09 1s 1s 541069510e-09 0s 0s 541071470e-09 1s 1s 541075630e-09 1s 1s 541079750e-09 0s 0s 541081710e-09 1s 1s 541085910e-09 1s 1s 541089990e-09 0s 0s 541091950e-09 1s 1s 541096190e-09 1s 1s 541100230e-09 0s 0s 541102190e-09 1s 1s 541106470e-09 1s 1s 541110470e-09 0s 0s 541112430e-09 1s 1s 541116750e-09 1s 1s 541120710e-09 0s 0s 541122670e-09 1s 1s 541127030e-09 1s 1s 541130950e-09 0s 0s 541132910e-09 1s 1s 541137310e-09 1s 1s 541141190e-09 0s 0s 541143150e-09 1s 1s 541147590e-09 1s 1s 541151430e-09 0s 0s 541153390e-09 1s 1s 541157870e-09 1s 1s 541161670e-09 0s 0s 541163630e-09 1s 1s 541168150e-09 1s 1s 541171910e-09 0s 0s 541173870e-09 1s 1s 541178430e-09 1s 1s 541182150e-09 0s 0s 541184110e-09 1s 1s 541188710e-09 1s 1s 541192390e-09 0s 0s 541194350e-09 1s 1s 541198990e-09 1s 1s 541202630e-09 0s 0s 541204590e-09 1s 1s 541209270e-09 1s 1s 541212870e-09 0s 0s 541214830e-09 1s 1s 541219550e-09 1s 1s 541223110e-09 0s 0s 541225070e-09 1s 1s 541229830e-09 1s 1s 541233350e-09 0s 0s 541235310e-09 1s 1s 541240110e-09 1s 1s 541243590e-09 0s 0s 541245550e-09 1s 1s 541250390e-09 1s 1s 541253830e-09 0s 0s 541255790e-09 1s 1s 541260670e-09 1s 1s 541264070e-09 0s 0s 541266030e-09 1s 1s 541270950e-09 1s 1s 541274310e-09 0s 0s 541276270e-09 1s 1s 541281230e-09 1s 1s 541284550e-09 0s 0s 541286510e-09 1s 1s 541291510e-09 1s 1s 541294790e-09 0s 0s 541296750e-09 1s 1s 541301790e-09 1s 1s 541305030e-09 0s 0s 541306990e-09 1s 1s 541312070e-09 1s 1s 541315270e-09 0s 0s 541317230e-09 1s 1s 541322350e-09 1s 1s 541325510e-09 0s 0s 541327470e-09 1s 1s 541332630e-09 1s 1s 541335750e-09 0s 0s 541337710e-09 1s 1s 541342910e-09 1s 1s 541345990e-09 0s 0s 541347950e-09 1s 1s 541353190e-09 1s 1s 541356230e-09 0s 0s 541358190e-09 1s 1s 541363470e-09 1s 1s 541366470e-09 0s 0s 541368430e-09 1s 1s 541373750e-09 1s 1s 541376710e-09 0s 0s 541378670e-09 1s 1s 541384030e-09 1s 1s 541386950e-09 0s 0s 541388910e-09 1s 1s 541394310e-09 1s 1s 541397190e-09 0s 0s 541399150e-09 1s 1s 541404590e-09 1s 1s 541407430e-09 0s 0s 541409390e-09 1s 1s 541414870e-09 1s 1s 541417670e-09 0s 0s 541419630e-09 1s 1s 541425150e-09 1s 1s 541427910e-09 0s 0s 541429870e-09 1s 1s 541435430e-09 1s 1s 541438150e-09 0s 0s 541440110e-09 1s 1s 541445710e-09 1s 1s 541448390e-09 0s 0s 541450350e-09 1s 1s 541455990e-09 1s 1s 541458630e-09 0s 0s 541460590e-09 1s 1s 541466270e-09 1s 1s 541468870e-09 0s 0s 541470830e-09 1s 1s 541476550e-09 1s 1s 541479110e-09 0s 0s 541481070e-09 1s 1s 541486830e-09 1s 1s 541489350e-09 0s 0s 541491310e-09 1s 1s 541497110e-09 1s 1s 541499590e-09 0s 0s 541501550e-09 1s 1s 541507390e-09 1s 1s 541509830e-09 0s 0s 541511790e-09 1s 1s 541517670e-09 1s 1s 541520070e-09 0s 0s 541522030e-09 1s 1s 541527950e-09 1s 1s 541530310e-09 0s 0s 541532270e-09 1s 1s 541538230e-09 1s 1s 541540550e-09 0s 0s 541542510e-09 1s 1s 541548510e-09 1s 1s 541550790e-09 0s 0s 541552750e-09 1s 1s 541558790e-09 1s 1s 541561030e-09 0s 0s 541562990e-09 1s 1s 541569070e-09 1s 1s 541571270e-09 0s 0s 541573230e-09 1s 1s 541579350e-09 1s 1s 541581510e-09 0s 0s 541583470e-09 1s 1s 541589630e-09 1s 1s 541591750e-09 0s 0s 541593710e-09 1s 1s 541599910e-09 1s 1s 541601990e-09 0s 0s 541603950e-09 1s 1s 541610190e-09 1s 1s 541612230e-09 0s 0s 541614190e-09 1s 1s 541620470e-09 1s 1s 541622470e-09 0s 0s 541624430e-09 1s 1s 541630750e-09 1s 1s 541632710e-09 0s 0s 541634670e-09 1s 1s 541641030e-09 1s 1s 541642950e-09 0s 0s 541644910e-09 1s 1s 541651310e-09 1s 1s 541653190e-09 0s 0s 541655150e-09 1s 1s 541661590e-09 1s 1s 541663430e-09 0s 0s 541665390e-09 1s 1s 541671870e-09 1s 1s 541673670e-09 0s 0s 541675630e-09 1s 1s 541682150e-09 1s 1s 541683910e-09 0s 0s 541685870e-09 1s 1s 541692430e-09 1s 1s 541694150e-09 0s 0s 541696110e-09 1s 1s 541702710e-09 1s 1s 541704390e-09 0s 0s 541706350e-09 1s 1s 541712990e-09 1s 1s 541714630e-09 0s 0s 541716590e-09 1s 1s 541723270e-09 1s 1s 541724870e-09 0s 0s 541726830e-09 1s 1s 541733550e-09 1s 1s 541735110e-09 0s 0s 541737070e-09 1s 1s 541743830e-09 1s 1s 541745350e-09 0s 0s 541747310e-09 1s 1s 541754110e-09 1s 1s 541755590e-09 0s 0s 541757550e-09 1s 1s 541764390e-09 1s 1s 541765830e-09 0s 0s 541767790e-09 1s 1s 541774670e-09 1s 1s 541776070e-09 0s 0s 541778030e-09 1s 1s 541784950e-09 1s 1s 541786310e-09 0s 0s 541788270e-09 1s 1s 541795230e-09 1s 1s 541796550e-09 0s 0s 541798510e-09 1s 1s 541805510e-09 1s 1s 541806790e-09 0s 0s 541808750e-09 1s 1s 541815790e-09 1s 1s 541817030e-09 0s 0s 541818990e-09 1s 1s 541826070e-09 1s 1s 541827270e-09 0s 0s 541829230e-09 1s 1s 541836350e-09 1s 1s 541837510e-09 0s 0s 541839470e-09 1s 1s 541846630e-09 1s 1s 541847750e-09 0s 0s 541849710e-09 1s 1s 541856910e-09 1s 1s 541857990e-09 0s 0s 541859950e-09 1s 1s 541867190e-09 1s 1s 541868230e-09 0s 0s 541870190e-09 1s 1s 541877470e-09 1s 1s 541878470e-09 0s 0s 541880430e-09 1s 1s 541887750e-09 1s 1s 541888710e-09 0s 0s 541890670e-09 1s 1s 541898030e-09 1s 1s 541898950e-09 0s 0s 541900910e-09 1s 1s 541908310e-09 1s 1s 541909190e-09 0s 0s 541911150e-09 1s 1s 541918590e-09 1s 1s 541919430e-09 0s 0s 541921390e-09 1s 1s 541928870e-09 1s 1s 541929670e-09 0s 0s 541931630e-09 1s 1s 541939150e-09 1s 1s 541939910e-09 0s 0s 541941870e-09 1s 1s 541949430e-09 1s 1s 541950150e-09 0s 0s 541952110e-09 1s 1s 541959710e-09 1s 1s 541960390e-09 0s 0s 541962350e-09 1s 1s 541969990e-09 1s 1s 541970630e-09 0s 0s 541972590e-09 1s 1s 541980270e-09 1s 1s 541980870e-09 0s 0s 541982830e-09 1s 1s 541990550e-09 1s 1s 541991110e-09 0s 0s 541993070e-09 1s 1s 542000830e-09 1s 1s 542001350e-09 0s 0s 542003310e-09 1s 1s 542011110e-09 1s 1s 542011590e-09 0s 0s 542013550e-09 1s 1s 542021390e-09 1s 1s 542021830e-09 0s 0s 542023790e-09 1s 1s 542031670e-09 1s 1s 542032070e-09 0s 0s 542034030e-09 1s 1s 542041950e-09 1s 1s 542042310e-09 0s 0s 542044270e-09 1s 1s 542052230e-09 1s 1s 542052550e-09 0s 0s 542054510e-09 1s 1s 542062510e-09 1s 1s 542062790e-09 0s 0s 542064750e-09 1s 1s 542072790e-09 1s 1s 542073030e-09 0s 0s 542074990e-09 1s 1s 542083070e-09 1s 1s 542083270e-09 0s 0s 542085230e-09 1s 1s 542093350e-09 1s 1s 542093510e-09 0s 0s 542095470e-09 1s 1s 542103630e-09 1s 1s 542103750e-09 0s 0s 542105710e-09 1s 1s 542113910e-09 1s 1s 542113990e-09 0s 0s 542115950e-09 1s 1s 542124190e-09 1s 1s 542124230e-09 0s 0s 542126190e-09 1s 1s 542134470e-09 0s 0s 542136430e-09 1s 1s 542144710e-09 0s 0s 542144750e-09 0s 0s 542146670e-09 1s 1s 542154950e-09 0s 0s 542155030e-09 0s 0s 542156910e-09 1s 1s 542165190e-09 0s 0s 542165310e-09 0s 0s 542167150e-09 1s 1s 542175430e-09 0s 0s 542175590e-09 0s 0s 542177390e-09 1s 1s 542185670e-09 0s 0s 542185870e-09 0s 0s 542187630e-09 1s 1s 542195910e-09 0s 0s 542196150e-09 0s 0s 542197870e-09 1s 1s 542206150e-09 0s 0s 542206430e-09 0s 0s 542208110e-09 1s 1s 542216390e-09 0s 0s 542216710e-09 0s 0s 542218350e-09 1s 1s 542226630e-09 0s 0s 542226990e-09 0s 0s 542228590e-09 1s 1s 542236870e-09 0s 0s 542237270e-09 0s 0s 542238830e-09 1s 1s 542247110e-09 0s 0s 542247550e-09 0s 0s 542249070e-09 1s 1s 542257350e-09 0s 0s 542257830e-09 0s 0s 542259310e-09 1s 1s 542267590e-09 0s 0s 542268110e-09 0s 0s 542269550e-09 1s 1s 542277830e-09 0s 0s 542278390e-09 0s 0s 542279790e-09 1s 1s 542288070e-09 0s 0s 542288670e-09 0s 0s 542290030e-09 1s 1s 542298310e-09 0s 0s 542298950e-09 0s 0s 542300270e-09 1s 1s 542308550e-09 0s 0s 542309230e-09 0s 0s 542310510e-09 1s 1s 542318790e-09 0s 0s 542319510e-09 0s 0s 542320750e-09 1s 1s 542329030e-09 0s 0s 542329790e-09 0s 0s 542330990e-09 1s 1s 542339270e-09 0s 0s 542340070e-09 0s 0s 542341230e-09 1s 1s 542349510e-09 0s 0s 542350350e-09 0s 0s 542351470e-09 1s 1s 542359750e-09 0s 0s 542360630e-09 0s 0s 542361710e-09 1s 1s 542369990e-09 0s 0s 542370910e-09 0s 0s 542371950e-09 1s 1s 542380230e-09 0s 0s 542381190e-09 0s 0s 542382190e-09 1s 1s 542390470e-09 0s 0s 542391470e-09 0s 0s 542392430e-09 1s 1s 542400710e-09 0s 0s 542401750e-09 0s 0s 542402670e-09 1s 1s 542410950e-09 0s 0s 542412030e-09 0s 0s 542412910e-09 1s 1s 542421190e-09 0s 0s 542422310e-09 0s 0s 542423150e-09 1s 1s 542431430e-09 0s 0s 542432590e-09 0s 0s 542433390e-09 1s 1s 542441670e-09 0s 0s 542442870e-09 0s 0s 542443630e-09 1s 1s 542451910e-09 0s 0s 542453150e-09 0s 0s 542453870e-09 1s 1s 542462150e-09 0s 0s 542463430e-09 0s 0s 542464110e-09 1s 1s 542472390e-09 0s 0s 542473710e-09 0s 0s 542474350e-09 1s 1s 542482630e-09 0s 0s 542483990e-09 0s 0s 542484590e-09 1s 1s 542492870e-09 0s 0s 542494270e-09 0s 0s 542494830e-09 1s 1s 542503110e-09 0s 0s 542504550e-09 0s 0s 542505070e-09 1s 1s 542513350e-09 0s 0s 542514830e-09 0s 0s 542515310e-09 1s 1s 542523590e-09 0s 0s 542525110e-09 0s 0s 542525550e-09 1s 1s 542533830e-09 0s 0s 542535390e-09 0s 0s 542535790e-09 1s 1s 542544070e-09 0s 0s 542545670e-09 0s 0s 542546030e-09 1s 1s 542554310e-09 0s 0s 542555950e-09 0s 0s 542556270e-09 1s 1s 542564550e-09 0s 0s 542566230e-09 0s 0s 542566510e-09 1s 1s 542574790e-09 0s 0s 542576510e-09 0s 0s 542576750e-09 1s 1s 542585030e-09 0s 0s 542586790e-09 0s 0s 542586990e-09 1s 1s 542595270e-09 0s 0s 542597070e-09 0s 0s 542597230e-09 1s 1s 542605510e-09 0s 0s 542607350e-09 0s 0s 542607470e-09 1s 1s 542615750e-09 0s 0s 542617630e-09 0s 0s 542617710e-09 1s 1s 542625990e-09 0s 0s 542627910e-09 0s 0s 542627950e-09 1s 1s 542636230e-09 0s 0s 542638190e-09 1s 1s 542638230e-09 1s 1s 542646510e-09 0s 0s 542648430e-09 1s 1s 542648510e-09 1s 1s 542656750e-09 0s 0s 542658670e-09 1s 1s 542658790e-09 1s 1s 542666990e-09 0s 0s 542668910e-09 1s 1s 542669070e-09 1s 1s 542677230e-09 0s 0s 542679150e-09 1s 1s 542679350e-09 1s 1s 542687470e-09 0s 0s 542689390e-09 1s 1s 542689630e-09 1s 1s 542697710e-09 0s 0s 542699630e-09 1s 1s 542699910e-09 1s 1s 542707950e-09 0s 0s 542709870e-09 1s 1s 542710190e-09 1s 1s 542718190e-09 0s 0s 542720110e-09 1s 1s 542720470e-09 1s 1s 542728430e-09 0s 0s 542730350e-09 1s 1s 542730750e-09 1s 1s 542738670e-09 0s 0s 542740590e-09 1s 1s 542741030e-09 1s 1s 542748910e-09 0s 0s 542750830e-09 1s 1s 542751310e-09 1s 1s 542759150e-09 0s 0s 542761070e-09 1s 1s 542761590e-09 1s 1s 542769390e-09 0s 0s 542771310e-09 1s 1s 542771870e-09 1s 1s 542779630e-09 0s 0s 542781550e-09 1s 1s 542782150e-09 1s 1s 542789870e-09 0s 0s 542791790e-09 1s 1s 542792430e-09 1s 1s 542800110e-09 0s 0s 542802030e-09 1s 1s 542802710e-09 1s 1s 542810350e-09 0s 0s 542812270e-09 1s 1s 542812990e-09 1s 1s 542820590e-09 0s 0s 542822510e-09 1s 1s 542823270e-09 1s 1s 542830830e-09 0s 0s 542832750e-09 1s 1s 542833550e-09 1s 1s 542841070e-09 0s 0s 542842990e-09 1s 1s 542843830e-09 1s 1s 542851310e-09 0s 0s 542853230e-09 1s 1s 542854110e-09 1s 1s 542861550e-09 0s 0s 542863470e-09 1s 1s 542864390e-09 1s 1s 542871790e-09 0s 0s 542873710e-09 1s 1s 542874670e-09 1s 1s 542882030e-09 0s 0s 542883950e-09 1s 1s 542884950e-09 1s 1s 542892270e-09 0s 0s 542894190e-09 1s 1s 542895230e-09 1s 1s 542902510e-09 0s 0s 542904430e-09 1s 1s 542905510e-09 1s 1s 542912750e-09 0s 0s 542914670e-09 1s 1s 542915790e-09 1s 1s 542922990e-09 0s 0s 542924910e-09 1s 1s 542926070e-09 1s 1s 542933230e-09 0s 0s 542935150e-09 1s 1s 542936350e-09 1s 1s 542943470e-09 0s 0s 542945390e-09 1s 1s 542946630e-09 1s 1s 542953710e-09 0s 0s 542955630e-09 1s 1s 542956910e-09 1s 1s 542963950e-09 0s 0s 542965870e-09 1s 1s 542967190e-09 1s 1s 542974190e-09 0s 0s 542976110e-09 1s 1s 542977470e-09 1s 1s 542984430e-09 0s 0s 542986350e-09 1s 1s 542987750e-09 1s 1s 542994670e-09 0s 0s 542996590e-09 1s 1s 542998030e-09 1s 1s 543004910e-09 0s 0s 543006830e-09 1s 1s 543008310e-09 1s 1s 543015150e-09 0s 0s 543017070e-09 1s 1s 543018590e-09 1s 1s 543025390e-09 0s 0s 543027310e-09 1s 1s 543028870e-09 1s 1s 543035630e-09 0s 0s 543037550e-09 1s 1s 543039150e-09 1s 1s 543045870e-09 0s 0s 543047790e-09 1s 1s 543049430e-09 1s 1s 543056110e-09 0s 0s 543058030e-09 1s 1s 543059710e-09 1s 1s 543066350e-09 0s 0s 543068270e-09 1s 1s 543069990e-09 1s 1s 543076590e-09 0s 0s 543078510e-09 1s 1s 543080270e-09 1s 1s 543086830e-09 0s 0s 543088750e-09 1s 1s 543090550e-09 1s 1s 543097070e-09 0s 0s 543098990e-09 1s 1s 543100830e-09 1s 1s 543107310e-09 0s 0s 543109230e-09 1s 1s 543111110e-09 1s 1s 543117550e-09 0s 0s 543119470e-09 1s 1s 543121390e-09 1s 1s 543127790e-09 0s 0s 543129710e-09 1s 1s 543131670e-09 1s 1s 543138030e-09 0s 0s 543139950e-09 1s 1s 543141950e-09 1s 1s 543148270e-09 0s 0s 543150190e-09 1s 1s 543152230e-09 1s 1s 543158510e-09 0s 0s 543160430e-09 1s 1s 543162510e-09 1s 1s 543168750e-09 0s 0s 543170670e-09 1s 1s 543172790e-09 1s 1s 543178990e-09 0s 0s 543180910e-09 1s 1s 543183070e-09 1s 1s 543189230e-09 0s 0s 543191150e-09 1s 1s 543193350e-09 1s 1s 543199470e-09 0s 0s 543201390e-09 1s 1s 543203630e-09 1s 1s 543209710e-09 0s 0s 543211630e-09 1s 1s 543213910e-09 1s 1s 543219950e-09 0s 0s 543221870e-09 1s 1s 543224190e-09 1s 1s 543230190e-09 0s 0s 543232110e-09 1s 1s 543234470e-09 1s 1s 543240430e-09 0s 0s 543242350e-09 1s 1s 543244750e-09 1s 1s 543250670e-09 0s 0s 543252590e-09 1s 1s 543255030e-09 1s 1s 543260910e-09 0s 0s 543262830e-09 1s 1s 543265310e-09 1s 1s 543271150e-09 0s 0s 543273070e-09 1s 1s 543275590e-09 1s 1s 543281390e-09 0s 0s 543283310e-09 1s 1s 543285870e-09 1s 1s 543291630e-09 0s 0s 543293550e-09 1s 1s 543296150e-09 1s 1s 543301870e-09 0s 0s 543303790e-09 1s 1s 543306430e-09 1s 1s 543312110e-09 0s 0s 543314030e-09 1s 1s 543316710e-09 1s 1s 543322350e-09 0s 0s 543324270e-09 1s 1s 543326990e-09 1s 1s 543332590e-09 0s 0s 543334510e-09 1s 1s 543337270e-09 1s 1s 543342830e-09 0s 0s 543344750e-09 1s 1s 543347550e-09 1s 1s 543353070e-09 0s 0s 543354990e-09 1s 1s 543357830e-09 1s 1s 543363310e-09 0s 0s 543365230e-09 1s 1s 543368110e-09 1s 1s 543373550e-09 0s 0s 543375470e-09 1s 1s 543378390e-09 1s 1s 543383790e-09 0s 0s 543385710e-09 1s 1s 543388670e-09 1s 1s 543394030e-09 0s 0s 543395950e-09 1s 1s 543398950e-09 1s 1s 543404270e-09 0s 0s 543406190e-09 1s 1s 543409230e-09 1s 1s 543414510e-09 0s 0s 543416430e-09 1s 1s 543419510e-09 1s 1s 543424750e-09 0s 0s 543426670e-09 1s 1s 543429790e-09 1s 1s 543434990e-09 0s 0s 543436910e-09 1s 1s 543440070e-09 1s 1s 543445230e-09 0s 0s 543447150e-09 1s 1s 543450350e-09 1s 1s 543455470e-09 0s 0s 543457390e-09 1s 1s 543460630e-09 1s 1s 543465710e-09 0s 0s 543467630e-09 1s 1s 543470910e-09 1s 1s 543475950e-09 0s 0s 543477870e-09 1s 1s 543481190e-09 1s 1s 543486190e-09 0s 0s 543488110e-09 1s 1s 543491470e-09 1s 1s 543496430e-09 0s 0s 543498350e-09 1s 1s 543501750e-09 1s 1s 543506670e-09 0s 0s 543508590e-09 1s 1s 543512030e-09 1s 1s 543516910e-09 0s 0s 543518830e-09 1s 1s 543522310e-09 1s 1s 543527150e-09 0s 0s 543529070e-09 1s 1s 543532590e-09 1s 1s 543537390e-09 0s 0s 543539310e-09 1s 1s 543542870e-09 1s 1s 543547630e-09 0s 0s 543549550e-09 1s 1s 543553150e-09 1s 1s 543557870e-09 0s 0s 543559790e-09 1s 1s 543563430e-09 1s 1s 543568110e-09 0s 0s 543570030e-09 1s 1s 543573710e-09 1s 1s 543578350e-09 0s 0s 543580270e-09 1s 1s 543583990e-09 1s 1s 543588590e-09 0s 0s 543590510e-09 1s 1s 543594270e-09 1s 1s 543598830e-09 0s 0s 543600750e-09 1s 1s 543604550e-09 1s 1s 543609070e-09 0s 0s 543610990e-09 1s 1s 543614830e-09 1s 1s 543619310e-09 0s 0s 543621230e-09 1s 1s 543625110e-09 1s 1s 543629550e-09 0s 0s 543631470e-09 1s 1s 543635390e-09 1s 1s 543639790e-09 0s 0s 543641710e-09 1s 1s 543645670e-09 1s 1s 543650030e-09 0s 0s 543651950e-09 1s 1s 543655950e-09 1s 1s 543660270e-09 0s 0s 543662190e-09 1s 1s 543666230e-09 1s 1s 543670510e-09 0s 0s 543672430e-09 1s 1s 543676510e-09 1s 1s 543680750e-09 0s 0s 543682670e-09 1s 1s 543686790e-09 1s 1s 543690990e-09 0s 0s 543692910e-09 1s 1s 543697070e-09 1s 1s 543701230e-09 0s 0s 543703150e-09 1s 1s 543707350e-09 1s 1s 543711470e-09 0s 0s 543713390e-09 1s 1s 543717630e-09 1s 1s 543721710e-09 0s 0s 543723630e-09 1s 1s 543727910e-09 1s 1s 543731950e-09 0s 0s 543733870e-09 1s 1s 543738190e-09 1s 1s 543742190e-09 0s 0s 543744110e-09 1s 1s 543748470e-09 1s 1s 543752430e-09 0s 0s 543754350e-09 1s 1s 543758750e-09 1s 1s 543762670e-09 0s 0s 543764590e-09 1s 1s 543769030e-09 1s 1s 543772910e-09 0s 0s 543774830e-09 1s 1s 543779310e-09 1s 1s 543783150e-09 0s 0s 543785070e-09 1s 1s 543789590e-09 1s 1s 543793390e-09 0s 0s 543795310e-09 1s 1s 543799870e-09 1s 1s 543803630e-09 0s 0s 543805550e-09 1s 1s 543810150e-09 1s 1s 543813870e-09 0s 0s 543815790e-09 1s 1s 543820430e-09 1s 1s 543824110e-09 0s 0s 543826030e-09 1s 1s 543830710e-09 1s 1s 543834350e-09 0s 0s 543836270e-09 1s 1s 543840990e-09 1s 1s 543844590e-09 0s 0s 543846510e-09 1s 1s 543851270e-09 1s 1s 543854830e-09 0s 0s 543856750e-09 1s 1s 543861550e-09 1s 1s 543865070e-09 0s 0s 543866990e-09 1s 1s 543871830e-09 1s 1s 543875310e-09 0s 0s 543877230e-09 1s 1s 543882110e-09 1s 1s 543885550e-09 0s 0s 543887470e-09 1s 1s 543892390e-09 1s 1s 543895790e-09 0s 0s 543897710e-09 1s 1s 543902670e-09 1s 1s 543906030e-09 0s 0s 543907950e-09 1s 1s 543912950e-09 1s 1s 543916270e-09 0s 0s 543918190e-09 1s 1s 543923230e-09 1s 1s 543926510e-09 0s 0s 543928430e-09 1s 1s 543933510e-09 1s 1s 543936750e-09 0s 0s 543938670e-09 1s 1s 543943790e-09 1s 1s 543946990e-09 0s 0s 543948910e-09 1s 1s 543954070e-09 1s 1s 543957230e-09 0s 0s 543959150e-09 1s 1s 543964350e-09 1s 1s 543967470e-09 0s 0s 543969390e-09 1s 1s 543974630e-09 1s 1s 543977710e-09 0s 0s 543979630e-09 1s 1s 543984910e-09 1s 1s 543987950e-09 0s 0s 543989870e-09 1s 1s 543995190e-09 1s 1s 543998190e-09 0s 0s 544000110e-09 1s 1s 544005470e-09 1s 1s 544008430e-09 0s 0s 544010350e-09 1s 1s 544015750e-09 1s 1s 544018670e-09 0s 0s 544020590e-09 1s 1s 544026030e-09 1s 1s 544028910e-09 0s 0s 544030830e-09 1s 1s 544036310e-09 1s 1s 544039150e-09 0s 0s 544041070e-09 1s 1s 544046590e-09 1s 1s 544049390e-09 0s 0s 544051310e-09 1s 1s 544056870e-09 1s 1s 544059630e-09 0s 0s 544061550e-09 1s 1s 544067150e-09 1s 1s 544069870e-09 0s 0s 544071790e-09 1s 1s 544077430e-09 1s 1s 544080110e-09 0s 0s 544082030e-09 1s 1s 544087710e-09 1s 1s 544090350e-09 0s 0s 544092270e-09 1s 1s 544097990e-09 1s 1s 544100590e-09 0s 0s 544102510e-09 1s 1s 544108270e-09 1s 1s 544110830e-09 0s 0s 544112750e-09 1s 1s 544118550e-09 1s 1s 544121070e-09 0s 0s 544122990e-09 1s 1s 544128830e-09 1s 1s 544131310e-09 0s 0s 544133230e-09 1s 1s 544139110e-09 1s 1s 544141550e-09 0s 0s 544143470e-09 1s 1s 544149390e-09 1s 1s 544151790e-09 0s 0s 544153710e-09 1s 1s 544159670e-09 1s 1s 544162030e-09 0s 0s 544163950e-09 1s 1s 544169950e-09 1s 1s 544172270e-09 0s 0s 544174190e-09 1s 1s 544180230e-09 1s 1s 544182510e-09 0s 0s 544184430e-09 1s 1s 544190510e-09 1s 1s 544192750e-09 0s 0s 544194670e-09 1s 1s 544200790e-09 1s 1s 544202990e-09 0s 0s 544204910e-09 1s 1s 544211070e-09 1s 1s 544213230e-09 0s 0s 544215150e-09 1s 1s 544221350e-09 1s 1s 544223470e-09 0s 0s 544225390e-09 1s 1s 544231630e-09 1s 1s 544233710e-09 0s 0s 544235630e-09 1s 1s 544241910e-09 1s 1s 544243950e-09 0s 0s 544245870e-09 1s 1s 544252190e-09 1s 1s 544254190e-09 0s 0s 544256110e-09 1s 1s 544262470e-09 1s 1s 544264430e-09 0s 0s 544266350e-09 1s 1s 544272750e-09 1s 1s 544274670e-09 0s 0s 544276590e-09 1s 1s 544283030e-09 1s 1s 544284910e-09 0s 0s 544286830e-09 1s 1s 544293310e-09 1s 1s 544295150e-09 0s 0s 544297070e-09 1s 1s 544303590e-09 1s 1s 544305390e-09 0s 0s 544307310e-09 1s 1s 544313870e-09 1s 1s 544315630e-09 0s 0s 544317550e-09 1s 1s 544324150e-09 1s 1s 544325870e-09 0s 0s 544327790e-09 1s 1s 544334430e-09 1s 1s 544336110e-09 0s 0s 544338030e-09 1s 1s 544344710e-09 1s 1s 544346350e-09 0s 0s 544348270e-09 1s 1s 544354990e-09 1s 1s 544356590e-09 0s 0s 544358510e-09 1s 1s 544365270e-09 1s 1s 544366830e-09 0s 0s 544368750e-09 1s 1s 544375550e-09 1s 1s 544377070e-09 0s 0s 544378990e-09 1s 1s 544385830e-09 1s 1s 544387310e-09 0s 0s 544389230e-09 1s 1s 544396110e-09 1s 1s 544397550e-09 0s 0s 544399470e-09 1s 1s 544406390e-09 1s 1s 544407790e-09 0s 0s 544409710e-09 1s 1s 544416670e-09 1s 1s 544418030e-09 0s 0s 544419950e-09 1s 1s 544426950e-09 1s 1s 544428270e-09 0s 0s 544430190e-09 1s 1s 544437230e-09 1s 1s 544438510e-09 0s 0s 544440430e-09 1s 1s 544447510e-09 1s 1s 544448750e-09 0s 0s 544450670e-09 1s 1s 544457790e-09 1s 1s 544458990e-09 0s 0s 544460910e-09 1s 1s 544468070e-09 1s 1s 544469230e-09 0s 0s 544471150e-09 1s 1s 544478350e-09 1s 1s 544479470e-09 0s 0s 544481390e-09 1s 1s 544488630e-09 1s 1s 544489710e-09 0s 0s 544491630e-09 1s 1s 544498910e-09 1s 1s 544499950e-09 0s 0s 544501870e-09 1s 1s 544509190e-09 1s 1s 544510190e-09 0s 0s 544512110e-09 1s 1s 544519470e-09 1s 1s 544520430e-09 0s 0s 544522350e-09 1s 1s 544529750e-09 1s 1s 544530670e-09 0s 0s 544532590e-09 1s 1s 544540030e-09 1s 1s 544540910e-09 0s 0s 544542830e-09 1s 1s 544550310e-09 1s 1s 544551150e-09 0s 0s 544553070e-09 1s 1s 544560590e-09 1s 1s 544561390e-09 0s 0s 544563310e-09 1s 1s 544570870e-09 1s 1s 544571630e-09 0s 0s 544573550e-09 1s 1s 544581150e-09 1s 1s 544581870e-09 0s 0s 544583790e-09 1s 1s 544591430e-09 1s 1s 544592110e-09 0s 0s 544594030e-09 1s 1s 544601710e-09 1s 1s 544602350e-09 0s 0s 544604270e-09 1s 1s 544611990e-09 1s 1s 544612590e-09 0s 0s 544614510e-09 1s 1s 544622270e-09 1s 1s 544622830e-09 0s 0s 544624750e-09 1s 1s 544632550e-09 1s 1s 544633070e-09 0s 0s 544634990e-09 1s 1s 544642830e-09 1s 1s 544643310e-09 0s 0s 544645230e-09 1s 1s 544653110e-09 1s 1s 544653550e-09 0s 0s 544655470e-09 1s 1s 544663390e-09 1s 1s 544663790e-09 0s 0s 544665710e-09 1s 1s 544673670e-09 1s 1s 544674030e-09 0s 0s 544675950e-09 1s 1s 544683950e-09 1s 1s 544684270e-09 0s 0s 544686190e-09 1s 1s 544694230e-09 1s 1s 544694510e-09 0s 0s 544696430e-09 1s 1s 544704510e-09 1s 1s 544704750e-09 0s 0s 544706670e-09 1s 1s 544714790e-09 1s 1s 544714990e-09 0s 0s 544716910e-09 1s 1s 544725070e-09 1s 1s 544725230e-09 0s 0s 544727150e-09 1s 1s 544735350e-09 1s 1s 544735470e-09 0s 0s 544737390e-09 1s 1s 544745630e-09 1s 1s 544745710e-09 0s 0s 544747630e-09 1s 1s 544755910e-09 1s 1s 544755950e-09 0s 0s 544757870e-09 1s 1s 544766190e-09 0s 0s 544768110e-09 1s 1s 544776430e-09 0s 0s 544776470e-09 0s 0s 544778350e-09 1s 1s 544786670e-09 0s 0s 544786750e-09 0s 0s 544788590e-09 1s 1s 544796910e-09 0s 0s 544797030e-09 0s 0s 544798830e-09 1s 1s 544807150e-09 0s 0s 544807310e-09 0s 0s 544809070e-09 1s 1s 544817390e-09 0s 0s 544817590e-09 0s 0s 544819310e-09 1s 1s 544827630e-09 0s 0s 544827870e-09 0s 0s 544829550e-09 1s 1s 544837870e-09 0s 0s 544838150e-09 0s 0s 544839790e-09 1s 1s 544848110e-09 0s 0s 544848430e-09 0s 0s 544850030e-09 1s 1s 544858350e-09 0s 0s 544858710e-09 0s 0s 544860270e-09 1s 1s 544868590e-09 0s 0s 544868990e-09 0s 0s 544870510e-09 1s 1s 544878830e-09 0s 0s 544879270e-09 0s 0s 544880750e-09 1s 1s 544889070e-09 0s 0s 544889550e-09 0s 0s 544890990e-09 1s 1s 544899310e-09 0s 0s 544899830e-09 0s 0s 544901230e-09 1s 1s 544909550e-09 0s 0s 544910110e-09 0s 0s 544911470e-09 1s 1s 544919790e-09 0s 0s 544920390e-09 0s 0s 544921710e-09 1s 1s 544930030e-09 0s 0s 544930670e-09 0s 0s 544931950e-09 1s 1s 544940270e-09 0s 0s 544940950e-09 0s 0s 544942190e-09 1s 1s 544950510e-09 0s 0s 544951230e-09 0s 0s 544952430e-09 1s 1s 544960750e-09 0s 0s 544961510e-09 0s 0s 544962670e-09 1s 1s 544970990e-09 0s 0s 544971790e-09 0s 0s 544972910e-09 1s 1s 544981230e-09 0s 0s 544982070e-09 0s 0s 544983150e-09 1s 1s 544991470e-09 0s 0s 544992350e-09 0s 0s 544993390e-09 1s 1s 545001710e-09 0s 0s 545002630e-09 0s 0s 545003630e-09 1s 1s 545011950e-09 0s 0s 545012910e-09 0s 0s 545013870e-09 1s 1s 545022190e-09 0s 0s 545023190e-09 0s 0s 545024110e-09 1s 1s 545032430e-09 0s 0s 545033470e-09 0s 0s 545034350e-09 1s 1s 545042670e-09 0s 0s 545043750e-09 0s 0s 545044590e-09 1s 1s 545052910e-09 0s 0s 545054030e-09 0s 0s 545054830e-09 1s 1s 545063150e-09 0s 0s 545064310e-09 0s 0s 545065070e-09 1s 1s 545073390e-09 0s 0s 545074590e-09 0s 0s 545075310e-09 1s 1s 545083630e-09 0s 0s 545084870e-09 0s 0s 545085550e-09 1s 1s 545093870e-09 0s 0s 545095150e-09 0s 0s 545095790e-09 1s 1s 545104110e-09 0s 0s 545105430e-09 0s 0s 545106030e-09 1s 1s 545114350e-09 0s 0s 545115710e-09 0s 0s 545116270e-09 1s 1s 545124590e-09 0s 0s 545125990e-09 0s 0s 545126510e-09 1s 1s 545134830e-09 0s 0s 545136270e-09 0s 0s 545136750e-09 1s 1s 545145070e-09 0s 0s 545146550e-09 0s 0s 545146990e-09 1s 1s 545155310e-09 0s 0s 545156830e-09 0s 0s 545157230e-09 1s 1s 545165550e-09 0s 0s 545167110e-09 0s 0s 545167470e-09 1s 1s 545175790e-09 0s 0s 545177390e-09 0s 0s 545177710e-09 1s 1s 545186030e-09 0s 0s 545187670e-09 0s 0s 545187950e-09 1s 1s 545196270e-09 0s 0s 545197950e-09 0s 0s 545198190e-09 1s 1s 545206510e-09 0s 0s 545208230e-09 0s 0s 545208430e-09 1s 1s 545216750e-09 0s 0s 545218510e-09 0s 0s 545218670e-09 1s 1s 545226990e-09 0s 0s 545228790e-09 0s 0s 545228910e-09 1s 1s 545237230e-09 0s 0s 545239070e-09 0s 0s 545239150e-09 1s 1s 545247470e-09 0s 0s 545249350e-09 0s 0s 545249390e-09 1s 1s 545257710e-09 0s 0s 545259630e-09 1s 1s 545259670e-09 1s 1s 545267990e-09 0s 0s 545269870e-09 1s 1s 545269950e-09 1s 1s 545278230e-09 0s 0s 545280110e-09 1s 1s 545280230e-09 1s 1s 545288470e-09 0s 0s 545290350e-09 1s 1s 545290510e-09 1s 1s 545298710e-09 0s 0s 545300590e-09 1s 1s 545300790e-09 1s 1s 545308950e-09 0s 0s 545310830e-09 1s 1s 545311070e-09 1s 1s 545319190e-09 0s 0s 545321070e-09 1s 1s 545321350e-09 1s 1s 545329430e-09 0s 0s 545331310e-09 1s 1s 545331630e-09 1s 1s 545339670e-09 0s 0s 545341550e-09 1s 1s 545341910e-09 1s 1s 545349910e-09 0s 0s 545351790e-09 1s 1s 545352190e-09 1s 1s 545360150e-09 0s 0s 545362030e-09 1s 1s 545362470e-09 1s 1s 545370390e-09 0s 0s 545372270e-09 1s 1s 545372750e-09 1s 1s 545380630e-09 0s 0s 545382510e-09 1s 1s 545383030e-09 1s 1s 545390870e-09 0s 0s 545392750e-09 1s 1s 545393310e-09 1s 1s 545401110e-09 0s 0s 545402990e-09 1s 1s 545403590e-09 1s 1s 545411350e-09 0s 0s 545413230e-09 1s 1s 545413870e-09 1s 1s 545421590e-09 0s 0s 545423470e-09 1s 1s 545424150e-09 1s 1s 545431830e-09 0s 0s 545433710e-09 1s 1s 545434430e-09 1s 1s 545442070e-09 0s 0s 545443950e-09 1s 1s 545444710e-09 1s 1s 545452310e-09 0s 0s 545454190e-09 1s 1s 545454990e-09 1s 1s 545462550e-09 0s 0s 545464430e-09 1s 1s 545465270e-09 1s 1s 545472790e-09 0s 0s 545474670e-09 1s 1s 545475550e-09 1s 1s 545483030e-09 0s 0s 545484910e-09 1s 1s 545485830e-09 1s 1s 545493270e-09 0s 0s 545495150e-09 1s 1s 545496110e-09 1s 1s 545503510e-09 0s 0s 545505390e-09 1s 1s 545506390e-09 1s 1s 545513750e-09 0s 0s 545515630e-09 1s 1s 545516670e-09 1s 1s 545523990e-09 0s 0s 545525870e-09 1s 1s 545526950e-09 1s 1s 545534230e-09 0s 0s 545536110e-09 1s 1s 545537230e-09 1s 1s 545544470e-09 0s 0s 545546350e-09 1s 1s 545547510e-09 1s 1s 545554710e-09 0s 0s 545556590e-09 1s 1s 545557790e-09 1s 1s 545564950e-09 0s 0s 545566830e-09 1s 1s 545568070e-09 1s 1s 545575190e-09 0s 0s 545577070e-09 1s 1s 545578350e-09 1s 1s 545585430e-09 0s 0s 545587310e-09 1s 1s 545588630e-09 1s 1s 545595670e-09 0s 0s 545597550e-09 1s 1s 545598910e-09 1s 1s 545605910e-09 0s 0s 545607790e-09 1s 1s 545609190e-09 1s 1s 545616150e-09 0s 0s 545618030e-09 1s 1s 545619470e-09 1s 1s 545626390e-09 0s 0s 545628270e-09 1s 1s 545629750e-09 1s 1s 545636630e-09 0s 0s 545638510e-09 1s 1s 545640030e-09 1s 1s 545646870e-09 0s 0s 545648750e-09 1s 1s 545650310e-09 1s 1s 545657110e-09 0s 0s 545658990e-09 1s 1s 545660590e-09 1s 1s 545667350e-09 0s 0s 545669230e-09 1s 1s 545670870e-09 1s 1s 545677590e-09 0s 0s 545679470e-09 1s 1s 545681150e-09 1s 1s 545687830e-09 0s 0s 545689710e-09 1s 1s 545691430e-09 1s 1s 545698070e-09 0s 0s 545699950e-09 1s 1s 545701710e-09 1s 1s 545708310e-09 0s 0s 545710190e-09 1s 1s 545711990e-09 1s 1s 545718550e-09 0s 0s 545720430e-09 1s 1s 545722270e-09 1s 1s 545728790e-09 0s 0s 545730670e-09 1s 1s 545732550e-09 1s 1s 545739030e-09 0s 0s 545740910e-09 1s 1s 545742830e-09 1s 1s 545749270e-09 0s 0s 545751150e-09 1s 1s 545753110e-09 1s 1s 545759510e-09 0s 0s 545761390e-09 1s 1s 545763390e-09 1s 1s 545769750e-09 0s 0s 545771630e-09 1s 1s 545773670e-09 1s 1s 545779990e-09 0s 0s 545781870e-09 1s 1s 545783950e-09 1s 1s 545790230e-09 0s 0s 545792110e-09 1s 1s 545794230e-09 1s 1s 545800470e-09 0s 0s 545802350e-09 1s 1s 545804510e-09 1s 1s 545810710e-09 0s 0s 545812590e-09 1s 1s 545814790e-09 1s 1s 545820950e-09 0s 0s 545822830e-09 1s 1s 545825070e-09 1s 1s 545831190e-09 0s 0s 545833070e-09 1s 1s 545835350e-09 1s 1s 545841430e-09 0s 0s 545843310e-09 1s 1s 545845630e-09 1s 1s 545851670e-09 0s 0s 545853550e-09 1s 1s 545855910e-09 1s 1s 545861910e-09 0s 0s 545863790e-09 1s 1s 545866190e-09 1s 1s 545872150e-09 0s 0s 545874030e-09 1s 1s 545876470e-09 1s 1s 545882390e-09 0s 0s 545884270e-09 1s 1s 545886750e-09 1s 1s 545892630e-09 0s 0s 545894510e-09 1s 1s 545897030e-09 1s 1s 545902870e-09 0s 0s 545904750e-09 1s 1s 545907310e-09 1s 1s 545913110e-09 0s 0s 545914990e-09 1s 1s 545917590e-09 1s 1s 545923350e-09 0s 0s 545925230e-09 1s 1s 545927870e-09 1s 1s 545933590e-09 0s 0s 545935470e-09 1s 1s 545938150e-09 1s 1s 545943830e-09 0s 0s 545945710e-09 1s 1s 545948430e-09 1s 1s 545954070e-09 0s 0s 545955950e-09 1s 1s 545958710e-09 1s 1s 545964310e-09 0s 0s 545966190e-09 1s 1s 545968990e-09 1s 1s 545974550e-09 0s 0s 545976430e-09 1s 1s 545979270e-09 1s 1s 545984790e-09 0s 0s 545986670e-09 1s 1s 545989550e-09 1s 1s 545995030e-09 0s 0s 545996910e-09 1s 1s 545999830e-09 1s 1s 546005270e-09 0s 0s 546007150e-09 1s 1s 546010110e-09 1s 1s 546015510e-09 0s 0s 546017390e-09 1s 1s 546020390e-09 1s 1s 546025750e-09 0s 0s 546027630e-09 1s 1s 546030670e-09 1s 1s 546035990e-09 0s 0s 546037870e-09 1s 1s 546040950e-09 1s 1s 546046230e-09 0s 0s 546048110e-09 1s 1s 546051230e-09 1s 1s 546056470e-09 0s 0s 546058350e-09 1s 1s 546061510e-09 1s 1s 546066710e-09 0s 0s 546068590e-09 1s 1s 546071790e-09 1s 1s 546076950e-09 0s 0s 546078830e-09 1s 1s 546082070e-09 1s 1s 546087190e-09 0s 0s 546089070e-09 1s 1s 546092350e-09 1s 1s 546097430e-09 0s 0s 546099310e-09 1s 1s 546102630e-09 1s 1s 546107670e-09 0s 0s 546109550e-09 1s 1s 546112910e-09 1s 1s 546117910e-09 0s 0s 546119790e-09 1s 1s 546123190e-09 1s 1s 546128150e-09 0s 0s 546130030e-09 1s 1s 546133470e-09 1s 1s 546138390e-09 0s 0s 546140270e-09 1s 1s 546143750e-09 1s 1s 546148630e-09 0s 0s 546150510e-09 1s 1s 546154030e-09 1s 1s 546158870e-09 0s 0s 546160750e-09 1s 1s 546164310e-09 1s 1s 546169110e-09 0s 0s 546170990e-09 1s 1s 546174590e-09 1s 1s 546179350e-09 0s 0s 546181230e-09 1s 1s 546184870e-09 1s 1s 546189590e-09 0s 0s 546191470e-09 1s 1s 546195150e-09 1s 1s 546199830e-09 0s 0s 546201710e-09 1s 1s 546205430e-09 1s 1s 546210070e-09 0s 0s 546211950e-09 1s 1s 546215710e-09 1s 1s 546220310e-09 0s 0s 546222190e-09 1s 1s 546225990e-09 1s 1s 546230550e-09 0s 0s 546232430e-09 1s 1s 546236270e-09 1s 1s 546240790e-09 0s 0s 546242670e-09 1s 1s 546246550e-09 1s 1s 546251030e-09 0s 0s 546252910e-09 1s 1s 546256830e-09 1s 1s 546261270e-09 0s 0s 546263150e-09 1s 1s 546267110e-09 1s 1s 546271510e-09 0s 0s 546273390e-09 1s 1s 546277390e-09 1s 1s 546281750e-09 0s 0s 546283630e-09 1s 1s 546287670e-09 1s 1s 546291990e-09 0s 0s 546293870e-09 1s 1s 546297950e-09 1s 1s 546302230e-09 0s 0s 546304110e-09 1s 1s 546308230e-09 1s 1s 546312470e-09 0s 0s 546314350e-09 1s 1s 546318510e-09 1s 1s 546322710e-09 0s 0s 546324590e-09 1s 1s 546328790e-09 1s 1s 546332950e-09 0s 0s 546334830e-09 1s 1s 546339070e-09 1s 1s 546343190e-09 0s 0s 546345070e-09 1s 1s 546349350e-09 1s 1s 546353430e-09 0s 0s 546355310e-09 1s 1s 546359630e-09 1s 1s 546363670e-09 0s 0s 546365550e-09 1s 1s 546369910e-09 1s 1s 546373910e-09 0s 0s 546375790e-09 1s 1s 546380190e-09 1s 1s 546384150e-09 0s 0s 546386030e-09 1s 1s 546390470e-09 1s 1s 546394390e-09 0s 0s 546396270e-09 1s 1s 546400750e-09 1s 1s 546404630e-09 0s 0s 546406510e-09 1s 1s 546411030e-09 1s 1s 546414870e-09 0s 0s 546416750e-09 1s 1s 546421310e-09 1s 1s 546425110e-09 0s 0s 546426990e-09 1s 1s 546431590e-09 1s 1s 546435350e-09 0s 0s 546437230e-09 1s 1s 546441870e-09 1s 1s 546445590e-09 0s 0s 546447470e-09 1s 1s 546452150e-09 1s 1s 546455830e-09 0s 0s 546457710e-09 1s 1s 546462430e-09 1s 1s 546466070e-09 0s 0s 546467950e-09 1s 1s 546472710e-09 1s 1s 546476310e-09 0s 0s 546478190e-09 1s 1s 546482990e-09 1s 1s 546486550e-09 0s 0s 546488430e-09 1s 1s 546493270e-09 1s 1s 546496790e-09 0s 0s 546498670e-09 1s 1s 546503550e-09 1s 1s 546507030e-09 0s 0s 546508910e-09 1s 1s 546513830e-09 1s 1s 546517270e-09 0s 0s 546519150e-09 1s 1s 546524110e-09 1s 1s 546527510e-09 0s 0s 546529390e-09 1s 1s 546534390e-09 1s 1s 546537750e-09 0s 0s 546539630e-09 1s 1s 546544670e-09 1s 1s 546547990e-09 0s 0s 546549870e-09 1s 1s 546554950e-09 1s 1s 546558230e-09 0s 0s 546560110e-09 1s 1s 546565230e-09 1s 1s 546568470e-09 0s 0s 546570350e-09 1s 1s 546575510e-09 1s 1s 546578710e-09 0s 0s 546580590e-09 1s 1s 546585790e-09 1s 1s 546588950e-09 0s 0s 546590830e-09 1s 1s 546596070e-09 1s 1s 546599190e-09 0s 0s 546601070e-09 1s 1s 546606350e-09 1s 1s 546609430e-09 0s 0s 546611310e-09 1s 1s 546616630e-09 1s 1s 546619670e-09 0s 0s 546621550e-09 1s 1s 546626910e-09 1s 1s 546629910e-09 0s 0s 546631790e-09 1s 1s 546637190e-09 1s 1s 546640150e-09 0s 0s 546642030e-09 1s 1s 546647470e-09 1s 1s 546650390e-09 0s 0s 546652270e-09 1s 1s 546657750e-09 1s 1s 546660630e-09 0s 0s 546662510e-09 1s 1s 546668030e-09 1s 1s 546670870e-09 0s 0s 546672750e-09 1s 1s 546678310e-09 1s 1s 546681110e-09 0s 0s 546682990e-09 1s 1s 546688590e-09 1s 1s 546691350e-09 0s 0s 546693230e-09 1s 1s 546698870e-09 1s 1s 546701590e-09 0s 0s 546703470e-09 1s 1s 546709150e-09 1s 1s 546711830e-09 0s 0s 546713710e-09 1s 1s 546719430e-09 1s 1s 546722070e-09 0s 0s 546723950e-09 1s 1s 546729710e-09 1s 1s 546732310e-09 0s 0s 546734190e-09 1s 1s 546739990e-09 1s 1s 546742550e-09 0s 0s 546744430e-09 1s 1s 546750270e-09 1s 1s 546752790e-09 0s 0s 546754670e-09 1s 1s 546760550e-09 1s 1s 546763030e-09 0s 0s 546764910e-09 1s 1s 546770830e-09 1s 1s 546773270e-09 0s 0s 546775150e-09 1s 1s 546781110e-09 1s 1s 546783510e-09 0s 0s 546785390e-09 1s 1s 546791390e-09 1s 1s 546793750e-09 0s 0s 546795630e-09 1s 1s 546801670e-09 1s 1s 546803990e-09 0s 0s 546805870e-09 1s 1s 546811950e-09 1s 1s 546814230e-09 0s 0s 546816110e-09 1s 1s 546822230e-09 1s 1s 546824470e-09 0s 0s 546826350e-09 1s 1s 546832510e-09 1s 1s 546834710e-09 0s 0s 546836590e-09 1s 1s 546842790e-09 1s 1s 546844950e-09 0s 0s 546846830e-09 1s 1s 546853070e-09 1s 1s 546855190e-09 0s 0s 546857070e-09 1s 1s 546863350e-09 1s 1s 546865430e-09 0s 0s 546867310e-09 1s 1s 546873630e-09 1s 1s 546875670e-09 0s 0s 546877550e-09 1s 1s 546883910e-09 1s 1s 546885910e-09 0s 0s 546887790e-09 1s 1s 546894190e-09 1s 1s 546896150e-09 0s 0s 546898030e-09 1s 1s 546904470e-09 1s 1s 546906390e-09 0s 0s 546908270e-09 1s 1s 546914750e-09 1s 1s 546916630e-09 0s 0s 546918510e-09 1s 1s 546925030e-09 1s 1s 546926870e-09 0s 0s 546928750e-09 1s 1s 546935310e-09 1s 1s 546937110e-09 0s 0s 546938990e-09 1s 1s 546945590e-09 1s 1s 546947350e-09 0s 0s 546949230e-09 1s 1s 546955870e-09 1s 1s 546957590e-09 0s 0s 546959470e-09 1s 1s 546966150e-09 1s 1s 546967830e-09 0s 0s 546969710e-09 1s 1s 546976430e-09 1s 1s 546978070e-09 0s 0s 546979950e-09 1s 1s 546986710e-09 1s 1s 546988310e-09 0s 0s 546990190e-09 1s 1s 546996990e-09 1s 1s 546998550e-09 0s 0s 547000430e-09 1s 1s 547007270e-09 1s 1s 547008790e-09 0s 0s 547010670e-09 1s 1s 547017550e-09 1s 1s 547019030e-09 0s 0s 547020910e-09 1s 1s 547027830e-09 1s 1s 547029270e-09 0s 0s 547031150e-09 1s 1s 547038110e-09 1s 1s 547039510e-09 0s 0s 547041390e-09 1s 1s 547048390e-09 1s 1s 547049750e-09 0s 0s 547051630e-09 1s 1s 547058670e-09 1s 1s 547059990e-09 0s 0s 547061870e-09 1s 1s 547068950e-09 1s 1s 547070230e-09 0s 0s 547072110e-09 1s 1s 547079230e-09 1s 1s 547080470e-09 0s 0s 547082350e-09 1s 1s 547089510e-09 1s 1s 547090710e-09 0s 0s 547092590e-09 1s 1s 547099790e-09 1s 1s 547100950e-09 0s 0s 547102830e-09 1s 1s 547110070e-09 1s 1s 547111190e-09 0s 0s 547113070e-09 1s 1s 547120350e-09 1s 1s 547121430e-09 0s 0s 547123310e-09 1s 1s 547130630e-09 1s 1s 547131670e-09 0s 0s 547133550e-09 1s 1s 547140910e-09 1s 1s 547141910e-09 0s 0s 547143790e-09 1s 1s 547151190e-09 1s 1s 547152150e-09 0s 0s 547154030e-09 1s 1s 547161470e-09 1s 1s 547162390e-09 0s 0s 547164270e-09 1s 1s 547171750e-09 1s 1s 547172630e-09 0s 0s 547174510e-09 1s 1s 547182030e-09 1s 1s 547182870e-09 0s 0s 547184750e-09 1s 1s 547192310e-09 1s 1s 547193110e-09 0s 0s 547194990e-09 1s 1s 547202590e-09 1s 1s 547203350e-09 0s 0s 547205230e-09 1s 1s 547212870e-09 1s 1s 547213590e-09 0s 0s 547215470e-09 1s 1s 547223150e-09 1s 1s 547223830e-09 0s 0s 547225710e-09 1s 1s 547233430e-09 1s 1s 547234070e-09 0s 0s 547235950e-09 1s 1s 547243710e-09 1s 1s 547244310e-09 0s 0s 547246190e-09 1s 1s 547253990e-09 1s 1s 547254550e-09 0s 0s 547256430e-09 1s 1s 547264270e-09 1s 1s 547264790e-09 0s 0s 547266670e-09 1s 1s 547274550e-09 1s 1s 547275030e-09 0s 0s 547276910e-09 1s 1s 547284830e-09 1s 1s 547285270e-09 0s 0s 547287150e-09 1s 1s 547295110e-09 1s 1s 547295510e-09 0s 0s 547297390e-09 1s 1s 547305390e-09 1s 1s 547305750e-09 0s 0s 547307630e-09 1s 1s 547315670e-09 1s 1s 547315990e-09 0s 0s 547317870e-09 1s 1s 547325950e-09 1s 1s 547326230e-09 0s 0s 547328110e-09 1s 1s 547336230e-09 1s 1s 547336470e-09 0s 0s 547338350e-09 1s 1s 547346510e-09 1s 1s 547346710e-09 0s 0s 547348590e-09 1s 1s 547356790e-09 1s 1s 547356950e-09 0s 0s 547358830e-09 1s 1s 547367070e-09 1s 1s 547367190e-09 0s 0s 547369070e-09 1s 1s 547377350e-09 1s 1s 547377430e-09 0s 0s 547379310e-09 1s 1s 547387630e-09 1s 1s 547387670e-09 0s 0s 547389550e-09 1s 1s 547397910e-09 0s 0s 547399790e-09 1s 1s 547408150e-09 0s 0s 547408190e-09 0s 0s 547410030e-09 1s 1s 547418390e-09 0s 0s 547418470e-09 0s 0s 547420270e-09 1s 1s 547428630e-09 0s 0s 547428750e-09 0s 0s 547430510e-09 1s 1s 547438870e-09 0s 0s 547439030e-09 0s 0s 547440750e-09 1s 1s 547449110e-09 0s 0s 547449310e-09 0s 0s 547450990e-09 1s 1s 547459350e-09 0s 0s 547459590e-09 0s 0s 547461230e-09 1s 1s 547469590e-09 0s 0s 547469870e-09 0s 0s 547471470e-09 1s 1s 547479830e-09 0s 0s 547480150e-09 0s 0s 547481710e-09 1s 1s 547490070e-09 0s 0s 547490430e-09 0s 0s 547491950e-09 1s 1s 547500310e-09 0s 0s 547500710e-09 0s 0s 547502190e-09 1s 1s 547510550e-09 0s 0s 547510990e-09 0s 0s 547512430e-09 1s 1s 547520790e-09 0s 0s 547521270e-09 0s 0s 547522670e-09 1s 1s 547531030e-09 0s 0s 547531550e-09 0s 0s 547532910e-09 1s 1s 547541270e-09 0s 0s 547541830e-09 0s 0s 547543150e-09 1s 1s 547551510e-09 0s 0s 547552110e-09 0s 0s 547553390e-09 1s 1s 547561750e-09 0s 0s 547562390e-09 0s 0s 547563630e-09 1s 1s 547571990e-09 0s 0s 547572670e-09 0s 0s 547573870e-09 1s 1s 547582230e-09 0s 0s 547582950e-09 0s 0s 547584110e-09 1s 1s 547592470e-09 0s 0s 547593230e-09 0s 0s 547594350e-09 1s 1s 547602710e-09 0s 0s 547603510e-09 0s 0s 547604590e-09 1s 1s 547612950e-09 0s 0s 547613790e-09 0s 0s 547614830e-09 1s 1s 547623190e-09 0s 0s 547624070e-09 0s 0s 547625070e-09 1s 1s 547633430e-09 0s 0s 547634350e-09 0s 0s 547635310e-09 1s 1s 547643670e-09 0s 0s 547644630e-09 0s 0s 547645550e-09 1s 1s 547653910e-09 0s 0s 547654910e-09 0s 0s 547655790e-09 1s 1s 547664150e-09 0s 0s 547665190e-09 0s 0s 547666030e-09 1s 1s 547674390e-09 0s 0s 547675470e-09 0s 0s 547676270e-09 1s 1s 547684630e-09 0s 0s 547685750e-09 0s 0s 547686510e-09 1s 1s 547694870e-09 0s 0s 547696030e-09 0s 0s 547696750e-09 1s 1s 547705110e-09 0s 0s 547706310e-09 0s 0s 547706990e-09 1s 1s 547715350e-09 0s 0s 547716590e-09 0s 0s 547717230e-09 1s 1s 547725590e-09 0s 0s 547726870e-09 0s 0s 547727470e-09 1s 1s 547735830e-09 0s 0s 547737150e-09 0s 0s 547737710e-09 1s 1s 547746070e-09 0s 0s 547747430e-09 0s 0s 547747950e-09 1s 1s 547756310e-09 0s 0s 547757710e-09 0s 0s 547758190e-09 1s 1s 547766550e-09 0s 0s 547767990e-09 0s 0s 547768430e-09 1s 1s 547776790e-09 0s 0s 547778270e-09 0s 0s 547778670e-09 1s 1s 547787030e-09 0s 0s 547788550e-09 0s 0s 547788910e-09 1s 1s 547797270e-09 0s 0s 547798830e-09 0s 0s 547799150e-09 1s 1s 547807510e-09 0s 0s 547809110e-09 0s 0s 547809390e-09 1s 1s 547817750e-09 0s 0s 547819390e-09 0s 0s 547819630e-09 1s 1s 547827990e-09 0s 0s 547829670e-09 0s 0s 547829870e-09 1s 1s 547838230e-09 0s 0s 547839950e-09 0s 0s 547840110e-09 1s 1s 547848470e-09 0s 0s 547850230e-09 0s 0s 547850350e-09 1s 1s 547858710e-09 0s 0s 547860510e-09 0s 0s 547860590e-09 1s 1s 547868950e-09 0s 0s 547870790e-09 0s 0s 547870830e-09 1s 1s 547879190e-09 0s 0s 547881070e-09 1s 1s 547881110e-09 1s 1s 547889470e-09 0s 0s 547891310e-09 1s 1s 547891390e-09 1s 1s 547899710e-09 0s 0s 547901550e-09 1s 1s 547901670e-09 1s 1s 547909950e-09 0s 0s 547911790e-09 1s 1s 547911950e-09 1s 1s 547920190e-09 0s 0s 547922030e-09 1s 1s 547922230e-09 1s 1s 547930430e-09 0s 0s 547932270e-09 1s 1s 547932510e-09 1s 1s 547940670e-09 0s 0s 547942510e-09 1s 1s 547942790e-09 1s 1s 547950910e-09 0s 0s 547952750e-09 1s 1s 547953070e-09 1s 1s 547961150e-09 0s 0s 547962990e-09 1s 1s 547963350e-09 1s 1s 547971390e-09 0s 0s 547973230e-09 1s 1s 547973630e-09 1s 1s 547981630e-09 0s 0s 547983470e-09 1s 1s 547983910e-09 1s 1s 547991870e-09 0s 0s 547993710e-09 1s 1s 547994190e-09 1s 1s 548002110e-09 0s 0s 548003950e-09 1s 1s 548004470e-09 1s 1s 548012350e-09 0s 0s 548014190e-09 1s 1s 548014750e-09 1s 1s 548022590e-09 0s 0s 548024430e-09 1s 1s 548025030e-09 1s 1s 548032830e-09 0s 0s 548034670e-09 1s 1s 548035310e-09 1s 1s 548043070e-09 0s 0s 548044910e-09 1s 1s 548045590e-09 1s 1s 548053310e-09 0s 0s 548055150e-09 1s 1s 548055870e-09 1s 1s 548063550e-09 0s 0s 548065390e-09 1s 1s 548066150e-09 1s 1s 548073790e-09 0s 0s 548075630e-09 1s 1s 548076430e-09 1s 1s 548084030e-09 0s 0s 548085870e-09 1s 1s 548086710e-09 1s 1s 548094270e-09 0s 0s 548096110e-09 1s 1s 548096990e-09 1s 1s 548104510e-09 0s 0s 548106350e-09 1s 1s 548107270e-09 1s 1s 548114750e-09 0s 0s 548116590e-09 1s 1s 548117550e-09 1s 1s 548124990e-09 0s 0s 548126830e-09 1s 1s 548127830e-09 1s 1s 548135230e-09 0s 0s 548137070e-09 1s 1s 548138110e-09 1s 1s 548145470e-09 0s 0s 548147310e-09 1s 1s 548148390e-09 1s 1s 548155710e-09 0s 0s 548157550e-09 1s 1s 548158670e-09 1s 1s 548165950e-09 0s 0s 548167790e-09 1s 1s 548168950e-09 1s 1s 548176190e-09 0s 0s 548178030e-09 1s 1s 548179230e-09 1s 1s 548186430e-09 0s 0s 548188270e-09 1s 1s 548189510e-09 1s 1s 548196670e-09 0s 0s 548198510e-09 1s 1s 548199790e-09 1s 1s 548206910e-09 0s 0s 548208750e-09 1s 1s 548210070e-09 1s 1s 548217150e-09 0s 0s 548218990e-09 1s 1s 548220350e-09 1s 1s 548227390e-09 0s 0s 548229230e-09 1s 1s 548230630e-09 1s 1s 548237630e-09 0s 0s 548239470e-09 1s 1s 548240910e-09 1s 1s 548247870e-09 0s 0s 548249710e-09 1s 1s 548251190e-09 1s 1s 548258110e-09 0s 0s 548259950e-09 1s 1s 548261470e-09 1s 1s 548268350e-09 0s 0s 548270190e-09 1s 1s 548271750e-09 1s 1s 548278590e-09 0s 0s 548280430e-09 1s 1s 548282030e-09 1s 1s 548288830e-09 0s 0s 548290670e-09 1s 1s 548292310e-09 1s 1s 548299070e-09 0s 0s 548300910e-09 1s 1s 548302590e-09 1s 1s 548309310e-09 0s 0s 548311150e-09 1s 1s 548312870e-09 1s 1s 548319550e-09 0s 0s 548321390e-09 1s 1s 548323150e-09 1s 1s 548329790e-09 0s 0s 548331630e-09 1s 1s 548333430e-09 1s 1s 548340030e-09 0s 0s 548341870e-09 1s 1s 548343710e-09 1s 1s 548350270e-09 0s 0s 548352110e-09 1s 1s 548353990e-09 1s 1s 548360510e-09 0s 0s 548362350e-09 1s 1s 548364270e-09 1s 1s 548370750e-09 0s 0s 548372590e-09 1s 1s 548374550e-09 1s 1s 548380990e-09 0s 0s 548382830e-09 1s 1s 548384830e-09 1s 1s 548391230e-09 0s 0s 548393070e-09 1s 1s 548395110e-09 1s 1s 548401470e-09 0s 0s 548403310e-09 1s 1s 548405390e-09 1s 1s 548411710e-09 0s 0s 548413550e-09 1s 1s 548415670e-09 1s 1s 548421950e-09 0s 0s 548423790e-09 1s 1s 548425950e-09 1s 1s 548432190e-09 0s 0s 548434030e-09 1s 1s 548436230e-09 1s 1s 548442430e-09 0s 0s 548444270e-09 1s 1s 548446510e-09 1s 1s 548452670e-09 0s 0s 548454510e-09 1s 1s 548456790e-09 1s 1s 548462910e-09 0s 0s 548464750e-09 1s 1s 548467070e-09 1s 1s 548473150e-09 0s 0s 548474990e-09 1s 1s 548477350e-09 1s 1s 548483390e-09 0s 0s 548485230e-09 1s 1s 548487630e-09 1s 1s 548493630e-09 0s 0s 548495470e-09 1s 1s 548497910e-09 1s 1s 548503870e-09 0s 0s 548505710e-09 1s 1s 548508190e-09 1s 1s 548514110e-09 0s 0s 548515950e-09 1s 1s 548518470e-09 1s 1s 548524350e-09 0s 0s 548526190e-09 1s 1s 548528750e-09 1s 1s 548534590e-09 0s 0s 548536430e-09 1s 1s 548539030e-09 1s 1s 548544830e-09 0s 0s 548546670e-09 1s 1s 548549310e-09 1s 1s 548555070e-09 0s 0s 548556910e-09 1s 1s 548559590e-09 1s 1s 548565310e-09 0s 0s 548567150e-09 1s 1s 548569870e-09 1s 1s 548575550e-09 0s 0s 548577390e-09 1s 1s 548580150e-09 1s 1s 548585790e-09 0s 0s 548587630e-09 1s 1s 548590430e-09 1s 1s 548596030e-09 0s 0s 548597870e-09 1s 1s 548600710e-09 1s 1s 548606270e-09 0s 0s 548608110e-09 1s 1s 548610990e-09 1s 1s 548616510e-09 0s 0s 548618350e-09 1s 1s 548621270e-09 1s 1s 548626750e-09 0s 0s 548628590e-09 1s 1s 548631550e-09 1s 1s 548636990e-09 0s 0s 548638830e-09 1s 1s 548641830e-09 1s 1s 548647230e-09 0s 0s 548649070e-09 1s 1s 548652110e-09 1s 1s 548657470e-09 0s 0s 548659310e-09 1s 1s 548662390e-09 1s 1s 548667710e-09 0s 0s 548669550e-09 1s 1s 548672670e-09 1s 1s 548677950e-09 0s 0s 548679790e-09 1s 1s 548682950e-09 1s 1s 548688190e-09 0s 0s 548690030e-09 1s 1s 548693230e-09 1s 1s 548698430e-09 0s 0s 548700270e-09 1s 1s 548703510e-09 1s 1s 548708670e-09 0s 0s 548710510e-09 1s 1s 548713790e-09 1s 1s 548718910e-09 0s 0s 548720750e-09 1s 1s 548724070e-09 1s 1s 548729150e-09 0s 0s 548730990e-09 1s 1s 548734350e-09 1s 1s 548739390e-09 0s 0s 548741230e-09 1s 1s 548744630e-09 1s 1s 548749630e-09 0s 0s 548751470e-09 1s 1s 548754910e-09 1s 1s 548759870e-09 0s 0s 548761710e-09 1s 1s 548765190e-09 1s 1s 548770110e-09 0s 0s 548771950e-09 1s 1s 548775470e-09 1s 1s 548780350e-09 0s 0s 548782190e-09 1s 1s 548785750e-09 1s 1s 548790590e-09 0s 0s 548792430e-09 1s 1s 548796030e-09 1s 1s 548800830e-09 0s 0s 548802670e-09 1s 1s 548806310e-09 1s 1s 548811070e-09 0s 0s 548812910e-09 1s 1s 548816590e-09 1s 1s 548821310e-09 0s 0s 548823150e-09 1s 1s 548826870e-09 1s 1s 548831550e-09 0s 0s 548833390e-09 1s 1s 548837150e-09 1s 1s 548841790e-09 0s 0s 548843630e-09 1s 1s 548847430e-09 1s 1s 548852030e-09 0s 0s 548853870e-09 1s 1s 548857710e-09 1s 1s 548862270e-09 0s 0s 548864110e-09 1s 1s 548867990e-09 1s 1s 548872510e-09 0s 0s 548874350e-09 1s 1s 548878270e-09 1s 1s 548882750e-09 0s 0s 548884590e-09 1s 1s 548888550e-09 1s 1s 548892990e-09 0s 0s 548894830e-09 1s 1s 548898830e-09 1s 1s 548903230e-09 0s 0s 548905070e-09 1s 1s 548909110e-09 1s 1s 548913470e-09 0s 0s 548915310e-09 1s 1s 548919390e-09 1s 1s 548923710e-09 0s 0s 548925550e-09 1s 1s 548929670e-09 1s 1s 548933950e-09 0s 0s 548935790e-09 1s 1s 548939950e-09 1s 1s 548944190e-09 0s 0s 548946030e-09 1s 1s 548950230e-09 1s 1s 548954430e-09 0s 0s 548956270e-09 1s 1s 548960510e-09 1s 1s 548964670e-09 0s 0s 548966510e-09 1s 1s 548970790e-09 1s 1s 548974910e-09 0s 0s 548976750e-09 1s 1s 548981070e-09 1s 1s 548985150e-09 0s 0s 548986990e-09 1s 1s 548991350e-09 1s 1s 548995390e-09 0s 0s 548997230e-09 1s 1s 549001630e-09 1s 1s 549005630e-09 0s 0s 549007470e-09 1s 1s 549011910e-09 1s 1s 549015870e-09 0s 0s 549017710e-09 1s 1s 549022190e-09 1s 1s 549026110e-09 0s 0s 549027950e-09 1s 1s 549032470e-09 1s 1s 549036350e-09 0s 0s 549038190e-09 1s 1s 549042750e-09 1s 1s 549046590e-09 0s 0s 549048430e-09 1s 1s 549053030e-09 1s 1s 549056830e-09 0s 0s 549058670e-09 1s 1s 549063310e-09 1s 1s 549067070e-09 0s 0s 549068910e-09 1s 1s 549073590e-09 1s 1s 549077310e-09 0s 0s 549079150e-09 1s 1s 549083870e-09 1s 1s 549087550e-09 0s 0s 549089390e-09 1s 1s 549094150e-09 1s 1s 549097790e-09 0s 0s 549099630e-09 1s 1s 549104430e-09 1s 1s 549108030e-09 0s 0s 549109870e-09 1s 1s 549114710e-09 1s 1s 549118270e-09 0s 0s 549120110e-09 1s 1s 549124990e-09 1s 1s 549128510e-09 0s 0s 549130350e-09 1s 1s 549135270e-09 1s 1s 549138750e-09 0s 0s 549140590e-09 1s 1s 549145550e-09 1s 1s 549148990e-09 0s 0s 549150830e-09 1s 1s 549155830e-09 1s 1s 549159230e-09 0s 0s 549161070e-09 1s 1s 549166110e-09 1s 1s 549169470e-09 0s 0s 549171310e-09 1s 1s 549176390e-09 1s 1s 549179710e-09 0s 0s 549181550e-09 1s 1s 549186670e-09 1s 1s 549189950e-09 0s 0s 549191790e-09 1s 1s 549196950e-09 1s 1s 549200190e-09 0s 0s 549202030e-09 1s 1s 549207230e-09 1s 1s 549210430e-09 0s 0s 549212270e-09 1s 1s 549217510e-09 1s 1s 549220670e-09 0s 0s 549222510e-09 1s 1s 549227790e-09 1s 1s 549230910e-09 0s 0s 549232750e-09 1s 1s 549238070e-09 1s 1s 549241150e-09 0s 0s 549242990e-09 1s 1s 549248350e-09 1s 1s 549251390e-09 0s 0s 549253230e-09 1s 1s 549258630e-09 1s 1s 549261630e-09 0s 0s 549263470e-09 1s 1s 549268910e-09 1s 1s 549271870e-09 0s 0s 549273710e-09 1s 1s 549279190e-09 1s 1s 549282110e-09 0s 0s 549283950e-09 1s 1s 549289470e-09 1s 1s 549292350e-09 0s 0s 549294190e-09 1s 1s 549299750e-09 1s 1s 549302590e-09 0s 0s 549304430e-09 1s 1s 549310030e-09 1s 1s 549312830e-09 0s 0s 549314670e-09 1s 1s 549320310e-09 1s 1s 549323070e-09 0s 0s 549324910e-09 1s 1s 549330590e-09 1s 1s 549333310e-09 0s 0s 549335150e-09 1s 1s 549340870e-09 1s 1s 549343550e-09 0s 0s 549345390e-09 1s 1s 549351150e-09 1s 1s 549353790e-09 0s 0s 549355630e-09 1s 1s 549361430e-09 1s 1s 549364030e-09 0s 0s 549365870e-09 1s 1s 549371710e-09 1s 1s 549374270e-09 0s 0s 549376110e-09 1s 1s 549381990e-09 1s 1s 549384510e-09 0s 0s 549386350e-09 1s 1s 549392270e-09 1s 1s 549394750e-09 0s 0s 549396590e-09 1s 1s 549402550e-09 1s 1s 549404990e-09 0s 0s 549406830e-09 1s 1s 549412830e-09 1s 1s 549415230e-09 0s 0s 549417070e-09 1s 1s 549423110e-09 1s 1s 549425470e-09 0s 0s 549427310e-09 1s 1s 549433390e-09 1s 1s 549435710e-09 0s 0s 549437550e-09 1s 1s 549443670e-09 1s 1s 549445950e-09 0s 0s 549447790e-09 1s 1s 549453950e-09 1s 1s 549456190e-09 0s 0s 549458030e-09 1s 1s 549464230e-09 1s 1s 549466430e-09 0s 0s 549468270e-09 1s 1s 549474510e-09 1s 1s 549476670e-09 0s 0s 549478510e-09 1s 1s 549484790e-09 1s 1s 549486910e-09 0s 0s 549488750e-09 1s 1s 549495070e-09 1s 1s 549497150e-09 0s 0s 549498990e-09 1s 1s 549505350e-09 1s 1s 549507390e-09 0s 0s 549509230e-09 1s 1s 549515630e-09 1s 1s 549517630e-09 0s 0s 549519470e-09 1s 1s 549525910e-09 1s 1s 549527870e-09 0s 0s 549529710e-09 1s 1s 549536190e-09 1s 1s 549538110e-09 0s 0s 549539950e-09 1s 1s 549546470e-09 1s 1s 549548350e-09 0s 0s 549550190e-09 1s 1s 549556750e-09 1s 1s 549558590e-09 0s 0s 549560430e-09 1s 1s 549567030e-09 1s 1s 549568830e-09 0s 0s 549570670e-09 1s 1s 549577310e-09 1s 1s 549579070e-09 0s 0s 549580910e-09 1s 1s 549587590e-09 1s 1s 549589310e-09 0s 0s 549591150e-09 1s 1s 549597870e-09 1s 1s 549599550e-09 0s 0s 549601390e-09 1s 1s 549608150e-09 1s 1s 549609790e-09 0s 0s 549611630e-09 1s 1s 549618430e-09 1s 1s 549620030e-09 0s 0s 549621870e-09 1s 1s 549628710e-09 1s 1s 549630270e-09 0s 0s 549632110e-09 1s 1s 549638990e-09 1s 1s 549640510e-09 0s 0s 549642350e-09 1s 1s 549649270e-09 1s 1s 549650750e-09 0s 0s 549652590e-09 1s 1s 549659550e-09 1s 1s 549660990e-09 0s 0s 549662830e-09 1s 1s 549669830e-09 1s 1s 549671230e-09 0s 0s 549673070e-09 1s 1s 549680110e-09 1s 1s 549681470e-09 0s 0s 549683310e-09 1s 1s 549690390e-09 1s 1s 549691710e-09 0s 0s 549693550e-09 1s 1s 549700670e-09 1s 1s 549701950e-09 0s 0s 549703790e-09 1s 1s 549710950e-09 1s 1s 549712190e-09 0s 0s 549714030e-09 1s 1s 549721230e-09 1s 1s 549722430e-09 0s 0s 549724270e-09 1s 1s 549731510e-09 1s 1s 549732670e-09 0s 0s 549734510e-09 1s 1s 549741790e-09 1s 1s 549742910e-09 0s 0s 549744750e-09 1s 1s 549752070e-09 1s 1s 549753150e-09 0s 0s 549754990e-09 1s 1s 549762350e-09 1s 1s 549763390e-09 0s 0s 549765230e-09 1s 1s 549772630e-09 1s 1s 549773630e-09 0s 0s 549775470e-09 1s 1s 549782910e-09 1s 1s 549783870e-09 0s 0s 549785710e-09 1s 1s 549793190e-09 1s 1s 549794110e-09 0s 0s 549795950e-09 1s 1s 549803470e-09 1s 1s 549804350e-09 0s 0s 549806190e-09 1s 1s 549813750e-09 1s 1s 549814590e-09 0s 0s 549816430e-09 1s 1s 549824030e-09 1s 1s 549824830e-09 0s 0s 549826670e-09 1s 1s 549834310e-09 1s 1s 549835070e-09 0s 0s 549836910e-09 1s 1s 549844590e-09 1s 1s 549845310e-09 0s 0s 549847150e-09 1s 1s 549854870e-09 1s 1s 549855550e-09 0s 0s 549857390e-09 1s 1s 549865150e-09 1s 1s 549865790e-09 0s 0s 549867630e-09 1s 1s 549875430e-09 1s 1s 549876030e-09 0s 0s 549877870e-09 1s 1s 549885710e-09 1s 1s 549886270e-09 0s 0s 549888110e-09 1s 1s 549895990e-09 1s 1s 549896510e-09 0s 0s 549898350e-09 1s 1s 549906270e-09 1s 1s 549906750e-09 0s 0s 549908590e-09 1s 1s 549916550e-09 1s 1s 549916990e-09 0s 0s 549918830e-09 1s 1s 549926830e-09 1s 1s 549927230e-09 0s 0s 549929070e-09 1s 1s 549937110e-09 1s 1s 549937470e-09 0s 0s 549939310e-09 1s 1s 549947390e-09 1s 1s 549947710e-09 0s 0s 549949550e-09 1s 1s 549957670e-09 1s 1s 549957950e-09 0s 0s 549959790e-09 1s 1s 549967950e-09 1s 1s 549968190e-09 0s 0s 549970030e-09 1s 1s 549978230e-09 1s 1s 549978430e-09 0s 0s 549980270e-09 1s 1s 549988510e-09 1s 1s 549988670e-09 0s 0s 549990510e-09 1s 1s 549998790e-09 1s 1s 549998910e-09 0s 0s 550000750e-09 1s 1s 550009070e-09 1s 1s 550009150e-09 0s 0s 550010990e-09 1s 1s 550019350e-09 1s 1s 550019390e-09 0s 0s 550021230e-09 1s 1s 550029630e-09 0s 0s 550031470e-09 1s 1s 550039870e-09 0s 0s 550039910e-09 0s 0s 550041710e-09 1s 1s 550050110e-09 0s 0s 550050190e-09 0s 0s 550051950e-09 1s 1s 550060350e-09 0s 0s 550060470e-09 0s 0s 550062190e-09 1s 1s 550070590e-09 0s 0s 550070750e-09 0s 0s 550072430e-09 1s 1s 550080830e-09 0s 0s 550081030e-09 0s 0s 550082670e-09 1s 1s 550091070e-09 0s 0s 550091310e-09 0s 0s 550092910e-09 1s 1s 550101310e-09 0s 0s 550101590e-09 0s 0s 550103150e-09 1s 1s 550111550e-09 0s 0s 550111870e-09 0s 0s 550113390e-09 1s 1s 550121790e-09 0s 0s 550122150e-09 0s 0s 550123630e-09 1s 1s 550132030e-09 0s 0s 550132430e-09 0s 0s 550133870e-09 1s 1s 550142270e-09 0s 0s 550142710e-09 0s 0s 550144110e-09 1s 1s 550152510e-09 0s 0s 550152990e-09 0s 0s 550154350e-09 1s 1s 550162750e-09 0s 0s 550163270e-09 0s 0s 550164590e-09 1s 1s 550172990e-09 0s 0s 550173550e-09 0s 0s 550174830e-09 1s 1s 550183230e-09 0s 0s 550183830e-09 0s 0s 550185070e-09 1s 1s 550193470e-09 0s 0s 550194110e-09 0s 0s 550195310e-09 1s 1s 550203710e-09 0s 0s 550204390e-09 0s 0s 550205550e-09 1s 1s 550213950e-09 0s 0s 550214670e-09 0s 0s 550215790e-09 1s 1s 550224190e-09 0s 0s 550224950e-09 0s 0s 550226030e-09 1s 1s 550234430e-09 0s 0s 550235230e-09 0s 0s 550236270e-09 1s 1s 550244670e-09 0s 0s 550245510e-09 0s 0s 550246510e-09 1s 1s 550254910e-09 0s 0s 550255790e-09 0s 0s 550256750e-09 1s 1s 550265150e-09 0s 0s 550266070e-09 0s 0s 550266990e-09 1s 1s 550275390e-09 0s 0s 550276350e-09 0s 0s 550277230e-09 1s 1s 550285630e-09 0s 0s 550286630e-09 0s 0s 550287470e-09 1s 1s 550295870e-09 0s 0s 550296910e-09 0s 0s 550297710e-09 1s 1s 550306110e-09 0s 0s 550307190e-09 0s 0s 550307950e-09 1s 1s 550316350e-09 0s 0s 550317470e-09 0s 0s 550318190e-09 1s 1s 550326590e-09 0s 0s 550327750e-09 0s 0s 550328430e-09 1s 1s 550336830e-09 0s 0s 550338030e-09 0s 0s 550338670e-09 1s 1s 550347070e-09 0s 0s 550348310e-09 0s 0s 550348910e-09 1s 1s 550357310e-09 0s 0s 550358590e-09 0s 0s 550359150e-09 1s 1s 550367550e-09 0s 0s 550368870e-09 0s 0s 550369390e-09 1s 1s 550377790e-09 0s 0s 550379150e-09 0s 0s 550379630e-09 1s 1s 550388030e-09 0s 0s 550389430e-09 0s 0s 550389870e-09 1s 1s 550398270e-09 0s 0s 550399710e-09 0s 0s 550400110e-09 1s 1s 550408510e-09 0s 0s 550409990e-09 0s 0s 550410350e-09 1s 1s 550418750e-09 0s 0s 550420270e-09 0s 0s 550420590e-09 1s 1s 550428990e-09 0s 0s 550430550e-09 0s 0s 550430830e-09 1s 1s 550439230e-09 0s 0s 550440830e-09 0s 0s 550441070e-09 1s 1s 550449470e-09 0s 0s 550451110e-09 0s 0s 550451310e-09 1s 1s 550459710e-09 0s 0s 550461390e-09 0s 0s 550461550e-09 1s 1s 550469950e-09 0s 0s 550471670e-09 0s 0s 550471790e-09 1s 1s 550480190e-09 0s 0s 550481950e-09 0s 0s 550482030e-09 1s 1s 550490430e-09 0s 0s 550492230e-09 0s 0s 550492270e-09 1s 1s 550500670e-09 0s 0s 550502510e-09 1s 1s 550502550e-09 1s 1s 550510950e-09 0s 0s 550512750e-09 1s 1s 550512830e-09 1s 1s 550521190e-09 0s 0s 550522990e-09 1s 1s 550523110e-09 1s 1s 550531430e-09 0s 0s 550533230e-09 1s 1s 550533390e-09 1s 1s 550541670e-09 0s 0s 550543470e-09 1s 1s 550543670e-09 1s 1s 550551910e-09 0s 0s 550553710e-09 1s 1s 550553950e-09 1s 1s 550562150e-09 0s 0s 550563950e-09 1s 1s 550564230e-09 1s 1s 550572390e-09 0s 0s 550574190e-09 1s 1s 550574510e-09 1s 1s 550582630e-09 0s 0s 550584430e-09 1s 1s 550584790e-09 1s 1s 550592870e-09 0s 0s 550594670e-09 1s 1s 550595070e-09 1s 1s 550603110e-09 0s 0s 550604910e-09 1s 1s 550605350e-09 1s 1s 550613350e-09 0s 0s 550615150e-09 1s 1s 550615630e-09 1s 1s 550623590e-09 0s 0s 550625390e-09 1s 1s 550625910e-09 1s 1s 550633830e-09 0s 0s 550635630e-09 1s 1s 550636190e-09 1s 1s 550644070e-09 0s 0s 550645870e-09 1s 1s 550646470e-09 1s 1s 550654310e-09 0s 0s 550656110e-09 1s 1s 550656750e-09 1s 1s 550664550e-09 0s 0s 550666350e-09 1s 1s 550667030e-09 1s 1s 550674790e-09 0s 0s 550676590e-09 1s 1s 550677310e-09 1s 1s 550685030e-09 0s 0s 550686830e-09 1s 1s 550687590e-09 1s 1s 550695270e-09 0s 0s 550697070e-09 1s 1s 550697870e-09 1s 1s 550705510e-09 0s 0s 550707310e-09 1s 1s 550708150e-09 1s 1s 550715750e-09 0s 0s 550717550e-09 1s 1s 550718430e-09 1s 1s 550725990e-09 0s 0s 550727790e-09 1s 1s 550728710e-09 1s 1s 550736230e-09 0s 0s 550738030e-09 1s 1s 550738990e-09 1s 1s 550746470e-09 0s 0s 550748270e-09 1s 1s 550749270e-09 1s 1s 550756710e-09 0s 0s 550758510e-09 1s 1s 550759550e-09 1s 1s 550766950e-09 0s 0s 550768750e-09 1s 1s 550769830e-09 1s 1s 550777190e-09 0s 0s 550778990e-09 1s 1s 550780110e-09 1s 1s 550787430e-09 0s 0s 550789230e-09 1s 1s 550790390e-09 1s 1s 550797670e-09 0s 0s 550799470e-09 1s 1s 550800670e-09 1s 1s 550807910e-09 0s 0s 550809710e-09 1s 1s 550810950e-09 1s 1s 550818150e-09 0s 0s 550819950e-09 1s 1s 550821230e-09 1s 1s 550828390e-09 0s 0s 550830190e-09 1s 1s 550831510e-09 1s 1s 550838630e-09 0s 0s 550840430e-09 1s 1s 550841790e-09 1s 1s 550848870e-09 0s 0s 550850670e-09 1s 1s 550852070e-09 1s 1s 550859110e-09 0s 0s 550860910e-09 1s 1s 550862350e-09 1s 1s 550869350e-09 0s 0s 550871150e-09 1s 1s 550872630e-09 1s 1s 550879590e-09 0s 0s 550881390e-09 1s 1s 550882910e-09 1s 1s 550889830e-09 0s 0s 550891630e-09 1s 1s 550893190e-09 1s 1s 550900070e-09 0s 0s 550901870e-09 1s 1s 550903470e-09 1s 1s 550910310e-09 0s 0s 550912110e-09 1s 1s 550913750e-09 1s 1s 550920550e-09 0s 0s 550922350e-09 1s 1s 550924030e-09 1s 1s 550930790e-09 0s 0s 550932590e-09 1s 1s 550934310e-09 1s 1s 550941030e-09 0s 0s 550942830e-09 1s 1s 550944590e-09 1s 1s 550951270e-09 0s 0s 550953070e-09 1s 1s 550954870e-09 1s 1s 550961510e-09 0s 0s 550963310e-09 1s 1s 550965150e-09 1s 1s 550971750e-09 0s 0s 550973550e-09 1s 1s 550975430e-09 1s 1s 550981990e-09 0s 0s 550983790e-09 1s 1s 550985710e-09 1s 1s 550992230e-09 0s 0s 550994030e-09 1s 1s 550995990e-09 1s 1s 551002470e-09 0s 0s 551004270e-09 1s 1s 551006270e-09 1s 1s 551012710e-09 0s 0s 551014510e-09 1s 1s 551016550e-09 1s 1s 551022950e-09 0s 0s 551024750e-09 1s 1s 551026830e-09 1s 1s 551033190e-09 0s 0s 551034990e-09 1s 1s 551037110e-09 1s 1s 551043430e-09 0s 0s 551045230e-09 1s 1s 551047390e-09 1s 1s 551053670e-09 0s 0s 551055470e-09 1s 1s 551057670e-09 1s 1s 551063910e-09 0s 0s 551065710e-09 1s 1s 551067950e-09 1s 1s 551074150e-09 0s 0s 551075950e-09 1s 1s 551078230e-09 1s 1s 551084390e-09 0s 0s 551086190e-09 1s 1s 551088510e-09 1s 1s 551094630e-09 0s 0s 551096430e-09 1s 1s 551098790e-09 1s 1s 551104870e-09 0s 0s 551106670e-09 1s 1s 551109070e-09 1s 1s 551115110e-09 0s 0s 551116910e-09 1s 1s 551119350e-09 1s 1s 551125350e-09 0s 0s 551127150e-09 1s 1s 551129630e-09 1s 1s 551135590e-09 0s 0s 551137390e-09 1s 1s 551139910e-09 1s 1s 551145830e-09 0s 0s 551147630e-09 1s 1s 551150190e-09 1s 1s 551156070e-09 0s 0s 551157870e-09 1s 1s 551160470e-09 1s 1s 551166310e-09 0s 0s 551168110e-09 1s 1s 551170750e-09 1s 1s 551176550e-09 0s 0s 551178350e-09 1s 1s 551181030e-09 1s 1s 551186790e-09 0s 0s 551188590e-09 1s 1s 551191310e-09 1s 1s 551197030e-09 0s 0s 551198830e-09 1s 1s 551201590e-09 1s 1s 551207270e-09 0s 0s 551209070e-09 1s 1s 551211870e-09 1s 1s 551217510e-09 0s 0s 551219310e-09 1s 1s 551222150e-09 1s 1s 551227750e-09 0s 0s 551229550e-09 1s 1s 551232430e-09 1s 1s 551237990e-09 0s 0s 551239790e-09 1s 1s 551242710e-09 1s 1s 551248230e-09 0s 0s 551250030e-09 1s 1s 551252990e-09 1s 1s 551258470e-09 0s 0s 551260270e-09 1s 1s 551263270e-09 1s 1s 551268710e-09 0s 0s 551270510e-09 1s 1s 551273550e-09 1s 1s 551278950e-09 0s 0s 551280750e-09 1s 1s 551283830e-09 1s 1s 551289190e-09 0s 0s 551290990e-09 1s 1s 551294110e-09 1s 1s 551299430e-09 0s 0s 551301230e-09 1s 1s 551304390e-09 1s 1s 551309670e-09 0s 0s 551311470e-09 1s 1s 551314670e-09 1s 1s 551319910e-09 0s 0s 551321710e-09 1s 1s 551324950e-09 1s 1s 551330150e-09 0s 0s 551331950e-09 1s 1s 551335230e-09 1s 1s 551340390e-09 0s 0s 551342190e-09 1s 1s 551345510e-09 1s 1s 551350630e-09 0s 0s 551352430e-09 1s 1s 551355790e-09 1s 1s 551360870e-09 0s 0s 551362670e-09 1s 1s 551366070e-09 1s 1s 551371110e-09 0s 0s 551372910e-09 1s 1s 551376350e-09 1s 1s 551381350e-09 0s 0s 551383150e-09 1s 1s 551386630e-09 1s 1s 551391590e-09 0s 0s 551393390e-09 1s 1s 551396910e-09 1s 1s 551401830e-09 0s 0s 551403630e-09 1s 1s 551407190e-09 1s 1s 551412070e-09 0s 0s 551413870e-09 1s 1s 551417470e-09 1s 1s 551422310e-09 0s 0s 551424110e-09 1s 1s 551427750e-09 1s 1s 551432550e-09 0s 0s 551434350e-09 1s 1s 551438030e-09 1s 1s 551442790e-09 0s 0s 551444590e-09 1s 1s 551448310e-09 1s 1s 551453030e-09 0s 0s 551454830e-09 1s 1s 551458590e-09 1s 1s 551463270e-09 0s 0s 551465070e-09 1s 1s 551468870e-09 1s 1s 551473510e-09 0s 0s 551475310e-09 1s 1s 551479150e-09 1s 1s 551483750e-09 0s 0s 551485550e-09 1s 1s 551489430e-09 1s 1s 551493990e-09 0s 0s 551495790e-09 1s 1s 551499710e-09 1s 1s 551504230e-09 0s 0s 551506030e-09 1s 1s 551509990e-09 1s 1s 551514470e-09 0s 0s 551516270e-09 1s 1s 551520270e-09 1s 1s 551524710e-09 0s 0s 551526510e-09 1s 1s 551530550e-09 1s 1s 551534950e-09 0s 0s 551536750e-09 1s 1s 551540830e-09 1s 1s 551545190e-09 0s 0s 551546990e-09 1s 1s 551551110e-09 1s 1s 551555430e-09 0s 0s 551557230e-09 1s 1s 551561390e-09 1s 1s 551565670e-09 0s 0s 551567470e-09 1s 1s 551571670e-09 1s 1s 551575910e-09 0s 0s 551577710e-09 1s 1s 551581950e-09 1s 1s 551586150e-09 0s 0s 551587950e-09 1s 1s 551592230e-09 1s 1s 551596390e-09 0s 0s 551598190e-09 1s 1s 551602510e-09 1s 1s 551606630e-09 0s 0s 551608430e-09 1s 1s 551612790e-09 1s 1s 551616870e-09 0s 0s 551618670e-09 1s 1s 551623070e-09 1s 1s 551627110e-09 0s 0s 551628910e-09 1s 1s 551633350e-09 1s 1s 551637350e-09 0s 0s 551639150e-09 1s 1s 551643630e-09 1s 1s 551647590e-09 0s 0s 551649390e-09 1s 1s 551653910e-09 1s 1s 551657830e-09 0s 0s 551659630e-09 1s 1s 551664190e-09 1s 1s 551668070e-09 0s 0s 551669870e-09 1s 1s 551674470e-09 1s 1s 551678310e-09 0s 0s 551680110e-09 1s 1s 551684750e-09 1s 1s 551688550e-09 0s 0s 551690350e-09 1s 1s 551695030e-09 1s 1s 551698790e-09 0s 0s 551700590e-09 1s 1s 551705310e-09 1s 1s 551709030e-09 0s 0s 551710830e-09 1s 1s 551715590e-09 1s 1s 551719270e-09 0s 0s 551721070e-09 1s 1s 551725870e-09 1s 1s 551729510e-09 0s 0s 551731310e-09 1s 1s 551736150e-09 1s 1s 551739750e-09 0s 0s 551741550e-09 1s 1s 551746430e-09 1s 1s 551749990e-09 0s 0s 551751790e-09 1s 1s 551756710e-09 1s 1s 551760230e-09 0s 0s 551762030e-09 1s 1s 551766990e-09 1s 1s 551770470e-09 0s 0s 551772270e-09 1s 1s 551777270e-09 1s 1s 551780710e-09 0s 0s 551782510e-09 1s 1s 551787550e-09 1s 1s 551790950e-09 0s 0s 551792750e-09 1s 1s 551797830e-09 1s 1s 551801190e-09 0s 0s 551802990e-09 1s 1s 551808110e-09 1s 1s 551811430e-09 0s 0s 551813230e-09 1s 1s 551818390e-09 1s 1s 551821670e-09 0s 0s 551823470e-09 1s 1s 551828670e-09 1s 1s 551831910e-09 0s 0s 551833710e-09 1s 1s 551838950e-09 1s 1s 551842150e-09 0s 0s 551843950e-09 1s 1s 551849230e-09 1s 1s 551852390e-09 0s 0s 551854190e-09 1s 1s 551859510e-09 1s 1s 551862630e-09 0s 0s 551864430e-09 1s 1s 551869790e-09 1s 1s 551872870e-09 0s 0s 551874670e-09 1s 1s 551880070e-09 1s 1s 551883110e-09 0s 0s 551884910e-09 1s 1s 551890350e-09 1s 1s 551893350e-09 0s 0s 551895150e-09 1s 1s 551900630e-09 1s 1s 551903590e-09 0s 0s 551905390e-09 1s 1s 551910910e-09 1s 1s 551913830e-09 0s 0s 551915630e-09 1s 1s 551921190e-09 1s 1s 551924070e-09 0s 0s 551925870e-09 1s 1s 551931470e-09 1s 1s 551934310e-09 0s 0s 551936110e-09 1s 1s 551941750e-09 1s 1s 551944550e-09 0s 0s 551946350e-09 1s 1s 551952030e-09 1s 1s 551954790e-09 0s 0s 551956590e-09 1s 1s 551962310e-09 1s 1s 551965030e-09 0s 0s 551966830e-09 1s 1s 551972590e-09 1s 1s 551975270e-09 0s 0s 551977070e-09 1s 1s 551982870e-09 1s 1s 551985510e-09 0s 0s 551987310e-09 1s 1s 551993150e-09 1s 1s 551995750e-09 0s 0s 551997550e-09 1s 1s 552003430e-09 1s 1s 552005990e-09 0s 0s 552007790e-09 1s 1s 552013710e-09 1s 1s 552016230e-09 0s 0s 552018030e-09 1s 1s 552023990e-09 1s 1s 552026470e-09 0s 0s 552028270e-09 1s 1s 552034270e-09 1s 1s 552036710e-09 0s 0s 552038510e-09 1s 1s 552044550e-09 1s 1s 552046950e-09 0s 0s 552048750e-09 1s 1s 552054830e-09 1s 1s 552057190e-09 0s 0s 552058990e-09 1s 1s 552065110e-09 1s 1s 552067430e-09 0s 0s 552069230e-09 1s 1s 552075390e-09 1s 1s 552077670e-09 0s 0s 552079470e-09 1s 1s 552085670e-09 1s 1s 552087910e-09 0s 0s 552089710e-09 1s 1s 552095950e-09 1s 1s 552098150e-09 0s 0s 552099950e-09 1s 1s 552106230e-09 1s 1s 552108390e-09 0s 0s 552110190e-09 1s 1s 552116510e-09 1s 1s 552118630e-09 0s 0s 552120430e-09 1s 1s 552126790e-09 1s 1s 552128870e-09 0s 0s 552130670e-09 1s 1s 552137070e-09 1s 1s 552139110e-09 0s 0s 552140910e-09 1s 1s 552147350e-09 1s 1s 552149350e-09 0s 0s 552151150e-09 1s 1s 552157630e-09 1s 1s 552159590e-09 0s 0s 552161390e-09 1s 1s 552167910e-09 1s 1s 552169830e-09 0s 0s 552171630e-09 1s 1s 552178190e-09 1s 1s 552180070e-09 0s 0s 552181870e-09 1s 1s 552188470e-09 1s 1s 552190310e-09 0s 0s 552192110e-09 1s 1s 552198750e-09 1s 1s 552200550e-09 0s 0s 552202350e-09 1s 1s 552209030e-09 1s 1s 552210790e-09 0s 0s 552212590e-09 1s 1s 552219310e-09 1s 1s 552221030e-09 0s 0s 552222830e-09 1s 1s 552229590e-09 1s 1s 552231270e-09 0s 0s 552233070e-09 1s 1s 552239870e-09 1s 1s 552241510e-09 0s 0s 552243310e-09 1s 1s 552250150e-09 1s 1s 552251750e-09 0s 0s 552253550e-09 1s 1s 552260430e-09 1s 1s 552261990e-09 0s 0s 552263790e-09 1s 1s 552270710e-09 1s 1s 552272230e-09 0s 0s 552274030e-09 1s 1s 552280990e-09 1s 1s 552282470e-09 0s 0s 552284270e-09 1s 1s 552291270e-09 1s 1s 552292710e-09 0s 0s 552294510e-09 1s 1s 552301550e-09 1s 1s 552302950e-09 0s 0s 552304750e-09 1s 1s 552311830e-09 1s 1s 552313190e-09 0s 0s 552314990e-09 1s 1s 552322110e-09 1s 1s 552323430e-09 0s 0s 552325230e-09 1s 1s 552332390e-09 1s 1s 552333670e-09 0s 0s 552335470e-09 1s 1s 552342670e-09 1s 1s 552343910e-09 0s 0s 552345710e-09 1s 1s 552352950e-09 1s 1s 552354150e-09 0s 0s 552355950e-09 1s 1s 552363230e-09 1s 1s 552364390e-09 0s 0s 552366190e-09 1s 1s 552373510e-09 1s 1s 552374630e-09 0s 0s 552376430e-09 1s 1s 552383790e-09 1s 1s 552384870e-09 0s 0s 552386670e-09 1s 1s 552394070e-09 1s 1s 552395110e-09 0s 0s 552396910e-09 1s 1s 552404350e-09 1s 1s 552405350e-09 0s 0s 552407150e-09 1s 1s 552414630e-09 1s 1s 552415590e-09 0s 0s 552417390e-09 1s 1s 552424910e-09 1s 1s 552425830e-09 0s 0s 552427630e-09 1s 1s 552435190e-09 1s 1s 552436070e-09 0s 0s 552437870e-09 1s 1s 552445470e-09 1s 1s 552446310e-09 0s 0s 552448110e-09 1s 1s 552455750e-09 1s 1s 552456550e-09 0s 0s 552458350e-09 1s 1s 552466030e-09 1s 1s 552466790e-09 0s 0s 552468590e-09 1s 1s 552476310e-09 1s 1s 552477030e-09 0s 0s 552478830e-09 1s 1s 552486590e-09 1s 1s 552487270e-09 0s 0s 552489070e-09 1s 1s 552496870e-09 1s 1s 552497510e-09 0s 0s 552499310e-09 1s 1s 552507150e-09 1s 1s 552507750e-09 0s 0s 552509550e-09 1s 1s 552517430e-09 1s 1s 552517990e-09 0s 0s 552519790e-09 1s 1s 552527710e-09 1s 1s 552528230e-09 0s 0s 552530030e-09 1s 1s 552537990e-09 1s 1s 552538470e-09 0s 0s 552540270e-09 1s 1s 552548270e-09 1s 1s 552548710e-09 0s 0s 552550510e-09 1s 1s 552558550e-09 1s 1s 552558950e-09 0s 0s 552560750e-09 1s 1s 552568830e-09 1s 1s 552569190e-09 0s 0s 552570990e-09 1s 1s 552579110e-09 1s 1s 552579430e-09 0s 0s 552581230e-09 1s 1s 552589390e-09 1s 1s 552589670e-09 0s 0s 552591470e-09 1s 1s 552599670e-09 1s 1s 552599910e-09 0s 0s 552601710e-09 1s 1s 552609950e-09 1s 1s 552610150e-09 0s 0s 552611950e-09 1s 1s 552620230e-09 1s 1s 552620390e-09 0s 0s 552622190e-09 1s 1s 552630510e-09 1s 1s 552630630e-09 0s 0s 552632430e-09 1s 1s 552640790e-09 1s 1s 552640870e-09 0s 0s 552642670e-09 1s 1s 552651070e-09 1s 1s 552651110e-09 0s 0s 552652910e-09 1s 1s 552661350e-09 0s 0s 552663150e-09 1s 1s 552671590e-09 0s 0s 552671630e-09 0s 0s 552673390e-09 1s 1s 552681830e-09 0s 0s 552681910e-09 0s 0s 552683630e-09 1s 1s 552692070e-09 0s 0s 552692190e-09 0s 0s 552693870e-09 1s 1s 552702310e-09 0s 0s 552702470e-09 0s 0s 552704110e-09 1s 1s 552712550e-09 0s 0s 552712750e-09 0s 0s 552714350e-09 1s 1s 552722790e-09 0s 0s 552723030e-09 0s 0s 552724590e-09 1s 1s 552733030e-09 0s 0s 552733310e-09 0s 0s 552734830e-09 1s 1s 552743270e-09 0s 0s 552743590e-09 0s 0s 552745070e-09 1s 1s 552753510e-09 0s 0s 552753870e-09 0s 0s 552755310e-09 1s 1s 552763750e-09 0s 0s 552764150e-09 0s 0s 552765550e-09 1s 1s 552773990e-09 0s 0s 552774430e-09 0s 0s 552775790e-09 1s 1s 552784230e-09 0s 0s 552784710e-09 0s 0s 552786030e-09 1s 1s 552794470e-09 0s 0s 552794990e-09 0s 0s 552796270e-09 1s 1s 552804710e-09 0s 0s 552805270e-09 0s 0s 552806510e-09 1s 1s 552814950e-09 0s 0s 552815550e-09 0s 0s 552816750e-09 1s 1s 552825190e-09 0s 0s 552825830e-09 0s 0s 552826990e-09 1s 1s 552835430e-09 0s 0s 552836110e-09 0s 0s 552837230e-09 1s 1s 552845670e-09 0s 0s 552846390e-09 0s 0s 552847470e-09 1s 1s 552855910e-09 0s 0s 552856670e-09 0s 0s 552857710e-09 1s 1s 552866150e-09 0s 0s 552866950e-09 0s 0s 552867950e-09 1s 1s 552876390e-09 0s 0s 552877230e-09 0s 0s 552878190e-09 1s 1s 552886630e-09 0s 0s 552887510e-09 0s 0s 552888430e-09 1s 1s 552896870e-09 0s 0s 552897790e-09 0s 0s 552898670e-09 1s 1s 552907110e-09 0s 0s 552908070e-09 0s 0s 552908910e-09 1s 1s 552917350e-09 0s 0s 552918350e-09 0s 0s 552919150e-09 1s 1s 552927590e-09 0s 0s 552928630e-09 0s 0s 552929390e-09 1s 1s 552937830e-09 0s 0s 552938910e-09 0s 0s 552939630e-09 1s 1s 552948070e-09 0s 0s 552949190e-09 0s 0s 552949870e-09 1s 1s 552958310e-09 0s 0s 552959470e-09 0s 0s 552960110e-09 1s 1s 552968550e-09 0s 0s 552969750e-09 0s 0s 552970350e-09 1s 1s 552978790e-09 0s 0s 552980030e-09 0s 0s 552980590e-09 1s 1s 552989030e-09 0s 0s 552990310e-09 0s 0s 552990830e-09 1s 1s 552999270e-09 0s 0s 553000590e-09 0s 0s 553001070e-09 1s 1s 553009510e-09 0s 0s 553010870e-09 0s 0s 553011310e-09 1s 1s 553019750e-09 0s 0s 553021150e-09 0s 0s 553021550e-09 1s 1s 553029990e-09 0s 0s 553031430e-09 0s 0s 553031790e-09 1s 1s 553040230e-09 0s 0s 553041710e-09 0s 0s 553042030e-09 1s 1s 553050470e-09 0s 0s 553051990e-09 0s 0s 553052270e-09 1s 1s 553060710e-09 0s 0s 553062270e-09 0s 0s 553062510e-09 1s 1s 553070950e-09 0s 0s 553072550e-09 0s 0s 553072750e-09 1s 1s 553081190e-09 0s 0s 553082830e-09 0s 0s 553082990e-09 1s 1s 553091430e-09 0s 0s 553093110e-09 0s 0s 553093230e-09 1s 1s 553101670e-09 0s 0s 553103390e-09 0s 0s 553103470e-09 1s 1s 553111910e-09 0s 0s 553113670e-09 0s 0s 553113710e-09 1s 1s 553122150e-09 0s 0s 553123950e-09 1s 1s 553123990e-09 1s 1s 553132430e-09 0s 0s 553134190e-09 1s 1s 553134270e-09 1s 1s 553142670e-09 0s 0s 553144430e-09 1s 1s 553144550e-09 1s 1s 553152910e-09 0s 0s 553154670e-09 1s 1s 553154830e-09 1s 1s 553163150e-09 0s 0s 553164910e-09 1s 1s 553165110e-09 1s 1s 553173390e-09 0s 0s 553175150e-09 1s 1s 553175390e-09 1s 1s 553183630e-09 0s 0s 553185390e-09 1s 1s 553185670e-09 1s 1s 553193870e-09 0s 0s 553195630e-09 1s 1s 553195950e-09 1s 1s 553204110e-09 0s 0s 553205870e-09 1s 1s 553206230e-09 1s 1s 553214350e-09 0s 0s 553216110e-09 1s 1s 553216510e-09 1s 1s 553224590e-09 0s 0s 553226350e-09 1s 1s 553226790e-09 1s 1s 553234830e-09 0s 0s 553236590e-09 1s 1s 553237070e-09 1s 1s 553245070e-09 0s 0s 553246830e-09 1s 1s 553247350e-09 1s 1s 553255310e-09 0s 0s 553257070e-09 1s 1s 553257630e-09 1s 1s 553265550e-09 0s 0s 553267310e-09 1s 1s 553267910e-09 1s 1s 553275790e-09 0s 0s 553277550e-09 1s 1s 553278190e-09 1s 1s 553286030e-09 0s 0s 553287790e-09 1s 1s 553288470e-09 1s 1s 553296270e-09 0s 0s 553298030e-09 1s 1s 553298750e-09 1s 1s 553306510e-09 0s 0s 553308270e-09 1s 1s 553309030e-09 1s 1s 553316750e-09 0s 0s 553318510e-09 1s 1s 553319310e-09 1s 1s 553326990e-09 0s 0s 553328750e-09 1s 1s 553329590e-09 1s 1s 553337230e-09 0s 0s 553338990e-09 1s 1s 553339870e-09 1s 1s 553347470e-09 0s 0s 553349230e-09 1s 1s 553350150e-09 1s 1s 553357710e-09 0s 0s 553359470e-09 1s 1s 553360430e-09 1s 1s 553367950e-09 0s 0s 553369710e-09 1s 1s 553370710e-09 1s 1s 553378190e-09 0s 0s 553379950e-09 1s 1s 553380990e-09 1s 1s 553388430e-09 0s 0s 553390190e-09 1s 1s 553391270e-09 1s 1s 553398670e-09 0s 0s 553400430e-09 1s 1s 553401550e-09 1s 1s 553408910e-09 0s 0s 553410670e-09 1s 1s 553411830e-09 1s 1s 553419150e-09 0s 0s 553420910e-09 1s 1s 553422110e-09 1s 1s 553429390e-09 0s 0s 553431150e-09 1s 1s 553432390e-09 1s 1s 553439630e-09 0s 0s 553441390e-09 1s 1s 553442670e-09 1s 1s 553449870e-09 0s 0s 553451630e-09 1s 1s 553452950e-09 1s 1s 553460110e-09 0s 0s 553461870e-09 1s 1s 553463230e-09 1s 1s 553470350e-09 0s 0s 553472110e-09 1s 1s 553473510e-09 1s 1s 553480590e-09 0s 0s 553482350e-09 1s 1s 553483790e-09 1s 1s 553490830e-09 0s 0s 553492590e-09 1s 1s 553494070e-09 1s 1s 553501070e-09 0s 0s 553502830e-09 1s 1s 553504350e-09 1s 1s 553511310e-09 0s 0s 553513070e-09 1s 1s 553514630e-09 1s 1s 553521550e-09 0s 0s 553523310e-09 1s 1s 553524910e-09 1s 1s 553531790e-09 0s 0s 553533550e-09 1s 1s 553535190e-09 1s 1s 553542030e-09 0s 0s 553543790e-09 1s 1s 553545470e-09 1s 1s 553552270e-09 0s 0s 553554030e-09 1s 1s 553555750e-09 1s 1s 553562510e-09 0s 0s 553564270e-09 1s 1s 553566030e-09 1s 1s 553572750e-09 0s 0s 553574510e-09 1s 1s 553576310e-09 1s 1s 553582990e-09 0s 0s 553584750e-09 1s 1s 553586590e-09 1s 1s 553593230e-09 0s 0s 553594990e-09 1s 1s 553596870e-09 1s 1s 553603470e-09 0s 0s 553605230e-09 1s 1s 553607150e-09 1s 1s 553613710e-09 0s 0s 553615470e-09 1s 1s 553617430e-09 1s 1s 553623950e-09 0s 0s 553625710e-09 1s 1s 553627710e-09 1s 1s 553634190e-09 0s 0s 553635950e-09 1s 1s 553637990e-09 1s 1s 553644430e-09 0s 0s 553646190e-09 1s 1s 553648270e-09 1s 1s 553654670e-09 0s 0s 553656430e-09 1s 1s 553658550e-09 1s 1s 553664910e-09 0s 0s 553666670e-09 1s 1s 553668830e-09 1s 1s 553675150e-09 0s 0s 553676910e-09 1s 1s 553679110e-09 1s 1s 553685390e-09 0s 0s 553687150e-09 1s 1s 553689390e-09 1s 1s 553695630e-09 0s 0s 553697390e-09 1s 1s 553699670e-09 1s 1s 553705870e-09 0s 0s 553707630e-09 1s 1s 553709950e-09 1s 1s 553716110e-09 0s 0s 553717870e-09 1s 1s 553720230e-09 1s 1s 553726350e-09 0s 0s 553728110e-09 1s 1s 553730510e-09 1s 1s 553736590e-09 0s 0s 553738350e-09 1s 1s 553740790e-09 1s 1s 553746830e-09 0s 0s 553748590e-09 1s 1s 553751070e-09 1s 1s 553757070e-09 0s 0s 553758830e-09 1s 1s 553761350e-09 1s 1s 553767310e-09 0s 0s 553769070e-09 1s 1s 553771630e-09 1s 1s 553777550e-09 0s 0s 553779310e-09 1s 1s 553781910e-09 1s 1s 553787790e-09 0s 0s 553789550e-09 1s 1s 553792190e-09 1s 1s 553798030e-09 0s 0s 553799790e-09 1s 1s 553802470e-09 1s 1s 553808270e-09 0s 0s 553810030e-09 1s 1s 553812750e-09 1s 1s 553818510e-09 0s 0s 553820270e-09 1s 1s 553823030e-09 1s 1s 553828750e-09 0s 0s 553830510e-09 1s 1s 553833310e-09 1s 1s 553838990e-09 0s 0s 553840750e-09 1s 1s 553843590e-09 1s 1s 553849230e-09 0s 0s 553850990e-09 1s 1s 553853870e-09 1s 1s 553859470e-09 0s 0s 553861230e-09 1s 1s 553864150e-09 1s 1s 553869710e-09 0s 0s 553871470e-09 1s 1s 553874430e-09 1s 1s 553879950e-09 0s 0s 553881710e-09 1s 1s 553884710e-09 1s 1s 553890190e-09 0s 0s 553891950e-09 1s 1s 553894990e-09 1s 1s 553900430e-09 0s 0s 553902190e-09 1s 1s 553905270e-09 1s 1s 553910670e-09 0s 0s 553912430e-09 1s 1s 553915550e-09 1s 1s 553920910e-09 0s 0s 553922670e-09 1s 1s 553925830e-09 1s 1s 553931150e-09 0s 0s 553932910e-09 1s 1s 553936110e-09 1s 1s 553941390e-09 0s 0s 553943150e-09 1s 1s 553946390e-09 1s 1s 553951630e-09 0s 0s 553953390e-09 1s 1s 553956670e-09 1s 1s 553961870e-09 0s 0s 553963630e-09 1s 1s 553966950e-09 1s 1s 553972110e-09 0s 0s 553973870e-09 1s 1s 553977230e-09 1s 1s 553982350e-09 0s 0s 553984110e-09 1s 1s 553987510e-09 1s 1s 553992590e-09 0s 0s 553994350e-09 1s 1s 553997790e-09 1s 1s 554002830e-09 0s 0s 554004590e-09 1s 1s 554008070e-09 1s 1s 554013070e-09 0s 0s 554014830e-09 1s 1s 554018350e-09 1s 1s 554023310e-09 0s 0s 554025070e-09 1s 1s 554028630e-09 1s 1s 554033550e-09 0s 0s 554035310e-09 1s 1s 554038910e-09 1s 1s 554043790e-09 0s 0s 554045550e-09 1s 1s 554049190e-09 1s 1s 554054030e-09 0s 0s 554055790e-09 1s 1s 554059470e-09 1s 1s 554064270e-09 0s 0s 554066030e-09 1s 1s 554069750e-09 1s 1s 554074510e-09 0s 0s 554076270e-09 1s 1s 554080030e-09 1s 1s 554084750e-09 0s 0s 554086510e-09 1s 1s 554090310e-09 1s 1s 554094990e-09 0s 0s 554096750e-09 1s 1s 554100590e-09 1s 1s 554105230e-09 0s 0s 554106990e-09 1s 1s 554110870e-09 1s 1s 554115470e-09 0s 0s 554117230e-09 1s 1s 554121150e-09 1s 1s 554125710e-09 0s 0s 554127470e-09 1s 1s 554131430e-09 1s 1s 554135950e-09 0s 0s 554137710e-09 1s 1s 554141710e-09 1s 1s 554146190e-09 0s 0s 554147950e-09 1s 1s 554151990e-09 1s 1s 554156430e-09 0s 0s 554158190e-09 1s 1s 554162270e-09 1s 1s 554166670e-09 0s 0s 554168430e-09 1s 1s 554172550e-09 1s 1s 554176910e-09 0s 0s 554178670e-09 1s 1s 554182830e-09 1s 1s 554187150e-09 0s 0s 554188910e-09 1s 1s 554193110e-09 1s 1s 554197390e-09 0s 0s 554199150e-09 1s 1s 554203390e-09 1s 1s 554207630e-09 0s 0s 554209390e-09 1s 1s 554213670e-09 1s 1s 554217870e-09 0s 0s 554219630e-09 1s 1s 554223950e-09 1s 1s 554228110e-09 0s 0s 554229870e-09 1s 1s 554234230e-09 1s 1s 554238350e-09 0s 0s 554240110e-09 1s 1s 554244510e-09 1s 1s 554248590e-09 0s 0s 554250350e-09 1s 1s 554254790e-09 1s 1s 554258830e-09 0s 0s 554260590e-09 1s 1s 554265070e-09 1s 1s 554269070e-09 0s 0s 554270830e-09 1s 1s 554275350e-09 1s 1s 554279310e-09 0s 0s 554281070e-09 1s 1s 554285630e-09 1s 1s 554289550e-09 0s 0s 554291310e-09 1s 1s 554295910e-09 1s 1s 554299790e-09 0s 0s 554301550e-09 1s 1s 554306190e-09 1s 1s 554310030e-09 0s 0s 554311790e-09 1s 1s 554316470e-09 1s 1s 554320270e-09 0s 0s 554322030e-09 1s 1s 554326750e-09 1s 1s 554330510e-09 0s 0s 554332270e-09 1s 1s 554337030e-09 1s 1s 554340750e-09 0s 0s 554342510e-09 1s 1s 554347310e-09 1s 1s 554350990e-09 0s 0s 554352750e-09 1s 1s 554357590e-09 1s 1s 554361230e-09 0s 0s 554362990e-09 1s 1s 554367870e-09 1s 1s 554371470e-09 0s 0s 554373230e-09 1s 1s 554378150e-09 1s 1s 554381710e-09 0s 0s 554383470e-09 1s 1s 554388430e-09 1s 1s 554391950e-09 0s 0s 554393710e-09 1s 1s 554398710e-09 1s 1s 554402190e-09 0s 0s 554403950e-09 1s 1s 554408990e-09 1s 1s 554412430e-09 0s 0s 554414190e-09 1s 1s 554419270e-09 1s 1s 554422670e-09 0s 0s 554424430e-09 1s 1s 554429550e-09 1s 1s 554432910e-09 0s 0s 554434670e-09 1s 1s 554439830e-09 1s 1s 554443150e-09 0s 0s 554444910e-09 1s 1s 554450110e-09 1s 1s 554453390e-09 0s 0s 554455150e-09 1s 1s 554460390e-09 1s 1s 554463630e-09 0s 0s 554465390e-09 1s 1s 554470670e-09 1s 1s 554473870e-09 0s 0s 554475630e-09 1s 1s 554480950e-09 1s 1s 554484110e-09 0s 0s 554485870e-09 1s 1s 554491230e-09 1s 1s 554494350e-09 0s 0s 554496110e-09 1s 1s 554501510e-09 1s 1s 554504590e-09 0s 0s 554506350e-09 1s 1s 554511790e-09 1s 1s 554514830e-09 0s 0s 554516590e-09 1s 1s 554522070e-09 1s 1s 554525070e-09 0s 0s 554526830e-09 1s 1s 554532350e-09 1s 1s 554535310e-09 0s 0s 554537070e-09 1s 1s 554542630e-09 1s 1s 554545550e-09 0s 0s 554547310e-09 1s 1s 554552910e-09 1s 1s 554555790e-09 0s 0s 554557550e-09 1s 1s 554563190e-09 1s 1s 554566030e-09 0s 0s 554567790e-09 1s 1s 554573470e-09 1s 1s 554576270e-09 0s 0s 554578030e-09 1s 1s 554583750e-09 1s 1s 554586510e-09 0s 0s 554588270e-09 1s 1s 554594030e-09 1s 1s 554596750e-09 0s 0s 554598510e-09 1s 1s 554604310e-09 1s 1s 554606990e-09 0s 0s 554608750e-09 1s 1s 554614590e-09 1s 1s 554617230e-09 0s 0s 554618990e-09 1s 1s 554624870e-09 1s 1s 554627470e-09 0s 0s 554629230e-09 1s 1s 554635150e-09 1s 1s 554637710e-09 0s 0s 554639470e-09 1s 1s 554645430e-09 1s 1s 554647950e-09 0s 0s 554649710e-09 1s 1s 554655710e-09 1s 1s 554658190e-09 0s 0s 554659950e-09 1s 1s 554665990e-09 1s 1s 554668430e-09 0s 0s 554670190e-09 1s 1s 554676270e-09 1s 1s 554678670e-09 0s 0s 554680430e-09 1s 1s 554686550e-09 1s 1s 554688910e-09 0s 0s 554690670e-09 1s 1s 554696830e-09 1s 1s 554699150e-09 0s 0s 554700910e-09 1s 1s 554707110e-09 1s 1s 554709390e-09 0s 0s 554711150e-09 1s 1s 554717390e-09 1s 1s 554719630e-09 0s 0s 554721390e-09 1s 1s 554727670e-09 1s 1s 554729870e-09 0s 0s 554731630e-09 1s 1s 554737950e-09 1s 1s 554740110e-09 0s 0s 554741870e-09 1s 1s 554748230e-09 1s 1s 554750350e-09 0s 0s 554752110e-09 1s 1s 554758510e-09 1s 1s 554760590e-09 0s 0s 554762350e-09 1s 1s 554768790e-09 1s 1s 554770830e-09 0s 0s 554772590e-09 1s 1s 554779070e-09 1s 1s 554781070e-09 0s 0s 554782830e-09 1s 1s 554789350e-09 1s 1s 554791310e-09 0s 0s 554793070e-09 1s 1s 554799630e-09 1s 1s 554801550e-09 0s 0s 554803310e-09 1s 1s 554809910e-09 1s 1s 554811790e-09 0s 0s 554813550e-09 1s 1s 554820190e-09 1s 1s 554822030e-09 0s 0s 554823790e-09 1s 1s 554830470e-09 1s 1s 554832270e-09 0s 0s 554834030e-09 1s 1s 554840750e-09 1s 1s 554842510e-09 0s 0s 554844270e-09 1s 1s 554851030e-09 1s 1s 554852750e-09 0s 0s 554854510e-09 1s 1s 554861310e-09 1s 1s 554862990e-09 0s 0s 554864750e-09 1s 1s 554871590e-09 1s 1s 554873230e-09 0s 0s 554874990e-09 1s 1s 554881870e-09 1s 1s 554883470e-09 0s 0s 554885230e-09 1s 1s 554892150e-09 1s 1s 554893710e-09 0s 0s 554895470e-09 1s 1s 554902430e-09 1s 1s 554903950e-09 0s 0s 554905710e-09 1s 1s 554912710e-09 1s 1s 554914190e-09 0s 0s 554915950e-09 1s 1s 554922990e-09 1s 1s 554924430e-09 0s 0s 554926190e-09 1s 1s 554933270e-09 1s 1s 554934670e-09 0s 0s 554936430e-09 1s 1s 554943550e-09 1s 1s 554944910e-09 0s 0s 554946670e-09 1s 1s 554953830e-09 1s 1s 554955150e-09 0s 0s 554956910e-09 1s 1s 554964110e-09 1s 1s 554965390e-09 0s 0s 554967150e-09 1s 1s 554974390e-09 1s 1s 554975630e-09 0s 0s 554977390e-09 1s 1s 554984670e-09 1s 1s 554985870e-09 0s 0s 554987630e-09 1s 1s 554994950e-09 1s 1s 554996110e-09 0s 0s 554997870e-09 1s 1s 555005230e-09 1s 1s 555006350e-09 0s 0s 555008110e-09 1s 1s 555015510e-09 1s 1s 555016590e-09 0s 0s 555018350e-09 1s 1s 555025790e-09 1s 1s 555026830e-09 0s 0s 555028590e-09 1s 1s 555036070e-09 1s 1s 555037070e-09 0s 0s 555038830e-09 1s 1s 555046350e-09 1s 1s 555047310e-09 0s 0s 555049070e-09 1s 1s 555056630e-09 1s 1s 555057550e-09 0s 0s 555059310e-09 1s 1s 555066910e-09 1s 1s 555067790e-09 0s 0s 555069550e-09 1s 1s 555077190e-09 1s 1s 555078030e-09 0s 0s 555079790e-09 1s 1s 555087470e-09 1s 1s 555088270e-09 0s 0s 555090030e-09 1s 1s 555097750e-09 1s 1s 555098510e-09 0s 0s 555100270e-09 1s 1s 555108030e-09 1s 1s 555108750e-09 0s 0s 555110510e-09 1s 1s 555118310e-09 1s 1s 555118990e-09 0s 0s 555120750e-09 1s 1s 555128590e-09 1s 1s 555129230e-09 0s 0s 555130990e-09 1s 1s 555138870e-09 1s 1s 555139470e-09 0s 0s 555141230e-09 1s 1s 555149150e-09 1s 1s 555149710e-09 0s 0s 555151470e-09 1s 1s 555159430e-09 1s 1s 555159950e-09 0s 0s 555161710e-09 1s 1s 555169710e-09 1s 1s 555170190e-09 0s 0s 555171950e-09 1s 1s 555179990e-09 1s 1s 555180430e-09 0s 0s 555182190e-09 1s 1s 555190270e-09 1s 1s 555190670e-09 0s 0s 555192430e-09 1s 1s 555200550e-09 1s 1s 555200910e-09 0s 0s 555202670e-09 1s 1s 555210830e-09 1s 1s 555211150e-09 0s 0s 555212910e-09 1s 1s 555221110e-09 1s 1s 555221390e-09 0s 0s 555223150e-09 1s 1s 555231390e-09 1s 1s 555231630e-09 0s 0s 555233390e-09 1s 1s 555241670e-09 1s 1s 555241870e-09 0s 0s 555243630e-09 1s 1s 555251950e-09 1s 1s 555252110e-09 0s 0s 555253870e-09 1s 1s 555262230e-09 1s 1s 555262350e-09 0s 0s 555264110e-09 1s 1s 555272510e-09 1s 1s 555272590e-09 0s 0s 555274350e-09 1s 1s 555282790e-09 1s 1s 555282830e-09 0s 0s 555284590e-09 1s 1s 555293070e-09 0s 0s 555294830e-09 1s 1s 555303310e-09 0s 0s 555303350e-09 0s 0s 555305070e-09 1s 1s 555313550e-09 0s 0s 555313630e-09 0s 0s 555315310e-09 1s 1s 555323790e-09 0s 0s 555323910e-09 0s 0s 555325550e-09 1s 1s 555334030e-09 0s 0s 555334190e-09 0s 0s 555335790e-09 1s 1s 555344270e-09 0s 0s 555344470e-09 0s 0s 555346030e-09 1s 1s 555354510e-09 0s 0s 555354750e-09 0s 0s 555356270e-09 1s 1s 555364750e-09 0s 0s 555365030e-09 0s 0s 555366510e-09 1s 1s 555374990e-09 0s 0s 555375310e-09 0s 0s 555376750e-09 1s 1s 555385230e-09 0s 0s 555385590e-09 0s 0s 555386990e-09 1s 1s 555395470e-09 0s 0s 555395870e-09 0s 0s 555397230e-09 1s 1s 555405710e-09 0s 0s 555406150e-09 0s 0s 555407470e-09 1s 1s 555415950e-09 0s 0s 555416430e-09 0s 0s 555417710e-09 1s 1s 555426190e-09 0s 0s 555426710e-09 0s 0s 555427950e-09 1s 1s 555436430e-09 0s 0s 555436990e-09 0s 0s 555438190e-09 1s 1s 555446670e-09 0s 0s 555447270e-09 0s 0s 555448430e-09 1s 1s 555456910e-09 0s 0s 555457550e-09 0s 0s 555458670e-09 1s 1s 555467150e-09 0s 0s 555467830e-09 0s 0s 555468910e-09 1s 1s 555477390e-09 0s 0s 555478110e-09 0s 0s 555479150e-09 1s 1s 555487630e-09 0s 0s 555488390e-09 0s 0s 555489390e-09 1s 1s 555497870e-09 0s 0s 555498670e-09 0s 0s 555499630e-09 1s 1s 555508110e-09 0s 0s 555508950e-09 0s 0s 555509870e-09 1s 1s 555518350e-09 0s 0s 555519230e-09 0s 0s 555520110e-09 1s 1s 555528590e-09 0s 0s 555529510e-09 0s 0s 555530350e-09 1s 1s 555538830e-09 0s 0s 555539790e-09 0s 0s 555540590e-09 1s 1s 555549070e-09 0s 0s 555550070e-09 0s 0s 555550830e-09 1s 1s 555559310e-09 0s 0s 555560350e-09 0s 0s 555561070e-09 1s 1s 555569550e-09 0s 0s 555570630e-09 0s 0s 555571310e-09 1s 1s 555579790e-09 0s 0s 555580910e-09 0s 0s 555581550e-09 1s 1s 555590030e-09 0s 0s 555591190e-09 0s 0s 555591790e-09 1s 1s 555600270e-09 0s 0s 555601470e-09 0s 0s 555602030e-09 1s 1s 555610510e-09 0s 0s 555611750e-09 0s 0s 555612270e-09 1s 1s 555620750e-09 0s 0s 555622030e-09 0s 0s 555622510e-09 1s 1s 555630990e-09 0s 0s 555632310e-09 0s 0s 555632750e-09 1s 1s 555641230e-09 0s 0s 555642590e-09 0s 0s 555642990e-09 1s 1s 555651470e-09 0s 0s 555652870e-09 0s 0s 555653230e-09 1s 1s 555661710e-09 0s 0s 555663150e-09 0s 0s 555663470e-09 1s 1s 555671950e-09 0s 0s 555673430e-09 0s 0s 555673710e-09 1s 1s 555682190e-09 0s 0s 555683710e-09 0s 0s 555683950e-09 1s 1s 555692430e-09 0s 0s 555693990e-09 0s 0s 555694190e-09 1s 1s 555702670e-09 0s 0s 555704270e-09 0s 0s 555704430e-09 1s 1s 555712910e-09 0s 0s 555714550e-09 0s 0s 555714670e-09 1s 1s 555723150e-09 0s 0s 555724830e-09 0s 0s 555724910e-09 1s 1s 555733390e-09 0s 0s 555735110e-09 0s 0s 555735150e-09 1s 1s 555743630e-09 0s 0s 555745390e-09 1s 1s 555745430e-09 1s 1s 555753910e-09 0s 0s 555755630e-09 1s 1s 555755710e-09 1s 1s 555764150e-09 0s 0s 555765870e-09 1s 1s 555765990e-09 1s 1s 555774390e-09 0s 0s 555776110e-09 1s 1s 555776270e-09 1s 1s 555784630e-09 0s 0s 555786350e-09 1s 1s 555786550e-09 1s 1s 555794870e-09 0s 0s 555796590e-09 1s 1s 555796830e-09 1s 1s 555805110e-09 0s 0s 555806830e-09 1s 1s 555807110e-09 1s 1s 555815350e-09 0s 0s 555817070e-09 1s 1s 555817390e-09 1s 1s 555825590e-09 0s 0s 555827310e-09 1s 1s 555827670e-09 1s 1s 555835830e-09 0s 0s 555837550e-09 1s 1s 555837950e-09 1s 1s 555846070e-09 0s 0s 555847790e-09 1s 1s 555848230e-09 1s 1s 555856310e-09 0s 0s 555858030e-09 1s 1s 555858510e-09 1s 1s 555866550e-09 0s 0s 555868270e-09 1s 1s 555868790e-09 1s 1s 555876790e-09 0s 0s 555878510e-09 1s 1s 555879070e-09 1s 1s 555887030e-09 0s 0s 555888750e-09 1s 1s 555889350e-09 1s 1s 555897270e-09 0s 0s 555898990e-09 1s 1s 555899630e-09 1s 1s 555907510e-09 0s 0s 555909230e-09 1s 1s 555909910e-09 1s 1s 555917750e-09 0s 0s 555919470e-09 1s 1s 555920190e-09 1s 1s 555927990e-09 0s 0s 555929710e-09 1s 1s 555930470e-09 1s 1s 555938230e-09 0s 0s 555939950e-09 1s 1s 555940750e-09 1s 1s 555948470e-09 0s 0s 555950190e-09 1s 1s 555951030e-09 1s 1s 555958710e-09 0s 0s 555960430e-09 1s 1s 555961310e-09 1s 1s 555968950e-09 0s 0s 555970670e-09 1s 1s 555971590e-09 1s 1s 555979190e-09 0s 0s 555980910e-09 1s 1s 555981870e-09 1s 1s 555989430e-09 0s 0s 555991150e-09 1s 1s 555992150e-09 1s 1s 555999670e-09 0s 0s 556001390e-09 1s 1s 556002430e-09 1s 1s 556009910e-09 0s 0s 556011630e-09 1s 1s 556012710e-09 1s 1s 556020150e-09 0s 0s 556021870e-09 1s 1s 556022990e-09 1s 1s 556030390e-09 0s 0s 556032110e-09 1s 1s 556033270e-09 1s 1s 556040630e-09 0s 0s 556042350e-09 1s 1s 556043550e-09 1s 1s 556050870e-09 0s 0s 556052590e-09 1s 1s 556053830e-09 1s 1s 556061110e-09 0s 0s 556062830e-09 1s 1s 556064110e-09 1s 1s 556071350e-09 0s 0s 556073070e-09 1s 1s 556074390e-09 1s 1s 556081590e-09 0s 0s 556083310e-09 1s 1s 556084670e-09 1s 1s 556091830e-09 0s 0s 556093550e-09 1s 1s 556094950e-09 1s 1s 556102070e-09 0s 0s 556103790e-09 1s 1s 556105230e-09 1s 1s 556112310e-09 0s 0s 556114030e-09 1s 1s 556115510e-09 1s 1s 556122550e-09 0s 0s 556124270e-09 1s 1s 556125790e-09 1s 1s 556132790e-09 0s 0s 556134510e-09 1s 1s 556136070e-09 1s 1s 556143030e-09 0s 0s 556144750e-09 1s 1s 556146350e-09 1s 1s 556153270e-09 0s 0s 556154990e-09 1s 1s 556156630e-09 1s 1s 556163510e-09 0s 0s 556165230e-09 1s 1s 556166910e-09 1s 1s 556173750e-09 0s 0s 556175470e-09 1s 1s 556177190e-09 1s 1s 556183990e-09 0s 0s 556185710e-09 1s 1s 556187470e-09 1s 1s 556194230e-09 0s 0s 556195950e-09 1s 1s 556197750e-09 1s 1s 556204470e-09 0s 0s 556206190e-09 1s 1s 556208030e-09 1s 1s 556214710e-09 0s 0s 556216430e-09 1s 1s 556218310e-09 1s 1s 556224950e-09 0s 0s 556226670e-09 1s 1s 556228590e-09 1s 1s 556235190e-09 0s 0s 556236910e-09 1s 1s 556238870e-09 1s 1s 556245430e-09 0s 0s 556247150e-09 1s 1s 556249150e-09 1s 1s 556255670e-09 0s 0s 556257390e-09 1s 1s 556259430e-09 1s 1s 556265910e-09 0s 0s 556267630e-09 1s 1s 556269710e-09 1s 1s 556276150e-09 0s 0s 556277870e-09 1s 1s 556279990e-09 1s 1s 556286390e-09 0s 0s 556288110e-09 1s 1s 556290270e-09 1s 1s 556296630e-09 0s 0s 556298350e-09 1s 1s 556300550e-09 1s 1s 556306870e-09 0s 0s 556308590e-09 1s 1s 556310830e-09 1s 1s 556317110e-09 0s 0s 556318830e-09 1s 1s 556321110e-09 1s 1s 556327350e-09 0s 0s 556329070e-09 1s 1s 556331390e-09 1s 1s 556337590e-09 0s 0s 556339310e-09 1s 1s 556341670e-09 1s 1s 556347830e-09 0s 0s 556349550e-09 1s 1s 556351950e-09 1s 1s 556358070e-09 0s 0s 556359790e-09 1s 1s 556362230e-09 1s 1s 556368310e-09 0s 0s 556370030e-09 1s 1s 556372510e-09 1s 1s 556378550e-09 0s 0s 556380270e-09 1s 1s 556382790e-09 1s 1s 556388790e-09 0s 0s 556390510e-09 1s 1s 556393070e-09 1s 1s 556399030e-09 0s 0s 556400750e-09 1s 1s 556403350e-09 1s 1s 556409270e-09 0s 0s 556410990e-09 1s 1s 556413630e-09 1s 1s 556419510e-09 0s 0s 556421230e-09 1s 1s 556423910e-09 1s 1s 556429750e-09 0s 0s 556431470e-09 1s 1s 556434190e-09 1s 1s 556439990e-09 0s 0s 556441710e-09 1s 1s 556444470e-09 1s 1s 556450230e-09 0s 0s 556451950e-09 1s 1s 556454750e-09 1s 1s 556460470e-09 0s 0s 556462190e-09 1s 1s 556465030e-09 1s 1s 556470710e-09 0s 0s 556472430e-09 1s 1s 556475310e-09 1s 1s 556480950e-09 0s 0s 556482670e-09 1s 1s 556485590e-09 1s 1s 556491190e-09 0s 0s 556492910e-09 1s 1s 556495870e-09 1s 1s 556501430e-09 0s 0s 556503150e-09 1s 1s 556506150e-09 1s 1s 556511670e-09 0s 0s 556513390e-09 1s 1s 556516430e-09 1s 1s 556521910e-09 0s 0s 556523630e-09 1s 1s 556526710e-09 1s 1s 556532150e-09 0s 0s 556533870e-09 1s 1s 556536990e-09 1s 1s 556542390e-09 0s 0s 556544110e-09 1s 1s 556547270e-09 1s 1s 556552630e-09 0s 0s 556554350e-09 1s 1s 556557550e-09 1s 1s 556562870e-09 0s 0s 556564590e-09 1s 1s 556567830e-09 1s 1s 556573110e-09 0s 0s 556574830e-09 1s 1s 556578110e-09 1s 1s 556583350e-09 0s 0s 556585070e-09 1s 1s 556588390e-09 1s 1s 556593590e-09 0s 0s 556595310e-09 1s 1s 556598670e-09 1s 1s 556603830e-09 0s 0s 556605550e-09 1s 1s 556608950e-09 1s 1s 556614070e-09 0s 0s 556615790e-09 1s 1s 556619230e-09 1s 1s 556624310e-09 0s 0s 556626030e-09 1s 1s 556629510e-09 1s 1s 556634550e-09 0s 0s 556636270e-09 1s 1s 556639790e-09 1s 1s 556644790e-09 0s 0s 556646510e-09 1s 1s 556650070e-09 1s 1s 556655030e-09 0s 0s 556656750e-09 1s 1s 556660350e-09 1s 1s 556665270e-09 0s 0s 556666990e-09 1s 1s 556670630e-09 1s 1s 556675510e-09 0s 0s 556677230e-09 1s 1s 556680910e-09 1s 1s 556685750e-09 0s 0s 556687470e-09 1s 1s 556691190e-09 1s 1s 556695990e-09 0s 0s 556697710e-09 1s 1s 556701470e-09 1s 1s 556706230e-09 0s 0s 556707950e-09 1s 1s 556711750e-09 1s 1s 556716470e-09 0s 0s 556718190e-09 1s 1s 556722030e-09 1s 1s 556726710e-09 0s 0s 556728430e-09 1s 1s 556732310e-09 1s 1s 556736950e-09 0s 0s 556738670e-09 1s 1s 556742590e-09 1s 1s 556747190e-09 0s 0s 556748910e-09 1s 1s 556752870e-09 1s 1s 556757430e-09 0s 0s 556759150e-09 1s 1s 556763150e-09 1s 1s 556767670e-09 0s 0s 556769390e-09 1s 1s 556773430e-09 1s 1s 556777910e-09 0s 0s 556779630e-09 1s 1s 556783710e-09 1s 1s 556788150e-09 0s 0s 556789870e-09 1s 1s 556793990e-09 1s 1s 556798390e-09 0s 0s 556800110e-09 1s 1s 556804270e-09 1s 1s 556808630e-09 0s 0s 556810350e-09 1s 1s 556814550e-09 1s 1s 556818870e-09 0s 0s 556820590e-09 1s 1s 556824830e-09 1s 1s 556829110e-09 0s 0s 556830830e-09 1s 1s 556835110e-09 1s 1s 556839350e-09 0s 0s 556841070e-09 1s 1s 556845390e-09 1s 1s 556849590e-09 0s 0s 556851310e-09 1s 1s 556855670e-09 1s 1s 556859830e-09 0s 0s 556861550e-09 1s 1s 556865950e-09 1s 1s 556870070e-09 0s 0s 556871790e-09 1s 1s 556876230e-09 1s 1s 556880310e-09 0s 0s 556882030e-09 1s 1s 556886510e-09 1s 1s 556890550e-09 0s 0s 556892270e-09 1s 1s 556896790e-09 1s 1s 556900790e-09 0s 0s 556902510e-09 1s 1s 556907070e-09 1s 1s 556911030e-09 0s 0s 556912750e-09 1s 1s 556917350e-09 1s 1s 556921270e-09 0s 0s 556922990e-09 1s 1s 556927630e-09 1s 1s 556931510e-09 0s 0s 556933230e-09 1s 1s 556937910e-09 1s 1s 556941750e-09 0s 0s 556943470e-09 1s 1s 556948190e-09 1s 1s 556951990e-09 0s 0s 556953710e-09 1s 1s 556958470e-09 1s 1s 556962230e-09 0s 0s 556963950e-09 1s 1s 556968750e-09 1s 1s 556972470e-09 0s 0s 556974190e-09 1s 1s 556979030e-09 1s 1s 556982710e-09 0s 0s 556984430e-09 1s 1s 556989310e-09 1s 1s 556992950e-09 0s 0s 556994670e-09 1s 1s 556999590e-09 1s 1s 557003190e-09 0s 0s 557004910e-09 1s 1s 557009870e-09 1s 1s 557013430e-09 0s 0s 557015150e-09 1s 1s 557020150e-09 1s 1s 557023670e-09 0s 0s 557025390e-09 1s 1s 557030430e-09 1s 1s 557033910e-09 0s 0s 557035630e-09 1s 1s 557040710e-09 1s 1s 557044150e-09 0s 0s 557045870e-09 1s 1s 557050990e-09 1s 1s 557054390e-09 0s 0s 557056110e-09 1s 1s 557061270e-09 1s 1s 557064630e-09 0s 0s 557066350e-09 1s 1s 557071550e-09 1s 1s 557074870e-09 0s 0s 557076590e-09 1s 1s 557081830e-09 1s 1s 557085110e-09 0s 0s 557086830e-09 1s 1s 557092110e-09 1s 1s 557095350e-09 0s 0s 557097070e-09 1s 1s 557102390e-09 1s 1s 557105590e-09 0s 0s 557107310e-09 1s 1s 557112670e-09 1s 1s 557115830e-09 0s 0s 557117550e-09 1s 1s 557122950e-09 1s 1s 557126070e-09 0s 0s 557127790e-09 1s 1s 557133230e-09 1s 1s 557136310e-09 0s 0s 557138030e-09 1s 1s 557143510e-09 1s 1s 557146550e-09 0s 0s 557148270e-09 1s 1s 557153790e-09 1s 1s 557156790e-09 0s 0s 557158510e-09 1s 1s 557164070e-09 1s 1s 557167030e-09 0s 0s 557168750e-09 1s 1s 557174350e-09 1s 1s 557177270e-09 0s 0s 557178990e-09 1s 1s 557184630e-09 1s 1s 557187510e-09 0s 0s 557189230e-09 1s 1s 557194910e-09 1s 1s 557197750e-09 0s 0s 557199470e-09 1s 1s 557205190e-09 1s 1s 557207990e-09 0s 0s 557209710e-09 1s 1s 557215470e-09 1s 1s 557218230e-09 0s 0s 557219950e-09 1s 1s 557225750e-09 1s 1s 557228470e-09 0s 0s 557230190e-09 1s 1s 557236030e-09 1s 1s 557238710e-09 0s 0s 557240430e-09 1s 1s 557246310e-09 1s 1s 557248950e-09 0s 0s 557250670e-09 1s 1s 557256590e-09 1s 1s 557259190e-09 0s 0s 557260910e-09 1s 1s 557266870e-09 1s 1s 557269430e-09 0s 0s 557271150e-09 1s 1s 557277150e-09 1s 1s 557279670e-09 0s 0s 557281390e-09 1s 1s 557287430e-09 1s 1s 557289910e-09 0s 0s 557291630e-09 1s 1s 557297710e-09 1s 1s 557300150e-09 0s 0s 557301870e-09 1s 1s 557307990e-09 1s 1s 557310390e-09 0s 0s 557312110e-09 1s 1s 557318270e-09 1s 1s 557320630e-09 0s 0s 557322350e-09 1s 1s 557328550e-09 1s 1s 557330870e-09 0s 0s 557332590e-09 1s 1s 557338830e-09 1s 1s 557341110e-09 0s 0s 557342830e-09 1s 1s 557349110e-09 1s 1s 557351350e-09 0s 0s 557353070e-09 1s 1s 557359390e-09 1s 1s 557361590e-09 0s 0s 557363310e-09 1s 1s 557369670e-09 1s 1s 557371830e-09 0s 0s 557373550e-09 1s 1s 557379950e-09 1s 1s 557382070e-09 0s 0s 557383790e-09 1s 1s 557390230e-09 1s 1s 557392310e-09 0s 0s 557394030e-09 1s 1s 557400510e-09 1s 1s 557402550e-09 0s 0s 557404270e-09 1s 1s 557410790e-09 1s 1s 557412790e-09 0s 0s 557414510e-09 1s 1s 557421070e-09 1s 1s 557423030e-09 0s 0s 557424750e-09 1s 1s 557431350e-09 1s 1s 557433270e-09 0s 0s 557434990e-09 1s 1s 557441630e-09 1s 1s 557443510e-09 0s 0s 557445230e-09 1s 1s 557451910e-09 1s 1s 557453750e-09 0s 0s 557455470e-09 1s 1s 557462190e-09 1s 1s 557463990e-09 0s 0s 557465710e-09 1s 1s 557472470e-09 1s 1s 557474230e-09 0s 0s 557475950e-09 1s 1s 557482750e-09 1s 1s 557484470e-09 0s 0s 557486190e-09 1s 1s 557493030e-09 1s 1s 557494710e-09 0s 0s 557496430e-09 1s 1s 557503310e-09 1s 1s 557504950e-09 0s 0s 557506670e-09 1s 1s 557513590e-09 1s 1s 557515190e-09 0s 0s 557516910e-09 1s 1s 557523870e-09 1s 1s 557525430e-09 0s 0s 557527150e-09 1s 1s 557534150e-09 1s 1s 557535670e-09 0s 0s 557537390e-09 1s 1s 557544430e-09 1s 1s 557545910e-09 0s 0s 557547630e-09 1s 1s 557554710e-09 1s 1s 557556150e-09 0s 0s 557557870e-09 1s 1s 557564990e-09 1s 1s 557566390e-09 0s 0s 557568110e-09 1s 1s 557575270e-09 1s 1s 557576630e-09 0s 0s 557578350e-09 1s 1s 557585550e-09 1s 1s 557586870e-09 0s 0s 557588590e-09 1s 1s 557595830e-09 1s 1s 557597110e-09 0s 0s 557598830e-09 1s 1s 557606110e-09 1s 1s 557607350e-09 0s 0s 557609070e-09 1s 1s 557616390e-09 1s 1s 557617590e-09 0s 0s 557619310e-09 1s 1s 557626670e-09 1s 1s 557627830e-09 0s 0s 557629550e-09 1s 1s 557636950e-09 1s 1s 557638070e-09 0s 0s 557639790e-09 1s 1s 557647230e-09 1s 1s 557648310e-09 0s 0s 557650030e-09 1s 1s 557657510e-09 1s 1s 557658550e-09 0s 0s 557660270e-09 1s 1s 557667790e-09 1s 1s 557668790e-09 0s 0s 557670510e-09 1s 1s 557678070e-09 1s 1s 557679030e-09 0s 0s 557680750e-09 1s 1s 557688350e-09 1s 1s 557689270e-09 0s 0s 557690990e-09 1s 1s 557698630e-09 1s 1s 557699510e-09 0s 0s 557701230e-09 1s 1s 557708910e-09 1s 1s 557709750e-09 0s 0s 557711470e-09 1s 1s 557719190e-09 1s 1s 557719990e-09 0s 0s 557721710e-09 1s 1s 557729470e-09 1s 1s 557730230e-09 0s 0s 557731950e-09 1s 1s 557739750e-09 1s 1s 557740470e-09 0s 0s 557742190e-09 1s 1s 557750030e-09 1s 1s 557750710e-09 0s 0s 557752430e-09 1s 1s 557760310e-09 1s 1s 557760950e-09 0s 0s 557762670e-09 1s 1s 557770590e-09 1s 1s 557771190e-09 0s 0s 557772910e-09 1s 1s 557780870e-09 1s 1s 557781430e-09 0s 0s 557783150e-09 1s 1s 557791150e-09 1s 1s 557791670e-09 0s 0s 557793390e-09 1s 1s 557801430e-09 1s 1s 557801910e-09 0s 0s 557803630e-09 1s 1s 557811710e-09 1s 1s 557812150e-09 0s 0s 557813870e-09 1s 1s 557821990e-09 1s 1s 557822390e-09 0s 0s 557824110e-09 1s 1s 557832270e-09 1s 1s 557832630e-09 0s 0s 557834350e-09 1s 1s 557842550e-09 1s 1s 557842870e-09 0s 0s 557844590e-09 1s 1s 557852830e-09 1s 1s 557853110e-09 0s 0s 557854830e-09 1s 1s 557863110e-09 1s 1s 557863350e-09 0s 0s 557865070e-09 1s 1s 557873390e-09 1s 1s 557873590e-09 0s 0s 557875310e-09 1s 1s 557883670e-09 1s 1s 557883830e-09 0s 0s 557885550e-09 1s 1s 557893950e-09 1s 1s 557894070e-09 0s 0s 557895790e-09 1s 1s 557904230e-09 1s 1s 557904310e-09 0s 0s 557906030e-09 1s 1s 557914510e-09 1s 1s 557914550e-09 0s 0s 557916270e-09 1s 1s 557924790e-09 0s 0s 557926510e-09 1s 1s 557935030e-09 0s 0s 557935070e-09 0s 0s 557936750e-09 1s 1s 557945270e-09 0s 0s 557945350e-09 0s 0s 557946990e-09 1s 1s 557955510e-09 0s 0s 557955630e-09 0s 0s 557957230e-09 1s 1s 557965750e-09 0s 0s 557965910e-09 0s 0s 557967470e-09 1s 1s 557975990e-09 0s 0s 557976190e-09 0s 0s 557977710e-09 1s 1s 557986230e-09 0s 0s 557986470e-09 0s 0s 557987950e-09 1s 1s 557996470e-09 0s 0s 557996750e-09 0s 0s 557998190e-09 1s 1s 558006710e-09 0s 0s 558007030e-09 0s 0s 558008430e-09 1s 1s 558016950e-09 0s 0s 558017310e-09 0s 0s 558018670e-09 1s 1s 558027190e-09 0s 0s 558027590e-09 0s 0s 558028910e-09 1s 1s 558037430e-09 0s 0s 558037870e-09 0s 0s 558039150e-09 1s 1s 558047670e-09 0s 0s 558048150e-09 0s 0s 558049390e-09 1s 1s 558057910e-09 0s 0s 558058430e-09 0s 0s 558059630e-09 1s 1s 558068150e-09 0s 0s 558068710e-09 0s 0s 558069870e-09 1s 1s 558078390e-09 0s 0s 558078990e-09 0s 0s 558080110e-09 1s 1s 558088630e-09 0s 0s 558089270e-09 0s 0s 558090350e-09 1s 1s 558098870e-09 0s 0s 558099550e-09 0s 0s 558100590e-09 1s 1s 558109110e-09 0s 0s 558109830e-09 0s 0s 558110830e-09 1s 1s 558119350e-09 0s 0s 558120110e-09 0s 0s 558121070e-09 1s 1s 558129590e-09 0s 0s 558130390e-09 0s 0s 558131310e-09 1s 1s 558139830e-09 0s 0s 558140670e-09 0s 0s 558141550e-09 1s 1s 558150070e-09 0s 0s 558150950e-09 0s 0s 558151790e-09 1s 1s 558160310e-09 0s 0s 558161230e-09 0s 0s 558162030e-09 1s 1s 558170550e-09 0s 0s 558171510e-09 0s 0s 558172270e-09 1s 1s 558180790e-09 0s 0s 558181790e-09 0s 0s 558182510e-09 1s 1s 558191030e-09 0s 0s 558192070e-09 0s 0s 558192750e-09 1s 1s 558201270e-09 0s 0s 558202350e-09 0s 0s 558202990e-09 1s 1s 558211510e-09 0s 0s 558212630e-09 0s 0s 558213230e-09 1s 1s 558221750e-09 0s 0s 558222910e-09 0s 0s 558223470e-09 1s 1s 558231990e-09 0s 0s 558233190e-09 0s 0s 558233710e-09 1s 1s 558242230e-09 0s 0s 558243470e-09 0s 0s 558243950e-09 1s 1s 558252470e-09 0s 0s 558253750e-09 0s 0s 558254190e-09 1s 1s 558262710e-09 0s 0s 558264030e-09 0s 0s 558264430e-09 1s 1s 558272950e-09 0s 0s 558274310e-09 0s 0s 558274670e-09 1s 1s 558283190e-09 0s 0s 558284590e-09 0s 0s 558284910e-09 1s 1s 558293430e-09 0s 0s 558294870e-09 0s 0s 558295150e-09 1s 1s 558303670e-09 0s 0s 558305150e-09 0s 0s 558305390e-09 1s 1s 558313910e-09 0s 0s 558315430e-09 0s 0s 558315630e-09 1s 1s 558324150e-09 0s 0s 558325710e-09 0s 0s 558325870e-09 1s 1s 558334390e-09 0s 0s 558335990e-09 0s 0s 558336110e-09 1s 1s 558344630e-09 0s 0s 558346270e-09 0s 0s 558346350e-09 1s 1s 558354870e-09 0s 0s 558356550e-09 0s 0s 558356590e-09 1s 1s 558365110e-09 0s 0s 558366830e-09 1s 1s 558366870e-09 1s 1s 558375390e-09 0s 0s 558377070e-09 1s 1s 558377150e-09 1s 1s 558385630e-09 0s 0s 558387310e-09 1s 1s 558387430e-09 1s 1s 558395870e-09 0s 0s 558397550e-09 1s 1s 558397710e-09 1s 1s 558406110e-09 0s 0s 558407790e-09 1s 1s 558407990e-09 1s 1s 558416350e-09 0s 0s 558418030e-09 1s 1s 558418270e-09 1s 1s 558426590e-09 0s 0s 558428270e-09 1s 1s 558428550e-09 1s 1s 558436830e-09 0s 0s 558438510e-09 1s 1s 558438830e-09 1s 1s 558447070e-09 0s 0s 558448750e-09 1s 1s 558449110e-09 1s 1s 558457310e-09 0s 0s 558458990e-09 1s 1s 558459390e-09 1s 1s 558467550e-09 0s 0s 558469230e-09 1s 1s 558469670e-09 1s 1s 558477790e-09 0s 0s 558479470e-09 1s 1s 558479950e-09 1s 1s 558488030e-09 0s 0s 558489710e-09 1s 1s 558490230e-09 1s 1s 558498270e-09 0s 0s 558499950e-09 1s 1s 558500510e-09 1s 1s 558508510e-09 0s 0s 558510190e-09 1s 1s 558510790e-09 1s 1s 558518750e-09 0s 0s 558520430e-09 1s 1s 558521070e-09 1s 1s 558528990e-09 0s 0s 558530670e-09 1s 1s 558531350e-09 1s 1s 558539230e-09 0s 0s 558540910e-09 1s 1s 558541630e-09 1s 1s 558549470e-09 0s 0s 558551150e-09 1s 1s 558551910e-09 1s 1s 558559710e-09 0s 0s 558561390e-09 1s 1s 558562190e-09 1s 1s 558569950e-09 0s 0s 558571630e-09 1s 1s 558572470e-09 1s 1s 558580190e-09 0s 0s 558581870e-09 1s 1s 558582750e-09 1s 1s 558590430e-09 0s 0s 558592110e-09 1s 1s 558593030e-09 1s 1s 558600670e-09 0s 0s 558602350e-09 1s 1s 558603310e-09 1s 1s 558610910e-09 0s 0s 558612590e-09 1s 1s 558613590e-09 1s 1s 558621150e-09 0s 0s 558622830e-09 1s 1s 558623870e-09 1s 1s 558631390e-09 0s 0s 558633070e-09 1s 1s 558634150e-09 1s 1s 558641630e-09 0s 0s 558643310e-09 1s 1s 558644430e-09 1s 1s 558651870e-09 0s 0s 558653550e-09 1s 1s 558654710e-09 1s 1s 558662110e-09 0s 0s 558663790e-09 1s 1s 558664990e-09 1s 1s 558672350e-09 0s 0s 558674030e-09 1s 1s 558675270e-09 1s 1s 558682590e-09 0s 0s 558684270e-09 1s 1s 558685550e-09 1s 1s 558692830e-09 0s 0s 558694510e-09 1s 1s 558695830e-09 1s 1s 558703070e-09 0s 0s 558704750e-09 1s 1s 558706110e-09 1s 1s 558713310e-09 0s 0s 558714990e-09 1s 1s 558716390e-09 1s 1s 558723550e-09 0s 0s 558725230e-09 1s 1s 558726670e-09 1s 1s 558733790e-09 0s 0s 558735470e-09 1s 1s 558736950e-09 1s 1s 558744030e-09 0s 0s 558745710e-09 1s 1s 558747230e-09 1s 1s 558754270e-09 0s 0s 558755950e-09 1s 1s 558757510e-09 1s 1s 558764510e-09 0s 0s 558766190e-09 1s 1s 558767790e-09 1s 1s 558774750e-09 0s 0s 558776430e-09 1s 1s 558778070e-09 1s 1s 558784990e-09 0s 0s 558786670e-09 1s 1s 558788350e-09 1s 1s 558795230e-09 0s 0s 558796910e-09 1s 1s 558798630e-09 1s 1s 558805470e-09 0s 0s 558807150e-09 1s 1s 558808910e-09 1s 1s 558815710e-09 0s 0s 558817390e-09 1s 1s 558819190e-09 1s 1s 558825950e-09 0s 0s 558827630e-09 1s 1s 558829470e-09 1s 1s 558836190e-09 0s 0s 558837870e-09 1s 1s 558839750e-09 1s 1s 558846430e-09 0s 0s 558848110e-09 1s 1s 558850030e-09 1s 1s 558856670e-09 0s 0s 558858350e-09 1s 1s 558860310e-09 1s 1s 558866910e-09 0s 0s 558868590e-09 1s 1s 558870590e-09 1s 1s 558877150e-09 0s 0s 558878830e-09 1s 1s 558880870e-09 1s 1s 558887390e-09 0s 0s 558889070e-09 1s 1s 558891150e-09 1s 1s 558897630e-09 0s 0s 558899310e-09 1s 1s 558901430e-09 1s 1s 558907870e-09 0s 0s 558909550e-09 1s 1s 558911710e-09 1s 1s 558918110e-09 0s 0s 558919790e-09 1s 1s 558921990e-09 1s 1s 558928350e-09 0s 0s 558930030e-09 1s 1s 558932270e-09 1s 1s 558938590e-09 0s 0s 558940270e-09 1s 1s 558942550e-09 1s 1s 558948830e-09 0s 0s 558950510e-09 1s 1s 558952830e-09 1s 1s 558959070e-09 0s 0s 558960750e-09 1s 1s 558963110e-09 1s 1s 558969310e-09 0s 0s 558970990e-09 1s 1s 558973390e-09 1s 1s 558979550e-09 0s 0s 558981230e-09 1s 1s 558983670e-09 1s 1s 558989790e-09 0s 0s 558991470e-09 1s 1s 558993950e-09 1s 1s 559000030e-09 0s 0s 559001710e-09 1s 1s 559004230e-09 1s 1s 559010270e-09 0s 0s 559011950e-09 1s 1s 559014510e-09 1s 1s 559020510e-09 0s 0s 559022190e-09 1s 1s 559024790e-09 1s 1s 559030750e-09 0s 0s 559032430e-09 1s 1s 559035070e-09 1s 1s 559040990e-09 0s 0s 559042670e-09 1s 1s 559045350e-09 1s 1s 559051230e-09 0s 0s 559052910e-09 1s 1s 559055630e-09 1s 1s 559061470e-09 0s 0s 559063150e-09 1s 1s 559065910e-09 1s 1s 559071710e-09 0s 0s 559073390e-09 1s 1s 559076190e-09 1s 1s 559081950e-09 0s 0s 559083630e-09 1s 1s 559086470e-09 1s 1s 559092190e-09 0s 0s 559093870e-09 1s 1s 559096750e-09 1s 1s 559102430e-09 0s 0s 559104110e-09 1s 1s 559107030e-09 1s 1s 559112670e-09 0s 0s 559114350e-09 1s 1s 559117310e-09 1s 1s 559122910e-09 0s 0s 559124590e-09 1s 1s 559127590e-09 1s 1s 559133150e-09 0s 0s 559134830e-09 1s 1s 559137870e-09 1s 1s 559143390e-09 0s 0s 559145070e-09 1s 1s 559148150e-09 1s 1s 559153630e-09 0s 0s 559155310e-09 1s 1s 559158430e-09 1s 1s 559163870e-09 0s 0s 559165550e-09 1s 1s 559168710e-09 1s 1s 559174110e-09 0s 0s 559175790e-09 1s 1s 559178990e-09 1s 1s 559184350e-09 0s 0s 559186030e-09 1s 1s 559189270e-09 1s 1s 559194590e-09 0s 0s 559196270e-09 1s 1s 559199550e-09 1s 1s 559204830e-09 0s 0s 559206510e-09 1s 1s 559209830e-09 1s 1s 559215070e-09 0s 0s 559216750e-09 1s 1s 559220110e-09 1s 1s 559225310e-09 0s 0s 559226990e-09 1s 1s 559230390e-09 1s 1s 559235550e-09 0s 0s 559237230e-09 1s 1s 559240670e-09 1s 1s 559245790e-09 0s 0s 559247470e-09 1s 1s 559250950e-09 1s 1s 559256030e-09 0s 0s 559257710e-09 1s 1s 559261230e-09 1s 1s 559266270e-09 0s 0s 559267950e-09 1s 1s 559271510e-09 1s 1s 559276510e-09 0s 0s 559278190e-09 1s 1s 559281790e-09 1s 1s 559286750e-09 0s 0s 559288430e-09 1s 1s 559292070e-09 1s 1s 559296990e-09 0s 0s 559298670e-09 1s 1s 559302350e-09 1s 1s 559307230e-09 0s 0s 559308910e-09 1s 1s 559312630e-09 1s 1s 559317470e-09 0s 0s 559319150e-09 1s 1s 559322910e-09 1s 1s 559327710e-09 0s 0s 559329390e-09 1s 1s 559333190e-09 1s 1s 559337950e-09 0s 0s 559339630e-09 1s 1s 559343470e-09 1s 1s 559348190e-09 0s 0s 559349870e-09 1s 1s 559353750e-09 1s 1s 559358430e-09 0s 0s 559360110e-09 1s 1s 559364030e-09 1s 1s 559368670e-09 0s 0s 559370350e-09 1s 1s 559374310e-09 1s 1s 559378910e-09 0s 0s 559380590e-09 1s 1s 559384590e-09 1s 1s 559389150e-09 0s 0s 559390830e-09 1s 1s 559394870e-09 1s 1s 559399390e-09 0s 0s 559401070e-09 1s 1s 559405150e-09 1s 1s 559409630e-09 0s 0s 559411310e-09 1s 1s 559415430e-09 1s 1s 559419870e-09 0s 0s 559421550e-09 1s 1s 559425710e-09 1s 1s 559430110e-09 0s 0s 559431790e-09 1s 1s 559435990e-09 1s 1s 559440350e-09 0s 0s 559442030e-09 1s 1s 559446270e-09 1s 1s 559450590e-09 0s 0s 559452270e-09 1s 1s 559456550e-09 1s 1s 559460830e-09 0s 0s 559462510e-09 1s 1s 559466830e-09 1s 1s 559471070e-09 0s 0s 559472750e-09 1s 1s 559477110e-09 1s 1s 559481310e-09 0s 0s 559482990e-09 1s 1s 559487390e-09 1s 1s 559491550e-09 0s 0s 559493230e-09 1s 1s 559497670e-09 1s 1s 559501790e-09 0s 0s 559503470e-09 1s 1s 559507950e-09 1s 1s 559512030e-09 0s 0s 559513710e-09 1s 1s 559518230e-09 1s 1s 559522270e-09 0s 0s 559523950e-09 1s 1s 559528510e-09 1s 1s 559532510e-09 0s 0s 559534190e-09 1s 1s 559538790e-09 1s 1s 559542750e-09 0s 0s 559544430e-09 1s 1s 559549070e-09 1s 1s 559552990e-09 0s 0s 559554670e-09 1s 1s 559559350e-09 1s 1s 559563230e-09 0s 0s 559564910e-09 1s 1s 559569630e-09 1s 1s 559573470e-09 0s 0s 559575150e-09 1s 1s 559579910e-09 1s 1s 559583710e-09 0s 0s 559585390e-09 1s 1s 559590190e-09 1s 1s 559593950e-09 0s 0s 559595630e-09 1s 1s 559600470e-09 1s 1s 559604190e-09 0s 0s 559605870e-09 1s 1s 559610750e-09 1s 1s 559614430e-09 0s 0s 559616110e-09 1s 1s 559621030e-09 1s 1s 559624670e-09 0s 0s 559626350e-09 1s 1s 559631310e-09 1s 1s 559634910e-09 0s 0s 559636590e-09 1s 1s 559641590e-09 1s 1s 559645150e-09 0s 0s 559646830e-09 1s 1s 559651870e-09 1s 1s 559655390e-09 0s 0s 559657070e-09 1s 1s 559662150e-09 1s 1s 559665630e-09 0s 0s 559667310e-09 1s 1s 559672430e-09 1s 1s 559675870e-09 0s 0s 559677550e-09 1s 1s 559682710e-09 1s 1s 559686110e-09 0s 0s 559687790e-09 1s 1s 559692990e-09 1s 1s 559696350e-09 0s 0s 559698030e-09 1s 1s 559703270e-09 1s 1s 559706590e-09 0s 0s 559708270e-09 1s 1s 559713550e-09 1s 1s 559716830e-09 0s 0s 559718510e-09 1s 1s 559723830e-09 1s 1s 559727070e-09 0s 0s 559728750e-09 1s 1s 559734110e-09 1s 1s 559737310e-09 0s 0s 559738990e-09 1s 1s 559744390e-09 1s 1s 559747550e-09 0s 0s 559749230e-09 1s 1s 559754670e-09 1s 1s 559757790e-09 0s 0s 559759470e-09 1s 1s 559764950e-09 1s 1s 559768030e-09 0s 0s 559769710e-09 1s 1s 559775230e-09 1s 1s 559778270e-09 0s 0s 559779950e-09 1s 1s 559785510e-09 1s 1s 559788510e-09 0s 0s 559790190e-09 1s 1s 559795790e-09 1s 1s 559798750e-09 0s 0s 559800430e-09 1s 1s 559806070e-09 1s 1s 559808990e-09 0s 0s 559810670e-09 1s 1s 559816350e-09 1s 1s 559819230e-09 0s 0s 559820910e-09 1s 1s 559826630e-09 1s 1s 559829470e-09 0s 0s 559831150e-09 1s 1s 559836910e-09 1s 1s 559839710e-09 0s 0s 559841390e-09 1s 1s 559847190e-09 1s 1s 559849950e-09 0s 0s 559851630e-09 1s 1s 559857470e-09 1s 1s 559860190e-09 0s 0s 559861870e-09 1s 1s 559867750e-09 1s 1s 559870430e-09 0s 0s 559872110e-09 1s 1s 559878030e-09 1s 1s 559880670e-09 0s 0s 559882350e-09 1s 1s 559888310e-09 1s 1s 559890910e-09 0s 0s 559892590e-09 1s 1s 559898590e-09 1s 1s 559901150e-09 0s 0s 559902830e-09 1s 1s 559908870e-09 1s 1s 559911390e-09 0s 0s 559913070e-09 1s 1s 559919150e-09 1s 1s 559921630e-09 0s 0s 559923310e-09 1s 1s 559929430e-09 1s 1s 559931870e-09 0s 0s 559933550e-09 1s 1s 559939710e-09 1s 1s 559942110e-09 0s 0s 559943790e-09 1s 1s 559949990e-09 1s 1s 559952350e-09 0s 0s 559954030e-09 1s 1s 559960270e-09 1s 1s 559962590e-09 0s 0s 559964270e-09 1s 1s 559970550e-09 1s 1s 559972830e-09 0s 0s 559974510e-09 1s 1s 559980830e-09 1s 1s 559983070e-09 0s 0s 559984750e-09 1s 1s 559991110e-09 1s 1s 559993310e-09 0s 0s 559994990e-09 1s 1s 560001390e-09 1s 1s 560003550e-09 0s 0s 560005230e-09 1s 1s 560011670e-09 1s 1s 560013790e-09 0s 0s 560015470e-09 1s 1s 560021950e-09 1s 1s 560024030e-09 0s 0s 560025710e-09 1s 1s 560032230e-09 1s 1s 560034270e-09 0s 0s 560035950e-09 1s 1s 560042510e-09 1s 1s 560044510e-09 0s 0s 560046190e-09 1s 1s 560052790e-09 1s 1s 560054750e-09 0s 0s 560056430e-09 1s 1s 560063070e-09 1s 1s 560064990e-09 0s 0s 560066670e-09 1s 1s 560073350e-09 1s 1s 560075230e-09 0s 0s 560076910e-09 1s 1s 560083630e-09 1s 1s 560085470e-09 0s 0s 560087150e-09 1s 1s 560093910e-09 1s 1s 560095710e-09 0s 0s 560097390e-09 1s 1s 560104190e-09 1s 1s 560105950e-09 0s 0s 560107630e-09 1s 1s 560114470e-09 1s 1s 560116190e-09 0s 0s 560117870e-09 1s 1s 560124750e-09 1s 1s 560126430e-09 0s 0s 560128110e-09 1s 1s 560135030e-09 1s 1s 560136670e-09 0s 0s 560138350e-09 1s 1s 560145310e-09 1s 1s 560146910e-09 0s 0s 560148590e-09 1s 1s 560155590e-09 1s 1s 560157150e-09 0s 0s 560158830e-09 1s 1s 560165870e-09 1s 1s 560167390e-09 0s 0s 560169070e-09 1s 1s 560176150e-09 1s 1s 560177630e-09 0s 0s 560179310e-09 1s 1s 560186430e-09 1s 1s 560187870e-09 0s 0s 560189550e-09 1s 1s 560196710e-09 1s 1s 560198110e-09 0s 0s 560199790e-09 1s 1s 560206990e-09 1s 1s 560208350e-09 0s 0s 560210030e-09 1s 1s 560217270e-09 1s 1s 560218590e-09 0s 0s 560220270e-09 1s 1s 560227550e-09 1s 1s 560228830e-09 0s 0s 560230510e-09 1s 1s 560237830e-09 1s 1s 560239070e-09 0s 0s 560240750e-09 1s 1s 560248110e-09 1s 1s 560249310e-09 0s 0s 560250990e-09 1s 1s 560258390e-09 1s 1s 560259550e-09 0s 0s 560261230e-09 1s 1s 560268670e-09 1s 1s 560269790e-09 0s 0s 560271470e-09 1s 1s 560278950e-09 1s 1s 560280030e-09 0s 0s 560281710e-09 1s 1s 560289230e-09 1s 1s 560290270e-09 0s 0s 560291950e-09 1s 1s 560299510e-09 1s 1s 560300510e-09 0s 0s 560302190e-09 1s 1s 560309790e-09 1s 1s 560310750e-09 0s 0s 560312430e-09 1s 1s 560320070e-09 1s 1s 560320990e-09 0s 0s 560322670e-09 1s 1s 560330350e-09 1s 1s 560331230e-09 0s 0s 560332910e-09 1s 1s 560340630e-09 1s 1s 560341470e-09 0s 0s 560343150e-09 1s 1s 560350910e-09 1s 1s 560351710e-09 0s 0s 560353390e-09 1s 1s 560361190e-09 1s 1s 560361950e-09 0s 0s 560363630e-09 1s 1s 560371470e-09 1s 1s 560372190e-09 0s 0s 560373870e-09 1s 1s 560381750e-09 1s 1s 560382430e-09 0s 0s 560384110e-09 1s 1s 560392030e-09 1s 1s 560392670e-09 0s 0s 560394350e-09 1s 1s 560402310e-09 1s 1s 560402910e-09 0s 0s 560404590e-09 1s 1s 560412590e-09 1s 1s 560413150e-09 0s 0s 560414830e-09 1s 1s 560422870e-09 1s 1s 560423390e-09 0s 0s 560425070e-09 1s 1s 560433150e-09 1s 1s 560433630e-09 0s 0s 560435310e-09 1s 1s 560443430e-09 1s 1s 560443870e-09 0s 0s 560445550e-09 1s 1s 560453710e-09 1s 1s 560454110e-09 0s 0s 560455790e-09 1s 1s 560463990e-09 1s 1s 560464350e-09 0s 0s 560466030e-09 1s 1s 560474270e-09 1s 1s 560474590e-09 0s 0s 560476270e-09 1s 1s 560484550e-09 1s 1s 560484830e-09 0s 0s 560486510e-09 1s 1s 560494830e-09 1s 1s 560495070e-09 0s 0s 560496750e-09 1s 1s 560505110e-09 1s 1s 560505310e-09 0s 0s 560506990e-09 1s 1s 560515390e-09 1s 1s 560515550e-09 0s 0s 560517230e-09 1s 1s 560525670e-09 1s 1s 560525790e-09 0s 0s 560527470e-09 1s 1s 560535950e-09 1s 1s 560536030e-09 0s 0s 560537710e-09 1s 1s 560546230e-09 1s 1s 560546270e-09 0s 0s 560547950e-09 1s 1s 560556510e-09 0s 0s 560558190e-09 1s 1s 560566750e-09 0s 0s 560566790e-09 0s 0s 560568430e-09 1s 1s 560576990e-09 0s 0s 560577070e-09 0s 0s 560578670e-09 1s 1s 560587230e-09 0s 0s 560587350e-09 0s 0s 560588910e-09 1s 1s 560597470e-09 0s 0s 560597630e-09 0s 0s 560599150e-09 1s 1s 560607710e-09 0s 0s 560607910e-09 0s 0s 560609390e-09 1s 1s 560617950e-09 0s 0s 560618190e-09 0s 0s 560619630e-09 1s 1s 560628190e-09 0s 0s 560628470e-09 0s 0s 560629870e-09 1s 1s 560638430e-09 0s 0s 560638750e-09 0s 0s 560640110e-09 1s 1s 560648670e-09 0s 0s 560649030e-09 0s 0s 560650350e-09 1s 1s 560658910e-09 0s 0s 560659310e-09 0s 0s 560660590e-09 1s 1s 560669150e-09 0s 0s 560669590e-09 0s 0s 560670830e-09 1s 1s 560679390e-09 0s 0s 560679870e-09 0s 0s 560681070e-09 1s 1s 560689630e-09 0s 0s 560690150e-09 0s 0s 560691310e-09 1s 1s 560699870e-09 0s 0s 560700430e-09 0s 0s 560701550e-09 1s 1s 560710110e-09 0s 0s 560710710e-09 0s 0s 560711790e-09 1s 1s 560720350e-09 0s 0s 560720990e-09 0s 0s 560722030e-09 1s 1s 560730590e-09 0s 0s 560731270e-09 0s 0s 560732270e-09 1s 1s 560740830e-09 0s 0s 560741550e-09 0s 0s 560742510e-09 1s 1s 560751070e-09 0s 0s 560751830e-09 0s 0s 560752750e-09 1s 1s 560761310e-09 0s 0s 560762110e-09 0s 0s 560762990e-09 1s 1s 560771550e-09 0s 0s 560772390e-09 0s 0s 560773230e-09 1s 1s 560781790e-09 0s 0s 560782670e-09 0s 0s 560783470e-09 1s 1s 560792030e-09 0s 0s 560792950e-09 0s 0s 560793710e-09 1s 1s 560802270e-09 0s 0s 560803230e-09 0s 0s 560803950e-09 1s 1s 560812510e-09 0s 0s 560813510e-09 0s 0s 560814190e-09 1s 1s 560822750e-09 0s 0s 560823790e-09 0s 0s 560824430e-09 1s 1s 560832990e-09 0s 0s 560834070e-09 0s 0s 560834670e-09 1s 1s 560843230e-09 0s 0s 560844350e-09 0s 0s 560844910e-09 1s 1s 560853470e-09 0s 0s 560854630e-09 0s 0s 560855150e-09 1s 1s 560863710e-09 0s 0s 560864910e-09 0s 0s 560865390e-09 1s 1s 560873950e-09 0s 0s 560875190e-09 0s 0s 560875630e-09 1s 1s 560884190e-09 0s 0s 560885470e-09 0s 0s 560885870e-09 1s 1s 560894430e-09 0s 0s 560895750e-09 0s 0s 560896110e-09 1s 1s 560904670e-09 0s 0s 560906030e-09 0s 0s 560906350e-09 1s 1s 560914910e-09 0s 0s 560916310e-09 0s 0s 560916590e-09 1s 1s 560925150e-09 0s 0s 560926590e-09 0s 0s 560926830e-09 1s 1s 560935390e-09 0s 0s 560936870e-09 0s 0s 560937070e-09 1s 1s 560945630e-09 0s 0s 560947150e-09 0s 0s 560947310e-09 1s 1s 560955870e-09 0s 0s 560957430e-09 0s 0s 560957550e-09 1s 1s 560966110e-09 0s 0s 560967710e-09 0s 0s 560967790e-09 1s 1s 560976350e-09 0s 0s 560977990e-09 0s 0s 560978030e-09 1s 1s 560986590e-09 0s 0s 560988270e-09 1s 1s 560988310e-09 1s 1s 560996870e-09 0s 0s 560998510e-09 1s 1s 560998590e-09 1s 1s 561007110e-09 0s 0s 561008750e-09 1s 1s 561008870e-09 1s 1s 561017350e-09 0s 0s 561018990e-09 1s 1s 561019150e-09 1s 1s 561027590e-09 0s 0s 561029230e-09 1s 1s 561029430e-09 1s 1s 561037830e-09 0s 0s 561039470e-09 1s 1s 561039710e-09 1s 1s 561048070e-09 0s 0s 561049710e-09 1s 1s 561049990e-09 1s 1s 561058310e-09 0s 0s 561059950e-09 1s 1s 561060270e-09 1s 1s 561068550e-09 0s 0s 561070190e-09 1s 1s 561070550e-09 1s 1s 561078790e-09 0s 0s 561080430e-09 1s 1s 561080830e-09 1s 1s 561089030e-09 0s 0s 561090670e-09 1s 1s 561091110e-09 1s 1s 561099270e-09 0s 0s 561100910e-09 1s 1s 561101390e-09 1s 1s 561109510e-09 0s 0s 561111150e-09 1s 1s 561111670e-09 1s 1s 561119750e-09 0s 0s 561121390e-09 1s 1s 561121950e-09 1s 1s 561129990e-09 0s 0s 561131630e-09 1s 1s 561132230e-09 1s 1s 561140230e-09 0s 0s 561141870e-09 1s 1s 561142510e-09 1s 1s 561150470e-09 0s 0s 561152110e-09 1s 1s 561152790e-09 1s 1s 561160710e-09 0s 0s 561162350e-09 1s 1s 561163070e-09 1s 1s 561170950e-09 0s 0s 561172590e-09 1s 1s 561173350e-09 1s 1s 561181190e-09 0s 0s 561182830e-09 1s 1s 561183630e-09 1s 1s 561191430e-09 0s 0s 561193070e-09 1s 1s 561193910e-09 1s 1s 561201670e-09 0s 0s 561203310e-09 1s 1s 561204190e-09 1s 1s 561211910e-09 0s 0s 561213550e-09 1s 1s 561214470e-09 1s 1s 561222150e-09 0s 0s 561223790e-09 1s 1s 561224750e-09 1s 1s 561232390e-09 0s 0s 561234030e-09 1s 1s 561235030e-09 1s 1s 561242630e-09 0s 0s 561244270e-09 1s 1s 561245310e-09 1s 1s 561252870e-09 0s 0s 561254510e-09 1s 1s 561255590e-09 1s 1s 561263110e-09 0s 0s 561264750e-09 1s 1s 561265870e-09 1s 1s 561273350e-09 0s 0s 561274990e-09 1s 1s 561276150e-09 1s 1s 561283590e-09 0s 0s 561285230e-09 1s 1s 561286430e-09 1s 1s 561293830e-09 0s 0s 561295470e-09 1s 1s 561296710e-09 1s 1s 561304070e-09 0s 0s 561305710e-09 1s 1s 561306990e-09 1s 1s 561314310e-09 0s 0s 561315950e-09 1s 1s 561317270e-09 1s 1s 561324550e-09 0s 0s 561326190e-09 1s 1s 561327550e-09 1s 1s 561334790e-09 0s 0s 561336430e-09 1s 1s 561337830e-09 1s 1s 561345030e-09 0s 0s 561346670e-09 1s 1s 561348110e-09 1s 1s 561355270e-09 0s 0s 561356910e-09 1s 1s 561358390e-09 1s 1s 561365510e-09 0s 0s 561367150e-09 1s 1s 561368670e-09 1s 1s 561375750e-09 0s 0s 561377390e-09 1s 1s 561378950e-09 1s 1s 561385990e-09 0s 0s 561387630e-09 1s 1s 561389230e-09 1s 1s 561396230e-09 0s 0s 561397870e-09 1s 1s 561399510e-09 1s 1s 561406470e-09 0s 0s 561408110e-09 1s 1s 561409790e-09 1s 1s 561416710e-09 0s 0s 561418350e-09 1s 1s 561420070e-09 1s 1s 561426950e-09 0s 0s 561428590e-09 1s 1s 561430350e-09 1s 1s 561437190e-09 0s 0s 561438830e-09 1s 1s 561440630e-09 1s 1s 561447430e-09 0s 0s 561449070e-09 1s 1s 561450910e-09 1s 1s 561457670e-09 0s 0s 561459310e-09 1s 1s 561461190e-09 1s 1s 561467910e-09 0s 0s 561469550e-09 1s 1s 561471470e-09 1s 1s 561478150e-09 0s 0s 561479790e-09 1s 1s 561481750e-09 1s 1s 561488390e-09 0s 0s 561490030e-09 1s 1s 561492030e-09 1s 1s 561498630e-09 0s 0s 561500270e-09 1s 1s 561502310e-09 1s 1s 561508870e-09 0s 0s 561510510e-09 1s 1s 561512590e-09 1s 1s 561519110e-09 0s 0s 561520750e-09 1s 1s 561522870e-09 1s 1s 561529350e-09 0s 0s 561530990e-09 1s 1s 561533150e-09 1s 1s 561539590e-09 0s 0s 561541230e-09 1s 1s 561543430e-09 1s 1s 561549830e-09 0s 0s 561551470e-09 1s 1s 561553710e-09 1s 1s 561560070e-09 0s 0s 561561710e-09 1s 1s 561563990e-09 1s 1s 561570310e-09 0s 0s 561571950e-09 1s 1s 561574270e-09 1s 1s 561580550e-09 0s 0s 561582190e-09 1s 1s 561584550e-09 1s 1s 561590790e-09 0s 0s 561592430e-09 1s 1s 561594830e-09 1s 1s 561601030e-09 0s 0s 561602670e-09 1s 1s 561605110e-09 1s 1s 561611270e-09 0s 0s 561612910e-09 1s 1s 561615390e-09 1s 1s 561621510e-09 0s 0s 561623150e-09 1s 1s 561625670e-09 1s 1s 561631750e-09 0s 0s 561633390e-09 1s 1s 561635950e-09 1s 1s 561641990e-09 0s 0s 561643630e-09 1s 1s 561646230e-09 1s 1s 561652230e-09 0s 0s 561653870e-09 1s 1s 561656510e-09 1s 1s 561662470e-09 0s 0s 561664110e-09 1s 1s 561666790e-09 1s 1s 561672710e-09 0s 0s 561674350e-09 1s 1s 561677070e-09 1s 1s 561682950e-09 0s 0s 561684590e-09 1s 1s 561687350e-09 1s 1s 561693190e-09 0s 0s 561694830e-09 1s 1s 561697630e-09 1s 1s 561703430e-09 0s 0s 561705070e-09 1s 1s 561707910e-09 1s 1s 561713670e-09 0s 0s 561715310e-09 1s 1s 561718190e-09 1s 1s 561723910e-09 0s 0s 561725550e-09 1s 1s 561728470e-09 1s 1s 561734150e-09 0s 0s 561735790e-09 1s 1s 561738750e-09 1s 1s 561744390e-09 0s 0s 561746030e-09 1s 1s 561749030e-09 1s 1s 561754630e-09 0s 0s 561756270e-09 1s 1s 561759310e-09 1s 1s 561764870e-09 0s 0s 561766510e-09 1s 1s 561769590e-09 1s 1s 561775110e-09 0s 0s 561776750e-09 1s 1s 561779870e-09 1s 1s 561785350e-09 0s 0s 561786990e-09 1s 1s 561790150e-09 1s 1s 561795590e-09 0s 0s 561797230e-09 1s 1s 561800430e-09 1s 1s 561805830e-09 0s 0s 561807470e-09 1s 1s 561810710e-09 1s 1s 561816070e-09 0s 0s 561817710e-09 1s 1s 561820990e-09 1s 1s 561826310e-09 0s 0s 561827950e-09 1s 1s 561831270e-09 1s 1s 561836550e-09 0s 0s 561838190e-09 1s 1s 561841550e-09 1s 1s 561846790e-09 0s 0s 561848430e-09 1s 1s 561851830e-09 1s 1s 561857030e-09 0s 0s 561858670e-09 1s 1s 561862110e-09 1s 1s 561867270e-09 0s 0s 561868910e-09 1s 1s 561872390e-09 1s 1s 561877510e-09 0s 0s 561879150e-09 1s 1s 561882670e-09 1s 1s 561887750e-09 0s 0s 561889390e-09 1s 1s 561892950e-09 1s 1s 561897990e-09 0s 0s 561899630e-09 1s 1s 561903230e-09 1s 1s 561908230e-09 0s 0s 561909870e-09 1s 1s 561913510e-09 1s 1s 561918470e-09 0s 0s 561920110e-09 1s 1s 561923790e-09 1s 1s 561928710e-09 0s 0s 561930350e-09 1s 1s 561934070e-09 1s 1s 561938950e-09 0s 0s 561940590e-09 1s 1s 561944350e-09 1s 1s 561949190e-09 0s 0s 561950830e-09 1s 1s 561954630e-09 1s 1s 561959430e-09 0s 0s 561961070e-09 1s 1s 561964910e-09 1s 1s 561969670e-09 0s 0s 561971310e-09 1s 1s 561975190e-09 1s 1s 561979910e-09 0s 0s 561981550e-09 1s 1s 561985470e-09 1s 1s 561990150e-09 0s 0s 561991790e-09 1s 1s 561995750e-09 1s 1s 562000390e-09 0s 0s 562002030e-09 1s 1s 562006030e-09 1s 1s 562010630e-09 0s 0s 562012270e-09 1s 1s 562016310e-09 1s 1s 562020870e-09 0s 0s 562022510e-09 1s 1s 562026590e-09 1s 1s 562031110e-09 0s 0s 562032750e-09 1s 1s 562036870e-09 1s 1s 562041350e-09 0s 0s 562042990e-09 1s 1s 562047150e-09 1s 1s 562051590e-09 0s 0s 562053230e-09 1s 1s 562057430e-09 1s 1s 562061830e-09 0s 0s 562063470e-09 1s 1s 562067710e-09 1s 1s 562072070e-09 0s 0s 562073710e-09 1s 1s 562077990e-09 1s 1s 562082310e-09 0s 0s 562083950e-09 1s 1s 562088270e-09 1s 1s 562092550e-09 0s 0s 562094190e-09 1s 1s 562098550e-09 1s 1s 562102790e-09 0s 0s 562104430e-09 1s 1s 562108830e-09 1s 1s 562113030e-09 0s 0s 562114670e-09 1s 1s 562119110e-09 1s 1s 562123270e-09 0s 0s 562124910e-09 1s 1s 562129390e-09 1s 1s 562133510e-09 0s 0s 562135150e-09 1s 1s 562139670e-09 1s 1s 562143750e-09 0s 0s 562145390e-09 1s 1s 562149950e-09 1s 1s 562153990e-09 0s 0s 562155630e-09 1s 1s 562160230e-09 1s 1s 562164230e-09 0s 0s 562165870e-09 1s 1s 562170510e-09 1s 1s 562174470e-09 0s 0s 562176110e-09 1s 1s 562180790e-09 1s 1s 562184710e-09 0s 0s 562186350e-09 1s 1s 562191070e-09 1s 1s 562194950e-09 0s 0s 562196590e-09 1s 1s 562201350e-09 1s 1s 562205190e-09 0s 0s 562206830e-09 1s 1s 562211630e-09 1s 1s 562215430e-09 0s 0s 562217070e-09 1s 1s 562221910e-09 1s 1s 562225670e-09 0s 0s 562227310e-09 1s 1s 562232190e-09 1s 1s 562235910e-09 0s 0s 562237550e-09 1s 1s 562242470e-09 1s 1s 562246150e-09 0s 0s 562247790e-09 1s 1s 562252750e-09 1s 1s 562256390e-09 0s 0s 562258030e-09 1s 1s 562263030e-09 1s 1s 562266630e-09 0s 0s 562268270e-09 1s 1s 562273310e-09 1s 1s 562276870e-09 0s 0s 562278510e-09 1s 1s 562283590e-09 1s 1s 562287110e-09 0s 0s 562288750e-09 1s 1s 562293870e-09 1s 1s 562297350e-09 0s 0s 562298990e-09 1s 1s 562304150e-09 1s 1s 562307590e-09 0s 0s 562309230e-09 1s 1s 562314430e-09 1s 1s 562317830e-09 0s 0s 562319470e-09 1s 1s 562324710e-09 1s 1s 562328070e-09 0s 0s 562329710e-09 1s 1s 562334990e-09 1s 1s 562338310e-09 0s 0s 562339950e-09 1s 1s 562345270e-09 1s 1s 562348550e-09 0s 0s 562350190e-09 1s 1s 562355550e-09 1s 1s 562358790e-09 0s 0s 562360430e-09 1s 1s 562365830e-09 1s 1s 562369030e-09 0s 0s 562370670e-09 1s 1s 562376110e-09 1s 1s 562379270e-09 0s 0s 562380910e-09 1s 1s 562386390e-09 1s 1s 562389510e-09 0s 0s 562391150e-09 1s 1s 562396670e-09 1s 1s 562399750e-09 0s 0s 562401390e-09 1s 1s 562406950e-09 1s 1s 562409990e-09 0s 0s 562411630e-09 1s 1s 562417230e-09 1s 1s 562420230e-09 0s 0s 562421870e-09 1s 1s 562427510e-09 1s 1s 562430470e-09 0s 0s 562432110e-09 1s 1s 562437790e-09 1s 1s 562440710e-09 0s 0s 562442350e-09 1s 1s 562448070e-09 1s 1s 562450950e-09 0s 0s 562452590e-09 1s 1s 562458350e-09 1s 1s 562461190e-09 0s 0s 562462830e-09 1s 1s 562468630e-09 1s 1s 562471430e-09 0s 0s 562473070e-09 1s 1s 562478910e-09 1s 1s 562481670e-09 0s 0s 562483310e-09 1s 1s 562489190e-09 1s 1s 562491910e-09 0s 0s 562493550e-09 1s 1s 562499470e-09 1s 1s 562502150e-09 0s 0s 562503790e-09 1s 1s 562509750e-09 1s 1s 562512390e-09 0s 0s 562514030e-09 1s 1s 562520030e-09 1s 1s 562522630e-09 0s 0s 562524270e-09 1s 1s 562530310e-09 1s 1s 562532870e-09 0s 0s 562534510e-09 1s 1s 562540590e-09 1s 1s 562543110e-09 0s 0s 562544750e-09 1s 1s 562550870e-09 1s 1s 562553350e-09 0s 0s 562554990e-09 1s 1s 562561150e-09 1s 1s 562563590e-09 0s 0s 562565230e-09 1s 1s 562571430e-09 1s 1s 562573830e-09 0s 0s 562575470e-09 1s 1s 562581710e-09 1s 1s 562584070e-09 0s 0s 562585710e-09 1s 1s 562591990e-09 1s 1s 562594310e-09 0s 0s 562595950e-09 1s 1s 562602270e-09 1s 1s 562604550e-09 0s 0s 562606190e-09 1s 1s 562612550e-09 1s 1s 562614790e-09 0s 0s 562616430e-09 1s 1s 562622830e-09 1s 1s 562625030e-09 0s 0s 562626670e-09 1s 1s 562633110e-09 1s 1s 562635270e-09 0s 0s 562636910e-09 1s 1s 562643390e-09 1s 1s 562645510e-09 0s 0s 562647150e-09 1s 1s 562653670e-09 1s 1s 562655750e-09 0s 0s 562657390e-09 1s 1s 562663950e-09 1s 1s 562665990e-09 0s 0s 562667630e-09 1s 1s 562674230e-09 1s 1s 562676230e-09 0s 0s 562677870e-09 1s 1s 562684510e-09 1s 1s 562686470e-09 0s 0s 562688110e-09 1s 1s 562694790e-09 1s 1s 562696710e-09 0s 0s 562698350e-09 1s 1s 562705070e-09 1s 1s 562706950e-09 0s 0s 562708590e-09 1s 1s 562715350e-09 1s 1s 562717190e-09 0s 0s 562718830e-09 1s 1s 562725630e-09 1s 1s 562727430e-09 0s 0s 562729070e-09 1s 1s 562735910e-09 1s 1s 562737670e-09 0s 0s 562739310e-09 1s 1s 562746190e-09 1s 1s 562747910e-09 0s 0s 562749550e-09 1s 1s 562756470e-09 1s 1s 562758150e-09 0s 0s 562759790e-09 1s 1s 562766750e-09 1s 1s 562768390e-09 0s 0s 562770030e-09 1s 1s 562777030e-09 1s 1s 562778630e-09 0s 0s 562780270e-09 1s 1s 562787310e-09 1s 1s 562788870e-09 0s 0s 562790510e-09 1s 1s 562797590e-09 1s 1s 562799110e-09 0s 0s 562800750e-09 1s 1s 562807870e-09 1s 1s 562809350e-09 0s 0s 562810990e-09 1s 1s 562818150e-09 1s 1s 562819590e-09 0s 0s 562821230e-09 1s 1s 562828430e-09 1s 1s 562829830e-09 0s 0s 562831470e-09 1s 1s 562838710e-09 1s 1s 562840070e-09 0s 0s 562841710e-09 1s 1s 562848990e-09 1s 1s 562850310e-09 0s 0s 562851950e-09 1s 1s 562859270e-09 1s 1s 562860550e-09 0s 0s 562862190e-09 1s 1s 562869550e-09 1s 1s 562870790e-09 0s 0s 562872430e-09 1s 1s 562879830e-09 1s 1s 562881030e-09 0s 0s 562882670e-09 1s 1s 562890110e-09 1s 1s 562891270e-09 0s 0s 562892910e-09 1s 1s 562900390e-09 1s 1s 562901510e-09 0s 0s 562903150e-09 1s 1s 562910670e-09 1s 1s 562911750e-09 0s 0s 562913390e-09 1s 1s 562920950e-09 1s 1s 562921990e-09 0s 0s 562923630e-09 1s 1s 562931230e-09 1s 1s 562932230e-09 0s 0s 562933870e-09 1s 1s 562941510e-09 1s 1s 562942470e-09 0s 0s 562944110e-09 1s 1s 562951790e-09 1s 1s 562952710e-09 0s 0s 562954350e-09 1s 1s 562962070e-09 1s 1s 562962950e-09 0s 0s 562964590e-09 1s 1s 562972350e-09 1s 1s 562973190e-09 0s 0s 562974830e-09 1s 1s 562982630e-09 1s 1s 562983430e-09 0s 0s 562985070e-09 1s 1s 562992910e-09 1s 1s 562993670e-09 0s 0s 562995310e-09 1s 1s 563003190e-09 1s 1s 563003910e-09 0s 0s 563005550e-09 1s 1s 563013470e-09 1s 1s 563014150e-09 0s 0s 563015790e-09 1s 1s 563023750e-09 1s 1s 563024390e-09 0s 0s 563026030e-09 1s 1s 563034030e-09 1s 1s 563034630e-09 0s 0s 563036270e-09 1s 1s 563044310e-09 1s 1s 563044870e-09 0s 0s 563046510e-09 1s 1s 563054590e-09 1s 1s 563055110e-09 0s 0s 563056750e-09 1s 1s 563064870e-09 1s 1s 563065350e-09 0s 0s 563066990e-09 1s 1s 563075150e-09 1s 1s 563075590e-09 0s 0s 563077230e-09 1s 1s 563085430e-09 1s 1s 563085830e-09 0s 0s 563087470e-09 1s 1s 563095710e-09 1s 1s 563096070e-09 0s 0s 563097710e-09 1s 1s 563105990e-09 1s 1s 563106310e-09 0s 0s 563107950e-09 1s 1s 563116270e-09 1s 1s 563116550e-09 0s 0s 563118190e-09 1s 1s 563126550e-09 1s 1s 563126790e-09 0s 0s 563128430e-09 1s 1s 563136830e-09 1s 1s 563137030e-09 0s 0s 563138670e-09 1s 1s 563147110e-09 1s 1s 563147270e-09 0s 0s 563148910e-09 1s 1s 563157390e-09 1s 1s 563157510e-09 0s 0s 563159150e-09 1s 1s 563167670e-09 1s 1s 563167750e-09 0s 0s 563169390e-09 1s 1s 563177950e-09 1s 1s 563177990e-09 0s 0s 563179630e-09 1s 1s 563188230e-09 0s 0s 563189870e-09 1s 1s 563198470e-09 0s 0s 563198510e-09 0s 0s 563200110e-09 1s 1s 563208710e-09 0s 0s 563208790e-09 0s 0s 563210350e-09 1s 1s 563218950e-09 0s 0s 563219070e-09 0s 0s 563220590e-09 1s 1s 563229190e-09 0s 0s 563229350e-09 0s 0s 563230830e-09 1s 1s 563239430e-09 0s 0s 563239630e-09 0s 0s 563241070e-09 1s 1s 563249670e-09 0s 0s 563249910e-09 0s 0s 563251310e-09 1s 1s 563259910e-09 0s 0s 563260190e-09 0s 0s 563261550e-09 1s 1s 563270150e-09 0s 0s 563270470e-09 0s 0s 563271790e-09 1s 1s 563280390e-09 0s 0s 563280750e-09 0s 0s 563282030e-09 1s 1s 563290630e-09 0s 0s 563291030e-09 0s 0s 563292270e-09 1s 1s 563300870e-09 0s 0s 563301310e-09 0s 0s 563302510e-09 1s 1s 563311110e-09 0s 0s 563311590e-09 0s 0s 563312750e-09 1s 1s 563321350e-09 0s 0s 563321870e-09 0s 0s 563322990e-09 1s 1s 563331590e-09 0s 0s 563332150e-09 0s 0s 563333230e-09 1s 1s 563341830e-09 0s 0s 563342430e-09 0s 0s 563343470e-09 1s 1s 563352070e-09 0s 0s 563352710e-09 0s 0s 563353710e-09 1s 1s 563362310e-09 0s 0s 563362990e-09 0s 0s 563363950e-09 1s 1s 563372550e-09 0s 0s 563373270e-09 0s 0s 563374190e-09 1s 1s 563382790e-09 0s 0s 563383550e-09 0s 0s 563384430e-09 1s 1s 563393030e-09 0s 0s 563393830e-09 0s 0s 563394670e-09 1s 1s 563403270e-09 0s 0s 563404110e-09 0s 0s 563404910e-09 1s 1s 563413510e-09 0s 0s 563414390e-09 0s 0s 563415150e-09 1s 1s 563423750e-09 0s 0s 563424670e-09 0s 0s 563425390e-09 1s 1s 563433990e-09 0s 0s 563434950e-09 0s 0s 563435630e-09 1s 1s 563444230e-09 0s 0s 563445230e-09 0s 0s 563445870e-09 1s 1s 563454470e-09 0s 0s 563455510e-09 0s 0s 563456110e-09 1s 1s 563464710e-09 0s 0s 563465790e-09 0s 0s 563466350e-09 1s 1s 563474950e-09 0s 0s 563476070e-09 0s 0s 563476590e-09 1s 1s 563485190e-09 0s 0s 563486350e-09 0s 0s 563486830e-09 1s 1s 563495430e-09 0s 0s 563496630e-09 0s 0s 563497070e-09 1s 1s 563505670e-09 0s 0s 563506910e-09 0s 0s 563507310e-09 1s 1s 563515910e-09 0s 0s 563517190e-09 0s 0s 563517550e-09 1s 1s 563526150e-09 0s 0s 563527470e-09 0s 0s 563527790e-09 1s 1s 563536390e-09 0s 0s 563537750e-09 0s 0s 563538030e-09 1s 1s 563546630e-09 0s 0s 563548030e-09 0s 0s 563548270e-09 1s 1s 563556870e-09 0s 0s 563558310e-09 0s 0s 563558510e-09 1s 1s 563567110e-09 0s 0s 563568590e-09 0s 0s 563568750e-09 1s 1s 563577350e-09 0s 0s 563578870e-09 0s 0s 563578990e-09 1s 1s 563587590e-09 0s 0s 563589150e-09 0s 0s 563589230e-09 1s 1s 563597830e-09 0s 0s 563599430e-09 0s 0s 563599470e-09 1s 1s 563608070e-09 0s 0s 563609710e-09 1s 1s 563609750e-09 1s 1s 563618350e-09 0s 0s 563619950e-09 1s 1s 563620030e-09 1s 1s 563628590e-09 0s 0s 563630190e-09 1s 1s 563630310e-09 1s 1s 563638830e-09 0s 0s 563640430e-09 1s 1s 563640590e-09 1s 1s 563649070e-09 0s 0s 563650670e-09 1s 1s 563650870e-09 1s 1s 563659310e-09 0s 0s 563660910e-09 1s 1s 563661150e-09 1s 1s 563669550e-09 0s 0s 563671150e-09 1s 1s 563671430e-09 1s 1s 563679790e-09 0s 0s 563681390e-09 1s 1s 563681710e-09 1s 1s 563690030e-09 0s 0s 563691630e-09 1s 1s 563691990e-09 1s 1s 563700270e-09 0s 0s 563701870e-09 1s 1s 563702270e-09 1s 1s 563710510e-09 0s 0s 563712110e-09 1s 1s 563712550e-09 1s 1s 563720750e-09 0s 0s 563722350e-09 1s 1s 563722830e-09 1s 1s 563730990e-09 0s 0s 563732590e-09 1s 1s 563733110e-09 1s 1s 563741230e-09 0s 0s 563742830e-09 1s 1s 563743390e-09 1s 1s 563751470e-09 0s 0s 563753070e-09 1s 1s 563753670e-09 1s 1s 563761710e-09 0s 0s 563763310e-09 1s 1s 563763950e-09 1s 1s 563771950e-09 0s 0s 563773550e-09 1s 1s 563774230e-09 1s 1s 563782190e-09 0s 0s 563783790e-09 1s 1s 563784510e-09 1s 1s 563792430e-09 0s 0s 563794030e-09 1s 1s 563794790e-09 1s 1s 563802670e-09 0s 0s 563804270e-09 1s 1s 563805070e-09 1s 1s 563812910e-09 0s 0s 563814510e-09 1s 1s 563815350e-09 1s 1s 563823150e-09 0s 0s 563824750e-09 1s 1s 563825630e-09 1s 1s 563833390e-09 0s 0s 563834990e-09 1s 1s 563835910e-09 1s 1s 563843630e-09 0s 0s 563845230e-09 1s 1s 563846190e-09 1s 1s 563853870e-09 0s 0s 563855470e-09 1s 1s 563856470e-09 1s 1s 563864110e-09 0s 0s 563865710e-09 1s 1s 563866750e-09 1s 1s 563874350e-09 0s 0s 563875950e-09 1s 1s 563877030e-09 1s 1s 563884590e-09 0s 0s 563886190e-09 1s 1s 563887310e-09 1s 1s 563894830e-09 0s 0s 563896430e-09 1s 1s 563897590e-09 1s 1s 563905070e-09 0s 0s 563906670e-09 1s 1s 563907870e-09 1s 1s 563915310e-09 0s 0s 563916910e-09 1s 1s 563918150e-09 1s 1s 563925550e-09 0s 0s 563927150e-09 1s 1s 563928430e-09 1s 1s 563935790e-09 0s 0s 563937390e-09 1s 1s 563938710e-09 1s 1s 563946030e-09 0s 0s 563947630e-09 1s 1s 563948990e-09 1s 1s 563956270e-09 0s 0s 563957870e-09 1s 1s 563959270e-09 1s 1s 563966510e-09 0s 0s 563968110e-09 1s 1s 563969550e-09 1s 1s 563976750e-09 0s 0s 563978350e-09 1s 1s 563979830e-09 1s 1s 563986990e-09 0s 0s 563988590e-09 1s 1s 563990110e-09 1s 1s 563997230e-09 0s 0s 563998830e-09 1s 1s 564000390e-09 1s 1s 564007470e-09 0s 0s 564009070e-09 1s 1s 564010670e-09 1s 1s 564017710e-09 0s 0s 564019310e-09 1s 1s 564020950e-09 1s 1s 564027950e-09 0s 0s 564029550e-09 1s 1s 564031230e-09 1s 1s 564038190e-09 0s 0s 564039790e-09 1s 1s 564041510e-09 1s 1s 564048430e-09 0s 0s 564050030e-09 1s 1s 564051790e-09 1s 1s 564058670e-09 0s 0s 564060270e-09 1s 1s 564062070e-09 1s 1s 564068910e-09 0s 0s 564070510e-09 1s 1s 564072350e-09 1s 1s 564079150e-09 0s 0s 564080750e-09 1s 1s 564082630e-09 1s 1s 564089390e-09 0s 0s 564090990e-09 1s 1s 564092910e-09 1s 1s 564099630e-09 0s 0s 564101230e-09 1s 1s 564103190e-09 1s 1s 564109870e-09 0s 0s 564111470e-09 1s 1s 564113470e-09 1s 1s 564120110e-09 0s 0s 564121710e-09 1s 1s 564123750e-09 1s 1s 564130350e-09 0s 0s 564131950e-09 1s 1s 564134030e-09 1s 1s 564140590e-09 0s 0s 564142190e-09 1s 1s 564144310e-09 1s 1s 564150830e-09 0s 0s 564152430e-09 1s 1s 564154590e-09 1s 1s 564161070e-09 0s 0s 564162670e-09 1s 1s 564164870e-09 1s 1s 564171310e-09 0s 0s 564172910e-09 1s 1s 564175150e-09 1s 1s 564181550e-09 0s 0s 564183150e-09 1s 1s 564185430e-09 1s 1s 564191790e-09 0s 0s 564193390e-09 1s 1s 564195710e-09 1s 1s 564202030e-09 0s 0s 564203630e-09 1s 1s 564205990e-09 1s 1s 564212270e-09 0s 0s 564213870e-09 1s 1s 564216270e-09 1s 1s 564222510e-09 0s 0s 564224110e-09 1s 1s 564226550e-09 1s 1s 564232750e-09 0s 0s 564234350e-09 1s 1s 564236830e-09 1s 1s 564242990e-09 0s 0s 564244590e-09 1s 1s 564247110e-09 1s 1s 564253230e-09 0s 0s 564254830e-09 1s 1s 564257390e-09 1s 1s 564263470e-09 0s 0s 564265070e-09 1s 1s 564267670e-09 1s 1s 564273710e-09 0s 0s 564275310e-09 1s 1s 564277950e-09 1s 1s 564283950e-09 0s 0s 564285550e-09 1s 1s 564288230e-09 1s 1s 564294190e-09 0s 0s 564295790e-09 1s 1s 564298510e-09 1s 1s 564304430e-09 0s 0s 564306030e-09 1s 1s 564308790e-09 1s 1s 564314670e-09 0s 0s 564316270e-09 1s 1s 564319070e-09 1s 1s 564324910e-09 0s 0s 564326510e-09 1s 1s 564329350e-09 1s 1s 564335150e-09 0s 0s 564336750e-09 1s 1s 564339630e-09 1s 1s 564345390e-09 0s 0s 564346990e-09 1s 1s 564349910e-09 1s 1s 564355630e-09 0s 0s 564357230e-09 1s 1s 564360190e-09 1s 1s 564365870e-09 0s 0s 564367470e-09 1s 1s 564370470e-09 1s 1s 564376110e-09 0s 0s 564377710e-09 1s 1s 564380750e-09 1s 1s 564386350e-09 0s 0s 564387950e-09 1s 1s 564391030e-09 1s 1s 564396590e-09 0s 0s 564398190e-09 1s 1s 564401310e-09 1s 1s 564406830e-09 0s 0s 564408430e-09 1s 1s 564411590e-09 1s 1s 564417070e-09 0s 0s 564418670e-09 1s 1s 564421870e-09 1s 1s 564427310e-09 0s 0s 564428910e-09 1s 1s 564432150e-09 1s 1s 564437550e-09 0s 0s 564439150e-09 1s 1s 564442430e-09 1s 1s 564447790e-09 0s 0s 564449390e-09 1s 1s 564452710e-09 1s 1s 564458030e-09 0s 0s 564459630e-09 1s 1s 564462990e-09 1s 1s 564468270e-09 0s 0s 564469870e-09 1s 1s 564473270e-09 1s 1s 564478510e-09 0s 0s 564480110e-09 1s 1s 564483550e-09 1s 1s 564488750e-09 0s 0s 564490350e-09 1s 1s 564493830e-09 1s 1s 564498990e-09 0s 0s 564500590e-09 1s 1s 564504110e-09 1s 1s 564509230e-09 0s 0s 564510830e-09 1s 1s 564514390e-09 1s 1s 564519470e-09 0s 0s 564521070e-09 1s 1s 564524670e-09 1s 1s 564529710e-09 0s 0s 564531310e-09 1s 1s 564534950e-09 1s 1s 564539950e-09 0s 0s 564541550e-09 1s 1s 564545230e-09 1s 1s 564550190e-09 0s 0s 564551790e-09 1s 1s 564555510e-09 1s 1s 564560430e-09 0s 0s 564562030e-09 1s 1s 564565790e-09 1s 1s 564570670e-09 0s 0s 564572270e-09 1s 1s 564576070e-09 1s 1s 564580910e-09 0s 0s 564582510e-09 1s 1s 564586350e-09 1s 1s 564591150e-09 0s 0s 564592750e-09 1s 1s 564596630e-09 1s 1s 564601390e-09 0s 0s 564602990e-09 1s 1s 564606910e-09 1s 1s 564611630e-09 0s 0s 564613230e-09 1s 1s 564617190e-09 1s 1s 564621870e-09 0s 0s 564623470e-09 1s 1s 564627470e-09 1s 1s 564632110e-09 0s 0s 564633710e-09 1s 1s 564637750e-09 1s 1s 564642350e-09 0s 0s 564643950e-09 1s 1s 564648030e-09 1s 1s 564652590e-09 0s 0s 564654190e-09 1s 1s 564658310e-09 1s 1s 564662830e-09 0s 0s 564664430e-09 1s 1s 564668590e-09 1s 1s 564673070e-09 0s 0s 564674670e-09 1s 1s 564678870e-09 1s 1s 564683310e-09 0s 0s 564684910e-09 1s 1s 564689150e-09 1s 1s 564693550e-09 0s 0s 564695150e-09 1s 1s 564699430e-09 1s 1s 564703790e-09 0s 0s 564705390e-09 1s 1s 564709710e-09 1s 1s 564714030e-09 0s 0s 564715630e-09 1s 1s 564719990e-09 1s 1s 564724270e-09 0s 0s 564725870e-09 1s 1s 564730270e-09 1s 1s 564734510e-09 0s 0s 564736110e-09 1s 1s 564740550e-09 1s 1s 564744750e-09 0s 0s 564746350e-09 1s 1s 564750830e-09 1s 1s 564754990e-09 0s 0s 564756590e-09 1s 1s 564761110e-09 1s 1s 564765230e-09 0s 0s 564766830e-09 1s 1s 564771390e-09 1s 1s 564775470e-09 0s 0s 564777070e-09 1s 1s 564781670e-09 1s 1s 564785710e-09 0s 0s 564787310e-09 1s 1s 564791950e-09 1s 1s 564795950e-09 0s 0s 564797550e-09 1s 1s 564802230e-09 1s 1s 564806190e-09 0s 0s 564807790e-09 1s 1s 564812510e-09 1s 1s 564816430e-09 0s 0s 564818030e-09 1s 1s 564822790e-09 1s 1s 564826670e-09 0s 0s 564828270e-09 1s 1s 564833070e-09 1s 1s 564836910e-09 0s 0s 564838510e-09 1s 1s 564843350e-09 1s 1s 564847150e-09 0s 0s 564848750e-09 1s 1s 564853630e-09 1s 1s 564857390e-09 0s 0s 564858990e-09 1s 1s 564863910e-09 1s 1s 564867630e-09 0s 0s 564869230e-09 1s 1s 564874190e-09 1s 1s 564877870e-09 0s 0s 564879470e-09 1s 1s 564884470e-09 1s 1s 564888110e-09 0s 0s 564889710e-09 1s 1s 564894750e-09 1s 1s 564898350e-09 0s 0s 564899950e-09 1s 1s 564905030e-09 1s 1s 564908590e-09 0s 0s 564910190e-09 1s 1s 564915310e-09 1s 1s 564918830e-09 0s 0s 564920430e-09 1s 1s 564925590e-09 1s 1s 564929070e-09 0s 0s 564930670e-09 1s 1s 564935870e-09 1s 1s 564939310e-09 0s 0s 564940910e-09 1s 1s 564946150e-09 1s 1s 564949550e-09 0s 0s 564951150e-09 1s 1s 564956430e-09 1s 1s 564959790e-09 0s 0s 564961390e-09 1s 1s 564966710e-09 1s 1s 564970030e-09 0s 0s 564971630e-09 1s 1s 564976990e-09 1s 1s 564980270e-09 0s 0s 564981870e-09 1s 1s 564987270e-09 1s 1s 564990510e-09 0s 0s 564992110e-09 1s 1s 564997550e-09 1s 1s 565000750e-09 0s 0s 565002350e-09 1s 1s 565007830e-09 1s 1s 565010990e-09 0s 0s 565012590e-09 1s 1s 565018110e-09 1s 1s 565021230e-09 0s 0s 565022830e-09 1s 1s 565028390e-09 1s 1s 565031470e-09 0s 0s 565033070e-09 1s 1s 565038670e-09 1s 1s 565041710e-09 0s 0s 565043310e-09 1s 1s 565048950e-09 1s 1s 565051950e-09 0s 0s 565053550e-09 1s 1s 565059230e-09 1s 1s 565062190e-09 0s 0s 565063790e-09 1s 1s 565069510e-09 1s 1s 565072430e-09 0s 0s 565074030e-09 1s 1s 565079790e-09 1s 1s 565082670e-09 0s 0s 565084270e-09 1s 1s 565090070e-09 1s 1s 565092910e-09 0s 0s 565094510e-09 1s 1s 565100350e-09 1s 1s 565103150e-09 0s 0s 565104750e-09 1s 1s 565110630e-09 1s 1s 565113390e-09 0s 0s 565114990e-09 1s 1s 565120910e-09 1s 1s 565123630e-09 0s 0s 565125230e-09 1s 1s 565131190e-09 1s 1s 565133870e-09 0s 0s 565135470e-09 1s 1s 565141470e-09 1s 1s 565144110e-09 0s 0s 565145710e-09 1s 1s 565151750e-09 1s 1s 565154350e-09 0s 0s 565155950e-09 1s 1s 565162030e-09 1s 1s 565164590e-09 0s 0s 565166190e-09 1s 1s 565172310e-09 1s 1s 565174830e-09 0s 0s 565176430e-09 1s 1s 565182590e-09 1s 1s 565185070e-09 0s 0s 565186670e-09 1s 1s 565192870e-09 1s 1s 565195310e-09 0s 0s 565196910e-09 1s 1s 565203150e-09 1s 1s 565205550e-09 0s 0s 565207150e-09 1s 1s 565213430e-09 1s 1s 565215790e-09 0s 0s 565217390e-09 1s 1s 565223710e-09 1s 1s 565226030e-09 0s 0s 565227630e-09 1s 1s 565233990e-09 1s 1s 565236270e-09 0s 0s 565237870e-09 1s 1s 565244270e-09 1s 1s 565246510e-09 0s 0s 565248110e-09 1s 1s 565254550e-09 1s 1s 565256750e-09 0s 0s 565258350e-09 1s 1s 565264830e-09 1s 1s 565266990e-09 0s 0s 565268590e-09 1s 1s 565275110e-09 1s 1s 565277230e-09 0s 0s 565278830e-09 1s 1s 565285390e-09 1s 1s 565287470e-09 0s 0s 565289070e-09 1s 1s 565295670e-09 1s 1s 565297710e-09 0s 0s 565299310e-09 1s 1s 565305950e-09 1s 1s 565307950e-09 0s 0s 565309550e-09 1s 1s 565316230e-09 1s 1s 565318190e-09 0s 0s 565319790e-09 1s 1s 565326510e-09 1s 1s 565328430e-09 0s 0s 565330030e-09 1s 1s 565336790e-09 1s 1s 565338670e-09 0s 0s 565340270e-09 1s 1s 565347070e-09 1s 1s 565348910e-09 0s 0s 565350510e-09 1s 1s 565357350e-09 1s 1s 565359150e-09 0s 0s 565360750e-09 1s 1s 565367630e-09 1s 1s 565369390e-09 0s 0s 565370990e-09 1s 1s 565377910e-09 1s 1s 565379630e-09 0s 0s 565381230e-09 1s 1s 565388190e-09 1s 1s 565389870e-09 0s 0s 565391470e-09 1s 1s 565398470e-09 1s 1s 565400110e-09 0s 0s 565401710e-09 1s 1s 565408750e-09 1s 1s 565410350e-09 0s 0s 565411950e-09 1s 1s 565419030e-09 1s 1s 565420590e-09 0s 0s 565422190e-09 1s 1s 565429310e-09 1s 1s 565430830e-09 0s 0s 565432430e-09 1s 1s 565439590e-09 1s 1s 565441070e-09 0s 0s 565442670e-09 1s 1s 565449870e-09 1s 1s 565451310e-09 0s 0s 565452910e-09 1s 1s 565460150e-09 1s 1s 565461550e-09 0s 0s 565463150e-09 1s 1s 565470430e-09 1s 1s 565471790e-09 0s 0s 565473390e-09 1s 1s 565480710e-09 1s 1s 565482030e-09 0s 0s 565483630e-09 1s 1s 565490990e-09 1s 1s 565492270e-09 0s 0s 565493870e-09 1s 1s 565501270e-09 1s 1s 565502510e-09 0s 0s 565504110e-09 1s 1s 565511550e-09 1s 1s 565512750e-09 0s 0s 565514350e-09 1s 1s 565521830e-09 1s 1s 565522990e-09 0s 0s 565524590e-09 1s 1s 565532110e-09 1s 1s 565533230e-09 0s 0s 565534830e-09 1s 1s 565542390e-09 1s 1s 565543470e-09 0s 0s 565545070e-09 1s 1s 565552670e-09 1s 1s 565553710e-09 0s 0s 565555310e-09 1s 1s 565562950e-09 1s 1s 565563950e-09 0s 0s 565565550e-09 1s 1s 565573230e-09 1s 1s 565574190e-09 0s 0s 565575790e-09 1s 1s 565583510e-09 1s 1s 565584430e-09 0s 0s 565586030e-09 1s 1s 565593790e-09 1s 1s 565594670e-09 0s 0s 565596270e-09 1s 1s 565604070e-09 1s 1s 565604910e-09 0s 0s 565606510e-09 1s 1s 565614350e-09 1s 1s 565615150e-09 0s 0s 565616750e-09 1s 1s 565624630e-09 1s 1s 565625390e-09 0s 0s 565626990e-09 1s 1s 565634910e-09 1s 1s 565635630e-09 0s 0s 565637230e-09 1s 1s 565645190e-09 1s 1s 565645870e-09 0s 0s 565647470e-09 1s 1s 565655470e-09 1s 1s 565656110e-09 0s 0s 565657710e-09 1s 1s 565665750e-09 1s 1s 565666350e-09 0s 0s 565667950e-09 1s 1s 565676030e-09 1s 1s 565676590e-09 0s 0s 565678190e-09 1s 1s 565686310e-09 1s 1s 565686830e-09 0s 0s 565688430e-09 1s 1s 565696590e-09 1s 1s 565697070e-09 0s 0s 565698670e-09 1s 1s 565706870e-09 1s 1s 565707310e-09 0s 0s 565708910e-09 1s 1s 565717150e-09 1s 1s 565717550e-09 0s 0s 565719150e-09 1s 1s 565727430e-09 1s 1s 565727790e-09 0s 0s 565729390e-09 1s 1s 565737710e-09 1s 1s 565738030e-09 0s 0s 565739630e-09 1s 1s 565747990e-09 1s 1s 565748270e-09 0s 0s 565749870e-09 1s 1s 565758270e-09 1s 1s 565758510e-09 0s 0s 565760110e-09 1s 1s 565768550e-09 1s 1s 565768750e-09 0s 0s 565770350e-09 1s 1s 565778830e-09 1s 1s 565778990e-09 0s 0s 565780590e-09 1s 1s 565789110e-09 1s 1s 565789230e-09 0s 0s 565790830e-09 1s 1s 565799390e-09 1s 1s 565799470e-09 0s 0s 565801070e-09 1s 1s 565809670e-09 1s 1s 565809710e-09 0s 0s 565811310e-09 1s 1s 565819950e-09 0s 0s 565821550e-09 1s 1s 565830190e-09 0s 0s 565830230e-09 0s 0s 565831790e-09 1s 1s 565840430e-09 0s 0s 565840510e-09 0s 0s 565842030e-09 1s 1s 565850670e-09 0s 0s 565850790e-09 0s 0s 565852270e-09 1s 1s 565860910e-09 0s 0s 565861070e-09 0s 0s 565862510e-09 1s 1s 565871150e-09 0s 0s 565871350e-09 0s 0s 565872750e-09 1s 1s 565881390e-09 0s 0s 565881630e-09 0s 0s 565882990e-09 1s 1s 565891630e-09 0s 0s 565891910e-09 0s 0s 565893230e-09 1s 1s 565901870e-09 0s 0s 565902190e-09 0s 0s 565903470e-09 1s 1s 565912110e-09 0s 0s 565912470e-09 0s 0s 565913710e-09 1s 1s 565922350e-09 0s 0s 565922750e-09 0s 0s 565923950e-09 1s 1s 565932590e-09 0s 0s 565933030e-09 0s 0s 565934190e-09 1s 1s 565942830e-09 0s 0s 565943310e-09 0s 0s 565944430e-09 1s 1s 565953070e-09 0s 0s 565953590e-09 0s 0s 565954670e-09 1s 1s 565963310e-09 0s 0s 565963870e-09 0s 0s 565964910e-09 1s 1s 565973550e-09 0s 0s 565974150e-09 0s 0s 565975150e-09 1s 1s 565983790e-09 0s 0s 565984430e-09 0s 0s 565985390e-09 1s 1s 565994030e-09 0s 0s 565994710e-09 0s 0s 565995630e-09 1s 1s 566004270e-09 0s 0s 566004990e-09 0s 0s 566005870e-09 1s 1s 566014510e-09 0s 0s 566015270e-09 0s 0s 566016110e-09 1s 1s 566024750e-09 0s 0s 566025550e-09 0s 0s 566026350e-09 1s 1s 566034990e-09 0s 0s 566035830e-09 0s 0s 566036590e-09 1s 1s 566045230e-09 0s 0s 566046110e-09 0s 0s 566046830e-09 1s 1s 566055470e-09 0s 0s 566056390e-09 0s 0s 566057070e-09 1s 1s 566065710e-09 0s 0s 566066670e-09 0s 0s 566067310e-09 1s 1s 566075950e-09 0s 0s 566076950e-09 0s 0s 566077550e-09 1s 1s 566086190e-09 0s 0s 566087230e-09 0s 0s 566087790e-09 1s 1s 566096430e-09 0s 0s 566097510e-09 0s 0s 566098030e-09 1s 1s 566106670e-09 0s 0s 566107790e-09 0s 0s 566108270e-09 1s 1s 566116910e-09 0s 0s 566118070e-09 0s 0s 566118510e-09 1s 1s 566127150e-09 0s 0s 566128350e-09 0s 0s 566128750e-09 1s 1s 566137390e-09 0s 0s 566138630e-09 0s 0s 566138990e-09 1s 1s 566147630e-09 0s 0s 566148910e-09 0s 0s 566149230e-09 1s 1s 566157870e-09 0s 0s 566159190e-09 0s 0s 566159470e-09 1s 1s 566168110e-09 0s 0s 566169470e-09 0s 0s 566169710e-09 1s 1s 566178350e-09 0s 0s 566179750e-09 0s 0s 566179950e-09 1s 1s 566188590e-09 0s 0s 566190030e-09 0s 0s 566190190e-09 1s 1s 566198830e-09 0s 0s 566200310e-09 0s 0s 566200430e-09 1s 1s 566209070e-09 0s 0s 566210590e-09 0s 0s 566210670e-09 1s 1s 566219310e-09 0s 0s 566220870e-09 0s 0s 566220910e-09 1s 1s 566229550e-09 0s 0s 566231150e-09 1s 1s 566231190e-09 1s 1s 566239830e-09 0s 0s 566241390e-09 1s 1s 566241470e-09 1s 1s 566250070e-09 0s 0s 566251630e-09 1s 1s 566251750e-09 1s 1s 566260310e-09 0s 0s 566261870e-09 1s 1s 566262030e-09 1s 1s 566270550e-09 0s 0s 566272110e-09 1s 1s 566272310e-09 1s 1s 566280790e-09 0s 0s 566282350e-09 1s 1s 566282590e-09 1s 1s 566291030e-09 0s 0s 566292590e-09 1s 1s 566292870e-09 1s 1s 566301270e-09 0s 0s 566302830e-09 1s 1s 566303150e-09 1s 1s 566311510e-09 0s 0s 566313070e-09 1s 1s 566313430e-09 1s 1s 566321750e-09 0s 0s 566323310e-09 1s 1s 566323710e-09 1s 1s 566331990e-09 0s 0s 566333550e-09 1s 1s 566333990e-09 1s 1s 566342230e-09 0s 0s 566343790e-09 1s 1s 566344270e-09 1s 1s 566352470e-09 0s 0s 566354030e-09 1s 1s 566354550e-09 1s 1s 566362710e-09 0s 0s 566364270e-09 1s 1s 566364830e-09 1s 1s 566372950e-09 0s 0s 566374510e-09 1s 1s 566375110e-09 1s 1s 566383190e-09 0s 0s 566384750e-09 1s 1s 566385390e-09 1s 1s 566393430e-09 0s 0s 566394990e-09 1s 1s 566395670e-09 1s 1s 566403670e-09 0s 0s 566405230e-09 1s 1s 566405950e-09 1s 1s 566413910e-09 0s 0s 566415470e-09 1s 1s 566416230e-09 1s 1s 566424150e-09 0s 0s 566425710e-09 1s 1s 566426510e-09 1s 1s 566434390e-09 0s 0s 566435950e-09 1s 1s 566436790e-09 1s 1s 566444630e-09 0s 0s 566446190e-09 1s 1s 566447070e-09 1s 1s 566454870e-09 0s 0s 566456430e-09 1s 1s 566457350e-09 1s 1s 566465110e-09 0s 0s 566466670e-09 1s 1s 566467630e-09 1s 1s 566475350e-09 0s 0s 566476910e-09 1s 1s 566477910e-09 1s 1s 566485590e-09 0s 0s 566487150e-09 1s 1s 566488190e-09 1s 1s 566495830e-09 0s 0s 566497390e-09 1s 1s 566498470e-09 1s 1s 566506070e-09 0s 0s 566507630e-09 1s 1s 566508750e-09 1s 1s 566516310e-09 0s 0s 566517870e-09 1s 1s 566519030e-09 1s 1s 566526550e-09 0s 0s 566528110e-09 1s 1s 566529310e-09 1s 1s 566536790e-09 0s 0s 566538350e-09 1s 1s 566539590e-09 1s 1s 566547030e-09 0s 0s 566548590e-09 1s 1s 566549870e-09 1s 1s 566557270e-09 0s 0s 566558830e-09 1s 1s 566560150e-09 1s 1s 566567510e-09 0s 0s 566569070e-09 1s 1s 566570430e-09 1s 1s 566577750e-09 0s 0s 566579310e-09 1s 1s 566580710e-09 1s 1s 566587990e-09 0s 0s 566589550e-09 1s 1s 566590990e-09 1s 1s 566598230e-09 0s 0s 566599790e-09 1s 1s 566601270e-09 1s 1s 566608470e-09 0s 0s 566610030e-09 1s 1s 566611550e-09 1s 1s 566618710e-09 0s 0s 566620270e-09 1s 1s 566621830e-09 1s 1s 566628950e-09 0s 0s 566630510e-09 1s 1s 566632110e-09 1s 1s 566639190e-09 0s 0s 566640750e-09 1s 1s 566642390e-09 1s 1s 566649430e-09 0s 0s 566650990e-09 1s 1s 566652670e-09 1s 1s 566659670e-09 0s 0s 566661230e-09 1s 1s 566662950e-09 1s 1s 566669910e-09 0s 0s 566671470e-09 1s 1s 566673230e-09 1s 1s 566680150e-09 0s 0s 566681710e-09 1s 1s 566683510e-09 1s 1s 566690390e-09 0s 0s 566691950e-09 1s 1s 566693790e-09 1s 1s 566700630e-09 0s 0s 566702190e-09 1s 1s 566704070e-09 1s 1s 566710870e-09 0s 0s 566712430e-09 1s 1s 566714350e-09 1s 1s 566721110e-09 0s 0s 566722670e-09 1s 1s 566724630e-09 1s 1s 566731350e-09 0s 0s 566732910e-09 1s 1s 566734910e-09 1s 1s 566741590e-09 0s 0s 566743150e-09 1s 1s 566745190e-09 1s 1s 566751830e-09 0s 0s 566753390e-09 1s 1s 566755470e-09 1s 1s 566762070e-09 0s 0s 566763630e-09 1s 1s 566765750e-09 1s 1s 566772310e-09 0s 0s 566773870e-09 1s 1s 566776030e-09 1s 1s 566782550e-09 0s 0s 566784110e-09 1s 1s 566786310e-09 1s 1s 566792790e-09 0s 0s 566794350e-09 1s 1s 566796590e-09 1s 1s 566803030e-09 0s 0s 566804590e-09 1s 1s 566806870e-09 1s 1s 566813270e-09 0s 0s 566814830e-09 1s 1s 566817150e-09 1s 1s 566823510e-09 0s 0s 566825070e-09 1s 1s 566827430e-09 1s 1s 566833750e-09 0s 0s 566835310e-09 1s 1s 566837710e-09 1s 1s 566843990e-09 0s 0s 566845550e-09 1s 1s 566847990e-09 1s 1s 566854230e-09 0s 0s 566855790e-09 1s 1s 566858270e-09 1s 1s 566864470e-09 0s 0s 566866030e-09 1s 1s 566868550e-09 1s 1s 566874710e-09 0s 0s 566876270e-09 1s 1s 566878830e-09 1s 1s 566884950e-09 0s 0s 566886510e-09 1s 1s 566889110e-09 1s 1s 566895190e-09 0s 0s 566896750e-09 1s 1s 566899390e-09 1s 1s 566905430e-09 0s 0s 566906990e-09 1s 1s 566909670e-09 1s 1s 566915670e-09 0s 0s 566917230e-09 1s 1s 566919950e-09 1s 1s 566925910e-09 0s 0s 566927470e-09 1s 1s 566930230e-09 1s 1s 566936150e-09 0s 0s 566937710e-09 1s 1s 566940510e-09 1s 1s 566946390e-09 0s 0s 566947950e-09 1s 1s 566950790e-09 1s 1s 566956630e-09 0s 0s 566958190e-09 1s 1s 566961070e-09 1s 1s 566966870e-09 0s 0s 566968430e-09 1s 1s 566971350e-09 1s 1s 566977110e-09 0s 0s 566978670e-09 1s 1s 566981630e-09 1s 1s 566987350e-09 0s 0s 566988910e-09 1s 1s 566991910e-09 1s 1s 566997590e-09 0s 0s 566999150e-09 1s 1s 567002190e-09 1s 1s 567007830e-09 0s 0s 567009390e-09 1s 1s 567012470e-09 1s 1s 567018070e-09 0s 0s 567019630e-09 1s 1s 567022750e-09 1s 1s 567028310e-09 0s 0s 567029870e-09 1s 1s 567033030e-09 1s 1s 567038550e-09 0s 0s 567040110e-09 1s 1s 567043310e-09 1s 1s 567048790e-09 0s 0s 567050350e-09 1s 1s 567053590e-09 1s 1s 567059030e-09 0s 0s 567060590e-09 1s 1s 567063870e-09 1s 1s 567069270e-09 0s 0s 567070830e-09 1s 1s 567074150e-09 1s 1s 567079510e-09 0s 0s 567081070e-09 1s 1s 567084430e-09 1s 1s 567089750e-09 0s 0s 567091310e-09 1s 1s 567094710e-09 1s 1s 567099990e-09 0s 0s 567101550e-09 1s 1s 567104990e-09 1s 1s 567110230e-09 0s 0s 567111790e-09 1s 1s 567115270e-09 1s 1s 567120470e-09 0s 0s 567122030e-09 1s 1s 567125550e-09 1s 1s 567130710e-09 0s 0s 567132270e-09 1s 1s 567135830e-09 1s 1s 567140950e-09 0s 0s 567142510e-09 1s 1s 567146110e-09 1s 1s 567151190e-09 0s 0s 567152750e-09 1s 1s 567156390e-09 1s 1s 567161430e-09 0s 0s 567162990e-09 1s 1s 567166670e-09 1s 1s 567171670e-09 0s 0s 567173230e-09 1s 1s 567176950e-09 1s 1s 567181910e-09 0s 0s 567183470e-09 1s 1s 567187230e-09 1s 1s 567192150e-09 0s 0s 567193710e-09 1s 1s 567197510e-09 1s 1s 567202390e-09 0s 0s 567203950e-09 1s 1s 567207790e-09 1s 1s 567212630e-09 0s 0s 567214190e-09 1s 1s 567218070e-09 1s 1s 567222870e-09 0s 0s 567224430e-09 1s 1s 567228350e-09 1s 1s 567233110e-09 0s 0s 567234670e-09 1s 1s 567238630e-09 1s 1s 567243350e-09 0s 0s 567244910e-09 1s 1s 567248910e-09 1s 1s 567253590e-09 0s 0s 567255150e-09 1s 1s 567259190e-09 1s 1s 567263830e-09 0s 0s 567265390e-09 1s 1s 567269470e-09 1s 1s 567274070e-09 0s 0s 567275630e-09 1s 1s 567279750e-09 1s 1s 567284310e-09 0s 0s 567285870e-09 1s 1s 567290030e-09 1s 1s 567294550e-09 0s 0s 567296110e-09 1s 1s 567300310e-09 1s 1s 567304790e-09 0s 0s 567306350e-09 1s 1s 567310590e-09 1s 1s 567315030e-09 0s 0s 567316590e-09 1s 1s 567320870e-09 1s 1s 567325270e-09 0s 0s 567326830e-09 1s 1s 567331150e-09 1s 1s 567335510e-09 0s 0s 567337070e-09 1s 1s 567341430e-09 1s 1s 567345750e-09 0s 0s 567347310e-09 1s 1s 567351710e-09 1s 1s 567355990e-09 0s 0s 567357550e-09 1s 1s 567361990e-09 1s 1s 567366230e-09 0s 0s 567367790e-09 1s 1s 567372270e-09 1s 1s 567376470e-09 0s 0s 567378030e-09 1s 1s 567382550e-09 1s 1s 567386710e-09 0s 0s 567388270e-09 1s 1s 567392830e-09 1s 1s 567396950e-09 0s 0s 567398510e-09 1s 1s 567403110e-09 1s 1s 567407190e-09 0s 0s 567408750e-09 1s 1s 567413390e-09 1s 1s 567417430e-09 0s 0s 567418990e-09 1s 1s 567423670e-09 1s 1s 567427670e-09 0s 0s 567429230e-09 1s 1s 567433950e-09 1s 1s 567437910e-09 0s 0s 567439470e-09 1s 1s 567444230e-09 1s 1s 567448150e-09 0s 0s 567449710e-09 1s 1s 567454510e-09 1s 1s 567458390e-09 0s 0s 567459950e-09 1s 1s 567464790e-09 1s 1s 567468630e-09 0s 0s 567470190e-09 1s 1s 567475070e-09 1s 1s 567478870e-09 0s 0s 567480430e-09 1s 1s 567485350e-09 1s 1s 567489110e-09 0s 0s 567490670e-09 1s 1s 567495630e-09 1s 1s 567499350e-09 0s 0s 567500910e-09 1s 1s 567505910e-09 1s 1s 567509590e-09 0s 0s 567511150e-09 1s 1s 567516190e-09 1s 1s 567519830e-09 0s 0s 567521390e-09 1s 1s 567526470e-09 1s 1s 567530070e-09 0s 0s 567531630e-09 1s 1s 567536750e-09 1s 1s 567540310e-09 0s 0s 567541870e-09 1s 1s 567547030e-09 1s 1s 567550550e-09 0s 0s 567552110e-09 1s 1s 567557310e-09 1s 1s 567560790e-09 0s 0s 567562350e-09 1s 1s 567567590e-09 1s 1s 567571030e-09 0s 0s 567572590e-09 1s 1s 567577870e-09 1s 1s 567581270e-09 0s 0s 567582830e-09 1s 1s 567588150e-09 1s 1s 567591510e-09 0s 0s 567593070e-09 1s 1s 567598430e-09 1s 1s 567601750e-09 0s 0s 567603310e-09 1s 1s 567608710e-09 1s 1s 567611990e-09 0s 0s 567613550e-09 1s 1s 567618990e-09 1s 1s 567622230e-09 0s 0s 567623790e-09 1s 1s 567629270e-09 1s 1s 567632470e-09 0s 0s 567634030e-09 1s 1s 567639550e-09 1s 1s 567642710e-09 0s 0s 567644270e-09 1s 1s 567649830e-09 1s 1s 567652950e-09 0s 0s 567654510e-09 1s 1s 567660110e-09 1s 1s 567663190e-09 0s 0s 567664750e-09 1s 1s 567670390e-09 1s 1s 567673430e-09 0s 0s 567674990e-09 1s 1s 567680670e-09 1s 1s 567683670e-09 0s 0s 567685230e-09 1s 1s 567690950e-09 1s 1s 567693910e-09 0s 0s 567695470e-09 1s 1s 567701230e-09 1s 1s 567704150e-09 0s 0s 567705710e-09 1s 1s 567711510e-09 1s 1s 567714390e-09 0s 0s 567715950e-09 1s 1s 567721790e-09 1s 1s 567724630e-09 0s 0s 567726190e-09 1s 1s 567732070e-09 1s 1s 567734870e-09 0s 0s 567736430e-09 1s 1s 567742350e-09 1s 1s 567745110e-09 0s 0s 567746670e-09 1s 1s 567752630e-09 1s 1s 567755350e-09 0s 0s 567756910e-09 1s 1s 567762910e-09 1s 1s 567765590e-09 0s 0s 567767150e-09 1s 1s 567773190e-09 1s 1s 567775830e-09 0s 0s 567777390e-09 1s 1s 567783470e-09 1s 1s 567786070e-09 0s 0s 567787630e-09 1s 1s 567793750e-09 1s 1s 567796310e-09 0s 0s 567797870e-09 1s 1s 567804030e-09 1s 1s 567806550e-09 0s 0s 567808110e-09 1s 1s 567814310e-09 1s 1s 567816790e-09 0s 0s 567818350e-09 1s 1s 567824590e-09 1s 1s 567827030e-09 0s 0s 567828590e-09 1s 1s 567834870e-09 1s 1s 567837270e-09 0s 0s 567838830e-09 1s 1s 567845150e-09 1s 1s 567847510e-09 0s 0s 567849070e-09 1s 1s 567855430e-09 1s 1s 567857750e-09 0s 0s 567859310e-09 1s 1s 567865710e-09 1s 1s 567867990e-09 0s 0s 567869550e-09 1s 1s 567875990e-09 1s 1s 567878230e-09 0s 0s 567879790e-09 1s 1s 567886270e-09 1s 1s 567888470e-09 0s 0s 567890030e-09 1s 1s 567896550e-09 1s 1s 567898710e-09 0s 0s 567900270e-09 1s 1s 567906830e-09 1s 1s 567908950e-09 0s 0s 567910510e-09 1s 1s 567917110e-09 1s 1s 567919190e-09 0s 0s 567920750e-09 1s 1s 567927390e-09 1s 1s 567929430e-09 0s 0s 567930990e-09 1s 1s 567937670e-09 1s 1s 567939670e-09 0s 0s 567941230e-09 1s 1s 567947950e-09 1s 1s 567949910e-09 0s 0s 567951470e-09 1s 1s 567958230e-09 1s 1s 567960150e-09 0s 0s 567961710e-09 1s 1s 567968510e-09 1s 1s 567970390e-09 0s 0s 567971950e-09 1s 1s 567978790e-09 1s 1s 567980630e-09 0s 0s 567982190e-09 1s 1s 567989070e-09 1s 1s 567990870e-09 0s 0s 567992430e-09 1s 1s 567999350e-09 1s 1s 568001110e-09 0s 0s 568002670e-09 1s 1s 568009630e-09 1s 1s 568011350e-09 0s 0s 568012910e-09 1s 1s 568019910e-09 1s 1s 568021590e-09 0s 0s 568023150e-09 1s 1s 568030190e-09 1s 1s 568031830e-09 0s 0s 568033390e-09 1s 1s 568040470e-09 1s 1s 568042070e-09 0s 0s 568043630e-09 1s 1s 568050750e-09 1s 1s 568052310e-09 0s 0s 568053870e-09 1s 1s 568061030e-09 1s 1s 568062550e-09 0s 0s 568064110e-09 1s 1s 568071310e-09 1s 1s 568072790e-09 0s 0s 568074350e-09 1s 1s 568081590e-09 1s 1s 568083030e-09 0s 0s 568084590e-09 1s 1s 568091870e-09 1s 1s 568093270e-09 0s 0s 568094830e-09 1s 1s 568102150e-09 1s 1s 568103510e-09 0s 0s 568105070e-09 1s 1s 568112430e-09 1s 1s 568113750e-09 0s 0s 568115310e-09 1s 1s 568122710e-09 1s 1s 568123990e-09 0s 0s 568125550e-09 1s 1s 568132990e-09 1s 1s 568134230e-09 0s 0s 568135790e-09 1s 1s 568143270e-09 1s 1s 568144470e-09 0s 0s 568146030e-09 1s 1s 568153550e-09 1s 1s 568154710e-09 0s 0s 568156270e-09 1s 1s 568163830e-09 1s 1s 568164950e-09 0s 0s 568166510e-09 1s 1s 568174110e-09 1s 1s 568175190e-09 0s 0s 568176750e-09 1s 1s 568184390e-09 1s 1s 568185430e-09 0s 0s 568186990e-09 1s 1s 568194670e-09 1s 1s 568195670e-09 0s 0s 568197230e-09 1s 1s 568204950e-09 1s 1s 568205910e-09 0s 0s 568207470e-09 1s 1s 568215230e-09 1s 1s 568216150e-09 0s 0s 568217710e-09 1s 1s 568225510e-09 1s 1s 568226390e-09 0s 0s 568227950e-09 1s 1s 568235790e-09 1s 1s 568236630e-09 0s 0s 568238190e-09 1s 1s 568246070e-09 1s 1s 568246870e-09 0s 0s 568248430e-09 1s 1s 568256350e-09 1s 1s 568257110e-09 0s 0s 568258670e-09 1s 1s 568266630e-09 1s 1s 568267350e-09 0s 0s 568268910e-09 1s 1s 568276910e-09 1s 1s 568277590e-09 0s 0s 568279150e-09 1s 1s 568287190e-09 1s 1s 568287830e-09 0s 0s 568289390e-09 1s 1s 568297470e-09 1s 1s 568298070e-09 0s 0s 568299630e-09 1s 1s 568307750e-09 1s 1s 568308310e-09 0s 0s 568309870e-09 1s 1s 568318030e-09 1s 1s 568318550e-09 0s 0s 568320110e-09 1s 1s 568328310e-09 1s 1s 568328790e-09 0s 0s 568330350e-09 1s 1s 568338590e-09 1s 1s 568339030e-09 0s 0s 568340590e-09 1s 1s 568348870e-09 1s 1s 568349270e-09 0s 0s 568350830e-09 1s 1s 568359150e-09 1s 1s 568359510e-09 0s 0s 568361070e-09 1s 1s 568369430e-09 1s 1s 568369750e-09 0s 0s 568371310e-09 1s 1s 568379710e-09 1s 1s 568379990e-09 0s 0s 568381550e-09 1s 1s 568389990e-09 1s 1s 568390230e-09 0s 0s 568391790e-09 1s 1s 568400270e-09 1s 1s 568400470e-09 0s 0s 568402030e-09 1s 1s 568410550e-09 1s 1s 568410710e-09 0s 0s 568412270e-09 1s 1s 568420830e-09 1s 1s 568420950e-09 0s 0s 568422510e-09 1s 1s 568431110e-09 1s 1s 568431190e-09 0s 0s 568432750e-09 1s 1s 568441390e-09 1s 1s 568441430e-09 0s 0s 568442990e-09 1s 1s 568451670e-09 0s 0s 568453230e-09 1s 1s 568461910e-09 0s 0s 568461950e-09 0s 0s 568463470e-09 1s 1s 568472150e-09 0s 0s 568472230e-09 0s 0s 568473710e-09 1s 1s 568482390e-09 0s 0s 568482510e-09 0s 0s 568483950e-09 1s 1s 568492630e-09 0s 0s 568492790e-09 0s 0s 568494190e-09 1s 1s 568502870e-09 0s 0s 568503070e-09 0s 0s 568504430e-09 1s 1s 568513110e-09 0s 0s 568513350e-09 0s 0s 568514670e-09 1s 1s 568523350e-09 0s 0s 568523630e-09 0s 0s 568524910e-09 1s 1s 568533590e-09 0s 0s 568533910e-09 0s 0s 568535150e-09 1s 1s 568543830e-09 0s 0s 568544190e-09 0s 0s 568545390e-09 1s 1s 568554070e-09 0s 0s 568554470e-09 0s 0s 568555630e-09 1s 1s 568564310e-09 0s 0s 568564750e-09 0s 0s 568565870e-09 1s 1s 568574550e-09 0s 0s 568575030e-09 0s 0s 568576110e-09 1s 1s 568584790e-09 0s 0s 568585310e-09 0s 0s 568586350e-09 1s 1s 568595030e-09 0s 0s 568595590e-09 0s 0s 568596590e-09 1s 1s 568605270e-09 0s 0s 568605870e-09 0s 0s 568606830e-09 1s 1s 568615510e-09 0s 0s 568616150e-09 0s 0s 568617070e-09 1s 1s 568625750e-09 0s 0s 568626430e-09 0s 0s 568627310e-09 1s 1s 568635990e-09 0s 0s 568636710e-09 0s 0s 568637550e-09 1s 1s 568646230e-09 0s 0s 568646990e-09 0s 0s 568647790e-09 1s 1s 568656470e-09 0s 0s 568657270e-09 0s 0s 568658030e-09 1s 1s 568666710e-09 0s 0s 568667550e-09 0s 0s 568668270e-09 1s 1s 568676950e-09 0s 0s 568677830e-09 0s 0s 568678510e-09 1s 1s 568687190e-09 0s 0s 568688110e-09 0s 0s 568688750e-09 1s 1s 568697430e-09 0s 0s 568698390e-09 0s 0s 568698990e-09 1s 1s 568707670e-09 0s 0s 568708670e-09 0s 0s 568709230e-09 1s 1s 568717910e-09 0s 0s 568718950e-09 0s 0s 568719470e-09 1s 1s 568728150e-09 0s 0s 568729230e-09 0s 0s 568729710e-09 1s 1s 568738390e-09 0s 0s 568739510e-09 0s 0s 568739950e-09 1s 1s 568748630e-09 0s 0s 568749790e-09 0s 0s 568750190e-09 1s 1s 568758870e-09 0s 0s 568760070e-09 0s 0s 568760430e-09 1s 1s 568769110e-09 0s 0s 568770350e-09 0s 0s 568770670e-09 1s 1s 568779350e-09 0s 0s 568780630e-09 0s 0s 568780910e-09 1s 1s 568789590e-09 0s 0s 568790910e-09 0s 0s 568791150e-09 1s 1s 568799830e-09 0s 0s 568801190e-09 0s 0s 568801390e-09 1s 1s 568810070e-09 0s 0s 568811470e-09 0s 0s 568811630e-09 1s 1s 568820310e-09 0s 0s 568821750e-09 0s 0s 568821870e-09 1s 1s 568830550e-09 0s 0s 568832030e-09 0s 0s 568832110e-09 1s 1s 568840790e-09 0s 0s 568842310e-09 0s 0s 568842350e-09 1s 1s 568851030e-09 0s 0s 568852590e-09 1s 1s 568852630e-09 1s 1s 568861310e-09 0s 0s 568862830e-09 1s 1s 568862910e-09 1s 1s 568871550e-09 0s 0s 568873070e-09 1s 1s 568873190e-09 1s 1s 568881790e-09 0s 0s 568883310e-09 1s 1s 568883470e-09 1s 1s 568892030e-09 0s 0s 568893550e-09 1s 1s 568893750e-09 1s 1s 568902270e-09 0s 0s 568903790e-09 1s 1s 568904030e-09 1s 1s 568912510e-09 0s 0s 568914030e-09 1s 1s 568914310e-09 1s 1s 568922750e-09 0s 0s 568924270e-09 1s 1s 568924590e-09 1s 1s 568932990e-09 0s 0s 568934510e-09 1s 1s 568934870e-09 1s 1s 568943230e-09 0s 0s 568944750e-09 1s 1s 568945150e-09 1s 1s 568953470e-09 0s 0s 568954990e-09 1s 1s 568955430e-09 1s 1s 568963710e-09 0s 0s 568965230e-09 1s 1s 568965710e-09 1s 1s 568973950e-09 0s 0s 568975470e-09 1s 1s 568975990e-09 1s 1s 568984190e-09 0s 0s 568985710e-09 1s 1s 568986270e-09 1s 1s 568994430e-09 0s 0s 568995950e-09 1s 1s 568996550e-09 1s 1s 569004670e-09 0s 0s 569006190e-09 1s 1s 569006830e-09 1s 1s 569014910e-09 0s 0s 569016430e-09 1s 1s 569017110e-09 1s 1s 569025150e-09 0s 0s 569026670e-09 1s 1s 569027390e-09 1s 1s 569035390e-09 0s 0s 569036910e-09 1s 1s 569037670e-09 1s 1s 569045630e-09 0s 0s 569047150e-09 1s 1s 569047950e-09 1s 1s 569055870e-09 0s 0s 569057390e-09 1s 1s 569058230e-09 1s 1s 569066110e-09 0s 0s 569067630e-09 1s 1s 569068510e-09 1s 1s 569076350e-09 0s 0s 569077870e-09 1s 1s 569078790e-09 1s 1s 569086590e-09 0s 0s 569088110e-09 1s 1s 569089070e-09 1s 1s 569096830e-09 0s 0s 569098350e-09 1s 1s 569099350e-09 1s 1s 569107070e-09 0s 0s 569108590e-09 1s 1s 569109630e-09 1s 1s 569117310e-09 0s 0s 569118830e-09 1s 1s 569119910e-09 1s 1s 569127550e-09 0s 0s 569129070e-09 1s 1s 569130190e-09 1s 1s 569137790e-09 0s 0s 569139310e-09 1s 1s 569140470e-09 1s 1s 569148030e-09 0s 0s 569149550e-09 1s 1s 569150750e-09 1s 1s 569158270e-09 0s 0s 569159790e-09 1s 1s 569161030e-09 1s 1s 569168510e-09 0s 0s 569170030e-09 1s 1s 569171310e-09 1s 1s 569178750e-09 0s 0s 569180270e-09 1s 1s 569181590e-09 1s 1s 569188990e-09 0s 0s 569190510e-09 1s 1s 569191870e-09 1s 1s 569199230e-09 0s 0s 569200750e-09 1s 1s 569202150e-09 1s 1s 569209470e-09 0s 0s 569210990e-09 1s 1s 569212430e-09 1s 1s 569219710e-09 0s 0s 569221230e-09 1s 1s 569222710e-09 1s 1s 569229950e-09 0s 0s 569231470e-09 1s 1s 569232990e-09 1s 1s 569240190e-09 0s 0s 569241710e-09 1s 1s 569243270e-09 1s 1s 569250430e-09 0s 0s 569251950e-09 1s 1s 569253550e-09 1s 1s 569260670e-09 0s 0s 569262190e-09 1s 1s 569263830e-09 1s 1s 569270910e-09 0s 0s 569272430e-09 1s 1s 569274110e-09 1s 1s 569281150e-09 0s 0s 569282670e-09 1s 1s 569284390e-09 1s 1s 569291390e-09 0s 0s 569292910e-09 1s 1s 569294670e-09 1s 1s 569301630e-09 0s 0s 569303150e-09 1s 1s 569304950e-09 1s 1s 569311870e-09 0s 0s 569313390e-09 1s 1s 569315230e-09 1s 1s 569322110e-09 0s 0s 569323630e-09 1s 1s 569325510e-09 1s 1s 569332350e-09 0s 0s 569333870e-09 1s 1s 569335790e-09 1s 1s 569342590e-09 0s 0s 569344110e-09 1s 1s 569346070e-09 1s 1s 569352830e-09 0s 0s 569354350e-09 1s 1s 569356350e-09 1s 1s 569363070e-09 0s 0s 569364590e-09 1s 1s 569366630e-09 1s 1s 569373310e-09 0s 0s 569374830e-09 1s 1s 569376910e-09 1s 1s 569383550e-09 0s 0s 569385070e-09 1s 1s 569387190e-09 1s 1s 569393790e-09 0s 0s 569395310e-09 1s 1s 569397470e-09 1s 1s 569404030e-09 0s 0s 569405550e-09 1s 1s 569407750e-09 1s 1s 569414270e-09 0s 0s 569415790e-09 1s 1s 569418030e-09 1s 1s 569424510e-09 0s 0s 569426030e-09 1s 1s 569428310e-09 1s 1s 569434750e-09 0s 0s 569436270e-09 1s 1s 569438590e-09 1s 1s 569444990e-09 0s 0s 569446510e-09 1s 1s 569448870e-09 1s 1s 569455230e-09 0s 0s 569456750e-09 1s 1s 569459150e-09 1s 1s 569465470e-09 0s 0s 569466990e-09 1s 1s 569469430e-09 1s 1s 569475710e-09 0s 0s 569477230e-09 1s 1s 569479710e-09 1s 1s 569485950e-09 0s 0s 569487470e-09 1s 1s 569489990e-09 1s 1s 569496190e-09 0s 0s 569497710e-09 1s 1s 569500270e-09 1s 1s 569506430e-09 0s 0s 569507950e-09 1s 1s 569510550e-09 1s 1s 569516670e-09 0s 0s 569518190e-09 1s 1s 569520830e-09 1s 1s 569526910e-09 0s 0s 569528430e-09 1s 1s 569531110e-09 1s 1s 569537150e-09 0s 0s 569538670e-09 1s 1s 569541390e-09 1s 1s 569547390e-09 0s 0s 569548910e-09 1s 1s 569551670e-09 1s 1s 569557630e-09 0s 0s 569559150e-09 1s 1s 569561950e-09 1s 1s 569567870e-09 0s 0s 569569390e-09 1s 1s 569572230e-09 1s 1s 569578110e-09 0s 0s 569579630e-09 1s 1s 569582510e-09 1s 1s 569588350e-09 0s 0s 569589870e-09 1s 1s 569592790e-09 1s 1s 569598590e-09 0s 0s 569600110e-09 1s 1s 569603070e-09 1s 1s 569608830e-09 0s 0s 569610350e-09 1s 1s 569613350e-09 1s 1s 569619070e-09 0s 0s 569620590e-09 1s 1s 569623630e-09 1s 1s 569629310e-09 0s 0s 569630830e-09 1s 1s 569633910e-09 1s 1s 569639550e-09 0s 0s 569641070e-09 1s 1s 569644190e-09 1s 1s 569649790e-09 0s 0s 569651310e-09 1s 1s 569654470e-09 1s 1s 569660030e-09 0s 0s 569661550e-09 1s 1s 569664750e-09 1s 1s 569670270e-09 0s 0s 569671790e-09 1s 1s 569675030e-09 1s 1s 569680510e-09 0s 0s 569682030e-09 1s 1s 569685310e-09 1s 1s 569690750e-09 0s 0s 569692270e-09 1s 1s 569695590e-09 1s 1s 569700990e-09 0s 0s 569702510e-09 1s 1s 569705870e-09 1s 1s 569711230e-09 0s 0s 569712750e-09 1s 1s 569716150e-09 1s 1s 569721470e-09 0s 0s 569722990e-09 1s 1s 569726430e-09 1s 1s 569731710e-09 0s 0s 569733230e-09 1s 1s 569736710e-09 1s 1s 569741950e-09 0s 0s 569743470e-09 1s 1s 569746990e-09 1s 1s 569752190e-09 0s 0s 569753710e-09 1s 1s 569757270e-09 1s 1s 569762430e-09 0s 0s 569763950e-09 1s 1s 569767550e-09 1s 1s 569772670e-09 0s 0s 569774190e-09 1s 1s 569777830e-09 1s 1s 569782910e-09 0s 0s 569784430e-09 1s 1s 569788110e-09 1s 1s 569793150e-09 0s 0s 569794670e-09 1s 1s 569798390e-09 1s 1s 569803390e-09 0s 0s 569804910e-09 1s 1s 569808670e-09 1s 1s 569813630e-09 0s 0s 569815150e-09 1s 1s 569818950e-09 1s 1s 569823870e-09 0s 0s 569825390e-09 1s 1s 569829230e-09 1s 1s 569834110e-09 0s 0s 569835630e-09 1s 1s 569839510e-09 1s 1s 569844350e-09 0s 0s 569845870e-09 1s 1s 569849790e-09 1s 1s 569854590e-09 0s 0s 569856110e-09 1s 1s 569860070e-09 1s 1s 569864830e-09 0s 0s 569866350e-09 1s 1s 569870350e-09 1s 1s 569875070e-09 0s 0s 569876590e-09 1s 1s 569880630e-09 1s 1s 569885310e-09 0s 0s 569886830e-09 1s 1s 569890910e-09 1s 1s 569895550e-09 0s 0s 569897070e-09 1s 1s 569901190e-09 1s 1s 569905790e-09 0s 0s 569907310e-09 1s 1s 569911470e-09 1s 1s 569916030e-09 0s 0s 569917550e-09 1s 1s 569921750e-09 1s 1s 569926270e-09 0s 0s 569927790e-09 1s 1s 569932030e-09 1s 1s 569936510e-09 0s 0s 569938030e-09 1s 1s 569942310e-09 1s 1s 569946750e-09 0s 0s 569948270e-09 1s 1s 569952590e-09 1s 1s 569956990e-09 0s 0s 569958510e-09 1s 1s 569962870e-09 1s 1s 569967230e-09 0s 0s 569968750e-09 1s 1s 569973150e-09 1s 1s 569977470e-09 0s 0s 569978990e-09 1s 1s 569983430e-09 1s 1s 569987710e-09 0s 0s 569989230e-09 1s 1s 569993710e-09 1s 1s 569997950e-09 0s 0s 569999470e-09 1s 1s 570003990e-09 1s 1s 570008190e-09 0s 0s 570009710e-09 1s 1s 570014270e-09 1s 1s 570018430e-09 0s 0s 570019950e-09 1s 1s 570024550e-09 1s 1s 570028670e-09 0s 0s 570030190e-09 1s 1s 570034830e-09 1s 1s 570038910e-09 0s 0s 570040430e-09 1s 1s 570045110e-09 1s 1s 570049150e-09 0s 0s 570050670e-09 1s 1s 570055390e-09 1s 1s 570059390e-09 0s 0s 570060910e-09 1s 1s 570065670e-09 1s 1s 570069630e-09 0s 0s 570071150e-09 1s 1s 570075950e-09 1s 1s 570079870e-09 0s 0s 570081390e-09 1s 1s 570086230e-09 1s 1s 570090110e-09 0s 0s 570091630e-09 1s 1s 570096510e-09 1s 1s 570100350e-09 0s 0s 570101870e-09 1s 1s 570106790e-09 1s 1s 570110590e-09 0s 0s 570112110e-09 1s 1s 570117070e-09 1s 1s 570120830e-09 0s 0s 570122350e-09 1s 1s 570127350e-09 1s 1s 570131070e-09 0s 0s 570132590e-09 1s 1s 570137630e-09 1s 1s 570141310e-09 0s 0s 570142830e-09 1s 1s 570147910e-09 1s 1s 570151550e-09 0s 0s 570153070e-09 1s 1s 570158190e-09 1s 1s 570161790e-09 0s 0s 570163310e-09 1s 1s 570168470e-09 1s 1s 570172030e-09 0s 0s 570173550e-09 1s 1s 570178750e-09 1s 1s 570182270e-09 0s 0s 570183790e-09 1s 1s 570189030e-09 1s 1s 570192510e-09 0s 0s 570194030e-09 1s 1s 570199310e-09 1s 1s 570202750e-09 0s 0s 570204270e-09 1s 1s 570209590e-09 1s 1s 570212990e-09 0s 0s 570214510e-09 1s 1s 570219870e-09 1s 1s 570223230e-09 0s 0s 570224750e-09 1s 1s 570230150e-09 1s 1s 570233470e-09 0s 0s 570234990e-09 1s 1s 570240430e-09 1s 1s 570243710e-09 0s 0s 570245230e-09 1s 1s 570250710e-09 1s 1s 570253950e-09 0s 0s 570255470e-09 1s 1s 570260990e-09 1s 1s 570264190e-09 0s 0s 570265710e-09 1s 1s 570271270e-09 1s 1s 570274430e-09 0s 0s 570275950e-09 1s 1s 570281550e-09 1s 1s 570284670e-09 0s 0s 570286190e-09 1s 1s 570291830e-09 1s 1s 570294910e-09 0s 0s 570296430e-09 1s 1s 570302110e-09 1s 1s 570305150e-09 0s 0s 570306670e-09 1s 1s 570312390e-09 1s 1s 570315390e-09 0s 0s 570316910e-09 1s 1s 570322670e-09 1s 1s 570325630e-09 0s 0s 570327150e-09 1s 1s 570332950e-09 1s 1s 570335870e-09 0s 0s 570337390e-09 1s 1s 570343230e-09 1s 1s 570346110e-09 0s 0s 570347630e-09 1s 1s 570353510e-09 1s 1s 570356350e-09 0s 0s 570357870e-09 1s 1s 570363790e-09 1s 1s 570366590e-09 0s 0s 570368110e-09 1s 1s 570374070e-09 1s 1s 570376830e-09 0s 0s 570378350e-09 1s 1s 570384350e-09 1s 1s 570387070e-09 0s 0s 570388590e-09 1s 1s 570394630e-09 1s 1s 570397310e-09 0s 0s 570398830e-09 1s 1s 570404910e-09 1s 1s 570407550e-09 0s 0s 570409070e-09 1s 1s 570415190e-09 1s 1s 570417790e-09 0s 0s 570419310e-09 1s 1s 570425470e-09 1s 1s 570428030e-09 0s 0s 570429550e-09 1s 1s 570435750e-09 1s 1s 570438270e-09 0s 0s 570439790e-09 1s 1s 570446030e-09 1s 1s 570448510e-09 0s 0s 570450030e-09 1s 1s 570456310e-09 1s 1s 570458750e-09 0s 0s 570460270e-09 1s 1s 570466590e-09 1s 1s 570468990e-09 0s 0s 570470510e-09 1s 1s 570476870e-09 1s 1s 570479230e-09 0s 0s 570480750e-09 1s 1s 570487150e-09 1s 1s 570489470e-09 0s 0s 570490990e-09 1s 1s 570497430e-09 1s 1s 570499710e-09 0s 0s 570501230e-09 1s 1s 570507710e-09 1s 1s 570509950e-09 0s 0s 570511470e-09 1s 1s 570517990e-09 1s 1s 570520190e-09 0s 0s 570521710e-09 1s 1s 570528270e-09 1s 1s 570530430e-09 0s 0s 570531950e-09 1s 1s 570538550e-09 1s 1s 570540670e-09 0s 0s 570542190e-09 1s 1s 570548830e-09 1s 1s 570550910e-09 0s 0s 570552430e-09 1s 1s 570559110e-09 1s 1s 570561150e-09 0s 0s 570562670e-09 1s 1s 570569390e-09 1s 1s 570571390e-09 0s 0s 570572910e-09 1s 1s 570579670e-09 1s 1s 570581630e-09 0s 0s 570583150e-09 1s 1s 570589950e-09 1s 1s 570591870e-09 0s 0s 570593390e-09 1s 1s 570600230e-09 1s 1s 570602110e-09 0s 0s 570603630e-09 1s 1s 570610510e-09 1s 1s 570612350e-09 0s 0s 570613870e-09 1s 1s 570620790e-09 1s 1s 570622590e-09 0s 0s 570624110e-09 1s 1s 570631070e-09 1s 1s 570632830e-09 0s 0s 570634350e-09 1s 1s 570641350e-09 1s 1s 570643070e-09 0s 0s 570644590e-09 1s 1s 570651630e-09 1s 1s 570653310e-09 0s 0s 570654830e-09 1s 1s 570661910e-09 1s 1s 570663550e-09 0s 0s 570665070e-09 1s 1s 570672190e-09 1s 1s 570673790e-09 0s 0s 570675310e-09 1s 1s 570682470e-09 1s 1s 570684030e-09 0s 0s 570685550e-09 1s 1s 570692750e-09 1s 1s 570694270e-09 0s 0s 570695790e-09 1s 1s 570703030e-09 1s 1s 570704510e-09 0s 0s 570706030e-09 1s 1s 570713310e-09 1s 1s 570714750e-09 0s 0s 570716270e-09 1s 1s 570723590e-09 1s 1s 570724990e-09 0s 0s 570726510e-09 1s 1s 570733870e-09 1s 1s 570735230e-09 0s 0s 570736750e-09 1s 1s 570744150e-09 1s 1s 570745470e-09 0s 0s 570746990e-09 1s 1s 570754430e-09 1s 1s 570755710e-09 0s 0s 570757230e-09 1s 1s 570764710e-09 1s 1s 570765950e-09 0s 0s 570767470e-09 1s 1s 570774990e-09 1s 1s 570776190e-09 0s 0s 570777710e-09 1s 1s 570785270e-09 1s 1s 570786430e-09 0s 0s 570787950e-09 1s 1s 570795550e-09 1s 1s 570796670e-09 0s 0s 570798190e-09 1s 1s 570805830e-09 1s 1s 570806910e-09 0s 0s 570808430e-09 1s 1s 570816110e-09 1s 1s 570817150e-09 0s 0s 570818670e-09 1s 1s 570826390e-09 1s 1s 570827390e-09 0s 0s 570828910e-09 1s 1s 570836670e-09 1s 1s 570837630e-09 0s 0s 570839150e-09 1s 1s 570846950e-09 1s 1s 570847870e-09 0s 0s 570849390e-09 1s 1s 570857230e-09 1s 1s 570858110e-09 0s 0s 570859630e-09 1s 1s 570867510e-09 1s 1s 570868350e-09 0s 0s 570869870e-09 1s 1s 570877790e-09 1s 1s 570878590e-09 0s 0s 570880110e-09 1s 1s 570888070e-09 1s 1s 570888830e-09 0s 0s 570890350e-09 1s 1s 570898350e-09 1s 1s 570899070e-09 0s 0s 570900590e-09 1s 1s 570908630e-09 1s 1s 570909310e-09 0s 0s 570910830e-09 1s 1s 570918910e-09 1s 1s 570919550e-09 0s 0s 570921070e-09 1s 1s 570929190e-09 1s 1s 570929790e-09 0s 0s 570931310e-09 1s 1s 570939470e-09 1s 1s 570940030e-09 0s 0s 570941550e-09 1s 1s 570949750e-09 1s 1s 570950270e-09 0s 0s 570951790e-09 1s 1s 570960030e-09 1s 1s 570960510e-09 0s 0s 570962030e-09 1s 1s 570970310e-09 1s 1s 570970750e-09 0s 0s 570972270e-09 1s 1s 570980590e-09 1s 1s 570980990e-09 0s 0s 570982510e-09 1s 1s 570990870e-09 1s 1s 570991230e-09 0s 0s 570992750e-09 1s 1s 571001150e-09 1s 1s 571001470e-09 0s 0s 571002990e-09 1s 1s 571011430e-09 1s 1s 571011710e-09 0s 0s 571013230e-09 1s 1s 571021710e-09 1s 1s 571021950e-09 0s 0s 571023470e-09 1s 1s 571031990e-09 1s 1s 571032190e-09 0s 0s 571033710e-09 1s 1s 571042270e-09 1s 1s 571042430e-09 0s 0s 571043950e-09 1s 1s 571052550e-09 1s 1s 571052670e-09 0s 0s 571054190e-09 1s 1s 571062830e-09 1s 1s 571062910e-09 0s 0s 571064430e-09 1s 1s 571073110e-09 1s 1s 571073150e-09 0s 0s 571074670e-09 1s 1s 571083390e-09 0s 0s 571084910e-09 1s 1s 571093630e-09 0s 0s 571093670e-09 0s 0s 571095150e-09 1s 1s 571103870e-09 0s 0s 571103950e-09 0s 0s 571105390e-09 1s 1s 571114110e-09 0s 0s 571114230e-09 0s 0s 571115630e-09 1s 1s 571124350e-09 0s 0s 571124510e-09 0s 0s 571125870e-09 1s 1s 571134590e-09 0s 0s 571134790e-09 0s 0s 571136110e-09 1s 1s 571144830e-09 0s 0s 571145070e-09 0s 0s 571146350e-09 1s 1s 571155070e-09 0s 0s 571155350e-09 0s 0s 571156590e-09 1s 1s 571165310e-09 0s 0s 571165630e-09 0s 0s 571166830e-09 1s 1s 571175550e-09 0s 0s 571175910e-09 0s 0s 571177070e-09 1s 1s 571185790e-09 0s 0s 571186190e-09 0s 0s 571187310e-09 1s 1s 571196030e-09 0s 0s 571196470e-09 0s 0s 571197550e-09 1s 1s 571206270e-09 0s 0s 571206750e-09 0s 0s 571207790e-09 1s 1s 571216510e-09 0s 0s 571217030e-09 0s 0s 571218030e-09 1s 1s 571226750e-09 0s 0s 571227310e-09 0s 0s 571228270e-09 1s 1s 571236990e-09 0s 0s 571237590e-09 0s 0s 571238510e-09 1s 1s 571247230e-09 0s 0s 571247870e-09 0s 0s 571248750e-09 1s 1s 571257470e-09 0s 0s 571258150e-09 0s 0s 571258990e-09 1s 1s 571267710e-09 0s 0s 571268430e-09 0s 0s 571269230e-09 1s 1s 571277950e-09 0s 0s 571278710e-09 0s 0s 571279470e-09 1s 1s 571288190e-09 0s 0s 571288990e-09 0s 0s 571289710e-09 1s 1s 571298430e-09 0s 0s 571299270e-09 0s 0s 571299950e-09 1s 1s 571308670e-09 0s 0s 571309550e-09 0s 0s 571310190e-09 1s 1s 571318910e-09 0s 0s 571319830e-09 0s 0s 571320430e-09 1s 1s 571329150e-09 0s 0s 571330110e-09 0s 0s 571330670e-09 1s 1s 571339390e-09 0s 0s 571340390e-09 0s 0s 571340910e-09 1s 1s 571349630e-09 0s 0s 571350670e-09 0s 0s 571351150e-09 1s 1s 571359870e-09 0s 0s 571360950e-09 0s 0s 571361390e-09 1s 1s 571370110e-09 0s 0s 571371230e-09 0s 0s 571371630e-09 1s 1s 571380350e-09 0s 0s 571381510e-09 0s 0s 571381870e-09 1s 1s 571390590e-09 0s 0s 571391790e-09 0s 0s 571392110e-09 1s 1s 571400830e-09 0s 0s 571402070e-09 0s 0s 571402350e-09 1s 1s 571411070e-09 0s 0s 571412350e-09 0s 0s 571412590e-09 1s 1s 571421310e-09 0s 0s 571422630e-09 0s 0s 571422830e-09 1s 1s 571431550e-09 0s 0s 571432910e-09 0s 0s 571433070e-09 1s 1s 571441790e-09 0s 0s 571443190e-09 0s 0s 571443310e-09 1s 1s 571452030e-09 0s 0s 571453470e-09 0s 0s 571453550e-09 1s 1s 571462270e-09 0s 0s 571463750e-09 0s 0s 571463790e-09 1s 1s 571472510e-09 0s 0s 571474030e-09 1s 1s 571474070e-09 1s 1s 571482790e-09 0s 0s 571484270e-09 1s 1s 571484350e-09 1s 1s 571493030e-09 0s 0s 571494510e-09 1s 1s 571494630e-09 1s 1s 571503270e-09 0s 0s 571504750e-09 1s 1s 571504910e-09 1s 1s 571513510e-09 0s 0s 571514990e-09 1s 1s 571515190e-09 1s 1s 571523750e-09 0s 0s 571525230e-09 1s 1s 571525470e-09 1s 1s 571533990e-09 0s 0s 571535470e-09 1s 1s 571535750e-09 1s 1s 571544230e-09 0s 0s 571545710e-09 1s 1s 571546030e-09 1s 1s 571554470e-09 0s 0s 571555950e-09 1s 1s 571556310e-09 1s 1s 571564710e-09 0s 0s 571566190e-09 1s 1s 571566590e-09 1s 1s 571574950e-09 0s 0s 571576430e-09 1s 1s 571576870e-09 1s 1s 571585190e-09 0s 0s 571586670e-09 1s 1s 571587150e-09 1s 1s 571595430e-09 0s 0s 571596910e-09 1s 1s 571597430e-09 1s 1s 571605670e-09 0s 0s 571607150e-09 1s 1s 571607710e-09 1s 1s 571615910e-09 0s 0s 571617390e-09 1s 1s 571617990e-09 1s 1s 571626150e-09 0s 0s 571627630e-09 1s 1s 571628270e-09 1s 1s 571636390e-09 0s 0s 571637870e-09 1s 1s 571638550e-09 1s 1s 571646630e-09 0s 0s 571648110e-09 1s 1s 571648830e-09 1s 1s 571656870e-09 0s 0s 571658350e-09 1s 1s 571659110e-09 1s 1s 571667110e-09 0s 0s 571668590e-09 1s 1s 571669390e-09 1s 1s 571677350e-09 0s 0s 571678830e-09 1s 1s 571679670e-09 1s 1s 571687590e-09 0s 0s 571689070e-09 1s 1s 571689950e-09 1s 1s 571697830e-09 0s 0s 571699310e-09 1s 1s 571700230e-09 1s 1s 571708070e-09 0s 0s 571709550e-09 1s 1s 571710510e-09 1s 1s 571718310e-09 0s 0s 571719790e-09 1s 1s 571720790e-09 1s 1s 571728550e-09 0s 0s 571730030e-09 1s 1s 571731070e-09 1s 1s 571738790e-09 0s 0s 571740270e-09 1s 1s 571741350e-09 1s 1s 571749030e-09 0s 0s 571750510e-09 1s 1s 571751630e-09 1s 1s 571759270e-09 0s 0s 571760750e-09 1s 1s 571761910e-09 1s 1s 571769510e-09 0s 0s 571770990e-09 1s 1s 571772190e-09 1s 1s 571779750e-09 0s 0s 571781230e-09 1s 1s 571782470e-09 1s 1s 571789990e-09 0s 0s 571791470e-09 1s 1s 571792750e-09 1s 1s 571800230e-09 0s 0s 571801710e-09 1s 1s 571803030e-09 1s 1s 571810470e-09 0s 0s 571811950e-09 1s 1s 571813310e-09 1s 1s 571820710e-09 0s 0s 571822190e-09 1s 1s 571823590e-09 1s 1s 571830950e-09 0s 0s 571832430e-09 1s 1s 571833870e-09 1s 1s 571841190e-09 0s 0s 571842670e-09 1s 1s 571844150e-09 1s 1s 571851430e-09 0s 0s 571852910e-09 1s 1s 571854430e-09 1s 1s 571861670e-09 0s 0s 571863150e-09 1s 1s 571864710e-09 1s 1s 571871910e-09 0s 0s 571873390e-09 1s 1s 571874990e-09 1s 1s 571882150e-09 0s 0s 571883630e-09 1s 1s 571885270e-09 1s 1s 571892390e-09 0s 0s 571893870e-09 1s 1s 571895550e-09 1s 1s 571902630e-09 0s 0s 571904110e-09 1s 1s 571905830e-09 1s 1s 571912870e-09 0s 0s 571914350e-09 1s 1s 571916110e-09 1s 1s 571923110e-09 0s 0s 571924590e-09 1s 1s 571926390e-09 1s 1s 571933350e-09 0s 0s 571934830e-09 1s 1s 571936670e-09 1s 1s 571943590e-09 0s 0s 571945070e-09 1s 1s 571946950e-09 1s 1s 571953830e-09 0s 0s 571955310e-09 1s 1s 571957230e-09 1s 1s 571964070e-09 0s 0s 571965550e-09 1s 1s 571967510e-09 1s 1s 571974310e-09 0s 0s 571975790e-09 1s 1s 571977790e-09 1s 1s 571984550e-09 0s 0s 571986030e-09 1s 1s 571988070e-09 1s 1s 571994790e-09 0s 0s 571996270e-09 1s 1s 571998350e-09 1s 1s 572005030e-09 0s 0s 572006510e-09 1s 1s 572008630e-09 1s 1s 572015270e-09 0s 0s 572016750e-09 1s 1s 572018910e-09 1s 1s 572025510e-09 0s 0s 572026990e-09 1s 1s 572029190e-09 1s 1s 572035750e-09 0s 0s 572037230e-09 1s 1s 572039470e-09 1s 1s 572045990e-09 0s 0s 572047470e-09 1s 1s 572049750e-09 1s 1s 572056230e-09 0s 0s 572057710e-09 1s 1s 572060030e-09 1s 1s 572066470e-09 0s 0s 572067950e-09 1s 1s 572070310e-09 1s 1s 572076710e-09 0s 0s 572078190e-09 1s 1s 572080590e-09 1s 1s 572086950e-09 0s 0s 572088430e-09 1s 1s 572090870e-09 1s 1s 572097190e-09 0s 0s 572098670e-09 1s 1s 572101150e-09 1s 1s 572107430e-09 0s 0s 572108910e-09 1s 1s 572111430e-09 1s 1s 572117670e-09 0s 0s 572119150e-09 1s 1s 572121710e-09 1s 1s 572127910e-09 0s 0s 572129390e-09 1s 1s 572131990e-09 1s 1s 572138150e-09 0s 0s 572139630e-09 1s 1s 572142270e-09 1s 1s 572148390e-09 0s 0s 572149870e-09 1s 1s 572152550e-09 1s 1s 572158630e-09 0s 0s 572160110e-09 1s 1s 572162830e-09 1s 1s 572168870e-09 0s 0s 572170350e-09 1s 1s 572173110e-09 1s 1s 572179110e-09 0s 0s 572180590e-09 1s 1s 572183390e-09 1s 1s 572189350e-09 0s 0s 572190830e-09 1s 1s 572193670e-09 1s 1s 572199590e-09 0s 0s 572201070e-09 1s 1s 572203950e-09 1s 1s 572209830e-09 0s 0s 572211310e-09 1s 1s 572214230e-09 1s 1s 572220070e-09 0s 0s 572221550e-09 1s 1s 572224510e-09 1s 1s 572230310e-09 0s 0s 572231790e-09 1s 1s 572234790e-09 1s 1s 572240550e-09 0s 0s 572242030e-09 1s 1s 572245070e-09 1s 1s 572250790e-09 0s 0s 572252270e-09 1s 1s 572255350e-09 1s 1s 572261030e-09 0s 0s 572262510e-09 1s 1s 572265630e-09 1s 1s 572271270e-09 0s 0s 572272750e-09 1s 1s 572275910e-09 1s 1s 572281510e-09 0s 0s 572282990e-09 1s 1s 572286190e-09 1s 1s 572291750e-09 0s 0s 572293230e-09 1s 1s 572296470e-09 1s 1s 572301990e-09 0s 0s 572303470e-09 1s 1s 572306750e-09 1s 1s 572312230e-09 0s 0s 572313710e-09 1s 1s 572317030e-09 1s 1s 572322470e-09 0s 0s 572323950e-09 1s 1s 572327310e-09 1s 1s 572332710e-09 0s 0s 572334190e-09 1s 1s 572337590e-09 1s 1s 572342950e-09 0s 0s 572344430e-09 1s 1s 572347870e-09 1s 1s 572353190e-09 0s 0s 572354670e-09 1s 1s 572358150e-09 1s 1s 572363430e-09 0s 0s 572364910e-09 1s 1s 572368430e-09 1s 1s 572373670e-09 0s 0s 572375150e-09 1s 1s 572378710e-09 1s 1s 572383910e-09 0s 0s 572385390e-09 1s 1s 572388990e-09 1s 1s 572394150e-09 0s 0s 572395630e-09 1s 1s 572399270e-09 1s 1s 572404390e-09 0s 0s 572405870e-09 1s 1s 572409550e-09 1s 1s 572414630e-09 0s 0s 572416110e-09 1s 1s 572419830e-09 1s 1s 572424870e-09 0s 0s 572426350e-09 1s 1s 572430110e-09 1s 1s 572435110e-09 0s 0s 572436590e-09 1s 1s 572440390e-09 1s 1s 572445350e-09 0s 0s 572446830e-09 1s 1s 572450670e-09 1s 1s 572455590e-09 0s 0s 572457070e-09 1s 1s 572460950e-09 1s 1s 572465830e-09 0s 0s 572467310e-09 1s 1s 572471230e-09 1s 1s 572476070e-09 0s 0s 572477550e-09 1s 1s 572481510e-09 1s 1s 572486310e-09 0s 0s 572487790e-09 1s 1s 572491790e-09 1s 1s 572496550e-09 0s 0s 572498030e-09 1s 1s 572502070e-09 1s 1s 572506790e-09 0s 0s 572508270e-09 1s 1s 572512350e-09 1s 1s 572517030e-09 0s 0s 572518510e-09 1s 1s 572522630e-09 1s 1s 572527270e-09 0s 0s 572528750e-09 1s 1s 572532910e-09 1s 1s 572537510e-09 0s 0s 572538990e-09 1s 1s 572543190e-09 1s 1s 572547750e-09 0s 0s 572549230e-09 1s 1s 572553470e-09 1s 1s 572557990e-09 0s 0s 572559470e-09 1s 1s 572563750e-09 1s 1s 572568230e-09 0s 0s 572569710e-09 1s 1s 572574030e-09 1s 1s 572578470e-09 0s 0s 572579950e-09 1s 1s 572584310e-09 1s 1s 572588710e-09 0s 0s 572590190e-09 1s 1s 572594590e-09 1s 1s 572598950e-09 0s 0s 572600430e-09 1s 1s 572604870e-09 1s 1s 572609190e-09 0s 0s 572610670e-09 1s 1s 572615150e-09 1s 1s 572619430e-09 0s 0s 572620910e-09 1s 1s 572625430e-09 1s 1s 572629670e-09 0s 0s 572631150e-09 1s 1s 572635710e-09 1s 1s 572639910e-09 0s 0s 572641390e-09 1s 1s 572645990e-09 1s 1s 572650150e-09 0s 0s 572651630e-09 1s 1s 572656270e-09 1s 1s 572660390e-09 0s 0s 572661870e-09 1s 1s 572666550e-09 1s 1s 572670630e-09 0s 0s 572672110e-09 1s 1s 572676830e-09 1s 1s 572680870e-09 0s 0s 572682350e-09 1s 1s 572687110e-09 1s 1s 572691110e-09 0s 0s 572692590e-09 1s 1s 572697390e-09 1s 1s 572701350e-09 0s 0s 572702830e-09 1s 1s 572707670e-09 1s 1s 572711590e-09 0s 0s 572713070e-09 1s 1s 572717950e-09 1s 1s 572721830e-09 0s 0s 572723310e-09 1s 1s 572728230e-09 1s 1s 572732070e-09 0s 0s 572733550e-09 1s 1s 572738510e-09 1s 1s 572742310e-09 0s 0s 572743790e-09 1s 1s 572748790e-09 1s 1s 572752550e-09 0s 0s 572754030e-09 1s 1s 572759070e-09 1s 1s 572762790e-09 0s 0s 572764270e-09 1s 1s 572769350e-09 1s 1s 572773030e-09 0s 0s 572774510e-09 1s 1s 572779630e-09 1s 1s 572783270e-09 0s 0s 572784750e-09 1s 1s 572789910e-09 1s 1s 572793510e-09 0s 0s 572794990e-09 1s 1s 572800190e-09 1s 1s 572803750e-09 0s 0s 572805230e-09 1s 1s 572810470e-09 1s 1s 572813990e-09 0s 0s 572815470e-09 1s 1s 572820750e-09 1s 1s 572824230e-09 0s 0s 572825710e-09 1s 1s 572831030e-09 1s 1s 572834470e-09 0s 0s 572835950e-09 1s 1s 572841310e-09 1s 1s 572844710e-09 0s 0s 572846190e-09 1s 1s 572851590e-09 1s 1s 572854950e-09 0s 0s 572856430e-09 1s 1s 572861870e-09 1s 1s 572865190e-09 0s 0s 572866670e-09 1s 1s 572872150e-09 1s 1s 572875430e-09 0s 0s 572876910e-09 1s 1s 572882430e-09 1s 1s 572885670e-09 0s 0s 572887150e-09 1s 1s 572892710e-09 1s 1s 572895910e-09 0s 0s 572897390e-09 1s 1s 572902990e-09 1s 1s 572906150e-09 0s 0s 572907630e-09 1s 1s 572913270e-09 1s 1s 572916390e-09 0s 0s 572917870e-09 1s 1s 572923550e-09 1s 1s 572926630e-09 0s 0s 572928110e-09 1s 1s 572933830e-09 1s 1s 572936870e-09 0s 0s 572938350e-09 1s 1s 572944110e-09 1s 1s 572947110e-09 0s 0s 572948590e-09 1s 1s 572954390e-09 1s 1s 572957350e-09 0s 0s 572958830e-09 1s 1s 572964670e-09 1s 1s 572967590e-09 0s 0s 572969070e-09 1s 1s 572974950e-09 1s 1s 572977830e-09 0s 0s 572979310e-09 1s 1s 572985230e-09 1s 1s 572988070e-09 0s 0s 572989550e-09 1s 1s 572995510e-09 1s 1s 572998310e-09 0s 0s 572999790e-09 1s 1s 573005790e-09 1s 1s 573008550e-09 0s 0s 573010030e-09 1s 1s 573016070e-09 1s 1s 573018790e-09 0s 0s 573020270e-09 1s 1s 573026350e-09 1s 1s 573029030e-09 0s 0s 573030510e-09 1s 1s 573036630e-09 1s 1s 573039270e-09 0s 0s 573040750e-09 1s 1s 573046910e-09 1s 1s 573049510e-09 0s 0s 573050990e-09 1s 1s 573057190e-09 1s 1s 573059750e-09 0s 0s 573061230e-09 1s 1s 573067470e-09 1s 1s 573069990e-09 0s 0s 573071470e-09 1s 1s 573077750e-09 1s 1s 573080230e-09 0s 0s 573081710e-09 1s 1s 573088030e-09 1s 1s 573090470e-09 0s 0s 573091950e-09 1s 1s 573098310e-09 1s 1s 573100710e-09 0s 0s 573102190e-09 1s 1s 573108590e-09 1s 1s 573110950e-09 0s 0s 573112430e-09 1s 1s 573118870e-09 1s 1s 573121190e-09 0s 0s 573122670e-09 1s 1s 573129150e-09 1s 1s 573131430e-09 0s 0s 573132910e-09 1s 1s 573139430e-09 1s 1s 573141670e-09 0s 0s 573143150e-09 1s 1s 573149710e-09 1s 1s 573151910e-09 0s 0s 573153390e-09 1s 1s 573159990e-09 1s 1s 573162150e-09 0s 0s 573163630e-09 1s 1s 573170270e-09 1s 1s 573172390e-09 0s 0s 573173870e-09 1s 1s 573180550e-09 1s 1s 573182630e-09 0s 0s 573184110e-09 1s 1s 573190830e-09 1s 1s 573192870e-09 0s 0s 573194350e-09 1s 1s 573201110e-09 1s 1s 573203110e-09 0s 0s 573204590e-09 1s 1s 573211390e-09 1s 1s 573213350e-09 0s 0s 573214830e-09 1s 1s 573221670e-09 1s 1s 573223590e-09 0s 0s 573225070e-09 1s 1s 573231950e-09 1s 1s 573233830e-09 0s 0s 573235310e-09 1s 1s 573242230e-09 1s 1s 573244070e-09 0s 0s 573245550e-09 1s 1s 573252510e-09 1s 1s 573254310e-09 0s 0s 573255790e-09 1s 1s 573262790e-09 1s 1s 573264550e-09 0s 0s 573266030e-09 1s 1s 573273070e-09 1s 1s 573274790e-09 0s 0s 573276270e-09 1s 1s 573283350e-09 1s 1s 573285030e-09 0s 0s 573286510e-09 1s 1s 573293630e-09 1s 1s 573295270e-09 0s 0s 573296750e-09 1s 1s 573303910e-09 1s 1s 573305510e-09 0s 0s 573306990e-09 1s 1s 573314190e-09 1s 1s 573315750e-09 0s 0s 573317230e-09 1s 1s 573324470e-09 1s 1s 573325990e-09 0s 0s 573327470e-09 1s 1s 573334750e-09 1s 1s 573336230e-09 0s 0s 573337710e-09 1s 1s 573345030e-09 1s 1s 573346470e-09 0s 0s 573347950e-09 1s 1s 573355310e-09 1s 1s 573356710e-09 0s 0s 573358190e-09 1s 1s 573365590e-09 1s 1s 573366950e-09 0s 0s 573368430e-09 1s 1s 573375870e-09 1s 1s 573377190e-09 0s 0s 573378670e-09 1s 1s 573386150e-09 1s 1s 573387430e-09 0s 0s 573388910e-09 1s 1s 573396430e-09 1s 1s 573397670e-09 0s 0s 573399150e-09 1s 1s 573406710e-09 1s 1s 573407910e-09 0s 0s 573409390e-09 1s 1s 573416990e-09 1s 1s 573418150e-09 0s 0s 573419630e-09 1s 1s 573427270e-09 1s 1s 573428390e-09 0s 0s 573429870e-09 1s 1s 573437550e-09 1s 1s 573438630e-09 0s 0s 573440110e-09 1s 1s 573447830e-09 1s 1s 573448870e-09 0s 0s 573450350e-09 1s 1s 573458110e-09 1s 1s 573459110e-09 0s 0s 573460590e-09 1s 1s 573468390e-09 1s 1s 573469350e-09 0s 0s 573470830e-09 1s 1s 573478670e-09 1s 1s 573479590e-09 0s 0s 573481070e-09 1s 1s 573488950e-09 1s 1s 573489830e-09 0s 0s 573491310e-09 1s 1s 573499230e-09 1s 1s 573500070e-09 0s 0s 573501550e-09 1s 1s 573509510e-09 1s 1s 573510310e-09 0s 0s 573511790e-09 1s 1s 573519790e-09 1s 1s 573520550e-09 0s 0s 573522030e-09 1s 1s 573530070e-09 1s 1s 573530790e-09 0s 0s 573532270e-09 1s 1s 573540350e-09 1s 1s 573541030e-09 0s 0s 573542510e-09 1s 1s 573550630e-09 1s 1s 573551270e-09 0s 0s 573552750e-09 1s 1s 573560910e-09 1s 1s 573561510e-09 0s 0s 573562990e-09 1s 1s 573571190e-09 1s 1s 573571750e-09 0s 0s 573573230e-09 1s 1s 573581470e-09 1s 1s 573581990e-09 0s 0s 573583470e-09 1s 1s 573591750e-09 1s 1s 573592230e-09 0s 0s 573593710e-09 1s 1s 573602030e-09 1s 1s 573602470e-09 0s 0s 573603950e-09 1s 1s 573612310e-09 1s 1s 573612710e-09 0s 0s 573614190e-09 1s 1s 573622590e-09 1s 1s 573622950e-09 0s 0s 573624430e-09 1s 1s 573632870e-09 1s 1s 573633190e-09 0s 0s 573634670e-09 1s 1s 573643150e-09 1s 1s 573643430e-09 0s 0s 573644910e-09 1s 1s 573653430e-09 1s 1s 573653670e-09 0s 0s 573655150e-09 1s 1s 573663710e-09 1s 1s 573663910e-09 0s 0s 573665390e-09 1s 1s 573673990e-09 1s 1s 573674150e-09 0s 0s 573675630e-09 1s 1s 573684270e-09 1s 1s 573684390e-09 0s 0s 573685870e-09 1s 1s 573694550e-09 1s 1s 573694630e-09 0s 0s 573696110e-09 1s 1s 573704830e-09 1s 1s 573704870e-09 0s 0s 573706350e-09 1s 1s 573715110e-09 0s 0s 573716590e-09 1s 1s 573725350e-09 0s 0s 573725390e-09 0s 0s 573726830e-09 1s 1s 573735590e-09 0s 0s 573735670e-09 0s 0s 573737070e-09 1s 1s 573745830e-09 0s 0s 573745950e-09 0s 0s 573747310e-09 1s 1s 573756070e-09 0s 0s 573756230e-09 0s 0s 573757550e-09 1s 1s 573766310e-09 0s 0s 573766510e-09 0s 0s 573767790e-09 1s 1s 573776550e-09 0s 0s 573776790e-09 0s 0s 573778030e-09 1s 1s 573786790e-09 0s 0s 573787070e-09 0s 0s 573788270e-09 1s 1s 573797030e-09 0s 0s 573797350e-09 0s 0s 573798510e-09 1s 1s 573807270e-09 0s 0s 573807630e-09 0s 0s 573808750e-09 1s 1s 573817510e-09 0s 0s 573817910e-09 0s 0s 573818990e-09 1s 1s 573827750e-09 0s 0s 573828190e-09 0s 0s 573829230e-09 1s 1s 573837990e-09 0s 0s 573838470e-09 0s 0s 573839470e-09 1s 1s 573848230e-09 0s 0s 573848750e-09 0s 0s 573849710e-09 1s 1s 573858470e-09 0s 0s 573859030e-09 0s 0s 573859950e-09 1s 1s 573868710e-09 0s 0s 573869310e-09 0s 0s 573870190e-09 1s 1s 573878950e-09 0s 0s 573879590e-09 0s 0s 573880430e-09 1s 1s 573889190e-09 0s 0s 573889870e-09 0s 0s 573890670e-09 1s 1s 573899430e-09 0s 0s 573900150e-09 0s 0s 573900910e-09 1s 1s 573909670e-09 0s 0s 573910430e-09 0s 0s 573911150e-09 1s 1s 573919910e-09 0s 0s 573920710e-09 0s 0s 573921390e-09 1s 1s 573930150e-09 0s 0s 573930990e-09 0s 0s 573931630e-09 1s 1s 573940390e-09 0s 0s 573941270e-09 0s 0s 573941870e-09 1s 1s 573950630e-09 0s 0s 573951550e-09 0s 0s 573952110e-09 1s 1s 573960870e-09 0s 0s 573961830e-09 0s 0s 573962350e-09 1s 1s 573971110e-09 0s 0s 573972110e-09 0s 0s 573972590e-09 1s 1s 573981350e-09 0s 0s 573982390e-09 0s 0s 573982830e-09 1s 1s 573991590e-09 0s 0s 573992670e-09 0s 0s 573993070e-09 1s 1s 574001830e-09 0s 0s 574002950e-09 0s 0s 574003310e-09 1s 1s 574012070e-09 0s 0s 574013230e-09 0s 0s 574013550e-09 1s 1s 574022310e-09 0s 0s 574023510e-09 0s 0s 574023790e-09 1s 1s 574032550e-09 0s 0s 574033790e-09 0s 0s 574034030e-09 1s 1s 574042790e-09 0s 0s 574044070e-09 0s 0s 574044270e-09 1s 1s 574053030e-09 0s 0s 574054350e-09 0s 0s 574054510e-09 1s 1s 574063270e-09 0s 0s 574064630e-09 0s 0s 574064750e-09 1s 1s 574073510e-09 0s 0s 574074910e-09 0s 0s 574074990e-09 1s 1s 574083750e-09 0s 0s 574085190e-09 0s 0s 574085230e-09 1s 1s 574093990e-09 0s 0s 574095470e-09 1s 1s 574095510e-09 1s 1s 574104270e-09 0s 0s 574105710e-09 1s 1s 574105790e-09 1s 1s 574114510e-09 0s 0s 574115950e-09 1s 1s 574116070e-09 1s 1s 574124750e-09 0s 0s 574126190e-09 1s 1s 574126350e-09 1s 1s 574134990e-09 0s 0s 574136430e-09 1s 1s 574136630e-09 1s 1s 574145230e-09 0s 0s 574146670e-09 1s 1s 574146910e-09 1s 1s 574155470e-09 0s 0s 574156910e-09 1s 1s 574157190e-09 1s 1s 574165710e-09 0s 0s 574167150e-09 1s 1s 574167470e-09 1s 1s 574175950e-09 0s 0s 574177390e-09 1s 1s 574177750e-09 1s 1s 574186190e-09 0s 0s 574187630e-09 1s 1s 574188030e-09 1s 1s 574196430e-09 0s 0s 574197870e-09 1s 1s 574198310e-09 1s 1s 574206670e-09 0s 0s 574208110e-09 1s 1s 574208590e-09 1s 1s 574216910e-09 0s 0s 574218350e-09 1s 1s 574218870e-09 1s 1s 574227150e-09 0s 0s 574228590e-09 1s 1s 574229150e-09 1s 1s 574237390e-09 0s 0s 574238830e-09 1s 1s 574239430e-09 1s 1s 574247630e-09 0s 0s 574249070e-09 1s 1s 574249710e-09 1s 1s 574257870e-09 0s 0s 574259310e-09 1s 1s 574259990e-09 1s 1s 574268110e-09 0s 0s 574269550e-09 1s 1s 574270270e-09 1s 1s 574278350e-09 0s 0s 574279790e-09 1s 1s 574280550e-09 1s 1s 574288590e-09 0s 0s 574290030e-09 1s 1s 574290830e-09 1s 1s 574298830e-09 0s 0s 574300270e-09 1s 1s 574301110e-09 1s 1s 574309070e-09 0s 0s 574310510e-09 1s 1s 574311390e-09 1s 1s 574319310e-09 0s 0s 574320750e-09 1s 1s 574321670e-09 1s 1s 574329550e-09 0s 0s 574330990e-09 1s 1s 574331950e-09 1s 1s 574339790e-09 0s 0s 574341230e-09 1s 1s 574342230e-09 1s 1s 574350030e-09 0s 0s 574351470e-09 1s 1s 574352510e-09 1s 1s 574360270e-09 0s 0s 574361710e-09 1s 1s 574362790e-09 1s 1s 574370510e-09 0s 0s 574371950e-09 1s 1s 574373070e-09 1s 1s 574380750e-09 0s 0s 574382190e-09 1s 1s 574383350e-09 1s 1s 574390990e-09 0s 0s 574392430e-09 1s 1s 574393630e-09 1s 1s 574401230e-09 0s 0s 574402670e-09 1s 1s 574403910e-09 1s 1s 574411470e-09 0s 0s 574412910e-09 1s 1s 574414190e-09 1s 1s 574421710e-09 0s 0s 574423150e-09 1s 1s 574424470e-09 1s 1s 574431950e-09 0s 0s 574433390e-09 1s 1s 574434750e-09 1s 1s 574442190e-09 0s 0s 574443630e-09 1s 1s 574445030e-09 1s 1s 574452430e-09 0s 0s 574453870e-09 1s 1s 574455310e-09 1s 1s 574462670e-09 0s 0s 574464110e-09 1s 1s 574465590e-09 1s 1s 574472910e-09 0s 0s 574474350e-09 1s 1s 574475870e-09 1s 1s 574483150e-09 0s 0s 574484590e-09 1s 1s 574486150e-09 1s 1s 574493390e-09 0s 0s 574494830e-09 1s 1s 574496430e-09 1s 1s 574503630e-09 0s 0s 574505070e-09 1s 1s 574506710e-09 1s 1s 574513870e-09 0s 0s 574515310e-09 1s 1s 574516990e-09 1s 1s 574524110e-09 0s 0s 574525550e-09 1s 1s 574527270e-09 1s 1s 574534350e-09 0s 0s 574535790e-09 1s 1s 574537550e-09 1s 1s 574544590e-09 0s 0s 574546030e-09 1s 1s 574547830e-09 1s 1s 574554830e-09 0s 0s 574556270e-09 1s 1s 574558110e-09 1s 1s 574565070e-09 0s 0s 574566510e-09 1s 1s 574568390e-09 1s 1s 574575310e-09 0s 0s 574576750e-09 1s 1s 574578670e-09 1s 1s 574585550e-09 0s 0s 574586990e-09 1s 1s 574588950e-09 1s 1s 574595790e-09 0s 0s 574597230e-09 1s 1s 574599230e-09 1s 1s 574606030e-09 0s 0s 574607470e-09 1s 1s 574609510e-09 1s 1s 574616270e-09 0s 0s 574617710e-09 1s 1s 574619790e-09 1s 1s 574626510e-09 0s 0s 574627950e-09 1s 1s 574630070e-09 1s 1s 574636750e-09 0s 0s 574638190e-09 1s 1s 574640350e-09 1s 1s 574646990e-09 0s 0s 574648430e-09 1s 1s 574650630e-09 1s 1s 574657230e-09 0s 0s 574658670e-09 1s 1s 574660910e-09 1s 1s 574667470e-09 0s 0s 574668910e-09 1s 1s 574671190e-09 1s 1s 574677710e-09 0s 0s 574679150e-09 1s 1s 574681470e-09 1s 1s 574687950e-09 0s 0s 574689390e-09 1s 1s 574691750e-09 1s 1s 574698190e-09 0s 0s 574699630e-09 1s 1s 574702030e-09 1s 1s 574708430e-09 0s 0s 574709870e-09 1s 1s 574712310e-09 1s 1s 574718670e-09 0s 0s 574720110e-09 1s 1s 574722590e-09 1s 1s 574728910e-09 0s 0s 574730350e-09 1s 1s 574732870e-09 1s 1s 574739150e-09 0s 0s 574740590e-09 1s 1s 574743150e-09 1s 1s 574749390e-09 0s 0s 574750830e-09 1s 1s 574753430e-09 1s 1s 574759630e-09 0s 0s 574761070e-09 1s 1s 574763710e-09 1s 1s 574769870e-09 0s 0s 574771310e-09 1s 1s 574773990e-09 1s 1s 574780110e-09 0s 0s 574781550e-09 1s 1s 574784270e-09 1s 1s 574790350e-09 0s 0s 574791790e-09 1s 1s 574794550e-09 1s 1s 574800590e-09 0s 0s 574802030e-09 1s 1s 574804830e-09 1s 1s 574810830e-09 0s 0s 574812270e-09 1s 1s 574815110e-09 1s 1s 574821070e-09 0s 0s 574822510e-09 1s 1s 574825390e-09 1s 1s 574831310e-09 0s 0s 574832750e-09 1s 1s 574835670e-09 1s 1s 574841550e-09 0s 0s 574842990e-09 1s 1s 574845950e-09 1s 1s 574851790e-09 0s 0s 574853230e-09 1s 1s 574856230e-09 1s 1s 574862030e-09 0s 0s 574863470e-09 1s 1s 574866510e-09 1s 1s 574872270e-09 0s 0s 574873710e-09 1s 1s 574876790e-09 1s 1s 574882510e-09 0s 0s 574883950e-09 1s 1s 574887070e-09 1s 1s 574892750e-09 0s 0s 574894190e-09 1s 1s 574897350e-09 1s 1s 574902990e-09 0s 0s 574904430e-09 1s 1s 574907630e-09 1s 1s 574913230e-09 0s 0s 574914670e-09 1s 1s 574917910e-09 1s 1s 574923470e-09 0s 0s 574924910e-09 1s 1s 574928190e-09 1s 1s 574933710e-09 0s 0s 574935150e-09 1s 1s 574938470e-09 1s 1s 574943950e-09 0s 0s 574945390e-09 1s 1s 574948750e-09 1s 1s 574954190e-09 0s 0s 574955630e-09 1s 1s 574959030e-09 1s 1s 574964430e-09 0s 0s 574965870e-09 1s 1s 574969310e-09 1s 1s 574974670e-09 0s 0s 574976110e-09 1s 1s 574979590e-09 1s 1s 574984910e-09 0s 0s 574986350e-09 1s 1s 574989870e-09 1s 1s 574995150e-09 0s 0s 574996590e-09 1s 1s 575000150e-09 1s 1s 575005390e-09 0s 0s 575006830e-09 1s 1s 575010430e-09 1s 1s 575015630e-09 0s 0s 575017070e-09 1s 1s 575020710e-09 1s 1s 575025870e-09 0s 0s 575027310e-09 1s 1s 575030990e-09 1s 1s 575036110e-09 0s 0s 575037550e-09 1s 1s 575041270e-09 1s 1s 575046350e-09 0s 0s 575047790e-09 1s 1s 575051550e-09 1s 1s 575056590e-09 0s 0s 575058030e-09 1s 1s 575061830e-09 1s 1s 575066830e-09 0s 0s 575068270e-09 1s 1s 575072110e-09 1s 1s 575077070e-09 0s 0s 575078510e-09 1s 1s 575082390e-09 1s 1s 575087310e-09 0s 0s 575088750e-09 1s 1s 575092670e-09 1s 1s 575097550e-09 0s 0s 575098990e-09 1s 1s 575102950e-09 1s 1s 575107790e-09 0s 0s 575109230e-09 1s 1s 575113230e-09 1s 1s 575118030e-09 0s 0s 575119470e-09 1s 1s 575123510e-09 1s 1s 575128270e-09 0s 0s 575129710e-09 1s 1s 575133790e-09 1s 1s 575138510e-09 0s 0s 575139950e-09 1s 1s 575144070e-09 1s 1s 575148750e-09 0s 0s 575150190e-09 1s 1s 575154350e-09 1s 1s 575158990e-09 0s 0s 575160430e-09 1s 1s 575164630e-09 1s 1s 575169230e-09 0s 0s 575170670e-09 1s 1s 575174910e-09 1s 1s 575179470e-09 0s 0s 575180910e-09 1s 1s 575185190e-09 1s 1s 575189710e-09 0s 0s 575191150e-09 1s 1s 575195470e-09 1s 1s 575199950e-09 0s 0s 575201390e-09 1s 1s 575205750e-09 1s 1s 575210190e-09 0s 0s 575211630e-09 1s 1s 575216030e-09 1s 1s 575220430e-09 0s 0s 575221870e-09 1s 1s 575226310e-09 1s 1s 575230670e-09 0s 0s 575232110e-09 1s 1s 575236590e-09 1s 1s 575240910e-09 0s 0s 575242350e-09 1s 1s 575246870e-09 1s 1s 575251150e-09 0s 0s 575252590e-09 1s 1s 575257150e-09 1s 1s 575261390e-09 0s 0s 575262830e-09 1s 1s 575267430e-09 1s 1s 575271630e-09 0s 0s 575273070e-09 1s 1s 575277710e-09 1s 1s 575281870e-09 0s 0s 575283310e-09 1s 1s 575287990e-09 1s 1s 575292110e-09 0s 0s 575293550e-09 1s 1s 575298270e-09 1s 1s 575302350e-09 0s 0s 575303790e-09 1s 1s 575308550e-09 1s 1s 575312590e-09 0s 0s 575314030e-09 1s 1s 575318830e-09 1s 1s 575322830e-09 0s 0s 575324270e-09 1s 1s 575329110e-09 1s 1s 575333070e-09 0s 0s 575334510e-09 1s 1s 575339390e-09 1s 1s 575343310e-09 0s 0s 575344750e-09 1s 1s 575349670e-09 1s 1s 575353550e-09 0s 0s 575354990e-09 1s 1s 575359950e-09 1s 1s 575363790e-09 0s 0s 575365230e-09 1s 1s 575370230e-09 1s 1s 575374030e-09 0s 0s 575375470e-09 1s 1s 575380510e-09 1s 1s 575384270e-09 0s 0s 575385710e-09 1s 1s 575390790e-09 1s 1s 575394510e-09 0s 0s 575395950e-09 1s 1s 575401070e-09 1s 1s 575404750e-09 0s 0s 575406190e-09 1s 1s 575411350e-09 1s 1s 575414990e-09 0s 0s 575416430e-09 1s 1s 575421630e-09 1s 1s 575425230e-09 0s 0s 575426670e-09 1s 1s 575431910e-09 1s 1s 575435470e-09 0s 0s 575436910e-09 1s 1s 575442190e-09 1s 1s 575445710e-09 0s 0s 575447150e-09 1s 1s 575452470e-09 1s 1s 575455950e-09 0s 0s 575457390e-09 1s 1s 575462750e-09 1s 1s 575466190e-09 0s 0s 575467630e-09 1s 1s 575473030e-09 1s 1s 575476430e-09 0s 0s 575477870e-09 1s 1s 575483310e-09 1s 1s 575486670e-09 0s 0s 575488110e-09 1s 1s 575493590e-09 1s 1s 575496910e-09 0s 0s 575498350e-09 1s 1s 575503870e-09 1s 1s 575507150e-09 0s 0s 575508590e-09 1s 1s 575514150e-09 1s 1s 575517390e-09 0s 0s 575518830e-09 1s 1s 575524430e-09 1s 1s 575527630e-09 0s 0s 575529070e-09 1s 1s 575534710e-09 1s 1s 575537870e-09 0s 0s 575539310e-09 1s 1s 575544990e-09 1s 1s 575548110e-09 0s 0s 575549550e-09 1s 1s 575555270e-09 1s 1s 575558350e-09 0s 0s 575559790e-09 1s 1s 575565550e-09 1s 1s 575568590e-09 0s 0s 575570030e-09 1s 1s 575575830e-09 1s 1s 575578830e-09 0s 0s 575580270e-09 1s 1s 575586110e-09 1s 1s 575589070e-09 0s 0s 575590510e-09 1s 1s 575596390e-09 1s 1s 575599310e-09 0s 0s 575600750e-09 1s 1s 575606670e-09 1s 1s 575609550e-09 0s 0s 575610990e-09 1s 1s 575616950e-09 1s 1s 575619790e-09 0s 0s 575621230e-09 1s 1s 575627230e-09 1s 1s 575630030e-09 0s 0s 575631470e-09 1s 1s 575637510e-09 1s 1s 575640270e-09 0s 0s 575641710e-09 1s 1s 575647790e-09 1s 1s 575650510e-09 0s 0s 575651950e-09 1s 1s 575658070e-09 1s 1s 575660750e-09 0s 0s 575662190e-09 1s 1s 575668350e-09 1s 1s 575670990e-09 0s 0s 575672430e-09 1s 1s 575678630e-09 1s 1s 575681230e-09 0s 0s 575682670e-09 1s 1s 575688910e-09 1s 1s 575691470e-09 0s 0s 575692910e-09 1s 1s 575699190e-09 1s 1s 575701710e-09 0s 0s 575703150e-09 1s 1s 575709470e-09 1s 1s 575711950e-09 0s 0s 575713390e-09 1s 1s 575719750e-09 1s 1s 575722190e-09 0s 0s 575723630e-09 1s 1s 575730030e-09 1s 1s 575732430e-09 0s 0s 575733870e-09 1s 1s 575740310e-09 1s 1s 575742670e-09 0s 0s 575744110e-09 1s 1s 575750590e-09 1s 1s 575752910e-09 0s 0s 575754350e-09 1s 1s 575760870e-09 1s 1s 575763150e-09 0s 0s 575764590e-09 1s 1s 575771150e-09 1s 1s 575773390e-09 0s 0s 575774830e-09 1s 1s 575781430e-09 1s 1s 575783630e-09 0s 0s 575785070e-09 1s 1s 575791710e-09 1s 1s 575793870e-09 0s 0s 575795310e-09 1s 1s 575801990e-09 1s 1s 575804110e-09 0s 0s 575805550e-09 1s 1s 575812270e-09 1s 1s 575814350e-09 0s 0s 575815790e-09 1s 1s 575822550e-09 1s 1s 575824590e-09 0s 0s 575826030e-09 1s 1s 575832830e-09 1s 1s 575834830e-09 0s 0s 575836270e-09 1s 1s 575843110e-09 1s 1s 575845070e-09 0s 0s 575846510e-09 1s 1s 575853390e-09 1s 1s 575855310e-09 0s 0s 575856750e-09 1s 1s 575863670e-09 1s 1s 575865550e-09 0s 0s 575866990e-09 1s 1s 575873950e-09 1s 1s 575875790e-09 0s 0s 575877230e-09 1s 1s 575884230e-09 1s 1s 575886030e-09 0s 0s 575887470e-09 1s 1s 575894510e-09 1s 1s 575896270e-09 0s 0s 575897710e-09 1s 1s 575904790e-09 1s 1s 575906510e-09 0s 0s 575907950e-09 1s 1s 575915070e-09 1s 1s 575916750e-09 0s 0s 575918190e-09 1s 1s 575925350e-09 1s 1s 575926990e-09 0s 0s 575928430e-09 1s 1s 575935630e-09 1s 1s 575937230e-09 0s 0s 575938670e-09 1s 1s 575945910e-09 1s 1s 575947470e-09 0s 0s 575948910e-09 1s 1s 575956190e-09 1s 1s 575957710e-09 0s 0s 575959150e-09 1s 1s 575966470e-09 1s 1s 575967950e-09 0s 0s 575969390e-09 1s 1s 575976750e-09 1s 1s 575978190e-09 0s 0s 575979630e-09 1s 1s 575987030e-09 1s 1s 575988430e-09 0s 0s 575989870e-09 1s 1s 575997310e-09 1s 1s 575998670e-09 0s 0s 576000110e-09 1s 1s 576007590e-09 1s 1s 576008910e-09 0s 0s 576010350e-09 1s 1s 576017870e-09 1s 1s 576019150e-09 0s 0s 576020590e-09 1s 1s 576028150e-09 1s 1s 576029390e-09 0s 0s 576030830e-09 1s 1s 576038430e-09 1s 1s 576039630e-09 0s 0s 576041070e-09 1s 1s 576048710e-09 1s 1s 576049870e-09 0s 0s 576051310e-09 1s 1s 576058990e-09 1s 1s 576060110e-09 0s 0s 576061550e-09 1s 1s 576069270e-09 1s 1s 576070350e-09 0s 0s 576071790e-09 1s 1s 576079550e-09 1s 1s 576080590e-09 0s 0s 576082030e-09 1s 1s 576089830e-09 1s 1s 576090830e-09 0s 0s 576092270e-09 1s 1s 576100110e-09 1s 1s 576101070e-09 0s 0s 576102510e-09 1s 1s 576110390e-09 1s 1s 576111310e-09 0s 0s 576112750e-09 1s 1s 576120670e-09 1s 1s 576121550e-09 0s 0s 576122990e-09 1s 1s 576130950e-09 1s 1s 576131790e-09 0s 0s 576133230e-09 1s 1s 576141230e-09 1s 1s 576142030e-09 0s 0s 576143470e-09 1s 1s 576151510e-09 1s 1s 576152270e-09 0s 0s 576153710e-09 1s 1s 576161790e-09 1s 1s 576162510e-09 0s 0s 576163950e-09 1s 1s 576172070e-09 1s 1s 576172750e-09 0s 0s 576174190e-09 1s 1s 576182350e-09 1s 1s 576182990e-09 0s 0s 576184430e-09 1s 1s 576192630e-09 1s 1s 576193230e-09 0s 0s 576194670e-09 1s 1s 576202910e-09 1s 1s 576203470e-09 0s 0s 576204910e-09 1s 1s 576213190e-09 1s 1s 576213710e-09 0s 0s 576215150e-09 1s 1s 576223470e-09 1s 1s 576223950e-09 0s 0s 576225390e-09 1s 1s 576233750e-09 1s 1s 576234190e-09 0s 0s 576235630e-09 1s 1s 576244030e-09 1s 1s 576244430e-09 0s 0s 576245870e-09 1s 1s 576254310e-09 1s 1s 576254670e-09 0s 0s 576256110e-09 1s 1s 576264590e-09 1s 1s 576264910e-09 0s 0s 576266350e-09 1s 1s 576274870e-09 1s 1s 576275150e-09 0s 0s 576276590e-09 1s 1s 576285150e-09 1s 1s 576285390e-09 0s 0s 576286830e-09 1s 1s 576295430e-09 1s 1s 576295630e-09 0s 0s 576297070e-09 1s 1s 576305710e-09 1s 1s 576305870e-09 0s 0s 576307310e-09 1s 1s 576315990e-09 1s 1s 576316110e-09 0s 0s 576317550e-09 1s 1s 576326270e-09 1s 1s 576326350e-09 0s 0s 576327790e-09 1s 1s 576336550e-09 1s 1s 576336590e-09 0s 0s 576338030e-09 1s 1s 576346830e-09 0s 0s 576348270e-09 1s 1s 576357070e-09 0s 0s 576357110e-09 0s 0s 576358510e-09 1s 1s 576367310e-09 0s 0s 576367390e-09 0s 0s 576368750e-09 1s 1s 576377550e-09 0s 0s 576377670e-09 0s 0s 576378990e-09 1s 1s 576387790e-09 0s 0s 576387950e-09 0s 0s 576389230e-09 1s 1s 576398030e-09 0s 0s 576398230e-09 0s 0s 576399470e-09 1s 1s 576408270e-09 0s 0s 576408510e-09 0s 0s 576409710e-09 1s 1s 576418510e-09 0s 0s 576418790e-09 0s 0s 576419950e-09 1s 1s 576428750e-09 0s 0s 576429070e-09 0s 0s 576430190e-09 1s 1s 576438990e-09 0s 0s 576439350e-09 0s 0s 576440430e-09 1s 1s 576449230e-09 0s 0s 576449630e-09 0s 0s 576450670e-09 1s 1s 576459470e-09 0s 0s 576459910e-09 0s 0s 576460910e-09 1s 1s 576469710e-09 0s 0s 576470190e-09 0s 0s 576471150e-09 1s 1s 576479950e-09 0s 0s 576480470e-09 0s 0s 576481390e-09 1s 1s 576490190e-09 0s 0s 576490750e-09 0s 0s 576491630e-09 1s 1s 576500430e-09 0s 0s 576501030e-09 0s 0s 576501870e-09 1s 1s 576510670e-09 0s 0s 576511310e-09 0s 0s 576512110e-09 1s 1s 576520910e-09 0s 0s 576521590e-09 0s 0s 576522350e-09 1s 1s 576531150e-09 0s 0s 576531870e-09 0s 0s 576532590e-09 1s 1s 576541390e-09 0s 0s 576542150e-09 0s 0s 576542830e-09 1s 1s 576551630e-09 0s 0s 576552430e-09 0s 0s 576553070e-09 1s 1s 576561870e-09 0s 0s 576562710e-09 0s 0s 576563310e-09 1s 1s 576572110e-09 0s 0s 576572990e-09 0s 0s 576573550e-09 1s 1s 576582350e-09 0s 0s 576583270e-09 0s 0s 576583790e-09 1s 1s 576592590e-09 0s 0s 576593550e-09 0s 0s 576594030e-09 1s 1s 576602830e-09 0s 0s 576603830e-09 0s 0s 576604270e-09 1s 1s 576613070e-09 0s 0s 576614110e-09 0s 0s 576614510e-09 1s 1s 576623310e-09 0s 0s 576624390e-09 0s 0s 576624750e-09 1s 1s 576633550e-09 0s 0s 576634670e-09 0s 0s 576634990e-09 1s 1s 576643790e-09 0s 0s 576644950e-09 0s 0s 576645230e-09 1s 1s 576654030e-09 0s 0s 576655230e-09 0s 0s 576655470e-09 1s 1s 576664270e-09 0s 0s 576665510e-09 0s 0s 576665710e-09 1s 1s 576674510e-09 0s 0s 576675790e-09 0s 0s 576675950e-09 1s 1s 576684750e-09 0s 0s 576686070e-09 0s 0s 576686190e-09 1s 1s 576694990e-09 0s 0s 576696350e-09 0s 0s 576696430e-09 1s 1s 576705230e-09 0s 0s 576706630e-09 0s 0s 576706670e-09 1s 1s 576715470e-09 0s 0s 576716910e-09 1s 1s 576716950e-09 1s 1s 576725750e-09 0s 0s 576727150e-09 1s 1s 576727230e-09 1s 1s 576735990e-09 0s 0s 576737390e-09 1s 1s 576737510e-09 1s 1s 576746230e-09 0s 0s 576747630e-09 1s 1s 576747790e-09 1s 1s 576756470e-09 0s 0s 576757870e-09 1s 1s 576758070e-09 1s 1s 576766710e-09 0s 0s 576768110e-09 1s 1s 576768350e-09 1s 1s 576776950e-09 0s 0s 576778350e-09 1s 1s 576778630e-09 1s 1s 576787190e-09 0s 0s 576788590e-09 1s 1s 576788910e-09 1s 1s 576797430e-09 0s 0s 576798830e-09 1s 1s 576799190e-09 1s 1s 576807670e-09 0s 0s 576809070e-09 1s 1s 576809470e-09 1s 1s 576817910e-09 0s 0s 576819310e-09 1s 1s 576819750e-09 1s 1s 576828150e-09 0s 0s 576829550e-09 1s 1s 576830030e-09 1s 1s 576838390e-09 0s 0s 576839790e-09 1s 1s 576840310e-09 1s 1s 576848630e-09 0s 0s 576850030e-09 1s 1s 576850590e-09 1s 1s 576858870e-09 0s 0s 576860270e-09 1s 1s 576860870e-09 1s 1s 576869110e-09 0s 0s 576870510e-09 1s 1s 576871150e-09 1s 1s 576879350e-09 0s 0s 576880750e-09 1s 1s 576881430e-09 1s 1s 576889590e-09 0s 0s 576890990e-09 1s 1s 576891710e-09 1s 1s 576899830e-09 0s 0s 576901230e-09 1s 1s 576901990e-09 1s 1s 576910070e-09 0s 0s 576911470e-09 1s 1s 576912270e-09 1s 1s 576920310e-09 0s 0s 576921710e-09 1s 1s 576922550e-09 1s 1s 576930550e-09 0s 0s 576931950e-09 1s 1s 576932830e-09 1s 1s 576940790e-09 0s 0s 576942190e-09 1s 1s 576943110e-09 1s 1s 576951030e-09 0s 0s 576952430e-09 1s 1s 576953390e-09 1s 1s 576961270e-09 0s 0s 576962670e-09 1s 1s 576963670e-09 1s 1s 576971510e-09 0s 0s 576972910e-09 1s 1s 576973950e-09 1s 1s 576981750e-09 0s 0s 576983150e-09 1s 1s 576984230e-09 1s 1s 576991990e-09 0s 0s 576993390e-09 1s 1s 576994510e-09 1s 1s 577002230e-09 0s 0s 577003630e-09 1s 1s 577004790e-09 1s 1s 577012470e-09 0s 0s 577013870e-09 1s 1s 577015070e-09 1s 1s 577022710e-09 0s 0s 577024110e-09 1s 1s 577025350e-09 1s 1s 577032950e-09 0s 0s 577034350e-09 1s 1s 577035630e-09 1s 1s 577043190e-09 0s 0s 577044590e-09 1s 1s 577045910e-09 1s 1s 577053430e-09 0s 0s 577054830e-09 1s 1s 577056190e-09 1s 1s 577063670e-09 0s 0s 577065070e-09 1s 1s 577066470e-09 1s 1s 577073910e-09 0s 0s 577075310e-09 1s 1s 577076750e-09 1s 1s 577084150e-09 0s 0s 577085550e-09 1s 1s 577087030e-09 1s 1s 577094390e-09 0s 0s 577095790e-09 1s 1s 577097310e-09 1s 1s 577104630e-09 0s 0s 577106030e-09 1s 1s 577107590e-09 1s 1s 577114870e-09 0s 0s 577116270e-09 1s 1s 577117870e-09 1s 1s 577125110e-09 0s 0s 577126510e-09 1s 1s 577128150e-09 1s 1s 577135350e-09 0s 0s 577136750e-09 1s 1s 577138430e-09 1s 1s 577145590e-09 0s 0s 577146990e-09 1s 1s 577148710e-09 1s 1s 577155830e-09 0s 0s 577157230e-09 1s 1s 577158990e-09 1s 1s 577166070e-09 0s 0s 577167470e-09 1s 1s 577169270e-09 1s 1s 577176310e-09 0s 0s 577177710e-09 1s 1s 577179550e-09 1s 1s 577186550e-09 0s 0s 577187950e-09 1s 1s 577189830e-09 1s 1s 577196790e-09 0s 0s 577198190e-09 1s 1s 577200110e-09 1s 1s 577207030e-09 0s 0s 577208430e-09 1s 1s 577210390e-09 1s 1s 577217270e-09 0s 0s 577218670e-09 1s 1s 577220670e-09 1s 1s 577227510e-09 0s 0s 577228910e-09 1s 1s 577230950e-09 1s 1s 577237750e-09 0s 0s 577239150e-09 1s 1s 577241230e-09 1s 1s 577247990e-09 0s 0s 577249390e-09 1s 1s 577251510e-09 1s 1s 577258230e-09 0s 0s 577259630e-09 1s 1s 577261790e-09 1s 1s 577268470e-09 0s 0s 577269870e-09 1s 1s 577272070e-09 1s 1s 577278710e-09 0s 0s 577280110e-09 1s 1s 577282350e-09 1s 1s 577288950e-09 0s 0s 577290350e-09 1s 1s 577292630e-09 1s 1s 577299190e-09 0s 0s 577300590e-09 1s 1s 577302910e-09 1s 1s 577309430e-09 0s 0s 577310830e-09 1s 1s 577313190e-09 1s 1s 577319670e-09 0s 0s 577321070e-09 1s 1s 577323470e-09 1s 1s 577329910e-09 0s 0s 577331310e-09 1s 1s 577333750e-09 1s 1s 577340150e-09 0s 0s 577341550e-09 1s 1s 577344030e-09 1s 1s 577350390e-09 0s 0s 577351790e-09 1s 1s 577354310e-09 1s 1s 577360630e-09 0s 0s 577362030e-09 1s 1s 577364590e-09 1s 1s 577370870e-09 0s 0s 577372270e-09 1s 1s 577374870e-09 1s 1s 577381110e-09 0s 0s 577382510e-09 1s 1s 577385150e-09 1s 1s 577391350e-09 0s 0s 577392750e-09 1s 1s 577395430e-09 1s 1s 577401590e-09 0s 0s 577402990e-09 1s 1s 577405710e-09 1s 1s 577411830e-09 0s 0s 577413230e-09 1s 1s 577415990e-09 1s 1s 577422070e-09 0s 0s 577423470e-09 1s 1s 577426270e-09 1s 1s 577432310e-09 0s 0s 577433710e-09 1s 1s 577436550e-09 1s 1s 577442550e-09 0s 0s 577443950e-09 1s 1s 577446830e-09 1s 1s 577452790e-09 0s 0s 577454190e-09 1s 1s 577457110e-09 1s 1s 577463030e-09 0s 0s 577464430e-09 1s 1s 577467390e-09 1s 1s 577473270e-09 0s 0s 577474670e-09 1s 1s 577477670e-09 1s 1s 577483510e-09 0s 0s 577484910e-09 1s 1s 577487950e-09 1s 1s 577493750e-09 0s 0s 577495150e-09 1s 1s 577498230e-09 1s 1s 577503990e-09 0s 0s 577505390e-09 1s 1s 577508510e-09 1s 1s 577514230e-09 0s 0s 577515630e-09 1s 1s 577518790e-09 1s 1s 577524470e-09 0s 0s 577525870e-09 1s 1s 577529070e-09 1s 1s 577534710e-09 0s 0s 577536110e-09 1s 1s 577539350e-09 1s 1s 577544950e-09 0s 0s 577546350e-09 1s 1s 577549630e-09 1s 1s 577555190e-09 0s 0s 577556590e-09 1s 1s 577559910e-09 1s 1s 577565430e-09 0s 0s 577566830e-09 1s 1s 577570190e-09 1s 1s 577575670e-09 0s 0s 577577070e-09 1s 1s 577580470e-09 1s 1s 577585910e-09 0s 0s 577587310e-09 1s 1s 577590750e-09 1s 1s 577596150e-09 0s 0s 577597550e-09 1s 1s 577601030e-09 1s 1s 577606390e-09 0s 0s 577607790e-09 1s 1s 577611310e-09 1s 1s 577616630e-09 0s 0s 577618030e-09 1s 1s 577621590e-09 1s 1s 577626870e-09 0s 0s 577628270e-09 1s 1s 577631870e-09 1s 1s 577637110e-09 0s 0s 577638510e-09 1s 1s 577642150e-09 1s 1s 577647350e-09 0s 0s 577648750e-09 1s 1s 577652430e-09 1s 1s 577657590e-09 0s 0s 577658990e-09 1s 1s 577662710e-09 1s 1s 577667830e-09 0s 0s 577669230e-09 1s 1s 577672990e-09 1s 1s 577678070e-09 0s 0s 577679470e-09 1s 1s 577683270e-09 1s 1s 577688310e-09 0s 0s 577689710e-09 1s 1s 577693550e-09 1s 1s 577698550e-09 0s 0s 577699950e-09 1s 1s 577703830e-09 1s 1s 577708790e-09 0s 0s 577710190e-09 1s 1s 577714110e-09 1s 1s 577719030e-09 0s 0s 577720430e-09 1s 1s 577724390e-09 1s 1s 577729270e-09 0s 0s 577730670e-09 1s 1s 577734670e-09 1s 1s 577739510e-09 0s 0s 577740910e-09 1s 1s 577744950e-09 1s 1s 577749750e-09 0s 0s 577751150e-09 1s 1s 577755230e-09 1s 1s 577759990e-09 0s 0s 577761390e-09 1s 1s 577765510e-09 1s 1s 577770230e-09 0s 0s 577771630e-09 1s 1s 577775790e-09 1s 1s 577780470e-09 0s 0s 577781870e-09 1s 1s 577786070e-09 1s 1s 577790710e-09 0s 0s 577792110e-09 1s 1s 577796350e-09 1s 1s 577800950e-09 0s 0s 577802350e-09 1s 1s 577806630e-09 1s 1s 577811190e-09 0s 0s 577812590e-09 1s 1s 577816910e-09 1s 1s 577821430e-09 0s 0s 577822830e-09 1s 1s 577827190e-09 1s 1s 577831670e-09 0s 0s 577833070e-09 1s 1s 577837470e-09 1s 1s 577841910e-09 0s 0s 577843310e-09 1s 1s 577847750e-09 1s 1s 577852150e-09 0s 0s 577853550e-09 1s 1s 577858030e-09 1s 1s 577862390e-09 0s 0s 577863790e-09 1s 1s 577868310e-09 1s 1s 577872630e-09 0s 0s 577874030e-09 1s 1s 577878590e-09 1s 1s 577882870e-09 0s 0s 577884270e-09 1s 1s 577888870e-09 1s 1s 577893110e-09 0s 0s 577894510e-09 1s 1s 577899150e-09 1s 1s 577903350e-09 0s 0s 577904750e-09 1s 1s 577909430e-09 1s 1s 577913590e-09 0s 0s 577914990e-09 1s 1s 577919710e-09 1s 1s 577923830e-09 0s 0s 577925230e-09 1s 1s 577929990e-09 1s 1s 577934070e-09 0s 0s 577935470e-09 1s 1s 577940270e-09 1s 1s 577944310e-09 0s 0s 577945710e-09 1s 1s 577950550e-09 1s 1s 577954550e-09 0s 0s 577955950e-09 1s 1s 577960830e-09 1s 1s 577964790e-09 0s 0s 577966190e-09 1s 1s 577971110e-09 1s 1s 577975030e-09 0s 0s 577976430e-09 1s 1s 577981390e-09 1s 1s 577985270e-09 0s 0s 577986670e-09 1s 1s 577991670e-09 1s 1s 577995510e-09 0s 0s 577996910e-09 1s 1s 578001950e-09 1s 1s 578005750e-09 0s 0s 578007150e-09 1s 1s 578012230e-09 1s 1s 578015990e-09 0s 0s 578017390e-09 1s 1s 578022510e-09 1s 1s 578026230e-09 0s 0s 578027630e-09 1s 1s 578032790e-09 1s 1s 578036470e-09 0s 0s 578037870e-09 1s 1s 578043070e-09 1s 1s 578046710e-09 0s 0s 578048110e-09 1s 1s 578053350e-09 1s 1s 578056950e-09 0s 0s 578058350e-09 1s 1s 578063630e-09 1s 1s 578067190e-09 0s 0s 578068590e-09 1s 1s 578073910e-09 1s 1s 578077430e-09 0s 0s 578078830e-09 1s 1s 578084190e-09 1s 1s 578087670e-09 0s 0s 578089070e-09 1s 1s 578094470e-09 1s 1s 578097910e-09 0s 0s 578099310e-09 1s 1s 578104750e-09 1s 1s 578108150e-09 0s 0s 578109550e-09 1s 1s 578115030e-09 1s 1s 578118390e-09 0s 0s 578119790e-09 1s 1s 578125310e-09 1s 1s 578128630e-09 0s 0s 578130030e-09 1s 1s 578135590e-09 1s 1s 578138870e-09 0s 0s 578140270e-09 1s 1s 578145870e-09 1s 1s 578149110e-09 0s 0s 578150510e-09 1s 1s 578156150e-09 1s 1s 578159350e-09 0s 0s 578160750e-09 1s 1s 578166430e-09 1s 1s 578169590e-09 0s 0s 578170990e-09 1s 1s 578176710e-09 1s 1s 578179830e-09 0s 0s 578181230e-09 1s 1s 578186990e-09 1s 1s 578190070e-09 0s 0s 578191470e-09 1s 1s 578197270e-09 1s 1s 578200310e-09 0s 0s 578201710e-09 1s 1s 578207550e-09 1s 1s 578210550e-09 0s 0s 578211950e-09 1s 1s 578217830e-09 1s 1s 578220790e-09 0s 0s 578222190e-09 1s 1s 578228110e-09 1s 1s 578231030e-09 0s 0s 578232430e-09 1s 1s 578238390e-09 1s 1s 578241270e-09 0s 0s 578242670e-09 1s 1s 578248670e-09 1s 1s 578251510e-09 0s 0s 578252910e-09 1s 1s 578258950e-09 1s 1s 578261750e-09 0s 0s 578263150e-09 1s 1s 578269230e-09 1s 1s 578271990e-09 0s 0s 578273390e-09 1s 1s 578279510e-09 1s 1s 578282230e-09 0s 0s 578283630e-09 1s 1s 578289790e-09 1s 1s 578292470e-09 0s 0s 578293870e-09 1s 1s 578300070e-09 1s 1s 578302710e-09 0s 0s 578304110e-09 1s 1s 578310350e-09 1s 1s 578312950e-09 0s 0s 578314350e-09 1s 1s 578320630e-09 1s 1s 578323190e-09 0s 0s 578324590e-09 1s 1s 578330910e-09 1s 1s 578333430e-09 0s 0s 578334830e-09 1s 1s 578341190e-09 1s 1s 578343670e-09 0s 0s 578345070e-09 1s 1s 578351470e-09 1s 1s 578353910e-09 0s 0s 578355310e-09 1s 1s 578361750e-09 1s 1s 578364150e-09 0s 0s 578365550e-09 1s 1s 578372030e-09 1s 1s 578374390e-09 0s 0s 578375790e-09 1s 1s 578382310e-09 1s 1s 578384630e-09 0s 0s 578386030e-09 1s 1s 578392590e-09 1s 1s 578394870e-09 0s 0s 578396270e-09 1s 1s 578402870e-09 1s 1s 578405110e-09 0s 0s 578406510e-09 1s 1s 578413150e-09 1s 1s 578415350e-09 0s 0s 578416750e-09 1s 1s 578423430e-09 1s 1s 578425590e-09 0s 0s 578426990e-09 1s 1s 578433710e-09 1s 1s 578435830e-09 0s 0s 578437230e-09 1s 1s 578443990e-09 1s 1s 578446070e-09 0s 0s 578447470e-09 1s 1s 578454270e-09 1s 1s 578456310e-09 0s 0s 578457710e-09 1s 1s 578464550e-09 1s 1s 578466550e-09 0s 0s 578467950e-09 1s 1s 578474830e-09 1s 1s 578476790e-09 0s 0s 578478190e-09 1s 1s 578485110e-09 1s 1s 578487030e-09 0s 0s 578488430e-09 1s 1s 578495390e-09 1s 1s 578497270e-09 0s 0s 578498670e-09 1s 1s 578505670e-09 1s 1s 578507510e-09 0s 0s 578508910e-09 1s 1s 578515950e-09 1s 1s 578517750e-09 0s 0s 578519150e-09 1s 1s 578526230e-09 1s 1s 578527990e-09 0s 0s 578529390e-09 1s 1s 578536510e-09 1s 1s 578538230e-09 0s 0s 578539630e-09 1s 1s 578546790e-09 1s 1s 578548470e-09 0s 0s 578549870e-09 1s 1s 578557070e-09 1s 1s 578558710e-09 0s 0s 578560110e-09 1s 1s 578567350e-09 1s 1s 578568950e-09 0s 0s 578570350e-09 1s 1s 578577630e-09 1s 1s 578579190e-09 0s 0s 578580590e-09 1s 1s 578587910e-09 1s 1s 578589430e-09 0s 0s 578590830e-09 1s 1s 578598190e-09 1s 1s 578599670e-09 0s 0s 578601070e-09 1s 1s 578608470e-09 1s 1s 578609910e-09 0s 0s 578611310e-09 1s 1s 578618750e-09 1s 1s 578620150e-09 0s 0s 578621550e-09 1s 1s 578629030e-09 1s 1s 578630390e-09 0s 0s 578631790e-09 1s 1s 578639310e-09 1s 1s 578640630e-09 0s 0s 578642030e-09 1s 1s 578649590e-09 1s 1s 578650870e-09 0s 0s 578652270e-09 1s 1s 578659870e-09 1s 1s 578661110e-09 0s 0s 578662510e-09 1s 1s 578670150e-09 1s 1s 578671350e-09 0s 0s 578672750e-09 1s 1s 578680430e-09 1s 1s 578681590e-09 0s 0s 578682990e-09 1s 1s 578690710e-09 1s 1s 578691830e-09 0s 0s 578693230e-09 1s 1s 578700990e-09 1s 1s 578702070e-09 0s 0s 578703470e-09 1s 1s 578711270e-09 1s 1s 578712310e-09 0s 0s 578713710e-09 1s 1s 578721550e-09 1s 1s 578722550e-09 0s 0s 578723950e-09 1s 1s 578731830e-09 1s 1s 578732790e-09 0s 0s 578734190e-09 1s 1s 578742110e-09 1s 1s 578743030e-09 0s 0s 578744430e-09 1s 1s 578752390e-09 1s 1s 578753270e-09 0s 0s 578754670e-09 1s 1s 578762670e-09 1s 1s 578763510e-09 0s 0s 578764910e-09 1s 1s 578772950e-09 1s 1s 578773750e-09 0s 0s 578775150e-09 1s 1s 578783230e-09 1s 1s 578783990e-09 0s 0s 578785390e-09 1s 1s 578793510e-09 1s 1s 578794230e-09 0s 0s 578795630e-09 1s 1s 578803790e-09 1s 1s 578804470e-09 0s 0s 578805870e-09 1s 1s 578814070e-09 1s 1s 578814710e-09 0s 0s 578816110e-09 1s 1s 578824350e-09 1s 1s 578824950e-09 0s 0s 578826350e-09 1s 1s 578834630e-09 1s 1s 578835190e-09 0s 0s 578836590e-09 1s 1s 578844910e-09 1s 1s 578845430e-09 0s 0s 578846830e-09 1s 1s 578855190e-09 1s 1s 578855670e-09 0s 0s 578857070e-09 1s 1s 578865470e-09 1s 1s 578865910e-09 0s 0s 578867310e-09 1s 1s 578875750e-09 1s 1s 578876150e-09 0s 0s 578877550e-09 1s 1s 578886030e-09 1s 1s 578886390e-09 0s 0s 578887790e-09 1s 1s 578896310e-09 1s 1s 578896630e-09 0s 0s 578898030e-09 1s 1s 578906590e-09 1s 1s 578906870e-09 0s 0s 578908270e-09 1s 1s 578916870e-09 1s 1s 578917110e-09 0s 0s 578918510e-09 1s 1s 578927150e-09 1s 1s 578927350e-09 0s 0s 578928750e-09 1s 1s 578937430e-09 1s 1s 578937590e-09 0s 0s 578938990e-09 1s 1s 578947710e-09 1s 1s 578947830e-09 0s 0s 578949230e-09 1s 1s 578957990e-09 1s 1s 578958070e-09 0s 0s 578959470e-09 1s 1s 578968270e-09 1s 1s 578968310e-09 0s 0s 578969710e-09 1s 1s 578978550e-09 0s 0s 578979950e-09 1s 1s 578988790e-09 0s 0s 578988830e-09 0s 0s 578990190e-09 1s 1s 578999030e-09 0s 0s 578999110e-09 0s 0s 579000430e-09 1s 1s 579009270e-09 0s 0s 579009390e-09 0s 0s 579010670e-09 1s 1s 579019510e-09 0s 0s 579019670e-09 0s 0s 579020910e-09 1s 1s 579029750e-09 0s 0s 579029950e-09 0s 0s 579031150e-09 1s 1s 579039990e-09 0s 0s 579040230e-09 0s 0s 579041390e-09 1s 1s 579050230e-09 0s 0s 579050510e-09 0s 0s 579051630e-09 1s 1s 579060470e-09 0s 0s 579060790e-09 0s 0s 579061870e-09 1s 1s 579070710e-09 0s 0s 579071070e-09 0s 0s 579072110e-09 1s 1s 579080950e-09 0s 0s 579081350e-09 0s 0s 579082350e-09 1s 1s 579091190e-09 0s 0s 579091630e-09 0s 0s 579092590e-09 1s 1s 579101430e-09 0s 0s 579101910e-09 0s 0s 579102830e-09 1s 1s 579111670e-09 0s 0s 579112190e-09 0s 0s 579113070e-09 1s 1s 579121910e-09 0s 0s 579122470e-09 0s 0s 579123310e-09 1s 1s 579132150e-09 0s 0s 579132750e-09 0s 0s 579133550e-09 1s 1s 579142390e-09 0s 0s 579143030e-09 0s 0s 579143790e-09 1s 1s 579152630e-09 0s 0s 579153310e-09 0s 0s 579154030e-09 1s 1s 579162870e-09 0s 0s 579163590e-09 0s 0s 579164270e-09 1s 1s 579173110e-09 0s 0s 579173870e-09 0s 0s 579174510e-09 1s 1s 579183350e-09 0s 0s 579184150e-09 0s 0s 579184750e-09 1s 1s 579193590e-09 0s 0s 579194430e-09 0s 0s 579194990e-09 1s 1s 579203830e-09 0s 0s 579204710e-09 0s 0s 579205230e-09 1s 1s 579214070e-09 0s 0s 579214990e-09 0s 0s 579215470e-09 1s 1s 579224310e-09 0s 0s 579225270e-09 0s 0s 579225710e-09 1s 1s 579234550e-09 0s 0s 579235550e-09 0s 0s 579235950e-09 1s 1s 579244790e-09 0s 0s 579245830e-09 0s 0s 579246190e-09 1s 1s 579255030e-09 0s 0s 579256110e-09 0s 0s 579256430e-09 1s 1s 579265270e-09 0s 0s 579266390e-09 0s 0s 579266670e-09 1s 1s 579275510e-09 0s 0s 579276670e-09 0s 0s 579276910e-09 1s 1s 579285750e-09 0s 0s 579286950e-09 0s 0s 579287150e-09 1s 1s 579295990e-09 0s 0s 579297230e-09 0s 0s 579297390e-09 1s 1s 579306230e-09 0s 0s 579307510e-09 0s 0s 579307630e-09 1s 1s 579316470e-09 0s 0s 579317790e-09 0s 0s 579317870e-09 1s 1s 579326710e-09 0s 0s 579328070e-09 0s 0s 579328110e-09 1s 1s 579336950e-09 0s 0s 579338350e-09 1s 1s 579338390e-09 1s 1s 579347230e-09 0s 0s 579348590e-09 1s 1s 579348670e-09 1s 1s 579357470e-09 0s 0s 579358830e-09 1s 1s 579358950e-09 1s 1s 579367710e-09 0s 0s 579369070e-09 1s 1s 579369230e-09 1s 1s 579377950e-09 0s 0s 579379310e-09 1s 1s 579379510e-09 1s 1s 579388190e-09 0s 0s 579389550e-09 1s 1s 579389790e-09 1s 1s 579398430e-09 0s 0s 579399790e-09 1s 1s 579400070e-09 1s 1s 579408670e-09 0s 0s 579410030e-09 1s 1s 579410350e-09 1s 1s 579418910e-09 0s 0s 579420270e-09 1s 1s 579420630e-09 1s 1s 579429150e-09 0s 0s 579430510e-09 1s 1s 579430910e-09 1s 1s 579439390e-09 0s 0s 579440750e-09 1s 1s 579441190e-09 1s 1s 579449630e-09 0s 0s 579450990e-09 1s 1s 579451470e-09 1s 1s 579459870e-09 0s 0s 579461230e-09 1s 1s 579461750e-09 1s 1s 579470110e-09 0s 0s 579471470e-09 1s 1s 579472030e-09 1s 1s 579480350e-09 0s 0s 579481710e-09 1s 1s 579482310e-09 1s 1s 579490590e-09 0s 0s 579491950e-09 1s 1s 579492590e-09 1s 1s 579500830e-09 0s 0s 579502190e-09 1s 1s 579502870e-09 1s 1s 579511070e-09 0s 0s 579512430e-09 1s 1s 579513150e-09 1s 1s 579521310e-09 0s 0s 579522670e-09 1s 1s 579523430e-09 1s 1s 579531550e-09 0s 0s 579532910e-09 1s 1s 579533710e-09 1s 1s 579541790e-09 0s 0s 579543150e-09 1s 1s 579543990e-09 1s 1s 579552030e-09 0s 0s 579553390e-09 1s 1s 579554270e-09 1s 1s 579562270e-09 0s 0s 579563630e-09 1s 1s 579564550e-09 1s 1s 579572510e-09 0s 0s 579573870e-09 1s 1s 579574830e-09 1s 1s 579582750e-09 0s 0s 579584110e-09 1s 1s 579585110e-09 1s 1s 579592990e-09 0s 0s 579594350e-09 1s 1s 579595390e-09 1s 1s 579603230e-09 0s 0s 579604590e-09 1s 1s 579605670e-09 1s 1s 579613470e-09 0s 0s 579614830e-09 1s 1s 579615950e-09 1s 1s 579623710e-09 0s 0s 579625070e-09 1s 1s 579626230e-09 1s 1s 579633950e-09 0s 0s 579635310e-09 1s 1s 579636510e-09 1s 1s 579644190e-09 0s 0s 579645550e-09 1s 1s 579646790e-09 1s 1s 579654430e-09 0s 0s 579655790e-09 1s 1s 579657070e-09 1s 1s 579664670e-09 0s 0s 579666030e-09 1s 1s 579667350e-09 1s 1s 579674910e-09 0s 0s 579676270e-09 1s 1s 579677630e-09 1s 1s 579685150e-09 0s 0s 579686510e-09 1s 1s 579687910e-09 1s 1s 579695390e-09 0s 0s 579696750e-09 1s 1s 579698190e-09 1s 1s 579705630e-09 0s 0s 579706990e-09 1s 1s 579708470e-09 1s 1s 579715870e-09 0s 0s 579717230e-09 1s 1s 579718750e-09 1s 1s 579726110e-09 0s 0s 579727470e-09 1s 1s 579729030e-09 1s 1s 579736350e-09 0s 0s 579737710e-09 1s 1s 579739310e-09 1s 1s 579746590e-09 0s 0s 579747950e-09 1s 1s 579749590e-09 1s 1s 579756830e-09 0s 0s 579758190e-09 1s 1s 579759870e-09 1s 1s 579767070e-09 0s 0s 579768430e-09 1s 1s 579770150e-09 1s 1s 579777310e-09 0s 0s 579778670e-09 1s 1s 579780430e-09 1s 1s 579787550e-09 0s 0s 579788910e-09 1s 1s 579790710e-09 1s 1s 579797790e-09 0s 0s 579799150e-09 1s 1s 579800990e-09 1s 1s 579808030e-09 0s 0s 579809390e-09 1s 1s 579811270e-09 1s 1s 579818270e-09 0s 0s 579819630e-09 1s 1s 579821550e-09 1s 1s 579828510e-09 0s 0s 579829870e-09 1s 1s 579831830e-09 1s 1s 579838750e-09 0s 0s 579840110e-09 1s 1s 579842110e-09 1s 1s 579848990e-09 0s 0s 579850350e-09 1s 1s 579852390e-09 1s 1s 579859230e-09 0s 0s 579860590e-09 1s 1s 579862670e-09 1s 1s 579869470e-09 0s 0s 579870830e-09 1s 1s 579872950e-09 1s 1s 579879710e-09 0s 0s 579881070e-09 1s 1s 579883230e-09 1s 1s 579889950e-09 0s 0s 579891310e-09 1s 1s 579893510e-09 1s 1s 579900190e-09 0s 0s 579901550e-09 1s 1s 579903790e-09 1s 1s 579910430e-09 0s 0s 579911790e-09 1s 1s 579914070e-09 1s 1s 579920670e-09 0s 0s 579922030e-09 1s 1s 579924350e-09 1s 1s 579930910e-09 0s 0s 579932270e-09 1s 1s 579934630e-09 1s 1s 579941150e-09 0s 0s 579942510e-09 1s 1s 579944910e-09 1s 1s 579951390e-09 0s 0s 579952750e-09 1s 1s 579955190e-09 1s 1s 579961630e-09 0s 0s 579962990e-09 1s 1s 579965470e-09 1s 1s 579971870e-09 0s 0s 579973230e-09 1s 1s 579975750e-09 1s 1s 579982110e-09 0s 0s 579983470e-09 1s 1s 579986030e-09 1s 1s 579992350e-09 0s 0s 579993710e-09 1s 1s 579996310e-09 1s 1s 580002590e-09 0s 0s 580003950e-09 1s 1s 580006590e-09 1s 1s 580012830e-09 0s 0s 580014190e-09 1s 1s 580016870e-09 1s 1s 580023070e-09 0s 0s 580024430e-09 1s 1s 580027150e-09 1s 1s 580033310e-09 0s 0s 580034670e-09 1s 1s 580037430e-09 1s 1s 580043550e-09 0s 0s 580044910e-09 1s 1s 580047710e-09 1s 1s 580053790e-09 0s 0s 580055150e-09 1s 1s 580057990e-09 1s 1s 580064030e-09 0s 0s 580065390e-09 1s 1s 580068270e-09 1s 1s 580074270e-09 0s 0s 580075630e-09 1s 1s 580078550e-09 1s 1s 580084510e-09 0s 0s 580085870e-09 1s 1s 580088830e-09 1s 1s 580094750e-09 0s 0s 580096110e-09 1s 1s 580099110e-09 1s 1s 580104990e-09 0s 0s 580106350e-09 1s 1s 580109390e-09 1s 1s 580115230e-09 0s 0s 580116590e-09 1s 1s 580119670e-09 1s 1s 580125470e-09 0s 0s 580126830e-09 1s 1s 580129950e-09 1s 1s 580135710e-09 0s 0s 580137070e-09 1s 1s 580140230e-09 1s 1s 580145950e-09 0s 0s 580147310e-09 1s 1s 580150510e-09 1s 1s 580156190e-09 0s 0s 580157550e-09 1s 1s 580160790e-09 1s 1s 580166430e-09 0s 0s 580167790e-09 1s 1s 580171070e-09 1s 1s 580176670e-09 0s 0s 580178030e-09 1s 1s 580181350e-09 1s 1s 580186910e-09 0s 0s 580188270e-09 1s 1s 580191630e-09 1s 1s 580197150e-09 0s 0s 580198510e-09 1s 1s 580201910e-09 1s 1s 580207390e-09 0s 0s 580208750e-09 1s 1s 580212190e-09 1s 1s 580217630e-09 0s 0s 580218990e-09 1s 1s 580222470e-09 1s 1s 580227870e-09 0s 0s 580229230e-09 1s 1s 580232750e-09 1s 1s 580238110e-09 0s 0s 580239470e-09 1s 1s 580243030e-09 1s 1s 580248350e-09 0s 0s 580249710e-09 1s 1s 580253310e-09 1s 1s 580258590e-09 0s 0s 580259950e-09 1s 1s 580263590e-09 1s 1s 580268830e-09 0s 0s 580270190e-09 1s 1s 580273870e-09 1s 1s 580279070e-09 0s 0s 580280430e-09 1s 1s 580284150e-09 1s 1s 580289310e-09 0s 0s 580290670e-09 1s 1s 580294430e-09 1s 1s 580299550e-09 0s 0s 580300910e-09 1s 1s 580304710e-09 1s 1s 580309790e-09 0s 0s 580311150e-09 1s 1s 580314990e-09 1s 1s 580320030e-09 0s 0s 580321390e-09 1s 1s 580325270e-09 1s 1s 580330270e-09 0s 0s 580331630e-09 1s 1s 580335550e-09 1s 1s 580340510e-09 0s 0s 580341870e-09 1s 1s 580345830e-09 1s 1s 580350750e-09 0s 0s 580352110e-09 1s 1s 580356110e-09 1s 1s 580360990e-09 0s 0s 580362350e-09 1s 1s 580366390e-09 1s 1s 580371230e-09 0s 0s 580372590e-09 1s 1s 580376670e-09 1s 1s 580381470e-09 0s 0s 580382830e-09 1s 1s 580386950e-09 1s 1s 580391710e-09 0s 0s 580393070e-09 1s 1s 580397230e-09 1s 1s 580401950e-09 0s 0s 580403310e-09 1s 1s 580407510e-09 1s 1s 580412190e-09 0s 0s 580413550e-09 1s 1s 580417790e-09 1s 1s 580422430e-09 0s 0s 580423790e-09 1s 1s 580428070e-09 1s 1s 580432670e-09 0s 0s 580434030e-09 1s 1s 580438350e-09 1s 1s 580442910e-09 0s 0s 580444270e-09 1s 1s 580448630e-09 1s 1s 580453150e-09 0s 0s 580454510e-09 1s 1s 580458910e-09 1s 1s 580463390e-09 0s 0s 580464750e-09 1s 1s 580469190e-09 1s 1s 580473630e-09 0s 0s 580474990e-09 1s 1s 580479470e-09 1s 1s 580483870e-09 0s 0s 580485230e-09 1s 1s 580489750e-09 1s 1s 580494110e-09 0s 0s 580495470e-09 1s 1s 580500030e-09 1s 1s 580504350e-09 0s 0s 580505710e-09 1s 1s 580510310e-09 1s 1s 580514590e-09 0s 0s 580515950e-09 1s 1s 580520590e-09 1s 1s 580524830e-09 0s 0s 580526190e-09 1s 1s 580530870e-09 1s 1s 580535070e-09 0s 0s 580536430e-09 1s 1s 580541150e-09 1s 1s 580545310e-09 0s 0s 580546670e-09 1s 1s 580551430e-09 1s 1s 580555550e-09 0s 0s 580556910e-09 1s 1s 580561710e-09 1s 1s 580565790e-09 0s 0s 580567150e-09 1s 1s 580571990e-09 1s 1s 580576030e-09 0s 0s 580577390e-09 1s 1s 580582270e-09 1s 1s 580586270e-09 0s 0s 580587630e-09 1s 1s 580592550e-09 1s 1s 580596510e-09 0s 0s 580597870e-09 1s 1s 580602830e-09 1s 1s 580606750e-09 0s 0s 580608110e-09 1s 1s 580613110e-09 1s 1s 580616990e-09 0s 0s 580618350e-09 1s 1s 580623390e-09 1s 1s 580627230e-09 0s 0s 580628590e-09 1s 1s 580633670e-09 1s 1s 580637470e-09 0s 0s 580638830e-09 1s 1s 580643950e-09 1s 1s 580647710e-09 0s 0s 580649070e-09 1s 1s 580654230e-09 1s 1s 580657950e-09 0s 0s 580659310e-09 1s 1s 580664510e-09 1s 1s 580668190e-09 0s 0s 580669550e-09 1s 1s 580674790e-09 1s 1s 580678430e-09 0s 0s 580679790e-09 1s 1s 580685070e-09 1s 1s 580688670e-09 0s 0s 580690030e-09 1s 1s 580695350e-09 1s 1s 580698910e-09 0s 0s 580700270e-09 1s 1s 580705630e-09 1s 1s 580709150e-09 0s 0s 580710510e-09 1s 1s 580715910e-09 1s 1s 580719390e-09 0s 0s 580720750e-09 1s 1s 580726190e-09 1s 1s 580729630e-09 0s 0s 580730990e-09 1s 1s 580736470e-09 1s 1s 580739870e-09 0s 0s 580741230e-09 1s 1s 580746750e-09 1s 1s 580750110e-09 0s 0s 580751470e-09 1s 1s 580757030e-09 1s 1s 580760350e-09 0s 0s 580761710e-09 1s 1s 580767310e-09 1s 1s 580770590e-09 0s 0s 580771950e-09 1s 1s 580777590e-09 1s 1s 580780830e-09 0s 0s 580782190e-09 1s 1s 580787870e-09 1s 1s 580791070e-09 0s 0s 580792430e-09 1s 1s 580798150e-09 1s 1s 580801310e-09 0s 0s 580802670e-09 1s 1s 580808430e-09 1s 1s 580811550e-09 0s 0s 580812910e-09 1s 1s 580818710e-09 1s 1s 580821790e-09 0s 0s 580823150e-09 1s 1s 580828990e-09 1s 1s 580832030e-09 0s 0s 580833390e-09 1s 1s 580839270e-09 1s 1s 580842270e-09 0s 0s 580843630e-09 1s 1s 580849550e-09 1s 1s 580852510e-09 0s 0s 580853870e-09 1s 1s 580859830e-09 1s 1s 580862750e-09 0s 0s 580864110e-09 1s 1s 580870110e-09 1s 1s 580872990e-09 0s 0s 580874350e-09 1s 1s 580880390e-09 1s 1s 580883230e-09 0s 0s 580884590e-09 1s 1s 580890670e-09 1s 1s 580893470e-09 0s 0s 580894830e-09 1s 1s 580900950e-09 1s 1s 580903710e-09 0s 0s 580905070e-09 1s 1s 580911230e-09 1s 1s 580913950e-09 0s 0s 580915310e-09 1s 1s 580921510e-09 1s 1s 580924190e-09 0s 0s 580925550e-09 1s 1s 580931790e-09 1s 1s 580934430e-09 0s 0s 580935790e-09 1s 1s 580942070e-09 1s 1s 580944670e-09 0s 0s 580946030e-09 1s 1s 580952350e-09 1s 1s 580954910e-09 0s 0s 580956270e-09 1s 1s 580962630e-09 1s 1s 580965150e-09 0s 0s 580966510e-09 1s 1s 580972910e-09 1s 1s 580975390e-09 0s 0s 580976750e-09 1s 1s 580983190e-09 1s 1s 580985630e-09 0s 0s 580986990e-09 1s 1s 580993470e-09 1s 1s 580995870e-09 0s 0s 580997230e-09 1s 1s 581003750e-09 1s 1s 581006110e-09 0s 0s 581007470e-09 1s 1s 581014030e-09 1s 1s 581016350e-09 0s 0s 581017710e-09 1s 1s 581024310e-09 1s 1s 581026590e-09 0s 0s 581027950e-09 1s 1s 581034590e-09 1s 1s 581036830e-09 0s 0s 581038190e-09 1s 1s 581044870e-09 1s 1s 581047070e-09 0s 0s 581048430e-09 1s 1s 581055150e-09 1s 1s 581057310e-09 0s 0s 581058670e-09 1s 1s 581065430e-09 1s 1s 581067550e-09 0s 0s 581068910e-09 1s 1s 581075710e-09 1s 1s 581077790e-09 0s 0s 581079150e-09 1s 1s 581085990e-09 1s 1s 581088030e-09 0s 0s 581089390e-09 1s 1s 581096270e-09 1s 1s 581098270e-09 0s 0s 581099630e-09 1s 1s 581106550e-09 1s 1s 581108510e-09 0s 0s 581109870e-09 1s 1s 581116830e-09 1s 1s 581118750e-09 0s 0s 581120110e-09 1s 1s 581127110e-09 1s 1s 581128990e-09 0s 0s 581130350e-09 1s 1s 581137390e-09 1s 1s 581139230e-09 0s 0s 581140590e-09 1s 1s 581147670e-09 1s 1s 581149470e-09 0s 0s 581150830e-09 1s 1s 581157950e-09 1s 1s 581159710e-09 0s 0s 581161070e-09 1s 1s 581168230e-09 1s 1s 581169950e-09 0s 0s 581171310e-09 1s 1s 581178510e-09 1s 1s 581180190e-09 0s 0s 581181550e-09 1s 1s 581188790e-09 1s 1s 581190430e-09 0s 0s 581191790e-09 1s 1s 581199070e-09 1s 1s 581200670e-09 0s 0s 581202030e-09 1s 1s 581209350e-09 1s 1s 581210910e-09 0s 0s 581212270e-09 1s 1s 581219630e-09 1s 1s 581221150e-09 0s 0s 581222510e-09 1s 1s 581229910e-09 1s 1s 581231390e-09 0s 0s 581232750e-09 1s 1s 581240190e-09 1s 1s 581241630e-09 0s 0s 581242990e-09 1s 1s 581250470e-09 1s 1s 581251870e-09 0s 0s 581253230e-09 1s 1s 581260750e-09 1s 1s 581262110e-09 0s 0s 581263470e-09 1s 1s 581271030e-09 1s 1s 581272350e-09 0s 0s 581273710e-09 1s 1s 581281310e-09 1s 1s 581282590e-09 0s 0s 581283950e-09 1s 1s 581291590e-09 1s 1s 581292830e-09 0s 0s 581294190e-09 1s 1s 581301870e-09 1s 1s 581303070e-09 0s 0s 581304430e-09 1s 1s 581312150e-09 1s 1s 581313310e-09 0s 0s 581314670e-09 1s 1s 581322430e-09 1s 1s 581323550e-09 0s 0s 581324910e-09 1s 1s 581332710e-09 1s 1s 581333790e-09 0s 0s 581335150e-09 1s 1s 581342990e-09 1s 1s 581344030e-09 0s 0s 581345390e-09 1s 1s 581353270e-09 1s 1s 581354270e-09 0s 0s 581355630e-09 1s 1s 581363550e-09 1s 1s 581364510e-09 0s 0s 581365870e-09 1s 1s 581373830e-09 1s 1s 581374750e-09 0s 0s 581376110e-09 1s 1s 581384110e-09 1s 1s 581384990e-09 0s 0s 581386350e-09 1s 1s 581394390e-09 1s 1s 581395230e-09 0s 0s 581396590e-09 1s 1s 581404670e-09 1s 1s 581405470e-09 0s 0s 581406830e-09 1s 1s 581414950e-09 1s 1s 581415710e-09 0s 0s 581417070e-09 1s 1s 581425230e-09 1s 1s 581425950e-09 0s 0s 581427310e-09 1s 1s 581435510e-09 1s 1s 581436190e-09 0s 0s 581437550e-09 1s 1s 581445790e-09 1s 1s 581446430e-09 0s 0s 581447790e-09 1s 1s 581456070e-09 1s 1s 581456670e-09 0s 0s 581458030e-09 1s 1s 581466350e-09 1s 1s 581466910e-09 0s 0s 581468270e-09 1s 1s 581476630e-09 1s 1s 581477150e-09 0s 0s 581478510e-09 1s 1s 581486910e-09 1s 1s 581487390e-09 0s 0s 581488750e-09 1s 1s 581497190e-09 1s 1s 581497630e-09 0s 0s 581498990e-09 1s 1s 581507470e-09 1s 1s 581507870e-09 0s 0s 581509230e-09 1s 1s 581517750e-09 1s 1s 581518110e-09 0s 0s 581519470e-09 1s 1s 581528030e-09 1s 1s 581528350e-09 0s 0s 581529710e-09 1s 1s 581538310e-09 1s 1s 581538590e-09 0s 0s 581539950e-09 1s 1s 581548590e-09 1s 1s 581548830e-09 0s 0s 581550190e-09 1s 1s 581558870e-09 1s 1s 581559070e-09 0s 0s 581560430e-09 1s 1s 581569150e-09 1s 1s 581569310e-09 0s 0s 581570670e-09 1s 1s 581579430e-09 1s 1s 581579550e-09 0s 0s 581580910e-09 1s 1s 581589710e-09 1s 1s 581589790e-09 0s 0s 581591150e-09 1s 1s 581599990e-09 1s 1s 581600030e-09 0s 0s 581601390e-09 1s 1s 581610270e-09 0s 0s 581611630e-09 1s 1s 581620510e-09 0s 0s 581620550e-09 0s 0s 581621870e-09 1s 1s 581630750e-09 0s 0s 581630830e-09 0s 0s 581632110e-09 1s 1s 581640990e-09 0s 0s 581641110e-09 0s 0s 581642350e-09 1s 1s 581651230e-09 0s 0s 581651390e-09 0s 0s 581652590e-09 1s 1s 581661470e-09 0s 0s 581661670e-09 0s 0s 581662830e-09 1s 1s 581671710e-09 0s 0s 581671950e-09 0s 0s 581673070e-09 1s 1s 581681950e-09 0s 0s 581682230e-09 0s 0s 581683310e-09 1s 1s 581692190e-09 0s 0s 581692510e-09 0s 0s 581693550e-09 1s 1s 581702430e-09 0s 0s 581702790e-09 0s 0s 581703790e-09 1s 1s 581712670e-09 0s 0s 581713070e-09 0s 0s 581714030e-09 1s 1s 581722910e-09 0s 0s 581723350e-09 0s 0s 581724270e-09 1s 1s 581733150e-09 0s 0s 581733630e-09 0s 0s 581734510e-09 1s 1s 581743390e-09 0s 0s 581743910e-09 0s 0s 581744750e-09 1s 1s 581753630e-09 0s 0s 581754190e-09 0s 0s 581754990e-09 1s 1s 581763870e-09 0s 0s 581764470e-09 0s 0s 581765230e-09 1s 1s 581774110e-09 0s 0s 581774750e-09 0s 0s 581775470e-09 1s 1s 581784350e-09 0s 0s 581785030e-09 0s 0s 581785710e-09 1s 1s 581794590e-09 0s 0s 581795310e-09 0s 0s 581795950e-09 1s 1s 581804830e-09 0s 0s 581805590e-09 0s 0s 581806190e-09 1s 1s 581815070e-09 0s 0s 581815870e-09 0s 0s 581816430e-09 1s 1s 581825310e-09 0s 0s 581826150e-09 0s 0s 581826670e-09 1s 1s 581835550e-09 0s 0s 581836430e-09 0s 0s 581836910e-09 1s 1s 581845790e-09 0s 0s 581846710e-09 0s 0s 581847150e-09 1s 1s 581856030e-09 0s 0s 581856990e-09 0s 0s 581857390e-09 1s 1s 581866270e-09 0s 0s 581867270e-09 0s 0s 581867630e-09 1s 1s 581876510e-09 0s 0s 581877550e-09 0s 0s 581877870e-09 1s 1s 581886750e-09 0s 0s 581887830e-09 0s 0s 581888110e-09 1s 1s 581896990e-09 0s 0s 581898110e-09 0s 0s 581898350e-09 1s 1s 581907230e-09 0s 0s 581908390e-09 0s 0s 581908590e-09 1s 1s 581917470e-09 0s 0s 581918670e-09 0s 0s 581918830e-09 1s 1s 581927710e-09 0s 0s 581928950e-09 0s 0s 581929070e-09 1s 1s 581937950e-09 0s 0s 581939230e-09 0s 0s 581939310e-09 1s 1s 581948190e-09 0s 0s 581949510e-09 0s 0s 581949550e-09 1s 1s 581958430e-09 0s 0s 581959790e-09 1s 1s 581959830e-09 1s 1s 581968710e-09 0s 0s 581970030e-09 1s 1s 581970110e-09 1s 1s 581978950e-09 0s 0s 581980270e-09 1s 1s 581980390e-09 1s 1s 581989190e-09 0s 0s 581990510e-09 1s 1s 581990670e-09 1s 1s 581999430e-09 0s 0s 582000750e-09 1s 1s 582000950e-09 1s 1s 582009670e-09 0s 0s 582010990e-09 1s 1s 582011230e-09 1s 1s 582019910e-09 0s 0s 582021230e-09 1s 1s 582021510e-09 1s 1s 582030150e-09 0s 0s 582031470e-09 1s 1s 582031790e-09 1s 1s 582040390e-09 0s 0s 582041710e-09 1s 1s 582042070e-09 1s 1s 582050630e-09 0s 0s 582051950e-09 1s 1s 582052350e-09 1s 1s 582060870e-09 0s 0s 582062190e-09 1s 1s 582062630e-09 1s 1s 582071110e-09 0s 0s 582072430e-09 1s 1s 582072910e-09 1s 1s 582081350e-09 0s 0s 582082670e-09 1s 1s 582083190e-09 1s 1s 582091590e-09 0s 0s 582092910e-09 1s 1s 582093470e-09 1s 1s 582101830e-09 0s 0s 582103150e-09 1s 1s 582103750e-09 1s 1s 582112070e-09 0s 0s 582113390e-09 1s 1s 582114030e-09 1s 1s 582122310e-09 0s 0s 582123630e-09 1s 1s 582124310e-09 1s 1s 582132550e-09 0s 0s 582133870e-09 1s 1s 582134590e-09 1s 1s 582142790e-09 0s 0s 582144110e-09 1s 1s 582144870e-09 1s 1s 582153030e-09 0s 0s 582154350e-09 1s 1s 582155150e-09 1s 1s 582163270e-09 0s 0s 582164590e-09 1s 1s 582165430e-09 1s 1s 582173510e-09 0s 0s 582174830e-09 1s 1s 582175710e-09 1s 1s 582183750e-09 0s 0s 582185070e-09 1s 1s 582185990e-09 1s 1s 582193990e-09 0s 0s 582195310e-09 1s 1s 582196270e-09 1s 1s 582204230e-09 0s 0s 582205550e-09 1s 1s 582206550e-09 1s 1s 582214470e-09 0s 0s 582215790e-09 1s 1s 582216830e-09 1s 1s 582224710e-09 0s 0s 582226030e-09 1s 1s 582227110e-09 1s 1s 582234950e-09 0s 0s 582236270e-09 1s 1s 582237390e-09 1s 1s 582245190e-09 0s 0s 582246510e-09 1s 1s 582247670e-09 1s 1s 582255430e-09 0s 0s 582256750e-09 1s 1s 582257950e-09 1s 1s 582265670e-09 0s 0s 582266990e-09 1s 1s 582268230e-09 1s 1s 582275910e-09 0s 0s 582277230e-09 1s 1s 582278510e-09 1s 1s 582286150e-09 0s 0s 582287470e-09 1s 1s 582288790e-09 1s 1s 582296390e-09 0s 0s 582297710e-09 1s 1s 582299070e-09 1s 1s 582306630e-09 0s 0s 582307950e-09 1s 1s 582309350e-09 1s 1s 582316870e-09 0s 0s 582318190e-09 1s 1s 582319630e-09 1s 1s 582327110e-09 0s 0s 582328430e-09 1s 1s 582329910e-09 1s 1s 582337350e-09 0s 0s 582338670e-09 1s 1s 582340190e-09 1s 1s 582347590e-09 0s 0s 582348910e-09 1s 1s 582350470e-09 1s 1s 582357830e-09 0s 0s 582359150e-09 1s 1s 582360750e-09 1s 1s 582368070e-09 0s 0s 582369390e-09 1s 1s 582371030e-09 1s 1s 582378310e-09 0s 0s 582379630e-09 1s 1s 582381310e-09 1s 1s 582388550e-09 0s 0s 582389870e-09 1s 1s 582391590e-09 1s 1s 582398790e-09 0s 0s 582400110e-09 1s 1s 582401870e-09 1s 1s 582409030e-09 0s 0s 582410350e-09 1s 1s 582412150e-09 1s 1s 582419270e-09 0s 0s 582420590e-09 1s 1s 582422430e-09 1s 1s 582429510e-09 0s 0s 582430830e-09 1s 1s 582432710e-09 1s 1s 582439750e-09 0s 0s 582441070e-09 1s 1s 582442990e-09 1s 1s 582449990e-09 0s 0s 582451310e-09 1s 1s 582453270e-09 1s 1s 582460230e-09 0s 0s 582461550e-09 1s 1s 582463550e-09 1s 1s 582470470e-09 0s 0s 582471790e-09 1s 1s 582473830e-09 1s 1s 582480710e-09 0s 0s 582482030e-09 1s 1s 582484110e-09 1s 1s 582490950e-09 0s 0s 582492270e-09 1s 1s 582494390e-09 1s 1s 582501190e-09 0s 0s 582502510e-09 1s 1s 582504670e-09 1s 1s 582511430e-09 0s 0s 582512750e-09 1s 1s 582514950e-09 1s 1s 582521670e-09 0s 0s 582522990e-09 1s 1s 582525230e-09 1s 1s 582531910e-09 0s 0s 582533230e-09 1s 1s 582535510e-09 1s 1s 582542150e-09 0s 0s 582543470e-09 1s 1s 582545790e-09 1s 1s 582552390e-09 0s 0s 582553710e-09 1s 1s 582556070e-09 1s 1s 582562630e-09 0s 0s 582563950e-09 1s 1s 582566350e-09 1s 1s 582572870e-09 0s 0s 582574190e-09 1s 1s 582576630e-09 1s 1s 582583110e-09 0s 0s 582584430e-09 1s 1s 582586910e-09 1s 1s 582593350e-09 0s 0s 582594670e-09 1s 1s 582597190e-09 1s 1s 582603590e-09 0s 0s 582604910e-09 1s 1s 582607470e-09 1s 1s 582613830e-09 0s 0s 582615150e-09 1s 1s 582617750e-09 1s 1s 582624070e-09 0s 0s 582625390e-09 1s 1s 582628030e-09 1s 1s 582634310e-09 0s 0s 582635630e-09 1s 1s 582638310e-09 1s 1s 582644550e-09 0s 0s 582645870e-09 1s 1s 582648590e-09 1s 1s 582654790e-09 0s 0s 582656110e-09 1s 1s 582658870e-09 1s 1s 582665030e-09 0s 0s 582666350e-09 1s 1s 582669150e-09 1s 1s 582675270e-09 0s 0s 582676590e-09 1s 1s 582679430e-09 1s 1s 582685510e-09 0s 0s 582686830e-09 1s 1s 582689710e-09 1s 1s 582695750e-09 0s 0s 582697070e-09 1s 1s 582699990e-09 1s 1s 582705990e-09 0s 0s 582707310e-09 1s 1s 582710270e-09 1s 1s 582716230e-09 0s 0s 582717550e-09 1s 1s 582720550e-09 1s 1s 582726470e-09 0s 0s 582727790e-09 1s 1s 582730830e-09 1s 1s 582736710e-09 0s 0s 582738030e-09 1s 1s 582741110e-09 1s 1s 582746950e-09 0s 0s 582748270e-09 1s 1s 582751390e-09 1s 1s 582757190e-09 0s 0s 582758510e-09 1s 1s 582761670e-09 1s 1s 582767430e-09 0s 0s 582768750e-09 1s 1s 582771950e-09 1s 1s 582777670e-09 0s 0s 582778990e-09 1s 1s 582782230e-09 1s 1s 582787910e-09 0s 0s 582789230e-09 1s 1s 582792510e-09 1s 1s 582798150e-09 0s 0s 582799470e-09 1s 1s 582802790e-09 1s 1s 582808390e-09 0s 0s 582809710e-09 1s 1s 582813070e-09 1s 1s 582818630e-09 0s 0s 582819950e-09 1s 1s 582823350e-09 1s 1s 582828870e-09 0s 0s 582830190e-09 1s 1s 582833630e-09 1s 1s 582839110e-09 0s 0s 582840430e-09 1s 1s 582843910e-09 1s 1s 582849350e-09 0s 0s 582850670e-09 1s 1s 582854190e-09 1s 1s 582859590e-09 0s 0s 582860910e-09 1s 1s 582864470e-09 1s 1s 582869830e-09 0s 0s 582871150e-09 1s 1s 582874750e-09 1s 1s 582880070e-09 0s 0s 582881390e-09 1s 1s 582885030e-09 1s 1s 582890310e-09 0s 0s 582891630e-09 1s 1s 582895310e-09 1s 1s 582900550e-09 0s 0s 582901870e-09 1s 1s 582905590e-09 1s 1s 582910790e-09 0s 0s 582912110e-09 1s 1s 582915870e-09 1s 1s 582921030e-09 0s 0s 582922350e-09 1s 1s 582926150e-09 1s 1s 582931270e-09 0s 0s 582932590e-09 1s 1s 582936430e-09 1s 1s 582941510e-09 0s 0s 582942830e-09 1s 1s 582946710e-09 1s 1s 582951750e-09 0s 0s 582953070e-09 1s 1s 582956990e-09 1s 1s 582961990e-09 0s 0s 582963310e-09 1s 1s 582967270e-09 1s 1s 582972230e-09 0s 0s 582973550e-09 1s 1s 582977550e-09 1s 1s 582982470e-09 0s 0s 582983790e-09 1s 1s 582987830e-09 1s 1s 582992710e-09 0s 0s 582994030e-09 1s 1s 582998110e-09 1s 1s 583002950e-09 0s 0s 583004270e-09 1s 1s 583008390e-09 1s 1s 583013190e-09 0s 0s 583014510e-09 1s 1s 583018670e-09 1s 1s 583023430e-09 0s 0s 583024750e-09 1s 1s 583028950e-09 1s 1s 583033670e-09 0s 0s 583034990e-09 1s 1s 583039230e-09 1s 1s 583043910e-09 0s 0s 583045230e-09 1s 1s 583049510e-09 1s 1s 583054150e-09 0s 0s 583055470e-09 1s 1s 583059790e-09 1s 1s 583064390e-09 0s 0s 583065710e-09 1s 1s 583070070e-09 1s 1s 583074630e-09 0s 0s 583075950e-09 1s 1s 583080350e-09 1s 1s 583084870e-09 0s 0s 583086190e-09 1s 1s 583090630e-09 1s 1s 583095110e-09 0s 0s 583096430e-09 1s 1s 583100910e-09 1s 1s 583105350e-09 0s 0s 583106670e-09 1s 1s 583111190e-09 1s 1s 583115590e-09 0s 0s 583116910e-09 1s 1s 583121470e-09 1s 1s 583125830e-09 0s 0s 583127150e-09 1s 1s 583131750e-09 1s 1s 583136070e-09 0s 0s 583137390e-09 1s 1s 583142030e-09 1s 1s 583146310e-09 0s 0s 583147630e-09 1s 1s 583152310e-09 1s 1s 583156550e-09 0s 0s 583157870e-09 1s 1s 583162590e-09 1s 1s 583166790e-09 0s 0s 583168110e-09 1s 1s 583172870e-09 1s 1s 583177030e-09 0s 0s 583178350e-09 1s 1s 583183150e-09 1s 1s 583187270e-09 0s 0s 583188590e-09 1s 1s 583193430e-09 1s 1s 583197510e-09 0s 0s 583198830e-09 1s 1s 583203710e-09 1s 1s 583207750e-09 0s 0s 583209070e-09 1s 1s 583213990e-09 1s 1s 583217990e-09 0s 0s 583219310e-09 1s 1s 583224270e-09 1s 1s 583228230e-09 0s 0s 583229550e-09 1s 1s 583234550e-09 1s 1s 583238470e-09 0s 0s 583239790e-09 1s 1s 583244830e-09 1s 1s 583248710e-09 0s 0s 583250030e-09 1s 1s 583255110e-09 1s 1s 583258950e-09 0s 0s 583260270e-09 1s 1s 583265390e-09 1s 1s 583269190e-09 0s 0s 583270510e-09 1s 1s 583275670e-09 1s 1s 583279430e-09 0s 0s 583280750e-09 1s 1s 583285950e-09 1s 1s 583289670e-09 0s 0s 583290990e-09 1s 1s 583296230e-09 1s 1s 583299910e-09 0s 0s 583301230e-09 1s 1s 583306510e-09 1s 1s 583310150e-09 0s 0s 583311470e-09 1s 1s 583316790e-09 1s 1s 583320390e-09 0s 0s 583321710e-09 1s 1s 583327070e-09 1s 1s 583330630e-09 0s 0s 583331950e-09 1s 1s 583337350e-09 1s 1s 583340870e-09 0s 0s 583342190e-09 1s 1s 583347630e-09 1s 1s 583351110e-09 0s 0s 583352430e-09 1s 1s 583357910e-09 1s 1s 583361350e-09 0s 0s 583362670e-09 1s 1s 583368190e-09 1s 1s 583371590e-09 0s 0s 583372910e-09 1s 1s 583378470e-09 1s 1s 583381830e-09 0s 0s 583383150e-09 1s 1s 583388750e-09 1s 1s 583392070e-09 0s 0s 583393390e-09 1s 1s 583399030e-09 1s 1s 583402310e-09 0s 0s 583403630e-09 1s 1s 583409310e-09 1s 1s 583412550e-09 0s 0s 583413870e-09 1s 1s 583419590e-09 1s 1s 583422790e-09 0s 0s 583424110e-09 1s 1s 583429870e-09 1s 1s 583433030e-09 0s 0s 583434350e-09 1s 1s 583440150e-09 1s 1s 583443270e-09 0s 0s 583444590e-09 1s 1s 583450430e-09 1s 1s 583453510e-09 0s 0s 583454830e-09 1s 1s 583460710e-09 1s 1s 583463750e-09 0s 0s 583465070e-09 1s 1s 583470990e-09 1s 1s 583473990e-09 0s 0s 583475310e-09 1s 1s 583481270e-09 1s 1s 583484230e-09 0s 0s 583485550e-09 1s 1s 583491550e-09 1s 1s 583494470e-09 0s 0s 583495790e-09 1s 1s 583501830e-09 1s 1s 583504710e-09 0s 0s 583506030e-09 1s 1s 583512110e-09 1s 1s 583514950e-09 0s 0s 583516270e-09 1s 1s 583522390e-09 1s 1s 583525190e-09 0s 0s 583526510e-09 1s 1s 583532670e-09 1s 1s 583535430e-09 0s 0s 583536750e-09 1s 1s 583542950e-09 1s 1s 583545670e-09 0s 0s 583546990e-09 1s 1s 583553230e-09 1s 1s 583555910e-09 0s 0s 583557230e-09 1s 1s 583563510e-09 1s 1s 583566150e-09 0s 0s 583567470e-09 1s 1s 583573790e-09 1s 1s 583576390e-09 0s 0s 583577710e-09 1s 1s 583584070e-09 1s 1s 583586630e-09 0s 0s 583587950e-09 1s 1s 583594350e-09 1s 1s 583596870e-09 0s 0s 583598190e-09 1s 1s 583604630e-09 1s 1s 583607110e-09 0s 0s 583608430e-09 1s 1s 583614910e-09 1s 1s 583617350e-09 0s 0s 583618670e-09 1s 1s 583625190e-09 1s 1s 583627590e-09 0s 0s 583628910e-09 1s 1s 583635470e-09 1s 1s 583637830e-09 0s 0s 583639150e-09 1s 1s 583645750e-09 1s 1s 583648070e-09 0s 0s 583649390e-09 1s 1s 583656030e-09 1s 1s 583658310e-09 0s 0s 583659630e-09 1s 1s 583666310e-09 1s 1s 583668550e-09 0s 0s 583669870e-09 1s 1s 583676590e-09 1s 1s 583678790e-09 0s 0s 583680110e-09 1s 1s 583686870e-09 1s 1s 583689030e-09 0s 0s 583690350e-09 1s 1s 583697150e-09 1s 1s 583699270e-09 0s 0s 583700590e-09 1s 1s 583707430e-09 1s 1s 583709510e-09 0s 0s 583710830e-09 1s 1s 583717710e-09 1s 1s 583719750e-09 0s 0s 583721070e-09 1s 1s 583727990e-09 1s 1s 583729990e-09 0s 0s 583731310e-09 1s 1s 583738270e-09 1s 1s 583740230e-09 0s 0s 583741550e-09 1s 1s 583748550e-09 1s 1s 583750470e-09 0s 0s 583751790e-09 1s 1s 583758830e-09 1s 1s 583760710e-09 0s 0s 583762030e-09 1s 1s 583769110e-09 1s 1s 583770950e-09 0s 0s 583772270e-09 1s 1s 583779390e-09 1s 1s 583781190e-09 0s 0s 583782510e-09 1s 1s 583789670e-09 1s 1s 583791430e-09 0s 0s 583792750e-09 1s 1s 583799950e-09 1s 1s 583801670e-09 0s 0s 583802990e-09 1s 1s 583810230e-09 1s 1s 583811910e-09 0s 0s 583813230e-09 1s 1s 583820510e-09 1s 1s 583822150e-09 0s 0s 583823470e-09 1s 1s 583830790e-09 1s 1s 583832390e-09 0s 0s 583833710e-09 1s 1s 583841070e-09 1s 1s 583842630e-09 0s 0s 583843950e-09 1s 1s 583851350e-09 1s 1s 583852870e-09 0s 0s 583854190e-09 1s 1s 583861630e-09 1s 1s 583863110e-09 0s 0s 583864430e-09 1s 1s 583871910e-09 1s 1s 583873350e-09 0s 0s 583874670e-09 1s 1s 583882190e-09 1s 1s 583883590e-09 0s 0s 583884910e-09 1s 1s 583892470e-09 1s 1s 583893830e-09 0s 0s 583895150e-09 1s 1s 583902750e-09 1s 1s 583904070e-09 0s 0s 583905390e-09 1s 1s 583913030e-09 1s 1s 583914310e-09 0s 0s 583915630e-09 1s 1s 583923310e-09 1s 1s 583924550e-09 0s 0s 583925870e-09 1s 1s 583933590e-09 1s 1s 583934790e-09 0s 0s 583936110e-09 1s 1s 583943870e-09 1s 1s 583945030e-09 0s 0s 583946350e-09 1s 1s 583954150e-09 1s 1s 583955270e-09 0s 0s 583956590e-09 1s 1s 583964430e-09 1s 1s 583965510e-09 0s 0s 583966830e-09 1s 1s 583974710e-09 1s 1s 583975750e-09 0s 0s 583977070e-09 1s 1s 583984990e-09 1s 1s 583985990e-09 0s 0s 583987310e-09 1s 1s 583995270e-09 1s 1s 583996230e-09 0s 0s 583997550e-09 1s 1s 584005550e-09 1s 1s 584006470e-09 0s 0s 584007790e-09 1s 1s 584015830e-09 1s 1s 584016710e-09 0s 0s 584018030e-09 1s 1s 584026110e-09 1s 1s 584026950e-09 0s 0s 584028270e-09 1s 1s 584036390e-09 1s 1s 584037190e-09 0s 0s 584038510e-09 1s 1s 584046670e-09 1s 1s 584047430e-09 0s 0s 584048750e-09 1s 1s 584056950e-09 1s 1s 584057670e-09 0s 0s 584058990e-09 1s 1s 584067230e-09 1s 1s 584067910e-09 0s 0s 584069230e-09 1s 1s 584077510e-09 1s 1s 584078150e-09 0s 0s 584079470e-09 1s 1s 584087790e-09 1s 1s 584088390e-09 0s 0s 584089710e-09 1s 1s 584098070e-09 1s 1s 584098630e-09 0s 0s 584099950e-09 1s 1s 584108350e-09 1s 1s 584108870e-09 0s 0s 584110190e-09 1s 1s 584118630e-09 1s 1s 584119110e-09 0s 0s 584120430e-09 1s 1s 584128910e-09 1s 1s 584129350e-09 0s 0s 584130670e-09 1s 1s 584139190e-09 1s 1s 584139590e-09 0s 0s 584140910e-09 1s 1s 584149470e-09 1s 1s 584149830e-09 0s 0s 584151150e-09 1s 1s 584159750e-09 1s 1s 584160070e-09 0s 0s 584161390e-09 1s 1s 584170030e-09 1s 1s 584170310e-09 0s 0s 584171630e-09 1s 1s 584180310e-09 1s 1s 584180550e-09 0s 0s 584181870e-09 1s 1s 584190590e-09 1s 1s 584190790e-09 0s 0s 584192110e-09 1s 1s 584200870e-09 1s 1s 584201030e-09 0s 0s 584202350e-09 1s 1s 584211150e-09 1s 1s 584211270e-09 0s 0s 584212590e-09 1s 1s 584221430e-09 1s 1s 584221510e-09 0s 0s 584222830e-09 1s 1s 584231710e-09 1s 1s 584231750e-09 0s 0s 584233070e-09 1s 1s 584241990e-09 0s 0s 584243310e-09 1s 1s 584252230e-09 0s 0s 584252270e-09 0s 0s 584253550e-09 1s 1s 584262470e-09 0s 0s 584262550e-09 0s 0s 584263790e-09 1s 1s 584272710e-09 0s 0s 584272830e-09 0s 0s 584274030e-09 1s 1s 584282950e-09 0s 0s 584283110e-09 0s 0s 584284270e-09 1s 1s 584293190e-09 0s 0s 584293390e-09 0s 0s 584294510e-09 1s 1s 584303430e-09 0s 0s 584303670e-09 0s 0s 584304750e-09 1s 1s 584313670e-09 0s 0s 584313950e-09 0s 0s 584314990e-09 1s 1s 584323910e-09 0s 0s 584324230e-09 0s 0s 584325230e-09 1s 1s 584334150e-09 0s 0s 584334510e-09 0s 0s 584335470e-09 1s 1s 584344390e-09 0s 0s 584344790e-09 0s 0s 584345710e-09 1s 1s 584354630e-09 0s 0s 584355070e-09 0s 0s 584355950e-09 1s 1s 584364870e-09 0s 0s 584365350e-09 0s 0s 584366190e-09 1s 1s 584375110e-09 0s 0s 584375630e-09 0s 0s 584376430e-09 1s 1s 584385350e-09 0s 0s 584385910e-09 0s 0s 584386670e-09 1s 1s 584395590e-09 0s 0s 584396190e-09 0s 0s 584396910e-09 1s 1s 584405830e-09 0s 0s 584406470e-09 0s 0s 584407150e-09 1s 1s 584416070e-09 0s 0s 584416750e-09 0s 0s 584417390e-09 1s 1s 584426310e-09 0s 0s 584427030e-09 0s 0s 584427630e-09 1s 1s 584436550e-09 0s 0s 584437310e-09 0s 0s 584437870e-09 1s 1s 584446790e-09 0s 0s 584447590e-09 0s 0s 584448110e-09 1s 1s 584457030e-09 0s 0s 584457870e-09 0s 0s 584458350e-09 1s 1s 584467270e-09 0s 0s 584468150e-09 0s 0s 584468590e-09 1s 1s 584477510e-09 0s 0s 584478430e-09 0s 0s 584478830e-09 1s 1s 584487750e-09 0s 0s 584488710e-09 0s 0s 584489070e-09 1s 1s 584497990e-09 0s 0s 584498990e-09 0s 0s 584499310e-09 1s 1s 584508230e-09 0s 0s 584509270e-09 0s 0s 584509550e-09 1s 1s 584518470e-09 0s 0s 584519550e-09 0s 0s 584519790e-09 1s 1s 584528710e-09 0s 0s 584529830e-09 0s 0s 584530030e-09 1s 1s 584538950e-09 0s 0s 584540110e-09 0s 0s 584540270e-09 1s 1s 584549190e-09 0s 0s 584550390e-09 0s 0s 584550510e-09 1s 1s 584559430e-09 0s 0s 584560670e-09 0s 0s 584560750e-09 1s 1s 584569670e-09 0s 0s 584570950e-09 0s 0s 584570990e-09 1s 1s 584579910e-09 0s 0s 584581230e-09 1s 1s 584581270e-09 1s 1s 584590190e-09 0s 0s 584591470e-09 1s 1s 584591550e-09 1s 1s 584600430e-09 0s 0s 584601710e-09 1s 1s 584601830e-09 1s 1s 584610670e-09 0s 0s 584611950e-09 1s 1s 584612110e-09 1s 1s 584620910e-09 0s 0s 584622190e-09 1s 1s 584622390e-09 1s 1s 584631150e-09 0s 0s 584632430e-09 1s 1s 584632670e-09 1s 1s 584641390e-09 0s 0s 584642670e-09 1s 1s 584642950e-09 1s 1s 584651630e-09 0s 0s 584652910e-09 1s 1s 584653230e-09 1s 1s 584661870e-09 0s 0s 584663150e-09 1s 1s 584663510e-09 1s 1s 584672110e-09 0s 0s 584673390e-09 1s 1s 584673790e-09 1s 1s 584682350e-09 0s 0s 584683630e-09 1s 1s 584684070e-09 1s 1s 584692590e-09 0s 0s 584693870e-09 1s 1s 584694350e-09 1s 1s 584702830e-09 0s 0s 584704110e-09 1s 1s 584704630e-09 1s 1s 584713070e-09 0s 0s 584714350e-09 1s 1s 584714910e-09 1s 1s 584723310e-09 0s 0s 584724590e-09 1s 1s 584725190e-09 1s 1s 584733550e-09 0s 0s 584734830e-09 1s 1s 584735470e-09 1s 1s 584743790e-09 0s 0s 584745070e-09 1s 1s 584745750e-09 1s 1s 584754030e-09 0s 0s 584755310e-09 1s 1s 584756030e-09 1s 1s 584764270e-09 0s 0s 584765550e-09 1s 1s 584766310e-09 1s 1s 584774510e-09 0s 0s 584775790e-09 1s 1s 584776590e-09 1s 1s 584784750e-09 0s 0s 584786030e-09 1s 1s 584786870e-09 1s 1s 584794990e-09 0s 0s 584796270e-09 1s 1s 584797150e-09 1s 1s 584805230e-09 0s 0s 584806510e-09 1s 1s 584807430e-09 1s 1s 584815470e-09 0s 0s 584816750e-09 1s 1s 584817710e-09 1s 1s 584825710e-09 0s 0s 584826990e-09 1s 1s 584827990e-09 1s 1s 584835950e-09 0s 0s 584837230e-09 1s 1s 584838270e-09 1s 1s 584846190e-09 0s 0s 584847470e-09 1s 1s 584848550e-09 1s 1s 584856430e-09 0s 0s 584857710e-09 1s 1s 584858830e-09 1s 1s 584866670e-09 0s 0s 584867950e-09 1s 1s 584869110e-09 1s 1s 584876910e-09 0s 0s 584878190e-09 1s 1s 584879390e-09 1s 1s 584887150e-09 0s 0s 584888430e-09 1s 1s 584889670e-09 1s 1s 584897390e-09 0s 0s 584898670e-09 1s 1s 584899950e-09 1s 1s 584907630e-09 0s 0s 584908910e-09 1s 1s 584910230e-09 1s 1s 584917870e-09 0s 0s 584919150e-09 1s 1s 584920510e-09 1s 1s 584928110e-09 0s 0s 584929390e-09 1s 1s 584930790e-09 1s 1s 584938350e-09 0s 0s 584939630e-09 1s 1s 584941070e-09 1s 1s 584948590e-09 0s 0s 584949870e-09 1s 1s 584951350e-09 1s 1s 584958830e-09 0s 0s 584960110e-09 1s 1s 584961630e-09 1s 1s 584969070e-09 0s 0s 584970350e-09 1s 1s 584971910e-09 1s 1s 584979310e-09 0s 0s 584980590e-09 1s 1s 584982190e-09 1s 1s 584989550e-09 0s 0s 584990830e-09 1s 1s 584992470e-09 1s 1s 584999790e-09 0s 0s 585001070e-09 1s 1s 585002750e-09 1s 1s 585010030e-09 0s 0s 585011310e-09 1s 1s 585013030e-09 1s 1s 585020270e-09 0s 0s 585021550e-09 1s 1s 585023310e-09 1s 1s 585030510e-09 0s 0s 585031790e-09 1s 1s 585033590e-09 1s 1s 585040750e-09 0s 0s 585042030e-09 1s 1s 585043870e-09 1s 1s 585050990e-09 0s 0s 585052270e-09 1s 1s 585054150e-09 1s 1s 585061230e-09 0s 0s 585062510e-09 1s 1s 585064430e-09 1s 1s 585071470e-09 0s 0s 585072750e-09 1s 1s 585074710e-09 1s 1s 585081710e-09 0s 0s 585082990e-09 1s 1s 585084990e-09 1s 1s 585091950e-09 0s 0s 585093230e-09 1s 1s 585095270e-09 1s 1s 585102190e-09 0s 0s 585103470e-09 1s 1s 585105550e-09 1s 1s 585112430e-09 0s 0s 585113710e-09 1s 1s 585115830e-09 1s 1s 585122670e-09 0s 0s 585123950e-09 1s 1s 585126110e-09 1s 1s 585132910e-09 0s 0s 585134190e-09 1s 1s 585136390e-09 1s 1s 585143150e-09 0s 0s 585144430e-09 1s 1s 585146670e-09 1s 1s 585153390e-09 0s 0s 585154670e-09 1s 1s 585156950e-09 1s 1s 585163630e-09 0s 0s 585164910e-09 1s 1s 585167230e-09 1s 1s 585173870e-09 0s 0s 585175150e-09 1s 1s 585177510e-09 1s 1s 585184110e-09 0s 0s 585185390e-09 1s 1s 585187790e-09 1s 1s 585194350e-09 0s 0s 585195630e-09 1s 1s 585198070e-09 1s 1s 585204590e-09 0s 0s 585205870e-09 1s 1s 585208350e-09 1s 1s 585214830e-09 0s 0s 585216110e-09 1s 1s 585218630e-09 1s 1s 585225070e-09 0s 0s 585226350e-09 1s 1s 585228910e-09 1s 1s 585235310e-09 0s 0s 585236590e-09 1s 1s 585239190e-09 1s 1s 585245550e-09 0s 0s 585246830e-09 1s 1s 585249470e-09 1s 1s 585255790e-09 0s 0s 585257070e-09 1s 1s 585259750e-09 1s 1s 585266030e-09 0s 0s 585267310e-09 1s 1s 585270030e-09 1s 1s 585276270e-09 0s 0s 585277550e-09 1s 1s 585280310e-09 1s 1s 585286510e-09 0s 0s 585287790e-09 1s 1s 585290590e-09 1s 1s 585296750e-09 0s 0s 585298030e-09 1s 1s 585300870e-09 1s 1s 585306990e-09 0s 0s 585308270e-09 1s 1s 585311150e-09 1s 1s 585317230e-09 0s 0s 585318510e-09 1s 1s 585321430e-09 1s 1s 585327470e-09 0s 0s 585328750e-09 1s 1s 585331710e-09 1s 1s 585337710e-09 0s 0s 585338990e-09 1s 1s 585341990e-09 1s 1s 585347950e-09 0s 0s 585349230e-09 1s 1s 585352270e-09 1s 1s 585358190e-09 0s 0s 585359470e-09 1s 1s 585362550e-09 1s 1s 585368430e-09 0s 0s 585369710e-09 1s 1s 585372830e-09 1s 1s 585378670e-09 0s 0s 585379950e-09 1s 1s 585383110e-09 1s 1s 585388910e-09 0s 0s 585390190e-09 1s 1s 585393390e-09 1s 1s 585399150e-09 0s 0s 585400430e-09 1s 1s 585403670e-09 1s 1s 585409390e-09 0s 0s 585410670e-09 1s 1s 585413950e-09 1s 1s 585419630e-09 0s 0s 585420910e-09 1s 1s 585424230e-09 1s 1s 585429870e-09 0s 0s 585431150e-09 1s 1s 585434510e-09 1s 1s 585440110e-09 0s 0s 585441390e-09 1s 1s 585444790e-09 1s 1s 585450350e-09 0s 0s 585451630e-09 1s 1s 585455070e-09 1s 1s 585460590e-09 0s 0s 585461870e-09 1s 1s 585465350e-09 1s 1s 585470830e-09 0s 0s 585472110e-09 1s 1s 585475630e-09 1s 1s 585481070e-09 0s 0s 585482350e-09 1s 1s 585485910e-09 1s 1s 585491310e-09 0s 0s 585492590e-09 1s 1s 585496190e-09 1s 1s 585501550e-09 0s 0s 585502830e-09 1s 1s 585506470e-09 1s 1s 585511790e-09 0s 0s 585513070e-09 1s 1s 585516750e-09 1s 1s 585522030e-09 0s 0s 585523310e-09 1s 1s 585527030e-09 1s 1s 585532270e-09 0s 0s 585533550e-09 1s 1s 585537310e-09 1s 1s 585542510e-09 0s 0s 585543790e-09 1s 1s 585547590e-09 1s 1s 585552750e-09 0s 0s 585554030e-09 1s 1s 585557870e-09 1s 1s 585562990e-09 0s 0s 585564270e-09 1s 1s 585568150e-09 1s 1s 585573230e-09 0s 0s 585574510e-09 1s 1s 585578430e-09 1s 1s 585583470e-09 0s 0s 585584750e-09 1s 1s 585588710e-09 1s 1s 585593710e-09 0s 0s 585594990e-09 1s 1s 585598990e-09 1s 1s 585603950e-09 0s 0s 585605230e-09 1s 1s 585609270e-09 1s 1s 585614190e-09 0s 0s 585615470e-09 1s 1s 585619550e-09 1s 1s 585624430e-09 0s 0s 585625710e-09 1s 1s 585629830e-09 1s 1s 585634670e-09 0s 0s 585635950e-09 1s 1s 585640110e-09 1s 1s 585644910e-09 0s 0s 585646190e-09 1s 1s 585650390e-09 1s 1s 585655150e-09 0s 0s 585656430e-09 1s 1s 585660670e-09 1s 1s 585665390e-09 0s 0s 585666670e-09 1s 1s 585670950e-09 1s 1s 585675630e-09 0s 0s 585676910e-09 1s 1s 585681230e-09 1s 1s 585685870e-09 0s 0s 585687150e-09 1s 1s 585691510e-09 1s 1s 585696110e-09 0s 0s 585697390e-09 1s 1s 585701790e-09 1s 1s 585706350e-09 0s 0s 585707630e-09 1s 1s 585712070e-09 1s 1s 585716590e-09 0s 0s 585717870e-09 1s 1s 585722350e-09 1s 1s 585726830e-09 0s 0s 585728110e-09 1s 1s 585732630e-09 1s 1s 585737070e-09 0s 0s 585738350e-09 1s 1s 585742910e-09 1s 1s 585747310e-09 0s 0s 585748590e-09 1s 1s 585753190e-09 1s 1s 585757550e-09 0s 0s 585758830e-09 1s 1s 585763470e-09 1s 1s 585767790e-09 0s 0s 585769070e-09 1s 1s 585773750e-09 1s 1s 585778030e-09 0s 0s 585779310e-09 1s 1s 585784030e-09 1s 1s 585788270e-09 0s 0s 585789550e-09 1s 1s 585794310e-09 1s 1s 585798510e-09 0s 0s 585799790e-09 1s 1s 585804590e-09 1s 1s 585808750e-09 0s 0s 585810030e-09 1s 1s 585814870e-09 1s 1s 585818990e-09 0s 0s 585820270e-09 1s 1s 585825150e-09 1s 1s 585829230e-09 0s 0s 585830510e-09 1s 1s 585835430e-09 1s 1s 585839470e-09 0s 0s 585840750e-09 1s 1s 585845710e-09 1s 1s 585849710e-09 0s 0s 585850990e-09 1s 1s 585855990e-09 1s 1s 585859950e-09 0s 0s 585861230e-09 1s 1s 585866270e-09 1s 1s 585870190e-09 0s 0s 585871470e-09 1s 1s 585876550e-09 1s 1s 585880430e-09 0s 0s 585881710e-09 1s 1s 585886830e-09 1s 1s 585890670e-09 0s 0s 585891950e-09 1s 1s 585897110e-09 1s 1s 585900910e-09 0s 0s 585902190e-09 1s 1s 585907390e-09 1s 1s 585911150e-09 0s 0s 585912430e-09 1s 1s 585917670e-09 1s 1s 585921390e-09 0s 0s 585922670e-09 1s 1s 585927950e-09 1s 1s 585931630e-09 0s 0s 585932910e-09 1s 1s 585938230e-09 1s 1s 585941870e-09 0s 0s 585943150e-09 1s 1s 585948510e-09 1s 1s 585952110e-09 0s 0s 585953390e-09 1s 1s 585958790e-09 1s 1s 585962350e-09 0s 0s 585963630e-09 1s 1s 585969070e-09 1s 1s 585972590e-09 0s 0s 585973870e-09 1s 1s 585979350e-09 1s 1s 585982830e-09 0s 0s 585984110e-09 1s 1s 585989630e-09 1s 1s 585993070e-09 0s 0s 585994350e-09 1s 1s 585999910e-09 1s 1s 586003310e-09 0s 0s 586004590e-09 1s 1s 586010190e-09 1s 1s 586013550e-09 0s 0s 586014830e-09 1s 1s 586020470e-09 1s 1s 586023790e-09 0s 0s 586025070e-09 1s 1s 586030750e-09 1s 1s 586034030e-09 0s 0s 586035310e-09 1s 1s 586041030e-09 1s 1s 586044270e-09 0s 0s 586045550e-09 1s 1s 586051310e-09 1s 1s 586054510e-09 0s 0s 586055790e-09 1s 1s 586061590e-09 1s 1s 586064750e-09 0s 0s 586066030e-09 1s 1s 586071870e-09 1s 1s 586074990e-09 0s 0s 586076270e-09 1s 1s 586082150e-09 1s 1s 586085230e-09 0s 0s 586086510e-09 1s 1s 586092430e-09 1s 1s 586095470e-09 0s 0s 586096750e-09 1s 1s 586102710e-09 1s 1s 586105710e-09 0s 0s 586106990e-09 1s 1s 586112990e-09 1s 1s 586115950e-09 0s 0s 586117230e-09 1s 1s 586123270e-09 1s 1s 586126190e-09 0s 0s 586127470e-09 1s 1s 586133550e-09 1s 1s 586136430e-09 0s 0s 586137710e-09 1s 1s 586143830e-09 1s 1s 586146670e-09 0s 0s 586147950e-09 1s 1s 586154110e-09 1s 1s 586156910e-09 0s 0s 586158190e-09 1s 1s 586164390e-09 1s 1s 586167150e-09 0s 0s 586168430e-09 1s 1s 586174670e-09 1s 1s 586177390e-09 0s 0s 586178670e-09 1s 1s 586184950e-09 1s 1s 586187630e-09 0s 0s 586188910e-09 1s 1s 586195230e-09 1s 1s 586197870e-09 0s 0s 586199150e-09 1s 1s 586205510e-09 1s 1s 586208110e-09 0s 0s 586209390e-09 1s 1s 586215790e-09 1s 1s 586218350e-09 0s 0s 586219630e-09 1s 1s 586226070e-09 1s 1s 586228590e-09 0s 0s 586229870e-09 1s 1s 586236350e-09 1s 1s 586238830e-09 0s 0s 586240110e-09 1s 1s 586246630e-09 1s 1s 586249070e-09 0s 0s 586250350e-09 1s 1s 586256910e-09 1s 1s 586259310e-09 0s 0s 586260590e-09 1s 1s 586267190e-09 1s 1s 586269550e-09 0s 0s 586270830e-09 1s 1s 586277470e-09 1s 1s 586279790e-09 0s 0s 586281070e-09 1s 1s 586287750e-09 1s 1s 586290030e-09 0s 0s 586291310e-09 1s 1s 586298030e-09 1s 1s 586300270e-09 0s 0s 586301550e-09 1s 1s 586308310e-09 1s 1s 586310510e-09 0s 0s 586311790e-09 1s 1s 586318590e-09 1s 1s 586320750e-09 0s 0s 586322030e-09 1s 1s 586328870e-09 1s 1s 586330990e-09 0s 0s 586332270e-09 1s 1s 586339150e-09 1s 1s 586341230e-09 0s 0s 586342510e-09 1s 1s 586349430e-09 1s 1s 586351470e-09 0s 0s 586352750e-09 1s 1s 586359710e-09 1s 1s 586361710e-09 0s 0s 586362990e-09 1s 1s 586369990e-09 1s 1s 586371950e-09 0s 0s 586373230e-09 1s 1s 586380270e-09 1s 1s 586382190e-09 0s 0s 586383470e-09 1s 1s 586390550e-09 1s 1s 586392430e-09 0s 0s 586393710e-09 1s 1s 586400830e-09 1s 1s 586402670e-09 0s 0s 586403950e-09 1s 1s 586411110e-09 1s 1s 586412910e-09 0s 0s 586414190e-09 1s 1s 586421390e-09 1s 1s 586423150e-09 0s 0s 586424430e-09 1s 1s 586431670e-09 1s 1s 586433390e-09 0s 0s 586434670e-09 1s 1s 586441950e-09 1s 1s 586443630e-09 0s 0s 586444910e-09 1s 1s 586452230e-09 1s 1s 586453870e-09 0s 0s 586455150e-09 1s 1s 586462510e-09 1s 1s 586464110e-09 0s 0s 586465390e-09 1s 1s 586472790e-09 1s 1s 586474350e-09 0s 0s 586475630e-09 1s 1s 586483070e-09 1s 1s 586484590e-09 0s 0s 586485870e-09 1s 1s 586493350e-09 1s 1s 586494830e-09 0s 0s 586496110e-09 1s 1s 586503630e-09 1s 1s 586505070e-09 0s 0s 586506350e-09 1s 1s 586513910e-09 1s 1s 586515310e-09 0s 0s 586516590e-09 1s 1s 586524190e-09 1s 1s 586525550e-09 0s 0s 586526830e-09 1s 1s 586534470e-09 1s 1s 586535790e-09 0s 0s 586537070e-09 1s 1s 586544750e-09 1s 1s 586546030e-09 0s 0s 586547310e-09 1s 1s 586555030e-09 1s 1s 586556270e-09 0s 0s 586557550e-09 1s 1s 586565310e-09 1s 1s 586566510e-09 0s 0s 586567790e-09 1s 1s 586575590e-09 1s 1s 586576750e-09 0s 0s 586578030e-09 1s 1s 586585870e-09 1s 1s 586586990e-09 0s 0s 586588270e-09 1s 1s 586596150e-09 1s 1s 586597230e-09 0s 0s 586598510e-09 1s 1s 586606430e-09 1s 1s 586607470e-09 0s 0s 586608750e-09 1s 1s 586616710e-09 1s 1s 586617710e-09 0s 0s 586618990e-09 1s 1s 586626990e-09 1s 1s 586627950e-09 0s 0s 586629230e-09 1s 1s 586637270e-09 1s 1s 586638190e-09 0s 0s 586639470e-09 1s 1s 586647550e-09 1s 1s 586648430e-09 0s 0s 586649710e-09 1s 1s 586657830e-09 1s 1s 586658670e-09 0s 0s 586659950e-09 1s 1s 586668110e-09 1s 1s 586668910e-09 0s 0s 586670190e-09 1s 1s 586678390e-09 1s 1s 586679150e-09 0s 0s 586680430e-09 1s 1s 586688670e-09 1s 1s 586689390e-09 0s 0s 586690670e-09 1s 1s 586698950e-09 1s 1s 586699630e-09 0s 0s 586700910e-09 1s 1s 586709230e-09 1s 1s 586709870e-09 0s 0s 586711150e-09 1s 1s 586719510e-09 1s 1s 586720110e-09 0s 0s 586721390e-09 1s 1s 586729790e-09 1s 1s 586730350e-09 0s 0s 586731630e-09 1s 1s 586740070e-09 1s 1s 586740590e-09 0s 0s 586741870e-09 1s 1s 586750350e-09 1s 1s 586750830e-09 0s 0s 586752110e-09 1s 1s 586760630e-09 1s 1s 586761070e-09 0s 0s 586762350e-09 1s 1s 586770910e-09 1s 1s 586771310e-09 0s 0s 586772590e-09 1s 1s 586781190e-09 1s 1s 586781550e-09 0s 0s 586782830e-09 1s 1s 586791470e-09 1s 1s 586791790e-09 0s 0s 586793070e-09 1s 1s 586801750e-09 1s 1s 586802030e-09 0s 0s 586803310e-09 1s 1s 586812030e-09 1s 1s 586812270e-09 0s 0s 586813550e-09 1s 1s 586822310e-09 1s 1s 586822510e-09 0s 0s 586823790e-09 1s 1s 586832590e-09 1s 1s 586832750e-09 0s 0s 586834030e-09 1s 1s 586842870e-09 1s 1s 586842990e-09 0s 0s 586844270e-09 1s 1s 586853150e-09 1s 1s 586853230e-09 0s 0s 586854510e-09 1s 1s 586863430e-09 1s 1s 586863470e-09 0s 0s 586864750e-09 1s 1s 586873710e-09 0s 0s 586874990e-09 1s 1s 586883950e-09 0s 0s 586883990e-09 0s 0s 586885230e-09 1s 1s 586894190e-09 0s 0s 586894270e-09 0s 0s 586895470e-09 1s 1s 586904430e-09 0s 0s 586904550e-09 0s 0s 586905710e-09 1s 1s 586914670e-09 0s 0s 586914830e-09 0s 0s 586915950e-09 1s 1s 586924910e-09 0s 0s 586925110e-09 0s 0s 586926190e-09 1s 1s 586935150e-09 0s 0s 586935390e-09 0s 0s 586936430e-09 1s 1s 586945390e-09 0s 0s 586945670e-09 0s 0s 586946670e-09 1s 1s 586955630e-09 0s 0s 586955950e-09 0s 0s 586956910e-09 1s 1s 586965870e-09 0s 0s 586966230e-09 0s 0s 586967150e-09 1s 1s 586976110e-09 0s 0s 586976510e-09 0s 0s 586977390e-09 1s 1s 586986350e-09 0s 0s 586986790e-09 0s 0s 586987630e-09 1s 1s 586996590e-09 0s 0s 586997070e-09 0s 0s 586997870e-09 1s 1s 587006830e-09 0s 0s 587007350e-09 0s 0s 587008110e-09 1s 1s 587017070e-09 0s 0s 587017630e-09 0s 0s 587018350e-09 1s 1s 587027310e-09 0s 0s 587027910e-09 0s 0s 587028590e-09 1s 1s 587037550e-09 0s 0s 587038190e-09 0s 0s 587038830e-09 1s 1s 587047790e-09 0s 0s 587048470e-09 0s 0s 587049070e-09 1s 1s 587058030e-09 0s 0s 587058750e-09 0s 0s 587059310e-09 1s 1s 587068270e-09 0s 0s 587069030e-09 0s 0s 587069550e-09 1s 1s 587078510e-09 0s 0s 587079310e-09 0s 0s 587079790e-09 1s 1s 587088750e-09 0s 0s 587089590e-09 0s 0s 587090030e-09 1s 1s 587098990e-09 0s 0s 587099870e-09 0s 0s 587100270e-09 1s 1s 587109230e-09 0s 0s 587110150e-09 0s 0s 587110510e-09 1s 1s 587119470e-09 0s 0s 587120430e-09 0s 0s 587120750e-09 1s 1s 587129710e-09 0s 0s 587130710e-09 0s 0s 587130990e-09 1s 1s 587139950e-09 0s 0s 587140990e-09 0s 0s 587141230e-09 1s 1s 587150190e-09 0s 0s 587151270e-09 0s 0s 587151470e-09 1s 1s 587160430e-09 0s 0s 587161550e-09 0s 0s 587161710e-09 1s 1s 587170670e-09 0s 0s 587171830e-09 0s 0s 587171950e-09 1s 1s 587180910e-09 0s 0s 587182110e-09 0s 0s 587182190e-09 1s 1s 587191150e-09 0s 0s 587192390e-09 0s 0s 587192430e-09 1s 1s 587201390e-09 0s 0s 587202670e-09 1s 1s 587202710e-09 1s 1s 587211670e-09 0s 0s 587212910e-09 1s 1s 587212990e-09 1s 1s 587221910e-09 0s 0s 587223150e-09 1s 1s 587223270e-09 1s 1s 587232150e-09 0s 0s 587233390e-09 1s 1s 587233550e-09 1s 1s 587242390e-09 0s 0s 587243630e-09 1s 1s 587243830e-09 1s 1s 587252630e-09 0s 0s 587253870e-09 1s 1s 587254110e-09 1s 1s 587262870e-09 0s 0s 587264110e-09 1s 1s 587264390e-09 1s 1s 587273110e-09 0s 0s 587274350e-09 1s 1s 587274670e-09 1s 1s 587283350e-09 0s 0s 587284590e-09 1s 1s 587284950e-09 1s 1s 587293590e-09 0s 0s 587294830e-09 1s 1s 587295230e-09 1s 1s 587303830e-09 0s 0s 587305070e-09 1s 1s 587305510e-09 1s 1s 587314070e-09 0s 0s 587315310e-09 1s 1s 587315790e-09 1s 1s 587324310e-09 0s 0s 587325550e-09 1s 1s 587326070e-09 1s 1s 587334550e-09 0s 0s 587335790e-09 1s 1s 587336350e-09 1s 1s 587344790e-09 0s 0s 587346030e-09 1s 1s 587346630e-09 1s 1s 587355030e-09 0s 0s 587356270e-09 1s 1s 587356910e-09 1s 1s 587365270e-09 0s 0s 587366510e-09 1s 1s 587367190e-09 1s 1s 587375510e-09 0s 0s 587376750e-09 1s 1s 587377470e-09 1s 1s 587385750e-09 0s 0s 587386990e-09 1s 1s 587387750e-09 1s 1s 587395990e-09 0s 0s 587397230e-09 1s 1s 587398030e-09 1s 1s 587406230e-09 0s 0s 587407470e-09 1s 1s 587408310e-09 1s 1s 587416470e-09 0s 0s 587417710e-09 1s 1s 587418590e-09 1s 1s 587426710e-09 0s 0s 587427950e-09 1s 1s 587428870e-09 1s 1s 587436950e-09 0s 0s 587438190e-09 1s 1s 587439150e-09 1s 1s 587447190e-09 0s 0s 587448430e-09 1s 1s 587449430e-09 1s 1s 587457430e-09 0s 0s 587458670e-09 1s 1s 587459710e-09 1s 1s 587467670e-09 0s 0s 587468910e-09 1s 1s 587469990e-09 1s 1s 587477910e-09 0s 0s 587479150e-09 1s 1s 587480270e-09 1s 1s 587488150e-09 0s 0s 587489390e-09 1s 1s 587490550e-09 1s 1s 587498390e-09 0s 0s 587499630e-09 1s 1s 587500830e-09 1s 1s 587508630e-09 0s 0s 587509870e-09 1s 1s 587511110e-09 1s 1s 587518870e-09 0s 0s 587520110e-09 1s 1s 587521390e-09 1s 1s 587529110e-09 0s 0s 587530350e-09 1s 1s 587531670e-09 1s 1s 587539350e-09 0s 0s 587540590e-09 1s 1s 587541950e-09 1s 1s 587549590e-09 0s 0s 587550830e-09 1s 1s 587552230e-09 1s 1s 587559830e-09 0s 0s 587561070e-09 1s 1s 587562510e-09 1s 1s 587570070e-09 0s 0s 587571310e-09 1s 1s 587572790e-09 1s 1s 587580310e-09 0s 0s 587581550e-09 1s 1s 587583070e-09 1s 1s 587590550e-09 0s 0s 587591790e-09 1s 1s 587593350e-09 1s 1s 587600790e-09 0s 0s 587602030e-09 1s 1s 587603630e-09 1s 1s 587611030e-09 0s 0s 587612270e-09 1s 1s 587613910e-09 1s 1s 587621270e-09 0s 0s 587622510e-09 1s 1s 587624190e-09 1s 1s 587631510e-09 0s 0s 587632750e-09 1s 1s 587634470e-09 1s 1s 587641750e-09 0s 0s 587642990e-09 1s 1s 587644750e-09 1s 1s 587651990e-09 0s 0s 587653230e-09 1s 1s 587655030e-09 1s 1s 587662230e-09 0s 0s 587663470e-09 1s 1s 587665310e-09 1s 1s 587672470e-09 0s 0s 587673710e-09 1s 1s 587675590e-09 1s 1s 587682710e-09 0s 0s 587683950e-09 1s 1s 587685870e-09 1s 1s 587692950e-09 0s 0s 587694190e-09 1s 1s 587696150e-09 1s 1s 587703190e-09 0s 0s 587704430e-09 1s 1s 587706430e-09 1s 1s 587713430e-09 0s 0s 587714670e-09 1s 1s 587716710e-09 1s 1s 587723670e-09 0s 0s 587724910e-09 1s 1s 587726990e-09 1s 1s 587733910e-09 0s 0s 587735150e-09 1s 1s 587737270e-09 1s 1s 587744150e-09 0s 0s 587745390e-09 1s 1s 587747550e-09 1s 1s 587754390e-09 0s 0s 587755630e-09 1s 1s 587757830e-09 1s 1s 587764630e-09 0s 0s 587765870e-09 1s 1s 587768110e-09 1s 1s 587774870e-09 0s 0s 587776110e-09 1s 1s 587778390e-09 1s 1s 587785110e-09 0s 0s 587786350e-09 1s 1s 587788670e-09 1s 1s 587795350e-09 0s 0s 587796590e-09 1s 1s 587798950e-09 1s 1s 587805590e-09 0s 0s 587806830e-09 1s 1s 587809230e-09 1s 1s 587815830e-09 0s 0s 587817070e-09 1s 1s 587819510e-09 1s 1s 587826070e-09 0s 0s 587827310e-09 1s 1s 587829790e-09 1s 1s 587836310e-09 0s 0s 587837550e-09 1s 1s 587840070e-09 1s 1s 587846550e-09 0s 0s 587847790e-09 1s 1s 587850350e-09 1s 1s 587856790e-09 0s 0s 587858030e-09 1s 1s 587860630e-09 1s 1s 587867030e-09 0s 0s 587868270e-09 1s 1s 587870910e-09 1s 1s 587877270e-09 0s 0s 587878510e-09 1s 1s 587881190e-09 1s 1s 587887510e-09 0s 0s 587888750e-09 1s 1s 587891470e-09 1s 1s 587897750e-09 0s 0s 587898990e-09 1s 1s 587901750e-09 1s 1s 587907990e-09 0s 0s 587909230e-09 1s 1s 587912030e-09 1s 1s 587918230e-09 0s 0s 587919470e-09 1s 1s 587922310e-09 1s 1s 587928470e-09 0s 0s 587929710e-09 1s 1s 587932590e-09 1s 1s 587938710e-09 0s 0s 587939950e-09 1s 1s 587942870e-09 1s 1s 587948950e-09 0s 0s 587950190e-09 1s 1s 587953150e-09 1s 1s 587959190e-09 0s 0s 587960430e-09 1s 1s 587963430e-09 1s 1s 587969430e-09 0s 0s 587970670e-09 1s 1s 587973710e-09 1s 1s 587979670e-09 0s 0s 587980910e-09 1s 1s 587983990e-09 1s 1s 587989910e-09 0s 0s 587991150e-09 1s 1s 587994270e-09 1s 1s 588000150e-09 0s 0s 588001390e-09 1s 1s 588004550e-09 1s 1s 588010390e-09 0s 0s 588011630e-09 1s 1s 588014830e-09 1s 1s 588020630e-09 0s 0s 588021870e-09 1s 1s 588025110e-09 1s 1s 588030870e-09 0s 0s 588032110e-09 1s 1s 588035390e-09 1s 1s 588041110e-09 0s 0s 588042350e-09 1s 1s 588045670e-09 1s 1s 588051350e-09 0s 0s 588052590e-09 1s 1s 588055950e-09 1s 1s 588061590e-09 0s 0s 588062830e-09 1s 1s 588066230e-09 1s 1s 588071830e-09 0s 0s 588073070e-09 1s 1s 588076510e-09 1s 1s 588082070e-09 0s 0s 588083310e-09 1s 1s 588086790e-09 1s 1s 588092310e-09 0s 0s 588093550e-09 1s 1s 588097070e-09 1s 1s 588102550e-09 0s 0s 588103790e-09 1s 1s 588107350e-09 1s 1s 588112790e-09 0s 0s 588114030e-09 1s 1s 588117630e-09 1s 1s 588123030e-09 0s 0s 588124270e-09 1s 1s 588127910e-09 1s 1s 588133270e-09 0s 0s 588134510e-09 1s 1s 588138190e-09 1s 1s 588143510e-09 0s 0s 588144750e-09 1s 1s 588148470e-09 1s 1s 588153750e-09 0s 0s 588154990e-09 1s 1s 588158750e-09 1s 1s 588163990e-09 0s 0s 588165230e-09 1s 1s 588169030e-09 1s 1s 588174230e-09 0s 0s 588175470e-09 1s 1s 588179310e-09 1s 1s 588184470e-09 0s 0s 588185710e-09 1s 1s 588189590e-09 1s 1s 588194710e-09 0s 0s 588195950e-09 1s 1s 588199870e-09 1s 1s 588204950e-09 0s 0s 588206190e-09 1s 1s 588210150e-09 1s 1s 588215190e-09 0s 0s 588216430e-09 1s 1s 588220430e-09 1s 1s 588225430e-09 0s 0s 588226670e-09 1s 1s 588230710e-09 1s 1s 588235670e-09 0s 0s 588236910e-09 1s 1s 588240990e-09 1s 1s 588245910e-09 0s 0s 588247150e-09 1s 1s 588251270e-09 1s 1s 588256150e-09 0s 0s 588257390e-09 1s 1s 588261550e-09 1s 1s 588266390e-09 0s 0s 588267630e-09 1s 1s 588271830e-09 1s 1s 588276630e-09 0s 0s 588277870e-09 1s 1s 588282110e-09 1s 1s 588286870e-09 0s 0s 588288110e-09 1s 1s 588292390e-09 1s 1s 588297110e-09 0s 0s 588298350e-09 1s 1s 588302670e-09 1s 1s 588307350e-09 0s 0s 588308590e-09 1s 1s 588312950e-09 1s 1s 588317590e-09 0s 0s 588318830e-09 1s 1s 588323230e-09 1s 1s 588327830e-09 0s 0s 588329070e-09 1s 1s 588333510e-09 1s 1s 588338070e-09 0s 0s 588339310e-09 1s 1s 588343790e-09 1s 1s 588348310e-09 0s 0s 588349550e-09 1s 1s 588354070e-09 1s 1s 588358550e-09 0s 0s 588359790e-09 1s 1s 588364350e-09 1s 1s 588368790e-09 0s 0s 588370030e-09 1s 1s 588374630e-09 1s 1s 588379030e-09 0s 0s 588380270e-09 1s 1s 588384910e-09 1s 1s 588389270e-09 0s 0s 588390510e-09 1s 1s 588395190e-09 1s 1s 588399510e-09 0s 0s 588400750e-09 1s 1s 588405470e-09 1s 1s 588409750e-09 0s 0s 588410990e-09 1s 1s 588415750e-09 1s 1s 588419990e-09 0s 0s 588421230e-09 1s 1s 588426030e-09 1s 1s 588430230e-09 0s 0s 588431470e-09 1s 1s 588436310e-09 1s 1s 588440470e-09 0s 0s 588441710e-09 1s 1s 588446590e-09 1s 1s 588450710e-09 0s 0s 588451950e-09 1s 1s 588456870e-09 1s 1s 588460950e-09 0s 0s 588462190e-09 1s 1s 588467150e-09 1s 1s 588471190e-09 0s 0s 588472430e-09 1s 1s 588477430e-09 1s 1s 588481430e-09 0s 0s 588482670e-09 1s 1s 588487710e-09 1s 1s 588491670e-09 0s 0s 588492910e-09 1s 1s 588497990e-09 1s 1s 588501910e-09 0s 0s 588503150e-09 1s 1s 588508270e-09 1s 1s 588512150e-09 0s 0s 588513390e-09 1s 1s 588518550e-09 1s 1s 588522390e-09 0s 0s 588523630e-09 1s 1s 588528830e-09 1s 1s 588532630e-09 0s 0s 588533870e-09 1s 1s 588539110e-09 1s 1s 588542870e-09 0s 0s 588544110e-09 1s 1s 588549390e-09 1s 1s 588553110e-09 0s 0s 588554350e-09 1s 1s 588559670e-09 1s 1s 588563350e-09 0s 0s 588564590e-09 1s 1s 588569950e-09 1s 1s 588573590e-09 0s 0s 588574830e-09 1s 1s 588580230e-09 1s 1s 588583830e-09 0s 0s 588585070e-09 1s 1s 588590510e-09 1s 1s 588594070e-09 0s 0s 588595310e-09 1s 1s 588600790e-09 1s 1s 588604310e-09 0s 0s 588605550e-09 1s 1s 588611070e-09 1s 1s 588614550e-09 0s 0s 588615790e-09 1s 1s 588621350e-09 1s 1s 588624790e-09 0s 0s 588626030e-09 1s 1s 588631630e-09 1s 1s 588635030e-09 0s 0s 588636270e-09 1s 1s 588641910e-09 1s 1s 588645270e-09 0s 0s 588646510e-09 1s 1s 588652190e-09 1s 1s 588655510e-09 0s 0s 588656750e-09 1s 1s 588662470e-09 1s 1s 588665750e-09 0s 0s 588666990e-09 1s 1s 588672750e-09 1s 1s 588675990e-09 0s 0s 588677230e-09 1s 1s 588683030e-09 1s 1s 588686230e-09 0s 0s 588687470e-09 1s 1s 588693310e-09 1s 1s 588696470e-09 0s 0s 588697710e-09 1s 1s 588703590e-09 1s 1s 588706710e-09 0s 0s 588707950e-09 1s 1s 588713870e-09 1s 1s 588716950e-09 0s 0s 588718190e-09 1s 1s 588724150e-09 1s 1s 588727190e-09 0s 0s 588728430e-09 1s 1s 588734430e-09 1s 1s 588737430e-09 0s 0s 588738670e-09 1s 1s 588744710e-09 1s 1s 588747670e-09 0s 0s 588748910e-09 1s 1s 588754990e-09 1s 1s 588757910e-09 0s 0s 588759150e-09 1s 1s 588765270e-09 1s 1s 588768150e-09 0s 0s 588769390e-09 1s 1s 588775550e-09 1s 1s 588778390e-09 0s 0s 588779630e-09 1s 1s 588785830e-09 1s 1s 588788630e-09 0s 0s 588789870e-09 1s 1s 588796110e-09 1s 1s 588798870e-09 0s 0s 588800110e-09 1s 1s 588806390e-09 1s 1s 588809110e-09 0s 0s 588810350e-09 1s 1s 588816670e-09 1s 1s 588819350e-09 0s 0s 588820590e-09 1s 1s 588826950e-09 1s 1s 588829590e-09 0s 0s 588830830e-09 1s 1s 588837230e-09 1s 1s 588839830e-09 0s 0s 588841070e-09 1s 1s 588847510e-09 1s 1s 588850070e-09 0s 0s 588851310e-09 1s 1s 588857790e-09 1s 1s 588860310e-09 0s 0s 588861550e-09 1s 1s 588868070e-09 1s 1s 588870550e-09 0s 0s 588871790e-09 1s 1s 588878350e-09 1s 1s 588880790e-09 0s 0s 588882030e-09 1s 1s 588888630e-09 1s 1s 588891030e-09 0s 0s 588892270e-09 1s 1s 588898910e-09 1s 1s 588901270e-09 0s 0s 588902510e-09 1s 1s 588909190e-09 1s 1s 588911510e-09 0s 0s 588912750e-09 1s 1s 588919470e-09 1s 1s 588921750e-09 0s 0s 588922990e-09 1s 1s 588929750e-09 1s 1s 588931990e-09 0s 0s 588933230e-09 1s 1s 588940030e-09 1s 1s 588942230e-09 0s 0s 588943470e-09 1s 1s 588950310e-09 1s 1s 588952470e-09 0s 0s 588953710e-09 1s 1s 588960590e-09 1s 1s 588962710e-09 0s 0s 588963950e-09 1s 1s 588970870e-09 1s 1s 588972950e-09 0s 0s 588974190e-09 1s 1s 588981150e-09 1s 1s 588983190e-09 0s 0s 588984430e-09 1s 1s 588991430e-09 1s 1s 588993430e-09 0s 0s 588994670e-09 1s 1s 589001710e-09 1s 1s 589003670e-09 0s 0s 589004910e-09 1s 1s 589011990e-09 1s 1s 589013910e-09 0s 0s 589015150e-09 1s 1s 589022270e-09 1s 1s 589024150e-09 0s 0s 589025390e-09 1s 1s 589032550e-09 1s 1s 589034390e-09 0s 0s 589035630e-09 1s 1s 589042830e-09 1s 1s 589044630e-09 0s 0s 589045870e-09 1s 1s 589053110e-09 1s 1s 589054870e-09 0s 0s 589056110e-09 1s 1s 589063390e-09 1s 1s 589065110e-09 0s 0s 589066350e-09 1s 1s 589073670e-09 1s 1s 589075350e-09 0s 0s 589076590e-09 1s 1s 589083950e-09 1s 1s 589085590e-09 0s 0s 589086830e-09 1s 1s 589094230e-09 1s 1s 589095830e-09 0s 0s 589097070e-09 1s 1s 589104510e-09 1s 1s 589106070e-09 0s 0s 589107310e-09 1s 1s 589114790e-09 1s 1s 589116310e-09 0s 0s 589117550e-09 1s 1s 589125070e-09 1s 1s 589126550e-09 0s 0s 589127790e-09 1s 1s 589135350e-09 1s 1s 589136790e-09 0s 0s 589138030e-09 1s 1s 589145630e-09 1s 1s 589147030e-09 0s 0s 589148270e-09 1s 1s 589155910e-09 1s 1s 589157270e-09 0s 0s 589158510e-09 1s 1s 589166190e-09 1s 1s 589167510e-09 0s 0s 589168750e-09 1s 1s 589176470e-09 1s 1s 589177750e-09 0s 0s 589178990e-09 1s 1s 589186750e-09 1s 1s 589187990e-09 0s 0s 589189230e-09 1s 1s 589197030e-09 1s 1s 589198230e-09 0s 0s 589199470e-09 1s 1s 589207310e-09 1s 1s 589208470e-09 0s 0s 589209710e-09 1s 1s 589217590e-09 1s 1s 589218710e-09 0s 0s 589219950e-09 1s 1s 589227870e-09 1s 1s 589228950e-09 0s 0s 589230190e-09 1s 1s 589238150e-09 1s 1s 589239190e-09 0s 0s 589240430e-09 1s 1s 589248430e-09 1s 1s 589249430e-09 0s 0s 589250670e-09 1s 1s 589258710e-09 1s 1s 589259670e-09 0s 0s 589260910e-09 1s 1s 589268990e-09 1s 1s 589269910e-09 0s 0s 589271150e-09 1s 1s 589279270e-09 1s 1s 589280150e-09 0s 0s 589281390e-09 1s 1s 589289550e-09 1s 1s 589290390e-09 0s 0s 589291630e-09 1s 1s 589299830e-09 1s 1s 589300630e-09 0s 0s 589301870e-09 1s 1s 589310110e-09 1s 1s 589310870e-09 0s 0s 589312110e-09 1s 1s 589320390e-09 1s 1s 589321110e-09 0s 0s 589322350e-09 1s 1s 589330670e-09 1s 1s 589331350e-09 0s 0s 589332590e-09 1s 1s 589340950e-09 1s 1s 589341590e-09 0s 0s 589342830e-09 1s 1s 589351230e-09 1s 1s 589351830e-09 0s 0s 589353070e-09 1s 1s 589361510e-09 1s 1s 589362070e-09 0s 0s 589363310e-09 1s 1s 589371790e-09 1s 1s 589372310e-09 0s 0s 589373550e-09 1s 1s 589382070e-09 1s 1s 589382550e-09 0s 0s 589383790e-09 1s 1s 589392350e-09 1s 1s 589392790e-09 0s 0s 589394030e-09 1s 1s 589402630e-09 1s 1s 589403030e-09 0s 0s 589404270e-09 1s 1s 589412910e-09 1s 1s 589413270e-09 0s 0s 589414510e-09 1s 1s 589423190e-09 1s 1s 589423510e-09 0s 0s 589424750e-09 1s 1s 589433470e-09 1s 1s 589433750e-09 0s 0s 589434990e-09 1s 1s 589443750e-09 1s 1s 589443990e-09 0s 0s 589445230e-09 1s 1s 589454030e-09 1s 1s 589454230e-09 0s 0s 589455470e-09 1s 1s 589464310e-09 1s 1s 589464470e-09 0s 0s 589465710e-09 1s 1s 589474590e-09 1s 1s 589474710e-09 0s 0s 589475950e-09 1s 1s 589484870e-09 1s 1s 589484950e-09 0s 0s 589486190e-09 1s 1s 589495150e-09 1s 1s 589495190e-09 0s 0s 589496430e-09 1s 1s 589505430e-09 0s 0s 589506670e-09 1s 1s 589515670e-09 0s 0s 589515710e-09 0s 0s 589516910e-09 1s 1s 589525910e-09 0s 0s 589525990e-09 0s 0s 589527150e-09 1s 1s 589536150e-09 0s 0s 589536270e-09 0s 0s 589537390e-09 1s 1s 589546390e-09 0s 0s 589546550e-09 0s 0s 589547630e-09 1s 1s 589556630e-09 0s 0s 589556830e-09 0s 0s 589557870e-09 1s 1s 589566870e-09 0s 0s 589567110e-09 0s 0s 589568110e-09 1s 1s 589577110e-09 0s 0s 589577390e-09 0s 0s 589578350e-09 1s 1s 589587350e-09 0s 0s 589587670e-09 0s 0s 589588590e-09 1s 1s 589597590e-09 0s 0s 589597950e-09 0s 0s 589598830e-09 1s 1s 589607830e-09 0s 0s 589608230e-09 0s 0s 589609070e-09 1s 1s 589618070e-09 0s 0s 589618510e-09 0s 0s 589619310e-09 1s 1s 589628310e-09 0s 0s 589628790e-09 0s 0s 589629550e-09 1s 1s 589638550e-09 0s 0s 589639070e-09 0s 0s 589639790e-09 1s 1s 589648790e-09 0s 0s 589649350e-09 0s 0s 589650030e-09 1s 1s 589659030e-09 0s 0s 589659630e-09 0s 0s 589660270e-09 1s 1s 589669270e-09 0s 0s 589669910e-09 0s 0s 589670510e-09 1s 1s 589679510e-09 0s 0s 589680190e-09 0s 0s 589680750e-09 1s 1s 589689750e-09 0s 0s 589690470e-09 0s 0s 589690990e-09 1s 1s 589699990e-09 0s 0s 589700750e-09 0s 0s 589701230e-09 1s 1s 589710230e-09 0s 0s 589711030e-09 0s 0s 589711470e-09 1s 1s 589720470e-09 0s 0s 589721310e-09 0s 0s 589721710e-09 1s 1s 589730710e-09 0s 0s 589731590e-09 0s 0s 589731950e-09 1s 1s 589740950e-09 0s 0s 589741870e-09 0s 0s 589742190e-09 1s 1s 589751190e-09 0s 0s 589752150e-09 0s 0s 589752430e-09 1s 1s 589761430e-09 0s 0s 589762430e-09 0s 0s 589762670e-09 1s 1s 589771670e-09 0s 0s 589772710e-09 0s 0s 589772910e-09 1s 1s 589781910e-09 0s 0s 589782990e-09 0s 0s 589783150e-09 1s 1s 589792150e-09 0s 0s 589793270e-09 0s 0s 589793390e-09 1s 1s 589802390e-09 0s 0s 589803550e-09 0s 0s 589803630e-09 1s 1s 589812630e-09 0s 0s 589813830e-09 0s 0s 589813870e-09 1s 1s 589822870e-09 0s 0s 589824110e-09 1s 1s 589824150e-09 1s 1s 589833150e-09 0s 0s 589834350e-09 1s 1s 589834430e-09 1s 1s 589843390e-09 0s 0s 589844590e-09 1s 1s 589844710e-09 1s 1s 589853630e-09 0s 0s 589854830e-09 1s 1s 589854990e-09 1s 1s 589863870e-09 0s 0s 589865070e-09 1s 1s 589865270e-09 1s 1s 589874110e-09 0s 0s 589875310e-09 1s 1s 589875550e-09 1s 1s 589884350e-09 0s 0s 589885550e-09 1s 1s 589885830e-09 1s 1s 589894590e-09 0s 0s 589895790e-09 1s 1s 589896110e-09 1s 1s 589904830e-09 0s 0s 589906030e-09 1s 1s 589906390e-09 1s 1s 589915070e-09 0s 0s 589916270e-09 1s 1s 589916670e-09 1s 1s 589925310e-09 0s 0s 589926510e-09 1s 1s 589926950e-09 1s 1s 589935550e-09 0s 0s 589936750e-09 1s 1s 589937230e-09 1s 1s 589945790e-09 0s 0s 589946990e-09 1s 1s 589947510e-09 1s 1s 589956030e-09 0s 0s 589957230e-09 1s 1s 589957790e-09 1s 1s 589966270e-09 0s 0s 589967470e-09 1s 1s 589968070e-09 1s 1s 589976510e-09 0s 0s 589977710e-09 1s 1s 589978350e-09 1s 1s 589986750e-09 0s 0s 589987950e-09 1s 1s 589988630e-09 1s 1s 589996990e-09 0s 0s 589998190e-09 1s 1s 589998910e-09 1s 1s 590007230e-09 0s 0s 590008430e-09 1s 1s 590009190e-09 1s 1s 590017470e-09 0s 0s 590018670e-09 1s 1s 590019470e-09 1s 1s 590027710e-09 0s 0s 590028910e-09 1s 1s 590029750e-09 1s 1s 590037950e-09 0s 0s 590039150e-09 1s 1s 590040030e-09 1s 1s 590048190e-09 0s 0s 590049390e-09 1s 1s 590050310e-09 1s 1s 590058430e-09 0s 0s 590059630e-09 1s 1s 590060590e-09 1s 1s 590068670e-09 0s 0s 590069870e-09 1s 1s 590070870e-09 1s 1s 590078910e-09 0s 0s 590080110e-09 1s 1s 590081150e-09 1s 1s 590089150e-09 0s 0s 590090350e-09 1s 1s 590091430e-09 1s 1s 590099390e-09 0s 0s 590100590e-09 1s 1s 590101710e-09 1s 1s 590109630e-09 0s 0s 590110830e-09 1s 1s 590111990e-09 1s 1s 590119870e-09 0s 0s 590121070e-09 1s 1s 590122270e-09 1s 1s 590130110e-09 0s 0s 590131310e-09 1s 1s 590132550e-09 1s 1s 590140350e-09 0s 0s 590141550e-09 1s 1s 590142830e-09 1s 1s 590150590e-09 0s 0s 590151790e-09 1s 1s 590153110e-09 1s 1s 590160830e-09 0s 0s 590162030e-09 1s 1s 590163390e-09 1s 1s 590171070e-09 0s 0s 590172270e-09 1s 1s 590173670e-09 1s 1s 590181310e-09 0s 0s 590182510e-09 1s 1s 590183950e-09 1s 1s 590191550e-09 0s 0s 590192750e-09 1s 1s 590194230e-09 1s 1s 590201790e-09 0s 0s 590202990e-09 1s 1s 590204510e-09 1s 1s 590212030e-09 0s 0s 590213230e-09 1s 1s 590214790e-09 1s 1s 590222270e-09 0s 0s 590223470e-09 1s 1s 590225070e-09 1s 1s 590232510e-09 0s 0s 590233710e-09 1s 1s 590235350e-09 1s 1s 590242750e-09 0s 0s 590243950e-09 1s 1s 590245630e-09 1s 1s 590252990e-09 0s 0s 590254190e-09 1s 1s 590255910e-09 1s 1s 590263230e-09 0s 0s 590264430e-09 1s 1s 590266190e-09 1s 1s 590273470e-09 0s 0s 590274670e-09 1s 1s 590276470e-09 1s 1s 590283710e-09 0s 0s 590284910e-09 1s 1s 590286750e-09 1s 1s 590293950e-09 0s 0s 590295150e-09 1s 1s 590297030e-09 1s 1s 590304190e-09 0s 0s 590305390e-09 1s 1s 590307310e-09 1s 1s 590314430e-09 0s 0s 590315630e-09 1s 1s 590317590e-09 1s 1s 590324670e-09 0s 0s 590325870e-09 1s 1s 590327870e-09 1s 1s 590334910e-09 0s 0s 590336110e-09 1s 1s 590338150e-09 1s 1s 590345150e-09 0s 0s 590346350e-09 1s 1s 590348430e-09 1s 1s 590355390e-09 0s 0s 590356590e-09 1s 1s 590358710e-09 1s 1s 590365630e-09 0s 0s 590366830e-09 1s 1s 590368990e-09 1s 1s 590375870e-09 0s 0s 590377070e-09 1s 1s 590379270e-09 1s 1s 590386110e-09 0s 0s 590387310e-09 1s 1s 590389550e-09 1s 1s 590396350e-09 0s 0s 590397550e-09 1s 1s 590399830e-09 1s 1s 590406590e-09 0s 0s 590407790e-09 1s 1s 590410110e-09 1s 1s 590416830e-09 0s 0s 590418030e-09 1s 1s 590420390e-09 1s 1s 590427070e-09 0s 0s 590428270e-09 1s 1s 590430670e-09 1s 1s 590437310e-09 0s 0s 590438510e-09 1s 1s 590440950e-09 1s 1s 590447550e-09 0s 0s 590448750e-09 1s 1s 590451230e-09 1s 1s 590457790e-09 0s 0s 590458990e-09 1s 1s 590461510e-09 1s 1s 590468030e-09 0s 0s 590469230e-09 1s 1s 590471790e-09 1s 1s 590478270e-09 0s 0s 590479470e-09 1s 1s 590482070e-09 1s 1s 590488510e-09 0s 0s 590489710e-09 1s 1s 590492350e-09 1s 1s 590498750e-09 0s 0s 590499950e-09 1s 1s 590502630e-09 1s 1s 590508990e-09 0s 0s 590510190e-09 1s 1s 590512910e-09 1s 1s 590519230e-09 0s 0s 590520430e-09 1s 1s 590523190e-09 1s 1s 590529470e-09 0s 0s 590530670e-09 1s 1s 590533470e-09 1s 1s 590539710e-09 0s 0s 590540910e-09 1s 1s 590543750e-09 1s 1s 590549950e-09 0s 0s 590551150e-09 1s 1s 590554030e-09 1s 1s 590560190e-09 0s 0s 590561390e-09 1s 1s 590564310e-09 1s 1s 590570430e-09 0s 0s 590571630e-09 1s 1s 590574590e-09 1s 1s 590580670e-09 0s 0s 590581870e-09 1s 1s 590584870e-09 1s 1s 590590910e-09 0s 0s 590592110e-09 1s 1s 590595150e-09 1s 1s 590601150e-09 0s 0s 590602350e-09 1s 1s 590605430e-09 1s 1s 590611390e-09 0s 0s 590612590e-09 1s 1s 590615710e-09 1s 1s 590621630e-09 0s 0s 590622830e-09 1s 1s 590625990e-09 1s 1s 590631870e-09 0s 0s 590633070e-09 1s 1s 590636270e-09 1s 1s 590642110e-09 0s 0s 590643310e-09 1s 1s 590646550e-09 1s 1s 590652350e-09 0s 0s 590653550e-09 1s 1s 590656830e-09 1s 1s 590662590e-09 0s 0s 590663790e-09 1s 1s 590667110e-09 1s 1s 590672830e-09 0s 0s 590674030e-09 1s 1s 590677390e-09 1s 1s 590683070e-09 0s 0s 590684270e-09 1s 1s 590687670e-09 1s 1s 590693310e-09 0s 0s 590694510e-09 1s 1s 590697950e-09 1s 1s 590703550e-09 0s 0s 590704750e-09 1s 1s 590708230e-09 1s 1s 590713790e-09 0s 0s 590714990e-09 1s 1s 590718510e-09 1s 1s 590724030e-09 0s 0s 590725230e-09 1s 1s 590728790e-09 1s 1s 590734270e-09 0s 0s 590735470e-09 1s 1s 590739070e-09 1s 1s 590744510e-09 0s 0s 590745710e-09 1s 1s 590749350e-09 1s 1s 590754750e-09 0s 0s 590755950e-09 1s 1s 590759630e-09 1s 1s 590764990e-09 0s 0s 590766190e-09 1s 1s 590769910e-09 1s 1s 590775230e-09 0s 0s 590776430e-09 1s 1s 590780190e-09 1s 1s 590785470e-09 0s 0s 590786670e-09 1s 1s 590790470e-09 1s 1s 590795710e-09 0s 0s 590796910e-09 1s 1s 590800750e-09 1s 1s 590805950e-09 0s 0s 590807150e-09 1s 1s 590811030e-09 1s 1s 590816190e-09 0s 0s 590817390e-09 1s 1s 590821310e-09 1s 1s 590826430e-09 0s 0s 590827630e-09 1s 1s 590831590e-09 1s 1s 590836670e-09 0s 0s 590837870e-09 1s 1s 590841870e-09 1s 1s 590846910e-09 0s 0s 590848110e-09 1s 1s 590852150e-09 1s 1s 590857150e-09 0s 0s 590858350e-09 1s 1s 590862430e-09 1s 1s 590867390e-09 0s 0s 590868590e-09 1s 1s 590872710e-09 1s 1s 590877630e-09 0s 0s 590878830e-09 1s 1s 590882990e-09 1s 1s 590887870e-09 0s 0s 590889070e-09 1s 1s 590893270e-09 1s 1s 590898110e-09 0s 0s 590899310e-09 1s 1s 590903550e-09 1s 1s 590908350e-09 0s 0s 590909550e-09 1s 1s 590913830e-09 1s 1s 590918590e-09 0s 0s 590919790e-09 1s 1s 590924110e-09 1s 1s 590928830e-09 0s 0s 590930030e-09 1s 1s 590934390e-09 1s 1s 590939070e-09 0s 0s 590940270e-09 1s 1s 590944670e-09 1s 1s 590949310e-09 0s 0s 590950510e-09 1s 1s 590954950e-09 1s 1s 590959550e-09 0s 0s 590960750e-09 1s 1s 590965230e-09 1s 1s 590969790e-09 0s 0s 590970990e-09 1s 1s 590975510e-09 1s 1s 590980030e-09 0s 0s 590981230e-09 1s 1s 590985790e-09 1s 1s 590990270e-09 0s 0s 590991470e-09 1s 1s 590996070e-09 1s 1s 591000510e-09 0s 0s 591001710e-09 1s 1s 591006350e-09 1s 1s 591010750e-09 0s 0s 591011950e-09 1s 1s 591016630e-09 1s 1s 591020990e-09 0s 0s 591022190e-09 1s 1s 591026910e-09 1s 1s 591031230e-09 0s 0s 591032430e-09 1s 1s 591037190e-09 1s 1s 591041470e-09 0s 0s 591042670e-09 1s 1s 591047470e-09 1s 1s 591051710e-09 0s 0s 591052910e-09 1s 1s 591057750e-09 1s 1s 591061950e-09 0s 0s 591063150e-09 1s 1s 591068030e-09 1s 1s 591072190e-09 0s 0s 591073390e-09 1s 1s 591078310e-09 1s 1s 591082430e-09 0s 0s 591083630e-09 1s 1s 591088590e-09 1s 1s 591092670e-09 0s 0s 591093870e-09 1s 1s 591098870e-09 1s 1s 591102910e-09 0s 0s 591104110e-09 1s 1s 591109150e-09 1s 1s 591113150e-09 0s 0s 591114350e-09 1s 1s 591119430e-09 1s 1s 591123390e-09 0s 0s 591124590e-09 1s 1s 591129710e-09 1s 1s 591133630e-09 0s 0s 591134830e-09 1s 1s 591139990e-09 1s 1s 591143870e-09 0s 0s 591145070e-09 1s 1s 591150270e-09 1s 1s 591154110e-09 0s 0s 591155310e-09 1s 1s 591160550e-09 1s 1s 591164350e-09 0s 0s 591165550e-09 1s 1s 591170830e-09 1s 1s 591174590e-09 0s 0s 591175790e-09 1s 1s 591181110e-09 1s 1s 591184830e-09 0s 0s 591186030e-09 1s 1s 591191390e-09 1s 1s 591195070e-09 0s 0s 591196270e-09 1s 1s 591201670e-09 1s 1s 591205310e-09 0s 0s 591206510e-09 1s 1s 591211950e-09 1s 1s 591215550e-09 0s 0s 591216750e-09 1s 1s 591222230e-09 1s 1s 591225790e-09 0s 0s 591226990e-09 1s 1s 591232510e-09 1s 1s 591236030e-09 0s 0s 591237230e-09 1s 1s 591242790e-09 1s 1s 591246270e-09 0s 0s 591247470e-09 1s 1s 591253070e-09 1s 1s 591256510e-09 0s 0s 591257710e-09 1s 1s 591263350e-09 1s 1s 591266750e-09 0s 0s 591267950e-09 1s 1s 591273630e-09 1s 1s 591276990e-09 0s 0s 591278190e-09 1s 1s 591283910e-09 1s 1s 591287230e-09 0s 0s 591288430e-09 1s 1s 591294190e-09 1s 1s 591297470e-09 0s 0s 591298670e-09 1s 1s 591304470e-09 1s 1s 591307710e-09 0s 0s 591308910e-09 1s 1s 591314750e-09 1s 1s 591317950e-09 0s 0s 591319150e-09 1s 1s 591325030e-09 1s 1s 591328190e-09 0s 0s 591329390e-09 1s 1s 591335310e-09 1s 1s 591338430e-09 0s 0s 591339630e-09 1s 1s 591345590e-09 1s 1s 591348670e-09 0s 0s 591349870e-09 1s 1s 591355870e-09 1s 1s 591358910e-09 0s 0s 591360110e-09 1s 1s 591366150e-09 1s 1s 591369150e-09 0s 0s 591370350e-09 1s 1s 591376430e-09 1s 1s 591379390e-09 0s 0s 591380590e-09 1s 1s 591386710e-09 1s 1s 591389630e-09 0s 0s 591390830e-09 1s 1s 591396990e-09 1s 1s 591399870e-09 0s 0s 591401070e-09 1s 1s 591407270e-09 1s 1s 591410110e-09 0s 0s 591411310e-09 1s 1s 591417550e-09 1s 1s 591420350e-09 0s 0s 591421550e-09 1s 1s 591427830e-09 1s 1s 591430590e-09 0s 0s 591431790e-09 1s 1s 591438110e-09 1s 1s 591440830e-09 0s 0s 591442030e-09 1s 1s 591448390e-09 1s 1s 591451070e-09 0s 0s 591452270e-09 1s 1s 591458670e-09 1s 1s 591461310e-09 0s 0s 591462510e-09 1s 1s 591468950e-09 1s 1s 591471550e-09 0s 0s 591472750e-09 1s 1s 591479230e-09 1s 1s 591481790e-09 0s 0s 591482990e-09 1s 1s 591489510e-09 1s 1s 591492030e-09 0s 0s 591493230e-09 1s 1s 591499790e-09 1s 1s 591502270e-09 0s 0s 591503470e-09 1s 1s 591510070e-09 1s 1s 591512510e-09 0s 0s 591513710e-09 1s 1s 591520350e-09 1s 1s 591522750e-09 0s 0s 591523950e-09 1s 1s 591530630e-09 1s 1s 591532990e-09 0s 0s 591534190e-09 1s 1s 591540910e-09 1s 1s 591543230e-09 0s 0s 591544430e-09 1s 1s 591551190e-09 1s 1s 591553470e-09 0s 0s 591554670e-09 1s 1s 591561470e-09 1s 1s 591563710e-09 0s 0s 591564910e-09 1s 1s 591571750e-09 1s 1s 591573950e-09 0s 0s 591575150e-09 1s 1s 591582030e-09 1s 1s 591584190e-09 0s 0s 591585390e-09 1s 1s 591592310e-09 1s 1s 591594430e-09 0s 0s 591595630e-09 1s 1s 591602590e-09 1s 1s 591604670e-09 0s 0s 591605870e-09 1s 1s 591612870e-09 1s 1s 591614910e-09 0s 0s 591616110e-09 1s 1s 591623150e-09 1s 1s 591625150e-09 0s 0s 591626350e-09 1s 1s 591633430e-09 1s 1s 591635390e-09 0s 0s 591636590e-09 1s 1s 591643710e-09 1s 1s 591645630e-09 0s 0s 591646830e-09 1s 1s 591653990e-09 1s 1s 591655870e-09 0s 0s 591657070e-09 1s 1s 591664270e-09 1s 1s 591666110e-09 0s 0s 591667310e-09 1s 1s 591674550e-09 1s 1s 591676350e-09 0s 0s 591677550e-09 1s 1s 591684830e-09 1s 1s 591686590e-09 0s 0s 591687790e-09 1s 1s 591695110e-09 1s 1s 591696830e-09 0s 0s 591698030e-09 1s 1s 591705390e-09 1s 1s 591707070e-09 0s 0s 591708270e-09 1s 1s 591715670e-09 1s 1s 591717310e-09 0s 0s 591718510e-09 1s 1s 591725950e-09 1s 1s 591727550e-09 0s 0s 591728750e-09 1s 1s 591736230e-09 1s 1s 591737790e-09 0s 0s 591738990e-09 1s 1s 591746510e-09 1s 1s 591748030e-09 0s 0s 591749230e-09 1s 1s 591756790e-09 1s 1s 591758270e-09 0s 0s 591759470e-09 1s 1s 591767070e-09 1s 1s 591768510e-09 0s 0s 591769710e-09 1s 1s 591777350e-09 1s 1s 591778750e-09 0s 0s 591779950e-09 1s 1s 591787630e-09 1s 1s 591788990e-09 0s 0s 591790190e-09 1s 1s 591797910e-09 1s 1s 591799230e-09 0s 0s 591800430e-09 1s 1s 591808190e-09 1s 1s 591809470e-09 0s 0s 591810670e-09 1s 1s 591818470e-09 1s 1s 591819710e-09 0s 0s 591820910e-09 1s 1s 591828750e-09 1s 1s 591829950e-09 0s 0s 591831150e-09 1s 1s 591839030e-09 1s 1s 591840190e-09 0s 0s 591841390e-09 1s 1s 591849310e-09 1s 1s 591850430e-09 0s 0s 591851630e-09 1s 1s 591859590e-09 1s 1s 591860670e-09 0s 0s 591861870e-09 1s 1s 591869870e-09 1s 1s 591870910e-09 0s 0s 591872110e-09 1s 1s 591880150e-09 1s 1s 591881150e-09 0s 0s 591882350e-09 1s 1s 591890430e-09 1s 1s 591891390e-09 0s 0s 591892590e-09 1s 1s 591900710e-09 1s 1s 591901630e-09 0s 0s 591902830e-09 1s 1s 591910990e-09 1s 1s 591911870e-09 0s 0s 591913070e-09 1s 1s 591921270e-09 1s 1s 591922110e-09 0s 0s 591923310e-09 1s 1s 591931550e-09 1s 1s 591932350e-09 0s 0s 591933550e-09 1s 1s 591941830e-09 1s 1s 591942590e-09 0s 0s 591943790e-09 1s 1s 591952110e-09 1s 1s 591952830e-09 0s 0s 591954030e-09 1s 1s 591962390e-09 1s 1s 591963070e-09 0s 0s 591964270e-09 1s 1s 591972670e-09 1s 1s 591973310e-09 0s 0s 591974510e-09 1s 1s 591982950e-09 1s 1s 591983550e-09 0s 0s 591984750e-09 1s 1s 591993230e-09 1s 1s 591993790e-09 0s 0s 591994990e-09 1s 1s 592003510e-09 1s 1s 592004030e-09 0s 0s 592005230e-09 1s 1s 592013790e-09 1s 1s 592014270e-09 0s 0s 592015470e-09 1s 1s 592024070e-09 1s 1s 592024510e-09 0s 0s 592025710e-09 1s 1s 592034350e-09 1s 1s 592034750e-09 0s 0s 592035950e-09 1s 1s 592044630e-09 1s 1s 592044990e-09 0s 0s 592046190e-09 1s 1s 592054910e-09 1s 1s 592055230e-09 0s 0s 592056430e-09 1s 1s 592065190e-09 1s 1s 592065470e-09 0s 0s 592066670e-09 1s 1s 592075470e-09 1s 1s 592075710e-09 0s 0s 592076910e-09 1s 1s 592085750e-09 1s 1s 592085950e-09 0s 0s 592087150e-09 1s 1s 592096030e-09 1s 1s 592096190e-09 0s 0s 592097390e-09 1s 1s 592106310e-09 1s 1s 592106430e-09 0s 0s 592107630e-09 1s 1s 592116590e-09 1s 1s 592116670e-09 0s 0s 592117870e-09 1s 1s 592126870e-09 1s 1s 592126910e-09 0s 0s 592128110e-09 1s 1s 592137150e-09 0s 0s 592138350e-09 1s 1s 592147390e-09 0s 0s 592147430e-09 0s 0s 592148590e-09 1s 1s 592157630e-09 0s 0s 592157710e-09 0s 0s 592158830e-09 1s 1s 592167870e-09 0s 0s 592167990e-09 0s 0s 592169070e-09 1s 1s 592178110e-09 0s 0s 592178270e-09 0s 0s 592179310e-09 1s 1s 592188350e-09 0s 0s 592188550e-09 0s 0s 592189550e-09 1s 1s 592198590e-09 0s 0s 592198830e-09 0s 0s 592199790e-09 1s 1s 592208830e-09 0s 0s 592209110e-09 0s 0s 592210030e-09 1s 1s 592219070e-09 0s 0s 592219390e-09 0s 0s 592220270e-09 1s 1s 592229310e-09 0s 0s 592229670e-09 0s 0s 592230510e-09 1s 1s 592239550e-09 0s 0s 592239950e-09 0s 0s 592240750e-09 1s 1s 592249790e-09 0s 0s 592250230e-09 0s 0s 592250990e-09 1s 1s 592260030e-09 0s 0s 592260510e-09 0s 0s 592261230e-09 1s 1s 592270270e-09 0s 0s 592270790e-09 0s 0s 592271470e-09 1s 1s 592280510e-09 0s 0s 592281070e-09 0s 0s 592281710e-09 1s 1s 592290750e-09 0s 0s 592291350e-09 0s 0s 592291950e-09 1s 1s 592300990e-09 0s 0s 592301630e-09 0s 0s 592302190e-09 1s 1s 592311230e-09 0s 0s 592311910e-09 0s 0s 592312430e-09 1s 1s 592321470e-09 0s 0s 592322190e-09 0s 0s 592322670e-09 1s 1s 592331710e-09 0s 0s 592332470e-09 0s 0s 592332910e-09 1s 1s 592341950e-09 0s 0s 592342750e-09 0s 0s 592343150e-09 1s 1s 592352190e-09 0s 0s 592353030e-09 0s 0s 592353390e-09 1s 1s 592362430e-09 0s 0s 592363310e-09 0s 0s 592363630e-09 1s 1s 592372670e-09 0s 0s 592373590e-09 0s 0s 592373870e-09 1s 1s 592382910e-09 0s 0s 592383870e-09 0s 0s 592384110e-09 1s 1s 592393150e-09 0s 0s 592394150e-09 0s 0s 592394350e-09 1s 1s 592403390e-09 0s 0s 592404430e-09 0s 0s 592404590e-09 1s 1s 592413630e-09 0s 0s 592414710e-09 0s 0s 592414830e-09 1s 1s 592423870e-09 0s 0s 592424990e-09 0s 0s 592425070e-09 1s 1s 592434110e-09 0s 0s 592435270e-09 0s 0s 592435310e-09 1s 1s 592444350e-09 0s 0s 592445550e-09 1s 1s 592445590e-09 1s 1s 592454630e-09 0s 0s 592455790e-09 1s 1s 592455870e-09 1s 1s 592464870e-09 0s 0s 592466030e-09 1s 1s 592466150e-09 1s 1s 592475110e-09 0s 0s 592476270e-09 1s 1s 592476430e-09 1s 1s 592485350e-09 0s 0s 592486510e-09 1s 1s 592486710e-09 1s 1s 592495590e-09 0s 0s 592496750e-09 1s 1s 592496990e-09 1s 1s 592505830e-09 0s 0s 592506990e-09 1s 1s 592507270e-09 1s 1s 592516070e-09 0s 0s 592517230e-09 1s 1s 592517550e-09 1s 1s 592526310e-09 0s 0s 592527470e-09 1s 1s 592527830e-09 1s 1s 592536550e-09 0s 0s 592537710e-09 1s 1s 592538110e-09 1s 1s 592546790e-09 0s 0s 592547950e-09 1s 1s 592548390e-09 1s 1s 592557030e-09 0s 0s 592558190e-09 1s 1s 592558670e-09 1s 1s 592567270e-09 0s 0s 592568430e-09 1s 1s 592568950e-09 1s 1s 592577510e-09 0s 0s 592578670e-09 1s 1s 592579230e-09 1s 1s 592587750e-09 0s 0s 592588910e-09 1s 1s 592589510e-09 1s 1s 592597990e-09 0s 0s 592599150e-09 1s 1s 592599790e-09 1s 1s 592608230e-09 0s 0s 592609390e-09 1s 1s 592610070e-09 1s 1s 592618470e-09 0s 0s 592619630e-09 1s 1s 592620350e-09 1s 1s 592628710e-09 0s 0s 592629870e-09 1s 1s 592630630e-09 1s 1s 592638950e-09 0s 0s 592640110e-09 1s 1s 592640910e-09 1s 1s 592649190e-09 0s 0s 592650350e-09 1s 1s 592651190e-09 1s 1s 592659430e-09 0s 0s 592660590e-09 1s 1s 592661470e-09 1s 1s 592669670e-09 0s 0s 592670830e-09 1s 1s 592671750e-09 1s 1s 592679910e-09 0s 0s 592681070e-09 1s 1s 592682030e-09 1s 1s 592690150e-09 0s 0s 592691310e-09 1s 1s 592692310e-09 1s 1s 592700390e-09 0s 0s 592701550e-09 1s 1s 592702590e-09 1s 1s 592710630e-09 0s 0s 592711790e-09 1s 1s 592712870e-09 1s 1s 592720870e-09 0s 0s 592722030e-09 1s 1s 592723150e-09 1s 1s 592731110e-09 0s 0s 592732270e-09 1s 1s 592733430e-09 1s 1s 592741350e-09 0s 0s 592742510e-09 1s 1s 592743710e-09 1s 1s 592751590e-09 0s 0s 592752750e-09 1s 1s 592753990e-09 1s 1s 592761830e-09 0s 0s 592762990e-09 1s 1s 592764270e-09 1s 1s 592772070e-09 0s 0s 592773230e-09 1s 1s 592774550e-09 1s 1s 592782310e-09 0s 0s 592783470e-09 1s 1s 592784830e-09 1s 1s 592792550e-09 0s 0s 592793710e-09 1s 1s 592795110e-09 1s 1s 592802790e-09 0s 0s 592803950e-09 1s 1s 592805390e-09 1s 1s 592813030e-09 0s 0s 592814190e-09 1s 1s 592815670e-09 1s 1s 592823270e-09 0s 0s 592824430e-09 1s 1s 592825950e-09 1s 1s 592833510e-09 0s 0s 592834670e-09 1s 1s 592836230e-09 1s 1s 592843750e-09 0s 0s 592844910e-09 1s 1s 592846510e-09 1s 1s 592853990e-09 0s 0s 592855150e-09 1s 1s 592856790e-09 1s 1s 592864230e-09 0s 0s 592865390e-09 1s 1s 592867070e-09 1s 1s 592874470e-09 0s 0s 592875630e-09 1s 1s 592877350e-09 1s 1s 592884710e-09 0s 0s 592885870e-09 1s 1s 592887630e-09 1s 1s 592894950e-09 0s 0s 592896110e-09 1s 1s 592897910e-09 1s 1s 592905190e-09 0s 0s 592906350e-09 1s 1s 592908190e-09 1s 1s 592915430e-09 0s 0s 592916590e-09 1s 1s 592918470e-09 1s 1s 592925670e-09 0s 0s 592926830e-09 1s 1s 592928750e-09 1s 1s 592935910e-09 0s 0s 592937070e-09 1s 1s 592939030e-09 1s 1s 592946150e-09 0s 0s 592947310e-09 1s 1s 592949310e-09 1s 1s 592956390e-09 0s 0s 592957550e-09 1s 1s 592959590e-09 1s 1s 592966630e-09 0s 0s 592967790e-09 1s 1s 592969870e-09 1s 1s 592976870e-09 0s 0s 592978030e-09 1s 1s 592980150e-09 1s 1s 592987110e-09 0s 0s 592988270e-09 1s 1s 592990430e-09 1s 1s 592997350e-09 0s 0s 592998510e-09 1s 1s 593000710e-09 1s 1s 593007590e-09 0s 0s 593008750e-09 1s 1s 593010990e-09 1s 1s 593017830e-09 0s 0s 593018990e-09 1s 1s 593021270e-09 1s 1s 593028070e-09 0s 0s 593029230e-09 1s 1s 593031550e-09 1s 1s 593038310e-09 0s 0s 593039470e-09 1s 1s 593041830e-09 1s 1s 593048550e-09 0s 0s 593049710e-09 1s 1s 593052110e-09 1s 1s 593058790e-09 0s 0s 593059950e-09 1s 1s 593062390e-09 1s 1s 593069030e-09 0s 0s 593070190e-09 1s 1s 593072670e-09 1s 1s 593079270e-09 0s 0s 593080430e-09 1s 1s 593082950e-09 1s 1s 593089510e-09 0s 0s 593090670e-09 1s 1s 593093230e-09 1s 1s 593099750e-09 0s 0s 593100910e-09 1s 1s 593103510e-09 1s 1s 593109990e-09 0s 0s 593111150e-09 1s 1s 593113790e-09 1s 1s 593120230e-09 0s 0s 593121390e-09 1s 1s 593124070e-09 1s 1s 593130470e-09 0s 0s 593131630e-09 1s 1s 593134350e-09 1s 1s 593140710e-09 0s 0s 593141870e-09 1s 1s 593144630e-09 1s 1s 593150950e-09 0s 0s 593152110e-09 1s 1s 593154910e-09 1s 1s 593161190e-09 0s 0s 593162350e-09 1s 1s 593165190e-09 1s 1s 593171430e-09 0s 0s 593172590e-09 1s 1s 593175470e-09 1s 1s 593181670e-09 0s 0s 593182830e-09 1s 1s 593185750e-09 1s 1s 593191910e-09 0s 0s 593193070e-09 1s 1s 593196030e-09 1s 1s 593202150e-09 0s 0s 593203310e-09 1s 1s 593206310e-09 1s 1s 593212390e-09 0s 0s 593213550e-09 1s 1s 593216590e-09 1s 1s 593222630e-09 0s 0s 593223790e-09 1s 1s 593226870e-09 1s 1s 593232870e-09 0s 0s 593234030e-09 1s 1s 593237150e-09 1s 1s 593243110e-09 0s 0s 593244270e-09 1s 1s 593247430e-09 1s 1s 593253350e-09 0s 0s 593254510e-09 1s 1s 593257710e-09 1s 1s 593263590e-09 0s 0s 593264750e-09 1s 1s 593267990e-09 1s 1s 593273830e-09 0s 0s 593274990e-09 1s 1s 593278270e-09 1s 1s 593284070e-09 0s 0s 593285230e-09 1s 1s 593288550e-09 1s 1s 593294310e-09 0s 0s 593295470e-09 1s 1s 593298830e-09 1s 1s 593304550e-09 0s 0s 593305710e-09 1s 1s 593309110e-09 1s 1s 593314790e-09 0s 0s 593315950e-09 1s 1s 593319390e-09 1s 1s 593325030e-09 0s 0s 593326190e-09 1s 1s 593329670e-09 1s 1s 593335270e-09 0s 0s 593336430e-09 1s 1s 593339950e-09 1s 1s 593345510e-09 0s 0s 593346670e-09 1s 1s 593350230e-09 1s 1s 593355750e-09 0s 0s 593356910e-09 1s 1s 593360510e-09 1s 1s 593365990e-09 0s 0s 593367150e-09 1s 1s 593370790e-09 1s 1s 593376230e-09 0s 0s 593377390e-09 1s 1s 593381070e-09 1s 1s 593386470e-09 0s 0s 593387630e-09 1s 1s 593391350e-09 1s 1s 593396710e-09 0s 0s 593397870e-09 1s 1s 593401630e-09 1s 1s 593406950e-09 0s 0s 593408110e-09 1s 1s 593411910e-09 1s 1s 593417190e-09 0s 0s 593418350e-09 1s 1s 593422190e-09 1s 1s 593427430e-09 0s 0s 593428590e-09 1s 1s 593432470e-09 1s 1s 593437670e-09 0s 0s 593438830e-09 1s 1s 593442750e-09 1s 1s 593447910e-09 0s 0s 593449070e-09 1s 1s 593453030e-09 1s 1s 593458150e-09 0s 0s 593459310e-09 1s 1s 593463310e-09 1s 1s 593468390e-09 0s 0s 593469550e-09 1s 1s 593473590e-09 1s 1s 593478630e-09 0s 0s 593479790e-09 1s 1s 593483870e-09 1s 1s 593488870e-09 0s 0s 593490030e-09 1s 1s 593494150e-09 1s 1s 593499110e-09 0s 0s 593500270e-09 1s 1s 593504430e-09 1s 1s 593509350e-09 0s 0s 593510510e-09 1s 1s 593514710e-09 1s 1s 593519590e-09 0s 0s 593520750e-09 1s 1s 593524990e-09 1s 1s 593529830e-09 0s 0s 593530990e-09 1s 1s 593535270e-09 1s 1s 593540070e-09 0s 0s 593541230e-09 1s 1s 593545550e-09 1s 1s 593550310e-09 0s 0s 593551470e-09 1s 1s 593555830e-09 1s 1s 593560550e-09 0s 0s 593561710e-09 1s 1s 593566110e-09 1s 1s 593570790e-09 0s 0s 593571950e-09 1s 1s 593576390e-09 1s 1s 593581030e-09 0s 0s 593582190e-09 1s 1s 593586670e-09 1s 1s 593591270e-09 0s 0s 593592430e-09 1s 1s 593596950e-09 1s 1s 593601510e-09 0s 0s 593602670e-09 1s 1s 593607230e-09 1s 1s 593611750e-09 0s 0s 593612910e-09 1s 1s 593617510e-09 1s 1s 593621990e-09 0s 0s 593623150e-09 1s 1s 593627790e-09 1s 1s 593632230e-09 0s 0s 593633390e-09 1s 1s 593638070e-09 1s 1s 593642470e-09 0s 0s 593643630e-09 1s 1s 593648350e-09 1s 1s 593652710e-09 0s 0s 593653870e-09 1s 1s 593658630e-09 1s 1s 593662950e-09 0s 0s 593664110e-09 1s 1s 593668910e-09 1s 1s 593673190e-09 0s 0s 593674350e-09 1s 1s 593679190e-09 1s 1s 593683430e-09 0s 0s 593684590e-09 1s 1s 593689470e-09 1s 1s 593693670e-09 0s 0s 593694830e-09 1s 1s 593699750e-09 1s 1s 593703910e-09 0s 0s 593705070e-09 1s 1s 593710030e-09 1s 1s 593714150e-09 0s 0s 593715310e-09 1s 1s 593720310e-09 1s 1s 593724390e-09 0s 0s 593725550e-09 1s 1s 593730590e-09 1s 1s 593734630e-09 0s 0s 593735790e-09 1s 1s 593740870e-09 1s 1s 593744870e-09 0s 0s 593746030e-09 1s 1s 593751150e-09 1s 1s 593755110e-09 0s 0s 593756270e-09 1s 1s 593761430e-09 1s 1s 593765350e-09 0s 0s 593766510e-09 1s 1s 593771710e-09 1s 1s 593775590e-09 0s 0s 593776750e-09 1s 1s 593781990e-09 1s 1s 593785830e-09 0s 0s 593786990e-09 1s 1s 593792270e-09 1s 1s 593796070e-09 0s 0s 593797230e-09 1s 1s 593802550e-09 1s 1s 593806310e-09 0s 0s 593807470e-09 1s 1s 593812830e-09 1s 1s 593816550e-09 0s 0s 593817710e-09 1s 1s 593823110e-09 1s 1s 593826790e-09 0s 0s 593827950e-09 1s 1s 593833390e-09 1s 1s 593837030e-09 0s 0s 593838190e-09 1s 1s 593843670e-09 1s 1s 593847270e-09 0s 0s 593848430e-09 1s 1s 593853950e-09 1s 1s 593857510e-09 0s 0s 593858670e-09 1s 1s 593864230e-09 1s 1s 593867750e-09 0s 0s 593868910e-09 1s 1s 593874510e-09 1s 1s 593877990e-09 0s 0s 593879150e-09 1s 1s 593884790e-09 1s 1s 593888230e-09 0s 0s 593889390e-09 1s 1s 593895070e-09 1s 1s 593898470e-09 0s 0s 593899630e-09 1s 1s 593905350e-09 1s 1s 593908710e-09 0s 0s 593909870e-09 1s 1s 593915630e-09 1s 1s 593918950e-09 0s 0s 593920110e-09 1s 1s 593925910e-09 1s 1s 593929190e-09 0s 0s 593930350e-09 1s 1s 593936190e-09 1s 1s 593939430e-09 0s 0s 593940590e-09 1s 1s 593946470e-09 1s 1s 593949670e-09 0s 0s 593950830e-09 1s 1s 593956750e-09 1s 1s 593959910e-09 0s 0s 593961070e-09 1s 1s 593967030e-09 1s 1s 593970150e-09 0s 0s 593971310e-09 1s 1s 593977310e-09 1s 1s 593980390e-09 0s 0s 593981550e-09 1s 1s 593987590e-09 1s 1s 593990630e-09 0s 0s 593991790e-09 1s 1s 593997870e-09 1s 1s 594000870e-09 0s 0s 594002030e-09 1s 1s 594008150e-09 1s 1s 594011110e-09 0s 0s 594012270e-09 1s 1s 594018430e-09 1s 1s 594021350e-09 0s 0s 594022510e-09 1s 1s 594028710e-09 1s 1s 594031590e-09 0s 0s 594032750e-09 1s 1s 594038990e-09 1s 1s 594041830e-09 0s 0s 594042990e-09 1s 1s 594049270e-09 1s 1s 594052070e-09 0s 0s 594053230e-09 1s 1s 594059550e-09 1s 1s 594062310e-09 0s 0s 594063470e-09 1s 1s 594069830e-09 1s 1s 594072550e-09 0s 0s 594073710e-09 1s 1s 594080110e-09 1s 1s 594082790e-09 0s 0s 594083950e-09 1s 1s 594090390e-09 1s 1s 594093030e-09 0s 0s 594094190e-09 1s 1s 594100670e-09 1s 1s 594103270e-09 0s 0s 594104430e-09 1s 1s 594110950e-09 1s 1s 594113510e-09 0s 0s 594114670e-09 1s 1s 594121230e-09 1s 1s 594123750e-09 0s 0s 594124910e-09 1s 1s 594131510e-09 1s 1s 594133990e-09 0s 0s 594135150e-09 1s 1s 594141790e-09 1s 1s 594144230e-09 0s 0s 594145390e-09 1s 1s 594152070e-09 1s 1s 594154470e-09 0s 0s 594155630e-09 1s 1s 594162350e-09 1s 1s 594164710e-09 0s 0s 594165870e-09 1s 1s 594172630e-09 1s 1s 594174950e-09 0s 0s 594176110e-09 1s 1s 594182910e-09 1s 1s 594185190e-09 0s 0s 594186350e-09 1s 1s 594193190e-09 1s 1s 594195430e-09 0s 0s 594196590e-09 1s 1s 594203470e-09 1s 1s 594205670e-09 0s 0s 594206830e-09 1s 1s 594213750e-09 1s 1s 594215910e-09 0s 0s 594217070e-09 1s 1s 594224030e-09 1s 1s 594226150e-09 0s 0s 594227310e-09 1s 1s 594234310e-09 1s 1s 594236390e-09 0s 0s 594237550e-09 1s 1s 594244590e-09 1s 1s 594246630e-09 0s 0s 594247790e-09 1s 1s 594254870e-09 1s 1s 594256870e-09 0s 0s 594258030e-09 1s 1s 594265150e-09 1s 1s 594267110e-09 0s 0s 594268270e-09 1s 1s 594275430e-09 1s 1s 594277350e-09 0s 0s 594278510e-09 1s 1s 594285710e-09 1s 1s 594287590e-09 0s 0s 594288750e-09 1s 1s 594295990e-09 1s 1s 594297830e-09 0s 0s 594298990e-09 1s 1s 594306270e-09 1s 1s 594308070e-09 0s 0s 594309230e-09 1s 1s 594316550e-09 1s 1s 594318310e-09 0s 0s 594319470e-09 1s 1s 594326830e-09 1s 1s 594328550e-09 0s 0s 594329710e-09 1s 1s 594337110e-09 1s 1s 594338790e-09 0s 0s 594339950e-09 1s 1s 594347390e-09 1s 1s 594349030e-09 0s 0s 594350190e-09 1s 1s 594357670e-09 1s 1s 594359270e-09 0s 0s 594360430e-09 1s 1s 594367950e-09 1s 1s 594369510e-09 0s 0s 594370670e-09 1s 1s 594378230e-09 1s 1s 594379750e-09 0s 0s 594380910e-09 1s 1s 594388510e-09 1s 1s 594389990e-09 0s 0s 594391150e-09 1s 1s 594398790e-09 1s 1s 594400230e-09 0s 0s 594401390e-09 1s 1s 594409070e-09 1s 1s 594410470e-09 0s 0s 594411630e-09 1s 1s 594419350e-09 1s 1s 594420710e-09 0s 0s 594421870e-09 1s 1s 594429630e-09 1s 1s 594430950e-09 0s 0s 594432110e-09 1s 1s 594439910e-09 1s 1s 594441190e-09 0s 0s 594442350e-09 1s 1s 594450190e-09 1s 1s 594451430e-09 0s 0s 594452590e-09 1s 1s 594460470e-09 1s 1s 594461670e-09 0s 0s 594462830e-09 1s 1s 594470750e-09 1s 1s 594471910e-09 0s 0s 594473070e-09 1s 1s 594481030e-09 1s 1s 594482150e-09 0s 0s 594483310e-09 1s 1s 594491310e-09 1s 1s 594492390e-09 0s 0s 594493550e-09 1s 1s 594501590e-09 1s 1s 594502630e-09 0s 0s 594503790e-09 1s 1s 594511870e-09 1s 1s 594512870e-09 0s 0s 594514030e-09 1s 1s 594522150e-09 1s 1s 594523110e-09 0s 0s 594524270e-09 1s 1s 594532430e-09 1s 1s 594533350e-09 0s 0s 594534510e-09 1s 1s 594542710e-09 1s 1s 594543590e-09 0s 0s 594544750e-09 1s 1s 594552990e-09 1s 1s 594553830e-09 0s 0s 594554990e-09 1s 1s 594563270e-09 1s 1s 594564070e-09 0s 0s 594565230e-09 1s 1s 594573550e-09 1s 1s 594574310e-09 0s 0s 594575470e-09 1s 1s 594583830e-09 1s 1s 594584550e-09 0s 0s 594585710e-09 1s 1s 594594110e-09 1s 1s 594594790e-09 0s 0s 594595950e-09 1s 1s 594604390e-09 1s 1s 594605030e-09 0s 0s 594606190e-09 1s 1s 594614670e-09 1s 1s 594615270e-09 0s 0s 594616430e-09 1s 1s 594624950e-09 1s 1s 594625510e-09 0s 0s 594626670e-09 1s 1s 594635230e-09 1s 1s 594635750e-09 0s 0s 594636910e-09 1s 1s 594645510e-09 1s 1s 594645990e-09 0s 0s 594647150e-09 1s 1s 594655790e-09 1s 1s 594656230e-09 0s 0s 594657390e-09 1s 1s 594666070e-09 1s 1s 594666470e-09 0s 0s 594667630e-09 1s 1s 594676350e-09 1s 1s 594676710e-09 0s 0s 594677870e-09 1s 1s 594686630e-09 1s 1s 594686950e-09 0s 0s 594688110e-09 1s 1s 594696910e-09 1s 1s 594697190e-09 0s 0s 594698350e-09 1s 1s 594707190e-09 1s 1s 594707430e-09 0s 0s 594708590e-09 1s 1s 594717470e-09 1s 1s 594717670e-09 0s 0s 594718830e-09 1s 1s 594727750e-09 1s 1s 594727910e-09 0s 0s 594729070e-09 1s 1s 594738030e-09 1s 1s 594738150e-09 0s 0s 594739310e-09 1s 1s 594748310e-09 1s 1s 594748390e-09 0s 0s 594749550e-09 1s 1s 594758590e-09 1s 1s 594758630e-09 0s 0s 594759790e-09 1s 1s 594768870e-09 0s 0s 594770030e-09 1s 1s 594779110e-09 0s 0s 594779150e-09 0s 0s 594780270e-09 1s 1s 594789350e-09 0s 0s 594789430e-09 0s 0s 594790510e-09 1s 1s 594799590e-09 0s 0s 594799710e-09 0s 0s 594800750e-09 1s 1s 594809830e-09 0s 0s 594809990e-09 0s 0s 594810990e-09 1s 1s 594820070e-09 0s 0s 594820270e-09 0s 0s 594821230e-09 1s 1s 594830310e-09 0s 0s 594830550e-09 0s 0s 594831470e-09 1s 1s 594840550e-09 0s 0s 594840830e-09 0s 0s 594841710e-09 1s 1s 594850790e-09 0s 0s 594851110e-09 0s 0s 594851950e-09 1s 1s 594861030e-09 0s 0s 594861390e-09 0s 0s 594862190e-09 1s 1s 594871270e-09 0s 0s 594871670e-09 0s 0s 594872430e-09 1s 1s 594881510e-09 0s 0s 594881950e-09 0s 0s 594882670e-09 1s 1s 594891750e-09 0s 0s 594892230e-09 0s 0s 594892910e-09 1s 1s 594901990e-09 0s 0s 594902510e-09 0s 0s 594903150e-09 1s 1s 594912230e-09 0s 0s 594912790e-09 0s 0s 594913390e-09 1s 1s 594922470e-09 0s 0s 594923070e-09 0s 0s 594923630e-09 1s 1s 594932710e-09 0s 0s 594933350e-09 0s 0s 594933870e-09 1s 1s 594942950e-09 0s 0s 594943630e-09 0s 0s 594944110e-09 1s 1s 594953190e-09 0s 0s 594953910e-09 0s 0s 594954350e-09 1s 1s 594963430e-09 0s 0s 594964190e-09 0s 0s 594964590e-09 1s 1s 594973670e-09 0s 0s 594974470e-09 0s 0s 594974830e-09 1s 1s 594983910e-09 0s 0s 594984750e-09 0s 0s 594985070e-09 1s 1s 594994150e-09 0s 0s 594995030e-09 0s 0s 594995310e-09 1s 1s 595004390e-09 0s 0s 595005310e-09 0s 0s 595005550e-09 1s 1s 595014630e-09 0s 0s 595015590e-09 0s 0s 595015790e-09 1s 1s 595024870e-09 0s 0s 595025870e-09 0s 0s 595026030e-09 1s 1s 595035110e-09 0s 0s 595036150e-09 0s 0s 595036270e-09 1s 1s 595045350e-09 0s 0s 595046430e-09 0s 0s 595046510e-09 1s 1s 595055590e-09 0s 0s 595056710e-09 0s 0s 595056750e-09 1s 1s 595065830e-09 0s 0s 595066990e-09 1s 1s 595067030e-09 1s 1s 595076110e-09 0s 0s 595077230e-09 1s 1s 595077310e-09 1s 1s 595086350e-09 0s 0s 595087470e-09 1s 1s 595087590e-09 1s 1s 595096590e-09 0s 0s 595097710e-09 1s 1s 595097870e-09 1s 1s 595106830e-09 0s 0s 595107950e-09 1s 1s 595108150e-09 1s 1s 595117070e-09 0s 0s 595118190e-09 1s 1s 595118430e-09 1s 1s 595127310e-09 0s 0s 595128430e-09 1s 1s 595128710e-09 1s 1s 595137550e-09 0s 0s 595138670e-09 1s 1s 595138990e-09 1s 1s 595147790e-09 0s 0s 595148910e-09 1s 1s 595149270e-09 1s 1s 595158030e-09 0s 0s 595159150e-09 1s 1s 595159550e-09 1s 1s 595168270e-09 0s 0s 595169390e-09 1s 1s 595169830e-09 1s 1s 595178510e-09 0s 0s 595179630e-09 1s 1s 595180110e-09 1s 1s 595188750e-09 0s 0s 595189870e-09 1s 1s 595190390e-09 1s 1s 595198990e-09 0s 0s 595200110e-09 1s 1s 595200670e-09 1s 1s 595209230e-09 0s 0s 595210350e-09 1s 1s 595210950e-09 1s 1s 595219470e-09 0s 0s 595220590e-09 1s 1s 595221230e-09 1s 1s 595229710e-09 0s 0s 595230830e-09 1s 1s 595231510e-09 1s 1s 595239950e-09 0s 0s 595241070e-09 1s 1s 595241790e-09 1s 1s 595250190e-09 0s 0s 595251310e-09 1s 1s 595252070e-09 1s 1s 595260430e-09 0s 0s 595261550e-09 1s 1s 595262350e-09 1s 1s 595270670e-09 0s 0s 595271790e-09 1s 1s 595272630e-09 1s 1s 595280910e-09 0s 0s 595282030e-09 1s 1s 595282910e-09 1s 1s 595291150e-09 0s 0s 595292270e-09 1s 1s 595293190e-09 1s 1s 595301390e-09 0s 0s 595302510e-09 1s 1s 595303470e-09 1s 1s 595311630e-09 0s 0s 595312750e-09 1s 1s 595313750e-09 1s 1s 595321870e-09 0s 0s 595322990e-09 1s 1s 595324030e-09 1s 1s 595332110e-09 0s 0s 595333230e-09 1s 1s 595334310e-09 1s 1s 595342350e-09 0s 0s 595343470e-09 1s 1s 595344590e-09 1s 1s 595352590e-09 0s 0s 595353710e-09 1s 1s 595354870e-09 1s 1s 595362830e-09 0s 0s 595363950e-09 1s 1s 595365150e-09 1s 1s 595373070e-09 0s 0s 595374190e-09 1s 1s 595375430e-09 1s 1s 595383310e-09 0s 0s 595384430e-09 1s 1s 595385710e-09 1s 1s 595393550e-09 0s 0s 595394670e-09 1s 1s 595395990e-09 1s 1s 595403790e-09 0s 0s 595404910e-09 1s 1s 595406270e-09 1s 1s 595414030e-09 0s 0s 595415150e-09 1s 1s 595416550e-09 1s 1s 595424270e-09 0s 0s 595425390e-09 1s 1s 595426830e-09 1s 1s 595434510e-09 0s 0s 595435630e-09 1s 1s 595437110e-09 1s 1s 595444750e-09 0s 0s 595445870e-09 1s 1s 595447390e-09 1s 1s 595454990e-09 0s 0s 595456110e-09 1s 1s 595457670e-09 1s 1s 595465230e-09 0s 0s 595466350e-09 1s 1s 595467950e-09 1s 1s 595475470e-09 0s 0s 595476590e-09 1s 1s 595478230e-09 1s 1s 595485710e-09 0s 0s 595486830e-09 1s 1s 595488510e-09 1s 1s 595495950e-09 0s 0s 595497070e-09 1s 1s 595498790e-09 1s 1s 595506190e-09 0s 0s 595507310e-09 1s 1s 595509070e-09 1s 1s 595516430e-09 0s 0s 595517550e-09 1s 1s 595519350e-09 1s 1s 595526670e-09 0s 0s 595527790e-09 1s 1s 595529630e-09 1s 1s 595536910e-09 0s 0s 595538030e-09 1s 1s 595539910e-09 1s 1s 595547150e-09 0s 0s 595548270e-09 1s 1s 595550190e-09 1s 1s 595557390e-09 0s 0s 595558510e-09 1s 1s 595560470e-09 1s 1s 595567630e-09 0s 0s 595568750e-09 1s 1s 595570750e-09 1s 1s 595577870e-09 0s 0s 595578990e-09 1s 1s 595581030e-09 1s 1s 595588110e-09 0s 0s 595589230e-09 1s 1s 595591310e-09 1s 1s 595598350e-09 0s 0s 595599470e-09 1s 1s 595601590e-09 1s 1s 595608590e-09 0s 0s 595609710e-09 1s 1s 595611870e-09 1s 1s 595618830e-09 0s 0s 595619950e-09 1s 1s 595622150e-09 1s 1s 595629070e-09 0s 0s 595630190e-09 1s 1s 595632430e-09 1s 1s 595639310e-09 0s 0s 595640430e-09 1s 1s 595642710e-09 1s 1s 595649550e-09 0s 0s 595650670e-09 1s 1s 595652990e-09 1s 1s 595659790e-09 0s 0s 595660910e-09 1s 1s 595663270e-09 1s 1s 595670030e-09 0s 0s 595671150e-09 1s 1s 595673550e-09 1s 1s 595680270e-09 0s 0s 595681390e-09 1s 1s 595683830e-09 1s 1s 595690510e-09 0s 0s 595691630e-09 1s 1s 595694110e-09 1s 1s 595700750e-09 0s 0s 595701870e-09 1s 1s 595704390e-09 1s 1s 595710990e-09 0s 0s 595712110e-09 1s 1s 595714670e-09 1s 1s 595721230e-09 0s 0s 595722350e-09 1s 1s 595724950e-09 1s 1s 595731470e-09 0s 0s 595732590e-09 1s 1s 595735230e-09 1s 1s 595741710e-09 0s 0s 595742830e-09 1s 1s 595745510e-09 1s 1s 595751950e-09 0s 0s 595753070e-09 1s 1s 595755790e-09 1s 1s 595762190e-09 0s 0s 595763310e-09 1s 1s 595766070e-09 1s 1s 595772430e-09 0s 0s 595773550e-09 1s 1s 595776350e-09 1s 1s 595782670e-09 0s 0s 595783790e-09 1s 1s 595786630e-09 1s 1s 595792910e-09 0s 0s 595794030e-09 1s 1s 595796910e-09 1s 1s 595803150e-09 0s 0s 595804270e-09 1s 1s 595807190e-09 1s 1s 595813390e-09 0s 0s 595814510e-09 1s 1s 595817470e-09 1s 1s 595823630e-09 0s 0s 595824750e-09 1s 1s 595827750e-09 1s 1s 595833870e-09 0s 0s 595834990e-09 1s 1s 595838030e-09 1s 1s 595844110e-09 0s 0s 595845230e-09 1s 1s 595848310e-09 1s 1s 595854350e-09 0s 0s 595855470e-09 1s 1s 595858590e-09 1s 1s 595864590e-09 0s 0s 595865710e-09 1s 1s 595868870e-09 1s 1s 595874830e-09 0s 0s 595875950e-09 1s 1s 595879150e-09 1s 1s 595885070e-09 0s 0s 595886190e-09 1s 1s 595889430e-09 1s 1s 595895310e-09 0s 0s 595896430e-09 1s 1s 595899710e-09 1s 1s 595905550e-09 0s 0s 595906670e-09 1s 1s 595909990e-09 1s 1s 595915790e-09 0s 0s 595916910e-09 1s 1s 595920270e-09 1s 1s 595926030e-09 0s 0s 595927150e-09 1s 1s 595930550e-09 1s 1s 595936270e-09 0s 0s 595937390e-09 1s 1s 595940830e-09 1s 1s 595946510e-09 0s 0s 595947630e-09 1s 1s 595951110e-09 1s 1s 595956750e-09 0s 0s 595957870e-09 1s 1s 595961390e-09 1s 1s 595966990e-09 0s 0s 595968110e-09 1s 1s 595971670e-09 1s 1s 595977230e-09 0s 0s 595978350e-09 1s 1s 595981950e-09 1s 1s 595987470e-09 0s 0s 595988590e-09 1s 1s 595992230e-09 1s 1s 595997710e-09 0s 0s 595998830e-09 1s 1s 596002510e-09 1s 1s 596007950e-09 0s 0s 596009070e-09 1s 1s 596012790e-09 1s 1s 596018190e-09 0s 0s 596019310e-09 1s 1s 596023070e-09 1s 1s 596028430e-09 0s 0s 596029550e-09 1s 1s 596033350e-09 1s 1s 596038670e-09 0s 0s 596039790e-09 1s 1s 596043630e-09 1s 1s 596048910e-09 0s 0s 596050030e-09 1s 1s 596053910e-09 1s 1s 596059150e-09 0s 0s 596060270e-09 1s 1s 596064190e-09 1s 1s 596069390e-09 0s 0s 596070510e-09 1s 1s 596074470e-09 1s 1s 596079630e-09 0s 0s 596080750e-09 1s 1s 596084750e-09 1s 1s 596089870e-09 0s 0s 596090990e-09 1s 1s 596095030e-09 1s 1s 596100110e-09 0s 0s 596101230e-09 1s 1s 596105310e-09 1s 1s 596110350e-09 0s 0s 596111470e-09 1s 1s 596115590e-09 1s 1s 596120590e-09 0s 0s 596121710e-09 1s 1s 596125870e-09 1s 1s 596130830e-09 0s 0s 596131950e-09 1s 1s 596136150e-09 1s 1s 596141070e-09 0s 0s 596142190e-09 1s 1s 596146430e-09 1s 1s 596151310e-09 0s 0s 596152430e-09 1s 1s 596156710e-09 1s 1s 596161550e-09 0s 0s 596162670e-09 1s 1s 596166990e-09 1s 1s 596171790e-09 0s 0s 596172910e-09 1s 1s 596177270e-09 1s 1s 596182030e-09 0s 0s 596183150e-09 1s 1s 596187550e-09 1s 1s 596192270e-09 0s 0s 596193390e-09 1s 1s 596197830e-09 1s 1s 596202510e-09 0s 0s 596203630e-09 1s 1s 596208110e-09 1s 1s 596212750e-09 0s 0s 596213870e-09 1s 1s 596218390e-09 1s 1s 596222990e-09 0s 0s 596224110e-09 1s 1s 596228670e-09 1s 1s 596233230e-09 0s 0s 596234350e-09 1s 1s 596238950e-09 1s 1s 596243470e-09 0s 0s 596244590e-09 1s 1s 596249230e-09 1s 1s 596253710e-09 0s 0s 596254830e-09 1s 1s 596259510e-09 1s 1s 596263950e-09 0s 0s 596265070e-09 1s 1s 596269790e-09 1s 1s 596274190e-09 0s 0s 596275310e-09 1s 1s 596280070e-09 1s 1s 596284430e-09 0s 0s 596285550e-09 1s 1s 596290350e-09 1s 1s 596294670e-09 0s 0s 596295790e-09 1s 1s 596300630e-09 1s 1s 596304910e-09 0s 0s 596306030e-09 1s 1s 596310910e-09 1s 1s 596315150e-09 0s 0s 596316270e-09 1s 1s 596321190e-09 1s 1s 596325390e-09 0s 0s 596326510e-09 1s 1s 596331470e-09 1s 1s 596335630e-09 0s 0s 596336750e-09 1s 1s 596341750e-09 1s 1s 596345870e-09 0s 0s 596346990e-09 1s 1s 596352030e-09 1s 1s 596356110e-09 0s 0s 596357230e-09 1s 1s 596362310e-09 1s 1s 596366350e-09 0s 0s 596367470e-09 1s 1s 596372590e-09 1s 1s 596376590e-09 0s 0s 596377710e-09 1s 1s 596382870e-09 1s 1s 596386830e-09 0s 0s 596387950e-09 1s 1s 596393150e-09 1s 1s 596397070e-09 0s 0s 596398190e-09 1s 1s 596403430e-09 1s 1s 596407310e-09 0s 0s 596408430e-09 1s 1s 596413710e-09 1s 1s 596417550e-09 0s 0s 596418670e-09 1s 1s 596423990e-09 1s 1s 596427790e-09 0s 0s 596428910e-09 1s 1s 596434270e-09 1s 1s 596438030e-09 0s 0s 596439150e-09 1s 1s 596444550e-09 1s 1s 596448270e-09 0s 0s 596449390e-09 1s 1s 596454830e-09 1s 1s 596458510e-09 0s 0s 596459630e-09 1s 1s 596465110e-09 1s 1s 596468750e-09 0s 0s 596469870e-09 1s 1s 596475390e-09 1s 1s 596478990e-09 0s 0s 596480110e-09 1s 1s 596485670e-09 1s 1s 596489230e-09 0s 0s 596490350e-09 1s 1s 596495950e-09 1s 1s 596499470e-09 0s 0s 596500590e-09 1s 1s 596506230e-09 1s 1s 596509710e-09 0s 0s 596510830e-09 1s 1s 596516510e-09 1s 1s 596519950e-09 0s 0s 596521070e-09 1s 1s 596526790e-09 1s 1s 596530190e-09 0s 0s 596531310e-09 1s 1s 596537070e-09 1s 1s 596540430e-09 0s 0s 596541550e-09 1s 1s 596547350e-09 1s 1s 596550670e-09 0s 0s 596551790e-09 1s 1s 596557630e-09 1s 1s 596560910e-09 0s 0s 596562030e-09 1s 1s 596567910e-09 1s 1s 596571150e-09 0s 0s 596572270e-09 1s 1s 596578190e-09 1s 1s 596581390e-09 0s 0s 596582510e-09 1s 1s 596588470e-09 1s 1s 596591630e-09 0s 0s 596592750e-09 1s 1s 596598750e-09 1s 1s 596601870e-09 0s 0s 596602990e-09 1s 1s 596609030e-09 1s 1s 596612110e-09 0s 0s 596613230e-09 1s 1s 596619310e-09 1s 1s 596622350e-09 0s 0s 596623470e-09 1s 1s 596629590e-09 1s 1s 596632590e-09 0s 0s 596633710e-09 1s 1s 596639870e-09 1s 1s 596642830e-09 0s 0s 596643950e-09 1s 1s 596650150e-09 1s 1s 596653070e-09 0s 0s 596654190e-09 1s 1s 596660430e-09 1s 1s 596663310e-09 0s 0s 596664430e-09 1s 1s 596670710e-09 1s 1s 596673550e-09 0s 0s 596674670e-09 1s 1s 596680990e-09 1s 1s 596683790e-09 0s 0s 596684910e-09 1s 1s 596691270e-09 1s 1s 596694030e-09 0s 0s 596695150e-09 1s 1s 596701550e-09 1s 1s 596704270e-09 0s 0s 596705390e-09 1s 1s 596711830e-09 1s 1s 596714510e-09 0s 0s 596715630e-09 1s 1s 596722110e-09 1s 1s 596724750e-09 0s 0s 596725870e-09 1s 1s 596732390e-09 1s 1s 596734990e-09 0s 0s 596736110e-09 1s 1s 596742670e-09 1s 1s 596745230e-09 0s 0s 596746350e-09 1s 1s 596752950e-09 1s 1s 596755470e-09 0s 0s 596756590e-09 1s 1s 596763230e-09 1s 1s 596765710e-09 0s 0s 596766830e-09 1s 1s 596773510e-09 1s 1s 596775950e-09 0s 0s 596777070e-09 1s 1s 596783790e-09 1s 1s 596786190e-09 0s 0s 596787310e-09 1s 1s 596794070e-09 1s 1s 596796430e-09 0s 0s 596797550e-09 1s 1s 596804350e-09 1s 1s 596806670e-09 0s 0s 596807790e-09 1s 1s 596814630e-09 1s 1s 596816910e-09 0s 0s 596818030e-09 1s 1s 596824910e-09 1s 1s 596827150e-09 0s 0s 596828270e-09 1s 1s 596835190e-09 1s 1s 596837390e-09 0s 0s 596838510e-09 1s 1s 596845470e-09 1s 1s 596847630e-09 0s 0s 596848750e-09 1s 1s 596855750e-09 1s 1s 596857870e-09 0s 0s 596858990e-09 1s 1s 596866030e-09 1s 1s 596868110e-09 0s 0s 596869230e-09 1s 1s 596876310e-09 1s 1s 596878350e-09 0s 0s 596879470e-09 1s 1s 596886590e-09 1s 1s 596888590e-09 0s 0s 596889710e-09 1s 1s 596896870e-09 1s 1s 596898830e-09 0s 0s 596899950e-09 1s 1s 596907150e-09 1s 1s 596909070e-09 0s 0s 596910190e-09 1s 1s 596917430e-09 1s 1s 596919310e-09 0s 0s 596920430e-09 1s 1s 596927710e-09 1s 1s 596929550e-09 0s 0s 596930670e-09 1s 1s 596937990e-09 1s 1s 596939790e-09 0s 0s 596940910e-09 1s 1s 596948270e-09 1s 1s 596950030e-09 0s 0s 596951150e-09 1s 1s 596958550e-09 1s 1s 596960270e-09 0s 0s 596961390e-09 1s 1s 596968830e-09 1s 1s 596970510e-09 0s 0s 596971630e-09 1s 1s 596979110e-09 1s 1s 596980750e-09 0s 0s 596981870e-09 1s 1s 596989390e-09 1s 1s 596990990e-09 0s 0s 596992110e-09 1s 1s 596999670e-09 1s 1s 597001230e-09 0s 0s 597002350e-09 1s 1s 597009950e-09 1s 1s 597011470e-09 0s 0s 597012590e-09 1s 1s 597020230e-09 1s 1s 597021710e-09 0s 0s 597022830e-09 1s 1s 597030510e-09 1s 1s 597031950e-09 0s 0s 597033070e-09 1s 1s 597040790e-09 1s 1s 597042190e-09 0s 0s 597043310e-09 1s 1s 597051070e-09 1s 1s 597052430e-09 0s 0s 597053550e-09 1s 1s 597061350e-09 1s 1s 597062670e-09 0s 0s 597063790e-09 1s 1s 597071630e-09 1s 1s 597072910e-09 0s 0s 597074030e-09 1s 1s 597081910e-09 1s 1s 597083150e-09 0s 0s 597084270e-09 1s 1s 597092190e-09 1s 1s 597093390e-09 0s 0s 597094510e-09 1s 1s 597102470e-09 1s 1s 597103630e-09 0s 0s 597104750e-09 1s 1s 597112750e-09 1s 1s 597113870e-09 0s 0s 597114990e-09 1s 1s 597123030e-09 1s 1s 597124110e-09 0s 0s 597125230e-09 1s 1s 597133310e-09 1s 1s 597134350e-09 0s 0s 597135470e-09 1s 1s 597143590e-09 1s 1s 597144590e-09 0s 0s 597145710e-09 1s 1s 597153870e-09 1s 1s 597154830e-09 0s 0s 597155950e-09 1s 1s 597164150e-09 1s 1s 597165070e-09 0s 0s 597166190e-09 1s 1s 597174430e-09 1s 1s 597175310e-09 0s 0s 597176430e-09 1s 1s 597184710e-09 1s 1s 597185550e-09 0s 0s 597186670e-09 1s 1s 597194990e-09 1s 1s 597195790e-09 0s 0s 597196910e-09 1s 1s 597205270e-09 1s 1s 597206030e-09 0s 0s 597207150e-09 1s 1s 597215550e-09 1s 1s 597216270e-09 0s 0s 597217390e-09 1s 1s 597225830e-09 1s 1s 597226510e-09 0s 0s 597227630e-09 1s 1s 597236110e-09 1s 1s 597236750e-09 0s 0s 597237870e-09 1s 1s 597246390e-09 1s 1s 597246990e-09 0s 0s 597248110e-09 1s 1s 597256670e-09 1s 1s 597257230e-09 0s 0s 597258350e-09 1s 1s 597266950e-09 1s 1s 597267470e-09 0s 0s 597268590e-09 1s 1s 597277230e-09 1s 1s 597277710e-09 0s 0s 597278830e-09 1s 1s 597287510e-09 1s 1s 597287950e-09 0s 0s 597289070e-09 1s 1s 597297790e-09 1s 1s 597298190e-09 0s 0s 597299310e-09 1s 1s 597308070e-09 1s 1s 597308430e-09 0s 0s 597309550e-09 1s 1s 597318350e-09 1s 1s 597318670e-09 0s 0s 597319790e-09 1s 1s 597328630e-09 1s 1s 597328910e-09 0s 0s 597330030e-09 1s 1s 597338910e-09 1s 1s 597339150e-09 0s 0s 597340270e-09 1s 1s 597349190e-09 1s 1s 597349390e-09 0s 0s 597350510e-09 1s 1s 597359470e-09 1s 1s 597359630e-09 0s 0s 597360750e-09 1s 1s 597369750e-09 1s 1s 597369870e-09 0s 0s 597370990e-09 1s 1s 597380030e-09 1s 1s 597380110e-09 0s 0s 597381230e-09 1s 1s 597390310e-09 1s 1s 597390350e-09 0s 0s 597391470e-09 1s 1s 597400590e-09 0s 0s 597401710e-09 1s 1s 597410830e-09 0s 0s 597410870e-09 0s 0s 597411950e-09 1s 1s 597421070e-09 0s 0s 597421150e-09 0s 0s 597422190e-09 1s 1s 597431310e-09 0s 0s 597431430e-09 0s 0s 597432430e-09 1s 1s 597441550e-09 0s 0s 597441710e-09 0s 0s 597442670e-09 1s 1s 597451790e-09 0s 0s 597451990e-09 0s 0s 597452910e-09 1s 1s 597462030e-09 0s 0s 597462270e-09 0s 0s 597463150e-09 1s 1s 597472270e-09 0s 0s 597472550e-09 0s 0s 597473390e-09 1s 1s 597482510e-09 0s 0s 597482830e-09 0s 0s 597483630e-09 1s 1s 597492750e-09 0s 0s 597493110e-09 0s 0s 597493870e-09 1s 1s 597502990e-09 0s 0s 597503390e-09 0s 0s 597504110e-09 1s 1s 597513230e-09 0s 0s 597513670e-09 0s 0s 597514350e-09 1s 1s 597523470e-09 0s 0s 597523950e-09 0s 0s 597524590e-09 1s 1s 597533710e-09 0s 0s 597534230e-09 0s 0s 597534830e-09 1s 1s 597543950e-09 0s 0s 597544510e-09 0s 0s 597545070e-09 1s 1s 597554190e-09 0s 0s 597554790e-09 0s 0s 597555310e-09 1s 1s 597564430e-09 0s 0s 597565070e-09 0s 0s 597565550e-09 1s 1s 597574670e-09 0s 0s 597575350e-09 0s 0s 597575790e-09 1s 1s 597584910e-09 0s 0s 597585630e-09 0s 0s 597586030e-09 1s 1s 597595150e-09 0s 0s 597595910e-09 0s 0s 597596270e-09 1s 1s 597605390e-09 0s 0s 597606190e-09 0s 0s 597606510e-09 1s 1s 597615630e-09 0s 0s 597616470e-09 0s 0s 597616750e-09 1s 1s 597625870e-09 0s 0s 597626750e-09 0s 0s 597626990e-09 1s 1s 597636110e-09 0s 0s 597637030e-09 0s 0s 597637230e-09 1s 1s 597646350e-09 0s 0s 597647310e-09 0s 0s 597647470e-09 1s 1s 597656590e-09 0s 0s 597657590e-09 0s 0s 597657710e-09 1s 1s 597666830e-09 0s 0s 597667870e-09 0s 0s 597667950e-09 1s 1s 597677070e-09 0s 0s 597678150e-09 0s 0s 597678190e-09 1s 1s 597687310e-09 0s 0s 597688430e-09 1s 1s 597688470e-09 1s 1s 597697590e-09 0s 0s 597698670e-09 1s 1s 597698750e-09 1s 1s 597707830e-09 0s 0s 597708910e-09 1s 1s 597709030e-09 1s 1s 597718070e-09 0s 0s 597719150e-09 1s 1s 597719310e-09 1s 1s 597728310e-09 0s 0s 597729390e-09 1s 1s 597729590e-09 1s 1s 597738550e-09 0s 0s 597739630e-09 1s 1s 597739870e-09 1s 1s 597748790e-09 0s 0s 597749870e-09 1s 1s 597750150e-09 1s 1s 597759030e-09 0s 0s 597760110e-09 1s 1s 597760430e-09 1s 1s 597769270e-09 0s 0s 597770350e-09 1s 1s 597770710e-09 1s 1s 597779510e-09 0s 0s 597780590e-09 1s 1s 597780990e-09 1s 1s 597789750e-09 0s 0s 597790830e-09 1s 1s 597791270e-09 1s 1s 597799990e-09 0s 0s 597801070e-09 1s 1s 597801550e-09 1s 1s 597810230e-09 0s 0s 597811310e-09 1s 1s 597811830e-09 1s 1s 597820470e-09 0s 0s 597821550e-09 1s 1s 597822110e-09 1s 1s 597830710e-09 0s 0s 597831790e-09 1s 1s 597832390e-09 1s 1s 597840950e-09 0s 0s 597842030e-09 1s 1s 597842670e-09 1s 1s 597851190e-09 0s 0s 597852270e-09 1s 1s 597852950e-09 1s 1s 597861430e-09 0s 0s 597862510e-09 1s 1s 597863230e-09 1s 1s 597871670e-09 0s 0s 597872750e-09 1s 1s 597873510e-09 1s 1s 597881910e-09 0s 0s 597882990e-09 1s 1s 597883790e-09 1s 1s 597892150e-09 0s 0s 597893230e-09 1s 1s 597894070e-09 1s 1s 597902390e-09 0s 0s 597903470e-09 1s 1s 597904350e-09 1s 1s 597912630e-09 0s 0s 597913710e-09 1s 1s 597914630e-09 1s 1s 597922870e-09 0s 0s 597923950e-09 1s 1s 597924910e-09 1s 1s 597933110e-09 0s 0s 597934190e-09 1s 1s 597935190e-09 1s 1s 597943350e-09 0s 0s 597944430e-09 1s 1s 597945470e-09 1s 1s 597953590e-09 0s 0s 597954670e-09 1s 1s 597955750e-09 1s 1s 597963830e-09 0s 0s 597964910e-09 1s 1s 597966030e-09 1s 1s 597974070e-09 0s 0s 597975150e-09 1s 1s 597976310e-09 1s 1s 597984310e-09 0s 0s 597985390e-09 1s 1s 597986590e-09 1s 1s 597994550e-09 0s 0s 597995630e-09 1s 1s 597996870e-09 1s 1s 598004790e-09 0s 0s 598005870e-09 1s 1s 598007150e-09 1s 1s 598015030e-09 0s 0s 598016110e-09 1s 1s 598017430e-09 1s 1s 598025270e-09 0s 0s 598026350e-09 1s 1s 598027710e-09 1s 1s 598035510e-09 0s 0s 598036590e-09 1s 1s 598037990e-09 1s 1s 598045750e-09 0s 0s 598046830e-09 1s 1s 598048270e-09 1s 1s 598055990e-09 0s 0s 598057070e-09 1s 1s 598058550e-09 1s 1s 598066230e-09 0s 0s 598067310e-09 1s 1s 598068830e-09 1s 1s 598076470e-09 0s 0s 598077550e-09 1s 1s 598079110e-09 1s 1s 598086710e-09 0s 0s 598087790e-09 1s 1s 598089390e-09 1s 1s 598096950e-09 0s 0s 598098030e-09 1s 1s 598099670e-09 1s 1s 598107190e-09 0s 0s 598108270e-09 1s 1s 598109950e-09 1s 1s 598117430e-09 0s 0s 598118510e-09 1s 1s 598120230e-09 1s 1s 598127670e-09 0s 0s 598128750e-09 1s 1s 598130510e-09 1s 1s 598137910e-09 0s 0s 598138990e-09 1s 1s 598140790e-09 1s 1s 598148150e-09 0s 0s 598149230e-09 1s 1s 598151070e-09 1s 1s 598158390e-09 0s 0s 598159470e-09 1s 1s 598161350e-09 1s 1s 598168630e-09 0s 0s 598169710e-09 1s 1s 598171630e-09 1s 1s 598178870e-09 0s 0s 598179950e-09 1s 1s 598181910e-09 1s 1s 598189110e-09 0s 0s 598190190e-09 1s 1s 598192190e-09 1s 1s 598199350e-09 0s 0s 598200430e-09 1s 1s 598202470e-09 1s 1s 598209590e-09 0s 0s 598210670e-09 1s 1s 598212750e-09 1s 1s 598219830e-09 0s 0s 598220910e-09 1s 1s 598223030e-09 1s 1s 598230070e-09 0s 0s 598231150e-09 1s 1s 598233310e-09 1s 1s 598240310e-09 0s 0s 598241390e-09 1s 1s 598243590e-09 1s 1s 598250550e-09 0s 0s 598251630e-09 1s 1s 598253870e-09 1s 1s 598260790e-09 0s 0s 598261870e-09 1s 1s 598264150e-09 1s 1s 598271030e-09 0s 0s 598272110e-09 1s 1s 598274430e-09 1s 1s 598281270e-09 0s 0s 598282350e-09 1s 1s 598284710e-09 1s 1s 598291510e-09 0s 0s 598292590e-09 1s 1s 598294990e-09 1s 1s 598301750e-09 0s 0s 598302830e-09 1s 1s 598305270e-09 1s 1s 598311990e-09 0s 0s 598313070e-09 1s 1s 598315550e-09 1s 1s 598322230e-09 0s 0s 598323310e-09 1s 1s 598325830e-09 1s 1s 598332470e-09 0s 0s 598333550e-09 1s 1s 598336110e-09 1s 1s 598342710e-09 0s 0s 598343790e-09 1s 1s 598346390e-09 1s 1s 598352950e-09 0s 0s 598354030e-09 1s 1s 598356670e-09 1s 1s 598363190e-09 0s 0s 598364270e-09 1s 1s 598366950e-09 1s 1s 598373430e-09 0s 0s 598374510e-09 1s 1s 598377230e-09 1s 1s 598383670e-09 0s 0s 598384750e-09 1s 1s 598387510e-09 1s 1s 598393910e-09 0s 0s 598394990e-09 1s 1s 598397790e-09 1s 1s 598404150e-09 0s 0s 598405230e-09 1s 1s 598408070e-09 1s 1s 598414390e-09 0s 0s 598415470e-09 1s 1s 598418350e-09 1s 1s 598424630e-09 0s 0s 598425710e-09 1s 1s 598428630e-09 1s 1s 598434870e-09 0s 0s 598435950e-09 1s 1s 598438910e-09 1s 1s 598445110e-09 0s 0s 598446190e-09 1s 1s 598449190e-09 1s 1s 598455350e-09 0s 0s 598456430e-09 1s 1s 598459470e-09 1s 1s 598465590e-09 0s 0s 598466670e-09 1s 1s 598469750e-09 1s 1s 598475830e-09 0s 0s 598476910e-09 1s 1s 598480030e-09 1s 1s 598486070e-09 0s 0s 598487150e-09 1s 1s 598490310e-09 1s 1s 598496310e-09 0s 0s 598497390e-09 1s 1s 598500590e-09 1s 1s 598506550e-09 0s 0s 598507630e-09 1s 1s 598510870e-09 1s 1s 598516790e-09 0s 0s 598517870e-09 1s 1s 598521150e-09 1s 1s 598527030e-09 0s 0s 598528110e-09 1s 1s 598531430e-09 1s 1s 598537270e-09 0s 0s 598538350e-09 1s 1s 598541710e-09 1s 1s 598547510e-09 0s 0s 598548590e-09 1s 1s 598551990e-09 1s 1s 598557750e-09 0s 0s 598558830e-09 1s 1s 598562270e-09 1s 1s 598567990e-09 0s 0s 598569070e-09 1s 1s 598572550e-09 1s 1s 598578230e-09 0s 0s 598579310e-09 1s 1s 598582830e-09 1s 1s 598588470e-09 0s 0s 598589550e-09 1s 1s 598593110e-09 1s 1s 598598710e-09 0s 0s 598599790e-09 1s 1s 598603390e-09 1s 1s 598608950e-09 0s 0s 598610030e-09 1s 1s 598613670e-09 1s 1s 598619190e-09 0s 0s 598620270e-09 1s 1s 598623950e-09 1s 1s 598629430e-09 0s 0s 598630510e-09 1s 1s 598634230e-09 1s 1s 598639670e-09 0s 0s 598640750e-09 1s 1s 598644510e-09 1s 1s 598649910e-09 0s 0s 598650990e-09 1s 1s 598654790e-09 1s 1s 598660150e-09 0s 0s 598661230e-09 1s 1s 598665070e-09 1s 1s 598670390e-09 0s 0s 598671470e-09 1s 1s 598675350e-09 1s 1s 598680630e-09 0s 0s 598681710e-09 1s 1s 598685630e-09 1s 1s 598690870e-09 0s 0s 598691950e-09 1s 1s 598695910e-09 1s 1s 598701110e-09 0s 0s 598702190e-09 1s 1s 598706190e-09 1s 1s 598711350e-09 0s 0s 598712430e-09 1s 1s 598716470e-09 1s 1s 598721590e-09 0s 0s 598722670e-09 1s 1s 598726750e-09 1s 1s 598731830e-09 0s 0s 598732910e-09 1s 1s 598737030e-09 1s 1s 598742070e-09 0s 0s 598743150e-09 1s 1s 598747310e-09 1s 1s 598752310e-09 0s 0s 598753390e-09 1s 1s 598757590e-09 1s 1s 598762550e-09 0s 0s 598763630e-09 1s 1s 598767870e-09 1s 1s 598772790e-09 0s 0s 598773870e-09 1s 1s 598778150e-09 1s 1s 598783030e-09 0s 0s 598784110e-09 1s 1s 598788430e-09 1s 1s 598793270e-09 0s 0s 598794350e-09 1s 1s 598798710e-09 1s 1s 598803510e-09 0s 0s 598804590e-09 1s 1s 598808990e-09 1s 1s 598813750e-09 0s 0s 598814830e-09 1s 1s 598819270e-09 1s 1s 598823990e-09 0s 0s 598825070e-09 1s 1s 598829550e-09 1s 1s 598834230e-09 0s 0s 598835310e-09 1s 1s 598839830e-09 1s 1s 598844470e-09 0s 0s 598845550e-09 1s 1s 598850110e-09 1s 1s 598854710e-09 0s 0s 598855790e-09 1s 1s 598860390e-09 1s 1s 598864950e-09 0s 0s 598866030e-09 1s 1s 598870670e-09 1s 1s 598875190e-09 0s 0s 598876270e-09 1s 1s 598880950e-09 1s 1s 598885430e-09 0s 0s 598886510e-09 1s 1s 598891230e-09 1s 1s 598895670e-09 0s 0s 598896750e-09 1s 1s 598901510e-09 1s 1s 598905910e-09 0s 0s 598906990e-09 1s 1s 598911790e-09 1s 1s 598916150e-09 0s 0s 598917230e-09 1s 1s 598922070e-09 1s 1s 598926390e-09 0s 0s 598927470e-09 1s 1s 598932350e-09 1s 1s 598936630e-09 0s 0s 598937710e-09 1s 1s 598942630e-09 1s 1s 598946870e-09 0s 0s 598947950e-09 1s 1s 598952910e-09 1s 1s 598957110e-09 0s 0s 598958190e-09 1s 1s 598963190e-09 1s 1s 598967350e-09 0s 0s 598968430e-09 1s 1s 598973470e-09 1s 1s 598977590e-09 0s 0s 598978670e-09 1s 1s 598983750e-09 1s 1s 598987830e-09 0s 0s 598988910e-09 1s 1s 598994030e-09 1s 1s 598998070e-09 0s 0s 598999150e-09 1s 1s 599004310e-09 1s 1s 599008310e-09 0s 0s 599009390e-09 1s 1s 599014590e-09 1s 1s 599018550e-09 0s 0s 599019630e-09 1s 1s 599024870e-09 1s 1s 599028790e-09 0s 0s 599029870e-09 1s 1s 599035150e-09 1s 1s 599039030e-09 0s 0s 599040110e-09 1s 1s 599045430e-09 1s 1s 599049270e-09 0s 0s 599050350e-09 1s 1s 599055710e-09 1s 1s 599059510e-09 0s 0s 599060590e-09 1s 1s 599065990e-09 1s 1s 599069750e-09 0s 0s 599070830e-09 1s 1s 599076270e-09 1s 1s 599079990e-09 0s 0s 599081070e-09 1s 1s 599086550e-09 1s 1s 599090230e-09 0s 0s 599091310e-09 1s 1s 599096830e-09 1s 1s 599100470e-09 0s 0s 599101550e-09 1s 1s 599107110e-09 1s 1s 599110710e-09 0s 0s 599111790e-09 1s 1s 599117390e-09 1s 1s 599120950e-09 0s 0s 599122030e-09 1s 1s 599127670e-09 1s 1s 599131190e-09 0s 0s 599132270e-09 1s 1s 599137950e-09 1s 1s 599141430e-09 0s 0s 599142510e-09 1s 1s 599148230e-09 1s 1s 599151670e-09 0s 0s 599152750e-09 1s 1s 599158510e-09 1s 1s 599161910e-09 0s 0s 599162990e-09 1s 1s 599168790e-09 1s 1s 599172150e-09 0s 0s 599173230e-09 1s 1s 599179070e-09 1s 1s 599182390e-09 0s 0s 599183470e-09 1s 1s 599189350e-09 1s 1s 599192630e-09 0s 0s 599193710e-09 1s 1s 599199630e-09 1s 1s 599202870e-09 0s 0s 599203950e-09 1s 1s 599209910e-09 1s 1s 599213110e-09 0s 0s 599214190e-09 1s 1s 599220190e-09 1s 1s 599223350e-09 0s 0s 599224430e-09 1s 1s 599230470e-09 1s 1s 599233590e-09 0s 0s 599234670e-09 1s 1s 599240750e-09 1s 1s 599243830e-09 0s 0s 599244910e-09 1s 1s 599251030e-09 1s 1s 599254070e-09 0s 0s 599255150e-09 1s 1s 599261310e-09 1s 1s 599264310e-09 0s 0s 599265390e-09 1s 1s 599271590e-09 1s 1s 599274550e-09 0s 0s 599275630e-09 1s 1s 599281870e-09 1s 1s 599284790e-09 0s 0s 599285870e-09 1s 1s 599292150e-09 1s 1s 599295030e-09 0s 0s 599296110e-09 1s 1s 599302430e-09 1s 1s 599305270e-09 0s 0s 599306350e-09 1s 1s 599312710e-09 1s 1s 599315510e-09 0s 0s 599316590e-09 1s 1s 599322990e-09 1s 1s 599325750e-09 0s 0s 599326830e-09 1s 1s 599333270e-09 1s 1s 599335990e-09 0s 0s 599337070e-09 1s 1s 599343550e-09 1s 1s 599346230e-09 0s 0s 599347310e-09 1s 1s 599353830e-09 1s 1s 599356470e-09 0s 0s 599357550e-09 1s 1s 599364110e-09 1s 1s 599366710e-09 0s 0s 599367790e-09 1s 1s 599374390e-09 1s 1s 599376950e-09 0s 0s 599378030e-09 1s 1s 599384670e-09 1s 1s 599387190e-09 0s 0s 599388270e-09 1s 1s 599394950e-09 1s 1s 599397430e-09 0s 0s 599398510e-09 1s 1s 599405230e-09 1s 1s 599407670e-09 0s 0s 599408750e-09 1s 1s 599415510e-09 1s 1s 599417910e-09 0s 0s 599418990e-09 1s 1s 599425790e-09 1s 1s 599428150e-09 0s 0s 599429230e-09 1s 1s 599436070e-09 1s 1s 599438390e-09 0s 0s 599439470e-09 1s 1s 599446350e-09 1s 1s 599448630e-09 0s 0s 599449710e-09 1s 1s 599456630e-09 1s 1s 599458870e-09 0s 0s 599459950e-09 1s 1s 599466910e-09 1s 1s 599469110e-09 0s 0s 599470190e-09 1s 1s 599477190e-09 1s 1s 599479350e-09 0s 0s 599480430e-09 1s 1s 599487470e-09 1s 1s 599489590e-09 0s 0s 599490670e-09 1s 1s 599497750e-09 1s 1s 599499830e-09 0s 0s 599500910e-09 1s 1s 599508030e-09 1s 1s 599510070e-09 0s 0s 599511150e-09 1s 1s 599518310e-09 1s 1s 599520310e-09 0s 0s 599521390e-09 1s 1s 599528590e-09 1s 1s 599530550e-09 0s 0s 599531630e-09 1s 1s 599538870e-09 1s 1s 599540790e-09 0s 0s 599541870e-09 1s 1s 599549150e-09 1s 1s 599551030e-09 0s 0s 599552110e-09 1s 1s 599559430e-09 1s 1s 599561270e-09 0s 0s 599562350e-09 1s 1s 599569710e-09 1s 1s 599571510e-09 0s 0s 599572590e-09 1s 1s 599579990e-09 1s 1s 599581750e-09 0s 0s 599582830e-09 1s 1s 599590270e-09 1s 1s 599591990e-09 0s 0s 599593070e-09 1s 1s 599600550e-09 1s 1s 599602230e-09 0s 0s 599603310e-09 1s 1s 599610830e-09 1s 1s 599612470e-09 0s 0s 599613550e-09 1s 1s 599621110e-09 1s 1s 599622710e-09 0s 0s 599623790e-09 1s 1s 599631390e-09 1s 1s 599632950e-09 0s 0s 599634030e-09 1s 1s 599641670e-09 1s 1s 599643190e-09 0s 0s 599644270e-09 1s 1s 599651950e-09 1s 1s 599653430e-09 0s 0s 599654510e-09 1s 1s 599662230e-09 1s 1s 599663670e-09 0s 0s 599664750e-09 1s 1s 599672510e-09 1s 1s 599673910e-09 0s 0s 599674990e-09 1s 1s 599682790e-09 1s 1s 599684150e-09 0s 0s 599685230e-09 1s 1s 599693070e-09 1s 1s 599694390e-09 0s 0s 599695470e-09 1s 1s 599703350e-09 1s 1s 599704630e-09 0s 0s 599705710e-09 1s 1s 599713630e-09 1s 1s 599714870e-09 0s 0s 599715950e-09 1s 1s 599723910e-09 1s 1s 599725110e-09 0s 0s 599726190e-09 1s 1s 599734190e-09 1s 1s 599735350e-09 0s 0s 599736430e-09 1s 1s 599744470e-09 1s 1s 599745590e-09 0s 0s 599746670e-09 1s 1s 599754750e-09 1s 1s 599755830e-09 0s 0s 599756910e-09 1s 1s 599765030e-09 1s 1s 599766070e-09 0s 0s 599767150e-09 1s 1s 599775310e-09 1s 1s 599776310e-09 0s 0s 599777390e-09 1s 1s 599785590e-09 1s 1s 599786550e-09 0s 0s 599787630e-09 1s 1s 599795870e-09 1s 1s 599796790e-09 0s 0s 599797870e-09 1s 1s 599806150e-09 1s 1s 599807030e-09 0s 0s 599808110e-09 1s 1s 599816430e-09 1s 1s 599817270e-09 0s 0s 599818350e-09 1s 1s 599826710e-09 1s 1s 599827510e-09 0s 0s 599828590e-09 1s 1s 599836990e-09 1s 1s 599837750e-09 0s 0s 599838830e-09 1s 1s 599847270e-09 1s 1s 599847990e-09 0s 0s 599849070e-09 1s 1s 599857550e-09 1s 1s 599858230e-09 0s 0s 599859310e-09 1s 1s 599867830e-09 1s 1s 599868470e-09 0s 0s 599869550e-09 1s 1s 599878110e-09 1s 1s 599878710e-09 0s 0s 599879790e-09 1s 1s 599888390e-09 1s 1s 599888950e-09 0s 0s 599890030e-09 1s 1s 599898670e-09 1s 1s 599899190e-09 0s 0s 599900270e-09 1s 1s 599908950e-09 1s 1s 599909430e-09 0s 0s 599910510e-09 1s 1s 599919230e-09 1s 1s 599919670e-09 0s 0s 599920750e-09 1s 1s 599929510e-09 1s 1s 599929910e-09 0s 0s 599930990e-09 1s 1s 599939790e-09 1s 1s 599940150e-09 0s 0s 599941230e-09 1s 1s 599950070e-09 1s 1s 599950390e-09 0s 0s 599951470e-09 1s 1s 599960350e-09 1s 1s 599960630e-09 0s 0s 599961710e-09 1s 1s 599970630e-09 1s 1s 599970870e-09 0s 0s 599971950e-09 1s 1s 599980910e-09 1s 1s 599981110e-09 0s 0s 599982190e-09 1s 1s 599991190e-09 1s 1s 599991350e-09 0s 0s 599992430e-09 1s 1s 600001470e-09 1s 1s 600001590e-09 0s 0s 600002670e-09 1s 1s 600011750e-09 1s 1s 600011830e-09 0s 0s 600012910e-09 1s 1s 600022030e-09 1s 1s 600022070e-09 0s 0s 600023150e-09 1s 1s 600032310e-09 0s 0s 600033390e-09 1s 1s 600042550e-09 0s 0s 600042590e-09 0s 0s 600043630e-09 1s 1s 600052790e-09 0s 0s 600052870e-09 0s 0s 600053870e-09 1s 1s 600063030e-09 0s 0s 600063150e-09 0s 0s 600064110e-09 1s 1s 600073270e-09 0s 0s 600073430e-09 0s 0s 600074350e-09 1s 1s 600083510e-09 0s 0s 600083710e-09 0s 0s 600084590e-09 1s 1s 600093750e-09 0s 0s 600093990e-09 0s 0s 600094830e-09 1s 1s 600103990e-09 0s 0s 600104270e-09 0s 0s 600105070e-09 1s 1s 600114230e-09 0s 0s 600114550e-09 0s 0s 600115310e-09 1s 1s 600124470e-09 0s 0s 600124830e-09 0s 0s 600125550e-09 1s 1s 600134710e-09 0s 0s 600135110e-09 0s 0s 600135790e-09 1s 1s 600144950e-09 0s 0s 600145390e-09 0s 0s 600146030e-09 1s 1s 600155190e-09 0s 0s 600155670e-09 0s 0s 600156270e-09 1s 1s 600165430e-09 0s 0s 600165950e-09 0s 0s 600166510e-09 1s 1s 600175670e-09 0s 0s 600176230e-09 0s 0s 600176750e-09 1s 1s 600185910e-09 0s 0s 600186510e-09 0s 0s 600186990e-09 1s 1s 600196150e-09 0s 0s 600196790e-09 0s 0s 600197230e-09 1s 1s 600206390e-09 0s 0s 600207070e-09 0s 0s 600207470e-09 1s 1s 600216630e-09 0s 0s 600217350e-09 0s 0s 600217710e-09 1s 1s 600226870e-09 0s 0s 600227630e-09 0s 0s 600227950e-09 1s 1s 600237110e-09 0s 0s 600237910e-09 0s 0s 600238190e-09 1s 1s 600247350e-09 0s 0s 600248190e-09 0s 0s 600248430e-09 1s 1s 600257590e-09 0s 0s 600258470e-09 0s 0s 600258670e-09 1s 1s 600267830e-09 0s 0s 600268750e-09 0s 0s 600268910e-09 1s 1s 600278070e-09 0s 0s 600279030e-09 0s 0s 600279150e-09 1s 1s 600288310e-09 0s 0s 600289310e-09 0s 0s 600289390e-09 1s 1s 600298550e-09 0s 0s 600299590e-09 0s 0s 600299630e-09 1s 1s 600308790e-09 0s 0s 600309870e-09 1s 1s 600309910e-09 1s 1s 600319070e-09 0s 0s 600320110e-09 1s 1s 600320190e-09 1s 1s 600329310e-09 0s 0s 600330350e-09 1s 1s 600330470e-09 1s 1s 600339550e-09 0s 0s 600340590e-09 1s 1s 600340750e-09 1s 1s 600349790e-09 0s 0s 600350830e-09 1s 1s 600351030e-09 1s 1s 600360030e-09 0s 0s 600361070e-09 1s 1s 600361310e-09 1s 1s 600370270e-09 0s 0s 600371310e-09 1s 1s 600371590e-09 1s 1s 600380510e-09 0s 0s 600381550e-09 1s 1s 600381870e-09 1s 1s 600390750e-09 0s 0s 600391790e-09 1s 1s 600392150e-09 1s 1s 600400990e-09 0s 0s 600402030e-09 1s 1s 600402430e-09 1s 1s 600411230e-09 0s 0s 600412270e-09 1s 1s 600412710e-09 1s 1s 600421470e-09 0s 0s 600422510e-09 1s 1s 600422990e-09 1s 1s 600431710e-09 0s 0s 600432750e-09 1s 1s 600433270e-09 1s 1s 600441950e-09 0s 0s 600442990e-09 1s 1s 600443550e-09 1s 1s 600452190e-09 0s 0s 600453230e-09 1s 1s 600453830e-09 1s 1s 600462430e-09 0s 0s 600463470e-09 1s 1s 600464110e-09 1s 1s 600472670e-09 0s 0s 600473710e-09 1s 1s 600474390e-09 1s 1s 600482910e-09 0s 0s 600483950e-09 1s 1s 600484670e-09 1s 1s 600493150e-09 0s 0s 600494190e-09 1s 1s 600494950e-09 1s 1s 600503390e-09 0s 0s 600504430e-09 1s 1s 600505230e-09 1s 1s 600513630e-09 0s 0s 600514670e-09 1s 1s 600515510e-09 1s 1s 600523870e-09 0s 0s 600524910e-09 1s 1s 600525790e-09 1s 1s 600534110e-09 0s 0s 600535150e-09 1s 1s 600536070e-09 1s 1s 600544350e-09 0s 0s 600545390e-09 1s 1s 600546350e-09 1s 1s 600554590e-09 0s 0s 600555630e-09 1s 1s 600556630e-09 1s 1s 600564830e-09 0s 0s 600565870e-09 1s 1s 600566910e-09 1s 1s 600575070e-09 0s 0s 600576110e-09 1s 1s 600577190e-09 1s 1s 600585310e-09 0s 0s 600586350e-09 1s 1s 600587470e-09 1s 1s 600595550e-09 0s 0s 600596590e-09 1s 1s 600597750e-09 1s 1s 600605790e-09 0s 0s 600606830e-09 1s 1s 600608030e-09 1s 1s 600616030e-09 0s 0s 600617070e-09 1s 1s 600618310e-09 1s 1s 600626270e-09 0s 0s 600627310e-09 1s 1s 600628590e-09 1s 1s 600636510e-09 0s 0s 600637550e-09 1s 1s 600638870e-09 1s 1s 600646750e-09 0s 0s 600647790e-09 1s 1s 600649150e-09 1s 1s 600656990e-09 0s 0s 600658030e-09 1s 1s 600659430e-09 1s 1s 600667230e-09 0s 0s 600668270e-09 1s 1s 600669710e-09 1s 1s 600677470e-09 0s 0s 600678510e-09 1s 1s 600679990e-09 1s 1s 600687710e-09 0s 0s 600688750e-09 1s 1s 600690270e-09 1s 1s 600697950e-09 0s 0s 600698990e-09 1s 1s 600700550e-09 1s 1s 600708190e-09 0s 0s 600709230e-09 1s 1s 600710830e-09 1s 1s 600718430e-09 0s 0s 600719470e-09 1s 1s 600721110e-09 1s 1s 600728670e-09 0s 0s 600729710e-09 1s 1s 600731390e-09 1s 1s 600738910e-09 0s 0s 600739950e-09 1s 1s 600741670e-09 1s 1s 600749150e-09 0s 0s 600750190e-09 1s 1s 600751950e-09 1s 1s 600759390e-09 0s 0s 600760430e-09 1s 1s 600762230e-09 1s 1s 600769630e-09 0s 0s 600770670e-09 1s 1s 600772510e-09 1s 1s 600779870e-09 0s 0s 600780910e-09 1s 1s 600782790e-09 1s 1s 600790110e-09 0s 0s 600791150e-09 1s 1s 600793070e-09 1s 1s 600800350e-09 0s 0s 600801390e-09 1s 1s 600803350e-09 1s 1s 600810590e-09 0s 0s 600811630e-09 1s 1s 600813630e-09 1s 1s 600820830e-09 0s 0s 600821870e-09 1s 1s 600823910e-09 1s 1s 600831070e-09 0s 0s 600832110e-09 1s 1s 600834190e-09 1s 1s 600841310e-09 0s 0s 600842350e-09 1s 1s 600844470e-09 1s 1s 600851550e-09 0s 0s 600852590e-09 1s 1s 600854750e-09 1s 1s 600861790e-09 0s 0s 600862830e-09 1s 1s 600865030e-09 1s 1s 600872030e-09 0s 0s 600873070e-09 1s 1s 600875310e-09 1s 1s 600882270e-09 0s 0s 600883310e-09 1s 1s 600885590e-09 1s 1s 600892510e-09 0s 0s 600893550e-09 1s 1s 600895870e-09 1s 1s 600902750e-09 0s 0s 600903790e-09 1s 1s 600906150e-09 1s 1s 600912990e-09 0s 0s 600914030e-09 1s 1s 600916430e-09 1s 1s 600923230e-09 0s 0s 600924270e-09 1s 1s 600926710e-09 1s 1s 600933470e-09 0s 0s 600934510e-09 1s 1s 600936990e-09 1s 1s 600943710e-09 0s 0s 600944750e-09 1s 1s 600947270e-09 1s 1s 600953950e-09 0s 0s 600954990e-09 1s 1s 600957550e-09 1s 1s 600964190e-09 0s 0s 600965230e-09 1s 1s 600967830e-09 1s 1s 600974430e-09 0s 0s 600975470e-09 1s 1s 600978110e-09 1s 1s 600984670e-09 0s 0s 600985710e-09 1s 1s 600988390e-09 1s 1s 600994910e-09 0s 0s 600995950e-09 1s 1s 600998670e-09 1s 1s 601005150e-09 0s 0s 601006190e-09 1s 1s 601008950e-09 1s 1s 601015390e-09 0s 0s 601016430e-09 1s 1s 601019230e-09 1s 1s 601025630e-09 0s 0s 601026670e-09 1s 1s 601029510e-09 1s 1s 601035870e-09 0s 0s 601036910e-09 1s 1s 601039790e-09 1s 1s 601046110e-09 0s 0s 601047150e-09 1s 1s 601050070e-09 1s 1s 601056350e-09 0s 0s 601057390e-09 1s 1s 601060350e-09 1s 1s 601066590e-09 0s 0s 601067630e-09 1s 1s 601070630e-09 1s 1s 601076830e-09 0s 0s 601077870e-09 1s 1s 601080910e-09 1s 1s 601087070e-09 0s 0s 601088110e-09 1s 1s 601091190e-09 1s 1s 601097310e-09 0s 0s 601098350e-09 1s 1s 601101470e-09 1s 1s 601107550e-09 0s 0s 601108590e-09 1s 1s 601111750e-09 1s 1s 601117790e-09 0s 0s 601118830e-09 1s 1s 601122030e-09 1s 1s 601128030e-09 0s 0s 601129070e-09 1s 1s 601132310e-09 1s 1s 601138270e-09 0s 0s 601139310e-09 1s 1s 601142590e-09 1s 1s 601148510e-09 0s 0s 601149550e-09 1s 1s 601152870e-09 1s 1s 601158750e-09 0s 0s 601159790e-09 1s 1s 601163150e-09 1s 1s 601168990e-09 0s 0s 601170030e-09 1s 1s 601173430e-09 1s 1s 601179230e-09 0s 0s 601180270e-09 1s 1s 601183710e-09 1s 1s 601189470e-09 0s 0s 601190510e-09 1s 1s 601193990e-09 1s 1s 601199710e-09 0s 0s 601200750e-09 1s 1s 601204270e-09 1s 1s 601209950e-09 0s 0s 601210990e-09 1s 1s 601214550e-09 1s 1s 601220190e-09 0s 0s 601221230e-09 1s 1s 601224830e-09 1s 1s 601230430e-09 0s 0s 601231470e-09 1s 1s 601235110e-09 1s 1s 601240670e-09 0s 0s 601241710e-09 1s 1s 601245390e-09 1s 1s 601250910e-09 0s 0s 601251950e-09 1s 1s 601255670e-09 1s 1s 601261150e-09 0s 0s 601262190e-09 1s 1s 601265950e-09 1s 1s 601271390e-09 0s 0s 601272430e-09 1s 1s 601276230e-09 1s 1s 601281630e-09 0s 0s 601282670e-09 1s 1s 601286510e-09 1s 1s 601291870e-09 0s 0s 601292910e-09 1s 1s 601296790e-09 1s 1s 601302110e-09 0s 0s 601303150e-09 1s 1s 601307070e-09 1s 1s 601312350e-09 0s 0s 601313390e-09 1s 1s 601317350e-09 1s 1s 601322590e-09 0s 0s 601323630e-09 1s 1s 601327630e-09 1s 1s 601332830e-09 0s 0s 601333870e-09 1s 1s 601337910e-09 1s 1s 601343070e-09 0s 0s 601344110e-09 1s 1s 601348190e-09 1s 1s 601353310e-09 0s 0s 601354350e-09 1s 1s 601358470e-09 1s 1s 601363550e-09 0s 0s 601364590e-09 1s 1s 601368750e-09 1s 1s 601373790e-09 0s 0s 601374830e-09 1s 1s 601379030e-09 1s 1s 601384030e-09 0s 0s 601385070e-09 1s 1s 601389310e-09 1s 1s 601394270e-09 0s 0s 601395310e-09 1s 1s 601399590e-09 1s 1s 601404510e-09 0s 0s 601405550e-09 1s 1s 601409870e-09 1s 1s 601414750e-09 0s 0s 601415790e-09 1s 1s 601420150e-09 1s 1s 601424990e-09 0s 0s 601426030e-09 1s 1s 601430430e-09 1s 1s 601435230e-09 0s 0s 601436270e-09 1s 1s 601440710e-09 1s 1s 601445470e-09 0s 0s 601446510e-09 1s 1s 601450990e-09 1s 1s 601455710e-09 0s 0s 601456750e-09 1s 1s 601461270e-09 1s 1s 601465950e-09 0s 0s 601466990e-09 1s 1s 601471550e-09 1s 1s 601476190e-09 0s 0s 601477230e-09 1s 1s 601481830e-09 1s 1s 601486430e-09 0s 0s 601487470e-09 1s 1s 601492110e-09 1s 1s 601496670e-09 0s 0s 601497710e-09 1s 1s 601502390e-09 1s 1s 601506910e-09 0s 0s 601507950e-09 1s 1s 601512670e-09 1s 1s 601517150e-09 0s 0s 601518190e-09 1s 1s 601522950e-09 1s 1s 601527390e-09 0s 0s 601528430e-09 1s 1s 601533230e-09 1s 1s 601537630e-09 0s 0s 601538670e-09 1s 1s 601543510e-09 1s 1s 601547870e-09 0s 0s 601548910e-09 1s 1s 601553790e-09 1s 1s 601558110e-09 0s 0s 601559150e-09 1s 1s 601564070e-09 1s 1s 601568350e-09 0s 0s 601569390e-09 1s 1s 601574350e-09 1s 1s 601578590e-09 0s 0s 601579630e-09 1s 1s 601584630e-09 1s 1s 601588830e-09 0s 0s 601589870e-09 1s 1s 601594910e-09 1s 1s 601599070e-09 0s 0s 601600110e-09 1s 1s 601605190e-09 1s 1s 601609310e-09 0s 0s 601610350e-09 1s 1s 601615470e-09 1s 1s 601619550e-09 0s 0s 601620590e-09 1s 1s 601625750e-09 1s 1s 601629790e-09 0s 0s 601630830e-09 1s 1s 601636030e-09 1s 1s 601640030e-09 0s 0s 601641070e-09 1s 1s 601646310e-09 1s 1s 601650270e-09 0s 0s 601651310e-09 1s 1s 601656590e-09 1s 1s 601660510e-09 0s 0s 601661550e-09 1s 1s 601666870e-09 1s 1s 601670750e-09 0s 0s 601671790e-09 1s 1s 601677150e-09 1s 1s 601680990e-09 0s 0s 601682030e-09 1s 1s 601687430e-09 1s 1s 601691230e-09 0s 0s 601692270e-09 1s 1s 601697710e-09 1s 1s 601701470e-09 0s 0s 601702510e-09 1s 1s 601707990e-09 1s 1s 601711710e-09 0s 0s 601712750e-09 1s 1s 601718270e-09 1s 1s 601721950e-09 0s 0s 601722990e-09 1s 1s 601728550e-09 1s 1s 601732190e-09 0s 0s 601733230e-09 1s 1s 601738830e-09 1s 1s 601742430e-09 0s 0s 601743470e-09 1s 1s 601749110e-09 1s 1s 601752670e-09 0s 0s 601753710e-09 1s 1s 601759390e-09 1s 1s 601762910e-09 0s 0s 601763950e-09 1s 1s 601769670e-09 1s 1s 601773150e-09 0s 0s 601774190e-09 1s 1s 601779950e-09 1s 1s 601783390e-09 0s 0s 601784430e-09 1s 1s 601790230e-09 1s 1s 601793630e-09 0s 0s 601794670e-09 1s 1s 601800510e-09 1s 1s 601803870e-09 0s 0s 601804910e-09 1s 1s 601810790e-09 1s 1s 601814110e-09 0s 0s 601815150e-09 1s 1s 601821070e-09 1s 1s 601824350e-09 0s 0s 601825390e-09 1s 1s 601831350e-09 1s 1s 601834590e-09 0s 0s 601835630e-09 1s 1s 601841630e-09 1s 1s 601844830e-09 0s 0s 601845870e-09 1s 1s 601851910e-09 1s 1s 601855070e-09 0s 0s 601856110e-09 1s 1s 601862190e-09 1s 1s 601865310e-09 0s 0s 601866350e-09 1s 1s 601872470e-09 1s 1s 601875550e-09 0s 0s 601876590e-09 1s 1s 601882750e-09 1s 1s 601885790e-09 0s 0s 601886830e-09 1s 1s 601893030e-09 1s 1s 601896030e-09 0s 0s 601897070e-09 1s 1s 601903310e-09 1s 1s 601906270e-09 0s 0s 601907310e-09 1s 1s 601913590e-09 1s 1s 601916510e-09 0s 0s 601917550e-09 1s 1s 601923870e-09 1s 1s 601926750e-09 0s 0s 601927790e-09 1s 1s 601934150e-09 1s 1s 601936990e-09 0s 0s 601938030e-09 1s 1s 601944430e-09 1s 1s 601947230e-09 0s 0s 601948270e-09 1s 1s 601954710e-09 1s 1s 601957470e-09 0s 0s 601958510e-09 1s 1s 601964990e-09 1s 1s 601967710e-09 0s 0s 601968750e-09 1s 1s 601975270e-09 1s 1s 601977950e-09 0s 0s 601978990e-09 1s 1s 601985550e-09 1s 1s 601988190e-09 0s 0s 601989230e-09 1s 1s 601995830e-09 1s 1s 601998430e-09 0s 0s 601999470e-09 1s 1s 602006110e-09 1s 1s 602008670e-09 0s 0s 602009710e-09 1s 1s 602016390e-09 1s 1s 602018910e-09 0s 0s 602019950e-09 1s 1s 602026670e-09 1s 1s 602029150e-09 0s 0s 602030190e-09 1s 1s 602036950e-09 1s 1s 602039390e-09 0s 0s 602040430e-09 1s 1s 602047230e-09 1s 1s 602049630e-09 0s 0s 602050670e-09 1s 1s 602057510e-09 1s 1s 602059870e-09 0s 0s 602060910e-09 1s 1s 602067790e-09 1s 1s 602070110e-09 0s 0s 602071150e-09 1s 1s 602078070e-09 1s 1s 602080350e-09 0s 0s 602081390e-09 1s 1s 602088350e-09 1s 1s 602090590e-09 0s 0s 602091630e-09 1s 1s 602098630e-09 1s 1s 602100830e-09 0s 0s 602101870e-09 1s 1s 602108910e-09 1s 1s 602111070e-09 0s 0s 602112110e-09 1s 1s 602119190e-09 1s 1s 602121310e-09 0s 0s 602122350e-09 1s 1s 602129470e-09 1s 1s 602131550e-09 0s 0s 602132590e-09 1s 1s 602139750e-09 1s 1s 602141790e-09 0s 0s 602142830e-09 1s 1s 602150030e-09 1s 1s 602152030e-09 0s 0s 602153070e-09 1s 1s 602160310e-09 1s 1s 602162270e-09 0s 0s 602163310e-09 1s 1s 602170590e-09 1s 1s 602172510e-09 0s 0s 602173550e-09 1s 1s 602180870e-09 1s 1s 602182750e-09 0s 0s 602183790e-09 1s 1s 602191150e-09 1s 1s 602192990e-09 0s 0s 602194030e-09 1s 1s 602201430e-09 1s 1s 602203230e-09 0s 0s 602204270e-09 1s 1s 602211710e-09 1s 1s 602213470e-09 0s 0s 602214510e-09 1s 1s 602221990e-09 1s 1s 602223710e-09 0s 0s 602224750e-09 1s 1s 602232270e-09 1s 1s 602233950e-09 0s 0s 602234990e-09 1s 1s 602242550e-09 1s 1s 602244190e-09 0s 0s 602245230e-09 1s 1s 602252830e-09 1s 1s 602254430e-09 0s 0s 602255470e-09 1s 1s 602263110e-09 1s 1s 602264670e-09 0s 0s 602265710e-09 1s 1s 602273390e-09 1s 1s 602274910e-09 0s 0s 602275950e-09 1s 1s 602283670e-09 1s 1s 602285150e-09 0s 0s 602286190e-09 1s 1s 602293950e-09 1s 1s 602295390e-09 0s 0s 602296430e-09 1s 1s 602304230e-09 1s 1s 602305630e-09 0s 0s 602306670e-09 1s 1s 602314510e-09 1s 1s 602315870e-09 0s 0s 602316910e-09 1s 1s 602324790e-09 1s 1s 602326110e-09 0s 0s 602327150e-09 1s 1s 602335070e-09 1s 1s 602336350e-09 0s 0s 602337390e-09 1s 1s 602345350e-09 1s 1s 602346590e-09 0s 0s 602347630e-09 1s 1s 602355630e-09 1s 1s 602356830e-09 0s 0s 602357870e-09 1s 1s 602365910e-09 1s 1s 602367070e-09 0s 0s 602368110e-09 1s 1s 602376190e-09 1s 1s 602377310e-09 0s 0s 602378350e-09 1s 1s 602386470e-09 1s 1s 602387550e-09 0s 0s 602388590e-09 1s 1s 602396750e-09 1s 1s 602397790e-09 0s 0s 602398830e-09 1s 1s 602407030e-09 1s 1s 602408030e-09 0s 0s 602409070e-09 1s 1s 602417310e-09 1s 1s 602418270e-09 0s 0s 602419310e-09 1s 1s 602427590e-09 1s 1s 602428510e-09 0s 0s 602429550e-09 1s 1s 602437870e-09 1s 1s 602438750e-09 0s 0s 602439790e-09 1s 1s 602448150e-09 1s 1s 602448990e-09 0s 0s 602450030e-09 1s 1s 602458430e-09 1s 1s 602459230e-09 0s 0s 602460270e-09 1s 1s 602468710e-09 1s 1s 602469470e-09 0s 0s 602470510e-09 1s 1s 602478990e-09 1s 1s 602479710e-09 0s 0s 602480750e-09 1s 1s 602489270e-09 1s 1s 602489950e-09 0s 0s 602490990e-09 1s 1s 602499550e-09 1s 1s 602500190e-09 0s 0s 602501230e-09 1s 1s 602509830e-09 1s 1s 602510430e-09 0s 0s 602511470e-09 1s 1s 602520110e-09 1s 1s 602520670e-09 0s 0s 602521710e-09 1s 1s 602530390e-09 1s 1s 602530910e-09 0s 0s 602531950e-09 1s 1s 602540670e-09 1s 1s 602541150e-09 0s 0s 602542190e-09 1s 1s 602550950e-09 1s 1s 602551390e-09 0s 0s 602552430e-09 1s 1s 602561230e-09 1s 1s 602561630e-09 0s 0s 602562670e-09 1s 1s 602571510e-09 1s 1s 602571870e-09 0s 0s 602572910e-09 1s 1s 602581790e-09 1s 1s 602582110e-09 0s 0s 602583150e-09 1s 1s 602592070e-09 1s 1s 602592350e-09 0s 0s 602593390e-09 1s 1s 602602350e-09 1s 1s 602602590e-09 0s 0s 602603630e-09 1s 1s 602612630e-09 1s 1s 602612830e-09 0s 0s 602613870e-09 1s 1s 602622910e-09 1s 1s 602623070e-09 0s 0s 602624110e-09 1s 1s 602633190e-09 1s 1s 602633310e-09 0s 0s 602634350e-09 1s 1s 602643470e-09 1s 1s 602643550e-09 0s 0s 602644590e-09 1s 1s 602653750e-09 1s 1s 602653790e-09 0s 0s 602654830e-09 1s 1s 602664030e-09 0s 0s 602665070e-09 1s 1s 602674270e-09 0s 0s 602674310e-09 0s 0s 602675310e-09 1s 1s 602684510e-09 0s 0s 602684590e-09 0s 0s 602685550e-09 1s 1s 602694750e-09 0s 0s 602694870e-09 0s 0s 602695790e-09 1s 1s 602704990e-09 0s 0s 602705150e-09 0s 0s 602706030e-09 1s 1s 602715230e-09 0s 0s 602715430e-09 0s 0s 602716270e-09 1s 1s 602725470e-09 0s 0s 602725710e-09 0s 0s 602726510e-09 1s 1s 602735710e-09 0s 0s 602735990e-09 0s 0s 602736750e-09 1s 1s 602745950e-09 0s 0s 602746270e-09 0s 0s 602746990e-09 1s 1s 602756190e-09 0s 0s 602756550e-09 0s 0s 602757230e-09 1s 1s 602766430e-09 0s 0s 602766830e-09 0s 0s 602767470e-09 1s 1s 602776670e-09 0s 0s 602777110e-09 0s 0s 602777710e-09 1s 1s 602786910e-09 0s 0s 602787390e-09 0s 0s 602787950e-09 1s 1s 602797150e-09 0s 0s 602797670e-09 0s 0s 602798190e-09 1s 1s 602807390e-09 0s 0s 602807950e-09 0s 0s 602808430e-09 1s 1s 602817630e-09 0s 0s 602818230e-09 0s 0s 602818670e-09 1s 1s 602827870e-09 0s 0s 602828510e-09 0s 0s 602828910e-09 1s 1s 602838110e-09 0s 0s 602838790e-09 0s 0s 602839150e-09 1s 1s 602848350e-09 0s 0s 602849070e-09 0s 0s 602849390e-09 1s 1s 602858590e-09 0s 0s 602859350e-09 0s 0s 602859630e-09 1s 1s 602868830e-09 0s 0s 602869630e-09 0s 0s 602869870e-09 1s 1s 602879070e-09 0s 0s 602879910e-09 0s 0s 602880110e-09 1s 1s 602889310e-09 0s 0s 602890190e-09 0s 0s 602890350e-09 1s 1s 602899550e-09 0s 0s 602900470e-09 0s 0s 602900590e-09 1s 1s 602909790e-09 0s 0s 602910750e-09 0s 0s 602910830e-09 1s 1s 602920030e-09 0s 0s 602921030e-09 0s 0s 602921070e-09 1s 1s 602930270e-09 0s 0s 602931310e-09 1s 1s 602931350e-09 1s 1s 602940550e-09 0s 0s 602941550e-09 1s 1s 602941630e-09 1s 1s 602950790e-09 0s 0s 602951790e-09 1s 1s 602951910e-09 1s 1s 602961030e-09 0s 0s 602962030e-09 1s 1s 602962190e-09 1s 1s 602971270e-09 0s 0s 602972270e-09 1s 1s 602972470e-09 1s 1s 602981510e-09 0s 0s 602982510e-09 1s 1s 602982750e-09 1s 1s 602991750e-09 0s 0s 602992750e-09 1s 1s 602993030e-09 1s 1s 603001990e-09 0s 0s 603002990e-09 1s 1s 603003310e-09 1s 1s 603012230e-09 0s 0s 603013230e-09 1s 1s 603013590e-09 1s 1s 603022470e-09 0s 0s 603023470e-09 1s 1s 603023870e-09 1s 1s 603032710e-09 0s 0s 603033710e-09 1s 1s 603034150e-09 1s 1s 603042950e-09 0s 0s 603043950e-09 1s 1s 603044430e-09 1s 1s 603053190e-09 0s 0s 603054190e-09 1s 1s 603054710e-09 1s 1s 603063430e-09 0s 0s 603064430e-09 1s 1s 603064990e-09 1s 1s 603073670e-09 0s 0s 603074670e-09 1s 1s 603075270e-09 1s 1s 603083910e-09 0s 0s 603084910e-09 1s 1s 603085550e-09 1s 1s 603094150e-09 0s 0s 603095150e-09 1s 1s 603095830e-09 1s 1s 603104390e-09 0s 0s 603105390e-09 1s 1s 603106110e-09 1s 1s 603114630e-09 0s 0s 603115630e-09 1s 1s 603116390e-09 1s 1s 603124870e-09 0s 0s 603125870e-09 1s 1s 603126670e-09 1s 1s 603135110e-09 0s 0s 603136110e-09 1s 1s 603136950e-09 1s 1s 603145350e-09 0s 0s 603146350e-09 1s 1s 603147230e-09 1s 1s 603155590e-09 0s 0s 603156590e-09 1s 1s 603157510e-09 1s 1s 603165830e-09 0s 0s 603166830e-09 1s 1s 603167790e-09 1s 1s 603176070e-09 0s 0s 603177070e-09 1s 1s 603178070e-09 1s 1s 603186310e-09 0s 0s 603187310e-09 1s 1s 603188350e-09 1s 1s 603196550e-09 0s 0s 603197550e-09 1s 1s 603198630e-09 1s 1s 603206790e-09 0s 0s 603207790e-09 1s 1s 603208910e-09 1s 1s 603217030e-09 0s 0s 603218030e-09 1s 1s 603219190e-09 1s 1s 603227270e-09 0s 0s 603228270e-09 1s 1s 603229470e-09 1s 1s 603237510e-09 0s 0s 603238510e-09 1s 1s 603239750e-09 1s 1s 603247750e-09 0s 0s 603248750e-09 1s 1s 603250030e-09 1s 1s 603257990e-09 0s 0s 603258990e-09 1s 1s 603260310e-09 1s 1s 603268230e-09 0s 0s 603269230e-09 1s 1s 603270590e-09 1s 1s 603278470e-09 0s 0s 603279470e-09 1s 1s 603280870e-09 1s 1s 603288710e-09 0s 0s 603289710e-09 1s 1s 603291150e-09 1s 1s 603298950e-09 0s 0s 603299950e-09 1s 1s 603301430e-09 1s 1s 603309190e-09 0s 0s 603310190e-09 1s 1s 603311710e-09 1s 1s 603319430e-09 0s 0s 603320430e-09 1s 1s 603321990e-09 1s 1s 603329670e-09 0s 0s 603330670e-09 1s 1s 603332270e-09 1s 1s 603339910e-09 0s 0s 603340910e-09 1s 1s 603342550e-09 1s 1s 603350150e-09 0s 0s 603351150e-09 1s 1s 603352830e-09 1s 1s 603360390e-09 0s 0s 603361390e-09 1s 1s 603363110e-09 1s 1s 603370630e-09 0s 0s 603371630e-09 1s 1s 603373390e-09 1s 1s 603380870e-09 0s 0s 603381870e-09 1s 1s 603383670e-09 1s 1s 603391110e-09 0s 0s 603392110e-09 1s 1s 603393950e-09 1s 1s 603401350e-09 0s 0s 603402350e-09 1s 1s 603404230e-09 1s 1s 603411590e-09 0s 0s 603412590e-09 1s 1s 603414510e-09 1s 1s 603421830e-09 0s 0s 603422830e-09 1s 1s 603424790e-09 1s 1s 603432070e-09 0s 0s 603433070e-09 1s 1s 603435070e-09 1s 1s 603442310e-09 0s 0s 603443310e-09 1s 1s 603445350e-09 1s 1s 603452550e-09 0s 0s 603453550e-09 1s 1s 603455630e-09 1s 1s 603462790e-09 0s 0s 603463790e-09 1s 1s 603465910e-09 1s 1s 603473030e-09 0s 0s 603474030e-09 1s 1s 603476190e-09 1s 1s 603483270e-09 0s 0s 603484270e-09 1s 1s 603486470e-09 1s 1s 603493510e-09 0s 0s 603494510e-09 1s 1s 603496750e-09 1s 1s 603503750e-09 0s 0s 603504750e-09 1s 1s 603507030e-09 1s 1s 603513990e-09 0s 0s 603514990e-09 1s 1s 603517310e-09 1s 1s 603524230e-09 0s 0s 603525230e-09 1s 1s 603527590e-09 1s 1s 603534470e-09 0s 0s 603535470e-09 1s 1s 603537870e-09 1s 1s 603544710e-09 0s 0s 603545710e-09 1s 1s 603548150e-09 1s 1s 603554950e-09 0s 0s 603555950e-09 1s 1s 603558430e-09 1s 1s 603565190e-09 0s 0s 603566190e-09 1s 1s 603568710e-09 1s 1s 603575430e-09 0s 0s 603576430e-09 1s 1s 603578990e-09 1s 1s 603585670e-09 0s 0s 603586670e-09 1s 1s 603589270e-09 1s 1s 603595910e-09 0s 0s 603596910e-09 1s 1s 603599550e-09 1s 1s 603606150e-09 0s 0s 603607150e-09 1s 1s 603609830e-09 1s 1s 603616390e-09 0s 0s 603617390e-09 1s 1s 603620110e-09 1s 1s 603626630e-09 0s 0s 603627630e-09 1s 1s 603630390e-09 1s 1s 603636870e-09 0s 0s 603637870e-09 1s 1s 603640670e-09 1s 1s 603647110e-09 0s 0s 603648110e-09 1s 1s 603650950e-09 1s 1s 603657350e-09 0s 0s 603658350e-09 1s 1s 603661230e-09 1s 1s 603667590e-09 0s 0s 603668590e-09 1s 1s 603671510e-09 1s 1s 603677830e-09 0s 0s 603678830e-09 1s 1s 603681790e-09 1s 1s 603688070e-09 0s 0s 603689070e-09 1s 1s 603692070e-09 1s 1s 603698310e-09 0s 0s 603699310e-09 1s 1s 603702350e-09 1s 1s 603708550e-09 0s 0s 603709550e-09 1s 1s 603712630e-09 1s 1s 603718790e-09 0s 0s 603719790e-09 1s 1s 603722910e-09 1s 1s 603729030e-09 0s 0s 603730030e-09 1s 1s 603733190e-09 1s 1s 603739270e-09 0s 0s 603740270e-09 1s 1s 603743470e-09 1s 1s 603749510e-09 0s 0s 603750510e-09 1s 1s 603753750e-09 1s 1s 603759750e-09 0s 0s 603760750e-09 1s 1s 603764030e-09 1s 1s 603769990e-09 0s 0s 603770990e-09 1s 1s 603774310e-09 1s 1s 603780230e-09 0s 0s 603781230e-09 1s 1s 603784590e-09 1s 1s 603790470e-09 0s 0s 603791470e-09 1s 1s 603794870e-09 1s 1s 603800710e-09 0s 0s 603801710e-09 1s 1s 603805150e-09 1s 1s 603810950e-09 0s 0s 603811950e-09 1s 1s 603815430e-09 1s 1s 603821190e-09 0s 0s 603822190e-09 1s 1s 603825710e-09 1s 1s 603831430e-09 0s 0s 603832430e-09 1s 1s 603835990e-09 1s 1s 603841670e-09 0s 0s 603842670e-09 1s 1s 603846270e-09 1s 1s 603851910e-09 0s 0s 603852910e-09 1s 1s 603856550e-09 1s 1s 603862150e-09 0s 0s 603863150e-09 1s 1s 603866830e-09 1s 1s 603872390e-09 0s 0s 603873390e-09 1s 1s 603877110e-09 1s 1s 603882630e-09 0s 0s 603883630e-09 1s 1s 603887390e-09 1s 1s 603892870e-09 0s 0s 603893870e-09 1s 1s 603897670e-09 1s 1s 603903110e-09 0s 0s 603904110e-09 1s 1s 603907950e-09 1s 1s 603913350e-09 0s 0s 603914350e-09 1s 1s 603918230e-09 1s 1s 603923590e-09 0s 0s 603924590e-09 1s 1s 603928510e-09 1s 1s 603933830e-09 0s 0s 603934830e-09 1s 1s 603938790e-09 1s 1s 603944070e-09 0s 0s 603945070e-09 1s 1s 603949070e-09 1s 1s 603954310e-09 0s 0s 603955310e-09 1s 1s 603959350e-09 1s 1s 603964550e-09 0s 0s 603965550e-09 1s 1s 603969630e-09 1s 1s 603974790e-09 0s 0s 603975790e-09 1s 1s 603979910e-09 1s 1s 603985030e-09 0s 0s 603986030e-09 1s 1s 603990190e-09 1s 1s 603995270e-09 0s 0s 603996270e-09 1s 1s 604000470e-09 1s 1s 604005510e-09 0s 0s 604006510e-09 1s 1s 604010750e-09 1s 1s 604015750e-09 0s 0s 604016750e-09 1s 1s 604021030e-09 1s 1s 604025990e-09 0s 0s 604026990e-09 1s 1s 604031310e-09 1s 1s 604036230e-09 0s 0s 604037230e-09 1s 1s 604041590e-09 1s 1s 604046470e-09 0s 0s 604047470e-09 1s 1s 604051870e-09 1s 1s 604056710e-09 0s 0s 604057710e-09 1s 1s 604062150e-09 1s 1s 604066950e-09 0s 0s 604067950e-09 1s 1s 604072430e-09 1s 1s 604077190e-09 0s 0s 604078190e-09 1s 1s 604082710e-09 1s 1s 604087430e-09 0s 0s 604088430e-09 1s 1s 604092990e-09 1s 1s 604097670e-09 0s 0s 604098670e-09 1s 1s 604103270e-09 1s 1s 604107910e-09 0s 0s 604108910e-09 1s 1s 604113550e-09 1s 1s 604118150e-09 0s 0s 604119150e-09 1s 1s 604123830e-09 1s 1s 604128390e-09 0s 0s 604129390e-09 1s 1s 604134110e-09 1s 1s 604138630e-09 0s 0s 604139630e-09 1s 1s 604144390e-09 1s 1s 604148870e-09 0s 0s 604149870e-09 1s 1s 604154670e-09 1s 1s 604159110e-09 0s 0s 604160110e-09 1s 1s 604164950e-09 1s 1s 604169350e-09 0s 0s 604170350e-09 1s 1s 604175230e-09 1s 1s 604179590e-09 0s 0s 604180590e-09 1s 1s 604185510e-09 1s 1s 604189830e-09 0s 0s 604190830e-09 1s 1s 604195790e-09 1s 1s 604200070e-09 0s 0s 604201070e-09 1s 1s 604206070e-09 1s 1s 604210310e-09 0s 0s 604211310e-09 1s 1s 604216350e-09 1s 1s 604220550e-09 0s 0s 604221550e-09 1s 1s 604226630e-09 1s 1s 604230790e-09 0s 0s 604231790e-09 1s 1s 604236910e-09 1s 1s 604241030e-09 0s 0s 604242030e-09 1s 1s 604247190e-09 1s 1s 604251270e-09 0s 0s 604252270e-09 1s 1s 604257470e-09 1s 1s 604261510e-09 0s 0s 604262510e-09 1s 1s 604267750e-09 1s 1s 604271750e-09 0s 0s 604272750e-09 1s 1s 604278030e-09 1s 1s 604281990e-09 0s 0s 604282990e-09 1s 1s 604288310e-09 1s 1s 604292230e-09 0s 0s 604293230e-09 1s 1s 604298590e-09 1s 1s 604302470e-09 0s 0s 604303470e-09 1s 1s 604308870e-09 1s 1s 604312710e-09 0s 0s 604313710e-09 1s 1s 604319150e-09 1s 1s 604322950e-09 0s 0s 604323950e-09 1s 1s 604329430e-09 1s 1s 604333190e-09 0s 0s 604334190e-09 1s 1s 604339710e-09 1s 1s 604343430e-09 0s 0s 604344430e-09 1s 1s 604349990e-09 1s 1s 604353670e-09 0s 0s 604354670e-09 1s 1s 604360270e-09 1s 1s 604363910e-09 0s 0s 604364910e-09 1s 1s 604370550e-09 1s 1s 604374150e-09 0s 0s 604375150e-09 1s 1s 604380830e-09 1s 1s 604384390e-09 0s 0s 604385390e-09 1s 1s 604391110e-09 1s 1s 604394630e-09 0s 0s 604395630e-09 1s 1s 604401390e-09 1s 1s 604404870e-09 0s 0s 604405870e-09 1s 1s 604411670e-09 1s 1s 604415110e-09 0s 0s 604416110e-09 1s 1s 604421950e-09 1s 1s 604425350e-09 0s 0s 604426350e-09 1s 1s 604432230e-09 1s 1s 604435590e-09 0s 0s 604436590e-09 1s 1s 604442510e-09 1s 1s 604445830e-09 0s 0s 604446830e-09 1s 1s 604452790e-09 1s 1s 604456070e-09 0s 0s 604457070e-09 1s 1s 604463070e-09 1s 1s 604466310e-09 0s 0s 604467310e-09 1s 1s 604473350e-09 1s 1s 604476550e-09 0s 0s 604477550e-09 1s 1s 604483630e-09 1s 1s 604486790e-09 0s 0s 604487790e-09 1s 1s 604493910e-09 1s 1s 604497030e-09 0s 0s 604498030e-09 1s 1s 604504190e-09 1s 1s 604507270e-09 0s 0s 604508270e-09 1s 1s 604514470e-09 1s 1s 604517510e-09 0s 0s 604518510e-09 1s 1s 604524750e-09 1s 1s 604527750e-09 0s 0s 604528750e-09 1s 1s 604535030e-09 1s 1s 604537990e-09 0s 0s 604538990e-09 1s 1s 604545310e-09 1s 1s 604548230e-09 0s 0s 604549230e-09 1s 1s 604555590e-09 1s 1s 604558470e-09 0s 0s 604559470e-09 1s 1s 604565870e-09 1s 1s 604568710e-09 0s 0s 604569710e-09 1s 1s 604576150e-09 1s 1s 604578950e-09 0s 0s 604579950e-09 1s 1s 604586430e-09 1s 1s 604589190e-09 0s 0s 604590190e-09 1s 1s 604596710e-09 1s 1s 604599430e-09 0s 0s 604600430e-09 1s 1s 604606990e-09 1s 1s 604609670e-09 0s 0s 604610670e-09 1s 1s 604617270e-09 1s 1s 604619910e-09 0s 0s 604620910e-09 1s 1s 604627550e-09 1s 1s 604630150e-09 0s 0s 604631150e-09 1s 1s 604637830e-09 1s 1s 604640390e-09 0s 0s 604641390e-09 1s 1s 604648110e-09 1s 1s 604650630e-09 0s 0s 604651630e-09 1s 1s 604658390e-09 1s 1s 604660870e-09 0s 0s 604661870e-09 1s 1s 604668670e-09 1s 1s 604671110e-09 0s 0s 604672110e-09 1s 1s 604678950e-09 1s 1s 604681350e-09 0s 0s 604682350e-09 1s 1s 604689230e-09 1s 1s 604691590e-09 0s 0s 604692590e-09 1s 1s 604699510e-09 1s 1s 604701830e-09 0s 0s 604702830e-09 1s 1s 604709790e-09 1s 1s 604712070e-09 0s 0s 604713070e-09 1s 1s 604720070e-09 1s 1s 604722310e-09 0s 0s 604723310e-09 1s 1s 604730350e-09 1s 1s 604732550e-09 0s 0s 604733550e-09 1s 1s 604740630e-09 1s 1s 604742790e-09 0s 0s 604743790e-09 1s 1s 604750910e-09 1s 1s 604753030e-09 0s 0s 604754030e-09 1s 1s 604761190e-09 1s 1s 604763270e-09 0s 0s 604764270e-09 1s 1s 604771470e-09 1s 1s 604773510e-09 0s 0s 604774510e-09 1s 1s 604781750e-09 1s 1s 604783750e-09 0s 0s 604784750e-09 1s 1s 604792030e-09 1s 1s 604793990e-09 0s 0s 604794990e-09 1s 1s 604802310e-09 1s 1s 604804230e-09 0s 0s 604805230e-09 1s 1s 604812590e-09 1s 1s 604814470e-09 0s 0s 604815470e-09 1s 1s 604822870e-09 1s 1s 604824710e-09 0s 0s 604825710e-09 1s 1s 604833150e-09 1s 1s 604834950e-09 0s 0s 604835950e-09 1s 1s 604843430e-09 1s 1s 604845190e-09 0s 0s 604846190e-09 1s 1s 604853710e-09 1s 1s 604855430e-09 0s 0s 604856430e-09 1s 1s 604863990e-09 1s 1s 604865670e-09 0s 0s 604866670e-09 1s 1s 604874270e-09 1s 1s 604875910e-09 0s 0s 604876910e-09 1s 1s 604884550e-09 1s 1s 604886150e-09 0s 0s 604887150e-09 1s 1s 604894830e-09 1s 1s 604896390e-09 0s 0s 604897390e-09 1s 1s 604905110e-09 1s 1s 604906630e-09 0s 0s 604907630e-09 1s 1s 604915390e-09 1s 1s 604916870e-09 0s 0s 604917870e-09 1s 1s 604925670e-09 1s 1s 604927110e-09 0s 0s 604928110e-09 1s 1s 604935950e-09 1s 1s 604937350e-09 0s 0s 604938350e-09 1s 1s 604946230e-09 1s 1s 604947590e-09 0s 0s 604948590e-09 1s 1s 604956510e-09 1s 1s 604957830e-09 0s 0s 604958830e-09 1s 1s 604966790e-09 1s 1s 604968070e-09 0s 0s 604969070e-09 1s 1s 604977070e-09 1s 1s 604978310e-09 0s 0s 604979310e-09 1s 1s 604987350e-09 1s 1s 604988550e-09 0s 0s 604989550e-09 1s 1s 604997630e-09 1s 1s 604998790e-09 0s 0s 604999790e-09 1s 1s 605007910e-09 1s 1s 605009030e-09 0s 0s 605010030e-09 1s 1s 605018190e-09 1s 1s 605019270e-09 0s 0s 605020270e-09 1s 1s 605028470e-09 1s 1s 605029510e-09 0s 0s 605030510e-09 1s 1s 605038750e-09 1s 1s 605039750e-09 0s 0s 605040750e-09 1s 1s 605049030e-09 1s 1s 605049990e-09 0s 0s 605050990e-09 1s 1s 605059310e-09 1s 1s 605060230e-09 0s 0s 605061230e-09 1s 1s 605069590e-09 1s 1s 605070470e-09 0s 0s 605071470e-09 1s 1s 605079870e-09 1s 1s 605080710e-09 0s 0s 605081710e-09 1s 1s 605090150e-09 1s 1s 605090950e-09 0s 0s 605091950e-09 1s 1s 605100430e-09 1s 1s 605101190e-09 0s 0s 605102190e-09 1s 1s 605110710e-09 1s 1s 605111430e-09 0s 0s 605112430e-09 1s 1s 605120990e-09 1s 1s 605121670e-09 0s 0s 605122670e-09 1s 1s 605131270e-09 1s 1s 605131910e-09 0s 0s 605132910e-09 1s 1s 605141550e-09 1s 1s 605142150e-09 0s 0s 605143150e-09 1s 1s 605151830e-09 1s 1s 605152390e-09 0s 0s 605153390e-09 1s 1s 605162110e-09 1s 1s 605162630e-09 0s 0s 605163630e-09 1s 1s 605172390e-09 1s 1s 605172870e-09 0s 0s 605173870e-09 1s 1s 605182670e-09 1s 1s 605183110e-09 0s 0s 605184110e-09 1s 1s 605192950e-09 1s 1s 605193350e-09 0s 0s 605194350e-09 1s 1s 605203230e-09 1s 1s 605203590e-09 0s 0s 605204590e-09 1s 1s 605213510e-09 1s 1s 605213830e-09 0s 0s 605214830e-09 1s 1s 605223790e-09 1s 1s 605224070e-09 0s 0s 605225070e-09 1s 1s 605234070e-09 1s 1s 605234310e-09 0s 0s 605235310e-09 1s 1s 605244350e-09 1s 1s 605244550e-09 0s 0s 605245550e-09 1s 1s 605254630e-09 1s 1s 605254790e-09 0s 0s 605255790e-09 1s 1s 605264910e-09 1s 1s 605265030e-09 0s 0s 605266030e-09 1s 1s 605275190e-09 1s 1s 605275270e-09 0s 0s 605276270e-09 1s 1s 605285470e-09 1s 1s 605285510e-09 0s 0s 605286510e-09 1s 1s 605295750e-09 0s 0s 605296750e-09 1s 1s 605305990e-09 0s 0s 605306030e-09 0s 0s 605306990e-09 1s 1s 605316230e-09 0s 0s 605316310e-09 0s 0s 605317230e-09 1s 1s 605326470e-09 0s 0s 605326590e-09 0s 0s 605327470e-09 1s 1s 605336710e-09 0s 0s 605336870e-09 0s 0s 605337710e-09 1s 1s 605346950e-09 0s 0s 605347150e-09 0s 0s 605347950e-09 1s 1s 605357190e-09 0s 0s 605357430e-09 0s 0s 605358190e-09 1s 1s 605367430e-09 0s 0s 605367710e-09 0s 0s 605368430e-09 1s 1s 605377670e-09 0s 0s 605377990e-09 0s 0s 605378670e-09 1s 1s 605387910e-09 0s 0s 605388270e-09 0s 0s 605388910e-09 1s 1s 605398150e-09 0s 0s 605398550e-09 0s 0s 605399150e-09 1s 1s 605408390e-09 0s 0s 605408830e-09 0s 0s 605409390e-09 1s 1s 605418630e-09 0s 0s 605419110e-09 0s 0s 605419630e-09 1s 1s 605428870e-09 0s 0s 605429390e-09 0s 0s 605429870e-09 1s 1s 605439110e-09 0s 0s 605439670e-09 0s 0s 605440110e-09 1s 1s 605449350e-09 0s 0s 605449950e-09 0s 0s 605450350e-09 1s 1s 605459590e-09 0s 0s 605460230e-09 0s 0s 605460590e-09 1s 1s 605469830e-09 0s 0s 605470510e-09 0s 0s 605470830e-09 1s 1s 605480070e-09 0s 0s 605480790e-09 0s 0s 605481070e-09 1s 1s 605490310e-09 0s 0s 605491070e-09 0s 0s 605491310e-09 1s 1s 605500550e-09 0s 0s 605501350e-09 0s 0s 605501550e-09 1s 1s 605510790e-09 0s 0s 605511630e-09 0s 0s 605511790e-09 1s 1s 605521030e-09 0s 0s 605521910e-09 0s 0s 605522030e-09 1s 1s 605531270e-09 0s 0s 605532190e-09 0s 0s 605532270e-09 1s 1s 605541510e-09 0s 0s 605542470e-09 0s 0s 605542510e-09 1s 1s 605551750e-09 0s 0s 605552750e-09 1s 1s 605552790e-09 1s 1s 605562030e-09 0s 0s 605562990e-09 1s 1s 605563070e-09 1s 1s 605572270e-09 0s 0s 605573230e-09 1s 1s 605573350e-09 1s 1s 605582510e-09 0s 0s 605583470e-09 1s 1s 605583630e-09 1s 1s 605592750e-09 0s 0s 605593710e-09 1s 1s 605593910e-09 1s 1s 605602990e-09 0s 0s 605603950e-09 1s 1s 605604190e-09 1s 1s 605613230e-09 0s 0s 605614190e-09 1s 1s 605614470e-09 1s 1s 605623470e-09 0s 0s 605624430e-09 1s 1s 605624750e-09 1s 1s 605633710e-09 0s 0s 605634670e-09 1s 1s 605635030e-09 1s 1s 605643950e-09 0s 0s 605644910e-09 1s 1s 605645310e-09 1s 1s 605654190e-09 0s 0s 605655150e-09 1s 1s 605655590e-09 1s 1s 605664430e-09 0s 0s 605665390e-09 1s 1s 605665870e-09 1s 1s 605674670e-09 0s 0s 605675630e-09 1s 1s 605676150e-09 1s 1s 605684910e-09 0s 0s 605685870e-09 1s 1s 605686430e-09 1s 1s 605695150e-09 0s 0s 605696110e-09 1s 1s 605696710e-09 1s 1s 605705390e-09 0s 0s 605706350e-09 1s 1s 605706990e-09 1s 1s 605715630e-09 0s 0s 605716590e-09 1s 1s 605717270e-09 1s 1s 605725870e-09 0s 0s 605726830e-09 1s 1s 605727550e-09 1s 1s 605736110e-09 0s 0s 605737070e-09 1s 1s 605737830e-09 1s 1s 605746350e-09 0s 0s 605747310e-09 1s 1s 605748110e-09 1s 1s 605756590e-09 0s 0s 605757550e-09 1s 1s 605758390e-09 1s 1s 605766830e-09 0s 0s 605767790e-09 1s 1s 605768670e-09 1s 1s 605777070e-09 0s 0s 605778030e-09 1s 1s 605778950e-09 1s 1s 605787310e-09 0s 0s 605788270e-09 1s 1s 605789230e-09 1s 1s 605797550e-09 0s 0s 605798510e-09 1s 1s 605799510e-09 1s 1s 605807790e-09 0s 0s 605808750e-09 1s 1s 605809790e-09 1s 1s 605818030e-09 0s 0s 605818990e-09 1s 1s 605820070e-09 1s 1s 605828270e-09 0s 0s 605829230e-09 1s 1s 605830350e-09 1s 1s 605838510e-09 0s 0s 605839470e-09 1s 1s 605840630e-09 1s 1s 605848750e-09 0s 0s 605849710e-09 1s 1s 605850910e-09 1s 1s 605858990e-09 0s 0s 605859950e-09 1s 1s 605861190e-09 1s 1s 605869230e-09 0s 0s 605870190e-09 1s 1s 605871470e-09 1s 1s 605879470e-09 0s 0s 605880430e-09 1s 1s 605881750e-09 1s 1s 605889710e-09 0s 0s 605890670e-09 1s 1s 605892030e-09 1s 1s 605899950e-09 0s 0s 605900910e-09 1s 1s 605902310e-09 1s 1s 605910190e-09 0s 0s 605911150e-09 1s 1s 605912590e-09 1s 1s 605920430e-09 0s 0s 605921390e-09 1s 1s 605922870e-09 1s 1s 605930670e-09 0s 0s 605931630e-09 1s 1s 605933150e-09 1s 1s 605940910e-09 0s 0s 605941870e-09 1s 1s 605943430e-09 1s 1s 605951150e-09 0s 0s 605952110e-09 1s 1s 605953710e-09 1s 1s 605961390e-09 0s 0s 605962350e-09 1s 1s 605963990e-09 1s 1s 605971630e-09 0s 0s 605972590e-09 1s 1s 605974270e-09 1s 1s 605981870e-09 0s 0s 605982830e-09 1s 1s 605984550e-09 1s 1s 605992110e-09 0s 0s 605993070e-09 1s 1s 605994830e-09 1s 1s 606002350e-09 0s 0s 606003310e-09 1s 1s 606005110e-09 1s 1s 606012590e-09 0s 0s 606013550e-09 1s 1s 606015390e-09 1s 1s 606022830e-09 0s 0s 606023790e-09 1s 1s 606025670e-09 1s 1s 606033070e-09 0s 0s 606034030e-09 1s 1s 606035950e-09 1s 1s 606043310e-09 0s 0s 606044270e-09 1s 1s 606046230e-09 1s 1s 606053550e-09 0s 0s 606054510e-09 1s 1s 606056510e-09 1s 1s 606063790e-09 0s 0s 606064750e-09 1s 1s 606066790e-09 1s 1s 606074030e-09 0s 0s 606074990e-09 1s 1s 606077070e-09 1s 1s 606084270e-09 0s 0s 606085230e-09 1s 1s 606087350e-09 1s 1s 606094510e-09 0s 0s 606095470e-09 1s 1s 606097630e-09 1s 1s 606104750e-09 0s 0s 606105710e-09 1s 1s 606107910e-09 1s 1s 606114990e-09 0s 0s 606115950e-09 1s 1s 606118190e-09 1s 1s 606125230e-09 0s 0s 606126190e-09 1s 1s 606128470e-09 1s 1s 606135470e-09 0s 0s 606136430e-09 1s 1s 606138750e-09 1s 1s 606145710e-09 0s 0s 606146670e-09 1s 1s 606149030e-09 1s 1s 606155950e-09 0s 0s 606156910e-09 1s 1s 606159310e-09 1s 1s 606166190e-09 0s 0s 606167150e-09 1s 1s 606169590e-09 1s 1s 606176430e-09 0s 0s 606177390e-09 1s 1s 606179870e-09 1s 1s 606186670e-09 0s 0s 606187630e-09 1s 1s 606190150e-09 1s 1s 606196910e-09 0s 0s 606197870e-09 1s 1s 606200430e-09 1s 1s 606207150e-09 0s 0s 606208110e-09 1s 1s 606210710e-09 1s 1s 606217390e-09 0s 0s 606218350e-09 1s 1s 606220990e-09 1s 1s 606227630e-09 0s 0s 606228590e-09 1s 1s 606231270e-09 1s 1s 606237870e-09 0s 0s 606238830e-09 1s 1s 606241550e-09 1s 1s 606248110e-09 0s 0s 606249070e-09 1s 1s 606251830e-09 1s 1s 606258350e-09 0s 0s 606259310e-09 1s 1s 606262110e-09 1s 1s 606268590e-09 0s 0s 606269550e-09 1s 1s 606272390e-09 1s 1s 606278830e-09 0s 0s 606279790e-09 1s 1s 606282670e-09 1s 1s 606289070e-09 0s 0s 606290030e-09 1s 1s 606292950e-09 1s 1s 606299310e-09 0s 0s 606300270e-09 1s 1s 606303230e-09 1s 1s 606309550e-09 0s 0s 606310510e-09 1s 1s 606313510e-09 1s 1s 606319790e-09 0s 0s 606320750e-09 1s 1s 606323790e-09 1s 1s 606330030e-09 0s 0s 606330990e-09 1s 1s 606334070e-09 1s 1s 606340270e-09 0s 0s 606341230e-09 1s 1s 606344350e-09 1s 1s 606350510e-09 0s 0s 606351470e-09 1s 1s 606354630e-09 1s 1s 606360750e-09 0s 0s 606361710e-09 1s 1s 606364910e-09 1s 1s 606370990e-09 0s 0s 606371950e-09 1s 1s 606375190e-09 1s 1s 606381230e-09 0s 0s 606382190e-09 1s 1s 606385470e-09 1s 1s 606391470e-09 0s 0s 606392430e-09 1s 1s 606395750e-09 1s 1s 606401710e-09 0s 0s 606402670e-09 1s 1s 606406030e-09 1s 1s 606411950e-09 0s 0s 606412910e-09 1s 1s 606416310e-09 1s 1s 606422190e-09 0s 0s 606423150e-09 1s 1s 606426590e-09 1s 1s 606432430e-09 0s 0s 606433390e-09 1s 1s 606436870e-09 1s 1s 606442670e-09 0s 0s 606443630e-09 1s 1s 606447150e-09 1s 1s 606452910e-09 0s 0s 606453870e-09 1s 1s 606457430e-09 1s 1s 606463150e-09 0s 0s 606464110e-09 1s 1s 606467710e-09 1s 1s 606473390e-09 0s 0s 606474350e-09 1s 1s 606477990e-09 1s 1s 606483630e-09 0s 0s 606484590e-09 1s 1s 606488270e-09 1s 1s 606493870e-09 0s 0s 606494830e-09 1s 1s 606498550e-09 1s 1s 606504110e-09 0s 0s 606505070e-09 1s 1s 606508830e-09 1s 1s 606514350e-09 0s 0s 606515310e-09 1s 1s 606519110e-09 1s 1s 606524590e-09 0s 0s 606525550e-09 1s 1s 606529390e-09 1s 1s 606534830e-09 0s 0s 606535790e-09 1s 1s 606539670e-09 1s 1s 606545070e-09 0s 0s 606546030e-09 1s 1s 606549950e-09 1s 1s 606555310e-09 0s 0s 606556270e-09 1s 1s 606560230e-09 1s 1s 606565550e-09 0s 0s 606566510e-09 1s 1s 606570510e-09 1s 1s 606575790e-09 0s 0s 606576750e-09 1s 1s 606580790e-09 1s 1s 606586030e-09 0s 0s 606586990e-09 1s 1s 606591070e-09 1s 1s 606596270e-09 0s 0s 606597230e-09 1s 1s 606601350e-09 1s 1s 606606510e-09 0s 0s 606607470e-09 1s 1s 606611630e-09 1s 1s 606616750e-09 0s 0s 606617710e-09 1s 1s 606621910e-09 1s 1s 606626990e-09 0s 0s 606627950e-09 1s 1s 606632190e-09 1s 1s 606637230e-09 0s 0s 606638190e-09 1s 1s 606642470e-09 1s 1s 606647470e-09 0s 0s 606648430e-09 1s 1s 606652750e-09 1s 1s 606657710e-09 0s 0s 606658670e-09 1s 1s 606663030e-09 1s 1s 606667950e-09 0s 0s 606668910e-09 1s 1s 606673310e-09 1s 1s 606678190e-09 0s 0s 606679150e-09 1s 1s 606683590e-09 1s 1s 606688430e-09 0s 0s 606689390e-09 1s 1s 606693870e-09 1s 1s 606698670e-09 0s 0s 606699630e-09 1s 1s 606704150e-09 1s 1s 606708910e-09 0s 0s 606709870e-09 1s 1s 606714430e-09 1s 1s 606719150e-09 0s 0s 606720110e-09 1s 1s 606724710e-09 1s 1s 606729390e-09 0s 0s 606730350e-09 1s 1s 606734990e-09 1s 1s 606739630e-09 0s 0s 606740590e-09 1s 1s 606745270e-09 1s 1s 606749870e-09 0s 0s 606750830e-09 1s 1s 606755550e-09 1s 1s 606760110e-09 0s 0s 606761070e-09 1s 1s 606765830e-09 1s 1s 606770350e-09 0s 0s 606771310e-09 1s 1s 606776110e-09 1s 1s 606780590e-09 0s 0s 606781550e-09 1s 1s 606786390e-09 1s 1s 606790830e-09 0s 0s 606791790e-09 1s 1s 606796670e-09 1s 1s 606801070e-09 0s 0s 606802030e-09 1s 1s 606806950e-09 1s 1s 606811310e-09 0s 0s 606812270e-09 1s 1s 606817230e-09 1s 1s 606821550e-09 0s 0s 606822510e-09 1s 1s 606827510e-09 1s 1s 606831790e-09 0s 0s 606832750e-09 1s 1s 606837790e-09 1s 1s 606842030e-09 0s 0s 606842990e-09 1s 1s 606848070e-09 1s 1s 606852270e-09 0s 0s 606853230e-09 1s 1s 606858350e-09 1s 1s 606862510e-09 0s 0s 606863470e-09 1s 1s 606868630e-09 1s 1s 606872750e-09 0s 0s 606873710e-09 1s 1s 606878910e-09 1s 1s 606882990e-09 0s 0s 606883950e-09 1s 1s 606889190e-09 1s 1s 606893230e-09 0s 0s 606894190e-09 1s 1s 606899470e-09 1s 1s 606903470e-09 0s 0s 606904430e-09 1s 1s 606909750e-09 1s 1s 606913710e-09 0s 0s 606914670e-09 1s 1s 606920030e-09 1s 1s 606923950e-09 0s 0s 606924910e-09 1s 1s 606930310e-09 1s 1s 606934190e-09 0s 0s 606935150e-09 1s 1s 606940590e-09 1s 1s 606944430e-09 0s 0s 606945390e-09 1s 1s 606950870e-09 1s 1s 606954670e-09 0s 0s 606955630e-09 1s 1s 606961150e-09 1s 1s 606964910e-09 0s 0s 606965870e-09 1s 1s 606971430e-09 1s 1s 606975150e-09 0s 0s 606976110e-09 1s 1s 606981710e-09 1s 1s 606985390e-09 0s 0s 606986350e-09 1s 1s 606991990e-09 1s 1s 606995630e-09 0s 0s 606996590e-09 1s 1s 607002270e-09 1s 1s 607005870e-09 0s 0s 607006830e-09 1s 1s 607012550e-09 1s 1s 607016110e-09 0s 0s 607017070e-09 1s 1s 607022830e-09 1s 1s 607026350e-09 0s 0s 607027310e-09 1s 1s 607033110e-09 1s 1s 607036590e-09 0s 0s 607037550e-09 1s 1s 607043390e-09 1s 1s 607046830e-09 0s 0s 607047790e-09 1s 1s 607053670e-09 1s 1s 607057070e-09 0s 0s 607058030e-09 1s 1s 607063950e-09 1s 1s 607067310e-09 0s 0s 607068270e-09 1s 1s 607074230e-09 1s 1s 607077550e-09 0s 0s 607078510e-09 1s 1s 607084510e-09 1s 1s 607087790e-09 0s 0s 607088750e-09 1s 1s 607094790e-09 1s 1s 607098030e-09 0s 0s 607098990e-09 1s 1s 607105070e-09 1s 1s 607108270e-09 0s 0s 607109230e-09 1s 1s 607115350e-09 1s 1s 607118510e-09 0s 0s 607119470e-09 1s 1s 607125630e-09 1s 1s 607128750e-09 0s 0s 607129710e-09 1s 1s 607135910e-09 1s 1s 607138990e-09 0s 0s 607139950e-09 1s 1s 607146190e-09 1s 1s 607149230e-09 0s 0s 607150190e-09 1s 1s 607156470e-09 1s 1s 607159470e-09 0s 0s 607160430e-09 1s 1s 607166750e-09 1s 1s 607169710e-09 0s 0s 607170670e-09 1s 1s 607177030e-09 1s 1s 607179950e-09 0s 0s 607180910e-09 1s 1s 607187310e-09 1s 1s 607190190e-09 0s 0s 607191150e-09 1s 1s 607197590e-09 1s 1s 607200430e-09 0s 0s 607201390e-09 1s 1s 607207870e-09 1s 1s 607210670e-09 0s 0s 607211630e-09 1s 1s 607218150e-09 1s 1s 607220910e-09 0s 0s 607221870e-09 1s 1s 607228430e-09 1s 1s 607231150e-09 0s 0s 607232110e-09 1s 1s 607238710e-09 1s 1s 607241390e-09 0s 0s 607242350e-09 1s 1s 607248990e-09 1s 1s 607251630e-09 0s 0s 607252590e-09 1s 1s 607259270e-09 1s 1s 607261870e-09 0s 0s 607262830e-09 1s 1s 607269550e-09 1s 1s 607272110e-09 0s 0s 607273070e-09 1s 1s 607279830e-09 1s 1s 607282350e-09 0s 0s 607283310e-09 1s 1s 607290110e-09 1s 1s 607292590e-09 0s 0s 607293550e-09 1s 1s 607300390e-09 1s 1s 607302830e-09 0s 0s 607303790e-09 1s 1s 607310670e-09 1s 1s 607313070e-09 0s 0s 607314030e-09 1s 1s 607320950e-09 1s 1s 607323310e-09 0s 0s 607324270e-09 1s 1s 607331230e-09 1s 1s 607333550e-09 0s 0s 607334510e-09 1s 1s 607341510e-09 1s 1s 607343790e-09 0s 0s 607344750e-09 1s 1s 607351790e-09 1s 1s 607354030e-09 0s 0s 607354990e-09 1s 1s 607362070e-09 1s 1s 607364270e-09 0s 0s 607365230e-09 1s 1s 607372350e-09 1s 1s 607374510e-09 0s 0s 607375470e-09 1s 1s 607382630e-09 1s 1s 607384750e-09 0s 0s 607385710e-09 1s 1s 607392910e-09 1s 1s 607394990e-09 0s 0s 607395950e-09 1s 1s 607403190e-09 1s 1s 607405230e-09 0s 0s 607406190e-09 1s 1s 607413470e-09 1s 1s 607415470e-09 0s 0s 607416430e-09 1s 1s 607423750e-09 1s 1s 607425710e-09 0s 0s 607426670e-09 1s 1s 607434030e-09 1s 1s 607435950e-09 0s 0s 607436910e-09 1s 1s 607444310e-09 1s 1s 607446190e-09 0s 0s 607447150e-09 1s 1s 607454590e-09 1s 1s 607456430e-09 0s 0s 607457390e-09 1s 1s 607464870e-09 1s 1s 607466670e-09 0s 0s 607467630e-09 1s 1s 607475150e-09 1s 1s 607476910e-09 0s 0s 607477870e-09 1s 1s 607485430e-09 1s 1s 607487150e-09 0s 0s 607488110e-09 1s 1s 607495710e-09 1s 1s 607497390e-09 0s 0s 607498350e-09 1s 1s 607505990e-09 1s 1s 607507630e-09 0s 0s 607508590e-09 1s 1s 607516270e-09 1s 1s 607517870e-09 0s 0s 607518830e-09 1s 1s 607526550e-09 1s 1s 607528110e-09 0s 0s 607529070e-09 1s 1s 607536830e-09 1s 1s 607538350e-09 0s 0s 607539310e-09 1s 1s 607547110e-09 1s 1s 607548590e-09 0s 0s 607549550e-09 1s 1s 607557390e-09 1s 1s 607558830e-09 0s 0s 607559790e-09 1s 1s 607567670e-09 1s 1s 607569070e-09 0s 0s 607570030e-09 1s 1s 607577950e-09 1s 1s 607579310e-09 0s 0s 607580270e-09 1s 1s 607588230e-09 1s 1s 607589550e-09 0s 0s 607590510e-09 1s 1s 607598510e-09 1s 1s 607599790e-09 0s 0s 607600750e-09 1s 1s 607608790e-09 1s 1s 607610030e-09 0s 0s 607610990e-09 1s 1s 607619070e-09 1s 1s 607620270e-09 0s 0s 607621230e-09 1s 1s 607629350e-09 1s 1s 607630510e-09 0s 0s 607631470e-09 1s 1s 607639630e-09 1s 1s 607640750e-09 0s 0s 607641710e-09 1s 1s 607649910e-09 1s 1s 607650990e-09 0s 0s 607651950e-09 1s 1s 607660190e-09 1s 1s 607661230e-09 0s 0s 607662190e-09 1s 1s 607670470e-09 1s 1s 607671470e-09 0s 0s 607672430e-09 1s 1s 607680750e-09 1s 1s 607681710e-09 0s 0s 607682670e-09 1s 1s 607691030e-09 1s 1s 607691950e-09 0s 0s 607692910e-09 1s 1s 607701310e-09 1s 1s 607702190e-09 0s 0s 607703150e-09 1s 1s 607711590e-09 1s 1s 607712430e-09 0s 0s 607713390e-09 1s 1s 607721870e-09 1s 1s 607722670e-09 0s 0s 607723630e-09 1s 1s 607732150e-09 1s 1s 607732910e-09 0s 0s 607733870e-09 1s 1s 607742430e-09 1s 1s 607743150e-09 0s 0s 607744110e-09 1s 1s 607752710e-09 1s 1s 607753390e-09 0s 0s 607754350e-09 1s 1s 607762990e-09 1s 1s 607763630e-09 0s 0s 607764590e-09 1s 1s 607773270e-09 1s 1s 607773870e-09 0s 0s 607774830e-09 1s 1s 607783550e-09 1s 1s 607784110e-09 0s 0s 607785070e-09 1s 1s 607793830e-09 1s 1s 607794350e-09 0s 0s 607795310e-09 1s 1s 607804110e-09 1s 1s 607804590e-09 0s 0s 607805550e-09 1s 1s 607814390e-09 1s 1s 607814830e-09 0s 0s 607815790e-09 1s 1s 607824670e-09 1s 1s 607825070e-09 0s 0s 607826030e-09 1s 1s 607834950e-09 1s 1s 607835310e-09 0s 0s 607836270e-09 1s 1s 607845230e-09 1s 1s 607845550e-09 0s 0s 607846510e-09 1s 1s 607855510e-09 1s 1s 607855790e-09 0s 0s 607856750e-09 1s 1s 607865790e-09 1s 1s 607866030e-09 0s 0s 607866990e-09 1s 1s 607876070e-09 1s 1s 607876270e-09 0s 0s 607877230e-09 1s 1s 607886350e-09 1s 1s 607886510e-09 0s 0s 607887470e-09 1s 1s 607896630e-09 1s 1s 607896750e-09 0s 0s 607897710e-09 1s 1s 607906910e-09 1s 1s 607906990e-09 0s 0s 607907950e-09 1s 1s 607917190e-09 1s 1s 607917230e-09 0s 0s 607918190e-09 1s 1s 607927470e-09 0s 0s 607928430e-09 1s 1s 607937710e-09 0s 0s 607937750e-09 0s 0s 607938670e-09 1s 1s 607947950e-09 0s 0s 607948030e-09 0s 0s 607948910e-09 1s 1s 607958190e-09 0s 0s 607958310e-09 0s 0s 607959150e-09 1s 1s 607968430e-09 0s 0s 607968590e-09 0s 0s 607969390e-09 1s 1s 607978670e-09 0s 0s 607978870e-09 0s 0s 607979630e-09 1s 1s 607988910e-09 0s 0s 607989150e-09 0s 0s 607989870e-09 1s 1s 607999150e-09 0s 0s 607999430e-09 0s 0s 608000110e-09 1s 1s 608009390e-09 0s 0s 608009710e-09 0s 0s 608010350e-09 1s 1s 608019630e-09 0s 0s 608019990e-09 0s 0s 608020590e-09 1s 1s 608029870e-09 0s 0s 608030270e-09 0s 0s 608030830e-09 1s 1s 608040110e-09 0s 0s 608040550e-09 0s 0s 608041070e-09 1s 1s 608050350e-09 0s 0s 608050830e-09 0s 0s 608051310e-09 1s 1s 608060590e-09 0s 0s 608061110e-09 0s 0s 608061550e-09 1s 1s 608070830e-09 0s 0s 608071390e-09 0s 0s 608071790e-09 1s 1s 608081070e-09 0s 0s 608081670e-09 0s 0s 608082030e-09 1s 1s 608091310e-09 0s 0s 608091950e-09 0s 0s 608092270e-09 1s 1s 608101550e-09 0s 0s 608102230e-09 0s 0s 608102510e-09 1s 1s 608111790e-09 0s 0s 608112510e-09 0s 0s 608112750e-09 1s 1s 608122030e-09 0s 0s 608122790e-09 0s 0s 608122990e-09 1s 1s 608132270e-09 0s 0s 608133070e-09 0s 0s 608133230e-09 1s 1s 608142510e-09 0s 0s 608143350e-09 0s 0s 608143470e-09 1s 1s 608152750e-09 0s 0s 608153630e-09 0s 0s 608153710e-09 1s 1s 608162990e-09 0s 0s 608163910e-09 0s 0s 608163950e-09 1s 1s 608173230e-09 0s 0s 608174190e-09 1s 1s 608174230e-09 1s 1s 608183510e-09 0s 0s 608184430e-09 1s 1s 608184510e-09 1s 1s 608193750e-09 0s 0s 608194670e-09 1s 1s 608194790e-09 1s 1s 608203990e-09 0s 0s 608204910e-09 1s 1s 608205070e-09 1s 1s 608214230e-09 0s 0s 608215150e-09 1s 1s 608215350e-09 1s 1s 608224470e-09 0s 0s 608225390e-09 1s 1s 608225630e-09 1s 1s 608234710e-09 0s 0s 608235630e-09 1s 1s 608235910e-09 1s 1s 608244950e-09 0s 0s 608245870e-09 1s 1s 608246190e-09 1s 1s 608255190e-09 0s 0s 608256110e-09 1s 1s 608256470e-09 1s 1s 608265430e-09 0s 0s 608266350e-09 1s 1s 608266750e-09 1s 1s 608275670e-09 0s 0s 608276590e-09 1s 1s 608277030e-09 1s 1s 608285910e-09 0s 0s 608286830e-09 1s 1s 608287310e-09 1s 1s 608296150e-09 0s 0s 608297070e-09 1s 1s 608297590e-09 1s 1s 608306390e-09 0s 0s 608307310e-09 1s 1s 608307870e-09 1s 1s 608316630e-09 0s 0s 608317550e-09 1s 1s 608318150e-09 1s 1s 608326870e-09 0s 0s 608327790e-09 1s 1s 608328430e-09 1s 1s 608337110e-09 0s 0s 608338030e-09 1s 1s 608338710e-09 1s 1s 608347350e-09 0s 0s 608348270e-09 1s 1s 608348990e-09 1s 1s 608357590e-09 0s 0s 608358510e-09 1s 1s 608359270e-09 1s 1s 608367830e-09 0s 0s 608368750e-09 1s 1s 608369550e-09 1s 1s 608378070e-09 0s 0s 608378990e-09 1s 1s 608379830e-09 1s 1s 608388310e-09 0s 0s 608389230e-09 1s 1s 608390110e-09 1s 1s 608398550e-09 0s 0s 608399470e-09 1s 1s 608400390e-09 1s 1s 608408790e-09 0s 0s 608409710e-09 1s 1s 608410670e-09 1s 1s 608419030e-09 0s 0s 608419950e-09 1s 1s 608420950e-09 1s 1s 608429270e-09 0s 0s 608430190e-09 1s 1s 608431230e-09 1s 1s 608439510e-09 0s 0s 608440430e-09 1s 1s 608441510e-09 1s 1s 608449750e-09 0s 0s 608450670e-09 1s 1s 608451790e-09 1s 1s 608459990e-09 0s 0s 608460910e-09 1s 1s 608462070e-09 1s 1s 608470230e-09 0s 0s 608471150e-09 1s 1s 608472350e-09 1s 1s 608480470e-09 0s 0s 608481390e-09 1s 1s 608482630e-09 1s 1s 608490710e-09 0s 0s 608491630e-09 1s 1s 608492910e-09 1s 1s 608500950e-09 0s 0s 608501870e-09 1s 1s 608503190e-09 1s 1s 608511190e-09 0s 0s 608512110e-09 1s 1s 608513470e-09 1s 1s 608521430e-09 0s 0s 608522350e-09 1s 1s 608523750e-09 1s 1s 608531670e-09 0s 0s 608532590e-09 1s 1s 608534030e-09 1s 1s 608541910e-09 0s 0s 608542830e-09 1s 1s 608544310e-09 1s 1s 608552150e-09 0s 0s 608553070e-09 1s 1s 608554590e-09 1s 1s 608562390e-09 0s 0s 608563310e-09 1s 1s 608564870e-09 1s 1s 608572630e-09 0s 0s 608573550e-09 1s 1s 608575150e-09 1s 1s 608582870e-09 0s 0s 608583790e-09 1s 1s 608585430e-09 1s 1s 608593110e-09 0s 0s 608594030e-09 1s 1s 608595710e-09 1s 1s 608603350e-09 0s 0s 608604270e-09 1s 1s 608605990e-09 1s 1s 608613590e-09 0s 0s 608614510e-09 1s 1s 608616270e-09 1s 1s 608623830e-09 0s 0s 608624750e-09 1s 1s 608626550e-09 1s 1s 608634070e-09 0s 0s 608634990e-09 1s 1s 608636830e-09 1s 1s 608644310e-09 0s 0s 608645230e-09 1s 1s 608647110e-09 1s 1s 608654550e-09 0s 0s 608655470e-09 1s 1s 608657390e-09 1s 1s 608664790e-09 0s 0s 608665710e-09 1s 1s 608667670e-09 1s 1s 608675030e-09 0s 0s 608675950e-09 1s 1s 608677950e-09 1s 1s 608685270e-09 0s 0s 608686190e-09 1s 1s 608688230e-09 1s 1s 608695510e-09 0s 0s 608696430e-09 1s 1s 608698510e-09 1s 1s 608705750e-09 0s 0s 608706670e-09 1s 1s 608708790e-09 1s 1s 608715990e-09 0s 0s 608716910e-09 1s 1s 608719070e-09 1s 1s 608726230e-09 0s 0s 608727150e-09 1s 1s 608729350e-09 1s 1s 608736470e-09 0s 0s 608737390e-09 1s 1s 608739630e-09 1s 1s 608746710e-09 0s 0s 608747630e-09 1s 1s 608749910e-09 1s 1s 608756950e-09 0s 0s 608757870e-09 1s 1s 608760190e-09 1s 1s 608767190e-09 0s 0s 608768110e-09 1s 1s 608770470e-09 1s 1s 608777430e-09 0s 0s 608778350e-09 1s 1s 608780750e-09 1s 1s 608787670e-09 0s 0s 608788590e-09 1s 1s 608791030e-09 1s 1s 608797910e-09 0s 0s 608798830e-09 1s 1s 608801310e-09 1s 1s 608808150e-09 0s 0s 608809070e-09 1s 1s 608811590e-09 1s 1s 608818390e-09 0s 0s 608819310e-09 1s 1s 608821870e-09 1s 1s 608828630e-09 0s 0s 608829550e-09 1s 1s 608832150e-09 1s 1s 608838870e-09 0s 0s 608839790e-09 1s 1s 608842430e-09 1s 1s 608849110e-09 0s 0s 608850030e-09 1s 1s 608852710e-09 1s 1s 608859350e-09 0s 0s 608860270e-09 1s 1s 608862990e-09 1s 1s 608869590e-09 0s 0s 608870510e-09 1s 1s 608873270e-09 1s 1s 608879830e-09 0s 0s 608880750e-09 1s 1s 608883550e-09 1s 1s 608890070e-09 0s 0s 608890990e-09 1s 1s 608893830e-09 1s 1s 608900310e-09 0s 0s 608901230e-09 1s 1s 608904110e-09 1s 1s 608910550e-09 0s 0s 608911470e-09 1s 1s 608914390e-09 1s 1s 608920790e-09 0s 0s 608921710e-09 1s 1s 608924670e-09 1s 1s 608931030e-09 0s 0s 608931950e-09 1s 1s 608934950e-09 1s 1s 608941270e-09 0s 0s 608942190e-09 1s 1s 608945230e-09 1s 1s 608951510e-09 0s 0s 608952430e-09 1s 1s 608955510e-09 1s 1s 608961750e-09 0s 0s 608962670e-09 1s 1s 608965790e-09 1s 1s 608971990e-09 0s 0s 608972910e-09 1s 1s 608976070e-09 1s 1s 608982230e-09 0s 0s 608983150e-09 1s 1s 608986350e-09 1s 1s 608992470e-09 0s 0s 608993390e-09 1s 1s 608996630e-09 1s 1s 609002710e-09 0s 0s 609003630e-09 1s 1s 609006910e-09 1s 1s 609012950e-09 0s 0s 609013870e-09 1s 1s 609017190e-09 1s 1s 609023190e-09 0s 0s 609024110e-09 1s 1s 609027470e-09 1s 1s 609033430e-09 0s 0s 609034350e-09 1s 1s 609037750e-09 1s 1s 609043670e-09 0s 0s 609044590e-09 1s 1s 609048030e-09 1s 1s 609053910e-09 0s 0s 609054830e-09 1s 1s 609058310e-09 1s 1s 609064150e-09 0s 0s 609065070e-09 1s 1s 609068590e-09 1s 1s 609074390e-09 0s 0s 609075310e-09 1s 1s 609078870e-09 1s 1s 609084630e-09 0s 0s 609085550e-09 1s 1s 609089150e-09 1s 1s 609094870e-09 0s 0s 609095790e-09 1s 1s 609099430e-09 1s 1s 609105110e-09 0s 0s 609106030e-09 1s 1s 609109710e-09 1s 1s 609115350e-09 0s 0s 609116270e-09 1s 1s 609119990e-09 1s 1s 609125590e-09 0s 0s 609126510e-09 1s 1s 609130270e-09 1s 1s 609135830e-09 0s 0s 609136750e-09 1s 1s 609140550e-09 1s 1s 609146070e-09 0s 0s 609146990e-09 1s 1s 609150830e-09 1s 1s 609156310e-09 0s 0s 609157230e-09 1s 1s 609161110e-09 1s 1s 609166550e-09 0s 0s 609167470e-09 1s 1s 609171390e-09 1s 1s 609176790e-09 0s 0s 609177710e-09 1s 1s 609181670e-09 1s 1s 609187030e-09 0s 0s 609187950e-09 1s 1s 609191950e-09 1s 1s 609197270e-09 0s 0s 609198190e-09 1s 1s 609202230e-09 1s 1s 609207510e-09 0s 0s 609208430e-09 1s 1s 609212510e-09 1s 1s 609217750e-09 0s 0s 609218670e-09 1s 1s 609222790e-09 1s 1s 609227990e-09 0s 0s 609228910e-09 1s 1s 609233070e-09 1s 1s 609238230e-09 0s 0s 609239150e-09 1s 1s 609243350e-09 1s 1s 609248470e-09 0s 0s 609249390e-09 1s 1s 609253630e-09 1s 1s 609258710e-09 0s 0s 609259630e-09 1s 1s 609263910e-09 1s 1s 609268950e-09 0s 0s 609269870e-09 1s 1s 609274190e-09 1s 1s 609279190e-09 0s 0s 609280110e-09 1s 1s 609284470e-09 1s 1s 609289430e-09 0s 0s 609290350e-09 1s 1s 609294750e-09 1s 1s 609299670e-09 0s 0s 609300590e-09 1s 1s 609305030e-09 1s 1s 609309910e-09 0s 0s 609310830e-09 1s 1s 609315310e-09 1s 1s 609320150e-09 0s 0s 609321070e-09 1s 1s 609325590e-09 1s 1s 609330390e-09 0s 0s 609331310e-09 1s 1s 609335870e-09 1s 1s 609340630e-09 0s 0s 609341550e-09 1s 1s 609346150e-09 1s 1s 609350870e-09 0s 0s 609351790e-09 1s 1s 609356430e-09 1s 1s 609361110e-09 0s 0s 609362030e-09 1s 1s 609366710e-09 1s 1s 609371350e-09 0s 0s 609372270e-09 1s 1s 609376990e-09 1s 1s 609381590e-09 0s 0s 609382510e-09 1s 1s 609387270e-09 1s 1s 609391830e-09 0s 0s 609392750e-09 1s 1s 609397550e-09 1s 1s 609402070e-09 0s 0s 609402990e-09 1s 1s 609407830e-09 1s 1s 609412310e-09 0s 0s 609413230e-09 1s 1s 609418110e-09 1s 1s 609422550e-09 0s 0s 609423470e-09 1s 1s 609428390e-09 1s 1s 609432790e-09 0s 0s 609433710e-09 1s 1s 609438670e-09 1s 1s 609443030e-09 0s 0s 609443950e-09 1s 1s 609448950e-09 1s 1s 609453270e-09 0s 0s 609454190e-09 1s 1s 609459230e-09 1s 1s 609463510e-09 0s 0s 609464430e-09 1s 1s 609469510e-09 1s 1s 609473750e-09 0s 0s 609474670e-09 1s 1s 609479790e-09 1s 1s 609483990e-09 0s 0s 609484910e-09 1s 1s 609490070e-09 1s 1s 609494230e-09 0s 0s 609495150e-09 1s 1s 609500350e-09 1s 1s 609504470e-09 0s 0s 609505390e-09 1s 1s 609510630e-09 1s 1s 609514710e-09 0s 0s 609515630e-09 1s 1s 609520910e-09 1s 1s 609524950e-09 0s 0s 609525870e-09 1s 1s 609531190e-09 1s 1s 609535190e-09 0s 0s 609536110e-09 1s 1s 609541470e-09 1s 1s 609545430e-09 0s 0s 609546350e-09 1s 1s 609551750e-09 1s 1s 609555670e-09 0s 0s 609556590e-09 1s 1s 609562030e-09 1s 1s 609565910e-09 0s 0s 609566830e-09 1s 1s 609572310e-09 1s 1s 609576150e-09 0s 0s 609577070e-09 1s 1s 609582590e-09 1s 1s 609586390e-09 0s 0s 609587310e-09 1s 1s 609592870e-09 1s 1s 609596630e-09 0s 0s 609597550e-09 1s 1s 609603150e-09 1s 1s 609606870e-09 0s 0s 609607790e-09 1s 1s 609613430e-09 1s 1s 609617110e-09 0s 0s 609618030e-09 1s 1s 609623710e-09 1s 1s 609627350e-09 0s 0s 609628270e-09 1s 1s 609633990e-09 1s 1s 609637590e-09 0s 0s 609638510e-09 1s 1s 609644270e-09 1s 1s 609647830e-09 0s 0s 609648750e-09 1s 1s 609654550e-09 1s 1s 609658070e-09 0s 0s 609658990e-09 1s 1s 609664830e-09 1s 1s 609668310e-09 0s 0s 609669230e-09 1s 1s 609675110e-09 1s 1s 609678550e-09 0s 0s 609679470e-09 1s 1s 609685390e-09 1s 1s 609688790e-09 0s 0s 609689710e-09 1s 1s 609695670e-09 1s 1s 609699030e-09 0s 0s 609699950e-09 1s 1s 609705950e-09 1s 1s 609709270e-09 0s 0s 609710190e-09 1s 1s 609716230e-09 1s 1s 609719510e-09 0s 0s 609720430e-09 1s 1s 609726510e-09 1s 1s 609729750e-09 0s 0s 609730670e-09 1s 1s 609736790e-09 1s 1s 609739990e-09 0s 0s 609740910e-09 1s 1s 609747070e-09 1s 1s 609750230e-09 0s 0s 609751150e-09 1s 1s 609757350e-09 1s 1s 609760470e-09 0s 0s 609761390e-09 1s 1s 609767630e-09 1s 1s 609770710e-09 0s 0s 609771630e-09 1s 1s 609777910e-09 1s 1s 609780950e-09 0s 0s 609781870e-09 1s 1s 609788190e-09 1s 1s 609791190e-09 0s 0s 609792110e-09 1s 1s 609798470e-09 1s 1s 609801430e-09 0s 0s 609802350e-09 1s 1s 609808750e-09 1s 1s 609811670e-09 0s 0s 609812590e-09 1s 1s 609819030e-09 1s 1s 609821910e-09 0s 0s 609822830e-09 1s 1s 609829310e-09 1s 1s 609832150e-09 0s 0s 609833070e-09 1s 1s 609839590e-09 1s 1s 609842390e-09 0s 0s 609843310e-09 1s 1s 609849870e-09 1s 1s 609852630e-09 0s 0s 609853550e-09 1s 1s 609860150e-09 1s 1s 609862870e-09 0s 0s 609863790e-09 1s 1s 609870430e-09 1s 1s 609873110e-09 0s 0s 609874030e-09 1s 1s 609880710e-09 1s 1s 609883350e-09 0s 0s 609884270e-09 1s 1s 609890990e-09 1s 1s 609893590e-09 0s 0s 609894510e-09 1s 1s 609901270e-09 1s 1s 609903830e-09 0s 0s 609904750e-09 1s 1s 609911550e-09 1s 1s 609914070e-09 0s 0s 609914990e-09 1s 1s 609921830e-09 1s 1s 609924310e-09 0s 0s 609925230e-09 1s 1s 609932110e-09 1s 1s 609934550e-09 0s 0s 609935470e-09 1s 1s 609942390e-09 1s 1s 609944790e-09 0s 0s 609945710e-09 1s 1s 609952670e-09 1s 1s 609955030e-09 0s 0s 609955950e-09 1s 1s 609962950e-09 1s 1s 609965270e-09 0s 0s 609966190e-09 1s 1s 609973230e-09 1s 1s 609975510e-09 0s 0s 609976430e-09 1s 1s 609983510e-09 1s 1s 609985750e-09 0s 0s 609986670e-09 1s 1s 609993790e-09 1s 1s 609995990e-09 0s 0s 609996910e-09 1s 1s 610004070e-09 1s 1s 610006230e-09 0s 0s 610007150e-09 1s 1s 610014350e-09 1s 1s 610016470e-09 0s 0s 610017390e-09 1s 1s 610024630e-09 1s 1s 610026710e-09 0s 0s 610027630e-09 1s 1s 610034910e-09 1s 1s 610036950e-09 0s 0s 610037870e-09 1s 1s 610045190e-09 1s 1s 610047190e-09 0s 0s 610048110e-09 1s 1s 610055470e-09 1s 1s 610057430e-09 0s 0s 610058350e-09 1s 1s 610065750e-09 1s 1s 610067670e-09 0s 0s 610068590e-09 1s 1s 610076030e-09 1s 1s 610077910e-09 0s 0s 610078830e-09 1s 1s 610086310e-09 1s 1s 610088150e-09 0s 0s 610089070e-09 1s 1s 610096590e-09 1s 1s 610098390e-09 0s 0s 610099310e-09 1s 1s 610106870e-09 1s 1s 610108630e-09 0s 0s 610109550e-09 1s 1s 610117150e-09 1s 1s 610118870e-09 0s 0s 610119790e-09 1s 1s 610127430e-09 1s 1s 610129110e-09 0s 0s 610130030e-09 1s 1s 610137710e-09 1s 1s 610139350e-09 0s 0s 610140270e-09 1s 1s 610147990e-09 1s 1s 610149590e-09 0s 0s 610150510e-09 1s 1s 610158270e-09 1s 1s 610159830e-09 0s 0s 610160750e-09 1s 1s 610168550e-09 1s 1s 610170070e-09 0s 0s 610170990e-09 1s 1s 610178830e-09 1s 1s 610180310e-09 0s 0s 610181230e-09 1s 1s 610189110e-09 1s 1s 610190550e-09 0s 0s 610191470e-09 1s 1s 610199390e-09 1s 1s 610200790e-09 0s 0s 610201710e-09 1s 1s 610209670e-09 1s 1s 610211030e-09 0s 0s 610211950e-09 1s 1s 610219950e-09 1s 1s 610221270e-09 0s 0s 610222190e-09 1s 1s 610230230e-09 1s 1s 610231510e-09 0s 0s 610232430e-09 1s 1s 610240510e-09 1s 1s 610241750e-09 0s 0s 610242670e-09 1s 1s 610250790e-09 1s 1s 610251990e-09 0s 0s 610252910e-09 1s 1s 610261070e-09 1s 1s 610262230e-09 0s 0s 610263150e-09 1s 1s 610271350e-09 1s 1s 610272470e-09 0s 0s 610273390e-09 1s 1s 610281630e-09 1s 1s 610282710e-09 0s 0s 610283630e-09 1s 1s 610291910e-09 1s 1s 610292950e-09 0s 0s 610293870e-09 1s 1s 610302190e-09 1s 1s 610303190e-09 0s 0s 610304110e-09 1s 1s 610312470e-09 1s 1s 610313430e-09 0s 0s 610314350e-09 1s 1s 610322750e-09 1s 1s 610323670e-09 0s 0s 610324590e-09 1s 1s 610333030e-09 1s 1s 610333910e-09 0s 0s 610334830e-09 1s 1s 610343310e-09 1s 1s 610344150e-09 0s 0s 610345070e-09 1s 1s 610353590e-09 1s 1s 610354390e-09 0s 0s 610355310e-09 1s 1s 610363870e-09 1s 1s 610364630e-09 0s 0s 610365550e-09 1s 1s 610374150e-09 1s 1s 610374870e-09 0s 0s 610375790e-09 1s 1s 610384430e-09 1s 1s 610385110e-09 0s 0s 610386030e-09 1s 1s 610394710e-09 1s 1s 610395350e-09 0s 0s 610396270e-09 1s 1s 610404990e-09 1s 1s 610405590e-09 0s 0s 610406510e-09 1s 1s 610415270e-09 1s 1s 610415830e-09 0s 0s 610416750e-09 1s 1s 610425550e-09 1s 1s 610426070e-09 0s 0s 610426990e-09 1s 1s 610435830e-09 1s 1s 610436310e-09 0s 0s 610437230e-09 1s 1s 610446110e-09 1s 1s 610446550e-09 0s 0s 610447470e-09 1s 1s 610456390e-09 1s 1s 610456790e-09 0s 0s 610457710e-09 1s 1s 610466670e-09 1s 1s 610467030e-09 0s 0s 610467950e-09 1s 1s 610476950e-09 1s 1s 610477270e-09 0s 0s 610478190e-09 1s 1s 610487230e-09 1s 1s 610487510e-09 0s 0s 610488430e-09 1s 1s 610497510e-09 1s 1s 610497750e-09 0s 0s 610498670e-09 1s 1s 610507790e-09 1s 1s 610507990e-09 0s 0s 610508910e-09 1s 1s 610518070e-09 1s 1s 610518230e-09 0s 0s 610519150e-09 1s 1s 610528350e-09 1s 1s 610528470e-09 0s 0s 610529390e-09 1s 1s 610538630e-09 1s 1s 610538710e-09 0s 0s 610539630e-09 1s 1s 610548910e-09 1s 1s 610548950e-09 0s 0s 610549870e-09 1s 1s 610559190e-09 0s 0s 610560110e-09 1s 1s 610569430e-09 0s 0s 610569470e-09 0s 0s 610570350e-09 1s 1s 610579670e-09 0s 0s 610579750e-09 0s 0s 610580590e-09 1s 1s 610589910e-09 0s 0s 610590030e-09 0s 0s 610590830e-09 1s 1s 610600150e-09 0s 0s 610600310e-09 0s 0s 610601070e-09 1s 1s 610610390e-09 0s 0s 610610590e-09 0s 0s 610611310e-09 1s 1s 610620630e-09 0s 0s 610620870e-09 0s 0s 610621550e-09 1s 1s 610630870e-09 0s 0s 610631150e-09 0s 0s 610631790e-09 1s 1s 610641110e-09 0s 0s 610641430e-09 0s 0s 610642030e-09 1s 1s 610651350e-09 0s 0s 610651710e-09 0s 0s 610652270e-09 1s 1s 610661590e-09 0s 0s 610661990e-09 0s 0s 610662510e-09 1s 1s 610671830e-09 0s 0s 610672270e-09 0s 0s 610672750e-09 1s 1s 610682070e-09 0s 0s 610682550e-09 0s 0s 610682990e-09 1s 1s 610692310e-09 0s 0s 610692830e-09 0s 0s 610693230e-09 1s 1s 610702550e-09 0s 0s 610703110e-09 0s 0s 610703470e-09 1s 1s 610712790e-09 0s 0s 610713390e-09 0s 0s 610713710e-09 1s 1s 610723030e-09 0s 0s 610723670e-09 0s 0s 610723950e-09 1s 1s 610733270e-09 0s 0s 610733950e-09 0s 0s 610734190e-09 1s 1s 610743510e-09 0s 0s 610744230e-09 0s 0s 610744430e-09 1s 1s 610753750e-09 0s 0s 610754510e-09 0s 0s 610754670e-09 1s 1s 610763990e-09 0s 0s 610764790e-09 0s 0s 610764910e-09 1s 1s 610774230e-09 0s 0s 610775070e-09 0s 0s 610775150e-09 1s 1s 610784470e-09 0s 0s 610785350e-09 0s 0s 610785390e-09 1s 1s 610794710e-09 0s 0s 610795630e-09 1s 1s 610795670e-09 1s 1s 610804990e-09 0s 0s 610805870e-09 1s 1s 610805950e-09 1s 1s 610815230e-09 0s 0s 610816110e-09 1s 1s 610816230e-09 1s 1s 610825470e-09 0s 0s 610826350e-09 1s 1s 610826510e-09 1s 1s 610835710e-09 0s 0s 610836590e-09 1s 1s 610836790e-09 1s 1s 610845950e-09 0s 0s 610846830e-09 1s 1s 610847070e-09 1s 1s 610856190e-09 0s 0s 610857070e-09 1s 1s 610857350e-09 1s 1s 610866430e-09 0s 0s 610867310e-09 1s 1s 610867630e-09 1s 1s 610876670e-09 0s 0s 610877550e-09 1s 1s 610877910e-09 1s 1s 610886910e-09 0s 0s 610887790e-09 1s 1s 610888190e-09 1s 1s 610897150e-09 0s 0s 610898030e-09 1s 1s 610898470e-09 1s 1s 610907390e-09 0s 0s 610908270e-09 1s 1s 610908750e-09 1s 1s 610917630e-09 0s 0s 610918510e-09 1s 1s 610919030e-09 1s 1s 610927870e-09 0s 0s 610928750e-09 1s 1s 610929310e-09 1s 1s 610938110e-09 0s 0s 610938990e-09 1s 1s 610939590e-09 1s 1s 610948350e-09 0s 0s 610949230e-09 1s 1s 610949870e-09 1s 1s 610958590e-09 0s 0s 610959470e-09 1s 1s 610960150e-09 1s 1s 610968830e-09 0s 0s 610969710e-09 1s 1s 610970430e-09 1s 1s 610979070e-09 0s 0s 610979950e-09 1s 1s 610980710e-09 1s 1s 610989310e-09 0s 0s 610990190e-09 1s 1s 610990990e-09 1s 1s 610999550e-09 0s 0s 611000430e-09 1s 1s 611001270e-09 1s 1s 611009790e-09 0s 0s 611010670e-09 1s 1s 611011550e-09 1s 1s 611020030e-09 0s 0s 611020910e-09 1s 1s 611021830e-09 1s 1s 611030270e-09 0s 0s 611031150e-09 1s 1s 611032110e-09 1s 1s 611040510e-09 0s 0s 611041390e-09 1s 1s 611042390e-09 1s 1s 611050750e-09 0s 0s 611051630e-09 1s 1s 611052670e-09 1s 1s 611060990e-09 0s 0s 611061870e-09 1s 1s 611062950e-09 1s 1s 611071230e-09 0s 0s 611072110e-09 1s 1s 611073230e-09 1s 1s 611081470e-09 0s 0s 611082350e-09 1s 1s 611083510e-09 1s 1s 611091710e-09 0s 0s 611092590e-09 1s 1s 611093790e-09 1s 1s 611101950e-09 0s 0s 611102830e-09 1s 1s 611104070e-09 1s 1s 611112190e-09 0s 0s 611113070e-09 1s 1s 611114350e-09 1s 1s 611122430e-09 0s 0s 611123310e-09 1s 1s 611124630e-09 1s 1s 611132670e-09 0s 0s 611133550e-09 1s 1s 611134910e-09 1s 1s 611142910e-09 0s 0s 611143790e-09 1s 1s 611145190e-09 1s 1s 611153150e-09 0s 0s 611154030e-09 1s 1s 611155470e-09 1s 1s 611163390e-09 0s 0s 611164270e-09 1s 1s 611165750e-09 1s 1s 611173630e-09 0s 0s 611174510e-09 1s 1s 611176030e-09 1s 1s 611183870e-09 0s 0s 611184750e-09 1s 1s 611186310e-09 1s 1s 611194110e-09 0s 0s 611194990e-09 1s 1s 611196590e-09 1s 1s 611204350e-09 0s 0s 611205230e-09 1s 1s 611206870e-09 1s 1s 611214590e-09 0s 0s 611215470e-09 1s 1s 611217150e-09 1s 1s 611224830e-09 0s 0s 611225710e-09 1s 1s 611227430e-09 1s 1s 611235070e-09 0s 0s 611235950e-09 1s 1s 611237710e-09 1s 1s 611245310e-09 0s 0s 611246190e-09 1s 1s 611247990e-09 1s 1s 611255550e-09 0s 0s 611256430e-09 1s 1s 611258270e-09 1s 1s 611265790e-09 0s 0s 611266670e-09 1s 1s 611268550e-09 1s 1s 611276030e-09 0s 0s 611276910e-09 1s 1s 611278830e-09 1s 1s 611286270e-09 0s 0s 611287150e-09 1s 1s 611289110e-09 1s 1s 611296510e-09 0s 0s 611297390e-09 1s 1s 611299390e-09 1s 1s 611306750e-09 0s 0s 611307630e-09 1s 1s 611309670e-09 1s 1s 611316990e-09 0s 0s 611317870e-09 1s 1s 611319950e-09 1s 1s 611327230e-09 0s 0s 611328110e-09 1s 1s 611330230e-09 1s 1s 611337470e-09 0s 0s 611338350e-09 1s 1s 611340510e-09 1s 1s 611347710e-09 0s 0s 611348590e-09 1s 1s 611350790e-09 1s 1s 611357950e-09 0s 0s 611358830e-09 1s 1s 611361070e-09 1s 1s 611368190e-09 0s 0s 611369070e-09 1s 1s 611371350e-09 1s 1s 611378430e-09 0s 0s 611379310e-09 1s 1s 611381630e-09 1s 1s 611388670e-09 0s 0s 611389550e-09 1s 1s 611391910e-09 1s 1s 611398910e-09 0s 0s 611399790e-09 1s 1s 611402190e-09 1s 1s 611409150e-09 0s 0s 611410030e-09 1s 1s 611412470e-09 1s 1s 611419390e-09 0s 0s 611420270e-09 1s 1s 611422750e-09 1s 1s 611429630e-09 0s 0s 611430510e-09 1s 1s 611433030e-09 1s 1s 611439870e-09 0s 0s 611440750e-09 1s 1s 611443310e-09 1s 1s 611450110e-09 0s 0s 611450990e-09 1s 1s 611453590e-09 1s 1s 611460350e-09 0s 0s 611461230e-09 1s 1s 611463870e-09 1s 1s 611470590e-09 0s 0s 611471470e-09 1s 1s 611474150e-09 1s 1s 611480830e-09 0s 0s 611481710e-09 1s 1s 611484430e-09 1s 1s 611491070e-09 0s 0s 611491950e-09 1s 1s 611494710e-09 1s 1s 611501310e-09 0s 0s 611502190e-09 1s 1s 611504990e-09 1s 1s 611511550e-09 0s 0s 611512430e-09 1s 1s 611515270e-09 1s 1s 611521790e-09 0s 0s 611522670e-09 1s 1s 611525550e-09 1s 1s 611532030e-09 0s 0s 611532910e-09 1s 1s 611535830e-09 1s 1s 611542270e-09 0s 0s 611543150e-09 1s 1s 611546110e-09 1s 1s 611552510e-09 0s 0s 611553390e-09 1s 1s 611556390e-09 1s 1s 611562750e-09 0s 0s 611563630e-09 1s 1s 611566670e-09 1s 1s 611572990e-09 0s 0s 611573870e-09 1s 1s 611576950e-09 1s 1s 611583230e-09 0s 0s 611584110e-09 1s 1s 611587230e-09 1s 1s 611593470e-09 0s 0s 611594350e-09 1s 1s 611597510e-09 1s 1s 611603710e-09 0s 0s 611604590e-09 1s 1s 611607790e-09 1s 1s 611613950e-09 0s 0s 611614830e-09 1s 1s 611618070e-09 1s 1s 611624190e-09 0s 0s 611625070e-09 1s 1s 611628350e-09 1s 1s 611634430e-09 0s 0s 611635310e-09 1s 1s 611638630e-09 1s 1s 611644670e-09 0s 0s 611645550e-09 1s 1s 611648910e-09 1s 1s 611654910e-09 0s 0s 611655790e-09 1s 1s 611659190e-09 1s 1s 611665150e-09 0s 0s 611666030e-09 1s 1s 611669470e-09 1s 1s 611675390e-09 0s 0s 611676270e-09 1s 1s 611679750e-09 1s 1s 611685630e-09 0s 0s 611686510e-09 1s 1s 611690030e-09 1s 1s 611695870e-09 0s 0s 611696750e-09 1s 1s 611700310e-09 1s 1s 611706110e-09 0s 0s 611706990e-09 1s 1s 611710590e-09 1s 1s 611716350e-09 0s 0s 611717230e-09 1s 1s 611720870e-09 1s 1s 611726590e-09 0s 0s 611727470e-09 1s 1s 611731150e-09 1s 1s 611736830e-09 0s 0s 611737710e-09 1s 1s 611741430e-09 1s 1s 611747070e-09 0s 0s 611747950e-09 1s 1s 611751710e-09 1s 1s 611757310e-09 0s 0s 611758190e-09 1s 1s 611761990e-09 1s 1s 611767550e-09 0s 0s 611768430e-09 1s 1s 611772270e-09 1s 1s 611777790e-09 0s 0s 611778670e-09 1s 1s 611782550e-09 1s 1s 611788030e-09 0s 0s 611788910e-09 1s 1s 611792830e-09 1s 1s 611798270e-09 0s 0s 611799150e-09 1s 1s 611803110e-09 1s 1s 611808510e-09 0s 0s 611809390e-09 1s 1s 611813390e-09 1s 1s 611818750e-09 0s 0s 611819630e-09 1s 1s 611823670e-09 1s 1s 611828990e-09 0s 0s 611829870e-09 1s 1s 611833950e-09 1s 1s 611839230e-09 0s 0s 611840110e-09 1s 1s 611844230e-09 1s 1s 611849470e-09 0s 0s 611850350e-09 1s 1s 611854510e-09 1s 1s 611859710e-09 0s 0s 611860590e-09 1s 1s 611864790e-09 1s 1s 611869950e-09 0s 0s 611870830e-09 1s 1s 611875070e-09 1s 1s 611880190e-09 0s 0s 611881070e-09 1s 1s 611885350e-09 1s 1s 611890430e-09 0s 0s 611891310e-09 1s 1s 611895630e-09 1s 1s 611900670e-09 0s 0s 611901550e-09 1s 1s 611905910e-09 1s 1s 611910910e-09 0s 0s 611911790e-09 1s 1s 611916190e-09 1s 1s 611921150e-09 0s 0s 611922030e-09 1s 1s 611926470e-09 1s 1s 611931390e-09 0s 0s 611932270e-09 1s 1s 611936750e-09 1s 1s 611941630e-09 0s 0s 611942510e-09 1s 1s 611947030e-09 1s 1s 611951870e-09 0s 0s 611952750e-09 1s 1s 611957310e-09 1s 1s 611962110e-09 0s 0s 611962990e-09 1s 1s 611967590e-09 1s 1s 611972350e-09 0s 0s 611973230e-09 1s 1s 611977870e-09 1s 1s 611982590e-09 0s 0s 611983470e-09 1s 1s 611988150e-09 1s 1s 611992830e-09 0s 0s 611993710e-09 1s 1s 611998430e-09 1s 1s 612003070e-09 0s 0s 612003950e-09 1s 1s 612008710e-09 1s 1s 612013310e-09 0s 0s 612014190e-09 1s 1s 612018990e-09 1s 1s 612023550e-09 0s 0s 612024430e-09 1s 1s 612029270e-09 1s 1s 612033790e-09 0s 0s 612034670e-09 1s 1s 612039550e-09 1s 1s 612044030e-09 0s 0s 612044910e-09 1s 1s 612049830e-09 1s 1s 612054270e-09 0s 0s 612055150e-09 1s 1s 612060110e-09 1s 1s 612064510e-09 0s 0s 612065390e-09 1s 1s 612070390e-09 1s 1s 612074750e-09 0s 0s 612075630e-09 1s 1s 612080670e-09 1s 1s 612084990e-09 0s 0s 612085870e-09 1s 1s 612090950e-09 1s 1s 612095230e-09 0s 0s 612096110e-09 1s 1s 612101230e-09 1s 1s 612105470e-09 0s 0s 612106350e-09 1s 1s 612111510e-09 1s 1s 612115710e-09 0s 0s 612116590e-09 1s 1s 612121790e-09 1s 1s 612125950e-09 0s 0s 612126830e-09 1s 1s 612132070e-09 1s 1s 612136190e-09 0s 0s 612137070e-09 1s 1s 612142350e-09 1s 1s 612146430e-09 0s 0s 612147310e-09 1s 1s 612152630e-09 1s 1s 612156670e-09 0s 0s 612157550e-09 1s 1s 612162910e-09 1s 1s 612166910e-09 0s 0s 612167790e-09 1s 1s 612173190e-09 1s 1s 612177150e-09 0s 0s 612178030e-09 1s 1s 612183470e-09 1s 1s 612187390e-09 0s 0s 612188270e-09 1s 1s 612193750e-09 1s 1s 612197630e-09 0s 0s 612198510e-09 1s 1s 612204030e-09 1s 1s 612207870e-09 0s 0s 612208750e-09 1s 1s 612214310e-09 1s 1s 612218110e-09 0s 0s 612218990e-09 1s 1s 612224590e-09 1s 1s 612228350e-09 0s 0s 612229230e-09 1s 1s 612234870e-09 1s 1s 612238590e-09 0s 0s 612239470e-09 1s 1s 612245150e-09 1s 1s 612248830e-09 0s 0s 612249710e-09 1s 1s 612255430e-09 1s 1s 612259070e-09 0s 0s 612259950e-09 1s 1s 612265710e-09 1s 1s 612269310e-09 0s 0s 612270190e-09 1s 1s 612275990e-09 1s 1s 612279550e-09 0s 0s 612280430e-09 1s 1s 612286270e-09 1s 1s 612289790e-09 0s 0s 612290670e-09 1s 1s 612296550e-09 1s 1s 612300030e-09 0s 0s 612300910e-09 1s 1s 612306830e-09 1s 1s 612310270e-09 0s 0s 612311150e-09 1s 1s 612317110e-09 1s 1s 612320510e-09 0s 0s 612321390e-09 1s 1s 612327390e-09 1s 1s 612330750e-09 0s 0s 612331630e-09 1s 1s 612337670e-09 1s 1s 612340990e-09 0s 0s 612341870e-09 1s 1s 612347950e-09 1s 1s 612351230e-09 0s 0s 612352110e-09 1s 1s 612358230e-09 1s 1s 612361470e-09 0s 0s 612362350e-09 1s 1s 612368510e-09 1s 1s 612371710e-09 0s 0s 612372590e-09 1s 1s 612378790e-09 1s 1s 612381950e-09 0s 0s 612382830e-09 1s 1s 612389070e-09 1s 1s 612392190e-09 0s 0s 612393070e-09 1s 1s 612399350e-09 1s 1s 612402430e-09 0s 0s 612403310e-09 1s 1s 612409630e-09 1s 1s 612412670e-09 0s 0s 612413550e-09 1s 1s 612419910e-09 1s 1s 612422910e-09 0s 0s 612423790e-09 1s 1s 612430190e-09 1s 1s 612433150e-09 0s 0s 612434030e-09 1s 1s 612440470e-09 1s 1s 612443390e-09 0s 0s 612444270e-09 1s 1s 612450750e-09 1s 1s 612453630e-09 0s 0s 612454510e-09 1s 1s 612461030e-09 1s 1s 612463870e-09 0s 0s 612464750e-09 1s 1s 612471310e-09 1s 1s 612474110e-09 0s 0s 612474990e-09 1s 1s 612481590e-09 1s 1s 612484350e-09 0s 0s 612485230e-09 1s 1s 612491870e-09 1s 1s 612494590e-09 0s 0s 612495470e-09 1s 1s 612502150e-09 1s 1s 612504830e-09 0s 0s 612505710e-09 1s 1s 612512430e-09 1s 1s 612515070e-09 0s 0s 612515950e-09 1s 1s 612522710e-09 1s 1s 612525310e-09 0s 0s 612526190e-09 1s 1s 612532990e-09 1s 1s 612535550e-09 0s 0s 612536430e-09 1s 1s 612543270e-09 1s 1s 612545790e-09 0s 0s 612546670e-09 1s 1s 612553550e-09 1s 1s 612556030e-09 0s 0s 612556910e-09 1s 1s 612563830e-09 1s 1s 612566270e-09 0s 0s 612567150e-09 1s 1s 612574110e-09 1s 1s 612576510e-09 0s 0s 612577390e-09 1s 1s 612584390e-09 1s 1s 612586750e-09 0s 0s 612587630e-09 1s 1s 612594670e-09 1s 1s 612596990e-09 0s 0s 612597870e-09 1s 1s 612604950e-09 1s 1s 612607230e-09 0s 0s 612608110e-09 1s 1s 612615230e-09 1s 1s 612617470e-09 0s 0s 612618350e-09 1s 1s 612625510e-09 1s 1s 612627710e-09 0s 0s 612628590e-09 1s 1s 612635790e-09 1s 1s 612637950e-09 0s 0s 612638830e-09 1s 1s 612646070e-09 1s 1s 612648190e-09 0s 0s 612649070e-09 1s 1s 612656350e-09 1s 1s 612658430e-09 0s 0s 612659310e-09 1s 1s 612666630e-09 1s 1s 612668670e-09 0s 0s 612669550e-09 1s 1s 612676910e-09 1s 1s 612678910e-09 0s 0s 612679790e-09 1s 1s 612687190e-09 1s 1s 612689150e-09 0s 0s 612690030e-09 1s 1s 612697470e-09 1s 1s 612699390e-09 0s 0s 612700270e-09 1s 1s 612707750e-09 1s 1s 612709630e-09 0s 0s 612710510e-09 1s 1s 612718030e-09 1s 1s 612719870e-09 0s 0s 612720750e-09 1s 1s 612728310e-09 1s 1s 612730110e-09 0s 0s 612730990e-09 1s 1s 612738590e-09 1s 1s 612740350e-09 0s 0s 612741230e-09 1s 1s 612748870e-09 1s 1s 612750590e-09 0s 0s 612751470e-09 1s 1s 612759150e-09 1s 1s 612760830e-09 0s 0s 612761710e-09 1s 1s 612769430e-09 1s 1s 612771070e-09 0s 0s 612771950e-09 1s 1s 612779710e-09 1s 1s 612781310e-09 0s 0s 612782190e-09 1s 1s 612789990e-09 1s 1s 612791550e-09 0s 0s 612792430e-09 1s 1s 612800270e-09 1s 1s 612801790e-09 0s 0s 612802670e-09 1s 1s 612810550e-09 1s 1s 612812030e-09 0s 0s 612812910e-09 1s 1s 612820830e-09 1s 1s 612822270e-09 0s 0s 612823150e-09 1s 1s 612831110e-09 1s 1s 612832510e-09 0s 0s 612833390e-09 1s 1s 612841390e-09 1s 1s 612842750e-09 0s 0s 612843630e-09 1s 1s 612851670e-09 1s 1s 612852990e-09 0s 0s 612853870e-09 1s 1s 612861950e-09 1s 1s 612863230e-09 0s 0s 612864110e-09 1s 1s 612872230e-09 1s 1s 612873470e-09 0s 0s 612874350e-09 1s 1s 612882510e-09 1s 1s 612883710e-09 0s 0s 612884590e-09 1s 1s 612892790e-09 1s 1s 612893950e-09 0s 0s 612894830e-09 1s 1s 612903070e-09 1s 1s 612904190e-09 0s 0s 612905070e-09 1s 1s 612913350e-09 1s 1s 612914430e-09 0s 0s 612915310e-09 1s 1s 612923630e-09 1s 1s 612924670e-09 0s 0s 612925550e-09 1s 1s 612933910e-09 1s 1s 612934910e-09 0s 0s 612935790e-09 1s 1s 612944190e-09 1s 1s 612945150e-09 0s 0s 612946030e-09 1s 1s 612954470e-09 1s 1s 612955390e-09 0s 0s 612956270e-09 1s 1s 612964750e-09 1s 1s 612965630e-09 0s 0s 612966510e-09 1s 1s 612975030e-09 1s 1s 612975870e-09 0s 0s 612976750e-09 1s 1s 612985310e-09 1s 1s 612986110e-09 0s 0s 612986990e-09 1s 1s 612995590e-09 1s 1s 612996350e-09 0s 0s 612997230e-09 1s 1s 613005870e-09 1s 1s 613006590e-09 0s 0s 613007470e-09 1s 1s 613016150e-09 1s 1s 613016830e-09 0s 0s 613017710e-09 1s 1s 613026430e-09 1s 1s 613027070e-09 0s 0s 613027950e-09 1s 1s 613036710e-09 1s 1s 613037310e-09 0s 0s 613038190e-09 1s 1s 613046990e-09 1s 1s 613047550e-09 0s 0s 613048430e-09 1s 1s 613057270e-09 1s 1s 613057790e-09 0s 0s 613058670e-09 1s 1s 613067550e-09 1s 1s 613068030e-09 0s 0s 613068910e-09 1s 1s 613077830e-09 1s 1s 613078270e-09 0s 0s 613079150e-09 1s 1s 613088110e-09 1s 1s 613088510e-09 0s 0s 613089390e-09 1s 1s 613098390e-09 1s 1s 613098750e-09 0s 0s 613099630e-09 1s 1s 613108670e-09 1s 1s 613108990e-09 0s 0s 613109870e-09 1s 1s 613118950e-09 1s 1s 613119230e-09 0s 0s 613120110e-09 1s 1s 613129230e-09 1s 1s 613129470e-09 0s 0s 613130350e-09 1s 1s 613139510e-09 1s 1s 613139710e-09 0s 0s 613140590e-09 1s 1s 613149790e-09 1s 1s 613149950e-09 0s 0s 613150830e-09 1s 1s 613160070e-09 1s 1s 613160190e-09 0s 0s 613161070e-09 1s 1s 613170350e-09 1s 1s 613170430e-09 0s 0s 613171310e-09 1s 1s 613180630e-09 1s 1s 613180670e-09 0s 0s 613181550e-09 1s 1s 613190910e-09 0s 0s 613191790e-09 1s 1s 613201150e-09 0s 0s 613201190e-09 0s 0s 613202030e-09 1s 1s 613211390e-09 0s 0s 613211470e-09 0s 0s 613212270e-09 1s 1s 613221630e-09 0s 0s 613221750e-09 0s 0s 613222510e-09 1s 1s 613231870e-09 0s 0s 613232030e-09 0s 0s 613232750e-09 1s 1s 613242110e-09 0s 0s 613242310e-09 0s 0s 613242990e-09 1s 1s 613252350e-09 0s 0s 613252590e-09 0s 0s 613253230e-09 1s 1s 613262590e-09 0s 0s 613262870e-09 0s 0s 613263470e-09 1s 1s 613272830e-09 0s 0s 613273150e-09 0s 0s 613273710e-09 1s 1s 613283070e-09 0s 0s 613283430e-09 0s 0s 613283950e-09 1s 1s 613293310e-09 0s 0s 613293710e-09 0s 0s 613294190e-09 1s 1s 613303550e-09 0s 0s 613303990e-09 0s 0s 613304430e-09 1s 1s 613313790e-09 0s 0s 613314270e-09 0s 0s 613314670e-09 1s 1s 613324030e-09 0s 0s 613324550e-09 0s 0s 613324910e-09 1s 1s 613334270e-09 0s 0s 613334830e-09 0s 0s 613335150e-09 1s 1s 613344510e-09 0s 0s 613345110e-09 0s 0s 613345390e-09 1s 1s 613354750e-09 0s 0s 613355390e-09 0s 0s 613355630e-09 1s 1s 613364990e-09 0s 0s 613365670e-09 0s 0s 613365870e-09 1s 1s 613375230e-09 0s 0s 613375950e-09 0s 0s 613376110e-09 1s 1s 613385470e-09 0s 0s 613386230e-09 0s 0s 613386350e-09 1s 1s 613395710e-09 0s 0s 613396510e-09 0s 0s 613396590e-09 1s 1s 613405950e-09 0s 0s 613406790e-09 0s 0s 613406830e-09 1s 1s 613416190e-09 0s 0s 613417070e-09 1s 1s 613417110e-09 1s 1s 613426470e-09 0s 0s 613427310e-09 1s 1s 613427390e-09 1s 1s 613436710e-09 0s 0s 613437550e-09 1s 1s 613437670e-09 1s 1s 613446950e-09 0s 0s 613447790e-09 1s 1s 613447950e-09 1s 1s 613457190e-09 0s 0s 613458030e-09 1s 1s 613458230e-09 1s 1s 613467430e-09 0s 0s 613468270e-09 1s 1s 613468510e-09 1s 1s 613477670e-09 0s 0s 613478510e-09 1s 1s 613478790e-09 1s 1s 613487910e-09 0s 0s 613488750e-09 1s 1s 613489070e-09 1s 1s 613498150e-09 0s 0s 613498990e-09 1s 1s 613499350e-09 1s 1s 613508390e-09 0s 0s 613509230e-09 1s 1s 613509630e-09 1s 1s 613518630e-09 0s 0s 613519470e-09 1s 1s 613519910e-09 1s 1s 613528870e-09 0s 0s 613529710e-09 1s 1s 613530190e-09 1s 1s 613539110e-09 0s 0s 613539950e-09 1s 1s 613540470e-09 1s 1s 613549350e-09 0s 0s 613550190e-09 1s 1s 613550750e-09 1s 1s 613559590e-09 0s 0s 613560430e-09 1s 1s 613561030e-09 1s 1s 613569830e-09 0s 0s 613570670e-09 1s 1s 613571310e-09 1s 1s 613580070e-09 0s 0s 613580910e-09 1s 1s 613581590e-09 1s 1s 613590310e-09 0s 0s 613591150e-09 1s 1s 613591870e-09 1s 1s 613600550e-09 0s 0s 613601390e-09 1s 1s 613602150e-09 1s 1s 613610790e-09 0s 0s 613611630e-09 1s 1s 613612430e-09 1s 1s 613621030e-09 0s 0s 613621870e-09 1s 1s 613622710e-09 1s 1s 613631270e-09 0s 0s 613632110e-09 1s 1s 613632990e-09 1s 1s 613641510e-09 0s 0s 613642350e-09 1s 1s 613643270e-09 1s 1s 613651750e-09 0s 0s 613652590e-09 1s 1s 613653550e-09 1s 1s 613661990e-09 0s 0s 613662830e-09 1s 1s 613663830e-09 1s 1s 613672230e-09 0s 0s 613673070e-09 1s 1s 613674110e-09 1s 1s 613682470e-09 0s 0s 613683310e-09 1s 1s 613684390e-09 1s 1s 613692710e-09 0s 0s 613693550e-09 1s 1s 613694670e-09 1s 1s 613702950e-09 0s 0s 613703790e-09 1s 1s 613704950e-09 1s 1s 613713190e-09 0s 0s 613714030e-09 1s 1s 613715230e-09 1s 1s 613723430e-09 0s 0s 613724270e-09 1s 1s 613725510e-09 1s 1s 613733670e-09 0s 0s 613734510e-09 1s 1s 613735790e-09 1s 1s 613743910e-09 0s 0s 613744750e-09 1s 1s 613746070e-09 1s 1s 613754150e-09 0s 0s 613754990e-09 1s 1s 613756350e-09 1s 1s 613764390e-09 0s 0s 613765230e-09 1s 1s 613766630e-09 1s 1s 613774630e-09 0s 0s 613775470e-09 1s 1s 613776910e-09 1s 1s 613784870e-09 0s 0s 613785710e-09 1s 1s 613787190e-09 1s 1s 613795110e-09 0s 0s 613795950e-09 1s 1s 613797470e-09 1s 1s 613805350e-09 0s 0s 613806190e-09 1s 1s 613807750e-09 1s 1s 613815590e-09 0s 0s 613816430e-09 1s 1s 613818030e-09 1s 1s 613825830e-09 0s 0s 613826670e-09 1s 1s 613828310e-09 1s 1s 613836070e-09 0s 0s 613836910e-09 1s 1s 613838590e-09 1s 1s 613846310e-09 0s 0s 613847150e-09 1s 1s 613848870e-09 1s 1s 613856550e-09 0s 0s 613857390e-09 1s 1s 613859150e-09 1s 1s 613866790e-09 0s 0s 613867630e-09 1s 1s 613869430e-09 1s 1s 613877030e-09 0s 0s 613877870e-09 1s 1s 613879710e-09 1s 1s 613887270e-09 0s 0s 613888110e-09 1s 1s 613889990e-09 1s 1s 613897510e-09 0s 0s 613898350e-09 1s 1s 613900270e-09 1s 1s 613907750e-09 0s 0s 613908590e-09 1s 1s 613910550e-09 1s 1s 613917990e-09 0s 0s 613918830e-09 1s 1s 613920830e-09 1s 1s 613928230e-09 0s 0s 613929070e-09 1s 1s 613931110e-09 1s 1s 613938470e-09 0s 0s 613939310e-09 1s 1s 613941390e-09 1s 1s 613948710e-09 0s 0s 613949550e-09 1s 1s 613951670e-09 1s 1s 613958950e-09 0s 0s 613959790e-09 1s 1s 613961950e-09 1s 1s 613969190e-09 0s 0s 613970030e-09 1s 1s 613972230e-09 1s 1s 613979430e-09 0s 0s 613980270e-09 1s 1s 613982510e-09 1s 1s 613989670e-09 0s 0s 613990510e-09 1s 1s 613992790e-09 1s 1s 613999910e-09 0s 0s 614000750e-09 1s 1s 614003070e-09 1s 1s 614010150e-09 0s 0s 614010990e-09 1s 1s 614013350e-09 1s 1s 614020390e-09 0s 0s 614021230e-09 1s 1s 614023630e-09 1s 1s 614030630e-09 0s 0s 614031470e-09 1s 1s 614033910e-09 1s 1s 614040870e-09 0s 0s 614041710e-09 1s 1s 614044190e-09 1s 1s 614051110e-09 0s 0s 614051950e-09 1s 1s 614054470e-09 1s 1s 614061350e-09 0s 0s 614062190e-09 1s 1s 614064750e-09 1s 1s 614071590e-09 0s 0s 614072430e-09 1s 1s 614075030e-09 1s 1s 614081830e-09 0s 0s 614082670e-09 1s 1s 614085310e-09 1s 1s 614092070e-09 0s 0s 614092910e-09 1s 1s 614095590e-09 1s 1s 614102310e-09 0s 0s 614103150e-09 1s 1s 614105870e-09 1s 1s 614112550e-09 0s 0s 614113390e-09 1s 1s 614116150e-09 1s 1s 614122790e-09 0s 0s 614123630e-09 1s 1s 614126430e-09 1s 1s 614133030e-09 0s 0s 614133870e-09 1s 1s 614136710e-09 1s 1s 614143270e-09 0s 0s 614144110e-09 1s 1s 614146990e-09 1s 1s 614153510e-09 0s 0s 614154350e-09 1s 1s 614157270e-09 1s 1s 614163750e-09 0s 0s 614164590e-09 1s 1s 614167550e-09 1s 1s 614173990e-09 0s 0s 614174830e-09 1s 1s 614177830e-09 1s 1s 614184230e-09 0s 0s 614185070e-09 1s 1s 614188110e-09 1s 1s 614194470e-09 0s 0s 614195310e-09 1s 1s 614198390e-09 1s 1s 614204710e-09 0s 0s 614205550e-09 1s 1s 614208670e-09 1s 1s 614214950e-09 0s 0s 614215790e-09 1s 1s 614218950e-09 1s 1s 614225190e-09 0s 0s 614226030e-09 1s 1s 614229230e-09 1s 1s 614235430e-09 0s 0s 614236270e-09 1s 1s 614239510e-09 1s 1s 614245670e-09 0s 0s 614246510e-09 1s 1s 614249790e-09 1s 1s 614255910e-09 0s 0s 614256750e-09 1s 1s 614260070e-09 1s 1s 614266150e-09 0s 0s 614266990e-09 1s 1s 614270350e-09 1s 1s 614276390e-09 0s 0s 614277230e-09 1s 1s 614280630e-09 1s 1s 614286630e-09 0s 0s 614287470e-09 1s 1s 614290910e-09 1s 1s 614296870e-09 0s 0s 614297710e-09 1s 1s 614301190e-09 1s 1s 614307110e-09 0s 0s 614307950e-09 1s 1s 614311470e-09 1s 1s 614317350e-09 0s 0s 614318190e-09 1s 1s 614321750e-09 1s 1s 614327590e-09 0s 0s 614328430e-09 1s 1s 614332030e-09 1s 1s 614337830e-09 0s 0s 614338670e-09 1s 1s 614342310e-09 1s 1s 614348070e-09 0s 0s 614348910e-09 1s 1s 614352590e-09 1s 1s 614358310e-09 0s 0s 614359150e-09 1s 1s 614362870e-09 1s 1s 614368550e-09 0s 0s 614369390e-09 1s 1s 614373150e-09 1s 1s 614378790e-09 0s 0s 614379630e-09 1s 1s 614383430e-09 1s 1s 614389030e-09 0s 0s 614389870e-09 1s 1s 614393710e-09 1s 1s 614399270e-09 0s 0s 614400110e-09 1s 1s 614403990e-09 1s 1s 614409510e-09 0s 0s 614410350e-09 1s 1s 614414270e-09 1s 1s 614419750e-09 0s 0s 614420590e-09 1s 1s 614424550e-09 1s 1s 614429990e-09 0s 0s 614430830e-09 1s 1s 614434830e-09 1s 1s 614440230e-09 0s 0s 614441070e-09 1s 1s 614445110e-09 1s 1s 614450470e-09 0s 0s 614451310e-09 1s 1s 614455390e-09 1s 1s 614460710e-09 0s 0s 614461550e-09 1s 1s 614465670e-09 1s 1s 614470950e-09 0s 0s 614471790e-09 1s 1s 614475950e-09 1s 1s 614481190e-09 0s 0s 614482030e-09 1s 1s 614486230e-09 1s 1s 614491430e-09 0s 0s 614492270e-09 1s 1s 614496510e-09 1s 1s 614501670e-09 0s 0s 614502510e-09 1s 1s 614506790e-09 1s 1s 614511910e-09 0s 0s 614512750e-09 1s 1s 614517070e-09 1s 1s 614522150e-09 0s 0s 614522990e-09 1s 1s 614527350e-09 1s 1s 614532390e-09 0s 0s 614533230e-09 1s 1s 614537630e-09 1s 1s 614542630e-09 0s 0s 614543470e-09 1s 1s 614547910e-09 1s 1s 614552870e-09 0s 0s 614553710e-09 1s 1s 614558190e-09 1s 1s 614563110e-09 0s 0s 614563950e-09 1s 1s 614568470e-09 1s 1s 614573350e-09 0s 0s 614574190e-09 1s 1s 614578750e-09 1s 1s 614583590e-09 0s 0s 614584430e-09 1s 1s 614589030e-09 1s 1s 614593830e-09 0s 0s 614594670e-09 1s 1s 614599310e-09 1s 1s 614604070e-09 0s 0s 614604910e-09 1s 1s 614609590e-09 1s 1s 614614310e-09 0s 0s 614615150e-09 1s 1s 614619870e-09 1s 1s 614624550e-09 0s 0s 614625390e-09 1s 1s 614630150e-09 1s 1s 614634790e-09 0s 0s 614635630e-09 1s 1s 614640430e-09 1s 1s 614645030e-09 0s 0s 614645870e-09 1s 1s 614650710e-09 1s 1s 614655270e-09 0s 0s 614656110e-09 1s 1s 614660990e-09 1s 1s 614665510e-09 0s 0s 614666350e-09 1s 1s 614671270e-09 1s 1s 614675750e-09 0s 0s 614676590e-09 1s 1s 614681550e-09 1s 1s 614685990e-09 0s 0s 614686830e-09 1s 1s 614691830e-09 1s 1s 614696230e-09 0s 0s 614697070e-09 1s 1s 614702110e-09 1s 1s 614706470e-09 0s 0s 614707310e-09 1s 1s 614712390e-09 1s 1s 614716710e-09 0s 0s 614717550e-09 1s 1s 614722670e-09 1s 1s 614726950e-09 0s 0s 614727790e-09 1s 1s 614732950e-09 1s 1s 614737190e-09 0s 0s 614738030e-09 1s 1s 614743230e-09 1s 1s 614747430e-09 0s 0s 614748270e-09 1s 1s 614753510e-09 1s 1s 614757670e-09 0s 0s 614758510e-09 1s 1s 614763790e-09 1s 1s 614767910e-09 0s 0s 614768750e-09 1s 1s 614774070e-09 1s 1s 614778150e-09 0s 0s 614778990e-09 1s 1s 614784350e-09 1s 1s 614788390e-09 0s 0s 614789230e-09 1s 1s 614794630e-09 1s 1s 614798630e-09 0s 0s 614799470e-09 1s 1s 614804910e-09 1s 1s 614808870e-09 0s 0s 614809710e-09 1s 1s 614815190e-09 1s 1s 614819110e-09 0s 0s 614819950e-09 1s 1s 614825470e-09 1s 1s 614829350e-09 0s 0s 614830190e-09 1s 1s 614835750e-09 1s 1s 614839590e-09 0s 0s 614840430e-09 1s 1s 614846030e-09 1s 1s 614849830e-09 0s 0s 614850670e-09 1s 1s 614856310e-09 1s 1s 614860070e-09 0s 0s 614860910e-09 1s 1s 614866590e-09 1s 1s 614870310e-09 0s 0s 614871150e-09 1s 1s 614876870e-09 1s 1s 614880550e-09 0s 0s 614881390e-09 1s 1s 614887150e-09 1s 1s 614890790e-09 0s 0s 614891630e-09 1s 1s 614897430e-09 1s 1s 614901030e-09 0s 0s 614901870e-09 1s 1s 614907710e-09 1s 1s 614911270e-09 0s 0s 614912110e-09 1s 1s 614917990e-09 1s 1s 614921510e-09 0s 0s 614922350e-09 1s 1s 614928270e-09 1s 1s 614931750e-09 0s 0s 614932590e-09 1s 1s 614938550e-09 1s 1s 614941990e-09 0s 0s 614942830e-09 1s 1s 614948830e-09 1s 1s 614952230e-09 0s 0s 614953070e-09 1s 1s 614959110e-09 1s 1s 614962470e-09 0s 0s 614963310e-09 1s 1s 614969390e-09 1s 1s 614972710e-09 0s 0s 614973550e-09 1s 1s 614979670e-09 1s 1s 614982950e-09 0s 0s 614983790e-09 1s 1s 614989950e-09 1s 1s 614993190e-09 0s 0s 614994030e-09 1s 1s 615000230e-09 1s 1s 615003430e-09 0s 0s 615004270e-09 1s 1s 615010510e-09 1s 1s 615013670e-09 0s 0s 615014510e-09 1s 1s 615020790e-09 1s 1s 615023910e-09 0s 0s 615024750e-09 1s 1s 615031070e-09 1s 1s 615034150e-09 0s 0s 615034990e-09 1s 1s 615041350e-09 1s 1s 615044390e-09 0s 0s 615045230e-09 1s 1s 615051630e-09 1s 1s 615054630e-09 0s 0s 615055470e-09 1s 1s 615061910e-09 1s 1s 615064870e-09 0s 0s 615065710e-09 1s 1s 615072190e-09 1s 1s 615075110e-09 0s 0s 615075950e-09 1s 1s 615082470e-09 1s 1s 615085350e-09 0s 0s 615086190e-09 1s 1s 615092750e-09 1s 1s 615095590e-09 0s 0s 615096430e-09 1s 1s 615103030e-09 1s 1s 615105830e-09 0s 0s 615106670e-09 1s 1s 615113310e-09 1s 1s 615116070e-09 0s 0s 615116910e-09 1s 1s 615123590e-09 1s 1s 615126310e-09 0s 0s 615127150e-09 1s 1s 615133870e-09 1s 1s 615136550e-09 0s 0s 615137390e-09 1s 1s 615144150e-09 1s 1s 615146790e-09 0s 0s 615147630e-09 1s 1s 615154430e-09 1s 1s 615157030e-09 0s 0s 615157870e-09 1s 1s 615164710e-09 1s 1s 615167270e-09 0s 0s 615168110e-09 1s 1s 615174990e-09 1s 1s 615177510e-09 0s 0s 615178350e-09 1s 1s 615185270e-09 1s 1s 615187750e-09 0s 0s 615188590e-09 1s 1s 615195550e-09 1s 1s 615197990e-09 0s 0s 615198830e-09 1s 1s 615205830e-09 1s 1s 615208230e-09 0s 0s 615209070e-09 1s 1s 615216110e-09 1s 1s 615218470e-09 0s 0s 615219310e-09 1s 1s 615226390e-09 1s 1s 615228710e-09 0s 0s 615229550e-09 1s 1s 615236670e-09 1s 1s 615238950e-09 0s 0s 615239790e-09 1s 1s 615246950e-09 1s 1s 615249190e-09 0s 0s 615250030e-09 1s 1s 615257230e-09 1s 1s 615259430e-09 0s 0s 615260270e-09 1s 1s 615267510e-09 1s 1s 615269670e-09 0s 0s 615270510e-09 1s 1s 615277790e-09 1s 1s 615279910e-09 0s 0s 615280750e-09 1s 1s 615288070e-09 1s 1s 615290150e-09 0s 0s 615290990e-09 1s 1s 615298350e-09 1s 1s 615300390e-09 0s 0s 615301230e-09 1s 1s 615308630e-09 1s 1s 615310630e-09 0s 0s 615311470e-09 1s 1s 615318910e-09 1s 1s 615320870e-09 0s 0s 615321710e-09 1s 1s 615329190e-09 1s 1s 615331110e-09 0s 0s 615331950e-09 1s 1s 615339470e-09 1s 1s 615341350e-09 0s 0s 615342190e-09 1s 1s 615349750e-09 1s 1s 615351590e-09 0s 0s 615352430e-09 1s 1s 615360030e-09 1s 1s 615361830e-09 0s 0s 615362670e-09 1s 1s 615370310e-09 1s 1s 615372070e-09 0s 0s 615372910e-09 1s 1s 615380590e-09 1s 1s 615382310e-09 0s 0s 615383150e-09 1s 1s 615390870e-09 1s 1s 615392550e-09 0s 0s 615393390e-09 1s 1s 615401150e-09 1s 1s 615402790e-09 0s 0s 615403630e-09 1s 1s 615411430e-09 1s 1s 615413030e-09 0s 0s 615413870e-09 1s 1s 615421710e-09 1s 1s 615423270e-09 0s 0s 615424110e-09 1s 1s 615431990e-09 1s 1s 615433510e-09 0s 0s 615434350e-09 1s 1s 615442270e-09 1s 1s 615443750e-09 0s 0s 615444590e-09 1s 1s 615452550e-09 1s 1s 615453990e-09 0s 0s 615454830e-09 1s 1s 615462830e-09 1s 1s 615464230e-09 0s 0s 615465070e-09 1s 1s 615473110e-09 1s 1s 615474470e-09 0s 0s 615475310e-09 1s 1s 615483390e-09 1s 1s 615484710e-09 0s 0s 615485550e-09 1s 1s 615493670e-09 1s 1s 615494950e-09 0s 0s 615495790e-09 1s 1s 615503950e-09 1s 1s 615505190e-09 0s 0s 615506030e-09 1s 1s 615514230e-09 1s 1s 615515430e-09 0s 0s 615516270e-09 1s 1s 615524510e-09 1s 1s 615525670e-09 0s 0s 615526510e-09 1s 1s 615534790e-09 1s 1s 615535910e-09 0s 0s 615536750e-09 1s 1s 615545070e-09 1s 1s 615546150e-09 0s 0s 615546990e-09 1s 1s 615555350e-09 1s 1s 615556390e-09 0s 0s 615557230e-09 1s 1s 615565630e-09 1s 1s 615566630e-09 0s 0s 615567470e-09 1s 1s 615575910e-09 1s 1s 615576870e-09 0s 0s 615577710e-09 1s 1s 615586190e-09 1s 1s 615587110e-09 0s 0s 615587950e-09 1s 1s 615596470e-09 1s 1s 615597350e-09 0s 0s 615598190e-09 1s 1s 615606750e-09 1s 1s 615607590e-09 0s 0s 615608430e-09 1s 1s 615617030e-09 1s 1s 615617830e-09 0s 0s 615618670e-09 1s 1s 615627310e-09 1s 1s 615628070e-09 0s 0s 615628910e-09 1s 1s 615637590e-09 1s 1s 615638310e-09 0s 0s 615639150e-09 1s 1s 615647870e-09 1s 1s 615648550e-09 0s 0s 615649390e-09 1s 1s 615658150e-09 1s 1s 615658790e-09 0s 0s 615659630e-09 1s 1s 615668430e-09 1s 1s 615669030e-09 0s 0s 615669870e-09 1s 1s 615678710e-09 1s 1s 615679270e-09 0s 0s 615680110e-09 1s 1s 615688990e-09 1s 1s 615689510e-09 0s 0s 615690350e-09 1s 1s 615699270e-09 1s 1s 615699750e-09 0s 0s 615700590e-09 1s 1s 615709550e-09 1s 1s 615709990e-09 0s 0s 615710830e-09 1s 1s 615719830e-09 1s 1s 615720230e-09 0s 0s 615721070e-09 1s 1s 615730110e-09 1s 1s 615730470e-09 0s 0s 615731310e-09 1s 1s 615740390e-09 1s 1s 615740710e-09 0s 0s 615741550e-09 1s 1s 615750670e-09 1s 1s 615750950e-09 0s 0s 615751790e-09 1s 1s 615760950e-09 1s 1s 615761190e-09 0s 0s 615762030e-09 1s 1s 615771230e-09 1s 1s 615771430e-09 0s 0s 615772270e-09 1s 1s 615781510e-09 1s 1s 615781670e-09 0s 0s 615782510e-09 1s 1s 615791790e-09 1s 1s 615791910e-09 0s 0s 615792750e-09 1s 1s 615802070e-09 1s 1s 615802150e-09 0s 0s 615802990e-09 1s 1s 615812350e-09 1s 1s 615812390e-09 0s 0s 615813230e-09 1s 1s 615822630e-09 0s 0s 615823470e-09 1s 1s 615832870e-09 0s 0s 615832910e-09 0s 0s 615833710e-09 1s 1s 615843110e-09 0s 0s 615843190e-09 0s 0s 615843950e-09 1s 1s 615853350e-09 0s 0s 615853470e-09 0s 0s 615854190e-09 1s 1s 615863590e-09 0s 0s 615863750e-09 0s 0s 615864430e-09 1s 1s 615873830e-09 0s 0s 615874030e-09 0s 0s 615874670e-09 1s 1s 615884070e-09 0s 0s 615884310e-09 0s 0s 615884910e-09 1s 1s 615894310e-09 0s 0s 615894590e-09 0s 0s 615895150e-09 1s 1s 615904550e-09 0s 0s 615904870e-09 0s 0s 615905390e-09 1s 1s 615914790e-09 0s 0s 615915150e-09 0s 0s 615915630e-09 1s 1s 615925030e-09 0s 0s 615925430e-09 0s 0s 615925870e-09 1s 1s 615935270e-09 0s 0s 615935710e-09 0s 0s 615936110e-09 1s 1s 615945510e-09 0s 0s 615945990e-09 0s 0s 615946350e-09 1s 1s 615955750e-09 0s 0s 615956270e-09 0s 0s 615956590e-09 1s 1s 615965990e-09 0s 0s 615966550e-09 0s 0s 615966830e-09 1s 1s 615976230e-09 0s 0s 615976830e-09 0s 0s 615977070e-09 1s 1s 615986470e-09 0s 0s 615987110e-09 0s 0s 615987310e-09 1s 1s 615996710e-09 0s 0s 615997390e-09 0s 0s 615997550e-09 1s 1s 616006950e-09 0s 0s 616007670e-09 0s 0s 616007790e-09 1s 1s 616017190e-09 0s 0s 616017950e-09 0s 0s 616018030e-09 1s 1s 616027430e-09 0s 0s 616028230e-09 0s 0s 616028270e-09 1s 1s 616037670e-09 0s 0s 616038510e-09 1s 1s 616038550e-09 1s 1s 616047950e-09 0s 0s 616048750e-09 1s 1s 616048830e-09 1s 1s 616058190e-09 0s 0s 616058990e-09 1s 1s 616059110e-09 1s 1s 616068430e-09 0s 0s 616069230e-09 1s 1s 616069390e-09 1s 1s 616078670e-09 0s 0s 616079470e-09 1s 1s 616079670e-09 1s 1s 616088910e-09 0s 0s 616089710e-09 1s 1s 616089950e-09 1s 1s 616099150e-09 0s 0s 616099950e-09 1s 1s 616100230e-09 1s 1s 616109390e-09 0s 0s 616110190e-09 1s 1s 616110510e-09 1s 1s 616119630e-09 0s 0s 616120430e-09 1s 1s 616120790e-09 1s 1s 616129870e-09 0s 0s 616130670e-09 1s 1s 616131070e-09 1s 1s 616140110e-09 0s 0s 616140910e-09 1s 1s 616141350e-09 1s 1s 616150350e-09 0s 0s 616151150e-09 1s 1s 616151630e-09 1s 1s 616160590e-09 0s 0s 616161390e-09 1s 1s 616161910e-09 1s 1s 616170830e-09 0s 0s 616171630e-09 1s 1s 616172190e-09 1s 1s 616181070e-09 0s 0s 616181870e-09 1s 1s 616182470e-09 1s 1s 616191310e-09 0s 0s 616192110e-09 1s 1s 616192750e-09 1s 1s 616201550e-09 0s 0s 616202350e-09 1s 1s 616203030e-09 1s 1s 616211790e-09 0s 0s 616212590e-09 1s 1s 616213310e-09 1s 1s 616222030e-09 0s 0s 616222830e-09 1s 1s 616223590e-09 1s 1s 616232270e-09 0s 0s 616233070e-09 1s 1s 616233870e-09 1s 1s 616242510e-09 0s 0s 616243310e-09 1s 1s 616244150e-09 1s 1s 616252750e-09 0s 0s 616253550e-09 1s 1s 616254430e-09 1s 1s 616262990e-09 0s 0s 616263790e-09 1s 1s 616264710e-09 1s 1s 616273230e-09 0s 0s 616274030e-09 1s 1s 616274990e-09 1s 1s 616283470e-09 0s 0s 616284270e-09 1s 1s 616285270e-09 1s 1s 616293710e-09 0s 0s 616294510e-09 1s 1s 616295550e-09 1s 1s 616303950e-09 0s 0s 616304750e-09 1s 1s 616305830e-09 1s 1s 616314190e-09 0s 0s 616314990e-09 1s 1s 616316110e-09 1s 1s 616324430e-09 0s 0s 616325230e-09 1s 1s 616326390e-09 1s 1s 616334670e-09 0s 0s 616335470e-09 1s 1s 616336670e-09 1s 1s 616344910e-09 0s 0s 616345710e-09 1s 1s 616346950e-09 1s 1s 616355150e-09 0s 0s 616355950e-09 1s 1s 616357230e-09 1s 1s 616365390e-09 0s 0s 616366190e-09 1s 1s 616367510e-09 1s 1s 616375630e-09 0s 0s 616376430e-09 1s 1s 616377790e-09 1s 1s 616385870e-09 0s 0s 616386670e-09 1s 1s 616388070e-09 1s 1s 616396110e-09 0s 0s 616396910e-09 1s 1s 616398350e-09 1s 1s 616406350e-09 0s 0s 616407150e-09 1s 1s 616408630e-09 1s 1s 616416590e-09 0s 0s 616417390e-09 1s 1s 616418910e-09 1s 1s 616426830e-09 0s 0s 616427630e-09 1s 1s 616429190e-09 1s 1s 616437070e-09 0s 0s 616437870e-09 1s 1s 616439470e-09 1s 1s 616447310e-09 0s 0s 616448110e-09 1s 1s 616449750e-09 1s 1s 616457550e-09 0s 0s 616458350e-09 1s 1s 616460030e-09 1s 1s 616467790e-09 0s 0s 616468590e-09 1s 1s 616470310e-09 1s 1s 616478030e-09 0s 0s 616478830e-09 1s 1s 616480590e-09 1s 1s 616488270e-09 0s 0s 616489070e-09 1s 1s 616490870e-09 1s 1s 616498510e-09 0s 0s 616499310e-09 1s 1s 616501150e-09 1s 1s 616508750e-09 0s 0s 616509550e-09 1s 1s 616511430e-09 1s 1s 616518990e-09 0s 0s 616519790e-09 1s 1s 616521710e-09 1s 1s 616529230e-09 0s 0s 616530030e-09 1s 1s 616531990e-09 1s 1s 616539470e-09 0s 0s 616540270e-09 1s 1s 616542270e-09 1s 1s 616549710e-09 0s 0s 616550510e-09 1s 1s 616552550e-09 1s 1s 616559950e-09 0s 0s 616560750e-09 1s 1s 616562830e-09 1s 1s 616570190e-09 0s 0s 616570990e-09 1s 1s 616573110e-09 1s 1s 616580430e-09 0s 0s 616581230e-09 1s 1s 616583390e-09 1s 1s 616590670e-09 0s 0s 616591470e-09 1s 1s 616593670e-09 1s 1s 616600910e-09 0s 0s 616601710e-09 1s 1s 616603950e-09 1s 1s 616611150e-09 0s 0s 616611950e-09 1s 1s 616614230e-09 1s 1s 616621390e-09 0s 0s 616622190e-09 1s 1s 616624510e-09 1s 1s 616631630e-09 0s 0s 616632430e-09 1s 1s 616634790e-09 1s 1s 616641870e-09 0s 0s 616642670e-09 1s 1s 616645070e-09 1s 1s 616652110e-09 0s 0s 616652910e-09 1s 1s 616655350e-09 1s 1s 616662350e-09 0s 0s 616663150e-09 1s 1s 616665630e-09 1s 1s 616672590e-09 0s 0s 616673390e-09 1s 1s 616675910e-09 1s 1s 616682830e-09 0s 0s 616683630e-09 1s 1s 616686190e-09 1s 1s 616693070e-09 0s 0s 616693870e-09 1s 1s 616696470e-09 1s 1s 616703310e-09 0s 0s 616704110e-09 1s 1s 616706750e-09 1s 1s 616713550e-09 0s 0s 616714350e-09 1s 1s 616717030e-09 1s 1s 616723790e-09 0s 0s 616724590e-09 1s 1s 616727310e-09 1s 1s 616734030e-09 0s 0s 616734830e-09 1s 1s 616737590e-09 1s 1s 616744270e-09 0s 0s 616745070e-09 1s 1s 616747870e-09 1s 1s 616754510e-09 0s 0s 616755310e-09 1s 1s 616758150e-09 1s 1s 616764750e-09 0s 0s 616765550e-09 1s 1s 616768430e-09 1s 1s 616774990e-09 0s 0s 616775790e-09 1s 1s 616778710e-09 1s 1s 616785230e-09 0s 0s 616786030e-09 1s 1s 616788990e-09 1s 1s 616795470e-09 0s 0s 616796270e-09 1s 1s 616799270e-09 1s 1s 616805710e-09 0s 0s 616806510e-09 1s 1s 616809550e-09 1s 1s 616815950e-09 0s 0s 616816750e-09 1s 1s 616819830e-09 1s 1s 616826190e-09 0s 0s 616826990e-09 1s 1s 616830110e-09 1s 1s 616836430e-09 0s 0s 616837230e-09 1s 1s 616840390e-09 1s 1s 616846670e-09 0s 0s 616847470e-09 1s 1s 616850670e-09 1s 1s 616856910e-09 0s 0s 616857710e-09 1s 1s 616860950e-09 1s 1s 616867150e-09 0s 0s 616867950e-09 1s 1s 616871230e-09 1s 1s 616877390e-09 0s 0s 616878190e-09 1s 1s 616881510e-09 1s 1s 616887630e-09 0s 0s 616888430e-09 1s 1s 616891790e-09 1s 1s 616897870e-09 0s 0s 616898670e-09 1s 1s 616902070e-09 1s 1s 616908110e-09 0s 0s 616908910e-09 1s 1s 616912350e-09 1s 1s 616918350e-09 0s 0s 616919150e-09 1s 1s 616922630e-09 1s 1s 616928590e-09 0s 0s 616929390e-09 1s 1s 616932910e-09 1s 1s 616938830e-09 0s 0s 616939630e-09 1s 1s 616943190e-09 1s 1s 616949070e-09 0s 0s 616949870e-09 1s 1s 616953470e-09 1s 1s 616959310e-09 0s 0s 616960110e-09 1s 1s 616963750e-09 1s 1s 616969550e-09 0s 0s 616970350e-09 1s 1s 616974030e-09 1s 1s 616979790e-09 0s 0s 616980590e-09 1s 1s 616984310e-09 1s 1s 616990030e-09 0s 0s 616990830e-09 1s 1s 616994590e-09 1s 1s 617000270e-09 0s 0s 617001070e-09 1s 1s 617004870e-09 1s 1s 617010510e-09 0s 0s 617011310e-09 1s 1s 617015150e-09 1s 1s 617020750e-09 0s 0s 617021550e-09 1s 1s 617025430e-09 1s 1s 617030990e-09 0s 0s 617031790e-09 1s 1s 617035710e-09 1s 1s 617041230e-09 0s 0s 617042030e-09 1s 1s 617045990e-09 1s 1s 617051470e-09 0s 0s 617052270e-09 1s 1s 617056270e-09 1s 1s 617061710e-09 0s 0s 617062510e-09 1s 1s 617066550e-09 1s 1s 617071950e-09 0s 0s 617072750e-09 1s 1s 617076830e-09 1s 1s 617082190e-09 0s 0s 617082990e-09 1s 1s 617087110e-09 1s 1s 617092430e-09 0s 0s 617093230e-09 1s 1s 617097390e-09 1s 1s 617102670e-09 0s 0s 617103470e-09 1s 1s 617107670e-09 1s 1s 617112910e-09 0s 0s 617113710e-09 1s 1s 617117950e-09 1s 1s 617123150e-09 0s 0s 617123950e-09 1s 1s 617128230e-09 1s 1s 617133390e-09 0s 0s 617134190e-09 1s 1s 617138510e-09 1s 1s 617143630e-09 0s 0s 617144430e-09 1s 1s 617148790e-09 1s 1s 617153870e-09 0s 0s 617154670e-09 1s 1s 617159070e-09 1s 1s 617164110e-09 0s 0s 617164910e-09 1s 1s 617169350e-09 1s 1s 617174350e-09 0s 0s 617175150e-09 1s 1s 617179630e-09 1s 1s 617184590e-09 0s 0s 617185390e-09 1s 1s 617189910e-09 1s 1s 617194830e-09 0s 0s 617195630e-09 1s 1s 617200190e-09 1s 1s 617205070e-09 0s 0s 617205870e-09 1s 1s 617210470e-09 1s 1s 617215310e-09 0s 0s 617216110e-09 1s 1s 617220750e-09 1s 1s 617225550e-09 0s 0s 617226350e-09 1s 1s 617231030e-09 1s 1s 617235790e-09 0s 0s 617236590e-09 1s 1s 617241310e-09 1s 1s 617246030e-09 0s 0s 617246830e-09 1s 1s 617251590e-09 1s 1s 617256270e-09 0s 0s 617257070e-09 1s 1s 617261870e-09 1s 1s 617266510e-09 0s 0s 617267310e-09 1s 1s 617272150e-09 1s 1s 617276750e-09 0s 0s 617277550e-09 1s 1s 617282430e-09 1s 1s 617286990e-09 0s 0s 617287790e-09 1s 1s 617292710e-09 1s 1s 617297230e-09 0s 0s 617298030e-09 1s 1s 617302990e-09 1s 1s 617307470e-09 0s 0s 617308270e-09 1s 1s 617313270e-09 1s 1s 617317710e-09 0s 0s 617318510e-09 1s 1s 617323550e-09 1s 1s 617327950e-09 0s 0s 617328750e-09 1s 1s 617333830e-09 1s 1s 617338190e-09 0s 0s 617338990e-09 1s 1s 617344110e-09 1s 1s 617348430e-09 0s 0s 617349230e-09 1s 1s 617354390e-09 1s 1s 617358670e-09 0s 0s 617359470e-09 1s 1s 617364670e-09 1s 1s 617368910e-09 0s 0s 617369710e-09 1s 1s 617374950e-09 1s 1s 617379150e-09 0s 0s 617379950e-09 1s 1s 617385230e-09 1s 1s 617389390e-09 0s 0s 617390190e-09 1s 1s 617395510e-09 1s 1s 617399630e-09 0s 0s 617400430e-09 1s 1s 617405790e-09 1s 1s 617409870e-09 0s 0s 617410670e-09 1s 1s 617416070e-09 1s 1s 617420110e-09 0s 0s 617420910e-09 1s 1s 617426350e-09 1s 1s 617430350e-09 0s 0s 617431150e-09 1s 1s 617436630e-09 1s 1s 617440590e-09 0s 0s 617441390e-09 1s 1s 617446910e-09 1s 1s 617450830e-09 0s 0s 617451630e-09 1s 1s 617457190e-09 1s 1s 617461070e-09 0s 0s 617461870e-09 1s 1s 617467470e-09 1s 1s 617471310e-09 0s 0s 617472110e-09 1s 1s 617477750e-09 1s 1s 617481550e-09 0s 0s 617482350e-09 1s 1s 617488030e-09 1s 1s 617491790e-09 0s 0s 617492590e-09 1s 1s 617498310e-09 1s 1s 617502030e-09 0s 0s 617502830e-09 1s 1s 617508590e-09 1s 1s 617512270e-09 0s 0s 617513070e-09 1s 1s 617518870e-09 1s 1s 617522510e-09 0s 0s 617523310e-09 1s 1s 617529150e-09 1s 1s 617532750e-09 0s 0s 617533550e-09 1s 1s 617539430e-09 1s 1s 617542990e-09 0s 0s 617543790e-09 1s 1s 617549710e-09 1s 1s 617553230e-09 0s 0s 617554030e-09 1s 1s 617559990e-09 1s 1s 617563470e-09 0s 0s 617564270e-09 1s 1s 617570270e-09 1s 1s 617573710e-09 0s 0s 617574510e-09 1s 1s 617580550e-09 1s 1s 617583950e-09 0s 0s 617584750e-09 1s 1s 617590830e-09 1s 1s 617594190e-09 0s 0s 617594990e-09 1s 1s 617601110e-09 1s 1s 617604430e-09 0s 0s 617605230e-09 1s 1s 617611390e-09 1s 1s 617614670e-09 0s 0s 617615470e-09 1s 1s 617621670e-09 1s 1s 617624910e-09 0s 0s 617625710e-09 1s 1s 617631950e-09 1s 1s 617635150e-09 0s 0s 617635950e-09 1s 1s 617642230e-09 1s 1s 617645390e-09 0s 0s 617646190e-09 1s 1s 617652510e-09 1s 1s 617655630e-09 0s 0s 617656430e-09 1s 1s 617662790e-09 1s 1s 617665870e-09 0s 0s 617666670e-09 1s 1s 617673070e-09 1s 1s 617676110e-09 0s 0s 617676910e-09 1s 1s 617683350e-09 1s 1s 617686350e-09 0s 0s 617687150e-09 1s 1s 617693630e-09 1s 1s 617696590e-09 0s 0s 617697390e-09 1s 1s 617703910e-09 1s 1s 617706830e-09 0s 0s 617707630e-09 1s 1s 617714190e-09 1s 1s 617717070e-09 0s 0s 617717870e-09 1s 1s 617724470e-09 1s 1s 617727310e-09 0s 0s 617728110e-09 1s 1s 617734750e-09 1s 1s 617737550e-09 0s 0s 617738350e-09 1s 1s 617745030e-09 1s 1s 617747790e-09 0s 0s 617748590e-09 1s 1s 617755310e-09 1s 1s 617758030e-09 0s 0s 617758830e-09 1s 1s 617765590e-09 1s 1s 617768270e-09 0s 0s 617769070e-09 1s 1s 617775870e-09 1s 1s 617778510e-09 0s 0s 617779310e-09 1s 1s 617786150e-09 1s 1s 617788750e-09 0s 0s 617789550e-09 1s 1s 617796430e-09 1s 1s 617798990e-09 0s 0s 617799790e-09 1s 1s 617806710e-09 1s 1s 617809230e-09 0s 0s 617810030e-09 1s 1s 617816990e-09 1s 1s 617819470e-09 0s 0s 617820270e-09 1s 1s 617827270e-09 1s 1s 617829710e-09 0s 0s 617830510e-09 1s 1s 617837550e-09 1s 1s 617839950e-09 0s 0s 617840750e-09 1s 1s 617847830e-09 1s 1s 617850190e-09 0s 0s 617850990e-09 1s 1s 617858110e-09 1s 1s 617860430e-09 0s 0s 617861230e-09 1s 1s 617868390e-09 1s 1s 617870670e-09 0s 0s 617871470e-09 1s 1s 617878670e-09 1s 1s 617880910e-09 0s 0s 617881710e-09 1s 1s 617888950e-09 1s 1s 617891150e-09 0s 0s 617891950e-09 1s 1s 617899230e-09 1s 1s 617901390e-09 0s 0s 617902190e-09 1s 1s 617909510e-09 1s 1s 617911630e-09 0s 0s 617912430e-09 1s 1s 617919790e-09 1s 1s 617921870e-09 0s 0s 617922670e-09 1s 1s 617930070e-09 1s 1s 617932110e-09 0s 0s 617932910e-09 1s 1s 617940350e-09 1s 1s 617942350e-09 0s 0s 617943150e-09 1s 1s 617950630e-09 1s 1s 617952590e-09 0s 0s 617953390e-09 1s 1s 617960910e-09 1s 1s 617962830e-09 0s 0s 617963630e-09 1s 1s 617971190e-09 1s 1s 617973070e-09 0s 0s 617973870e-09 1s 1s 617981470e-09 1s 1s 617983310e-09 0s 0s 617984110e-09 1s 1s 617991750e-09 1s 1s 617993550e-09 0s 0s 617994350e-09 1s 1s 618002030e-09 1s 1s 618003790e-09 0s 0s 618004590e-09 1s 1s 618012310e-09 1s 1s 618014030e-09 0s 0s 618014830e-09 1s 1s 618022590e-09 1s 1s 618024270e-09 0s 0s 618025070e-09 1s 1s 618032870e-09 1s 1s 618034510e-09 0s 0s 618035310e-09 1s 1s 618043150e-09 1s 1s 618044750e-09 0s 0s 618045550e-09 1s 1s 618053430e-09 1s 1s 618054990e-09 0s 0s 618055790e-09 1s 1s 618063710e-09 1s 1s 618065230e-09 0s 0s 618066030e-09 1s 1s 618073990e-09 1s 1s 618075470e-09 0s 0s 618076270e-09 1s 1s 618084270e-09 1s 1s 618085710e-09 0s 0s 618086510e-09 1s 1s 618094550e-09 1s 1s 618095950e-09 0s 0s 618096750e-09 1s 1s 618104830e-09 1s 1s 618106190e-09 0s 0s 618106990e-09 1s 1s 618115110e-09 1s 1s 618116430e-09 0s 0s 618117230e-09 1s 1s 618125390e-09 1s 1s 618126670e-09 0s 0s 618127470e-09 1s 1s 618135670e-09 1s 1s 618136910e-09 0s 0s 618137710e-09 1s 1s 618145950e-09 1s 1s 618147150e-09 0s 0s 618147950e-09 1s 1s 618156230e-09 1s 1s 618157390e-09 0s 0s 618158190e-09 1s 1s 618166510e-09 1s 1s 618167630e-09 0s 0s 618168430e-09 1s 1s 618176790e-09 1s 1s 618177870e-09 0s 0s 618178670e-09 1s 1s 618187070e-09 1s 1s 618188110e-09 0s 0s 618188910e-09 1s 1s 618197350e-09 1s 1s 618198350e-09 0s 0s 618199150e-09 1s 1s 618207630e-09 1s 1s 618208590e-09 0s 0s 618209390e-09 1s 1s 618217910e-09 1s 1s 618218830e-09 0s 0s 618219630e-09 1s 1s 618228190e-09 1s 1s 618229070e-09 0s 0s 618229870e-09 1s 1s 618238470e-09 1s 1s 618239310e-09 0s 0s 618240110e-09 1s 1s 618248750e-09 1s 1s 618249550e-09 0s 0s 618250350e-09 1s 1s 618259030e-09 1s 1s 618259790e-09 0s 0s 618260590e-09 1s 1s 618269310e-09 1s 1s 618270030e-09 0s 0s 618270830e-09 1s 1s 618279590e-09 1s 1s 618280270e-09 0s 0s 618281070e-09 1s 1s 618289870e-09 1s 1s 618290510e-09 0s 0s 618291310e-09 1s 1s 618300150e-09 1s 1s 618300750e-09 0s 0s 618301550e-09 1s 1s 618310430e-09 1s 1s 618310990e-09 0s 0s 618311790e-09 1s 1s 618320710e-09 1s 1s 618321230e-09 0s 0s 618322030e-09 1s 1s 618330990e-09 1s 1s 618331470e-09 0s 0s 618332270e-09 1s 1s 618341270e-09 1s 1s 618341710e-09 0s 0s 618342510e-09 1s 1s 618351550e-09 1s 1s 618351950e-09 0s 0s 618352750e-09 1s 1s 618361830e-09 1s 1s 618362190e-09 0s 0s 618362990e-09 1s 1s 618372110e-09 1s 1s 618372430e-09 0s 0s 618373230e-09 1s 1s 618382390e-09 1s 1s 618382670e-09 0s 0s 618383470e-09 1s 1s 618392670e-09 1s 1s 618392910e-09 0s 0s 618393710e-09 1s 1s 618402950e-09 1s 1s 618403150e-09 0s 0s 618403950e-09 1s 1s 618413230e-09 1s 1s 618413390e-09 0s 0s 618414190e-09 1s 1s 618423510e-09 1s 1s 618423630e-09 0s 0s 618424430e-09 1s 1s 618433790e-09 1s 1s 618433870e-09 0s 0s 618434670e-09 1s 1s 618444070e-09 1s 1s 618444110e-09 0s 0s 618444910e-09 1s 1s 618454350e-09 0s 0s 618455150e-09 1s 1s 618464590e-09 0s 0s 618464630e-09 0s 0s 618465390e-09 1s 1s 618474830e-09 0s 0s 618474910e-09 0s 0s 618475630e-09 1s 1s 618485070e-09 0s 0s 618485190e-09 0s 0s 618485870e-09 1s 1s 618495310e-09 0s 0s 618495470e-09 0s 0s 618496110e-09 1s 1s 618505550e-09 0s 0s 618505750e-09 0s 0s 618506350e-09 1s 1s 618515790e-09 0s 0s 618516030e-09 0s 0s 618516590e-09 1s 1s 618526030e-09 0s 0s 618526310e-09 0s 0s 618526830e-09 1s 1s 618536270e-09 0s 0s 618536590e-09 0s 0s 618537070e-09 1s 1s 618546510e-09 0s 0s 618546870e-09 0s 0s 618547310e-09 1s 1s 618556750e-09 0s 0s 618557150e-09 0s 0s 618557550e-09 1s 1s 618566990e-09 0s 0s 618567430e-09 0s 0s 618567790e-09 1s 1s 618577230e-09 0s 0s 618577710e-09 0s 0s 618578030e-09 1s 1s 618587470e-09 0s 0s 618587990e-09 0s 0s 618588270e-09 1s 1s 618597710e-09 0s 0s 618598270e-09 0s 0s 618598510e-09 1s 1s 618607950e-09 0s 0s 618608550e-09 0s 0s 618608750e-09 1s 1s 618618190e-09 0s 0s 618618830e-09 0s 0s 618618990e-09 1s 1s 618628430e-09 0s 0s 618629110e-09 0s 0s 618629230e-09 1s 1s 618638670e-09 0s 0s 618639390e-09 0s 0s 618639470e-09 1s 1s 618648910e-09 0s 0s 618649670e-09 0s 0s 618649710e-09 1s 1s 618659150e-09 0s 0s 618659950e-09 1s 1s 618659990e-09 1s 1s 618669430e-09 0s 0s 618670190e-09 1s 1s 618670270e-09 1s 1s 618679670e-09 0s 0s 618680430e-09 1s 1s 618680550e-09 1s 1s 618689910e-09 0s 0s 618690670e-09 1s 1s 618690830e-09 1s 1s 618700150e-09 0s 0s 618700910e-09 1s 1s 618701110e-09 1s 1s 618710390e-09 0s 0s 618711150e-09 1s 1s 618711390e-09 1s 1s 618720630e-09 0s 0s 618721390e-09 1s 1s 618721670e-09 1s 1s 618730870e-09 0s 0s 618731630e-09 1s 1s 618731950e-09 1s 1s 618741110e-09 0s 0s 618741870e-09 1s 1s 618742230e-09 1s 1s 618751350e-09 0s 0s 618752110e-09 1s 1s 618752510e-09 1s 1s 618761590e-09 0s 0s 618762350e-09 1s 1s 618762790e-09 1s 1s 618771830e-09 0s 0s 618772590e-09 1s 1s 618773070e-09 1s 1s 618782070e-09 0s 0s 618782830e-09 1s 1s 618783350e-09 1s 1s 618792310e-09 0s 0s 618793070e-09 1s 1s 618793630e-09 1s 1s 618802550e-09 0s 0s 618803310e-09 1s 1s 618803910e-09 1s 1s 618812790e-09 0s 0s 618813550e-09 1s 1s 618814190e-09 1s 1s 618823030e-09 0s 0s 618823790e-09 1s 1s 618824470e-09 1s 1s 618833270e-09 0s 0s 618834030e-09 1s 1s 618834750e-09 1s 1s 618843510e-09 0s 0s 618844270e-09 1s 1s 618845030e-09 1s 1s 618853750e-09 0s 0s 618854510e-09 1s 1s 618855310e-09 1s 1s 618863990e-09 0s 0s 618864750e-09 1s 1s 618865590e-09 1s 1s 618874230e-09 0s 0s 618874990e-09 1s 1s 618875870e-09 1s 1s 618884470e-09 0s 0s 618885230e-09 1s 1s 618886150e-09 1s 1s 618894710e-09 0s 0s 618895470e-09 1s 1s 618896430e-09 1s 1s 618904950e-09 0s 0s 618905710e-09 1s 1s 618906710e-09 1s 1s 618915190e-09 0s 0s 618915950e-09 1s 1s 618916990e-09 1s 1s 618925430e-09 0s 0s 618926190e-09 1s 1s 618927270e-09 1s 1s 618935670e-09 0s 0s 618936430e-09 1s 1s 618937550e-09 1s 1s 618945910e-09 0s 0s 618946670e-09 1s 1s 618947830e-09 1s 1s 618956150e-09 0s 0s 618956910e-09 1s 1s 618958110e-09 1s 1s 618966390e-09 0s 0s 618967150e-09 1s 1s 618968390e-09 1s 1s 618976630e-09 0s 0s 618977390e-09 1s 1s 618978670e-09 1s 1s 618986870e-09 0s 0s 618987630e-09 1s 1s 618988950e-09 1s 1s 618997110e-09 0s 0s 618997870e-09 1s 1s 618999230e-09 1s 1s 619007350e-09 0s 0s 619008110e-09 1s 1s 619009510e-09 1s 1s 619017590e-09 0s 0s 619018350e-09 1s 1s 619019790e-09 1s 1s 619027830e-09 0s 0s 619028590e-09 1s 1s 619030070e-09 1s 1s 619038070e-09 0s 0s 619038830e-09 1s 1s 619040350e-09 1s 1s 619048310e-09 0s 0s 619049070e-09 1s 1s 619050630e-09 1s 1s 619058550e-09 0s 0s 619059310e-09 1s 1s 619060910e-09 1s 1s 619068790e-09 0s 0s 619069550e-09 1s 1s 619071190e-09 1s 1s 619079030e-09 0s 0s 619079790e-09 1s 1s 619081470e-09 1s 1s 619089270e-09 0s 0s 619090030e-09 1s 1s 619091750e-09 1s 1s 619099510e-09 0s 0s 619100270e-09 1s 1s 619102030e-09 1s 1s 619109750e-09 0s 0s 619110510e-09 1s 1s 619112310e-09 1s 1s 619119990e-09 0s 0s 619120750e-09 1s 1s 619122590e-09 1s 1s 619130230e-09 0s 0s 619130990e-09 1s 1s 619132870e-09 1s 1s 619140470e-09 0s 0s 619141230e-09 1s 1s 619143150e-09 1s 1s 619150710e-09 0s 0s 619151470e-09 1s 1s 619153430e-09 1s 1s 619160950e-09 0s 0s 619161710e-09 1s 1s 619163710e-09 1s 1s 619171190e-09 0s 0s 619171950e-09 1s 1s 619173990e-09 1s 1s 619181430e-09 0s 0s 619182190e-09 1s 1s 619184270e-09 1s 1s 619191670e-09 0s 0s 619192430e-09 1s 1s 619194550e-09 1s 1s 619201910e-09 0s 0s 619202670e-09 1s 1s 619204830e-09 1s 1s 619212150e-09 0s 0s 619212910e-09 1s 1s 619215110e-09 1s 1s 619222390e-09 0s 0s 619223150e-09 1s 1s 619225390e-09 1s 1s 619232630e-09 0s 0s 619233390e-09 1s 1s 619235670e-09 1s 1s 619242870e-09 0s 0s 619243630e-09 1s 1s 619245950e-09 1s 1s 619253110e-09 0s 0s 619253870e-09 1s 1s 619256230e-09 1s 1s 619263350e-09 0s 0s 619264110e-09 1s 1s 619266510e-09 1s 1s 619273590e-09 0s 0s 619274350e-09 1s 1s 619276790e-09 1s 1s 619283830e-09 0s 0s 619284590e-09 1s 1s 619287070e-09 1s 1s 619294070e-09 0s 0s 619294830e-09 1s 1s 619297350e-09 1s 1s 619304310e-09 0s 0s 619305070e-09 1s 1s 619307630e-09 1s 1s 619314550e-09 0s 0s 619315310e-09 1s 1s 619317910e-09 1s 1s 619324790e-09 0s 0s 619325550e-09 1s 1s 619328190e-09 1s 1s 619335030e-09 0s 0s 619335790e-09 1s 1s 619338470e-09 1s 1s 619345270e-09 0s 0s 619346030e-09 1s 1s 619348750e-09 1s 1s 619355510e-09 0s 0s 619356270e-09 1s 1s 619359030e-09 1s 1s 619365750e-09 0s 0s 619366510e-09 1s 1s 619369310e-09 1s 1s 619375990e-09 0s 0s 619376750e-09 1s 1s 619379590e-09 1s 1s 619386230e-09 0s 0s 619386990e-09 1s 1s 619389870e-09 1s 1s 619396470e-09 0s 0s 619397230e-09 1s 1s 619400150e-09 1s 1s 619406710e-09 0s 0s 619407470e-09 1s 1s 619410430e-09 1s 1s 619416950e-09 0s 0s 619417710e-09 1s 1s 619420710e-09 1s 1s 619427190e-09 0s 0s 619427950e-09 1s 1s 619430990e-09 1s 1s 619437430e-09 0s 0s 619438190e-09 1s 1s 619441270e-09 1s 1s 619447670e-09 0s 0s 619448430e-09 1s 1s 619451550e-09 1s 1s 619457910e-09 0s 0s 619458670e-09 1s 1s 619461830e-09 1s 1s 619468150e-09 0s 0s 619468910e-09 1s 1s 619472110e-09 1s 1s 619478390e-09 0s 0s 619479150e-09 1s 1s 619482390e-09 1s 1s 619488630e-09 0s 0s 619489390e-09 1s 1s 619492670e-09 1s 1s 619498870e-09 0s 0s 619499630e-09 1s 1s 619502950e-09 1s 1s 619509110e-09 0s 0s 619509870e-09 1s 1s 619513230e-09 1s 1s 619519350e-09 0s 0s 619520110e-09 1s 1s 619523510e-09 1s 1s 619529590e-09 0s 0s 619530350e-09 1s 1s 619533790e-09 1s 1s 619539830e-09 0s 0s 619540590e-09 1s 1s 619544070e-09 1s 1s 619550070e-09 0s 0s 619550830e-09 1s 1s 619554350e-09 1s 1s 619560310e-09 0s 0s 619561070e-09 1s 1s 619564630e-09 1s 1s 619570550e-09 0s 0s 619571310e-09 1s 1s 619574910e-09 1s 1s 619580790e-09 0s 0s 619581550e-09 1s 1s 619585190e-09 1s 1s 619591030e-09 0s 0s 619591790e-09 1s 1s 619595470e-09 1s 1s 619601270e-09 0s 0s 619602030e-09 1s 1s 619605750e-09 1s 1s 619611510e-09 0s 0s 619612270e-09 1s 1s 619616030e-09 1s 1s 619621750e-09 0s 0s 619622510e-09 1s 1s 619626310e-09 1s 1s 619631990e-09 0s 0s 619632750e-09 1s 1s 619636590e-09 1s 1s 619642230e-09 0s 0s 619642990e-09 1s 1s 619646870e-09 1s 1s 619652470e-09 0s 0s 619653230e-09 1s 1s 619657150e-09 1s 1s 619662710e-09 0s 0s 619663470e-09 1s 1s 619667430e-09 1s 1s 619672950e-09 0s 0s 619673710e-09 1s 1s 619677710e-09 1s 1s 619683190e-09 0s 0s 619683950e-09 1s 1s 619687990e-09 1s 1s 619693430e-09 0s 0s 619694190e-09 1s 1s 619698270e-09 1s 1s 619703670e-09 0s 0s 619704430e-09 1s 1s 619708550e-09 1s 1s 619713910e-09 0s 0s 619714670e-09 1s 1s 619718830e-09 1s 1s 619724150e-09 0s 0s 619724910e-09 1s 1s 619729110e-09 1s 1s 619734390e-09 0s 0s 619735150e-09 1s 1s 619739390e-09 1s 1s 619744630e-09 0s 0s 619745390e-09 1s 1s 619749670e-09 1s 1s 619754870e-09 0s 0s 619755630e-09 1s 1s 619759950e-09 1s 1s 619765110e-09 0s 0s 619765870e-09 1s 1s 619770230e-09 1s 1s 619775350e-09 0s 0s 619776110e-09 1s 1s 619780510e-09 1s 1s 619785590e-09 0s 0s 619786350e-09 1s 1s 619790790e-09 1s 1s 619795830e-09 0s 0s 619796590e-09 1s 1s 619801070e-09 1s 1s 619806070e-09 0s 0s 619806830e-09 1s 1s 619811350e-09 1s 1s 619816310e-09 0s 0s 619817070e-09 1s 1s 619821630e-09 1s 1s 619826550e-09 0s 0s 619827310e-09 1s 1s 619831910e-09 1s 1s 619836790e-09 0s 0s 619837550e-09 1s 1s 619842190e-09 1s 1s 619847030e-09 0s 0s 619847790e-09 1s 1s 619852470e-09 1s 1s 619857270e-09 0s 0s 619858030e-09 1s 1s 619862750e-09 1s 1s 619867510e-09 0s 0s 619868270e-09 1s 1s 619873030e-09 1s 1s 619877750e-09 0s 0s 619878510e-09 1s 1s 619883310e-09 1s 1s 619887990e-09 0s 0s 619888750e-09 1s 1s 619893590e-09 1s 1s 619898230e-09 0s 0s 619898990e-09 1s 1s 619903870e-09 1s 1s 619908470e-09 0s 0s 619909230e-09 1s 1s 619914150e-09 1s 1s 619918710e-09 0s 0s 619919470e-09 1s 1s 619924430e-09 1s 1s 619928950e-09 0s 0s 619929710e-09 1s 1s 619934710e-09 1s 1s 619939190e-09 0s 0s 619939950e-09 1s 1s 619944990e-09 1s 1s 619949430e-09 0s 0s 619950190e-09 1s 1s 619955270e-09 1s 1s 619959670e-09 0s 0s 619960430e-09 1s 1s 619965550e-09 1s 1s 619969910e-09 0s 0s 619970670e-09 1s 1s 619975830e-09 1s 1s 619980150e-09 0s 0s 619980910e-09 1s 1s 619986110e-09 1s 1s 619990390e-09 0s 0s 619991150e-09 1s 1s 619996390e-09 1s 1s 620000630e-09 0s 0s 620001390e-09 1s 1s 620006670e-09 1s 1s 620010870e-09 0s 0s 620011630e-09 1s 1s 620016950e-09 1s 1s 620021110e-09 0s 0s 620021870e-09 1s 1s 620027230e-09 1s 1s 620031350e-09 0s 0s 620032110e-09 1s 1s 620037510e-09 1s 1s 620041590e-09 0s 0s 620042350e-09 1s 1s 620047790e-09 1s 1s 620051830e-09 0s 0s 620052590e-09 1s 1s 620058070e-09 1s 1s 620062070e-09 0s 0s 620062830e-09 1s 1s 620068350e-09 1s 1s 620072310e-09 0s 0s 620073070e-09 1s 1s 620078630e-09 1s 1s 620082550e-09 0s 0s 620083310e-09 1s 1s 620088910e-09 1s 1s 620092790e-09 0s 0s 620093550e-09 1s 1s 620099190e-09 1s 1s 620103030e-09 0s 0s 620103790e-09 1s 1s 620109470e-09 1s 1s 620113270e-09 0s 0s 620114030e-09 1s 1s 620119750e-09 1s 1s 620123510e-09 0s 0s 620124270e-09 1s 1s 620130030e-09 1s 1s 620133750e-09 0s 0s 620134510e-09 1s 1s 620140310e-09 1s 1s 620143990e-09 0s 0s 620144750e-09 1s 1s 620150590e-09 1s 1s 620154230e-09 0s 0s 620154990e-09 1s 1s 620160870e-09 1s 1s 620164470e-09 0s 0s 620165230e-09 1s 1s 620171150e-09 1s 1s 620174710e-09 0s 0s 620175470e-09 1s 1s 620181430e-09 1s 1s 620184950e-09 0s 0s 620185710e-09 1s 1s 620191710e-09 1s 1s 620195190e-09 0s 0s 620195950e-09 1s 1s 620201990e-09 1s 1s 620205430e-09 0s 0s 620206190e-09 1s 1s 620212270e-09 1s 1s 620215670e-09 0s 0s 620216430e-09 1s 1s 620222550e-09 1s 1s 620225910e-09 0s 0s 620226670e-09 1s 1s 620232830e-09 1s 1s 620236150e-09 0s 0s 620236910e-09 1s 1s 620243110e-09 1s 1s 620246390e-09 0s 0s 620247150e-09 1s 1s 620253390e-09 1s 1s 620256630e-09 0s 0s 620257390e-09 1s 1s 620263670e-09 1s 1s 620266870e-09 0s 0s 620267630e-09 1s 1s 620273950e-09 1s 1s 620277110e-09 0s 0s 620277870e-09 1s 1s 620284230e-09 1s 1s 620287350e-09 0s 0s 620288110e-09 1s 1s 620294510e-09 1s 1s 620297590e-09 0s 0s 620298350e-09 1s 1s 620304790e-09 1s 1s 620307830e-09 0s 0s 620308590e-09 1s 1s 620315070e-09 1s 1s 620318070e-09 0s 0s 620318830e-09 1s 1s 620325350e-09 1s 1s 620328310e-09 0s 0s 620329070e-09 1s 1s 620335630e-09 1s 1s 620338550e-09 0s 0s 620339310e-09 1s 1s 620345910e-09 1s 1s 620348790e-09 0s 0s 620349550e-09 1s 1s 620356190e-09 1s 1s 620359030e-09 0s 0s 620359790e-09 1s 1s 620366470e-09 1s 1s 620369270e-09 0s 0s 620370030e-09 1s 1s 620376750e-09 1s 1s 620379510e-09 0s 0s 620380270e-09 1s 1s 620387030e-09 1s 1s 620389750e-09 0s 0s 620390510e-09 1s 1s 620397310e-09 1s 1s 620399990e-09 0s 0s 620400750e-09 1s 1s 620407590e-09 1s 1s 620410230e-09 0s 0s 620410990e-09 1s 1s 620417870e-09 1s 1s 620420470e-09 0s 0s 620421230e-09 1s 1s 620428150e-09 1s 1s 620430710e-09 0s 0s 620431470e-09 1s 1s 620438430e-09 1s 1s 620440950e-09 0s 0s 620441710e-09 1s 1s 620448710e-09 1s 1s 620451190e-09 0s 0s 620451950e-09 1s 1s 620458990e-09 1s 1s 620461430e-09 0s 0s 620462190e-09 1s 1s 620469270e-09 1s 1s 620471670e-09 0s 0s 620472430e-09 1s 1s 620479550e-09 1s 1s 620481910e-09 0s 0s 620482670e-09 1s 1s 620489830e-09 1s 1s 620492150e-09 0s 0s 620492910e-09 1s 1s 620500110e-09 1s 1s 620502390e-09 0s 0s 620503150e-09 1s 1s 620510390e-09 1s 1s 620512630e-09 0s 0s 620513390e-09 1s 1s 620520670e-09 1s 1s 620522870e-09 0s 0s 620523630e-09 1s 1s 620530950e-09 1s 1s 620533110e-09 0s 0s 620533870e-09 1s 1s 620541230e-09 1s 1s 620543350e-09 0s 0s 620544110e-09 1s 1s 620551510e-09 1s 1s 620553590e-09 0s 0s 620554350e-09 1s 1s 620561790e-09 1s 1s 620563830e-09 0s 0s 620564590e-09 1s 1s 620572070e-09 1s 1s 620574070e-09 0s 0s 620574830e-09 1s 1s 620582350e-09 1s 1s 620584310e-09 0s 0s 620585070e-09 1s 1s 620592630e-09 1s 1s 620594550e-09 0s 0s 620595310e-09 1s 1s 620602910e-09 1s 1s 620604790e-09 0s 0s 620605550e-09 1s 1s 620613190e-09 1s 1s 620615030e-09 0s 0s 620615790e-09 1s 1s 620623470e-09 1s 1s 620625270e-09 0s 0s 620626030e-09 1s 1s 620633750e-09 1s 1s 620635510e-09 0s 0s 620636270e-09 1s 1s 620644030e-09 1s 1s 620645750e-09 0s 0s 620646510e-09 1s 1s 620654310e-09 1s 1s 620655990e-09 0s 0s 620656750e-09 1s 1s 620664590e-09 1s 1s 620666230e-09 0s 0s 620666990e-09 1s 1s 620674870e-09 1s 1s 620676470e-09 0s 0s 620677230e-09 1s 1s 620685150e-09 1s 1s 620686710e-09 0s 0s 620687470e-09 1s 1s 620695430e-09 1s 1s 620696950e-09 0s 0s 620697710e-09 1s 1s 620705710e-09 1s 1s 620707190e-09 0s 0s 620707950e-09 1s 1s 620715990e-09 1s 1s 620717430e-09 0s 0s 620718190e-09 1s 1s 620726270e-09 1s 1s 620727670e-09 0s 0s 620728430e-09 1s 1s 620736550e-09 1s 1s 620737910e-09 0s 0s 620738670e-09 1s 1s 620746830e-09 1s 1s 620748150e-09 0s 0s 620748910e-09 1s 1s 620757110e-09 1s 1s 620758390e-09 0s 0s 620759150e-09 1s 1s 620767390e-09 1s 1s 620768630e-09 0s 0s 620769390e-09 1s 1s 620777670e-09 1s 1s 620778870e-09 0s 0s 620779630e-09 1s 1s 620787950e-09 1s 1s 620789110e-09 0s 0s 620789870e-09 1s 1s 620798230e-09 1s 1s 620799350e-09 0s 0s 620800110e-09 1s 1s 620808510e-09 1s 1s 620809590e-09 0s 0s 620810350e-09 1s 1s 620818790e-09 1s 1s 620819830e-09 0s 0s 620820590e-09 1s 1s 620829070e-09 1s 1s 620830070e-09 0s 0s 620830830e-09 1s 1s 620839350e-09 1s 1s 620840310e-09 0s 0s 620841070e-09 1s 1s 620849630e-09 1s 1s 620850550e-09 0s 0s 620851310e-09 1s 1s 620859910e-09 1s 1s 620860790e-09 0s 0s 620861550e-09 1s 1s 620870190e-09 1s 1s 620871030e-09 0s 0s 620871790e-09 1s 1s 620880470e-09 1s 1s 620881270e-09 0s 0s 620882030e-09 1s 1s 620890750e-09 1s 1s 620891510e-09 0s 0s 620892270e-09 1s 1s 620901030e-09 1s 1s 620901750e-09 0s 0s 620902510e-09 1s 1s 620911310e-09 1s 1s 620911990e-09 0s 0s 620912750e-09 1s 1s 620921590e-09 1s 1s 620922230e-09 0s 0s 620922990e-09 1s 1s 620931870e-09 1s 1s 620932470e-09 0s 0s 620933230e-09 1s 1s 620942150e-09 1s 1s 620942710e-09 0s 0s 620943470e-09 1s 1s 620952430e-09 1s 1s 620952950e-09 0s 0s 620953710e-09 1s 1s 620962710e-09 1s 1s 620963190e-09 0s 0s 620963950e-09 1s 1s 620972990e-09 1s 1s 620973430e-09 0s 0s 620974190e-09 1s 1s 620983270e-09 1s 1s 620983670e-09 0s 0s 620984430e-09 1s 1s 620993550e-09 1s 1s 620993910e-09 0s 0s 620994670e-09 1s 1s 621003830e-09 1s 1s 621004150e-09 0s 0s 621004910e-09 1s 1s 621014110e-09 1s 1s 621014390e-09 0s 0s 621015150e-09 1s 1s 621024390e-09 1s 1s 621024630e-09 0s 0s 621025390e-09 1s 1s 621034670e-09 1s 1s 621034870e-09 0s 0s 621035630e-09 1s 1s 621044950e-09 1s 1s 621045110e-09 0s 0s 621045870e-09 1s 1s 621055230e-09 1s 1s 621055350e-09 0s 0s 621056110e-09 1s 1s 621065510e-09 1s 1s 621065590e-09 0s 0s 621066350e-09 1s 1s 621075790e-09 1s 1s 621075830e-09 0s 0s 621076590e-09 1s 1s 621086070e-09 0s 0s 621086830e-09 1s 1s 621096310e-09 0s 0s 621096350e-09 0s 0s 621097070e-09 1s 1s 621106550e-09 0s 0s 621106630e-09 0s 0s 621107310e-09 1s 1s 621116790e-09 0s 0s 621116910e-09 0s 0s 621117550e-09 1s 1s 621127030e-09 0s 0s 621127190e-09 0s 0s 621127790e-09 1s 1s 621137270e-09 0s 0s 621137470e-09 0s 0s 621138030e-09 1s 1s 621147510e-09 0s 0s 621147750e-09 0s 0s 621148270e-09 1s 1s 621157750e-09 0s 0s 621158030e-09 0s 0s 621158510e-09 1s 1s 621167990e-09 0s 0s 621168310e-09 0s 0s 621168750e-09 1s 1s 621178230e-09 0s 0s 621178590e-09 0s 0s 621178990e-09 1s 1s 621188470e-09 0s 0s 621188870e-09 0s 0s 621189230e-09 1s 1s 621198710e-09 0s 0s 621199150e-09 0s 0s 621199470e-09 1s 1s 621208950e-09 0s 0s 621209430e-09 0s 0s 621209710e-09 1s 1s 621219190e-09 0s 0s 621219710e-09 0s 0s 621219950e-09 1s 1s 621229430e-09 0s 0s 621229990e-09 0s 0s 621230190e-09 1s 1s 621239670e-09 0s 0s 621240270e-09 0s 0s 621240430e-09 1s 1s 621249910e-09 0s 0s 621250550e-09 0s 0s 621250670e-09 1s 1s 621260150e-09 0s 0s 621260830e-09 0s 0s 621260910e-09 1s 1s 621270390e-09 0s 0s 621271110e-09 0s 0s 621271150e-09 1s 1s 621280630e-09 0s 0s 621281390e-09 1s 1s 621281430e-09 1s 1s 621290910e-09 0s 0s 621291630e-09 1s 1s 621291710e-09 1s 1s 621301150e-09 0s 0s 621301870e-09 1s 1s 621301990e-09 1s 1s 621311390e-09 0s 0s 621312110e-09 1s 1s 621312270e-09 1s 1s 621321630e-09 0s 0s 621322350e-09 1s 1s 621322550e-09 1s 1s 621331870e-09 0s 0s 621332590e-09 1s 1s 621332830e-09 1s 1s 621342110e-09 0s 0s 621342830e-09 1s 1s 621343110e-09 1s 1s 621352350e-09 0s 0s 621353070e-09 1s 1s 621353390e-09 1s 1s 621362590e-09 0s 0s 621363310e-09 1s 1s 621363670e-09 1s 1s 621372830e-09 0s 0s 621373550e-09 1s 1s 621373950e-09 1s 1s 621383070e-09 0s 0s 621383790e-09 1s 1s 621384230e-09 1s 1s 621393310e-09 0s 0s 621394030e-09 1s 1s 621394510e-09 1s 1s 621403550e-09 0s 0s 621404270e-09 1s 1s 621404790e-09 1s 1s 621413790e-09 0s 0s 621414510e-09 1s 1s 621415070e-09 1s 1s 621424030e-09 0s 0s 621424750e-09 1s 1s 621425350e-09 1s 1s 621434270e-09 0s 0s 621434990e-09 1s 1s 621435630e-09 1s 1s 621444510e-09 0s 0s 621445230e-09 1s 1s 621445910e-09 1s 1s 621454750e-09 0s 0s 621455470e-09 1s 1s 621456190e-09 1s 1s 621464990e-09 0s 0s 621465710e-09 1s 1s 621466470e-09 1s 1s 621475230e-09 0s 0s 621475950e-09 1s 1s 621476750e-09 1s 1s 621485470e-09 0s 0s 621486190e-09 1s 1s 621487030e-09 1s 1s 621495710e-09 0s 0s 621496430e-09 1s 1s 621497310e-09 1s 1s 621505950e-09 0s 0s 621506670e-09 1s 1s 621507590e-09 1s 1s 621516190e-09 0s 0s 621516910e-09 1s 1s 621517870e-09 1s 1s 621526430e-09 0s 0s 621527150e-09 1s 1s 621528150e-09 1s 1s 621536670e-09 0s 0s 621537390e-09 1s 1s 621538430e-09 1s 1s 621546910e-09 0s 0s 621547630e-09 1s 1s 621548710e-09 1s 1s 621557150e-09 0s 0s 621557870e-09 1s 1s 621558990e-09 1s 1s 621567390e-09 0s 0s 621568110e-09 1s 1s 621569270e-09 1s 1s 621577630e-09 0s 0s 621578350e-09 1s 1s 621579550e-09 1s 1s 621587870e-09 0s 0s 621588590e-09 1s 1s 621589830e-09 1s 1s 621598110e-09 0s 0s 621598830e-09 1s 1s 621600110e-09 1s 1s 621608350e-09 0s 0s 621609070e-09 1s 1s 621610390e-09 1s 1s 621618590e-09 0s 0s 621619310e-09 1s 1s 621620670e-09 1s 1s 621628830e-09 0s 0s 621629550e-09 1s 1s 621630950e-09 1s 1s 621639070e-09 0s 0s 621639790e-09 1s 1s 621641230e-09 1s 1s 621649310e-09 0s 0s 621650030e-09 1s 1s 621651510e-09 1s 1s 621659550e-09 0s 0s 621660270e-09 1s 1s 621661790e-09 1s 1s 621669790e-09 0s 0s 621670510e-09 1s 1s 621672070e-09 1s 1s 621680030e-09 0s 0s 621680750e-09 1s 1s 621682350e-09 1s 1s 621690270e-09 0s 0s 621690990e-09 1s 1s 621692630e-09 1s 1s 621700510e-09 0s 0s 621701230e-09 1s 1s 621702910e-09 1s 1s 621710750e-09 0s 0s 621711470e-09 1s 1s 621713190e-09 1s 1s 621720990e-09 0s 0s 621721710e-09 1s 1s 621723470e-09 1s 1s 621731230e-09 0s 0s 621731950e-09 1s 1s 621733750e-09 1s 1s 621741470e-09 0s 0s 621742190e-09 1s 1s 621744030e-09 1s 1s 621751710e-09 0s 0s 621752430e-09 1s 1s 621754310e-09 1s 1s 621761950e-09 0s 0s 621762670e-09 1s 1s 621764590e-09 1s 1s 621772190e-09 0s 0s 621772910e-09 1s 1s 621774870e-09 1s 1s 621782430e-09 0s 0s 621783150e-09 1s 1s 621785150e-09 1s 1s 621792670e-09 0s 0s 621793390e-09 1s 1s 621795430e-09 1s 1s 621802910e-09 0s 0s 621803630e-09 1s 1s 621805710e-09 1s 1s 621813150e-09 0s 0s 621813870e-09 1s 1s 621815990e-09 1s 1s 621823390e-09 0s 0s 621824110e-09 1s 1s 621826270e-09 1s 1s 621833630e-09 0s 0s 621834350e-09 1s 1s 621836550e-09 1s 1s 621843870e-09 0s 0s 621844590e-09 1s 1s 621846830e-09 1s 1s 621854110e-09 0s 0s 621854830e-09 1s 1s 621857110e-09 1s 1s 621864350e-09 0s 0s 621865070e-09 1s 1s 621867390e-09 1s 1s 621874590e-09 0s 0s 621875310e-09 1s 1s 621877670e-09 1s 1s 621884830e-09 0s 0s 621885550e-09 1s 1s 621887950e-09 1s 1s 621895070e-09 0s 0s 621895790e-09 1s 1s 621898230e-09 1s 1s 621905310e-09 0s 0s 621906030e-09 1s 1s 621908510e-09 1s 1s 621915550e-09 0s 0s 621916270e-09 1s 1s 621918790e-09 1s 1s 621925790e-09 0s 0s 621926510e-09 1s 1s 621929070e-09 1s 1s 621936030e-09 0s 0s 621936750e-09 1s 1s 621939350e-09 1s 1s 621946270e-09 0s 0s 621946990e-09 1s 1s 621949630e-09 1s 1s 621956510e-09 0s 0s 621957230e-09 1s 1s 621959910e-09 1s 1s 621966750e-09 0s 0s 621967470e-09 1s 1s 621970190e-09 1s 1s 621976990e-09 0s 0s 621977710e-09 1s 1s 621980470e-09 1s 1s 621987230e-09 0s 0s 621987950e-09 1s 1s 621990750e-09 1s 1s 621997470e-09 0s 0s 621998190e-09 1s 1s 622001030e-09 1s 1s 622007710e-09 0s 0s 622008430e-09 1s 1s 622011310e-09 1s 1s 622017950e-09 0s 0s 622018670e-09 1s 1s 622021590e-09 1s 1s 622028190e-09 0s 0s 622028910e-09 1s 1s 622031870e-09 1s 1s 622038430e-09 0s 0s 622039150e-09 1s 1s 622042150e-09 1s 1s 622048670e-09 0s 0s 622049390e-09 1s 1s 622052430e-09 1s 1s 622058910e-09 0s 0s 622059630e-09 1s 1s 622062710e-09 1s 1s 622069150e-09 0s 0s 622069870e-09 1s 1s 622072990e-09 1s 1s 622079390e-09 0s 0s 622080110e-09 1s 1s 622083270e-09 1s 1s 622089630e-09 0s 0s 622090350e-09 1s 1s 622093550e-09 1s 1s 622099870e-09 0s 0s 622100590e-09 1s 1s 622103830e-09 1s 1s 622110110e-09 0s 0s 622110830e-09 1s 1s 622114110e-09 1s 1s 622120350e-09 0s 0s 622121070e-09 1s 1s 622124390e-09 1s 1s 622130590e-09 0s 0s 622131310e-09 1s 1s 622134670e-09 1s 1s 622140830e-09 0s 0s 622141550e-09 1s 1s 622144950e-09 1s 1s 622151070e-09 0s 0s 622151790e-09 1s 1s 622155230e-09 1s 1s 622161310e-09 0s 0s 622162030e-09 1s 1s 622165510e-09 1s 1s 622171550e-09 0s 0s 622172270e-09 1s 1s 622175790e-09 1s 1s 622181790e-09 0s 0s 622182510e-09 1s 1s 622186070e-09 1s 1s 622192030e-09 0s 0s 622192750e-09 1s 1s 622196350e-09 1s 1s 622202270e-09 0s 0s 622202990e-09 1s 1s 622206630e-09 1s 1s 622212510e-09 0s 0s 622213230e-09 1s 1s 622216910e-09 1s 1s 622222750e-09 0s 0s 622223470e-09 1s 1s 622227190e-09 1s 1s 622232990e-09 0s 0s 622233710e-09 1s 1s 622237470e-09 1s 1s 622243230e-09 0s 0s 622243950e-09 1s 1s 622247750e-09 1s 1s 622253470e-09 0s 0s 622254190e-09 1s 1s 622258030e-09 1s 1s 622263710e-09 0s 0s 622264430e-09 1s 1s 622268310e-09 1s 1s 622273950e-09 0s 0s 622274670e-09 1s 1s 622278590e-09 1s 1s 622284190e-09 0s 0s 622284910e-09 1s 1s 622288870e-09 1s 1s 622294430e-09 0s 0s 622295150e-09 1s 1s 622299150e-09 1s 1s 622304670e-09 0s 0s 622305390e-09 1s 1s 622309430e-09 1s 1s 622314910e-09 0s 0s 622315630e-09 1s 1s 622319710e-09 1s 1s 622325150e-09 0s 0s 622325870e-09 1s 1s 622329990e-09 1s 1s 622335390e-09 0s 0s 622336110e-09 1s 1s 622340270e-09 1s 1s 622345630e-09 0s 0s 622346350e-09 1s 1s 622350550e-09 1s 1s 622355870e-09 0s 0s 622356590e-09 1s 1s 622360830e-09 1s 1s 622366110e-09 0s 0s 622366830e-09 1s 1s 622371110e-09 1s 1s 622376350e-09 0s 0s 622377070e-09 1s 1s 622381390e-09 1s 1s 622386590e-09 0s 0s 622387310e-09 1s 1s 622391670e-09 1s 1s 622396830e-09 0s 0s 622397550e-09 1s 1s 622401950e-09 1s 1s 622407070e-09 0s 0s 622407790e-09 1s 1s 622412230e-09 1s 1s 622417310e-09 0s 0s 622418030e-09 1s 1s 622422510e-09 1s 1s 622427550e-09 0s 0s 622428270e-09 1s 1s 622432790e-09 1s 1s 622437790e-09 0s 0s 622438510e-09 1s 1s 622443070e-09 1s 1s 622448030e-09 0s 0s 622448750e-09 1s 1s 622453350e-09 1s 1s 622458270e-09 0s 0s 622458990e-09 1s 1s 622463630e-09 1s 1s 622468510e-09 0s 0s 622469230e-09 1s 1s 622473910e-09 1s 1s 622478750e-09 0s 0s 622479470e-09 1s 1s 622484190e-09 1s 1s 622488990e-09 0s 0s 622489710e-09 1s 1s 622494470e-09 1s 1s 622499230e-09 0s 0s 622499950e-09 1s 1s 622504750e-09 1s 1s 622509470e-09 0s 0s 622510190e-09 1s 1s 622515030e-09 1s 1s 622519710e-09 0s 0s 622520430e-09 1s 1s 622525310e-09 1s 1s 622529950e-09 0s 0s 622530670e-09 1s 1s 622535590e-09 1s 1s 622540190e-09 0s 0s 622540910e-09 1s 1s 622545870e-09 1s 1s 622550430e-09 0s 0s 622551150e-09 1s 1s 622556150e-09 1s 1s 622560670e-09 0s 0s 622561390e-09 1s 1s 622566430e-09 1s 1s 622570910e-09 0s 0s 622571630e-09 1s 1s 622576710e-09 1s 1s 622581150e-09 0s 0s 622581870e-09 1s 1s 622586990e-09 1s 1s 622591390e-09 0s 0s 622592110e-09 1s 1s 622597270e-09 1s 1s 622601630e-09 0s 0s 622602350e-09 1s 1s 622607550e-09 1s 1s 622611870e-09 0s 0s 622612590e-09 1s 1s 622617830e-09 1s 1s 622622110e-09 0s 0s 622622830e-09 1s 1s 622628110e-09 1s 1s 622632350e-09 0s 0s 622633070e-09 1s 1s 622638390e-09 1s 1s 622642590e-09 0s 0s 622643310e-09 1s 1s 622648670e-09 1s 1s 622652830e-09 0s 0s 622653550e-09 1s 1s 622658950e-09 1s 1s 622663070e-09 0s 0s 622663790e-09 1s 1s 622669230e-09 1s 1s 622673310e-09 0s 0s 622674030e-09 1s 1s 622679510e-09 1s 1s 622683550e-09 0s 0s 622684270e-09 1s 1s 622689790e-09 1s 1s 622693790e-09 0s 0s 622694510e-09 1s 1s 622700070e-09 1s 1s 622704030e-09 0s 0s 622704750e-09 1s 1s 622710350e-09 1s 1s 622714270e-09 0s 0s 622714990e-09 1s 1s 622720630e-09 1s 1s 622724510e-09 0s 0s 622725230e-09 1s 1s 622730910e-09 1s 1s 622734750e-09 0s 0s 622735470e-09 1s 1s 622741190e-09 1s 1s 622744990e-09 0s 0s 622745710e-09 1s 1s 622751470e-09 1s 1s 622755230e-09 0s 0s 622755950e-09 1s 1s 622761750e-09 1s 1s 622765470e-09 0s 0s 622766190e-09 1s 1s 622772030e-09 1s 1s 622775710e-09 0s 0s 622776430e-09 1s 1s 622782310e-09 1s 1s 622785950e-09 0s 0s 622786670e-09 1s 1s 622792590e-09 1s 1s 622796190e-09 0s 0s 622796910e-09 1s 1s 622802870e-09 1s 1s 622806430e-09 0s 0s 622807150e-09 1s 1s 622813150e-09 1s 1s 622816670e-09 0s 0s 622817390e-09 1s 1s 622823430e-09 1s 1s 622826910e-09 0s 0s 622827630e-09 1s 1s 622833710e-09 1s 1s 622837150e-09 0s 0s 622837870e-09 1s 1s 622843990e-09 1s 1s 622847390e-09 0s 0s 622848110e-09 1s 1s 622854270e-09 1s 1s 622857630e-09 0s 0s 622858350e-09 1s 1s 622864550e-09 1s 1s 622867870e-09 0s 0s 622868590e-09 1s 1s 622874830e-09 1s 1s 622878110e-09 0s 0s 622878830e-09 1s 1s 622885110e-09 1s 1s 622888350e-09 0s 0s 622889070e-09 1s 1s 622895390e-09 1s 1s 622898590e-09 0s 0s 622899310e-09 1s 1s 622905670e-09 1s 1s 622908830e-09 0s 0s 622909550e-09 1s 1s 622915950e-09 1s 1s 622919070e-09 0s 0s 622919790e-09 1s 1s 622926230e-09 1s 1s 622929310e-09 0s 0s 622930030e-09 1s 1s 622936510e-09 1s 1s 622939550e-09 0s 0s 622940270e-09 1s 1s 622946790e-09 1s 1s 622949790e-09 0s 0s 622950510e-09 1s 1s 622957070e-09 1s 1s 622960030e-09 0s 0s 622960750e-09 1s 1s 622967350e-09 1s 1s 622970270e-09 0s 0s 622970990e-09 1s 1s 622977630e-09 1s 1s 622980510e-09 0s 0s 622981230e-09 1s 1s 622987910e-09 1s 1s 622990750e-09 0s 0s 622991470e-09 1s 1s 622998190e-09 1s 1s 623000990e-09 0s 0s 623001710e-09 1s 1s 623008470e-09 1s 1s 623011230e-09 0s 0s 623011950e-09 1s 1s 623018750e-09 1s 1s 623021470e-09 0s 0s 623022190e-09 1s 1s 623029030e-09 1s 1s 623031710e-09 0s 0s 623032430e-09 1s 1s 623039310e-09 1s 1s 623041950e-09 0s 0s 623042670e-09 1s 1s 623049590e-09 1s 1s 623052190e-09 0s 0s 623052910e-09 1s 1s 623059870e-09 1s 1s 623062430e-09 0s 0s 623063150e-09 1s 1s 623070150e-09 1s 1s 623072670e-09 0s 0s 623073390e-09 1s 1s 623080430e-09 1s 1s 623082910e-09 0s 0s 623083630e-09 1s 1s 623090710e-09 1s 1s 623093150e-09 0s 0s 623093870e-09 1s 1s 623100990e-09 1s 1s 623103390e-09 0s 0s 623104110e-09 1s 1s 623111270e-09 1s 1s 623113630e-09 0s 0s 623114350e-09 1s 1s 623121550e-09 1s 1s 623123870e-09 0s 0s 623124590e-09 1s 1s 623131830e-09 1s 1s 623134110e-09 0s 0s 623134830e-09 1s 1s 623142110e-09 1s 1s 623144350e-09 0s 0s 623145070e-09 1s 1s 623152390e-09 1s 1s 623154590e-09 0s 0s 623155310e-09 1s 1s 623162670e-09 1s 1s 623164830e-09 0s 0s 623165550e-09 1s 1s 623172950e-09 1s 1s 623175070e-09 0s 0s 623175790e-09 1s 1s 623183230e-09 1s 1s 623185310e-09 0s 0s 623186030e-09 1s 1s 623193510e-09 1s 1s 623195550e-09 0s 0s 623196270e-09 1s 1s 623203790e-09 1s 1s 623205790e-09 0s 0s 623206510e-09 1s 1s 623214070e-09 1s 1s 623216030e-09 0s 0s 623216750e-09 1s 1s 623224350e-09 1s 1s 623226270e-09 0s 0s 623226990e-09 1s 1s 623234630e-09 1s 1s 623236510e-09 0s 0s 623237230e-09 1s 1s 623244910e-09 1s 1s 623246750e-09 0s 0s 623247470e-09 1s 1s 623255190e-09 1s 1s 623256990e-09 0s 0s 623257710e-09 1s 1s 623265470e-09 1s 1s 623267230e-09 0s 0s 623267950e-09 1s 1s 623275750e-09 1s 1s 623277470e-09 0s 0s 623278190e-09 1s 1s 623286030e-09 1s 1s 623287710e-09 0s 0s 623288430e-09 1s 1s 623296310e-09 1s 1s 623297950e-09 0s 0s 623298670e-09 1s 1s 623306590e-09 1s 1s 623308190e-09 0s 0s 623308910e-09 1s 1s 623316870e-09 1s 1s 623318430e-09 0s 0s 623319150e-09 1s 1s 623327150e-09 1s 1s 623328670e-09 0s 0s 623329390e-09 1s 1s 623337430e-09 1s 1s 623338910e-09 0s 0s 623339630e-09 1s 1s 623347710e-09 1s 1s 623349150e-09 0s 0s 623349870e-09 1s 1s 623357990e-09 1s 1s 623359390e-09 0s 0s 623360110e-09 1s 1s 623368270e-09 1s 1s 623369630e-09 0s 0s 623370350e-09 1s 1s 623378550e-09 1s 1s 623379870e-09 0s 0s 623380590e-09 1s 1s 623388830e-09 1s 1s 623390110e-09 0s 0s 623390830e-09 1s 1s 623399110e-09 1s 1s 623400350e-09 0s 0s 623401070e-09 1s 1s 623409390e-09 1s 1s 623410590e-09 0s 0s 623411310e-09 1s 1s 623419670e-09 1s 1s 623420830e-09 0s 0s 623421550e-09 1s 1s 623429950e-09 1s 1s 623431070e-09 0s 0s 623431790e-09 1s 1s 623440230e-09 1s 1s 623441310e-09 0s 0s 623442030e-09 1s 1s 623450510e-09 1s 1s 623451550e-09 0s 0s 623452270e-09 1s 1s 623460790e-09 1s 1s 623461790e-09 0s 0s 623462510e-09 1s 1s 623471070e-09 1s 1s 623472030e-09 0s 0s 623472750e-09 1s 1s 623481350e-09 1s 1s 623482270e-09 0s 0s 623482990e-09 1s 1s 623491630e-09 1s 1s 623492510e-09 0s 0s 623493230e-09 1s 1s 623501910e-09 1s 1s 623502750e-09 0s 0s 623503470e-09 1s 1s 623512190e-09 1s 1s 623512990e-09 0s 0s 623513710e-09 1s 1s 623522470e-09 1s 1s 623523230e-09 0s 0s 623523950e-09 1s 1s 623532750e-09 1s 1s 623533470e-09 0s 0s 623534190e-09 1s 1s 623543030e-09 1s 1s 623543710e-09 0s 0s 623544430e-09 1s 1s 623553310e-09 1s 1s 623553950e-09 0s 0s 623554670e-09 1s 1s 623563590e-09 1s 1s 623564190e-09 0s 0s 623564910e-09 1s 1s 623573870e-09 1s 1s 623574430e-09 0s 0s 623575150e-09 1s 1s 623584150e-09 1s 1s 623584670e-09 0s 0s 623585390e-09 1s 1s 623594430e-09 1s 1s 623594910e-09 0s 0s 623595630e-09 1s 1s 623604710e-09 1s 1s 623605150e-09 0s 0s 623605870e-09 1s 1s 623614990e-09 1s 1s 623615390e-09 0s 0s 623616110e-09 1s 1s 623625270e-09 1s 1s 623625630e-09 0s 0s 623626350e-09 1s 1s 623635550e-09 1s 1s 623635870e-09 0s 0s 623636590e-09 1s 1s 623645830e-09 1s 1s 623646110e-09 0s 0s 623646830e-09 1s 1s 623656110e-09 1s 1s 623656350e-09 0s 0s 623657070e-09 1s 1s 623666390e-09 1s 1s 623666590e-09 0s 0s 623667310e-09 1s 1s 623676670e-09 1s 1s 623676830e-09 0s 0s 623677550e-09 1s 1s 623686950e-09 1s 1s 623687070e-09 0s 0s 623687790e-09 1s 1s 623697230e-09 1s 1s 623697310e-09 0s 0s 623698030e-09 1s 1s 623707510e-09 1s 1s 623707550e-09 0s 0s 623708270e-09 1s 1s 623717790e-09 0s 0s 623718510e-09 1s 1s 623728030e-09 0s 0s 623728070e-09 0s 0s 623728750e-09 1s 1s 623738270e-09 0s 0s 623738350e-09 0s 0s 623738990e-09 1s 1s 623748510e-09 0s 0s 623748630e-09 0s 0s 623749230e-09 1s 1s 623758750e-09 0s 0s 623758910e-09 0s 0s 623759470e-09 1s 1s 623768990e-09 0s 0s 623769190e-09 0s 0s 623769710e-09 1s 1s 623779230e-09 0s 0s 623779470e-09 0s 0s 623779950e-09 1s 1s 623789470e-09 0s 0s 623789750e-09 0s 0s 623790190e-09 1s 1s 623799710e-09 0s 0s 623800030e-09 0s 0s 623800430e-09 1s 1s 623809950e-09 0s 0s 623810310e-09 0s 0s 623810670e-09 1s 1s 623820190e-09 0s 0s 623820590e-09 0s 0s 623820910e-09 1s 1s 623830430e-09 0s 0s 623830870e-09 0s 0s 623831150e-09 1s 1s 623840670e-09 0s 0s 623841150e-09 0s 0s 623841390e-09 1s 1s 623850910e-09 0s 0s 623851430e-09 0s 0s 623851630e-09 1s 1s 623861150e-09 0s 0s 623861710e-09 0s 0s 623861870e-09 1s 1s 623871390e-09 0s 0s 623871990e-09 0s 0s 623872110e-09 1s 1s 623881630e-09 0s 0s 623882270e-09 0s 0s 623882350e-09 1s 1s 623891870e-09 0s 0s 623892550e-09 0s 0s 623892590e-09 1s 1s 623902110e-09 0s 0s 623902830e-09 1s 1s 623902870e-09 1s 1s 623912390e-09 0s 0s 623913070e-09 1s 1s 623913150e-09 1s 1s 623922630e-09 0s 0s 623923310e-09 1s 1s 623923430e-09 1s 1s 623932870e-09 0s 0s 623933550e-09 1s 1s 623933710e-09 1s 1s 623943110e-09 0s 0s 623943790e-09 1s 1s 623943990e-09 1s 1s 623953350e-09 0s 0s 623954030e-09 1s 1s 623954270e-09 1s 1s 623963590e-09 0s 0s 623964270e-09 1s 1s 623964550e-09 1s 1s 623973830e-09 0s 0s 623974510e-09 1s 1s 623974830e-09 1s 1s 623984070e-09 0s 0s 623984750e-09 1s 1s 623985110e-09 1s 1s 623994310e-09 0s 0s 623994990e-09 1s 1s 623995390e-09 1s 1s 624004550e-09 0s 0s 624005230e-09 1s 1s 624005670e-09 1s 1s 624014790e-09 0s 0s 624015470e-09 1s 1s 624015950e-09 1s 1s 624025030e-09 0s 0s 624025710e-09 1s 1s 624026230e-09 1s 1s 624035270e-09 0s 0s 624035950e-09 1s 1s 624036510e-09 1s 1s 624045510e-09 0s 0s 624046190e-09 1s 1s 624046790e-09 1s 1s 624055750e-09 0s 0s 624056430e-09 1s 1s 624057070e-09 1s 1s 624065990e-09 0s 0s 624066670e-09 1s 1s 624067350e-09 1s 1s 624076230e-09 0s 0s 624076910e-09 1s 1s 624077630e-09 1s 1s 624086470e-09 0s 0s 624087150e-09 1s 1s 624087910e-09 1s 1s 624096710e-09 0s 0s 624097390e-09 1s 1s 624098190e-09 1s 1s 624106950e-09 0s 0s 624107630e-09 1s 1s 624108470e-09 1s 1s 624117190e-09 0s 0s 624117870e-09 1s 1s 624118750e-09 1s 1s 624127430e-09 0s 0s 624128110e-09 1s 1s 624129030e-09 1s 1s 624137670e-09 0s 0s 624138350e-09 1s 1s 624139310e-09 1s 1s 624147910e-09 0s 0s 624148590e-09 1s 1s 624149590e-09 1s 1s 624158150e-09 0s 0s 624158830e-09 1s 1s 624159870e-09 1s 1s 624168390e-09 0s 0s 624169070e-09 1s 1s 624170150e-09 1s 1s 624178630e-09 0s 0s 624179310e-09 1s 1s 624180430e-09 1s 1s 624188870e-09 0s 0s 624189550e-09 1s 1s 624190710e-09 1s 1s 624199110e-09 0s 0s 624199790e-09 1s 1s 624200990e-09 1s 1s 624209350e-09 0s 0s 624210030e-09 1s 1s 624211270e-09 1s 1s 624219590e-09 0s 0s 624220270e-09 1s 1s 624221550e-09 1s 1s 624229830e-09 0s 0s 624230510e-09 1s 1s 624231830e-09 1s 1s 624240070e-09 0s 0s 624240750e-09 1s 1s 624242110e-09 1s 1s 624250310e-09 0s 0s 624250990e-09 1s 1s 624252390e-09 1s 1s 624260550e-09 0s 0s 624261230e-09 1s 1s 624262670e-09 1s 1s 624270790e-09 0s 0s 624271470e-09 1s 1s 624272950e-09 1s 1s 624281030e-09 0s 0s 624281710e-09 1s 1s 624283230e-09 1s 1s 624291270e-09 0s 0s 624291950e-09 1s 1s 624293510e-09 1s 1s 624301510e-09 0s 0s 624302190e-09 1s 1s 624303790e-09 1s 1s 624311750e-09 0s 0s 624312430e-09 1s 1s 624314070e-09 1s 1s 624321990e-09 0s 0s 624322670e-09 1s 1s 624324350e-09 1s 1s 624332230e-09 0s 0s 624332910e-09 1s 1s 624334630e-09 1s 1s 624342470e-09 0s 0s 624343150e-09 1s 1s 624344910e-09 1s 1s 624352710e-09 0s 0s 624353390e-09 1s 1s 624355190e-09 1s 1s 624362950e-09 0s 0s 624363630e-09 1s 1s 624365470e-09 1s 1s 624373190e-09 0s 0s 624373870e-09 1s 1s 624375750e-09 1s 1s 624383430e-09 0s 0s 624384110e-09 1s 1s 624386030e-09 1s 1s 624393670e-09 0s 0s 624394350e-09 1s 1s 624396310e-09 1s 1s 624403910e-09 0s 0s 624404590e-09 1s 1s 624406590e-09 1s 1s 624414150e-09 0s 0s 624414830e-09 1s 1s 624416870e-09 1s 1s 624424390e-09 0s 0s 624425070e-09 1s 1s 624427150e-09 1s 1s 624434630e-09 0s 0s 624435310e-09 1s 1s 624437430e-09 1s 1s 624444870e-09 0s 0s 624445550e-09 1s 1s 624447710e-09 1s 1s 624455110e-09 0s 0s 624455790e-09 1s 1s 624457990e-09 1s 1s 624465350e-09 0s 0s 624466030e-09 1s 1s 624468270e-09 1s 1s 624475590e-09 0s 0s 624476270e-09 1s 1s 624478550e-09 1s 1s 624485830e-09 0s 0s 624486510e-09 1s 1s 624488830e-09 1s 1s 624496070e-09 0s 0s 624496750e-09 1s 1s 624499110e-09 1s 1s 624506310e-09 0s 0s 624506990e-09 1s 1s 624509390e-09 1s 1s 624516550e-09 0s 0s 624517230e-09 1s 1s 624519670e-09 1s 1s 624526790e-09 0s 0s 624527470e-09 1s 1s 624529950e-09 1s 1s 624537030e-09 0s 0s 624537710e-09 1s 1s 624540230e-09 1s 1s 624547270e-09 0s 0s 624547950e-09 1s 1s 624550510e-09 1s 1s 624557510e-09 0s 0s 624558190e-09 1s 1s 624560790e-09 1s 1s 624567750e-09 0s 0s 624568430e-09 1s 1s 624571070e-09 1s 1s 624577990e-09 0s 0s 624578670e-09 1s 1s 624581350e-09 1s 1s 624588230e-09 0s 0s 624588910e-09 1s 1s 624591630e-09 1s 1s 624598470e-09 0s 0s 624599150e-09 1s 1s 624601910e-09 1s 1s 624608710e-09 0s 0s 624609390e-09 1s 1s 624612190e-09 1s 1s 624618950e-09 0s 0s 624619630e-09 1s 1s 624622470e-09 1s 1s 624629190e-09 0s 0s 624629870e-09 1s 1s 624632750e-09 1s 1s 624639430e-09 0s 0s 624640110e-09 1s 1s 624643030e-09 1s 1s 624649670e-09 0s 0s 624650350e-09 1s 1s 624653310e-09 1s 1s 624659910e-09 0s 0s 624660590e-09 1s 1s 624663590e-09 1s 1s 624670150e-09 0s 0s 624670830e-09 1s 1s 624673870e-09 1s 1s 624680390e-09 0s 0s 624681070e-09 1s 1s 624684150e-09 1s 1s 624690630e-09 0s 0s 624691310e-09 1s 1s 624694430e-09 1s 1s 624700870e-09 0s 0s 624701550e-09 1s 1s 624704710e-09 1s 1s 624711110e-09 0s 0s 624711790e-09 1s 1s 624714990e-09 1s 1s 624721350e-09 0s 0s 624722030e-09 1s 1s 624725270e-09 1s 1s 624731590e-09 0s 0s 624732270e-09 1s 1s 624735550e-09 1s 1s 624741830e-09 0s 0s 624742510e-09 1s 1s 624745830e-09 1s 1s 624752070e-09 0s 0s 624752750e-09 1s 1s 624756110e-09 1s 1s 624762310e-09 0s 0s 624762990e-09 1s 1s 624766390e-09 1s 1s 624772550e-09 0s 0s 624773230e-09 1s 1s 624776670e-09 1s 1s 624782790e-09 0s 0s 624783470e-09 1s 1s 624786950e-09 1s 1s 624793030e-09 0s 0s 624793710e-09 1s 1s 624797230e-09 1s 1s 624803270e-09 0s 0s 624803950e-09 1s 1s 624807510e-09 1s 1s 624813510e-09 0s 0s 624814190e-09 1s 1s 624817790e-09 1s 1s 624823750e-09 0s 0s 624824430e-09 1s 1s 624828070e-09 1s 1s 624833990e-09 0s 0s 624834670e-09 1s 1s 624838350e-09 1s 1s 624844230e-09 0s 0s 624844910e-09 1s 1s 624848630e-09 1s 1s 624854470e-09 0s 0s 624855150e-09 1s 1s 624858910e-09 1s 1s 624864710e-09 0s 0s 624865390e-09 1s 1s 624869190e-09 1s 1s 624874950e-09 0s 0s 624875630e-09 1s 1s 624879470e-09 1s 1s 624885190e-09 0s 0s 624885870e-09 1s 1s 624889750e-09 1s 1s 624895430e-09 0s 0s 624896110e-09 1s 1s 624900030e-09 1s 1s 624905670e-09 0s 0s 624906350e-09 1s 1s 624910310e-09 1s 1s 624915910e-09 0s 0s 624916590e-09 1s 1s 624920590e-09 1s 1s 624926150e-09 0s 0s 624926830e-09 1s 1s 624930870e-09 1s 1s 624936390e-09 0s 0s 624937070e-09 1s 1s 624941150e-09 1s 1s 624946630e-09 0s 0s 624947310e-09 1s 1s 624951430e-09 1s 1s 624956870e-09 0s 0s 624957550e-09 1s 1s 624961710e-09 1s 1s 624967110e-09 0s 0s 624967790e-09 1s 1s 624971990e-09 1s 1s 624977350e-09 0s 0s 624978030e-09 1s 1s 624982270e-09 1s 1s 624987590e-09 0s 0s 624988270e-09 1s 1s 624992550e-09 1s 1s 624997830e-09 0s 0s 624998510e-09 1s 1s 625002830e-09 1s 1s 625008070e-09 0s 0s 625008750e-09 1s 1s 625013110e-09 1s 1s 625018310e-09 0s 0s 625018990e-09 1s 1s 625023390e-09 1s 1s 625028550e-09 0s 0s 625029230e-09 1s 1s 625033670e-09 1s 1s 625038790e-09 0s 0s 625039470e-09 1s 1s 625043950e-09 1s 1s 625049030e-09 0s 0s 625049710e-09 1s 1s 625054230e-09 1s 1s 625059270e-09 0s 0s 625059950e-09 1s 1s 625064510e-09 1s 1s 625069510e-09 0s 0s 625070190e-09 1s 1s 625074790e-09 1s 1s 625079750e-09 0s 0s 625080430e-09 1s 1s 625085070e-09 1s 1s 625089990e-09 0s 0s 625090670e-09 1s 1s 625095350e-09 1s 1s 625100230e-09 0s 0s 625100910e-09 1s 1s 625105630e-09 1s 1s 625110470e-09 0s 0s 625111150e-09 1s 1s 625115910e-09 1s 1s 625120710e-09 0s 0s 625121390e-09 1s 1s 625126190e-09 1s 1s 625130950e-09 0s 0s 625131630e-09 1s 1s 625136470e-09 1s 1s 625141190e-09 0s 0s 625141870e-09 1s 1s 625146750e-09 1s 1s 625151430e-09 0s 0s 625152110e-09 1s 1s 625157030e-09 1s 1s 625161670e-09 0s 0s 625162350e-09 1s 1s 625167310e-09 1s 1s 625171910e-09 0s 0s 625172590e-09 1s 1s 625177590e-09 1s 1s 625182150e-09 0s 0s 625182830e-09 1s 1s 625187870e-09 1s 1s 625192390e-09 0s 0s 625193070e-09 1s 1s 625198150e-09 1s 1s 625202630e-09 0s 0s 625203310e-09 1s 1s 625208430e-09 1s 1s 625212870e-09 0s 0s 625213550e-09 1s 1s 625218710e-09 1s 1s 625223110e-09 0s 0s 625223790e-09 1s 1s 625228990e-09 1s 1s 625233350e-09 0s 0s 625234030e-09 1s 1s 625239270e-09 1s 1s 625243590e-09 0s 0s 625244270e-09 1s 1s 625249550e-09 1s 1s 625253830e-09 0s 0s 625254510e-09 1s 1s 625259830e-09 1s 1s 625264070e-09 0s 0s 625264750e-09 1s 1s 625270110e-09 1s 1s 625274310e-09 0s 0s 625274990e-09 1s 1s 625280390e-09 1s 1s 625284550e-09 0s 0s 625285230e-09 1s 1s 625290670e-09 1s 1s 625294790e-09 0s 0s 625295470e-09 1s 1s 625300950e-09 1s 1s 625305030e-09 0s 0s 625305710e-09 1s 1s 625311230e-09 1s 1s 625315270e-09 0s 0s 625315950e-09 1s 1s 625321510e-09 1s 1s 625325510e-09 0s 0s 625326190e-09 1s 1s 625331790e-09 1s 1s 625335750e-09 0s 0s 625336430e-09 1s 1s 625342070e-09 1s 1s 625345990e-09 0s 0s 625346670e-09 1s 1s 625352350e-09 1s 1s 625356230e-09 0s 0s 625356910e-09 1s 1s 625362630e-09 1s 1s 625366470e-09 0s 0s 625367150e-09 1s 1s 625372910e-09 1s 1s 625376710e-09 0s 0s 625377390e-09 1s 1s 625383190e-09 1s 1s 625386950e-09 0s 0s 625387630e-09 1s 1s 625393470e-09 1s 1s 625397190e-09 0s 0s 625397870e-09 1s 1s 625403750e-09 1s 1s 625407430e-09 0s 0s 625408110e-09 1s 1s 625414030e-09 1s 1s 625417670e-09 0s 0s 625418350e-09 1s 1s 625424310e-09 1s 1s 625427910e-09 0s 0s 625428590e-09 1s 1s 625434590e-09 1s 1s 625438150e-09 0s 0s 625438830e-09 1s 1s 625444870e-09 1s 1s 625448390e-09 0s 0s 625449070e-09 1s 1s 625455150e-09 1s 1s 625458630e-09 0s 0s 625459310e-09 1s 1s 625465430e-09 1s 1s 625468870e-09 0s 0s 625469550e-09 1s 1s 625475710e-09 1s 1s 625479110e-09 0s 0s 625479790e-09 1s 1s 625485990e-09 1s 1s 625489350e-09 0s 0s 625490030e-09 1s 1s 625496270e-09 1s 1s 625499590e-09 0s 0s 625500270e-09 1s 1s 625506550e-09 1s 1s 625509830e-09 0s 0s 625510510e-09 1s 1s 625516830e-09 1s 1s 625520070e-09 0s 0s 625520750e-09 1s 1s 625527110e-09 1s 1s 625530310e-09 0s 0s 625530990e-09 1s 1s 625537390e-09 1s 1s 625540550e-09 0s 0s 625541230e-09 1s 1s 625547670e-09 1s 1s 625550790e-09 0s 0s 625551470e-09 1s 1s 625557950e-09 1s 1s 625561030e-09 0s 0s 625561710e-09 1s 1s 625568230e-09 1s 1s 625571270e-09 0s 0s 625571950e-09 1s 1s 625578510e-09 1s 1s 625581510e-09 0s 0s 625582190e-09 1s 1s 625588790e-09 1s 1s 625591750e-09 0s 0s 625592430e-09 1s 1s 625599070e-09 1s 1s 625601990e-09 0s 0s 625602670e-09 1s 1s 625609350e-09 1s 1s 625612230e-09 0s 0s 625612910e-09 1s 1s 625619630e-09 1s 1s 625622470e-09 0s 0s 625623150e-09 1s 1s 625629910e-09 1s 1s 625632710e-09 0s 0s 625633390e-09 1s 1s 625640190e-09 1s 1s 625642950e-09 0s 0s 625643630e-09 1s 1s 625650470e-09 1s 1s 625653190e-09 0s 0s 625653870e-09 1s 1s 625660750e-09 1s 1s 625663430e-09 0s 0s 625664110e-09 1s 1s 625671030e-09 1s 1s 625673670e-09 0s 0s 625674350e-09 1s 1s 625681310e-09 1s 1s 625683910e-09 0s 0s 625684590e-09 1s 1s 625691590e-09 1s 1s 625694150e-09 0s 0s 625694830e-09 1s 1s 625701870e-09 1s 1s 625704390e-09 0s 0s 625705070e-09 1s 1s 625712150e-09 1s 1s 625714630e-09 0s 0s 625715310e-09 1s 1s 625722430e-09 1s 1s 625724870e-09 0s 0s 625725550e-09 1s 1s 625732710e-09 1s 1s 625735110e-09 0s 0s 625735790e-09 1s 1s 625742990e-09 1s 1s 625745350e-09 0s 0s 625746030e-09 1s 1s 625753270e-09 1s 1s 625755590e-09 0s 0s 625756270e-09 1s 1s 625763550e-09 1s 1s 625765830e-09 0s 0s 625766510e-09 1s 1s 625773830e-09 1s 1s 625776070e-09 0s 0s 625776750e-09 1s 1s 625784110e-09 1s 1s 625786310e-09 0s 0s 625786990e-09 1s 1s 625794390e-09 1s 1s 625796550e-09 0s 0s 625797230e-09 1s 1s 625804670e-09 1s 1s 625806790e-09 0s 0s 625807470e-09 1s 1s 625814950e-09 1s 1s 625817030e-09 0s 0s 625817710e-09 1s 1s 625825230e-09 1s 1s 625827270e-09 0s 0s 625827950e-09 1s 1s 625835510e-09 1s 1s 625837510e-09 0s 0s 625838190e-09 1s 1s 625845790e-09 1s 1s 625847750e-09 0s 0s 625848430e-09 1s 1s 625856070e-09 1s 1s 625857990e-09 0s 0s 625858670e-09 1s 1s 625866350e-09 1s 1s 625868230e-09 0s 0s 625868910e-09 1s 1s 625876630e-09 1s 1s 625878470e-09 0s 0s 625879150e-09 1s 1s 625886910e-09 1s 1s 625888710e-09 0s 0s 625889390e-09 1s 1s 625897190e-09 1s 1s 625898950e-09 0s 0s 625899630e-09 1s 1s 625907470e-09 1s 1s 625909190e-09 0s 0s 625909870e-09 1s 1s 625917750e-09 1s 1s 625919430e-09 0s 0s 625920110e-09 1s 1s 625928030e-09 1s 1s 625929670e-09 0s 0s 625930350e-09 1s 1s 625938310e-09 1s 1s 625939910e-09 0s 0s 625940590e-09 1s 1s 625948590e-09 1s 1s 625950150e-09 0s 0s 625950830e-09 1s 1s 625958870e-09 1s 1s 625960390e-09 0s 0s 625961070e-09 1s 1s 625969150e-09 1s 1s 625970630e-09 0s 0s 625971310e-09 1s 1s 625979430e-09 1s 1s 625980870e-09 0s 0s 625981550e-09 1s 1s 625989710e-09 1s 1s 625991110e-09 0s 0s 625991790e-09 1s 1s 625999990e-09 1s 1s 626001350e-09 0s 0s 626002030e-09 1s 1s 626010270e-09 1s 1s 626011590e-09 0s 0s 626012270e-09 1s 1s 626020550e-09 1s 1s 626021830e-09 0s 0s 626022510e-09 1s 1s 626030830e-09 1s 1s 626032070e-09 0s 0s 626032750e-09 1s 1s 626041110e-09 1s 1s 626042310e-09 0s 0s 626042990e-09 1s 1s 626051390e-09 1s 1s 626052550e-09 0s 0s 626053230e-09 1s 1s 626061670e-09 1s 1s 626062790e-09 0s 0s 626063470e-09 1s 1s 626071950e-09 1s 1s 626073030e-09 0s 0s 626073710e-09 1s 1s 626082230e-09 1s 1s 626083270e-09 0s 0s 626083950e-09 1s 1s 626092510e-09 1s 1s 626093510e-09 0s 0s 626094190e-09 1s 1s 626102790e-09 1s 1s 626103750e-09 0s 0s 626104430e-09 1s 1s 626113070e-09 1s 1s 626113990e-09 0s 0s 626114670e-09 1s 1s 626123350e-09 1s 1s 626124230e-09 0s 0s 626124910e-09 1s 1s 626133630e-09 1s 1s 626134470e-09 0s 0s 626135150e-09 1s 1s 626143910e-09 1s 1s 626144710e-09 0s 0s 626145390e-09 1s 1s 626154190e-09 1s 1s 626154950e-09 0s 0s 626155630e-09 1s 1s 626164470e-09 1s 1s 626165190e-09 0s 0s 626165870e-09 1s 1s 626174750e-09 1s 1s 626175430e-09 0s 0s 626176110e-09 1s 1s 626185030e-09 1s 1s 626185670e-09 0s 0s 626186350e-09 1s 1s 626195310e-09 1s 1s 626195910e-09 0s 0s 626196590e-09 1s 1s 626205590e-09 1s 1s 626206150e-09 0s 0s 626206830e-09 1s 1s 626215870e-09 1s 1s 626216390e-09 0s 0s 626217070e-09 1s 1s 626226150e-09 1s 1s 626226630e-09 0s 0s 626227310e-09 1s 1s 626236430e-09 1s 1s 626236870e-09 0s 0s 626237550e-09 1s 1s 626246710e-09 1s 1s 626247110e-09 0s 0s 626247790e-09 1s 1s 626256990e-09 1s 1s 626257350e-09 0s 0s 626258030e-09 1s 1s 626267270e-09 1s 1s 626267590e-09 0s 0s 626268270e-09 1s 1s 626277550e-09 1s 1s 626277830e-09 0s 0s 626278510e-09 1s 1s 626287830e-09 1s 1s 626288070e-09 0s 0s 626288750e-09 1s 1s 626298110e-09 1s 1s 626298310e-09 0s 0s 626298990e-09 1s 1s 626308390e-09 1s 1s 626308550e-09 0s 0s 626309230e-09 1s 1s 626318670e-09 1s 1s 626318790e-09 0s 0s 626319470e-09 1s 1s 626328950e-09 1s 1s 626329030e-09 0s 0s 626329710e-09 1s 1s 626339230e-09 1s 1s 626339270e-09 0s 0s 626339950e-09 1s 1s 626349510e-09 0s 0s 626350190e-09 1s 1s 626359750e-09 0s 0s 626359790e-09 0s 0s 626360430e-09 1s 1s 626369990e-09 0s 0s 626370070e-09 0s 0s 626370670e-09 1s 1s 626380230e-09 0s 0s 626380350e-09 0s 0s 626380910e-09 1s 1s 626390470e-09 0s 0s 626390630e-09 0s 0s 626391150e-09 1s 1s 626400710e-09 0s 0s 626400910e-09 0s 0s 626401390e-09 1s 1s 626410950e-09 0s 0s 626411190e-09 0s 0s 626411630e-09 1s 1s 626421190e-09 0s 0s 626421470e-09 0s 0s 626421870e-09 1s 1s 626431430e-09 0s 0s 626431750e-09 0s 0s 626432110e-09 1s 1s 626441670e-09 0s 0s 626442030e-09 0s 0s 626442350e-09 1s 1s 626451910e-09 0s 0s 626452310e-09 0s 0s 626452590e-09 1s 1s 626462150e-09 0s 0s 626462590e-09 0s 0s 626462830e-09 1s 1s 626472390e-09 0s 0s 626472870e-09 0s 0s 626473070e-09 1s 1s 626482630e-09 0s 0s 626483150e-09 0s 0s 626483310e-09 1s 1s 626492870e-09 0s 0s 626493430e-09 0s 0s 626493550e-09 1s 1s 626503110e-09 0s 0s 626503710e-09 0s 0s 626503790e-09 1s 1s 626513350e-09 0s 0s 626513990e-09 0s 0s 626514030e-09 1s 1s 626523590e-09 0s 0s 626524270e-09 1s 1s 626524310e-09 1s 1s 626533870e-09 0s 0s 626534510e-09 1s 1s 626534590e-09 1s 1s 626544110e-09 0s 0s 626544750e-09 1s 1s 626544870e-09 1s 1s 626554350e-09 0s 0s 626554990e-09 1s 1s 626555150e-09 1s 1s 626564590e-09 0s 0s 626565230e-09 1s 1s 626565430e-09 1s 1s 626574830e-09 0s 0s 626575470e-09 1s 1s 626575710e-09 1s 1s 626585070e-09 0s 0s 626585710e-09 1s 1s 626585990e-09 1s 1s 626595310e-09 0s 0s 626595950e-09 1s 1s 626596270e-09 1s 1s 626605550e-09 0s 0s 626606190e-09 1s 1s 626606550e-09 1s 1s 626615790e-09 0s 0s 626616430e-09 1s 1s 626616830e-09 1s 1s 626626030e-09 0s 0s 626626670e-09 1s 1s 626627110e-09 1s 1s 626636270e-09 0s 0s 626636910e-09 1s 1s 626637390e-09 1s 1s 626646510e-09 0s 0s 626647150e-09 1s 1s 626647670e-09 1s 1s 626656750e-09 0s 0s 626657390e-09 1s 1s 626657950e-09 1s 1s 626666990e-09 0s 0s 626667630e-09 1s 1s 626668230e-09 1s 1s 626677230e-09 0s 0s 626677870e-09 1s 1s 626678510e-09 1s 1s 626687470e-09 0s 0s 626688110e-09 1s 1s 626688790e-09 1s 1s 626697710e-09 0s 0s 626698350e-09 1s 1s 626699070e-09 1s 1s 626707950e-09 0s 0s 626708590e-09 1s 1s 626709350e-09 1s 1s 626718190e-09 0s 0s 626718830e-09 1s 1s 626719630e-09 1s 1s 626728430e-09 0s 0s 626729070e-09 1s 1s 626729910e-09 1s 1s 626738670e-09 0s 0s 626739310e-09 1s 1s 626740190e-09 1s 1s 626748910e-09 0s 0s 626749550e-09 1s 1s 626750470e-09 1s 1s 626759150e-09 0s 0s 626759790e-09 1s 1s 626760750e-09 1s 1s 626769390e-09 0s 0s 626770030e-09 1s 1s 626771030e-09 1s 1s 626779630e-09 0s 0s 626780270e-09 1s 1s 626781310e-09 1s 1s 626789870e-09 0s 0s 626790510e-09 1s 1s 626791590e-09 1s 1s 626800110e-09 0s 0s 626800750e-09 1s 1s 626801870e-09 1s 1s 626810350e-09 0s 0s 626810990e-09 1s 1s 626812150e-09 1s 1s 626820590e-09 0s 0s 626821230e-09 1s 1s 626822430e-09 1s 1s 626830830e-09 0s 0s 626831470e-09 1s 1s 626832710e-09 1s 1s 626841070e-09 0s 0s 626841710e-09 1s 1s 626842990e-09 1s 1s 626851310e-09 0s 0s 626851950e-09 1s 1s 626853270e-09 1s 1s 626861550e-09 0s 0s 626862190e-09 1s 1s 626863550e-09 1s 1s 626871790e-09 0s 0s 626872430e-09 1s 1s 626873830e-09 1s 1s 626882030e-09 0s 0s 626882670e-09 1s 1s 626884110e-09 1s 1s 626892270e-09 0s 0s 626892910e-09 1s 1s 626894390e-09 1s 1s 626902510e-09 0s 0s 626903150e-09 1s 1s 626904670e-09 1s 1s 626912750e-09 0s 0s 626913390e-09 1s 1s 626914950e-09 1s 1s 626922990e-09 0s 0s 626923630e-09 1s 1s 626925230e-09 1s 1s 626933230e-09 0s 0s 626933870e-09 1s 1s 626935510e-09 1s 1s 626943470e-09 0s 0s 626944110e-09 1s 1s 626945790e-09 1s 1s 626953710e-09 0s 0s 626954350e-09 1s 1s 626956070e-09 1s 1s 626963950e-09 0s 0s 626964590e-09 1s 1s 626966350e-09 1s 1s 626974190e-09 0s 0s 626974830e-09 1s 1s 626976630e-09 1s 1s 626984430e-09 0s 0s 626985070e-09 1s 1s 626986910e-09 1s 1s 626994670e-09 0s 0s 626995310e-09 1s 1s 626997190e-09 1s 1s 627004910e-09 0s 0s 627005550e-09 1s 1s 627007470e-09 1s 1s 627015150e-09 0s 0s 627015790e-09 1s 1s 627017750e-09 1s 1s 627025390e-09 0s 0s 627026030e-09 1s 1s 627028030e-09 1s 1s 627035630e-09 0s 0s 627036270e-09 1s 1s 627038310e-09 1s 1s 627045870e-09 0s 0s 627046510e-09 1s 1s 627048590e-09 1s 1s 627056110e-09 0s 0s 627056750e-09 1s 1s 627058870e-09 1s 1s 627066350e-09 0s 0s 627066990e-09 1s 1s 627069150e-09 1s 1s 627076590e-09 0s 0s 627077230e-09 1s 1s 627079430e-09 1s 1s 627086830e-09 0s 0s 627087470e-09 1s 1s 627089710e-09 1s 1s 627097070e-09 0s 0s 627097710e-09 1s 1s 627099990e-09 1s 1s 627107310e-09 0s 0s 627107950e-09 1s 1s 627110270e-09 1s 1s 627117550e-09 0s 0s 627118190e-09 1s 1s 627120550e-09 1s 1s 627127790e-09 0s 0s 627128430e-09 1s 1s 627130830e-09 1s 1s 627138030e-09 0s 0s 627138670e-09 1s 1s 627141110e-09 1s 1s 627148270e-09 0s 0s 627148910e-09 1s 1s 627151390e-09 1s 1s 627158510e-09 0s 0s 627159150e-09 1s 1s 627161670e-09 1s 1s 627168750e-09 0s 0s 627169390e-09 1s 1s 627171950e-09 1s 1s 627178990e-09 0s 0s 627179630e-09 1s 1s 627182230e-09 1s 1s 627189230e-09 0s 0s 627189870e-09 1s 1s 627192510e-09 1s 1s 627199470e-09 0s 0s 627200110e-09 1s 1s 627202790e-09 1s 1s 627209710e-09 0s 0s 627210350e-09 1s 1s 627213070e-09 1s 1s 627219950e-09 0s 0s 627220590e-09 1s 1s 627223350e-09 1s 1s 627230190e-09 0s 0s 627230830e-09 1s 1s 627233630e-09 1s 1s 627240430e-09 0s 0s 627241070e-09 1s 1s 627243910e-09 1s 1s 627250670e-09 0s 0s 627251310e-09 1s 1s 627254190e-09 1s 1s 627260910e-09 0s 0s 627261550e-09 1s 1s 627264470e-09 1s 1s 627271150e-09 0s 0s 627271790e-09 1s 1s 627274750e-09 1s 1s 627281390e-09 0s 0s 627282030e-09 1s 1s 627285030e-09 1s 1s 627291630e-09 0s 0s 627292270e-09 1s 1s 627295310e-09 1s 1s 627301870e-09 0s 0s 627302510e-09 1s 1s 627305590e-09 1s 1s 627312110e-09 0s 0s 627312750e-09 1s 1s 627315870e-09 1s 1s 627322350e-09 0s 0s 627322990e-09 1s 1s 627326150e-09 1s 1s 627332590e-09 0s 0s 627333230e-09 1s 1s 627336430e-09 1s 1s 627342830e-09 0s 0s 627343470e-09 1s 1s 627346710e-09 1s 1s 627353070e-09 0s 0s 627353710e-09 1s 1s 627356990e-09 1s 1s 627363310e-09 0s 0s 627363950e-09 1s 1s 627367270e-09 1s 1s 627373550e-09 0s 0s 627374190e-09 1s 1s 627377550e-09 1s 1s 627383790e-09 0s 0s 627384430e-09 1s 1s 627387830e-09 1s 1s 627394030e-09 0s 0s 627394670e-09 1s 1s 627398110e-09 1s 1s 627404270e-09 0s 0s 627404910e-09 1s 1s 627408390e-09 1s 1s 627414510e-09 0s 0s 627415150e-09 1s 1s 627418670e-09 1s 1s 627424750e-09 0s 0s 627425390e-09 1s 1s 627428950e-09 1s 1s 627434990e-09 0s 0s 627435630e-09 1s 1s 627439230e-09 1s 1s 627445230e-09 0s 0s 627445870e-09 1s 1s 627449510e-09 1s 1s 627455470e-09 0s 0s 627456110e-09 1s 1s 627459790e-09 1s 1s 627465710e-09 0s 0s 627466350e-09 1s 1s 627470070e-09 1s 1s 627475950e-09 0s 0s 627476590e-09 1s 1s 627480350e-09 1s 1s 627486190e-09 0s 0s 627486830e-09 1s 1s 627490630e-09 1s 1s 627496430e-09 0s 0s 627497070e-09 1s 1s 627500910e-09 1s 1s 627506670e-09 0s 0s 627507310e-09 1s 1s 627511190e-09 1s 1s 627516910e-09 0s 0s 627517550e-09 1s 1s 627521470e-09 1s 1s 627527150e-09 0s 0s 627527790e-09 1s 1s 627531750e-09 1s 1s 627537390e-09 0s 0s 627538030e-09 1s 1s 627542030e-09 1s 1s 627547630e-09 0s 0s 627548270e-09 1s 1s 627552310e-09 1s 1s 627557870e-09 0s 0s 627558510e-09 1s 1s 627562590e-09 1s 1s 627568110e-09 0s 0s 627568750e-09 1s 1s 627572870e-09 1s 1s 627578350e-09 0s 0s 627578990e-09 1s 1s 627583150e-09 1s 1s 627588590e-09 0s 0s 627589230e-09 1s 1s 627593430e-09 1s 1s 627598830e-09 0s 0s 627599470e-09 1s 1s 627603710e-09 1s 1s 627609070e-09 0s 0s 627609710e-09 1s 1s 627613990e-09 1s 1s 627619310e-09 0s 0s 627619950e-09 1s 1s 627624270e-09 1s 1s 627629550e-09 0s 0s 627630190e-09 1s 1s 627634550e-09 1s 1s 627639790e-09 0s 0s 627640430e-09 1s 1s 627644830e-09 1s 1s 627650030e-09 0s 0s 627650670e-09 1s 1s 627655110e-09 1s 1s 627660270e-09 0s 0s 627660910e-09 1s 1s 627665390e-09 1s 1s 627670510e-09 0s 0s 627671150e-09 1s 1s 627675670e-09 1s 1s 627680750e-09 0s 0s 627681390e-09 1s 1s 627685950e-09 1s 1s 627690990e-09 0s 0s 627691630e-09 1s 1s 627696230e-09 1s 1s 627701230e-09 0s 0s 627701870e-09 1s 1s 627706510e-09 1s 1s 627711470e-09 0s 0s 627712110e-09 1s 1s 627716790e-09 1s 1s 627721710e-09 0s 0s 627722350e-09 1s 1s 627727070e-09 1s 1s 627731950e-09 0s 0s 627732590e-09 1s 1s 627737350e-09 1s 1s 627742190e-09 0s 0s 627742830e-09 1s 1s 627747630e-09 1s 1s 627752430e-09 0s 0s 627753070e-09 1s 1s 627757910e-09 1s 1s 627762670e-09 0s 0s 627763310e-09 1s 1s 627768190e-09 1s 1s 627772910e-09 0s 0s 627773550e-09 1s 1s 627778470e-09 1s 1s 627783150e-09 0s 0s 627783790e-09 1s 1s 627788750e-09 1s 1s 627793390e-09 0s 0s 627794030e-09 1s 1s 627799030e-09 1s 1s 627803630e-09 0s 0s 627804270e-09 1s 1s 627809310e-09 1s 1s 627813870e-09 0s 0s 627814510e-09 1s 1s 627819590e-09 1s 1s 627824110e-09 0s 0s 627824750e-09 1s 1s 627829870e-09 1s 1s 627834350e-09 0s 0s 627834990e-09 1s 1s 627840150e-09 1s 1s 627844590e-09 0s 0s 627845230e-09 1s 1s 627850430e-09 1s 1s 627854830e-09 0s 0s 627855470e-09 1s 1s 627860710e-09 1s 1s 627865070e-09 0s 0s 627865710e-09 1s 1s 627870990e-09 1s 1s 627875310e-09 0s 0s 627875950e-09 1s 1s 627881270e-09 1s 1s 627885550e-09 0s 0s 627886190e-09 1s 1s 627891550e-09 1s 1s 627895790e-09 0s 0s 627896430e-09 1s 1s 627901830e-09 1s 1s 627906030e-09 0s 0s 627906670e-09 1s 1s 627912110e-09 1s 1s 627916270e-09 0s 0s 627916910e-09 1s 1s 627922390e-09 1s 1s 627926510e-09 0s 0s 627927150e-09 1s 1s 627932670e-09 1s 1s 627936750e-09 0s 0s 627937390e-09 1s 1s 627942950e-09 1s 1s 627946990e-09 0s 0s 627947630e-09 1s 1s 627953230e-09 1s 1s 627957230e-09 0s 0s 627957870e-09 1s 1s 627963510e-09 1s 1s 627967470e-09 0s 0s 627968110e-09 1s 1s 627973790e-09 1s 1s 627977710e-09 0s 0s 627978350e-09 1s 1s 627984070e-09 1s 1s 627987950e-09 0s 0s 627988590e-09 1s 1s 627994350e-09 1s 1s 627998190e-09 0s 0s 627998830e-09 1s 1s 628004630e-09 1s 1s 628008430e-09 0s 0s 628009070e-09 1s 1s 628014910e-09 1s 1s 628018670e-09 0s 0s 628019310e-09 1s 1s 628025190e-09 1s 1s 628028910e-09 0s 0s 628029550e-09 1s 1s 628035470e-09 1s 1s 628039150e-09 0s 0s 628039790e-09 1s 1s 628045750e-09 1s 1s 628049390e-09 0s 0s 628050030e-09 1s 1s 628056030e-09 1s 1s 628059630e-09 0s 0s 628060270e-09 1s 1s 628066310e-09 1s 1s 628069870e-09 0s 0s 628070510e-09 1s 1s 628076590e-09 1s 1s 628080110e-09 0s 0s 628080750e-09 1s 1s 628086870e-09 1s 1s 628090350e-09 0s 0s 628090990e-09 1s 1s 628097150e-09 1s 1s 628100590e-09 0s 0s 628101230e-09 1s 1s 628107430e-09 1s 1s 628110830e-09 0s 0s 628111470e-09 1s 1s 628117710e-09 1s 1s 628121070e-09 0s 0s 628121710e-09 1s 1s 628127990e-09 1s 1s 628131310e-09 0s 0s 628131950e-09 1s 1s 628138270e-09 1s 1s 628141550e-09 0s 0s 628142190e-09 1s 1s 628148550e-09 1s 1s 628151790e-09 0s 0s 628152430e-09 1s 1s 628158830e-09 1s 1s 628162030e-09 0s 0s 628162670e-09 1s 1s 628169110e-09 1s 1s 628172270e-09 0s 0s 628172910e-09 1s 1s 628179390e-09 1s 1s 628182510e-09 0s 0s 628183150e-09 1s 1s 628189670e-09 1s 1s 628192750e-09 0s 0s 628193390e-09 1s 1s 628199950e-09 1s 1s 628202990e-09 0s 0s 628203630e-09 1s 1s 628210230e-09 1s 1s 628213230e-09 0s 0s 628213870e-09 1s 1s 628220510e-09 1s 1s 628223470e-09 0s 0s 628224110e-09 1s 1s 628230790e-09 1s 1s 628233710e-09 0s 0s 628234350e-09 1s 1s 628241070e-09 1s 1s 628243950e-09 0s 0s 628244590e-09 1s 1s 628251350e-09 1s 1s 628254190e-09 0s 0s 628254830e-09 1s 1s 628261630e-09 1s 1s 628264430e-09 0s 0s 628265070e-09 1s 1s 628271910e-09 1s 1s 628274670e-09 0s 0s 628275310e-09 1s 1s 628282190e-09 1s 1s 628284910e-09 0s 0s 628285550e-09 1s 1s 628292470e-09 1s 1s 628295150e-09 0s 0s 628295790e-09 1s 1s 628302750e-09 1s 1s 628305390e-09 0s 0s 628306030e-09 1s 1s 628313030e-09 1s 1s 628315630e-09 0s 0s 628316270e-09 1s 1s 628323310e-09 1s 1s 628325870e-09 0s 0s 628326510e-09 1s 1s 628333590e-09 1s 1s 628336110e-09 0s 0s 628336750e-09 1s 1s 628343870e-09 1s 1s 628346350e-09 0s 0s 628346990e-09 1s 1s 628354150e-09 1s 1s 628356590e-09 0s 0s 628357230e-09 1s 1s 628364430e-09 1s 1s 628366830e-09 0s 0s 628367470e-09 1s 1s 628374710e-09 1s 1s 628377070e-09 0s 0s 628377710e-09 1s 1s 628384990e-09 1s 1s 628387310e-09 0s 0s 628387950e-09 1s 1s 628395270e-09 1s 1s 628397550e-09 0s 0s 628398190e-09 1s 1s 628405550e-09 1s 1s 628407790e-09 0s 0s 628408430e-09 1s 1s 628415830e-09 1s 1s 628418030e-09 0s 0s 628418670e-09 1s 1s 628426110e-09 1s 1s 628428270e-09 0s 0s 628428910e-09 1s 1s 628436390e-09 1s 1s 628438510e-09 0s 0s 628439150e-09 1s 1s 628446670e-09 1s 1s 628448750e-09 0s 0s 628449390e-09 1s 1s 628456950e-09 1s 1s 628458990e-09 0s 0s 628459630e-09 1s 1s 628467230e-09 1s 1s 628469230e-09 0s 0s 628469870e-09 1s 1s 628477510e-09 1s 1s 628479470e-09 0s 0s 628480110e-09 1s 1s 628487790e-09 1s 1s 628489710e-09 0s 0s 628490350e-09 1s 1s 628498070e-09 1s 1s 628499950e-09 0s 0s 628500590e-09 1s 1s 628508350e-09 1s 1s 628510190e-09 0s 0s 628510830e-09 1s 1s 628518630e-09 1s 1s 628520430e-09 0s 0s 628521070e-09 1s 1s 628528910e-09 1s 1s 628530670e-09 0s 0s 628531310e-09 1s 1s 628539190e-09 1s 1s 628540910e-09 0s 0s 628541550e-09 1s 1s 628549470e-09 1s 1s 628551150e-09 0s 0s 628551790e-09 1s 1s 628559750e-09 1s 1s 628561390e-09 0s 0s 628562030e-09 1s 1s 628570030e-09 1s 1s 628571630e-09 0s 0s 628572270e-09 1s 1s 628580310e-09 1s 1s 628581870e-09 0s 0s 628582510e-09 1s 1s 628590590e-09 1s 1s 628592110e-09 0s 0s 628592750e-09 1s 1s 628600870e-09 1s 1s 628602350e-09 0s 0s 628602990e-09 1s 1s 628611150e-09 1s 1s 628612590e-09 0s 0s 628613230e-09 1s 1s 628621430e-09 1s 1s 628622830e-09 0s 0s 628623470e-09 1s 1s 628631710e-09 1s 1s 628633070e-09 0s 0s 628633710e-09 1s 1s 628641990e-09 1s 1s 628643310e-09 0s 0s 628643950e-09 1s 1s 628652270e-09 1s 1s 628653550e-09 0s 0s 628654190e-09 1s 1s 628662550e-09 1s 1s 628663790e-09 0s 0s 628664430e-09 1s 1s 628672830e-09 1s 1s 628674030e-09 0s 0s 628674670e-09 1s 1s 628683110e-09 1s 1s 628684270e-09 0s 0s 628684910e-09 1s 1s 628693390e-09 1s 1s 628694510e-09 0s 0s 628695150e-09 1s 1s 628703670e-09 1s 1s 628704750e-09 0s 0s 628705390e-09 1s 1s 628713950e-09 1s 1s 628714990e-09 0s 0s 628715630e-09 1s 1s 628724230e-09 1s 1s 628725230e-09 0s 0s 628725870e-09 1s 1s 628734510e-09 1s 1s 628735470e-09 0s 0s 628736110e-09 1s 1s 628744790e-09 1s 1s 628745710e-09 0s 0s 628746350e-09 1s 1s 628755070e-09 1s 1s 628755950e-09 0s 0s 628756590e-09 1s 1s 628765350e-09 1s 1s 628766190e-09 0s 0s 628766830e-09 1s 1s 628775630e-09 1s 1s 628776430e-09 0s 0s 628777070e-09 1s 1s 628785910e-09 1s 1s 628786670e-09 0s 0s 628787310e-09 1s 1s 628796190e-09 1s 1s 628796910e-09 0s 0s 628797550e-09 1s 1s 628806470e-09 1s 1s 628807150e-09 0s 0s 628807790e-09 1s 1s 628816750e-09 1s 1s 628817390e-09 0s 0s 628818030e-09 1s 1s 628827030e-09 1s 1s 628827630e-09 0s 0s 628828270e-09 1s 1s 628837310e-09 1s 1s 628837870e-09 0s 0s 628838510e-09 1s 1s 628847590e-09 1s 1s 628848110e-09 0s 0s 628848750e-09 1s 1s 628857870e-09 1s 1s 628858350e-09 0s 0s 628858990e-09 1s 1s 628868150e-09 1s 1s 628868590e-09 0s 0s 628869230e-09 1s 1s 628878430e-09 1s 1s 628878830e-09 0s 0s 628879470e-09 1s 1s 628888710e-09 1s 1s 628889070e-09 0s 0s 628889710e-09 1s 1s 628898990e-09 1s 1s 628899310e-09 0s 0s 628899950e-09 1s 1s 628909270e-09 1s 1s 628909550e-09 0s 0s 628910190e-09 1s 1s 628919550e-09 1s 1s 628919790e-09 0s 0s 628920430e-09 1s 1s 628929830e-09 1s 1s 628930030e-09 0s 0s 628930670e-09 1s 1s 628940110e-09 1s 1s 628940270e-09 0s 0s 628940910e-09 1s 1s 628950390e-09 1s 1s 628950510e-09 0s 0s 628951150e-09 1s 1s 628960670e-09 1s 1s 628960750e-09 0s 0s 628961390e-09 1s 1s 628970950e-09 1s 1s 628970990e-09 0s 0s 628971630e-09 1s 1s 628981230e-09 0s 0s 628981870e-09 1s 1s 628991470e-09 0s 0s 628991510e-09 0s 0s 628992110e-09 1s 1s 629001710e-09 0s 0s 629001790e-09 0s 0s 629002350e-09 1s 1s 629011950e-09 0s 0s 629012070e-09 0s 0s 629012590e-09 1s 1s 629022190e-09 0s 0s 629022350e-09 0s 0s 629022830e-09 1s 1s 629032430e-09 0s 0s 629032630e-09 0s 0s 629033070e-09 1s 1s 629042670e-09 0s 0s 629042910e-09 0s 0s 629043310e-09 1s 1s 629052910e-09 0s 0s 629053190e-09 0s 0s 629053550e-09 1s 1s 629063150e-09 0s 0s 629063470e-09 0s 0s 629063790e-09 1s 1s 629073390e-09 0s 0s 629073750e-09 0s 0s 629074030e-09 1s 1s 629083630e-09 0s 0s 629084030e-09 0s 0s 629084270e-09 1s 1s 629093870e-09 0s 0s 629094310e-09 0s 0s 629094510e-09 1s 1s 629104110e-09 0s 0s 629104590e-09 0s 0s 629104750e-09 1s 1s 629114350e-09 0s 0s 629114870e-09 0s 0s 629114990e-09 1s 1s 629124590e-09 0s 0s 629125150e-09 0s 0s 629125230e-09 1s 1s 629134830e-09 0s 0s 629135430e-09 0s 0s 629135470e-09 1s 1s 629145070e-09 0s 0s 629145710e-09 1s 1s 629145750e-09 1s 1s 629155350e-09 0s 0s 629155950e-09 1s 1s 629156030e-09 1s 1s 629165590e-09 0s 0s 629166190e-09 1s 1s 629166310e-09 1s 1s 629175830e-09 0s 0s 629176430e-09 1s 1s 629176590e-09 1s 1s 629186070e-09 0s 0s 629186670e-09 1s 1s 629186870e-09 1s 1s 629196310e-09 0s 0s 629196910e-09 1s 1s 629197150e-09 1s 1s 629206550e-09 0s 0s 629207150e-09 1s 1s 629207430e-09 1s 1s 629216790e-09 0s 0s 629217390e-09 1s 1s 629217710e-09 1s 1s 629227030e-09 0s 0s 629227630e-09 1s 1s 629227990e-09 1s 1s 629237270e-09 0s 0s 629237870e-09 1s 1s 629238270e-09 1s 1s 629247510e-09 0s 0s 629248110e-09 1s 1s 629248550e-09 1s 1s 629257750e-09 0s 0s 629258350e-09 1s 1s 629258830e-09 1s 1s 629267990e-09 0s 0s 629268590e-09 1s 1s 629269110e-09 1s 1s 629278230e-09 0s 0s 629278830e-09 1s 1s 629279390e-09 1s 1s 629288470e-09 0s 0s 629289070e-09 1s 1s 629289670e-09 1s 1s 629298710e-09 0s 0s 629299310e-09 1s 1s 629299950e-09 1s 1s 629308950e-09 0s 0s 629309550e-09 1s 1s 629310230e-09 1s 1s 629319190e-09 0s 0s 629319790e-09 1s 1s 629320510e-09 1s 1s 629329430e-09 0s 0s 629330030e-09 1s 1s 629330790e-09 1s 1s 629339670e-09 0s 0s 629340270e-09 1s 1s 629341070e-09 1s 1s 629349910e-09 0s 0s 629350510e-09 1s 1s 629351350e-09 1s 1s 629360150e-09 0s 0s 629360750e-09 1s 1s 629361630e-09 1s 1s 629370390e-09 0s 0s 629370990e-09 1s 1s 629371910e-09 1s 1s 629380630e-09 0s 0s 629381230e-09 1s 1s 629382190e-09 1s 1s 629390870e-09 0s 0s 629391470e-09 1s 1s 629392470e-09 1s 1s 629401110e-09 0s 0s 629401710e-09 1s 1s 629402750e-09 1s 1s 629411350e-09 0s 0s 629411950e-09 1s 1s 629413030e-09 1s 1s 629421590e-09 0s 0s 629422190e-09 1s 1s 629423310e-09 1s 1s 629431830e-09 0s 0s 629432430e-09 1s 1s 629433590e-09 1s 1s 629442070e-09 0s 0s 629442670e-09 1s 1s 629443870e-09 1s 1s 629452310e-09 0s 0s 629452910e-09 1s 1s 629454150e-09 1s 1s 629462550e-09 0s 0s 629463150e-09 1s 1s 629464430e-09 1s 1s 629472790e-09 0s 0s 629473390e-09 1s 1s 629474710e-09 1s 1s 629483030e-09 0s 0s 629483630e-09 1s 1s 629484990e-09 1s 1s 629493270e-09 0s 0s 629493870e-09 1s 1s 629495270e-09 1s 1s 629503510e-09 0s 0s 629504110e-09 1s 1s 629505550e-09 1s 1s 629513750e-09 0s 0s 629514350e-09 1s 1s 629515830e-09 1s 1s 629523990e-09 0s 0s 629524590e-09 1s 1s 629526110e-09 1s 1s 629534230e-09 0s 0s 629534830e-09 1s 1s 629536390e-09 1s 1s 629544470e-09 0s 0s 629545070e-09 1s 1s 629546670e-09 1s 1s 629554710e-09 0s 0s 629555310e-09 1s 1s 629556950e-09 1s 1s 629564950e-09 0s 0s 629565550e-09 1s 1s 629567230e-09 1s 1s 629575190e-09 0s 0s 629575790e-09 1s 1s 629577510e-09 1s 1s 629585430e-09 0s 0s 629586030e-09 1s 1s 629587790e-09 1s 1s 629595670e-09 0s 0s 629596270e-09 1s 1s 629598070e-09 1s 1s 629605910e-09 0s 0s 629606510e-09 1s 1s 629608350e-09 1s 1s 629616150e-09 0s 0s 629616750e-09 1s 1s 629618630e-09 1s 1s 629626390e-09 0s 0s 629626990e-09 1s 1s 629628910e-09 1s 1s 629636630e-09 0s 0s 629637230e-09 1s 1s 629639190e-09 1s 1s 629646870e-09 0s 0s 629647470e-09 1s 1s 629649470e-09 1s 1s 629657110e-09 0s 0s 629657710e-09 1s 1s 629659750e-09 1s 1s 629667350e-09 0s 0s 629667950e-09 1s 1s 629670030e-09 1s 1s 629677590e-09 0s 0s 629678190e-09 1s 1s 629680310e-09 1s 1s 629687830e-09 0s 0s 629688430e-09 1s 1s 629690590e-09 1s 1s 629698070e-09 0s 0s 629698670e-09 1s 1s 629700870e-09 1s 1s 629708310e-09 0s 0s 629708910e-09 1s 1s 629711150e-09 1s 1s 629718550e-09 0s 0s 629719150e-09 1s 1s 629721430e-09 1s 1s 629728790e-09 0s 0s 629729390e-09 1s 1s 629731710e-09 1s 1s 629739030e-09 0s 0s 629739630e-09 1s 1s 629741990e-09 1s 1s 629749270e-09 0s 0s 629749870e-09 1s 1s 629752270e-09 1s 1s 629759510e-09 0s 0s 629760110e-09 1s 1s 629762550e-09 1s 1s 629769750e-09 0s 0s 629770350e-09 1s 1s 629772830e-09 1s 1s 629779990e-09 0s 0s 629780590e-09 1s 1s 629783110e-09 1s 1s 629790230e-09 0s 0s 629790830e-09 1s 1s 629793390e-09 1s 1s 629800470e-09 0s 0s 629801070e-09 1s 1s 629803670e-09 1s 1s 629810710e-09 0s 0s 629811310e-09 1s 1s 629813950e-09 1s 1s 629820950e-09 0s 0s 629821550e-09 1s 1s 629824230e-09 1s 1s 629831190e-09 0s 0s 629831790e-09 1s 1s 629834510e-09 1s 1s 629841430e-09 0s 0s 629842030e-09 1s 1s 629844790e-09 1s 1s 629851670e-09 0s 0s 629852270e-09 1s 1s 629855070e-09 1s 1s 629861910e-09 0s 0s 629862510e-09 1s 1s 629865350e-09 1s 1s 629872150e-09 0s 0s 629872750e-09 1s 1s 629875630e-09 1s 1s 629882390e-09 0s 0s 629882990e-09 1s 1s 629885910e-09 1s 1s 629892630e-09 0s 0s 629893230e-09 1s 1s 629896190e-09 1s 1s 629902870e-09 0s 0s 629903470e-09 1s 1s 629906470e-09 1s 1s 629913110e-09 0s 0s 629913710e-09 1s 1s 629916750e-09 1s 1s 629923350e-09 0s 0s 629923950e-09 1s 1s 629927030e-09 1s 1s 629933590e-09 0s 0s 629934190e-09 1s 1s 629937310e-09 1s 1s 629943830e-09 0s 0s 629944430e-09 1s 1s 629947590e-09 1s 1s 629954070e-09 0s 0s 629954670e-09 1s 1s 629957870e-09 1s 1s 629964310e-09 0s 0s 629964910e-09 1s 1s 629968150e-09 1s 1s 629974550e-09 0s 0s 629975150e-09 1s 1s 629978430e-09 1s 1s 629984790e-09 0s 0s 629985390e-09 1s 1s 629988710e-09 1s 1s 629995030e-09 0s 0s 629995630e-09 1s 1s 629998990e-09 1s 1s 630005270e-09 0s 0s 630005870e-09 1s 1s 630009270e-09 1s 1s 630015510e-09 0s 0s 630016110e-09 1s 1s 630019550e-09 1s 1s 630025750e-09 0s 0s 630026350e-09 1s 1s 630029830e-09 1s 1s 630035990e-09 0s 0s 630036590e-09 1s 1s 630040110e-09 1s 1s 630046230e-09 0s 0s 630046830e-09 1s 1s 630050390e-09 1s 1s 630056470e-09 0s 0s 630057070e-09 1s 1s 630060670e-09 1s 1s 630066710e-09 0s 0s 630067310e-09 1s 1s 630070950e-09 1s 1s 630076950e-09 0s 0s 630077550e-09 1s 1s 630081230e-09 1s 1s 630087190e-09 0s 0s 630087790e-09 1s 1s 630091510e-09 1s 1s 630097430e-09 0s 0s 630098030e-09 1s 1s 630101790e-09 1s 1s 630107670e-09 0s 0s 630108270e-09 1s 1s 630112070e-09 1s 1s 630117910e-09 0s 0s 630118510e-09 1s 1s 630122350e-09 1s 1s 630128150e-09 0s 0s 630128750e-09 1s 1s 630132630e-09 1s 1s 630138390e-09 0s 0s 630138990e-09 1s 1s 630142910e-09 1s 1s 630148630e-09 0s 0s 630149230e-09 1s 1s 630153190e-09 1s 1s 630158870e-09 0s 0s 630159470e-09 1s 1s 630163470e-09 1s 1s 630169110e-09 0s 0s 630169710e-09 1s 1s 630173750e-09 1s 1s 630179350e-09 0s 0s 630179950e-09 1s 1s 630184030e-09 1s 1s 630189590e-09 0s 0s 630190190e-09 1s 1s 630194310e-09 1s 1s 630199830e-09 0s 0s 630200430e-09 1s 1s 630204590e-09 1s 1s 630210070e-09 0s 0s 630210670e-09 1s 1s 630214870e-09 1s 1s 630220310e-09 0s 0s 630220910e-09 1s 1s 630225150e-09 1s 1s 630230550e-09 0s 0s 630231150e-09 1s 1s 630235430e-09 1s 1s 630240790e-09 0s 0s 630241390e-09 1s 1s 630245710e-09 1s 1s 630251030e-09 0s 0s 630251630e-09 1s 1s 630255990e-09 1s 1s 630261270e-09 0s 0s 630261870e-09 1s 1s 630266270e-09 1s 1s 630271510e-09 0s 0s 630272110e-09 1s 1s 630276550e-09 1s 1s 630281750e-09 0s 0s 630282350e-09 1s 1s 630286830e-09 1s 1s 630291990e-09 0s 0s 630292590e-09 1s 1s 630297110e-09 1s 1s 630302230e-09 0s 0s 630302830e-09 1s 1s 630307390e-09 1s 1s 630312470e-09 0s 0s 630313070e-09 1s 1s 630317670e-09 1s 1s 630322710e-09 0s 0s 630323310e-09 1s 1s 630327950e-09 1s 1s 630332950e-09 0s 0s 630333550e-09 1s 1s 630338230e-09 1s 1s 630343190e-09 0s 0s 630343790e-09 1s 1s 630348510e-09 1s 1s 630353430e-09 0s 0s 630354030e-09 1s 1s 630358790e-09 1s 1s 630363670e-09 0s 0s 630364270e-09 1s 1s 630369070e-09 1s 1s 630373910e-09 0s 0s 630374510e-09 1s 1s 630379350e-09 1s 1s 630384150e-09 0s 0s 630384750e-09 1s 1s 630389630e-09 1s 1s 630394390e-09 0s 0s 630394990e-09 1s 1s 630399910e-09 1s 1s 630404630e-09 0s 0s 630405230e-09 1s 1s 630410190e-09 1s 1s 630414870e-09 0s 0s 630415470e-09 1s 1s 630420470e-09 1s 1s 630425110e-09 0s 0s 630425710e-09 1s 1s 630430750e-09 1s 1s 630435350e-09 0s 0s 630435950e-09 1s 1s 630441030e-09 1s 1s 630445590e-09 0s 0s 630446190e-09 1s 1s 630451310e-09 1s 1s 630455830e-09 0s 0s 630456430e-09 1s 1s 630461590e-09 1s 1s 630466070e-09 0s 0s 630466670e-09 1s 1s 630471870e-09 1s 1s 630476310e-09 0s 0s 630476910e-09 1s 1s 630482150e-09 1s 1s 630486550e-09 0s 0s 630487150e-09 1s 1s 630492430e-09 1s 1s 630496790e-09 0s 0s 630497390e-09 1s 1s 630502710e-09 1s 1s 630507030e-09 0s 0s 630507630e-09 1s 1s 630512990e-09 1s 1s 630517270e-09 0s 0s 630517870e-09 1s 1s 630523270e-09 1s 1s 630527510e-09 0s 0s 630528110e-09 1s 1s 630533550e-09 1s 1s 630537750e-09 0s 0s 630538350e-09 1s 1s 630543830e-09 1s 1s 630547990e-09 0s 0s 630548590e-09 1s 1s 630554110e-09 1s 1s 630558230e-09 0s 0s 630558830e-09 1s 1s 630564390e-09 1s 1s 630568470e-09 0s 0s 630569070e-09 1s 1s 630574670e-09 1s 1s 630578710e-09 0s 0s 630579310e-09 1s 1s 630584950e-09 1s 1s 630588950e-09 0s 0s 630589550e-09 1s 1s 630595230e-09 1s 1s 630599190e-09 0s 0s 630599790e-09 1s 1s 630605510e-09 1s 1s 630609430e-09 0s 0s 630610030e-09 1s 1s 630615790e-09 1s 1s 630619670e-09 0s 0s 630620270e-09 1s 1s 630626070e-09 1s 1s 630629910e-09 0s 0s 630630510e-09 1s 1s 630636350e-09 1s 1s 630640150e-09 0s 0s 630640750e-09 1s 1s 630646630e-09 1s 1s 630650390e-09 0s 0s 630650990e-09 1s 1s 630656910e-09 1s 1s 630660630e-09 0s 0s 630661230e-09 1s 1s 630667190e-09 1s 1s 630670870e-09 0s 0s 630671470e-09 1s 1s 630677470e-09 1s 1s 630681110e-09 0s 0s 630681710e-09 1s 1s 630687750e-09 1s 1s 630691350e-09 0s 0s 630691950e-09 1s 1s 630698030e-09 1s 1s 630701590e-09 0s 0s 630702190e-09 1s 1s 630708310e-09 1s 1s 630711830e-09 0s 0s 630712430e-09 1s 1s 630718590e-09 1s 1s 630722070e-09 0s 0s 630722670e-09 1s 1s 630728870e-09 1s 1s 630732310e-09 0s 0s 630732910e-09 1s 1s 630739150e-09 1s 1s 630742550e-09 0s 0s 630743150e-09 1s 1s 630749430e-09 1s 1s 630752790e-09 0s 0s 630753390e-09 1s 1s 630759710e-09 1s 1s 630763030e-09 0s 0s 630763630e-09 1s 1s 630769990e-09 1s 1s 630773270e-09 0s 0s 630773870e-09 1s 1s 630780270e-09 1s 1s 630783510e-09 0s 0s 630784110e-09 1s 1s 630790550e-09 1s 1s 630793750e-09 0s 0s 630794350e-09 1s 1s 630800830e-09 1s 1s 630803990e-09 0s 0s 630804590e-09 1s 1s 630811110e-09 1s 1s 630814230e-09 0s 0s 630814830e-09 1s 1s 630821390e-09 1s 1s 630824470e-09 0s 0s 630825070e-09 1s 1s 630831670e-09 1s 1s 630834710e-09 0s 0s 630835310e-09 1s 1s 630841950e-09 1s 1s 630844950e-09 0s 0s 630845550e-09 1s 1s 630852230e-09 1s 1s 630855190e-09 0s 0s 630855790e-09 1s 1s 630862510e-09 1s 1s 630865430e-09 0s 0s 630866030e-09 1s 1s 630872790e-09 1s 1s 630875670e-09 0s 0s 630876270e-09 1s 1s 630883070e-09 1s 1s 630885910e-09 0s 0s 630886510e-09 1s 1s 630893350e-09 1s 1s 630896150e-09 0s 0s 630896750e-09 1s 1s 630903630e-09 1s 1s 630906390e-09 0s 0s 630906990e-09 1s 1s 630913910e-09 1s 1s 630916630e-09 0s 0s 630917230e-09 1s 1s 630924190e-09 1s 1s 630926870e-09 0s 0s 630927470e-09 1s 1s 630934470e-09 1s 1s 630937110e-09 0s 0s 630937710e-09 1s 1s 630944750e-09 1s 1s 630947350e-09 0s 0s 630947950e-09 1s 1s 630955030e-09 1s 1s 630957590e-09 0s 0s 630958190e-09 1s 1s 630965310e-09 1s 1s 630967830e-09 0s 0s 630968430e-09 1s 1s 630975590e-09 1s 1s 630978070e-09 0s 0s 630978670e-09 1s 1s 630985870e-09 1s 1s 630988310e-09 0s 0s 630988910e-09 1s 1s 630996150e-09 1s 1s 630998550e-09 0s 0s 630999150e-09 1s 1s 631006430e-09 1s 1s 631008790e-09 0s 0s 631009390e-09 1s 1s 631016710e-09 1s 1s 631019030e-09 0s 0s 631019630e-09 1s 1s 631026990e-09 1s 1s 631029270e-09 0s 0s 631029870e-09 1s 1s 631037270e-09 1s 1s 631039510e-09 0s 0s 631040110e-09 1s 1s 631047550e-09 1s 1s 631049750e-09 0s 0s 631050350e-09 1s 1s 631057830e-09 1s 1s 631059990e-09 0s 0s 631060590e-09 1s 1s 631068110e-09 1s 1s 631070230e-09 0s 0s 631070830e-09 1s 1s 631078390e-09 1s 1s 631080470e-09 0s 0s 631081070e-09 1s 1s 631088670e-09 1s 1s 631090710e-09 0s 0s 631091310e-09 1s 1s 631098950e-09 1s 1s 631100950e-09 0s 0s 631101550e-09 1s 1s 631109230e-09 1s 1s 631111190e-09 0s 0s 631111790e-09 1s 1s 631119510e-09 1s 1s 631121430e-09 0s 0s 631122030e-09 1s 1s 631129790e-09 1s 1s 631131670e-09 0s 0s 631132270e-09 1s 1s 631140070e-09 1s 1s 631141910e-09 0s 0s 631142510e-09 1s 1s 631150350e-09 1s 1s 631152150e-09 0s 0s 631152750e-09 1s 1s 631160630e-09 1s 1s 631162390e-09 0s 0s 631162990e-09 1s 1s 631170910e-09 1s 1s 631172630e-09 0s 0s 631173230e-09 1s 1s 631181190e-09 1s 1s 631182870e-09 0s 0s 631183470e-09 1s 1s 631191470e-09 1s 1s 631193110e-09 0s 0s 631193710e-09 1s 1s 631201750e-09 1s 1s 631203350e-09 0s 0s 631203950e-09 1s 1s 631212030e-09 1s 1s 631213590e-09 0s 0s 631214190e-09 1s 1s 631222310e-09 1s 1s 631223830e-09 0s 0s 631224430e-09 1s 1s 631232590e-09 1s 1s 631234070e-09 0s 0s 631234670e-09 1s 1s 631242870e-09 1s 1s 631244310e-09 0s 0s 631244910e-09 1s 1s 631253150e-09 1s 1s 631254550e-09 0s 0s 631255150e-09 1s 1s 631263430e-09 1s 1s 631264790e-09 0s 0s 631265390e-09 1s 1s 631273710e-09 1s 1s 631275030e-09 0s 0s 631275630e-09 1s 1s 631283990e-09 1s 1s 631285270e-09 0s 0s 631285870e-09 1s 1s 631294270e-09 1s 1s 631295510e-09 0s 0s 631296110e-09 1s 1s 631304550e-09 1s 1s 631305750e-09 0s 0s 631306350e-09 1s 1s 631314830e-09 1s 1s 631315990e-09 0s 0s 631316590e-09 1s 1s 631325110e-09 1s 1s 631326230e-09 0s 0s 631326830e-09 1s 1s 631335390e-09 1s 1s 631336470e-09 0s 0s 631337070e-09 1s 1s 631345670e-09 1s 1s 631346710e-09 0s 0s 631347310e-09 1s 1s 631355950e-09 1s 1s 631356950e-09 0s 0s 631357550e-09 1s 1s 631366230e-09 1s 1s 631367190e-09 0s 0s 631367790e-09 1s 1s 631376510e-09 1s 1s 631377430e-09 0s 0s 631378030e-09 1s 1s 631386790e-09 1s 1s 631387670e-09 0s 0s 631388270e-09 1s 1s 631397070e-09 1s 1s 631397910e-09 0s 0s 631398510e-09 1s 1s 631407350e-09 1s 1s 631408150e-09 0s 0s 631408750e-09 1s 1s 631417630e-09 1s 1s 631418390e-09 0s 0s 631418990e-09 1s 1s 631427910e-09 1s 1s 631428630e-09 0s 0s 631429230e-09 1s 1s 631438190e-09 1s 1s 631438870e-09 0s 0s 631439470e-09 1s 1s 631448470e-09 1s 1s 631449110e-09 0s 0s 631449710e-09 1s 1s 631458750e-09 1s 1s 631459350e-09 0s 0s 631459950e-09 1s 1s 631469030e-09 1s 1s 631469590e-09 0s 0s 631470190e-09 1s 1s 631479310e-09 1s 1s 631479830e-09 0s 0s 631480430e-09 1s 1s 631489590e-09 1s 1s 631490070e-09 0s 0s 631490670e-09 1s 1s 631499870e-09 1s 1s 631500310e-09 0s 0s 631500910e-09 1s 1s 631510150e-09 1s 1s 631510550e-09 0s 0s 631511150e-09 1s 1s 631520430e-09 1s 1s 631520790e-09 0s 0s 631521390e-09 1s 1s 631530710e-09 1s 1s 631531030e-09 0s 0s 631531630e-09 1s 1s 631540990e-09 1s 1s 631541270e-09 0s 0s 631541870e-09 1s 1s 631551270e-09 1s 1s 631551510e-09 0s 0s 631552110e-09 1s 1s 631561550e-09 1s 1s 631561750e-09 0s 0s 631562350e-09 1s 1s 631571830e-09 1s 1s 631571990e-09 0s 0s 631572590e-09 1s 1s 631582110e-09 1s 1s 631582230e-09 0s 0s 631582830e-09 1s 1s 631592390e-09 1s 1s 631592470e-09 0s 0s 631593070e-09 1s 1s 631602670e-09 1s 1s 631602710e-09 0s 0s 631603310e-09 1s 1s 631612950e-09 0s 0s 631613550e-09 1s 1s 631623190e-09 0s 0s 631623230e-09 0s 0s 631623790e-09 1s 1s 631633430e-09 0s 0s 631633510e-09 0s 0s 631634030e-09 1s 1s 631643670e-09 0s 0s 631643790e-09 0s 0s 631644270e-09 1s 1s 631653910e-09 0s 0s 631654070e-09 0s 0s 631654510e-09 1s 1s 631664150e-09 0s 0s 631664350e-09 0s 0s 631664750e-09 1s 1s 631674390e-09 0s 0s 631674630e-09 0s 0s 631674990e-09 1s 1s 631684630e-09 0s 0s 631684910e-09 0s 0s 631685230e-09 1s 1s 631694870e-09 0s 0s 631695190e-09 0s 0s 631695470e-09 1s 1s 631705110e-09 0s 0s 631705470e-09 0s 0s 631705710e-09 1s 1s 631715350e-09 0s 0s 631715750e-09 0s 0s 631715950e-09 1s 1s 631725590e-09 0s 0s 631726030e-09 0s 0s 631726190e-09 1s 1s 631735830e-09 0s 0s 631736310e-09 0s 0s 631736430e-09 1s 1s 631746070e-09 0s 0s 631746590e-09 0s 0s 631746670e-09 1s 1s 631756310e-09 0s 0s 631756870e-09 0s 0s 631756910e-09 1s 1s 631766550e-09 0s 0s 631767150e-09 1s 1s 631767190e-09 1s 1s 631776830e-09 0s 0s 631777390e-09 1s 1s 631777470e-09 1s 1s 631787070e-09 0s 0s 631787630e-09 1s 1s 631787750e-09 1s 1s 631797310e-09 0s 0s 631797870e-09 1s 1s 631798030e-09 1s 1s 631807550e-09 0s 0s 631808110e-09 1s 1s 631808310e-09 1s 1s 631817790e-09 0s 0s 631818350e-09 1s 1s 631818590e-09 1s 1s 631828030e-09 0s 0s 631828590e-09 1s 1s 631828870e-09 1s 1s 631838270e-09 0s 0s 631838830e-09 1s 1s 631839150e-09 1s 1s 631848510e-09 0s 0s 631849070e-09 1s 1s 631849430e-09 1s 1s 631858750e-09 0s 0s 631859310e-09 1s 1s 631859710e-09 1s 1s 631868990e-09 0s 0s 631869550e-09 1s 1s 631869990e-09 1s 1s 631879230e-09 0s 0s 631879790e-09 1s 1s 631880270e-09 1s 1s 631889470e-09 0s 0s 631890030e-09 1s 1s 631890550e-09 1s 1s 631899710e-09 0s 0s 631900270e-09 1s 1s 631900830e-09 1s 1s 631909950e-09 0s 0s 631910510e-09 1s 1s 631911110e-09 1s 1s 631920190e-09 0s 0s 631920750e-09 1s 1s 631921390e-09 1s 1s 631930430e-09 0s 0s 631930990e-09 1s 1s 631931670e-09 1s 1s 631940670e-09 0s 0s 631941230e-09 1s 1s 631941950e-09 1s 1s 631950910e-09 0s 0s 631951470e-09 1s 1s 631952230e-09 1s 1s 631961150e-09 0s 0s 631961710e-09 1s 1s 631962510e-09 1s 1s 631971390e-09 0s 0s 631971950e-09 1s 1s 631972790e-09 1s 1s 631981630e-09 0s 0s 631982190e-09 1s 1s 631983070e-09 1s 1s 631991870e-09 0s 0s 631992430e-09 1s 1s 631993350e-09 1s 1s 632002110e-09 0s 0s 632002670e-09 1s 1s 632003630e-09 1s 1s 632012350e-09 0s 0s 632012910e-09 1s 1s 632013910e-09 1s 1s 632022590e-09 0s 0s 632023150e-09 1s 1s 632024190e-09 1s 1s 632032830e-09 0s 0s 632033390e-09 1s 1s 632034470e-09 1s 1s 632043070e-09 0s 0s 632043630e-09 1s 1s 632044750e-09 1s 1s 632053310e-09 0s 0s 632053870e-09 1s 1s 632055030e-09 1s 1s 632063550e-09 0s 0s 632064110e-09 1s 1s 632065310e-09 1s 1s 632073790e-09 0s 0s 632074350e-09 1s 1s 632075590e-09 1s 1s 632084030e-09 0s 0s 632084590e-09 1s 1s 632085870e-09 1s 1s 632094270e-09 0s 0s 632094830e-09 1s 1s 632096150e-09 1s 1s 632104510e-09 0s 0s 632105070e-09 1s 1s 632106430e-09 1s 1s 632114750e-09 0s 0s 632115310e-09 1s 1s 632116710e-09 1s 1s 632124990e-09 0s 0s 632125550e-09 1s 1s 632126990e-09 1s 1s 632135230e-09 0s 0s 632135790e-09 1s 1s 632137270e-09 1s 1s 632145470e-09 0s 0s 632146030e-09 1s 1s 632147550e-09 1s 1s 632155710e-09 0s 0s 632156270e-09 1s 1s 632157830e-09 1s 1s 632165950e-09 0s 0s 632166510e-09 1s 1s 632168110e-09 1s 1s 632176190e-09 0s 0s 632176750e-09 1s 1s 632178390e-09 1s 1s 632186430e-09 0s 0s 632186990e-09 1s 1s 632188670e-09 1s 1s 632196670e-09 0s 0s 632197230e-09 1s 1s 632198950e-09 1s 1s 632206910e-09 0s 0s 632207470e-09 1s 1s 632209230e-09 1s 1s 632217150e-09 0s 0s 632217710e-09 1s 1s 632219510e-09 1s 1s 632227390e-09 0s 0s 632227950e-09 1s 1s 632229790e-09 1s 1s 632237630e-09 0s 0s 632238190e-09 1s 1s 632240070e-09 1s 1s 632247870e-09 0s 0s 632248430e-09 1s 1s 632250350e-09 1s 1s 632258110e-09 0s 0s 632258670e-09 1s 1s 632260630e-09 1s 1s 632268350e-09 0s 0s 632268910e-09 1s 1s 632270910e-09 1s 1s 632278590e-09 0s 0s 632279150e-09 1s 1s 632281190e-09 1s 1s 632288830e-09 0s 0s 632289390e-09 1s 1s 632291470e-09 1s 1s 632299070e-09 0s 0s 632299630e-09 1s 1s 632301750e-09 1s 1s 632309310e-09 0s 0s 632309870e-09 1s 1s 632312030e-09 1s 1s 632319550e-09 0s 0s 632320110e-09 1s 1s 632322310e-09 1s 1s 632329790e-09 0s 0s 632330350e-09 1s 1s 632332590e-09 1s 1s 632340030e-09 0s 0s 632340590e-09 1s 1s 632342870e-09 1s 1s 632350270e-09 0s 0s 632350830e-09 1s 1s 632353150e-09 1s 1s 632360510e-09 0s 0s 632361070e-09 1s 1s 632363430e-09 1s 1s 632370750e-09 0s 0s 632371310e-09 1s 1s 632373710e-09 1s 1s 632380990e-09 0s 0s 632381550e-09 1s 1s 632383990e-09 1s 1s 632391230e-09 0s 0s 632391790e-09 1s 1s 632394270e-09 1s 1s 632401470e-09 0s 0s 632402030e-09 1s 1s 632404550e-09 1s 1s 632411710e-09 0s 0s 632412270e-09 1s 1s 632414830e-09 1s 1s 632421950e-09 0s 0s 632422510e-09 1s 1s 632425110e-09 1s 1s 632432190e-09 0s 0s 632432750e-09 1s 1s 632435390e-09 1s 1s 632442430e-09 0s 0s 632442990e-09 1s 1s 632445670e-09 1s 1s 632452670e-09 0s 0s 632453230e-09 1s 1s 632455950e-09 1s 1s 632462910e-09 0s 0s 632463470e-09 1s 1s 632466230e-09 1s 1s 632473150e-09 0s 0s 632473710e-09 1s 1s 632476510e-09 1s 1s 632483390e-09 0s 0s 632483950e-09 1s 1s 632486790e-09 1s 1s 632493630e-09 0s 0s 632494190e-09 1s 1s 632497070e-09 1s 1s 632503870e-09 0s 0s 632504430e-09 1s 1s 632507350e-09 1s 1s 632514110e-09 0s 0s 632514670e-09 1s 1s 632517630e-09 1s 1s 632524350e-09 0s 0s 632524910e-09 1s 1s 632527910e-09 1s 1s 632534590e-09 0s 0s 632535150e-09 1s 1s 632538190e-09 1s 1s 632544830e-09 0s 0s 632545390e-09 1s 1s 632548470e-09 1s 1s 632555070e-09 0s 0s 632555630e-09 1s 1s 632558750e-09 1s 1s 632565310e-09 0s 0s 632565870e-09 1s 1s 632569030e-09 1s 1s 632575550e-09 0s 0s 632576110e-09 1s 1s 632579310e-09 1s 1s 632585790e-09 0s 0s 632586350e-09 1s 1s 632589590e-09 1s 1s 632596030e-09 0s 0s 632596590e-09 1s 1s 632599870e-09 1s 1s 632606270e-09 0s 0s 632606830e-09 1s 1s 632610150e-09 1s 1s 632616510e-09 0s 0s 632617070e-09 1s 1s 632620430e-09 1s 1s 632626750e-09 0s 0s 632627310e-09 1s 1s 632630710e-09 1s 1s 632636990e-09 0s 0s 632637550e-09 1s 1s 632640990e-09 1s 1s 632647230e-09 0s 0s 632647790e-09 1s 1s 632651270e-09 1s 1s 632657470e-09 0s 0s 632658030e-09 1s 1s 632661550e-09 1s 1s 632667710e-09 0s 0s 632668270e-09 1s 1s 632671830e-09 1s 1s 632677950e-09 0s 0s 632678510e-09 1s 1s 632682110e-09 1s 1s 632688190e-09 0s 0s 632688750e-09 1s 1s 632692390e-09 1s 1s 632698430e-09 0s 0s 632698990e-09 1s 1s 632702670e-09 1s 1s 632708670e-09 0s 0s 632709230e-09 1s 1s 632712950e-09 1s 1s 632718910e-09 0s 0s 632719470e-09 1s 1s 632723230e-09 1s 1s 632729150e-09 0s 0s 632729710e-09 1s 1s 632733510e-09 1s 1s 632739390e-09 0s 0s 632739950e-09 1s 1s 632743790e-09 1s 1s 632749630e-09 0s 0s 632750190e-09 1s 1s 632754070e-09 1s 1s 632759870e-09 0s 0s 632760430e-09 1s 1s 632764350e-09 1s 1s 632770110e-09 0s 0s 632770670e-09 1s 1s 632774630e-09 1s 1s 632780350e-09 0s 0s 632780910e-09 1s 1s 632784910e-09 1s 1s 632790590e-09 0s 0s 632791150e-09 1s 1s 632795190e-09 1s 1s 632800830e-09 0s 0s 632801390e-09 1s 1s 632805470e-09 1s 1s 632811070e-09 0s 0s 632811630e-09 1s 1s 632815750e-09 1s 1s 632821310e-09 0s 0s 632821870e-09 1s 1s 632826030e-09 1s 1s 632831550e-09 0s 0s 632832110e-09 1s 1s 632836310e-09 1s 1s 632841790e-09 0s 0s 632842350e-09 1s 1s 632846590e-09 1s 1s 632852030e-09 0s 0s 632852590e-09 1s 1s 632856870e-09 1s 1s 632862270e-09 0s 0s 632862830e-09 1s 1s 632867150e-09 1s 1s 632872510e-09 0s 0s 632873070e-09 1s 1s 632877430e-09 1s 1s 632882750e-09 0s 0s 632883310e-09 1s 1s 632887710e-09 1s 1s 632892990e-09 0s 0s 632893550e-09 1s 1s 632897990e-09 1s 1s 632903230e-09 0s 0s 632903790e-09 1s 1s 632908270e-09 1s 1s 632913470e-09 0s 0s 632914030e-09 1s 1s 632918550e-09 1s 1s 632923710e-09 0s 0s 632924270e-09 1s 1s 632928830e-09 1s 1s 632933950e-09 0s 0s 632934510e-09 1s 1s 632939110e-09 1s 1s 632944190e-09 0s 0s 632944750e-09 1s 1s 632949390e-09 1s 1s 632954430e-09 0s 0s 632954990e-09 1s 1s 632959670e-09 1s 1s 632964670e-09 0s 0s 632965230e-09 1s 1s 632969950e-09 1s 1s 632974910e-09 0s 0s 632975470e-09 1s 1s 632980230e-09 1s 1s 632985150e-09 0s 0s 632985710e-09 1s 1s 632990510e-09 1s 1s 632995390e-09 0s 0s 632995950e-09 1s 1s 633000790e-09 1s 1s 633005630e-09 0s 0s 633006190e-09 1s 1s 633011070e-09 1s 1s 633015870e-09 0s 0s 633016430e-09 1s 1s 633021350e-09 1s 1s 633026110e-09 0s 0s 633026670e-09 1s 1s 633031630e-09 1s 1s 633036350e-09 0s 0s 633036910e-09 1s 1s 633041910e-09 1s 1s 633046590e-09 0s 0s 633047150e-09 1s 1s 633052190e-09 1s 1s 633056830e-09 0s 0s 633057390e-09 1s 1s 633062470e-09 1s 1s 633067070e-09 0s 0s 633067630e-09 1s 1s 633072750e-09 1s 1s 633077310e-09 0s 0s 633077870e-09 1s 1s 633083030e-09 1s 1s 633087550e-09 0s 0s 633088110e-09 1s 1s 633093310e-09 1s 1s 633097790e-09 0s 0s 633098350e-09 1s 1s 633103590e-09 1s 1s 633108030e-09 0s 0s 633108590e-09 1s 1s 633113870e-09 1s 1s 633118270e-09 0s 0s 633118830e-09 1s 1s 633124150e-09 1s 1s 633128510e-09 0s 0s 633129070e-09 1s 1s 633134430e-09 1s 1s 633138750e-09 0s 0s 633139310e-09 1s 1s 633144710e-09 1s 1s 633148990e-09 0s 0s 633149550e-09 1s 1s 633154990e-09 1s 1s 633159230e-09 0s 0s 633159790e-09 1s 1s 633165270e-09 1s 1s 633169470e-09 0s 0s 633170030e-09 1s 1s 633175550e-09 1s 1s 633179710e-09 0s 0s 633180270e-09 1s 1s 633185830e-09 1s 1s 633189950e-09 0s 0s 633190510e-09 1s 1s 633196110e-09 1s 1s 633200190e-09 0s 0s 633200750e-09 1s 1s 633206390e-09 1s 1s 633210430e-09 0s 0s 633210990e-09 1s 1s 633216670e-09 1s 1s 633220670e-09 0s 0s 633221230e-09 1s 1s 633226950e-09 1s 1s 633230910e-09 0s 0s 633231470e-09 1s 1s 633237230e-09 1s 1s 633241150e-09 0s 0s 633241710e-09 1s 1s 633247510e-09 1s 1s 633251390e-09 0s 0s 633251950e-09 1s 1s 633257790e-09 1s 1s 633261630e-09 0s 0s 633262190e-09 1s 1s 633268070e-09 1s 1s 633271870e-09 0s 0s 633272430e-09 1s 1s 633278350e-09 1s 1s 633282110e-09 0s 0s 633282670e-09 1s 1s 633288630e-09 1s 1s 633292350e-09 0s 0s 633292910e-09 1s 1s 633298910e-09 1s 1s 633302590e-09 0s 0s 633303150e-09 1s 1s 633309190e-09 1s 1s 633312830e-09 0s 0s 633313390e-09 1s 1s 633319470e-09 1s 1s 633323070e-09 0s 0s 633323630e-09 1s 1s 633329750e-09 1s 1s 633333310e-09 0s 0s 633333870e-09 1s 1s 633340030e-09 1s 1s 633343550e-09 0s 0s 633344110e-09 1s 1s 633350310e-09 1s 1s 633353790e-09 0s 0s 633354350e-09 1s 1s 633360590e-09 1s 1s 633364030e-09 0s 0s 633364590e-09 1s 1s 633370870e-09 1s 1s 633374270e-09 0s 0s 633374830e-09 1s 1s 633381150e-09 1s 1s 633384510e-09 0s 0s 633385070e-09 1s 1s 633391430e-09 1s 1s 633394750e-09 0s 0s 633395310e-09 1s 1s 633401710e-09 1s 1s 633404990e-09 0s 0s 633405550e-09 1s 1s 633411990e-09 1s 1s 633415230e-09 0s 0s 633415790e-09 1s 1s 633422270e-09 1s 1s 633425470e-09 0s 0s 633426030e-09 1s 1s 633432550e-09 1s 1s 633435710e-09 0s 0s 633436270e-09 1s 1s 633442830e-09 1s 1s 633445950e-09 0s 0s 633446510e-09 1s 1s 633453110e-09 1s 1s 633456190e-09 0s 0s 633456750e-09 1s 1s 633463390e-09 1s 1s 633466430e-09 0s 0s 633466990e-09 1s 1s 633473670e-09 1s 1s 633476670e-09 0s 0s 633477230e-09 1s 1s 633483950e-09 1s 1s 633486910e-09 0s 0s 633487470e-09 1s 1s 633494230e-09 1s 1s 633497150e-09 0s 0s 633497710e-09 1s 1s 633504510e-09 1s 1s 633507390e-09 0s 0s 633507950e-09 1s 1s 633514790e-09 1s 1s 633517630e-09 0s 0s 633518190e-09 1s 1s 633525070e-09 1s 1s 633527870e-09 0s 0s 633528430e-09 1s 1s 633535350e-09 1s 1s 633538110e-09 0s 0s 633538670e-09 1s 1s 633545630e-09 1s 1s 633548350e-09 0s 0s 633548910e-09 1s 1s 633555910e-09 1s 1s 633558590e-09 0s 0s 633559150e-09 1s 1s 633566190e-09 1s 1s 633568830e-09 0s 0s 633569390e-09 1s 1s 633576470e-09 1s 1s 633579070e-09 0s 0s 633579630e-09 1s 1s 633586750e-09 1s 1s 633589310e-09 0s 0s 633589870e-09 1s 1s 633597030e-09 1s 1s 633599550e-09 0s 0s 633600110e-09 1s 1s 633607310e-09 1s 1s 633609790e-09 0s 0s 633610350e-09 1s 1s 633617590e-09 1s 1s 633620030e-09 0s 0s 633620590e-09 1s 1s 633627870e-09 1s 1s 633630270e-09 0s 0s 633630830e-09 1s 1s 633638150e-09 1s 1s 633640510e-09 0s 0s 633641070e-09 1s 1s 633648430e-09 1s 1s 633650750e-09 0s 0s 633651310e-09 1s 1s 633658710e-09 1s 1s 633660990e-09 0s 0s 633661550e-09 1s 1s 633668990e-09 1s 1s 633671230e-09 0s 0s 633671790e-09 1s 1s 633679270e-09 1s 1s 633681470e-09 0s 0s 633682030e-09 1s 1s 633689550e-09 1s 1s 633691710e-09 0s 0s 633692270e-09 1s 1s 633699830e-09 1s 1s 633701950e-09 0s 0s 633702510e-09 1s 1s 633710110e-09 1s 1s 633712190e-09 0s 0s 633712750e-09 1s 1s 633720390e-09 1s 1s 633722430e-09 0s 0s 633722990e-09 1s 1s 633730670e-09 1s 1s 633732670e-09 0s 0s 633733230e-09 1s 1s 633740950e-09 1s 1s 633742910e-09 0s 0s 633743470e-09 1s 1s 633751230e-09 1s 1s 633753150e-09 0s 0s 633753710e-09 1s 1s 633761510e-09 1s 1s 633763390e-09 0s 0s 633763950e-09 1s 1s 633771790e-09 1s 1s 633773630e-09 0s 0s 633774190e-09 1s 1s 633782070e-09 1s 1s 633783870e-09 0s 0s 633784430e-09 1s 1s 633792350e-09 1s 1s 633794110e-09 0s 0s 633794670e-09 1s 1s 633802630e-09 1s 1s 633804350e-09 0s 0s 633804910e-09 1s 1s 633812910e-09 1s 1s 633814590e-09 0s 0s 633815150e-09 1s 1s 633823190e-09 1s 1s 633824830e-09 0s 0s 633825390e-09 1s 1s 633833470e-09 1s 1s 633835070e-09 0s 0s 633835630e-09 1s 1s 633843750e-09 1s 1s 633845310e-09 0s 0s 633845870e-09 1s 1s 633854030e-09 1s 1s 633855550e-09 0s 0s 633856110e-09 1s 1s 633864310e-09 1s 1s 633865790e-09 0s 0s 633866350e-09 1s 1s 633874590e-09 1s 1s 633876030e-09 0s 0s 633876590e-09 1s 1s 633884870e-09 1s 1s 633886270e-09 0s 0s 633886830e-09 1s 1s 633895150e-09 1s 1s 633896510e-09 0s 0s 633897070e-09 1s 1s 633905430e-09 1s 1s 633906750e-09 0s 0s 633907310e-09 1s 1s 633915710e-09 1s 1s 633916990e-09 0s 0s 633917550e-09 1s 1s 633925990e-09 1s 1s 633927230e-09 0s 0s 633927790e-09 1s 1s 633936270e-09 1s 1s 633937470e-09 0s 0s 633938030e-09 1s 1s 633946550e-09 1s 1s 633947710e-09 0s 0s 633948270e-09 1s 1s 633956830e-09 1s 1s 633957950e-09 0s 0s 633958510e-09 1s 1s 633967110e-09 1s 1s 633968190e-09 0s 0s 633968750e-09 1s 1s 633977390e-09 1s 1s 633978430e-09 0s 0s 633978990e-09 1s 1s 633987670e-09 1s 1s 633988670e-09 0s 0s 633989230e-09 1s 1s 633997950e-09 1s 1s 633998910e-09 0s 0s 633999470e-09 1s 1s 634008230e-09 1s 1s 634009150e-09 0s 0s 634009710e-09 1s 1s 634018510e-09 1s 1s 634019390e-09 0s 0s 634019950e-09 1s 1s 634028790e-09 1s 1s 634029630e-09 0s 0s 634030190e-09 1s 1s 634039070e-09 1s 1s 634039870e-09 0s 0s 634040430e-09 1s 1s 634049350e-09 1s 1s 634050110e-09 0s 0s 634050670e-09 1s 1s 634059630e-09 1s 1s 634060350e-09 0s 0s 634060910e-09 1s 1s 634069910e-09 1s 1s 634070590e-09 0s 0s 634071150e-09 1s 1s 634080190e-09 1s 1s 634080830e-09 0s 0s 634081390e-09 1s 1s 634090470e-09 1s 1s 634091070e-09 0s 0s 634091630e-09 1s 1s 634100750e-09 1s 1s 634101310e-09 0s 0s 634101870e-09 1s 1s 634111030e-09 1s 1s 634111550e-09 0s 0s 634112110e-09 1s 1s 634121310e-09 1s 1s 634121790e-09 0s 0s 634122350e-09 1s 1s 634131590e-09 1s 1s 634132030e-09 0s 0s 634132590e-09 1s 1s 634141870e-09 1s 1s 634142270e-09 0s 0s 634142830e-09 1s 1s 634152150e-09 1s 1s 634152510e-09 0s 0s 634153070e-09 1s 1s 634162430e-09 1s 1s 634162750e-09 0s 0s 634163310e-09 1s 1s 634172710e-09 1s 1s 634172990e-09 0s 0s 634173550e-09 1s 1s 634182990e-09 1s 1s 634183230e-09 0s 0s 634183790e-09 1s 1s 634193270e-09 1s 1s 634193470e-09 0s 0s 634194030e-09 1s 1s 634203550e-09 1s 1s 634203710e-09 0s 0s 634204270e-09 1s 1s 634213830e-09 1s 1s 634213950e-09 0s 0s 634214510e-09 1s 1s 634224110e-09 1s 1s 634224190e-09 0s 0s 634224750e-09 1s 1s 634234390e-09 1s 1s 634234430e-09 0s 0s 634234990e-09 1s 1s 634244670e-09 0s 0s 634245230e-09 1s 1s 634254910e-09 0s 0s 634254950e-09 0s 0s 634255470e-09 1s 1s 634265150e-09 0s 0s 634265230e-09 0s 0s 634265710e-09 1s 1s 634275390e-09 0s 0s 634275510e-09 0s 0s 634275950e-09 1s 1s 634285630e-09 0s 0s 634285790e-09 0s 0s 634286190e-09 1s 1s 634295870e-09 0s 0s 634296070e-09 0s 0s 634296430e-09 1s 1s 634306110e-09 0s 0s 634306350e-09 0s 0s 634306670e-09 1s 1s 634316350e-09 0s 0s 634316630e-09 0s 0s 634316910e-09 1s 1s 634326590e-09 0s 0s 634326910e-09 0s 0s 634327150e-09 1s 1s 634336830e-09 0s 0s 634337190e-09 0s 0s 634337390e-09 1s 1s 634347070e-09 0s 0s 634347470e-09 0s 0s 634347630e-09 1s 1s 634357310e-09 0s 0s 634357750e-09 0s 0s 634357870e-09 1s 1s 634367550e-09 0s 0s 634368030e-09 0s 0s 634368110e-09 1s 1s 634377790e-09 0s 0s 634378310e-09 0s 0s 634378350e-09 1s 1s 634388030e-09 0s 0s 634388590e-09 1s 1s 634388630e-09 1s 1s 634398310e-09 0s 0s 634398830e-09 1s 1s 634398910e-09 1s 1s 634408550e-09 0s 0s 634409070e-09 1s 1s 634409190e-09 1s 1s 634418790e-09 0s 0s 634419310e-09 1s 1s 634419470e-09 1s 1s 634429030e-09 0s 0s 634429550e-09 1s 1s 634429750e-09 1s 1s 634439270e-09 0s 0s 634439790e-09 1s 1s 634440030e-09 1s 1s 634449510e-09 0s 0s 634450030e-09 1s 1s 634450310e-09 1s 1s 634459750e-09 0s 0s 634460270e-09 1s 1s 634460590e-09 1s 1s 634469990e-09 0s 0s 634470510e-09 1s 1s 634470870e-09 1s 1s 634480230e-09 0s 0s 634480750e-09 1s 1s 634481150e-09 1s 1s 634490470e-09 0s 0s 634490990e-09 1s 1s 634491430e-09 1s 1s 634500710e-09 0s 0s 634501230e-09 1s 1s 634501710e-09 1s 1s 634510950e-09 0s 0s 634511470e-09 1s 1s 634511990e-09 1s 1s 634521190e-09 0s 0s 634521710e-09 1s 1s 634522270e-09 1s 1s 634531430e-09 0s 0s 634531950e-09 1s 1s 634532550e-09 1s 1s 634541670e-09 0s 0s 634542190e-09 1s 1s 634542830e-09 1s 1s 634551910e-09 0s 0s 634552430e-09 1s 1s 634553110e-09 1s 1s 634562150e-09 0s 0s 634562670e-09 1s 1s 634563390e-09 1s 1s 634572390e-09 0s 0s 634572910e-09 1s 1s 634573670e-09 1s 1s 634582630e-09 0s 0s 634583150e-09 1s 1s 634583950e-09 1s 1s 634592870e-09 0s 0s 634593390e-09 1s 1s 634594230e-09 1s 1s 634603110e-09 0s 0s 634603630e-09 1s 1s 634604510e-09 1s 1s 634613350e-09 0s 0s 634613870e-09 1s 1s 634614790e-09 1s 1s 634623590e-09 0s 0s 634624110e-09 1s 1s 634625070e-09 1s 1s 634633830e-09 0s 0s 634634350e-09 1s 1s 634635350e-09 1s 1s 634644070e-09 0s 0s 634644590e-09 1s 1s 634645630e-09 1s 1s 634654310e-09 0s 0s 634654830e-09 1s 1s 634655910e-09 1s 1s 634664550e-09 0s 0s 634665070e-09 1s 1s 634666190e-09 1s 1s 634674790e-09 0s 0s 634675310e-09 1s 1s 634676470e-09 1s 1s 634685030e-09 0s 0s 634685550e-09 1s 1s 634686750e-09 1s 1s 634695270e-09 0s 0s 634695790e-09 1s 1s 634697030e-09 1s 1s 634705510e-09 0s 0s 634706030e-09 1s 1s 634707310e-09 1s 1s 634715750e-09 0s 0s 634716270e-09 1s 1s 634717590e-09 1s 1s 634725990e-09 0s 0s 634726510e-09 1s 1s 634727870e-09 1s 1s 634736230e-09 0s 0s 634736750e-09 1s 1s 634738150e-09 1s 1s 634746470e-09 0s 0s 634746990e-09 1s 1s 634748430e-09 1s 1s 634756710e-09 0s 0s 634757230e-09 1s 1s 634758710e-09 1s 1s 634766950e-09 0s 0s 634767470e-09 1s 1s 634768990e-09 1s 1s 634777190e-09 0s 0s 634777710e-09 1s 1s 634779270e-09 1s 1s 634787430e-09 0s 0s 634787950e-09 1s 1s 634789550e-09 1s 1s 634797670e-09 0s 0s 634798190e-09 1s 1s 634799830e-09 1s 1s 634807910e-09 0s 0s 634808430e-09 1s 1s 634810110e-09 1s 1s 634818150e-09 0s 0s 634818670e-09 1s 1s 634820390e-09 1s 1s 634828390e-09 0s 0s 634828910e-09 1s 1s 634830670e-09 1s 1s 634838630e-09 0s 0s 634839150e-09 1s 1s 634840950e-09 1s 1s 634848870e-09 0s 0s 634849390e-09 1s 1s 634851230e-09 1s 1s 634859110e-09 0s 0s 634859630e-09 1s 1s 634861510e-09 1s 1s 634869350e-09 0s 0s 634869870e-09 1s 1s 634871790e-09 1s 1s 634879590e-09 0s 0s 634880110e-09 1s 1s 634882070e-09 1s 1s 634889830e-09 0s 0s 634890350e-09 1s 1s 634892350e-09 1s 1s 634900070e-09 0s 0s 634900590e-09 1s 1s 634902630e-09 1s 1s 634910310e-09 0s 0s 634910830e-09 1s 1s 634912910e-09 1s 1s 634920550e-09 0s 0s 634921070e-09 1s 1s 634923190e-09 1s 1s 634930790e-09 0s 0s 634931310e-09 1s 1s 634933470e-09 1s 1s 634941030e-09 0s 0s 634941550e-09 1s 1s 634943750e-09 1s 1s 634951270e-09 0s 0s 634951790e-09 1s 1s 634954030e-09 1s 1s 634961510e-09 0s 0s 634962030e-09 1s 1s 634964310e-09 1s 1s 634971750e-09 0s 0s 634972270e-09 1s 1s 634974590e-09 1s 1s 634981990e-09 0s 0s 634982510e-09 1s 1s 634984870e-09 1s 1s 634992230e-09 0s 0s 634992750e-09 1s 1s 634995150e-09 1s 1s 635002470e-09 0s 0s 635002990e-09 1s 1s 635005430e-09 1s 1s 635012710e-09 0s 0s 635013230e-09 1s 1s 635015710e-09 1s 1s 635022950e-09 0s 0s 635023470e-09 1s 1s 635025990e-09 1s 1s 635033190e-09 0s 0s 635033710e-09 1s 1s 635036270e-09 1s 1s 635043430e-09 0s 0s 635043950e-09 1s 1s 635046550e-09 1s 1s 635053670e-09 0s 0s 635054190e-09 1s 1s 635056830e-09 1s 1s 635063910e-09 0s 0s 635064430e-09 1s 1s 635067110e-09 1s 1s 635074150e-09 0s 0s 635074670e-09 1s 1s 635077390e-09 1s 1s 635084390e-09 0s 0s 635084910e-09 1s 1s 635087670e-09 1s 1s 635094630e-09 0s 0s 635095150e-09 1s 1s 635097950e-09 1s 1s 635104870e-09 0s 0s 635105390e-09 1s 1s 635108230e-09 1s 1s 635115110e-09 0s 0s 635115630e-09 1s 1s 635118510e-09 1s 1s 635125350e-09 0s 0s 635125870e-09 1s 1s 635128790e-09 1s 1s 635135590e-09 0s 0s 635136110e-09 1s 1s 635139070e-09 1s 1s 635145830e-09 0s 0s 635146350e-09 1s 1s 635149350e-09 1s 1s 635156070e-09 0s 0s 635156590e-09 1s 1s 635159630e-09 1s 1s 635166310e-09 0s 0s 635166830e-09 1s 1s 635169910e-09 1s 1s 635176550e-09 0s 0s 635177070e-09 1s 1s 635180190e-09 1s 1s 635186790e-09 0s 0s 635187310e-09 1s 1s 635190470e-09 1s 1s 635197030e-09 0s 0s 635197550e-09 1s 1s 635200750e-09 1s 1s 635207270e-09 0s 0s 635207790e-09 1s 1s 635211030e-09 1s 1s 635217510e-09 0s 0s 635218030e-09 1s 1s 635221310e-09 1s 1s 635227750e-09 0s 0s 635228270e-09 1s 1s 635231590e-09 1s 1s 635237990e-09 0s 0s 635238510e-09 1s 1s 635241870e-09 1s 1s 635248230e-09 0s 0s 635248750e-09 1s 1s 635252150e-09 1s 1s 635258470e-09 0s 0s 635258990e-09 1s 1s 635262430e-09 1s 1s 635268710e-09 0s 0s 635269230e-09 1s 1s 635272710e-09 1s 1s 635278950e-09 0s 0s 635279470e-09 1s 1s 635282990e-09 1s 1s 635289190e-09 0s 0s 635289710e-09 1s 1s 635293270e-09 1s 1s 635299430e-09 0s 0s 635299950e-09 1s 1s 635303550e-09 1s 1s 635309670e-09 0s 0s 635310190e-09 1s 1s 635313830e-09 1s 1s 635319910e-09 0s 0s 635320430e-09 1s 1s 635324110e-09 1s 1s 635330150e-09 0s 0s 635330670e-09 1s 1s 635334390e-09 1s 1s 635340390e-09 0s 0s 635340910e-09 1s 1s 635344670e-09 1s 1s 635350630e-09 0s 0s 635351150e-09 1s 1s 635354950e-09 1s 1s 635360870e-09 0s 0s 635361390e-09 1s 1s 635365230e-09 1s 1s 635371110e-09 0s 0s 635371630e-09 1s 1s 635375510e-09 1s 1s 635381350e-09 0s 0s 635381870e-09 1s 1s 635385790e-09 1s 1s 635391590e-09 0s 0s 635392110e-09 1s 1s 635396070e-09 1s 1s 635401830e-09 0s 0s 635402350e-09 1s 1s 635406350e-09 1s 1s 635412070e-09 0s 0s 635412590e-09 1s 1s 635416630e-09 1s 1s 635422310e-09 0s 0s 635422830e-09 1s 1s 635426910e-09 1s 1s 635432550e-09 0s 0s 635433070e-09 1s 1s 635437190e-09 1s 1s 635442790e-09 0s 0s 635443310e-09 1s 1s 635447470e-09 1s 1s 635453030e-09 0s 0s 635453550e-09 1s 1s 635457750e-09 1s 1s 635463270e-09 0s 0s 635463790e-09 1s 1s 635468030e-09 1s 1s 635473510e-09 0s 0s 635474030e-09 1s 1s 635478310e-09 1s 1s 635483750e-09 0s 0s 635484270e-09 1s 1s 635488590e-09 1s 1s 635493990e-09 0s 0s 635494510e-09 1s 1s 635498870e-09 1s 1s 635504230e-09 0s 0s 635504750e-09 1s 1s 635509150e-09 1s 1s 635514470e-09 0s 0s 635514990e-09 1s 1s 635519430e-09 1s 1s 635524710e-09 0s 0s 635525230e-09 1s 1s 635529710e-09 1s 1s 635534950e-09 0s 0s 635535470e-09 1s 1s 635539990e-09 1s 1s 635545190e-09 0s 0s 635545710e-09 1s 1s 635550270e-09 1s 1s 635555430e-09 0s 0s 635555950e-09 1s 1s 635560550e-09 1s 1s 635565670e-09 0s 0s 635566190e-09 1s 1s 635570830e-09 1s 1s 635575910e-09 0s 0s 635576430e-09 1s 1s 635581110e-09 1s 1s 635586150e-09 0s 0s 635586670e-09 1s 1s 635591390e-09 1s 1s 635596390e-09 0s 0s 635596910e-09 1s 1s 635601670e-09 1s 1s 635606630e-09 0s 0s 635607150e-09 1s 1s 635611950e-09 1s 1s 635616870e-09 0s 0s 635617390e-09 1s 1s 635622230e-09 1s 1s 635627110e-09 0s 0s 635627630e-09 1s 1s 635632510e-09 1s 1s 635637350e-09 0s 0s 635637870e-09 1s 1s 635642790e-09 1s 1s 635647590e-09 0s 0s 635648110e-09 1s 1s 635653070e-09 1s 1s 635657830e-09 0s 0s 635658350e-09 1s 1s 635663350e-09 1s 1s 635668070e-09 0s 0s 635668590e-09 1s 1s 635673630e-09 1s 1s 635678310e-09 0s 0s 635678830e-09 1s 1s 635683910e-09 1s 1s 635688550e-09 0s 0s 635689070e-09 1s 1s 635694190e-09 1s 1s 635698790e-09 0s 0s 635699310e-09 1s 1s 635704470e-09 1s 1s 635709030e-09 0s 0s 635709550e-09 1s 1s 635714750e-09 1s 1s 635719270e-09 0s 0s 635719790e-09 1s 1s 635725030e-09 1s 1s 635729510e-09 0s 0s 635730030e-09 1s 1s 635735310e-09 1s 1s 635739750e-09 0s 0s 635740270e-09 1s 1s 635745590e-09 1s 1s 635749990e-09 0s 0s 635750510e-09 1s 1s 635755870e-09 1s 1s 635760230e-09 0s 0s 635760750e-09 1s 1s 635766150e-09 1s 1s 635770470e-09 0s 0s 635770990e-09 1s 1s 635776430e-09 1s 1s 635780710e-09 0s 0s 635781230e-09 1s 1s 635786710e-09 1s 1s 635790950e-09 0s 0s 635791470e-09 1s 1s 635796990e-09 1s 1s 635801190e-09 0s 0s 635801710e-09 1s 1s 635807270e-09 1s 1s 635811430e-09 0s 0s 635811950e-09 1s 1s 635817550e-09 1s 1s 635821670e-09 0s 0s 635822190e-09 1s 1s 635827830e-09 1s 1s 635831910e-09 0s 0s 635832430e-09 1s 1s 635838110e-09 1s 1s 635842150e-09 0s 0s 635842670e-09 1s 1s 635848390e-09 1s 1s 635852390e-09 0s 0s 635852910e-09 1s 1s 635858670e-09 1s 1s 635862630e-09 0s 0s 635863150e-09 1s 1s 635868950e-09 1s 1s 635872870e-09 0s 0s 635873390e-09 1s 1s 635879230e-09 1s 1s 635883110e-09 0s 0s 635883630e-09 1s 1s 635889510e-09 1s 1s 635893350e-09 0s 0s 635893870e-09 1s 1s 635899790e-09 1s 1s 635903590e-09 0s 0s 635904110e-09 1s 1s 635910070e-09 1s 1s 635913830e-09 0s 0s 635914350e-09 1s 1s 635920350e-09 1s 1s 635924070e-09 0s 0s 635924590e-09 1s 1s 635930630e-09 1s 1s 635934310e-09 0s 0s 635934830e-09 1s 1s 635940910e-09 1s 1s 635944550e-09 0s 0s 635945070e-09 1s 1s 635951190e-09 1s 1s 635954790e-09 0s 0s 635955310e-09 1s 1s 635961470e-09 1s 1s 635965030e-09 0s 0s 635965550e-09 1s 1s 635971750e-09 1s 1s 635975270e-09 0s 0s 635975790e-09 1s 1s 635982030e-09 1s 1s 635985510e-09 0s 0s 635986030e-09 1s 1s 635992310e-09 1s 1s 635995750e-09 0s 0s 635996270e-09 1s 1s 636002590e-09 1s 1s 636005990e-09 0s 0s 636006510e-09 1s 1s 636012870e-09 1s 1s 636016230e-09 0s 0s 636016750e-09 1s 1s 636023150e-09 1s 1s 636026470e-09 0s 0s 636026990e-09 1s 1s 636033430e-09 1s 1s 636036710e-09 0s 0s 636037230e-09 1s 1s 636043710e-09 1s 1s 636046950e-09 0s 0s 636047470e-09 1s 1s 636053990e-09 1s 1s 636057190e-09 0s 0s 636057710e-09 1s 1s 636064270e-09 1s 1s 636067430e-09 0s 0s 636067950e-09 1s 1s 636074550e-09 1s 1s 636077670e-09 0s 0s 636078190e-09 1s 1s 636084830e-09 1s 1s 636087910e-09 0s 0s 636088430e-09 1s 1s 636095110e-09 1s 1s 636098150e-09 0s 0s 636098670e-09 1s 1s 636105390e-09 1s 1s 636108390e-09 0s 0s 636108910e-09 1s 1s 636115670e-09 1s 1s 636118630e-09 0s 0s 636119150e-09 1s 1s 636125950e-09 1s 1s 636128870e-09 0s 0s 636129390e-09 1s 1s 636136230e-09 1s 1s 636139110e-09 0s 0s 636139630e-09 1s 1s 636146510e-09 1s 1s 636149350e-09 0s 0s 636149870e-09 1s 1s 636156790e-09 1s 1s 636159590e-09 0s 0s 636160110e-09 1s 1s 636167070e-09 1s 1s 636169830e-09 0s 0s 636170350e-09 1s 1s 636177350e-09 1s 1s 636180070e-09 0s 0s 636180590e-09 1s 1s 636187630e-09 1s 1s 636190310e-09 0s 0s 636190830e-09 1s 1s 636197910e-09 1s 1s 636200550e-09 0s 0s 636201070e-09 1s 1s 636208190e-09 1s 1s 636210790e-09 0s 0s 636211310e-09 1s 1s 636218470e-09 1s 1s 636221030e-09 0s 0s 636221550e-09 1s 1s 636228750e-09 1s 1s 636231270e-09 0s 0s 636231790e-09 1s 1s 636239030e-09 1s 1s 636241510e-09 0s 0s 636242030e-09 1s 1s 636249310e-09 1s 1s 636251750e-09 0s 0s 636252270e-09 1s 1s 636259590e-09 1s 1s 636261990e-09 0s 0s 636262510e-09 1s 1s 636269870e-09 1s 1s 636272230e-09 0s 0s 636272750e-09 1s 1s 636280150e-09 1s 1s 636282470e-09 0s 0s 636282990e-09 1s 1s 636290430e-09 1s 1s 636292710e-09 0s 0s 636293230e-09 1s 1s 636300710e-09 1s 1s 636302950e-09 0s 0s 636303470e-09 1s 1s 636310990e-09 1s 1s 636313190e-09 0s 0s 636313710e-09 1s 1s 636321270e-09 1s 1s 636323430e-09 0s 0s 636323950e-09 1s 1s 636331550e-09 1s 1s 636333670e-09 0s 0s 636334190e-09 1s 1s 636341830e-09 1s 1s 636343910e-09 0s 0s 636344430e-09 1s 1s 636352110e-09 1s 1s 636354150e-09 0s 0s 636354670e-09 1s 1s 636362390e-09 1s 1s 636364390e-09 0s 0s 636364910e-09 1s 1s 636372670e-09 1s 1s 636374630e-09 0s 0s 636375150e-09 1s 1s 636382950e-09 1s 1s 636384870e-09 0s 0s 636385390e-09 1s 1s 636393230e-09 1s 1s 636395110e-09 0s 0s 636395630e-09 1s 1s 636403510e-09 1s 1s 636405350e-09 0s 0s 636405870e-09 1s 1s 636413790e-09 1s 1s 636415590e-09 0s 0s 636416110e-09 1s 1s 636424070e-09 1s 1s 636425830e-09 0s 0s 636426350e-09 1s 1s 636434350e-09 1s 1s 636436070e-09 0s 0s 636436590e-09 1s 1s 636444630e-09 1s 1s 636446310e-09 0s 0s 636446830e-09 1s 1s 636454910e-09 1s 1s 636456550e-09 0s 0s 636457070e-09 1s 1s 636465190e-09 1s 1s 636466790e-09 0s 0s 636467310e-09 1s 1s 636475470e-09 1s 1s 636477030e-09 0s 0s 636477550e-09 1s 1s 636485750e-09 1s 1s 636487270e-09 0s 0s 636487790e-09 1s 1s 636496030e-09 1s 1s 636497510e-09 0s 0s 636498030e-09 1s 1s 636506310e-09 1s 1s 636507750e-09 0s 0s 636508270e-09 1s 1s 636516590e-09 1s 1s 636517990e-09 0s 0s 636518510e-09 1s 1s 636526870e-09 1s 1s 636528230e-09 0s 0s 636528750e-09 1s 1s 636537150e-09 1s 1s 636538470e-09 0s 0s 636538990e-09 1s 1s 636547430e-09 1s 1s 636548710e-09 0s 0s 636549230e-09 1s 1s 636557710e-09 1s 1s 636558950e-09 0s 0s 636559470e-09 1s 1s 636567990e-09 1s 1s 636569190e-09 0s 0s 636569710e-09 1s 1s 636578270e-09 1s 1s 636579430e-09 0s 0s 636579950e-09 1s 1s 636588550e-09 1s 1s 636589670e-09 0s 0s 636590190e-09 1s 1s 636598830e-09 1s 1s 636599910e-09 0s 0s 636600430e-09 1s 1s 636609110e-09 1s 1s 636610150e-09 0s 0s 636610670e-09 1s 1s 636619390e-09 1s 1s 636620390e-09 0s 0s 636620910e-09 1s 1s 636629670e-09 1s 1s 636630630e-09 0s 0s 636631150e-09 1s 1s 636639950e-09 1s 1s 636640870e-09 0s 0s 636641390e-09 1s 1s 636650230e-09 1s 1s 636651110e-09 0s 0s 636651630e-09 1s 1s 636660510e-09 1s 1s 636661350e-09 0s 0s 636661870e-09 1s 1s 636670790e-09 1s 1s 636671590e-09 0s 0s 636672110e-09 1s 1s 636681070e-09 1s 1s 636681830e-09 0s 0s 636682350e-09 1s 1s 636691350e-09 1s 1s 636692070e-09 0s 0s 636692590e-09 1s 1s 636701630e-09 1s 1s 636702310e-09 0s 0s 636702830e-09 1s 1s 636711910e-09 1s 1s 636712550e-09 0s 0s 636713070e-09 1s 1s 636722190e-09 1s 1s 636722790e-09 0s 0s 636723310e-09 1s 1s 636732470e-09 1s 1s 636733030e-09 0s 0s 636733550e-09 1s 1s 636742750e-09 1s 1s 636743270e-09 0s 0s 636743790e-09 1s 1s 636753030e-09 1s 1s 636753510e-09 0s 0s 636754030e-09 1s 1s 636763310e-09 1s 1s 636763750e-09 0s 0s 636764270e-09 1s 1s 636773590e-09 1s 1s 636773990e-09 0s 0s 636774510e-09 1s 1s 636783870e-09 1s 1s 636784230e-09 0s 0s 636784750e-09 1s 1s 636794150e-09 1s 1s 636794470e-09 0s 0s 636794990e-09 1s 1s 636804430e-09 1s 1s 636804710e-09 0s 0s 636805230e-09 1s 1s 636814710e-09 1s 1s 636814950e-09 0s 0s 636815470e-09 1s 1s 636824990e-09 1s 1s 636825190e-09 0s 0s 636825710e-09 1s 1s 636835270e-09 1s 1s 636835430e-09 0s 0s 636835950e-09 1s 1s 636845550e-09 1s 1s 636845670e-09 0s 0s 636846190e-09 1s 1s 636855830e-09 1s 1s 636855910e-09 0s 0s 636856430e-09 1s 1s 636866110e-09 1s 1s 636866150e-09 0s 0s 636866670e-09 1s 1s 636876390e-09 0s 0s 636876910e-09 1s 1s 636886630e-09 0s 0s 636886670e-09 0s 0s 636887150e-09 1s 1s 636896870e-09 0s 0s 636896950e-09 0s 0s 636897390e-09 1s 1s 636907110e-09 0s 0s 636907230e-09 0s 0s 636907630e-09 1s 1s 636917350e-09 0s 0s 636917510e-09 0s 0s 636917870e-09 1s 1s 636927590e-09 0s 0s 636927790e-09 0s 0s 636928110e-09 1s 1s 636937830e-09 0s 0s 636938070e-09 0s 0s 636938350e-09 1s 1s 636948070e-09 0s 0s 636948350e-09 0s 0s 636948590e-09 1s 1s 636958310e-09 0s 0s 636958630e-09 0s 0s 636958830e-09 1s 1s 636968550e-09 0s 0s 636968910e-09 0s 0s 636969070e-09 1s 1s 636978790e-09 0s 0s 636979190e-09 0s 0s 636979310e-09 1s 1s 636989030e-09 0s 0s 636989470e-09 0s 0s 636989550e-09 1s 1s 636999270e-09 0s 0s 636999750e-09 0s 0s 636999790e-09 1s 1s 637009510e-09 0s 0s 637010030e-09 1s 1s 637010070e-09 1s 1s 637019790e-09 0s 0s 637020270e-09 1s 1s 637020350e-09 1s 1s 637030030e-09 0s 0s 637030510e-09 1s 1s 637030630e-09 1s 1s 637040270e-09 0s 0s 637040750e-09 1s 1s 637040910e-09 1s 1s 637050510e-09 0s 0s 637050990e-09 1s 1s 637051190e-09 1s 1s 637060750e-09 0s 0s 637061230e-09 1s 1s 637061470e-09 1s 1s 637070990e-09 0s 0s 637071470e-09 1s 1s 637071750e-09 1s 1s 637081230e-09 0s 0s 637081710e-09 1s 1s 637082030e-09 1s 1s 637091470e-09 0s 0s 637091950e-09 1s 1s 637092310e-09 1s 1s 637101710e-09 0s 0s 637102190e-09 1s 1s 637102590e-09 1s 1s 637111950e-09 0s 0s 637112430e-09 1s 1s 637112870e-09 1s 1s 637122190e-09 0s 0s 637122670e-09 1s 1s 637123150e-09 1s 1s 637132430e-09 0s 0s 637132910e-09 1s 1s 637133430e-09 1s 1s 637142670e-09 0s 0s 637143150e-09 1s 1s 637143710e-09 1s 1s 637152910e-09 0s 0s 637153390e-09 1s 1s 637153990e-09 1s 1s 637163150e-09 0s 0s 637163630e-09 1s 1s 637164270e-09 1s 1s 637173390e-09 0s 0s 637173870e-09 1s 1s 637174550e-09 1s 1s 637183630e-09 0s 0s 637184110e-09 1s 1s 637184830e-09 1s 1s 637193870e-09 0s 0s 637194350e-09 1s 1s 637195110e-09 1s 1s 637204110e-09 0s 0s 637204590e-09 1s 1s 637205390e-09 1s 1s 637214350e-09 0s 0s 637214830e-09 1s 1s 637215670e-09 1s 1s 637224590e-09 0s 0s 637225070e-09 1s 1s 637225950e-09 1s 1s 637234830e-09 0s 0s 637235310e-09 1s 1s 637236230e-09 1s 1s 637245070e-09 0s 0s 637245550e-09 1s 1s 637246510e-09 1s 1s 637255310e-09 0s 0s 637255790e-09 1s 1s 637256790e-09 1s 1s 637265550e-09 0s 0s 637266030e-09 1s 1s 637267070e-09 1s 1s 637275790e-09 0s 0s 637276270e-09 1s 1s 637277350e-09 1s 1s 637286030e-09 0s 0s 637286510e-09 1s 1s 637287630e-09 1s 1s 637296270e-09 0s 0s 637296750e-09 1s 1s 637297910e-09 1s 1s 637306510e-09 0s 0s 637306990e-09 1s 1s 637308190e-09 1s 1s 637316750e-09 0s 0s 637317230e-09 1s 1s 637318470e-09 1s 1s 637326990e-09 0s 0s 637327470e-09 1s 1s 637328750e-09 1s 1s 637337230e-09 0s 0s 637337710e-09 1s 1s 637339030e-09 1s 1s 637347470e-09 0s 0s 637347950e-09 1s 1s 637349310e-09 1s 1s 637357710e-09 0s 0s 637358190e-09 1s 1s 637359590e-09 1s 1s 637367950e-09 0s 0s 637368430e-09 1s 1s 637369870e-09 1s 1s 637378190e-09 0s 0s 637378670e-09 1s 1s 637380150e-09 1s 1s 637388430e-09 0s 0s 637388910e-09 1s 1s 637390430e-09 1s 1s 637398670e-09 0s 0s 637399150e-09 1s 1s 637400710e-09 1s 1s 637408910e-09 0s 0s 637409390e-09 1s 1s 637410990e-09 1s 1s 637419150e-09 0s 0s 637419630e-09 1s 1s 637421270e-09 1s 1s 637429390e-09 0s 0s 637429870e-09 1s 1s 637431550e-09 1s 1s 637439630e-09 0s 0s 637440110e-09 1s 1s 637441830e-09 1s 1s 637449870e-09 0s 0s 637450350e-09 1s 1s 637452110e-09 1s 1s 637460110e-09 0s 0s 637460590e-09 1s 1s 637462390e-09 1s 1s 637470350e-09 0s 0s 637470830e-09 1s 1s 637472670e-09 1s 1s 637480590e-09 0s 0s 637481070e-09 1s 1s 637482950e-09 1s 1s 637490830e-09 0s 0s 637491310e-09 1s 1s 637493230e-09 1s 1s 637501070e-09 0s 0s 637501550e-09 1s 1s 637503510e-09 1s 1s 637511310e-09 0s 0s 637511790e-09 1s 1s 637513790e-09 1s 1s 637521550e-09 0s 0s 637522030e-09 1s 1s 637524070e-09 1s 1s 637531790e-09 0s 0s 637532270e-09 1s 1s 637534350e-09 1s 1s 637542030e-09 0s 0s 637542510e-09 1s 1s 637544630e-09 1s 1s 637552270e-09 0s 0s 637552750e-09 1s 1s 637554910e-09 1s 1s 637562510e-09 0s 0s 637562990e-09 1s 1s 637565190e-09 1s 1s 637572750e-09 0s 0s 637573230e-09 1s 1s 637575470e-09 1s 1s 637582990e-09 0s 0s 637583470e-09 1s 1s 637585750e-09 1s 1s 637593230e-09 0s 0s 637593710e-09 1s 1s 637596030e-09 1s 1s 637603470e-09 0s 0s 637603950e-09 1s 1s 637606310e-09 1s 1s 637613710e-09 0s 0s 637614190e-09 1s 1s 637616590e-09 1s 1s 637623950e-09 0s 0s 637624430e-09 1s 1s 637626870e-09 1s 1s 637634190e-09 0s 0s 637634670e-09 1s 1s 637637150e-09 1s 1s 637644430e-09 0s 0s 637644910e-09 1s 1s 637647430e-09 1s 1s 637654670e-09 0s 0s 637655150e-09 1s 1s 637657710e-09 1s 1s 637664910e-09 0s 0s 637665390e-09 1s 1s 637667990e-09 1s 1s 637675150e-09 0s 0s 637675630e-09 1s 1s 637678270e-09 1s 1s 637685390e-09 0s 0s 637685870e-09 1s 1s 637688550e-09 1s 1s 637695630e-09 0s 0s 637696110e-09 1s 1s 637698830e-09 1s 1s 637705870e-09 0s 0s 637706350e-09 1s 1s 637709110e-09 1s 1s 637716110e-09 0s 0s 637716590e-09 1s 1s 637719390e-09 1s 1s 637726350e-09 0s 0s 637726830e-09 1s 1s 637729670e-09 1s 1s 637736590e-09 0s 0s 637737070e-09 1s 1s 637739950e-09 1s 1s 637746830e-09 0s 0s 637747310e-09 1s 1s 637750230e-09 1s 1s 637757070e-09 0s 0s 637757550e-09 1s 1s 637760510e-09 1s 1s 637767310e-09 0s 0s 637767790e-09 1s 1s 637770790e-09 1s 1s 637777550e-09 0s 0s 637778030e-09 1s 1s 637781070e-09 1s 1s 637787790e-09 0s 0s 637788270e-09 1s 1s 637791350e-09 1s 1s 637798030e-09 0s 0s 637798510e-09 1s 1s 637801630e-09 1s 1s 637808270e-09 0s 0s 637808750e-09 1s 1s 637811910e-09 1s 1s 637818510e-09 0s 0s 637818990e-09 1s 1s 637822190e-09 1s 1s 637828750e-09 0s 0s 637829230e-09 1s 1s 637832470e-09 1s 1s 637838990e-09 0s 0s 637839470e-09 1s 1s 637842750e-09 1s 1s 637849230e-09 0s 0s 637849710e-09 1s 1s 637853030e-09 1s 1s 637859470e-09 0s 0s 637859950e-09 1s 1s 637863310e-09 1s 1s 637869710e-09 0s 0s 637870190e-09 1s 1s 637873590e-09 1s 1s 637879950e-09 0s 0s 637880430e-09 1s 1s 637883870e-09 1s 1s 637890190e-09 0s 0s 637890670e-09 1s 1s 637894150e-09 1s 1s 637900430e-09 0s 0s 637900910e-09 1s 1s 637904430e-09 1s 1s 637910670e-09 0s 0s 637911150e-09 1s 1s 637914710e-09 1s 1s 637920910e-09 0s 0s 637921390e-09 1s 1s 637924990e-09 1s 1s 637931150e-09 0s 0s 637931630e-09 1s 1s 637935270e-09 1s 1s 637941390e-09 0s 0s 637941870e-09 1s 1s 637945550e-09 1s 1s 637951630e-09 0s 0s 637952110e-09 1s 1s 637955830e-09 1s 1s 637961870e-09 0s 0s 637962350e-09 1s 1s 637966110e-09 1s 1s 637972110e-09 0s 0s 637972590e-09 1s 1s 637976390e-09 1s 1s 637982350e-09 0s 0s 637982830e-09 1s 1s 637986670e-09 1s 1s 637992590e-09 0s 0s 637993070e-09 1s 1s 637996950e-09 1s 1s 638002830e-09 0s 0s 638003310e-09 1s 1s 638007230e-09 1s 1s 638013070e-09 0s 0s 638013550e-09 1s 1s 638017510e-09 1s 1s 638023310e-09 0s 0s 638023790e-09 1s 1s 638027790e-09 1s 1s 638033550e-09 0s 0s 638034030e-09 1s 1s 638038070e-09 1s 1s 638043790e-09 0s 0s 638044270e-09 1s 1s 638048350e-09 1s 1s 638054030e-09 0s 0s 638054510e-09 1s 1s 638058630e-09 1s 1s 638064270e-09 0s 0s 638064750e-09 1s 1s 638068910e-09 1s 1s 638074510e-09 0s 0s 638074990e-09 1s 1s 638079190e-09 1s 1s 638084750e-09 0s 0s 638085230e-09 1s 1s 638089470e-09 1s 1s 638094990e-09 0s 0s 638095470e-09 1s 1s 638099750e-09 1s 1s 638105230e-09 0s 0s 638105710e-09 1s 1s 638110030e-09 1s 1s 638115470e-09 0s 0s 638115950e-09 1s 1s 638120310e-09 1s 1s 638125710e-09 0s 0s 638126190e-09 1s 1s 638130590e-09 1s 1s 638135950e-09 0s 0s 638136430e-09 1s 1s 638140870e-09 1s 1s 638146190e-09 0s 0s 638146670e-09 1s 1s 638151150e-09 1s 1s 638156430e-09 0s 0s 638156910e-09 1s 1s 638161430e-09 1s 1s 638166670e-09 0s 0s 638167150e-09 1s 1s 638171710e-09 1s 1s 638176910e-09 0s 0s 638177390e-09 1s 1s 638181990e-09 1s 1s 638187150e-09 0s 0s 638187630e-09 1s 1s 638192270e-09 1s 1s 638197390e-09 0s 0s 638197870e-09 1s 1s 638202550e-09 1s 1s 638207630e-09 0s 0s 638208110e-09 1s 1s 638212830e-09 1s 1s 638217870e-09 0s 0s 638218350e-09 1s 1s 638223110e-09 1s 1s 638228110e-09 0s 0s 638228590e-09 1s 1s 638233390e-09 1s 1s 638238350e-09 0s 0s 638238830e-09 1s 1s 638243670e-09 1s 1s 638248590e-09 0s 0s 638249070e-09 1s 1s 638253950e-09 1s 1s 638258830e-09 0s 0s 638259310e-09 1s 1s 638264230e-09 1s 1s 638269070e-09 0s 0s 638269550e-09 1s 1s 638274510e-09 1s 1s 638279310e-09 0s 0s 638279790e-09 1s 1s 638284790e-09 1s 1s 638289550e-09 0s 0s 638290030e-09 1s 1s 638295070e-09 1s 1s 638299790e-09 0s 0s 638300270e-09 1s 1s 638305350e-09 1s 1s 638310030e-09 0s 0s 638310510e-09 1s 1s 638315630e-09 1s 1s 638320270e-09 0s 0s 638320750e-09 1s 1s 638325910e-09 1s 1s 638330510e-09 0s 0s 638330990e-09 1s 1s 638336190e-09 1s 1s 638340750e-09 0s 0s 638341230e-09 1s 1s 638346470e-09 1s 1s 638350990e-09 0s 0s 638351470e-09 1s 1s 638356750e-09 1s 1s 638361230e-09 0s 0s 638361710e-09 1s 1s 638367030e-09 1s 1s 638371470e-09 0s 0s 638371950e-09 1s 1s 638377310e-09 1s 1s 638381710e-09 0s 0s 638382190e-09 1s 1s 638387590e-09 1s 1s 638391950e-09 0s 0s 638392430e-09 1s 1s 638397870e-09 1s 1s 638402190e-09 0s 0s 638402670e-09 1s 1s 638408150e-09 1s 1s 638412430e-09 0s 0s 638412910e-09 1s 1s 638418430e-09 1s 1s 638422670e-09 0s 0s 638423150e-09 1s 1s 638428710e-09 1s 1s 638432910e-09 0s 0s 638433390e-09 1s 1s 638438990e-09 1s 1s 638443150e-09 0s 0s 638443630e-09 1s 1s 638449270e-09 1s 1s 638453390e-09 0s 0s 638453870e-09 1s 1s 638459550e-09 1s 1s 638463630e-09 0s 0s 638464110e-09 1s 1s 638469830e-09 1s 1s 638473870e-09 0s 0s 638474350e-09 1s 1s 638480110e-09 1s 1s 638484110e-09 0s 0s 638484590e-09 1s 1s 638490390e-09 1s 1s 638494350e-09 0s 0s 638494830e-09 1s 1s 638500670e-09 1s 1s 638504590e-09 0s 0s 638505070e-09 1s 1s 638510950e-09 1s 1s 638514830e-09 0s 0s 638515310e-09 1s 1s 638521230e-09 1s 1s 638525070e-09 0s 0s 638525550e-09 1s 1s 638531510e-09 1s 1s 638535310e-09 0s 0s 638535790e-09 1s 1s 638541790e-09 1s 1s 638545550e-09 0s 0s 638546030e-09 1s 1s 638552070e-09 1s 1s 638555790e-09 0s 0s 638556270e-09 1s 1s 638562350e-09 1s 1s 638566030e-09 0s 0s 638566510e-09 1s 1s 638572630e-09 1s 1s 638576270e-09 0s 0s 638576750e-09 1s 1s 638582910e-09 1s 1s 638586510e-09 0s 0s 638586990e-09 1s 1s 638593190e-09 1s 1s 638596750e-09 0s 0s 638597230e-09 1s 1s 638603470e-09 1s 1s 638606990e-09 0s 0s 638607470e-09 1s 1s 638613750e-09 1s 1s 638617230e-09 0s 0s 638617710e-09 1s 1s 638624030e-09 1s 1s 638627470e-09 0s 0s 638627950e-09 1s 1s 638634310e-09 1s 1s 638637710e-09 0s 0s 638638190e-09 1s 1s 638644590e-09 1s 1s 638647950e-09 0s 0s 638648430e-09 1s 1s 638654870e-09 1s 1s 638658190e-09 0s 0s 638658670e-09 1s 1s 638665150e-09 1s 1s 638668430e-09 0s 0s 638668910e-09 1s 1s 638675430e-09 1s 1s 638678670e-09 0s 0s 638679150e-09 1s 1s 638685710e-09 1s 1s 638688910e-09 0s 0s 638689390e-09 1s 1s 638695990e-09 1s 1s 638699150e-09 0s 0s 638699630e-09 1s 1s 638706270e-09 1s 1s 638709390e-09 0s 0s 638709870e-09 1s 1s 638716550e-09 1s 1s 638719630e-09 0s 0s 638720110e-09 1s 1s 638726830e-09 1s 1s 638729870e-09 0s 0s 638730350e-09 1s 1s 638737110e-09 1s 1s 638740110e-09 0s 0s 638740590e-09 1s 1s 638747390e-09 1s 1s 638750350e-09 0s 0s 638750830e-09 1s 1s 638757670e-09 1s 1s 638760590e-09 0s 0s 638761070e-09 1s 1s 638767950e-09 1s 1s 638770830e-09 0s 0s 638771310e-09 1s 1s 638778230e-09 1s 1s 638781070e-09 0s 0s 638781550e-09 1s 1s 638788510e-09 1s 1s 638791310e-09 0s 0s 638791790e-09 1s 1s 638798790e-09 1s 1s 638801550e-09 0s 0s 638802030e-09 1s 1s 638809070e-09 1s 1s 638811790e-09 0s 0s 638812270e-09 1s 1s 638819350e-09 1s 1s 638822030e-09 0s 0s 638822510e-09 1s 1s 638829630e-09 1s 1s 638832270e-09 0s 0s 638832750e-09 1s 1s 638839910e-09 1s 1s 638842510e-09 0s 0s 638842990e-09 1s 1s 638850190e-09 1s 1s 638852750e-09 0s 0s 638853230e-09 1s 1s 638860470e-09 1s 1s 638862990e-09 0s 0s 638863470e-09 1s 1s 638870750e-09 1s 1s 638873230e-09 0s 0s 638873710e-09 1s 1s 638881030e-09 1s 1s 638883470e-09 0s 0s 638883950e-09 1s 1s 638891310e-09 1s 1s 638893710e-09 0s 0s 638894190e-09 1s 1s 638901590e-09 1s 1s 638903950e-09 0s 0s 638904430e-09 1s 1s 638911870e-09 1s 1s 638914190e-09 0s 0s 638914670e-09 1s 1s 638922150e-09 1s 1s 638924430e-09 0s 0s 638924910e-09 1s 1s 638932430e-09 1s 1s 638934670e-09 0s 0s 638935150e-09 1s 1s 638942710e-09 1s 1s 638944910e-09 0s 0s 638945390e-09 1s 1s 638952990e-09 1s 1s 638955150e-09 0s 0s 638955630e-09 1s 1s 638963270e-09 1s 1s 638965390e-09 0s 0s 638965870e-09 1s 1s 638973550e-09 1s 1s 638975630e-09 0s 0s 638976110e-09 1s 1s 638983830e-09 1s 1s 638985870e-09 0s 0s 638986350e-09 1s 1s 638994110e-09 1s 1s 638996110e-09 0s 0s 638996590e-09 1s 1s 639004390e-09 1s 1s 639006350e-09 0s 0s 639006830e-09 1s 1s 639014670e-09 1s 1s 639016590e-09 0s 0s 639017070e-09 1s 1s 639024950e-09 1s 1s 639026830e-09 0s 0s 639027310e-09 1s 1s 639035230e-09 1s 1s 639037070e-09 0s 0s 639037550e-09 1s 1s 639045510e-09 1s 1s 639047310e-09 0s 0s 639047790e-09 1s 1s 639055790e-09 1s 1s 639057550e-09 0s 0s 639058030e-09 1s 1s 639066070e-09 1s 1s 639067790e-09 0s 0s 639068270e-09 1s 1s 639076350e-09 1s 1s 639078030e-09 0s 0s 639078510e-09 1s 1s 639086630e-09 1s 1s 639088270e-09 0s 0s 639088750e-09 1s 1s 639096910e-09 1s 1s 639098510e-09 0s 0s 639098990e-09 1s 1s 639107190e-09 1s 1s 639108750e-09 0s 0s 639109230e-09 1s 1s 639117470e-09 1s 1s 639118990e-09 0s 0s 639119470e-09 1s 1s 639127750e-09 1s 1s 639129230e-09 0s 0s 639129710e-09 1s 1s 639138030e-09 1s 1s 639139470e-09 0s 0s 639139950e-09 1s 1s 639148310e-09 1s 1s 639149710e-09 0s 0s 639150190e-09 1s 1s 639158590e-09 1s 1s 639159950e-09 0s 0s 639160430e-09 1s 1s 639168870e-09 1s 1s 639170190e-09 0s 0s 639170670e-09 1s 1s 639179150e-09 1s 1s 639180430e-09 0s 0s 639180910e-09 1s 1s 639189430e-09 1s 1s 639190670e-09 0s 0s 639191150e-09 1s 1s 639199710e-09 1s 1s 639200910e-09 0s 0s 639201390e-09 1s 1s 639209990e-09 1s 1s 639211150e-09 0s 0s 639211630e-09 1s 1s 639220270e-09 1s 1s 639221390e-09 0s 0s 639221870e-09 1s 1s 639230550e-09 1s 1s 639231630e-09 0s 0s 639232110e-09 1s 1s 639240830e-09 1s 1s 639241870e-09 0s 0s 639242350e-09 1s 1s 639251110e-09 1s 1s 639252110e-09 0s 0s 639252590e-09 1s 1s 639261390e-09 1s 1s 639262350e-09 0s 0s 639262830e-09 1s 1s 639271670e-09 1s 1s 639272590e-09 0s 0s 639273070e-09 1s 1s 639281950e-09 1s 1s 639282830e-09 0s 0s 639283310e-09 1s 1s 639292230e-09 1s 1s 639293070e-09 0s 0s 639293550e-09 1s 1s 639302510e-09 1s 1s 639303310e-09 0s 0s 639303790e-09 1s 1s 639312790e-09 1s 1s 639313550e-09 0s 0s 639314030e-09 1s 1s 639323070e-09 1s 1s 639323790e-09 0s 0s 639324270e-09 1s 1s 639333350e-09 1s 1s 639334030e-09 0s 0s 639334510e-09 1s 1s 639343630e-09 1s 1s 639344270e-09 0s 0s 639344750e-09 1s 1s 639353910e-09 1s 1s 639354510e-09 0s 0s 639354990e-09 1s 1s 639364190e-09 1s 1s 639364750e-09 0s 0s 639365230e-09 1s 1s 639374470e-09 1s 1s 639374990e-09 0s 0s 639375470e-09 1s 1s 639384750e-09 1s 1s 639385230e-09 0s 0s 639385710e-09 1s 1s 639395030e-09 1s 1s 639395470e-09 0s 0s 639395950e-09 1s 1s 639405310e-09 1s 1s 639405710e-09 0s 0s 639406190e-09 1s 1s 639415590e-09 1s 1s 639415950e-09 0s 0s 639416430e-09 1s 1s 639425870e-09 1s 1s 639426190e-09 0s 0s 639426670e-09 1s 1s 639436150e-09 1s 1s 639436430e-09 0s 0s 639436910e-09 1s 1s 639446430e-09 1s 1s 639446670e-09 0s 0s 639447150e-09 1s 1s 639456710e-09 1s 1s 639456910e-09 0s 0s 639457390e-09 1s 1s 639466990e-09 1s 1s 639467150e-09 0s 0s 639467630e-09 1s 1s 639477270e-09 1s 1s 639477390e-09 0s 0s 639477870e-09 1s 1s 639487550e-09 1s 1s 639487630e-09 0s 0s 639488110e-09 1s 1s 639497830e-09 1s 1s 639497870e-09 0s 0s 639498350e-09 1s 1s 639508110e-09 0s 0s 639508590e-09 1s 1s 639518350e-09 0s 0s 639518390e-09 0s 0s 639518830e-09 1s 1s 639528590e-09 0s 0s 639528670e-09 0s 0s 639529070e-09 1s 1s 639538830e-09 0s 0s 639538950e-09 0s 0s 639539310e-09 1s 1s 639549070e-09 0s 0s 639549230e-09 0s 0s 639549550e-09 1s 1s 639559310e-09 0s 0s 639559510e-09 0s 0s 639559790e-09 1s 1s 639569550e-09 0s 0s 639569790e-09 0s 0s 639570030e-09 1s 1s 639579790e-09 0s 0s 639580070e-09 0s 0s 639580270e-09 1s 1s 639590030e-09 0s 0s 639590350e-09 0s 0s 639590510e-09 1s 1s 639600270e-09 0s 0s 639600630e-09 0s 0s 639600750e-09 1s 1s 639610510e-09 0s 0s 639610910e-09 0s 0s 639610990e-09 1s 1s 639620750e-09 0s 0s 639621190e-09 0s 0s 639621230e-09 1s 1s 639630990e-09 0s 0s 639631470e-09 1s 1s 639631510e-09 1s 1s 639641270e-09 0s 0s 639641710e-09 1s 1s 639641790e-09 1s 1s 639651510e-09 0s 0s 639651950e-09 1s 1s 639652070e-09 1s 1s 639661750e-09 0s 0s 639662190e-09 1s 1s 639662350e-09 1s 1s 639671990e-09 0s 0s 639672430e-09 1s 1s 639672630e-09 1s 1s 639682230e-09 0s 0s 639682670e-09 1s 1s 639682910e-09 1s 1s 639692470e-09 0s 0s 639692910e-09 1s 1s 639693190e-09 1s 1s 639702710e-09 0s 0s 639703150e-09 1s 1s 639703470e-09 1s 1s 639712950e-09 0s 0s 639713390e-09 1s 1s 639713750e-09 1s 1s 639723190e-09 0s 0s 639723630e-09 1s 1s 639724030e-09 1s 1s 639733430e-09 0s 0s 639733870e-09 1s 1s 639734310e-09 1s 1s 639743670e-09 0s 0s 639744110e-09 1s 1s 639744590e-09 1s 1s 639753910e-09 0s 0s 639754350e-09 1s 1s 639754870e-09 1s 1s 639764150e-09 0s 0s 639764590e-09 1s 1s 639765150e-09 1s 1s 639774390e-09 0s 0s 639774830e-09 1s 1s 639775430e-09 1s 1s 639784630e-09 0s 0s 639785070e-09 1s 1s 639785710e-09 1s 1s 639794870e-09 0s 0s 639795310e-09 1s 1s 639795990e-09 1s 1s 639805110e-09 0s 0s 639805550e-09 1s 1s 639806270e-09 1s 1s 639815350e-09 0s 0s 639815790e-09 1s 1s 639816550e-09 1s 1s 639825590e-09 0s 0s 639826030e-09 1s 1s 639826830e-09 1s 1s 639835830e-09 0s 0s 639836270e-09 1s 1s 639837110e-09 1s 1s 639846070e-09 0s 0s 639846510e-09 1s 1s 639847390e-09 1s 1s 639856310e-09 0s 0s 639856750e-09 1s 1s 639857670e-09 1s 1s 639866550e-09 0s 0s 639866990e-09 1s 1s 639867950e-09 1s 1s 639876790e-09 0s 0s 639877230e-09 1s 1s 639878230e-09 1s 1s 639887030e-09 0s 0s 639887470e-09 1s 1s 639888510e-09 1s 1s 639897270e-09 0s 0s 639897710e-09 1s 1s 639898790e-09 1s 1s 639907510e-09 0s 0s 639907950e-09 1s 1s 639909070e-09 1s 1s 639917750e-09 0s 0s 639918190e-09 1s 1s 639919350e-09 1s 1s 639927990e-09 0s 0s 639928430e-09 1s 1s 639929630e-09 1s 1s 639938230e-09 0s 0s 639938670e-09 1s 1s 639939910e-09 1s 1s 639948470e-09 0s 0s 639948910e-09 1s 1s 639950190e-09 1s 1s 639958710e-09 0s 0s 639959150e-09 1s 1s 639960470e-09 1s 1s 639968950e-09 0s 0s 639969390e-09 1s 1s 639970750e-09 1s 1s 639979190e-09 0s 0s 639979630e-09 1s 1s 639981030e-09 1s 1s 639989430e-09 0s 0s 639989870e-09 1s 1s 639991310e-09 1s 1s 639999670e-09 0s 0s 640000110e-09 1s 1s 640001590e-09 1s 1s 640009910e-09 0s 0s 640010350e-09 1s 1s 640011870e-09 1s 1s 640020150e-09 0s 0s 640020590e-09 1s 1s 640022150e-09 1s 1s 640030390e-09 0s 0s 640030830e-09 1s 1s 640032430e-09 1s 1s 640040630e-09 0s 0s 640041070e-09 1s 1s 640042710e-09 1s 1s 640050870e-09 0s 0s 640051310e-09 1s 1s 640052990e-09 1s 1s 640061110e-09 0s 0s 640061550e-09 1s 1s 640063270e-09 1s 1s 640071350e-09 0s 0s 640071790e-09 1s 1s 640073550e-09 1s 1s 640081590e-09 0s 0s 640082030e-09 1s 1s 640083830e-09 1s 1s 640091830e-09 0s 0s 640092270e-09 1s 1s 640094110e-09 1s 1s 640102070e-09 0s 0s 640102510e-09 1s 1s 640104390e-09 1s 1s 640112310e-09 0s 0s 640112750e-09 1s 1s 640114670e-09 1s 1s 640122550e-09 0s 0s 640122990e-09 1s 1s 640124950e-09 1s 1s 640132790e-09 0s 0s 640133230e-09 1s 1s 640135230e-09 1s 1s 640143030e-09 0s 0s 640143470e-09 1s 1s 640145510e-09 1s 1s 640153270e-09 0s 0s 640153710e-09 1s 1s 640155790e-09 1s 1s 640163510e-09 0s 0s 640163950e-09 1s 1s 640166070e-09 1s 1s 640173750e-09 0s 0s 640174190e-09 1s 1s 640176350e-09 1s 1s 640183990e-09 0s 0s 640184430e-09 1s 1s 640186630e-09 1s 1s 640194230e-09 0s 0s 640194670e-09 1s 1s 640196910e-09 1s 1s 640204470e-09 0s 0s 640204910e-09 1s 1s 640207190e-09 1s 1s 640214710e-09 0s 0s 640215150e-09 1s 1s 640217470e-09 1s 1s 640224950e-09 0s 0s 640225390e-09 1s 1s 640227750e-09 1s 1s 640235190e-09 0s 0s 640235630e-09 1s 1s 640238030e-09 1s 1s 640245430e-09 0s 0s 640245870e-09 1s 1s 640248310e-09 1s 1s 640255670e-09 0s 0s 640256110e-09 1s 1s 640258590e-09 1s 1s 640265910e-09 0s 0s 640266350e-09 1s 1s 640268870e-09 1s 1s 640276150e-09 0s 0s 640276590e-09 1s 1s 640279150e-09 1s 1s 640286390e-09 0s 0s 640286830e-09 1s 1s 640289430e-09 1s 1s 640296630e-09 0s 0s 640297070e-09 1s 1s 640299710e-09 1s 1s 640306870e-09 0s 0s 640307310e-09 1s 1s 640309990e-09 1s 1s 640317110e-09 0s 0s 640317550e-09 1s 1s 640320270e-09 1s 1s 640327350e-09 0s 0s 640327790e-09 1s 1s 640330550e-09 1s 1s 640337590e-09 0s 0s 640338030e-09 1s 1s 640340830e-09 1s 1s 640347830e-09 0s 0s 640348270e-09 1s 1s 640351110e-09 1s 1s 640358070e-09 0s 0s 640358510e-09 1s 1s 640361390e-09 1s 1s 640368310e-09 0s 0s 640368750e-09 1s 1s 640371670e-09 1s 1s 640378550e-09 0s 0s 640378990e-09 1s 1s 640381950e-09 1s 1s 640388790e-09 0s 0s 640389230e-09 1s 1s 640392230e-09 1s 1s 640399030e-09 0s 0s 640399470e-09 1s 1s 640402510e-09 1s 1s 640409270e-09 0s 0s 640409710e-09 1s 1s 640412790e-09 1s 1s 640419510e-09 0s 0s 640419950e-09 1s 1s 640423070e-09 1s 1s 640429750e-09 0s 0s 640430190e-09 1s 1s 640433350e-09 1s 1s 640439990e-09 0s 0s 640440430e-09 1s 1s 640443630e-09 1s 1s 640450230e-09 0s 0s 640450670e-09 1s 1s 640453910e-09 1s 1s 640460470e-09 0s 0s 640460910e-09 1s 1s 640464190e-09 1s 1s 640470710e-09 0s 0s 640471150e-09 1s 1s 640474470e-09 1s 1s 640480950e-09 0s 0s 640481390e-09 1s 1s 640484750e-09 1s 1s 640491190e-09 0s 0s 640491630e-09 1s 1s 640495030e-09 1s 1s 640501430e-09 0s 0s 640501870e-09 1s 1s 640505310e-09 1s 1s 640511670e-09 0s 0s 640512110e-09 1s 1s 640515590e-09 1s 1s 640521910e-09 0s 0s 640522350e-09 1s 1s 640525870e-09 1s 1s 640532150e-09 0s 0s 640532590e-09 1s 1s 640536150e-09 1s 1s 640542390e-09 0s 0s 640542830e-09 1s 1s 640546430e-09 1s 1s 640552630e-09 0s 0s 640553070e-09 1s 1s 640556710e-09 1s 1s 640562870e-09 0s 0s 640563310e-09 1s 1s 640566990e-09 1s 1s 640573110e-09 0s 0s 640573550e-09 1s 1s 640577270e-09 1s 1s 640583350e-09 0s 0s 640583790e-09 1s 1s 640587550e-09 1s 1s 640593590e-09 0s 0s 640594030e-09 1s 1s 640597830e-09 1s 1s 640603830e-09 0s 0s 640604270e-09 1s 1s 640608110e-09 1s 1s 640614070e-09 0s 0s 640614510e-09 1s 1s 640618390e-09 1s 1s 640624310e-09 0s 0s 640624750e-09 1s 1s 640628670e-09 1s 1s 640634550e-09 0s 0s 640634990e-09 1s 1s 640638950e-09 1s 1s 640644790e-09 0s 0s 640645230e-09 1s 1s 640649230e-09 1s 1s 640655030e-09 0s 0s 640655470e-09 1s 1s 640659510e-09 1s 1s 640665270e-09 0s 0s 640665710e-09 1s 1s 640669790e-09 1s 1s 640675510e-09 0s 0s 640675950e-09 1s 1s 640680070e-09 1s 1s 640685750e-09 0s 0s 640686190e-09 1s 1s 640690350e-09 1s 1s 640695990e-09 0s 0s 640696430e-09 1s 1s 640700630e-09 1s 1s 640706230e-09 0s 0s 640706670e-09 1s 1s 640710910e-09 1s 1s 640716470e-09 0s 0s 640716910e-09 1s 1s 640721190e-09 1s 1s 640726710e-09 0s 0s 640727150e-09 1s 1s 640731470e-09 1s 1s 640736950e-09 0s 0s 640737390e-09 1s 1s 640741750e-09 1s 1s 640747190e-09 0s 0s 640747630e-09 1s 1s 640752030e-09 1s 1s 640757430e-09 0s 0s 640757870e-09 1s 1s 640762310e-09 1s 1s 640767670e-09 0s 0s 640768110e-09 1s 1s 640772590e-09 1s 1s 640777910e-09 0s 0s 640778350e-09 1s 1s 640782870e-09 1s 1s 640788150e-09 0s 0s 640788590e-09 1s 1s 640793150e-09 1s 1s 640798390e-09 0s 0s 640798830e-09 1s 1s 640803430e-09 1s 1s 640808630e-09 0s 0s 640809070e-09 1s 1s 640813710e-09 1s 1s 640818870e-09 0s 0s 640819310e-09 1s 1s 640823990e-09 1s 1s 640829110e-09 0s 0s 640829550e-09 1s 1s 640834270e-09 1s 1s 640839350e-09 0s 0s 640839790e-09 1s 1s 640844550e-09 1s 1s 640849590e-09 0s 0s 640850030e-09 1s 1s 640854830e-09 1s 1s 640859830e-09 0s 0s 640860270e-09 1s 1s 640865110e-09 1s 1s 640870070e-09 0s 0s 640870510e-09 1s 1s 640875390e-09 1s 1s 640880310e-09 0s 0s 640880750e-09 1s 1s 640885670e-09 1s 1s 640890550e-09 0s 0s 640890990e-09 1s 1s 640895950e-09 1s 1s 640900790e-09 0s 0s 640901230e-09 1s 1s 640906230e-09 1s 1s 640911030e-09 0s 0s 640911470e-09 1s 1s 640916510e-09 1s 1s 640921270e-09 0s 0s 640921710e-09 1s 1s 640926790e-09 1s 1s 640931510e-09 0s 0s 640931950e-09 1s 1s 640937070e-09 1s 1s 640941750e-09 0s 0s 640942190e-09 1s 1s 640947350e-09 1s 1s 640951990e-09 0s 0s 640952430e-09 1s 1s 640957630e-09 1s 1s 640962230e-09 0s 0s 640962670e-09 1s 1s 640967910e-09 1s 1s 640972470e-09 0s 0s 640972910e-09 1s 1s 640978190e-09 1s 1s 640982710e-09 0s 0s 640983150e-09 1s 1s 640988470e-09 1s 1s 640992950e-09 0s 0s 640993390e-09 1s 1s 640998750e-09 1s 1s 641003190e-09 0s 0s 641003630e-09 1s 1s 641009030e-09 1s 1s 641013430e-09 0s 0s 641013870e-09 1s 1s 641019310e-09 1s 1s 641023670e-09 0s 0s 641024110e-09 1s 1s 641029590e-09 1s 1s 641033910e-09 0s 0s 641034350e-09 1s 1s 641039870e-09 1s 1s 641044150e-09 0s 0s 641044590e-09 1s 1s 641050150e-09 1s 1s 641054390e-09 0s 0s 641054830e-09 1s 1s 641060430e-09 1s 1s 641064630e-09 0s 0s 641065070e-09 1s 1s 641070710e-09 1s 1s 641074870e-09 0s 0s 641075310e-09 1s 1s 641080990e-09 1s 1s 641085110e-09 0s 0s 641085550e-09 1s 1s 641091270e-09 1s 1s 641095350e-09 0s 0s 641095790e-09 1s 1s 641101550e-09 1s 1s 641105590e-09 0s 0s 641106030e-09 1s 1s 641111830e-09 1s 1s 641115830e-09 0s 0s 641116270e-09 1s 1s 641122110e-09 1s 1s 641126070e-09 0s 0s 641126510e-09 1s 1s 641132390e-09 1s 1s 641136310e-09 0s 0s 641136750e-09 1s 1s 641142670e-09 1s 1s 641146550e-09 0s 0s 641146990e-09 1s 1s 641152950e-09 1s 1s 641156790e-09 0s 0s 641157230e-09 1s 1s 641163230e-09 1s 1s 641167030e-09 0s 0s 641167470e-09 1s 1s 641173510e-09 1s 1s 641177270e-09 0s 0s 641177710e-09 1s 1s 641183790e-09 1s 1s 641187510e-09 0s 0s 641187950e-09 1s 1s 641194070e-09 1s 1s 641197750e-09 0s 0s 641198190e-09 1s 1s 641204350e-09 1s 1s 641207990e-09 0s 0s 641208430e-09 1s 1s 641214630e-09 1s 1s 641218230e-09 0s 0s 641218670e-09 1s 1s 641224910e-09 1s 1s 641228470e-09 0s 0s 641228910e-09 1s 1s 641235190e-09 1s 1s 641238710e-09 0s 0s 641239150e-09 1s 1s 641245470e-09 1s 1s 641248950e-09 0s 0s 641249390e-09 1s 1s 641255750e-09 1s 1s 641259190e-09 0s 0s 641259630e-09 1s 1s 641266030e-09 1s 1s 641269430e-09 0s 0s 641269870e-09 1s 1s 641276310e-09 1s 1s 641279670e-09 0s 0s 641280110e-09 1s 1s 641286590e-09 1s 1s 641289910e-09 0s 0s 641290350e-09 1s 1s 641296870e-09 1s 1s 641300150e-09 0s 0s 641300590e-09 1s 1s 641307150e-09 1s 1s 641310390e-09 0s 0s 641310830e-09 1s 1s 641317430e-09 1s 1s 641320630e-09 0s 0s 641321070e-09 1s 1s 641327710e-09 1s 1s 641330870e-09 0s 0s 641331310e-09 1s 1s 641337990e-09 1s 1s 641341110e-09 0s 0s 641341550e-09 1s 1s 641348270e-09 1s 1s 641351350e-09 0s 0s 641351790e-09 1s 1s 641358550e-09 1s 1s 641361590e-09 0s 0s 641362030e-09 1s 1s 641368830e-09 1s 1s 641371830e-09 0s 0s 641372270e-09 1s 1s 641379110e-09 1s 1s 641382070e-09 0s 0s 641382510e-09 1s 1s 641389390e-09 1s 1s 641392310e-09 0s 0s 641392750e-09 1s 1s 641399670e-09 1s 1s 641402550e-09 0s 0s 641402990e-09 1s 1s 641409950e-09 1s 1s 641412790e-09 0s 0s 641413230e-09 1s 1s 641420230e-09 1s 1s 641423030e-09 0s 0s 641423470e-09 1s 1s 641430510e-09 1s 1s 641433270e-09 0s 0s 641433710e-09 1s 1s 641440790e-09 1s 1s 641443510e-09 0s 0s 641443950e-09 1s 1s 641451070e-09 1s 1s 641453750e-09 0s 0s 641454190e-09 1s 1s 641461350e-09 1s 1s 641463990e-09 0s 0s 641464430e-09 1s 1s 641471630e-09 1s 1s 641474230e-09 0s 0s 641474670e-09 1s 1s 641481910e-09 1s 1s 641484470e-09 0s 0s 641484910e-09 1s 1s 641492190e-09 1s 1s 641494710e-09 0s 0s 641495150e-09 1s 1s 641502470e-09 1s 1s 641504950e-09 0s 0s 641505390e-09 1s 1s 641512750e-09 1s 1s 641515190e-09 0s 0s 641515630e-09 1s 1s 641523030e-09 1s 1s 641525430e-09 0s 0s 641525870e-09 1s 1s 641533310e-09 1s 1s 641535670e-09 0s 0s 641536110e-09 1s 1s 641543590e-09 1s 1s 641545910e-09 0s 0s 641546350e-09 1s 1s 641553870e-09 1s 1s 641556150e-09 0s 0s 641556590e-09 1s 1s 641564150e-09 1s 1s 641566390e-09 0s 0s 641566830e-09 1s 1s 641574430e-09 1s 1s 641576630e-09 0s 0s 641577070e-09 1s 1s 641584710e-09 1s 1s 641586870e-09 0s 0s 641587310e-09 1s 1s 641594990e-09 1s 1s 641597110e-09 0s 0s 641597550e-09 1s 1s 641605270e-09 1s 1s 641607350e-09 0s 0s 641607790e-09 1s 1s 641615550e-09 1s 1s 641617590e-09 0s 0s 641618030e-09 1s 1s 641625830e-09 1s 1s 641627830e-09 0s 0s 641628270e-09 1s 1s 641636110e-09 1s 1s 641638070e-09 0s 0s 641638510e-09 1s 1s 641646390e-09 1s 1s 641648310e-09 0s 0s 641648750e-09 1s 1s 641656670e-09 1s 1s 641658550e-09 0s 0s 641658990e-09 1s 1s 641666950e-09 1s 1s 641668790e-09 0s 0s 641669230e-09 1s 1s 641677230e-09 1s 1s 641679030e-09 0s 0s 641679470e-09 1s 1s 641687510e-09 1s 1s 641689270e-09 0s 0s 641689710e-09 1s 1s 641697790e-09 1s 1s 641699510e-09 0s 0s 641699950e-09 1s 1s 641708070e-09 1s 1s 641709750e-09 0s 0s 641710190e-09 1s 1s 641718350e-09 1s 1s 641719990e-09 0s 0s 641720430e-09 1s 1s 641728630e-09 1s 1s 641730230e-09 0s 0s 641730670e-09 1s 1s 641738910e-09 1s 1s 641740470e-09 0s 0s 641740910e-09 1s 1s 641749190e-09 1s 1s 641750710e-09 0s 0s 641751150e-09 1s 1s 641759470e-09 1s 1s 641760950e-09 0s 0s 641761390e-09 1s 1s 641769750e-09 1s 1s 641771190e-09 0s 0s 641771630e-09 1s 1s 641780030e-09 1s 1s 641781430e-09 0s 0s 641781870e-09 1s 1s 641790310e-09 1s 1s 641791670e-09 0s 0s 641792110e-09 1s 1s 641800590e-09 1s 1s 641801910e-09 0s 0s 641802350e-09 1s 1s 641810870e-09 1s 1s 641812150e-09 0s 0s 641812590e-09 1s 1s 641821150e-09 1s 1s 641822390e-09 0s 0s 641822830e-09 1s 1s 641831430e-09 1s 1s 641832630e-09 0s 0s 641833070e-09 1s 1s 641841710e-09 1s 1s 641842870e-09 0s 0s 641843310e-09 1s 1s 641851990e-09 1s 1s 641853110e-09 0s 0s 641853550e-09 1s 1s 641862270e-09 1s 1s 641863350e-09 0s 0s 641863790e-09 1s 1s 641872550e-09 1s 1s 641873590e-09 0s 0s 641874030e-09 1s 1s 641882830e-09 1s 1s 641883830e-09 0s 0s 641884270e-09 1s 1s 641893110e-09 1s 1s 641894070e-09 0s 0s 641894510e-09 1s 1s 641903390e-09 1s 1s 641904310e-09 0s 0s 641904750e-09 1s 1s 641913670e-09 1s 1s 641914550e-09 0s 0s 641914990e-09 1s 1s 641923950e-09 1s 1s 641924790e-09 0s 0s 641925230e-09 1s 1s 641934230e-09 1s 1s 641935030e-09 0s 0s 641935470e-09 1s 1s 641944510e-09 1s 1s 641945270e-09 0s 0s 641945710e-09 1s 1s 641954790e-09 1s 1s 641955510e-09 0s 0s 641955950e-09 1s 1s 641965070e-09 1s 1s 641965750e-09 0s 0s 641966190e-09 1s 1s 641975350e-09 1s 1s 641975990e-09 0s 0s 641976430e-09 1s 1s 641985630e-09 1s 1s 641986230e-09 0s 0s 641986670e-09 1s 1s 641995910e-09 1s 1s 641996470e-09 0s 0s 641996910e-09 1s 1s 642006190e-09 1s 1s 642006710e-09 0s 0s 642007150e-09 1s 1s 642016470e-09 1s 1s 642016950e-09 0s 0s 642017390e-09 1s 1s 642026750e-09 1s 1s 642027190e-09 0s 0s 642027630e-09 1s 1s 642037030e-09 1s 1s 642037430e-09 0s 0s 642037870e-09 1s 1s 642047310e-09 1s 1s 642047670e-09 0s 0s 642048110e-09 1s 1s 642057590e-09 1s 1s 642057910e-09 0s 0s 642058350e-09 1s 1s 642067870e-09 1s 1s 642068150e-09 0s 0s 642068590e-09 1s 1s 642078150e-09 1s 1s 642078390e-09 0s 0s 642078830e-09 1s 1s 642088430e-09 1s 1s 642088630e-09 0s 0s 642089070e-09 1s 1s 642098710e-09 1s 1s 642098870e-09 0s 0s 642099310e-09 1s 1s 642108990e-09 1s 1s 642109110e-09 0s 0s 642109550e-09 1s 1s 642119270e-09 1s 1s 642119350e-09 0s 0s 642119790e-09 1s 1s 642129550e-09 1s 1s 642129590e-09 0s 0s 642130030e-09 1s 1s 642139830e-09 0s 0s 642140270e-09 1s 1s 642150070e-09 0s 0s 642150110e-09 0s 0s 642150510e-09 1s 1s 642160310e-09 0s 0s 642160390e-09 0s 0s 642160750e-09 1s 1s 642170550e-09 0s 0s 642170670e-09 0s 0s 642170990e-09 1s 1s 642180790e-09 0s 0s 642180950e-09 0s 0s 642181230e-09 1s 1s 642191030e-09 0s 0s 642191230e-09 0s 0s 642191470e-09 1s 1s 642201270e-09 0s 0s 642201510e-09 0s 0s 642201710e-09 1s 1s 642211510e-09 0s 0s 642211790e-09 0s 0s 642211950e-09 1s 1s 642221750e-09 0s 0s 642222070e-09 0s 0s 642222190e-09 1s 1s 642231990e-09 0s 0s 642232350e-09 0s 0s 642232430e-09 1s 1s 642242230e-09 0s 0s 642242630e-09 0s 0s 642242670e-09 1s 1s 642252470e-09 0s 0s 642252910e-09 1s 1s 642252950e-09 1s 1s 642262750e-09 0s 0s 642263150e-09 1s 1s 642263230e-09 1s 1s 642272990e-09 0s 0s 642273390e-09 1s 1s 642273510e-09 1s 1s 642283230e-09 0s 0s 642283630e-09 1s 1s 642283790e-09 1s 1s 642293470e-09 0s 0s 642293870e-09 1s 1s 642294070e-09 1s 1s 642303710e-09 0s 0s 642304110e-09 1s 1s 642304350e-09 1s 1s 642313950e-09 0s 0s 642314350e-09 1s 1s 642314630e-09 1s 1s 642324190e-09 0s 0s 642324590e-09 1s 1s 642324910e-09 1s 1s 642334430e-09 0s 0s 642334830e-09 1s 1s 642335190e-09 1s 1s 642344670e-09 0s 0s 642345070e-09 1s 1s 642345470e-09 1s 1s 642354910e-09 0s 0s 642355310e-09 1s 1s 642355750e-09 1s 1s 642365150e-09 0s 0s 642365550e-09 1s 1s 642366030e-09 1s 1s 642375390e-09 0s 0s 642375790e-09 1s 1s 642376310e-09 1s 1s 642385630e-09 0s 0s 642386030e-09 1s 1s 642386590e-09 1s 1s 642395870e-09 0s 0s 642396270e-09 1s 1s 642396870e-09 1s 1s 642406110e-09 0s 0s 642406510e-09 1s 1s 642407150e-09 1s 1s 642416350e-09 0s 0s 642416750e-09 1s 1s 642417430e-09 1s 1s 642426590e-09 0s 0s 642426990e-09 1s 1s 642427710e-09 1s 1s 642436830e-09 0s 0s 642437230e-09 1s 1s 642437990e-09 1s 1s 642447070e-09 0s 0s 642447470e-09 1s 1s 642448270e-09 1s 1s 642457310e-09 0s 0s 642457710e-09 1s 1s 642458550e-09 1s 1s 642467550e-09 0s 0s 642467950e-09 1s 1s 642468830e-09 1s 1s 642477790e-09 0s 0s 642478190e-09 1s 1s 642479110e-09 1s 1s 642488030e-09 0s 0s 642488430e-09 1s 1s 642489390e-09 1s 1s 642498270e-09 0s 0s 642498670e-09 1s 1s 642499670e-09 1s 1s 642508510e-09 0s 0s 642508910e-09 1s 1s 642509950e-09 1s 1s 642518750e-09 0s 0s 642519150e-09 1s 1s 642520230e-09 1s 1s 642528990e-09 0s 0s 642529390e-09 1s 1s 642530510e-09 1s 1s 642539230e-09 0s 0s 642539630e-09 1s 1s 642540790e-09 1s 1s 642549470e-09 0s 0s 642549870e-09 1s 1s 642551070e-09 1s 1s 642559710e-09 0s 0s 642560110e-09 1s 1s 642561350e-09 1s 1s 642569950e-09 0s 0s 642570350e-09 1s 1s 642571630e-09 1s 1s 642580190e-09 0s 0s 642580590e-09 1s 1s 642581910e-09 1s 1s 642590430e-09 0s 0s 642590830e-09 1s 1s 642592190e-09 1s 1s 642600670e-09 0s 0s 642601070e-09 1s 1s 642602470e-09 1s 1s 642610910e-09 0s 0s 642611310e-09 1s 1s 642612750e-09 1s 1s 642621150e-09 0s 0s 642621550e-09 1s 1s 642623030e-09 1s 1s 642631390e-09 0s 0s 642631790e-09 1s 1s 642633310e-09 1s 1s 642641630e-09 0s 0s 642642030e-09 1s 1s 642643590e-09 1s 1s 642651870e-09 0s 0s 642652270e-09 1s 1s 642653870e-09 1s 1s 642662110e-09 0s 0s 642662510e-09 1s 1s 642664150e-09 1s 1s 642672350e-09 0s 0s 642672750e-09 1s 1s 642674430e-09 1s 1s 642682590e-09 0s 0s 642682990e-09 1s 1s 642684710e-09 1s 1s 642692830e-09 0s 0s 642693230e-09 1s 1s 642694990e-09 1s 1s 642703070e-09 0s 0s 642703470e-09 1s 1s 642705270e-09 1s 1s 642713310e-09 0s 0s 642713710e-09 1s 1s 642715550e-09 1s 1s 642723550e-09 0s 0s 642723950e-09 1s 1s 642725830e-09 1s 1s 642733790e-09 0s 0s 642734190e-09 1s 1s 642736110e-09 1s 1s 642744030e-09 0s 0s 642744430e-09 1s 1s 642746390e-09 1s 1s 642754270e-09 0s 0s 642754670e-09 1s 1s 642756670e-09 1s 1s 642764510e-09 0s 0s 642764910e-09 1s 1s 642766950e-09 1s 1s 642774750e-09 0s 0s 642775150e-09 1s 1s 642777230e-09 1s 1s 642784990e-09 0s 0s 642785390e-09 1s 1s 642787510e-09 1s 1s 642795230e-09 0s 0s 642795630e-09 1s 1s 642797790e-09 1s 1s 642805470e-09 0s 0s 642805870e-09 1s 1s 642808070e-09 1s 1s 642815710e-09 0s 0s 642816110e-09 1s 1s 642818350e-09 1s 1s 642825950e-09 0s 0s 642826350e-09 1s 1s 642828630e-09 1s 1s 642836190e-09 0s 0s 642836590e-09 1s 1s 642838910e-09 1s 1s 642846430e-09 0s 0s 642846830e-09 1s 1s 642849190e-09 1s 1s 642856670e-09 0s 0s 642857070e-09 1s 1s 642859470e-09 1s 1s 642866910e-09 0s 0s 642867310e-09 1s 1s 642869750e-09 1s 1s 642877150e-09 0s 0s 642877550e-09 1s 1s 642880030e-09 1s 1s 642887390e-09 0s 0s 642887790e-09 1s 1s 642890310e-09 1s 1s 642897630e-09 0s 0s 642898030e-09 1s 1s 642900590e-09 1s 1s 642907870e-09 0s 0s 642908270e-09 1s 1s 642910870e-09 1s 1s 642918110e-09 0s 0s 642918510e-09 1s 1s 642921150e-09 1s 1s 642928350e-09 0s 0s 642928750e-09 1s 1s 642931430e-09 1s 1s 642938590e-09 0s 0s 642938990e-09 1s 1s 642941710e-09 1s 1s 642948830e-09 0s 0s 642949230e-09 1s 1s 642951990e-09 1s 1s 642959070e-09 0s 0s 642959470e-09 1s 1s 642962270e-09 1s 1s 642969310e-09 0s 0s 642969710e-09 1s 1s 642972550e-09 1s 1s 642979550e-09 0s 0s 642979950e-09 1s 1s 642982830e-09 1s 1s 642989790e-09 0s 0s 642990190e-09 1s 1s 642993110e-09 1s 1s 643000030e-09 0s 0s 643000430e-09 1s 1s 643003390e-09 1s 1s 643010270e-09 0s 0s 643010670e-09 1s 1s 643013670e-09 1s 1s 643020510e-09 0s 0s 643020910e-09 1s 1s 643023950e-09 1s 1s 643030750e-09 0s 0s 643031150e-09 1s 1s 643034230e-09 1s 1s 643040990e-09 0s 0s 643041390e-09 1s 1s 643044510e-09 1s 1s 643051230e-09 0s 0s 643051630e-09 1s 1s 643054790e-09 1s 1s 643061470e-09 0s 0s 643061870e-09 1s 1s 643065070e-09 1s 1s 643071710e-09 0s 0s 643072110e-09 1s 1s 643075350e-09 1s 1s 643081950e-09 0s 0s 643082350e-09 1s 1s 643085630e-09 1s 1s 643092190e-09 0s 0s 643092590e-09 1s 1s 643095910e-09 1s 1s 643102430e-09 0s 0s 643102830e-09 1s 1s 643106190e-09 1s 1s 643112670e-09 0s 0s 643113070e-09 1s 1s 643116470e-09 1s 1s 643122910e-09 0s 0s 643123310e-09 1s 1s 643126750e-09 1s 1s 643133150e-09 0s 0s 643133550e-09 1s 1s 643137030e-09 1s 1s 643143390e-09 0s 0s 643143790e-09 1s 1s 643147310e-09 1s 1s 643153630e-09 0s 0s 643154030e-09 1s 1s 643157590e-09 1s 1s 643163870e-09 0s 0s 643164270e-09 1s 1s 643167870e-09 1s 1s 643174110e-09 0s 0s 643174510e-09 1s 1s 643178150e-09 1s 1s 643184350e-09 0s 0s 643184750e-09 1s 1s 643188430e-09 1s 1s 643194590e-09 0s 0s 643194990e-09 1s 1s 643198710e-09 1s 1s 643204830e-09 0s 0s 643205230e-09 1s 1s 643208990e-09 1s 1s 643215070e-09 0s 0s 643215470e-09 1s 1s 643219270e-09 1s 1s 643225310e-09 0s 0s 643225710e-09 1s 1s 643229550e-09 1s 1s 643235550e-09 0s 0s 643235950e-09 1s 1s 643239830e-09 1s 1s 643245790e-09 0s 0s 643246190e-09 1s 1s 643250110e-09 1s 1s 643256030e-09 0s 0s 643256430e-09 1s 1s 643260390e-09 1s 1s 643266270e-09 0s 0s 643266670e-09 1s 1s 643270670e-09 1s 1s 643276510e-09 0s 0s 643276910e-09 1s 1s 643280950e-09 1s 1s 643286750e-09 0s 0s 643287150e-09 1s 1s 643291230e-09 1s 1s 643296990e-09 0s 0s 643297390e-09 1s 1s 643301510e-09 1s 1s 643307230e-09 0s 0s 643307630e-09 1s 1s 643311790e-09 1s 1s 643317470e-09 0s 0s 643317870e-09 1s 1s 643322070e-09 1s 1s 643327710e-09 0s 0s 643328110e-09 1s 1s 643332350e-09 1s 1s 643337950e-09 0s 0s 643338350e-09 1s 1s 643342630e-09 1s 1s 643348190e-09 0s 0s 643348590e-09 1s 1s 643352910e-09 1s 1s 643358430e-09 0s 0s 643358830e-09 1s 1s 643363190e-09 1s 1s 643368670e-09 0s 0s 643369070e-09 1s 1s 643373470e-09 1s 1s 643378910e-09 0s 0s 643379310e-09 1s 1s 643383750e-09 1s 1s 643389150e-09 0s 0s 643389550e-09 1s 1s 643394030e-09 1s 1s 643399390e-09 0s 0s 643399790e-09 1s 1s 643404310e-09 1s 1s 643409630e-09 0s 0s 643410030e-09 1s 1s 643414590e-09 1s 1s 643419870e-09 0s 0s 643420270e-09 1s 1s 643424870e-09 1s 1s 643430110e-09 0s 0s 643430510e-09 1s 1s 643435150e-09 1s 1s 643440350e-09 0s 0s 643440750e-09 1s 1s 643445430e-09 1s 1s 643450590e-09 0s 0s 643450990e-09 1s 1s 643455710e-09 1s 1s 643460830e-09 0s 0s 643461230e-09 1s 1s 643465990e-09 1s 1s 643471070e-09 0s 0s 643471470e-09 1s 1s 643476270e-09 1s 1s 643481310e-09 0s 0s 643481710e-09 1s 1s 643486550e-09 1s 1s 643491550e-09 0s 0s 643491950e-09 1s 1s 643496830e-09 1s 1s 643501790e-09 0s 0s 643502190e-09 1s 1s 643507110e-09 1s 1s 643512030e-09 0s 0s 643512430e-09 1s 1s 643517390e-09 1s 1s 643522270e-09 0s 0s 643522670e-09 1s 1s 643527670e-09 1s 1s 643532510e-09 0s 0s 643532910e-09 1s 1s 643537950e-09 1s 1s 643542750e-09 0s 0s 643543150e-09 1s 1s 643548230e-09 1s 1s 643552990e-09 0s 0s 643553390e-09 1s 1s 643558510e-09 1s 1s 643563230e-09 0s 0s 643563630e-09 1s 1s 643568790e-09 1s 1s 643573470e-09 0s 0s 643573870e-09 1s 1s 643579070e-09 1s 1s 643583710e-09 0s 0s 643584110e-09 1s 1s 643589350e-09 1s 1s 643593950e-09 0s 0s 643594350e-09 1s 1s 643599630e-09 1s 1s 643604190e-09 0s 0s 643604590e-09 1s 1s 643609910e-09 1s 1s 643614430e-09 0s 0s 643614830e-09 1s 1s 643620190e-09 1s 1s 643624670e-09 0s 0s 643625070e-09 1s 1s 643630470e-09 1s 1s 643634910e-09 0s 0s 643635310e-09 1s 1s 643640750e-09 1s 1s 643645150e-09 0s 0s 643645550e-09 1s 1s 643651030e-09 1s 1s 643655390e-09 0s 0s 643655790e-09 1s 1s 643661310e-09 1s 1s 643665630e-09 0s 0s 643666030e-09 1s 1s 643671590e-09 1s 1s 643675870e-09 0s 0s 643676270e-09 1s 1s 643681870e-09 1s 1s 643686110e-09 0s 0s 643686510e-09 1s 1s 643692150e-09 1s 1s 643696350e-09 0s 0s 643696750e-09 1s 1s 643702430e-09 1s 1s 643706590e-09 0s 0s 643706990e-09 1s 1s 643712710e-09 1s 1s 643716830e-09 0s 0s 643717230e-09 1s 1s 643722990e-09 1s 1s 643727070e-09 0s 0s 643727470e-09 1s 1s 643733270e-09 1s 1s 643737310e-09 0s 0s 643737710e-09 1s 1s 643743550e-09 1s 1s 643747550e-09 0s 0s 643747950e-09 1s 1s 643753830e-09 1s 1s 643757790e-09 0s 0s 643758190e-09 1s 1s 643764110e-09 1s 1s 643768030e-09 0s 0s 643768430e-09 1s 1s 643774390e-09 1s 1s 643778270e-09 0s 0s 643778670e-09 1s 1s 643784670e-09 1s 1s 643788510e-09 0s 0s 643788910e-09 1s 1s 643794950e-09 1s 1s 643798750e-09 0s 0s 643799150e-09 1s 1s 643805230e-09 1s 1s 643808990e-09 0s 0s 643809390e-09 1s 1s 643815510e-09 1s 1s 643819230e-09 0s 0s 643819630e-09 1s 1s 643825790e-09 1s 1s 643829470e-09 0s 0s 643829870e-09 1s 1s 643836070e-09 1s 1s 643839710e-09 0s 0s 643840110e-09 1s 1s 643846350e-09 1s 1s 643849950e-09 0s 0s 643850350e-09 1s 1s 643856630e-09 1s 1s 643860190e-09 0s 0s 643860590e-09 1s 1s 643866910e-09 1s 1s 643870430e-09 0s 0s 643870830e-09 1s 1s 643877190e-09 1s 1s 643880670e-09 0s 0s 643881070e-09 1s 1s 643887470e-09 1s 1s 643890910e-09 0s 0s 643891310e-09 1s 1s 643897750e-09 1s 1s 643901150e-09 0s 0s 643901550e-09 1s 1s 643908030e-09 1s 1s 643911390e-09 0s 0s 643911790e-09 1s 1s 643918310e-09 1s 1s 643921630e-09 0s 0s 643922030e-09 1s 1s 643928590e-09 1s 1s 643931870e-09 0s 0s 643932270e-09 1s 1s 643938870e-09 1s 1s 643942110e-09 0s 0s 643942510e-09 1s 1s 643949150e-09 1s 1s 643952350e-09 0s 0s 643952750e-09 1s 1s 643959430e-09 1s 1s 643962590e-09 0s 0s 643962990e-09 1s 1s 643969710e-09 1s 1s 643972830e-09 0s 0s 643973230e-09 1s 1s 643979990e-09 1s 1s 643983070e-09 0s 0s 643983470e-09 1s 1s 643990270e-09 1s 1s 643993310e-09 0s 0s 643993710e-09 1s 1s 644000550e-09 1s 1s 644003550e-09 0s 0s 644003950e-09 1s 1s 644010830e-09 1s 1s 644013790e-09 0s 0s 644014190e-09 1s 1s 644021110e-09 1s 1s 644024030e-09 0s 0s 644024430e-09 1s 1s 644031390e-09 1s 1s 644034270e-09 0s 0s 644034670e-09 1s 1s 644041670e-09 1s 1s 644044510e-09 0s 0s 644044910e-09 1s 1s 644051950e-09 1s 1s 644054750e-09 0s 0s 644055150e-09 1s 1s 644062230e-09 1s 1s 644064990e-09 0s 0s 644065390e-09 1s 1s 644072510e-09 1s 1s 644075230e-09 0s 0s 644075630e-09 1s 1s 644082790e-09 1s 1s 644085470e-09 0s 0s 644085870e-09 1s 1s 644093070e-09 1s 1s 644095710e-09 0s 0s 644096110e-09 1s 1s 644103350e-09 1s 1s 644105950e-09 0s 0s 644106350e-09 1s 1s 644113630e-09 1s 1s 644116190e-09 0s 0s 644116590e-09 1s 1s 644123910e-09 1s 1s 644126430e-09 0s 0s 644126830e-09 1s 1s 644134190e-09 1s 1s 644136670e-09 0s 0s 644137070e-09 1s 1s 644144470e-09 1s 1s 644146910e-09 0s 0s 644147310e-09 1s 1s 644154750e-09 1s 1s 644157150e-09 0s 0s 644157550e-09 1s 1s 644165030e-09 1s 1s 644167390e-09 0s 0s 644167790e-09 1s 1s 644175310e-09 1s 1s 644177630e-09 0s 0s 644178030e-09 1s 1s 644185590e-09 1s 1s 644187870e-09 0s 0s 644188270e-09 1s 1s 644195870e-09 1s 1s 644198110e-09 0s 0s 644198510e-09 1s 1s 644206150e-09 1s 1s 644208350e-09 0s 0s 644208750e-09 1s 1s 644216430e-09 1s 1s 644218590e-09 0s 0s 644218990e-09 1s 1s 644226710e-09 1s 1s 644228830e-09 0s 0s 644229230e-09 1s 1s 644236990e-09 1s 1s 644239070e-09 0s 0s 644239470e-09 1s 1s 644247270e-09 1s 1s 644249310e-09 0s 0s 644249710e-09 1s 1s 644257550e-09 1s 1s 644259550e-09 0s 0s 644259950e-09 1s 1s 644267830e-09 1s 1s 644269790e-09 0s 0s 644270190e-09 1s 1s 644278110e-09 1s 1s 644280030e-09 0s 0s 644280430e-09 1s 1s 644288390e-09 1s 1s 644290270e-09 0s 0s 644290670e-09 1s 1s 644298670e-09 1s 1s 644300510e-09 0s 0s 644300910e-09 1s 1s 644308950e-09 1s 1s 644310750e-09 0s 0s 644311150e-09 1s 1s 644319230e-09 1s 1s 644320990e-09 0s 0s 644321390e-09 1s 1s 644329510e-09 1s 1s 644331230e-09 0s 0s 644331630e-09 1s 1s 644339790e-09 1s 1s 644341470e-09 0s 0s 644341870e-09 1s 1s 644350070e-09 1s 1s 644351710e-09 0s 0s 644352110e-09 1s 1s 644360350e-09 1s 1s 644361950e-09 0s 0s 644362350e-09 1s 1s 644370630e-09 1s 1s 644372190e-09 0s 0s 644372590e-09 1s 1s 644380910e-09 1s 1s 644382430e-09 0s 0s 644382830e-09 1s 1s 644391190e-09 1s 1s 644392670e-09 0s 0s 644393070e-09 1s 1s 644401470e-09 1s 1s 644402910e-09 0s 0s 644403310e-09 1s 1s 644411750e-09 1s 1s 644413150e-09 0s 0s 644413550e-09 1s 1s 644422030e-09 1s 1s 644423390e-09 0s 0s 644423790e-09 1s 1s 644432310e-09 1s 1s 644433630e-09 0s 0s 644434030e-09 1s 1s 644442590e-09 1s 1s 644443870e-09 0s 0s 644444270e-09 1s 1s 644452870e-09 1s 1s 644454110e-09 0s 0s 644454510e-09 1s 1s 644463150e-09 1s 1s 644464350e-09 0s 0s 644464750e-09 1s 1s 644473430e-09 1s 1s 644474590e-09 0s 0s 644474990e-09 1s 1s 644483710e-09 1s 1s 644484830e-09 0s 0s 644485230e-09 1s 1s 644493990e-09 1s 1s 644495070e-09 0s 0s 644495470e-09 1s 1s 644504270e-09 1s 1s 644505310e-09 0s 0s 644505710e-09 1s 1s 644514550e-09 1s 1s 644515550e-09 0s 0s 644515950e-09 1s 1s 644524830e-09 1s 1s 644525790e-09 0s 0s 644526190e-09 1s 1s 644535110e-09 1s 1s 644536030e-09 0s 0s 644536430e-09 1s 1s 644545390e-09 1s 1s 644546270e-09 0s 0s 644546670e-09 1s 1s 644555670e-09 1s 1s 644556510e-09 0s 0s 644556910e-09 1s 1s 644565950e-09 1s 1s 644566750e-09 0s 0s 644567150e-09 1s 1s 644576230e-09 1s 1s 644576990e-09 0s 0s 644577390e-09 1s 1s 644586510e-09 1s 1s 644587230e-09 0s 0s 644587630e-09 1s 1s 644596790e-09 1s 1s 644597470e-09 0s 0s 644597870e-09 1s 1s 644607070e-09 1s 1s 644607710e-09 0s 0s 644608110e-09 1s 1s 644617350e-09 1s 1s 644617950e-09 0s 0s 644618350e-09 1s 1s 644627630e-09 1s 1s 644628190e-09 0s 0s 644628590e-09 1s 1s 644637910e-09 1s 1s 644638430e-09 0s 0s 644638830e-09 1s 1s 644648190e-09 1s 1s 644648670e-09 0s 0s 644649070e-09 1s 1s 644658470e-09 1s 1s 644658910e-09 0s 0s 644659310e-09 1s 1s 644668750e-09 1s 1s 644669150e-09 0s 0s 644669550e-09 1s 1s 644679030e-09 1s 1s 644679390e-09 0s 0s 644679790e-09 1s 1s 644689310e-09 1s 1s 644689630e-09 0s 0s 644690030e-09 1s 1s 644699590e-09 1s 1s 644699870e-09 0s 0s 644700270e-09 1s 1s 644709870e-09 1s 1s 644710110e-09 0s 0s 644710510e-09 1s 1s 644720150e-09 1s 1s 644720350e-09 0s 0s 644720750e-09 1s 1s 644730430e-09 1s 1s 644730590e-09 0s 0s 644730990e-09 1s 1s 644740710e-09 1s 1s 644740830e-09 0s 0s 644741230e-09 1s 1s 644750990e-09 1s 1s 644751070e-09 0s 0s 644751470e-09 1s 1s 644761270e-09 1s 1s 644761310e-09 0s 0s 644761710e-09 1s 1s 644771550e-09 0s 0s 644771950e-09 1s 1s 644781790e-09 0s 0s 644781830e-09 0s 0s 644782190e-09 1s 1s 644792030e-09 0s 0s 644792110e-09 0s 0s 644792430e-09 1s 1s 644802270e-09 0s 0s 644802390e-09 0s 0s 644802670e-09 1s 1s 644812510e-09 0s 0s 644812670e-09 0s 0s 644812910e-09 1s 1s 644822750e-09 0s 0s 644822950e-09 0s 0s 644823150e-09 1s 1s 644832990e-09 0s 0s 644833230e-09 0s 0s 644833390e-09 1s 1s 644843230e-09 0s 0s 644843510e-09 0s 0s 644843630e-09 1s 1s 644853470e-09 0s 0s 644853790e-09 0s 0s 644853870e-09 1s 1s 644863710e-09 0s 0s 644864070e-09 0s 0s 644864110e-09 1s 1s 644873950e-09 0s 0s 644874350e-09 1s 1s 644874390e-09 1s 1s 644884230e-09 0s 0s 644884590e-09 1s 1s 644884670e-09 1s 1s 644894470e-09 0s 0s 644894830e-09 1s 1s 644894950e-09 1s 1s 644904710e-09 0s 0s 644905070e-09 1s 1s 644905230e-09 1s 1s 644914950e-09 0s 0s 644915310e-09 1s 1s 644915510e-09 1s 1s 644925190e-09 0s 0s 644925550e-09 1s 1s 644925790e-09 1s 1s 644935430e-09 0s 0s 644935790e-09 1s 1s 644936070e-09 1s 1s 644945670e-09 0s 0s 644946030e-09 1s 1s 644946350e-09 1s 1s 644955910e-09 0s 0s 644956270e-09 1s 1s 644956630e-09 1s 1s 644966150e-09 0s 0s 644966510e-09 1s 1s 644966910e-09 1s 1s 644976390e-09 0s 0s 644976750e-09 1s 1s 644977190e-09 1s 1s 644986630e-09 0s 0s 644986990e-09 1s 1s 644987470e-09 1s 1s 644996870e-09 0s 0s 644997230e-09 1s 1s 644997750e-09 1s 1s 645007110e-09 0s 0s 645007470e-09 1s 1s 645008030e-09 1s 1s 645017350e-09 0s 0s 645017710e-09 1s 1s 645018310e-09 1s 1s 645027590e-09 0s 0s 645027950e-09 1s 1s 645028590e-09 1s 1s 645037830e-09 0s 0s 645038190e-09 1s 1s 645038870e-09 1s 1s 645048070e-09 0s 0s 645048430e-09 1s 1s 645049150e-09 1s 1s 645058310e-09 0s 0s 645058670e-09 1s 1s 645059430e-09 1s 1s 645068550e-09 0s 0s 645068910e-09 1s 1s 645069710e-09 1s 1s 645078790e-09 0s 0s 645079150e-09 1s 1s 645079990e-09 1s 1s 645089030e-09 0s 0s 645089390e-09 1s 1s 645090270e-09 1s 1s 645099270e-09 0s 0s 645099630e-09 1s 1s 645100550e-09 1s 1s 645109510e-09 0s 0s 645109870e-09 1s 1s 645110830e-09 1s 1s 645119750e-09 0s 0s 645120110e-09 1s 1s 645121110e-09 1s 1s 645129990e-09 0s 0s 645130350e-09 1s 1s 645131390e-09 1s 1s 645140230e-09 0s 0s 645140590e-09 1s 1s 645141670e-09 1s 1s 645150470e-09 0s 0s 645150830e-09 1s 1s 645151950e-09 1s 1s 645160710e-09 0s 0s 645161070e-09 1s 1s 645162230e-09 1s 1s 645170950e-09 0s 0s 645171310e-09 1s 1s 645172510e-09 1s 1s 645181190e-09 0s 0s 645181550e-09 1s 1s 645182790e-09 1s 1s 645191430e-09 0s 0s 645191790e-09 1s 1s 645193070e-09 1s 1s 645201670e-09 0s 0s 645202030e-09 1s 1s 645203350e-09 1s 1s 645211910e-09 0s 0s 645212270e-09 1s 1s 645213630e-09 1s 1s 645222150e-09 0s 0s 645222510e-09 1s 1s 645223910e-09 1s 1s 645232390e-09 0s 0s 645232750e-09 1s 1s 645234190e-09 1s 1s 645242630e-09 0s 0s 645242990e-09 1s 1s 645244470e-09 1s 1s 645252870e-09 0s 0s 645253230e-09 1s 1s 645254750e-09 1s 1s 645263110e-09 0s 0s 645263470e-09 1s 1s 645265030e-09 1s 1s 645273350e-09 0s 0s 645273710e-09 1s 1s 645275310e-09 1s 1s 645283590e-09 0s 0s 645283950e-09 1s 1s 645285590e-09 1s 1s 645293830e-09 0s 0s 645294190e-09 1s 1s 645295870e-09 1s 1s 645304070e-09 0s 0s 645304430e-09 1s 1s 645306150e-09 1s 1s 645314310e-09 0s 0s 645314670e-09 1s 1s 645316430e-09 1s 1s 645324550e-09 0s 0s 645324910e-09 1s 1s 645326710e-09 1s 1s 645334790e-09 0s 0s 645335150e-09 1s 1s 645336990e-09 1s 1s 645345030e-09 0s 0s 645345390e-09 1s 1s 645347270e-09 1s 1s 645355270e-09 0s 0s 645355630e-09 1s 1s 645357550e-09 1s 1s 645365510e-09 0s 0s 645365870e-09 1s 1s 645367830e-09 1s 1s 645375750e-09 0s 0s 645376110e-09 1s 1s 645378110e-09 1s 1s 645385990e-09 0s 0s 645386350e-09 1s 1s 645388390e-09 1s 1s 645396230e-09 0s 0s 645396590e-09 1s 1s 645398670e-09 1s 1s 645406470e-09 0s 0s 645406830e-09 1s 1s 645408950e-09 1s 1s 645416710e-09 0s 0s 645417070e-09 1s 1s 645419230e-09 1s 1s 645426950e-09 0s 0s 645427310e-09 1s 1s 645429510e-09 1s 1s 645437190e-09 0s 0s 645437550e-09 1s 1s 645439790e-09 1s 1s 645447430e-09 0s 0s 645447790e-09 1s 1s 645450070e-09 1s 1s 645457670e-09 0s 0s 645458030e-09 1s 1s 645460350e-09 1s 1s 645467910e-09 0s 0s 645468270e-09 1s 1s 645470630e-09 1s 1s 645478150e-09 0s 0s 645478510e-09 1s 1s 645480910e-09 1s 1s 645488390e-09 0s 0s 645488750e-09 1s 1s 645491190e-09 1s 1s 645498630e-09 0s 0s 645498990e-09 1s 1s 645501470e-09 1s 1s 645508870e-09 0s 0s 645509230e-09 1s 1s 645511750e-09 1s 1s 645519110e-09 0s 0s 645519470e-09 1s 1s 645522030e-09 1s 1s 645529350e-09 0s 0s 645529710e-09 1s 1s 645532310e-09 1s 1s 645539590e-09 0s 0s 645539950e-09 1s 1s 645542590e-09 1s 1s 645549830e-09 0s 0s 645550190e-09 1s 1s 645552870e-09 1s 1s 645560070e-09 0s 0s 645560430e-09 1s 1s 645563150e-09 1s 1s 645570310e-09 0s 0s 645570670e-09 1s 1s 645573430e-09 1s 1s 645580550e-09 0s 0s 645580910e-09 1s 1s 645583710e-09 1s 1s 645590790e-09 0s 0s 645591150e-09 1s 1s 645593990e-09 1s 1s 645601030e-09 0s 0s 645601390e-09 1s 1s 645604270e-09 1s 1s 645611270e-09 0s 0s 645611630e-09 1s 1s 645614550e-09 1s 1s 645621510e-09 0s 0s 645621870e-09 1s 1s 645624830e-09 1s 1s 645631750e-09 0s 0s 645632110e-09 1s 1s 645635110e-09 1s 1s 645641990e-09 0s 0s 645642350e-09 1s 1s 645645390e-09 1s 1s 645652230e-09 0s 0s 645652590e-09 1s 1s 645655670e-09 1s 1s 645662470e-09 0s 0s 645662830e-09 1s 1s 645665950e-09 1s 1s 645672710e-09 0s 0s 645673070e-09 1s 1s 645676230e-09 1s 1s 645682950e-09 0s 0s 645683310e-09 1s 1s 645686510e-09 1s 1s 645693190e-09 0s 0s 645693550e-09 1s 1s 645696790e-09 1s 1s 645703430e-09 0s 0s 645703790e-09 1s 1s 645707070e-09 1s 1s 645713670e-09 0s 0s 645714030e-09 1s 1s 645717350e-09 1s 1s 645723910e-09 0s 0s 645724270e-09 1s 1s 645727630e-09 1s 1s 645734150e-09 0s 0s 645734510e-09 1s 1s 645737910e-09 1s 1s 645744390e-09 0s 0s 645744750e-09 1s 1s 645748190e-09 1s 1s 645754630e-09 0s 0s 645754990e-09 1s 1s 645758470e-09 1s 1s 645764870e-09 0s 0s 645765230e-09 1s 1s 645768750e-09 1s 1s 645775110e-09 0s 0s 645775470e-09 1s 1s 645779030e-09 1s 1s 645785350e-09 0s 0s 645785710e-09 1s 1s 645789310e-09 1s 1s 645795590e-09 0s 0s 645795950e-09 1s 1s 645799590e-09 1s 1s 645805830e-09 0s 0s 645806190e-09 1s 1s 645809870e-09 1s 1s 645816070e-09 0s 0s 645816430e-09 1s 1s 645820150e-09 1s 1s 645826310e-09 0s 0s 645826670e-09 1s 1s 645830430e-09 1s 1s 645836550e-09 0s 0s 645836910e-09 1s 1s 645840710e-09 1s 1s 645846790e-09 0s 0s 645847150e-09 1s 1s 645850990e-09 1s 1s 645857030e-09 0s 0s 645857390e-09 1s 1s 645861270e-09 1s 1s 645867270e-09 0s 0s 645867630e-09 1s 1s 645871550e-09 1s 1s 645877510e-09 0s 0s 645877870e-09 1s 1s 645881830e-09 1s 1s 645887750e-09 0s 0s 645888110e-09 1s 1s 645892110e-09 1s 1s 645897990e-09 0s 0s 645898350e-09 1s 1s 645902390e-09 1s 1s 645908230e-09 0s 0s 645908590e-09 1s 1s 645912670e-09 1s 1s 645918470e-09 0s 0s 645918830e-09 1s 1s 645922950e-09 1s 1s 645928710e-09 0s 0s 645929070e-09 1s 1s 645933230e-09 1s 1s 645938950e-09 0s 0s 645939310e-09 1s 1s 645943510e-09 1s 1s 645949190e-09 0s 0s 645949550e-09 1s 1s 645953790e-09 1s 1s 645959430e-09 0s 0s 645959790e-09 1s 1s 645964070e-09 1s 1s 645969670e-09 0s 0s 645970030e-09 1s 1s 645974350e-09 1s 1s 645979910e-09 0s 0s 645980270e-09 1s 1s 645984630e-09 1s 1s 645990150e-09 0s 0s 645990510e-09 1s 1s 645994910e-09 1s 1s 646000390e-09 0s 0s 646000750e-09 1s 1s 646005190e-09 1s 1s 646010630e-09 0s 0s 646010990e-09 1s 1s 646015470e-09 1s 1s 646020870e-09 0s 0s 646021230e-09 1s 1s 646025750e-09 1s 1s 646031110e-09 0s 0s 646031470e-09 1s 1s 646036030e-09 1s 1s 646041350e-09 0s 0s 646041710e-09 1s 1s 646046310e-09 1s 1s 646051590e-09 0s 0s 646051950e-09 1s 1s 646056590e-09 1s 1s 646061830e-09 0s 0s 646062190e-09 1s 1s 646066870e-09 1s 1s 646072070e-09 0s 0s 646072430e-09 1s 1s 646077150e-09 1s 1s 646082310e-09 0s 0s 646082670e-09 1s 1s 646087430e-09 1s 1s 646092550e-09 0s 0s 646092910e-09 1s 1s 646097710e-09 1s 1s 646102790e-09 0s 0s 646103150e-09 1s 1s 646107990e-09 1s 1s 646113030e-09 0s 0s 646113390e-09 1s 1s 646118270e-09 1s 1s 646123270e-09 0s 0s 646123630e-09 1s 1s 646128550e-09 1s 1s 646133510e-09 0s 0s 646133870e-09 1s 1s 646138830e-09 1s 1s 646143750e-09 0s 0s 646144110e-09 1s 1s 646149110e-09 1s 1s 646153990e-09 0s 0s 646154350e-09 1s 1s 646159390e-09 1s 1s 646164230e-09 0s 0s 646164590e-09 1s 1s 646169670e-09 1s 1s 646174470e-09 0s 0s 646174830e-09 1s 1s 646179950e-09 1s 1s 646184710e-09 0s 0s 646185070e-09 1s 1s 646190230e-09 1s 1s 646194950e-09 0s 0s 646195310e-09 1s 1s 646200510e-09 1s 1s 646205190e-09 0s 0s 646205550e-09 1s 1s 646210790e-09 1s 1s 646215430e-09 0s 0s 646215790e-09 1s 1s 646221070e-09 1s 1s 646225670e-09 0s 0s 646226030e-09 1s 1s 646231350e-09 1s 1s 646235910e-09 0s 0s 646236270e-09 1s 1s 646241630e-09 1s 1s 646246150e-09 0s 0s 646246510e-09 1s 1s 646251910e-09 1s 1s 646256390e-09 0s 0s 646256750e-09 1s 1s 646262190e-09 1s 1s 646266630e-09 0s 0s 646266990e-09 1s 1s 646272470e-09 1s 1s 646276870e-09 0s 0s 646277230e-09 1s 1s 646282750e-09 1s 1s 646287110e-09 0s 0s 646287470e-09 1s 1s 646293030e-09 1s 1s 646297350e-09 0s 0s 646297710e-09 1s 1s 646303310e-09 1s 1s 646307590e-09 0s 0s 646307950e-09 1s 1s 646313590e-09 1s 1s 646317830e-09 0s 0s 646318190e-09 1s 1s 646323870e-09 1s 1s 646328070e-09 0s 0s 646328430e-09 1s 1s 646334150e-09 1s 1s 646338310e-09 0s 0s 646338670e-09 1s 1s 646344430e-09 1s 1s 646348550e-09 0s 0s 646348910e-09 1s 1s 646354710e-09 1s 1s 646358790e-09 0s 0s 646359150e-09 1s 1s 646364990e-09 1s 1s 646369030e-09 0s 0s 646369390e-09 1s 1s 646375270e-09 1s 1s 646379270e-09 0s 0s 646379630e-09 1s 1s 646385550e-09 1s 1s 646389510e-09 0s 0s 646389870e-09 1s 1s 646395830e-09 1s 1s 646399750e-09 0s 0s 646400110e-09 1s 1s 646406110e-09 1s 1s 646409990e-09 0s 0s 646410350e-09 1s 1s 646416390e-09 1s 1s 646420230e-09 0s 0s 646420590e-09 1s 1s 646426670e-09 1s 1s 646430470e-09 0s 0s 646430830e-09 1s 1s 646436950e-09 1s 1s 646440710e-09 0s 0s 646441070e-09 1s 1s 646447230e-09 1s 1s 646450950e-09 0s 0s 646451310e-09 1s 1s 646457510e-09 1s 1s 646461190e-09 0s 0s 646461550e-09 1s 1s 646467790e-09 1s 1s 646471430e-09 0s 0s 646471790e-09 1s 1s 646478070e-09 1s 1s 646481670e-09 0s 0s 646482030e-09 1s 1s 646488350e-09 1s 1s 646491910e-09 0s 0s 646492270e-09 1s 1s 646498630e-09 1s 1s 646502150e-09 0s 0s 646502510e-09 1s 1s 646508910e-09 1s 1s 646512390e-09 0s 0s 646512750e-09 1s 1s 646519190e-09 1s 1s 646522630e-09 0s 0s 646522990e-09 1s 1s 646529470e-09 1s 1s 646532870e-09 0s 0s 646533230e-09 1s 1s 646539750e-09 1s 1s 646543110e-09 0s 0s 646543470e-09 1s 1s 646550030e-09 1s 1s 646553350e-09 0s 0s 646553710e-09 1s 1s 646560310e-09 1s 1s 646563590e-09 0s 0s 646563950e-09 1s 1s 646570590e-09 1s 1s 646573830e-09 0s 0s 646574190e-09 1s 1s 646580870e-09 1s 1s 646584070e-09 0s 0s 646584430e-09 1s 1s 646591150e-09 1s 1s 646594310e-09 0s 0s 646594670e-09 1s 1s 646601430e-09 1s 1s 646604550e-09 0s 0s 646604910e-09 1s 1s 646611710e-09 1s 1s 646614790e-09 0s 0s 646615150e-09 1s 1s 646621990e-09 1s 1s 646625030e-09 0s 0s 646625390e-09 1s 1s 646632270e-09 1s 1s 646635270e-09 0s 0s 646635630e-09 1s 1s 646642550e-09 1s 1s 646645510e-09 0s 0s 646645870e-09 1s 1s 646652830e-09 1s 1s 646655750e-09 0s 0s 646656110e-09 1s 1s 646663110e-09 1s 1s 646665990e-09 0s 0s 646666350e-09 1s 1s 646673390e-09 1s 1s 646676230e-09 0s 0s 646676590e-09 1s 1s 646683670e-09 1s 1s 646686470e-09 0s 0s 646686830e-09 1s 1s 646693950e-09 1s 1s 646696710e-09 0s 0s 646697070e-09 1s 1s 646704230e-09 1s 1s 646706950e-09 0s 0s 646707310e-09 1s 1s 646714510e-09 1s 1s 646717190e-09 0s 0s 646717550e-09 1s 1s 646724790e-09 1s 1s 646727430e-09 0s 0s 646727790e-09 1s 1s 646735070e-09 1s 1s 646737670e-09 0s 0s 646738030e-09 1s 1s 646745350e-09 1s 1s 646747910e-09 0s 0s 646748270e-09 1s 1s 646755630e-09 1s 1s 646758150e-09 0s 0s 646758510e-09 1s 1s 646765910e-09 1s 1s 646768390e-09 0s 0s 646768750e-09 1s 1s 646776190e-09 1s 1s 646778630e-09 0s 0s 646778990e-09 1s 1s 646786470e-09 1s 1s 646788870e-09 0s 0s 646789230e-09 1s 1s 646796750e-09 1s 1s 646799110e-09 0s 0s 646799470e-09 1s 1s 646807030e-09 1s 1s 646809350e-09 0s 0s 646809710e-09 1s 1s 646817310e-09 1s 1s 646819590e-09 0s 0s 646819950e-09 1s 1s 646827590e-09 1s 1s 646829830e-09 0s 0s 646830190e-09 1s 1s 646837870e-09 1s 1s 646840070e-09 0s 0s 646840430e-09 1s 1s 646848150e-09 1s 1s 646850310e-09 0s 0s 646850670e-09 1s 1s 646858430e-09 1s 1s 646860550e-09 0s 0s 646860910e-09 1s 1s 646868710e-09 1s 1s 646870790e-09 0s 0s 646871150e-09 1s 1s 646878990e-09 1s 1s 646881030e-09 0s 0s 646881390e-09 1s 1s 646889270e-09 1s 1s 646891270e-09 0s 0s 646891630e-09 1s 1s 646899550e-09 1s 1s 646901510e-09 0s 0s 646901870e-09 1s 1s 646909830e-09 1s 1s 646911750e-09 0s 0s 646912110e-09 1s 1s 646920110e-09 1s 1s 646921990e-09 0s 0s 646922350e-09 1s 1s 646930390e-09 1s 1s 646932230e-09 0s 0s 646932590e-09 1s 1s 646940670e-09 1s 1s 646942470e-09 0s 0s 646942830e-09 1s 1s 646950950e-09 1s 1s 646952710e-09 0s 0s 646953070e-09 1s 1s 646961230e-09 1s 1s 646962950e-09 0s 0s 646963310e-09 1s 1s 646971510e-09 1s 1s 646973190e-09 0s 0s 646973550e-09 1s 1s 646981790e-09 1s 1s 646983430e-09 0s 0s 646983790e-09 1s 1s 646992070e-09 1s 1s 646993670e-09 0s 0s 646994030e-09 1s 1s 647002350e-09 1s 1s 647003910e-09 0s 0s 647004270e-09 1s 1s 647012630e-09 1s 1s 647014150e-09 0s 0s 647014510e-09 1s 1s 647022910e-09 1s 1s 647024390e-09 0s 0s 647024750e-09 1s 1s 647033190e-09 1s 1s 647034630e-09 0s 0s 647034990e-09 1s 1s 647043470e-09 1s 1s 647044870e-09 0s 0s 647045230e-09 1s 1s 647053750e-09 1s 1s 647055110e-09 0s 0s 647055470e-09 1s 1s 647064030e-09 1s 1s 647065350e-09 0s 0s 647065710e-09 1s 1s 647074310e-09 1s 1s 647075590e-09 0s 0s 647075950e-09 1s 1s 647084590e-09 1s 1s 647085830e-09 0s 0s 647086190e-09 1s 1s 647094870e-09 1s 1s 647096070e-09 0s 0s 647096430e-09 1s 1s 647105150e-09 1s 1s 647106310e-09 0s 0s 647106670e-09 1s 1s 647115430e-09 1s 1s 647116550e-09 0s 0s 647116910e-09 1s 1s 647125710e-09 1s 1s 647126790e-09 0s 0s 647127150e-09 1s 1s 647135990e-09 1s 1s 647137030e-09 0s 0s 647137390e-09 1s 1s 647146270e-09 1s 1s 647147270e-09 0s 0s 647147630e-09 1s 1s 647156550e-09 1s 1s 647157510e-09 0s 0s 647157870e-09 1s 1s 647166830e-09 1s 1s 647167750e-09 0s 0s 647168110e-09 1s 1s 647177110e-09 1s 1s 647177990e-09 0s 0s 647178350e-09 1s 1s 647187390e-09 1s 1s 647188230e-09 0s 0s 647188590e-09 1s 1s 647197670e-09 1s 1s 647198470e-09 0s 0s 647198830e-09 1s 1s 647207950e-09 1s 1s 647208710e-09 0s 0s 647209070e-09 1s 1s 647218230e-09 1s 1s 647218950e-09 0s 0s 647219310e-09 1s 1s 647228510e-09 1s 1s 647229190e-09 0s 0s 647229550e-09 1s 1s 647238790e-09 1s 1s 647239430e-09 0s 0s 647239790e-09 1s 1s 647249070e-09 1s 1s 647249670e-09 0s 0s 647250030e-09 1s 1s 647259350e-09 1s 1s 647259910e-09 0s 0s 647260270e-09 1s 1s 647269630e-09 1s 1s 647270150e-09 0s 0s 647270510e-09 1s 1s 647279910e-09 1s 1s 647280390e-09 0s 0s 647280750e-09 1s 1s 647290190e-09 1s 1s 647290630e-09 0s 0s 647290990e-09 1s 1s 647300470e-09 1s 1s 647300870e-09 0s 0s 647301230e-09 1s 1s 647310750e-09 1s 1s 647311110e-09 0s 0s 647311470e-09 1s 1s 647321030e-09 1s 1s 647321350e-09 0s 0s 647321710e-09 1s 1s 647331310e-09 1s 1s 647331590e-09 0s 0s 647331950e-09 1s 1s 647341590e-09 1s 1s 647341830e-09 0s 0s 647342190e-09 1s 1s 647351870e-09 1s 1s 647352070e-09 0s 0s 647352430e-09 1s 1s 647362150e-09 1s 1s 647362310e-09 0s 0s 647362670e-09 1s 1s 647372430e-09 1s 1s 647372550e-09 0s 0s 647372910e-09 1s 1s 647382710e-09 1s 1s 647382790e-09 0s 0s 647383150e-09 1s 1s 647392990e-09 1s 1s 647393030e-09 0s 0s 647393390e-09 1s 1s 647403270e-09 0s 0s 647403630e-09 1s 1s 647413510e-09 0s 0s 647413550e-09 0s 0s 647413870e-09 1s 1s 647423750e-09 0s 0s 647423830e-09 0s 0s 647424110e-09 1s 1s 647433990e-09 0s 0s 647434110e-09 0s 0s 647434350e-09 1s 1s 647444230e-09 0s 0s 647444390e-09 0s 0s 647444590e-09 1s 1s 647454470e-09 0s 0s 647454670e-09 0s 0s 647454830e-09 1s 1s 647464710e-09 0s 0s 647464950e-09 0s 0s 647465070e-09 1s 1s 647474950e-09 0s 0s 647475230e-09 0s 0s 647475310e-09 1s 1s 647485190e-09 0s 0s 647485510e-09 0s 0s 647485550e-09 1s 1s 647495430e-09 0s 0s 647495790e-09 1s 1s 647495830e-09 1s 1s 647505710e-09 0s 0s 647506030e-09 1s 1s 647506110e-09 1s 1s 647515950e-09 0s 0s 647516270e-09 1s 1s 647516390e-09 1s 1s 647526190e-09 0s 0s 647526510e-09 1s 1s 647526670e-09 1s 1s 647536430e-09 0s 0s 647536750e-09 1s 1s 647536950e-09 1s 1s 647546670e-09 0s 0s 647546990e-09 1s 1s 647547230e-09 1s 1s 647556910e-09 0s 0s 647557230e-09 1s 1s 647557510e-09 1s 1s 647567150e-09 0s 0s 647567470e-09 1s 1s 647567790e-09 1s 1s 647577390e-09 0s 0s 647577710e-09 1s 1s 647578070e-09 1s 1s 647587630e-09 0s 0s 647587950e-09 1s 1s 647588350e-09 1s 1s 647597870e-09 0s 0s 647598190e-09 1s 1s 647598630e-09 1s 1s 647608110e-09 0s 0s 647608430e-09 1s 1s 647608910e-09 1s 1s 647618350e-09 0s 0s 647618670e-09 1s 1s 647619190e-09 1s 1s 647628590e-09 0s 0s 647628910e-09 1s 1s 647629470e-09 1s 1s 647638830e-09 0s 0s 647639150e-09 1s 1s 647639750e-09 1s 1s 647649070e-09 0s 0s 647649390e-09 1s 1s 647650030e-09 1s 1s 647659310e-09 0s 0s 647659630e-09 1s 1s 647660310e-09 1s 1s 647669550e-09 0s 0s 647669870e-09 1s 1s 647670590e-09 1s 1s 647679790e-09 0s 0s 647680110e-09 1s 1s 647680870e-09 1s 1s 647690030e-09 0s 0s 647690350e-09 1s 1s 647691150e-09 1s 1s 647700270e-09 0s 0s 647700590e-09 1s 1s 647701430e-09 1s 1s 647710510e-09 0s 0s 647710830e-09 1s 1s 647711710e-09 1s 1s 647720750e-09 0s 0s 647721070e-09 1s 1s 647721990e-09 1s 1s 647730990e-09 0s 0s 647731310e-09 1s 1s 647732270e-09 1s 1s 647741230e-09 0s 0s 647741550e-09 1s 1s 647742550e-09 1s 1s 647751470e-09 0s 0s 647751790e-09 1s 1s 647752830e-09 1s 1s 647761710e-09 0s 0s 647762030e-09 1s 1s 647763110e-09 1s 1s 647771950e-09 0s 0s 647772270e-09 1s 1s 647773390e-09 1s 1s 647782190e-09 0s 0s 647782510e-09 1s 1s 647783670e-09 1s 1s 647792430e-09 0s 0s 647792750e-09 1s 1s 647793950e-09 1s 1s 647802670e-09 0s 0s 647802990e-09 1s 1s 647804230e-09 1s 1s 647812910e-09 0s 0s 647813230e-09 1s 1s 647814510e-09 1s 1s 647823150e-09 0s 0s 647823470e-09 1s 1s 647824790e-09 1s 1s 647833390e-09 0s 0s 647833710e-09 1s 1s 647835070e-09 1s 1s 647843630e-09 0s 0s 647843950e-09 1s 1s 647845350e-09 1s 1s 647853870e-09 0s 0s 647854190e-09 1s 1s 647855630e-09 1s 1s 647864110e-09 0s 0s 647864430e-09 1s 1s 647865910e-09 1s 1s 647874350e-09 0s 0s 647874670e-09 1s 1s 647876190e-09 1s 1s 647884590e-09 0s 0s 647884910e-09 1s 1s 647886470e-09 1s 1s 647894830e-09 0s 0s 647895150e-09 1s 1s 647896750e-09 1s 1s 647905070e-09 0s 0s 647905390e-09 1s 1s 647907030e-09 1s 1s 647915310e-09 0s 0s 647915630e-09 1s 1s 647917310e-09 1s 1s 647925550e-09 0s 0s 647925870e-09 1s 1s 647927590e-09 1s 1s 647935790e-09 0s 0s 647936110e-09 1s 1s 647937870e-09 1s 1s 647946030e-09 0s 0s 647946350e-09 1s 1s 647948150e-09 1s 1s 647956270e-09 0s 0s 647956590e-09 1s 1s 647958430e-09 1s 1s 647966510e-09 0s 0s 647966830e-09 1s 1s 647968710e-09 1s 1s 647976750e-09 0s 0s 647977070e-09 1s 1s 647978990e-09 1s 1s 647986990e-09 0s 0s 647987310e-09 1s 1s 647989270e-09 1s 1s 647997230e-09 0s 0s 647997550e-09 1s 1s 647999550e-09 1s 1s 648007470e-09 0s 0s 648007790e-09 1s 1s 648009830e-09 1s 1s 648017710e-09 0s 0s 648018030e-09 1s 1s 648020110e-09 1s 1s 648027950e-09 0s 0s 648028270e-09 1s 1s 648030390e-09 1s 1s 648038190e-09 0s 0s 648038510e-09 1s 1s 648040670e-09 1s 1s 648048430e-09 0s 0s 648048750e-09 1s 1s 648050950e-09 1s 1s 648058670e-09 0s 0s 648058990e-09 1s 1s 648061230e-09 1s 1s 648068910e-09 0s 0s 648069230e-09 1s 1s 648071510e-09 1s 1s 648079150e-09 0s 0s 648079470e-09 1s 1s 648081790e-09 1s 1s 648089390e-09 0s 0s 648089710e-09 1s 1s 648092070e-09 1s 1s 648099630e-09 0s 0s 648099950e-09 1s 1s 648102350e-09 1s 1s 648109870e-09 0s 0s 648110190e-09 1s 1s 648112630e-09 1s 1s 648120110e-09 0s 0s 648120430e-09 1s 1s 648122910e-09 1s 1s 648130350e-09 0s 0s 648130670e-09 1s 1s 648133190e-09 1s 1s 648140590e-09 0s 0s 648140910e-09 1s 1s 648143470e-09 1s 1s 648150830e-09 0s 0s 648151150e-09 1s 1s 648153750e-09 1s 1s 648161070e-09 0s 0s 648161390e-09 1s 1s 648164030e-09 1s 1s 648171310e-09 0s 0s 648171630e-09 1s 1s 648174310e-09 1s 1s 648181550e-09 0s 0s 648181870e-09 1s 1s 648184590e-09 1s 1s 648191790e-09 0s 0s 648192110e-09 1s 1s 648194870e-09 1s 1s 648202030e-09 0s 0s 648202350e-09 1s 1s 648205150e-09 1s 1s 648212270e-09 0s 0s 648212590e-09 1s 1s 648215430e-09 1s 1s 648222510e-09 0s 0s 648222830e-09 1s 1s 648225710e-09 1s 1s 648232750e-09 0s 0s 648233070e-09 1s 1s 648235990e-09 1s 1s 648242990e-09 0s 0s 648243310e-09 1s 1s 648246270e-09 1s 1s 648253230e-09 0s 0s 648253550e-09 1s 1s 648256550e-09 1s 1s 648263470e-09 0s 0s 648263790e-09 1s 1s 648266830e-09 1s 1s 648273710e-09 0s 0s 648274030e-09 1s 1s 648277110e-09 1s 1s 648283950e-09 0s 0s 648284270e-09 1s 1s 648287390e-09 1s 1s 648294190e-09 0s 0s 648294510e-09 1s 1s 648297670e-09 1s 1s 648304430e-09 0s 0s 648304750e-09 1s 1s 648307950e-09 1s 1s 648314670e-09 0s 0s 648314990e-09 1s 1s 648318230e-09 1s 1s 648324910e-09 0s 0s 648325230e-09 1s 1s 648328510e-09 1s 1s 648335150e-09 0s 0s 648335470e-09 1s 1s 648338790e-09 1s 1s 648345390e-09 0s 0s 648345710e-09 1s 1s 648349070e-09 1s 1s 648355630e-09 0s 0s 648355950e-09 1s 1s 648359350e-09 1s 1s 648365870e-09 0s 0s 648366190e-09 1s 1s 648369630e-09 1s 1s 648376110e-09 0s 0s 648376430e-09 1s 1s 648379910e-09 1s 1s 648386350e-09 0s 0s 648386670e-09 1s 1s 648390190e-09 1s 1s 648396590e-09 0s 0s 648396910e-09 1s 1s 648400470e-09 1s 1s 648406830e-09 0s 0s 648407150e-09 1s 1s 648410750e-09 1s 1s 648417070e-09 0s 0s 648417390e-09 1s 1s 648421030e-09 1s 1s 648427310e-09 0s 0s 648427630e-09 1s 1s 648431310e-09 1s 1s 648437550e-09 0s 0s 648437870e-09 1s 1s 648441590e-09 1s 1s 648447790e-09 0s 0s 648448110e-09 1s 1s 648451870e-09 1s 1s 648458030e-09 0s 0s 648458350e-09 1s 1s 648462150e-09 1s 1s 648468270e-09 0s 0s 648468590e-09 1s 1s 648472430e-09 1s 1s 648478510e-09 0s 0s 648478830e-09 1s 1s 648482710e-09 1s 1s 648488750e-09 0s 0s 648489070e-09 1s 1s 648492990e-09 1s 1s 648498990e-09 0s 0s 648499310e-09 1s 1s 648503270e-09 1s 1s 648509230e-09 0s 0s 648509550e-09 1s 1s 648513550e-09 1s 1s 648519470e-09 0s 0s 648519790e-09 1s 1s 648523830e-09 1s 1s 648529710e-09 0s 0s 648530030e-09 1s 1s 648534110e-09 1s 1s 648539950e-09 0s 0s 648540270e-09 1s 1s 648544390e-09 1s 1s 648550190e-09 0s 0s 648550510e-09 1s 1s 648554670e-09 1s 1s 648560430e-09 0s 0s 648560750e-09 1s 1s 648564950e-09 1s 1s 648570670e-09 0s 0s 648570990e-09 1s 1s 648575230e-09 1s 1s 648580910e-09 0s 0s 648581230e-09 1s 1s 648585510e-09 1s 1s 648591150e-09 0s 0s 648591470e-09 1s 1s 648595790e-09 1s 1s 648601390e-09 0s 0s 648601710e-09 1s 1s 648606070e-09 1s 1s 648611630e-09 0s 0s 648611950e-09 1s 1s 648616350e-09 1s 1s 648621870e-09 0s 0s 648622190e-09 1s 1s 648626630e-09 1s 1s 648632110e-09 0s 0s 648632430e-09 1s 1s 648636910e-09 1s 1s 648642350e-09 0s 0s 648642670e-09 1s 1s 648647190e-09 1s 1s 648652590e-09 0s 0s 648652910e-09 1s 1s 648657470e-09 1s 1s 648662830e-09 0s 0s 648663150e-09 1s 1s 648667750e-09 1s 1s 648673070e-09 0s 0s 648673390e-09 1s 1s 648678030e-09 1s 1s 648683310e-09 0s 0s 648683630e-09 1s 1s 648688310e-09 1s 1s 648693550e-09 0s 0s 648693870e-09 1s 1s 648698590e-09 1s 1s 648703790e-09 0s 0s 648704110e-09 1s 1s 648708870e-09 1s 1s 648714030e-09 0s 0s 648714350e-09 1s 1s 648719150e-09 1s 1s 648724270e-09 0s 0s 648724590e-09 1s 1s 648729430e-09 1s 1s 648734510e-09 0s 0s 648734830e-09 1s 1s 648739710e-09 1s 1s 648744750e-09 0s 0s 648745070e-09 1s 1s 648749990e-09 1s 1s 648754990e-09 0s 0s 648755310e-09 1s 1s 648760270e-09 1s 1s 648765230e-09 0s 0s 648765550e-09 1s 1s 648770550e-09 1s 1s 648775470e-09 0s 0s 648775790e-09 1s 1s 648780830e-09 1s 1s 648785710e-09 0s 0s 648786030e-09 1s 1s 648791110e-09 1s 1s 648795950e-09 0s 0s 648796270e-09 1s 1s 648801390e-09 1s 1s 648806190e-09 0s 0s 648806510e-09 1s 1s 648811670e-09 1s 1s 648816430e-09 0s 0s 648816750e-09 1s 1s 648821950e-09 1s 1s 648826670e-09 0s 0s 648826990e-09 1s 1s 648832230e-09 1s 1s 648836910e-09 0s 0s 648837230e-09 1s 1s 648842510e-09 1s 1s 648847150e-09 0s 0s 648847470e-09 1s 1s 648852790e-09 1s 1s 648857390e-09 0s 0s 648857710e-09 1s 1s 648863070e-09 1s 1s 648867630e-09 0s 0s 648867950e-09 1s 1s 648873350e-09 1s 1s 648877870e-09 0s 0s 648878190e-09 1s 1s 648883630e-09 1s 1s 648888110e-09 0s 0s 648888430e-09 1s 1s 648893910e-09 1s 1s 648898350e-09 0s 0s 648898670e-09 1s 1s 648904190e-09 1s 1s 648908590e-09 0s 0s 648908910e-09 1s 1s 648914470e-09 1s 1s 648918830e-09 0s 0s 648919150e-09 1s 1s 648924750e-09 1s 1s 648929070e-09 0s 0s 648929390e-09 1s 1s 648935030e-09 1s 1s 648939310e-09 0s 0s 648939630e-09 1s 1s 648945310e-09 1s 1s 648949550e-09 0s 0s 648949870e-09 1s 1s 648955590e-09 1s 1s 648959790e-09 0s 0s 648960110e-09 1s 1s 648965870e-09 1s 1s 648970030e-09 0s 0s 648970350e-09 1s 1s 648976150e-09 1s 1s 648980270e-09 0s 0s 648980590e-09 1s 1s 648986430e-09 1s 1s 648990510e-09 0s 0s 648990830e-09 1s 1s 648996710e-09 1s 1s 649000750e-09 0s 0s 649001070e-09 1s 1s 649006990e-09 1s 1s 649010990e-09 0s 0s 649011310e-09 1s 1s 649017270e-09 1s 1s 649021230e-09 0s 0s 649021550e-09 1s 1s 649027550e-09 1s 1s 649031470e-09 0s 0s 649031790e-09 1s 1s 649037830e-09 1s 1s 649041710e-09 0s 0s 649042030e-09 1s 1s 649048110e-09 1s 1s 649051950e-09 0s 0s 649052270e-09 1s 1s 649058390e-09 1s 1s 649062190e-09 0s 0s 649062510e-09 1s 1s 649068670e-09 1s 1s 649072430e-09 0s 0s 649072750e-09 1s 1s 649078950e-09 1s 1s 649082670e-09 0s 0s 649082990e-09 1s 1s 649089230e-09 1s 1s 649092910e-09 0s 0s 649093230e-09 1s 1s 649099510e-09 1s 1s 649103150e-09 0s 0s 649103470e-09 1s 1s 649109790e-09 1s 1s 649113390e-09 0s 0s 649113710e-09 1s 1s 649120070e-09 1s 1s 649123630e-09 0s 0s 649123950e-09 1s 1s 649130350e-09 1s 1s 649133870e-09 0s 0s 649134190e-09 1s 1s 649140630e-09 1s 1s 649144110e-09 0s 0s 649144430e-09 1s 1s 649150910e-09 1s 1s 649154350e-09 0s 0s 649154670e-09 1s 1s 649161190e-09 1s 1s 649164590e-09 0s 0s 649164910e-09 1s 1s 649171470e-09 1s 1s 649174830e-09 0s 0s 649175150e-09 1s 1s 649181750e-09 1s 1s 649185070e-09 0s 0s 649185390e-09 1s 1s 649192030e-09 1s 1s 649195310e-09 0s 0s 649195630e-09 1s 1s 649202310e-09 1s 1s 649205550e-09 0s 0s 649205870e-09 1s 1s 649212590e-09 1s 1s 649215790e-09 0s 0s 649216110e-09 1s 1s 649222870e-09 1s 1s 649226030e-09 0s 0s 649226350e-09 1s 1s 649233150e-09 1s 1s 649236270e-09 0s 0s 649236590e-09 1s 1s 649243430e-09 1s 1s 649246510e-09 0s 0s 649246830e-09 1s 1s 649253710e-09 1s 1s 649256750e-09 0s 0s 649257070e-09 1s 1s 649263990e-09 1s 1s 649266990e-09 0s 0s 649267310e-09 1s 1s 649274270e-09 1s 1s 649277230e-09 0s 0s 649277550e-09 1s 1s 649284550e-09 1s 1s 649287470e-09 0s 0s 649287790e-09 1s 1s 649294830e-09 1s 1s 649297710e-09 0s 0s 649298030e-09 1s 1s 649305110e-09 1s 1s 649307950e-09 0s 0s 649308270e-09 1s 1s 649315390e-09 1s 1s 649318190e-09 0s 0s 649318510e-09 1s 1s 649325670e-09 1s 1s 649328430e-09 0s 0s 649328750e-09 1s 1s 649335950e-09 1s 1s 649338670e-09 0s 0s 649338990e-09 1s 1s 649346230e-09 1s 1s 649348910e-09 0s 0s 649349230e-09 1s 1s 649356510e-09 1s 1s 649359150e-09 0s 0s 649359470e-09 1s 1s 649366790e-09 1s 1s 649369390e-09 0s 0s 649369710e-09 1s 1s 649377070e-09 1s 1s 649379630e-09 0s 0s 649379950e-09 1s 1s 649387350e-09 1s 1s 649389870e-09 0s 0s 649390190e-09 1s 1s 649397630e-09 1s 1s 649400110e-09 0s 0s 649400430e-09 1s 1s 649407910e-09 1s 1s 649410350e-09 0s 0s 649410670e-09 1s 1s 649418190e-09 1s 1s 649420590e-09 0s 0s 649420910e-09 1s 1s 649428470e-09 1s 1s 649430830e-09 0s 0s 649431150e-09 1s 1s 649438750e-09 1s 1s 649441070e-09 0s 0s 649441390e-09 1s 1s 649449030e-09 1s 1s 649451310e-09 0s 0s 649451630e-09 1s 1s 649459310e-09 1s 1s 649461550e-09 0s 0s 649461870e-09 1s 1s 649469590e-09 1s 1s 649471790e-09 0s 0s 649472110e-09 1s 1s 649479870e-09 1s 1s 649482030e-09 0s 0s 649482350e-09 1s 1s 649490150e-09 1s 1s 649492270e-09 0s 0s 649492590e-09 1s 1s 649500430e-09 1s 1s 649502510e-09 0s 0s 649502830e-09 1s 1s 649510710e-09 1s 1s 649512750e-09 0s 0s 649513070e-09 1s 1s 649520990e-09 1s 1s 649522990e-09 0s 0s 649523310e-09 1s 1s 649531270e-09 1s 1s 649533230e-09 0s 0s 649533550e-09 1s 1s 649541550e-09 1s 1s 649543470e-09 0s 0s 649543790e-09 1s 1s 649551830e-09 1s 1s 649553710e-09 0s 0s 649554030e-09 1s 1s 649562110e-09 1s 1s 649563950e-09 0s 0s 649564270e-09 1s 1s 649572390e-09 1s 1s 649574190e-09 0s 0s 649574510e-09 1s 1s 649582670e-09 1s 1s 649584430e-09 0s 0s 649584750e-09 1s 1s 649592950e-09 1s 1s 649594670e-09 0s 0s 649594990e-09 1s 1s 649603230e-09 1s 1s 649604910e-09 0s 0s 649605230e-09 1s 1s 649613510e-09 1s 1s 649615150e-09 0s 0s 649615470e-09 1s 1s 649623790e-09 1s 1s 649625390e-09 0s 0s 649625710e-09 1s 1s 649634070e-09 1s 1s 649635630e-09 0s 0s 649635950e-09 1s 1s 649644350e-09 1s 1s 649645870e-09 0s 0s 649646190e-09 1s 1s 649654630e-09 1s 1s 649656110e-09 0s 0s 649656430e-09 1s 1s 649664910e-09 1s 1s 649666350e-09 0s 0s 649666670e-09 1s 1s 649675190e-09 1s 1s 649676590e-09 0s 0s 649676910e-09 1s 1s 649685470e-09 1s 1s 649686830e-09 0s 0s 649687150e-09 1s 1s 649695750e-09 1s 1s 649697070e-09 0s 0s 649697390e-09 1s 1s 649706030e-09 1s 1s 649707310e-09 0s 0s 649707630e-09 1s 1s 649716310e-09 1s 1s 649717550e-09 0s 0s 649717870e-09 1s 1s 649726590e-09 1s 1s 649727790e-09 0s 0s 649728110e-09 1s 1s 649736870e-09 1s 1s 649738030e-09 0s 0s 649738350e-09 1s 1s 649747150e-09 1s 1s 649748270e-09 0s 0s 649748590e-09 1s 1s 649757430e-09 1s 1s 649758510e-09 0s 0s 649758830e-09 1s 1s 649767710e-09 1s 1s 649768750e-09 0s 0s 649769070e-09 1s 1s 649777990e-09 1s 1s 649778990e-09 0s 0s 649779310e-09 1s 1s 649788270e-09 1s 1s 649789230e-09 0s 0s 649789550e-09 1s 1s 649798550e-09 1s 1s 649799470e-09 0s 0s 649799790e-09 1s 1s 649808830e-09 1s 1s 649809710e-09 0s 0s 649810030e-09 1s 1s 649819110e-09 1s 1s 649819950e-09 0s 0s 649820270e-09 1s 1s 649829390e-09 1s 1s 649830190e-09 0s 0s 649830510e-09 1s 1s 649839670e-09 1s 1s 649840430e-09 0s 0s 649840750e-09 1s 1s 649849950e-09 1s 1s 649850670e-09 0s 0s 649850990e-09 1s 1s 649860230e-09 1s 1s 649860910e-09 0s 0s 649861230e-09 1s 1s 649870510e-09 1s 1s 649871150e-09 0s 0s 649871470e-09 1s 1s 649880790e-09 1s 1s 649881390e-09 0s 0s 649881710e-09 1s 1s 649891070e-09 1s 1s 649891630e-09 0s 0s 649891950e-09 1s 1s 649901350e-09 1s 1s 649901870e-09 0s 0s 649902190e-09 1s 1s 649911630e-09 1s 1s 649912110e-09 0s 0s 649912430e-09 1s 1s 649921910e-09 1s 1s 649922350e-09 0s 0s 649922670e-09 1s 1s 649932190e-09 1s 1s 649932590e-09 0s 0s 649932910e-09 1s 1s 649942470e-09 1s 1s 649942830e-09 0s 0s 649943150e-09 1s 1s 649952750e-09 1s 1s 649953070e-09 0s 0s 649953390e-09 1s 1s 649963030e-09 1s 1s 649963310e-09 0s 0s 649963630e-09 1s 1s 649973310e-09 1s 1s 649973550e-09 0s 0s 649973870e-09 1s 1s 649983590e-09 1s 1s 649983790e-09 0s 0s 649984110e-09 1s 1s 649993870e-09 1s 1s 649994030e-09 0s 0s 649994350e-09 1s 1s 650004150e-09 1s 1s 650004270e-09 0s 0s 650004590e-09 1s 1s 650014430e-09 1s 1s 650014510e-09 0s 0s 650014830e-09 1s 1s 650024710e-09 1s 1s 650024750e-09 0s 0s 650025070e-09 1s 1s 650034990e-09 0s 0s 650035310e-09 1s 1s 650045230e-09 0s 0s 650045270e-09 0s 0s 650045550e-09 1s 1s 650055470e-09 0s 0s 650055550e-09 0s 0s 650055790e-09 1s 1s 650065710e-09 0s 0s 650065830e-09 0s 0s 650066030e-09 1s 1s 650075950e-09 0s 0s 650076110e-09 0s 0s 650076270e-09 1s 1s 650086190e-09 0s 0s 650086390e-09 0s 0s 650086510e-09 1s 1s 650096430e-09 0s 0s 650096670e-09 0s 0s 650096750e-09 1s 1s 650106670e-09 0s 0s 650106950e-09 0s 0s 650106990e-09 1s 1s 650116910e-09 0s 0s 650117230e-09 1s 1s 650117270e-09 1s 1s 650127190e-09 0s 0s 650127470e-09 1s 1s 650127550e-09 1s 1s 650137430e-09 0s 0s 650137710e-09 1s 1s 650137830e-09 1s 1s 650147670e-09 0s 0s 650147950e-09 1s 1s 650148110e-09 1s 1s 650157910e-09 0s 0s 650158190e-09 1s 1s 650158390e-09 1s 1s 650168150e-09 0s 0s 650168430e-09 1s 1s 650168670e-09 1s 1s 650178390e-09 0s 0s 650178670e-09 1s 1s 650178950e-09 1s 1s 650188630e-09 0s 0s 650188910e-09 1s 1s 650189230e-09 1s 1s 650198870e-09 0s 0s 650199150e-09 1s 1s 650199510e-09 1s 1s 650209110e-09 0s 0s 650209390e-09 1s 1s 650209790e-09 1s 1s 650219350e-09 0s 0s 650219630e-09 1s 1s 650220070e-09 1s 1s 650229590e-09 0s 0s 650229870e-09 1s 1s 650230350e-09 1s 1s 650239830e-09 0s 0s 650240110e-09 1s 1s 650240630e-09 1s 1s 650250070e-09 0s 0s 650250350e-09 1s 1s 650250910e-09 1s 1s 650260310e-09 0s 0s 650260590e-09 1s 1s 650261190e-09 1s 1s 650270550e-09 0s 0s 650270830e-09 1s 1s 650271470e-09 1s 1s 650280790e-09 0s 0s 650281070e-09 1s 1s 650281750e-09 1s 1s 650291030e-09 0s 0s 650291310e-09 1s 1s 650292030e-09 1s 1s 650301270e-09 0s 0s 650301550e-09 1s 1s 650302310e-09 1s 1s 650311510e-09 0s 0s 650311790e-09 1s 1s 650312590e-09 1s 1s 650321750e-09 0s 0s 650322030e-09 1s 1s 650322870e-09 1s 1s 650331990e-09 0s 0s 650332270e-09 1s 1s 650333150e-09 1s 1s 650342230e-09 0s 0s 650342510e-09 1s 1s 650343430e-09 1s 1s 650352470e-09 0s 0s 650352750e-09 1s 1s 650353710e-09 1s 1s 650362710e-09 0s 0s 650362990e-09 1s 1s 650363990e-09 1s 1s 650372950e-09 0s 0s 650373230e-09 1s 1s 650374270e-09 1s 1s 650383190e-09 0s 0s 650383470e-09 1s 1s 650384550e-09 1s 1s 650393430e-09 0s 0s 650393710e-09 1s 1s 650394830e-09 1s 1s 650403670e-09 0s 0s 650403950e-09 1s 1s 650405110e-09 1s 1s 650413910e-09 0s 0s 650414190e-09 1s 1s 650415390e-09 1s 1s 650424150e-09 0s 0s 650424430e-09 1s 1s 650425670e-09 1s 1s 650434390e-09 0s 0s 650434670e-09 1s 1s 650435950e-09 1s 1s 650444630e-09 0s 0s 650444910e-09 1s 1s 650446230e-09 1s 1s 650454870e-09 0s 0s 650455150e-09 1s 1s 650456510e-09 1s 1s 650465110e-09 0s 0s 650465390e-09 1s 1s 650466790e-09 1s 1s 650475350e-09 0s 0s 650475630e-09 1s 1s 650477070e-09 1s 1s 650485590e-09 0s 0s 650485870e-09 1s 1s 650487350e-09 1s 1s 650495830e-09 0s 0s 650496110e-09 1s 1s 650497630e-09 1s 1s 650506070e-09 0s 0s 650506350e-09 1s 1s 650507910e-09 1s 1s 650516310e-09 0s 0s 650516590e-09 1s 1s 650518190e-09 1s 1s 650526550e-09 0s 0s 650526830e-09 1s 1s 650528470e-09 1s 1s 650536790e-09 0s 0s 650537070e-09 1s 1s 650538750e-09 1s 1s 650547030e-09 0s 0s 650547310e-09 1s 1s 650549030e-09 1s 1s 650557270e-09 0s 0s 650557550e-09 1s 1s 650559310e-09 1s 1s 650567510e-09 0s 0s 650567790e-09 1s 1s 650569590e-09 1s 1s 650577750e-09 0s 0s 650578030e-09 1s 1s 650579870e-09 1s 1s 650587990e-09 0s 0s 650588270e-09 1s 1s 650590150e-09 1s 1s 650598230e-09 0s 0s 650598510e-09 1s 1s 650600430e-09 1s 1s 650608470e-09 0s 0s 650608750e-09 1s 1s 650610710e-09 1s 1s 650618710e-09 0s 0s 650618990e-09 1s 1s 650620990e-09 1s 1s 650628950e-09 0s 0s 650629230e-09 1s 1s 650631270e-09 1s 1s 650639190e-09 0s 0s 650639470e-09 1s 1s 650641550e-09 1s 1s 650649430e-09 0s 0s 650649710e-09 1s 1s 650651830e-09 1s 1s 650659670e-09 0s 0s 650659950e-09 1s 1s 650662110e-09 1s 1s 650669910e-09 0s 0s 650670190e-09 1s 1s 650672390e-09 1s 1s 650680150e-09 0s 0s 650680430e-09 1s 1s 650682670e-09 1s 1s 650690390e-09 0s 0s 650690670e-09 1s 1s 650692950e-09 1s 1s 650700630e-09 0s 0s 650700910e-09 1s 1s 650703230e-09 1s 1s 650710870e-09 0s 0s 650711150e-09 1s 1s 650713510e-09 1s 1s 650721110e-09 0s 0s 650721390e-09 1s 1s 650723790e-09 1s 1s 650731350e-09 0s 0s 650731630e-09 1s 1s 650734070e-09 1s 1s 650741590e-09 0s 0s 650741870e-09 1s 1s 650744350e-09 1s 1s 650751830e-09 0s 0s 650752110e-09 1s 1s 650754630e-09 1s 1s 650762070e-09 0s 0s 650762350e-09 1s 1s 650764910e-09 1s 1s 650772310e-09 0s 0s 650772590e-09 1s 1s 650775190e-09 1s 1s 650782550e-09 0s 0s 650782830e-09 1s 1s 650785470e-09 1s 1s 650792790e-09 0s 0s 650793070e-09 1s 1s 650795750e-09 1s 1s 650803030e-09 0s 0s 650803310e-09 1s 1s 650806030e-09 1s 1s 650813270e-09 0s 0s 650813550e-09 1s 1s 650816310e-09 1s 1s 650823510e-09 0s 0s 650823790e-09 1s 1s 650826590e-09 1s 1s 650833750e-09 0s 0s 650834030e-09 1s 1s 650836870e-09 1s 1s 650843990e-09 0s 0s 650844270e-09 1s 1s 650847150e-09 1s 1s 650854230e-09 0s 0s 650854510e-09 1s 1s 650857430e-09 1s 1s 650864470e-09 0s 0s 650864750e-09 1s 1s 650867710e-09 1s 1s 650874710e-09 0s 0s 650874990e-09 1s 1s 650877990e-09 1s 1s 650884950e-09 0s 0s 650885230e-09 1s 1s 650888270e-09 1s 1s 650895190e-09 0s 0s 650895470e-09 1s 1s 650898550e-09 1s 1s 650905430e-09 0s 0s 650905710e-09 1s 1s 650908830e-09 1s 1s 650915670e-09 0s 0s 650915950e-09 1s 1s 650919110e-09 1s 1s 650925910e-09 0s 0s 650926190e-09 1s 1s 650929390e-09 1s 1s 650936150e-09 0s 0s 650936430e-09 1s 1s 650939670e-09 1s 1s 650946390e-09 0s 0s 650946670e-09 1s 1s 650949950e-09 1s 1s 650956630e-09 0s 0s 650956910e-09 1s 1s 650960230e-09 1s 1s 650966870e-09 0s 0s 650967150e-09 1s 1s 650970510e-09 1s 1s 650977110e-09 0s 0s 650977390e-09 1s 1s 650980790e-09 1s 1s 650987350e-09 0s 0s 650987630e-09 1s 1s 650991070e-09 1s 1s 650997590e-09 0s 0s 650997870e-09 1s 1s 651001350e-09 1s 1s 651007830e-09 0s 0s 651008110e-09 1s 1s 651011630e-09 1s 1s 651018070e-09 0s 0s 651018350e-09 1s 1s 651021910e-09 1s 1s 651028310e-09 0s 0s 651028590e-09 1s 1s 651032190e-09 1s 1s 651038550e-09 0s 0s 651038830e-09 1s 1s 651042470e-09 1s 1s 651048790e-09 0s 0s 651049070e-09 1s 1s 651052750e-09 1s 1s 651059030e-09 0s 0s 651059310e-09 1s 1s 651063030e-09 1s 1s 651069270e-09 0s 0s 651069550e-09 1s 1s 651073310e-09 1s 1s 651079510e-09 0s 0s 651079790e-09 1s 1s 651083590e-09 1s 1s 651089750e-09 0s 0s 651090030e-09 1s 1s 651093870e-09 1s 1s 651099990e-09 0s 0s 651100270e-09 1s 1s 651104150e-09 1s 1s 651110230e-09 0s 0s 651110510e-09 1s 1s 651114430e-09 1s 1s 651120470e-09 0s 0s 651120750e-09 1s 1s 651124710e-09 1s 1s 651130710e-09 0s 0s 651130990e-09 1s 1s 651134990e-09 1s 1s 651140950e-09 0s 0s 651141230e-09 1s 1s 651145270e-09 1s 1s 651151190e-09 0s 0s 651151470e-09 1s 1s 651155550e-09 1s 1s 651161430e-09 0s 0s 651161710e-09 1s 1s 651165830e-09 1s 1s 651171670e-09 0s 0s 651171950e-09 1s 1s 651176110e-09 1s 1s 651181910e-09 0s 0s 651182190e-09 1s 1s 651186390e-09 1s 1s 651192150e-09 0s 0s 651192430e-09 1s 1s 651196670e-09 1s 1s 651202390e-09 0s 0s 651202670e-09 1s 1s 651206950e-09 1s 1s 651212630e-09 0s 0s 651212910e-09 1s 1s 651217230e-09 1s 1s 651222870e-09 0s 0s 651223150e-09 1s 1s 651227510e-09 1s 1s 651233110e-09 0s 0s 651233390e-09 1s 1s 651237790e-09 1s 1s 651243350e-09 0s 0s 651243630e-09 1s 1s 651248070e-09 1s 1s 651253590e-09 0s 0s 651253870e-09 1s 1s 651258350e-09 1s 1s 651263830e-09 0s 0s 651264110e-09 1s 1s 651268630e-09 1s 1s 651274070e-09 0s 0s 651274350e-09 1s 1s 651278910e-09 1s 1s 651284310e-09 0s 0s 651284590e-09 1s 1s 651289190e-09 1s 1s 651294550e-09 0s 0s 651294830e-09 1s 1s 651299470e-09 1s 1s 651304790e-09 0s 0s 651305070e-09 1s 1s 651309750e-09 1s 1s 651315030e-09 0s 0s 651315310e-09 1s 1s 651320030e-09 1s 1s 651325270e-09 0s 0s 651325550e-09 1s 1s 651330310e-09 1s 1s 651335510e-09 0s 0s 651335790e-09 1s 1s 651340590e-09 1s 1s 651345750e-09 0s 0s 651346030e-09 1s 1s 651350870e-09 1s 1s 651355990e-09 0s 0s 651356270e-09 1s 1s 651361150e-09 1s 1s 651366230e-09 0s 0s 651366510e-09 1s 1s 651371430e-09 1s 1s 651376470e-09 0s 0s 651376750e-09 1s 1s 651381710e-09 1s 1s 651386710e-09 0s 0s 651386990e-09 1s 1s 651391990e-09 1s 1s 651396950e-09 0s 0s 651397230e-09 1s 1s 651402270e-09 1s 1s 651407190e-09 0s 0s 651407470e-09 1s 1s 651412550e-09 1s 1s 651417430e-09 0s 0s 651417710e-09 1s 1s 651422830e-09 1s 1s 651427670e-09 0s 0s 651427950e-09 1s 1s 651433110e-09 1s 1s 651437910e-09 0s 0s 651438190e-09 1s 1s 651443390e-09 1s 1s 651448150e-09 0s 0s 651448430e-09 1s 1s 651453670e-09 1s 1s 651458390e-09 0s 0s 651458670e-09 1s 1s 651463950e-09 1s 1s 651468630e-09 0s 0s 651468910e-09 1s 1s 651474230e-09 1s 1s 651478870e-09 0s 0s 651479150e-09 1s 1s 651484510e-09 1s 1s 651489110e-09 0s 0s 651489390e-09 1s 1s 651494790e-09 1s 1s 651499350e-09 0s 0s 651499630e-09 1s 1s 651505070e-09 1s 1s 651509590e-09 0s 0s 651509870e-09 1s 1s 651515350e-09 1s 1s 651519830e-09 0s 0s 651520110e-09 1s 1s 651525630e-09 1s 1s 651530070e-09 0s 0s 651530350e-09 1s 1s 651535910e-09 1s 1s 651540310e-09 0s 0s 651540590e-09 1s 1s 651546190e-09 1s 1s 651550550e-09 0s 0s 651550830e-09 1s 1s 651556470e-09 1s 1s 651560790e-09 0s 0s 651561070e-09 1s 1s 651566750e-09 1s 1s 651571030e-09 0s 0s 651571310e-09 1s 1s 651577030e-09 1s 1s 651581270e-09 0s 0s 651581550e-09 1s 1s 651587310e-09 1s 1s 651591510e-09 0s 0s 651591790e-09 1s 1s 651597590e-09 1s 1s 651601750e-09 0s 0s 651602030e-09 1s 1s 651607870e-09 1s 1s 651611990e-09 0s 0s 651612270e-09 1s 1s 651618150e-09 1s 1s 651622230e-09 0s 0s 651622510e-09 1s 1s 651628430e-09 1s 1s 651632470e-09 0s 0s 651632750e-09 1s 1s 651638710e-09 1s 1s 651642710e-09 0s 0s 651642990e-09 1s 1s 651648990e-09 1s 1s 651652950e-09 0s 0s 651653230e-09 1s 1s 651659270e-09 1s 1s 651663190e-09 0s 0s 651663470e-09 1s 1s 651669550e-09 1s 1s 651673430e-09 0s 0s 651673710e-09 1s 1s 651679830e-09 1s 1s 651683670e-09 0s 0s 651683950e-09 1s 1s 651690110e-09 1s 1s 651693910e-09 0s 0s 651694190e-09 1s 1s 651700390e-09 1s 1s 651704150e-09 0s 0s 651704430e-09 1s 1s 651710670e-09 1s 1s 651714390e-09 0s 0s 651714670e-09 1s 1s 651720950e-09 1s 1s 651724630e-09 0s 0s 651724910e-09 1s 1s 651731230e-09 1s 1s 651734870e-09 0s 0s 651735150e-09 1s 1s 651741510e-09 1s 1s 651745110e-09 0s 0s 651745390e-09 1s 1s 651751790e-09 1s 1s 651755350e-09 0s 0s 651755630e-09 1s 1s 651762070e-09 1s 1s 651765590e-09 0s 0s 651765870e-09 1s 1s 651772350e-09 1s 1s 651775830e-09 0s 0s 651776110e-09 1s 1s 651782630e-09 1s 1s 651786070e-09 0s 0s 651786350e-09 1s 1s 651792910e-09 1s 1s 651796310e-09 0s 0s 651796590e-09 1s 1s 651803190e-09 1s 1s 651806550e-09 0s 0s 651806830e-09 1s 1s 651813470e-09 1s 1s 651816790e-09 0s 0s 651817070e-09 1s 1s 651823750e-09 1s 1s 651827030e-09 0s 0s 651827310e-09 1s 1s 651834030e-09 1s 1s 651837270e-09 0s 0s 651837550e-09 1s 1s 651844310e-09 1s 1s 651847510e-09 0s 0s 651847790e-09 1s 1s 651854590e-09 1s 1s 651857750e-09 0s 0s 651858030e-09 1s 1s 651864870e-09 1s 1s 651867990e-09 0s 0s 651868270e-09 1s 1s 651875150e-09 1s 1s 651878230e-09 0s 0s 651878510e-09 1s 1s 651885430e-09 1s 1s 651888470e-09 0s 0s 651888750e-09 1s 1s 651895710e-09 1s 1s 651898710e-09 0s 0s 651898990e-09 1s 1s 651905990e-09 1s 1s 651908950e-09 0s 0s 651909230e-09 1s 1s 651916270e-09 1s 1s 651919190e-09 0s 0s 651919470e-09 1s 1s 651926550e-09 1s 1s 651929430e-09 0s 0s 651929710e-09 1s 1s 651936830e-09 1s 1s 651939670e-09 0s 0s 651939950e-09 1s 1s 651947110e-09 1s 1s 651949910e-09 0s 0s 651950190e-09 1s 1s 651957390e-09 1s 1s 651960150e-09 0s 0s 651960430e-09 1s 1s 651967670e-09 1s 1s 651970390e-09 0s 0s 651970670e-09 1s 1s 651977950e-09 1s 1s 651980630e-09 0s 0s 651980910e-09 1s 1s 651988230e-09 1s 1s 651990870e-09 0s 0s 651991150e-09 1s 1s 651998510e-09 1s 1s 652001110e-09 0s 0s 652001390e-09 1s 1s 652008790e-09 1s 1s 652011350e-09 0s 0s 652011630e-09 1s 1s 652019070e-09 1s 1s 652021590e-09 0s 0s 652021870e-09 1s 1s 652029350e-09 1s 1s 652031830e-09 0s 0s 652032110e-09 1s 1s 652039630e-09 1s 1s 652042070e-09 0s 0s 652042350e-09 1s 1s 652049910e-09 1s 1s 652052310e-09 0s 0s 652052590e-09 1s 1s 652060190e-09 1s 1s 652062550e-09 0s 0s 652062830e-09 1s 1s 652070470e-09 1s 1s 652072790e-09 0s 0s 652073070e-09 1s 1s 652080750e-09 1s 1s 652083030e-09 0s 0s 652083310e-09 1s 1s 652091030e-09 1s 1s 652093270e-09 0s 0s 652093550e-09 1s 1s 652101310e-09 1s 1s 652103510e-09 0s 0s 652103790e-09 1s 1s 652111590e-09 1s 1s 652113750e-09 0s 0s 652114030e-09 1s 1s 652121870e-09 1s 1s 652123990e-09 0s 0s 652124270e-09 1s 1s 652132150e-09 1s 1s 652134230e-09 0s 0s 652134510e-09 1s 1s 652142430e-09 1s 1s 652144470e-09 0s 0s 652144750e-09 1s 1s 652152710e-09 1s 1s 652154710e-09 0s 0s 652154990e-09 1s 1s 652162990e-09 1s 1s 652164950e-09 0s 0s 652165230e-09 1s 1s 652173270e-09 1s 1s 652175190e-09 0s 0s 652175470e-09 1s 1s 652183550e-09 1s 1s 652185430e-09 0s 0s 652185710e-09 1s 1s 652193830e-09 1s 1s 652195670e-09 0s 0s 652195950e-09 1s 1s 652204110e-09 1s 1s 652205910e-09 0s 0s 652206190e-09 1s 1s 652214390e-09 1s 1s 652216150e-09 0s 0s 652216430e-09 1s 1s 652224670e-09 1s 1s 652226390e-09 0s 0s 652226670e-09 1s 1s 652234950e-09 1s 1s 652236630e-09 0s 0s 652236910e-09 1s 1s 652245230e-09 1s 1s 652246870e-09 0s 0s 652247150e-09 1s 1s 652255510e-09 1s 1s 652257110e-09 0s 0s 652257390e-09 1s 1s 652265790e-09 1s 1s 652267350e-09 0s 0s 652267630e-09 1s 1s 652276070e-09 1s 1s 652277590e-09 0s 0s 652277870e-09 1s 1s 652286350e-09 1s 1s 652287830e-09 0s 0s 652288110e-09 1s 1s 652296630e-09 1s 1s 652298070e-09 0s 0s 652298350e-09 1s 1s 652306910e-09 1s 1s 652308310e-09 0s 0s 652308590e-09 1s 1s 652317190e-09 1s 1s 652318550e-09 0s 0s 652318830e-09 1s 1s 652327470e-09 1s 1s 652328790e-09 0s 0s 652329070e-09 1s 1s 652337750e-09 1s 1s 652339030e-09 0s 0s 652339310e-09 1s 1s 652348030e-09 1s 1s 652349270e-09 0s 0s 652349550e-09 1s 1s 652358310e-09 1s 1s 652359510e-09 0s 0s 652359790e-09 1s 1s 652368590e-09 1s 1s 652369750e-09 0s 0s 652370030e-09 1s 1s 652378870e-09 1s 1s 652379990e-09 0s 0s 652380270e-09 1s 1s 652389150e-09 1s 1s 652390230e-09 0s 0s 652390510e-09 1s 1s 652399430e-09 1s 1s 652400470e-09 0s 0s 652400750e-09 1s 1s 652409710e-09 1s 1s 652410710e-09 0s 0s 652410990e-09 1s 1s 652419990e-09 1s 1s 652420950e-09 0s 0s 652421230e-09 1s 1s 652430270e-09 1s 1s 652431190e-09 0s 0s 652431470e-09 1s 1s 652440550e-09 1s 1s 652441430e-09 0s 0s 652441710e-09 1s 1s 652450830e-09 1s 1s 652451670e-09 0s 0s 652451950e-09 1s 1s 652461110e-09 1s 1s 652461910e-09 0s 0s 652462190e-09 1s 1s 652471390e-09 1s 1s 652472150e-09 0s 0s 652472430e-09 1s 1s 652481670e-09 1s 1s 652482390e-09 0s 0s 652482670e-09 1s 1s 652491950e-09 1s 1s 652492630e-09 0s 0s 652492910e-09 1s 1s 652502230e-09 1s 1s 652502870e-09 0s 0s 652503150e-09 1s 1s 652512510e-09 1s 1s 652513110e-09 0s 0s 652513390e-09 1s 1s 652522790e-09 1s 1s 652523350e-09 0s 0s 652523630e-09 1s 1s 652533070e-09 1s 1s 652533590e-09 0s 0s 652533870e-09 1s 1s 652543350e-09 1s 1s 652543830e-09 0s 0s 652544110e-09 1s 1s 652553630e-09 1s 1s 652554070e-09 0s 0s 652554350e-09 1s 1s 652563910e-09 1s 1s 652564310e-09 0s 0s 652564590e-09 1s 1s 652574190e-09 1s 1s 652574550e-09 0s 0s 652574830e-09 1s 1s 652584470e-09 1s 1s 652584790e-09 0s 0s 652585070e-09 1s 1s 652594750e-09 1s 1s 652595030e-09 0s 0s 652595310e-09 1s 1s 652605030e-09 1s 1s 652605270e-09 0s 0s 652605550e-09 1s 1s 652615310e-09 1s 1s 652615510e-09 0s 0s 652615790e-09 1s 1s 652625590e-09 1s 1s 652625750e-09 0s 0s 652626030e-09 1s 1s 652635870e-09 1s 1s 652635990e-09 0s 0s 652636270e-09 1s 1s 652646150e-09 1s 1s 652646230e-09 0s 0s 652646510e-09 1s 1s 652656430e-09 1s 1s 652656470e-09 0s 0s 652656750e-09 1s 1s 652666710e-09 0s 0s 652666990e-09 1s 1s 652676950e-09 0s 0s 652676990e-09 0s 0s 652677230e-09 1s 1s 652687190e-09 0s 0s 652687270e-09 0s 0s 652687470e-09 1s 1s 652697430e-09 0s 0s 652697550e-09 0s 0s 652697710e-09 1s 1s 652707670e-09 0s 0s 652707830e-09 0s 0s 652707950e-09 1s 1s 652717910e-09 0s 0s 652718110e-09 0s 0s 652718190e-09 1s 1s 652728150e-09 0s 0s 652728390e-09 0s 0s 652728430e-09 1s 1s 652738390e-09 0s 0s 652738670e-09 1s 1s 652738710e-09 1s 1s 652748670e-09 0s 0s 652748910e-09 1s 1s 652748990e-09 1s 1s 652758910e-09 0s 0s 652759150e-09 1s 1s 652759270e-09 1s 1s 652769150e-09 0s 0s 652769390e-09 1s 1s 652769550e-09 1s 1s 652779390e-09 0s 0s 652779630e-09 1s 1s 652779830e-09 1s 1s 652789630e-09 0s 0s 652789870e-09 1s 1s 652790110e-09 1s 1s 652799870e-09 0s 0s 652800110e-09 1s 1s 652800390e-09 1s 1s 652810110e-09 0s 0s 652810350e-09 1s 1s 652810670e-09 1s 1s 652820350e-09 0s 0s 652820590e-09 1s 1s 652820950e-09 1s 1s 652830590e-09 0s 0s 652830830e-09 1s 1s 652831230e-09 1s 1s 652840830e-09 0s 0s 652841070e-09 1s 1s 652841510e-09 1s 1s 652851070e-09 0s 0s 652851310e-09 1s 1s 652851790e-09 1s 1s 652861310e-09 0s 0s 652861550e-09 1s 1s 652862070e-09 1s 1s 652871550e-09 0s 0s 652871790e-09 1s 1s 652872350e-09 1s 1s 652881790e-09 0s 0s 652882030e-09 1s 1s 652882630e-09 1s 1s 652892030e-09 0s 0s 652892270e-09 1s 1s 652892910e-09 1s 1s 652902270e-09 0s 0s 652902510e-09 1s 1s 652903190e-09 1s 1s 652912510e-09 0s 0s 652912750e-09 1s 1s 652913470e-09 1s 1s 652922750e-09 0s 0s 652922990e-09 1s 1s 652923750e-09 1s 1s 652932990e-09 0s 0s 652933230e-09 1s 1s 652934030e-09 1s 1s 652943230e-09 0s 0s 652943470e-09 1s 1s 652944310e-09 1s 1s 652953470e-09 0s 0s 652953710e-09 1s 1s 652954590e-09 1s 1s 652963710e-09 0s 0s 652963950e-09 1s 1s 652964870e-09 1s 1s 652973950e-09 0s 0s 652974190e-09 1s 1s 652975150e-09 1s 1s 652984190e-09 0s 0s 652984430e-09 1s 1s 652985430e-09 1s 1s 652994430e-09 0s 0s 652994670e-09 1s 1s 652995710e-09 1s 1s 653004670e-09 0s 0s 653004910e-09 1s 1s 653005990e-09 1s 1s 653014910e-09 0s 0s 653015150e-09 1s 1s 653016270e-09 1s 1s 653025150e-09 0s 0s 653025390e-09 1s 1s 653026550e-09 1s 1s 653035390e-09 0s 0s 653035630e-09 1s 1s 653036830e-09 1s 1s 653045630e-09 0s 0s 653045870e-09 1s 1s 653047110e-09 1s 1s 653055870e-09 0s 0s 653056110e-09 1s 1s 653057390e-09 1s 1s 653066110e-09 0s 0s 653066350e-09 1s 1s 653067670e-09 1s 1s 653076350e-09 0s 0s 653076590e-09 1s 1s 653077950e-09 1s 1s 653086590e-09 0s 0s 653086830e-09 1s 1s 653088230e-09 1s 1s 653096830e-09 0s 0s 653097070e-09 1s 1s 653098510e-09 1s 1s 653107070e-09 0s 0s 653107310e-09 1s 1s 653108790e-09 1s 1s 653117310e-09 0s 0s 653117550e-09 1s 1s 653119070e-09 1s 1s 653127550e-09 0s 0s 653127790e-09 1s 1s 653129350e-09 1s 1s 653137790e-09 0s 0s 653138030e-09 1s 1s 653139630e-09 1s 1s 653148030e-09 0s 0s 653148270e-09 1s 1s 653149910e-09 1s 1s 653158270e-09 0s 0s 653158510e-09 1s 1s 653160190e-09 1s 1s 653168510e-09 0s 0s 653168750e-09 1s 1s 653170470e-09 1s 1s 653178750e-09 0s 0s 653178990e-09 1s 1s 653180750e-09 1s 1s 653188990e-09 0s 0s 653189230e-09 1s 1s 653191030e-09 1s 1s 653199230e-09 0s 0s 653199470e-09 1s 1s 653201310e-09 1s 1s 653209470e-09 0s 0s 653209710e-09 1s 1s 653211590e-09 1s 1s 653219710e-09 0s 0s 653219950e-09 1s 1s 653221870e-09 1s 1s 653229950e-09 0s 0s 653230190e-09 1s 1s 653232150e-09 1s 1s 653240190e-09 0s 0s 653240430e-09 1s 1s 653242430e-09 1s 1s 653250430e-09 0s 0s 653250670e-09 1s 1s 653252710e-09 1s 1s 653260670e-09 0s 0s 653260910e-09 1s 1s 653262990e-09 1s 1s 653270910e-09 0s 0s 653271150e-09 1s 1s 653273270e-09 1s 1s 653281150e-09 0s 0s 653281390e-09 1s 1s 653283550e-09 1s 1s 653291390e-09 0s 0s 653291630e-09 1s 1s 653293830e-09 1s 1s 653301630e-09 0s 0s 653301870e-09 1s 1s 653304110e-09 1s 1s 653311870e-09 0s 0s 653312110e-09 1s 1s 653314390e-09 1s 1s 653322110e-09 0s 0s 653322350e-09 1s 1s 653324670e-09 1s 1s 653332350e-09 0s 0s 653332590e-09 1s 1s 653334950e-09 1s 1s 653342590e-09 0s 0s 653342830e-09 1s 1s 653345230e-09 1s 1s 653352830e-09 0s 0s 653353070e-09 1s 1s 653355510e-09 1s 1s 653363070e-09 0s 0s 653363310e-09 1s 1s 653365790e-09 1s 1s 653373310e-09 0s 0s 653373550e-09 1s 1s 653376070e-09 1s 1s 653383550e-09 0s 0s 653383790e-09 1s 1s 653386350e-09 1s 1s 653393790e-09 0s 0s 653394030e-09 1s 1s 653396630e-09 1s 1s 653404030e-09 0s 0s 653404270e-09 1s 1s 653406910e-09 1s 1s 653414270e-09 0s 0s 653414510e-09 1s 1s 653417190e-09 1s 1s 653424510e-09 0s 0s 653424750e-09 1s 1s 653427470e-09 1s 1s 653434750e-09 0s 0s 653434990e-09 1s 1s 653437750e-09 1s 1s 653444990e-09 0s 0s 653445230e-09 1s 1s 653448030e-09 1s 1s 653455230e-09 0s 0s 653455470e-09 1s 1s 653458310e-09 1s 1s 653465470e-09 0s 0s 653465710e-09 1s 1s 653468590e-09 1s 1s 653475710e-09 0s 0s 653475950e-09 1s 1s 653478870e-09 1s 1s 653485950e-09 0s 0s 653486190e-09 1s 1s 653489150e-09 1s 1s 653496190e-09 0s 0s 653496430e-09 1s 1s 653499430e-09 1s 1s 653506430e-09 0s 0s 653506670e-09 1s 1s 653509710e-09 1s 1s 653516670e-09 0s 0s 653516910e-09 1s 1s 653519990e-09 1s 1s 653526910e-09 0s 0s 653527150e-09 1s 1s 653530270e-09 1s 1s 653537150e-09 0s 0s 653537390e-09 1s 1s 653540550e-09 1s 1s 653547390e-09 0s 0s 653547630e-09 1s 1s 653550830e-09 1s 1s 653557630e-09 0s 0s 653557870e-09 1s 1s 653561110e-09 1s 1s 653567870e-09 0s 0s 653568110e-09 1s 1s 653571390e-09 1s 1s 653578110e-09 0s 0s 653578350e-09 1s 1s 653581670e-09 1s 1s 653588350e-09 0s 0s 653588590e-09 1s 1s 653591950e-09 1s 1s 653598590e-09 0s 0s 653598830e-09 1s 1s 653602230e-09 1s 1s 653608830e-09 0s 0s 653609070e-09 1s 1s 653612510e-09 1s 1s 653619070e-09 0s 0s 653619310e-09 1s 1s 653622790e-09 1s 1s 653629310e-09 0s 0s 653629550e-09 1s 1s 653633070e-09 1s 1s 653639550e-09 0s 0s 653639790e-09 1s 1s 653643350e-09 1s 1s 653649790e-09 0s 0s 653650030e-09 1s 1s 653653630e-09 1s 1s 653660030e-09 0s 0s 653660270e-09 1s 1s 653663910e-09 1s 1s 653670270e-09 0s 0s 653670510e-09 1s 1s 653674190e-09 1s 1s 653680510e-09 0s 0s 653680750e-09 1s 1s 653684470e-09 1s 1s 653690750e-09 0s 0s 653690990e-09 1s 1s 653694750e-09 1s 1s 653700990e-09 0s 0s 653701230e-09 1s 1s 653705030e-09 1s 1s 653711230e-09 0s 0s 653711470e-09 1s 1s 653715310e-09 1s 1s 653721470e-09 0s 0s 653721710e-09 1s 1s 653725590e-09 1s 1s 653731710e-09 0s 0s 653731950e-09 1s 1s 653735870e-09 1s 1s 653741950e-09 0s 0s 653742190e-09 1s 1s 653746150e-09 1s 1s 653752190e-09 0s 0s 653752430e-09 1s 1s 653756430e-09 1s 1s 653762430e-09 0s 0s 653762670e-09 1s 1s 653766710e-09 1s 1s 653772670e-09 0s 0s 653772910e-09 1s 1s 653776990e-09 1s 1s 653782910e-09 0s 0s 653783150e-09 1s 1s 653787270e-09 1s 1s 653793150e-09 0s 0s 653793390e-09 1s 1s 653797550e-09 1s 1s 653803390e-09 0s 0s 653803630e-09 1s 1s 653807830e-09 1s 1s 653813630e-09 0s 0s 653813870e-09 1s 1s 653818110e-09 1s 1s 653823870e-09 0s 0s 653824110e-09 1s 1s 653828390e-09 1s 1s 653834110e-09 0s 0s 653834350e-09 1s 1s 653838670e-09 1s 1s 653844350e-09 0s 0s 653844590e-09 1s 1s 653848950e-09 1s 1s 653854590e-09 0s 0s 653854830e-09 1s 1s 653859230e-09 1s 1s 653864830e-09 0s 0s 653865070e-09 1s 1s 653869510e-09 1s 1s 653875070e-09 0s 0s 653875310e-09 1s 1s 653879790e-09 1s 1s 653885310e-09 0s 0s 653885550e-09 1s 1s 653890070e-09 1s 1s 653895550e-09 0s 0s 653895790e-09 1s 1s 653900350e-09 1s 1s 653905790e-09 0s 0s 653906030e-09 1s 1s 653910630e-09 1s 1s 653916030e-09 0s 0s 653916270e-09 1s 1s 653920910e-09 1s 1s 653926270e-09 0s 0s 653926510e-09 1s 1s 653931190e-09 1s 1s 653936510e-09 0s 0s 653936750e-09 1s 1s 653941470e-09 1s 1s 653946750e-09 0s 0s 653946990e-09 1s 1s 653951750e-09 1s 1s 653956990e-09 0s 0s 653957230e-09 1s 1s 653962030e-09 1s 1s 653967230e-09 0s 0s 653967470e-09 1s 1s 653972310e-09 1s 1s 653977470e-09 0s 0s 653977710e-09 1s 1s 653982590e-09 1s 1s 653987710e-09 0s 0s 653987950e-09 1s 1s 653992870e-09 1s 1s 653997950e-09 0s 0s 653998190e-09 1s 1s 654003150e-09 1s 1s 654008190e-09 0s 0s 654008430e-09 1s 1s 654013430e-09 1s 1s 654018430e-09 0s 0s 654018670e-09 1s 1s 654023710e-09 1s 1s 654028670e-09 0s 0s 654028910e-09 1s 1s 654033990e-09 1s 1s 654038910e-09 0s 0s 654039150e-09 1s 1s 654044270e-09 1s 1s 654049150e-09 0s 0s 654049390e-09 1s 1s 654054550e-09 1s 1s 654059390e-09 0s 0s 654059630e-09 1s 1s 654064830e-09 1s 1s 654069630e-09 0s 0s 654069870e-09 1s 1s 654075110e-09 1s 1s 654079870e-09 0s 0s 654080110e-09 1s 1s 654085390e-09 1s 1s 654090110e-09 0s 0s 654090350e-09 1s 1s 654095670e-09 1s 1s 654100350e-09 0s 0s 654100590e-09 1s 1s 654105950e-09 1s 1s 654110590e-09 0s 0s 654110830e-09 1s 1s 654116230e-09 1s 1s 654120830e-09 0s 0s 654121070e-09 1s 1s 654126510e-09 1s 1s 654131070e-09 0s 0s 654131310e-09 1s 1s 654136790e-09 1s 1s 654141310e-09 0s 0s 654141550e-09 1s 1s 654147070e-09 1s 1s 654151550e-09 0s 0s 654151790e-09 1s 1s 654157350e-09 1s 1s 654161790e-09 0s 0s 654162030e-09 1s 1s 654167630e-09 1s 1s 654172030e-09 0s 0s 654172270e-09 1s 1s 654177910e-09 1s 1s 654182270e-09 0s 0s 654182510e-09 1s 1s 654188190e-09 1s 1s 654192510e-09 0s 0s 654192750e-09 1s 1s 654198470e-09 1s 1s 654202750e-09 0s 0s 654202990e-09 1s 1s 654208750e-09 1s 1s 654212990e-09 0s 0s 654213230e-09 1s 1s 654219030e-09 1s 1s 654223230e-09 0s 0s 654223470e-09 1s 1s 654229310e-09 1s 1s 654233470e-09 0s 0s 654233710e-09 1s 1s 654239590e-09 1s 1s 654243710e-09 0s 0s 654243950e-09 1s 1s 654249870e-09 1s 1s 654253950e-09 0s 0s 654254190e-09 1s 1s 654260150e-09 1s 1s 654264190e-09 0s 0s 654264430e-09 1s 1s 654270430e-09 1s 1s 654274430e-09 0s 0s 654274670e-09 1s 1s 654280710e-09 1s 1s 654284670e-09 0s 0s 654284910e-09 1s 1s 654290990e-09 1s 1s 654294910e-09 0s 0s 654295150e-09 1s 1s 654301270e-09 1s 1s 654305150e-09 0s 0s 654305390e-09 1s 1s 654311550e-09 1s 1s 654315390e-09 0s 0s 654315630e-09 1s 1s 654321830e-09 1s 1s 654325630e-09 0s 0s 654325870e-09 1s 1s 654332110e-09 1s 1s 654335870e-09 0s 0s 654336110e-09 1s 1s 654342390e-09 1s 1s 654346110e-09 0s 0s 654346350e-09 1s 1s 654352670e-09 1s 1s 654356350e-09 0s 0s 654356590e-09 1s 1s 654362950e-09 1s 1s 654366590e-09 0s 0s 654366830e-09 1s 1s 654373230e-09 1s 1s 654376830e-09 0s 0s 654377070e-09 1s 1s 654383510e-09 1s 1s 654387070e-09 0s 0s 654387310e-09 1s 1s 654393790e-09 1s 1s 654397310e-09 0s 0s 654397550e-09 1s 1s 654404070e-09 1s 1s 654407550e-09 0s 0s 654407790e-09 1s 1s 654414350e-09 1s 1s 654417790e-09 0s 0s 654418030e-09 1s 1s 654424630e-09 1s 1s 654428030e-09 0s 0s 654428270e-09 1s 1s 654434910e-09 1s 1s 654438270e-09 0s 0s 654438510e-09 1s 1s 654445190e-09 1s 1s 654448510e-09 0s 0s 654448750e-09 1s 1s 654455470e-09 1s 1s 654458750e-09 0s 0s 654458990e-09 1s 1s 654465750e-09 1s 1s 654468990e-09 0s 0s 654469230e-09 1s 1s 654476030e-09 1s 1s 654479230e-09 0s 0s 654479470e-09 1s 1s 654486310e-09 1s 1s 654489470e-09 0s 0s 654489710e-09 1s 1s 654496590e-09 1s 1s 654499710e-09 0s 0s 654499950e-09 1s 1s 654506870e-09 1s 1s 654509950e-09 0s 0s 654510190e-09 1s 1s 654517150e-09 1s 1s 654520190e-09 0s 0s 654520430e-09 1s 1s 654527430e-09 1s 1s 654530430e-09 0s 0s 654530670e-09 1s 1s 654537710e-09 1s 1s 654540670e-09 0s 0s 654540910e-09 1s 1s 654547990e-09 1s 1s 654550910e-09 0s 0s 654551150e-09 1s 1s 654558270e-09 1s 1s 654561150e-09 0s 0s 654561390e-09 1s 1s 654568550e-09 1s 1s 654571390e-09 0s 0s 654571630e-09 1s 1s 654578830e-09 1s 1s 654581630e-09 0s 0s 654581870e-09 1s 1s 654589110e-09 1s 1s 654591870e-09 0s 0s 654592110e-09 1s 1s 654599390e-09 1s 1s 654602110e-09 0s 0s 654602350e-09 1s 1s 654609670e-09 1s 1s 654612350e-09 0s 0s 654612590e-09 1s 1s 654619950e-09 1s 1s 654622590e-09 0s 0s 654622830e-09 1s 1s 654630230e-09 1s 1s 654632830e-09 0s 0s 654633070e-09 1s 1s 654640510e-09 1s 1s 654643070e-09 0s 0s 654643310e-09 1s 1s 654650790e-09 1s 1s 654653310e-09 0s 0s 654653550e-09 1s 1s 654661070e-09 1s 1s 654663550e-09 0s 0s 654663790e-09 1s 1s 654671350e-09 1s 1s 654673790e-09 0s 0s 654674030e-09 1s 1s 654681630e-09 1s 1s 654684030e-09 0s 0s 654684270e-09 1s 1s 654691910e-09 1s 1s 654694270e-09 0s 0s 654694510e-09 1s 1s 654702190e-09 1s 1s 654704510e-09 0s 0s 654704750e-09 1s 1s 654712470e-09 1s 1s 654714750e-09 0s 0s 654714990e-09 1s 1s 654722750e-09 1s 1s 654724990e-09 0s 0s 654725230e-09 1s 1s 654733030e-09 1s 1s 654735230e-09 0s 0s 654735470e-09 1s 1s 654743310e-09 1s 1s 654745470e-09 0s 0s 654745710e-09 1s 1s 654753590e-09 1s 1s 654755710e-09 0s 0s 654755950e-09 1s 1s 654763870e-09 1s 1s 654765950e-09 0s 0s 654766190e-09 1s 1s 654774150e-09 1s 1s 654776190e-09 0s 0s 654776430e-09 1s 1s 654784430e-09 1s 1s 654786430e-09 0s 0s 654786670e-09 1s 1s 654794710e-09 1s 1s 654796670e-09 0s 0s 654796910e-09 1s 1s 654804990e-09 1s 1s 654806910e-09 0s 0s 654807150e-09 1s 1s 654815270e-09 1s 1s 654817150e-09 0s 0s 654817390e-09 1s 1s 654825550e-09 1s 1s 654827390e-09 0s 0s 654827630e-09 1s 1s 654835830e-09 1s 1s 654837630e-09 0s 0s 654837870e-09 1s 1s 654846110e-09 1s 1s 654847870e-09 0s 0s 654848110e-09 1s 1s 654856390e-09 1s 1s 654858110e-09 0s 0s 654858350e-09 1s 1s 654866670e-09 1s 1s 654868350e-09 0s 0s 654868590e-09 1s 1s 654876950e-09 1s 1s 654878590e-09 0s 0s 654878830e-09 1s 1s 654887230e-09 1s 1s 654888830e-09 0s 0s 654889070e-09 1s 1s 654897510e-09 1s 1s 654899070e-09 0s 0s 654899310e-09 1s 1s 654907790e-09 1s 1s 654909310e-09 0s 0s 654909550e-09 1s 1s 654918070e-09 1s 1s 654919550e-09 0s 0s 654919790e-09 1s 1s 654928350e-09 1s 1s 654929790e-09 0s 0s 654930030e-09 1s 1s 654938630e-09 1s 1s 654940030e-09 0s 0s 654940270e-09 1s 1s 654948910e-09 1s 1s 654950270e-09 0s 0s 654950510e-09 1s 1s 654959190e-09 1s 1s 654960510e-09 0s 0s 654960750e-09 1s 1s 654969470e-09 1s 1s 654970750e-09 0s 0s 654970990e-09 1s 1s 654979750e-09 1s 1s 654980990e-09 0s 0s 654981230e-09 1s 1s 654990030e-09 1s 1s 654991230e-09 0s 0s 654991470e-09 1s 1s 655000310e-09 1s 1s 655001470e-09 0s 0s 655001710e-09 1s 1s 655010590e-09 1s 1s 655011710e-09 0s 0s 655011950e-09 1s 1s 655020870e-09 1s 1s 655021950e-09 0s 0s 655022190e-09 1s 1s 655031150e-09 1s 1s 655032190e-09 0s 0s 655032430e-09 1s 1s 655041430e-09 1s 1s 655042430e-09 0s 0s 655042670e-09 1s 1s 655051710e-09 1s 1s 655052670e-09 0s 0s 655052910e-09 1s 1s 655061990e-09 1s 1s 655062910e-09 0s 0s 655063150e-09 1s 1s 655072270e-09 1s 1s 655073150e-09 0s 0s 655073390e-09 1s 1s 655082550e-09 1s 1s 655083390e-09 0s 0s 655083630e-09 1s 1s 655092830e-09 1s 1s 655093630e-09 0s 0s 655093870e-09 1s 1s 655103110e-09 1s 1s 655103870e-09 0s 0s 655104110e-09 1s 1s 655113390e-09 1s 1s 655114110e-09 0s 0s 655114350e-09 1s 1s 655123670e-09 1s 1s 655124350e-09 0s 0s 655124590e-09 1s 1s 655133950e-09 1s 1s 655134590e-09 0s 0s 655134830e-09 1s 1s 655144230e-09 1s 1s 655144830e-09 0s 0s 655145070e-09 1s 1s 655154510e-09 1s 1s 655155070e-09 0s 0s 655155310e-09 1s 1s 655164790e-09 1s 1s 655165310e-09 0s 0s 655165550e-09 1s 1s 655175070e-09 1s 1s 655175550e-09 0s 0s 655175790e-09 1s 1s 655185350e-09 1s 1s 655185790e-09 0s 0s 655186030e-09 1s 1s 655195630e-09 1s 1s 655196030e-09 0s 0s 655196270e-09 1s 1s 655205910e-09 1s 1s 655206270e-09 0s 0s 655206510e-09 1s 1s 655216190e-09 1s 1s 655216510e-09 0s 0s 655216750e-09 1s 1s 655226470e-09 1s 1s 655226750e-09 0s 0s 655226990e-09 1s 1s 655236750e-09 1s 1s 655236990e-09 0s 0s 655237230e-09 1s 1s 655247030e-09 1s 1s 655247230e-09 0s 0s 655247470e-09 1s 1s 655257310e-09 1s 1s 655257470e-09 0s 0s 655257710e-09 1s 1s 655267590e-09 1s 1s 655267710e-09 0s 0s 655267950e-09 1s 1s 655277870e-09 1s 1s 655277950e-09 0s 0s 655278190e-09 1s 1s 655288150e-09 1s 1s 655288190e-09 0s 0s 655288430e-09 1s 1s 655298430e-09 0s 0s 655298670e-09 1s 1s 655308670e-09 0s 0s 655308710e-09 0s 0s 655308910e-09 1s 1s 655318910e-09 0s 0s 655318990e-09 0s 0s 655319150e-09 1s 1s 655329150e-09 0s 0s 655329270e-09 0s 0s 655329390e-09 1s 1s 655339390e-09 0s 0s 655339550e-09 0s 0s 655339630e-09 1s 1s 655349630e-09 0s 0s 655349830e-09 0s 0s 655349870e-09 1s 1s 655359870e-09 0s 0s 655360110e-09 1s 1s 655360150e-09 1s 1s 655370150e-09 0s 0s 655370350e-09 1s 1s 655370430e-09 1s 1s 655380390e-09 0s 0s 655380590e-09 1s 1s 655380710e-09 1s 1s 655390630e-09 0s 0s 655390830e-09 1s 1s 655390990e-09 1s 1s 655400870e-09 0s 0s 655401070e-09 1s 1s 655401270e-09 1s 1s 655411110e-09 0s 0s 655411310e-09 1s 1s 655411550e-09 1s 1s 655421350e-09 0s 0s 655421550e-09 1s 1s 655421830e-09 1s 1s 655431590e-09 0s 0s 655431790e-09 1s 1s 655432110e-09 1s 1s 655441830e-09 0s 0s 655442030e-09 1s 1s 655442390e-09 1s 1s 655452070e-09 0s 0s 655452270e-09 1s 1s 655452670e-09 1s 1s 655462310e-09 0s 0s 655462510e-09 1s 1s 655462950e-09 1s 1s 655472550e-09 0s 0s 655472750e-09 1s 1s 655473230e-09 1s 1s 655482790e-09 0s 0s 655482990e-09 1s 1s 655483510e-09 1s 1s 655493030e-09 0s 0s 655493230e-09 1s 1s 655493790e-09 1s 1s 655503270e-09 0s 0s 655503470e-09 1s 1s 655504070e-09 1s 1s 655513510e-09 0s 0s 655513710e-09 1s 1s 655514350e-09 1s 1s 655523750e-09 0s 0s 655523950e-09 1s 1s 655524630e-09 1s 1s 655533990e-09 0s 0s 655534190e-09 1s 1s 655534910e-09 1s 1s 655544230e-09 0s 0s 655544430e-09 1s 1s 655545190e-09 1s 1s 655554470e-09 0s 0s 655554670e-09 1s 1s 655555470e-09 1s 1s 655564710e-09 0s 0s 655564910e-09 1s 1s 655565750e-09 1s 1s 655574950e-09 0s 0s 655575150e-09 1s 1s 655576030e-09 1s 1s 655585190e-09 0s 0s 655585390e-09 1s 1s 655586310e-09 1s 1s 655595430e-09 0s 0s 655595630e-09 1s 1s 655596590e-09 1s 1s 655605670e-09 0s 0s 655605870e-09 1s 1s 655606870e-09 1s 1s 655615910e-09 0s 0s 655616110e-09 1s 1s 655617150e-09 1s 1s 655626150e-09 0s 0s 655626350e-09 1s 1s 655627430e-09 1s 1s 655636390e-09 0s 0s 655636590e-09 1s 1s 655637710e-09 1s 1s 655646630e-09 0s 0s 655646830e-09 1s 1s 655647990e-09 1s 1s 655656870e-09 0s 0s 655657070e-09 1s 1s 655658270e-09 1s 1s 655667110e-09 0s 0s 655667310e-09 1s 1s 655668550e-09 1s 1s 655677350e-09 0s 0s 655677550e-09 1s 1s 655678830e-09 1s 1s 655687590e-09 0s 0s 655687790e-09 1s 1s 655689110e-09 1s 1s 655697830e-09 0s 0s 655698030e-09 1s 1s 655699390e-09 1s 1s 655708070e-09 0s 0s 655708270e-09 1s 1s 655709670e-09 1s 1s 655718310e-09 0s 0s 655718510e-09 1s 1s 655719950e-09 1s 1s 655728550e-09 0s 0s 655728750e-09 1s 1s 655730230e-09 1s 1s 655738790e-09 0s 0s 655738990e-09 1s 1s 655740510e-09 1s 1s 655749030e-09 0s 0s 655749230e-09 1s 1s 655750790e-09 1s 1s 655759270e-09 0s 0s 655759470e-09 1s 1s 655761070e-09 1s 1s 655769510e-09 0s 0s 655769710e-09 1s 1s 655771350e-09 1s 1s 655779750e-09 0s 0s 655779950e-09 1s 1s 655781630e-09 1s 1s 655789990e-09 0s 0s 655790190e-09 1s 1s 655791910e-09 1s 1s 655800230e-09 0s 0s 655800430e-09 1s 1s 655802190e-09 1s 1s 655810470e-09 0s 0s 655810670e-09 1s 1s 655812470e-09 1s 1s 655820710e-09 0s 0s 655820910e-09 1s 1s 655822750e-09 1s 1s 655830950e-09 0s 0s 655831150e-09 1s 1s 655833030e-09 1s 1s 655841190e-09 0s 0s 655841390e-09 1s 1s 655843310e-09 1s 1s 655851430e-09 0s 0s 655851630e-09 1s 1s 655853590e-09 1s 1s 655861670e-09 0s 0s 655861870e-09 1s 1s 655863870e-09 1s 1s 655871910e-09 0s 0s 655872110e-09 1s 1s 655874150e-09 1s 1s 655882150e-09 0s 0s 655882350e-09 1s 1s 655884430e-09 1s 1s 655892390e-09 0s 0s 655892590e-09 1s 1s 655894710e-09 1s 1s 655902630e-09 0s 0s 655902830e-09 1s 1s 655904990e-09 1s 1s 655912870e-09 0s 0s 655913070e-09 1s 1s 655915270e-09 1s 1s 655923110e-09 0s 0s 655923310e-09 1s 1s 655925550e-09 1s 1s 655933350e-09 0s 0s 655933550e-09 1s 1s 655935830e-09 1s 1s 655943590e-09 0s 0s 655943790e-09 1s 1s 655946110e-09 1s 1s 655953830e-09 0s 0s 655954030e-09 1s 1s 655956390e-09 1s 1s 655964070e-09 0s 0s 655964270e-09 1s 1s 655966670e-09 1s 1s 655974310e-09 0s 0s 655974510e-09 1s 1s 655976950e-09 1s 1s 655984550e-09 0s 0s 655984750e-09 1s 1s 655987230e-09 1s 1s 655994790e-09 0s 0s 655994990e-09 1s 1s 655997510e-09 1s 1s 656005030e-09 0s 0s 656005230e-09 1s 1s 656007790e-09 1s 1s 656015270e-09 0s 0s 656015470e-09 1s 1s 656018070e-09 1s 1s 656025510e-09 0s 0s 656025710e-09 1s 1s 656028350e-09 1s 1s 656035750e-09 0s 0s 656035950e-09 1s 1s 656038630e-09 1s 1s 656045990e-09 0s 0s 656046190e-09 1s 1s 656048910e-09 1s 1s 656056230e-09 0s 0s 656056430e-09 1s 1s 656059190e-09 1s 1s 656066470e-09 0s 0s 656066670e-09 1s 1s 656069470e-09 1s 1s 656076710e-09 0s 0s 656076910e-09 1s 1s 656079750e-09 1s 1s 656086950e-09 0s 0s 656087150e-09 1s 1s 656090030e-09 1s 1s 656097190e-09 0s 0s 656097390e-09 1s 1s 656100310e-09 1s 1s 656107430e-09 0s 0s 656107630e-09 1s 1s 656110590e-09 1s 1s 656117670e-09 0s 0s 656117870e-09 1s 1s 656120870e-09 1s 1s 656127910e-09 0s 0s 656128110e-09 1s 1s 656131150e-09 1s 1s 656138150e-09 0s 0s 656138350e-09 1s 1s 656141430e-09 1s 1s 656148390e-09 0s 0s 656148590e-09 1s 1s 656151710e-09 1s 1s 656158630e-09 0s 0s 656158830e-09 1s 1s 656161990e-09 1s 1s 656168870e-09 0s 0s 656169070e-09 1s 1s 656172270e-09 1s 1s 656179110e-09 0s 0s 656179310e-09 1s 1s 656182550e-09 1s 1s 656189350e-09 0s 0s 656189550e-09 1s 1s 656192830e-09 1s 1s 656199590e-09 0s 0s 656199790e-09 1s 1s 656203110e-09 1s 1s 656209830e-09 0s 0s 656210030e-09 1s 1s 656213390e-09 1s 1s 656220070e-09 0s 0s 656220270e-09 1s 1s 656223670e-09 1s 1s 656230310e-09 0s 0s 656230510e-09 1s 1s 656233950e-09 1s 1s 656240550e-09 0s 0s 656240750e-09 1s 1s 656244230e-09 1s 1s 656250790e-09 0s 0s 656250990e-09 1s 1s 656254510e-09 1s 1s 656261030e-09 0s 0s 656261230e-09 1s 1s 656264790e-09 1s 1s 656271270e-09 0s 0s 656271470e-09 1s 1s 656275070e-09 1s 1s 656281510e-09 0s 0s 656281710e-09 1s 1s 656285350e-09 1s 1s 656291750e-09 0s 0s 656291950e-09 1s 1s 656295630e-09 1s 1s 656301990e-09 0s 0s 656302190e-09 1s 1s 656305910e-09 1s 1s 656312230e-09 0s 0s 656312430e-09 1s 1s 656316190e-09 1s 1s 656322470e-09 0s 0s 656322670e-09 1s 1s 656326470e-09 1s 1s 656332710e-09 0s 0s 656332910e-09 1s 1s 656336750e-09 1s 1s 656342950e-09 0s 0s 656343150e-09 1s 1s 656347030e-09 1s 1s 656353190e-09 0s 0s 656353390e-09 1s 1s 656357310e-09 1s 1s 656363430e-09 0s 0s 656363630e-09 1s 1s 656367590e-09 1s 1s 656373670e-09 0s 0s 656373870e-09 1s 1s 656377870e-09 1s 1s 656383910e-09 0s 0s 656384110e-09 1s 1s 656388150e-09 1s 1s 656394150e-09 0s 0s 656394350e-09 1s 1s 656398430e-09 1s 1s 656404390e-09 0s 0s 656404590e-09 1s 1s 656408710e-09 1s 1s 656414630e-09 0s 0s 656414830e-09 1s 1s 656418990e-09 1s 1s 656424870e-09 0s 0s 656425070e-09 1s 1s 656429270e-09 1s 1s 656435110e-09 0s 0s 656435310e-09 1s 1s 656439550e-09 1s 1s 656445350e-09 0s 0s 656445550e-09 1s 1s 656449830e-09 1s 1s 656455590e-09 0s 0s 656455790e-09 1s 1s 656460110e-09 1s 1s 656465830e-09 0s 0s 656466030e-09 1s 1s 656470390e-09 1s 1s 656476070e-09 0s 0s 656476270e-09 1s 1s 656480670e-09 1s 1s 656486310e-09 0s 0s 656486510e-09 1s 1s 656490950e-09 1s 1s 656496550e-09 0s 0s 656496750e-09 1s 1s 656501230e-09 1s 1s 656506790e-09 0s 0s 656506990e-09 1s 1s 656511510e-09 1s 1s 656517030e-09 0s 0s 656517230e-09 1s 1s 656521790e-09 1s 1s 656527270e-09 0s 0s 656527470e-09 1s 1s 656532070e-09 1s 1s 656537510e-09 0s 0s 656537710e-09 1s 1s 656542350e-09 1s 1s 656547750e-09 0s 0s 656547950e-09 1s 1s 656552630e-09 1s 1s 656557990e-09 0s 0s 656558190e-09 1s 1s 656562910e-09 1s 1s 656568230e-09 0s 0s 656568430e-09 1s 1s 656573190e-09 1s 1s 656578470e-09 0s 0s 656578670e-09 1s 1s 656583470e-09 1s 1s 656588710e-09 0s 0s 656588910e-09 1s 1s 656593750e-09 1s 1s 656598950e-09 0s 0s 656599150e-09 1s 1s 656604030e-09 1s 1s 656609190e-09 0s 0s 656609390e-09 1s 1s 656614310e-09 1s 1s 656619430e-09 0s 0s 656619630e-09 1s 1s 656624590e-09 1s 1s 656629670e-09 0s 0s 656629870e-09 1s 1s 656634870e-09 1s 1s 656639910e-09 0s 0s 656640110e-09 1s 1s 656645150e-09 1s 1s 656650150e-09 0s 0s 656650350e-09 1s 1s 656655430e-09 1s 1s 656660390e-09 0s 0s 656660590e-09 1s 1s 656665710e-09 1s 1s 656670630e-09 0s 0s 656670830e-09 1s 1s 656675990e-09 1s 1s 656680870e-09 0s 0s 656681070e-09 1s 1s 656686270e-09 1s 1s 656691110e-09 0s 0s 656691310e-09 1s 1s 656696550e-09 1s 1s 656701350e-09 0s 0s 656701550e-09 1s 1s 656706830e-09 1s 1s 656711590e-09 0s 0s 656711790e-09 1s 1s 656717110e-09 1s 1s 656721830e-09 0s 0s 656722030e-09 1s 1s 656727390e-09 1s 1s 656732070e-09 0s 0s 656732270e-09 1s 1s 656737670e-09 1s 1s 656742310e-09 0s 0s 656742510e-09 1s 1s 656747950e-09 1s 1s 656752550e-09 0s 0s 656752750e-09 1s 1s 656758230e-09 1s 1s 656762790e-09 0s 0s 656762990e-09 1s 1s 656768510e-09 1s 1s 656773030e-09 0s 0s 656773230e-09 1s 1s 656778790e-09 1s 1s 656783270e-09 0s 0s 656783470e-09 1s 1s 656789070e-09 1s 1s 656793510e-09 0s 0s 656793710e-09 1s 1s 656799350e-09 1s 1s 656803750e-09 0s 0s 656803950e-09 1s 1s 656809630e-09 1s 1s 656813990e-09 0s 0s 656814190e-09 1s 1s 656819910e-09 1s 1s 656824230e-09 0s 0s 656824430e-09 1s 1s 656830190e-09 1s 1s 656834470e-09 0s 0s 656834670e-09 1s 1s 656840470e-09 1s 1s 656844710e-09 0s 0s 656844910e-09 1s 1s 656850750e-09 1s 1s 656854950e-09 0s 0s 656855150e-09 1s 1s 656861030e-09 1s 1s 656865190e-09 0s 0s 656865390e-09 1s 1s 656871310e-09 1s 1s 656875430e-09 0s 0s 656875630e-09 1s 1s 656881590e-09 1s 1s 656885670e-09 0s 0s 656885870e-09 1s 1s 656891870e-09 1s 1s 656895910e-09 0s 0s 656896110e-09 1s 1s 656902150e-09 1s 1s 656906150e-09 0s 0s 656906350e-09 1s 1s 656912430e-09 1s 1s 656916390e-09 0s 0s 656916590e-09 1s 1s 656922710e-09 1s 1s 656926630e-09 0s 0s 656926830e-09 1s 1s 656932990e-09 1s 1s 656936870e-09 0s 0s 656937070e-09 1s 1s 656943270e-09 1s 1s 656947110e-09 0s 0s 656947310e-09 1s 1s 656953550e-09 1s 1s 656957350e-09 0s 0s 656957550e-09 1s 1s 656963830e-09 1s 1s 656967590e-09 0s 0s 656967790e-09 1s 1s 656974110e-09 1s 1s 656977830e-09 0s 0s 656978030e-09 1s 1s 656984390e-09 1s 1s 656988070e-09 0s 0s 656988270e-09 1s 1s 656994670e-09 1s 1s 656998310e-09 0s 0s 656998510e-09 1s 1s 657004950e-09 1s 1s 657008550e-09 0s 0s 657008750e-09 1s 1s 657015230e-09 1s 1s 657018790e-09 0s 0s 657018990e-09 1s 1s 657025510e-09 1s 1s 657029030e-09 0s 0s 657029230e-09 1s 1s 657035790e-09 1s 1s 657039270e-09 0s 0s 657039470e-09 1s 1s 657046070e-09 1s 1s 657049510e-09 0s 0s 657049710e-09 1s 1s 657056350e-09 1s 1s 657059750e-09 0s 0s 657059950e-09 1s 1s 657066630e-09 1s 1s 657069990e-09 0s 0s 657070190e-09 1s 1s 657076910e-09 1s 1s 657080230e-09 0s 0s 657080430e-09 1s 1s 657087190e-09 1s 1s 657090470e-09 0s 0s 657090670e-09 1s 1s 657097470e-09 1s 1s 657100710e-09 0s 0s 657100910e-09 1s 1s 657107750e-09 1s 1s 657110950e-09 0s 0s 657111150e-09 1s 1s 657118030e-09 1s 1s 657121190e-09 0s 0s 657121390e-09 1s 1s 657128310e-09 1s 1s 657131430e-09 0s 0s 657131630e-09 1s 1s 657138590e-09 1s 1s 657141670e-09 0s 0s 657141870e-09 1s 1s 657148870e-09 1s 1s 657151910e-09 0s 0s 657152110e-09 1s 1s 657159150e-09 1s 1s 657162150e-09 0s 0s 657162350e-09 1s 1s 657169430e-09 1s 1s 657172390e-09 0s 0s 657172590e-09 1s 1s 657179710e-09 1s 1s 657182630e-09 0s 0s 657182830e-09 1s 1s 657189990e-09 1s 1s 657192870e-09 0s 0s 657193070e-09 1s 1s 657200270e-09 1s 1s 657203110e-09 0s 0s 657203310e-09 1s 1s 657210550e-09 1s 1s 657213350e-09 0s 0s 657213550e-09 1s 1s 657220830e-09 1s 1s 657223590e-09 0s 0s 657223790e-09 1s 1s 657231110e-09 1s 1s 657233830e-09 0s 0s 657234030e-09 1s 1s 657241390e-09 1s 1s 657244070e-09 0s 0s 657244270e-09 1s 1s 657251670e-09 1s 1s 657254310e-09 0s 0s 657254510e-09 1s 1s 657261950e-09 1s 1s 657264550e-09 0s 0s 657264750e-09 1s 1s 657272230e-09 1s 1s 657274790e-09 0s 0s 657274990e-09 1s 1s 657282510e-09 1s 1s 657285030e-09 0s 0s 657285230e-09 1s 1s 657292790e-09 1s 1s 657295270e-09 0s 0s 657295470e-09 1s 1s 657303070e-09 1s 1s 657305510e-09 0s 0s 657305710e-09 1s 1s 657313350e-09 1s 1s 657315750e-09 0s 0s 657315950e-09 1s 1s 657323630e-09 1s 1s 657325990e-09 0s 0s 657326190e-09 1s 1s 657333910e-09 1s 1s 657336230e-09 0s 0s 657336430e-09 1s 1s 657344190e-09 1s 1s 657346470e-09 0s 0s 657346670e-09 1s 1s 657354470e-09 1s 1s 657356710e-09 0s 0s 657356910e-09 1s 1s 657364750e-09 1s 1s 657366950e-09 0s 0s 657367150e-09 1s 1s 657375030e-09 1s 1s 657377190e-09 0s 0s 657377390e-09 1s 1s 657385310e-09 1s 1s 657387430e-09 0s 0s 657387630e-09 1s 1s 657395590e-09 1s 1s 657397670e-09 0s 0s 657397870e-09 1s 1s 657405870e-09 1s 1s 657407910e-09 0s 0s 657408110e-09 1s 1s 657416150e-09 1s 1s 657418150e-09 0s 0s 657418350e-09 1s 1s 657426430e-09 1s 1s 657428390e-09 0s 0s 657428590e-09 1s 1s 657436710e-09 1s 1s 657438630e-09 0s 0s 657438830e-09 1s 1s 657446990e-09 1s 1s 657448870e-09 0s 0s 657449070e-09 1s 1s 657457270e-09 1s 1s 657459110e-09 0s 0s 657459310e-09 1s 1s 657467550e-09 1s 1s 657469350e-09 0s 0s 657469550e-09 1s 1s 657477830e-09 1s 1s 657479590e-09 0s 0s 657479790e-09 1s 1s 657488110e-09 1s 1s 657489830e-09 0s 0s 657490030e-09 1s 1s 657498390e-09 1s 1s 657500070e-09 0s 0s 657500270e-09 1s 1s 657508670e-09 1s 1s 657510310e-09 0s 0s 657510510e-09 1s 1s 657518950e-09 1s 1s 657520550e-09 0s 0s 657520750e-09 1s 1s 657529230e-09 1s 1s 657530790e-09 0s 0s 657530990e-09 1s 1s 657539510e-09 1s 1s 657541030e-09 0s 0s 657541230e-09 1s 1s 657549790e-09 1s 1s 657551270e-09 0s 0s 657551470e-09 1s 1s 657560070e-09 1s 1s 657561510e-09 0s 0s 657561710e-09 1s 1s 657570350e-09 1s 1s 657571750e-09 0s 0s 657571950e-09 1s 1s 657580630e-09 1s 1s 657581990e-09 0s 0s 657582190e-09 1s 1s 657590910e-09 1s 1s 657592230e-09 0s 0s 657592430e-09 1s 1s 657601190e-09 1s 1s 657602470e-09 0s 0s 657602670e-09 1s 1s 657611470e-09 1s 1s 657612710e-09 0s 0s 657612910e-09 1s 1s 657621750e-09 1s 1s 657622950e-09 0s 0s 657623150e-09 1s 1s 657632030e-09 1s 1s 657633190e-09 0s 0s 657633390e-09 1s 1s 657642310e-09 1s 1s 657643430e-09 0s 0s 657643630e-09 1s 1s 657652590e-09 1s 1s 657653670e-09 0s 0s 657653870e-09 1s 1s 657662870e-09 1s 1s 657663910e-09 0s 0s 657664110e-09 1s 1s 657673150e-09 1s 1s 657674150e-09 0s 0s 657674350e-09 1s 1s 657683430e-09 1s 1s 657684390e-09 0s 0s 657684590e-09 1s 1s 657693710e-09 1s 1s 657694630e-09 0s 0s 657694830e-09 1s 1s 657703990e-09 1s 1s 657704870e-09 0s 0s 657705070e-09 1s 1s 657714270e-09 1s 1s 657715110e-09 0s 0s 657715310e-09 1s 1s 657724550e-09 1s 1s 657725350e-09 0s 0s 657725550e-09 1s 1s 657734830e-09 1s 1s 657735590e-09 0s 0s 657735790e-09 1s 1s 657745110e-09 1s 1s 657745830e-09 0s 0s 657746030e-09 1s 1s 657755390e-09 1s 1s 657756070e-09 0s 0s 657756270e-09 1s 1s 657765670e-09 1s 1s 657766310e-09 0s 0s 657766510e-09 1s 1s 657775950e-09 1s 1s 657776550e-09 0s 0s 657776750e-09 1s 1s 657786230e-09 1s 1s 657786790e-09 0s 0s 657786990e-09 1s 1s 657796510e-09 1s 1s 657797030e-09 0s 0s 657797230e-09 1s 1s 657806790e-09 1s 1s 657807270e-09 0s 0s 657807470e-09 1s 1s 657817070e-09 1s 1s 657817510e-09 0s 0s 657817710e-09 1s 1s 657827350e-09 1s 1s 657827750e-09 0s 0s 657827950e-09 1s 1s 657837630e-09 1s 1s 657837990e-09 0s 0s 657838190e-09 1s 1s 657847910e-09 1s 1s 657848230e-09 0s 0s 657848430e-09 1s 1s 657858190e-09 1s 1s 657858470e-09 0s 0s 657858670e-09 1s 1s 657868470e-09 1s 1s 657868710e-09 0s 0s 657868910e-09 1s 1s 657878750e-09 1s 1s 657878950e-09 0s 0s 657879150e-09 1s 1s 657889030e-09 1s 1s 657889190e-09 0s 0s 657889390e-09 1s 1s 657899310e-09 1s 1s 657899430e-09 0s 0s 657899630e-09 1s 1s 657909590e-09 1s 1s 657909670e-09 0s 0s 657909870e-09 1s 1s 657919870e-09 1s 1s 657919910e-09 0s 0s 657920110e-09 1s 1s 657930150e-09 0s 0s 657930350e-09 1s 1s 657940390e-09 0s 0s 657940430e-09 0s 0s 657940590e-09 1s 1s 657950630e-09 0s 0s 657950710e-09 0s 0s 657950830e-09 1s 1s 657960870e-09 0s 0s 657960990e-09 0s 0s 657961070e-09 1s 1s 657971110e-09 0s 0s 657971270e-09 0s 0s 657971310e-09 1s 1s 657981350e-09 0s 0s 657981550e-09 1s 1s 657981590e-09 1s 1s 657991630e-09 0s 0s 657991790e-09 1s 1s 657991870e-09 1s 1s 658001870e-09 0s 0s 658002030e-09 1s 1s 658002150e-09 1s 1s 658012110e-09 0s 0s 658012270e-09 1s 1s 658012430e-09 1s 1s 658022350e-09 0s 0s 658022510e-09 1s 1s 658022710e-09 1s 1s 658032590e-09 0s 0s 658032750e-09 1s 1s 658032990e-09 1s 1s 658042830e-09 0s 0s 658042990e-09 1s 1s 658043270e-09 1s 1s 658053070e-09 0s 0s 658053230e-09 1s 1s 658053550e-09 1s 1s 658063310e-09 0s 0s 658063470e-09 1s 1s 658063830e-09 1s 1s 658073550e-09 0s 0s 658073710e-09 1s 1s 658074110e-09 1s 1s 658083790e-09 0s 0s 658083950e-09 1s 1s 658084390e-09 1s 1s 658094030e-09 0s 0s 658094190e-09 1s 1s 658094670e-09 1s 1s 658104270e-09 0s 0s 658104430e-09 1s 1s 658104950e-09 1s 1s 658114510e-09 0s 0s 658114670e-09 1s 1s 658115230e-09 1s 1s 658124750e-09 0s 0s 658124910e-09 1s 1s 658125510e-09 1s 1s 658134990e-09 0s 0s 658135150e-09 1s 1s 658135790e-09 1s 1s 658145230e-09 0s 0s 658145390e-09 1s 1s 658146070e-09 1s 1s 658155470e-09 0s 0s 658155630e-09 1s 1s 658156350e-09 1s 1s 658165710e-09 0s 0s 658165870e-09 1s 1s 658166630e-09 1s 1s 658175950e-09 0s 0s 658176110e-09 1s 1s 658176910e-09 1s 1s 658186190e-09 0s 0s 658186350e-09 1s 1s 658187190e-09 1s 1s 658196430e-09 0s 0s 658196590e-09 1s 1s 658197470e-09 1s 1s 658206670e-09 0s 0s 658206830e-09 1s 1s 658207750e-09 1s 1s 658216910e-09 0s 0s 658217070e-09 1s 1s 658218030e-09 1s 1s 658227150e-09 0s 0s 658227310e-09 1s 1s 658228310e-09 1s 1s 658237390e-09 0s 0s 658237550e-09 1s 1s 658238590e-09 1s 1s 658247630e-09 0s 0s 658247790e-09 1s 1s 658248870e-09 1s 1s 658257870e-09 0s 0s 658258030e-09 1s 1s 658259150e-09 1s 1s 658268110e-09 0s 0s 658268270e-09 1s 1s 658269430e-09 1s 1s 658278350e-09 0s 0s 658278510e-09 1s 1s 658279710e-09 1s 1s 658288590e-09 0s 0s 658288750e-09 1s 1s 658289990e-09 1s 1s 658298830e-09 0s 0s 658298990e-09 1s 1s 658300270e-09 1s 1s 658309070e-09 0s 0s 658309230e-09 1s 1s 658310550e-09 1s 1s 658319310e-09 0s 0s 658319470e-09 1s 1s 658320830e-09 1s 1s 658329550e-09 0s 0s 658329710e-09 1s 1s 658331110e-09 1s 1s 658339790e-09 0s 0s 658339950e-09 1s 1s 658341390e-09 1s 1s 658350030e-09 0s 0s 658350190e-09 1s 1s 658351670e-09 1s 1s 658360270e-09 0s 0s 658360430e-09 1s 1s 658361950e-09 1s 1s 658370510e-09 0s 0s 658370670e-09 1s 1s 658372230e-09 1s 1s 658380750e-09 0s 0s 658380910e-09 1s 1s 658382510e-09 1s 1s 658390990e-09 0s 0s 658391150e-09 1s 1s 658392790e-09 1s 1s 658401230e-09 0s 0s 658401390e-09 1s 1s 658403070e-09 1s 1s 658411470e-09 0s 0s 658411630e-09 1s 1s 658413350e-09 1s 1s 658421710e-09 0s 0s 658421870e-09 1s 1s 658423630e-09 1s 1s 658431950e-09 0s 0s 658432110e-09 1s 1s 658433910e-09 1s 1s 658442190e-09 0s 0s 658442350e-09 1s 1s 658444190e-09 1s 1s 658452430e-09 0s 0s 658452590e-09 1s 1s 658454470e-09 1s 1s 658462670e-09 0s 0s 658462830e-09 1s 1s 658464750e-09 1s 1s 658472910e-09 0s 0s 658473070e-09 1s 1s 658475030e-09 1s 1s 658483150e-09 0s 0s 658483310e-09 1s 1s 658485310e-09 1s 1s 658493390e-09 0s 0s 658493550e-09 1s 1s 658495590e-09 1s 1s 658503630e-09 0s 0s 658503790e-09 1s 1s 658505870e-09 1s 1s 658513870e-09 0s 0s 658514030e-09 1s 1s 658516150e-09 1s 1s 658524110e-09 0s 0s 658524270e-09 1s 1s 658526430e-09 1s 1s 658534350e-09 0s 0s 658534510e-09 1s 1s 658536710e-09 1s 1s 658544590e-09 0s 0s 658544750e-09 1s 1s 658546990e-09 1s 1s 658554830e-09 0s 0s 658554990e-09 1s 1s 658557270e-09 1s 1s 658565070e-09 0s 0s 658565230e-09 1s 1s 658567550e-09 1s 1s 658575310e-09 0s 0s 658575470e-09 1s 1s 658577830e-09 1s 1s 658585550e-09 0s 0s 658585710e-09 1s 1s 658588110e-09 1s 1s 658595790e-09 0s 0s 658595950e-09 1s 1s 658598390e-09 1s 1s 658606030e-09 0s 0s 658606190e-09 1s 1s 658608670e-09 1s 1s 658616270e-09 0s 0s 658616430e-09 1s 1s 658618950e-09 1s 1s 658626510e-09 0s 0s 658626670e-09 1s 1s 658629230e-09 1s 1s 658636750e-09 0s 0s 658636910e-09 1s 1s 658639510e-09 1s 1s 658646990e-09 0s 0s 658647150e-09 1s 1s 658649790e-09 1s 1s 658657230e-09 0s 0s 658657390e-09 1s 1s 658660070e-09 1s 1s 658667470e-09 0s 0s 658667630e-09 1s 1s 658670350e-09 1s 1s 658677710e-09 0s 0s 658677870e-09 1s 1s 658680630e-09 1s 1s 658687950e-09 0s 0s 658688110e-09 1s 1s 658690910e-09 1s 1s 658698190e-09 0s 0s 658698350e-09 1s 1s 658701190e-09 1s 1s 658708430e-09 0s 0s 658708590e-09 1s 1s 658711470e-09 1s 1s 658718670e-09 0s 0s 658718830e-09 1s 1s 658721750e-09 1s 1s 658728910e-09 0s 0s 658729070e-09 1s 1s 658732030e-09 1s 1s 658739150e-09 0s 0s 658739310e-09 1s 1s 658742310e-09 1s 1s 658749390e-09 0s 0s 658749550e-09 1s 1s 658752590e-09 1s 1s 658759630e-09 0s 0s 658759790e-09 1s 1s 658762870e-09 1s 1s 658769870e-09 0s 0s 658770030e-09 1s 1s 658773150e-09 1s 1s 658780110e-09 0s 0s 658780270e-09 1s 1s 658783430e-09 1s 1s 658790350e-09 0s 0s 658790510e-09 1s 1s 658793710e-09 1s 1s 658800590e-09 0s 0s 658800750e-09 1s 1s 658803990e-09 1s 1s 658810830e-09 0s 0s 658810990e-09 1s 1s 658814270e-09 1s 1s 658821070e-09 0s 0s 658821230e-09 1s 1s 658824550e-09 1s 1s 658831310e-09 0s 0s 658831470e-09 1s 1s 658834830e-09 1s 1s 658841550e-09 0s 0s 658841710e-09 1s 1s 658845110e-09 1s 1s 658851790e-09 0s 0s 658851950e-09 1s 1s 658855390e-09 1s 1s 658862030e-09 0s 0s 658862190e-09 1s 1s 658865670e-09 1s 1s 658872270e-09 0s 0s 658872430e-09 1s 1s 658875950e-09 1s 1s 658882510e-09 0s 0s 658882670e-09 1s 1s 658886230e-09 1s 1s 658892750e-09 0s 0s 658892910e-09 1s 1s 658896510e-09 1s 1s 658902990e-09 0s 0s 658903150e-09 1s 1s 658906790e-09 1s 1s 658913230e-09 0s 0s 658913390e-09 1s 1s 658917070e-09 1s 1s 658923470e-09 0s 0s 658923630e-09 1s 1s 658927350e-09 1s 1s 658933710e-09 0s 0s 658933870e-09 1s 1s 658937630e-09 1s 1s 658943950e-09 0s 0s 658944110e-09 1s 1s 658947910e-09 1s 1s 658954190e-09 0s 0s 658954350e-09 1s 1s 658958190e-09 1s 1s 658964430e-09 0s 0s 658964590e-09 1s 1s 658968470e-09 1s 1s 658974670e-09 0s 0s 658974830e-09 1s 1s 658978750e-09 1s 1s 658984910e-09 0s 0s 658985070e-09 1s 1s 658989030e-09 1s 1s 658995150e-09 0s 0s 658995310e-09 1s 1s 658999310e-09 1s 1s 659005390e-09 0s 0s 659005550e-09 1s 1s 659009590e-09 1s 1s 659015630e-09 0s 0s 659015790e-09 1s 1s 659019870e-09 1s 1s 659025870e-09 0s 0s 659026030e-09 1s 1s 659030150e-09 1s 1s 659036110e-09 0s 0s 659036270e-09 1s 1s 659040430e-09 1s 1s 659046350e-09 0s 0s 659046510e-09 1s 1s 659050710e-09 1s 1s 659056590e-09 0s 0s 659056750e-09 1s 1s 659060990e-09 1s 1s 659066830e-09 0s 0s 659066990e-09 1s 1s 659071270e-09 1s 1s 659077070e-09 0s 0s 659077230e-09 1s 1s 659081550e-09 1s 1s 659087310e-09 0s 0s 659087470e-09 1s 1s 659091830e-09 1s 1s 659097550e-09 0s 0s 659097710e-09 1s 1s 659102110e-09 1s 1s 659107790e-09 0s 0s 659107950e-09 1s 1s 659112390e-09 1s 1s 659118030e-09 0s 0s 659118190e-09 1s 1s 659122670e-09 1s 1s 659128270e-09 0s 0s 659128430e-09 1s 1s 659132950e-09 1s 1s 659138510e-09 0s 0s 659138670e-09 1s 1s 659143230e-09 1s 1s 659148750e-09 0s 0s 659148910e-09 1s 1s 659153510e-09 1s 1s 659158990e-09 0s 0s 659159150e-09 1s 1s 659163790e-09 1s 1s 659169230e-09 0s 0s 659169390e-09 1s 1s 659174070e-09 1s 1s 659179470e-09 0s 0s 659179630e-09 1s 1s 659184350e-09 1s 1s 659189710e-09 0s 0s 659189870e-09 1s 1s 659194630e-09 1s 1s 659199950e-09 0s 0s 659200110e-09 1s 1s 659204910e-09 1s 1s 659210190e-09 0s 0s 659210350e-09 1s 1s 659215190e-09 1s 1s 659220430e-09 0s 0s 659220590e-09 1s 1s 659225470e-09 1s 1s 659230670e-09 0s 0s 659230830e-09 1s 1s 659235750e-09 1s 1s 659240910e-09 0s 0s 659241070e-09 1s 1s 659246030e-09 1s 1s 659251150e-09 0s 0s 659251310e-09 1s 1s 659256310e-09 1s 1s 659261390e-09 0s 0s 659261550e-09 1s 1s 659266590e-09 1s 1s 659271630e-09 0s 0s 659271790e-09 1s 1s 659276870e-09 1s 1s 659281870e-09 0s 0s 659282030e-09 1s 1s 659287150e-09 1s 1s 659292110e-09 0s 0s 659292270e-09 1s 1s 659297430e-09 1s 1s 659302350e-09 0s 0s 659302510e-09 1s 1s 659307710e-09 1s 1s 659312590e-09 0s 0s 659312750e-09 1s 1s 659317990e-09 1s 1s 659322830e-09 0s 0s 659322990e-09 1s 1s 659328270e-09 1s 1s 659333070e-09 0s 0s 659333230e-09 1s 1s 659338550e-09 1s 1s 659343310e-09 0s 0s 659343470e-09 1s 1s 659348830e-09 1s 1s 659353550e-09 0s 0s 659353710e-09 1s 1s 659359110e-09 1s 1s 659363790e-09 0s 0s 659363950e-09 1s 1s 659369390e-09 1s 1s 659374030e-09 0s 0s 659374190e-09 1s 1s 659379670e-09 1s 1s 659384270e-09 0s 0s 659384430e-09 1s 1s 659389950e-09 1s 1s 659394510e-09 0s 0s 659394670e-09 1s 1s 659400230e-09 1s 1s 659404750e-09 0s 0s 659404910e-09 1s 1s 659410510e-09 1s 1s 659414990e-09 0s 0s 659415150e-09 1s 1s 659420790e-09 1s 1s 659425230e-09 0s 0s 659425390e-09 1s 1s 659431070e-09 1s 1s 659435470e-09 0s 0s 659435630e-09 1s 1s 659441350e-09 1s 1s 659445710e-09 0s 0s 659445870e-09 1s 1s 659451630e-09 1s 1s 659455950e-09 0s 0s 659456110e-09 1s 1s 659461910e-09 1s 1s 659466190e-09 0s 0s 659466350e-09 1s 1s 659472190e-09 1s 1s 659476430e-09 0s 0s 659476590e-09 1s 1s 659482470e-09 1s 1s 659486670e-09 0s 0s 659486830e-09 1s 1s 659492750e-09 1s 1s 659496910e-09 0s 0s 659497070e-09 1s 1s 659503030e-09 1s 1s 659507150e-09 0s 0s 659507310e-09 1s 1s 659513310e-09 1s 1s 659517390e-09 0s 0s 659517550e-09 1s 1s 659523590e-09 1s 1s 659527630e-09 0s 0s 659527790e-09 1s 1s 659533870e-09 1s 1s 659537870e-09 0s 0s 659538030e-09 1s 1s 659544150e-09 1s 1s 659548110e-09 0s 0s 659548270e-09 1s 1s 659554430e-09 1s 1s 659558350e-09 0s 0s 659558510e-09 1s 1s 659564710e-09 1s 1s 659568590e-09 0s 0s 659568750e-09 1s 1s 659574990e-09 1s 1s 659578830e-09 0s 0s 659578990e-09 1s 1s 659585270e-09 1s 1s 659589070e-09 0s 0s 659589230e-09 1s 1s 659595550e-09 1s 1s 659599310e-09 0s 0s 659599470e-09 1s 1s 659605830e-09 1s 1s 659609550e-09 0s 0s 659609710e-09 1s 1s 659616110e-09 1s 1s 659619790e-09 0s 0s 659619950e-09 1s 1s 659626390e-09 1s 1s 659630030e-09 0s 0s 659630190e-09 1s 1s 659636670e-09 1s 1s 659640270e-09 0s 0s 659640430e-09 1s 1s 659646950e-09 1s 1s 659650510e-09 0s 0s 659650670e-09 1s 1s 659657230e-09 1s 1s 659660750e-09 0s 0s 659660910e-09 1s 1s 659667510e-09 1s 1s 659670990e-09 0s 0s 659671150e-09 1s 1s 659677790e-09 1s 1s 659681230e-09 0s 0s 659681390e-09 1s 1s 659688070e-09 1s 1s 659691470e-09 0s 0s 659691630e-09 1s 1s 659698350e-09 1s 1s 659701710e-09 0s 0s 659701870e-09 1s 1s 659708630e-09 1s 1s 659711950e-09 0s 0s 659712110e-09 1s 1s 659718910e-09 1s 1s 659722190e-09 0s 0s 659722350e-09 1s 1s 659729190e-09 1s 1s 659732430e-09 0s 0s 659732590e-09 1s 1s 659739470e-09 1s 1s 659742670e-09 0s 0s 659742830e-09 1s 1s 659749750e-09 1s 1s 659752910e-09 0s 0s 659753070e-09 1s 1s 659760030e-09 1s 1s 659763150e-09 0s 0s 659763310e-09 1s 1s 659770310e-09 1s 1s 659773390e-09 0s 0s 659773550e-09 1s 1s 659780590e-09 1s 1s 659783630e-09 0s 0s 659783790e-09 1s 1s 659790870e-09 1s 1s 659793870e-09 0s 0s 659794030e-09 1s 1s 659801150e-09 1s 1s 659804110e-09 0s 0s 659804270e-09 1s 1s 659811430e-09 1s 1s 659814350e-09 0s 0s 659814510e-09 1s 1s 659821710e-09 1s 1s 659824590e-09 0s 0s 659824750e-09 1s 1s 659831990e-09 1s 1s 659834830e-09 0s 0s 659834990e-09 1s 1s 659842270e-09 1s 1s 659845070e-09 0s 0s 659845230e-09 1s 1s 659852550e-09 1s 1s 659855310e-09 0s 0s 659855470e-09 1s 1s 659862830e-09 1s 1s 659865550e-09 0s 0s 659865710e-09 1s 1s 659873110e-09 1s 1s 659875790e-09 0s 0s 659875950e-09 1s 1s 659883390e-09 1s 1s 659886030e-09 0s 0s 659886190e-09 1s 1s 659893670e-09 1s 1s 659896270e-09 0s 0s 659896430e-09 1s 1s 659903950e-09 1s 1s 659906510e-09 0s 0s 659906670e-09 1s 1s 659914230e-09 1s 1s 659916750e-09 0s 0s 659916910e-09 1s 1s 659924510e-09 1s 1s 659926990e-09 0s 0s 659927150e-09 1s 1s 659934790e-09 1s 1s 659937230e-09 0s 0s 659937390e-09 1s 1s 659945070e-09 1s 1s 659947470e-09 0s 0s 659947630e-09 1s 1s 659955350e-09 1s 1s 659957710e-09 0s 0s 659957870e-09 1s 1s 659965630e-09 1s 1s 659967950e-09 0s 0s 659968110e-09 1s 1s 659975910e-09 1s 1s 659978190e-09 0s 0s 659978350e-09 1s 1s 659986190e-09 1s 1s 659988430e-09 0s 0s 659988590e-09 1s 1s 659996470e-09 1s 1s 659998670e-09 0s 0s 659998830e-09 1s 1s 660006750e-09 1s 1s 660008910e-09 0s 0s 660009070e-09 1s 1s 660017030e-09 1s 1s 660019150e-09 0s 0s 660019310e-09 1s 1s 660027310e-09 1s 1s 660029390e-09 0s 0s 660029550e-09 1s 1s 660037590e-09 1s 1s 660039630e-09 0s 0s 660039790e-09 1s 1s 660047870e-09 1s 1s 660049870e-09 0s 0s 660050030e-09 1s 1s 660058150e-09 1s 1s 660060110e-09 0s 0s 660060270e-09 1s 1s 660068430e-09 1s 1s 660070350e-09 0s 0s 660070510e-09 1s 1s 660078710e-09 1s 1s 660080590e-09 0s 0s 660080750e-09 1s 1s 660088990e-09 1s 1s 660090830e-09 0s 0s 660090990e-09 1s 1s 660099270e-09 1s 1s 660101070e-09 0s 0s 660101230e-09 1s 1s 660109550e-09 1s 1s 660111310e-09 0s 0s 660111470e-09 1s 1s 660119830e-09 1s 1s 660121550e-09 0s 0s 660121710e-09 1s 1s 660130110e-09 1s 1s 660131790e-09 0s 0s 660131950e-09 1s 1s 660140390e-09 1s 1s 660142030e-09 0s 0s 660142190e-09 1s 1s 660150670e-09 1s 1s 660152270e-09 0s 0s 660152430e-09 1s 1s 660160950e-09 1s 1s 660162510e-09 0s 0s 660162670e-09 1s 1s 660171230e-09 1s 1s 660172750e-09 0s 0s 660172910e-09 1s 1s 660181510e-09 1s 1s 660182990e-09 0s 0s 660183150e-09 1s 1s 660191790e-09 1s 1s 660193230e-09 0s 0s 660193390e-09 1s 1s 660202070e-09 1s 1s 660203470e-09 0s 0s 660203630e-09 1s 1s 660212350e-09 1s 1s 660213710e-09 0s 0s 660213870e-09 1s 1s 660222630e-09 1s 1s 660223950e-09 0s 0s 660224110e-09 1s 1s 660232910e-09 1s 1s 660234190e-09 0s 0s 660234350e-09 1s 1s 660243190e-09 1s 1s 660244430e-09 0s 0s 660244590e-09 1s 1s 660253470e-09 1s 1s 660254670e-09 0s 0s 660254830e-09 1s 1s 660263750e-09 1s 1s 660264910e-09 0s 0s 660265070e-09 1s 1s 660274030e-09 1s 1s 660275150e-09 0s 0s 660275310e-09 1s 1s 660284310e-09 1s 1s 660285390e-09 0s 0s 660285550e-09 1s 1s 660294590e-09 1s 1s 660295630e-09 0s 0s 660295790e-09 1s 1s 660304870e-09 1s 1s 660305870e-09 0s 0s 660306030e-09 1s 1s 660315150e-09 1s 1s 660316110e-09 0s 0s 660316270e-09 1s 1s 660325430e-09 1s 1s 660326350e-09 0s 0s 660326510e-09 1s 1s 660335710e-09 1s 1s 660336590e-09 0s 0s 660336750e-09 1s 1s 660345990e-09 1s 1s 660346830e-09 0s 0s 660346990e-09 1s 1s 660356270e-09 1s 1s 660357070e-09 0s 0s 660357230e-09 1s 1s 660366550e-09 1s 1s 660367310e-09 0s 0s 660367470e-09 1s 1s 660376830e-09 1s 1s 660377550e-09 0s 0s 660377710e-09 1s 1s 660387110e-09 1s 1s 660387790e-09 0s 0s 660387950e-09 1s 1s 660397390e-09 1s 1s 660398030e-09 0s 0s 660398190e-09 1s 1s 660407670e-09 1s 1s 660408270e-09 0s 0s 660408430e-09 1s 1s 660417950e-09 1s 1s 660418510e-09 0s 0s 660418670e-09 1s 1s 660428230e-09 1s 1s 660428750e-09 0s 0s 660428910e-09 1s 1s 660438510e-09 1s 1s 660438990e-09 0s 0s 660439150e-09 1s 1s 660448790e-09 1s 1s 660449230e-09 0s 0s 660449390e-09 1s 1s 660459070e-09 1s 1s 660459470e-09 0s 0s 660459630e-09 1s 1s 660469350e-09 1s 1s 660469710e-09 0s 0s 660469870e-09 1s 1s 660479630e-09 1s 1s 660479950e-09 0s 0s 660480110e-09 1s 1s 660489910e-09 1s 1s 660490190e-09 0s 0s 660490350e-09 1s 1s 660500190e-09 1s 1s 660500430e-09 0s 0s 660500590e-09 1s 1s 660510470e-09 1s 1s 660510670e-09 0s 0s 660510830e-09 1s 1s 660520750e-09 1s 1s 660520910e-09 0s 0s 660521070e-09 1s 1s 660531030e-09 1s 1s 660531150e-09 0s 0s 660531310e-09 1s 1s 660541310e-09 1s 1s 660541390e-09 0s 0s 660541550e-09 1s 1s 660551590e-09 1s 1s 660551630e-09 0s 0s 660551790e-09 1s 1s 660561870e-09 0s 0s 660562030e-09 1s 1s 660572110e-09 0s 0s 660572150e-09 0s 0s 660572270e-09 1s 1s 660582350e-09 0s 0s 660582430e-09 0s 0s 660582510e-09 1s 1s 660592590e-09 0s 0s 660592710e-09 0s 0s 660592750e-09 1s 1s 660602830e-09 0s 0s 660602990e-09 1s 1s 660603030e-09 1s 1s 660613110e-09 0s 0s 660613230e-09 1s 1s 660613310e-09 1s 1s 660623350e-09 0s 0s 660623470e-09 1s 1s 660623590e-09 1s 1s 660633590e-09 0s 0s 660633710e-09 1s 1s 660633870e-09 1s 1s 660643830e-09 0s 0s 660643950e-09 1s 1s 660644150e-09 1s 1s 660654070e-09 0s 0s 660654190e-09 1s 1s 660654430e-09 1s 1s 660664310e-09 0s 0s 660664430e-09 1s 1s 660664710e-09 1s 1s 660674550e-09 0s 0s 660674670e-09 1s 1s 660674990e-09 1s 1s 660684790e-09 0s 0s 660684910e-09 1s 1s 660685270e-09 1s 1s 660695030e-09 0s 0s 660695150e-09 1s 1s 660695550e-09 1s 1s 660705270e-09 0s 0s 660705390e-09 1s 1s 660705830e-09 1s 1s 660715510e-09 0s 0s 660715630e-09 1s 1s 660716110e-09 1s 1s 660725750e-09 0s 0s 660725870e-09 1s 1s 660726390e-09 1s 1s 660735990e-09 0s 0s 660736110e-09 1s 1s 660736670e-09 1s 1s 660746230e-09 0s 0s 660746350e-09 1s 1s 660746950e-09 1s 1s 660756470e-09 0s 0s 660756590e-09 1s 1s 660757230e-09 1s 1s 660766710e-09 0s 0s 660766830e-09 1s 1s 660767510e-09 1s 1s 660776950e-09 0s 0s 660777070e-09 1s 1s 660777790e-09 1s 1s 660787190e-09 0s 0s 660787310e-09 1s 1s 660788070e-09 1s 1s 660797430e-09 0s 0s 660797550e-09 1s 1s 660798350e-09 1s 1s 660807670e-09 0s 0s 660807790e-09 1s 1s 660808630e-09 1s 1s 660817910e-09 0s 0s 660818030e-09 1s 1s 660818910e-09 1s 1s 660828150e-09 0s 0s 660828270e-09 1s 1s 660829190e-09 1s 1s 660838390e-09 0s 0s 660838510e-09 1s 1s 660839470e-09 1s 1s 660848630e-09 0s 0s 660848750e-09 1s 1s 660849750e-09 1s 1s 660858870e-09 0s 0s 660858990e-09 1s 1s 660860030e-09 1s 1s 660869110e-09 0s 0s 660869230e-09 1s 1s 660870310e-09 1s 1s 660879350e-09 0s 0s 660879470e-09 1s 1s 660880590e-09 1s 1s 660889590e-09 0s 0s 660889710e-09 1s 1s 660890870e-09 1s 1s 660899830e-09 0s 0s 660899950e-09 1s 1s 660901150e-09 1s 1s 660910070e-09 0s 0s 660910190e-09 1s 1s 660911430e-09 1s 1s 660920310e-09 0s 0s 660920430e-09 1s 1s 660921710e-09 1s 1s 660930550e-09 0s 0s 660930670e-09 1s 1s 660931990e-09 1s 1s 660940790e-09 0s 0s 660940910e-09 1s 1s 660942270e-09 1s 1s 660951030e-09 0s 0s 660951150e-09 1s 1s 660952550e-09 1s 1s 660961270e-09 0s 0s 660961390e-09 1s 1s 660962830e-09 1s 1s 660971510e-09 0s 0s 660971630e-09 1s 1s 660973110e-09 1s 1s 660981750e-09 0s 0s 660981870e-09 1s 1s 660983390e-09 1s 1s 660991990e-09 0s 0s 660992110e-09 1s 1s 660993670e-09 1s 1s 661002230e-09 0s 0s 661002350e-09 1s 1s 661003950e-09 1s 1s 661012470e-09 0s 0s 661012590e-09 1s 1s 661014230e-09 1s 1s 661022710e-09 0s 0s 661022830e-09 1s 1s 661024510e-09 1s 1s 661032950e-09 0s 0s 661033070e-09 1s 1s 661034790e-09 1s 1s 661043190e-09 0s 0s 661043310e-09 1s 1s 661045070e-09 1s 1s 661053430e-09 0s 0s 661053550e-09 1s 1s 661055350e-09 1s 1s 661063670e-09 0s 0s 661063790e-09 1s 1s 661065630e-09 1s 1s 661073910e-09 0s 0s 661074030e-09 1s 1s 661075910e-09 1s 1s 661084150e-09 0s 0s 661084270e-09 1s 1s 661086190e-09 1s 1s 661094390e-09 0s 0s 661094510e-09 1s 1s 661096470e-09 1s 1s 661104630e-09 0s 0s 661104750e-09 1s 1s 661106750e-09 1s 1s 661114870e-09 0s 0s 661114990e-09 1s 1s 661117030e-09 1s 1s 661125110e-09 0s 0s 661125230e-09 1s 1s 661127310e-09 1s 1s 661135350e-09 0s 0s 661135470e-09 1s 1s 661137590e-09 1s 1s 661145590e-09 0s 0s 661145710e-09 1s 1s 661147870e-09 1s 1s 661155830e-09 0s 0s 661155950e-09 1s 1s 661158150e-09 1s 1s 661166070e-09 0s 0s 661166190e-09 1s 1s 661168430e-09 1s 1s 661176310e-09 0s 0s 661176430e-09 1s 1s 661178710e-09 1s 1s 661186550e-09 0s 0s 661186670e-09 1s 1s 661188990e-09 1s 1s 661196790e-09 0s 0s 661196910e-09 1s 1s 661199270e-09 1s 1s 661207030e-09 0s 0s 661207150e-09 1s 1s 661209550e-09 1s 1s 661217270e-09 0s 0s 661217390e-09 1s 1s 661219830e-09 1s 1s 661227510e-09 0s 0s 661227630e-09 1s 1s 661230110e-09 1s 1s 661237750e-09 0s 0s 661237870e-09 1s 1s 661240390e-09 1s 1s 661247990e-09 0s 0s 661248110e-09 1s 1s 661250670e-09 1s 1s 661258230e-09 0s 0s 661258350e-09 1s 1s 661260950e-09 1s 1s 661268470e-09 0s 0s 661268590e-09 1s 1s 661271230e-09 1s 1s 661278710e-09 0s 0s 661278830e-09 1s 1s 661281510e-09 1s 1s 661288950e-09 0s 0s 661289070e-09 1s 1s 661291790e-09 1s 1s 661299190e-09 0s 0s 661299310e-09 1s 1s 661302070e-09 1s 1s 661309430e-09 0s 0s 661309550e-09 1s 1s 661312350e-09 1s 1s 661319670e-09 0s 0s 661319790e-09 1s 1s 661322630e-09 1s 1s 661329910e-09 0s 0s 661330030e-09 1s 1s 661332910e-09 1s 1s 661340150e-09 0s 0s 661340270e-09 1s 1s 661343190e-09 1s 1s 661350390e-09 0s 0s 661350510e-09 1s 1s 661353470e-09 1s 1s 661360630e-09 0s 0s 661360750e-09 1s 1s 661363750e-09 1s 1s 661370870e-09 0s 0s 661370990e-09 1s 1s 661374030e-09 1s 1s 661381110e-09 0s 0s 661381230e-09 1s 1s 661384310e-09 1s 1s 661391350e-09 0s 0s 661391470e-09 1s 1s 661394590e-09 1s 1s 661401590e-09 0s 0s 661401710e-09 1s 1s 661404870e-09 1s 1s 661411830e-09 0s 0s 661411950e-09 1s 1s 661415150e-09 1s 1s 661422070e-09 0s 0s 661422190e-09 1s 1s 661425430e-09 1s 1s 661432310e-09 0s 0s 661432430e-09 1s 1s 661435710e-09 1s 1s 661442550e-09 0s 0s 661442670e-09 1s 1s 661445990e-09 1s 1s 661452790e-09 0s 0s 661452910e-09 1s 1s 661456270e-09 1s 1s 661463030e-09 0s 0s 661463150e-09 1s 1s 661466550e-09 1s 1s 661473270e-09 0s 0s 661473390e-09 1s 1s 661476830e-09 1s 1s 661483510e-09 0s 0s 661483630e-09 1s 1s 661487110e-09 1s 1s 661493750e-09 0s 0s 661493870e-09 1s 1s 661497390e-09 1s 1s 661503990e-09 0s 0s 661504110e-09 1s 1s 661507670e-09 1s 1s 661514230e-09 0s 0s 661514350e-09 1s 1s 661517950e-09 1s 1s 661524470e-09 0s 0s 661524590e-09 1s 1s 661528230e-09 1s 1s 661534710e-09 0s 0s 661534830e-09 1s 1s 661538510e-09 1s 1s 661544950e-09 0s 0s 661545070e-09 1s 1s 661548790e-09 1s 1s 661555190e-09 0s 0s 661555310e-09 1s 1s 661559070e-09 1s 1s 661565430e-09 0s 0s 661565550e-09 1s 1s 661569350e-09 1s 1s 661575670e-09 0s 0s 661575790e-09 1s 1s 661579630e-09 1s 1s 661585910e-09 0s 0s 661586030e-09 1s 1s 661589910e-09 1s 1s 661596150e-09 0s 0s 661596270e-09 1s 1s 661600190e-09 1s 1s 661606390e-09 0s 0s 661606510e-09 1s 1s 661610470e-09 1s 1s 661616630e-09 0s 0s 661616750e-09 1s 1s 661620750e-09 1s 1s 661626870e-09 0s 0s 661626990e-09 1s 1s 661631030e-09 1s 1s 661637110e-09 0s 0s 661637230e-09 1s 1s 661641310e-09 1s 1s 661647350e-09 0s 0s 661647470e-09 1s 1s 661651590e-09 1s 1s 661657590e-09 0s 0s 661657710e-09 1s 1s 661661870e-09 1s 1s 661667830e-09 0s 0s 661667950e-09 1s 1s 661672150e-09 1s 1s 661678070e-09 0s 0s 661678190e-09 1s 1s 661682430e-09 1s 1s 661688310e-09 0s 0s 661688430e-09 1s 1s 661692710e-09 1s 1s 661698550e-09 0s 0s 661698670e-09 1s 1s 661702990e-09 1s 1s 661708790e-09 0s 0s 661708910e-09 1s 1s 661713270e-09 1s 1s 661719030e-09 0s 0s 661719150e-09 1s 1s 661723550e-09 1s 1s 661729270e-09 0s 0s 661729390e-09 1s 1s 661733830e-09 1s 1s 661739510e-09 0s 0s 661739630e-09 1s 1s 661744110e-09 1s 1s 661749750e-09 0s 0s 661749870e-09 1s 1s 661754390e-09 1s 1s 661759990e-09 0s 0s 661760110e-09 1s 1s 661764670e-09 1s 1s 661770230e-09 0s 0s 661770350e-09 1s 1s 661774950e-09 1s 1s 661780470e-09 0s 0s 661780590e-09 1s 1s 661785230e-09 1s 1s 661790710e-09 0s 0s 661790830e-09 1s 1s 661795510e-09 1s 1s 661800950e-09 0s 0s 661801070e-09 1s 1s 661805790e-09 1s 1s 661811190e-09 0s 0s 661811310e-09 1s 1s 661816070e-09 1s 1s 661821430e-09 0s 0s 661821550e-09 1s 1s 661826350e-09 1s 1s 661831670e-09 0s 0s 661831790e-09 1s 1s 661836630e-09 1s 1s 661841910e-09 0s 0s 661842030e-09 1s 1s 661846910e-09 1s 1s 661852150e-09 0s 0s 661852270e-09 1s 1s 661857190e-09 1s 1s 661862390e-09 0s 0s 661862510e-09 1s 1s 661867470e-09 1s 1s 661872630e-09 0s 0s 661872750e-09 1s 1s 661877750e-09 1s 1s 661882870e-09 0s 0s 661882990e-09 1s 1s 661888030e-09 1s 1s 661893110e-09 0s 0s 661893230e-09 1s 1s 661898310e-09 1s 1s 661903350e-09 0s 0s 661903470e-09 1s 1s 661908590e-09 1s 1s 661913590e-09 0s 0s 661913710e-09 1s 1s 661918870e-09 1s 1s 661923830e-09 0s 0s 661923950e-09 1s 1s 661929150e-09 1s 1s 661934070e-09 0s 0s 661934190e-09 1s 1s 661939430e-09 1s 1s 661944310e-09 0s 0s 661944430e-09 1s 1s 661949710e-09 1s 1s 661954550e-09 0s 0s 661954670e-09 1s 1s 661959990e-09 1s 1s 661964790e-09 0s 0s 661964910e-09 1s 1s 661970270e-09 1s 1s 661975030e-09 0s 0s 661975150e-09 1s 1s 661980550e-09 1s 1s 661985270e-09 0s 0s 661985390e-09 1s 1s 661990830e-09 1s 1s 661995510e-09 0s 0s 661995630e-09 1s 1s 662001110e-09 1s 1s 662005750e-09 0s 0s 662005870e-09 1s 1s 662011390e-09 1s 1s 662015990e-09 0s 0s 662016110e-09 1s 1s 662021670e-09 1s 1s 662026230e-09 0s 0s 662026350e-09 1s 1s 662031950e-09 1s 1s 662036470e-09 0s 0s 662036590e-09 1s 1s 662042230e-09 1s 1s 662046710e-09 0s 0s 662046830e-09 1s 1s 662052510e-09 1s 1s 662056950e-09 0s 0s 662057070e-09 1s 1s 662062790e-09 1s 1s 662067190e-09 0s 0s 662067310e-09 1s 1s 662073070e-09 1s 1s 662077430e-09 0s 0s 662077550e-09 1s 1s 662083350e-09 1s 1s 662087670e-09 0s 0s 662087790e-09 1s 1s 662093630e-09 1s 1s 662097910e-09 0s 0s 662098030e-09 1s 1s 662103910e-09 1s 1s 662108150e-09 0s 0s 662108270e-09 1s 1s 662114190e-09 1s 1s 662118390e-09 0s 0s 662118510e-09 1s 1s 662124470e-09 1s 1s 662128630e-09 0s 0s 662128750e-09 1s 1s 662134750e-09 1s 1s 662138870e-09 0s 0s 662138990e-09 1s 1s 662145030e-09 1s 1s 662149110e-09 0s 0s 662149230e-09 1s 1s 662155310e-09 1s 1s 662159350e-09 0s 0s 662159470e-09 1s 1s 662165590e-09 1s 1s 662169590e-09 0s 0s 662169710e-09 1s 1s 662175870e-09 1s 1s 662179830e-09 0s 0s 662179950e-09 1s 1s 662186150e-09 1s 1s 662190070e-09 0s 0s 662190190e-09 1s 1s 662196430e-09 1s 1s 662200310e-09 0s 0s 662200430e-09 1s 1s 662206710e-09 1s 1s 662210550e-09 0s 0s 662210670e-09 1s 1s 662216990e-09 1s 1s 662220790e-09 0s 0s 662220910e-09 1s 1s 662227270e-09 1s 1s 662231030e-09 0s 0s 662231150e-09 1s 1s 662237550e-09 1s 1s 662241270e-09 0s 0s 662241390e-09 1s 1s 662247830e-09 1s 1s 662251510e-09 0s 0s 662251630e-09 1s 1s 662258110e-09 1s 1s 662261750e-09 0s 0s 662261870e-09 1s 1s 662268390e-09 1s 1s 662271990e-09 0s 0s 662272110e-09 1s 1s 662278670e-09 1s 1s 662282230e-09 0s 0s 662282350e-09 1s 1s 662288950e-09 1s 1s 662292470e-09 0s 0s 662292590e-09 1s 1s 662299230e-09 1s 1s 662302710e-09 0s 0s 662302830e-09 1s 1s 662309510e-09 1s 1s 662312950e-09 0s 0s 662313070e-09 1s 1s 662319790e-09 1s 1s 662323190e-09 0s 0s 662323310e-09 1s 1s 662330070e-09 1s 1s 662333430e-09 0s 0s 662333550e-09 1s 1s 662340350e-09 1s 1s 662343670e-09 0s 0s 662343790e-09 1s 1s 662350630e-09 1s 1s 662353910e-09 0s 0s 662354030e-09 1s 1s 662360910e-09 1s 1s 662364150e-09 0s 0s 662364270e-09 1s 1s 662371190e-09 1s 1s 662374390e-09 0s 0s 662374510e-09 1s 1s 662381470e-09 1s 1s 662384630e-09 0s 0s 662384750e-09 1s 1s 662391750e-09 1s 1s 662394870e-09 0s 0s 662394990e-09 1s 1s 662402030e-09 1s 1s 662405110e-09 0s 0s 662405230e-09 1s 1s 662412310e-09 1s 1s 662415350e-09 0s 0s 662415470e-09 1s 1s 662422590e-09 1s 1s 662425590e-09 0s 0s 662425710e-09 1s 1s 662432870e-09 1s 1s 662435830e-09 0s 0s 662435950e-09 1s 1s 662443150e-09 1s 1s 662446070e-09 0s 0s 662446190e-09 1s 1s 662453430e-09 1s 1s 662456310e-09 0s 0s 662456430e-09 1s 1s 662463710e-09 1s 1s 662466550e-09 0s 0s 662466670e-09 1s 1s 662473990e-09 1s 1s 662476790e-09 0s 0s 662476910e-09 1s 1s 662484270e-09 1s 1s 662487030e-09 0s 0s 662487150e-09 1s 1s 662494550e-09 1s 1s 662497270e-09 0s 0s 662497390e-09 1s 1s 662504830e-09 1s 1s 662507510e-09 0s 0s 662507630e-09 1s 1s 662515110e-09 1s 1s 662517750e-09 0s 0s 662517870e-09 1s 1s 662525390e-09 1s 1s 662527990e-09 0s 0s 662528110e-09 1s 1s 662535670e-09 1s 1s 662538230e-09 0s 0s 662538350e-09 1s 1s 662545950e-09 1s 1s 662548470e-09 0s 0s 662548590e-09 1s 1s 662556230e-09 1s 1s 662558710e-09 0s 0s 662558830e-09 1s 1s 662566510e-09 1s 1s 662568950e-09 0s 0s 662569070e-09 1s 1s 662576790e-09 1s 1s 662579190e-09 0s 0s 662579310e-09 1s 1s 662587070e-09 1s 1s 662589430e-09 0s 0s 662589550e-09 1s 1s 662597350e-09 1s 1s 662599670e-09 0s 0s 662599790e-09 1s 1s 662607630e-09 1s 1s 662609910e-09 0s 0s 662610030e-09 1s 1s 662617910e-09 1s 1s 662620150e-09 0s 0s 662620270e-09 1s 1s 662628190e-09 1s 1s 662630390e-09 0s 0s 662630510e-09 1s 1s 662638470e-09 1s 1s 662640630e-09 0s 0s 662640750e-09 1s 1s 662648750e-09 1s 1s 662650870e-09 0s 0s 662650990e-09 1s 1s 662659030e-09 1s 1s 662661110e-09 0s 0s 662661230e-09 1s 1s 662669310e-09 1s 1s 662671350e-09 0s 0s 662671470e-09 1s 1s 662679590e-09 1s 1s 662681590e-09 0s 0s 662681710e-09 1s 1s 662689870e-09 1s 1s 662691830e-09 0s 0s 662691950e-09 1s 1s 662700150e-09 1s 1s 662702070e-09 0s 0s 662702190e-09 1s 1s 662710430e-09 1s 1s 662712310e-09 0s 0s 662712430e-09 1s 1s 662720710e-09 1s 1s 662722550e-09 0s 0s 662722670e-09 1s 1s 662730990e-09 1s 1s 662732790e-09 0s 0s 662732910e-09 1s 1s 662741270e-09 1s 1s 662743030e-09 0s 0s 662743150e-09 1s 1s 662751550e-09 1s 1s 662753270e-09 0s 0s 662753390e-09 1s 1s 662761830e-09 1s 1s 662763510e-09 0s 0s 662763630e-09 1s 1s 662772110e-09 1s 1s 662773750e-09 0s 0s 662773870e-09 1s 1s 662782390e-09 1s 1s 662783990e-09 0s 0s 662784110e-09 1s 1s 662792670e-09 1s 1s 662794230e-09 0s 0s 662794350e-09 1s 1s 662802950e-09 1s 1s 662804470e-09 0s 0s 662804590e-09 1s 1s 662813230e-09 1s 1s 662814710e-09 0s 0s 662814830e-09 1s 1s 662823510e-09 1s 1s 662824950e-09 0s 0s 662825070e-09 1s 1s 662833790e-09 1s 1s 662835190e-09 0s 0s 662835310e-09 1s 1s 662844070e-09 1s 1s 662845430e-09 0s 0s 662845550e-09 1s 1s 662854350e-09 1s 1s 662855670e-09 0s 0s 662855790e-09 1s 1s 662864630e-09 1s 1s 662865910e-09 0s 0s 662866030e-09 1s 1s 662874910e-09 1s 1s 662876150e-09 0s 0s 662876270e-09 1s 1s 662885190e-09 1s 1s 662886390e-09 0s 0s 662886510e-09 1s 1s 662895470e-09 1s 1s 662896630e-09 0s 0s 662896750e-09 1s 1s 662905750e-09 1s 1s 662906870e-09 0s 0s 662906990e-09 1s 1s 662916030e-09 1s 1s 662917110e-09 0s 0s 662917230e-09 1s 1s 662926310e-09 1s 1s 662927350e-09 0s 0s 662927470e-09 1s 1s 662936590e-09 1s 1s 662937590e-09 0s 0s 662937710e-09 1s 1s 662946870e-09 1s 1s 662947830e-09 0s 0s 662947950e-09 1s 1s 662957150e-09 1s 1s 662958070e-09 0s 0s 662958190e-09 1s 1s 662967430e-09 1s 1s 662968310e-09 0s 0s 662968430e-09 1s 1s 662977710e-09 1s 1s 662978550e-09 0s 0s 662978670e-09 1s 1s 662987990e-09 1s 1s 662988790e-09 0s 0s 662988910e-09 1s 1s 662998270e-09 1s 1s 662999030e-09 0s 0s 662999150e-09 1s 1s 663008550e-09 1s 1s 663009270e-09 0s 0s 663009390e-09 1s 1s 663018830e-09 1s 1s 663019510e-09 0s 0s 663019630e-09 1s 1s 663029110e-09 1s 1s 663029750e-09 0s 0s 663029870e-09 1s 1s 663039390e-09 1s 1s 663039990e-09 0s 0s 663040110e-09 1s 1s 663049670e-09 1s 1s 663050230e-09 0s 0s 663050350e-09 1s 1s 663059950e-09 1s 1s 663060470e-09 0s 0s 663060590e-09 1s 1s 663070230e-09 1s 1s 663070710e-09 0s 0s 663070830e-09 1s 1s 663080510e-09 1s 1s 663080950e-09 0s 0s 663081070e-09 1s 1s 663090790e-09 1s 1s 663091190e-09 0s 0s 663091310e-09 1s 1s 663101070e-09 1s 1s 663101430e-09 0s 0s 663101550e-09 1s 1s 663111350e-09 1s 1s 663111670e-09 0s 0s 663111790e-09 1s 1s 663121630e-09 1s 1s 663121910e-09 0s 0s 663122030e-09 1s 1s 663131910e-09 1s 1s 663132150e-09 0s 0s 663132270e-09 1s 1s 663142190e-09 1s 1s 663142390e-09 0s 0s 663142510e-09 1s 1s 663152470e-09 1s 1s 663152630e-09 0s 0s 663152750e-09 1s 1s 663162750e-09 1s 1s 663162870e-09 0s 0s 663162990e-09 1s 1s 663173030e-09 1s 1s 663173110e-09 0s 0s 663173230e-09 1s 1s 663183310e-09 1s 1s 663183350e-09 0s 0s 663183470e-09 1s 1s 663193590e-09 0s 0s 663193710e-09 1s 1s 663203830e-09 0s 0s 663203870e-09 0s 0s 663203950e-09 1s 1s 663214070e-09 0s 0s 663214150e-09 0s 0s 663214190e-09 1s 1s 663224310e-09 0s 0s 663224430e-09 1s 1s 663224470e-09 1s 1s 663234590e-09 0s 0s 663234670e-09 1s 1s 663234750e-09 1s 1s 663244830e-09 0s 0s 663244910e-09 1s 1s 663245030e-09 1s 1s 663255070e-09 0s 0s 663255150e-09 1s 1s 663255310e-09 1s 1s 663265310e-09 0s 0s 663265390e-09 1s 1s 663265590e-09 1s 1s 663275550e-09 0s 0s 663275630e-09 1s 1s 663275870e-09 1s 1s 663285790e-09 0s 0s 663285870e-09 1s 1s 663286150e-09 1s 1s 663296030e-09 0s 0s 663296110e-09 1s 1s 663296430e-09 1s 1s 663306270e-09 0s 0s 663306350e-09 1s 1s 663306710e-09 1s 1s 663316510e-09 0s 0s 663316590e-09 1s 1s 663316990e-09 1s 1s 663326750e-09 0s 0s 663326830e-09 1s 1s 663327270e-09 1s 1s 663336990e-09 0s 0s 663337070e-09 1s 1s 663337550e-09 1s 1s 663347230e-09 0s 0s 663347310e-09 1s 1s 663347830e-09 1s 1s 663357470e-09 0s 0s 663357550e-09 1s 1s 663358110e-09 1s 1s 663367710e-09 0s 0s 663367790e-09 1s 1s 663368390e-09 1s 1s 663377950e-09 0s 0s 663378030e-09 1s 1s 663378670e-09 1s 1s 663388190e-09 0s 0s 663388270e-09 1s 1s 663388950e-09 1s 1s 663398430e-09 0s 0s 663398510e-09 1s 1s 663399230e-09 1s 1s 663408670e-09 0s 0s 663408750e-09 1s 1s 663409510e-09 1s 1s 663418910e-09 0s 0s 663418990e-09 1s 1s 663419790e-09 1s 1s 663429150e-09 0s 0s 663429230e-09 1s 1s 663430070e-09 1s 1s 663439390e-09 0s 0s 663439470e-09 1s 1s 663440350e-09 1s 1s 663449630e-09 0s 0s 663449710e-09 1s 1s 663450630e-09 1s 1s 663459870e-09 0s 0s 663459950e-09 1s 1s 663460910e-09 1s 1s 663470110e-09 0s 0s 663470190e-09 1s 1s 663471190e-09 1s 1s 663480350e-09 0s 0s 663480430e-09 1s 1s 663481470e-09 1s 1s 663490590e-09 0s 0s 663490670e-09 1s 1s 663491750e-09 1s 1s 663500830e-09 0s 0s 663500910e-09 1s 1s 663502030e-09 1s 1s 663511070e-09 0s 0s 663511150e-09 1s 1s 663512310e-09 1s 1s 663521310e-09 0s 0s 663521390e-09 1s 1s 663522590e-09 1s 1s 663531550e-09 0s 0s 663531630e-09 1s 1s 663532870e-09 1s 1s 663541790e-09 0s 0s 663541870e-09 1s 1s 663543150e-09 1s 1s 663552030e-09 0s 0s 663552110e-09 1s 1s 663553430e-09 1s 1s 663562270e-09 0s 0s 663562350e-09 1s 1s 663563710e-09 1s 1s 663572510e-09 0s 0s 663572590e-09 1s 1s 663573990e-09 1s 1s 663582750e-09 0s 0s 663582830e-09 1s 1s 663584270e-09 1s 1s 663592990e-09 0s 0s 663593070e-09 1s 1s 663594550e-09 1s 1s 663603230e-09 0s 0s 663603310e-09 1s 1s 663604830e-09 1s 1s 663613470e-09 0s 0s 663613550e-09 1s 1s 663615110e-09 1s 1s 663623710e-09 0s 0s 663623790e-09 1s 1s 663625390e-09 1s 1s 663633950e-09 0s 0s 663634030e-09 1s 1s 663635670e-09 1s 1s 663644190e-09 0s 0s 663644270e-09 1s 1s 663645950e-09 1s 1s 663654430e-09 0s 0s 663654510e-09 1s 1s 663656230e-09 1s 1s 663664670e-09 0s 0s 663664750e-09 1s 1s 663666510e-09 1s 1s 663674910e-09 0s 0s 663674990e-09 1s 1s 663676790e-09 1s 1s 663685150e-09 0s 0s 663685230e-09 1s 1s 663687070e-09 1s 1s 663695390e-09 0s 0s 663695470e-09 1s 1s 663697350e-09 1s 1s 663705630e-09 0s 0s 663705710e-09 1s 1s 663707630e-09 1s 1s 663715870e-09 0s 0s 663715950e-09 1s 1s 663717910e-09 1s 1s 663726110e-09 0s 0s 663726190e-09 1s 1s 663728190e-09 1s 1s 663736350e-09 0s 0s 663736430e-09 1s 1s 663738470e-09 1s 1s 663746590e-09 0s 0s 663746670e-09 1s 1s 663748750e-09 1s 1s 663756830e-09 0s 0s 663756910e-09 1s 1s 663759030e-09 1s 1s 663767070e-09 0s 0s 663767150e-09 1s 1s 663769310e-09 1s 1s 663777310e-09 0s 0s 663777390e-09 1s 1s 663779590e-09 1s 1s 663787550e-09 0s 0s 663787630e-09 1s 1s 663789870e-09 1s 1s 663797790e-09 0s 0s 663797870e-09 1s 1s 663800150e-09 1s 1s 663808030e-09 0s 0s 663808110e-09 1s 1s 663810430e-09 1s 1s 663818270e-09 0s 0s 663818350e-09 1s 1s 663820710e-09 1s 1s 663828510e-09 0s 0s 663828590e-09 1s 1s 663830990e-09 1s 1s 663838750e-09 0s 0s 663838830e-09 1s 1s 663841270e-09 1s 1s 663848990e-09 0s 0s 663849070e-09 1s 1s 663851550e-09 1s 1s 663859230e-09 0s 0s 663859310e-09 1s 1s 663861830e-09 1s 1s 663869470e-09 0s 0s 663869550e-09 1s 1s 663872110e-09 1s 1s 663879710e-09 0s 0s 663879790e-09 1s 1s 663882390e-09 1s 1s 663889950e-09 0s 0s 663890030e-09 1s 1s 663892670e-09 1s 1s 663900190e-09 0s 0s 663900270e-09 1s 1s 663902950e-09 1s 1s 663910430e-09 0s 0s 663910510e-09 1s 1s 663913230e-09 1s 1s 663920670e-09 0s 0s 663920750e-09 1s 1s 663923510e-09 1s 1s 663930910e-09 0s 0s 663930990e-09 1s 1s 663933790e-09 1s 1s 663941150e-09 0s 0s 663941230e-09 1s 1s 663944070e-09 1s 1s 663951390e-09 0s 0s 663951470e-09 1s 1s 663954350e-09 1s 1s 663961630e-09 0s 0s 663961710e-09 1s 1s 663964630e-09 1s 1s 663971870e-09 0s 0s 663971950e-09 1s 1s 663974910e-09 1s 1s 663982110e-09 0s 0s 663982190e-09 1s 1s 663985190e-09 1s 1s 663992350e-09 0s 0s 663992430e-09 1s 1s 663995470e-09 1s 1s 664002590e-09 0s 0s 664002670e-09 1s 1s 664005750e-09 1s 1s 664012830e-09 0s 0s 664012910e-09 1s 1s 664016030e-09 1s 1s 664023070e-09 0s 0s 664023150e-09 1s 1s 664026310e-09 1s 1s 664033310e-09 0s 0s 664033390e-09 1s 1s 664036590e-09 1s 1s 664043550e-09 0s 0s 664043630e-09 1s 1s 664046870e-09 1s 1s 664053790e-09 0s 0s 664053870e-09 1s 1s 664057150e-09 1s 1s 664064030e-09 0s 0s 664064110e-09 1s 1s 664067430e-09 1s 1s 664074270e-09 0s 0s 664074350e-09 1s 1s 664077710e-09 1s 1s 664084510e-09 0s 0s 664084590e-09 1s 1s 664087990e-09 1s 1s 664094750e-09 0s 0s 664094830e-09 1s 1s 664098270e-09 1s 1s 664104990e-09 0s 0s 664105070e-09 1s 1s 664108550e-09 1s 1s 664115230e-09 0s 0s 664115310e-09 1s 1s 664118830e-09 1s 1s 664125470e-09 0s 0s 664125550e-09 1s 1s 664129110e-09 1s 1s 664135710e-09 0s 0s 664135790e-09 1s 1s 664139390e-09 1s 1s 664145950e-09 0s 0s 664146030e-09 1s 1s 664149670e-09 1s 1s 664156190e-09 0s 0s 664156270e-09 1s 1s 664159950e-09 1s 1s 664166430e-09 0s 0s 664166510e-09 1s 1s 664170230e-09 1s 1s 664176670e-09 0s 0s 664176750e-09 1s 1s 664180510e-09 1s 1s 664186910e-09 0s 0s 664186990e-09 1s 1s 664190790e-09 1s 1s 664197150e-09 0s 0s 664197230e-09 1s 1s 664201070e-09 1s 1s 664207390e-09 0s 0s 664207470e-09 1s 1s 664211350e-09 1s 1s 664217630e-09 0s 0s 664217710e-09 1s 1s 664221630e-09 1s 1s 664227870e-09 0s 0s 664227950e-09 1s 1s 664231910e-09 1s 1s 664238110e-09 0s 0s 664238190e-09 1s 1s 664242190e-09 1s 1s 664248350e-09 0s 0s 664248430e-09 1s 1s 664252470e-09 1s 1s 664258590e-09 0s 0s 664258670e-09 1s 1s 664262750e-09 1s 1s 664268830e-09 0s 0s 664268910e-09 1s 1s 664273030e-09 1s 1s 664279070e-09 0s 0s 664279150e-09 1s 1s 664283310e-09 1s 1s 664289310e-09 0s 0s 664289390e-09 1s 1s 664293590e-09 1s 1s 664299550e-09 0s 0s 664299630e-09 1s 1s 664303870e-09 1s 1s 664309790e-09 0s 0s 664309870e-09 1s 1s 664314150e-09 1s 1s 664320030e-09 0s 0s 664320110e-09 1s 1s 664324430e-09 1s 1s 664330270e-09 0s 0s 664330350e-09 1s 1s 664334710e-09 1s 1s 664340510e-09 0s 0s 664340590e-09 1s 1s 664344990e-09 1s 1s 664350750e-09 0s 0s 664350830e-09 1s 1s 664355270e-09 1s 1s 664360990e-09 0s 0s 664361070e-09 1s 1s 664365550e-09 1s 1s 664371230e-09 0s 0s 664371310e-09 1s 1s 664375830e-09 1s 1s 664381470e-09 0s 0s 664381550e-09 1s 1s 664386110e-09 1s 1s 664391710e-09 0s 0s 664391790e-09 1s 1s 664396390e-09 1s 1s 664401950e-09 0s 0s 664402030e-09 1s 1s 664406670e-09 1s 1s 664412190e-09 0s 0s 664412270e-09 1s 1s 664416950e-09 1s 1s 664422430e-09 0s 0s 664422510e-09 1s 1s 664427230e-09 1s 1s 664432670e-09 0s 0s 664432750e-09 1s 1s 664437510e-09 1s 1s 664442910e-09 0s 0s 664442990e-09 1s 1s 664447790e-09 1s 1s 664453150e-09 0s 0s 664453230e-09 1s 1s 664458070e-09 1s 1s 664463390e-09 0s 0s 664463470e-09 1s 1s 664468350e-09 1s 1s 664473630e-09 0s 0s 664473710e-09 1s 1s 664478630e-09 1s 1s 664483870e-09 0s 0s 664483950e-09 1s 1s 664488910e-09 1s 1s 664494110e-09 0s 0s 664494190e-09 1s 1s 664499190e-09 1s 1s 664504350e-09 0s 0s 664504430e-09 1s 1s 664509470e-09 1s 1s 664514590e-09 0s 0s 664514670e-09 1s 1s 664519750e-09 1s 1s 664524830e-09 0s 0s 664524910e-09 1s 1s 664530030e-09 1s 1s 664535070e-09 0s 0s 664535150e-09 1s 1s 664540310e-09 1s 1s 664545310e-09 0s 0s 664545390e-09 1s 1s 664550590e-09 1s 1s 664555550e-09 0s 0s 664555630e-09 1s 1s 664560870e-09 1s 1s 664565790e-09 0s 0s 664565870e-09 1s 1s 664571150e-09 1s 1s 664576030e-09 0s 0s 664576110e-09 1s 1s 664581430e-09 1s 1s 664586270e-09 0s 0s 664586350e-09 1s 1s 664591710e-09 1s 1s 664596510e-09 0s 0s 664596590e-09 1s 1s 664601990e-09 1s 1s 664606750e-09 0s 0s 664606830e-09 1s 1s 664612270e-09 1s 1s 664616990e-09 0s 0s 664617070e-09 1s 1s 664622550e-09 1s 1s 664627230e-09 0s 0s 664627310e-09 1s 1s 664632830e-09 1s 1s 664637470e-09 0s 0s 664637550e-09 1s 1s 664643110e-09 1s 1s 664647710e-09 0s 0s 664647790e-09 1s 1s 664653390e-09 1s 1s 664657950e-09 0s 0s 664658030e-09 1s 1s 664663670e-09 1s 1s 664668190e-09 0s 0s 664668270e-09 1s 1s 664673950e-09 1s 1s 664678430e-09 0s 0s 664678510e-09 1s 1s 664684230e-09 1s 1s 664688670e-09 0s 0s 664688750e-09 1s 1s 664694510e-09 1s 1s 664698910e-09 0s 0s 664698990e-09 1s 1s 664704790e-09 1s 1s 664709150e-09 0s 0s 664709230e-09 1s 1s 664715070e-09 1s 1s 664719390e-09 0s 0s 664719470e-09 1s 1s 664725350e-09 1s 1s 664729630e-09 0s 0s 664729710e-09 1s 1s 664735630e-09 1s 1s 664739870e-09 0s 0s 664739950e-09 1s 1s 664745910e-09 1s 1s 664750110e-09 0s 0s 664750190e-09 1s 1s 664756190e-09 1s 1s 664760350e-09 0s 0s 664760430e-09 1s 1s 664766470e-09 1s 1s 664770590e-09 0s 0s 664770670e-09 1s 1s 664776750e-09 1s 1s 664780830e-09 0s 0s 664780910e-09 1s 1s 664787030e-09 1s 1s 664791070e-09 0s 0s 664791150e-09 1s 1s 664797310e-09 1s 1s 664801310e-09 0s 0s 664801390e-09 1s 1s 664807590e-09 1s 1s 664811550e-09 0s 0s 664811630e-09 1s 1s 664817870e-09 1s 1s 664821790e-09 0s 0s 664821870e-09 1s 1s 664828150e-09 1s 1s 664832030e-09 0s 0s 664832110e-09 1s 1s 664838430e-09 1s 1s 664842270e-09 0s 0s 664842350e-09 1s 1s 664848710e-09 1s 1s 664852510e-09 0s 0s 664852590e-09 1s 1s 664858990e-09 1s 1s 664862750e-09 0s 0s 664862830e-09 1s 1s 664869270e-09 1s 1s 664872990e-09 0s 0s 664873070e-09 1s 1s 664879550e-09 1s 1s 664883230e-09 0s 0s 664883310e-09 1s 1s 664889830e-09 1s 1s 664893470e-09 0s 0s 664893550e-09 1s 1s 664900110e-09 1s 1s 664903710e-09 0s 0s 664903790e-09 1s 1s 664910390e-09 1s 1s 664913950e-09 0s 0s 664914030e-09 1s 1s 664920670e-09 1s 1s 664924190e-09 0s 0s 664924270e-09 1s 1s 664930950e-09 1s 1s 664934430e-09 0s 0s 664934510e-09 1s 1s 664941230e-09 1s 1s 664944670e-09 0s 0s 664944750e-09 1s 1s 664951510e-09 1s 1s 664954910e-09 0s 0s 664954990e-09 1s 1s 664961790e-09 1s 1s 664965150e-09 0s 0s 664965230e-09 1s 1s 664972070e-09 1s 1s 664975390e-09 0s 0s 664975470e-09 1s 1s 664982350e-09 1s 1s 664985630e-09 0s 0s 664985710e-09 1s 1s 664992630e-09 1s 1s 664995870e-09 0s 0s 664995950e-09 1s 1s 665002910e-09 1s 1s 665006110e-09 0s 0s 665006190e-09 1s 1s 665013190e-09 1s 1s 665016350e-09 0s 0s 665016430e-09 1s 1s 665023470e-09 1s 1s 665026590e-09 0s 0s 665026670e-09 1s 1s 665033750e-09 1s 1s 665036830e-09 0s 0s 665036910e-09 1s 1s 665044030e-09 1s 1s 665047070e-09 0s 0s 665047150e-09 1s 1s 665054310e-09 1s 1s 665057310e-09 0s 0s 665057390e-09 1s 1s 665064590e-09 1s 1s 665067550e-09 0s 0s 665067630e-09 1s 1s 665074870e-09 1s 1s 665077790e-09 0s 0s 665077870e-09 1s 1s 665085150e-09 1s 1s 665088030e-09 0s 0s 665088110e-09 1s 1s 665095430e-09 1s 1s 665098270e-09 0s 0s 665098350e-09 1s 1s 665105710e-09 1s 1s 665108510e-09 0s 0s 665108590e-09 1s 1s 665115990e-09 1s 1s 665118750e-09 0s 0s 665118830e-09 1s 1s 665126270e-09 1s 1s 665128990e-09 0s 0s 665129070e-09 1s 1s 665136550e-09 1s 1s 665139230e-09 0s 0s 665139310e-09 1s 1s 665146830e-09 1s 1s 665149470e-09 0s 0s 665149550e-09 1s 1s 665157110e-09 1s 1s 665159710e-09 0s 0s 665159790e-09 1s 1s 665167390e-09 1s 1s 665169950e-09 0s 0s 665170030e-09 1s 1s 665177670e-09 1s 1s 665180190e-09 0s 0s 665180270e-09 1s 1s 665187950e-09 1s 1s 665190430e-09 0s 0s 665190510e-09 1s 1s 665198230e-09 1s 1s 665200670e-09 0s 0s 665200750e-09 1s 1s 665208510e-09 1s 1s 665210910e-09 0s 0s 665210990e-09 1s 1s 665218790e-09 1s 1s 665221150e-09 0s 0s 665221230e-09 1s 1s 665229070e-09 1s 1s 665231390e-09 0s 0s 665231470e-09 1s 1s 665239350e-09 1s 1s 665241630e-09 0s 0s 665241710e-09 1s 1s 665249630e-09 1s 1s 665251870e-09 0s 0s 665251950e-09 1s 1s 665259910e-09 1s 1s 665262110e-09 0s 0s 665262190e-09 1s 1s 665270190e-09 1s 1s 665272350e-09 0s 0s 665272430e-09 1s 1s 665280470e-09 1s 1s 665282590e-09 0s 0s 665282670e-09 1s 1s 665290750e-09 1s 1s 665292830e-09 0s 0s 665292910e-09 1s 1s 665301030e-09 1s 1s 665303070e-09 0s 0s 665303150e-09 1s 1s 665311310e-09 1s 1s 665313310e-09 0s 0s 665313390e-09 1s 1s 665321590e-09 1s 1s 665323550e-09 0s 0s 665323630e-09 1s 1s 665331870e-09 1s 1s 665333790e-09 0s 0s 665333870e-09 1s 1s 665342150e-09 1s 1s 665344030e-09 0s 0s 665344110e-09 1s 1s 665352430e-09 1s 1s 665354270e-09 0s 0s 665354350e-09 1s 1s 665362710e-09 1s 1s 665364510e-09 0s 0s 665364590e-09 1s 1s 665372990e-09 1s 1s 665374750e-09 0s 0s 665374830e-09 1s 1s 665383270e-09 1s 1s 665384990e-09 0s 0s 665385070e-09 1s 1s 665393550e-09 1s 1s 665395230e-09 0s 0s 665395310e-09 1s 1s 665403830e-09 1s 1s 665405470e-09 0s 0s 665405550e-09 1s 1s 665414110e-09 1s 1s 665415710e-09 0s 0s 665415790e-09 1s 1s 665424390e-09 1s 1s 665425950e-09 0s 0s 665426030e-09 1s 1s 665434670e-09 1s 1s 665436190e-09 0s 0s 665436270e-09 1s 1s 665444950e-09 1s 1s 665446430e-09 0s 0s 665446510e-09 1s 1s 665455230e-09 1s 1s 665456670e-09 0s 0s 665456750e-09 1s 1s 665465510e-09 1s 1s 665466910e-09 0s 0s 665466990e-09 1s 1s 665475790e-09 1s 1s 665477150e-09 0s 0s 665477230e-09 1s 1s 665486070e-09 1s 1s 665487390e-09 0s 0s 665487470e-09 1s 1s 665496350e-09 1s 1s 665497630e-09 0s 0s 665497710e-09 1s 1s 665506630e-09 1s 1s 665507870e-09 0s 0s 665507950e-09 1s 1s 665516910e-09 1s 1s 665518110e-09 0s 0s 665518190e-09 1s 1s 665527190e-09 1s 1s 665528350e-09 0s 0s 665528430e-09 1s 1s 665537470e-09 1s 1s 665538590e-09 0s 0s 665538670e-09 1s 1s 665547750e-09 1s 1s 665548830e-09 0s 0s 665548910e-09 1s 1s 665558030e-09 1s 1s 665559070e-09 0s 0s 665559150e-09 1s 1s 665568310e-09 1s 1s 665569310e-09 0s 0s 665569390e-09 1s 1s 665578590e-09 1s 1s 665579550e-09 0s 0s 665579630e-09 1s 1s 665588870e-09 1s 1s 665589790e-09 0s 0s 665589870e-09 1s 1s 665599150e-09 1s 1s 665600030e-09 0s 0s 665600110e-09 1s 1s 665609430e-09 1s 1s 665610270e-09 0s 0s 665610350e-09 1s 1s 665619710e-09 1s 1s 665620510e-09 0s 0s 665620590e-09 1s 1s 665629990e-09 1s 1s 665630750e-09 0s 0s 665630830e-09 1s 1s 665640270e-09 1s 1s 665640990e-09 0s 0s 665641070e-09 1s 1s 665650550e-09 1s 1s 665651230e-09 0s 0s 665651310e-09 1s 1s 665660830e-09 1s 1s 665661470e-09 0s 0s 665661550e-09 1s 1s 665671110e-09 1s 1s 665671710e-09 0s 0s 665671790e-09 1s 1s 665681390e-09 1s 1s 665681950e-09 0s 0s 665682030e-09 1s 1s 665691670e-09 1s 1s 665692190e-09 0s 0s 665692270e-09 1s 1s 665701950e-09 1s 1s 665702430e-09 0s 0s 665702510e-09 1s 1s 665712230e-09 1s 1s 665712670e-09 0s 0s 665712750e-09 1s 1s 665722510e-09 1s 1s 665722910e-09 0s 0s 665722990e-09 1s 1s 665732790e-09 1s 1s 665733150e-09 0s 0s 665733230e-09 1s 1s 665743070e-09 1s 1s 665743390e-09 0s 0s 665743470e-09 1s 1s 665753350e-09 1s 1s 665753630e-09 0s 0s 665753710e-09 1s 1s 665763630e-09 1s 1s 665763870e-09 0s 0s 665763950e-09 1s 1s 665773910e-09 1s 1s 665774110e-09 0s 0s 665774190e-09 1s 1s 665784190e-09 1s 1s 665784350e-09 0s 0s 665784430e-09 1s 1s 665794470e-09 1s 1s 665794590e-09 0s 0s 665794670e-09 1s 1s 665804750e-09 1s 1s 665804830e-09 0s 0s 665804910e-09 1s 1s 665815030e-09 1s 1s 665815070e-09 0s 0s 665815150e-09 1s 1s 665825310e-09 0s 0s 665825390e-09 1s 1s 665835550e-09 0s 0s 665835590e-09 0s 0s 665835630e-09 1s 1s 665845790e-09 0s 0s 665845870e-09 1s 1s 665845910e-09 1s 1s 665856070e-09 0s 0s 665856110e-09 1s 1s 665856190e-09 1s 1s 665866310e-09 0s 0s 665866350e-09 1s 1s 665866470e-09 1s 1s 665876550e-09 0s 0s 665876590e-09 1s 1s 665876750e-09 1s 1s 665886790e-09 0s 0s 665886830e-09 1s 1s 665887030e-09 1s 1s 665897030e-09 0s 0s 665897070e-09 1s 1s 665897310e-09 1s 1s 665907270e-09 0s 0s 665907310e-09 1s 1s 665907590e-09 1s 1s 665917510e-09 0s 0s 665917550e-09 1s 1s 665917870e-09 1s 1s 665927750e-09 0s 0s 665927790e-09 1s 1s 665928150e-09 1s 1s 665937990e-09 0s 0s 665938030e-09 1s 1s 665938430e-09 1s 1s 665948230e-09 0s 0s 665948270e-09 1s 1s 665948710e-09 1s 1s 665958470e-09 0s 0s 665958510e-09 1s 1s 665958990e-09 1s 1s 665968710e-09 0s 0s 665968750e-09 1s 1s 665969270e-09 1s 1s 665978950e-09 0s 0s 665978990e-09 1s 1s 665979550e-09 1s 1s 665989190e-09 0s 0s 665989230e-09 1s 1s 665989830e-09 1s 1s 665999430e-09 0s 0s 665999470e-09 1s 1s 666000110e-09 1s 1s 666009670e-09 0s 0s 666009710e-09 1s 1s 666010390e-09 1s 1s 666019910e-09 0s 0s 666019950e-09 1s 1s 666020670e-09 1s 1s 666030150e-09 0s 0s 666030190e-09 1s 1s 666030950e-09 1s 1s 666040390e-09 0s 0s 666040430e-09 1s 1s 666041230e-09 1s 1s 666050630e-09 0s 0s 666050670e-09 1s 1s 666051510e-09 1s 1s 666060870e-09 0s 0s 666060910e-09 1s 1s 666061790e-09 1s 1s 666071110e-09 0s 0s 666071150e-09 1s 1s 666072070e-09 1s 1s 666081350e-09 0s 0s 666081390e-09 1s 1s 666082350e-09 1s 1s 666091590e-09 0s 0s 666091630e-09 1s 1s 666092630e-09 1s 1s 666101830e-09 0s 0s 666101870e-09 1s 1s 666102910e-09 1s 1s 666112070e-09 0s 0s 666112110e-09 1s 1s 666113190e-09 1s 1s 666122310e-09 0s 0s 666122350e-09 1s 1s 666123470e-09 1s 1s 666132550e-09 0s 0s 666132590e-09 1s 1s 666133750e-09 1s 1s 666142790e-09 0s 0s 666142830e-09 1s 1s 666144030e-09 1s 1s 666153030e-09 0s 0s 666153070e-09 1s 1s 666154310e-09 1s 1s 666163270e-09 0s 0s 666163310e-09 1s 1s 666164590e-09 1s 1s 666173510e-09 0s 0s 666173550e-09 1s 1s 666174870e-09 1s 1s 666183750e-09 0s 0s 666183790e-09 1s 1s 666185150e-09 1s 1s 666193990e-09 0s 0s 666194030e-09 1s 1s 666195430e-09 1s 1s 666204230e-09 0s 0s 666204270e-09 1s 1s 666205710e-09 1s 1s 666214470e-09 0s 0s 666214510e-09 1s 1s 666215990e-09 1s 1s 666224710e-09 0s 0s 666224750e-09 1s 1s 666226270e-09 1s 1s 666234950e-09 0s 0s 666234990e-09 1s 1s 666236550e-09 1s 1s 666245190e-09 0s 0s 666245230e-09 1s 1s 666246830e-09 1s 1s 666255430e-09 0s 0s 666255470e-09 1s 1s 666257110e-09 1s 1s 666265670e-09 0s 0s 666265710e-09 1s 1s 666267390e-09 1s 1s 666275910e-09 0s 0s 666275950e-09 1s 1s 666277670e-09 1s 1s 666286150e-09 0s 0s 666286190e-09 1s 1s 666287950e-09 1s 1s 666296390e-09 0s 0s 666296430e-09 1s 1s 666298230e-09 1s 1s 666306630e-09 0s 0s 666306670e-09 1s 1s 666308510e-09 1s 1s 666316870e-09 0s 0s 666316910e-09 1s 1s 666318790e-09 1s 1s 666327110e-09 0s 0s 666327150e-09 1s 1s 666329070e-09 1s 1s 666337350e-09 0s 0s 666337390e-09 1s 1s 666339350e-09 1s 1s 666347590e-09 0s 0s 666347630e-09 1s 1s 666349630e-09 1s 1s 666357830e-09 0s 0s 666357870e-09 1s 1s 666359910e-09 1s 1s 666368070e-09 0s 0s 666368110e-09 1s 1s 666370190e-09 1s 1s 666378310e-09 0s 0s 666378350e-09 1s 1s 666380470e-09 1s 1s 666388550e-09 0s 0s 666388590e-09 1s 1s 666390750e-09 1s 1s 666398790e-09 0s 0s 666398830e-09 1s 1s 666401030e-09 1s 1s 666409030e-09 0s 0s 666409070e-09 1s 1s 666411310e-09 1s 1s 666419270e-09 0s 0s 666419310e-09 1s 1s 666421590e-09 1s 1s 666429510e-09 0s 0s 666429550e-09 1s 1s 666431870e-09 1s 1s 666439750e-09 0s 0s 666439790e-09 1s 1s 666442150e-09 1s 1s 666449990e-09 0s 0s 666450030e-09 1s 1s 666452430e-09 1s 1s 666460230e-09 0s 0s 666460270e-09 1s 1s 666462710e-09 1s 1s 666470470e-09 0s 0s 666470510e-09 1s 1s 666472990e-09 1s 1s 666480710e-09 0s 0s 666480750e-09 1s 1s 666483270e-09 1s 1s 666490950e-09 0s 0s 666490990e-09 1s 1s 666493550e-09 1s 1s 666501190e-09 0s 0s 666501230e-09 1s 1s 666503830e-09 1s 1s 666511430e-09 0s 0s 666511470e-09 1s 1s 666514110e-09 1s 1s 666521670e-09 0s 0s 666521710e-09 1s 1s 666524390e-09 1s 1s 666531910e-09 0s 0s 666531950e-09 1s 1s 666534670e-09 1s 1s 666542150e-09 0s 0s 666542190e-09 1s 1s 666544950e-09 1s 1s 666552390e-09 0s 0s 666552430e-09 1s 1s 666555230e-09 1s 1s 666562630e-09 0s 0s 666562670e-09 1s 1s 666565510e-09 1s 1s 666572870e-09 0s 0s 666572910e-09 1s 1s 666575790e-09 1s 1s 666583110e-09 0s 0s 666583150e-09 1s 1s 666586070e-09 1s 1s 666593350e-09 0s 0s 666593390e-09 1s 1s 666596350e-09 1s 1s 666603590e-09 0s 0s 666603630e-09 1s 1s 666606630e-09 1s 1s 666613830e-09 0s 0s 666613870e-09 1s 1s 666616910e-09 1s 1s 666624070e-09 0s 0s 666624110e-09 1s 1s 666627190e-09 1s 1s 666634310e-09 0s 0s 666634350e-09 1s 1s 666637470e-09 1s 1s 666644550e-09 0s 0s 666644590e-09 1s 1s 666647750e-09 1s 1s 666654790e-09 0s 0s 666654830e-09 1s 1s 666658030e-09 1s 1s 666665030e-09 0s 0s 666665070e-09 1s 1s 666668310e-09 1s 1s 666675270e-09 0s 0s 666675310e-09 1s 1s 666678590e-09 1s 1s 666685510e-09 0s 0s 666685550e-09 1s 1s 666688870e-09 1s 1s 666695750e-09 0s 0s 666695790e-09 1s 1s 666699150e-09 1s 1s 666705990e-09 0s 0s 666706030e-09 1s 1s 666709430e-09 1s 1s 666716230e-09 0s 0s 666716270e-09 1s 1s 666719710e-09 1s 1s 666726470e-09 0s 0s 666726510e-09 1s 1s 666729990e-09 1s 1s 666736710e-09 0s 0s 666736750e-09 1s 1s 666740270e-09 1s 1s 666746950e-09 0s 0s 666746990e-09 1s 1s 666750550e-09 1s 1s 666757190e-09 0s 0s 666757230e-09 1s 1s 666760830e-09 1s 1s 666767430e-09 0s 0s 666767470e-09 1s 1s 666771110e-09 1s 1s 666777670e-09 0s 0s 666777710e-09 1s 1s 666781390e-09 1s 1s 666787910e-09 0s 0s 666787950e-09 1s 1s 666791670e-09 1s 1s 666798150e-09 0s 0s 666798190e-09 1s 1s 666801950e-09 1s 1s 666808390e-09 0s 0s 666808430e-09 1s 1s 666812230e-09 1s 1s 666818630e-09 0s 0s 666818670e-09 1s 1s 666822510e-09 1s 1s 666828870e-09 0s 0s 666828910e-09 1s 1s 666832790e-09 1s 1s 666839110e-09 0s 0s 666839150e-09 1s 1s 666843070e-09 1s 1s 666849350e-09 0s 0s 666849390e-09 1s 1s 666853350e-09 1s 1s 666859590e-09 0s 0s 666859630e-09 1s 1s 666863630e-09 1s 1s 666869830e-09 0s 0s 666869870e-09 1s 1s 666873910e-09 1s 1s 666880070e-09 0s 0s 666880110e-09 1s 1s 666884190e-09 1s 1s 666890310e-09 0s 0s 666890350e-09 1s 1s 666894470e-09 1s 1s 666900550e-09 0s 0s 666900590e-09 1s 1s 666904750e-09 1s 1s 666910790e-09 0s 0s 666910830e-09 1s 1s 666915030e-09 1s 1s 666921030e-09 0s 0s 666921070e-09 1s 1s 666925310e-09 1s 1s 666931270e-09 0s 0s 666931310e-09 1s 1s 666935590e-09 1s 1s 666941510e-09 0s 0s 666941550e-09 1s 1s 666945870e-09 1s 1s 666951750e-09 0s 0s 666951790e-09 1s 1s 666956150e-09 1s 1s 666961990e-09 0s 0s 666962030e-09 1s 1s 666966430e-09 1s 1s 666972230e-09 0s 0s 666972270e-09 1s 1s 666976710e-09 1s 1s 666982470e-09 0s 0s 666982510e-09 1s 1s 666986990e-09 1s 1s 666992710e-09 0s 0s 666992750e-09 1s 1s 666997270e-09 1s 1s 667002950e-09 0s 0s 667002990e-09 1s 1s 667007550e-09 1s 1s 667013190e-09 0s 0s 667013230e-09 1s 1s 667017830e-09 1s 1s 667023430e-09 0s 0s 667023470e-09 1s 1s 667028110e-09 1s 1s 667033670e-09 0s 0s 667033710e-09 1s 1s 667038390e-09 1s 1s 667043910e-09 0s 0s 667043950e-09 1s 1s 667048670e-09 1s 1s 667054150e-09 0s 0s 667054190e-09 1s 1s 667058950e-09 1s 1s 667064390e-09 0s 0s 667064430e-09 1s 1s 667069230e-09 1s 1s 667074630e-09 0s 0s 667074670e-09 1s 1s 667079510e-09 1s 1s 667084870e-09 0s 0s 667084910e-09 1s 1s 667089790e-09 1s 1s 667095110e-09 0s 0s 667095150e-09 1s 1s 667100070e-09 1s 1s 667105350e-09 0s 0s 667105390e-09 1s 1s 667110350e-09 1s 1s 667115590e-09 0s 0s 667115630e-09 1s 1s 667120630e-09 1s 1s 667125830e-09 0s 0s 667125870e-09 1s 1s 667130910e-09 1s 1s 667136070e-09 0s 0s 667136110e-09 1s 1s 667141190e-09 1s 1s 667146310e-09 0s 0s 667146350e-09 1s 1s 667151470e-09 1s 1s 667156550e-09 0s 0s 667156590e-09 1s 1s 667161750e-09 1s 1s 667166790e-09 0s 0s 667166830e-09 1s 1s 667172030e-09 1s 1s 667177030e-09 0s 0s 667177070e-09 1s 1s 667182310e-09 1s 1s 667187270e-09 0s 0s 667187310e-09 1s 1s 667192590e-09 1s 1s 667197510e-09 0s 0s 667197550e-09 1s 1s 667202870e-09 1s 1s 667207750e-09 0s 0s 667207790e-09 1s 1s 667213150e-09 1s 1s 667217990e-09 0s 0s 667218030e-09 1s 1s 667223430e-09 1s 1s 667228230e-09 0s 0s 667228270e-09 1s 1s 667233710e-09 1s 1s 667238470e-09 0s 0s 667238510e-09 1s 1s 667243990e-09 1s 1s 667248710e-09 0s 0s 667248750e-09 1s 1s 667254270e-09 1s 1s 667258950e-09 0s 0s 667258990e-09 1s 1s 667264550e-09 1s 1s 667269190e-09 0s 0s 667269230e-09 1s 1s 667274830e-09 1s 1s 667279430e-09 0s 0s 667279470e-09 1s 1s 667285110e-09 1s 1s 667289670e-09 0s 0s 667289710e-09 1s 1s 667295390e-09 1s 1s 667299910e-09 0s 0s 667299950e-09 1s 1s 667305670e-09 1s 1s 667310150e-09 0s 0s 667310190e-09 1s 1s 667315950e-09 1s 1s 667320390e-09 0s 0s 667320430e-09 1s 1s 667326230e-09 1s 1s 667330630e-09 0s 0s 667330670e-09 1s 1s 667336510e-09 1s 1s 667340870e-09 0s 0s 667340910e-09 1s 1s 667346790e-09 1s 1s 667351110e-09 0s 0s 667351150e-09 1s 1s 667357070e-09 1s 1s 667361350e-09 0s 0s 667361390e-09 1s 1s 667367350e-09 1s 1s 667371590e-09 0s 0s 667371630e-09 1s 1s 667377630e-09 1s 1s 667381830e-09 0s 0s 667381870e-09 1s 1s 667387910e-09 1s 1s 667392070e-09 0s 0s 667392110e-09 1s 1s 667398190e-09 1s 1s 667402310e-09 0s 0s 667402350e-09 1s 1s 667408470e-09 1s 1s 667412550e-09 0s 0s 667412590e-09 1s 1s 667418750e-09 1s 1s 667422790e-09 0s 0s 667422830e-09 1s 1s 667429030e-09 1s 1s 667433030e-09 0s 0s 667433070e-09 1s 1s 667439310e-09 1s 1s 667443270e-09 0s 0s 667443310e-09 1s 1s 667449590e-09 1s 1s 667453510e-09 0s 0s 667453550e-09 1s 1s 667459870e-09 1s 1s 667463750e-09 0s 0s 667463790e-09 1s 1s 667470150e-09 1s 1s 667473990e-09 0s 0s 667474030e-09 1s 1s 667480430e-09 1s 1s 667484230e-09 0s 0s 667484270e-09 1s 1s 667490710e-09 1s 1s 667494470e-09 0s 0s 667494510e-09 1s 1s 667500990e-09 1s 1s 667504710e-09 0s 0s 667504750e-09 1s 1s 667511270e-09 1s 1s 667514950e-09 0s 0s 667514990e-09 1s 1s 667521550e-09 1s 1s 667525190e-09 0s 0s 667525230e-09 1s 1s 667531830e-09 1s 1s 667535430e-09 0s 0s 667535470e-09 1s 1s 667542110e-09 1s 1s 667545670e-09 0s 0s 667545710e-09 1s 1s 667552390e-09 1s 1s 667555910e-09 0s 0s 667555950e-09 1s 1s 667562670e-09 1s 1s 667566150e-09 0s 0s 667566190e-09 1s 1s 667572950e-09 1s 1s 667576390e-09 0s 0s 667576430e-09 1s 1s 667583230e-09 1s 1s 667586630e-09 0s 0s 667586670e-09 1s 1s 667593510e-09 1s 1s 667596870e-09 0s 0s 667596910e-09 1s 1s 667603790e-09 1s 1s 667607110e-09 0s 0s 667607150e-09 1s 1s 667614070e-09 1s 1s 667617350e-09 0s 0s 667617390e-09 1s 1s 667624350e-09 1s 1s 667627590e-09 0s 0s 667627630e-09 1s 1s 667634630e-09 1s 1s 667637830e-09 0s 0s 667637870e-09 1s 1s 667644910e-09 1s 1s 667648070e-09 0s 0s 667648110e-09 1s 1s 667655190e-09 1s 1s 667658310e-09 0s 0s 667658350e-09 1s 1s 667665470e-09 1s 1s 667668550e-09 0s 0s 667668590e-09 1s 1s 667675750e-09 1s 1s 667678790e-09 0s 0s 667678830e-09 1s 1s 667686030e-09 1s 1s 667689030e-09 0s 0s 667689070e-09 1s 1s 667696310e-09 1s 1s 667699270e-09 0s 0s 667699310e-09 1s 1s 667706590e-09 1s 1s 667709510e-09 0s 0s 667709550e-09 1s 1s 667716870e-09 1s 1s 667719750e-09 0s 0s 667719790e-09 1s 1s 667727150e-09 1s 1s 667729990e-09 0s 0s 667730030e-09 1s 1s 667737430e-09 1s 1s 667740230e-09 0s 0s 667740270e-09 1s 1s 667747710e-09 1s 1s 667750470e-09 0s 0s 667750510e-09 1s 1s 667757990e-09 1s 1s 667760710e-09 0s 0s 667760750e-09 1s 1s 667768270e-09 1s 1s 667770950e-09 0s 0s 667770990e-09 1s 1s 667778550e-09 1s 1s 667781190e-09 0s 0s 667781230e-09 1s 1s 667788830e-09 1s 1s 667791430e-09 0s 0s 667791470e-09 1s 1s 667799110e-09 1s 1s 667801670e-09 0s 0s 667801710e-09 1s 1s 667809390e-09 1s 1s 667811910e-09 0s 0s 667811950e-09 1s 1s 667819670e-09 1s 1s 667822150e-09 0s 0s 667822190e-09 1s 1s 667829950e-09 1s 1s 667832390e-09 0s 0s 667832430e-09 1s 1s 667840230e-09 1s 1s 667842630e-09 0s 0s 667842670e-09 1s 1s 667850510e-09 1s 1s 667852870e-09 0s 0s 667852910e-09 1s 1s 667860790e-09 1s 1s 667863110e-09 0s 0s 667863150e-09 1s 1s 667871070e-09 1s 1s 667873350e-09 0s 0s 667873390e-09 1s 1s 667881350e-09 1s 1s 667883590e-09 0s 0s 667883630e-09 1s 1s 667891630e-09 1s 1s 667893830e-09 0s 0s 667893870e-09 1s 1s 667901910e-09 1s 1s 667904070e-09 0s 0s 667904110e-09 1s 1s 667912190e-09 1s 1s 667914310e-09 0s 0s 667914350e-09 1s 1s 667922470e-09 1s 1s 667924550e-09 0s 0s 667924590e-09 1s 1s 667932750e-09 1s 1s 667934790e-09 0s 0s 667934830e-09 1s 1s 667943030e-09 1s 1s 667945030e-09 0s 0s 667945070e-09 1s 1s 667953310e-09 1s 1s 667955270e-09 0s 0s 667955310e-09 1s 1s 667963590e-09 1s 1s 667965510e-09 0s 0s 667965550e-09 1s 1s 667973870e-09 1s 1s 667975750e-09 0s 0s 667975790e-09 1s 1s 667984150e-09 1s 1s 667985990e-09 0s 0s 667986030e-09 1s 1s 667994430e-09 1s 1s 667996230e-09 0s 0s 667996270e-09 1s 1s 668004710e-09 1s 1s 668006470e-09 0s 0s 668006510e-09 1s 1s 668014990e-09 1s 1s 668016710e-09 0s 0s 668016750e-09 1s 1s 668025270e-09 1s 1s 668026950e-09 0s 0s 668026990e-09 1s 1s 668035550e-09 1s 1s 668037190e-09 0s 0s 668037230e-09 1s 1s 668045830e-09 1s 1s 668047430e-09 0s 0s 668047470e-09 1s 1s 668056110e-09 1s 1s 668057670e-09 0s 0s 668057710e-09 1s 1s 668066390e-09 1s 1s 668067910e-09 0s 0s 668067950e-09 1s 1s 668076670e-09 1s 1s 668078150e-09 0s 0s 668078190e-09 1s 1s 668086950e-09 1s 1s 668088390e-09 0s 0s 668088430e-09 1s 1s 668097230e-09 1s 1s 668098630e-09 0s 0s 668098670e-09 1s 1s 668107510e-09 1s 1s 668108870e-09 0s 0s 668108910e-09 1s 1s 668117790e-09 1s 1s 668119110e-09 0s 0s 668119150e-09 1s 1s 668128070e-09 1s 1s 668129350e-09 0s 0s 668129390e-09 1s 1s 668138350e-09 1s 1s 668139590e-09 0s 0s 668139630e-09 1s 1s 668148630e-09 1s 1s 668149830e-09 0s 0s 668149870e-09 1s 1s 668158910e-09 1s 1s 668160070e-09 0s 0s 668160110e-09 1s 1s 668169190e-09 1s 1s 668170310e-09 0s 0s 668170350e-09 1s 1s 668179470e-09 1s 1s 668180550e-09 0s 0s 668180590e-09 1s 1s 668189750e-09 1s 1s 668190790e-09 0s 0s 668190830e-09 1s 1s 668200030e-09 1s 1s 668201030e-09 0s 0s 668201070e-09 1s 1s 668210310e-09 1s 1s 668211270e-09 0s 0s 668211310e-09 1s 1s 668220590e-09 1s 1s 668221510e-09 0s 0s 668221550e-09 1s 1s 668230870e-09 1s 1s 668231750e-09 0s 0s 668231790e-09 1s 1s 668241150e-09 1s 1s 668241990e-09 0s 0s 668242030e-09 1s 1s 668251430e-09 1s 1s 668252230e-09 0s 0s 668252270e-09 1s 1s 668261710e-09 1s 1s 668262470e-09 0s 0s 668262510e-09 1s 1s 668271990e-09 1s 1s 668272710e-09 0s 0s 668272750e-09 1s 1s 668282270e-09 1s 1s 668282950e-09 0s 0s 668282990e-09 1s 1s 668292550e-09 1s 1s 668293190e-09 0s 0s 668293230e-09 1s 1s 668302830e-09 1s 1s 668303430e-09 0s 0s 668303470e-09 1s 1s 668313110e-09 1s 1s 668313670e-09 0s 0s 668313710e-09 1s 1s 668323390e-09 1s 1s 668323910e-09 0s 0s 668323950e-09 1s 1s 668333670e-09 1s 1s 668334150e-09 0s 0s 668334190e-09 1s 1s 668343950e-09 1s 1s 668344390e-09 0s 0s 668344430e-09 1s 1s 668354230e-09 1s 1s 668354630e-09 0s 0s 668354670e-09 1s 1s 668364510e-09 1s 1s 668364870e-09 0s 0s 668364910e-09 1s 1s 668374790e-09 1s 1s 668375110e-09 0s 0s 668375150e-09 1s 1s 668385070e-09 1s 1s 668385350e-09 0s 0s 668385390e-09 1s 1s 668395350e-09 1s 1s 668395590e-09 0s 0s 668395630e-09 1s 1s 668405630e-09 1s 1s 668405830e-09 0s 0s 668405870e-09 1s 1s 668415910e-09 1s 1s 668416070e-09 0s 0s 668416110e-09 1s 1s 668426190e-09 1s 1s 668426310e-09 0s 0s 668426350e-09 1s 1s 668436470e-09 1s 1s 668436550e-09 0s 0s 668436590e-09 1s 1s 668446750e-09 1s 1s 668446790e-09 0s 0s 668446830e-09 1s 1s 668457030e-09 0s 0s 668457070e-09 1s 1s 668467270e-09 0s 0s 668467310e-09 1s 1s 668467350e-09 1s 1s 668477550e-09 1s 1s 668477630e-09 1s 1s 668487790e-09 1s 1s 668487910e-09 1s 1s 668498030e-09 1s 1s 668498190e-09 1s 1s 668508270e-09 1s 1s 668508470e-09 1s 1s 668518510e-09 1s 1s 668518750e-09 1s 1s 668528750e-09 1s 1s 668529030e-09 1s 1s 668538990e-09 1s 1s 668539310e-09 1s 1s 668549230e-09 1s 1s 668549590e-09 1s 1s 668559470e-09 1s 1s 668559870e-09 1s 1s 668569710e-09 1s 1s 668570150e-09 1s 1s 668579950e-09 1s 1s 668580430e-09 1s 1s 668590190e-09 1s 1s 668590710e-09 1s 1s 668600430e-09 1s 1s 668600990e-09 1s 1s 668610670e-09 1s 1s 668611270e-09 1s 1s 668620910e-09 1s 1s 668621550e-09 1s 1s 668631150e-09 1s 1s 668631830e-09 1s 1s 668641390e-09 1s 1s 668642110e-09 1s 1s 668651630e-09 1s 1s 668652390e-09 1s 1s 668661870e-09 1s 1s 668662670e-09 1s 1s 668672110e-09 1s 1s 668672950e-09 1s 1s 668682350e-09 1s 1s 668683230e-09 1s 1s 668692590e-09 1s 1s 668693510e-09 1s 1s 668702830e-09 1s 1s 668703790e-09 1s 1s 668713070e-09 1s 1s 668714070e-09 1s 1s 668723310e-09 1s 1s 668724350e-09 1s 1s 668733550e-09 1s 1s 668734630e-09 1s 1s 668743790e-09 1s 1s 668744910e-09 1s 1s 668754030e-09 1s 1s 668755190e-09 1s 1s 668764270e-09 1s 1s 668765470e-09 1s 1s 668774510e-09 1s 1s 668775750e-09 1s 1s 668784750e-09 1s 1s 668786030e-09 1s 1s 668794990e-09 1s 1s 668796310e-09 1s 1s 668805230e-09 1s 1s 668806590e-09 1s 1s 668815470e-09 1s 1s 668816870e-09 1s 1s 668825710e-09 1s 1s 668827150e-09 1s 1s 668835950e-09 1s 1s 668837430e-09 1s 1s 668846190e-09 1s 1s 668847710e-09 1s 1s 668856430e-09 1s 1s 668857990e-09 1s 1s 668866670e-09 1s 1s 668868270e-09 1s 1s 668876910e-09 1s 1s 668878550e-09 1s 1s 668887150e-09 1s 1s 668888830e-09 1s 1s 668897390e-09 1s 1s 668899110e-09 1s 1s 668907630e-09 1s 1s 668909390e-09 1s 1s 668917870e-09 1s 1s 668919670e-09 1s 1s 668928110e-09 1s 1s 668929950e-09 1s 1s 668938350e-09 1s 1s 668940230e-09 1s 1s 668948590e-09 1s 1s 668950510e-09 1s 1s 668958830e-09 1s 1s 668960790e-09 1s 1s 668969070e-09 1s 1s 668971070e-09 1s 1s 668979310e-09 1s 1s 668981350e-09 1s 1s 668989550e-09 1s 1s 668991630e-09 1s 1s 668999790e-09 1s 1s 669001910e-09 1s 1s 669010030e-09 1s 1s 669012190e-09 1s 1s 669020270e-09 1s 1s 669022470e-09 1s 1s 669030510e-09 1s 1s 669032750e-09 1s 1s 669040750e-09 1s 1s 669043030e-09 1s 1s 669050990e-09 1s 1s 669053310e-09 1s 1s 669061230e-09 1s 1s 669063590e-09 1s 1s 669071470e-09 1s 1s 669073870e-09 1s 1s 669081710e-09 1s 1s 669084150e-09 1s 1s 669091950e-09 1s 1s 669094430e-09 1s 1s 669102190e-09 1s 1s 669104710e-09 1s 1s 669112430e-09 1s 1s 669114990e-09 1s 1s 669122670e-09 1s 1s 669125270e-09 1s 1s 669132910e-09 1s 1s 669135550e-09 1s 1s 669143150e-09 1s 1s 669145830e-09 1s 1s 669153390e-09 1s 1s 669156110e-09 1s 1s 669163630e-09 1s 1s 669166390e-09 1s 1s 669173870e-09 1s 1s 669176670e-09 1s 1s 669184110e-09 1s 1s 669186950e-09 1s 1s 669194350e-09 1s 1s 669197230e-09 1s 1s 669204590e-09 1s 1s 669207510e-09 1s 1s 669214830e-09 1s 1s 669217790e-09 1s 1s 669225070e-09 1s 1s 669228070e-09 1s 1s 669235310e-09 1s 1s 669238350e-09 1s 1s 669245550e-09 1s 1s 669248630e-09 1s 1s 669255790e-09 1s 1s 669258910e-09 1s 1s 669266030e-09 1s 1s 669269190e-09 1s 1s 669276270e-09 1s 1s 669279470e-09 1s 1s 669286510e-09 1s 1s 669289750e-09 1s 1s 669296750e-09 1s 1s 669300030e-09 1s 1s 669306990e-09 1s 1s 669310310e-09 1s 1s 669317230e-09 1s 1s 669320590e-09 1s 1s 669327470e-09 1s 1s 669330870e-09 1s 1s 669337710e-09 1s 1s 669341150e-09 1s 1s 669347950e-09 1s 1s 669351430e-09 1s 1s 669358190e-09 1s 1s 669361710e-09 1s 1s 669368430e-09 1s 1s 669371990e-09 1s 1s 669378670e-09 1s 1s 669382270e-09 1s 1s 669388910e-09 1s 1s 669392550e-09 1s 1s 669399150e-09 1s 1s 669402830e-09 1s 1s 669409390e-09 1s 1s 669413110e-09 1s 1s 669419630e-09 1s 1s 669423390e-09 1s 1s 669429870e-09 1s 1s 669433670e-09 1s 1s 669440110e-09 1s 1s 669443950e-09 1s 1s 669450350e-09 1s 1s 669454230e-09 1s 1s 669460590e-09 1s 1s 669464510e-09 1s 1s 669470830e-09 1s 1s 669474790e-09 1s 1s 669481070e-09 1s 1s 669485070e-09 1s 1s 669491310e-09 1s 1s 669495350e-09 1s 1s 669501550e-09 1s 1s 669505630e-09 1s 1s 669511790e-09 1s 1s 669515910e-09 1s 1s 669522030e-09 1s 1s 669526190e-09 1s 1s 669532270e-09 1s 1s 669536470e-09 1s 1s 669542510e-09 1s 1s 669546750e-09 1s 1s 669552750e-09 1s 1s 669557030e-09 1s 1s 669562990e-09 1s 1s 669567310e-09 1s 1s 669573230e-09 1s 1s 669577590e-09 1s 1s 669583470e-09 1s 1s 669587870e-09 1s 1s 669593710e-09 1s 1s 669598150e-09 1s 1s 669603950e-09 1s 1s 669608430e-09 1s 1s 669614190e-09 1s 1s 669618710e-09 1s 1s 669624430e-09 1s 1s 669628990e-09 1s 1s 669634670e-09 1s 1s 669639270e-09 1s 1s 669644910e-09 1s 1s 669649550e-09 1s 1s 669655150e-09 1s 1s 669659830e-09 1s 1s 669665390e-09 1s 1s 669670110e-09 1s 1s 669675630e-09 1s 1s 669680390e-09 1s 1s 669685870e-09 1s 1s 669690670e-09 1s 1s 669696110e-09 1s 1s 669700950e-09 1s 1s 669706350e-09 1s 1s 669711230e-09 1s 1s 669716590e-09 1s 1s 669721510e-09 1s 1s 669726830e-09 1s 1s 669731790e-09 1s 1s 669737070e-09 1s 1s 669742070e-09 1s 1s 669747310e-09 1s 1s 669752350e-09 1s 1s 669757550e-09 1s 1s 669762630e-09 1s 1s 669767790e-09 1s 1s 669772910e-09 1s 1s 669778030e-09 1s 1s 669783190e-09 1s 1s 669788270e-09 1s 1s 669793470e-09 1s 1s 669798510e-09 1s 1s 669803750e-09 1s 1s 669808750e-09 1s 1s 669814030e-09 1s 1s 669818990e-09 1s 1s 669824310e-09 1s 1s 669829230e-09 1s 1s 669834590e-09 1s 1s 669839470e-09 1s 1s 669844870e-09 1s 1s 669849710e-09 1s 1s 669855150e-09 1s 1s 669859950e-09 1s 1s 669865430e-09 1s 1s 669870190e-09 1s 1s 669875710e-09 1s 1s 669880430e-09 1s 1s 669885990e-09 1s 1s 669890670e-09 1s 1s 669896270e-09 1s 1s 669900910e-09 1s 1s 669906550e-09 1s 1s 669911150e-09 1s 1s 669916830e-09 1s 1s 669921390e-09 1s 1s 669927110e-09 1s 1s 669931630e-09 1s 1s 669937390e-09 1s 1s 669941870e-09 1s 1s 669947670e-09 1s 1s 669952110e-09 1s 1s 669957950e-09 1s 1s 669962350e-09 1s 1s 669968230e-09 1s 1s 669972590e-09 1s 1s 669978510e-09 1s 1s 669982830e-09 1s 1s 669988790e-09 1s 1s 669993070e-09 1s 1s 669999070e-09 1s 1s 670003310e-09 1s 1s 670009350e-09 1s 1s 670013550e-09 1s 1s 670019630e-09 1s 1s 670023790e-09 1s 1s 670029910e-09 1s 1s 670034030e-09 1s 1s 670040190e-09 1s 1s 670044270e-09 1s 1s 670050470e-09 1s 1s 670054510e-09 1s 1s 670060750e-09 1s 1s 670064750e-09 1s 1s 670071030e-09 1s 1s 670074990e-09 1s 1s 670081310e-09 1s 1s 670085230e-09 1s 1s 670091590e-09 1s 1s 670095470e-09 1s 1s 670101870e-09 1s 1s 670105710e-09 1s 1s 670112150e-09 1s 1s 670115950e-09 1s 1s 670122430e-09 1s 1s 670126190e-09 1s 1s 670132710e-09 1s 1s 670136430e-09 1s 1s 670142990e-09 1s 1s 670146670e-09 1s 1s 670153270e-09 1s 1s 670156910e-09 1s 1s 670163550e-09 1s 1s 670167150e-09 1s 1s 670173830e-09 1s 1s 670177390e-09 1s 1s 670184110e-09 1s 1s 670187630e-09 1s 1s 670194390e-09 1s 1s 670197870e-09 1s 1s 670204670e-09 1s 1s 670208110e-09 1s 1s 670214950e-09 1s 1s 670218350e-09 1s 1s 670225230e-09 1s 1s 670228590e-09 1s 1s 670235510e-09 1s 1s 670238830e-09 1s 1s 670245790e-09 1s 1s 670249070e-09 1s 1s 670256070e-09 1s 1s 670259310e-09 1s 1s 670266350e-09 1s 1s 670269550e-09 1s 1s 670276630e-09 1s 1s 670279790e-09 1s 1s 670286910e-09 1s 1s 670290030e-09 1s 1s 670297190e-09 1s 1s 670300270e-09 1s 1s 670307470e-09 1s 1s 670310510e-09 1s 1s 670317750e-09 1s 1s 670320750e-09 1s 1s 670328030e-09 1s 1s 670330990e-09 1s 1s 670338310e-09 1s 1s 670341230e-09 1s 1s 670348590e-09 1s 1s 670351470e-09 1s 1s 670358870e-09 1s 1s 670361710e-09 1s 1s 670369150e-09 1s 1s 670371950e-09 1s 1s 670379430e-09 1s 1s 670382190e-09 1s 1s 670389710e-09 1s 1s 670392430e-09 1s 1s 670399990e-09 1s 1s 670402670e-09 1s 1s 670410270e-09 1s 1s 670412910e-09 1s 1s 670420550e-09 1s 1s 670423150e-09 1s 1s 670430830e-09 1s 1s 670433390e-09 1s 1s 670441110e-09 1s 1s 670443630e-09 1s 1s 670451390e-09 1s 1s 670453870e-09 1s 1s 670461670e-09 1s 1s 670464110e-09 1s 1s 670471950e-09 1s 1s 670474350e-09 1s 1s 670482230e-09 1s 1s 670484590e-09 1s 1s 670492510e-09 1s 1s 670494830e-09 1s 1s 670502790e-09 1s 1s 670505070e-09 1s 1s 670513070e-09 1s 1s 670515310e-09 1s 1s 670523350e-09 1s 1s 670525550e-09 1s 1s 670533630e-09 1s 1s 670535790e-09 1s 1s 670543910e-09 1s 1s 670546030e-09 1s 1s 670554190e-09 1s 1s 670556270e-09 1s 1s 670564470e-09 1s 1s 670566510e-09 1s 1s 670574750e-09 1s 1s 670576750e-09 1s 1s 670585030e-09 1s 1s 670586990e-09 1s 1s 670595310e-09 1s 1s 670597230e-09 1s 1s 670605590e-09 1s 1s 670607470e-09 1s 1s 670615870e-09 1s 1s 670617710e-09 1s 1s 670626150e-09 1s 1s 670627950e-09 1s 1s 670636430e-09 1s 1s 670638190e-09 1s 1s 670646710e-09 1s 1s 670648430e-09 1s 1s 670656990e-09 1s 1s 670658670e-09 1s 1s 670667270e-09 1s 1s 670668910e-09 1s 1s 670677550e-09 1s 1s 670679150e-09 1s 1s 670687830e-09 1s 1s 670689390e-09 1s 1s 670698110e-09 1s 1s 670699630e-09 1s 1s 670708390e-09 1s 1s 670709870e-09 1s 1s 670718670e-09 1s 1s tmpk8ny_4pz/examples/xspice/d_source/d_source.cir0000644000175000017500000000111113546075722022370 0ustar carstencarstenCode Model Test: d_source a_source3 [c1 c2 c3] d_source3 .model d_source3 d_source (input_file="./test/d_source-stimulus3.txt") a_source [a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab] d_source1 .model d_source1 d_source (input_file="d_source-stimulus.txt") a_source2 [b1 b2 b3 b4 b5 b6 b7 b8 b9 ba] d_source2 .model d_source2 d_source (input_file="d_source-stimulus2.txt") .control set noaskquit set noacct tran 100ps 30ns eprint c1 c2 c3 > $inputdir/d_s.out eprint a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab >> $inputdir/d_s.out eprint b1 b2 b3 b4 b5 b6 b7 b8 b9 ba >> $inputdir/d_s.out .endc .end tmpk8ny_4pz/examples/xspice/d_source/test/0000755000175000017500000000000013546075722021053 5ustar carstencarstentmpk8ny_4pz/examples/xspice/d_source/test/d_source-stimulus3.txt0000644000175000017500000000014213546075722025362 0ustar carstencarsten* time, c1 c2 c3 0.5n 0s 1s Us 2.5n 0r 1r Ur 4.5n 0z 1z Uz 6.0n 0u 1u Uu tmpk8ny_4pz/examples/xspice/analog_models1_transient.sp0000644000175000017500000000230113546075722023605 0ustar carstencarstenCode Model Test - Transient: gain, summer, mult, divide, pwl * * *** analysis type *** .control tran .1s 10s plot v(1) v(10) v(20) v(30) v(40) v(50) .endc * *** input sources *** * v1 1 0 DC PWL(0 0 10 10) * v2 2 0 DC 2 * *** gain block *** a1 1 10 gain1 .model gain1 gain (in_offset=0.0 gain=2.0 out_offset=0.0) * * *** summer block *** a2 [1 2] 20 summer1 .model summer1 summer (in_offset=[0.0 0.0] in_gain=[1.0 1.0] + out_gain=1.0 out_offset=0.0) * * *** mult block *** a3 [1 1] 30 mult1 .model mult1 mult (in_offset=[0.0 0.0] in_gain=[1.0 1.0] + out_gain=0.1 out_offset=0.0) * * *** divider block *** a4 2 1 40 divide1 .model divide1 divide (num_offset=0.0 num_gain=1.0 den_offset=0.0 den_gain=1.0 + den_lower_limit=0.1 den_domain=1.0e-16 + fraction=false out_gain=1.0 out_offset=0.0) * * *** pwl block *** a5 1 50 pwl1 .model pwl1 pwl (x_array=[-1.0 0.0 1.0 2.0 3.0 4.0 5.0] + y_array=[ 0.0 0.0 1.0 4.0 4.5 5.0 5.0] + input_domain=0.01 fraction=TRUE) * * *** resistors to ground *** r1 1 0 1k r2 2 0 1k r3 3 0 1k * r10 10 0 1k r20 20 0 1k r30 30 0 1k r40 40 0 1k r50 50 0 1k * * .end tmpk8ny_4pz/examples/xspice/pll/0000755000175000017500000000000013546075722017060 5ustar carstencarstentmpk8ny_4pz/examples/xspice/pll/pll-xspice-fstep.cir0000644000175000017500000001067313546075722022765 0ustar carstencarsten* pll circuit using xspice code models * three frequencies generate steps in control voltage v(cont) .param vcc=3.3 .param divisor=40 .param fref=10e6 .param fref2=9e6 .param fref3=11e6 .csparam simtime=45u .csparam f2='fref2' .csparam f3='fref3' * digital zero and one .global d_d0 d_d1 vdd dd 0 dc 'vcc' * 10 MHz reference frequency * PULSE(V1 V2 TD TR TF PW PER) vref ref 0 dc 0 pulse(0 'vcc' 10n 1n 1n '1/fref/2' '1/fref') abridgeref [ref] [d_ref] adc_vbuf .model adc_vbuf adc_bridge(in_low = 0.5 in_high = 0.5) *digital zero vzero z 0 dc 0 abridgev3 [z] [d_d0] adc_vbuf .model adc_vbuf adc_bridge(in_low = 'vcc*0.5' in_high = 'vcc*0.5') *digital one ainv1 d_d0 d_d1 invd1 .model invd1 d_inverter(rise_delay = 1e-10 fall_delay = 1e-10) * vco * buf: analog out * d_digout: digital out * cont: analog control voltage * dd: analog supply voltage *.include vco_sub.cir *xvco buf d_digout cont dd ro_vco .include vco_sub_new.cir xvco buf d_digout cont dd d_osc_vco * digital divider adiv1 d_digout d_divout divider .model divider d_fdiv(div_factor = 'divisor' high_cycles = 'divisor/2' + i_count = 4 rise_delay = 1e-10 + fall_delay = 1e-10) * frequency phase detector .include f-p-det-d-sub.cir Xfpdet d_divout d_ref d_U d_Un d_D d_Dn f-p-det * loop filter *2nd or 3rd order, transistors as switches .include loop-filter-2.cir Xlf d_Un d_D cont loopf * 2nd order, Exxxx voltage controlled current sources as 'switches' * loop filter current sources as charge pump *.include loop-filter.cir *Xlf d_U d_D cont loopfe * d to a for plotting abridge-w1 [d_divout d_ref d_Un d_D] [s1 s2 u1 d1] dac1 ; change to d_u or d_Un .model dac1 dac_bridge(out_low = 0 out_high = 1 out_undef = 0.5 + input_load = 5.0e-12 t_rise = 1e-10 + t_fall = 1e-10) .control save cont s1 s2 u1 d1 iplot cont * calculate breakpoint for switching frequency let t1_3 = simtime/3 set ti1_3 ="$&t1_3" let t2_3 = simtime/3*2 set ti2_3 ="$&t2_3" stop when time=$ti1_3 stop when time=$ti2_3 * calculate new periods for f2 let per2=1/f2 let pw2 = per2/2 let per3=1/f3 let pw3 = per3/2 *simulate tran 0.1n $&simtime 0 0.5n uic *change frequency after stopping * first pair of [] without spaces, second pair with spaces alter @vref[pulse] = [ 0 3.3 10n 1n 1n $&pw2 $&per2 ] resume *another change after second stop alter @vref[pulse] = [ 0 3.3 10n 1n 1n $&pw3 $&per3 ] resume rusage plot cont s1 s2+1.2 u1+2.4 d1+3.6 xlimit 15u 16u *plot cont .endc *model = bsim3v3 *Berkeley Spice Compatibility * Lmin= .35 Lmax= 20 Wmin= .6 Wmax= 20 .model N1 NMOS *+version = 3.2.4 +version = 3.3.0 +Level= 8 +Tnom=27.0 +Nch= 2.498E+17 Tox=9E-09 Xj=1.00000E-07 +Lint=9.36e-8 Wint=1.47e-7 +Vth0= .6322 K1= .756 K2= -3.83e-2 K3= -2.612 +Dvt0= 2.812 Dvt1= 0.462 Dvt2=-9.17e-2 +Nlx= 3.52291E-08 W0= 1.163e-6 +K3b= 2.233 +Vsat= 86301.58 Ua= 6.47e-9 Ub= 4.23e-18 Uc=-4.706281E-11 +Rdsw= 650 U0= 388.3203 wr=1 +A0= .3496967 Ags=.1 B0=0.546 B1= 1 + Dwg = -6.0E-09 Dwb = -3.56E-09 Prwb = -.213 +Keta=-3.605872E-02 A1= 2.778747E-02 A2= .9 +Voff=-6.735529E-02 NFactor= 1.139926 Cit= 1.622527E-04 +Cdsc=-2.147181E-05 +Cdscb= 0 Dvt0w = 0 Dvt1w = 0 Dvt2w = 0 + Cdscd = 0 Prwg = 0 +Eta0= 1.0281729E-02 Etab=-5.042203E-03 +Dsub= .31871233 +Pclm= 1.114846 Pdiblc1= 2.45357E-03 Pdiblc2= 6.406289E-03 +Drout= .31871233 Pscbe1= 5000000 Pscbe2= 5E-09 Pdiblcb = -.234 +Pvag= 0 delta=0.01 + Wl = 0 Ww = -1.420242E-09 Wwl = 0 + Wln = 0 Wwn = .2613948 Ll = 1.300902E-10 + Lw = 0 Lwl = 0 Lln = .316394 + Lwn = 0 +kt1=-.3 kt2=-.051 +At= 22400 +Ute=-1.48 +Ua1= 3.31E-10 Ub1= 2.61E-19 Uc1= -3.42e-10 +Kt1l=0 Prt=764.3 .model P1 PMOS *+version = 3.2.4 +version = 3.3.0 +Level= 8 +Tnom=27.0 +Nch= 3.533024E+17 Tox=9E-09 Xj=1.00000E-07 +Lint=6.23e-8 Wint=1.22e-7 +Vth0=-.6732829 K1= .8362093 K2=-8.606622E-02 K3= 1.82 +Dvt0= 1.903801 Dvt1= .5333922 Dvt2=-.1862677 +Nlx= 1.28e-8 W0= 2.1e-6 +K3b= -0.24 Prwg=-0.001 Prwb=-0.323 +Vsat= 103503.2 Ua= 1.39995E-09 Ub= 1.e-19 Uc=-2.73e-11 + Rdsw= 460 U0= 138.7609 +A0= .4716551 Ags=0.12 +Keta=-1.871516E-03 A1= .3417965 A2= 0.83 +Voff=-.074182 NFactor= 1.54389 Cit=-1.015667E-03 +Cdsc= 8.937517E-04 +Cdscb= 1.45e-4 Cdscd=1.04e-4 + Dvt0w=0.232 Dvt1w=4.5e6 Dvt2w=-0.0023 +Eta0= 6.024776E-02 Etab=-4.64593E-03 +Dsub= .23222404 +Pclm= .989 Pdiblc1= 2.07418E-02 Pdiblc2= 1.33813E-3 +Drout= .3222404 Pscbe1= 118000 Pscbe2= 1E-09 +Pvag= 0 +kt1= -0.25 kt2= -0.032 prt=64.5 +At= 33000 +Ute= -1.5 +Ua1= 4.312e-9 Ub1= 6.65e-19 Uc1= 0 +Kt1l=0 .end tmpk8ny_4pz/examples/xspice/pll/test_vco.cir0000644000175000017500000001023413546075722021405 0ustar carstencarsten* Test of VCO: frequency versus control voltage * 7 stage Ring-Osc. made of gain cells BSIM3 * P.-H. Hsieh, J. Maxey, C.-K. K. Yang, IEEE JSSC, Sept. 2009, pp. 2488 - 2495 * alternatively use d_osc code model * measure frequency of R.O. by fft .param vcc=3.3 .csparam simtime=500n vdd dd 0 dc 'vcc' vco cont 0 dc 2.5 * vco * buf: analog out * d_digout: digital out * cont: analog control voltage * dd: analog supply voltage *.include vco_sub.cir *xvco buf d_digout cont dd ro_vco .include vco_sub_new.cir xvco buf d_digout cont dd d_osc_vco .option noacct .control set xtrtol=2 set dt = $curplot set curplot = new set curplottitle = "Frequency versus voltage" set freq_volt = $curplot $ store its name to 'freq_volt' setplot $freq_volt let vcovec=vector(5) let foscvec=vector(5) setplot $dt alter vco 0.5 tran 0.1n $&simtime 0 let {$freq_volt}.vcovec[0]=v(cont) linearize buf fft buf * start meas at freq > 0 to skip large dc part meas sp fosc MAX_AT buf from=1e3 to=1e9 let {$freq_volt}.foscvec[0]=fosc plot d_digout xlimit 140n 160n reset alter vco 1 tran 0.1n $&simtime 0 let {$freq_volt}.vcovec[1]=v(cont) linearize buf fft buf meas sp fosc MAX_AT buf from=1e3 to=1e9 let {$freq_volt}.foscvec[1]=fosc plot d_digout xlimit 140n 160n reset alter vco 1.5 tran 0.1n $&simtime 0 let {$freq_volt}.vcovec[2]=v(cont) linearize buf fft buf meas sp fosc MAX_AT buf from=1e3 to=1e9 let {$freq_volt}.foscvec[2]=fosc plot d_digout xlimit 140n 160n reset alter vco 2 tran 0.1n $&simtime 0 let {$freq_volt}.vcovec[3]=v(cont) linearize buf fft buf meas sp fosc MAX_AT buf from=1e3 to=1e9 let {$freq_volt}.foscvec[3]=fosc plot d_digout xlimit 140n 160n reset alter vco 2.5 tran 0.1n $&simtime 0 let {$freq_volt}.vcovec[4]=v(cont) linearize buf fft buf meas sp fosc MAX_AT buf from=1e3 to=1e9 let {$freq_volt}.foscvec[4]=fosc plot d_digout xlimit 140n 160n plot tran1.buf tran3.buf tran5.buf tran7.buf tran9.buf xlimit 140n 160n plot mag(sp2.buf) mag(sp4.buf) mag(sp6.buf) mag(sp8.buf) mag(sp10.buf) xlimit 100e6 1100e6 setplot $freq_volt settype frequency foscvec settype voltage vcovec plot foscvec vs vcovec print vcovec foscvec rusage .endc *model = bsim3v3 *Berkeley Spice Compatibility * Lmin= .35 Lmax= 20 Wmin= .6 Wmax= 20 .model N1 NMOS *+version = 3.2.4 +version = 3.3.0 +Level= 8 +Tnom=27.0 +Nch= 2.498E+17 Tox=9E-09 Xj=1.00000E-07 +Lint=9.36e-8 Wint=1.47e-7 +Vth0= .6322 K1= .756 K2= -3.83e-2 K3= -2.612 +Dvt0= 2.812 Dvt1= 0.462 Dvt2=-9.17e-2 +Nlx= 3.52291E-08 W0= 1.163e-6 +K3b= 2.233 +Vsat= 86301.58 Ua= 6.47e-9 Ub= 4.23e-18 Uc=-4.706281E-11 +Rdsw= 650 U0= 388.3203 wr=1 +A0= .3496967 Ags=.1 B0=0.546 B1= 1 + Dwg = -6.0E-09 Dwb = -3.56E-09 Prwb = -.213 +Keta=-3.605872E-02 A1= 2.778747E-02 A2= .9 +Voff=-6.735529E-02 NFactor= 1.139926 Cit= 1.622527E-04 +Cdsc=-2.147181E-05 +Cdscb= 0 Dvt0w = 0 Dvt1w = 0 Dvt2w = 0 + Cdscd = 0 Prwg = 0 +Eta0= 1.0281729E-02 Etab=-5.042203E-03 +Dsub= .31871233 +Pclm= 1.114846 Pdiblc1= 2.45357E-03 Pdiblc2= 6.406289E-03 +Drout= .31871233 Pscbe1= 5000000 Pscbe2= 5E-09 Pdiblcb = -.234 +Pvag= 0 delta=0.01 + Wl = 0 Ww = -1.420242E-09 Wwl = 0 + Wln = 0 Wwn = .2613948 Ll = 1.300902E-10 + Lw = 0 Lwl = 0 Lln = .316394 + Lwn = 0 +kt1=-.3 kt2=-.051 +At= 22400 +Ute=-1.48 +Ua1= 3.31E-10 Ub1= 2.61E-19 Uc1= -3.42e-10 +Kt1l=0 Prt=764.3 .model P1 PMOS *+version = 3.2.4 +version = 3.3.0 +Level= 8 +Tnom=27.0 +Nch= 3.533024E+17 Tox=9E-09 Xj=1.00000E-07 +Lint=6.23e-8 Wint=1.22e-7 +Vth0=-.6732829 K1= .8362093 K2=-8.606622E-02 K3= 1.82 +Dvt0= 1.903801 Dvt1= .5333922 Dvt2=-.1862677 +Nlx= 1.28e-8 W0= 2.1e-6 +K3b= -0.24 Prwg=-0.001 Prwb=-0.323 +Vsat= 103503.2 Ua= 1.39995E-09 Ub= 1.e-19 Uc=-2.73e-11 + Rdsw= 460 U0= 138.7609 +A0= .4716551 Ags=0.12 +Keta=-1.871516E-03 A1= .3417965 A2= 0.83 +Voff=-.074182 NFactor= 1.54389 Cit=-1.015667E-03 +Cdsc= 8.937517E-04 +Cdscb= 1.45e-4 Cdscd=1.04e-4 + Dvt0w=0.232 Dvt1w=4.5e6 Dvt2w=-0.0023 +Eta0= 6.024776E-02 Etab=-4.64593E-03 +Dsub= .23222404 +Pclm= .989 Pdiblc1= 2.07418E-02 Pdiblc2= 1.33813E-3 +Drout= .3222404 Pscbe1= 118000 Pscbe2= 1E-09 +Pvag= 0 +kt1= -0.25 kt2= -0.032 prt=64.5 +At= 33000 +Ute= -1.5 +Ua1= 4.312e-9 Ub1= 6.65e-19 Uc1= 0 +Kt1l=0 .end tmpk8ny_4pz/examples/xspice/pll/vco_sub.cir0000644000175000017500000000454513546075722021227 0ustar carstencarsten* VCO: 7 stage Ring-Osc. made of gain cells BSIM3 * P.-H. Hsieh, J. Maxey, C.-K. K. Yang, IEEE JSSC, Sept. 2009, pp. 2488 - 2495 * 150 MHz to 900 MHz with control voltage 2.5 to 0.5 V at 3.3 V supply * BSIM 3 model data for transistors in main file pll-xspice.cir ***** ring oscillator as voltage controlled oscillator *************** * name: ro_vco * aout analog out * dout digital out * cont control voltage * dd supply voltage .subckt ro_vco aout dout cont dd * ignition circuit (not needed) * feedback between in and out, pulse to help start oscillation vin inm1 outp7 dc 0 *vin inm1 outp7 dc 2.5 pulse 2.5 0 0.1n 5n 1 1 1 *vin2 inp1 outp7 dc -0.5 pulse -0.5 0 0.1n 5n 1 1 1 vin2 inp1 outm7 dc 0 vss ss 0 dc 0 ve sub 0 dc 0 vpe well 0 dc 3.3 * gain cell .subckt gaincell dd ss sub well co in- in+ out- out+ mn1 out- in+ ss sub n1 w=2u l=0.35u AS=3p AD=3p PS=4u PD=4u mn2 out- out+ ss sub n1 w=2u l=0.35u AS=3p AD=3p PS=4u PD=4u mn3 out+ out- ss sub n1 w=2u l=0.35u AS=3p AD=3p PS=4u PD=4u mn4 out+ in- ss sub n1 w=2u l=0.35u AS=3p AD=3p PS=4u PD=4u mp1 out- co dd well p1 w=4u l=0.35u AS=7p AD=7p PS=6u PD=6u mp2 out+ co dd well p1 w=4u l=0.35u AS=7p AD=7p PS=6u PD=6u .ends gaincell * inverter .subckt inv2 dd ss sub well in out mn1 out in ss sub n1 w=6u l=0.35u AS=12p AD=12p PS=16u PD=16u mp1 out in dd well p1 w=12u l=0.35u AS=24p AD=24p PS=28u PD=28u .ends inv2 * inverter .subckt inv1 dd ss sub well in out mn1 out in ss sub n1 w=2u l=0.35u AS=3p AD=3p PS=4u PD=4u mp1 out in dd well p1 w=4u l=0.35u AS=7p AD=7p PS=6u PD=6u .ends inv1 * chain of 25 inverters + output buffer xinv1 dd ss sub well cont inm1 inp1 outm1 outp1 gaincell xinv2 dd ss sub well cont outp1 outm1 outm2 outp2 gaincell xinv3 dd ss sub well cont outp2 outm2 outm3 outp3 gaincell xinv4 dd ss sub well cont outp3 outm3 outm4 outp4 gaincell xinv5 dd ss sub well cont outp4 outm4 outm5 outp5 gaincell xinv6 dd ss sub well cont outp5 outm5 outm6 outp6 gaincell xinv7 dd ss sub well cont outp6 outm6 outm7 outp7 gaincell * analog out (two stage buffer) xinv11 dd 0 sub well outm1 outm2 inv1 xinv12 dd 0 sub well outm2 aout inv2 cout aout 0 0.2pF *digital out abridge1 [aout] [dout] adc_buff .model adc_buff adc_bridge(in_low = 'vcc*0.5' in_high = 'vcc*0.5') .ends ro_vco ****************************************************************** tmpk8ny_4pz/examples/xspice/pll/loop-filter.cir0000644000175000017500000000123513546075722022014 0ustar carstencarsten* loop filter for pll * in: d_up d_down digital data * out: vout, vco control voltage * according to http://www.uwe-kerwien.de/pll/pll-schleifenfilter.htm .subckt loopfe d_U d_D vout .param loadcur=5m .param initcond=2.5 v1 vtop 0 1 v2 vbot 0 -1 abridge-f1 [d_U d_D] [u1 d1] dac1 .model dac1 dac_bridge(out_low = 0 out_high = 1 out_undef = 0.5 + input_load = 5.0e-12 t_rise = 1e-10 + t_fall = 1e-10) *top switched current source Gtop vtop vout cur='loadcur*v(u1)' *bottom switched current source Gbot vout vbot cur='loadcur*v(d1)' *passive filter elements .ic v(vout)='initcond' v(c1)='initcond' R2 vout c1 200 C1 c1 0 5n C2 vout 0 5n Rshunt vout 0 10000k .ends tmpk8ny_4pz/examples/xspice/pll/README0000644000175000017500000000211213546075722017734 0ustar carstencarstenThis directory contains a mixed mode pll, combining ngspice and XSPICE circuit blocks. The pll consists of the following blocks: ** voltage controlled oscillator: vco_sub.cir 7 stage ring oscillator with gain cells, CMOS devices or vco_sub_new.cir vco made from code model d_osc, cntl_array/freq_array data are gained by running test-vco.cir with vco_sub.cir ** digital divider and frequency reference: pll-xspice.cir ** phase frequency detector: f-p-det-d-sub.cir ** loop filter: loop-filter.cir switched current sources as charge pump, 2nd order passive RC filter or loop-filter-2.cir transistors as switches for charge pump, 2nd or 3rd order passive RC filters ** main simulation control: pll-xspice.cir Two test files are included: test-vco.cir simulates vco frequency versus control voltage test-f-p-det.cir simulates the phase frequency detector and the loop filter. The main building blocks are organised as subcircuits. main simulation control with three reference frequencies: pll-xspice-fstep.cir simulates two steps of the reference in one simulation run tmpk8ny_4pz/examples/xspice/pll/f-p-det-d-sub.cir0000644000175000017500000000073413546075722022027 0ustar carstencarsten* frequency-phase detector according to * http://www.uwe-kerwien.de/pll/pll-phasenvergleich.htm .subckt f-p-det d_R d_V d_U d_U_ d_D d_D_ aa1 [d_U d_D] d_rset and1 .model and1 d_and(rise_delay = 1e-10 fall_delay = 0.1e-9 + input_load = 0.5e-12) ad1 d_d1 d_R d_d0 d_rset d_U d_U_ flop1 ad2 d_d1 d_V d_d0 d_rset d_D d_D_ flop1 .model flop1 d_dff(clk_delay = 1.0e-10 set_delay = 1.0e-10 + reset_delay = 1.0e-10 ic = 2 rise_delay = 1.0e-10 + fall_delay = 1e-10) .ends f-p-det tmpk8ny_4pz/examples/xspice/pll/loop-filter-2.cir0000644000175000017500000000243313546075722022154 0ustar carstencarsten* loop filter for pll * in: d_up d_down digital data * out: vout, vco control voltage * using transistors to switch current * according to http://www.uwe-kerwien.de/pll/pll-schleifenfilter.htm * digital input d_Un d_D * anlog output vout .subckt loopf d_Un d_D vout .param initcond=2.5 vdd dd 0 dc 'vcc' vss ss 0 dc 0 * "driver" circuit, digital in, analog out abridge-f1 [d_Un d_D] [u1n d1] dac1 .model dac1 dac_bridge(out_low = 0 out_high = 'vcc' out_undef = 'vcc/2' + input_load = 5.0e-12 t_rise = 1e-10 + t_fall = 1e-10) * uses BSIM3 model parameters from pll-xspice_2.cir * transistors as switches mnd dra d1 ss ss n1 w=12u l=0.35u AS=24p AD=24p PS=28u PD=28u mpd dra u1n dd dd p1 w=24u l=0.35u AS=48p AD=48p PS=52u PD=52u *** passive filter elements *** *third order filter *parameters absolutely _not_ optimised *better check * http://www.national.com/assets/en/boards/deansbook4.pdf *to do so .ic v(vout)='initcond' v(c1)='initcond' v(dra)='initcond' v(int1)='initcond' v(u1n)='vcc' v(d1)=0 R1 dra int1 300 R2 int1 c1 200 C1 c1 0 10n C2 int1 0 5n R3 int1 vout 50 C3 vout 0 0.5n *second order filter *parameters not optimized *.ic v(vout)='initcond' v(c1)='initcond' v(dra)='initcond' v(u1n)='vcc' v(d1)=0 *R1 dra vout 300 *R2 vout c1 200 *C1 c1 0 10n *C2 vout 0 5n .ends loopf tmpk8ny_4pz/examples/xspice/pll/test-f-p-det.cir0000644000175000017500000000615113546075722021773 0ustar carstencarsten* test frequency-phase detector similar to 12040 .param vcc=3.3 .global d_d0 d_d1 *PULSE(V1 V2 TD TR TF PW PER) v1 1 0 dc 0 pulse(0 'vcc' 10n 1n 1n 10n 20n) v2 2 0 dc 0 pulse(0 'vcc' 8n 1n 1n 10n 20n) *digital zero v3 3 0 dc 0 abridgev1 [1 2 3] [d_sig1 d_sig2 d_d0] adc_vbuf .model adc_vbuf adc_bridge(in_low = 'vcc*0.5' in_high = 'vcc*0.5') *digital one ainv1 d_d0 d_d1 invd1 .model invd1 d_inverter(rise_delay = 1e-10 fall_delay = 1e-10) Xfpdet d_sig1 d_sig2 d_U d_Un d_D d_Dn f-p-det *.include f-p-det-sub.cir .include f-p-det-d-sub.cir * d to a for plotting abridge-w1 [d_sig1 d_sig2 d_U d_D] [s1 s2 u1 d1] dac1 .model dac1 dac_bridge(out_low = 0 out_high = 1 out_undef = 0.5 + input_load = 5.0e-12 t_rise = 1e-10 + t_fall = 1e-10) * loop filters *2nd or 3rd order, transistors as switches .include loop-filter-2.cir Xlf d_Un d_D cont loopf * 2nd order, Exxxx voltage controlled current sources as 'switches' * loop filter current sources as charge pump *.include loop-filter.cir *Xlf d_U d_D cont loopfe .control set xtrtol=2 tran 0.1n 1000n plot s1 s2+1.2 u1+2.4 d1+3.6 xlimit 140n 200n .endc *model = bsim3v3 *Berkeley Spice Compatibility * Lmin= .35 Lmax= 20 Wmin= .6 Wmax= 20 .model N1 NMOS *+version = 3.2.4 +version = 3.3.0 +Level= 8 +Tnom=27.0 +Nch= 2.498E+17 Tox=9E-09 Xj=1.00000E-07 +Lint=9.36e-8 Wint=1.47e-7 +Vth0= .6322 K1= .756 K2= -3.83e-2 K3= -2.612 +Dvt0= 2.812 Dvt1= 0.462 Dvt2=-9.17e-2 +Nlx= 3.52291E-08 W0= 1.163e-6 +K3b= 2.233 +Vsat= 86301.58 Ua= 6.47e-9 Ub= 4.23e-18 Uc=-4.706281E-11 +Rdsw= 650 U0= 388.3203 wr=1 +A0= .3496967 Ags=.1 B0=0.546 B1= 1 + Dwg = -6.0E-09 Dwb = -3.56E-09 Prwb = -.213 +Keta=-3.605872E-02 A1= 2.778747E-02 A2= .9 +Voff=-6.735529E-02 NFactor= 1.139926 Cit= 1.622527E-04 +Cdsc=-2.147181E-05 +Cdscb= 0 Dvt0w = 0 Dvt1w = 0 Dvt2w = 0 + Cdscd = 0 Prwg = 0 +Eta0= 1.0281729E-02 Etab=-5.042203E-03 +Dsub= .31871233 +Pclm= 1.114846 Pdiblc1= 2.45357E-03 Pdiblc2= 6.406289E-03 +Drout= .31871233 Pscbe1= 5000000 Pscbe2= 5E-09 Pdiblcb = -.234 +Pvag= 0 delta=0.01 + Wl = 0 Ww = -1.420242E-09 Wwl = 0 + Wln = 0 Wwn = .2613948 Ll = 1.300902E-10 + Lw = 0 Lwl = 0 Lln = .316394 + Lwn = 0 +kt1=-.3 kt2=-.051 +At= 22400 +Ute=-1.48 +Ua1= 3.31E-10 Ub1= 2.61E-19 Uc1= -3.42e-10 +Kt1l=0 Prt=764.3 .model P1 PMOS *+version = 3.2.4 +version = 3.3.0 +Level= 8 +Tnom=27.0 +Nch= 3.533024E+17 Tox=9E-09 Xj=1.00000E-07 +Lint=6.23e-8 Wint=1.22e-7 +Vth0=-.6732829 K1= .8362093 K2=-8.606622E-02 K3= 1.82 +Dvt0= 1.903801 Dvt1= .5333922 Dvt2=-.1862677 +Nlx= 1.28e-8 W0= 2.1e-6 +K3b= -0.24 Prwg=-0.001 Prwb=-0.323 +Vsat= 103503.2 Ua= 1.39995E-09 Ub= 1.e-19 Uc=-2.73e-11 + Rdsw= 460 U0= 138.7609 +A0= .4716551 Ags=0.12 +Keta=-1.871516E-03 A1= .3417965 A2= 0.83 +Voff=-.074182 NFactor= 1.54389 Cit=-1.015667E-03 +Cdsc= 8.937517E-04 +Cdscb= 1.45e-4 Cdscd=1.04e-4 + Dvt0w=0.232 Dvt1w=4.5e6 Dvt2w=-0.0023 +Eta0= 6.024776E-02 Etab=-4.64593E-03 +Dsub= .23222404 +Pclm= .989 Pdiblc1= 2.07418E-02 Pdiblc2= 1.33813E-3 +Drout= .3222404 Pscbe1= 118000 Pscbe2= 1E-09 +Pvag= 0 +kt1= -0.25 kt2= -0.032 prt=64.5 +At= 33000 +Ute= -1.5 +Ua1= 4.312e-9 Ub1= 6.65e-19 Uc1= 0 +Kt1l=0 .end tmpk8ny_4pz/examples/xspice/pll/pll-xspice.cir0000644000175000017500000000773013546075722021646 0ustar carstencarsten* pll circuit using xspice code models * output frequency 400 MHz * locked to a 1 or 10 MHz reference .param vcc=3.3 .param divisor=40 .param fref=10e6 .csparam simtime=25u .global d_d0 d_d1 vdd dd 0 dc 'vcc' *vco cont 0 dc 1.9 *PULSE(V1 V2 TD TR TF PW PER) * reference frequency selected by param fref * PULSE(V1 V2 TD TR TF PW PER) vref ref 0 dc 0 pulse(0 'vcc' 10n 1n 1n '1/fref/2' '1/fref') abridgeref [ref] [d_ref] adc_vbuf .model adc_vbuf adc_bridge(in_low = 0.5 in_high = 0.5) *digital zero vzero z 0 dc 0 abridgev3 [z] [d_d0] adc_vbuf .model adc_vbuf adc_bridge(in_low = 'vcc*0.5' in_high = 'vcc*0.5') *digital one ainv1 d_d0 d_d1 invd1 .model invd1 d_inverter(rise_delay = 1e-10 fall_delay = 1e-10) * vco * buf: analog out * d_digout: digital out * cont: analog control voltage * dd: analog supply voltage *.include vco_sub.cir *xvco buf d_digout cont dd ro_vco .include vco_sub_new.cir xvco buf d_digout cont dd d_osc_vco * digital divider adiv1 d_digout d_divout divider .model divider d_fdiv(div_factor = 'divisor' high_cycles = 'divisor/2' + i_count = 4 rise_delay = 1e-10 + fall_delay = 1e-10) * frequency phase detector .include f-p-det-d-sub.cir Xfpdet d_divout d_ref d_U d_Un d_D d_Dn f-p-det * loop filters *2nd or 3rd order, transistors as switches .include loop-filter-2.cir Xlf d_Un d_D cont loopf * 2nd order, Exxxx voltage controlled current sources as 'switches' * loop filter current sources as charge pump *.include loop-filter.cir *Xlf d_U d_D cont loopfe * d to a for plotting abridge-w1 [d_divout d_ref d_Un d_D] [s1 s2 u1n d1] dac1 ; change to d_u or d_Un .model dac1 dac_bridge(out_low = 0 out_high = 1 out_undef = 0.5 + input_load = 5.0e-12 t_rise = 1e-10 + t_fall = 1e-10) .control save cont s1 s2 u1n d1 v.xlf.vdd#branch; to save memory iplot cont tran 0.1n $&simtime uic rusage plot cont s1 s2+1.2 u1n+2.4 d1+3.6 xlimit 4u 5u plot v.xlf.vdd#branch xlimit 4u 5u ylimit -8m 2m *plot cont .endc *model = bsim3v3 *Berkeley Spice Compatibility * Lmin= .35 Lmax= 20 Wmin= .6 Wmax= 20 .model N1 NMOS *+version = 3.2.4 +version = 3.3.0 +Level= 8 +Tnom=27.0 +Nch= 2.498E+17 Tox=9E-09 Xj=1.00000E-07 +Lint=9.36e-8 Wint=1.47e-7 +Vth0= .6322 K1= .756 K2= -3.83e-2 K3= -2.612 +Dvt0= 2.812 Dvt1= 0.462 Dvt2=-9.17e-2 +Nlx= 3.52291E-08 W0= 1.163e-6 +K3b= 2.233 +Vsat= 86301.58 Ua= 6.47e-9 Ub= 4.23e-18 Uc=-4.706281E-11 +Rdsw= 650 U0= 388.3203 wr=1 +A0= .3496967 Ags=.1 B0=0.546 B1= 1 + Dwg = -6.0E-09 Dwb = -3.56E-09 Prwb = -.213 +Keta=-3.605872E-02 A1= 2.778747E-02 A2= .9 +Voff=-6.735529E-02 NFactor= 1.139926 Cit= 1.622527E-04 +Cdsc=-2.147181E-05 +Cdscb= 0 Dvt0w = 0 Dvt1w = 0 Dvt2w = 0 + Cdscd = 0 Prwg = 0 +Eta0= 1.0281729E-02 Etab=-5.042203E-03 +Dsub= .31871233 +Pclm= 1.114846 Pdiblc1= 2.45357E-03 Pdiblc2= 6.406289E-03 +Drout= .31871233 Pscbe1= 5000000 Pscbe2= 5E-09 Pdiblcb = -.234 +Pvag= 0 delta=0.01 + Wl = 0 Ww = -1.420242E-09 Wwl = 0 + Wln = 0 Wwn = .2613948 Ll = 1.300902E-10 + Lw = 0 Lwl = 0 Lln = .316394 + Lwn = 0 +kt1=-.3 kt2=-.051 +At= 22400 +Ute=-1.48 +Ua1= 3.31E-10 Ub1= 2.61E-19 Uc1= -3.42e-10 +Kt1l=0 Prt=764.3 .model P1 PMOS *+version = 3.2.4 +version = 3.3.0 +Level= 8 +Tnom=27.0 +Nch= 3.533024E+17 Tox=9E-09 Xj=1.00000E-07 +Lint=6.23e-8 Wint=1.22e-7 +Vth0=-.6732829 K1= .8362093 K2=-8.606622E-02 K3= 1.82 +Dvt0= 1.903801 Dvt1= .5333922 Dvt2=-.1862677 +Nlx= 1.28e-8 W0= 2.1e-6 +K3b= -0.24 Prwg=-0.001 Prwb=-0.323 +Vsat= 103503.2 Ua= 1.39995E-09 Ub= 1.e-19 Uc=-2.73e-11 + Rdsw= 460 U0= 138.7609 +A0= .4716551 Ags=0.12 +Keta=-1.871516E-03 A1= .3417965 A2= 0.83 +Voff=-.074182 NFactor= 1.54389 Cit=-1.015667E-03 +Cdsc= 8.937517E-04 +Cdscb= 1.45e-4 Cdscd=1.04e-4 + Dvt0w=0.232 Dvt1w=4.5e6 Dvt2w=-0.0023 +Eta0= 6.024776E-02 Etab=-4.64593E-03 +Dsub= .23222404 +Pclm= .989 Pdiblc1= 2.07418E-02 Pdiblc2= 1.33813E-3 +Drout= .3222404 Pscbe1= 118000 Pscbe2= 1E-09 +Pvag= 0 +kt1= -0.25 kt2= -0.032 prt=64.5 +At= 33000 +Ute= -1.5 +Ua1= 4.312e-9 Ub1= 6.65e-19 Uc1= 0 +Kt1l=0 .end tmpk8ny_4pz/examples/xspice/pll/vco_sub_new.cir0000644000175000017500000000173213546075722022073 0ustar carstencarsten***** XSPICE digital controlled oscillator d_osc as vco *************** * 150 MHz to 900 MHz * name: d_osc_vco * aout analog out * dout digital out * cont control voltage * dd supply voltage .subckt d_osc_vco aout dout cont dd * curve fitting to ro_vco 'measured' data Bfit fitted 0 v = (-58256685.71*v(cont)*v(cont) - 186386142.9*v(cont) + 988722980)/10. *a5 fitted dout var_clock *.model var_clock d_osc(cntl_array = [1.0e7 5.0e7 9.0e7] *+ freq_array = [1.0e8 5.0e8 9.0e8] * linear interpolation, input data from measured ro vco a5 cont dout var_clock .model var_clock d_osc(cntl_array = [0.5 1 1.5 2 2.5] + freq_array = [8.790820e+008 7.472197e+008 5.799500e+008 3.772727e+008 1.611650e+008] + duty_cycle = 0.5 init_phase = 180.0 + rise_delay = 1e-10 fall_delay=1e-10) *generate an analog output for plotting abridge-fit [dout] [aout] dac1 .model dac1 dac_bridge(out_low = 0 out_high = 1 out_undef = 0.5 + input_load = 5.0e-12 t_rise = 1e-10 + t_fall = 1e-10) .ends d_osc_vco tmpk8ny_4pz/examples/xspice/table/0000755000175000017500000000000013546075722017360 5ustar carstencarstentmpk8ny_4pz/examples/xspice/table/bsim4n-2d-1.table0000644000175000017500000146436313546075722022247 0ustar carstencarsten*table for mos bsim 4 *x 191 *y 191 *x row -0.1 -0.09 -0.08 -0.07 -0.06 -0.05 -0.04 -0.03 -0.02 -0.01 -1.04083E-17 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 *y column -0.1 -0.09 -0.08 -0.07 -0.06 -0.05 -0.04 -0.03 -0.02 -0.01 -1.04083E-17 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 -1.59139E-08 -1.09661E-08 -7.51975E-09 -5.12447E-09 -3.46062E-09 -2.30207E-09 -1.48954E-09 -9.12644E-10 -4.98778E-10 -2.03982E-10 -1.7633E-12 1.37412E-10 2.3399E-10 2.96452E-10 3.34913E-10 3.58568E-10 3.73876E-10 3.8462E-10 3.92833E-10 3.9959E-10 4.05469E-10 4.10796E-10 4.15762E-10 4.20481E-10 4.25029E-10 4.29452E-10 4.33785E-10 4.3805E-10 4.42262E-10 4.46435E-10 4.50577E-10 4.54695E-10 4.58794E-10 4.62878E-10 4.6695E-10 4.71013E-10 4.75069E-10 4.79119E-10 4.83166E-10 4.87209E-10 4.91251E-10 4.95292E-10 4.99332E-10 5.03373E-10 5.07415E-10 5.11458E-10 5.15502E-10 5.19549E-10 5.23598E-10 5.2765E-10 5.31704E-10 5.35761E-10 5.39821E-10 5.43885E-10 5.47952E-10 5.52023E-10 5.56098E-10 5.60176E-10 5.64258E-10 5.68344E-10 5.72434E-10 5.76529E-10 5.80627E-10 5.84729E-10 5.88836E-10 5.92947E-10 5.97063E-10 6.01182E-10 6.05306E-10 6.09435E-10 6.13568E-10 6.17705E-10 6.21847E-10 6.25993E-10 6.30144E-10 6.34299E-10 6.38459E-10 6.42623E-10 6.46792E-10 6.50966E-10 6.55143E-10 6.59326E-10 6.63513E-10 6.67704E-10 6.719E-10 6.76101E-10 6.80306E-10 6.84516E-10 6.8873E-10 6.92949E-10 6.97172E-10 7.014E-10 7.05632E-10 7.09869E-10 7.14111E-10 7.18357E-10 7.22608E-10 7.26863E-10 7.31123E-10 7.35388E-10 7.39657E-10 7.43931E-10 7.48209E-10 7.52492E-10 7.5678E-10 7.61072E-10 7.65369E-10 7.69671E-10 7.73978E-10 7.78289E-10 7.82605E-10 7.86926E-10 7.91251E-10 7.95582E-10 7.99917E-10 8.04257E-10 8.08602E-10 8.12952E-10 8.17307E-10 8.21667E-10 8.26033E-10 8.30403E-10 8.34778E-10 8.39159E-10 8.43545E-10 8.47936E-10 8.52332E-10 8.56734E-10 8.61142E-10 8.65555E-10 8.69973E-10 8.74397E-10 8.78827E-10 8.83263E-10 8.87705E-10 8.92152E-10 8.96606E-10 9.01065E-10 9.05531E-10 9.10003E-10 9.14482E-10 9.18967E-10 9.23459E-10 9.27957E-10 9.32463E-10 9.36975E-10 9.41494E-10 9.4602E-10 9.50554E-10 9.55095E-10 9.59644E-10 9.64201E-10 9.68765E-10 9.73337E-10 9.77918E-10 9.82507E-10 9.87105E-10 9.91711E-10 9.96326E-10 1.00095E-09 1.00558E-09 1.01023E-09 1.01488E-09 1.01954E-09 1.02422E-09 1.0289E-09 1.0336E-09 1.0383E-09 1.04302E-09 1.04775E-09 1.05249E-09 1.05724E-09 1.06201E-09 1.06678E-09 1.07158E-09 1.07638E-09 1.0812E-09 1.08604E-09 1.09088E-09 1.09575E-09 1.10063E-09 1.10553E-09 1.11044E-09 1.11537E-09 1.12032E-09 1.12529E-09 1.13027E-09 1.13528E-09 1.14031E-09 1.14536E-09 1.15043E-09 -2.09962E-08 -1.44989E-08 -9.96104E-09 -6.79942E-09 -4.59842E-09 -3.06281E-09 -1.98385E-09 -1.21647E-09 -6.65041E-10 -2.71643E-10 -1.37794E-12 1.84782E-10 3.13966E-10 3.97515E-10 4.4896E-10 4.80601E-10 5.01077E-10 5.15448E-10 5.26434E-10 5.35472E-10 5.43336E-10 5.50462E-10 5.57103E-10 5.63416E-10 5.69498E-10 5.75415E-10 5.81211E-10 5.86915E-10 5.9255E-10 5.98131E-10 6.03672E-10 6.0918E-10 6.14662E-10 6.20124E-10 6.25571E-10 6.31005E-10 6.3643E-10 6.41848E-10 6.4726E-10 6.52669E-10 6.58075E-10 6.6348E-10 6.68884E-10 6.74289E-10 6.79695E-10 6.85103E-10 6.90513E-10 6.95926E-10 7.01341E-10 7.0676E-10 7.12183E-10 7.1761E-10 7.23041E-10 7.28476E-10 7.33917E-10 7.39361E-10 7.44811E-10 7.50266E-10 7.55726E-10 7.61192E-10 7.66662E-10 7.72139E-10 7.7762E-10 7.83108E-10 7.88601E-10 7.941E-10 7.99604E-10 8.05114E-10 8.10631E-10 8.16153E-10 8.21681E-10 8.27214E-10 8.32754E-10 8.383E-10 8.43852E-10 8.4941E-10 8.54974E-10 8.60544E-10 8.66119E-10 8.71701E-10 8.7729E-10 8.82884E-10 8.88484E-10 8.9409E-10 8.99702E-10 9.05321E-10 9.10945E-10 9.16576E-10 9.22212E-10 9.27855E-10 9.33504E-10 9.39159E-10 9.4482E-10 9.50487E-10 9.5616E-10 9.6184E-10 9.67525E-10 9.73217E-10 9.78915E-10 9.84619E-10 9.90329E-10 9.96045E-10 1.00177E-09 1.0075E-09 1.01323E-09 1.01897E-09 1.02472E-09 1.03047E-09 1.03623E-09 1.042E-09 1.04777E-09 1.05355E-09 1.05934E-09 1.06513E-09 1.07093E-09 1.07673E-09 1.08254E-09 1.08836E-09 1.09419E-09 1.10002E-09 1.10585E-09 1.1117E-09 1.11755E-09 1.12341E-09 1.12928E-09 1.13515E-09 1.14103E-09 1.14692E-09 1.15281E-09 1.15871E-09 1.16462E-09 1.17054E-09 1.17646E-09 1.1824E-09 1.18834E-09 1.19428E-09 1.20024E-09 1.2062E-09 1.21218E-09 1.21816E-09 1.22415E-09 1.23014E-09 1.23615E-09 1.24216E-09 1.24819E-09 1.25422E-09 1.26027E-09 1.26632E-09 1.27238E-09 1.27845E-09 1.28454E-09 1.29063E-09 1.29673E-09 1.30284E-09 1.30897E-09 1.3151E-09 1.32125E-09 1.32741E-09 1.33358E-09 1.33976E-09 1.34596E-09 1.35216E-09 1.35838E-09 1.36462E-09 1.37086E-09 1.37712E-09 1.3834E-09 1.38969E-09 1.39599E-09 1.40231E-09 1.40865E-09 1.415E-09 1.42136E-09 1.42775E-09 1.43415E-09 1.44057E-09 1.44701E-09 1.45347E-09 1.45994E-09 1.46644E-09 1.47296E-09 1.4795E-09 1.48606E-09 1.49264E-09 1.49925E-09 1.50588E-09 1.51254E-09 1.51922E-09 1.52593E-09 1.53267E-09 1.53944E-09 -2.76589E-08 -1.91443E-08 -1.31798E-08 -9.01312E-09 -6.10546E-09 -4.07238E-09 -2.64101E-09 -1.62106E-09 -8.86825E-10 -3.62117E-10 -1.05093E-12 2.47873E-10 4.2061E-10 5.32328E-10 6.01118E-10 6.43428E-10 6.70807E-10 6.90024E-10 7.04714E-10 7.16798E-10 7.27314E-10 7.36841E-10 7.45722E-10 7.54163E-10 7.62296E-10 7.70207E-10 7.77956E-10 7.85584E-10 7.93118E-10 8.00582E-10 8.0799E-10 8.15354E-10 8.22685E-10 8.29989E-10 8.37271E-10 8.44538E-10 8.51791E-10 8.59036E-10 8.66272E-10 8.73504E-10 8.80733E-10 8.8796E-10 8.95186E-10 9.02413E-10 9.09641E-10 9.16872E-10 9.24106E-10 9.31343E-10 9.38584E-10 9.4583E-10 9.53081E-10 9.60337E-10 9.67599E-10 9.74867E-10 9.82141E-10 9.89421E-10 9.96708E-10 1.004E-09 1.0113E-09 1.01861E-09 1.02592E-09 1.03325E-09 1.04058E-09 1.04791E-09 1.05526E-09 1.06261E-09 1.06997E-09 1.07734E-09 1.08471E-09 1.0921E-09 1.09949E-09 1.10689E-09 1.1143E-09 1.12171E-09 1.12913E-09 1.13657E-09 1.144E-09 1.15145E-09 1.15891E-09 1.16637E-09 1.17384E-09 1.18132E-09 1.18881E-09 1.19631E-09 1.20381E-09 1.21132E-09 1.21884E-09 1.22637E-09 1.23391E-09 1.24145E-09 1.24901E-09 1.25657E-09 1.26414E-09 1.27171E-09 1.2793E-09 1.28689E-09 1.29449E-09 1.3021E-09 1.30972E-09 1.31735E-09 1.32498E-09 1.33263E-09 1.34028E-09 1.34794E-09 1.35561E-09 1.36328E-09 1.37097E-09 1.37866E-09 1.38636E-09 1.39407E-09 1.40179E-09 1.40951E-09 1.41725E-09 1.42499E-09 1.43275E-09 1.44051E-09 1.44828E-09 1.45606E-09 1.46384E-09 1.47164E-09 1.47945E-09 1.48726E-09 1.49508E-09 1.50292E-09 1.51076E-09 1.51861E-09 1.52647E-09 1.53434E-09 1.54222E-09 1.55011E-09 1.55802E-09 1.56593E-09 1.57385E-09 1.58178E-09 1.58972E-09 1.59767E-09 1.60563E-09 1.6136E-09 1.62159E-09 1.62958E-09 1.63759E-09 1.64561E-09 1.65364E-09 1.66168E-09 1.66973E-09 1.6778E-09 1.68588E-09 1.69397E-09 1.70207E-09 1.71019E-09 1.71832E-09 1.72646E-09 1.73462E-09 1.74279E-09 1.75098E-09 1.75918E-09 1.76739E-09 1.77562E-09 1.78387E-09 1.79213E-09 1.80041E-09 1.8087E-09 1.81701E-09 1.82534E-09 1.83369E-09 1.84206E-09 1.85044E-09 1.85884E-09 1.86727E-09 1.87571E-09 1.88417E-09 1.89266E-09 1.90116E-09 1.90969E-09 1.91824E-09 1.92682E-09 1.93541E-09 1.94404E-09 1.95269E-09 1.96136E-09 1.97006E-09 1.9788E-09 1.98755E-09 1.99634E-09 2.00516E-09 2.01401E-09 2.0229E-09 2.03182E-09 2.04077E-09 2.04976E-09 2.05878E-09 -3.6373E-08 -2.524E-08 -1.74159E-08 -1.19342E-08 -8.09875E-09 -5.41051E-09 -3.5137E-09 -2.15929E-09 -1.18236E-09 -4.8293E-10 -7.77326E-13 3.31941E-10 5.62829E-10 7.12156E-10 8.04103E-10 8.60657E-10 8.97253E-10 9.22938E-10 9.42574E-10 9.58726E-10 9.72781E-10 9.85516E-10 9.97386E-10 1.00867E-09 1.01954E-09 1.03011E-09 1.04047E-09 1.05066E-09 1.06074E-09 1.07071E-09 1.08061E-09 1.09046E-09 1.10025E-09 1.11002E-09 1.11975E-09 1.12946E-09 1.13916E-09 1.14884E-09 1.15851E-09 1.16818E-09 1.17784E-09 1.1875E-09 1.19716E-09 1.20682E-09 1.21648E-09 1.22614E-09 1.23581E-09 1.24548E-09 1.25516E-09 1.26485E-09 1.27454E-09 1.28424E-09 1.29394E-09 1.30366E-09 1.31338E-09 1.32311E-09 1.33285E-09 1.3426E-09 1.35236E-09 1.36212E-09 1.3719E-09 1.38169E-09 1.39148E-09 1.40129E-09 1.41111E-09 1.42093E-09 1.43077E-09 1.44062E-09 1.45048E-09 1.46034E-09 1.47022E-09 1.48011E-09 1.49001E-09 1.49992E-09 1.50985E-09 1.51978E-09 1.52972E-09 1.53968E-09 1.54964E-09 1.55962E-09 1.5696E-09 1.5796E-09 1.58961E-09 1.59963E-09 1.60966E-09 1.6197E-09 1.62975E-09 1.63981E-09 1.64988E-09 1.65997E-09 1.67006E-09 1.68017E-09 1.69028E-09 1.70041E-09 1.71055E-09 1.7207E-09 1.73086E-09 1.74103E-09 1.75121E-09 1.7614E-09 1.77161E-09 1.78182E-09 1.79205E-09 1.80229E-09 1.81253E-09 1.82279E-09 1.83306E-09 1.84335E-09 1.85364E-09 1.86394E-09 1.87426E-09 1.88458E-09 1.89492E-09 1.90527E-09 1.91563E-09 1.92601E-09 1.93639E-09 1.94679E-09 1.95719E-09 1.96761E-09 1.97805E-09 1.98849E-09 1.99895E-09 2.00942E-09 2.0199E-09 2.03039E-09 2.0409E-09 2.05142E-09 2.06195E-09 2.07249E-09 2.08305E-09 2.09362E-09 2.10421E-09 2.11481E-09 2.12542E-09 2.13604E-09 2.14668E-09 2.15734E-09 2.16801E-09 2.17869E-09 2.18939E-09 2.20011E-09 2.21084E-09 2.22158E-09 2.23234E-09 2.24312E-09 2.25392E-09 2.26473E-09 2.27555E-09 2.2864E-09 2.29726E-09 2.30814E-09 2.31904E-09 2.32996E-09 2.3409E-09 2.35185E-09 2.36283E-09 2.37382E-09 2.38484E-09 2.39588E-09 2.40694E-09 2.41802E-09 2.42912E-09 2.44025E-09 2.4514E-09 2.46257E-09 2.47377E-09 2.48499E-09 2.49624E-09 2.50751E-09 2.51882E-09 2.53015E-09 2.5415E-09 2.55289E-09 2.56431E-09 2.57576E-09 2.58724E-09 2.59875E-09 2.6103E-09 2.62188E-09 2.63349E-09 2.64514E-09 2.65683E-09 2.66856E-09 2.68033E-09 2.69214E-09 2.70399E-09 2.71589E-09 2.72783E-09 2.73982E-09 2.75186E-09 -4.77406E-08 -3.32202E-08 -2.29795E-08 -1.57818E-08 -1.07311E-08 -7.1817E-09 -4.6712E-09 -2.8745E-09 -1.57578E-09 -6.44065E-10 -5.52518E-13 4.43972E-10 7.52449E-10 9.51958E-10 1.07481E-09 1.15036E-09 1.19926E-09 1.23358E-09 1.25981E-09 1.28139E-09 1.30017E-09 1.31718E-09 1.33304E-09 1.34811E-09 1.36264E-09 1.37676E-09 1.3906E-09 1.40422E-09 1.41767E-09 1.431E-09 1.44423E-09 1.45738E-09 1.47047E-09 1.48351E-09 1.49652E-09 1.50949E-09 1.52245E-09 1.53538E-09 1.5483E-09 1.56122E-09 1.57413E-09 1.58703E-09 1.59993E-09 1.61284E-09 1.62575E-09 1.63866E-09 1.65157E-09 1.6645E-09 1.67743E-09 1.69037E-09 1.70331E-09 1.71627E-09 1.72924E-09 1.74221E-09 1.7552E-09 1.7682E-09 1.78121E-09 1.79424E-09 1.80727E-09 1.82032E-09 1.83338E-09 1.84646E-09 1.85955E-09 1.87265E-09 1.88576E-09 1.89889E-09 1.91203E-09 1.92519E-09 1.93836E-09 1.95154E-09 1.96474E-09 1.97795E-09 1.99118E-09 2.00442E-09 2.01768E-09 2.03094E-09 2.04423E-09 2.05753E-09 2.07084E-09 2.08417E-09 2.09751E-09 2.11086E-09 2.12423E-09 2.13762E-09 2.15102E-09 2.16443E-09 2.17786E-09 2.1913E-09 2.20476E-09 2.21823E-09 2.23171E-09 2.24522E-09 2.25873E-09 2.27226E-09 2.2858E-09 2.29936E-09 2.31294E-09 2.32652E-09 2.34013E-09 2.35374E-09 2.36738E-09 2.38102E-09 2.39468E-09 2.40836E-09 2.42205E-09 2.43575E-09 2.44948E-09 2.46321E-09 2.47696E-09 2.49073E-09 2.50451E-09 2.5183E-09 2.53211E-09 2.54594E-09 2.55978E-09 2.57364E-09 2.58751E-09 2.6014E-09 2.6153E-09 2.62922E-09 2.64316E-09 2.65711E-09 2.67108E-09 2.68506E-09 2.69906E-09 2.71308E-09 2.72711E-09 2.74117E-09 2.75523E-09 2.76932E-09 2.78342E-09 2.79755E-09 2.81169E-09 2.82584E-09 2.84002E-09 2.85421E-09 2.86843E-09 2.88266E-09 2.89691E-09 2.91118E-09 2.92547E-09 2.93978E-09 2.95412E-09 2.96847E-09 2.98284E-09 2.99724E-09 3.01165E-09 3.02609E-09 3.04056E-09 3.05504E-09 3.06955E-09 3.08408E-09 3.09864E-09 3.11322E-09 3.12782E-09 3.14245E-09 3.15711E-09 3.17179E-09 3.18651E-09 3.20124E-09 3.21601E-09 3.23081E-09 3.24563E-09 3.26049E-09 3.27537E-09 3.29029E-09 3.30524E-09 3.32023E-09 3.33524E-09 3.3503E-09 3.36538E-09 3.38051E-09 3.39567E-09 3.41087E-09 3.4261E-09 3.44138E-09 3.4567E-09 3.47207E-09 3.48747E-09 3.50292E-09 3.51842E-09 3.53397E-09 3.54956E-09 3.56521E-09 3.5809E-09 3.59666E-09 3.61246E-09 3.62833E-09 3.64425E-09 3.66023E-09 3.67628E-09 -6.25275E-08 -4.36412E-08 -3.02703E-08 -2.08397E-08 -1.42012E-08 -9.52252E-09 -6.2044E-09 -3.82378E-09 -2.09891E-09 -8.58734E-10 -3.72189E-13 5.9323E-10 1.00516E-09 1.27158E-09 1.43563E-09 1.53653E-09 1.60183E-09 1.64765E-09 1.68268E-09 1.7115E-09 1.73658E-09 1.75929E-09 1.78047E-09 1.8006E-09 1.81999E-09 1.83886E-09 1.85733E-09 1.87552E-09 1.89349E-09 1.91128E-09 1.92895E-09 1.94651E-09 1.96398E-09 1.9814E-09 1.99877E-09 2.01609E-09 2.03339E-09 2.05066E-09 2.06792E-09 2.08516E-09 2.10239E-09 2.11963E-09 2.13686E-09 2.15409E-09 2.17132E-09 2.18856E-09 2.20581E-09 2.22307E-09 2.24033E-09 2.25761E-09 2.2749E-09 2.2922E-09 2.30951E-09 2.32684E-09 2.34419E-09 2.36154E-09 2.37892E-09 2.39631E-09 2.41372E-09 2.43114E-09 2.44858E-09 2.46604E-09 2.48352E-09 2.50101E-09 2.51852E-09 2.53605E-09 2.5536E-09 2.57117E-09 2.58875E-09 2.60636E-09 2.62398E-09 2.64162E-09 2.65928E-09 2.67696E-09 2.69466E-09 2.71238E-09 2.73012E-09 2.74787E-09 2.76565E-09 2.78344E-09 2.80126E-09 2.81909E-09 2.83694E-09 2.85481E-09 2.87271E-09 2.89062E-09 2.90855E-09 2.92649E-09 2.94446E-09 2.96245E-09 2.98046E-09 2.99849E-09 3.01653E-09 3.0346E-09 3.05268E-09 3.07079E-09 3.08891E-09 3.10705E-09 3.12521E-09 3.1434E-09 3.1616E-09 3.17982E-09 3.19806E-09 3.21632E-09 3.2346E-09 3.2529E-09 3.27122E-09 3.28956E-09 3.30792E-09 3.3263E-09 3.3447E-09 3.36312E-09 3.38156E-09 3.40002E-09 3.4185E-09 3.437E-09 3.45553E-09 3.47407E-09 3.49263E-09 3.51122E-09 3.52983E-09 3.54845E-09 3.5671E-09 3.58577E-09 3.60447E-09 3.62318E-09 3.64192E-09 3.66068E-09 3.67947E-09 3.69827E-09 3.7171E-09 3.73596E-09 3.75484E-09 3.77374E-09 3.79266E-09 3.81161E-09 3.83059E-09 3.84959E-09 3.86862E-09 3.88767E-09 3.90675E-09 3.92586E-09 3.94499E-09 3.96415E-09 3.98334E-09 4.00256E-09 4.0218E-09 4.04108E-09 4.06038E-09 4.07972E-09 4.09909E-09 4.11848E-09 4.13791E-09 4.15738E-09 4.17687E-09 4.1964E-09 4.21596E-09 4.23556E-09 4.2552E-09 4.27487E-09 4.29458E-09 4.31433E-09 4.33411E-09 4.35394E-09 4.3738E-09 4.39371E-09 4.41366E-09 4.43365E-09 4.45369E-09 4.47378E-09 4.49391E-09 4.51408E-09 4.53431E-09 4.55459E-09 4.57492E-09 4.5953E-09 4.61573E-09 4.63622E-09 4.65677E-09 4.67738E-09 4.69805E-09 4.71878E-09 4.73957E-09 4.76043E-09 4.78136E-09 4.80236E-09 4.82343E-09 4.84457E-09 4.86579E-09 4.88709E-09 4.90848E-09 -8.17027E-08 -5.72114E-08 -3.98006E-08 -2.7474E-08 -1.87669E-08 -1.26109E-08 -8.23223E-09 -5.08206E-09 -2.79371E-09 -1.1444E-09 -2.32307E-13 7.91982E-10 1.34175E-09 1.69732E-09 1.91626E-09 2.05093E-09 2.13807E-09 2.19923E-09 2.24598E-09 2.28444E-09 2.31791E-09 2.34823E-09 2.37649E-09 2.40335E-09 2.42923E-09 2.45441E-09 2.47906E-09 2.50334E-09 2.52731E-09 2.55106E-09 2.57463E-09 2.59807E-09 2.62139E-09 2.64464E-09 2.66781E-09 2.69093E-09 2.71401E-09 2.73706E-09 2.76009E-09 2.7831E-09 2.8061E-09 2.8291E-09 2.85209E-09 2.87509E-09 2.89809E-09 2.9211E-09 2.94411E-09 2.96714E-09 2.99018E-09 3.01324E-09 3.03631E-09 3.0594E-09 3.08251E-09 3.10563E-09 3.12878E-09 3.15194E-09 3.17513E-09 3.19834E-09 3.22157E-09 3.24482E-09 3.26809E-09 3.29139E-09 3.31471E-09 3.33806E-09 3.36143E-09 3.38482E-09 3.40824E-09 3.43168E-09 3.45515E-09 3.47864E-09 3.50216E-09 3.5257E-09 3.54927E-09 3.57286E-09 3.59648E-09 3.62013E-09 3.6438E-09 3.66749E-09 3.69121E-09 3.71496E-09 3.73873E-09 3.76253E-09 3.78635E-09 3.8102E-09 3.83408E-09 3.85798E-09 3.88191E-09 3.90586E-09 3.92984E-09 3.95384E-09 3.97787E-09 4.00193E-09 4.02601E-09 4.05012E-09 4.07425E-09 4.09841E-09 4.1226E-09 4.14681E-09 4.17104E-09 4.19531E-09 4.2196E-09 4.24391E-09 4.26825E-09 4.29262E-09 4.31701E-09 4.34143E-09 4.36588E-09 4.39035E-09 4.41485E-09 4.43938E-09 4.46393E-09 4.48851E-09 4.51312E-09 4.53775E-09 4.56242E-09 4.5871E-09 4.61182E-09 4.63657E-09 4.66134E-09 4.68614E-09 4.71097E-09 4.73582E-09 4.76071E-09 4.78562E-09 4.81057E-09 4.83554E-09 4.86055E-09 4.88558E-09 4.91064E-09 4.93574E-09 4.96086E-09 4.98602E-09 5.01121E-09 5.03643E-09 5.06168E-09 5.08697E-09 5.11229E-09 5.13764E-09 5.16303E-09 5.18845E-09 5.21391E-09 5.2394E-09 5.26493E-09 5.29049E-09 5.31609E-09 5.34173E-09 5.36741E-09 5.39313E-09 5.41888E-09 5.44468E-09 5.47052E-09 5.4964E-09 5.52232E-09 5.54828E-09 5.57429E-09 5.60034E-09 5.62644E-09 5.65259E-09 5.67878E-09 5.70502E-09 5.73131E-09 5.75765E-09 5.78404E-09 5.81048E-09 5.83697E-09 5.86353E-09 5.89013E-09 5.9168E-09 5.94352E-09 5.9703E-09 5.99714E-09 6.02405E-09 6.05102E-09 6.07806E-09 6.10516E-09 6.13233E-09 6.15958E-09 6.18689E-09 6.21429E-09 6.24175E-09 6.2693E-09 6.29693E-09 6.32464E-09 6.35244E-09 6.38033E-09 6.40831E-09 6.43638E-09 6.46455E-09 6.49282E-09 6.52119E-09 6.54967E-09 -1.06485E-07 -7.48288E-08 -5.22241E-08 -3.61547E-08 -2.47611E-08 -1.66778E-08 -1.09098E-08 -6.7475E-09 -3.71532E-09 -1.52407E-09 -1.29095E-13 1.05645E-09 1.78969E-09 2.26393E-09 2.55595E-09 2.73556E-09 2.85179E-09 2.93336E-09 2.99572E-09 3.04701E-09 3.09164E-09 3.13208E-09 3.16977E-09 3.20559E-09 3.24011E-09 3.27369E-09 3.30657E-09 3.33894E-09 3.37091E-09 3.40259E-09 3.43402E-09 3.46528E-09 3.49639E-09 3.52738E-09 3.55829E-09 3.58912E-09 3.61991E-09 3.65065E-09 3.68136E-09 3.71205E-09 3.74272E-09 3.77339E-09 3.80405E-09 3.83472E-09 3.8654E-09 3.89608E-09 3.92677E-09 3.95748E-09 3.98821E-09 4.01896E-09 4.04973E-09 4.08052E-09 4.11134E-09 4.14218E-09 4.17304E-09 4.20393E-09 4.23486E-09 4.26581E-09 4.29678E-09 4.32779E-09 4.35883E-09 4.3899E-09 4.421E-09 4.45214E-09 4.4833E-09 4.5145E-09 4.54573E-09 4.577E-09 4.60829E-09 4.63962E-09 4.67098E-09 4.70238E-09 4.73381E-09 4.76527E-09 4.79677E-09 4.8283E-09 4.85987E-09 4.89147E-09 4.9231E-09 4.95477E-09 4.98647E-09 5.01821E-09 5.04998E-09 5.08179E-09 5.11363E-09 5.1455E-09 5.17741E-09 5.20935E-09 5.24133E-09 5.27334E-09 5.30538E-09 5.33746E-09 5.36958E-09 5.40173E-09 5.43391E-09 5.46613E-09 5.49838E-09 5.53067E-09 5.56299E-09 5.59534E-09 5.62774E-09 5.66016E-09 5.69262E-09 5.72512E-09 5.75765E-09 5.79021E-09 5.82281E-09 5.85545E-09 5.88812E-09 5.92082E-09 5.95357E-09 5.98634E-09 6.01916E-09 6.05201E-09 6.08489E-09 6.11782E-09 6.15078E-09 6.18377E-09 6.21681E-09 6.24988E-09 6.28299E-09 6.31613E-09 6.34932E-09 6.38254E-09 6.41581E-09 6.44911E-09 6.48245E-09 6.51583E-09 6.54925E-09 6.58271E-09 6.61622E-09 6.64976E-09 6.68335E-09 6.71698E-09 6.75065E-09 6.78437E-09 6.81813E-09 6.85194E-09 6.88579E-09 6.91968E-09 6.95362E-09 6.98761E-09 7.02165E-09 7.05574E-09 7.08987E-09 7.12406E-09 7.15829E-09 7.19258E-09 7.22692E-09 7.26131E-09 7.29576E-09 7.33026E-09 7.36482E-09 7.39943E-09 7.43411E-09 7.46884E-09 7.50363E-09 7.53848E-09 7.5734E-09 7.60837E-09 7.64342E-09 7.67853E-09 7.7137E-09 7.74895E-09 7.78427E-09 7.81965E-09 7.85512E-09 7.89065E-09 7.92627E-09 7.96196E-09 7.99773E-09 8.03358E-09 8.06952E-09 8.10555E-09 8.14166E-09 8.17787E-09 8.21416E-09 8.25056E-09 8.28705E-09 8.32364E-09 8.36033E-09 8.39713E-09 8.43404E-09 8.47106E-09 8.5082E-09 8.54546E-09 8.58283E-09 8.62034E-09 8.65797E-09 8.69574E-09 8.73365E-09 -1.38399E-07 -9.76247E-08 -6.83707E-08 -4.74825E-08 -3.26119E-08 -2.20219E-08 -1.44386E-08 -8.94823E-09 -4.93603E-09 -2.02806E-09 -5.89689E-14 1.40805E-09 2.38525E-09 3.0173E-09 3.4065E-09 3.64588E-09 3.80079E-09 3.9095E-09 3.99261E-09 4.06096E-09 4.12044E-09 4.17433E-09 4.22456E-09 4.2723E-09 4.3183E-09 4.36304E-09 4.40687E-09 4.45E-09 4.49261E-09 4.53482E-09 4.57672E-09 4.61836E-09 4.65982E-09 4.70113E-09 4.74231E-09 4.7834E-09 4.82442E-09 4.86539E-09 4.90631E-09 4.94721E-09 4.98809E-09 5.02895E-09 5.06982E-09 5.11069E-09 5.15156E-09 5.19245E-09 5.23336E-09 5.27428E-09 5.31523E-09 5.3562E-09 5.3972E-09 5.43824E-09 5.4793E-09 5.5204E-09 5.56153E-09 5.6027E-09 5.6439E-09 5.68514E-09 5.72643E-09 5.76775E-09 5.80911E-09 5.85051E-09 5.89196E-09 5.93345E-09 5.97498E-09 6.01655E-09 6.05817E-09 6.09983E-09 6.14153E-09 6.18328E-09 6.22507E-09 6.26691E-09 6.30879E-09 6.35072E-09 6.39269E-09 6.43471E-09 6.47677E-09 6.51888E-09 6.56104E-09 6.60324E-09 6.64548E-09 6.68777E-09 6.73011E-09 6.77249E-09 6.81492E-09 6.85739E-09 6.89991E-09 6.94247E-09 6.98509E-09 7.02774E-09 7.07044E-09 7.11319E-09 7.15598E-09 7.19882E-09 7.24171E-09 7.28464E-09 7.32762E-09 7.37064E-09 7.41371E-09 7.45682E-09 7.49999E-09 7.54319E-09 7.58645E-09 7.62975E-09 7.67309E-09 7.71649E-09 7.75993E-09 7.80342E-09 7.84695E-09 7.89053E-09 7.93416E-09 7.97784E-09 8.02156E-09 8.06533E-09 8.10915E-09 8.15302E-09 8.19694E-09 8.24091E-09 8.28492E-09 8.32899E-09 8.37311E-09 8.41727E-09 8.46149E-09 8.50576E-09 8.55008E-09 8.59445E-09 8.63888E-09 8.68336E-09 8.72789E-09 8.77247E-09 8.81711E-09 8.86181E-09 8.90656E-09 8.95137E-09 8.99624E-09 9.04116E-09 9.08614E-09 9.13118E-09 9.17628E-09 9.22144E-09 9.26666E-09 9.31195E-09 9.3573E-09 9.40271E-09 9.44819E-09 9.49373E-09 9.53934E-09 9.58502E-09 9.63077E-09 9.67659E-09 9.72248E-09 9.76844E-09 9.81448E-09 9.86059E-09 9.90678E-09 9.95304E-09 9.99939E-09 1.00458E-08 1.00923E-08 1.01389E-08 1.01856E-08 1.02324E-08 1.02792E-08 1.03262E-08 1.03732E-08 1.04203E-08 1.04675E-08 1.05149E-08 1.05623E-08 1.06098E-08 1.06575E-08 1.07052E-08 1.07531E-08 1.0801E-08 1.08491E-08 1.08973E-08 1.09456E-08 1.09941E-08 1.10427E-08 1.10914E-08 1.11402E-08 1.11892E-08 1.12383E-08 1.12876E-08 1.1337E-08 1.13866E-08 1.14363E-08 1.14862E-08 1.15363E-08 1.15865E-08 1.16369E-08 -1.79339E-07 -1.27016E-07 -8.92875E-08 -6.2221E-08 -4.2867E-08 -2.90278E-08 -1.90796E-08 -1.1851E-08 -6.55029E-09 -2.69608E-09 -1.82281E-14 1.87496E-09 3.17619E-09 4.01784E-09 4.53612E-09 4.85491E-09 5.06119E-09 5.20596E-09 5.31662E-09 5.40764E-09 5.48684E-09 5.55859E-09 5.62547E-09 5.68904E-09 5.75028E-09 5.80986E-09 5.86821E-09 5.92564E-09 5.98238E-09 6.03858E-09 6.09436E-09 6.14981E-09 6.20501E-09 6.26E-09 6.31484E-09 6.36955E-09 6.42417E-09 6.47871E-09 6.5332E-09 6.58765E-09 6.64208E-09 6.69649E-09 6.7509E-09 6.80531E-09 6.85973E-09 6.91417E-09 6.96864E-09 7.02312E-09 7.07764E-09 7.1322E-09 7.18679E-09 7.24142E-09 7.29609E-09 7.35081E-09 7.40557E-09 7.46038E-09 7.51525E-09 7.57016E-09 7.62512E-09 7.68014E-09 7.73521E-09 7.79033E-09 7.84551E-09 7.90075E-09 7.95604E-09 8.01139E-09 8.0668E-09 8.12227E-09 8.17779E-09 8.23338E-09 8.28902E-09 8.34472E-09 8.40049E-09 8.45631E-09 8.51219E-09 8.56813E-09 8.62414E-09 8.6802E-09 8.73632E-09 8.79251E-09 8.84875E-09 8.90506E-09 8.96142E-09 9.01785E-09 9.07434E-09 9.13088E-09 9.18749E-09 9.24416E-09 9.30089E-09 9.35768E-09 9.41454E-09 9.47145E-09 9.52842E-09 9.58546E-09 9.64255E-09 9.69971E-09 9.75693E-09 9.81421E-09 9.87155E-09 9.92895E-09 9.98641E-09 1.00439E-08 1.01015E-08 1.01592E-08 1.02169E-08 1.02746E-08 1.03325E-08 1.03904E-08 1.04483E-08 1.05064E-08 1.05644E-08 1.06226E-08 1.06808E-08 1.07391E-08 1.07974E-08 1.08558E-08 1.09143E-08 1.09728E-08 1.10314E-08 1.10901E-08 1.11488E-08 1.12076E-08 1.12665E-08 1.13254E-08 1.13844E-08 1.14435E-08 1.15026E-08 1.15618E-08 1.16211E-08 1.16805E-08 1.17399E-08 1.17994E-08 1.1859E-08 1.19186E-08 1.19784E-08 1.20382E-08 1.2098E-08 1.2158E-08 1.2218E-08 1.22782E-08 1.23384E-08 1.23986E-08 1.2459E-08 1.25194E-08 1.258E-08 1.26406E-08 1.27013E-08 1.27621E-08 1.2823E-08 1.2884E-08 1.29451E-08 1.30063E-08 1.30675E-08 1.31289E-08 1.31904E-08 1.3252E-08 1.33136E-08 1.33754E-08 1.34373E-08 1.34993E-08 1.35615E-08 1.36237E-08 1.3686E-08 1.37485E-08 1.38111E-08 1.38738E-08 1.39367E-08 1.39996E-08 1.40627E-08 1.4126E-08 1.41894E-08 1.42529E-08 1.43165E-08 1.43804E-08 1.44443E-08 1.45084E-08 1.45727E-08 1.46372E-08 1.47018E-08 1.47666E-08 1.48315E-08 1.48967E-08 1.4962E-08 1.50275E-08 1.50932E-08 1.51591E-08 1.52252E-08 1.52916E-08 1.53581E-08 1.54249E-08 1.54919E-08 -2.31644E-07 -1.64767E-07 -1.16288E-07 -8.13352E-08 -5.62238E-08 -3.81882E-08 -2.51693E-08 -1.56718E-08 -8.68114E-09 -3.58013E-09 -3.84696E-24 2.4942E-09 4.22523E-09 5.34492E-09 6.03445E-09 6.45856E-09 6.73299E-09 6.92559E-09 7.0728E-09 7.19389E-09 7.29924E-09 7.39469E-09 7.48365E-09 7.56821E-09 7.64968E-09 7.72892E-09 7.80654E-09 7.88294E-09 7.9584E-09 8.03315E-09 8.10735E-09 8.18111E-09 8.25453E-09 8.32768E-09 8.40062E-09 8.47339E-09 8.54604E-09 8.61859E-09 8.69107E-09 8.76349E-09 8.83589E-09 8.90826E-09 8.98063E-09 9.05301E-09 9.12539E-09 9.19781E-09 9.27025E-09 9.34272E-09 9.41524E-09 9.4878E-09 9.56041E-09 9.63308E-09 9.7058E-09 9.77858E-09 9.85142E-09 9.92432E-09 9.99729E-09 1.00703E-08 1.01434E-08 1.02166E-08 1.02899E-08 1.03632E-08 1.04366E-08 1.051E-08 1.05836E-08 1.06572E-08 1.07309E-08 1.08047E-08 1.08785E-08 1.09525E-08 1.10265E-08 1.11006E-08 1.11747E-08 1.1249E-08 1.13233E-08 1.13977E-08 1.14722E-08 1.15468E-08 1.16214E-08 1.16961E-08 1.1771E-08 1.18458E-08 1.19208E-08 1.19959E-08 1.2071E-08 1.21462E-08 1.22215E-08 1.22969E-08 1.23723E-08 1.24479E-08 1.25235E-08 1.25992E-08 1.2675E-08 1.27508E-08 1.28267E-08 1.29028E-08 1.29789E-08 1.30551E-08 1.31313E-08 1.32077E-08 1.32841E-08 1.33606E-08 1.34372E-08 1.35139E-08 1.35906E-08 1.36674E-08 1.37444E-08 1.38214E-08 1.38985E-08 1.39756E-08 1.40529E-08 1.41302E-08 1.42076E-08 1.42851E-08 1.43627E-08 1.44404E-08 1.45182E-08 1.4596E-08 1.46739E-08 1.4752E-08 1.48301E-08 1.49083E-08 1.49866E-08 1.50649E-08 1.51434E-08 1.5222E-08 1.53006E-08 1.53794E-08 1.54582E-08 1.55372E-08 1.56162E-08 1.56953E-08 1.57746E-08 1.58539E-08 1.59333E-08 1.60128E-08 1.60925E-08 1.61722E-08 1.6252E-08 1.6332E-08 1.6412E-08 1.64922E-08 1.65725E-08 1.66529E-08 1.67334E-08 1.6814E-08 1.68947E-08 1.69756E-08 1.70565E-08 1.71376E-08 1.72189E-08 1.73002E-08 1.73817E-08 1.74633E-08 1.7545E-08 1.76269E-08 1.77089E-08 1.77911E-08 1.78734E-08 1.79558E-08 1.80384E-08 1.81211E-08 1.8204E-08 1.82871E-08 1.83703E-08 1.84537E-08 1.85372E-08 1.86209E-08 1.87048E-08 1.87889E-08 1.88731E-08 1.89575E-08 1.90421E-08 1.9127E-08 1.9212E-08 1.92972E-08 1.93826E-08 1.94682E-08 1.95541E-08 1.96402E-08 1.97265E-08 1.9813E-08 1.98998E-08 1.99868E-08 2.00741E-08 2.01617E-08 2.02495E-08 2.03376E-08 2.0426E-08 2.05146E-08 2.06036E-08 -2.98187E-07 -2.13061E-07 -1.51012E-07 -1.06038E-07 -7.35653E-08 -5.01315E-08 -3.31393E-08 -2.06896E-08 -1.14882E-08 -4.74796E-09 1.85195E-14 3.31427E-09 5.61454E-09 7.10252E-09 8.01887E-09 8.58251E-09 8.94722E-09 9.20317E-09 9.39879E-09 9.5597E-09 9.69969E-09 9.82652E-09 9.94473E-09 1.00571E-08 1.01653E-08 1.02706E-08 1.03737E-08 1.04752E-08 1.05755E-08 1.06748E-08 1.07734E-08 1.08714E-08 1.0969E-08 1.10662E-08 1.11631E-08 1.12598E-08 1.13563E-08 1.14527E-08 1.1549E-08 1.16452E-08 1.17414E-08 1.18375E-08 1.19337E-08 1.20298E-08 1.2126E-08 1.22222E-08 1.23185E-08 1.24148E-08 1.25111E-08 1.26075E-08 1.2704E-08 1.28005E-08 1.28971E-08 1.29938E-08 1.30906E-08 1.31875E-08 1.32844E-08 1.33815E-08 1.34786E-08 1.35758E-08 1.36731E-08 1.37705E-08 1.38681E-08 1.39657E-08 1.40634E-08 1.41612E-08 1.42591E-08 1.43571E-08 1.44552E-08 1.45535E-08 1.46518E-08 1.47502E-08 1.48488E-08 1.49474E-08 1.50461E-08 1.5145E-08 1.5244E-08 1.5343E-08 1.54422E-08 1.55415E-08 1.56409E-08 1.57404E-08 1.584E-08 1.59397E-08 1.60395E-08 1.61394E-08 1.62394E-08 1.63396E-08 1.64398E-08 1.65402E-08 1.66406E-08 1.67412E-08 1.68419E-08 1.69426E-08 1.70435E-08 1.71445E-08 1.72456E-08 1.73468E-08 1.74482E-08 1.75496E-08 1.76511E-08 1.77528E-08 1.78545E-08 1.79564E-08 1.80583E-08 1.81604E-08 1.82626E-08 1.83649E-08 1.84673E-08 1.85698E-08 1.86724E-08 1.87752E-08 1.8878E-08 1.8981E-08 1.90841E-08 1.91873E-08 1.92906E-08 1.9394E-08 1.94975E-08 1.96012E-08 1.97049E-08 1.98088E-08 1.99128E-08 2.00169E-08 2.01212E-08 2.02256E-08 2.033E-08 2.04346E-08 2.05394E-08 2.06442E-08 2.07492E-08 2.08543E-08 2.09596E-08 2.1065E-08 2.11705E-08 2.12761E-08 2.13819E-08 2.14878E-08 2.15939E-08 2.17001E-08 2.18064E-08 2.19129E-08 2.20195E-08 2.21263E-08 2.22332E-08 2.23403E-08 2.24475E-08 2.25549E-08 2.26625E-08 2.27702E-08 2.28781E-08 2.29861E-08 2.30943E-08 2.32027E-08 2.33113E-08 2.342E-08 2.35289E-08 2.3638E-08 2.37473E-08 2.38568E-08 2.39665E-08 2.40764E-08 2.41865E-08 2.42967E-08 2.44072E-08 2.45179E-08 2.46289E-08 2.474E-08 2.48514E-08 2.4963E-08 2.50749E-08 2.5187E-08 2.52993E-08 2.54119E-08 2.55247E-08 2.56379E-08 2.57512E-08 2.58649E-08 2.59789E-08 2.60931E-08 2.62077E-08 2.63225E-08 2.64377E-08 2.65532E-08 2.6669E-08 2.67852E-08 2.69017E-08 2.70185E-08 2.71358E-08 2.72534E-08 2.73714E-08 -3.82473E-07 -2.7458E-07 -1.95488E-07 -1.37844E-07 -9.60026E-08 -6.5654E-08 -4.35406E-08 -2.72626E-08 -1.51777E-08 -6.2876E-09 6.02259E-14 4.39847E-09 7.45138E-09 9.42635E-09 1.06427E-08 1.13909E-08 1.1875E-08 1.22147E-08 1.24743E-08 1.26879E-08 1.28737E-08 1.3042E-08 1.31988E-08 1.33479E-08 1.34916E-08 1.36313E-08 1.37682E-08 1.39029E-08 1.40359E-08 1.41677E-08 1.42985E-08 1.44286E-08 1.4558E-08 1.4687E-08 1.48156E-08 1.49439E-08 1.50719E-08 1.51998E-08 1.53276E-08 1.54553E-08 1.55829E-08 1.57105E-08 1.58381E-08 1.59657E-08 1.60933E-08 1.6221E-08 1.63487E-08 1.64765E-08 1.66043E-08 1.67322E-08 1.68603E-08 1.69884E-08 1.71166E-08 1.72449E-08 1.73733E-08 1.75018E-08 1.76304E-08 1.77592E-08 1.78881E-08 1.80171E-08 1.81462E-08 1.82755E-08 1.84048E-08 1.85344E-08 1.8664E-08 1.87938E-08 1.89237E-08 1.90538E-08 1.9184E-08 1.93143E-08 1.94448E-08 1.95754E-08 1.97061E-08 1.9837E-08 1.9968E-08 2.00992E-08 2.02305E-08 2.03619E-08 2.04935E-08 2.06253E-08 2.07571E-08 2.08891E-08 2.10213E-08 2.11536E-08 2.1286E-08 2.14186E-08 2.15513E-08 2.16842E-08 2.18172E-08 2.19503E-08 2.20836E-08 2.22171E-08 2.23506E-08 2.24844E-08 2.26182E-08 2.27522E-08 2.28864E-08 2.30207E-08 2.31551E-08 2.32897E-08 2.34244E-08 2.35592E-08 2.36942E-08 2.38294E-08 2.39647E-08 2.41001E-08 2.42357E-08 2.43714E-08 2.45073E-08 2.46433E-08 2.47795E-08 2.49158E-08 2.50522E-08 2.51888E-08 2.53256E-08 2.54625E-08 2.55996E-08 2.57368E-08 2.58741E-08 2.60117E-08 2.61493E-08 2.62872E-08 2.64251E-08 2.65633E-08 2.67016E-08 2.684E-08 2.69787E-08 2.71175E-08 2.72564E-08 2.73955E-08 2.75348E-08 2.76743E-08 2.78139E-08 2.79537E-08 2.80937E-08 2.82338E-08 2.83742E-08 2.85147E-08 2.86554E-08 2.87962E-08 2.89373E-08 2.90786E-08 2.922E-08 2.93617E-08 2.95035E-08 2.96456E-08 2.97878E-08 2.99303E-08 3.0073E-08 3.02158E-08 3.03589E-08 3.05023E-08 3.06458E-08 3.07896E-08 3.09336E-08 3.10778E-08 3.12223E-08 3.1367E-08 3.1512E-08 3.16572E-08 3.18026E-08 3.19484E-08 3.20944E-08 3.22406E-08 3.23872E-08 3.2534E-08 3.26811E-08 3.28285E-08 3.29762E-08 3.31242E-08 3.32725E-08 3.34211E-08 3.35701E-08 3.37194E-08 3.3869E-08 3.4019E-08 3.41693E-08 3.432E-08 3.4471E-08 3.46225E-08 3.47743E-08 3.49265E-08 3.50792E-08 3.52323E-08 3.53857E-08 3.55397E-08 3.56941E-08 3.58489E-08 3.60043E-08 3.61601E-08 3.63164E-08 -4.88758E-07 -3.52605E-07 -2.52217E-07 -1.78634E-07 -1.24926E-07 -8.57598E-08 -5.70727E-08 -3.58488E-08 -2.0015E-08 -8.31291E-09 1.32287E-13 5.82908E-09 9.87524E-09 1.2493E-08 1.41053E-08 1.50971E-08 1.57388E-08 1.61891E-08 1.65333E-08 1.68163E-08 1.70625E-08 1.72856E-08 1.74934E-08 1.7691E-08 1.78814E-08 1.80665E-08 1.82478E-08 1.84263E-08 1.86026E-08 1.87773E-08 1.89506E-08 1.91229E-08 1.92944E-08 1.94653E-08 1.96357E-08 1.98057E-08 1.99754E-08 2.01449E-08 2.03142E-08 2.04834E-08 2.06525E-08 2.08216E-08 2.09906E-08 2.11597E-08 2.13288E-08 2.14979E-08 2.16672E-08 2.18364E-08 2.20058E-08 2.21753E-08 2.23449E-08 2.25147E-08 2.26845E-08 2.28545E-08 2.30247E-08 2.3195E-08 2.33654E-08 2.3536E-08 2.37068E-08 2.38777E-08 2.40488E-08 2.42201E-08 2.43915E-08 2.45631E-08 2.47349E-08 2.49068E-08 2.5079E-08 2.52513E-08 2.54238E-08 2.55965E-08 2.57693E-08 2.59424E-08 2.61156E-08 2.6289E-08 2.64626E-08 2.66364E-08 2.68104E-08 2.69845E-08 2.71589E-08 2.73334E-08 2.75081E-08 2.7683E-08 2.78581E-08 2.80334E-08 2.82089E-08 2.83845E-08 2.85604E-08 2.87364E-08 2.89126E-08 2.90891E-08 2.92657E-08 2.94424E-08 2.96194E-08 2.97966E-08 2.99739E-08 3.01515E-08 3.03292E-08 3.05071E-08 3.06852E-08 3.08635E-08 3.1042E-08 3.12206E-08 3.13995E-08 3.15786E-08 3.17578E-08 3.19372E-08 3.21169E-08 3.22967E-08 3.24767E-08 3.26569E-08 3.28373E-08 3.30179E-08 3.31987E-08 3.33796E-08 3.35608E-08 3.37422E-08 3.39238E-08 3.41056E-08 3.42875E-08 3.44697E-08 3.46521E-08 3.48347E-08 3.50175E-08 3.52005E-08 3.53837E-08 3.55672E-08 3.57508E-08 3.59347E-08 3.61188E-08 3.63031E-08 3.64876E-08 3.66723E-08 3.68573E-08 3.70425E-08 3.72279E-08 3.74136E-08 3.75995E-08 3.77856E-08 3.7972E-08 3.81586E-08 3.83455E-08 3.85326E-08 3.872E-08 3.89077E-08 3.90956E-08 3.92837E-08 3.94722E-08 3.96609E-08 3.98498E-08 4.00391E-08 4.02286E-08 4.04185E-08 4.06086E-08 4.0799E-08 4.09898E-08 4.11808E-08 4.13721E-08 4.15638E-08 4.17558E-08 4.19481E-08 4.21408E-08 4.23338E-08 4.25271E-08 4.27208E-08 4.29149E-08 4.31093E-08 4.33041E-08 4.34993E-08 4.36949E-08 4.38909E-08 4.40872E-08 4.4284E-08 4.44813E-08 4.46789E-08 4.4877E-08 4.50755E-08 4.52746E-08 4.5474E-08 4.5674E-08 4.58745E-08 4.60754E-08 4.62769E-08 4.64789E-08 4.66815E-08 4.68846E-08 4.70883E-08 4.72926E-08 4.74975E-08 4.77031E-08 4.79092E-08 4.8116E-08 -6.22182E-07 -4.51122E-07 -3.24259E-07 -2.30727E-07 -1.62062E-07 -1.11706E-07 -7.46184E-08 -4.70299E-08 -2.63393E-08 -1.09705E-08 2.3897E-13 7.71268E-09 1.30668E-08 1.65312E-08 1.86652E-08 1.9978E-08 2.08273E-08 2.14233E-08 2.18787E-08 2.22532E-08 2.2579E-08 2.28742E-08 2.31492E-08 2.34106E-08 2.36624E-08 2.39074E-08 2.41473E-08 2.43834E-08 2.46166E-08 2.48477E-08 2.5077E-08 2.53049E-08 2.55318E-08 2.57579E-08 2.59833E-08 2.62082E-08 2.64327E-08 2.66569E-08 2.68809E-08 2.71047E-08 2.73284E-08 2.75521E-08 2.77757E-08 2.79993E-08 2.8223E-08 2.84468E-08 2.86706E-08 2.88946E-08 2.91187E-08 2.93429E-08 2.95672E-08 2.97918E-08 3.00165E-08 3.02413E-08 3.04664E-08 3.06917E-08 3.09172E-08 3.11428E-08 3.13687E-08 3.15948E-08 3.18211E-08 3.20477E-08 3.22745E-08 3.25015E-08 3.27287E-08 3.29561E-08 3.31839E-08 3.34118E-08 3.364E-08 3.38684E-08 3.4097E-08 3.43259E-08 3.45551E-08 3.47845E-08 3.50141E-08 3.5244E-08 3.54741E-08 3.57045E-08 3.59351E-08 3.6166E-08 3.63971E-08 3.66284E-08 3.686E-08 3.70919E-08 3.7324E-08 3.75564E-08 3.7789E-08 3.80218E-08 3.82549E-08 3.84882E-08 3.87218E-08 3.89557E-08 3.91898E-08 3.94241E-08 3.96587E-08 3.98935E-08 4.01286E-08 4.03639E-08 4.05995E-08 4.08353E-08 4.10714E-08 4.13077E-08 4.15443E-08 4.17811E-08 4.20182E-08 4.22556E-08 4.24932E-08 4.2731E-08 4.29691E-08 4.32074E-08 4.3446E-08 4.36849E-08 4.3924E-08 4.41634E-08 4.44031E-08 4.4643E-08 4.48831E-08 4.51236E-08 4.53642E-08 4.56052E-08 4.58464E-08 4.6088E-08 4.63297E-08 4.65718E-08 4.68141E-08 4.70567E-08 4.72996E-08 4.75428E-08 4.77863E-08 4.803E-08 4.82741E-08 4.85184E-08 4.8763E-08 4.9008E-08 4.92532E-08 4.94988E-08 4.97446E-08 4.99908E-08 5.02373E-08 5.04841E-08 5.07313E-08 5.09787E-08 5.12265E-08 5.14747E-08 5.17232E-08 5.1972E-08 5.22212E-08 5.24708E-08 5.27207E-08 5.29709E-08 5.32216E-08 5.34726E-08 5.3724E-08 5.39759E-08 5.42281E-08 5.44807E-08 5.47337E-08 5.49871E-08 5.5241E-08 5.54953E-08 5.575E-08 5.60052E-08 5.62609E-08 5.6517E-08 5.67735E-08 5.70306E-08 5.72881E-08 5.75462E-08 5.78047E-08 5.80638E-08 5.83234E-08 5.85836E-08 5.88443E-08 5.91055E-08 5.93674E-08 5.96298E-08 5.98928E-08 6.01565E-08 6.04207E-08 6.06857E-08 6.09512E-08 6.12175E-08 6.14844E-08 6.17521E-08 6.20205E-08 6.22896E-08 6.25595E-08 6.28302E-08 6.31016E-08 6.33739E-08 6.36471E-08 -7.88928E-07 -5.74954E-07 -4.15339E-07 -2.96963E-07 -2.09545E-07 -1.45058E-07 -9.72846E-08 -6.15414E-08 -3.45826E-08 -1.44482E-08 3.8483E-13 1.01867E-08 1.72592E-08 2.18362E-08 2.46559E-08 2.63905E-08 2.75129E-08 2.83003E-08 2.89019E-08 2.93967E-08 2.9827E-08 3.02168E-08 3.058E-08 3.09252E-08 3.12578E-08 3.15813E-08 3.18981E-08 3.22099E-08 3.25179E-08 3.2823E-08 3.31258E-08 3.34268E-08 3.37264E-08 3.4025E-08 3.43226E-08 3.46196E-08 3.4916E-08 3.52121E-08 3.55078E-08 3.58034E-08 3.60988E-08 3.63941E-08 3.66894E-08 3.69847E-08 3.728E-08 3.75755E-08 3.78711E-08 3.81668E-08 3.84627E-08 3.87587E-08 3.9055E-08 3.93515E-08 3.96481E-08 3.99451E-08 4.02423E-08 4.05397E-08 4.08374E-08 4.11354E-08 4.14337E-08 4.17322E-08 4.2031E-08 4.23302E-08 4.26296E-08 4.29293E-08 4.32293E-08 4.35297E-08 4.38303E-08 4.41313E-08 4.44326E-08 4.47342E-08 4.50361E-08 4.53383E-08 4.56408E-08 4.59437E-08 4.62469E-08 4.65504E-08 4.68543E-08 4.71584E-08 4.74629E-08 4.77678E-08 4.80729E-08 4.83784E-08 4.86842E-08 4.89903E-08 4.92967E-08 4.96035E-08 4.99106E-08 5.02181E-08 5.05258E-08 5.08339E-08 5.11423E-08 5.1451E-08 5.17601E-08 5.20695E-08 5.23792E-08 5.26893E-08 5.29996E-08 5.33103E-08 5.36214E-08 5.39327E-08 5.42444E-08 5.45564E-08 5.48688E-08 5.51815E-08 5.54945E-08 5.58078E-08 5.61215E-08 5.64355E-08 5.67498E-08 5.70645E-08 5.73795E-08 5.76949E-08 5.80106E-08 5.83266E-08 5.8643E-08 5.89597E-08 5.92768E-08 5.95942E-08 5.9912E-08 6.02301E-08 6.05486E-08 6.08674E-08 6.11866E-08 6.15062E-08 6.18261E-08 6.21464E-08 6.2467E-08 6.27881E-08 6.31095E-08 6.34313E-08 6.37534E-08 6.4076E-08 6.4399E-08 6.47223E-08 6.50461E-08 6.53702E-08 6.56948E-08 6.60198E-08 6.63452E-08 6.6671E-08 6.69972E-08 6.73239E-08 6.7651E-08 6.79786E-08 6.83066E-08 6.86351E-08 6.8964E-08 6.92934E-08 6.96233E-08 6.99536E-08 7.02845E-08 7.06159E-08 7.09477E-08 7.12801E-08 7.1613E-08 7.19464E-08 7.22803E-08 7.26148E-08 7.29499E-08 7.32855E-08 7.36217E-08 7.39585E-08 7.42959E-08 7.46339E-08 7.49725E-08 7.53117E-08 7.56516E-08 7.59921E-08 7.63333E-08 7.66751E-08 7.70177E-08 7.73609E-08 7.77049E-08 7.80496E-08 7.83951E-08 7.87413E-08 7.90883E-08 7.94361E-08 7.97848E-08 8.01342E-08 8.04845E-08 8.08357E-08 8.11878E-08 8.15408E-08 8.18948E-08 8.22497E-08 8.26056E-08 8.29625E-08 8.33205E-08 8.36795E-08 8.40396E-08 -9.9641E-07 -7.29907E-07 -5.29966E-07 -3.80807E-07 -2.69993E-07 -1.8775E-07 -1.26451E-07 -8.03058E-08 -4.52907E-08 -1.8985E-08 5.75234E-13 1.34274E-08 2.27515E-08 2.87869E-08 3.25056E-08 3.47935E-08 3.62737E-08 3.73122E-08 3.81055E-08 3.87577E-08 3.9325E-08 3.98389E-08 4.03176E-08 4.07726E-08 4.12109E-08 4.16373E-08 4.20548E-08 4.24657E-08 4.28716E-08 4.32736E-08 4.36727E-08 4.40694E-08 4.44642E-08 4.48576E-08 4.52498E-08 4.56412E-08 4.60318E-08 4.64219E-08 4.68117E-08 4.72011E-08 4.75904E-08 4.79795E-08 4.83687E-08 4.87578E-08 4.9147E-08 4.95363E-08 4.99258E-08 5.03155E-08 5.07054E-08 5.10955E-08 5.14859E-08 5.18765E-08 5.22675E-08 5.26588E-08 5.30504E-08 5.34423E-08 5.38346E-08 5.42272E-08 5.46202E-08 5.50136E-08 5.54074E-08 5.58015E-08 5.61961E-08 5.6591E-08 5.69864E-08 5.73821E-08 5.77783E-08 5.81748E-08 5.85718E-08 5.89692E-08 5.9367E-08 5.97652E-08 6.01639E-08 6.0563E-08 6.09625E-08 6.13624E-08 6.17628E-08 6.21635E-08 6.25647E-08 6.29664E-08 6.33684E-08 6.37709E-08 6.41738E-08 6.45772E-08 6.4981E-08 6.53852E-08 6.57898E-08 6.61949E-08 6.66004E-08 6.70063E-08 6.74127E-08 6.78195E-08 6.82267E-08 6.86343E-08 6.90424E-08 6.94509E-08 6.98598E-08 7.02692E-08 7.0679E-08 7.10892E-08 7.14999E-08 7.1911E-08 7.23225E-08 7.27345E-08 7.31469E-08 7.35597E-08 7.3973E-08 7.43867E-08 7.48009E-08 7.52155E-08 7.56305E-08 7.6046E-08 7.64619E-08 7.68783E-08 7.72951E-08 7.77124E-08 7.81302E-08 7.85484E-08 7.8967E-08 7.93861E-08 7.98057E-08 8.02258E-08 8.06463E-08 8.10673E-08 8.14888E-08 8.19107E-08 8.23332E-08 8.27561E-08 8.31795E-08 8.36035E-08 8.40279E-08 8.44529E-08 8.48783E-08 8.53043E-08 8.57308E-08 8.61578E-08 8.65854E-08 8.70135E-08 8.74422E-08 8.78714E-08 8.83012E-08 8.87315E-08 8.91625E-08 8.9594E-08 9.0026E-08 9.04587E-08 9.0892E-08 9.1326E-08 9.17605E-08 9.21957E-08 9.26315E-08 9.30679E-08 9.35051E-08 9.39428E-08 9.43813E-08 9.48205E-08 9.52604E-08 9.57009E-08 9.61422E-08 9.65843E-08 9.70271E-08 9.74706E-08 9.7915E-08 9.83601E-08 9.8806E-08 9.92528E-08 9.97003E-08 1.00149E-07 1.00598E-07 1.01048E-07 1.01499E-07 1.01951E-07 1.02404E-07 1.02858E-07 1.03313E-07 1.03769E-07 1.04226E-07 1.04684E-07 1.05143E-07 1.05603E-07 1.06064E-07 1.06526E-07 1.06989E-07 1.07454E-07 1.0792E-07 1.08387E-07 1.08855E-07 1.09325E-07 1.09796E-07 1.10269E-07 1.10742E-07 -1.25349E-06 -9.22945E-07 -6.73575E-07 -4.86454E-07 -3.46599E-07 -2.4216E-07 -1.63823E-07 -1.04474E-07 -5.91495E-08 -2.48837E-08 8.16777E-13 1.76595E-08 2.99254E-08 3.78671E-08 4.27615E-08 4.5773E-08 4.77212E-08 4.90878E-08 5.01317E-08 5.09897E-08 5.1736E-08 5.24118E-08 5.30414E-08 5.36398E-08 5.42161E-08 5.47767E-08 5.53257E-08 5.58661E-08 5.63998E-08 5.69284E-08 5.74531E-08 5.79747E-08 5.84938E-08 5.9011E-08 5.95267E-08 6.00413E-08 6.05549E-08 6.10678E-08 6.15802E-08 6.20922E-08 6.2604E-08 6.31156E-08 6.36272E-08 6.41388E-08 6.46505E-08 6.51624E-08 6.56745E-08 6.61868E-08 6.66993E-08 6.72122E-08 6.77255E-08 6.82391E-08 6.87531E-08 6.92675E-08 6.97823E-08 7.02976E-08 7.08133E-08 7.13295E-08 7.18461E-08 7.23633E-08 7.2881E-08 7.33992E-08 7.39178E-08 7.4437E-08 7.49568E-08 7.5477E-08 7.59978E-08 7.65192E-08 7.7041E-08 7.75635E-08 7.80864E-08 7.861E-08 7.9134E-08 7.96587E-08 8.01839E-08 8.07096E-08 8.12359E-08 8.17628E-08 8.22902E-08 8.28182E-08 8.33467E-08 8.38758E-08 8.44055E-08 8.49357E-08 8.54665E-08 8.59979E-08 8.65298E-08 8.70623E-08 8.75954E-08 8.8129E-08 8.86632E-08 8.91979E-08 8.97332E-08 9.02691E-08 9.08055E-08 9.13425E-08 9.18801E-08 9.24182E-08 9.29569E-08 9.34961E-08 9.4036E-08 9.45764E-08 9.51173E-08 9.56589E-08 9.6201E-08 9.67436E-08 9.72869E-08 9.78307E-08 9.83751E-08 9.89201E-08 9.94656E-08 1.00012E-07 1.00559E-07 1.01106E-07 1.01654E-07 1.02202E-07 1.02751E-07 1.03301E-07 1.03851E-07 1.04402E-07 1.04954E-07 1.05506E-07 1.06059E-07 1.06612E-07 1.07166E-07 1.07721E-07 1.08276E-07 1.08832E-07 1.09388E-07 1.09946E-07 1.10503E-07 1.11062E-07 1.11621E-07 1.12181E-07 1.12742E-07 1.13303E-07 1.13865E-07 1.14428E-07 1.14991E-07 1.15555E-07 1.1612E-07 1.16686E-07 1.17252E-07 1.17819E-07 1.18387E-07 1.18956E-07 1.19525E-07 1.20095E-07 1.20666E-07 1.21238E-07 1.21811E-07 1.22385E-07 1.22959E-07 1.23534E-07 1.24111E-07 1.24688E-07 1.25266E-07 1.25845E-07 1.26425E-07 1.27005E-07 1.27587E-07 1.2817E-07 1.28754E-07 1.29339E-07 1.29925E-07 1.30512E-07 1.311E-07 1.31689E-07 1.32279E-07 1.32871E-07 1.33463E-07 1.34057E-07 1.34652E-07 1.35248E-07 1.35846E-07 1.36445E-07 1.37045E-07 1.37646E-07 1.38249E-07 1.38853E-07 1.39459E-07 1.40066E-07 1.40675E-07 1.41285E-07 1.41897E-07 1.4251E-07 1.43125E-07 1.43742E-07 1.4436E-07 1.4498E-07 1.45602E-07 -1.57075E-06 -1.1624E-06 -8.5269E-07 -6.18967E-07 -4.43235E-07 -3.11187E-07 -2.11498E-07 -1.35469E-07 -7.70145E-08 -3.25247E-08 1.11786E-12 2.31682E-08 3.92653E-08 4.9691E-08 5.61183E-08 6.00734E-08 6.26321E-08 6.44264E-08 6.57967E-08 6.69229E-08 6.79021E-08 6.87888E-08 6.96149E-08 7.03998E-08 7.11559E-08 7.18912E-08 7.26113E-08 7.332E-08 7.402E-08 7.47133E-08 7.54014E-08 7.60854E-08 7.67663E-08 7.74446E-08 7.8121E-08 7.87957E-08 7.94693E-08 8.0142E-08 8.08139E-08 8.14854E-08 8.21566E-08 8.28275E-08 8.34984E-08 8.41694E-08 8.48404E-08 8.55116E-08 8.61832E-08 8.6855E-08 8.75272E-08 8.81997E-08 8.88728E-08 8.95463E-08 9.02203E-08 9.08949E-08 9.157E-08 9.22457E-08 9.2922E-08 9.35989E-08 9.42764E-08 9.49545E-08 9.56334E-08 9.63128E-08 9.6993E-08 9.76738E-08 9.83554E-08 9.90376E-08 9.97205E-08 1.00404E-07 1.01088E-07 1.01773E-07 1.02459E-07 1.03146E-07 1.03833E-07 1.04521E-07 1.0521E-07 1.05899E-07 1.06589E-07 1.0728E-07 1.07971E-07 1.08664E-07 1.09357E-07 1.10051E-07 1.10745E-07 1.1144E-07 1.12136E-07 1.12833E-07 1.13531E-07 1.14229E-07 1.14928E-07 1.15627E-07 1.16328E-07 1.17029E-07 1.17731E-07 1.18433E-07 1.19137E-07 1.19841E-07 1.20546E-07 1.21251E-07 1.21958E-07 1.22665E-07 1.23372E-07 1.24081E-07 1.2479E-07 1.255E-07 1.26211E-07 1.26923E-07 1.27635E-07 1.28348E-07 1.29062E-07 1.29776E-07 1.30491E-07 1.31207E-07 1.31924E-07 1.32642E-07 1.3336E-07 1.34079E-07 1.34799E-07 1.3552E-07 1.36241E-07 1.36964E-07 1.37687E-07 1.38411E-07 1.39135E-07 1.39861E-07 1.40587E-07 1.41314E-07 1.42042E-07 1.42771E-07 1.43501E-07 1.44231E-07 1.44963E-07 1.45695E-07 1.46428E-07 1.47162E-07 1.47897E-07 1.48633E-07 1.49369E-07 1.50107E-07 1.50846E-07 1.51585E-07 1.52326E-07 1.53067E-07 1.53809E-07 1.54553E-07 1.55297E-07 1.56043E-07 1.56789E-07 1.57537E-07 1.58285E-07 1.59035E-07 1.59786E-07 1.60538E-07 1.61291E-07 1.62045E-07 1.628E-07 1.63557E-07 1.64314E-07 1.65073E-07 1.65833E-07 1.66594E-07 1.67357E-07 1.68121E-07 1.68886E-07 1.69653E-07 1.70421E-07 1.7119E-07 1.71961E-07 1.72733E-07 1.73506E-07 1.74281E-07 1.75058E-07 1.75836E-07 1.76616E-07 1.77397E-07 1.7818E-07 1.78964E-07 1.79751E-07 1.80539E-07 1.81328E-07 1.8212E-07 1.82913E-07 1.83709E-07 1.84506E-07 1.85305E-07 1.86106E-07 1.8691E-07 1.87715E-07 1.88523E-07 1.89333E-07 1.90145E-07 1.90959E-07 -1.96077E-06 -1.45823E-06 -1.07512E-06 -7.84424E-07 -5.64575E-07 -3.9835E-07 -2.72036E-07 -1.75042E-07 -9.99447E-08 -4.23827E-08 1.48957E-12 3.03125E-08 5.13816E-08 6.50339E-08 7.34535E-08 7.86355E-08 8.19875E-08 8.43377E-08 8.6132E-08 8.76063E-08 8.88879E-08 9.00481E-08 9.11289E-08 9.21558E-08 9.31448E-08 9.41067E-08 9.50486E-08 9.59755E-08 9.6891E-08 9.77978E-08 9.86978E-08 9.95924E-08 1.00483E-07 1.0137E-07 1.02254E-07 1.03137E-07 1.04018E-07 1.04898E-07 1.05776E-07 1.06654E-07 1.07532E-07 1.0841E-07 1.09287E-07 1.10164E-07 1.11042E-07 1.1192E-07 1.12798E-07 1.13676E-07 1.14555E-07 1.15435E-07 1.16315E-07 1.17196E-07 1.18077E-07 1.18959E-07 1.19842E-07 1.20725E-07 1.2161E-07 1.22495E-07 1.23381E-07 1.24268E-07 1.25155E-07 1.26044E-07 1.26933E-07 1.27823E-07 1.28715E-07 1.29607E-07 1.305E-07 1.31394E-07 1.32288E-07 1.33184E-07 1.34081E-07 1.34978E-07 1.35877E-07 1.36776E-07 1.37677E-07 1.38578E-07 1.39481E-07 1.40384E-07 1.41288E-07 1.42193E-07 1.431E-07 1.44007E-07 1.44915E-07 1.45824E-07 1.46734E-07 1.47645E-07 1.48557E-07 1.4947E-07 1.50384E-07 1.51298E-07 1.52214E-07 1.53131E-07 1.54049E-07 1.54967E-07 1.55887E-07 1.56808E-07 1.57729E-07 1.58652E-07 1.59575E-07 1.60499E-07 1.61425E-07 1.62351E-07 1.63279E-07 1.64207E-07 1.65136E-07 1.66066E-07 1.66998E-07 1.6793E-07 1.68863E-07 1.69797E-07 1.70732E-07 1.71669E-07 1.72606E-07 1.73544E-07 1.74483E-07 1.75423E-07 1.76364E-07 1.77307E-07 1.7825E-07 1.79194E-07 1.80139E-07 1.81086E-07 1.82033E-07 1.82982E-07 1.83931E-07 1.84882E-07 1.85833E-07 1.86786E-07 1.8774E-07 1.88695E-07 1.89651E-07 1.90608E-07 1.91567E-07 1.92526E-07 1.93487E-07 1.94449E-07 1.95412E-07 1.96376E-07 1.97342E-07 1.98308E-07 1.99276E-07 2.00246E-07 2.01216E-07 2.02188E-07 2.03161E-07 2.04135E-07 2.05111E-07 2.06088E-07 2.07067E-07 2.08047E-07 2.09028E-07 2.10011E-07 2.10995E-07 2.11981E-07 2.12968E-07 2.13956E-07 2.14947E-07 2.15939E-07 2.16932E-07 2.17927E-07 2.18924E-07 2.19922E-07 2.20922E-07 2.21924E-07 2.22927E-07 2.23933E-07 2.2494E-07 2.25949E-07 2.2696E-07 2.27972E-07 2.28987E-07 2.30004E-07 2.31023E-07 2.32043E-07 2.33066E-07 2.34091E-07 2.35119E-07 2.36148E-07 2.3718E-07 2.38214E-07 2.3925E-07 2.40289E-07 2.41331E-07 2.42375E-07 2.43421E-07 2.4447E-07 2.45522E-07 2.46577E-07 2.47634E-07 2.48695E-07 2.49758E-07 -2.43852E-06 -1.82226E-06 -1.35018E-06 -9.901E-07 -7.1623E-07 -5.07893E-07 -3.48542E-07 -2.25329E-07 -1.29241E-07 -5.50457E-08 1.94707E-12 3.95411E-08 6.70388E-08 8.48671E-08 9.58674E-08 1.02639E-07 1.07019E-07 1.10089E-07 1.12433E-07 1.14357E-07 1.1603E-07 1.17543E-07 1.18953E-07 1.20293E-07 1.21582E-07 1.22837E-07 1.24065E-07 1.25274E-07 1.26468E-07 1.2765E-07 1.28823E-07 1.2999E-07 1.31151E-07 1.32307E-07 1.33461E-07 1.34611E-07 1.3576E-07 1.36906E-07 1.38052E-07 1.39197E-07 1.40341E-07 1.41485E-07 1.42629E-07 1.43773E-07 1.44917E-07 1.46061E-07 1.47206E-07 1.48351E-07 1.49497E-07 1.50644E-07 1.51791E-07 1.52939E-07 1.54088E-07 1.55238E-07 1.56389E-07 1.57541E-07 1.58693E-07 1.59847E-07 1.61002E-07 1.62158E-07 1.63315E-07 1.64473E-07 1.65633E-07 1.66793E-07 1.67955E-07 1.69118E-07 1.70282E-07 1.71447E-07 1.72613E-07 1.73781E-07 1.7495E-07 1.7612E-07 1.77291E-07 1.78464E-07 1.79638E-07 1.80812E-07 1.81989E-07 1.83166E-07 1.84345E-07 1.85525E-07 1.86706E-07 1.87888E-07 1.89072E-07 1.90257E-07 1.91443E-07 1.9263E-07 1.93819E-07 1.95009E-07 1.962E-07 1.97393E-07 1.98586E-07 1.99781E-07 2.00977E-07 2.02175E-07 2.03373E-07 2.04573E-07 2.05774E-07 2.06977E-07 2.0818E-07 2.09385E-07 2.10591E-07 2.11799E-07 2.13007E-07 2.14217E-07 2.15428E-07 2.16641E-07 2.17855E-07 2.1907E-07 2.20286E-07 2.21503E-07 2.22722E-07 2.23942E-07 2.25164E-07 2.26386E-07 2.2761E-07 2.28836E-07 2.30062E-07 2.3129E-07 2.32519E-07 2.3375E-07 2.34982E-07 2.36215E-07 2.3745E-07 2.38686E-07 2.39924E-07 2.41162E-07 2.42403E-07 2.43644E-07 2.44887E-07 2.46132E-07 2.47378E-07 2.48625E-07 2.49874E-07 2.51125E-07 2.52377E-07 2.5363E-07 2.54885E-07 2.56142E-07 2.574E-07 2.5866E-07 2.59921E-07 2.61184E-07 2.62449E-07 2.63715E-07 2.64983E-07 2.66253E-07 2.67524E-07 2.68798E-07 2.70073E-07 2.71349E-07 2.72628E-07 2.73909E-07 2.75191E-07 2.76475E-07 2.77762E-07 2.7905E-07 2.8034E-07 2.81632E-07 2.82927E-07 2.84223E-07 2.85521E-07 2.86822E-07 2.88125E-07 2.8943E-07 2.90737E-07 2.92047E-07 2.93359E-07 2.94674E-07 2.9599E-07 2.9731E-07 2.98631E-07 2.99956E-07 3.01283E-07 3.02612E-07 3.03945E-07 3.0528E-07 3.06618E-07 3.07959E-07 3.09302E-07 3.10649E-07 3.11999E-07 3.13352E-07 3.14708E-07 3.16067E-07 3.1743E-07 3.18796E-07 3.20165E-07 3.21538E-07 3.22915E-07 3.24295E-07 3.25679E-07 -3.02173E-06 -2.26859E-06 -1.68899E-06 -1.24468E-06 -9.04913E-07 -6.44912E-07 -4.44757E-07 -2.88915E-07 -1.66491E-07 -7.12358E-08 2.51167E-12 5.1411E-08 8.71868E-08 1.104E-07 1.24731E-07 1.33557E-07 1.39264E-07 1.43263E-07 1.46314E-07 1.48819E-07 1.50994E-07 1.52963E-07 1.54797E-07 1.56538E-07 1.58215E-07 1.59845E-07 1.61441E-07 1.63012E-07 1.64564E-07 1.661E-07 1.67625E-07 1.69141E-07 1.70649E-07 1.72152E-07 1.73651E-07 1.75146E-07 1.76638E-07 1.78128E-07 1.79617E-07 1.81104E-07 1.82591E-07 1.84077E-07 1.85563E-07 1.8705E-07 1.88536E-07 1.90023E-07 1.9151E-07 1.92998E-07 1.94487E-07 1.95976E-07 1.97467E-07 1.98959E-07 2.00451E-07 2.01945E-07 2.03441E-07 2.04937E-07 2.06435E-07 2.07934E-07 2.09434E-07 2.10936E-07 2.12439E-07 2.13944E-07 2.1545E-07 2.16958E-07 2.18467E-07 2.19977E-07 2.21489E-07 2.23003E-07 2.24519E-07 2.26035E-07 2.27554E-07 2.29074E-07 2.30595E-07 2.32118E-07 2.33643E-07 2.3517E-07 2.36698E-07 2.38227E-07 2.39758E-07 2.41291E-07 2.42825E-07 2.44361E-07 2.45899E-07 2.47438E-07 2.48979E-07 2.50521E-07 2.52065E-07 2.53611E-07 2.55158E-07 2.56707E-07 2.58258E-07 2.5981E-07 2.61364E-07 2.62919E-07 2.64476E-07 2.66035E-07 2.67595E-07 2.69157E-07 2.7072E-07 2.72285E-07 2.73852E-07 2.7542E-07 2.7699E-07 2.78561E-07 2.80135E-07 2.81709E-07 2.83286E-07 2.84864E-07 2.86444E-07 2.88025E-07 2.89608E-07 2.91193E-07 2.92779E-07 2.94368E-07 2.95957E-07 2.97549E-07 2.99142E-07 3.00737E-07 3.02333E-07 3.03932E-07 3.05532E-07 3.07134E-07 3.08737E-07 3.10343E-07 3.1195E-07 3.13559E-07 3.1517E-07 3.16782E-07 3.18397E-07 3.20013E-07 3.21631E-07 3.23251E-07 3.24873E-07 3.26497E-07 3.28123E-07 3.29751E-07 3.31381E-07 3.33013E-07 3.34647E-07 3.36283E-07 3.37921E-07 3.39561E-07 3.41203E-07 3.42848E-07 3.44495E-07 3.46144E-07 3.47795E-07 3.49448E-07 3.51104E-07 3.52762E-07 3.54422E-07 3.56085E-07 3.5775E-07 3.59418E-07 3.61088E-07 3.62761E-07 3.64436E-07 3.66114E-07 3.67794E-07 3.69478E-07 3.71164E-07 3.72852E-07 3.74544E-07 3.76239E-07 3.77936E-07 3.79636E-07 3.8134E-07 3.83046E-07 3.84755E-07 3.86468E-07 3.88184E-07 3.89903E-07 3.91626E-07 3.93352E-07 3.95081E-07 3.96814E-07 3.98551E-07 4.00291E-07 4.02035E-07 4.03783E-07 4.05535E-07 4.0729E-07 4.0905E-07 4.10814E-07 4.12582E-07 4.14355E-07 4.16131E-07 4.17913E-07 4.19699E-07 4.2149E-07 4.23285E-07 -3.73138E-06 -2.81392E-06 -2.10473E-06 -1.5585E-06 -1.13863E-06 -8.15493E-07 -5.65162E-07 -3.68912E-07 -2.13611E-07 -9.18321E-08 3.21406E-12 6.66076E-08 1.12997E-07 1.43126E-07 1.61742E-07 1.7321E-07 1.80626E-07 1.8582E-07 1.89779E-07 1.93028E-07 1.95849E-07 1.98401E-07 2.00776E-07 2.03032E-07 2.05204E-07 2.07316E-07 2.09383E-07 2.11418E-07 2.13426E-07 2.15416E-07 2.1739E-07 2.19353E-07 2.21306E-07 2.23252E-07 2.25192E-07 2.27127E-07 2.29059E-07 2.30988E-07 2.32915E-07 2.34841E-07 2.36765E-07 2.38689E-07 2.40613E-07 2.42537E-07 2.44461E-07 2.46386E-07 2.48311E-07 2.50237E-07 2.52164E-07 2.54092E-07 2.56022E-07 2.57953E-07 2.59885E-07 2.61819E-07 2.63754E-07 2.65691E-07 2.67629E-07 2.6957E-07 2.71512E-07 2.73456E-07 2.75401E-07 2.77349E-07 2.79298E-07 2.8125E-07 2.83203E-07 2.85158E-07 2.87115E-07 2.89075E-07 2.91036E-07 2.92999E-07 2.94964E-07 2.96931E-07 2.98901E-07 3.00872E-07 3.02846E-07 3.04821E-07 3.06799E-07 3.08778E-07 3.1076E-07 3.12744E-07 3.14729E-07 3.16717E-07 3.18707E-07 3.20699E-07 3.22693E-07 3.24689E-07 3.26688E-07 3.28688E-07 3.30691E-07 3.32695E-07 3.34702E-07 3.3671E-07 3.38721E-07 3.40734E-07 3.42749E-07 3.44766E-07 3.46785E-07 3.48806E-07 3.50829E-07 3.52855E-07 3.54882E-07 3.56911E-07 3.58943E-07 3.60977E-07 3.63013E-07 3.6505E-07 3.67091E-07 3.69133E-07 3.71177E-07 3.73223E-07 3.75272E-07 3.77323E-07 3.79375E-07 3.8143E-07 3.83488E-07 3.85547E-07 3.87609E-07 3.89672E-07 3.91738E-07 3.93807E-07 3.95877E-07 3.9795E-07 4.00025E-07 4.02102E-07 4.04182E-07 4.06263E-07 4.08348E-07 4.10434E-07 4.12523E-07 4.14615E-07 4.16708E-07 4.18805E-07 4.20903E-07 4.23005E-07 4.25108E-07 4.27215E-07 4.29323E-07 4.31435E-07 4.33549E-07 4.35665E-07 4.37785E-07 4.39907E-07 4.42032E-07 4.44159E-07 4.4629E-07 4.48423E-07 4.50559E-07 4.52698E-07 4.5484E-07 4.56985E-07 4.59133E-07 4.61284E-07 4.63439E-07 4.65596E-07 4.67757E-07 4.69921E-07 4.72088E-07 4.74258E-07 4.76432E-07 4.7861E-07 4.80791E-07 4.82975E-07 4.85163E-07 4.87355E-07 4.8955E-07 4.9175E-07 4.93953E-07 4.9616E-07 4.98371E-07 5.00586E-07 5.02805E-07 5.05029E-07 5.07256E-07 5.09489E-07 5.11725E-07 5.13966E-07 5.16212E-07 5.18462E-07 5.20717E-07 5.22977E-07 5.25242E-07 5.27512E-07 5.29787E-07 5.32068E-07 5.34354E-07 5.36645E-07 5.38942E-07 5.41245E-07 5.43553E-07 5.45868E-07 5.48188E-07 -4.59211E-06 -3.478E-06 -2.61306E-06 -1.94385E-06 -1.4269E-06 -1.02688E-06 -7.15101E-07 -4.69036E-07 -2.72901E-07 -1.17896E-07 4.0992E-12 8.59674E-08 1.45904E-07 1.84878E-07 2.08985E-07 2.23843E-07 2.33449E-07 2.40172E-07 2.45294E-07 2.49494E-07 2.53139E-07 2.56434E-07 2.59501E-07 2.62412E-07 2.65215E-07 2.67939E-07 2.70606E-07 2.7323E-07 2.75821E-07 2.78387E-07 2.80933E-07 2.83464E-07 2.85983E-07 2.88492E-07 2.90994E-07 2.9349E-07 2.95981E-07 2.98468E-07 3.00953E-07 3.03436E-07 3.05917E-07 3.08398E-07 3.10878E-07 3.13359E-07 3.1584E-07 3.18321E-07 3.20803E-07 3.23287E-07 3.25771E-07 3.28257E-07 3.30745E-07 3.33234E-07 3.35725E-07 3.38218E-07 3.40713E-07 3.4321E-07 3.45709E-07 3.48211E-07 3.50715E-07 3.53221E-07 3.55729E-07 3.5824E-07 3.60753E-07 3.63268E-07 3.65786E-07 3.68307E-07 3.7083E-07 3.73356E-07 3.75884E-07 3.78415E-07 3.80948E-07 3.83484E-07 3.86023E-07 3.88564E-07 3.91108E-07 3.93654E-07 3.96203E-07 3.98755E-07 4.01309E-07 4.03867E-07 4.06426E-07 4.08989E-07 4.11554E-07 4.14121E-07 4.16692E-07 4.19265E-07 4.21841E-07 4.24419E-07 4.27E-07 4.29584E-07 4.3217E-07 4.34759E-07 4.37351E-07 4.39945E-07 4.42543E-07 4.45142E-07 4.47745E-07 4.5035E-07 4.52957E-07 4.55568E-07 4.58181E-07 4.60797E-07 4.63415E-07 4.66037E-07 4.6866E-07 4.71287E-07 4.73916E-07 4.76548E-07 4.79183E-07 4.81821E-07 4.84461E-07 4.87104E-07 4.89749E-07 4.92398E-07 4.95049E-07 4.97703E-07 5.0036E-07 5.0302E-07 5.05682E-07 5.08348E-07 5.11016E-07 5.13687E-07 5.16362E-07 5.19039E-07 5.21719E-07 5.24402E-07 5.27088E-07 5.29777E-07 5.32469E-07 5.35164E-07 5.37862E-07 5.40563E-07 5.43268E-07 5.45976E-07 5.48686E-07 5.51401E-07 5.54118E-07 5.56839E-07 5.59563E-07 5.62291E-07 5.65022E-07 5.67756E-07 5.70494E-07 5.73236E-07 5.75981E-07 5.7873E-07 5.81482E-07 5.84238E-07 5.86998E-07 5.89762E-07 5.9253E-07 5.95301E-07 5.98077E-07 6.00857E-07 6.03641E-07 6.06429E-07 6.09221E-07 6.12017E-07 6.14818E-07 6.17623E-07 6.20433E-07 6.23247E-07 6.26066E-07 6.2889E-07 6.31718E-07 6.34551E-07 6.3739E-07 6.40233E-07 6.43081E-07 6.45934E-07 6.48793E-07 6.51657E-07 6.54526E-07 6.57401E-07 6.60282E-07 6.63168E-07 6.66061E-07 6.68959E-07 6.71863E-07 6.74773E-07 6.7769E-07 6.80613E-07 6.83543E-07 6.86479E-07 6.89423E-07 6.92373E-07 6.9533E-07 6.98295E-07 7.01267E-07 7.04247E-07 7.07234E-07 -5.63272E-06 -4.28404E-06 -3.23247E-06 -2.41527E-06 -1.78102E-06 -1.28767E-06 -9.00911E-07 -5.93701E-07 -3.47102E-07 -1.50698E-07 5.23373E-12 1.10502E-07 1.87648E-07 2.37888E-07 2.69005E-07 2.88194E-07 3.00598E-07 3.09274E-07 3.15877E-07 3.21287E-07 3.25978E-07 3.30217E-07 3.3416E-07 3.37903E-07 3.41504E-07 3.45005E-07 3.48431E-07 3.51801E-07 3.5513E-07 3.58425E-07 3.61695E-07 3.64945E-07 3.6818E-07 3.71402E-07 3.74614E-07 3.77818E-07 3.81017E-07 3.84211E-07 3.87401E-07 3.90589E-07 3.93775E-07 3.9696E-07 4.00144E-07 4.03328E-07 4.06513E-07 4.09699E-07 4.12885E-07 4.16073E-07 4.19263E-07 4.22455E-07 4.25648E-07 4.28843E-07 4.32041E-07 4.35242E-07 4.38444E-07 4.4165E-07 4.44858E-07 4.48069E-07 4.51283E-07 4.545E-07 4.57719E-07 4.60942E-07 4.64168E-07 4.67397E-07 4.70629E-07 4.73865E-07 4.77103E-07 4.80345E-07 4.8359E-07 4.86838E-07 4.9009E-07 4.93345E-07 4.96604E-07 4.99865E-07 5.0313E-07 5.06399E-07 5.09671E-07 5.12946E-07 5.16224E-07 5.19506E-07 5.22792E-07 5.2608E-07 5.29372E-07 5.32668E-07 5.35967E-07 5.39269E-07 5.42575E-07 5.45884E-07 5.49197E-07 5.52513E-07 5.55832E-07 5.59155E-07 5.62481E-07 5.65811E-07 5.69143E-07 5.7248E-07 5.7582E-07 5.79163E-07 5.8251E-07 5.8586E-07 5.89213E-07 5.9257E-07 5.9593E-07 5.99294E-07 6.02661E-07 6.06032E-07 6.09406E-07 6.12784E-07 6.16165E-07 6.19549E-07 6.22937E-07 6.26329E-07 6.29724E-07 6.33122E-07 6.36525E-07 6.3993E-07 6.4334E-07 6.46753E-07 6.50169E-07 6.53589E-07 6.57013E-07 6.60441E-07 6.63872E-07 6.67307E-07 6.70746E-07 6.74189E-07 6.77635E-07 6.81085E-07 6.8454E-07 6.87998E-07 6.9146E-07 6.94926E-07 6.98396E-07 7.0187E-07 7.05349E-07 7.08831E-07 7.12318E-07 7.15808E-07 7.19304E-07 7.22803E-07 7.26307E-07 7.29815E-07 7.33328E-07 7.36845E-07 7.40367E-07 7.43894E-07 7.47425E-07 7.50961E-07 7.54502E-07 7.58048E-07 7.61598E-07 7.65154E-07 7.68715E-07 7.72281E-07 7.75852E-07 7.79428E-07 7.8301E-07 7.86598E-07 7.9019E-07 7.93789E-07 7.97393E-07 8.01003E-07 8.04619E-07 8.08241E-07 8.11868E-07 8.15502E-07 8.19143E-07 8.22789E-07 8.26442E-07 8.30102E-07 8.33768E-07 8.37441E-07 8.41121E-07 8.44808E-07 8.48503E-07 8.52204E-07 8.55913E-07 8.59629E-07 8.63353E-07 8.67085E-07 8.70825E-07 8.74573E-07 8.78329E-07 8.82094E-07 8.85868E-07 8.8965E-07 8.93441E-07 8.97241E-07 9.01051E-07 9.0487E-07 9.08699E-07 -6.88655E-06 -5.25922E-06 -3.98473E-06 -2.98994E-06 -2.21434E-06 -1.60802E-06 -1.13008E-06 -7.48112E-07 -4.39446E-07 -1.91742E-07 6.71706E-12 1.41425E-07 2.40323E-07 3.04854E-07 3.44886E-07 3.69593E-07 3.85561E-07 3.96719E-07 4.05201E-07 4.12143E-07 4.18157E-07 4.23588E-07 4.28637E-07 4.33427E-07 4.38035E-07 4.42513E-07 4.46895E-07 4.51206E-07 4.55461E-07 4.59675E-07 4.63855E-07 4.6801E-07 4.72145E-07 4.76264E-07 4.8037E-07 4.84466E-07 4.88554E-07 4.92636E-07 4.96713E-07 5.00787E-07 5.04859E-07 5.0893E-07 5.12999E-07 5.17069E-07 5.21139E-07 5.2521E-07 5.29282E-07 5.33356E-07 5.37432E-07 5.41511E-07 5.45591E-07 5.49675E-07 5.53761E-07 5.57851E-07 5.61943E-07 5.66039E-07 5.70138E-07 5.74241E-07 5.78348E-07 5.82458E-07 5.86572E-07 5.9069E-07 5.94812E-07 5.98938E-07 6.03067E-07 6.07201E-07 6.11339E-07 6.15481E-07 6.19627E-07 6.23778E-07 6.27932E-07 6.32091E-07 6.36254E-07 6.40421E-07 6.44593E-07 6.48768E-07 6.52948E-07 6.57133E-07 6.61321E-07 6.65514E-07 6.69711E-07 6.73913E-07 6.78119E-07 6.82329E-07 6.86544E-07 6.90762E-07 6.94985E-07 6.99213E-07 7.03445E-07 7.07681E-07 7.11921E-07 7.16166E-07 7.20415E-07 7.24668E-07 7.28926E-07 7.33188E-07 7.37455E-07 7.41725E-07 7.46E-07 7.5028E-07 7.54563E-07 7.58851E-07 7.63144E-07 7.67441E-07 7.71742E-07 7.76047E-07 7.80357E-07 7.84672E-07 7.8899E-07 7.93314E-07 7.97641E-07 8.01973E-07 8.0631E-07 8.10651E-07 8.14996E-07 8.19347E-07 8.23701E-07 8.2806E-07 8.32424E-07 8.36793E-07 8.41166E-07 8.45544E-07 8.49926E-07 8.54314E-07 8.58706E-07 8.63103E-07 8.67504E-07 8.71911E-07 8.76323E-07 8.80739E-07 8.85161E-07 8.89588E-07 8.94019E-07 8.98456E-07 9.02899E-07 9.07346E-07 9.11799E-07 9.16257E-07 9.20721E-07 9.2519E-07 9.29664E-07 9.34145E-07 9.38631E-07 9.43122E-07 9.4762E-07 9.52123E-07 9.56633E-07 9.61148E-07 9.6567E-07 9.70197E-07 9.74731E-07 9.79272E-07 9.83819E-07 9.88372E-07 9.92932E-07 9.97499E-07 1.00207E-06 1.00665E-06 1.01124E-06 1.01583E-06 1.02044E-06 1.02505E-06 1.02966E-06 1.03429E-06 1.03892E-06 1.04356E-06 1.04821E-06 1.05286E-06 1.05752E-06 1.0622E-06 1.06688E-06 1.07157E-06 1.07626E-06 1.08097E-06 1.08569E-06 1.09041E-06 1.09514E-06 1.09989E-06 1.10464E-06 1.1094E-06 1.11418E-06 1.11896E-06 1.12375E-06 1.12856E-06 1.13337E-06 1.1382E-06 1.14304E-06 1.14789E-06 1.15275E-06 1.15762E-06 1.16251E-06 -8.39185E-06 -6.43501E-06 -4.89527E-06 -3.68805E-06 -2.74256E-06 -1.9999E-06 -1.4114E-06 -9.38381E-07 -5.53727E-07 -2.42798E-07 8.69758E-12 1.80178E-07 3.06435E-07 3.89012E-07 4.40346E-07 4.72059E-07 4.92549E-07 5.06852E-07 5.1771E-07 5.26584E-07 5.34263E-07 5.41191E-07 5.47628E-07 5.53731E-07 5.59601E-07 5.65303E-07 5.70881E-07 5.76368E-07 5.81784E-07 5.87146E-07 5.92465E-07 5.97752E-07 6.03012E-07 6.08252E-07 6.13475E-07 6.18685E-07 6.23886E-07 6.29078E-07 6.34264E-07 6.39446E-07 6.44625E-07 6.49802E-07 6.54978E-07 6.60154E-07 6.6533E-07 6.70508E-07 6.75687E-07 6.80868E-07 6.86051E-07 6.91237E-07 6.96427E-07 7.0162E-07 7.06816E-07 7.12016E-07 7.1722E-07 7.22429E-07 7.27641E-07 7.32859E-07 7.3808E-07 7.43307E-07 7.48538E-07 7.53774E-07 7.59015E-07 7.64261E-07 7.69512E-07 7.74768E-07 7.80029E-07 7.85296E-07 7.90567E-07 7.95844E-07 8.01126E-07 8.06414E-07 8.11707E-07 8.17005E-07 8.22309E-07 8.27618E-07 8.32932E-07 8.38252E-07 8.43577E-07 8.48908E-07 8.54244E-07 8.59585E-07 8.64932E-07 8.70285E-07 8.75643E-07 8.81006E-07 8.86375E-07 8.91749E-07 8.97129E-07 9.02514E-07 9.07905E-07 9.13301E-07 9.18702E-07 9.24109E-07 9.29522E-07 9.34939E-07 9.40363E-07 9.45792E-07 9.51226E-07 9.56666E-07 9.62111E-07 9.67562E-07 9.73018E-07 9.7848E-07 9.83947E-07 9.8942E-07 9.94898E-07 1.00038E-06 1.00587E-06 1.01137E-06 1.01687E-06 1.02237E-06 1.02789E-06 1.0334E-06 1.03893E-06 1.04446E-06 1.04999E-06 1.05553E-06 1.06108E-06 1.06663E-06 1.07219E-06 1.07775E-06 1.08332E-06 1.0889E-06 1.09448E-06 1.10007E-06 1.10566E-06 1.11126E-06 1.11687E-06 1.12248E-06 1.1281E-06 1.13373E-06 1.13936E-06 1.145E-06 1.15065E-06 1.1563E-06 1.16196E-06 1.16762E-06 1.17329E-06 1.17897E-06 1.18466E-06 1.19035E-06 1.19605E-06 1.20176E-06 1.20748E-06 1.2132E-06 1.21893E-06 1.22467E-06 1.23041E-06 1.23617E-06 1.24193E-06 1.2477E-06 1.25348E-06 1.25926E-06 1.26506E-06 1.27086E-06 1.27667E-06 1.28249E-06 1.28832E-06 1.29416E-06 1.3E-06 1.30586E-06 1.31172E-06 1.3176E-06 1.32348E-06 1.32938E-06 1.33528E-06 1.3412E-06 1.34712E-06 1.35306E-06 1.359E-06 1.36496E-06 1.37092E-06 1.3769E-06 1.38289E-06 1.38889E-06 1.39491E-06 1.40093E-06 1.40697E-06 1.41302E-06 1.41908E-06 1.42516E-06 1.43124E-06 1.43735E-06 1.44346E-06 1.44959E-06 1.45573E-06 1.46189E-06 1.46806E-06 1.47425E-06 1.48045E-06 -1.01918E-05 -7.84754E-06 -5.99358E-06 -4.53316E-06 -3.38412E-06 -2.47732E-06 -1.75517E-06 -1.17164E-06 -6.9436E-07 -3.05927E-07 1.13959E-11 2.28457E-07 3.8895E-07 4.94226E-07 5.59835E-07 6.00419E-07 6.26635E-07 6.44909E-07 6.58759E-07 6.70058E-07 6.79822E-07 6.88622E-07 6.96791E-07 7.04531E-07 7.11972E-07 7.19198E-07 7.26265E-07 7.33215E-07 7.40074E-07 7.46863E-07 7.53598E-07 7.60291E-07 7.6695E-07 7.73582E-07 7.80193E-07 7.86788E-07 7.93369E-07 7.99941E-07 8.06504E-07 8.13062E-07 8.19616E-07 8.26167E-07 8.32716E-07 8.39266E-07 8.45815E-07 8.52366E-07 8.58919E-07 8.65475E-07 8.72033E-07 8.78595E-07 8.8516E-07 8.9173E-07 8.98305E-07 9.04884E-07 9.11468E-07 9.18057E-07 9.24652E-07 9.31252E-07 9.37858E-07 9.4447E-07 9.51087E-07 9.57711E-07 9.64341E-07 9.70977E-07 9.7762E-07 9.84268E-07 9.90924E-07 9.97586E-07 1.00425E-06 1.01093E-06 1.01761E-06 1.0243E-06 1.03099E-06 1.0377E-06 1.0444E-06 1.05112E-06 1.05784E-06 1.06457E-06 1.07131E-06 1.07805E-06 1.0848E-06 1.09155E-06 1.09832E-06 1.10509E-06 1.11186E-06 1.11865E-06 1.12544E-06 1.13223E-06 1.13904E-06 1.14585E-06 1.15267E-06 1.15949E-06 1.16632E-06 1.17316E-06 1.18E-06 1.18686E-06 1.19371E-06 1.20058E-06 1.20745E-06 1.21433E-06 1.22122E-06 1.22811E-06 1.23501E-06 1.24192E-06 1.24883E-06 1.25575E-06 1.26268E-06 1.26962E-06 1.27656E-06 1.28351E-06 1.29046E-06 1.29742E-06 1.30439E-06 1.31137E-06 1.31836E-06 1.32535E-06 1.33235E-06 1.33935E-06 1.34637E-06 1.35339E-06 1.36041E-06 1.36745E-06 1.37449E-06 1.38154E-06 1.3886E-06 1.39567E-06 1.40274E-06 1.40982E-06 1.41691E-06 1.42401E-06 1.43111E-06 1.43822E-06 1.44535E-06 1.45247E-06 1.45961E-06 1.46676E-06 1.47391E-06 1.48108E-06 1.48825E-06 1.49543E-06 1.50262E-06 1.50981E-06 1.51702E-06 1.52424E-06 1.53146E-06 1.5387E-06 1.54594E-06 1.55319E-06 1.56046E-06 1.56773E-06 1.57501E-06 1.58231E-06 1.58961E-06 1.59692E-06 1.60425E-06 1.61158E-06 1.61893E-06 1.62628E-06 1.63365E-06 1.64103E-06 1.64842E-06 1.65582E-06 1.66324E-06 1.67066E-06 1.6781E-06 1.68555E-06 1.69301E-06 1.70048E-06 1.70797E-06 1.71547E-06 1.72299E-06 1.73051E-06 1.73806E-06 1.74561E-06 1.75318E-06 1.76076E-06 1.76836E-06 1.77598E-06 1.7836E-06 1.79125E-06 1.79891E-06 1.80658E-06 1.81427E-06 1.82198E-06 1.82971E-06 1.83745E-06 1.84521E-06 1.85299E-06 1.86078E-06 1.8686E-06 1.87643E-06 -1.23346E-05 -9.53765E-06 -7.31345E-06 -5.55253E-06 -4.16043E-06 -3.05663E-06 -2.17337E-06 -1.45615E-06 -8.66448E-07 -3.83508E-07 1.5137E-11 2.88244E-07 4.9136E-07 6.25068E-07 7.08659E-07 7.60447E-07 7.93892E-07 8.17169E-07 8.34772E-07 8.49104E-07 8.61468E-07 8.72595E-07 8.82914E-07 8.92684E-07 9.02071E-07 9.11182E-07 9.20091E-07 9.28849E-07 9.37491E-07 9.46044E-07 9.54527E-07 9.62956E-07 9.71342E-07 9.79693E-07 9.88018E-07 9.9632E-07 1.00461E-06 1.01288E-06 1.02114E-06 1.0294E-06 1.03765E-06 1.04589E-06 1.05414E-06 1.06238E-06 1.07062E-06 1.07887E-06 1.08712E-06 1.09537E-06 1.10362E-06 1.11188E-06 1.12014E-06 1.12841E-06 1.13668E-06 1.14496E-06 1.15325E-06 1.16154E-06 1.16984E-06 1.17814E-06 1.18646E-06 1.19478E-06 1.2031E-06 1.21144E-06 1.21978E-06 1.22813E-06 1.23649E-06 1.24485E-06 1.25323E-06 1.26161E-06 1.27E-06 1.2784E-06 1.2868E-06 1.29522E-06 1.30364E-06 1.31207E-06 1.32051E-06 1.32896E-06 1.33742E-06 1.34589E-06 1.35436E-06 1.36284E-06 1.37133E-06 1.37983E-06 1.38834E-06 1.39686E-06 1.40538E-06 1.41391E-06 1.42246E-06 1.43101E-06 1.43957E-06 1.44813E-06 1.45671E-06 1.46529E-06 1.47389E-06 1.48249E-06 1.4911E-06 1.49972E-06 1.50835E-06 1.51698E-06 1.52563E-06 1.53428E-06 1.54294E-06 1.55161E-06 1.56029E-06 1.56898E-06 1.57767E-06 1.58638E-06 1.59509E-06 1.60382E-06 1.61255E-06 1.62129E-06 1.63003E-06 1.63879E-06 1.64756E-06 1.65633E-06 1.66512E-06 1.67391E-06 1.68271E-06 1.69152E-06 1.70034E-06 1.70917E-06 1.71801E-06 1.72686E-06 1.73572E-06 1.74458E-06 1.75346E-06 1.76234E-06 1.77124E-06 1.78014E-06 1.78906E-06 1.79798E-06 1.80692E-06 1.81586E-06 1.82482E-06 1.83378E-06 1.84276E-06 1.85174E-06 1.86074E-06 1.86975E-06 1.87876E-06 1.88779E-06 1.89683E-06 1.90588E-06 1.91495E-06 1.92402E-06 1.9331E-06 1.9422E-06 1.95131E-06 1.96043E-06 1.96956E-06 1.97871E-06 1.98786E-06 1.99703E-06 2.00621E-06 2.01541E-06 2.02462E-06 2.03384E-06 2.04307E-06 2.05232E-06 2.06158E-06 2.07086E-06 2.08015E-06 2.08946E-06 2.09878E-06 2.10811E-06 2.11746E-06 2.12683E-06 2.13621E-06 2.1456E-06 2.15501E-06 2.16444E-06 2.17389E-06 2.18335E-06 2.19283E-06 2.20232E-06 2.21184E-06 2.22137E-06 2.23092E-06 2.24049E-06 2.25007E-06 2.25968E-06 2.26931E-06 2.27895E-06 2.28862E-06 2.2983E-06 2.30801E-06 2.31774E-06 2.32749E-06 2.33726E-06 2.34706E-06 2.35687E-06 2.36671E-06 -1.48726E-05 -1.15508E-05 -8.8931E-06 -6.77732E-06 -5.09617E-06 -3.75672E-06 -2.67984E-06 -1.80143E-06 -1.07585E-06 -4.78264E-07 2.03914E-11 3.61833E-07 6.17744E-07 7.86931E-07 8.93106E-07 9.59019E-07 1.00157E-06 1.03114E-06 1.05344E-06 1.07155E-06 1.08714E-06 1.10115E-06 1.11412E-06 1.12639E-06 1.13818E-06 1.14961E-06 1.16078E-06 1.17176E-06 1.18259E-06 1.19331E-06 1.20393E-06 1.21449E-06 1.225E-06 1.23546E-06 1.24588E-06 1.25628E-06 1.26665E-06 1.27701E-06 1.28736E-06 1.29769E-06 1.30802E-06 1.31834E-06 1.32866E-06 1.33898E-06 1.3493E-06 1.35962E-06 1.36994E-06 1.38027E-06 1.3906E-06 1.40094E-06 1.41128E-06 1.42163E-06 1.43198E-06 1.44234E-06 1.45271E-06 1.46309E-06 1.47347E-06 1.48387E-06 1.49427E-06 1.50468E-06 1.5151E-06 1.52553E-06 1.53597E-06 1.54642E-06 1.55688E-06 1.56735E-06 1.57782E-06 1.58831E-06 1.59881E-06 1.60932E-06 1.61984E-06 1.63037E-06 1.6409E-06 1.65145E-06 1.66201E-06 1.67258E-06 1.68316E-06 1.69376E-06 1.70436E-06 1.71497E-06 1.72559E-06 1.73623E-06 1.74687E-06 1.75752E-06 1.76819E-06 1.77886E-06 1.78955E-06 1.80025E-06 1.81095E-06 1.82167E-06 1.8324E-06 1.84314E-06 1.85389E-06 1.86465E-06 1.87542E-06 1.8862E-06 1.89699E-06 1.90779E-06 1.91861E-06 1.92943E-06 1.94026E-06 1.95111E-06 1.96197E-06 1.97283E-06 1.98371E-06 1.9946E-06 2.0055E-06 2.0164E-06 2.02733E-06 2.03826E-06 2.0492E-06 2.06015E-06 2.07111E-06 2.08209E-06 2.09308E-06 2.10407E-06 2.11508E-06 2.1261E-06 2.13713E-06 2.14817E-06 2.15923E-06 2.17029E-06 2.18137E-06 2.19246E-06 2.20356E-06 2.21467E-06 2.22579E-06 2.23693E-06 2.24808E-06 2.25924E-06 2.27041E-06 2.2816E-06 2.29279E-06 2.304E-06 2.31523E-06 2.32646E-06 2.33771E-06 2.34898E-06 2.36025E-06 2.37154E-06 2.38284E-06 2.39416E-06 2.40549E-06 2.41684E-06 2.42819E-06 2.43957E-06 2.45096E-06 2.46236E-06 2.47378E-06 2.48521E-06 2.49666E-06 2.50812E-06 2.5196E-06 2.5311E-06 2.54261E-06 2.55414E-06 2.56569E-06 2.57725E-06 2.58883E-06 2.60043E-06 2.61204E-06 2.62367E-06 2.63532E-06 2.64699E-06 2.65868E-06 2.67039E-06 2.68211E-06 2.69386E-06 2.70562E-06 2.71741E-06 2.72921E-06 2.74104E-06 2.75289E-06 2.76475E-06 2.77665E-06 2.78856E-06 2.80049E-06 2.81245E-06 2.82443E-06 2.83644E-06 2.84847E-06 2.86052E-06 2.8726E-06 2.8847E-06 2.89683E-06 2.90899E-06 2.92117E-06 2.93338E-06 2.94562E-06 2.95788E-06 2.97018E-06 -1.78619E-05 -1.39367E-05 -1.0775E-05 -8.24266E-06 -6.21941E-06 -4.59917E-06 -3.29044E-06 -2.21837E-06 -1.32922E-06 -5.93287E-07 2.78234E-11 4.51852E-07 7.72832E-07 9.86129E-07 1.1206E-06 1.20429E-06 1.25832E-06 1.29577E-06 1.32393E-06 1.34673E-06 1.36632E-06 1.38387E-06 1.40011E-06 1.41545E-06 1.43017E-06 1.44443E-06 1.45837E-06 1.47206E-06 1.48556E-06 1.49892E-06 1.51216E-06 1.52532E-06 1.5384E-06 1.55143E-06 1.56441E-06 1.57736E-06 1.59028E-06 1.60317E-06 1.61605E-06 1.62892E-06 1.64178E-06 1.65463E-06 1.66747E-06 1.68032E-06 1.69316E-06 1.70601E-06 1.71886E-06 1.73171E-06 1.74457E-06 1.75743E-06 1.7703E-06 1.78318E-06 1.79606E-06 1.80896E-06 1.82186E-06 1.83477E-06 1.8477E-06 1.86063E-06 1.87357E-06 1.88653E-06 1.89949E-06 1.91247E-06 1.92546E-06 1.93846E-06 1.95147E-06 1.96449E-06 1.97753E-06 1.99058E-06 2.00364E-06 2.01671E-06 2.0298E-06 2.0429E-06 2.05601E-06 2.06913E-06 2.08227E-06 2.09542E-06 2.10858E-06 2.12176E-06 2.13494E-06 2.14815E-06 2.16136E-06 2.17459E-06 2.18783E-06 2.20108E-06 2.21434E-06 2.22762E-06 2.24092E-06 2.25422E-06 2.26754E-06 2.28087E-06 2.29421E-06 2.30757E-06 2.32094E-06 2.33432E-06 2.34772E-06 2.36113E-06 2.37455E-06 2.38798E-06 2.40143E-06 2.41489E-06 2.42837E-06 2.44186E-06 2.45536E-06 2.46887E-06 2.4824E-06 2.49594E-06 2.50949E-06 2.52306E-06 2.53664E-06 2.55023E-06 2.56384E-06 2.57746E-06 2.59109E-06 2.60474E-06 2.6184E-06 2.63207E-06 2.64576E-06 2.65947E-06 2.67318E-06 2.68691E-06 2.70066E-06 2.71442E-06 2.72819E-06 2.74198E-06 2.75578E-06 2.76959E-06 2.78342E-06 2.79727E-06 2.81113E-06 2.82501E-06 2.8389E-06 2.8528E-06 2.86673E-06 2.88066E-06 2.89462E-06 2.90859E-06 2.92257E-06 2.93657E-06 2.95059E-06 2.96463E-06 2.97868E-06 2.99275E-06 3.00684E-06 3.02094E-06 3.03506E-06 3.0492E-06 3.06336E-06 3.07753E-06 3.09172E-06 3.10594E-06 3.12017E-06 3.13442E-06 3.14869E-06 3.16298E-06 3.17729E-06 3.19162E-06 3.20597E-06 3.22034E-06 3.23474E-06 3.24915E-06 3.26359E-06 3.27804E-06 3.29252E-06 3.30703E-06 3.32155E-06 3.3361E-06 3.35068E-06 3.36527E-06 3.37989E-06 3.39454E-06 3.40921E-06 3.42391E-06 3.43863E-06 3.45338E-06 3.46816E-06 3.48296E-06 3.49779E-06 3.51265E-06 3.52754E-06 3.54246E-06 3.5574E-06 3.57238E-06 3.58738E-06 3.60242E-06 3.61749E-06 3.63259E-06 3.64773E-06 3.6629E-06 3.6781E-06 3.69333E-06 3.70861E-06 -2.13607E-05 -1.67481E-05 -1.30052E-05 -9.98738E-06 -7.56157E-06 -5.60834E-06 -4.02307E-06 -2.71926E-06 -1.63409E-06 -7.3205E-07 3.83382E-11 5.61293E-07 9.62072E-07 1.23002E-06 1.39988E-06 1.50593E-06 1.57438E-06 1.62171E-06 1.65718E-06 1.6858E-06 1.7103E-06 1.73221E-06 1.75244E-06 1.77152E-06 1.7898E-06 1.80752E-06 1.82481E-06 1.84179E-06 1.85853E-06 1.87509E-06 1.8915E-06 1.9078E-06 1.924E-06 1.94014E-06 1.95621E-06 1.97225E-06 1.98824E-06 2.00421E-06 2.02015E-06 2.03608E-06 2.05199E-06 2.0679E-06 2.0838E-06 2.0997E-06 2.11559E-06 2.13149E-06 2.14739E-06 2.16329E-06 2.1792E-06 2.19512E-06 2.21104E-06 2.22697E-06 2.24292E-06 2.25887E-06 2.27483E-06 2.29081E-06 2.3068E-06 2.3228E-06 2.33881E-06 2.35484E-06 2.37087E-06 2.38693E-06 2.40299E-06 2.41908E-06 2.43517E-06 2.45128E-06 2.46741E-06 2.48355E-06 2.4997E-06 2.51587E-06 2.53206E-06 2.54826E-06 2.56447E-06 2.5807E-06 2.59695E-06 2.61321E-06 2.62949E-06 2.64579E-06 2.6621E-06 2.67842E-06 2.69476E-06 2.71112E-06 2.72749E-06 2.74388E-06 2.76029E-06 2.77671E-06 2.79314E-06 2.8096E-06 2.82606E-06 2.84255E-06 2.85905E-06 2.87556E-06 2.8921E-06 2.90864E-06 2.92521E-06 2.94179E-06 2.95838E-06 2.97499E-06 2.99162E-06 3.00827E-06 3.02492E-06 3.0416E-06 3.05829E-06 3.075E-06 3.09172E-06 3.10846E-06 3.12522E-06 3.14199E-06 3.15878E-06 3.17559E-06 3.19241E-06 3.20925E-06 3.2261E-06 3.24297E-06 3.25986E-06 3.27676E-06 3.29369E-06 3.31062E-06 3.32758E-06 3.34455E-06 3.36154E-06 3.37855E-06 3.39557E-06 3.41262E-06 3.42968E-06 3.44675E-06 3.46385E-06 3.48096E-06 3.4981E-06 3.51525E-06 3.53242E-06 3.54961E-06 3.56681E-06 3.58404E-06 3.60128E-06 3.61855E-06 3.63584E-06 3.65314E-06 3.67047E-06 3.68781E-06 3.70518E-06 3.72257E-06 3.73997E-06 3.7574E-06 3.77486E-06 3.79233E-06 3.80982E-06 3.82734E-06 3.84488E-06 3.86245E-06 3.88003E-06 3.89764E-06 3.91528E-06 3.93294E-06 3.95062E-06 3.96833E-06 3.98606E-06 4.00382E-06 4.0216E-06 4.03941E-06 4.05725E-06 4.07511E-06 4.09301E-06 4.11093E-06 4.12887E-06 4.14685E-06 4.16485E-06 4.18289E-06 4.20095E-06 4.21905E-06 4.23717E-06 4.25533E-06 4.27352E-06 4.29174E-06 4.31E-06 4.32828E-06 4.3466E-06 4.36496E-06 4.38335E-06 4.40177E-06 4.42024E-06 4.43873E-06 4.45727E-06 4.47584E-06 4.49446E-06 4.51311E-06 4.5318E-06 4.55053E-06 4.5693E-06 4.58812E-06 4.60698E-06 -2.54275E-05 -2.00398E-05 -1.56329E-05 -1.20535E-05 -9.15712E-06 -6.8112E-06 -4.89772E-06 -3.31785E-06 -1.99884E-06 -8.98419E-07 5.31077E-11 6.93527E-07 1.19169E-06 1.52711E-06 1.74115E-06 1.8753E-06 1.96191E-06 2.02163E-06 2.06619E-06 2.102E-06 2.13254E-06 2.15977E-06 2.18485E-06 2.20848E-06 2.23109E-06 2.25297E-06 2.27431E-06 2.29526E-06 2.3159E-06 2.33631E-06 2.35653E-06 2.37661E-06 2.39657E-06 2.41644E-06 2.43624E-06 2.45597E-06 2.47566E-06 2.49532E-06 2.51494E-06 2.53454E-06 2.55413E-06 2.5737E-06 2.59327E-06 2.61282E-06 2.63238E-06 2.65194E-06 2.6715E-06 2.69107E-06 2.71064E-06 2.73022E-06 2.7498E-06 2.7694E-06 2.78901E-06 2.80864E-06 2.82827E-06 2.84792E-06 2.86758E-06 2.88726E-06 2.90695E-06 2.92666E-06 2.94638E-06 2.96612E-06 2.98588E-06 3.00566E-06 3.02545E-06 3.04526E-06 3.06509E-06 3.08493E-06 3.1048E-06 3.12468E-06 3.14458E-06 3.1645E-06 3.18444E-06 3.20439E-06 3.22437E-06 3.24436E-06 3.26438E-06 3.28441E-06 3.30446E-06 3.32453E-06 3.34462E-06 3.36473E-06 3.38485E-06 3.405E-06 3.42517E-06 3.44535E-06 3.46556E-06 3.48578E-06 3.50602E-06 3.52629E-06 3.54657E-06 3.56687E-06 3.58719E-06 3.60753E-06 3.62789E-06 3.64827E-06 3.66866E-06 3.68908E-06 3.70952E-06 3.72997E-06 3.75045E-06 3.77094E-06 3.79146E-06 3.81199E-06 3.83254E-06 3.85312E-06 3.87371E-06 3.89432E-06 3.91495E-06 3.9356E-06 3.95628E-06 3.97697E-06 3.99768E-06 4.01841E-06 4.03916E-06 4.05994E-06 4.08073E-06 4.10154E-06 4.12238E-06 4.14323E-06 4.16411E-06 4.18501E-06 4.20593E-06 4.22687E-06 4.24783E-06 4.26881E-06 4.28982E-06 4.31084E-06 4.33189E-06 4.35297E-06 4.37406E-06 4.39518E-06 4.41632E-06 4.43748E-06 4.45867E-06 4.47988E-06 4.50112E-06 4.52238E-06 4.54366E-06 4.56497E-06 4.58631E-06 4.60767E-06 4.62905E-06 4.65046E-06 4.6719E-06 4.69337E-06 4.71486E-06 4.73638E-06 4.75792E-06 4.7795E-06 4.8011E-06 4.82273E-06 4.84439E-06 4.86608E-06 4.8878E-06 4.90955E-06 4.93134E-06 4.95315E-06 4.97499E-06 4.99687E-06 5.01878E-06 5.04072E-06 5.06269E-06 5.0847E-06 5.10674E-06 5.12882E-06 5.15093E-06 5.17308E-06 5.19527E-06 5.21749E-06 5.23975E-06 5.26204E-06 5.28438E-06 5.30676E-06 5.32917E-06 5.35163E-06 5.37412E-06 5.39666E-06 5.41924E-06 5.44187E-06 5.46453E-06 5.48725E-06 5.51E-06 5.53281E-06 5.55566E-06 5.57856E-06 5.6015E-06 5.6245E-06 5.64755E-06 5.67064E-06 5.69379E-06 -3.01189E-05 -2.38665E-05 -1.87083E-05 -1.44851E-05 -1.10429E-05 -8.237E-06 -5.9362E-06 -4.0292E-06 -2.43269E-06 -1.09665E-06 7.35502E-11 8.52312E-07 1.46874E-06 1.88719E-06 2.1563E-06 2.32577E-06 2.43523E-06 2.51048E-06 2.56638E-06 2.61106E-06 2.649E-06 2.68273E-06 2.7137E-06 2.74281E-06 2.77063E-06 2.79752E-06 2.82373E-06 2.84943E-06 2.87475E-06 2.89976E-06 2.92454E-06 2.94913E-06 2.97358E-06 2.99791E-06 3.02215E-06 3.04631E-06 3.07041E-06 3.09446E-06 3.11848E-06 3.14246E-06 3.16642E-06 3.19037E-06 3.2143E-06 3.23822E-06 3.26215E-06 3.28607E-06 3.30999E-06 3.33392E-06 3.35785E-06 3.38179E-06 3.40575E-06 3.42971E-06 3.45369E-06 3.47768E-06 3.50169E-06 3.52571E-06 3.54975E-06 3.57381E-06 3.59788E-06 3.62198E-06 3.64609E-06 3.67022E-06 3.69437E-06 3.71855E-06 3.74274E-06 3.76696E-06 3.79119E-06 3.81545E-06 3.83973E-06 3.86403E-06 3.88835E-06 3.9127E-06 3.93706E-06 3.96145E-06 3.98586E-06 4.0103E-06 4.03476E-06 4.05924E-06 4.08374E-06 4.10827E-06 4.13282E-06 4.15739E-06 4.18198E-06 4.2066E-06 4.23125E-06 4.25591E-06 4.2806E-06 4.30531E-06 4.33004E-06 4.3548E-06 4.37958E-06 4.40438E-06 4.42921E-06 4.45406E-06 4.47893E-06 4.50383E-06 4.52875E-06 4.55369E-06 4.57866E-06 4.60365E-06 4.62866E-06 4.6537E-06 4.67876E-06 4.70385E-06 4.72895E-06 4.75408E-06 4.77924E-06 4.80442E-06 4.82962E-06 4.85485E-06 4.8801E-06 4.90537E-06 4.93067E-06 4.95599E-06 4.98134E-06 5.00671E-06 5.03211E-06 5.05753E-06 5.08298E-06 5.10845E-06 5.13395E-06 5.15947E-06 5.18502E-06 5.21059E-06 5.23619E-06 5.26182E-06 5.28747E-06 5.31315E-06 5.33886E-06 5.36459E-06 5.39035E-06 5.41614E-06 5.44196E-06 5.4678E-06 5.49368E-06 5.51958E-06 5.54551E-06 5.57147E-06 5.59746E-06 5.62348E-06 5.64953E-06 5.67561E-06 5.70173E-06 5.72787E-06 5.75405E-06 5.78026E-06 5.8065E-06 5.83277E-06 5.85908E-06 5.88542E-06 5.9118E-06 5.93821E-06 5.96465E-06 5.99113E-06 6.01765E-06 6.04421E-06 6.0708E-06 6.09743E-06 6.12409E-06 6.1508E-06 6.17755E-06 6.20433E-06 6.23116E-06 6.25802E-06 6.28493E-06 6.31188E-06 6.33887E-06 6.36591E-06 6.39299E-06 6.42012E-06 6.44729E-06 6.4745E-06 6.50177E-06 6.52908E-06 6.55644E-06 6.58384E-06 6.6113E-06 6.63881E-06 6.66637E-06 6.69398E-06 6.72164E-06 6.74936E-06 6.77713E-06 6.80496E-06 6.83285E-06 6.86079E-06 6.88879E-06 6.91685E-06 6.94497E-06 6.97315E-06 7.0014E-06 -3.5487E-05 -2.82805E-05 -2.22811E-05 -1.7327E-05 -1.32572E-05 -9.91652E-06 -7.16182E-06 -4.86959E-06 -2.94564E-06 -1.33135E-06 1.01237E-10 1.0418E-06 1.80112E-06 2.32142E-06 2.65904E-06 2.87291E-06 3.01119E-06 3.10596E-06 3.17597E-06 3.23161E-06 3.27862E-06 3.32023E-06 3.35832E-06 3.39404E-06 3.4281E-06 3.46099E-06 3.49301E-06 3.52438E-06 3.55525E-06 3.58575E-06 3.61595E-06 3.64591E-06 3.67568E-06 3.70531E-06 3.73481E-06 3.76421E-06 3.79354E-06 3.8228E-06 3.85202E-06 3.88119E-06 3.91034E-06 3.93946E-06 3.96857E-06 3.99766E-06 4.02675E-06 4.05583E-06 4.08492E-06 4.11401E-06 4.14311E-06 4.17222E-06 4.20133E-06 4.23046E-06 4.25961E-06 4.28877E-06 4.31795E-06 4.34714E-06 4.37636E-06 4.4056E-06 4.43485E-06 4.46413E-06 4.49343E-06 4.52276E-06 4.55211E-06 4.58148E-06 4.61088E-06 4.6403E-06 4.66974E-06 4.69922E-06 4.72871E-06 4.75824E-06 4.78779E-06 4.81736E-06 4.84697E-06 4.8766E-06 4.90625E-06 4.93593E-06 4.96564E-06 4.99538E-06 5.02515E-06 5.05494E-06 5.08476E-06 5.1146E-06 5.14448E-06 5.17438E-06 5.20431E-06 5.23427E-06 5.26425E-06 5.29426E-06 5.3243E-06 5.35437E-06 5.38446E-06 5.41459E-06 5.44474E-06 5.47492E-06 5.50512E-06 5.53535E-06 5.56562E-06 5.59591E-06 5.62622E-06 5.65657E-06 5.68694E-06 5.71734E-06 5.74777E-06 5.77823E-06 5.80871E-06 5.83923E-06 5.86977E-06 5.90034E-06 5.93094E-06 5.96157E-06 5.99222E-06 6.02291E-06 6.05362E-06 6.08437E-06 6.11514E-06 6.14594E-06 6.17677E-06 6.20764E-06 6.23853E-06 6.26945E-06 6.3004E-06 6.33138E-06 6.3624E-06 6.39344E-06 6.42452E-06 6.45562E-06 6.48676E-06 6.51793E-06 6.54914E-06 6.58037E-06 6.61164E-06 6.64294E-06 6.67428E-06 6.70565E-06 6.73705E-06 6.76849E-06 6.79996E-06 6.83147E-06 6.86301E-06 6.89459E-06 6.92621E-06 6.95786E-06 6.98955E-06 7.02128E-06 7.05305E-06 7.08485E-06 7.1167E-06 7.14858E-06 7.18051E-06 7.21248E-06 7.24448E-06 7.27653E-06 7.30862E-06 7.34076E-06 7.37294E-06 7.40516E-06 7.43742E-06 7.46974E-06 7.50209E-06 7.5345E-06 7.56695E-06 7.59945E-06 7.632E-06 7.6646E-06 7.69725E-06 7.72994E-06 7.76269E-06 7.7955E-06 7.82835E-06 7.86126E-06 7.89422E-06 7.92724E-06 7.96032E-06 7.99345E-06 8.02664E-06 8.05989E-06 8.0932E-06 8.12657E-06 8.16E-06 8.19349E-06 8.22705E-06 8.26067E-06 8.29436E-06 8.32811E-06 8.36193E-06 8.39582E-06 8.42978E-06 8.46381E-06 8.49792E-06 8.5321E-06 8.56635E-06 -4.15757E-05 -3.3329E-05 -2.6398E-05 -2.06226E-05 -1.58379E-05 -1.18811E-05 -8.59872E-06 -5.85608E-06 -3.5483E-06 -1.60745E-06 1.37726E-10 1.2665E-06 2.19762E-06 2.84235E-06 3.2651E-06 3.53479E-06 3.70946E-06 3.82879E-06 3.91642E-06 3.98561E-06 4.04372E-06 4.0949E-06 4.14157E-06 4.1852E-06 4.22673E-06 4.26676E-06 4.30567E-06 4.34377E-06 4.38123E-06 4.41821E-06 4.45481E-06 4.4911E-06 4.52716E-06 4.56302E-06 4.59873E-06 4.63432E-06 4.6698E-06 4.7052E-06 4.74054E-06 4.77583E-06 4.81107E-06 4.84628E-06 4.88147E-06 4.91665E-06 4.95181E-06 4.98697E-06 5.02212E-06 5.05728E-06 5.09245E-06 5.12762E-06 5.16281E-06 5.19801E-06 5.23322E-06 5.26846E-06 5.30371E-06 5.33899E-06 5.37428E-06 5.4096E-06 5.44494E-06 5.48031E-06 5.51571E-06 5.55113E-06 5.58658E-06 5.62206E-06 5.65756E-06 5.6931E-06 5.72866E-06 5.76425E-06 5.79988E-06 5.83553E-06 5.87122E-06 5.90693E-06 5.94268E-06 5.97846E-06 6.01427E-06 6.05011E-06 6.08599E-06 6.12189E-06 6.15783E-06 6.1938E-06 6.2298E-06 6.26584E-06 6.30191E-06 6.33801E-06 6.37414E-06 6.4103E-06 6.4465E-06 6.48273E-06 6.51899E-06 6.55529E-06 6.59162E-06 6.62798E-06 6.66437E-06 6.7008E-06 6.73726E-06 6.77375E-06 6.81028E-06 6.84684E-06 6.88343E-06 6.92006E-06 6.95671E-06 6.99341E-06 7.03013E-06 7.06689E-06 7.10368E-06 7.14051E-06 7.17736E-06 7.21426E-06 7.25118E-06 7.28814E-06 7.32514E-06 7.36217E-06 7.39923E-06 7.43633E-06 7.47346E-06 7.51063E-06 7.54783E-06 7.58507E-06 7.62234E-06 7.65965E-06 7.697E-06 7.73438E-06 7.7718E-06 7.80925E-06 7.84675E-06 7.88428E-06 7.92184E-06 7.95945E-06 7.9971E-06 8.03478E-06 8.0725E-06 8.11026E-06 8.14806E-06 8.18591E-06 8.22379E-06 8.26171E-06 8.29968E-06 8.33769E-06 8.37574E-06 8.41383E-06 8.45197E-06 8.49015E-06 8.52838E-06 8.56665E-06 8.60497E-06 8.64333E-06 8.68174E-06 8.7202E-06 8.75871E-06 8.79726E-06 8.83587E-06 8.87452E-06 8.91322E-06 8.95198E-06 8.99079E-06 9.02965E-06 9.06856E-06 9.10753E-06 9.14656E-06 9.18564E-06 9.22477E-06 9.26397E-06 9.30322E-06 9.34253E-06 9.3819E-06 9.42133E-06 9.46082E-06 9.50038E-06 9.53999E-06 9.57968E-06 9.61942E-06 9.65924E-06 9.69912E-06 9.73907E-06 9.77909E-06 9.81918E-06 9.85934E-06 9.89957E-06 9.93987E-06 9.98026E-06 1.00207E-05 1.00612E-05 1.01019E-05 1.01426E-05 1.01833E-05 1.02242E-05 1.02651E-05 1.03061E-05 1.03473E-05 1.03885E-05 1.04297E-05 -4.84169E-05 -3.90506E-05 -3.10999E-05 -2.44116E-05 -1.88212E-05 -1.41614E-05 -1.0271E-05 -7.00609E-06 -4.25166E-06 -1.93011E-06 1.84363E-10 1.53126E-06 2.6678E-06 3.46398E-06 3.99223E-06 4.33211E-06 4.55281E-06 4.70313E-06 4.81281E-06 4.89878E-06 4.97048E-06 5.03326E-06 5.09026E-06 5.14337E-06 5.19379E-06 5.24227E-06 5.28935E-06 5.33537E-06 5.38059E-06 5.42519E-06 5.46931E-06 5.51304E-06 5.55647E-06 5.59965E-06 5.64263E-06 5.68545E-06 5.72814E-06 5.77072E-06 5.81322E-06 5.85565E-06 5.89802E-06 5.94035E-06 5.98265E-06 6.02493E-06 6.06719E-06 6.10944E-06 6.15168E-06 6.19393E-06 6.23618E-06 6.27843E-06 6.3207E-06 6.36299E-06 6.40529E-06 6.44761E-06 6.48995E-06 6.53232E-06 6.57471E-06 6.61712E-06 6.65956E-06 6.70204E-06 6.74454E-06 6.78707E-06 6.82963E-06 6.87223E-06 6.91486E-06 6.95752E-06 7.00022E-06 7.04295E-06 7.08571E-06 7.12852E-06 7.17135E-06 7.21423E-06 7.25713E-06 7.30008E-06 7.34306E-06 7.38608E-06 7.42914E-06 7.47224E-06 7.51537E-06 7.55854E-06 7.60175E-06 7.64499E-06 7.68827E-06 7.7316E-06 7.77496E-06 7.81835E-06 7.86179E-06 7.90526E-06 7.94878E-06 7.99233E-06 8.03592E-06 8.07955E-06 8.12321E-06 8.16692E-06 8.21066E-06 8.25445E-06 8.29827E-06 8.34213E-06 8.38603E-06 8.42996E-06 8.47394E-06 8.51796E-06 8.56201E-06 8.60611E-06 8.65024E-06 8.69441E-06 8.73863E-06 8.78288E-06 8.82717E-06 8.8715E-06 8.91588E-06 8.96029E-06 9.00474E-06 9.04924E-06 9.09377E-06 9.13835E-06 9.18297E-06 9.22763E-06 9.27233E-06 9.31707E-06 9.36186E-06 9.40669E-06 9.45156E-06 9.49648E-06 9.54144E-06 9.58644E-06 9.63149E-06 9.67659E-06 9.72173E-06 9.76691E-06 9.81215E-06 9.85742E-06 9.90275E-06 9.94812E-06 9.99355E-06 1.0039E-05 1.00845E-05 1.01301E-05 1.01757E-05 1.02214E-05 1.02671E-05 1.03129E-05 1.03587E-05 1.04046E-05 1.04505E-05 1.04965E-05 1.05426E-05 1.05887E-05 1.06349E-05 1.06811E-05 1.07273E-05 1.07737E-05 1.08201E-05 1.08665E-05 1.09131E-05 1.09596E-05 1.10063E-05 1.1053E-05 1.10998E-05 1.11466E-05 1.11935E-05 1.12405E-05 1.12876E-05 1.13347E-05 1.13819E-05 1.14291E-05 1.14764E-05 1.15239E-05 1.15713E-05 1.16189E-05 1.16665E-05 1.17142E-05 1.1762E-05 1.18099E-05 1.18579E-05 1.19059E-05 1.1954E-05 1.20023E-05 1.20506E-05 1.20989E-05 1.21474E-05 1.2196E-05 1.22447E-05 1.22934E-05 1.23423E-05 1.23912E-05 1.24403E-05 1.24894E-05 1.25387E-05 1.2588E-05 1.26375E-05 -5.60305E-05 -4.54711E-05 -3.64187E-05 -2.87276E-05 -2.2239E-05 -1.67855E-05 -1.22017E-05 -8.33675E-06 -5.06677E-06 -2.3046E-06 2.42139E-10 1.84118E-06 3.22192E-06 4.20158E-06 4.86022E-06 5.28827E-06 5.56731E-06 5.75686E-06 5.89424E-06 6.00104E-06 6.0894E-06 6.16627E-06 6.23568E-06 6.3001E-06 6.36106E-06 6.41954E-06 6.47622E-06 6.53156E-06 6.58587E-06 6.6394E-06 6.6923E-06 6.74471E-06 6.79673E-06 6.84843E-06 6.89988E-06 6.95112E-06 7.00219E-06 7.05312E-06 7.10394E-06 7.15467E-06 7.20532E-06 7.25592E-06 7.30647E-06 7.35699E-06 7.40749E-06 7.45796E-06 7.50843E-06 7.5589E-06 7.60936E-06 7.65983E-06 7.71032E-06 7.76081E-06 7.81133E-06 7.86186E-06 7.91242E-06 7.963E-06 8.01361E-06 8.06425E-06 8.11492E-06 8.16562E-06 8.21635E-06 8.26712E-06 8.31793E-06 8.36877E-06 8.41965E-06 8.47056E-06 8.52152E-06 8.57251E-06 8.62355E-06 8.67462E-06 8.72574E-06 8.7769E-06 8.8281E-06 8.87934E-06 8.93063E-06 8.98195E-06 9.03333E-06 9.08474E-06 9.1362E-06 9.1877E-06 9.23924E-06 9.29083E-06 9.34247E-06 9.39414E-06 9.44587E-06 9.49763E-06 9.54944E-06 9.6013E-06 9.6532E-06 9.70514E-06 9.75713E-06 9.80916E-06 9.86124E-06 9.91336E-06 9.96553E-06 1.00177E-05 1.007E-05 1.01223E-05 1.01747E-05 1.02271E-05 1.02795E-05 1.0332E-05 1.03845E-05 1.04371E-05 1.04897E-05 1.05424E-05 1.05951E-05 1.06479E-05 1.07007E-05 1.07535E-05 1.08064E-05 1.08594E-05 1.09124E-05 1.09654E-05 1.10185E-05 1.10716E-05 1.11248E-05 1.11781E-05 1.12314E-05 1.12847E-05 1.13381E-05 1.13915E-05 1.1445E-05 1.14985E-05 1.15521E-05 1.16058E-05 1.16595E-05 1.17132E-05 1.1767E-05 1.18209E-05 1.18748E-05 1.19287E-05 1.19827E-05 1.20368E-05 1.2091E-05 1.21451E-05 1.21994E-05 1.22537E-05 1.23081E-05 1.23625E-05 1.2417E-05 1.24715E-05 1.25261E-05 1.25808E-05 1.26355E-05 1.26903E-05 1.27452E-05 1.28002E-05 1.28552E-05 1.29102E-05 1.29654E-05 1.30206E-05 1.30758E-05 1.31312E-05 1.31866E-05 1.32421E-05 1.32977E-05 1.33534E-05 1.34091E-05 1.34649E-05 1.35208E-05 1.35767E-05 1.36328E-05 1.36889E-05 1.37451E-05 1.38014E-05 1.38578E-05 1.39143E-05 1.39708E-05 1.40275E-05 1.40842E-05 1.41411E-05 1.4198E-05 1.4255E-05 1.43122E-05 1.43694E-05 1.44267E-05 1.44841E-05 1.45417E-05 1.45993E-05 1.4657E-05 1.47149E-05 1.47728E-05 1.48309E-05 1.48891E-05 1.49474E-05 1.50058E-05 1.50643E-05 1.5123E-05 1.51818E-05 1.52407E-05 -6.44218E-05 -5.26043E-05 -4.23732E-05 -3.35946E-05 -2.61167E-05 -1.97775E-05 -1.44116E-05 -9.8641E-06 -6.00436E-06 -2.73616E-06 3.11652E-10 2.2015E-06 3.87076E-06 5.0715E-06 5.89065E-06 6.42934E-06 6.78237E-06 7.02174E-06 7.19404E-06 7.32678E-06 7.43564E-06 7.52961E-06 7.61396E-06 7.69185E-06 7.76529E-06 7.83555E-06 7.90351E-06 7.96974E-06 8.03465E-06 8.09856E-06 8.16167E-06 8.22416E-06 8.28614E-06 8.34772E-06 8.40897E-06 8.46995E-06 8.53071E-06 8.59129E-06 8.65172E-06 8.71203E-06 8.77225E-06 8.83238E-06 8.89246E-06 8.95248E-06 9.01247E-06 9.07243E-06 9.13238E-06 9.19231E-06 9.25225E-06 9.31218E-06 9.37212E-06 9.43208E-06 9.49205E-06 9.55204E-06 9.61206E-06 9.6721E-06 9.73217E-06 9.79227E-06 9.85241E-06 9.91258E-06 9.97279E-06 1.0033E-05 1.00933E-05 1.01536E-05 1.0214E-05 1.02744E-05 1.03349E-05 1.03954E-05 1.04559E-05 1.05165E-05 1.05771E-05 1.06378E-05 1.06986E-05 1.07593E-05 1.08202E-05 1.08811E-05 1.0942E-05 1.1003E-05 1.1064E-05 1.11251E-05 1.11862E-05 1.12474E-05 1.13086E-05 1.13699E-05 1.14312E-05 1.14926E-05 1.1554E-05 1.16155E-05 1.1677E-05 1.17386E-05 1.18003E-05 1.18619E-05 1.19237E-05 1.19855E-05 1.20473E-05 1.21092E-05 1.21712E-05 1.22332E-05 1.22952E-05 1.23573E-05 1.24195E-05 1.24817E-05 1.2544E-05 1.26063E-05 1.26686E-05 1.27311E-05 1.27935E-05 1.28561E-05 1.29186E-05 1.29813E-05 1.3044E-05 1.31067E-05 1.31695E-05 1.32324E-05 1.32953E-05 1.33583E-05 1.34213E-05 1.34844E-05 1.35475E-05 1.36107E-05 1.3674E-05 1.37373E-05 1.38006E-05 1.38641E-05 1.39276E-05 1.39911E-05 1.40547E-05 1.41184E-05 1.41821E-05 1.42459E-05 1.43098E-05 1.43737E-05 1.44377E-05 1.45018E-05 1.45659E-05 1.46301E-05 1.46943E-05 1.47587E-05 1.48231E-05 1.48875E-05 1.49521E-05 1.50167E-05 1.50814E-05 1.51461E-05 1.52109E-05 1.52758E-05 1.53408E-05 1.54059E-05 1.5471E-05 1.55362E-05 1.56015E-05 1.56669E-05 1.57324E-05 1.57979E-05 1.58636E-05 1.59293E-05 1.59951E-05 1.6061E-05 1.6127E-05 1.61931E-05 1.62593E-05 1.63255E-05 1.63919E-05 1.64584E-05 1.65249E-05 1.65916E-05 1.66584E-05 1.67252E-05 1.67922E-05 1.68593E-05 1.69264E-05 1.69937E-05 1.70611E-05 1.71287E-05 1.71963E-05 1.7264E-05 1.73319E-05 1.73999E-05 1.7468E-05 1.75362E-05 1.76046E-05 1.76731E-05 1.77417E-05 1.78104E-05 1.78793E-05 1.79483E-05 1.80174E-05 1.80867E-05 1.81562E-05 1.82257E-05 1.82954E-05 -7.35795E-05 -6.04489E-05 -4.89703E-05 -3.90246E-05 -3.04715E-05 -2.31559E-05 -1.69178E-05 -1.16023E-05 -7.07432E-06 -3.22979E-06 3.93194E-10 2.61745E-06 4.62531E-06 6.09079E-06 7.10657E-06 7.78366E-06 8.23056E-06 8.53337E-06 8.74988E-06 8.91508E-06 9.04923E-06 9.16403E-06 9.26633E-06 9.36028E-06 9.44848E-06 9.53258E-06 9.61372E-06 9.69264E-06 9.76988E-06 9.84582E-06 9.92075E-06 9.99487E-06 1.00683E-05 1.01413E-05 1.02138E-05 1.0286E-05 1.03579E-05 1.04296E-05 1.0501E-05 1.05723E-05 1.06435E-05 1.07146E-05 1.07856E-05 1.08565E-05 1.09274E-05 1.09982E-05 1.1069E-05 1.11398E-05 1.12105E-05 1.12813E-05 1.13521E-05 1.14229E-05 1.14936E-05 1.15645E-05 1.16353E-05 1.17061E-05 1.1777E-05 1.1848E-05 1.19189E-05 1.19899E-05 1.20609E-05 1.2132E-05 1.22031E-05 1.22743E-05 1.23455E-05 1.24168E-05 1.24881E-05 1.25594E-05 1.26308E-05 1.27023E-05 1.27738E-05 1.28454E-05 1.2917E-05 1.29887E-05 1.30604E-05 1.31322E-05 1.3204E-05 1.32759E-05 1.33478E-05 1.34199E-05 1.34919E-05 1.3564E-05 1.36362E-05 1.37084E-05 1.37807E-05 1.38531E-05 1.39255E-05 1.3998E-05 1.40705E-05 1.41431E-05 1.42157E-05 1.42884E-05 1.43612E-05 1.4434E-05 1.45069E-05 1.45798E-05 1.46528E-05 1.47259E-05 1.4799E-05 1.48722E-05 1.49454E-05 1.50187E-05 1.50921E-05 1.51655E-05 1.5239E-05 1.53125E-05 1.53861E-05 1.54598E-05 1.55335E-05 1.56073E-05 1.56812E-05 1.57551E-05 1.58291E-05 1.59031E-05 1.59772E-05 1.60514E-05 1.61256E-05 1.61999E-05 1.62743E-05 1.63487E-05 1.64232E-05 1.64978E-05 1.65724E-05 1.66471E-05 1.67219E-05 1.67967E-05 1.68716E-05 1.69466E-05 1.70217E-05 1.70968E-05 1.7172E-05 1.72473E-05 1.73226E-05 1.7398E-05 1.74735E-05 1.75491E-05 1.76248E-05 1.77005E-05 1.77763E-05 1.78522E-05 1.79282E-05 1.80043E-05 1.80804E-05 1.81567E-05 1.8233E-05 1.83094E-05 1.83859E-05 1.84625E-05 1.85392E-05 1.8616E-05 1.86928E-05 1.87698E-05 1.88469E-05 1.8924E-05 1.90013E-05 1.90786E-05 1.91561E-05 1.92337E-05 1.93114E-05 1.93891E-05 1.9467E-05 1.9545E-05 1.96231E-05 1.97014E-05 1.97797E-05 1.98582E-05 1.99367E-05 2.00154E-05 2.00943E-05 2.01732E-05 2.02523E-05 2.03315E-05 2.04108E-05 2.04902E-05 2.05698E-05 2.06496E-05 2.07294E-05 2.08094E-05 2.08896E-05 2.09698E-05 2.10503E-05 2.11309E-05 2.12116E-05 2.12925E-05 2.13735E-05 2.14547E-05 2.15361E-05 2.16176E-05 2.16993E-05 2.17811E-05 2.18632E-05 -8.34763E-05 -6.89877E-05 -5.62027E-05 -4.50184E-05 -3.53091E-05 -2.69316E-05 -1.97329E-05 -1.35629E-05 -8.28526E-06 -3.79007E-06 4.869E-10 3.09411E-06 5.49642E-06 7.27666E-06 8.5318E-06 9.3813E-06 9.94715E-06 1.03309E-05 1.06036E-05 1.08096E-05 1.09751E-05 1.11153E-05 1.12392E-05 1.13523E-05 1.1458E-05 1.15583E-05 1.16548E-05 1.17485E-05 1.184E-05 1.19298E-05 1.20184E-05 1.21058E-05 1.21925E-05 1.22785E-05 1.23639E-05 1.24489E-05 1.25335E-05 1.26179E-05 1.27019E-05 1.27858E-05 1.28695E-05 1.2953E-05 1.30364E-05 1.31198E-05 1.3203E-05 1.32862E-05 1.33693E-05 1.34525E-05 1.35356E-05 1.36186E-05 1.37017E-05 1.37848E-05 1.38679E-05 1.3951E-05 1.40341E-05 1.41173E-05 1.42004E-05 1.42836E-05 1.43669E-05 1.44502E-05 1.45335E-05 1.46169E-05 1.47003E-05 1.47837E-05 1.48673E-05 1.49508E-05 1.50344E-05 1.51181E-05 1.52018E-05 1.52856E-05 1.53695E-05 1.54534E-05 1.55373E-05 1.56214E-05 1.57054E-05 1.57896E-05 1.58738E-05 1.59581E-05 1.60424E-05 1.61268E-05 1.62113E-05 1.62958E-05 1.63804E-05 1.6465E-05 1.65497E-05 1.66345E-05 1.67194E-05 1.68043E-05 1.68893E-05 1.69743E-05 1.70594E-05 1.71446E-05 1.72299E-05 1.73152E-05 1.74006E-05 1.7486E-05 1.75715E-05 1.76571E-05 1.77427E-05 1.78285E-05 1.79143E-05 1.80001E-05 1.8086E-05 1.8172E-05 1.82581E-05 1.83442E-05 1.84304E-05 1.85167E-05 1.8603E-05 1.86894E-05 1.87759E-05 1.88625E-05 1.89491E-05 1.90358E-05 1.91226E-05 1.92094E-05 1.92964E-05 1.93833E-05 1.94704E-05 1.95576E-05 1.96448E-05 1.97321E-05 1.98195E-05 1.99069E-05 1.99944E-05 2.00821E-05 2.01697E-05 2.02575E-05 2.03454E-05 2.04333E-05 2.05213E-05 2.06095E-05 2.06977E-05 2.07859E-05 2.08743E-05 2.09628E-05 2.10513E-05 2.114E-05 2.12287E-05 2.13175E-05 2.14065E-05 2.14955E-05 2.15846E-05 2.16738E-05 2.17631E-05 2.18526E-05 2.19421E-05 2.20317E-05 2.21214E-05 2.22113E-05 2.23012E-05 2.23913E-05 2.24815E-05 2.25717E-05 2.26621E-05 2.27527E-05 2.28433E-05 2.29341E-05 2.30249E-05 2.31159E-05 2.32071E-05 2.32983E-05 2.33897E-05 2.34812E-05 2.35729E-05 2.36647E-05 2.37566E-05 2.38487E-05 2.39409E-05 2.40332E-05 2.41257E-05 2.42184E-05 2.43112E-05 2.44041E-05 2.44972E-05 2.45905E-05 2.46839E-05 2.47775E-05 2.48712E-05 2.49651E-05 2.50592E-05 2.51535E-05 2.52479E-05 2.53425E-05 2.54373E-05 2.55323E-05 2.56274E-05 2.57228E-05 2.58183E-05 2.5914E-05 2.601E-05 -9.40694E-05 -7.81888E-05 -6.40487E-05 -5.15641E-05 -4.06263E-05 -3.11065E-05 -2.28635E-05 -1.57538E-05 -9.64399E-06 -4.42092E-06 5.92901E-10 3.63615E-06 6.49436E-06 8.64583E-06 1.01901E-05 1.12531E-05 1.19692E-05 1.24562E-05 1.28005E-05 1.3058E-05 1.32626E-05 1.3434E-05 1.35842E-05 1.37201E-05 1.38463E-05 1.39657E-05 1.40801E-05 1.41909E-05 1.42988E-05 1.44046E-05 1.45087E-05 1.46115E-05 1.47132E-05 1.48141E-05 1.49142E-05 1.50138E-05 1.51129E-05 1.52116E-05 1.53099E-05 1.5408E-05 1.55058E-05 1.56035E-05 1.5701E-05 1.57984E-05 1.58956E-05 1.59928E-05 1.60899E-05 1.6187E-05 1.6284E-05 1.6381E-05 1.6478E-05 1.65749E-05 1.66719E-05 1.67689E-05 1.68659E-05 1.69629E-05 1.70599E-05 1.7157E-05 1.72541E-05 1.73513E-05 1.74485E-05 1.75457E-05 1.7643E-05 1.77403E-05 1.78377E-05 1.79351E-05 1.80326E-05 1.81302E-05 1.82278E-05 1.83255E-05 1.84232E-05 1.8521E-05 1.86189E-05 1.87168E-05 1.88148E-05 1.89129E-05 1.9011E-05 1.91092E-05 1.92075E-05 1.93058E-05 1.94043E-05 1.95027E-05 1.96013E-05 1.96999E-05 1.97986E-05 1.98974E-05 1.99963E-05 2.00952E-05 2.01942E-05 2.02933E-05 2.03924E-05 2.04916E-05 2.05909E-05 2.06903E-05 2.07897E-05 2.08892E-05 2.09888E-05 2.10885E-05 2.11882E-05 2.12881E-05 2.1388E-05 2.14879E-05 2.1588E-05 2.16881E-05 2.17883E-05 2.18886E-05 2.1989E-05 2.20894E-05 2.21899E-05 2.22905E-05 2.23912E-05 2.2492E-05 2.25928E-05 2.26937E-05 2.27948E-05 2.28958E-05 2.2997E-05 2.30983E-05 2.31996E-05 2.3301E-05 2.34026E-05 2.35042E-05 2.36059E-05 2.37076E-05 2.38095E-05 2.39115E-05 2.40135E-05 2.41157E-05 2.42179E-05 2.43202E-05 2.44227E-05 2.45252E-05 2.46278E-05 2.47305E-05 2.48334E-05 2.49363E-05 2.50393E-05 2.51424E-05 2.52457E-05 2.5349E-05 2.54525E-05 2.5556E-05 2.56597E-05 2.57635E-05 2.58674E-05 2.59714E-05 2.60756E-05 2.61798E-05 2.62842E-05 2.63887E-05 2.64934E-05 2.65981E-05 2.6703E-05 2.6808E-05 2.69132E-05 2.70185E-05 2.71239E-05 2.72294E-05 2.73351E-05 2.7441E-05 2.7547E-05 2.76531E-05 2.77594E-05 2.78658E-05 2.79724E-05 2.80792E-05 2.81861E-05 2.82931E-05 2.84004E-05 2.85078E-05 2.86153E-05 2.87231E-05 2.8831E-05 2.8939E-05 2.90473E-05 2.91558E-05 2.92644E-05 2.93732E-05 2.94822E-05 2.95914E-05 2.97008E-05 2.98104E-05 2.99202E-05 3.00302E-05 3.01404E-05 3.02508E-05 3.03614E-05 3.04723E-05 3.05834E-05 3.06946E-05 3.08062E-05 -0.000105303 -8.80067E-05 -7.2474E-05 -5.86383E-05 -4.64092E-05 -3.56751E-05 -2.63093E-05 -1.81788E-05 -1.11551E-05 -5.12536E-06 7.11431E-10 4.24764E-06 7.62836E-06 1.02137E-05 1.2104E-05 1.34292E-05 1.43342E-05 1.49528E-05 1.53887E-05 1.57117E-05 1.59651E-05 1.6175E-05 1.63569E-05 1.65202E-05 1.66708E-05 1.68125E-05 1.69478E-05 1.70782E-05 1.72051E-05 1.73292E-05 1.74511E-05 1.75713E-05 1.76901E-05 1.78078E-05 1.79246E-05 1.80407E-05 1.81561E-05 1.8271E-05 1.83855E-05 1.84996E-05 1.86134E-05 1.8727E-05 1.88403E-05 1.89535E-05 1.90665E-05 1.91794E-05 1.92922E-05 1.94049E-05 1.95176E-05 1.96302E-05 1.97428E-05 1.98553E-05 1.99679E-05 2.00804E-05 2.0193E-05 2.03055E-05 2.04181E-05 2.05307E-05 2.06434E-05 2.0756E-05 2.08688E-05 2.09815E-05 2.10943E-05 2.12072E-05 2.13201E-05 2.14331E-05 2.15461E-05 2.16592E-05 2.17724E-05 2.18856E-05 2.19989E-05 2.21122E-05 2.22256E-05 2.23391E-05 2.24527E-05 2.25663E-05 2.26801E-05 2.27938E-05 2.29077E-05 2.30217E-05 2.31357E-05 2.32498E-05 2.3364E-05 2.34782E-05 2.35925E-05 2.3707E-05 2.38214E-05 2.3936E-05 2.40507E-05 2.41654E-05 2.42802E-05 2.43951E-05 2.45101E-05 2.46252E-05 2.47403E-05 2.48556E-05 2.49709E-05 2.50863E-05 2.52018E-05 2.53173E-05 2.5433E-05 2.55487E-05 2.56646E-05 2.57805E-05 2.58965E-05 2.60125E-05 2.61287E-05 2.6245E-05 2.63613E-05 2.64778E-05 2.65943E-05 2.67109E-05 2.68276E-05 2.69444E-05 2.70613E-05 2.71783E-05 2.72954E-05 2.74125E-05 2.75298E-05 2.76472E-05 2.77646E-05 2.78822E-05 2.79999E-05 2.81176E-05 2.82355E-05 2.83534E-05 2.84715E-05 2.85897E-05 2.87079E-05 2.88263E-05 2.89448E-05 2.90634E-05 2.91821E-05 2.93009E-05 2.94199E-05 2.95389E-05 2.96581E-05 2.97774E-05 2.98968E-05 3.00163E-05 3.0136E-05 3.02558E-05 3.03757E-05 3.04957E-05 3.06159E-05 3.07362E-05 3.08566E-05 3.09772E-05 3.10979E-05 3.12187E-05 3.13397E-05 3.14608E-05 3.15821E-05 3.17035E-05 3.18251E-05 3.19469E-05 3.20688E-05 3.21908E-05 3.2313E-05 3.24354E-05 3.25579E-05 3.26807E-05 3.28035E-05 3.29266E-05 3.30498E-05 3.31732E-05 3.32968E-05 3.34206E-05 3.35446E-05 3.36687E-05 3.37931E-05 3.39176E-05 3.40423E-05 3.41673E-05 3.42924E-05 3.44178E-05 3.45434E-05 3.46691E-05 3.47951E-05 3.49214E-05 3.50478E-05 3.51745E-05 3.53014E-05 3.54285E-05 3.55559E-05 3.56835E-05 3.58114E-05 3.59395E-05 3.60679E-05 3.61965E-05 3.63254E-05 -0.000117113 -9.83857E-05 -8.14335E-05 -6.62072E-05 -5.2635E-05 -4.06241E-05 -3.00646E-05 -2.08368E-05 -1.28205E-05 -5.90537E-06 8.42892E-10 4.93185E-06 8.90607E-06 1.19937E-05 1.42939E-05 1.59381E-05 1.70786E-05 1.78644E-05 1.84174E-05 1.88236E-05 1.91386E-05 1.93962E-05 1.96168E-05 1.9813E-05 1.99925E-05 2.01604E-05 2.03198E-05 2.04731E-05 2.06216E-05 2.07666E-05 2.09088E-05 2.10488E-05 2.1187E-05 2.13237E-05 2.14593E-05 2.15939E-05 2.17277E-05 2.18608E-05 2.19934E-05 2.21255E-05 2.22571E-05 2.23885E-05 2.25196E-05 2.26504E-05 2.2781E-05 2.29115E-05 2.30418E-05 2.3172E-05 2.33021E-05 2.34321E-05 2.35621E-05 2.3692E-05 2.3822E-05 2.39518E-05 2.40817E-05 2.42116E-05 2.43415E-05 2.44714E-05 2.46013E-05 2.47313E-05 2.48613E-05 2.49913E-05 2.51214E-05 2.52515E-05 2.53817E-05 2.5512E-05 2.56423E-05 2.57726E-05 2.59031E-05 2.60336E-05 2.61641E-05 2.62948E-05 2.64255E-05 2.65563E-05 2.66871E-05 2.68181E-05 2.69491E-05 2.70802E-05 2.72114E-05 2.73426E-05 2.7474E-05 2.76054E-05 2.77369E-05 2.78685E-05 2.80002E-05 2.8132E-05 2.82638E-05 2.83958E-05 2.85278E-05 2.86599E-05 2.87922E-05 2.89245E-05 2.90568E-05 2.91893E-05 2.93219E-05 2.94546E-05 2.95873E-05 2.97202E-05 2.98531E-05 2.99861E-05 3.01193E-05 3.02525E-05 3.03858E-05 3.05192E-05 3.06527E-05 3.07863E-05 3.092E-05 3.10538E-05 3.11877E-05 3.13217E-05 3.14558E-05 3.15899E-05 3.17242E-05 3.18586E-05 3.19931E-05 3.21277E-05 3.22624E-05 3.23972E-05 3.25321E-05 3.26671E-05 3.28022E-05 3.29375E-05 3.30728E-05 3.32083E-05 3.33438E-05 3.34795E-05 3.36153E-05 3.37512E-05 3.38873E-05 3.40234E-05 3.41597E-05 3.42961E-05 3.44326E-05 3.45692E-05 3.4706E-05 3.48429E-05 3.498E-05 3.51171E-05 3.52544E-05 3.53919E-05 3.55294E-05 3.56672E-05 3.5805E-05 3.5943E-05 3.60812E-05 3.62195E-05 3.6358E-05 3.64966E-05 3.66353E-05 3.67743E-05 3.69134E-05 3.70526E-05 3.7192E-05 3.73316E-05 3.74714E-05 3.76113E-05 3.77514E-05 3.78917E-05 3.80322E-05 3.81729E-05 3.83137E-05 3.84548E-05 3.8596E-05 3.87374E-05 3.88791E-05 3.90209E-05 3.9163E-05 3.93052E-05 3.94477E-05 3.95904E-05 3.97333E-05 3.98764E-05 4.00198E-05 4.01633E-05 4.03072E-05 4.04512E-05 4.05955E-05 4.07401E-05 4.08849E-05 4.10299E-05 4.11752E-05 4.13208E-05 4.14666E-05 4.16127E-05 4.17591E-05 4.19057E-05 4.20526E-05 4.21998E-05 4.23473E-05 4.24951E-05 4.26432E-05 -0.000129426 -0.000109263 -9.08743E-05 -7.42287E-05 -5.92729E-05 -4.59331E-05 -3.41178E-05 -2.37227E-05 -1.46389E-05 -6.76162E-06 9.87875E-10 5.69099E-06 1.03331E-05 1.39961E-05 1.67764E-05 1.8804E-05 2.02355E-05 2.12324E-05 2.19348E-05 2.24474E-05 2.28402E-05 2.31572E-05 2.34253E-05 2.36611E-05 2.38751E-05 2.40736E-05 2.42612E-05 2.44407E-05 2.46142E-05 2.4783E-05 2.49481E-05 2.51105E-05 2.52705E-05 2.54286E-05 2.55853E-05 2.57407E-05 2.5895E-05 2.60485E-05 2.62012E-05 2.63534E-05 2.6505E-05 2.66561E-05 2.68069E-05 2.69574E-05 2.71075E-05 2.72575E-05 2.74072E-05 2.75568E-05 2.77063E-05 2.78556E-05 2.80049E-05 2.81541E-05 2.83032E-05 2.84523E-05 2.86013E-05 2.87504E-05 2.88994E-05 2.90485E-05 2.91975E-05 2.93466E-05 2.94957E-05 2.96448E-05 2.9794E-05 2.99432E-05 3.00925E-05 3.02418E-05 3.03912E-05 3.05406E-05 3.06901E-05 3.08397E-05 3.09894E-05 3.11391E-05 3.12889E-05 3.14387E-05 3.15887E-05 3.17387E-05 3.18888E-05 3.2039E-05 3.21893E-05 3.23396E-05 3.24901E-05 3.26406E-05 3.27913E-05 3.2942E-05 3.30928E-05 3.32437E-05 3.33947E-05 3.35458E-05 3.3697E-05 3.38483E-05 3.39996E-05 3.41511E-05 3.43027E-05 3.44543E-05 3.46061E-05 3.4758E-05 3.49099E-05 3.5062E-05 3.52141E-05 3.53664E-05 3.55188E-05 3.56712E-05 3.58238E-05 3.59765E-05 3.61292E-05 3.62821E-05 3.64351E-05 3.65882E-05 3.67414E-05 3.68947E-05 3.70481E-05 3.72016E-05 3.73553E-05 3.7509E-05 3.76628E-05 3.78168E-05 3.79709E-05 3.81251E-05 3.82794E-05 3.84338E-05 3.85884E-05 3.8743E-05 3.88978E-05 3.90527E-05 3.92078E-05 3.9363E-05 3.95182E-05 3.96737E-05 3.98292E-05 3.99849E-05 4.01407E-05 4.02967E-05 4.04528E-05 4.0609E-05 4.07654E-05 4.09219E-05 4.10786E-05 4.12354E-05 4.13924E-05 4.15495E-05 4.17068E-05 4.18642E-05 4.20218E-05 4.21795E-05 4.23375E-05 4.24956E-05 4.26538E-05 4.28123E-05 4.29709E-05 4.31297E-05 4.32886E-05 4.34478E-05 4.36071E-05 4.37667E-05 4.39264E-05 4.40863E-05 4.42465E-05 4.44068E-05 4.45673E-05 4.47281E-05 4.4889E-05 4.50502E-05 4.52116E-05 4.53732E-05 4.55351E-05 4.56971E-05 4.58594E-05 4.6022E-05 4.61848E-05 4.63478E-05 4.65111E-05 4.66746E-05 4.68384E-05 4.70025E-05 4.71668E-05 4.73314E-05 4.74962E-05 4.76614E-05 4.78268E-05 4.79925E-05 4.81585E-05 4.83248E-05 4.84914E-05 4.86583E-05 4.88255E-05 4.8993E-05 4.91609E-05 4.93291E-05 4.94975E-05 4.96664E-05 4.98355E-05 -0.000142168 -0.000120571 -0.000100738 -8.26552E-05 -6.6286E-05 -5.15759E-05 -3.84522E-05 -2.68276E-05 -1.66066E-05 -7.69325E-06 1.14715E-09 6.52604E-06 1.19127E-05 1.62275E-05 1.95633E-05 2.20459E-05 2.38324E-05 2.50932E-05 2.59855E-05 2.66338E-05 2.71254E-05 2.75168E-05 2.78435E-05 2.81274E-05 2.83824E-05 2.86172E-05 2.88376E-05 2.90474E-05 2.92493E-05 2.94452E-05 2.96364E-05 2.98239E-05 3.00084E-05 3.01906E-05 3.03708E-05 3.05493E-05 3.07265E-05 3.09026E-05 3.10778E-05 3.12521E-05 3.14258E-05 3.15988E-05 3.17714E-05 3.19435E-05 3.21153E-05 3.22868E-05 3.2458E-05 3.26289E-05 3.27997E-05 3.29703E-05 3.31408E-05 3.33112E-05 3.34815E-05 3.36517E-05 3.38218E-05 3.39919E-05 3.4162E-05 3.43321E-05 3.45021E-05 3.46722E-05 3.48423E-05 3.50124E-05 3.51825E-05 3.53527E-05 3.55229E-05 3.56931E-05 3.58634E-05 3.60338E-05 3.62042E-05 3.63747E-05 3.65453E-05 3.67159E-05 3.68866E-05 3.70574E-05 3.72282E-05 3.73992E-05 3.75702E-05 3.77413E-05 3.79125E-05 3.80838E-05 3.82552E-05 3.84266E-05 3.85982E-05 3.87699E-05 3.89416E-05 3.91135E-05 3.92854E-05 3.94575E-05 3.96296E-05 3.98018E-05 3.99742E-05 4.01466E-05 4.03192E-05 4.04918E-05 4.06646E-05 4.08375E-05 4.10104E-05 4.11835E-05 4.13567E-05 4.153E-05 4.17034E-05 4.18769E-05 4.20505E-05 4.22242E-05 4.2398E-05 4.2572E-05 4.27461E-05 4.29202E-05 4.30945E-05 4.32689E-05 4.34435E-05 4.36181E-05 4.37929E-05 4.39677E-05 4.41427E-05 4.43179E-05 4.44931E-05 4.46685E-05 4.4844E-05 4.50196E-05 4.51954E-05 4.53713E-05 4.55473E-05 4.57235E-05 4.58998E-05 4.60762E-05 4.62528E-05 4.64295E-05 4.66064E-05 4.67834E-05 4.69605E-05 4.71378E-05 4.73153E-05 4.74929E-05 4.76707E-05 4.78486E-05 4.80267E-05 4.82049E-05 4.83834E-05 4.8562E-05 4.87407E-05 4.89197E-05 4.90988E-05 4.92781E-05 4.94576E-05 4.96372E-05 4.98171E-05 4.99972E-05 5.01774E-05 5.03579E-05 5.05385E-05 5.07194E-05 5.09004E-05 5.10817E-05 5.12632E-05 5.1445E-05 5.16269E-05 5.18091E-05 5.19915E-05 5.21741E-05 5.2357E-05 5.25401E-05 5.27235E-05 5.29071E-05 5.3091E-05 5.32751E-05 5.34595E-05 5.36442E-05 5.38291E-05 5.40143E-05 5.41998E-05 5.43856E-05 5.45716E-05 5.4758E-05 5.49447E-05 5.51316E-05 5.53189E-05 5.55065E-05 5.56944E-05 5.58826E-05 5.60712E-05 5.62601E-05 5.64493E-05 5.66389E-05 5.68288E-05 5.70191E-05 5.72097E-05 5.74007E-05 5.75921E-05 5.77838E-05 5.7976E-05 -0.000155266 -0.000132242 -0.000110966 -9.1436E-05 -7.36335E-05 -5.75217E-05 -4.30466E-05 -3.01386E-05 -1.87175E-05 -8.69832E-06 1.32164E-09 7.43645E-06 1.36447E-05 1.86898E-05 2.26599E-05 2.56748E-05 2.78883E-05 2.94751E-05 3.06068E-05 3.14279E-05 3.20449E-05 3.25299E-05 3.29292E-05 3.32717E-05 3.35759E-05 3.38535E-05 3.41121E-05 3.4357E-05 3.45915E-05 3.48181E-05 3.50387E-05 3.52545E-05 3.54665E-05 3.56754E-05 3.58818E-05 3.60861E-05 3.62887E-05 3.64898E-05 3.66896E-05 3.68885E-05 3.70864E-05 3.72836E-05 3.74801E-05 3.76761E-05 3.78715E-05 3.80666E-05 3.82613E-05 3.84557E-05 3.86498E-05 3.88437E-05 3.90374E-05 3.92309E-05 3.94243E-05 3.96176E-05 3.98108E-05 4.00039E-05 4.0197E-05 4.039E-05 4.0583E-05 4.07759E-05 4.09689E-05 4.11619E-05 4.13548E-05 4.15478E-05 4.17409E-05 4.19339E-05 4.21271E-05 4.23202E-05 4.25134E-05 4.27067E-05 4.29E-05 4.30934E-05 4.32869E-05 4.34804E-05 4.3674E-05 4.38677E-05 4.40615E-05 4.42554E-05 4.44493E-05 4.46434E-05 4.48375E-05 4.50317E-05 4.5226E-05 4.54204E-05 4.5615E-05 4.58096E-05 4.60043E-05 4.61991E-05 4.6394E-05 4.6589E-05 4.67842E-05 4.69794E-05 4.71747E-05 4.73702E-05 4.75657E-05 4.77614E-05 4.79572E-05 4.81531E-05 4.83491E-05 4.85452E-05 4.87414E-05 4.89378E-05 4.91342E-05 4.93308E-05 4.95275E-05 4.97243E-05 4.99212E-05 5.01183E-05 5.03155E-05 5.05128E-05 5.07102E-05 5.09078E-05 5.11054E-05 5.13033E-05 5.15012E-05 5.16993E-05 5.18975E-05 5.20958E-05 5.22943E-05 5.24929E-05 5.26917E-05 5.28906E-05 5.30896E-05 5.32888E-05 5.34881E-05 5.36876E-05 5.38872E-05 5.4087E-05 5.4287E-05 5.44871E-05 5.46874E-05 5.48878E-05 5.50884E-05 5.52892E-05 5.54901E-05 5.56912E-05 5.58925E-05 5.6094E-05 5.62957E-05 5.64975E-05 5.66995E-05 5.69018E-05 5.71042E-05 5.73068E-05 5.75097E-05 5.77127E-05 5.79159E-05 5.81194E-05 5.83231E-05 5.8527E-05 5.87311E-05 5.89355E-05 5.914E-05 5.93449E-05 5.95499E-05 5.97552E-05 5.99608E-05 6.01666E-05 6.03727E-05 6.0579E-05 6.07856E-05 6.09925E-05 6.11996E-05 6.1407E-05 6.16148E-05 6.18228E-05 6.2031E-05 6.22396E-05 6.24485E-05 6.26577E-05 6.28673E-05 6.30771E-05 6.32873E-05 6.34978E-05 6.37086E-05 6.39198E-05 6.41313E-05 6.43431E-05 6.45554E-05 6.47679E-05 6.49809E-05 6.51942E-05 6.54079E-05 6.5622E-05 6.58365E-05 6.60514E-05 6.62667E-05 6.64824E-05 6.66985E-05 6.6915E-05 6.7132E-05 -0.000168648 -0.000144211 -0.000121497 -0.000100519 -8.12722E-05 -6.37368E-05 -4.78766E-05 -3.364E-05 -2.0963E-05 -9.77365E-06 1.51244E-09 8.42058E-06 1.55269E-05 2.13812E-05 2.60662E-05 2.96947E-05 3.24136E-05 3.43975E-05 3.58279E-05 3.68675E-05 3.76438E-05 3.82469E-05 3.87365E-05 3.91509E-05 3.95145E-05 3.98428E-05 4.01462E-05 4.04315E-05 4.07034E-05 4.0965E-05 4.12188E-05 4.14663E-05 4.1709E-05 4.19477E-05 4.21831E-05 4.24158E-05 4.26463E-05 4.2875E-05 4.3102E-05 4.33277E-05 4.35523E-05 4.37758E-05 4.39985E-05 4.42205E-05 4.44418E-05 4.46626E-05 4.48829E-05 4.51028E-05 4.53224E-05 4.55416E-05 4.57605E-05 4.59793E-05 4.61978E-05 4.64161E-05 4.66343E-05 4.68524E-05 4.70704E-05 4.72883E-05 4.75062E-05 4.7724E-05 4.79417E-05 4.81595E-05 4.83772E-05 4.85949E-05 4.88127E-05 4.90304E-05 4.92482E-05 4.9466E-05 4.96839E-05 4.99018E-05 5.01198E-05 5.03378E-05 5.05559E-05 5.0774E-05 5.09923E-05 5.12105E-05 5.14289E-05 5.16474E-05 5.18659E-05 5.20845E-05 5.23032E-05 5.2522E-05 5.27409E-05 5.29599E-05 5.3179E-05 5.33982E-05 5.36175E-05 5.38369E-05 5.40564E-05 5.4276E-05 5.44957E-05 5.47155E-05 5.49355E-05 5.51555E-05 5.53756E-05 5.55959E-05 5.58163E-05 5.60368E-05 5.62574E-05 5.64781E-05 5.6699E-05 5.69199E-05 5.7141E-05 5.73622E-05 5.75836E-05 5.7805E-05 5.80266E-05 5.82483E-05 5.84701E-05 5.86921E-05 5.89142E-05 5.91365E-05 5.93588E-05 5.95813E-05 5.9804E-05 6.00268E-05 6.02497E-05 6.04728E-05 6.0696E-05 6.09193E-05 6.11428E-05 6.13665E-05 6.15903E-05 6.18143E-05 6.20384E-05 6.22627E-05 6.24872E-05 6.27118E-05 6.29366E-05 6.31616E-05 6.33867E-05 6.3612E-05 6.38375E-05 6.40632E-05 6.42891E-05 6.45151E-05 6.47414E-05 6.49679E-05 6.51945E-05 6.54214E-05 6.56484E-05 6.58757E-05 6.61032E-05 6.63309E-05 6.65588E-05 6.6787E-05 6.70154E-05 6.7244E-05 6.74728E-05 6.7702E-05 6.79313E-05 6.81609E-05 6.83908E-05 6.86209E-05 6.88513E-05 6.90819E-05 6.93129E-05 6.95441E-05 6.97756E-05 7.00074E-05 7.02395E-05 7.04719E-05 7.07046E-05 7.09376E-05 7.11709E-05 7.14045E-05 7.16385E-05 7.18728E-05 7.21074E-05 7.23424E-05 7.25777E-05 7.28134E-05 7.30495E-05 7.32859E-05 7.35227E-05 7.37598E-05 7.39974E-05 7.42353E-05 7.44737E-05 7.47124E-05 7.49516E-05 7.51912E-05 7.54312E-05 7.56716E-05 7.59124E-05 7.61538E-05 7.63955E-05 7.66377E-05 7.68804E-05 7.71236E-05 7.73672E-05 -0.000182248 -0.000156413 -0.000132275 -0.000109853 -8.91585E-05 -7.01858E-05 -5.29156E-05 -3.73137E-05 -2.33326E-05 -1.0915E-05 1.72083E-09 9.47556E-06 1.75542E-05 2.42954E-05 2.97764E-05 3.41016E-05 3.74092E-05 3.98688E-05 4.16666E-05 4.29802E-05 4.39579E-05 4.471E-05 4.53126E-05 4.58155E-05 4.62509E-05 4.66399E-05 4.69959E-05 4.73282E-05 4.76428E-05 4.79442E-05 4.82354E-05 4.85186E-05 4.87954E-05 4.90671E-05 4.93346E-05 4.95987E-05 4.98599E-05 5.01188E-05 5.03755E-05 5.06306E-05 5.08842E-05 5.11365E-05 5.13877E-05 5.16379E-05 5.18874E-05 5.21361E-05 5.23841E-05 5.26317E-05 5.28787E-05 5.31253E-05 5.33716E-05 5.36175E-05 5.38632E-05 5.41086E-05 5.43538E-05 5.45988E-05 5.48437E-05 5.50885E-05 5.53331E-05 5.55776E-05 5.58221E-05 5.60665E-05 5.63109E-05 5.65553E-05 5.67996E-05 5.7044E-05 5.72883E-05 5.75326E-05 5.7777E-05 5.80214E-05 5.82659E-05 5.85103E-05 5.87549E-05 5.89995E-05 5.92441E-05 5.94888E-05 5.97336E-05 5.99785E-05 6.02234E-05 6.04684E-05 6.07135E-05 6.09587E-05 6.12039E-05 6.14493E-05 6.16948E-05 6.19403E-05 6.2186E-05 6.24317E-05 6.26776E-05 6.29235E-05 6.31696E-05 6.34158E-05 6.36621E-05 6.39085E-05 6.4155E-05 6.44016E-05 6.46483E-05 6.48952E-05 6.51422E-05 6.53892E-05 6.56365E-05 6.58838E-05 6.61313E-05 6.63788E-05 6.66266E-05 6.68744E-05 6.71224E-05 6.73705E-05 6.76187E-05 6.78671E-05 6.81156E-05 6.83642E-05 6.8613E-05 6.8862E-05 6.9111E-05 6.93603E-05 6.96096E-05 6.98591E-05 7.01088E-05 7.03587E-05 7.06086E-05 7.08588E-05 7.11091E-05 7.13596E-05 7.16102E-05 7.18611E-05 7.2112E-05 7.23632E-05 7.26146E-05 7.28661E-05 7.31178E-05 7.33697E-05 7.36218E-05 7.38741E-05 7.41267E-05 7.43794E-05 7.46323E-05 7.48854E-05 7.51388E-05 7.53923E-05 7.56461E-05 7.59001E-05 7.61544E-05 7.64089E-05 7.66636E-05 7.69186E-05 7.71738E-05 7.74293E-05 7.76851E-05 7.79411E-05 7.81974E-05 7.8454E-05 7.87108E-05 7.89679E-05 7.92254E-05 7.94831E-05 7.97411E-05 7.99994E-05 8.02581E-05 8.0517E-05 8.07763E-05 8.10359E-05 8.12959E-05 8.15562E-05 8.18169E-05 8.20779E-05 8.23392E-05 8.2601E-05 8.28631E-05 8.31255E-05 8.33884E-05 8.36517E-05 8.39153E-05 8.41794E-05 8.44439E-05 8.47088E-05 8.49741E-05 8.52399E-05 8.55061E-05 8.57728E-05 8.60399E-05 8.63074E-05 8.65755E-05 8.6844E-05 8.7113E-05 8.73825E-05 8.76525E-05 8.7923E-05 8.8194E-05 8.84656E-05 8.87377E-05 -0.000196004 -0.000168792 -0.000143244 -0.000119389 -9.72495E-05 -7.6833E-05 -5.81358E-05 -4.114E-05 -2.58145E-05 -1.21171E-05 1.94821E-09 1.05974E-05 1.97192E-05 2.74223E-05 3.37784E-05 3.88836E-05 4.28654E-05 4.5885E-05 4.81274E-05 4.97804E-05 5.1011E-05 5.19509E-05 5.26948E-05 5.33072E-05 5.38303E-05 5.42918E-05 5.47099E-05 5.50969E-05 5.54608E-05 5.58074E-05 5.61408E-05 5.64639E-05 5.67787E-05 5.70871E-05 5.739E-05 5.76885E-05 5.79834E-05 5.82752E-05 5.85645E-05 5.88515E-05 5.91366E-05 5.942E-05 5.97021E-05 5.99829E-05 6.02627E-05 6.05415E-05 6.08196E-05 6.10969E-05 6.13735E-05 6.16496E-05 6.19253E-05 6.22004E-05 6.24753E-05 6.27497E-05 6.30239E-05 6.32978E-05 6.35716E-05 6.38451E-05 6.41184E-05 6.43916E-05 6.46647E-05 6.49377E-05 6.52106E-05 6.54835E-05 6.57562E-05 6.6029E-05 6.63017E-05 6.65744E-05 6.68471E-05 6.71198E-05 6.73926E-05 6.76653E-05 6.79381E-05 6.82109E-05 6.84838E-05 6.87567E-05 6.90297E-05 6.93027E-05 6.95758E-05 6.9849E-05 7.01222E-05 7.03955E-05 7.06689E-05 7.09424E-05 7.1216E-05 7.14896E-05 7.17634E-05 7.20372E-05 7.23112E-05 7.25852E-05 7.28594E-05 7.31336E-05 7.3408E-05 7.36824E-05 7.3957E-05 7.42317E-05 7.45065E-05 7.47814E-05 7.50565E-05 7.53316E-05 7.56069E-05 7.58823E-05 7.61578E-05 7.64335E-05 7.67092E-05 7.69852E-05 7.72612E-05 7.75374E-05 7.78137E-05 7.80901E-05 7.83667E-05 7.86435E-05 7.89203E-05 7.91974E-05 7.94745E-05 7.97519E-05 8.00293E-05 8.0307E-05 8.05848E-05 8.08627E-05 8.11409E-05 8.14192E-05 8.16976E-05 8.19762E-05 8.22551E-05 8.25341E-05 8.28132E-05 8.30926E-05 8.33722E-05 8.36519E-05 8.39319E-05 8.4212E-05 8.44924E-05 8.47729E-05 8.50537E-05 8.53347E-05 8.56159E-05 8.58974E-05 8.61791E-05 8.6461E-05 8.67431E-05 8.70256E-05 8.73082E-05 8.75911E-05 8.78743E-05 8.81578E-05 8.84415E-05 8.87255E-05 8.90097E-05 8.92943E-05 8.95792E-05 8.98643E-05 9.01498E-05 9.04356E-05 9.07217E-05 9.10081E-05 9.12948E-05 9.15819E-05 9.18693E-05 9.21571E-05 9.24452E-05 9.27337E-05 9.30226E-05 9.33118E-05 9.36015E-05 9.38915E-05 9.41819E-05 9.44727E-05 9.47639E-05 9.50555E-05 9.53476E-05 9.56401E-05 9.5933E-05 9.62264E-05 9.65202E-05 9.68145E-05 9.71093E-05 9.74046E-05 9.77003E-05 9.79965E-05 9.82932E-05 9.85905E-05 9.88883E-05 9.91865E-05 9.94854E-05 9.97847E-05 0.000100085 0.000100385 0.000100686 0.000100988 0.00010129 -0.000209861 -0.000181294 -0.000154355 -0.000129081 -0.000105504 -8.36434E-05 -6.35091E-05 -4.50983E-05 -2.83955E-05 -1.3374E-05 2.19611E-09 1.1781E-05 2.20124E-05 3.07484E-05 3.80556E-05 4.40217E-05 4.87632E-05 5.243E-05 5.52009E-05 5.72678E-05 5.88126E-05 5.99877E-05 6.09086E-05 6.16567E-05 6.2287E-05 6.2836E-05 6.33279E-05 6.37787E-05 6.41995E-05 6.45978E-05 6.49789E-05 6.53466E-05 6.57039E-05 6.60527E-05 6.63946E-05 6.67309E-05 6.70626E-05 6.73904E-05 6.77148E-05 6.80364E-05 6.83557E-05 6.86728E-05 6.89882E-05 6.93019E-05 6.96143E-05 6.99256E-05 7.02357E-05 7.05449E-05 7.08533E-05 7.1161E-05 7.14681E-05 7.17745E-05 7.20805E-05 7.2386E-05 7.26911E-05 7.29959E-05 7.33004E-05 7.36046E-05 7.39085E-05 7.42123E-05 7.45158E-05 7.48192E-05 7.51225E-05 7.54256E-05 7.57287E-05 7.60317E-05 7.63346E-05 7.66374E-05 7.69402E-05 7.7243E-05 7.75458E-05 7.78486E-05 7.81514E-05 7.84542E-05 7.8757E-05 7.90598E-05 7.93627E-05 7.96656E-05 7.99686E-05 8.02716E-05 8.05747E-05 8.08778E-05 8.1181E-05 8.14843E-05 8.17877E-05 8.20911E-05 8.23947E-05 8.26983E-05 8.3002E-05 8.33057E-05 8.36096E-05 8.39136E-05 8.42177E-05 8.45219E-05 8.48262E-05 8.51306E-05 8.54351E-05 8.57397E-05 8.60444E-05 8.63493E-05 8.66542E-05 8.69593E-05 8.72645E-05 8.75699E-05 8.78753E-05 8.81809E-05 8.84867E-05 8.87925E-05 8.90985E-05 8.94046E-05 8.97109E-05 9.00173E-05 9.03239E-05 9.06306E-05 9.09375E-05 9.12445E-05 9.15517E-05 9.1859E-05 9.21665E-05 9.24741E-05 9.2782E-05 9.309E-05 9.33982E-05 9.37065E-05 9.40151E-05 9.43238E-05 9.46328E-05 9.49419E-05 9.52512E-05 9.55607E-05 9.58705E-05 9.61804E-05 9.64906E-05 9.6801E-05 9.71116E-05 9.74224E-05 9.77335E-05 9.80448E-05 9.83564E-05 9.86682E-05 9.89803E-05 9.92927E-05 9.96053E-05 9.99182E-05 0.000100231 0.000100545 0.000100859 0.000101173 0.000101487 0.000101802 0.000102117 0.000102432 0.000102747 0.000103063 0.00010338 0.000103696 0.000104013 0.000104331 0.000104649 0.000104967 0.000105285 0.000105604 0.000105923 0.000106243 0.000106563 0.000106884 0.000107205 0.000107526 0.000107848 0.000108171 0.000108493 0.000108817 0.00010914 0.000109465 0.000109789 0.000110115 0.00011044 0.000110767 0.000111094 0.000111421 0.000111749 0.000112077 0.000112406 0.000112736 0.000113066 0.000113397 0.000113729 0.000114061 0.000114393 0.000114727 0.000115061 -0.000223771 -0.000193871 -0.000165562 -0.000138886 -0.000113883 -9.05833E-05 -6.90079E-05 -4.91678E-05 -3.10622E-05 -1.46794E-05 2.46619E-09 1.30207E-05 2.44225E-05 3.42573E-05 4.25867E-05 4.94908E-05 5.50751E-05 5.94766E-05 6.28639E-05 6.54269E-05 6.73567E-05 6.88239E-05 6.99655E-05 7.08821E-05 7.1644E-05 7.2299E-05 7.28787E-05 7.34046E-05 7.38912E-05 7.43485E-05 7.47836E-05 7.52015E-05 7.56059E-05 7.59996E-05 7.63844E-05 7.67621E-05 7.71339E-05 7.75007E-05 7.78634E-05 7.82224E-05 7.85784E-05 7.89318E-05 7.92829E-05 7.9632E-05 7.99794E-05 8.03253E-05 8.06698E-05 8.10131E-05 8.13554E-05 8.16967E-05 8.20372E-05 8.2377E-05 8.27161E-05 8.30546E-05 8.33926E-05 8.37301E-05 8.40672E-05 8.44039E-05 8.47403E-05 8.50764E-05 8.54123E-05 8.57479E-05 8.60833E-05 8.64185E-05 8.67536E-05 8.70885E-05 8.74233E-05 8.77581E-05 8.80927E-05 8.84273E-05 8.87618E-05 8.90963E-05 8.94308E-05 8.97652E-05 9.00996E-05 9.04341E-05 9.07685E-05 9.1103E-05 9.14374E-05 9.17719E-05 9.21065E-05 9.24411E-05 9.27757E-05 9.31104E-05 9.34452E-05 9.378E-05 9.41149E-05 9.44499E-05 9.47849E-05 9.512E-05 9.54552E-05 9.57905E-05 9.61259E-05 9.64614E-05 9.67969E-05 9.71326E-05 9.74684E-05 9.78042E-05 9.81402E-05 9.84763E-05 9.88125E-05 9.91488E-05 9.94852E-05 9.98218E-05 0.000100158 0.000100495 0.000100832 0.000101169 0.000101506 0.000101844 0.000102181 0.000102519 0.000102857 0.000103194 0.000103533 0.000103871 0.000104209 0.000104548 0.000104886 0.000105225 0.000105564 0.000105903 0.000106243 0.000106582 0.000106922 0.000107262 0.000107602 0.000107943 0.000108283 0.000108624 0.000108965 0.000109306 0.000109648 0.000109989 0.000110331 0.000110673 0.000111016 0.000111358 0.000111701 0.000112044 0.000112388 0.000112732 0.000113076 0.00011342 0.000113765 0.000114109 0.000114455 0.0001148 0.000115146 0.000115492 0.000115839 0.000116186 0.000116533 0.000116881 0.000117228 0.000117577 0.000117926 0.000118275 0.000118624 0.000118974 0.000119324 0.000119675 0.000120026 0.000120378 0.00012073 0.000121083 0.000121436 0.000121789 0.000122143 0.000122498 0.000122853 0.000123208 0.000123564 0.000123921 0.000124278 0.000124636 0.000124994 0.000125353 0.000125712 0.000126072 0.000126433 0.000126794 0.000127156 0.000127518 0.000127881 0.000128245 0.000128609 0.000128974 0.00012934 0.000129707 0.000130074 -0.000237691 -0.000206482 -0.000176824 -0.000148766 -0.000122352 -9.76213E-05 -7.46058E-05 -5.33281E-05 -3.38009E-05 -1.60264E-05 2.76021E-09 1.43102E-05 2.69371E-05 3.79305E-05 4.73476E-05 5.52615E-05 6.17672E-05 6.69885E-05 7.1081E-05 7.42271E-05 7.6621E-05 7.84469E-05 7.98616E-05 8.09869E-05 8.19107E-05 8.26943E-05 8.33793E-05 8.39938E-05 8.4557E-05 8.50822E-05 8.55786E-05 8.60529E-05 8.65099E-05 8.69531E-05 8.73851E-05 8.78081E-05 8.82236E-05 8.86328E-05 8.90367E-05 8.94362E-05 8.98317E-05 9.0224E-05 9.06134E-05 9.10003E-05 9.1385E-05 9.17678E-05 9.21489E-05 9.25284E-05 9.29067E-05 9.32837E-05 9.36597E-05 9.40347E-05 9.44089E-05 9.47824E-05 9.51551E-05 9.55272E-05 9.58988E-05 9.62699E-05 9.66405E-05 9.70108E-05 9.73806E-05 9.77502E-05 9.81195E-05 9.84885E-05 9.88573E-05 9.92259E-05 9.95943E-05 9.99625E-05 0.000100331 0.000100699 0.000101067 0.000101434 0.000101802 0.00010217 0.000102537 0.000102905 0.000103273 0.00010364 0.000104008 0.000104375 0.000104743 0.00010511 0.000105478 0.000105846 0.000106213 0.000106581 0.000106949 0.000107317 0.000107684 0.000108052 0.00010842 0.000108788 0.000109157 0.000109525 0.000109893 0.000110262 0.00011063 0.000110999 0.000111367 0.000111736 0.000112105 0.000112474 0.000112843 0.000113212 0.000113582 0.000113951 0.000114321 0.00011469 0.00011506 0.00011543 0.0001158 0.00011617 0.000116541 0.000116911 0.000117282 0.000117652 0.000118023 0.000118395 0.000118766 0.000119137 0.000119509 0.000119881 0.000120253 0.000120625 0.000120997 0.00012137 0.000121742 0.000122115 0.000122488 0.000122862 0.000123235 0.000123609 0.000123983 0.000124358 0.000124732 0.000125107 0.000125482 0.000125857 0.000126233 0.000126609 0.000126985 0.000127361 0.000127738 0.000128115 0.000128493 0.00012887 0.000129248 0.000129627 0.000130005 0.000130385 0.000130764 0.000131144 0.000131524 0.000131904 0.000132285 0.000132667 0.000133049 0.000133431 0.000133813 0.000134196 0.00013458 0.000134964 0.000135348 0.000135733 0.000136119 0.000136505 0.000136891 0.000137278 0.000137665 0.000138053 0.000138442 0.000138831 0.00013922 0.000139611 0.000140001 0.000140393 0.000140785 0.000141178 0.000141571 0.000141965 0.000142359 0.000142755 0.00014315 0.000143547 0.000143944 0.000144342 0.000144741 0.00014514 0.000145541 0.000145942 0.000146343 -0.000251583 -0.000219089 -0.000188106 -0.000158685 -0.000130877 -0.000104728 -8.0278E-05 -5.75597E-05 -3.65981E-05 -1.74084E-05 3.08002E-09 1.56428E-05 2.95429E-05 4.17481E-05 5.23119E-05 6.1301E-05 6.88008E-05 7.49223E-05 7.98067E-05 8.36251E-05 8.6568E-05 8.88276E-05 9.05774E-05 9.19599E-05 9.30826E-05 9.40228E-05 9.48343E-05 9.55538E-05 9.62065E-05 9.681E-05 9.73763E-05 9.79141E-05 9.84298E-05 9.89279E-05 9.94119E-05 9.98844E-05 0.000100347 0.000100803 0.000101251 0.000101694 0.000102132 0.000102566 0.000102996 0.000103423 0.000103848 0.00010427 0.00010469 0.000105108 0.000105524 0.000105939 0.000106352 0.000106765 0.000107176 0.000107586 0.000107995 0.000108404 0.000108812 0.000109219 0.000109625 0.000110032 0.000110437 0.000110842 0.000111247 0.000111652 0.000112056 0.00011246 0.000112863 0.000113267 0.00011367 0.000114073 0.000114475 0.000114878 0.000115281 0.000115683 0.000116085 0.000116488 0.00011689 0.000117292 0.000117694 0.000118096 0.000118498 0.0001189 0.000119302 0.000119704 0.000120106 0.000120508 0.00012091 0.000121312 0.000121715 0.000122117 0.000122519 0.000122921 0.000123323 0.000123726 0.000124128 0.000124531 0.000124933 0.000125336 0.000125739 0.000126141 0.000126544 0.000126947 0.00012735 0.000127754 0.000128157 0.00012856 0.000128964 0.000129367 0.000129771 0.000130175 0.000130579 0.000130983 0.000131387 0.000131792 0.000132196 0.000132601 0.000133006 0.000133411 0.000133816 0.000134221 0.000134626 0.000135032 0.000135438 0.000135844 0.00013625 0.000136656 0.000137063 0.00013747 0.000137877 0.000138284 0.000138692 0.000139099 0.000139507 0.000139915 0.000140324 0.000140732 0.000141141 0.000141551 0.00014196 0.00014237 0.00014278 0.00014319 0.000143601 0.000144012 0.000144424 0.000144835 0.000145247 0.00014566 0.000146072 0.000146486 0.000146899 0.000147313 0.000147727 0.000148142 0.000148557 0.000148973 0.000149389 0.000149805 0.000150222 0.00015064 0.000151057 0.000151476 0.000151895 0.000152314 0.000152734 0.000153154 0.000153575 0.000153997 0.000154419 0.000154841 0.000155265 0.000155689 0.000156113 0.000156538 0.000156964 0.00015739 0.000157817 0.000158245 0.000158673 0.000159102 0.000159532 0.000159962 0.000160394 0.000160826 0.000161258 0.000161692 0.000162126 0.000162561 0.000162997 0.000163434 0.000163871 -0.000265415 -0.00023166 -0.000199375 -0.000168613 -0.00013943 -0.000111877 -8.60014E-05 -6.18442E-05 -3.94409E-05 -1.88188E-05 3.42762E-09 1.70118E-05 3.22263E-05 4.56898E-05 5.74522E-05 6.75747E-05 7.61344E-05 8.32301E-05 8.89887E-05 9.3567E-05 9.71471E-05 9.99221E-05 0.000102078 0.000103774 0.00010514 0.000106271 0.000107235 0.00010808 0.000108838 0.000109532 0.000110178 0.000110788 0.000111369 0.000111928 0.000112469 0.000112996 0.000113511 0.000114016 0.000114512 0.000115002 0.000115485 0.000115964 0.000116438 0.000116908 0.000117374 0.000117838 0.000118299 0.000118757 0.000119214 0.000119669 0.000120121 0.000120573 0.000121023 0.000121472 0.00012192 0.000122366 0.000122812 0.000123257 0.000123701 0.000124145 0.000124588 0.00012503 0.000125472 0.000125914 0.000126355 0.000126795 0.000127236 0.000127676 0.000128115 0.000128555 0.000128994 0.000129433 0.000129872 0.00013031 0.000130749 0.000131187 0.000131625 0.000132063 0.000132501 0.000132939 0.000133377 0.000133815 0.000134253 0.00013469 0.000135128 0.000135566 0.000136003 0.000136441 0.000136879 0.000137316 0.000137754 0.000138192 0.000138629 0.000139067 0.000139505 0.000139943 0.000140381 0.000140819 0.000141257 0.000141695 0.000142133 0.000142571 0.000143009 0.000143448 0.000143886 0.000144325 0.000144763 0.000145202 0.000145641 0.00014608 0.000146519 0.000146958 0.000147398 0.000147837 0.000148277 0.000148716 0.000149156 0.000149596 0.000150036 0.000150477 0.000150917 0.000151358 0.000151799 0.00015224 0.000152681 0.000153122 0.000153564 0.000154005 0.000154447 0.00015489 0.000155332 0.000155775 0.000156218 0.000156661 0.000157104 0.000157548 0.000157992 0.000158436 0.000158881 0.000159326 0.000159771 0.000160216 0.000160662 0.000161108 0.000161554 0.000162001 0.000162448 0.000162896 0.000163344 0.000163792 0.000164241 0.00016469 0.000165139 0.000165589 0.00016604 0.000166491 0.000166942 0.000167394 0.000167846 0.000168299 0.000168752 0.000169206 0.00016966 0.000170115 0.000170571 0.000171027 0.000171483 0.00017194 0.000172398 0.000172857 0.000173316 0.000173775 0.000174236 0.000174697 0.000175158 0.000175621 0.000176084 0.000176548 0.000177012 0.000177477 0.000177943 0.00017841 0.000178878 0.000179346 0.000179815 0.000180285 0.000180756 0.000181228 0.000181701 0.000182174 0.000182648 -0.00027916 -0.000244168 -0.000210604 -0.000178524 -0.000147986 -0.000119045 -9.17551E-05 -6.61644E-05 -4.23172E-05 -2.0251E-05 3.80507E-09 1.84106E-05 3.4974E-05 4.9735E-05 6.27408E-05 7.40477E-05 8.37253E-05 9.18618E-05 9.85702E-05 0.000103992 0.000108297 0.000111673 0.000114312 0.000116389 0.000118051 0.000119414 0.000120562 0.000121556 0.000122437 0.000123237 0.000123975 0.000124666 0.000125321 0.000125948 0.000126552 0.000127138 0.000127709 0.000128268 0.000128817 0.000129356 0.000129889 0.000130414 0.000130935 0.00013145 0.000131961 0.000132469 0.000132973 0.000133475 0.000133973 0.00013447 0.000134964 0.000135457 0.000135947 0.000136437 0.000136925 0.000137411 0.000137897 0.000138381 0.000138865 0.000139347 0.000139829 0.000140311 0.000140791 0.000141271 0.00014175 0.000142229 0.000142708 0.000143186 0.000143663 0.00014414 0.000144617 0.000145094 0.00014557 0.000146046 0.000146522 0.000146998 0.000147474 0.000147949 0.000148424 0.000148899 0.000149374 0.000149849 0.000150324 0.000150798 0.000151273 0.000151747 0.000152222 0.000152696 0.000153171 0.000153645 0.000154119 0.000154594 0.000155068 0.000155542 0.000156017 0.000156491 0.000156965 0.00015744 0.000157914 0.000158389 0.000158863 0.000159338 0.000159813 0.000160287 0.000160762 0.000161237 0.000161712 0.000162187 0.000162662 0.000163137 0.000163612 0.000164088 0.000164563 0.000165039 0.000165514 0.00016599 0.000166466 0.000166942 0.000167418 0.000167895 0.000168371 0.000168848 0.000169325 0.000169802 0.000170279 0.000170756 0.000171234 0.000171712 0.00017219 0.000172668 0.000173146 0.000173625 0.000174104 0.000174583 0.000175063 0.000175542 0.000176022 0.000176502 0.000176983 0.000177464 0.000177945 0.000178426 0.000178908 0.00017939 0.000179873 0.000180356 0.000180839 0.000181323 0.000181807 0.000182291 0.000182776 0.000183261 0.000183747 0.000184233 0.00018472 0.000185207 0.000185695 0.000186183 0.000186671 0.00018716 0.00018765 0.00018814 0.000188631 0.000189122 0.000189614 0.000190107 0.0001906 0.000191094 0.000191588 0.000192083 0.000192579 0.000193076 0.000193573 0.000194071 0.000194569 0.000195068 0.000195569 0.000196069 0.000196571 0.000197073 0.000197577 0.000198081 0.000198586 0.000199091 0.000199598 0.000200106 0.000200614 0.000201123 0.000201634 0.000202145 0.000202657 -0.000292795 -0.000256589 -0.000221769 -0.000188393 -0.000156521 -0.000126211 -9.75204E-05 -7.0505E-05 -4.52157E-05 -2.1699E-05 4.21457E-09 1.98327E-05 3.77727E-05 5.38639E-05 6.81508E-05 8.06855E-05 9.15313E-05 0.000100767 0.000108493 0.000114836 0.00011995 0.000124014 0.000127219 0.000129749 0.000131768 0.000133411 0.000134781 0.000135953 0.000136981 0.000137903 0.000138747 0.000139531 0.000140269 0.000140972 0.000141646 0.000142297 0.00014293 0.000143547 0.000144151 0.000144745 0.000145329 0.000145905 0.000146475 0.000147039 0.000147597 0.000148151 0.000148701 0.000149247 0.00014979 0.000150331 0.000150868 0.000151404 0.000151937 0.000152469 0.000152998 0.000153527 0.000154054 0.000154579 0.000155103 0.000155627 0.000156149 0.00015667 0.000157191 0.000157711 0.00015823 0.000158749 0.000159266 0.000159784 0.000160301 0.000160817 0.000161333 0.000161849 0.000162364 0.000162879 0.000163393 0.000163907 0.000164421 0.000164935 0.000165449 0.000165962 0.000166475 0.000166988 0.000167501 0.000168014 0.000168527 0.000169039 0.000169551 0.000170064 0.000170576 0.000171088 0.0001716 0.000172112 0.000172624 0.000173136 0.000173648 0.00017416 0.000174672 0.000175184 0.000175696 0.000176208 0.00017672 0.000177232 0.000177744 0.000178256 0.000178768 0.00017928 0.000179792 0.000180304 0.000180816 0.000181329 0.000181841 0.000182354 0.000182866 0.000183379 0.000183892 0.000184405 0.000184918 0.000185431 0.000185944 0.000186457 0.000186971 0.000187484 0.000187998 0.000188512 0.000189026 0.000189541 0.000190055 0.00019057 0.000191085 0.0001916 0.000192115 0.000192631 0.000193147 0.000193663 0.000194179 0.000194696 0.000195212 0.00019573 0.000196247 0.000196765 0.000197283 0.000197801 0.00019832 0.000198839 0.000199358 0.000199878 0.000200398 0.000200919 0.00020144 0.000201961 0.000202483 0.000203005 0.000203528 0.000204051 0.000204575 0.000205099 0.000205624 0.000206149 0.000206675 0.000207201 0.000207728 0.000208256 0.000208784 0.000209312 0.000209842 0.000210371 0.000210902 0.000211433 0.000211965 0.000212498 0.000213031 0.000213565 0.0002141 0.000214635 0.000215172 0.000215709 0.000216247 0.000216785 0.000217325 0.000217865 0.000218407 0.000218949 0.000219492 0.000220036 0.000220581 0.000221126 0.000221673 0.000222221 0.00022277 0.00022332 0.00022387 -0.0003063 -0.000268903 -0.00023285 -0.000198201 -0.000165015 -0.000133355 -0.000103281 -7.48518E-05 -4.81261E-05 -2.31573E-05 4.65842E-09 2.12719E-05 4.06101E-05 5.80574E-05 7.36561E-05 8.74549E-05 9.95115E-05 0.000109897 0.0001187 0.000126033 0.000132035 0.000136872 0.000140726 0.000143788 0.000146232 0.000148212 0.000149848 0.000151233 0.000152434 0.000153501 0.000154467 0.000155357 0.000156189 0.000156976 0.000157728 0.000158451 0.00015915 0.000159831 0.000160495 0.000161147 0.000161787 0.000162417 0.000163039 0.000163653 0.000164262 0.000164865 0.000165462 0.000166056 0.000166646 0.000167232 0.000167815 0.000168395 0.000168973 0.000169548 0.000170122 0.000170693 0.000171263 0.000171831 0.000172398 0.000172963 0.000173527 0.00017409 0.000174652 0.000175214 0.000175774 0.000176333 0.000176892 0.00017745 0.000178007 0.000178564 0.00017912 0.000179676 0.000180231 0.000180786 0.00018134 0.000181894 0.000182448 0.000183001 0.000183554 0.000184107 0.00018466 0.000185212 0.000185764 0.000186316 0.000186867 0.000187419 0.00018797 0.000188521 0.000189073 0.000189623 0.000190174 0.000190725 0.000191276 0.000191826 0.000192377 0.000192927 0.000193478 0.000194028 0.000194578 0.000195129 0.000195679 0.000196229 0.000196779 0.00019733 0.00019788 0.00019843 0.00019898 0.000199531 0.000200081 0.000200631 0.000201182 0.000201732 0.000202283 0.000202834 0.000203384 0.000203935 0.000204486 0.000205037 0.000205588 0.000206139 0.00020669 0.000207242 0.000207793 0.000208345 0.000208897 0.000209449 0.000210001 0.000210554 0.000211106 0.000211659 0.000212212 0.000212765 0.000213319 0.000213873 0.000214427 0.000214981 0.000215535 0.00021609 0.000216645 0.000217201 0.000217756 0.000218312 0.000218869 0.000219425 0.000219982 0.00022054 0.000221098 0.000221656 0.000222215 0.000222774 0.000223333 0.000223893 0.000224454 0.000225015 0.000225576 0.000226138 0.000226701 0.000227264 0.000227828 0.000228392 0.000228957 0.000229522 0.000230088 0.000230655 0.000231222 0.00023179 0.000232359 0.000232928 0.000233498 0.000234069 0.00023464 0.000235213 0.000235786 0.00023636 0.000236934 0.00023751 0.000238086 0.000238664 0.000239242 0.000239821 0.000240401 0.000240982 0.000241564 0.000242146 0.00024273 0.000243315 0.000243901 0.000244488 0.000245076 0.000245665 0.000246255 -0.000319658 -0.000281093 -0.00024383 -0.00020793 -0.000173453 -0.000140462 -0.000109021 -7.91926E-05 -5.10392E-05 -2.46209E-05 5.13904E-09 2.27227E-05 4.34746E-05 6.22978E-05 7.92327E-05 9.43248E-05 0.000107627 0.000119204 0.000129135 0.000137519 0.00014448 0.000150168 0.000154757 0.000158431 0.000161375 0.000163754 0.000165708 0.000167347 0.000168753 0.000169989 0.000171097 0.000172109 0.000173048 0.00017393 0.000174768 0.000175569 0.000176342 0.000177092 0.000177821 0.000178535 0.000179234 0.000179922 0.0001806 0.000181268 0.000181929 0.000182583 0.000183232 0.000183875 0.000184513 0.000185147 0.000185778 0.000186405 0.000187029 0.00018765 0.000188268 0.000188885 0.000189499 0.000190111 0.000190722 0.000191331 0.000191938 0.000192544 0.000193149 0.000193753 0.000194355 0.000194957 0.000195557 0.000196157 0.000196756 0.000197354 0.000197952 0.000198549 0.000199145 0.000199741 0.000200336 0.000200931 0.000201525 0.000202119 0.000202713 0.000203306 0.000203899 0.000204491 0.000205084 0.000205676 0.000206267 0.000206859 0.00020745 0.000208041 0.000208632 0.000209222 0.000209813 0.000210403 0.000210993 0.000211583 0.000212173 0.000212763 0.000213353 0.000213942 0.000214532 0.000215122 0.000215711 0.0002163 0.00021689 0.000217479 0.000218068 0.000218657 0.000219247 0.000219836 0.000220425 0.000221014 0.000221603 0.000222193 0.000222782 0.000223371 0.000223961 0.00022455 0.00022514 0.000225729 0.000226319 0.000226909 0.000227499 0.000228089 0.000228679 0.000229269 0.000229859 0.00023045 0.00023104 0.000231631 0.000232222 0.000232813 0.000233405 0.000233996 0.000234588 0.00023518 0.000235773 0.000236365 0.000236958 0.000237551 0.000238144 0.000238738 0.000239332 0.000239926 0.000240521 0.000241116 0.000241711 0.000242307 0.000242903 0.0002435 0.000244097 0.000244694 0.000245292 0.000245891 0.00024649 0.000247089 0.000247689 0.000248289 0.00024889 0.000249492 0.000250094 0.000250697 0.0002513 0.000251904 0.000252508 0.000253114 0.00025372 0.000254326 0.000254934 0.000255542 0.00025615 0.00025676 0.00025737 0.000257982 0.000258594 0.000259207 0.00025982 0.000260435 0.00026105 0.000261667 0.000262284 0.000262902 0.000263522 0.000264142 0.000264763 0.000265385 0.000266009 0.000266633 0.000267259 0.000267885 0.000268513 0.000269142 0.000269772 -0.000332856 -0.000293144 -0.000254694 -0.000217565 -0.000181819 -0.000147518 -0.000114729 -8.35165E-05 -5.39468E-05 -2.6085E-05 5.65896E-09 2.41799E-05 4.63556E-05 6.65687E-05 8.48579E-05 0.000101266 0.000115843 0.000128646 0.000139747 0.000149233 0.000157215 0.000163827 0.000169229 0.000173598 0.000177119 0.000179967 0.000182297 0.000184237 0.000185887 0.000187321 0.000188595 0.000189747 0.000190807 0.000191796 0.00019273 0.000193619 0.000194472 0.000195296 0.000196097 0.000196877 0.00019764 0.000198389 0.000199126 0.000199851 0.000200568 0.000201276 0.000201978 0.000202672 0.000203362 0.000204046 0.000204726 0.000205401 0.000206073 0.000206742 0.000207407 0.00020807 0.00020873 0.000209388 0.000210044 0.000210697 0.00021135 0.000212 0.000212649 0.000213296 0.000213942 0.000214587 0.000215231 0.000215874 0.000216516 0.000217156 0.000217796 0.000218436 0.000219074 0.000219712 0.000220349 0.000220986 0.000221622 0.000222257 0.000222892 0.000223527 0.000224161 0.000224794 0.000225428 0.00022606 0.000226693 0.000227325 0.000227957 0.000228589 0.00022922 0.000229851 0.000230482 0.000231113 0.000231744 0.000232374 0.000233004 0.000233634 0.000234264 0.000234894 0.000235523 0.000236152 0.000236782 0.000237411 0.00023804 0.000238669 0.000239298 0.000239927 0.000240556 0.000241185 0.000241813 0.000242442 0.000243071 0.0002437 0.000244328 0.000244957 0.000245586 0.000246215 0.000246843 0.000247472 0.000248101 0.00024873 0.000249359 0.000249988 0.000250617 0.000251247 0.000251876 0.000252506 0.000253135 0.000253765 0.000254395 0.000255025 0.000255656 0.000256286 0.000256917 0.000257548 0.000258179 0.000258811 0.000259442 0.000260074 0.000260707 0.000261339 0.000261972 0.000262605 0.000263239 0.000263873 0.000264507 0.000265141 0.000265776 0.000266412 0.000267048 0.000267684 0.000268321 0.000268958 0.000269596 0.000270234 0.000270873 0.000271512 0.000272152 0.000272793 0.000273434 0.000274075 0.000274718 0.000275361 0.000276004 0.000276649 0.000277294 0.00027794 0.000278586 0.000279233 0.000279882 0.00028053 0.00028118 0.000281831 0.000282482 0.000283134 0.000283788 0.000284442 0.000285097 0.000285753 0.00028641 0.000287068 0.000287727 0.000288387 0.000289048 0.00028971 0.000290373 0.000291038 0.000291704 0.00029237 0.000293038 0.000293708 0.000294378 -0.000345882 -0.000305046 -0.000265431 -0.000227095 -0.000190101 -0.000154511 -0.000120393 -8.7814E-05 -5.68418E-05 -2.75456E-05 6.22085E-09 2.56387E-05 4.92434E-05 7.08553E-05 9.05116E-05 0.000108253 0.000124126 0.000138183 0.000150488 0.00016112 0.000170176 0.000177775 0.000184063 0.000189206 0.000193382 0.000196773 0.000199544 0.000201839 0.000203776 0.000205443 0.000206909 0.000208224 0.000209422 0.000210532 0.000211573 0.000212559 0.000213501 0.000214407 0.000215283 0.000216136 0.000216967 0.000217781 0.000218581 0.000219367 0.000220142 0.000220908 0.000221664 0.000222413 0.000223156 0.000223892 0.000224623 0.000225349 0.000226071 0.000226789 0.000227503 0.000228213 0.000228921 0.000229626 0.000230329 0.000231029 0.000231727 0.000232423 0.000233117 0.000233809 0.0002345 0.00023519 0.000235878 0.000236564 0.00023725 0.000237934 0.000238618 0.0002393 0.000239982 0.000240663 0.000241343 0.000242022 0.000242701 0.000243378 0.000244056 0.000244732 0.000245408 0.000246084 0.000246759 0.000247434 0.000248108 0.000248782 0.000249455 0.000250128 0.000250801 0.000251474 0.000252146 0.000252818 0.000253489 0.00025416 0.000254831 0.000255502 0.000256173 0.000256843 0.000257513 0.000258183 0.000258853 0.000259523 0.000260193 0.000260862 0.000261531 0.000262201 0.00026287 0.000263539 0.000264208 0.000264876 0.000265545 0.000266214 0.000266883 0.000267551 0.00026822 0.000268889 0.000269557 0.000270226 0.000270895 0.000271563 0.000272232 0.000272901 0.00027357 0.000274239 0.000274908 0.000275577 0.000276246 0.000276916 0.000277585 0.000278255 0.000278925 0.000279595 0.000280265 0.000280935 0.000281606 0.000282277 0.000282948 0.000283619 0.00028429 0.000284962 0.000285635 0.000286307 0.00028698 0.000287653 0.000288327 0.000289001 0.000289675 0.00029035 0.000291025 0.0002917 0.000292376 0.000293053 0.00029373 0.000294408 0.000295086 0.000295765 0.000296444 0.000297124 0.000297804 0.000298485 0.000299167 0.00029985 0.000300533 0.000301216 0.000301901 0.000302586 0.000303273 0.000303959 0.000304647 0.000305336 0.000306025 0.000306715 0.000307407 0.000308099 0.000308792 0.000309486 0.000310181 0.000310877 0.000311574 0.000312272 0.000312971 0.000313671 0.000314373 0.000315075 0.000315779 0.000316484 0.00031719 0.000317897 0.000318606 0.000319316 0.000320027 -0.000358728 -0.000316789 -0.00027603 -0.000236509 -0.000198289 -0.000161432 -0.000126005 -9.20771E-05 -5.97179E-05 -2.89992E-05 6.82753E-09 2.70951E-05 5.21296E-05 7.51444E-05 9.61755E-05 0.000115262 0.000132446 0.000147778 0.000161315 0.000173128 0.000183302 0.000191944 0.000199183 0.000205172 0.000210082 0.00021409 0.000217371 0.000220082 0.000222354 0.000224295 0.000225985 0.000227487 0.000228844 0.000230092 0.000231253 0.000232346 0.000233385 0.000234381 0.000235341 0.00023627 0.000237175 0.000238059 0.000238925 0.000239776 0.000240613 0.000241438 0.000242253 0.000243059 0.000243857 0.000244648 0.000245432 0.000246211 0.000246984 0.000247753 0.000248517 0.000249278 0.000250034 0.000250788 0.000251538 0.000252286 0.000253031 0.000253774 0.000254515 0.000255253 0.00025599 0.000256725 0.000257458 0.00025819 0.000258921 0.00025965 0.000260378 0.000261104 0.00026183 0.000262555 0.000263278 0.000264001 0.000264723 0.000265444 0.000266164 0.000266884 0.000267603 0.000268321 0.000269039 0.000269756 0.000270473 0.000271189 0.000271905 0.00027262 0.000273335 0.000274049 0.000274763 0.000275476 0.00027619 0.000276903 0.000277615 0.000278327 0.000279039 0.000279751 0.000280463 0.000281174 0.000281885 0.000282596 0.000283306 0.000284017 0.000284727 0.000285437 0.000286147 0.000286857 0.000287566 0.000288276 0.000288985 0.000289694 0.000290404 0.000291113 0.000291822 0.000292531 0.00029324 0.000293949 0.000294658 0.000295367 0.000296076 0.000296785 0.000297494 0.000298203 0.000298912 0.000299621 0.00030033 0.00030104 0.000301749 0.000302459 0.000303168 0.000303878 0.000304588 0.000305298 0.000306009 0.000306719 0.00030743 0.000308141 0.000308853 0.000309564 0.000310276 0.000310988 0.000311701 0.000312414 0.000313127 0.000313841 0.000314555 0.000315269 0.000315984 0.000316699 0.000317415 0.000318131 0.000318848 0.000319565 0.000320283 0.000321001 0.00032172 0.00032244 0.00032316 0.000323881 0.000324602 0.000325325 0.000326048 0.000326771 0.000327496 0.000328221 0.000328947 0.000329674 0.000330401 0.00033113 0.000331859 0.00033259 0.000333321 0.000334053 0.000334786 0.000335521 0.000336256 0.000336992 0.000337729 0.000338468 0.000339207 0.000339948 0.00034069 0.000341433 0.000342178 0.000342923 0.00034367 0.000344418 0.000345168 0.000345918 0.000346671 -0.000371386 -0.000328364 -0.000286483 -0.000245799 -0.000206374 -0.000168271 -0.000131556 -9.62987E-05 -6.25697E-05 -3.04426E-05 7.48193E-09 2.85454E-05 5.50065E-05 7.94242E-05 0.000101833 0.000122271 0.000140778 0.0001574 0.00017219 0.000185211 0.00019654 0.00020627 0.000214517 0.000221419 0.000227134 0.000231836 0.000235698 0.000238888 0.000241552 0.000243811 0.000245763 0.000247481 0.000249021 0.000250424 0.000251721 0.000252934 0.000254081 0.000255175 0.000256225 0.000257239 0.000258223 0.000259181 0.000260118 0.000261037 0.000261939 0.000262828 0.000263704 0.00026457 0.000265426 0.000266273 0.000267113 0.000267946 0.000268773 0.000269594 0.00027041 0.000271222 0.000272029 0.000272833 0.000273633 0.000274429 0.000275223 0.000276014 0.000276802 0.000277588 0.000278372 0.000279153 0.000279933 0.000280711 0.000281487 0.000282262 0.000283035 0.000283807 0.000284577 0.000285347 0.000286115 0.000286882 0.000287648 0.000288413 0.000289177 0.000289941 0.000290703 0.000291465 0.000292226 0.000292986 0.000293746 0.000294505 0.000295264 0.000296022 0.000296779 0.000297536 0.000298292 0.000299048 0.000299804 0.000300559 0.000301313 0.000302068 0.000302822 0.000303575 0.000304328 0.000305081 0.000305834 0.000306587 0.000307339 0.00030809 0.000308842 0.000309594 0.000310345 0.000311096 0.000311846 0.000312597 0.000313348 0.000314098 0.000314848 0.000315598 0.000316348 0.000317098 0.000317848 0.000318597 0.000319347 0.000320097 0.000320846 0.000321596 0.000322345 0.000323095 0.000323844 0.000324594 0.000325343 0.000326093 0.000326843 0.000327593 0.000328343 0.000329093 0.000329843 0.000330593 0.000331344 0.000332095 0.000332846 0.000333597 0.000334348 0.0003351 0.000335852 0.000336604 0.000337357 0.000338109 0.000338863 0.000339616 0.00034037 0.000341124 0.000341879 0.000342635 0.00034339 0.000344146 0.000344903 0.00034566 0.000346418 0.000347176 0.000347935 0.000348695 0.000349455 0.000350216 0.000350978 0.00035174 0.000352503 0.000353266 0.000354031 0.000354796 0.000355562 0.000356329 0.000357097 0.000357866 0.000358636 0.000359406 0.000360178 0.00036095 0.000361724 0.000362499 0.000363274 0.000364051 0.000364829 0.000365608 0.000366388 0.00036717 0.000367952 0.000368736 0.000369521 0.000370308 0.000371096 0.000371885 0.000372675 0.000373467 0.000374261 -0.000383851 -0.000339766 -0.000296783 -0.000254958 -0.00021435 -0.000175022 -0.00013704 -0.000100473 -6.53927E-05 -3.18733E-05 8.18718E-09 2.99863E-05 5.78676E-05 8.36845E-05 0.000107471 0.000129263 0.000149098 0.000167021 0.000183079 0.000197329 0.000209841 0.000220697 0.000229999 0.000237872 0.00024446 0.000249926 0.000254443 0.00025818 0.000261295 0.000263924 0.000266178 0.000268147 0.000269896 0.000271476 0.000272927 0.000274274 0.000275541 0.000276743 0.000277891 0.000278996 0.000280065 0.000281104 0.000282117 0.000283107 0.000284079 0.000285034 0.000285975 0.000286902 0.000287819 0.000288726 0.000289623 0.000290513 0.000291395 0.000292271 0.000293141 0.000294005 0.000294865 0.00029572 0.00029657 0.000297417 0.000298261 0.000299101 0.000299938 0.000300772 0.000301604 0.000302433 0.00030326 0.000304085 0.000304908 0.000305729 0.000306549 0.000307366 0.000308183 0.000308997 0.000309811 0.000310623 0.000311434 0.000312244 0.000313053 0.00031386 0.000314667 0.000315473 0.000316278 0.000317082 0.000317886 0.000318688 0.00031949 0.000320291 0.000321092 0.000321892 0.000322691 0.00032349 0.000324289 0.000325086 0.000325884 0.00032668 0.000327477 0.000328273 0.000329068 0.000329863 0.000330658 0.000331453 0.000332247 0.000333041 0.000333834 0.000334627 0.00033542 0.000336213 0.000337005 0.000337797 0.000338589 0.000339381 0.000340172 0.000340964 0.000341755 0.000342546 0.000343337 0.000344128 0.000344918 0.000345709 0.000346499 0.00034729 0.00034808 0.00034887 0.000349661 0.000350451 0.000351241 0.000352032 0.000352822 0.000353613 0.000354403 0.000355194 0.000355984 0.000356775 0.000357566 0.000358357 0.000359149 0.00035994 0.000360732 0.000361524 0.000362316 0.000363109 0.000363901 0.000364694 0.000365488 0.000366282 0.000367076 0.00036787 0.000368665 0.000369461 0.000370257 0.000371053 0.00037185 0.000372647 0.000373445 0.000374244 0.000375043 0.000375842 0.000376643 0.000377444 0.000378246 0.000379048 0.000379851 0.000380655 0.00038146 0.000382266 0.000383072 0.000383879 0.000384687 0.000385497 0.000386307 0.000387118 0.00038793 0.000388743 0.000389557 0.000390372 0.000391188 0.000392006 0.000392824 0.000393644 0.000394465 0.000395287 0.000396111 0.000396936 0.000397762 0.000398589 0.000399418 0.000400249 0.00040108 0.000401914 0.000402748 -0.000396117 -0.00035099 -0.000306925 -0.000263979 -0.00022221 -0.000181679 -0.000142451 -0.000104596 -6.81832E-05 -3.3289E-05 8.94653E-09 3.14152E-05 6.07071E-05 8.79164E-05 0.000113076 0.000136221 0.000157387 0.000176615 0.000193951 0.000209446 0.000223162 0.000235174 0.000245571 0.000254465 0.000261985 0.000268283 0.000273523 0.000277877 0.000281506 0.00028456 0.000287165 0.000289422 0.000291411 0.000293194 0.000294818 0.000296316 0.000297716 0.000299037 0.000300293 0.000301498 0.000302658 0.000303783 0.000304876 0.000305944 0.000306989 0.000308014 0.000309022 0.000310015 0.000310995 0.000311964 0.000312921 0.00031387 0.000314809 0.000315742 0.000316667 0.000317586 0.000318499 0.000319407 0.00032031 0.000321208 0.000322103 0.000322993 0.00032388 0.000324764 0.000325645 0.000326523 0.000327398 0.000328271 0.000329142 0.00033001 0.000330877 0.000331741 0.000332604 0.000333465 0.000334325 0.000335183 0.000336039 0.000336894 0.000337748 0.000338601 0.000339453 0.000340303 0.000341153 0.000342002 0.000342849 0.000343696 0.000344542 0.000345387 0.000346231 0.000347075 0.000347918 0.00034876 0.000349602 0.000350443 0.000351283 0.000352123 0.000352962 0.000353801 0.000354639 0.000355477 0.000356314 0.000357151 0.000357987 0.000358823 0.000359659 0.000360494 0.000361329 0.000362164 0.000362998 0.000363832 0.000364666 0.0003655 0.000366333 0.000367166 0.000367998 0.000368831 0.000369663 0.000370496 0.000371327 0.000372159 0.000372991 0.000373823 0.000374654 0.000375486 0.000376317 0.000377148 0.00037798 0.000378811 0.000379642 0.000380473 0.000381305 0.000382136 0.000382967 0.000383799 0.000384631 0.000385462 0.000386294 0.000387126 0.000387959 0.000388791 0.000389624 0.000390457 0.00039129 0.000392124 0.000392957 0.000393792 0.000394626 0.000395461 0.000396296 0.000397132 0.000397968 0.000398805 0.000399642 0.00040048 0.000401318 0.000402157 0.000402996 0.000403836 0.000404677 0.000405518 0.00040636 0.000407203 0.000408047 0.000408891 0.000409736 0.000410582 0.000411429 0.000412277 0.000413125 0.000413975 0.000414826 0.000415677 0.00041653 0.000417383 0.000418238 0.000419094 0.000419951 0.000420809 0.000421668 0.000422529 0.000423391 0.000424254 0.000425119 0.000425984 0.000426852 0.00042772 0.00042859 0.000429462 0.000430335 0.000431209 0.000432085 -0.000408182 -0.000362031 -0.000316906 -0.00027286 -0.000229951 -0.000188238 -0.000147786 -0.000108662 -7.09378E-05 -3.46877E-05 9.76345E-09 3.28298E-05 6.35203E-05 9.21124E-05 0.000118638 0.000143131 0.000165627 0.000186163 0.000204782 0.000221531 0.000236468 0.000249658 0.000261182 0.000271137 0.000279641 0.00028683 0.000292861 0.000297899 0.000302109 0.000305647 0.000308653 0.000311241 0.000313506 0.00031552 0.000317341 0.000319009 0.000320557 0.000322009 0.000323384 0.000324696 0.000325957 0.000327173 0.000328354 0.000329503 0.000330625 0.000331725 0.000332804 0.000333866 0.000334912 0.000335945 0.000336965 0.000337974 0.000338974 0.000339964 0.000340947 0.000341922 0.00034289 0.000343853 0.000344809 0.000345761 0.000346707 0.00034765 0.000348588 0.000349523 0.000350454 0.000351381 0.000352306 0.000353228 0.000354147 0.000355064 0.000355978 0.00035689 0.0003578 0.000358708 0.000359614 0.000360519 0.000361422 0.000362323 0.000363223 0.000364121 0.000365018 0.000365914 0.000366809 0.000367703 0.000368595 0.000369486 0.000370377 0.000371266 0.000372155 0.000373042 0.000373929 0.000374815 0.000375701 0.000376585 0.000377469 0.000378352 0.000379235 0.000380117 0.000380998 0.000381879 0.000382759 0.000383639 0.000384518 0.000385397 0.000386275 0.000387153 0.00038803 0.000388907 0.000389784 0.00039066 0.000391536 0.000392411 0.000393286 0.000394161 0.000395036 0.00039591 0.000396784 0.000397658 0.000398531 0.000399405 0.000400278 0.000401151 0.000402024 0.000402897 0.000403769 0.000404642 0.000405514 0.000406387 0.000407259 0.000408131 0.000409004 0.000409876 0.000410748 0.000411621 0.000412493 0.000413366 0.000414238 0.000415111 0.000415984 0.000416857 0.000417731 0.000418604 0.000419478 0.000420352 0.000421226 0.000422101 0.000422976 0.000423852 0.000424727 0.000425604 0.00042648 0.000427357 0.000428235 0.000429113 0.000429992 0.000430871 0.000431751 0.000432631 0.000433512 0.000434394 0.000435277 0.00043616 0.000437044 0.000437928 0.000438814 0.000439701 0.000440588 0.000441476 0.000442365 0.000443255 0.000444146 0.000445039 0.000445932 0.000446826 0.000447721 0.000448618 0.000449516 0.000450415 0.000451315 0.000452216 0.000453119 0.000454023 0.000454929 0.000455835 0.000456744 0.000457653 0.000458565 0.000459477 0.000460392 0.000461308 0.000462225 -0.000420043 -0.000372888 -0.000326722 -0.000281597 -0.000237568 -0.000194694 -0.000153039 -0.000112669 -7.36539E-05 -3.6068E-05 1.06416E-08 3.42281E-05 6.6303E-05 9.62659E-05 0.000124148 0.000149982 0.000173802 0.000195644 0.000215548 0.000233559 0.000249726 0.000264111 0.000276786 0.000287835 0.000297366 0.000305501 0.000312383 0.00031817 0.000323025 0.00032711 0.000330572 0.000333539 0.000336119 0.000338397 0.00034044 0.000342299 0.000344013 0.000345611 0.000347117 0.000348547 0.000349915 0.000351231 0.000352505 0.000353741 0.000354946 0.000356124 0.000357278 0.000358412 0.000359528 0.000360628 0.000361713 0.000362786 0.000363847 0.000364898 0.00036594 0.000366973 0.000367998 0.000369016 0.000370028 0.000371034 0.000372034 0.00037303 0.00037402 0.000375007 0.000375989 0.000376967 0.000377942 0.000378914 0.000379882 0.000380848 0.000381811 0.000382772 0.00038373 0.000384685 0.000385639 0.000386591 0.000387541 0.000388489 0.000389435 0.00039038 0.000391323 0.000392265 0.000393205 0.000394144 0.000395082 0.000396018 0.000396954 0.000397888 0.000398821 0.000399753 0.000400684 0.000401615 0.000402544 0.000403473 0.000404401 0.000405327 0.000406254 0.000407179 0.000408104 0.000409028 0.000409951 0.000410874 0.000411797 0.000412718 0.000413639 0.00041456 0.00041548 0.000416399 0.000417319 0.000418237 0.000419155 0.000420073 0.000420991 0.000421908 0.000422824 0.00042374 0.000424656 0.000425572 0.000426488 0.000427403 0.000428318 0.000429232 0.000430147 0.000431061 0.000431975 0.000432889 0.000433803 0.000434716 0.00043563 0.000436543 0.000437457 0.00043837 0.000439284 0.000440197 0.00044111 0.000442024 0.000442938 0.000443851 0.000444765 0.000445679 0.000446593 0.000447507 0.000448422 0.000449337 0.000450252 0.000451167 0.000452083 0.000452999 0.000453915 0.000454832 0.000455749 0.000456666 0.000457585 0.000458503 0.000459422 0.000460342 0.000461262 0.000462183 0.000463105 0.000464027 0.00046495 0.000465873 0.000466798 0.000467723 0.000468649 0.000469576 0.000470504 0.000471433 0.000472362 0.000473293 0.000474225 0.000475157 0.000476091 0.000477026 0.000477962 0.000478899 0.000479838 0.000480778 0.000481719 0.000482661 0.000483604 0.000484549 0.000485496 0.000486444 0.000487393 0.000488344 0.000489296 0.00049025 0.000491206 0.000492163 0.000493122 -0.000431698 -0.000383559 -0.000336371 -0.000290187 -0.000245059 -0.000201046 -0.00015821 -0.000116614 -7.63296E-05 -3.74285E-05 1.15847E-08 3.56085E-05 6.90518E-05 0.000100372 0.000129599 0.000156764 0.000181901 0.000205045 0.000226232 0.000245505 0.00026291 0.000278501 0.000292344 0.000304515 0.000315107 0.000324232 0.000332019 0.000338616 0.000344181 0.000348874 0.00035285 0.000356248 0.000359187 0.000361765 0.00036406 0.000366135 0.000368034 0.000369795 0.000371444 0.000373004 0.000374489 0.000375913 0.000377286 0.000378616 0.000379909 0.00038117 0.000382403 0.000383613 0.000384801 0.000385971 0.000387125 0.000388263 0.000389389 0.000390502 0.000391605 0.000392698 0.000393782 0.000394858 0.000395926 0.000396988 0.000398043 0.000399093 0.000400137 0.000401176 0.000402211 0.000403241 0.000404267 0.00040529 0.000406308 0.000407324 0.000408337 0.000409346 0.000410353 0.000411357 0.000412359 0.000413359 0.000414356 0.000415352 0.000416345 0.000417336 0.000418326 0.000419314 0.000420301 0.000421286 0.000422269 0.000423251 0.000424232 0.000425212 0.00042619 0.000427167 0.000428143 0.000429118 0.000430092 0.000431065 0.000432037 0.000433008 0.000433978 0.000434948 0.000435916 0.000436884 0.000437851 0.000438817 0.000439783 0.000440747 0.000441712 0.000442675 0.000443638 0.000444601 0.000445563 0.000446524 0.000447485 0.000448445 0.000449405 0.000450364 0.000451323 0.000452282 0.00045324 0.000454197 0.000455155 0.000456112 0.000457069 0.000458025 0.000458981 0.000459937 0.000460893 0.000461848 0.000462803 0.000463758 0.000464713 0.000465668 0.000466623 0.000467578 0.000468532 0.000469487 0.000470441 0.000471396 0.00047235 0.000473305 0.00047426 0.000475214 0.000476169 0.000477124 0.00047808 0.000479035 0.000479991 0.000480947 0.000481903 0.00048286 0.000483817 0.000484774 0.000485732 0.00048669 0.000487649 0.000488608 0.000489567 0.000490528 0.000491488 0.00049245 0.000493412 0.000494374 0.000495338 0.000496302 0.000497267 0.000498232 0.000499199 0.000500166 0.000501135 0.000502104 0.000503074 0.000504045 0.000505017 0.000505991 0.000506965 0.000507941 0.000508917 0.000509895 0.000510874 0.000511855 0.000512836 0.00051382 0.000514804 0.00051579 0.000516777 0.000517766 0.000518756 0.000519748 0.000520741 0.000521737 0.000522733 0.000523732 0.000524732 -0.000443147 -0.000394042 -0.000345852 -0.000298628 -0.000252422 -0.000207291 -0.000163294 -0.000120496 -7.89631E-05 -3.87682E-05 1.25969E-08 3.69696E-05 7.17639E-05 0.000104425 0.000134983 0.000163469 0.000189913 0.000214351 0.000236817 0.000257351 0.000275995 0.0002928 0.000307824 0.000321135 0.000332817 0.000342969 0.000351709 0.000359171 0.000365505 0.000370869 0.000375418 0.0003793 0.000382645 0.000385563 0.000388145 0.000390462 0.00039257 0.000394511 0.00039632 0.000398021 0.000399635 0.000401175 0.000402656 0.000404085 0.000405472 0.000406821 0.000408138 0.000409428 0.000410692 0.000411936 0.00041316 0.000414367 0.00041556 0.000416738 0.000417904 0.000419059 0.000420203 0.000421338 0.000422465 0.000423584 0.000424696 0.000425801 0.0004269 0.000427993 0.000429081 0.000430164 0.000431242 0.000432316 0.000433387 0.000434453 0.000435516 0.000436575 0.000437632 0.000438685 0.000439736 0.000440784 0.00044183 0.000442873 0.000443914 0.000444953 0.00044599 0.000447025 0.000448058 0.000449089 0.000450119 0.000451147 0.000452174 0.000453199 0.000454223 0.000455245 0.000456266 0.000457286 0.000458305 0.000459323 0.000460339 0.000461355 0.000462369 0.000463383 0.000464395 0.000465407 0.000466418 0.000467428 0.000468437 0.000469445 0.000470453 0.00047146 0.000472466 0.000473471 0.000474476 0.00047548 0.000476484 0.000477487 0.000478489 0.000479491 0.000480493 0.000481494 0.000482494 0.000483494 0.000484493 0.000485493 0.000486491 0.00048749 0.000488488 0.000489485 0.000490483 0.00049148 0.000492477 0.000493473 0.00049447 0.000495466 0.000496462 0.000497458 0.000498454 0.00049945 0.000500445 0.000501441 0.000502437 0.000503432 0.000504428 0.000505424 0.000506419 0.000507415 0.000508411 0.000509408 0.000510404 0.000511401 0.000512398 0.000513395 0.000514393 0.00051539 0.000516389 0.000517387 0.000518387 0.000519386 0.000520386 0.000521387 0.000522388 0.00052339 0.000524392 0.000525396 0.000526399 0.000527404 0.000528409 0.000529415 0.000530422 0.00053143 0.000532439 0.000533449 0.000534459 0.000535471 0.000536484 0.000537497 0.000538512 0.000539528 0.000540545 0.000541564 0.000542584 0.000543605 0.000544627 0.000545651 0.000546676 0.000547703 0.000548731 0.00054976 0.000550792 0.000551824 0.000552859 0.000553895 0.000554933 0.000555972 0.000557014 -0.00045439 -0.000404336 -0.000355163 -0.000306919 -0.000259656 -0.000213427 -0.000168292 -0.000124312 -8.1553E-05 -4.00862E-05 1.36824E-08 3.83104E-05 7.4437E-05 0.000108423 0.000140296 0.000170088 0.00019783 0.000223552 0.00024729 0.00026908 0.000288963 0.000306984 0.000323197 0.000337663 0.000350457 0.000361666 0.000371397 0.000379772 0.000386931 0.000393024 0.000398206 0.000402629 0.00040643 0.000409732 0.000412637 0.000415228 0.000417569 0.000419712 0.000421697 0.000423555 0.000425308 0.000426975 0.000428572 0.000430109 0.000431595 0.000433038 0.000434444 0.000435817 0.000437162 0.000438483 0.000439781 0.00044106 0.000442321 0.000443567 0.000444798 0.000446017 0.000447224 0.00044842 0.000449607 0.000450785 0.000451954 0.000453116 0.000454271 0.000455419 0.000456562 0.000457699 0.00045883 0.000459957 0.000461079 0.000462197 0.000463311 0.000464422 0.000465528 0.000466632 0.000467732 0.000468829 0.000469924 0.000471015 0.000472105 0.000473191 0.000474276 0.000475358 0.000476439 0.000477517 0.000478593 0.000479668 0.000480741 0.000481812 0.000482882 0.00048395 0.000485017 0.000486082 0.000487146 0.000488209 0.00048927 0.000490331 0.00049139 0.000492448 0.000493505 0.00049456 0.000495615 0.000496669 0.000497722 0.000498774 0.000499825 0.000500876 0.000501925 0.000502974 0.000504022 0.000505069 0.000506116 0.000507162 0.000508207 0.000509251 0.000510295 0.000511339 0.000512382 0.000513424 0.000514466 0.000515507 0.000516548 0.000517588 0.000518628 0.000519668 0.000520707 0.000521746 0.000522784 0.000523823 0.000524861 0.000525898 0.000526936 0.000527973 0.00052901 0.000530047 0.000531084 0.000532121 0.000533158 0.000534194 0.000535231 0.000536268 0.000537304 0.000538341 0.000539378 0.000540415 0.000541452 0.00054249 0.000543527 0.000544565 0.000545604 0.000546642 0.000547681 0.00054872 0.00054976 0.0005508 0.00055184 0.000552881 0.000553923 0.000554965 0.000556008 0.000557052 0.000558096 0.000559141 0.000560186 0.000561233 0.00056228 0.000563328 0.000564377 0.000565427 0.000566479 0.000567531 0.000568584 0.000569638 0.000570693 0.00057175 0.000572807 0.000573866 0.000574926 0.000575988 0.000577051 0.000578115 0.000579181 0.000580248 0.000581317 0.000582387 0.000583459 0.000584533 0.000585608 0.000586685 0.000587764 0.000588845 0.000589927 -0.000465426 -0.000414443 -0.000364305 -0.000315061 -0.000266759 -0.000219454 -0.000173201 -0.000128061 -8.40985E-05 -4.13821E-05 1.48458E-08 3.96301E-05 7.70693E-05 0.000112361 0.000145534 0.000176618 0.000205642 0.000232639 0.000257639 0.000280679 0.000301797 0.000321034 0.00033844 0.00035407 0.000367991 0.000380281 0.000391036 0.000400365 0.000408398 0.000415275 0.000421148 0.000426167 0.000430478 0.000434211 0.00043748 0.000440378 0.000442981 0.00044535 0.00044753 0.00044956 0.000451466 0.000453272 0.000454994 0.000456646 0.000458239 0.000459782 0.000461281 0.000462744 0.000464173 0.000465574 0.00046695 0.000468304 0.000469637 0.000470953 0.000472252 0.000473536 0.000474808 0.000476067 0.000477315 0.000478553 0.000479782 0.000481002 0.000482215 0.00048342 0.000484618 0.00048581 0.000486996 0.000488176 0.000489351 0.000490522 0.000491688 0.00049285 0.000494007 0.000495161 0.000496312 0.000497459 0.000498603 0.000499744 0.000500882 0.000502017 0.00050315 0.00050428 0.000505408 0.000506534 0.000507657 0.000508779 0.000509898 0.000511016 0.000512132 0.000513246 0.000514359 0.00051547 0.000516579 0.000517687 0.000518794 0.000519899 0.000521003 0.000522106 0.000523207 0.000524308 0.000525407 0.000526505 0.000527602 0.000528698 0.000529793 0.000530887 0.00053198 0.000533072 0.000534164 0.000535254 0.000536344 0.000537433 0.000538521 0.000539608 0.000540695 0.000541781 0.000542866 0.000543951 0.000545035 0.000546119 0.000547202 0.000548284 0.000549366 0.000550448 0.000551529 0.00055261 0.00055369 0.00055477 0.00055585 0.000556929 0.000558008 0.000559087 0.000560165 0.000561243 0.000562321 0.000563399 0.000564477 0.000565555 0.000566633 0.00056771 0.000568788 0.000569866 0.000570943 0.000572021 0.000573099 0.000574177 0.000575255 0.000576334 0.000577413 0.000578492 0.000579571 0.000580651 0.000581731 0.000582811 0.000583892 0.000584974 0.000586056 0.000587138 0.000588222 0.000589305 0.00059039 0.000591475 0.000592561 0.000593648 0.000594735 0.000595824 0.000596913 0.000598003 0.000599095 0.000600187 0.00060128 0.000602375 0.00060347 0.000604567 0.000605665 0.000606765 0.000607865 0.000608967 0.000610071 0.000611175 0.000612282 0.000613389 0.000614499 0.00061561 0.000616722 0.000617836 0.000618952 0.00062007 0.00062119 0.000622311 0.000623434 -0.000476258 -0.000424361 -0.000373277 -0.000323052 -0.000273732 -0.00022537 -0.000178021 -0.000131743 -8.65988E-05 -4.26552E-05 1.60917E-08 4.09279E-05 7.96593E-05 0.000116238 0.000150693 0.000183053 0.000213346 0.000241603 0.000267856 0.000292137 0.000314483 0.000334933 0.000353533 0.000370332 0.00038539 0.00039878 0.000410584 0.000420902 0.000429851 0.000437563 0.00044418 0.000449852 0.000454726 0.00045894 0.000462616 0.000465859 0.000468755 0.000471375 0.000473773 0.000475992 0.000478067 0.000480023 0.000481881 0.000483657 0.000485365 0.000487015 0.000488614 0.00049017 0.000491689 0.000493175 0.000494632 0.000496063 0.000497472 0.00049886 0.000500229 0.000501582 0.00050292 0.000504244 0.000505556 0.000506856 0.000508146 0.000509426 0.000510697 0.000511959 0.000513215 0.000514462 0.000515704 0.000516939 0.000518168 0.000519392 0.000520611 0.000521825 0.000523035 0.00052424 0.000525441 0.000526639 0.000527833 0.000529023 0.000530211 0.000531395 0.000532576 0.000533755 0.000534931 0.000536105 0.000537276 0.000538445 0.000539612 0.000540776 0.000541939 0.000543099 0.000544258 0.000545415 0.000546571 0.000547724 0.000548876 0.000550027 0.000551176 0.000552324 0.00055347 0.000554615 0.000555759 0.000556901 0.000558042 0.000559182 0.000560321 0.000561459 0.000562596 0.000563732 0.000564867 0.000566001 0.000567133 0.000568266 0.000569397 0.000570527 0.000571657 0.000572786 0.000573914 0.000575041 0.000576168 0.000577294 0.000578419 0.000579544 0.000580668 0.000581791 0.000582914 0.000584037 0.000585159 0.000586281 0.000587402 0.000588523 0.000589643 0.000590763 0.000591883 0.000593003 0.000594122 0.000595241 0.00059636 0.000597479 0.000598598 0.000599716 0.000600835 0.000601954 0.000603072 0.000604191 0.000605309 0.000606428 0.000607547 0.000608666 0.000609785 0.000610905 0.000612025 0.000613145 0.000614265 0.000615386 0.000616507 0.000617629 0.000618751 0.000619874 0.000620998 0.000622122 0.000623246 0.000624372 0.000625498 0.000626625 0.000627753 0.000628881 0.000630011 0.000631141 0.000632272 0.000633405 0.000634538 0.000635673 0.000636809 0.000637946 0.000639084 0.000640224 0.000641364 0.000642507 0.00064365 0.000644795 0.000645942 0.00064709 0.00064824 0.000649391 0.000650544 0.000651699 0.000652855 0.000654013 0.000655173 0.000656336 0.000657499 -0.000486884 -0.000434093 -0.000382081 -0.000330893 -0.000280575 -0.000231177 -0.000182752 -0.000135357 -8.90534E-05 -4.39053E-05 1.74252E-08 4.22035E-05 8.22059E-05 0.000120052 0.000155771 0.000189389 0.000220936 0.00025044 0.000277932 0.000303445 0.000327011 0.000348669 0.000368459 0.000386428 0.000402632 0.000417132 0.000430005 0.00044134 0.000451242 0.000459832 0.000467245 0.000473623 0.000479114 0.000483859 0.000487988 0.000491616 0.00049484 0.00049774 0.00050038 0.000502809 0.000505069 0.000507189 0.000509195 0.000511106 0.000512937 0.0005147 0.000516406 0.000518062 0.000519674 0.000521249 0.000522791 0.000524304 0.000525791 0.000527254 0.000528697 0.000530121 0.000531527 0.000532918 0.000534295 0.000535659 0.000537012 0.000538353 0.000539684 0.000541006 0.000542319 0.000543624 0.000544922 0.000546213 0.000547497 0.000548775 0.000550048 0.000551315 0.000552577 0.000553835 0.000555088 0.000556336 0.000557581 0.000558822 0.000560059 0.000561293 0.000562524 0.000563752 0.000564976 0.000566198 0.000567417 0.000568634 0.000569848 0.00057106 0.000572269 0.000573477 0.000574682 0.000575886 0.000577087 0.000578287 0.000579485 0.000580681 0.000581875 0.000583068 0.000584259 0.000585449 0.000586638 0.000587825 0.00058901 0.000590195 0.000591378 0.00059256 0.000593741 0.00059492 0.000596099 0.000597276 0.000598452 0.000599628 0.000600802 0.000601976 0.000603148 0.00060432 0.000605491 0.000606661 0.00060783 0.000608998 0.000610166 0.000611333 0.000612499 0.000613665 0.00061483 0.000615994 0.000617158 0.000618322 0.000619485 0.000620647 0.000621809 0.000622971 0.000624132 0.000625293 0.000626454 0.000627614 0.000628774 0.000629934 0.000631094 0.000632253 0.000633412 0.000634572 0.000635731 0.00063689 0.00063805 0.000639209 0.000640368 0.000641528 0.000642688 0.000643848 0.000645008 0.000646168 0.000647329 0.00064849 0.000649652 0.000650814 0.000651976 0.000653139 0.000654303 0.000655467 0.000656632 0.000657797 0.000658963 0.00066013 0.000661298 0.000662467 0.000663636 0.000664807 0.000665978 0.000667151 0.000668324 0.000669499 0.000670675 0.000671852 0.00067303 0.000674209 0.00067539 0.000676573 0.000677756 0.000678942 0.000680128 0.000681316 0.000682506 0.000683698 0.000684891 0.000686086 0.000687283 0.000688482 0.000689682 0.000690885 0.000692089 -0.000497308 -0.000443638 -0.000390716 -0.000338584 -0.000287287 -0.000236873 -0.000187393 -0.000138904 -9.14622E-05 -4.51322E-05 1.88515E-08 4.34564E-05 8.47084E-05 0.000123802 0.000160765 0.000195624 0.000228408 0.000259144 0.000287863 0.000314594 0.000339371 0.000362229 0.000383205 0.000402344 0.000419694 0.000435314 0.000449271 0.000461644 0.000472529 0.000482036 0.000490288 0.000497423 0.000503582 0.000508909 0.00051354 0.000517597 0.000521186 0.000524398 0.000527306 0.000529968 0.00053243 0.000534731 0.000536898 0.000538954 0.000540917 0.000542803 0.000544621 0.000546383 0.000548095 0.000549764 0.000551396 0.000552994 0.000554562 0.000556104 0.000557623 0.00055912 0.000560597 0.000562058 0.000563502 0.000564932 0.000566348 0.000567752 0.000569145 0.000570527 0.0005719 0.000573264 0.000574619 0.000575967 0.000577307 0.000578641 0.000579968 0.000581289 0.000582605 0.000583915 0.00058522 0.000586521 0.000587817 0.000589109 0.000590397 0.000591681 0.000592961 0.000594238 0.000595512 0.000596782 0.00059805 0.000599315 0.000600577 0.000601836 0.000603093 0.000604348 0.0006056 0.00060685 0.000608098 0.000609344 0.000610588 0.00061183 0.00061307 0.000614308 0.000615545 0.00061678 0.000618013 0.000619245 0.000620475 0.000621704 0.000622932 0.000624158 0.000625383 0.000626606 0.000627828 0.000629049 0.000630269 0.000631488 0.000632706 0.000633922 0.000635138 0.000636353 0.000637566 0.000638779 0.000639991 0.000641202 0.000642412 0.000643621 0.00064483 0.000646038 0.000647245 0.000648451 0.000649657 0.000650862 0.000652067 0.000653271 0.000654474 0.000655677 0.00065688 0.000658082 0.000659284 0.000660486 0.000661687 0.000662888 0.000664088 0.000665289 0.000666489 0.000667689 0.000668889 0.000670089 0.000671289 0.000672489 0.000673689 0.000674889 0.000676089 0.000677289 0.00067849 0.00067969 0.000680891 0.000682093 0.000683294 0.000684497 0.000685699 0.000686902 0.000688106 0.00068931 0.000690515 0.00069172 0.000692926 0.000694133 0.000695341 0.000696549 0.000697759 0.000698969 0.00070018 0.000701393 0.000702606 0.000703821 0.000705036 0.000706253 0.000707471 0.000708691 0.000709911 0.000711134 0.000712357 0.000713582 0.000714809 0.000716037 0.000717267 0.000718499 0.000719732 0.000720967 0.000722204 0.000723443 0.000724683 0.000725926 0.000727171 -0.00050753 -0.000453 -0.000399185 -0.000346127 -0.00029387 -0.000242459 -0.000191946 -0.000142382 -9.38249E-05 -4.63357E-05 2.03762E-08 4.46864E-05 8.71661E-05 0.000127486 0.000165674 0.000201756 0.000235759 0.000267712 0.000297642 0.00032558 0.000351556 0.000375604 0.00039776 0.000418064 0.000436562 0.000453305 0.000468355 0.000481783 0.000493675 0.00050413 0.000513262 0.000521199 0.000528076 0.000534036 0.000539217 0.000543747 0.000547742 0.0005513 0.000554505 0.000557424 0.000560111 0.000562609 0.000564951 0.000567165 0.000569272 0.000571288 0.000573228 0.000575102 0.000576919 0.000578688 0.000580413 0.0005821 0.000583754 0.000585378 0.000586975 0.000588548 0.0005901 0.000591631 0.000593145 0.000594643 0.000596125 0.000597594 0.00059905 0.000600494 0.000601928 0.000603351 0.000604766 0.000606171 0.000607569 0.000608958 0.000610341 0.000611717 0.000613087 0.000614451 0.000615809 0.000617162 0.00061851 0.000619854 0.000621193 0.000622528 0.000623858 0.000625185 0.000626509 0.000627829 0.000629145 0.000630459 0.000631769 0.000633076 0.000634381 0.000635683 0.000636982 0.000638279 0.000639574 0.000640866 0.000642157 0.000643445 0.000644731 0.000646015 0.000647297 0.000648577 0.000649856 0.000651133 0.000652408 0.000653681 0.000654953 0.000656224 0.000657493 0.00065876 0.000660026 0.000661291 0.000662555 0.000663817 0.000665078 0.000666338 0.000667597 0.000668854 0.000670111 0.000671366 0.000672621 0.000673874 0.000675127 0.000676379 0.00067763 0.00067888 0.000680129 0.000681377 0.000682625 0.000683872 0.000685118 0.000686364 0.000687609 0.000688854 0.000690098 0.000691341 0.000692584 0.000693827 0.000695069 0.000696311 0.000697552 0.000698794 0.000700035 0.000701275 0.000702516 0.000703757 0.000704997 0.000706237 0.000707478 0.000708718 0.000709959 0.000711199 0.00071244 0.000713681 0.000714922 0.000716163 0.000717405 0.000718647 0.00071989 0.000721133 0.000722376 0.00072362 0.000724865 0.00072611 0.000727356 0.000728603 0.00072985 0.000731098 0.000732348 0.000733598 0.000734849 0.000736101 0.000737354 0.000738608 0.000739863 0.00074112 0.000742378 0.000743637 0.000744897 0.000746159 0.000747422 0.000748687 0.000749954 0.000751222 0.000752491 0.000753763 0.000755036 0.000756311 0.000757588 0.000758866 0.000760147 0.00076143 0.000762715 -0.000517553 -0.000462178 -0.000407488 -0.000353523 -0.000300324 -0.000247937 -0.000196409 -0.000145792 -9.61417E-05 -4.75158E-05 2.20052E-08 4.58934E-05 8.95788E-05 0.000131105 0.000170497 0.000207783 0.000242988 0.00027614 0.000307267 0.000336397 0.00036356 0.000388788 0.000412115 0.000433578 0.00045322 0.000471088 0.000487237 0.000501732 0.00051465 0.000526079 0.000536124 0.000544903 0.000552545 0.000559186 0.000564965 0.000570015 0.000574457 0.000578399 0.000581934 0.000585138 0.000588072 0.000590786 0.00059332 0.000595705 0.000597966 0.000600123 0.000602192 0.000604186 0.000606115 0.000607988 0.000609812 0.000611593 0.000613336 0.000615046 0.000616725 0.000618377 0.000620005 0.000621611 0.000623196 0.000624763 0.000626314 0.000627849 0.00062937 0.000630878 0.000632374 0.000633858 0.000635333 0.000636797 0.000638253 0.0006397 0.000641139 0.000642571 0.000643996 0.000645414 0.000646827 0.000648233 0.000649634 0.00065103 0.00065242 0.000653806 0.000655188 0.000656566 0.000657939 0.000659308 0.000660674 0.000662037 0.000663396 0.000664752 0.000666104 0.000667454 0.000668801 0.000670146 0.000671487 0.000672826 0.000674163 0.000675498 0.00067683 0.00067816 0.000679488 0.000680813 0.000682137 0.000683459 0.000684779 0.000686098 0.000687414 0.000688729 0.000690043 0.000691354 0.000692665 0.000693973 0.000695281 0.000696587 0.000697891 0.000699194 0.000700496 0.000701797 0.000703097 0.000704395 0.000705692 0.000706988 0.000708284 0.000709578 0.000710871 0.000712163 0.000713454 0.000714745 0.000716034 0.000717323 0.000718611 0.000719899 0.000721185 0.000722471 0.000723756 0.000725041 0.000726325 0.000727609 0.000728892 0.000730175 0.000731458 0.00073274 0.000734022 0.000735303 0.000736584 0.000737865 0.000739146 0.000740427 0.000741708 0.000742988 0.000744269 0.00074555 0.000746831 0.000748112 0.000749393 0.000750674 0.000751956 0.000753238 0.00075452 0.000755803 0.000757086 0.00075837 0.000759654 0.000760939 0.000762225 0.000763511 0.000764798 0.000766086 0.000767375 0.000768665 0.000769955 0.000771247 0.000772539 0.000773833 0.000775128 0.000776424 0.000777721 0.00077902 0.00078032 0.000781621 0.000782924 0.000784228 0.000785534 0.000786842 0.000788151 0.000789462 0.000790775 0.00079209 0.000793406 0.000794724 0.000796045 0.000797367 0.000798692 -0.000527378 -0.000471175 -0.000415627 -0.000360772 -0.00030665 -0.000253305 -0.000200784 -0.000149135 -9.84127E-05 -4.86725E-05 2.37446E-08 4.70774E-05 9.19462E-05 0.000134656 0.000175233 0.000213703 0.000250092 0.000284427 0.000316734 0.000347042 0.000375378 0.000401774 0.000426262 0.000448877 0.000469658 0.000488649 0.0005059 0.000521469 0.000535426 0.000547851 0.000558838 0.000568494 0.000576941 0.00058431 0.000590734 0.00059635 0.000601283 0.000605648 0.000609547 0.000613065 0.000616271 0.000619222 0.000621966 0.000624537 0.000626965 0.000629274 0.000631482 0.000633603 0.000635651 0.000637635 0.000639564 0.000641443 0.00064328 0.000645079 0.000646844 0.000648578 0.000650285 0.000651967 0.000653627 0.000655266 0.000656887 0.00065849 0.000660078 0.000661651 0.00066321 0.000664758 0.000666293 0.000667818 0.000669333 0.000670839 0.000672336 0.000673824 0.000675305 0.000676779 0.000678246 0.000679706 0.00068116 0.000682609 0.000684052 0.00068549 0.000686923 0.000688352 0.000689776 0.000691196 0.000692611 0.000694023 0.000695431 0.000696836 0.000698237 0.000699635 0.00070103 0.000702422 0.000703811 0.000705197 0.000706581 0.000707962 0.00070934 0.000710717 0.00071209 0.000713462 0.000714831 0.000716199 0.000717564 0.000718927 0.000720289 0.000721649 0.000723006 0.000724362 0.000725717 0.00072707 0.000728421 0.00072977 0.000731119 0.000732465 0.00073381 0.000735154 0.000736497 0.000737838 0.000739178 0.000740517 0.000741855 0.000743192 0.000744527 0.000745861 0.000747195 0.000748527 0.000749859 0.000751189 0.000752519 0.000753848 0.000755176 0.000756504 0.00075783 0.000759156 0.000760482 0.000761806 0.000763131 0.000764454 0.000765778 0.000767101 0.000768423 0.000769745 0.000771067 0.000772388 0.00077371 0.000775031 0.000776352 0.000777673 0.000778993 0.000780314 0.000781635 0.000782956 0.000784277 0.000785598 0.00078692 0.000788242 0.000789564 0.000790886 0.000792209 0.000793533 0.000794857 0.000796181 0.000797506 0.000798832 0.000800158 0.000801486 0.000802814 0.000804143 0.000805473 0.000806804 0.000808136 0.000809469 0.000810803 0.000812138 0.000813475 0.000814813 0.000816152 0.000817493 0.000818835 0.000820179 0.000821524 0.000822871 0.000824219 0.00082557 0.000826922 0.000828276 0.000829632 0.00083099 0.00083235 0.000833712 0.000835076 -0.000537008 -0.000479994 -0.000423604 -0.000367877 -0.00031285 -0.000258567 -0.000205071 -0.000152411 -0.000100638 -4.98061E-05 2.5601E-08 4.82384E-05 9.42684E-05 0.000138141 0.000179882 0.000219517 0.000257072 0.000292571 0.000326042 0.000357512 0.000387008 0.000414559 0.000440197 0.000463954 0.000485867 0.000505977 0.000524329 0.000540977 0.000555982 0.000569418 0.000581369 0.000591934 0.000601223 0.00060936 0.000616476 0.000622703 0.000628171 0.000633 0.0006373 0.000641163 0.000644669 0.000647882 0.000650854 0.000653628 0.000656238 0.00065871 0.000661066 0.000663325 0.000665499 0.0006676 0.000669639 0.000671622 0.000673558 0.00067545 0.000677304 0.000679124 0.000680913 0.000682674 0.000684411 0.000686124 0.000687817 0.000689491 0.000691147 0.000692787 0.000694412 0.000696023 0.000697622 0.000699208 0.000700784 0.000702349 0.000703904 0.000705451 0.000706989 0.000708518 0.000710041 0.000711556 0.000713065 0.000714567 0.000716063 0.000717554 0.000719039 0.000720519 0.000721994 0.000723464 0.00072493 0.000726392 0.00072785 0.000729304 0.000730754 0.000732201 0.000733644 0.000735084 0.00073652 0.000737954 0.000739385 0.000740813 0.000742238 0.00074366 0.00074508 0.000746498 0.000747913 0.000749326 0.000750737 0.000752145 0.000753552 0.000754956 0.000756358 0.000757759 0.000759158 0.000760555 0.00076195 0.000763343 0.000764735 0.000766125 0.000767514 0.000768901 0.000770287 0.000771671 0.000773054 0.000774436 0.000775816 0.000777195 0.000778573 0.00077995 0.000781325 0.0007827 0.000784073 0.000785445 0.000786817 0.000788187 0.000789557 0.000790926 0.000792294 0.000793661 0.000795028 0.000796393 0.000797759 0.000799123 0.000800487 0.000801851 0.000803214 0.000804576 0.000805939 0.0008073 0.000808662 0.000810023 0.000811385 0.000812746 0.000814106 0.000815467 0.000816828 0.000818189 0.00081955 0.000820911 0.000822272 0.000823633 0.000824995 0.000826357 0.00082772 0.000829082 0.000830446 0.00083181 0.000833174 0.000834539 0.000835905 0.000837272 0.000838639 0.000840007 0.000841376 0.000842746 0.000844117 0.00084549 0.000846863 0.000848237 0.000849613 0.00085099 0.000852369 0.000853748 0.00085513 0.000856513 0.000857897 0.000859283 0.000860671 0.00086206 0.000863452 0.000864845 0.00086624 0.000867637 0.000869036 0.000870438 0.000871841 -0.000546446 -0.000488635 -0.000431421 -0.000374838 -0.000318925 -0.000263722 -0.000209272 -0.000155621 -0.000102818 -5.09165E-05 2.75812E-08 4.93765E-05 9.65456E-05 0.00014156 0.000184445 0.000225225 0.000263925 0.000300572 0.00033519 0.000367805 0.000398446 0.000427139 0.000453914 0.000478803 0.00050184 0.000523062 0.000542513 0.00056024 0.0005763 0.000590759 0.000603692 0.000615189 0.000625352 0.000634296 0.000642144 0.000649027 0.000655074 0.00066041 0.000665149 0.000669392 0.000673227 0.000676726 0.000679949 0.000682944 0.000685751 0.000688399 0.000690916 0.00069332 0.000695629 0.000697855 0.00070001 0.000702103 0.000704142 0.000706132 0.000708079 0.000709988 0.000711863 0.000713707 0.000715523 0.000717313 0.00071908 0.000720826 0.000722553 0.000724261 0.000725953 0.00072763 0.000729293 0.000730943 0.00073258 0.000734206 0.000735821 0.000737426 0.000739022 0.000740609 0.000742188 0.000743759 0.000745322 0.000746879 0.000748429 0.000749973 0.000751511 0.000753043 0.00075457 0.000756091 0.000757608 0.00075912 0.000760628 0.000762131 0.000763631 0.000765126 0.000766618 0.000768106 0.000769591 0.000771072 0.00077255 0.000774026 0.000775498 0.000776967 0.000778433 0.000779897 0.000781358 0.000782817 0.000784273 0.000785727 0.000787179 0.000788628 0.000790075 0.00079152 0.000792963 0.000794405 0.000795844 0.000797281 0.000798717 0.000800151 0.000801583 0.000803013 0.000804442 0.000805869 0.000807295 0.00080872 0.000810143 0.000811564 0.000812984 0.000814403 0.000815821 0.000817238 0.000818653 0.000820067 0.00082148 0.000822893 0.000824304 0.000825714 0.000827123 0.000828532 0.000829939 0.000831346 0.000832752 0.000834157 0.000835562 0.000836966 0.00083837 0.000839773 0.000841176 0.000842578 0.00084398 0.000845381 0.000846782 0.000848183 0.000849584 0.000850985 0.000852385 0.000853786 0.000855187 0.000856587 0.000857988 0.000859389 0.00086079 0.000862192 0.000863593 0.000864996 0.000866398 0.000867801 0.000869205 0.000870609 0.000872014 0.00087342 0.000874826 0.000876234 0.000877642 0.000879051 0.000880461 0.000881872 0.000883284 0.000884698 0.000886112 0.000887528 0.000888946 0.000890364 0.000891785 0.000893206 0.00089463 0.000896055 0.000897481 0.00089891 0.00090034 0.000901772 0.000903206 0.000904642 0.00090608 0.000907521 0.000908963 -0.000555692 -0.000497101 -0.000439079 -0.000381658 -0.000324876 -0.000268772 -0.000213387 -0.000158765 -0.000104954 -5.2004E-05 2.96925E-08 5.04919E-05 9.87778E-05 0.000144912 0.00018892 0.000230825 0.000270653 0.000308428 0.000344176 0.000377921 0.000409691 0.000439511 0.000467411 0.00049342 0.000517571 0.000539899 0.000560443 0.000579249 0.000596366 0.000611854 0.000625783 0.000638232 0.000649296 0.000659079 0.000667699 0.000675279 0.000681948 0.000687832 0.00069305 0.000697709 0.000701905 0.000705718 0.000709215 0.000712451 0.000715471 0.000718311 0.000721 0.000723561 0.000726014 0.000728373 0.000730651 0.00073286 0.000735007 0.0007371 0.000739145 0.000741147 0.00074311 0.00074504 0.000746938 0.000748808 0.000750652 0.000752472 0.000754271 0.000756051 0.000757812 0.000759556 0.000761284 0.000762998 0.000764699 0.000766386 0.000768063 0.000769728 0.000771383 0.000773028 0.000774664 0.000776291 0.000777911 0.000779522 0.000781127 0.000782724 0.000784316 0.000785901 0.00078748 0.000789053 0.000790621 0.000792184 0.000793742 0.000795296 0.000796845 0.00079839 0.000799931 0.000801467 0.000803 0.00080453 0.000806056 0.000807578 0.000809097 0.000810614 0.000812127 0.000813637 0.000815144 0.000816649 0.000818151 0.00081965 0.000821147 0.000822642 0.000824134 0.000825624 0.000827111 0.000828597 0.00083008 0.000831562 0.000833041 0.000834519 0.000835994 0.000837468 0.00083894 0.000840411 0.00084188 0.000843347 0.000844812 0.000846277 0.000847739 0.000849201 0.00085066 0.000852119 0.000853576 0.000855032 0.000856487 0.000857941 0.000859393 0.000860845 0.000862296 0.000863745 0.000865194 0.000866642 0.000868088 0.000869535 0.00087098 0.000872425 0.000873869 0.000875312 0.000876755 0.000878198 0.00087964 0.000881081 0.000882522 0.000883963 0.000885404 0.000886845 0.000888285 0.000889725 0.000891165 0.000892605 0.000894046 0.000895486 0.000896927 0.000898367 0.000899808 0.00090125 0.000902691 0.000904134 0.000905576 0.00090702 0.000908464 0.000909908 0.000911353 0.0009128 0.000914247 0.000915694 0.000917143 0.000918593 0.000920044 0.000921496 0.00092295 0.000924404 0.00092586 0.000927318 0.000928777 0.000930237 0.000931699 0.000933163 0.000934628 0.000936095 0.000937564 0.000939035 0.000940508 0.000941983 0.00094346 0.000944939 0.00094642 -0.000564751 -0.000505395 -0.00044658 -0.000388339 -0.000330705 -0.000273718 -0.000217417 -0.000161844 -0.000107045 -5.30688E-05 3.19424E-08 5.15847E-05 0.000100965 0.000148199 0.000193309 0.00023632 0.000277256 0.000316141 0.000353001 0.000387859 0.000420741 0.000451674 0.000480685 0.000507802 0.000533056 0.000556481 0.000578112 0.000597992 0.000616166 0.000632688 0.000647622 0.000661039 0.000673025 0.000683676 0.000693101 0.000701418 0.00070875 0.000715224 0.000720961 0.000726074 0.000730664 0.000734821 0.000738617 0.000742117 0.000745369 0.000748416 0.00075129 0.00075402 0.000756626 0.000759126 0.000761536 0.000763866 0.000766128 0.000768328 0.000770475 0.000772575 0.000774631 0.000776649 0.000778633 0.000780585 0.000782509 0.000784406 0.00078628 0.000788132 0.000789963 0.000791776 0.000793572 0.000795352 0.000797117 0.000798868 0.000800607 0.000802333 0.000804048 0.000805752 0.000807446 0.000809131 0.000810807 0.000812475 0.000814135 0.000815787 0.000817432 0.00081907 0.000820702 0.000822328 0.000823948 0.000825562 0.000827172 0.000828776 0.000830375 0.000831969 0.000833559 0.000835145 0.000836727 0.000838305 0.000839879 0.000841449 0.000843016 0.000844579 0.000846139 0.000847696 0.000849249 0.0008508 0.000852348 0.000853893 0.000855436 0.000856975 0.000858513 0.000860047 0.00086158 0.00086311 0.000864638 0.000866163 0.000867687 0.000869208 0.000870727 0.000872245 0.00087376 0.000875274 0.000876786 0.000878296 0.000879804 0.000881311 0.000882816 0.000884319 0.000885821 0.000887322 0.000888821 0.000890319 0.000891816 0.000893311 0.000894805 0.000896298 0.00089779 0.00089928 0.00090077 0.000902259 0.000903746 0.000905233 0.000906719 0.000908205 0.000909689 0.000911173 0.000912656 0.000914139 0.000915621 0.000917102 0.000918583 0.000920064 0.000921545 0.000923025 0.000924505 0.000925984 0.000927464 0.000928944 0.000930423 0.000931903 0.000933382 0.000934862 0.000936343 0.000937823 0.000939304 0.000940785 0.000942266 0.000943749 0.000945231 0.000946715 0.000948199 0.000949683 0.000951169 0.000952656 0.000954143 0.000955632 0.000957121 0.000958612 0.000960104 0.000961597 0.000963091 0.000964587 0.000966085 0.000967583 0.000969084 0.000970586 0.00097209 0.000973595 0.000975103 0.000976612 0.000978123 0.000979637 0.000981152 0.00098267 0.00098419 -0.000573624 -0.000513519 -0.000453927 -0.000394881 -0.000336414 -0.000278562 -0.000221363 -0.000164858 -0.000109092 -5.41111E-05 3.43392E-08 5.26552E-05 0.000103109 0.00015142 0.000197612 0.000241708 0.000283733 0.00032371 0.000361664 0.000397618 0.000431598 0.000463628 0.000493735 0.000521948 0.000548293 0.000572804 0.000595515 0.000616463 0.000635691 0.00065325 0.000669194 0.000683591 0.000696516 0.000708059 0.000718319 0.000727406 0.000735441 0.000742545 0.000748841 0.000754446 0.000759466 0.000763997 0.000768121 0.000771906 0.000775411 0.000778682 0.000781758 0.000784668 0.000787438 0.00079009 0.000792638 0.000795098 0.00079748 0.000799794 0.000802048 0.000804249 0.000806402 0.000808513 0.000810585 0.000812623 0.000814628 0.000816605 0.000818556 0.000820483 0.000822387 0.000824271 0.000826136 0.000827983 0.000829815 0.00083163 0.000833432 0.000835221 0.000836997 0.000838761 0.000840515 0.000842258 0.000843991 0.000845716 0.000847432 0.000849139 0.000850839 0.000852531 0.000854217 0.000855895 0.000857568 0.000859234 0.000860895 0.00086255 0.0008642 0.000865844 0.000867484 0.000869119 0.00087075 0.000872376 0.000873999 0.000875617 0.000877231 0.000878842 0.000880449 0.000882053 0.000883654 0.000885251 0.000886845 0.000888436 0.000890024 0.000891609 0.000893191 0.000894771 0.000896348 0.000897923 0.000899495 0.000901065 0.000902633 0.000904198 0.000905761 0.000907322 0.000908881 0.000910438 0.000911992 0.000913545 0.000915097 0.000916646 0.000918194 0.000919739 0.000921284 0.000922826 0.000924368 0.000925907 0.000927445 0.000928982 0.000930518 0.000932052 0.000933585 0.000935117 0.000936647 0.000938177 0.000939706 0.000941233 0.00094276 0.000944285 0.00094581 0.000947334 0.000948858 0.00095038 0.000951902 0.000953424 0.000954945 0.000956465 0.000957985 0.000959505 0.000961024 0.000962544 0.000964063 0.000965581 0.0009671 0.000968619 0.000970138 0.000971657 0.000973176 0.000974695 0.000976215 0.000977735 0.000979255 0.000980776 0.000982297 0.000983819 0.000985342 0.000986865 0.000988389 0.000989914 0.00099144 0.000992967 0.000994495 0.000996024 0.000997554 0.000999085 0.00100062 0.00100215 0.00100369 0.00100523 0.00100676 0.0010083 0.00100985 0.00101139 0.00101294 0.00101448 0.00101603 0.00101758 0.00101914 0.00102069 0.00102225 -0.000582315 -0.000521475 -0.000461123 -0.000401288 -0.000342003 -0.000283304 -0.000225226 -0.00016781 -0.000111096 -5.51313E-05 3.68911E-08 5.37036E-05 0.000105209 0.000154576 0.000201829 0.000246992 0.000290086 0.000331137 0.000370167 0.000407199 0.00044226 0.000475372 0.000506561 0.000535855 0.00056328 0.000588866 0.000612647 0.000634656 0.000654935 0.000673527 0.000690486 0.000705869 0.000719747 0.000732201 0.000743321 0.000753211 0.000761983 0.000769756 0.000776651 0.000782785 0.000788271 0.00079321 0.00079769 0.000801788 0.000805568 0.000809082 0.000812373 0.000815478 0.000818425 0.000821237 0.000823934 0.00082653 0.00082904 0.000831474 0.00083384 0.000836148 0.000838402 0.000840609 0.000842773 0.000844899 0.00084699 0.000849049 0.000851079 0.000853083 0.000855062 0.000857019 0.000858955 0.000860871 0.00086277 0.000864652 0.000866518 0.000868371 0.000870209 0.000872035 0.000873849 0.000875651 0.000877443 0.000879225 0.000880998 0.000882761 0.000884516 0.000886264 0.000888003 0.000889735 0.000891461 0.00089318 0.000894892 0.000896599 0.000898299 0.000899995 0.000901685 0.00090337 0.00090505 0.000906725 0.000908396 0.000910063 0.000911725 0.000913384 0.000915039 0.000916689 0.000918337 0.00091998 0.000921621 0.000923258 0.000924892 0.000926523 0.000928151 0.000929776 0.000931398 0.000933017 0.000934634 0.000936248 0.00093786 0.000939469 0.000941076 0.00094268 0.000944283 0.000945883 0.000947481 0.000949077 0.000950671 0.000952263 0.000953853 0.000955441 0.000957028 0.000958613 0.000960196 0.000961777 0.000963357 0.000964936 0.000966513 0.000968088 0.000969662 0.000971235 0.000972807 0.000974377 0.000975946 0.000977514 0.000979082 0.000980648 0.000982213 0.000983777 0.000985341 0.000986903 0.000988465 0.000990026 0.000991587 0.000993147 0.000994707 0.000996266 0.000997825 0.000999383 0.00100094 0.0010025 0.00100406 0.00100562 0.00100717 0.00100873 0.00101029 0.00101185 0.0010134 0.00101496 0.00101652 0.00101808 0.00101964 0.0010212 0.00102276 0.00102432 0.00102589 0.00102745 0.00102901 0.00103058 0.00103215 0.00103371 0.00103528 0.00103685 0.00103842 0.00103999 0.00104157 0.00104314 0.00104472 0.0010463 0.00104788 0.00104946 0.00105104 0.00105263 0.00105422 0.00105581 0.0010574 0.00105899 0.00106059 -0.000590825 -0.000529266 -0.000468168 -0.000407561 -0.000347476 -0.000287947 -0.000229008 -0.000170698 -0.000113058 -5.61295E-05 3.96072E-08 5.47302E-05 0.000107265 0.000157669 0.000205963 0.000252171 0.000296316 0.000338421 0.000378509 0.000416604 0.000452728 0.000486906 0.000519162 0.000549523 0.000578014 0.000604665 0.000629505 0.000652567 0.00067389 0.000693514 0.000711486 0.000727861 0.000742702 0.000756081 0.000768083 0.000778802 0.000788344 0.000796821 0.000804352 0.000811055 0.000817043 0.000822424 0.000827291 0.000831728 0.000835806 0.000839584 0.00084311 0.000846425 0.000849561 0.000852545 0.000855399 0.000858141 0.000860785 0.000863345 0.000865829 0.000868248 0.000870608 0.000872916 0.000875176 0.000877394 0.000879573 0.000881717 0.000883829 0.000885912 0.000887968 0.00089 0.000892008 0.000893996 0.000895964 0.000897914 0.000899846 0.000901763 0.000903665 0.000905553 0.000907429 0.000909292 0.000911143 0.000912984 0.000914814 0.000916634 0.000918446 0.000920248 0.000922043 0.000923829 0.000925608 0.00092738 0.000929145 0.000930904 0.000932656 0.000934402 0.000936143 0.000937878 0.000939608 0.000941333 0.000943053 0.000944768 0.000946479 0.000948185 0.000949888 0.000951586 0.00095328 0.000954971 0.000956658 0.000958341 0.000960021 0.000961698 0.000963372 0.000965042 0.000966709 0.000968373 0.000970035 0.000971694 0.00097335 0.000975003 0.000976654 0.000978302 0.000979948 0.000981591 0.000983233 0.000984872 0.000986508 0.000988143 0.000989776 0.000991407 0.000993035 0.000994662 0.000996287 0.000997911 0.000999532 0.00100115 0.00100277 0.00100439 0.001006 0.00100762 0.00100923 0.00101084 0.00101245 0.00101406 0.00101567 0.00101727 0.00101888 0.00102048 0.00102209 0.00102369 0.00102529 0.00102689 0.00102849 0.00103009 0.00103169 0.00103329 0.00103489 0.00103649 0.00103808 0.00103968 0.00104128 0.00104287 0.00104447 0.00104607 0.00104766 0.00104926 0.00105086 0.00105245 0.00105405 0.00105565 0.00105725 0.00105885 0.00106044 0.00106204 0.00106364 0.00106525 0.00106685 0.00106845 0.00107006 0.00107166 0.00107327 0.00107487 0.00107648 0.00107809 0.0010797 0.00108132 0.00108293 0.00108455 0.00108617 0.00108779 0.00108941 0.00109103 0.00109266 0.00109428 0.00109591 0.00109754 0.00109918 -0.000599158 -0.000536893 -0.000475065 -0.000413702 -0.000352833 -0.000292491 -0.000232709 -0.000173525 -0.000114977 -5.71062E-05 4.24968E-08 5.57354E-05 0.000109279 0.000160698 0.000210013 0.000257247 0.000302424 0.000345565 0.000386693 0.000425832 0.000463003 0.000498231 0.000531539 0.000562952 0.000592496 0.000620198 0.000646087 0.000670194 0.000692553 0.000713203 0.000732188 0.000749556 0.000765365 0.000779682 0.000792582 0.000804153 0.000814492 0.000823706 0.000831909 0.000839217 0.000845745 0.000851603 0.000856889 0.000861695 0.000866096 0.000870159 0.000873939 0.000877479 0.000880819 0.000883987 0.000887009 0.000889905 0.000892693 0.000895385 0.000897994 0.00090053 0.000903 0.000905413 0.000907773 0.000910086 0.000912357 0.000914589 0.000916786 0.000918951 0.000921086 0.000923195 0.000925278 0.000927339 0.000929377 0.000931396 0.000933397 0.00093538 0.000937347 0.000939299 0.000941237 0.000943161 0.000945073 0.000946973 0.000948862 0.00095074 0.000952608 0.000954467 0.000956317 0.000958158 0.000959992 0.000961817 0.000963635 0.000965446 0.000967251 0.000969048 0.00097084 0.000972626 0.000974406 0.000976181 0.00097795 0.000979715 0.000981474 0.000983229 0.000984979 0.000986725 0.000988467 0.000990205 0.000991938 0.000993668 0.000995395 0.000997117 0.000998836 0.00100055 0.00100226 0.00100397 0.00100568 0.00100738 0.00100908 0.00101078 0.00101248 0.00101417 0.00101586 0.00101755 0.00101923 0.00102091 0.00102259 0.00102427 0.00102594 0.00102762 0.00102929 0.00103096 0.00103262 0.00103429 0.00103595 0.00103761 0.00103927 0.00104093 0.00104259 0.00104424 0.0010459 0.00104755 0.0010492 0.00105085 0.0010525 0.00105414 0.00105579 0.00105743 0.00105908 0.00106072 0.00106236 0.001064 0.00106564 0.00106728 0.00106892 0.00107056 0.00107219 0.00107383 0.00107547 0.0010771 0.00107874 0.00108037 0.00108201 0.00108365 0.00108528 0.00108692 0.00108855 0.00109019 0.00109182 0.00109346 0.00109509 0.00109673 0.00109837 0.00110001 0.00110164 0.00110328 0.00110492 0.00110656 0.00110821 0.00110985 0.00111149 0.00111314 0.00111479 0.00111643 0.00111808 0.00111973 0.00112138 0.00112304 0.00112469 0.00112635 0.00112801 0.00112967 0.00113133 0.001133 0.00113467 0.00113633 0.00113801 -0.000607316 -0.000544361 -0.000481817 -0.000419713 -0.000358076 -0.000296938 -0.000236332 -0.000176292 -0.000116855 -5.80616E-05 4.55699E-08 5.67193E-05 0.000111251 0.000163664 0.00021398 0.000262221 0.00030841 0.000352569 0.00039472 0.000434885 0.000473087 0.000509348 0.000543693 0.000576144 0.000606727 0.000635467 0.000662393 0.000687533 0.000710921 0.000732591 0.000752584 0.000770945 0.000787726 0.000802988 0.0008168 0.000829241 0.000840402 0.000850382 0.000859291 0.000867239 0.000874342 0.000880711 0.00088645 0.000891654 0.000896406 0.000900779 0.000904832 0.000908616 0.000912174 0.00091554 0.000918741 0.000921802 0.00092474 0.000927573 0.000930314 0.000932972 0.000935558 0.00093808 0.000940545 0.000942957 0.000945323 0.000947646 0.000949931 0.000952181 0.000954398 0.000956586 0.000958746 0.000960881 0.000962993 0.000965082 0.000967152 0.000969203 0.000971236 0.000973253 0.000975255 0.000977242 0.000979215 0.000981176 0.000983124 0.000985061 0.000986987 0.000988903 0.000990809 0.000992706 0.000994594 0.000996474 0.000998346 0.00100021 0.00100207 0.00100392 0.00100576 0.0010076 0.00100943 0.00101125 0.00101307 0.00101489 0.00101669 0.0010185 0.0010203 0.00102209 0.00102388 0.00102566 0.00102745 0.00102922 0.00103099 0.00103276 0.00103453 0.00103629 0.00103805 0.0010398 0.00104155 0.0010433 0.00104505 0.00104679 0.00104853 0.00105026 0.001052 0.00105373 0.00105546 0.00105718 0.0010589 0.00106062 0.00106234 0.00106406 0.00106577 0.00106748 0.00106919 0.0010709 0.0010726 0.00107431 0.00107601 0.00107771 0.0010794 0.0010811 0.00108279 0.00108449 0.00108618 0.00108787 0.00108956 0.00109124 0.00109293 0.00109461 0.0010963 0.00109798 0.00109966 0.00110134 0.00110302 0.0011047 0.00110638 0.00110805 0.00110973 0.00111141 0.00111308 0.00111476 0.00111643 0.0011181 0.00111978 0.00112145 0.00112313 0.0011248 0.00112647 0.00112815 0.00112982 0.00113149 0.00113317 0.00113484 0.00113652 0.00113819 0.00113987 0.00114155 0.00114322 0.0011449 0.00114658 0.00114826 0.00114994 0.00115163 0.00115331 0.001155 0.00115668 0.00115837 0.00116006 0.00116175 0.00116344 0.00116514 0.00116683 0.00116853 0.00117023 0.00117193 0.00117364 0.00117535 0.00117705 -0.000615302 -0.00055167 -0.000488426 -0.000425596 -0.000363207 -0.00030129 -0.000239876 -0.000178998 -0.000118692 -5.8996E-05 4.88367E-08 5.76824E-05 0.000113182 0.000166569 0.000217866 0.000267095 0.000314278 0.000359436 0.000402591 0.000443765 0.00048298 0.000520259 0.000555624 0.000589098 0.000620706 0.000650471 0.000678422 0.000704585 0.000728991 0.000751673 0.000772669 0.000792021 0.000809775 0.000825987 0.00084072 0.000854047 0.00086605 0.000876822 0.000886465 0.000895087 0.000902801 0.000909717 0.000915942 0.000921575 0.000926706 0.000931413 0.000935762 0.000939809 0.000943602 0.000947179 0.000950572 0.000953808 0.000956907 0.000959889 0.000962767 0.000965555 0.000968263 0.000970899 0.000973472 0.000975988 0.000978453 0.000980871 0.000983246 0.000985583 0.000987885 0.000990154 0.000992394 0.000994605 0.000996792 0.000998954 0.0010011 0.00100322 0.00100532 0.0010074 0.00100947 0.00101152 0.00101355 0.00101557 0.00101758 0.00101958 0.00102157 0.00102354 0.0010255 0.00102746 0.0010294 0.00103133 0.00103326 0.00103518 0.00103709 0.00103899 0.00104089 0.00104277 0.00104466 0.00104653 0.0010484 0.00105026 0.00105212 0.00105397 0.00105582 0.00105766 0.0010595 0.00106133 0.00106316 0.00106499 0.0010668 0.00106862 0.00107043 0.00107224 0.00107404 0.00107584 0.00107764 0.00107943 0.00108122 0.00108301 0.00108479 0.00108657 0.00108835 0.00109012 0.00109189 0.00109366 0.00109543 0.00109719 0.00109895 0.00110071 0.00110247 0.00110422 0.00110597 0.00110772 0.00110947 0.00111121 0.00111295 0.00111469 0.00111643 0.00111817 0.0011199 0.00112164 0.00112337 0.0011251 0.00112683 0.00112856 0.00113028 0.00113201 0.00113373 0.00113545 0.00113717 0.00113889 0.00114061 0.00114233 0.00114405 0.00114576 0.00114748 0.00114919 0.00115091 0.00115262 0.00115433 0.00115604 0.00115776 0.00115947 0.00116118 0.00116289 0.0011646 0.00116632 0.00116803 0.00116974 0.00117145 0.00117316 0.00117488 0.00117659 0.0011783 0.00118002 0.00118173 0.00118345 0.00118517 0.00118689 0.0011886 0.00119032 0.00119205 0.00119377 0.00119549 0.00119722 0.00119894 0.00120067 0.0012024 0.00120413 0.00120587 0.0012076 0.00120934 0.00121108 0.00121282 0.00121456 0.00121631 -0.000623119 -0.000558824 -0.000494894 -0.000431353 -0.000368228 -0.000305549 -0.000243344 -0.000181646 -0.000120489 -5.99097E-05 5.23084E-08 5.8625E-05 0.000115071 0.000169413 0.000221672 0.000271869 0.000320026 0.000366165 0.000410307 0.000452473 0.000492686 0.000530965 0.000567335 0.000601817 0.000634434 0.000665212 0.000694174 0.000721348 0.000746762 0.000770448 0.000792441 0.000812778 0.000831505 0.000848669 0.000864331 0.000878554 0.000891416 0.000903002 0.000913406 0.000922733 0.000931089 0.000938586 0.00094533 0.000951425 0.000956965 0.000962032 0.000966701 0.000971031 0.000975077 0.000978881 0.000982479 0.000985901 0.000989172 0.00099231 0.000995335 0.000998259 0.00100109 0.00100385 0.00100654 0.00100916 0.00101173 0.00101424 0.00101671 0.00101914 0.00102153 0.00102388 0.0010262 0.0010285 0.00103076 0.001033 0.00103521 0.0010374 0.00103957 0.00104172 0.00104385 0.00104597 0.00104807 0.00105015 0.00105222 0.00105428 0.00105633 0.00105836 0.00106038 0.00106239 0.00106439 0.00106638 0.00106836 0.00107033 0.0010723 0.00107425 0.0010762 0.00107814 0.00108007 0.001082 0.00108392 0.00108583 0.00108774 0.00108964 0.00109154 0.00109343 0.00109532 0.0010972 0.00109907 0.00110094 0.00110281 0.00110467 0.00110653 0.00110838 0.00111023 0.00111208 0.00111392 0.00111576 0.00111759 0.00111942 0.00112125 0.00112307 0.0011249 0.00112671 0.00112853 0.00113034 0.00113215 0.00113396 0.00113576 0.00113756 0.00113936 0.00114115 0.00114295 0.00114474 0.00114653 0.00114831 0.0011501 0.00115188 0.00115366 0.00115544 0.00115721 0.00115899 0.00116076 0.00116253 0.0011643 0.00116607 0.00116783 0.0011696 0.00117136 0.00117312 0.00117488 0.00117664 0.0011784 0.00118016 0.00118191 0.00118367 0.00118542 0.00118717 0.00118893 0.00119068 0.00119243 0.00119418 0.00119593 0.00119768 0.00119943 0.00120118 0.00120293 0.00120468 0.00120643 0.00120818 0.00120993 0.00121168 0.00121343 0.00121518 0.00121693 0.00121869 0.00122044 0.00122219 0.00122395 0.0012257 0.00122746 0.00122921 0.00123097 0.00123273 0.00123449 0.00123625 0.00123802 0.00123978 0.00124155 0.00124332 0.00124509 0.00124686 0.00124863 0.00125041 0.00125219 0.00125397 0.00125575 -0.000630769 -0.000565825 -0.000501223 -0.000436986 -0.000373141 -0.000309715 -0.000246736 -0.000184235 -0.000122246 -6.08031E-05 5.59963E-08 5.95474E-05 0.000116921 0.000172197 0.000225398 0.000276545 0.000325659 0.000372761 0.000417871 0.000461012 0.000502204 0.000541468 0.000578827 0.000614301 0.000647914 0.000679689 0.00070965 0.000737823 0.000764235 0.000788915 0.000811896 0.000833214 0.000852909 0.000871027 0.00088762 0.000902749 0.000916483 0.0009289 0.00094009 0.000950147 0.000959178 0.000967288 0.000974585 0.000981174 0.000987152 0.000992608 0.000997621 0.00100226 0.00100657 0.00101062 0.00101444 0.00101806 0.00102151 0.00102482 0.001028 0.00103106 0.00103403 0.00103692 0.00103972 0.00104246 0.00104513 0.00104775 0.00105032 0.00105284 0.00105532 0.00105776 0.00106016 0.00106253 0.00106488 0.00106719 0.00106948 0.00107174 0.00107398 0.0010762 0.0010784 0.00108059 0.00108275 0.0010849 0.00108703 0.00108915 0.00109126 0.00109335 0.00109543 0.0010975 0.00109955 0.0011016 0.00110364 0.00110566 0.00110768 0.00110969 0.00111169 0.00111368 0.00111567 0.00111765 0.00111962 0.00112158 0.00112354 0.00112549 0.00112744 0.00112938 0.00113131 0.00113324 0.00113516 0.00113708 0.001139 0.0011409 0.00114281 0.00114471 0.0011466 0.00114849 0.00115038 0.00115227 0.00115414 0.00115602 0.00115789 0.00115976 0.00116163 0.00116349 0.00116535 0.0011672 0.00116905 0.0011709 0.00117275 0.00117459 0.00117643 0.00117827 0.00118011 0.00118194 0.00118377 0.0011856 0.00118742 0.00118925 0.00119107 0.00119289 0.0011947 0.00119652 0.00119833 0.00120014 0.00120195 0.00120376 0.00120556 0.00120737 0.00120917 0.00121097 0.00121277 0.00121457 0.00121637 0.00121816 0.00121996 0.00122175 0.00122355 0.00122534 0.00122713 0.00122892 0.00123071 0.0012325 0.00123429 0.00123608 0.00123787 0.00123965 0.00124144 0.00124323 0.00124502 0.0012468 0.00124859 0.00125038 0.00125217 0.00125395 0.00125574 0.00125753 0.00125932 0.00126111 0.0012629 0.0012647 0.00126649 0.00126828 0.00127008 0.00127187 0.00127367 0.00127547 0.00127727 0.00127907 0.00128088 0.00128268 0.00128449 0.0012863 0.00128811 0.00128992 0.00129173 0.00129355 0.00129537 -0.000638256 -0.000572676 -0.000507416 -0.000442498 -0.000377947 -0.00031379 -0.000250054 -0.000186768 -0.000123965 -6.16765E-05 5.99127E-08 6.045E-05 0.00011873 0.000174922 0.000229047 0.000281124 0.000331176 0.000379223 0.000425285 0.000469383 0.000511538 0.000551771 0.000590102 0.000626554 0.000661147 0.000693906 0.000724852 0.000754011 0.000781409 0.000807073 0.000831034 0.000853326 0.000873985 0.000893054 0.00091058 0.00092662 0.000941236 0.0009545 0.000966494 0.000977308 0.00098704 0.000995794 0.00100368 0.00101079 0.00101724 0.00102311 0.00102849 0.00103346 0.00103807 0.00104238 0.00104643 0.00105026 0.00105391 0.00105739 0.00106073 0.00106395 0.00106706 0.00107008 0.00107301 0.00107586 0.00107865 0.00108137 0.00108404 0.00108666 0.00108923 0.00109176 0.00109425 0.00109671 0.00109913 0.00110152 0.00110389 0.00110622 0.00110854 0.00111083 0.0011131 0.00111535 0.00111758 0.00111979 0.00112199 0.00112417 0.00112634 0.00112849 0.00113063 0.00113276 0.00113487 0.00113698 0.00113907 0.00114115 0.00114322 0.00114529 0.00114734 0.00114939 0.00115143 0.00115346 0.00115548 0.00115749 0.0011595 0.0011615 0.0011635 0.00116549 0.00116747 0.00116945 0.00117142 0.00117339 0.00117535 0.0011773 0.00117925 0.0011812 0.00118314 0.00118508 0.00118701 0.00118894 0.00119086 0.00119278 0.0011947 0.00119661 0.00119852 0.00120043 0.00120233 0.00120423 0.00120613 0.00120802 0.00120991 0.00121179 0.00121368 0.00121556 0.00121743 0.00121931 0.00122118 0.00122305 0.00122492 0.00122678 0.00122864 0.0012305 0.00123236 0.00123422 0.00123607 0.00123792 0.00123977 0.00124162 0.00124347 0.00124531 0.00124715 0.00124899 0.00125083 0.00125267 0.00125451 0.00125634 0.00125818 0.00126001 0.00126184 0.00126367 0.0012655 0.00126733 0.00126916 0.00127099 0.00127281 0.00127464 0.00127647 0.00127829 0.00128012 0.00128194 0.00128377 0.00128559 0.00128742 0.00128924 0.00129107 0.00129289 0.00129472 0.00129654 0.00129837 0.0013002 0.00130203 0.00130386 0.00130569 0.00130752 0.00130935 0.00131118 0.00131301 0.00131485 0.00131669 0.00131853 0.00132036 0.00132221 0.00132405 0.00132589 0.00132774 0.00132959 0.00133144 0.00133329 0.00133515 -0.000645582 -0.000579379 -0.000513474 -0.00044789 -0.000382649 -0.000317776 -0.000253299 -0.000189245 -0.000125645 -6.25302E-05 6.40703E-08 6.13331E-05 0.000120501 0.000177589 0.000232618 0.000285608 0.00033658 0.000385554 0.00043255 0.000477588 0.00052069 0.000561874 0.000601163 0.000638576 0.000674136 0.000707863 0.000739782 0.000769914 0.000798286 0.000824923 0.000849855 0.000873112 0.000894729 0.000914745 0.000933205 0.000950159 0.000965664 0.000979786 0.0009926 0.00100419 0.00101465 0.00102408 0.00103257 0.00104025 0.00104719 0.00105351 0.00105929 0.00106461 0.00106954 0.00107413 0.00107843 0.00108249 0.00108634 0.00109001 0.00109353 0.00109691 0.00110016 0.00110332 0.00110638 0.00110935 0.00111226 0.00111509 0.00111786 0.00112058 0.00112325 0.00112587 0.00112845 0.001131 0.0011335 0.00113598 0.00113842 0.00114083 0.00114322 0.00114558 0.00114793 0.00115024 0.00115254 0.00115482 0.00115708 0.00115933 0.00116156 0.00116377 0.00116597 0.00116816 0.00117033 0.00117249 0.00117464 0.00117678 0.00117891 0.00118103 0.00118314 0.00118524 0.00118733 0.00118941 0.00119149 0.00119355 0.00119561 0.00119766 0.00119971 0.00120175 0.00120378 0.00120581 0.00120783 0.00120984 0.00121185 0.00121385 0.00121585 0.00121784 0.00121983 0.00122182 0.00122379 0.00122577 0.00122774 0.0012297 0.00123167 0.00123362 0.00123558 0.00123753 0.00123947 0.00124141 0.00124335 0.00124529 0.00124722 0.00124915 0.00125108 0.001253 0.00125492 0.00125683 0.00125875 0.00126066 0.00126257 0.00126447 0.00126638 0.00126828 0.00127018 0.00127207 0.00127397 0.00127586 0.00127775 0.00127964 0.00128152 0.00128341 0.00128529 0.00128717 0.00128905 0.00129092 0.0012928 0.00129467 0.00129655 0.00129842 0.00130029 0.00130216 0.00130403 0.00130589 0.00130776 0.00130963 0.00131149 0.00131336 0.00131522 0.00131708 0.00131895 0.00132081 0.00132267 0.00132453 0.0013264 0.00132826 0.00133012 0.00133198 0.00133385 0.00133571 0.00133757 0.00133944 0.0013413 0.00134317 0.00134503 0.0013469 0.00134877 0.00135064 0.00135251 0.00135438 0.00135625 0.00135813 0.00136 0.00136188 0.00136376 0.00136564 0.00136753 0.00136941 0.0013713 0.00137319 0.00137508 -0.000652749 -0.000585937 -0.000519401 -0.000453164 -0.000387247 -0.000321675 -0.000256472 -0.000191667 -0.000127287 -6.33646E-05 6.84826E-08 6.2197E-05 0.000122234 0.000180199 0.000236114 0.000289998 0.000341872 0.000391755 0.000439668 0.00048563 0.000529661 0.000571781 0.000612011 0.000650371 0.000686882 0.000721564 0.00075444 0.000785533 0.000814866 0.000842465 0.000868357 0.000892571 0.000915139 0.000936099 0.000955489 0.000973357 0.000989756 0.00100474 0.00101839 0.00103078 0.00104199 0.00105211 0.00106125 0.00106951 0.00107699 0.00108379 0.00108999 0.00109569 0.00110095 0.00110584 0.00111042 0.00111472 0.00111879 0.00112266 0.00112636 0.0011299 0.00113332 0.00113662 0.00113981 0.00114292 0.00114594 0.00114889 0.00115178 0.0011546 0.00115737 0.00116009 0.00116276 0.00116539 0.00116798 0.00117054 0.00117306 0.00117555 0.00117802 0.00118046 0.00118287 0.00118526 0.00118763 0.00118997 0.0011923 0.00119461 0.0011969 0.00119918 0.00120144 0.00120369 0.00120592 0.00120814 0.00121035 0.00121255 0.00121473 0.00121691 0.00121907 0.00122122 0.00122337 0.0012255 0.00122763 0.00122975 0.00123186 0.00123396 0.00123606 0.00123815 0.00124023 0.0012423 0.00124437 0.00124644 0.00124849 0.00125054 0.00125259 0.00125463 0.00125666 0.00125869 0.00126072 0.00126274 0.00126475 0.00126676 0.00126877 0.00127077 0.00127277 0.00127476 0.00127675 0.00127874 0.00128072 0.0012827 0.00128468 0.00128665 0.00128862 0.00129058 0.00129254 0.0012945 0.00129646 0.00129841 0.00130036 0.00130231 0.00130425 0.00130619 0.00130813 0.00131007 0.00131201 0.00131394 0.00131587 0.0013178 0.00131972 0.00132164 0.00132357 0.00132549 0.0013274 0.00132932 0.00133124 0.00133315 0.00133506 0.00133697 0.00133888 0.00134079 0.0013427 0.0013446 0.00134651 0.00134841 0.00135031 0.00135221 0.00135412 0.00135602 0.00135792 0.00135982 0.00136172 0.00136362 0.00136552 0.00136742 0.00136931 0.00137121 0.00137311 0.00137501 0.00137691 0.00137882 0.00138072 0.00138262 0.00138452 0.00138643 0.00138833 0.00139024 0.00139214 0.00139405 0.00139596 0.00139787 0.00139978 0.0014017 0.00140361 0.00140553 0.00140745 0.00140937 0.00141129 0.00141322 0.00141514 -0.00065976 -0.000592351 -0.000525199 -0.000458322 -0.000391744 -0.000325487 -0.000259575 -0.000194035 -0.000128893 -6.418E-05 7.31636E-08 6.30422E-05 0.000123929 0.000182753 0.000239536 0.000294296 0.000347054 0.000397829 0.000446642 0.00049351 0.000538454 0.000581494 0.00062265 0.000661941 0.000699387 0.00073501 0.00076883 0.00080087 0.000831153 0.000859701 0.000886543 0.000911704 0.000935216 0.000957112 0.000977429 0.000996211 0.00101351 0.00102937 0.00104386 0.00105705 0.00106903 0.00107988 0.00108969 0.00109857 0.00110661 0.00111391 0.00112056 0.00112667 0.00113229 0.0011375 0.00114236 0.00114693 0.00115123 0.00115531 0.00115921 0.00116293 0.00116651 0.00116996 0.0011733 0.00117654 0.00117969 0.00118276 0.00118576 0.00118869 0.00119156 0.00119438 0.00119715 0.00119987 0.00120255 0.00120519 0.0012078 0.00121037 0.00121292 0.00121543 0.00121792 0.00122038 0.00122282 0.00122523 0.00122763 0.00123 0.00123236 0.0012347 0.00123703 0.00123934 0.00124163 0.00124391 0.00124618 0.00124843 0.00125067 0.0012529 0.00125512 0.00125733 0.00125953 0.00126172 0.0012639 0.00126607 0.00126823 0.00127038 0.00127253 0.00127467 0.0012768 0.00127893 0.00128104 0.00128316 0.00128526 0.00128736 0.00128945 0.00129154 0.00129362 0.0012957 0.00129777 0.00129983 0.0013019 0.00130395 0.001306 0.00130805 0.00131009 0.00131213 0.00131416 0.00131619 0.00131822 0.00132024 0.00132226 0.00132428 0.00132629 0.00132829 0.0013303 0.0013323 0.0013343 0.00133629 0.00133828 0.00134027 0.00134226 0.00134424 0.00134622 0.0013482 0.00135017 0.00135215 0.00135412 0.00135608 0.00135805 0.00136001 0.00136197 0.00136393 0.00136589 0.00136785 0.0013698 0.00137175 0.0013737 0.00137565 0.0013776 0.00137955 0.00138149 0.00138344 0.00138538 0.00138732 0.00138926 0.0013912 0.00139314 0.00139508 0.00139702 0.00139895 0.00140089 0.00140283 0.00140476 0.0014067 0.00140864 0.00141057 0.00141251 0.00141445 0.00141638 0.00141832 0.00142026 0.0014222 0.00142414 0.00142608 0.00142802 0.00142996 0.0014319 0.00143384 0.00143579 0.00143774 0.00143968 0.00144163 0.00144358 0.00144554 0.00144749 0.00144945 0.00145141 0.00145337 0.00145533 -0.000666619 -0.000598626 -0.000530869 -0.000463367 -0.000396142 -0.000329214 -0.000262609 -0.000196349 -0.000130463 -6.49767E-05 7.81283E-08 6.3869E-05 0.000125587 0.000185252 0.000242885 0.000298503 0.000352128 0.000403778 0.000453473 0.000501231 0.000547073 0.000591016 0.000633082 0.000673288 0.000711656 0.000748204 0.000782955 0.000815928 0.000847147 0.000876633 0.000904413 0.000930511 0.000954958 0.000977783 0.000999023 0.00101872 0.00103691 0.00105364 0.00106899 0.001083 0.00109577 0.00110736 0.00111786 0.00112738 0.00113601 0.00114384 0.00115098 0.00115752 0.00116352 0.00116908 0.00117425 0.00117909 0.00118365 0.00118796 0.00119206 0.00119597 0.00119972 0.00120334 0.00120683 0.00121021 0.00121349 0.00121668 0.0012198 0.00122284 0.00122582 0.00122874 0.00123161 0.00123443 0.0012372 0.00123993 0.00124262 0.00124528 0.0012479 0.00125049 0.00125305 0.00125559 0.0012581 0.00126059 0.00126305 0.0012655 0.00126792 0.00127032 0.00127271 0.00127508 0.00127744 0.00127978 0.0012821 0.00128442 0.00128672 0.001289 0.00129128 0.00129354 0.0012958 0.00129804 0.00130027 0.0013025 0.00130471 0.00130692 0.00130912 0.00131131 0.00131349 0.00131566 0.00131783 0.00131999 0.00132214 0.00132429 0.00132643 0.00132857 0.0013307 0.00133282 0.00133494 0.00133705 0.00133915 0.00134126 0.00134335 0.00134544 0.00134753 0.00134961 0.00135169 0.00135377 0.00135584 0.0013579 0.00135996 0.00136202 0.00136408 0.00136613 0.00136817 0.00137022 0.00137226 0.00137429 0.00137632 0.00137835 0.00138038 0.00138241 0.00138443 0.00138645 0.00138846 0.00139047 0.00139248 0.00139449 0.0013965 0.0013985 0.0014005 0.0014025 0.0014045 0.00140649 0.00140849 0.00141048 0.00141247 0.00141445 0.00141644 0.00141842 0.00142041 0.00142239 0.00142437 0.00142635 0.00142833 0.00143031 0.00143228 0.00143426 0.00143623 0.00143821 0.00144018 0.00144216 0.00144413 0.0014461 0.00144808 0.00145005 0.00145202 0.00145399 0.00145597 0.00145794 0.00145992 0.00146189 0.00146387 0.00146584 0.00146782 0.0014698 0.00147177 0.00147375 0.00147573 0.00147772 0.0014797 0.00148169 0.00148367 0.00148566 0.00148765 0.00148964 0.00149164 0.00149363 0.00149563 -0.000673327 -0.000604762 -0.000536413 -0.0004683 -0.000400441 -0.000332859 -0.000265574 -0.000198612 -0.000131996 -6.5755E-05 8.33921E-08 6.46776E-05 0.000127209 0.000187697 0.000246161 0.000302621 0.000357095 0.000409603 0.000460164 0.000508796 0.000555518 0.000600349 0.000643309 0.000684416 0.000723689 0.000761149 0.000796816 0.000830709 0.000862851 0.000893263 0.000921969 0.000948995 0.000974366 0.000998113 0.00102027 0.00104087 0.00105995 0.00107757 0.00109377 0.00110862 0.00112218 0.00113452 0.00114575 0.00115593 0.00116517 0.00117357 0.00118122 0.00118821 0.00119463 0.00120056 0.00120606 0.0012112 0.00121602 0.00122057 0.00122489 0.001229 0.00123294 0.00123672 0.00124037 0.0012439 0.00124732 0.00125064 0.00125388 0.00125704 0.00126014 0.00126316 0.00126613 0.00126905 0.00127191 0.00127473 0.00127751 0.00128025 0.00128296 0.00128563 0.00128827 0.00129088 0.00129347 0.00129602 0.00129856 0.00130107 0.00130356 0.00130603 0.00130849 0.00131092 0.00131334 0.00131574 0.00131813 0.0013205 0.00132286 0.0013252 0.00132753 0.00132985 0.00133216 0.00133446 0.00133675 0.00133903 0.00134129 0.00134355 0.0013458 0.00134804 0.00135028 0.0013525 0.00135472 0.00135693 0.00135913 0.00136133 0.00136351 0.0013657 0.00136787 0.00137004 0.00137221 0.00137437 0.00137652 0.00137867 0.00138081 0.00138295 0.00138508 0.0013872 0.00138933 0.00139145 0.00139356 0.00139567 0.00139777 0.00139987 0.00140197 0.00140406 0.00140615 0.00140824 0.00141032 0.0014124 0.00141447 0.00141654 0.00141861 0.00142068 0.00142274 0.0014248 0.00142686 0.00142891 0.00143096 0.00143301 0.00143505 0.0014371 0.00143914 0.00144117 0.00144321 0.00144524 0.00144728 0.00144931 0.00145133 0.00145336 0.00145539 0.00145741 0.00145943 0.00146145 0.00146347 0.00146549 0.0014675 0.00146952 0.00147153 0.00147354 0.00147556 0.00147757 0.00147958 0.00148159 0.0014836 0.00148561 0.00148762 0.00148963 0.00149164 0.00149365 0.00149566 0.00149767 0.00149968 0.00150169 0.0015037 0.00150571 0.00150772 0.00150974 0.00151175 0.00151377 0.00151578 0.0015178 0.00151982 0.00152184 0.00152386 0.00152589 0.00152791 0.00152994 0.00153197 0.001534 0.00153603 -0.000679887 -0.000610763 -0.000541835 -0.000473123 -0.000404645 -0.000336421 -0.000268473 -0.000200823 -0.000133495 -6.65152E-05 8.89716E-08 6.54686E-05 0.000128795 0.000190089 0.000249367 0.000306651 0.000361958 0.000415307 0.000466717 0.000516206 0.000563793 0.000609496 0.000653334 0.000695327 0.000735491 0.000773848 0.000810417 0.000845216 0.000878268 0.000909593 0.000939214 0.000967156 0.000993442 0.0010181 0.00104117 0.00106267 0.00108264 0.00110114 0.0011182 0.00113388 0.00114825 0.00116137 0.00117333 0.0011842 0.00119408 0.00120307 0.00121126 0.00121874 0.00122559 0.00123191 0.00123777 0.00124322 0.00124832 0.00125313 0.00125768 0.00126201 0.00126614 0.0012701 0.00127392 0.0012776 0.00128117 0.00128463 0.00128799 0.00129128 0.00129448 0.00129762 0.0013007 0.00130371 0.00130668 0.00130959 0.00131246 0.00131529 0.00131808 0.00132083 0.00132355 0.00132624 0.0013289 0.00133153 0.00133414 0.00133672 0.00133928 0.00134182 0.00134434 0.00134684 0.00134932 0.00135178 0.00135423 0.00135666 0.00135908 0.00136148 0.00136387 0.00136625 0.00136861 0.00137097 0.00137331 0.00137564 0.00137796 0.00138027 0.00138258 0.00138487 0.00138715 0.00138943 0.0013917 0.00139395 0.00139621 0.00139845 0.00140069 0.00140292 0.00140514 0.00140736 0.00140957 0.00141178 0.00141398 0.00141617 0.00141836 0.00142054 0.00142272 0.00142489 0.00142706 0.00142922 0.00143138 0.00143353 0.00143568 0.00143782 0.00143996 0.0014421 0.00144423 0.00144636 0.00144848 0.0014506 0.00145272 0.00145483 0.00145694 0.00145905 0.00146115 0.00146325 0.00146535 0.00146744 0.00146953 0.00147162 0.0014737 0.00147579 0.00147787 0.00147994 0.00148202 0.00148409 0.00148616 0.00148823 0.0014903 0.00149236 0.00149443 0.00149649 0.00149855 0.0015006 0.00150266 0.00150472 0.00150677 0.00150882 0.00151087 0.00151293 0.00151497 0.00151702 0.00151907 0.00152112 0.00152317 0.00152521 0.00152726 0.0015293 0.00153135 0.0015334 0.00153544 0.00153749 0.00153953 0.00154158 0.00154363 0.00154567 0.00154772 0.00154977 0.00155182 0.00155387 0.00155592 0.00155798 0.00156003 0.00156209 0.00156414 0.0015662 0.00156826 0.00157033 0.00157239 0.00157446 0.00157652 -0.000686302 -0.00061663 -0.000547137 -0.000477839 -0.000408755 -0.000339904 -0.000271306 -0.000202984 -0.000134959 -6.72576E-05 9.4884E-08 6.62421E-05 0.000130347 0.000192428 0.000252504 0.000310594 0.000366717 0.000420891 0.000473133 0.000523464 0.000571899 0.000618459 0.000663161 0.000706023 0.000747065 0.000786304 0.00082376 0.000859452 0.000893401 0.000925626 0.000956151 0.000984996 0.00101219 0.00103775 0.00106172 0.00108411 0.00110497 0.00112434 0.00114227 0.00115879 0.00117397 0.00118788 0.00120059 0.00121217 0.00122272 0.00123232 0.00124107 0.00124906 0.00125638 0.00126312 0.00126934 0.00127513 0.00128054 0.00128562 0.00129042 0.00129497 0.00129931 0.00130346 0.00130745 0.0013113 0.00131501 0.00131862 0.00132212 0.00132553 0.00132886 0.00133211 0.00133529 0.00133841 0.00134148 0.00134449 0.00134745 0.00135037 0.00135325 0.00135608 0.00135889 0.00136165 0.00136439 0.0013671 0.00136978 0.00137243 0.00137506 0.00137767 0.00138025 0.00138282 0.00138536 0.00138789 0.0013904 0.00139289 0.00139537 0.00139784 0.00140028 0.00140272 0.00140514 0.00140755 0.00140995 0.00141233 0.00141471 0.00141707 0.00141943 0.00142177 0.00142411 0.00142643 0.00142875 0.00143106 0.00143336 0.00143566 0.00143794 0.00144022 0.00144249 0.00144476 0.00144702 0.00144927 0.00145152 0.00145376 0.00145599 0.00145822 0.00146044 0.00146266 0.00146487 0.00146708 0.00146928 0.00147147 0.00147367 0.00147585 0.00147804 0.00148022 0.00148239 0.00148456 0.00148673 0.00148889 0.00149105 0.0014932 0.00149535 0.0014975 0.00149964 0.00150178 0.00150392 0.00150606 0.00150819 0.00151031 0.00151244 0.00151456 0.00151668 0.0015188 0.00152091 0.00152303 0.00152514 0.00152724 0.00152935 0.00153145 0.00153355 0.00153565 0.00153775 0.00153985 0.00154194 0.00154403 0.00154612 0.00154821 0.0015503 0.00155239 0.00155448 0.00155656 0.00155865 0.00156073 0.00156282 0.0015649 0.00156698 0.00156906 0.00157114 0.00157323 0.00157531 0.00157739 0.00157947 0.00158155 0.00158364 0.00158572 0.0015878 0.00158989 0.00159197 0.00159406 0.00159615 0.00159823 0.00160032 0.00160241 0.00160451 0.0016066 0.0016087 0.00161079 0.00161289 0.00161499 0.0016171 -0.000692574 -0.000622367 -0.000552319 -0.000482448 -0.000412771 -0.000343307 -0.000274075 -0.000205095 -0.00013639 -6.79827E-05 1.01147E-07 6.69987E-05 0.000131864 0.000194716 0.000255573 0.000314453 0.000371375 0.000426357 0.000479417 0.000530572 0.000579841 0.000627241 0.000672792 0.000716509 0.000758412 0.00079852 0.000836849 0.000873421 0.000908253 0.000941366 0.000972781 0.00100252 0.0010306 0.00105706 0.00108192 0.0011052 0.00112695 0.00114719 0.00116597 0.00118334 0.00119934 0.00121404 0.00122751 0.00123982 0.00125105 0.00126129 0.00127063 0.00127916 0.00128697 0.00129415 0.00130077 0.00130692 0.00131265 0.00131802 0.00132308 0.00132787 0.00133243 0.00133678 0.00134096 0.00134497 0.00134885 0.0013526 0.00135625 0.00135979 0.00136324 0.00136661 0.00136991 0.00137314 0.00137631 0.00137942 0.00138248 0.00138549 0.00138845 0.00139138 0.00139426 0.00139711 0.00139993 0.00140271 0.00140547 0.00140819 0.00141089 0.00141357 0.00141623 0.00141886 0.00142147 0.00142406 0.00142663 0.00142919 0.00143173 0.00143425 0.00143676 0.00143925 0.00144173 0.0014442 0.00144665 0.00144909 0.00145152 0.00145394 0.00145635 0.00145875 0.00146113 0.00146351 0.00146588 0.00146824 0.00147059 0.00147294 0.00147527 0.0014776 0.00147992 0.00148223 0.00148454 0.00148684 0.00148913 0.00149142 0.00149369 0.00149597 0.00149824 0.0015005 0.00150276 0.00150501 0.00150725 0.00150949 0.00151173 0.00151396 0.00151619 0.00151841 0.00152063 0.00152284 0.00152505 0.00152725 0.00152945 0.00153165 0.00153384 0.00153603 0.00153821 0.00154039 0.00154257 0.00154475 0.00154692 0.00154909 0.00155125 0.00155341 0.00155557 0.00155773 0.00155988 0.00156203 0.00156418 0.00156633 0.00156847 0.00157062 0.00157275 0.00157489 0.00157703 0.00157916 0.00158129 0.00158342 0.00158555 0.00158768 0.00158981 0.00159193 0.00159405 0.00159618 0.0015983 0.00160042 0.00160254 0.00160466 0.00160678 0.0016089 0.00161101 0.00161313 0.00161525 0.00161737 0.00161948 0.0016216 0.00162372 0.00162584 0.00162796 0.00163008 0.0016322 0.00163432 0.00163644 0.00163856 0.00164069 0.00164281 0.00164494 0.00164707 0.0016492 0.00165133 0.00165347 0.0016556 0.00165774 -0.000698706 -0.000627974 -0.000557385 -0.000486954 -0.000416697 -0.000346633 -0.00027678 -0.000207158 -0.000137787 -6.86906E-05 1.07781E-07 6.77386E-05 0.000133348 0.000196954 0.000258574 0.000318228 0.000375934 0.000431708 0.000485568 0.000537533 0.00058762 0.000635846 0.000682229 0.000726787 0.000769537 0.000810498 0.000849688 0.000887124 0.000922827 0.000956814 0.000989108 0.00101973 0.0010487 0.00107604 0.00110178 0.00112594 0.00114856 0.00116967 0.00118931 0.00120752 0.00122435 0.00123985 0.00125409 0.00126714 0.00127908 0.00128997 0.00129992 0.00130902 0.00131734 0.00132499 0.00133204 0.00133856 0.00134463 0.00135031 0.00135565 0.0013607 0.00136549 0.00137005 0.00137442 0.00137862 0.00138266 0.00138657 0.00139036 0.00139404 0.00139762 0.00140112 0.00140453 0.00140787 0.00141115 0.00141436 0.00141752 0.00142063 0.00142368 0.0014267 0.00142967 0.0014326 0.0014355 0.00143836 0.00144119 0.00144399 0.00144677 0.00144952 0.00145224 0.00145494 0.00145762 0.00146028 0.00146291 0.00146553 0.00146813 0.00147072 0.00147328 0.00147584 0.00147837 0.0014809 0.00148341 0.0014859 0.00148839 0.00149086 0.00149332 0.00149578 0.00149822 0.00150065 0.00150307 0.00150548 0.00150788 0.00151027 0.00151266 0.00151503 0.0015174 0.00151976 0.00152212 0.00152446 0.0015268 0.00152914 0.00153146 0.00153378 0.0015361 0.0015384 0.00154071 0.001543 0.00154529 0.00154758 0.00154986 0.00155213 0.0015544 0.00155667 0.00155893 0.00156118 0.00156343 0.00156568 0.00156792 0.00157016 0.00157239 0.00157462 0.00157685 0.00157907 0.00158129 0.00158351 0.00158572 0.00158793 0.00159013 0.00159233 0.00159453 0.00159673 0.00159892 0.00160111 0.0016033 0.00160548 0.00160766 0.00160984 0.00161202 0.0016142 0.00161637 0.00161854 0.00162071 0.00162288 0.00162505 0.00162721 0.00162938 0.00163154 0.0016337 0.00163586 0.00163801 0.00164017 0.00164233 0.00164448 0.00164664 0.00164879 0.00165095 0.0016531 0.00165525 0.00165741 0.00165956 0.00166171 0.00166387 0.00166602 0.00166818 0.00167033 0.00167249 0.00167464 0.0016768 0.00167896 0.00168112 0.00168328 0.00168544 0.0016876 0.00168977 0.00169193 0.0016941 0.00169627 0.00169844 -0.000704701 -0.000633456 -0.000562336 -0.000491357 -0.000420534 -0.000349883 -0.000279423 -0.000209173 -0.000139152 -6.93816E-05 1.14805E-07 6.84621E-05 0.000134798 0.000199142 0.00026151 0.000321922 0.000380394 0.000436944 0.00049159 0.000544349 0.000595238 0.000644275 0.000691476 0.00073686 0.000780443 0.000822243 0.000862279 0.000900567 0.000937126 0.000971976 0.00100513 0.00103662 0.00106646 0.00109468 0.00112129 0.00114633 0.00116981 0.00119179 0.00121228 0.00123133 0.00124899 0.0012653 0.00128032 0.00129412 0.00130677 0.00131835 0.00132893 0.00133861 0.00134747 0.00135561 0.00136311 0.00137004 0.00137647 0.00138248 0.00138812 0.00139343 0.00139846 0.00140325 0.00140782 0.00141221 0.00141643 0.0014205 0.00142445 0.00142827 0.00143199 0.00143561 0.00143915 0.00144261 0.00144599 0.00144931 0.00145257 0.00145578 0.00145893 0.00146203 0.00146509 0.00146811 0.00147109 0.00147404 0.00147695 0.00147982 0.00148267 0.00148549 0.00148829 0.00149106 0.0014938 0.00149653 0.00149923 0.00150191 0.00150458 0.00150722 0.00150985 0.00151246 0.00151506 0.00151764 0.00152021 0.00152276 0.0015253 0.00152783 0.00153035 0.00153285 0.00153535 0.00153783 0.0015403 0.00154276 0.00154522 0.00154766 0.0015501 0.00155252 0.00155494 0.00155735 0.00155975 0.00156215 0.00156453 0.00156691 0.00156929 0.00157165 0.00157401 0.00157636 0.00157871 0.00158105 0.00158339 0.00158572 0.00158804 0.00159036 0.00159267 0.00159498 0.00159728 0.00159958 0.00160187 0.00160416 0.00160645 0.00160873 0.001611 0.00161327 0.00161554 0.0016178 0.00162006 0.00162232 0.00162457 0.00162682 0.00162906 0.00163131 0.00163354 0.00163578 0.00163801 0.00164024 0.00164247 0.00164469 0.00164691 0.00164913 0.00165135 0.00165356 0.00165577 0.00165798 0.00166019 0.00166239 0.0016646 0.0016668 0.001669 0.0016712 0.0016734 0.00167559 0.00167779 0.00167998 0.00168217 0.00168436 0.00168656 0.00168875 0.00169094 0.00169313 0.00169531 0.0016975 0.00169969 0.00170188 0.00170407 0.00170626 0.00170845 0.00171064 0.00171283 0.00171502 0.00171721 0.0017194 0.0017216 0.00172379 0.00172599 0.00172819 0.00173038 0.00173258 0.00173479 0.00173699 0.0017392 -0.00071056 -0.000638814 -0.000567175 -0.00049566 -0.000424282 -0.000353059 -0.000282006 -0.000211141 -0.000140485 -7.00561E-05 1.22239E-07 6.91696E-05 0.000136217 0.000201282 0.000264382 0.000325535 0.000384759 0.00044207 0.000497485 0.000551023 0.000602699 0.000652531 0.000700536 0.000746731 0.000791133 0.000833758 0.000874625 0.000913751 0.000951154 0.000986853 0.00102087 0.00105321 0.00108391 0.00111299 0.00114046 0.00116636 0.00119071 0.00121354 0.00123488 0.00125477 0.00127325 0.00129037 0.00130619 0.00132075 0.00133413 0.00134639 0.00135763 0.00136792 0.00137735 0.001386 0.00139397 0.00140132 0.00140814 0.0014145 0.00142045 0.00142605 0.00143134 0.00143636 0.00144116 0.00144574 0.00145015 0.00145439 0.00145849 0.00146247 0.00146633 0.00147009 0.00147375 0.00147733 0.00148083 0.00148426 0.00148762 0.00149093 0.00149418 0.00149738 0.00150053 0.00150363 0.0015067 0.00150973 0.00151272 0.00151567 0.0015186 0.00152149 0.00152436 0.0015272 0.00153002 0.00153281 0.00153558 0.00153833 0.00154105 0.00154376 0.00154645 0.00154913 0.00155178 0.00155442 0.00155705 0.00155966 0.00156226 0.00156484 0.00156741 0.00156997 0.00157252 0.00157505 0.00157758 0.00158009 0.0015826 0.00158509 0.00158758 0.00159005 0.00159252 0.00159498 0.00159743 0.00159987 0.00160231 0.00160473 0.00160715 0.00160956 0.00161197 0.00161437 0.00161676 0.00161915 0.00162153 0.0016239 0.00162627 0.00162863 0.00163099 0.00163334 0.00163569 0.00163803 0.00164036 0.00164269 0.00164502 0.00164734 0.00164966 0.00165197 0.00165428 0.00165658 0.00165888 0.00166118 0.00166347 0.00166576 0.00166805 0.00167033 0.00167261 0.00167488 0.00167715 0.00167942 0.00168169 0.00168395 0.00168621 0.00168846 0.00169072 0.00169297 0.00169522 0.00169747 0.00169971 0.00170196 0.0017042 0.00170643 0.00170867 0.00171091 0.00171314 0.00171537 0.00171761 0.00171984 0.00172206 0.00172429 0.00172652 0.00172875 0.00173097 0.0017332 0.00173542 0.00173764 0.00173987 0.00174209 0.00174432 0.00174654 0.00174876 0.00175099 0.00175321 0.00175544 0.00175767 0.00175989 0.00176212 0.00176435 0.00176658 0.00176881 0.00177105 0.00177328 0.00177552 0.00177776 0.00178 -0.000716287 -0.000644049 -0.000571904 -0.000499865 -0.000427945 -0.000356161 -0.000284528 -0.000213064 -0.000141786 -7.07144E-05 1.30107E-07 6.98615E-05 0.000137603 0.000203374 0.00026719 0.000329069 0.000389029 0.000447085 0.000503255 0.000557556 0.000610005 0.000660618 0.000709412 0.000756403 0.000801609 0.000845046 0.000886731 0.000926682 0.000964915 0.00100145 0.0010363 0.00106949 0.00110104 0.00113097 0.0011593 0.00118605 0.00121125 0.00123493 0.00125711 0.00127784 0.00129715 0.00131508 0.00133168 0.00134701 0.00136113 0.00137411 0.00138601 0.00139693 0.00140694 0.00141614 0.00142459 0.0014324 0.00143963 0.00144635 0.00145264 0.00145854 0.0014641 0.00146938 0.0014744 0.00147919 0.00148379 0.00148822 0.00149249 0.00149662 0.00150063 0.00150452 0.00150832 0.00151202 0.00151564 0.00151919 0.00152266 0.00152607 0.00152942 0.00153272 0.00153596 0.00153916 0.00154231 0.00154542 0.00154849 0.00155153 0.00155453 0.0015575 0.00156045 0.00156336 0.00156624 0.00156911 0.00157194 0.00157476 0.00157755 0.00158032 0.00158308 0.00158581 0.00158853 0.00159123 0.00159391 0.00159658 0.00159924 0.00160188 0.0016045 0.00160712 0.00160972 0.00161231 0.00161489 0.00161745 0.00162001 0.00162255 0.00162509 0.00162762 0.00163013 0.00163264 0.00163514 0.00163763 0.00164011 0.00164259 0.00164505 0.00164751 0.00164997 0.00165241 0.00165485 0.00165728 0.0016597 0.00166212 0.00166454 0.00166694 0.00166934 0.00167174 0.00167413 0.00167651 0.00167889 0.00168126 0.00168363 0.001686 0.00168835 0.00169071 0.00169306 0.0016954 0.00169774 0.00170008 0.00170241 0.00170474 0.00170707 0.00170939 0.00171171 0.00171402 0.00171633 0.00171864 0.00172094 0.00172324 0.00172554 0.00172784 0.00173013 0.00173242 0.00173471 0.00173699 0.00173927 0.00174155 0.00174383 0.00174611 0.00174838 0.00175066 0.00175293 0.0017552 0.00175746 0.00175973 0.00176199 0.00176426 0.00176652 0.00176878 0.00177104 0.0017733 0.00177556 0.00177782 0.00178008 0.00178234 0.0017846 0.00178686 0.00178912 0.00179138 0.00179364 0.0017959 0.00179816 0.00180042 0.00180268 0.00180495 0.00180721 0.00180948 0.00181174 0.00181401 0.00181628 0.00181856 0.00182083 -0.000721883 -0.000649166 -0.000576524 -0.000503972 -0.000431523 -0.000359191 -0.000286991 -0.000214941 -0.000143056 -7.13566E-05 1.38432E-07 7.0538E-05 0.000138959 0.00020542 0.000269936 0.000332526 0.000393206 0.000451993 0.000508903 0.000563952 0.000617159 0.000668538 0.000718106 0.00076588 0.000811876 0.00085611 0.0008986 0.000939361 0.000978412 0.00101577 0.00105145 0.00108547 0.00111786 0.00114863 0.0011778 0.00120539 0.00123144 0.00125595 0.00127898 0.00130054 0.00132066 0.00133941 0.0013568 0.00137291 0.00138777 0.00140147 0.00141406 0.00142562 0.00143624 0.001446 0.00145497 0.00146325 0.00147091 0.00147802 0.00148466 0.00149088 0.00149674 0.00150228 0.00150754 0.00151255 0.00151736 0.00152197 0.00152642 0.00153071 0.00153488 0.00153892 0.00154285 0.00154668 0.00155043 0.00155409 0.00155767 0.00156119 0.00156465 0.00156804 0.00157138 0.00157467 0.00157791 0.00158111 0.00158427 0.00158739 0.00159047 0.00159352 0.00159653 0.00159952 0.00160248 0.00160541 0.00160832 0.0016112 0.00161406 0.0016169 0.00161971 0.00162251 0.00162529 0.00162805 0.00163079 0.00163352 0.00163623 0.00163893 0.00164161 0.00164428 0.00164694 0.00164958 0.00165222 0.00165483 0.00165744 0.00166004 0.00166263 0.0016652 0.00166777 0.00167033 0.00167288 0.00167542 0.00167795 0.00168047 0.00168298 0.00168549 0.00168799 0.00169048 0.00169296 0.00169544 0.00169791 0.00170037 0.00170283 0.00170528 0.00170773 0.00171016 0.0017126 0.00171502 0.00171745 0.00171986 0.00172227 0.00172468 0.00172708 0.00172948 0.00173187 0.00173425 0.00173663 0.00173901 0.00174139 0.00174375 0.00174612 0.00174848 0.00175084 0.00175319 0.00175554 0.00175789 0.00176023 0.00176257 0.00176491 0.00176724 0.00176957 0.0017719 0.00177422 0.00177655 0.00177887 0.00178118 0.0017835 0.00178581 0.00178812 0.00179043 0.00179274 0.00179505 0.00179735 0.00179965 0.00180195 0.00180425 0.00180655 0.00180885 0.00181115 0.00181344 0.00181574 0.00181803 0.00182033 0.00182262 0.00182491 0.00182721 0.0018295 0.0018318 0.00183409 0.00183638 0.00183868 0.00184098 0.00184327 0.00184557 0.00184787 0.00185017 0.00185247 0.00185477 0.00185708 0.00185938 0.00186169 -0.000727351 -0.000654164 -0.000581038 -0.000507985 -0.000435018 -0.00036215 -0.000289397 -0.000216774 -0.000144297 -7.19832E-05 1.47237E-07 7.11995E-05 0.000140285 0.00020742 0.000272621 0.000335907 0.000397292 0.000456794 0.000514429 0.000570213 0.000624162 0.000676293 0.000726622 0.000775164 0.000821936 0.000866954 0.000910234 0.000951794 0.000991648 0.00102982 0.00106631 0.00110116 0.00113437 0.00116596 0.00119596 0.00122439 0.00125127 0.00127662 0.00130047 0.00132286 0.00134381 0.00136335 0.00138155 0.00139843 0.00141405 0.00142847 0.00144176 0.00145399 0.00146523 0.00147557 0.00148508 0.00149385 0.00150196 0.00150949 0.0015165 0.00152306 0.00152922 0.00153504 0.00154056 0.00154581 0.00155082 0.00155564 0.00156027 0.00156474 0.00156906 0.00157325 0.00157733 0.00158129 0.00158517 0.00158895 0.00159265 0.00159628 0.00159984 0.00160334 0.00160678 0.00161016 0.0016135 0.00161679 0.00162003 0.00162323 0.0016264 0.00162952 0.00163262 0.00163568 0.00163871 0.00164172 0.00164469 0.00164764 0.00165057 0.00165347 0.00165636 0.00165922 0.00166206 0.00166488 0.00166768 0.00167047 0.00167324 0.001676 0.00167874 0.00168146 0.00168417 0.00168687 0.00168956 0.00169223 0.00169489 0.00169754 0.00170018 0.00170281 0.00170543 0.00170803 0.00171063 0.00171322 0.0017158 0.00171837 0.00172093 0.00172348 0.00172603 0.00172857 0.0017311 0.00173362 0.00173614 0.00173864 0.00174115 0.00174364 0.00174613 0.00174861 0.00175109 0.00175356 0.00175602 0.00175848 0.00176094 0.00176338 0.00176583 0.00176826 0.0017707 0.00177312 0.00177555 0.00177797 0.00178038 0.00178279 0.00178519 0.00178759 0.00178999 0.00179238 0.00179477 0.00179716 0.00179954 0.00180192 0.0018043 0.00180667 0.00180904 0.0018114 0.00181376 0.00181613 0.00181848 0.00182084 0.00182319 0.00182554 0.00182789 0.00183023 0.00183258 0.00183492 0.00183726 0.0018396 0.00184194 0.00184427 0.00184661 0.00184894 0.00185127 0.0018536 0.00185593 0.00185826 0.00186059 0.00186292 0.00186525 0.00186758 0.00186991 0.00187223 0.00187456 0.00187689 0.00187922 0.00188155 0.00188388 0.00188621 0.00188855 0.00189088 0.00189321 0.00189555 0.00189789 0.00190023 0.00190257 -0.000732693 -0.000659048 -0.000585448 -0.000511905 -0.000438431 -0.000365041 -0.000291746 -0.000218563 -0.000145507 -7.25943E-05 1.56549E-07 7.18463E-05 0.00014158 0.000209375 0.000275247 0.000339213 0.000401289 0.000461492 0.000519837 0.000576341 0.000631019 0.000683887 0.000734962 0.000784258 0.000831792 0.000877581 0.000921638 0.000963982 0.00100463 0.00104359 0.00108089 0.00111655 0.00115057 0.00118298 0.0012138 0.00124305 0.00127076 0.00129693 0.00132161 0.00134481 0.00136657 0.00138692 0.00140591 0.00142357 0.00143995 0.00145511 0.00146911 0.00148201 0.0014939 0.00150483 0.00151491 0.00152419 0.00153278 0.00154074 0.00154814 0.00155506 0.00156154 0.00156766 0.00157344 0.00157894 0.00158418 0.0015892 0.00159403 0.00159868 0.00160317 0.00160752 0.00161174 0.00161585 0.00161985 0.00162376 0.00162759 0.00163133 0.001635 0.0016386 0.00164215 0.00164563 0.00164906 0.00165244 0.00165577 0.00165906 0.00166231 0.00166551 0.00166869 0.00167183 0.00167493 0.00167801 0.00168106 0.00168408 0.00168707 0.00169005 0.00169299 0.00169592 0.00169882 0.00170171 0.00170458 0.00170742 0.00171025 0.00171307 0.00171586 0.00171865 0.00172141 0.00172417 0.00172691 0.00172963 0.00173235 0.00173505 0.00173774 0.00174042 0.00174309 0.00174575 0.00174839 0.00175103 0.00175366 0.00175628 0.00175889 0.00176149 0.00176408 0.00176667 0.00176924 0.00177181 0.00177437 0.00177693 0.00177947 0.00178201 0.00178455 0.00178707 0.00178959 0.00179211 0.00179461 0.00179712 0.00179961 0.0018021 0.00180459 0.00180707 0.00180954 0.00181201 0.00181447 0.00181693 0.00181939 0.00182184 0.00182428 0.00182672 0.00182916 0.00183159 0.00183402 0.00183645 0.00183887 0.00184128 0.0018437 0.00184611 0.00184852 0.00185092 0.00185332 0.00185572 0.00185811 0.00186051 0.0018629 0.00186528 0.00186767 0.00187005 0.00187243 0.00187481 0.00187718 0.00187956 0.00188193 0.0018843 0.00188667 0.00188904 0.00189141 0.00189378 0.00189614 0.00189851 0.00190087 0.00190324 0.0019056 0.00190796 0.00191032 0.00191269 0.00191505 0.00191741 0.00191978 0.00192214 0.0019245 0.00192687 0.00192924 0.0019316 0.00193397 0.00193634 0.00193871 0.00194108 0.00194346 -0.000737911 -0.000663818 -0.000589755 -0.000515733 -0.000441765 -0.000367863 -0.00029404 -0.00022031 -0.000146688 -7.31902E-05 1.66394E-07 7.24788E-05 0.000142846 0.000211286 0.000277814 0.000342446 0.000405198 0.000466087 0.000525128 0.000582337 0.00063773 0.000691322 0.000743129 0.000793166 0.000841449 0.000887994 0.000932816 0.000975931 0.00101735 0.0010571 0.00109519 0.00113164 0.00116647 0.00119969 0.00123132 0.00126138 0.0012899 0.00131689 0.00134238 0.00136639 0.00138896 0.00141012 0.00142989 0.00144833 0.00146547 0.00148138 0.00149609 0.00150969 0.00152222 0.00153378 0.00154443 0.00155426 0.00156333 0.00157175 0.00157956 0.00158685 0.00159368 0.00160011 0.00160618 0.00161193 0.00161742 0.00162266 0.00162768 0.00163252 0.00163719 0.0016417 0.00164608 0.00165033 0.00165448 0.00165852 0.00166247 0.00166633 0.00167011 0.00167383 0.00167747 0.00168106 0.00168458 0.00168806 0.00169148 0.00169485 0.00169819 0.00170148 0.00170473 0.00170795 0.00171114 0.00171429 0.00171741 0.0017205 0.00172357 0.00172661 0.00172962 0.00173261 0.00173558 0.00173853 0.00174146 0.00174437 0.00174726 0.00175013 0.00175299 0.00175583 0.00175865 0.00176146 0.00176425 0.00176704 0.0017698 0.00177256 0.0017753 0.00177803 0.00178075 0.00178346 0.00178616 0.00178885 0.00179152 0.00179419 0.00179685 0.0017995 0.00180214 0.00180477 0.00180739 0.00181001 0.00181262 0.00181522 0.00181781 0.00182039 0.00182297 0.00182554 0.0018281 0.00183066 0.00183321 0.00183576 0.0018383 0.00184083 0.00184336 0.00184588 0.00184839 0.0018509 0.00185341 0.00185591 0.0018584 0.00186089 0.00186338 0.00186586 0.00186834 0.00187081 0.00187328 0.00187574 0.0018782 0.00188066 0.00188311 0.00188556 0.001888 0.00189044 0.00189288 0.00189532 0.00189775 0.00190018 0.00190261 0.00190503 0.00190745 0.00190987 0.00191229 0.0019147 0.00191712 0.00191953 0.00192194 0.00192434 0.00192675 0.00192915 0.00193156 0.00193396 0.00193636 0.00193876 0.00194116 0.00194356 0.00194595 0.00194835 0.00195075 0.00195315 0.00195554 0.00195794 0.00196034 0.00196273 0.00196513 0.00196753 0.00196993 0.00197233 0.00197473 0.00197714 0.00197954 0.00198195 0.00198435 -0.000743009 -0.000668477 -0.000593961 -0.000519471 -0.00044502 -0.000370618 -0.000296279 -0.000222015 -0.000147841 -7.37713E-05 1.768E-07 7.30972E-05 0.000144084 0.000213154 0.000280323 0.000345607 0.000409021 0.000470582 0.000530305 0.000588206 0.000644299 0.000698601 0.000751126 0.000801891 0.000850909 0.000898197 0.00094377 0.000987643 0.00102983 0.00107035 0.00110922 0.00114646 0.00118207 0.00121608 0.00124851 0.00127938 0.0013087 0.00133649 0.00136279 0.00138761 0.00141098 0.00143293 0.00145349 0.00147271 0.00149062 0.00150726 0.00152271 0.001537 0.0015502 0.00156239 0.00157364 0.00158402 0.00159361 0.0016025 0.00161075 0.00161844 0.00162563 0.00163238 0.00163875 0.00164478 0.00165051 0.00165599 0.00166122 0.00166626 0.00167111 0.00167579 0.00168033 0.00168474 0.00168903 0.0016932 0.00169728 0.00170127 0.00170517 0.00170899 0.00171275 0.00171643 0.00172006 0.00172363 0.00172715 0.00173061 0.00173404 0.00173741 0.00174075 0.00174405 0.00174731 0.00175054 0.00175373 0.0017569 0.00176003 0.00176314 0.00176623 0.00176928 0.00177232 0.00177533 0.00177832 0.00178129 0.00178425 0.00178718 0.00179009 0.00179299 0.00179587 0.00179874 0.00180159 0.00180443 0.00180725 0.00181006 0.00181285 0.00181564 0.00181841 0.00182117 0.00182392 0.00182665 0.00182938 0.0018321 0.00183481 0.0018375 0.00184019 0.00184287 0.00184554 0.0018482 0.00185086 0.0018535 0.00185614 0.00185877 0.00186139 0.00186401 0.00186661 0.00186921 0.00187181 0.0018744 0.00187698 0.00187955 0.00188212 0.00188469 0.00188724 0.0018898 0.00189234 0.00189488 0.00189742 0.00189995 0.00190248 0.001905 0.00190751 0.00191003 0.00191253 0.00191504 0.00191753 0.00192003 0.00192252 0.00192501 0.00192749 0.00192997 0.00193245 0.00193492 0.00193739 0.00193986 0.00194232 0.00194478 0.00194724 0.0019497 0.00195215 0.0019546 0.00195705 0.0019595 0.00196194 0.00196438 0.00196683 0.00196926 0.0019717 0.00197414 0.00197658 0.00197901 0.00198144 0.00198388 0.00198631 0.00198874 0.00199117 0.0019936 0.00199603 0.00199847 0.0020009 0.00200333 0.00200576 0.00200819 0.00201063 0.00201306 0.00201549 0.00201793 0.00202037 0.00202281 0.00202525 -0.000747987 -0.000673027 -0.000598068 -0.000523121 -0.000448198 -0.000373308 -0.000298464 -0.000223679 -0.000148965 -7.43376E-05 1.87798E-07 7.3702E-05 0.000145294 0.00021498 0.000282776 0.000348697 0.00041276 0.000474979 0.00053537 0.000593948 0.000650729 0.000705727 0.000758957 0.000810435 0.000860175 0.000908193 0.000954504 0.000999123 0.00104206 0.00108335 0.00112298 0.00116098 0.00119738 0.00123217 0.00126539 0.00129704 0.00132716 0.00135575 0.00138284 0.00140846 0.00143262 0.00145536 0.00147671 0.0014967 0.00151537 0.00153277 0.00154894 0.00156394 0.00157782 0.00159066 0.00160252 0.00161347 0.0016236 0.00163298 0.00164169 0.00164979 0.00165736 0.00166446 0.00167115 0.00167746 0.00168346 0.00168917 0.00169464 0.00169988 0.00170492 0.00170978 0.00171449 0.00171906 0.00172349 0.00172781 0.00173202 0.00173613 0.00174016 0.0017441 0.00174796 0.00175176 0.00175549 0.00175916 0.00176277 0.00176633 0.00176984 0.0017733 0.00177672 0.0017801 0.00178345 0.00178675 0.00179002 0.00179326 0.00179647 0.00179965 0.0018028 0.00180593 0.00180903 0.00181211 0.00181517 0.0018182 0.00182121 0.00182421 0.00182718 0.00183014 0.00183308 0.001836 0.00183891 0.0018418 0.00184468 0.00184754 0.00185039 0.00185323 0.00185605 0.00185886 0.00186166 0.00186445 0.00186723 0.00186999 0.00187275 0.0018755 0.00187823 0.00188096 0.00188368 0.00188639 0.00188909 0.00189178 0.00189446 0.00189713 0.0018998 0.00190246 0.00190511 0.00190776 0.0019104 0.00191303 0.00191565 0.00191827 0.00192088 0.00192349 0.00192609 0.00192868 0.00193127 0.00193385 0.00193643 0.001939 0.00194157 0.00194413 0.00194668 0.00194923 0.00195178 0.00195432 0.00195686 0.0019594 0.00196193 0.00196445 0.00196697 0.00196949 0.001972 0.00197452 0.00197702 0.00197953 0.00198203 0.00198453 0.00198702 0.00198951 0.001992 0.00199449 0.00199698 0.00199946 0.00200194 0.00200442 0.00200689 0.00200937 0.00201184 0.00201431 0.00201679 0.00201925 0.00202172 0.00202419 0.00202666 0.00202912 0.00203159 0.00203405 0.00203652 0.00203898 0.00204145 0.00204391 0.00204638 0.00204884 0.00205131 0.00205378 0.00205625 0.00205871 0.00206118 0.00206366 0.00206613 -0.000752849 -0.000677469 -0.000602078 -0.000526685 -0.0004513 -0.000375933 -0.000300597 -0.000225302 -0.000150062 -7.48896E-05 1.99418E-07 7.42933E-05 0.000146476 0.000216765 0.000285174 0.000351719 0.000416416 0.000479279 0.000540325 0.000599567 0.000657021 0.000712702 0.000766624 0.000818802 0.000869251 0.000917986 0.000965022 0.00101037 0.00105406 0.00109608 0.00113647 0.00117524 0.00121239 0.00124796 0.00128195 0.00131439 0.00134528 0.00137466 0.00140254 0.00142894 0.00145389 0.00147742 0.00149955 0.00152031 0.00153975 0.00155789 0.00157479 0.0015905 0.00160507 0.00161857 0.00163105 0.0016426 0.00165328 0.00166318 0.00167236 0.0016809 0.00168887 0.00169633 0.00170335 0.00170997 0.00171624 0.00172221 0.00172791 0.00173336 0.00173861 0.00174366 0.00174854 0.00175327 0.00175786 0.00176233 0.00176667 0.00177092 0.00177507 0.00177913 0.00178311 0.00178702 0.00179085 0.00179462 0.00179833 0.00180199 0.00180559 0.00180914 0.00181265 0.00181612 0.00181954 0.00182293 0.00182628 0.00182959 0.00183287 0.00183613 0.00183935 0.00184254 0.00184571 0.00184886 0.00185198 0.00185508 0.00185815 0.00186121 0.00186424 0.00186726 0.00187026 0.00187324 0.0018762 0.00187915 0.00188209 0.001885 0.00188791 0.0018908 0.00189367 0.00189654 0.00189939 0.00190223 0.00190506 0.00190787 0.00191068 0.00191347 0.00191626 0.00191903 0.0019218 0.00192455 0.0019273 0.00193004 0.00193276 0.00193549 0.0019382 0.0019409 0.0019436 0.00194629 0.00194897 0.00195165 0.00195431 0.00195697 0.00195963 0.00196228 0.00196492 0.00196755 0.00197018 0.00197281 0.00197542 0.00197804 0.00198064 0.00198324 0.00198584 0.00198843 0.00199102 0.0019936 0.00199618 0.00199875 0.00200132 0.00200388 0.00200644 0.002009 0.00201155 0.0020141 0.00201664 0.00201918 0.00202172 0.00202426 0.00202679 0.00202932 0.00203184 0.00203437 0.00203689 0.00203941 0.00204192 0.00204444 0.00204695 0.00204946 0.00205197 0.00205448 0.00205698 0.00205949 0.00206199 0.00206449 0.00206699 0.00206949 0.00207199 0.00207449 0.00207699 0.00207949 0.00208199 0.00208448 0.00208698 0.00208948 0.00209198 0.00209448 0.00209698 0.00209948 0.00210199 0.00210449 0.002107 -0.000757595 -0.000681807 -0.000605993 -0.000530164 -0.000454328 -0.000378496 -0.000302678 -0.000226886 -0.000151131 -7.54273E-05 2.11692E-07 7.48715E-05 0.000147632 0.000218509 0.000287517 0.000354673 0.00041999 0.000483485 0.000545171 0.000605064 0.000663178 0.000719529 0.000774129 0.000826995 0.00087814 0.000927579 0.000975327 0.0010214 0.00106581 0.00110857 0.0011497 0.00118921 0.00122712 0.00126345 0.00129821 0.00133141 0.00136308 0.00139323 0.00142189 0.00144907 0.0014748 0.0014991 0.00152201 0.00154354 0.00156373 0.00158263 0.00160026 0.00161669 0.00163195 0.00164612 0.00165924 0.00167139 0.00168265 0.00169307 0.00170275 0.00171174 0.00172013 0.00172797 0.00173534 0.00174228 0.00174885 0.00175508 0.00176102 0.00176671 0.00177216 0.00177741 0.00178248 0.00178738 0.00179213 0.00179674 0.00180124 0.00180562 0.0018099 0.00181408 0.00181818 0.0018222 0.00182615 0.00183002 0.00183383 0.00183759 0.00184128 0.00184493 0.00184852 0.00185207 0.00185558 0.00185905 0.00186248 0.00186587 0.00186923 0.00187255 0.00187585 0.00187911 0.00188235 0.00188556 0.00188875 0.00189191 0.00189505 0.00189817 0.00190127 0.00190435 0.00190741 0.00191045 0.00191347 0.00191647 0.00191946 0.00192244 0.00192539 0.00192834 0.00193127 0.00193418 0.00193709 0.00193998 0.00194286 0.00194572 0.00194858 0.00195142 0.00195426 0.00195708 0.00195989 0.00196269 0.00196549 0.00196827 0.00197105 0.00197381 0.00197657 0.00197932 0.00198206 0.0019848 0.00198752 0.00199024 0.00199295 0.00199566 0.00199835 0.00200104 0.00200373 0.0020064 0.00200907 0.00201174 0.0020144 0.00201705 0.0020197 0.00202234 0.00202498 0.00202761 0.00203023 0.00203286 0.00203547 0.00203808 0.00204069 0.00204329 0.00204589 0.00204848 0.00205108 0.00205366 0.00205624 0.00205882 0.0020614 0.00206397 0.00206654 0.0020691 0.00207167 0.00207423 0.00207678 0.00207934 0.00208189 0.00208444 0.00208699 0.00208953 0.00209208 0.00209462 0.00209716 0.0020997 0.00210223 0.00210477 0.00210731 0.00210984 0.00211237 0.00211491 0.00211744 0.00211997 0.0021225 0.00212504 0.00212757 0.0021301 0.00213263 0.00213516 0.0021377 0.00214023 0.00214277 0.0021453 0.00214784 -0.000762229 -0.000686041 -0.000609814 -0.000533559 -0.000457283 -0.000380996 -0.000304708 -0.00022843 -0.000152174 -7.59512E-05 2.24656E-07 7.54369E-05 0.000148761 0.000220213 0.000289808 0.00035756 0.000423485 0.000487597 0.000549911 0.000610442 0.000669203 0.00072621 0.000781476 0.000835016 0.000886845 0.000936975 0.000985423 0.0010322 0.00107733 0.00112081 0.00116267 0.00120292 0.00124157 0.00127864 0.00131415 0.00134812 0.00138055 0.00141147 0.00144089 0.00146885 0.00149535 0.00152042 0.00154409 0.00156638 0.00158733 0.00160697 0.00162534 0.00164249 0.00165845 0.00167329 0.00168707 0.00169984 0.00171168 0.00172265 0.00173284 0.00174231 0.00175113 0.00175938 0.00176711 0.00177438 0.00178126 0.00178777 0.00179398 0.0017999 0.00180557 0.00181103 0.00181628 0.00182136 0.00182628 0.00183105 0.0018357 0.00184022 0.00184463 0.00184895 0.00185317 0.0018573 0.00186136 0.00186534 0.00186926 0.00187311 0.00187691 0.00188065 0.00188433 0.00188797 0.00189156 0.00189511 0.00189862 0.00190209 0.00190553 0.00190893 0.0019123 0.00191564 0.00191895 0.00192223 0.00192548 0.00192871 0.00193191 0.0019351 0.00193826 0.00194139 0.00194451 0.00194761 0.00195069 0.00195376 0.0019568 0.00195983 0.00196284 0.00196584 0.00196883 0.0019718 0.00197475 0.00197769 0.00198062 0.00198354 0.00198645 0.00198934 0.00199222 0.0019951 0.00199796 0.00200081 0.00200365 0.00200648 0.0020093 0.00201211 0.00201492 0.00201771 0.0020205 0.00202328 0.00202605 0.00202881 0.00203156 0.00203431 0.00203705 0.00203978 0.00204251 0.00204523 0.00204794 0.00205065 0.00205335 0.00205604 0.00205873 0.00206141 0.00206409 0.00206676 0.00206943 0.00207209 0.00207474 0.00207739 0.00208004 0.00208268 0.00208532 0.00208795 0.00209058 0.0020932 0.00209582 0.00209844 0.00210105 0.00210366 0.00210626 0.00210886 0.00211146 0.00211406 0.00211665 0.00211924 0.00212183 0.00212442 0.002127 0.00212958 0.00213216 0.00213473 0.00213731 0.00213988 0.00214245 0.00214503 0.00214759 0.00215016 0.00215273 0.0021553 0.00215786 0.00216043 0.00216299 0.00216556 0.00216812 0.00217069 0.00217325 0.00217582 0.00217839 0.00218095 0.00218352 0.00218609 0.00218866 -0.000766753 -0.000690174 -0.000613544 -0.000536872 -0.000460166 -0.000383435 -0.000306689 -0.000229937 -0.000153191 -7.64613E-05 2.38345E-07 7.59898E-05 0.000149865 0.000221879 0.000292046 0.000360382 0.000426902 0.000491619 0.000554547 0.000615703 0.000675098 0.000732748 0.000788667 0.000842869 0.000895368 0.000946178 0.000995313 0.00104279 0.00108861 0.00113281 0.00117538 0.00121636 0.00125574 0.00129355 0.0013298 0.00136451 0.0013977 0.00142937 0.00145956 0.00148827 0.00151553 0.00154137 0.00156579 0.00158885 0.00161055 0.00163093 0.00165004 0.0016679 0.00168457 0.0017001 0.00171453 0.00172793 0.00174037 0.00175191 0.00176262 0.00177258 0.00178186 0.00179053 0.00179864 0.00180627 0.00181346 0.00182028 0.00182675 0.00183292 0.00183883 0.00184449 0.00184995 0.00185521 0.00186031 0.00186524 0.00187004 0.00187471 0.00187926 0.00188371 0.00188806 0.00189232 0.00189649 0.00190058 0.00190461 0.00190856 0.00191246 0.00191629 0.00192007 0.0019238 0.00192748 0.00193112 0.00193471 0.00193826 0.00194177 0.00194525 0.00194869 0.0019521 0.00195548 0.00195883 0.00196216 0.00196545 0.00196872 0.00197197 0.00197519 0.00197839 0.00198157 0.00198473 0.00198787 0.00199099 0.0019941 0.00199718 0.00200025 0.00200331 0.00200634 0.00200937 0.00201238 0.00201537 0.00201835 0.00202132 0.00202428 0.00202722 0.00203015 0.00203308 0.00203598 0.00203888 0.00204177 0.00204465 0.00204752 0.00205038 0.00205323 0.00205607 0.0020589 0.00206172 0.00206454 0.00206734 0.00207014 0.00207293 0.00207572 0.00207849 0.00208126 0.00208402 0.00208678 0.00208952 0.00209226 0.002095 0.00209773 0.00210045 0.00210317 0.00210588 0.00210858 0.00211128 0.00211398 0.00211667 0.00211935 0.00212203 0.00212471 0.00212738 0.00213004 0.00213271 0.00213536 0.00213802 0.00214067 0.00214331 0.00214595 0.00214859 0.00215123 0.00215386 0.00215649 0.00215912 0.00216174 0.00216436 0.00216698 0.00216959 0.00217221 0.00217482 0.00217743 0.00218004 0.00218264 0.00218525 0.00218785 0.00219045 0.00219306 0.00219566 0.00219826 0.00220085 0.00220345 0.00220605 0.00220865 0.00221125 0.00221385 0.00221644 0.00221904 0.00222164 0.00222424 0.00222684 0.00222945 -0.000771167 -0.000694207 -0.000617183 -0.000540105 -0.000462979 -0.000385815 -0.00030862 -0.000231406 -0.000154182 -7.69578E-05 2.52796E-07 7.65305E-05 0.000150943 0.000223506 0.000294234 0.000363141 0.000430242 0.00049555 0.000559081 0.000620848 0.000680865 0.000739147 0.000795706 0.000850557 0.000903714 0.00095519 0.001005 0.00105316 0.00109967 0.00114457 0.00118785 0.00122953 0.00126964 0.00130817 0.00134515 0.0013806 0.00141452 0.00144695 0.00147788 0.00150734 0.00153536 0.00156195 0.00158713 0.00161093 0.00163338 0.00165451 0.00167434 0.00169293 0.0017103 0.00172651 0.00174161 0.00175566 0.00176871 0.00178083 0.00179209 0.00180256 0.00181231 0.00182141 0.00182992 0.00183792 0.00184545 0.00185258 0.00185933 0.00186577 0.00187191 0.0018778 0.00188347 0.00188893 0.0018942 0.00189931 0.00190427 0.00190909 0.00191379 0.00191837 0.00192285 0.00192723 0.00193152 0.00193573 0.00193986 0.00194393 0.00194792 0.00195186 0.00195573 0.00195955 0.00196332 0.00196704 0.00197072 0.00197435 0.00197795 0.0019815 0.00198502 0.00198851 0.00199196 0.00199538 0.00199877 0.00200214 0.00200548 0.00200879 0.00201207 0.00201534 0.00201858 0.0020218 0.002025 0.00202818 0.00203134 0.00203449 0.00203761 0.00204072 0.00204382 0.00204689 0.00204996 0.002053 0.00205604 0.00205906 0.00206207 0.00206506 0.00206804 0.00207101 0.00207397 0.00207692 0.00207985 0.00208278 0.0020857 0.0020886 0.0020915 0.00209438 0.00209726 0.00210013 0.00210299 0.00210584 0.00210868 0.00211151 0.00211434 0.00211716 0.00211997 0.00212277 0.00212557 0.00212836 0.00213114 0.00213392 0.00213669 0.00213945 0.00214221 0.00214496 0.00214771 0.00215045 0.00215318 0.00215591 0.00215863 0.00216135 0.00216406 0.00216677 0.00216948 0.00217218 0.00217487 0.00217756 0.00218025 0.00218293 0.00218561 0.00218829 0.00219096 0.00219363 0.00219629 0.00219895 0.00220161 0.00220427 0.00220692 0.00220957 0.00221222 0.00221487 0.00221751 0.00222015 0.0022228 0.00222543 0.00222807 0.00223071 0.00223334 0.00223598 0.00223861 0.00224124 0.00224387 0.00224651 0.00224914 0.00225177 0.0022544 0.00225703 0.00225966 0.00226229 0.00226493 0.00226756 0.00227019 -0.000775475 -0.000698142 -0.000620734 -0.000543259 -0.000465723 -0.000388136 -0.000310504 -0.000232838 -0.000155147 -7.74411E-05 2.6805E-07 7.70593E-05 0.000151997 0.000225096 0.000296371 0.000365837 0.000433506 0.000499394 0.000563515 0.000625881 0.000686507 0.000745407 0.000802594 0.000858082 0.000911885 0.000964016 0.00101449 0.00106332 0.00111051 0.00115609 0.00120007 0.00124245 0.00128326 0.00132251 0.00136021 0.00139639 0.00143104 0.0014642 0.00149587 0.00152607 0.00155483 0.00158217 0.0016081 0.00163264 0.00165583 0.0016777 0.00169826 0.00171757 0.00173565 0.00175255 0.00176832 0.00178301 0.00179668 0.00180939 0.00182121 0.00183221 0.00184245 0.00185201 0.00186094 0.00186932 0.00187721 0.00188466 0.00189171 0.00189842 0.00190482 0.00191095 0.00191683 0.00192249 0.00192795 0.00193324 0.00193836 0.00194334 0.00194819 0.00195291 0.00195753 0.00196204 0.00196645 0.00197078 0.00197503 0.0019792 0.0019833 0.00198733 0.00199131 0.00199522 0.00199908 0.00200289 0.00200666 0.00201038 0.00201405 0.00201769 0.00202128 0.00202484 0.00202837 0.00203186 0.00203533 0.00203876 0.00204217 0.00204554 0.0020489 0.00205223 0.00205553 0.00205881 0.00206207 0.00206531 0.00206854 0.00207174 0.00207492 0.00207809 0.00208123 0.00208437 0.00208748 0.00209058 0.00209367 0.00209674 0.0020998 0.00210285 0.00210588 0.0021089 0.00211191 0.0021149 0.00211789 0.00212086 0.00212383 0.00212678 0.00212972 0.00213265 0.00213557 0.00213849 0.00214139 0.00214429 0.00214717 0.00215005 0.00215292 0.00215578 0.00215864 0.00216148 0.00216432 0.00216715 0.00216998 0.0021728 0.00217561 0.00217841 0.00218121 0.002184 0.00218678 0.00218956 0.00219234 0.00219511 0.00219787 0.00220063 0.00220338 0.00220612 0.00220887 0.0022116 0.00221434 0.00221706 0.00221979 0.00222251 0.00222522 0.00222794 0.00223064 0.00223335 0.00223605 0.00223875 0.00224144 0.00224413 0.00224682 0.00224951 0.00225219 0.00225487 0.00225755 0.00226023 0.0022629 0.00226558 0.00226825 0.00227092 0.00227359 0.00227626 0.00227892 0.00228159 0.00228425 0.00228692 0.00228958 0.00229224 0.00229491 0.00229757 0.00230024 0.0023029 0.00230556 0.00230823 0.0023109 -0.000779678 -0.000701982 -0.000624198 -0.000546335 -0.000468399 -0.000390399 -0.000312341 -0.000234234 -0.000156088 -7.79113E-05 2.84147E-07 7.75765E-05 0.000153027 0.00022665 0.00029846 0.000368471 0.000436697 0.000503152 0.000567849 0.000630803 0.000692026 0.000751532 0.000809335 0.000865448 0.000919884 0.000972657 0.00102378 0.00107327 0.00112113 0.00116738 0.00121204 0.00125512 0.00129662 0.00133657 0.00137499 0.00141187 0.00144725 0.00148113 0.00151353 0.00154447 0.00157396 0.00160203 0.0016287 0.00165398 0.00167791 0.0017005 0.00172179 0.00174181 0.0017606 0.0017782 0.00179464 0.00180999 0.00182429 0.00183761 0.00185 0.00186154 0.00187228 0.00188231 0.00189168 0.00190047 0.00190872 0.00191651 0.00192388 0.00193088 0.00193754 0.00194391 0.00195002 0.00195589 0.00196155 0.00196702 0.00197232 0.00197746 0.00198246 0.00198734 0.00199209 0.00199673 0.00200127 0.00200572 0.00201009 0.00201437 0.00201858 0.00202272 0.00202679 0.0020308 0.00203476 0.00203866 0.00204251 0.00204631 0.00205007 0.00205379 0.00205747 0.0020611 0.00206471 0.00206827 0.00207181 0.00207531 0.00207879 0.00208223 0.00208565 0.00208905 0.00209241 0.00209576 0.00209908 0.00210238 0.00210566 0.00210892 0.00211217 0.00211539 0.00211859 0.00212178 0.00212495 0.00212811 0.00213125 0.00213437 0.00213748 0.00214058 0.00214366 0.00214673 0.00214979 0.00215284 0.00215587 0.00215889 0.0021619 0.0021649 0.00216789 0.00217087 0.00217384 0.0021768 0.00217975 0.00218269 0.00218562 0.00218854 0.00219145 0.00219436 0.00219725 0.00220014 0.00220302 0.0022059 0.00220876 0.00221162 0.00221447 0.00221732 0.00222016 0.00222299 0.00222582 0.00222863 0.00223145 0.00223425 0.00223706 0.00223985 0.00224264 0.00224543 0.00224821 0.00225098 0.00225375 0.00225652 0.00225928 0.00226204 0.00226479 0.00226754 0.00227028 0.00227302 0.00227576 0.00227849 0.00228122 0.00228395 0.00228668 0.0022894 0.00229212 0.00229483 0.00229755 0.00230026 0.00230297 0.00230567 0.00230838 0.00231108 0.00231379 0.00231649 0.00231919 0.00232188 0.00232458 0.00232728 0.00232998 0.00233267 0.00233537 0.00233807 0.00234076 0.00234346 0.00234615 0.00234885 0.00235155 -0.000783779 -0.000705727 -0.000627577 -0.000549336 -0.000471009 -0.000392605 -0.000314131 -0.000235595 -0.000157004 -7.83686E-05 3.01131E-07 7.80824E-05 0.000154033 0.000228168 0.000300501 0.000371046 0.000439816 0.000506826 0.000572088 0.000635616 0.000697424 0.000757525 0.000815931 0.000872657 0.000927715 0.000981119 0.00103288 0.00108301 0.00113153 0.00117845 0.00122378 0.00126753 0.00130972 0.00135036 0.00138947 0.00142706 0.00146315 0.00149774 0.00153086 0.00156252 0.00159274 0.00162154 0.00164894 0.00167495 0.0016996 0.00172292 0.00174494 0.00176567 0.00178517 0.00180346 0.00182058 0.00183659 0.00185153 0.00186546 0.00187843 0.00189052 0.00190179 0.00191231 0.00192213 0.00193134 0.00193998 0.00194812 0.00195582 0.00196312 0.00197006 0.00197668 0.00198303 0.00198912 0.00199499 0.00200065 0.00200613 0.00201144 0.0020166 0.00202163 0.00202652 0.0020313 0.00203598 0.00204055 0.00204503 0.00204943 0.00205375 0.002058 0.00206217 0.00206629 0.00207034 0.00207433 0.00207827 0.00208217 0.00208601 0.00208981 0.00209357 0.00209728 0.00210096 0.0021046 0.00210821 0.00211179 0.00211533 0.00211885 0.00212234 0.00212579 0.00212923 0.00213264 0.00213602 0.00213939 0.00214273 0.00214605 0.00214935 0.00215263 0.00215589 0.00215913 0.00216236 0.00216557 0.00216876 0.00217194 0.0021751 0.00217825 0.00218139 0.00218451 0.00218762 0.00219071 0.00219379 0.00219686 0.00219992 0.00220297 0.002206 0.00220903 0.00221204 0.00221505 0.00221804 0.00222103 0.002224 0.00222697 0.00222993 0.00223288 0.00223582 0.00223875 0.00224167 0.00224459 0.0022475 0.0022504 0.00225329 0.00225618 0.00225905 0.00226193 0.00226479 0.00226765 0.0022705 0.00227335 0.00227619 0.00227903 0.00228186 0.00228468 0.0022875 0.00229031 0.00229312 0.00229592 0.00229872 0.00230151 0.0023043 0.00230709 0.00230987 0.00231265 0.00231542 0.00231819 0.00232096 0.00232372 0.00232648 0.00232923 0.00233199 0.00233474 0.00233749 0.00234023 0.00234298 0.00234572 0.00234846 0.00235119 0.00235393 0.00235666 0.0023594 0.00236213 0.00236486 0.00236759 0.00237032 0.00237305 0.00237578 0.00237851 0.00238123 0.00238396 0.00238669 0.00238942 0.00239215 -0.000787778 -0.000709379 -0.000630872 -0.000552261 -0.000473554 -0.000394757 -0.000315876 -0.00023692 -0.000157896 -7.88133E-05 3.19048E-07 7.85773E-05 0.000155017 0.000229651 0.000302495 0.000373561 0.000442864 0.000510416 0.000576231 0.000640323 0.000702704 0.000763387 0.000822385 0.000879712 0.00093538 0.000989402 0.00104179 0.00109256 0.00114172 0.00118929 0.00123528 0.0012797 0.00132256 0.00136389 0.00140368 0.00144196 0.00147875 0.00151404 0.00154787 0.00158025 0.00161118 0.0016407 0.00166882 0.00169555 0.00172093 0.00174497 0.0017677 0.00178915 0.00180934 0.00182832 0.00184613 0.0018628 0.00187838 0.00189293 0.00190651 0.00191917 0.00193097 0.00194199 0.00195228 0.00196192 0.00197097 0.00197948 0.00198752 0.00199513 0.00200236 0.00200926 0.00201585 0.00202217 0.00202825 0.00203411 0.00203978 0.00204527 0.0020506 0.00205578 0.00206082 0.00206575 0.00207055 0.00207526 0.00207986 0.00208438 0.00208881 0.00209317 0.00209745 0.00210167 0.00210582 0.00210991 0.00211394 0.00211792 0.00212185 0.00212574 0.00212958 0.00213338 0.00213713 0.00214085 0.00214453 0.00214818 0.0021518 0.00215538 0.00215894 0.00216247 0.00216597 0.00216944 0.00217289 0.00217631 0.00217972 0.0021831 0.00218646 0.00218979 0.00219311 0.00219641 0.0021997 0.00220296 0.00220621 0.00220944 0.00221266 0.00221586 0.00221904 0.00222222 0.00222537 0.00222852 0.00223165 0.00223477 0.00223788 0.00224097 0.00224406 0.00224713 0.00225019 0.00225324 0.00225628 0.00225931 0.00226233 0.00226534 0.00226834 0.00227134 0.00227432 0.00227729 0.00228026 0.00228322 0.00228617 0.00228911 0.00229205 0.00229497 0.00229789 0.00230081 0.00230371 0.00230661 0.0023095 0.00231239 0.00231527 0.00231814 0.00232101 0.00232387 0.00232673 0.00232958 0.00233243 0.00233527 0.0023381 0.00234093 0.00234376 0.00234658 0.0023494 0.00235221 0.00235502 0.00235783 0.00236063 0.00236343 0.00236622 0.00236901 0.0023718 0.00237459 0.00237737 0.00238015 0.00238293 0.0023857 0.00238848 0.00239125 0.00239402 0.00239678 0.00239955 0.00240232 0.00240508 0.00240784 0.0024106 0.00241337 0.00241613 0.00241889 0.00242165 0.00242441 0.00242717 0.00242993 0.00243269 -0.000791679 -0.000712941 -0.000634084 -0.000555114 -0.000476034 -0.000396853 -0.000317577 -0.000238211 -0.000158765 -7.92453E-05 3.37946E-07 7.90614E-05 0.000155977 0.0002311 0.000304443 0.000376019 0.000445842 0.000513926 0.000580282 0.000644925 0.000707867 0.000769121 0.000828699 0.000886615 0.000942882 0.000997512 0.00105052 0.00110191 0.00115171 0.00119991 0.00124655 0.00129162 0.00133515 0.00137714 0.00141762 0.00145658 0.00149405 0.00153004 0.00156457 0.00159765 0.00162929 0.00165952 0.00168835 0.0017158 0.00174189 0.00176664 0.00179008 0.00181223 0.00183313 0.0018528 0.00187129 0.00188862 0.00190486 0.00192004 0.00193422 0.00194745 0.0019598 0.00197134 0.00198212 0.00199221 0.00200167 0.00201057 0.00201897 0.00202691 0.00203444 0.00204162 0.00204847 0.00205503 0.00206134 0.00206741 0.00207327 0.00207894 0.00208444 0.00208978 0.00209498 0.00210005 0.002105 0.00210984 0.00211457 0.00211921 0.00212376 0.00212823 0.00213262 0.00213694 0.00214119 0.00214538 0.00214951 0.00215358 0.0021576 0.00216157 0.00216549 0.00216937 0.00217321 0.00217701 0.00218077 0.00218449 0.00218818 0.00219184 0.00219546 0.00219906 0.00220262 0.00220616 0.00220967 0.00221316 0.00221663 0.00222007 0.00222349 0.00222689 0.00223026 0.00223362 0.00223696 0.00224028 0.00224358 0.00224687 0.00225014 0.00225339 0.00225663 0.00225986 0.00226306 0.00226626 0.00226944 0.00227261 0.00227577 0.00227891 0.00228204 0.00228516 0.00228827 0.00229136 0.00229445 0.00229753 0.00230059 0.00230365 0.00230669 0.00230973 0.00231276 0.00231577 0.00231878 0.00232178 0.00232478 0.00232776 0.00233074 0.00233371 0.00233667 0.00233962 0.00234257 0.00234551 0.00234844 0.00235136 0.00235428 0.0023572 0.0023601 0.002363 0.0023659 0.00236879 0.00237167 0.00237455 0.00237742 0.00238029 0.00238315 0.00238601 0.00238887 0.00239172 0.00239456 0.0023974 0.00240024 0.00240307 0.0024059 0.00240873 0.00241155 0.00241437 0.00241719 0.00242001 0.00242282 0.00242563 0.00242843 0.00243124 0.00243404 0.00243684 0.00243964 0.00244244 0.00244524 0.00244803 0.00245083 0.00245362 0.00245641 0.00245921 0.002462 0.00246479 0.00246758 0.00247038 0.00247317 -0.000795482 -0.000716414 -0.000637216 -0.000557894 -0.000478452 -0.000398896 -0.000319233 -0.000239469 -0.00015961 -7.96651E-05 3.57874E-07 7.95351E-05 0.000156916 0.000232515 0.000306346 0.00037842 0.000448753 0.000517356 0.000584242 0.000649424 0.000712916 0.000774729 0.000834876 0.000893371 0.000950224 0.00100545 0.00105906 0.00111107 0.00116148 0.00121032 0.00125759 0.00130331 0.00134749 0.00139014 0.00143128 0.00147091 0.00150906 0.00154574 0.00158095 0.00161472 0.00164706 0.00167799 0.00170753 0.00173568 0.00176248 0.00178794 0.00181208 0.00183494 0.00185653 0.00187689 0.00189606 0.00191406 0.00193095 0.00194676 0.00196155 0.00197537 0.00198829 0.00200035 0.00201163 0.00202219 0.00203209 0.00204139 0.00205016 0.00205844 0.00206629 0.00207376 0.00208088 0.00208769 0.00209423 0.00210052 0.00210658 0.00211244 0.00211812 0.00212363 0.00212899 0.00213421 0.00213931 0.00214428 0.00214915 0.00215391 0.00215858 0.00216316 0.00216767 0.00217209 0.00217645 0.00218074 0.00218496 0.00218913 0.00219324 0.0021973 0.00220131 0.00220527 0.00220919 0.00221307 0.00221691 0.0022207 0.00222447 0.0022282 0.00223189 0.00223556 0.00223919 0.0022428 0.00224637 0.00224993 0.00225345 0.00225696 0.00226044 0.0022639 0.00226733 0.00227075 0.00227414 0.00227752 0.00228088 0.00228422 0.00228755 0.00229085 0.00229414 0.00229742 0.00230068 0.00230393 0.00230716 0.00231038 0.00231358 0.00231677 0.00231995 0.00232312 0.00232627 0.00232942 0.00233255 0.00233567 0.00233878 0.00234188 0.00234497 0.00234805 0.00235112 0.00235419 0.00235724 0.00236028 0.00236332 0.00236634 0.00236936 0.00237237 0.00237537 0.00237837 0.00238135 0.00238433 0.00238731 0.00239027 0.00239323 0.00239618 0.00239913 0.00240207 0.002405 0.00240793 0.00241085 0.00241377 0.00241668 0.00241958 0.00242248 0.00242538 0.00242827 0.00243115 0.00243403 0.00243691 0.00243979 0.00244265 0.00244552 0.00244838 0.00245124 0.00245409 0.00245695 0.00245979 0.00246264 0.00246548 0.00246832 0.00247116 0.002474 0.00247683 0.00247967 0.0024825 0.00248533 0.00248816 0.00249098 0.00249381 0.00249663 0.00249946 0.00250228 0.00250511 0.00250793 0.00251075 0.00251358 -0.000799189 -0.000719799 -0.000640269 -0.000560603 -0.000480808 -0.000400887 -0.000320847 -0.000240693 -0.000160433 -8.00727E-05 3.78886E-07 7.99986E-05 0.000157834 0.000233898 0.000308204 0.000380766 0.000451597 0.000520708 0.000588112 0.000653823 0.000717853 0.000780214 0.000840919 0.00089998 0.00095741 0.00101322 0.00106742 0.00112003 0.00117106 0.00122051 0.00126841 0.00131476 0.00135958 0.00140288 0.00144467 0.00148497 0.00152379 0.00156113 0.00159703 0.00163148 0.00166451 0.00169613 0.00172636 0.00175521 0.00178271 0.00180886 0.00183371 0.00185726 0.00187954 0.00190059 0.00192044 0.00193911 0.00195665 0.0019731 0.00198851 0.00200293 0.00201641 0.00202902 0.00204081 0.00205185 0.0020622 0.00207192 0.00208107 0.00208971 0.0020979 0.00210567 0.00211307 0.00212015 0.00212693 0.00213344 0.00213971 0.00214577 0.00215164 0.00215732 0.00216285 0.00216823 0.00217347 0.00217858 0.00218358 0.00218848 0.00219327 0.00219797 0.00220259 0.00220713 0.00221159 0.00221598 0.0022203 0.00222457 0.00222877 0.00223292 0.00223702 0.00224107 0.00224507 0.00224903 0.00225294 0.00225682 0.00226066 0.00226446 0.00226823 0.00227196 0.00227567 0.00227934 0.00228299 0.0022866 0.00229019 0.00229376 0.0022973 0.00230082 0.00230432 0.00230779 0.00231125 0.00231468 0.00231809 0.00232149 0.00232487 0.00232823 0.00233157 0.0023349 0.00233822 0.00234151 0.0023448 0.00234806 0.00235132 0.00235456 0.00235779 0.002361 0.0023642 0.00236739 0.00237057 0.00237374 0.0023769 0.00238004 0.00238318 0.0023863 0.00238942 0.00239252 0.00239562 0.00239871 0.00240178 0.00240485 0.00240791 0.00241096 0.00241401 0.00241704 0.00242007 0.00242309 0.0024261 0.00242911 0.00243211 0.0024351 0.00243808 0.00244106 0.00244403 0.002447 0.00244996 0.00245291 0.00245586 0.0024588 0.00246174 0.00246467 0.0024676 0.00247052 0.00247344 0.00247635 0.00247926 0.00248216 0.00248506 0.00248796 0.00249085 0.00249374 0.00249663 0.00249951 0.00250239 0.00250527 0.00250815 0.00251102 0.00251389 0.00251675 0.00251962 0.00252248 0.00252535 0.00252821 0.00253107 0.00253393 0.00253678 0.00253964 0.0025425 0.00254535 0.00254821 0.00255106 0.00255392 -0.000802802 -0.000723098 -0.000643244 -0.000563244 -0.000483103 -0.000402826 -0.000322418 -0.000241885 -0.000161233 -8.04683E-05 4.01037E-07 8.04523E-05 0.00015873 0.000235249 0.00031002 0.000383058 0.000454375 0.000523983 0.000591895 0.000658124 0.000722681 0.000785579 0.00084683 0.000906447 0.000964441 0.00102082 0.00107561 0.00112881 0.00118043 0.0012305 0.00127901 0.00132598 0.00137143 0.00141537 0.00145781 0.00149875 0.00153823 0.00157624 0.0016128 0.00164793 0.00168163 0.00171394 0.00174485 0.00177439 0.00180258 0.00182943 0.00185496 0.0018792 0.00190218 0.00192391 0.00194443 0.00196376 0.00198196 0.00199905 0.00201508 0.0020301 0.00204417 0.00205733 0.00206964 0.00208118 0.00209199 0.00210215 0.0021117 0.00212072 0.00212924 0.00213733 0.00214503 0.00215238 0.00215941 0.00216616 0.00217265 0.00217892 0.00218498 0.00219084 0.00219654 0.00220208 0.00220747 0.00221273 0.00221787 0.0022229 0.00222782 0.00223265 0.00223738 0.00224203 0.0022466 0.0022511 0.00225553 0.00225989 0.00226419 0.00226843 0.00227262 0.00227675 0.00228084 0.00228488 0.00228888 0.00229283 0.00229675 0.00230062 0.00230447 0.00230827 0.00231205 0.00231579 0.0023195 0.00232318 0.00232684 0.00233047 0.00233407 0.00233765 0.00234121 0.00234475 0.00234826 0.00235175 0.00235522 0.00235867 0.00236211 0.00236552 0.00236892 0.0023723 0.00237567 0.00237902 0.00238235 0.00238567 0.00238897 0.00239226 0.00239554 0.0023988 0.00240205 0.00240529 0.00240852 0.00241173 0.00241493 0.00241813 0.00242131 0.00242448 0.00242763 0.00243078 0.00243392 0.00243705 0.00244017 0.00244328 0.00244639 0.00244948 0.00245256 0.00245564 0.00245871 0.00246177 0.00246482 0.00246787 0.00247091 0.00247394 0.00247696 0.00247998 0.00248299 0.00248599 0.00248899 0.00249198 0.00249497 0.00249795 0.00250092 0.00250389 0.00250685 0.00250981 0.00251277 0.00251571 0.00251866 0.0025216 0.00252453 0.00252747 0.00253039 0.00253332 0.00253624 0.00253916 0.00254207 0.00254498 0.00254789 0.0025508 0.0025537 0.0025566 0.0025595 0.0025624 0.00256529 0.00256818 0.00257108 0.00257397 0.00257686 0.00257975 0.00258263 0.00258552 0.00258841 0.00259129 0.00259418 -0.000806323 -0.000726313 -0.000646142 -0.000565816 -0.000485338 -0.000404714 -0.000323948 -0.000243045 -0.000162011 -8.0852E-05 4.24383E-07 8.08963E-05 0.000159606 0.000236568 0.000311794 0.000385297 0.000457089 0.000527184 0.000595592 0.000662327 0.0007274 0.000790824 0.000852611 0.000912773 0.000971321 0.00102827 0.00108362 0.0011374 0.00118962 0.00124028 0.00128939 0.00133698 0.00138305 0.00142761 0.00147068 0.00151227 0.00155239 0.00159105 0.00162827 0.00166406 0.00169844 0.00173142 0.00176301 0.00179323 0.0018221 0.00184963 0.00187585 0.00190078 0.00192443 0.00194684 0.00196803 0.00198803 0.00200688 0.00202462 0.00204128 0.00205691 0.00207156 0.00208528 0.00209813 0.00211017 0.00212146 0.00213207 0.00214204 0.00215144 0.00216033 0.00216875 0.00217675 0.00218438 0.00219168 0.00219867 0.0022054 0.00221187 0.00221813 0.00222419 0.00223006 0.00223576 0.00224132 0.00224673 0.00225201 0.00225718 0.00226223 0.00226718 0.00227204 0.0022768 0.00228149 0.00228609 0.00229062 0.00229509 0.00229948 0.00230382 0.0023081 0.00231232 0.0023165 0.00232062 0.0023247 0.00232874 0.00233273 0.00233668 0.0023406 0.00234448 0.00234832 0.00235213 0.00235592 0.00235967 0.00236339 0.00236708 0.00237075 0.00237439 0.00237801 0.00238161 0.00238518 0.00238873 0.00239226 0.00239577 0.00239926 0.00240273 0.00240618 0.00240961 0.00241303 0.00241643 0.00241982 0.00242319 0.00242654 0.00242988 0.00243321 0.00243652 0.00243982 0.0024431 0.00244638 0.00244964 0.00245289 0.00245612 0.00245935 0.00246256 0.00246577 0.00246896 0.00247214 0.00247532 0.00247848 0.00248163 0.00248478 0.00248791 0.00249104 0.00249416 0.00249727 0.00250037 0.00250346 0.00250655 0.00250962 0.00251269 0.00251576 0.00251881 0.00252186 0.0025249 0.00252794 0.00253097 0.00253399 0.00253701 0.00254002 0.00254303 0.00254603 0.00254902 0.00255201 0.002555 0.00255798 0.00256095 0.00256393 0.00256689 0.00256986 0.00257282 0.00257577 0.00257872 0.00258167 0.00258462 0.00258756 0.0025905 0.00259343 0.00259637 0.0025993 0.00260223 0.00260516 0.00260808 0.00261101 0.00261393 0.00261685 0.00261977 0.00262269 0.00262561 0.00262853 0.00263145 0.00263437 -0.000809754 -0.000729444 -0.000648965 -0.000568321 -0.000487515 -0.000406552 -0.000325437 -0.000244174 -0.000162767 -8.12241E-05 4.48986E-07 8.1331E-05 0.000160462 0.000237857 0.000313526 0.000387484 0.000459741 0.000530311 0.000599205 0.000666436 0.000732014 0.000795954 0.000858265 0.000918961 0.000978052 0.00103555 0.00109147 0.00114582 0.00119861 0.00124985 0.00129956 0.00134775 0.00139443 0.00143961 0.0014833 0.00152552 0.00156628 0.00160558 0.00164345 0.0016799 0.00171493 0.00174857 0.00178083 0.00181172 0.00184127 0.00186948 0.00189637 0.00192198 0.00194631 0.00196939 0.00199125 0.00201191 0.00203142 0.00204979 0.00206708 0.00208332 0.00209857 0.00211286 0.00212626 0.00213882 0.00215061 0.00216167 0.00217207 0.00218188 0.00219113 0.0021999 0.00220822 0.00221615 0.00222372 0.00223097 0.00223793 0.00224463 0.00225109 0.00225734 0.0022634 0.00226928 0.002275 0.00228057 0.002286 0.0022913 0.00229649 0.00230157 0.00230655 0.00231144 0.00231623 0.00232095 0.00232559 0.00233015 0.00233465 0.00233908 0.00234346 0.00234777 0.00235204 0.00235625 0.00236041 0.00236453 0.0023686 0.00237263 0.00237662 0.00238057 0.00238449 0.00238838 0.00239223 0.00239604 0.00239983 0.00240359 0.00240733 0.00241103 0.00241471 0.00241837 0.002422 0.00242561 0.0024292 0.00243276 0.00243631 0.00243983 0.00244334 0.00244683 0.0024503 0.00245376 0.00245719 0.00246061 0.00246402 0.00246741 0.00247078 0.00247415 0.00247749 0.00248083 0.00248415 0.00248746 0.00249075 0.00249403 0.00249731 0.00250056 0.00250381 0.00250705 0.00251028 0.00251349 0.0025167 0.0025199 0.00252308 0.00252626 0.00252943 0.00253259 0.00253574 0.00253888 0.00254202 0.00254514 0.00254826 0.00255137 0.00255447 0.00255757 0.00256065 0.00256374 0.00256681 0.00256988 0.00257294 0.00257599 0.00257904 0.00258208 0.00258512 0.00258815 0.00259118 0.0025942 0.00259722 0.00260023 0.00260323 0.00260624 0.00260923 0.00261223 0.00261522 0.0026182 0.00262119 0.00262417 0.00262714 0.00263012 0.00263309 0.00263605 0.00263902 0.00264198 0.00264494 0.0026479 0.00265086 0.00265381 0.00265676 0.00265972 0.00266267 0.00266562 0.00266857 0.00267152 0.00267447 -0.000813096 -0.000732494 -0.000651714 -0.00057076 -0.000489634 -0.000408342 -0.000326886 -0.000245271 -0.000163502 -8.15846E-05 4.7491E-07 8.17566E-05 0.000161299 0.000239115 0.000315218 0.000389619 0.000462331 0.000533366 0.000602735 0.000670451 0.000736525 0.000800969 0.000863795 0.000925013 0.000984637 0.00104268 0.00109915 0.00115405 0.00120741 0.00125923 0.00130953 0.00135831 0.00140558 0.00145137 0.00149567 0.00153851 0.00157989 0.00161983 0.00165834 0.00169543 0.00173112 0.00176541 0.00179833 0.00182988 0.00186009 0.00188897 0.00191654 0.00194281 0.00196781 0.00199156 0.00201408 0.00203541 0.00205557 0.00207458 0.0020925 0.00210936 0.0021252 0.00214007 0.00215403 0.00216712 0.00217941 0.00219094 0.00220179 0.00221201 0.00222165 0.00223078 0.00223944 0.00224767 0.00225553 0.00226304 0.00227025 0.00227718 0.00228386 0.00229031 0.00229656 0.00230261 0.0023085 0.00231423 0.00231982 0.00232527 0.0023306 0.00233581 0.00234092 0.00234592 0.00235084 0.00235567 0.00236042 0.00236509 0.00236969 0.00237422 0.00237869 0.0023831 0.00238745 0.00239175 0.002396 0.0024002 0.00240435 0.00240846 0.00241253 0.00241656 0.00242055 0.00242451 0.00242843 0.00243232 0.00243617 0.00244 0.0024438 0.00244757 0.00245131 0.00245503 0.00245872 0.00246239 0.00246603 0.00246966 0.00247326 0.00247684 0.00248041 0.00248395 0.00248748 0.00249098 0.00249447 0.00249795 0.0025014 0.00250484 0.00250827 0.00251168 0.00251508 0.00251846 0.00252183 0.00252518 0.00252852 0.00253185 0.00253517 0.00253848 0.00254177 0.00254505 0.00254832 0.00255158 0.00255483 0.00255807 0.0025613 0.00256452 0.00256773 0.00257093 0.00257413 0.00257731 0.00258048 0.00258365 0.00258681 0.00258996 0.0025931 0.00259623 0.00259936 0.00260248 0.00260559 0.0026087 0.0026118 0.00261489 0.00261797 0.00262105 0.00262413 0.0026272 0.00263026 0.00263332 0.00263637 0.00263942 0.00264246 0.00264549 0.00264853 0.00265156 0.00265458 0.0026576 0.00266062 0.00266363 0.00266664 0.00266965 0.00267265 0.00267565 0.00267865 0.00268164 0.00268464 0.00268763 0.00269062 0.0026936 0.00269659 0.00269957 0.00270256 0.00270554 0.00270852 0.0027115 0.00271448 -0.00081635 -0.000735464 -0.000654391 -0.000573135 -0.000491697 -0.000410083 -0.000328295 -0.000246338 -0.000164216 -8.19337E-05 5.0222E-07 8.21734E-05 0.000162117 0.000240345 0.00031687 0.000391705 0.000464862 0.000536351 0.000606185 0.000674375 0.000740934 0.000805872 0.000869202 0.000930933 0.000991079 0.00104965 0.00110666 0.00116211 0.00121603 0.00126841 0.00131928 0.00136864 0.00141651 0.00146289 0.0015078 0.00155125 0.00159324 0.00163381 0.00167294 0.00171067 0.00174699 0.00178193 0.0018155 0.00184771 0.00187858 0.00190812 0.00193634 0.00196328 0.00198894 0.00201336 0.00203654 0.00205852 0.00207933 0.00209899 0.00211754 0.00213501 0.00215146 0.00216691 0.00218143 0.00219506 0.00220786 0.00221988 0.00223119 0.00224184 0.00225188 0.00226138 0.00227038 0.00227894 0.00228709 0.00229488 0.00230234 0.00230951 0.00231641 0.00232308 0.00232952 0.00233576 0.00234183 0.00234772 0.00235347 0.00235907 0.00236454 0.00236989 0.00237513 0.00238026 0.0023853 0.00239024 0.0023951 0.00239988 0.00240459 0.00240922 0.00241379 0.00241829 0.00242274 0.00242713 0.00243146 0.00243575 0.00243998 0.00244417 0.00244832 0.00245243 0.00245649 0.00246052 0.00246451 0.00246847 0.0024724 0.00247629 0.00248016 0.00248399 0.0024878 0.00249158 0.00249533 0.00249906 0.00250277 0.00250645 0.00251011 0.00251375 0.00251737 0.00252097 0.00252455 0.00252811 0.00253165 0.00253518 0.00253869 0.00254218 0.00254565 0.00254911 0.00255256 0.00255599 0.00255941 0.00256281 0.0025662 0.00256958 0.00257294 0.00257629 0.00257963 0.00258296 0.00258627 0.00258958 0.00259287 0.00259615 0.00259943 0.00260269 0.00260594 0.00260918 0.00261242 0.00261564 0.00261886 0.00262206 0.00262526 0.00262845 0.00263163 0.00263481 0.00263797 0.00264113 0.00264428 0.00264743 0.00265056 0.00265369 0.00265682 0.00265993 0.00266304 0.00266615 0.00266925 0.00267234 0.00267543 0.00267851 0.00268159 0.00268466 0.00268773 0.00269079 0.00269385 0.00269691 0.00269996 0.00270301 0.00270605 0.00270909 0.00271213 0.00271516 0.00271819 0.00272122 0.00272424 0.00272727 0.00273029 0.00273331 0.00273632 0.00273934 0.00274236 0.00274537 0.00274838 0.00275139 0.0027544 -0.000819518 -0.000738355 -0.000656997 -0.000575446 -0.000493705 -0.000411777 -0.000329666 -0.000247375 -0.000164909 -8.22714E-05 5.30987E-07 8.25818E-05 0.000162916 0.000241546 0.000318484 0.000393743 0.000467333 0.000539267 0.000609555 0.00067821 0.000745243 0.000810666 0.000874489 0.000936723 0.000997381 0.00105647 0.00111401 0.00117 0.00122447 0.00127741 0.00132884 0.00137877 0.00142721 0.00147418 0.00151968 0.00156373 0.00160633 0.00164751 0.00168727 0.00172562 0.00176257 0.00179815 0.00183236 0.00186521 0.00189673 0.00192692 0.0019558 0.00198339 0.00200971 0.00203478 0.00205862 0.00208125 0.0021027 0.002123 0.00214218 0.00216028 0.00217733 0.00219337 0.00220846 0.00222264 0.00223596 0.00224848 0.00226025 0.00227134 0.0022818 0.00229168 0.00230105 0.00230993 0.0023184 0.00232647 0.0023342 0.00234162 0.00234876 0.00235564 0.00236228 0.00236872 0.00237496 0.00238103 0.00238694 0.00239269 0.00239831 0.0024038 0.00240918 0.00241444 0.0024196 0.00242467 0.00242964 0.00243453 0.00243934 0.00244408 0.00244875 0.00245335 0.00245789 0.00246237 0.00246679 0.00247117 0.00247549 0.00247976 0.00248399 0.00248817 0.00249231 0.00249642 0.00250048 0.00250451 0.00250851 0.00251247 0.0025164 0.0025203 0.00252418 0.00252802 0.00253184 0.00253563 0.00253939 0.00254314 0.00254686 0.00255055 0.00255423 0.00255788 0.00256152 0.00256513 0.00256873 0.00257231 0.00257587 0.00257941 0.00258294 0.00258645 0.00258994 0.00259342 0.00259689 0.00260034 0.00260378 0.0026072 0.00261061 0.00261401 0.00261739 0.00262077 0.00262413 0.00262748 0.00263081 0.00263414 0.00263746 0.00264076 0.00264406 0.00264734 0.00265062 0.00265388 0.00265714 0.00266038 0.00266362 0.00266685 0.00267007 0.00267329 0.00267649 0.00267969 0.00268288 0.00268606 0.00268924 0.0026924 0.00269556 0.00269872 0.00270187 0.00270501 0.00270814 0.00271127 0.0027144 0.00271752 0.00272063 0.00272374 0.00272684 0.00272994 0.00273303 0.00273612 0.00273921 0.00274229 0.00274536 0.00274844 0.00275151 0.00275457 0.00275764 0.0027607 0.00276376 0.00276681 0.00276987 0.00277292 0.00277597 0.00277901 0.00278206 0.00278511 0.00278815 0.00279119 0.00279423 -0.000822602 -0.000741169 -0.000659533 -0.000577694 -0.000495657 -0.000413424 -0.000330999 -0.000248383 -0.000165581 -8.25981E-05 5.61283E-07 8.29819E-05 0.000163697 0.000242719 0.00032006 0.000395732 0.000469747 0.000542115 0.000612848 0.000681958 0.000749455 0.000815351 0.000879658 0.000942385 0.00100354 0.00106315 0.0011212 0.00117773 0.00123273 0.00128621 0.00133819 0.00138869 0.0014377 0.00148524 0.00153133 0.00157596 0.00161917 0.00166095 0.00170131 0.00174028 0.00177786 0.00181406 0.0018489 0.00188239 0.00191454 0.00194538 0.00197491 0.00200315 0.00203012 0.00205584 0.00208033 0.0021036 0.0021257 0.00214663 0.00216644 0.00218516 0.00220281 0.00221945 0.00223511 0.00224984 0.0022637 0.00227673 0.00228898 0.00230053 0.00231141 0.00232169 0.00233142 0.00234066 0.00234944 0.00235782 0.00236582 0.0023735 0.00238088 0.00238798 0.00239484 0.00240148 0.00240791 0.00241415 0.00242023 0.00242614 0.00243192 0.00243755 0.00244306 0.00244846 0.00245375 0.00245894 0.00246403 0.00246903 0.00247395 0.0024788 0.00248357 0.00248827 0.00249291 0.00249748 0.00250199 0.00250645 0.00251086 0.00251522 0.00251953 0.00252379 0.00252801 0.00253219 0.00253633 0.00254043 0.0025445 0.00254853 0.00255253 0.0025565 0.00256044 0.00256435 0.00256823 0.00257208 0.00257591 0.00257971 0.00258349 0.00258724 0.00259098 0.00259469 0.00259838 0.00260205 0.0026057 0.00260933 0.00261294 0.00261654 0.00262012 0.00262368 0.00262722 0.00263075 0.00263427 0.00263777 0.00264125 0.00264472 0.00264818 0.00265162 0.00265505 0.00265847 0.00266188 0.00266527 0.00266865 0.00267202 0.00267538 0.00267873 0.00268207 0.0026854 0.00268871 0.00269202 0.00269532 0.00269861 0.00270188 0.00270515 0.00270842 0.00271167 0.00271491 0.00271815 0.00272138 0.0027246 0.00272781 0.00273102 0.00273421 0.00273741 0.00274059 0.00274377 0.00274694 0.00275011 0.00275327 0.00275642 0.00275957 0.00276271 0.00276585 0.00276899 0.00277211 0.00277524 0.00277836 0.00278147 0.00278458 0.00278769 0.00279079 0.00279389 0.00279699 0.00280008 0.00280317 0.00280626 0.00280935 0.00281243 0.00281551 0.00281859 0.00282167 0.00282475 0.00282782 0.00283089 0.00283397 -0.000825603 -0.000743907 -0.000661999 -0.000579882 -0.000497556 -0.000415026 -0.000332294 -0.000249362 -0.000166234 -8.29136E-05 5.93185E-07 8.3374E-05 0.00016446 0.000243865 0.000321599 0.000397675 0.000472104 0.000544897 0.000616065 0.000685619 0.000753571 0.000819931 0.000884711 0.000947922 0.00100957 0.00106968 0.00112824 0.00118528 0.00124081 0.00129483 0.00134736 0.0013984 0.00144797 0.00149608 0.00154274 0.00158796 0.00163175 0.00167412 0.00171509 0.00175466 0.00179285 0.00182967 0.00186513 0.00189925 0.00193204 0.00196351 0.00199367 0.00202256 0.00205017 0.00207653 0.00210166 0.00212558 0.00214831 0.00216988 0.00219032 0.00220965 0.00222791 0.00224515 0.00226139 0.00227668 0.00229107 0.00230462 0.00231737 0.00232938 0.0023407 0.00235139 0.00236151 0.0023711 0.00238021 0.0023889 0.0023972 0.00240514 0.00241277 0.00242011 0.00242719 0.00243403 0.00244065 0.00244708 0.00245333 0.00245941 0.00246534 0.00247112 0.00247678 0.00248231 0.00248773 0.00249304 0.00249826 0.00250338 0.00250841 0.00251337 0.00251824 0.00252304 0.00252778 0.00253245 0.00253706 0.00254161 0.0025461 0.00255054 0.00255493 0.00255928 0.00256358 0.00256784 0.00257205 0.00257623 0.00258037 0.00258447 0.00258854 0.00259258 0.00259658 0.00260055 0.0026045 0.00260841 0.0026123 0.00261617 0.00262 0.00262382 0.00262761 0.00263138 0.00263512 0.00263885 0.00264256 0.00264624 0.00264991 0.00265356 0.00265719 0.0026608 0.0026644 0.00266797 0.00267154 0.00267509 0.00267862 0.00268214 0.00268564 0.00268913 0.00269261 0.00269607 0.00269953 0.00270296 0.00270639 0.0027098 0.00271321 0.0027166 0.00271998 0.00272335 0.00272671 0.00273006 0.0027334 0.00273673 0.00274004 0.00274336 0.00274666 0.00274995 0.00275323 0.00275651 0.00275977 0.00276303 0.00276629 0.00276953 0.00277277 0.00277599 0.00277922 0.00278243 0.00278564 0.00278884 0.00279204 0.00279523 0.00279841 0.00280159 0.00280477 0.00280793 0.0028111 0.00281425 0.00281741 0.00282056 0.0028237 0.00282684 0.00282998 0.00283311 0.00283624 0.00283937 0.00284249 0.00284561 0.00284873 0.00285185 0.00285496 0.00285807 0.00286118 0.00286429 0.00286739 0.0028705 0.0028736 -0.000828523 -0.000746571 -0.000664399 -0.000582009 -0.000499403 -0.000416583 -0.000333552 -0.000250312 -0.000166866 -8.32182E-05 6.26774E-07 8.37584E-05 0.000165207 0.000244984 0.000323102 0.000399572 0.000474406 0.000547614 0.000619207 0.000689196 0.000757593 0.000824408 0.000889652 0.000953335 0.00101547 0.00107606 0.00113513 0.00119268 0.00124872 0.00130327 0.00135633 0.00140791 0.00145803 0.0015067 0.00155392 0.00159971 0.00164408 0.00168703 0.00172859 0.00176876 0.00180755 0.00184498 0.00188106 0.0019158 0.00194921 0.0019813 0.0020121 0.00204162 0.00206987 0.00209686 0.00212263 0.00214718 0.00217055 0.00219275 0.00221381 0.00223376 0.00225263 0.00227046 0.00228728 0.00230314 0.00231808 0.00233215 0.0023454 0.00235789 0.00236966 0.00238077 0.00239129 0.00240125 0.00241071 0.00241972 0.00242831 0.00243653 0.00244442 0.002452 0.00245931 0.00246636 0.00247319 0.00247981 0.00248624 0.00249249 0.00249858 0.00250452 0.00251032 0.00251599 0.00252155 0.00252699 0.00253233 0.00253757 0.00254272 0.00254778 0.00255276 0.00255767 0.0025625 0.00256727 0.00257197 0.00257662 0.0025812 0.00258573 0.00259021 0.00259463 0.00259902 0.00260335 0.00260764 0.0026119 0.00261611 0.00262028 0.00262442 0.00262853 0.0026326 0.00263664 0.00264065 0.00264463 0.00264858 0.0026525 0.0026564 0.00266028 0.00266413 0.00266795 0.00267176 0.00267554 0.0026793 0.00268304 0.00268676 0.00269046 0.00269414 0.00269781 0.00270146 0.00270509 0.0027087 0.0027123 0.00271588 0.00271944 0.002723 0.00272653 0.00273006 0.00273357 0.00273706 0.00274055 0.00274402 0.00274748 0.00275092 0.00275436 0.00275778 0.0027612 0.0027646 0.00276799 0.00277137 0.00277474 0.0027781 0.00278145 0.00278479 0.00278812 0.00279145 0.00279476 0.00279807 0.00280137 0.00280466 0.00280794 0.00281121 0.00281448 0.00281774 0.00282099 0.00282424 0.00282747 0.00283071 0.00283393 0.00283715 0.00284037 0.00284358 0.00284678 0.00284998 0.00285317 0.00285636 0.00285954 0.00286272 0.00286589 0.00286906 0.00287223 0.00287539 0.00287855 0.00288171 0.00288486 0.00288801 0.00289116 0.0028943 0.00289745 0.00290059 0.00290373 0.00290686 0.00291 0.00291313 -0.000831362 -0.000749161 -0.000666732 -0.000584077 -0.000501197 -0.000418096 -0.000334774 -0.000251234 -0.000167479 -8.3512E-05 6.62132E-07 8.41355E-05 0.000165936 0.000246077 0.00032457 0.000401425 0.000476654 0.000550267 0.000622276 0.000692691 0.000761523 0.000828783 0.000894481 0.000958628 0.00102124 0.00108231 0.00114187 0.00119992 0.00125647 0.00131153 0.00136511 0.00141723 0.00146788 0.0015171 0.00156487 0.00161122 0.00165616 0.00169969 0.00174183 0.00178259 0.00182198 0.00186001 0.00189669 0.00193203 0.00196606 0.00199878 0.0020302 0.00206034 0.00208921 0.00211684 0.00214324 0.00216842 0.00219242 0.00221524 0.00223692 0.00225749 0.00227697 0.00229539 0.0023128 0.00232922 0.00234472 0.00235932 0.00237308 0.00238605 0.00239828 0.00240983 0.00242076 0.0024311 0.00244092 0.00245026 0.00245916 0.00246767 0.00247583 0.00248366 0.00249121 0.00249848 0.00250552 0.00251233 0.00251894 0.00252537 0.00253162 0.00253772 0.00254368 0.00254949 0.00255519 0.00256076 0.00256623 0.00257159 0.00257686 0.00258204 0.00258713 0.00259214 0.00259708 0.00260195 0.00260675 0.00261148 0.00261616 0.00262078 0.00262534 0.00262985 0.00263431 0.00263873 0.0026431 0.00264743 0.00265172 0.00265596 0.00266017 0.00266435 0.00266849 0.0026726 0.00267667 0.00268072 0.00268473 0.00268872 0.00269268 0.00269662 0.00270052 0.00270441 0.00270827 0.00271211 0.00271593 0.00271972 0.0027235 0.00272725 0.00273099 0.0027347 0.0027384 0.00274208 0.00274575 0.00274939 0.00275302 0.00275664 0.00276024 0.00276382 0.00276739 0.00277095 0.00277449 0.00277802 0.00278154 0.00278504 0.00278853 0.00279201 0.00279548 0.00279893 0.00280238 0.00280581 0.00280923 0.00281265 0.00281605 0.00281944 0.00282282 0.00282619 0.00282956 0.00283291 0.00283626 0.00283959 0.00284292 0.00284624 0.00284955 0.00285286 0.00285615 0.00285944 0.00286272 0.002866 0.00286927 0.00287253 0.00287579 0.00287904 0.00288228 0.00288552 0.00288875 0.00289198 0.0028952 0.00289842 0.00290163 0.00290484 0.00290804 0.00291124 0.00291444 0.00291763 0.00292082 0.002924 0.00292719 0.00293037 0.00293354 0.00293672 0.00293989 0.00294306 0.00294623 0.00294939 0.00295256 -0.000834123 -0.000751679 -0.000668999 -0.000586086 -0.000502941 -0.000419565 -0.00033596 -0.000252129 -0.000168073 -8.3795E-05 6.99348E-07 8.45053E-05 0.00016665 0.000247145 0.000326003 0.000403234 0.000478849 0.000552859 0.000625274 0.000696105 0.000765363 0.000833059 0.000899202 0.000963803 0.00102687 0.00108842 0.00114846 0.001207 0.00126404 0.00131961 0.00137371 0.00142635 0.00147754 0.00152729 0.00157561 0.00162251 0.00166801 0.0017121 0.00175482 0.00179615 0.00183612 0.00187474 0.00191202 0.00194797 0.0019826 0.00201593 0.00204796 0.00207872 0.00210822 0.00213647 0.00216349 0.00218929 0.00221391 0.00223736 0.00225966 0.00228083 0.00230092 0.00231994 0.00233793 0.00235493 0.00237098 0.00238612 0.00240039 0.00241386 0.00242657 0.00243856 0.00244991 0.00246064 0.00247083 0.00248052 0.00248974 0.00249855 0.00250699 0.00251508 0.00252287 0.00253037 0.00253762 0.00254464 0.00255144 0.00255805 0.00256448 0.00257074 0.00257685 0.00258281 0.00258865 0.00259436 0.00259996 0.00260545 0.00261083 0.00261613 0.00262133 0.00262646 0.0026315 0.00263647 0.00264137 0.0026462 0.00265097 0.00265568 0.00266033 0.00266493 0.00266947 0.00267397 0.00267842 0.00268283 0.00268719 0.00269151 0.00269579 0.00270004 0.00270425 0.00270843 0.00271257 0.00271668 0.00272076 0.00272481 0.00272883 0.00273283 0.0027368 0.00274074 0.00274466 0.00274856 0.00275243 0.00275628 0.00276011 0.00276392 0.00276771 0.00277148 0.00277523 0.00277896 0.00278267 0.00278637 0.00279005 0.00279372 0.00279736 0.002801 0.00280462 0.00280822 0.00281181 0.00281538 0.00281894 0.00282249 0.00282603 0.00282955 0.00283306 0.00283656 0.00284005 0.00284352 0.00284699 0.00285044 0.00285388 0.00285732 0.00286074 0.00286415 0.00286755 0.00287095 0.00287433 0.00287771 0.00288107 0.00288443 0.00288778 0.00289112 0.00289446 0.00289779 0.00290111 0.00290442 0.00290772 0.00291102 0.00291431 0.0029176 0.00292088 0.00292415 0.00292742 0.00293068 0.00293394 0.00293719 0.00294043 0.00294368 0.00294691 0.00295015 0.00295337 0.0029566 0.00295982 0.00296304 0.00296625 0.00296946 0.00297267 0.00297588 0.00297908 0.00298228 0.00298548 0.00298868 0.00299188 -0.000836806 -0.000754126 -0.000671203 -0.000588039 -0.000504634 -0.000420991 -0.000337111 -0.000252996 -0.000168647 -8.40673E-05 7.38515E-07 8.48683E-05 0.000167348 0.000248189 0.000327403 0.000405 0.000480992 0.000555389 0.000628202 0.00069944 0.000769115 0.000837237 0.000903816 0.000968862 0.00103239 0.0010944 0.00115491 0.00121392 0.00127146 0.00132752 0.00138213 0.00143528 0.00148699 0.00153726 0.00158612 0.00163357 0.00167961 0.00172427 0.00176754 0.00180945 0.00185 0.0018892 0.00192706 0.0019636 0.00199883 0.00203276 0.0020654 0.00209677 0.00212688 0.00215574 0.00218338 0.00220981 0.00223504 0.0022591 0.00228201 0.0023038 0.00232449 0.0023441 0.00236268 0.00238025 0.00239686 0.00241254 0.00242735 0.00244132 0.0024545 0.00246696 0.00247873 0.00248988 0.00250044 0.00251048 0.00252004 0.00252916 0.00253789 0.00254625 0.00255429 0.00256203 0.0025695 0.00257673 0.00258373 0.00259052 0.00259713 0.00260356 0.00260983 0.00261595 0.00262193 0.00262778 0.00263351 0.00263913 0.00264464 0.00265005 0.00265537 0.00266061 0.00266576 0.00267083 0.00267583 0.00268076 0.00268563 0.00269043 0.00269517 0.00269985 0.00270449 0.00270907 0.0027136 0.00271808 0.00272252 0.00272692 0.00273128 0.0027356 0.00273988 0.00274412 0.00274833 0.00275251 0.00275666 0.00276077 0.00276486 0.00276891 0.00277294 0.00277695 0.00278093 0.00278488 0.00278881 0.00279272 0.0027966 0.00280047 0.00280431 0.00280813 0.00281193 0.00281572 0.00281948 0.00282323 0.00282696 0.00283068 0.00283437 0.00283805 0.00284172 0.00284537 0.002849 0.00285263 0.00285623 0.00285983 0.00286341 0.00286697 0.00287053 0.00287407 0.0028776 0.00288112 0.00288462 0.00288812 0.0028916 0.00289508 0.00289854 0.00290199 0.00290544 0.00290887 0.0029123 0.00291571 0.00291912 0.00292251 0.0029259 0.00292928 0.00293265 0.00293602 0.00293937 0.00294272 0.00294606 0.0029494 0.00295273 0.00295605 0.00295936 0.00296267 0.00296597 0.00296927 0.00297256 0.00297585 0.00297913 0.0029824 0.00298567 0.00298894 0.0029922 0.00299546 0.00299871 0.00300196 0.00300521 0.00300845 0.00301169 0.00301493 0.00301817 0.0030214 0.00302463 0.00302786 0.00303108 -0.000839414 -0.000756503 -0.000673343 -0.000589934 -0.000506278 -0.000422376 -0.000338228 -0.000253836 -0.000169202 -8.4329E-05 7.79728E-07 8.52248E-05 0.00016803 0.000249208 0.000328769 0.000406725 0.000483085 0.00055786 0.000631061 0.000702698 0.00077278 0.000841319 0.000908325 0.000973807 0.00103778 0.00110024 0.00116121 0.0012207 0.00127872 0.00133527 0.00139037 0.00144402 0.00149624 0.00154704 0.00159642 0.0016444 0.00169099 0.00173619 0.00178002 0.00182249 0.0018636 0.00190338 0.00194182 0.00197894 0.00201476 0.00204928 0.00208252 0.00211449 0.00214521 0.00217468 0.00220293 0.00222996 0.00225581 0.00228048 0.002304 0.00232639 0.00234768 0.00236789 0.00238705 0.0024052 0.00242237 0.0024386 0.00245393 0.00246841 0.00248209 0.00249501 0.00250722 0.00251878 0.00252974 0.00254015 0.00255005 0.0025595 0.00256852 0.00257717 0.00258546 0.00259345 0.00260115 0.00260859 0.0026158 0.00262279 0.00262957 0.00263618 0.00264261 0.00264889 0.00265502 0.00266101 0.00266688 0.00267263 0.00267827 0.00268381 0.00268925 0.00269459 0.00269986 0.00270504 0.00271014 0.00271517 0.00272013 0.00272502 0.00272986 0.00273463 0.00273935 0.00274402 0.00274863 0.0027532 0.00275771 0.00276219 0.00276662 0.00277101 0.00277537 0.00277968 0.00278396 0.00278821 0.00279242 0.0027966 0.00280075 0.00280487 0.00280896 0.00281302 0.00281706 0.00282108 0.00282506 0.00282903 0.00283297 0.00283689 0.00284078 0.00284466 0.00284852 0.00285235 0.00285617 0.00285997 0.00286375 0.00286751 0.00287126 0.00287499 0.0028787 0.0028824 0.00288608 0.00288975 0.0028934 0.00289704 0.00290067 0.00290428 0.00290788 0.00291146 0.00291504 0.0029186 0.00292215 0.00292568 0.00292921 0.00293273 0.00293623 0.00293972 0.00294321 0.00294668 0.00295014 0.0029536 0.00295704 0.00296048 0.0029639 0.00296732 0.00297073 0.00297413 0.00297753 0.00298091 0.00298429 0.00298766 0.00299103 0.00299438 0.00299773 0.00300108 0.00300441 0.00300775 0.00301107 0.00301439 0.00301771 0.00302101 0.00302432 0.00302762 0.00303091 0.0030342 0.00303749 0.00304077 0.00304405 0.00304733 0.0030506 0.00305387 0.00305714 0.0030604 0.00306366 0.00306692 0.00307018 -0.000841946 -0.000758812 -0.000675421 -0.000591775 -0.000507874 -0.000423719 -0.00033931 -0.00025465 -0.000169739 -8.45802E-05 8.23088E-07 8.55749E-05 0.000168698 0.000250204 0.000330104 0.000408409 0.000485129 0.000560273 0.000633854 0.000705879 0.000776361 0.000845308 0.000912731 0.00097864 0.00104304 0.00110595 0.00116738 0.00122733 0.00128582 0.00134285 0.00139843 0.00145258 0.0015053 0.00155661 0.00160651 0.00165502 0.00170213 0.00174787 0.00179225 0.00183527 0.00187694 0.00191728 0.00195629 0.00199399 0.00203039 0.0020655 0.00209933 0.00213189 0.0021632 0.00219328 0.00222213 0.00224977 0.00227622 0.0023015 0.00232562 0.00234861 0.0023705 0.0023913 0.00241105 0.00242977 0.0024475 0.00246428 0.00248015 0.00249515 0.00250932 0.00252271 0.00253538 0.00254737 0.00255873 0.00256952 0.00257977 0.00258955 0.00259888 0.00260782 0.00261639 0.00262463 0.00263257 0.00264023 0.00264765 0.00265483 0.00266181 0.00266859 0.00267519 0.00268163 0.00268792 0.00269406 0.00270007 0.00270595 0.00271172 0.00271739 0.00272295 0.00272841 0.00273378 0.00273907 0.00274428 0.00274941 0.00275447 0.00275947 0.00276439 0.00276926 0.00277407 0.00277882 0.00278351 0.00278816 0.00279276 0.00279731 0.00280182 0.00280629 0.00281071 0.0028151 0.00281945 0.00282376 0.00282804 0.00283229 0.0028365 0.00284069 0.00284484 0.00284897 0.00285307 0.00285714 0.00286119 0.00286521 0.00286921 0.00287318 0.00287713 0.00288106 0.00288497 0.00288886 0.00289273 0.00289658 0.00290041 0.00290423 0.00290802 0.0029118 0.00291556 0.00291931 0.00292304 0.00292675 0.00293045 0.00293414 0.00293781 0.00294146 0.00294511 0.00294874 0.00295235 0.00295596 0.00295955 0.00296313 0.0029667 0.00297025 0.0029738 0.00297733 0.00298086 0.00298437 0.00298787 0.00299137 0.00299485 0.00299833 0.00300179 0.00300525 0.00300869 0.00301213 0.00301556 0.00301899 0.0030224 0.00302581 0.00302921 0.0030326 0.00303599 0.00303937 0.00304274 0.00304611 0.00304947 0.00305282 0.00305617 0.00305951 0.00306285 0.00306618 0.00306951 0.00307283 0.00307615 0.00307947 0.00308278 0.00308609 0.00308939 0.00309269 0.00309599 0.00309928 0.00310258 0.00310587 0.00310915 -0.000844405 -0.000761053 -0.000677438 -0.000593561 -0.000509422 -0.000425021 -0.000340359 -0.000255438 -0.000170258 -8.48208E-05 8.68702E-07 8.59189E-05 0.000169351 0.000251177 0.000331408 0.000410053 0.000487124 0.000562629 0.00063658 0.000708987 0.000779858 0.000849205 0.000917037 0.000983364 0.0010482 0.00111154 0.00117341 0.00123381 0.00129276 0.00135026 0.00140632 0.00146096 0.00151418 0.00156598 0.00161639 0.00166541 0.00171305 0.00175933 0.00180424 0.0018478 0.00189002 0.00193092 0.00197049 0.00200876 0.00204573 0.00208141 0.00211582 0.00214897 0.00218087 0.00221154 0.00224099 0.00226922 0.00229627 0.00232215 0.00234687 0.00237046 0.00239294 0.00241433 0.00243466 0.00245396 0.00247226 0.00248959 0.00250599 0.00252151 0.00253619 0.00255006 0.00256319 0.00257562 0.00258739 0.00259857 0.00260919 0.00261931 0.00262896 0.0026382 0.00264705 0.00265555 0.00266373 0.00267163 0.00267926 0.00268665 0.00269382 0.00270079 0.00270757 0.00271417 0.00272062 0.00272691 0.00273307 0.00273909 0.00274499 0.00275079 0.00275647 0.00276205 0.00276754 0.00277294 0.00277826 0.00278349 0.00278866 0.00279375 0.00279877 0.00280373 0.00280862 0.00281346 0.00281825 0.00282298 0.00282766 0.00283229 0.00283688 0.00284142 0.00284592 0.00285038 0.0028548 0.00285918 0.00286353 0.00286784 0.00287212 0.00287637 0.00288059 0.00288478 0.00288894 0.00289307 0.00289718 0.00290126 0.00290531 0.00290934 0.00291335 0.00291734 0.0029213 0.00292524 0.00292916 0.00293307 0.00293695 0.00294081 0.00294466 0.00294849 0.0029523 0.00295609 0.00295987 0.00296363 0.00296738 0.00297111 0.00297482 0.00297852 0.00298221 0.00298589 0.00298955 0.00299319 0.00299683 0.00300045 0.00300406 0.00300766 0.00301125 0.00301482 0.00301839 0.00302194 0.00302548 0.00302902 0.00303254 0.00303605 0.00303956 0.00304305 0.00304654 0.00305001 0.00305348 0.00305694 0.00306039 0.00306384 0.00306727 0.0030707 0.00307412 0.00307754 0.00308095 0.00308435 0.00308774 0.00309113 0.00309451 0.00309789 0.00310126 0.00310463 0.00310799 0.00311135 0.0031147 0.00311805 0.00312139 0.00312473 0.00312807 0.0031314 0.00313473 0.00313805 0.00314138 0.0031447 0.00314801 -0.000846791 -0.000763228 -0.000679395 -0.000595293 -0.000510922 -0.000426283 -0.000341375 -0.0002562 -0.000170758 -8.50511E-05 9.16679E-07 8.62572E-05 0.00016999 0.000252128 0.00033268 0.000411658 0.000489071 0.000564929 0.000639243 0.000712021 0.000783275 0.000853012 0.000921245 0.000987981 0.00105323 0.001117 0.00117931 0.00124016 0.00129956 0.00135752 0.00141405 0.00146916 0.00152286 0.00157516 0.00162607 0.0016756 0.00172375 0.00177055 0.00181599 0.00186008 0.00190285 0.00194429 0.00198441 0.00202324 0.00206077 0.00209703 0.00213201 0.00216574 0.00219822 0.00222948 0.00225951 0.00228834 0.00231598 0.00234245 0.00236777 0.00239195 0.00241501 0.00243699 0.0024579 0.00247777 0.00249663 0.00251452 0.00253147 0.00254751 0.00256269 0.00257706 0.00259065 0.00260353 0.00261573 0.0026273 0.0026383 0.00264877 0.00265876 0.0026683 0.00267744 0.00268621 0.00269465 0.00270279 0.00271065 0.00271825 0.00272562 0.00273277 0.00273973 0.00274651 0.00275311 0.00275956 0.00276587 0.00277204 0.00277808 0.002784 0.00278981 0.00279552 0.00280112 0.00280664 0.00281206 0.00281741 0.00282267 0.00282786 0.00283298 0.00283804 0.00284302 0.00284795 0.00285282 0.00285764 0.0028624 0.00286712 0.00287178 0.0028764 0.00288098 0.00288551 0.00289 0.00289446 0.00289887 0.00290325 0.0029076 0.00291191 0.0029162 0.00292045 0.00292467 0.00292886 0.00293303 0.00293717 0.00294128 0.00294537 0.00294943 0.00295347 0.00295749 0.00296149 0.00296546 0.00296942 0.00297335 0.00297727 0.00298116 0.00298504 0.0029889 0.00299274 0.00299657 0.00300038 0.00300417 0.00300795 0.00301171 0.00301546 0.00301919 0.00302291 0.00302661 0.00303031 0.00303398 0.00303765 0.0030413 0.00304494 0.00304857 0.00305219 0.00305579 0.00305939 0.00306297 0.00306654 0.00307011 0.00307366 0.0030772 0.00308073 0.00308426 0.00308777 0.00309128 0.00309478 0.00309826 0.00310174 0.00310522 0.00310868 0.00311214 0.00311559 0.00311903 0.00312247 0.0031259 0.00312932 0.00313274 0.00313615 0.00313955 0.00314295 0.00314635 0.00314974 0.00315312 0.0031565 0.00315988 0.00316325 0.00316662 0.00316998 0.00317334 0.0031767 0.00318006 0.00318341 0.00318676 -0.000849106 -0.000765338 -0.000681293 -0.000596973 -0.000512377 -0.000427505 -0.000342358 -0.000256936 -0.00017124 -8.52709E-05 9.67136E-07 8.659E-05 0.000170616 0.000253057 0.000333923 0.000413225 0.000490973 0.000567175 0.000641843 0.000714985 0.000786611 0.000856732 0.000925356 0.000992492 0.00105815 0.00112234 0.00118508 0.00124636 0.0013062 0.00136462 0.00142161 0.00147719 0.00153137 0.00158415 0.00163555 0.00168558 0.00173424 0.00178154 0.0018275 0.00187212 0.00191542 0.0019574 0.00199807 0.00203745 0.00207554 0.00211235 0.0021479 0.0021822 0.00221526 0.00224709 0.0022777 0.00230711 0.00233534 0.0023624 0.0023883 0.00241307 0.00243672 0.00245928 0.00248077 0.00250121 0.00252064 0.00253908 0.00255657 0.00257314 0.00258883 0.0026037 0.00261777 0.0026311 0.00264373 0.00265571 0.0026671 0.00267793 0.00268826 0.00269812 0.00270756 0.00271662 0.00272532 0.0027337 0.00274179 0.00274961 0.00275719 0.00276454 0.00277168 0.00277863 0.00278541 0.00279202 0.00279847 0.00280479 0.00281097 0.00281703 0.00282297 0.0028288 0.00283453 0.00284016 0.0028457 0.00285115 0.00285652 0.00286181 0.00286703 0.00287218 0.00287726 0.00288228 0.00288724 0.00289215 0.00289699 0.00290179 0.00290653 0.00291123 0.00291588 0.00292049 0.00292506 0.00292958 0.00293407 0.00293852 0.00294294 0.00294732 0.00295166 0.00295598 0.00296026 0.00296452 0.00296874 0.00297294 0.00297711 0.00298126 0.00298538 0.00298948 0.00299355 0.0029976 0.00300163 0.00300564 0.00300963 0.00301359 0.00301754 0.00302147 0.00302538 0.00302927 0.00303314 0.003037 0.00304084 0.00304466 0.00304847 0.00305226 0.00305604 0.00305981 0.00306356 0.00306729 0.00307101 0.00307472 0.00307842 0.0030821 0.00308577 0.00308943 0.00309307 0.00309671 0.00310033 0.00310395 0.00310755 0.00311114 0.00311472 0.00311829 0.00312185 0.00312541 0.00312895 0.00313248 0.00313601 0.00313953 0.00314304 0.00314654 0.00315003 0.00315352 0.003157 0.00316047 0.00316393 0.00316739 0.00317084 0.00317429 0.00317772 0.00318116 0.00318459 0.00318801 0.00319143 0.00319484 0.00319825 0.00320165 0.00320505 0.00320845 0.00321184 0.00321523 0.00321861 0.00322199 0.00322537 -0.000851351 -0.000767383 -0.000683133 -0.0005986 -0.000513785 -0.000428688 -0.000343309 -0.000257648 -0.000171704 -8.54804E-05 1.02019E-06 8.69175E-05 0.000171229 0.000253965 0.000335138 0.000414756 0.000492829 0.000569368 0.000644381 0.000717878 0.00078987 0.000860364 0.000929372 0.000996901 0.00106296 0.00112756 0.00119072 0.00125243 0.00131271 0.00137156 0.00142901 0.00148505 0.00153969 0.00159295 0.00164483 0.00169535 0.00174451 0.00179231 0.00183878 0.00188392 0.00192774 0.00197025 0.00201146 0.00205138 0.00209002 0.00212738 0.00216349 0.00219835 0.00223198 0.00226438 0.00229556 0.00232556 0.00235436 0.002382 0.00240848 0.00243383 0.00245807 0.0024812 0.00250326 0.00252428 0.00254427 0.00256326 0.00258129 0.0025984 0.00261461 0.00262997 0.00264453 0.00265832 0.00267139 0.0026838 0.00269558 0.00270679 0.00271746 0.00272766 0.0027374 0.00274675 0.00275572 0.00276436 0.00277269 0.00278073 0.00278852 0.00279607 0.00280341 0.00281054 0.00281749 0.00282426 0.00283088 0.00283734 0.00284367 0.00284986 0.00285594 0.0028619 0.00286775 0.0028735 0.00287915 0.00288472 0.00289019 0.00289559 0.00290091 0.00290616 0.00291134 0.00291645 0.0029215 0.00292649 0.00293142 0.0029363 0.00294113 0.00294591 0.00295064 0.00295532 0.00295996 0.00296456 0.00296912 0.00297364 0.00297812 0.00298257 0.00298698 0.00299136 0.00299571 0.00300003 0.00300432 0.00300858 0.00301281 0.00301701 0.00302119 0.00302534 0.00302947 0.00303358 0.00303766 0.00304172 0.00304576 0.00304978 0.00305378 0.00305776 0.00306172 0.00306566 0.00306958 0.00307349 0.00307737 0.00308125 0.0030851 0.00308894 0.00309276 0.00309657 0.00310037 0.00310415 0.00310791 0.00311166 0.0031154 0.00311913 0.00312284 0.00312654 0.00313023 0.0031339 0.00313757 0.00314122 0.00314486 0.00314849 0.00315211 0.00315572 0.00315932 0.00316292 0.0031665 0.00317007 0.00317363 0.00317719 0.00318073 0.00318427 0.0031878 0.00319132 0.00319483 0.00319834 0.00320184 0.00320533 0.00320882 0.0032123 0.00321577 0.00321924 0.0032227 0.00322615 0.0032296 0.00323305 0.00323649 0.00323993 0.00324336 0.00324679 0.00325021 0.00325363 0.00325704 0.00326046 0.00326387 -0.000853527 -0.000769365 -0.000684915 -0.000600176 -0.000515149 -0.000429833 -0.000344228 -0.000258334 -0.000172151 -8.56795E-05 1.07598E-06 8.72402E-05 0.000171829 0.000254853 0.000336323 0.00041625 0.000494641 0.000571508 0.000646859 0.000720704 0.000793052 0.000863913 0.000933295 0.00100121 0.00106766 0.00113267 0.00119623 0.00125836 0.00131906 0.00137836 0.00143624 0.00149274 0.00154784 0.00160157 0.00165392 0.00170492 0.00175457 0.00180287 0.00184984 0.00189549 0.00193983 0.00198286 0.00202459 0.00206504 0.00210422 0.00214213 0.00217879 0.00221421 0.00224839 0.00228135 0.00231311 0.00234367 0.00237305 0.00240126 0.00242832 0.00245424 0.00247905 0.00250276 0.00252539 0.00254697 0.00256752 0.00258707 0.00260565 0.00262328 0.00264002 0.00265589 0.00267093 0.00268519 0.00269871 0.00271154 0.00272373 0.00273532 0.00274636 0.0027569 0.00276696 0.0027766 0.00278586 0.00279476 0.00280333 0.00281161 0.00281962 0.00282738 0.00283491 0.00284223 0.00284935 0.0028563 0.00286307 0.00286969 0.00287617 0.0028825 0.00288871 0.0028948 0.00290078 0.00290665 0.00291243 0.0029181 0.00292369 0.0029292 0.00293462 0.00293997 0.00294524 0.00295045 0.00295559 0.00296067 0.00296569 0.00297066 0.00297557 0.00298043 0.00298524 0.00299 0.00299471 0.00299939 0.00300402 0.00300861 0.00301316 0.00301768 0.00302216 0.0030266 0.00303102 0.0030354 0.00303975 0.00304407 0.00304836 0.00305262 0.00305686 0.00306107 0.00306526 0.00306942 0.00307355 0.00307767 0.00308176 0.00308583 0.00308988 0.00309391 0.00309792 0.00310191 0.00310589 0.00310984 0.00311378 0.0031177 0.0031216 0.00312548 0.00312935 0.00313321 0.00313704 0.00314087 0.00314468 0.00314847 0.00315225 0.00315602 0.00315978 0.00316352 0.00316725 0.00317097 0.00317467 0.00317836 0.00318205 0.00318572 0.00318938 0.00319303 0.00319667 0.0032003 0.00320391 0.00320752 0.00321112 0.00321472 0.0032183 0.00322187 0.00322544 0.00322899 0.00323254 0.00323609 0.00323962 0.00324315 0.00324667 0.00325018 0.00325369 0.00325719 0.00326068 0.00326417 0.00326766 0.00327113 0.00327461 0.00327808 0.00328154 0.003285 0.00328845 0.0032919 0.00329535 0.0032988 0.00330224 -0.000855635 -0.000771285 -0.000686641 -0.000601702 -0.000516469 -0.00043094 -0.000345116 -0.000258996 -0.00017258 -8.58683E-05 1.13463E-06 8.75582E-05 0.000172416 0.000255721 0.000337482 0.000417709 0.000496411 0.000573598 0.000649279 0.000723463 0.00079616 0.000867379 0.000937128 0.00100542 0.00107226 0.00113765 0.00120162 0.00126416 0.00132528 0.001385 0.00144333 0.00150026 0.00155581 0.00161 0.00166282 0.00171429 0.00176442 0.00181321 0.00186068 0.00190683 0.00195167 0.00199521 0.00203747 0.00207845 0.00211815 0.0021566 0.0021938 0.00222976 0.0022645 0.00229802 0.00233033 0.00236145 0.0023914 0.00242018 0.00244781 0.0024743 0.00249968 0.00252396 0.00254716 0.0025693 0.00259041 0.00261051 0.00262963 0.0026478 0.00266506 0.00268143 0.00269697 0.00271171 0.00272569 0.00273896 0.00275156 0.00276354 0.00277495 0.00278583 0.00279623 0.00280618 0.00281572 0.00282489 0.00283372 0.00284224 0.00285048 0.00285845 0.00286618 0.00287369 0.002881 0.00288812 0.00289506 0.00290184 0.00290846 0.00291494 0.00292129 0.00292752 0.00293363 0.00293962 0.00294551 0.00295131 0.00295701 0.00296262 0.00296815 0.0029736 0.00297898 0.00298428 0.00298952 0.00299469 0.0029998 0.00300485 0.00300985 0.00301479 0.00301968 0.00302452 0.00302931 0.00303406 0.00303876 0.00304343 0.00304805 0.00305263 0.00305718 0.00306169 0.00306617 0.00307062 0.00307503 0.00307941 0.00308376 0.00308809 0.00309238 0.00309665 0.0031009 0.00310511 0.00310931 0.00311348 0.00311762 0.00312175 0.00312585 0.00312993 0.00313399 0.00313803 0.00314205 0.00314606 0.00315004 0.00315401 0.00315796 0.00316189 0.00316581 0.00316971 0.00317359 0.00317746 0.00318131 0.00318515 0.00318898 0.00319279 0.00319658 0.00320037 0.00320414 0.0032079 0.00321164 0.00321538 0.0032191 0.00322281 0.00322651 0.0032302 0.00323388 0.00323755 0.0032412 0.00324485 0.00324849 0.00325212 0.00325574 0.00325935 0.00326295 0.00326654 0.00327013 0.0032737 0.00327727 0.00328083 0.00328439 0.00328794 0.00329148 0.00329501 0.00329854 0.00330206 0.00330558 0.00330909 0.0033126 0.0033161 0.00331959 0.00332308 0.00332657 0.00333005 0.00333353 0.00333701 0.00334048 -0.000857676 -0.000773143 -0.000688311 -0.000603178 -0.000517745 -0.00043201 -0.000345973 -0.000259634 -0.000172991 -8.60467E-05 1.19627E-06 8.78719E-05 0.000172993 0.00025657 0.000338613 0.000419133 0.000498138 0.000575637 0.00065164 0.000726156 0.000799194 0.000870763 0.000940872 0.00100953 0.00107675 0.00114253 0.00120689 0.00126983 0.00133137 0.00139151 0.00145025 0.00150762 0.00156362 0.00161826 0.00167154 0.00172347 0.00177407 0.00182334 0.00187129 0.00191793 0.00196328 0.00200733 0.00205009 0.00209159 0.00213182 0.0021708 0.00220853 0.00224503 0.00228031 0.00231438 0.00234724 0.00237892 0.00240942 0.00243876 0.00246696 0.00249402 0.00251996 0.0025448 0.00256856 0.00259126 0.00261293 0.00263358 0.00265324 0.00267195 0.00268973 0.00270662 0.00272265 0.00273787 0.00275231 0.00276602 0.00277905 0.00279144 0.00280323 0.00281447 0.0028252 0.00283547 0.00284531 0.00285476 0.00286385 0.00287262 0.00288109 0.00288928 0.00289722 0.00290493 0.00291242 0.00291972 0.00292683 0.00293377 0.00294055 0.00294718 0.00295367 0.00296004 0.00296628 0.0029724 0.00297842 0.00298433 0.00299015 0.00299587 0.00300151 0.00300706 0.00301254 0.00301794 0.00302327 0.00302854 0.00303374 0.00303888 0.00304396 0.00304898 0.00305396 0.00305888 0.00306375 0.00306857 0.00307335 0.00307809 0.00308278 0.00308744 0.00309205 0.00309663 0.00310118 0.00310569 0.00311016 0.00311461 0.00311902 0.00312341 0.00312776 0.00313209 0.00313639 0.00314067 0.00314491 0.00314914 0.00315334 0.00315752 0.00316167 0.00316581 0.00316992 0.00317401 0.00317808 0.00318214 0.00318617 0.00319018 0.00319418 0.00319816 0.00320212 0.00320607 0.00321 0.00321391 0.00321781 0.00322169 0.00322556 0.00322942 0.00323326 0.00323708 0.0032409 0.0032447 0.00324848 0.00325226 0.00325602 0.00325977 0.00326351 0.00326724 0.00327096 0.00327466 0.00327836 0.00328204 0.00328572 0.00328939 0.00329304 0.00329669 0.00330033 0.00330396 0.00330758 0.00331119 0.00331479 0.00331839 0.00332198 0.00332556 0.00332914 0.00333271 0.00333627 0.00333982 0.00334337 0.00334692 0.00335046 0.00335399 0.00335752 0.00336104 0.00336456 0.00336807 0.00337158 0.00337509 0.00337859 -0.000859651 -0.000774941 -0.000689926 -0.000604605 -0.000518978 -0.000433043 -0.000346799 -0.000260247 -0.000173386 -8.62149E-05 1.26107E-06 8.81815E-05 0.000173557 0.0002574 0.000339719 0.000420524 0.000499824 0.000577629 0.000653946 0.000728786 0.000802158 0.000874069 0.000944529 0.00101355 0.00108113 0.00114729 0.00121204 0.00127538 0.00133732 0.00139786 0.00145703 0.00151483 0.00157126 0.00162634 0.00168007 0.00173246 0.00178352 0.00183326 0.00188169 0.00192882 0.00197465 0.0020192 0.00206247 0.00210447 0.00214522 0.00218472 0.00222298 0.00226001 0.00229583 0.00233043 0.00236384 0.00239607 0.00242713 0.00245702 0.00248577 0.00251339 0.00253989 0.00256529 0.00258961 0.00261287 0.00263509 0.00265628 0.00267649 0.00269573 0.00271404 0.00273144 0.00274797 0.00276367 0.00277859 0.00279275 0.00280621 0.002819 0.00283118 0.00284279 0.00285387 0.00286446 0.00287461 0.00288435 0.00289372 0.00290274 0.00291145 0.00291986 0.00292802 0.00293593 0.00294362 0.0029511 0.00295838 0.00296549 0.00297243 0.00297921 0.00298585 0.00299236 0.00299873 0.00300499 0.00301113 0.00301716 0.00302309 0.00302893 0.00303468 0.00304034 0.00304592 0.00305143 0.00305686 0.00306221 0.00306751 0.00307274 0.00307791 0.00308302 0.00308807 0.00309307 0.00309802 0.00310293 0.00310778 0.00311259 0.00311736 0.00312209 0.00312677 0.00313142 0.00313603 0.00314061 0.00314515 0.00314966 0.00315413 0.00315858 0.00316299 0.00316738 0.00317174 0.00317607 0.00318038 0.00318466 0.00318891 0.00319315 0.00319735 0.00320154 0.0032057 0.00320985 0.00321397 0.00321807 0.00322216 0.00322622 0.00323026 0.00323429 0.0032383 0.00324229 0.00324627 0.00325023 0.00325417 0.0032581 0.00326201 0.00326591 0.00326979 0.00327366 0.00327752 0.00328136 0.00328519 0.003289 0.00329281 0.0032966 0.00330038 0.00330415 0.0033079 0.00331165 0.00331538 0.0033191 0.00332282 0.00332652 0.00333021 0.0033339 0.00333757 0.00334124 0.0033449 0.00334854 0.00335218 0.00335582 0.00335944 0.00336306 0.00336667 0.00337027 0.00337386 0.00337745 0.00338104 0.00338461 0.00338818 0.00339175 0.00339531 0.00339886 0.00340241 0.00340596 0.0034095 0.00341304 0.00341657 -0.000861561 -0.000776679 -0.000691487 -0.000605984 -0.000520168 -0.000434039 -0.000347596 -0.000260837 -0.000173763 -8.63726E-05 1.32916E-06 8.84874E-05 0.000174111 0.000258212 0.000340799 0.000421882 0.00050147 0.000579572 0.000656197 0.000731354 0.000805051 0.000877297 0.000948101 0.00101747 0.00108542 0.00115195 0.00121707 0.0012808 0.00134313 0.00140408 0.00146366 0.00152188 0.00157874 0.00163425 0.00168842 0.00174126 0.00179278 0.00184298 0.00189188 0.00193949 0.0019858 0.00203084 0.00207461 0.00211711 0.00215837 0.00219838 0.00223716 0.00227471 0.00231105 0.0023462 0.00238014 0.00241291 0.00244451 0.00247495 0.00250425 0.00253242 0.00255948 0.00258543 0.0026103 0.00263411 0.00265688 0.00267862 0.00269937 0.00271915 0.00273798 0.00275589 0.00277293 0.00278912 0.00280451 0.00281912 0.00283302 0.00284623 0.00285881 0.0028708 0.00288223 0.00289316 0.00290363 0.00291366 0.00292331 0.00293259 0.00294155 0.0029502 0.00295858 0.0029667 0.00297458 0.00298225 0.00298971 0.00299699 0.00300409 0.00301103 0.00301782 0.00302447 0.00303099 0.00303737 0.00304364 0.0030498 0.00305586 0.00306181 0.00306767 0.00307344 0.00307913 0.00308473 0.00309026 0.00309572 0.0031011 0.00310642 0.00311168 0.00311688 0.00312202 0.0031271 0.00313214 0.00313712 0.00314205 0.00314694 0.00315178 0.00315658 0.00316133 0.00316605 0.00317073 0.00317537 0.00317998 0.00318455 0.00318909 0.0031936 0.00319808 0.00320252 0.00320694 0.00321133 0.00321569 0.00322003 0.00322434 0.00322863 0.00323289 0.00323713 0.00324135 0.00324554 0.00324971 0.00325387 0.003258 0.00326211 0.00326621 0.00327028 0.00327434 0.00327838 0.0032824 0.0032864 0.00329039 0.00329437 0.00329832 0.00330226 0.00330619 0.0033101 0.003314 0.00331788 0.00332176 0.00332561 0.00332946 0.00333329 0.00333711 0.00334091 0.00334471 0.00334849 0.00335227 0.00335603 0.00335978 0.00336352 0.00336725 0.00337097 0.00337468 0.00337839 0.00338208 0.00338576 0.00338944 0.00339311 0.00339677 0.00340042 0.00340406 0.0034077 0.00341133 0.00341495 0.00341856 0.00342217 0.00342578 0.00342938 0.00343297 0.00343655 0.00344014 0.00344371 0.00344728 0.00345085 0.00345442 -0.000863407 -0.000778359 -0.000692995 -0.000607314 -0.000521316 -0.000434999 -0.000348362 -0.000261403 -0.000174123 -8.652E-05 1.4007E-06 8.87898E-05 0.000174654 0.000259006 0.000341855 0.000423209 0.000503078 0.00058147 0.000658395 0.00073386 0.000807875 0.000880449 0.00095159 0.00102131 0.00108961 0.0011565 0.00122199 0.0012861 0.00134882 0.00141017 0.00147015 0.00152877 0.00158605 0.00164199 0.00169659 0.00174988 0.00180184 0.0018525 0.00190186 0.00194994 0.00199673 0.00204225 0.0020865 0.0021295 0.00217125 0.00221177 0.00225106 0.00228913 0.002326 0.00236166 0.00239614 0.00242944 0.00246158 0.00249256 0.00252241 0.00255112 0.00257872 0.00260523 0.00263065 0.00265501 0.00267832 0.0027006 0.00272189 0.00274219 0.00276155 0.00277998 0.00279752 0.00281421 0.00283007 0.00284515 0.00285949 0.00287313 0.00288611 0.00289848 0.00291029 0.00292156 0.00293235 0.00294269 0.00295262 0.00296218 0.00297139 0.00298028 0.00298888 0.00299722 0.00300531 0.00301317 0.00302082 0.00302827 0.00303554 0.00304264 0.00304959 0.00305638 0.00306304 0.00306956 0.00307596 0.00308225 0.00308842 0.0030945 0.00310047 0.00310635 0.00311215 0.00311786 0.00312349 0.00312904 0.00313453 0.00313994 0.00314529 0.00315057 0.0031558 0.00316097 0.00316608 0.00317114 0.00317615 0.00318112 0.00318603 0.00319091 0.00319573 0.00320052 0.00320527 0.00320998 0.00321465 0.00321929 0.0032239 0.00322847 0.003233 0.00323751 0.00324199 0.00324644 0.00325086 0.00325525 0.00325962 0.00326396 0.00326828 0.00327257 0.00327684 0.00328109 0.00328531 0.00328952 0.0032937 0.00329786 0.00330201 0.00330613 0.00331023 0.00331432 0.00331839 0.00332244 0.00332647 0.00333049 0.00333449 0.00333848 0.00334245 0.0033464 0.00335034 0.00335427 0.00335818 0.00336208 0.00336597 0.00336984 0.0033737 0.00337755 0.00338138 0.0033852 0.00338902 0.00339282 0.00339661 0.00340039 0.00340415 0.00340791 0.00341166 0.0034154 0.00341913 0.00342285 0.00342656 0.00343026 0.00343396 0.00343764 0.00344132 0.00344499 0.00344865 0.00345231 0.00345596 0.0034596 0.00346324 0.00346687 0.00347049 0.00347411 0.00347772 0.00348133 0.00348494 0.00348853 0.00349213 -0.00086519 -0.00077998 -0.00069445 -0.000608598 -0.000522423 -0.000435924 -0.000349099 -0.000261946 -0.000174466 -8.6657E-05 1.47588E-06 8.90891E-05 0.000175188 0.000259784 0.000342886 0.000424505 0.000504647 0.000583322 0.00066054 0.000736307 0.000810633 0.000883527 0.000954997 0.00102505 0.0010937 0.00116095 0.0012268 0.00129128 0.00135438 0.00141611 0.00147649 0.00153552 0.00159321 0.00164957 0.0017046 0.00175831 0.00181072 0.00186183 0.00191164 0.00196018 0.00200743 0.00205343 0.00209816 0.00214165 0.00218389 0.00222491 0.0022647 0.00230328 0.00234066 0.00237685 0.00241185 0.00244568 0.00247834 0.00250986 0.00254024 0.0025695 0.00259764 0.00262468 0.00265065 0.00267555 0.0026994 0.00272223 0.00274405 0.00276488 0.00278476 0.00280371 0.00282176 0.00283893 0.00285528 0.00287083 0.00288562 0.00289969 0.00291308 0.00292585 0.00293802 0.00294965 0.00296077 0.00297143 0.00298166 0.00299149 0.00300096 0.0030101 0.00301894 0.0030275 0.00303579 0.00304385 0.00305169 0.00305932 0.00306677 0.00307403 0.00308113 0.00308808 0.00309488 0.00310155 0.00310808 0.0031145 0.0031208 0.00312699 0.00313308 0.00313908 0.00314498 0.0031508 0.00315653 0.00316219 0.00316777 0.00317328 0.00317872 0.00318409 0.00318941 0.00319466 0.00319986 0.003205 0.00321009 0.00321513 0.00322013 0.00322507 0.00322998 0.00323483 0.00323965 0.00324443 0.00324917 0.00325388 0.00325854 0.00326318 0.00326778 0.00327235 0.00327689 0.00328139 0.00328587 0.00329033 0.00329475 0.00329915 0.00330352 0.00330787 0.00331219 0.00331649 0.00332077 0.00332502 0.00332925 0.00333347 0.00333766 0.00334183 0.00334598 0.00335012 0.00335423 0.00335833 0.00336241 0.00336647 0.00337052 0.00337455 0.00337856 0.00338256 0.00338655 0.00339052 0.00339447 0.00339841 0.00340234 0.00340625 0.00341015 0.00341404 0.00341791 0.00342178 0.00342563 0.00342947 0.00343329 0.00343711 0.00344092 0.00344471 0.0034485 0.00345227 0.00345604 0.00345979 0.00346354 0.00346728 0.00347101 0.00347473 0.00347844 0.00348215 0.00348584 0.00348953 0.00349322 0.00349689 0.00350056 0.00350422 0.00350788 0.00351153 0.00351518 0.00351882 0.00352245 0.00352608 0.00352971 -0.00086691 -0.000781545 -0.000695853 -0.000609836 -0.000523489 -0.000436813 -0.000349806 -0.000262466 -0.000174792 -8.67835E-05 1.55485E-06 8.93855E-05 0.000175712 0.000260545 0.000343895 0.00042577 0.000506179 0.000585131 0.000662633 0.000738696 0.000813326 0.000886532 0.000958324 0.00102871 0.00109769 0.00116529 0.0012315 0.00129634 0.00135982 0.00142193 0.0014827 0.00154212 0.00160021 0.00165698 0.00171243 0.00176657 0.00181941 0.00187096 0.00192122 0.00197021 0.00201793 0.00206438 0.00210959 0.00215356 0.00219629 0.00223779 0.00227808 0.00231716 0.00235505 0.00239174 0.00242726 0.00246161 0.0024948 0.00252685 0.00255776 0.00258754 0.00261622 0.00264381 0.00267031 0.00269575 0.00272013 0.00274349 0.00276585 0.00278721 0.00280761 0.00282707 0.00284563 0.0028633 0.00288013 0.00289615 0.00291139 0.0029259 0.00293972 0.00295288 0.00296544 0.00297743 0.0029889 0.00299987 0.00301041 0.00302053 0.00303027 0.00303966 0.00304874 0.00305752 0.00306604 0.0030743 0.00308233 0.00309015 0.00309777 0.0031052 0.00311247 0.00311957 0.00312652 0.00313332 0.00314 0.00314655 0.00315297 0.00315929 0.0031655 0.00317161 0.00317763 0.00318355 0.00318939 0.00319515 0.00320083 0.00320644 0.00321197 0.00321744 0.00322284 0.00322818 0.00323347 0.00323869 0.00324386 0.00324898 0.00325405 0.00325908 0.00326405 0.00326898 0.00327387 0.00327872 0.00328353 0.0032883 0.00329304 0.00329773 0.0033024 0.00330703 0.00331163 0.0033162 0.00332074 0.00332525 0.00332973 0.00333418 0.00333861 0.00334301 0.00334739 0.00335174 0.00335607 0.00336038 0.00336466 0.00336892 0.00337317 0.00337739 0.00338159 0.00338577 0.00338993 0.00339408 0.0033982 0.00340231 0.0034064 0.00341048 0.00341454 0.00341858 0.00342261 0.00342662 0.00343062 0.0034346 0.00343857 0.00344252 0.00344646 0.00345039 0.00345431 0.00345821 0.0034621 0.00346598 0.00346984 0.0034737 0.00347754 0.00348137 0.0034852 0.00348901 0.00349281 0.0034966 0.00350038 0.00350416 0.00350792 0.00351168 0.00351543 0.00351916 0.0035229 0.00352662 0.00353034 0.00353404 0.00353775 0.00354144 0.00354513 0.00354881 0.00355249 0.00355616 0.00355983 0.00356349 0.00356715 -0.000868569 -0.000783052 -0.000697205 -0.000611027 -0.000524515 -0.000437668 -0.000350484 -0.000262963 -0.000175101 -8.68995E-05 1.6378E-06 8.96794E-05 0.000176227 0.000261291 0.000344881 0.000427007 0.000507675 0.000586896 0.000664678 0.000741027 0.000815954 0.000889467 0.000961572 0.00103228 0.0011016 0.00116953 0.0012361 0.00130129 0.00136513 0.00142762 0.00148877 0.00154858 0.00160707 0.00166424 0.0017201 0.00177466 0.00182792 0.0018799 0.0019306 0.00198003 0.00202821 0.00207512 0.0021208 0.00216523 0.00220844 0.00225043 0.00229121 0.00233078 0.00236916 0.00240636 0.00244239 0.00247725 0.00251096 0.00254353 0.00257496 0.00260527 0.00263448 0.0026626 0.00268963 0.0027156 0.00274052 0.00276441 0.00278729 0.00280918 0.0028301 0.00285008 0.00286914 0.00288731 0.00290462 0.00292112 0.00293682 0.00295177 0.00296602 0.00297959 0.00299254 0.0030049 0.00301671 0.00302802 0.00303886 0.00304928 0.0030593 0.00306896 0.00307828 0.0030873 0.00309603 0.0031045 0.00311273 0.00312074 0.00312854 0.00313615 0.00314358 0.00315084 0.00315794 0.00316489 0.00317171 0.00317839 0.00318495 0.00319139 0.00319773 0.00320396 0.00321009 0.00321612 0.00322207 0.00322793 0.00323371 0.00323942 0.00324505 0.00325061 0.0032561 0.00326153 0.0032669 0.00327221 0.00327747 0.00328267 0.00328781 0.00329291 0.00329796 0.00330297 0.00330793 0.00331285 0.00331773 0.00332257 0.00332737 0.00333213 0.00333686 0.00334155 0.00334622 0.00335084 0.00335544 0.00336001 0.00336455 0.00336906 0.00337355 0.003378 0.00338243 0.00338684 0.00339122 0.00339558 0.00339992 0.00340423 0.00340852 0.0034128 0.00341705 0.00342128 0.00342549 0.00342968 0.00343385 0.00343801 0.00344214 0.00344626 0.00345037 0.00345445 0.00345852 0.00346258 0.00346662 0.00347064 0.00347465 0.00347865 0.00348263 0.0034866 0.00349055 0.0034945 0.00349843 0.00350234 0.00350625 0.00351014 0.00351402 0.00351789 0.00352175 0.0035256 0.00352944 0.00353327 0.00353709 0.0035409 0.0035447 0.00354849 0.00355227 0.00355604 0.00355981 0.00356357 0.00356732 0.00357106 0.00357479 0.00357852 0.00358224 0.00358596 0.00358967 0.00359337 0.00359707 0.00360076 0.00360445 -0.000870167 -0.000784504 -0.000698507 -0.000612173 -0.000525501 -0.000438488 -0.000351134 -0.000263436 -0.000175393 -8.70049E-05 1.72492E-06 8.99712E-05 0.000176733 0.000262021 0.000345845 0.000428215 0.000509137 0.00058862 0.000666673 0.000743304 0.000818521 0.000892332 0.000964745 0.00103577 0.00110541 0.00117368 0.00124058 0.00130613 0.00137032 0.00143318 0.0014947 0.00155489 0.00161377 0.00167134 0.0017276 0.00178257 0.00183625 0.00188866 0.00193979 0.00198966 0.00203828 0.00208565 0.00213178 0.00217668 0.00222035 0.00226282 0.00230408 0.00234414 0.00238301 0.00242071 0.00245724 0.0024926 0.00252682 0.0025599 0.00259185 0.00262269 0.00265242 0.00268106 0.00270862 0.00273512 0.00276057 0.00278498 0.00280839 0.0028308 0.00285224 0.00287273 0.00289229 0.00291096 0.00292876 0.00294573 0.0029619 0.0029773 0.00299197 0.00300596 0.0030193 0.00303204 0.00304422 0.00305586 0.00306703 0.00307775 0.00308805 0.00309798 0.00310756 0.00311681 0.00312577 0.00313446 0.0031429 0.0031511 0.00315909 0.00316687 0.00317447 0.00318189 0.00318915 0.00319625 0.00320321 0.00321003 0.00321672 0.0032233 0.00322975 0.0032361 0.00324235 0.0032485 0.00325456 0.00326052 0.00326641 0.00327221 0.00327794 0.0032836 0.00328918 0.0032947 0.00330016 0.00330556 0.00331089 0.00331618 0.0033214 0.00332658 0.00333171 0.00333679 0.00334182 0.00334681 0.00335176 0.00335667 0.00336154 0.00336637 0.00337116 0.00337592 0.00338064 0.00338533 0.00338999 0.00339462 0.00339922 0.00340379 0.00340833 0.00341284 0.00341733 0.00342179 0.00342623 0.00343064 0.00343503 0.00343939 0.00344373 0.00344805 0.00345235 0.00345663 0.00346089 0.00346513 0.00346935 0.00347355 0.00347773 0.0034819 0.00348605 0.00349018 0.00349429 0.00349839 0.00350248 0.00350654 0.00351059 0.00351463 0.00351866 0.00352266 0.00352666 0.00353064 0.00353461 0.00353857 0.00354251 0.00354644 0.00355036 0.00355427 0.00355817 0.00356205 0.00356593 0.0035698 0.00357365 0.0035775 0.00358133 0.00358516 0.00358897 0.00359278 0.00359658 0.00360037 0.00360416 0.00360793 0.0036117 0.00361546 0.00361922 0.00362296 0.0036267 0.00363044 0.00363417 0.00363789 0.00364161 -0.000871705 -0.000785902 -0.000699758 -0.000613274 -0.000526447 -0.000439274 -0.000351755 -0.000263887 -0.000175669 -8.70996E-05 1.81641E-06 9.0261E-05 0.000177231 0.000262737 0.000346789 0.000429395 0.000510564 0.000590303 0.000668621 0.000745526 0.000821026 0.000895129 0.000967843 0.00103918 0.00110914 0.00117773 0.00124497 0.00131086 0.0013754 0.00143862 0.0015005 0.00156107 0.00162033 0.00167828 0.00173494 0.00179032 0.00184441 0.00189723 0.00194879 0.00199909 0.00204814 0.00209596 0.00214254 0.00218789 0.00223203 0.00227497 0.0023167 0.00235724 0.0023966 0.00243478 0.00247181 0.00250767 0.00254239 0.00257598 0.00260844 0.00263979 0.00267004 0.0026992 0.00272728 0.0027543 0.00278027 0.00280521 0.00282914 0.00285207 0.00287402 0.00289502 0.00291509 0.00293426 0.00295255 0.00296999 0.00298662 0.00300248 0.00301759 0.003032 0.00304574 0.00305887 0.00307141 0.0030834 0.0030949 0.00310592 0.00311652 0.00312672 0.00313656 0.00314607 0.00315526 0.00316417 0.00317282 0.00318122 0.0031894 0.00319736 0.00320513 0.00321272 0.00322013 0.00322739 0.0032345 0.00324146 0.00324829 0.00325499 0.00326158 0.00326805 0.00327442 0.00328068 0.00328685 0.00329293 0.00329892 0.00330482 0.00331065 0.0033164 0.00332208 0.0033277 0.00333324 0.00333873 0.00334415 0.00334951 0.00335482 0.00336008 0.00336528 0.00337044 0.00337555 0.00338061 0.00338563 0.00339061 0.00339554 0.00340044 0.0034053 0.00341012 0.00341491 0.00341966 0.00342438 0.00342907 0.00343373 0.00343836 0.00344296 0.00344753 0.00345207 0.00345658 0.00346107 0.00346554 0.00346998 0.0034744 0.00347879 0.00348316 0.00348751 0.00349184 0.00349615 0.00350043 0.0035047 0.00350895 0.00351318 0.00351739 0.00352158 0.00352576 0.00352992 0.00353406 0.00353819 0.0035423 0.00354639 0.00355047 0.00355453 0.00355858 0.00356262 0.00356664 0.00357065 0.00357465 0.00357863 0.0035826 0.00358656 0.00359051 0.00359444 0.00359836 0.00360228 0.00360618 0.00361007 0.00361395 0.00361782 0.00362168 0.00362554 0.00362938 0.00363321 0.00363704 0.00364086 0.00364466 0.00364847 0.00365226 0.00365605 0.00365983 0.0036636 0.00366737 0.00367113 0.00367488 0.00367863 -0.000873185 -0.000787244 -0.00070096 -0.000614331 -0.000527354 -0.000440027 -0.000352348 -0.000264316 -0.000175928 -8.71835E-05 1.91248E-06 9.05493E-05 0.000177721 0.000263439 0.000347712 0.000430549 0.000511957 0.000591946 0.000670523 0.000747695 0.000823471 0.00089786 0.000970868 0.0010425 0.00111277 0.00118169 0.00124925 0.00131548 0.00138037 0.00144393 0.00150618 0.00156711 0.00162674 0.00168508 0.00174213 0.0017979 0.0018524 0.00190563 0.0019576 0.00200833 0.00205781 0.00210606 0.00215308 0.00219889 0.00224348 0.00228688 0.00232908 0.00237009 0.00240993 0.00244859 0.0024861 0.00252246 0.00255768 0.00259177 0.00262473 0.00265659 0.00268735 0.00271702 0.00274562 0.00277315 0.00279964 0.0028251 0.00284954 0.00287299 0.00289545 0.00291696 0.00293753 0.0029572 0.00297598 0.0029939 0.003011 0.00302731 0.00304286 0.0030577 0.00307185 0.00308537 0.00309828 0.00311063 0.00312246 0.00313381 0.00314471 0.00315519 0.0031653 0.00317506 0.00318449 0.00319363 0.00320249 0.0032111 0.00321947 0.00322762 0.00323557 0.00324332 0.0032509 0.00325831 0.00326557 0.00327268 0.00327965 0.00328649 0.0032932 0.0032998 0.00330629 0.00331267 0.00331895 0.00332514 0.00333124 0.00333725 0.00334318 0.00334903 0.0033548 0.00336051 0.00336614 0.00337172 0.00337723 0.00338267 0.00338807 0.0033934 0.00339869 0.00340392 0.0034091 0.00341424 0.00341933 0.00342438 0.00342939 0.00343435 0.00343928 0.00344417 0.00344902 0.00345383 0.00345862 0.00346337 0.00346808 0.00347277 0.00347742 0.00348205 0.00348665 0.00349122 0.00349577 0.00350029 0.00350478 0.00350925 0.00351369 0.00351812 0.00352252 0.00352689 0.00353125 0.00353559 0.0035399 0.0035442 0.00354847 0.00355273 0.00355697 0.00356119 0.00356539 0.00356958 0.00357375 0.0035779 0.00358204 0.00358616 0.00359027 0.00359436 0.00359844 0.0036025 0.00360655 0.00361058 0.00361461 0.00361861 0.00362261 0.0036266 0.00363057 0.00363453 0.00363848 0.00364242 0.00364635 0.00365026 0.00365417 0.00365807 0.00366195 0.00366583 0.0036697 0.00367356 0.00367741 0.00368125 0.00368509 0.00368892 0.00369274 0.00369655 0.00370035 0.00370415 0.00370795 0.00371173 0.00371551 -0.000874605 -0.000788533 -0.000702113 -0.000615344 -0.000528222 -0.000440746 -0.000352913 -0.000264722 -0.00017617 -8.72566E-05 2.01335E-06 9.08364E-05 0.000178204 0.000264127 0.000348615 0.000431677 0.000513319 0.000593551 0.000672379 0.000749813 0.000825859 0.000900526 0.000973821 0.00104575 0.00111633 0.00118555 0.00125344 0.00131999 0.00138522 0.00144913 0.00151172 0.00157302 0.00163302 0.00169173 0.00174916 0.00180532 0.00186021 0.00191385 0.00196623 0.00201737 0.00206728 0.00211596 0.00216342 0.00220967 0.00225471 0.00229856 0.00234121 0.00238269 0.002423 0.00246214 0.00250013 0.00253698 0.00257269 0.00260727 0.00264073 0.00267309 0.00270435 0.00273453 0.00276364 0.00279168 0.00281868 0.00284465 0.00286961 0.00289356 0.00291654 0.00293855 0.00295963 0.00297978 0.00299905 0.00301746 0.00303503 0.00305179 0.00306779 0.00308306 0.00309763 0.00311154 0.00312483 0.00313754 0.00314972 0.00316139 0.0031726 0.00318338 0.00319376 0.00320378 0.00321346 0.00322283 0.00323191 0.00324073 0.0032493 0.00325764 0.00326577 0.0032737 0.00328145 0.00328902 0.00329643 0.00330368 0.0033108 0.00331777 0.00332462 0.00333134 0.00333796 0.00334446 0.00335086 0.00335716 0.00336336 0.00336948 0.00337551 0.00338146 0.00338734 0.00339314 0.00339887 0.00340453 0.00341012 0.00341566 0.00342114 0.00342655 0.00343192 0.00343723 0.00344249 0.0034477 0.00345287 0.00345798 0.00346306 0.0034681 0.00347309 0.00347804 0.00348296 0.00348784 0.00349269 0.0034975 0.00350227 0.00350702 0.00351174 0.00351642 0.00352108 0.0035257 0.0035303 0.00353488 0.00353942 0.00354395 0.00354844 0.00355292 0.00355737 0.0035618 0.0035662 0.00357059 0.00357495 0.00357929 0.00358362 0.00358792 0.0035922 0.00359647 0.00360072 0.00360495 0.00360916 0.00361336 0.00361754 0.0036217 0.00362585 0.00362998 0.0036341 0.00363821 0.0036423 0.00364637 0.00365043 0.00365448 0.00365852 0.00366254 0.00366655 0.00367055 0.00367454 0.00367851 0.00368248 0.00368643 0.00369037 0.0036943 0.00369823 0.00370214 0.00370604 0.00370994 0.00371382 0.0037177 0.00372157 0.00372543 0.00372928 0.00373313 0.00373696 0.0037408 0.00374462 0.00374844 0.00375225 -0.000875968 -0.000789769 -0.000703218 -0.000616313 -0.000529052 -0.000441432 -0.00035345 -0.000265106 -0.000176395 -8.73186E-05 2.11925E-06 9.11227E-05 0.00017868 0.000264803 0.0003495 0.000432779 0.000514649 0.000595118 0.000674192 0.00075188 0.00082819 0.000903129 0.000976705 0.00104893 0.0011198 0.00118933 0.00125753 0.0013244 0.00138996 0.00145421 0.00151715 0.0015788 0.00163916 0.00169824 0.00175604 0.00181258 0.00186786 0.0019219 0.00197468 0.00202623 0.00207656 0.00212566 0.00217355 0.00222023 0.00226571 0.00231001 0.00235312 0.00239505 0.00243582 0.00247544 0.0025139 0.00255122 0.00258741 0.00262248 0.00265644 0.00268929 0.00272105 0.00275173 0.00278134 0.00280989 0.0028374 0.00286388 0.00288934 0.0029138 0.00293728 0.0029598 0.00298137 0.00300202 0.00302178 0.00304066 0.0030587 0.00307593 0.00309238 0.00310808 0.00312307 0.00313738 0.00315106 0.00316414 0.00317667 0.00318867 0.0032002 0.00321128 0.00322194 0.00323222 0.00324216 0.00325177 0.00326108 0.00327011 0.00327888 0.00328742 0.00329574 0.00330385 0.00331176 0.0033195 0.00332706 0.00333447 0.00334173 0.00334885 0.00335583 0.00336268 0.00336942 0.00337605 0.00338256 0.00338898 0.0033953 0.00340152 0.00340766 0.00341371 0.00341968 0.00342558 0.0034314 0.00343716 0.00344284 0.00344847 0.00345403 0.00345953 0.00346497 0.00347036 0.0034757 0.00348099 0.00348623 0.00349142 0.00349657 0.00350167 0.00350673 0.00351176 0.00351674 0.00352168 0.00352659 0.00353147 0.00353631 0.00354111 0.00354589 0.00355063 0.00355534 0.00356003 0.00356468 0.00356931 0.00357391 0.00357849 0.00358304 0.00358756 0.00359206 0.00359654 0.003601 0.00360543 0.00360984 0.00361424 0.00361861 0.00362296 0.00362729 0.0036316 0.00363589 0.00364017 0.00364443 0.00364867 0.00365289 0.0036571 0.00366129 0.00366546 0.00366962 0.00367377 0.0036779 0.00368201 0.00368611 0.0036902 0.00369428 0.00369834 0.00370239 0.00370642 0.00371045 0.00371446 0.00371846 0.00372245 0.00372643 0.0037304 0.00373436 0.0037383 0.00374224 0.00374617 0.00375009 0.003754 0.0037579 0.0037618 0.00376568 0.00376956 0.00377343 0.00377729 0.00378115 0.003785 0.00378884 -0.000877273 -0.000790952 -0.000704275 -0.000617239 -0.000529843 -0.000442084 -0.00035396 -0.000265467 -0.000176604 -8.73695E-05 2.23041E-06 9.14084E-05 0.00017915 0.000265466 0.000350366 0.000433858 0.00051595 0.000596648 0.000675962 0.000753899 0.000830466 0.00090567 0.00097952 0.00105202 0.00112319 0.00119302 0.00126153 0.00132871 0.00139459 0.00145917 0.00152245 0.00158445 0.00164516 0.0017046 0.00176277 0.00181969 0.00187535 0.00192977 0.00198296 0.00203491 0.00208564 0.00213516 0.00218347 0.00223058 0.0022765 0.00232123 0.00236479 0.00240718 0.0024484 0.00248848 0.00252741 0.0025652 0.00260187 0.00263742 0.00267186 0.0027052 0.00273745 0.00276862 0.00279873 0.00282778 0.00285579 0.00288277 0.00290874 0.0029337 0.00295768 0.0029807 0.00300277 0.00302391 0.00304416 0.00306352 0.00308203 0.00309972 0.00311662 0.00313276 0.00314817 0.00316289 0.00317696 0.00319042 0.00320331 0.00321565 0.0032275 0.00323888 0.00324984 0.0032604 0.00327059 0.00328044 0.00328998 0.00329924 0.00330822 0.00331696 0.00332547 0.00333376 0.00334185 0.00334975 0.00335748 0.00336504 0.00337245 0.00337971 0.00338683 0.00339382 0.00340068 0.00340743 0.00341407 0.0034206 0.00342703 0.00343337 0.00343961 0.00344577 0.00345184 0.00345784 0.00346376 0.0034696 0.00347538 0.00348109 0.00348674 0.00349232 0.00349785 0.00350332 0.00350874 0.0035141 0.00351942 0.00352469 0.00352991 0.00353508 0.00354021 0.0035453 0.00355035 0.00355536 0.00356034 0.00356527 0.00357017 0.00357504 0.00357988 0.00358468 0.00358945 0.00359419 0.0035989 0.00360359 0.00360824 0.00361287 0.00361748 0.00362205 0.00362661 0.00363114 0.00363564 0.00364012 0.00364459 0.00364902 0.00365344 0.00365784 0.00366222 0.00366658 0.00367092 0.00367524 0.00367954 0.00368382 0.00368809 0.00369234 0.00369657 0.00370079 0.00370499 0.00370918 0.00371335 0.0037175 0.00372164 0.00372577 0.00372989 0.00373399 0.00373807 0.00374215 0.00374621 0.00375026 0.0037543 0.00375832 0.00376234 0.00376634 0.00377034 0.00377432 0.00377829 0.00378226 0.00378621 0.00379016 0.00379409 0.00379802 0.00380194 0.00380585 0.00380975 0.00381365 0.00381753 0.00382142 0.00382529 -0.000878522 -0.000792083 -0.000705284 -0.000618123 -0.000530597 -0.000442704 -0.000354441 -0.000265806 -0.000176795 -8.74091E-05 2.34709E-06 9.16941E-05 0.000179614 0.000266118 0.000351215 0.000434913 0.00051722 0.000598144 0.000677691 0.00075587 0.000832687 0.000908152 0.00098227 0.00105505 0.0011265 0.00119662 0.00126543 0.00133293 0.00139912 0.00146402 0.00152764 0.00158997 0.00165103 0.00171083 0.00176936 0.00182665 0.00188268 0.00193749 0.00199106 0.00204341 0.00209454 0.00214447 0.00219319 0.00224072 0.00228707 0.00233223 0.00237623 0.00241906 0.00246074 0.00250127 0.00254066 0.00257892 0.00261605 0.00265208 0.00268699 0.00272082 0.00275356 0.00278522 0.00281582 0.00284536 0.00287387 0.00290135 0.00292781 0.00295327 0.00297775 0.00300126 0.00302383 0.00304546 0.00306619 0.00308603 0.00310501 0.00312317 0.00314052 0.00315709 0.00317293 0.00318807 0.00320254 0.00321638 0.00322963 0.00324232 0.0032545 0.0032662 0.00327745 0.00328829 0.00329875 0.00330885 0.00331863 0.00332811 0.00333731 0.00334626 0.00335496 0.00336344 0.0033717 0.00337978 0.00338767 0.00339539 0.00340295 0.00341035 0.00341761 0.00342474 0.00343174 0.00343861 0.00344537 0.00345203 0.00345857 0.00346502 0.00347137 0.00347764 0.00348381 0.00348991 0.00349592 0.00350187 0.00350773 0.00351354 0.00351927 0.00352494 0.00353055 0.00353611 0.0035416 0.00354705 0.00355244 0.00355778 0.00356307 0.00356832 0.00357352 0.00357868 0.0035838 0.00358887 0.00359391 0.00359891 0.00360388 0.00360881 0.0036137 0.00361856 0.00362339 0.00362819 0.00363296 0.0036377 0.00364241 0.0036471 0.00365175 0.00365638 0.00366099 0.00366557 0.00367013 0.00367466 0.00367917 0.00368366 0.00368813 0.00369257 0.003697 0.0037014 0.00370578 0.00371015 0.0037145 0.00371883 0.00372314 0.00372743 0.00373171 0.00373597 0.00374021 0.00374444 0.00374865 0.00375284 0.00375703 0.00376119 0.00376535 0.00376949 0.00377361 0.00377773 0.00378183 0.00378591 0.00378999 0.00379405 0.0037981 0.00380214 0.00380617 0.00381019 0.0038142 0.0038182 0.00382219 0.00382616 0.00383013 0.0038341 0.00383805 0.00384199 0.00384593 0.00384985 0.00385377 0.00385769 0.00386159 -0.000879714 -0.000793162 -0.000706247 -0.000618965 -0.000531314 -0.000443292 -0.000354896 -0.000266122 -0.00017697 -8.74373E-05 2.46954E-06 9.198E-05 0.000180072 0.000266758 0.000352047 0.000435946 0.000518462 0.000599604 0.000679379 0.000757794 0.000834857 0.000910574 0.000984954 0.001058 0.00112973 0.00120014 0.00126924 0.00133704 0.00140355 0.00146877 0.00153271 0.00159537 0.00165677 0.00171692 0.00177581 0.00183345 0.00188986 0.00194504 0.00199899 0.00205173 0.00210326 0.00215359 0.00220272 0.00225066 0.00229743 0.00234302 0.00238745 0.00243072 0.00247284 0.00251382 0.00255366 0.00259238 0.00262998 0.00266647 0.00270186 0.00273615 0.00276937 0.00280152 0.0028326 0.00286264 0.00289163 0.0029196 0.00294656 0.00297251 0.00299749 0.00302149 0.00304454 0.00306666 0.00308787 0.0031082 0.00312765 0.00314627 0.00316407 0.00318109 0.00319736 0.00321292 0.00322779 0.00324202 0.00325564 0.00326869 0.0032812 0.00329322 0.00330477 0.0033159 0.00332663 0.00333699 0.00334702 0.00335673 0.00336615 0.0033753 0.0033842 0.00339287 0.00340133 0.00340957 0.00341763 0.00342551 0.00343323 0.00344078 0.00344819 0.00345545 0.00346258 0.00346959 0.00347647 0.00348325 0.00348991 0.00349647 0.00350294 0.00350931 0.00351559 0.00352179 0.0035279 0.00353394 0.0035399 0.0035458 0.00355162 0.00355738 0.00356307 0.00356871 0.00357429 0.00357981 0.00358528 0.0035907 0.00359606 0.00360138 0.00360666 0.00361189 0.00361707 0.00362222 0.00362732 0.00363239 0.00363742 0.00364241 0.00364736 0.00365229 0.00365718 0.00366203 0.00366686 0.00367166 0.00367642 0.00368116 0.00368587 0.00369056 0.00369522 0.00369985 0.00370446 0.00370904 0.0037136 0.00371814 0.00372265 0.00372715 0.00373162 0.00373607 0.0037405 0.00374491 0.0037493 0.00375368 0.00375803 0.00376237 0.00376669 0.00377099 0.00377528 0.00377954 0.0037838 0.00378804 0.00379226 0.00379647 0.00380066 0.00380484 0.003809 0.00381315 0.00381729 0.00382142 0.00382553 0.00382963 0.00383372 0.00383779 0.00384186 0.00384591 0.00384996 0.00385399 0.00385801 0.00386203 0.00386603 0.00387002 0.00387401 0.00387799 0.00388195 0.00388591 0.00388987 0.00389381 0.00389775 -0.000880852 -0.000794191 -0.000707162 -0.000619764 -0.000531993 -0.000443847 -0.000355322 -0.000266417 -0.000177127 -8.74539E-05 2.59804E-06 9.22665E-05 0.000180526 0.000267388 0.000352863 0.000436956 0.000519677 0.000601032 0.000681028 0.000759673 0.000836975 0.00091294 0.000987575 0.00106089 0.00113289 0.00120358 0.00127297 0.00134106 0.00140787 0.0014734 0.00153766 0.00160066 0.00166239 0.00172287 0.00178211 0.00184011 0.00189688 0.00195243 0.00200676 0.00205988 0.0021118 0.00216252 0.00221205 0.00226041 0.00230758 0.0023536 0.00239845 0.00244215 0.0024847 0.00252612 0.00256641 0.00260558 0.00264364 0.00268059 0.00271644 0.00275121 0.0027849 0.00281752 0.00284909 0.00287961 0.00290909 0.00293754 0.00296499 0.00299143 0.00301689 0.00304139 0.00306493 0.00308753 0.00310922 0.00313002 0.00314994 0.00316902 0.00318728 0.00320475 0.00322145 0.00323743 0.00325271 0.00326733 0.00328133 0.00329474 0.00330759 0.00331994 0.0033318 0.00334322 0.00335423 0.00336486 0.00337514 0.00338509 0.00339473 0.0034041 0.00341321 0.00342207 0.00343071 0.00343914 0.00344737 0.00345541 0.00346328 0.00347099 0.00347854 0.00348595 0.00349322 0.00350035 0.00350737 0.00351426 0.00352105 0.00352773 0.0035343 0.00354078 0.00354717 0.00355347 0.00355969 0.00356582 0.00357188 0.00357787 0.00358378 0.00358963 0.00359541 0.00360113 0.00360679 0.0036124 0.00361795 0.00362344 0.00362888 0.00363428 0.00363962 0.00364492 0.00365018 0.00365539 0.00366056 0.00366569 0.00367079 0.00367584 0.00368086 0.00368584 0.00369079 0.00369571 0.0037006 0.00370545 0.00371027 0.00371507 0.00371983 0.00372457 0.00372928 0.00373397 0.00373863 0.00374326 0.00374787 0.00375246 0.00375702 0.00376156 0.00376608 0.00377058 0.00377506 0.00377952 0.00378396 0.00378837 0.00379277 0.00379715 0.00380152 0.00380586 0.00381019 0.0038145 0.0038188 0.00382307 0.00382734 0.00383159 0.00383582 0.00384004 0.00384424 0.00384843 0.00385261 0.00385677 0.00386092 0.00386506 0.00386918 0.0038733 0.0038774 0.00388149 0.00388557 0.00388963 0.00389369 0.00389774 0.00390178 0.0039058 0.00390982 0.00391383 0.00391783 0.00392183 0.00392581 0.00392979 0.00393376 -0.000881934 -0.000795168 -0.000708032 -0.000620522 -0.000532635 -0.00044437 -0.000355722 -0.000266689 -0.000177268 -8.74587E-05 2.73288E-06 9.25541E-05 0.000180975 0.000268009 0.000353663 0.000437946 0.000520865 0.000602427 0.000682639 0.000761509 0.000839043 0.000915249 0.000990134 0.00106371 0.00113597 0.00120694 0.00127661 0.00134499 0.0014121 0.00147794 0.00154251 0.00160582 0.00166788 0.0017287 0.00178828 0.00184663 0.00190375 0.00195966 0.00201436 0.00206786 0.00212016 0.00217127 0.0022212 0.00226995 0.00231754 0.00236396 0.00240923 0.00245336 0.00249634 0.0025382 0.00257893 0.00261854 0.00265704 0.00269445 0.00273076 0.002766 0.00280015 0.00283325 0.00286528 0.00289628 0.00292624 0.00295517 0.0029831 0.00301003 0.00303598 0.00306095 0.00308498 0.00310806 0.00313023 0.0031515 0.0031719 0.00319144 0.00321015 0.00322807 0.00324521 0.00326161 0.0032773 0.00329232 0.00330669 0.00332047 0.00333368 0.00334636 0.00335854 0.00337026 0.00338156 0.00339245 0.00340299 0.00341318 0.00342306 0.00343264 0.00344196 0.00345102 0.00345985 0.00346846 0.00347687 0.00348508 0.00349311 0.00350098 0.00350868 0.00351623 0.00352364 0.00353091 0.00353805 0.00354508 0.00355198 0.00355878 0.00356547 0.00357206 0.00357856 0.00358497 0.00359128 0.00359752 0.00360368 0.00360976 0.00361576 0.0036217 0.00362757 0.00363338 0.00363912 0.00364481 0.00365043 0.00365601 0.00366153 0.00366699 0.00367241 0.00367779 0.00368311 0.00368839 0.00369363 0.00369883 0.00370399 0.00370911 0.00371419 0.00371924 0.00372425 0.00372922 0.00373417 0.00373908 0.00374396 0.00374881 0.00375363 0.00375842 0.00376319 0.00376793 0.00377264 0.00377732 0.00378199 0.00378662 0.00379124 0.00379583 0.00380039 0.00380494 0.00380947 0.00381397 0.00381845 0.00382292 0.00382736 0.00383178 0.00383619 0.00384058 0.00384495 0.0038493 0.00385364 0.00385796 0.00386226 0.00386655 0.00387083 0.00387508 0.00387933 0.00388356 0.00388777 0.00389197 0.00389616 0.00390033 0.0039045 0.00390865 0.00391278 0.00391691 0.00392102 0.00392513 0.00392922 0.0039333 0.00393737 0.00394144 0.00394549 0.00394953 0.00395357 0.00395759 0.00396161 0.00396562 0.00396962 -0.000882961 -0.000796095 -0.000708855 -0.000621238 -0.000533241 -0.000444861 -0.000356094 -0.000266939 -0.000177391 -8.74514E-05 2.87434E-06 9.2843E-05 0.000181421 0.00026862 0.000354449 0.000438916 0.000522027 0.000603791 0.000684213 0.000763301 0.000841063 0.000917505 0.000992634 0.00106646 0.00113898 0.00121021 0.00128016 0.00134883 0.00141623 0.00148237 0.00154724 0.00161087 0.00167325 0.0017344 0.00179431 0.001853 0.00191048 0.00196674 0.0020218 0.00207567 0.00212835 0.00217984 0.00223015 0.0022793 0.00232729 0.00237412 0.0024198 0.00246434 0.00250775 0.00255004 0.0025912 0.00263125 0.0026702 0.00270805 0.00274482 0.00278051 0.00281513 0.00284868 0.00288119 0.00291266 0.00294309 0.0029725 0.00300091 0.00302832 0.00305474 0.0030802 0.0031047 0.00312826 0.00315091 0.00317265 0.00319351 0.00321352 0.00323268 0.00325104 0.00326862 0.00328545 0.00330156 0.00331698 0.00333174 0.00334589 0.00335945 0.00337247 0.00338498 0.00339701 0.00340859 0.00341977 0.00343056 0.00344101 0.00345112 0.00346093 0.00347046 0.00347973 0.00348876 0.00349755 0.00350614 0.00351452 0.00352272 0.00353074 0.00353859 0.00354629 0.00355384 0.00356125 0.00356853 0.00357568 0.00358271 0.00358963 0.00359644 0.00360314 0.00360975 0.00361626 0.00362269 0.00362902 0.00363528 0.00364145 0.00364756 0.00365358 0.00365954 0.00366544 0.00367127 0.00367703 0.00368274 0.00368839 0.00369399 0.00369954 0.00370503 0.00371048 0.00371587 0.00372122 0.00372653 0.0037318 0.00373702 0.00374221 0.00374735 0.00375246 0.00375753 0.00376257 0.00376757 0.00377254 0.00377748 0.00378239 0.00378727 0.00379211 0.00379693 0.00380172 0.00380649 0.00381123 0.00381594 0.00382063 0.00382529 0.00382993 0.00383455 0.00383914 0.00384371 0.00384826 0.00385279 0.0038573 0.00386179 0.00386626 0.00387071 0.00387514 0.00387956 0.00388395 0.00388833 0.00389269 0.00389704 0.00390137 0.00390568 0.00390998 0.00391426 0.00391853 0.00392278 0.00392702 0.00393125 0.00393546 0.00393966 0.00394385 0.00394802 0.00395218 0.00395633 0.00396047 0.0039646 0.00396872 0.00397282 0.00397692 0.00398101 0.00398508 0.00398915 0.00399321 0.00399726 0.0040013 0.00400533 -0.000883934 -0.000796973 -0.000709633 -0.000621913 -0.00053381 -0.000445319 -0.000356439 -0.000267166 -0.000177497 -8.74319E-05 3.02275E-06 9.31339E-05 0.000181863 0.000269223 0.000355221 0.000439866 0.000523165 0.000605124 0.000685751 0.000765053 0.000843036 0.000919707 0.000995074 0.00106914 0.00114192 0.00121342 0.00128364 0.00135258 0.00142027 0.00148669 0.00155187 0.00161581 0.0016785 0.00173997 0.00180021 0.00185924 0.00191706 0.00197367 0.00202909 0.00208332 0.00213636 0.00218823 0.00223893 0.00228847 0.00233685 0.00238408 0.00243016 0.00247512 0.00251894 0.00256165 0.00260324 0.00264372 0.00268311 0.0027214 0.00275862 0.00279476 0.00282983 0.00286385 0.00289681 0.00292874 0.00295964 0.00298953 0.00301841 0.00304629 0.00307319 0.00309912 0.0031241 0.00314814 0.00317125 0.00319346 0.00321479 0.00323526 0.00325488 0.00327369 0.0032917 0.00330896 0.00332548 0.00334131 0.00335646 0.00337099 0.00338491 0.00339828 0.00341111 0.00342346 0.00343534 0.0034468 0.00345787 0.00346856 0.00347892 0.00348896 0.00349871 0.00350819 0.00351741 0.0035264 0.00353517 0.00354373 0.00355209 0.00356028 0.00356829 0.00357613 0.00358383 0.00359138 0.00359879 0.00360607 0.00361323 0.00362027 0.0036272 0.00363402 0.00364074 0.00364736 0.00365389 0.00366033 0.00366669 0.00367296 0.00367916 0.00368528 0.00369133 0.00369731 0.00370323 0.00370908 0.00371487 0.0037206 0.00372628 0.0037319 0.00373747 0.00374299 0.00374846 0.00375388 0.00375926 0.00376459 0.00376989 0.00377514 0.00378035 0.00378552 0.00379065 0.00379575 0.00380081 0.00380584 0.00381084 0.00381581 0.00382074 0.00382564 0.00383052 0.00383536 0.00384018 0.00384497 0.00384973 0.00385447 0.00385919 0.00386387 0.00386854 0.00387318 0.0038778 0.0038824 0.00388698 0.00389153 0.00389607 0.00390058 0.00390508 0.00390955 0.00391401 0.00391845 0.00392287 0.00392727 0.00393166 0.00393603 0.00394038 0.00394472 0.00394904 0.00395335 0.00395764 0.00396192 0.00396619 0.00397044 0.00397467 0.0039789 0.00398311 0.00398731 0.00399149 0.00399567 0.00399983 0.00400398 0.00400812 0.00401225 0.00401637 0.00402048 0.00402458 0.00402867 0.00403276 0.00403683 0.00404089 -0.000884853 -0.0007978 -0.000710366 -0.000622547 -0.000534342 -0.000445746 -0.000356757 -0.000267371 -0.000177586 -8.74E-05 3.17843E-06 9.3427E-05 0.000182302 0.000269817 0.00035598 0.000440798 0.000524279 0.000606429 0.000687255 0.000766764 0.000844963 0.000921858 0.000997458 0.00107177 0.00114479 0.00121655 0.00128703 0.00135625 0.00142421 0.00149092 0.0015564 0.00162063 0.00168364 0.00174542 0.00180599 0.00186534 0.0019235 0.00198046 0.00203622 0.00209081 0.00214422 0.00219645 0.00224753 0.00229744 0.00234621 0.00239384 0.00244032 0.00248568 0.00252992 0.00257304 0.00261505 0.00265596 0.00269578 0.00273451 0.00277216 0.00280874 0.00284426 0.00287873 0.00291216 0.00294455 0.00297591 0.00300626 0.0030356 0.00306395 0.00309133 0.00311773 0.00314318 0.00316769 0.00319127 0.00321395 0.00323574 0.00325666 0.00327674 0.003296 0.00331445 0.00333214 0.00334908 0.00336531 0.00338086 0.00339577 0.00341006 0.00342378 0.00343695 0.00344962 0.00346181 0.00347355 0.00348489 0.00349585 0.00350646 0.00351673 0.00352671 0.0035364 0.00354583 0.00355501 0.00356396 0.0035727 0.00358124 0.00358958 0.00359775 0.00360576 0.0036136 0.00362129 0.00362884 0.00363626 0.00364354 0.00365071 0.00365776 0.0036647 0.00367153 0.00367826 0.0036849 0.00369145 0.00369791 0.00370428 0.00371057 0.00371679 0.00372293 0.003729 0.00373501 0.00374094 0.00374682 0.00375263 0.00375839 0.00376409 0.00376973 0.00377533 0.00378087 0.00378637 0.00379181 0.00379722 0.00380258 0.00380789 0.00381317 0.00381841 0.0038236 0.00382876 0.00383389 0.00383898 0.00384403 0.00384906 0.00385405 0.00385901 0.00386394 0.00386883 0.00387371 0.00387855 0.00388337 0.00388816 0.00389292 0.00389766 0.00390237 0.00390707 0.00391173 0.00391638 0.003921 0.0039256 0.00393018 0.00393474 0.00393928 0.0039438 0.0039483 0.00395279 0.00395725 0.0039617 0.00396612 0.00397054 0.00397493 0.00397931 0.00398367 0.00398802 0.00399235 0.00399667 0.00400097 0.00400526 0.00400953 0.00401379 0.00401804 0.00402228 0.0040265 0.00403071 0.00403491 0.00403909 0.00404327 0.00404743 0.00405159 0.00405573 0.00405987 0.00406399 0.0040681 0.00407221 0.00407631 -0.000885719 -0.000798578 -0.000711053 -0.000623141 -0.000534838 -0.000446141 -0.000357048 -0.000267554 -0.000177656 -8.73553E-05 3.34172E-06 9.37228E-05 0.000182739 0.000270404 0.000356727 0.000441713 0.00052537 0.000607705 0.000688725 0.000768436 0.000846845 0.00092396 0.000999786 0.00107433 0.0011476 0.0012196 0.00129034 0.00135983 0.00142806 0.00149506 0.00156082 0.00162535 0.00168866 0.00175075 0.00181163 0.00187132 0.0019298 0.00198709 0.00204321 0.00209814 0.0021519 0.00220451 0.00225595 0.00230624 0.00235539 0.0024034 0.00245028 0.00249604 0.00254068 0.0025842 0.00262663 0.00266796 0.0027082 0.00274736 0.00278545 0.00282247 0.00285844 0.00289335 0.00292723 0.00296007 0.00299189 0.0030227 0.0030525 0.00308132 0.00310915 0.00313602 0.00316194 0.00318691 0.00321096 0.00323411 0.00325636 0.00327774 0.00329827 0.00331797 0.00333687 0.00335498 0.00337235 0.00338899 0.00340494 0.00342023 0.0034349 0.00344897 0.00346248 0.00347547 0.00348798 0.00350002 0.00351164 0.00352287 0.00353372 0.00354424 0.00355445 0.00356436 0.00357399 0.00358337 0.00359252 0.00360144 0.00361015 0.00361866 0.003627 0.00363515 0.00364315 0.00365098 0.00365868 0.00366623 0.00367365 0.00368094 0.00368811 0.00369517 0.00370212 0.00370897 0.00371571 0.00372237 0.00372893 0.0037354 0.0037418 0.00374811 0.00375434 0.00376051 0.0037666 0.00377262 0.00377858 0.00378448 0.00379032 0.0037961 0.00380182 0.00380749 0.00381311 0.00381868 0.0038242 0.00382967 0.0038351 0.00384048 0.00384582 0.00385112 0.00385638 0.00386161 0.00386679 0.00387194 0.00387706 0.00388214 0.00388719 0.0038922 0.00389719 0.00390215 0.00390707 0.00391197 0.00391684 0.00392168 0.00392649 0.00393128 0.00393605 0.00394079 0.00394551 0.0039502 0.00395487 0.00395952 0.00396414 0.00396875 0.00397333 0.0039779 0.00398244 0.00398697 0.00399148 0.00399596 0.00400044 0.00400489 0.00400932 0.00401374 0.00401815 0.00402253 0.0040269 0.00403126 0.0040356 0.00403993 0.00404424 0.00404854 0.00405282 0.00405709 0.00406135 0.0040656 0.00406983 0.00407405 0.00407826 0.00408246 0.00408665 0.00409083 0.004095 0.00409916 0.0041033 0.00410744 0.00411157 -0.000886532 -0.000799307 -0.000711696 -0.000623693 -0.000535297 -0.000446504 -0.000357311 -0.000267714 -0.000177709 -8.72976E-05 3.51297E-06 9.40217E-05 0.000183175 0.000270985 0.000357461 0.00044261 0.000526439 0.000608954 0.000690162 0.00077007 0.000848685 0.000926012 0.00100206 0.00107683 0.00115034 0.00122259 0.00129358 0.00136333 0.00143183 0.0014991 0.00156514 0.00162996 0.00169357 0.00175596 0.00181716 0.00187716 0.00193597 0.00199359 0.00205004 0.00210532 0.00215943 0.00221239 0.0022642 0.00231486 0.00236438 0.00241277 0.00246004 0.00250619 0.00255123 0.00259516 0.00263799 0.00267974 0.0027204 0.00275998 0.00279849 0.00283595 0.00287235 0.0029077 0.00294202 0.00297531 0.00300759 0.00303885 0.00306911 0.00309838 0.00312668 0.00315401 0.00318039 0.00320583 0.00323034 0.00325394 0.00327665 0.00329849 0.00331947 0.00333961 0.00335895 0.0033775 0.00339529 0.00341234 0.00342869 0.00344437 0.00345941 0.00347385 0.00348771 0.00350103 0.00351385 0.0035262 0.00353811 0.0035496 0.00356072 0.00357149 0.00358192 0.00359206 0.00360191 0.00361149 0.00362083 0.00362993 0.00363883 0.00364751 0.00365601 0.00366433 0.00367247 0.00368046 0.00368829 0.00369598 0.00370354 0.00371096 0.00371826 0.00372544 0.00373251 0.00373947 0.00374633 0.00375309 0.00375975 0.00376633 0.00377282 0.00377923 0.00378557 0.00379182 0.003798 0.00380412 0.00381016 0.00381614 0.00382206 0.00382792 0.00383373 0.00383947 0.00384517 0.00385081 0.0038564 0.00386194 0.00386744 0.00387289 0.0038783 0.00388367 0.003889 0.00389428 0.00389953 0.00390474 0.00390992 0.00391506 0.00392017 0.00392524 0.00393028 0.00393529 0.00394027 0.00394522 0.00395014 0.00395504 0.00395991 0.00396475 0.00396956 0.00397435 0.00397912 0.00398386 0.00398858 0.00399327 0.00399795 0.0040026 0.00400723 0.00401184 0.00401643 0.004021 0.00402555 0.00403008 0.00403459 0.00403908 0.00404356 0.00404802 0.00405247 0.00405689 0.0040613 0.0040657 0.00407008 0.00407444 0.00407879 0.00408313 0.00408745 0.00409176 0.00409605 0.00410034 0.00410461 0.00410886 0.00411311 0.00411734 0.00412157 0.00412578 0.00412998 0.00413417 0.00413835 0.00414252 0.00414668 -0.000887292 -0.000799988 -0.000712293 -0.000624205 -0.00053572 -0.000446835 -0.000357547 -0.000267851 -0.000177744 -8.72266E-05 3.69256E-06 9.43244E-05 0.000183609 0.00027156 0.000358185 0.000443492 0.000527487 0.000610177 0.000691569 0.000771668 0.000850482 0.000928018 0.00100428 0.00107928 0.00115302 0.0012255 0.00129674 0.00136674 0.00143551 0.00150305 0.00156937 0.00163447 0.00169837 0.00176106 0.00182256 0.00188287 0.001942 0.00199995 0.00205673 0.00211235 0.00216681 0.00222011 0.00227228 0.0023233 0.00237319 0.00242196 0.00246961 0.00251614 0.00256157 0.0026059 0.00264914 0.00269129 0.00273236 0.00277236 0.0028113 0.00284918 0.00288601 0.0029218 0.00295655 0.00299029 0.003023 0.00305472 0.00308543 0.00311516 0.00314391 0.0031717 0.00319853 0.00322443 0.0032494 0.00327346 0.00329662 0.00331891 0.00334034 0.00336093 0.00338071 0.00339969 0.0034179 0.00343537 0.00345212 0.0034682 0.00348362 0.00349842 0.00351263 0.00352629 0.00353943 0.00355209 0.00356429 0.00357606 0.00358745 0.00359846 0.00360914 0.0036195 0.00362957 0.00363936 0.0036489 0.00365819 0.00366727 0.00367613 0.00368479 0.00369327 0.00370158 0.00370971 0.00371769 0.00372552 0.00373321 0.00374077 0.00374819 0.0037555 0.00376269 0.00376977 0.00377674 0.00378361 0.00379038 0.00379707 0.00380366 0.00381017 0.0038166 0.00382295 0.00382922 0.00383542 0.00384156 0.00384763 0.00385363 0.00385957 0.00386545 0.00387128 0.00387705 0.00388276 0.00388843 0.00389405 0.00389961 0.00390513 0.00391061 0.00391604 0.00392144 0.00392679 0.0039321 0.00393737 0.00394261 0.00394781 0.00395297 0.00395811 0.00396321 0.00396827 0.00397331 0.00397831 0.00398329 0.00398824 0.00399316 0.00399805 0.00400291 0.00400775 0.00401257 0.00401736 0.00402213 0.00402687 0.00403159 0.00403629 0.00404096 0.00404562 0.00405025 0.00405486 0.00405946 0.00406403 0.00406859 0.00407313 0.00407764 0.00408215 0.00408663 0.0040911 0.00409555 0.00409998 0.0041044 0.0041088 0.00411319 0.00411757 0.00412193 0.00412627 0.0041306 0.00413492 0.00413923 0.00414352 0.0041478 0.00415207 0.00415633 0.00416057 0.00416481 0.00416903 0.00417325 0.00417745 0.00418164 -0.000887998 -0.000800619 -0.000712846 -0.000624677 -0.000536107 -0.000447135 -0.000357755 -0.000267965 -0.00017776 -8.71419E-05 3.88087E-06 9.46311E-05 0.000184043 0.000272129 0.000358899 0.000444359 0.000528515 0.000611375 0.000692945 0.000773231 0.00085224 0.000929978 0.00100645 0.00108167 0.00115563 0.00122835 0.00129983 0.00137008 0.00143911 0.00150691 0.0015735 0.00163888 0.00170306 0.00176605 0.00182785 0.00188846 0.0019479 0.00200617 0.00206328 0.00211923 0.00217402 0.00222768 0.00228019 0.00233157 0.00238183 0.00243096 0.00247898 0.0025259 0.00257171 0.00261643 0.00266006 0.00270262 0.0027441 0.00278451 0.00282386 0.00286216 0.00289942 0.00293563 0.00297082 0.00300499 0.00303815 0.0030703 0.00310146 0.00313164 0.00316084 0.00318908 0.00321637 0.00324272 0.00326814 0.00329266 0.00331628 0.00333901 0.00336089 0.00338192 0.00340213 0.00342155 0.00344018 0.00345807 0.00347523 0.0034917 0.0035075 0.00352267 0.00353724 0.00355125 0.00356472 0.00357768 0.00359018 0.00360224 0.0036139 0.00362517 0.00363609 0.00364669 0.00365697 0.00366698 0.00367672 0.00368621 0.00369547 0.00370451 0.00371335 0.00372199 0.00373045 0.00373874 0.00374687 0.00375485 0.00376267 0.00377036 0.00377792 0.00378535 0.00379266 0.00379986 0.00380695 0.00381393 0.00382081 0.0038276 0.0038343 0.00384091 0.00384744 0.00385388 0.00386025 0.00386654 0.00387277 0.00387892 0.00388501 0.00389103 0.003897 0.0039029 0.00390875 0.00391454 0.00392028 0.00392597 0.00393161 0.0039372 0.00394275 0.00394825 0.00395371 0.00395912 0.0039645 0.00396983 0.00397513 0.00398039 0.00398562 0.00399081 0.00399596 0.00400109 0.00400618 0.00401124 0.00401627 0.00402127 0.00402624 0.00403119 0.0040361 0.00404099 0.00404586 0.0040507 0.00405551 0.0040603 0.00406507 0.00406982 0.00407454 0.00407924 0.00408392 0.00408858 0.00409321 0.00409783 0.00410243 0.00410701 0.00411157 0.00411611 0.00412064 0.00412515 0.00412964 0.00413411 0.00413857 0.00414301 0.00414744 0.00415185 0.00415625 0.00416063 0.004165 0.00416935 0.0041737 0.00417802 0.00418234 0.00418664 0.00419094 0.00419522 0.00419949 0.00420374 0.00420799 0.00421223 0.00421645 -0.000888653 -0.000801202 -0.000713355 -0.000625108 -0.000536458 -0.000447402 -0.000357936 -0.000268055 -0.000177758 -8.70434E-05 4.07831E-06 9.49424E-05 0.000184476 0.000272694 0.000359603 0.000445211 0.000529524 0.000612549 0.000694292 0.00077476 0.000853958 0.000931894 0.00100857 0.001084 0.00115819 0.00123114 0.00130285 0.00137335 0.00144262 0.00151068 0.00157754 0.00164319 0.00170765 0.00177093 0.00183302 0.00189393 0.00195368 0.00201226 0.00206969 0.00212596 0.00218109 0.00223508 0.00228794 0.00233967 0.00239029 0.00243978 0.00248817 0.00253546 0.00258166 0.00262676 0.00267078 0.00271373 0.00275561 0.00279643 0.00283619 0.0028749 0.00291258 0.00294922 0.00298484 0.00301944 0.00305303 0.00308562 0.00311722 0.00314784 0.00317749 0.00320617 0.00323391 0.00326071 0.00328658 0.00331155 0.00333561 0.0033588 0.00338112 0.00340259 0.00342324 0.00344308 0.00346214 0.00348045 0.00349802 0.00351488 0.00353107 0.00354662 0.00356155 0.0035759 0.0035897 0.00360299 0.00361579 0.00362814 0.00364007 0.00365161 0.00366278 0.00367361 0.00368413 0.00369435 0.00370429 0.00371398 0.00372343 0.00373265 0.00374167 0.00375048 0.0037591 0.00376755 0.00377583 0.00378395 0.00379192 0.00379974 0.00380743 0.00381499 0.00382243 0.00382975 0.00383695 0.00384405 0.00385105 0.00385794 0.00386475 0.00387146 0.00387808 0.00388463 0.00389109 0.00389747 0.00390379 0.00391003 0.0039162 0.00392231 0.00392836 0.00393434 0.00394027 0.00394614 0.00395195 0.00395772 0.00396343 0.00396909 0.00397471 0.00398028 0.0039858 0.00399128 0.00399672 0.00400212 0.00400748 0.00401281 0.00401809 0.00402334 0.00402856 0.00403374 0.00403888 0.004044 0.00404909 0.00405414 0.00405917 0.00406416 0.00406913 0.00407407 0.00407899 0.00408388 0.00408874 0.00409358 0.00409839 0.00410319 0.00410795 0.0041127 0.00411743 0.00412213 0.00412681 0.00413147 0.00413611 0.00414074 0.00414534 0.00414992 0.00415449 0.00415904 0.00416357 0.00416808 0.00417258 0.00417706 0.00418153 0.00418598 0.00419041 0.00419483 0.00419924 0.00420363 0.00420801 0.00421237 0.00421673 0.00422107 0.00422539 0.00422971 0.00423401 0.0042383 0.00424258 0.00424685 0.00425111 -0.000889255 -0.000801736 -0.000713819 -0.000625499 -0.000536773 -0.000447637 -0.000358089 -0.000268123 -0.000177737 -8.69305E-05 4.28531E-06 9.52589E-05 0.000184911 0.000273254 0.000360299 0.00044605 0.000530515 0.0006137 0.000695611 0.000776255 0.000855638 0.000933766 0.00101065 0.00108628 0.00116069 0.00123386 0.0013058 0.00137654 0.00144605 0.00151437 0.00158148 0.00164741 0.00171214 0.00177569 0.00183807 0.00189928 0.00195933 0.00201822 0.00207596 0.00213256 0.00218801 0.00224234 0.00229553 0.00234761 0.00239857 0.00244843 0.00249718 0.00254484 0.0025914 0.00263689 0.00268129 0.00272463 0.0027669 0.00280812 0.00284829 0.00288741 0.0029255 0.00296256 0.0029986 0.00303362 0.00306764 0.00310066 0.0031327 0.00316376 0.00319384 0.00322297 0.00325115 0.0032784 0.00330472 0.00333013 0.00335464 0.00337827 0.00340103 0.00342294 0.00344403 0.0034643 0.00348378 0.0035025 0.00352048 0.00353774 0.00355432 0.00357025 0.00358554 0.00360025 0.00361439 0.003628 0.00364111 0.00365376 0.00366597 0.00367777 0.0036892 0.00370027 0.00371102 0.00372146 0.00373162 0.00374151 0.00375115 0.00376056 0.00376975 0.00377874 0.00378752 0.00379613 0.00380456 0.00381283 0.00382095 0.00382891 0.00383673 0.00384443 0.00385199 0.00385943 0.00386675 0.00387397 0.00388108 0.00388808 0.00389499 0.00390181 0.00390854 0.00391518 0.00392174 0.00392822 0.00393462 0.00394095 0.00394721 0.00395341 0.00395954 0.0039656 0.00397161 0.00397756 0.00398345 0.00398929 0.00399507 0.00400081 0.00400649 0.00401213 0.00401772 0.00402327 0.00402878 0.00403424 0.00403967 0.00404505 0.0040504 0.00405571 0.00406098 0.00406622 0.00407142 0.0040766 0.00408174 0.00408685 0.00409193 0.00409697 0.004102 0.00410699 0.00411195 0.00411689 0.00412181 0.00412669 0.00413156 0.0041364 0.00414121 0.004146 0.00415077 0.00415552 0.00416025 0.00416496 0.00416964 0.00417431 0.00417895 0.00418358 0.00418819 0.00419278 0.00419735 0.0042019 0.00420644 0.00421096 0.00421546 0.00421995 0.00422443 0.00422888 0.00423333 0.00423776 0.00424217 0.00424657 0.00425096 0.00425533 0.0042597 0.00426405 0.00426838 0.00427271 0.00427702 0.00428133 0.00428562 -0.000889805 -0.000802222 -0.000714238 -0.000625849 -0.000537051 -0.00044784 -0.000358213 -0.000268167 -0.000177696 -8.6803E-05 4.5023E-06 9.5581E-05 0.000185346 0.000273812 0.000360986 0.000446877 0.000531489 0.000614829 0.000696904 0.00077772 0.000857282 0.000935598 0.00101267 0.00108851 0.00116313 0.00123652 0.00130869 0.00137965 0.00144941 0.00151797 0.00158534 0.00165153 0.00171653 0.00178036 0.00184302 0.00190452 0.00196486 0.00202405 0.0020821 0.00213901 0.00219479 0.00224944 0.00230297 0.00235539 0.00240669 0.0024569 0.00250601 0.00255403 0.00260096 0.00264682 0.0026916 0.00273532 0.00277799 0.0028196 0.00286016 0.00289969 0.00293818 0.00297565 0.0030121 0.00304755 0.00308199 0.00311544 0.00314791 0.0031794 0.00320992 0.00323949 0.00326811 0.00329579 0.00332255 0.0033484 0.00337336 0.00339743 0.00342063 0.00344298 0.00346449 0.00348519 0.0035051 0.00352424 0.00354263 0.00356029 0.00357726 0.00359356 0.00360923 0.00362429 0.00363877 0.00365271 0.00366614 0.00367908 0.00369158 0.00370366 0.00371535 0.00372667 0.00373766 0.00374832 0.0037587 0.00376879 0.00377863 0.00378823 0.0037976 0.00380676 0.00381572 0.00382449 0.00383308 0.0038415 0.00384975 0.00385786 0.00386582 0.00387365 0.00388134 0.0038889 0.00389635 0.00390368 0.0039109 0.00391802 0.00392504 0.00393196 0.00393879 0.00394553 0.00395219 0.00395877 0.00396526 0.00397169 0.00397804 0.00398432 0.00399053 0.00399668 0.00400277 0.0040088 0.00401476 0.00402068 0.00402654 0.00403235 0.0040381 0.00404381 0.00404947 0.00405509 0.00406066 0.00406619 0.00407168 0.00407712 0.00408253 0.0040879 0.00409324 0.00409853 0.0041038 0.00410903 0.00411422 0.00411939 0.00412452 0.00412962 0.0041347 0.00413974 0.00414476 0.00414975 0.00415471 0.00415965 0.00416456 0.00416945 0.00417431 0.00417915 0.00418396 0.00418876 0.00419353 0.00419828 0.00420301 0.00420772 0.00421241 0.00421707 0.00422172 0.00422636 0.00423097 0.00423556 0.00424014 0.0042447 0.00424924 0.00425377 0.00425828 0.00426278 0.00426726 0.00427173 0.00427618 0.00428061 0.00428504 0.00428945 0.00429385 0.00429823 0.0043026 0.00430696 0.00431131 0.00431565 0.00431997 -0.000890302 -0.00080266 -0.000714613 -0.000626158 -0.000537292 -0.000448011 -0.00035831 -0.000268187 -0.000177636 -8.66604E-05 4.72975E-06 9.59094E-05 0.000185783 0.000274366 0.000361667 0.000447692 0.000532446 0.000615938 0.000698171 0.000779154 0.000858891 0.000937389 0.00101465 0.00109069 0.00116551 0.00123911 0.00131151 0.0013827 0.00145269 0.0015215 0.00158911 0.00165555 0.00172082 0.00178492 0.00184786 0.00190964 0.00197027 0.00202976 0.00208811 0.00214533 0.00220142 0.0022564 0.00231025 0.002363 0.00241465 0.0024652 0.00251466 0.00256304 0.00261033 0.00265656 0.00270171 0.00274581 0.00278886 0.00283085 0.00287181 0.00291173 0.00295063 0.00298851 0.00302537 0.00306123 0.00309609 0.00312996 0.00316285 0.00319477 0.00322572 0.00325572 0.00328477 0.00331289 0.00334009 0.00336638 0.00339177 0.00341628 0.00343991 0.0034627 0.00348465 0.00350577 0.0035261 0.00354566 0.00356445 0.00358252 0.00359988 0.00361657 0.00363261 0.00364802 0.00366285 0.00367713 0.00369087 0.00370413 0.00371692 0.00372928 0.00374123 0.00375281 0.00376403 0.00377493 0.00378552 0.00379583 0.00380587 0.00381566 0.00382521 0.00383455 0.00384368 0.00385261 0.00386136 0.00386994 0.00387834 0.00388659 0.00389469 0.00390265 0.00391048 0.00391817 0.00392574 0.00393319 0.00394053 0.00394776 0.00395489 0.00396192 0.00396885 0.0039757 0.00398245 0.00398913 0.00399572 0.00400223 0.00400867 0.00401504 0.00402134 0.00402757 0.00403374 0.00403985 0.0040459 0.00405189 0.00405783 0.00406371 0.00406954 0.00407532 0.00408105 0.00408673 0.00409237 0.00409796 0.00410352 0.00410903 0.0041145 0.00411993 0.00412532 0.00413068 0.004136 0.00414129 0.00414654 0.00415176 0.00415695 0.00416211 0.00416723 0.00417233 0.0041774 0.00418244 0.00418745 0.00419244 0.0041974 0.00420233 0.00420725 0.00421213 0.00421699 0.00422183 0.00422665 0.00423145 0.00423622 0.00424097 0.0042457 0.00425041 0.00425511 0.00425978 0.00426443 0.00426907 0.00427369 0.00427829 0.00428287 0.00428744 0.00429199 0.00429652 0.00430104 0.00430554 0.00431003 0.0043145 0.00431896 0.00432341 0.00432784 0.00433226 0.00433667 0.00434106 0.00434544 0.00434982 0.00435417 -0.000890747 -0.000803049 -0.000714944 -0.000626427 -0.000537497 -0.000448149 -0.000358379 -0.000268182 -0.000177557 -8.65023E-05 4.96814E-06 9.62445E-05 0.000186223 0.000274919 0.000362342 0.000448496 0.000533389 0.000617026 0.000699414 0.000780559 0.000860466 0.000939142 0.00101659 0.00109282 0.00116784 0.00124165 0.00131426 0.00138568 0.0014559 0.00152494 0.0015928 0.00165949 0.00172502 0.00178938 0.00185259 0.00191465 0.00197557 0.00203535 0.002094 0.00215152 0.00220792 0.00226321 0.00231739 0.00237047 0.00242245 0.00247334 0.00252314 0.00257187 0.00261952 0.00266611 0.00271163 0.0027561 0.00279952 0.0028419 0.00288324 0.00292356 0.00296285 0.00300113 0.00303839 0.00307466 0.00310993 0.00314422 0.00317753 0.00320987 0.00324125 0.00327167 0.00330116 0.00332971 0.00335734 0.00338406 0.00340989 0.00343483 0.0034589 0.00348211 0.00350449 0.00352604 0.00354679 0.00356676 0.00358597 0.00360444 0.00362219 0.00363926 0.00365568 0.00367146 0.00368664 0.00370125 0.00371532 0.00372888 0.00374197 0.00375461 0.00376684 0.00377867 0.00379014 0.00380127 0.00381209 0.00382261 0.00383286 0.00384284 0.00385259 0.00386211 0.00387141 0.00388051 0.00388942 0.00389815 0.00390671 0.00391511 0.00392335 0.00393145 0.0039394 0.00394722 0.00395492 0.00396249 0.00396995 0.0039773 0.00398454 0.00399168 0.00399872 0.00400566 0.00401252 0.00401929 0.00402598 0.00403259 0.00403912 0.00404558 0.00405197 0.00405828 0.00406454 0.00407073 0.00407685 0.00408292 0.00408893 0.00409489 0.00410079 0.00410664 0.00411245 0.0041182 0.00412391 0.00412957 0.00413518 0.00414076 0.00414629 0.00415179 0.00415724 0.00416266 0.00416804 0.00417338 0.00417869 0.00418397 0.00418921 0.00419442 0.0041996 0.00420475 0.00420988 0.00421497 0.00422003 0.00422507 0.00423008 0.00423506 0.00424002 0.00424495 0.00424986 0.00425475 0.00425961 0.00426445 0.00426927 0.00427407 0.00427884 0.0042836 0.00428833 0.00429305 0.00429774 0.00430242 0.00430708 0.00431172 0.00431634 0.00432094 0.00432553 0.00433011 0.00433466 0.0043392 0.00434373 0.00434824 0.00435273 0.00435722 0.00436168 0.00436614 0.00437058 0.00437501 0.00437943 0.00438383 0.00438822 -0.00089114 -0.00080339 -0.000715229 -0.000626656 -0.000537665 -0.000448254 -0.000358418 -0.000268153 -0.000177456 -8.63282E-05 5.21798E-06 9.6587E-05 0.000186666 0.000275471 0.000363011 0.000449291 0.000534317 0.000618096 0.000700634 0.000781936 0.000862008 0.000940857 0.00101849 0.00109491 0.00117012 0.00124414 0.00131696 0.00138859 0.00145904 0.00152831 0.00159641 0.00166335 0.00172912 0.00179375 0.00185722 0.00191955 0.00198075 0.00204082 0.00209976 0.00215758 0.00221428 0.00226988 0.00232438 0.00237778 0.00243008 0.00248131 0.00253145 0.00258052 0.00262853 0.00267547 0.00272135 0.00276619 0.00280998 0.00285274 0.00289446 0.00293516 0.00297484 0.00301352 0.00305118 0.00308785 0.00312353 0.00315823 0.00319195 0.00322471 0.0032565 0.00328735 0.00331726 0.00334624 0.0033743 0.00340145 0.00342771 0.00345308 0.00347757 0.00350122 0.00352402 0.003546 0.00356717 0.00358755 0.00360717 0.00362604 0.00364419 0.00366165 0.00367844 0.00369458 0.00371012 0.00372507 0.00373947 0.00375335 0.00376674 0.00377967 0.00379217 0.00380427 0.00381599 0.00382736 0.00383841 0.00384915 0.0038596 0.00386979 0.00387972 0.00388943 0.00389891 0.00390818 0.00391725 0.00392614 0.00393486 0.0039434 0.00395179 0.00396002 0.00396812 0.00397607 0.00398389 0.00399159 0.00399917 0.00400663 0.00401399 0.00402124 0.00402838 0.00403544 0.0040424 0.00404927 0.00405605 0.00406276 0.00406938 0.00407593 0.0040824 0.00408881 0.00409515 0.00410142 0.00410763 0.00411377 0.00411986 0.00412589 0.00413187 0.0041378 0.00414367 0.00414949 0.00415527 0.004161 0.00416668 0.00417232 0.00417792 0.00418347 0.00418899 0.00419447 0.00419991 0.00420531 0.00421068 0.00421601 0.00422131 0.00422658 0.00423181 0.00423702 0.00424219 0.00424733 0.00425245 0.00425754 0.00426259 0.00426763 0.00427263 0.00427762 0.00428257 0.00428751 0.00429241 0.0042973 0.00430216 0.004307 0.00431182 0.00431662 0.0043214 0.00432615 0.00433089 0.00433561 0.00434031 0.00434499 0.00434965 0.0043543 0.00435892 0.00436354 0.00436813 0.00437271 0.00437727 0.00438182 0.00438635 0.00439087 0.00439537 0.00439986 0.00440434 0.0044088 0.00441325 0.00441769 0.00442212 -0.000891481 -0.000803682 -0.00071547 -0.000626843 -0.000537796 -0.000448326 -0.000358429 -0.0002681 -0.000177336 -8.61378E-05 5.47979E-06 9.69374E-05 0.000187113 0.000276023 0.000363675 0.000450077 0.000535232 0.000619149 0.000701831 0.000783286 0.00086352 0.000942537 0.00102034 0.00109695 0.00117235 0.00124656 0.00131959 0.00139143 0.0014621 0.0015316 0.00159994 0.00166711 0.00173314 0.00179802 0.00186175 0.00192435 0.00198582 0.00204617 0.00210539 0.00216351 0.00222051 0.00227641 0.00233122 0.00238494 0.00243757 0.00248912 0.0025396 0.00258901 0.00263736 0.00268465 0.00273089 0.00277609 0.00282024 0.00286337 0.00290547 0.00294655 0.00298662 0.00302568 0.00306374 0.0031008 0.00313689 0.00317199 0.00320612 0.00323929 0.0032715 0.00330276 0.00333309 0.0033625 0.00339098 0.00341855 0.00344523 0.00347103 0.00349596 0.00352002 0.00354325 0.00356565 0.00358723 0.00360803 0.00362806 0.00364733 0.00366588 0.00368372 0.00370089 0.0037174 0.0037333 0.00374859 0.00376333 0.00377753 0.00379123 0.00380445 0.00381723 0.0038296 0.00384157 0.00385319 0.00386447 0.00387543 0.0038861 0.00389649 0.00390662 0.00391651 0.00392617 0.00393562 0.00394486 0.00395391 0.00396278 0.00397148 0.00398001 0.00398839 0.00399661 0.0040047 0.00401265 0.00402048 0.00402818 0.00403576 0.00404323 0.00405059 0.00405785 0.00406501 0.00407207 0.00407905 0.00408593 0.00409273 0.00409945 0.00410609 0.00411265 0.00411915 0.00412557 0.00413193 0.00413822 0.00414444 0.00415061 0.00415672 0.00416277 0.00416877 0.00417472 0.00418061 0.00418645 0.00419225 0.004198 0.00420371 0.00420937 0.00421499 0.00422057 0.00422611 0.00423161 0.00423707 0.0042425 0.00424789 0.00425324 0.00425856 0.00426385 0.00426911 0.00427434 0.00427953 0.0042847 0.00428984 0.00429495 0.00430003 0.00430509 0.00431012 0.00431512 0.0043201 0.00432506 0.00432999 0.00433489 0.00433978 0.00434464 0.00434949 0.00435431 0.00435911 0.00436388 0.00436864 0.00437338 0.00437811 0.00438281 0.00438749 0.00439216 0.00439681 0.00440144 0.00440606 0.00441066 0.00441525 0.00441981 0.00442437 0.00442891 0.00443343 0.00443795 0.00444245 0.00444693 0.0044514 0.00445586 -0.000891769 -0.000803925 -0.000715666 -0.000626989 -0.00053789 -0.000448365 -0.00035841 -0.000268021 -0.000177194 -8.59305E-05 5.75412E-06 9.72965E-05 0.000187565 0.000276575 0.000364336 0.000450855 0.000536135 0.000620184 0.000703008 0.000784612 0.000865001 0.000944183 0.00102216 0.00109894 0.00117453 0.00124894 0.00132217 0.00139422 0.0014651 0.00153482 0.00160339 0.0016708 0.00173707 0.00180219 0.00186618 0.00192904 0.00199078 0.0020514 0.00211091 0.00216931 0.00222661 0.00228281 0.00233793 0.00239195 0.0024449 0.00249678 0.00254758 0.00259733 0.00264601 0.00269365 0.00274024 0.00278579 0.00283031 0.0028738 0.00291627 0.00295773 0.00299817 0.00303762 0.00307607 0.00311352 0.00315 0.0031855 0.00322004 0.00325361 0.00328623 0.00331791 0.00334866 0.00337847 0.00340738 0.00343537 0.00346248 0.00348869 0.00351404 0.00353853 0.00356217 0.00358499 0.003607 0.00362821 0.00364864 0.00366832 0.00368726 0.00370549 0.00372304 0.00373992 0.00375618 0.00377182 0.00378689 0.00380142 0.00381543 0.00382895 0.00384202 0.00385465 0.00386689 0.00387876 0.00389027 0.00390146 0.00391234 0.00392294 0.00393327 0.00394335 0.0039532 0.00396282 0.00397223 0.00398145 0.00399048 0.00399933 0.00400801 0.00401653 0.0040249 0.00403312 0.00404121 0.00404916 0.00405698 0.00406469 0.00407227 0.00407975 0.00408712 0.00409439 0.00410156 0.00410863 0.00411562 0.00412251 0.00412933 0.00413606 0.00414272 0.0041493 0.00415581 0.00416225 0.00416862 0.00417493 0.00418118 0.00418737 0.00419349 0.00419957 0.00420559 0.00421155 0.00421747 0.00422333 0.00422915 0.00423492 0.00424065 0.00424633 0.00425198 0.00425758 0.00426314 0.00426866 0.00427415 0.00427959 0.00428501 0.00429039 0.00429573 0.00430104 0.00430632 0.00431157 0.00431679 0.00432198 0.00432714 0.00433227 0.00433738 0.00434246 0.00434751 0.00435254 0.00435754 0.00436252 0.00436747 0.0043724 0.00437731 0.00438219 0.00438706 0.0043919 0.00439672 0.00440152 0.0044063 0.00441107 0.00441581 0.00442053 0.00442524 0.00442993 0.0044346 0.00443926 0.00444389 0.00444852 0.00445312 0.00445771 0.00446229 0.00446685 0.0044714 0.00447593 0.00448045 0.00448496 0.00448945 -0.000892004 -0.000804119 -0.000715817 -0.000627094 -0.000537946 -0.00044837 -0.000358361 -0.000267916 -0.00017703 -8.57057E-05 6.04155E-06 9.76648E-05 0.000188022 0.000277129 0.000364995 0.000451626 0.000537027 0.000621205 0.000704165 0.000785913 0.000866454 0.000945795 0.00102394 0.0011009 0.00117667 0.00125126 0.00132469 0.00139694 0.00146803 0.00153797 0.00160676 0.0016744 0.00174091 0.00180628 0.00187052 0.00193364 0.00199564 0.00205653 0.00211631 0.002175 0.00223258 0.00228908 0.00234449 0.00239883 0.00245209 0.00250428 0.00255541 0.00260548 0.0026545 0.00270248 0.00274941 0.00279531 0.00284019 0.00288404 0.00292687 0.0029687 0.00300952 0.00304934 0.00308817 0.00312601 0.00316288 0.00319878 0.00323371 0.00326769 0.00330071 0.0033328 0.00336395 0.00339418 0.0034235 0.00345191 0.00347943 0.00350607 0.00353183 0.00355674 0.0035808 0.00360404 0.00362646 0.00364807 0.00366891 0.00368899 0.00370833 0.00372695 0.00374488 0.00376214 0.00377875 0.00379475 0.00381016 0.00382502 0.00383934 0.00385317 0.00386652 0.00387944 0.00389194 0.00390406 0.00391582 0.00392724 0.00393834 0.00394915 0.00395968 0.00396996 0.00397999 0.00398979 0.00399938 0.00400876 0.00401795 0.00402696 0.00403579 0.00404446 0.00405297 0.00406133 0.00406955 0.00407763 0.00408558 0.00409341 0.00410111 0.00410871 0.00411619 0.00412356 0.00413084 0.00413802 0.00414511 0.0041521 0.00415902 0.00416584 0.00417259 0.00417926 0.00418586 0.00419239 0.00419885 0.00420524 0.00421157 0.00421783 0.00422404 0.00423019 0.00423628 0.00424232 0.0042483 0.00425424 0.00426013 0.00426597 0.00427176 0.00427751 0.00428321 0.00428888 0.0042945 0.00430008 0.00430563 0.00431114 0.00431661 0.00432204 0.00432744 0.00433281 0.00433814 0.00434345 0.00434872 0.00435396 0.00435917 0.00436435 0.00436951 0.00437464 0.00437974 0.00438481 0.00438986 0.00439488 0.00439988 0.00440486 0.00440981 0.00441474 0.00441965 0.00442453 0.0044294 0.00443424 0.00443907 0.00444387 0.00444865 0.00445342 0.00445817 0.00446289 0.0044676 0.0044723 0.00447697 0.00448163 0.00448628 0.00449091 0.00449552 0.00450012 0.0045047 0.00450927 0.00451382 0.00451836 0.00452289 -0.000892187 -0.000804264 -0.000715922 -0.000627157 -0.000537964 -0.000448341 -0.000358283 -0.000267785 -0.000176845 -8.5463E-05 6.34267E-06 9.8043E-05 0.000188485 0.000277684 0.000365651 0.000452391 0.000537909 0.000622211 0.000705304 0.000787191 0.00086788 0.000947376 0.00102568 0.00110281 0.00117876 0.00125354 0.00132715 0.0013996 0.0014709 0.00154105 0.00161006 0.00167793 0.00174467 0.00181027 0.00187476 0.00193813 0.00200039 0.00206155 0.0021216 0.00218056 0.00223843 0.00229522 0.00235092 0.00240556 0.00245913 0.00251163 0.00256308 0.00261347 0.00266282 0.00271113 0.00275841 0.00280465 0.00284988 0.00289408 0.00293727 0.00297946 0.00302065 0.00306084 0.00310005 0.00313828 0.00317553 0.00321182 0.00324714 0.00328151 0.00331494 0.00334743 0.00337899 0.00340963 0.00343935 0.00346818 0.00349611 0.00352316 0.00354934 0.00357466 0.00359914 0.00362279 0.00364562 0.00366764 0.00368889 0.00370937 0.0037291 0.00374811 0.00376642 0.00378405 0.00380103 0.00381739 0.00383314 0.00384833 0.00386297 0.0038771 0.00389076 0.00390395 0.00391673 0.0039291 0.0039411 0.00395276 0.00396409 0.00397511 0.00398585 0.00399632 0.00400655 0.00401653 0.00402629 0.00403585 0.0040452 0.00405437 0.00406335 0.00407217 0.00408082 0.00408932 0.00409768 0.00410589 0.00411397 0.00412192 0.00412975 0.00413746 0.00414505 0.00415254 0.00415993 0.00416721 0.0041744 0.0041815 0.00418851 0.00419544 0.00420228 0.00420904 0.00421573 0.00422234 0.00422889 0.00423536 0.00424177 0.00424812 0.0042544 0.00426063 0.00426679 0.00427291 0.00427896 0.00428497 0.00429093 0.00429684 0.0043027 0.00430851 0.00431428 0.00432001 0.00432569 0.00433134 0.00433694 0.00434251 0.00434804 0.00435353 0.00435899 0.00436441 0.0043698 0.00437516 0.00438048 0.00438577 0.00439104 0.00439627 0.00440148 0.00440665 0.0044118 0.00441692 0.00442202 0.00442709 0.00443214 0.00443716 0.00444216 0.00444713 0.00445208 0.00445701 0.00446192 0.00446681 0.00447167 0.00447652 0.00448134 0.00448615 0.00449093 0.0044957 0.00450045 0.00450518 0.0045099 0.0045146 0.00451928 0.00452394 0.00452859 0.00453323 0.00453784 0.00454245 0.00454704 0.00455161 0.00455618 -0.000892317 -0.00080436 -0.000715981 -0.000627177 -0.000537944 -0.000448278 -0.000358174 -0.000267628 -0.000176636 -8.52018E-05 6.65812E-06 9.84319E-05 0.000188954 0.000278243 0.000366307 0.000453151 0.000538782 0.000623205 0.000706425 0.000788449 0.000869281 0.000948927 0.00102739 0.00110468 0.00118081 0.00125576 0.00132956 0.00140221 0.00147371 0.00154407 0.00161329 0.00168138 0.00174834 0.00181419 0.00187891 0.00194253 0.00200505 0.00206646 0.00212678 0.00218601 0.00224416 0.00230123 0.00235723 0.00241216 0.00246602 0.00251884 0.00257059 0.00262131 0.00267098 0.00271962 0.00276723 0.00281381 0.00285938 0.00290393 0.00294748 0.00299003 0.00303158 0.00307214 0.00311172 0.00315032 0.00318796 0.00322462 0.00326034 0.0032951 0.00332892 0.00336181 0.00339377 0.00342481 0.00345494 0.00348417 0.00351252 0.00353998 0.00356657 0.0035923 0.00361719 0.00364124 0.00366448 0.00368692 0.00370856 0.00372944 0.00374957 0.00376897 0.00378766 0.00380567 0.00382301 0.00383972 0.00385582 0.00387134 0.00388631 0.00390076 0.00391471 0.00392819 0.00394124 0.00395388 0.00396613 0.00397802 0.00398958 0.00400083 0.00401178 0.00402245 0.00403286 0.00404303 0.00405298 0.0040627 0.00407222 0.00408155 0.00409069 0.00409966 0.00410846 0.0041171 0.00412559 0.00413394 0.00414215 0.00415023 0.00415818 0.00416601 0.00417372 0.00418132 0.00418882 0.00419621 0.00420351 0.00421071 0.00421782 0.00422484 0.00423177 0.00423863 0.00424541 0.00425211 0.00425874 0.0042653 0.00427179 0.00427822 0.00428458 0.00429089 0.00429713 0.00430332 0.00430945 0.00431553 0.00432156 0.00432753 0.00433346 0.00433934 0.00434518 0.00435097 0.00435672 0.00436242 0.00436809 0.00437371 0.0043793 0.00438485 0.00439037 0.00439585 0.00440129 0.0044067 0.00441208 0.00441743 0.00442274 0.00442803 0.00443328 0.00443851 0.00444371 0.00444888 0.00445402 0.00445914 0.00446423 0.0044693 0.00447434 0.00447936 0.00448436 0.00448933 0.00449428 0.00449921 0.00450412 0.00450901 0.00451387 0.00451872 0.00452355 0.00452835 0.00453314 0.00453791 0.00454267 0.0045474 0.00455212 0.00455683 0.00456151 0.00456618 0.00457084 0.00457548 0.0045801 0.00458471 0.00458931 -0.000892393 -0.000804406 -0.000715995 -0.000627156 -0.000537885 -0.000448179 -0.000358033 -0.000267443 -0.000176405 -8.49213E-05 6.98854E-06 9.88321E-05 0.000189432 0.000278805 0.000366962 0.000453907 0.000539647 0.000624186 0.00070753 0.000789685 0.000870657 0.000950449 0.00102907 0.00110652 0.00118281 0.00125795 0.00133193 0.00140476 0.00147646 0.00154702 0.00161645 0.00168476 0.00175194 0.00181802 0.00188298 0.00194684 0.0020096 0.00207127 0.00213185 0.00219135 0.00224977 0.00230712 0.0023634 0.00241862 0.00247278 0.0025259 0.00257796 0.00262899 0.00267898 0.00272794 0.00277588 0.0028228 0.0028687 0.0029136 0.0029575 0.0030004 0.00304231 0.00308323 0.00312318 0.00316215 0.00320016 0.0032372 0.0032733 0.00330845 0.00334266 0.00337594 0.0034083 0.00343974 0.00347027 0.0034999 0.00352865 0.00355652 0.00358351 0.00360965 0.00363495 0.00365941 0.00368305 0.00370589 0.00372794 0.00374922 0.00376974 0.00378953 0.0038086 0.00382698 0.0038447 0.00386177 0.00387822 0.00389407 0.00390937 0.00392413 0.00393838 0.00395216 0.00396549 0.00397839 0.0039909 0.00400303 0.00401483 0.00402629 0.00403746 0.00404833 0.00405894 0.0040693 0.00407943 0.00408933 0.00409902 0.00410851 0.00411781 0.00412693 0.00413588 0.00414467 0.0041533 0.00416178 0.00417012 0.00417833 0.0041864 0.00419435 0.00420218 0.0042099 0.00421751 0.00422501 0.00423241 0.00423972 0.00424693 0.00425405 0.00426108 0.00426803 0.0042749 0.00428169 0.00428841 0.00429506 0.00430163 0.00430814 0.00431459 0.00432097 0.00432729 0.00433355 0.00433976 0.00434591 0.00435201 0.00435805 0.00436405 0.00437 0.0043759 0.00438176 0.00438757 0.00439334 0.00439906 0.00440475 0.0044104 0.00441601 0.00442158 0.00442712 0.00443262 0.00443808 0.00444351 0.00444891 0.00445428 0.00445962 0.00446493 0.0044702 0.00447545 0.00448067 0.00448586 0.00449103 0.00449617 0.00450128 0.00450637 0.00451144 0.00451648 0.0045215 0.00452649 0.00453146 0.00453641 0.00454134 0.00454625 0.00455114 0.004556 0.00456085 0.00456568 0.00457049 0.00457528 0.00458006 0.00458481 0.00458955 0.00459428 0.00459898 0.00460368 0.00460835 0.00461301 0.00461766 0.00462229 -0.000892415 -0.000804401 -0.000715961 -0.000627091 -0.000537787 -0.000448045 -0.000357861 -0.000267231 -0.00017615 -8.46211E-05 7.33463E-06 9.92445E-05 0.000189918 0.000279373 0.000367618 0.000454661 0.000540505 0.000625157 0.000708621 0.000790904 0.00087201 0.000951945 0.00103071 0.00110832 0.00118478 0.00126008 0.00133424 0.00140726 0.00147915 0.00154991 0.00161954 0.00168806 0.00175547 0.00182176 0.00188696 0.00195106 0.00201406 0.00207598 0.00213682 0.00219658 0.00225526 0.00231289 0.00236945 0.00242495 0.00247941 0.00253282 0.00258519 0.00263652 0.00268683 0.00273611 0.00278437 0.00283161 0.00287785 0.00292309 0.00296733 0.00301057 0.00305283 0.00309412 0.00313442 0.00317376 0.00321214 0.00324956 0.00328603 0.00332156 0.00335616 0.00338983 0.00342257 0.00345441 0.00348534 0.00351537 0.00354452 0.00357278 0.00360019 0.00362673 0.00365243 0.00367729 0.00370134 0.00372458 0.00374703 0.0037687 0.00378962 0.00380979 0.00382925 0.003848 0.00386609 0.00388351 0.00390032 0.00391652 0.00393214 0.00394722 0.00396178 0.00397585 0.00398946 0.00400264 0.0040154 0.00402779 0.00403982 0.00405151 0.00406289 0.00407398 0.00408479 0.00409534 0.00410565 0.00411573 0.00412559 0.00413524 0.0041447 0.00415398 0.00416308 0.00417201 0.00418079 0.00418941 0.00419788 0.00420622 0.00421442 0.00422249 0.00423045 0.00423828 0.004246 0.00425361 0.00426112 0.00426853 0.00427585 0.00428307 0.0042902 0.00429724 0.00430421 0.00431109 0.0043179 0.00432463 0.00433129 0.00433788 0.00434441 0.00435087 0.00435727 0.00436361 0.00436989 0.00437612 0.00438229 0.0043884 0.00439447 0.00440048 0.00440645 0.00441237 0.00441825 0.00442408 0.00442987 0.00443562 0.00444133 0.004447 0.00445263 0.00445822 0.00446378 0.0044693 0.00447478 0.00448024 0.00448566 0.00449105 0.00449641 0.00450174 0.00450703 0.0045123 0.00451755 0.00452276 0.00452795 0.00453311 0.00453824 0.00454335 0.00454844 0.0045535 0.00455854 0.00456355 0.00456855 0.00457352 0.00457847 0.0045834 0.00458831 0.00459319 0.00459806 0.00460291 0.00460774 0.00461256 0.00461735 0.00462213 0.00462689 0.00463163 0.00463636 0.00464107 0.00464577 0.00465045 0.00465512 -0.000892383 -0.000804346 -0.000715881 -0.000626983 -0.00053765 -0.000447876 -0.000357657 -0.00026699 -0.00017587 -8.43004E-05 7.69708E-06 9.96697E-05 0.000190413 0.000279946 0.000368277 0.000455413 0.000541358 0.000626118 0.000709698 0.000792104 0.000873341 0.000953414 0.00103233 0.00111009 0.0011867 0.00126217 0.00133651 0.00140971 0.00148178 0.00155274 0.00162257 0.0016913 0.00175892 0.00182543 0.00189085 0.00195518 0.00201843 0.00208059 0.00214168 0.0022017 0.00226065 0.00231854 0.00237537 0.00243116 0.0024859 0.0025396 0.00259227 0.0026439 0.00269452 0.00274411 0.00279269 0.00284026 0.00288683 0.0029324 0.00297697 0.00302056 0.00306317 0.0031048 0.00314547 0.00318517 0.00322391 0.0032617 0.00329854 0.00333445 0.00336943 0.00340348 0.00343661 0.00346883 0.00350015 0.00353058 0.00356012 0.00358879 0.00361659 0.00364353 0.00366963 0.0036949 0.00371934 0.00374298 0.00376582 0.00378789 0.0038092 0.00382976 0.0038496 0.00386873 0.00388718 0.00390497 0.00392212 0.00393867 0.00395463 0.00397003 0.0039849 0.00399927 0.00401317 0.00402662 0.00403965 0.00405228 0.00406455 0.00407648 0.00408808 0.00409938 0.00411039 0.00412114 0.00413163 0.00414189 0.00415193 0.00416175 0.00417138 0.00418081 0.00419006 0.00419915 0.00420806 0.00421682 0.00422543 0.0042339 0.00424223 0.00425043 0.0042585 0.00426646 0.00427429 0.00428202 0.00428964 0.00429715 0.00430457 0.00431189 0.00431912 0.00432627 0.00433332 0.0043403 0.0043472 0.00435402 0.00436077 0.00436744 0.00437405 0.00438059 0.00438707 0.00439349 0.00439985 0.00440614 0.00441239 0.00441858 0.00442471 0.0044308 0.00443683 0.00444282 0.00444876 0.00445466 0.00446051 0.00446632 0.00447209 0.00447782 0.00448351 0.00448916 0.00449477 0.00450035 0.00450589 0.0045114 0.00451687 0.00452232 0.00452773 0.00453311 0.00453846 0.00454378 0.00454907 0.00455433 0.00455956 0.00456477 0.00456995 0.00457511 0.00458024 0.00458535 0.00459043 0.00459549 0.00460053 0.00460554 0.00461053 0.0046155 0.00462045 0.00462538 0.00463029 0.00463518 0.00464005 0.0046449 0.00464974 0.00465455 0.00465935 0.00466413 0.00466889 0.00467364 0.00467838 0.00468309 0.00468779 -0.000892296 -0.00080424 -0.000715753 -0.000626831 -0.000537472 -0.000447669 -0.00035742 -0.00026672 -0.000175565 -8.39586E-05 8.07665E-06 0.000100109 0.000190918 0.000280525 0.000368938 0.000456163 0.000542206 0.000627071 0.000710763 0.000793289 0.000874653 0.00095486 0.00103392 0.00111183 0.00118859 0.00126423 0.00133873 0.00141211 0.00148436 0.00155551 0.00162554 0.00169447 0.00176229 0.00182903 0.00189467 0.00195923 0.0020227 0.00208511 0.00214644 0.00220671 0.00226592 0.00232408 0.00238118 0.00243724 0.00249226 0.00254625 0.00259921 0.00265114 0.00270206 0.00275196 0.00280085 0.00284874 0.00289563 0.00294153 0.00298644 0.00303037 0.00307332 0.0031153 0.00315631 0.00319637 0.00323547 0.00327362 0.00331083 0.00334711 0.00338246 0.00341689 0.0034504 0.00348301 0.00351472 0.00354553 0.00357547 0.00360453 0.00363272 0.00366006 0.00368656 0.00371222 0.00373706 0.0037611 0.00378434 0.00380679 0.00382849 0.00384944 0.00386966 0.00388916 0.00390798 0.00392614 0.00394365 0.00396053 0.00397683 0.00399255 0.00400774 0.00402241 0.0040366 0.00405033 0.00406363 0.00407652 0.00408904 0.0041012 0.00411302 0.00412453 0.00413575 0.0041467 0.00415739 0.00416783 0.00417804 0.00418804 0.00419783 0.00420742 0.00421683 0.00422606 0.00423512 0.00424403 0.00425277 0.00426138 0.00426984 0.00427816 0.00428636 0.00429443 0.00430239 0.00431022 0.00431795 0.00432558 0.0043331 0.00434053 0.00434786 0.0043551 0.00436225 0.00436932 0.00437631 0.00438322 0.00439006 0.00439682 0.00440351 0.00441014 0.0044167 0.00442319 0.00442962 0.004436 0.00444232 0.00444858 0.00445478 0.00446094 0.00446704 0.0044731 0.00447911 0.00448507 0.00449098 0.00449686 0.00450269 0.00450847 0.00451422 0.00451993 0.0045256 0.00453124 0.00453684 0.0045424 0.00454793 0.00455342 0.00455889 0.00456432 0.00456972 0.00457509 0.00458043 0.00458574 0.00459102 0.00459628 0.00460151 0.00460671 0.00461189 0.00461704 0.00462217 0.00462727 0.00463235 0.00463741 0.00464244 0.00464745 0.00465244 0.00465741 0.00466236 0.00466729 0.0046722 0.00467709 0.00468197 0.00468682 0.00469166 0.00469647 0.00470128 0.00470606 0.00471083 0.00471558 0.00472032 -0.000892155 -0.000804082 -0.000715577 -0.000626635 -0.000537253 -0.000447426 -0.00035715 -0.000266421 -0.000175234 -8.35948E-05 8.47411E-06 0.000100562 0.000191435 0.000281112 0.000369604 0.000456915 0.000543051 0.000628017 0.000711818 0.000794459 0.000875946 0.000956283 0.00103548 0.00111353 0.00119045 0.00126624 0.00134091 0.00141446 0.00148689 0.00155822 0.00162844 0.00169757 0.0017656 0.00183254 0.0018984 0.00196318 0.00202689 0.00208953 0.00215111 0.00221162 0.00227109 0.0023295 0.00238687 0.0024432 0.0024985 0.00255277 0.00260602 0.00265824 0.00270946 0.00275966 0.00280886 0.00285706 0.00290427 0.00295049 0.00299573 0.00303999 0.00308328 0.0031256 0.00316696 0.00320737 0.00324682 0.00328533 0.00332291 0.00335955 0.00339527 0.00343007 0.00346396 0.00349695 0.00352904 0.00356024 0.00359056 0.00362001 0.0036486 0.00367633 0.00370322 0.00372927 0.00375451 0.00377893 0.00380256 0.00382541 0.0038475 0.00386883 0.00388943 0.00390931 0.0039285 0.00394701 0.00396488 0.00398211 0.00399875 0.0040148 0.0040303 0.00404528 0.00405977 0.00407378 0.00408735 0.0041005 0.00411327 0.00412566 0.00413772 0.00414945 0.00416088 0.00417203 0.00418291 0.00419354 0.00420393 0.0042141 0.00422405 0.00423381 0.00424338 0.00425276 0.00426197 0.00427102 0.00427991 0.00428864 0.00429723 0.00430569 0.00431401 0.00432221 0.00433028 0.00433823 0.00434608 0.00435381 0.00436144 0.00436897 0.0043764 0.00438374 0.00439099 0.00439816 0.00440524 0.00441224 0.00441917 0.00442601 0.00443279 0.0044395 0.00444614 0.00445271 0.00445923 0.00446568 0.00447207 0.0044784 0.00448468 0.00449091 0.00449708 0.0045032 0.00450928 0.0045153 0.00452129 0.00452722 0.00453311 0.00453896 0.00454477 0.00455054 0.00455627 0.00456196 0.00456761 0.00457323 0.00457882 0.00458437 0.00458988 0.00459537 0.00460082 0.00460624 0.00461163 0.00461699 0.00462232 0.00462762 0.0046329 0.00463815 0.00464337 0.00464857 0.00465374 0.00465889 0.00466402 0.00466912 0.00467419 0.00467925 0.00468428 0.00468929 0.00469428 0.00469925 0.0047042 0.00470913 0.00471404 0.00471894 0.00472381 0.00472867 0.0047335 0.00473833 0.00474313 0.00474792 0.00475269 -0.000891957 -0.000803872 -0.000715352 -0.000626394 -0.000536993 -0.000447145 -0.000356846 -0.000266091 -0.000174877 -8.32084E-05 8.89027E-06 0.000101031 0.000191963 0.000281708 0.000370274 0.000457668 0.000543894 0.000628957 0.000712862 0.000795615 0.000877221 0.000957685 0.00103701 0.00111521 0.00119227 0.00126822 0.00134305 0.00141676 0.00148937 0.00156088 0.00163129 0.00170061 0.00176884 0.00183599 0.00190206 0.00196706 0.002031 0.00209387 0.00215568 0.00221644 0.00227615 0.00233482 0.00239245 0.00244905 0.00250462 0.00255916 0.00261269 0.00266521 0.00271671 0.00276721 0.00281672 0.00286523 0.00291275 0.00295929 0.00300485 0.00304944 0.00309306 0.00313571 0.00317742 0.00321817 0.00325797 0.00329684 0.00333477 0.00337178 0.00340786 0.00344303 0.00347729 0.00351065 0.00354312 0.0035747 0.00360541 0.00363524 0.00366421 0.00369233 0.00371961 0.00374606 0.00377168 0.0037965 0.00382052 0.00384375 0.00386622 0.00388793 0.00390891 0.00392917 0.00394873 0.00396761 0.00398583 0.00400341 0.00402038 0.00403677 0.00405259 0.00406788 0.00408266 0.00409696 0.00411081 0.00412423 0.00413724 0.00414988 0.00416217 0.00417412 0.00418576 0.00419712 0.00420819 0.00421901 0.00422959 0.00423993 0.00425006 0.00425998 0.0042697 0.00427924 0.0042886 0.0042978 0.00430682 0.0043157 0.00432443 0.00433301 0.00434146 0.00434978 0.00435797 0.00436604 0.004374 0.00438184 0.00438958 0.00439722 0.00440476 0.0044122 0.00441955 0.00442681 0.00443398 0.00444108 0.00444809 0.00445503 0.00446189 0.00446868 0.0044754 0.00448206 0.00448865 0.00449518 0.00450165 0.00450805 0.00451441 0.0045207 0.00452695 0.00453314 0.00453928 0.00454537 0.00455142 0.00455742 0.00456337 0.00456928 0.00457515 0.00458098 0.00458677 0.00459252 0.00459823 0.00460391 0.00460954 0.00461515 0.00462072 0.00462625 0.00463176 0.00463723 0.00464267 0.00464808 0.00465346 0.00465881 0.00466414 0.00466943 0.0046747 0.00467995 0.00468517 0.00469036 0.00469553 0.00470067 0.00470579 0.00471089 0.00471596 0.00472102 0.00472605 0.00473106 0.00473605 0.00474102 0.00474597 0.0047509 0.00475581 0.0047607 0.00476558 0.00477044 0.00477528 0.0047801 0.00478491 -0.000891702 -0.000803609 -0.000715078 -0.000626106 -0.00053669 -0.000446825 -0.000356507 -0.00026573 -0.000174493 -8.27984E-05 9.32597E-06 0.000101516 0.000192505 0.000282313 0.000370951 0.000458423 0.000544735 0.000629892 0.000713899 0.00079676 0.000878481 0.000959067 0.00103852 0.00111685 0.00119406 0.00127016 0.00134514 0.00141902 0.0014918 0.00156349 0.00163408 0.00170359 0.00177202 0.00183937 0.00190565 0.00197086 0.00203502 0.00209811 0.00216016 0.00222116 0.00228111 0.00234003 0.00239792 0.00245478 0.00251061 0.00256543 0.00261924 0.00267203 0.00272383 0.00277462 0.00282442 0.00287324 0.00292107 0.00296792 0.0030138 0.00305871 0.00310266 0.00314565 0.00318768 0.00322878 0.00326893 0.00330814 0.00334643 0.00338379 0.00342023 0.00345577 0.0034904 0.00352413 0.00355697 0.00358892 0.00362001 0.00365022 0.00367957 0.00370808 0.00373574 0.00376257 0.00378858 0.00381379 0.00383819 0.00386181 0.00388466 0.00390676 0.00392811 0.00394874 0.00396867 0.00398791 0.00400649 0.00402442 0.00404174 0.00405845 0.0040746 0.0040902 0.00410529 0.00411988 0.004134 0.00414769 0.00416096 0.00417385 0.00418637 0.00419855 0.00421041 0.00422197 0.00423325 0.00424426 0.00425502 0.00426554 0.00427584 0.00428593 0.00429581 0.00430551 0.00431502 0.00432436 0.00433353 0.00434255 0.00435141 0.00436013 0.0043687 0.00437715 0.00438546 0.00439365 0.00440172 0.00440968 0.00441753 0.00442527 0.00443292 0.00444046 0.00444791 0.00445527 0.00446254 0.00446973 0.00447683 0.00448386 0.00449081 0.00449768 0.00450449 0.00451123 0.0045179 0.0045245 0.00453105 0.00453753 0.00454396 0.00455033 0.00455664 0.0045629 0.00456911 0.00457527 0.00458138 0.00458745 0.00459347 0.00459944 0.00460537 0.00461126 0.00461711 0.00462291 0.00462868 0.00463441 0.00464011 0.00464577 0.00465139 0.00465698 0.00466254 0.00466806 0.00467355 0.00467901 0.00468444 0.00468984 0.00469522 0.00470056 0.00470588 0.00471117 0.00471643 0.00472167 0.00472688 0.00473207 0.00473723 0.00474237 0.00474749 0.00475259 0.00475766 0.00476271 0.00476774 0.00477275 0.00477774 0.00478271 0.00478766 0.00479259 0.00479751 0.0048024 0.00480728 0.00481214 0.00481698 -0.000891391 -0.000803292 -0.000714754 -0.000625773 -0.000536345 -0.000446466 -0.000356132 -0.000265338 -0.00017408 -8.23641E-05 9.7821E-06 0.000102019 0.00019306 0.000282929 0.000371635 0.000459183 0.000545578 0.000630825 0.000714929 0.000797894 0.000879727 0.000960432 0.00104001 0.00111848 0.00119583 0.00127207 0.00134721 0.00142124 0.00149419 0.00156605 0.00163682 0.00170651 0.00177513 0.00184268 0.00190917 0.00197459 0.00203896 0.00210228 0.00216455 0.00222578 0.00228598 0.00234514 0.00240328 0.00246039 0.00251649 0.00257158 0.00262565 0.00267873 0.00273081 0.00278189 0.00283199 0.0028811 0.00292923 0.00297639 0.00302258 0.00306781 0.00311208 0.0031554 0.00319777 0.0032392 0.00327969 0.00331924 0.00335788 0.00339559 0.00343239 0.00346828 0.00350328 0.00353737 0.00357058 0.00360291 0.00363436 0.00366495 0.00369469 0.00372357 0.00375161 0.00377883 0.00380522 0.00383081 0.0038556 0.0038796 0.00390283 0.0039253 0.00394703 0.00396804 0.00398833 0.00400794 0.00402687 0.00404516 0.00406281 0.00407986 0.00409634 0.00411225 0.00412764 0.00414253 0.00415693 0.00417089 0.00418443 0.00419756 0.00421033 0.00422274 0.00423481 0.00424658 0.00425806 0.00426927 0.00428022 0.00429092 0.0043014 0.00431165 0.0043217 0.00433156 0.00434122 0.00435071 0.00436003 0.00436919 0.00437819 0.00438704 0.00439574 0.00440431 0.00441275 0.00442106 0.00442925 0.00443733 0.00444529 0.00445314 0.00446089 0.00446853 0.00447608 0.00448354 0.00449091 0.00449819 0.00450539 0.0045125 0.00451954 0.0045265 0.0045334 0.00454021 0.00454697 0.00455365 0.00456027 0.00456683 0.00457333 0.00457978 0.00458616 0.0045925 0.00459877 0.004605 0.00461118 0.00461731 0.00462339 0.00462943 0.00463542 0.00464137 0.00464728 0.00465315 0.00465897 0.00466476 0.00467051 0.00467623 0.0046819 0.00468755 0.00469316 0.00469873 0.00470427 0.00470979 0.00471527 0.00472072 0.00472614 0.00473153 0.00473689 0.00474223 0.00474754 0.00475282 0.00475808 0.00476331 0.00476852 0.0047737 0.00477886 0.004784 0.00478912 0.00479421 0.00479928 0.00480433 0.00480936 0.00481437 0.00481936 0.00482433 0.00482928 0.00483421 0.00483913 0.00484402 0.00484891 -0.000891021 -0.00080292 -0.000714378 -0.000625391 -0.000535956 -0.000446067 -0.000355721 -0.000264912 -0.000173638 -8.19045E-05 1.02596E-05 0.00010254 0.000193631 0.000283557 0.000372327 0.000459947 0.000546422 0.000631755 0.000715953 0.00079902 0.00088096 0.00096178 0.00104148 0.00112008 0.00119756 0.00127394 0.00134923 0.00142343 0.00149653 0.00156856 0.0016395 0.00170938 0.00177818 0.00184593 0.00191261 0.00197824 0.00204282 0.00210636 0.00216885 0.00223031 0.00229075 0.00235015 0.00240853 0.0024659 0.00252226 0.0025776 0.00263195 0.0026853 0.00273765 0.00278902 0.00283941 0.00288881 0.00293724 0.00298471 0.00303121 0.00307675 0.00312134 0.00316498 0.00320767 0.00324943 0.00329026 0.00333015 0.00336913 0.00340719 0.00344434 0.00348059 0.00351594 0.00355039 0.00358397 0.00361666 0.00364849 0.00367945 0.00370955 0.00373881 0.00376724 0.00379483 0.0038216 0.00384757 0.00387274 0.00389712 0.00392073 0.00394358 0.00396568 0.00398706 0.00400772 0.00402769 0.00404698 0.00406561 0.00408361 0.004101 0.0041178 0.00413403 0.00414973 0.00416491 0.00417961 0.00419384 0.00420764 0.00422103 0.00423403 0.00424668 0.00425898 0.00427096 0.00428265 0.00429405 0.00430519 0.00431608 0.00432673 0.00433716 0.00434738 0.00435739 0.00436721 0.00437685 0.00438632 0.00439562 0.00440475 0.00441374 0.00442258 0.00443128 0.00443984 0.00444827 0.00445658 0.00446477 0.00447285 0.00448081 0.00448866 0.00449642 0.00450407 0.00451163 0.00451909 0.00452647 0.00453376 0.00454097 0.0045481 0.00455515 0.00456212 0.00456903 0.00457586 0.00458263 0.00458933 0.00459596 0.00460254 0.00460906 0.00461551 0.00462192 0.00462827 0.00463456 0.00464081 0.004647 0.00465315 0.00465925 0.00466531 0.00467132 0.00467729 0.00468321 0.0046891 0.00469495 0.00470075 0.00470652 0.00471226 0.00471795 0.00472361 0.00472924 0.00473484 0.0047404 0.00474593 0.00475143 0.0047569 0.00476234 0.00476775 0.00477314 0.00477849 0.00478382 0.00478913 0.0047944 0.00479965 0.00480488 0.00481009 0.00481526 0.00482042 0.00482556 0.00483067 0.00483576 0.00484083 0.00484588 0.0048509 0.00485591 0.0048609 0.00486587 0.00487083 0.00487576 0.00488068 -0.000890593 -0.000802494 -0.000713951 -0.000624962 -0.000535522 -0.000445627 -0.000355272 -0.000264453 -0.000173167 -8.14187E-05 1.07594E-05 0.00010308 0.000194218 0.000284198 0.00037303 0.000460718 0.000547269 0.000632685 0.000716974 0.000800138 0.000882183 0.000963114 0.00104293 0.00112165 0.00119927 0.00127579 0.00135122 0.00142557 0.00149883 0.00157102 0.00164214 0.00171219 0.00178118 0.00184911 0.00191599 0.00198182 0.00204661 0.00211036 0.00217308 0.00223476 0.00229542 0.00235506 0.00241369 0.0024713 0.00252791 0.00258352 0.00263813 0.00269174 0.00274437 0.00279602 0.00284669 0.00289638 0.00294511 0.00299287 0.00303968 0.00308553 0.00313043 0.00317438 0.0032174 0.00325948 0.00330064 0.00334087 0.00338019 0.00341859 0.00345609 0.00349268 0.00352838 0.0035632 0.00359713 0.00363019 0.00366238 0.00369371 0.00372418 0.00375381 0.00378261 0.00381058 0.00383773 0.00386407 0.00388961 0.00391437 0.00393836 0.00396158 0.00398406 0.0040058 0.00402683 0.00404716 0.0040668 0.00408579 0.00410413 0.00412186 0.00413899 0.00415554 0.00417155 0.00418703 0.00420201 0.00421653 0.0042306 0.00424424 0.0042575 0.00427037 0.00428291 0.00429511 0.004307 0.00431861 0.00432994 0.00434101 0.00435184 0.00436244 0.00437283 0.00438301 0.00439299 0.00440278 0.00441239 0.00442184 0.00443112 0.00444024 0.00444921 0.00445804 0.00446673 0.00447529 0.00448372 0.00449202 0.00450021 0.00450828 0.00451625 0.00452411 0.00453187 0.00453953 0.00454709 0.00455456 0.00456195 0.00456925 0.00457647 0.00458361 0.00459067 0.00459766 0.00460457 0.00461142 0.0046182 0.00462492 0.00463157 0.00463816 0.00464469 0.00465117 0.00465759 0.00466395 0.00467027 0.00467653 0.00468274 0.00468891 0.00469503 0.0047011 0.00470713 0.00471312 0.00471906 0.00472497 0.00473083 0.00473666 0.00474245 0.0047482 0.00475392 0.0047596 0.00476524 0.00477086 0.00477644 0.00478199 0.00478751 0.004793 0.00479846 0.00480389 0.00480929 0.00481467 0.00482002 0.00482534 0.00483064 0.00483591 0.00484115 0.00484638 0.00485157 0.00485675 0.0048619 0.00486703 0.00487214 0.00487723 0.0048823 0.00488735 0.00489238 0.00489738 0.00490237 0.00490735 0.0049123 -0.000890105 -0.000802011 -0.000713472 -0.000624484 -0.000535043 -0.000445145 -0.000354785 -0.00026396 -0.000172664 -8.09057E-05 1.12825E-05 0.00010364 0.000194822 0.000284853 0.000373743 0.000461497 0.00054812 0.000633617 0.000717992 0.00080125 0.000883396 0.000964434 0.00104437 0.00112321 0.00120095 0.00127761 0.00135318 0.00142768 0.00150109 0.00157344 0.00164473 0.00171495 0.00178412 0.00185224 0.00191931 0.00198534 0.00205033 0.00211429 0.00217722 0.00223912 0.00230001 0.00235988 0.00241874 0.0024766 0.00253346 0.00258932 0.00264419 0.00269807 0.00275097 0.00280289 0.00285383 0.00290381 0.00295283 0.00300089 0.00304799 0.00309414 0.00313935 0.00318362 0.00322696 0.00326936 0.00331084 0.0033514 0.00339105 0.00342979 0.00346763 0.00350457 0.00354062 0.00357579 0.00361007 0.00364349 0.00367604 0.00370773 0.00373857 0.00376857 0.00379774 0.00382608 0.0038536 0.00388031 0.00390623 0.00393136 0.00395572 0.00397931 0.00400216 0.00402427 0.00404566 0.00406635 0.00408636 0.00410569 0.00412438 0.00414244 0.0041599 0.00417678 0.0041931 0.00420888 0.00422416 0.00423896 0.0042533 0.00426721 0.00428071 0.00429383 0.00430659 0.00431901 0.00433112 0.00434293 0.00435445 0.00436572 0.00437673 0.00438751 0.00439806 0.00440841 0.00441855 0.00442849 0.00443826 0.00444785 0.00445727 0.00446653 0.00447564 0.0044846 0.00449342 0.0045021 0.00451065 0.00451908 0.00452738 0.00453557 0.00454364 0.00455161 0.00455947 0.00456724 0.0045749 0.00458247 0.00458996 0.00459735 0.00460466 0.00461189 0.00461904 0.00462611 0.00463311 0.00464004 0.0046469 0.0046537 0.00466043 0.0046671 0.0046737 0.00468025 0.00468674 0.00469318 0.00469956 0.00470589 0.00471217 0.0047184 0.00472458 0.00473072 0.00473681 0.00474286 0.00474886 0.00475483 0.00476075 0.00476663 0.00477248 0.00477829 0.00478406 0.00478979 0.00479549 0.00480116 0.00480679 0.00481239 0.00481796 0.0048235 0.00482901 0.00483449 0.00483994 0.00484536 0.00485075 0.00485612 0.00486146 0.00486678 0.00487207 0.00487733 0.00488257 0.00488779 0.00489299 0.00489816 0.00490331 0.00490844 0.00491355 0.00491863 0.0049237 0.00492875 0.00493377 0.00493878 0.00494377 -0.000889556 -0.000801471 -0.000712938 -0.000623955 -0.000534517 -0.00044462 -0.000354259 -0.00026343 -0.00017213 -8.03645E-05 1.18299E-05 0.000104222 0.000195445 0.000285523 0.000374468 0.000462284 0.000548977 0.00063455 0.000719009 0.000802357 0.000884601 0.000965743 0.00104579 0.00112475 0.00120261 0.0012794 0.00135511 0.00142975 0.00150332 0.00157582 0.00164727 0.00171766 0.00178701 0.0018553 0.00192256 0.00198878 0.00205397 0.00211814 0.00218128 0.0022434 0.00230451 0.00236461 0.0024237 0.0024818 0.0025389 0.00259501 0.00265013 0.00270427 0.00275744 0.00280963 0.00286085 0.00291111 0.00296041 0.00300876 0.00305615 0.00310261 0.00314812 0.0031927 0.00323634 0.00327906 0.00332087 0.00336175 0.00340173 0.0034408 0.00347898 0.00351626 0.00355265 0.00358817 0.0036228 0.00365657 0.00368948 0.00372153 0.00375273 0.0037831 0.00381263 0.00384133 0.00386922 0.00389631 0.00392259 0.00394809 0.00397282 0.00399679 0.00402 0.00404248 0.00406423 0.00408528 0.00410564 0.00412533 0.00414436 0.00416276 0.00418055 0.00419775 0.00421439 0.00423048 0.00424605 0.00426113 0.00427575 0.00428992 0.00430368 0.00431704 0.00433004 0.00434268 0.004355 0.00436702 0.00437875 0.0043902 0.0044014 0.00441235 0.00442308 0.00443359 0.00444389 0.004454 0.00446391 0.00447365 0.00448322 0.00449262 0.00450186 0.00451096 0.00451991 0.00452872 0.00453739 0.00454594 0.00455436 0.00456266 0.00457085 0.00457892 0.00458689 0.00459476 0.00460253 0.0046102 0.00461778 0.00462527 0.00463267 0.00463999 0.00464723 0.00465439 0.00466148 0.00466849 0.00467543 0.00468231 0.00468911 0.00469586 0.00470254 0.00470916 0.00471573 0.00472223 0.00472869 0.00473508 0.00474143 0.00474773 0.00475398 0.00476018 0.00476633 0.00477244 0.0047785 0.00478453 0.00479051 0.00479645 0.00480235 0.00480821 0.00481404 0.00481983 0.00482558 0.0048313 0.00483699 0.00484264 0.00484826 0.00485385 0.0048594 0.00486493 0.00487043 0.0048759 0.00488134 0.00488675 0.00489214 0.0048975 0.00490283 0.00490814 0.00491342 0.00491868 0.00492392 0.00492913 0.00493433 0.00493949 0.00494464 0.00494977 0.00495487 0.00495996 0.00496502 0.00497007 0.0049751 -0.000888945 -0.000800872 -0.00071235 -0.000623376 -0.000533944 -0.000444051 -0.000353693 -0.000262864 -0.000171562 -7.9794E-05 1.24028E-05 0.000104827 0.000196087 0.00028621 0.000375207 0.000463082 0.000549841 0.000635488 0.000720026 0.000803462 0.000885799 0.000967043 0.0010472 0.00112627 0.00120426 0.00128117 0.00135701 0.00143179 0.00150551 0.00157817 0.00164977 0.00172033 0.00178984 0.00185832 0.00192576 0.00199217 0.00205755 0.00212192 0.00218526 0.0022476 0.00230892 0.00236925 0.00242857 0.0024869 0.00254424 0.0026006 0.00265597 0.00271036 0.00276379 0.00281624 0.00286774 0.00291827 0.00296785 0.00301648 0.00306417 0.00311092 0.00315673 0.00320161 0.00324556 0.0032886 0.00333072 0.00337192 0.00341223 0.00345163 0.00349013 0.00352775 0.00356448 0.00360034 0.00363532 0.00366944 0.0037027 0.0037351 0.00376667 0.00379739 0.00382728 0.00385635 0.0038846 0.00391205 0.00393871 0.00396457 0.00398967 0.004014 0.00403758 0.00406042 0.00408253 0.00410394 0.00412465 0.00414469 0.00416407 0.00418281 0.00420093 0.00421846 0.00423541 0.00425181 0.00426768 0.00428305 0.00429794 0.00431239 0.0043264 0.00434001 0.00435324 0.00436612 0.00437866 0.00439088 0.00440281 0.00441446 0.00442584 0.00443698 0.00444788 0.00445856 0.00446902 0.00447929 0.00448936 0.00449925 0.00450896 0.0045185 0.00452789 0.00453711 0.00454619 0.00455513 0.00456393 0.0045726 0.00458114 0.00458956 0.00459786 0.00460605 0.00461412 0.0046221 0.00462997 0.00463774 0.00464542 0.004653 0.0046605 0.00466791 0.00467524 0.00468249 0.00468966 0.00469676 0.00470379 0.00471074 0.00471763 0.00472445 0.00473121 0.0047379 0.00474454 0.00475112 0.00475764 0.00476411 0.00477053 0.00477689 0.0047832 0.00478947 0.00479568 0.00480186 0.00480798 0.00481406 0.00482011 0.0048261 0.00483206 0.00483798 0.00484386 0.00484971 0.00485552 0.00486129 0.00486702 0.00487273 0.0048784 0.00488404 0.00488964 0.00489522 0.00490076 0.00490628 0.00491177 0.00491723 0.00492266 0.00492806 0.00493344 0.0049388 0.00494412 0.00494943 0.0049547 0.00495996 0.00496519 0.0049704 0.00497559 0.00498075 0.0049859 0.00499102 0.00499613 0.00500121 0.00500628 -0.000888271 -0.000800214 -0.000711706 -0.000622744 -0.000533322 -0.000443437 -0.000353085 -0.00026226 -0.00017096 -7.91931E-05 1.30023E-05 0.000105455 0.00019675 0.000286915 0.000375961 0.000463892 0.000550714 0.000636431 0.000721046 0.000804566 0.000886994 0.000968334 0.00104859 0.00112777 0.00120588 0.00128292 0.00135889 0.0014338 0.00150766 0.00158047 0.00165223 0.00172295 0.00179263 0.00186128 0.0019289 0.00199549 0.00206107 0.00212563 0.00218918 0.00225172 0.00231326 0.0023738 0.00243335 0.00249191 0.00254948 0.00260608 0.0026617 0.00271634 0.00277002 0.00282274 0.0028745 0.00292531 0.00297516 0.00302407 0.00307205 0.00311908 0.00316519 0.00321037 0.00325463 0.00329797 0.0033404 0.00338192 0.00342254 0.00346227 0.0035011 0.00353905 0.00357612 0.00361231 0.00364764 0.0036821 0.0037157 0.00374846 0.00378037 0.00381145 0.0038417 0.00387113 0.00389974 0.00392756 0.00395457 0.0039808 0.00400626 0.00403095 0.0040549 0.0040781 0.00410057 0.00412234 0.0041434 0.00416379 0.00418351 0.00420259 0.00422105 0.0042389 0.00425617 0.00427288 0.00428905 0.00430471 0.00431989 0.0043346 0.00434888 0.00436274 0.00437621 0.00438932 0.00440208 0.00441451 0.00442665 0.00443849 0.00445007 0.00446138 0.00447246 0.00448331 0.00449394 0.00450437 0.00451459 0.00452463 0.00453449 0.00454418 0.00455371 0.00456307 0.00457228 0.00458135 0.00459028 0.00459907 0.00460773 0.00461626 0.00462468 0.00463298 0.00464117 0.00464925 0.00465722 0.0046651 0.00467287 0.00468056 0.00468815 0.00469565 0.00470307 0.00471041 0.00471767 0.00472486 0.00473196 0.004739 0.00474597 0.00475287 0.00475971 0.00476648 0.00477319 0.00477984 0.00478643 0.00479297 0.00479946 0.00480589 0.00481227 0.0048186 0.00482488 0.00483111 0.0048373 0.00484344 0.00484954 0.0048556 0.00486162 0.00486759 0.00487353 0.00487943 0.00488529 0.00489112 0.00489691 0.00490266 0.00490838 0.00491407 0.00491973 0.00492535 0.00493095 0.00493651 0.00494205 0.00494755 0.00495303 0.00495848 0.0049639 0.0049693 0.00497467 0.00498002 0.00498534 0.00499064 0.00499591 0.00500116 0.00500639 0.00501159 0.00501678 0.00502194 0.00502708 0.00503221 0.00503731 -0.000887533 -0.000799496 -0.000711006 -0.000622058 -0.00053265 -0.000442777 -0.000352435 -0.000261618 -0.000170323 -7.85606E-05 1.36295E-05 0.000106108 0.000197435 0.000287639 0.000376731 0.000464715 0.000551597 0.000637381 0.00072207 0.00080567 0.000888185 0.00096962 0.00104998 0.00112927 0.00120749 0.00128464 0.00136074 0.00143579 0.00150979 0.00158274 0.00165465 0.00172553 0.00179537 0.00186419 0.00193198 0.00199876 0.00206452 0.00212927 0.00219302 0.00225577 0.00231752 0.00237827 0.00243804 0.00249683 0.00255463 0.00261146 0.00266732 0.00272222 0.00277615 0.00282912 0.00288114 0.00293222 0.00298234 0.00303153 0.00307978 0.0031271 0.0031735 0.00321897 0.00326353 0.00330717 0.00334991 0.00339174 0.00343268 0.00347273 0.00351188 0.00355016 0.00358756 0.00362408 0.00365975 0.00369455 0.0037285 0.0037616 0.00379386 0.00382529 0.00385589 0.00388568 0.00391465 0.00394282 0.0039702 0.00399679 0.00402261 0.00404766 0.00407196 0.00409552 0.00411836 0.00414047 0.00416189 0.00418263 0.0042027 0.00422211 0.0042409 0.00425908 0.00427667 0.00429369 0.00431017 0.00432612 0.00434158 0.00435657 0.00437111 0.00438522 0.00439894 0.00441228 0.00442527 0.00443792 0.00445026 0.0044623 0.00447407 0.00448557 0.00449683 0.00450785 0.00451865 0.00452924 0.00453962 0.00454982 0.00455982 0.00456966 0.00457932 0.00458882 0.00459817 0.00460737 0.00461642 0.00462534 0.00463412 0.00464278 0.00465131 0.00465972 0.00466802 0.00467621 0.00468429 0.00469227 0.00470015 0.00470793 0.00471562 0.00472322 0.00473073 0.00473816 0.00474551 0.00475278 0.00475997 0.00476709 0.00477414 0.00478112 0.00478803 0.00479488 0.00480167 0.00480839 0.00481506 0.00482167 0.00482822 0.00483472 0.00484117 0.00484756 0.00485391 0.00486021 0.00486646 0.00487266 0.00487882 0.00488494 0.00489101 0.00489705 0.00490304 0.004909 0.00491491 0.00492079 0.00492664 0.00493244 0.00493822 0.00494396 0.00494966 0.00495534 0.00496098 0.00496659 0.00497217 0.00497773 0.00498325 0.00498875 0.00499422 0.00499966 0.00500507 0.00501046 0.00501583 0.00502116 0.00502648 0.00503177 0.00503704 0.00504229 0.00504751 0.00505271 0.00505789 0.00506305 0.00506819 -0.000886729 -0.000798715 -0.000710246 -0.000621319 -0.000531928 -0.00044207 -0.000351741 -0.000260935 -0.00016965 -7.78952E-05 1.42858E-05 0.000106788 0.000198144 0.000288384 0.000377518 0.000465553 0.000552492 0.000638339 0.000723099 0.000806777 0.000889376 0.000970901 0.00105136 0.00113075 0.00120908 0.00128635 0.00136258 0.00143775 0.00151188 0.00158498 0.00165704 0.00172807 0.00179807 0.00186705 0.00193502 0.00200197 0.00206792 0.00213286 0.0021968 0.00225974 0.0023217 0.00238267 0.00244265 0.00250166 0.00255969 0.00261675 0.00267285 0.00272798 0.00278216 0.00283539 0.00288767 0.002939 0.0029894 0.00303885 0.00308738 0.00313499 0.00318167 0.00322743 0.00327228 0.00331622 0.00335926 0.0034014 0.00344265 0.00348301 0.00352249 0.00356108 0.00359881 0.00363566 0.00367166 0.0037068 0.00374109 0.00377453 0.00380714 0.00383891 0.00386987 0.0039 0.00392933 0.00395785 0.00398558 0.00401253 0.00403871 0.00406412 0.00408878 0.00411269 0.00413588 0.00415835 0.00418012 0.00420121 0.00422162 0.00424137 0.0042605 0.004279 0.00429691 0.00431425 0.00433103 0.00434728 0.00436302 0.00437829 0.0043931 0.00440747 0.00442143 0.00443501 0.00444822 0.00446109 0.00447364 0.00448589 0.00449785 0.00450954 0.00452098 0.00453218 0.00454315 0.0045539 0.00456444 0.00457479 0.00458495 0.00459493 0.00460474 0.00461438 0.00462386 0.00463319 0.00464238 0.00465142 0.00466033 0.0046691 0.00467775 0.00468628 0.00469469 0.00470299 0.00471117 0.00471926 0.00472724 0.00473512 0.00474291 0.0047506 0.00475821 0.00476573 0.00477317 0.00478052 0.0047878 0.00479501 0.00480214 0.0048092 0.00481619 0.00482312 0.00482998 0.00483678 0.00484352 0.0048502 0.00485682 0.00486339 0.0048699 0.00487637 0.00488278 0.00488914 0.00489545 0.00490172 0.00490794 0.00491412 0.00492025 0.00492634 0.0049324 0.00493841 0.00494438 0.00495031 0.00495621 0.00496207 0.0049679 0.00497369 0.00497944 0.00498517 0.00499086 0.00499652 0.00500215 0.00500775 0.00501332 0.00501886 0.00502438 0.00502986 0.00503532 0.00504076 0.00504616 0.00505154 0.0050569 0.00506224 0.00506755 0.00507283 0.0050781 0.00508334 0.00508856 0.00509376 0.00509893 tmpk8ny_4pz/examples/xspice/table/clc409.sub0000644000175000017500000001104313546075722021070 0ustar carstencarsten* * This is a Very Wide band, Low Distortion Monolithic * Current Feedback Op Amp. * * Version 1, Rev. A, Date 04-09-92, By RRS * * Connections: Non-Inverting Input * | Inverting Input * | | Output * | | | +Vcc * | | | | -Vcc * | | | | | .SUBCKT CLC409 3 2 6 7 4 * * DC BIAS MIRROR * R1 7 4 28K R2 7 9 271 R3 10 4 335 * G1 7 11 POLY(2) 7 9 7 4 0 3.15M 21.5U C3 11 0 128F * G2 14 4 POLY(1) 10 4 0 2.95M C4 14 0 104F * * INPUT VOLTAGE BUFFER * E1 3 17 POLY(1) 35 0 1.0M 1.673 C6 17 0 1.00P * Q1 10 17 12 QINP D3 11 12 DY Q2 9 17 13 QINN D4 13 14 DY * G3 2 0 POLY(1) 36 0 0 9.282M C10 2 0 2.9P * D5 22 2 DY Q3 21 11 22 QINN D6 2 23 DY Q4 24 14 23 QINP * * CURRENT MIRROR GAIN BLOCKS * R10 7 20 640 V1 20 21 1.9 C8 21 28 294F G4 7 28 POLY(1) 7 20 0 4.3M R15 7 28 102K C13 28 0 641F D1 28 26 DX V3 7 26 1.65 G6 7 30 POLY(1) 7 20 0 2.74M C15 30 0 676F * R13 25 4 640 V2 24 25 1.85 C12 24 29 294F G5 29 4 POLY(1) 25 4 0 4.5M R16 29 4 761K C14 29 0 312F D2 27 29 DX V4 27 4 1.55 G7 31 4 POLY(1) 25 4 0 6.74M C16 31 0 330F * * OUTPUT STAGE AND COMPENSATION CAPACITORS * R14 28 29 45.0 Q5 4 29 30 QOUTP1 Q6 7 28 31 QOUTN1 * C9 21 33 .935P C11 24 33 .935P C17 33 0 4.00P R19 33 6 10 * Q7 7 30 33 QOUTN2 Q8 4 31 33 QOUTP2 * * NOISE BLOCKS * R20 35 0 122 R21 35 0 122 * R22 36 0 122 R23 36 0 122 * * MODELS * .MODEL DX D TT=200N .MODEL DY D IS=0.166F * .MODEL QINN NPN + IS =0.166f BF =3.239E+02 NF =1.000E+00 VAF=8.457E+01 + IKF=2.462E-02 ISE=2.956E-17 NE =1.197E+00 BR =3.719E+01 + NR =1.000E+00 VAR=1.696E+00 IKR=3.964E-02 ISC=1.835E-19 + NC =1.700E+00 RB =118 IRB=0.000E+00 RBM=65.1 + RC =2.645E+01 CJE=1.632E-13 VJE=7.973E-01 + MJE=4.950E-01 TF =1.948E-11 XTF=1.873E+01 VTF=2.825E+00 + ITF=5.955E-02 PTF=0.000E+00 CJC=1.720E-13 VJC=8.046E-01 + MJC=4.931E-01 XCJC=589m TR =4.212E-10 CJS=629f + MJS=0 KF =2.000E-12 AF =1.000E+00 FC =9.765E-01 * .MODEL QOUTN1 NPN + IS =3.954E-16 BF =3.239E+02 NF =1.000E+00 VAF=8.457E+01 + IKF=4.590E-02 ISE=5.512E-17 NE =1.197E+00 BR =3.719E+01 + NR =1.000E+00 VAR=1.696E+00 IKR=7.392E-02 ISC=3.087E-19 + NC =1.700E+00 RB =3.645E+01 IRB=0.000E+00 RBM=8.077E+00 + RE =3.010E-01 RC =2.702E+01 CJE=2.962E-13 + MJE=4.950E-01 TF =1.904E-11 XTF=1.873E+01 VTF=2.825E+00 + ITF=1.110E-01 PTF=0.000E+00 CJC=2.846E-13 VJC=8.046E-01 + MJC=4.931E-01 XCJC=1.562E-01 TR =5.832E-10 CJS=5.015E-13 + VJS=5.723E-01 MJS=4.105E-01 KF =2.000E-12 AF =1.000E+00 + FC =9.765E-01 * .MODEL QOUTN2 NPN + IS =9.386E-16 BF =3.239E+02 NF =1.000E+00 VAF=8.457E+01 + IKF=1.089E-01 ISE=1.308E-16 NE =1.197E+00 BR =3.956E+01 + NR =1.000E+00 VAR=1.696E+00 IKR=7.392E-02 ISC=1.378E-18 + NC =1.700E+00 RB =65.4 IRB=0.000E+00 RBM=1.683E+00 + RC =1.857E+01 CJE=7.030E-13 VJE=7.973E-01 + MJE=4.950E-01 TF =1.875E-11 XTF=1.873E+01 VTF=2.825E+00 + ITF=2.635E-01 PTF=0.000E+00 CJC=6.172E-13 VJC=8.046E-01 + MJC=4.931E-01 XCJC=860m TR =1.069E-09 CJS=1.028E-12 + VJS=5.723E-01 MJS=4.105E-01 KF =2.000E-12 AF =1.000E+00 + FC =9.765E-01 * .MODEL QINP PNP + IS =0.166f BF =7.165E+01 NF =1.000E+00 VAF=2.000E+01 + IKF=1.882E-02 ISE=6.380E-16 NE =1.366E+00 BR =1.833E+01 + NR =1.000E+00 VAR=1.805E+00 IKR=1.321E-01 ISC=3.666E-18 + NC =1.634E+00 RB =78.8 IRB=0.000E+00 RBM=57.6 + RC =3.739E+01 CJE=1.588E-13 VJE=7.975E-01 + MJE=5.000E-01 TF =3.156E-11 XTF=5.386E+00 VTF=2.713E+00 + ITF=5.084E-02 PTF=0.000E+00 CJC=2.725E-13 VJC=7.130E-01 + MJC=4.200E-01 XCJC=741m TR =7.500E-11 CJS=515f + MJS=0 KF =2.000E-12 AF =1.000E+00 FC =8.803E-01 * .MODEL QOUTP1 PNP + IS =2.399E-16 BF =7.165E+01 NF =1.000E+00 VAF=3.439E+01 + IKF=3.509E-02 ISE=1.190E-15 NE =1.366E+00 BR =1.900E+01 + NR =1.000E+00 VAR=1.805E+00 IKR=2.464E-01 ISC=6.745E-18 + NC =1.634E+00 RB =1.542E+01 IRB=0.000E+00 RBM=4.059E+00 + RC =4.174E+01 CJE=2.962E-13 VJE=7.975E-01 + MJE=5.000E-01 TF =3.107E-11 XTF=5.386E+00 VTF=2.713E+00 + ITF=9.481E-02 PTF=0.000E+00 CJC=4.508E-13 VJC=7.130E-01 + MJC=4.200E-01 XCJC=1.562E-01 TR =9.500E-11 CJS=1.045E-12 + VJS=6.691E-01 MJS=3.950E-01 KF =2.000E-12 AF =1.000E+00 + FC =8.803E-01 * .MODEL QOUTP2 PNP + IS =5.693E-16 BF =7.165E+01 NF =1.000E+00 VAF=3.439E+01 + IKF=8.328E-02 ISE=5.742E-15 NE =1.366E+00 BR =1.923E+01 + NR =1.000E+00 VAR=1.805E+00 IKR=5.848E-01 ISC=1.586E-17 + NC =1.634E+00 RB =56.5 IRB=0.000E+00 RBM=51.7 + RC =1.767E+00 CJE=7.030E-13 VJE=7.975E-01 + MJE=5.000E-01 TF =3.073E-11 XTF=5.386E+00 VTF=2.713E+00 + ITF=2.250E-01 PTF=0.000E+00 CJC=9.776E-13 VJC=7.130E-01 + MJC=4.200E-01 XCJC=923m TR =1.450E-10 CJS=1.637E-12 + VJS=6.691E-01 MJS=3.950E-01 KF =2.000E-12 AF =1.000E+00 + FC =8.803E-01 * .ENDS CLC409 tmpk8ny_4pz/examples/xspice/table/table-model-mos-3d-2.sp0000644000175000017500000000127713546075722023357 0ustar carstencarstenCode Model Test - 3d Table Model * bsim4 transistor dc input and output characteristics * *** analysis type *** .control dc V1 -0.1 1.7 0.06 V2 0.2 1.7 0.25 plot i(Vs) plot deriv(i(Vs)) reset dc v2 0 1.7 0.04 plot i(Vs) plot deriv(i(Vs)) reset dc V1 -0.1 1.7 0.06 plot i(Vs2) .endc * *** input sources *** * v1 d 0 DC 0.1 * v2 g 0 DC 1.5 * Vs s 0 0 Vb b 0 -0.5 Vs2 s2 0 0 * *** table model of mos transistor *** amos1 %vd(d s) %vd(g s) %vd(b s) %id(d s) mostable1 .model mostable1 table3d (offset=0.0 gain=1 order=4 file="bsim4n-3d-1.table") * L=0.13u W=10.0u rgeoMod=1 * BSIM 4.7 * change width of transistor by modifying parameter "gain" amos2 %vd(d s2) %vd(d s2) %vd(b s2) %id(d s2) mostable1 .end tmpk8ny_4pz/examples/xspice/table/table-model-bip-2d-1-oc.sp0000644000175000017500000000273413546075722023727 0ustar carstencarsten** npn bipolar: table 2D (Vce, Ib) compared to q model * bipolar transistor qinn from National Semi op-amp clc409 * please run the table generator table-generator-q-2d.sp in ngspice to * create the table data file qinn-clc409-2d-1.table as required here ** Circuit Description ** Q3 2 1 3 QINN ib 0 1 2u vce 2 0 5 vee 3 0 0 xbip cc bb ee tbqnpn ib2 0 bb 2u vce2 cc 0 1 vee2 ee 0 0 * set a simulation temperature .options temp=1 .subckt tbqnpn c b e *** table model of npn bipolar transistor *** * bip qinn from national op-amp CLC409 * table values extracted at nominal temperature of 27°C * simple behavioral temperature model .param fact = 0.05 .param tgain = 1. + (TEMPER / 27. - 1.) * {fact} abip1 %vd(c e) %id(bint e) %id(c e) biptable1 .model biptable1 table2d (offset=0.0 gain={tgain} order=2 file="qinn-clc409-2d-1.table") * CJE=1.632E-13 Cje b e 1.632E-13 * CJC=1.720E-13 Cjc b c 1.720E-13 * input diode Dbe b bint DMOD .model DMOD D (bv=5 is=1e-17 n=1.1) .ends .MODEL QINN NPN + IS =0.166f BF =3.239E+02 NF =1.000E+00 VAF=8.457E+01 + IKF=2.462E-02 ISE=2.956E-17 NE =1.197E+00 BR =3.719E+01 + NR =1.000E+00 VAR=1.696E+00 IKR=3.964E-02 ISC=1.835E-19 + NC =1.700E+00 RB =118 IRB=0.000E+00 RBM=65.1 + RC =2.645E+01 CJE=1.632E-13 VJE=7.973E-01 + MJE=4.950E-01 TF =1.948E-11 XTF=1.873E+01 VTF=2.825E+00 + ITF=5.955E-02 PTF=0.000E+00 CJC=1.720E-13 VJC=8.046E-01 + MJC=4.931E-01 XCJC=589m TR =4.212E-10 CJS=629f + MJS=0 KF =2.000E-12 AF =1.000E+00 FC =9.765E-01 * .end tmpk8ny_4pz/examples/xspice/table/table-model-mos-2d-2.sp0000644000175000017500000000131513546075722023347 0ustar carstencarstenCode Model Test - 2d Table Model * bsim4 transistor dc input and output characteristics * *** analysis type *** .control dc V1 -0.1 1.7 0.06 V2 0.3 1.7 0.3 plot i(Vs) plot deriv(i(Vs)) reset dc v2 0 1.7 0.04 plot i(Vs) plot deriv(i(Vs)) reset dc V1 -0.1 1.7 0.06 plot i(Vs2) .endc * *** input sources *** * v1 d 0 DC 0.1 * v2 g 0 DC 1.5 * Vs s 0 0 Vs2 s2 0 0 * *** table model of mos transistor *** amos1 %vd(d s) %vd(g s) %id(d s) mostable1 .model mostable1 table2d (offset=0.0 gain=0.5 order=3 file="bsim4n-2d-3.table") * L=0.13u W=10.0u rgeoMod=1 * BSIM 4.7 * change width of transistor by modifying parameter "gain" * source is always tied to bulk (2d model!) amos2 %vd(d s2) %vd(d s2) %id(d s2) mostable1 .end tmpk8ny_4pz/examples/xspice/table/table-generator-b4-2d.sp0000644000175000017500000000476213546075722023616 0ustar carstencarsten** NMOSFET: table generator with BSIM4 2D (Vdrain, Vgate) * This file may be run by 'ngspice table-generator-b4-2d.sp' * It will generate a 2D data table by simulating the MOS drain current * as function of drain and gate voltages. The simulation uses * the ngspice BSIM4.6.1 MOS model and Berkeley model parameters. * This table is an input file for the XSPICE 2D table model. * You have to select NMOS or PMOS by manually editing this file: currently * PMOS is selected. For NMOS change '*' in column 1 * for CSPARAM, m1, outfile, echo *table... * In addition you may change the step sizes vdstep vgstep vbstep in CSPARAM * to obtain the required resolution for the data. * These tables will contain pure dc data. For transient simulation you may * need to add some capacitors to the device model for a 'real world' simulation. *NMOS *.csparam vdstart=-0.1 *.csparam vdstop=1.8 *.csparam vdstep=0.05 *.csparam vgstart=-0.1 *.csparam vgstop=1.8 *.csparam vgstep=0.05 *PMOS .csparam vdstart=-1.8 .csparam vdstop=0.1 .csparam vdstep=0.01 .csparam vgstart=-1.8 .csparam vgstop=0.1 .csparam vgstep=0.01 ** Circuit Description ** *m1 2 1 3 0 nbsim4 L=0.13u W=10.0u rgeoMod=1 m1 2 1 3 0 pbsim4 L=0.13u W=10.0u rgeoMod=1 vgs 1 0 1.8 vds 2 0 1.8 vss 3 0 0 .control ** output file ** *set outfile = "bsim4n-2d-1.table" set outfile = "bsim4p-2d-1.table" save i(vss) *echo *table for nmos bsim 4 > $outfile echo *table for pmos bsim 4 > $outfile let xcount = floor((vdstop-vdstart)/vdstep) + 1 let ycount = floor((vgstop-vgstart)/vgstep) + 1 echo *x >> $outfile echo $&xcount >> $outfile echo *y >> $outfile echo $&ycount >> $outfile let xvec = vector(xcount) let yvec = vector(ycount) let loopx = vdstart let lcx=0 while lcx < xcount let xvec[lcx] = loopx let loopx = loopx + vdstep let lcx = lcx + 1 end echo *x row >> $outfile echo $&xvec >> $outfile let lcy=0 let loopy = vgstart while lcy < ycount let yvec[lcy] = loopy let loopy = loopy + vgstep let lcy = lcy + 1 end echo *y column >> $outfile echo $&yvec >> $outfile let lcy=0 let loopy = vgstart while lcy < ycount alter vgs loopy dc vds $&vdstart $&vdstop $&vdstep * let lcx=0 * let loopx = vdstart * dowhile loopx le vdstop * alter vds loopx * op * let xvec[lcx] = i(vss) * destroy i(vss) * let loopx = loopx + vdstep * let lcx = lcx + 1 * end let xvec = i(vss) echo $&xvec >> $outfile destroy dc1 let loopy = loopy + vgstep let lcy = lcy + 1 end .endc .include ./modelcards/modelcard.pmos .include ./modelcards/modelcard.nmos .end tmpk8ny_4pz/examples/xspice/table/modelcards/0000755000175000017500000000000013546075722021475 5ustar carstencarstentmpk8ny_4pz/examples/xspice/table/modelcards/modelcard.pmos0000644000175000017500000001446613546075722024342 0ustar carstencarsten ******** BSIM4.6.1 Model Card for PMOS ******** ** The BSIM4 model card below was not extracted/obtained from/based on ** any real technologies. It should not be used for any other purposes ** except for benchmarking the implementation of BSIM4.6.0 against BSIM ** Team's standard results using SPICE3f5. **** Mohan Dunga, Wenwei Yang, Ali Niknejad, and Chenming Hu 05/18/2007. ** Model: BSIM4.6.1 ** Berkeley SPICE3f5 Compatible ** Lmin=0.02 Lmax=10 Wmin=0.6 Wmax=20 ** By Mohan Dunga, Wenwei Yang 05/18/2007 .MODEL PBSIM4 PMOS LEVEL = 14 +VERSION = 4.6.5 BINUNIT = 1 PARAMCHK= 0 MOBMOD = 0 +CAPMOD = 2 IGCMOD = 1 IGBMOD = 1 GEOMOD = 1 +DIOMOD = 1 RDSMOD = 0 RBODYMOD= 0 RGATEMOD= 1 +PERMOD = 1 ACNQSMOD= 0 TRNQSMOD= 0 TEMPMOD = 0 +MTRLMOD = 1 CVCHARGEMOD = 0 +EOT = 1.8E-009 VDDEOT = -1.5 ADOS = 1.1 BDOS = 1.0 +TNOM = 27 TOXE = 1.8E-009 TOXP = 10E-010 TOXM = 1.8E-009 +DTOX = 8E-10 EPSROX = 3.9 WINT = 5E-009 LINT = 1E-009 +LL = 0 WL = 0 LLN = 1 WLN = 1 +LW = 0 WW = 0 LWN = 1 WWN = 1 +LWL = 0 WWL = 0 XPART = 0 TOXREF = 1.8E-9 +PHIG = 4.05 EPSRGATE = 11.7 +SAREF = 5E-6 SBREF = 5E-6 WLOD = 2E-6 KU0 = 4E-6 +KVSAT = 0.2 KVTH0 = -2E-8 TKU0 = 0.0 LLODKU0 = 1.1 +WLODKU0 = 1.1 LLODVTH = 1.0 WLODVTH = 1.0 LKU0 = 1E-6 +WKU0 = 1E-6 PKU0 = 0.0 LKVTH0 = 1.1E-6 WKVTH0 = 1.1E-6 +PKVTH0 = 0.0 STK2 = 0.0 LODK2 = 1.0 STETA0 = 0.0 +LODETA0 = 1.0 +LAMBDA = 4E-10 +VSAT = 1.1E+005 +VTL = 2.0E5 XN = 6.0 LC = 5E-9 +RNOIA = 0.577 RNOIB = 0.37 +LINTNOI = 1E-009 +TVOFF = 0.0 TVFBSDOFF = 0.0 +VTH0 = -0.25 +K1 = 0.35 K2 = 0.05 K3 = 0 +K3B = 0 W0 = 2.5E-006 DVT0 = 1.8 DVT1 = 0.52 +DVT2 = -0.032 DVT0W = 0 DVT1W = 0 DVT2W = 0 +DSUB = 2 MINV = 0.05 VOFFL = 0 DVTP0 = 1E-007 +MINVCV = 2 VOFFCVL = 0 +DVTP1 = 0.05 LPE0 = 5.75E-008 LPEB = 2.3E-010 XJ = 2E-008 +NGATE = 5E+020 NDEP = 2.8E+018 NSD = 1E+020 PHIN = 0 +CDSC = 0.0002 CDSCB = 0 CDSCD = 0 CIT = 0 +VOFF = -0.15 NFACTOR = 1.2 ETA0 = 0.05 ETAB = 0 +VFB = 0.55 U0 = 0.0095 UA = 5.0E-011 UB = 3.5E-018 +UC = -3E-011 +A0 = 2 AGS = 1E-020 +A1 = 0 A2 = 1 B0 = -1E-020 B1 = 0 +KETA = 0.04 DWG = 0 DWB = 0 PCLM = 0.08 +PDIBLC1 = 0.028 PDIBLC2 = 0.022 PDIBLCB = -0.005 DROUT = 0.45 +PVAG = 1E-020 DELTA = 0.01 PSCBE1 = 8.14E+008 PSCBE2 = 5E-008 +FPROUT = 0.2 PDITS = 0.2 PDITSD = 0.23 PDITSL = 2.3E+006 +RSH = 0 RDSW = 50 RSW = 50 RDW = 50 +RDSWMIN = 0 RDWMIN = 0 RSWMIN = 0 PRWG = 0 +PRWB = 6.8E-011 WR = 1 ALPHA0 = 0.074 ALPHA1 = 0.005 +BETA0 = 30 AGIDL = 0.0002 BGIDL = 2.1E+009 CGIDL = 0.0002 +EGIDL = 0.8 AGISL = 0.0003 BGISL = 2.5E+009 CGISL = 0.0003 +EGISL = 0.8 +AIGBACC = 0.012 BIGBACC = 0.0028 CIGBACC = 0.002 +NIGBACC = 1 AIGBINV = 0.014 BIGBINV = 0.004 CIGBINV = 0.004 +EIGBINV = 1.1 NIGBINV = 3 AIGC = 0.012 BIGC = 0.0028 +CIGC = 0.002 AIGS = 0.012 BIGS = 0.0028 CIGS = 0.002 +NIGC = 1 POXEDGE = 1 PIGCD = 1 NTOX = 1 +AIGD = 0.01 BIGD = 0.003 CIGD = 0.0015 +XRCRG1 = 12 XRCRG2 = 5 +CGSO = 6.238E-010 CGDO = 6.238E-010 CGBO = 2.56E-011 CGDL = 2.495E-10 +CGSL = 2.495E-10 CKAPPAS = 0.03 CKAPPAD = 0.03 ACDE = 1 +MOIN = 15 NOFF = 0.9 VOFFCV = 0.02 +KT1 = -0.37 KT1L = 0.0 KT2 = -0.042 UTE = -1.5 +UA1 = 1E-009 UB1 = -3.5E-019 UC1 = 0 PRT = 0 +AT = 53000 +FNOIMOD = 1 TNOIMOD = 0 +JSS = 0.0001 JSWS = 1E-011 JSWGS = 1E-010 NJS = 1 +IJTHSFWD= 0.01 IJTHSREV= 0.001 BVS = 10 XJBVS = 1 +JSD = 0.0001 JSWD = 1E-011 JSWGD = 1E-010 NJD = 1 +IJTHDFWD= 0.01 IJTHDREV= 0.001 BVD = 10 XJBVD = 1 +PBS = 1 CJS = 0.0005 MJS = 0.5 PBSWS = 1 +CJSWS = 5E-010 MJSWS = 0.33 PBSWGS = 1 CJSWGS = 3E-010 +MJSWGS = 0.33 PBD = 1 CJD = 0.0005 MJD = 0.5 +PBSWD = 1 CJSWD = 5E-010 MJSWD = 0.33 PBSWGD = 1 +CJSWGD = 5E-010 MJSWGD = 0.33 TPB = 0.005 TCJ = 0.001 +TPBSW = 0.005 TCJSW = 0.001 TPBSWG = 0.005 TCJSWG = 0.001 +XTIS = 3 XTID = 3 +DMCG = 0E-006 DMCI = 0E-006 DMDG = 0E-006 DMCGT = 0E-007 +DWJ = 0.0E-008 XGW = 0E-007 XGL = 0E-008 +RSHG = 0.4 GBMIN = 1E-010 RBPB = 5 RBPD = 15 +RBPS = 15 RBDB = 15 RBSB = 15 NGCON = 1 +JTSS = 1E-4 JTSD = 1E-4 JTSSWS = 1E-10 JTSSWD = 1E-10 +JTSSWGS = 1E-7 JTSSWGD = 1E-7 +NJTS = 20.0 NJTSSW = 15 NJTSSWG = 4 VTSS = 10 +VTSD = 10 VTSSWS = 10 VTSSWD = 10 +NJTSD = 15.0 NJTSSWD = 20 NJTSSWGD = 6 +TNJTS = 0.1 TNJTSD = 0.05 +VTSSWGS=2 VTSSWGD=2 +XTSS = 0.02 XTSD = 0.02 XTSSWS = 0.02 XTSSWD = 0.02 XTSSWGS = 0.02 XTSSWGD = 0.02 tmpk8ny_4pz/examples/xspice/table/modelcards/modelcard.nmos0000644000175000017500000001446513546075722024337 0ustar carstencarsten ******** BSIM4.6.1 Model Card for NMOS ******** ** The BSIM4 model card below was not extracted/obtained from/based on ** any real technologies. It should not be used for any other purposes ** except for benchmarking the implementation of BSIM4.6.0 against BSIM ** Team's standard results using SPICE3f5. **** Mohan Dunga, Wenwei Yang, Ali Niknejad, and Chenming Hu 05/18/2007. ** Model: BSIM4.6.1 ** Berkeley SPICE3f5 Compatible ** Lmin=0.02 Lmax=10 Wmin=0.6 Wmax=20 ** By Mohan Dunga, Wenwei Yang 05/18/2007 .MODEL NBSIM4 NMOS LEVEL = 14 +VERSION = 4.7 BINUNIT = 1 PARAMCHK= 0 MOBMOD = 0 +CAPMOD = 1 IGCMOD = 1 IGBMOD = 1 GEOMOD = 1 +DIOMOD = 1 RDSMOD = 0 RBODYMOD= 0 RGATEMOD= 1 +PERMOD = 1 ACNQSMOD= 0 TRNQSMOD= 0 TEMPMOD = 0 +MTRLMOD = 1 CVCHARGEMOD = 0 +EOT = 1.8E-009 VDDEOT = 1.5 ADOS = 1.1 BDOS = 1.0 +TNOM = 27 TOXE = 1.8E-009 TOXP = 10E-010 TOXM = 1.8E-009 +DTOX = 8E-10 EPSROX = 3.9 WINT = 5E-009 LINT = 1E-009 +LL = 0 WL = 0 LLN = 1 WLN = 1 +LW = 0 WW = 0 LWN = 1 WWN = 1 +LWL = 0 WWL = 0 XPART = 1 TOXREF = 1.4E-009 +PHIG = 4.05 EPSRGATE = 11.7 +SAREF = 5E-6 SBREF = 5E-6 WLOD = 2E-6 KU0 = -4E-6 +KVSAT = 0.2 KVTH0 = -2E-8 TKU0 = 0.0 LLODKU0 = 1.1 +WLODKU0 = 1.1 LLODVTH = 1.0 WLODVTH = 1.0 LKU0 = 1E-6 +WKU0 = 1E-6 PKU0 = 0.0 LKVTH0 = 1.1E-6 WKVTH0 = 1.1E-6 +PKVTH0 = 0.0 STK2 = 0.0 LODK2 = 1.0 STETA0 = 0.0 +LODETA0 = 1.0 +LAMBDA = 4E-10 +VSAT = 1.1E+005 +VTL = 2.0E5 XN = 6.0 LC = 5E-9 +RNOIA = 0.577 RNOIB = 0.37 +LINTNOI = 1E-009 +TVOFF = 0.0 TVFBSDOFF = 0.0 +VTH0 = 0.25 +K1 = 0.35 K2 = 0.05 K3 = 0 +K3B = 0 W0 = 2.5E-006 DVT0 = 1.8 DVT1 = 0.52 +DVT2 = -0.032 DVT0W = 0 DVT1W = 0 DVT2W = 0 +DSUB = 2 MINV = 0.05 VOFFL = 0 DVTP0 = 1E-007 +MINVCV = 2 VOFFCVL = 0 +DVTP1 = 0.05 LPE0 = 5.75E-008 LPEB = 2.3E-010 XJ = 2E-008 +NGATE = 5E+020 NDEP = 2.8E+018 NSD = 1E+020 PHIN = 0 +CDSC = 0.0002 CDSCB = 0 CDSCD = 0 CIT = 0 +VOFF = -0.15 NFACTOR = 1.2 ETA0 = 0.05 ETAB = 0 +UC = -3E-011 +VFB = -0.55 U0 = 0.032 UA = 5.0E-011 UB = 3.5E-018 +A0 = 2 AGS = 1E-020 +A1 = 0 A2 = 1 B0 = -1E-020 B1 = 0 +KETA = 0.04 DWG = 0 DWB = 0 PCLM = 0.08 +PDIBLC1 = 0.028 PDIBLC2 = 0.022 PDIBLCB = -0.005 DROUT = 0.45 +PVAG = 1E-020 DELTA = 0.01 PSCBE1 = 8.14E+008 PSCBE2 = 5E-008 +FPROUT = 0.2 PDITS = 0.2 PDITSD = 0.23 PDITSL = 2.3E+006 +RSH = 0 RDSW = 50 RSW = 50 RDW = 50 +RDSWMIN = 0 RDWMIN = 0 RSWMIN = 0 PRWG = 0 +PRWB = 6.8E-011 WR = 1 ALPHA0 = 0.074 ALPHA1 = 0.005 +BETA0 = 30 AGIDL = 0.0001 BGIDL = 2.1E+009 CGIDL = 0.0001 +EGIDL = 0.8 AGISL = 0.0002 BGISL = 2.1E+009 CGISL = 0.0002 +EGISL = 0.8 +AIGBACC = 0.012 BIGBACC = 0.0028 CIGBACC = 0.002 +NIGBACC = 1 AIGBINV = 0.014 BIGBINV = 0.004 CIGBINV = 0.004 +EIGBINV = 1.1 NIGBINV = 3 AIGC = 0.012 BIGC = 0.0028 +CIGC = 0.002 AIGS = 0.012 BIGS = 0.0028 CIGS = 0.002 +NIGC = 1 POXEDGE = 1 PIGCD = 1 NTOX = 1 +AIGD = 0.01 BIGD = 0.003 CIGD = 0.0015 +XRCRG1 = 12 XRCRG2 = 5 +CGSO = 6.238E-010 CGDO = 6.238E-010 CGBO = 2.56E-011 CGDL = 2.495E-10 +CGSL = 2.495E-10 CKAPPAS = 0.03 CKAPPAD = 0.03 ACDE = 1 +MOIN = 15 NOFF = 0.9 VOFFCV = -0.02 +KT1 = -0.37 KT1L = 0.0 KT2 = -0.042 UTE = -1.5 +UA1 = 1E-009 UB1 = -3.5E-019 UC1 = 0 PRT = 0 +AT = 53000 +FNOIMOD = 1 TNOIMOD = 0 +JSS = 0.0001 JSWS = 1E-011 JSWGS = 1E-010 NJS = 1 +IJTHSFWD= 0.01 IJTHSREV= 0.001 BVS = 10 XJBVS = 1 +JSD = 0.0001 JSWD = 1E-011 JSWGD = 1E-010 NJD = 1 +IJTHDFWD= 0.01 IJTHDREV= 0.001 BVD = 10 XJBVD = 1 +PBS = 1 CJS = 0.0005 MJS = 0.5 PBSWS = 1 +CJSWS = 5E-010 MJSWS = 0.33 PBSWGS = 1 CJSWGS = 3E-010 +MJSWGS = 0.33 PBD = 1 CJD = 0.0005 MJD = 0.5 +PBSWD = 1 CJSWD = 5E-010 MJSWD = 0.33 PBSWGD = 1 +CJSWGD = 5E-010 MJSWGD = 0.33 TPB = 0.005 TCJ = 0.001 +TPBSW = 0.005 TCJSW = 0.001 TPBSWG = 0.005 TCJSWG = 0.001 +XTIS = 3 XTID = 3 +DMCG = 0E-006 DMCI = 0E-006 DMDG = 0E-006 DMCGT = 0E-007 +DWJ = 0.0E-008 XGW = 0E-007 XGL = 0E-008 +RSHG = 0.4 GBMIN = 1E-010 RBPB = 5 RBPD = 15 +RBPS = 15 RBDB = 15 RBSB = 15 NGCON = 1 +JTSS = 1E-4 JTSD = 1E-4 JTSSWS = 1E-10 JTSSWD = 1E-10 +JTSSWGS = 1E-7 JTSSWGD = 1E-7 +NJTS = 20.0 NJTSSW = 15 NJTSSWG = 6 VTSS = 10 +VTSD = 10 VTSSWS = 10 VTSSWD = 10 +NJTSD = 15.0 NJTSSWD = 20 NJTSSWGD = 6 +TNJTS = 0.1 TNJTSD = 0.05 +VTSSWGS=2 VTSSWGD=2 +XTSS = 0.02 XTSD = 0.02 XTSSWS = 0.02 XTSSWD = 0.02 XTSSWGS = 0.02 XTSSWGD = 0.02 tmpk8ny_4pz/examples/xspice/table/bsim4n-3d-1.table0000644000175000017500000057551213546075722022246 0ustar carstencarsten* 3D table for nmos bsim 4 *x 39 *y 39 *z 11 *x row -0.1 -0.05 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1 1.05 1.1 1.15 1.2 1.25 1.3 1.35 1.4 1.45 1.5 1.55 1.6 1.65 1.7 1.75 1.8 *y column -0.1 -0.05 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1 1.05 1.1 1.15 1.2 1.25 1.3 1.35 1.4 1.45 1.5 1.55 1.6 1.65 1.7 1.75 1.8 *z tables -1.8 -1.6 -1.4 -1.2 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 *table -4.50688E-10 -4.50613E-10 -4.50601E-10 -4.50599E-10 -4.50599E-10 -4.50599E-10 -4.50599E-10 -4.50599E-10 -4.50599E-10 -4.50599E-10 -4.50599E-10 -4.50599E-10 -4.50598E-10 -4.50598E-10 -4.50598E-10 -4.50598E-10 -4.50598E-10 -4.50598E-10 -4.50598E-10 -4.50598E-10 -4.50598E-10 -4.50598E-10 -4.50597E-10 -4.50597E-10 -4.50597E-10 -4.50597E-10 -4.50597E-10 -4.50597E-10 -4.50597E-10 -4.50596E-10 -4.50596E-10 -4.50596E-10 -4.50595E-10 -4.50595E-10 -4.50594E-10 -4.50594E-10 -4.50593E-10 -4.50592E-10 -4.5059E-10 -4.49622E-10 -4.49267E-10 -4.4921E-10 -4.49202E-10 -4.49201E-10 -4.492E-10 -4.492E-10 -4.49199E-10 -4.49199E-10 -4.49198E-10 -4.49198E-10 -4.49197E-10 -4.49197E-10 -4.49196E-10 -4.49196E-10 -4.49195E-10 -4.49195E-10 -4.49194E-10 -4.49194E-10 -4.49193E-10 -4.49193E-10 -4.49192E-10 -4.49192E-10 -4.49191E-10 -4.49191E-10 -4.4919E-10 -4.4919E-10 -4.49189E-10 -4.49189E-10 -4.49188E-10 -4.49188E-10 -4.49187E-10 -4.49186E-10 -4.49186E-10 -4.49185E-10 -4.49184E-10 -4.49184E-10 -4.49183E-10 -4.49182E-10 -4.50672E-10 -4.49099E-10 -4.48838E-10 -4.48795E-10 -4.48789E-10 -4.48787E-10 -4.48784E-10 -4.48782E-10 -4.48779E-10 -4.48777E-10 -4.48774E-10 -4.48772E-10 -4.48769E-10 -4.48767E-10 -4.48765E-10 -4.48762E-10 -4.4876E-10 -4.48757E-10 -4.48755E-10 -4.48752E-10 -4.48749E-10 -4.48747E-10 -4.48744E-10 -4.48742E-10 -4.48739E-10 -4.48736E-10 -4.48734E-10 -4.48731E-10 -4.48729E-10 -4.48726E-10 -4.48723E-10 -4.4872E-10 -4.48718E-10 -4.48715E-10 -4.48712E-10 -4.48709E-10 -4.48706E-10 -4.48703E-10 -4.487E-10 -4.55575E-10 -4.4953E-10 -4.48435E-10 -4.48217E-10 -4.48188E-10 -4.48174E-10 -4.48161E-10 -4.48148E-10 -4.48136E-10 -4.48124E-10 -4.48111E-10 -4.48099E-10 -4.48086E-10 -4.48074E-10 -4.48061E-10 -4.48048E-10 -4.48036E-10 -4.48023E-10 -4.4801E-10 -4.47997E-10 -4.47984E-10 -4.47971E-10 -4.47957E-10 -4.47944E-10 -4.47931E-10 -4.47917E-10 -4.47904E-10 -4.4789E-10 -4.47877E-10 -4.47863E-10 -4.47849E-10 -4.47835E-10 -4.47821E-10 -4.47806E-10 -4.47792E-10 -4.47777E-10 -4.47763E-10 -4.47747E-10 -4.47732E-10 -4.66747E-10 -4.50236E-10 -4.4664E-10 -4.45529E-10 -4.45381E-10 -4.45307E-10 -4.45241E-10 -4.45178E-10 -4.45115E-10 -4.45051E-10 -4.44988E-10 -4.44924E-10 -4.4486E-10 -4.44796E-10 -4.44732E-10 -4.44667E-10 -4.44601E-10 -4.44536E-10 -4.4447E-10 -4.44403E-10 -4.44336E-10 -4.44269E-10 -4.44202E-10 -4.44134E-10 -4.44065E-10 -4.43997E-10 -4.43928E-10 -4.43858E-10 -4.43788E-10 -4.43718E-10 -4.43647E-10 -4.43575E-10 -4.43503E-10 -4.4343E-10 -4.43357E-10 -4.43283E-10 -4.43207E-10 -4.43131E-10 -4.43053E-10 -4.85615E-10 -4.43477E-10 -4.39523E-10 -4.33863E-10 -4.33116E-10 -4.32738E-10 -4.32404E-10 -4.32079E-10 -4.31756E-10 -4.31434E-10 -4.3111E-10 -4.30785E-10 -4.30459E-10 -4.3013E-10 -4.298E-10 -4.29469E-10 -4.29135E-10 -4.28799E-10 -4.28462E-10 -4.28123E-10 -4.27782E-10 -4.27439E-10 -4.27094E-10 -4.26747E-10 -4.26398E-10 -4.26048E-10 -4.25695E-10 -4.2534E-10 -4.24983E-10 -4.24623E-10 -4.24261E-10 -4.23896E-10 -4.23529E-10 -4.23157E-10 -4.22783E-10 -4.22404E-10 -4.22021E-10 -4.21634E-10 -4.2124E-10 -9.69499E-10 -3.77642E-10 -3.98311E-10 -3.6959E-10 -3.65825E-10 -3.63914E-10 -3.62215E-10 -3.60563E-10 -3.58921E-10 -3.57279E-10 -3.55631E-10 -3.53977E-10 -3.52314E-10 -3.50642E-10 -3.48961E-10 -3.4727E-10 -3.4557E-10 -3.43861E-10 -3.42142E-10 -3.40414E-10 -3.38676E-10 -3.36929E-10 -3.35172E-10 -3.33406E-10 -3.3163E-10 -3.29844E-10 -3.28047E-10 -3.2624E-10 -3.24421E-10 -3.22589E-10 -3.20745E-10 -3.18887E-10 -3.17014E-10 -3.15125E-10 -3.13219E-10 -3.11294E-10 -3.09347E-10 -3.07377E-10 -3.05381E-10 -5.31807E-09 -4.65727E-10 -1.66105E-10 -2.09762E-11 -2.04234E-12 7.60003E-12 1.61887E-11 2.45512E-11 3.28627E-11 4.11788E-11 4.9522E-11 5.79027E-11 6.63263E-11 7.47956E-11 8.3312E-11 9.18763E-11 1.00488E-10 1.09149E-10 1.17857E-10 1.26612E-10 1.35415E-10 1.44266E-10 1.53165E-10 1.62113E-10 1.7111E-10 1.80158E-10 1.89259E-10 1.98414E-10 2.07627E-10 2.16901E-10 2.26239E-10 2.35645E-10 2.45125E-10 2.54684E-10 2.64327E-10 2.74063E-10 2.83901E-10 2.93849E-10 3.0392E-10 -2.82015E-08 -3.02235E-09 5.46038E-10 1.27538E-09 1.37108E-09 1.41962E-09 1.46274E-09 1.50467E-09 1.54633E-09 1.58799E-09 1.62978E-09 1.67176E-09 1.71394E-09 1.75635E-09 1.799E-09 1.84188E-09 1.885E-09 1.92836E-09 1.97196E-09 2.01579E-09 2.05986E-09 2.10417E-09 2.14871E-09 2.1935E-09 2.23854E-09 2.28382E-09 2.32937E-09 2.37519E-09 2.42129E-09 2.46769E-09 2.5144E-09 2.56145E-09 2.60885E-09 2.65663E-09 2.70481E-09 2.75343E-09 2.80252E-09 2.85213E-09 2.90228E-09 -1.23272E-07 -1.82767E-08 1.75382E-09 5.33542E-09 5.80929E-09 6.04816E-09 6.25953E-09 6.46476E-09 6.66844E-09 6.87208E-09 7.07628E-09 7.28133E-09 7.48737E-09 7.6945E-09 7.90275E-09 8.11214E-09 8.32268E-09 8.53437E-09 8.74721E-09 8.9612E-09 9.17633E-09 9.39261E-09 9.61005E-09 9.82865E-09 1.00484E-08 1.02695E-08 1.04917E-08 1.07153E-08 1.09403E-08 1.11666E-08 1.13945E-08 1.1624E-08 1.18552E-08 1.20881E-08 1.2323E-08 1.25599E-08 1.27991E-08 1.30406E-08 1.32846E-08 -4.53143E-07 -8.45783E-08 3.36863E-09 2.00499E-08 2.22676E-08 2.33804E-08 2.43627E-08 2.53155E-08 2.62606E-08 2.72053E-08 2.81523E-08 2.91031E-08 3.00584E-08 3.10187E-08 3.1984E-08 3.29546E-08 3.39304E-08 3.49115E-08 3.58978E-08 3.68894E-08 3.78862E-08 3.88883E-08 3.98956E-08 4.09083E-08 4.19265E-08 4.29502E-08 4.39797E-08 4.50152E-08 4.60569E-08 4.71051E-08 4.81602E-08 4.92226E-08 5.02926E-08 5.13709E-08 5.24578E-08 5.3554E-08 5.466E-08 5.57766E-08 5.69046E-08 -1.43971E-06 -3.21348E-07 5.3794E-09 7.63924E-08 8.58748E-08 9.05998E-08 9.47612E-08 9.8794E-08 1.02793E-07 1.06788E-07 1.10793E-07 1.14814E-07 1.18853E-07 1.22912E-07 1.26992E-07 1.31093E-07 1.35217E-07 1.39362E-07 1.43529E-07 1.47718E-07 1.51928E-07 1.5616E-07 1.60414E-07 1.6469E-07 1.68989E-07 1.73311E-07 1.77656E-07 1.82027E-07 1.86423E-07 1.90846E-07 1.95298E-07 1.9978E-07 2.04293E-07 2.08841E-07 2.13424E-07 2.18045E-07 2.22707E-07 2.27413E-07 2.32164E-07 -4.12051E-06 -1.03973E-06 7.82017E-09 2.74075E-07 3.10041E-07 3.27609E-07 3.43001E-07 3.57893E-07 3.7265E-07 3.87387E-07 4.02154E-07 4.16974E-07 4.31859E-07 4.46815E-07 4.61846E-07 4.76953E-07 4.92138E-07 5.074E-07 5.2274E-07 5.38157E-07 5.53651E-07 5.69223E-07 5.84873E-07 6.00601E-07 6.16411E-07 6.32303E-07 6.4828E-07 6.64345E-07 6.80504E-07 6.96759E-07 7.13116E-07 7.29582E-07 7.46161E-07 7.62862E-07 7.79691E-07 7.96657E-07 8.13768E-07 8.31034E-07 8.48464E-07 -1.08323E-05 -2.97732E-06 1.07798E-08 8.78858E-07 1.00036E-06 1.05655E-06 1.10507E-06 1.15181E-06 1.19805E-06 1.24418E-06 1.29038E-06 1.33672E-06 1.38324E-06 1.42997E-06 1.47692E-06 1.52409E-06 1.57148E-06 1.61911E-06 1.66697E-06 1.71505E-06 1.76337E-06 1.81192E-06 1.86069E-06 1.9097E-06 1.95896E-06 2.00846E-06 2.05821E-06 2.10823E-06 2.15853E-06 2.20912E-06 2.26002E-06 2.31124E-06 2.36281E-06 2.41475E-06 2.46708E-06 2.51982E-06 2.57301E-06 2.62666E-06 2.68081E-06 -2.53478E-05 -7.65395E-06 1.4462E-08 2.52822E-06 2.91612E-06 3.07447E-06 3.2061E-06 3.33163E-06 3.45528E-06 3.57838E-06 3.70148E-06 3.82483E-06 3.94857E-06 4.07277E-06 4.19748E-06 4.32271E-06 4.4485E-06 4.57483E-06 4.70172E-06 4.82916E-06 4.95717E-06 5.08573E-06 5.21487E-06 5.34458E-06 5.47488E-06 5.6058E-06 5.73735E-06 5.86957E-06 6.00249E-06 6.13615E-06 6.27059E-06 6.40586E-06 6.54202E-06 6.67912E-06 6.81723E-06 6.95641E-06 7.09672E-06 7.23825E-06 7.38106E-06 -5.029E-05 -1.70234E-05 1.92819E-08 6.58642E-06 7.85141E-06 8.26894E-06 8.5857E-06 8.8803E-06 9.16777E-06 9.45261E-06 9.73661E-06 1.00206E-05 1.03051E-05 1.05903E-05 1.08763E-05 1.11632E-05 1.14512E-05 1.17402E-05 1.20303E-05 1.23215E-05 1.26137E-05 1.29071E-05 1.32015E-05 1.34972E-05 1.3794E-05 1.40921E-05 1.43915E-05 1.46923E-05 1.49945E-05 1.52983E-05 1.56038E-05 1.59111E-05 1.62203E-05 1.65316E-05 1.68451E-05 1.7161E-05 1.74794E-05 1.78005E-05 1.81244E-05 -8.37088E-05 -3.15796E-05 2.59413E-08 1.50118E-05 1.91488E-05 2.02744E-05 2.09754E-05 2.15906E-05 2.21786E-05 2.27555E-05 2.33275E-05 2.38973E-05 2.44665E-05 2.50358E-05 2.56058E-05 2.61767E-05 2.67489E-05 2.73224E-05 2.78974E-05 2.84739E-05 2.9052E-05 2.96318E-05 3.02132E-05 3.07965E-05 3.13816E-05 3.19688E-05 3.25582E-05 3.31499E-05 3.37441E-05 3.43411E-05 3.49411E-05 3.55443E-05 3.61511E-05 3.67617E-05 3.73765E-05 3.79958E-05 3.86199E-05 3.92491E-05 3.9884E-05 -0.000121053 -4.96402E-05 3.53768E-08 2.86489E-05 4.01776E-05 4.34756E-05 4.49905E-05 4.61619E-05 4.72339E-05 4.82663E-05 4.92793E-05 5.0282E-05 5.1279E-05 5.22727E-05 5.32648E-05 5.42564E-05 5.5248E-05 5.62402E-05 5.72333E-05 5.82276E-05 5.92233E-05 6.02206E-05 6.12196E-05 6.22206E-05 6.32237E-05 6.42294E-05 6.52378E-05 6.62493E-05 6.72643E-05 6.82832E-05 6.93066E-05 7.03348E-05 7.13685E-05 7.24083E-05 7.34547E-05 7.45084E-05 7.557E-05 7.66402E-05 7.77197E-05 -0.000158927 -6.90483E-05 4.86413E-08 4.60983E-05 7.05654E-05 7.98038E-05 8.32573E-05 8.53944E-05 8.71895E-05 8.88594E-05 9.04701E-05 9.20482E-05 9.36064E-05 9.51518E-05 9.66887E-05 9.82198E-05 9.9747E-05 0.000101272 0.000102795 0.000104316 0.000105838 0.00010736 0.000108882 0.000110405 0.000111929 0.000113455 0.000114984 0.000116516 0.000118051 0.000119591 0.000121137 0.000122688 0.000124247 0.000125814 0.00012739 0.000128977 0.000130574 0.000132184 0.000133808 -0.000195612 -8.83626E-05 6.69108E-08 6.51932E-05 0.000106199 0.00012668 0.000134845 0.000138832 0.000141718 0.000144244 0.000146614 0.0001489 0.000151136 0.000153338 0.000155517 0.000157679 0.000159829 0.000161969 0.000164101 0.000166228 0.000168349 0.000170468 0.000172583 0.000174697 0.000176809 0.000178921 0.000181034 0.000183149 0.000185267 0.000187388 0.000189515 0.000191648 0.000193789 0.00019594 0.000198102 0.000200277 0.000202467 0.000204672 0.000206896 -0.000230371 -0.000106867 9.16191E-08 8.43848E-05 0.000143234 0.000178759 0.000196062 0.000203877 0.000208552 0.000212255 0.000215578 0.000218712 0.000221737 0.00022469 0.000227593 0.000230459 0.000233297 0.000236113 0.000238911 0.000241695 0.000244468 0.00024723 0.000249983 0.00025273 0.000255472 0.000258209 0.000260943 0.000263676 0.000266409 0.000269144 0.000271883 0.000274628 0.00027738 0.000280143 0.000282917 0.000285706 0.000288512 0.000291337 0.000294184 -0.000262936 -0.000124267 1.24605E-07 0.000102877 0.00017955 0.000231608 0.000261964 0.000276997 0.000284878 0.000290313 0.000294867 0.000299024 0.000302962 0.000306763 0.000310469 0.000314106 0.000317691 0.000321235 0.000324745 0.000328228 0.000331688 0.000335129 0.000338552 0.000341961 0.000345358 0.000348744 0.000352123 0.000355495 0.000358862 0.000362229 0.000365596 0.000368966 0.000372343 0.000375728 0.000379125 0.000382538 0.000385968 0.00038942 0.000392897 -0.000293258 -0.000140474 1.68244E-07 0.000120336 0.000214199 0.000282909 0.000328289 0.000354211 0.000367785 0.000375987 0.000382221 0.000387643 0.000392652 0.000397414 0.000402011 0.000406491 0.000410882 0.000415204 0.00041947 0.00042369 0.000427871 0.000432019 0.000436138 0.000440233 0.000444306 0.000448361 0.000452399 0.000456425 0.00046044 0.000464448 0.000468452 0.000472456 0.000476462 0.000480475 0.000484498 0.000488535 0.00049259 0.000496668 0.000500772 -0.000321381 -0.00015549 2.25592E-07 0.000136656 0.000246816 0.000331681 0.000392556 0.000431785 0.0004542 0.000466967 0.000475654 0.000482709 0.000489003 0.00049487 0.000500465 0.00050587 0.000511133 0.000516288 0.000521355 0.000526351 0.000531287 0.000536172 0.000541012 0.000545815 0.000550584 0.000555323 0.000560036 0.000564727 0.0005694 0.000574059 0.000578707 0.000583348 0.000587987 0.000592629 0.000597277 0.000601938 0.000606615 0.000611313 0.000616039 -0.000347396 -0.000169354 3.00547E-07 0.000151837 0.000277305 0.000377568 0.000453663 0.000507147 0.000541024 0.000560877 0.00057332 0.0005826 0.000590486 0.000597649 0.000604373 0.000610802 0.000617015 0.000623065 0.000628985 0.0006348 0.000640528 0.000646181 0.00065177 0.000657303 0.000662787 0.000668228 0.000673631 0.000679 0.000684341 0.000689658 0.000694956 0.00070024 0.000705515 0.000710786 0.000716059 0.00072134 0.000726635 0.00073195 0.00073729 -0.00037141 -0.000182122 3.98066E-07 0.000165922 0.000305694 0.000420497 0.000511207 0.000578979 0.000625739 0.000655214 0.000673345 0.000685807 0.000695749 0.000704469 0.000712493 0.000720067 0.000727324 0.000734343 0.000741176 0.00074786 0.00075442 0.000760876 0.000767243 0.000773532 0.000779753 0.000785914 0.000792022 0.000798083 0.000804103 0.000810088 0.000816043 0.000821974 0.000827888 0.00083379 0.000839688 0.000845587 0.000851496 0.000857421 0.000863369 -0.000393532 -0.000193852 5.24425E-07 0.000178975 0.000332068 0.000460523 0.000565112 0.000646761 0.000706814 0.000747676 0.000773736 0.000790825 0.000803539 0.000814187 0.000823735 0.000832608 0.000841021 0.000849096 0.000856912 0.000864522 0.000871962 0.00087926 0.000886438 0.000893512 0.000900495 0.000907397 0.000914228 0.000920995 0.000927707 0.000934369 0.000940989 0.000947574 0.000954131 0.000960667 0.00096719 0.000973707 0.000980227 0.000986758 0.000993307 -0.000413873 -0.000204602 6.87549E-07 0.000191068 0.000356539 0.000497767 0.000615447 0.000710366 0.000783544 0.000836602 0.000872495 0.00089606 0.00091262 0.000925743 0.00093712 0.000947487 0.000957194 0.000966431 0.000975311 0.000983912 0.000992287 0.00100047 0.0010085 0.00101639 0.00102416 0.00103183 0.0010394 0.00104689 0.00105431 0.00106166 0.00106896 0.0010762 0.00108341 0.00109058 0.00109773 0.00110487 0.001112 0.00111913 0.00112628 -0.000432534 -0.000214424 8.97421E-07 0.000202277 0.000379231 0.000532379 0.000662359 0.000769859 0.000855711 0.000921086 0.000967964 0.000999849 0.00102171 0.00103811 0.00105174 0.00106386 0.00107503 0.00108555 0.0010956 0.00110527 0.00111464 0.00112376 0.00113268 0.00114143 0.00115002 0.00115848 0.00116682 0.00117505 0.00118319 0.00119124 0.00119923 0.00120714 0.00121501 0.00122282 0.0012306 0.00123836 0.0012461 0.00125383 0.00126157 -0.000449608 -0.000223366 1.16659E-06 0.000212677 0.000400271 0.000564525 0.000706027 0.000825397 0.000923342 0.00100077 0.00105907 0.00110065 0.00112945 0.00115025 0.00116674 0.00118095 0.0011938 0.00120576 0.00121708 0.00122791 0.00123835 0.00124848 0.00125834 0.00126798 0.00127742 0.0012867 0.00129583 0.00130483 0.00131371 0.00132248 0.00133117 0.00133977 0.00134829 0.00135676 0.00136518 0.00137355 0.0013819 0.00139024 0.00139857 -0.000465179 -0.000231465 1.5108E-06 0.000222347 0.000419787 0.000594373 0.000746649 0.00087718 0.000986588 0.00107562 0.00114531 0.00119732 0.00123451 0.00126105 0.00128126 0.00129802 0.00131283 0.00132642 0.00133915 0.00135124 0.00136284 0.00137403 0.00138489 0.00139547 0.00140581 0.00141594 0.00142589 0.00143568 0.00144532 0.00145484 0.00146423 0.00147353 0.00148273 0.00149186 0.00150092 0.00150992 0.00151888 0.00152782 0.00153674 -0.000479316 -0.000238755 1.94978E-06 0.000231362 0.000437908 0.000622094 0.000784429 0.000925432 0.00104566 0.00114575 0.00122652 0.00128918 0.00133572 0.00136941 0.0013944 0.00141436 0.0014315 0.00144694 0.00146125 0.00147473 0.00148757 0.00149991 0.00151183 0.00152341 0.00153469 0.00154571 0.00155652 0.00156712 0.00157755 0.00158782 0.00159795 0.00160796 0.00161785 0.00162765 0.00163736 0.001647 0.00165658 0.00166611 0.00167562 -0.000492076 -0.000245255 2.50816E-06 0.000239803 0.00045476 0.00064786 0.000819574 0.000970384 0.0011008 0.00121137 0.00130279 0.00137597 0.00143233 0.00147426 0.00150527 0.00152926 0.00154922 0.00156681 0.00158289 0.0015979 0.0016121 0.00162567 0.00163873 0.00165136 0.00166363 0.00167559 0.00168728 0.00169873 0.00170997 0.00172103 0.00173191 0.00174264 0.00175324 0.00176372 0.00177409 0.00178437 0.00179458 0.00180473 0.00181483 -0.0005035 -0.000250976 3.21672E-06 0.000247749 0.000470472 0.000671838 0.000852289 0.00101227 0.00115226 0.00127274 0.0013743 0.00145768 0.00152395 0.00157479 0.00161293 0.00164198 0.0016654 0.00168552 0.00170361 0.00172032 0.00173601 0.00175091 0.00176519 0.00177894 0.00179226 0.0018052 0.00181782 0.00183015 0.00184224 0.0018541 0.00186576 0.00187724 0.00188856 0.00189973 0.00191078 0.00192171 0.00193255 0.00194331 0.00195401 -0.000513613 -0.000255915 4.11377E-06 0.000255285 0.000485171 0.000694198 0.00088278 0.00105134 0.0012003 0.00133012 0.00144131 0.00153448 0.00161047 0.00167051 0.00171661 0.00175176 0.00177945 0.0018026 0.00182299 0.0018416 0.00185893 0.00187528 0.00189087 0.00190582 0.00192024 0.00193422 0.00194781 0.00196107 0.00197403 0.00198673 0.00199919 0.00201143 0.00202349 0.00203538 0.00204711 0.00205871 0.0020702 0.00208158 0.00209288 -0.000522421 -0.000260056 5.24698E-06 0.000262503 0.000498989 0.000715109 0.000911252 0.00108781 0.00124518 0.00138379 0.00150408 0.00160659 0.00169199 0.00176122 0.00181576 0.0018579 0.00189076 0.00191756 0.00194065 0.0019614 0.00198053 0.00199847 0.00201547 0.0020317 0.00204731 0.00206238 0.002077 0.00209121 0.00210509 0.00211865 0.00213194 0.00214498 0.0021578 0.00217041 0.00218285 0.00219513 0.00220727 0.00221929 0.0022312 -0.000529907 -0.000263365 6.67556E-06 0.0002695 0.000512062 0.000734744 0.000937911 0.00112193 0.00128718 0.00143404 0.00156292 0.0016743 0.00176872 0.00184694 0.00191007 0.00195982 0.00199875 0.00202995 0.00205622 0.0020794 0.00210054 0.0021202 0.00213873 0.00215634 0.0021732 0.00218944 0.00220513 0.00222036 0.00223518 0.00224965 0.0022638 0.00227765 0.00229126 0.00230463 0.00231779 0.00233076 0.00234357 0.00235623 0.00236877 -0.000536028 -0.000265788 8.47287E-06 0.000276388 0.000524535 0.000753281 0.000962968 0.00115394 0.00132655 0.00148116 0.00161813 0.0017379 0.00184093 0.00192785 0.00199951 0.00205719 0.00210288 0.00213928 0.00216931 0.00219531 0.00221869 0.00224024 0.00226043 0.00227952 0.00229773 0.00231519 0.00233203 0.00234832 0.00236414 0.00237955 0.00239458 0.00240929 0.0024237 0.00243784 0.00245175 0.00246543 0.00247892 0.00249224 0.00250541 -0.000540714 -0.000267248 1.07298E-05 0.000283289 0.000536565 0.000770908 0.000986641 0.00118409 0.00136358 0.00152544 0.00167003 0.00179772 0.00190894 0.0020042 0.00208418 0.00214988 0.00220279 0.0022451 0.00227959 0.00230885 0.00233476 0.0023584 0.00238038 0.00240107 0.00242072 0.00243949 0.00245753 0.00247495 0.00249181 0.0025082 0.00252416 0.00253975 0.002555 0.00256994 0.0025846 0.00259902 0.00261321 0.0026272 0.00264102 *table -3.10015E-10 -3.09767E-10 -3.0973E-10 -3.09724E-10 -3.09724E-10 -3.09723E-10 -3.09723E-10 -3.09723E-10 -3.09722E-10 -3.09722E-10 -3.09722E-10 -3.09721E-10 -3.09721E-10 -3.09721E-10 -3.0972E-10 -3.0972E-10 -3.0972E-10 -3.0972E-10 -3.09719E-10 -3.09719E-10 -3.09719E-10 -3.09718E-10 -3.09718E-10 -3.09717E-10 -3.09717E-10 -3.09717E-10 -3.09716E-10 -3.09716E-10 -3.09716E-10 -3.09715E-10 -3.09715E-10 -3.09714E-10 -3.09713E-10 -3.09713E-10 -3.09712E-10 -3.09711E-10 -3.0971E-10 -3.09708E-10 -3.09707E-10 -3.09748E-10 -3.08524E-10 -3.08339E-10 -3.08312E-10 -3.08308E-10 -3.08306E-10 -3.08304E-10 -3.08303E-10 -3.08301E-10 -3.083E-10 -3.08298E-10 -3.08297E-10 -3.08295E-10 -3.08294E-10 -3.08292E-10 -3.0829E-10 -3.08289E-10 -3.08287E-10 -3.08286E-10 -3.08284E-10 -3.08282E-10 -3.08281E-10 -3.08279E-10 -3.08277E-10 -3.08276E-10 -3.08274E-10 -3.08272E-10 -3.08271E-10 -3.08269E-10 -3.08267E-10 -3.08265E-10 -3.08263E-10 -3.08262E-10 -3.0826E-10 -3.08258E-10 -3.08256E-10 -3.08254E-10 -3.08251E-10 -3.08249E-10 -3.14813E-10 -3.08879E-10 -3.07966E-10 -3.07828E-10 -3.0781E-10 -3.078E-10 -3.07792E-10 -3.07784E-10 -3.07777E-10 -3.07769E-10 -3.07761E-10 -3.07753E-10 -3.07745E-10 -3.07737E-10 -3.07729E-10 -3.07721E-10 -3.07713E-10 -3.07705E-10 -3.07697E-10 -3.07688E-10 -3.0768E-10 -3.07672E-10 -3.07663E-10 -3.07655E-10 -3.07646E-10 -3.07638E-10 -3.07629E-10 -3.07621E-10 -3.07612E-10 -3.07603E-10 -3.07595E-10 -3.07586E-10 -3.07577E-10 -3.07568E-10 -3.07559E-10 -3.07549E-10 -3.0754E-10 -3.07531E-10 -3.07521E-10 -3.39892E-10 -3.11953E-10 -3.07566E-10 -3.06866E-10 -3.06773E-10 -3.06726E-10 -3.06685E-10 -3.06645E-10 -3.06605E-10 -3.06565E-10 -3.06525E-10 -3.06486E-10 -3.06445E-10 -3.06405E-10 -3.06364E-10 -3.06324E-10 -3.06283E-10 -3.06241E-10 -3.062E-10 -3.06158E-10 -3.06116E-10 -3.06074E-10 -3.06032E-10 -3.05989E-10 -3.05946E-10 -3.05903E-10 -3.0586E-10 -3.05816E-10 -3.05772E-10 -3.05728E-10 -3.05683E-10 -3.05639E-10 -3.05593E-10 -3.05548E-10 -3.05501E-10 -3.05455E-10 -3.05407E-10 -3.05359E-10 -3.05311E-10 -4.52067E-10 -3.26038E-10 -3.05802E-10 -3.02263E-10 -3.01791E-10 -3.01554E-10 -3.01345E-10 -3.01143E-10 -3.00942E-10 -3.00741E-10 -3.00539E-10 -3.00337E-10 -3.00134E-10 -2.9993E-10 -2.99725E-10 -2.99518E-10 -2.99311E-10 -2.99102E-10 -2.98892E-10 -2.98681E-10 -2.98469E-10 -2.98256E-10 -2.98041E-10 -2.97826E-10 -2.97609E-10 -2.97391E-10 -2.97171E-10 -2.96951E-10 -2.96729E-10 -2.96505E-10 -2.9628E-10 -2.96053E-10 -2.95824E-10 -2.95593E-10 -2.9536E-10 -2.95125E-10 -2.94887E-10 -2.94645E-10 -2.94401E-10 -9.66966E-10 -3.86918E-10 -2.98993E-10 -2.81135E-10 -2.78756E-10 -2.77562E-10 -2.76507E-10 -2.75484E-10 -2.74469E-10 -2.73455E-10 -2.72438E-10 -2.71417E-10 -2.70391E-10 -2.6936E-10 -2.68323E-10 -2.67281E-10 -2.66232E-10 -2.65178E-10 -2.64118E-10 -2.63053E-10 -2.61981E-10 -2.60904E-10 -2.59821E-10 -2.58732E-10 -2.57637E-10 -2.56536E-10 -2.55429E-10 -2.54314E-10 -2.53193E-10 -2.52064E-10 -2.50927E-10 -2.49782E-10 -2.48628E-10 -2.47464E-10 -2.46289E-10 -2.45103E-10 -2.43903E-10 -2.4269E-10 -2.4146E-10 -3.76975E-09 -6.56315E-10 -2.60441E-10 -1.70721E-10 -1.58795E-10 -1.52797E-10 -1.47497E-10 -1.42355E-10 -1.37252E-10 -1.32152E-10 -1.27039E-10 -1.21904E-10 -1.16744E-10 -1.11557E-10 -1.06342E-10 -1.01099E-10 -9.5826E-11 -9.05244E-11 -8.51938E-11 -7.98342E-11 -7.44457E-11 -6.90282E-11 -6.35814E-11 -5.8105E-11 -5.25982E-11 -4.70605E-11 -4.14905E-11 -3.58871E-11 -3.02486E-11 -2.4573E-11 -1.88583E-11 -1.31017E-11 -7.30041E-12 -1.45096E-12 4.45052E-12 1.04085E-11 1.64282E-11 2.25158E-11 2.86784E-11 -1.82858E-08 -2.31689E-09 -4.46809E-11 4.02282E-10 4.61605E-10 4.91469E-10 5.17873E-10 5.43499E-10 5.68929E-10 5.9435E-10 6.1984E-10 6.45435E-10 6.71155E-10 6.9701E-10 7.23005E-10 7.49143E-10 7.75426E-10 8.01852E-10 8.28424E-10 8.55139E-10 8.81998E-10 9.09001E-10 9.3615E-10 9.63446E-10 9.90892E-10 1.01849E-09 1.04625E-09 1.07418E-09 1.10228E-09 1.13056E-09 1.15903E-09 1.18771E-09 1.2166E-09 1.24573E-09 1.27512E-09 1.30477E-09 1.33472E-09 1.36499E-09 1.39561E-09 -8.13651E-08 -1.18247E-08 6.16545E-10 2.80638E-09 3.09749E-09 3.24383E-09 3.37311E-09 3.49854E-09 3.62299E-09 3.74738E-09 3.87209E-09 3.99732E-09 4.12314E-09 4.24963E-09 4.37679E-09 4.50465E-09 4.63321E-09 4.76248E-09 4.89244E-09 5.02311E-09 5.15448E-09 5.28655E-09 5.41932E-09 5.55281E-09 5.68704E-09 5.822E-09 5.95774E-09 6.09428E-09 6.23166E-09 6.36992E-09 6.50911E-09 6.64928E-09 6.79049E-09 6.93282E-09 7.07635E-09 7.22115E-09 7.36733E-09 7.515E-09 7.66428E-09 -3.12554E-07 -5.51038E-08 1.73894E-09 1.20786E-08 1.34569E-08 1.41478E-08 1.47574E-08 1.53485E-08 1.59347E-08 1.65205E-08 1.71078E-08 1.76975E-08 1.82899E-08 1.88854E-08 1.9484E-08 2.00859E-08 2.06911E-08 2.12995E-08 2.19112E-08 2.25262E-08 2.31444E-08 2.37659E-08 2.43907E-08 2.50188E-08 2.56503E-08 2.62853E-08 2.69239E-08 2.75663E-08 2.82125E-08 2.88628E-08 2.95174E-08 3.01765E-08 3.08405E-08 3.15096E-08 3.21842E-08 3.28646E-08 3.35513E-08 3.42447E-08 3.49454E-08 -1.03641E-06 -2.18711E-07 3.24232E-09 4.8683E-08 5.47577E-08 5.77893E-08 6.04594E-08 6.30468E-08 6.56122E-08 6.81755E-08 7.07448E-08 7.3324E-08 7.59151E-08 7.85192E-08 8.1137E-08 8.37686E-08 8.64143E-08 8.90741E-08 9.17479E-08 9.44358E-08 9.71377E-08 9.98536E-08 1.02584E-07 1.05328E-07 1.08087E-07 1.10861E-07 1.13651E-07 1.16456E-07 1.19278E-07 1.22118E-07 1.24976E-07 1.27854E-07 1.30752E-07 1.33673E-07 1.36616E-07 1.39585E-07 1.4258E-07 1.45603E-07 1.48657E-07 -3.05902E-06 -7.41443E-07 5.12223E-09 1.83637E-07 2.0768E-07 2.19521E-07 2.29913E-07 2.39972E-07 2.4994E-07 2.59896E-07 2.69874E-07 2.79887E-07 2.89945E-07 3.00052E-07 3.1021E-07 3.20421E-07 3.30684E-07 3.41E-07 3.5137E-07 3.61792E-07 3.72268E-07 3.82796E-07 3.93378E-07 4.04014E-07 4.14705E-07 4.25453E-07 4.36259E-07 4.47125E-07 4.58055E-07 4.69052E-07 4.80118E-07 4.91258E-07 5.02476E-07 5.13778E-07 5.25167E-07 5.3665E-07 5.48233E-07 5.59923E-07 5.71726E-07 -8.28163E-06 -2.20415E-06 7.42795E-09 6.18653E-07 7.02966E-07 7.42922E-07 7.77631E-07 8.1113E-07 8.44285E-07 8.77377E-07 9.10521E-07 9.43773E-07 9.77161E-07 1.0107E-06 1.0444E-06 1.07827E-06 1.1123E-06 1.1465E-06 1.18087E-06 1.21541E-06 1.25011E-06 1.28499E-06 1.32003E-06 1.35525E-06 1.39064E-06 1.42621E-06 1.46197E-06 1.49792E-06 1.53408E-06 1.57045E-06 1.60704E-06 1.64387E-06 1.68096E-06 1.71831E-06 1.75594E-06 1.79388E-06 1.83214E-06 1.87074E-06 1.9097E-06 -2.02749E-05 -5.88926E-06 1.02846E-08 1.85145E-06 2.12358E-06 2.24087E-06 2.34001E-06 2.43498E-06 2.52868E-06 2.62205E-06 2.71547E-06 2.80911E-06 2.90308E-06 2.99743E-06 3.09218E-06 3.18735E-06 3.28296E-06 3.379E-06 3.47548E-06 3.5724E-06 3.66976E-06 3.76757E-06 3.86582E-06 3.96452E-06 4.06369E-06 4.16333E-06 4.26348E-06 4.36414E-06 4.46534E-06 4.56712E-06 4.66951E-06 4.77254E-06 4.87625E-06 4.98069E-06 5.08591E-06 5.19195E-06 5.29886E-06 5.40671E-06 5.51556E-06 -4.27396E-05 -1.38517E-05 1.39631E-08 5.00754E-06 5.88247E-06 6.19647E-06 6.44464E-06 6.67801E-06 6.90664E-06 7.13361E-06 7.36019E-06 7.58695E-06 7.81421E-06 8.04215E-06 8.27088E-06 8.50044E-06 8.73089E-06 8.96225E-06 9.19452E-06 9.42772E-06 9.66185E-06 9.89692E-06 1.0133E-05 1.037E-05 1.0608E-05 1.08471E-05 1.10872E-05 1.13286E-05 1.15711E-05 1.1815E-05 1.20602E-05 1.23069E-05 1.25552E-05 1.28051E-05 1.30569E-05 1.33106E-05 1.35663E-05 1.38242E-05 1.40845E-05 -7.54327E-05 -2.74018E-05 1.89632E-08 1.20414E-05 1.49326E-05 1.57625E-05 1.63255E-05 1.68325E-05 1.73213E-05 1.78029E-05 1.82814E-05 1.87589E-05 1.92363E-05 1.97143E-05 2.01931E-05 2.06731E-05 2.11544E-05 2.1637E-05 2.21211E-05 2.26066E-05 2.30937E-05 2.35823E-05 2.40726E-05 2.45646E-05 2.50583E-05 2.55538E-05 2.60514E-05 2.6551E-05 2.70529E-05 2.75573E-05 2.80643E-05 2.85741E-05 2.9087E-05 2.96032E-05 3.0123E-05 3.06467E-05 3.11745E-05 3.17067E-05 3.22436E-05 -0.000113932 -4.54484E-05 2.60232E-08 2.45284E-05 3.32215E-05 3.55836E-05 3.67995E-05 3.77931E-05 3.87193E-05 3.96181E-05 4.05037E-05 4.13824E-05 4.22576E-05 4.31311E-05 4.40041E-05 4.48773E-05 4.57513E-05 4.66264E-05 4.75029E-05 4.83808E-05 4.92605E-05 5.01419E-05 5.10253E-05 5.19108E-05 5.27986E-05 5.3689E-05 5.45821E-05 5.54783E-05 5.63778E-05 5.72811E-05 5.81886E-05 5.91006E-05 6.00177E-05 6.09403E-05 6.1869E-05 6.28043E-05 6.37467E-05 6.46968E-05 6.56553E-05 -0.000153976 -6.56585E-05 3.60293E-08 4.17734E-05 6.21353E-05 6.90285E-05 7.17297E-05 7.35579E-05 7.51502E-05 7.66522E-05 7.81106E-05 7.95449E-05 8.09647E-05 8.23754E-05 8.37803E-05 8.51815E-05 8.65805E-05 8.79783E-05 8.93755E-05 9.07728E-05 9.21705E-05 9.35691E-05 9.49688E-05 9.63701E-05 9.77734E-05 9.9179E-05 0.000100587 0.000101999 0.000103415 0.000104836 0.000106262 0.000107694 0.000109133 0.00011058 0.000112035 0.000113501 0.000114977 0.000116465 0.000117965 -0.000193185 -8.61847E-05 4.99692E-08 6.15327E-05 9.83008E-05 0.000115078 0.000121456 0.000124818 0.000127403 0.000129722 0.00013192 0.000134053 0.000136146 0.000138213 0.000140261 0.000142296 0.000144322 0.00014634 0.000148353 0.000150362 0.000152368 0.000154372 0.000156375 0.000158376 0.000160378 0.000162381 0.000164385 0.000166391 0.000168401 0.000170416 0.000172436 0.000174463 0.000176499 0.000178544 0.000180601 0.00018267 0.000184753 0.000186852 0.000188968 -0.000230495 -0.000106027 6.90145E-08 8.18549E-05 0.000137152 0.000168659 0.000182922 0.00018941 0.000193567 0.000196994 0.000200122 0.000203097 0.000205981 0.000208804 0.000211586 0.000214337 0.000217064 0.000219774 0.000222469 0.000225152 0.000227826 0.000230492 0.000233152 0.000235806 0.000238456 0.000241104 0.00024375 0.000246396 0.000249044 0.000251694 0.000254349 0.000257011 0.000259682 0.000262362 0.000265056 0.000267764 0.000270489 0.000273234 0.000276 -0.000265494 -0.000124749 9.46491E-08 0.000101636 0.000175809 0.000224386 0.000251133 0.000263825 0.000270724 0.000275738 0.000280053 0.000284038 0.000287837 0.000291517 0.000295115 0.000298653 0.000302145 0.000305601 0.000309028 0.000312432 0.000315815 0.000319182 0.000322535 0.000325875 0.000329205 0.000332526 0.000335842 0.000339152 0.000342461 0.000345769 0.000349079 0.000352393 0.000355715 0.000359047 0.000362392 0.000365753 0.000369132 0.000372534 0.00037596 -0.000298075 -0.000142201 1.2879E-07 0.000120382 0.000212907 0.000279052 0.000321088 0.000343948 0.000355791 0.000363268 0.000369168 0.000374391 0.000379258 0.000383908 0.000388411 0.000392808 0.000397125 0.00040138 0.000405585 0.000409748 0.000413876 0.000417975 0.000422048 0.000426099 0.000430131 0.000434146 0.000438148 0.000442139 0.000446122 0.000450099 0.000454075 0.000458051 0.000462031 0.00046602 0.00047002 0.000474035 0.00047807 0.000482128 0.000486214 -0.000328269 -0.000158363 1.73909E-07 0.000137917 0.000247894 0.00033123 0.000389487 0.000425617 0.000445574 0.000457091 0.000465247 0.000472044 0.000478183 0.000483943 0.000489455 0.000494794 0.000500003 0.000505111 0.000510139 0.000515101 0.000520008 0.000524868 0.000529687 0.000534471 0.000539225 0.000543951 0.000548654 0.000553338 0.000558005 0.00056266 0.000567307 0.000571949 0.000576591 0.000581237 0.000585892 0.00059056 0.000595247 0.000599957 0.000604695 -0.000356167 -0.000173273 2.33171E-07 0.000154212 0.000280597 0.000380373 0.000454747 0.000505621 0.000536759 0.000554733 0.000566291 0.000575189 0.000582886 0.000589939 0.00059659 0.000602968 0.000609146 0.00061517 0.000621073 0.000626877 0.000632599 0.000638252 0.000643844 0.000649384 0.000654878 0.000660332 0.00066575 0.000671138 0.000676499 0.000681839 0.000687163 0.000692474 0.000697779 0.000703083 0.000708391 0.000713709 0.000719042 0.000724397 0.00072978 -0.000381884 -0.00018699 3.10614E-07 0.000169305 0.000311014 0.000426329 0.000516256 0.000582158 0.00062641 0.00065359 0.000670345 0.000682194 0.000691873 0.000700465 0.000708422 0.00071596 0.000723199 0.000730212 0.00073705 0.000743745 0.000750323 0.000756802 0.000763196 0.000769517 0.000775773 0.000781972 0.00078812 0.000794225 0.000800291 0.000806324 0.00081233 0.000818315 0.000824286 0.000830247 0.000836206 0.00084217 0.000848145 0.000854138 0.000860158 -0.000405546 -0.000199579 4.11361E-07 0.000183259 0.000339228 0.000469132 0.000573849 0.000654453 0.000712556 0.00075112 0.000775359 0.000791481 0.000803786 0.000814265 0.000823743 0.000832591 0.000841003 0.000849094 0.000856935 0.000864579 0.000872059 0.000879404 0.000886633 0.000893762 0.000900804 0.000907768 0.000914664 0.0009215 0.000928282 0.000935018 0.000941714 0.000948378 0.000955016 0.000961637 0.000968246 0.000974853 0.000981466 0.000988092 0.00099474 -0.000427276 -0.000211107 5.41899E-07 0.000196151 0.000365352 0.000508896 0.000627571 0.000722275 0.000794204 0.000845319 0.000879215 0.000901415 0.000917325 0.000930193 0.000941481 0.00095183 0.000961553 0.000970824 0.000979752 0.00098841 0.000996848 0.0010051 0.00101321 0.00102118 0.00102903 0.00103678 0.00104444 0.00105203 0.00105954 0.00106699 0.00107438 0.00108173 0.00108904 0.00109633 0.00110359 0.00111084 0.00111808 0.00112534 0.00113261 -0.000447191 -0.000221636 7.10414E-07 0.000208062 0.000389519 0.00054578 0.000677561 0.000785647 0.000870991 0.000934983 0.000980023 0.00101027 0.00103117 0.00104716 0.00106066 0.00107275 0.00108396 0.00109453 0.00110465 0.0011144 0.00112385 0.00113307 0.00114209 0.00115094 0.00115963 0.0011682 0.00117665 0.001185 0.00119326 0.00120143 0.00120954 0.00121758 0.00122557 0.00123352 0.00124144 0.00124933 0.00125721 0.00126509 0.00127297 -0.000465402 -0.000231223 9.27222E-07 0.000219072 0.000411866 0.000579958 0.000724009 0.000844718 0.00094289 0.00101958 0.00107645 0.00111638 0.00114393 0.00116409 0.00118036 0.00119452 0.00120742 0.00121945 0.00123086 0.0012418 0.00125235 0.00126259 0.00127257 0.00128234 0.00129191 0.00130132 0.00131059 0.00131973 0.00132875 0.00133766 0.00134649 0.00135524 0.00136392 0.00137254 0.00138111 0.00138965 0.00139816 0.00140666 0.00141516 -0.000482005 -0.000239917 1.20529E-06 0.000229264 0.000432531 0.000611614 0.000767124 0.000899698 0.00101004 0.00109899 0.00116778 0.00121839 0.0012542 0.00127986 0.00129968 0.00131636 0.00133121 0.00134489 0.00135774 0.00136996 0.00138169 0.00139302 0.00140403 0.00141476 0.00142525 0.00143554 0.00144565 0.00145559 0.0014654 0.00147508 0.00148464 0.00149411 0.00150348 0.00151278 0.00152202 0.00153121 0.00154035 0.00154948 0.00155859 -0.000497088 -0.000247759 1.56087E-06 0.000238716 0.00045165 0.00064093 0.000807126 0.000950821 0.00107264 0.00117331 0.00125376 0.00131543 0.00136069 0.00139331 0.00141773 0.00143751 0.00145467 0.00147022 0.00148467 0.0014983 0.00151131 0.00152381 0.0015359 0.00154765 0.00155911 0.00157031 0.0015813 0.00159208 0.0016027 0.00161315 0.00162347 0.00163367 0.00164376 0.00165375 0.00166366 0.0016735 0.00168328 0.00169303 0.00170275 -0.000510724 -0.000254782 2.01435E-06 0.000247511 0.000469358 0.000668089 0.000844236 0.000998336 0.00113096 0.00124273 0.00133442 0.0014071 0.00146247 0.0015033 0.00153355 0.00155724 0.00157717 0.00159487 0.00161111 0.0016263 0.0016407 0.00165446 0.00166772 0.00168055 0.00169302 0.00170518 0.00171707 0.00172873 0.00174018 0.00175144 0.00176254 0.00177348 0.00178429 0.00179498 0.00180557 0.00181608 0.00182651 0.00183688 0.00184721 -0.000522971 -0.000261008 2.59118E-06 0.000255728 0.000485787 0.00069327 0.000878672 0.00104249 0.00118525 0.00130752 0.00140993 0.00149335 0.00155901 0.00160892 0.0016462 0.00167478 0.0016981 0.00171832 0.00173658 0.0017535 0.00176941 0.00178454 0.00179904 0.00181302 0.00182657 0.00183974 0.00185258 0.00186515 0.00187746 0.00188955 0.00190144 0.00191315 0.0019247 0.00193611 0.0019474 0.00195857 0.00196966 0.00198066 0.00199161 -0.000533872 -0.000266447 3.32313E-06 0.000263453 0.000501071 0.000716649 0.000910652 0.00108354 0.00123581 0.00136795 0.00148054 0.00157428 0.00165012 0.00170952 0.00175482 0.00178937 0.00181684 0.00184005 0.00186063 0.00187948 0.00189706 0.00191367 0.00192951 0.00194472 0.0019594 0.00197363 0.00198748 0.00200098 0.00201419 0.00202714 0.00203986 0.00205236 0.00206467 0.00207681 0.0020888 0.00210066 0.0021124 0.00212405 0.00213562 -0.000543452 -0.000271096 4.2498E-06 0.000270773 0.000515341 0.000738402 0.000940389 0.00112174 0.0012829 0.00142433 0.00154654 0.00165013 0.00173585 0.00180482 0.00185874 0.00190026 0.00193279 0.00195958 0.00198285 0.00200386 0.00202328 0.00204151 0.00205879 0.00207531 0.0020912 0.00210656 0.00212145 0.00213595 0.00215009 0.00216393 0.00217749 0.00219081 0.0022039 0.00221679 0.00222951 0.00224206 0.00225448 0.00226678 0.00227898 -0.000551715 -0.000274937 5.42042E-06 0.00027778 0.000528733 0.000758704 0.000968098 0.00115732 0.0013268 0.00147695 0.00160823 0.00172117 0.0018164 0.00189477 0.00195757 0.0020068 0.00204532 0.00207641 0.00210283 0.0021263 0.00214776 0.00216775 0.0021866 0.00220453 0.00222171 0.00223825 0.00225426 0.00226979 0.00228491 0.00229968 0.00231412 0.00232827 0.00234217 0.00235583 0.00236929 0.00238256 0.00239566 0.00240862 0.00242146 -0.000558644 -0.000277936 6.89612E-06 0.000284577 0.000541389 0.000777732 0.00099399 0.00119055 0.00136779 0.00152611 0.00166593 0.00178772 0.00189202 0.00197951 0.0020512 0.00210856 0.00215386 0.00219007 0.0022202 0.00224648 0.00227021 0.00229214 0.00231268 0.00233214 0.00235069 0.0023685 0.00238567 0.0024023 0.00241844 0.00243417 0.00244953 0.00246455 0.00247928 0.00249374 0.00250795 0.00252195 0.00253576 0.00254939 0.00256288 -0.000564194 -0.000280036 8.7527E-06 0.000291277 0.000553456 0.000795672 0.00101828 0.00122165 0.00140614 0.00157212 0.00171997 0.00185012 0.00196303 0.00205929 0.00213968 0.00220533 0.00225797 0.00230008 0.00233459 0.00236411 0.00239039 0.00241445 0.00243684 0.00245793 0.00247796 0.00249712 0.00251553 0.0025333 0.00255052 0.00256725 0.00258356 0.00259949 0.00261507 0.00263035 0.00264535 0.00266009 0.00267462 0.00268895 0.0027031 -0.000568291 -0.000281157 1.1084E-05 0.000298008 0.000565096 0.000812716 0.0010412 0.0012509 0.00144215 0.00161529 0.00177067 0.0019087 0.00202977 0.0021344 0.00222322 0.00229711 0.0023574 0.00240603 0.00244562 0.00247892 0.00250809 0.00253449 0.00255889 0.00258175 0.00260336 0.00262395 0.00264367 0.00266266 0.00268101 0.0026988 0.0027161 0.00273296 0.00274943 0.00276555 0.00278136 0.00279688 0.00281214 0.00282717 0.002842 *table -2.04848E-10 -2.04008E-10 -2.03882E-10 -2.03863E-10 -2.03861E-10 -2.0386E-10 -2.03859E-10 -2.03858E-10 -2.03857E-10 -2.03856E-10 -2.03855E-10 -2.03853E-10 -2.03852E-10 -2.03851E-10 -2.0385E-10 -2.03849E-10 -2.03848E-10 -2.03847E-10 -2.03846E-10 -2.03845E-10 -2.03844E-10 -2.03843E-10 -2.03841E-10 -2.0384E-10 -2.03839E-10 -2.03838E-10 -2.03837E-10 -2.03836E-10 -2.03834E-10 -2.03833E-10 -2.03832E-10 -2.0383E-10 -2.03829E-10 -2.03827E-10 -2.03826E-10 -2.03824E-10 -2.03822E-10 -2.03819E-10 -2.03817E-10 -2.07275E-10 -2.03117E-10 -2.02491E-10 -2.02399E-10 -2.02387E-10 -2.0238E-10 -2.02375E-10 -2.0237E-10 -2.02364E-10 -2.02359E-10 -2.02354E-10 -2.02349E-10 -2.02343E-10 -2.02338E-10 -2.02333E-10 -2.02327E-10 -2.02322E-10 -2.02317E-10 -2.02311E-10 -2.02306E-10 -2.023E-10 -2.02295E-10 -2.02289E-10 -2.02283E-10 -2.02278E-10 -2.02272E-10 -2.02266E-10 -2.02261E-10 -2.02255E-10 -2.02249E-10 -2.02243E-10 -2.02237E-10 -2.02231E-10 -2.02225E-10 -2.02219E-10 -2.02212E-10 -2.02206E-10 -2.02199E-10 -2.02192E-10 -2.25652E-10 -2.0522E-10 -2.02118E-10 -2.01657E-10 -2.01596E-10 -2.01565E-10 -2.01537E-10 -2.01511E-10 -2.01485E-10 -2.01459E-10 -2.01432E-10 -2.01406E-10 -2.0138E-10 -2.01353E-10 -2.01326E-10 -2.01299E-10 -2.01272E-10 -2.01245E-10 -2.01218E-10 -2.01191E-10 -2.01163E-10 -2.01135E-10 -2.01107E-10 -2.01079E-10 -2.01051E-10 -2.01023E-10 -2.00994E-10 -2.00965E-10 -2.00936E-10 -2.00907E-10 -2.00878E-10 -2.00848E-10 -2.00818E-10 -2.00788E-10 -2.00758E-10 -2.00727E-10 -2.00696E-10 -2.00664E-10 -2.00632E-10 -3.16215E-10 -2.1697E-10 -2.0172E-10 -1.99411E-10 -1.99102E-10 -1.98947E-10 -1.98811E-10 -1.98679E-10 -1.98548E-10 -1.98417E-10 -1.98286E-10 -1.98154E-10 -1.98022E-10 -1.97888E-10 -1.97755E-10 -1.9762E-10 -1.97485E-10 -1.97349E-10 -1.97212E-10 -1.97075E-10 -1.96936E-10 -1.96797E-10 -1.96658E-10 -1.96517E-10 -1.96376E-10 -1.96234E-10 -1.96091E-10 -1.95947E-10 -1.95802E-10 -1.95656E-10 -1.95509E-10 -1.95361E-10 -1.95212E-10 -1.95062E-10 -1.9491E-10 -1.94756E-10 -1.946E-10 -1.94443E-10 -1.94283E-10 -7.47204E-10 -2.73973E-10 -1.99985E-10 -1.88442E-10 -1.86898E-10 -1.86124E-10 -1.85443E-10 -1.84782E-10 -1.84127E-10 -1.83472E-10 -1.82816E-10 -1.82157E-10 -1.81495E-10 -1.8083E-10 -1.80161E-10 -1.79488E-10 -1.78812E-10 -1.78132E-10 -1.77448E-10 -1.76761E-10 -1.7607E-10 -1.75375E-10 -1.74676E-10 -1.73974E-10 -1.73267E-10 -1.72557E-10 -1.71842E-10 -1.71123E-10 -1.704E-10 -1.69671E-10 -1.68938E-10 -1.68199E-10 -1.67454E-10 -1.66702E-10 -1.65944E-10 -1.65177E-10 -1.64403E-10 -1.63618E-10 -1.62823E-10 -2.7757E-09 -5.45364E-10 -1.93473E-10 -1.35952E-10 -1.28261E-10 -1.24407E-10 -1.2101E-10 -1.17718E-10 -1.14454E-10 -1.11191E-10 -1.07921E-10 -1.04637E-10 -1.01338E-10 -9.80223E-11 -9.46884E-11 -9.13362E-11 -8.79656E-11 -8.45765E-11 -8.1169E-11 -7.77429E-11 -7.42984E-11 -7.08354E-11 -6.73537E-11 -6.3853E-11 -6.03329E-11 -5.6793E-11 -5.32325E-11 -4.96504E-11 -4.60459E-11 -4.24176E-11 -3.8764E-11 -3.50834E-11 -3.13739E-11 -2.76332E-11 -2.38586E-11 -2.00471E-11 -1.61952E-11 -1.22985E-11 -8.35206E-12 -1.23877E-08 -1.82364E-09 -1.57468E-10 1.27216E-10 1.65257E-10 1.84326E-10 2.01137E-10 2.17432E-10 2.33592E-10 2.49741E-10 2.65929E-10 2.82182E-10 2.98513E-10 3.14928E-10 3.31431E-10 3.48025E-10 3.64709E-10 3.81485E-10 3.98352E-10 4.15311E-10 4.3236E-10 4.49502E-10 4.66735E-10 4.84062E-10 5.01484E-10 5.19004E-10 5.36626E-10 5.54353E-10 5.7219E-10 5.90144E-10 6.08221E-10 6.26429E-10 6.44777E-10 6.63276E-10 6.81937E-10 7.00773E-10 7.19801E-10 7.39039E-10 7.58508E-10 -5.49015E-08 -8.0744E-09 4.25347E-11 1.43188E-09 1.61744E-09 1.71047E-09 1.79249E-09 1.87201E-09 1.95086E-09 2.02966E-09 2.10866E-09 2.18796E-09 2.26765E-09 2.34775E-09 2.42828E-09 2.50924E-09 2.59065E-09 2.6725E-09 2.7548E-09 2.83754E-09 2.92072E-09 3.00435E-09 3.08843E-09 3.17296E-09 3.25795E-09 3.34342E-09 3.42938E-09 3.51585E-09 3.60285E-09 3.69042E-09 3.77857E-09 3.86736E-09 3.95682E-09 4.04699E-09 4.13793E-09 4.2297E-09 4.32237E-09 4.41602E-09 4.51073E-09 -2.18203E-07 -3.67985E-08 6.55001E-10 7.24589E-09 8.12663E-09 8.56777E-09 8.95658E-09 9.33342E-09 9.7071E-09 1.00805E-08 1.04548E-08 1.08306E-08 1.12081E-08 1.15876E-08 1.19691E-08 1.23526E-08 1.27383E-08 1.3126E-08 1.35158E-08 1.39077E-08 1.43017E-08 1.46978E-08 1.5096E-08 1.54963E-08 1.58988E-08 1.63035E-08 1.67106E-08 1.712E-08 1.75319E-08 1.79464E-08 1.83637E-08 1.8784E-08 1.92073E-08 1.9634E-08 2.00642E-08 2.04982E-08 2.09363E-08 2.13788E-08 2.18261E-08 -7.54257E-07 -1.50619E-07 1.69585E-09 3.12867E-08 3.52473E-08 3.72254E-08 3.89672E-08 4.06547E-08 4.23277E-08 4.39992E-08 4.56746E-08 4.73564E-08 4.90459E-08 5.0744E-08 5.2451E-08 5.41671E-08 5.58924E-08 5.76269E-08 5.93707E-08 6.11237E-08 6.28858E-08 6.46572E-08 6.64379E-08 6.8228E-08 7.00277E-08 7.18372E-08 7.36569E-08 7.54871E-08 7.73283E-08 7.9181E-08 8.10459E-08 8.29237E-08 8.48151E-08 8.6721E-08 8.86424E-08 9.05803E-08 9.25359E-08 9.45105E-08 9.65056E-08 -2.30017E-06 -5.33429E-07 3.09411E-09 1.23918E-07 1.40166E-07 1.48211E-07 1.55277E-07 1.62118E-07 1.68897E-07 1.75669E-07 1.82455E-07 1.89266E-07 1.96107E-07 2.02982E-07 2.09892E-07 2.16838E-07 2.2382E-07 2.30839E-07 2.37894E-07 2.44986E-07 2.52114E-07 2.59279E-07 2.6648E-07 2.73719E-07 2.80995E-07 2.88311E-07 2.95666E-07 3.03064E-07 3.10504E-07 3.17991E-07 3.25526E-07 3.33111E-07 3.4075E-07 3.48447E-07 3.56205E-07 3.64027E-07 3.71919E-07 3.79885E-07 3.87929E-07 -6.39281E-06 -1.64748E-06 4.85545E-09 4.38265E-07 4.97495E-07 5.26039E-07 5.50935E-07 5.74987E-07 5.988E-07 6.22573E-07 6.46387E-07 6.70281E-07 6.94275E-07 7.18381E-07 7.42605E-07 7.66949E-07 7.91416E-07 8.16006E-07 8.40719E-07 8.65555E-07 8.90514E-07 9.15596E-07 9.40802E-07 9.66135E-07 9.91595E-07 1.01719E-06 1.04292E-06 1.06879E-06 1.0948E-06 1.12098E-06 1.14731E-06 1.17382E-06 1.20052E-06 1.22741E-06 1.2545E-06 1.28182E-06 1.30937E-06 1.33717E-06 1.36524E-06 -1.62305E-05 -4.55463E-06 7.05186E-09 1.36705E-06 1.5622E-06 1.64979E-06 1.72469E-06 1.79665E-06 1.86774E-06 1.93862E-06 2.00955E-06 2.08069E-06 2.15208E-06 2.22377E-06 2.29579E-06 2.36814E-06 2.44082E-06 2.51385E-06 2.58723E-06 2.66095E-06 2.73501E-06 2.80941E-06 2.88417E-06 2.95928E-06 3.03475E-06 3.1106E-06 3.18683E-06 3.26346E-06 3.34051E-06 3.41801E-06 3.49598E-06 3.57444E-06 3.65343E-06 3.73299E-06 3.81314E-06 3.89392E-06 3.97538E-06 4.05757E-06 4.14051E-06 -3.60919E-05 -1.12251E-05 9.85508E-09 3.82745E-06 4.44998E-06 4.69023E-06 4.88569E-06 5.07092E-06 5.25289E-06 5.43381E-06 5.61456E-06 5.79557E-06 5.97707E-06 6.15918E-06 6.34197E-06 6.5255E-06 6.70978E-06 6.89482E-06 7.08065E-06 7.26725E-06 7.45464E-06 7.64283E-06 7.83182E-06 8.02163E-06 8.21228E-06 8.40381E-06 8.59624E-06 8.78963E-06 8.98402E-06 9.17948E-06 9.37607E-06 9.57386E-06 9.77294E-06 9.97338E-06 1.01753E-05 1.03788E-05 1.05839E-05 1.07908E-05 1.09996E-05 -6.75055E-05 -2.3587E-05 1.36069E-08 9.62274E-06 1.16678E-05 1.22984E-05 1.27549E-05 1.31735E-05 1.35798E-05 1.39813E-05 1.43809E-05 1.47801E-05 1.51795E-05 1.55798E-05 1.5981E-05 1.63833E-05 1.67869E-05 1.71918E-05 1.75981E-05 1.80058E-05 1.84149E-05 1.88254E-05 1.92374E-05 1.96509E-05 2.00661E-05 2.04829E-05 2.09014E-05 2.13218E-05 2.17442E-05 2.21688E-05 2.25956E-05 2.30249E-05 2.34569E-05 2.38917E-05 2.43295E-05 2.47707E-05 2.52154E-05 2.56638E-05 2.61163E-05 -0.000106815 -4.13571E-05 1.88637E-08 2.08164E-05 2.72874E-05 2.90245E-05 3.0019E-05 3.08658E-05 3.16661E-05 3.24473E-05 3.32194E-05 3.39871E-05 3.47528E-05 3.55179E-05 3.62833E-05 3.70494E-05 3.78167E-05 3.85855E-05 3.93558E-05 4.01278E-05 4.09016E-05 4.16774E-05 4.24552E-05 4.32352E-05 4.40174E-05 4.48022E-05 4.55896E-05 4.638E-05 4.71736E-05 4.79707E-05 4.87717E-05 4.95769E-05 5.03867E-05 5.12015E-05 5.20218E-05 5.28481E-05 5.36807E-05 5.45202E-05 5.53672E-05 -0.000149009 -6.22471E-05 2.63503E-08 3.758E-05 5.42166E-05 5.93336E-05 6.15009E-05 6.3083E-05 6.44997E-05 6.58507E-05 6.71695E-05 6.84707E-05 6.97615E-05 7.1046E-05 7.23268E-05 7.36057E-05 7.48835E-05 7.61612E-05 7.74393E-05 7.87181E-05 7.99981E-05 8.12796E-05 8.25627E-05 8.38479E-05 8.51354E-05 8.64256E-05 8.77189E-05 8.90158E-05 9.03168E-05 9.16225E-05 9.29336E-05 9.42506E-05 9.55745E-05 9.69058E-05 9.82455E-05 9.95943E-05 0.000100953 0.000102323 0.000103705 -0.000190903 -8.4005E-05 3.68946E-08 5.78492E-05 9.04309E-05 0.000103918 0.000108948 0.000111837 0.000114171 0.000116305 0.000118347 0.000120337 0.000122295 0.000124233 0.000126156 0.00012807 0.000129977 0.000131879 0.000133777 0.000135673 0.000137567 0.00013946 0.000141353 0.000143246 0.00014514 0.000147036 0.000148933 0.000150835 0.00015274 0.00015465 0.000156566 0.000158489 0.000160421 0.000162362 0.000164315 0.00016628 0.000168259 0.000170253 0.000172263 -0.00023099 -0.00010528 5.14596E-08 7.92999E-05 0.000130967 0.000158528 0.000170175 0.000175645 0.000179392 0.000182583 0.000185537 0.000188365 0.000191117 0.000193819 0.000196486 0.000199128 0.000201751 0.000204359 0.000206955 0.000209542 0.000212122 0.000214695 0.000217264 0.000219829 0.000222392 0.000224953 0.000227514 0.000230076 0.000232641 0.00023521 0.000237784 0.000240365 0.000242955 0.000245557 0.000248171 0.0002508 0.000253447 0.000256112 0.000258799 -0.00026866 -0.000125445 7.12443E-08 0.000100456 0.000172065 0.000217077 0.000240367 0.000251098 0.000257229 0.000261901 0.000266009 0.000269842 0.000273515 0.000277085 0.000280584 0.000284031 0.000287437 0.000290813 0.000294163 0.000297493 0.000300806 0.000304105 0.000307392 0.000310668 0.000313936 0.000317198 0.000320455 0.000323709 0.000326962 0.000330216 0.000333474 0.000336737 0.000340009 0.000343291 0.000346587 0.0003499 0.000353232 0.000356587 0.000359967 -0.000303729 -0.000144265 9.77927E-08 0.000120609 0.000211813 0.000275309 0.000313957 0.000333982 0.000344401 0.000351303 0.000356927 0.000361981 0.000366725 0.000371277 0.000375698 0.000380023 0.000384276 0.000388473 0.000392625 0.00039674 0.000400824 0.000404881 0.000408916 0.000412931 0.000416929 0.000420913 0.000424885 0.000428849 0.000432806 0.00043676 0.000440712 0.000444668 0.000448629 0.0004526 0.000456584 0.000460584 0.000464605 0.00046865 0.000472723 -0.000336199 -0.00016169 1.33099E-07 0.000139483 0.000249399 0.000331188 0.00038674 0.000419799 0.000437558 0.00044806 0.000455792 0.000462378 0.000468389 0.00047406 0.000479506 0.000484792 0.000489959 0.000495033 0.000500033 0.000504973 0.000509862 0.000514707 0.000519516 0.000524292 0.00052904 0.000533763 0.000538466 0.000543151 0.000547823 0.000552484 0.000557138 0.00056179 0.000566444 0.000571104 0.000575774 0.00058046 0.000585165 0.000589896 0.000594656 -0.000366161 -0.000177748 1.79728E-07 0.000157012 0.000284542 0.000383901 0.00045651 0.000504711 0.000533213 0.00054956 0.000560407 0.000569002 0.00057655 0.000583517 0.000590116 0.00059646 0.000602618 0.000608631 0.000614531 0.000620338 0.000626068 0.000631732 0.00063734 0.0006429 0.000648416 0.000653895 0.000659342 0.00066476 0.000670154 0.000675529 0.00068089 0.000686242 0.000691588 0.000696936 0.00070229 0.000707656 0.00071304 0.000718448 0.000723885 -0.00039374 -0.000192501 2.40957E-07 0.000173222 0.0003172 0.000433191 0.000522359 0.000586333 0.00062806 0.000653104 0.000668702 0.000680065 0.000689541 0.000698041 0.000705956 0.000713477 0.000720717 0.000727742 0.000734601 0.000741324 0.000747935 0.000754453 0.000760889 0.000767256 0.000773561 0.000779813 0.000786017 0.00079218 0.000798306 0.000804403 0.000810474 0.000816528 0.000822568 0.000828603 0.000834637 0.000840679 0.000846735 0.000852811 0.000858916 -0.000419076 -0.000206024 3.2096E-07 0.000188175 0.000347443 0.000479051 0.000584003 0.000663553 0.000719653 0.000755958 0.000778561 0.000793892 0.000805883 0.000816244 0.000825683 0.00083453 0.000842963 0.000851088 0.000858975 0.00086667 0.00087421 0.000881619 0.000888916 0.000896117 0.000903235 0.000910278 0.000917256 0.000924176 0.000931045 0.000937871 0.00094466 0.000951419 0.000958155 0.000964876 0.000971589 0.000978302 0.000985024 0.000991761 0.000998524 -0.000442307 -0.000218392 4.25034E-07 0.000201954 0.000375391 0.00052159 0.000641445 0.00073599 0.000806639 0.000855783 0.000887776 0.000908794 0.000924191 0.000936878 0.00094812 0.00095848 0.000968243 0.000977571 0.000986568 0.000995302 0.00100382 0.00101217 0.00102036 0.00102843 0.00103639 0.00104424 0.00105201 0.00105971 0.00106733 0.0010749 0.00108241 0.00108988 0.00109732 0.00110473 0.00111212 0.0011195 0.00112688 0.00113427 0.00114168 -0.000463569 -0.000229678 5.59878E-07 0.000214645 0.000401185 0.000560971 0.000694816 0.000803613 0.000888469 0.000951042 0.000994254 0.001023 0.0010431 0.00105878 0.00107221 0.00108432 0.00109558 0.00110624 0.00111644 0.00112629 0.00113586 0.00114519 0.00115433 0.0011633 0.00117212 0.00118082 0.0011894 0.00119788 0.00120628 0.0012146 0.00122284 0.00123103 0.00123917 0.00124727 0.00125534 0.00126339 0.00127143 0.00127947 0.00128753 -0.000482987 -0.000239948 7.33953E-07 0.000226334 0.000424973 0.000597384 0.000744315 0.000866558 0.000965034 0.00104098 0.00109639 0.00113473 0.00116118 0.00118083 0.00119696 0.00121113 0.0012241 0.00123624 0.00124777 0.00125882 0.00126951 0.00127989 0.00129002 0.00129993 0.00130966 0.00131922 0.00132864 0.00133794 0.00134712 0.00135621 0.0013652 0.00137412 0.00138297 0.00139176 0.00140051 0.00140923 0.00141793 0.00142662 0.00143531 -0.000500677 -0.000249262 9.57912E-07 0.00023711 0.000446904 0.000631026 0.000790164 0.000925038 0.00103644 0.00112536 0.00119323 0.00124244 0.00127696 0.00130187 0.00132143 0.00133809 0.00135302 0.00136683 0.00137982 0.00139219 0.00140408 0.00141558 0.00142676 0.00143766 0.00144833 0.00145879 0.00146908 0.00147921 0.0014892 0.00149907 0.00150882 0.00151848 0.00152805 0.00153755 0.00154699 0.00155638 0.00156573 0.00157507 0.00158439 -0.000516743 -0.000257673 1.24515E-06 0.000247056 0.000467126 0.000662094 0.000832601 0.000979304 0.00110291 0.00120424 0.00128439 0.00134505 0.00138906 0.00142072 0.0014447 0.00146439 0.00148163 0.00149733 0.00151194 0.00152575 0.00153895 0.00155165 0.00156394 0.00157588 0.00158754 0.00159895 0.00161013 0.00162113 0.00163195 0.00164262 0.00165315 0.00166356 0.00167387 0.00168408 0.00169421 0.00170427 0.00171429 0.00172426 0.00173422 -0.000531274 -0.000265224 1.61246E-06 0.000256258 0.000485783 0.000690786 0.000871864 0.00102962 0.0011647 0.00127781 0.00136983 0.00144202 0.00149638 0.00153619 0.0015658 0.00158928 0.00160926 0.00162712 0.00164355 0.00165896 0.00167357 0.00168756 0.00170103 0.00171409 0.00172679 0.00173918 0.0017513 0.00176319 0.00177487 0.00178636 0.00179769 0.00180887 0.00181992 0.00183085 0.00184169 0.00185244 0.00186312 0.00187374 0.00188433 -0.000544346 -0.000271948 2.08089E-06 0.000264799 0.000503016 0.000717294 0.000908189 0.00107626 0.0012221 0.00134633 0.00144969 0.00153317 0.00159822 0.00164722 0.00168374 0.00171197 0.00173527 0.00175565 0.00177413 0.00179129 0.00180745 0.00182284 0.00183759 0.00185182 0.00186562 0.00187904 0.00189214 0.00190496 0.00191753 0.00192987 0.00194202 0.00195399 0.0019658 0.00197747 0.00198902 0.00200046 0.00201181 0.00202309 0.00203431 -0.00055602 -0.000277867 2.67673E-06 0.000272764 0.000518963 0.000741805 0.000941808 0.0011195 0.0012754 0.0014101 0.00152424 0.0016186 0.0016943 0.00175306 0.00179761 0.00183167 0.00185903 0.00188237 0.00190319 0.00192231 0.00194018 0.00195707 0.0019732 0.00198869 0.00200365 0.00201816 0.00203228 0.00204607 0.00205956 0.00207279 0.00208578 0.00209856 0.00211115 0.00212357 0.00213585 0.00214799 0.00216002 0.00217196 0.00218383 -0.000566339 -0.000282992 3.43281E-06 0.000280238 0.000533761 0.000764503 0.000972947 0.00115958 0.00132491 0.00146944 0.00159375 0.00169852 0.00178461 0.00185331 0.00190664 0.00194761 0.00197991 0.00200678 0.00203029 0.00205161 0.00207135 0.0020899 0.0021075 0.00212434 0.00214054 0.0021562 0.0021714 0.0021862 0.00220065 0.00221479 0.00222865 0.00224227 0.00225566 0.00226885 0.00228187 0.00229473 0.00230746 0.00232006 0.00233257 -0.000575328 -0.000287321 4.39002E-06 0.000287312 0.000547548 0.000785569 0.00100183 0.00119679 0.00137091 0.00152466 0.00165857 0.00177321 0.00186931 0.00194785 0.00201033 0.00205907 0.00209728 0.00212837 0.00215502 0.00217881 0.00220063 0.00222098 0.00224019 0.00225847 0.002276 0.00229288 0.00230921 0.00232507 0.00234053 0.00235561 0.00237038 0.00238486 0.00239907 0.00241306 0.00242684 0.00244043 0.00245386 0.00246714 0.00248031 -0.000582991 -0.000290833 5.59919E-06 0.000294081 0.000560462 0.000805185 0.00102868 0.00123137 0.00141369 0.00157608 0.00171901 0.001843 0.00194865 0.00203677 0.00210849 0.00216555 0.00221052 0.00224665 0.00227697 0.00230358 0.00232771 0.00235004 0.00237099 0.00239083 0.00240977 0.00242794 0.00244548 0.00246246 0.00247896 0.00249504 0.00251074 0.00252611 0.00254118 0.00255598 0.00257053 0.00258488 0.00259902 0.002613 0.00262684 -0.000589309 -0.000293492 7.12348E-06 0.000300652 0.000572648 0.000823534 0.00105371 0.00126358 0.00145354 0.00162401 0.00177542 0.00190823 0.00202297 0.0021203 0.00220112 0.00226674 0.00231915 0.00236113 0.00239576 0.00242561 0.00245233 0.00247683 0.00249967 0.00252119 0.00254164 0.0025612 0.00258 0.00259816 0.00261576 0.00263287 0.00264955 0.00266584 0.00268179 0.00269743 0.00271279 0.0027279 0.00274279 0.00275747 0.00277199 -0.000594235 -0.00029524 9.04117E-06 0.00030714 0.00058426 0.000840805 0.00107715 0.00129368 0.00149076 0.00166878 0.00182813 0.00196925 0.0020926 0.00219874 0.00228839 0.00236258 0.00242283 0.00247136 0.00251101 0.00254461 0.00257423 0.00260113 0.00262602 0.00264936 0.00267143 0.00269246 0.00271262 0.00273202 0.00275078 0.00276897 0.00278667 0.00280392 0.00282078 0.00283729 0.00285348 0.00286938 0.00288502 0.00290043 0.00291564 -0.000597691 -0.000295993 1.14491E-05 0.000313675 0.000595463 0.000857198 0.00109923 0.00132192 0.00152562 0.00171069 0.00187749 0.00202642 0.0021579 0.00227242 0.00237058 0.00245318 0.00252142 0.00257701 0.00262238 0.0026603 0.00269322 0.00272276 0.00274989 0.00277519 0.00279901 0.00282161 0.0028432 0.00286392 0.0028839 0.00290323 0.00292199 0.00294024 0.00295805 0.00297545 0.00299249 0.00300921 0.00302562 0.00304178 0.0030577 *table -1.30945E-10 -1.28E-10 -1.27559E-10 -1.27494E-10 -1.27485E-10 -1.27481E-10 -1.27477E-10 -1.27473E-10 -1.27469E-10 -1.27466E-10 -1.27462E-10 -1.27458E-10 -1.27455E-10 -1.27451E-10 -1.27447E-10 -1.27443E-10 -1.2744E-10 -1.27436E-10 -1.27432E-10 -1.27428E-10 -1.27424E-10 -1.2742E-10 -1.27416E-10 -1.27412E-10 -1.27408E-10 -1.27404E-10 -1.274E-10 -1.27396E-10 -1.27392E-10 -1.27388E-10 -1.27383E-10 -1.27379E-10 -1.27374E-10 -1.2737E-10 -1.27365E-10 -1.2736E-10 -1.27355E-10 -1.27349E-10 -1.27344E-10 -1.42755E-10 -1.28343E-10 -1.26168E-10 -1.25846E-10 -1.25803E-10 -1.25782E-10 -1.25763E-10 -1.25745E-10 -1.25726E-10 -1.25708E-10 -1.2569E-10 -1.25672E-10 -1.25653E-10 -1.25635E-10 -1.25616E-10 -1.25597E-10 -1.25579E-10 -1.2556E-10 -1.25541E-10 -1.25522E-10 -1.25502E-10 -1.25483E-10 -1.25464E-10 -1.25444E-10 -1.25424E-10 -1.25405E-10 -1.25385E-10 -1.25365E-10 -1.25345E-10 -1.25324E-10 -1.25304E-10 -1.25283E-10 -1.25262E-10 -1.25241E-10 -1.2522E-10 -1.25198E-10 -1.25176E-10 -1.25154E-10 -1.25131E-10 -2.06692E-10 -1.36484E-10 -1.25795E-10 -1.24207E-10 -1.23994E-10 -1.23887E-10 -1.23793E-10 -1.23702E-10 -1.23612E-10 -1.23522E-10 -1.23432E-10 -1.23341E-10 -1.2325E-10 -1.23159E-10 -1.23067E-10 -1.22974E-10 -1.22881E-10 -1.22788E-10 -1.22694E-10 -1.22599E-10 -1.22504E-10 -1.22409E-10 -1.22313E-10 -1.22216E-10 -1.22119E-10 -1.22021E-10 -1.21923E-10 -1.21824E-10 -1.21724E-10 -1.21624E-10 -1.21523E-10 -1.21421E-10 -1.21319E-10 -1.21215E-10 -1.2111E-10 -1.21004E-10 -1.20897E-10 -1.20788E-10 -1.20678E-10 -5.16536E-10 -1.77689E-10 -1.25399E-10 -1.17549E-10 -1.16498E-10 -1.15971E-10 -1.15508E-10 -1.15059E-10 -1.14613E-10 -1.14169E-10 -1.13723E-10 -1.13275E-10 -1.12825E-10 -1.12373E-10 -1.11919E-10 -1.11462E-10 -1.11002E-10 -1.1054E-10 -1.10076E-10 -1.09609E-10 -1.09139E-10 -1.08667E-10 -1.08192E-10 -1.07715E-10 -1.07235E-10 -1.06752E-10 -1.06267E-10 -1.05778E-10 -1.05287E-10 -1.04792E-10 -1.04293E-10 -1.0379E-10 -1.03284E-10 -1.02773E-10 -1.02256E-10 -1.01735E-10 -1.01207E-10 -1.00672E-10 -1.00129E-10 -1.98373E-09 -3.7731E-10 -1.23692E-10 -8.49996E-11 -7.98171E-11 -7.72223E-11 -7.49373E-11 -7.27236E-11 -7.05291E-11 -6.83364E-11 -6.61386E-11 -6.39321E-11 -6.17152E-11 -5.94869E-11 -5.72467E-11 -5.49942E-11 -5.27294E-11 -5.04522E-11 -4.81627E-11 -4.58607E-11 -4.35462E-11 -4.12194E-11 -3.88799E-11 -3.65277E-11 -3.41624E-11 -3.17837E-11 -2.93911E-11 -2.69839E-11 -2.45615E-11 -2.21228E-11 -1.96669E-11 -1.71926E-11 -1.46984E-11 -1.21826E-11 -9.64327E-12 -7.07813E-12 -4.48445E-12 -1.85896E-12 8.02256E-13 -8.72527E-09 -1.32822E-09 -1.17463E-10 7.2273E-11 9.76829E-11 1.10406E-10 1.2161E-10 1.32464E-10 1.43225E-10 1.53976E-10 1.64753E-10 1.75573E-10 1.86443E-10 1.97369E-10 2.08353E-10 2.19397E-10 2.30502E-10 2.41667E-10 2.52894E-10 2.6418E-10 2.75528E-10 2.86936E-10 2.98406E-10 3.09939E-10 3.21535E-10 3.33196E-10 3.44925E-10 3.56725E-10 3.68598E-10 3.8055E-10 3.92585E-10 4.04708E-10 4.16926E-10 4.29247E-10 4.41678E-10 4.54231E-10 4.66915E-10 4.79746E-10 4.92739E-10 -3.8252E-08 -5.73483E-09 -8.38993E-11 8.36394E-10 9.59617E-10 1.02131E-09 1.07565E-09 1.12829E-09 1.18047E-09 1.23261E-09 1.28487E-09 1.33734E-09 1.39005E-09 1.44304E-09 1.4963E-09 1.54986E-09 1.60371E-09 1.65785E-09 1.71229E-09 1.76701E-09 1.82204E-09 1.87735E-09 1.93297E-09 1.98888E-09 2.0451E-09 2.10164E-09 2.1585E-09 2.2157E-09 2.27326E-09 2.33119E-09 2.38951E-09 2.44826E-09 2.50746E-09 2.56714E-09 2.62734E-09 2.68811E-09 2.74948E-09 2.81153E-09 2.87432E-09 -1.55399E-07 -2.54391E-08 1.01015E-10 4.4657E-09 5.05004E-09 5.34253E-09 5.60009E-09 5.8496E-09 6.09696E-09 6.3441E-09 6.59181E-09 6.84049E-09 7.09032E-09 7.34143E-09 7.59388E-09 7.84769E-09 8.10287E-09 8.35944E-09 8.6174E-09 8.87674E-09 9.13746E-09 9.39956E-09 9.66307E-09 9.92799E-09 1.01944E-08 1.04622E-08 1.07316E-08 1.10025E-08 1.12752E-08 1.15496E-08 1.18258E-08 1.2104E-08 1.23843E-08 1.26668E-08 1.29517E-08 1.32392E-08 1.35294E-08 1.38227E-08 1.41194E-08 -5.5758E-07 -1.05832E-07 6.66851E-10 2.04803E-08 2.31346E-08 2.4461E-08 2.56284E-08 2.67592E-08 2.78801E-08 2.89998E-08 3.01221E-08 3.12487E-08 3.23805E-08 3.3518E-08 3.46615E-08 3.58111E-08 3.69669E-08 3.81288E-08 3.9297E-08 4.04714E-08 4.16519E-08 4.28387E-08 4.40317E-08 4.52311E-08 4.64369E-08 4.76494E-08 4.88687E-08 5.00951E-08 5.1329E-08 5.25706E-08 5.38205E-08 5.50791E-08 5.6347E-08 5.76247E-08 5.8913E-08 6.02126E-08 6.15243E-08 6.28492E-08 6.41883E-08 -1.75832E-06 -3.89224E-07 1.63022E-09 8.48619E-08 9.60446E-08 1.01601E-07 1.06483E-07 1.11209E-07 1.15893E-07 1.20571E-07 1.25259E-07 1.29965E-07 1.34692E-07 1.39441E-07 1.44216E-07 1.49015E-07 1.5384E-07 1.5869E-07 1.63566E-07 1.68466E-07 1.73393E-07 1.78344E-07 1.83322E-07 1.88325E-07 1.93355E-07 1.98412E-07 2.03496E-07 2.0861E-07 2.13755E-07 2.18931E-07 2.24141E-07 2.29387E-07 2.3467E-07 2.39993E-07 2.45359E-07 2.50771E-07 2.56232E-07 2.61746E-07 2.67315E-07 -5.01096E-06 -1.24842E-06 2.93106E-09 3.14082E-07 3.56343E-07 3.76946E-07 3.94962E-07 4.12377E-07 4.29623E-07 4.46841E-07 4.64091E-07 4.814E-07 4.98783E-07 5.16248E-07 5.33799E-07 5.5144E-07 5.6917E-07 5.86991E-07 6.04902E-07 6.22903E-07 6.40995E-07 6.59177E-07 6.77451E-07 6.95817E-07 7.14277E-07 7.32834E-07 7.51491E-07 7.70252E-07 7.89122E-07 8.08106E-07 8.27209E-07 8.46441E-07 8.65807E-07 8.85316E-07 9.04978E-07 9.24802E-07 9.448E-07 9.64984E-07 9.85365E-07 -1.30998E-05 -3.56296E-06 4.59016E-09 1.02157E-06 1.16455E-06 1.23067E-06 1.28765E-06 1.34251E-06 1.39675E-06 1.45084E-06 1.505E-06 1.55932E-06 1.61384E-06 1.6686E-06 1.72362E-06 1.7789E-06 1.83444E-06 1.89025E-06 1.94633E-06 2.00268E-06 2.0593E-06 2.11618E-06 2.17334E-06 2.23078E-06 2.2885E-06 2.34651E-06 2.40481E-06 2.46344E-06 2.52238E-06 2.58168E-06 2.64133E-06 2.70138E-06 2.76183E-06 2.82272E-06 2.88407E-06 2.94591E-06 3.00828E-06 3.07121E-06 3.13473E-06 -3.04705E-05 -9.12589E-06 6.71056E-09 2.95797E-06 3.41444E-06 3.60136E-06 3.75657E-06 3.90444E-06 4.05001E-06 4.19488E-06 4.3397E-06 4.48481E-06 4.63035E-06 4.77643E-06 4.92309E-06 5.07037E-06 5.21829E-06 5.36686E-06 5.51608E-06 5.66595E-06 5.81648E-06 5.96767E-06 6.11953E-06 6.27207E-06 6.42531E-06 6.57927E-06 6.73399E-06 6.88949E-06 7.04581E-06 7.20301E-06 7.36113E-06 7.52024E-06 7.6804E-06 7.84168E-06 8.00415E-06 8.16789E-06 8.33299E-06 8.49953E-06 8.66761E-06 -6.01894E-05 -2.02357E-05 9.51803E-09 7.71764E-06 9.19876E-06 9.69139E-06 1.00654E-05 1.0413E-05 1.07518E-05 1.10874E-05 1.14219E-05 1.17564E-05 1.20913E-05 1.2427E-05 1.27638E-05 1.31016E-05 1.34406E-05 1.37808E-05 1.41222E-05 1.44649E-05 1.48089E-05 1.51542E-05 1.55008E-05 1.58488E-05 1.61983E-05 1.65491E-05 1.69016E-05 1.72556E-05 1.76115E-05 1.79691E-05 1.83288E-05 1.86905E-05 1.90546E-05 1.94211E-05 1.97902E-05 2.01622E-05 2.05371E-05 2.09153E-05 2.12968E-05 -9.99205E-05 -3.74945E-05 1.3414E-08 1.75988E-05 2.24132E-05 2.37341E-05 2.45618E-05 2.52879E-05 2.59812E-05 2.6661E-05 2.73347E-05 2.80056E-05 2.86755E-05 2.93455E-05 3.00162E-05 3.06881E-05 3.13613E-05 3.20362E-05 3.27127E-05 3.3391E-05 3.40711E-05 3.47533E-05 3.54374E-05 3.61237E-05 3.68122E-05 3.75031E-05 3.81966E-05 3.88928E-05 3.95921E-05 4.02946E-05 4.10006E-05 4.17105E-05 4.24246E-05 4.31432E-05 4.38667E-05 4.45956E-05 4.53302E-05 4.60709E-05 4.68183E-05 -0.000144207 -5.89199E-05 1.89705E-08 3.36449E-05 4.70561E-05 5.08924E-05 5.26775E-05 5.40618E-05 5.53274E-05 5.65447E-05 5.77382E-05 5.89188E-05 6.00921E-05 6.12613E-05 6.24284E-05 6.35947E-05 6.4761E-05 6.5928E-05 6.70959E-05 6.82653E-05 6.94362E-05 7.06091E-05 7.17839E-05 7.29612E-05 7.4141E-05 7.53237E-05 7.65097E-05 7.76994E-05 7.88932E-05 8.00917E-05 8.12954E-05 8.25049E-05 8.37209E-05 8.4944E-05 8.6175E-05 8.74146E-05 8.86636E-05 8.99228E-05 9.11929E-05 -0.000188945 -8.19151E-05 2.68731E-08 5.42464E-05 8.28156E-05 9.35255E-05 9.75709E-05 0.000100098 0.000102222 0.000104194 0.000106094 0.000107953 0.000109787 0.000111605 0.000113413 0.000115214 0.000117009 0.000118801 0.000120592 0.000122381 0.000124169 0.000125958 0.000127747 0.000129537 0.000131329 0.000133123 0.00013492 0.000136721 0.000138526 0.000140336 0.000142153 0.000143977 0.00014581 0.000147652 0.000149505 0.00015137 0.000153249 0.000155142 0.000157052 -0.000232057 -0.000104722 3.79151E-08 7.68034E-05 0.000124841 0.000148652 0.000158152 0.000162854 0.000166275 0.000169266 0.000172065 0.00017476 0.000177393 0.000179984 0.000182546 0.000185087 0.000187612 0.000190126 0.00019263 0.000195128 0.00019762 0.000200107 0.000202591 0.000205073 0.000207554 0.000210034 0.000212516 0.000214999 0.000217486 0.000219977 0.000222475 0.00022498 0.000227495 0.000230022 0.000232561 0.000235116 0.000237688 0.000240279 0.000242891 -0.000272668 -0.000126464 5.30675E-08 9.94177E-05 0.000168461 0.000209897 0.000229992 0.000239144 0.000244682 0.000249075 0.000253008 0.000256708 0.000260271 0.000263744 0.000267155 0.000270521 0.000273852 0.000277156 0.000280438 0.000283704 0.000286954 0.000290193 0.000293422 0.000296643 0.000299857 0.000303066 0.000306271 0.000309476 0.00031268 0.000315887 0.000319099 0.000322317 0.000325545 0.000328785 0.000332039 0.00033531 0.000338601 0.000341914 0.000345254 -0.00031048 -0.000146792 7.35724E-08 0.000121106 0.000211071 0.000271882 0.000307177 0.000324673 0.000333956 0.000340406 0.000345807 0.000350721 0.000355364 0.000359834 0.000364187 0.000368454 0.000372656 0.000376808 0.000380919 0.000384996 0.000389046 0.000393073 0.00039708 0.000401069 0.000405044 0.000409006 0.000412959 0.000416905 0.000420846 0.000424785 0.000428725 0.000432669 0.00043662 0.000440583 0.000444559 0.000448553 0.000452568 0.000456609 0.000460679 -0.00034546 -0.000165609 1.01035E-07 0.00014146 0.000251511 0.000331782 0.00038459 0.000414685 0.000430549 0.000440247 0.000447647 0.000454067 0.000459978 0.000465582 0.000470979 0.00047623 0.000481371 0.000486427 0.000491414 0.000496345 0.000501229 0.000506074 0.000510885 0.000515666 0.000520422 0.000525155 0.00052987 0.00053457 0.000539258 0.000543937 0.000548612 0.000553287 0.000557964 0.00056265 0.000567348 0.000572062 0.000576798 0.000581561 0.000586354 -0.000377693 -0.000182931 1.37527E-07 0.000160358 0.000289348 0.000388417 0.000459253 0.000504768 0.000530808 0.000545794 0.000556084 0.000564449 0.000571886 0.000578796 0.000585365 0.000591697 0.000597852 0.000603874 0.000609788 0.000615615 0.000621369 0.000627063 0.000632703 0.000638298 0.000643853 0.000649373 0.000654863 0.000660327 0.000665769 0.000671195 0.000676608 0.000682014 0.000687418 0.000692825 0.00069824 0.000703669 0.000709118 0.000714593 0.0007201 -0.000407313 -0.000198822 1.85703E-07 0.000177806 0.000324483 0.000441382 0.000529858 0.000591879 0.000631119 0.000654239 0.000668895 0.00067989 0.000689221 0.000697666 0.000705565 0.000713095 0.000720357 0.000727417 0.000734316 0.000741087 0.000747752 0.000754327 0.000760825 0.000767257 0.00077363 0.000779953 0.00078623 0.000792469 0.000798674 0.000804851 0.000811007 0.000817146 0.000823274 0.000829399 0.000835527 0.000841664 0.000847818 0.000853995 0.000860203 -0.000434474 -0.000213365 2.48953E-07 0.000193869 0.000356971 0.000490614 0.000595958 0.000674476 0.000728554 0.000762695 0.000783881 0.000798589 0.000810355 0.000820647 0.000830083 0.000838958 0.000847437 0.00085562 0.000863574 0.000871345 0.000878965 0.00088646 0.000893847 0.000901142 0.000908356 0.000915499 0.000922579 0.000929604 0.000936581 0.000943517 0.000950419 0.000957293 0.000964148 0.000970989 0.000977825 0.000984665 0.000991515 0.000998385 0.00100528 -0.000459334 -0.000226644 3.31592E-07 0.00020863 0.000386933 0.000536212 0.000657494 0.000751975 0.000821339 0.000868522 0.000898753 0.000918787 0.000933802 0.000946378 0.000957618 0.000968023 0.000977855 0.000987267 0.000996357 0.00100519 0.00101382 0.00102228 0.00103059 0.00103878 0.00104686 0.00105485 0.00106275 0.00107057 0.00107833 0.00108604 0.00109369 0.0011013 0.00110889 0.00111644 0.00112399 0.00113152 0.00113906 0.00114662 0.00115419 -0.000482046 -0.000238743 4.39091E-07 0.000222185 0.00041452 0.000578344 0.000714584 0.000824264 0.000908677 0.00096982 0.00101125 0.00103867 0.00105813 0.00107361 0.00108702 0.00109919 0.00111054 0.0011213 0.00113163 0.00114161 0.00115131 0.00116078 0.00117006 0.00117918 0.00118816 0.00119701 0.00120575 0.00121439 0.00122295 0.00123143 0.00123984 0.0012482 0.00125652 0.00126479 0.00127304 0.00128127 0.0012895 0.00129773 0.00130597 -0.000502754 -0.000249741 5.78373E-07 0.000234628 0.000439895 0.000617214 0.000767433 0.000891457 0.000990347 0.00106556 0.00111951 0.00115636 0.00118187 0.00120116 0.00121722 0.00123146 0.00124454 0.00125681 0.00126848 0.0012797 0.00129055 0.00130109 0.00131139 0.00132148 0.00133138 0.00134113 0.00135073 0.00136021 0.00136959 0.00137886 0.00138805 0.00139716 0.00140621 0.0014152 0.00142416 0.00143308 0.00144199 0.00145089 0.0014598 -0.000521594 -0.000259709 7.58174E-07 0.000246053 0.00046322 0.000653035 0.000816282 0.000953774 0.00106642 0.00115537 0.00122231 0.00127015 0.00130352 0.00132784 0.00134724 0.00136394 0.001379 0.00139296 0.00140613 0.00141868 0.00143077 0.00144246 0.00145383 0.00146494 0.00147581 0.00148648 0.00149698 0.00150732 0.00151752 0.00152761 0.00153758 0.00154745 0.00155725 0.00156697 0.00157664 0.00158626 0.00159585 0.00160542 0.00161499 -0.000538686 -0.000268709 9.89501E-07 0.000256552 0.000484656 0.000686026 0.000861386 0.00101148 0.00113711 0.00123923 0.0013191 0.00137876 0.00142159 0.00145243 0.0014761 0.00149579 0.00151316 0.00152904 0.00154386 0.00155788 0.0015713 0.00158422 0.00159673 0.00160891 0.00162079 0.00163243 0.00164385 0.00165508 0.00166614 0.00167705 0.00168782 0.00169848 0.00170903 0.00171948 0.00172987 0.00174019 0.00175046 0.0017607 0.00177092 -0.000554138 -0.000276797 1.28618E-06 0.000266214 0.000504359 0.000716398 0.000903006 0.00106487 0.0012027 0.00131732 0.00140974 0.00148144 0.00153483 0.0015737 0.00160282 0.00162621 0.00164631 0.00166437 0.00168104 0.00169669 0.00171155 0.00172579 0.00173952 0.00175283 0.00176578 0.00177843 0.00179081 0.00180296 0.0018149 0.00182666 0.00183825 0.0018497 0.00186102 0.00187222 0.00188333 0.00189435 0.00190531 0.00191622 0.00192709 -0.000568043 -0.000284017 1.66558E-06 0.000275127 0.000522481 0.000744362 0.000941397 0.00111422 0.00126349 0.00138992 0.00149435 0.00157793 0.00164238 0.00169051 0.00172639 0.00175439 0.00177777 0.00179836 0.00181711 0.00183455 0.00185099 0.00186666 0.0018817 0.00189621 0.00191029 0.001924 0.00193738 0.00195049 0.00196334 0.00197597 0.0019884 0.00200066 0.00201276 0.00202473 0.00203657 0.0020483 0.00205995 0.00207154 0.00208307 -0.000580481 -0.000290404 2.14941E-06 0.000283378 0.000539169 0.000770118 0.000976811 0.00115984 0.0013198 0.00145733 0.00157318 0.00166825 0.00174384 0.00180198 0.00184584 0.00187954 0.0019069 0.00193044 0.00195155 0.00197099 0.00198917 0.00200639 0.00202283 0.00203863 0.0020539 0.00206872 0.00208316 0.00209725 0.00211105 0.00212459 0.00213789 0.00215098 0.00216388 0.00217662 0.00218921 0.00220167 0.00221402 0.00222628 0.00223847 -0.000591512 -0.00029598 2.76485E-06 0.000291053 0.000554566 0.000793862 0.00100949 0.001202 0.00137194 0.00151991 0.00164654 0.0017526 0.00183911 0.00190756 0.00196033 0.00200085 0.00203304 0.00206008 0.0020839 0.00210556 0.00212566 0.00214457 0.00216252 0.0021797 0.00219625 0.00221225 0.00222778 0.00224292 0.0022577 0.00227217 0.00228637 0.00230032 0.00231404 0.00232757 0.00234092 0.00235412 0.00236718 0.00238013 0.00239298 -0.000601182 -0.000300756 3.54578E-06 0.000298242 0.000568814 0.000815786 0.00103967 0.00124098 0.00142024 0.00157797 0.00171476 0.00183127 0.00192832 0.00200706 0.00206924 0.00211756 0.00215556 0.00218676 0.00221371 0.00223788 0.0022601 0.00228085 0.00230045 0.00231911 0.00233701 0.00235426 0.00237096 0.00238718 0.00240299 0.00241844 0.00243356 0.00244839 0.00246296 0.0024773 0.00249143 0.00250538 0.00251916 0.00253281 0.00254634 -0.000609515 -0.000304729 4.53443E-06 0.000305038 0.000582053 0.000836076 0.00106759 0.00127706 0.00146499 0.00163186 0.0017782 0.00190459 0.00201172 0.00210052 0.00217229 0.00222908 0.00227381 0.00230997 0.00234056 0.00236758 0.00239215 0.00241492 0.0024363 0.00245656 0.00247591 0.00249449 0.00251242 0.00252979 0.00254667 0.00256313 0.00257921 0.00259496 0.0026104 0.00262557 0.0026405 0.00265522 0.00266974 0.0026841 0.00269831 -0.000616514 -0.000307878 5.78333E-06 0.000311539 0.000594428 0.00085492 0.00109346 0.00131051 0.0015065 0.00168191 0.00183721 0.00197292 0.00208965 0.00218813 0.00226942 0.00233503 0.00238726 0.0024292 0.00246406 0.00249433 0.00252152 0.00254652 0.00256983 0.00259182 0.00261272 0.00263271 0.00265194 0.00267052 0.00268853 0.00270605 0.00272313 0.00273983 0.00275617 0.00277221 0.00278796 0.00280346 0.00281874 0.00283382 0.00284873 -0.00062216 -0.000310164 7.35767E-06 0.000317853 0.000606088 0.000872506 0.00111753 0.00134158 0.00154508 0.00172845 0.00189215 0.00203663 0.00216244 0.00227021 0.00236075 0.00243526 0.0024955 0.002544 0.00258383 0.00261782 0.00264796 0.00267539 0.00270082 0.00272467 0.00274723 0.00276874 0.00278935 0.00280921 0.00282841 0.00284703 0.00286516 0.00288284 0.00290012 0.00291704 0.00293364 0.00294995 0.002966 0.00298183 0.00299745 -0.000626401 -0.000311528 9.33829E-06 0.0003241 0.000617189 0.000889029 0.00114002 0.00137054 0.00158101 0.00177181 0.00194337 0.0020961 0.00223049 0.00234708 0.00244656 0.00252986 0.00259833 0.00265398 0.0026995 0.00273778 0.00277122 0.00280135 0.00282907 0.00285493 0.00287929 0.00290242 0.0029245 0.00294571 0.00296616 0.00298595 0.00300516 0.00302387 0.00304212 0.00305996 0.00307743 0.00309458 0.00311143 0.00312801 0.00314436 -0.000629158 -0.000311882 1.18252E-05 0.000330414 0.000627902 0.000904692 0.00116116 0.00139767 0.0016146 0.00181233 0.00199122 0.00215169 0.00229417 0.00241913 0.00252715 0.00261901 0.00269574 0.00275892 0.00281074 0.00285393 0.00289111 0.00292423 0.00295445 0.00298248 0.00300877 0.00303362 0.00305728 0.00307992 0.00310169 0.0031227 0.00314306 0.00316283 0.00318209 0.00320088 0.00321926 0.00323727 0.00325493 0.0032723 0.00328939 *table -8.74854E-11 -7.67895E-11 -7.51754E-11 -7.49371E-11 -7.49051E-11 -7.48891E-11 -7.48751E-11 -7.48614E-11 -7.48479E-11 -7.48344E-11 -7.48209E-11 -7.48073E-11 -7.47937E-11 -7.478E-11 -7.47662E-11 -7.47523E-11 -7.47384E-11 -7.47244E-11 -7.47103E-11 -7.46961E-11 -7.46818E-11 -7.46675E-11 -7.46531E-11 -7.46386E-11 -7.4624E-11 -7.46093E-11 -7.45945E-11 -7.45796E-11 -7.45645E-11 -7.45493E-11 -7.4534E-11 -7.45185E-11 -7.45028E-11 -7.44868E-11 -7.44705E-11 -7.44539E-11 -7.44369E-11 -7.44194E-11 -7.44013E-11 -1.3312E-10 -8.16177E-11 -7.37844E-11 -7.26218E-11 -7.2466E-11 -7.2388E-11 -7.23194E-11 -7.22529E-11 -7.2187E-11 -7.21211E-11 -7.20551E-11 -7.19889E-11 -7.19223E-11 -7.18555E-11 -7.17882E-11 -7.17206E-11 -7.16526E-11 -7.15842E-11 -7.15155E-11 -7.14464E-11 -7.13769E-11 -7.1307E-11 -7.12368E-11 -7.11661E-11 -7.10951E-11 -7.10236E-11 -7.09517E-11 -7.08793E-11 -7.08065E-11 -7.07331E-11 -7.06592E-11 -7.05846E-11 -7.05093E-11 -7.04333E-11 -7.03564E-11 -7.02785E-11 -7.01995E-11 -7.01192E-11 -7.00373E-11 -3.57828E-10 -1.11336E-10 -7.3412E-11 -6.77453E-11 -6.69862E-11 -6.6606E-11 -6.62713E-11 -6.59473E-11 -6.56261E-11 -6.53052E-11 -6.49836E-11 -6.46607E-11 -6.43363E-11 -6.40102E-11 -6.36824E-11 -6.33529E-11 -6.30215E-11 -6.26883E-11 -6.23533E-11 -6.20164E-11 -6.16778E-11 -6.13373E-11 -6.0995E-11 -6.06507E-11 -6.03046E-11 -5.99564E-11 -5.96062E-11 -5.92538E-11 -5.88991E-11 -5.85419E-11 -5.81821E-11 -5.78194E-11 -5.74536E-11 -5.70843E-11 -5.67113E-11 -5.6334E-11 -5.59519E-11 -5.55644E-11 -5.51706E-11 -1.42065E-09 -2.55696E-10 -7.30181E-11 -4.54502E-11 -4.17571E-11 -3.99076E-11 -3.82797E-11 -3.67033E-11 -3.51407E-11 -3.35797E-11 -3.2015E-11 -3.04443E-11 -2.88663E-11 -2.72802E-11 -2.56856E-11 -2.40824E-11 -2.24703E-11 -2.08495E-11 -1.92198E-11 -1.75813E-11 -1.5934E-11 -1.42777E-11 -1.26125E-11 -1.09382E-11 -9.25456E-12 -7.56128E-12 -5.85802E-12 -4.14429E-12 -2.41955E-12 -6.8309E-13 1.06588E-12 2.82833E-12 4.60538E-12 6.39835E-12 8.20881E-12 1.00386E-11 1.189E-11 1.37658E-11 1.56691E-11 -6.30997E-09 -9.42128E-10 -7.13378E-11 6.22358E-11 8.01291E-11 8.909E-11 9.69768E-11 1.04615E-10 1.12185E-10 1.19748E-10 1.27329E-10 1.34938E-10 1.42584E-10 1.50268E-10 1.57993E-10 1.65761E-10 1.7357E-10 1.81423E-10 1.89318E-10 1.97255E-10 2.05236E-10 2.13259E-10 2.21326E-10 2.29437E-10 2.37592E-10 2.45794E-10 2.54044E-10 2.62344E-10 2.70696E-10 2.79104E-10 2.87572E-10 2.96103E-10 3.04702E-10 3.13375E-10 3.2213E-10 3.30973E-10 3.39913E-10 3.48963E-10 3.58136E-10 -2.77231E-08 -4.12998E-09 -6.53795E-11 5.76315E-10 6.6227E-10 7.05313E-10 7.43196E-10 7.79882E-10 8.16245E-10 8.52571E-10 8.8898E-10 9.2553E-10 9.6225E-10 9.99158E-10 1.03626E-09 1.07357E-09 1.11107E-09 1.14879E-09 1.1867E-09 1.22483E-09 1.26315E-09 1.30168E-09 1.34042E-09 1.37937E-09 1.41853E-09 1.45792E-09 1.49753E-09 1.53738E-09 1.57748E-09 1.61784E-09 1.65848E-09 1.69942E-09 1.74068E-09 1.78229E-09 1.82426E-09 1.86665E-09 1.90948E-09 1.95279E-09 1.99666E-09 -1.14066E-07 -1.82878E-08 -3.41531E-11 2.99451E-09 3.40018E-09 3.60327E-09 3.782E-09 3.95508E-09 4.12663E-09 4.298E-09 4.46976E-09 4.64218E-09 4.8154E-09 4.98949E-09 5.16451E-09 5.34048E-09 5.5174E-09 5.69527E-09 5.87411E-09 6.05391E-09 6.23467E-09 6.41639E-09 6.59909E-09 6.78277E-09 6.96745E-09 7.15316E-09 7.33994E-09 7.52784E-09 7.71689E-09 7.90717E-09 8.09874E-09 8.2917E-09 8.48612E-09 8.68213E-09 8.87984E-09 9.07938E-09 9.28093E-09 9.48467E-09 9.69081E-09 -4.21596E-07 -7.6656E-08 1.36325E-10 1.39379E-08 1.5787E-08 1.67118E-08 1.75254E-08 1.83132E-08 1.90939E-08 1.98739E-08 2.06555E-08 2.14401E-08 2.22283E-08 2.30205E-08 2.38168E-08 2.46174E-08 2.54223E-08 2.62316E-08 2.70452E-08 2.78631E-08 2.86853E-08 2.95119E-08 3.03428E-08 3.11782E-08 3.20181E-08 3.28627E-08 3.3712E-08 3.45663E-08 3.54259E-08 3.62909E-08 3.71618E-08 3.80387E-08 3.89223E-08 3.98128E-08 4.07108E-08 4.1617E-08 4.25318E-08 4.34561E-08 4.43907E-08 -1.37309E-06 -2.90147E-07 6.577E-10 5.96462E-08 6.75633E-08 7.15074E-08 7.49737E-08 7.83289E-08 8.16536E-08 8.49741E-08 8.83017E-08 9.16415E-08 9.49964E-08 9.83678E-08 1.01757E-07 1.05163E-07 1.08588E-07 1.12031E-07 1.15492E-07 1.18971E-07 1.22468E-07 1.25984E-07 1.29518E-07 1.3307E-07 1.36641E-07 1.40232E-07 1.43843E-07 1.47475E-07 1.51128E-07 1.54804E-07 1.58505E-07 1.62231E-07 1.65984E-07 1.69766E-07 1.73579E-07 1.77426E-07 1.81308E-07 1.85228E-07 1.8919E-07 -4.01068E-06 -9.64126E-07 1.54825E-09 2.29412E-07 2.60219E-07 2.75363E-07 2.88627E-07 3.01452E-07 3.14153E-07 3.26835E-07 3.3954E-07 3.52289E-07 3.65094E-07 3.7796E-07 3.9089E-07 4.03886E-07 4.16949E-07 4.30079E-07 4.43277E-07 4.56542E-07 4.69875E-07 4.83275E-07 4.96743E-07 5.1028E-07 5.23887E-07 5.37566E-07 5.5132E-07 5.65151E-07 5.79063E-07 5.93061E-07 6.07148E-07 6.2133E-07 6.35613E-07 6.50003E-07 6.64508E-07 6.79134E-07 6.93892E-07 7.08789E-07 7.23837E-07 -1.074E-05 -2.83642E-06 2.76169E-09 7.76553E-07 8.83786E-07 9.34462E-07 9.78378E-07 1.02071E-06 1.06258E-06 1.10435E-06 1.14618E-06 1.18814E-06 1.23026E-06 1.27257E-06 1.31508E-06 1.3578E-06 1.40073E-06 1.44387E-06 1.48722E-06 1.53078E-06 1.57455E-06 1.61854E-06 1.66273E-06 1.70715E-06 1.75179E-06 1.79666E-06 1.84176E-06 1.88711E-06 1.93271E-06 1.97859E-06 2.02475E-06 2.07121E-06 2.11799E-06 2.16512E-06 2.2126E-06 2.26048E-06 2.30877E-06 2.3575E-06 2.4067E-06 -2.59087E-05 -7.50152E-06 4.34014E-09 2.3242E-06 2.66946E-06 2.81756E-06 2.94234E-06 3.06165E-06 3.17927E-06 3.29641E-06 3.41358E-06 3.531E-06 3.64881E-06 3.76708E-06 3.88584E-06 4.00513E-06 4.12496E-06 4.24533E-06 4.36624E-06 4.4877E-06 4.60971E-06 4.73227E-06 4.85539E-06 4.97908E-06 5.10335E-06 5.22822E-06 5.35371E-06 5.47985E-06 5.60668E-06 5.73423E-06 5.86254E-06 5.99166E-06 6.12164E-06 6.25254E-06 6.38443E-06 6.51736E-06 6.6514E-06 6.78664E-06 6.92314E-06 -5.3733E-05 -1.74126E-05 6.42538E-09 6.25929E-06 7.36639E-06 7.76157E-06 8.07219E-06 8.36351E-06 8.64852E-06 8.93126E-06 9.21335E-06 9.49558E-06 9.77837E-06 1.00619E-05 1.03465E-05 1.0632E-05 1.09186E-05 1.12063E-05 1.14952E-05 1.17852E-05 1.20763E-05 1.23686E-05 1.26621E-05 1.29568E-05 1.32527E-05 1.355E-05 1.38486E-05 1.41486E-05 1.44502E-05 1.47533E-05 1.50582E-05 1.5365E-05 1.56736E-05 1.59844E-05 1.62975E-05 1.6613E-05 1.6931E-05 1.72518E-05 1.75756E-05 -9.35207E-05 -3.39951E-05 9.29594E-09 1.49202E-05 1.8548E-05 1.95891E-05 2.029E-05 2.09184E-05 2.1523E-05 2.21179E-05 2.27085E-05 2.32974E-05 2.3886E-05 2.44752E-05 2.50653E-05 2.56567E-05 2.62497E-05 2.68442E-05 2.74405E-05 2.80386E-05 2.86385E-05 2.92403E-05 2.98441E-05 3.045E-05 3.1058E-05 3.16682E-05 3.22809E-05 3.28961E-05 3.35141E-05 3.41352E-05 3.47594E-05 3.53872E-05 3.60187E-05 3.66544E-05 3.72945E-05 3.79394E-05 3.85894E-05 3.92449E-05 3.99063E-05 -0.000139818 -5.58129E-05 1.33859E-08 3.00951E-05 4.08489E-05 4.37944E-05 4.53031E-05 4.65284E-05 4.76664E-05 4.87682E-05 4.98522E-05 5.09268E-05 5.19964E-05 5.30635E-05 5.41297E-05 5.51959E-05 5.62628E-05 5.73309E-05 5.84005E-05 5.94719E-05 6.05452E-05 6.16207E-05 6.26985E-05 6.37788E-05 6.48619E-05 6.5948E-05 6.70374E-05 6.81306E-05 6.92278E-05 7.03296E-05 7.14365E-05 7.25489E-05 7.36675E-05 7.47929E-05 7.59256E-05 7.70665E-05 7.82161E-05 7.93752E-05 8.05446E-05 -0.000187566 -8.00443E-05 1.92505E-08 5.08547E-05 7.57192E-05 8.4206E-05 8.75465E-05 8.97967E-05 9.17461E-05 9.35781E-05 9.53528E-05 9.70954E-05 9.88186E-05 0.00010053 0.000102233 0.000103931 0.000105625 0.000107318 0.00010901 0.000110702 0.000112394 0.000114088 0.000115782 0.000117478 0.000119177 0.000120878 0.000122582 0.000124291 0.000126004 0.000127723 0.000129449 0.000131182 0.000132923 0.000134674 0.000136436 0.000138209 0.000139995 0.000141796 0.000143612 -0.00023398 -0.000104486 2.75414E-08 7.44835E-05 0.000118998 0.000139383 0.000147199 0.000151331 0.000154494 0.000157317 0.000159983 0.000162563 0.000165091 0.000167583 0.000170052 0.000172504 0.000174943 0.000177373 0.000179795 0.000182213 0.000184626 0.000187037 0.000189446 0.000191853 0.00019426 0.000196669 0.000199079 0.000201491 0.000203908 0.000206331 0.00020876 0.000211197 0.000213645 0.000216104 0.000218577 0.000221065 0.000223569 0.000226093 0.000228638 -0.000277834 -0.000127956 3.9046E-08 9.86407E-05 0.000165206 0.000203149 0.000220415 0.000228338 0.000233423 0.000237594 0.000241383 0.000244973 0.000248444 0.000251837 0.000255175 0.000258473 0.000261741 0.000264987 0.000268214 0.000271426 0.000274626 0.000277816 0.000280998 0.000284173 0.000287344 0.000290511 0.000293676 0.000296841 0.000300007 0.000303177 0.000306353 0.000309536 0.000312729 0.000315935 0.000319157 0.000322396 0.000325655 0.000328937 0.000332246 -0.000318683 -0.000149949 5.47629E-08 0.000122006 0.000210904 0.000269065 0.000301135 0.000316466 0.00032487 0.000330974 0.000336201 0.000341006 0.00034557 0.00034998 0.000354283 0.000358509 0.000362677 0.000366799 0.000370884 0.00037494 0.000378971 0.000382981 0.000386974 0.000390951 0.000394916 0.00039887 0.000402817 0.000406758 0.000410696 0.000414634 0.000418574 0.000422519 0.000426473 0.00043044 0.000434421 0.000438421 0.000442444 0.000446493 0.000450572 -0.00035644 -0.000170307 7.59819E-08 0.000143996 0.00025448 0.000333332 0.00038342 0.000410747 0.000425039 0.00043412 0.00044127 0.000447569 0.000453412 0.000458974 0.000464346 0.000469583 0.000474718 0.000479774 0.000484767 0.000489708 0.000494607 0.000499468 0.000504299 0.000509102 0.000513882 0.000518643 0.000523387 0.000528117 0.000532838 0.000537552 0.000542263 0.000546976 0.000551693 0.000556421 0.000561162 0.000565921 0.000570704 0.000575514 0.000580357 -0.000391178 -0.000189026 1.0437E-07 0.000164412 0.000295297 0.000394282 0.00046339 0.000506272 0.000530094 0.000543984 0.000553857 0.000562058 0.000569428 0.000576312 0.000582879 0.000589223 0.000595401 0.000601453 0.000607404 0.000613273 0.000619074 0.000624817 0.00063051 0.000636161 0.000641775 0.000647356 0.000652908 0.000658438 0.000663948 0.000669443 0.000674929 0.000680408 0.000685888 0.000691373 0.000696868 0.000702379 0.000707913 0.000713474 0.000719069 -0.000423041 -0.000206171 1.42072E-07 0.000183238 0.000333177 0.000451307 0.000539218 0.000599307 0.000636163 0.000657616 0.00067154 0.000682271 0.000691516 0.000699946 0.000707864 0.000715431 0.000722744 0.000729862 0.000736829 0.000743672 0.000750415 0.000757071 0.000763655 0.000770175 0.00077664 0.000783056 0.00078943 0.000795767 0.000802074 0.000808354 0.000814615 0.000820862 0.000827101 0.000833339 0.000839582 0.000845837 0.00085211 0.00085841 0.000864743 -0.000452199 -0.00022183 1.91834E-07 0.000200532 0.00036815 0.000504268 0.000610228 0.000687781 0.000739865 0.000771997 0.000792005 0.000806252 0.000817878 0.000828153 0.000837623 0.00084656 0.000855116 0.000863388 0.000871438 0.000879311 0.00088704 0.000894647 0.00090215 0.000909565 0.000916902 0.00092417 0.000931378 0.000938534 0.000945644 0.000952715 0.000959754 0.000966769 0.000973766 0.000980753 0.000987737 0.000994727 0.00100173 0.00100876 0.00101581 -0.000478831 -0.000236102 2.57162E-07 0.000216383 0.000400339 0.000553244 0.000676278 0.000770838 0.00083895 0.000884229 0.00091289 0.000932146 0.000946902 0.000959438 0.000970723 0.000981212 0.000991147 0.00100067 0.00100989 0.00101886 0.00102763 0.00103623 0.00104469 0.00105302 0.00106126 0.0010694 0.00107745 0.00108544 0.00109336 0.00110123 0.00110906 0.00111684 0.00112459 0.00113233 0.00114005 0.00114777 0.00115549 0.00116324 0.001171 -0.000503109 -0.00024908 3.42512E-07 0.000230895 0.000429906 0.000598409 0.000737465 0.000848258 0.00093231 0.000992046 0.0010318 0.00105808 0.00107707 0.00109245 0.0011059 0.00111817 0.00112965 0.00114056 0.00115104 0.00116118 0.00117105 0.0011807 0.00119015 0.00119945 0.0012086 0.00121764 0.00122657 0.0012354 0.00124415 0.00125283 0.00126144 0.00127 0.00127851 0.00128699 0.00129545 0.00130389 0.00131233 0.00132078 0.00132925 -0.000525201 -0.000260858 4.53536E-07 0.000244171 0.000457028 0.000639981 0.000793999 0.00092012 0.00101958 0.0010941 0.00114663 0.00118212 0.00120688 0.00122594 0.00124202 0.00125637 0.0012696 0.00128205 0.0012939 0.00130531 0.00131635 0.0013271 0.0013376 0.0013479 0.00135801 0.00136797 0.00137779 0.00138749 0.00139708 0.00140657 0.00141598 0.00142532 0.0014346 0.00144383 0.00145302 0.00146218 0.00147133 0.00148048 0.00148964 -0.00054526 -0.000271516 5.97384E-07 0.000256315 0.000481885 0.000678196 0.00084614 0.000986648 0.00110076 0.00118983 0.00125588 0.00130241 0.00133478 0.00135867 0.00137802 0.00139484 0.00141007 0.00142423 0.00143761 0.00145039 0.0014627 0.00147462 0.00148622 0.00149756 0.00150867 0.00151959 0.00153032 0.00154091 0.00155136 0.00156169 0.00157191 0.00158204 0.00159209 0.00160207 0.001612 0.00162188 0.00163174 0.00164158 0.00165142 -0.000563427 -0.000281132 7.8308E-07 0.000267426 0.000504653 0.000713291 0.000894166 0.00104812 0.00117608 0.00127913 0.00135878 0.00141747 0.00145921 0.0014894 0.00151289 0.00153267 0.00155024 0.00156634 0.0015814 0.00159568 0.00160935 0.00162253 0.0016353 0.00164774 0.00165989 0.0016718 0.00168349 0.00169499 0.00170632 0.0017175 0.00172855 0.00173948 0.00175031 0.00176105 0.00177171 0.00178232 0.00179289 0.00180342 0.00181394 -0.00057983 -0.000289771 1.02199E-06 0.000277601 0.000525504 0.000745502 0.000938362 0.00110486 0.00124582 0.00136217 0.00145509 0.00152634 0.00157879 0.00161686 0.00164563 0.00166904 0.00168933 0.00170765 0.00172459 0.00174052 0.00175567 0.0017702 0.00178422 0.00179783 0.00181107 0.00182401 0.00183669 0.00184913 0.00186137 0.00187342 0.00188532 0.00189706 0.00190868 0.00192019 0.00193161 0.00194294 0.00195422 0.00196544 0.00197664 -0.000594581 -0.000297489 1.32839E-06 0.000286933 0.000544602 0.000775057 0.00097901 0.00115718 0.00131031 0.00143921 0.00154487 0.00162861 0.00169249 0.00173983 0.0017752 0.00180311 0.00182666 0.00184752 0.00186658 0.00188434 0.00190111 0.00191709 0.00193245 0.00194729 0.00196169 0.00197571 0.00198942 0.00200284 0.00201602 0.00202897 0.00204173 0.00205431 0.00206673 0.00207902 0.00209119 0.00210326 0.00211525 0.00212717 0.00213905 -0.000607777 -0.000304334 1.72022E-06 0.000295513 0.000562105 0.000802173 0.00101638 0.00120539 0.00136989 0.00151061 0.00162837 0.00172425 0.00179975 0.00185731 0.00190059 0.00193407 0.00196153 0.00198536 0.00200681 0.0020266 0.00204515 0.00206272 0.00207951 0.00209567 0.00211129 0.00212646 0.00214124 0.00215568 0.00216982 0.0021837 0.00219735 0.00221079 0.00222404 0.00223712 0.00225006 0.00226288 0.00227558 0.0022882 0.00230076 -0.000619498 -0.00031034 2.2199E-06 0.00030343 0.000578168 0.000827064 0.00105074 0.00124981 0.00142491 0.0015767 0.00170591 0.00181341 0.0019004 0.00196863 0.0020209 0.00206109 0.0020933 0.0021206 0.00214479 0.00216685 0.00218735 0.00220665 0.00222499 0.00224256 0.00225948 0.00227585 0.00229176 0.00230727 0.00232242 0.00233726 0.00235183 0.00236614 0.00238024 0.00239414 0.00240786 0.00242143 0.00243487 0.00244819 0.00246143 -0.000629807 -0.00031553 2.8555E-06 0.000310776 0.000592937 0.000849932 0.00108234 0.00129074 0.00147571 0.00163786 0.00177784 0.00189641 0.00199451 0.00207349 0.00213541 0.00218338 0.0022213 0.00225271 0.00228004 0.00230465 0.00232732 0.0023485 0.00236853 0.00238761 0.00240592 0.00242357 0.00244067 0.00245729 0.0024735 0.00248934 0.00250485 0.00252007 0.00253504 0.00254976 0.00256429 0.00257863 0.00259281 0.00260685 0.00262078 -0.000638751 -0.000319917 3.66201E-06 0.000317641 0.000606559 0.000870974 0.00111143 0.00132846 0.00152261 0.00169445 0.00184455 0.00197358 0.00208233 0.00217186 0.00224372 0.00230029 0.00234488 0.00238118 0.00241215 0.00243963 0.00246469 0.00248795 0.0025098 0.00253052 0.00255031 0.00256932 0.00258768 0.00260548 0.00262278 0.00263966 0.00265616 0.00267232 0.00268817 0.00270376 0.0027191 0.00273423 0.00274916 0.00276393 0.00277857 -0.000646353 -0.000323494 4.68303E-06 0.000324121 0.00061918 0.000890386 0.00113825 0.00136327 0.00156595 0.00174682 0.0019064 0.0020453 0.00216418 0.00226392 0.00234571 0.00241134 0.00246347 0.00250549 0.00254068 0.00257144 0.00259917 0.00262469 0.00264853 0.00267101 0.0026924 0.00271286 0.00273256 0.00275159 0.00277005 0.00278801 0.00280553 0.00282266 0.00283944 0.00285591 0.00287209 0.00288802 0.00290373 0.00291925 0.00293459 -0.000652617 -0.000326241 5.97279E-06 0.000330317 0.000630946 0.000908358 0.00116303 0.00139543 0.00160603 0.00179531 0.00196378 0.00211195 0.00224044 0.00234996 0.00244146 0.00251632 0.0025766 0.00262515 0.00266527 0.00269975 0.00273045 0.00275848 0.00278448 0.00280887 0.00283197 0.00285398 0.00287509 0.00289543 0.00291511 0.00293421 0.0029528 0.00297093 0.00298867 0.00300604 0.00302309 0.00303985 0.00305636 0.00307263 0.0030887 -0.000657519 -0.000328117 7.59863E-06 0.00033634 0.000642012 0.000925086 0.00118601 0.00142522 0.00164316 0.00184029 0.00201705 0.00217394 0.00231149 0.00243032 0.00253121 0.00261524 0.00268399 0.00273976 0.00278552 0.00282427 0.00285831 0.00288908 0.00291744 0.0029439 0.00296883 0.00299251 0.00301513 0.00303685 0.00305781 0.0030781 0.0030978 0.00311699 0.00313572 0.00315403 0.00317198 0.00318959 0.00320691 0.00322396 0.00324078 -0.000661007 -0.000329059 9.64401E-06 0.000342313 0.000652538 0.000940768 0.00120742 0.00145291 0.00167765 0.00188207 0.00206659 0.00223164 0.00237773 0.00250539 0.00261528 0.00270826 0.00278558 0.00284903 0.0029011 0.00294472 0.00298252 0.00301632 0.00304724 0.00307593 0.00310285 0.0031283 0.00315253 0.00317573 0.00319804 0.00321958 0.00324045 0.00326074 0.00328049 0.00329979 0.00331866 0.00333715 0.0033553 0.00337315 0.00339073 -0.000662996 -0.000328977 1.22122E-05 0.000348374 0.000662699 0.000955614 0.00122751 0.00147878 0.00170982 0.00192101 0.00211275 0.00228546 0.00243958 0.00257558 0.00269404 0.00279568 0.00288148 0.00295283 0.00301175 0.00306086 0.00310289 0.00314005 0.00317376 0.00320486 0.0032339 0.00326126 0.0032872 0.00331196 0.0033357 0.00335857 0.00338067 0.0034021 0.00342293 0.00344323 0.00346306 0.00348246 0.00350148 0.00352015 0.00353851 *table -8.79182E-11 -4.74638E-11 -4.13054E-11 -4.03909E-11 -4.02686E-11 -4.02072E-11 -4.01532E-11 -4.0101E-11 -4.00492E-11 -3.99975E-11 -3.99456E-11 -3.98936E-11 -3.98413E-11 -3.97887E-11 -3.97359E-11 -3.96828E-11 -3.96293E-11 -3.95756E-11 -3.95216E-11 -3.94673E-11 -3.94127E-11 -3.93578E-11 -3.93026E-11 -3.92471E-11 -3.91912E-11 -3.9135E-11 -3.90785E-11 -3.90216E-11 -3.89642E-11 -3.89064E-11 -3.88481E-11 -3.87893E-11 -3.87298E-11 -3.86696E-11 -3.86086E-11 -3.85467E-11 -3.84837E-11 -3.84193E-11 -3.83534E-11 -2.60005E-10 -6.92673E-11 -3.99144E-11 -3.55274E-11 -3.49404E-11 -3.46461E-11 -3.43871E-11 -3.41364E-11 -3.3888E-11 -3.36398E-11 -3.33911E-11 -3.31414E-11 -3.28905E-11 -3.26384E-11 -3.2385E-11 -3.21301E-11 -3.18739E-11 -3.16163E-11 -3.13572E-11 -3.10968E-11 -3.08349E-11 -3.05716E-11 -3.03069E-11 -3.00407E-11 -2.9773E-11 -2.95037E-11 -2.92328E-11 -2.89602E-11 -2.86858E-11 -2.84093E-11 -2.81308E-11 -2.785E-11 -2.75666E-11 -2.72804E-11 -2.6991E-11 -2.6698E-11 -2.6401E-11 -2.60992E-11 -2.57919E-11 -1.06945E-09 -1.78921E-10 -3.95421E-11 -1.85285E-11 -1.57168E-11 -1.43071E-11 -1.30667E-11 -1.18659E-11 -1.06759E-11 -9.48714E-12 -8.29578E-12 -7.09987E-12 -5.8984E-12 -4.69082E-12 -3.47681E-12 -2.25621E-12 -1.02894E-12 2.05039E-13 1.44574E-12 2.69316E-12 3.94732E-12 5.20827E-12 6.47606E-12 7.75084E-12 9.03276E-12 1.03221E-11 1.16191E-11 1.29241E-11 1.42377E-11 1.55604E-11 1.68928E-11 1.82359E-11 1.95905E-11 2.09577E-11 2.2339E-11 2.3736E-11 2.51506E-11 2.65854E-11 2.80433E-11 -4.77113E-09 -6.95754E-10 -3.91501E-11 6.11779E-11 7.46021E-11 8.13326E-11 8.72543E-11 9.29872E-11 9.86686E-11 1.04344E-10 1.10031E-10 1.15741E-10 1.21477E-10 1.27242E-10 1.33037E-10 1.38864E-10 1.44723E-10 1.50614E-10 1.56537E-10 1.62492E-10 1.68479E-10 1.74498E-10 1.8055E-10 1.86635E-10 1.92753E-10 1.98907E-10 2.05097E-10 2.11325E-10 2.17593E-10 2.23903E-10 2.30259E-10 2.36664E-10 2.43121E-10 2.49637E-10 2.56215E-10 2.62864E-10 2.69591E-10 2.76406E-10 2.8332E-10 -2.10162E-08 -3.08083E-09 -3.74955E-11 4.38254E-10 5.01909E-10 5.33821E-10 5.61898E-10 5.89079E-10 6.16016E-10 6.42923E-10 6.69888E-10 6.96957E-10 7.24151E-10 7.51483E-10 7.7896E-10 8.06586E-10 8.34362E-10 8.62289E-10 8.90368E-10 9.18598E-10 9.4698E-10 9.75514E-10 1.0042E-09 1.03305E-09 1.06205E-09 1.09122E-09 1.12055E-09 1.15007E-09 1.17977E-09 1.20967E-09 1.23978E-09 1.27012E-09 1.3007E-09 1.33154E-09 1.36266E-09 1.39411E-09 1.42589E-09 1.45807E-09 1.49068E-09 -8.73039E-08 -1.36923E-08 -3.17969E-11 2.19248E-09 2.49008E-09 2.63924E-09 2.77047E-09 2.89751E-09 3.0234E-09 3.14915E-09 3.27517E-09 3.40167E-09 3.52875E-09 3.65648E-09 3.78488E-09 3.91398E-09 4.04377E-09 4.17427E-09 4.30547E-09 4.43738E-09 4.57E-09 4.70332E-09 4.83735E-09 4.97212E-09 5.10762E-09 5.24388E-09 5.38093E-09 5.51879E-09 5.65752E-09 5.79716E-09 5.93777E-09 6.0794E-09 6.22213E-09 6.36605E-09 6.51126E-09 6.65787E-09 6.806E-09 6.95583E-09 7.10752E-09 -3.29394E-07 -5.78516E-08 -2.807E-12 1.01059E-08 1.14586E-08 1.21361E-08 1.27321E-08 1.33089E-08 1.38805E-08 1.44514E-08 1.50236E-08 1.55979E-08 1.61748E-08 1.67546E-08 1.73375E-08 1.79234E-08 1.85126E-08 1.91049E-08 1.97004E-08 2.0299E-08 2.09009E-08 2.15059E-08 2.21142E-08 2.27257E-08 2.33405E-08 2.39588E-08 2.45805E-08 2.5206E-08 2.58353E-08 2.64687E-08 2.71063E-08 2.77486E-08 2.83957E-08 2.9048E-08 2.9706E-08 3.037E-08 3.10407E-08 3.17186E-08 3.24044E-08 -1.1028E-06 -2.2327E-07 1.53884E-10 4.37246E-08 4.95617E-08 5.24773E-08 5.50398E-08 5.75197E-08 5.99767E-08 6.24305E-08 6.48894E-08 6.73573E-08 6.98363E-08 7.23275E-08 7.48316E-08 7.7349E-08 7.98798E-08 8.2424E-08 8.49817E-08 8.75529E-08 9.01375E-08 9.27357E-08 9.53474E-08 9.7973E-08 1.00613E-07 1.03267E-07 1.05936E-07 1.0862E-07 1.11321E-07 1.14039E-07 1.16775E-07 1.1953E-07 1.22306E-07 1.25103E-07 1.27924E-07 1.3077E-07 1.33643E-07 1.36545E-07 1.3948E-07 -3.29815E-06 -7.6419E-07 6.33145E-10 1.72686E-07 1.95852E-07 2.07313E-07 2.17361E-07 2.27077E-07 2.367E-07 2.46308E-07 2.55934E-07 2.65594E-07 2.75295E-07 2.85043E-07 2.94841E-07 3.04689E-07 3.14588E-07 3.24538E-07 3.3454E-07 3.44594E-07 3.54698E-07 3.64855E-07 3.75063E-07 3.85325E-07 3.9564E-07 4.0601E-07 4.16437E-07 4.26924E-07 4.37473E-07 4.48087E-07 4.5877E-07 4.69525E-07 4.80359E-07 4.91275E-07 5.02279E-07 5.13378E-07 5.24579E-07 5.35889E-07 5.47317E-07 -9.01283E-06 -2.31299E-06 1.4567E-09 6.04786E-07 6.87486E-07 7.27206E-07 7.61755E-07 7.95085E-07 8.2806E-07 8.60965E-07 8.93917E-07 9.26973E-07 9.60164E-07 9.93505E-07 1.02701E-06 1.06067E-06 1.09451E-06 1.12851E-06 1.16268E-06 1.19702E-06 1.23154E-06 1.26622E-06 1.30107E-06 1.33609E-06 1.3713E-06 1.40668E-06 1.44226E-06 1.47802E-06 1.514E-06 1.55019E-06 1.58661E-06 1.62327E-06 1.66019E-06 1.69738E-06 1.73486E-06 1.77265E-06 1.81078E-06 1.84926E-06 1.88813E-06 -2.23726E-05 -6.28536E-06 2.59613E-09 1.86818E-06 2.13805E-06 2.25806E-06 2.36018E-06 2.45809E-06 2.55471E-06 2.65098E-06 2.7473E-06 2.84385E-06 2.94075E-06 3.03803E-06 3.13574E-06 3.2339E-06 3.3325E-06 3.43157E-06 3.5311E-06 3.63108E-06 3.73154E-06 3.83245E-06 3.93384E-06 4.0357E-06 4.13806E-06 4.24091E-06 4.34429E-06 4.44822E-06 4.55272E-06 4.65782E-06 4.76355E-06 4.86997E-06 4.97711E-06 5.08501E-06 5.19374E-06 5.30334E-06 5.41387E-06 5.52541E-06 5.63801E-06 -4.8349E-05 -1.51462E-05 4.12149E-09 5.17307E-06 6.03183E-06 6.35765E-06 6.62022E-06 6.86811E-06 7.11122E-06 7.35267E-06 7.59376E-06 7.83508E-06 8.07698E-06 8.31964E-06 8.56317E-06 8.80763E-06 9.05307E-06 9.29951E-06 9.54696E-06 9.79543E-06 1.00449E-05 1.02955E-05 1.05471E-05 1.07997E-05 1.10535E-05 1.13085E-05 1.15646E-05 1.1822E-05 1.20807E-05 1.23409E-05 1.26025E-05 1.28658E-05 1.31308E-05 1.33976E-05 1.36663E-05 1.39372E-05 1.42103E-05 1.44859E-05 1.47639E-05 -8.79436E-05 -3.09921E-05 6.21675E-09 1.27853E-05 1.5589E-05 1.64402E-05 1.70455E-05 1.75968E-05 1.813E-05 1.8656E-05 1.91791E-05 1.97011E-05 2.02234E-05 2.07463E-05 2.12704E-05 2.17959E-05 2.23229E-05 2.28516E-05 2.33819E-05 2.3914E-05 2.44479E-05 2.49836E-05 2.55212E-05 2.60607E-05 2.66023E-05 2.7146E-05 2.76919E-05 2.82403E-05 2.87912E-05 2.93449E-05 2.99016E-05 3.04615E-05 3.10248E-05 3.15919E-05 3.21629E-05 3.27383E-05 3.33184E-05 3.39034E-05 3.44937E-05 -0.000136186 -5.3096E-05 9.19876E-09 2.70467E-05 3.57184E-05 3.80589E-05 3.93671E-05 4.0467E-05 4.15005E-05 4.25062E-05 4.34983E-05 4.44836E-05 4.54655E-05 4.64461E-05 4.74265E-05 4.84075E-05 4.93898E-05 5.03737E-05 5.13593E-05 5.2347E-05 5.33369E-05 5.43291E-05 5.53237E-05 5.6321E-05 5.73211E-05 5.83244E-05 5.93309E-05 6.03412E-05 6.13554E-05 6.23741E-05 6.33977E-05 6.44267E-05 6.54615E-05 6.65027E-05 6.75509E-05 6.86067E-05 6.96708E-05 7.07438E-05 7.18263E-05 -0.000187131 -7.85719E-05 1.35042E-08 4.78314E-05 6.94284E-05 7.62251E-05 7.90687E-05 8.11082E-05 8.29166E-05 8.46321E-05 8.63015E-05 8.79452E-05 8.95737E-05 9.11927E-05 9.28061E-05 9.4416E-05 9.60241E-05 9.76314E-05 9.92388E-05 0.000100847 0.000102456 0.000104067 0.000105679 0.000107294 0.000108911 0.000110532 0.000112157 0.000113785 0.000115419 0.000117059 0.000118705 0.000120359 0.000122021 0.000123692 0.000125374 0.000127068 0.000128774 0.000130494 0.000132229 -0.00023716 -0.000104767 1.9663E-08 7.25031E-05 0.000113731 0.000131133 0.000137686 0.000141401 0.000144364 0.000147051 0.000149609 0.000152094 0.000154535 0.000156947 0.000159338 0.000161716 0.000164084 0.000166444 0.000168799 0.000171151 0.0001735 0.000175847 0.000178193 0.000180539 0.000182886 0.000185235 0.000187586 0.000189941 0.0001923 0.000194666 0.000197039 0.00019942 0.000201813 0.000204217 0.000206634 0.000209067 0.000211517 0.000213986 0.000216476 -0.000284605 -0.000130133 2.8313E-08 9.8296E-05 0.000162592 0.000197248 0.000212122 0.000219125 0.000223874 0.000227876 0.000231554 0.00023506 0.000238461 0.000241793 0.000245077 0.000248327 0.00025155 0.000254754 0.000257942 0.000261117 0.000264282 0.00026744 0.00027059 0.000273736 0.000276878 0.000280018 0.000283157 0.000286297 0.00028944 0.000292587 0.000295741 0.000298904 0.000302077 0.000305264 0.000308466 0.000311687 0.000314929 0.000318195 0.000321487 -0.000328825 -0.000153971 4.02565E-08 0.000123496 0.00021163 0.000267272 0.000296358 0.000309919 0.000317666 0.000323517 0.00032862 0.00033335 0.000337864 0.000342238 0.000346515 0.000350722 0.000354877 0.00035899 0.00036307 0.000367124 0.000371155 0.000375168 0.000379166 0.00038315 0.000387123 0.000391088 0.000395046 0.000399001 0.000402954 0.000406907 0.000410865 0.000414829 0.000418804 0.000422791 0.000426795 0.000430819 0.000434867 0.000438942 0.000443047 -0.000369662 -0.00017604 5.65272E-08 0.000147298 0.00025866 0.000336289 0.000383768 0.000408613 0.000421659 0.000430288 0.000437266 0.000443491 0.000449301 0.000454853 0.000460228 0.000465478 0.000470633 0.000475714 0.000480737 0.000485712 0.000490648 0.000495549 0.000500422 0.00050527 0.000510097 0.000514907 0.000519701 0.000524484 0.000529259 0.000534029 0.000538798 0.000543569 0.000548348 0.000553138 0.000557943 0.000562768 0.000567618 0.000572498 0.000577412 -0.000407173 -0.000196308 7.84633E-08 0.000169405 0.000302782 0.000401998 0.000469501 0.000509884 0.000531793 0.000544843 0.000554425 0.000562531 0.000569879 0.000576775 0.000583373 0.000589761 0.000595992 0.000602103 0.000608119 0.000614058 0.000619932 0.000625751 0.000631525 0.000637257 0.000642955 0.000648622 0.000654264 0.000659884 0.000665487 0.000671077 0.000676658 0.000682237 0.000687817 0.000693404 0.000699004 0.000704622 0.000710264 0.000715936 0.000721644 -0.000441508 -0.000214837 1.07792E-07 0.000189764 0.000343711 0.000463519 0.000551073 0.000609316 0.000643969 0.000664044 0.000677431 0.000688001 0.000697222 0.000705681 0.000713657 0.000721298 0.000728695 0.000735906 0.000742972 0.00074992 0.00075677 0.000763539 0.000770237 0.000776876 0.000783461 0.00079 0.000796499 0.000802963 0.000809399 0.000815811 0.000822206 0.000828588 0.000834966 0.000841344 0.00084773 0.00085413 0.000860551 0.000867002 0.000873488 -0.000472858 -0.000231725 1.46732E-07 0.000208425 0.000381442 0.000520613 0.000627507 0.000704222 0.000754401 0.000784743 0.000803824 0.000817761 0.000829331 0.000839647 0.000849198 0.000858237 0.000866909 0.000875305 0.000883487 0.000891497 0.000899368 0.000907121 0.000914774 0.000922341 0.000929832 0.000937258 0.000944626 0.000951944 0.000959218 0.000966455 0.000973663 0.000980849 0.000988019 0.000995182 0.00100235 0.00100952 0.00101671 0.00102392 0.00103117 -0.000501421 -0.00024708 1.98122E-07 0.000225485 0.000416097 0.000573328 0.000698546 0.000793396 0.000860336 0.000903829 0.000931152 0.000949836 0.000964454 0.000977024 0.000988409 0.000999026 0.00100911 0.00101879 0.00102817 0.00103731 0.00104625 0.00105503 0.00106367 0.00107219 0.00108061 0.00108894 0.00109719 0.00110538 0.0011135 0.00112156 0.00112959 0.00113758 0.00114554 0.00115348 0.00116142 0.00116935 0.00117729 0.00118526 0.00119325 -0.000527396 -0.000261013 2.65584E-07 0.000241056 0.000447851 0.000621842 0.000764256 0.000876468 0.00096029 0.00101869 0.00105692 0.00108228 0.00110097 0.00111635 0.00112991 0.00114233 0.00115399 0.00116509 0.00117576 0.0011861 0.00119618 0.00120603 0.0012157 0.00122521 0.00123459 0.00124384 0.001253 0.00126206 0.00127103 0.00127994 0.00128878 0.00129758 0.00130633 0.00131505 0.00132375 0.00133244 0.00134113 0.00134983 0.00135856 -0.000550973 -0.000273627 3.5372E-07 0.000255252 0.000476897 0.000666391 0.00082485 0.000953472 0.0010537 0.00112761 0.0011788 0.00121311 0.00123732 0.00125629 0.00127247 0.00128699 0.00130043 0.00131309 0.00132517 0.00133681 0.00134809 0.00135908 0.00136983 0.00138037 0.00139073 0.00140094 0.00141101 0.00142097 0.00143082 0.00144057 0.00145024 0.00145985 0.00146939 0.00147889 0.00148835 0.00149779 0.00150722 0.00151666 0.0015261 -0.000572328 -0.000285019 4.68366E-07 0.000268187 0.000503435 0.000707234 0.000880608 0.00102463 0.0011405 0.00122981 0.00129503 0.00134037 0.00137192 0.00139555 0.00141496 0.00143196 0.00144742 0.00146184 0.00147547 0.00148851 0.00150109 0.00151328 0.00152516 0.00153677 0.00154816 0.00155936 0.00157038 0.00158125 0.00159198 0.0016026 0.00161311 0.00162353 0.00163387 0.00164415 0.00165438 0.00166457 0.00167473 0.00168489 0.00169505 -0.000591625 -0.000295279 6.16907E-07 0.000279972 0.000527661 0.000744634 0.000931836 0.00109024 0.00122089 0.00132508 0.00140458 0.00146235 0.00150314 0.00153286 0.00155632 0.00157627 0.00159409 0.00161047 0.00162583 0.0016404 0.00165437 0.00166785 0.00168093 0.00169367 0.00170613 0.00171835 0.00173035 0.00174216 0.0017538 0.00176529 0.00177666 0.00178791 0.00179906 0.00181012 0.00182111 0.00183205 0.00184295 0.00185382 0.00186468 -0.000609012 -0.000304485 8.0866E-07 0.000290712 0.000549764 0.000778851 0.000978847 0.00115064 0.00129518 0.00141352 0.00150707 0.00157791 0.0016295 0.00166692 0.00169551 0.00171905 0.00173962 0.00175824 0.00177552 0.00179178 0.00180726 0.00182212 0.00183648 0.00185041 0.00186399 0.00187727 0.00189028 0.00190306 0.00191564 0.00192803 0.00194027 0.00195236 0.00196432 0.00197618 0.00198794 0.00199963 0.00201126 0.00202285 0.00203441 -0.000624621 -0.000312706 1.05536E-06 0.000300508 0.000569926 0.000810136 0.00102195 0.00120619 0.0013637 0.00149543 0.00160249 0.00168646 0.00174982 0.00179647 0.00183149 0.00185945 0.00188326 0.00190446 0.00192388 0.00194201 0.00195914 0.00197549 0.00199122 0.00200642 0.00202118 0.00203557 0.00204964 0.00206342 0.00207696 0.00209028 0.0021034 0.00211635 0.00212914 0.0021418 0.00215435 0.00216679 0.00217916 0.00219146 0.00220373 -0.00063857 -0.000320001 1.37176E-06 0.000309456 0.000588319 0.000838731 0.00106145 0.00125723 0.00142686 0.00157115 0.00169108 0.00178788 0.00186335 0.00192038 0.00196322 0.00199662 0.0020243 0.00204848 0.00207034 0.00209054 0.00210948 0.00212746 0.00214465 0.0021612 0.00217721 0.00219277 0.00220794 0.00222277 0.0022373 0.00225157 0.00226561 0.00227943 0.00229307 0.00230655 0.00231988 0.00233309 0.0023462 0.00235923 0.00237219 -0.000650957 -0.000326418 1.77636E-06 0.000317652 0.000605108 0.000864865 0.00109763 0.0013041 0.001485 0.00164108 0.00177317 0.00188229 0.00196982 0.00203787 0.00208972 0.00212972 0.00216208 0.00218974 0.00221436 0.00223687 0.00225781 0.00227755 0.00229633 0.00231432 0.00233166 0.00234846 0.00236478 0.0023807 0.00239627 0.00241152 0.0024265 0.00244123 0.00245573 0.00247004 0.00248418 0.00249817 0.00251203 0.00252578 0.00253944 -0.000661866 -0.000331992 2.29233E-06 0.000325188 0.000620452 0.000888759 0.00113077 0.00134713 0.00153852 0.00170561 0.00184915 0.00196999 0.00206925 0.00214851 0.00221022 0.00225796 0.00229592 0.00232767 0.00235545 0.00238055 0.00240371 0.00242537 0.00244587 0.00246541 0.00248417 0.00250228 0.00251982 0.00253688 0.00255353 0.0025698 0.00258575 0.0026014 0.0026168 0.00263196 0.00264692 0.0026617 0.00267632 0.0026908 0.00270518 -0.000671361 -0.000336749 2.94864E-06 0.000332156 0.000634503 0.000910623 0.00116113 0.00138664 0.00158776 0.00176512 0.0019194 0.00205134 0.00216186 0.0022522 0.00232418 0.0023806 0.00242517 0.00246174 0.00249317 0.00252118 0.00254679 0.00257057 0.00259293 0.00261415 0.00263442 0.00265392 0.00267275 0.00269102 0.00270878 0.00272612 0.00274308 0.00275969 0.002776 0.00279204 0.00280784 0.00282342 0.00283881 0.00285404 0.00286914 -0.000679489 -0.000340697 3.78143E-06 0.000338651 0.000647413 0.000930662 0.00118897 0.00142292 0.00163307 0.00182001 0.00198434 0.00212674 0.00224799 0.00234908 0.00243141 0.0024971 0.00254922 0.00259144 0.00262708 0.00265839 0.00268671 0.00271282 0.00273721 0.00276024 0.00278215 0.00280313 0.00282332 0.00284285 0.0028618 0.00288025 0.00289825 0.00291586 0.00293311 0.00295005 0.00296671 0.00298312 0.0029993 0.00301529 0.00303111 -0.000686273 -0.000343833 4.8357E-06 0.00034477 0.000659331 0.000949076 0.00121454 0.00145627 0.00167478 0.00187063 0.00204437 0.00219661 0.00232801 0.00243942 0.00253194 0.00260718 0.00266755 0.00271627 0.00275679 0.00279185 0.00282319 0.00285185 0.00287846 0.00290344 0.0029271 0.00294967 0.00297132 0.00299218 0.00301237 0.00303198 0.00305108 0.00306971 0.00308795 0.00310581 0.00312336 0.00314061 0.00315761 0.00317437 0.00319094 -0.000691716 -0.000346133 6.16746E-06 0.000350619 0.000670408 0.000966062 0.00123808 0.00148698 0.00171323 0.00191737 0.00209989 0.00226134 0.00240234 0.00252358 0.00262597 0.00271078 0.00277984 0.00283581 0.00288192 0.00292123 0.00295596 0.00298742 0.00301645 0.00304355 0.0030691 0.00309336 0.00311655 0.00313884 0.00316034 0.00318117 0.0032014 0.00322111 0.00324036 0.00325919 0.00327765 0.00329577 0.00331359 0.00333115 0.00334848 -0.000695793 -0.000347555 7.84621E-06 0.000356311 0.000680802 0.00098182 0.00125984 0.00151532 0.00174874 0.00196056 0.00215127 0.00232136 0.00247138 0.00260195 0.00271383 0.00280801 0.00288594 0.0029497 0.00300212 0.00304628 0.00308478 0.00311933 0.00315099 0.00318038 0.00320796 0.00323405 0.00325889 0.00328268 0.00330556 0.00332767 0.0033491 0.00336993 0.00339023 0.00341006 0.00342946 0.00344848 0.00346716 0.00348554 0.00350364 -0.000698447 -0.000348033 9.95811E-06 0.000361971 0.000690679 0.000996555 0.00128004 0.00154158 0.00178161 0.00200057 0.0021989 0.00237708 0.00253558 0.00267497 0.00279588 0.00289915 0.0029859 0.00305779 0.00311711 0.00316673 0.00320946 0.00324742 0.00328193 0.0033138 0.00334356 0.0033716 0.00339821 0.00342359 0.00344795 0.00347141 0.00349409 0.00351609 0.00353749 0.00355835 0.00357874 0.00359868 0.00361824 0.00363746 0.00365636 -0.000699591 -0.000347473 1.26098E-05 0.000367743 0.000700216 0.00101048 0.00129895 0.00156605 0.00181217 0.00203774 0.00224318 0.0024289 0.00259536 0.00274305 0.00287255 0.00298454 0.00307994 0.00316005 0.00322669 0.00328236 0.00332984 0.00337155 0.00340916 0.0034437 0.00347582 0.00350595 0.00353443 0.00356152 0.00358742 0.00361231 0.00363632 0.00365955 0.00368209 0.00370403 0.00372543 0.00374634 0.00376681 0.00378688 0.0038066 *table -2.05703E-10 -4.56135E-11 -2.094E-11 -1.72497E-11 -1.67573E-11 -1.65099E-11 -1.62922E-11 -1.60815E-11 -1.58728E-11 -1.56643E-11 -1.54554E-11 -1.52457E-11 -1.5035E-11 -1.48232E-11 -1.46103E-11 -1.43963E-11 -1.41811E-11 -1.39647E-11 -1.37471E-11 -1.35283E-11 -1.33084E-11 -1.30872E-11 -1.28649E-11 -1.26412E-11 -1.24163E-11 -1.21901E-11 -1.19624E-11 -1.17333E-11 -1.15026E-11 -1.12701E-11 -1.10358E-11 -1.07994E-11 -1.05606E-11 -1.03193E-11 -1.00751E-11 -9.82744E-12 -9.57589E-12 -9.31975E-12 -9.05819E-12 -8.69028E-10 -1.34565E-10 -1.9549E-11 -2.1956E-12 1.19883E-13 1.28344E-12 2.30698E-12 3.29763E-12 4.2792E-12 5.25956E-12 6.24203E-12 7.2282E-12 8.21892E-12 9.21466E-12 1.02157E-11 1.12221E-11 1.22341E-11 1.32515E-11 1.42746E-11 1.53031E-11 1.63373E-11 1.7377E-11 1.84224E-11 1.94736E-11 2.05308E-11 2.15941E-11 2.26638E-11 2.37403E-11 2.4824E-11 2.59154E-11 2.70152E-11 2.8124E-11 2.92428E-11 3.03726E-11 3.15148E-11 3.2671E-11 3.38431E-11 3.50336E-11 3.62454E-11 -3.86648E-09 -5.51885E-10 -1.91767E-11 6.22082E-11 7.30674E-11 7.85241E-11 8.33241E-11 8.79699E-11 9.2573E-11 9.71705E-11 1.01778E-10 1.06402E-10 1.11049E-10 1.15718E-10 1.20412E-10 1.25132E-10 1.29877E-10 1.34649E-10 1.39446E-10 1.44269E-10 1.49118E-10 1.53993E-10 1.58895E-10 1.63824E-10 1.6878E-10 1.73765E-10 1.7878E-10 1.83826E-10 1.88904E-10 1.94018E-10 1.9917E-10 2.04362E-10 2.09599E-10 2.14884E-10 2.20224E-10 2.25624E-10 2.31093E-10 2.36638E-10 2.42273E-10 -1.69369E-08 -2.45367E-09 -1.87866E-11 3.60763E-10 4.11405E-10 4.36851E-10 4.59235E-10 4.80898E-10 5.02363E-10 5.23801E-10 5.45285E-10 5.6685E-10 5.88514E-10 6.10287E-10 6.32175E-10 6.54182E-10 6.76308E-10 6.98555E-10 7.20923E-10 7.43411E-10 7.6602E-10 7.88751E-10 8.11604E-10 8.34582E-10 8.57688E-10 8.80926E-10 9.043E-10 9.27817E-10 9.51485E-10 9.75314E-10 9.99313E-10 1.0235E-09 1.04788E-09 1.07248E-09 1.09732E-09 1.12242E-09 1.14781E-09 1.17354E-09 1.19964E-09 -7.05138E-08 -1.08581E-08 -1.71567E-11 1.73256E-09 1.96602E-09 2.0833E-09 2.18647E-09 2.28631E-09 2.38523E-09 2.48403E-09 2.58304E-09 2.68242E-09 2.78225E-09 2.88259E-09 2.98345E-09 3.08486E-09 3.18682E-09 3.28934E-09 3.3924E-09 3.49602E-09 3.6002E-09 3.70493E-09 3.81023E-09 3.91609E-09 4.02254E-09 4.12959E-09 4.23727E-09 4.34559E-09 4.4546E-09 4.56433E-09 4.67483E-09 4.78616E-09 4.89837E-09 5.01155E-09 5.12577E-09 5.24114E-09 5.35778E-09 5.47582E-09 5.59544E-09 -2.69481E-07 -4.59752E-08 -1.17066E-11 7.8694E-09 8.92103E-09 9.44906E-09 9.91343E-09 1.03628E-08 1.08081E-08 1.12527E-08 1.16983E-08 1.21456E-08 1.25948E-08 1.30464E-08 1.35002E-08 1.39566E-08 1.44154E-08 1.48766E-08 1.53404E-08 1.58066E-08 1.62753E-08 1.67464E-08 1.72201E-08 1.76964E-08 1.81752E-08 1.86567E-08 1.9141E-08 1.96282E-08 2.01184E-08 2.06118E-08 2.11086E-08 2.1609E-08 2.21133E-08 2.26218E-08 2.31347E-08 2.36526E-08 2.41759E-08 2.47051E-08 2.52408E-08 -9.20344E-07 -1.79674E-07 1.51454E-11 3.39839E-08 3.85201E-08 4.07932E-08 4.27911E-08 4.47242E-08 4.66392E-08 4.85516E-08 5.04678E-08 5.23909E-08 5.43228E-08 5.62641E-08 5.82156E-08 6.01773E-08 6.21495E-08 6.41323E-08 6.61255E-08 6.81293E-08 7.01437E-08 7.21686E-08 7.42042E-08 7.62505E-08 7.8308E-08 8.03767E-08 8.24572E-08 8.45499E-08 8.66554E-08 8.87744E-08 9.09076E-08 9.3056E-08 9.52206E-08 9.74026E-08 9.96032E-08 1.01824E-07 1.04067E-07 1.06333E-07 1.08626E-07 -2.80821E-06 -6.28196E-07 1.58727E-10 1.35952E-07 1.54151E-07 1.63206E-07 1.7115E-07 1.78831E-07 1.86439E-07 1.94034E-07 2.01643E-07 2.09279E-07 2.16948E-07 2.24654E-07 2.32399E-07 2.40185E-07 2.48011E-07 2.55878E-07 2.63786E-07 2.71735E-07 2.79725E-07 2.87756E-07 2.95828E-07 3.03943E-07 3.121E-07 3.20302E-07 3.28549E-07 3.36843E-07 3.45187E-07 3.53583E-07 3.62035E-07 3.70544E-07 3.79117E-07 3.87755E-07 3.96466E-07 4.05253E-07 4.14122E-07 4.23082E-07 4.32138E-07 -7.80612E-06 -1.94749E-06 5.98653E-10 4.87773E-07 5.53935E-07 5.86114E-07 6.14173E-07 6.41257E-07 6.68057E-07 6.94801E-07 7.21586E-07 7.48456E-07 7.75438E-07 8.02543E-07 8.2978E-07 8.57153E-07 8.84665E-07 9.12315E-07 9.40104E-07 9.68032E-07 9.96099E-07 1.02431E-06 1.05265E-06 1.08115E-06 1.10978E-06 1.13857E-06 1.16751E-06 1.19662E-06 1.22589E-06 1.25534E-06 1.28498E-06 1.31482E-06 1.34487E-06 1.37514E-06 1.40566E-06 1.43643E-06 1.46749E-06 1.49884E-06 1.53051E-06 -1.98008E-05 -5.41477E-06 1.36291E-09 1.548E-06 1.76694E-06 1.86701E-06 1.95279E-06 2.03518E-06 2.11652E-06 2.19761E-06 2.27875E-06 2.3601E-06 2.44175E-06 2.52374E-06 2.6061E-06 2.68884E-06 2.77197E-06 2.8555E-06 2.93942E-06 3.02374E-06 3.10846E-06 3.19357E-06 3.27909E-06 3.36503E-06 3.45138E-06 3.53816E-06 3.62539E-06 3.71309E-06 3.80127E-06 3.88998E-06 3.97923E-06 4.06906E-06 4.1595E-06 4.25061E-06 4.34242E-06 4.43497E-06 4.52834E-06 4.62256E-06 4.71771E-06 -4.42139E-05 -1.34396E-05 2.44598E-09 4.39229E-06 5.08678E-06 5.36383E-06 5.59112E-06 5.8067E-06 6.01849E-06 6.22902E-06 6.43933E-06 6.64993E-06 6.8611E-06 7.07298E-06 7.28567E-06 7.49921E-06 7.71365E-06 7.92899E-06 8.14525E-06 8.36243E-06 8.58055E-06 8.7996E-06 9.01961E-06 9.24059E-06 9.46256E-06 9.68557E-06 9.90966E-06 1.01349E-05 1.03613E-05 1.05889E-05 1.08179E-05 1.10484E-05 1.12803E-05 1.15139E-05 1.17492E-05 1.19864E-05 1.22256E-05 1.24669E-05 1.27105E-05 -8.35766E-05 -2.86152E-05 3.95074E-09 1.11735E-05 1.34205E-05 1.41432E-05 1.46784E-05 1.51713E-05 1.565E-05 1.61231E-05 1.65941E-05 1.70645E-05 1.75353E-05 1.80071E-05 1.848E-05 1.89544E-05 1.94302E-05 1.99077E-05 2.03868E-05 2.08676E-05 2.13501E-05 2.18344E-05 2.23205E-05 2.28084E-05 2.32983E-05 2.37902E-05 2.42841E-05 2.47804E-05 2.5279E-05 2.57802E-05 2.62842E-05 2.67911E-05 2.73013E-05 2.78148E-05 2.83321E-05 2.88533E-05 2.93788E-05 2.99088E-05 3.04437E-05 -0.000133781 -5.09804E-05 6.09775E-09 2.46018E-05 3.17245E-05 3.36629E-05 3.48285E-05 3.58336E-05 3.67862E-05 3.77166E-05 3.86366E-05 3.95514E-05 4.04639E-05 4.13759E-05 4.22883E-05 4.32018E-05 4.41168E-05 4.50337E-05 4.59526E-05 4.68736E-05 4.7797E-05 4.87229E-05 4.96512E-05 5.05823E-05 5.15163E-05 5.24534E-05 5.33938E-05 5.43379E-05 5.52859E-05 5.62382E-05 5.71953E-05 5.81575E-05 5.91253E-05 6.00993E-05 6.10799E-05 6.20678E-05 6.30635E-05 6.40676E-05 6.50808E-05 -0.000188164 -7.77476E-05 9.21936E-09 4.53636E-05 6.42395E-05 6.98154E-05 7.23169E-05 7.4202E-05 7.59031E-05 7.75283E-05 7.91156E-05 8.06819E-05 8.22361E-05 8.37831E-05 8.53259E-05 8.68666E-05 8.84065E-05 8.99465E-05 9.14872E-05 9.30293E-05 9.4573E-05 9.61187E-05 9.76667E-05 9.92175E-05 0.000100771 0.000102329 0.00010389 0.000105456 0.000107027 0.000108604 0.000110188 0.000111779 0.000113379 0.000114988 0.000116608 0.000118238 0.000119881 0.000121538 0.000123209 -0.000242178 -0.00010584 1.37387E-08 7.10848E-05 0.000109425 0.000124371 0.000130019 0.000133439 0.000136256 0.000138844 0.000141322 0.000143738 0.000146115 0.000148468 0.000150804 0.000153128 0.000155445 0.000157756 0.000160063 0.000162368 0.000164671 0.000166974 0.000169276 0.00017158 0.000173885 0.000176192 0.000178503 0.000180817 0.000183138 0.000185464 0.000187799 0.000190143 0.000192497 0.000194864 0.000197244 0.00019964 0.000202053 0.000204486 0.000206939 -0.000293615 -0.0001333 2.01702E-08 9.8629E-05 0.000161038 0.000192749 0.000205712 0.000212056 0.000216569 0.000220456 0.000224061 0.000227514 0.000230874 0.000234172 0.000237428 0.000240653 0.000243855 0.00024704 0.000250212 0.000253373 0.000256526 0.000259672 0.000262813 0.00026595 0.000269084 0.000272218 0.000275352 0.000278488 0.000281628 0.000284773 0.000287926 0.000291088 0.000294262 0.00029745 0.000300654 0.000303878 0.000307123 0.000310392 0.000313688 -0.000341592 -0.000159192 2.91572E-08 0.000125846 0.000213704 0.000267095 0.000293552 0.000305741 0.000313026 0.000318711 0.000323742 0.000328438 0.000332937 0.000337307 0.000341589 0.000345807 0.000349976 0.000354108 0.00035821 0.000362288 0.000366347 0.000370388 0.000374416 0.000378432 0.000382439 0.000386439 0.000390434 0.000394426 0.000398418 0.000402412 0.000406411 0.000410419 0.000414437 0.00041847 0.00042252 0.000426592 0.000430688 0.000434813 0.00043897 -0.000385858 -0.000183167 4.15262E-08 0.000151663 0.000264555 0.000341295 0.00038639 0.00040912 0.000421234 0.000429561 0.000436446 0.000442649 0.00044847 0.00045405 0.000459465 0.000464762 0.00046997 0.000475109 0.000480194 0.000485234 0.000490237 0.000495209 0.000500154 0.000505076 0.000509979 0.000514866 0.000519739 0.000524603 0.00052946 0.000534314 0.000539169 0.000544028 0.000548896 0.000553776 0.000558673 0.000563593 0.000568538 0.000573515 0.000578527 -0.000426445 -0.000205158 5.83485E-08 0.000175656 0.000312354 0.00041227 0.000478394 0.000516514 0.00053686 0.000549311 0.000558724 0.000566806 0.000574186 0.000581141 0.000587813 0.000594284 0.000600606 0.000606814 0.000612931 0.000618974 0.000624957 0.000630887 0.000636774 0.000642622 0.000648438 0.000654224 0.000659987 0.00066573 0.000671458 0.000677175 0.000682885 0.000688594 0.000694306 0.000700028 0.000705764 0.000711521 0.000717303 0.000723118 0.000728972 -0.000463513 -0.000225221 8.10101E-08 0.000197724 0.000356678 0.000478788 0.000566302 0.000622872 0.000655583 0.000674588 0.000687626 0.000698137 0.000707401 0.000715945 0.000724027 0.000731787 0.000739311 0.000746657 0.000753862 0.000760953 0.000767951 0.00077487 0.000781722 0.000788515 0.000795258 0.000801957 0.000808617 0.000815245 0.000821846 0.000828425 0.000834989 0.000841543 0.000848094 0.000854647 0.000861211 0.000867792 0.000874397 0.000881034 0.000887709 -0.000497271 -0.000243462 1.11298E-07 0.000217908 0.000397477 0.000540473 0.000648745 0.000724832 0.000773268 0.000802098 0.000820508 0.000834284 0.000845888 0.000856308 0.000865996 0.000875187 0.000884021 0.000892587 0.000900945 0.000909137 0.000917192 0.000925133 0.000932976 0.000940736 0.000948424 0.000956047 0.000963614 0.000971133 0.000978611 0.000986054 0.000993469 0.00100086 0.00100825 0.00101562 0.00102301 0.0010304 0.00103781 0.00104525 0.00105273 -0.000527945 -0.000260004 1.51505E-07 0.00023631 0.000434868 0.000597336 0.000725314 0.000820753 0.000886664 0.000928554 0.00095481 0.000973128 0.00098773 0.00100041 0.00101196 0.00102276 0.00103304 0.00104293 0.00105252 0.00106187 0.00107103 0.00108004 0.0010889 0.00109766 0.00110631 0.00111487 0.00112336 0.00113178 0.00114014 0.00114845 0.00115671 0.00116495 0.00117316 0.00118135 0.00118954 0.00119773 0.00120593 0.00121416 0.00122242 -0.00055576 -0.000274973 2.04564E-07 0.000253051 0.000469039 0.000649555 0.000796028 0.000910069 0.000993852 0.00105103 0.00108795 0.00111264 0.0011312 0.00114667 0.00116041 0.00117305 0.00118493 0.00119627 0.00120719 0.00121778 0.00122811 0.00123822 0.00124815 0.00125793 0.00126757 0.00127709 0.00128651 0.00129584 0.00130509 0.00131427 0.00132339 0.00133247 0.0013415 0.00135051 0.00135949 0.00136847 0.00137746 0.00138646 0.00139549 -0.000580933 -0.000288487 2.74214E-07 0.00026826 0.000500205 0.000697387 0.000861103 0.000992746 0.00109402 0.00116745 0.00121742 0.00125078 0.00127465 0.00129365 0.00131001 0.00132478 0.00133848 0.00135141 0.00136377 0.00137569 0.00138726 0.00139854 0.00140958 0.00142042 0.00143108 0.00144158 0.00145196 0.00146222 0.00147237 0.00148243 0.00149241 0.00150232 0.00151218 0.001522 0.00153178 0.00154154 0.0015513 0.00156106 0.00157084 -0.000603666 -0.000300661 3.65207E-07 0.000282065 0.000528587 0.000741117 0.000920841 0.001069 0.001187 0.00127673 0.0013412 0.00138549 0.00141645 0.00143999 0.00145957 0.00147682 0.00149259 0.00150731 0.00152125 0.00153461 0.0015475 0.00156002 0.00157222 0.00158416 0.00159588 0.0016074 0.00161876 0.00162996 0.00164103 0.00165198 0.00166283 0.00167359 0.00168428 0.0016949 0.00170547 0.00171601 0.00172653 0.00173705 0.00174757 -0.000624148 -0.000311596 4.8357E-07 0.000294588 0.000554406 0.000781039 0.000975579 0.00113915 0.00127296 0.00137852 0.00145799 0.00151493 0.00155495 0.00158439 0.00160795 0.00162817 0.00164631 0.00166304 0.00167874 0.00169367 0.00170799 0.00172182 0.00173525 0.00174835 0.00176117 0.00177374 0.0017861 0.00179827 0.00181028 0.00182214 0.00183387 0.00184548 0.001857 0.00186843 0.0018798 0.00189112 0.0019024 0.00191365 0.00192491 -0.000642551 -0.000321387 6.36924E-07 0.000305944 0.000577872 0.000817442 0.00102567 0.00120357 0.00135223 0.00147289 0.00156722 0.00163773 0.00168858 0.00172553 0.0017541 0.00177789 0.00179879 0.0018178 0.00183545 0.0018521 0.00186797 0.00188321 0.00189796 0.00191228 0.00192624 0.00193991 0.00195331 0.00196648 0.00197944 0.00199223 0.00200485 0.00201733 0.00202969 0.00204194 0.00205411 0.0020662 0.00207824 0.00209024 0.00210222 -0.000659029 -0.000330115 8.3489E-07 0.000316245 0.000599185 0.000850605 0.00107144 0.00126264 0.00142517 0.00156012 0.00166881 0.0017531 0.00181599 0.00186209 0.00189694 0.00192508 0.00194924 0.00197085 0.0019907 0.00200925 0.0020268 0.00204357 0.00205971 0.00207532 0.0020905 0.00210531 0.00211979 0.00213399 0.00214794 0.00216167 0.00217521 0.00218858 0.00220179 0.00221487 0.00222784 0.00224071 0.0022535 0.00226624 0.00227895 -0.000673721 -0.000337852 1.08958E-06 0.000325597 0.000618537 0.000880796 0.00111324 0.00131675 0.00149221 0.00164057 0.00176295 0.00186081 0.0019363 0.00199289 0.00203543 0.0020689 0.00209692 0.00212154 0.00214385 0.00216451 0.00218392 0.00220234 0.00221998 0.00223697 0.00225343 0.00226943 0.00228504 0.00230031 0.00231528 0.00232999 0.00234447 0.00235874 0.00237282 0.00238674 0.00240051 0.00241417 0.00242773 0.00244121 0.00245464 -0.000686746 -0.00034466 1.41623E-06 0.0003341 0.000636108 0.000908267 0.00115139 0.00136628 0.00155375 0.00171468 0.00185001 0.00196093 0.00204908 0.002117 0.00216854 0.0022085 0.00224113 0.00226924 0.00229436 0.00231737 0.00233881 0.00235904 0.0023783 0.00239677 0.00241458 0.00243184 0.00244864 0.00246502 0.00248105 0.00249677 0.00251221 0.0025274 0.00254237 0.00255714 0.00257175 0.0025862 0.00260053 0.00261475 0.0026289 -0.000698208 -0.000350587 1.83393E-06 0.000341851 0.000652069 0.00093326 0.00118618 0.00141158 0.00161021 0.00178285 0.00193037 0.00205375 0.00215428 0.00223387 0.00229542 0.00234304 0.00238121 0.00241338 0.0024417 0.00246735 0.00249104 0.00251324 0.00253425 0.00255431 0.00257357 0.00259217 0.00261021 0.00262776 0.00264489 0.00266165 0.00267808 0.00269422 0.0027101 0.00272575 0.00274119 0.00275646 0.00277156 0.00278654 0.00280142 -0.000708192 -0.00035567 2.36661E-06 0.000348946 0.000666584 0.000956003 0.00121791 0.00145299 0.00166196 0.00184554 0.00200448 0.00213964 0.0022521 0.0023433 0.00241544 0.00247179 0.00251647 0.00255343 0.0025854 0.00261402 0.00264021 0.00266457 0.00268749 0.00270925 0.00273006 0.00275008 0.00276943 0.00278821 0.00280649 0.00282434 0.0028418 0.00285892 0.00287574 0.00289228 0.00290858 0.00292467 0.00294057 0.00295631 0.00297192 -0.000716764 -0.000359934 3.04416E-06 0.00035548 0.000679812 0.000976714 0.00124685 0.00149086 0.0017094 0.00190314 0.00207276 0.00221904 0.00234286 0.0024454 0.00252831 0.00259412 0.00264631 0.00268886 0.00272504 0.00275699 0.00278595 0.00281268 0.00283768 0.00286129 0.00288377 0.0029053 0.00292605 0.00294612 0.00296561 0.00298458 0.00300311 0.00302125 0.00303903 0.00305649 0.00307367 0.0030906 0.00310731 0.00312383 0.00314018 -0.000723969 -0.000363389 3.90389E-06 0.000361551 0.000691907 0.000995606 0.00127326 0.00152549 0.00175288 0.00195606 0.00213566 0.00229237 0.00242697 0.00254041 0.002634 0.00270965 0.00277018 0.00281917 0.0028602 0.00289592 0.00292796 0.0029573 0.00298456 0.00301017 0.00303444 0.0030576 0.00307982 0.00310126 0.00312201 0.00314218 0.00316182 0.00318101 0.00319978 0.00321819 0.00323628 0.00325407 0.00327161 0.00328892 0.00330603 -0.000729833 -0.000366028 4.99226E-06 0.000367258 0.000703023 0.00101288 0.00129741 0.00155718 0.00179275 0.0020047 0.0021936 0.00236009 0.00250485 0.00262869 0.00273267 0.00281827 0.00288768 0.00294392 0.00299051 0.00303049 0.00306595 0.00309816 0.00312789 0.00315567 0.00318187 0.00320676 0.00323056 0.00325345 0.00327554 0.00329694 0.00331775 0.00333803 0.00335784 0.00337724 0.00339625 0.00341493 0.00343332 0.00345143 0.00346932 -0.000734356 -0.000367828 6.36707E-06 0.00037271 0.000713316 0.00102875 0.00131954 0.00158623 0.00182935 0.00204942 0.00224699 0.00242263 0.00257695 0.00271066 0.00282464 0.00292006 0.00299861 0.00306274 0.0031156 0.00316041 0.00319968 0.00323504 0.00326746 0.00329759 0.00332587 0.00335263 0.00337812 0.00340254 0.00342604 0.00344876 0.00347078 0.0034922 0.00351309 0.0035335 0.00355348 0.00357307 0.00359233 0.00361128 0.00362995 -0.000737509 -0.000368744 8.10006E-06 0.000378022 0.000722946 0.00104341 0.0013399 0.00161294 0.00186301 0.0020906 0.00229623 0.00248042 0.00264371 0.00278675 0.00291027 0.00301523 0.00310297 0.00317541 0.00323519 0.00328543 0.00332895 0.00336776 0.00340312 0.00343579 0.00346631 0.00349506 0.00352235 0.00354841 0.00357341 0.0035975 0.00362081 0.00364343 0.00366543 0.0036869 0.00370787 0.00372841 0.00374856 0.00376836 0.00378785 -0.000739236 -0.000368708 1.02802E-05 0.000383323 0.000732084 0.00105707 0.00135874 0.00163758 0.00189405 0.00212861 0.00234172 0.00253388 0.00270559 0.00285742 0.00299 0.00310415 0.00320093 0.00328184 0.00334905 0.00340533 0.00345358 0.00349619 0.00353472 0.00357013 0.00360307 0.00363397 0.00366318 0.00369098 0.00371757 0.00374312 0.00376777 0.00379164 0.00381481 0.00383737 0.00385938 0.0038809 0.00390198 0.00392266 0.00394298 -0.000739443 -0.000367621 1.30174E-05 0.000388761 0.000740912 0.00106995 0.00137632 0.00166046 0.00192281 0.00216379 0.00238385 0.00258345 0.00276303 0.00292312 0.00306429 0.00318721 0.00329276 0.00338216 0.0034571 0.00351994 0.00357345 0.00362022 0.00366219 0.00370055 0.00373607 0.00376927 0.00380054 0.00383019 0.00385846 0.00388555 0.00391163 0.00393681 0.00396121 0.00398491 0.004008 0.00403053 0.00405256 0.00407415 0.00409533 *table -7.80369E-10 -1.14276E-10 -9.73359E-12 6.05607E-12 8.15255E-12 9.2099E-12 1.01401E-11 1.10401E-11 1.19318E-11 1.28222E-11 1.37145E-11 1.46101E-11 1.55099E-11 1.64141E-11 1.73232E-11 1.82371E-11 1.91561E-11 2.008E-11 2.1009E-11 2.19431E-11 2.28822E-11 2.38265E-11 2.47759E-11 2.57307E-11 2.66908E-11 2.76567E-11 2.86285E-11 2.96066E-11 3.05914E-11 3.15835E-11 3.25835E-11 3.35921E-11 3.46103E-11 3.56393E-11 3.66805E-11 3.77356E-11 3.88067E-11 3.98966E-11 4.10086E-11 -3.42743E-09 -4.82076E-10 -8.34252E-12 6.41106E-11 7.37304E-11 7.85821E-11 8.28501E-11 8.698E-11 9.10712E-11 9.51569E-11 9.92511E-11 1.03361E-10 1.07489E-10 1.11638E-10 1.15809E-10 1.20002E-10 1.24218E-10 1.28458E-10 1.3272E-10 1.37006E-10 1.41314E-10 1.45646E-10 1.50002E-10 1.54381E-10 1.58786E-10 1.63216E-10 1.67672E-10 1.72157E-10 1.76672E-10 1.81219E-10 1.858E-10 1.90419E-10 1.95079E-10 1.99786E-10 2.04543E-10 2.09358E-10 2.14239E-10 2.19196E-10 2.2424E-10 -1.48032E-08 -2.1309E-09 -7.97026E-12 3.22919E-10 3.66852E-10 3.89007E-10 4.08497E-10 4.27357E-10 4.46039E-10 4.64696E-10 4.83392E-10 5.02157E-10 5.21008E-10 5.39953E-10 5.58999E-10 5.78147E-10 5.97399E-10 6.16756E-10 6.36219E-10 6.55786E-10 6.75458E-10 6.95237E-10 7.15122E-10 7.35117E-10 7.55224E-10 7.75446E-10 7.95788E-10 8.16257E-10 8.36859E-10 8.57603E-10 8.78499E-10 8.99561E-10 9.20803E-10 9.42242E-10 9.639E-10 9.85802E-10 1.00798E-09 1.03047E-09 1.05331E-09 -6.11546E-08 -9.31332E-09 -7.58201E-12 1.48896E-09 1.68766E-09 1.78785E-09 1.87598E-09 1.96126E-09 2.04573E-09 2.13009E-09 2.21463E-09 2.29947E-09 2.38471E-09 2.47037E-09 2.55648E-09 2.64305E-09 2.73009E-09 2.81761E-09 2.9056E-09 2.99406E-09 3.08299E-09 3.17241E-09 3.2623E-09 3.35269E-09 3.44357E-09 3.53497E-09 3.62691E-09 3.71941E-09 3.8125E-09 3.90622E-09 4.00061E-09 4.09572E-09 4.19161E-09 4.28836E-09 4.38603E-09 4.48474E-09 4.58459E-09 4.68574E-09 4.78834E-09 -2.34315E-07 -3.91418E-08 -5.9756E-12 6.63232E-09 7.51374E-09 7.95798E-09 8.34871E-09 8.72676E-09 9.10124E-09 9.4752E-09 9.84992E-09 1.0226E-08 1.06038E-08 1.09835E-08 1.13651E-08 1.17489E-08 1.21346E-08 1.25225E-08 1.29124E-08 1.33045E-08 1.36986E-08 1.40948E-08 1.44931E-08 1.48936E-08 1.52963E-08 1.57013E-08 1.61086E-08 1.65183E-08 1.69306E-08 1.73457E-08 1.77636E-08 1.81847E-08 1.86091E-08 1.90371E-08 1.9469E-08 1.99053E-08 2.03463E-08 2.07926E-08 2.12448E-08 -8.09443E-07 -1.53396E-07 -7.63317E-13 2.83728E-08 3.21423E-08 3.40393E-08 3.57069E-08 3.73202E-08 3.8918E-08 4.05136E-08 4.21123E-08 4.37167E-08 4.53284E-08 4.6948E-08 4.85759E-08 5.02125E-08 5.18579E-08 5.3512E-08 5.5175E-08 5.68467E-08 5.85273E-08 6.02167E-08 6.19151E-08 6.36225E-08 6.53392E-08 6.70654E-08 6.88015E-08 7.05478E-08 7.2305E-08 7.40735E-08 7.58541E-08 7.76475E-08 7.94548E-08 8.12769E-08 8.3115E-08 8.49706E-08 8.68453E-08 8.87409E-08 9.06597E-08 -2.50341E-06 -5.43167E-07 2.40514E-11 1.13694E-07 1.28836E-07 1.36414E-07 1.43066E-07 1.49498E-07 1.55867E-07 1.62225E-07 1.68596E-07 1.74988E-07 1.81409E-07 1.8786E-07 1.94344E-07 2.00862E-07 2.07414E-07 2.14001E-07 2.20622E-07 2.27278E-07 2.33968E-07 2.40692E-07 2.47452E-07 2.54247E-07 2.61078E-07 2.67947E-07 2.74853E-07 2.818E-07 2.88789E-07 2.95822E-07 3.02902E-07 3.10032E-07 3.17215E-07 3.24455E-07 3.31756E-07 3.39123E-07 3.46562E-07 3.54079E-07 3.61682E-07 -7.0463E-06 -1.71221E-06 1.55297E-10 4.13376E-07 4.68986E-07 4.96316E-07 5.20193E-07 5.43245E-07 5.66057E-07 5.88822E-07 6.11622E-07 6.34496E-07 6.57465E-07 6.80541E-07 7.0373E-07 7.27036E-07 7.5046E-07 7.74003E-07 7.97666E-07 8.21448E-07 8.4535E-07 8.69372E-07 8.93516E-07 9.17782E-07 9.42174E-07 9.66694E-07 9.91349E-07 1.01614E-06 1.04108E-06 1.06617E-06 1.09143E-06 1.11685E-06 1.14247E-06 1.16827E-06 1.19429E-06 1.22053E-06 1.24702E-06 1.27376E-06 1.3008E-06 -1.8149E-05 -4.84426E-06 5.59487E-10 1.33705E-06 1.52291E-06 1.6097E-06 1.68448E-06 1.75638E-06 1.82741E-06 1.89822E-06 1.96908E-06 2.04014E-06 2.11147E-06 2.1831E-06 2.25506E-06 2.32736E-06 2.40001E-06 2.473E-06 2.54635E-06 2.62005E-06 2.6941E-06 2.76851E-06 2.84328E-06 2.91841E-06 2.99391E-06 3.06979E-06 3.14607E-06 3.22277E-06 3.2999E-06 3.37748E-06 3.45555E-06 3.53414E-06 3.61327E-06 3.69299E-06 3.77333E-06 3.85434E-06 3.93608E-06 4.01858E-06 4.10192E-06 -4.15022E-05 -1.2293E-05 1.27483E-09 3.86769E-06 4.45657E-06 4.70106E-06 4.90421E-06 5.09751E-06 5.28762E-06 5.47672E-06 5.66569E-06 5.85497E-06 6.0448E-06 6.23531E-06 6.42658E-06 6.61864E-06 6.81153E-06 7.00526E-06 7.19983E-06 7.39526E-06 7.59155E-06 7.78871E-06 7.98674E-06 8.18567E-06 8.38551E-06 8.58631E-06 8.78809E-06 8.9909E-06 9.1948E-06 9.39986E-06 9.60614E-06 9.81373E-06 1.00227E-05 1.02332E-05 1.04452E-05 1.0659E-05 1.08746E-05 1.10922E-05 1.13118E-05 -8.08931E-05 -2.70031E-05 2.32345E-09 1.00599E-05 1.19459E-05 1.25852E-05 1.30728E-05 1.35254E-05 1.39661E-05 1.44023E-05 1.48369E-05 1.52712E-05 1.57061E-05 1.6142E-05 1.65791E-05 1.70176E-05 1.74576E-05 1.78992E-05 1.83423E-05 1.87872E-05 1.92337E-05 1.96819E-05 2.01318E-05 2.05835E-05 2.10371E-05 2.14926E-05 2.19501E-05 2.24097E-05 2.28717E-05 2.3336E-05 2.3803E-05 2.42728E-05 2.47455E-05 2.52215E-05 2.5701E-05 2.61842E-05 2.66714E-05 2.71629E-05 2.7659E-05 -0.000133257 -4.97374E-05 3.84053E-09 2.28578E-05 2.88996E-05 3.05814E-05 3.16524E-05 3.25927E-05 3.34895E-05 3.43679E-05 3.52377E-05 3.61035E-05 3.69679E-05 3.78322E-05 3.86973E-05 3.95638E-05 4.04321E-05 4.13023E-05 4.21748E-05 4.30496E-05 4.39267E-05 4.48064E-05 4.56887E-05 4.65738E-05 4.74618E-05 4.8353E-05 4.92474E-05 5.01455E-05 5.10475E-05 5.19537E-05 5.28645E-05 5.37804E-05 5.47017E-05 5.5629E-05 5.65628E-05 5.75035E-05 5.84518E-05 5.94083E-05 6.03735E-05 -0.000191427 -7.79242E-05 6.06843E-09 4.36794E-05 6.04636E-05 6.521E-05 6.74896E-05 6.9273E-05 7.09029E-05 7.24684E-05 7.40018E-05 7.55174E-05 7.70231E-05 7.85231E-05 8.00202E-05 8.15161E-05 8.30119E-05 8.45085E-05 8.60064E-05 8.75061E-05 8.90079E-05 9.0512E-05 9.20189E-05 9.35289E-05 9.50422E-05 9.65593E-05 9.80806E-05 9.96068E-05 0.000101138 0.000102676 0.00010422 0.000105773 0.000107333 0.000108903 0.000110483 0.000112074 0.000113678 0.000115294 0.000116926 -0.000249879 -0.000108113 9.33708E-09 7.05362E-05 0.00010658 0.000119644 0.000124683 0.000127914 0.000130642 0.000133172 0.000135604 0.000137983 0.000140327 0.000142651 0.00014496 0.00014726 0.000149553 0.000151842 0.000154128 0.000156413 0.000158697 0.000160982 0.000163267 0.000165553 0.000167842 0.000170134 0.00017243 0.00017473 0.000177037 0.00017935 0.000181672 0.000184003 0.000186346 0.000188701 0.00019107 0.000193454 0.000195857 0.000198278 0.000200721 -0.000305785 -0.000137906 1.40572E-08 9.99967E-05 0.000161133 0.000190401 0.000201941 0.00020785 0.000212224 0.000216053 0.000219631 0.000223071 0.000226426 0.000229726 0.000232987 0.000236221 0.000239435 0.000242633 0.000245819 0.000248997 0.000252167 0.000255333 0.000258494 0.000261652 0.000264809 0.000267966 0.000271125 0.000274286 0.000277452 0.000280624 0.000283804 0.000286995 0.000290198 0.000293416 0.000296651 0.000299907 0.000303184 0.000306486 0.000309816 -0.000357969 -0.000166094 2.07428E-08 0.000129453 0.000217791 0.000269376 0.000293674 0.000304878 0.000311876 0.000317485 0.000322504 0.000327216 0.000331744 0.000336154 0.000340481 0.000344748 0.00034897 0.000353157 0.000357317 0.000361455 0.000365575 0.00036968 0.000373773 0.000377855 0.00038193 0.000385999 0.000390064 0.000394127 0.000398191 0.000402259 0.000406333 0.000410417 0.000414512 0.000418624 0.000422754 0.000426906 0.000431085 0.000435293 0.000439535 -0.000406066 -0.000192202 3.00528E-08 0.00015752 0.000272894 0.000349276 0.000392353 0.000413405 0.000424885 0.000433054 0.000439929 0.000446174 0.00045206 0.000457718 0.000463219 0.000468608 0.000473913 0.000479152 0.00048434 0.000489486 0.000494597 0.000499679 0.000504735 0.000509771 0.000514788 0.000519791 0.000524782 0.000529765 0.000534742 0.000539718 0.000544696 0.00054968 0.000554674 0.000559682 0.000564709 0.000569759 0.000574838 0.00057995 0.0005851 -0.000450078 -0.000216115 4.28418E-08 0.000183624 0.000324802 0.000426106 0.000491223 0.000527425 0.000546592 0.000558676 0.000568041 0.000576181 0.000583658 0.000590729 0.000597528 0.000604133 0.000610596 0.000616948 0.000623213 0.000629407 0.000635543 0.000641629 0.000647673 0.000653681 0.000659657 0.000665606 0.000671533 0.000677441 0.000683336 0.000689221 0.000695101 0.000700982 0.000706869 0.000712766 0.00071868 0.000724617 0.000730583 0.000736583 0.000742623 -0.000490174 -0.000237882 6.02186E-08 0.000207604 0.00037292 0.000498197 0.000586145 0.000641324 0.000672437 0.000690692 0.000703565 0.000714124 0.000723509 0.000732205 0.000740453 0.000748388 0.000756094 0.000763627 0.000771023 0.000778309 0.000785504 0.000792622 0.000799675 0.000806672 0.00081362 0.000820525 0.000827393 0.000834231 0.000841043 0.000847835 0.000854613 0.000861384 0.000868154 0.000874929 0.000881717 0.000888524 0.000895358 0.000902226 0.000909136 -0.000526584 -0.000257618 8.36169E-08 0.000229486 0.000417141 0.000565002 0.000675269 0.000751043 0.000797989 0.000825637 0.000843634 0.000857399 0.000869134 0.000879736 0.000889626 0.000899031 0.000908088 0.000916882 0.000925472 0.000933898 0.000942192 0.000950373 0.00095846 0.000966465 0.000974399 0.00098227 0.000990087 0.000997858 0.00100559 0.00101329 0.00102096 0.00102861 0.00103625 0.0010439 0.00105154 0.0010592 0.00106689 0.0010746 0.00108236 -0.000559566 -0.000275462 1.14883E-07 0.000249377 0.000457573 0.000626479 0.000757984 0.000854428 0.000919531 0.000960073 0.00098556 0.00100372 0.00101843 0.00103132 0.0010431 0.00105415 0.00106469 0.00107485 0.00108471 0.00109433 0.00110377 0.00111306 0.00112221 0.00113124 0.00114018 0.00114903 0.00115781 0.00116651 0.00117517 0.00118377 0.00119233 0.00120086 0.00120937 0.00121787 0.00122636 0.00123486 0.00124338 0.00125192 0.0012605 -0.000589376 -0.000291557 1.56384E-07 0.000267413 0.00049442 0.000682807 0.000834251 0.000950661 0.00103467 0.00109081 0.00112667 0.00115096 0.00116954 0.00118522 0.00119922 0.00121215 0.00122433 0.00123597 0.0012472 0.0012581 0.00126874 0.00127917 0.00128942 0.00129952 0.00130948 0.00131933 0.00132907 0.00133873 0.00134831 0.00135782 0.00136727 0.00137668 0.00138604 0.00139539 0.00140472 0.00141404 0.00142338 0.00143273 0.00144212 -0.000616262 -0.000306041 2.1115E-07 0.000283737 0.000527921 0.000734264 0.000904283 0.00103962 0.00114229 0.0012154 0.00126434 0.001297 0.00132074 0.00133991 0.00135656 0.00137164 0.00138567 0.00139895 0.00141165 0.00142392 0.00143584 0.00144747 0.00145886 0.00147005 0.00148107 0.00149193 0.00150267 0.00151328 0.0015238 0.00153422 0.00154457 0.00155485 0.00156507 0.00157526 0.00158542 0.00159556 0.0016057 0.00161585 0.00162602 -0.000640458 -0.000319045 2.83038E-07 0.000298492 0.000558325 0.000781168 0.000968407 0.00112149 0.00124209 0.00133245 0.0013963 0.00143975 0.00147034 0.00149397 0.00151382 0.00153143 0.00154756 0.00156265 0.00157698 0.00159072 0.00160399 0.00161689 0.00162948 0.00164181 0.00165391 0.00166583 0.00167757 0.00168916 0.00170062 0.00171197 0.00172322 0.00173437 0.00174546 0.00175648 0.00176746 0.00177841 0.00178934 0.00180028 0.00181122 -0.000662179 -0.000330687 3.76954E-07 0.000311817 0.000585878 0.000823847 0.001027 0.00119663 0.00133418 0.00144142 0.00152098 0.00157722 0.00161667 0.00164604 0.00166983 0.00169042 0.00170896 0.0017261 0.00174221 0.00175755 0.00177229 0.00178654 0.00180039 0.0018139 0.00182714 0.00184013 0.00185291 0.0018655 0.00187793 0.00189021 0.00190237 0.00191441 0.00192635 0.00193822 0.00195002 0.00196177 0.00197349 0.0019852 0.0019969 -0.000681625 -0.000341078 4.99118E-07 0.00032384 0.000610819 0.000862627 0.00108044 0.00126545 0.00141891 0.0015423 0.00163758 0.00170784 0.00175809 0.00179477 0.00182348 0.00184763 0.00186897 0.00188842 0.00190652 0.00192362 0.00193994 0.00195563 0.00197082 0.00198558 0.002 0.00201411 0.00202796 0.00204158 0.00205499 0.00206823 0.0020813 0.00209424 0.00210705 0.00211976 0.00213238 0.00214493 0.00215744 0.00216991 0.00218237 -0.000698975 -0.000350315 6.57397E-07 0.000334685 0.00063337 0.000897819 0.00112912 0.00132837 0.00149669 0.00163535 0.00174591 0.00183062 0.00189314 0.00193884 0.00197369 0.00200215 0.00202675 0.00204885 0.00206918 0.00208821 0.00210625 0.0021235 0.00214011 0.0021562 0.00217185 0.00218713 0.00220209 0.00221677 0.00223119 0.0022454 0.00225942 0.00227326 0.00228695 0.00230051 0.00231396 0.00232732 0.0023406 0.00235384 0.00236704 -0.00071439 -0.000358483 8.61717E-07 0.000344468 0.000653745 0.000929722 0.00117341 0.00138581 0.00156796 0.00172097 0.00184613 0.00194518 0.00202075 0.002077 0.00211939 0.00215309 0.00218155 0.00220668 0.00222952 0.00225071 0.00227063 0.00228956 0.00230771 0.0023252 0.00234216 0.00235866 0.00237478 0.00239055 0.00240602 0.00242123 0.0024362 0.00245097 0.00246555 0.00247997 0.00249426 0.00250842 0.00252249 0.00253649 0.00255044 -0.000728015 -0.000365657 1.12458E-06 0.000353297 0.000672142 0.000958618 0.00121366 0.0014382 0.00163319 0.00179961 0.00193859 0.00205152 0.00214036 0.0022082 0.00225954 0.00229961 0.00233265 0.00236128 0.00238697 0.00241054 0.00243254 0.00245331 0.00247311 0.00249211 0.00251045 0.00252824 0.00254556 0.00256247 0.00257902 0.00259526 0.00261122 0.00262693 0.00264243 0.00265772 0.00267285 0.00268783 0.00270269 0.00271746 0.00273214 -0.000739972 -0.000371901 1.46171E-06 0.000361279 0.000688751 0.000984772 0.00125021 0.00148594 0.00169282 0.00187175 0.00202373 0.00214991 0.00225183 0.00233177 0.00239322 0.00244086 0.00247935 0.00251206 0.00254097 0.00256723 0.00259152 0.0026143 0.00263588 0.0026565 0.00267632 0.00269547 0.00271406 0.00273216 0.00274984 0.00276714 0.00278412 0.0028008 0.00281722 0.00283341 0.0028494 0.00286521 0.00288087 0.0028964 0.00291183 -0.000750368 -0.000377263 1.89281E-06 0.000368512 0.000703749 0.00100843 0.00128338 0.0015294 0.00174728 0.00193786 0.00210201 0.00224074 0.0023553 0.00244741 0.00251973 0.00257608 0.002621 0.00265846 0.00269106 0.00272032 0.00274715 0.00277213 0.00279566 0.00281802 0.00283941 0.00286001 0.00287994 0.00289929 0.00291814 0.00293655 0.00295457 0.00297226 0.00298963 0.00300674 0.0030236 0.00304025 0.00305672 0.00307303 0.00308922 -0.000759291 -0.000381783 2.44257E-06 0.000375097 0.000717305 0.00102984 0.00131347 0.00156894 0.00179699 0.00199838 0.00217391 0.00232447 0.00245109 0.00255515 0.00263866 0.0027046 0.00275697 0.00279996 0.00283678 0.00286942 0.00289907 0.00292647 0.00295211 0.00297635 0.00299944 0.00302158 0.00304293 0.00306359 0.00308367 0.00310323 0.00312235 0.00314106 0.00315942 0.00317746 0.00319522 0.00321273 0.00323002 0.00324713 0.00326407 -0.000766806 -0.000385485 3.14183E-06 0.00038113 0.000729582 0.00104923 0.00134077 0.00160491 0.00184234 0.00205376 0.00223991 0.00240156 0.00253962 0.00265522 0.0027499 0.00282597 0.0028867 0.00293607 0.00297771 0.00301415 0.00304693 0.00307699 0.00310494 0.00313122 0.00315613 0.00317993 0.00320278 0.00322483 0.0032462 0.00326697 0.00328722 0.003307 0.00332638 0.00334538 0.00336406 0.00338245 0.00340059 0.00341849 0.00343621 -0.000772962 -0.000388378 4.0291E-06 0.00038671 0.00074074 0.0010668 0.00136555 0.00163764 0.00188371 0.00210443 0.00230045 0.0024725 0.00262135 0.00274797 0.00285358 0.00293998 0.00300973 0.00306633 0.00311348 0.0031542 0.00319045 0.00322343 0.00325391 0.0032824 0.00330928 0.00333484 0.0033593 0.00338282 0.00340555 0.00342758 0.00344901 0.00346991 0.00349034 0.00351034 0.00352997 0.00354926 0.00356826 0.00358699 0.00360549 -0.00077778 -0.000390455 5.15233E-06 0.000391943 0.000750936 0.00108277 0.00138807 0.00166743 0.00192147 0.00215078 0.00235599 0.00253774 0.00269675 0.00283383 0.00295 0.00304665 0.00312582 0.00319035 0.00324373 0.00328927 0.00332937 0.00336557 0.00339879 0.00342968 0.00345869 0.00348614 0.00351232 0.00353741 0.00356157 0.00358493 0.0036076 0.00362966 0.00365118 0.00367222 0.00369283 0.00371305 0.00373293 0.0037525 0.00377181 -0.000781262 -0.000391692 6.57114E-06 0.000396936 0.000760329 0.00109735 0.00140859 0.0016946 0.00195595 0.00219321 0.00240695 0.00259777 0.0027663 0.00291326 0.00303952 0.0031462 0.00323489 0.00330787 0.00336817 0.00341911 0.00346349 0.0035032 0.00353941 0.0035729 0.0036042 0.0036337 0.00366171 0.00368846 0.00371414 0.00373891 0.00376288 0.00378615 0.00380881 0.00383092 0.00385254 0.00387372 0.00389451 0.00391495 0.00393508 -0.000783376 -0.00039204 8.35957E-06 0.000401809 0.000769086 0.00111076 0.00142736 0.00171944 0.00198751 0.0022321 0.00245376 0.00265301 0.00283046 0.00298674 0.00312258 0.00323894 0.00333707 0.00341878 0.00348656 0.00354351 0.00359262 0.00363617 0.00367563 0.00371193 0.0037457 0.00377739 0.00380736 0.00383588 0.00386318 0.00388943 0.00391477 0.00393931 0.00396316 0.00398638 0.00400905 0.00403122 0.00405295 0.00407428 0.00409526 -0.000784062 -0.000391429 1.06094E-05 0.000406696 0.000777378 0.00112319 0.00144465 0.00174225 0.00201647 0.00226783 0.00249681 0.00270393 0.00288971 0.00305474 0.00319966 0.00332528 0.00343262 0.00352311 0.00359877 0.00366229 0.00371662 0.00376438 0.00380735 0.00384667 0.00388309 0.00391713 0.0039492 0.00397962 0.00400863 0.00403645 0.00406323 0.00408911 0.00411419 0.00413858 0.00416234 0.00418554 0.00420824 0.00423049 0.00425233 -0.000783222 -0.000389757 1.3434E-05 0.000411747 0.000785395 0.00113489 0.00146071 0.00176332 0.00204318 0.00230077 0.00253653 0.00275095 0.00294451 0.00311775 0.00327124 0.00340567 0.00352189 0.00362107 0.00370481 0.00377535 0.00383542 0.00388776 0.00393451 0.00397707 0.00401632 0.00405287 0.00408719 0.00411962 0.00415046 0.00417994 0.00420824 0.00423552 0.00426191 0.00428751 0.0043124 0.00433667 0.00436038 0.00438357 0.00440632 *table -3.40339E-09 -4.76661E-10 -4.19229E-12 6.81896E-11 7.77251E-11 8.25609E-11 8.68168E-11 9.09341E-11 9.50122E-11 9.90844E-11 1.03165E-10 1.0726E-10 1.11374E-10 1.15509E-10 1.19665E-10 1.23844E-10 1.28045E-10 1.3227E-10 1.36517E-10 1.40788E-10 1.45081E-10 1.49398E-10 1.53739E-10 1.58104E-10 1.62494E-10 1.66909E-10 1.71352E-10 1.75823E-10 1.80325E-10 1.8486E-10 1.8943E-10 1.9404E-10 1.98694E-10 2.03396E-10 2.08153E-10 2.12973E-10 2.17865E-10 2.22841E-10 2.27916E-10 -1.43518E-08 -2.06461E-09 -2.8012E-12 3.1912E-10 3.61528E-10 3.83035E-10 4.01961E-10 4.20272E-10 4.38407E-10 4.56517E-10 4.74662E-10 4.92874E-10 5.11169E-10 5.29555E-10 5.48039E-10 5.66621E-10 5.85305E-10 6.0409E-10 6.22977E-10 6.41966E-10 6.61058E-10 6.80253E-10 6.99552E-10 7.18958E-10 7.38473E-10 7.58101E-10 7.77848E-10 7.97719E-10 8.17722E-10 8.37867E-10 8.58164E-10 8.78628E-10 8.99274E-10 9.20122E-10 9.41195E-10 9.62523E-10 9.84139E-10 1.00609E-09 1.02842E-09 -5.82008E-08 -8.82981E-09 -2.42898E-12 1.41732E-09 1.60435E-09 1.69918E-09 1.78264E-09 1.86338E-09 1.94334E-09 2.02319E-09 2.1032E-09 2.1835E-09 2.26416E-09 2.34522E-09 2.42672E-09 2.50864E-09 2.59102E-09 2.67384E-09 2.7571E-09 2.84082E-09 2.92498E-09 3.0096E-09 3.09467E-09 3.18021E-09 3.26623E-09 3.35274E-09 3.43976E-09 3.52732E-09 3.61545E-09 3.70419E-09 3.79358E-09 3.88367E-09 3.97453E-09 4.06622E-09 4.15885E-09 4.25251E-09 4.34734E-09 4.44349E-09 4.54115E-09 -2.20866E-07 -3.64667E-08 -2.04247E-12 6.15558E-09 6.96678E-09 7.37796E-09 7.73975E-09 8.08974E-09 8.43637E-09 8.78249E-09 9.12929E-09 9.47734E-09 9.82696E-09 1.01783E-08 1.05315E-08 1.08866E-08 1.12436E-08 1.16025E-08 1.19634E-08 1.23262E-08 1.26909E-08 1.30575E-08 1.34262E-08 1.37968E-08 1.41695E-08 1.45443E-08 1.49213E-08 1.53005E-08 1.56822E-08 1.60665E-08 1.64535E-08 1.68434E-08 1.72365E-08 1.76331E-08 1.80335E-08 1.84381E-08 1.88473E-08 1.92618E-08 1.96822E-08 -7.63059E-07 -1.41648E-07 -4.58634E-13 2.58686E-08 2.92781E-08 3.1004E-08 3.25221E-08 3.39904E-08 3.54445E-08 3.68964E-08 3.8351E-08 3.98109E-08 4.12772E-08 4.27508E-08 4.4232E-08 4.5721E-08 4.7218E-08 4.87231E-08 5.02361E-08 5.17572E-08 5.32863E-08 5.48235E-08 5.63688E-08 5.79225E-08 5.94846E-08 6.10554E-08 6.26353E-08 6.42246E-08 6.58239E-08 6.74336E-08 6.90545E-08 7.06874E-08 7.23332E-08 7.39928E-08 7.56676E-08 7.73589E-08 7.90684E-08 8.07981E-08 8.25504E-08 -2.37291E-06 -5.02257E-07 4.5266E-12 1.02749E-07 1.16319E-07 1.23157E-07 1.29164E-07 1.34972E-07 1.40722E-07 1.46463E-07 1.52214E-07 1.57985E-07 1.63781E-07 1.69605E-07 1.75459E-07 1.81343E-07 1.87258E-07 1.93205E-07 1.99183E-07 2.05191E-07 2.11232E-07 2.17303E-07 2.23406E-07 2.29542E-07 2.3571E-07 2.41912E-07 2.48149E-07 2.54423E-07 2.60735E-07 2.67087E-07 2.73483E-07 2.79924E-07 2.86414E-07 2.92956E-07 2.99556E-07 3.06218E-07 3.12947E-07 3.1975E-07 3.26635E-07 -6.71726E-06 -1.59616E-06 2.74161E-11 3.74244E-07 4.24082E-07 4.48816E-07 4.70458E-07 4.91356E-07 5.12036E-07 5.32673E-07 5.53341E-07 5.74077E-07 5.94899E-07 6.15818E-07 6.36841E-07 6.5797E-07 6.79207E-07 7.00553E-07 7.22007E-07 7.43571E-07 7.65244E-07 7.87027E-07 8.08921E-07 8.30927E-07 8.53047E-07 8.75286E-07 8.97647E-07 9.20136E-07 9.42758E-07 9.6552E-07 9.88432E-07 1.0115E-06 1.03474E-06 1.05816E-06 1.08178E-06 1.10561E-06 1.12966E-06 1.15397E-06 1.17854E-06 -1.74412E-05 -4.56055E-06 1.47308E-10 1.22219E-06 1.3894E-06 1.46885E-06 1.53755E-06 1.60365E-06 1.66895E-06 1.73407E-06 1.79924E-06 1.8646E-06 1.93021E-06 1.9961E-06 2.06229E-06 2.12881E-06 2.19564E-06 2.2628E-06 2.33029E-06 2.3981E-06 2.46625E-06 2.53472E-06 2.60353E-06 2.67267E-06 2.74216E-06 2.81201E-06 2.88223E-06 2.95283E-06 3.02384E-06 3.09527E-06 3.16715E-06 3.23952E-06 3.3124E-06 3.38582E-06 3.45983E-06 3.53448E-06 3.6098E-06 3.68586E-06 3.76271E-06 -4.04644E-05 -1.1735E-05 5.2067E-10 3.57711E-06 4.10554E-06 4.33183E-06 4.52152E-06 4.70239E-06 4.88041E-06 5.05754E-06 5.2346E-06 5.41198E-06 5.5899E-06 5.76847E-06 5.94777E-06 6.12784E-06 6.3087E-06 6.49036E-06 6.67284E-06 6.85613E-06 7.04024E-06 7.22518E-06 7.41096E-06 7.59759E-06 7.78509E-06 7.9735E-06 8.16284E-06 8.35318E-06 8.54455E-06 8.73701E-06 8.93064E-06 9.12552E-06 9.32171E-06 9.51933E-06 9.71847E-06 9.91924E-06 1.01218E-05 1.03262E-05 1.05326E-05 -8.05311E-05 -2.63395E-05 1.20057E-09 9.44189E-06 1.11164E-05 1.17095E-05 1.21711E-05 1.26019E-05 1.30222E-05 1.34385E-05 1.38535E-05 1.42684E-05 1.4684E-05 1.51005E-05 1.55184E-05 1.59377E-05 1.63584E-05 1.67808E-05 1.72047E-05 1.76303E-05 1.80575E-05 1.84864E-05 1.8917E-05 1.93494E-05 1.97835E-05 2.02196E-05 2.06576E-05 2.10978E-05 2.15401E-05 2.19848E-05 2.24321E-05 2.28821E-05 2.3335E-05 2.3791E-05 2.42505E-05 2.47135E-05 2.51805E-05 2.56516E-05 2.61273E-05 -0.000135564 -4.97423E-05 2.23873E-09 2.19365E-05 2.73063E-05 2.88434E-05 2.98644E-05 3.07721E-05 3.16414E-05 3.24944E-05 3.334E-05 3.41823E-05 3.50237E-05 3.58653E-05 3.67081E-05 3.75524E-05 3.83987E-05 3.92471E-05 4.00978E-05 4.09509E-05 4.18066E-05 4.26648E-05 4.35257E-05 4.43895E-05 4.52563E-05 4.61262E-05 4.69995E-05 4.78765E-05 4.87573E-05 4.96425E-05 5.05322E-05 5.1427E-05 5.23272E-05 5.32333E-05 5.41458E-05 5.50653E-05 5.59922E-05 5.69272E-05 5.7871E-05 -0.000198065 -7.96202E-05 3.79439E-09 4.3081E-05 5.84722E-05 6.27136E-05 6.48739E-05 6.66099E-05 6.82108E-05 6.97542E-05 7.12688E-05 7.27678E-05 7.42582E-05 7.57441E-05 7.72278E-05 7.8711E-05 8.01946E-05 8.16795E-05 8.31661E-05 8.46549E-05 8.61461E-05 8.76401E-05 8.91371E-05 9.06373E-05 9.21413E-05 9.36493E-05 9.51618E-05 9.66793E-05 9.82025E-05 9.97319E-05 0.000101268 0.000102812 0.000104365 0.000105927 0.0001075 0.000109084 0.00011068 0.00011229 0.000113915 -0.000261543 -0.000112195 6.11599E-09 7.12992E-05 0.000105873 0.000117653 0.000122335 0.000125478 0.000128178 0.0001307 0.000133134 0.000135517 0.000137871 0.000140205 0.000142526 0.000144839 0.000147147 0.000149452 0.000151755 0.000154057 0.000156359 0.000158662 0.000160966 0.000163273 0.000165582 0.000167895 0.000170212 0.000172534 0.000174863 0.000177199 0.000179544 0.000181899 0.000184266 0.000186646 0.00018904 0.000191451 0.00019388 0.000196328 0.000198798 -0.000322495 -0.000144624 9.52629E-09 0.00010293 0.000163743 0.000191239 0.000201837 0.000207515 0.000211848 0.000215689 0.000219297 0.000222777 0.000226177 0.000229526 0.000232839 0.000236126 0.000239395 0.00024265 0.000245895 0.000249132 0.000252363 0.000255589 0.000258813 0.000262034 0.000265255 0.000268477 0.000271701 0.000274928 0.000278161 0.000281401 0.00028465 0.00028791 0.000291184 0.000294473 0.000297781 0.000301109 0.00030446 0.000307838 0.000311244 -0.000379417 -0.000175402 1.44331E-08 0.000134907 0.000224876 0.000275342 0.000298058 0.000308652 0.000315534 0.000321163 0.000326245 0.000331037 0.000335655 0.000340158 0.000344584 0.000348952 0.000353278 0.000357571 0.000361838 0.000366085 0.000370315 0.000374532 0.000378737 0.000382932 0.000387121 0.000391305 0.000395486 0.000399667 0.00040385 0.000408037 0.000412232 0.000416437 0.000420656 0.000424891 0.000429147 0.000433427 0.000437734 0.000442073 0.000446447 -0.000431812 -0.000203907 2.13597E-08 0.000165509 0.000284758 0.000361589 0.000403187 0.000423055 0.000434192 0.000442351 0.000449313 0.000455679 0.000461699 0.000467499 0.000473148 0.000478688 0.000484147 0.000489543 0.00049489 0.000500196 0.000505469 0.000510714 0.000515935 0.000521136 0.00052632 0.00053149 0.00053665 0.000541802 0.000546951 0.000552099 0.000557251 0.00056241 0.00056758 0.000572767 0.000577974 0.000583207 0.00058847 0.000593768 0.000599107 -0.00047965 -0.000229971 3.09852E-08 0.000193987 0.000341285 0.000444977 0.000509648 0.000544399 0.000562795 0.000574743 0.000584194 0.000592487 0.000600142 0.000607402 0.000614397 0.000621203 0.000627869 0.000634429 0.000640903 0.000647309 0.000653657 0.000659958 0.000666217 0.000672441 0.000678635 0.000684803 0.000690949 0.000697078 0.000703195 0.000709304 0.000715409 0.000721517 0.000727632 0.00073376 0.000739908 0.00074608 0.000752283 0.000758523 0.000764808 -0.000523106 -0.000253636 4.41932E-08 0.000220111 0.000393662 0.000523316 0.000612381 0.000666585 0.00069652 0.000714354 0.00072725 0.000737979 0.00074758 0.00075651 0.000765 0.000773183 0.000781141 0.000788929 0.000796582 0.000804128 0.000811584 0.000818965 0.000826282 0.000833544 0.000840757 0.00084793 0.000855066 0.000862173 0.000869256 0.00087632 0.000883372 0.000890419 0.000897466 0.000904521 0.00091159 0.000918682 0.000925804 0.000932964 0.000940169 -0.000562442 -0.000275026 6.21297E-08 0.00024389 0.00044171 0.000595853 0.000708964 0.000784877 0.000830682 0.000857522 0.000875368 0.00088928 0.000901258 0.000912133 0.00092231 0.000932008 0.000941361 0.000950455 0.000959348 0.00096808 0.00097668 0.00098517 0.000993566 0.00100188 0.00101013 0.00101831 0.00102644 0.00103453 0.00104257 0.00105059 0.00105858 0.00106655 0.00107452 0.00108248 0.00109046 0.00109845 0.00110647 0.00111452 0.00112262 -0.000597949 -0.000294298 8.62756E-08 0.000265437 0.00048553 0.00066248 0.00079854 0.00089655 0.000961155 0.00100067 0.00102571 0.00104392 0.00105888 0.00107207 0.00108418 0.00109556 0.00110644 0.00111694 0.00112714 0.00113712 0.00114691 0.00115654 0.00116604 0.00117543 0.00118472 0.00119393 0.00120306 0.00121212 0.00122113 0.00123009 0.00123902 0.00124791 0.00125678 0.00126565 0.00127451 0.00128338 0.00129228 0.0013012 0.00131017 -0.00062992 -0.000311617 1.18537E-07 0.000284902 0.000525342 0.000723374 0.000880989 0.00100047 0.00108506 0.0011404 0.00117552 0.00119965 0.00121844 0.00123444 0.0012488 0.0012621 0.00127466 0.00128669 0.0012983 0.00130959 0.00132062 0.00133144 0.00134208 0.00135256 0.00136292 0.00137316 0.0013833 0.00139335 0.00140333 0.00141323 0.00142309 0.00143289 0.00144266 0.00145241 0.00146215 0.00147189 0.00148164 0.00149141 0.00150122 -0.000658641 -0.000327142 1.61357E-07 0.000302449 0.000561415 0.00077884 0.000956519 0.0010964 0.00120092 0.00127393 0.00132207 0.0013543 0.00137812 0.0013976 0.00141464 0.00143013 0.00144458 0.00145828 0.00147141 0.0014841 0.00149644 0.00150849 0.00152031 0.00153193 0.00154338 0.00155467 0.00156584 0.00157688 0.00158783 0.00159869 0.00160947 0.00162018 0.00163085 0.00164147 0.00165207 0.00166266 0.00167325 0.00168385 0.00169449 -0.000684379 -0.000341024 2.1786E-07 0.00031824 0.000594031 0.000829235 0.00102549 0.0011845 0.00130825 0.00139952 0.0014629 0.00150573 0.0015362 0.00156007 0.00158032 0.00159837 0.00161495 0.0016305 0.00164529 0.00165948 0.00167322 0.00168658 0.00169962 0.00171241 0.00172498 0.00173736 0.00174956 0.00176162 0.00177355 0.00178536 0.00179707 0.00180869 0.00182025 0.00183174 0.0018432 0.00185463 0.00186604 0.00187746 0.0018889 -0.000707386 -0.000353403 2.92029E-07 0.00033243 0.000623469 0.000874928 0.00108831 0.00126514 0.00140713 0.00151639 0.00159617 0.00165186 0.00169096 0.00172044 0.00174461 0.00176566 0.00178469 0.00180231 0.00181892 0.00183475 0.00184998 0.00186472 0.00187906 0.00189307 0.0019068 0.00192028 0.00193355 0.00194664 0.00195956 0.00197234 0.00198499 0.00199752 0.00200997 0.00202234 0.00203464 0.0020469 0.00205913 0.00207136 0.00208359 -0.000727888 -0.000364404 3.88923E-07 0.000345166 0.000649996 0.000916285 0.00114542 0.00133878 0.00149787 0.00162443 0.00172084 0.00179094 0.00184074 0.00187734 0.00190636 0.00193097 0.00195282 0.0019728 0.00199143 0.00200905 0.00202588 0.0020421 0.00205781 0.00207309 0.00208803 0.00210266 0.00211703 0.00213117 0.0021451 0.00215886 0.00217246 0.00218592 0.00219926 0.00221249 0.00222565 0.00223874 0.00225178 0.00226479 0.0022778 -0.000746097 -0.000374143 5.14958E-07 0.000356586 0.000673866 0.000953659 0.00119724 0.00140589 0.00158094 0.00172388 0.00183656 0.00192177 0.00198398 0.00202944 0.00206446 0.00209336 0.0021185 0.00214115 0.00216204 0.00218163 0.00220021 0.00221801 0.00223517 0.00225181 0.00226801 0.00228383 0.00229934 0.00231456 0.00232953 0.00234429 0.00235885 0.00237324 0.00238748 0.00240159 0.00241559 0.00242951 0.00244336 0.00245716 0.00247094 -0.000762198 -0.000382722 6.78251E-07 0.000366818 0.000695317 0.000987385 0.00124421 0.00146695 0.00165684 0.00181515 0.00194344 0.0020438 0.00211947 0.00217545 0.00221785 0.00225192 0.00228091 0.00230663 0.00233006 0.00235183 0.00237233 0.00239184 0.00241056 0.00242863 0.00244616 0.00246323 0.00247992 0.00249626 0.0025123 0.00252807 0.00254362 0.00255895 0.00257411 0.0025891 0.00260396 0.00261871 0.00263336 0.00264795 0.00266249 -0.000776361 -0.000390229 8.89042E-07 0.000375983 0.000714572 0.00101778 0.0012867 0.00152243 0.00172606 0.00189875 0.00204182 0.00215692 0.00224648 0.00231424 0.00236549 0.0024058 0.00243934 0.00246858 0.00249489 0.00251909 0.0025417 0.00256307 0.00258347 0.00260306 0.002622 0.00264039 0.0026583 0.0026758 0.00269294 0.00270977 0.00272632 0.00274262 0.00275871 0.0027746 0.00279032 0.0028059 0.00282136 0.00283673 0.00285203 -0.000788733 -0.000396742 1.16023E-06 0.000384196 0.000731841 0.00104514 0.00132511 0.00157276 0.0017891 0.00197518 0.00213215 0.00226139 0.00236475 0.00244502 0.0025064 0.00255416 0.00259309 0.0026264 0.00265597 0.00268288 0.00270782 0.00273123 0.00275344 0.00277468 0.00279511 0.00281488 0.00283408 0.00285279 0.00287108 0.00288899 0.00290658 0.00292387 0.0029409 0.0029577 0.0029743 0.00299072 0.003007 0.00302316 0.00303922 -0.000799443 -0.000402326 1.50802E-06 0.000391563 0.000747318 0.00106974 0.00135978 0.00161838 0.00184645 0.00204497 0.00221496 0.00235759 0.00247435 0.00256736 0.00263982 0.00269623 0.00274149 0.00277952 0.0028128 0.00284276 0.00287027 0.00289591 0.00292009 0.00294309 0.00296513 0.00298637 0.00300693 0.00302691 0.00304638 0.00306542 0.00308407 0.00310238 0.00312038 0.00313811 0.00315561 0.00317289 0.00318999 0.00320694 0.00322377 -0.0008086 -0.000407032 1.95276E-06 0.00039819 0.000761187 0.00109185 0.00139105 0.00165967 0.00189857 0.00210863 0.00229077 0.00244602 0.00257561 0.0026812 0.00276524 0.0028313 0.00288392 0.00292743 0.00296493 0.0029983 0.00302867 0.00305677 0.00308309 0.003108 0.00313176 0.00315455 0.00317655 0.00319786 0.00321859 0.0032388 0.00325855 0.00327791 0.00329691 0.00331559 0.003334 0.00335215 0.00337009 0.00338784 0.00340545 -0.000816292 -0.0004109 2.5199E-06 0.000404177 0.000773623 0.0011117 0.00141924 0.00169703 0.00194589 0.00216662 0.00236008 0.00252717 0.00266894 0.00278674 0.00288246 0.00295886 0.00301981 0.00306963 0.00311193 0.00314913 0.00318267 0.00321347 0.00324214 0.00326912 0.00329472 0.00331919 0.00334271 0.00336543 0.00338746 0.00340889 0.0034298 0.00345024 0.00347027 0.00348993 0.00350927 0.00352832 0.00354711 0.00356568 0.00358407 -0.000822588 -0.000413953 3.24126E-06 0.000409625 0.000784794 0.00112954 0.00144462 0.0017308 0.00198882 0.00221943 0.0024234 0.00260156 0.00275483 0.00288433 0.00299154 0.00307863 0.00314869 0.00320566 0.00325343 0.00329492 0.00333198 0.00336575 0.00339698 0.0034262 0.0034538 0.00348006 0.00350521 0.00352941 0.00355282 0.00357553 0.00359764 0.00361921 0.0036403 0.00366097 0.00368127 0.00370123 0.0037209 0.0037403 0.00375948 -0.000827535 -0.0004162 4.15655E-06 0.000414635 0.000794864 0.00114558 0.0014675 0.00176133 0.00202776 0.00226748 0.00248122 0.00266972 0.00283379 0.0029744 0.00309276 0.00319056 0.00327024 0.00333515 0.00338909 0.00343539 0.00347634 0.00351336 0.00354739 0.00357905 0.00360879 0.00363698 0.00366386 0.00368966 0.00371452 0.00373857 0.00376193 0.00378467 0.00380687 0.00382859 0.00384988 0.00387078 0.00389134 0.0039116 0.00393159 -0.000831155 -0.000417635 5.31524E-06 0.000419314 0.000803995 0.00116005 0.00148815 0.00178894 0.00206308 0.00231121 0.002534 0.00273213 0.00290633 0.00305744 0.00318649 0.00329481 0.00338434 0.00345779 0.0035186 0.00357027 0.00361552 0.00365611 0.00369318 0.00372748 0.00375956 0.00378981 0.00381855 0.00384603 0.00387243 0.0038979 0.00392257 0.00394654 0.00396989 0.0039927 0.004015 0.00403688 0.00405835 0.00407949 0.00410031 -0.000833447 -0.00041823 6.77882E-06 0.000423774 0.000812349 0.00117316 0.00150681 0.00181394 0.00209514 0.00235101 0.00258218 0.00278927 0.00297295 0.00313395 0.00327316 0.00339169 0.00349105 0.00357342 0.00364173 0.00369936 0.00374934 0.00379383 0.00383421 0.00387137 0.00390595 0.00393843 0.00396916 0.00399843 0.00402646 0.00405344 0.00407949 0.00410475 0.0041293 0.00415322 0.00417659 0.00419946 0.00422189 0.00424392 0.0042656 -0.000834377 -0.000417935 8.62364E-06 0.000428137 0.000820095 0.00118511 0.00152377 0.00183664 0.00212429 0.00238729 0.00262621 0.00284162 0.00303414 0.00320444 0.00335328 0.00348159 0.00359061 0.00368205 0.00375833 0.00382249 0.00387768 0.0039264 0.00397035 0.0040106 0.00404788 0.00408275 0.00411561 0.0041468 0.00417657 0.00420512 0.00423264 0.00425924 0.00428504 0.00431014 0.00433461 0.00435852 0.00438193 0.00440488 0.00442744 -0.000833883 -0.000416676 1.09443E-05 0.000432539 0.000827412 0.00119614 0.00153927 0.00185734 0.00215088 0.00242042 0.00266649 0.00288963 0.00309041 0.00326942 0.00342734 0.00356497 0.00368334 0.00378382 0.00386836 0.00393956 0.00400043 0.00405376 0.00410155 0.0041451 0.00418529 0.00422271 0.00425786 0.00429109 0.0043227 0.00435294 0.00438199 0.00441001 0.00443713 0.00446345 0.00448906 0.00451405 0.00453847 0.00456238 0.00458584 -0.000831861 -0.000414347 1.38579E-05 0.000437136 0.00083449 0.00120647 0.00155359 0.00187636 0.00217526 0.0024508 0.00270346 0.00293376 0.00314222 0.00332938 0.00349585 0.00364232 0.00376967 0.00387901 0.00397191 0.00405052 0.00411756 0.00417587 0.00422778 0.00427486 0.00431813 0.00435829 0.00439587 0.00443128 0.00446486 0.00449688 0.00452755 0.00455706 0.00458556 0.00461317 0.00463998 0.00466608 0.00469155 0.00471645 0.00474085 *table -1.59139E-08 -2.30207E-09 -1.7633E-12 3.58568E-10 4.05469E-10 4.29452E-10 4.50577E-10 4.71013E-10 4.91251E-10 5.11458E-10 5.31704E-10 5.52023E-10 5.72434E-10 5.92947E-10 6.13568E-10 6.34299E-10 6.55143E-10 6.76101E-10 6.97172E-10 7.18357E-10 7.39657E-10 7.61072E-10 7.82605E-10 8.04257E-10 8.26033E-10 8.47936E-10 8.69973E-10 8.92152E-10 9.14482E-10 9.36975E-10 9.59644E-10 9.82507E-10 1.00558E-09 1.0289E-09 1.05249E-09 1.07638E-09 1.10063E-09 1.12529E-09 1.15043E-09 -6.25275E-08 -9.52252E-09 -3.72189E-13 1.53653E-09 1.73658E-09 1.83886E-09 1.92895E-09 2.01609E-09 2.10239E-09 2.18856E-09 2.2749E-09 2.36154E-09 2.44858E-09 2.53605E-09 2.62398E-09 2.71238E-09 2.80126E-09 2.89062E-09 2.98046E-09 3.07079E-09 3.1616E-09 3.2529E-09 3.3447E-09 3.437E-09 3.52983E-09 3.62318E-09 3.7171E-09 3.81161E-09 3.90675E-09 4.00256E-09 4.09909E-09 4.1964E-09 4.29458E-09 4.39371E-09 4.49391E-09 4.5953E-09 4.69805E-09 4.80236E-09 4.90848E-09 -2.31644E-07 -3.81882E-08 -2.06646E-27 6.45856E-09 7.29924E-09 7.72892E-09 8.10735E-09 8.47339E-09 8.83589E-09 9.19781E-09 9.56041E-09 9.92432E-09 1.02899E-08 1.06572E-08 1.10265E-08 1.13977E-08 1.1771E-08 1.21462E-08 1.25235E-08 1.29028E-08 1.32841E-08 1.36674E-08 1.40529E-08 1.44404E-08 1.48301E-08 1.5222E-08 1.56162E-08 1.60128E-08 1.6412E-08 1.6814E-08 1.72189E-08 1.76269E-08 1.80384E-08 1.84537E-08 1.88731E-08 1.92972E-08 1.97265E-08 2.01617E-08 2.06036E-08 -7.88928E-07 -1.45058E-07 3.8483E-13 2.63905E-08 2.9827E-08 3.15813E-08 3.31258E-08 3.46196E-08 3.60988E-08 3.75755E-08 3.9055E-08 4.05397E-08 4.2031E-08 4.35297E-08 4.50361E-08 4.65504E-08 4.80729E-08 4.96035E-08 5.11423E-08 5.26893E-08 5.42444E-08 5.58078E-08 5.73795E-08 5.89597E-08 6.05486E-08 6.21464E-08 6.37534E-08 6.53702E-08 6.69972E-08 6.86351E-08 7.02845E-08 7.19464E-08 7.36217E-08 7.53117E-08 7.70177E-08 7.87413E-08 8.04845E-08 8.22497E-08 8.40396E-08 -2.43852E-06 -5.07893E-07 1.94707E-12 1.02639E-07 1.1603E-07 1.22837E-07 1.28823E-07 1.34611E-07 1.40341E-07 1.46061E-07 1.51791E-07 1.57541E-07 1.63315E-07 1.69118E-07 1.7495E-07 1.80812E-07 1.86706E-07 1.9263E-07 1.98586E-07 2.04573E-07 2.10591E-07 2.16641E-07 2.22722E-07 2.28836E-07 2.34982E-07 2.41162E-07 2.47378E-07 2.5363E-07 2.59921E-07 2.66253E-07 2.72628E-07 2.7905E-07 2.85521E-07 2.92047E-07 2.98631E-07 3.0528E-07 3.11999E-07 3.18796E-07 3.25679E-07 -6.88655E-06 -1.60802E-06 6.71706E-12 3.69593E-07 4.18157E-07 4.42513E-07 4.63855E-07 4.84466E-07 5.04859E-07 5.2521E-07 5.45591E-07 5.66039E-07 5.86572E-07 6.07201E-07 6.27932E-07 6.48768E-07 6.69711E-07 6.90762E-07 7.11921E-07 7.33188E-07 7.54563E-07 7.76047E-07 7.97641E-07 8.19347E-07 8.41166E-07 8.63103E-07 8.85161E-07 9.07346E-07 9.29664E-07 9.52123E-07 9.74731E-07 9.97499E-07 1.02044E-06 1.04356E-06 1.06688E-06 1.09041E-06 1.11418E-06 1.1382E-06 1.16251E-06 -1.78619E-05 -4.59917E-06 2.78234E-11 1.20429E-06 1.36632E-06 1.44443E-06 1.51216E-06 1.57736E-06 1.64178E-06 1.70601E-06 1.7703E-06 1.83477E-06 1.89949E-06 1.96449E-06 2.0298E-06 2.09542E-06 2.16136E-06 2.22762E-06 2.29421E-06 2.36113E-06 2.42837E-06 2.49594E-06 2.56384E-06 2.63207E-06 2.70066E-06 2.76959E-06 2.8389E-06 2.90859E-06 2.97868E-06 3.0492E-06 3.12017E-06 3.19162E-06 3.26359E-06 3.3361E-06 3.40921E-06 3.48296E-06 3.5574E-06 3.63259E-06 3.70861E-06 -4.15757E-05 -1.18811E-05 1.37726E-10 3.53479E-06 4.04372E-06 4.26676E-06 4.45481E-06 4.63432E-06 4.81107E-06 4.98697E-06 5.16281E-06 5.33899E-06 5.51571E-06 5.6931E-06 5.87122E-06 6.05011E-06 6.2298E-06 6.4103E-06 6.59162E-06 6.77375E-06 6.95671E-06 7.14051E-06 7.32514E-06 7.51063E-06 7.697E-06 7.88428E-06 8.0725E-06 8.26171E-06 8.45197E-06 8.64333E-06 8.83587E-06 9.02965E-06 9.22477E-06 9.42133E-06 9.61942E-06 9.81918E-06 1.00207E-05 1.02242E-05 1.04297E-05 -8.34763E-05 -2.69316E-05 4.869E-10 9.3813E-06 1.09751E-05 1.15583E-05 1.20184E-05 1.24489E-05 1.28695E-05 1.32862E-05 1.37017E-05 1.41173E-05 1.45335E-05 1.49508E-05 1.53695E-05 1.57896E-05 1.62113E-05 1.66345E-05 1.70594E-05 1.7486E-05 1.79143E-05 1.83442E-05 1.87759E-05 1.92094E-05 1.96448E-05 2.00821E-05 2.05213E-05 2.09628E-05 2.14065E-05 2.18526E-05 2.23012E-05 2.27527E-05 2.32071E-05 2.36647E-05 2.41257E-05 2.45905E-05 2.50592E-05 2.55323E-05 2.601E-05 -0.000142168 -5.15759E-05 1.14715E-09 2.20459E-05 2.71254E-05 2.86172E-05 2.96364E-05 3.05493E-05 3.14258E-05 3.22868E-05 3.31408E-05 3.39919E-05 3.48423E-05 3.56931E-05 3.65453E-05 3.73992E-05 3.82552E-05 3.91135E-05 3.99742E-05 4.08375E-05 4.17034E-05 4.2572E-05 4.34435E-05 4.43179E-05 4.51954E-05 4.60762E-05 4.69605E-05 4.78486E-05 4.87407E-05 4.96372E-05 5.05385E-05 5.1445E-05 5.2357E-05 5.32751E-05 5.41998E-05 5.51316E-05 5.60712E-05 5.70191E-05 5.7976E-05 -0.000209861 -8.36434E-05 2.19611E-09 4.40217E-05 5.88126E-05 6.2836E-05 6.49789E-05 6.67309E-05 6.83557E-05 6.99256E-05 7.14681E-05 7.29959E-05 7.45158E-05 7.60317E-05 7.75458E-05 7.90598E-05 8.05747E-05 8.20911E-05 8.36096E-05 8.51306E-05 8.66542E-05 8.81809E-05 8.97109E-05 9.12445E-05 9.2782E-05 9.43238E-05 9.58705E-05 9.74224E-05 9.89803E-05 0.000100545 0.000102117 0.000103696 0.000105285 0.000106884 0.000108493 0.000110115 0.000111749 0.000113397 0.000115061 -0.00027916 -0.000119045 3.80507E-09 7.40477E-05 0.000108297 0.000119414 0.000123975 0.000127138 0.000129889 0.000132469 0.000134964 0.000137411 0.000139829 0.000142229 0.000144617 0.000146998 0.000149374 0.000151747 0.000154119 0.000156491 0.000158863 0.000161237 0.000163612 0.00016599 0.000168371 0.000170756 0.000173146 0.000175542 0.000177945 0.000180356 0.000182776 0.000185207 0.00018765 0.000190107 0.000192579 0.000195068 0.000197577 0.000200106 0.000202657 -0.000345882 -0.000154511 6.22085E-09 0.000108253 0.000170176 0.000196773 0.000206909 0.000212559 0.000216967 0.000220908 0.000224623 0.000228213 0.000231727 0.00023519 0.000238618 0.000242022 0.000245408 0.000248782 0.000252146 0.000255502 0.000258853 0.000262201 0.000265545 0.000268889 0.000272232 0.000275577 0.000278925 0.000282277 0.000285635 0.000289001 0.000292376 0.000295765 0.000299167 0.000302586 0.000306025 0.000309486 0.000312971 0.000316484 0.000320027 -0.000408182 -0.000188238 9.76345E-09 0.000143131 0.000236468 0.00028683 0.000308653 0.000319009 0.000325957 0.000331725 0.000336965 0.000341922 0.000346707 0.000351381 0.000355978 0.000360519 0.000365018 0.000369486 0.000373929 0.000378352 0.000382759 0.000387153 0.000391536 0.00039591 0.000400278 0.000404642 0.000409004 0.000413366 0.000417731 0.000422101 0.00042648 0.000430871 0.000435277 0.000439701 0.000444146 0.000448618 0.000453119 0.000457653 0.000462225 -0.000465426 -0.000219454 1.48458E-08 0.000176618 0.000301797 0.000380281 0.000421148 0.000440378 0.000451466 0.000459782 0.00046695 0.000473536 0.000479782 0.00048581 0.000491688 0.000497459 0.00050315 0.000508779 0.000514359 0.000519899 0.000525407 0.000530887 0.000536344 0.000541781 0.000547202 0.00055261 0.000558008 0.000563399 0.000568788 0.000574177 0.000579571 0.000584974 0.00059039 0.000595824 0.00060128 0.000606765 0.000612282 0.000617836 0.000623434 -0.000517553 -0.000247937 2.20052E-08 0.000207783 0.00036356 0.000471088 0.000536124 0.000570015 0.000588072 0.000600123 0.000609812 0.000618377 0.000626314 0.000633858 0.000641139 0.000648233 0.000655188 0.000662037 0.000668801 0.000675498 0.000682137 0.000688729 0.000695281 0.000701797 0.000708284 0.000714745 0.000721185 0.000727609 0.000734022 0.000740427 0.000746831 0.000753238 0.000759654 0.000766086 0.000772539 0.00077902 0.000785534 0.00079209 0.000798692 -0.000564751 -0.000273718 3.19424E-08 0.00023632 0.000420741 0.000556481 0.000647622 0.000701418 0.000730664 0.000748416 0.000761536 0.000772575 0.000782509 0.000791776 0.000800607 0.000809131 0.000817432 0.000825562 0.000833559 0.000841449 0.000849249 0.000856975 0.000864638 0.000872245 0.000879804 0.000887322 0.000894805 0.000902259 0.000909689 0.000917102 0.000924505 0.000931903 0.000939304 0.000946715 0.000954143 0.000961597 0.000969084 0.000976612 0.00098419 -0.000607316 -0.000296938 4.55699E-08 0.000262221 0.000473087 0.000635467 0.000752584 0.000829241 0.000874342 0.000900779 0.000918741 0.000932972 0.000945323 0.000956586 0.000967152 0.000977242 0.000986987 0.000996474 0.00100576 0.00101489 0.00102388 0.00103276 0.00104155 0.00105026 0.0010589 0.00106748 0.00107601 0.00108449 0.00109293 0.00110134 0.00110973 0.0011181 0.00112647 0.00113484 0.00114322 0.00115163 0.00116006 0.00116853 0.00117705 -0.000645582 -0.000317776 6.40703E-08 0.000285608 0.00052069 0.000707863 0.000849855 0.000950159 0.00101465 0.00105351 0.00107843 0.00109691 0.00111226 0.00112587 0.00113842 0.00115024 0.00116156 0.00117249 0.00118314 0.00119355 0.00120378 0.00121385 0.00122379 0.00123362 0.00124335 0.001253 0.00126257 0.00127207 0.00128152 0.00129092 0.00130029 0.00130963 0.00131895 0.00132826 0.00133757 0.0013469 0.00135625 0.00136564 0.00137508 -0.000679887 -0.000336421 8.89716E-08 0.000306651 0.000563793 0.000773848 0.000939214 0.00106267 0.00114825 0.00120307 0.00123777 0.00126201 0.00128117 0.00129762 0.00131246 0.00132624 0.00133928 0.00135178 0.00136387 0.00137564 0.00138715 0.00139845 0.00140957 0.00142054 0.00143138 0.0014421 0.00145272 0.00146325 0.0014737 0.00148409 0.00149443 0.00150472 0.00151497 0.00152521 0.00153544 0.00154567 0.00155592 0.0015662 0.00157652 -0.00071056 -0.000353059 1.22239E-07 0.000325535 0.000602699 0.000833758 0.00102087 0.00116636 0.00127325 0.00134639 0.00139397 0.00142605 0.00145015 0.00147009 0.00148762 0.00150363 0.0015186 0.00153281 0.00154645 0.00155966 0.00157252 0.00158509 0.00159743 0.00160956 0.00162153 0.00163334 0.00164502 0.00165658 0.00166805 0.00167942 0.00169072 0.00170196 0.00171314 0.00172429 0.00173542 0.00174654 0.00175767 0.00176881 0.00178 -0.000737911 -0.000367863 1.66394E-07 0.000342446 0.00063773 0.000887994 0.00109519 0.00126138 0.00138896 0.00148138 0.00154443 0.00158685 0.00161742 0.0016417 0.00166247 0.00168106 0.00169819 0.00171429 0.00172962 0.00174437 0.00175865 0.00177256 0.00178616 0.0017995 0.00181262 0.00182554 0.0018383 0.0018509 0.00186338 0.00187574 0.001888 0.00190018 0.00191229 0.00192434 0.00193636 0.00194835 0.00196034 0.00197233 0.00198435 -0.000762229 -0.000380996 2.24656E-07 0.00035756 0.000669203 0.000936975 0.00116267 0.00134812 0.00149535 0.00160697 0.00168707 0.00174231 0.00178126 0.00181103 0.0018357 0.0018573 0.00187691 0.00189511 0.0019123 0.00192871 0.00194451 0.00195983 0.00197475 0.00198934 0.00200365 0.00201771 0.00203156 0.00204523 0.00205873 0.00207209 0.00208532 0.00209844 0.00211146 0.00212442 0.00213731 0.00215016 0.00216299 0.00217582 0.00218866 -0.000783779 -0.000392605 3.01131E-07 0.000371046 0.000697424 0.000981119 0.00122378 0.00142706 0.00159274 0.00172292 0.00182058 0.00189052 0.00193998 0.00197668 0.00200613 0.0020313 0.00205375 0.00207433 0.00209357 0.00211179 0.00212923 0.00214605 0.00216236 0.00217825 0.00219379 0.00220903 0.002224 0.00223875 0.00225329 0.00226765 0.00228186 0.00229592 0.00230987 0.00232372 0.00233749 0.00235119 0.00236486 0.00237851 0.00239215 -0.000802802 -0.000402826 4.01037E-07 0.000383058 0.000722681 0.00102082 0.00127901 0.00149875 0.00168163 0.00182943 0.00194443 0.0020301 0.00209199 0.00213733 0.00217265 0.00220208 0.00222782 0.0022511 0.00227262 0.00229283 0.00231205 0.00233047 0.00234826 0.00236552 0.00238235 0.0023988 0.00241493 0.00243078 0.00244639 0.00246177 0.00247696 0.00249198 0.00250685 0.0025216 0.00253624 0.0025508 0.00256529 0.00257975 0.00259418 -0.000819518 -0.000411777 5.30987E-07 0.000393743 0.000745243 0.00105647 0.00132884 0.00156373 0.00176257 0.00192692 0.00205862 0.00216028 0.00223596 0.00229168 0.0023342 0.00236872 0.00239831 0.00242467 0.00244875 0.00247117 0.00249231 0.00251247 0.00253184 0.00255055 0.00256873 0.00258645 0.00260378 0.00262077 0.00263746 0.00265388 0.00267007 0.00268606 0.00270187 0.00271752 0.00273303 0.00274844 0.00276376 0.00277901 0.00279423 -0.000834123 -0.000419565 6.99348E-07 0.000403234 0.000765363 0.00108842 0.00137371 0.00162251 0.00183612 0.00201593 0.00216349 0.00228083 0.00237098 0.00243856 0.00248974 0.00253037 0.00256448 0.00259436 0.00262133 0.0026462 0.00266947 0.00269151 0.00271257 0.00273283 0.00275243 0.00277148 0.00279005 0.00280822 0.00282603 0.00284352 0.00286074 0.00287771 0.00289446 0.00291102 0.00292742 0.00294368 0.00295982 0.00297588 0.00299188 -0.000846791 -0.000426283 9.16679E-07 0.000411658 0.000783275 0.001117 0.00141405 0.0016756 0.00190285 0.00209703 0.00225951 0.00239195 0.00249663 0.00257706 0.0026383 0.00268621 0.00272562 0.00275956 0.00278981 0.00281741 0.00284302 0.00286712 0.00289 0.00291191 0.00293303 0.00295347 0.00297335 0.00299274 0.00301171 0.00303031 0.00304857 0.00306654 0.00308426 0.00310174 0.00311903 0.00313615 0.00315312 0.00316998 0.00318676 -0.000857676 -0.00043201 1.19627E-06 0.000419133 0.000799194 0.00114253 0.00145025 0.00172347 0.00196328 0.0021708 0.00234724 0.00249402 0.00261293 0.00270662 0.00277905 0.00283547 0.00288109 0.00291972 0.00295367 0.00298433 0.00301254 0.00303888 0.00306375 0.00308744 0.00311016 0.00313209 0.00315334 0.00317401 0.00319418 0.00321391 0.00323326 0.00325226 0.00327096 0.00328939 0.00330758 0.00332556 0.00334337 0.00336104 0.00337859 -0.00086691 -0.000436813 1.55485E-06 0.00042577 0.000813326 0.00116529 0.0014827 0.00176657 0.00201793 0.00223779 0.00242726 0.00258754 0.00272013 0.00282707 0.00291139 0.00297743 0.00303027 0.0030743 0.00311247 0.00314655 0.00317763 0.00320644 0.00323347 0.00325908 0.00328353 0.00330703 0.00332973 0.00335174 0.00337317 0.00339408 0.00341454 0.0034346 0.00345431 0.0034737 0.00349281 0.00351168 0.00353034 0.00354881 0.00356715 -0.000874605 -0.000440746 2.01335E-06 0.000431677 0.000825859 0.00118555 0.00151172 0.00180532 0.00206728 0.00229856 0.00250013 0.00267309 0.00281868 0.00293855 0.00303503 0.00311154 0.0031726 0.00322283 0.00326577 0.00330368 0.00333796 0.00336948 0.00339887 0.00342655 0.00345287 0.00347804 0.00350227 0.0035257 0.00354844 0.00357059 0.0035922 0.00361336 0.0036341 0.00365448 0.00367454 0.0036943 0.00371382 0.00373313 0.00375225 -0.000880852 -0.000443847 2.59804E-06 0.000436956 0.000836975 0.00120358 0.00153766 0.00184011 0.0021118 0.0023536 0.00256641 0.00275121 0.00290909 0.00304139 0.00314994 0.00323743 0.00330759 0.00336486 0.00341321 0.00345541 0.00349322 0.00352773 0.00355969 0.00358963 0.00361795 0.00364492 0.00367079 0.00369571 0.00371983 0.00374326 0.00376608 0.00378837 0.00381019 0.00383159 0.00385261 0.0038733 0.00389369 0.00391383 0.00393376 -0.000885719 -0.000446141 3.34172E-06 0.000441713 0.000846845 0.0012196 0.00156082 0.00187132 0.0021519 0.0024034 0.00262663 0.00282247 0.00299189 0.00313602 0.00325636 0.00335498 0.0034349 0.00350002 0.00355445 0.00360144 0.00364315 0.00368094 0.00371571 0.00374811 0.00377858 0.00380749 0.0038351 0.00386161 0.00388719 0.00391197 0.00393605 0.00395952 0.00398244 0.00400489 0.0040269 0.00404854 0.00406983 0.00409083 0.00411157 -0.000889255 -0.000447637 4.28531E-06 0.00044605 0.000855638 0.00123386 0.00158148 0.00189928 0.00218801 0.00244843 0.00268129 0.00288741 0.00306764 0.00322297 0.00335464 0.0034643 0.00355432 0.003628 0.0036892 0.00374151 0.00378752 0.00382891 0.00386675 0.00390181 0.00393462 0.0039656 0.00399507 0.00402327 0.0040504 0.0040766 0.004102 0.00412669 0.00415077 0.00417431 0.00419735 0.00421995 0.00424217 0.00426405 0.00428562 -0.000891481 -0.000448326 5.47979E-06 0.000450077 0.00086352 0.00124656 0.00159994 0.00192435 0.00222051 0.00248912 0.00273089 0.00294655 0.00313689 0.00330276 0.00344523 0.00356565 0.00366588 0.00374859 0.00381723 0.00387543 0.00392617 0.00397148 0.00401265 0.00405059 0.00408593 0.00411915 0.00415061 0.00418061 0.00420937 0.00423707 0.00426385 0.00428984 0.00431512 0.00433978 0.00436388 0.00438749 0.00441066 0.00443343 0.00445586 -0.000892393 -0.000448179 6.98854E-06 0.000453907 0.000870657 0.00125795 0.00161645 0.00194684 0.00224977 0.0025259 0.00277588 0.0030004 0.00320016 0.00337594 0.00352865 0.00365941 0.00376974 0.00386177 0.00393838 0.00400303 0.00405894 0.00410851 0.0041533 0.00419435 0.00423241 0.00426803 0.00430163 0.00433355 0.00436405 0.00439334 0.00442158 0.00444891 0.00447545 0.00450128 0.00452649 0.00455114 0.00457528 0.00459898 0.00462229 -0.000891957 -0.000447145 8.89027E-06 0.000457668 0.000877221 0.00126822 0.00163129 0.00196706 0.00227615 0.00255916 0.00281672 0.00304944 0.00325797 0.00344303 0.00360541 0.00374606 0.00386622 0.00396761 0.00405259 0.00412423 0.00418576 0.00423993 0.0042886 0.00433301 0.004374 0.0044122 0.00444809 0.00448206 0.00451441 0.00454537 0.00457515 0.00460391 0.00463176 0.00465881 0.00468517 0.00471089 0.00473605 0.0047607 0.00478491 -0.000890105 -0.000445145 1.12825E-05 0.000461497 0.000883396 0.00127761 0.00164473 0.00198534 0.00230001 0.00258932 0.00285383 0.00309414 0.00331084 0.00350457 0.00367604 0.00382608 0.00395572 0.00406635 0.0041599 0.00423896 0.00430659 0.00436572 0.00441855 0.00446653 0.00451065 0.00455161 0.00458996 0.00462611 0.00466043 0.00469318 0.00472458 0.00475483 0.00478406 0.00481239 0.00483994 0.00486678 0.00489299 0.00491863 0.00494377 -0.000886729 -0.00044207 1.42858E-05 0.000465553 0.000889376 0.00128635 0.00165704 0.00200197 0.0023217 0.00261675 0.00288767 0.00313499 0.00335926 0.00356108 0.00374109 0.0039 0.00403871 0.00415835 0.0042605 0.00434728 0.00442143 0.00448589 0.00454315 0.00459493 0.00464238 0.00468628 0.00472724 0.00476573 0.00480214 0.00483678 0.0048699 0.00490172 0.0049324 0.00496207 0.00499086 0.00501886 0.00504616 0.00507283 0.00509893 *table -7.90382E-08 -1.21933E-08 1.70711E-12 1.98446E-09 2.23781E-09 2.36898E-09 2.48471E-09 2.59667E-09 2.70754E-09 2.81823E-09 2.92912E-09 3.04042E-09 3.15221E-09 3.26456E-09 3.37749E-09 3.49103E-09 3.60518E-09 3.71995E-09 3.83535E-09 3.95136E-09 4.068E-09 4.18528E-09 4.30319E-09 4.42175E-09 4.54099E-09 4.66092E-09 4.78159E-09 4.90303E-09 5.02529E-09 5.14843E-09 5.27254E-09 5.3977E-09 5.52402E-09 5.65164E-09 5.78072E-09 5.91146E-09 6.04409E-09 6.17894E-09 6.31638E-09 -2.80375E-07 -4.67203E-08 3.09825E-12 7.97142E-09 8.98962E-09 9.5166E-09 9.9815E-09 1.04312E-08 1.08766E-08 1.13212E-08 1.17666E-08 1.22136E-08 1.26626E-08 1.31138E-08 1.35674E-08 1.40234E-08 1.44818E-08 1.49427E-08 1.54061E-08 1.5872E-08 1.63404E-08 1.68113E-08 1.72847E-08 1.77607E-08 1.82394E-08 1.87209E-08 1.92052E-08 1.96925E-08 2.01831E-08 2.06771E-08 2.11748E-08 2.16765E-08 2.21826E-08 2.26936E-08 2.321E-08 2.37325E-08 2.42619E-08 2.47991E-08 2.53455E-08 -9.23594E-07 -1.70537E-07 3.4704E-12 3.12223E-08 3.52131E-08 3.72761E-08 3.90953E-08 4.0855E-08 4.25974E-08 4.43367E-08 4.60793E-08 4.78279E-08 4.95843E-08 5.13493E-08 5.31234E-08 5.49068E-08 5.66998E-08 5.85024E-08 6.03147E-08 6.21365E-08 6.3968E-08 6.58093E-08 6.76604E-08 6.95215E-08 7.13929E-08 7.32749E-08 7.51679E-08 7.70724E-08 7.89892E-08 8.09191E-08 8.28628E-08 8.48217E-08 8.67969E-08 8.879E-08 9.08028E-08 9.28376E-08 9.4897E-08 9.69841E-08 9.91029E-08 -2.79233E-06 -5.79117E-07 3.85363E-12 1.17038E-07 1.32026E-07 1.39742E-07 1.46538E-07 1.53109E-07 1.59615E-07 1.66108E-07 1.72613E-07 1.7914E-07 1.85695E-07 1.92281E-07 1.98902E-07 2.05556E-07 2.12246E-07 2.18971E-07 2.25732E-07 2.32528E-07 2.39359E-07 2.46227E-07 2.5313E-07 2.6007E-07 2.67048E-07 2.74064E-07 2.81121E-07 2.8822E-07 2.95363E-07 3.02554E-07 3.09794E-07 3.17089E-07 3.24442E-07 3.31858E-07 3.39343E-07 3.46904E-07 3.5455E-07 3.62289E-07 3.70134E-07 -7.77347E-06 -1.79767E-06 5.39533E-12 4.09734E-07 4.62567E-07 4.894E-07 5.12955E-07 5.35703E-07 5.58212E-07 5.80671E-07 6.03164E-07 6.25729E-07 6.48388E-07 6.71153E-07 6.9403E-07 7.17024E-07 7.40136E-07 7.63367E-07 7.86717E-07 8.10187E-07 8.33776E-07 8.57486E-07 8.81318E-07 9.05273E-07 9.29355E-07 9.53568E-07 9.77915E-07 1.0024E-06 1.02704E-06 1.05184E-06 1.0768E-06 1.10194E-06 1.12727E-06 1.15281E-06 1.17858E-06 1.20459E-06 1.23087E-06 1.25745E-06 1.28436E-06 -1.99235E-05 -5.08313E-06 9.96521E-12 1.31162E-06 1.48454E-06 1.56905E-06 1.64248E-06 1.71317E-06 1.78301E-06 1.85265E-06 1.92235E-06 1.99225E-06 2.06241E-06 2.13288E-06 2.20368E-06 2.27482E-06 2.34631E-06 2.41815E-06 2.49034E-06 2.56289E-06 2.63579E-06 2.70905E-06 2.78267E-06 2.85666E-06 2.93103E-06 3.00578E-06 3.08093E-06 3.15651E-06 3.23252E-06 3.309E-06 3.38598E-06 3.46349E-06 3.54157E-06 3.62026E-06 3.6996E-06 3.77967E-06 3.8605E-06 3.94219E-06 4.02481E-06 -4.58611E-05 -1.30337E-05 2.94915E-11 3.81396E-06 4.3499E-06 4.58861E-06 4.79052E-06 4.98332E-06 5.17316E-06 5.36207E-06 5.55092E-06 5.74013E-06 5.92992E-06 6.12043E-06 6.31173E-06 6.50387E-06 6.69686E-06 6.89072E-06 7.08546E-06 7.28109E-06 7.47761E-06 7.67502E-06 7.87334E-06 8.07259E-06 8.27278E-06 8.47397E-06 8.67617E-06 8.87945E-06 9.08385E-06 9.28946E-06 9.49634E-06 9.70458E-06 9.91428E-06 1.01255E-05 1.03385E-05 1.05533E-05 1.077E-05 1.09889E-05 1.12101E-05 -9.1456E-05 -2.93983E-05 1.31326E-10 1.00719E-05 1.17281E-05 1.23464E-05 1.28371E-05 1.32969E-05 1.3746E-05 1.41911E-05 1.46349E-05 1.50787E-05 1.55232E-05 1.5969E-05 1.64161E-05 1.68648E-05 1.73152E-05 1.77673E-05 1.82212E-05 1.86769E-05 1.91343E-05 1.95936E-05 2.00548E-05 2.05179E-05 2.0983E-05 2.14502E-05 2.19195E-05 2.23911E-05 2.28652E-05 2.33419E-05 2.38213E-05 2.43038E-05 2.47894E-05 2.52785E-05 2.57714E-05 2.62683E-05 2.67695E-05 2.72755E-05 2.77866E-05 -0.0001555 -5.62456E-05 4.64574E-10 2.36212E-05 2.88351E-05 3.03921E-05 3.14714E-05 3.24412E-05 3.33728E-05 3.42883E-05 3.51964E-05 3.61015E-05 3.70059E-05 3.79109E-05 3.88172E-05 3.97255E-05 4.0636E-05 4.1549E-05 4.24646E-05 4.33829E-05 4.43041E-05 4.52282E-05 4.61554E-05 4.70857E-05 4.80193E-05 4.89565E-05 4.98975E-05 5.08425E-05 5.17918E-05 5.27459E-05 5.37051E-05 5.46699E-05 5.56407E-05 5.6618E-05 5.76024E-05 5.85946E-05 5.95951E-05 6.06047E-05 6.16241E-05 -0.000229739 -9.13479E-05 1.1205E-09 4.72788E-05 6.24536E-05 6.65559E-05 6.88013E-05 7.06532E-05 7.23744E-05 7.40388E-05 7.56748E-05 7.72957E-05 7.89084E-05 8.0517E-05 8.2124E-05 8.3731E-05 8.5339E-05 8.69487E-05 8.85608E-05 9.01755E-05 9.17932E-05 9.34142E-05 9.50387E-05 9.66672E-05 9.82999E-05 9.99373E-05 0.00010158 0.000103228 0.000104883 0.000106545 0.000108214 0.000109893 0.000111581 0.000113279 0.000114989 0.000116712 0.000118449 0.000120201 0.00012197 -0.000305972 -0.000130252 2.19426E-09 7.98946E-05 0.000115452 0.000126601 0.000131292 0.000134612 0.000137516 0.000140246 0.000142889 0.000145482 0.000148045 0.00015059 0.000153123 0.000155648 0.000158169 0.000160687 0.000163204 0.00016572 0.000168238 0.000170757 0.000173278 0.000175802 0.00017833 0.000180862 0.0001834 0.000185943 0.000188495 0.000191055 0.000193625 0.000196207 0.000198802 0.000201412 0.000204038 0.000206683 0.000209348 0.000212036 0.000214748 -0.000379404 -0.000169304 3.86077E-09 0.000117313 0.000182525 0.000209359 0.000219549 0.000225401 0.000230031 0.000234189 0.000238118 0.000241918 0.000245639 0.000249309 0.000252943 0.000256553 0.000260145 0.000263724 0.000267293 0.000270855 0.000274411 0.000277964 0.000281515 0.000285064 0.000288614 0.000292165 0.00029572 0.00029928 0.000302846 0.000306422 0.000310008 0.000313607 0.000317222 0.000320856 0.00032451 0.000328188 0.000331893 0.000335627 0.000339394 -0.000447877 -0.000206437 6.36574E-09 0.00015562 0.000254981 0.000306698 0.00032844 0.000338955 0.000346182 0.000352241 0.000357768 0.000363005 0.000368067 0.000373016 0.000377885 0.000382698 0.000387468 0.000392207 0.00039692 0.000401613 0.000406289 0.000410952 0.000415604 0.000420248 0.000424886 0.000429519 0.000434151 0.000438784 0.000443421 0.000448064 0.000452716 0.000457382 0.000462064 0.000466766 0.000471492 0.000476245 0.000481031 0.000485853 0.000490716 -0.000510638 -0.000240745 1.00319E-08 0.00019244 0.000326633 0.00040853 0.000449647 0.000468839 0.000480197 0.000488866 0.000496394 0.000503333 0.000509925 0.000516296 0.000522514 0.000528623 0.000534651 0.000540616 0.000546531 0.000552405 0.000558247 0.00056406 0.00056985 0.000575619 0.000581373 0.000587113 0.000592844 0.000598569 0.000604291 0.000610015 0.000615744 0.000621484 0.000627239 0.000633014 0.000638814 0.000644644 0.00065051 0.000656417 0.00066237 -0.000567601 -0.000271959 1.52817E-08 0.000226671 0.000394398 0.000507846 0.000574351 0.000608078 0.000626246 0.000638663 0.000648773 0.000657759 0.00066611 0.000674064 0.00068175 0.000689246 0.000696601 0.000703848 0.000711009 0.000718101 0.000725136 0.000732122 0.000739067 0.000745977 0.000752855 0.000759709 0.000766541 0.000773358 0.000780163 0.000786962 0.00079376 0.000800563 0.000807378 0.00081421 0.000821065 0.000827952 0.000834876 0.000841844 0.000848864 -0.000618979 -0.000300109 2.26681E-08 0.000257937 0.000457042 0.000601278 0.000695784 0.000749861 0.000778942 0.000796956 0.00081052 0.000822036 0.000832446 0.000842184 0.000851479 0.000860465 0.000869224 0.000877811 0.000886263 0.000894605 0.000902858 0.000911035 0.000919147 0.000927203 0.00093521 0.000943176 0.000951106 0.000959007 0.000966885 0.000974746 0.000982597 0.000990446 0.0009983 0.00100617 0.00101405 0.00102197 0.00102992 0.00103792 0.00104597 -0.000665113 -0.000325355 3.29135E-08 0.00028622 0.000514238 0.000687573 0.00081023 0.000888353 0.000933218 0.000959652 0.000977998 0.000992734 0.00100561 0.0010174 0.00102848 0.00103909 0.00104934 0.00105934 0.00106913 0.00107876 0.00108826 0.00109765 0.00110694 0.00111615 0.00112529 0.00113436 0.00114339 0.00115236 0.0011613 0.00117021 0.0011791 0.00118797 0.00119684 0.00120572 0.00121461 0.00122352 0.00123247 0.00124146 0.00125051 -0.00070639 -0.000347904 4.69584E-08 0.000311652 0.000566079 0.000766472 0.000916191 0.00101964 0.0010844 0.00112296 0.00114806 0.00116701 0.00118291 0.00119709 0.0012102 0.00122259 0.00123446 0.00124595 0.00125715 0.00126811 0.00127889 0.00128951 0.0013 0.00131038 0.00132065 0.00133084 0.00134095 0.001351 0.00136099 0.00137094 0.00138085 0.00139073 0.0014006 0.00141046 0.00142032 0.00143021 0.00144012 0.00145008 0.00146009 -0.000743203 -0.000367976 6.6022E-08 0.00033443 0.000612838 0.000838158 0.00101333 0.00114179 0.00122874 0.00128326 0.00131781 0.00134239 0.00136208 0.00137913 0.00139457 0.00140894 0.00142258 0.00143567 0.00144836 0.00146072 0.00147282 0.00148471 0.00149641 0.00150797 0.00151939 0.0015307 0.0015419 0.00155302 0.00156405 0.00157503 0.00158594 0.00159682 0.00160766 0.00161849 0.00162931 0.00164014 0.00165099 0.00166188 0.00167281 -0.000775933 -0.000385788 9.16784E-08 0.000354768 0.000654863 0.000903006 0.00110183 0.00125421 0.00136394 0.00143729 0.00148445 0.0015166 0.00154115 0.00156167 0.00157982 0.00159646 0.00161205 0.00162688 0.00164115 0.00165498 0.00166847 0.00168166 0.00169462 0.00170738 0.00171997 0.0017324 0.0017447 0.00175688 0.00176896 0.00178096 0.00179287 0.00180473 0.00181654 0.00182831 0.00184007 0.00185182 0.00186359 0.00187538 0.00188721 -0.000804941 -0.000401542 1.25952E-07 0.000372877 0.000692521 0.000961474 0.00118212 0.00135697 0.001489 0.00158263 0.00164533 0.00168748 0.00171829 0.0017431 0.00176448 0.0017837 0.00180148 0.00181823 0.00183421 0.00184961 0.00186454 0.00187911 0.00189336 0.00190735 0.00192112 0.00193469 0.0019481 0.00196136 0.00197448 0.00198749 0.00200041 0.00201324 0.002026 0.00203871 0.00205138 0.00206404 0.00207669 0.00208936 0.00210207 -0.000830561 -0.000415429 1.7144E-07 0.000388963 0.000726178 0.00101404 0.00125473 0.00145048 0.00160377 0.00171791 0.00179816 0.0018529 0.00189179 0.00192195 0.00194719 0.00196944 0.0019897 0.00200857 0.00202642 0.0020435 0.00205997 0.00207597 0.00209156 0.00210683 0.00212181 0.00213655 0.00215108 0.00216542 0.0021796 0.00219363 0.00220754 0.00222133 0.00223504 0.00224868 0.00226226 0.0022758 0.00228933 0.00230286 0.00231641 -0.000853102 -0.000427619 2.31459E-07 0.000403218 0.000756185 0.00106118 0.00132022 0.00153529 0.00170857 0.00184265 0.00194137 0.00201092 0.00205999 0.00209685 0.00212678 0.00215256 0.00217566 0.00219691 0.00221682 0.00223572 0.00225385 0.00227136 0.00228836 0.00230495 0.00232119 0.00233712 0.00235279 0.00236824 0.00238348 0.00239854 0.00241344 0.0024282 0.00244285 0.00245741 0.00247189 0.00248631 0.00250069 0.00251506 0.00252944 -0.000872845 -0.000438272 3.10238E-07 0.000415819 0.000782873 0.00110336 0.00137913 0.001612 0.0018039 0.001957 0.00207418 0.00215996 0.0022213 0.00226649 0.00230212 0.00233209 0.00235846 0.0023824 0.00240459 0.00242549 0.0024454 0.00246452 0.00248302 0.00250099 0.00251853 0.00253569 0.00255254 0.0025691 0.00258542 0.00260152 0.00261743 0.00263317 0.00264876 0.00266423 0.0026796 0.00269489 0.00271012 0.00272532 0.00274051 -0.000890046 -0.000447526 4.13149E-07 0.000426933 0.000806549 0.00114101 0.00143201 0.00168123 0.00189039 0.00206137 0.00219648 0.00229904 0.00237431 0.00242959 0.00247217 0.00250711 0.00253729 0.00256428 0.00258903 0.00261213 0.00263398 0.00265484 0.00267491 0.00269434 0.00271324 0.00273168 0.00274974 0.00276745 0.00278487 0.00280203 0.00281895 0.00283567 0.00285221 0.0028686 0.00288486 0.00290101 0.00291709 0.00293311 0.0029491 -0.000904933 -0.000455509 5.47004E-07 0.000436711 0.0008275 0.00117453 0.00147937 0.00174355 0.00196866 0.00215634 0.00230852 0.00242776 0.00251796 0.00258498 0.00263593 0.0026768 0.0027114 0.00274189 0.00276951 0.00279505 0.00281901 0.00284175 0.00286351 0.00288449 0.00290482 0.00292459 0.0029439 0.0029628 0.00298135 0.00299958 0.00301754 0.00303526 0.00305275 0.00307007 0.00308722 0.00310424 0.00312115 0.00313798 0.00315476 -0.000917713 -0.000462331 7.2042E-07 0.000445294 0.000845991 0.0012043 0.00152168 0.00179955 0.00203934 0.00224254 0.00241081 0.0025462 0.00265166 0.00273168 0.00279244 0.00284035 0.00288012 0.00291461 0.00294548 0.00297372 0.00300001 0.00302479 0.00304838 0.00307101 0.00309284 0.00311402 0.00313463 0.00315476 0.00317447 0.00319381 0.00321283 0.00323155 0.00325002 0.00326827 0.00328632 0.0033042 0.00332195 0.0033396 0.00335716 -0.000928565 -0.000468088 9.44268E-07 0.000452814 0.000862267 0.00123069 0.00155941 0.00184976 0.00210305 0.00232062 0.00250394 0.00265473 0.00277528 0.00286899 0.00294087 0.00299701 0.00304281 0.0030819 0.00311642 0.0031477 0.00317656 0.00320357 0.00322913 0.00325353 0.00327697 0.00329962 0.0033216 0.00334301 0.00336392 0.0033844 0.0034045 0.00342426 0.00344372 0.00346291 0.00348187 0.00350063 0.00351922 0.00353767 0.00355602 -0.00093765 -0.000472864 1.23224E-06 0.000459393 0.000876554 0.001254 0.00159297 0.00189468 0.00216035 0.0023912 0.00258855 0.00275387 0.00288902 0.00299661 0.00308053 0.0031461 0.00319888 0.00324324 0.00328191 0.00331657 0.00334828 0.00337774 0.00340544 0.00343174 0.00345689 0.00348111 0.00350453 0.00352728 0.00354944 0.0035711 0.00359232 0.00361313 0.0036336 0.00365376 0.00367364 0.00369328 0.00371272 0.00373199 0.00375113 -0.000945104 -0.000476725 1.60154E-06 0.000465146 0.000889063 0.00127454 0.00162274 0.00193478 0.00221178 0.00245489 0.00266527 0.00284422 0.0029933 0.00311457 0.00321103 0.00328702 0.0033478 0.00339817 0.00344153 0.00347998 0.00351484 0.00354699 0.00357702 0.00360538 0.00363237 0.00365825 0.0036832 0.00370735 0.00373082 0.00375371 0.00377607 0.00379798 0.00381948 0.00384063 0.00386145 0.00388199 0.0039023 0.00392239 0.00394231 -0.000951041 -0.000479728 2.07377E-06 0.000470182 0.000899991 0.0012926 0.00164909 0.0019705 0.00225787 0.00251225 0.0027347 0.00292639 0.00308864 0.00322315 0.00333225 0.00341936 0.00348908 0.00354628 0.00359492 0.0036376 0.00367596 0.00371106 0.00374364 0.00377422 0.0038032 0.00383085 0.00385742 0.00388305 0.0039079 0.00393206 0.00395562 0.00397866 0.00400122 0.00402338 0.00404517 0.00406663 0.0040878 0.00410873 0.00412946 -0.000955555 -0.000481911 2.67593E-06 0.00047461 0.000909524 0.00130844 0.00167236 0.00200226 0.00229909 0.00256382 0.00279744 0.00300099 0.00317564 0.00332279 0.00344432 0.00354291 0.00362235 0.0036872 0.00374176 0.00378915 0.00383136 0.00386971 0.00390507 0.00393808 0.00396919 0.00399875 0.00402704 0.00405424 0.00408053 0.00410603 0.00413084 0.00415504 0.00417871 0.00420191 0.00422468 0.00424708 0.00426915 0.00429093 0.00431247 -0.000958716 -0.0004833 3.4418E-06 0.000478535 0.000917838 0.00132231 0.00169287 0.00203043 0.00233588 0.00261012 0.00285405 0.00306863 0.00325488 0.00341402 0.00354758 0.00365768 0.00374737 0.00382063 0.00388179 0.00393438 0.00398085 0.00402276 0.00406116 0.00409679 0.00413021 0.00416182 0.00419194 0.00422081 0.00424862 0.00427552 0.00430164 0.00432706 0.00435187 0.00437615 0.00439994 0.0044233 0.00444628 0.00446893 0.0044913 -0.00096057 -0.000483903 4.41354E-06 0.000482063 0.000925107 0.00133444 0.00171092 0.00205539 0.00236868 0.00265163 0.00290507 0.00312987 0.00332696 0.00349739 0.00364247 0.00376389 0.00386407 0.00394636 0.00401477 0.00407312 0.00412424 0.00417003 0.00421174 0.00425022 0.00428613 0.00431995 0.00435203 0.00438268 0.0044121 0.00444048 0.00446796 0.00449466 0.00452066 0.00454605 0.00457089 0.00459524 0.00461916 0.00464271 0.00466591 -0.00096114 -0.00048371 5.64361E-06 0.000485306 0.000931499 0.00134506 0.00172679 0.00207747 0.00239788 0.00268879 0.00295099 0.00318526 0.00339245 0.00357349 0.0037295 0.00386188 0.00397257 0.00406429 0.00414056 0.0042052 0.0042614 0.00431142 0.0043567 0.00439828 0.00443688 0.00447306 0.00450725 0.00453979 0.00457092 0.00460087 0.00462978 0.00465781 0.00468504 0.00471159 0.00473752 0.0047629 0.00478779 0.00481224 0.00483631 -0.000960421 -0.000482689 7.19729E-06 0.00048838 0.000937186 0.0013544 0.00174076 0.00209701 0.00242387 0.00272206 0.0029923 0.00323532 0.00345191 0.00364289 0.00380923 0.00395212 0.00407313 0.00417446 0.00425907 0.00433053 0.00439225 0.00444682 0.00449597 0.00454088 0.00458238 0.00462111 0.00465756 0.00469211 0.00472506 0.00475666 0.00478709 0.0048165 0.00484504 0.00487279 0.00489984 0.00492628 0.00495217 0.00497757 0.00500253 -0.000958374 -0.000480788 9.15558E-06 0.000491415 0.000942344 0.00136268 0.00175311 0.00211434 0.00244702 0.00275184 0.00302946 0.00328058 0.00350588 0.00370615 0.00388222 0.00403511 0.00416613 0.00427705 0.00437032 0.00444909 0.00451676 0.00457622 0.00462951 0.00467799 0.0047226 0.00476406 0.00480292 0.00483963 0.00487452 0.00490786 0.00493989 0.00497077 0.00500066 0.00502967 0.0050579 0.00508544 0.00511236 0.00513873 0.0051646 -0.000954928 -0.000477925 1.16189E-05 0.000494552 0.000947158 0.00137013 0.00176412 0.00212976 0.0024677 0.00277855 0.00306294 0.00332151 0.0035549 0.00376382 0.00394901 0.00411138 0.00425201 0.00437236 0.00447443 0.00456089 0.00463494 0.00469963 0.00475733 0.0048096 0.00485753 0.00490192 0.00494336 0.00498237 0.00501931 0.00505452 0.00508823 0.00512066 0.00515196 0.00518229 0.00521174 0.00524042 0.00526841 0.00529579 0.00532261 -0.000949972 -0.000473986 1.47113E-05 0.000497953 0.000951829 0.00137699 0.00177406 0.00214362 0.00248627 0.00280259 0.00309317 0.00335859 0.00359948 0.00381645 0.00401019 0.00418149 0.00433129 0.0044608 0.00457164 0.00466605 0.00474686 0.00481713 0.00487949 0.00493578 0.00498723 0.00503471 0.00507891 0.00512036 0.0051595 0.00519667 0.00523217 0.00526623 0.00529903 0.00533073 0.00536146 0.00539133 0.00542043 0.00544884 0.00547664 tmpk8ny_4pz/examples/xspice/table/bsim4n-2d-2.table0000644000175000017500000032030313546075722022230 0ustar carstencarsten*table for nmos bsim 4 *x 96 *y 96 *x row -0.1 -0.08 -0.06 -0.04 -0.02 6.93889E-18 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2 0.22 0.24 0.26 0.28 0.3 0.32 0.34 0.36 0.38 0.4 0.42 0.44 0.46 0.48 0.5 0.52 0.54 0.56 0.58 0.6 0.62 0.64 0.66 0.68 0.7 0.72 0.74 0.76 0.78 0.8 0.82 0.84 0.86 0.88 0.9 0.92 0.94 0.96 0.98 1 1.02 1.04 1.06 1.08 1.1 1.12 1.14 1.16 1.18 1.2 1.22 1.24 1.26 1.28 1.3 1.32 1.34 1.36 1.38 1.4 1.42 1.44 1.46 1.48 1.5 1.52 1.54 1.56 1.58 1.6 1.62 1.64 1.66 1.68 1.7 1.72 1.74 1.76 1.78 1.8 *y column -0.1 -0.08 -0.06 -0.04 -0.02 6.93889E-18 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2 0.22 0.24 0.26 0.28 0.3 0.32 0.34 0.36 0.38 0.4 0.42 0.44 0.46 0.48 0.5 0.52 0.54 0.56 0.58 0.6 0.62 0.64 0.66 0.68 0.7 0.72 0.74 0.76 0.78 0.8 0.82 0.84 0.86 0.88 0.9 0.92 0.94 0.96 0.98 1 1.02 1.04 1.06 1.08 1.1 1.12 1.14 1.16 1.18 1.2 1.22 1.24 1.26 1.28 1.3 1.32 1.34 1.36 1.38 1.4 1.42 1.44 1.46 1.48 1.5 1.52 1.54 1.56 1.58 1.6 1.62 1.64 1.66 1.68 1.7 1.72 1.74 1.76 1.78 1.8 -1.59139E-08 -7.51975E-09 -3.46062E-09 -1.48954E-09 -4.98778E-10 -1.7633E-12 2.3399E-10 3.34913E-10 3.73876E-10 3.92833E-10 4.05469E-10 4.15762E-10 4.25029E-10 4.33785E-10 4.42262E-10 4.50577E-10 4.58794E-10 4.6695E-10 4.75069E-10 4.83166E-10 4.91251E-10 4.99332E-10 5.07415E-10 5.15502E-10 5.23598E-10 5.31704E-10 5.39821E-10 5.47952E-10 5.56098E-10 5.64258E-10 5.72434E-10 5.80627E-10 5.88836E-10 5.97063E-10 6.05306E-10 6.13568E-10 6.21847E-10 6.30144E-10 6.38459E-10 6.46792E-10 6.55143E-10 6.63513E-10 6.719E-10 6.80306E-10 6.8873E-10 6.97172E-10 7.05632E-10 7.14111E-10 7.22608E-10 7.31123E-10 7.39657E-10 7.48209E-10 7.5678E-10 7.65369E-10 7.73978E-10 7.82605E-10 7.91251E-10 7.99917E-10 8.08602E-10 8.17307E-10 8.26033E-10 8.34778E-10 8.43545E-10 8.52332E-10 8.61142E-10 8.69973E-10 8.78827E-10 8.87705E-10 8.96606E-10 9.05531E-10 9.14482E-10 9.23459E-10 9.32463E-10 9.41494E-10 9.50554E-10 9.59644E-10 9.68765E-10 9.77918E-10 9.87105E-10 9.96326E-10 1.00558E-09 1.01488E-09 1.02422E-09 1.0336E-09 1.04302E-09 1.05249E-09 1.06201E-09 1.07158E-09 1.0812E-09 1.09088E-09 1.10063E-09 1.11044E-09 1.12032E-09 1.13027E-09 1.14031E-09 1.15043E-09 -2.76589E-08 -1.31798E-08 -6.10546E-09 -2.64101E-09 -8.86825E-10 -1.05093E-12 4.2061E-10 6.01118E-10 6.70807E-10 7.04714E-10 7.27314E-10 7.45722E-10 7.62296E-10 7.77956E-10 7.93118E-10 8.0799E-10 8.22685E-10 8.37271E-10 8.51791E-10 8.66272E-10 8.80733E-10 8.95186E-10 9.09641E-10 9.24106E-10 9.38584E-10 9.53081E-10 9.67599E-10 9.82141E-10 9.96708E-10 1.0113E-09 1.02592E-09 1.04058E-09 1.05526E-09 1.06997E-09 1.08471E-09 1.09949E-09 1.1143E-09 1.12913E-09 1.144E-09 1.15891E-09 1.17384E-09 1.18881E-09 1.20381E-09 1.21884E-09 1.23391E-09 1.24901E-09 1.26414E-09 1.2793E-09 1.29449E-09 1.30972E-09 1.32498E-09 1.34028E-09 1.35561E-09 1.37097E-09 1.38636E-09 1.40179E-09 1.41725E-09 1.43275E-09 1.44828E-09 1.46384E-09 1.47945E-09 1.49508E-09 1.51076E-09 1.52647E-09 1.54222E-09 1.55802E-09 1.57385E-09 1.58972E-09 1.60563E-09 1.62159E-09 1.63759E-09 1.65364E-09 1.66973E-09 1.68588E-09 1.70207E-09 1.71832E-09 1.73462E-09 1.75098E-09 1.76739E-09 1.78387E-09 1.80041E-09 1.81701E-09 1.83369E-09 1.85044E-09 1.86727E-09 1.88417E-09 1.90116E-09 1.91824E-09 1.93541E-09 1.95269E-09 1.97006E-09 1.98755E-09 2.00516E-09 2.0229E-09 2.04077E-09 2.05878E-09 -4.77406E-08 -2.29795E-08 -1.07311E-08 -4.6712E-09 -1.57578E-09 -5.52518E-13 7.52449E-10 1.07481E-09 1.19926E-09 1.25981E-09 1.30017E-09 1.33304E-09 1.36264E-09 1.3906E-09 1.41767E-09 1.44423E-09 1.47047E-09 1.49652E-09 1.52245E-09 1.5483E-09 1.57413E-09 1.59993E-09 1.62575E-09 1.65157E-09 1.67743E-09 1.70331E-09 1.72924E-09 1.7552E-09 1.78121E-09 1.80727E-09 1.83338E-09 1.85955E-09 1.88576E-09 1.91203E-09 1.93836E-09 1.96474E-09 1.99118E-09 2.01768E-09 2.04423E-09 2.07084E-09 2.09751E-09 2.12423E-09 2.15102E-09 2.17786E-09 2.20476E-09 2.23171E-09 2.25873E-09 2.2858E-09 2.31294E-09 2.34013E-09 2.36738E-09 2.39468E-09 2.42205E-09 2.44948E-09 2.47696E-09 2.50451E-09 2.53211E-09 2.55978E-09 2.58751E-09 2.6153E-09 2.64316E-09 2.67108E-09 2.69906E-09 2.72711E-09 2.75523E-09 2.78342E-09 2.81169E-09 2.84002E-09 2.86843E-09 2.89691E-09 2.92547E-09 2.95412E-09 2.98284E-09 3.01165E-09 3.04056E-09 3.06955E-09 3.09864E-09 3.12782E-09 3.15711E-09 3.18651E-09 3.21601E-09 3.24563E-09 3.27537E-09 3.30524E-09 3.33524E-09 3.36538E-09 3.39567E-09 3.4261E-09 3.4567E-09 3.48747E-09 3.51842E-09 3.54956E-09 3.5809E-09 3.61246E-09 3.64425E-09 3.67628E-09 -8.17027E-08 -3.98006E-08 -1.87669E-08 -8.23223E-09 -2.79371E-09 -2.32307E-13 1.34175E-09 1.91626E-09 2.13807E-09 2.24598E-09 2.31791E-09 2.37649E-09 2.42923E-09 2.47906E-09 2.52731E-09 2.57463E-09 2.62139E-09 2.66781E-09 2.71401E-09 2.76009E-09 2.8061E-09 2.85209E-09 2.89809E-09 2.94411E-09 2.99018E-09 3.03631E-09 3.08251E-09 3.12878E-09 3.17513E-09 3.22157E-09 3.26809E-09 3.31471E-09 3.36143E-09 3.40824E-09 3.45515E-09 3.50216E-09 3.54927E-09 3.59648E-09 3.6438E-09 3.69121E-09 3.73873E-09 3.78635E-09 3.83408E-09 3.88191E-09 3.92984E-09 3.97787E-09 4.02601E-09 4.07425E-09 4.1226E-09 4.17104E-09 4.2196E-09 4.26825E-09 4.31701E-09 4.36588E-09 4.41485E-09 4.46393E-09 4.51312E-09 4.56242E-09 4.61182E-09 4.66134E-09 4.71097E-09 4.76071E-09 4.81057E-09 4.86055E-09 4.91064E-09 4.96086E-09 5.01121E-09 5.06168E-09 5.11229E-09 5.16303E-09 5.21391E-09 5.26493E-09 5.31609E-09 5.36741E-09 5.41888E-09 5.47052E-09 5.52232E-09 5.57429E-09 5.62644E-09 5.67878E-09 5.73131E-09 5.78404E-09 5.83697E-09 5.89013E-09 5.94352E-09 5.99714E-09 6.05102E-09 6.10516E-09 6.15958E-09 6.21429E-09 6.2693E-09 6.32464E-09 6.38033E-09 6.43638E-09 6.49282E-09 6.54967E-09 -1.38399E-07 -6.83707E-08 -3.26119E-08 -1.44386E-08 -4.93603E-09 -5.89689E-14 2.38525E-09 3.4065E-09 3.80079E-09 3.99261E-09 4.12044E-09 4.22456E-09 4.3183E-09 4.40687E-09 4.49261E-09 4.57672E-09 4.65982E-09 4.74231E-09 4.82442E-09 4.90631E-09 4.98809E-09 5.06982E-09 5.15156E-09 5.23336E-09 5.31523E-09 5.3972E-09 5.4793E-09 5.56153E-09 5.6439E-09 5.72643E-09 5.80911E-09 5.89196E-09 5.97498E-09 6.05817E-09 6.14153E-09 6.22507E-09 6.30879E-09 6.39269E-09 6.47677E-09 6.56104E-09 6.64548E-09 6.73011E-09 6.81492E-09 6.89991E-09 6.98509E-09 7.07044E-09 7.15598E-09 7.24171E-09 7.32762E-09 7.41371E-09 7.49999E-09 7.58645E-09 7.67309E-09 7.75993E-09 7.84695E-09 7.93416E-09 8.02156E-09 8.10915E-09 8.19694E-09 8.28492E-09 8.37311E-09 8.46149E-09 8.55008E-09 8.63888E-09 8.72789E-09 8.81711E-09 8.90656E-09 8.99624E-09 9.08614E-09 9.17628E-09 9.26666E-09 9.3573E-09 9.44819E-09 9.53934E-09 9.63077E-09 9.72248E-09 9.81448E-09 9.90678E-09 9.99939E-09 1.00923E-08 1.01856E-08 1.02792E-08 1.03732E-08 1.04675E-08 1.05623E-08 1.06575E-08 1.07531E-08 1.08491E-08 1.09456E-08 1.10427E-08 1.11402E-08 1.12383E-08 1.1337E-08 1.14363E-08 1.15363E-08 1.16369E-08 -2.31644E-07 -1.16288E-07 -5.62238E-08 -2.51693E-08 -8.68114E-09 2.56464E-24 4.22523E-09 6.03445E-09 6.73299E-09 7.0728E-09 7.29924E-09 7.48365E-09 7.64968E-09 7.80654E-09 7.9584E-09 8.10735E-09 8.25453E-09 8.40062E-09 8.54604E-09 8.69107E-09 8.83589E-09 8.98063E-09 9.12539E-09 9.27025E-09 9.41524E-09 9.56041E-09 9.7058E-09 9.85142E-09 9.99729E-09 1.01434E-08 1.02899E-08 1.04366E-08 1.05836E-08 1.07309E-08 1.08785E-08 1.10265E-08 1.11747E-08 1.13233E-08 1.14722E-08 1.16214E-08 1.1771E-08 1.19208E-08 1.2071E-08 1.22215E-08 1.23723E-08 1.25235E-08 1.2675E-08 1.28267E-08 1.29789E-08 1.31313E-08 1.32841E-08 1.34372E-08 1.35906E-08 1.37444E-08 1.38985E-08 1.40529E-08 1.42076E-08 1.43627E-08 1.45182E-08 1.46739E-08 1.48301E-08 1.49866E-08 1.51434E-08 1.53006E-08 1.54582E-08 1.56162E-08 1.57746E-08 1.59333E-08 1.60925E-08 1.6252E-08 1.6412E-08 1.65725E-08 1.67334E-08 1.68947E-08 1.70565E-08 1.72189E-08 1.73817E-08 1.7545E-08 1.77089E-08 1.78734E-08 1.80384E-08 1.8204E-08 1.83703E-08 1.85372E-08 1.87048E-08 1.88731E-08 1.90421E-08 1.9212E-08 1.93826E-08 1.95541E-08 1.97265E-08 1.98998E-08 2.00741E-08 2.02495E-08 2.0426E-08 2.06036E-08 -3.82473E-07 -1.95488E-07 -9.60026E-08 -4.35406E-08 -1.51777E-08 6.02259E-14 7.45138E-09 1.06427E-08 1.1875E-08 1.24743E-08 1.28737E-08 1.31988E-08 1.34916E-08 1.37682E-08 1.40359E-08 1.42985E-08 1.4558E-08 1.48156E-08 1.50719E-08 1.53276E-08 1.55829E-08 1.58381E-08 1.60933E-08 1.63487E-08 1.66043E-08 1.68603E-08 1.71166E-08 1.73733E-08 1.76304E-08 1.78881E-08 1.81462E-08 1.84048E-08 1.8664E-08 1.89237E-08 1.9184E-08 1.94448E-08 1.97061E-08 1.9968E-08 2.02305E-08 2.04935E-08 2.07571E-08 2.10213E-08 2.1286E-08 2.15513E-08 2.18172E-08 2.20836E-08 2.23506E-08 2.26182E-08 2.28864E-08 2.31551E-08 2.34244E-08 2.36942E-08 2.39647E-08 2.42357E-08 2.45073E-08 2.47795E-08 2.50522E-08 2.53256E-08 2.55996E-08 2.58741E-08 2.61493E-08 2.64251E-08 2.67016E-08 2.69787E-08 2.72564E-08 2.75348E-08 2.78139E-08 2.80937E-08 2.83742E-08 2.86554E-08 2.89373E-08 2.922E-08 2.95035E-08 2.97878E-08 3.0073E-08 3.03589E-08 3.06458E-08 3.09336E-08 3.12223E-08 3.1512E-08 3.18026E-08 3.20944E-08 3.23872E-08 3.26811E-08 3.29762E-08 3.32725E-08 3.35701E-08 3.3869E-08 3.41693E-08 3.4471E-08 3.47743E-08 3.50792E-08 3.53857E-08 3.56941E-08 3.60043E-08 3.63164E-08 -6.22182E-07 -3.24259E-07 -1.62062E-07 -7.46184E-08 -2.63393E-08 2.3897E-13 1.30668E-08 1.86652E-08 2.08273E-08 2.18787E-08 2.2579E-08 2.31492E-08 2.36624E-08 2.41473E-08 2.46166E-08 2.5077E-08 2.55318E-08 2.59833E-08 2.64327E-08 2.68809E-08 2.73284E-08 2.77757E-08 2.8223E-08 2.86706E-08 2.91187E-08 2.95672E-08 3.00165E-08 3.04664E-08 3.09172E-08 3.13687E-08 3.18211E-08 3.22745E-08 3.27287E-08 3.31839E-08 3.364E-08 3.4097E-08 3.45551E-08 3.50141E-08 3.54741E-08 3.59351E-08 3.63971E-08 3.686E-08 3.7324E-08 3.7789E-08 3.82549E-08 3.87218E-08 3.91898E-08 3.96587E-08 4.01286E-08 4.05995E-08 4.10714E-08 4.15443E-08 4.20182E-08 4.24932E-08 4.29691E-08 4.3446E-08 4.3924E-08 4.44031E-08 4.48831E-08 4.53642E-08 4.58464E-08 4.63297E-08 4.68141E-08 4.72996E-08 4.77863E-08 4.82741E-08 4.8763E-08 4.92532E-08 4.97446E-08 5.02373E-08 5.07313E-08 5.12265E-08 5.17232E-08 5.22212E-08 5.27207E-08 5.32216E-08 5.3724E-08 5.42281E-08 5.47337E-08 5.5241E-08 5.575E-08 5.62609E-08 5.67735E-08 5.72881E-08 5.78047E-08 5.83234E-08 5.88443E-08 5.93674E-08 5.98928E-08 6.04207E-08 6.09512E-08 6.14844E-08 6.20205E-08 6.25595E-08 6.31016E-08 6.36471E-08 -9.9641E-07 -5.29966E-07 -2.69993E-07 -1.26451E-07 -4.52907E-08 5.75234E-13 2.27515E-08 3.25056E-08 3.62737E-08 3.81055E-08 3.9325E-08 4.03176E-08 4.12109E-08 4.20548E-08 4.28716E-08 4.36727E-08 4.44642E-08 4.52498E-08 4.60318E-08 4.68117E-08 4.75904E-08 4.83687E-08 4.9147E-08 4.99258E-08 5.07054E-08 5.14859E-08 5.22675E-08 5.30504E-08 5.38346E-08 5.46202E-08 5.54074E-08 5.61961E-08 5.69864E-08 5.77783E-08 5.85718E-08 5.9367E-08 6.01639E-08 6.09625E-08 6.17628E-08 6.25647E-08 6.33684E-08 6.41738E-08 6.4981E-08 6.57898E-08 6.66004E-08 6.74127E-08 6.82267E-08 6.90424E-08 6.98598E-08 7.0679E-08 7.14999E-08 7.23225E-08 7.31469E-08 7.3973E-08 7.48009E-08 7.56305E-08 7.64619E-08 7.72951E-08 7.81302E-08 7.8967E-08 7.98057E-08 8.06463E-08 8.14888E-08 8.23332E-08 8.31795E-08 8.40279E-08 8.48783E-08 8.57308E-08 8.65854E-08 8.74422E-08 8.83012E-08 8.91625E-08 9.0026E-08 9.0892E-08 9.17605E-08 9.26315E-08 9.35051E-08 9.43813E-08 9.52604E-08 9.61422E-08 9.70271E-08 9.7915E-08 9.8806E-08 9.97003E-08 1.00598E-07 1.01499E-07 1.02404E-07 1.03313E-07 1.04226E-07 1.05143E-07 1.06064E-07 1.06989E-07 1.0792E-07 1.08855E-07 1.09796E-07 1.10742E-07 -1.57075E-06 -8.5269E-07 -4.43235E-07 -2.11498E-07 -7.70145E-08 1.11786E-12 3.92653E-08 5.61183E-08 6.26321E-08 6.57967E-08 6.79021E-08 6.96149E-08 7.11559E-08 7.26113E-08 7.402E-08 7.54014E-08 7.67663E-08 7.8121E-08 7.94693E-08 8.08139E-08 8.21566E-08 8.34984E-08 8.48404E-08 8.61832E-08 8.75272E-08 8.88728E-08 9.02203E-08 9.157E-08 9.2922E-08 9.42764E-08 9.56334E-08 9.6993E-08 9.83554E-08 9.97205E-08 1.01088E-07 1.02459E-07 1.03833E-07 1.0521E-07 1.06589E-07 1.07971E-07 1.09357E-07 1.10745E-07 1.12136E-07 1.13531E-07 1.14928E-07 1.16328E-07 1.17731E-07 1.19137E-07 1.20546E-07 1.21958E-07 1.23372E-07 1.2479E-07 1.26211E-07 1.27635E-07 1.29062E-07 1.30491E-07 1.31924E-07 1.3336E-07 1.34799E-07 1.36241E-07 1.37687E-07 1.39135E-07 1.40587E-07 1.42042E-07 1.43501E-07 1.44963E-07 1.46428E-07 1.47897E-07 1.49369E-07 1.50846E-07 1.52326E-07 1.53809E-07 1.55297E-07 1.56789E-07 1.58285E-07 1.59786E-07 1.61291E-07 1.628E-07 1.64314E-07 1.65833E-07 1.67357E-07 1.68886E-07 1.70421E-07 1.71961E-07 1.73506E-07 1.75058E-07 1.76616E-07 1.7818E-07 1.79751E-07 1.81328E-07 1.82913E-07 1.84506E-07 1.86106E-07 1.87715E-07 1.89333E-07 1.90959E-07 -2.43852E-06 -1.35018E-06 -7.1623E-07 -3.48542E-07 -1.29241E-07 1.94707E-12 6.70388E-08 9.58674E-08 1.07019E-07 1.12433E-07 1.1603E-07 1.18953E-07 1.21582E-07 1.24065E-07 1.26468E-07 1.28823E-07 1.31151E-07 1.33461E-07 1.3576E-07 1.38052E-07 1.40341E-07 1.42629E-07 1.44917E-07 1.47206E-07 1.49497E-07 1.51791E-07 1.54088E-07 1.56389E-07 1.58693E-07 1.61002E-07 1.63315E-07 1.65633E-07 1.67955E-07 1.70282E-07 1.72613E-07 1.7495E-07 1.77291E-07 1.79638E-07 1.81989E-07 1.84345E-07 1.86706E-07 1.89072E-07 1.91443E-07 1.93819E-07 1.962E-07 1.98586E-07 2.00977E-07 2.03373E-07 2.05774E-07 2.0818E-07 2.10591E-07 2.13007E-07 2.15428E-07 2.17855E-07 2.20286E-07 2.22722E-07 2.25164E-07 2.2761E-07 2.30062E-07 2.32519E-07 2.34982E-07 2.3745E-07 2.39924E-07 2.42403E-07 2.44887E-07 2.47378E-07 2.49874E-07 2.52377E-07 2.54885E-07 2.574E-07 2.59921E-07 2.62449E-07 2.64983E-07 2.67524E-07 2.70073E-07 2.72628E-07 2.75191E-07 2.77762E-07 2.8034E-07 2.82927E-07 2.85521E-07 2.88125E-07 2.90737E-07 2.93359E-07 2.9599E-07 2.98631E-07 3.01283E-07 3.03945E-07 3.06618E-07 3.09302E-07 3.11999E-07 3.14708E-07 3.1743E-07 3.20165E-07 3.22915E-07 3.25679E-07 -3.73138E-06 -2.10473E-06 -1.13863E-06 -5.65162E-07 -2.13611E-07 3.21406E-12 1.12997E-07 1.61742E-07 1.80626E-07 1.89779E-07 1.95849E-07 2.00776E-07 2.05204E-07 2.09383E-07 2.13426E-07 2.1739E-07 2.21306E-07 2.25192E-07 2.29059E-07 2.32915E-07 2.36765E-07 2.40613E-07 2.44461E-07 2.48311E-07 2.52164E-07 2.56022E-07 2.59885E-07 2.63754E-07 2.67629E-07 2.71512E-07 2.75401E-07 2.79298E-07 2.83203E-07 2.87115E-07 2.91036E-07 2.94964E-07 2.98901E-07 3.02846E-07 3.06799E-07 3.1076E-07 3.14729E-07 3.18707E-07 3.22693E-07 3.26688E-07 3.30691E-07 3.34702E-07 3.38721E-07 3.42749E-07 3.46785E-07 3.50829E-07 3.54882E-07 3.58943E-07 3.63013E-07 3.67091E-07 3.71177E-07 3.75272E-07 3.79375E-07 3.83488E-07 3.87609E-07 3.91738E-07 3.95877E-07 4.00025E-07 4.04182E-07 4.08348E-07 4.12523E-07 4.16708E-07 4.20903E-07 4.25108E-07 4.29323E-07 4.33549E-07 4.37785E-07 4.42032E-07 4.4629E-07 4.50559E-07 4.5484E-07 4.59133E-07 4.63439E-07 4.67757E-07 4.72088E-07 4.76432E-07 4.80791E-07 4.85163E-07 4.8955E-07 4.93953E-07 4.98371E-07 5.02805E-07 5.07256E-07 5.11725E-07 5.16212E-07 5.20717E-07 5.25242E-07 5.29787E-07 5.34354E-07 5.38942E-07 5.43553E-07 5.48188E-07 -5.63272E-06 -3.23247E-06 -1.78102E-06 -9.00911E-07 -3.47102E-07 5.23373E-12 1.87648E-07 2.69005E-07 3.00598E-07 3.15877E-07 3.25978E-07 3.3416E-07 3.41504E-07 3.48431E-07 3.5513E-07 3.61695E-07 3.6818E-07 3.74614E-07 3.81017E-07 3.87401E-07 3.93775E-07 4.00144E-07 4.06513E-07 4.12885E-07 4.19263E-07 4.25648E-07 4.32041E-07 4.38444E-07 4.44858E-07 4.51283E-07 4.57719E-07 4.64168E-07 4.70629E-07 4.77103E-07 4.8359E-07 4.9009E-07 4.96604E-07 5.0313E-07 5.09671E-07 5.16224E-07 5.22792E-07 5.29372E-07 5.35967E-07 5.42575E-07 5.49197E-07 5.55832E-07 5.62481E-07 5.69143E-07 5.7582E-07 5.8251E-07 5.89213E-07 5.9593E-07 6.02661E-07 6.09406E-07 6.16165E-07 6.22937E-07 6.29724E-07 6.36525E-07 6.4334E-07 6.50169E-07 6.57013E-07 6.63872E-07 6.70746E-07 6.77635E-07 6.8454E-07 6.9146E-07 6.98396E-07 7.05349E-07 7.12318E-07 7.19304E-07 7.26307E-07 7.33328E-07 7.40367E-07 7.47425E-07 7.54502E-07 7.61598E-07 7.68715E-07 7.75852E-07 7.8301E-07 7.9019E-07 7.97393E-07 8.04619E-07 8.11868E-07 8.19143E-07 8.26442E-07 8.33768E-07 8.41121E-07 8.48503E-07 8.55913E-07 8.63353E-07 8.70825E-07 8.78329E-07 8.85868E-07 8.93441E-07 9.01051E-07 9.08699E-07 -8.39185E-06 -4.89527E-06 -2.74256E-06 -1.4114E-06 -5.53727E-07 8.69758E-12 3.06435E-07 4.40346E-07 4.92549E-07 5.1771E-07 5.34263E-07 5.47628E-07 5.59601E-07 5.70881E-07 5.81784E-07 5.92465E-07 6.03012E-07 6.13475E-07 6.23886E-07 6.34264E-07 6.44625E-07 6.54978E-07 6.6533E-07 6.75687E-07 6.86051E-07 6.96427E-07 7.06816E-07 7.1722E-07 7.27641E-07 7.3808E-07 7.48538E-07 7.59015E-07 7.69512E-07 7.80029E-07 7.90567E-07 8.01126E-07 8.11707E-07 8.22309E-07 8.32932E-07 8.43577E-07 8.54244E-07 8.64932E-07 8.75643E-07 8.86375E-07 8.97129E-07 9.07905E-07 9.18702E-07 9.29522E-07 9.40363E-07 9.51226E-07 9.62111E-07 9.73018E-07 9.83947E-07 9.94898E-07 1.00587E-06 1.01687E-06 1.02789E-06 1.03893E-06 1.04999E-06 1.06108E-06 1.07219E-06 1.08332E-06 1.09448E-06 1.10566E-06 1.11687E-06 1.1281E-06 1.13936E-06 1.15065E-06 1.16196E-06 1.17329E-06 1.18466E-06 1.19605E-06 1.20748E-06 1.21893E-06 1.23041E-06 1.24193E-06 1.25348E-06 1.26506E-06 1.27667E-06 1.28832E-06 1.3E-06 1.31172E-06 1.32348E-06 1.33528E-06 1.34712E-06 1.359E-06 1.37092E-06 1.38289E-06 1.39491E-06 1.40697E-06 1.41908E-06 1.43124E-06 1.44346E-06 1.45573E-06 1.46806E-06 1.48045E-06 -1.23346E-05 -7.31345E-06 -4.16043E-06 -2.17337E-06 -8.66448E-07 1.5137E-11 4.9136E-07 7.08659E-07 7.93892E-07 8.34772E-07 8.61468E-07 8.82914E-07 9.02071E-07 9.20091E-07 9.37491E-07 9.54527E-07 9.71342E-07 9.88018E-07 1.00461E-06 1.02114E-06 1.03765E-06 1.05414E-06 1.07062E-06 1.08712E-06 1.10362E-06 1.12014E-06 1.13668E-06 1.15325E-06 1.16984E-06 1.18646E-06 1.2031E-06 1.21978E-06 1.23649E-06 1.25323E-06 1.27E-06 1.2868E-06 1.30364E-06 1.32051E-06 1.33742E-06 1.35436E-06 1.37133E-06 1.38834E-06 1.40538E-06 1.42246E-06 1.43957E-06 1.45671E-06 1.47389E-06 1.4911E-06 1.50835E-06 1.52563E-06 1.54294E-06 1.56029E-06 1.57767E-06 1.59509E-06 1.61255E-06 1.63003E-06 1.64756E-06 1.66512E-06 1.68271E-06 1.70034E-06 1.71801E-06 1.73572E-06 1.75346E-06 1.77124E-06 1.78906E-06 1.80692E-06 1.82482E-06 1.84276E-06 1.86074E-06 1.87876E-06 1.89683E-06 1.91495E-06 1.9331E-06 1.95131E-06 1.96956E-06 1.98786E-06 2.00621E-06 2.02462E-06 2.04307E-06 2.06158E-06 2.08015E-06 2.09878E-06 2.11746E-06 2.13621E-06 2.15501E-06 2.17389E-06 2.19283E-06 2.21184E-06 2.23092E-06 2.25007E-06 2.26931E-06 2.28862E-06 2.30801E-06 2.32749E-06 2.34706E-06 2.36671E-06 -1.78619E-05 -1.0775E-05 -6.21941E-06 -3.29044E-06 -1.32922E-06 2.78234E-11 7.72832E-07 1.1206E-06 1.25832E-06 1.32393E-06 1.36632E-06 1.40011E-06 1.43017E-06 1.45837E-06 1.48556E-06 1.51216E-06 1.5384E-06 1.56441E-06 1.59028E-06 1.61605E-06 1.64178E-06 1.66747E-06 1.69316E-06 1.71886E-06 1.74457E-06 1.7703E-06 1.79606E-06 1.82186E-06 1.8477E-06 1.87357E-06 1.89949E-06 1.92546E-06 1.95147E-06 1.97753E-06 2.00364E-06 2.0298E-06 2.05601E-06 2.08227E-06 2.10858E-06 2.13494E-06 2.16136E-06 2.18783E-06 2.21434E-06 2.24092E-06 2.26754E-06 2.29421E-06 2.32094E-06 2.34772E-06 2.37455E-06 2.40143E-06 2.42837E-06 2.45536E-06 2.4824E-06 2.50949E-06 2.53664E-06 2.56384E-06 2.59109E-06 2.6184E-06 2.64576E-06 2.67318E-06 2.70066E-06 2.72819E-06 2.75578E-06 2.78342E-06 2.81113E-06 2.8389E-06 2.86673E-06 2.89462E-06 2.92257E-06 2.95059E-06 2.97868E-06 3.00684E-06 3.03506E-06 3.06336E-06 3.09172E-06 3.12017E-06 3.14869E-06 3.17729E-06 3.20597E-06 3.23474E-06 3.26359E-06 3.29252E-06 3.32155E-06 3.35068E-06 3.37989E-06 3.40921E-06 3.43863E-06 3.46816E-06 3.49779E-06 3.52754E-06 3.5574E-06 3.58738E-06 3.61749E-06 3.64773E-06 3.6781E-06 3.70861E-06 -2.54275E-05 -1.56329E-05 -9.15712E-06 -4.89772E-06 -1.99884E-06 5.31077E-11 1.19169E-06 1.74115E-06 1.96191E-06 2.06619E-06 2.13254E-06 2.18485E-06 2.23109E-06 2.27431E-06 2.3159E-06 2.35653E-06 2.39657E-06 2.43624E-06 2.47566E-06 2.51494E-06 2.55413E-06 2.59327E-06 2.63238E-06 2.6715E-06 2.71064E-06 2.7498E-06 2.78901E-06 2.82827E-06 2.86758E-06 2.90695E-06 2.94638E-06 2.98588E-06 3.02545E-06 3.06509E-06 3.1048E-06 3.14458E-06 3.18444E-06 3.22437E-06 3.26438E-06 3.30446E-06 3.34462E-06 3.38485E-06 3.42517E-06 3.46556E-06 3.50602E-06 3.54657E-06 3.58719E-06 3.62789E-06 3.66866E-06 3.70952E-06 3.75045E-06 3.79146E-06 3.83254E-06 3.87371E-06 3.91495E-06 3.95628E-06 3.99768E-06 4.03916E-06 4.08073E-06 4.12238E-06 4.16411E-06 4.20593E-06 4.24783E-06 4.28982E-06 4.33189E-06 4.37406E-06 4.41632E-06 4.45867E-06 4.50112E-06 4.54366E-06 4.58631E-06 4.62905E-06 4.6719E-06 4.71486E-06 4.75792E-06 4.8011E-06 4.84439E-06 4.8878E-06 4.93134E-06 4.97499E-06 5.01878E-06 5.06269E-06 5.10674E-06 5.15093E-06 5.19527E-06 5.23975E-06 5.28438E-06 5.32917E-06 5.37412E-06 5.41924E-06 5.46453E-06 5.51E-06 5.55566E-06 5.6015E-06 5.64755E-06 5.69379E-06 -3.5487E-05 -2.22811E-05 -1.32572E-05 -7.16182E-06 -2.94564E-06 1.01237E-10 1.80112E-06 2.65904E-06 3.01119E-06 3.17597E-06 3.27862E-06 3.35832E-06 3.4281E-06 3.49301E-06 3.55525E-06 3.61595E-06 3.67568E-06 3.73481E-06 3.79354E-06 3.85202E-06 3.91034E-06 3.96857E-06 4.02675E-06 4.08492E-06 4.14311E-06 4.20133E-06 4.25961E-06 4.31795E-06 4.37636E-06 4.43485E-06 4.49343E-06 4.55211E-06 4.61088E-06 4.66974E-06 4.72871E-06 4.78779E-06 4.84697E-06 4.90625E-06 4.96564E-06 5.02515E-06 5.08476E-06 5.14448E-06 5.20431E-06 5.26425E-06 5.3243E-06 5.38446E-06 5.44474E-06 5.50512E-06 5.56562E-06 5.62622E-06 5.68694E-06 5.74777E-06 5.80871E-06 5.86977E-06 5.93094E-06 5.99222E-06 6.05362E-06 6.11514E-06 6.17677E-06 6.23853E-06 6.3004E-06 6.3624E-06 6.42452E-06 6.48676E-06 6.54914E-06 6.61164E-06 6.67428E-06 6.73705E-06 6.79996E-06 6.86301E-06 6.92621E-06 6.98955E-06 7.05305E-06 7.1167E-06 7.18051E-06 7.24448E-06 7.30862E-06 7.37294E-06 7.43742E-06 7.50209E-06 7.56695E-06 7.632E-06 7.69725E-06 7.76269E-06 7.82835E-06 7.89422E-06 7.96032E-06 8.02664E-06 8.0932E-06 8.16E-06 8.22705E-06 8.29436E-06 8.36193E-06 8.42978E-06 8.49792E-06 8.56635E-06 -4.84169E-05 -3.10999E-05 -1.88212E-05 -1.0271E-05 -4.25166E-06 1.84363E-10 2.6678E-06 3.99223E-06 4.55281E-06 4.81281E-06 4.97048E-06 5.09026E-06 5.19379E-06 5.28935E-06 5.38059E-06 5.46931E-06 5.55647E-06 5.64263E-06 5.72814E-06 5.81322E-06 5.89802E-06 5.98265E-06 6.06719E-06 6.15168E-06 6.23618E-06 6.3207E-06 6.40529E-06 6.48995E-06 6.57471E-06 6.65956E-06 6.74454E-06 6.82963E-06 6.91486E-06 7.00022E-06 7.08571E-06 7.17135E-06 7.25713E-06 7.34306E-06 7.42914E-06 7.51537E-06 7.60175E-06 7.68827E-06 7.77496E-06 7.86179E-06 7.94878E-06 8.03592E-06 8.12321E-06 8.21066E-06 8.29827E-06 8.38603E-06 8.47394E-06 8.56201E-06 8.65024E-06 8.73863E-06 8.82717E-06 8.91588E-06 9.00474E-06 9.09377E-06 9.18297E-06 9.27233E-06 9.36186E-06 9.45156E-06 9.54144E-06 9.63149E-06 9.72173E-06 9.81215E-06 9.90275E-06 9.99355E-06 1.00845E-05 1.01757E-05 1.02671E-05 1.03587E-05 1.04505E-05 1.05426E-05 1.06349E-05 1.07273E-05 1.08201E-05 1.09131E-05 1.10063E-05 1.10998E-05 1.11935E-05 1.12876E-05 1.13819E-05 1.14764E-05 1.15713E-05 1.16665E-05 1.1762E-05 1.18579E-05 1.1954E-05 1.20506E-05 1.21474E-05 1.22447E-05 1.23423E-05 1.24403E-05 1.25387E-05 1.26375E-05 -6.44218E-05 -4.23732E-05 -2.61167E-05 -1.44116E-05 -6.00436E-06 3.11652E-10 3.87076E-06 5.89065E-06 6.78237E-06 7.19404E-06 7.43564E-06 7.61396E-06 7.76529E-06 7.90351E-06 8.03465E-06 8.16167E-06 8.28614E-06 8.40897E-06 8.53071E-06 8.65172E-06 8.77225E-06 8.89246E-06 9.01247E-06 9.13238E-06 9.25225E-06 9.37212E-06 9.49205E-06 9.61206E-06 9.73217E-06 9.85241E-06 9.97279E-06 1.00933E-05 1.0214E-05 1.03349E-05 1.04559E-05 1.05771E-05 1.06986E-05 1.08202E-05 1.0942E-05 1.1064E-05 1.11862E-05 1.13086E-05 1.14312E-05 1.1554E-05 1.1677E-05 1.18003E-05 1.19237E-05 1.20473E-05 1.21712E-05 1.22952E-05 1.24195E-05 1.2544E-05 1.26686E-05 1.27935E-05 1.29186E-05 1.3044E-05 1.31695E-05 1.32953E-05 1.34213E-05 1.35475E-05 1.3674E-05 1.38006E-05 1.39276E-05 1.40547E-05 1.41821E-05 1.43098E-05 1.44377E-05 1.45659E-05 1.46943E-05 1.48231E-05 1.49521E-05 1.50814E-05 1.52109E-05 1.53408E-05 1.5471E-05 1.56015E-05 1.57324E-05 1.58636E-05 1.59951E-05 1.6127E-05 1.62593E-05 1.63919E-05 1.65249E-05 1.66584E-05 1.67922E-05 1.69264E-05 1.70611E-05 1.71963E-05 1.73319E-05 1.7468E-05 1.76046E-05 1.77417E-05 1.78793E-05 1.80174E-05 1.81562E-05 1.82954E-05 -8.34763E-05 -5.62027E-05 -3.53091E-05 -1.97329E-05 -8.28526E-06 4.869E-10 5.49642E-06 8.5318E-06 9.94715E-06 1.06036E-05 1.09751E-05 1.12392E-05 1.1458E-05 1.16548E-05 1.184E-05 1.20184E-05 1.21925E-05 1.23639E-05 1.25335E-05 1.27019E-05 1.28695E-05 1.30364E-05 1.3203E-05 1.33693E-05 1.35356E-05 1.37017E-05 1.38679E-05 1.40341E-05 1.42004E-05 1.43669E-05 1.45335E-05 1.47003E-05 1.48673E-05 1.50344E-05 1.52018E-05 1.53695E-05 1.55373E-05 1.57054E-05 1.58738E-05 1.60424E-05 1.62113E-05 1.63804E-05 1.65497E-05 1.67194E-05 1.68893E-05 1.70594E-05 1.72299E-05 1.74006E-05 1.75715E-05 1.77427E-05 1.79143E-05 1.8086E-05 1.82581E-05 1.84304E-05 1.8603E-05 1.87759E-05 1.89491E-05 1.91226E-05 1.92964E-05 1.94704E-05 1.96448E-05 1.98195E-05 1.99944E-05 2.01697E-05 2.03454E-05 2.05213E-05 2.06977E-05 2.08743E-05 2.10513E-05 2.12287E-05 2.14065E-05 2.15846E-05 2.17631E-05 2.19421E-05 2.21214E-05 2.23012E-05 2.24815E-05 2.26621E-05 2.28433E-05 2.30249E-05 2.32071E-05 2.33897E-05 2.35729E-05 2.37566E-05 2.39409E-05 2.41257E-05 2.43112E-05 2.44972E-05 2.46839E-05 2.48712E-05 2.50592E-05 2.52479E-05 2.54373E-05 2.56274E-05 2.58183E-05 2.601E-05 -0.000105303 -7.2474E-05 -4.64092E-05 -2.63093E-05 -1.11551E-05 7.11431E-10 7.62836E-06 1.2104E-05 1.43342E-05 1.53887E-05 1.59651E-05 1.63569E-05 1.66708E-05 1.69478E-05 1.72051E-05 1.74511E-05 1.76901E-05 1.79246E-05 1.81561E-05 1.83855E-05 1.86134E-05 1.88403E-05 1.90665E-05 1.92922E-05 1.95176E-05 1.97428E-05 1.99679E-05 2.0193E-05 2.04181E-05 2.06434E-05 2.08688E-05 2.10943E-05 2.13201E-05 2.15461E-05 2.17724E-05 2.19989E-05 2.22256E-05 2.24527E-05 2.26801E-05 2.29077E-05 2.31357E-05 2.3364E-05 2.35925E-05 2.38214E-05 2.40507E-05 2.42802E-05 2.45101E-05 2.47403E-05 2.49709E-05 2.52018E-05 2.5433E-05 2.56646E-05 2.58965E-05 2.61287E-05 2.63613E-05 2.65943E-05 2.68276E-05 2.70613E-05 2.72954E-05 2.75298E-05 2.77646E-05 2.79999E-05 2.82355E-05 2.84715E-05 2.87079E-05 2.89448E-05 2.91821E-05 2.94199E-05 2.96581E-05 2.98968E-05 3.0136E-05 3.03757E-05 3.06159E-05 3.08566E-05 3.10979E-05 3.13397E-05 3.15821E-05 3.18251E-05 3.20688E-05 3.2313E-05 3.25579E-05 3.28035E-05 3.30498E-05 3.32968E-05 3.35446E-05 3.37931E-05 3.40423E-05 3.42924E-05 3.45434E-05 3.47951E-05 3.50478E-05 3.53014E-05 3.55559E-05 3.58114E-05 3.60679E-05 3.63254E-05 -0.000129426 -9.08743E-05 -5.92729E-05 -3.41178E-05 -1.46389E-05 9.87875E-10 1.03331E-05 1.67764E-05 2.02355E-05 2.19348E-05 2.28402E-05 2.34253E-05 2.38751E-05 2.42612E-05 2.46142E-05 2.49481E-05 2.52705E-05 2.55853E-05 2.5895E-05 2.62012E-05 2.6505E-05 2.68069E-05 2.71075E-05 2.74072E-05 2.77063E-05 2.80049E-05 2.83032E-05 2.86013E-05 2.88994E-05 2.91975E-05 2.94957E-05 2.9794E-05 3.00925E-05 3.03912E-05 3.06901E-05 3.09894E-05 3.12889E-05 3.15887E-05 3.18888E-05 3.21893E-05 3.24901E-05 3.27913E-05 3.30928E-05 3.33947E-05 3.3697E-05 3.39996E-05 3.43027E-05 3.46061E-05 3.49099E-05 3.52141E-05 3.55188E-05 3.58238E-05 3.61292E-05 3.64351E-05 3.67414E-05 3.70481E-05 3.73553E-05 3.76628E-05 3.79709E-05 3.82794E-05 3.85884E-05 3.88978E-05 3.92078E-05 3.95182E-05 3.98292E-05 4.01407E-05 4.04528E-05 4.07654E-05 4.10786E-05 4.13924E-05 4.17068E-05 4.20218E-05 4.23375E-05 4.26538E-05 4.29709E-05 4.32886E-05 4.36071E-05 4.39264E-05 4.42465E-05 4.45673E-05 4.4889E-05 4.52116E-05 4.55351E-05 4.58594E-05 4.61848E-05 4.65111E-05 4.68384E-05 4.71668E-05 4.74962E-05 4.78268E-05 4.81585E-05 4.84914E-05 4.88255E-05 4.91609E-05 4.94975E-05 4.98355E-05 -0.000155266 -0.000110966 -7.36335E-05 -4.30466E-05 -1.87175E-05 1.32164E-09 1.36447E-05 2.26599E-05 2.78883E-05 3.06068E-05 3.20449E-05 3.29292E-05 3.35759E-05 3.41121E-05 3.45915E-05 3.50387E-05 3.54665E-05 3.58818E-05 3.62887E-05 3.66896E-05 3.70864E-05 3.74801E-05 3.78715E-05 3.82613E-05 3.86498E-05 3.90374E-05 3.94243E-05 3.98108E-05 4.0197E-05 4.0583E-05 4.09689E-05 4.13548E-05 4.17409E-05 4.21271E-05 4.25134E-05 4.29E-05 4.32869E-05 4.3674E-05 4.40615E-05 4.44493E-05 4.48375E-05 4.5226E-05 4.5615E-05 4.60043E-05 4.6394E-05 4.67842E-05 4.71747E-05 4.75657E-05 4.79572E-05 4.83491E-05 4.87414E-05 4.91342E-05 4.95275E-05 4.99212E-05 5.03155E-05 5.07102E-05 5.11054E-05 5.15012E-05 5.18975E-05 5.22943E-05 5.26917E-05 5.30896E-05 5.34881E-05 5.38872E-05 5.4287E-05 5.46874E-05 5.50884E-05 5.54901E-05 5.58925E-05 5.62957E-05 5.66995E-05 5.71042E-05 5.75097E-05 5.79159E-05 5.83231E-05 5.87311E-05 5.914E-05 5.95499E-05 5.99608E-05 6.03727E-05 6.07856E-05 6.11996E-05 6.16148E-05 6.2031E-05 6.24485E-05 6.28673E-05 6.32873E-05 6.37086E-05 6.41313E-05 6.45554E-05 6.49809E-05 6.54079E-05 6.58365E-05 6.62667E-05 6.66985E-05 6.7132E-05 -0.000182248 -0.000132275 -8.91585E-05 -5.29156E-05 -2.33326E-05 1.72083E-09 1.75542E-05 2.97764E-05 3.74092E-05 4.16666E-05 4.39579E-05 4.53126E-05 4.62509E-05 4.69959E-05 4.76428E-05 4.82354E-05 4.87954E-05 4.93346E-05 4.98599E-05 5.03755E-05 5.08842E-05 5.13877E-05 5.18874E-05 5.23841E-05 5.28787E-05 5.33716E-05 5.38632E-05 5.43538E-05 5.48437E-05 5.53331E-05 5.58221E-05 5.63109E-05 5.67996E-05 5.72883E-05 5.7777E-05 5.82659E-05 5.87549E-05 5.92441E-05 5.97336E-05 6.02234E-05 6.07135E-05 6.12039E-05 6.16948E-05 6.2186E-05 6.26776E-05 6.31696E-05 6.36621E-05 6.4155E-05 6.46483E-05 6.51422E-05 6.56365E-05 6.61313E-05 6.66266E-05 6.71224E-05 6.76187E-05 6.81156E-05 6.8613E-05 6.9111E-05 6.96096E-05 7.01088E-05 7.06086E-05 7.11091E-05 7.16102E-05 7.2112E-05 7.26146E-05 7.31178E-05 7.36218E-05 7.41267E-05 7.46323E-05 7.51388E-05 7.56461E-05 7.61544E-05 7.66636E-05 7.71738E-05 7.76851E-05 7.81974E-05 7.87108E-05 7.92254E-05 7.97411E-05 8.02581E-05 8.07763E-05 8.12959E-05 8.18169E-05 8.23392E-05 8.28631E-05 8.33884E-05 8.39153E-05 8.44439E-05 8.49741E-05 8.55061E-05 8.60399E-05 8.65755E-05 8.7113E-05 8.76525E-05 8.8194E-05 8.87377E-05 -0.000209861 -0.000154355 -0.000105504 -6.35091E-05 -2.83955E-05 2.19611E-09 2.20124E-05 3.80556E-05 4.87632E-05 5.52009E-05 5.88126E-05 6.09086E-05 6.2287E-05 6.33279E-05 6.41995E-05 6.49789E-05 6.57039E-05 6.63946E-05 6.70626E-05 6.77148E-05 6.83557E-05 6.89882E-05 6.96143E-05 7.02357E-05 7.08533E-05 7.14681E-05 7.20805E-05 7.26911E-05 7.33004E-05 7.39085E-05 7.45158E-05 7.51225E-05 7.57287E-05 7.63346E-05 7.69402E-05 7.75458E-05 7.81514E-05 7.8757E-05 7.93627E-05 7.99686E-05 8.05747E-05 8.1181E-05 8.17877E-05 8.23947E-05 8.3002E-05 8.36096E-05 8.42177E-05 8.48262E-05 8.54351E-05 8.60444E-05 8.66542E-05 8.72645E-05 8.78753E-05 8.84867E-05 8.90985E-05 8.97109E-05 9.03239E-05 9.09375E-05 9.15517E-05 9.21665E-05 9.2782E-05 9.33982E-05 9.40151E-05 9.46328E-05 9.52512E-05 9.58705E-05 9.64906E-05 9.71116E-05 9.77335E-05 9.83564E-05 9.89803E-05 9.96053E-05 0.000100231 0.000100859 0.000101487 0.000102117 0.000102747 0.00010338 0.000104013 0.000104649 0.000105285 0.000105923 0.000106563 0.000107205 0.000107848 0.000108493 0.00010914 0.000109789 0.00011044 0.000111094 0.000111749 0.000112406 0.000113066 0.000113729 0.000114393 0.000115061 -0.000237691 -0.000176824 -0.000122352 -7.46058E-05 -3.38009E-05 2.76021E-09 2.69371E-05 4.73476E-05 6.17672E-05 7.1081E-05 7.6621E-05 7.98616E-05 8.19107E-05 8.33793E-05 8.4557E-05 8.55786E-05 8.65099E-05 8.73851E-05 8.82236E-05 8.90367E-05 8.98317E-05 9.06134E-05 9.1385E-05 9.21489E-05 9.29067E-05 9.36597E-05 9.44089E-05 9.51551E-05 9.58988E-05 9.66405E-05 9.73806E-05 9.81195E-05 9.88573E-05 9.95943E-05 0.000100331 0.000101067 0.000101802 0.000102537 0.000103273 0.000104008 0.000104743 0.000105478 0.000106213 0.000106949 0.000107684 0.00010842 0.000109157 0.000109893 0.00011063 0.000111367 0.000112105 0.000112843 0.000113582 0.000114321 0.00011506 0.0001158 0.000116541 0.000117282 0.000118023 0.000118766 0.000119509 0.000120253 0.000120997 0.000121742 0.000122488 0.000123235 0.000123983 0.000124732 0.000125482 0.000126233 0.000126985 0.000127738 0.000128493 0.000129248 0.000130005 0.000130764 0.000131524 0.000132285 0.000133049 0.000133813 0.00013458 0.000135348 0.000136119 0.000136891 0.000137665 0.000138442 0.00013922 0.000140001 0.000140785 0.000141571 0.000142359 0.00014315 0.000143944 0.000144741 0.000145541 0.000146343 -0.000265415 -0.000199375 -0.00013943 -8.60014E-05 -3.94409E-05 3.42762E-09 3.22263E-05 5.74522E-05 7.61344E-05 8.89887E-05 9.71471E-05 0.000102078 0.00010514 0.000107235 0.000108838 0.000110178 0.000111369 0.000112469 0.000113511 0.000114512 0.000115485 0.000116438 0.000117374 0.000118299 0.000119214 0.000120121 0.000121023 0.00012192 0.000122812 0.000123701 0.000124588 0.000125472 0.000126355 0.000127236 0.000128115 0.000128994 0.000129872 0.000130749 0.000131625 0.000132501 0.000133377 0.000134253 0.000135128 0.000136003 0.000136879 0.000137754 0.000138629 0.000139505 0.000140381 0.000141257 0.000142133 0.000143009 0.000143886 0.000144763 0.000145641 0.000146519 0.000147398 0.000148277 0.000149156 0.000150036 0.000150917 0.000151799 0.000152681 0.000153564 0.000154447 0.000155332 0.000156218 0.000157104 0.000157992 0.000158881 0.000159771 0.000160662 0.000161554 0.000162448 0.000163344 0.000164241 0.000165139 0.00016604 0.000166942 0.000167846 0.000168752 0.00016966 0.000170571 0.000171483 0.000172398 0.000173316 0.000174236 0.000175158 0.000176084 0.000177012 0.000177943 0.000178878 0.000179815 0.000180756 0.000181701 0.000182648 -0.000292795 -0.000221769 -0.000156521 -9.75204E-05 -4.52157E-05 4.21457E-09 3.77727E-05 6.81508E-05 9.15313E-05 0.000108493 0.00011995 0.000127219 0.000131768 0.000134781 0.000136981 0.000138747 0.000140269 0.000141646 0.00014293 0.000144151 0.000145329 0.000146475 0.000147597 0.000148701 0.00014979 0.000150868 0.000151937 0.000152998 0.000154054 0.000155103 0.000156149 0.000157191 0.00015823 0.000159266 0.000160301 0.000161333 0.000162364 0.000163393 0.000164421 0.000165449 0.000166475 0.000167501 0.000168527 0.000169551 0.000170576 0.0001716 0.000172624 0.000173648 0.000174672 0.000175696 0.00017672 0.000177744 0.000178768 0.000179792 0.000180816 0.000181841 0.000182866 0.000183892 0.000184918 0.000185944 0.000186971 0.000187998 0.000189026 0.000190055 0.000191085 0.000192115 0.000193147 0.000194179 0.000195212 0.000196247 0.000197283 0.00019832 0.000199358 0.000200398 0.00020144 0.000202483 0.000203528 0.000204575 0.000205624 0.000206675 0.000207728 0.000208784 0.000209842 0.000210902 0.000211965 0.000213031 0.0002141 0.000215172 0.000216247 0.000217325 0.000218407 0.000219492 0.000220581 0.000221673 0.00022277 0.00022387 -0.000319658 -0.00024383 -0.000173453 -0.000109021 -5.10392E-05 5.13904E-09 4.34746E-05 7.92327E-05 0.000107627 0.000129135 0.00014448 0.000154757 0.000161375 0.000165708 0.000168753 0.000171097 0.000173048 0.000174768 0.000176342 0.000177821 0.000179234 0.0001806 0.000181929 0.000183232 0.000184513 0.000185778 0.000187029 0.000188268 0.000189499 0.000190722 0.000191938 0.000193149 0.000194355 0.000195557 0.000196756 0.000197952 0.000199145 0.000200336 0.000201525 0.000202713 0.000203899 0.000205084 0.000206267 0.00020745 0.000208632 0.000209813 0.000210993 0.000212173 0.000213353 0.000214532 0.000215711 0.00021689 0.000218068 0.000219247 0.000220425 0.000221603 0.000222782 0.000223961 0.00022514 0.000226319 0.000227499 0.000228679 0.000229859 0.00023104 0.000232222 0.000233405 0.000234588 0.000235773 0.000236958 0.000238144 0.000239332 0.000240521 0.000241711 0.000242903 0.000244097 0.000245292 0.00024649 0.000247689 0.00024889 0.000250094 0.0002513 0.000252508 0.00025372 0.000254934 0.00025615 0.00025737 0.000258594 0.00025982 0.00026105 0.000262284 0.000263522 0.000264763 0.000266009 0.000267259 0.000268513 0.000269772 -0.000345882 -0.000265431 -0.000190101 -0.000120393 -5.68418E-05 6.22085E-09 4.92434E-05 9.05116E-05 0.000124126 0.000150488 0.000170176 0.000184063 0.000193382 0.000199544 0.000203776 0.000206909 0.000209422 0.000211573 0.000213501 0.000215283 0.000216967 0.000218581 0.000220142 0.000221664 0.000223156 0.000224623 0.000226071 0.000227503 0.000228921 0.000230329 0.000231727 0.000233117 0.0002345 0.000235878 0.00023725 0.000238618 0.000239982 0.000241343 0.000242701 0.000244056 0.000245408 0.000246759 0.000248108 0.000249455 0.000250801 0.000252146 0.000253489 0.000254831 0.000256173 0.000257513 0.000258853 0.000260193 0.000261531 0.00026287 0.000264208 0.000265545 0.000266883 0.00026822 0.000269557 0.000270895 0.000272232 0.00027357 0.000274908 0.000276246 0.000277585 0.000278925 0.000280265 0.000281606 0.000282948 0.00028429 0.000285635 0.00028698 0.000288327 0.000289675 0.000291025 0.000292376 0.00029373 0.000295086 0.000296444 0.000297804 0.000299167 0.000300533 0.000301901 0.000303273 0.000304647 0.000306025 0.000307407 0.000308792 0.000310181 0.000311574 0.000312971 0.000314373 0.000315779 0.00031719 0.000318606 0.000320027 -0.000371386 -0.000286483 -0.000206374 -0.000131556 -6.25697E-05 7.48193E-09 5.50065E-05 0.000101833 0.000140778 0.00017219 0.00019654 0.000214517 0.000227134 0.000235698 0.000241552 0.000245763 0.000249021 0.000251721 0.000254081 0.000256225 0.000258223 0.000260118 0.000261939 0.000263704 0.000265426 0.000267113 0.000268773 0.00027041 0.000272029 0.000273633 0.000275223 0.000276802 0.000278372 0.000279933 0.000281487 0.000283035 0.000284577 0.000286115 0.000287648 0.000289177 0.000290703 0.000292226 0.000293746 0.000295264 0.000296779 0.000298292 0.000299804 0.000301313 0.000302822 0.000304328 0.000305834 0.000307339 0.000308842 0.000310345 0.000311846 0.000313348 0.000314848 0.000316348 0.000317848 0.000319347 0.000320846 0.000322345 0.000323844 0.000325343 0.000326843 0.000328343 0.000329843 0.000331344 0.000332846 0.000334348 0.000335852 0.000337357 0.000338863 0.00034037 0.000341879 0.00034339 0.000344903 0.000346418 0.000347935 0.000349455 0.000350978 0.000352503 0.000354031 0.000355562 0.000357097 0.000358636 0.000360178 0.000361724 0.000363274 0.000364829 0.000366388 0.000367952 0.000369521 0.000371096 0.000372675 0.000374261 -0.000396117 -0.000306925 -0.00022221 -0.000142451 -6.81832E-05 8.94653E-09 6.07071E-05 0.000113076 0.000157387 0.000193951 0.000223162 0.000245571 0.000261985 0.000273523 0.000281506 0.000287165 0.000291411 0.000294818 0.000297716 0.000300293 0.000302658 0.000304876 0.000306989 0.000309022 0.000310995 0.000312921 0.000314809 0.000316667 0.000318499 0.00032031 0.000322103 0.00032388 0.000325645 0.000327398 0.000329142 0.000330877 0.000332604 0.000334325 0.000336039 0.000337748 0.000339453 0.000341153 0.000342849 0.000344542 0.000346231 0.000347918 0.000349602 0.000351283 0.000352962 0.000354639 0.000356314 0.000357987 0.000359659 0.000361329 0.000362998 0.000364666 0.000366333 0.000367998 0.000369663 0.000371327 0.000372991 0.000374654 0.000376317 0.00037798 0.000379642 0.000381305 0.000382967 0.000384631 0.000386294 0.000387959 0.000389624 0.00039129 0.000392957 0.000394626 0.000396296 0.000397968 0.000399642 0.000401318 0.000402996 0.000404677 0.00040636 0.000408047 0.000409736 0.000411429 0.000413125 0.000414826 0.00041653 0.000418238 0.000419951 0.000421668 0.000423391 0.000425119 0.000426852 0.00042859 0.000430335 0.000432085 -0.000420043 -0.000326722 -0.000237568 -0.000153039 -7.36539E-05 1.06416E-08 6.6303E-05 0.000124148 0.000173802 0.000215548 0.000249726 0.000276786 0.000297366 0.000312383 0.000323025 0.000330572 0.000336119 0.00034044 0.000344013 0.000347117 0.000349915 0.000352505 0.000354946 0.000357278 0.000359528 0.000361713 0.000363847 0.00036594 0.000367998 0.000370028 0.000372034 0.00037402 0.000375989 0.000377942 0.000379882 0.000381811 0.00038373 0.000385639 0.000387541 0.000389435 0.000391323 0.000393205 0.000395082 0.000396954 0.000398821 0.000400684 0.000402544 0.000404401 0.000406254 0.000408104 0.000409951 0.000411797 0.000413639 0.00041548 0.000417319 0.000419155 0.000420991 0.000422824 0.000424656 0.000426488 0.000428318 0.000430147 0.000431975 0.000433803 0.00043563 0.000437457 0.000439284 0.00044111 0.000442938 0.000444765 0.000446593 0.000448422 0.000450252 0.000452083 0.000453915 0.000455749 0.000457585 0.000459422 0.000461262 0.000463105 0.00046495 0.000466798 0.000468649 0.000470504 0.000472362 0.000474225 0.000476091 0.000477962 0.000479838 0.000481719 0.000483604 0.000485496 0.000487393 0.000489296 0.000491206 0.000493122 -0.000443147 -0.000345852 -0.000252422 -0.000163294 -7.89631E-05 1.25969E-08 7.17639E-05 0.000134983 0.000189913 0.000236817 0.000275995 0.000307824 0.000332817 0.000351709 0.000365505 0.000375418 0.000382645 0.000388145 0.00039257 0.00039632 0.000399635 0.000402656 0.000405472 0.000408138 0.000410692 0.00041316 0.00041556 0.000417904 0.000420203 0.000422465 0.000424696 0.0004269 0.000429081 0.000431242 0.000433387 0.000435516 0.000437632 0.000439736 0.00044183 0.000443914 0.00044599 0.000448058 0.000450119 0.000452174 0.000454223 0.000456266 0.000458305 0.000460339 0.000462369 0.000464395 0.000466418 0.000468437 0.000470453 0.000472466 0.000474476 0.000476484 0.000478489 0.000480493 0.000482494 0.000484493 0.000486491 0.000488488 0.000490483 0.000492477 0.00049447 0.000496462 0.000498454 0.000500445 0.000502437 0.000504428 0.000506419 0.000508411 0.000510404 0.000512398 0.000514393 0.000516389 0.000518387 0.000520386 0.000522388 0.000524392 0.000526399 0.000528409 0.000530422 0.000532439 0.000534459 0.000536484 0.000538512 0.000540545 0.000542584 0.000544627 0.000546676 0.000548731 0.000550792 0.000552859 0.000554933 0.000557014 -0.000465426 -0.000364305 -0.000266759 -0.000173201 -8.40985E-05 1.48458E-08 7.70693E-05 0.000145534 0.000205642 0.000257639 0.000301797 0.00033844 0.000367991 0.000391036 0.000408398 0.000421148 0.000430478 0.00043748 0.000442981 0.00044753 0.000451466 0.000454994 0.000458239 0.000461281 0.000464173 0.00046695 0.000469637 0.000472252 0.000474808 0.000477315 0.000479782 0.000482215 0.000484618 0.000486996 0.000489351 0.000491688 0.000494007 0.000496312 0.000498603 0.000500882 0.00050315 0.000505408 0.000507657 0.000509898 0.000512132 0.000514359 0.000516579 0.000518794 0.000521003 0.000523207 0.000525407 0.000527602 0.000529793 0.00053198 0.000534164 0.000536344 0.000538521 0.000540695 0.000542866 0.000545035 0.000547202 0.000549366 0.000551529 0.00055369 0.00055585 0.000558008 0.000560165 0.000562321 0.000564477 0.000566633 0.000568788 0.000570943 0.000573099 0.000575255 0.000577413 0.000579571 0.000581731 0.000583892 0.000586056 0.000588222 0.00059039 0.000592561 0.000594735 0.000596913 0.000599095 0.00060128 0.00060347 0.000605665 0.000607865 0.000610071 0.000612282 0.000614499 0.000616722 0.000618952 0.00062119 0.000623434 -0.000486884 -0.000382081 -0.000280575 -0.000182752 -8.90534E-05 1.74252E-08 8.22059E-05 0.000155771 0.000220936 0.000277932 0.000327011 0.000368459 0.000402632 0.000430005 0.000451242 0.000467245 0.000479114 0.000487988 0.00049484 0.00050038 0.000505069 0.000509195 0.000512937 0.000516406 0.000519674 0.000522791 0.000525791 0.000528697 0.000531527 0.000534295 0.000537012 0.000539684 0.000542319 0.000544922 0.000547497 0.000550048 0.000552577 0.000555088 0.000557581 0.000560059 0.000562524 0.000564976 0.000567417 0.000569848 0.000572269 0.000574682 0.000577087 0.000579485 0.000581875 0.000584259 0.000586638 0.00058901 0.000591378 0.000593741 0.000596099 0.000598452 0.000600802 0.000603148 0.000605491 0.00060783 0.000610166 0.000612499 0.00061483 0.000617158 0.000619485 0.000621809 0.000624132 0.000626454 0.000628774 0.000631094 0.000633412 0.000635731 0.00063805 0.000640368 0.000642688 0.000645008 0.000647329 0.000649652 0.000651976 0.000654303 0.000656632 0.000658963 0.000661298 0.000663636 0.000665978 0.000668324 0.000670675 0.00067303 0.00067539 0.000677756 0.000680128 0.000682506 0.000684891 0.000687283 0.000689682 0.000692089 -0.00050753 -0.000399185 -0.00029387 -0.000191946 -9.38249E-05 2.03762E-08 8.71661E-05 0.000165674 0.000235759 0.000297642 0.000351556 0.00039776 0.000436562 0.000468355 0.000493675 0.000513262 0.000528076 0.000539217 0.000547742 0.000554505 0.000560111 0.000564951 0.000569272 0.000573228 0.000576919 0.000580413 0.000583754 0.000586975 0.0005901 0.000593145 0.000596125 0.00059905 0.000601928 0.000604766 0.000607569 0.000610341 0.000613087 0.000615809 0.00061851 0.000621193 0.000623858 0.000626509 0.000629145 0.000631769 0.000634381 0.000636982 0.000639574 0.000642157 0.000644731 0.000647297 0.000649856 0.000652408 0.000654953 0.000657493 0.000660026 0.000662555 0.000665078 0.000667597 0.000670111 0.000672621 0.000675127 0.00067763 0.000680129 0.000682625 0.000685118 0.000687609 0.000690098 0.000692584 0.000695069 0.000697552 0.000700035 0.000702516 0.000704997 0.000707478 0.000709959 0.00071244 0.000714922 0.000717405 0.00071989 0.000722376 0.000724865 0.000727356 0.00072985 0.000732348 0.000734849 0.000737354 0.000739863 0.000742378 0.000744897 0.000747422 0.000749954 0.000752491 0.000755036 0.000757588 0.000760147 0.000762715 -0.000527378 -0.000415627 -0.00030665 -0.000200784 -9.84127E-05 2.37446E-08 9.19462E-05 0.000175233 0.000250092 0.000316734 0.000375378 0.000426262 0.000469658 0.0005059 0.000535426 0.000558838 0.000576941 0.000590734 0.000601283 0.000609547 0.000616271 0.000621966 0.000626965 0.000631482 0.000635651 0.000639564 0.00064328 0.000646844 0.000650285 0.000653627 0.000656887 0.000660078 0.00066321 0.000666293 0.000669333 0.000672336 0.000675305 0.000678246 0.00068116 0.000684052 0.000686923 0.000689776 0.000692611 0.000695431 0.000698237 0.00070103 0.000703811 0.000706581 0.00070934 0.00071209 0.000714831 0.000717564 0.000720289 0.000723006 0.000725717 0.000728421 0.000731119 0.00073381 0.000736497 0.000739178 0.000741855 0.000744527 0.000747195 0.000749859 0.000752519 0.000755176 0.00075783 0.000760482 0.000763131 0.000765778 0.000768423 0.000771067 0.00077371 0.000776352 0.000778993 0.000781635 0.000784277 0.00078692 0.000789564 0.000792209 0.000794857 0.000797506 0.000800158 0.000802814 0.000805473 0.000808136 0.000810803 0.000813475 0.000816152 0.000818835 0.000821524 0.000824219 0.000826922 0.000829632 0.00083235 0.000835076 -0.000546446 -0.000431421 -0.000318925 -0.000209272 -0.000102818 2.75812E-08 9.65456E-05 0.000184445 0.000263925 0.00033519 0.000398446 0.000453914 0.00050184 0.000542513 0.0005763 0.000603692 0.000625352 0.000642144 0.000655074 0.000665149 0.000673227 0.000679949 0.000685751 0.000690916 0.000695629 0.00070001 0.000704142 0.000708079 0.000711863 0.000715523 0.00071908 0.000722553 0.000725953 0.000729293 0.00073258 0.000735821 0.000739022 0.000742188 0.000745322 0.000748429 0.000751511 0.00075457 0.000757608 0.000760628 0.000763631 0.000766618 0.000769591 0.00077255 0.000775498 0.000778433 0.000781358 0.000784273 0.000787179 0.000790075 0.000792963 0.000795844 0.000798717 0.000801583 0.000804442 0.000807295 0.000810143 0.000812984 0.000815821 0.000818653 0.00082148 0.000824304 0.000827123 0.000829939 0.000832752 0.000835562 0.00083837 0.000841176 0.00084398 0.000846782 0.000849584 0.000852385 0.000855187 0.000857988 0.00086079 0.000863593 0.000866398 0.000869205 0.000872014 0.000874826 0.000877642 0.000880461 0.000883284 0.000886112 0.000888946 0.000891785 0.00089463 0.000897481 0.00090034 0.000903206 0.00090608 0.000908963 -0.000564751 -0.00044658 -0.000330705 -0.000217417 -0.000107045 3.19424E-08 0.000100965 0.000193309 0.000277256 0.000353001 0.000420741 0.000480685 0.000533056 0.000578112 0.000616166 0.000647622 0.000673025 0.000693101 0.00070875 0.000720961 0.000730664 0.000738617 0.000745369 0.00075129 0.000756626 0.000761536 0.000766128 0.000770475 0.000774631 0.000778633 0.000782509 0.00078628 0.000789963 0.000793572 0.000797117 0.000800607 0.000804048 0.000807446 0.000810807 0.000814135 0.000817432 0.000820702 0.000823948 0.000827172 0.000830375 0.000833559 0.000836727 0.000839879 0.000843016 0.000846139 0.000849249 0.000852348 0.000855436 0.000858513 0.00086158 0.000864638 0.000867687 0.000870727 0.00087376 0.000876786 0.000879804 0.000882816 0.000885821 0.000888821 0.000891816 0.000894805 0.00089779 0.00090077 0.000903746 0.000906719 0.000909689 0.000912656 0.000915621 0.000918583 0.000921545 0.000924505 0.000927464 0.000930423 0.000933382 0.000936343 0.000939304 0.000942266 0.000945231 0.000948199 0.000951169 0.000954143 0.000957121 0.000960104 0.000963091 0.000966085 0.000969084 0.00097209 0.000975103 0.000978123 0.000981152 0.00098419 -0.000582315 -0.000461123 -0.000342003 -0.000225226 -0.000111096 3.68911E-08 0.000105209 0.000201829 0.000290086 0.000370167 0.00044226 0.000506561 0.00056328 0.000612647 0.000654935 0.000690486 0.000719747 0.000743321 0.000761983 0.000776651 0.000788271 0.00079769 0.000805568 0.000812373 0.000818425 0.000823934 0.00082904 0.00083384 0.000838402 0.000842773 0.00084699 0.000851079 0.000855062 0.000858955 0.00086277 0.000866518 0.000870209 0.000873849 0.000877443 0.000880998 0.000884516 0.000888003 0.000891461 0.000894892 0.000898299 0.000901685 0.00090505 0.000908396 0.000911725 0.000915039 0.000918337 0.000921621 0.000924892 0.000928151 0.000931398 0.000934634 0.00093786 0.000941076 0.000944283 0.000947481 0.000950671 0.000953853 0.000957028 0.000960196 0.000963357 0.000966513 0.000969662 0.000972807 0.000975946 0.000979082 0.000982213 0.000985341 0.000988465 0.000991587 0.000994707 0.000997825 0.00100094 0.00100406 0.00100717 0.00101029 0.0010134 0.00101652 0.00101964 0.00102276 0.00102589 0.00102901 0.00103215 0.00103528 0.00103842 0.00104157 0.00104472 0.00104788 0.00105104 0.00105422 0.0010574 0.00106059 -0.000599158 -0.000475065 -0.000352833 -0.000232709 -0.000114977 4.24968E-08 0.000109279 0.000210013 0.000302424 0.000386693 0.000463003 0.000531539 0.000592496 0.000646087 0.000692553 0.000732188 0.000765365 0.000792582 0.000814492 0.000831909 0.000845745 0.000856889 0.000866096 0.000873939 0.000880819 0.000887009 0.000892693 0.000897994 0.000903 0.000907773 0.000912357 0.000916786 0.000921086 0.000925278 0.000929377 0.000933397 0.000937347 0.000941237 0.000945073 0.000948862 0.000952608 0.000956317 0.000959992 0.000963635 0.000967251 0.00097084 0.000974406 0.00097795 0.000981474 0.000984979 0.000988467 0.000991938 0.000995395 0.000998836 0.00100226 0.00100568 0.00100908 0.00101248 0.00101586 0.00101923 0.00102259 0.00102594 0.00102929 0.00103262 0.00103595 0.00103927 0.00104259 0.0010459 0.0010492 0.0010525 0.00105579 0.00105908 0.00106236 0.00106564 0.00106892 0.00107219 0.00107547 0.00107874 0.00108201 0.00108528 0.00108855 0.00109182 0.00109509 0.00109837 0.00110164 0.00110492 0.00110821 0.00111149 0.00111479 0.00111808 0.00112138 0.00112469 0.00112801 0.00113133 0.00113467 0.00113801 -0.000615302 -0.000488426 -0.000363207 -0.000239876 -0.000118692 4.88367E-08 0.000113182 0.000217866 0.000314278 0.000402591 0.00048298 0.000555624 0.000620706 0.000678422 0.000728991 0.000772669 0.000809775 0.00084072 0.00086605 0.000886465 0.000902801 0.000915942 0.000926706 0.000935762 0.000943602 0.000950572 0.000956907 0.000962767 0.000968263 0.000973472 0.000978453 0.000983246 0.000987885 0.000992394 0.000996792 0.0010011 0.00100532 0.00100947 0.00101355 0.00101758 0.00102157 0.0010255 0.0010294 0.00103326 0.00103709 0.00104089 0.00104466 0.0010484 0.00105212 0.00105582 0.0010595 0.00106316 0.0010668 0.00107043 0.00107404 0.00107764 0.00108122 0.00108479 0.00108835 0.00109189 0.00109543 0.00109895 0.00110247 0.00110597 0.00110947 0.00111295 0.00111643 0.0011199 0.00112337 0.00112683 0.00113028 0.00113373 0.00113717 0.00114061 0.00114405 0.00114748 0.00115091 0.00115433 0.00115776 0.00116118 0.0011646 0.00116803 0.00117145 0.00117488 0.0011783 0.00118173 0.00118517 0.0011886 0.00119205 0.00119549 0.00119894 0.0012024 0.00120587 0.00120934 0.00121282 0.00121631 -0.000630769 -0.000501223 -0.000373141 -0.000246736 -0.000122246 5.59963E-08 0.000116921 0.000225398 0.000325659 0.000417871 0.000502204 0.000578827 0.000647914 0.00070965 0.000764235 0.000811896 0.000852909 0.00088762 0.000916483 0.00094009 0.000959178 0.000974585 0.000987152 0.000997621 0.00100657 0.00101444 0.00102151 0.001028 0.00103403 0.00103972 0.00104513 0.00105032 0.00105532 0.00106016 0.00106488 0.00106948 0.00107398 0.0010784 0.00108275 0.00108703 0.00109126 0.00109543 0.00109955 0.00110364 0.00110768 0.00111169 0.00111567 0.00111962 0.00112354 0.00112744 0.00113131 0.00113516 0.001139 0.00114281 0.0011466 0.00115038 0.00115414 0.00115789 0.00116163 0.00116535 0.00116905 0.00117275 0.00117643 0.00118011 0.00118377 0.00118742 0.00119107 0.0011947 0.00119833 0.00120195 0.00120556 0.00120917 0.00121277 0.00121637 0.00121996 0.00122355 0.00122713 0.00123071 0.00123429 0.00123787 0.00124144 0.00124502 0.00124859 0.00125217 0.00125574 0.00125932 0.0012629 0.00126649 0.00127008 0.00127367 0.00127727 0.00128088 0.00128449 0.00128811 0.00129173 0.00129537 -0.000645582 -0.000513474 -0.000382649 -0.000253299 -0.000125645 6.40703E-08 0.000120501 0.000232618 0.00033658 0.00043255 0.00052069 0.000601163 0.000674136 0.000739782 0.000798286 0.000849855 0.000894729 0.000933205 0.000965664 0.0009926 0.00101465 0.00103257 0.00104719 0.00105929 0.00106954 0.00107843 0.00108634 0.00109353 0.00110016 0.00110638 0.00111226 0.00111786 0.00112325 0.00112845 0.0011335 0.00113842 0.00114322 0.00114793 0.00115254 0.00115708 0.00116156 0.00116597 0.00117033 0.00117464 0.00117891 0.00118314 0.00118733 0.00119149 0.00119561 0.00119971 0.00120378 0.00120783 0.00121185 0.00121585 0.00121983 0.00122379 0.00122774 0.00123167 0.00123558 0.00123947 0.00124335 0.00124722 0.00125108 0.00125492 0.00125875 0.00126257 0.00126638 0.00127018 0.00127397 0.00127775 0.00128152 0.00128529 0.00128905 0.0012928 0.00129655 0.00130029 0.00130403 0.00130776 0.00131149 0.00131522 0.00131895 0.00132267 0.0013264 0.00133012 0.00133385 0.00133757 0.0013413 0.00134503 0.00134877 0.00135251 0.00135625 0.00136 0.00136376 0.00136753 0.0013713 0.00137508 -0.00065976 -0.000525199 -0.000391744 -0.000259575 -0.000128893 7.31636E-08 0.000123929 0.000239536 0.000347054 0.000446642 0.000538454 0.00062265 0.000699387 0.00076883 0.000831153 0.000886543 0.000935216 0.000977429 0.00101351 0.00104386 0.00106903 0.00108969 0.00110661 0.00112056 0.00113229 0.00114236 0.00115123 0.00115921 0.00116651 0.0011733 0.00117969 0.00118576 0.00119156 0.00119715 0.00120255 0.0012078 0.00121292 0.00121792 0.00122282 0.00122763 0.00123236 0.00123703 0.00124163 0.00124618 0.00125067 0.00125512 0.00125953 0.0012639 0.00126823 0.00127253 0.0012768 0.00128104 0.00128526 0.00128945 0.00129362 0.00129777 0.0013019 0.001306 0.00131009 0.00131416 0.00131822 0.00132226 0.00132629 0.0013303 0.0013343 0.00133828 0.00134226 0.00134622 0.00135017 0.00135412 0.00135805 0.00136197 0.00136589 0.0013698 0.0013737 0.0013776 0.00138149 0.00138538 0.00138926 0.00139314 0.00139702 0.00140089 0.00140476 0.00140864 0.00141251 0.00141638 0.00142026 0.00142414 0.00142802 0.0014319 0.00143579 0.00143968 0.00144358 0.00144749 0.00145141 0.00145533 -0.000673327 -0.000536413 -0.000400441 -0.000265574 -0.000131996 8.33921E-08 0.000127209 0.000246161 0.000357095 0.000460164 0.000555518 0.000643309 0.000723689 0.000796816 0.000862851 0.000921969 0.000974366 0.00102027 0.00105995 0.00109377 0.00112218 0.00114575 0.00116517 0.00118122 0.00119463 0.00120606 0.00121602 0.00122489 0.00123294 0.00124037 0.00124732 0.00125388 0.00126014 0.00126613 0.00127191 0.00127751 0.00128296 0.00128827 0.00129347 0.00129856 0.00130356 0.00130849 0.00131334 0.00131813 0.00132286 0.00132753 0.00133216 0.00133675 0.00134129 0.0013458 0.00135028 0.00135472 0.00135913 0.00136351 0.00136787 0.00137221 0.00137652 0.00138081 0.00138508 0.00138933 0.00139356 0.00139777 0.00140197 0.00140615 0.00141032 0.00141447 0.00141861 0.00142274 0.00142686 0.00143096 0.00143505 0.00143914 0.00144321 0.00144728 0.00145133 0.00145539 0.00145943 0.00146347 0.0014675 0.00147153 0.00147556 0.00147958 0.0014836 0.00148762 0.00149164 0.00149566 0.00149968 0.0015037 0.00150772 0.00151175 0.00151578 0.00151982 0.00152386 0.00152791 0.00153197 0.00153603 -0.000686302 -0.000547137 -0.000408755 -0.000271306 -0.000134959 9.4884E-08 0.000130347 0.000252504 0.000366717 0.000473133 0.000571899 0.000663161 0.000747065 0.00082376 0.000893401 0.000956151 0.00101219 0.00106172 0.00110497 0.00114227 0.00117397 0.00120059 0.00122272 0.00124107 0.00125638 0.00126934 0.00128054 0.00129042 0.00129931 0.00130745 0.00131501 0.00132212 0.00132886 0.00133529 0.00134148 0.00134745 0.00135325 0.00135889 0.00136439 0.00136978 0.00137506 0.00138025 0.00138536 0.0013904 0.00139537 0.00140028 0.00140514 0.00140995 0.00141471 0.00141943 0.00142411 0.00142875 0.00143336 0.00143794 0.00144249 0.00144702 0.00145152 0.00145599 0.00146044 0.00146487 0.00146928 0.00147367 0.00147804 0.00148239 0.00148673 0.00149105 0.00149535 0.00149964 0.00150392 0.00150819 0.00151244 0.00151668 0.00152091 0.00152514 0.00152935 0.00153355 0.00153775 0.00154194 0.00154612 0.0015503 0.00155448 0.00155865 0.00156282 0.00156698 0.00157114 0.00157531 0.00157947 0.00158364 0.0015878 0.00159197 0.00159615 0.00160032 0.00160451 0.0016087 0.00161289 0.0016171 -0.000698706 -0.000557385 -0.000416697 -0.00027678 -0.000137787 1.07781E-07 0.000133348 0.000258574 0.000375934 0.000485568 0.00058762 0.000682229 0.000769537 0.000849688 0.000922827 0.000989108 0.0010487 0.00110178 0.00114856 0.00118931 0.00122435 0.00125409 0.00127908 0.00129992 0.00131734 0.00133204 0.00134463 0.00135565 0.00136549 0.00137442 0.00138266 0.00139036 0.00139762 0.00140453 0.00141115 0.00141752 0.00142368 0.00142967 0.0014355 0.00144119 0.00144677 0.00145224 0.00145762 0.00146291 0.00146813 0.00147328 0.00147837 0.00148341 0.00148839 0.00149332 0.00149822 0.00150307 0.00150788 0.00151266 0.0015174 0.00152212 0.0015268 0.00153146 0.0015361 0.00154071 0.00154529 0.00154986 0.0015544 0.00155893 0.00156343 0.00156792 0.00157239 0.00157685 0.00158129 0.00158572 0.00159013 0.00159453 0.00159892 0.0016033 0.00160766 0.00161202 0.00161637 0.00162071 0.00162505 0.00162938 0.0016337 0.00163801 0.00164233 0.00164664 0.00165095 0.00165525 0.00165956 0.00166387 0.00166818 0.00167249 0.0016768 0.00168112 0.00168544 0.00168977 0.0016941 0.00169844 -0.00071056 -0.000567175 -0.000424282 -0.000282006 -0.000140485 1.22239E-07 0.000136217 0.000264382 0.000384759 0.000497485 0.000602699 0.000700536 0.000791133 0.000874625 0.000951154 0.00102087 0.00108391 0.00114046 0.00119071 0.00123488 0.00127325 0.00130619 0.00133413 0.00135763 0.00137735 0.00139397 0.00140814 0.00142045 0.00143134 0.00144116 0.00145015 0.00145849 0.00146633 0.00147375 0.00148083 0.00148762 0.00149418 0.00150053 0.0015067 0.00151272 0.0015186 0.00152436 0.00153002 0.00153558 0.00154105 0.00154645 0.00155178 0.00155705 0.00156226 0.00156741 0.00157252 0.00157758 0.0015826 0.00158758 0.00159252 0.00159743 0.00160231 0.00160715 0.00161197 0.00161676 0.00162153 0.00162627 0.00163099 0.00163569 0.00164036 0.00164502 0.00164966 0.00165428 0.00165888 0.00166347 0.00166805 0.00167261 0.00167715 0.00168169 0.00168621 0.00169072 0.00169522 0.00169971 0.0017042 0.00170867 0.00171314 0.00171761 0.00172206 0.00172652 0.00173097 0.00173542 0.00173987 0.00174432 0.00174876 0.00175321 0.00175767 0.00176212 0.00176658 0.00177105 0.00177552 0.00178 -0.000721883 -0.000576524 -0.000431523 -0.000286991 -0.000143056 1.38432E-07 0.000138959 0.000269936 0.000393206 0.000508903 0.000617159 0.000718106 0.000811876 0.0008986 0.000978412 0.00105145 0.00111786 0.0011778 0.00123144 0.00127898 0.00132066 0.0013568 0.00138777 0.00141406 0.00143624 0.00145497 0.00147091 0.00148466 0.00149674 0.00150754 0.00151736 0.00152642 0.00153488 0.00154285 0.00155043 0.00155767 0.00156465 0.00157138 0.00157791 0.00158427 0.00159047 0.00159653 0.00160248 0.00160832 0.00161406 0.00161971 0.00162529 0.00163079 0.00163623 0.00164161 0.00164694 0.00165222 0.00165744 0.00166263 0.00166777 0.00167288 0.00167795 0.00168298 0.00168799 0.00169296 0.00169791 0.00170283 0.00170773 0.0017126 0.00171745 0.00172227 0.00172708 0.00173187 0.00173663 0.00174139 0.00174612 0.00175084 0.00175554 0.00176023 0.00176491 0.00176957 0.00177422 0.00177887 0.0017835 0.00178812 0.00179274 0.00179735 0.00180195 0.00180655 0.00181115 0.00181574 0.00182033 0.00182491 0.0018295 0.00183409 0.00183868 0.00184327 0.00184787 0.00185247 0.00185708 0.00186169 -0.000732693 -0.000585448 -0.000438431 -0.000291746 -0.000145507 1.56549E-07 0.00014158 0.000275247 0.000401289 0.000519837 0.000631019 0.000734962 0.000831792 0.000921638 0.00100463 0.00108089 0.00115057 0.0012138 0.00127076 0.00132161 0.00136657 0.00140591 0.00143995 0.00146911 0.0014939 0.00151491 0.00153278 0.00154814 0.00156154 0.00157344 0.00158418 0.00159403 0.00160317 0.00161174 0.00161985 0.00162759 0.001635 0.00164215 0.00164906 0.00165577 0.00166231 0.00166869 0.00167493 0.00168106 0.00168707 0.00169299 0.00169882 0.00170458 0.00171025 0.00171586 0.00172141 0.00172691 0.00173235 0.00173774 0.00174309 0.00174839 0.00175366 0.00175889 0.00176408 0.00176924 0.00177437 0.00177947 0.00178455 0.00178959 0.00179461 0.00179961 0.00180459 0.00180954 0.00181447 0.00181939 0.00182428 0.00182916 0.00183402 0.00183887 0.0018437 0.00184852 0.00185332 0.00185811 0.0018629 0.00186767 0.00187243 0.00187718 0.00188193 0.00188667 0.00189141 0.00189614 0.00190087 0.0019056 0.00191032 0.00191505 0.00191978 0.0019245 0.00192924 0.00193397 0.00193871 0.00194346 -0.000743009 -0.000593961 -0.00044502 -0.000296279 -0.000147841 1.768E-07 0.000144084 0.000280323 0.000409021 0.000530305 0.000644299 0.000751126 0.000850909 0.00094377 0.00102983 0.00110922 0.00118207 0.00124851 0.0013087 0.00136279 0.00141098 0.00145349 0.00149062 0.00152271 0.0015502 0.00157364 0.00159361 0.00161075 0.00162563 0.00163875 0.00165051 0.00166122 0.00167111 0.00168033 0.00168903 0.00169728 0.00170517 0.00171275 0.00172006 0.00172715 0.00173404 0.00174075 0.00174731 0.00175373 0.00176003 0.00176623 0.00177232 0.00177832 0.00178425 0.00179009 0.00179587 0.00180159 0.00180725 0.00181285 0.00181841 0.00182392 0.00182938 0.00183481 0.00184019 0.00184554 0.00185086 0.00185614 0.00186139 0.00186661 0.00187181 0.00187698 0.00188212 0.00188724 0.00189234 0.00189742 0.00190248 0.00190751 0.00191253 0.00191753 0.00192252 0.00192749 0.00193245 0.00193739 0.00194232 0.00194724 0.00195215 0.00195705 0.00196194 0.00196683 0.0019717 0.00197658 0.00198144 0.00198631 0.00199117 0.00199603 0.0020009 0.00200576 0.00201063 0.00201549 0.00202037 0.00202525 -0.000752849 -0.000602078 -0.0004513 -0.000300597 -0.000150062 1.99418E-07 0.000146476 0.000285174 0.000416416 0.000540325 0.000657021 0.000766624 0.000869251 0.000965022 0.00105406 0.00113647 0.00121239 0.00128195 0.00134528 0.00140254 0.00145389 0.00149955 0.00153975 0.00157479 0.00160507 0.00163105 0.00165328 0.00167236 0.00168887 0.00170335 0.00171624 0.00172791 0.00173861 0.00174854 0.00175786 0.00176667 0.00177507 0.00178311 0.00179085 0.00179833 0.00180559 0.00181265 0.00181954 0.00182628 0.00183287 0.00183935 0.00184571 0.00185198 0.00185815 0.00186424 0.00187026 0.0018762 0.00188209 0.00188791 0.00189367 0.00189939 0.00190506 0.00191068 0.00191626 0.0019218 0.0019273 0.00193276 0.0019382 0.0019436 0.00194897 0.00195431 0.00195963 0.00196492 0.00197018 0.00197542 0.00198064 0.00198584 0.00199102 0.00199618 0.00200132 0.00200644 0.00201155 0.00201664 0.00202172 0.00202679 0.00203184 0.00203689 0.00204192 0.00204695 0.00205197 0.00205698 0.00206199 0.00206699 0.00207199 0.00207699 0.00208199 0.00208698 0.00209198 0.00209698 0.00210199 0.002107 -0.000762229 -0.000609814 -0.000457283 -0.000304708 -0.000152174 2.24656E-07 0.000148761 0.000289808 0.000423485 0.000549911 0.000669203 0.000781476 0.000886845 0.000985423 0.00107733 0.00116267 0.00124157 0.00131415 0.00138055 0.00144089 0.00149535 0.00154409 0.00158733 0.00162534 0.00165845 0.00168707 0.00171168 0.00173284 0.00175113 0.00176711 0.00178126 0.00179398 0.00180557 0.00181628 0.00182628 0.0018357 0.00184463 0.00185317 0.00186136 0.00186926 0.00187691 0.00188433 0.00189156 0.00189862 0.00190553 0.0019123 0.00191895 0.00192548 0.00193191 0.00193826 0.00194451 0.00195069 0.0019568 0.00196284 0.00196883 0.00197475 0.00198062 0.00198645 0.00199222 0.00199796 0.00200365 0.0020093 0.00201492 0.0020205 0.00202605 0.00203156 0.00203705 0.00204251 0.00204794 0.00205335 0.00205873 0.00206409 0.00206943 0.00207474 0.00208004 0.00208532 0.00209058 0.00209582 0.00210105 0.00210626 0.00211146 0.00211665 0.00212183 0.002127 0.00213216 0.00213731 0.00214245 0.00214759 0.00215273 0.00215786 0.00216299 0.00216812 0.00217325 0.00217839 0.00218352 0.00218866 -0.000771167 -0.000617183 -0.000462979 -0.00030862 -0.000154182 2.52796E-07 0.000150943 0.000294234 0.000430242 0.000559081 0.000680865 0.000795706 0.000903714 0.001005 0.00109967 0.00118785 0.00126964 0.00134515 0.00141452 0.00147788 0.00153536 0.00158713 0.00163338 0.00167434 0.0017103 0.00174161 0.00176871 0.00179209 0.00181231 0.00182992 0.00184545 0.00185933 0.00187191 0.00188347 0.0018942 0.00190427 0.00191379 0.00192285 0.00193152 0.00193986 0.00194792 0.00195573 0.00196332 0.00197072 0.00197795 0.00198502 0.00199196 0.00199877 0.00200548 0.00201207 0.00201858 0.002025 0.00203134 0.00203761 0.00204382 0.00204996 0.00205604 0.00206207 0.00206804 0.00207397 0.00207985 0.0020857 0.0020915 0.00209726 0.00210299 0.00210868 0.00211434 0.00211997 0.00212557 0.00213114 0.00213669 0.00214221 0.00214771 0.00215318 0.00215863 0.00216406 0.00216948 0.00217487 0.00218025 0.00218561 0.00219096 0.00219629 0.00220161 0.00220692 0.00221222 0.00221751 0.0022228 0.00222807 0.00223334 0.00223861 0.00224387 0.00224914 0.0022544 0.00225966 0.00226493 0.00227019 -0.000779678 -0.000624198 -0.000468399 -0.000312341 -0.000156088 2.84147E-07 0.000153027 0.00029846 0.000436697 0.000567849 0.000692026 0.000809335 0.000919884 0.00102378 0.00112113 0.00121204 0.00129662 0.00137499 0.00144725 0.00151353 0.00157396 0.0016287 0.00167791 0.00172179 0.0017606 0.00179464 0.00182429 0.00185 0.00187228 0.00189168 0.00190872 0.00192388 0.00193754 0.00195002 0.00196155 0.00197232 0.00198246 0.00199209 0.00200127 0.00201009 0.00201858 0.00202679 0.00203476 0.00204251 0.00205007 0.00205747 0.00206471 0.00207181 0.00207879 0.00208565 0.00209241 0.00209908 0.00210566 0.00211217 0.00211859 0.00212495 0.00213125 0.00213748 0.00214366 0.00214979 0.00215587 0.0021619 0.00216789 0.00217384 0.00217975 0.00218562 0.00219145 0.00219725 0.00220302 0.00220876 0.00221447 0.00222016 0.00222582 0.00223145 0.00223706 0.00224264 0.00224821 0.00225375 0.00225928 0.00226479 0.00227028 0.00227576 0.00228122 0.00228668 0.00229212 0.00229755 0.00230297 0.00230838 0.00231379 0.00231919 0.00232458 0.00232998 0.00233537 0.00234076 0.00234615 0.00235155 -0.000787778 -0.000630872 -0.000473554 -0.000315876 -0.000157896 3.19048E-07 0.000155017 0.000302495 0.000442864 0.000576231 0.000702704 0.000822385 0.00093538 0.00104179 0.00114172 0.00123528 0.00132256 0.00140368 0.00147875 0.00154787 0.00161118 0.00166882 0.00172093 0.0017677 0.00180934 0.00184613 0.00187838 0.00190651 0.00193097 0.00195228 0.00197097 0.00198752 0.00200236 0.00201585 0.00202825 0.00203978 0.0020506 0.00206082 0.00207055 0.00207986 0.00208881 0.00209745 0.00210582 0.00211394 0.00212185 0.00212958 0.00213713 0.00214453 0.0021518 0.00215894 0.00216597 0.00217289 0.00217972 0.00218646 0.00219311 0.0021997 0.00220621 0.00221266 0.00221904 0.00222537 0.00223165 0.00223788 0.00224406 0.00225019 0.00225628 0.00226233 0.00226834 0.00227432 0.00228026 0.00228617 0.00229205 0.00229789 0.00230371 0.0023095 0.00231527 0.00232101 0.00232673 0.00233243 0.0023381 0.00234376 0.0023494 0.00235502 0.00236063 0.00236622 0.0023718 0.00237737 0.00238293 0.00238848 0.00239402 0.00239955 0.00240508 0.0024106 0.00241613 0.00242165 0.00242717 0.00243269 -0.000795482 -0.000637216 -0.000478452 -0.000319233 -0.00015961 3.57874E-07 0.000156916 0.000306346 0.000448753 0.000584242 0.000712916 0.000834876 0.000950224 0.00105906 0.00116148 0.00125759 0.00134749 0.00143128 0.00150906 0.00158095 0.00164706 0.00170753 0.00176248 0.00181208 0.00185653 0.00189606 0.00193095 0.00196155 0.00198829 0.00201163 0.00203209 0.00205016 0.00206629 0.00208088 0.00209423 0.00210658 0.00211812 0.00212899 0.00213931 0.00214915 0.00215858 0.00216767 0.00217645 0.00218496 0.00219324 0.00220131 0.00220919 0.00221691 0.00222447 0.00223189 0.00223919 0.00224637 0.00225345 0.00226044 0.00226733 0.00227414 0.00228088 0.00228755 0.00229414 0.00230068 0.00230716 0.00231358 0.00231995 0.00232627 0.00233255 0.00233878 0.00234497 0.00235112 0.00235724 0.00236332 0.00236936 0.00237537 0.00238135 0.00238731 0.00239323 0.00239913 0.002405 0.00241085 0.00241668 0.00242248 0.00242827 0.00243403 0.00243979 0.00244552 0.00245124 0.00245695 0.00246264 0.00246832 0.002474 0.00247967 0.00248533 0.00249098 0.00249663 0.00250228 0.00250793 0.00251358 -0.000802802 -0.000643244 -0.000483103 -0.000322418 -0.000161233 4.01037E-07 0.00015873 0.00031002 0.000454375 0.000591895 0.000722681 0.00084683 0.000964441 0.00107561 0.00118043 0.00127901 0.00137143 0.00145781 0.00153823 0.0016128 0.00168163 0.00174485 0.00180258 0.00185496 0.00190218 0.00194443 0.00198196 0.00201508 0.00204417 0.00206964 0.00209199 0.0021117 0.00212924 0.00214503 0.00215941 0.00217265 0.00218498 0.00219654 0.00220747 0.00221787 0.00222782 0.00223738 0.0022466 0.00225553 0.00226419 0.00227262 0.00228084 0.00228888 0.00229675 0.00230447 0.00231205 0.0023195 0.00232684 0.00233407 0.00234121 0.00234826 0.00235522 0.00236211 0.00236892 0.00237567 0.00238235 0.00238897 0.00239554 0.00240205 0.00240852 0.00241493 0.00242131 0.00242763 0.00243392 0.00244017 0.00244639 0.00245256 0.00245871 0.00246482 0.00247091 0.00247696 0.00248299 0.00248899 0.00249497 0.00250092 0.00250685 0.00251277 0.00251866 0.00252453 0.00253039 0.00253624 0.00254207 0.00254789 0.0025537 0.0025595 0.00256529 0.00257108 0.00257686 0.00258263 0.00258841 0.00259418 -0.000809754 -0.000648965 -0.000487515 -0.000325437 -0.000162767 4.48986E-07 0.000160462 0.000313526 0.000459741 0.000599205 0.000732014 0.000858265 0.000978052 0.00109147 0.00119861 0.00129956 0.00139443 0.0014833 0.00156628 0.00164345 0.00171493 0.00178083 0.00184127 0.00189637 0.00194631 0.00199125 0.00203142 0.00206708 0.00209857 0.00212626 0.00215061 0.00217207 0.00219113 0.00220822 0.00222372 0.00223793 0.00225109 0.0022634 0.002275 0.002286 0.00229649 0.00230655 0.00231623 0.00232559 0.00233465 0.00234346 0.00235204 0.00236041 0.0023686 0.00237662 0.00238449 0.00239223 0.00239983 0.00240733 0.00241471 0.002422 0.0024292 0.00243631 0.00244334 0.0024503 0.00245719 0.00246402 0.00247078 0.00247749 0.00248415 0.00249075 0.00249731 0.00250381 0.00251028 0.0025167 0.00252308 0.00252943 0.00253574 0.00254202 0.00254826 0.00255447 0.00256065 0.00256681 0.00257294 0.00257904 0.00258512 0.00259118 0.00259722 0.00260323 0.00260923 0.00261522 0.00262119 0.00262714 0.00263309 0.00263902 0.00264494 0.00265086 0.00265676 0.00266267 0.00266857 0.00267447 -0.00081635 -0.000654391 -0.000491697 -0.000328295 -0.000164216 5.0222E-07 0.000162117 0.00031687 0.000464862 0.000606185 0.000740934 0.000869202 0.000991079 0.00110666 0.00121603 0.00131928 0.00141651 0.0015078 0.00159324 0.00167294 0.00174699 0.0018155 0.00187858 0.00193634 0.00198894 0.00203654 0.00207933 0.00211754 0.00215146 0.00218143 0.00220786 0.00223119 0.00225188 0.00227038 0.00228709 0.00230234 0.00231641 0.00232952 0.00234183 0.00235347 0.00236454 0.00237513 0.0023853 0.0023951 0.00240459 0.00241379 0.00242274 0.00243146 0.00243998 0.00244832 0.00245649 0.00246451 0.0024724 0.00248016 0.0024878 0.00249533 0.00250277 0.00251011 0.00251737 0.00252455 0.00253165 0.00253869 0.00254565 0.00255256 0.00255941 0.0025662 0.00257294 0.00257963 0.00258627 0.00259287 0.00259943 0.00260594 0.00261242 0.00261886 0.00262526 0.00263163 0.00263797 0.00264428 0.00265056 0.00265682 0.00266304 0.00266925 0.00267543 0.00268159 0.00268773 0.00269385 0.00269996 0.00270605 0.00271213 0.00271819 0.00272424 0.00273029 0.00273632 0.00274236 0.00274838 0.0027544 -0.000822602 -0.000659533 -0.000495657 -0.000330999 -0.000165581 5.61283E-07 0.000163697 0.00032006 0.000469747 0.000612848 0.000749455 0.000879658 0.00100354 0.0011212 0.00123273 0.00133819 0.0014377 0.00153133 0.00161917 0.00170131 0.00177786 0.0018489 0.00191454 0.00197491 0.00203012 0.00208033 0.0021257 0.00216644 0.00220281 0.00223511 0.0022637 0.00228898 0.00231141 0.00233142 0.00234944 0.00236582 0.00238088 0.00239484 0.00240791 0.00242023 0.00243192 0.00244306 0.00245375 0.00246403 0.00247395 0.00248357 0.00249291 0.00250199 0.00251086 0.00251953 0.00252801 0.00253633 0.0025445 0.00255253 0.00256044 0.00256823 0.00257591 0.00258349 0.00259098 0.00259838 0.0026057 0.00261294 0.00262012 0.00262722 0.00263427 0.00264125 0.00264818 0.00265505 0.00266188 0.00266865 0.00267538 0.00268207 0.00268871 0.00269532 0.00270188 0.00270842 0.00271491 0.00272138 0.00272781 0.00273421 0.00274059 0.00274694 0.00275327 0.00275957 0.00276585 0.00277211 0.00277836 0.00278458 0.00279079 0.00279699 0.00280317 0.00280935 0.00281551 0.00282167 0.00282782 0.00283397 -0.000828523 -0.000664399 -0.000499403 -0.000333552 -0.000166866 6.26774E-07 0.000165207 0.000323102 0.000474406 0.000619207 0.000757593 0.000889652 0.00101547 0.00113513 0.00124872 0.00135633 0.00145803 0.00155392 0.00164408 0.00172859 0.00180755 0.00188106 0.00194921 0.0020121 0.00206987 0.00212263 0.00217055 0.00221381 0.00225263 0.00228728 0.00231808 0.0023454 0.00236966 0.00239129 0.00241071 0.00242831 0.00244442 0.00245931 0.00247319 0.00248624 0.00249858 0.00251032 0.00252155 0.00253233 0.00254272 0.00255276 0.0025625 0.00257197 0.0025812 0.00259021 0.00259902 0.00260764 0.00261611 0.00262442 0.0026326 0.00264065 0.00264858 0.0026564 0.00266413 0.00267176 0.0026793 0.00268676 0.00269414 0.00270146 0.0027087 0.00271588 0.002723 0.00273006 0.00273706 0.00274402 0.00275092 0.00275778 0.0027646 0.00277137 0.0027781 0.00278479 0.00279145 0.00279807 0.00280466 0.00281121 0.00281774 0.00282424 0.00283071 0.00283715 0.00284358 0.00284998 0.00285636 0.00286272 0.00286906 0.00287539 0.00288171 0.00288801 0.0028943 0.00290059 0.00290686 0.00291313 -0.000834123 -0.000668999 -0.000502941 -0.00033596 -0.000168073 6.99348E-07 0.00016665 0.000326003 0.000478849 0.000625274 0.000765363 0.000899202 0.00102687 0.00114846 0.00126404 0.00137371 0.00147754 0.00157561 0.00166801 0.00175482 0.00183612 0.00191202 0.0019826 0.00204796 0.00210822 0.00216349 0.00221391 0.00225966 0.00230092 0.00233793 0.00237098 0.00240039 0.00242657 0.00244991 0.00247083 0.00248974 0.00250699 0.00252287 0.00253762 0.00255144 0.00256448 0.00257685 0.00258865 0.00259996 0.00261083 0.00262133 0.0026315 0.00264137 0.00265097 0.00266033 0.00266947 0.00267842 0.00268719 0.00269579 0.00270425 0.00271257 0.00272076 0.00272883 0.0027368 0.00274466 0.00275243 0.00276011 0.00276771 0.00277523 0.00278267 0.00279005 0.00279736 0.00280462 0.00281181 0.00281894 0.00282603 0.00283306 0.00284005 0.00284699 0.00285388 0.00286074 0.00286755 0.00287433 0.00288107 0.00288778 0.00289446 0.00290111 0.00290772 0.00291431 0.00292088 0.00292742 0.00293394 0.00294043 0.00294691 0.00295337 0.00295982 0.00296625 0.00297267 0.00297908 0.00298548 0.00299188 -0.000839414 -0.000673343 -0.000506278 -0.000338228 -0.000169202 7.79728E-07 0.00016803 0.000328769 0.000483085 0.000631061 0.00077278 0.000908325 0.00103778 0.00116121 0.00127872 0.00139037 0.00149624 0.00159642 0.00169099 0.00178002 0.0018636 0.00194182 0.00201476 0.00208252 0.00214521 0.00220293 0.00225581 0.002304 0.00234768 0.00238705 0.00242237 0.00245393 0.00248209 0.00250722 0.00252974 0.00255005 0.00256852 0.00258546 0.00260115 0.0026158 0.00262957 0.00264261 0.00265502 0.00266688 0.00267827 0.00268925 0.00269986 0.00271014 0.00272013 0.00272986 0.00273935 0.00274863 0.00275771 0.00276662 0.00277537 0.00278396 0.00279242 0.00280075 0.00280896 0.00281706 0.00282506 0.00283297 0.00284078 0.00284852 0.00285617 0.00286375 0.00287126 0.0028787 0.00288608 0.0028934 0.00290067 0.00290788 0.00291504 0.00292215 0.00292921 0.00293623 0.00294321 0.00295014 0.00295704 0.0029639 0.00297073 0.00297753 0.00298429 0.00299103 0.00299773 0.00300441 0.00301107 0.00301771 0.00302432 0.00303091 0.00303749 0.00304405 0.0030506 0.00305714 0.00306366 0.00307018 -0.000844405 -0.000677438 -0.000509422 -0.000340359 -0.000170258 8.68702E-07 0.000169351 0.000331408 0.000487124 0.00063658 0.000779858 0.000917037 0.0010482 0.00117341 0.00129276 0.00140632 0.00151418 0.00161639 0.00171305 0.00180424 0.00189002 0.00197049 0.00204573 0.00211582 0.00218087 0.00224099 0.00229627 0.00234687 0.00239294 0.00243466 0.00247226 0.00250599 0.00253619 0.00256319 0.00258739 0.00260919 0.00262896 0.00264705 0.00266373 0.00267926 0.00269382 0.00270757 0.00272062 0.00273307 0.00274499 0.00275647 0.00276754 0.00277826 0.00278866 0.00279877 0.00280862 0.00281825 0.00282766 0.00283688 0.00284592 0.0028548 0.00286353 0.00287212 0.00288059 0.00288894 0.00289718 0.00290531 0.00291335 0.0029213 0.00292916 0.00293695 0.00294466 0.0029523 0.00295987 0.00296738 0.00297482 0.00298221 0.00298955 0.00299683 0.00300406 0.00301125 0.00301839 0.00302548 0.00303254 0.00303956 0.00304654 0.00305348 0.00306039 0.00306727 0.00307412 0.00308095 0.00308774 0.00309451 0.00310126 0.00310799 0.0031147 0.00312139 0.00312807 0.00313473 0.00314138 0.00314801 -0.000849106 -0.000681293 -0.000512377 -0.000342358 -0.00017124 9.67136E-07 0.000170616 0.000333923 0.000490973 0.000641843 0.000786611 0.000925356 0.00105815 0.00118508 0.0013062 0.00142161 0.00153137 0.00163555 0.00173424 0.0018275 0.00191542 0.00199807 0.00207554 0.0021479 0.00221526 0.0022777 0.00233534 0.0023883 0.00243672 0.00248077 0.00252064 0.00255657 0.00258883 0.00261777 0.00264373 0.0026671 0.00268826 0.00270756 0.00272532 0.00274179 0.00275719 0.00277168 0.00278541 0.00279847 0.00281097 0.00282297 0.00283453 0.0028457 0.00285652 0.00286703 0.00287726 0.00288724 0.00289699 0.00290653 0.00291588 0.00292506 0.00293407 0.00294294 0.00295166 0.00296026 0.00296874 0.00297711 0.00298538 0.00299355 0.00300163 0.00300963 0.00301754 0.00302538 0.00303314 0.00304084 0.00304847 0.00305604 0.00306356 0.00307101 0.00307842 0.00308577 0.00309307 0.00310033 0.00310755 0.00311472 0.00312185 0.00312895 0.00313601 0.00314304 0.00315003 0.003157 0.00316393 0.00317084 0.00317772 0.00318459 0.00319143 0.00319825 0.00320505 0.00321184 0.00321861 0.00322537 -0.000853527 -0.000684915 -0.000515149 -0.000344228 -0.000172151 1.07598E-06 0.000171829 0.000336323 0.000494641 0.000646859 0.000793052 0.000933295 0.00106766 0.00119623 0.00131906 0.00143624 0.00154784 0.00165392 0.00175457 0.00184984 0.00193983 0.00202459 0.00210422 0.00217879 0.00224839 0.00231311 0.00237305 0.00242832 0.00247905 0.00252539 0.00256752 0.00260565 0.00264002 0.00267093 0.00269871 0.00272373 0.00274636 0.00276696 0.00278586 0.00280333 0.00281962 0.00283491 0.00284935 0.00286307 0.00287617 0.00288871 0.00290078 0.00291243 0.00292369 0.00293462 0.00294524 0.00295559 0.00296569 0.00297557 0.00298524 0.00299471 0.00300402 0.00301316 0.00302216 0.00303102 0.00303975 0.00304836 0.00305686 0.00306526 0.00307355 0.00308176 0.00308988 0.00309792 0.00310589 0.00311378 0.0031216 0.00312935 0.00313704 0.00314468 0.00315225 0.00315978 0.00316725 0.00317467 0.00318205 0.00318938 0.00319667 0.00320391 0.00321112 0.0032183 0.00322544 0.00323254 0.00323962 0.00324667 0.00325369 0.00326068 0.00326766 0.00327461 0.00328154 0.00328845 0.00329535 0.00330224 -0.000857676 -0.000688311 -0.000517745 -0.000345973 -0.000172991 1.19627E-06 0.000172993 0.000338613 0.000498138 0.00065164 0.000799194 0.000940872 0.00107675 0.00120689 0.00133137 0.00145025 0.00156362 0.00167154 0.00177407 0.00187129 0.00196328 0.00205009 0.00213182 0.00220853 0.00228031 0.00234724 0.00240942 0.00246696 0.00251996 0.00256856 0.00261293 0.00265324 0.00268973 0.00272265 0.00275231 0.00277905 0.00280323 0.0028252 0.00284531 0.00286385 0.00288109 0.00289722 0.00291242 0.00292683 0.00294055 0.00295367 0.00296628 0.00297842 0.00299015 0.00300151 0.00301254 0.00302327 0.00303374 0.00304396 0.00305396 0.00306375 0.00307335 0.00308278 0.00309205 0.00310118 0.00311016 0.00311902 0.00312776 0.00313639 0.00314491 0.00315334 0.00316167 0.00316992 0.00317808 0.00318617 0.00319418 0.00320212 0.00321 0.00321781 0.00322556 0.00323326 0.0032409 0.00324848 0.00325602 0.00326351 0.00327096 0.00327836 0.00328572 0.00329304 0.00330033 0.00330758 0.00331479 0.00332198 0.00332914 0.00333627 0.00334337 0.00335046 0.00335752 0.00336456 0.00337158 0.00337859 -0.000861561 -0.000691487 -0.000520168 -0.000347596 -0.000173763 1.32916E-06 0.000174111 0.000340799 0.00050147 0.000656197 0.000805051 0.000948101 0.00108542 0.00121707 0.00134313 0.00146366 0.00157874 0.00168842 0.00179278 0.00189188 0.0019858 0.00207461 0.00215837 0.00223716 0.00231105 0.00238014 0.00244451 0.00250425 0.00255948 0.0026103 0.00265688 0.00269937 0.00273798 0.00277293 0.00280451 0.00283302 0.00285881 0.00288223 0.00290363 0.00292331 0.00294155 0.00295858 0.00297458 0.00298971 0.00300409 0.00301782 0.00303099 0.00304364 0.00305586 0.00306767 0.00307913 0.00309026 0.0031011 0.00311168 0.00312202 0.00313214 0.00314205 0.00315178 0.00316133 0.00317073 0.00317998 0.00318909 0.00319808 0.00320694 0.00321569 0.00322434 0.00323289 0.00324135 0.00324971 0.003258 0.00326621 0.00327434 0.0032824 0.00329039 0.00329832 0.00330619 0.003314 0.00332176 0.00332946 0.00333711 0.00334471 0.00335227 0.00335978 0.00336725 0.00337468 0.00338208 0.00338944 0.00339677 0.00340406 0.00341133 0.00341856 0.00342578 0.00343297 0.00344014 0.00344728 0.00345442 -0.00086519 -0.00069445 -0.000522423 -0.000349099 -0.000174466 1.47588E-06 0.000175188 0.000342886 0.000504647 0.00066054 0.000810633 0.000954997 0.0010937 0.0012268 0.00135438 0.00147649 0.00159321 0.0017046 0.00181072 0.00191164 0.00200743 0.00209816 0.00218389 0.0022647 0.00234066 0.00241185 0.00247834 0.00254024 0.00259764 0.00265065 0.0026994 0.00274405 0.00278476 0.00282176 0.00285528 0.00288562 0.00291308 0.00293802 0.00296077 0.00298166 0.00300096 0.00301894 0.00303579 0.00305169 0.00306677 0.00308113 0.00309488 0.00310808 0.0031208 0.00313308 0.00314498 0.00315653 0.00316777 0.00317872 0.00318941 0.00319986 0.00321009 0.00322013 0.00322998 0.00323965 0.00324917 0.00325854 0.00326778 0.00327689 0.00328587 0.00329475 0.00330352 0.00331219 0.00332077 0.00332925 0.00333766 0.00334598 0.00335423 0.00336241 0.00337052 0.00337856 0.00338655 0.00339447 0.00340234 0.00341015 0.00341791 0.00342563 0.00343329 0.00344092 0.0034485 0.00345604 0.00346354 0.00347101 0.00347844 0.00348584 0.00349322 0.00350056 0.00350788 0.00351518 0.00352245 0.00352971 -0.000868569 -0.000697205 -0.000524515 -0.000350484 -0.000175101 1.6378E-06 0.000176227 0.000344881 0.000507675 0.000664678 0.000815954 0.000961572 0.0011016 0.0012361 0.00136513 0.00148877 0.00160707 0.0017201 0.00182792 0.0019306 0.00202821 0.0021208 0.00220844 0.00229121 0.00236916 0.00244239 0.00251096 0.00257496 0.00263448 0.00268963 0.00274052 0.00278729 0.0028301 0.00286914 0.00290462 0.00293682 0.00296602 0.00299254 0.00301671 0.00303886 0.0030593 0.00307828 0.00309603 0.00311273 0.00312854 0.00314358 0.00315794 0.00317171 0.00318495 0.00319773 0.00321009 0.00322207 0.00323371 0.00324505 0.0032561 0.0032669 0.00327747 0.00328781 0.00329796 0.00330793 0.00331773 0.00332737 0.00333686 0.00334622 0.00335544 0.00336455 0.00337355 0.00338243 0.00339122 0.00339992 0.00340852 0.00341705 0.00342549 0.00343385 0.00344214 0.00345037 0.00345852 0.00346662 0.00347465 0.00348263 0.00349055 0.00349843 0.00350625 0.00351402 0.00352175 0.00352944 0.00353709 0.0035447 0.00355227 0.00355981 0.00356732 0.00357479 0.00358224 0.00358967 0.00359707 0.00360445 -0.000871705 -0.000699758 -0.000526447 -0.000351755 -0.000175669 1.81641E-06 0.000177231 0.000346789 0.000510564 0.000668621 0.000821026 0.000967843 0.00110914 0.00124497 0.0013754 0.0015005 0.00162033 0.00173494 0.00184441 0.00194879 0.00204814 0.00214254 0.00223203 0.0023167 0.0023966 0.00247181 0.00254239 0.00260844 0.00267004 0.00272728 0.00278027 0.00282914 0.00287402 0.00291509 0.00295255 0.00298662 0.00301759 0.00304574 0.00307141 0.0030949 0.00311652 0.00313656 0.00315526 0.00317282 0.0031894 0.00320513 0.00322013 0.0032345 0.00324829 0.00326158 0.00327442 0.00328685 0.00329892 0.00331065 0.00332208 0.00333324 0.00334415 0.00335482 0.00336528 0.00337555 0.00338563 0.00339554 0.0034053 0.00341491 0.00342438 0.00343373 0.00344296 0.00345207 0.00346107 0.00346998 0.00347879 0.00348751 0.00349615 0.0035047 0.00351318 0.00352158 0.00352992 0.00353819 0.00354639 0.00355453 0.00356262 0.00357065 0.00357863 0.00358656 0.00359444 0.00360228 0.00361007 0.00361782 0.00362554 0.00363321 0.00364086 0.00364847 0.00365605 0.0036636 0.00367113 0.00367863 -0.000874605 -0.000702113 -0.000528222 -0.000352913 -0.00017617 2.01335E-06 0.000178204 0.000348615 0.000513319 0.000672379 0.000825859 0.000973821 0.00111633 0.00125344 0.00138522 0.00151172 0.00163302 0.00174916 0.00186021 0.00196623 0.00206728 0.00216342 0.00225471 0.00234121 0.002423 0.00250013 0.00257269 0.00264073 0.00270435 0.00276364 0.00281868 0.00286961 0.00291654 0.00295963 0.00299905 0.00303503 0.00306779 0.00309763 0.00312483 0.00314972 0.0031726 0.00319376 0.00321346 0.00323191 0.0032493 0.00326577 0.00328145 0.00329643 0.0033108 0.00332462 0.00333796 0.00335086 0.00336336 0.00337551 0.00338734 0.00339887 0.00341012 0.00342114 0.00343192 0.00344249 0.00345287 0.00346306 0.00347309 0.00348296 0.00349269 0.00350227 0.00351174 0.00352108 0.0035303 0.00353942 0.00354844 0.00355737 0.0035662 0.00357495 0.00358362 0.0035922 0.00360072 0.00360916 0.00361754 0.00362585 0.0036341 0.0036423 0.00365043 0.00365852 0.00366655 0.00367454 0.00368248 0.00369037 0.00369823 0.00370604 0.00371382 0.00372157 0.00372928 0.00373696 0.00374462 0.00375225 -0.000877273 -0.000704275 -0.000529843 -0.00035396 -0.000176604 2.23041E-06 0.00017915 0.000350366 0.00051595 0.000675962 0.000830466 0.00097952 0.00112319 0.00126153 0.00139459 0.00152245 0.00164516 0.00176277 0.00187535 0.00198296 0.00208564 0.00218347 0.0022765 0.00236479 0.0024484 0.00252741 0.00260187 0.00267186 0.00273745 0.00279873 0.00285579 0.00290874 0.00295768 0.00300277 0.00304416 0.00308203 0.00311662 0.00314817 0.00317696 0.00320331 0.0032275 0.00324984 0.00327059 0.00328998 0.00330822 0.00332547 0.00334185 0.00335748 0.00337245 0.00338683 0.00340068 0.00341407 0.00342703 0.00343961 0.00345184 0.00346376 0.00347538 0.00348674 0.00349785 0.00350874 0.00351942 0.00352991 0.00354021 0.00355035 0.00356034 0.00357017 0.00357988 0.00358945 0.0035989 0.00360824 0.00361748 0.00362661 0.00363564 0.00364459 0.00365344 0.00366222 0.00367092 0.00367954 0.00368809 0.00369657 0.00370499 0.00371335 0.00372164 0.00372989 0.00373807 0.00374621 0.0037543 0.00376234 0.00377034 0.00377829 0.00378621 0.00379409 0.00380194 0.00380975 0.00381753 0.00382529 -0.000879714 -0.000706247 -0.000531314 -0.000354896 -0.00017697 2.46954E-06 0.000180072 0.000352047 0.000518462 0.000679379 0.000834857 0.000984954 0.00112973 0.00126924 0.00140355 0.00153271 0.00165677 0.00177581 0.00188986 0.00199899 0.00210326 0.00220272 0.00229743 0.00238745 0.00247284 0.00255366 0.00262998 0.00270186 0.00276937 0.0028326 0.00289163 0.00294656 0.00299749 0.00304454 0.00308787 0.00312765 0.00316407 0.00319736 0.00322779 0.00325564 0.0032812 0.00330477 0.00332663 0.00334702 0.00336615 0.0033842 0.00340133 0.00341763 0.00343323 0.00344819 0.00346258 0.00347647 0.00348991 0.00350294 0.00351559 0.0035279 0.0035399 0.00355162 0.00356307 0.00357429 0.00358528 0.00359606 0.00360666 0.00361707 0.00362732 0.00363742 0.00364736 0.00365718 0.00366686 0.00367642 0.00368587 0.00369522 0.00370446 0.0037136 0.00372265 0.00373162 0.0037405 0.0037493 0.00375803 0.00376669 0.00377528 0.0037838 0.00379226 0.00380066 0.003809 0.00381729 0.00382553 0.00383372 0.00384186 0.00384996 0.00385801 0.00386603 0.00387401 0.00388195 0.00388987 0.00389775 -0.000881934 -0.000708032 -0.000532635 -0.000355722 -0.000177268 2.73288E-06 0.000180975 0.000353663 0.000520865 0.000682639 0.000839043 0.000990134 0.00113597 0.00127661 0.0014121 0.00154251 0.00166788 0.00178828 0.00190375 0.00201436 0.00212016 0.0022212 0.00231754 0.00240923 0.00249634 0.00257893 0.00265704 0.00273076 0.00280015 0.00286528 0.00292624 0.0029831 0.00303598 0.00308498 0.00313023 0.0031719 0.00321015 0.00324521 0.0032773 0.00330669 0.00333368 0.00335854 0.00338156 0.00340299 0.00342306 0.00344196 0.00345985 0.00347687 0.00349311 0.00350868 0.00352364 0.00353805 0.00355198 0.00356547 0.00357856 0.00359128 0.00360368 0.00361576 0.00362757 0.00363912 0.00365043 0.00366153 0.00367241 0.00368311 0.00369363 0.00370399 0.00371419 0.00372425 0.00373417 0.00374396 0.00375363 0.00376319 0.00377264 0.00378199 0.00379124 0.00380039 0.00380947 0.00381845 0.00382736 0.00383619 0.00384495 0.00385364 0.00386226 0.00387083 0.00387933 0.00388777 0.00389616 0.0039045 0.00391278 0.00392102 0.00392922 0.00393737 0.00394549 0.00395357 0.00396161 0.00396962 -0.000883934 -0.000709633 -0.00053381 -0.000356439 -0.000177497 3.02275E-06 0.000181863 0.000355221 0.000523165 0.000685751 0.000843036 0.000995074 0.00114192 0.00128364 0.00142027 0.00155187 0.0016785 0.00180021 0.00191706 0.00202909 0.00213636 0.00223893 0.00233685 0.00243016 0.00251894 0.00260324 0.00268311 0.00275862 0.00282983 0.00289681 0.00295964 0.00301841 0.00307319 0.0031241 0.00317125 0.00321479 0.00325488 0.0032917 0.00332548 0.00335646 0.00338491 0.00341111 0.00343534 0.00345787 0.00347892 0.00349871 0.00351741 0.00353517 0.00355209 0.00356829 0.00358383 0.00359879 0.00361323 0.0036272 0.00364074 0.00365389 0.00366669 0.00367916 0.00369133 0.00370323 0.00371487 0.00372628 0.00373747 0.00374846 0.00375926 0.00376989 0.00378035 0.00379065 0.00380081 0.00381084 0.00382074 0.00383052 0.00384018 0.00384973 0.00385919 0.00386854 0.0038778 0.00388698 0.00389607 0.00390508 0.00391401 0.00392287 0.00393166 0.00394038 0.00394904 0.00395764 0.00396619 0.00397467 0.00398311 0.00399149 0.00399983 0.00400812 0.00401637 0.00402458 0.00403276 0.00404089 -0.000885719 -0.000711053 -0.000534838 -0.000357048 -0.000177656 3.34172E-06 0.000182739 0.000356727 0.00052537 0.000688725 0.000846845 0.000999786 0.0011476 0.00129034 0.00142806 0.00156082 0.00168866 0.00181163 0.0019298 0.00204321 0.0021519 0.00225595 0.00235539 0.00245028 0.00254068 0.00262663 0.0027082 0.00278545 0.00285844 0.00292723 0.00299189 0.0030525 0.00310915 0.00316194 0.00321096 0.00325636 0.00329827 0.00333687 0.00337235 0.00340494 0.0034349 0.00346248 0.00348798 0.00351164 0.00353372 0.00355445 0.00357399 0.00359252 0.00361015 0.003627 0.00364315 0.00365868 0.00367365 0.00368811 0.00370212 0.00371571 0.00372893 0.0037418 0.00375434 0.0037666 0.00377858 0.00379032 0.00380182 0.00381311 0.0038242 0.0038351 0.00384582 0.00385638 0.00386679 0.00387706 0.00388719 0.00389719 0.00390707 0.00391684 0.00392649 0.00393605 0.00394551 0.00395487 0.00396414 0.00397333 0.00398244 0.00399148 0.00400044 0.00400932 0.00401815 0.0040269 0.0040356 0.00404424 0.00405282 0.00406135 0.00406983 0.00407826 0.00408665 0.004095 0.0041033 0.00411157 -0.000887292 -0.000712293 -0.00053572 -0.000357547 -0.000177744 3.69256E-06 0.000183609 0.000358185 0.000527487 0.000691569 0.000850482 0.00100428 0.00115302 0.00129674 0.00143551 0.00156937 0.00169837 0.00182256 0.001942 0.00205673 0.00216681 0.00227228 0.00237319 0.00246961 0.00256157 0.00264914 0.00273236 0.0028113 0.00288601 0.00295655 0.003023 0.00308543 0.00314391 0.00319853 0.0032494 0.00329662 0.00334034 0.00338071 0.0034179 0.00345212 0.00348362 0.00351263 0.00353943 0.00356429 0.00358745 0.00360914 0.00362957 0.0036489 0.00366727 0.00368479 0.00370158 0.00371769 0.00373321 0.00374819 0.00376269 0.00377674 0.00379038 0.00380366 0.0038166 0.00382922 0.00384156 0.00385363 0.00386545 0.00387705 0.00388843 0.00389961 0.00391061 0.00392144 0.0039321 0.00394261 0.00395297 0.00396321 0.00397331 0.00398329 0.00399316 0.00400291 0.00401257 0.00402213 0.00403159 0.00404096 0.00405025 0.00405946 0.00406859 0.00407764 0.00408663 0.00409555 0.0041044 0.00411319 0.00412193 0.0041306 0.00413923 0.0041478 0.00415633 0.00416481 0.00417325 0.00418164 -0.000888653 -0.000713355 -0.000536458 -0.000357936 -0.000177758 4.07831E-06 0.000184476 0.000359603 0.000529524 0.000694292 0.000853958 0.00100857 0.00115819 0.00130285 0.00144262 0.00157754 0.00170765 0.00183302 0.00195368 0.00206969 0.00218109 0.00228794 0.00239029 0.00248817 0.00258166 0.00267078 0.00275561 0.00283619 0.00291258 0.00298484 0.00305303 0.00311722 0.00317749 0.00323391 0.00328658 0.00333561 0.00338112 0.00342324 0.00346214 0.00349802 0.00353107 0.00356155 0.0035897 0.00361579 0.00364007 0.00366278 0.00368413 0.00370429 0.00372343 0.00374167 0.0037591 0.00377583 0.00379192 0.00380743 0.00382243 0.00383695 0.00385105 0.00386475 0.00387808 0.00389109 0.00390379 0.0039162 0.00392836 0.00394027 0.00395195 0.00396343 0.00397471 0.0039858 0.00399672 0.00400748 0.00401809 0.00402856 0.00403888 0.00404909 0.00405917 0.00406913 0.00407899 0.00408874 0.00409839 0.00410795 0.00411743 0.00412681 0.00413611 0.00414534 0.00415449 0.00416357 0.00417258 0.00418153 0.00419041 0.00419924 0.00420801 0.00421673 0.00422539 0.00423401 0.00424258 0.00425111 -0.000889805 -0.000714238 -0.000537051 -0.000358213 -0.000177696 4.5023E-06 0.000185346 0.000360986 0.000531489 0.000696904 0.000857282 0.00101267 0.00116313 0.00130869 0.00144941 0.00158534 0.00171653 0.00184302 0.00196486 0.0020821 0.00219479 0.00230297 0.00240669 0.00250601 0.00260096 0.0026916 0.00277799 0.00286016 0.00293818 0.0030121 0.00308199 0.00314791 0.00320992 0.00326811 0.00332255 0.00337336 0.00342063 0.00346449 0.0035051 0.00354263 0.00357726 0.00360923 0.00363877 0.00366614 0.00369158 0.00371535 0.00373766 0.0037587 0.00377863 0.0037976 0.00381572 0.00383308 0.00384975 0.00386582 0.00388134 0.00389635 0.0039109 0.00392504 0.00393879 0.00395219 0.00396526 0.00397804 0.00399053 0.00400277 0.00401476 0.00402654 0.0040381 0.00404947 0.00406066 0.00407168 0.00408253 0.00409324 0.0041038 0.00411422 0.00412452 0.0041347 0.00414476 0.00415471 0.00416456 0.00417431 0.00418396 0.00419353 0.00420301 0.00421241 0.00422172 0.00423097 0.00424014 0.00424924 0.00425828 0.00426726 0.00427618 0.00428504 0.00429385 0.0043026 0.00431131 0.00431997 -0.000890747 -0.000714944 -0.000537497 -0.000358379 -0.000177557 4.96814E-06 0.000186223 0.000362342 0.000533389 0.000699414 0.000860466 0.00101659 0.00116784 0.00131426 0.0014559 0.0015928 0.00172502 0.00185259 0.00197557 0.002094 0.00220792 0.00231739 0.00242245 0.00252314 0.00261952 0.00271163 0.00279952 0.00288324 0.00296285 0.00303839 0.00310993 0.00317753 0.00324125 0.00330116 0.00335734 0.00340989 0.0034589 0.00350449 0.00354679 0.00358597 0.00362219 0.00365568 0.00368664 0.00371532 0.00374197 0.00376684 0.00379014 0.00381209 0.00383286 0.00385259 0.00387141 0.00388942 0.00390671 0.00392335 0.0039394 0.00395492 0.00396995 0.00398454 0.00399872 0.00401252 0.00402598 0.00403912 0.00405197 0.00406454 0.00407685 0.00408893 0.00410079 0.00411245 0.00412391 0.00413518 0.00414629 0.00415724 0.00416804 0.00417869 0.00418921 0.0041996 0.00420988 0.00422003 0.00423008 0.00424002 0.00424986 0.00425961 0.00426927 0.00427884 0.00428833 0.00429774 0.00430708 0.00431634 0.00432553 0.00433466 0.00434373 0.00435273 0.00436168 0.00437058 0.00437943 0.00438822 -0.000891481 -0.00071547 -0.000537796 -0.000358429 -0.000177336 5.47979E-06 0.000187113 0.000363675 0.000535232 0.000701831 0.00086352 0.00102034 0.00117235 0.00131959 0.0014621 0.00159994 0.00173314 0.00186175 0.00198582 0.00210539 0.00222051 0.00233122 0.00243757 0.0025396 0.00263736 0.00273089 0.00282024 0.00290547 0.00298662 0.00306374 0.00313689 0.00320612 0.0032715 0.00333309 0.00339098 0.00344523 0.00349596 0.00354325 0.00358723 0.00362806 0.00366588 0.00370089 0.0037333 0.00376333 0.00379123 0.00381723 0.00384157 0.00386447 0.0038861 0.00390662 0.00392617 0.00394486 0.00396278 0.00398001 0.00399661 0.00401265 0.00402818 0.00404323 0.00405785 0.00407207 0.00408593 0.00409945 0.00411265 0.00412557 0.00413822 0.00415061 0.00416277 0.00417472 0.00418645 0.004198 0.00420937 0.00422057 0.00423161 0.0042425 0.00425324 0.00426385 0.00427434 0.0042847 0.00429495 0.00430509 0.00431512 0.00432506 0.00433489 0.00434464 0.00435431 0.00436388 0.00437338 0.00438281 0.00439216 0.00440144 0.00441066 0.00441981 0.00442891 0.00443795 0.00444693 0.00445586 -0.000892004 -0.000715817 -0.000537946 -0.000358361 -0.00017703 6.04155E-06 0.000188022 0.000364995 0.000537027 0.000704165 0.000866454 0.00102394 0.00117667 0.00132469 0.00146803 0.00160676 0.00174091 0.00187052 0.00199564 0.00211631 0.00223258 0.00234449 0.00245209 0.00255541 0.0026545 0.00274941 0.00284019 0.00292687 0.00300952 0.00308817 0.00316288 0.00323371 0.00330071 0.00336395 0.0034235 0.00347943 0.00353183 0.0035808 0.00362646 0.00366891 0.00370833 0.00374488 0.00377875 0.00381016 0.00383934 0.00386652 0.00389194 0.00391582 0.00393834 0.00395968 0.00397999 0.00399938 0.00401795 0.00403579 0.00405297 0.00406955 0.00408558 0.00410111 0.00411619 0.00413084 0.00414511 0.00415902 0.00417259 0.00418586 0.00419885 0.00421157 0.00422404 0.00423628 0.0042483 0.00426013 0.00427176 0.00428321 0.0042945 0.00430563 0.00431661 0.00432744 0.00433814 0.00434872 0.00435917 0.00436951 0.00437974 0.00438986 0.00439988 0.00440981 0.00441965 0.0044294 0.00443907 0.00444865 0.00445817 0.0044676 0.00447697 0.00448628 0.00449552 0.0045047 0.00451382 0.00452289 -0.000892317 -0.000715981 -0.000537944 -0.000358174 -0.000176636 6.65812E-06 0.000188954 0.000366307 0.000538782 0.000706425 0.000869281 0.00102739 0.00118081 0.00132956 0.00147371 0.00161329 0.00174834 0.00187891 0.00200505 0.00212678 0.00224416 0.00235723 0.00246602 0.00257059 0.00267098 0.00276723 0.00285938 0.00294748 0.00303158 0.00311172 0.00318796 0.00326034 0.00332892 0.00339377 0.00345494 0.00351252 0.00356657 0.00361719 0.00366448 0.00370856 0.00374957 0.00378766 0.00382301 0.00385582 0.00388631 0.00391471 0.00394124 0.00396613 0.00398958 0.00401178 0.00403286 0.00405298 0.00407222 0.00409069 0.00410846 0.00412559 0.00414215 0.00415818 0.00417372 0.00418882 0.00420351 0.00421782 0.00423177 0.00424541 0.00425874 0.00427179 0.00428458 0.00429713 0.00430945 0.00432156 0.00433346 0.00434518 0.00435672 0.00436809 0.0043793 0.00439037 0.00440129 0.00441208 0.00442274 0.00443328 0.00444371 0.00445402 0.00446423 0.00447434 0.00448436 0.00449428 0.00450412 0.00451387 0.00452355 0.00453314 0.00454267 0.00455212 0.00456151 0.00457084 0.0045801 0.00458931 -0.000892415 -0.000715961 -0.000537787 -0.000357861 -0.00017615 7.33463E-06 0.000189918 0.000367618 0.000540505 0.000708621 0.00087201 0.00103071 0.00118478 0.00133424 0.00147915 0.00161954 0.00175547 0.00188696 0.00201406 0.00213682 0.00225526 0.00236945 0.00247941 0.00258519 0.00268683 0.00278437 0.00287785 0.00296733 0.00305283 0.00313442 0.00321214 0.00328603 0.00335616 0.00342257 0.00348534 0.00354452 0.00360019 0.00365243 0.00370134 0.00374703 0.00378962 0.00382925 0.00386609 0.00390032 0.00393214 0.00396178 0.00398946 0.0040154 0.00403982 0.00406289 0.00408479 0.00410565 0.00412559 0.0041447 0.00416308 0.00418079 0.00419788 0.00421442 0.00423045 0.004246 0.00426112 0.00427585 0.0042902 0.00430421 0.0043179 0.00433129 0.00434441 0.00435727 0.00436989 0.00438229 0.00439447 0.00440645 0.00441825 0.00442987 0.00444133 0.00445263 0.00446378 0.00447478 0.00448566 0.00449641 0.00450703 0.00451755 0.00452795 0.00453824 0.00454844 0.00455854 0.00456855 0.00457847 0.00458831 0.00459806 0.00460774 0.00461735 0.00462689 0.00463636 0.00464577 0.00465512 -0.000892296 -0.000715753 -0.000537472 -0.00035742 -0.000175565 8.07665E-06 0.000190918 0.000368938 0.000542206 0.000710763 0.000874653 0.00103392 0.00118859 0.00133873 0.00148436 0.00162554 0.00176229 0.00189467 0.0020227 0.00214644 0.00226592 0.00238118 0.00249226 0.00259921 0.00270206 0.00280085 0.00289563 0.00298644 0.00307332 0.00315631 0.00323547 0.00331083 0.00338246 0.0034504 0.00351472 0.00357547 0.00363272 0.00368656 0.00373706 0.00378434 0.00382849 0.00386966 0.00390798 0.00394365 0.00397683 0.00400774 0.0040366 0.00406363 0.00408904 0.00411302 0.00413575 0.00415739 0.00417804 0.00419783 0.00421683 0.00423512 0.00425277 0.00426984 0.00428636 0.00430239 0.00431795 0.0043331 0.00434786 0.00436225 0.00437631 0.00439006 0.00440351 0.0044167 0.00442962 0.00444232 0.00445478 0.00446704 0.00447911 0.00449098 0.00450269 0.00451422 0.0045256 0.00453684 0.00454793 0.00455889 0.00456972 0.00458043 0.00459102 0.00460151 0.00461189 0.00462217 0.00463235 0.00464244 0.00465244 0.00466236 0.0046722 0.00468197 0.00469166 0.00470128 0.00471083 0.00472032 -0.000891957 -0.000715352 -0.000536993 -0.000356846 -0.000174877 8.89027E-06 0.000191963 0.000370274 0.000543894 0.000712862 0.000877221 0.00103701 0.00119227 0.00134305 0.00148937 0.00163129 0.00176884 0.00190206 0.002031 0.00215568 0.00227615 0.00239245 0.00250462 0.00261269 0.00271671 0.00281672 0.00291275 0.00300485 0.00309306 0.00317742 0.00325797 0.00333477 0.00340786 0.00347729 0.00354312 0.00360541 0.00366421 0.00371961 0.00377168 0.00382052 0.00386622 0.00390891 0.00394873 0.00398583 0.00402038 0.00405259 0.00408266 0.00411081 0.00413724 0.00416217 0.00418576 0.00420819 0.00422959 0.00425006 0.0042697 0.0042886 0.00430682 0.00432443 0.00434146 0.00435797 0.004374 0.00438958 0.00440476 0.00441955 0.00443398 0.00444809 0.00446189 0.0044754 0.00448865 0.00450165 0.00451441 0.00452695 0.00453928 0.00455142 0.00456337 0.00457515 0.00458677 0.00459823 0.00460954 0.00462072 0.00463176 0.00464267 0.00465346 0.00466414 0.0046747 0.00468517 0.00469553 0.00470579 0.00471596 0.00472605 0.00473605 0.00474597 0.00475581 0.00476558 0.00477528 0.00478491 -0.000891391 -0.000714754 -0.000536345 -0.000356132 -0.00017408 9.7821E-06 0.00019306 0.000371635 0.000545578 0.000714929 0.000879727 0.00104001 0.00119583 0.00134721 0.00149419 0.00163682 0.00177513 0.00190917 0.00203896 0.00216455 0.00228598 0.00240328 0.00251649 0.00262565 0.00273081 0.00283199 0.00292923 0.00302258 0.00311208 0.00319777 0.00327969 0.00335788 0.00343239 0.00350328 0.00357058 0.00363436 0.00369469 0.00375161 0.00380522 0.0038556 0.00390283 0.00394703 0.00398833 0.00402687 0.00406281 0.00409634 0.00412764 0.00415693 0.00418443 0.00421033 0.00423481 0.00425806 0.00428022 0.0043014 0.0043217 0.00434122 0.00436003 0.00437819 0.00439574 0.00441275 0.00442925 0.00444529 0.00446089 0.00447608 0.00449091 0.00450539 0.00451954 0.0045334 0.00454697 0.00456027 0.00457333 0.00458616 0.00459877 0.00461118 0.00462339 0.00463542 0.00464728 0.00465897 0.00467051 0.0046819 0.00469316 0.00470427 0.00471527 0.00472614 0.00473689 0.00474754 0.00475808 0.00476852 0.00477886 0.00478912 0.00479928 0.00480936 0.00481936 0.00482928 0.00483913 0.00484891 -0.000890593 -0.000713951 -0.000535522 -0.000355272 -0.000173167 1.07594E-05 0.000194218 0.00037303 0.000547269 0.000716974 0.000882183 0.00104293 0.00119927 0.00135122 0.00149883 0.00164214 0.00178118 0.00191599 0.00204661 0.00217308 0.00229542 0.00241369 0.00252791 0.00263813 0.00274437 0.00284669 0.00294511 0.00303968 0.00313043 0.0032174 0.00330064 0.00338019 0.00345609 0.00352838 0.00359713 0.00366238 0.00372418 0.00378261 0.00383773 0.00388961 0.00393836 0.00398406 0.00402683 0.0040668 0.00410413 0.00413899 0.00417155 0.00420201 0.0042306 0.0042575 0.00428291 0.004307 0.00432994 0.00435184 0.00437283 0.00439299 0.00441239 0.00443112 0.00444921 0.00446673 0.00448372 0.00450021 0.00451625 0.00453187 0.00454709 0.00456195 0.00457647 0.00459067 0.00460457 0.0046182 0.00463157 0.00464469 0.00465759 0.00467027 0.00468274 0.00469503 0.00470713 0.00471906 0.00473083 0.00474245 0.00475392 0.00476524 0.00477644 0.00478751 0.00479846 0.00480929 0.00482002 0.00483064 0.00484115 0.00485157 0.0048619 0.00487214 0.0048823 0.00489238 0.00490237 0.0049123 -0.000889556 -0.000712938 -0.000534517 -0.000354259 -0.00017213 1.18299E-05 0.000195445 0.000374468 0.000548977 0.000719009 0.000884601 0.00104579 0.00120261 0.00135511 0.00150332 0.00164727 0.00178701 0.00192256 0.00205397 0.00218128 0.00230451 0.0024237 0.0025389 0.00265013 0.00275744 0.00286085 0.00296041 0.00305615 0.00314812 0.00323634 0.00332087 0.00340173 0.00347898 0.00355265 0.0036228 0.00368948 0.00375273 0.00381263 0.00386922 0.00392259 0.00397282 0.00402 0.00406423 0.00410564 0.00414436 0.00418055 0.00421439 0.00424605 0.00427575 0.00430368 0.00433004 0.004355 0.00437875 0.0044014 0.00442308 0.00444389 0.00446391 0.00448322 0.00450186 0.00451991 0.00453739 0.00455436 0.00457085 0.00458689 0.00460253 0.00461778 0.00463267 0.00464723 0.00466148 0.00467543 0.00468911 0.00470254 0.00471573 0.00472869 0.00474143 0.00475398 0.00476633 0.0047785 0.00479051 0.00480235 0.00481404 0.00482558 0.00483699 0.00484826 0.0048594 0.00487043 0.00488134 0.00489214 0.00490283 0.00491342 0.00492392 0.00493433 0.00494464 0.00495487 0.00496502 0.0049751 -0.000888271 -0.000711706 -0.000533322 -0.000353085 -0.00017096 1.30023E-05 0.00019675 0.000375961 0.000550714 0.000721046 0.000886994 0.00104859 0.00120588 0.00135889 0.00150766 0.00165223 0.00179263 0.0019289 0.00206107 0.00218918 0.00231326 0.00243335 0.00254948 0.0026617 0.00277002 0.0028745 0.00297516 0.00307205 0.00316519 0.00325463 0.0033404 0.00342254 0.0035011 0.00357612 0.00364764 0.0037157 0.00378037 0.0038417 0.00389974 0.00395457 0.00400626 0.0040549 0.00410057 0.0041434 0.00418351 0.00422105 0.00425617 0.00428905 0.00431989 0.00434888 0.00437621 0.00440208 0.00442665 0.00445007 0.00447246 0.00449394 0.00451459 0.00453449 0.00455371 0.00457228 0.00459028 0.00460773 0.00462468 0.00464117 0.00465722 0.00467287 0.00468815 0.00470307 0.00471767 0.00473196 0.00474597 0.00475971 0.00477319 0.00478643 0.00479946 0.00481227 0.00482488 0.0048373 0.00484954 0.00486162 0.00487353 0.00488529 0.00489691 0.00490838 0.00491973 0.00493095 0.00494205 0.00495303 0.0049639 0.00497467 0.00498534 0.00499591 0.00500639 0.00501678 0.00502708 0.00503731 -0.000886729 -0.000710246 -0.000531928 -0.000351741 -0.00016965 1.42858E-05 0.000198144 0.000377518 0.000552492 0.000723099 0.000889376 0.00105136 0.00120908 0.00136258 0.00151188 0.00165704 0.00179807 0.00193502 0.00206792 0.0021968 0.0023217 0.00244265 0.00255969 0.00267285 0.00278216 0.00288767 0.0029894 0.00308738 0.00318167 0.00327228 0.00335926 0.00344265 0.00352249 0.00359881 0.00367166 0.00374109 0.00380714 0.00386987 0.00392933 0.00398558 0.00403871 0.00408878 0.00413588 0.00418012 0.00422162 0.0042605 0.00429691 0.00433103 0.00436302 0.0043931 0.00442143 0.00444822 0.00447364 0.00449785 0.00452098 0.00454315 0.00456444 0.00458495 0.00460474 0.00462386 0.00464238 0.00466033 0.00467775 0.00469469 0.00471117 0.00472724 0.00474291 0.00475821 0.00477317 0.0047878 0.00480214 0.00481619 0.00482998 0.00484352 0.00485682 0.0048699 0.00488278 0.00489545 0.00490794 0.00492025 0.0049324 0.00494438 0.00495621 0.0049679 0.00497944 0.00499086 0.00500215 0.00501332 0.00502438 0.00503532 0.00504616 0.0050569 0.00506755 0.0050781 0.00508856 0.00509893 tmpk8ny_4pz/examples/xspice/table/test-3d-1.table0000644000175000017500000000027213546075722022013 0ustar carstencarsten* 3D test table *x 4 *y 3 *z 2 *x row 0 1 2 3 *y column 1 2 3 *z tables 4 5 *table 0.1 0.2 0.3 0.4 1.1 1.2 1.3 1.4 2.1 2.2 2.3 2.4 *table 1.1 1.3 1.5 1.7 3.1 3.3 3.5 3.7 5.1 5.3 5.5 5.7 tmpk8ny_4pz/examples/xspice/table/table-model-mos-3d-4.sp0000644000175000017500000000260313546075722023353 0ustar carstencarstenCode Model Test - 3d Table Model * Inverter * *** analysis type *** .control *option reltol=0.1 dc V1 0 1.5 0.01 *op *ac lin 11 100 200 *tran 100p 20n *plot i(Vs) i(Vs2) plot i(vsinv) plot v(in1) v(out1) plot deriv(v(out1)) .endc * *** input sources *** * v1 in1 0 DC 0.75 ac 1 Vs2 s2 0 0 vsinv vss 0 0 vdinv vdd 0 1.5 * ********************* *xmosnt d g s tbmosn *mn2 d g s2 s2 n1 l=0.13u w=10u ad=5p pd=6u as=5p ps=6u rgeoMod=1 .subckt inv vd vs in out *mp2 out in vd vd p1 l=0.13u w=10u ad=5p pd=6u as=5p ps=6u xmospt out in vd vd tbmosp *mn2 out in vs vs n1 l=0.13u w=5u ad=5p pd=6u as=5p ps=6u xmosnt out in vs vs tbmosn .ends xmosinv1 vdd vss in1 out1 inv .subckt tbmosn d g s b *** table model of mos transistor *** cdg d g 0.01p csg s g 0.014p amos1 %vd(d s) %vd(g s) %vd(b s) %id(d s) mostable1 .model mostable1 table3d (offset=0.0 gain=0.5 order=2 file="bsim4n-3d-1.table") * NMOS L=0.13u W=10.0u rgeoMod=1 * BSIM 4.7 * change width of transistor by modifying parameter "gain" .ends .subckt tbmosp d g s b *** table model of pmos transistor *** cdg d g 0.01p csg s g 0.014p amos2 %vd(d s) %vd(g s) %vd(b s) %id(d s) mostable2 .model mostable2 table3d (offset=0.0 gain=1 order=3 file="bsim4p-3d-1.table") * PMOS L=0.13u W=10.0u rgeoMod=1 * BSIM 4.7 * change width of transistor by modifying parameter "gain" .ends .include ./modelcards/modelcard.nmos .include ./modelcards/modelcard.pmos .end tmpk8ny_4pz/examples/xspice/table/combi_script.cir0000644000175000017500000000205013546075722022531 0ustar carstencarsten*ng_script * A somewhat complex example: * This script loads two circuits, then selects circuit 1, * does three dc simulations, selects circuit 2, does * two dc simulations on the bipolar table device. * Always do a 'reset' in between to avoid memory leaks. * you have to create the bipolar device table first by running * the table generator table-generator-q-2d.sp .control source $inputdir/table-model-bip-2d-1-oc.sp $ circuit 2 source $inputdir/table-model-mos-2d-2-oc.sp $ circuit 1 *** analysis type *** setcirc 1 dc V1 -0.1 1.7 0.06 V2 0.3 1.7 0.3 plot i(Vs) plot deriv(i(Vs)) reset dc v2 0 1.7 0.04 plot i(Vs) plot deriv(i(Vs)) reset dc V1 -0.1 1.7 0.06 plot i(Vs2) setcirc 2 * bipolar model qinn dc vce 0 5 0.05 ib 0.2u 1.8u 0.4u *plot i(vee) *plot v(1) ylimit 0 1 reset * bipolar from table dc vce2 0 5 0.05 ib2 0.2u 1.8u 0.4u plot dc4.i(vee) i(vee2) title 'table q3, q4 output current (i(vee2)) compared to bjt model (dc1.i(vee))' plot dc4.v(1) v(bb) ylimit 0.6 0.8 title 'table q3, q4 input diode (v(bb)) compared to bjt model (dc1.v(1))' .endc tmpk8ny_4pz/examples/xspice/table/table-generator-b4-3d.sp0000644000175000017500000000563113546075722023613 0ustar carstencarsten** NMOSFET: table generator with BSIM4 3D (Vdrain, Vgate, Vbulk) * This file may be run by 'ngspice table-generator-b4-3d.sp' * It will generate a 3D data table by simulating the MOS drain current * as function of drain and gate voltages. The simulation uses * the ngspice BSIM4.6.1 MOS model and Berkeley model parameters. * This table is an input file for the XSPICE 3D table model. * You have to select NMOS or PMOS by manually editing this file: currently * NMOS is selected. For PMOS change '*' in column 1 * for CSPARAM, m1, outfile, echo *table... * In addition you may change the step sizes vdstep vgstep vbstep in CSPARAM * to obtain the required resolution for the data. * These tables will contain pure dc data. For transient simulation you may * need to add some capacitors to the device model for a 'real world' simulation. *NMOS .csparam vdstart=-0.1 .csparam vdstop=1.8 .csparam vdstep=0.05 .csparam vgstart=-0.1 .csparam vgstop=1.8 .csparam vgstep=0.05 .csparam vbstart=-1.8 .csparam vbstop=0.4 .csparam vbstep=0.2 *PMOS *.csparam vdstart=-1.8 *.csparam vdstop=0.1 *.csparam vdstep=0.05 *.csparam vgstart=-1.8 *.csparam vgstop=0.1 *.csparam vgstep=0.05 *.csparam vbstart=-0.4 *.csparam vbstop=1.8 *.csparam vbstep=0.2 ** Circuit Description ** m1 2 1 3 4 nbsim4 L=0.13u W=10.0u rgeoMod=1 *m1 2 1 3 4 pbsim4 L=0.13u W=10.0u rgeoMod=1 vgs 1 0 1.8 vds 2 0 1.8 vss 3 0 0 vbs 4 0 0 .control ** output file ** set outfile = "bsim4n-3d-1.table" *set outfile = "bsim4p-3d-1.table" save i(vss) echo * 3D table for nmos bsim 4 > $outfile *echo * 3D table for nmos bsim 4 > $outfile let xcount = floor((vdstop-vdstart)/vdstep) + 1 let ycount = floor((vgstop-vgstart)/vgstep) + 1 let zcount = floor((vbstop-vbstart)/vbstep) + 1 echo *x >> $outfile echo $&xcount >> $outfile echo *y >> $outfile echo $&ycount >> $outfile echo *z >> $outfile echo $&zcount >> $outfile let xvec = vector(xcount) let yvec = vector(ycount) let zvec = vector(zcount) let loopx = vdstart let lcx=0 while lcx < xcount let xvec[lcx] = loopx let loopx = loopx + vdstep let lcx = lcx + 1 end echo *x row >> $outfile echo $&xvec >> $outfile let lcy=0 let loopy = vgstart while lcy < ycount let yvec[lcy] = loopy let loopy = loopy + vgstep let lcy = lcy + 1 end echo *y column >> $outfile echo $&yvec >> $outfile let lcz=0 let loopz = vbstart while lcz < zcount let zvec[lcz] = loopz let loopz = loopz + vbstep let lcz = lcz + 1 end echo *z tables >> $outfile echo $&zvec >> $outfile let lcz=0 let loopz = vbstart while lcz < zcount echo *table $&loopz >> $outfile alter vbs loopz let lcy=0 let loopy = vgstart while lcy < ycount alter vgs loopy dc vds $&vdstart $&vdstop $&vdstep let xvec = i(vss) echo $&xvec >> $outfile destroy dc1 let loopy = loopy + vgstep let lcy = lcy + 1 end let loopz = loopz + vbstep let lcz = lcz + 1 end .endc .include ./modelcards/modelcard.nmos .include ./modelcards/modelcard.pmos .end tmpk8ny_4pz/examples/xspice/table/bsim4p-2d-3.table0000644000175000017500000004611013546075722022234 0ustar carstencarsten*table for nmos bsim 4 *x 39 *y 39 *x row -1.8 -1.75 -1.7 -1.65 -1.6 -1.55 -1.5 -1.45 -1.4 -1.35 -1.3 -1.25 -1.2 -1.15 -1.1 -1.05 -1 -0.95 -0.9 -0.85 -0.8 -0.75 -0.7 -0.65 -0.6 -0.55 -0.5 -0.45 -0.4 -0.35 -0.3 -0.25 -0.2 -0.15 -0.1 -0.05 9.85323E-16 0.05 0.1 *y column -1.8 -1.75 -1.7 -1.65 -1.6 -1.55 -1.5 -1.45 -1.4 -1.35 -1.3 -1.25 -1.2 -1.15 -1.1 -1.05 -1 -0.95 -0.9 -0.85 -0.8 -0.75 -0.7 -0.65 -0.6 -0.55 -0.5 -0.45 -0.4 -0.35 -0.3 -0.25 -0.2 -0.15 -0.1 -0.05 9.85323E-16 0.05 0.1 -0.00233258 -0.00232046 -0.00230786 -0.00229511 -0.00228208 -0.00226874 -0.00225506 -0.002241 -0.00222653 -0.00221159 -0.00219614 -0.00218009 -0.00216336 -0.00214578 -0.0021271 -0.00210681 -0.002084 -0.00205742 -0.00202566 -0.0019875 -0.00194206 -0.00188874 -0.00182714 -0.00175696 -0.00167801 -0.00159012 -0.00149315 -0.00138699 -0.00127152 -0.00114666 -0.00101231 -0.000868375 -0.000714765 -0.00055139 -0.000378157 -0.000194965 -1.70167E-06 0.000194256 0.000385643 -0.00227538 -0.00226359 -0.00225138 -0.00223902 -0.00222641 -0.0022135 -0.00220029 -0.00218672 -0.00217278 -0.00215841 -0.00214357 -0.00212818 -0.00211218 -0.00209543 -0.00207774 -0.00205877 -0.00203785 -0.0020139 -0.00198547 -0.00195113 -0.00190974 -0.00186048 -0.00180282 -0.00173639 -0.00166094 -0.00157628 -0.00148224 -0.0013787 -0.00126552 -0.00114262 -0.00100987 -0.000867184 -0.000714462 -0.000551606 -0.000378517 -0.000195092 -1.22001E-06 0.000195554 0.000387768 -0.00221568 -0.00220424 -0.00219241 -0.00218044 -0.00216824 -0.00215577 -0.00214301 -0.00212993 -0.00211651 -0.0021027 -0.00208845 -0.00207371 -0.00205841 -0.00204244 -0.00202567 -0.00200784 -0.0019885 -0.0019668 -0.00194142 -0.00191081 -0.00187355 -0.00182855 -0.00177511 -0.00171274 -0.00164111 -0.00155999 -0.00146919 -0.00136857 -0.00125797 -0.00113729 -0.00100641 -0.000865212 -0.000713602 -0.00055147 -0.000378711 -0.000195216 -8.71702E-07 0.00019661 0.000389573 -0.00215338 -0.00214228 -0.00213082 -0.00211924 -0.00210744 -0.0020954 -0.0020831 -0.00207051 -0.00205759 -0.00204433 -0.00203067 -0.00201656 -0.00200194 -0.00198673 -0.00197081 -0.00195401 -0.00193599 -0.00191616 -0.00189346 -0.00186635 -0.0018332 -0.00179263 -0.00174366 -0.00168565 -0.00161818 -0.00154094 -0.00145372 -0.00135633 -0.00124863 -0.00113047 -0.00100173 -0.000862301 -0.000712052 -0.000550875 -0.000378654 -0.000195276 -6.2107E-07 0.000197436 0.000391045 -0.00208835 -0.00207759 -0.00206651 -0.00205532 -0.00204392 -0.00203231 -0.00202045 -0.00200833 -0.00199592 -0.00198319 -0.00197011 -0.00195661 -0.00194267 -0.00192819 -0.00191308 -0.00189722 -0.00188036 -0.00186209 -0.00184163 -0.00181766 -0.00178847 -0.00175239 -0.00170812 -0.00165478 -0.0015918 -0.0015188 -0.00143551 -0.00134172 -0.00123725 -0.00112194 -0.000995669 -0.00085829 -0.000709679 -0.000549713 -0.000378268 -0.000195219 -4.41428E-07 0.000198032 0.000392162 -0.00202051 -0.00201009 -0.00199938 -0.00198857 -0.00197757 -0.00196638 -0.00195497 -0.00194332 -0.00193141 -0.00191921 -0.00190668 -0.00189379 -0.00188049 -0.00186672 -0.0018524 -0.00183742 -0.0018216 -0.00180466 -0.00178605 -0.00176476 -0.00173922 -0.00170756 -0.00166813 -0.00161974 -0.0015616 -0.00149322 -0.00141425 -0.00132444 -0.00122357 -0.00111148 -0.00098801 -0.000853012 -0.000706347 -0.000547879 -0.000377474 -0.000194997 -3.13072E-07 0.000198392 0.000392893 -0.00194976 -0.00193968 -0.00192934 -0.00191891 -0.00190832 -0.00189755 -0.00188658 -0.00187539 -0.00186397 -0.00185229 -0.00184031 -0.00182801 -0.00181535 -0.00180226 -0.00178869 -0.00177455 -0.00175969 -0.00174392 -0.00172685 -0.00170777 -0.00168541 -0.00165794 -0.00162338 -0.00158016 -0.00152721 -0.00146384 -0.0013896 -0.00130417 -0.00120732 -0.00109884 -0.000978546 -0.000846289 -0.000701911 -0.000545261 -0.000376194 -0.000194563 -2.21597E-07 0.000198501 0.000393199 -0.00187604 -0.0018663 -0.00185633 -0.00184628 -0.00183609 -0.00182574 -0.00181521 -0.00180448 -0.00179354 -0.00178237 -0.00177094 -0.00175922 -0.00174717 -0.00173475 -0.00172191 -0.00170856 -0.0016946 -0.00167988 -0.00166414 -0.00164688 -0.00162718 -0.00160345 -0.00157362 -0.00153571 -0.00148824 -0.00143027 -0.00136119 -0.0012806 -0.00118819 -0.00108374 -0.00096705 -0.000837932 -0.000696217 -0.000541743 -0.000374347 -0.000193872 -1.56553E-07 0.000198338 0.00039303 -0.00179935 -0.00178995 -0.00178036 -0.00177069 -0.0017609 -0.00175096 -0.00174087 -0.0017306 -0.00172014 -0.00170947 -0.00169858 -0.00168742 -0.00167598 -0.00166421 -0.00165206 -0.00163948 -0.00162638 -0.00161263 -0.00159805 -0.00158231 -0.00156476 -0.00154421 -0.00151874 -0.0014861 -0.00144435 -0.00139215 -0.00132866 -0.00125336 -0.00116588 -0.00106593 -0.000953283 -0.000827739 -0.000689104 -0.0005372 -0.000371849 -0.000192877 -1.10395E-07 0.000197874 0.00039233 -0.00171977 -0.00171071 -0.00170149 -0.00169221 -0.00168282 -0.0016733 -0.00166364 -0.00165382 -0.00164384 -0.00163367 -0.0016233 -0.0016127 -0.00160185 -0.00159071 -0.00157924 -0.00156739 -0.0015551 -0.00154226 -0.00152874 -0.0015143 -0.00149851 -0.00148055 -0.00145886 -0.00143122 -0.00139525 -0.00134913 -0.00129167 -0.00122214 -0.00114007 -0.00104512 -0.000937006 -0.000815506 -0.000680406 -0.000531506 -0.000368612 -0.000191533 -7.77023E-08 0.000197077 0.00039103 -0.00163731 -0.0016286 -0.00161976 -0.00161086 -0.00160186 -0.00159276 -0.00158353 -0.00157417 -0.00156466 -0.00155498 -0.00154513 -0.00153508 -0.0015248 -0.00151428 -0.00150347 -0.00149233 -0.00148081 -0.00146883 -0.00145628 -0.00144299 -0.00142868 -0.00141279 -0.00139421 -0.00137103 -0.00134071 -0.00130086 -0.00124982 -0.00118656 -0.00111042 -0.00102099 -0.00091794 -0.000801001 -0.000669934 -0.000524518 -0.00036454 -0.000189788 -5.4587E-08 0.000195907 0.000389055 -0.00155201 -0.00154365 -0.00153518 -0.00152666 -0.00151807 -0.00150938 -0.00150059 -0.00149168 -0.00148264 -0.00147345 -0.00146411 -0.0014546 -0.00144489 -0.00143496 -0.00142479 -0.00141434 -0.00140356 -0.00139239 -0.00138075 -0.00136851 -0.00135547 -0.00134127 -0.00132517 -0.00130573 -0.00128061 -0.00124704 -0.00120274 -0.00114621 -0.00107655 -0.000993212 -0.000895789 -0.00078397 -0.000657483 -0.000516081 -0.000359527 -0.000187589 -3.82718E-08 0.000194322 0.000386324 -0.00146392 -0.00145592 -0.00144783 -0.0014397 -0.00143151 -0.00142324 -0.00141488 -0.00140642 -0.00139785 -0.00138915 -0.00138032 -0.00137134 -0.00136219 -0.00135285 -0.0013433 -0.00133351 -0.00132345 -0.00131306 -0.00130227 -0.001291 -0.00127909 -0.00126631 -0.00125217 -0.00123571 -0.00121507 -0.00118749 -0.00115007 -0.0011007 -0.00103807 -0.000961415 -0.000870231 -0.00076414 -0.000642831 -0.000506025 -0.000353458 -0.000184876 -2.67765E-08 0.00019227 0.000382743 -0.00137317 -0.00136553 -0.00135783 -0.00135009 -0.00134231 -0.00133446 -0.00132653 -0.00131852 -0.00131042 -0.00130221 -0.00129388 -0.00128543 -0.00127683 -0.00126807 -0.00125913 -0.00124998 -0.00124061 -0.00123096 -0.00122098 -0.00121061 -0.00119973 -0.00118818 -0.00117564 -0.00116151 -0.00114449 -0.00112223 -0.00109157 -0.00104966 -0.000994575 -0.000925223 -0.000840925 -0.000741218 -0.000625737 -0.000494164 -0.000346208 -0.000181585 -1.8692E-08 0.000189694 0.000378208 -0.00127991 -0.00127263 -0.00126532 -0.00125799 -0.00125062 -0.00124319 -0.00123571 -0.00122815 -0.00122051 -0.00121279 -0.00120496 -0.00119703 -0.00118897 -0.00118078 -0.00117244 -0.00116393 -0.00115522 -0.00114628 -0.00113708 -0.00112755 -0.00111762 -0.00110717 -0.00109599 -0.00108369 -0.00106945 -0.00105159 -0.00102718 -0.00099278 -0.000945685 -0.000884244 -0.000807512 -0.000714891 -0.000605942 -0.000480301 -0.00033764 -0.000177646 -1.3017E-08 0.000186533 0.000372603 -0.00118435 -0.00117746 -0.00117055 -0.00116362 -0.00115666 -0.00114967 -0.00114262 -0.00113552 -0.00112836 -0.00112112 -0.0011138 -0.00110638 -0.00109887 -0.00109124 -0.00108348 -0.00107558 -0.00106753 -0.00105928 -0.00105081 -0.00104209 -0.00103304 -0.00102359 -0.00101358 -0.00100278 -0.000990688 -0.000976208 -0.000957111 -0.000929914 -0.000891061 -0.000838096 -0.000769622 -0.000684829 -0.00058317 -0.00046422 -0.000327607 -0.000172983 -9.04148E-09 0.000182717 0.0003658 -0.0010868 -0.00108029 -0.00107379 -0.00106728 -0.00106074 -0.00105418 -0.00104759 -0.00104095 -0.00103425 -0.0010275 -0.00102068 -0.00101378 -0.00100681 -0.000999733 -0.000992556 -0.000985262 -0.000977836 -0.000970259 -0.000962505 -0.000954542 -0.000946324 -0.00093779 -0.000928841 -0.000919315 -0.000908905 -0.000896961 -0.000882017 -0.000861186 -0.000830482 -0.000786426 -0.000726887 -0.000650693 -0.000557133 -0.000445694 -0.00031595 -0.000167513 -6.26241E-09 0.000178169 0.000357661 -0.000987605 -0.000981506 -0.000975424 -0.000969334 -0.000963235 -0.000957117 -0.000950974 -0.000944798 -0.000938583 -0.00093232 -0.000926003 -0.000919626 -0.000913181 -0.000906661 -0.000900056 -0.000893356 -0.00088655 -0.000879623 -0.000872555 -0.000865321 -0.000857889 -0.000850212 -0.000842221 -0.00083381 -0.000824785 -0.000814765 -0.000802882 -0.000787162 -0.000763969 -0.000728974 -0.000678964 -0.000612146 -0.000527533 -0.000424485 -0.000302503 -0.000161148 -4.3242E-09 0.000172806 0.000348033 -0.000887257 -0.000881577 -0.000875927 -0.000870273 -0.000864617 -0.000858952 -0.00085327 -0.000847566 -0.000841832 -0.000836063 -0.000830253 -0.000824395 -0.000818483 -0.000812512 -0.000806474 -0.00080036 -0.000794163 -0.00078787 -0.000781466 -0.000774934 -0.000768249 -0.000761377 -0.000754271 -0.000746856 -0.000739013 -0.000730512 -0.000720864 -0.000708902 -0.000691974 -0.000665674 -0.000625576 -0.000568869 -0.000494077 -0.00040035 -0.00028709 -0.000153795 -2.97579E-09 0.000166539 0.000336753 -0.000786344 -0.000781101 -0.000775896 -0.000770691 -0.00076549 -0.000760287 -0.000755076 -0.00074985 -0.000744605 -0.000739335 -0.000734034 -0.000728697 -0.000723319 -0.000717896 -0.00071242 -0.000706887 -0.000701288 -0.000695616 -0.000689859 -0.000684004 -0.000678034 -0.000671923 -0.00066564 -0.000659133 -0.000652326 -0.00064508 -0.000637119 -0.000627809 -0.000615554 -0.000596846 -0.000566605 -0.000520602 -0.000456488 -0.000373051 -0.000269535 -0.000145359 -2.04023E-09 0.000159273 0.000323645 -0.000685601 -0.000680812 -0.000676067 -0.000671325 -0.000666593 -0.000661864 -0.000657133 -0.000652395 -0.000647646 -0.00064288 -0.000638093 -0.00063328 -0.000628438 -0.000623561 -0.000618646 -0.000613687 -0.00060868 -0.000603617 -0.000598491 -0.000593293 -0.000588009 -0.000582623 -0.000577112 -0.000571443 -0.000565564 -0.000559392 -0.00055277 -0.000545361 -0.000536322 -0.000523458 -0.000502253 -0.000467205 -0.00041454 -0.000342366 -0.000249666 -0.000135741 -1.39302E-09 0.000150911 0.000308528 -0.000585934 -0.000581618 -0.000577349 -0.000573086 -0.000568835 -0.000564592 -0.000560353 -0.000556112 -0.000551867 -0.000547612 -0.000543344 -0.000539059 -0.000534754 -0.000530425 -0.000526068 -0.000521681 -0.000517258 -0.000512795 -0.000508287 -0.000503727 -0.000499106 -0.000494413 -0.000489632 -0.000484741 -0.000479708 -0.000474481 -0.000468971 -0.000462998 -0.000456142 -0.000447263 -0.000433343 -0.000408804 -0.000368113 -0.000308125 -0.000227332 -0.00012485 -9.46731E-10 0.000141351 0.000291214 -0.000488461 -0.000484636 -0.00048086 -0.00047709 -0.000473335 -0.000469591 -0.000465854 -0.000462121 -0.000458388 -0.000454651 -0.000450908 -0.000447155 -0.000443389 -0.000439608 -0.000435809 -0.000431989 -0.000428145 -0.000424273 -0.000420371 -0.000416433 -0.000412454 -0.000408425 -0.000404338 -0.000400178 -0.000395924 -0.000391545 -0.000386991 -0.000382164 -0.000376859 -0.000370544 -0.000361652 -0.000346071 -0.000317307 -0.000270252 -0.000202425 -0.000112611 -6.40079E-10 0.0001305 0.000271519 -0.000394567 -0.000391252 -0.000387984 -0.000384722 -0.000381477 -0.000378244 -0.00037502 -0.000371803 -0.00036859 -0.000365378 -0.000362164 -0.000358946 -0.000355722 -0.000352489 -0.000349245 -0.000345989 -0.000342717 -0.000339429 -0.00033612 -0.000332789 -0.000329432 -0.000326044 -0.000322618 -0.000319146 -0.000315616 -0.000312009 -0.000308296 -0.000304427 -0.0003003 -0.000295677 -0.000289871 -0.000280695 -0.000262695 -0.000228875 -0.000174932 -9.89806E-05 -4.30202E-10 0.000118275 0.000249275 -0.000305991 -0.000303201 -0.000300453 -0.000297712 -0.000294987 -0.000292275 -0.000289573 -0.000286879 -0.000284192 -0.000281508 -0.000278826 -0.000276145 -0.000273461 -0.000270774 -0.000268082 -0.000265383 -0.000262677 -0.000259961 -0.000257233 -0.000254493 -0.000251738 -0.000248965 -0.00024617 -0.000243348 -0.000240493 -0.000237594 -0.000234634 -0.000231589 -0.000228409 -0.000224988 -0.00022105 -0.000215691 -0.000205824 -0.000184547 -0.000145036 -8.39968E-05 -2.8719E-10 0.000104625 0.000224348 -0.000224924 -0.000222677 -0.000220447 -0.000218233 -0.000216033 -0.000213845 -0.000211668 -0.000209499 -0.000207337 -0.000205181 -0.000203028 -0.000200879 -0.00019873 -0.000196581 -0.000194432 -0.00019228 -0.000190126 -0.000187967 -0.000185804 -0.000183634 -0.000181457 -0.000179272 -0.000177075 -0.000174865 -0.000172638 -0.000170388 -0.000168108 -0.000165784 -0.000163393 -0.000160891 -0.000158168 -0.000154902 -0.000149869 -0.000138709 -0.000113321 -6.78566E-05 -1.90222E-10 8.95689E-05 0.000196681 -0.000154058 -0.000152338 -0.000150632 -0.000148939 -0.000147257 -0.000145586 -0.000143924 -0.000142269 -0.000140622 -0.00013898 -0.000137343 -0.00013571 -0.00013408 -0.000132452 -0.000130825 -0.000129199 -0.000127573 -0.000125947 -0.00012432 -0.000122691 -0.000121059 -0.000119425 -0.000117787 -0.000116144 -0.000114493 -0.000112834 -0.00011116 -0.000109468 -0.000107746 -0.000105976 -0.000104117 -0.00010206 -9.94203E-05 -9.44695E-05 -8.11588E-05 -5.10756E-05 -1.2484E-10 7.32653E-05 0.000166371 -9.63328E-05 -9.51119E-05 -9.39014E-05 -9.27004E-05 -9.15081E-05 -9.03237E-05 -8.91466E-05 -8.79758E-05 -8.68108E-05 -8.56509E-05 -8.44954E-05 -8.33437E-05 -8.21954E-05 -8.10498E-05 -7.99066E-05 -7.87654E-05 -7.76259E-05 -7.64876E-05 -7.53504E-05 -7.42139E-05 -7.30779E-05 -7.19421E-05 -7.0806E-05 -6.96691E-05 -6.85307E-05 -6.73896E-05 -6.62444E-05 -6.50926E-05 -6.39302E-05 -6.275E-05 -6.15373E-05 -6.02568E-05 -5.87977E-05 -5.66725E-05 -5.1258E-05 -3.47144E-05 -8.10352E-11 5.61575E-05 0.000133825 -5.39721E-05 -5.31885E-05 -5.24116E-05 -5.1641E-05 -5.08763E-05 -5.0117E-05 -4.93626E-05 -4.86128E-05 -4.78671E-05 -4.71251E-05 -4.63866E-05 -4.56512E-05 -4.49186E-05 -4.41885E-05 -4.34606E-05 -4.27349E-05 -4.2011E-05 -4.12889E-05 -4.05684E-05 -3.98495E-05 -3.91319E-05 -3.84156E-05 -3.77004E-05 -3.69862E-05 -3.62727E-05 -3.55596E-05 -3.48461E-05 -3.41316E-05 -3.34145E-05 -3.26922E-05 -3.196E-05 -3.12067E-05 -3.04013E-05 -2.94225E-05 -2.75416E-05 -2.0484E-05 -5.18994E-11 3.91899E-05 0.000100071 -2.68785E-05 -2.6434E-05 -2.59935E-05 -2.55566E-05 -2.51231E-05 -2.46927E-05 -2.42654E-05 -2.38408E-05 -2.34187E-05 -2.2999E-05 -2.25815E-05 -2.2166E-05 -2.17524E-05 -2.13406E-05 -2.09303E-05 -2.05217E-05 -2.01145E-05 -1.97086E-05 -1.93042E-05 -1.8901E-05 -1.84991E-05 -1.80985E-05 -1.7699E-05 -1.73007E-05 -1.69035E-05 -1.65072E-05 -1.61117E-05 -1.57167E-05 -1.53218E-05 -1.49261E-05 -1.4528E-05 -1.41242E-05 -1.3706E-05 -1.32425E-05 -1.2563E-05 -1.01831E-05 -3.26807E-11 2.39733E-05 6.7268E-05 -1.19576E-05 -1.17381E-05 -1.15206E-05 -1.13048E-05 -1.10908E-05 -1.08784E-05 -1.06675E-05 -1.04581E-05 -1.02499E-05 -1.0043E-05 -9.83733E-06 -9.6327E-06 -9.42912E-06 -9.22651E-06 -9.02483E-06 -8.82404E-06 -8.6241E-06 -8.425E-06 -8.22671E-06 -8.02922E-06 -7.83253E-06 -7.63662E-06 -7.44148E-06 -7.24712E-06 -7.0535E-06 -6.86061E-06 -6.66839E-06 -6.47676E-06 -6.28556E-06 -6.09456E-06 -5.90326E-06 -5.71064E-06 -5.51413E-06 -5.30535E-06 -5.04181E-06 -4.30755E-06 -2.01285E-11 1.24187E-05 3.90727E-05 -4.76961E-06 -4.67586E-06 -4.58295E-06 -4.49083E-06 -4.39945E-06 -4.30878E-06 -4.21877E-06 -4.12939E-06 -4.04059E-06 -3.95236E-06 -3.86465E-06 -3.77743E-06 -3.69069E-06 -3.6044E-06 -3.51854E-06 -3.43309E-06 -3.34805E-06 -3.2634E-06 -3.17914E-06 -3.09526E-06 -3.01177E-06 -2.92866E-06 -2.84593E-06 -2.76358E-06 -2.6816E-06 -2.6E-06 -2.51875E-06 -2.43783E-06 -2.3572E-06 -2.27678E-06 -2.19642E-06 -2.11579E-06 -2.03411E-06 -1.94891E-06 -1.84837E-06 -1.61632E-06 -1.2038E-11 5.44169E-06 1.92185E-05 -1.69126E-06 -1.65678E-06 -1.6226E-06 -1.58872E-06 -1.55512E-06 -1.52178E-06 -1.48869E-06 -1.45584E-06 -1.42321E-06 -1.39079E-06 -1.35857E-06 -1.32654E-06 -1.29469E-06 -1.26301E-06 -1.2315E-06 -1.20015E-06 -1.16896E-06 -1.13792E-06 -1.10704E-06 -1.0763E-06 -1.04572E-06 -1.01528E-06 -9.84997E-07 -9.54864E-07 -9.24882E-07 -8.95048E-07 -8.65358E-07 -8.35806E-07 -8.06378E-07 -7.77049E-07 -7.47773E-07 -7.18449E-07 -6.88836E-07 -6.58182E-07 -6.22998E-07 -5.49467E-07 -6.9112E-12 2.09591E-06 8.16884E-06 -5.29439E-07 -5.18461E-07 -5.07582E-07 -4.96798E-07 -4.86104E-07 -4.75495E-07 -4.64966E-07 -4.54514E-07 -4.44134E-07 -4.33823E-07 -4.23577E-07 -4.13392E-07 -4.03267E-07 -3.93198E-07 -3.83184E-07 -3.73223E-07 -3.63314E-07 -3.53455E-07 -3.43647E-07 -3.33888E-07 -3.24179E-07 -3.1452E-07 -3.04911E-07 -2.95352E-07 -2.85843E-07 -2.76383E-07 -2.66971E-07 -2.57606E-07 -2.48283E-07 -2.38995E-07 -2.29729E-07 -2.20454E-07 -2.11099E-07 -2.01444E-07 -1.90478E-07 -1.68476E-07 -3.71868E-12 7.30721E-07 3.12627E-06 -1.48217E-07 -1.45122E-07 -1.42055E-07 -1.39015E-07 -1.36001E-07 -1.33011E-07 -1.30044E-07 -1.27099E-07 -1.24174E-07 -1.21269E-07 -1.18383E-07 -1.15514E-07 -1.12662E-07 -1.09827E-07 -1.07007E-07 -1.04202E-07 -1.01412E-07 -9.86373E-08 -9.58767E-08 -9.31303E-08 -9.03983E-08 -8.76807E-08 -8.49774E-08 -8.22885E-08 -7.9614E-08 -7.69538E-08 -7.43075E-08 -7.16747E-08 -6.90541E-08 -6.6444E-08 -6.38403E-08 -6.12351E-08 -5.86088E-08 -5.5901E-08 -5.28363E-08 -4.67733E-08 -1.77647E-12 2.30509E-07 1.10252E-06 -3.82252E-08 -3.74247E-08 -3.66315E-08 -3.58453E-08 -3.50658E-08 -3.42926E-08 -3.35254E-08 -3.27639E-08 -3.20077E-08 -3.12566E-08 -3.05104E-08 -2.97689E-08 -2.90317E-08 -2.82988E-08 -2.757E-08 -2.68452E-08 -2.61242E-08 -2.54071E-08 -2.46938E-08 -2.39842E-08 -2.32784E-08 -2.25763E-08 -2.1878E-08 -2.11835E-08 -2.04927E-08 -1.98057E-08 -1.91223E-08 -1.84424E-08 -1.77658E-08 -1.70919E-08 -1.64198E-08 -1.57473E-08 -1.50695E-08 -1.4371E-08 -1.35812E-08 -1.20254E-08 -6.35484E-13 6.58055E-08 3.56049E-07 -9.36577E-09 -9.16937E-09 -8.97479E-09 -8.78194E-09 -8.59072E-09 -8.40106E-09 -8.21287E-09 -8.02608E-09 -7.84062E-09 -7.65641E-09 -7.4734E-09 -7.29152E-09 -7.11075E-09 -6.93101E-09 -6.75229E-09 -6.57456E-09 -6.39778E-09 -6.22195E-09 -6.04705E-09 -5.87308E-09 -5.70003E-09 -5.52791E-09 -5.35672E-09 -5.18646E-09 -5.01713E-09 -4.84872E-09 -4.68122E-09 -4.51458E-09 -4.34874E-09 -4.18358E-09 -4.01886E-09 -3.85407E-09 -3.68798E-09 -3.51682E-09 -3.32338E-09 -2.94281E-09 1.30849E-22 1.73219E-08 1.04473E-07 -2.22947E-09 -2.18269E-09 -2.13634E-09 -2.0904E-09 -2.04485E-09 -1.99967E-09 -1.95485E-09 -1.91036E-09 -1.86618E-09 -1.82231E-09 -1.77872E-09 -1.7354E-09 -1.69234E-09 -1.64954E-09 -1.60697E-09 -1.56464E-09 -1.52255E-09 -1.48067E-09 -1.43902E-09 -1.39759E-09 -1.35638E-09 -1.3154E-09 -1.27463E-09 -1.23409E-09 -1.19377E-09 -1.15367E-09 -1.11378E-09 -1.07411E-09 -1.03462E-09 -9.95299E-10 -9.5608E-10 -9.16847E-10 -8.77305E-10 -8.36559E-10 -7.90513E-10 -6.99954E-10 3.23501E-13 4.31934E-09 2.81945E-08 -5.22434E-10 -5.1146E-10 -5.00588E-10 -4.89812E-10 -4.79129E-10 -4.68532E-10 -4.58018E-10 -4.47582E-10 -4.37221E-10 -4.2693E-10 -4.16706E-10 -4.06547E-10 -3.96448E-10 -3.86408E-10 -3.76425E-10 -3.66498E-10 -3.56624E-10 -3.46803E-10 -3.37035E-10 -3.27318E-10 -3.17654E-10 -3.08041E-10 -2.98481E-10 -2.88973E-10 -2.79517E-10 -2.70113E-10 -2.6076E-10 -2.51455E-10 -2.42196E-10 -2.32975E-10 -2.23778E-10 -2.14578E-10 -2.05305E-10 -1.95751E-10 -1.84954E-10 -1.63722E-10 4.60188E-13 1.04381E-09 7.17501E-09 tmpk8ny_4pz/examples/xspice/table/table-model-mos-2d-4.sp0000644000175000017500000000275713546075722023364 0ustar carstencarstenCode Model Test - 2d Table Model * Inverter * *** analysis type *** .control *option reltol=0.1 dc V1 0 1.5 0.01 *op *ac lin 11 100 200 *tran 100p 20n *plot i(Vs) i(Vs2) plot i(vsinv) plot v(in1) v(out1) plot deriv(v(out1)) .endc * *** input sources *** * v1 in1 0 DC 0.75 ac 1 Vs2 s2 0 0 vsinv vss 0 0 vdinv vdd 0 1.5 * ********************* *xmosnt d g s tbmosn *mn2 d g s2 s2 n1 l=0.13u w=10u ad=5p pd=6u as=5p ps=6u rgeoMod=1 .subckt inv vd vs in out *mp2 out in vd vd p1 l=0.13u w=10u ad=5p pd=6u as=5p ps=6u xmospt out in vd tbmosp *mn2 out in vs vs n1 l=0.13u w=5u ad=5p pd=6u as=5p ps=6u xmosnt out in vs tbmosn .ends xmosinv1 vdd vss in1 out1 inv .subckt tbmosn d g s *** table model of mos transistor *** cdg d g 0.01p csg s g 0.014p amos1 %vd(d s) %vd(g s) %id(d s) mostable1 .model mostable1 table2d (offset=0.0 gain=0.5 order=2 file="bsim4n-2d-3.table") * NMOS L=0.13u W=10.0u rgeoMod=1 * BSIM 4.7 * change width of transistor by modifying parameter "gain" * source is always tied to bulk (we not yet have a 3D table model!) .ends .subckt tbmosp d g s *** table model of pmos transistor *** cdg d g 0.01p csg s g 0.014p amos2 %vd(d s) %vd(g s) %id(d s) mostable2 .model mostable2 table2d (offset=0.0 gain=1 order=3 file="bsim4p-2d-3.table") * PMOS L=0.13u W=10.0u rgeoMod=1 * BSIM 4.7 * change width of transistor by modifying parameter "gain" * source is always tied to bulk (we not yet have a 3D table model!) .ends .include ./modelcards/modelcard.nmos .include ./modelcards/modelcard.pmos .end tmpk8ny_4pz/examples/xspice/table/table-model-man-3d-1.sp0000644000175000017500000000070113546075722023322 0ustar carstencarstenCode Model Test - 3d Table Model * simple table, generated manually * *** analysis type *** .control dc V1 0.1 1.4 0.1 V3 4.1 4.5 0.2 plot v(1) v(2) v(11, 10) .endc * *** input sources *** * v1 1 0 DC 1.5 * v2 2 0 DC 1.5 * v3 3 0 DC 1.5 **** table model *** a1 1 2 3 %id(10 11) table1 .model table1 table3d (offset=0.0 gain=1.0 order=2 file="test-3d-1.table") * * *** resistors to ground *** r1 1 0 1k r2 2 0 1k r3 10 11 10 r10 10 0 1k * * .end tmpk8ny_4pz/examples/xspice/table/test-2d-1.table0000644000175000017500000000074113546075722022013 0ustar carstencarsten* table source * number of columns (x) 8 * number of rows (y) 9 * x horizontal (column) address values (real numbers) 0 1 2 3 4 5 6 7 * y vertical (row) address values (real numbers) 0 1 2 3 4 5 6 7 8 * table with output data (horizontally addressed by x, vertically by y) 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 1 1 1 1 1 1 1 1 1 1.2 1.4 1.6 1.8 2 2.2 2.4 1 1.5 2 2.5 3 3.5 4 4.5 1 2 3 4 5 6 7 8 1 2.5 4 5.5 7 8.5 10 11.5 1 3 5 7 9 11 13 15 1 3.5 6 8.5 11 13.5 16 18.5 1 4 7 10 13 16 19 22 tmpk8ny_4pz/examples/xspice/table/bsim4p-3d-1.table0000644000175000017500000070007213546075722022237 0ustar carstencarsten* 3D table for pmos bsim 4 *x 39 *y 39 *z 12 *x row -1.8 -1.75 -1.7 -1.65 -1.6 -1.55 -1.5 -1.45 -1.4 -1.35 -1.3 -1.25 -1.2 -1.15 -1.1 -1.05 -1 -0.95 -0.9 -0.85 -0.8 -0.75 -0.7 -0.65 -0.6 -0.55 -0.5 -0.45 -0.4 -0.35 -0.3 -0.25 -0.2 -0.15 -0.1 -0.05 9.85323E-16 0.05 0.1 *y column -1.8 -1.75 -1.7 -1.65 -1.6 -1.55 -1.5 -1.45 -1.4 -1.35 -1.3 -1.25 -1.2 -1.15 -1.1 -1.05 -1 -0.95 -0.9 -0.85 -0.8 -0.75 -0.7 -0.65 -0.6 -0.55 -0.5 -0.45 -0.4 -0.35 -0.3 -0.25 -0.2 -0.15 -0.1 -0.05 9.85323E-16 0.05 0.1 *z tables -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 *table -0.00272146 -0.00270748 -0.00269291 -0.00267817 -0.00266308 -0.0026476 -0.00263171 -0.00261535 -0.00259848 -0.00258103 -0.00256293 -0.00254409 -0.00252439 -0.00250365 -0.00248156 -0.00245757 -0.00243069 -0.00239949 -0.00236235 -0.00231784 -0.00226491 -0.00220284 -0.00213114 -0.00204945 -0.00195754 -0.00185519 -0.00174224 -0.00161855 -0.00148399 -0.00133843 -0.00118175 -0.00101384 -0.000834594 -0.000643884 -0.000441593 -0.000227587 -1.71423E-06 0.000227421 0.000451337 -0.00266895 -0.0026553 -0.00264112 -0.00262677 -0.00261209 -0.00259705 -0.00258163 -0.00256577 -0.00254944 -0.00253258 -0.00251511 -0.00249696 -0.00247802 -0.00245814 -0.0024371 -0.00241449 -0.00238956 -0.00236108 -0.00232741 -0.0022869 -0.00223819 -0.00218032 -0.00211267 -0.00203479 -0.00194638 -0.00184719 -0.00173704 -0.00161576 -0.0014832 -0.00133923 -0.00118372 -0.00101654 -0.000837574 -0.00064669 -0.000443764 -0.000228661 -1.2306E-06 0.000229677 0.000455303 -0.00261367 -0.00260035 -0.00258655 -0.00257258 -0.00255831 -0.00254372 -0.00252876 -0.0025134 -0.0024976 -0.00248131 -0.00246447 -0.002447 -0.0024288 -0.00240976 -0.00238969 -0.00236829 -0.00234502 -0.0023189 -0.00228844 -0.00225185 -0.00220746 -0.00215404 -0.00209075 -0.00201701 -0.00193245 -0.00183677 -0.00172974 -0.00161119 -0.00148094 -0.00133885 -0.00118476 -0.00101855 -0.000840084 -0.000649221 -0.000445829 -0.000229766 -8.80867E-07 0.000231729 0.00045903 -0.00255543 -0.00254245 -0.00252902 -0.00251544 -0.00250159 -0.00248742 -0.00247293 -0.00245806 -0.00244279 -0.00242707 -0.00241084 -0.00239403 -0.00237656 -0.00235833 -0.00233917 -0.00231887 -0.00229703 -0.00227293 -0.00224532 -0.00221244 -0.0021724 -0.00212362 -0.00206498 -0.00199573 -0.00191538 -0.00182357 -0.00172003 -0.00160455 -0.00147694 -0.00133704 -0.00118467 -0.00101971 -0.000841983 -0.000651363 -0.000447697 -0.000230838 -6.2922E-07 0.000233588 0.000462499 -0.00249408 -0.00248144 -0.00246838 -0.00245519 -0.00244174 -0.00242801 -0.00241397 -0.0023996 -0.00238485 -0.00236968 -0.00235405 -0.0023379 -0.00232115 -0.00230369 -0.00228542 -0.00226614 -0.00224557 -0.00222318 -0.00219801 -0.00216851 -0.00213271 -0.00208868 -0.00203495 -0.00197053 -0.00189478 -0.00180723 -0.00170757 -0.00159555 -0.00147095 -0.00133357 -0.00118326 -0.00101983 -0.000843131 -0.000653003 -0.000449288 -0.000231825 -4.48856E-07 0.000235252 0.000465684 -0.00242946 -0.00241715 -0.00240447 -0.00239166 -0.00237862 -0.00236532 -0.00235174 -0.00233785 -0.00232362 -0.002309 -0.00229397 -0.00227845 -0.00226239 -0.00224571 -0.00222828 -0.00220997 -0.00219055 -0.00216964 -0.00214653 -0.00212 -0.00208816 -0.00204887 -0.00200026 -0.00194101 -0.00187024 -0.00178738 -0.00169202 -0.00158387 -0.00146267 -0.00132821 -0.0011803 -0.00101875 -0.000843381 -0.000654029 -0.000450517 -0.000232673 -3.19989E-07 0.000236712 0.000468549 -0.00236141 -0.00234936 -0.00233713 -0.00232471 -0.00231208 -0.00229921 -0.00228608 -0.00227267 -0.00225895 -0.00224488 -0.00223043 -0.00221554 -0.00220017 -0.00218423 -0.00216762 -0.00215024 -0.00213189 -0.00211229 -0.00209094 -0.00206691 -0.00203863 -0.0020039 -0.00196051 -0.00190672 -0.00184133 -0.00176359 -0.00167299 -0.00156915 -0.00145179 -0.00132067 -0.00117556 -0.00101626 -0.000842577 -0.000654321 -0.000451303 -0.000233336 -2.28154E-07 0.000237952 0.00047105 -0.00228979 -0.00227809 -0.00226623 -0.0022542 -0.00224197 -0.00222953 -0.00221686 -0.00220393 -0.00219071 -0.00217718 -0.00216331 -0.00214904 -0.00213433 -0.00211911 -0.00210331 -0.00208681 -0.00206947 -0.00205107 -0.00203125 -0.00200933 -0.0019841 -0.00195358 -0.00191536 -0.00186723 -0.0018076 -0.00173543 -0.00165006 -0.00155103 -0.00143799 -0.00131066 -0.00116879 -0.00101216 -0.000840551 -0.000653751 -0.000451558 -0.000233764 -1.62856E-07 0.000238947 0.000473131 -0.00221453 -0.00220318 -0.00219169 -0.00218005 -0.00216823 -0.00215622 -0.002144 -0.00213154 -0.00211883 -0.00210584 -0.00209253 -0.00207887 -0.00206481 -0.00205031 -0.00203528 -0.00201963 -0.00200326 -0.00198597 -0.0019675 -0.00194737 -0.0019247 -0.00189788 -0.00186457 -0.00182218 -0.00176861 -0.00170246 -0.00162282 -0.00152911 -0.00142091 -0.00129787 -0.00115973 -0.00100623 -0.000837121 -0.000652182 -0.000451186 -0.000233906 -1.16521E-07 0.000239665 0.000474729 -0.00213562 -0.00212462 -0.0021135 -0.00210225 -0.00209084 -0.00207926 -0.00206749 -0.00205551 -0.0020433 -0.00203084 -0.00201809 -0.00200503 -0.00199162 -0.0019778 -0.00196352 -0.0019487 -0.00193324 -0.001917 -0.00189977 -0.00188119 -0.00186065 -0.00183695 -0.00180807 -0.00177128 -0.00172399 -0.00166425 -0.00159085 -0.001503 -0.00140018 -0.00128198 -0.00114809 -0.000998216 -0.000832094 -0.000649467 -0.000450088 -0.00023371 -8.37048E-08 0.000240069 0.000475769 -0.00205297 -0.00204233 -0.00203158 -0.00202072 -0.00200973 -0.00199858 -0.00198726 -0.00197576 -0.00196405 -0.00195211 -0.00193992 -0.00192745 -0.00191467 -0.00190153 -0.00188798 -0.00187396 -0.00185938 -0.00184412 -0.00182803 -0.00181084 -0.0017921 -0.00177098 -0.0017459 -0.00171435 -0.00167334 -0.00162035 -0.00155367 -0.00147225 -0.00137539 -0.00126262 -0.00113355 -0.000987866 -0.000825257 -0.000645445 -0.000448157 -0.000233119 -6.05037E-08 0.000240113 0.000476164 -0.00196653 -0.00195625 -0.00194588 -0.00193542 -0.00192483 -0.00191412 -0.00190326 -0.00189223 -0.00188101 -0.0018696 -0.00185796 -0.00184608 -0.00183391 -0.00182144 -0.0018086 -0.00179535 -0.00178162 -0.00176731 -0.00175228 -0.00173635 -0.00171918 -0.0017002 -0.00167827 -0.00165132 -0.00161637 -0.00157031 -0.00151081 -0.00143638 -0.00134611 -0.0012394 -0.00111578 -0.000974885 -0.000816376 -0.00063994 -0.000445272 -0.000232073 -4.41291E-08 0.000239748 0.000475818 -0.00187625 -0.00186634 -0.00185636 -0.0018463 -0.00183613 -0.00182585 -0.00181545 -0.00180489 -0.00179418 -0.00178329 -0.0017722 -0.00176089 -0.00174934 -0.00173752 -0.00172538 -0.00171288 -0.00169996 -0.00168655 -0.00167253 -0.00165776 -0.00164199 -0.00162481 -0.00160545 -0.00158237 -0.00155295 -0.00151377 -0.00146178 -0.0013949 -0.00131187 -0.00121188 -0.00109439 -0.000958956 -0.000805194 -0.000632755 -0.000441302 -0.000230504 -3.25928E-08 0.000238915 0.000474624 -0.00178215 -0.00177261 -0.00176302 -0.00175336 -0.00174362 -0.00173379 -0.00172384 -0.00171377 -0.00170355 -0.00169318 -0.00168264 -0.00167191 -0.00166096 -0.00164978 -0.00163832 -0.00162655 -0.00161443 -0.00160188 -0.00158882 -0.00157513 -0.00156063 -0.00154502 -0.00152777 -0.00150783 -0.00148315 -0.00145048 -0.00140616 -0.00134732 -0.00127216 -0.00117962 -0.00106899 -0.000939736 -0.000791431 -0.000623678 -0.000436102 -0.000228339 -2.44801E-08 0.00023755 0.000472462 -0.00168426 -0.0016751 -0.00166591 -0.00165667 -0.00164736 -0.00163797 -0.00162849 -0.00161889 -0.00160918 -0.00159934 -0.00158934 -0.00157918 -0.00156883 -0.00155828 -0.00154749 -0.00153644 -0.00152509 -0.00151337 -0.00150122 -0.00148855 -0.00147521 -0.001461 -0.00144554 -0.00142813 -0.00140732 -0.00138043 -0.00134361 -0.00129315 -0.0012265 -0.00114213 -0.00103913 -0.000916852 -0.000774781 -0.000612474 -0.000429514 -0.000225496 -1.87858E-08 0.000235579 0.000469198 -0.00158267 -0.00157391 -0.00156513 -0.00155631 -0.00154744 -0.0015385 -0.00152949 -0.00152038 -0.00151118 -0.00150186 -0.00149241 -0.00148282 -0.00147307 -0.00146314 -0.00145301 -0.00144266 -0.00143205 -0.00142114 -0.00140987 -0.00139816 -0.00138591 -0.00137296 -0.00135905 -0.00134371 -0.00132598 -0.00130389 -0.00127399 -0.001232 -0.00117438 -0.00109893 -0.00100438 -0.000889909 -0.000754918 -0.000598892 -0.000421364 -0.000221886 -1.4797E-08 0.000232922 0.000464682 -0.00147755 -0.0014692 -0.00146084 -0.00145246 -0.00144403 -0.00143556 -0.00142702 -0.00141841 -0.00140971 -0.00140092 -0.00139202 -0.001383 -0.00137384 -0.00136454 -0.00135506 -0.0013454 -0.00133552 -0.00132539 -0.00131496 -0.00130417 -0.00129294 -0.00128115 -0.00126862 -0.00125502 -0.00123973 -0.00122145 -0.0011975 -0.00116362 -0.00111535 -0.00104951 -0.000964247 -0.000858489 -0.000731491 -0.000582659 -0.000411466 -0.000217414 -1.20089E-08 0.000229489 0.00045875 -0.00136914 -0.00136122 -0.00135329 -0.00134535 -0.00133739 -0.00132938 -0.00132133 -0.00131322 -0.00130504 -0.00129678 -0.00128843 -0.00127998 -0.00127142 -0.00126273 -0.00125391 -0.00124492 -0.00123575 -0.00122638 -0.00121676 -0.00120685 -0.00119659 -0.00118588 -0.00117459 -0.0011625 -0.0011492 -0.00113387 -0.00111468 -0.00108807 -0.00104911 -0.000993415 -0.000918273 -0.000822162 -0.000704134 -0.000563485 -0.000399618 -0.000211973 -1.00646E-08 0.000225181 0.000451221 -0.00125777 -0.00125029 -0.00124282 -0.00123534 -0.00122784 -0.00122032 -0.00121277 -0.00120517 -0.00119751 -0.00118979 -0.001182 -0.00117412 -0.00116616 -0.00115809 -0.0011499 -0.00114158 -0.00113312 -0.00112448 -0.00111565 -0.00110659 -0.00109724 -0.00108754 -0.00107739 -0.00106664 -0.00105501 -0.00104199 -0.00102644 -0.00100582 -0.000975558 -0.000930281 -0.000866009 -0.000780496 -0.00067247 -0.000541071 -0.000385607 -0.000205453 -8.71213E-09 0.000219891 0.000441899 -0.0011439 -0.00113688 -0.00112988 -0.00112287 -0.00111587 -0.00110884 -0.00110179 -0.00109471 -0.00108759 -0.00108042 -0.00107319 -0.00106589 -0.00105852 -0.00105107 -0.00104352 -0.00103587 -0.0010281 -0.00102019 -0.00101212 -0.00100387 -0.000995395 -0.000986647 -0.000977554 -0.000968005 -0.000957823 -0.000946678 -0.00093388 -0.000917833 -0.000895042 -0.000859927 -0.000807073 -0.000733081 -0.000636126 -0.000515109 -0.000369215 -0.000197737 -7.77382E-09 0.000213507 0.000430572 -0.00102812 -0.00102159 -0.00101507 -0.00100856 -0.00100205 -0.000995538 -0.000989011 -0.000982463 -0.000975884 -0.000969269 -0.000962609 -0.000955898 -0.000949128 -0.000942292 -0.000935382 -0.000928388 -0.0009213 -0.000914104 -0.000906785 -0.000899321 -0.000891684 -0.000883838 -0.000875731 -0.000867284 -0.000858377 -0.0008488 -0.000838139 -0.000825458 -0.000808494 -0.000782541 -0.000741236 -0.00067956 -0.000594746 -0.000485296 -0.000350219 -0.000188703 -7.12479E-09 0.000205907 0.000417017 -0.000911185 -0.00090515 -0.000899139 -0.000893144 -0.000887158 -0.000881172 -0.000875182 -0.000869178 -0.000863155 -0.000857106 -0.000851024 -0.000844905 -0.00083874 -0.000832525 -0.000826252 -0.000819915 -0.000813505 -0.000807012 -0.000800425 -0.000793726 -0.000786898 -0.000779911 -0.00077273 -0.0007653 -0.00075754 -0.000749314 -0.000740371 -0.00073018 -0.000717437 -0.000698918 -0.000668561 -0.000619697 -0.000548026 -0.000451352 -0.000328402 -0.000178231 -6.67729E-09 0.000196968 0.000401001 -0.000794035 -0.000788527 -0.000783045 -0.000777584 -0.000772136 -0.000766696 -0.000761257 -0.000755812 -0.000750357 -0.000744885 -0.000739391 -0.00073387 -0.000728317 -0.000722726 -0.000717093 -0.000711411 -0.000705675 -0.000699876 -0.000694007 -0.000688056 -0.000682008 -0.000675845 -0.000669541 -0.000663058 -0.000656342 -0.000649305 -0.000641796 -0.000633512 -0.000623748 -0.000610644 -0.00058966 -0.000553486 -0.000495762 -0.000413043 -0.000303572 -0.000166207 -6.36985E-09 0.000186565 0.000382289 -0.000677847 -0.00067289 -0.00066796 -0.000663054 -0.000658164 -0.000653286 -0.000648414 -0.000643544 -0.000638669 -0.000633786 -0.000628889 -0.000623975 -0.000619039 -0.000614077 -0.000609084 -0.000604057 -0.000598991 -0.00059388 -0.000588718 -0.000583497 -0.000578208 -0.000572836 -0.000567366 -0.000561771 -0.000556015 -0.000550045 -0.000543766 -0.000537007 -0.000529396 -0.000519969 -0.000506027 -0.000481378 -0.000437942 -0.000370226 -0.000275576 -0.000152532 -6.15946E-09 0.000174581 0.00036065 -0.000564075 -0.000559692 -0.000555337 -0.000551005 -0.000546692 -0.000542393 -0.000538105 -0.000533822 -0.00052954 -0.000525256 -0.000520966 -0.000516666 -0.000512353 -0.000508023 -0.000503673 -0.000499299 -0.000494899 -0.000490469 -0.000486004 -0.000481499 -0.000476946 -0.000472339 -0.000467664 -0.000462907 -0.000458043 -0.000453039 -0.00044784 -0.000442348 -0.000436366 -0.000429425 -0.000420174 -0.000404664 -0.000374924 -0.000322929 -0.000244348 -0.000137138 -6.01611E-09 0.00016091 0.000335873 -0.000454517 -0.000450728 -0.000446967 -0.000443228 -0.000439508 -0.000435805 -0.000432113 -0.00042843 -0.000424752 -0.000421077 -0.0004174 -0.00041372 -0.000410033 -0.000406337 -0.000402629 -0.000398907 -0.000395169 -0.000391411 -0.000387631 -0.000383826 -0.000379991 -0.00037612 -0.000372208 -0.000368242 -0.000364211 -0.000360092 -0.000355854 -0.000351444 -0.000346758 -0.000341571 -0.000335276 -0.000325916 -0.000307797 -0.0002715 -0.000209973 -0.000120022 -5.91893E-09 0.00014548 0.000307782 -0.000351402 -0.000348224 -0.000345071 -0.000341938 -0.000338825 -0.000335726 -0.000332641 -0.000329566 -0.000326498 -0.000323435 -0.000320376 -0.000317316 -0.000314255 -0.000311191 -0.000308121 -0.000305044 -0.000301959 -0.000298862 -0.000295754 -0.00029263 -0.00028949 -0.000286329 -0.000283143 -0.000279927 -0.000276673 -0.000273368 -0.000269996 -0.000266526 -0.000262908 -0.000259036 -0.000254648 -0.000248933 -0.000238986 -0.000216912 -0.000172831 -0.000101299 -5.85341E-09 0.000128271 0.000276276 -0.000257474 -0.000254913 -0.000252374 -0.000249852 -0.000247347 -0.000244857 -0.000242378 -0.00023991 -0.00023745 -0.000234997 -0.000232549 -0.000230104 -0.00022766 -0.000225217 -0.000222773 -0.000220327 -0.000217877 -0.000215424 -0.000212964 -0.000210498 -0.000208023 -0.000205539 -0.000203042 -0.000200529 -0.000197997 -0.000195439 -0.000192846 -0.000190203 -0.000187485 -0.000184645 -0.000181573 -0.000177964 -0.000172691 -0.000161354 -0.00013385 -8.13088E-05 -5.80953E-09 0.000109372 0.000241382 -0.000175956 -0.000174003 -0.000172065 -0.000170143 -0.000168234 -0.000166336 -0.00016445 -0.000162573 -0.000160703 -0.000158841 -0.000156984 -0.000155131 -0.000153282 -0.000151435 -0.00014959 -0.000147746 -0.000145902 -0.000144057 -0.000142212 -0.000140364 -0.000138514 -0.00013666 -0.000134802 -0.000132938 -0.000131066 -0.000129182 -0.000127283 -0.000125362 -0.000123407 -0.000121398 -0.000119292 -0.000116979 -0.000114087 -0.000108959 -9.49526E-05 -6.07951E-05 -5.78034E-09 8.90732E-05 0.000203357 -0.000110118 -0.000108732 -0.000107358 -0.000105996 -0.000104643 -0.000103299 -0.000101964 -0.000100636 -9.93143E-05 -9.79988E-05 -9.66883E-05 -9.53822E-05 -9.40799E-05 -9.27809E-05 -9.14845E-05 -9.01904E-05 -8.8898E-05 -8.76072E-05 -8.63175E-05 -8.50286E-05 -8.37401E-05 -8.24517E-05 -8.11629E-05 -7.98731E-05 -7.85814E-05 -7.72865E-05 -7.59866E-05 -7.46789E-05 -7.33587E-05 -7.20179E-05 -7.06404E-05 -6.91882E-05 -6.75475E-05 -6.52363E-05 -5.95611E-05 -4.11166E-05 -5.76111E-09 6.80181E-05 0.000162888 -6.20998E-05 -6.12064E-05 -6.03207E-05 -5.94423E-05 -5.85706E-05 -5.77051E-05 -5.68453E-05 -5.59907E-05 -5.51408E-05 -5.42953E-05 -5.34537E-05 -5.26156E-05 -5.17807E-05 -5.09486E-05 -5.01192E-05 -4.92921E-05 -4.84671E-05 -4.76441E-05 -4.68229E-05 -4.60033E-05 -4.51853E-05 -4.43687E-05 -4.35533E-05 -4.27388E-05 -4.19251E-05 -4.11116E-05 -4.02976E-05 -3.94822E-05 -3.86635E-05 -3.78387E-05 -3.7002E-05 -3.61412E-05 -3.52223E-05 -3.41173E-05 -3.2072E-05 -2.42648E-05 -5.74855E-09 4.74209E-05 0.000121436 -3.1342E-05 -3.08291E-05 -3.03207E-05 -2.98165E-05 -2.93162E-05 -2.88197E-05 -2.83266E-05 -2.78366E-05 -2.73496E-05 -2.68654E-05 -2.63837E-05 -2.59043E-05 -2.54271E-05 -2.49519E-05 -2.44786E-05 -2.4007E-05 -2.35371E-05 -2.30688E-05 -2.2602E-05 -2.21367E-05 -2.16728E-05 -2.12104E-05 -2.07492E-05 -2.02893E-05 -1.98307E-05 -1.9373E-05 -1.89162E-05 -1.84598E-05 -1.80034E-05 -1.75459E-05 -1.70854E-05 -1.66181E-05 -1.61339E-05 -1.55985E-05 -1.48263E-05 -1.21623E-05 -5.74047E-09 2.91629E-05 8.17469E-05 -1.4211E-05 -1.39526E-05 -1.36964E-05 -1.34425E-05 -1.31905E-05 -1.29405E-05 -1.26923E-05 -1.24457E-05 -1.22007E-05 -1.19572E-05 -1.17151E-05 -1.14742E-05 -1.12346E-05 -1.09961E-05 -1.07587E-05 -1.05224E-05 -1.0287E-05 -1.00527E-05 -9.81924E-06 -9.58674E-06 -9.35516E-06 -9.12449E-06 -8.89472E-06 -8.66583E-06 -8.4378E-06 -8.2106E-06 -7.98416E-06 -7.75837E-06 -7.53305E-06 -7.3079E-06 -7.08231E-06 -6.85507E-06 -6.62311E-06 -6.37671E-06 -6.06774E-06 -5.22644E-06 -5.73535E-09 1.53265E-05 4.80414E-05 -5.81525E-06 -5.70179E-06 -5.58935E-06 -5.47786E-06 -5.36729E-06 -5.25757E-06 -5.14865E-06 -5.0405E-06 -4.93306E-06 -4.8263E-06 -4.72017E-06 -4.61465E-06 -4.5097E-06 -4.40529E-06 -4.3014E-06 -4.19801E-06 -4.09511E-06 -3.99269E-06 -3.89073E-06 -3.78924E-06 -3.6882E-06 -3.58762E-06 -3.4875E-06 -3.38784E-06 -3.28862E-06 -3.18984E-06 -3.09148E-06 -2.99352E-06 -2.89589E-06 -2.79849E-06 -2.70113E-06 -2.60343E-06 -2.50443E-06 -2.40116E-06 -2.27985E-06 -2.00683E-06 -5.73216E-09 6.86292E-06 2.42302E-05 -2.14499E-06 -2.10155E-06 -2.05849E-06 -2.01582E-06 -1.97349E-06 -1.9315E-06 -1.88982E-06 -1.84844E-06 -1.80734E-06 -1.7665E-06 -1.72592E-06 -1.68558E-06 -1.64547E-06 -1.60557E-06 -1.56589E-06 -1.5264E-06 -1.48712E-06 -1.44803E-06 -1.40913E-06 -1.37041E-06 -1.33189E-06 -1.29356E-06 -1.25541E-06 -1.21745E-06 -1.17968E-06 -1.1421E-06 -1.10469E-06 -1.06746E-06 -1.03037E-06 -9.9341E-07 -9.56508E-07 -9.19539E-07 -8.82199E-07 -8.43559E-07 -7.99407E-07 -7.09673E-07 -5.73021E-09 2.7122E-06 1.064E-05 -7.15759E-07 -7.01075E-07 -6.86526E-07 -6.72103E-07 -6.57801E-07 -6.43613E-07 -6.29533E-07 -6.15555E-07 -6.01674E-07 -5.87885E-07 -5.74183E-07 -5.60563E-07 -5.47023E-07 -5.33558E-07 -5.20167E-07 -5.06846E-07 -4.93594E-07 -4.8041E-07 -4.67293E-07 -4.54242E-07 -4.41258E-07 -4.28339E-07 -4.15487E-07 -4.02701E-07 -3.89982E-07 -3.77328E-07 -3.64738E-07 -3.52209E-07 -3.39735E-07 -3.27307E-07 -3.14906E-07 -3.02492E-07 -2.89971E-07 -2.77054E-07 -2.62454E-07 -2.34035E-07 -5.72907E-09 9.79055E-07 4.21281E-06 -2.2123E-07 -2.16739E-07 -2.1229E-07 -2.0788E-07 -2.03506E-07 -1.99169E-07 -1.94864E-07 -1.90591E-07 -1.86348E-07 -1.82133E-07 -1.77946E-07 -1.73784E-07 -1.69646E-07 -1.65532E-07 -1.61441E-07 -1.57372E-07 -1.53325E-07 -1.49298E-07 -1.45293E-07 -1.41308E-07 -1.37343E-07 -1.334E-07 -1.29477E-07 -1.25575E-07 -1.21694E-07 -1.17833E-07 -1.13992E-07 -1.1017E-07 -1.06366E-07 -1.02577E-07 -9.87961E-08 -9.5013E-08 -9.11991E-08 -8.72694E-08 -8.28443E-08 -7.4365E-08 -5.72844E-09 3.24477E-07 1.54824E-06 -6.69966E-08 -6.57159E-08 -6.4447E-08 -6.31894E-08 -6.19424E-08 -6.07054E-08 -5.94781E-08 -5.82598E-08 -5.70501E-08 -5.58486E-08 -5.46549E-08 -5.34685E-08 -5.22892E-08 -5.11166E-08 -4.99507E-08 -4.8791E-08 -4.76376E-08 -4.64902E-08 -4.53489E-08 -4.42136E-08 -4.30842E-08 -4.19607E-08 -4.08432E-08 -3.97318E-08 -3.86262E-08 -3.75266E-08 -3.64328E-08 -3.53446E-08 -3.42614E-08 -3.31825E-08 -3.21063E-08 -3.10295E-08 -2.9944E-08 -2.88261E-08 -2.75689E-08 -2.5172E-08 -5.72811E-09 9.70822E-08 5.30397E-07 -2.24334E-08 -2.20837E-08 -2.17373E-08 -2.1394E-08 -2.10535E-08 -2.07159E-08 -2.03808E-08 -2.00483E-08 -1.97181E-08 -1.93901E-08 -1.90643E-08 -1.87405E-08 -1.84186E-08 -1.80986E-08 -1.77804E-08 -1.74639E-08 -1.71491E-08 -1.6836E-08 -1.65246E-08 -1.62148E-08 -1.59066E-08 -1.56001E-08 -1.52952E-08 -1.4992E-08 -1.46904E-08 -1.43904E-08 -1.4092E-08 -1.37951E-08 -1.34997E-08 -1.32054E-08 -1.29118E-08 -1.26181E-08 -1.23221E-08 -1.20173E-08 -1.16746E-08 -1.10223E-08 -5.72798E-09 2.43755E-08 1.67155E-07 *table -0.00252439 -0.0025113 -0.00249768 -0.00248389 -0.00246978 -0.00245533 -0.00244048 -0.00242522 -0.00240948 -0.00239322 -0.00237637 -0.00235885 -0.00234054 -0.00232127 -0.00230075 -0.00227839 -0.00225323 -0.00222389 -0.00218889 -0.00214698 -0.00209724 -0.00203905 -0.00197198 -0.00189574 -0.00181011 -0.0017149 -0.00160999 -0.00149523 -0.00137051 -0.00123572 -0.00109077 -0.00093554 -0.00076994 -0.000593868 -0.000407216 -0.000209872 -1.70513E-06 0.000209345 0.000415466 -0.00246895 -0.00245621 -0.00244297 -0.00242958 -0.0024159 -0.00240189 -0.00238752 -0.00237277 -0.00235758 -0.0023419 -0.00232569 -0.00230885 -0.0022913 -0.0022729 -0.00225342 -0.00223248 -0.00220932 -0.00218274 -0.00215122 -0.00211324 -0.00206763 -0.00201356 -0.00195047 -0.00187798 -0.00179583 -0.00170381 -0.00160174 -0.00148948 -0.00136691 -0.0012339 -0.00109034 -0.000936117 -0.000771124 -0.000595253 -0.000408392 -0.000210424 -1.22247E-06 0.000211071 0.000418413 -0.00241086 -0.00239846 -0.00238561 -0.00237262 -0.00235936 -0.00234579 -0.0023319 -0.00231764 -0.00230299 -0.00228789 -0.0022723 -0.00225613 -0.00223932 -0.00222175 -0.00220324 -0.00218351 -0.00216203 -0.00213785 -0.00210954 -0.00207544 -0.00203408 -0.00198436 -0.00192554 -0.00185713 -0.00177879 -0.00169027 -0.00159137 -0.00148193 -0.0013618 -0.00123084 -0.00108893 -0.000935955 -0.00077179 -0.00059632 -0.000409427 -0.000210988 -8.73442E-07 0.000212572 0.000421074 -0.00234998 -0.00233792 -0.00232546 -0.00231286 -0.00230001 -0.00228688 -0.00227345 -0.0022597 -0.00224557 -0.00223104 -0.00221606 -0.00220055 -0.00218446 -0.00216769 -0.00215008 -0.00213145 -0.0021114 -0.00208924 -0.00206378 -0.00203337 -0.00199627 -0.00195108 -0.00189681 -0.00183281 -0.00175863 -0.00167397 -0.00157859 -0.00147229 -0.00135492 -0.00122632 -0.00108635 -0.00093489 -0.000771801 -0.000596958 -0.000410235 -0.000211502 -6.22297E-07 0.000213858 0.000423436 -0.00228616 -0.00227445 -0.00226237 -0.00225016 -0.00223772 -0.00222503 -0.00221207 -0.0021988 -0.00218519 -0.00217122 -0.00215683 -0.00214198 -0.00212659 -0.00211058 -0.00209385 -0.00207622 -0.00205742 -0.00203696 -0.00201393 -0.00198686 -0.00195393 -0.00191338 -0.00186391 -0.00180464 -0.00173499 -0.00165456 -0.00156306 -0.00146028 -0.00134602 -0.00122011 -0.00108241 -0.000932756 -0.00077102 -0.000597059 -0.000410736 -0.000211912 -4.4229E-07 0.00021493 0.000425474 -0.00221929 -0.00220792 -0.00219621 -0.0021844 -0.00217237 -0.00216012 -0.00214761 -0.00213482 -0.00212173 -0.00210831 -0.00209451 -0.00208029 -0.00206558 -0.00205033 -0.00203442 -0.00201773 -0.00200006 -0.00198105 -0.00196005 -0.0019359 -0.00190685 -0.00187094 -0.00182646 -0.00177223 -0.00170748 -0.00163167 -0.00154447 -0.0014456 -0.00133483 -0.00121199 -0.00107689 -0.000929383 -0.000769307 -0.000596513 -0.000410851 -0.000212168 -3.13675E-07 0.00021578 0.000427155 -0.00214924 -0.00213821 -0.00212689 -0.00211546 -0.00210385 -0.00209202 -0.00207997 -0.00206766 -0.00205508 -0.0020422 -0.00202898 -0.00201537 -0.00200134 -0.00198681 -0.0019717 -0.00195591 -0.00193928 -0.00192154 -0.00190225 -0.00188055 -0.00185496 -0.00182349 -0.00178409 -0.00173518 -0.00167569 -0.00160493 -0.00152245 -0.00142791 -0.00132106 -0.00120168 -0.00106958 -0.000924583 -0.000766513 -0.000595206 -0.000410497 -0.000212225 -2.22019E-07 0.000216392 0.000428437 -0.00207591 -0.00206517 -0.00205428 -0.00204325 -0.00203204 -0.00202065 -0.00200905 -0.00199722 -0.00198514 -0.00197279 -0.00196014 -0.00194714 -0.00193376 -0.00191993 -0.0019056 -0.00189067 -0.00187501 -0.00185842 -0.00184059 -0.00182092 -0.00179829 -0.00177089 -0.00173649 -0.00169309 -0.00163921 -0.00157391 -0.00149661 -0.00140687 -0.00130439 -0.00118892 -0.00106024 -0.000918159 -0.000762476 -0.000593014 -0.000409593 -0.000212033 -1.56846E-07 0.000216744 0.000429269 -0.00199927 -0.00198888 -0.00197837 -0.00196773 -0.00195693 -0.00194597 -0.00193481 -0.00192346 -0.00191188 -0.00190006 -0.00188796 -0.00187556 -0.00186282 -0.00184968 -0.0018361 -0.00182199 -0.00180725 -0.00179173 -0.00177519 -0.00175722 -0.00173702 -0.00171316 -0.00168348 -0.00164562 -0.00159763 -0.00153822 -0.00146656 -0.00138211 -0.00128449 -0.00117341 -0.00104862 -0.000909898 -0.000757027 -0.000589809 -0.000408047 -0.000211547 -1.10599E-07 0.000216807 0.00042959 -0.00191936 -0.00190933 -0.00189919 -0.00188894 -0.00187855 -0.00186802 -0.00185731 -0.00184643 -0.00183535 -0.00182405 -0.0018125 -0.00180068 -0.00178856 -0.0017761 -0.00176324 -0.00174992 -0.00173605 -0.00172152 -0.00170615 -0.00168964 -0.00167145 -0.00165053 -0.00162506 -0.00159257 -0.00155064 -0.00149747 -0.00143192 -0.00135327 -0.00126103 -0.00115486 -0.00103446 -0.000899581 -0.000749986 -0.000585454 -0.000405769 -0.000210715 -7.78441E-08 0.000216543 0.00042933 -0.00183615 -0.00182647 -0.00181672 -0.00180685 -0.00179688 -0.00178677 -0.00177652 -0.0017661 -0.00175551 -0.00174472 -0.00173372 -0.00172248 -0.00171097 -0.00169916 -0.001687 -0.00167445 -0.00166142 -0.00164783 -0.00163353 -0.00161831 -0.0016018 -0.00158327 -0.00156136 -0.00153381 -0.00149789 -0.00145125 -0.00139226 -0.00131993 -0.00123363 -0.00113292 -0.00101746 -0.000886961 -0.000741155 -0.0005798 -0.000402655 -0.000209485 -5.46855E-08 0.000215913 0.000428408 -0.00174962 -0.00174031 -0.00173093 -0.00172147 -0.0017119 -0.00170222 -0.00169242 -0.00168247 -0.00167237 -0.0016621 -0.00165163 -0.00164096 -0.00163005 -0.00161888 -0.0016074 -0.00159558 -0.00158336 -0.00157065 -0.00155736 -0.00154331 -0.00152824 -0.00151167 -0.00149265 -0.00146938 -0.00143919 -0.00139918 -0.00134715 -0.00128167 -0.00120189 -0.00110724 -0.000997309 -0.000871767 -0.000730316 -0.00057268 -0.000398594 -0.0002078 -3.83403E-08 0.000214869 0.000426737 -0.0016598 -0.00165086 -0.00164186 -0.0016328 -0.00162365 -0.0016144 -0.00160505 -0.00159557 -0.00158595 -0.00157619 -0.00156626 -0.00155615 -0.00154583 -0.00153528 -0.00152448 -0.00151337 -0.00150192 -0.00149006 -0.00147771 -0.00146473 -0.00145095 -0.00143602 -0.00141931 -0.00139956 -0.00137448 -0.00134098 -0.00129617 -0.00123803 -0.00116536 -0.00107741 -0.000973655 -0.000853708 -0.00071723 -0.000563913 -0.000393464 -0.000205597 -2.68244E-08 0.000213358 0.000424216 -0.00156675 -0.00155818 -0.00154958 -0.00154091 -0.00153218 -0.00152337 -0.00151447 -0.00150546 -0.00149633 -0.00148708 -0.00147768 -0.00146812 -0.00145839 -0.00144845 -0.0014383 -0.00142789 -0.00141719 -0.00140614 -0.00139467 -0.0013827 -0.00137008 -0.00135657 -0.00134175 -0.00132479 -0.00130398 -0.0012765 -0.00123896 -0.00118859 -0.00112362 -0.00104302 -0.000946129 -0.000832465 -0.000701639 -0.000553303 -0.000387131 -0.000202808 -1.87256E-08 0.00021132 0.000420736 -0.00147057 -0.00146239 -0.00145418 -0.00144592 -0.00143762 -0.00142925 -0.0014208 -0.00141226 -0.00140362 -0.00139488 -0.00138601 -0.001377 -0.00136784 -0.00135852 -0.001349 -0.00133927 -0.00132929 -0.00131902 -0.0013084 -0.00129737 -0.00128581 -0.00127356 -0.00126033 -0.00124558 -0.00122818 -0.00120589 -0.00117531 -0.00113293 -0.00107621 -0.00100364 -0.00091434 -0.000807699 -0.000683262 -0.000540633 -0.000379448 -0.000199357 -1.30409E-08 0.000208688 0.000416171 -0.00137143 -0.00136364 -0.00135583 -0.001348 -0.00134012 -0.00133219 -0.0013242 -0.00131614 -0.001308 -0.00129976 -0.00129142 -0.00128296 -0.00127438 -0.00126565 -0.00125676 -0.00124769 -0.00123841 -0.00122889 -0.00121909 -0.00120894 -0.00119838 -0.00118726 -0.00117541 -0.00116246 -0.0011477 -0.00112958 -0.00110524 -0.00107077 -0.00102271 -0.000958837 -0.000877876 -0.000779049 -0.0006618 -0.000525673 -0.000370257 -0.000195163 -9.05868E-09 0.000205386 0.000410386 -0.00126955 -0.00126216 -0.00125477 -0.00124737 -0.00123993 -0.00123245 -0.00122493 -0.00121735 -0.0012097 -0.00120197 -0.00119416 -0.00118625 -0.00117823 -0.0011701 -0.00116183 -0.00115341 -0.00114481 -0.00113602 -0.001127 -0.0011177 -0.00110806 -0.00109799 -0.00108736 -0.00107593 -0.00106324 -0.00104833 -0.00102913 -0.00100202 -0.000962778 -0.000908173 -0.000836318 -0.00074614 -0.000636937 -0.000508174 -0.000359385 -0.000190136 -6.27508E-09 0.000201333 0.00040323 -0.00116525 -0.00115828 -0.00115132 -0.00114435 -0.00113736 -0.00113035 -0.0011233 -0.0011162 -0.00110905 -0.00110184 -0.00109456 -0.0010872 -0.00107975 -0.0010722 -0.00106454 -0.00105676 -0.00104884 -0.00104075 -0.00103248 -0.00102399 -0.00101523 -0.00100613 -0.000996599 -0.000986476 -0.000975474 -0.000963005 -0.000947754 -0.000926946 -0.000896229 -0.000851283 -0.000789259 -0.000708586 -0.000608341 -0.000487874 -0.00034665 -0.000184182 -4.33381E-09 0.000196438 0.000394537 -0.00105894 -0.00105241 -0.00104589 -0.00103937 -0.00103284 -0.0010263 -0.00101973 -0.00101312 -0.00100648 -0.000999787 -0.000993039 -0.000986227 -0.000979344 -0.000972382 -0.00096533 -0.000958178 -0.000950913 -0.00094352 -0.000935977 -0.000928258 -0.000920328 -0.000912139 -0.00090362 -0.000894663 -0.000885081 -0.000874519 -0.000862198 -0.000846309 -0.000823208 -0.000787925 -0.000736328 -0.000666014 -0.000575679 -0.000464503 -0.00033186 -0.000177199 -2.98334E-09 0.000190606 0.00038413 -0.000951146 -0.000945068 -0.000939006 -0.000932952 -0.000926897 -0.000920834 -0.000914756 -0.000908655 -0.000902524 -0.000896358 -0.000890148 -0.000883889 -0.000877573 -0.000871195 -0.000864746 -0.000858218 -0.000851601 -0.000844882 -0.000838046 -0.000831074 -0.000823939 -0.000816606 -0.000809024 -0.000801119 -0.00079277 -0.000783757 -0.000773631 -0.000761335 -0.000744377 -0.000718125 -0.000677258 -0.00061808 -0.000538624 -0.000437789 -0.000314817 -0.000169081 -2.0464E-09 0.000183731 0.000371818 -0.000842543 -0.000836937 -0.00083135 -0.000825776 -0.000820209 -0.00081464 -0.000809065 -0.000803476 -0.000797867 -0.000792233 -0.000786567 -0.000780864 -0.000775119 -0.000769325 -0.000763477 -0.000757567 -0.000751589 -0.000745533 -0.000739387 -0.000733137 -0.000726764 -0.000720243 -0.000713537 -0.000706597 -0.000699341 -0.000691634 -0.000683214 -0.000673498 -0.000661031 -0.000642399 -0.000611993 -0.000564525 -0.000496882 -0.000407469 -0.000295325 -0.000159719 -1.39828E-09 0.000175706 0.000357399 -0.000733964 -0.000728848 -0.000723755 -0.000718679 -0.000713614 -0.000708555 -0.000703495 -0.000698429 -0.000693351 -0.000688258 -0.000683142 -0.000678001 -0.000672828 -0.00066762 -0.000662371 -0.000657077 -0.000651731 -0.000646326 -0.000640855 -0.000635307 -0.000629669 -0.000623922 -0.000618042 -0.000611994 -0.000605726 -0.000599152 -0.00059212 -0.00058431 -0.000574951 -0.000562008 -0.000540899 -0.000505256 -0.000450227 -0.000373312 -0.000273199 -0.000149007 -9.51384E-10 0.000166421 0.000340665 -0.000626442 -0.000621836 -0.000617256 -0.000612696 -0.00060815 -0.000603614 -0.000599083 -0.000594552 -0.000590016 -0.000585472 -0.000580914 -0.000576339 -0.000571743 -0.000567122 -0.000562473 -0.000557791 -0.000553072 -0.000548311 -0.000543502 -0.000538638 -0.000533709 -0.000528704 -0.000523606 -0.000518392 -0.000513027 -0.000507459 -0.000501597 -0.000495267 -0.000488076 -0.000478978 -0.000465101 -0.000440527 -0.000398579 -0.000335152 -0.000248282 -0.000136847 -6.44335E-10 0.000155764 0.000321408 -0.000521253 -0.00051718 -0.000513132 -0.000509105 -0.000505095 -0.000501098 -0.000497109 -0.000493124 -0.00048914 -0.000485154 -0.00048116 -0.000477158 -0.000473142 -0.000469111 -0.00046506 -0.000460988 -0.000456891 -0.000452765 -0.000448607 -0.000444411 -0.000440171 -0.00043588 -0.000431526 -0.000427095 -0.000422565 -0.000417903 -0.000413058 -0.000407933 -0.000402329 -0.000395751 -0.000386749 -0.000371285 -0.000342145 -0.000292955 -0.000220481 -0.000123166 -4.342E-10 0.000143634 0.000299427 -0.000419986 -0.000416464 -0.000412966 -0.000409489 -0.000406029 -0.000402584 -0.000399149 -0.000395722 -0.000392299 -0.000388878 -0.000385456 -0.000382029 -0.000378597 -0.000375156 -0.000371703 -0.000368238 -0.000364757 -0.000361258 -0.000357738 -0.000354195 -0.000350624 -0.00034702 -0.000343377 -0.000339685 -0.000335931 -0.000332097 -0.000328152 -0.000324044 -0.000319673 -0.000314811 -0.000308819 -0.000299646 -0.000281725 -0.000246943 -0.000189823 -0.000107936 -2.91021E-10 0.000129951 0.000274546 -0.000324622 -0.000321667 -0.000318733 -0.000315819 -0.000312921 -0.000310038 -0.000307167 -0.000304304 -0.000301449 -0.000298598 -0.000295749 -0.0002929 -0.00029005 -0.000287197 -0.000284339 -0.000281474 -0.000278601 -0.000275718 -0.000272823 -0.000269915 -0.000266991 -0.000264049 -0.000261083 -0.00025809 -0.000255061 -0.000251985 -0.000248847 -0.00024562 -0.000242252 -0.000238643 -0.000234526 -0.000229062 -0.000219291 -0.000197864 -0.000156582 -9.12288E-05 -1.93946E-10 0.000114676 0.00024664 -0.000237638 -0.000235256 -0.000232894 -0.000230548 -0.000228217 -0.000225899 -0.000223593 -0.000221295 -0.000219006 -0.000216723 -0.000214444 -0.000212168 -0.000209893 -0.000207619 -0.000205344 -0.000203067 -0.000200787 -0.000198503 -0.000196214 -0.000193919 -0.000191616 -0.000189304 -0.00018698 -0.000184643 -0.000182288 -0.000179909 -0.000177498 -0.000175041 -0.000172515 -0.000169875 -0.000167015 -0.000163627 -0.00015857 -0.000147529 -0.000121509 -7.33103E-05 -1.28495E-10 9.78563E-05 0.000215685 -0.000162012 -0.000160197 -0.000158396 -0.000156609 -0.000154835 -0.000153072 -0.000151318 -0.000149573 -0.000147835 -0.000146104 -0.000144377 -0.000142655 -0.000140936 -0.000139219 -0.000137504 -0.00013579 -0.000134076 -0.000132362 -0.000130647 -0.00012893 -0.000127211 -0.000125489 -0.000123762 -0.000122031 -0.000120292 -0.000118543 -0.00011678 -0.000114998 -0.000113184 -0.000111322 -0.000109369 -0.00010722 -0.00010451 -9.95995E-05 -8.62668E-05 -5.48149E-05 -8.46489E-11 7.97138E-05 0.000181847 -0.000100868 -9.95851E-05 -9.83131E-05 -9.70511E-05 -9.57983E-05 -9.4554E-05 -9.33173E-05 -9.20874E-05 -9.08636E-05 -8.96453E-05 -8.84316E-05 -8.7222E-05 -8.6016E-05 -8.4813E-05 -8.36125E-05 -8.24142E-05 -8.12177E-05 -8.00226E-05 -7.88286E-05 -7.76355E-05 -7.6443E-05 -7.52507E-05 -7.40581E-05 -7.28648E-05 -7.16699E-05 -7.04723E-05 -6.92705E-05 -6.80618E-05 -6.68421E-05 -6.5604E-05 -6.43327E-05 -6.2993E-05 -6.14774E-05 -5.93222E-05 -5.39654E-05 -3.69717E-05 -5.549E-11 6.07957E-05 0.000145666 -5.63667E-05 -5.55459E-05 -5.47322E-05 -5.39251E-05 -5.31242E-05 -5.2329E-05 -5.15389E-05 -5.07537E-05 -4.99728E-05 -4.9196E-05 -4.84227E-05 -4.76527E-05 -4.68856E-05 -4.61212E-05 -4.53592E-05 -4.45994E-05 -4.38417E-05 -4.30858E-05 -4.23316E-05 -4.1579E-05 -4.08279E-05 -4.00782E-05 -3.93296E-05 -3.85821E-05 -3.78354E-05 -3.7089E-05 -3.63423E-05 -3.55945E-05 -3.48441E-05 -3.40883E-05 -3.33222E-05 -3.25347E-05 -3.16947E-05 -3.0684E-05 -2.87983E-05 -2.1657E-05 -3.6263E-11 4.21988E-05 0.000108393 -2.80778E-05 -2.76127E-05 -2.71517E-05 -2.66946E-05 -2.6241E-05 -2.57908E-05 -2.53436E-05 -2.48994E-05 -2.44578E-05 -2.40187E-05 -2.3582E-05 -2.31473E-05 -2.27147E-05 -2.22838E-05 -2.18547E-05 -2.14272E-05 -2.10013E-05 -2.05768E-05 -2.01538E-05 -1.97321E-05 -1.93117E-05 -1.88927E-05 -1.84749E-05 -1.80583E-05 -1.76428E-05 -1.72284E-05 -1.68147E-05 -1.64016E-05 -1.59886E-05 -1.55747E-05 -1.51583E-05 -1.47361E-05 -1.42991E-05 -1.38165E-05 -1.31199E-05 -1.07176E-05 -2.37128E-11 2.5698E-05 7.25181E-05 -1.25246E-05 -1.22946E-05 -1.20666E-05 -1.18405E-05 -1.16162E-05 -1.13936E-05 -1.11727E-05 -1.09532E-05 -1.07351E-05 -1.05183E-05 -1.03027E-05 -1.00883E-05 -9.87503E-06 -9.66274E-06 -9.45144E-06 -9.24106E-06 -9.03159E-06 -8.823E-06 -8.61525E-06 -8.40835E-06 -8.20228E-06 -7.99703E-06 -7.7926E-06 -7.58897E-06 -7.38613E-06 -7.18404E-06 -6.98266E-06 -6.78188E-06 -6.58157E-06 -6.38145E-06 -6.18101E-06 -5.97919E-06 -5.77333E-06 -5.55487E-06 -5.28101E-06 -4.53286E-06 -1.56275E-11 1.32903E-05 4.20392E-05 -5.01887E-06 -4.92023E-06 -4.82247E-06 -4.72554E-06 -4.62941E-06 -4.53401E-06 -4.43932E-06 -4.34529E-06 -4.25187E-06 -4.15905E-06 -4.06678E-06 -3.97503E-06 -3.88378E-06 -3.79301E-06 -3.70269E-06 -3.61281E-06 -3.52335E-06 -3.43431E-06 -3.34568E-06 -3.25745E-06 -3.16963E-06 -3.08221E-06 -2.99518E-06 -2.90856E-06 -2.82234E-06 -2.7365E-06 -2.65103E-06 -2.56592E-06 -2.4811E-06 -2.3965E-06 -2.31195E-06 -2.22712E-06 -2.14119E-06 -2.0516E-06 -1.94625E-06 -1.70704E-06 -1.05032E-11 5.83725E-06 2.07501E-05 -1.79554E-06 -1.75894E-06 -1.72268E-06 -1.68672E-06 -1.65107E-06 -1.61569E-06 -1.58058E-06 -1.54572E-06 -1.51109E-06 -1.47669E-06 -1.4425E-06 -1.40852E-06 -1.37472E-06 -1.34111E-06 -1.30768E-06 -1.27442E-06 -1.24132E-06 -1.20839E-06 -1.17562E-06 -1.14301E-06 -1.11056E-06 -1.07827E-06 -1.04614E-06 -1.01417E-06 -9.8236E-07 -9.50706E-07 -9.19205E-07 -8.87849E-07 -8.56623E-07 -8.25502E-07 -7.94435E-07 -7.63316E-07 -7.31889E-07 -6.99366E-07 -6.62126E-07 -5.85362E-07 -7.31114E-12 2.2612E-06 8.88921E-06 -5.72E-07 -5.60146E-07 -5.48399E-07 -5.36756E-07 -5.25209E-07 -5.13754E-07 -5.02387E-07 -4.91102E-07 -4.79895E-07 -4.68763E-07 -4.577E-07 -4.46705E-07 -4.35773E-07 -4.24902E-07 -4.14091E-07 -4.03337E-07 -3.92639E-07 -3.81995E-07 -3.71406E-07 -3.6087E-07 -3.50388E-07 -3.3996E-07 -3.29586E-07 -3.19265E-07 -3.08998E-07 -2.98785E-07 -2.88623E-07 -2.78511E-07 -2.68445E-07 -2.58416E-07 -2.48409E-07 -2.38393E-07 -2.2829E-07 -2.17865E-07 -2.06048E-07 -1.82641E-07 -5.36898E-12 7.9668E-07 3.43496E-06 -1.64693E-07 -1.61256E-07 -1.57851E-07 -1.54475E-07 -1.51129E-07 -1.47809E-07 -1.44514E-07 -1.41244E-07 -1.37997E-07 -1.34771E-07 -1.31566E-07 -1.28381E-07 -1.25214E-07 -1.22066E-07 -1.18935E-07 -1.15821E-07 -1.12724E-07 -1.09642E-07 -1.06577E-07 -1.03528E-07 -1.00494E-07 -9.74764E-08 -9.44747E-08 -9.14889E-08 -8.8519E-08 -8.5565E-08 -8.26263E-08 -7.97025E-08 -7.67922E-08 -7.38934E-08 -7.10015E-08 -6.81078E-08 -6.51904E-08 -6.21832E-08 -5.87862E-08 -5.21503E-08 -4.228E-12 2.56223E-07 1.2273E-06 -4.40664E-08 -4.31442E-08 -4.22306E-08 -4.1325E-08 -4.04271E-08 -3.95365E-08 -3.86528E-08 -3.77756E-08 -3.69046E-08 -3.60395E-08 -3.518E-08 -3.43258E-08 -3.34767E-08 -3.26325E-08 -3.1793E-08 -3.09581E-08 -3.01276E-08 -2.93016E-08 -2.84799E-08 -2.76625E-08 -2.68494E-08 -2.60407E-08 -2.52362E-08 -2.44361E-08 -2.36403E-08 -2.28488E-08 -2.20615E-08 -2.12782E-08 -2.04986E-08 -1.97221E-08 -1.89476E-08 -1.81727E-08 -1.73915E-08 -1.65866E-08 -1.56784E-08 -1.39119E-08 -3.59252E-12 7.54052E-08 4.04961E-07 -1.12629E-08 -1.1027E-08 -1.07932E-08 -1.05616E-08 -1.03319E-08 -1.0104E-08 -9.87796E-09 -9.65357E-09 -9.43078E-09 -9.20949E-09 -8.98964E-09 -8.77116E-09 -8.55399E-09 -8.33808E-09 -8.12338E-09 -7.90986E-09 -7.69749E-09 -7.48625E-09 -7.27614E-09 -7.06713E-09 -6.85923E-09 -6.65244E-09 -6.44676E-09 -6.2422E-09 -6.03875E-09 -5.8364E-09 -5.63513E-09 -5.43489E-09 -5.23561E-09 -5.03714E-09 -4.83917E-09 -4.64111E-09 -4.44148E-09 -4.23579E-09 -4.00379E-09 -3.55311E-09 -3.26902E-12 2.06529E-08 1.2282E-07 -2.80621E-09 -2.74745E-09 -2.68923E-09 -2.63152E-09 -2.57431E-09 -2.51756E-09 -2.46126E-09 -2.40537E-09 -2.34988E-09 -2.29477E-09 -2.24001E-09 -2.1856E-09 -2.13152E-09 -2.07775E-09 -2.02428E-09 -1.97111E-09 -1.91822E-09 -1.86562E-09 -1.8133E-09 -1.76125E-09 -1.70948E-09 -1.65799E-09 -1.60678E-09 -1.55584E-09 -1.50518E-09 -1.4548E-09 -1.40469E-09 -1.35484E-09 -1.30522E-09 -1.25581E-09 -1.20652E-09 -1.15721E-09 -1.10752E-09 -1.05631E-09 -9.98566E-10 -8.86431E-10 -3.13233E-12 5.3879E-09 3.46111E-08 *table -0.00233258 -0.00232046 -0.00230786 -0.00229511 -0.00228208 -0.00226874 -0.00225506 -0.002241 -0.00222653 -0.00221159 -0.00219614 -0.00218009 -0.00216336 -0.00214578 -0.0021271 -0.00210681 -0.002084 -0.00205742 -0.00202566 -0.0019875 -0.00194206 -0.00188874 -0.00182714 -0.00175696 -0.00167801 -0.00159012 -0.00149315 -0.00138699 -0.00127152 -0.00114666 -0.00101231 -0.000868375 -0.000714765 -0.00055139 -0.000378157 -0.000194965 -1.70167E-06 0.000194256 0.000385643 -0.00227538 -0.00226359 -0.00225138 -0.00223902 -0.00222641 -0.0022135 -0.00220029 -0.00218672 -0.00217278 -0.00215841 -0.00214357 -0.00212818 -0.00211218 -0.00209543 -0.00207774 -0.00205877 -0.00203785 -0.0020139 -0.00198547 -0.00195113 -0.00190974 -0.00186048 -0.00180282 -0.00173639 -0.00166094 -0.00157628 -0.00148224 -0.0013787 -0.00126552 -0.00114262 -0.00100987 -0.000867184 -0.000714462 -0.000551606 -0.000378517 -0.000195092 -1.22001E-06 0.000195554 0.000387768 -0.00221568 -0.00220424 -0.00219241 -0.00218044 -0.00216824 -0.00215577 -0.00214301 -0.00212993 -0.00211651 -0.0021027 -0.00208845 -0.00207371 -0.00205841 -0.00204244 -0.00202567 -0.00200784 -0.0019885 -0.0019668 -0.00194142 -0.00191081 -0.00187355 -0.00182855 -0.00177511 -0.00171274 -0.00164111 -0.00155999 -0.00146919 -0.00136857 -0.00125797 -0.00113729 -0.00100641 -0.000865212 -0.000713602 -0.00055147 -0.000378711 -0.000195216 -8.71702E-07 0.00019661 0.000389573 -0.00215338 -0.00214228 -0.00213082 -0.00211924 -0.00210744 -0.0020954 -0.0020831 -0.00207051 -0.00205759 -0.00204433 -0.00203067 -0.00201656 -0.00200194 -0.00198673 -0.00197081 -0.00195401 -0.00193599 -0.00191616 -0.00189346 -0.00186635 -0.0018332 -0.00179263 -0.00174366 -0.00168565 -0.00161818 -0.00154094 -0.00145372 -0.00135633 -0.00124863 -0.00113047 -0.00100173 -0.000862301 -0.000712052 -0.000550875 -0.000378654 -0.000195276 -6.2107E-07 0.000197436 0.000391045 -0.00208835 -0.00207759 -0.00206651 -0.00205532 -0.00204392 -0.00203231 -0.00202045 -0.00200833 -0.00199592 -0.00198319 -0.00197011 -0.00195661 -0.00194267 -0.00192819 -0.00191308 -0.00189722 -0.00188036 -0.00186209 -0.00184163 -0.00181766 -0.00178847 -0.00175239 -0.00170812 -0.00165478 -0.0015918 -0.0015188 -0.00143551 -0.00134172 -0.00123725 -0.00112194 -0.000995669 -0.00085829 -0.000709679 -0.000549713 -0.000378268 -0.000195219 -4.41428E-07 0.000198032 0.000392162 -0.00202051 -0.00201009 -0.00199938 -0.00198857 -0.00197757 -0.00196638 -0.00195497 -0.00194332 -0.00193141 -0.00191921 -0.00190668 -0.00189379 -0.00188049 -0.00186672 -0.0018524 -0.00183742 -0.0018216 -0.00180466 -0.00178605 -0.00176476 -0.00173922 -0.00170756 -0.00166813 -0.00161974 -0.0015616 -0.00149322 -0.00141425 -0.00132444 -0.00122357 -0.00111148 -0.00098801 -0.000853012 -0.000706347 -0.000547879 -0.000377474 -0.000194997 -3.13072E-07 0.000198392 0.000392893 -0.00194976 -0.00193968 -0.00192934 -0.00191891 -0.00190832 -0.00189755 -0.00188658 -0.00187539 -0.00186397 -0.00185229 -0.00184031 -0.00182801 -0.00181535 -0.00180226 -0.00178869 -0.00177455 -0.00175969 -0.00174392 -0.00172685 -0.00170777 -0.00168541 -0.00165794 -0.00162338 -0.00158016 -0.00152721 -0.00146384 -0.0013896 -0.00130417 -0.00120732 -0.00109884 -0.000978546 -0.000846289 -0.000701911 -0.000545261 -0.000376194 -0.000194563 -2.21597E-07 0.000198501 0.000393199 -0.00187604 -0.00186624 -0.00185633 -0.00184628 -0.00183609 -0.00182574 -0.00181521 -0.00180448 -0.00179354 -0.00178237 -0.00177094 -0.00175922 -0.00174717 -0.00173475 -0.00172191 -0.00170856 -0.0016946 -0.00167988 -0.00166414 -0.00164688 -0.00162718 -0.00160345 -0.00157362 -0.00153571 -0.00148824 -0.00143027 -0.00136119 -0.0012806 -0.00118819 -0.00108374 -0.00096705 -0.000837932 -0.000696217 -0.000541743 -0.000374347 -0.000193872 -1.56553E-07 0.000198338 0.00039303 -0.00179935 -0.0017899 -0.00178036 -0.00177069 -0.0017609 -0.00175096 -0.00174087 -0.0017306 -0.00172014 -0.00170947 -0.00169858 -0.00168742 -0.00167598 -0.00166421 -0.00165206 -0.00163948 -0.00162638 -0.00161263 -0.00159805 -0.00158231 -0.00156476 -0.00154421 -0.00151874 -0.0014861 -0.00144435 -0.00139215 -0.00132866 -0.00125336 -0.00116588 -0.00106593 -0.000953283 -0.000827739 -0.000689104 -0.0005372 -0.000371849 -0.000192877 -1.10395E-07 0.000197874 0.00039233 -0.00171977 -0.00171068 -0.00170149 -0.00169221 -0.00168282 -0.0016733 -0.00166364 -0.00165382 -0.00164384 -0.00163367 -0.0016233 -0.0016127 -0.00160185 -0.00159071 -0.00157924 -0.00156739 -0.0015551 -0.00154226 -0.00152874 -0.0015143 -0.00149851 -0.00148055 -0.00145886 -0.00143122 -0.00139525 -0.00134913 -0.00129167 -0.00122214 -0.00114007 -0.00104512 -0.000937006 -0.000815506 -0.000680406 -0.000531506 -0.000368612 -0.000191533 -7.77023E-08 0.000197077 0.00039103 -0.00163731 -0.00162857 -0.00161976 -0.00161086 -0.00160186 -0.00159276 -0.00158353 -0.00157417 -0.00156466 -0.00155498 -0.00154513 -0.00153508 -0.0015248 -0.00151428 -0.00150347 -0.00149233 -0.00148081 -0.00146883 -0.00145628 -0.00144299 -0.00142868 -0.00141279 -0.00139421 -0.00137103 -0.00134071 -0.00130086 -0.00124982 -0.00118656 -0.00111042 -0.00102099 -0.00091794 -0.000801001 -0.000669934 -0.000524518 -0.00036454 -0.000189788 -5.4587E-08 0.000195907 0.000389055 -0.00155201 -0.00154362 -0.00153518 -0.00152666 -0.00151807 -0.00150938 -0.00150059 -0.00149168 -0.00148264 -0.00147345 -0.00146411 -0.0014546 -0.00144489 -0.00143496 -0.00142479 -0.00141434 -0.00140356 -0.00139239 -0.00138075 -0.00136851 -0.00135547 -0.00134127 -0.00132517 -0.00130573 -0.00128061 -0.00124704 -0.00120274 -0.00114621 -0.00107655 -0.000993212 -0.000895789 -0.00078397 -0.000657483 -0.000516081 -0.000359527 -0.000187589 -3.82718E-08 0.000194322 0.000386324 -0.00146392 -0.0014559 -0.00144783 -0.0014397 -0.00143151 -0.00142324 -0.00141488 -0.00140642 -0.00139785 -0.00138915 -0.00138032 -0.00137134 -0.00136219 -0.00135285 -0.0013433 -0.00133351 -0.00132345 -0.00131306 -0.00130227 -0.001291 -0.00127909 -0.00126631 -0.00125217 -0.00123571 -0.00121507 -0.00118749 -0.00115007 -0.0011007 -0.00103807 -0.000961415 -0.000870231 -0.00076414 -0.000642831 -0.000506025 -0.000353458 -0.000184876 -2.67765E-08 0.00019227 0.000382743 -0.00137317 -0.00136551 -0.00135783 -0.00135009 -0.00134231 -0.00133446 -0.00132653 -0.00131852 -0.00131042 -0.00130221 -0.00129388 -0.00128543 -0.00127683 -0.00126807 -0.00125913 -0.00124998 -0.00124061 -0.00123096 -0.00122098 -0.00121061 -0.00119973 -0.00118818 -0.00117564 -0.00116151 -0.00114449 -0.00112223 -0.00109157 -0.00104966 -0.000994575 -0.000925223 -0.000840925 -0.000741218 -0.000625737 -0.000494164 -0.000346208 -0.000181585 -1.8692E-08 0.000189694 0.000378208 -0.00127991 -0.00127263 -0.00126532 -0.00125799 -0.00125062 -0.00124319 -0.00123571 -0.00122815 -0.00122051 -0.00121279 -0.00120496 -0.00119703 -0.00118897 -0.00118078 -0.00117244 -0.00116393 -0.00115522 -0.00114628 -0.00113708 -0.00112755 -0.00111762 -0.00110717 -0.00109599 -0.00108369 -0.00106945 -0.00105159 -0.00102718 -0.00099278 -0.000945685 -0.000884244 -0.000807512 -0.000714891 -0.000605942 -0.000480301 -0.00033764 -0.000177646 -1.3017E-08 0.000186533 0.000372603 -0.00118435 -0.00117746 -0.00117055 -0.00116362 -0.00115666 -0.00114967 -0.00114262 -0.00113552 -0.00112836 -0.00112112 -0.0011138 -0.00110638 -0.00109887 -0.00109124 -0.00108348 -0.00107558 -0.00106753 -0.00105928 -0.00105081 -0.00104209 -0.00103304 -0.00102359 -0.00101358 -0.00100278 -0.000990688 -0.000976208 -0.000957111 -0.000929914 -0.000891061 -0.000838096 -0.000769622 -0.000684829 -0.00058317 -0.00046422 -0.000327607 -0.000172983 -9.04148E-09 0.000182717 0.0003658 -0.0010868 -0.00108029 -0.00107379 -0.00106728 -0.00106074 -0.00105418 -0.00104759 -0.00104095 -0.00103425 -0.0010275 -0.00102068 -0.00101378 -0.00100681 -0.000999733 -0.000992556 -0.000985262 -0.000977836 -0.000970259 -0.000962505 -0.000954542 -0.000946324 -0.00093779 -0.000928841 -0.000919315 -0.000908905 -0.000896961 -0.000882017 -0.000861186 -0.000830482 -0.000786426 -0.000726887 -0.000650693 -0.000557133 -0.000445694 -0.00031595 -0.000167513 -6.26241E-09 0.000178169 0.000357661 -0.000987605 -0.000981511 -0.000975424 -0.000969334 -0.000963235 -0.000957117 -0.000950974 -0.000944798 -0.000938583 -0.00093232 -0.000926003 -0.000919626 -0.000913181 -0.000906661 -0.000900056 -0.000893356 -0.00088655 -0.000879623 -0.000872555 -0.000865321 -0.000857889 -0.000850212 -0.000842221 -0.00083381 -0.000824785 -0.000814765 -0.000802882 -0.000787162 -0.000763969 -0.000728974 -0.000678964 -0.000612146 -0.000527533 -0.000424485 -0.000302503 -0.000161148 -4.3242E-09 0.000172806 0.000348033 -0.000887257 -0.000881586 -0.000875927 -0.000870273 -0.000864617 -0.000858952 -0.00085327 -0.000847566 -0.000841832 -0.000836063 -0.000830253 -0.000824395 -0.000818483 -0.000812512 -0.000806474 -0.00080036 -0.000794163 -0.00078787 -0.000781466 -0.000774934 -0.000768249 -0.000761377 -0.000754271 -0.000746856 -0.000739013 -0.000730512 -0.000720864 -0.000708902 -0.000691974 -0.000665674 -0.000625576 -0.000568869 -0.000494077 -0.00040035 -0.00028709 -0.000153795 -2.97579E-09 0.000166539 0.000336753 -0.000786344 -0.000781111 -0.000775896 -0.000770691 -0.00076549 -0.000760287 -0.000755076 -0.00074985 -0.000744605 -0.000739335 -0.000734034 -0.000728697 -0.000723319 -0.000717896 -0.00071242 -0.000706887 -0.000701288 -0.000695616 -0.000689859 -0.000684004 -0.000678034 -0.000671923 -0.00066564 -0.000659133 -0.000652326 -0.00064508 -0.000637119 -0.000627809 -0.000615554 -0.000596846 -0.000566605 -0.000520602 -0.000456488 -0.000373051 -0.000269535 -0.000145359 -2.04023E-09 0.000159273 0.000323645 -0.000685601 -0.000680824 -0.000676067 -0.000671325 -0.000666593 -0.000661864 -0.000657133 -0.000652395 -0.000647646 -0.00064288 -0.000638093 -0.00063328 -0.000628438 -0.000623561 -0.000618646 -0.000613687 -0.00060868 -0.000603617 -0.000598491 -0.000593293 -0.000588009 -0.000582623 -0.000577112 -0.000571443 -0.000565564 -0.000559392 -0.00055277 -0.000545361 -0.000536322 -0.000523458 -0.000502253 -0.000467205 -0.00041454 -0.000342366 -0.000249666 -0.000135741 -1.39302E-09 0.000150911 0.000308528 -0.000585934 -0.000581631 -0.000577349 -0.000573086 -0.000568835 -0.000564592 -0.000560353 -0.000556112 -0.000551867 -0.000547612 -0.000543344 -0.000539059 -0.000534754 -0.000530425 -0.000526068 -0.000521681 -0.000517258 -0.000512795 -0.000508287 -0.000503727 -0.000499106 -0.000494413 -0.000489632 -0.000484741 -0.000479708 -0.000474481 -0.000468971 -0.000462998 -0.000456142 -0.000447263 -0.000433343 -0.000408804 -0.000368113 -0.000308125 -0.000227332 -0.00012485 -9.46731E-10 0.000141351 0.000291214 -0.000488461 -0.000484649 -0.00048086 -0.00047709 -0.000473335 -0.000469591 -0.000465854 -0.000462121 -0.000458388 -0.000454651 -0.000450908 -0.000447155 -0.000443389 -0.000439608 -0.000435809 -0.000431989 -0.000428145 -0.000424273 -0.000420371 -0.000416433 -0.000412454 -0.000408425 -0.000404338 -0.000400178 -0.000395924 -0.000391545 -0.000386991 -0.000382164 -0.000376859 -0.000370544 -0.000361652 -0.000346071 -0.000317307 -0.000270252 -0.000202425 -0.000112611 -6.40079E-10 0.0001305 0.000271519 -0.000394567 -0.000391264 -0.000387984 -0.000384722 -0.000381477 -0.000378244 -0.00037502 -0.000371803 -0.00036859 -0.000365378 -0.000362164 -0.000358946 -0.000355722 -0.000352489 -0.000349245 -0.000345989 -0.000342717 -0.000339429 -0.00033612 -0.000332789 -0.000329432 -0.000326044 -0.000322618 -0.000319146 -0.000315616 -0.000312009 -0.000308296 -0.000304427 -0.0003003 -0.000295677 -0.000289871 -0.000280695 -0.000262695 -0.000228875 -0.000174932 -9.89806E-05 -4.30202E-10 0.000118275 0.000249275 -0.000305991 -0.000303212 -0.000300453 -0.000297712 -0.000294987 -0.000292275 -0.000289573 -0.000286879 -0.000284192 -0.000281508 -0.000278826 -0.000276145 -0.000273461 -0.000270774 -0.000268082 -0.000265383 -0.000262677 -0.000259961 -0.000257233 -0.000254493 -0.000251738 -0.000248965 -0.00024617 -0.000243348 -0.000240493 -0.000237594 -0.000234634 -0.000231589 -0.000228409 -0.000224988 -0.00022105 -0.000215691 -0.000205824 -0.000184547 -0.000145036 -8.39968E-05 -2.8719E-10 0.000104625 0.000224348 -0.000224924 -0.000222677 -0.000220447 -0.000218233 -0.000216033 -0.000213845 -0.000211668 -0.000209499 -0.000207337 -0.000205181 -0.000203028 -0.000200879 -0.00019873 -0.000196581 -0.000194432 -0.00019228 -0.000190126 -0.000187967 -0.000185804 -0.000183634 -0.000181457 -0.000179272 -0.000177075 -0.000174865 -0.000172638 -0.000170388 -0.000168108 -0.000165784 -0.000163393 -0.000160891 -0.000158168 -0.000154902 -0.000149869 -0.000138709 -0.000113321 -6.78566E-05 -1.90222E-10 8.95689E-05 0.000196681 -0.000154058 -0.000152338 -0.000150632 -0.000148939 -0.000147257 -0.000145586 -0.000143924 -0.000142269 -0.000140622 -0.00013898 -0.000137343 -0.00013571 -0.00013408 -0.000132452 -0.000130825 -0.000129199 -0.000127573 -0.000125947 -0.00012432 -0.000122691 -0.000121059 -0.000119425 -0.000117787 -0.000116144 -0.000114493 -0.000112834 -0.00011116 -0.000109468 -0.000107746 -0.000105976 -0.000104117 -0.00010206 -9.94203E-05 -9.44695E-05 -8.11588E-05 -5.10756E-05 -1.2484E-10 7.32653E-05 0.000166371 -9.63328E-05 -9.51119E-05 -9.39014E-05 -9.27004E-05 -9.15081E-05 -9.03237E-05 -8.91466E-05 -8.79758E-05 -8.68108E-05 -8.56509E-05 -8.44954E-05 -8.33437E-05 -8.21954E-05 -8.10498E-05 -7.99066E-05 -7.87654E-05 -7.76259E-05 -7.64876E-05 -7.53504E-05 -7.42139E-05 -7.30779E-05 -7.19421E-05 -7.0806E-05 -6.96691E-05 -6.85307E-05 -6.73896E-05 -6.62444E-05 -6.50926E-05 -6.39302E-05 -6.275E-05 -6.15373E-05 -6.02568E-05 -5.87977E-05 -5.66725E-05 -5.1258E-05 -3.47144E-05 -8.10352E-11 5.61575E-05 0.000133825 -5.39721E-05 -5.31885E-05 -5.24116E-05 -5.1641E-05 -5.08763E-05 -5.0117E-05 -4.93626E-05 -4.86128E-05 -4.78671E-05 -4.71251E-05 -4.63866E-05 -4.56512E-05 -4.49186E-05 -4.41885E-05 -4.34606E-05 -4.27349E-05 -4.2011E-05 -4.12889E-05 -4.05684E-05 -3.98495E-05 -3.91319E-05 -3.84156E-05 -3.77004E-05 -3.69862E-05 -3.62727E-05 -3.55596E-05 -3.48461E-05 -3.41316E-05 -3.34145E-05 -3.26922E-05 -3.196E-05 -3.12067E-05 -3.04013E-05 -2.94225E-05 -2.75416E-05 -2.0484E-05 -5.18994E-11 3.91899E-05 0.000100071 -2.68785E-05 -2.6434E-05 -2.59935E-05 -2.55566E-05 -2.51231E-05 -2.46927E-05 -2.42654E-05 -2.38408E-05 -2.34187E-05 -2.2999E-05 -2.25815E-05 -2.2166E-05 -2.17524E-05 -2.13406E-05 -2.09303E-05 -2.05217E-05 -2.01145E-05 -1.97086E-05 -1.93042E-05 -1.8901E-05 -1.84991E-05 -1.80985E-05 -1.7699E-05 -1.73007E-05 -1.69035E-05 -1.65072E-05 -1.61117E-05 -1.57167E-05 -1.53218E-05 -1.49261E-05 -1.4528E-05 -1.41242E-05 -1.3706E-05 -1.32425E-05 -1.2563E-05 -1.01831E-05 -3.26807E-11 2.39733E-05 6.7268E-05 -1.19576E-05 -1.17381E-05 -1.15206E-05 -1.13048E-05 -1.10908E-05 -1.08784E-05 -1.06675E-05 -1.04581E-05 -1.02499E-05 -1.0043E-05 -9.83733E-06 -9.6327E-06 -9.42912E-06 -9.22651E-06 -9.02483E-06 -8.82404E-06 -8.6241E-06 -8.425E-06 -8.22671E-06 -8.02922E-06 -7.83253E-06 -7.63662E-06 -7.44148E-06 -7.24712E-06 -7.0535E-06 -6.86061E-06 -6.66839E-06 -6.47676E-06 -6.28556E-06 -6.09456E-06 -5.90326E-06 -5.71064E-06 -5.51413E-06 -5.30535E-06 -5.04181E-06 -4.30755E-06 -2.01285E-11 1.24187E-05 3.90727E-05 -4.76961E-06 -4.67586E-06 -4.58295E-06 -4.49083E-06 -4.39945E-06 -4.30878E-06 -4.21877E-06 -4.12939E-06 -4.04059E-06 -3.95236E-06 -3.86465E-06 -3.77743E-06 -3.69069E-06 -3.6044E-06 -3.51854E-06 -3.43309E-06 -3.34805E-06 -3.2634E-06 -3.17914E-06 -3.09526E-06 -3.01177E-06 -2.92866E-06 -2.84593E-06 -2.76358E-06 -2.6816E-06 -2.6E-06 -2.51875E-06 -2.43783E-06 -2.3572E-06 -2.27678E-06 -2.19642E-06 -2.11579E-06 -2.03411E-06 -1.94891E-06 -1.84837E-06 -1.61632E-06 -1.2038E-11 5.44169E-06 1.92185E-05 -1.69126E-06 -1.65678E-06 -1.6226E-06 -1.58872E-06 -1.55512E-06 -1.52178E-06 -1.48869E-06 -1.45584E-06 -1.42321E-06 -1.39079E-06 -1.35857E-06 -1.32654E-06 -1.29469E-06 -1.26301E-06 -1.2315E-06 -1.20015E-06 -1.16896E-06 -1.13792E-06 -1.10704E-06 -1.0763E-06 -1.04572E-06 -1.01528E-06 -9.84997E-07 -9.54864E-07 -9.24882E-07 -8.95048E-07 -8.65358E-07 -8.35806E-07 -8.06378E-07 -7.77049E-07 -7.47773E-07 -7.18449E-07 -6.88836E-07 -6.58182E-07 -6.22998E-07 -5.49467E-07 -6.9112E-12 2.09591E-06 8.16884E-06 -5.29439E-07 -5.18461E-07 -5.07582E-07 -4.96798E-07 -4.86104E-07 -4.75495E-07 -4.64966E-07 -4.54514E-07 -4.44134E-07 -4.33823E-07 -4.23577E-07 -4.13392E-07 -4.03267E-07 -3.93198E-07 -3.83184E-07 -3.73223E-07 -3.63314E-07 -3.53455E-07 -3.43647E-07 -3.33888E-07 -3.24179E-07 -3.1452E-07 -3.04911E-07 -2.95352E-07 -2.85843E-07 -2.76383E-07 -2.66971E-07 -2.57606E-07 -2.48283E-07 -2.38995E-07 -2.29729E-07 -2.20454E-07 -2.11099E-07 -2.01444E-07 -1.90478E-07 -1.68476E-07 -3.71868E-12 7.30721E-07 3.12627E-06 -1.48217E-07 -1.45122E-07 -1.42055E-07 -1.39015E-07 -1.36001E-07 -1.33011E-07 -1.30044E-07 -1.27099E-07 -1.24174E-07 -1.21269E-07 -1.18383E-07 -1.15514E-07 -1.12662E-07 -1.09827E-07 -1.07007E-07 -1.04202E-07 -1.01412E-07 -9.86373E-08 -9.58767E-08 -9.31303E-08 -9.03983E-08 -8.76807E-08 -8.49774E-08 -8.22885E-08 -7.9614E-08 -7.69538E-08 -7.43075E-08 -7.16747E-08 -6.90541E-08 -6.6444E-08 -6.38403E-08 -6.12351E-08 -5.86088E-08 -5.5901E-08 -5.28363E-08 -4.67733E-08 -1.77647E-12 2.30509E-07 1.10252E-06 -3.82252E-08 -3.74247E-08 -3.66315E-08 -3.58453E-08 -3.50658E-08 -3.42926E-08 -3.35254E-08 -3.27639E-08 -3.20077E-08 -3.12566E-08 -3.05104E-08 -2.97689E-08 -2.90317E-08 -2.82988E-08 -2.757E-08 -2.68452E-08 -2.61242E-08 -2.54071E-08 -2.46938E-08 -2.39842E-08 -2.32784E-08 -2.25763E-08 -2.1878E-08 -2.11835E-08 -2.04927E-08 -1.98057E-08 -1.91223E-08 -1.84424E-08 -1.77658E-08 -1.70919E-08 -1.64198E-08 -1.57473E-08 -1.50695E-08 -1.4371E-08 -1.35812E-08 -1.20254E-08 -6.35484E-13 6.58055E-08 3.56049E-07 -9.36577E-09 -9.16937E-09 -8.97479E-09 -8.78194E-09 -8.59072E-09 -8.40106E-09 -8.21287E-09 -8.02608E-09 -7.84062E-09 -7.65641E-09 -7.4734E-09 -7.29152E-09 -7.11075E-09 -6.93101E-09 -6.75229E-09 -6.57456E-09 -6.39778E-09 -6.22195E-09 -6.04705E-09 -5.87308E-09 -5.70003E-09 -5.52791E-09 -5.35672E-09 -5.18646E-09 -5.01713E-09 -4.84872E-09 -4.68122E-09 -4.51458E-09 -4.34874E-09 -4.18358E-09 -4.01886E-09 -3.85407E-09 -3.68798E-09 -3.51682E-09 -3.32338E-09 -2.94281E-09 1.30849E-22 1.73219E-08 1.04473E-07 -2.22947E-09 -2.18269E-09 -2.13634E-09 -2.0904E-09 -2.04485E-09 -1.99967E-09 -1.95485E-09 -1.91036E-09 -1.86618E-09 -1.82231E-09 -1.77872E-09 -1.7354E-09 -1.69234E-09 -1.64954E-09 -1.60697E-09 -1.56464E-09 -1.52255E-09 -1.48067E-09 -1.43902E-09 -1.39759E-09 -1.35638E-09 -1.3154E-09 -1.27463E-09 -1.23409E-09 -1.19377E-09 -1.15367E-09 -1.11378E-09 -1.07411E-09 -1.03462E-09 -9.95299E-10 -9.5608E-10 -9.16847E-10 -8.77305E-10 -8.36559E-10 -7.90513E-10 -6.99954E-10 3.23501E-13 4.31934E-09 2.81945E-08 -5.22434E-10 -5.1146E-10 -5.00588E-10 -4.89812E-10 -4.79129E-10 -4.68532E-10 -4.58018E-10 -4.47582E-10 -4.37221E-10 -4.2693E-10 -4.16706E-10 -4.06547E-10 -3.96448E-10 -3.86408E-10 -3.76425E-10 -3.66498E-10 -3.56624E-10 -3.46803E-10 -3.37035E-10 -3.27318E-10 -3.17654E-10 -3.08041E-10 -2.98481E-10 -2.88973E-10 -2.79517E-10 -2.70113E-10 -2.6076E-10 -2.51455E-10 -2.42196E-10 -2.32975E-10 -2.23778E-10 -2.14578E-10 -2.05305E-10 -1.95751E-10 -1.84954E-10 -1.63722E-10 4.60188E-13 1.04381E-09 7.17501E-09 *table -0.00215364 -0.00214245 -0.00213085 -0.00211912 -0.00210713 -0.00209488 -0.00208232 -0.00206944 -0.0020562 -0.00204256 -0.00202847 -0.00201386 -0.00199866 -0.00198274 -0.00196589 -0.00194767 -0.00192732 -0.00190368 -0.0018754 -0.00184127 -0.00180038 -0.0017521 -0.00169602 -0.00163186 -0.00155941 -0.00147852 -0.00138905 -0.00129089 -0.00118395 -0.00106813 -0.00094335 -0.000809518 -0.000666555 -0.000514378 -0.000352905 -0.000182044 -1.69826E-06 0.000181249 0.000360002 -0.00209544 -0.00208458 -0.00207335 -0.002062 -0.00205041 -0.00203858 -0.00202647 -0.00201406 -0.00200133 -0.00198822 -0.0019747 -0.00196072 -0.0019462 -0.00193105 -0.00191511 -0.00189809 -0.00187943 -0.0018582 -0.00183306 -0.0018026 -0.00176564 -0.00172137 -0.00166921 -0.00160881 -0.0015399 -0.00146229 -0.00137583 -0.0012804 -0.00117589 -0.00106218 -0.000939191 -0.000806825 -0.000664993 -0.000513608 -0.00035258 -0.000181816 -1.21758E-06 0.00018219 0.000361444 -0.00203492 -0.0020244 -0.00201354 -0.00200256 -0.00199137 -0.00197995 -0.00196829 -0.00195634 -0.0019441 -0.00193152 -0.00191857 -0.0019052 -0.00189134 -0.00187692 -0.00186182 -0.00184583 -0.00182858 -0.00180937 -0.00178703 -0.00176009 -0.00172713 -0.00168703 -0.00163905 -0.00158269 -0.00151762 -0.0014436 -0.00136046 -0.00126805 -0.00116624 -0.00105492 -0.000933977 -0.000803319 -0.000662845 -0.00051246 -0.000352068 -0.000181572 -8.69981E-07 0.000182875 0.000362536 -0.00197199 -0.0019618 -0.0019513 -0.0019407 -0.0019299 -0.0019189 -0.00190766 -0.00189618 -0.00188442 -0.00187236 -0.00185996 -0.00184718 -0.00183397 -0.00182025 -0.00180594 -0.00179088 -0.00177482 -0.00175727 -0.00173733 -0.00171363 -0.00168459 -0.00164878 -0.0016052 -0.00155317 -0.00149226 -0.00142216 -0.00134266 -0.00125358 -0.00115478 -0.00104614 -0.000927529 -0.000798845 -0.000659979 -0.000510827 -0.000351287 -0.000181253 -6.19857E-07 0.000183317 0.000363269 -0.00190656 -0.0018967 -0.00188656 -0.00187633 -0.00186592 -0.00185533 -0.00184452 -0.00183349 -0.00182221 -0.00181066 -0.0017988 -0.0017866 -0.00177401 -0.00176098 -0.00174742 -0.00173322 -0.0017182 -0.00170203 -0.00168407 -0.0016632 -0.00163784 -0.00160634 -0.00156733 -0.00151991 -0.00146348 -0.00139764 -0.00132213 -0.00123673 -0.00114128 -0.00103563 -0.000919663 -0.000793246 -0.000656265 -0.000508606 -0.000350157 -0.000180807 -4.40576E-07 0.000183518 0.000363623 -0.00183855 -0.00182902 -0.00181924 -0.00180938 -0.00179936 -0.00178917 -0.00177879 -0.00176821 -0.0017574 -0.00174635 -0.00173502 -0.00172339 -0.00171141 -0.00169903 -0.00168619 -0.0016728 -0.00165873 -0.00164373 -0.00162739 -0.00160888 -0.00158683 -0.00155948 -0.00152515 -0.00148258 -0.00143094 -0.00136972 -0.00129856 -0.00121721 -0.00112547 -0.00102318 -0.000910189 -0.000786361 -0.00065157 -0.000505692 -0.000348604 -0.000180185 -3.12474E-07 0.000183471 0.000363567 -0.00176791 -0.00175866 -0.00174929 -0.0017398 -0.00173017 -0.00172038 -0.00171042 -0.00170029 -0.00168994 -0.00167938 -0.00166857 -0.00165749 -0.0016461 -0.00163437 -0.00162222 -0.0016096 -0.0015964 -0.00158245 -0.00156746 -0.00155086 -0.00153162 -0.0015081 -0.00147838 -0.00144083 -0.0013943 -0.00133806 -0.00127165 -0.00119474 -0.0011071 -0.00100855 -0.000898901 -0.000778018 -0.000645756 -0.000501978 -0.000346552 -0.000179343 -2.2118E-07 0.000183164 0.000363066 -0.0016946 -0.00168568 -0.00167667 -0.00166755 -0.0016583 -0.00164891 -0.00163938 -0.00162968 -0.0016198 -0.00160972 -0.00159942 -0.00158889 -0.00157808 -0.00156696 -0.00155548 -0.00154359 -0.00153121 -0.00151821 -0.00150438 -0.00148936 -0.0014724 -0.0014522 -0.00142685 -0.00139437 -0.00135319 -0.00130229 -0.00124103 -0.00116899 -0.00108588 -0.000991473 -0.000885581 -0.000768034 -0.000638674 -0.000497351 -0.000343921 -0.000178237 -1.56262E-07 0.000182574 0.000362071 -0.00161865 -0.00161008 -0.00160142 -0.00159267 -0.0015838 -0.00157482 -0.0015657 -0.00155644 -0.00154701 -0.00153741 -0.00152762 -0.00151761 -0.00150737 -0.00149685 -0.00148602 -0.00147484 -0.00146323 -0.0014511 -0.00143831 -0.0014246 -0.00140949 -0.00139202 -0.00137057 -0.00134301 -0.00130732 -0.00126208 -0.00120638 -0.00113964 -0.00106151 -0.000971707 -0.000870006 -0.000756218 -0.00063017 -0.000491694 -0.00034063 -0.000176821 -1.10192E-07 0.000181677 0.000360527 -0.00154019 -0.00153196 -0.00152365 -0.00151526 -0.00150678 -0.0014982 -0.0014895 -0.00148067 -0.00147169 -0.00146257 -0.00145327 -0.00144379 -0.00143409 -0.00142416 -0.00141396 -0.00140346 -0.00139259 -0.00138128 -0.00136943 -0.00135685 -0.00134324 -0.00132795 -0.00130977 -0.00128672 -0.0012565 -0.00121715 -0.00116738 -0.0011064 -0.00103372 -0.000948988 -0.000851949 -0.00074238 -0.000620087 -0.000484885 -0.000336598 -0.000175053 -7.75612E-08 0.000180439 0.000358371 -0.00145925 -0.00145136 -0.00144341 -0.00143539 -0.00142729 -0.00141911 -0.00141082 -0.00140242 -0.0013939 -0.00138524 -0.00137643 -0.00136746 -0.00135831 -0.00134895 -0.00133936 -0.0013295 -0.00131934 -0.00130881 -0.00129783 -0.00128627 -0.00127392 -0.00126037 -0.00124479 -0.00122562 -0.00120056 -0.0011672 -0.00112369 -0.00106891 -0.00100217 -0.000923021 -0.00083115 -0.0007263 -0.000608248 -0.000476791 -0.000331732 -0.000172883 -5.44885E-08 0.000178826 0.00035553 -0.0013759 -0.00136835 -0.00136076 -0.00135312 -0.00134541 -0.00133762 -0.00132975 -0.00132178 -0.0013137 -0.00130551 -0.00129719 -0.00128872 -0.0012801 -0.0012713 -0.0012623 -0.00125308 -0.00124359 -0.0012338 -0.00122363 -0.001213 -0.00120175 -0.00118962 -0.00117608 -0.00116004 -0.00113956 -0.00111202 -0.00107499 -0.00102682 -0.000966515 -0.000893487 -0.000807329 -0.000707738 -0.000594459 -0.000467262 -0.000325933 -0.00017026 -3.82029E-08 0.000176795 0.000351929 -0.00129026 -0.00128306 -0.00127583 -0.00126856 -0.00126124 -0.00125386 -0.0012464 -0.00123886 -0.00123123 -0.0012235 -0.00121565 -0.00120769 -0.00119959 -0.00119134 -0.00118292 -0.0011743 -0.00116547 -0.00115638 -0.00114698 -0.00113721 -0.00112695 -0.00111602 -0.0011041 -0.00109049 -0.00107378 -0.00105157 -0.00102101 -0.000979774 -0.000926406 -0.000860053 -0.000780189 -0.00068644 -0.00057851 -0.00045614 -0.00031909 -0.000167128 -2.6728E-08 0.000174299 0.000347478 -0.00120247 -0.00119563 -0.00118877 -0.00118188 -0.00117495 -0.00116796 -0.00116092 -0.00115381 -0.00114663 -0.00113936 -0.00113199 -0.00112452 -0.00111694 -0.00110923 -0.00110137 -0.00109335 -0.00108515 -0.00107674 -0.00106807 -0.0010591 -0.00104974 -0.00103988 -0.00102929 -0.00101755 -0.00100375 -0.000986061 -0.000961631 -0.000927489 -0.00088149 -0.000822374 -0.000749413 -0.000662132 -0.000560178 -0.000443252 -0.000311087 -0.000163426 -1.86575E-08 0.000171285 0.000342079 -0.00111274 -0.00110627 -0.00109978 -0.00109327 -0.00108674 -0.00108016 -0.00107354 -0.00106686 -0.00106012 -0.00105331 -0.00104642 -0.00103944 -0.00103237 -0.00102519 -0.00101788 -0.00101045 -0.00100286 -0.000995099 -0.00098713 -0.000978914 -0.000970393 -0.000961481 -0.000952036 -0.000941791 -0.000930194 -0.000916038 -0.000896984 -0.000869773 -0.000831448 -0.000780105 -0.000714677 -0.000634527 -0.00053922 -0.000428411 -0.000301795 -0.000159087 -1.29921E-08 0.000167692 0.000335623 -0.00102134 -0.00101524 -0.00100913 -0.00100301 -0.000996878 -0.000990714 -0.000984513 -0.00097827 -0.000971976 -0.000965625 -0.000959209 -0.000952721 -0.000946153 -0.000939496 -0.000932741 -0.000925876 -0.000918885 -0.000911752 -0.000904452 -0.000896955 -0.000889217 -0.000881177 -0.000872738 -0.000863733 -0.000853829 -0.000842304 -0.000827553 -0.000806657 -0.000776046 -0.000732922 -0.000675649 -0.000603325 -0.000515386 -0.000411419 -0.000291077 -0.000154042 -9.02311E-09 0.000163456 0.000327992 -0.000928593 -0.000922876 -0.000917163 -0.000911445 -0.000905716 -0.000899969 -0.000894196 -0.00088839 -0.000882545 -0.000876655 -0.000870713 -0.000864713 -0.000858648 -0.000852511 -0.000846294 -0.000839988 -0.000833581 -0.000827059 -0.000820404 -0.000813593 -0.000806594 -0.000799362 -0.000791832 -0.000783893 -0.000775346 -0.000765772 -0.00075421 -0.000738539 -0.000715228 -0.00068056 -0.000632016 -0.000568223 -0.000488411 -0.000392067 -0.000278786 -0.000148212 -6.24849E-09 0.000158506 0.000319053 -0.000834935 -0.000829613 -0.000824301 -0.000818992 -0.000813679 -0.000808356 -0.000803016 -0.000797653 -0.000792261 -0.000786834 -0.000781367 -0.000775855 -0.000770291 -0.00076467 -0.000758985 -0.000753229 -0.000747393 -0.000741466 -0.000735436 -0.000729283 -0.000722985 -0.000716511 -0.000709813 -0.00070282 -0.000695407 -0.000687334 -0.000678062 -0.000666301 -0.000649282 -0.000622903 -0.000583509 -0.000528931 -0.000458031 -0.000370139 -0.00026477 -0.000141517 -4.31329E-09 0.000152765 0.000308667 -0.000740888 -0.000735975 -0.000731077 -0.000726187 -0.000721299 -0.000716408 -0.000711508 -0.000706593 -0.000701659 -0.000696699 -0.000691709 -0.000686685 -0.000681622 -0.000676514 -0.000671356 -0.000666143 -0.000660869 -0.000655524 -0.000650099 -0.000644581 -0.000638953 -0.000633192 -0.000627267 -0.000621129 -0.0006147 -0.000607838 -0.000600249 -0.000591228 -0.000579035 -0.000560125 -0.000529974 -0.000485197 -0.000423995 -0.00034542 -0.00024887 -0.000133872 -2.96691E-09 0.000146149 0.000296681 -0.0006471 -0.00064261 -0.000638139 -0.00063368 -0.000629229 -0.000624779 -0.000620327 -0.000615868 -0.000611396 -0.000606907 -0.000602398 -0.000597863 -0.0005933 -0.000588703 -0.00058407 -0.000579394 -0.000574672 -0.000569898 -0.000565063 -0.000560159 -0.000555173 -0.000550091 -0.00054489 -0.000539537 -0.000533983 -0.000528143 -0.000521855 -0.000514752 -0.0005059 -0.000492944 -0.000471497 -0.000436858 -0.000386081 -0.000317706 -0.00023093 -0.000125188 -2.0327E-09 0.000138573 0.000282936 -0.000554365 -0.000550315 -0.000546284 -0.00054227 -0.000538266 -0.000534268 -0.000530273 -0.000526276 -0.000522274 -0.000518261 -0.000514236 -0.000510193 -0.000506131 -0.000502045 -0.000497932 -0.00049379 -0.000489613 -0.000485398 -0.00048114 -0.000476832 -0.000472466 -0.000468031 -0.000463512 -0.000458888 -0.000454127 -0.000449179 -0.000443952 -0.000438257 -0.000431633 -0.000422822 -0.000408658 -0.00038395 -0.000344149 -0.000286826 -0.000210807 -0.000115382 -1.38639E-09 0.000129946 0.000267266 -0.000463659 -0.000460064 -0.000456489 -0.000452932 -0.000449387 -0.000445853 -0.000442324 -0.000438798 -0.000435271 -0.00043174 -0.000428203 -0.000424655 -0.000421094 -0.000417519 -0.000413925 -0.000410311 -0.000406674 -0.00040301 -0.000399317 -0.000395589 -0.000391821 -0.000388006 -0.000384135 -0.000380193 -0.000376162 -0.00037201 -0.000367685 -0.00036309 -0.000358004 -0.000351838 -0.000342872 -0.00032693 -0.000298224 -0.000252682 -0.000188387 -0.000104379 -9.40698E-10 0.000120182 0.000249505 -0.000376187 -0.000373062 -0.000369958 -0.000366871 -0.000363798 -0.000360737 -0.000357684 -0.000354636 -0.000351592 -0.000348548 -0.000345502 -0.000342451 -0.000339393 -0.000336327 -0.00033325 -0.000330161 -0.000327056 -0.000323935 -0.000320795 -0.000317632 -0.000314444 -0.000311226 -0.000307972 -0.000304672 -0.000301317 -0.000297887 -0.000294354 -0.000290666 -0.000286718 -0.00028225 -0.0002765 -0.000267094 -0.000248697 -0.00021533 -0.000163631 -9.21286E-05 -6.34435E-10 0.000109202 0.000229495 -0.00029346 -0.000290819 -0.000288197 -0.000285591 -0.000283 -0.000280421 -0.000277851 -0.000275289 -0.000272732 -0.000270178 -0.000267626 -0.000265073 -0.000262518 -0.000259959 -0.000257395 -0.000254824 -0.000252245 -0.000249657 -0.000247058 -0.000244446 -0.000241818 -0.000239174 -0.000236508 -0.000233815 -0.00023109 -0.000228322 -0.000225495 -0.000222583 -0.000219536 -0.000216241 -0.000212395 -0.000206987 -0.000196733 -0.00017516 -0.000136649 -7.86418E-05 -4.24813E-10 9.69476E-05 0.000207103 -0.00021739 -0.000215241 -0.00021311 -0.000210992 -0.000208888 -0.000206796 -0.000204713 -0.000202637 -0.000200569 -0.000198505 -0.000196444 -0.000194386 -0.000192329 -0.000190271 -0.000188212 -0.000186151 -0.000184086 -0.000182017 -0.000179944 -0.000177864 -0.000175776 -0.00017368 -0.000171573 -0.000169452 -0.000167315 -0.000165155 -0.000162964 -0.00016073 -0.000158429 -0.000156014 -0.000153368 -0.000150131 -0.000144934 -0.000133272 -0.000107873 -6.40553E-05 -2.81968E-10 8.34149E-05 0.000182251 -0.000150367 -0.000148709 -0.000147065 -0.000145433 -0.000143812 -0.0001422 -0.000140598 -0.000139003 -0.000137414 -0.00013583 -0.000134251 -0.000132675 -0.000131102 -0.000129531 -0.00012796 -0.000126391 -0.000124821 -0.00012325 -0.000121678 -0.000120104 -0.000118528 -0.000116949 -0.000115365 -0.000113777 -0.00011218 -0.000110575 -0.000108955 -0.000107316 -0.000105648 -0.00010393 -0.00010212 -0.000100097 -9.74277E-05 -9.21928E-05 -7.83868E-05 -4.87688E-05 -1.85107E-10 6.87111E-05 0.000154984 -9.51122E-05 -9.39236E-05 -9.27449E-05 -9.15755E-05 -9.04144E-05 -8.9261E-05 -8.81145E-05 -8.69742E-05 -8.58393E-05 -8.47093E-05 -8.35834E-05 -8.24611E-05 -8.13419E-05 -8.02253E-05 -7.91109E-05 -7.79982E-05 -7.6887E-05 -7.57769E-05 -7.46676E-05 -7.35589E-05 -7.24505E-05 -7.1342E-05 -7.02331E-05 -6.91232E-05 -6.80116E-05 -6.68971E-05 -6.57782E-05 -6.46525E-05 -6.35157E-05 -6.23605E-05 -6.11714E-05 -5.99102E-05 -5.84538E-05 -5.62478E-05 -5.04523E-05 -3.36581E-05 -1.19795E-10 5.31771E-05 0.000125592 -5.39109E-05 -5.31389E-05 -5.23736E-05 -5.16145E-05 -5.08611E-05 -5.01129E-05 -4.93696E-05 -4.86307E-05 -4.78959E-05 -4.71647E-05 -4.64368E-05 -4.57118E-05 -4.49896E-05 -4.42698E-05 -4.35521E-05 -4.28364E-05 -4.21225E-05 -4.14102E-05 -4.06995E-05 -3.99901E-05 -3.92821E-05 -3.85752E-05 -3.78693E-05 -3.71643E-05 -3.64598E-05 -3.57555E-05 -3.50508E-05 -3.43448E-05 -3.36361E-05 -3.29219E-05 -3.21971E-05 -3.145E-05 -3.06466E-05 -2.96511E-05 -2.76422E-05 -2.02324E-05 -7.60324E-11 3.75895E-05 9.48828E-05 -2.71054E-05 -2.66624E-05 -2.62233E-05 -2.57878E-05 -2.53556E-05 -2.49267E-05 -2.45006E-05 -2.40773E-05 -2.36565E-05 -2.3238E-05 -2.28217E-05 -2.24074E-05 -2.19949E-05 -2.15841E-05 -2.1175E-05 -2.07673E-05 -2.03611E-05 -1.99562E-05 -1.95526E-05 -1.91503E-05 -1.87493E-05 -1.83494E-05 -1.79507E-05 -1.75531E-05 -1.71565E-05 -1.67608E-05 -1.63659E-05 -1.59714E-05 -1.55768E-05 -1.51814E-05 -1.47834E-05 -1.43793E-05 -1.39598E-05 -1.34914E-05 -1.27831E-05 -1.024E-05 -4.69168E-11 2.33571E-05 6.46453E-05 -1.21437E-05 -1.19226E-05 -1.17034E-05 -1.1486E-05 -1.12704E-05 -1.10563E-05 -1.08438E-05 -1.06328E-05 -1.0423E-05 -1.02145E-05 -1.00072E-05 -9.80096E-06 -9.59576E-06 -9.39154E-06 -9.18824E-06 -8.98583E-06 -8.78427E-06 -8.58354E-06 -8.38361E-06 -8.18448E-06 -7.98614E-06 -7.78858E-06 -7.59179E-06 -7.39576E-06 -7.20047E-06 -7.0059E-06 -6.81199E-06 -6.61866E-06 -6.42575E-06 -6.23301E-06 -6.03993E-06 -5.84544E-06 -5.64684E-06 -5.43519E-06 -5.1643E-06 -4.38403E-06 -2.77009E-11 1.22901E-05 3.81079E-05 -4.87425E-06 -4.77886E-06 -4.68432E-06 -4.59058E-06 -4.4976E-06 -4.40533E-06 -4.31374E-06 -4.22278E-06 -4.13241E-06 -4.04262E-06 -3.95335E-06 -3.86458E-06 -3.7763E-06 -3.68846E-06 -3.60107E-06 -3.51409E-06 -3.42752E-06 -3.34134E-06 -3.25556E-06 -3.17017E-06 -3.08516E-06 -3.00054E-06 -2.91631E-06 -2.83245E-06 -2.74898E-06 -2.66588E-06 -2.58315E-06 -2.50074E-06 -2.41862E-06 -2.33672E-06 -2.25486E-06 -2.17273E-06 -2.08949E-06 -2.00256E-06 -1.89936E-06 -1.65548E-06 -1.51413E-11 5.44416E-06 1.8951E-05 -1.73728E-06 -1.70192E-06 -1.66688E-06 -1.63214E-06 -1.59769E-06 -1.5635E-06 -1.52957E-06 -1.49589E-06 -1.46242E-06 -1.42918E-06 -1.39614E-06 -1.36329E-06 -1.33062E-06 -1.29814E-06 -1.26582E-06 -1.23367E-06 -1.20167E-06 -1.16984E-06 -1.13816E-06 -1.10663E-06 -1.07526E-06 -1.04404E-06 -1.01297E-06 -9.82062E-07 -9.51305E-07 -9.20699E-07 -8.90242E-07 -8.59925E-07 -8.29735E-07 -7.99647E-07 -7.69613E-07 -7.3953E-07 -7.09147E-07 -6.77681E-07 -6.4146E-07 -5.64624E-07 -7.04261E-12 2.10765E-06 8.09237E-06 -5.43544E-07 -5.32278E-07 -5.21115E-07 -5.10049E-07 -4.99074E-07 -4.88187E-07 -4.77383E-07 -4.66656E-07 -4.56004E-07 -4.45421E-07 -4.34905E-07 -4.24453E-07 -4.14061E-07 -4.03727E-07 -3.93449E-07 -3.83225E-07 -3.73054E-07 -3.62935E-07 -3.52867E-07 -3.42851E-07 -3.32885E-07 -3.22971E-07 -3.13107E-07 -3.03295E-07 -2.93534E-07 -2.83824E-07 -2.74163E-07 -2.6455E-07 -2.54981E-07 -2.45448E-07 -2.35937E-07 -2.26418E-07 -2.16817E-07 -2.06906E-07 -1.9563E-07 -1.72767E-07 -1.91255E-12 7.35982E-07 3.09828E-06 -1.50554E-07 -1.47409E-07 -1.44293E-07 -1.41205E-07 -1.38143E-07 -1.35105E-07 -1.3209E-07 -1.29098E-07 -1.26126E-07 -1.23175E-07 -1.20242E-07 -1.17327E-07 -1.1443E-07 -1.11548E-07 -1.08683E-07 -1.05834E-07 -1.02999E-07 -1.00179E-07 -9.73742E-08 -9.45837E-08 -9.18078E-08 -8.90464E-08 -8.62997E-08 -8.35676E-08 -8.08501E-08 -7.81472E-08 -7.54585E-08 -7.27835E-08 -7.01211E-08 -6.74693E-08 -6.48243E-08 -6.21779E-08 -5.95102E-08 -5.67596E-08 -5.36424E-08 -4.74201E-08 1.28053E-12 2.31346E-07 1.09088E-06 -3.80299E-08 -3.7233E-08 -3.64434E-08 -3.56608E-08 -3.48849E-08 -3.41152E-08 -3.33515E-08 -3.25934E-08 -3.18407E-08 -3.1093E-08 -3.03502E-08 -2.96119E-08 -2.88781E-08 -2.81485E-08 -2.7423E-08 -2.67015E-08 -2.59838E-08 -2.527E-08 -2.45599E-08 -2.38535E-08 -2.31509E-08 -2.2452E-08 -2.17569E-08 -2.10656E-08 -2.0378E-08 -1.96941E-08 -1.90139E-08 -1.83372E-08 -1.76638E-08 -1.69931E-08 -1.63242E-08 -1.56551E-08 -1.49806E-08 -1.42856E-08 -1.34988E-08 -1.19357E-08 3.22281E-12 6.52218E-08 3.50269E-07 -9.06026E-09 -8.87007E-09 -8.68164E-09 -8.49488E-09 -8.30971E-09 -8.12604E-09 -7.9438E-09 -7.76291E-09 -7.5833E-09 -7.40491E-09 -7.22769E-09 -7.05156E-09 -6.87649E-09 -6.70244E-09 -6.52937E-09 -6.35725E-09 -6.18607E-09 -6.0158E-09 -5.84643E-09 -5.67796E-09 -5.5104E-09 -5.34373E-09 -5.17796E-09 -5.0131E-09 -4.84914E-09 -4.68607E-09 -4.52389E-09 -4.36255E-09 -4.202E-09 -4.04211E-09 -3.88265E-09 -3.72314E-09 -3.56239E-09 -3.39673E-09 -3.20929E-09 -2.83741E-09 4.3638E-12 1.67918E-08 1.01331E-07 -2.08612E-09 -2.04221E-09 -1.99872E-09 -1.95561E-09 -1.91287E-09 -1.87048E-09 -1.82841E-09 -1.78666E-09 -1.74521E-09 -1.70404E-09 -1.66313E-09 -1.62249E-09 -1.58208E-09 -1.54191E-09 -1.50197E-09 -1.46225E-09 -1.42275E-09 -1.38346E-09 -1.34438E-09 -1.3055E-09 -1.26684E-09 -1.22838E-09 -1.19013E-09 -1.15209E-09 -1.11426E-09 -1.07664E-09 -1.03922E-09 -1.002E-09 -9.64956E-10 -9.28069E-10 -8.91283E-10 -8.54485E-10 -8.17403E-10 -7.7919E-10 -7.35958E-10 -6.5022E-10 4.99929E-12 4.06879E-09 2.67001E-08 -4.68938E-10 -4.58978E-10 -4.49111E-10 -4.39331E-10 -4.29635E-10 -4.20018E-10 -4.10476E-10 -4.01005E-10 -3.91601E-10 -3.82261E-10 -3.72982E-10 -3.63762E-10 -3.54597E-10 -3.45485E-10 -3.36425E-10 -3.27416E-10 -3.18455E-10 -3.09542E-10 -3.00678E-10 -2.9186E-10 -2.8309E-10 -2.74367E-10 -2.65691E-10 -2.57064E-10 -2.48483E-10 -2.3995E-10 -2.31463E-10 -2.23021E-10 -2.1462E-10 -2.06254E-10 -1.97911E-10 -1.89566E-10 -1.81156E-10 -1.7249E-10 -1.62686E-10 -1.43245E-10 5.32279E-12 9.54494E-10 6.58676E-09 -1.01186E-10 -9.89465E-11 -9.67274E-11 -9.4528E-11 -9.23474E-11 -9.01845E-11 -8.80386E-11 -8.59086E-11 -8.37938E-11 -8.16934E-11 -7.96067E-11 -7.75331E-11 -7.5472E-11 -7.34229E-11 -7.13855E-11 -6.93594E-11 -6.73443E-11 -6.534E-11 -6.33464E-11 -6.13636E-11 -5.93913E-11 -5.74297E-11 -5.54789E-11 -5.35387E-11 -5.16092E-11 -4.96903E-11 -4.77819E-11 -4.58835E-11 -4.39944E-11 -4.21132E-11 -4.02371E-11 -3.83605E-11 -3.64694E-11 -3.45207E-11 -3.23163E-11 -2.7945E-11 5.45947E-12 2.22964E-10 1.56455E-09 *table -0.00198878 -0.00197847 -0.0019678 -0.00195701 -0.00194601 -0.00193476 -0.00192326 -0.00191148 -0.00189938 -0.00188694 -0.00187411 -0.00186084 -0.00184707 -0.00183268 -0.00181751 -0.00180123 -0.00178319 -0.00176239 -0.00173753 -0.00170736 -0.00167093 -0.00162757 -0.00157684 -0.00151844 -0.00145215 -0.00137784 -0.00129535 -0.0012046 -0.00110549 -0.000997919 -0.000881819 -0.000757107 -0.000623707 -0.000481545 -0.000330544 -0.000170623 -1.69492E-06 0.000169791 0.000337456 -0.00193013 -0.00192014 -0.00190982 -0.0018994 -0.00188878 -0.00187794 -0.00186686 -0.00185553 -0.0018439 -0.00183197 -0.00181968 -0.00180699 -0.00179385 -0.00178017 -0.00176583 -0.0017506 -0.00173405 -0.00171537 -0.00169339 -0.0016667 -0.00163409 -0.00159467 -0.00154784 -0.0014932 -0.00143049 -0.00135952 -0.00128013 -0.0011922 -0.00109563 -0.00099032 -0.000876178 -0.000753121 -0.000621065 -0.00047993 -0.000329632 -0.00017009 -1.2152E-06 0.000170427 0.000338315 -0.00186934 -0.00185968 -0.00184971 -0.00183965 -0.00182941 -0.00181896 -0.00180831 -0.00179741 -0.00178626 -0.00177481 -0.00176305 -0.00175094 -0.00173841 -0.0017254 -0.00171183 -0.00169752 -0.00168219 -0.00166528 -0.0016458 -0.00162238 -0.00159358 -0.00155823 -0.00151553 -0.00146492 -0.00140607 -0.00133874 -0.00126273 -0.00117792 -0.00108417 -0.000981385 -0.000869458 -0.000748296 -0.000617812 -0.000477914 -0.000328518 -0.000169533 -8.68293E-07 0.000170797 0.000338802 -0.00180634 -0.001797 -0.00178738 -0.00177768 -0.00176781 -0.00175776 -0.00174751 -0.00173705 -0.00172636 -0.0017154 -0.00170416 -0.00169259 -0.00168066 -0.00166831 -0.00165546 -0.00164199 -0.00162771 -0.00161223 -0.00159483 -0.00157433 -0.0015492 -0.00151798 -0.00147959 -0.00143328 -0.0013786 -0.00131521 -0.00124291 -0.00116151 -0.00107089 -0.000970917 -0.000861481 -0.000742481 -0.000613818 -0.000475395 -0.000327117 -0.000168891 -6.18663E-07 0.000170913 0.000338907 -0.00174106 -0.00173203 -0.00172276 -0.00171341 -0.00170392 -0.00169426 -0.00168442 -0.00167439 -0.00166415 -0.00165367 -0.00164293 -0.00163191 -0.00162056 -0.00160883 -0.00159667 -0.00158398 -0.00157062 -0.00155634 -0.00154064 -0.00152261 -0.00150084 -0.00147369 -0.00143973 -0.00139797 -0.00134774 -0.00128863 -0.00122036 -0.00114273 -0.00105555 -0.00095871 -0.000852071 -0.000735523 -0.000608957 -0.000472269 -0.000325355 -0.000168113 -4.39732E-07 0.000170778 0.000338613 -0.00167344 -0.00166473 -0.00165581 -0.00164682 -0.00163769 -0.00162842 -0.00161898 -0.00160938 -0.00159958 -0.00158957 -0.00157933 -0.00156884 -0.00155805 -0.00154694 -0.00153544 -0.00152348 -0.00151097 -0.00149772 -0.0014834 -0.00146739 -0.00144853 -0.0014252 -0.0013957 -0.00135866 -0.00131319 -0.00125869 -0.00119481 -0.00112129 -0.00103792 -0.00094455 -0.000841041 -0.000727264 -0.000603101 -0.000468435 -0.000323156 -0.000167152 -3.11879E-07 0.000170387 0.000337892 -0.00160345 -0.00159502 -0.00158649 -0.00157785 -0.00156909 -0.00156021 -0.00155117 -0.00154199 -0.00153263 -0.00152309 -0.00151334 -0.00150336 -0.00149312 -0.00148259 -0.00147173 -0.00146048 -0.00144875 -0.00143642 -0.00142327 -0.00140888 -0.00139242 -0.0013725 -0.00134729 -0.00131509 -0.00127461 -0.00122507 -0.00116595 -0.00109691 -0.00101773 -0.000928212 -0.000828195 -0.000717539 -0.000596113 -0.00046379 -0.000320448 -0.000165965 -2.20759E-07 0.000169727 0.000336708 -0.00153109 -0.00152298 -0.00151479 -0.00150651 -0.00149812 -0.00148961 -0.00148098 -0.00147221 -0.00146329 -0.0014542 -0.00144493 -0.00143546 -0.00142576 -0.00141581 -0.00140557 -0.00139498 -0.00138399 -0.00137251 -0.00136037 -0.00134731 -0.00133276 -0.00131569 -0.00129443 -0.00126699 -0.00123171 -0.00118743 -0.00113344 -0.00106931 -0.000994718 -0.000909451 -0.000813322 -0.000706171 -0.000587851 -0.000458223 -0.000317153 -0.000164507 -1.55964E-07 0.000168779 0.000335016 -0.00145642 -0.00144864 -0.00144079 -0.00143285 -0.00142483 -0.00141671 -0.00140848 -0.00140012 -0.00139163 -0.001383 -0.0013742 -0.00136523 -0.00135605 -0.00134666 -0.00133701 -0.00132707 -0.00131678 -0.00130608 -0.00129486 -0.00128292 -0.00126991 -0.00125512 -0.00123723 -0.00121428 -0.00118423 -0.00114547 -0.00109699 -0.00103817 -0.000968604 -0.000888025 -0.000796211 -0.00069298 -0.000578169 -0.000451622 -0.000313193 -0.000162737 -1.09981E-07 0.000167516 0.000332763 -0.00137958 -0.00137212 -0.00136461 -0.00135703 -0.00134938 -0.00134164 -0.0013338 -0.00132586 -0.0013178 -0.00130961 -0.00130128 -0.00129279 -0.00128413 -0.00127528 -0.00126621 -0.00125689 -0.00124727 -0.00123731 -0.00122692 -0.00121597 -0.00120422 -0.00119122 -0.00117605 -0.00115707 -0.00113207 -0.00109897 -0.00105632 -0.00100322 -0.000939129 -0.000863693 -0.000776649 -0.000677786 -0.000566918 -0.000443874 -0.000308491 -0.000160611 -7.74094E-08 0.000165908 0.000329887 -0.00130063 -0.00129351 -0.00128634 -0.00127912 -0.00127184 -0.00126448 -0.00125703 -0.0012495 -0.00124186 -0.00123412 -0.00122624 -0.00121824 -0.00121008 -0.00120176 -0.00119325 -0.00118453 -0.00117556 -0.0011663 -0.00115668 -0.00114662 -0.00113595 -0.00112438 -0.00111133 -0.0010956 -0.00107519 -0.00104771 -0.00101113 -0.000964143 -0.000905985 -0.000836176 -0.000754391 -0.000660379 -0.000553929 -0.000434849 -0.000302959 -0.000158085 -5.43783E-08 0.000163923 0.00032632 -0.0012197 -0.00121291 -0.00120609 -0.00119923 -0.00119231 -0.00118533 -0.00117828 -0.00117116 -0.00116394 -0.00115664 -0.00114922 -0.00114169 -0.00113403 -0.00112623 -0.00111827 -0.00111012 -0.00110177 -0.00109318 -0.00108429 -0.00107504 -0.00106533 -0.00105495 -0.00104355 -0.00103034 -0.00101381 -0.000991591 -0.000961158 -0.000920627 -0.000868857 -0.000805181 -0.000729176 -0.000640537 -0.000539019 -0.000424407 -0.0002965 -0.000155107 -3.81213E-08 0.000161519 0.000321991 -0.00113692 -0.00113047 -0.001124 -0.0011175 -0.00111095 -0.00110435 -0.0010977 -0.00109098 -0.00108419 -0.00107732 -0.00107036 -0.0010633 -0.00105612 -0.00104883 -0.00104141 -0.00103383 -0.00102607 -0.00101812 -0.00100992 -0.00100143 -0.000992579 -0.000983228 -0.000973151 -0.000961873 -0.000948382 -0.000930745 -0.00090626 -0.000872388 -0.000827429 -0.0007704 -0.000700725 -0.000618019 -0.000521992 -0.000412397 -0.000289013 -0.000151625 -2.66663E-08 0.000158653 0.000316813 -0.00105249 -0.00104638 -0.00104026 -0.00103412 -0.00102795 -0.00102174 -0.00101548 -0.00100917 -0.00100281 -0.000996367 -0.000989854 -0.000983257 -0.000976569 -0.000969779 -0.000962876 -0.000955845 -0.00094867 -0.000941329 -0.000933792 -0.000926021 -0.000917959 -0.000909519 -0.000900553 -0.000890773 -0.000879563 -0.000865594 -0.000846474 -0.000819225 -0.000781405 -0.000731525 -0.000668749 -0.000592572 -0.000502636 -0.000398658 -0.000280385 -0.000147581 -1.86093E-08 0.000155272 0.000310696 -0.000966635 -0.000960881 -0.000955122 -0.00094935 -0.000943557 -0.000937736 -0.000931879 -0.00092598 -0.000920032 -0.000914028 -0.000907963 -0.000901828 -0.000895617 -0.000889322 -0.000882933 -0.000876439 -0.000869827 -0.000863079 -0.000856174 -0.00084908 -0.000841758 -0.000834146 -0.000826146 -0.00081758 -0.000808086 -0.000796857 -0.000782155 -0.000761098 -0.000730548 -0.000688258 -0.000632956 -0.000563931 -0.00048073 -0.000383014 -0.000270496 -0.000142913 -1.29533E-08 0.000151322 0.000303535 -0.000879671 -0.000874278 -0.000868887 -0.00086349 -0.000858081 -0.000852653 -0.000847198 -0.000841712 -0.000836187 -0.000830618 -0.000824999 -0.000819324 -0.000813587 -0.000807782 -0.000801899 -0.000795932 -0.000789868 -0.000783696 -0.000777397 -0.00077095 -0.000764324 -0.000757476 -0.000750339 -0.0007428 -0.000734648 -0.000725418 -0.000714039 -0.00069827 -0.000674753 -0.000640344 -0.000593057 -0.000531827 -0.000456042 -0.000365283 -0.000259219 -0.000137554 -8.99066E-09 0.000146741 0.000295218 -0.000791976 -0.000786954 -0.000781939 -0.000776926 -0.000771907 -0.000766877 -0.00076183 -0.000756759 -0.00075166 -0.000746527 -0.000741355 -0.000736138 -0.000730872 -0.000725551 -0.000720169 -0.000714719 -0.000709192 -0.000703579 -0.000697867 -0.000692038 -0.000686072 -0.000679937 -0.000673586 -0.000666949 -0.000659895 -0.000652163 -0.000643155 -0.000631445 -0.000614185 -0.000587634 -0.0005488 -0.000495997 -0.000428334 -0.000345273 -0.000246418 -0.000131432 -6.22036E-09 0.000141461 0.000285622 -0.000704018 -0.000699377 -0.00069475 -0.000690128 -0.000685508 -0.000680883 -0.000676248 -0.000671597 -0.000666927 -0.000662232 -0.000657507 -0.000652749 -0.000647952 -0.000643112 -0.000638225 -0.000633284 -0.000628284 -0.000623217 -0.000618073 -0.000612841 -0.000607503 -0.000602038 -0.000596416 -0.000590587 -0.000584472 -0.000577922 -0.000570615 -0.000561762 -0.000549462 -0.0005302 -0.00050001 -0.000456202 -0.000397378 -0.000322792 -0.000231953 -0.000124472 -4.28808E-09 0.000135412 0.000274617 -0.000616368 -0.000612122 -0.000607892 -0.000603673 -0.00059946 -0.000595247 -0.000591031 -0.000586806 -0.000582568 -0.000578314 -0.000574038 -0.000569738 -0.00056541 -0.000561049 -0.000556653 -0.000552216 -0.000547733 -0.0005432 -0.000538609 -0.000533952 -0.000529217 -0.000524388 -0.000519445 -0.000514355 -0.00050907 -0.0005035 -0.000497473 -0.000490582 -0.000481781 -0.000468548 -0.000446695 -0.000412268 -0.000362965 -0.000297651 -0.000215683 -0.000116597 -2.94367E-09 0.000128517 0.000262062 -0.000529725 -0.000525887 -0.000522067 -0.000518261 -0.000514464 -0.000510672 -0.000506882 -0.000503088 -0.000499289 -0.000495478 -0.000491655 -0.000487814 -0.000483954 -0.000480071 -0.000476161 -0.000472222 -0.00046825 -0.000464241 -0.00046019 -0.00045609 -0.000451935 -0.000447712 -0.000443409 -0.000439004 -0.000434465 -0.000429742 -0.000424738 -0.000419249 -0.000412757 -0.000403853 -0.000389241 -0.00036417 -0.000324945 -0.000269688 -0.000197474 -0.000107729 -2.01077E-09 0.000120696 0.000247811 -0.000444939 -0.000441523 -0.000438126 -0.000434744 -0.000431374 -0.000428012 -0.000424656 -0.0004213 -0.000417944 -0.000414582 -0.000411213 -0.000407834 -0.000404442 -0.000401034 -0.000397609 -0.000394163 -0.000390695 -0.000387201 -0.000383677 -0.00038012 -0.000376524 -0.000372882 -0.000369185 -0.00036542 -0.000361566 -0.000357594 -0.00035345 -0.000349029 -0.000344088 -0.00033796 -0.000328732 -0.0003122 -0.000283292 -0.00023879 -0.000177216 -9.77973E-05 -1.36534E-09 0.00011187 0.000231714 -0.000363058 -0.000360077 -0.000357115 -0.000354169 -0.000351236 -0.000348314 -0.000345399 -0.000342488 -0.00033958 -0.000336671 -0.000333759 -0.000330843 -0.000327919 -0.000324986 -0.000322043 -0.000319086 -0.000316115 -0.000313127 -0.00031012 -0.000307091 -0.000304036 -0.000300952 -0.000297832 -0.000294669 -0.000291449 -0.000288156 -0.00028476 -0.000281206 -0.000277382 -0.000272995 -0.000267173 -0.000257313 -0.000238251 -0.000204964 -0.000154847 -8.67483E-05 -9.20221E-10 0.000101965 0.000213628 -0.000285386 -0.000282853 -0.000280338 -0.000277839 -0.000275352 -0.000272877 -0.00027041 -0.00026795 -0.000265494 -0.000263041 -0.000260589 -0.000258135 -0.000255679 -0.000253219 -0.000250753 -0.00024828 -0.000245799 -0.000243308 -0.000240806 -0.000238291 -0.00023576 -0.000233212 -0.000230643 -0.000228047 -0.000225419 -0.000222747 -0.000220016 -0.000217199 -0.000214242 -0.000211021 -0.000207188 -0.000201578 -0.00019067 -0.000168466 -0.000130425 -7.45723E-05 -6.1434E-10 9.09217E-05 0.000193423 -0.000213579 -0.000211502 -0.000209442 -0.000207395 -0.000205361 -0.000203337 -0.000201323 -0.000199315 -0.000197314 -0.000195317 -0.000193322 -0.000191329 -0.000189337 -0.000187344 -0.000185349 -0.000183352 -0.000181351 -0.000179345 -0.000177334 -0.000175316 -0.000173291 -0.000171257 -0.000169211 -0.000167151 -0.000165074 -0.000162974 -0.000160843 -0.000158667 -0.000156422 -0.000154055 -0.000151436 -0.000148142 -0.000142593 -0.000130105 -0.000104252 -6.13572E-05 -4.04969E-10 7.87189E-05 0.000171012 -0.000149727 -0.000148107 -0.000146501 -0.000144907 -0.000143323 -0.000141748 -0.000140182 -0.000138622 -0.000137069 -0.000135521 -0.000133976 -0.000132435 -0.000130896 -0.000129358 -0.000127821 -0.000126284 -0.000124746 -0.000123208 -0.000121668 -0.000120126 -0.000118581 -0.000117032 -0.000115479 -0.00011392 -0.000112353 -0.000110776 -0.000109185 -0.000107573 -0.00010593 -0.000104234 -0.000102437 -0.000100401 -9.76063E-05 -9.18486E-05 -7.71498E-05 -4.73983E-05 -2.62288E-10 6.54218E-05 0.000146398 -9.63022E-05 -9.51245E-05 -9.39566E-05 -9.27978E-05 -9.16472E-05 -9.0504E-05 -8.93676E-05 -8.82371E-05 -8.71119E-05 -8.59912E-05 -8.48746E-05 -8.37613E-05 -8.26509E-05 -8.15428E-05 -8.04366E-05 -7.9332E-05 -7.82286E-05 -7.7126E-05 -7.60241E-05 -7.49224E-05 -7.38207E-05 -7.27187E-05 -7.1616E-05 -7.05119E-05 -6.94056E-05 -6.82961E-05 -6.71817E-05 -6.60597E-05 -6.49256E-05 -6.37714E-05 -6.25798E-05 -6.13072E-05 -5.98072E-05 -5.7409E-05 -5.09333E-05 -3.33891E-05 -1.65537E-10 5.12796E-05 0.000119776 -5.5609E-05 -5.48304E-05 -5.40584E-05 -5.32926E-05 -5.25325E-05 -5.17777E-05 -5.10277E-05 -5.0282E-05 -4.95404E-05 -4.88024E-05 -4.80676E-05 -4.73357E-05 -4.66064E-05 -4.58794E-05 -4.51545E-05 -4.44315E-05 -4.37101E-05 -4.29903E-05 -4.22718E-05 -4.15546E-05 -4.08386E-05 -4.01236E-05 -3.94094E-05 -3.86959E-05 -3.79828E-05 -3.72696E-05 -3.65558E-05 -3.58403E-05 -3.51215E-05 -3.43965E-05 -3.36596E-05 -3.28974E-05 -3.20703E-05 -3.1014E-05 -2.87399E-05 -2.0614E-05 -1.00295E-10 3.69042E-05 9.17535E-05 -2.84508E-05 -2.7995E-05 -2.75431E-05 -2.70949E-05 -2.66501E-05 -2.62086E-05 -2.57701E-05 -2.53344E-05 -2.49012E-05 -2.44704E-05 -2.40417E-05 -2.36151E-05 -2.31903E-05 -2.27672E-05 -2.23458E-05 -2.19258E-05 -2.15072E-05 -2.109E-05 -2.0674E-05 -2.02593E-05 -1.98458E-05 -1.94335E-05 -1.90223E-05 -1.86121E-05 -1.8203E-05 -1.77946E-05 -1.73869E-05 -1.69796E-05 -1.6572E-05 -1.61633E-05 -1.57516E-05 -1.5333E-05 -1.48966E-05 -1.44029E-05 -1.36213E-05 -1.07371E-05 -5.65724E-11 2.34819E-05 6.37519E-05 -1.29336E-05 -1.27015E-05 -1.24713E-05 -1.22431E-05 -1.20167E-05 -1.17919E-05 -1.15688E-05 -1.13471E-05 -1.11268E-05 -1.09079E-05 -1.06901E-05 -1.04735E-05 -1.02579E-05 -1.00434E-05 -9.82977E-06 -9.61709E-06 -9.40528E-06 -9.19432E-06 -8.98419E-06 -8.77487E-06 -8.56635E-06 -8.35864E-06 -8.15171E-06 -7.94555E-06 -7.74015E-06 -7.53548E-06 -7.33147E-06 -7.12802E-06 -6.92499E-06 -6.72207E-06 -6.5187E-06 -6.3137E-06 -6.10402E-06 -5.87937E-06 -5.5856E-06 -4.70036E-06 -2.74701E-11 1.26891E-05 3.85136E-05 -5.26432E-06 -5.16215E-06 -5.06089E-06 -4.96049E-06 -4.86089E-06 -4.76205E-06 -4.66394E-06 -4.5665E-06 -4.46969E-06 -4.37348E-06 -4.27784E-06 -4.18274E-06 -4.08813E-06 -3.99401E-06 -3.90036E-06 -3.80714E-06 -3.71436E-06 -3.622E-06 -3.53005E-06 -3.43851E-06 -3.34738E-06 -3.25666E-06 -3.16634E-06 -3.07643E-06 -2.98692E-06 -2.8978E-06 -2.80906E-06 -2.72068E-06 -2.63259E-06 -2.54471E-06 -2.45688E-06 -2.36872E-06 -2.27932E-06 -2.18576E-06 -2.07365E-06 -1.80022E-06 -8.24887E-12 5.74559E-06 1.95967E-05 -1.90505E-06 -1.86643E-06 -1.82816E-06 -1.79021E-06 -1.75258E-06 -1.71524E-06 -1.67817E-06 -1.64137E-06 -1.60481E-06 -1.56849E-06 -1.53239E-06 -1.4965E-06 -1.46081E-06 -1.42531E-06 -1.39E-06 -1.35486E-06 -1.3199E-06 -1.28511E-06 -1.25049E-06 -1.21603E-06 -1.18174E-06 -1.14762E-06 -1.11366E-06 -1.07987E-06 -1.04625E-06 -1.01279E-06 -9.79494E-07 -9.46349E-07 -9.13342E-07 -8.80445E-07 -8.47605E-07 -8.14709E-07 -7.81478E-07 -7.47036E-07 -7.07236E-07 -6.21316E-07 4.32393E-12 2.25509E-06 8.49386E-06 -6.03538E-07 -5.91047E-07 -5.78669E-07 -5.66399E-07 -5.5423E-07 -5.42158E-07 -5.30177E-07 -5.18282E-07 -5.06469E-07 -4.94733E-07 -4.83071E-07 -4.71479E-07 -4.59954E-07 -4.48492E-07 -4.37093E-07 -4.25753E-07 -4.14472E-07 -4.03248E-07 -3.92081E-07 -3.8097E-07 -3.69916E-07 -3.58917E-07 -3.47976E-07 -3.37091E-07 -3.26263E-07 -3.1549E-07 -3.04773E-07 -2.94109E-07 -2.83492E-07 -2.72917E-07 -2.62365E-07 -2.51805E-07 -2.41155E-07 -2.30158E-07 -2.17625E-07 -1.91959E-07 1.24335E-11 7.95624E-07 3.2779E-06 -1.6772E-07 -1.64218E-07 -1.60748E-07 -1.57308E-07 -1.53897E-07 -1.50513E-07 -1.47155E-07 -1.43822E-07 -1.40512E-07 -1.37224E-07 -1.33957E-07 -1.3071E-07 -1.27483E-07 -1.24273E-07 -1.21081E-07 -1.17907E-07 -1.14749E-07 -1.11608E-07 -1.08483E-07 -1.05374E-07 -1.02281E-07 -9.9205E-08 -9.61449E-08 -9.31012E-08 -9.00737E-08 -8.70624E-08 -8.40671E-08 -8.1087E-08 -7.8121E-08 -7.51669E-08 -7.22205E-08 -6.92727E-08 -6.63014E-08 -6.32378E-08 -5.97627E-08 -5.27781E-08 1.75674E-11 2.52178E-07 1.16135E-06 -4.20119E-08 -4.11311E-08 -4.02583E-08 -3.93933E-08 -3.85355E-08 -3.76847E-08 -3.68405E-08 -3.60025E-08 -3.51704E-08 -3.43439E-08 -3.35228E-08 -3.27067E-08 -3.18955E-08 -3.10889E-08 -3.02869E-08 -2.94893E-08 -2.86959E-08 -2.79068E-08 -2.71218E-08 -2.63409E-08 -2.55642E-08 -2.47916E-08 -2.40232E-08 -2.3259E-08 -2.24989E-08 -2.17429E-08 -2.0991E-08 -2.0243E-08 -1.94986E-08 -1.87573E-08 -1.80181E-08 -1.72786E-08 -1.65333E-08 -1.57653E-08 -1.48953E-08 -1.31568E-08 2.07611E-11 7.12002E-08 3.75026E-07 -9.82592E-09 -9.6192E-09 -9.41439E-09 -9.2114E-09 -9.01013E-09 -8.81049E-09 -8.6124E-09 -8.41579E-09 -8.22057E-09 -8.02667E-09 -7.83403E-09 -7.64259E-09 -7.4523E-09 -7.26312E-09 -7.075E-09 -6.88791E-09 -6.70184E-09 -6.51677E-09 -6.33268E-09 -6.14957E-09 -5.96744E-09 -5.78628E-09 -5.60611E-09 -5.42693E-09 -5.24873E-09 -5.0715E-09 -4.89524E-09 -4.7199E-09 -4.54542E-09 -4.37167E-09 -4.1984E-09 -4.0251E-09 -3.85046E-09 -3.6705E-09 -3.46677E-09 -3.06027E-09 2.27035E-11 1.81798E-08 1.08514E-07 -2.19779E-09 -2.15113E-09 -2.1049E-09 -2.05908E-09 -2.01364E-09 -1.96858E-09 -1.92387E-09 -1.87949E-09 -1.83543E-09 -1.79167E-09 -1.74819E-09 -1.70498E-09 -1.66204E-09 -1.61934E-09 -1.57689E-09 -1.53467E-09 -1.49268E-09 -1.45092E-09 -1.40938E-09 -1.36806E-09 -1.32696E-09 -1.28608E-09 -1.24543E-09 -1.205E-09 -1.1648E-09 -1.12481E-09 -1.08505E-09 -1.04549E-09 -1.00613E-09 -9.6693E-10 -9.27843E-10 -8.88748E-10 -8.49355E-10 -8.08765E-10 -7.62817E-10 -6.71183E-10 2.38445E-11 4.34101E-09 2.8331E-08 -4.66859E-10 -4.56535E-10 -4.46307E-10 -4.3617E-10 -4.2612E-10 -4.16151E-10 -4.0626E-10 -3.96443E-10 -3.86695E-10 -3.77014E-10 -3.67396E-10 -3.57839E-10 -3.48339E-10 -3.38894E-10 -3.29504E-10 -3.20165E-10 -3.10877E-10 -3.01639E-10 -2.9245E-10 -2.83311E-10 -2.74221E-10 -2.6518E-10 -2.56189E-10 -2.47247E-10 -2.38354E-10 -2.29511E-10 -2.20715E-10 -2.11967E-10 -2.03261E-10 -1.94592E-10 -1.85948E-10 -1.77302E-10 -1.6859E-10 -1.59613E-10 -1.49453E-10 -1.29192E-10 2.448E-11 1.00934E-09 6.87332E-09 -8.27954E-11 -8.05343E-11 -7.82941E-11 -7.60739E-11 -7.38726E-11 -7.16892E-11 -6.95229E-11 -6.73727E-11 -6.52379E-11 -6.31176E-11 -6.10111E-11 -5.89179E-11 -5.68373E-11 -5.47689E-11 -5.27122E-11 -5.06669E-11 -4.86328E-11 -4.66096E-11 -4.45973E-11 -4.25958E-11 -4.0605E-11 -3.86251E-11 -3.66559E-11 -3.46976E-11 -3.27502E-11 -3.08135E-11 -2.88874E-11 -2.69715E-11 -2.5065E-11 -2.31666E-11 -2.12736E-11 -1.93802E-11 -1.74724E-11 -1.55067E-11 -1.32817E-11 -8.8452E-12 2.48035E-11 2.44574E-10 1.60749E-09 1.48987E-12 1.9827E-12 2.47096E-12 2.95488E-12 3.43467E-12 3.91054E-12 4.3827E-12 4.85134E-12 5.31664E-12 5.77877E-12 6.23787E-12 6.6941E-12 7.14757E-12 7.59838E-12 8.04664E-12 8.49241E-12 8.93574E-12 9.37669E-12 9.81527E-12 1.02515E-11 1.06854E-11 1.11169E-11 1.15461E-11 1.19729E-11 1.23973E-11 1.28194E-11 1.32392E-11 1.36567E-11 1.40722E-11 1.4486E-11 1.48985E-11 1.53112E-11 1.5727E-11 1.61554E-11 1.66403E-11 1.76071E-11 2.49402E-11 7.34387E-11 3.81664E-10 *table -0.00183742 -0.00182792 -0.0018181 -0.00180819 -0.00179808 -0.00178777 -0.00177723 -0.00176645 -0.0017554 -0.00174405 -0.00173237 -0.00172032 -0.00170783 -0.00169483 -0.00168119 -0.00166663 -0.00165068 -0.00163246 -0.00161078 -0.00158438 -0.00155221 -0.00151353 -0.00146787 -0.00141491 -0.00135442 -0.00128625 -0.00121027 -0.00112636 -0.00103445 -0.000934452 -0.000826281 -0.000709868 -0.000585141 -0.000452032 -0.00031047 -0.000160382 -1.69165E-06 0.000159543 0.000317313 -0.00177873 -0.00176954 -0.00176007 -0.0017505 -0.00174075 -0.00173082 -0.00172069 -0.00171033 -0.00169973 -0.00168885 -0.00167768 -0.00166616 -0.00165426 -0.00164191 -0.00162901 -0.00161538 -0.0016007 -0.00158432 -0.00156522 -0.00154205 -0.00151356 -0.00147874 -0.00143696 -0.00138776 -0.00133088 -0.0012661 -0.00119328 -0.00111229 -0.00102303 -0.000925414 -0.000819349 -0.000704756 -0.000581559 -0.000449682 -0.00030905 -0.000159586 -1.21287E-06 0.000159915 0.000317668 -0.00171809 -0.00170921 -0.00170007 -0.00169085 -0.00168146 -0.00167191 -0.00166217 -0.00165223 -0.00164206 -0.00163165 -0.00162097 -0.00160999 -0.00159866 -0.00158692 -0.00157472 -0.00156191 -0.00154828 -0.00153341 -0.00151648 -0.00149627 -0.00147136 -0.0014405 -0.00140277 -0.0013576 -0.00130459 -0.00124349 -0.00117412 -0.00109633 -0.00101 -0.000915024 -0.000811317 -0.000698786 -0.000577346 -0.000446915 -0.000307412 -0.000158757 -8.66621E-07 0.000160012 0.000317631 -0.00165543 -0.00164685 -0.00163805 -0.00162917 -0.00162014 -0.00161096 -0.00160161 -0.00159208 -0.00158235 -0.00157239 -0.0015622 -0.00155173 -0.00154095 -0.00152982 -0.00151827 -0.00150621 -0.0014935 -0.00147985 -0.00146469 -0.00144704 -0.00142549 -0.00139856 -0.00136505 -0.00132412 -0.00127527 -0.00121815 -0.00115253 -0.00107823 -0.000995125 -0.000903087 -0.000802014 -0.000691807 -0.000572375 -0.000443627 -0.000305477 -0.000157836 -6.17467E-07 0.000159847 0.000317195 -0.0015907 -0.00158243 -0.00157395 -0.00156541 -0.00155674 -0.00154793 -0.00153897 -0.00152985 -0.00152054 -0.00151103 -0.00150131 -0.00149134 -0.0014811 -0.00147055 -0.00145963 -0.00144828 -0.00143639 -0.00142376 -0.00141003 -0.00139449 -0.00137592 -0.00135276 -0.00132351 -0.00128704 -0.00124262 -0.00118979 -0.00112824 -0.00105777 -0.000978199 -0.000889405 -0.000791266 -0.000683672 -0.000566523 -0.00043972 -0.000303168 -0.000156772 -4.38875E-07 0.000159423 0.000316344 -0.00152387 -0.0015159 -0.00150776 -0.00149956 -0.00149124 -0.0014828 -0.00147422 -0.0014655 -0.00145661 -0.00144755 -0.00143829 -0.00142881 -0.0014191 -0.0014091 -0.00139879 -0.00138811 -0.00137697 -0.00136525 -0.00135269 -0.00133883 -0.00132276 -0.00130303 -0.00127796 -0.00124607 -0.00120634 -0.0011581 -0.00110097 -0.00103466 -0.000958983 -0.000873771 -0.000778893 -0.000674228 -0.000559664 -0.000435094 -0.000300414 -0.00015552 -3.11262E-07 0.000158736 0.00031505 -0.00145493 -0.00144723 -0.00143946 -0.0014316 -0.00142363 -0.00141556 -0.00140736 -0.00139904 -0.00139056 -0.00138194 -0.00137313 -0.00136414 -0.00135493 -0.00134548 -0.00133576 -0.00132571 -0.00131528 -0.00130437 -0.00129281 -0.00128031 -0.00126623 -0.00124944 -0.00122829 -0.00120099 -0.00116613 -0.0011228 -0.00107043 -0.00100866 -0.000937232 -0.000855966 -0.000764705 -0.000663314 -0.000551668 -0.000429648 -0.000297142 -0.000154036 -2.20311E-07 0.000157773 0.000313281 -0.0013839 -0.00137651 -0.00136907 -0.00136154 -0.00135393 -0.00134622 -0.0013384 -0.00133047 -0.00132241 -0.00131421 -0.00130586 -0.00129734 -0.00128863 -0.00127971 -0.00127055 -0.00126112 -0.00125136 -0.0012412 -0.00123052 -0.00121913 -0.00120663 -0.00119223 -0.00117452 -0.00115162 -0.00112175 -0.00108358 -0.00103632 -0.000979461 -0.000912684 -0.000835758 -0.000748501 -0.00065076 -0.000542395 -0.000423276 -0.000293277 -0.000152278 -1.55634E-07 0.000156517 0.000310992 -0.00131086 -0.00130379 -0.00129667 -0.00128948 -0.00128222 -0.00127488 -0.00126744 -0.0012599 -0.00125224 -0.00124447 -0.00123656 -0.0012285 -0.00122029 -0.00121188 -0.00120327 -0.00119443 -0.0011853 -0.00117585 -0.00116598 -0.00115555 -0.00114432 -0.00113177 -0.00111689 -0.00109799 -0.00107301 -0.00104019 -0.000998358 -0.000946801 -0.000885084 -0.000812916 -0.000730078 -0.000636394 -0.000531705 -0.000415869 -0.000288746 -0.000150204 -1.09734E-07 0.000154941 0.000308133 -0.00123598 -0.00122923 -0.00122244 -0.00121559 -0.00120868 -0.00120169 -0.00119463 -0.00118748 -0.00118023 -0.00117288 -0.00116541 -0.00115781 -0.00115007 -0.00114217 -0.00113409 -0.00112581 -0.0011173 -0.00110851 -0.00109938 -0.00108981 -0.00107964 -0.00106855 -0.00105588 -0.00104033 -0.0010199 -0.000992454 -0.000956308 -0.000910425 -0.00085419 -0.000787217 -0.000709239 -0.000620046 -0.00051946 -0.00040732 -0.000283474 -0.000147774 -7.72201E-08 0.000153018 0.000304643 -0.00115937 -0.00115293 -0.00114647 -0.00113996 -0.0011334 -0.00112678 -0.00112009 -0.00111333 -0.00110648 -0.00109955 -0.00109251 -0.00108536 -0.00107809 -0.00107068 -0.00106312 -0.00105539 -0.00104747 -0.00103931 -0.00103087 -0.00102209 -0.00101284 -0.00100293 -0.00099195 -0.000979032 -0.000962559 -0.000940254 -0.000909927 -0.00087005 -0.000819719 -0.000758401 -0.000685752 -0.00060152 -0.000505498 -0.000397506 -0.000277375 -0.000144944 -5.4229E-08 0.000150717 0.000300459 -0.00108115 -0.00107504 -0.0010689 -0.00106273 -0.00105653 -0.00105027 -0.00104396 -0.00103758 -0.00103114 -0.00102462 -0.00101801 -0.0010113 -0.00100449 -0.00099757 -0.000990518 -0.000983321 -0.000975959 -0.000968405 -0.000960622 -0.00095256 -0.000944141 -0.000935231 -0.00092558 -0.000914658 -0.000901343 -0.000883642 -0.000859043 -0.00082541 -0.000781386 -0.000726195 -0.000659372 -0.000580603 -0.000489646 -0.000386294 -0.000270361 -0.000141666 -3.79998E-08 0.000147998 0.000295512 -0.0010015 -0.000995714 -0.000989914 -0.000984092 -0.00097824 -0.000972349 -0.000966414 -0.000960426 -0.00095438 -0.000948268 -0.000942083 -0.000935819 -0.000929467 -0.000923019 -0.000916462 -0.000909784 -0.000902969 -0.000895996 -0.000888836 -0.000881452 -0.000873788 -0.000865754 -0.000857194 -0.000847791 -0.000836853 -0.000822933 -0.000803637 -0.000776299 -0.000738919 -0.000690321 -0.000629842 -0.000557072 -0.000471718 -0.000373542 -0.000262331 -0.00013789 -2.65638E-08 0.000144819 0.000289721 -0.000920642 -0.00091519 -0.000909731 -0.000904258 -0.000898764 -0.00089324 -0.000887682 -0.000882082 -0.000876435 -0.000870734 -0.000864972 -0.000859145 -0.000853244 -0.000847262 -0.000841191 -0.00083502 -0.000828736 -0.000822323 -0.000815759 -0.000809016 -0.000802052 -0.000794808 -0.000787181 -0.00077898 -0.000769803 -0.000758744 -0.000743949 -0.000722633 -0.000692086 -0.000650508 -0.0005969 -0.000530694 -0.000451519 -0.000359095 -0.000253182 -0.00013356 -1.852E-08 0.000141131 0.000282999 -0.000838854 -0.000833742 -0.00082863 -0.000823511 -0.000818378 -0.000813226 -0.000808047 -0.000802837 -0.000797588 -0.000792297 -0.000786957 -0.000781563 -0.000776109 -0.000770589 -0.000764996 -0.000759321 -0.000753555 -0.000747683 -0.000741692 -0.000735558 -0.000729252 -0.000722732 -0.00071593 -0.000708728 -0.000700893 -0.000691906 -0.000680575 -0.000664565 -0.000640753 -0.000606515 -0.000560286 -0.000501226 -0.000428843 -0.000342794 -0.000242801 -0.000128618 -1.2873E-08 0.000136882 0.000275247 -0.000756475 -0.000751711 -0.000746953 -0.000742194 -0.000737429 -0.000732651 -0.000727855 -0.000723036 -0.000718189 -0.000713308 -0.000708389 -0.000703427 -0.000698416 -0.000693353 -0.000688231 -0.000683043 -0.000677781 -0.000672437 -0.000666998 -0.000661447 -0.000655763 -0.000649916 -0.000643861 -0.000637522 -0.000630762 -0.000623294 -0.00061444 -0.00060263 -0.00058499 -0.000558175 -0.000519762 -0.000468432 -0.00040348 -0.000324468 -0.000231068 -0.000123001 -8.91645E-09 0.000132014 0.00026636 -0.000673922 -0.000669516 -0.00066512 -0.000660728 -0.000656336 -0.000651939 -0.00064753 -0.000643106 -0.000638661 -0.000634192 -0.000629693 -0.000625162 -0.000620592 -0.000615982 -0.000611325 -0.000606616 -0.00060185 -0.000597019 -0.000592114 -0.000587123 -0.000582032 -0.000576817 -0.000571449 -0.000565879 -0.000560024 -0.000553723 -0.000546614 -0.000537805 -0.000525238 -0.000505488 -0.000475149 -0.000432089 -0.000375221 -0.000303944 -0.000217859 -0.000116642 -6.15032E-09 0.000126464 0.000256223 -0.000591701 -0.000587662 -0.000583638 -0.000579623 -0.000575611 -0.0005716 -0.000567583 -0.000563558 -0.000559519 -0.000555463 -0.000551386 -0.000547284 -0.000543155 -0.000538993 -0.000534797 -0.000530561 -0.000526281 -0.000521951 -0.000517566 -0.000513116 -0.000508591 -0.000503975 -0.000499247 -0.000494376 -0.000489311 -0.000483959 -0.000478129 -0.000471362 -0.000462471 -0.000448789 -0.000426398 -0.000392023 -0.000343872 -0.000281054 -0.000203048 -0.000109473 -4.22086E-09 0.000120165 0.000244712 -0.000510425 -0.000506766 -0.000503124 -0.000499493 -0.000495871 -0.000492252 -0.000488634 -0.000485012 -0.000481382 -0.000477742 -0.000474088 -0.000470417 -0.000466725 -0.000463011 -0.000459271 -0.000455502 -0.000451701 -0.000447863 -0.000443984 -0.000440057 -0.000436076 -0.00043203 -0.000427904 -0.000423679 -0.000419322 -0.000414779 -0.000409948 -0.000404599 -0.000398142 -0.000388987 -0.000373747 -0.000348165 -0.000309281 -0.000255641 -0.000186511 -0.000101423 -2.87833E-09 0.000113046 0.0002317 -0.000430838 -0.000427571 -0.000424322 -0.000421087 -0.000417862 -0.000414644 -0.00041143 -0.000408216 -0.000405 -0.000401779 -0.000398549 -0.000395309 -0.000392056 -0.000388787 -0.0003855 -0.000382193 -0.000378863 -0.000375507 -0.000372123 -0.000368705 -0.000365249 -0.000361748 -0.000358192 -0.000354568 -0.000350857 -0.000347027 -0.000343022 -0.000338727 -0.000333865 -0.000327665 -0.000317993 -0.000300684 -0.000271386 -0.000227589 -0.000168142 -9.24263E-05 -1.94671E-09 0.000105038 0.000217053 -0.00035385 -0.000350988 -0.000348142 -0.000345312 -0.000342493 -0.000339684 -0.000336881 -0.000334081 -0.000331283 -0.000328484 -0.000325681 -0.000322872 -0.000320057 -0.000317231 -0.000314394 -0.000311544 -0.00030868 -0.000305798 -0.000302897 -0.000299974 -0.000297025 -0.000294047 -0.000291033 -0.000287975 -0.000284861 -0.000281673 -0.00027838 -0.000274924 -0.000271177 -0.000266802 -0.000260779 -0.000250255 -0.000230328 -0.000196867 -0.000147869 -8.24283E-05 -1.30212E-09 9.60699E-05 0.00020064 -0.000280588 -0.00027814 -0.000275709 -0.000273293 -0.000270889 -0.000268495 -0.000266109 -0.000263728 -0.000261352 -0.000258977 -0.000256602 -0.000254226 -0.000251846 -0.000249462 -0.000247071 -0.000244673 -0.000242267 -0.00023985 -0.000237422 -0.00023498 -0.000232523 -0.000230047 -0.00022755 -0.000225026 -0.000222468 -0.000219867 -0.000217205 -0.000214452 -0.000211551 -0.000208359 -0.000204464 -0.000198495 -0.000186696 -0.000163632 -0.000125708 -7.14063E-05 -8.5756E-10 8.60839E-05 0.00018234 -0.000212472 -0.000210448 -0.000208439 -0.000206444 -0.00020446 -0.000202486 -0.000200521 -0.000198562 -0.000196609 -0.000194659 -0.000192711 -0.000190765 -0.000188819 -0.000186871 -0.000184921 -0.000182968 -0.00018101 -0.000179048 -0.00017708 -0.000175104 -0.000173121 -0.000171128 -0.000169122 -0.000167103 -0.000165065 -0.000163003 -0.000160908 -0.000158767 -0.000156551 -0.000154202 -0.000151565 -0.00014813 -0.000142031 -0.000128454 -0.000101858 -5.94093E-05 -5.52049E-10 7.50486E-05 0.00016206 -0.000151311 -0.000149714 -0.000148129 -0.000146555 -0.000144992 -0.000143438 -0.000141891 -0.000140351 -0.000138817 -0.000137287 -0.000135761 -0.000134237 -0.000132716 -0.000131195 -0.000129674 -0.000128154 -0.000126632 -0.000125109 -0.000123583 -0.000122056 -0.000120524 -0.000118989 -0.000117449 -0.000115902 -0.000114346 -0.00011278 -0.000111197 -0.000109593 -0.000107954 -0.000106258 -0.000104446 -0.000102352 -9.93308E-05 -9.28076E-05 -7.6919E-05 -4.66449E-05 -3.42925E-10 6.29961E-05 0.000139775 -9.93131E-05 -9.81314E-05 -9.69594E-05 -9.57964E-05 -9.46415E-05 -9.34939E-05 -9.2353E-05 -9.12178E-05 -9.00877E-05 -8.8962E-05 -8.78401E-05 -8.67213E-05 -8.56052E-05 -8.44911E-05 -8.33787E-05 -8.22675E-05 -8.11572E-05 -8.00475E-05 -7.89381E-05 -7.78286E-05 -7.67188E-05 -7.56082E-05 -7.44965E-05 -7.33829E-05 -7.22667E-05 -7.11465E-05 -7.00206E-05 -6.8886E-05 -6.77378E-05 -6.65666E-05 -6.53526E-05 -6.40429E-05 -6.24542E-05 -5.97364E-05 -5.22911E-05 -3.36405E-05 -2.00412E-10 5.00992E-05 0.000115605 -5.87301E-05 -5.79313E-05 -5.71393E-05 -5.63536E-05 -5.55736E-05 -5.4799E-05 -5.40293E-05 -5.3264E-05 -5.25027E-05 -5.17449E-05 -5.09904E-05 -5.02386E-05 -4.94894E-05 -4.87425E-05 -4.79974E-05 -4.72542E-05 -4.65125E-05 -4.57721E-05 -4.50331E-05 -4.42951E-05 -4.3558E-05 -4.28219E-05 -4.20863E-05 -4.13512E-05 -4.06162E-05 -3.98807E-05 -3.91442E-05 -3.84055E-05 -3.76627E-05 -3.69126E-05 -3.61483E-05 -3.53538E-05 -3.448E-05 -3.33154E-05 -3.06146E-05 -2.14478E-05 -1.03772E-10 3.68201E-05 8.9986E-05 -3.0777E-05 -3.02969E-05 -2.9821E-05 -2.9349E-05 -2.88806E-05 -2.84156E-05 -2.79537E-05 -2.74946E-05 -2.70383E-05 -2.65843E-05 -2.61326E-05 -2.56829E-05 -2.52352E-05 -2.47891E-05 -2.43447E-05 -2.39018E-05 -2.34602E-05 -2.302E-05 -2.25811E-05 -2.21434E-05 -2.17068E-05 -2.12714E-05 -2.08371E-05 -2.04037E-05 -1.99713E-05 -1.95396E-05 -1.91084E-05 -1.86774E-05 -1.82459E-05 -1.78129E-05 -1.73761E-05 -1.69309E-05 -1.6464E-05 -1.59256E-05 -1.50177E-05 -1.15961E-05 -3.8599E-11 2.41197E-05 6.4005E-05 -1.42869E-05 -1.40356E-05 -1.37865E-05 -1.35395E-05 -1.32944E-05 -1.30511E-05 -1.28095E-05 -1.25696E-05 -1.23311E-05 -1.2094E-05 -1.18582E-05 -1.16236E-05 -1.13901E-05 -1.11577E-05 -1.09263E-05 -1.06959E-05 -1.04664E-05 -1.02377E-05 -1.001E-05 -9.78306E-06 -9.55699E-06 -9.33174E-06 -9.1073E-06 -8.88367E-06 -8.66082E-06 -8.4387E-06 -8.21726E-06 -7.99637E-06 -7.77584E-06 -7.55535E-06 -7.33423E-06 -7.11107E-06 -6.88222E-06 -6.63511E-06 -6.30173E-06 -5.2406E-06 5.09171E-12 1.34991E-05 3.98996E-05 -5.9303E-06 -5.81663E-06 -5.70397E-06 -5.59226E-06 -5.48144E-06 -5.37146E-06 -5.26228E-06 -5.15385E-06 -5.04612E-06 -4.93905E-06 -4.8326E-06 -4.72674E-06 -4.62143E-06 -4.51665E-06 -4.41238E-06 -4.3086E-06 -4.20528E-06 -4.10243E-06 -4.00003E-06 -3.89807E-06 -3.79656E-06 -3.69549E-06 -3.59487E-06 -3.49468E-06 -3.39494E-06 -3.29562E-06 -3.1967E-06 -3.09817E-06 -2.99995E-06 -2.90195E-06 -2.80397E-06 -2.70557E-06 -2.60568E-06 -2.50081E-06 -2.37351E-06 -2.0499E-06 3.41915E-11 6.31053E-06 2.09816E-05 -2.19425E-06 -2.15004E-06 -2.10623E-06 -2.06279E-06 -2.01971E-06 -1.97696E-06 -1.93452E-06 -1.89239E-06 -1.85053E-06 -1.80894E-06 -1.76761E-06 -1.72651E-06 -1.68564E-06 -1.64498E-06 -1.60454E-06 -1.5643E-06 -1.52425E-06 -1.4844E-06 -1.44474E-06 -1.40526E-06 -1.36598E-06 -1.32688E-06 -1.28797E-06 -1.24926E-06 -1.21073E-06 -1.17238E-06 -1.13422E-06 -1.09623E-06 -1.0584E-06 -1.02069E-06 -9.83038E-07 -9.45317E-07 -9.07197E-07 -8.67642E-07 -8.21694E-07 -7.203E-07 5.34274E-11 2.53056E-06 9.31938E-06 -7.11092E-07 -6.96412E-07 -6.81865E-07 -6.67443E-07 -6.53141E-07 -6.38951E-07 -6.24869E-07 -6.10887E-07 -5.97001E-07 -5.83205E-07 -5.69496E-07 -5.55868E-07 -5.42318E-07 -5.28843E-07 -5.1544E-07 -5.02108E-07 -4.88843E-07 -4.75645E-07 -4.62514E-07 -4.49448E-07 -4.36448E-07 -4.23514E-07 -4.10646E-07 -3.97844E-07 -3.85109E-07 -3.72439E-07 -3.59833E-07 -3.4729E-07 -3.34802E-07 -3.22362E-07 -3.09951E-07 -2.97529E-07 -2.84999E-07 -2.72058E-07 -2.5728E-07 -2.26694E-07 6.60189E-11 9.07829E-07 3.64888E-06 -2.00634E-07 -1.96447E-07 -1.92298E-07 -1.88185E-07 -1.84107E-07 -1.80061E-07 -1.76046E-07 -1.72061E-07 -1.68103E-07 -1.64171E-07 -1.60265E-07 -1.56382E-07 -1.52522E-07 -1.48684E-07 -1.44867E-07 -1.41071E-07 -1.37294E-07 -1.33537E-07 -1.298E-07 -1.26082E-07 -1.22383E-07 -1.18703E-07 -1.15043E-07 -1.11403E-07 -1.07782E-07 -1.0418E-07 -1.00597E-07 -9.70327E-08 -9.34852E-08 -8.99519E-08 -8.64279E-08 -8.29025E-08 -7.93491E-08 -7.56853E-08 -7.15261E-08 -6.3118E-08 7.41417E-11 2.92722E-07 1.30799E-06 -5.03681E-08 -4.9311E-08 -4.82636E-08 -4.72254E-08 -4.6196E-08 -4.51749E-08 -4.41617E-08 -4.31559E-08 -4.21573E-08 -4.11653E-08 -4.01797E-08 -3.92003E-08 -3.82266E-08 -3.72586E-08 -3.62959E-08 -3.53385E-08 -3.43863E-08 -3.3439E-08 -3.24968E-08 -3.15595E-08 -3.06272E-08 -2.96999E-08 -2.87775E-08 -2.78602E-08 -2.69478E-08 -2.60405E-08 -2.5138E-08 -2.42402E-08 -2.33467E-08 -2.2457E-08 -2.15698E-08 -2.06824E-08 -1.97881E-08 -1.88666E-08 -1.78225E-08 -1.57271E-08 7.92801E-11 8.37476E-08 4.28275E-07 -1.16431E-08 -1.13969E-08 -1.1153E-08 -1.09113E-08 -1.06716E-08 -1.04338E-08 -1.01979E-08 -9.96379E-09 -9.7313E-09 -9.50039E-09 -9.27097E-09 -9.04298E-09 -8.81636E-09 -8.59105E-09 -8.36702E-09 -8.14422E-09 -7.92262E-09 -7.70221E-09 -7.48297E-09 -7.2649E-09 -7.048E-09 -6.83226E-09 -6.61769E-09 -6.4043E-09 -6.19209E-09 -5.98104E-09 -5.77114E-09 -5.56235E-09 -5.35458E-09 -5.14769E-09 -4.9414E-09 -4.73507E-09 -4.52718E-09 -4.313E-09 -4.07045E-09 -3.58469E-09 8.24745E-11 2.14766E-08 1.25392E-07 -2.52074E-09 -2.466E-09 -2.41176E-09 -2.35801E-09 -2.30472E-09 -2.25186E-09 -2.19941E-09 -2.14735E-09 -2.09566E-09 -2.04432E-09 -1.99332E-09 -1.94263E-09 -1.89225E-09 -1.84217E-09 -1.79237E-09 -1.74284E-09 -1.69359E-09 -1.64459E-09 -1.59587E-09 -1.5474E-09 -1.49919E-09 -1.45124E-09 -1.40356E-09 -1.35613E-09 -1.30897E-09 -1.26207E-09 -1.21543E-09 -1.16903E-09 -1.12287E-09 -1.0769E-09 -1.03106E-09 -9.8522E-10 -9.39034E-10 -8.91452E-10 -8.37578E-10 -7.29745E-10 8.44169E-11 5.12917E-09 3.2855E-08 -4.79731E-10 -4.67848E-10 -4.56076E-10 -4.44408E-10 -4.32839E-10 -4.21365E-10 -4.09981E-10 -3.98681E-10 -3.87462E-10 -3.76319E-10 -3.65249E-10 -3.54248E-10 -3.43314E-10 -3.32443E-10 -3.21634E-10 -3.10886E-10 -3.00195E-10 -2.89563E-10 -2.78988E-10 -2.68469E-10 -2.58007E-10 -2.47601E-10 -2.37253E-10 -2.26962E-10 -2.16728E-10 -2.0655E-10 -1.96429E-10 -1.86361E-10 -1.76343E-10 -1.66368E-10 -1.56422E-10 -1.46475E-10 -1.36454E-10 -1.2613E-10 -1.14441E-10 -9.10499E-11 8.55579E-11 1.21847E-09 7.94836E-09 -3.50357E-11 -3.24869E-11 -2.99618E-11 -2.74592E-11 -2.49779E-11 -2.25168E-11 -2.0075E-11 -1.76513E-11 -1.52449E-11 -1.2855E-11 -1.04806E-11 -8.12118E-12 -5.776E-12 -3.44453E-12 -1.12631E-12 1.17903E-12 3.47179E-12 5.75217E-12 8.0203E-12 1.02762E-11 1.252E-11 1.47516E-11 1.6971E-11 1.91781E-11 2.13729E-11 2.35556E-11 2.57262E-11 2.78853E-11 3.00337E-11 3.21729E-11 3.43058E-11 3.6439E-11 3.8588E-11 4.0802E-11 4.33085E-11 4.83243E-11 8.61934E-11 3.34038E-10 1.87408E-09 6.0666E-11 6.12096E-11 6.17481E-11 6.22818E-11 6.28109E-11 6.33357E-11 6.38565E-11 6.43733E-11 6.48865E-11 6.53962E-11 6.59025E-11 6.64057E-11 6.69058E-11 6.7403E-11 6.78973E-11 6.83889E-11 6.88779E-11 6.93642E-11 6.98478E-11 7.03289E-11 7.08074E-11 7.12833E-11 7.17565E-11 7.22272E-11 7.26952E-11 7.31606E-11 7.36235E-11 7.40839E-11 7.45421E-11 7.49982E-11 7.5453E-11 7.59079E-11 7.63662E-11 7.68383E-11 7.73727E-11 7.84423E-11 8.65169E-11 1.40027E-10 4.81263E-10 8.11561E-11 8.12717E-11 8.13862E-11 8.14997E-11 8.16123E-11 8.17239E-11 8.18346E-11 8.19445E-11 8.20537E-11 8.21621E-11 8.22697E-11 8.23768E-11 8.24831E-11 8.25888E-11 8.2694E-11 8.27985E-11 8.29025E-11 8.30059E-11 8.31088E-11 8.32111E-11 8.33128E-11 8.34141E-11 8.35147E-11 8.36148E-11 8.37143E-11 8.38133E-11 8.39117E-11 8.40097E-11 8.41071E-11 8.42041E-11 8.43008E-11 8.43975E-11 8.4495E-11 8.45954E-11 8.47091E-11 8.49365E-11 8.66536E-11 9.81325E-11 1.7251E-10 *table -0.00169849 -0.00168973 -0.00168069 -0.00167157 -0.00166228 -0.00165282 -0.00164316 -0.00163329 -0.00162318 -0.00161282 -0.00160218 -0.00159122 -0.00157989 -0.00156813 -0.00155584 -0.00154282 -0.00152869 -0.00151276 -0.00149395 -0.00147101 -0.00144283 -0.00140857 -0.00136769 -0.00131984 -0.00126479 -0.00120235 -0.00113241 -0.00105486 -0.000969611 -0.00087658 -0.000775695 -0.000666887 -0.000550088 -0.000425234 -0.000292261 -0.000151102 -1.68841E-06 0.000150271 0.000299103 -0.00164008 -0.00163162 -0.00162291 -0.00161412 -0.00160518 -0.00159607 -0.00158679 -0.00157732 -0.00156764 -0.00155772 -0.00154755 -0.00153709 -0.0015263 -0.00151514 -0.00150351 -0.0014913 -0.00147825 -0.00146388 -0.00144732 -0.00142735 -0.00140265 -0.00137215 -0.0013351 -0.00129101 -0.00123958 -0.00118059 -0.00111387 -0.00103931 -0.000956813 -0.000866278 -0.000767628 -0.000660787 -0.000545681 -0.00042224 -0.000290394 -0.000150075 -1.21052E-06 0.000150413 0.000299016 -0.0015799 -0.00157173 -0.00156334 -0.00155488 -0.00154628 -0.00153754 -0.00152863 -0.00151955 -0.00151028 -0.0015008 -0.00149109 -0.00148112 -0.00147086 -0.00146026 -0.00144927 -0.00143778 -0.00142564 -0.00141253 -0.00139782 -0.00138046 -0.00135909 -0.00133237 -0.0012993 -0.00125921 -0.00121166 -0.00115638 -0.00109316 -0.00102187 -0.000942391 -0.000854612 -0.000758447 -0.000653812 -0.000540626 -0.000418814 -0.000288299 -0.000149008 -8.64911E-07 0.000150271 0.000298522 -0.00151789 -0.00151001 -0.00150194 -0.00149381 -0.00148555 -0.00147716 -0.00146862 -0.00145993 -0.00145106 -0.00144201 -0.00143275 -0.00142326 -0.00141351 -0.00140346 -0.00139307 -0.00138227 -0.00137093 -0.00135885 -0.00134561 -0.00133044 -0.00131208 -0.00128905 -0.00126005 -0.00122414 -0.00118074 -0.00112945 -0.00107003 -0.00100231 -0.000926132 -0.000841391 -0.000747984 -0.000645817 -0.000534802 -0.000414856 -0.000285897 -0.000147844 -6.16214E-07 0.00014986 0.000297613 -0.00145401 -0.00144643 -0.00143868 -0.00143087 -0.00142295 -0.00141491 -0.00140674 -0.00139843 -0.00138996 -0.00138133 -0.00137252 -0.00136349 -0.00135424 -0.00134473 -0.00133491 -0.00132474 -0.00131413 -0.00130294 -0.0012909 -0.00127747 -0.00126168 -0.00124208 -0.00121712 -0.00118556 -0.00114654 -0.00109954 -0.00104423 -0.000980376 -0.00090782 -0.000826423 -0.00073607 -0.000636656 -0.000528086 -0.000410268 -0.000283112 -0.000146531 -4.37947E-07 0.000149184 0.000296276 -0.00138827 -0.00138095 -0.00137355 -0.00136606 -0.00135848 -0.00135079 -0.00134298 -0.00133505 -0.00132698 -0.00131876 -0.00131038 -0.00130182 -0.00129305 -0.00128405 -0.0012748 -0.00126523 -0.0012553 -0.00124489 -0.00123385 -0.00122181 -0.00120809 -0.00119149 -0.00117039 -0.00114321 -0.00110879 -0.00106636 -0.00101547 -0.000955834 -0.000887232 -0.000809508 -0.00072253 -0.000626182 -0.000520356 -0.000404953 -0.000279875 -0.000145025 -3.10564E-07 0.00014824 0.000294485 -0.00132067 -0.00131364 -0.00130656 -0.00129939 -0.00129214 -0.0012848 -0.00127736 -0.0012698 -0.00126212 -0.00125431 -0.00124636 -0.00123824 -0.00122995 -0.00122146 -0.00121274 -0.00120376 -0.00119446 -0.00118478 -0.00117459 -0.00116368 -0.00115159 -0.00113746 -0.00111983 -0.00109694 -0.00106723 -0.00102964 -0.000983502 -0.000928422 -0.00086413 -0.000790435 -0.000707181 -0.000614238 -0.000511486 -0.000398813 -0.000276114 -0.000143284 -2.19776E-07 0.000147014 0.000292207 -0.00125124 -0.00124452 -0.00123774 -0.0012309 -0.00122398 -0.00121699 -0.0012099 -0.00120272 -0.00119543 -0.00118803 -0.00118049 -0.00117282 -0.00116499 -0.00115699 -0.00114879 -0.00114037 -0.00113168 -0.00112267 -0.00111325 -0.00110329 -0.00109249 -0.00108029 -0.00106558 -0.00104666 -0.00102166 -0.000989104 -0.000948029 -0.000897869 -0.000838267 -0.000768981 -0.00068983 -0.00060066 -0.000501339 -0.000391744 -0.000271758 -0.000141265 -1.55213E-07 0.000145491 0.000289402 -0.0011801 -0.00117368 -0.00116721 -0.00116069 -0.00115411 -0.00114746 -0.00114074 -0.00113393 -0.00112702 -0.00112002 -0.0011129 -0.00110566 -0.00109829 -0.00109076 -0.00108307 -0.00107518 -0.00106707 -0.0010587 -0.00104999 -0.00104086 -0.00103112 -0.00102042 -0.00100801 -0.000992519 -0.000972004 -0.000944559 -0.000908811 -0.000863924 -0.000809403 -0.00074493 -0.000670284 -0.000585285 -0.000489784 -0.000383644 -0.000266734 -0.00013893 -1.09392E-07 0.000143646 0.000286019 -0.00110743 -0.00110131 -0.00109516 -0.00108896 -0.00108272 -0.00107641 -0.00107005 -0.00106361 -0.00105708 -0.00105047 -0.00104377 -0.00103696 -0.00103003 -0.00102297 -0.00101577 -0.0010084 -0.00100085 -0.000993075 -0.000985032 -0.00097665 -0.000967812 -0.000958297 -0.000947643 -0.000934893 -0.000918363 -0.00089591 -0.000865657 -0.000826366 -0.000777316 -0.000718075 -0.000648358 -0.000567954 -0.000476689 -0.000374409 -0.000260972 -0.000136239 -7.69336E-08 0.000141452 0.000282001 -0.00103336 -0.00102754 -0.00102171 -0.00101584 -0.00100993 -0.00100397 -0.000997959 -0.000991886 -0.000985744 -0.000979528 -0.000973228 -0.000966838 -0.000960349 -0.000953749 -0.000947027 -0.000940167 -0.000933149 -0.000925947 -0.000918525 -0.000910834 -0.000902792 -0.00089426 -0.000884957 -0.000874288 -0.000861024 -0.000843153 -0.000818388 -0.000784949 -0.00074175 -0.000688171 -0.000623835 -0.000548479 -0.0004619 -0.000363924 -0.000254391 -0.00013315 -5.39809E-08 0.00013888 0.000277287 -0.000958044 -0.000952542 -0.000947023 -0.00094148 -0.000935907 -0.000930297 -0.000924641 -0.000918935 -0.000913172 -0.000907346 -0.00090145 -0.000895477 -0.00088942 -0.00088327 -0.000877016 -0.000870647 -0.000864147 -0.000857494 -0.000850664 -0.000843617 -0.000836297 -0.000828612 -0.000820392 -0.000811283 -0.000800507 -0.000786506 -0.00076694 -0.000739466 -0.000702454 -0.000654971 -0.000596486 -0.000526662 -0.000445253 -0.00035206 -0.000246903 -0.000129616 -3.77783E-08 0.000135891 0.000271812 -0.000881692 -0.000876504 -0.000871308 -0.000866096 -0.000860861 -0.000855599 -0.000850301 -0.000844962 -0.000839577 -0.000834139 -0.000828643 -0.000823083 -0.000817453 -0.000811745 -0.000805951 -0.000800061 -0.000794062 -0.00078794 -0.000781673 -0.000775233 -0.00076858 -0.000761652 -0.00075434 -0.000746437 -0.000737488 -0.000726479 -0.000711461 -0.000689804 -0.000659207 -0.000618228 -0.000566077 -0.000502295 -0.000426576 -0.000338684 -0.000238417 -0.000125591 -2.63606E-08 0.000132446 0.0002655 -0.000804551 -0.000799683 -0.000794814 -0.000789936 -0.000785044 -0.000780131 -0.000775192 -0.000770221 -0.000765214 -0.000760163 -0.000755066 -0.000749916 -0.000744707 -0.000739435 -0.000734093 -0.000728671 -0.000723162 -0.000717552 -0.000711826 -0.000705962 -0.000699933 -0.000693694 -0.000687176 -0.000680253 -0.000672666 -0.000663826 -0.00065241 -0.000636033 -0.000611857 -0.000577715 -0.000532372 -0.000475163 -0.000405684 -0.000323652 -0.000228833 -0.000121021 -1.83294E-08 0.000128499 0.000258265 -0.000726926 -0.000722385 -0.000717849 -0.000713311 -0.000708765 -0.000704205 -0.000699627 -0.000695026 -0.000690396 -0.000685733 -0.000681032 -0.00067629 -0.0006715 -0.000666659 -0.00066176 -0.000656799 -0.000651766 -0.000646653 -0.000641448 -0.000636136 -0.000630694 -0.000625094 -0.000619288 -0.000613199 -0.000606677 -0.000599398 -0.000590592 -0.00057854 -0.000560405 -0.000533258 -0.000495152 -0.000445051 -0.000382392 -0.000306814 -0.000218046 -0.000115851 -1.2691E-08 0.000123999 0.000250016 -0.000649188 -0.000644984 -0.000640787 -0.000636594 -0.000632399 -0.000628197 -0.000623984 -0.000619754 -0.000615503 -0.000611228 -0.000606923 -0.000602586 -0.000598212 -0.000593797 -0.000589337 -0.000584827 -0.000580261 -0.000575632 -0.000570932 -0.000566148 -0.000561265 -0.000556263 -0.00055111 -0.000545756 -0.000540114 -0.000534004 -0.000527016 -0.000518132 -0.000505148 -0.000484807 -0.000454235 -0.000411755 -0.000356509 -0.000288017 -0.000205944 -0.000110022 -8.74039E-09 0.000118892 0.000240653 -0.000571788 -0.000567928 -0.000564079 -0.000560238 -0.0005564 -0.000552561 -0.000548715 -0.00054486 -0.00054099 -0.000537104 -0.000533195 -0.000529263 -0.000525302 -0.000521311 -0.000517284 -0.000513219 -0.00050911 -0.000504954 -0.000500742 -0.000496468 -0.00049212 -0.000487683 -0.000483136 -0.000478447 -0.000473563 -0.000468383 -0.000462693 -0.000455963 -0.000446847 -0.000432565 -0.000409539 -0.000375102 -0.000327859 -0.000267105 -0.000192415 -0.000103473 -5.97825E-09 0.00011312 0.000230068 -0.000495265 -0.000491759 -0.000488268 -0.000484787 -0.000481313 -0.000477841 -0.000474368 -0.000470891 -0.000467405 -0.000463908 -0.000460397 -0.000456869 -0.00045332 -0.000449748 -0.000446151 -0.000442524 -0.000438866 -0.000435172 -0.000431437 -0.000427655 -0.00042382 -0.00041992 -0.000415941 -0.000411864 -0.000407654 -0.000403255 -0.000398553 -0.000393287 -0.000386766 -0.000377205 -0.000361191 -0.000335 -0.00029629 -0.000243935 -0.000177347 -9.6141E-05 -4.05149E-09 0.000106619 0.000218147 -0.000420272 -0.000417131 -0.000414006 -0.000410893 -0.00040779 -0.000404693 -0.000401598 -0.000398503 -0.000395404 -0.0003923 -0.000389186 -0.000386062 -0.000382924 -0.00037977 -0.000376597 -0.000373405 -0.000370189 -0.000366948 -0.000363678 -0.000360375 -0.000357033 -0.000353647 -0.000350205 -0.000346697 -0.0003431 -0.000339382 -0.000335482 -0.000331271 -0.000326426 -0.00032004 -0.000309751 -0.000291525 -0.00026172 -0.00021839 -0.000160639 -8.79645E-05 -2.71078E-09 9.93269E-05 0.000204772 -0.0003476 -0.000344834 -0.000342085 -0.00033935 -0.000336625 -0.000333908 -0.000331197 -0.000328489 -0.00032578 -0.00032307 -0.000320356 -0.000317636 -0.000314907 -0.000312169 -0.000309418 -0.000306655 -0.000303875 -0.000301079 -0.000298263 -0.000295424 -0.00029256 -0.000289666 -0.000286735 -0.00028376 -0.000280729 -0.000277621 -0.000274404 -0.000271014 -0.000267304 -0.000262873 -0.000256511 -0.000245136 -0.00022421 -0.000190414 -0.000142213 -7.88906E-05 -1.78037E-09 9.11802E-05 0.000189826 -0.00027822 -0.00027584 -0.000273476 -0.000271126 -0.000268787 -0.000266457 -0.000264135 -0.000261817 -0.000259503 -0.000257189 -0.000254875 -0.000252559 -0.000250238 -0.000247913 -0.00024558 -0.00024324 -0.00024089 -0.00023853 -0.000236158 -0.000233771 -0.000231369 -0.000228948 -0.000226504 -0.000224033 -0.000221527 -0.000218975 -0.00021636 -0.000213649 -0.000210776 -0.000207572 -0.000203537 -0.000197042 -0.000184154 -0.00016009 -0.000122056 -6.88878E-05 -1.13659E-09 8.21225E-05 0.000173194 -0.000213351 -0.000211365 -0.000209394 -0.000207435 -0.000205488 -0.00020355 -0.00020162 -0.000199696 -0.000197776 -0.00019586 -0.000193945 -0.000192031 -0.000190116 -0.000188199 -0.000186279 -0.000184356 -0.000182428 -0.000180495 -0.000178554 -0.000176607 -0.00017465 -0.000172683 -0.000170703 -0.000168708 -0.000166693 -0.000164653 -0.000162578 -0.000160452 -0.000158245 -0.000155888 -0.000153193 -0.000149521 -0.00014267 -0.000127803 -0.000100289 -5.79767E-05 -6.92578E-10 7.21161E-05 0.000154785 -0.000154543 -0.000152955 -0.00015138 -0.000149815 -0.000148261 -0.000146715 -0.000145177 -0.000143645 -0.000142118 -0.000140595 -0.000139076 -0.000137558 -0.000136042 -0.000134526 -0.000133011 -0.000131494 -0.000129976 -0.000128456 -0.000126934 -0.000125408 -0.000123878 -0.000122344 -0.000120804 -0.000119256 -0.000117699 -0.000116129 -0.000114542 -0.000112931 -0.000111282 -0.000109566 -0.000107716 -0.000105519 -0.00010215 -9.46186E-05 -7.73332E-05 -4.62953E-05 -3.87432E-10 6.11693E-05 0.000134554 -0.000103734 -0.000102537 -0.000101351 -0.000100174 -9.90043E-05 -9.78423E-05 -9.66867E-05 -9.55367E-05 -9.43917E-05 -9.32509E-05 -9.21136E-05 -9.09792E-05 -8.98471E-05 -8.87168E-05 -8.75879E-05 -8.64599E-05 -8.53324E-05 -8.42052E-05 -8.30778E-05 -8.195E-05 -8.08214E-05 -7.96916E-05 -7.856E-05 -7.7426E-05 -7.62887E-05 -7.51466E-05 -7.39976E-05 -7.28385E-05 -7.16635E-05 -7.04618E-05 -6.92091E-05 -6.7839E-05 -6.61109E-05 -6.2918E-05 -5.42292E-05 -3.42287E-05 -1.78555E-10 4.93944E-05 0.000112565 -6.3055E-05 -6.22263E-05 -6.14045E-05 -6.05892E-05 -5.97799E-05 -5.8976E-05 -5.8177E-05 -5.73825E-05 -5.6592E-05 -5.58051E-05 -5.50213E-05 -5.42403E-05 -5.34617E-05 -5.26853E-05 -5.19107E-05 -5.11377E-05 -5.0366E-05 -4.95956E-05 -4.88262E-05 -4.80578E-05 -4.729E-05 -4.65229E-05 -4.57561E-05 -4.49894E-05 -4.42224E-05 -4.34546E-05 -4.26851E-05 -4.19127E-05 -4.11351E-05 -4.03484E-05 -3.95444E-05 -3.87029E-05 -3.77596E-05 -3.64278E-05 -3.31015E-05 -2.2604E-05 -3.62099E-11 3.71262E-05 8.91157E-05 -3.40287E-05 -3.35152E-05 -3.30061E-05 -3.25012E-05 -3.20001E-05 -3.15026E-05 -3.10083E-05 -3.05171E-05 -3.00287E-05 -2.95427E-05 -2.90591E-05 -2.85777E-05 -2.80981E-05 -2.76203E-05 -2.71441E-05 -2.66695E-05 -2.61962E-05 -2.57242E-05 -2.52535E-05 -2.47839E-05 -2.43155E-05 -2.38481E-05 -2.33818E-05 -2.29163E-05 -2.24517E-05 -2.19876E-05 -2.15239E-05 -2.10601E-05 -2.05954E-05 -2.01285E-05 -1.96568E-05 -1.91742E-05 -1.86639E-05 -1.80591E-05 -1.6953E-05 -1.27664E-05 6.03177E-11 2.5113E-05 6.5007E-05 -1.62228E-05 -1.5945E-05 -1.56695E-05 -1.53963E-05 -1.51253E-05 -1.48562E-05 -1.45891E-05 -1.43236E-05 -1.40598E-05 -1.37975E-05 -1.35366E-05 -1.3277E-05 -1.30186E-05 -1.27613E-05 -1.25052E-05 -1.225E-05 -1.19958E-05 -1.17426E-05 -1.14903E-05 -1.12388E-05 -1.09883E-05 -1.07386E-05 -1.04897E-05 -1.02417E-05 -9.99451E-06 -9.74804E-06 -9.50224E-06 -9.25696E-06 -9.01198E-06 -8.76688E-06 -8.52086E-06 -8.27216E-06 -8.01616E-06 -7.73658E-06 -7.34255E-06 -6.01061E-06 1.25428E-10 1.46443E-05 4.19929E-05 -6.89812E-06 -6.76814E-06 -6.6393E-06 -6.51154E-06 -6.38481E-06 -6.25903E-06 -6.13415E-06 -6.01012E-06 -5.88688E-06 -5.76439E-06 -5.64261E-06 -5.52148E-06 -5.40098E-06 -5.28108E-06 -5.16174E-06 -5.04294E-06 -4.92468E-06 -4.80692E-06 -4.68967E-06 -4.57291E-06 -4.45665E-06 -4.34089E-06 -4.22561E-06 -4.11082E-06 -3.99652E-06 -3.88268E-06 -3.7693E-06 -3.65632E-06 -3.54368E-06 -3.43125E-06 -3.31879E-06 -3.20578E-06 -3.09087E-06 -2.96968E-06 -2.8198E-06 -2.41827E-06 1.691E-10 7.13218E-06 2.30069E-05 -2.62169E-06 -2.56934E-06 -2.51745E-06 -2.46601E-06 -2.41498E-06 -2.36435E-06 -2.31409E-06 -2.26418E-06 -2.2146E-06 -2.16533E-06 -2.11636E-06 -2.06767E-06 -2.01925E-06 -1.97108E-06 -1.92315E-06 -1.87546E-06 -1.828E-06 -1.78077E-06 -1.73376E-06 -1.68696E-06 -1.64039E-06 -1.59404E-06 -1.54791E-06 -1.502E-06 -1.45631E-06 -1.41083E-06 -1.36557E-06 -1.32051E-06 -1.27562E-06 -1.23088E-06 -1.18619E-06 -1.14142E-06 -1.09614E-06 -1.04907E-06 -9.94E-07 -8.68956E-07 1.98211E-10 2.94522E-06 1.05708E-05 -8.75647E-07 -8.57638E-07 -8.39792E-07 -8.22099E-07 -8.04552E-07 -7.87143E-07 -7.69864E-07 -7.52708E-07 -7.3567E-07 -7.18741E-07 -7.01917E-07 -6.85193E-07 -6.68564E-07 -6.52026E-07 -6.35576E-07 -6.19211E-07 -6.02929E-07 -5.86728E-07 -5.70608E-07 -5.54568E-07 -5.38607E-07 -5.22727E-07 -5.06927E-07 -4.91208E-07 -4.7557E-07 -4.60011E-07 -4.44531E-07 -4.29125E-07 -4.13789E-07 -3.9851E-07 -3.83265E-07 -3.68006E-07 -3.52613E-07 -3.36705E-07 -3.1849E-07 -2.80308E-07 2.17471E-10 1.07972E-06 4.2271E-06 -2.53452E-07 -2.48168E-07 -2.42931E-07 -2.3774E-07 -2.32593E-07 -2.27486E-07 -2.22419E-07 -2.17388E-07 -2.12392E-07 -2.07429E-07 -2.02497E-07 -1.97596E-07 -1.92723E-07 -1.87877E-07 -1.83058E-07 -1.78265E-07 -1.73496E-07 -1.68753E-07 -1.64034E-07 -1.59339E-07 -1.54668E-07 -1.50022E-07 -1.454E-07 -1.40802E-07 -1.3623E-07 -1.31681E-07 -1.27156E-07 -1.22655E-07 -1.18174E-07 -1.13712E-07 -1.09261E-07 -1.04809E-07 -1.00322E-07 -9.56946E-08 -9.04375E-08 -7.97495E-08 2.30086E-10 3.56401E-07 1.53913E-06 -6.43971E-08 -6.30432E-08 -6.17017E-08 -6.0372E-08 -5.90535E-08 -5.77457E-08 -5.64479E-08 -5.51597E-08 -5.38805E-08 -5.26098E-08 -5.13474E-08 -5.00927E-08 -4.88455E-08 -4.76054E-08 -4.63723E-08 -4.51458E-08 -4.39259E-08 -4.27125E-08 -4.15054E-08 -4.03047E-08 -3.91103E-08 -3.79223E-08 -3.67406E-08 -3.55654E-08 -3.43965E-08 -3.3234E-08 -3.20778E-08 -3.09276E-08 -2.9783E-08 -2.86432E-08 -2.75067E-08 -2.63699E-08 -2.52246E-08 -2.40444E-08 -2.2707E-08 -2.00144E-08 2.38224E-10 1.04356E-07 5.13766E-07 -1.47869E-08 -1.44714E-08 -1.41587E-08 -1.38488E-08 -1.35415E-08 -1.32368E-08 -1.29343E-08 -1.26342E-08 -1.23361E-08 -1.20401E-08 -1.17459E-08 -1.14537E-08 -1.11631E-08 -1.08743E-08 -1.0587E-08 -1.03014E-08 -1.00173E-08 -9.73471E-09 -9.45364E-09 -9.17405E-09 -8.89597E-09 -8.61937E-09 -8.34429E-09 -8.07071E-09 -7.79864E-09 -7.52807E-09 -7.25897E-09 -6.9913E-09 -6.72495E-09 -6.45975E-09 -6.19531E-09 -5.93085E-09 -5.66443E-09 -5.38999E-09 -5.0792E-09 -4.45526E-09 2.43367E-10 2.72114E-08 1.53636E-07 -3.06364E-09 -2.99407E-09 -2.92514E-09 -2.85682E-09 -2.78909E-09 -2.7219E-09 -2.65524E-09 -2.58907E-09 -2.52337E-09 -2.45812E-09 -2.3933E-09 -2.32888E-09 -2.26485E-09 -2.20119E-09 -2.13789E-09 -2.07494E-09 -2.01234E-09 -1.95007E-09 -1.88813E-09 -1.82653E-09 -1.76526E-09 -1.70432E-09 -1.64371E-09 -1.58344E-09 -1.5235E-09 -1.4639E-09 -1.40462E-09 -1.34566E-09 -1.28699E-09 -1.22857E-09 -1.17033E-09 -1.11208E-09 -1.05341E-09 -9.92976E-10 -9.24551E-10 -7.87288E-10 2.46562E-10 6.60964E-09 4.08859E-08 -4.59787E-10 -4.44893E-10 -4.30137E-10 -4.15513E-10 -4.01013E-10 -3.86631E-10 -3.72361E-10 -3.58198E-10 -3.44135E-10 -3.30169E-10 -3.16293E-10 -3.02505E-10 -2.88799E-10 -2.75174E-10 -2.61627E-10 -2.48154E-10 -2.34755E-10 -2.21429E-10 -2.08173E-10 -1.9499E-10 -1.81877E-10 -1.68835E-10 -1.55865E-10 -1.42967E-10 -1.30141E-10 -1.17386E-10 -1.04701E-10 -9.20843E-11 -7.95305E-11 -6.70311E-11 -5.45686E-11 -4.21062E-11 -2.95524E-11 -1.66221E-11 -1.98318E-12 2.7376E-11 2.48505E-10 1.66495E-09 1.00106E-08 1.00253E-10 1.03395E-10 1.06508E-10 1.09593E-10 1.12652E-10 1.15686E-10 1.18696E-10 1.21684E-10 1.24651E-10 1.27597E-10 1.30524E-10 1.33433E-10 1.36324E-10 1.39198E-10 1.42056E-10 1.44898E-10 1.47724E-10 1.50536E-10 1.53332E-10 1.56113E-10 1.58879E-10 1.61629E-10 1.64365E-10 1.67086E-10 1.69791E-10 1.72482E-10 1.75157E-10 1.77818E-10 1.80466E-10 1.83103E-10 1.85731E-10 1.8836E-10 1.91007E-10 1.93735E-10 1.96822E-10 2.03013E-10 2.49646E-10 5.55104E-10 2.45029E-09 2.18989E-10 2.19647E-10 2.20299E-10 2.20946E-10 2.21586E-10 2.22222E-10 2.22852E-10 2.23478E-10 2.241E-10 2.24717E-10 2.2533E-10 2.25939E-10 2.26545E-10 2.27147E-10 2.27746E-10 2.28341E-10 2.28933E-10 2.29522E-10 2.30108E-10 2.3069E-10 2.3127E-10 2.31846E-10 2.32419E-10 2.32989E-10 2.33556E-10 2.34119E-10 2.3468E-10 2.35237E-10 2.35792E-10 2.36344E-10 2.36894E-10 2.37445E-10 2.38E-10 2.38571E-10 2.39217E-10 2.40514E-10 2.50281E-10 3.15106E-10 7.29091E-10 2.44072E-10 2.44209E-10 2.44345E-10 2.4448E-10 2.44614E-10 2.44747E-10 2.44878E-10 2.45009E-10 2.45139E-10 2.45268E-10 2.45396E-10 2.45523E-10 2.45649E-10 2.45775E-10 2.459E-10 2.46024E-10 2.46148E-10 2.46271E-10 2.46393E-10 2.46515E-10 2.46636E-10 2.46756E-10 2.46876E-10 2.46995E-10 2.47113E-10 2.47231E-10 2.47348E-10 2.47464E-10 2.4758E-10 2.47695E-10 2.4781E-10 2.47925E-10 2.48041E-10 2.4816E-10 2.48295E-10 2.48566E-10 2.50605E-10 2.64255E-10 3.52909E-10 2.4938E-10 2.49408E-10 2.49437E-10 2.49465E-10 2.49493E-10 2.4952E-10 2.49548E-10 2.49575E-10 2.49602E-10 2.49629E-10 2.49656E-10 2.49682E-10 2.49709E-10 2.49735E-10 2.49761E-10 2.49787E-10 2.49813E-10 2.49838E-10 2.49864E-10 2.49889E-10 2.49914E-10 2.49939E-10 2.49964E-10 2.49989E-10 2.50014E-10 2.50038E-10 2.50063E-10 2.50087E-10 2.50111E-10 2.50135E-10 2.50159E-10 2.50183E-10 2.50207E-10 2.50232E-10 2.5026E-10 2.50317E-10 2.50742E-10 2.53605E-10 2.72407E-10 *table -0.00157083 -0.00156275 -0.00155442 -0.00154602 -0.00153748 -0.00152879 -0.00151992 -0.00151087 -0.00150163 -0.00149216 -0.00148245 -0.00147247 -0.00146217 -0.00145152 -0.00144042 -0.00142874 -0.00141619 -0.00140223 -0.00138596 -0.00136616 -0.00134165 -0.00131152 -0.00127512 -0.00123207 -0.0011821 -0.00112503 -0.00106073 -0.000989087 -0.000910015 -0.000823438 -0.000729283 -0.000627485 -0.00051798 -0.000400707 -0.000275607 -0.000142621 -1.68509E-06 0.000141809 0.000282489 -0.00151296 -0.00150516 -0.00149715 -0.00148907 -0.00148085 -0.0014725 -0.00146399 -0.00145532 -0.00144646 -0.00143741 -0.00142814 -0.00141862 -0.00140883 -0.00139872 -0.00138823 -0.00137725 -0.00136562 -0.00135297 -0.00133861 -0.00132145 -0.00130021 -0.0012737 -0.00124107 -0.00120177 -0.00115544 -0.00110184 -0.00104082 -0.000972237 -0.000896 -0.000812018 -0.000720213 -0.000620511 -0.000512843 -0.000397143 -0.000273347 -0.00014139 -1.20804E-06 0.000141746 0.000282012 -0.00145349 -0.00144597 -0.00143826 -0.00143049 -0.0014226 -0.00141459 -0.00140643 -0.00139813 -0.00138966 -0.00138102 -0.00137218 -0.00136312 -0.00135381 -0.00134422 -0.00133431 -0.00132399 -0.00131314 -0.00130154 -0.00128871 -0.00127381 -0.00125558 -0.00123265 -0.0012039 -0.00116854 -0.00112608 -0.00107622 -0.00101875 -0.000953496 -0.000880356 -0.000799227 -0.000710018 -0.00061265 -0.000507047 -0.000393137 -0.000270849 -0.000140114 -8.63052E-07 0.000141394 0.000281113 -0.00139237 -0.00138513 -0.00137772 -0.00137027 -0.0013627 -0.00135502 -0.00134722 -0.00133928 -0.0013312 -0.00132295 -0.00131453 -0.00130592 -0.00129709 -0.001288 -0.00127864 -0.00126893 -0.00125879 -0.00124806 -0.00123646 -0.00122338 -0.00120777 -0.00118823 -0.00116337 -0.00113211 -0.00109377 -0.00104792 -0.000994268 -0.000932636 -0.000862878 -0.000784877 -0.000698535 -0.000603761 -0.000500472 -0.000388589 -0.000268035 -0.000138735 -6.14793E-07 0.000140767 0.000279789 -0.00132959 -0.00132263 -0.00131553 -0.00130838 -0.00130114 -0.00129379 -0.00128634 -0.00127876 -0.00127105 -0.0012632 -0.0012552 -0.00124702 -0.00123865 -0.00123006 -0.00122122 -0.00121209 -0.0012026 -0.00119264 -0.00118204 -0.00117039 -0.00115693 -0.00114043 -0.00111934 -0.00109227 -0.00105824 -0.00101666 -0.000967139 -0.000909429 -0.000843355 -0.000768783 -0.000685599 -0.000593701 -0.000492998 -0.000383403 -0.000264832 -0.000137203 -4.36838E-07 0.000139869 0.000278025 -0.00126515 -0.00125845 -0.00125168 -0.00124484 -0.00123792 -0.0012309 -0.00122379 -0.00121658 -0.00120924 -0.00120178 -0.00119418 -0.00118643 -0.00117851 -0.0011704 -0.00116207 -0.00115349 -0.00114461 -0.00113535 -0.00112559 -0.00111508 -0.00110333 -0.00108937 -0.00107174 -0.00104881 -0.00101926 -0.000982202 -0.000937105 -0.000883636 -0.000821572 -0.000750751 -0.00067104 -0.000582326 -0.000484506 -0.000377486 -0.000261172 -0.000135476 -3.09675E-07 0.000138699 0.000275797 -0.0011991 -0.00119268 -0.00118621 -0.00117968 -0.00117308 -0.00116639 -0.00115963 -0.00115276 -0.0011458 -0.00113872 -0.00113152 -0.00112419 -0.00111671 -0.00110907 -0.00110123 -0.00109318 -0.00108488 -0.00107627 -0.00106725 -0.00105769 -0.00104726 -0.00103531 -0.00102066 -0.00100166 -0.000976611 -0.000944287 -0.000903909 -0.000855012 -0.000797303 -0.000730579 -0.000654683 -0.000569486 -0.000474874 -0.00037074 -0.000256985 -0.000133509 -2.19042E-07 0.000137244 0.000273075 -0.00113148 -0.00112535 -0.00111918 -0.00111295 -0.00110667 -0.00110031 -0.00109389 -0.00108738 -0.00108078 -0.00107408 -0.00106728 -0.00106036 -0.00105331 -0.00104612 -0.00103877 -0.00103123 -0.00102348 -0.00101547 -0.00100714 -0.000998386 -0.000989013 -0.000978615 -0.000966368 -0.00095083 -0.000930156 -0.000902688 -0.000867296 -0.000823305 -0.000770311 -0.000708052 -0.000636339 -0.000555022 -0.00046397 -0.000363067 -0.0002522 -0.000131264 -1.54588E-07 0.000135489 0.000269819 -0.00106242 -0.00105658 -0.0010507 -0.00104479 -0.00103882 -0.0010328 -0.00102671 -0.00102056 -0.00101432 -0.001008 -0.00100159 -0.000995079 -0.000988454 -0.000981706 -0.00097482 -0.000967777 -0.000960553 -0.000953115 -0.000945418 -0.000937389 -0.000928903 -0.000919712 -0.000909296 -0.000896603 -0.000879918 -0.000857265 -0.000827055 -0.000788286 -0.000740375 -0.000682969 -0.00061583 -0.000538779 -0.000451668 -0.000354366 -0.00024675 -0.000128702 -1.08843E-07 0.00013341 0.000265981 -0.000992127 -0.000986578 -0.000981004 -0.000975397 -0.00096975 -0.000964056 -0.000958309 -0.000952503 -0.000946629 -0.000940684 -0.000934658 -0.000928546 -0.000922338 -0.000916024 -0.000909593 -0.000903029 -0.000896314 -0.000889421 -0.000882317 -0.00087495 -0.000867235 -0.000859021 -0.000849994 -0.000839481 -0.000826154 -0.000808024 -0.000783052 -0.000749766 -0.000707295 -0.000655136 -0.00059298 -0.000520607 -0.000437844 -0.000344542 -0.000240566 -0.000125785 -7.64378E-08 0.000130981 0.000261505 -0.000920749 -0.000915494 -0.000910222 -0.000904926 -0.000899599 -0.000894235 -0.000888826 -0.000883368 -0.000877855 -0.00087228 -0.000866637 -0.00086092 -0.000855122 -0.000849235 -0.000843248 -0.00083715 -0.000830926 -0.000824555 -0.000818012 -0.000811259 -0.000804239 -0.000796852 -0.000788913 -0.00078002 -0.000769299 -0.000755102 -0.000735193 -0.000707546 -0.000670841 -0.000624331 -0.000567587 -0.000500329 -0.000422351 -0.000333482 -0.00023357 -0.000122473 -5.35219E-08 0.000128174 0.000256333 -0.000848469 -0.000843512 -0.000838546 -0.000833563 -0.000828557 -0.000823523 -0.000818453 -0.000813344 -0.000808188 -0.000802981 -0.000797718 -0.000792393 -0.000787 -0.000781531 -0.00077598 -0.000770336 -0.000764587 -0.000758719 -0.000752711 -0.000746535 -0.000740151 -0.000733494 -0.000726448 -0.000718781 -0.000709975 -0.0006989 -0.000683548 -0.000661492 -0.000630803 -0.00059033 -0.00053944 -0.000477761 -0.000405036 -0.000321067 -0.000225681 -0.000118722 -3.73447E-08 0.000124954 0.000250404 -0.000775513 -0.000770859 -0.000766202 -0.000761535 -0.000756853 -0.00075215 -0.000747421 -0.000742659 -0.000737861 -0.000733022 -0.000728136 -0.000723198 -0.000718205 -0.000713149 -0.000708025 -0.000702824 -0.000697539 -0.000692156 -0.00068666 -0.000681031 -0.00067524 -0.000669243 -0.000662966 -0.000656272 -0.000648868 -0.000640081 -0.000628456 -0.000611612 -0.000587022 -0.00055292 -0.000508327 -0.000452709 -0.000385736 -0.000307168 -0.00021681 -0.000114485 -2.59446E-08 0.000121282 0.000243644 -0.000702155 -0.00069781 -0.000693468 -0.000689121 -0.000684766 -0.000680397 -0.000676009 -0.000671596 -0.000667156 -0.000662682 -0.000658171 -0.000653619 -0.000649021 -0.000644373 -0.000639669 -0.000634903 -0.000630068 -0.000625156 -0.000620154 -0.000615047 -0.000609814 -0.000604425 -0.000598831 -0.00059295 -0.000586616 -0.000579457 -0.000570592 -0.00055817 -0.000539453 -0.000511929 -0.000474044 -0.00042498 -0.000364283 -0.000291654 -0.000206863 -0.000109713 -1.79255E-08 0.000117115 0.000235974 -0.000628729 -0.0006247 -0.000620677 -0.000616656 -0.000612631 -0.000608599 -0.000604554 -0.000600492 -0.00059641 -0.000592302 -0.000588165 -0.000583996 -0.000579791 -0.000575545 -0.000571255 -0.000566916 -0.000562522 -0.000558067 -0.000553542 -0.000548935 -0.000544232 -0.00053941 -0.00053444 -0.000529267 -0.000523796 -0.000517827 -0.000510882 -0.000501804 -0.000488274 -0.000467271 -0.000436415 -0.000394386 -0.000340507 -0.000274385 -0.000195743 -0.000104354 -1.22953E-08 0.000112404 0.000227306 -0.000555633 -0.000551926 -0.00054823 -0.00054454 -0.000540851 -0.00053716 -0.000533461 -0.000529752 -0.000526028 -0.000522287 -0.000518524 -0.000514736 -0.00051092 -0.000507074 -0.000503193 -0.000499273 -0.000495312 -0.000491302 -0.000487239 -0.000483114 -0.000478916 -0.00047463 -0.000470235 -0.000465698 -0.000460961 -0.000455915 -0.000450312 -0.000443533 -0.000434058 -0.000419053 -0.000395335 -0.000360762 -0.000314245 -0.000255223 -0.000183348 -9.83527E-05 -8.35033E-09 0.000107099 0.000217545 -0.000483344 -0.000479969 -0.000476607 -0.000473254 -0.000469907 -0.000466561 -0.000463212 -0.000459858 -0.000456496 -0.000453121 -0.000449731 -0.000446324 -0.000442896 -0.000439445 -0.000435968 -0.000432463 -0.000428925 -0.000425352 -0.000421738 -0.000418079 -0.000414365 -0.000410588 -0.000406732 -0.000402776 -0.000398686 -0.0003944 -0.000389789 -0.000384548 -0.000377865 -0.000367749 -0.000350853 -0.000323998 -0.000285351 -0.000234035 -0.000169576 -9.16533E-05 -5.59202E-09 0.000101144 0.000206592 -0.000412436 -0.000409402 -0.000406382 -0.000403374 -0.000400373 -0.000397378 -0.000394384 -0.000391388 -0.000388389 -0.000385382 -0.000382367 -0.000379339 -0.000376297 -0.000373239 -0.000370163 -0.000367065 -0.000363945 -0.000360799 -0.000357623 -0.000354414 -0.000351167 -0.000347875 -0.000344528 -0.000341112 -0.000337607 -0.000333976 -0.000330153 -0.000325988 -0.000321097 -0.000314406 -0.000303341 -0.00028411 -0.000253731 -0.000210706 -0.000154332 -8.41997E-05 -3.66785E-09 9.4484E-05 0.000194341 -0.000343599 -0.000340914 -0.000338245 -0.000335589 -0.000332942 -0.000330302 -0.000327667 -0.000325034 -0.0003224 -0.000319764 -0.000317122 -0.000314474 -0.000311817 -0.000309149 -0.000306469 -0.000303775 -0.000301065 -0.000298337 -0.000295589 -0.000292819 -0.000290022 -0.000287195 -0.00028433 -0.00028142 -0.000278452 -0.000275405 -0.000272243 -0.000268892 -0.00026518 -0.00026062 -0.000253777 -0.00024139 -0.000219392 -0.000185167 -0.00013754 -7.59409E-05 -2.32888E-09 8.70605E-05 0.000180687 -0.000277671 -0.000275346 -0.000273036 -0.000270739 -0.000268452 -0.000266174 -0.000263902 -0.000261634 -0.000259368 -0.000257103 -0.000254836 -0.000252567 -0.000250293 -0.000248013 -0.000245725 -0.000243429 -0.000241123 -0.000238806 -0.000236476 -0.000234131 -0.00023177 -0.000229389 -0.000226985 -0.000224551 -0.000222082 -0.000219565 -0.00021698 -0.000214291 -0.000211421 -0.000208165 -0.000203902 -0.000196709 -0.000182582 -0.000157446 -0.000119164 -6.68408E-05 -1.39964E-09 7.88206E-05 0.000165525 -0.000215697 -0.000213739 -0.000211795 -0.000209863 -0.000207942 -0.00020603 -0.000204124 -0.000202224 -0.000200328 -0.000198435 -0.000196543 -0.00019465 -0.000192756 -0.00019086 -0.000188961 -0.000187057 -0.000185147 -0.000183232 -0.000181309 -0.000179378 -0.000177437 -0.000175485 -0.000173519 -0.000171536 -0.000169533 -0.000167502 -0.000165434 -0.00016331 -0.000161095 -0.000158707 -0.000155908 -0.000151889 -0.000144081 -0.000127792 -9.92704E-05 -5.69E-05 -7.56644E-10 6.97239E-05 0.000148765 -0.000159 -0.000157414 -0.00015584 -0.000154276 -0.000152723 -0.000151177 -0.000149639 -0.000148107 -0.000146579 -0.000145055 -0.000143534 -0.000142015 -0.000140496 -0.000138977 -0.000137458 -0.000135937 -0.000134415 -0.00013289 -0.000131361 -0.000129829 -0.000128292 -0.000126749 -0.0001252 -0.000123643 -0.000122074 -0.000120492 -0.000118891 -0.000117262 -0.000115589 -0.00011384 -0.000111928 -0.000109577 -0.000105717 -9.69474E-05 -7.81401E-05 -4.62036E-05 -3.13156E-10 5.97619E-05 0.000130353 -0.000109254 -0.000108037 -0.000106829 -0.000105631 -0.00010444 -0.000103257 -0.00010208 -0.000100908 -9.97414E-05 -9.85786E-05 -9.74191E-05 -9.62622E-05 -9.51073E-05 -9.39539E-05 -9.28015E-05 -9.16496E-05 -9.04978E-05 -8.93458E-05 -8.81933E-05 -8.70398E-05 -8.5885E-05 -8.47284E-05 -8.35695E-05 -8.24074E-05 -8.1241E-05 -8.00689E-05 -7.88885E-05 -7.76961E-05 -7.64849E-05 -7.52419E-05 -7.39366E-05 -7.24822E-05 -7.0552E-05 -6.6694E-05 -5.65215E-05 -3.50214E-05 -8.36872E-12 4.90015E-05 0.000110308 -6.84163E-05 -6.75507E-05 -6.66924E-05 -6.58408E-05 -6.49953E-05 -6.41553E-05 -6.33204E-05 -6.249E-05 -6.16636E-05 -6.08408E-05 -6.00211E-05 -5.9204E-05 -5.83893E-05 -5.75765E-05 -5.67655E-05 -5.59558E-05 -5.51473E-05 -5.43398E-05 -5.35332E-05 -5.27271E-05 -5.19215E-05 -5.11161E-05 -5.03108E-05 -4.95052E-05 -4.86987E-05 -4.78909E-05 -4.70807E-05 -4.62664E-05 -4.54456E-05 -4.46133E-05 -4.37592E-05 -4.28568E-05 -4.18186E-05 -4.02404E-05 -3.60498E-05 -2.39784E-05 2.00259E-10 3.76746E-05 8.88259E-05 -3.81829E-05 -3.76284E-05 -3.70788E-05 -3.65335E-05 -3.59924E-05 -3.5455E-05 -3.49211E-05 -3.43905E-05 -3.38627E-05 -3.33376E-05 -3.28149E-05 -3.22943E-05 -3.17758E-05 -3.1259E-05 -3.07438E-05 -3.02302E-05 -2.97178E-05 -2.92068E-05 -2.86969E-05 -2.81881E-05 -2.76804E-05 -2.71737E-05 -2.66678E-05 -2.61627E-05 -2.56583E-05 -2.51542E-05 -2.46502E-05 -2.41457E-05 -2.36398E-05 -2.31307E-05 -2.26152E-05 -2.20854E-05 -2.15185E-05 -2.08202E-05 -1.94128E-05 -1.42018E-05 3.42431E-10 2.63415E-05 6.64746E-05 -1.87945E-05 -1.84829E-05 -1.8174E-05 -1.78677E-05 -1.75637E-05 -1.7262E-05 -1.69623E-05 -1.66646E-05 -1.63686E-05 -1.60743E-05 -1.57815E-05 -1.54901E-05 -1.52001E-05 -1.49113E-05 -1.46236E-05 -1.43371E-05 -1.40515E-05 -1.3767E-05 -1.34834E-05 -1.32007E-05 -1.2919E-05 -1.26382E-05 -1.23582E-05 -1.20791E-05 -1.18008E-05 -1.15232E-05 -1.12463E-05 -1.09698E-05 -1.06935E-05 -1.04169E-05 -1.01388E-05 -9.85707E-06 -9.56555E-06 -9.24197E-06 -8.75783E-06 -7.02349E-06 4.38851E-10 1.60614E-05 4.45767E-05 -8.22E-06 -8.06851E-06 -7.91835E-06 -7.76945E-06 -7.62174E-06 -7.47513E-06 -7.32956E-06 -7.18497E-06 -7.0413E-06 -6.89849E-06 -6.75648E-06 -6.61523E-06 -6.47469E-06 -6.33483E-06 -6.19561E-06 -6.05701E-06 -5.919E-06 -5.78158E-06 -5.64472E-06 -5.50841E-06 -5.37267E-06 -5.23747E-06 -5.10283E-06 -4.96873E-06 -4.83517E-06 -4.70213E-06 -4.56958E-06 -4.43747E-06 -4.30571E-06 -4.17415E-06 -4.04246E-06 -3.90998E-06 -3.77498E-06 -3.63166E-06 -3.44971E-06 -2.92982E-06 5.03914E-10 8.21277E-06 2.55936E-05 -3.21824E-06 -3.15476E-06 -3.09184E-06 -3.02945E-06 -2.96757E-06 -2.90616E-06 -2.8452E-06 -2.78466E-06 -2.72452E-06 -2.66475E-06 -2.60534E-06 -2.54627E-06 -2.48751E-06 -2.42906E-06 -2.3709E-06 -2.31302E-06 -2.25542E-06 -2.19808E-06 -2.14101E-06 -2.0842E-06 -2.02765E-06 -1.97136E-06 -1.91533E-06 -1.85957E-06 -1.80407E-06 -1.74882E-06 -1.69382E-06 -1.63906E-06 -1.5845E-06 -1.53011E-06 -1.47578E-06 -1.4213E-06 -1.36617E-06 -1.30872E-06 -1.24078E-06 -1.08064E-06 5.47586E-10 3.52251E-06 1.22758E-05 -1.11334E-06 -1.09057E-06 -1.068E-06 -1.04562E-06 -1.02343E-06 -1.00141E-06 -9.79558E-07 -9.57859E-07 -9.36307E-07 -9.14893E-07 -8.9361E-07 -8.72453E-07 -8.51414E-07 -8.3049E-07 -8.09675E-07 -7.88967E-07 -7.68363E-07 -7.47861E-07 -7.27459E-07 -7.07157E-07 -6.86955E-07 -6.66854E-07 -6.46853E-07 -6.26952E-07 -6.07153E-07 -5.87453E-07 -5.67851E-07 -5.48343E-07 -5.2892E-07 -5.09569E-07 -4.90259E-07 -4.70928E-07 -4.51422E-07 -4.31247E-07 -4.08058E-07 -3.58632E-07 5.76722E-10 1.32584E-06 5.0512E-06 -3.33463E-07 -3.2652E-07 -3.1964E-07 -3.1282E-07 -3.06056E-07 -2.99346E-07 -2.92687E-07 -2.86076E-07 -2.79511E-07 -2.72989E-07 -2.66508E-07 -2.60066E-07 -2.53661E-07 -2.47292E-07 -2.40958E-07 -2.34657E-07 -2.28389E-07 -2.22154E-07 -2.1595E-07 -2.09778E-07 -2.03637E-07 -1.97528E-07 -1.91451E-07 -1.85406E-07 -1.79393E-07 -1.73412E-07 -1.67462E-07 -1.61543E-07 -1.55651E-07 -1.49782E-07 -1.4393E-07 -1.38074E-07 -1.32173E-07 -1.26087E-07 -1.19164E-07 -1.04999E-07 5.96013E-10 4.49828E-07 1.87476E-06 -8.65666E-08 -8.4742E-08 -8.29341E-08 -8.1142E-08 -7.9365E-08 -7.76023E-08 -7.58531E-08 -7.41167E-08 -7.23925E-08 -7.06798E-08 -6.89781E-08 -6.72868E-08 -6.56055E-08 -6.39339E-08 -6.22715E-08 -6.06181E-08 -5.89735E-08 -5.73376E-08 -5.57103E-08 -5.40914E-08 -5.24811E-08 -5.08793E-08 -4.92861E-08 -4.77016E-08 -4.61256E-08 -4.45582E-08 -4.29992E-08 -4.14483E-08 -3.9905E-08 -3.83683E-08 -3.68358E-08 -3.53033E-08 -3.37592E-08 -3.21685E-08 -3.03654E-08 -2.67256E-08 6.08656E-10 1.35874E-07 6.39924E-07 -1.98418E-08 -1.94123E-08 -1.89868E-08 -1.8565E-08 -1.81468E-08 -1.7732E-08 -1.73204E-08 -1.69118E-08 -1.65061E-08 -1.61032E-08 -1.57028E-08 -1.5305E-08 -1.49095E-08 -1.45164E-08 -1.41254E-08 -1.37366E-08 -1.33498E-08 -1.29652E-08 -1.25826E-08 -1.2202E-08 -1.18235E-08 -1.14469E-08 -1.10725E-08 -1.07001E-08 -1.03297E-08 -9.9614E-09 -9.5951E-09 -9.23074E-09 -8.8682E-09 -8.50721E-09 -8.14729E-09 -7.78737E-09 -7.42482E-09 -7.05143E-09 -6.62864E-09 -5.77857E-09 6.16811E-10 3.64558E-08 1.96828E-07 -3.87274E-09 -3.77826E-09 -3.68465E-09 -3.59187E-09 -3.49988E-09 -3.40864E-09 -3.31811E-09 -3.22825E-09 -3.13902E-09 -3.05041E-09 -2.96237E-09 -2.87488E-09 -2.78792E-09 -2.70146E-09 -2.6155E-09 -2.53001E-09 -2.44498E-09 -2.36041E-09 -2.2763E-09 -2.19263E-09 -2.10942E-09 -2.02666E-09 -1.94435E-09 -1.86249E-09 -1.78109E-09 -1.70015E-09 -1.61964E-09 -1.53957E-09 -1.4599E-09 -1.38058E-09 -1.3015E-09 -1.22242E-09 -1.14277E-09 -1.06074E-09 -9.67893E-10 -7.81414E-10 6.2196E-10 9.15926E-09 5.37954E-08 -3.27594E-10 -3.07555E-10 -2.87701E-10 -2.68023E-10 -2.48513E-10 -2.29162E-10 -2.09962E-10 -1.90905E-10 -1.71984E-10 -1.53191E-10 -1.34521E-10 -1.15969E-10 -9.75281E-11 -7.91953E-11 -6.09667E-11 -4.28392E-11 -2.48108E-11 -6.87978E-12 1.09549E-11 2.86937E-11 4.63366E-11 6.38835E-11 8.1334E-11 9.86877E-11 1.15945E-10 1.33105E-10 1.50171E-10 1.67145E-10 1.84033E-10 2.00848E-10 2.17612E-10 2.34374E-10 2.51257E-10 2.68642E-10 2.8832E-10 3.27828E-10 6.25156E-10 2.52168E-09 1.35325E-08 4.28737E-10 4.32911E-10 4.37045E-10 4.41143E-10 4.45206E-10 4.49236E-10 4.53234E-10 4.57203E-10 4.61143E-10 4.65057E-10 4.68944E-10 4.72808E-10 4.76648E-10 4.80465E-10 4.84261E-10 4.88036E-10 4.9179E-10 4.95523E-10 4.99237E-10 5.0293E-10 5.06604E-10 5.10258E-10 5.13891E-10 5.17504E-10 5.21097E-10 5.2467E-10 5.28223E-10 5.31757E-10 5.35274E-10 5.38774E-10 5.42265E-10 5.45754E-10 5.49269E-10 5.52889E-10 5.56985E-10 5.65209E-10 6.27099E-10 1.03226E-09 3.53265E-09 5.87297E-10 5.88159E-10 5.89012E-10 5.89858E-10 5.90697E-10 5.91529E-10 5.92354E-10 5.93173E-10 5.93987E-10 5.94795E-10 5.95597E-10 5.96395E-10 5.97187E-10 5.97975E-10 5.98759E-10 5.99538E-10 6.00313E-10 6.01083E-10 6.0185E-10 6.02612E-10 6.03371E-10 6.04125E-10 6.04875E-10 6.05621E-10 6.06362E-10 6.071E-10 6.07833E-10 6.08563E-10 6.09288E-10 6.10011E-10 6.10731E-10 6.11452E-10 6.12177E-10 6.12924E-10 6.1377E-10 6.15467E-10 6.2824E-10 7.13089E-10 1.25459E-09 6.20459E-10 6.20636E-10 6.20812E-10 6.20986E-10 6.21158E-10 6.21329E-10 6.21499E-10 6.21667E-10 6.21834E-10 6.22001E-10 6.22165E-10 6.22329E-10 6.22492E-10 6.22654E-10 6.22815E-10 6.22976E-10 6.23135E-10 6.23293E-10 6.23451E-10 6.23608E-10 6.23764E-10 6.23919E-10 6.24073E-10 6.24226E-10 6.24378E-10 6.2453E-10 6.24681E-10 6.24831E-10 6.2498E-10 6.25129E-10 6.25277E-10 6.25425E-10 6.25574E-10 6.25727E-10 6.25901E-10 6.2625E-10 6.28876E-10 6.46473E-10 7.60903E-10 6.27472E-10 6.27509E-10 6.27545E-10 6.2758E-10 6.27616E-10 6.27651E-10 6.27686E-10 6.2772E-10 6.27754E-10 6.27789E-10 6.27822E-10 6.27856E-10 6.27889E-10 6.27923E-10 6.27956E-10 6.27989E-10 6.28021E-10 6.28054E-10 6.28086E-10 6.28118E-10 6.2815E-10 6.28182E-10 6.28214E-10 6.28245E-10 6.28276E-10 6.28308E-10 6.28338E-10 6.28369E-10 6.284E-10 6.2843E-10 6.28461E-10 6.28491E-10 6.28522E-10 6.28553E-10 6.28589E-10 6.2866E-10 6.29199E-10 6.32832E-10 6.56725E-10 6.28982E-10 6.28989E-10 6.28997E-10 6.29004E-10 6.29011E-10 6.29018E-10 6.29026E-10 6.29033E-10 6.2904E-10 6.29047E-10 6.29054E-10 6.29061E-10 6.29067E-10 6.29074E-10 6.29081E-10 6.29088E-10 6.29094E-10 6.29101E-10 6.29108E-10 6.29114E-10 6.29121E-10 6.29127E-10 6.29134E-10 6.2914E-10 6.29147E-10 6.29153E-10 6.29159E-10 6.29166E-10 6.29172E-10 6.29178E-10 6.29184E-10 6.29191E-10 6.29197E-10 6.29203E-10 6.29211E-10 6.29225E-10 6.29336E-10 6.30084E-10 6.35044E-10 *table -0.00145337 -0.0014459 -0.00143822 -0.00143049 -0.00142262 -0.00141462 -0.00140648 -0.00139817 -0.0013897 -0.00138103 -0.00137216 -0.00136306 -0.00135369 -0.00134401 -0.00133397 -0.00132346 -0.00131227 -0.0013 -0.0012859 -0.00126889 -0.00124774 -0.00122142 -0.00118922 -0.00115066 -0.00110546 -0.00105341 -0.000994379 -0.000928248 -0.000854931 -0.000774353 -0.000686444 -0.000591141 -0.000488383 -0.000378113 -0.000260276 -0.000134817 -1.6815E-06 0.00013403 0.000267221 -0.00139624 -0.00138904 -0.00138166 -0.00137422 -0.00136666 -0.00135899 -0.00135118 -0.00134323 -0.00133513 -0.00132685 -0.00131839 -0.00130972 -0.00130081 -0.00129164 -0.00128215 -0.00127226 -0.00126186 -0.00125066 -0.00123816 -0.00122345 -0.00120529 -0.00118244 -0.00115392 -0.00111908 -0.00107751 -0.00102897 -0.000973254 -0.000910245 -0.000839836 -0.000761941 -0.000676482 -0.00058339 -0.000482597 -0.000374042 -0.000257665 -0.000133405 -1.20527E-06 0.000133786 0.000266396 -0.00133766 -0.00133073 -0.00132364 -0.0013165 -0.00130926 -0.0013019 -0.00129443 -0.00128683 -0.00127909 -0.0012712 -0.00126314 -0.00125489 -0.00124643 -0.00123774 -0.00122878 -0.00121948 -0.00120976 -0.00119945 -0.00118821 -0.00117539 -0.00115989 -0.00114036 -0.00111557 -0.00108461 -0.00104691 -0.00100211 -0.000949979 -0.000890354 -0.000823112 -0.000748153 -0.00066539 -0.000574744 -0.000476144 -0.000369521 -0.000254809 -0.000131943 -8.6086E-07 0.000133246 0.000265139 -0.00127762 -0.00127096 -0.00126416 -0.00125732 -0.00125038 -0.00124335 -0.00123621 -0.00122895 -0.00122157 -0.00121405 -0.00120638 -0.00119855 -0.00119054 -0.00118231 -0.00117385 -0.00116511 -0.00115601 -0.00114646 -0.00113623 -0.00112489 -0.00111162 -0.00109514 -0.00107401 -0.00104703 -0.0010134 -0.000972597 -0.00092432 -0.000868358 -0.00080456 -0.000732809 -0.000653006 -0.000565065 -0.000468905 -0.000364451 -0.000251631 -0.000130374 -6.13019E-07 0.000132427 0.000263445 -0.00121611 -0.00120973 -0.00120322 -0.00119667 -0.00119003 -0.00118332 -0.00117651 -0.00116959 -0.00116257 -0.00115542 -0.00114814 -0.00114071 -0.00113313 -0.00112536 -0.00111738 -0.00110916 -0.00110065 -0.00109177 -0.00108239 -0.00107222 -0.00106071 -0.00104683 -0.00102914 -0.00100615 -0.000976743 -0.000940186 -0.000896041 -0.000844034 -0.000783976 -0.000715726 -0.000639171 -0.000554213 -0.000460763 -0.000358738 -0.00024806 -0.00012865 -4.35361E-07 0.000131335 0.000261303 -0.00115317 -0.00114702 -0.00114083 -0.00113457 -0.00112825 -0.00112184 -0.00111536 -0.00110878 -0.00110211 -0.00109533 -0.00108843 -0.00108141 -0.00107424 -0.00106691 -0.0010594 -0.00105169 -0.00104373 -0.00103547 -0.00102682 -0.00101759 -0.00100745 -0.000995666 -0.000981002 -0.000961854 -0.000936745 -0.000904639 -0.000864904 -0.000817157 -0.000761152 -0.000696718 -0.00062372 -0.000542048 -0.000451602 -0.000352291 -0.000244027 -0.000126727 -3.08409E-07 0.000129965 0.000258691 -0.00108883 -0.00108296 -0.00107705 -0.00107108 -0.00106506 -0.00105897 -0.00105281 -0.00104658 -0.00104025 -0.00103383 -0.00102731 -0.00102068 -0.00101392 -0.00100702 -0.000999973 -0.000992745 -0.000985311 -0.000977628 -0.00096963 -0.000961207 -0.000952139 -0.00094197 -0.000929789 -0.000914122 -0.000893247 -0.000865739 -0.000830672 -0.000787494 -0.000735873 -0.00067559 -0.000606484 -0.000528426 -0.000441303 -0.000345015 -0.000239466 -0.000124563 -2.17924E-07 0.000128309 0.000255577 -0.00102316 -0.00101757 -0.00101194 -0.00100627 -0.00100055 -0.00099478 -0.000988945 -0.000983041 -0.000977062 -0.000971002 -0.000964852 -0.000958604 -0.000952249 -0.000945776 -0.00093917 -0.000932412 -0.000925481 -0.000918343 -0.000910951 -0.000903231 -0.000895044 -0.000886114 -0.000875851 -0.000863114 -0.000846194 -0.000823305 -0.000793116 -0.000754811 -0.000707916 -0.00065214 -0.000587283 -0.000513193 -0.000429741 -0.000336814 -0.000234308 -0.00012212 -1.53574E-07 0.000126349 0.000251925 -0.000956317 -0.000951002 -0.000945661 -0.000940287 -0.000934874 -0.000929414 -0.000923902 -0.000918332 -0.000912697 -0.000906992 -0.00090121 -0.000895343 -0.000889385 -0.000883324 -0.000877151 -0.00087085 -0.000864402 -0.000857783 -0.000850958 -0.000843874 -0.000836443 -0.000828494 -0.000819675 -0.000809224 -0.000795732 -0.000777276 -0.000752071 -0.000718906 -0.000677077 -0.000626177 -0.000565947 -0.000496201 -0.000416793 -0.000327593 -0.000228486 -0.00011936 -1.07902E-07 0.000124065 0.000247688 -0.000888519 -0.000883484 -0.000878431 -0.000873353 -0.000868244 -0.000863097 -0.000857908 -0.000852669 -0.000847376 -0.000842023 -0.000836605 -0.000831114 -0.000825545 -0.00081989 -0.000814139 -0.00080828 -0.000802299 -0.000796177 -0.000789887 -0.000783392 -0.00077663 -0.000769498 -0.000761784 -0.000753033 -0.000742266 -0.000727776 -0.00070747 -0.000679628 -0.00064318 -0.000597526 -0.000542315 -0.000477312 -0.000402343 -0.000317261 -0.000221937 -0.000116247 -7.55473E-08 0.000121431 0.000242813 -0.000819932 -0.00081518 -0.000810417 -0.000805637 -0.000800833 -0.000796 -0.000791132 -0.000786224 -0.000781272 -0.000776269 -0.000771211 -0.000766092 -0.000760907 -0.00075565 -0.000750312 -0.000744884 -0.000739356 -0.000733711 -0.000727929 -0.000721984 -0.000715834 -0.00070941 -0.000702585 -0.000695096 -0.000686351 -0.000675102 -0.000659326 -0.000636833 -0.000606026 -0.000565984 -0.000516197 -0.000456358 -0.000386252 -0.000305711 -0.000214586 -0.000112743 -5.26665E-08 0.000118422 0.000237243 -0.000750762 -0.000746296 -0.000741826 -0.000737346 -0.000732849 -0.00072833 -0.000723785 -0.000719208 -0.000714594 -0.000709939 -0.000705239 -0.000700488 -0.000695683 -0.000690817 -0.000685884 -0.000680877 -0.000675787 -0.000670603 -0.000665309 -0.000659884 -0.0006543 -0.000648511 -0.000642437 -0.000635927 -0.000628644 -0.000619818 -0.000607873 -0.000590485 -0.000565456 -0.000531353 -0.000487401 -0.000433167 -0.000368376 -0.000292828 -0.000206354 -0.000108804 -3.65136E-08 0.000115002 0.000230922 -0.000681254 -0.00067708 -0.000672907 -0.000668729 -0.000664542 -0.000660339 -0.000656117 -0.00065187 -0.000647595 -0.000643287 -0.000638942 -0.000634557 -0.000630126 -0.000625646 -0.000621112 -0.000616517 -0.000611855 -0.000607116 -0.000602291 -0.000597362 -0.000592309 -0.000587102 -0.000581689 -0.000575979 -0.000569786 -0.000562679 -0.000553652 -0.000540747 -0.00052139 -0.000493467 -0.000455741 -0.000407564 -0.000348564 -0.000278494 -0.000197159 -0.000104388 -2.51303E-08 0.000111136 0.000223779 -0.000611706 -0.000607829 -0.000603958 -0.000600087 -0.000596212 -0.000592328 -0.00058843 -0.000584515 -0.000580578 -0.000576616 -0.000572626 -0.000568603 -0.000564544 -0.000560445 -0.000556302 -0.000552112 -0.000547867 -0.000543562 -0.000539188 -0.000534734 -0.000530185 -0.000525519 -0.000520702 -0.00051568 -0.000510346 -0.000504469 -0.000497491 -0.000488103 -0.000473922 -0.000452217 -0.000421048 -0.000379376 -0.000326664 -0.000262586 -0.000186912 -9.94467E-05 -1.71227E-08 0.000106782 0.000215738 -0.000542473 -0.0005389 -0.000535336 -0.000531777 -0.000528218 -0.000524655 -0.000521084 -0.000517502 -0.000513904 -0.000510288 -0.000506651 -0.000502988 -0.000499297 -0.000495576 -0.00049182 -0.000488027 -0.000484191 -0.000480308 -0.000476372 -0.000472374 -0.000468304 -0.000464147 -0.000459881 -0.00045547 -0.000450852 -0.000445904 -0.000440336 -0.00043342 -0.000423458 -0.00040764 -0.000383204 -0.000348449 -0.000302524 -0.000244978 -0.000175522 -9.39319E-05 -1.15004E-08 0.000101894 0.000206716 -0.000473979 -0.000470717 -0.000467467 -0.000464224 -0.000460986 -0.000457748 -0.000454507 -0.000451259 -0.000448002 -0.000444732 -0.000441446 -0.000438143 -0.000434818 -0.000431471 -0.000428097 -0.000424694 -0.000421259 -0.000417789 -0.000414278 -0.000410721 -0.000407111 -0.000403436 -0.000399682 -0.000395828 -0.000391835 -0.000387635 -0.00038308 -0.000377807 -0.000370856 -0.000360051 -0.000342202 -0.000314664 -0.000276008 -0.000225548 -0.000162899 -8.77927E-05 -7.56079E-09 9.64251E-05 0.000196625 -0.000406727 -0.000403785 -0.000400855 -0.000397936 -0.000395023 -0.000392114 -0.000389206 -0.000386295 -0.00038338 -0.000380457 -0.000377523 -0.000374577 -0.000371617 -0.00036864 -0.000365643 -0.000362626 -0.000359585 -0.000356518 -0.000353422 -0.000350292 -0.000347123 -0.000343908 -0.000340638 -0.000337298 -0.000333865 -0.000330301 -0.000326529 -0.000322374 -0.000317371 -0.000310251 -0.000298276 -0.000277994 -0.000247014 -0.000204186 -0.000148953 -8.09782E-05 -4.80613E-09 9.03245E-05 0.000185372 -0.000341322 -0.000338706 -0.000336105 -0.000333515 -0.000330934 -0.000328359 -0.000325787 -0.000323216 -0.000320644 -0.000318069 -0.000315487 -0.000312899 -0.0003103 -0.000307691 -0.000305068 -0.000302431 -0.000299778 -0.000297106 -0.000294413 -0.000291697 -0.000288955 -0.00028618 -0.000283368 -0.000280509 -0.000277589 -0.000274586 -0.00027146 -0.000268126 -0.000264373 -0.000259604 -0.000252132 -0.000238611 -0.000215515 -0.000180815 -0.000133609 -7.34406E-05 -2.88442E-09 8.35406E-05 0.000172862 -0.000278491 -0.000276211 -0.000273945 -0.000271691 -0.000269446 -0.000267209 -0.000264978 -0.00026275 -0.000260523 -0.000258296 -0.000256067 -0.000253834 -0.000251596 -0.000249352 -0.000247099 -0.000244837 -0.000242564 -0.00024028 -0.000237982 -0.000235668 -0.000233337 -0.000230986 -0.00022861 -0.000226203 -0.000223759 -0.000221263 -0.000218695 -0.000216013 -0.000213123 -0.000209772 -0.000205181 -0.000197117 -0.000181653 -0.000155426 -0.000116821 -6.51418E-05 -1.54712E-09 7.6024E-05 0.000158999 -0.00021913 -0.000217192 -0.000215268 -0.000213355 -0.000211453 -0.000209558 -0.00020767 -0.000205787 -0.000203907 -0.000202029 -0.000200151 -0.000198273 -0.000196393 -0.000194509 -0.000192622 -0.000190729 -0.000188831 -0.000186925 -0.000185012 -0.000183089 -0.000181156 -0.000179211 -0.00017725 -0.000175272 -0.000173271 -0.000171241 -0.000169169 -0.000167036 -0.000164799 -0.000162356 -0.000159402 -0.000154907 -0.000145952 -0.000128169 -9.86121E-05 -5.60689E-05 -6.19005E-10 6.77336E-05 0.0001437 -0.000164365 -0.000162775 -0.000161196 -0.000159629 -0.00015807 -0.00015652 -0.000154976 -0.000153438 -0.000151905 -0.000150374 -0.000148846 -0.000147319 -0.000145792 -0.000144264 -0.000142736 -0.000141205 -0.000139672 -0.000138135 -0.000136595 -0.00013505 -0.0001335 -0.000131943 -0.000130379 -0.000128805 -0.000127219 -0.000125617 -0.000123994 -0.000122339 -0.000120634 -0.000118837 -0.000116839 -0.00011427 -0.00010975 -9.95458E-05 -7.91628E-05 -4.62687E-05 2.32326E-11 5.86502E-05 0.0001269 -0.000115628 -0.000114385 -0.000113152 -0.000111928 -0.000110712 -0.000109503 -0.0001083 -0.000107103 -0.00010591 -0.000104721 -0.000103535 -0.000102351 -0.000101169 -9.99876E-05 -9.88071E-05 -9.76267E-05 -9.64459E-05 -9.52645E-05 -9.40819E-05 -9.28979E-05 -9.17119E-05 -9.05235E-05 -8.9332E-05 -8.81365E-05 -8.69358E-05 -8.5728E-05 -8.45103E-05 -8.32782E-05 -8.20237E-05 -8.07305E-05 -7.93595E-05 -7.77937E-05 -7.55791E-05 -7.08346E-05 -5.89924E-05 -3.5922E-05 4.66203E-10 4.88077E-05 0.000108594 -7.46647E-05 -7.37579E-05 -7.28586E-05 -7.19662E-05 -7.10801E-05 -7.01997E-05 -6.93244E-05 -6.84536E-05 -6.75869E-05 -6.67237E-05 -6.58635E-05 -6.50059E-05 -6.41504E-05 -6.32967E-05 -6.24445E-05 -6.15935E-05 -6.07434E-05 -5.98941E-05 -5.90452E-05 -5.81966E-05 -5.73481E-05 -5.64994E-05 -5.56503E-05 -5.48004E-05 -5.39492E-05 -5.30957E-05 -5.22389E-05 -5.13769E-05 -5.05063E-05 -4.96211E-05 -4.87079E-05 -4.7731E-05 -4.65663E-05 -4.46311E-05 -3.93098E-05 -2.54827E-05 7.7063E-10 3.83596E-05 8.88985E-05 -4.32168E-05 -4.26155E-05 -4.20194E-05 -4.14281E-05 -4.08411E-05 -4.02582E-05 -3.9679E-05 -3.91032E-05 -3.85304E-05 -3.79604E-05 -3.73929E-05 -3.68276E-05 -3.62643E-05 -3.57027E-05 -3.51428E-05 -3.45843E-05 -3.4027E-05 -3.3471E-05 -3.29161E-05 -3.23621E-05 -3.18091E-05 -3.12569E-05 -3.07054E-05 -3.01545E-05 -2.96039E-05 -2.90535E-05 -2.85027E-05 -2.79509E-05 -2.73968E-05 -2.68383E-05 -2.6271E-05 -2.56844E-05 -2.50462E-05 -2.42176E-05 -2.2361E-05 -1.585E-05 9.79002E-10 2.77087E-05 6.82021E-05 -2.20689E-05 -2.17169E-05 -2.13679E-05 -2.10218E-05 -2.06784E-05 -2.03374E-05 -1.99987E-05 -1.96622E-05 -1.93276E-05 -1.89949E-05 -1.86638E-05 -1.83343E-05 -1.80062E-05 -1.76794E-05 -1.73538E-05 -1.70294E-05 -1.67061E-05 -1.63839E-05 -1.60626E-05 -1.57423E-05 -1.54229E-05 -1.51044E-05 -1.47869E-05 -1.44701E-05 -1.41542E-05 -1.3839E-05 -1.35243E-05 -1.32099E-05 -1.28955E-05 -1.25803E-05 -1.22631E-05 -1.19406E-05 -1.16045E-05 -1.12227E-05 -1.06041E-05 -8.28759E-06 1.121E-09 1.76865E-05 4.74671E-05 -9.96994E-06 -9.79129E-06 -9.61421E-06 -9.4386E-06 -9.26438E-06 -9.09146E-06 -8.91975E-06 -8.74919E-06 -8.57969E-06 -8.41118E-06 -8.24361E-06 -8.07691E-06 -7.91102E-06 -7.74592E-06 -7.58154E-06 -7.41787E-06 -7.25487E-06 -7.09252E-06 -6.93082E-06 -6.76974E-06 -6.60929E-06 -6.44945E-06 -6.29023E-06 -6.13162E-06 -5.9736E-06 -5.81615E-06 -5.65923E-06 -5.50278E-06 -5.34667E-06 -5.1907E-06 -5.03445E-06 -4.87704E-06 -4.71611E-06 -4.54367E-06 -4.31646E-06 -3.61681E-06 1.21733E-09 9.54975E-06 2.86508E-05 -4.02915E-06 -3.95096E-06 -3.87346E-06 -3.79661E-06 -3.72038E-06 -3.64473E-06 -3.56963E-06 -3.49504E-06 -3.42094E-06 -3.3473E-06 -3.27408E-06 -3.20128E-06 -3.12886E-06 -3.05681E-06 -2.98511E-06 -2.91375E-06 -2.84273E-06 -2.77202E-06 -2.70163E-06 -2.63156E-06 -2.5618E-06 -2.49235E-06 -2.42322E-06 -2.3544E-06 -2.28589E-06 -2.21769E-06 -2.14979E-06 -2.08216E-06 -2.01477E-06 -1.94756E-06 -1.8804E-06 -1.81302E-06 -1.74474E-06 -1.67332E-06 -1.5876E-06 -1.37537E-06 1.28237E-09 4.29337E-06 1.44648E-05 -1.44748E-06 -1.4181E-06 -1.38898E-06 -1.36011E-06 -1.33148E-06 -1.30306E-06 -1.27486E-06 -1.24686E-06 -1.21904E-06 -1.1914E-06 -1.16393E-06 -1.13662E-06 -1.10946E-06 -1.08244E-06 -1.05557E-06 -1.02883E-06 -1.00222E-06 -9.75746E-07 -9.49398E-07 -9.23176E-07 -8.97081E-07 -8.71114E-07 -8.45274E-07 -8.19563E-07 -7.93979E-07 -7.68522E-07 -7.43189E-07 -7.17975E-07 -6.92869E-07 -6.67852E-07 -6.42885E-07 -6.17884E-07 -5.92644E-07 -5.66505E-07 -5.36295E-07 -4.70427E-07 1.32606E-09 1.66834E-06 6.17768E-06 -4.51607E-07 -4.42225E-07 -4.32928E-07 -4.23711E-07 -4.1457E-07 -4.05501E-07 -3.96501E-07 -3.87566E-07 -3.78691E-07 -3.69875E-07 -3.61114E-07 -3.52405E-07 -3.43747E-07 -3.35136E-07 -3.26572E-07 -3.18052E-07 -3.09577E-07 -3.01145E-07 -2.92755E-07 -2.84408E-07 -2.76103E-07 -2.67841E-07 -2.59621E-07 -2.51445E-07 -2.43311E-07 -2.3522E-07 -2.2717E-07 -2.19161E-07 -2.1119E-07 -2.0325E-07 -1.95331E-07 -1.87408E-07 -1.79421E-07 -1.71182E-07 -1.61795E-07 -1.42423E-07 1.35523E-09 5.83211E-07 2.34701E-06 -1.209E-07 -1.18344E-07 -1.15811E-07 -1.13301E-07 -1.10811E-07 -1.08342E-07 -1.05891E-07 -1.03458E-07 -1.01042E-07 -9.86425E-08 -9.62581E-08 -9.38882E-08 -9.15323E-08 -8.91898E-08 -8.68602E-08 -8.45431E-08 -8.22384E-08 -7.99457E-08 -7.76649E-08 -7.5396E-08 -7.3139E-08 -7.08939E-08 -6.86608E-08 -6.64397E-08 -6.42306E-08 -6.20334E-08 -5.9848E-08 -5.7674E-08 -5.55106E-08 -5.33563E-08 -5.12082E-08 -4.90598E-08 -4.68955E-08 -4.46659E-08 -4.2138E-08 -3.70211E-08 1.37456E-09 1.82736E-07 8.20337E-07 -2.78428E-08 -2.72294E-08 -2.66216E-08 -2.60192E-08 -2.54219E-08 -2.48294E-08 -2.42414E-08 -2.36579E-08 -2.30784E-08 -2.25028E-08 -2.1931E-08 -2.13627E-08 -2.07978E-08 -2.02361E-08 -1.96776E-08 -1.91222E-08 -1.85698E-08 -1.80203E-08 -1.74737E-08 -1.693E-08 -1.63892E-08 -1.58513E-08 -1.53163E-08 -1.47843E-08 -1.42551E-08 -1.37289E-08 -1.32056E-08 -1.26851E-08 -1.21671E-08 -1.16514E-08 -1.11372E-08 -1.06231E-08 -1.01053E-08 -9.57207E-09 -8.96843E-09 -7.75364E-09 1.38724E-09 5.09788E-08 2.60662E-07 -5.05424E-09 -4.91866E-09 -4.78433E-09 -4.65119E-09 -4.51918E-09 -4.38825E-09 -4.25833E-09 -4.12937E-09 -4.00134E-09 -3.87417E-09 -3.74782E-09 -3.62227E-09 -3.49747E-09 -3.3734E-09 -3.25003E-09 -3.12734E-09 -3.00532E-09 -2.88396E-09 -2.76324E-09 -2.64317E-09 -2.52375E-09 -2.40497E-09 -2.28685E-09 -2.16938E-09 -2.05256E-09 -1.93639E-09 -1.82086E-09 -1.70596E-09 -1.59163E-09 -1.4778E-09 -1.36432E-09 -1.25086E-09 -1.13659E-09 -1.01894E-09 -8.85819E-10 -6.18341E-10 1.39541E-09 1.34324E-08 7.38697E-08 3.99063E-11 6.85312E-11 9.6891E-11 1.24999E-10 1.52867E-10 1.80509E-10 2.07935E-10 2.35157E-10 2.62185E-10 2.89029E-10 3.15698E-10 3.422E-10 3.68541E-10 3.94729E-10 4.20768E-10 4.46662E-10 4.72415E-10 4.98028E-10 5.23504E-10 5.48843E-10 5.74044E-10 5.99109E-10 6.24035E-10 6.48823E-10 6.73473E-10 6.97985E-10 7.2236E-10 7.46604E-10 7.70726E-10 7.94741E-10 8.18682E-10 8.42618E-10 8.66724E-10 8.9154E-10 9.19618E-10 9.76008E-10 1.40057E-09 4.08802E-09 1.93455E-08 1.12319E-09 1.1291E-09 1.13495E-09 1.14074E-09 1.14649E-09 1.15219E-09 1.15785E-09 1.16347E-09 1.16904E-09 1.17458E-09 1.18008E-09 1.18554E-09 1.19098E-09 1.19638E-09 1.20175E-09 1.20709E-09 1.2124E-09 1.21768E-09 1.22294E-09 1.22816E-09 1.23336E-09 1.23853E-09 1.24367E-09 1.24878E-09 1.25386E-09 1.25892E-09 1.26395E-09 1.26894E-09 1.27392E-09 1.27887E-09 1.28381E-09 1.28874E-09 1.29371E-09 1.29883E-09 1.30462E-09 1.31624E-09 1.40377E-09 1.97536E-09 5.46812E-09 1.34849E-09 1.34969E-09 1.35089E-09 1.35207E-09 1.35324E-09 1.3544E-09 1.35556E-09 1.3567E-09 1.35784E-09 1.35897E-09 1.36009E-09 1.36121E-09 1.36231E-09 1.36342E-09 1.36451E-09 1.3656E-09 1.36668E-09 1.36776E-09 1.36883E-09 1.3699E-09 1.37096E-09 1.37201E-09 1.37306E-09 1.3741E-09 1.37514E-09 1.37617E-09 1.3772E-09 1.37822E-09 1.37923E-09 1.38024E-09 1.38125E-09 1.38225E-09 1.38327E-09 1.38431E-09 1.38549E-09 1.38786E-09 1.40571E-09 1.52426E-09 2.27844E-09 1.39524E-09 1.39549E-09 1.39573E-09 1.39597E-09 1.39621E-09 1.39644E-09 1.39668E-09 1.39691E-09 1.39714E-09 1.39737E-09 1.39759E-09 1.39782E-09 1.39805E-09 1.39827E-09 1.39849E-09 1.39871E-09 1.39893E-09 1.39915E-09 1.39937E-09 1.39958E-09 1.3998E-09 1.40001E-09 1.40023E-09 1.40044E-09 1.40065E-09 1.40086E-09 1.40107E-09 1.40127E-09 1.40148E-09 1.40168E-09 1.40189E-09 1.40209E-09 1.4023E-09 1.40251E-09 1.40275E-09 1.40323E-09 1.40685E-09 1.43114E-09 1.58905E-09 1.40514E-09 1.40519E-09 1.40523E-09 1.40528E-09 1.40533E-09 1.40538E-09 1.40543E-09 1.40547E-09 1.40552E-09 1.40557E-09 1.40561E-09 1.40566E-09 1.4057E-09 1.40575E-09 1.40579E-09 1.40584E-09 1.40588E-09 1.40593E-09 1.40597E-09 1.40601E-09 1.40606E-09 1.4061E-09 1.40614E-09 1.40619E-09 1.40623E-09 1.40627E-09 1.40631E-09 1.40636E-09 1.4064E-09 1.40644E-09 1.40648E-09 1.40652E-09 1.40656E-09 1.40661E-09 1.40666E-09 1.40675E-09 1.40749E-09 1.41243E-09 1.445E-09 1.40733E-09 1.40734E-09 1.40735E-09 1.40736E-09 1.40737E-09 1.40738E-09 1.40739E-09 1.4074E-09 1.40741E-09 1.40742E-09 1.40743E-09 1.40744E-09 1.40745E-09 1.40746E-09 1.40747E-09 1.40748E-09 1.40748E-09 1.40749E-09 1.4075E-09 1.40751E-09 1.40752E-09 1.40753E-09 1.40754E-09 1.40755E-09 1.40755E-09 1.40756E-09 1.40757E-09 1.40758E-09 1.40759E-09 1.4076E-09 1.40761E-09 1.40761E-09 1.40762E-09 1.40763E-09 1.40764E-09 1.40766E-09 1.40781E-09 1.40881E-09 1.41548E-09 1.40785E-09 1.40785E-09 1.40785E-09 1.40786E-09 1.40786E-09 1.40786E-09 1.40786E-09 1.40786E-09 1.40787E-09 1.40787E-09 1.40787E-09 1.40787E-09 1.40787E-09 1.40787E-09 1.40788E-09 1.40788E-09 1.40788E-09 1.40788E-09 1.40788E-09 1.40789E-09 1.40789E-09 1.40789E-09 1.40789E-09 1.40789E-09 1.40789E-09 1.4079E-09 1.4079E-09 1.4079E-09 1.4079E-09 1.4079E-09 1.4079E-09 1.40791E-09 1.40791E-09 1.40791E-09 1.40791E-09 1.40792E-09 1.40795E-09 1.40815E-09 1.40951E-09 *table -0.00134511 -0.00133821 -0.00133113 -0.00132398 -0.00131674 -0.00130937 -0.00130188 -0.00129425 -0.00128647 -0.00127853 -0.00127041 -0.00126209 -0.00125355 -0.00124475 -0.00123564 -0.00122615 -0.00121613 -0.00120529 -0.00119304 -0.00117845 -0.00116031 -0.00113751 -0.00110921 -0.00107486 -0.00103413 -0.000986791 -0.00093269 -0.000871715 -0.000803775 -0.000728794 -0.000646704 -0.000557444 -0.000460957 -0.000357187 -0.000246084 -0.000127597 -1.67736E-06 0.000126839 0.000253106 -0.00128888 -0.00128223 -0.00127543 -0.00126857 -0.00126162 -0.00125456 -0.00124739 -0.00124009 -0.00123266 -0.00122509 -0.00121735 -0.00120944 -0.00120132 -0.00119299 -0.00118438 -0.00117546 -0.00116611 -0.00115616 -0.00114522 -0.00113258 -0.00111712 -0.00109757 -0.00107283 -0.00104215 -0.00100505 -0.00096123 -0.000910488 -0.000852686 -0.000787719 -0.000715498 -0.000635948 -0.000549001 -0.000454593 -0.000352665 -0.00024316 -0.000126023 -1.2019E-06 0.000126432 0.00025197 -0.00123136 -0.00122497 -0.00121845 -0.00121187 -0.00120522 -0.00119846 -0.00119161 -0.00118464 -0.00117755 -0.00117034 -0.00116298 -0.00115546 -0.00114776 -0.00113987 -0.00113175 -0.00112335 -0.00111461 -0.00110541 -0.00109551 -0.00108441 -0.00107123 -0.00105471 -0.00103352 -0.00100663 -0.000973358 -0.000933286 -0.000886153 -0.000831779 -0.000770038 -0.000700826 -0.000624057 -0.000539657 -0.000447555 -0.000347685 -0.000239985 -0.000124395 -8.58055E-07 0.000125725 0.000250392 -0.00117255 -0.00116642 -0.00116017 -0.00115388 -0.00114751 -0.00114106 -0.00113452 -0.00112788 -0.00112113 -0.00111427 -0.00110728 -0.00110015 -0.00109286 -0.0010854 -0.00107774 -0.00106985 -0.00106167 -0.00105313 -0.00104407 -0.00103418 -0.00102284 -0.00100897 -0.000991158 -0.000968094 -0.000938816 -0.000902726 -0.000859459 -0.000808783 -0.000750537 -0.000684601 -0.000610876 -0.000529277 -0.000439726 -0.000342151 -0.000236483 -0.000122658 -6.10613E-07 0.000124736 0.00024837 -0.00111246 -0.00110656 -0.00110061 -0.0010946 -0.00108853 -0.00108238 -0.00107615 -0.00106983 -0.00106342 -0.00105691 -0.00105028 -0.00104353 -0.00103664 -0.0010296 -0.00102239 -0.00101498 -0.00100733 -0.000999381 -0.00099104 -0.00098211 -0.000972191 -0.000960492 -0.000945735 -0.000926408 -0.000901225 -0.000869324 -0.000830183 -0.000783484 -0.000729021 -0.000666648 -0.000596248 -0.000517725 -0.000430993 -0.000335971 -0.000232585 -0.000120762 -4.33238E-07 0.000123469 0.000245891 -0.00105113 -0.00104549 -0.00103982 -0.00103409 -0.00102831 -0.00102246 -0.00101654 -0.00101054 -0.00100446 -0.000998291 -0.000992022 -0.000985645 -0.000979148 -0.000972519 -0.000965741 -0.000958791 -0.000951642 -0.000944249 -0.000936546 -0.000928409 -0.000919592 -0.00090958 -0.000897384 -0.000881522 -0.000860422 -0.000832869 -0.000798102 -0.000755668 -0.000705292 -0.000646787 -0.000580016 -0.000504867 -0.000421243 -0.000329056 -0.000228223 -0.000118666 -3.06486E-07 0.000121923 0.000242937 -0.000988619 -0.000983248 -0.000977843 -0.000972396 -0.000966901 -0.000961352 -0.000955742 -0.000950065 -0.000944315 -0.000938485 -0.00093257 -0.00092656 -0.000920447 -0.000914219 -0.000907863 -0.000901362 -0.000894691 -0.00088782 -0.000880699 -0.000873248 -0.000865316 -0.000856588 -0.000846399 -0.000833532 -0.000816321 -0.000793182 -0.000763002 -0.000725118 -0.000679143 -0.000624831 -0.000562014 -0.00049056 -0.00041036 -0.000321315 -0.000223333 -0.000116328 -2.16143E-07 0.000120088 0.000239477 -0.000925016 -0.000919911 -0.000914778 -0.000909612 -0.000904407 -0.000899156 -0.000893854 -0.000888494 -0.000883072 -0.000877581 -0.000872016 -0.000866369 -0.000860632 -0.000854798 -0.000848853 -0.000842786 -0.000836576 -0.000830199 -0.000823621 -0.000816786 -0.000809598 -0.000801868 -0.00079319 -0.000782714 -0.00076897 -0.000750142 -0.00072469 -0.000691621 -0.000650365 -0.000600588 -0.000542071 -0.000474659 -0.000398223 -0.000312653 -0.000217847 -0.000113711 -1.51892E-07 0.000117949 0.000235476 -0.000860487 -0.000855647 -0.000850789 -0.000845905 -0.00084099 -0.000836038 -0.000831042 -0.000825999 -0.000820902 -0.000815747 -0.000810528 -0.000805239 -0.000799874 -0.000794424 -0.000788882 -0.000783236 -0.000777471 -0.000771568 -0.000765501 -0.000759232 -0.000752696 -0.000745778 -0.000738239 -0.000729556 -0.00071865 -0.000703785 -0.000683052 -0.000655003 -0.000618774 -0.000573879 -0.000520028 -0.000457023 -0.000384716 -0.00030298 -0.000211702 -0.000110778 -1.0629E-07 0.000115485 0.000230889 -0.000795263 -0.000790692 -0.00078611 -0.000781509 -0.000776884 -0.00077223 -0.000767541 -0.000762813 -0.00075804 -0.000753217 -0.000748341 -0.000743406 -0.000738406 -0.000733335 -0.000728186 -0.00072295 -0.000717615 -0.000712167 -0.000706585 -0.000700843 -0.000694896 -0.000688671 -0.000682027 -0.000674662 -0.000665896 -0.000654374 -0.000638107 -0.00061516 -0.00058422 -0.00054455 -0.000495736 -0.000437523 -0.000369729 -0.000292209 -0.000204837 -0.000107495 -7.39832E-08 0.000112672 0.000225664 -0.000729529 -0.000725231 -0.000720926 -0.00071661 -0.000712277 -0.000707921 -0.000703539 -0.000699124 -0.000694674 -0.000690182 -0.000685646 -0.00068106 -0.000676421 -0.000671722 -0.000666958 -0.000662122 -0.000657205 -0.000652195 -0.000647077 -0.000641832 -0.000636428 -0.000630817 -0.000624915 -0.000618547 -0.000611324 -0.000602368 -0.000590003 -0.000572022 -0.000546544 -0.000512418 -0.000469021 -0.000416003 -0.000353133 -0.00028024 -0.00019718 -0.000103825 -5.11359E-08 0.000109486 0.000219748 -0.000663508 -0.000659486 -0.000655463 -0.000651434 -0.000647394 -0.000643338 -0.000639262 -0.000635161 -0.000631032 -0.00062687 -0.000622671 -0.000618432 -0.000614149 -0.000609817 -0.000605431 -0.000600986 -0.000596475 -0.000591889 -0.000587217 -0.000582444 -0.000577548 -0.000572497 -0.000567236 -0.000561665 -0.00055557 -0.000548446 -0.000539157 -0.000525676 -0.000505648 -0.00047732 -0.000439711 -0.000392303 -0.00033479 -0.000266964 -0.000188658 -9.97264E-05 -3.50062E-08 0.000105895 0.000213087 -0.000597466 -0.000593724 -0.000589986 -0.000586248 -0.000582503 -0.000578749 -0.000574981 -0.000571194 -0.000567386 -0.000563552 -0.000559689 -0.000555793 -0.000551862 -0.000547892 -0.000543878 -0.000539817 -0.000535702 -0.000531528 -0.000527286 -0.000522964 -0.000518548 -0.000514015 -0.00050933 -0.000504432 -0.000499201 -0.000493369 -0.00048628 -0.000476471 -0.000461559 -0.00043914 -0.000407648 -0.000366267 -0.000314565 -0.000252271 -0.000179191 -9.51579E-05 -2.36389E-08 0.000101862 0.000205615 -0.00053172 -0.000528264 -0.000524816 -0.000521372 -0.000517926 -0.000514475 -0.000511016 -0.000507544 -0.000504057 -0.00050055 -0.000497021 -0.000493467 -0.000489886 -0.000486273 -0.000482626 -0.000478941 -0.000475214 -0.000471441 -0.000467614 -0.000463726 -0.000459766 -0.000455719 -0.000451561 -0.000447255 -0.000442731 -0.000437848 -0.000432262 -0.000425117 -0.000414551 -0.000397861 -0.000372707 -0.000337749 -0.000292318 -0.000236048 -0.000168697 -9.00756E-05 -1.56422E-08 9.73494E-05 0.000197258 -0.000466645 -0.000463482 -0.000460329 -0.000457183 -0.00045404 -0.000450896 -0.000447747 -0.000444592 -0.000441426 -0.000438246 -0.000435051 -0.000431836 -0.000428601 -0.000425342 -0.000422056 -0.000418742 -0.000415395 -0.000412013 -0.00040859 -0.00040512 -0.000401597 -0.000398009 -0.000394341 -0.00039057 -0.000386654 -0.000382516 -0.000377983 -0.000372617 -0.000365289 -0.00035368 -0.000334846 -0.000306629 -0.000267922 -0.000218183 -0.000157095 -8.44339E-05 -1.00275E-08 9.2314E-05 0.000187939 -0.000402687 -0.000399824 -0.000396972 -0.00039413 -0.000391293 -0.000388458 -0.000385624 -0.000382786 -0.000379942 -0.00037709 -0.000374227 -0.000371351 -0.000368459 -0.000365551 -0.000362622 -0.000359673 -0.000356699 -0.000353699 -0.000350668 -0.000347604 -0.0003445 -0.00034135 -0.000338143 -0.000334863 -0.000331488 -0.000327973 -0.00032423 -0.000320048 -0.00031486 -0.000307182 -0.000294193 -0.000272851 -0.000241273 -0.000198572 -0.000144303 -7.81865E-05 -6.09297E-09 8.67113E-05 0.000177576 -0.000340376 -0.000337819 -0.000335275 -0.000332741 -0.000330216 -0.000327695 -0.000325177 -0.000322659 -0.000320139 -0.000317614 -0.000315083 -0.000312544 -0.000309994 -0.000307433 -0.000304858 -0.000302268 -0.00029966 -0.000297034 -0.000294387 -0.000291715 -0.000289016 -0.000286283 -0.000283512 -0.000280692 -0.000277809 -0.000274837 -0.000271731 -0.00026839 -0.000264556 -0.000259487 -0.000251239 -0.000236504 -0.000212321 -0.000177133 -0.000130246 -7.12888E-05 -3.3418E-09 8.04953E-05 0.000166083 -0.000280345 -0.000278101 -0.000275871 -0.000273652 -0.000271442 -0.000269239 -0.000267041 -0.000264845 -0.00026265 -0.000260453 -0.000258254 -0.00025605 -0.000253841 -0.000251623 -0.000249398 -0.000247162 -0.000244915 -0.000242655 -0.000240381 -0.00023809 -0.000235781 -0.000233451 -0.000231094 -0.000228706 -0.000226277 -0.000223794 -0.000221231 -0.00021854 -0.000215607 -0.000212113 -0.000207077 -0.000197984 -0.000181134 -0.000153837 -0.000114874 -6.37025E-05 -1.42245E-09 7.36204E-05 0.000153375 -0.000223364 -0.000221441 -0.000219531 -0.000217632 -0.000215742 -0.00021386 -0.000211984 -0.000210112 -0.000208243 -0.000206375 -0.000204506 -0.000202637 -0.000200764 -0.000198888 -0.000197007 -0.00019512 -0.000193226 -0.000191325 -0.000189415 -0.000187495 -0.000185563 -0.000183618 -0.000181657 -0.000179677 -0.000177672 -0.000175634 -0.000173551 -0.000171399 -0.000169127 -0.000166605 -0.000163436 -0.000158314 -0.000148052 -0.000128761 -9.8183E-05 -5.54064E-05 -8.67481E-11 6.60464E-05 0.00013937 -0.000170393 -0.000168796 -0.00016721 -0.000165634 -0.000164068 -0.000162509 -0.000160956 -0.000159409 -0.000157865 -0.000156324 -0.000154785 -0.000153247 -0.000151708 -0.000150168 -0.000148626 -0.000147081 -0.000145534 -0.000143982 -0.000142426 -0.000140864 -0.000139296 -0.000137721 -0.000136137 -0.000134542 -0.000132934 -0.000131307 -0.000129656 -0.000127969 -0.000126224 -0.000124367 -0.000122255 -0.000119388 -0.000114013 -0.000102233 -8.02782E-05 -4.64208E-05 8.40289E-10 5.77478E-05 0.000124007 -0.000122649 -0.000121379 -0.000120118 -0.000118866 -0.000117622 -0.000116385 -0.000115155 -0.000113929 -0.000112708 -0.00011149 -0.000110274 -0.000109061 -0.000107849 -0.000106637 -0.000105426 -0.000104214 -0.000103002 -0.000101788 -0.000100572 -9.93548E-05 -9.81346E-05 -9.69112E-05 -9.56838E-05 -9.44515E-05 -9.32127E-05 -9.19654E-05 -9.07063E-05 -8.94299E-05 -8.81265E-05 -8.67755E-05 -8.53254E-05 -8.36144E-05 -8.10051E-05 -7.51378E-05 -6.15087E-05 -3.68604E-05 1.48179E-09 4.87358E-05 0.000107257 -8.16552E-05 -8.07046E-05 -7.97619E-05 -7.88262E-05 -7.78971E-05 -7.69737E-05 -7.60555E-05 -7.51419E-05 -7.42323E-05 -7.33261E-05 -7.24228E-05 -7.15219E-05 -7.06229E-05 -6.97256E-05 -6.88294E-05 -6.79341E-05 -6.70394E-05 -6.61451E-05 -6.52509E-05 -6.43566E-05 -6.3462E-05 -6.25667E-05 -6.16705E-05 -6.07728E-05 -5.9873E-05 -5.89701E-05 -5.80627E-05 -5.71485E-05 -5.62233E-05 -5.52793E-05 -5.42987E-05 -5.32321E-05 -5.18987E-05 -4.94543E-05 -4.27361E-05 -2.70419E-05 1.92424E-09 3.91058E-05 8.91829E-05 -4.90884E-05 -4.84362E-05 -4.77896E-05 -4.7148E-05 -4.65111E-05 -4.58785E-05 -4.52499E-05 -4.46248E-05 -4.40029E-05 -4.33838E-05 -4.27673E-05 -4.2153E-05 -4.15407E-05 -4.09301E-05 -4.0321E-05 -3.97133E-05 -3.91068E-05 -3.85013E-05 -3.78968E-05 -3.72931E-05 -3.66901E-05 -3.60877E-05 -3.54859E-05 -3.48843E-05 -3.42827E-05 -3.36809E-05 -3.30781E-05 -3.24735E-05 -3.18656E-05 -3.12514E-05 -3.06252E-05 -2.99722E-05 -2.92454E-05 -2.82329E-05 -2.57239E-05 -1.76498E-05 2.2283E-09 2.91366E-05 7.00409E-05 -2.61092E-05 -2.57107E-05 -2.53156E-05 -2.49237E-05 -2.45347E-05 -2.41486E-05 -2.3765E-05 -2.33838E-05 -2.30048E-05 -2.26277E-05 -2.22525E-05 -2.18789E-05 -2.15069E-05 -2.11363E-05 -2.07669E-05 -2.03988E-05 -2.00318E-05 -1.96658E-05 -1.93009E-05 -1.89369E-05 -1.85739E-05 -1.82118E-05 -1.78505E-05 -1.749E-05 -1.71303E-05 -1.67711E-05 -1.64124E-05 -1.60538E-05 -1.56947E-05 -1.53343E-05 -1.49707E-05 -1.45996E-05 -1.42088E-05 -1.37502E-05 -1.2928E-05 -9.79613E-06 2.43642E-09 1.94522E-05 5.05073E-05 -1.22391E-05 -1.20272E-05 -1.18172E-05 -1.16089E-05 -1.14022E-05 -1.11971E-05 -1.09934E-05 -1.0791E-05 -1.05899E-05 -1.03899E-05 -1.0191E-05 -9.99309E-06 -9.79614E-06 -9.60006E-06 -9.40483E-06 -9.21038E-06 -9.0167E-06 -8.82375E-06 -8.63151E-06 -8.43998E-06 -8.24914E-06 -8.05898E-06 -7.8695E-06 -7.68068E-06 -7.49251E-06 -7.30496E-06 -7.11796E-06 -6.93142E-06 -6.7452E-06 -6.55898E-06 -6.37223E-06 -6.1837E-06 -5.9901E-06 -5.77984E-06 -5.48801E-06 -4.51451E-06 2.57826E-09 1.11256E-05 3.20644E-05 -5.11588E-06 -5.0187E-06 -4.92237E-06 -4.82685E-06 -4.73209E-06 -4.63806E-06 -4.54469E-06 -4.45197E-06 -4.35984E-06 -4.26827E-06 -4.17722E-06 -4.08668E-06 -3.9966E-06 -3.90698E-06 -3.81778E-06 -3.72899E-06 -3.6406E-06 -3.5526E-06 -3.46498E-06 -3.37774E-06 -3.29088E-06 -3.20439E-06 -3.11828E-06 -3.03254E-06 -2.94718E-06 -2.86218E-06 -2.77752E-06 -2.69319E-06 -2.60914E-06 -2.52527E-06 -2.44142E-06 -2.35723E-06 -2.27174E-06 -2.18184E-06 -2.0716E-06 -1.78087E-06 2.67452E-09 5.28965E-06 1.71495E-05 -1.91012E-06 -1.87176E-06 -1.83374E-06 -1.79603E-06 -1.75864E-06 -1.72153E-06 -1.6847E-06 -1.64812E-06 -1.61179E-06 -1.57569E-06 -1.5398E-06 -1.50412E-06 -1.46863E-06 -1.43334E-06 -1.39822E-06 -1.36328E-06 -1.3285E-06 -1.29389E-06 -1.25945E-06 -1.22517E-06 -1.19105E-06 -1.1571E-06 -1.12331E-06 -1.08968E-06 -1.05622E-06 -1.02292E-06 -9.89773E-07 -9.56781E-07 -9.23925E-07 -8.91179E-07 -8.58491E-07 -8.25747E-07 -7.92666E-07 -7.58338E-07 -7.18339E-07 -6.28347E-07 2.73956E-09 2.13767E-06 7.67479E-06 -6.23374E-07 -6.10469E-07 -5.97679E-07 -5.84999E-07 -5.72424E-07 -5.59948E-07 -5.47565E-07 -5.35271E-07 -5.2306E-07 -5.10928E-07 -4.98872E-07 -4.86887E-07 -4.7497E-07 -4.63119E-07 -4.51331E-07 -4.39604E-07 -4.27937E-07 -4.16329E-07 -4.04778E-07 -3.93285E-07 -3.8185E-07 -3.70473E-07 -3.59154E-07 -3.47893E-07 -3.3669E-07 -3.25546E-07 -3.14458E-07 -3.03425E-07 -2.92443E-07 -2.81504E-07 -2.70592E-07 -2.59674E-07 -2.48666E-07 -2.37303E-07 -2.24323E-07 -1.97211E-07 2.78329E-09 7.71413E-07 3.00222E-06 -1.73607E-07 -1.69926E-07 -1.66279E-07 -1.62663E-07 -1.59078E-07 -1.55522E-07 -1.51992E-07 -1.48488E-07 -1.45009E-07 -1.41552E-07 -1.38118E-07 -1.34704E-07 -1.3131E-07 -1.27936E-07 -1.2458E-07 -1.21241E-07 -1.17921E-07 -1.14618E-07 -1.11331E-07 -1.08062E-07 -1.0481E-07 -1.01574E-07 -9.83563E-08 -9.51554E-08 -9.19716E-08 -8.8805E-08 -8.56553E-08 -8.25218E-08 -7.94036E-08 -7.62984E-08 -7.3202E-08 -7.01053E-08 -6.69857E-08 -6.37718E-08 -6.01262E-08 -5.27203E-08 2.81252E-09 2.51426E-07 1.07534E-06 -4.0553E-08 -3.96431E-08 -3.87416E-08 -3.78481E-08 -3.6962E-08 -3.60831E-08 -3.5211E-08 -3.43453E-08 -3.34857E-08 -3.26319E-08 -3.17835E-08 -3.09404E-08 -3.01023E-08 -2.92691E-08 -2.84404E-08 -2.76163E-08 -2.67967E-08 -2.59813E-08 -2.51703E-08 -2.43636E-08 -2.35611E-08 -2.2763E-08 -2.19691E-08 -2.11796E-08 -2.03945E-08 -1.96136E-08 -1.8837E-08 -1.80646E-08 -1.72959E-08 -1.65306E-08 -1.57676E-08 -1.50048E-08 -1.42364E-08 -1.34454E-08 -1.25502E-08 -1.07473E-08 2.83189E-09 7.35052E-08 3.53557E-07 -6.84363E-09 -6.64E-09 -6.43824E-09 -6.23827E-09 -6.04E-09 -5.84334E-09 -5.6482E-09 -5.4545E-09 -5.26219E-09 -5.07117E-09 -4.88139E-09 -4.6928E-09 -4.50534E-09 -4.31897E-09 -4.13365E-09 -3.94936E-09 -3.76606E-09 -3.58375E-09 -3.40242E-09 -3.22205E-09 -3.04266E-09 -2.86423E-09 -2.68678E-09 -2.51031E-09 -2.33483E-09 -2.16032E-09 -1.98677E-09 -1.81416E-09 -1.64242E-09 -1.47143E-09 -1.30098E-09 -1.13056E-09 -9.58958E-10 -7.82322E-10 -5.82531E-10 -1.81173E-10 2.8446E-09 2.0489E-08 1.04615E-07 8.0823E-10 8.51247E-10 8.93866E-10 9.36106E-10 9.77987E-10 1.01953E-09 1.06074E-09 1.10165E-09 1.14227E-09 1.18261E-09 1.22269E-09 1.26252E-09 1.30211E-09 1.34146E-09 1.3806E-09 1.41951E-09 1.45822E-09 1.49671E-09 1.535E-09 1.57308E-09 1.61095E-09 1.64862E-09 1.68608E-09 1.72333E-09 1.76038E-09 1.79721E-09 1.83384E-09 1.87028E-09 1.90653E-09 1.94261E-09 1.97859E-09 2.01455E-09 2.05076E-09 2.08804E-09 2.13019E-09 2.2148E-09 2.8528E-09 6.84322E-09 2.87966E-08 2.43898E-09 2.4478E-09 2.45654E-09 2.4652E-09 2.47378E-09 2.4823E-09 2.49075E-09 2.49914E-09 2.50746E-09 2.51573E-09 2.52395E-09 2.53211E-09 2.54023E-09 2.54829E-09 2.55632E-09 2.56429E-09 2.57222E-09 2.58011E-09 2.58796E-09 2.59577E-09 2.60353E-09 2.61125E-09 2.61893E-09 2.62656E-09 2.63415E-09 2.6417E-09 2.64921E-09 2.65668E-09 2.6641E-09 2.6715E-09 2.67887E-09 2.68624E-09 2.69366E-09 2.7013E-09 2.70993E-09 2.72727E-09 2.85796E-09 3.70749E-09 8.81872E-09 2.77652E-09 2.7783E-09 2.78007E-09 2.78182E-09 2.78355E-09 2.78527E-09 2.78698E-09 2.78867E-09 2.79036E-09 2.79203E-09 2.79369E-09 2.79534E-09 2.79698E-09 2.79861E-09 2.80023E-09 2.80184E-09 2.80344E-09 2.80503E-09 2.80662E-09 2.8082E-09 2.80977E-09 2.81132E-09 2.81288E-09 2.81442E-09 2.81595E-09 2.81748E-09 2.81899E-09 2.8205E-09 2.822E-09 2.8235E-09 2.82499E-09 2.82647E-09 2.82797E-09 2.82952E-09 2.83126E-09 2.83476E-09 2.86116E-09 3.03629E-09 4.14349E-09 2.84612E-09 2.84648E-09 2.84683E-09 2.84718E-09 2.84753E-09 2.84787E-09 2.84822E-09 2.84856E-09 2.84889E-09 2.84923E-09 2.84956E-09 2.84989E-09 2.85022E-09 2.85055E-09 2.85087E-09 2.8512E-09 2.85152E-09 2.85184E-09 2.85216E-09 2.85247E-09 2.85279E-09 2.8531E-09 2.85341E-09 2.85372E-09 2.85403E-09 2.85434E-09 2.85464E-09 2.85494E-09 2.85524E-09 2.85554E-09 2.85584E-09 2.85614E-09 2.85644E-09 2.85675E-09 2.8571E-09 2.8578E-09 2.8631E-09 2.89864E-09 3.12929E-09 2.86084E-09 2.86092E-09 2.86099E-09 2.86106E-09 2.86113E-09 2.8612E-09 2.86126E-09 2.86133E-09 2.8614E-09 2.86147E-09 2.86153E-09 2.8616E-09 2.86167E-09 2.86173E-09 2.8618E-09 2.86186E-09 2.86192E-09 2.86199E-09 2.86205E-09 2.86212E-09 2.86218E-09 2.86224E-09 2.8623E-09 2.86237E-09 2.86243E-09 2.86249E-09 2.86255E-09 2.86261E-09 2.86267E-09 2.86273E-09 2.86279E-09 2.86285E-09 2.86291E-09 2.86297E-09 2.86304E-09 2.86318E-09 2.86424E-09 2.8714E-09 2.91852E-09 2.8642E-09 2.86421E-09 2.86423E-09 2.86424E-09 2.86425E-09 2.86427E-09 2.86428E-09 2.8643E-09 2.86431E-09 2.86432E-09 2.86434E-09 2.86435E-09 2.86436E-09 2.86437E-09 2.86439E-09 2.8644E-09 2.86441E-09 2.86443E-09 2.86444E-09 2.86445E-09 2.86446E-09 2.86448E-09 2.86449E-09 2.8645E-09 2.86451E-09 2.86453E-09 2.86454E-09 2.86455E-09 2.86456E-09 2.86457E-09 2.86459E-09 2.8646E-09 2.86461E-09 2.86462E-09 2.86464E-09 2.86466E-09 2.86488E-09 2.86631E-09 2.87585E-09 2.86506E-09 2.86507E-09 2.86507E-09 2.86507E-09 2.86508E-09 2.86508E-09 2.86508E-09 2.86508E-09 2.86509E-09 2.86509E-09 2.86509E-09 2.86509E-09 2.8651E-09 2.8651E-09 2.8651E-09 2.8651E-09 2.86511E-09 2.86511E-09 2.86511E-09 2.86512E-09 2.86512E-09 2.86512E-09 2.86512E-09 2.86513E-09 2.86513E-09 2.86513E-09 2.86513E-09 2.86513E-09 2.86514E-09 2.86514E-09 2.86514E-09 2.86514E-09 2.86515E-09 2.86515E-09 2.86515E-09 2.86516E-09 2.8652E-09 2.86549E-09 2.86741E-09 2.86531E-09 2.86531E-09 2.86531E-09 2.86531E-09 2.86531E-09 2.86531E-09 2.86531E-09 2.86531E-09 2.86531E-09 2.86531E-09 2.86531E-09 2.86532E-09 2.86532E-09 2.86532E-09 2.86532E-09 2.86532E-09 2.86532E-09 2.86532E-09 2.86532E-09 2.86532E-09 2.86532E-09 2.86532E-09 2.86532E-09 2.86532E-09 2.86532E-09 2.86532E-09 2.86532E-09 2.86532E-09 2.86532E-09 2.86532E-09 2.86532E-09 2.86533E-09 2.86533E-09 2.86533E-09 2.86533E-09 2.86533E-09 2.86534E-09 2.86539E-09 2.86578E-09 *table -0.0012452 -0.00123881 -0.00123226 -0.00122567 -0.00121898 -0.00121219 -0.00120529 -0.00119827 -0.00119112 -0.00118384 -0.00117639 -0.00116878 -0.00116098 -0.00115296 -0.00114469 -0.0011361 -0.00112708 -0.00111744 -0.00110674 -0.00109421 -0.00107874 -0.00105913 -0.00103445 -0.00100404 -0.000967501 -0.000924582 -0.000875114 -0.000818976 -0.000756074 -0.000686332 -0.000609683 -0.000526068 -0.00043543 -0.000337719 -0.000232887 -0.000120885 -1.67228E-06 0.000120159 0.000239993 -0.00118999 -0.00118384 -0.00117757 -0.00117124 -0.00116484 -0.00115834 -0.00115174 -0.00114504 -0.00113822 -0.00113127 -0.00112419 -0.00111696 -0.00110955 -0.00110196 -0.00109414 -0.00108606 -0.00107764 -0.00106875 -0.00105912 -0.0010482 -0.00103505 -0.00101844 -0.000997174 -0.000970361 -0.000937432 -0.000898038 -0.000851956 -0.000799034 -0.00073916 -0.000672246 -0.000598216 -0.000517004 -0.000428548 -0.000332791 -0.000229681 -0.000119166 -1.19756E-06 0.000119605 0.000238577 -0.00113365 -0.00112775 -0.00112174 -0.00111569 -0.00110956 -0.00110335 -0.00109705 -0.00109066 -0.00108417 -0.00107756 -0.00107083 -0.00106397 -0.00105695 -0.00104977 -0.0010424 -0.0010348 -0.00102692 -0.00101867 -0.00100989 -0.00100023 -0.000988987 -0.000975056 -0.0009571 -0.000933949 -0.000904796 -0.000869143 -0.000826686 -0.000777227 -0.000720629 -0.000656787 -0.000585615 -0.000507037 -0.000420987 -0.000327401 -0.000226221 -0.00011739 -8.54247E-07 0.000118749 0.000236711 -0.00107618 -0.00107053 -0.00106478 -0.001059 -0.00105315 -0.00104723 -0.00104123 -0.00103515 -0.00102898 -0.0010227 -0.00101632 -0.00100982 -0.00100318 -0.000996403 -0.000989456 -0.000982315 -0.000974943 -0.000967278 -0.000959211 -0.000950526 -0.000940771 -0.000929084 -0.000914175 -0.000894646 -0.000869387 -0.000837678 -0.000799088 -0.000753351 -0.000700291 -0.000639783 -0.000571726 -0.000496034 -0.000412633 -0.000321454 -0.00022243 -0.000115501 -6.07185E-07 0.000117607 0.000234394 -0.00101762 -0.0010122 -0.00100673 -0.00100122 -0.000995645 -0.000990011 -0.000984309 -0.000978532 -0.000972674 -0.000966728 -0.000960687 -0.000954541 -0.00094828 -0.000941891 -0.000935358 -0.000928659 -0.000921766 -0.000914633 -0.00090719 -0.0008993 -0.000890685 -0.000880763 -0.000868477 -0.000852373 -0.000831035 -0.000803437 -0.000768951 -0.000727202 -0.000677959 -0.000621064 -0.000556398 -0.000483864 -0.000403377 -0.00031486 -0.000218241 -0.000113453 -4.3008E-07 0.000116185 0.000231616 -0.000958005 -0.000952834 -0.000947629 -0.000942382 -0.000937088 -0.000931739 -0.000926332 -0.000920859 -0.000915315 -0.000909695 -0.00090399 -0.000898195 -0.000892299 -0.000886293 -0.000880162 -0.00087389 -0.000867454 -0.000860821 -0.000853941 -0.000846727 -0.000839009 -0.000830427 -0.00082024 -0.000807171 -0.000789634 -0.000766242 -0.000736071 -0.000698578 -0.000653442 -0.000600457 -0.000539479 -0.000470394 -0.000393107 -0.000307531 -0.000213588 -0.000111203 -3.0352E-07 0.000114481 0.000228357 -0.000897418 -0.0008925 -0.000887554 -0.000882576 -0.000877558 -0.000872494 -0.00086738 -0.00086221 -0.000856978 -0.00085168 -0.000846309 -0.000840859 -0.000835322 -0.00082969 -0.000823951 -0.000818092 -0.000812095 -0.000805935 -0.000799577 -0.000792961 -0.000785982 -0.000778426 -0.000769827 -0.000759247 -0.000745183 -0.00072596 -0.000700262 -0.000667279 -0.000626546 -0.000577784 -0.00052081 -0.000455489 -0.000381711 -0.00029938 -0.000208408 -0.000108712 -2.13311E-07 0.000112488 0.00022459 -0.000835958 -0.000831294 -0.00082661 -0.0008219 -0.000817158 -0.000812379 -0.000807558 -0.000802689 -0.000797768 -0.000792789 -0.000787748 -0.000782639 -0.000777455 -0.00077219 -0.000766835 -0.000761377 -0.000755804 -0.000750096 -0.000744227 -0.000738157 -0.000731816 -0.000725076 -0.000717664 -0.000708979 -0.000697847 -0.000682547 -0.000661371 -0.000633115 -0.000597077 -0.000552862 -0.000500228 -0.000439008 -0.000369073 -0.000290314 -0.000202634 -0.000105941 -1.49155E-07 0.00011019 0.000220279 -0.000773805 -0.000769397 -0.000764976 -0.000760536 -0.000756071 -0.000751576 -0.000747047 -0.000742478 -0.000737865 -0.000733204 -0.00072849 -0.000723718 -0.000718882 -0.000713978 -0.000708997 -0.00070393 -0.000698768 -0.000693494 -0.000688089 -0.000682525 -0.000676755 -0.0006707 -0.0006642 -0.000656904 -0.000648038 -0.000636158 -0.000619353 -0.000595948 -0.000564872 -0.00052553 -0.000477584 -0.00042082 -0.000355083 -0.000280249 -0.000196207 -0.000102857 -1.03618E-07 0.000107568 0.000215383 -0.000711204 -0.000707055 -0.000702898 -0.000698729 -0.000694541 -0.000690331 -0.000686093 -0.000681823 -0.000677517 -0.000673171 -0.000668781 -0.000664341 -0.000659849 -0.000655299 -0.000650685 -0.000646 -0.000641235 -0.000636379 -0.000631417 -0.000626329 -0.000621082 -0.000615626 -0.000609864 -0.000603599 -0.000596377 -0.000587202 -0.000574335 -0.000555733 -0.000529812 -0.000495648 -0.000452742 -0.000400803 -0.000339638 -0.000269101 -0.000189068 -9.94264E-05 -7.1358E-08 0.000104599 0.000209852 -0.000648355 -0.000644468 -0.000640578 -0.000636681 -0.000632772 -0.000628847 -0.000624901 -0.000620929 -0.000616929 -0.000612896 -0.000608827 -0.000604717 -0.000600564 -0.000596362 -0.000592108 -0.000587795 -0.000583417 -0.000578966 -0.000574429 -0.000569792 -0.000565032 -0.000560116 -0.000554984 -0.000549523 -0.000543481 -0.000536272 -0.000526623 -0.000512495 -0.000491787 -0.000463063 -0.000425545 -0.000378813 -0.000322616 -0.000256775 -0.000181149 -9.56125E-05 -4.85427E-08 0.00010126 0.000203634 -0.000585497 -0.000581875 -0.000578256 -0.000574634 -0.000571006 -0.000567366 -0.000563712 -0.000560039 -0.000556343 -0.000552622 -0.000548872 -0.000545089 -0.00054127 -0.000537413 -0.000533512 -0.000529564 -0.000525564 -0.000521504 -0.000517377 -0.00051317 -0.00050887 -0.000504451 -0.000499877 -0.00049508 -0.000489924 -0.000484088 -0.000476806 -0.000466475 -0.000450779 -0.000427652 -0.000395844 -0.000354707 -0.000303891 -0.000243171 -0.000172381 -9.13773E-05 -3.2435E-08 9.75198E-05 0.000196679 -0.000522913 -0.000519562 -0.000516216 -0.000512872 -0.000509527 -0.000506175 -0.000502813 -0.000499439 -0.000496048 -0.000492637 -0.000489204 -0.000485745 -0.000482258 -0.00047874 -0.000475188 -0.000471598 -0.000467966 -0.000464288 -0.000460556 -0.000456763 -0.000452898 -0.000448945 -0.000444878 -0.000440658 -0.000436207 -0.000431357 -0.000425698 -0.000418227 -0.000406958 -0.000389366 -0.000363514 -0.000328348 -0.000283338 -0.000228186 -0.000162688 -8.66809E-05 -2.10829E-08 9.33449E-05 0.000188924 -0.000460937 -0.000457861 -0.000454794 -0.000451733 -0.000448672 -0.00044561 -0.000442543 -0.000439468 -0.000436381 -0.00043328 -0.000430163 -0.000427026 -0.000423868 -0.000420686 -0.000417477 -0.000414238 -0.000410968 -0.000407661 -0.000404313 -0.000400919 -0.00039747 -0.000393955 -0.000390359 -0.000386656 -0.0003828 -0.000378703 -0.000374157 -0.000368631 -0.000360816 -0.000348312 -0.000328488 -0.000299617 -0.000260838 -0.000211718 -0.000151997 -8.14822E-05 -1.30967E-08 8.86983E-05 0.000180299 -0.000399964 -0.00039717 -0.000394386 -0.00039161 -0.000388839 -0.00038607 -0.000383299 -0.000380524 -0.000377742 -0.000374951 -0.000372148 -0.000369332 -0.000366499 -0.000363649 -0.000360779 -0.000357887 -0.00035497 -0.000352026 -0.000349052 -0.000346042 -0.000342993 -0.000339896 -0.00033674 -0.00033351 -0.000330179 -0.000326697 -0.000322961 -0.000318712 -0.000313257 -0.000304896 -0.000290824 -0.000268444 -0.000236288 -0.00019367 -0.000140232 -7.57392E-05 -7.48911E-09 8.35406E-05 0.000170733 -0.00034046 -0.000337953 -0.000335458 -0.000332973 -0.000330495 -0.000328021 -0.000325548 -0.000323075 -0.000320599 -0.000318117 -0.000315629 -0.000313131 -0.000310622 -0.000308101 -0.000305565 -0.000303014 -0.000300444 -0.000297856 -0.000295245 -0.000292609 -0.000289944 -0.000287246 -0.000284507 -0.000281716 -0.000278859 -0.000275908 -0.000272808 -0.000269437 -0.000265474 -0.000260002 -0.000250843 -0.000234855 -0.000209623 -0.00017396 -0.000127324 -6.94107E-05 -3.55951E-09 7.78305E-05 0.000160148 -0.000282977 -0.000280764 -0.000278564 -0.000276375 -0.000274193 -0.000272018 -0.000269847 -0.000267677 -0.000265507 -0.000263335 -0.00026116 -0.000258979 -0.000256791 -0.000254596 -0.000252391 -0.000250175 -0.000247947 -0.000245706 -0.000243449 -0.000241176 -0.000238882 -0.000236566 -0.000234223 -0.000231845 -0.000229425 -0.000226945 -0.000224378 -0.000221666 -0.000218665 -0.000214967 -0.000209358 -0.000199102 -0.000180864 -0.000152543 -0.000113218 -6.24592E-05 -8.11658E-10 7.15268E-05 0.000148468 -0.000228182 -0.00022627 -0.00022437 -0.000222481 -0.0002206 -0.000218727 -0.000216858 -0.000214993 -0.000213131 -0.000211269 -0.000209405 -0.00020754 -0.000205671 -0.000203798 -0.000201919 -0.000200034 -0.000198141 -0.00019624 -0.000194329 -0.000192407 -0.000190473 -0.000188524 -0.000186557 -0.00018457 -0.000182555 -0.000180505 -0.000178405 -0.000176225 -0.000173904 -0.000171274 -0.000167812 -0.000161902 -0.000150218 -0.000129448 -9.78925E-05 -5.4859E-05 1.10543E-09 6.45909E-05 0.000135618 -0.000176895 -0.000175288 -0.000173692 -0.000172107 -0.00017053 -0.00016896 -0.000167397 -0.000165838 -0.000164282 -0.000162728 -0.000161176 -0.000159624 -0.00015807 -0.000156515 -0.000154958 -0.000153397 -0.000151832 -0.000150263 -0.000148688 -0.000147107 -0.000145518 -0.000143922 -0.000142315 -0.000140696 -0.000139062 -0.000137407 -0.000135725 -0.000134001 -0.000132207 -0.000130277 -0.000128015 -0.000124745 -0.000118321 -0.000104881 -8.14026E-05 -4.66123E-05 2.43961E-09 5.69942E-05 0.000121534 -0.000130147 -0.000128848 -0.000127558 -0.000126278 -0.000125005 -0.000123739 -0.000122479 -0.000121224 -0.000119973 -0.000118726 -0.00011748 -0.000116236 -0.000114992 -0.000113749 -0.000112506 -0.000111261 -0.000110015 -0.000108768 -0.000107517 -0.000106265 -0.000105008 -0.000103748 -0.000102483 -0.000101212 -9.99328E-05 -9.86435E-05 -9.73402E-05 -9.60163E-05 -9.46596E-05 -9.32435E-05 -9.16989E-05 -8.97977E-05 -8.66503E-05 -7.94362E-05 -6.39729E-05 -3.77868E-05 3.3656E-09 4.87329E-05 0.000106179 -8.92444E-05 -8.82493E-05 -8.72622E-05 -8.62825E-05 -8.53093E-05 -8.43421E-05 -8.33801E-05 -8.24226E-05 -8.1469E-05 -8.05187E-05 -7.95711E-05 -7.86257E-05 -7.76821E-05 -7.67397E-05 -7.57982E-05 -7.48572E-05 -7.39164E-05 -7.29756E-05 -7.20345E-05 -7.10928E-05 -7.01503E-05 -6.92065E-05 -6.82612E-05 -6.73136E-05 -6.63631E-05 -6.54084E-05 -6.44477E-05 -6.34783E-05 -6.24948E-05 -6.1487E-05 -6.0431E-05 -5.92563E-05 -5.76945E-05 -5.45437E-05 -4.61979E-05 -2.85951E-05 4.00637E-09 3.98612E-05 8.95762E-05 -5.57279E-05 -5.50223E-05 -5.43225E-05 -5.36282E-05 -5.29389E-05 -5.22541E-05 -5.15735E-05 -5.08965E-05 -5.02229E-05 -4.95521E-05 -4.88839E-05 -4.8218E-05 -4.75539E-05 -4.68915E-05 -4.62305E-05 -4.55707E-05 -4.49119E-05 -4.4254E-05 -4.35968E-05 -4.29402E-05 -4.22841E-05 -4.16283E-05 -4.09727E-05 -4.03169E-05 -3.96608E-05 -3.90037E-05 -3.8345E-05 -3.76835E-05 -3.70172E-05 -3.63423E-05 -3.56507E-05 -3.49214E-05 -3.40836E-05 -3.2807E-05 -2.93903E-05 -1.9535E-05 4.44831E-09 3.05643E-05 7.18864E-05 -3.09562E-05 -3.0506E-05 -3.00596E-05 -2.96169E-05 -2.91775E-05 -2.87412E-05 -2.83077E-05 -2.78769E-05 -2.74484E-05 -2.7022E-05 -2.65976E-05 -2.6175E-05 -2.57541E-05 -2.53345E-05 -2.49164E-05 -2.44994E-05 -2.40835E-05 -2.36688E-05 -2.3255E-05 -2.28421E-05 -2.24301E-05 -2.2019E-05 -2.16086E-05 -2.1199E-05 -2.07899E-05 -2.03813E-05 -1.99728E-05 -1.9564E-05 -1.91543E-05 -1.87424E-05 -1.83256E-05 -1.78979E-05 -1.7441E-05 -1.68794E-05 -1.5745E-05 -1.15208E-05 4.75199E-09 2.12911E-05 5.35699E-05 -1.51273E-05 -1.48759E-05 -1.46267E-05 -1.43796E-05 -1.41343E-05 -1.38909E-05 -1.36491E-05 -1.34089E-05 -1.31701E-05 -1.29327E-05 -1.26965E-05 -1.24614E-05 -1.22275E-05 -1.19945E-05 -1.17624E-05 -1.15313E-05 -1.1301E-05 -1.10715E-05 -1.08428E-05 -1.06148E-05 -1.03876E-05 -1.01612E-05 -9.93544E-06 -9.71042E-06 -9.48608E-06 -9.26237E-06 -9.03921E-06 -8.81648E-06 -8.59395E-06 -8.37121E-06 -8.14749E-06 -7.92101E-06 -7.68698E-06 -7.42784E-06 -7.04131E-06 -5.65276E-06 4.95985E-09 1.29033E-05 3.57024E-05 -6.55799E-06 -6.43678E-06 -6.31663E-06 -6.19748E-06 -6.07929E-06 -5.96198E-06 -5.8455E-06 -5.72981E-06 -5.61486E-06 -5.50059E-06 -5.38696E-06 -5.27395E-06 -5.1615E-06 -5.0496E-06 -4.93822E-06 -4.82733E-06 -4.71692E-06 -4.60698E-06 -4.49749E-06 -4.38846E-06 -4.27988E-06 -4.17174E-06 -4.06405E-06 -3.9568E-06 -3.84999E-06 -3.74361E-06 -3.63763E-06 -3.53202E-06 -3.42671E-06 -3.32158E-06 -3.2164E-06 -3.11064E-06 -3.00297E-06 -2.88887E-06 -2.74452E-06 -2.33305E-06 5.10156E-09 6.5347E-06 2.03024E-05 -2.54452E-06 -2.49415E-06 -2.44423E-06 -2.39472E-06 -2.34562E-06 -2.29689E-06 -2.24852E-06 -2.20048E-06 -2.15276E-06 -2.10534E-06 -2.0582E-06 -2.01132E-06 -1.9647E-06 -1.91832E-06 -1.87217E-06 -1.82625E-06 -1.78054E-06 -1.73505E-06 -1.68977E-06 -1.6447E-06 -1.59983E-06 -1.55518E-06 -1.51073E-06 -1.4665E-06 -1.42247E-06 -1.37865E-06 -1.33503E-06 -1.2916E-06 -1.24834E-06 -1.20522E-06 -1.16215E-06 -1.11899E-06 -1.07534E-06 -1.02991E-06 -9.76327E-07 -8.50453E-07 5.19779E-09 2.77199E-06 9.61138E-06 -8.7005E-07 -8.52136E-07 -8.34381E-07 -8.16779E-07 -7.99321E-07 -7.82E-07 -7.64807E-07 -7.47736E-07 -7.3078E-07 -7.13934E-07 -6.97191E-07 -6.80546E-07 -6.63994E-07 -6.47533E-07 -6.31158E-07 -6.14867E-07 -5.98658E-07 -5.82529E-07 -5.66479E-07 -5.50509E-07 -5.34617E-07 -5.18804E-07 -5.03071E-07 -4.87418E-07 -4.71844E-07 -4.5635E-07 -4.40933E-07 -4.25592E-07 -4.10319E-07 -3.95104E-07 -3.79925E-07 -3.64735E-07 -3.49413E-07 -3.33582E-07 -3.15424E-07 -2.76817E-07 5.26287E-09 1.03555E-06 3.90247E-06 -2.53933E-07 -2.48541E-07 -2.43197E-07 -2.379E-07 -2.32646E-07 -2.27434E-07 -2.22262E-07 -2.17127E-07 -2.12028E-07 -2.06962E-07 -2.01928E-07 -1.96924E-07 -1.9195E-07 -1.87003E-07 -1.82083E-07 -1.77189E-07 -1.72321E-07 -1.67477E-07 -1.62659E-07 -1.57865E-07 -1.53096E-07 -1.48352E-07 -1.43632E-07 -1.38937E-07 -1.34268E-07 -1.29623E-07 -1.25003E-07 -1.20407E-07 -1.15832E-07 -1.11277E-07 -1.06734E-07 -1.02191E-07 -9.76136E-08 -9.28971E-08 -8.75419E-08 -7.66039E-08 5.30665E-09 3.51223E-07 1.43463E-06 -6.09153E-08 -5.95275E-08 -5.81523E-08 -5.67893E-08 -5.54376E-08 -5.40969E-08 -5.27664E-08 -5.14457E-08 -5.01342E-08 -4.88315E-08 -4.75372E-08 -4.62508E-08 -4.4972E-08 -4.37006E-08 -4.24362E-08 -4.11787E-08 -3.99278E-08 -3.86836E-08 -3.74459E-08 -3.62148E-08 -3.49901E-08 -3.37719E-08 -3.25603E-08 -3.13553E-08 -3.01569E-08 -2.8965E-08 -2.77796E-08 -2.66005E-08 -2.54272E-08 -2.42591E-08 -2.30944E-08 -2.19299E-08 -2.07573E-08 -1.95501E-08 -1.8184E-08 -1.54306E-08 5.33594E-09 1.08071E-07 4.87699E-07 -9.74891E-09 -9.43155E-09 -9.11711E-09 -8.80545E-09 -8.49642E-09 -8.1899E-09 -7.88576E-09 -7.58386E-09 -7.2841E-09 -6.98636E-09 -6.69056E-09 -6.39659E-09 -6.10439E-09 -5.81388E-09 -5.52501E-09 -5.23772E-09 -4.952E-09 -4.6678E-09 -4.38512E-09 -4.10394E-09 -3.82428E-09 -3.54612E-09 -3.26949E-09 -2.99438E-09 -2.7208E-09 -2.44874E-09 -2.17818E-09 -1.90908E-09 -1.64134E-09 -1.37478E-09 -1.10906E-09 -8.4341E-10 -5.75942E-10 -3.00692E-10 1.04924E-11 6.35299E-10 5.35536E-09 3.19805E-08 1.51199E-07 2.16063E-09 2.22811E-09 2.29497E-09 2.36124E-09 2.42694E-09 2.49211E-09 2.55677E-09 2.62095E-09 2.68468E-09 2.74797E-09 2.81085E-09 2.87333E-09 2.93544E-09 2.99719E-09 3.05858E-09 3.11964E-09 3.18036E-09 3.24075E-09 3.30082E-09 3.36057E-09 3.41999E-09 3.47909E-09 3.53786E-09 3.59631E-09 3.65443E-09 3.71223E-09 3.7697E-09 3.82686E-09 3.88373E-09 3.94034E-09 3.99678E-09 4.05319E-09 4.10999E-09 4.16843E-09 4.23449E-09 4.36698E-09 5.36811E-09 1.15214E-08 4.39791E-08 4.72069E-09 4.73449E-09 4.74817E-09 4.76172E-09 4.77516E-09 4.78849E-09 4.80171E-09 4.81484E-09 4.82787E-09 4.84081E-09 4.85367E-09 4.86645E-09 4.87915E-09 4.89177E-09 4.90433E-09 4.91681E-09 4.92923E-09 4.94158E-09 4.95386E-09 4.96607E-09 4.97822E-09 4.99031E-09 5.00232E-09 5.01427E-09 5.02615E-09 5.03797E-09 5.04972E-09 5.0614E-09 5.07303E-09 5.0846E-09 5.09614E-09 5.10767E-09 5.11928E-09 5.13122E-09 5.14472E-09 5.17179E-09 5.37633E-09 6.69565E-09 1.44566E-08 5.24998E-09 5.25275E-09 5.25549E-09 5.25821E-09 5.26091E-09 5.26358E-09 5.26624E-09 5.26887E-09 5.27149E-09 5.27408E-09 5.27666E-09 5.27923E-09 5.28177E-09 5.28431E-09 5.28683E-09 5.28933E-09 5.29182E-09 5.2943E-09 5.29676E-09 5.29921E-09 5.30165E-09 5.30407E-09 5.30649E-09 5.30888E-09 5.31127E-09 5.31364E-09 5.31599E-09 5.31834E-09 5.32067E-09 5.32299E-09 5.3253E-09 5.32762E-09 5.32995E-09 5.33234E-09 5.33505E-09 5.34048E-09 5.3815E-09 5.6529E-09 7.35147E-09 5.35855E-09 5.3591E-09 5.35965E-09 5.36019E-09 5.36072E-09 5.36126E-09 5.36178E-09 5.36231E-09 5.36283E-09 5.36334E-09 5.36386E-09 5.36437E-09 5.36487E-09 5.36538E-09 5.36588E-09 5.36637E-09 5.36687E-09 5.36736E-09 5.36785E-09 5.36834E-09 5.36882E-09 5.36931E-09 5.36979E-09 5.37026E-09 5.37074E-09 5.37121E-09 5.37168E-09 5.37214E-09 5.3726E-09 5.37307E-09 5.37353E-09 5.37399E-09 5.37445E-09 5.37493E-09 5.37546E-09 5.37654E-09 5.3847E-09 5.43939E-09 5.79303E-09 5.38146E-09 5.38157E-09 5.38168E-09 5.38179E-09 5.38189E-09 5.382E-09 5.3821E-09 5.38221E-09 5.38231E-09 5.38241E-09 5.38251E-09 5.38261E-09 5.38272E-09 5.38282E-09 5.38291E-09 5.38301E-09 5.38311E-09 5.38321E-09 5.38331E-09 5.3834E-09 5.3835E-09 5.38359E-09 5.38369E-09 5.38378E-09 5.38388E-09 5.38397E-09 5.38406E-09 5.38415E-09 5.38425E-09 5.38434E-09 5.38443E-09 5.38452E-09 5.38461E-09 5.38471E-09 5.38481E-09 5.38503E-09 5.38664E-09 5.39755E-09 5.46934E-09 5.38676E-09 5.38678E-09 5.3868E-09 5.38682E-09 5.38684E-09 5.38686E-09 5.38689E-09 5.38691E-09 5.38693E-09 5.38695E-09 5.38697E-09 5.38699E-09 5.38701E-09 5.38703E-09 5.38705E-09 5.38706E-09 5.38708E-09 5.3871E-09 5.38712E-09 5.38714E-09 5.38716E-09 5.38718E-09 5.3872E-09 5.38722E-09 5.38724E-09 5.38725E-09 5.38727E-09 5.38729E-09 5.38731E-09 5.38733E-09 5.38734E-09 5.38736E-09 5.38738E-09 5.3874E-09 5.38742E-09 5.38746E-09 5.38778E-09 5.38995E-09 5.40435E-09 5.38822E-09 5.38822E-09 5.38822E-09 5.38823E-09 5.38823E-09 5.38824E-09 5.38824E-09 5.38824E-09 5.38825E-09 5.38825E-09 5.38826E-09 5.38826E-09 5.38826E-09 5.38827E-09 5.38827E-09 5.38828E-09 5.38828E-09 5.38828E-09 5.38829E-09 5.38829E-09 5.38829E-09 5.3883E-09 5.3883E-09 5.38831E-09 5.38831E-09 5.38831E-09 5.38832E-09 5.38832E-09 5.38832E-09 5.38833E-09 5.38833E-09 5.38833E-09 5.38834E-09 5.38834E-09 5.38835E-09 5.38835E-09 5.38842E-09 5.38885E-09 5.39172E-09 5.3887E-09 5.3887E-09 5.3887E-09 5.3887E-09 5.3887E-09 5.3887E-09 5.38871E-09 5.38871E-09 5.38871E-09 5.38871E-09 5.38871E-09 5.38871E-09 5.38871E-09 5.38871E-09 5.38871E-09 5.38871E-09 5.38871E-09 5.38871E-09 5.38871E-09 5.38872E-09 5.38872E-09 5.38872E-09 5.38872E-09 5.38872E-09 5.38872E-09 5.38872E-09 5.38872E-09 5.38872E-09 5.38872E-09 5.38872E-09 5.38872E-09 5.38872E-09 5.38872E-09 5.38873E-09 5.38873E-09 5.38873E-09 5.38874E-09 5.38883E-09 5.3894E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38887E-09 5.38888E-09 5.38889E-09 5.38901E-09 *table -0.00115285 -0.00114693 -0.00114087 -0.00113478 -0.0011286 -0.00112233 -0.00111597 -0.00110951 -0.00110293 -0.00109624 -0.00108941 -0.00108243 -0.0010753 -0.00106797 -0.00106044 -0.00105264 -0.00104451 -0.00103589 -0.00102647 -0.00101567 -0.0010025 -0.000985767 -0.000964413 -0.000937674 -0.000905071 -0.000866309 -0.000821198 -0.000769607 -0.000711438 -0.000646614 -0.000575068 -0.000496742 -0.000411581 -0.000319537 -0.000220564 -0.00011462 -1.66576E-06 0.000113929 0.000227759 -0.00109876 -0.00109308 -0.00108728 -0.00108145 -0.00107554 -0.00106955 -0.00106347 -0.00105731 -0.00105104 -0.00104467 -0.00103818 -0.00103155 -0.00102479 -0.00101786 -0.00101075 -0.00100341 -0.000995803 -0.000987824 -0.000979284 -0.000969787 -0.000958583 -0.000944542 -0.000926412 -0.000903172 -0.00087414 -0.000838899 -0.000797192 -0.000748852 -0.000693759 -0.000631822 -0.000562964 -0.000487121 -0.000404233 -0.000314245 -0.000217106 -0.00011277 -1.19174E-06 0.000113243 0.000226091 -0.0010437 -0.00103826 -0.00103271 -0.00102713 -0.00102149 -0.00101578 -0.00100999 -0.00100412 -0.000998157 -0.000992101 -0.00098594 -0.000979664 -0.000973261 -0.000966717 -0.00096001 -0.000953116 -0.000945994 -0.00093858 -0.000930755 -0.000922271 -0.00091262 -0.000900881 -0.000885776 -0.000866033 -0.0008407 -0.000809175 -0.000771099 -0.000726249 -0.000674473 -0.000615662 -0.000549728 -0.000476598 -0.000396204 -0.000308487 -0.00021339 -0.00011086 -8.48931E-07 0.000112252 0.000223966 -0.000987675 -0.000982465 -0.000977173 -0.000971851 -0.000966473 -0.000961035 -0.000955529 -0.000949951 -0.000944294 -0.000938552 -0.000932717 -0.000926781 -0.000920733 -0.000914562 -0.000908251 -0.000901779 -0.000895116 -0.000888218 -0.000881005 -0.000873326 -0.000864864 -0.00085497 -0.000842532 -0.000826152 -0.000804574 -0.000776936 -0.000742714 -0.0007016 -0.000653397 -0.000597968 -0.000535211 -0.00046504 -0.000387382 -0.00030217 -0.000209341 -0.000108837 -6.0223E-07 0.000110972 0.000221384 -0.00093072 -0.00092573 -0.000920706 -0.00091564 -0.000910527 -0.000905361 -0.000900137 -0.00089485 -0.000889493 -0.000884061 -0.000878548 -0.000872946 -0.000867247 -0.00086144 -0.000855513 -0.000849449 -0.000843223 -0.000836805 -0.000830139 -0.000823132 -0.00081559 -0.000807102 -0.000796848 -0.000783522 -0.000765639 -0.000742001 -0.000711842 -0.000674714 -0.000630349 -0.000578575 -0.000519265 -0.000452321 -0.00037766 -0.000295207 -0.000204893 -0.000106653 -4.25383E-07 0.000109411 0.000218337 -0.000872898 -0.00086815 -0.000863374 -0.000858564 -0.000853715 -0.000848821 -0.000843877 -0.000838878 -0.000833819 -0.000828695 -0.0008235 -0.000818227 -0.00081287 -0.000807421 -0.000801868 -0.000796197 -0.000790392 -0.000784426 -0.000778264 -0.000771841 -0.000765041 -0.000757617 -0.000749039 -0.000738284 -0.000723853 -0.000704228 -0.000678299 -0.000645401 -0.000605151 -0.000557317 -0.000501743 -0.000438313 -0.000366931 -0.000287512 -0.000199981 -0.000104266 -2.99004E-07 0.000107568 0.000214806 -0.000814299 -0.000809793 -0.000805266 -0.000800713 -0.000796127 -0.000791505 -0.00078684 -0.000782128 -0.000777365 -0.000772545 -0.000767664 -0.000762717 -0.000757697 -0.000752597 -0.000747409 -0.000742122 -0.000736721 -0.000731188 -0.000725495 -0.0007196 -0.000713429 -0.000706835 -0.000699503 -0.000690749 -0.000679318 -0.000663546 -0.000641932 -0.000613479 -0.000577619 -0.000534025 -0.000482495 -0.000422885 -0.000355085 -0.000279 -0.000194544 -0.000101639 -2.08923E-07 0.000105434 0.000210765 -0.000755036 -0.000750774 -0.000746497 -0.000742201 -0.000737879 -0.000733528 -0.000729142 -0.000724716 -0.000720247 -0.00071573 -0.00071116 -0.000706534 -0.000701846 -0.00069709 -0.000692259 -0.000687345 -0.000682336 -0.000677217 -0.000671969 -0.000666562 -0.000660947 -0.000655035 -0.000648643 -0.000641363 -0.000632319 -0.000620008 -0.00060264 -0.000578787 -0.000547577 -0.000508529 -0.000461365 -0.000405903 -0.000342011 -0.000269581 -0.000188518 -9.87331E-05 -1.44857E-07 0.000102996 0.000206181 -0.0006953 -0.000691285 -0.00068726 -0.000683222 -0.000679165 -0.000675084 -0.000670976 -0.000666836 -0.000662659 -0.000658443 -0.000654182 -0.000649874 -0.000645513 -0.000641095 -0.000636614 -0.000632063 -0.000627434 -0.000622715 -0.000617892 -0.000612942 -0.000607832 -0.000602508 -0.00059686 -0.000590659 -0.000583375 -0.000573898 -0.000560466 -0.000541234 -0.000514886 -0.000480681 -0.000438213 -0.000387242 -0.000327605 -0.000259175 -0.000181844 -9.55162E-05 -9.93836E-08 0.000100234 0.000201012 -0.000635349 -0.000631581 -0.000627811 -0.000624032 -0.00062024 -0.000616431 -0.0006126 -0.000608744 -0.000604859 -0.000600941 -0.000596986 -0.000592992 -0.000588954 -0.000584869 -0.000580731 -0.000576536 -0.000572276 -0.000567943 -0.000563526 -0.000559008 -0.000554368 -0.000549567 -0.000544543 -0.000539163 -0.000533133 -0.000525765 -0.000515668 -0.000500846 -0.000479466 -0.000450365 -0.00041292 -0.000366793 -0.000311771 -0.000247704 -0.000174469 -9.19566E-05 -6.71669E-08 9.71279E-05 0.000195211 -0.000575395 -0.00057188 -0.000568366 -0.000564848 -0.000561323 -0.000557785 -0.000554232 -0.00055066 -0.000547065 -0.000543443 -0.000539793 -0.000536109 -0.00053239 -0.000528633 -0.000524832 -0.000520984 -0.000517084 -0.000513125 -0.000509099 -0.000504994 -0.000500793 -0.000496473 -0.000491993 -0.000487277 -0.000482164 -0.000476275 -0.000468716 -0.000457775 -0.000441269 -0.000417458 -0.000385347 -0.000344422 -0.000294395 -0.000235078 -0.000166327 -8.80193E-05 -4.43819E-08 9.36552E-05 0.00018873 -0.000515692 -0.000512433 -0.000509178 -0.000505924 -0.000502667 -0.000499403 -0.000496128 -0.000492839 -0.000489533 -0.000486207 -0.000482858 -0.000479483 -0.00047608 -0.000472645 -0.000469176 -0.000465669 -0.000462121 -0.000458525 -0.000454877 -0.000451167 -0.000447383 -0.00044351 -0.000439522 -0.000435372 -0.000430971 -0.000426121 -0.000420329 -0.000412436 -0.000400384 -0.000381889 -0.000355371 -0.000320003 -0.000275362 -0.000221203 -0.000157351 -8.36677E-05 -2.82953E-08 8.97868E-05 0.00018152 -0.000456539 -0.00045354 -0.000450548 -0.000447561 -0.000444574 -0.000441585 -0.000438589 -0.000435584 -0.000432567 -0.000429535 -0.000426486 -0.000423417 -0.000420326 -0.000417211 -0.000414068 -0.000410896 -0.000407691 -0.00040445 -0.000401167 -0.000397837 -0.000394452 -0.000391 -0.000387464 -0.000383816 -0.000380006 -0.000375927 -0.00037133 -0.000365572 -0.000357161 -0.0003437 -0.00032291 -0.000293421 -0.000254562 -0.000205986 -0.000147475 -7.88646E-05 -1.69576E-08 8.54907E-05 0.000173523 -0.000398284 -0.000395551 -0.000392827 -0.00039011 -0.000387396 -0.000384683 -0.000381968 -0.000379247 -0.000376519 -0.000373781 -0.000371031 -0.000368266 -0.000365484 -0.000362684 -0.000359864 -0.000357021 -0.000354153 -0.000351257 -0.00034833 -0.000345367 -0.000342364 -0.000339311 -0.000336198 -0.000333007 -0.000329708 -0.000326245 -0.000322493 -0.000318133 -0.00031232 -0.000303162 -0.000287972 -0.000264595 -0.000231895 -0.000189337 -0.000136628 -7.35714E-05 -8.98143E-09 8.07323E-05 0.000164673 -0.00034134 -0.000338877 -0.000336426 -0.000333983 -0.000331545 -0.000329111 -0.000326678 -0.000324243 -0.000321804 -0.00031936 -0.000316907 -0.000314444 -0.000311969 -0.000309482 -0.000306979 -0.00030446 -0.000301922 -0.000299364 -0.000296783 -0.000294176 -0.000291539 -0.000288868 -0.000286153 -0.000283386 -0.000280546 -0.000277604 -0.000274496 -0.000271071 -0.000266924 -0.000260936 -0.000250755 -0.000233513 -0.000207289 -0.000171175 -0.000124746 -6.77503E-05 -3.38064E-09 7.54748E-05 0.000154902 -0.000286192 -0.000284006 -0.000281831 -0.000279666 -0.000277509 -0.000275357 -0.000273207 -0.000271059 -0.00026891 -0.000266758 -0.000264602 -0.000262439 -0.000260269 -0.00025809 -0.000255901 -0.000253701 -0.000251487 -0.00024926 -0.000247016 -0.000244754 -0.000242472 -0.000240165 -0.000237829 -0.000235457 -0.000233039 -0.000230556 -0.000227977 -0.000225228 -0.000222131 -0.000218159 -0.000211837 -0.000200323 -0.00018073 -0.000151447 -0.000111774 -6.13655E-05 5.44304E-10 6.9681E-05 0.000144141 -0.000233418 -0.000231514 -0.000229621 -0.000227739 -0.000225864 -0.000223996 -0.000222133 -0.000220273 -0.000218413 -0.000216554 -0.000214693 -0.000212829 -0.000210961 -0.000209088 -0.000207209 -0.000205322 -0.000203427 -0.000201522 -0.000199607 -0.00019768 -0.000195739 -0.000193783 -0.000191808 -0.000189809 -0.000187782 -0.000185715 -0.000183591 -0.000181377 -0.000178992 -0.000176219 -0.000172369 -0.000165507 -0.000152338 -0.000130151 -9.76785E-05 -5.43889E-05 3.28899E-09 6.33149E-05 0.000132321 -0.000183721 -0.000182104 -0.000180497 -0.0001789 -0.000177312 -0.00017573 -0.000174154 -0.000172582 -0.000171013 -0.000169446 -0.000167879 -0.000166311 -0.000164742 -0.00016317 -0.000161596 -0.000160017 -0.000158433 -0.000156844 -0.000155249 -0.000153647 -0.000152037 -0.000150417 -0.000148785 -0.00014714 -0.000145478 -0.000143793 -0.000142075 -0.00014031 -0.00013846 -0.00013644 -0.000133984 -0.000130183 -0.000122527 -0.000107406 -8.24807E-05 -4.68113E-05 5.20392E-09 5.63468E-05 0.000119382 -0.000137977 -0.000136649 -0.000135331 -0.000134022 -0.00013272 -0.000131426 -0.000130137 -0.000128852 -0.000127572 -0.000126294 -0.000125017 -0.000123742 -0.000122467 -0.000121192 -0.000119916 -0.000118638 -0.000117358 -0.000116076 -0.000114791 -0.000113502 -0.000112209 -0.000110911 -0.000109607 -0.000108296 -0.000106976 -0.000105643 -0.000104294 -0.00010292 -0.000101506 -0.000100017 -9.83589E-05 -9.62062E-05 -9.23453E-05 -8.36013E-05 -6.63181E-05 -3.8668E-05 6.53662E-09 4.87633E-05 0.000105278 -9.7294E-05 -9.62547E-05 -9.52237E-05 -9.42002E-05 -9.31834E-05 -9.21726E-05 -9.11669E-05 -9.01657E-05 -8.91683E-05 -8.8174E-05 -8.71822E-05 -8.61923E-05 -8.52038E-05 -8.42162E-05 -8.32292E-05 -8.22423E-05 -8.12551E-05 -8.02674E-05 -7.9279E-05 -7.82894E-05 -7.72983E-05 -7.63054E-05 -7.53101E-05 -7.43118E-05 -7.33094E-05 -7.23017E-05 -7.12863E-05 -7.02596E-05 -6.92151E-05 -6.81392E-05 -6.69988E-05 -6.56919E-05 -6.38167E-05 -5.97264E-05 -4.95881E-05 -3.00953E-05 7.46159E-09 4.05909E-05 9.00091E-05 -6.30383E-05 -6.22781E-05 -6.15243E-05 -6.07763E-05 -6.00335E-05 -5.92955E-05 -5.85618E-05 -5.7832E-05 -5.71054E-05 -5.63818E-05 -5.56607E-05 -5.49418E-05 -5.42247E-05 -5.35091E-05 -5.27947E-05 -5.20813E-05 -5.13687E-05 -5.06567E-05 -4.99451E-05 -4.92339E-05 -4.85227E-05 -4.78115E-05 -4.71001E-05 -4.6388E-05 -4.5675E-05 -4.49603E-05 -4.42431E-05 -4.35217E-05 -4.27936E-05 -4.20537E-05 -4.12907E-05 -4.04739E-05 -3.94944E-05 -3.78343E-05 -3.32258E-05 -2.14408E-05 8.10164E-09 3.19466E-05 7.36676E-05 -3.66137E-05 -3.61081E-05 -3.56067E-05 -3.51094E-05 -3.46158E-05 -3.41255E-05 -3.36384E-05 -3.31541E-05 -3.26724E-05 -3.2193E-05 -3.17156E-05 -3.12402E-05 -3.07663E-05 -3.0294E-05 -2.9823E-05 -2.93532E-05 -2.88845E-05 -2.84168E-05 -2.795E-05 -2.74841E-05 -2.70189E-05 -2.65545E-05 -2.60907E-05 -2.56274E-05 -2.51645E-05 -2.47017E-05 -2.42386E-05 -2.37748E-05 -2.33093E-05 -2.28402E-05 -2.23639E-05 -2.18714E-05 -2.13347E-05 -2.06314E-05 -1.90207E-05 -1.34116E-05 8.54305E-09 2.31407E-05 5.65572E-05 -1.87294E-05 -1.84324E-05 -1.8138E-05 -1.7846E-05 -1.75562E-05 -1.72686E-05 -1.69829E-05 -1.6699E-05 -1.64167E-05 -1.6136E-05 -1.58567E-05 -1.55786E-05 -1.53018E-05 -1.50261E-05 -1.47514E-05 -1.44777E-05 -1.42049E-05 -1.3933E-05 -1.36619E-05 -1.33916E-05 -1.31222E-05 -1.28535E-05 -1.25855E-05 -1.23183E-05 -1.20517E-05 -1.17858E-05 -1.15204E-05 -1.12552E-05 -1.09901E-05 -1.07243E-05 -1.04569E-05 -1.01851E-05 -9.90183E-06 -9.57921E-06 -9.04929E-06 -7.04491E-06 8.84635E-09 1.48279E-05 3.94304E-05 -8.45287E-06 -8.30189E-06 -8.15223E-06 -8.00382E-06 -7.85658E-06 -7.71044E-06 -7.56532E-06 -7.42116E-06 -7.27791E-06 -7.13549E-06 -6.99386E-06 -6.85297E-06 -6.71276E-06 -6.57321E-06 -6.43428E-06 -6.29594E-06 -6.15817E-06 -6.02095E-06 -5.88426E-06 -5.74812E-06 -5.61249E-06 -5.47739E-06 -5.34282E-06 -5.20875E-06 -5.07519E-06 -4.94212E-06 -4.80951E-06 -4.6773E-06 -4.54539E-06 -4.41362E-06 -4.28163E-06 -4.1487E-06 -4.01283E-06 -3.86721E-06 -3.67456E-06 -3.07382E-06 9.05398E-09 8.0326E-06 2.38471E-05 -3.40853E-06 -3.34236E-06 -3.27678E-06 -3.21174E-06 -3.14723E-06 -3.08321E-06 -3.01965E-06 -2.95653E-06 -2.89382E-06 -2.8315E-06 -2.76954E-06 -2.70792E-06 -2.64663E-06 -2.58565E-06 -2.52497E-06 -2.46458E-06 -2.40447E-06 -2.34462E-06 -2.28505E-06 -2.22574E-06 -2.1667E-06 -2.10793E-06 -2.04942E-06 -1.99117E-06 -1.93319E-06 -1.87547E-06 -1.81801E-06 -1.76078E-06 -1.70376E-06 -1.64689E-06 -1.59008E-06 -1.5331E-06 -1.47537E-06 -1.41502E-06 -1.34257E-06 -1.16214E-06 9.1956E-09 3.6136E-06 1.20388E-05 -1.2205E-06 -1.19558E-06 -1.17088E-06 -1.14639E-06 -1.1221E-06 -1.098E-06 -1.07408E-06 -1.05032E-06 -1.02673E-06 -1.00328E-06 -9.79978E-07 -9.56809E-07 -9.3377E-07 -9.10854E-07 -8.88056E-07 -8.65374E-07 -8.42803E-07 -8.20342E-07 -7.97989E-07 -7.75744E-07 -7.53607E-07 -7.31579E-07 -7.09658E-07 -6.87847E-07 -6.66144E-07 -6.44549E-07 -6.23061E-07 -6.01674E-07 -5.8038E-07 -5.59163E-07 -5.37992E-07 -5.16798E-07 -4.95409E-07 -4.73273E-07 -4.47718E-07 -3.91957E-07 9.29184E-09 1.40481E-06 5.12448E-06 -3.7521E-07 -3.67245E-07 -3.59352E-07 -3.51526E-07 -3.43766E-07 -3.36066E-07 -3.28425E-07 -3.20838E-07 -3.13304E-07 -3.05818E-07 -2.9838E-07 -2.90985E-07 -2.83633E-07 -2.76322E-07 -2.6905E-07 -2.61817E-07 -2.5462E-07 -2.47461E-07 -2.40337E-07 -2.33249E-07 -2.26198E-07 -2.19182E-07 -2.12203E-07 -2.0526E-07 -1.98354E-07 -1.91485E-07 -1.84651E-07 -1.77851E-07 -1.71084E-07 -1.64345E-07 -1.57623E-07 -1.50901E-07 -1.44127E-07 -1.37144E-07 -1.29201E-07 -1.12836E-07 9.35697E-09 4.95347E-07 1.94069E-06 -9.37166E-08 -9.15602E-08 -8.94234E-08 -8.73054E-08 -8.52051E-08 -8.31216E-08 -8.1054E-08 -7.90015E-08 -7.69633E-08 -7.49387E-08 -7.29269E-08 -7.09275E-08 -6.89398E-08 -6.69634E-08 -6.49979E-08 -6.3043E-08 -6.10985E-08 -5.91641E-08 -5.72399E-08 -5.53256E-08 -5.34214E-08 -5.15273E-08 -4.96433E-08 -4.77694E-08 -4.59058E-08 -4.40523E-08 -4.22087E-08 -4.03749E-08 -3.85502E-08 -3.67333E-08 -3.49218E-08 -3.31107E-08 -3.12869E-08 -2.94095E-08 -2.72846E-08 -2.29951E-08 9.40083E-09 1.60505E-07 6.80769E-07 -1.48094E-08 -1.43004E-08 -1.37961E-08 -1.32962E-08 -1.28006E-08 -1.23089E-08 -1.18211E-08 -1.13369E-08 -1.0856E-08 -1.03784E-08 -9.90392E-09 -9.43236E-09 -8.96361E-09 -8.49757E-09 -8.03414E-09 -7.57326E-09 -7.11486E-09 -6.65891E-09 -6.20538E-09 -5.75426E-09 -5.30555E-09 -4.85926E-09 -4.4154E-09 -3.97398E-09 -3.535E-09 -3.09846E-09 -2.66432E-09 -2.23252E-09 -1.8029E-09 -1.37518E-09 -9.48812E-10 -5.22578E-10 -9.34668E-11 3.4804E-10 8.46959E-10 1.84805E-09 9.43018E-09 5.04057E-08 2.21079E-07 4.23318E-09 4.34292E-09 4.45164E-09 4.5594E-09 4.66625E-09 4.77222E-09 4.87738E-09 4.98175E-09 5.08538E-09 5.18831E-09 5.29057E-09 5.39218E-09 5.49319E-09 5.59361E-09 5.69346E-09 5.79275E-09 5.89151E-09 5.98973E-09 6.08742E-09 6.1846E-09 6.28124E-09 6.37736E-09 6.47295E-09 6.56801E-09 6.66254E-09 6.75654E-09 6.85001E-09 6.94298E-09 7.03547E-09 7.12755E-09 7.21933E-09 7.31107E-09 7.40342E-09 7.49843E-09 7.60574E-09 7.8207E-09 9.44967E-09 1.92198E-08 6.80497E-08 8.39414E-09 8.41663E-09 8.43892E-09 8.461E-09 8.4829E-09 8.50462E-09 8.52617E-09 8.54756E-09 8.5688E-09 8.58989E-09 8.61084E-09 8.63167E-09 8.65236E-09 8.67294E-09 8.6934E-09 8.71374E-09 8.73397E-09 8.7541E-09 8.77411E-09 8.79402E-09 8.81382E-09 8.83351E-09 8.85309E-09 8.87256E-09 8.89193E-09 8.91118E-09 8.93033E-09 8.94937E-09 8.96831E-09 8.98717E-09 9.00596E-09 9.02475E-09 9.04367E-09 9.06312E-09 9.08509E-09 9.12908E-09 9.46246E-09 1.15878E-08 2.37035E-08 9.25732E-09 9.26184E-09 9.26627E-09 9.27068E-09 9.27506E-09 9.2794E-09 9.2837E-09 9.28797E-09 9.29222E-09 9.29643E-09 9.30062E-09 9.30478E-09 9.30891E-09 9.31302E-09 9.31711E-09 9.32118E-09 9.32522E-09 9.32924E-09 9.33324E-09 9.33721E-09 9.34117E-09 9.3451E-09 9.34901E-09 9.3529E-09 9.35677E-09 9.36062E-09 9.36444E-09 9.36824E-09 9.37203E-09 9.37579E-09 9.37955E-09 9.3833E-09 9.38708E-09 9.39096E-09 9.39535E-09 9.40413E-09 9.4707E-09 9.90897E-09 1.26106E-08 9.43376E-09 9.43465E-09 9.43553E-09 9.4364E-09 9.43727E-09 9.43812E-09 9.43897E-09 9.43982E-09 9.44065E-09 9.44148E-09 9.44231E-09 9.44313E-09 9.44395E-09 9.44476E-09 9.44557E-09 9.44637E-09 9.44717E-09 9.44796E-09 9.44875E-09 9.44953E-09 9.45031E-09 9.45109E-09 9.45186E-09 9.45263E-09 9.45339E-09 9.45415E-09 9.45491E-09 9.45566E-09 9.4564E-09 9.45715E-09 9.45789E-09 9.45863E-09 9.45938E-09 9.46014E-09 9.46101E-09 9.46274E-09 9.47588E-09 9.56381E-09 1.01289E-08 9.47081E-09 9.47099E-09 9.47116E-09 9.47133E-09 9.4715E-09 9.47167E-09 9.47183E-09 9.472E-09 9.47216E-09 9.47233E-09 9.47249E-09 9.47265E-09 9.47281E-09 9.47297E-09 9.47313E-09 9.47329E-09 9.47344E-09 9.4736E-09 9.47375E-09 9.47391E-09 9.47406E-09 9.47421E-09 9.47436E-09 9.47452E-09 9.47467E-09 9.47481E-09 9.47496E-09 9.47511E-09 9.47526E-09 9.4754E-09 9.47555E-09 9.47569E-09 9.47584E-09 9.47599E-09 9.47616E-09 9.4765E-09 9.47908E-09 9.4965E-09 9.61085E-09 9.4794E-09 9.47944E-09 9.47947E-09 9.4795E-09 9.47954E-09 9.47957E-09 9.4796E-09 9.47964E-09 9.47967E-09 9.4797E-09 9.47973E-09 9.47976E-09 9.47979E-09 9.47983E-09 9.47986E-09 9.47989E-09 9.47992E-09 9.47995E-09 9.47998E-09 9.48001E-09 9.48004E-09 9.48007E-09 9.4801E-09 9.48013E-09 9.48016E-09 9.48019E-09 9.48022E-09 9.48024E-09 9.48027E-09 9.4803E-09 9.48033E-09 9.48036E-09 9.48039E-09 9.48042E-09 9.48045E-09 9.48052E-09 9.48102E-09 9.48445E-09 9.50722E-09 9.48185E-09 9.48185E-09 9.48186E-09 9.48187E-09 9.48187E-09 9.48188E-09 9.48189E-09 9.48189E-09 9.4819E-09 9.4819E-09 9.48191E-09 9.48192E-09 9.48192E-09 9.48193E-09 9.48193E-09 9.48194E-09 9.48195E-09 9.48195E-09 9.48196E-09 9.48196E-09 9.48197E-09 9.48198E-09 9.48198E-09 9.48199E-09 9.48199E-09 9.482E-09 9.482E-09 9.48201E-09 9.48202E-09 9.48202E-09 9.48203E-09 9.48203E-09 9.48204E-09 9.48204E-09 9.48205E-09 9.48206E-09 9.48216E-09 9.48284E-09 9.48734E-09 9.48274E-09 9.48274E-09 9.48274E-09 9.48274E-09 9.48274E-09 9.48274E-09 9.48274E-09 9.48274E-09 9.48275E-09 9.48275E-09 9.48275E-09 9.48275E-09 9.48275E-09 9.48275E-09 9.48275E-09 9.48275E-09 9.48276E-09 9.48276E-09 9.48276E-09 9.48276E-09 9.48276E-09 9.48276E-09 9.48276E-09 9.48276E-09 9.48276E-09 9.48277E-09 9.48277E-09 9.48277E-09 9.48277E-09 9.48277E-09 9.48277E-09 9.48277E-09 9.48277E-09 9.48277E-09 9.48278E-09 9.48278E-09 9.4828E-09 9.48293E-09 9.48382E-09 9.48311E-09 9.48311E-09 9.48311E-09 9.48311E-09 9.48311E-09 9.48311E-09 9.48311E-09 9.48311E-09 9.48311E-09 9.48311E-09 9.48311E-09 9.48311E-09 9.48311E-09 9.48311E-09 9.48311E-09 9.48311E-09 9.48311E-09 9.48311E-09 9.48311E-09 9.48311E-09 9.48311E-09 9.48311E-09 9.48311E-09 9.48311E-09 9.48311E-09 9.48312E-09 9.48312E-09 9.48312E-09 9.48312E-09 9.48312E-09 9.48312E-09 9.48312E-09 9.48312E-09 9.48312E-09 9.48312E-09 9.48312E-09 9.48312E-09 9.48315E-09 9.48332E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.48326E-09 9.4833E-09 tmpk8ny_4pz/examples/xspice/table/table-model-bip-2d-2.sp0000644000175000017500000000105713546075722023326 0ustar carstencarstenOpAmp Test with Bipolar Table Model * please run the table generator table-generator-q-2d.sp in ngspice to * create the table data file qinn-clc409-2d-1.table required by clc409mod.sub vddp vp 0 3 vddn vn 0 -3 Xopmap 0 ino outo vp vn CLC409 Rin in ino 1k Rfb ino outo 3k vin in 0 dc 0 PULSE(-1 1 20NS 20NS 20NS 500NS 1000NS) * circuit with standard bip model *.include clc409.sub * circuit with qinn bipolar table model .include clc409mod.sub .options savecurrents .control dc vin -1 1 0.1 plot v(outo) reset tran 10n 1000n plot v(outo) .endc .end tmpk8ny_4pz/examples/xspice/table/table-model-mos-2d-3.sp0000644000175000017500000000304713546075722023354 0ustar carstencarstenCode Model Test - 2d Table Model * ring oscillator * *** analysis type *** .control option trtol=1 *dc V1 0.0 1.7 0.1 V2 0.3 1.7 0.3 *op tran 100p 20n *plot i(Vs) i(Vs2) plot v(in1) rusage .endc * *** input sources *** * v1 d 0 DC 1.5 v2 g 0 DC 1.5 Vs s 0 0 Vs2 s2 0 0 vsinv vss 0 0 vdinv vdd 0 1.5 * ********************* *xmosnt d g s tbmosn *mn2 d g s2 s2 n1 l=0.13u w=10u ad=5p pd=6u as=5p ps=6u rgeoMod=1 .subckt inv vd vs in out *mp2 out in vd vd p1 l=0.13u w=10u ad=5p pd=6u as=5p ps=6u xmospt out in vd tbmosp *mn2 out in vs vs n1 l=0.13u w=5u ad=5p pd=6u as=5p ps=6u xmosnt out in vs tbmosn .ends xmosinv1 vdd vss in1 out1 inv xmosinv2 vdd vss out1 out2 inv xmosinv3 vdd vss out2 out3 inv xmosinv4 vdd vss out3 out4 inv xmosinv5 vdd vss out4 in1 inv .subckt tbmosn d g s *** table model of nmos transistor *** cdg d g 0.01p csg s g 0.014p amos1 %vd(d s) %vd(g s) %id(d s) mostable1 .model mostable1 table2d (offset=0.0 gain=0.5 order=3 file="bsim4n-2d-3.table") * NMOS L=0.13u W=10.0u rgeoMod=1 * BSIM 4.7 * change width of transistor by modifying parameter "gain" * source is always tied to bulk (2d model!) .ends .subckt tbmosp d g s *** table model of pmos transistor *** cdg d g 0.01p csg s g 0.014p amos2 %vd(d s) %vd(g s) %id(d s) mostable2 .model mostable2 table2d (offset=0.0 gain=1 order=3 file="bsim4p-2d-3.table") * PMOS L=0.13u W=10.0u rgeoMod=1 * BSIM 4.7 * change width of transistor by modifying parameter "gain" * source is always tied to bulk (2d model!) .ends .include ./modelcards/modelcard.nmos .include ./modelcards/modelcard.pmos .end tmpk8ny_4pz/examples/xspice/table/table-model-man-2d-1.sp0000644000175000017500000000066513546075722023332 0ustar carstencarstenCode Model Test - 2d Table Model * simple input table, generated manually * *** analysis type *** .control dc V1 0.1 6.9 0.2 V2 0.5 7.5 0.5 plot v(1) v(2) v(11, 10) .endc * *** input sources *** * v1 1 0 DC 1.5 * v2 2 0 DC 1.5 * *** table model *** a1 1 2 %id(10 11) table1 .model table1 table2d (offset=0.0 gain=1.0 order=3 file="test-2d-1.table") * * *** resistors to ground *** r1 1 0 1k r2 2 0 1k r3 10 11 1k r10 10 0 1k * * .end tmpk8ny_4pz/examples/xspice/table/table-model-mos-3d-5.sp0000644000175000017500000000305113546075722023352 0ustar carstencarstenCode Model Test - 3d Table Model * Ring oscillator made of NAND gates * *** analysis type *** .control option trtol=1 *dc V1 0.0 1.7 0.1 V2 0.3 1.7 0.3 *op tran 100p 20n *plot i(Vs) i(Vs2) plot v(in1) rusage .endc * *** input sources *** * v1 d 0 DC 1.5 v2 g 0 DC 1.5 Vs s 0 0 Vs2 s2 0 0 vsinv vss 0 0 vdinv vdd 0 1.5 * ********************* *xmosnt d g s tbmosn *mn2 d g s2 s2 n1 l=0.13u w=10u ad=5p pd=6u as=5p ps=6u rgeoMod=1 .SUBCKT NAND VDD VSS in1 in2 out * NODES: VCC, Ground, INPUT(2), OUTPUT xmospt1 out in2 vdd vdd tbmosp xmosnt2 net.1 in2 vss vss tbmosn xmospt3 out in1 vdd vdd tbmosp xmosnt4 out in1 net.1 vss tbmosn .ENDS NAND xmosinv1 vdd vss in1 in1 out1 nand xmosinv2 vdd vss out1 out1 out2 nand xmosinv3 vdd vss out2 out2 out3 nand xmosinv4 vdd vss out3 out3 out4 nand xmosinv5 vdd vss out4 out4 in1 nand .subckt tbmosn d g s b *** table model of nmos transistor *** cdg d g 0.01p csg s g 0.014p amos1 %vd(d s) %vd(g s) %vd(b s) %id(d s) mostable1 .model mostable1 table3d (offset=0.0 gain=0.5 order=3 file="bsim4n-3d-1.table") * NMOS L=0.13u W=10.0u rgeoMod=1 * BSIM 4.7 * change width of transistor by modifying parameter "gain" .ends .subckt tbmosp d g s b *** table model of pmos transistor *** cdg d g 0.01p csg s g 0.014p amos2 %vd(d s) %vd(g s) %vd(b s) %id(d s) mostable2 .model mostable2 table3d (offset=0.0 gain=1 order=3 file="bsim4p-3d-1.table") * PMOS L=0.13u W=10.0u rgeoMod=1 * BSIM 4.7 * change width of transistor by modifying parameter "gain" .ends .include ./modelcards/modelcard.nmos .include ./modelcards/modelcard.pmos .end tmpk8ny_4pz/examples/xspice/table/test-2d-3.table0000644000175000017500000000027013546075722022012 0ustar carstencarsten* table source * test of gradients 7 7 * x row 0 1 2 3 4 5 6 * y column 0 0.5 1 1.5 2 2.5 3 * table 1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 3 3 4 4 4 4 4 4 4 5 5 5 5 5 5 5 6 6 6 6 6 6 6 tmpk8ny_4pz/examples/xspice/table/table-model-mos-3d-3.sp0000644000175000017500000000277513546075722023364 0ustar carstencarstenCode Model Test - 3d Table Model * Ring oscillator made of inverters * *** analysis type *** .control option trtol=1 *dc V1 0.0 1.7 0.1 V2 0.3 1.7 0.3 *op tran 100p 20n *plot i(Vs) i(Vs2) plot v(in1) rusage .endc * *** input sources *** * v1 d 0 DC 1.5 v2 g 0 DC 1.5 Vs s 0 0 Vs2 s2 0 0 vsinv vss 0 0 vdinv vdd 0 1.5 * ********************* *xmosnt d g s tbmosn *mn2 d g s2 s2 n1 l=0.13u w=10u ad=5p pd=6u as=5p ps=6u rgeoMod=1 .subckt inv vd vs in out *mp2 out in vd vd p1 l=0.13u w=10u ad=5p pd=6u as=5p ps=6u xmospt out in vd vd tbmosp *mn2 out in vs vs n1 l=0.13u w=5u ad=5p pd=6u as=5p ps=6u xmosnt out in vs vs tbmosn .ends xmosinv1 vdd vss in1 out1 inv xmosinv2 vdd vss out1 out2 inv xmosinv3 vdd vss out2 out3 inv xmosinv4 vdd vss out3 out4 inv xmosinv5 vdd vss out4 in1 inv .subckt tbmosn d g s b *** table model of nmos transistor *** cdg d g 0.01p csg s g 0.014p amos1 %vd(d s) %vd(g s) %vd(b s) %id(d s) mostable1 .model mostable1 table3d (offset=0.0 gain=0.5 order=3 file="bsim4n-3d-1.table") * NMOS L=0.13u W=10.0u rgeoMod=1 * BSIM 4.7 * change width of transistor by modifying parameter "gain" .ends .subckt tbmosp d g s b *** table model of pmos transistor *** cdg d g 0.01p csg s g 0.014p amos2 %vd(d s) %vd(g s) %vd(b s) %id(d s) mostable2 .model mostable2 table3d (offset=0.0 gain=1 order=3 file="bsim4p-3d-1.table") * PMOS L=0.13u W=10.0u rgeoMod=1 * BSIM 4.7 * change width of transistor by modifying parameter "gain" .ends .include ./modelcards/modelcard.nmos .include ./modelcards/modelcard.pmos .end tmpk8ny_4pz/examples/xspice/table/table-model-bip-2d-1.sp0000644000175000017500000000353413546075722023327 0ustar carstencarsten** npn bipolar: table 2D (Vce, Ib) compared to q model * bipolar transistor qinn from National Semi op-amp clc409 * please run the table generator table-generator-q-2d.sp in ngspice to * create the table data file qinn-clc409-2d-1.table as required here ** Circuit Description ** Q3 2 1 3 QINN ib 0 1 2u vce 2 0 5 vee 3 0 0 xbip cc bb ee tbqnpn ib2 0 bb 2u vce2 cc 0 1 vee2 ee 0 0 * set a simulation temperature .options temp=1 .subckt tbqnpn c b e *** table model of npn bipolar transistor *** * bip qinn from national op-amp CLC409 * table values extracted at nominal temperature of 27°C * simple behavioral temperature model .param fact = 0.05 .param tgain = 1. + (TEMPER / 27. - 1.) * {fact} abip1 %vd(c e) %id(bint e) %id(c e) biptable1 .model biptable1 table2d (offset=0.0 gain={tgain} order=2 file="qinn-clc409-2d-1.table") * CJE=1.632E-13 Cje b e 1.632E-13 * CJC=1.720E-13 Cjc b c 1.720E-13 * input diode Dbe b bint DMOD .model DMOD D (bv=5 is=1e-17 n=1.1) .ends .control * bipolar model qinn dc vce 0 5 0.05 ib 0.2u 1.8u 0.4u *plot i(vee) *plot v(1) ylimit 0 1 reset * bipolar from table dc vce2 0 5 0.05 ib2 0.2u 1.8u 0.4u plot dc1.i(vee) i(vee2) title 'table q3, q4 output current (i(vee2)) compared to bjt model (dc1.i(vee))' plot dc1.v(1) v(bb) ylimit 0.6 0.8 title 'table q3, q4 input diode (v(bb)) compared to bjt model (dc1.v(1))' .endc .MODEL QINN NPN + IS =0.166f BF =3.239E+02 NF =1.000E+00 VAF=8.457E+01 + IKF=2.462E-02 ISE=2.956E-17 NE =1.197E+00 BR =3.719E+01 + NR =1.000E+00 VAR=1.696E+00 IKR=3.964E-02 ISC=1.835E-19 + NC =1.700E+00 RB =118 IRB=0.000E+00 RBM=65.1 + RC =2.645E+01 CJE=1.632E-13 VJE=7.973E-01 + MJE=4.950E-01 TF =1.948E-11 XTF=1.873E+01 VTF=2.825E+00 + ITF=5.955E-02 PTF=0.000E+00 CJC=1.720E-13 VJC=8.046E-01 + MJC=4.931E-01 XCJC=589m TR =4.212E-10 CJS=629f + MJS=0 KF =2.000E-12 AF =1.000E+00 FC =9.765E-01 * .end tmpk8ny_4pz/examples/xspice/table/clc409mod.sub0000644000175000017500000001237513546075722021601 0ustar carstencarsten* please run the table generator table-generator-q-2d.sp in ngspice to * create the table data file qinn-clc409-2d-1.table as is required here * * This is a Very Wide band, Low Distortion Monolithic * Current Feedback Op Amp. * * Version 1, Rev. A, Date 04-09-92, By RRS * * Connections: Non-Inverting Input * | Inverting Input * | | Output * | | | +Vcc * | | | | -Vcc * | | | | | .SUBCKT CLC409 3 2 6 7 4 * * DC BIAS MIRROR * R1 7 4 28K R2 7 9 271 R3 10 4 335 * G1 7 11 POLY(2) 7 9 7 4 0 3.15M 21.5U C3 11 0 128F * G2 14 4 POLY(1) 10 4 0 2.95M C4 14 0 104F * * INPUT VOLTAGE BUFFER * E1 3 17 POLY(1) 35 0 1.0M 1.673 C6 17 0 1.00P * Q1 10 17 12 QINP D3 11 12 DY *Q2 9 17 13 QINN xq2 9 17 13 tbqnpn D4 13 14 DY * G3 2 0 POLY(1) 36 0 0 9.282M C10 2 0 2.9P * D5 22 2 DY *Q3 21 11 22 QINN xq3 21 11 22 tbqnpn D6 2 23 DY Q4 24 14 23 QINP * * CURRENT MIRROR GAIN BLOCKS * R10 7 20 640 V1 20 21 1.9 C8 21 28 294F G4 7 28 POLY(1) 7 20 0 4.3M R15 7 28 102K C13 28 0 641F D1 28 26 DX V3 7 26 1.65 G6 7 30 POLY(1) 7 20 0 2.74M C15 30 0 676F * R13 25 4 640 V2 24 25 1.85 C12 24 29 294F G5 29 4 POLY(1) 25 4 0 4.5M R16 29 4 761K C14 29 0 312F D2 27 29 DX V4 27 4 1.55 G7 31 4 POLY(1) 25 4 0 6.74M C16 31 0 330F * * OUTPUT STAGE AND COMPENSATION CAPACITORS * R14 28 29 45.0 Q5 4 29 30 QOUTP1 Q6 7 28 31 QOUTN1 * C9 21 33 .935P C11 24 33 .935P C17 33 0 4.00P R19 33 6 10 * Q7 7 30 33 QOUTN2 Q8 4 31 33 QOUTP2 * * NOISE BLOCKS * R20 35 0 122 R21 35 0 122 * R22 36 0 122 R23 36 0 122 * * MODELS * .MODEL DX D TT=200N .MODEL DY D IS=0.166F * .MODEL QINN NPN + IS =0.166f BF =3.239E+02 NF =1.000E+00 VAF=8.457E+01 + IKF=2.462E-02 ISE=2.956E-17 NE =1.197E+00 BR =3.719E+01 + NR =1.000E+00 VAR=1.696E+00 IKR=3.964E-02 ISC=1.835E-19 + NC =1.700E+00 RB =118 IRB=0.000E+00 RBM=65.1 + RC =2.645E+01 CJE=1.632E-13 VJE=7.973E-01 + MJE=4.950E-01 TF =1.948E-11 XTF=1.873E+01 VTF=2.825E+00 + ITF=5.955E-02 PTF=0.000E+00 CJC=1.720E-13 VJC=8.046E-01 + MJC=4.931E-01 XCJC=589m TR =4.212E-10 CJS=629f + MJS=0 KF =2.000E-12 AF =1.000E+00 FC =9.765E-01 * .MODEL QOUTN1 NPN + IS =3.954E-16 BF =3.239E+02 NF =1.000E+00 VAF=8.457E+01 + IKF=4.590E-02 ISE=5.512E-17 NE =1.197E+00 BR =3.719E+01 + NR =1.000E+00 VAR=1.696E+00 IKR=7.392E-02 ISC=3.087E-19 + NC =1.700E+00 RB =3.645E+01 IRB=0.000E+00 RBM=8.077E+00 + RE =3.010E-01 RC =2.702E+01 CJE=2.962E-13 + MJE=4.950E-01 TF =1.904E-11 XTF=1.873E+01 VTF=2.825E+00 + ITF=1.110E-01 PTF=0.000E+00 CJC=2.846E-13 VJC=8.046E-01 + MJC=4.931E-01 XCJC=1.562E-01 TR =5.832E-10 CJS=5.015E-13 + VJS=5.723E-01 MJS=4.105E-01 KF =2.000E-12 AF =1.000E+00 + FC =9.765E-01 * .MODEL QOUTN2 NPN + IS =9.386E-16 BF =3.239E+02 NF =1.000E+00 VAF=8.457E+01 + IKF=1.089E-01 ISE=1.308E-16 NE =1.197E+00 BR =3.956E+01 + NR =1.000E+00 VAR=1.696E+00 IKR=7.392E-02 ISC=1.378E-18 + NC =1.700E+00 RB =65.4 IRB=0.000E+00 RBM=1.683E+00 + RC =1.857E+01 CJE=7.030E-13 VJE=7.973E-01 + MJE=4.950E-01 TF =1.875E-11 XTF=1.873E+01 VTF=2.825E+00 + ITF=2.635E-01 PTF=0.000E+00 CJC=6.172E-13 VJC=8.046E-01 + MJC=4.931E-01 XCJC=860m TR =1.069E-09 CJS=1.028E-12 + VJS=5.723E-01 MJS=4.105E-01 KF =2.000E-12 AF =1.000E+00 + FC =9.765E-01 * .MODEL QINP PNP + IS =0.166f BF =7.165E+01 NF =1.000E+00 VAF=2.000E+01 + IKF=1.882E-02 ISE=6.380E-16 NE =1.366E+00 BR =1.833E+01 + NR =1.000E+00 VAR=1.805E+00 IKR=1.321E-01 ISC=3.666E-18 + NC =1.634E+00 RB =78.8 IRB=0.000E+00 RBM=57.6 + RC =3.739E+01 CJE=1.588E-13 VJE=7.975E-01 + MJE=5.000E-01 TF =3.156E-11 XTF=5.386E+00 VTF=2.713E+00 + ITF=5.084E-02 PTF=0.000E+00 CJC=2.725E-13 VJC=7.130E-01 + MJC=4.200E-01 XCJC=741m TR =7.500E-11 CJS=515f + MJS=0 KF =2.000E-12 AF =1.000E+00 FC =8.803E-01 * .MODEL QOUTP1 PNP + IS =2.399E-16 BF =7.165E+01 NF =1.000E+00 VAF=3.439E+01 + IKF=3.509E-02 ISE=1.190E-15 NE =1.366E+00 BR =1.900E+01 + NR =1.000E+00 VAR=1.805E+00 IKR=2.464E-01 ISC=6.745E-18 + NC =1.634E+00 RB =1.542E+01 IRB=0.000E+00 RBM=4.059E+00 + RC =4.174E+01 CJE=2.962E-13 VJE=7.975E-01 + MJE=5.000E-01 TF =3.107E-11 XTF=5.386E+00 VTF=2.713E+00 + ITF=9.481E-02 PTF=0.000E+00 CJC=4.508E-13 VJC=7.130E-01 + MJC=4.200E-01 XCJC=1.562E-01 TR =9.500E-11 CJS=1.045E-12 + VJS=6.691E-01 MJS=3.950E-01 KF =2.000E-12 AF =1.000E+00 + FC =8.803E-01 * .MODEL QOUTP2 PNP + IS =5.693E-16 BF =7.165E+01 NF =1.000E+00 VAF=3.439E+01 + IKF=8.328E-02 ISE=5.742E-15 NE =1.366E+00 BR =1.923E+01 + NR =1.000E+00 VAR=1.805E+00 IKR=5.848E-01 ISC=1.586E-17 + NC =1.634E+00 RB =56.5 IRB=0.000E+00 RBM=51.7 + RC =1.767E+00 CJE=7.030E-13 VJE=7.975E-01 + MJE=5.000E-01 TF =3.073E-11 XTF=5.386E+00 VTF=2.713E+00 + ITF=2.250E-01 PTF=0.000E+00 CJC=9.776E-13 VJC=7.130E-01 + MJC=4.200E-01 XCJC=923m TR =1.450E-10 CJS=1.637E-12 + VJS=6.691E-01 MJS=3.950E-01 KF =2.000E-12 AF =1.000E+00 + FC =8.803E-01 * .ENDS CLC409 .subckt tbqnpn c b e *** table model of npn bipolar transistor *** * simple behavioral temperature model .param fact = 0.05 .param tgain = 1. + (TEMPER / 27. - 1.) * {fact} abip1 %vd(c e) %id(bint e) %id(c e) biptable1 .model biptable1 table2d (offset=0.0 gain={tgain} order=2 file="qinn-clc409-2d-1.table") * CJE=1.632E-13 Cje b e 1.632E-13 * CJC=1.720E-13 Cjc b c 1.720E-13 * input diode (parameters extracted manually, see table-model-bip-2d-1.sp) Dbe b bint DMOD .model DMOD D (is=1e-17 n=1.1) * bip qinn from national op-amp CLC409 .ends tmpk8ny_4pz/examples/xspice/table/table-generator-q-2d.sp0000644000175000017500000000516013546075722023542 0ustar carstencarsten** npn bipolar: table generator with q 2D (Vce, Ib) * This file may be run by 'ngspice table-generator-q-2d.sp' * It will generate a 2D data table by simulating the bipolar collector current * as function of collector voltage and base current. The simulation uses * the ngspice bipolar model and model parameters of a clc409 transitor. * This table is an input file for the XSPICE 2D table model. * You may change the step sizes vcstep ibstep in CSPARAM * to obtain the required resolution for the data. * These tables will contain pure dc data. For transient simulation you may * need to add some capacitors to the device model for a 'real world' simulation. *NPN .csparam vcstart=-0.2 .csparam vcstop=6.4 .csparam vcstep=0.05 .csparam ibstart=-0.1u .csparam ibstop=200u .csparam ibstep=0.1u ** Circuit Description ** Q3 2 1 3 QINN ib 0 11 2u Rb 11 1 1 vce 2 0 5 vee 3 0 0 .control ** output file ** set outfile = "qinn-clc409-2d-1.table" dc vce -0.1 6 0.05 ib -0.1u 2u 0.1u if not $?batchmode plot i(vee) plot v(1) ylimit -0.2 0.8 endif if (1) *goto next echo *table for bipolar qinn CLC409 > $outfile let xcount = floor((vcstop-vcstart)/vcstep) + 1 let ycount = floor((ibstop-ibstart)/ibstep) + 1 echo *x >> $outfile echo $&xcount >> $outfile echo *y >> $outfile echo $&ycount >> $outfile let xvec = vector(xcount) let yvec = vector(ycount) let loopx = vcstart let lcx=0 while lcx < xcount let xvec[lcx] = loopx let loopx = loopx + vcstep let lcx = lcx + 1 end echo *x row >> $outfile echo $&xvec >> $outfile let lcy=0 let loopy = ibstart while lcy < ycount let yvec[lcy] = loopy let loopy = loopy + ibstep let lcy = lcy + 1 end echo *y column >> $outfile echo $&yvec >> $outfile let lcy=0 let loopy = ibstart while lcy < ycount alter ib loopy dc vce $&vcstart $&vcstop $&vcstep * let lcx=0 * let loopx = vdstart * dowhile loopx le vdstop * alter vds loopx * op * let xvec[lcx] = i(vss) * destroy i(vss) * let loopx = loopx + vdstep * let lcx = lcx + 1 * end let xvec = i(vee) echo $&xvec >> $outfile destroy dc2 let loopy = loopy + ibstep let lcy = lcy + 1 end label next end .endc .MODEL QINN NPN + IS =0.166f BF =3.239E+02 NF =1.000E+00 VAF=8.457E+01 + IKF=2.462E-02 ISE=2.956E-17 NE =1.197E+00 BR =3.719E+01 + NR =1.000E+00 VAR=1.696E+00 IKR=3.964E-02 ISC=1.835E-19 + NC =1.700E+00 RB =118 IRB=0.000E+00 RBM=65.1 + RC =2.645E+01 CJE=1.632E-13 VJE=7.973E-01 + MJE=4.950E-01 TF =1.948E-11 XTF=1.873E+01 VTF=2.825E+00 + ITF=5.955E-02 PTF=0.000E+00 CJC=1.720E-13 VJC=8.046E-01 + MJC=4.931E-01 XCJC=589m TR =4.212E-10 CJS=629f + MJS=0 KF =2.000E-12 AF =1.000E+00 FC =9.765E-01 * .end tmpk8ny_4pz/examples/xspice/table/bsim4n-2d-3.table0000644000175000017500000004266313546075722022243 0ustar carstencarsten*table for nmos bsim 4 *x 39 *y 39 *x row -0.1 -0.05 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1 1.05 1.1 1.15 1.2 1.25 1.3 1.35 1.4 1.45 1.5 1.55 1.6 1.65 1.7 1.75 1.8 *y column -0.1 -0.05 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1 1.05 1.1 1.15 1.2 1.25 1.3 1.35 1.4 1.45 1.5 1.55 1.6 1.65 1.7 1.75 1.8 -1.59139E-08 -2.30207E-09 -1.7633E-12 3.58568E-10 4.05469E-10 4.29452E-10 4.50577E-10 4.71013E-10 4.91251E-10 5.11458E-10 5.31704E-10 5.52023E-10 5.72434E-10 5.92947E-10 6.13568E-10 6.34299E-10 6.55143E-10 6.76101E-10 6.97172E-10 7.18357E-10 7.39657E-10 7.61072E-10 7.82605E-10 8.04257E-10 8.26033E-10 8.47936E-10 8.69973E-10 8.92152E-10 9.14482E-10 9.36975E-10 9.59644E-10 9.82507E-10 1.00558E-09 1.0289E-09 1.05249E-09 1.07638E-09 1.10063E-09 1.12529E-09 1.15043E-09 -6.25275E-08 -9.52252E-09 -3.72189E-13 1.53653E-09 1.73658E-09 1.83886E-09 1.92895E-09 2.01609E-09 2.10239E-09 2.18856E-09 2.2749E-09 2.36154E-09 2.44858E-09 2.53605E-09 2.62398E-09 2.71238E-09 2.80126E-09 2.89062E-09 2.98046E-09 3.07079E-09 3.1616E-09 3.2529E-09 3.3447E-09 3.437E-09 3.52983E-09 3.62318E-09 3.7171E-09 3.81161E-09 3.90675E-09 4.00256E-09 4.09909E-09 4.1964E-09 4.29458E-09 4.39371E-09 4.49391E-09 4.5953E-09 4.69805E-09 4.80236E-09 4.90848E-09 -2.31644E-07 -3.81882E-08 -3.73255E-32 6.45856E-09 7.29924E-09 7.72892E-09 8.10735E-09 8.47339E-09 8.83589E-09 9.19781E-09 9.56041E-09 9.92432E-09 1.02899E-08 1.06572E-08 1.10265E-08 1.13977E-08 1.1771E-08 1.21462E-08 1.25235E-08 1.29028E-08 1.32841E-08 1.36674E-08 1.40529E-08 1.44404E-08 1.48301E-08 1.5222E-08 1.56162E-08 1.60128E-08 1.6412E-08 1.6814E-08 1.72189E-08 1.76269E-08 1.80384E-08 1.84537E-08 1.88731E-08 1.92972E-08 1.97265E-08 2.01617E-08 2.06036E-08 -7.88928E-07 -1.45058E-07 3.8483E-13 2.63905E-08 2.9827E-08 3.15813E-08 3.31258E-08 3.46196E-08 3.60988E-08 3.75755E-08 3.9055E-08 4.05397E-08 4.2031E-08 4.35297E-08 4.50361E-08 4.65504E-08 4.80729E-08 4.96035E-08 5.11423E-08 5.26893E-08 5.42444E-08 5.58078E-08 5.73795E-08 5.89597E-08 6.05486E-08 6.21464E-08 6.37534E-08 6.53702E-08 6.69972E-08 6.86351E-08 7.02845E-08 7.19464E-08 7.36217E-08 7.53117E-08 7.70177E-08 7.87413E-08 8.04845E-08 8.22497E-08 8.40396E-08 -2.43852E-06 -5.07893E-07 1.94707E-12 1.02639E-07 1.1603E-07 1.22837E-07 1.28823E-07 1.34611E-07 1.40341E-07 1.46061E-07 1.51791E-07 1.57541E-07 1.63315E-07 1.69118E-07 1.7495E-07 1.80812E-07 1.86706E-07 1.9263E-07 1.98586E-07 2.04573E-07 2.10591E-07 2.16641E-07 2.22722E-07 2.28836E-07 2.34982E-07 2.41162E-07 2.47378E-07 2.5363E-07 2.59921E-07 2.66253E-07 2.72628E-07 2.7905E-07 2.85521E-07 2.92047E-07 2.98631E-07 3.0528E-07 3.11999E-07 3.18796E-07 3.25679E-07 -6.88655E-06 -1.60802E-06 6.71706E-12 3.69593E-07 4.18157E-07 4.42513E-07 4.63855E-07 4.84466E-07 5.04859E-07 5.2521E-07 5.45591E-07 5.66039E-07 5.86572E-07 6.07201E-07 6.27932E-07 6.48768E-07 6.69711E-07 6.90762E-07 7.11921E-07 7.33188E-07 7.54563E-07 7.76047E-07 7.97641E-07 8.19347E-07 8.41166E-07 8.63103E-07 8.85161E-07 9.07346E-07 9.29664E-07 9.52123E-07 9.74731E-07 9.97499E-07 1.02044E-06 1.04356E-06 1.06688E-06 1.09041E-06 1.11418E-06 1.1382E-06 1.16251E-06 -1.78619E-05 -4.59917E-06 2.78234E-11 1.20429E-06 1.36632E-06 1.44443E-06 1.51216E-06 1.57736E-06 1.64178E-06 1.70601E-06 1.7703E-06 1.83477E-06 1.89949E-06 1.96449E-06 2.0298E-06 2.09542E-06 2.16136E-06 2.22762E-06 2.29421E-06 2.36113E-06 2.42837E-06 2.49594E-06 2.56384E-06 2.63207E-06 2.70066E-06 2.76959E-06 2.8389E-06 2.90859E-06 2.97868E-06 3.0492E-06 3.12017E-06 3.19162E-06 3.26359E-06 3.3361E-06 3.40921E-06 3.48296E-06 3.5574E-06 3.63259E-06 3.70861E-06 -4.15757E-05 -1.18811E-05 1.37726E-10 3.53479E-06 4.04372E-06 4.26676E-06 4.45481E-06 4.63432E-06 4.81107E-06 4.98697E-06 5.16281E-06 5.33899E-06 5.51571E-06 5.6931E-06 5.87122E-06 6.05011E-06 6.2298E-06 6.4103E-06 6.59162E-06 6.77375E-06 6.95671E-06 7.14051E-06 7.32514E-06 7.51063E-06 7.697E-06 7.88428E-06 8.0725E-06 8.26171E-06 8.45197E-06 8.64333E-06 8.83587E-06 9.02965E-06 9.22477E-06 9.42133E-06 9.61942E-06 9.81918E-06 1.00207E-05 1.02242E-05 1.04297E-05 -8.34763E-05 -2.69316E-05 4.869E-10 9.3813E-06 1.09751E-05 1.15583E-05 1.20184E-05 1.24489E-05 1.28695E-05 1.32862E-05 1.37017E-05 1.41173E-05 1.45335E-05 1.49508E-05 1.53695E-05 1.57896E-05 1.62113E-05 1.66345E-05 1.70594E-05 1.7486E-05 1.79143E-05 1.83442E-05 1.87759E-05 1.92094E-05 1.96448E-05 2.00821E-05 2.05213E-05 2.09628E-05 2.14065E-05 2.18526E-05 2.23012E-05 2.27527E-05 2.32071E-05 2.36647E-05 2.41257E-05 2.45905E-05 2.50592E-05 2.55323E-05 2.601E-05 -0.000142168 -5.15759E-05 1.14715E-09 2.20459E-05 2.71254E-05 2.86172E-05 2.96364E-05 3.05493E-05 3.14258E-05 3.22868E-05 3.31408E-05 3.39919E-05 3.48423E-05 3.56931E-05 3.65453E-05 3.73992E-05 3.82552E-05 3.91135E-05 3.99742E-05 4.08375E-05 4.17034E-05 4.2572E-05 4.34435E-05 4.43179E-05 4.51954E-05 4.60762E-05 4.69605E-05 4.78486E-05 4.87407E-05 4.96372E-05 5.05385E-05 5.1445E-05 5.2357E-05 5.32751E-05 5.41998E-05 5.51316E-05 5.60712E-05 5.70191E-05 5.7976E-05 -0.000209861 -8.36434E-05 2.19611E-09 4.40217E-05 5.88126E-05 6.2836E-05 6.49789E-05 6.67309E-05 6.83557E-05 6.99256E-05 7.14681E-05 7.29959E-05 7.45158E-05 7.60317E-05 7.75458E-05 7.90598E-05 8.05747E-05 8.20911E-05 8.36096E-05 8.51306E-05 8.66542E-05 8.81809E-05 8.97109E-05 9.12445E-05 9.2782E-05 9.43238E-05 9.58705E-05 9.74224E-05 9.89803E-05 0.000100545 0.000102117 0.000103696 0.000105285 0.000106884 0.000108493 0.000110115 0.000111749 0.000113397 0.000115061 -0.00027916 -0.000119045 3.80507E-09 7.40477E-05 0.000108297 0.000119414 0.000123975 0.000127138 0.000129889 0.000132469 0.000134964 0.000137411 0.000139829 0.000142229 0.000144617 0.000146998 0.000149374 0.000151747 0.000154119 0.000156491 0.000158863 0.000161237 0.000163612 0.00016599 0.000168371 0.000170756 0.000173146 0.000175542 0.000177945 0.000180356 0.000182776 0.000185207 0.00018765 0.000190107 0.000192579 0.000195068 0.000197577 0.000200106 0.000202657 -0.000345882 -0.000154511 6.22085E-09 0.000108253 0.000170176 0.000196773 0.000206909 0.000212559 0.000216967 0.000220908 0.000224623 0.000228213 0.000231727 0.00023519 0.000238618 0.000242022 0.000245408 0.000248782 0.000252146 0.000255502 0.000258853 0.000262201 0.000265545 0.000268889 0.000272232 0.000275577 0.000278925 0.000282277 0.000285635 0.000289001 0.000292376 0.000295765 0.000299167 0.000302586 0.000306025 0.000309486 0.000312971 0.000316484 0.000320027 -0.000408182 -0.000188238 9.76345E-09 0.000143131 0.000236468 0.00028683 0.000308653 0.000319009 0.000325957 0.000331725 0.000336965 0.000341922 0.000346707 0.000351381 0.000355978 0.000360519 0.000365018 0.000369486 0.000373929 0.000378352 0.000382759 0.000387153 0.000391536 0.00039591 0.000400278 0.000404642 0.000409004 0.000413366 0.000417731 0.000422101 0.00042648 0.000430871 0.000435277 0.000439701 0.000444146 0.000448618 0.000453119 0.000457653 0.000462225 -0.000465426 -0.000219454 1.48458E-08 0.000176618 0.000301797 0.000380281 0.000421148 0.000440378 0.000451466 0.000459782 0.00046695 0.000473536 0.000479782 0.00048581 0.000491688 0.000497459 0.00050315 0.000508779 0.000514359 0.000519899 0.000525407 0.000530887 0.000536344 0.000541781 0.000547202 0.00055261 0.000558008 0.000563399 0.000568788 0.000574177 0.000579571 0.000584974 0.00059039 0.000595824 0.00060128 0.000606765 0.000612282 0.000617836 0.000623434 -0.000517553 -0.000247937 2.20052E-08 0.000207783 0.00036356 0.000471088 0.000536124 0.000570015 0.000588072 0.000600123 0.000609812 0.000618377 0.000626314 0.000633858 0.000641139 0.000648233 0.000655188 0.000662037 0.000668801 0.000675498 0.000682137 0.000688729 0.000695281 0.000701797 0.000708284 0.000714745 0.000721185 0.000727609 0.000734022 0.000740427 0.000746831 0.000753238 0.000759654 0.000766086 0.000772539 0.00077902 0.000785534 0.00079209 0.000798692 -0.000564751 -0.000273718 3.19424E-08 0.00023632 0.000420741 0.000556481 0.000647622 0.000701418 0.000730664 0.000748416 0.000761536 0.000772575 0.000782509 0.000791776 0.000800607 0.000809131 0.000817432 0.000825562 0.000833559 0.000841449 0.000849249 0.000856975 0.000864638 0.000872245 0.000879804 0.000887322 0.000894805 0.000902259 0.000909689 0.000917102 0.000924505 0.000931903 0.000939304 0.000946715 0.000954143 0.000961597 0.000969084 0.000976612 0.00098419 -0.000607316 -0.000296938 4.55699E-08 0.000262221 0.000473087 0.000635467 0.000752584 0.000829241 0.000874342 0.000900779 0.000918741 0.000932972 0.000945323 0.000956586 0.000967152 0.000977242 0.000986987 0.000996474 0.00100576 0.00101489 0.00102388 0.00103276 0.00104155 0.00105026 0.0010589 0.00106748 0.00107601 0.00108449 0.00109293 0.00110134 0.00110973 0.0011181 0.00112647 0.00113484 0.00114322 0.00115163 0.00116006 0.00116853 0.00117705 -0.000645582 -0.000317776 6.40703E-08 0.000285608 0.00052069 0.000707863 0.000849855 0.000950159 0.00101465 0.00105351 0.00107843 0.00109691 0.00111226 0.00112587 0.00113842 0.00115024 0.00116156 0.00117249 0.00118314 0.00119355 0.00120378 0.00121385 0.00122379 0.00123362 0.00124335 0.001253 0.00126257 0.00127207 0.00128152 0.00129092 0.00130029 0.00130963 0.00131895 0.00132826 0.00133757 0.0013469 0.00135625 0.00136564 0.00137508 -0.000679887 -0.000336421 8.89716E-08 0.000306651 0.000563793 0.000773848 0.000939214 0.00106267 0.00114825 0.00120307 0.00123777 0.00126201 0.00128117 0.00129762 0.00131246 0.00132624 0.00133928 0.00135178 0.00136387 0.00137564 0.00138715 0.00139845 0.00140957 0.00142054 0.00143138 0.0014421 0.00145272 0.00146325 0.0014737 0.00148409 0.00149443 0.00150472 0.00151497 0.00152521 0.00153544 0.00154567 0.00155592 0.0015662 0.00157652 -0.00071056 -0.000353059 1.22239E-07 0.000325535 0.000602699 0.000833758 0.00102087 0.00116636 0.00127325 0.00134639 0.00139397 0.00142605 0.00145015 0.00147009 0.00148762 0.00150363 0.0015186 0.00153281 0.00154645 0.00155966 0.00157252 0.00158509 0.00159743 0.00160956 0.00162153 0.00163334 0.00164502 0.00165658 0.00166805 0.00167942 0.00169072 0.00170196 0.00171314 0.00172429 0.00173542 0.00174654 0.00175767 0.00176881 0.00178 -0.000737911 -0.000367863 1.66394E-07 0.000342446 0.00063773 0.000887994 0.00109519 0.00126138 0.00138896 0.00148138 0.00154443 0.00158685 0.00161742 0.0016417 0.00166247 0.00168106 0.00169819 0.00171429 0.00172962 0.00174437 0.00175865 0.00177256 0.00178616 0.0017995 0.00181262 0.00182554 0.0018383 0.0018509 0.00186338 0.00187574 0.001888 0.00190018 0.00191229 0.00192434 0.00193636 0.00194835 0.00196034 0.00197233 0.00198435 -0.000762229 -0.000380996 2.24656E-07 0.00035756 0.000669203 0.000936975 0.00116267 0.00134812 0.00149535 0.00160697 0.00168707 0.00174231 0.00178126 0.00181103 0.0018357 0.0018573 0.00187691 0.00189511 0.0019123 0.00192871 0.00194451 0.00195983 0.00197475 0.00198934 0.00200365 0.00201771 0.00203156 0.00204523 0.00205873 0.00207209 0.00208532 0.00209844 0.00211146 0.00212442 0.00213731 0.00215016 0.00216299 0.00217582 0.00218866 -0.000783779 -0.000392605 3.01131E-07 0.000371046 0.000697424 0.000981119 0.00122378 0.00142706 0.00159274 0.00172292 0.00182058 0.00189052 0.00193998 0.00197668 0.00200613 0.0020313 0.00205375 0.00207433 0.00209357 0.00211179 0.00212923 0.00214605 0.00216236 0.00217825 0.00219379 0.00220903 0.002224 0.00223875 0.00225329 0.00226765 0.00228186 0.00229592 0.00230987 0.00232372 0.00233749 0.00235119 0.00236486 0.00237851 0.00239215 -0.000802802 -0.000402826 4.01037E-07 0.000383058 0.000722681 0.00102082 0.00127901 0.00149875 0.00168163 0.00182943 0.00194443 0.0020301 0.00209199 0.00213733 0.00217265 0.00220208 0.00222782 0.0022511 0.00227262 0.00229283 0.00231205 0.00233047 0.00234826 0.00236552 0.00238235 0.0023988 0.00241493 0.00243078 0.00244639 0.00246177 0.00247696 0.00249198 0.00250685 0.0025216 0.00253624 0.0025508 0.00256529 0.00257975 0.00259418 -0.000819518 -0.000411777 5.30987E-07 0.000393743 0.000745243 0.00105647 0.00132884 0.00156373 0.00176257 0.00192692 0.00205862 0.00216028 0.00223596 0.00229168 0.0023342 0.00236872 0.00239831 0.00242467 0.00244875 0.00247117 0.00249231 0.00251247 0.00253184 0.00255055 0.00256873 0.00258645 0.00260378 0.00262077 0.00263746 0.00265388 0.00267007 0.00268606 0.00270187 0.00271752 0.00273303 0.00274844 0.00276376 0.00277901 0.00279423 -0.000834123 -0.000419565 6.99348E-07 0.000403234 0.000765363 0.00108842 0.00137371 0.00162251 0.00183612 0.00201593 0.00216349 0.00228083 0.00237098 0.00243856 0.00248974 0.00253037 0.00256448 0.00259436 0.00262133 0.0026462 0.00266947 0.00269151 0.00271257 0.00273283 0.00275243 0.00277148 0.00279005 0.00280822 0.00282603 0.00284352 0.00286074 0.00287771 0.00289446 0.00291102 0.00292742 0.00294368 0.00295982 0.00297588 0.00299188 -0.000846791 -0.000426283 9.16679E-07 0.000411658 0.000783275 0.001117 0.00141405 0.0016756 0.00190285 0.00209703 0.00225951 0.00239195 0.00249663 0.00257706 0.0026383 0.00268621 0.00272562 0.00275956 0.00278981 0.00281741 0.00284302 0.00286712 0.00289 0.00291191 0.00293303 0.00295347 0.00297335 0.00299274 0.00301171 0.00303031 0.00304857 0.00306654 0.00308426 0.00310174 0.00311903 0.00313615 0.00315312 0.00316998 0.00318676 -0.000857676 -0.00043201 1.19627E-06 0.000419133 0.000799194 0.00114253 0.00145025 0.00172347 0.00196328 0.0021708 0.00234724 0.00249402 0.00261293 0.00270662 0.00277905 0.00283547 0.00288109 0.00291972 0.00295367 0.00298433 0.00301254 0.00303888 0.00306375 0.00308744 0.00311016 0.00313209 0.00315334 0.00317401 0.00319418 0.00321391 0.00323326 0.00325226 0.00327096 0.00328939 0.00330758 0.00332556 0.00334337 0.00336104 0.00337859 -0.00086691 -0.000436813 1.55485E-06 0.00042577 0.000813326 0.00116529 0.0014827 0.00176657 0.00201793 0.00223779 0.00242726 0.00258754 0.00272013 0.00282707 0.00291139 0.00297743 0.00303027 0.0030743 0.00311247 0.00314655 0.00317763 0.00320644 0.00323347 0.00325908 0.00328353 0.00330703 0.00332973 0.00335174 0.00337317 0.00339408 0.00341454 0.0034346 0.00345431 0.0034737 0.00349281 0.00351168 0.00353034 0.00354881 0.00356715 -0.000874605 -0.000440746 2.01335E-06 0.000431677 0.000825859 0.00118555 0.00151172 0.00180532 0.00206728 0.00229856 0.00250013 0.00267309 0.00281868 0.00293855 0.00303503 0.00311154 0.0031726 0.00322283 0.00326577 0.00330368 0.00333796 0.00336948 0.00339887 0.00342655 0.00345287 0.00347804 0.00350227 0.0035257 0.00354844 0.00357059 0.0035922 0.00361336 0.0036341 0.00365448 0.00367454 0.0036943 0.00371382 0.00373313 0.00375225 -0.000880852 -0.000443847 2.59804E-06 0.000436956 0.000836975 0.00120358 0.00153766 0.00184011 0.0021118 0.0023536 0.00256641 0.00275121 0.00290909 0.00304139 0.00314994 0.00323743 0.00330759 0.00336486 0.00341321 0.00345541 0.00349322 0.00352773 0.00355969 0.00358963 0.00361795 0.00364492 0.00367079 0.00369571 0.00371983 0.00374326 0.00376608 0.00378837 0.00381019 0.00383159 0.00385261 0.0038733 0.00389369 0.00391383 0.00393376 -0.000885719 -0.000446141 3.34172E-06 0.000441713 0.000846845 0.0012196 0.00156082 0.00187132 0.0021519 0.0024034 0.00262663 0.00282247 0.00299189 0.00313602 0.00325636 0.00335498 0.0034349 0.00350002 0.00355445 0.00360144 0.00364315 0.00368094 0.00371571 0.00374811 0.00377858 0.00380749 0.0038351 0.00386161 0.00388719 0.00391197 0.00393605 0.00395952 0.00398244 0.00400489 0.0040269 0.00404854 0.00406983 0.00409083 0.00411157 -0.000889255 -0.000447637 4.28531E-06 0.00044605 0.000855638 0.00123386 0.00158148 0.00189928 0.00218801 0.00244843 0.00268129 0.00288741 0.00306764 0.00322297 0.00335464 0.0034643 0.00355432 0.003628 0.0036892 0.00374151 0.00378752 0.00382891 0.00386675 0.00390181 0.00393462 0.0039656 0.00399507 0.00402327 0.0040504 0.0040766 0.004102 0.00412669 0.00415077 0.00417431 0.00419735 0.00421995 0.00424217 0.00426405 0.00428562 -0.000891481 -0.000448326 5.47979E-06 0.000450077 0.00086352 0.00124656 0.00159994 0.00192435 0.00222051 0.00248912 0.00273089 0.00294655 0.00313689 0.00330276 0.00344523 0.00356565 0.00366588 0.00374859 0.00381723 0.00387543 0.00392617 0.00397148 0.00401265 0.00405059 0.00408593 0.00411915 0.00415061 0.00418061 0.00420937 0.00423707 0.00426385 0.00428984 0.00431512 0.00433978 0.00436388 0.00438749 0.00441066 0.00443343 0.00445586 -0.000892393 -0.000448179 6.98854E-06 0.000453907 0.000870657 0.00125795 0.00161645 0.00194684 0.00224977 0.0025259 0.00277588 0.0030004 0.00320016 0.00337594 0.00352865 0.00365941 0.00376974 0.00386177 0.00393838 0.00400303 0.00405894 0.00410851 0.0041533 0.00419435 0.00423241 0.00426803 0.00430163 0.00433355 0.00436405 0.00439334 0.00442158 0.00444891 0.00447545 0.00450128 0.00452649 0.00455114 0.00457528 0.00459898 0.00462229 -0.000891957 -0.000447145 8.89027E-06 0.000457668 0.000877221 0.00126822 0.00163129 0.00196706 0.00227615 0.00255916 0.00281672 0.00304944 0.00325797 0.00344303 0.00360541 0.00374606 0.00386622 0.00396761 0.00405259 0.00412423 0.00418576 0.00423993 0.0042886 0.00433301 0.004374 0.0044122 0.00444809 0.00448206 0.00451441 0.00454537 0.00457515 0.00460391 0.00463176 0.00465881 0.00468517 0.00471089 0.00473605 0.0047607 0.00478491 -0.000890105 -0.000445145 1.12825E-05 0.000461497 0.000883396 0.00127761 0.00164473 0.00198534 0.00230001 0.00258932 0.00285383 0.00309414 0.00331084 0.00350457 0.00367604 0.00382608 0.00395572 0.00406635 0.0041599 0.00423896 0.00430659 0.00436572 0.00441855 0.00446653 0.00451065 0.00455161 0.00458996 0.00462611 0.00466043 0.00469318 0.00472458 0.00475483 0.00478406 0.00481239 0.00483994 0.00486678 0.00489299 0.00491863 0.00494377 -0.000886729 -0.00044207 1.42858E-05 0.000465553 0.000889376 0.00128635 0.00165704 0.00200197 0.0023217 0.00261675 0.00288767 0.00313499 0.00335926 0.00356108 0.00374109 0.0039 0.00403871 0.00415835 0.0042605 0.00434728 0.00442143 0.00448589 0.00454315 0.00459493 0.00464238 0.00468628 0.00472724 0.00476573 0.00480214 0.00483678 0.0048699 0.00490172 0.0049324 0.00496207 0.00499086 0.00501886 0.00504616 0.00507283 0.00509893 tmpk8ny_4pz/examples/xspice/table/README.table0000644000175000017500000000623013546075722021327 0ustar carstencarstenThis example/xspice/table directory offers input files, table files as well as table generators for the ngspice table model. This model is a XSPICE extension for ngspice. It enables simulation of devices that consist of in/out data points, i.e. devices where analytical model equations are not available. The table model reads a value val from a file. With the 2D table model val depends on 2 input parameters, i.e. val = f(x,y), with the 3D table on 3 input parameters, i.e. val = f(x,y,z). Val may be defined as a voltage or as a current, either single ended or differential. The inputs x, y (, z) may be voltage inputs (infinite input resistance, single ended or differential) or current sinks (zero input resistance, single ended or differential). Single ended denotes: one node given, the other is 0 (ground), differential: both nodes are to be given. For some implementation details, and the format of the 2D or 3D tables, please have a look at the ngspice manual, chapters 12.2.27 and 12.2.28. How to generate these tables? For simple functional relationships you may do this manually. For example in the table directory there are the files test~.table containing simple linear curves. You may analyse measured curves and fit their data into the table format. If you already have functional models, you may design a table generator. It runs the models at certain input condition, calculates the output and stores it with the correct format. Some examples are given here in the table-generator files. The bsim4 tables have been thus generated already and are distributed as files bsim4~.table. The example input files table-model-bip~.sp require some further user action because their table is not provided with the distribution due to its large size. So cd into the table directory and run the following command: ngspice table-generator-q-2d.sp The table will be generated, using the built in ngspice bipolar model and model parameters for a CLC409 bipolar npn transistor. Some considerations for using table models These table models are pure dc models. The input is an ideal open (for voltage) or short circuit (for current). If your application requires a more complex input behavior, it may be emulated by additional passive (or active?) devices added to the table model. Also, if dynamic behavior ir expected, there a no capacitors in the table model, so again add them externally. The example input files give some hints: The bipolar table transistor should show a base input behaviour like a common transistor, so we have added a diode with parameters optimized to compare well with the analytical model. The MOS transistors at least require some input capacitance, emulated by some extra capacitors. So the table models offer a lot of freedome, but require careful considerations of their environment to become really useful. The 2D and 3D table models use linear interpolation to obtain their output data. This may limit the application to not have a too steep slope. Otherwise convergence problems may arise. The derivatives (output vs. each input) required by ngspice are calculated by an approach named eno (essentially non oscillating) interpolation, that has proven itself to be very robust. tmpk8ny_4pz/examples/xspice/table/test-2d-2.table0000644000175000017500000000030013546075722022003 0ustar carstencarsten* table source * test of gradients 7 7 * x row 0 1 2 3 4 5 6 * y column 0 1 2 3 4 5 6 * table 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 tmpk8ny_4pz/examples/xspice/table/bsim4p-2d-2.table0000644000175000017500000034337713546075722022252 0ustar carstencarsten*table for pmos bsim 4 *x 96 *y 96 *x row -1.8 -1.78 -1.76 -1.74 -1.72 -1.7 -1.68 -1.66 -1.64 -1.62 -1.6 -1.58 -1.56 -1.54 -1.52 -1.5 -1.48 -1.46 -1.44 -1.42 -1.4 -1.38 -1.36 -1.34 -1.32 -1.3 -1.28 -1.26 -1.24 -1.22 -1.2 -1.18 -1.16 -1.14 -1.12 -1.1 -1.08 -1.06 -1.04 -1.02 -1 -0.98 -0.96 -0.94 -0.92 -0.9 -0.88 -0.86 -0.84 -0.82 -0.8 -0.78 -0.76 -0.74 -0.72 -0.7 -0.68 -0.66 -0.64 -0.62 -0.6 -0.58 -0.56 -0.54 -0.52 -0.5 -0.48 -0.46 -0.44 -0.42 -0.4 -0.38 -0.36 -0.34 -0.32 -0.3 -0.28 -0.26 -0.24 -0.22 -0.2 -0.18 -0.16 -0.14 -0.12 -0.1 -0.08 -0.06 -0.04 -0.02 1.2837E-15 0.02 0.04 0.06 0.08 0.1 *y column -1.8 -1.78 -1.76 -1.74 -1.72 -1.7 -1.68 -1.66 -1.64 -1.62 -1.6 -1.58 -1.56 -1.54 -1.52 -1.5 -1.48 -1.46 -1.44 -1.42 -1.4 -1.38 -1.36 -1.34 -1.32 -1.3 -1.28 -1.26 -1.24 -1.22 -1.2 -1.18 -1.16 -1.14 -1.12 -1.1 -1.08 -1.06 -1.04 -1.02 -1 -0.98 -0.96 -0.94 -0.92 -0.9 -0.88 -0.86 -0.84 -0.82 -0.8 -0.78 -0.76 -0.74 -0.72 -0.7 -0.68 -0.66 -0.64 -0.62 -0.6 -0.58 -0.56 -0.54 -0.52 -0.5 -0.48 -0.46 -0.44 -0.42 -0.4 -0.38 -0.36 -0.34 -0.32 -0.3 -0.28 -0.26 -0.24 -0.22 -0.2 -0.18 -0.16 -0.14 -0.12 -0.1 -0.08 -0.06 -0.04 -0.02 1.2837E-15 0.02 0.04 0.06 0.08 0.1 -0.00233258 -0.00232773 -0.00232281 -0.00231786 -0.00231288 -0.00230786 -0.00230279 -0.00229768 -0.00229253 -0.00228733 -0.00228208 -0.00227678 -0.00227143 -0.00226603 -0.00226057 -0.00225506 -0.00224948 -0.00224384 -0.00223814 -0.00223237 -0.00222653 -0.00222061 -0.00221462 -0.00220855 -0.00220239 -0.00219614 -0.0021898 -0.00218335 -0.00217681 -0.00217014 -0.00216336 -0.00215644 -0.00214938 -0.00214215 -0.00213473 -0.0021271 -0.00211922 -0.00211103 -0.00210248 -0.0020935 -0.002084 -0.0020739 -0.00206311 -0.00205153 -0.00203907 -0.00202566 -0.00201122 -0.00199569 -0.00197902 -0.00196115 -0.00194206 -0.00192171 -0.00190006 -0.00187709 -0.00185279 -0.00182714 -0.00180011 -0.00177169 -0.00174188 -0.00171065 -0.00167801 -0.00164393 -0.00160842 -0.00157145 -0.00153303 -0.00149315 -0.00145179 -0.00140896 -0.00136464 -0.00131883 -0.00127152 -0.00122271 -0.00117239 -0.00112056 -0.0010672 -0.00101231 -0.000955892 -0.000897934 -0.00083843 -0.000777376 -0.000714765 -0.000650592 -0.000584851 -0.000517535 -0.000448639 -0.000378157 -0.000306081 -0.000232405 -0.000157122 -8.02236E-05 -1.70168E-06 7.72442E-05 0.000155437 0.000232892 0.000309622 0.000385643 -0.00230999 -0.00230519 -0.00230033 -0.00229544 -0.00229052 -0.00228556 -0.00228055 -0.00227551 -0.00227042 -0.00226528 -0.0022601 -0.00225487 -0.0022496 -0.00224427 -0.00223888 -0.00223344 -0.00222794 -0.00222239 -0.00221676 -0.00221108 -0.00220532 -0.0021995 -0.0021936 -0.00218762 -0.00218156 -0.00217541 -0.00216917 -0.00216283 -0.0021564 -0.00214985 -0.00214319 -0.0021364 -0.00212947 -0.00212239 -0.00211513 -0.00210768 -0.00209999 -0.00209204 -0.00208375 -0.00207508 -0.00206593 -0.00205623 -0.00204589 -0.0020348 -0.00202288 -0.00201004 -0.0019962 -0.00198129 -0.00196525 -0.00194802 -0.00192958 -0.00190986 -0.00188885 -0.00186652 -0.00184284 -0.00181779 -0.00179136 -0.00176353 -0.00173428 -0.0017036 -0.00167149 -0.00163793 -0.00160291 -0.00156643 -0.00152847 -0.00148902 -0.00144809 -0.00140565 -0.00136172 -0.00131626 -0.0012693 -0.0012208 -0.00117077 -0.00111921 -0.0010661 -0.00101145 -0.000955232 -0.000897457 -0.000838115 -0.000777198 -0.000714702 -0.00065062 -0.000584947 -0.000517675 -0.0004488 -0.000378315 -0.000306212 -0.000232486 -0.000157129 -8.01331E-05 -1.49029E-06 7.759E-05 0.000155919 0.000233509 0.000310375 0.000386531 -0.00228701 -0.00228227 -0.00227746 -0.00227264 -0.00226777 -0.00226287 -0.00225793 -0.00225294 -0.00224792 -0.00224285 -0.00223774 -0.00223258 -0.00222737 -0.00222211 -0.0022168 -0.00221144 -0.00220602 -0.00220054 -0.002195 -0.0021894 -0.00218373 -0.00217799 -0.00217218 -0.0021663 -0.00216033 -0.00215428 -0.00214815 -0.00214192 -0.00213559 -0.00212916 -0.00212262 -0.00211595 -0.00210915 -0.00210221 -0.00209511 -0.00208783 -0.00208033 -0.00207259 -0.00206455 -0.00205616 -0.00204734 -0.00203802 -0.0020281 -0.00201749 -0.00200609 -0.00199381 -0.00198057 -0.00196627 -0.00195087 -0.0019343 -0.0019165 -0.00189744 -0.00187709 -0.0018554 -0.00183236 -0.00180794 -0.00178212 -0.00175489 -0.00172623 -0.00169613 -0.00166457 -0.00163154 -0.00159704 -0.00156105 -0.00152357 -0.00148458 -0.00144409 -0.00140207 -0.00135853 -0.00131346 -0.00126684 -0.00121868 -0.00116896 -0.00111769 -0.00106485 -0.00101043 -0.000954442 -0.000896864 -0.000837696 -0.000776931 -0.000714563 -0.000650585 -0.000584991 -0.000517776 -0.000448933 -0.000378455 -0.000306336 -0.000232569 -0.000157146 -8.00608E-05 -1.30436E-06 7.79038E-05 0.000156362 0.000234084 0.000311081 0.000387368 -0.00226364 -0.00225895 -0.0022542 -0.00224943 -0.00224463 -0.00223979 -0.00223491 -0.00222999 -0.00222503 -0.00222002 -0.00221498 -0.00220989 -0.00220475 -0.00219956 -0.00219433 -0.00218904 -0.00218369 -0.00217829 -0.00217284 -0.00216732 -0.00216173 -0.00215608 -0.00215036 -0.00214457 -0.0021387 -0.00213275 -0.00212672 -0.0021206 -0.00211438 -0.00210806 -0.00210163 -0.00209509 -0.00208843 -0.00208162 -0.00207467 -0.00206755 -0.00206023 -0.00205268 -0.00204488 -0.00203675 -0.00202824 -0.00201927 -0.00200975 -0.0019996 -0.0019887 -0.00197697 -0.00196431 -0.00195064 -0.00193587 -0.00191995 -0.00190282 -0.00188443 -0.00186474 -0.00184372 -0.00182133 -0.00179756 -0.00177237 -0.00174576 -0.00171771 -0.00168819 -0.00165721 -0.00162474 -0.00159077 -0.0015553 -0.00151832 -0.00147981 -0.00143977 -0.00139819 -0.00135507 -0.00131039 -0.00126415 -0.00121633 -0.00116695 -0.00111598 -0.00106342 -0.00100926 -0.000953509 -0.000896144 -0.000837165 -0.000776566 -0.000714339 -0.000650478 -0.000584977 -0.000517831 -0.000449031 -0.000378572 -0.000306446 -0.000232648 -0.00015717 -8.00031E-05 -1.14097E-06 7.81878E-05 0.00015677 0.000234617 0.000311741 0.000388155 -0.00223987 -0.00223524 -0.00223054 -0.00222583 -0.00222108 -0.0022163 -0.00221148 -0.00220663 -0.00220173 -0.00219679 -0.00219181 -0.00218679 -0.00218172 -0.00217661 -0.00217144 -0.00216623 -0.00216096 -0.00215564 -0.00215026 -0.00214483 -0.00213933 -0.00213377 -0.00212814 -0.00212244 -0.00211666 -0.00211081 -0.00210488 -0.00209886 -0.00209275 -0.00208654 -0.00208023 -0.00207381 -0.00206728 -0.00206061 -0.0020538 -0.00204683 -0.00203968 -0.00203233 -0.00202473 -0.00201685 -0.00200862 -0.00199998 -0.00199085 -0.00198112 -0.00197071 -0.00195951 -0.00194742 -0.00193436 -0.00192023 -0.00190497 -0.00188851 -0.0018708 -0.00185179 -0.00183144 -0.00180973 -0.00178662 -0.00176209 -0.00173612 -0.00170869 -0.00167979 -0.0016494 -0.0016175 -0.0015841 -0.00154916 -0.0015127 -0.00147469 -0.00143513 -0.001394 -0.00135131 -0.00130705 -0.00126119 -0.00121375 -0.00116471 -0.00111406 -0.0010618 -0.00100793 -0.000952422 -0.000895287 -0.000836512 -0.000776093 -0.000714021 -0.000650292 -0.000584897 -0.000517831 -0.000449087 -0.000378659 -0.000306539 -0.00023272 -0.000157195 -7.99569E-05 -9.97532E-07 7.8444E-05 0.000157142 0.000235108 0.000312353 0.00038889 -0.00221568 -0.00221111 -0.00220647 -0.00220182 -0.00219713 -0.00219241 -0.00218765 -0.00218285 -0.00217802 -0.00217315 -0.00216824 -0.00216328 -0.00215828 -0.00215324 -0.00214815 -0.00214301 -0.00213782 -0.00213258 -0.00212728 -0.00212192 -0.00211651 -0.00211103 -0.00210549 -0.00209989 -0.00209421 -0.00208845 -0.00208262 -0.0020767 -0.0020707 -0.0020646 -0.00205841 -0.00205211 -0.0020457 -0.00203916 -0.00203249 -0.00202567 -0.00201869 -0.00201151 -0.00200412 -0.00199646 -0.0019885 -0.00198017 -0.00197138 -0.00196206 -0.00195211 -0.00194142 -0.00192989 -0.00191743 -0.00190393 -0.00188933 -0.00187355 -0.00185653 -0.00183821 -0.00181856 -0.00179754 -0.00177511 -0.00175125 -0.00172594 -0.00169916 -0.00167089 -0.00164111 -0.00160981 -0.00157699 -0.00154261 -0.00150669 -0.00146919 -0.00143013 -0.00138948 -0.00134725 -0.00130341 -0.00125797 -0.00121091 -0.00116224 -0.00111193 -0.00105999 -0.00100641 -0.000951171 -0.000894281 -0.000835727 -0.000775503 -0.000713602 -0.000650018 -0.000584743 -0.000517772 -0.000449097 -0.000378711 -0.000306608 -0.000232779 -0.000157219 -7.99192E-05 -8.71702E-07 7.86741E-05 0.000157481 0.000235559 0.000312919 0.000389573 -0.00219108 -0.00218656 -0.00218198 -0.00217738 -0.00217275 -0.00216809 -0.00216339 -0.00215866 -0.00215389 -0.00214909 -0.00214424 -0.00213935 -0.00213442 -0.00212945 -0.00212443 -0.00211937 -0.00211425 -0.00210909 -0.00210387 -0.0020986 -0.00209327 -0.00208788 -0.00208243 -0.00207691 -0.00207132 -0.00206566 -0.00205993 -0.00205412 -0.00204822 -0.00204223 -0.00203615 -0.00202997 -0.00202368 -0.00201727 -0.00201074 -0.00200407 -0.00199724 -0.00199024 -0.00198303 -0.00197559 -0.00196787 -0.00195982 -0.00195137 -0.00194242 -0.0019329 -0.0019227 -0.00191172 -0.00189984 -0.00188697 -0.00187303 -0.00185792 -0.0018416 -0.00182399 -0.00180504 -0.00178473 -0.001763 -0.00173984 -0.00171521 -0.00168909 -0.00166147 -0.00163233 -0.00160165 -0.00156942 -0.00153563 -0.00150026 -0.00146331 -0.00142477 -0.00138462 -0.00134286 -0.00129947 -0.00125446 -0.00120781 -0.00115952 -0.00110957 -0.00105797 -0.00100469 -0.000949745 -0.000893116 -0.000834799 -0.000774787 -0.000713072 -0.000649648 -0.000584509 -0.000517646 -0.000449053 -0.000378723 -0.000306649 -0.000232823 -0.000157238 -7.98871E-05 -7.61401E-07 7.88796E-05 0.000157787 0.000235969 0.000313438 0.000390203 -0.00216605 -0.00216159 -0.00215706 -0.00215252 -0.00214795 -0.00214335 -0.00213872 -0.00213405 -0.00212934 -0.0021246 -0.00211982 -0.002115 -0.00211014 -0.00210523 -0.00210029 -0.0020953 -0.00209026 -0.00208517 -0.00208003 -0.00207484 -0.00206959 -0.00206429 -0.00205892 -0.0020535 -0.002048 -0.00204244 -0.00203681 -0.0020311 -0.0020253 -0.00201942 -0.00201346 -0.00200739 -0.00200122 -0.00199494 -0.00198854 -0.00198201 -0.00197534 -0.0019685 -0.00196147 -0.00195424 -0.00194675 -0.00193896 -0.0019308 -0.00192221 -0.0019131 -0.00190336 -0.00189289 -0.00188158 -0.00186933 -0.00185604 -0.00184162 -0.00182599 -0.00180909 -0.00179087 -0.00177128 -0.00175027 -0.00172782 -0.00170389 -0.00167846 -0.00165151 -0.00162303 -0.00159299 -0.00156138 -0.0015282 -0.00149341 -0.00145702 -0.00141902 -0.00137939 -0.00133812 -0.00129521 -0.00125065 -0.00120443 -0.00115654 -0.00110697 -0.00105572 -0.00100277 -0.000948132 -0.000891783 -0.00083372 -0.000773936 -0.000712424 -0.000649176 -0.000584186 -0.000517447 -0.00044895 -0.00037869 -0.000306658 -0.000232847 -0.00015725 -7.98583E-05 -6.64776E-07 7.90616E-05 0.00015806 0.000236339 0.000313909 0.000390778 -0.0021406 -0.00213618 -0.00213172 -0.00212723 -0.00212272 -0.00211818 -0.0021136 -0.002109 -0.00210435 -0.00209968 -0.00209496 -0.00209021 -0.00208542 -0.00208058 -0.00207571 -0.00207079 -0.00206583 -0.00206082 -0.00205576 -0.00205065 -0.00204548 -0.00204026 -0.00203499 -0.00202965 -0.00202425 -0.00201878 -0.00201324 -0.00200763 -0.00200194 -0.00199617 -0.00199031 -0.00198436 -0.00197832 -0.00197216 -0.00196589 -0.0019595 -0.00195297 -0.00194629 -0.00193944 -0.00193239 -0.00192512 -0.00191757 -0.0019097 -0.00190144 -0.0018927 -0.0018834 -0.00187342 -0.00186266 -0.00185101 -0.00183836 -0.00182461 -0.00180969 -0.00179352 -0.00177603 -0.00175717 -0.00173689 -0.00171517 -0.00169196 -0.00166725 -0.00164099 -0.00161319 -0.00158382 -0.00155285 -0.00152029 -0.00148611 -0.00145031 -0.00141286 -0.00137377 -0.00133303 -0.00129061 -0.00124652 -0.00120075 -0.00115328 -0.00110411 -0.00105323 -0.00100064 -0.00094632 -0.000890269 -0.000832478 -0.00077294 -0.000711648 -0.000648593 -0.000583769 -0.000517168 -0.000448783 -0.000378606 -0.00030663 -0.000232847 -0.00015725 -7.98303E-05 -5.80182E-07 7.92212E-05 0.000158301 0.000236668 0.000314331 0.000391298 -0.0021147 -0.00211034 -0.00210593 -0.0021015 -0.00209705 -0.00209257 -0.00208805 -0.00208351 -0.00207893 -0.00207431 -0.00206966 -0.00206498 -0.00206026 -0.00205549 -0.00205069 -0.00204584 -0.00204096 -0.00203602 -0.00203104 -0.00202601 -0.00202093 -0.00201579 -0.0020106 -0.00200535 -0.00200004 -0.00199467 -0.00198923 -0.00198372 -0.00197813 -0.00197247 -0.00196672 -0.00196088 -0.00195495 -0.00194892 -0.00194278 -0.00193653 -0.00193014 -0.00192361 -0.00191693 -0.00191006 -0.00190299 -0.00189567 -0.00188806 -0.0018801 -0.00187171 -0.00186282 -0.00185331 -0.00184307 -0.001832 -0.00181998 -0.0018069 -0.00179268 -0.00177723 -0.00176048 -0.00174237 -0.00172285 -0.00170187 -0.00167941 -0.00165542 -0.00162989 -0.00160279 -0.0015741 -0.0015438 -0.00151189 -0.00147834 -0.00144314 -0.00140629 -0.00136776 -0.00132755 -0.00128566 -0.00124206 -0.00119675 -0.00114973 -0.00110098 -0.0010505 -0.000998275 -0.000944299 -0.000888565 -0.000831065 -0.000771791 -0.000710736 -0.000647891 -0.000583249 -0.000516803 -0.000448545 -0.000378467 -0.000306561 -0.00023282 -0.000157236 -7.9801E-05 -5.06163E-07 7.9359E-05 0.000158511 0.000236956 0.000314703 0.000391759 -0.00208835 -0.00208405 -0.0020797 -0.00207533 -0.00207093 -0.00206651 -0.00206205 -0.00205757 -0.00205305 -0.0020485 -0.00204392 -0.0020393 -0.00203465 -0.00202996 -0.00202522 -0.00202045 -0.00201564 -0.00201078 -0.00200587 -0.00200092 -0.00199592 -0.00199087 -0.00198577 -0.00198061 -0.00197539 -0.00197011 -0.00196476 -0.00195935 -0.00195386 -0.0019483 -0.00194267 -0.00193694 -0.00193113 -0.00192522 -0.00191921 -0.00191308 -0.00190684 -0.00190046 -0.00189394 -0.00188724 -0.00188036 -0.00187326 -0.00186589 -0.00185821 -0.00185015 -0.00184163 -0.00183255 -0.00182281 -0.0018123 -0.00180089 -0.00178847 -0.00177495 -0.00176023 -0.00174423 -0.00172688 -0.00170812 -0.00168791 -0.0016662 -0.00164297 -0.00161817 -0.0015918 -0.00156382 -0.00153422 -0.00150297 -0.00147008 -0.00143551 -0.00139927 -0.00136133 -0.00132168 -0.00128033 -0.00123725 -0.00119243 -0.00114588 -0.00109757 -0.0010475 -0.000995669 -0.000942057 -0.00088666 -0.00082947 -0.000770479 -0.000709679 -0.000647062 -0.000582621 -0.000516346 -0.000448231 -0.000378268 -0.000306448 -0.000232763 -0.000157206 -7.97684E-05 -4.41428E-07 7.94758E-05 0.000158688 0.000237202 0.000315024 0.000392162 -0.00206156 -0.00205731 -0.00205301 -0.0020487 -0.00204436 -0.00204 -0.00203561 -0.00203118 -0.00202673 -0.00202224 -0.00201773 -0.00201318 -0.00200859 -0.00200396 -0.0019993 -0.0019946 -0.00198986 -0.00198508 -0.00198025 -0.00197538 -0.00197046 -0.00196549 -0.00196047 -0.0019554 -0.00195027 -0.00194508 -0.00193983 -0.00193452 -0.00192914 -0.00192368 -0.00191815 -0.00191254 -0.00190684 -0.00190105 -0.00189516 -0.00188917 -0.00188306 -0.00187683 -0.00187046 -0.00186393 -0.00185723 -0.00185033 -0.00184319 -0.00183577 -0.00182801 -0.00181984 -0.00181117 -0.0018019 -0.00179191 -0.00178109 -0.00176932 -0.00175648 -0.00174249 -0.00172724 -0.00171065 -0.00169267 -0.00167324 -0.00165232 -0.00162986 -0.00160582 -0.0015802 -0.00155295 -0.00152407 -0.00149352 -0.0014613 -0.00142739 -0.00139178 -0.00135445 -0.0013154 -0.00127461 -0.00123207 -0.00118777 -0.0011417 -0.00109386 -0.00104423 -0.000992808 -0.000939581 -0.000884542 -0.000827682 -0.000768994 -0.000708469 -0.000646099 -0.000581875 -0.00051579 -0.000447836 -0.000378003 -0.000306285 -0.000232672 -0.000157157 -7.97306E-05 -3.84841E-07 7.95718E-05 0.000158833 0.000237404 0.000315292 0.000392503 -0.00203431 -0.00203011 -0.00202587 -0.00202162 -0.00201734 -0.00201303 -0.0020087 -0.00200434 -0.00199995 -0.00199553 -0.00199107 -0.00198659 -0.00198207 -0.00197752 -0.00197293 -0.0019683 -0.00196363 -0.00195892 -0.00195417 -0.00194938 -0.00194454 -0.00193966 -0.00193472 -0.00192974 -0.00192469 -0.0019196 -0.00191444 -0.00190922 -0.00190394 -0.00189859 -0.00189316 -0.00188766 -0.00188208 -0.00187641 -0.00187064 -0.00186478 -0.0018588 -0.00185271 -0.00184649 -0.00184013 -0.0018336 -0.00182689 -0.00181997 -0.00181279 -0.00180531 -0.00179746 -0.00178916 -0.00178033 -0.00177084 -0.00176058 -0.00174943 -0.00173727 -0.001724 -0.0017095 -0.00169369 -0.0016765 -0.00165787 -0.00163774 -0.00161607 -0.00159282 -0.00156796 -0.00154148 -0.00151333 -0.00148351 -0.00145199 -0.00141876 -0.00138381 -0.00134712 -0.00130868 -0.00126848 -0.0012265 -0.00118274 -0.00113719 -0.00108984 -0.00104067 -0.000989679 -0.000936859 -0.000882199 -0.000825692 -0.000767327 -0.000707097 -0.000644993 -0.000581006 -0.000515129 -0.000447353 -0.000377669 -0.000306068 -0.000232544 -0.000157086 -7.96858E-05 -3.35396E-07 7.96474E-05 0.000158945 0.000237563 0.000315506 0.00039278 -0.00200659 -0.00200245 -0.00199827 -0.00199407 -0.00198985 -0.0019856 -0.00198133 -0.00197703 -0.0019727 -0.00196835 -0.00196396 -0.00195954 -0.00195509 -0.0019506 -0.00194608 -0.00194153 -0.00193693 -0.0019323 -0.00192763 -0.00192292 -0.00191816 -0.00191335 -0.0019085 -0.0019036 -0.00189865 -0.00189364 -0.00188858 -0.00188346 -0.00187827 -0.00187302 -0.0018677 -0.00186231 -0.00185684 -0.00185128 -0.00184564 -0.0018399 -0.00183406 -0.00182811 -0.00182204 -0.00181583 -0.00180947 -0.00180294 -0.00179622 -0.00178927 -0.00178204 -0.00177449 -0.00176655 -0.00175811 -0.00174909 -0.00173937 -0.00172882 -0.00171732 -0.00170474 -0.00169099 -0.00167596 -0.00165957 -0.00164175 -0.00162243 -0.00160157 -0.00157913 -0.00155507 -0.00152937 -0.00150199 -0.00147291 -0.00144212 -0.00140961 -0.00137534 -0.00133931 -0.00130151 -0.00126192 -0.00122054 -0.00117734 -0.00113233 -0.00108548 -0.0010368 -0.000986269 -0.000933878 -0.000879621 -0.000823486 -0.000765467 -0.000705553 -0.000643735 -0.000580006 -0.000514356 -0.000446776 -0.000377259 -0.000305795 -0.000232375 -0.00015699 -7.96323E-05 -2.9221E-07 7.97027E-05 0.000159024 0.000237677 0.000315664 0.00039299 -0.00197841 -0.00197433 -0.0019702 -0.00196606 -0.0019619 -0.00195771 -0.0019535 -0.00194926 -0.00194499 -0.0019407 -0.00193638 -0.00193202 -0.00192764 -0.00192322 -0.00191877 -0.00191429 -0.00190977 -0.00190521 -0.00190062 -0.00189598 -0.0018913 -0.00188658 -0.00188181 -0.001877 -0.00187213 -0.00186722 -0.00186225 -0.00185722 -0.00185213 -0.00184698 -0.00184177 -0.00183648 -0.00183112 -0.00182568 -0.00182016 -0.00181454 -0.00180883 -0.00180302 -0.00179709 -0.00179103 -0.00178483 -0.00177848 -0.00177195 -0.00176521 -0.00175823 -0.00175096 -0.00174333 -0.00173527 -0.00172668 -0.00171746 -0.00170748 -0.00169661 -0.00168473 -0.00167171 -0.00165746 -0.00164187 -0.00162487 -0.00160638 -0.00158635 -0.00156474 -0.0015415 -0.0015166 -0.00149001 -0.00146171 -0.00143168 -0.00139989 -0.00136634 -0.001331 -0.00129386 -0.00125492 -0.00121415 -0.00117154 -0.00112709 -0.00108079 -0.00103261 -0.000982563 -0.000930626 -0.000876794 -0.000821056 -0.000763404 -0.000703827 -0.000642318 -0.000578866 -0.000513464 -0.000446101 -0.000376769 -0.000305459 -0.000232162 -0.000156868 -7.95685E-05 -2.54505E-07 7.97376E-05 0.000159069 0.000237743 0.000315762 0.000393131 -0.00194976 -0.00194573 -0.00194166 -0.00193757 -0.00193347 -0.00192934 -0.00192519 -0.00192101 -0.00191681 -0.00191258 -0.00190832 -0.00190403 -0.00189972 -0.00189537 -0.00189099 -0.00188658 -0.00188213 -0.00187765 -0.00187313 -0.00186857 -0.00186397 -0.00185933 -0.00185465 -0.00184992 -0.00184514 -0.00184031 -0.00183543 -0.0018305 -0.00182551 -0.00182046 -0.00181535 -0.00181017 -0.00180492 -0.00179959 -0.00179419 -0.00178869 -0.00178311 -0.00177743 -0.00177164 -0.00176573 -0.00175969 -0.00175351 -0.00174716 -0.00174062 -0.00173387 -0.00172685 -0.00171952 -0.0017118 -0.00170362 -0.00169486 -0.00168541 -0.00167515 -0.00166394 -0.00165165 -0.00163817 -0.00162338 -0.0016072 -0.00158956 -0.00157038 -0.00154961 -0.00152721 -0.00150314 -0.00147737 -0.00144987 -0.00142062 -0.0013896 -0.00135679 -0.00132217 -0.00128572 -0.00124745 -0.00120732 -0.00116533 -0.00112147 -0.00107573 -0.00102809 -0.000978546 -0.000927089 -0.000873706 -0.000818388 -0.000761127 -0.000701911 -0.000640732 -0.00057758 -0.000512446 -0.00044532 -0.000376194 -0.000305057 -0.000231901 -0.000156716 -7.94928E-05 -2.21597E-07 7.9752E-05 0.000159079 0.000237761 0.0003158 0.000393199 -0.00192063 -0.00191665 -0.00191264 -0.00190861 -0.00190457 -0.0019005 -0.0018964 -0.00189229 -0.00188815 -0.00188398 -0.00187979 -0.00187557 -0.00187132 -0.00186704 -0.00186273 -0.00185839 -0.00185402 -0.00184961 -0.00184516 -0.00184068 -0.00183616 -0.0018316 -0.001827 -0.00182236 -0.00181766 -0.00181293 -0.00180814 -0.0018033 -0.00179841 -0.00179346 -0.00178844 -0.00178337 -0.00177823 -0.00177301 -0.00176772 -0.00176235 -0.00175689 -0.00175134 -0.00174569 -0.00173992 -0.00173404 -0.00172802 -0.00172185 -0.0017155 -0.00170896 -0.00170218 -0.00169512 -0.00168773 -0.00167991 -0.00167159 -0.00166264 -0.00165295 -0.00164238 -0.0016308 -0.00161807 -0.00160409 -0.00158874 -0.00157195 -0.00155363 -0.00153373 -0.0015122 -0.00148898 -0.00146406 -0.00143738 -0.00140894 -0.00137871 -0.00134666 -0.00131279 -0.00127707 -0.00123949 -0.00120003 -0.00115869 -0.00111544 -0.00107029 -0.00102321 -0.000974205 -0.000923252 -0.000870344 -0.000815471 -0.000758625 -0.000699793 -0.000638968 -0.000576138 -0.000511295 -0.000444428 -0.000375528 -0.000304585 -0.00023159 -0.000156533 -7.94037E-05 -1.92886E-07 7.97455E-05 0.000159053 0.000237729 0.000315775 0.000393191 -0.00189102 -0.0018871 -0.00188314 -0.00187917 -0.00187518 -0.00187117 -0.00186714 -0.00186309 -0.00185901 -0.00185491 -0.00185078 -0.00184662 -0.00184244 -0.00183823 -0.00183399 -0.00182972 -0.00182542 -0.00182109 -0.00181672 -0.00181231 -0.00180787 -0.00180339 -0.00179887 -0.00179431 -0.00178971 -0.00178506 -0.00178036 -0.00177561 -0.00177082 -0.00176596 -0.00176105 -0.00175608 -0.00175105 -0.00174594 -0.00174077 -0.00173551 -0.00173018 -0.00172476 -0.00171924 -0.00171361 -0.00170788 -0.00170201 -0.00169601 -0.00168985 -0.00168351 -0.00167696 -0.00167016 -0.00166305 -0.00165558 -0.00164765 -0.00163917 -0.00163002 -0.00162006 -0.00160915 -0.00159717 -0.00158398 -0.00156947 -0.00155353 -0.00153609 -0.00151708 -0.00149642 -0.00147409 -0.00145003 -0.00142421 -0.00139661 -0.00136719 -0.00133594 -0.00130284 -0.00126787 -0.00123102 -0.00119226 -0.00115159 -0.001109 -0.00106446 -0.00101797 -0.000969523 -0.000919101 -0.000866694 -0.000812293 -0.000755886 -0.000697464 -0.000637016 -0.000574533 -0.000510003 -0.000443418 -0.000374766 -0.000304038 -0.000231225 -0.000156315 -7.92997E-05 -1.67844E-07 7.97178E-05 0.000158989 0.000237644 0.000315682 0.000393105 -0.00186093 -0.00185706 -0.00185316 -0.00184925 -0.00184532 -0.00184137 -0.0018374 -0.0018334 -0.00182939 -0.00182535 -0.00182129 -0.0018172 -0.00181308 -0.00180894 -0.00180477 -0.00180057 -0.00179634 -0.00179208 -0.00178779 -0.00178346 -0.0017791 -0.0017747 -0.00177026 -0.00176578 -0.00176126 -0.0017567 -0.00175209 -0.00174744 -0.00174274 -0.00173798 -0.00173317 -0.0017283 -0.00172337 -0.00171838 -0.00171331 -0.00170818 -0.00170297 -0.00169767 -0.00169228 -0.0016868 -0.0016812 -0.0016755 -0.00166966 -0.00166367 -0.00165752 -0.00165118 -0.00164462 -0.00163778 -0.00163062 -0.00162307 -0.00161501 -0.00160636 -0.00159698 -0.00158672 -0.00157546 -0.00156305 -0.00154936 -0.00153429 -0.00151773 -0.00149962 -0.00147987 -0.00145843 -0.00143527 -0.00141033 -0.00138359 -0.00135503 -0.0013246 -0.00129231 -0.00125812 -0.00122202 -0.00118399 -0.00114402 -0.0011021 -0.00105821 -0.00101235 -0.000964485 -0.000914622 -0.000862744 -0.00080884 -0.0007529 -0.000694913 -0.000634868 -0.000572755 -0.000508563 -0.000442283 -0.000373902 -0.000303412 -0.000230802 -0.000156061 -7.91793E-05 -1.4601E-07 7.96684E-05 0.000158886 0.000237504 0.000315521 0.000392935 -0.00183037 -0.00182656 -0.00182271 -0.00181886 -0.00181498 -0.00181109 -0.00180718 -0.00180325 -0.0017993 -0.00179532 -0.00179132 -0.0017873 -0.00178325 -0.00177918 -0.00177508 -0.00177095 -0.00176679 -0.00176261 -0.00175839 -0.00175414 -0.00174985 -0.00174553 -0.00174117 -0.00173678 -0.00173235 -0.00172787 -0.00172335 -0.00171879 -0.00171418 -0.00170952 -0.00170481 -0.00170004 -0.00169522 -0.00169033 -0.00168538 -0.00168036 -0.00167526 -0.00167009 -0.00166483 -0.00165948 -0.00165403 -0.00164848 -0.0016428 -0.00163698 -0.00163102 -0.00162488 -0.00161854 -0.00161195 -0.00160508 -0.00159786 -0.0015902 -0.00158201 -0.00157316 -0.00156353 -0.00155295 -0.0015413 -0.00152843 -0.00151422 -0.00149855 -0.00148134 -0.00146251 -0.001442 -0.00141975 -0.00139573 -0.00136988 -0.00134219 -0.00131262 -0.00128116 -0.00124778 -0.00121247 -0.0011752 -0.00113597 -0.00109475 -0.00105154 -0.00100632 -0.000959077 -0.000909801 -0.000858479 -0.000805101 -0.000749655 -0.00069213 -0.000632514 -0.000570797 -0.000506969 -0.000441017 -0.000372932 -0.000302702 -0.000230318 -0.000155768 -7.90411E-05 -1.26978E-07 7.95966E-05 0.000158743 0.000237307 0.000315286 0.000392678 -0.00179935 -0.00179559 -0.0017918 -0.001788 -0.00178419 -0.00178036 -0.0017765 -0.00177263 -0.00176874 -0.00176483 -0.0017609 -0.00175694 -0.00175296 -0.00174896 -0.00174493 -0.00174087 -0.00173678 -0.00173267 -0.00172852 -0.00172435 -0.00172014 -0.0017159 -0.00171162 -0.00170731 -0.00170296 -0.00169858 -0.00169415 -0.00168967 -0.00168516 -0.00168059 -0.00167598 -0.00167131 -0.00166659 -0.00166181 -0.00165697 -0.00165206 -0.00164709 -0.00164204 -0.0016369 -0.00163169 -0.00162638 -0.00162096 -0.00161544 -0.00160979 -0.001604 -0.00159805 -0.00159192 -0.00158557 -0.00157897 -0.00157206 -0.00156476 -0.00155699 -0.00154864 -0.00153958 -0.00152966 -0.00151874 -0.00150667 -0.00149331 -0.00147853 -0.00146224 -0.00144435 -0.00142478 -0.00140347 -0.00138037 -0.00135545 -0.00132866 -0.00129998 -0.00126939 -0.00123685 -0.00120235 -0.00116588 -0.00112741 -0.00108693 -0.00104442 -0.000999878 -0.000953283 -0.000904624 -0.000853889 -0.000801065 -0.000746141 -0.000689104 -0.000629945 -0.000568651 -0.000505211 -0.000439614 -0.000371849 -0.000301905 -0.00022977 -0.000155433 -7.88837E-05 -1.10395E-07 7.95017E-05 0.000158557 0.00023705 0.000314975 0.00039233 -0.00176787 -0.00176416 -0.00176043 -0.00175669 -0.00175293 -0.00174916 -0.00174537 -0.00174156 -0.00173773 -0.00173388 -0.00173001 -0.00172612 -0.00172221 -0.00171827 -0.00171431 -0.00171032 -0.00170631 -0.00170227 -0.0016982 -0.0016941 -0.00168997 -0.00168581 -0.00168161 -0.00167738 -0.00167312 -0.00166881 -0.00166447 -0.00166009 -0.00165566 -0.00165119 -0.00164668 -0.00164211 -0.00163749 -0.00163282 -0.00162808 -0.00162329 -0.00161843 -0.0016135 -0.00160849 -0.0016034 -0.00159823 -0.00159296 -0.00158758 -0.00158209 -0.00157647 -0.00157071 -0.00156478 -0.00155865 -0.0015523 -0.00154567 -0.00153871 -0.00153133 -0.00152344 -0.00151491 -0.00150561 -0.00149538 -0.00148408 -0.00147155 -0.00145766 -0.0014423 -0.00142535 -0.00140674 -0.00138639 -0.00136425 -0.00134028 -0.00131442 -0.00128666 -0.00125696 -0.0012253 -0.00119165 -0.00115599 -0.00111832 -0.00107861 -0.00103684 -0.000993005 -0.000947089 -0.000899077 -0.000848957 -0.000796717 -0.000742344 -0.000685826 -0.000627151 -0.000566307 -0.000503283 -0.000438067 -0.000370648 -0.000301014 -0.000229153 -0.000155054 -7.87057E-05 -9.59492E-08 7.93832E-05 0.000158328 0.00023673 0.000314585 0.000391886 -0.00173592 -0.00173227 -0.00172859 -0.00172491 -0.00172121 -0.0017175 -0.00171377 -0.00171002 -0.00170625 -0.00170247 -0.00169866 -0.00169484 -0.00169099 -0.00168712 -0.00168323 -0.00167931 -0.00167537 -0.0016714 -0.00166741 -0.00166338 -0.00165933 -0.00165525 -0.00165113 -0.00164699 -0.0016428 -0.00163859 -0.00163433 -0.00163004 -0.00162571 -0.00162133 -0.00161691 -0.00161244 -0.00160792 -0.00160335 -0.00159873 -0.00159404 -0.0015893 -0.00158448 -0.0015796 -0.00157464 -0.0015696 -0.00156446 -0.00155924 -0.0015539 -0.00154844 -0.00154286 -0.00153712 -0.0015312 -0.00152508 -0.00151872 -0.00151206 -0.00150503 -0.00149756 -0.00148952 -0.0014808 -0.00147123 -0.00146067 -0.00144896 -0.00143594 -0.00142149 -0.0014055 -0.00138786 -0.00136849 -0.00134734 -0.00132434 -0.00129944 -0.00127263 -0.00124385 -0.0012131 -0.00118033 -0.00114553 -0.00110868 -0.00106977 -0.00102877 -0.000985681 -0.000940475 -0.000893142 -0.000843669 -0.000792044 -0.000738252 -0.000682281 -0.00062412 -0.000563756 -0.000501176 -0.000436369 -0.000369323 -0.000300026 -0.000228465 -0.000154629 -7.85057E-05 -8.33686E-08 7.92401E-05 0.000158053 0.000236346 0.000314111 0.000391341 -0.00170351 -0.00169991 -0.0016963 -0.00169267 -0.00168903 -0.00168538 -0.00168171 -0.00167802 -0.00167432 -0.0016706 -0.00166686 -0.0016631 -0.00165932 -0.00165551 -0.00165169 -0.00164784 -0.00164397 -0.00164008 -0.00163616 -0.00163221 -0.00162823 -0.00162423 -0.00162019 -0.00161613 -0.00161203 -0.0016079 -0.00160373 -0.00159952 -0.00159528 -0.001591 -0.00158667 -0.0015823 -0.00157788 -0.00157341 -0.00156889 -0.00156432 -0.00155969 -0.00155499 -0.00155023 -0.00154539 -0.00154048 -0.00153548 -0.0015304 -0.00152521 -0.00151991 -0.0015145 -0.00150894 -0.00150322 -0.00149732 -0.00149121 -0.00148483 -0.00147813 -0.00147104 -0.00146345 -0.00145525 -0.0014463 -0.00143644 -0.00142552 -0.00141336 -0.00139982 -0.00138478 -0.00136812 -0.00134976 -0.0013296 -0.0013076 -0.0012837 -0.00125786 -0.00123005 -0.00120022 -0.00116837 -0.00113446 -0.00109848 -0.0010604 -0.00102021 -0.000977888 -0.000933425 -0.000886804 -0.00083801 -0.00078703 -0.000733851 -0.00067846 -0.000620843 -0.000560988 -0.000498882 -0.000434513 -0.000367868 -0.000298935 -0.000227701 -0.000154154 -7.82823E-05 -7.24156E-08 7.90715E-05 0.00015773 0.000235892 0.000313549 0.000390691 -0.00167064 -0.0016671 -0.00166354 -0.00165997 -0.00165639 -0.00165279 -0.00164918 -0.00164556 -0.00164192 -0.00163826 -0.00163459 -0.00163089 -0.00162718 -0.00162345 -0.00161969 -0.00161592 -0.00161212 -0.00160829 -0.00160445 -0.00160057 -0.00159667 -0.00159275 -0.00158879 -0.00158481 -0.00158079 -0.00157674 -0.00157266 -0.00156854 -0.00156439 -0.0015602 -0.00155597 -0.00155169 -0.00154737 -0.00154301 -0.00153859 -0.00153413 -0.0015296 -0.00152502 -0.00152038 -0.00151567 -0.00151088 -0.00150602 -0.00150107 -0.00149603 -0.00149089 -0.00148563 -0.00148025 -0.00147473 -0.00146903 -0.00146315 -0.00145703 -0.00145063 -0.00144389 -0.00143671 -0.001429 -0.00142062 -0.00141142 -0.00140124 -0.00138992 -0.00137728 -0.00136319 -0.00134752 -0.00133016 -0.00131103 -0.00129005 -0.00126717 -0.00124234 -0.00121551 -0.00118666 -0.00115575 -0.00112277 -0.00108768 -0.00105047 -0.00101112 -0.000969605 -0.000925919 -0.000880044 -0.000831963 -0.000781663 -0.000729129 -0.000674348 -0.000617307 -0.000557993 -0.000496391 -0.00043249 -0.000366276 -0.000297736 -0.000226857 -0.000153628 -7.80339E-05 -6.28823E-08 7.88764E-05 0.000157358 0.000235368 0.000312896 0.000389931 -0.00163731 -0.00163383 -0.00163032 -0.00162681 -0.00162329 -0.00161976 -0.00161621 -0.00161264 -0.00160907 -0.00160547 -0.00160186 -0.00159823 -0.00159459 -0.00159092 -0.00158724 -0.00158353 -0.0015798 -0.00157605 -0.00157228 -0.00156848 -0.00156466 -0.00156081 -0.00155693 -0.00155303 -0.00154909 -0.00154513 -0.00154113 -0.0015371 -0.00153304 -0.00152894 -0.0015248 -0.00152062 -0.0015164 -0.00151214 -0.00150783 -0.00150347 -0.00149905 -0.00149458 -0.00149006 -0.00148547 -0.00148081 -0.00147607 -0.00147126 -0.00146637 -0.00146137 -0.00145628 -0.00145106 -0.00144572 -0.00144022 -0.00143456 -0.00142868 -0.00142256 -0.00141613 -0.00140933 -0.00140207 -0.00139421 -0.00138563 -0.00137615 -0.00136562 -0.00135386 -0.00134071 -0.00132602 -0.00130968 -0.00129159 -0.00127166 -0.00124982 -0.00122603 -0.00120022 -0.00117237 -0.00114245 -0.00111042 -0.00107627 -0.00103996 -0.00100148 -0.000960813 -0.00091794 -0.000872845 -0.000825511 -0.000775925 -0.00072407 -0.000669934 -0.000613502 -0.00055476 -0.000493695 -0.000430292 -0.00036454 -0.000296424 -0.00022593 -0.000153047 -7.77591E-05 -5.4587E-08 7.86538E-05 0.000156933 0.000234769 0.000312147 0.000389055 -0.00160353 -0.0016001 -0.00159665 -0.0015932 -0.00158974 -0.00158626 -0.00158277 -0.00157927 -0.00157576 -0.00157223 -0.00156868 -0.00156512 -0.00156154 -0.00155794 -0.00155433 -0.00155069 -0.00154703 -0.00154336 -0.00153966 -0.00153593 -0.00153219 -0.00152841 -0.00152462 -0.00152079 -0.00151694 -0.00151306 -0.00150915 -0.00150521 -0.00150123 -0.00149722 -0.00149318 -0.00148909 -0.00148497 -0.0014808 -0.0014766 -0.00147234 -0.00146804 -0.00146368 -0.00145927 -0.00145479 -0.00145026 -0.00144565 -0.00144098 -0.00143622 -0.00143137 -0.00142643 -0.00142138 -0.00141621 -0.0014109 -0.00140544 -0.00139979 -0.00139393 -0.0013878 -0.00138134 -0.00137447 -0.00136709 -0.00135908 -0.00135026 -0.00134048 -0.00132956 -0.00131733 -0.00130363 -0.00128831 -0.00127127 -0.00125241 -0.00123164 -0.00120891 -0.00118415 -0.00115734 -0.00112844 -0.0010974 -0.00106421 -0.00102885 -0.000991278 -0.000951492 -0.000909468 -0.000865188 -0.000818638 -0.0007698 -0.000718661 -0.000665203 -0.000609414 -0.000551279 -0.000490783 -0.000427912 -0.000362654 -0.000294993 -0.000224915 -0.000152408 -7.74565E-05 -4.73709E-08 7.84024E-05 0.000156454 0.000234091 0.000311297 0.000388058 -0.00156929 -0.00156592 -0.00156253 -0.00155914 -0.00155573 -0.00155232 -0.00154889 -0.00154545 -0.001542 -0.00153853 -0.00153505 -0.00153156 -0.00152804 -0.00152451 -0.00152097 -0.0015174 -0.00151381 -0.00151021 -0.00150658 -0.00150293 -0.00149926 -0.00149557 -0.00149185 -0.00148811 -0.00148434 -0.00148054 -0.00147671 -0.00147286 -0.00146897 -0.00146505 -0.0014611 -0.00145711 -0.00145308 -0.00144901 -0.00144491 -0.00144075 -0.00143656 -0.00143231 -0.00142801 -0.00142366 -0.00141924 -0.00141476 -0.00141022 -0.00140559 -0.00140089 -0.0013961 -0.0013912 -0.0013862 -0.00138108 -0.00137581 -0.00137038 -0.00136475 -0.00135889 -0.00135275 -0.00134625 -0.0013393 -0.0013318 -0.0013236 -0.00131453 -0.00130441 -0.00129307 -0.00128033 -0.00126604 -0.00125005 -0.00123227 -0.00121259 -0.00119095 -0.00116728 -0.00114154 -0.00111369 -0.00108368 -0.0010515 -0.00101711 -0.000980488 -0.000941619 -0.000900481 -0.000857056 -0.000811325 -0.000763274 -0.000712884 -0.000660142 -0.000605032 -0.000547538 -0.000487646 -0.000425342 -0.00036061 -0.000293437 -0.000223808 -0.000151708 -7.71243E-05 -4.10953E-08 7.81211E-05 0.000155919 0.000233332 0.000310343 0.000386935 -0.00153461 -0.00153129 -0.00152796 -0.00152463 -0.00152128 -0.00151793 -0.00151456 -0.00151118 -0.00150779 -0.00150439 -0.00150098 -0.00149755 -0.0014941 -0.00149064 -0.00148716 -0.00148366 -0.00148015 -0.00147662 -0.00147306 -0.00146949 -0.0014659 -0.00146228 -0.00145864 -0.00145498 -0.00145129 -0.00144757 -0.00144383 -0.00144006 -0.00143626 -0.00143243 -0.00142857 -0.00142467 -0.00142074 -0.00141677 -0.00141276 -0.00140872 -0.00140462 -0.00140048 -0.0013963 -0.00139206 -0.00138776 -0.00138341 -0.00137899 -0.0013745 -0.00136993 -0.00136529 -0.00136055 -0.00135571 -0.00135076 -0.00134568 -0.00134045 -0.00133504 -0.00132944 -0.00132358 -0.00131742 -0.00131087 -0.00130383 -0.00129619 -0.00128777 -0.00127841 -0.00126793 -0.00125613 -0.00124284 -0.00122792 -0.00121123 -0.00119266 -0.00117214 -0.00114958 -0.00112495 -0.00109818 -0.00106924 -0.00103809 -0.00100472 -0.000969086 -0.000931174 -0.000890961 -0.000848427 -0.000803555 -0.000756327 -0.000706726 -0.000654736 -0.000600341 -0.000543526 -0.000484274 -0.000422571 -0.000358401 -0.000291751 -0.000222604 -0.000150945 -7.6761E-05 -3.56393E-08 7.78085E-05 0.000155323 0.000232487 0.000309278 0.000385679 -0.00149949 -0.00149622 -0.00149295 -0.00148967 -0.00148639 -0.00148309 -0.00147979 -0.00147648 -0.00147315 -0.00146981 -0.00146646 -0.0014631 -0.00145972 -0.00145632 -0.00145292 -0.00144949 -0.00144605 -0.00144259 -0.00143911 -0.00143561 -0.00143209 -0.00142855 -0.00142499 -0.0014214 -0.0014178 -0.00141416 -0.00141051 -0.00140682 -0.00140311 -0.00139937 -0.0013956 -0.00139179 -0.00138796 -0.00138408 -0.00138018 -0.00137623 -0.00137224 -0.00136821 -0.00136413 -0.00136001 -0.00135583 -0.00135159 -0.0013473 -0.00134294 -0.00133851 -0.00133401 -0.00132942 -0.00132474 -0.00131995 -0.00131505 -0.00131001 -0.00130482 -0.00129945 -0.00129386 -0.001288 -0.00128181 -0.0012752 -0.00126806 -0.00126025 -0.0012516 -0.00124192 -0.00123103 -0.00121873 -0.00120486 -0.00118927 -0.00117183 -0.00115244 -0.00113103 -0.00110753 -0.00108188 -0.00105404 -0.00102398 -0.000991656 -0.000957049 -0.000920133 -0.000880884 -0.000839283 -0.000795309 -0.000748944 -0.00070017 -0.000648971 -0.00059533 -0.00053923 -0.000480656 -0.000419591 -0.00035602 -0.000289927 -0.000221298 -0.000150115 -7.6365E-05 -3.08971E-08 7.74633E-05 0.000154666 0.000231552 0.000308098 0.000384284 -0.00146392 -0.00146072 -0.00145751 -0.00145429 -0.00145106 -0.00144783 -0.00144459 -0.00144133 -0.00143807 -0.0014348 -0.00143151 -0.00142821 -0.0014249 -0.00142158 -0.00141824 -0.00141488 -0.00141151 -0.00140812 -0.00140472 -0.00140129 -0.00139785 -0.00139439 -0.0013909 -0.0013874 -0.00138387 -0.00138032 -0.00137675 -0.00137315 -0.00136952 -0.00136587 -0.00136219 -0.00135848 -0.00135473 -0.00135096 -0.00134715 -0.0013433 -0.00133942 -0.00133549 -0.00133152 -0.00132751 -0.00132345 -0.00131933 -0.00131516 -0.00131093 -0.00130664 -0.00130227 -0.00129783 -0.0012933 -0.00128867 -0.00128394 -0.00127909 -0.0012741 -0.00126895 -0.00126361 -0.00125803 -0.00125217 -0.00124594 -0.00123926 -0.00123199 -0.00122399 -0.00121507 -0.00120505 -0.00119371 -0.00118088 -0.00116638 -0.00115007 -0.00113185 -0.0011116 -0.00108926 -0.00106477 -0.00103807 -0.00100912 -0.000977895 -0.000944354 -0.000908474 -0.000870231 -0.000829602 -0.000786567 -0.000741105 -0.000693199 -0.000642831 -0.000589983 -0.000534639 -0.00047678 -0.000416392 -0.000353458 -0.000287961 -0.000219886 -0.000149216 -7.59346E-05 -2.67765E-08 7.7084E-05 0.000153943 0.000230523 0.000306797 0.000382743 -0.00142794 -0.00142479 -0.00142164 -0.00141848 -0.00141531 -0.00141214 -0.00140896 -0.00140577 -0.00140257 -0.00139936 -0.00139614 -0.00139291 -0.00138967 -0.00138641 -0.00138314 -0.00137985 -0.00137655 -0.00137324 -0.0013699 -0.00136655 -0.00136319 -0.0013598 -0.0013564 -0.00135297 -0.00134952 -0.00134606 -0.00134257 -0.00133905 -0.00133551 -0.00133195 -0.00132835 -0.00132473 -0.00132109 -0.00131741 -0.00131369 -0.00130995 -0.00130616 -0.00130234 -0.00129848 -0.00129458 -0.00129063 -0.00128663 -0.00128258 -0.00127848 -0.00127431 -0.00127008 -0.00126578 -0.0012614 -0.00125693 -0.00125237 -0.00124769 -0.0012429 -0.00123795 -0.00123284 -0.00122752 -0.00122196 -0.00121608 -0.00120981 -0.00120304 -0.00119563 -0.00118742 -0.0011782 -0.00116778 -0.00115596 -0.00114255 -0.00112738 -0.00111033 -0.00109127 -0.00107013 -0.00104682 -0.00102129 -0.000993505 -0.00096341 -0.000930976 -0.000896175 -0.000858978 -0.000819364 -0.000777309 -0.000732793 -0.000685797 -0.000636301 -0.000584287 -0.000529738 -0.000472637 -0.000412965 -0.000350707 -0.000285845 -0.000218362 -0.000148242 -7.54679E-05 -2.31972E-08 7.66691E-05 0.000153152 0.000229395 0.000305369 0.000381049 -0.00139153 -0.00138844 -0.00138535 -0.00138225 -0.00137914 -0.00137603 -0.00137291 -0.00136979 -0.00136665 -0.00136351 -0.00136035 -0.00135719 -0.00135401 -0.00135082 -0.00134762 -0.00134441 -0.00134118 -0.00133794 -0.00133468 -0.0013314 -0.00132811 -0.0013248 -0.00132147 -0.00131813 -0.00131476 -0.00131138 -0.00130797 -0.00130454 -0.00130108 -0.00129761 -0.0012941 -0.00129058 -0.00128702 -0.00128343 -0.00127982 -0.00127617 -0.00127249 -0.00126877 -0.00126502 -0.00126122 -0.00125739 -0.0012535 -0.00124957 -0.00124559 -0.00124155 -0.00123746 -0.00123329 -0.00122906 -0.00122474 -0.00122034 -0.00121583 -0.00121122 -0.00120647 -0.00120158 -0.0011965 -0.00119121 -0.00118565 -0.00117976 -0.00117343 -0.00116656 -0.00115898 -0.00115052 -0.00114097 -0.00113013 -0.00111778 -0.00110375 -0.00108787 -0.00107002 -0.00105009 -0.00102801 -0.00100369 -0.000977098 -0.000948177 -0.000916891 -0.00088321 -0.000847103 -0.000808546 -0.000767515 -0.000723988 -0.000677944 -0.000629363 -0.000578227 -0.000524517 -0.000468213 -0.0004093 -0.000347759 -0.000283572 -0.000216722 -0.000147191 -7.49633E-05 -2.00889E-08 7.62169E-05 0.00015229 0.000228165 0.00030381 0.000379196 -0.00135471 -0.00135169 -0.00134865 -0.00134561 -0.00134257 -0.00133952 -0.00133646 -0.0013334 -0.00133033 -0.00132725 -0.00132416 -0.00132106 -0.00131796 -0.00131484 -0.0013117 -0.00130856 -0.0013054 -0.00130223 -0.00129905 -0.00129585 -0.00129263 -0.0012894 -0.00128615 -0.00128288 -0.0012796 -0.00127629 -0.00127297 -0.00126962 -0.00126625 -0.00126286 -0.00125945 -0.00125601 -0.00125255 -0.00124905 -0.00124553 -0.00124198 -0.0012384 -0.00123479 -0.00123114 -0.00122745 -0.00122373 -0.00121996 -0.00121615 -0.00121229 -0.00120837 -0.0012044 -0.00120037 -0.00119628 -0.00119211 -0.00118786 -0.00118352 -0.00117908 -0.00117453 -0.00116984 -0.00116499 -0.00115995 -0.00115468 -0.00114912 -0.0011432 -0.00113681 -0.00112981 -0.00112205 -0.00111331 -0.0011034 -0.00109208 -0.00107916 -0.00106447 -0.00104784 -0.00102915 -0.00100831 -0.000985241 -0.000959877 -0.000932169 -0.000902074 -0.000869556 -0.000834583 -0.000797128 -0.000757165 -0.000714671 -0.000669624 -0.000622003 -0.000571787 -0.000518959 -0.000463498 -0.000405386 -0.000344604 -0.000281135 -0.000214959 -0.00014606 -7.44188E-05 -1.73905E-08 7.57258E-05 0.000151353 0.000226826 0.000302111 0.000377176 -0.0013175 -0.00131453 -0.00131156 -0.00130858 -0.0013056 -0.00130261 -0.00129962 -0.00129662 -0.00129361 -0.0012906 -0.00128758 -0.00128455 -0.00128151 -0.00127846 -0.00127539 -0.00127232 -0.00126924 -0.00126614 -0.00126303 -0.0012599 -0.00125676 -0.0012536 -0.00125043 -0.00124724 -0.00124404 -0.00124082 -0.00123757 -0.00123431 -0.00123103 -0.00122773 -0.0012244 -0.00122105 -0.00121768 -0.00121428 -0.00121086 -0.0012074 -0.00120392 -0.00120041 -0.00119686 -0.00119328 -0.00118967 -0.00118601 -0.00118231 -0.00117857 -0.00117478 -0.00117094 -0.00116704 -0.00116308 -0.00115906 -0.00115496 -0.00115078 -0.00114651 -0.00114213 -0.00113764 -0.001133 -0.0011282 -0.0011232 -0.00111795 -0.00111239 -0.00110643 -0.00109995 -0.00109282 -0.00108483 -0.00107579 -0.00106546 -0.00105364 -0.00104011 -0.0010247 -0.00100727 -0.000987706 -0.000965912 -0.000941818 -0.000915363 -0.0008865 -0.000855189 -0.000821394 -0.000785086 -0.000746237 -0.000704821 -0.000660817 -0.000614201 -0.000564953 -0.000513052 -0.000458478 -0.000401212 -0.000341234 -0.000278527 -0.000213069 -0.000144844 -7.38325E-05 -1.50487E-08 7.51939E-05 0.000150338 0.000225375 0.000300268 0.000374981 -0.00127991 -0.001277 -0.00127409 -0.00127117 -0.00126825 -0.00126532 -0.0012624 -0.00125946 -0.00125652 -0.00125357 -0.00125062 -0.00124765 -0.00124468 -0.0012417 -0.00123871 -0.00123571 -0.00123269 -0.00122967 -0.00122663 -0.00122358 -0.00122051 -0.00121743 -0.00121434 -0.00121123 -0.00120811 -0.00120496 -0.0012018 -0.00119863 -0.00119543 -0.00119221 -0.00118897 -0.00118572 -0.00118243 -0.00117913 -0.0011758 -0.00117244 -0.00116906 -0.00116565 -0.0011622 -0.00115873 -0.00115522 -0.00115167 -0.00114809 -0.00114447 -0.0011408 -0.00113708 -0.00113331 -0.00112949 -0.0011256 -0.00112165 -0.00111762 -0.00111351 -0.00110931 -0.001105 -0.00110057 -0.00109599 -0.00109123 -0.00108626 -0.00108103 -0.00107546 -0.00106945 -0.00106288 -0.00105557 -0.00104734 -0.00103795 -0.00102718 -0.00101479 -0.0010006 -0.000984444 -0.000966173 -0.000945685 -0.000922895 -0.000897732 -0.000870144 -0.000840083 -0.000807512 -0.000772397 -0.000734709 -0.000694419 -0.000651505 -0.000605942 -0.000557707 -0.000506781 -0.000453141 -0.000396767 -0.00033764 -0.00027574 -0.000211046 -0.00014354 -7.32023E-05 -1.3017E-08 7.46195E-05 0.000149241 0.000223806 0.000298273 0.000372603 -0.00124195 -0.0012391 -0.00123625 -0.00123339 -0.00123053 -0.00122767 -0.00122481 -0.00122194 -0.00121906 -0.00121618 -0.00121329 -0.0012104 -0.00120749 -0.00120458 -0.00120166 -0.00119873 -0.00119579 -0.00119283 -0.00118987 -0.00118689 -0.00118391 -0.0011809 -0.00117789 -0.00117486 -0.00117181 -0.00116875 -0.00116567 -0.00116258 -0.00115947 -0.00115634 -0.00115319 -0.00115002 -0.00114683 -0.00114361 -0.00114038 -0.00113712 -0.00113383 -0.00113052 -0.00112718 -0.00112381 -0.0011204 -0.00111697 -0.0011135 -0.00110999 -0.00110644 -0.00110284 -0.0010992 -0.00109551 -0.00109176 -0.00108795 -0.00108407 -0.00108012 -0.00107608 -0.00107195 -0.0010677 -0.00106333 -0.00105881 -0.0010541 -0.00104917 -0.00104394 -0.00103835 -0.00103228 -0.00102559 -0.0010181 -0.00100958 -0.000999803 -0.000988534 -0.00097555 -0.000960658 -0.000943697 -0.00092454 -0.000903085 -0.000879254 -0.000852981 -0.000824216 -0.000792914 -0.00075904 -0.000722559 -0.000683444 -0.000641668 -0.000597206 -0.000550034 -0.00050013 -0.000447473 -0.00039204 -0.000333811 -0.000272766 -0.000208883 -0.000142144 -7.25264E-05 -1.12549E-08 7.40007E-05 0.000148059 0.000222114 0.000296119 0.000370033 -0.00120364 -0.00120085 -0.00119806 -0.00119526 -0.00119247 -0.00118967 -0.00118687 -0.00118407 -0.00118126 -0.00117844 -0.00117562 -0.00117279 -0.00116996 -0.00116712 -0.00116427 -0.00116141 -0.00115854 -0.00115566 -0.00115277 -0.00114987 -0.00114696 -0.00114403 -0.00114109 -0.00113814 -0.00113518 -0.0011322 -0.0011292 -0.00112619 -0.00112316 -0.00112012 -0.00111705 -0.00111397 -0.00111087 -0.00110775 -0.00110461 -0.00110144 -0.00109825 -0.00109504 -0.0010918 -0.00108853 -0.00108523 -0.00108191 -0.00107855 -0.00107515 -0.00107172 -0.00106824 -0.00106473 -0.00106116 -0.00105755 -0.00105387 -0.00105014 -0.00104634 -0.00104246 -0.0010385 -0.00103444 -0.00103026 -0.00102596 -0.00102149 -0.00101683 -0.00101192 -0.0010067 -0.00100109 -0.000994941 -0.000988109 -0.00098039 -0.000971552 -0.00096135 -0.000949541 -0.000935908 -0.000920264 -0.000902458 -0.000882369 -0.000859904 -0.000834989 -0.000807562 -0.000777576 -0.00074499 -0.000709766 -0.000671875 -0.000631287 -0.000587976 -0.000541917 -0.000493086 -0.000441461 -0.000387019 -0.000329738 -0.000269597 -0.000206575 -0.000140651 -7.18024E-05 -9.72722E-09 7.33354E-05 0.000146787 0.000220292 0.000293799 0.000367263 -0.00116499 -0.00116227 -0.00115954 -0.00115681 -0.00115408 -0.00115135 -0.00114861 -0.00114587 -0.00114313 -0.00114038 -0.00113763 -0.00113487 -0.0011321 -0.00112933 -0.00112655 -0.00112376 -0.00112097 -0.00111816 -0.00111534 -0.00111252 -0.00110968 -0.00110683 -0.00110397 -0.0011011 -0.00109822 -0.00109532 -0.0010924 -0.00108948 -0.00108653 -0.00108357 -0.0010806 -0.00107761 -0.00107459 -0.00107156 -0.00106851 -0.00106544 -0.00106235 -0.00105923 -0.00105609 -0.00105293 -0.00104974 -0.00104651 -0.00104326 -0.00103998 -0.00103666 -0.0010333 -0.00102991 -0.00102647 -0.00102299 -0.00101945 -0.00101586 -0.0010122 -0.00100848 -0.00100468 -0.0010008 -0.000996808 -0.000992704 -0.000988461 -0.00098405 -0.000979431 -0.000974551 -0.000969333 -0.000963675 -0.000957437 -0.000950441 -0.000942467 -0.00093327 -0.000922595 -0.000910199 -0.000895868 -0.000879425 -0.000860727 -0.000839662 -0.000816142 -0.000790098 -0.000761474 -0.000730224 -0.000696307 -0.00065969 -0.000620341 -0.000578233 -0.000533338 -0.000485633 -0.000435091 -0.000381692 -0.000325411 -0.000266226 -0.000204115 -0.000139057 -7.10284E-05 -8.40313E-09 7.26215E-05 0.000145423 0.000218335 0.000291306 0.000364284 -0.00112604 -0.00112337 -0.00112071 -0.00111804 -0.00111538 -0.00111271 -0.00111004 -0.00110737 -0.00110469 -0.00110201 -0.00109933 -0.00109664 -0.00109394 -0.00109124 -0.00108853 -0.00108581 -0.00108309 -0.00108036 -0.00107762 -0.00107487 -0.00107211 -0.00106934 -0.00106655 -0.00106376 -0.00106096 -0.00105814 -0.00105531 -0.00105246 -0.0010496 -0.00104673 -0.00104384 -0.00104094 -0.00103801 -0.00103507 -0.00103212 -0.00102914 -0.00102614 -0.00102312 -0.00102008 -0.00101702 -0.00101393 -0.00101081 -0.00100767 -0.00100449 -0.00100129 -0.00099805 -0.000994775 -0.000991459 -0.000988102 -0.000984698 -0.000981243 -0.000977732 -0.00097416 -0.000970519 -0.000966799 -0.00096299 -0.000959079 -0.000955046 -0.000950868 -0.000946513 -0.000941936 -0.000937077 -0.000931851 -0.00092614 -0.00091979 -0.000912601 -0.000904337 -0.000894738 -0.000883543 -0.00087051 -0.000855434 -0.000838144 -0.000818508 -0.000796421 -0.000771802 -0.000744586 -0.00071472 -0.00068216 -0.000646868 -0.000608811 -0.000567958 -0.000524281 -0.000477753 -0.00042835 -0.000376046 -0.000320818 -0.000262643 -0.000201497 -0.000137358 -7.02019E-05 -7.25595E-09 7.1857E-05 0.00014396 0.000216238 0.000288631 0.000361087 -0.0010868 -0.00108419 -0.00108159 -0.00107899 -0.00107639 -0.00107379 -0.00107119 -0.00106858 -0.00106597 -0.00106336 -0.00106074 -0.00105812 -0.0010555 -0.00105287 -0.00105023 -0.00104759 -0.00104494 -0.00104228 -0.00103961 -0.00103694 -0.00103425 -0.00103156 -0.00102886 -0.00102614 -0.00102342 -0.00102068 -0.00101793 -0.00101517 -0.0010124 -0.00100961 -0.00100681 -0.00100399 -0.00100116 -0.000998306 -0.00099544 -0.000992556 -0.000989653 -0.000986731 -0.000983788 -0.000980824 -0.000977836 -0.000974825 -0.000971788 -0.000968723 -0.00096563 -0.000962505 -0.000959347 -0.000956153 -0.00095292 -0.000949645 -0.000946324 -0.000942953 -0.000939526 -0.000936037 -0.000932478 -0.000928841 -0.000925112 -0.000921277 -0.000917317 -0.000913205 -0.000908905 -0.000904368 -0.000899526 -0.000894281 -0.000888503 -0.000882017 -0.000874604 -0.00086601 -0.000855964 -0.0008442 -0.000830482 -0.00081461 -0.000796425 -0.000775805 -0.00075265 -0.000726887 -0.000698454 -0.000667302 -0.000633388 -0.000596676 -0.000557133 -0.000514728 -0.000469433 -0.000421222 -0.00037007 -0.00031595 -0.00025884 -0.000198714 -0.000135549 -6.93206E-05 -6.26241E-09 7.10396E-05 0.000142396 0.000213993 0.000285768 0.000357661 -0.00104729 -0.00104475 -0.00104222 -0.00103968 -0.00103715 -0.00103461 -0.00103208 -0.00102954 -0.001027 -0.00102445 -0.00102191 -0.00101936 -0.0010168 -0.00101424 -0.00101168 -0.00100911 -0.00100653 -0.00100394 -0.00100135 -0.000998755 -0.000996148 -0.000993532 -0.000990907 -0.000988272 -0.000985627 -0.000982972 -0.000980305 -0.000977627 -0.000974937 -0.000972234 -0.000969518 -0.000966789 -0.000964045 -0.000961286 -0.000958511 -0.00095572 -0.000952911 -0.000950085 -0.00094724 -0.000944375 -0.000941488 -0.00093858 -0.000935648 -0.000932691 -0.000929708 -0.000926696 -0.000923654 -0.000920579 -0.000917468 -0.00091432 -0.00091113 -0.000907894 -0.000904609 -0.000901267 -0.000897864 -0.00089439 -0.000890836 -0.000887189 -0.000883433 -0.000879546 -0.0008755 -0.000871255 -0.000866754 -0.000861922 -0.000856648 -0.000850784 -0.000844137 -0.000836466 -0.0008275 -0.000816958 -0.000804575 -0.00079012 -0.000773403 -0.000754276 -0.000732625 -0.000708358 -0.000681406 -0.000651712 -0.000619229 -0.000583916 -0.000545737 -0.00050466 -0.000460655 -0.000413694 -0.00036375 -0.000310796 -0.000254807 -0.000195759 -0.000133625 -6.83823E-05 -5.40225E-09 7.0167E-05 0.000140726 0.000211595 0.000282707 0.000353998 -0.00100755 -0.00100508 -0.00100261 -0.00100014 -0.000997673 -0.000995204 -0.000992735 -0.000990265 -0.000987793 -0.000985319 -0.000982842 -0.000980362 -0.000977878 -0.000975391 -0.000972898 -0.000970401 -0.000967898 -0.000965389 -0.000962873 -0.00096035 -0.00095782 -0.000955282 -0.000952736 -0.00095018 -0.000947616 -0.000945042 -0.000942458 -0.000939863 -0.000937257 -0.000934639 -0.000932009 -0.000929367 -0.000926711 -0.000924042 -0.000921358 -0.00091866 -0.000915945 -0.000913214 -0.000910466 -0.000907699 -0.000904913 -0.000902107 -0.000899279 -0.000896429 -0.000893554 -0.000890653 -0.000887725 -0.000884767 -0.000881777 -0.000878752 -0.00087569 -0.000872587 -0.000869439 -0.00086624 -0.000862987 -0.000859671 -0.000856284 -0.000852815 -0.000849252 -0.000845576 -0.000841764 -0.000837784 -0.000833591 -0.000829124 -0.000824293 -0.000818977 -0.000813008 -0.00080617 -0.000798203 -0.00078882 -0.000777732 -0.000764678 -0.000749434 -0.000731824 -0.000711707 -0.000688978 -0.000663554 -0.000635369 -0.000604369 -0.00057051 -0.000533752 -0.000494061 -0.000451403 -0.00040575 -0.000357073 -0.000305344 -0.000250537 -0.000192625 -0.000131583 -6.73845E-05 -4.65785E-09 6.92369E-05 0.000138945 0.000209037 0.00027944 0.000350086 -0.000967611 -0.000965204 -0.000962802 -0.0009604 -0.000957999 -0.000955598 -0.000953197 -0.000950795 -0.000948393 -0.000945989 -0.000943583 -0.000941174 -0.000938762 -0.000936347 -0.000933927 -0.000931503 -0.000929075 -0.00092664 -0.0009242 -0.000921754 -0.000919301 -0.000916841 -0.000914374 -0.000911898 -0.000909414 -0.000906922 -0.00090442 -0.000901908 -0.000899386 -0.000896854 -0.00089431 -0.000891755 -0.000889188 -0.000886608 -0.000884015 -0.000881408 -0.000878787 -0.000876151 -0.000873498 -0.00087083 -0.000868143 -0.000865438 -0.000862714 -0.000859968 -0.000857201 -0.00085441 -0.000851594 -0.000848751 -0.000845879 -0.000842976 -0.000840039 -0.000837065 -0.00083405 -0.000830991 -0.000827883 -0.000824719 -0.000821492 -0.000818194 -0.000814813 -0.000811335 -0.000807741 -0.000804004 -0.00080009 -0.000795948 -0.000791508 -0.000786672 -0.000781298 -0.0007752 -0.000768139 -0.000759834 -0.000749984 -0.000738299 -0.000724521 -0.000708438 -0.000689884 -0.00066873 -0.000644878 -0.000618252 -0.000588789 -0.000556439 -0.00052116 -0.000482912 -0.000441661 -0.000397376 -0.000350026 -0.000299583 -0.000246019 -0.000189305 -0.000129416 -6.63246E-05 -4.0139E-09 6.82468E-05 0.000137048 0.000206312 0.000275959 0.000345915 -0.0009275 -0.00092516 -0.000922826 -0.000920491 -0.000918158 -0.000915826 -0.000913495 -0.000911163 -0.00090883 -0.000906497 -0.000904162 -0.000901825 -0.000899485 -0.000897143 -0.000894797 -0.000892447 -0.000890093 -0.000887735 -0.000885371 -0.000883002 -0.000880626 -0.000878245 -0.000875856 -0.000873461 -0.000871057 -0.000868646 -0.000866226 -0.000863798 -0.00086136 -0.000858913 -0.000856455 -0.000853987 -0.000851508 -0.000849018 -0.000846515 -0.000844 -0.000841472 -0.00083893 -0.000836373 -0.000833801 -0.000831214 -0.000828609 -0.000825986 -0.000823345 -0.000820684 -0.000818001 -0.000815296 -0.000812566 -0.00080981 -0.000807026 -0.000804212 -0.000801364 -0.00079848 -0.000795557 -0.000792589 -0.000789572 -0.000786499 -0.000783364 -0.000780157 -0.000776866 -0.000773475 -0.000769963 -0.000766302 -0.000762453 -0.00075836 -0.000753942 -0.000749088 -0.00074364 -0.000737386 -0.000730066 -0.000721377 -0.00071101 -0.000698673 -0.000684119 -0.000667146 -0.0006476 -0.000625362 -0.000600342 -0.000572469 -0.000541684 -0.00050794 -0.000471196 -0.000431412 -0.000388557 -0.000342597 -0.000293502 -0.000241244 -0.000185793 -0.000127121 -6.52001E-05 -3.45708E-09 6.71943E-05 0.000135032 0.000203414 0.000272254 0.000341474 -0.000887257 -0.000884985 -0.000882719 -0.000880453 -0.00087819 -0.000875927 -0.000873666 -0.000871404 -0.000869143 -0.000866881 -0.000864617 -0.000862353 -0.000860086 -0.000857817 -0.000855545 -0.00085327 -0.000850992 -0.000848709 -0.000846422 -0.00084413 -0.000841832 -0.000839529 -0.00083722 -0.000834905 -0.000832582 -0.000830253 -0.000827916 -0.000825571 -0.000823217 -0.000820855 -0.000818483 -0.000816102 -0.000813711 -0.00081131 -0.000808898 -0.000806474 -0.000804038 -0.000801589 -0.000799128 -0.000796653 -0.000794163 -0.000791658 -0.000789136 -0.000786598 -0.000784042 -0.000781466 -0.00077887 -0.000776252 -0.00077361 -0.000770943 -0.000768249 -0.000765525 -0.000762768 -0.000759976 -0.000757145 -0.000754271 -0.000751347 -0.000748369 -0.000745327 -0.000742213 -0.000739013 -0.00073571 -0.000732282 -0.000728698 -0.000724913 -0.000720864 -0.000716463 -0.000711579 -0.000706034 -0.000699595 -0.000691974 -0.000682854 -0.000671916 -0.000658874 -0.00064349 -0.000625576 -0.00060499 -0.000581623 -0.00055539 -0.000526227 -0.000494077 -0.000458895 -0.000420641 -0.000379278 -0.000334771 -0.00028709 -0.000236203 -0.000182079 -0.000124691 -6.40085E-05 -2.97579E-09 6.60768E-05 0.00013289 0.000200334 0.000268316 0.000336753 -0.000846922 -0.000844719 -0.000842522 -0.000840327 -0.000838133 -0.000835941 -0.00083375 -0.00083156 -0.00082937 -0.00082718 -0.00082499 -0.000822798 -0.000820605 -0.00081841 -0.000816213 -0.000814013 -0.00081181 -0.000809604 -0.000807394 -0.000805179 -0.00080296 -0.000800736 -0.000798507 -0.000796272 -0.000794031 -0.000791783 -0.000789529 -0.000787267 -0.000784998 -0.000782721 -0.000780435 -0.000778141 -0.000775838 -0.000773526 -0.000771203 -0.00076887 -0.000766527 -0.000764172 -0.000761805 -0.000759425 -0.000757033 -0.000754626 -0.000752205 -0.000749769 -0.000747316 -0.000744846 -0.000742358 -0.00073985 -0.000737321 -0.000734769 -0.000732192 -0.000729589 -0.000726957 -0.000724294 -0.000721596 -0.000718859 -0.00071608 -0.000713252 -0.000710369 -0.000707423 -0.000704403 -0.000701296 -0.000698084 -0.000694741 -0.000691233 -0.000687511 -0.000683503 -0.000679108 -0.00067418 -0.000668516 -0.000661857 -0.000653892 -0.000644287 -0.000632724 -0.000618922 -0.000602657 -0.000583753 -0.00056208 -0.000537538 -0.000510049 -0.000479551 -0.000445994 -0.000409331 -0.000369524 -0.000326537 -0.000280335 -0.000230886 -0.000178159 -0.000122122 -6.2747E-05 -2.55998E-09 6.48917E-05 0.000130618 0.000197066 0.000264136 0.000331739 -0.000806539 -0.000804406 -0.00080228 -0.000800155 -0.000798032 -0.000795912 -0.000793793 -0.000791675 -0.000789557 -0.00078744 -0.000785323 -0.000783205 -0.000781087 -0.000778966 -0.000776845 -0.000774721 -0.000772594 -0.000770465 -0.000768332 -0.000766196 -0.000764055 -0.000761911 -0.000759761 -0.000757607 -0.000755447 -0.000753281 -0.00075111 -0.000748932 -0.000746747 -0.000744555 -0.000742356 -0.000740149 -0.000737933 -0.00073571 -0.000733477 -0.000731235 -0.000728983 -0.000726721 -0.000724448 -0.000722164 -0.000719868 -0.00071756 -0.000715238 -0.000712903 -0.000710553 -0.000708188 -0.000705806 -0.000703406 -0.000700988 -0.000698549 -0.000696088 -0.000693604 -0.000691094 -0.000688556 -0.000685987 -0.000683385 -0.000680745 -0.000678062 -0.000675331 -0.000672546 -0.000669698 -0.000666775 -0.000663763 -0.000660642 -0.000657384 -0.000653953 -0.000650291 -0.00064632 -0.000641921 -0.000636931 -0.00063112 -0.000624203 -0.000615846 -0.000605704 -0.000593459 -0.000578843 -0.000561644 -0.000541702 -0.000518897 -0.000493136 -0.000464348 -0.000432475 -0.000397468 -0.000359282 -0.00031788 -0.000273226 -0.000225284 -0.000174023 -0.00011941 -6.14132E-05 -2.20091E-09 6.36364E-05 0.00012821 0.000193602 0.000259705 0.000326422 -0.000766155 -0.000764094 -0.00076204 -0.000759986 -0.000757936 -0.000755888 -0.000753841 -0.000751796 -0.000749752 -0.000747709 -0.000745666 -0.000743623 -0.000741579 -0.000739534 -0.000737488 -0.000735441 -0.000733391 -0.000731339 -0.000729284 -0.000727227 -0.000725165 -0.0007231 -0.000721031 -0.000718958 -0.00071688 -0.000714797 -0.000712708 -0.000710614 -0.000708514 -0.000706407 -0.000704294 -0.000702174 -0.000700046 -0.000697911 -0.000695768 -0.000693616 -0.000691456 -0.000689286 -0.000687107 -0.000684918 -0.000682718 -0.000680507 -0.000678285 -0.00067605 -0.000673801 -0.000671539 -0.000669262 -0.00066697 -0.000664661 -0.000662333 -0.000659986 -0.000657619 -0.000655228 -0.000652813 -0.00065037 -0.000647898 -0.000645393 -0.000642851 -0.000640267 -0.000637636 -0.00063495 -0.000632201 -0.000629377 -0.000626461 -0.000623433 -0.000620262 -0.000616906 -0.000613303 -0.000609361 -0.000604947 -0.000599874 -0.000593886 -0.000586668 -0.000577867 -0.000567132 -0.00055415 -0.000538666 -0.000520484 -0.000499457 -0.000475475 -0.000448453 -0.000418325 -0.000385036 -0.000348538 -0.00030879 -0.000265752 -0.000219388 -0.000169665 -0.000116548 -6.00042E-05 -1.89097E-09 6.23083E-05 0.000125663 0.000189935 0.000255012 0.000320788 -0.000725824 -0.000723835 -0.000721853 -0.000719873 -0.000717895 -0.000715921 -0.000713948 -0.000711977 -0.000710007 -0.000708038 -0.00070607 -0.000704102 -0.000702134 -0.000700166 -0.000698196 -0.000696226 -0.000694254 -0.00069228 -0.000690303 -0.000688325 -0.000686343 -0.000684358 -0.00068237 -0.000680378 -0.000678382 -0.000676381 -0.000674376 -0.000672366 -0.00067035 -0.000668329 -0.000666302 -0.000664269 -0.000662229 -0.000660182 -0.000658129 -0.000656068 -0.000653999 -0.000651921 -0.000649836 -0.000647741 -0.000645636 -0.000643522 -0.000641398 -0.000639262 -0.000637114 -0.000634955 -0.000632782 -0.000630595 -0.000628393 -0.000626175 -0.000623941 -0.000621687 -0.000619414 -0.000617119 -0.0006148 -0.000612454 -0.00061008 -0.000607674 -0.000605232 -0.000602749 -0.000600219 -0.000597634 -0.000594986 -0.000592262 -0.000589444 -0.00058651 -0.000583426 -0.000580145 -0.000576597 -0.000572677 -0.000568234 -0.000563055 -0.000556854 -0.000549289 -0.000539991 -0.000528605 -0.00051483 -0.000498426 -0.000479212 -0.000457055 -0.000431853 -0.00040353 -0.000372023 -0.000337279 -0.000299252 -0.000257902 -0.000213189 -0.000165077 -0.000113531 -5.85175E-05 -1.62358E-09 6.09046E-05 0.00012297 0.000186058 0.000250048 0.000314828 -0.000685601 -0.000683685 -0.000681778 -0.000679871 -0.000677968 -0.000676067 -0.000674169 -0.000672273 -0.000670378 -0.000668485 -0.000666593 -0.000664701 -0.000662809 -0.000660918 -0.000659026 -0.000657133 -0.000655239 -0.000653343 -0.000651446 -0.000649547 -0.000647646 -0.000645741 -0.000643834 -0.000641924 -0.00064001 -0.000638093 -0.000636171 -0.000634245 -0.000632314 -0.000630378 -0.000628438 -0.000626491 -0.000624539 -0.000622581 -0.000620617 -0.000618646 -0.000616668 -0.000614683 -0.00061269 -0.000610689 -0.00060868 -0.000606662 -0.000604634 -0.000602597 -0.00060055 -0.000598491 -0.000596421 -0.000594339 -0.000592244 -0.000590134 -0.000588009 -0.000585868 -0.00058371 -0.000581532 -0.000579334 -0.000577112 -0.000574866 -0.000572591 -0.000570286 -0.000567945 -0.000565564 -0.000563137 -0.000560656 -0.000558111 -0.000555488 -0.00055277 -0.000549931 -0.000546935 -0.000543727 -0.000540229 -0.000536322 -0.000531833 -0.00052652 -0.000520067 -0.000512106 -0.000502253 -0.00049016 -0.000475537 -0.000458162 -0.00043787 -0.00041454 -0.00038808 -0.000358417 -0.000325493 -0.000289258 -0.000249666 -0.000206678 -0.000160253 -0.000110356 -5.69504E-05 -1.39302E-09 5.94227E-05 0.000120126 0.000181962 0.000244803 0.000308528 -0.000645548 -0.000643707 -0.000641874 -0.000640043 -0.000638215 -0.00063639 -0.000634567 -0.000632747 -0.000630928 -0.000629111 -0.000627295 -0.00062548 -0.000623666 -0.000621852 -0.000620038 -0.000618224 -0.000616408 -0.000614592 -0.000612775 -0.000610956 -0.000609135 -0.000607312 -0.000605486 -0.000603658 -0.000601827 -0.000599992 -0.000598154 -0.000596313 -0.000594467 -0.000592617 -0.000590763 -0.000588903 -0.000587039 -0.00058517 -0.000583294 -0.000581413 -0.000579526 -0.000577633 -0.000575733 -0.000573825 -0.000571911 -0.000569988 -0.000568058 -0.000566118 -0.00056417 -0.000562212 -0.000560244 -0.000558265 -0.000556274 -0.000554271 -0.000552255 -0.000550225 -0.000548179 -0.000546116 -0.000544036 -0.000541935 -0.000539813 -0.000537667 -0.000535493 -0.00053329 -0.000531052 -0.000528775 -0.000526452 -0.000524076 -0.000521636 -0.000519117 -0.0005165 -0.000513757 -0.000510848 -0.000507712 -0.000504259 -0.000500354 -0.000495799 -0.000490321 -0.000483573 -0.000475161 -0.000464696 -0.000451838 -0.000436314 -0.000417921 -0.000396508 -0.000371965 -0.000344209 -0.000313171 -0.000278796 -0.000241036 -0.000199846 -0.000155186 -0.000107016 -5.53004E-05 -1.19432E-09 5.786E-05 0.000117126 0.000177641 0.000239267 0.000301876 -0.000605731 -0.000603966 -0.00060221 -0.000600454 -0.000598703 -0.000596954 -0.000595208 -0.000593464 -0.000591723 -0.000589983 -0.000588245 -0.000586508 -0.000584772 -0.000583036 -0.000581301 -0.000579565 -0.000577829 -0.000576093 -0.000574356 -0.000572617 -0.000570878 -0.000569136 -0.000567393 -0.000565647 -0.000563899 -0.000562148 -0.000560394 -0.000558637 -0.000556876 -0.000555112 -0.000553344 -0.000551572 -0.000549796 -0.000548015 -0.000546229 -0.000544438 -0.000542641 -0.000540839 -0.000539031 -0.000537217 -0.000535397 -0.000533569 -0.000531735 -0.000529893 -0.000528042 -0.000526184 -0.000524317 -0.00052244 -0.000520553 -0.000518655 -0.000516746 -0.000514824 -0.000512889 -0.00051094 -0.000508975 -0.000506992 -0.000504991 -0.00050297 -0.000500925 -0.000498854 -0.000496754 -0.00049462 -0.000492449 -0.000490232 -0.000487962 -0.000485628 -0.000483214 -0.0004807 -0.000478054 -0.000475231 -0.000472164 -0.00046875 -0.000464834 -0.000460191 -0.000454513 -0.00044742 -0.000438501 -0.000427367 -0.000413688 -0.000397213 -0.000377756 -0.000355182 -0.000329391 -0.000300304 -0.000267859 -0.000232002 -0.000192687 -0.000149869 -0.000103508 -5.35651E-05 -1.02316E-09 5.62138E-05 0.000113965 0.000173086 0.00023343 0.000294861 -0.000566224 -0.000564536 -0.000562857 -0.000561179 -0.000559504 -0.000557833 -0.000556165 -0.000554499 -0.000552836 -0.000551174 -0.000549514 -0.000547856 -0.000546198 -0.000544542 -0.000542886 -0.00054123 -0.000539575 -0.000537919 -0.000536262 -0.000534605 -0.000532947 -0.000531287 -0.000529626 -0.000527963 -0.000526299 -0.000524632 -0.000522962 -0.00052129 -0.000519615 -0.000517937 -0.000516256 -0.000514571 -0.000512882 -0.000511189 -0.000509492 -0.000507791 -0.000506085 -0.000504374 -0.000502658 -0.000500937 -0.00049921 -0.000497478 -0.000495738 -0.000493993 -0.00049224 -0.000490481 -0.000488713 -0.000486937 -0.000485153 -0.000483359 -0.000481555 -0.000479741 -0.000477915 -0.000476076 -0.000474224 -0.000472358 -0.000470475 -0.000468574 -0.000466654 -0.000464711 -0.000462744 -0.000460749 -0.000458721 -0.000456657 -0.000454548 -0.000452386 -0.000450159 -0.000447852 -0.000445441 -0.000442892 -0.000440156 -0.000437155 -0.000433772 -0.00042983 -0.000425071 -0.000419152 -0.000411664 -0.00040218 -0.000390318 -0.000375766 -0.000358293 -0.000337731 -0.00031396 -0.000286886 -0.000256439 -0.000222559 -0.000185194 -0.000144298 -9.98278E-05 -5.1742E-05 -8.75826E-10 5.44817E-05 0.000110638 0.000168291 0.000227283 0.000287471 -0.000527105 -0.000525496 -0.000523895 -0.000522295 -0.000520699 -0.000519107 -0.000517517 -0.00051593 -0.000514345 -0.000512763 -0.000511182 -0.000509603 -0.000508026 -0.000506449 -0.000504873 -0.000503298 -0.000501723 -0.000500148 -0.000498573 -0.000496998 -0.000495422 -0.000493845 -0.000492266 -0.000490687 -0.000489106 -0.000487523 -0.000485938 -0.000484351 -0.000482762 -0.00048117 -0.000479575 -0.000477977 -0.000476377 -0.000474772 -0.000473164 -0.000471553 -0.000469937 -0.000468318 -0.000466693 -0.000465065 -0.000463431 -0.000461792 -0.000460148 -0.000458499 -0.000456843 -0.000455181 -0.000453512 -0.000451837 -0.000450153 -0.000448462 -0.000446762 -0.000445053 -0.000443335 -0.000441605 -0.000439864 -0.000438111 -0.000436343 -0.000434561 -0.000432761 -0.000430944 -0.000429105 -0.000427243 -0.000425353 -0.000423433 -0.000421476 -0.000419476 -0.000417423 -0.000415306 -0.000413107 -0.0004108 -0.000408349 -0.000405697 -0.000402758 -0.000399397 -0.00039541 -0.000390505 -0.000384301 -0.000376362 -0.000366255 -0.000353608 -0.000338133 -0.00031962 -0.000297917 -0.000272916 -0.000244533 -0.0002127 -0.000177362 -0.000138467 -9.59709E-05 -4.98293E-05 -7.49067E-10 5.26614E-05 0.00010714 0.000163248 0.000220817 0.000279694 -0.000488461 -0.000486931 -0.000485409 -0.000483889 -0.000482373 -0.00048086 -0.00047935 -0.000477843 -0.000476338 -0.000474836 -0.000473335 -0.000471836 -0.000470339 -0.000468843 -0.000467348 -0.000465854 -0.000464361 -0.000462868 -0.000461375 -0.000459881 -0.000458388 -0.000456894 -0.000455399 -0.000453903 -0.000452406 -0.000450908 -0.000449408 -0.000447906 -0.000446403 -0.000444897 -0.000443389 -0.000441879 -0.000440366 -0.00043885 -0.000437331 -0.000435809 -0.000434284 -0.000432755 -0.000431222 -0.000429685 -0.000428145 -0.000426599 -0.00042505 -0.000423495 -0.000421936 -0.000420371 -0.0004188 -0.000417224 -0.000415641 -0.000414051 -0.000412454 -0.000410849 -0.000409235 -0.000407613 -0.000405981 -0.000404338 -0.000402684 -0.000401016 -0.000399335 -0.000397638 -0.000395924 -0.00039419 -0.000392433 -0.000390651 -0.000388838 -0.000386991 -0.0003851 -0.000383158 -0.000381151 -0.000379061 -0.000376859 -0.000374506 -0.000371938 -0.000369056 -0.000365705 -0.000361652 -0.000356565 -0.000350028 -0.00034158 -0.000330791 -0.000317307 -0.000300864 -0.000281272 -0.000258397 -0.00023214 -0.000202425 -0.000169187 -0.000132374 -9.1935E-05 -4.78252E-05 -6.40079E-10 5.07507E-05 0.000103468 0.000157951 0.000214022 0.000271519 -0.000450385 -0.000448936 -0.000447495 -0.000446056 -0.00044462 -0.000443188 -0.000441758 -0.000440332 -0.000438908 -0.000437486 -0.000436067 -0.000434649 -0.000433233 -0.000431819 -0.000430405 -0.000428993 -0.000427582 -0.000426171 -0.00042476 -0.00042335 -0.000421939 -0.000420529 -0.000419118 -0.000417706 -0.000416293 -0.00041488 -0.000413465 -0.000412049 -0.000410631 -0.000409212 -0.000407791 -0.000406368 -0.000404943 -0.000403515 -0.000402085 -0.000400653 -0.000399217 -0.000397779 -0.000396337 -0.000394893 -0.000393444 -0.000391992 -0.000390536 -0.000389077 -0.000387612 -0.000386144 -0.00038467 -0.000383192 -0.000381708 -0.000380218 -0.000378722 -0.00037722 -0.00037571 -0.000374193 -0.000372668 -0.000371134 -0.00036959 -0.000368035 -0.000366469 -0.000364889 -0.000363295 -0.000361685 -0.000360056 -0.000358406 -0.000356731 -0.000355028 -0.00035329 -0.000351511 -0.000349681 -0.000347785 -0.000345804 -0.000343709 -0.000341453 -0.000338966 -0.000336134 -0.00033278 -0.000328635 -0.000323328 -0.000316404 -0.000307389 -0.000295862 -0.000281492 -0.00026404 -0.000243338 -0.000219266 -0.000191733 -0.00016067 -0.000126016 -8.77183E-05 -4.57284E-05 -5.46432E-10 4.87479E-05 9.96165E-05 0.000152394 0.000206891 0.000262936 -0.000412982 -0.000411615 -0.000410255 -0.000408898 -0.000407544 -0.000406193 -0.000404845 -0.0004035 -0.000402158 -0.000400818 -0.00039948 -0.000398144 -0.00039681 -0.000395478 -0.000394147 -0.000392817 -0.000391488 -0.00039016 -0.000388832 -0.000387505 -0.000386178 -0.000384851 -0.000383524 -0.000382197 -0.000380869 -0.000379541 -0.000378211 -0.000376881 -0.00037555 -0.000374217 -0.000372883 -0.000371547 -0.00037021 -0.000368871 -0.000367529 -0.000366186 -0.00036484 -0.000363492 -0.000362141 -0.000360788 -0.000359431 -0.000358072 -0.00035671 -0.000355344 -0.000353974 -0.000352601 -0.000351224 -0.000349842 -0.000348456 -0.000347066 -0.00034567 -0.000344268 -0.000342861 -0.000341448 -0.000340027 -0.0003386 -0.000337164 -0.000335719 -0.000334265 -0.000332799 -0.000331322 -0.000329831 -0.000328326 -0.000326802 -0.000325259 -0.000323693 -0.000322099 -0.000320472 -0.000318805 -0.000317087 -0.000315304 -0.000313434 -0.000311445 -0.000309286 -0.000306877 -0.000304088 -0.000300714 -0.000296448 -0.000290875 -0.000283508 -0.000273868 -0.000261549 -0.00024625 -0.000227756 -0.00020592 -0.000180632 -0.000151813 -0.000119395 -8.33202E-05 -4.35382E-05 -4.66022E-10 4.66515E-05 9.55832E-05 0.000146571 0.000199415 0.000253935 -0.000376363 -0.000375079 -0.000373802 -0.000372527 -0.000371256 -0.000369987 -0.000368722 -0.000367459 -0.0003662 -0.000364942 -0.000363687 -0.000362434 -0.000361182 -0.000359933 -0.000358685 -0.000357438 -0.000356192 -0.000354947 -0.000353703 -0.00035246 -0.000351217 -0.000349974 -0.000348731 -0.000347489 -0.000346246 -0.000345002 -0.000343759 -0.000342514 -0.000341269 -0.000340023 -0.000338776 -0.000337527 -0.000336277 -0.000335026 -0.000333774 -0.000332519 -0.000331263 -0.000330005 -0.000328744 -0.000327482 -0.000326217 -0.00032495 -0.00032368 -0.000322407 -0.000321132 -0.000319853 -0.000318571 -0.000317286 -0.000315997 -0.000314704 -0.000313406 -0.000312105 -0.000310798 -0.000309486 -0.000308169 -0.000306846 -0.000305516 -0.000304178 -0.000302833 -0.000301479 -0.000300115 -0.000298741 -0.000297353 -0.000295952 -0.000294535 -0.000293099 -0.000291641 -0.000290158 -0.000288642 -0.000287087 -0.000285482 -0.000283812 -0.000282053 -0.00028017 -0.000278108 -0.000275773 -0.000273018 -0.000269604 -0.000265183 -0.000259295 -0.000251427 -0.000241104 -0.000227947 -0.000211682 -0.000192121 -0.000169134 -0.000142623 -0.000112513 -7.87423E-05 -4.1255E-05 -3.97027E-10 4.44609E-05 9.13656E-05 0.000140479 0.000191589 0.000244508 -0.000340654 -0.000339454 -0.00033826 -0.000337069 -0.000335881 -0.000334696 -0.000333513 -0.000332334 -0.000331157 -0.000329983 -0.000328811 -0.000327641 -0.000326473 -0.000325306 -0.000324142 -0.000322978 -0.000321816 -0.000320655 -0.000319495 -0.000318335 -0.000317176 -0.000316018 -0.00031486 -0.000313702 -0.000312544 -0.000311386 -0.000310228 -0.00030907 -0.000307911 -0.000306751 -0.000305591 -0.000304429 -0.000303267 -0.000302104 -0.00030094 -0.000299774 -0.000298607 -0.000297438 -0.000296268 -0.000295096 -0.000293922 -0.000292746 -0.000291568 -0.000290388 -0.000289205 -0.00028802 -0.000286833 -0.000285642 -0.000284449 -0.000283252 -0.000282052 -0.000280849 -0.000279641 -0.00027843 -0.000277213 -0.000275992 -0.000274766 -0.000273534 -0.000272295 -0.000271049 -0.000269795 -0.000268533 -0.00026726 -0.000265977 -0.00026468 -0.000263369 -0.000262041 -0.000260691 -0.000259318 -0.000257913 -0.000256471 -0.000254979 -0.000253422 -0.000251775 -0.000249999 -0.00024803 -0.000245765 -0.000243031 -0.000239556 -0.00023494 -0.000228682 -0.000220255 -0.000209197 -0.000195159 -0.000177901 -0.000157258 -0.000133113 -0.00010538 -7.39886E-05 -3.88802E-05 -3.37871E-10 4.21761E-05 8.69628E-05 0.000134114 0.000183409 0.000234647 -0.000305991 -0.000304875 -0.000303766 -0.000302659 -0.000301554 -0.000300453 -0.000299355 -0.000298259 -0.000297166 -0.000296076 -0.000294987 -0.000293901 -0.000292816 -0.000291734 -0.000290652 -0.000289573 -0.000288495 -0.000287417 -0.000286341 -0.000285266 -0.000284192 -0.000283118 -0.000282045 -0.000280972 -0.000279899 -0.000278826 -0.000277754 -0.000276681 -0.000275608 -0.000274535 -0.000273461 -0.000272387 -0.000271312 -0.000270236 -0.000269159 -0.000268082 -0.000267003 -0.000265924 -0.000264843 -0.00026376 -0.000262677 -0.000261591 -0.000260505 -0.000259416 -0.000258326 -0.000257233 -0.000256139 -0.000255043 -0.000253944 -0.000252842 -0.000251738 -0.000250631 -0.000249521 -0.000248408 -0.000247291 -0.00024617 -0.000245045 -0.000243915 -0.00024278 -0.00024164 -0.000240493 -0.000239339 -0.000238178 -0.000237007 -0.000235827 -0.000234634 -0.000233429 -0.000232207 -0.000230966 -0.000229702 -0.000228409 -0.000227079 -0.000225701 -0.000224257 -0.000222721 -0.00022105 -0.000219174 -0.000216972 -0.000214246 -0.000210679 -0.000205824 -0.00019914 -0.000190095 -0.000178254 -0.000163305 -0.000145036 -0.000123304 -9.80074E-05 -6.90666E-05 -3.64167E-05 -2.8719E-10 3.97982E-05 8.23754E-05 0.000127476 0.00017487 0.000224348 -0.000272523 -0.000271492 -0.000270468 -0.000269445 -0.000268426 -0.000267409 -0.000266395 -0.000265383 -0.000264374 -0.000263368 -0.000262363 -0.000261361 -0.00026036 -0.000259362 -0.000258364 -0.000257369 -0.000256375 -0.000255382 -0.00025439 -0.000253399 -0.000252409 -0.000251419 -0.000250431 -0.000249443 -0.000248455 -0.000247467 -0.00024648 -0.000245493 -0.000244506 -0.000243518 -0.000242531 -0.000241543 -0.000240555 -0.000239566 -0.000238577 -0.000237587 -0.000236596 -0.000235605 -0.000234613 -0.000233619 -0.000232625 -0.00023163 -0.000230633 -0.000229635 -0.000228636 -0.000227635 -0.000226633 -0.000225629 -0.000224623 -0.000223615 -0.000222605 -0.000221593 -0.000220579 -0.000219562 -0.000218542 -0.000217519 -0.000216493 -0.000215464 -0.00021443 -0.000213392 -0.000212349 -0.0002113 -0.000210246 -0.000209185 -0.000208115 -0.000207037 -0.000205948 -0.000204847 -0.000203732 -0.000202598 -0.000201443 -0.000200261 -0.000199043 -0.000197777 -0.000196446 -0.000195021 -0.000193455 -0.000191667 -0.000189521 -0.000186784 -0.000183093 -0.000177947 -0.000170777 -0.00016106 -0.000148398 -0.000132515 -0.000113229 -9.04175E-05 -6.39885E-05 -3.38699E-05 -2.43806E-10 3.73301E-05 7.76066E-05 0.000120568 0.000165974 0.00021361 -0.000240414 -0.000239469 -0.00023853 -0.000237592 -0.000236657 -0.000235725 -0.000234795 -0.000233868 -0.000232943 -0.000232021 -0.000231101 -0.000230182 -0.000229266 -0.000228351 -0.000227437 -0.000226526 -0.000225615 -0.000224706 -0.000223799 -0.000222892 -0.000221986 -0.000221081 -0.000220176 -0.000219273 -0.00021837 -0.000217467 -0.000216564 -0.000215662 -0.00021476 -0.000213858 -0.000212957 -0.000212055 -0.000211153 -0.00021025 -0.000209348 -0.000208445 -0.000207541 -0.000206637 -0.000205732 -0.000204827 -0.000203921 -0.000203015 -0.000202107 -0.000201198 -0.000200289 -0.000199378 -0.000198467 -0.000197554 -0.000196639 -0.000195724 -0.000194806 -0.000193888 -0.000192967 -0.000192044 -0.00019112 -0.000190193 -0.000189263 -0.000188331 -0.000187395 -0.000186457 -0.000185515 -0.000184568 -0.000183617 -0.000182661 -0.000181698 -0.000180729 -0.000179752 -0.000178765 -0.000177768 -0.000176757 -0.00017573 -0.000174683 -0.000173609 -0.000172502 -0.000171349 -0.00017013 -0.000168814 -0.00016735 -0.000165647 -0.000163545 -0.000160776 -0.000156919 -0.000151425 -0.000143709 -0.000133272 -0.000119759 -0.000102933 -8.26403E-05 -5.87722E-05 -3.12479E-05 -2.067E-10 3.47765E-05 7.26624E-05 0.000113393 0.000156725 0.000202432 -0.000209841 -0.000208981 -0.000208127 -0.000207274 -0.000206424 -0.000205576 -0.000204731 -0.000203888 -0.000203047 -0.000202209 -0.000201372 -0.000200537 -0.000199705 -0.000198873 -0.000198044 -0.000197216 -0.000196389 -0.000195563 -0.000194739 -0.000193916 -0.000193093 -0.000192272 -0.000191451 -0.000190632 -0.000189812 -0.000188994 -0.000188176 -0.000187358 -0.00018654 -0.000185723 -0.000184906 -0.000184089 -0.000183272 -0.000182455 -0.000181638 -0.00018082 -0.000180003 -0.000179185 -0.000178367 -0.000177549 -0.00017673 -0.00017591 -0.00017509 -0.00017427 -0.000173448 -0.000172626 -0.000171804 -0.00017098 -0.000170155 -0.00016933 -0.000168503 -0.000167675 -0.000166846 -0.000166016 -0.000165184 -0.00016435 -0.000163514 -0.000162677 -0.000161837 -0.000160995 -0.00016015 -0.000159302 -0.00015845 -0.000157595 -0.000156735 -0.00015587 -0.000154999 -0.000154121 -0.000153235 -0.000152339 -0.000151431 -0.000150509 -0.000149567 -0.000148602 -0.000147604 -0.00014656 -0.000145452 -0.000144244 -0.00014288 -0.000141255 -0.000139184 -0.000136352 -0.000132281 -0.000126377 -0.000118056 -0.00010686 -9.24806E-05 -7.47189E-05 -5.3444E-05 -2.85623E-05 -1.74993E-10 3.21449E-05 6.75532E-05 0.000105964 0.000147131 0.000190824 -0.000180991 -0.000180216 -0.000179446 -0.000178678 -0.000177912 -0.000177148 -0.000176387 -0.000175627 -0.00017487 -0.000174115 -0.000173361 -0.00017261 -0.00017186 -0.000171112 -0.000170365 -0.000169619 -0.000168875 -0.000168133 -0.000167391 -0.00016665 -0.000165911 -0.000165172 -0.000164435 -0.000163698 -0.000162961 -0.000162226 -0.00016149 -0.000160756 -0.000160022 -0.000159288 -0.000158554 -0.000157821 -0.000157088 -0.000156354 -0.000155622 -0.000154889 -0.000154156 -0.000153422 -0.000152689 -0.000151956 -0.000151222 -0.000150488 -0.000149754 -0.00014902 -0.000148285 -0.00014755 -0.000146814 -0.000146077 -0.00014534 -0.000144603 -0.000143864 -0.000143125 -0.000142385 -0.000141644 -0.000140902 -0.000140159 -0.000139415 -0.000138669 -0.000137921 -0.000137172 -0.000136421 -0.000135668 -0.000134912 -0.000134153 -0.000133391 -0.000132625 -0.000131855 -0.00013108 -0.000130299 -0.000129511 -0.000128715 -0.000127907 -0.000127087 -0.000126249 -0.000125388 -0.000124497 -0.000123562 -0.000122561 -0.000121458 -0.000120189 -0.000118634 -0.000116575 -0.000113643 -0.0001093 -0.000102919 -9.39398E-05 -8.19573E-05 -6.67119E-05 -4.80396E-05 -2.58297E-05 -1.47924E-10 2.94463E-05 6.22947E-05 9.82959E-05 0.000137207 0.000178796 -0.000154058 -0.000153367 -0.000152681 -0.000151996 -0.000151313 -0.000150632 -0.000149953 -0.000149276 -0.000148602 -0.000147928 -0.000147257 -0.000146587 -0.000145919 -0.000145253 -0.000144587 -0.000143924 -0.000143261 -0.0001426 -0.000141939 -0.00014128 -0.000140622 -0.000139965 -0.000139308 -0.000138652 -0.000137998 -0.000137343 -0.00013669 -0.000136037 -0.000135384 -0.000134732 -0.00013408 -0.000133429 -0.000132777 -0.000132126 -0.000131476 -0.000130825 -0.000130175 -0.000129524 -0.000128874 -0.000128224 -0.000127573 -0.000126923 -0.000126272 -0.000125622 -0.000124971 -0.00012432 -0.000123668 -0.000123017 -0.000122365 -0.000121712 -0.000121059 -0.000120406 -0.000119752 -0.000119098 -0.000118443 -0.000117787 -0.000117131 -0.000116473 -0.000115814 -0.000115155 -0.000114493 -0.000113831 -0.000113166 -0.0001125 -0.000111831 -0.00011116 -0.000110486 -0.000109808 -0.000109126 -0.000108439 -0.000107746 -0.000107045 -0.000106335 -0.000105613 -0.000104876 -0.000104117 -0.000103329 -0.000102498 -0.000101602 -0.000100601 -9.94203E-05 -9.7922E-05 -9.5849E-05 -9.27694E-05 -8.80845E-05 -8.11588E-05 -7.14774E-05 -5.86973E-05 -4.2607E-05 -2.30725E-05 -1.2484E-10 2.66965E-05 5.691E-05 9.04143E-05 0.000126978 0.000166371 -0.000129235 -0.000128626 -0.000128021 -0.000127418 -0.000126816 -0.000126216 -0.000125619 -0.000125022 -0.000124428 -0.000123835 -0.000123244 -0.000122655 -0.000122066 -0.00012148 -0.000120894 -0.00012031 -0.000119727 -0.000119145 -0.000118564 -0.000117984 -0.000117405 -0.000116827 -0.00011625 -0.000115674 -0.000115098 -0.000114523 -0.000113949 -0.000113375 -0.000112802 -0.000112229 -0.000111657 -0.000111085 -0.000110513 -0.000109942 -0.000109371 -0.0001088 -0.00010823 -0.00010766 -0.00010709 -0.00010652 -0.00010595 -0.00010538 -0.00010481 -0.00010424 -0.000103671 -0.000103101 -0.000102531 -0.000101961 -0.000101391 -0.000100821 -0.00010025 -9.96796E-05 -9.91087E-05 -9.85375E-05 -9.79658E-05 -9.73938E-05 -9.68213E-05 -9.62482E-05 -9.56745E-05 -9.51E-05 -9.45247E-05 -9.39484E-05 -9.3371E-05 -9.27923E-05 -9.22121E-05 -9.16301E-05 -9.1046E-05 -9.04595E-05 -8.98702E-05 -8.92773E-05 -8.86803E-05 -8.80781E-05 -8.74695E-05 -8.68527E-05 -8.62254E-05 -8.55839E-05 -8.4923E-05 -8.42343E-05 -8.35038E-05 -8.27076E-05 -8.18014E-05 -8.0701E-05 -7.92423E-05 -7.71183E-05 -7.38268E-05 -6.87215E-05 -6.11867E-05 -5.07748E-05 -3.72083E-05 -2.03198E-05 -1.05173E-10 2.39164E-05 5.1431E-05 8.23551E-05 0.000116478 0.000153582 -0.000106697 -0.000106168 -0.000105643 -0.000105118 -0.000104595 -0.000104074 -0.000103555 -0.000103037 -0.00010252 -0.000102006 -0.000101492 -0.00010098 -0.000100469 -9.99595E-05 -9.94511E-05 -9.89438E-05 -9.84376E-05 -9.79324E-05 -9.74283E-05 -9.6925E-05 -9.64227E-05 -9.59212E-05 -9.54205E-05 -9.49205E-05 -9.44213E-05 -9.39227E-05 -9.34247E-05 -9.29274E-05 -9.24305E-05 -9.19342E-05 -9.14384E-05 -9.0943E-05 -9.0448E-05 -8.99534E-05 -8.94591E-05 -8.89652E-05 -8.84715E-05 -8.79781E-05 -8.7485E-05 -8.69921E-05 -8.64993E-05 -8.60068E-05 -8.55144E-05 -8.50221E-05 -8.45299E-05 -8.40379E-05 -8.35459E-05 -8.30539E-05 -8.2562E-05 -8.20701E-05 -8.15781E-05 -8.10862E-05 -8.05941E-05 -8.01019E-05 -7.96096E-05 -7.91171E-05 -7.86244E-05 -7.81314E-05 -7.76381E-05 -7.71444E-05 -7.66502E-05 -7.61554E-05 -7.56599E-05 -7.51637E-05 -7.46665E-05 -7.41682E-05 -7.36685E-05 -7.31673E-05 -7.26641E-05 -7.21587E-05 -7.16505E-05 -7.11388E-05 -7.06228E-05 -7.01014E-05 -6.9573E-05 -6.90352E-05 -6.84847E-05 -6.79163E-05 -6.73215E-05 -6.66859E-05 -6.59835E-05 -6.51648E-05 -6.41315E-05 -6.26861E-05 -6.04591E-05 -5.68745E-05 -5.1264E-05 -4.30676E-05 -3.19203E-05 -1.76078E-05 -8.84375E-11 2.1134E-05 4.59011E-05 7.4168E-05 0.00010576 0.000140476 -8.65908E-05 -8.61379E-05 -8.56883E-05 -8.52394E-05 -8.47919E-05 -8.4346E-05 -8.39015E-05 -8.34583E-05 -8.30165E-05 -8.25759E-05 -8.21366E-05 -8.16984E-05 -8.12614E-05 -8.08256E-05 -8.03907E-05 -7.99569E-05 -7.9524E-05 -7.90921E-05 -7.86611E-05 -7.82309E-05 -7.78015E-05 -7.73729E-05 -7.69451E-05 -7.65179E-05 -7.60914E-05 -7.56656E-05 -7.52403E-05 -7.48156E-05 -7.43914E-05 -7.39678E-05 -7.35446E-05 -7.31219E-05 -7.26996E-05 -7.22777E-05 -7.18561E-05 -7.14349E-05 -7.10141E-05 -7.05936E-05 -7.01733E-05 -6.97533E-05 -6.93336E-05 -6.89141E-05 -6.84949E-05 -6.80758E-05 -6.7657E-05 -6.72383E-05 -6.68198E-05 -6.64014E-05 -6.59832E-05 -6.55651E-05 -6.51471E-05 -6.47291E-05 -6.43113E-05 -6.38934E-05 -6.34756E-05 -6.30578E-05 -6.26399E-05 -6.2222E-05 -6.1804E-05 -6.13857E-05 -6.09673E-05 -6.05486E-05 -6.01296E-05 -5.97101E-05 -5.92901E-05 -5.88694E-05 -5.8448E-05 -5.80255E-05 -5.76019E-05 -5.71768E-05 -5.675E-05 -5.63209E-05 -5.58891E-05 -5.54537E-05 -5.50137E-05 -5.45677E-05 -5.41135E-05 -5.36479E-05 -5.31657E-05 -5.26584E-05 -5.21108E-05 -5.14944E-05 -5.07526E-05 -4.97673E-05 -4.82962E-05 -4.58927E-05 -4.19167E-05 -3.57202E-05 -2.68338E-05 -1.498E-05 -7.42128E-11 1.83843E-05 4.0377E-05 6.59198E-05 9.48905E-05 0.000127122 -6.90088E-05 -6.86277E-05 -6.82493E-05 -6.78715E-05 -6.7495E-05 -6.71198E-05 -6.67457E-05 -6.63728E-05 -6.60011E-05 -6.56305E-05 -6.52609E-05 -6.48923E-05 -6.45248E-05 -6.41581E-05 -6.37924E-05 -6.34276E-05 -6.30637E-05 -6.27005E-05 -6.23382E-05 -6.19766E-05 -6.16157E-05 -6.12555E-05 -6.08959E-05 -6.0537E-05 -6.01788E-05 -5.9821E-05 -5.94639E-05 -5.91072E-05 -5.87511E-05 -5.83955E-05 -5.80403E-05 -5.76855E-05 -5.73312E-05 -5.69772E-05 -5.66236E-05 -5.62704E-05 -5.59176E-05 -5.5565E-05 -5.52128E-05 -5.48608E-05 -5.45092E-05 -5.41578E-05 -5.38067E-05 -5.34558E-05 -5.31052E-05 -5.27548E-05 -5.24046E-05 -5.20547E-05 -5.17049E-05 -5.13553E-05 -5.10059E-05 -5.06566E-05 -5.03075E-05 -4.99586E-05 -4.96097E-05 -4.9261E-05 -4.89123E-05 -4.85637E-05 -4.82152E-05 -4.78666E-05 -4.7518E-05 -4.71693E-05 -4.68205E-05 -4.64716E-05 -4.61224E-05 -4.57728E-05 -4.54229E-05 -4.50724E-05 -4.47212E-05 -4.43691E-05 -4.4016E-05 -4.36615E-05 -4.33053E-05 -4.29468E-05 -4.25855E-05 -4.22203E-05 -4.18499E-05 -4.14724E-05 -4.10847E-05 -4.06815E-05 -4.02541E-05 -3.97863E-05 -3.9246E-05 -3.85661E-05 -3.76006E-05 -3.60446E-05 -3.33651E-05 -2.88906E-05 -2.20495E-05 -1.24848E-05 -6.21371E-11 1.57095E-05 3.49301E-05 5.7698E-05 8.39646E-05 0.000113612 -5.39721E-05 -5.36572E-05 -5.33447E-05 -5.30326E-05 -5.27216E-05 -5.24116E-05 -5.21027E-05 -5.17947E-05 -5.14876E-05 -5.11815E-05 -5.08763E-05 -5.0572E-05 -5.02684E-05 -4.99657E-05 -4.96638E-05 -4.93626E-05 -4.90621E-05 -4.87624E-05 -4.84633E-05 -4.81649E-05 -4.78671E-05 -4.75699E-05 -4.72732E-05 -4.69772E-05 -4.66816E-05 -4.63866E-05 -4.60921E-05 -4.57981E-05 -4.55045E-05 -4.52113E-05 -4.49186E-05 -4.46262E-05 -4.43343E-05 -4.40427E-05 -4.37515E-05 -4.34606E-05 -4.31701E-05 -4.28799E-05 -4.259E-05 -4.23003E-05 -4.2011E-05 -4.1722E-05 -4.14332E-05 -4.11447E-05 -4.08564E-05 -4.05684E-05 -4.02807E-05 -3.99931E-05 -3.97058E-05 -3.94188E-05 -3.91319E-05 -3.88452E-05 -3.85588E-05 -3.82725E-05 -3.79864E-05 -3.77004E-05 -3.74147E-05 -3.7129E-05 -3.68435E-05 -3.65581E-05 -3.62727E-05 -3.59875E-05 -3.57022E-05 -3.54169E-05 -3.51316E-05 -3.48461E-05 -3.45605E-05 -3.42746E-05 -3.39884E-05 -3.37017E-05 -3.34145E-05 -3.31264E-05 -3.28373E-05 -3.25468E-05 -3.22546E-05 -3.196E-05 -3.16622E-05 -3.136E-05 -3.10515E-05 -3.07336E-05 -3.04013E-05 -3.00452E-05 -2.96474E-05 -2.91705E-05 -2.85314E-05 -2.75416E-05 -2.5813E-05 -2.27349E-05 -1.76695E-05 -1.01726E-05 -5.18994E-11 1.31575E-05 2.96467E-05 4.9613E-05 7.31038E-05 0.000100071 -4.14163E-05 -4.11613E-05 -4.09081E-05 -4.06554E-05 -4.04036E-05 -4.01526E-05 -3.99024E-05 -3.9653E-05 -3.94044E-05 -3.91566E-05 -3.89095E-05 -3.86631E-05 -3.84174E-05 -3.81723E-05 -3.79279E-05 -3.76841E-05 -3.7441E-05 -3.71984E-05 -3.69564E-05 -3.67149E-05 -3.6474E-05 -3.62336E-05 -3.59936E-05 -3.57542E-05 -3.55152E-05 -3.52766E-05 -3.50385E-05 -3.48008E-05 -3.45635E-05 -3.43265E-05 -3.409E-05 -3.38538E-05 -3.36179E-05 -3.33824E-05 -3.31472E-05 -3.29123E-05 -3.26777E-05 -3.24435E-05 -3.22095E-05 -3.19757E-05 -3.17423E-05 -3.15091E-05 -3.12762E-05 -3.10436E-05 -3.08111E-05 -3.0579E-05 -3.03471E-05 -3.01154E-05 -2.98839E-05 -2.96527E-05 -2.94217E-05 -2.91909E-05 -2.89603E-05 -2.87299E-05 -2.84997E-05 -2.82698E-05 -2.804E-05 -2.78104E-05 -2.75809E-05 -2.73516E-05 -2.71225E-05 -2.68934E-05 -2.66645E-05 -2.64356E-05 -2.62068E-05 -2.59781E-05 -2.57493E-05 -2.55204E-05 -2.52914E-05 -2.50622E-05 -2.48326E-05 -2.46027E-05 -2.43722E-05 -2.41409E-05 -2.39086E-05 -2.36748E-05 -2.34391E-05 -2.32008E-05 -2.29586E-05 -2.27108E-05 -2.24543E-05 -2.21839E-05 -2.18895E-05 -2.15503E-05 -2.11202E-05 -2.04902E-05 -1.94071E-05 -1.73842E-05 -1.37851E-05 -8.08947E-06 -4.32319E-11 1.07788E-05 2.4625E-05 4.17985E-05 6.24625E-05 8.66636E-05 -3.11885E-05 -3.09863E-05 -3.07856E-05 -3.05852E-05 -3.03855E-05 -3.01865E-05 -2.99881E-05 -2.97904E-05 -2.95933E-05 -2.93968E-05 -2.92009E-05 -2.90056E-05 -2.88108E-05 -2.86166E-05 -2.84229E-05 -2.82297E-05 -2.8037E-05 -2.78447E-05 -2.7653E-05 -2.74616E-05 -2.72708E-05 -2.70803E-05 -2.68902E-05 -2.67006E-05 -2.65113E-05 -2.63224E-05 -2.61338E-05 -2.59456E-05 -2.57577E-05 -2.55702E-05 -2.5383E-05 -2.5196E-05 -2.50094E-05 -2.48231E-05 -2.4637E-05 -2.44513E-05 -2.42657E-05 -2.40805E-05 -2.38955E-05 -2.37108E-05 -2.35263E-05 -2.3342E-05 -2.3158E-05 -2.29742E-05 -2.27906E-05 -2.26073E-05 -2.24241E-05 -2.22412E-05 -2.20586E-05 -2.18761E-05 -2.16938E-05 -2.15118E-05 -2.13299E-05 -2.11483E-05 -2.09668E-05 -2.07856E-05 -2.06045E-05 -2.04237E-05 -2.0243E-05 -2.00624E-05 -1.98821E-05 -1.97019E-05 -1.95218E-05 -1.93418E-05 -1.9162E-05 -1.89822E-05 -1.88025E-05 -1.86229E-05 -1.84432E-05 -1.82634E-05 -1.80836E-05 -1.79035E-05 -1.77232E-05 -1.75424E-05 -1.73611E-05 -1.71789E-05 -1.69956E-05 -1.68108E-05 -1.66236E-05 -1.6433E-05 -1.62373E-05 -1.60334E-05 -1.58155E-05 -1.55722E-05 -1.52779E-05 -1.48715E-05 -1.42002E-05 -1.29182E-05 -1.04618E-05 -6.27166E-06 -3.59046E-11 8.62143E-06 1.9969E-05 3.44075E-05 5.22288E-05 7.35965E-05 -2.30599E-05 -2.2903E-05 -2.27473E-05 -2.25919E-05 -2.2437E-05 -2.22826E-05 -2.21287E-05 -2.19753E-05 -2.18225E-05 -2.16701E-05 -2.15181E-05 -2.13666E-05 -2.12156E-05 -2.10649E-05 -2.09147E-05 -2.07649E-05 -2.06155E-05 -2.04664E-05 -2.03178E-05 -2.01694E-05 -2.00215E-05 -1.98738E-05 -1.97265E-05 -1.95795E-05 -1.94329E-05 -1.92865E-05 -1.91404E-05 -1.89946E-05 -1.88491E-05 -1.87038E-05 -1.85588E-05 -1.8414E-05 -1.82695E-05 -1.81253E-05 -1.79812E-05 -1.78374E-05 -1.76939E-05 -1.75505E-05 -1.74074E-05 -1.72644E-05 -1.71217E-05 -1.69792E-05 -1.68369E-05 -1.66948E-05 -1.65529E-05 -1.64112E-05 -1.62697E-05 -1.61283E-05 -1.59872E-05 -1.58462E-05 -1.57055E-05 -1.55649E-05 -1.54245E-05 -1.52843E-05 -1.51443E-05 -1.50044E-05 -1.48647E-05 -1.47252E-05 -1.45859E-05 -1.44467E-05 -1.43077E-05 -1.41688E-05 -1.40301E-05 -1.38915E-05 -1.37531E-05 -1.36147E-05 -1.34765E-05 -1.33383E-05 -1.32002E-05 -1.30621E-05 -1.2924E-05 -1.27858E-05 -1.26475E-05 -1.2509E-05 -1.23702E-05 -1.22309E-05 -1.2091E-05 -1.19502E-05 -1.1808E-05 -1.16637E-05 -1.15164E-05 -1.13643E-05 -1.1204E-05 -1.1029E-05 -1.08252E-05 -1.05585E-05 -1.01404E-05 -9.34556E-06 -7.72659E-06 -4.73898E-06 -2.97202E-11 6.72452E-06 1.57776E-05 2.76023E-05 4.26179E-05 6.11218E-05 -1.67499E-05 -1.6631E-05 -1.65129E-05 -1.6395E-05 -1.62775E-05 -1.61604E-05 -1.60437E-05 -1.59274E-05 -1.58114E-05 -1.56958E-05 -1.55806E-05 -1.54657E-05 -1.53512E-05 -1.52369E-05 -1.5123E-05 -1.50094E-05 -1.48962E-05 -1.47832E-05 -1.46705E-05 -1.4558E-05 -1.44459E-05 -1.4334E-05 -1.42223E-05 -1.41109E-05 -1.39998E-05 -1.38888E-05 -1.37782E-05 -1.36677E-05 -1.35574E-05 -1.34474E-05 -1.33376E-05 -1.3228E-05 -1.31185E-05 -1.30093E-05 -1.29003E-05 -1.27914E-05 -1.26827E-05 -1.25742E-05 -1.24659E-05 -1.23577E-05 -1.22498E-05 -1.2142E-05 -1.20343E-05 -1.19268E-05 -1.18195E-05 -1.17124E-05 -1.16054E-05 -1.14985E-05 -1.13919E-05 -1.12854E-05 -1.1179E-05 -1.10728E-05 -1.09667E-05 -1.08609E-05 -1.07551E-05 -1.06495E-05 -1.05441E-05 -1.04388E-05 -1.03337E-05 -1.02287E-05 -1.01238E-05 -1.00191E-05 -9.91454E-06 -9.81008E-06 -9.70575E-06 -9.60154E-06 -9.49742E-06 -9.3934E-06 -9.28945E-06 -9.18556E-06 -9.0817E-06 -8.97785E-06 -8.87396E-06 -8.76999E-06 -8.66587E-06 -8.5615E-06 -8.45678E-06 -8.35151E-06 -8.24544E-06 -8.13819E-06 -8.0291E-06 -7.91712E-06 -7.80033E-06 -7.67498E-06 -7.53304E-06 -7.35538E-06 -7.09141E-06 -6.60199E-06 -5.56248E-06 -3.4918E-06 -2.45097E-11 5.11211E-06 1.21305E-05 2.15363E-05 3.38552E-05 4.95209E-05 -1.19576E-05 -1.18694E-05 -1.17819E-05 -1.16945E-05 -1.16074E-05 -1.15206E-05 -1.14341E-05 -1.13478E-05 -1.12619E-05 -1.11762E-05 -1.10908E-05 -1.10057E-05 -1.09208E-05 -1.08361E-05 -1.07517E-05 -1.06675E-05 -1.05836E-05 -1.04999E-05 -1.04163E-05 -1.0333E-05 -1.02499E-05 -1.0167E-05 -1.00843E-05 -1.00018E-05 -9.91948E-06 -9.83733E-06 -9.75535E-06 -9.67354E-06 -9.59191E-06 -9.51043E-06 -9.42912E-06 -9.34796E-06 -9.26695E-06 -9.1861E-06 -9.10539E-06 -9.02483E-06 -8.94441E-06 -8.86413E-06 -8.78398E-06 -8.70398E-06 -8.6241E-06 -8.54436E-06 -8.46476E-06 -8.38528E-06 -8.30593E-06 -8.22671E-06 -8.14762E-06 -8.06866E-06 -7.98982E-06 -7.91111E-06 -7.83253E-06 -7.75407E-06 -7.67574E-06 -7.59753E-06 -7.51944E-06 -7.44148E-06 -7.36364E-06 -7.28593E-06 -7.20833E-06 -7.13086E-06 -7.0535E-06 -6.97626E-06 -6.89913E-06 -6.82211E-06 -6.7452E-06 -6.66839E-06 -6.59167E-06 -6.51504E-06 -6.43849E-06 -6.362E-06 -6.28556E-06 -6.20916E-06 -6.13277E-06 -6.05635E-06 -5.97987E-06 -5.90326E-06 -5.82646E-06 -5.74936E-06 -5.67178E-06 -5.5935E-06 -5.51413E-06 -5.43302E-06 -5.34904E-06 -5.25998E-06 -5.16122E-06 -5.04181E-06 -4.8727E-06 -4.57013E-06 -3.91314E-06 -2.51174E-06 -2.01285E-11 3.78911E-06 9.07393E-06 1.63283E-05 2.61447E-05 3.90727E-05 -8.39023E-06 -8.32634E-06 -8.26293E-06 -8.19963E-06 -8.13654E-06 -8.07368E-06 -8.01103E-06 -7.94858E-06 -7.88634E-06 -7.8243E-06 -7.76245E-06 -7.70079E-06 -7.63931E-06 -7.57801E-06 -7.51689E-06 -7.45594E-06 -7.39516E-06 -7.33454E-06 -7.27408E-06 -7.21377E-06 -7.15361E-06 -7.0936E-06 -7.03374E-06 -6.97401E-06 -6.91443E-06 -6.85497E-06 -6.79565E-06 -6.73645E-06 -6.67738E-06 -6.61843E-06 -6.5596E-06 -6.50089E-06 -6.44229E-06 -6.38381E-06 -6.32543E-06 -6.26717E-06 -6.20901E-06 -6.15096E-06 -6.09301E-06 -6.03517E-06 -5.97743E-06 -5.91979E-06 -5.86225E-06 -5.80481E-06 -5.74747E-06 -5.69022E-06 -5.63308E-06 -5.57603E-06 -5.51908E-06 -5.46223E-06 -5.40547E-06 -5.34881E-06 -5.29225E-06 -5.23578E-06 -5.17941E-06 -5.12314E-06 -5.06696E-06 -5.01088E-06 -4.95489E-06 -4.89899E-06 -4.84319E-06 -4.78748E-06 -4.73186E-06 -4.67633E-06 -4.62088E-06 -4.56552E-06 -4.51023E-06 -4.45502E-06 -4.39988E-06 -4.3448E-06 -4.28977E-06 -4.23478E-06 -4.17981E-06 -4.12485E-06 -4.06987E-06 -4.01484E-06 -3.9597E-06 -3.90439E-06 -3.8488E-06 -3.7928E-06 -3.73614E-06 -3.67843E-06 -3.61898E-06 -3.55648E-06 -3.48821E-06 -3.40777E-06 -3.29824E-06 -3.10953E-06 -2.6972E-06 -1.7664E-06 -1.64534E-11 2.74103E-06 6.61081E-06 1.20375E-05 1.96274E-05 3.00033E-05 -5.78401E-06 -5.73882E-06 -5.69396E-06 -5.64918E-06 -5.60456E-06 -5.56009E-06 -5.51577E-06 -5.4716E-06 -5.42757E-06 -5.38369E-06 -5.33994E-06 -5.29633E-06 -5.25285E-06 -5.2095E-06 -5.16627E-06 -5.12317E-06 -5.08019E-06 -5.03732E-06 -4.99456E-06 -4.95192E-06 -4.90939E-06 -4.86696E-06 -4.82463E-06 -4.78241E-06 -4.74028E-06 -4.69826E-06 -4.65632E-06 -4.61448E-06 -4.57273E-06 -4.53107E-06 -4.48949E-06 -4.448E-06 -4.40659E-06 -4.36527E-06 -4.32402E-06 -4.28286E-06 -4.24177E-06 -4.20077E-06 -4.15983E-06 -4.11898E-06 -4.0782E-06 -4.03749E-06 -3.99686E-06 -3.9563E-06 -3.91582E-06 -3.8754E-06 -3.83506E-06 -3.79479E-06 -3.7546E-06 -3.71447E-06 -3.67442E-06 -3.63444E-06 -3.59453E-06 -3.55469E-06 -3.51493E-06 -3.47523E-06 -3.43561E-06 -3.39606E-06 -3.35658E-06 -3.31717E-06 -3.27783E-06 -3.23856E-06 -3.19935E-06 -3.16022E-06 -3.12115E-06 -3.08214E-06 -3.0432E-06 -3.00431E-06 -2.96548E-06 -2.9267E-06 -2.88796E-06 -2.84926E-06 -2.81059E-06 -2.77194E-06 -2.73328E-06 -2.6946E-06 -2.65587E-06 -2.61704E-06 -2.57805E-06 -2.53881E-06 -2.49917E-06 -2.4589E-06 -2.41757E-06 -2.37438E-06 -2.32769E-06 -2.27372E-06 -2.20244E-06 -2.08375E-06 -1.82539E-06 -1.21608E-06 -1.33789E-11 1.93795E-06 4.70096E-06 8.64767E-06 1.43462E-05 2.24357E-05 -3.91463E-06 -3.88342E-06 -3.85243E-06 -3.8215E-06 -3.79068E-06 -3.75996E-06 -3.72935E-06 -3.69885E-06 -3.66844E-06 -3.63813E-06 -3.60792E-06 -3.5778E-06 -3.54778E-06 -3.51784E-06 -3.48799E-06 -3.45823E-06 -3.42855E-06 -3.39895E-06 -3.36943E-06 -3.33998E-06 -3.31062E-06 -3.28133E-06 -3.25211E-06 -3.22296E-06 -3.19388E-06 -3.16487E-06 -3.13592E-06 -3.10704E-06 -3.07823E-06 -3.04947E-06 -3.02078E-06 -2.99215E-06 -2.96358E-06 -2.93506E-06 -2.90661E-06 -2.8782E-06 -2.84986E-06 -2.82157E-06 -2.79333E-06 -2.76515E-06 -2.73703E-06 -2.70895E-06 -2.68093E-06 -2.65296E-06 -2.62504E-06 -2.59717E-06 -2.56936E-06 -2.5416E-06 -2.51389E-06 -2.48623E-06 -2.45862E-06 -2.43106E-06 -2.40356E-06 -2.37611E-06 -2.3487E-06 -2.32135E-06 -2.29405E-06 -2.26681E-06 -2.23961E-06 -2.21246E-06 -2.18537E-06 -2.15832E-06 -2.13133E-06 -2.10438E-06 -2.07748E-06 -2.05063E-06 -2.02382E-06 -1.99706E-06 -1.97034E-06 -1.94366E-06 -1.91701E-06 -1.8904E-06 -1.8638E-06 -1.83723E-06 -1.81066E-06 -1.78408E-06 -1.75748E-06 -1.73082E-06 -1.70407E-06 -1.67717E-06 -1.65003E-06 -1.6225E-06 -1.59431E-06 -1.56499E-06 -1.53354E-06 -1.49765E-06 -1.45133E-06 -1.37633E-06 -1.21447E-06 -8.20309E-07 -1.08143E-11 1.34098E-06 3.27149E-06 6.07341E-06 1.02382E-05 1.63657E-05 -2.59887E-06 -2.57782E-06 -2.55693E-06 -2.53607E-06 -2.51529E-06 -2.49458E-06 -2.47394E-06 -2.45337E-06 -2.43287E-06 -2.41244E-06 -2.39207E-06 -2.37176E-06 -2.35152E-06 -2.33134E-06 -2.31121E-06 -2.29115E-06 -2.27114E-06 -2.25119E-06 -2.23129E-06 -2.21144E-06 -2.19165E-06 -2.17191E-06 -2.15221E-06 -2.13257E-06 -2.11297E-06 -2.09342E-06 -2.07392E-06 -2.05445E-06 -2.03504E-06 -2.01566E-06 -1.99633E-06 -1.97704E-06 -1.95779E-06 -1.93858E-06 -1.91941E-06 -1.90028E-06 -1.88118E-06 -1.86213E-06 -1.84311E-06 -1.82413E-06 -1.80519E-06 -1.78628E-06 -1.76741E-06 -1.74858E-06 -1.72978E-06 -1.71102E-06 -1.69229E-06 -1.6736E-06 -1.65494E-06 -1.63633E-06 -1.61774E-06 -1.59919E-06 -1.58068E-06 -1.56221E-06 -1.54377E-06 -1.52536E-06 -1.50699E-06 -1.48866E-06 -1.47036E-06 -1.4521E-06 -1.43388E-06 -1.41568E-06 -1.39753E-06 -1.37941E-06 -1.36132E-06 -1.34326E-06 -1.32524E-06 -1.30725E-06 -1.28929E-06 -1.27135E-06 -1.25344E-06 -1.23556E-06 -1.21769E-06 -1.19984E-06 -1.182E-06 -1.16415E-06 -1.14629E-06 -1.1284E-06 -1.11046E-06 -1.09243E-06 -1.07425E-06 -1.05583E-06 -1.037E-06 -1.01748E-06 -9.96647E-07 -9.73103E-07 -9.43199E-07 -8.95836E-07 -7.94568E-07 -5.42395E-07 -8.68105E-12 9.09064E-07 2.23355E-06 4.18425E-06 7.15795E-06 1.16749E-05 -1.69126E-06 -1.67741E-06 -1.66365E-06 -1.64992E-06 -1.63624E-06 -1.6226E-06 -1.60902E-06 -1.59548E-06 -1.58198E-06 -1.56853E-06 -1.55512E-06 -1.54175E-06 -1.52843E-06 -1.51514E-06 -1.5019E-06 -1.48869E-06 -1.47552E-06 -1.46239E-06 -1.4493E-06 -1.43623E-06 -1.42321E-06 -1.41022E-06 -1.39726E-06 -1.38433E-06 -1.37143E-06 -1.35857E-06 -1.34573E-06 -1.33293E-06 -1.32015E-06 -1.30741E-06 -1.29469E-06 -1.282E-06 -1.26933E-06 -1.2567E-06 -1.24409E-06 -1.2315E-06 -1.21894E-06 -1.20641E-06 -1.1939E-06 -1.18142E-06 -1.16896E-06 -1.15653E-06 -1.14412E-06 -1.13173E-06 -1.11937E-06 -1.10704E-06 -1.09472E-06 -1.08244E-06 -1.07017E-06 -1.05793E-06 -1.04572E-06 -1.03352E-06 -1.02136E-06 -1.00921E-06 -9.97093E-07 -9.84997E-07 -9.72926E-07 -9.60879E-07 -9.48856E-07 -9.36857E-07 -9.24882E-07 -9.1293E-07 -9.01003E-07 -8.89098E-07 -8.77217E-07 -8.65358E-07 -8.53521E-07 -8.41706E-07 -8.29911E-07 -8.18135E-07 -8.06378E-07 -7.94636E-07 -7.82909E-07 -7.71192E-07 -7.59482E-07 -7.47773E-07 -7.36058E-07 -7.24326E-07 -7.12562E-07 -7.00744E-07 -6.88836E-07 -6.7678E-07 -6.64478E-07 -6.51743E-07 -6.38201E-07 -6.22998E-07 -6.03908E-07 -5.74152E-07 -5.1107E-07 -3.51589E-07 -6.9112E-12 6.04074E-07 1.49856E-06 2.8357E-06 4.91844E-06 8.16884E-06 -1.07861E-06 -1.06969E-06 -1.06085E-06 -1.05202E-06 -1.04322E-06 -1.03445E-06 -1.02571E-06 -1.017E-06 -1.00832E-06 -9.99672E-07 -9.91049E-07 -9.82454E-07 -9.73885E-07 -9.65343E-07 -9.56826E-07 -9.48334E-07 -9.39866E-07 -9.31423E-07 -9.23002E-07 -9.14605E-07 -9.0623E-07 -8.97877E-07 -8.89545E-07 -8.81234E-07 -8.72944E-07 -8.64673E-07 -8.56423E-07 -8.48192E-07 -8.3998E-07 -8.31786E-07 -8.23611E-07 -8.15454E-07 -8.07315E-07 -7.99193E-07 -7.91089E-07 -7.83001E-07 -7.7493E-07 -7.66876E-07 -7.58839E-07 -7.50817E-07 -7.42812E-07 -7.34823E-07 -7.2685E-07 -7.18893E-07 -7.10952E-07 -7.03027E-07 -6.95117E-07 -6.87223E-07 -6.79345E-07 -6.71483E-07 -6.63636E-07 -6.55806E-07 -6.47991E-07 -6.40191E-07 -6.32408E-07 -6.24641E-07 -6.16889E-07 -6.09153E-07 -6.01433E-07 -5.93728E-07 -5.8604E-07 -5.78367E-07 -5.70709E-07 -5.63067E-07 -5.5544E-07 -5.47828E-07 -5.4023E-07 -5.32647E-07 -5.25077E-07 -5.1752E-07 -5.09975E-07 -5.02441E-07 -4.94917E-07 -4.874E-07 -4.79888E-07 -4.72378E-07 -4.64866E-07 -4.57343E-07 -4.49802E-07 -4.42228E-07 -4.34599E-07 -4.26881E-07 -4.1901E-07 -4.10875E-07 -4.02245E-07 -3.92599E-07 -3.80581E-07 -3.62059E-07 -3.23057E-07 -2.23464E-07 -5.44689E-12 3.93546E-07 9.88784E-07 1.8936E-06 3.32985E-06 5.6219E-06 -6.74373E-07 -6.68766E-07 -6.63201E-07 -6.57646E-07 -6.52112E-07 -6.46596E-07 -6.411E-07 -6.35623E-07 -6.30164E-07 -6.24724E-07 -6.19301E-07 -6.13895E-07 -6.08506E-07 -6.03134E-07 -5.97777E-07 -5.92437E-07 -5.87112E-07 -5.81802E-07 -5.76507E-07 -5.71227E-07 -5.6596E-07 -5.60708E-07 -5.55469E-07 -5.50243E-07 -5.45031E-07 -5.39831E-07 -5.34644E-07 -5.29469E-07 -5.24306E-07 -5.19155E-07 -5.14015E-07 -5.08887E-07 -5.03771E-07 -4.98665E-07 -4.93571E-07 -4.88487E-07 -4.83414E-07 -4.78352E-07 -4.733E-07 -4.68258E-07 -4.63227E-07 -4.58206E-07 -4.53196E-07 -4.48195E-07 -4.43205E-07 -4.38224E-07 -4.33254E-07 -4.28294E-07 -4.23344E-07 -4.18404E-07 -4.13473E-07 -4.08554E-07 -4.03644E-07 -3.98744E-07 -3.93854E-07 -3.88974E-07 -3.84105E-07 -3.79245E-07 -3.74396E-07 -3.69557E-07 -3.64727E-07 -3.59908E-07 -3.55099E-07 -3.50299E-07 -3.45509E-07 -3.40729E-07 -3.35958E-07 -3.31197E-07 -3.26444E-07 -3.21699E-07 -3.16962E-07 -3.12232E-07 -3.07509E-07 -3.0279E-07 -2.98075E-07 -2.93362E-07 -2.88647E-07 -2.83927E-07 -2.79196E-07 -2.74445E-07 -2.69661E-07 -2.64823E-07 -2.59892E-07 -2.548E-07 -2.49407E-07 -2.43397E-07 -2.35947E-07 -2.24554E-07 -2.00683E-07 -1.39332E-07 -4.23932E-12 2.51409E-07 6.41624E-07 1.24657E-06 2.2243E-06 3.81415E-06 -4.13776E-07 -4.10321E-07 -4.06892E-07 -4.0347E-07 -4.00059E-07 -3.96661E-07 -3.93274E-07 -3.899E-07 -3.86536E-07 -3.83184E-07 -3.79843E-07 -3.76512E-07 -3.73192E-07 -3.69882E-07 -3.66582E-07 -3.63292E-07 -3.60012E-07 -3.56741E-07 -3.53479E-07 -3.50226E-07 -3.46982E-07 -3.43746E-07 -3.40519E-07 -3.373E-07 -3.34089E-07 -3.30886E-07 -3.27691E-07 -3.24504E-07 -3.21324E-07 -3.18151E-07 -3.14986E-07 -3.11828E-07 -3.08677E-07 -3.05533E-07 -3.02395E-07 -2.99264E-07 -2.9614E-07 -2.93023E-07 -2.89912E-07 -2.86808E-07 -2.8371E-07 -2.80618E-07 -2.77533E-07 -2.74454E-07 -2.71381E-07 -2.68315E-07 -2.65255E-07 -2.62201E-07 -2.59154E-07 -2.56113E-07 -2.53078E-07 -2.50049E-07 -2.47026E-07 -2.4401E-07 -2.41E-07 -2.37997E-07 -2.35E-07 -2.32009E-07 -2.29024E-07 -2.26046E-07 -2.23073E-07 -2.20108E-07 -2.17148E-07 -2.14194E-07 -2.11247E-07 -2.08305E-07 -2.0537E-07 -2.0244E-07 -1.99515E-07 -1.96596E-07 -1.93682E-07 -1.90772E-07 -1.87866E-07 -1.84963E-07 -1.82063E-07 -1.79164E-07 -1.76264E-07 -1.73362E-07 -1.70452E-07 -1.67531E-07 -1.6459E-07 -1.61617E-07 -1.58587E-07 -1.55461E-07 -1.52153E-07 -1.48474E-07 -1.43929E-07 -1.37013E-07 -1.22573E-07 -8.53092E-08 -3.24733E-12 1.57553E-07 4.09329E-07 8.08711E-07 1.46646E-06 2.55438E-06 -2.49544E-07 -2.47454E-07 -2.4538E-07 -2.43309E-07 -2.41247E-07 -2.39191E-07 -2.37143E-07 -2.35101E-07 -2.33067E-07 -2.3104E-07 -2.29019E-07 -2.27004E-07 -2.24996E-07 -2.22994E-07 -2.20999E-07 -2.19009E-07 -2.17025E-07 -2.15047E-07 -2.13074E-07 -2.11107E-07 -2.09145E-07 -2.07188E-07 -2.05237E-07 -2.0329E-07 -2.01349E-07 -1.99412E-07 -1.9748E-07 -1.95553E-07 -1.9363E-07 -1.91712E-07 -1.89798E-07 -1.87888E-07 -1.85983E-07 -1.84082E-07 -1.82185E-07 -1.80292E-07 -1.78403E-07 -1.76519E-07 -1.74638E-07 -1.72761E-07 -1.70889E-07 -1.6902E-07 -1.67155E-07 -1.65293E-07 -1.63436E-07 -1.61583E-07 -1.59733E-07 -1.57887E-07 -1.56045E-07 -1.54207E-07 -1.52372E-07 -1.50542E-07 -1.48715E-07 -1.46892E-07 -1.45073E-07 -1.43258E-07 -1.41447E-07 -1.39639E-07 -1.37836E-07 -1.36036E-07 -1.3424E-07 -1.32448E-07 -1.30659E-07 -1.28875E-07 -1.27094E-07 -1.25316E-07 -1.23543E-07 -1.21772E-07 -1.20006E-07 -1.18242E-07 -1.16481E-07 -1.14723E-07 -1.12968E-07 -1.11215E-07 -1.09463E-07 -1.07712E-07 -1.0596E-07 -1.04207E-07 -1.0245E-07 -1.00686E-07 -9.89107E-08 -9.71155E-08 -9.52872E-08 -9.34011E-08 -9.14068E-08 -8.91911E-08 -8.64602E-08 -8.23184E-08 -7.36899E-08 -5.1367E-08 -2.43619E-12 9.69428E-08 2.56683E-07 5.16648E-07 9.53738E-07 1.68923E-06 -1.48217E-07 -1.46973E-07 -1.45739E-07 -1.44506E-07 -1.43279E-07 -1.42055E-07 -1.40836E-07 -1.39621E-07 -1.3841E-07 -1.37204E-07 -1.36001E-07 -1.34802E-07 -1.33607E-07 -1.32416E-07 -1.31228E-07 -1.30044E-07 -1.28863E-07 -1.27686E-07 -1.26512E-07 -1.25342E-07 -1.24174E-07 -1.2301E-07 -1.21849E-07 -1.2069E-07 -1.19535E-07 -1.18383E-07 -1.17233E-07 -1.16086E-07 -1.14942E-07 -1.13801E-07 -1.12662E-07 -1.11526E-07 -1.10392E-07 -1.09261E-07 -1.08133E-07 -1.07007E-07 -1.05883E-07 -1.04762E-07 -1.03643E-07 -1.02527E-07 -1.01412E-07 -1.00301E-07 -9.91912E-08 -9.80841E-08 -9.69792E-08 -9.58767E-08 -9.47764E-08 -9.36785E-08 -9.25828E-08 -9.14894E-08 -9.03983E-08 -8.93095E-08 -8.82231E-08 -8.71389E-08 -8.6057E-08 -8.49774E-08 -8.39001E-08 -8.28251E-08 -8.17525E-08 -8.06821E-08 -7.9614E-08 -7.85482E-08 -7.74847E-08 -7.64234E-08 -7.53644E-08 -7.43075E-08 -7.32528E-08 -7.22002E-08 -7.11496E-08 -7.0101E-08 -6.90541E-08 -6.8009E-08 -6.69653E-08 -6.59229E-08 -6.48814E-08 -6.38403E-08 -6.27991E-08 -6.1757E-08 -6.07126E-08 -5.96641E-08 -5.86088E-08 -5.75419E-08 -5.64556E-08 -5.53351E-08 -5.41509E-08 -5.28363E-08 -5.12181E-08 -4.87689E-08 -4.36742E-08 -3.04734E-08 -1.77647E-12 5.86468E-08 1.58259E-07 3.24824E-07 6.11315E-07 1.10252E-06 -8.6886E-08 -8.61557E-08 -8.5431E-08 -8.47075E-08 -8.39867E-08 -8.32685E-08 -8.25529E-08 -8.18397E-08 -8.1129E-08 -8.04206E-08 -7.97146E-08 -7.90109E-08 -7.83094E-08 -7.76101E-08 -7.69129E-08 -7.62178E-08 -7.55248E-08 -7.48338E-08 -7.41447E-08 -7.34576E-08 -7.27724E-08 -7.2089E-08 -7.14074E-08 -7.07276E-08 -7.00495E-08 -6.93731E-08 -6.86984E-08 -6.80253E-08 -6.73539E-08 -6.6684E-08 -6.60157E-08 -6.53489E-08 -6.46836E-08 -6.40198E-08 -6.33575E-08 -6.26967E-08 -6.20373E-08 -6.13793E-08 -6.07227E-08 -6.00675E-08 -5.94137E-08 -5.87613E-08 -5.81103E-08 -5.74606E-08 -5.68123E-08 -5.61653E-08 -5.55197E-08 -5.48755E-08 -5.42326E-08 -5.3591E-08 -5.29508E-08 -5.2312E-08 -5.16745E-08 -5.10384E-08 -5.04036E-08 -4.97702E-08 -4.91382E-08 -4.85075E-08 -4.78782E-08 -4.72502E-08 -4.66236E-08 -4.59983E-08 -4.53744E-08 -4.47518E-08 -4.41305E-08 -4.35106E-08 -4.28919E-08 -4.22744E-08 -4.16581E-08 -4.1043E-08 -4.04289E-08 -3.98159E-08 -3.92037E-08 -3.85923E-08 -3.79814E-08 -3.73708E-08 -3.67601E-08 -3.61489E-08 -3.55363E-08 -3.49215E-08 -3.43026E-08 -3.3677E-08 -3.30401E-08 -3.23832E-08 -3.16892E-08 -3.09191E-08 -2.99719E-08 -2.85402E-08 -2.55648E-08 -1.78482E-08 -1.24327E-12 3.49448E-08 9.60169E-08 2.00949E-07 3.85845E-07 7.09518E-07 -5.03765E-08 -4.99526E-08 -4.9532E-08 -4.91121E-08 -4.86938E-08 -4.82769E-08 -4.78616E-08 -4.74477E-08 -4.70352E-08 -4.66241E-08 -4.62143E-08 -4.58059E-08 -4.53988E-08 -4.4993E-08 -4.45884E-08 -4.4185E-08 -4.37828E-08 -4.33818E-08 -4.29819E-08 -4.25832E-08 -4.21855E-08 -4.17889E-08 -4.13934E-08 -4.09989E-08 -4.06054E-08 -4.02129E-08 -3.98214E-08 -3.94308E-08 -3.90412E-08 -3.86525E-08 -3.82647E-08 -3.78778E-08 -3.74918E-08 -3.71066E-08 -3.67223E-08 -3.63389E-08 -3.59563E-08 -3.55745E-08 -3.51935E-08 -3.48134E-08 -3.44341E-08 -3.40555E-08 -3.36778E-08 -3.33009E-08 -3.29247E-08 -3.25494E-08 -3.21748E-08 -3.1801E-08 -3.14281E-08 -3.10559E-08 -3.06845E-08 -3.03138E-08 -2.9944E-08 -2.9575E-08 -2.92067E-08 -2.88393E-08 -2.84726E-08 -2.81068E-08 -2.77417E-08 -2.73774E-08 -2.70139E-08 -2.66512E-08 -2.62893E-08 -2.59282E-08 -2.55678E-08 -2.52082E-08 -2.48493E-08 -2.44911E-08 -2.41337E-08 -2.37769E-08 -2.34207E-08 -2.30652E-08 -2.27101E-08 -2.23555E-08 -2.20012E-08 -2.1647E-08 -2.12929E-08 -2.09384E-08 -2.05831E-08 -2.02266E-08 -1.98677E-08 -1.95049E-08 -1.91356E-08 -1.87547E-08 -1.83524E-08 -1.79061E-08 -1.73575E-08 -1.65289E-08 -1.48077E-08 -1.03417E-08 -8.15511E-13 2.05494E-08 5.74007E-08 1.2238E-07 2.39718E-07 4.49795E-07 -2.89465E-08 -2.87027E-08 -2.84609E-08 -2.82194E-08 -2.79789E-08 -2.77392E-08 -2.75004E-08 -2.72624E-08 -2.70252E-08 -2.67888E-08 -2.65532E-08 -2.63184E-08 -2.60843E-08 -2.58509E-08 -2.56183E-08 -2.53863E-08 -2.51551E-08 -2.49245E-08 -2.46946E-08 -2.44654E-08 -2.42367E-08 -2.40087E-08 -2.37813E-08 -2.35545E-08 -2.33282E-08 -2.31026E-08 -2.28775E-08 -2.26529E-08 -2.24289E-08 -2.22055E-08 -2.19825E-08 -2.17601E-08 -2.15382E-08 -2.13167E-08 -2.10958E-08 -2.08754E-08 -2.06554E-08 -2.04359E-08 -2.02169E-08 -1.99984E-08 -1.97803E-08 -1.95627E-08 -1.93456E-08 -1.91289E-08 -1.89126E-08 -1.86969E-08 -1.84816E-08 -1.82667E-08 -1.80523E-08 -1.78383E-08 -1.76249E-08 -1.74118E-08 -1.71992E-08 -1.69871E-08 -1.67754E-08 -1.65642E-08 -1.63535E-08 -1.61432E-08 -1.59333E-08 -1.5724E-08 -1.5515E-08 -1.53066E-08 -1.50985E-08 -1.4891E-08 -1.46838E-08 -1.44771E-08 -1.42709E-08 -1.4065E-08 -1.38596E-08 -1.36545E-08 -1.34498E-08 -1.32455E-08 -1.30414E-08 -1.28376E-08 -1.2634E-08 -1.24305E-08 -1.22269E-08 -1.20232E-08 -1.18191E-08 -1.16141E-08 -1.14079E-08 -1.11994E-08 -1.09872E-08 -1.07684E-08 -1.05373E-08 -1.02809E-08 -9.96586E-09 -9.49026E-09 -8.50273E-09 -5.93951E-09 -4.75358E-13 1.19504E-08 3.38699E-08 7.34479E-08 1.46634E-07 2.8074E-07 -1.65127E-08 -1.63736E-08 -1.62355E-08 -1.60977E-08 -1.59604E-08 -1.58236E-08 -1.56873E-08 -1.55515E-08 -1.54161E-08 -1.52812E-08 -1.51467E-08 -1.50127E-08 -1.48791E-08 -1.47459E-08 -1.46131E-08 -1.44808E-08 -1.43488E-08 -1.42172E-08 -1.4086E-08 -1.39551E-08 -1.38247E-08 -1.36945E-08 -1.35647E-08 -1.34353E-08 -1.33062E-08 -1.31774E-08 -1.3049E-08 -1.29208E-08 -1.2793E-08 -1.26654E-08 -1.25382E-08 -1.24113E-08 -1.22846E-08 -1.21583E-08 -1.20322E-08 -1.19064E-08 -1.17809E-08 -1.16556E-08 -1.15307E-08 -1.1406E-08 -1.12815E-08 -1.11573E-08 -1.10334E-08 -1.09098E-08 -1.07864E-08 -1.06633E-08 -1.05404E-08 -1.04178E-08 -1.02955E-08 -1.01734E-08 -1.00516E-08 -9.93001E-09 -9.80871E-09 -9.68768E-09 -9.5669E-09 -9.44639E-09 -9.32613E-09 -9.20614E-09 -9.08642E-09 -8.96695E-09 -8.84774E-09 -8.7288E-09 -8.61011E-09 -8.49168E-09 -8.3735E-09 -8.25557E-09 -8.13788E-09 -8.02044E-09 -7.90322E-09 -7.78623E-09 -7.66944E-09 -7.55285E-09 -7.43643E-09 -7.32015E-09 -7.20398E-09 -7.08787E-09 -6.97175E-09 -6.85553E-09 -6.73907E-09 -6.62217E-09 -6.50452E-09 -6.3856E-09 -6.26454E-09 -6.13972E-09 -6.00788E-09 -5.86167E-09 -5.68203E-09 -5.4109E-09 -4.84808E-09 -3.38696E-09 -2.07753E-13 6.8862E-09 1.97627E-08 4.35056E-08 8.83881E-08 1.72529E-07 -9.36577E-09 -9.28683E-09 -9.2085E-09 -9.13031E-09 -9.05241E-09 -8.97479E-09 -8.89745E-09 -8.82037E-09 -8.74357E-09 -8.66702E-09 -8.59072E-09 -8.51468E-09 -8.43887E-09 -8.36331E-09 -8.28798E-09 -8.21287E-09 -8.13799E-09 -8.06333E-09 -7.98889E-09 -7.91465E-09 -7.84062E-09 -7.76679E-09 -7.69315E-09 -7.61971E-09 -7.54646E-09 -7.4734E-09 -7.40051E-09 -7.32781E-09 -7.25528E-09 -7.18293E-09 -7.11075E-09 -7.03873E-09 -6.96688E-09 -6.89519E-09 -6.82366E-09 -6.75229E-09 -6.68108E-09 -6.61003E-09 -6.53913E-09 -6.46838E-09 -6.39778E-09 -6.32734E-09 -6.25704E-09 -6.1869E-09 -6.1169E-09 -6.04705E-09 -5.97735E-09 -5.9078E-09 -5.8384E-09 -5.76914E-09 -5.70003E-09 -5.63107E-09 -5.56226E-09 -5.4936E-09 -5.42509E-09 -5.35672E-09 -5.28851E-09 -5.22044E-09 -5.15252E-09 -5.08475E-09 -5.01713E-09 -4.94966E-09 -4.88233E-09 -4.81515E-09 -4.74811E-09 -4.68122E-09 -4.61446E-09 -4.54784E-09 -4.48135E-09 -4.41499E-09 -4.34874E-09 -4.28261E-09 -4.21657E-09 -4.15061E-09 -4.08472E-09 -4.01886E-09 -3.953E-09 -3.88708E-09 -3.82102E-09 -3.75471E-09 -3.68798E-09 -3.62053E-09 -3.55187E-09 -3.48108E-09 -3.4063E-09 -3.32338E-09 -3.22152E-09 -3.06781E-09 -2.74876E-09 -1.92043E-09 1.70219E-22 3.93874E-09 1.1424E-08 2.54779E-08 5.25736E-08 1.04473E-07 -5.28823E-09 -5.24373E-09 -5.1994E-09 -5.15524E-09 -5.11124E-09 -5.0674E-09 -5.02372E-09 -4.98019E-09 -4.93681E-09 -4.89357E-09 -4.85048E-09 -4.80753E-09 -4.76472E-09 -4.72204E-09 -4.6795E-09 -4.63708E-09 -4.59479E-09 -4.55262E-09 -4.51057E-09 -4.46865E-09 -4.42684E-09 -4.38514E-09 -4.34355E-09 -4.30207E-09 -4.26071E-09 -4.21944E-09 -4.17828E-09 -4.13722E-09 -4.09626E-09 -4.0554E-09 -4.01463E-09 -3.97396E-09 -3.93338E-09 -3.89289E-09 -3.8525E-09 -3.81219E-09 -3.77198E-09 -3.73185E-09 -3.69181E-09 -3.65186E-09 -3.61199E-09 -3.5722E-09 -3.53251E-09 -3.49289E-09 -3.45336E-09 -3.41392E-09 -3.37456E-09 -3.33528E-09 -3.29609E-09 -3.25698E-09 -3.21795E-09 -3.17901E-09 -3.14015E-09 -3.10137E-09 -3.06268E-09 -3.02408E-09 -2.98556E-09 -2.94712E-09 -2.90877E-09 -2.8705E-09 -2.83231E-09 -2.79421E-09 -2.75619E-09 -2.71825E-09 -2.6804E-09 -2.64262E-09 -2.60493E-09 -2.56731E-09 -2.52976E-09 -2.49229E-09 -2.45488E-09 -2.41754E-09 -2.38025E-09 -2.34301E-09 -2.3058E-09 -2.26861E-09 -2.23142E-09 -2.1942E-09 -2.1569E-09 -2.11946E-09 -2.08178E-09 -2.04369E-09 -2.00493E-09 -1.96495E-09 -1.92274E-09 -1.87592E-09 -1.81842E-09 -1.73165E-09 -1.55157E-09 -1.084E-09 1.58586E-13 2.23966E-09 6.55351E-09 1.47778E-08 3.09084E-08 6.24118E-08 -2.97542E-09 -2.95038E-09 -2.92543E-09 -2.90058E-09 -2.87581E-09 -2.85114E-09 -2.82655E-09 -2.80206E-09 -2.77764E-09 -2.75331E-09 -2.72906E-09 -2.70489E-09 -2.68079E-09 -2.65677E-09 -2.63283E-09 -2.60896E-09 -2.58516E-09 -2.56143E-09 -2.53776E-09 -2.51417E-09 -2.49064E-09 -2.46717E-09 -2.44377E-09 -2.42043E-09 -2.39714E-09 -2.37392E-09 -2.35076E-09 -2.32765E-09 -2.3046E-09 -2.2816E-09 -2.25866E-09 -2.23577E-09 -2.21294E-09 -2.19015E-09 -2.16742E-09 -2.14474E-09 -2.12211E-09 -2.09953E-09 -2.07699E-09 -2.05451E-09 -2.03207E-09 -2.00969E-09 -1.98735E-09 -1.96505E-09 -1.94281E-09 -1.92061E-09 -1.89846E-09 -1.87636E-09 -1.8543E-09 -1.8323E-09 -1.81033E-09 -1.78842E-09 -1.76655E-09 -1.74473E-09 -1.72296E-09 -1.70124E-09 -1.67956E-09 -1.65793E-09 -1.63635E-09 -1.61482E-09 -1.59333E-09 -1.57189E-09 -1.55049E-09 -1.52915E-09 -1.50785E-09 -1.48659E-09 -1.46538E-09 -1.44421E-09 -1.42308E-09 -1.402E-09 -1.38095E-09 -1.35993E-09 -1.33895E-09 -1.318E-09 -1.29706E-09 -1.27613E-09 -1.25521E-09 -1.23426E-09 -1.21327E-09 -1.19221E-09 -1.17101E-09 -1.14958E-09 -1.12776E-09 -1.10527E-09 -1.08152E-09 -1.05518E-09 -1.02282E-09 -9.74012E-10 -8.72706E-10 -6.0967E-10 2.76978E-13 1.2677E-09 3.73659E-09 8.50399E-09 1.79921E-08 3.68417E-08 -1.66952E-09 -1.65547E-09 -1.64147E-09 -1.62752E-09 -1.61362E-09 -1.59977E-09 -1.58597E-09 -1.57222E-09 -1.55852E-09 -1.54486E-09 -1.53125E-09 -1.51769E-09 -1.50416E-09 -1.49068E-09 -1.47724E-09 -1.46385E-09 -1.45049E-09 -1.43717E-09 -1.42389E-09 -1.41065E-09 -1.39744E-09 -1.38427E-09 -1.37114E-09 -1.35803E-09 -1.34497E-09 -1.33193E-09 -1.31893E-09 -1.30597E-09 -1.29303E-09 -1.28012E-09 -1.26725E-09 -1.2544E-09 -1.24159E-09 -1.2288E-09 -1.21604E-09 -1.20331E-09 -1.19061E-09 -1.17794E-09 -1.16529E-09 -1.15267E-09 -1.14008E-09 -1.12752E-09 -1.11498E-09 -1.10247E-09 -1.08998E-09 -1.07753E-09 -1.0651E-09 -1.05269E-09 -1.04031E-09 -1.02796E-09 -1.01564E-09 -1.00334E-09 -9.91068E-10 -9.78823E-10 -9.66605E-10 -9.54413E-10 -9.42248E-10 -9.30109E-10 -9.17998E-10 -9.05912E-10 -8.93854E-10 -8.81822E-10 -8.69816E-10 -8.57836E-10 -8.45882E-10 -8.33953E-10 -8.22049E-10 -8.1017E-10 -7.98314E-10 -7.86481E-10 -7.74669E-10 -7.62876E-10 -7.51102E-10 -7.39341E-10 -7.27592E-10 -7.15849E-10 -7.04106E-10 -6.92352E-10 -6.80575E-10 -6.68753E-10 -6.56855E-10 -6.4483E-10 -6.32589E-10 -6.19968E-10 -6.06639E-10 -5.91858E-10 -5.73703E-10 -5.46314E-10 -4.89473E-10 -3.41886E-10 3.62694E-13 7.15055E-10 2.12025E-09 4.86261E-09 1.03878E-08 2.15265E-08 -9.3475E-10 -9.26878E-10 -9.19036E-10 -9.11223E-10 -9.03439E-10 -8.95683E-10 -8.87954E-10 -8.80253E-10 -8.72579E-10 -8.6493E-10 -8.57307E-10 -8.49709E-10 -8.42135E-10 -8.34585E-10 -8.27058E-10 -8.19554E-10 -8.12073E-10 -8.04613E-10 -7.97175E-10 -7.89758E-10 -7.82362E-10 -7.74986E-10 -7.67629E-10 -7.60292E-10 -7.52974E-10 -7.45675E-10 -7.38393E-10 -7.3113E-10 -7.23885E-10 -7.16657E-10 -7.09445E-10 -7.02251E-10 -6.95073E-10 -6.87912E-10 -6.80767E-10 -6.73638E-10 -6.66524E-10 -6.59426E-10 -6.52344E-10 -6.45277E-10 -6.38225E-10 -6.31188E-10 -6.24167E-10 -6.1716E-10 -6.10169E-10 -6.03192E-10 -5.9623E-10 -5.89283E-10 -5.82351E-10 -5.75434E-10 -5.68531E-10 -5.61644E-10 -5.54771E-10 -5.47913E-10 -5.41071E-10 -5.34243E-10 -5.2743E-10 -5.20632E-10 -5.13849E-10 -5.07081E-10 -5.00327E-10 -4.93589E-10 -4.86865E-10 -4.80156E-10 -4.73462E-10 -4.66781E-10 -4.60115E-10 -4.53462E-10 -4.46822E-10 -4.40195E-10 -4.3358E-10 -4.26976E-10 -4.20382E-10 -4.13796E-10 -4.07217E-10 -4.0064E-10 -3.94064E-10 -3.87482E-10 -3.80886E-10 -3.74266E-10 -3.67603E-10 -3.60868E-10 -3.54013E-10 -3.46946E-10 -3.39481E-10 -3.31204E-10 -3.21038E-10 -3.057E-10 -2.73872E-10 -1.91228E-10 4.22018E-13 4.02305E-10 1.19863E-09 2.76646E-09 5.95771E-09 1.24711E-08 -5.22434E-10 -5.18032E-10 -5.13647E-10 -5.09278E-10 -5.04925E-10 -5.00588E-10 -4.96266E-10 -4.9196E-10 -4.87669E-10 -4.83392E-10 -4.79129E-10 -4.7488E-10 -4.70645E-10 -4.66423E-10 -4.62214E-10 -4.58018E-10 -4.53835E-10 -4.49664E-10 -4.45504E-10 -4.41357E-10 -4.37221E-10 -4.33096E-10 -4.28983E-10 -4.2488E-10 -4.20788E-10 -4.16706E-10 -4.12635E-10 -4.08574E-10 -4.04522E-10 -4.0048E-10 -3.96448E-10 -3.92425E-10 -3.88412E-10 -3.84407E-10 -3.80412E-10 -3.76425E-10 -3.72448E-10 -3.68479E-10 -3.64519E-10 -3.60567E-10 -3.56624E-10 -3.52689E-10 -3.48763E-10 -3.44845E-10 -3.40936E-10 -3.37035E-10 -3.33142E-10 -3.29257E-10 -3.25381E-10 -3.21513E-10 -3.17654E-10 -3.13803E-10 -3.0996E-10 -3.06125E-10 -3.02299E-10 -2.98481E-10 -2.94672E-10 -2.90871E-10 -2.87078E-10 -2.83293E-10 -2.79517E-10 -2.7575E-10 -2.7199E-10 -2.68239E-10 -2.64495E-10 -2.6076E-10 -2.57033E-10 -2.53313E-10 -2.496E-10 -2.45895E-10 -2.42196E-10 -2.38503E-10 -2.34816E-10 -2.31134E-10 -2.27455E-10 -2.23778E-10 -2.20101E-10 -2.1642E-10 -2.12732E-10 -2.09031E-10 -2.05305E-10 -2.0154E-10 -1.97707E-10 -1.93755E-10 -1.89581E-10 -1.84954E-10 -1.79269E-10 -1.70694E-10 -1.52899E-10 -1.06693E-10 4.60188E-13 2.2596E-10 6.7572E-10 1.56774E-09 3.39885E-09 7.17501E-09 tmpk8ny_4pz/examples/xspice/table/table-model-mos-2d-2-oc.sp0000644000175000017500000000101713546075722023745 0ustar carstencarstenCode Model Test - 2d Table Model * bsim4 transistor dc input and output characteristics * * *** input sources *** * v1 d 0 DC 0.1 * v2 g 0 DC 1.5 * Vs s 0 0 Vs2 s2 0 0 * *** table model of mos transistor *** amos1 %vd(d s) %vd(g s) %id(d s) mostable1 .model mostable1 table2d (offset=0.0 gain=0.5 order=3 file="bsim4n-2d-3.table") * L=0.13u W=10.0u rgeoMod=1 * BSIM 4.7 * change width of transistor by modifying parameter "gain" * source is always tied to bulk (2d model!) amos2 %vd(d s2) %vd(d s2) %id(d s2) mostable1 .end tmpk8ny_4pz/examples/xspice/xspice_c1.cir0000644000175000017500000000072513546075722020652 0ustar carstencarstenA Berkeley SPICE3 compatible circuit * * This circuit contains only Berkeley SPICE3 components. * * The circuit is an AC coupled transistor amplifier with * a sinewave input at node "1", a gain of approximately -3.9, * and output on node "coll". * .tran 1e-5 2e-3 * vcc vcc 0 12.0 vin 1 0 0.0 ac 1.0 sin(0 1 1k) ccouple 1 base 10uF rbias1 vcc base 100k rbias2 base 0 24k q1 coll base emit generic rcollector vcc coll 3.9k remitter emit 0 1k * .model generic npn * .end tmpk8ny_4pz/examples/xspice/original-examples/0000755000175000017500000000000013546075722021711 5ustar carstencarstentmpk8ny_4pz/examples/xspice/original-examples/xspice.deck0000644000175000017500000000057313546075722024041 0ustar carstencarstenA simple XSPICE amplifier circuit * * This uses an XSPICE "gain" code model to substitute for * the transistor amplifier circuit in spice3.deck. * .tran 1e-5 2e-3 * vin 1 0 0.0 ac 1.0 sin(0 1 1k) * ccouple 1 in 10uF * * rzin in 0 19.35k * aamp in coll gain_block .model gain_block gain (gain = -3.9 out_offset = 7.003) * rzout out coll 3.9k rbig coll 0 1e12 * * .end tmpk8ny_4pz/examples/xspice/original-examples/hybrid_models1_transient.deck0000644000175000017500000000165413546075722027543 0ustar carstencarstenCode Model Test - Transient: d_osc, dac_bridge, adc_bridge * * *** analysis type *** .tran .01s 1s * *** input sources *** * v1 1 0 DC PWL( (0 0.0) (1 1.0) ) * v2 2 0 DC PWL( (0 0.0) (1 5.0) ) * * *** d_osc block *** a1 1 10 d_osc1 .model d_osc1 d_osc (cntl_array=[-1.0 0.0 1.0 2.0] + freq_array=[1.0 1.0 8.0 8.0] + duty_cycle=0.5 init_phase=0.0 + rise_delay=1.0e-6 fall_delay=2.0e-6) * *** dac_bridge block *** a2 [10] [20] dac_bridge1 .model dac_bridge1 dac_bridge (out_low=0.5 out_high=4.5 out_undef=1.8 + input_load=1.0e-12 + t_rise=1.0e-6 t_fall=2.0e-6) * * *** adc_bridge block *** a3 [2] [30] adc_bridge1 .model adc_bridge1 adc_bridge (in_low=0.7 in_high=2.4 + rise_delay=1.0e-12 fall_delay=2.0e-12) * * * *** resistors to ground *** r1 1 0 1k r2 2 0 1k * r20 20 0 1k * * .end tmpk8ny_4pz/examples/xspice/original-examples/digital_models.deck0000644000175000017500000000067013546075722025524 0ustar carstencarstenDigital models * * This circuit contains a nand gate oscillator enabled by * a pulse input after 20nS. Node 1 is an analog node. * Nodes 2 and 3 are digital nodes. * .tran 1e-8 1e-7 * v1 1 0 0.0 pulse(0 1 2e-8 1e-9 1e-9) * r1 1 0 1k * a1 [1] [2] atod1 .model atod1 adc_bridge (in_low=0.25 in_high=0.75 + rise_delay=1e-9 fall_delay=1e-9) * a2 [2 3] 3 nand .model nand d_nand (rise_delay=1e-9 fall_delay=1e-9) * .end tmpk8ny_4pz/examples/xspice/original-examples/analog_models4_transient.deck0000644000175000017500000000357413546075722027531 0ustar carstencarstenCode Model Test - Transient: sine, triangle, aswitch, zener, oneshot * * *** analysis type *** .tran .01ms 2ms * *** input sources *** * v1 1 0 DC 0.0 PWL(0 0 2e-3 2) * v2 2 0 DC 0.0 PWL(0 0 2e-3 10) * v3 3 0 DC 0.0 PWL(0 0.0 0.9e-3 0.0 1e-3 1.0 1.9e-3 1.0 2e-3 0.0 2.9e-3 0.0) * v4 4 0 DC 1.0 * * *** sine block *** a1 2 10 sine1 .model sine1 sine (cntl_array=[-1.0 0.0 10.0 20.0] + freq_array=[500 500 2000 2000] + out_low=-1.0 out_high=1.0) * * *** triangle block *** a2 1 20 triangle1 .model triangle1 triangle (cntl_array=[-1.0 0.0 10.0 20.0] + freq_array=[500 500 10000 10000] + out_low=-1.0 out_high=1.0 duty_cycle=0.5) * * *** aswitch block *** a3 1 (4 30) aswitch1 .model aswitch1 aswitch (cntl_off=0.0 cntl_on=1.0 log=TRUE + r_off=1.0e12 r_on=10.0) * * *** zener diode *** rzener 2 40 100 a4 (0 40) zener1 .model zener1 zener (v_breakdown=9.0 i_breakdown=2.0e-2 + r_breakdown=1.0 i_rev=1.0e-6 i_sat=1.0e-12 + n_forward=1.0 limit_switch=FALSE) * * *** oneshot block *** a5 3 1 0 50 oneshot1 .model oneshot1 oneshot (cntl_array=[-1.0 0.0 1.0 2.0] + pw_array=[2.0e-3 2.0e-3 0.1e-3 0.1e-3] clk_trig=0.5 + pos_edge_trig=TRUE out_low=0.0 out_high=1.0 + rise_time=1.0e-6 rise_delay=1.0e-9 + fall_delay=1.0e-9 fall_time=1.0e-6 + retrig=FALSE) * * *** square block *** a6 2 60 square1 .model square1 square (cntl_array=[-1.0 0.0 10.0 20.0] + freq_array=[500 500 7000 7000] + out_low=-0.8 out_high=1.2 duty_cycle=0.5 + rise_time=1e-6 fall_time=2e-6) * *** resistors to ground *** r1 1 0 10k r2 2 0 10k r3 3 0 10k r4 4 0 10k * r10 10 0 10k r20 20 0 10k r30 30 0 10k r40 40 0 10k r50 50 0 10k r60 60 0 10k * * .end tmpk8ny_4pz/examples/xspice/original-examples/analog_models3_swept_dc.deck0000644000175000017500000000265313546075722027326 0ustar carstencarstenCode Model Test - DC: hyst, limit, ilimit, climit, cmeter, lmeter * * *** analysis type *** .dc v1 .1 15 .5 * *** input sources *** v1 1 0 DC 1.0 * v2 2 0 DC 10.0 * v3 3 0 DC -10.0 * * * *** hyst block *** a1 1 10 hyst1 .model hyst1 hyst (in_low=0.0 in_high=1.0 hyst=0.1 out_lower_limit=0.0 + out_upper_limit=1.0 input_domain=0.01 fraction=TRUE) * * *** limit block *** a2 1 20 limit1 .model limit1 limit (in_offset=0.0 gain=1.0 out_lower_limit=-1.0e6 + out_upper_limit=1.0e6 limit_range=1.0e-6 fraction=FALSE) * * *** ilimit block *** a3 1 2 3 30 ilimit1 .model ilimit1 ilimit (in_offset=0.0 gain=1.0 r_out_source=1.0 + r_out_sink=1.0 i_limit_source=1.0 + i_limit_sink=1.0 v_pwr_range=1.0e-3 + i_source_range=1.0e-6 i_sink_range=1.0e-6 + r_out_domain=1.0e-6) * * *** climit block *** a4 1 2 3 40 climit1 .model climit1 climit (in_offset=0.0 gain=1.0 upper_delta=0.0 + lower_delta=0.0 limit_range=1.0e-6 + fraction=FALSE) * * *** cmeter block *** c5 51 0 1.0e-6 a5 51 50 cmeter1 .model cmeter1 cmeter (gain=1.0) * * * *** lmeter block *** l6 61 0 1.0e-6 a6 61 60 lmeter1 .model lmeter1 lmeter (gain=1.0) * * * *** resistors to ground *** r1 1 0 10k r2 2 0 10k r3 3 0 10k * r10 10 0 10k r20 20 0 10k r30 30 0 10k r40 40 0 10k r50 50 0 10k r51 51 0 10k r60 60 0 10k r61 61 0 10k * * .end tmpk8ny_4pz/examples/xspice/original-examples/digital_invert.deck0000644000175000017500000000050313546075722025543 0ustar carstencarstenDigital inversions * .tran 1e-8 1e-6 * v1 1 0 0.0 pulse(0 1 0 1e-8 1e-8 0.25e-6 0.5e-6) r1 1 0 1k * a1 [1] [2] adc .model adc adc_bridge * a2 2 3 inv a3 2 ~4 inv a4 ~2 5 inv a5 ~2 ~6 inv .model inv d_inverter * a6 [2 ~4] 7 nand .model nand d_nand * a8 [2 3 4 5 6 7] [12 13 14 15 16 17] dac .model dac dac_bridge * .end tmpk8ny_4pz/examples/xspice/original-examples/bad_param_type.deck0000644000175000017500000000043513546075722025512 0ustar carstencarstenInvalid parameter type * * This circuit contains a simple gain block to demonstrate * that the simulator reports an error if the parameter value * is invalid. * .tran 1e-5 1e-3 * v1 1 0 0.0 sin(0 1 1k) r1 1 0 1k * a1 1 2 gain_block .model gain_block gain (gain=false) r2 2 0 1k * .end tmpk8ny_4pz/examples/xspice/original-examples/suffixes.deck0000644000175000017500000000101113546075722024366 0ustar carstencarstenEngineering suffixes * * This circuit contains a code model which accepts several * parameters of various types and prints them. The values * specified on the .model card use engineering suffixes on * the numeric parameters. * .op * r1 1 0 1k r2 2 0 1k r3 1 2 1k * a1 [1 2] mod .model mod print_param_types + integer=2k + real=3.0u + complex=< 4.0f 5.0mil > + string=six + integer_array=[7meg 8] + real_array=[9.0n 10.0p] + complex_array=[< 11.0t 12.0g > < 13.0m 14.0 >] + string_array=[fifteen sixteen] * .end tmpk8ny_4pz/examples/xspice/original-examples/user_defined_nodes.deck0000644000175000017500000000120113546075722026357 0ustar carstencarstenUser defined nodes * * This circuit contains a mix of node types including * two 'real' type user-defined nodes and associated * node bridges. * .tran 1e-6 1e-4 * v1 1 0 0.0 pulse(0 1 2e-5) r1 1 0 1k * abridge1 [1] [enable] node_bridge1 .model node_bridge1 adc_bridge * aclk [enable clk] clk nand .model nand d_nand (rise_delay=1e-5 fall_delay=1e-5) * abridge2 clk enable real_node1 node_bridge2 .model node_bridge2 d_to_real (zero=-1 one=1) * again real_node1 real_node2 times10 .model times10 real_gain (gain=10) * abridge3 real_node2 analog_node node_bridge3 .model node_bridge3 real_to_v * rout analog_node 0 1k * * .end tmpk8ny_4pz/examples/xspice/original-examples/analog_models3_ac.deck0000644000175000017500000000267113546075722026101 0ustar carstencarstenCode Model Test - AC: hyst, limit, ilimit, climit, cmeter, lmeter * * *** analysis type *** .ac dec 10 10 1000 * * *** input sources *** * v1 1 0 1.0 AC 1.0 0.0 * v2 2 0 DC 10.0 * v3 3 0 DC -10.0 * * * *** hyst block *** a1 1 10 hyst1 .model hyst1 hyst (in_low=0.0 in_high=1.0 hyst=0.1 out_lower_limit=0.0 + out_upper_limit=1.0 input_domain=0.01 fraction=TRUE) * * *** limit block *** a2 1 20 limit1 .model limit1 limit (in_offset=0.0 gain=1.0 out_lower_limit=-1.0e6 + out_upper_limit=1.0e6 limit_range=1.0e-6 fraction=FALSE) * * *** ilimit block *** a3 1 2 3 30 ilimit1 .model ilimit1 ilimit (in_offset=0.0 gain=1.0 r_out_source=1.0 + r_out_sink=1.0 i_limit_source=1.0 + i_limit_sink=1.0 v_pwr_range=1.0e-3 + i_source_range=1.0e-6 i_sink_range=1.0e-6 + r_out_domain=1.0e-6) * * *** climit block *** a4 1 2 3 40 climit1 .model climit1 climit (in_offset=0.0 gain=1.0 upper_delta=0.0 + lower_delta=0.0 limit_range=1.0e-6 + fraction=FALSE) * * *** cmeter block *** c5 51 0 1.0e-6 a5 51 50 cmeter1 .model cmeter1 cmeter (gain=1.0) * * * *** lmeter block *** l6 61 0 1.0e-6 a6 61 60 lmeter1 .model lmeter1 lmeter (gain=1.0) * * * *** resistors to ground *** r1 1 0 10k r2 2 0 10k r3 3 0 10k * r10 10 0 10k r20 20 0 10k r30 30 0 10k r40 40 0 10k r50 50 0 10k r51 51 0 10k r60 60 0 10k r61 61 0 10k * * .end tmpk8ny_4pz/examples/xspice/original-examples/rtlinv.in0000644000175000017500000000064213546075722023561 0ustar carstencarstenrtlinv ckt - cascaded rtl inverters .width in=72 .opt acct list node lvlcod=2 .dc vin 0.0 2.5 0.025 .tran 2ns 200ns vcc 6 0 5 vin 1 0 pulse(0 5 2ns 2ns 2ns 80ns) rb1 1 2 10k rc1 6 3 1k q1 3 2 0 qnd rb2 3 4 10k q2 5 4 0 qnd rc2 6 5 1k .model qnd npn(bf=50 rb=70 rc=40 ccs=2pf tf=0.1ns tr=10ns cje=0.9pf + cjc=1.5pf pc=0.85 va=50) .print dc v(3) v(5) .plot dc v(3) .print tran v(3) v(5) .plot tran v(3) v(5) v(1) .end tmpk8ny_4pz/examples/xspice/original-examples/analog_models2_swept_dc.deck0000644000175000017500000000251613546075722027323 0ustar carstencarstenCode Model Test - Swept DC: int, d_dt, s_xfer, core, lcouple * * *** analysis type *** .dc v1 .1 10 .5 * *** input sources *** v1 1 0 DC 2 * * *** integrator block *** a1 1 10 int1 .model int1 int (in_offset=0.0 gain=2.0 out_lower_limit=-1.0e6 + out_upper_limit=1.0e6 limit_range=1.0e-6 out_ic=0.0) * * *** differentiator block *** a2 1 20 d_dt1 .model d_dt1 d_dt (out_offset=0.0 gain=1.0 out_lower_limit=-1.0e6 + out_upper_limit=1.0e6 limit_range=1.0e-6) * * *** s_xfer block *** a3 1 30 filter1 .model filter1 s_xfer (in_offset=0.0 gain=1.0 num_coeff=[1.0] + den_coeff=[1.0 1.414214 1.0] int_ic=[0.0 0.0] + denormalized_freq=1.0) * * * *** magnetic core & inductive coupling *** v40 45 46 0.0 a4 40 45 core1 .model core1 core (H_array=[-2.0 -1.0 1.0 2.0] + B_array=[-2.0 -1.0 1.0 2.0] + area=1.0 length=1.0 input_domain=1.0e-6 + fraction=TRUE mode=1 + in_low=-1.0 in_high=1.0 hyst=0.5 + out_lower_limit=-1.0 out_upper_limit=1.0) * * r5 1 50 100.0 a5 (50 0) (40 46) inductor1 .model inductor1 lcouple (num_turns=10) * * *** resistors to ground *** r1 1 0 1k * r10 10 0 1e12 r20 20 0 1e12 r30 30 0 1e12 r40 40 0 1e12 r45 45 0 1e12 r50 50 0 1e12 * * .end tmpk8ny_4pz/examples/xspice/original-examples/analog_models4_swept_dc.deck0000644000175000017500000000276213546075722027330 0ustar carstencarstenCode Model Test - Swept DC: sine, triangle, aswitch, zener, oneshot * * *** analysis type *** .dc v1 .1 15 .5 * *** input sources *** v1 1 0 DC 1.0 * v2 2 0 DC 1.0 * v3 3 0 DC 1.0 * * *** sine block *** a1 1 10 sine1 .model sine1 sine (cntl_array=[-1.0 0.0 1.0 2.0] + freq_array=[1.0 1.0 100.0 100.0] + out_low=-1.0 out_high=1.0) * * *** triangle block *** a2 1 20 triangle1 .model triangle1 triangle (cntl_array=[-1.0 0.0 1.0 2.0] + freq_array=[1.0 1.0 100.0 100.0] + out_low=-1.0 out_high=1.0 duty_cycle=0.8) * * *** aswitch block *** a3 1 (2 30) aswitch1 .model aswitch1 aswitch (cntl_off=0.0 cntl_on=1.0 log=TRUE + r_off=1.0e12 r_on=10.0) * * *** zener diode *** r4 1 40 100 a4 (0 40) zener1 .model zener1 zener (v_breakdown=8.0 i_breakdown=2.0e-2 + r_breakdown=1.0 i_rev=1.0e-6 i_sat=1.0e-12 + n_forward=1.0 limit_switch=FALSE) * * *** oneshot block *** a5 3 1 2 50 oneshot1 .model oneshot1 oneshot (cntl_array=[-1.0 0.0 1.0 2.0] + pw_array=[1.0 1.0 0.1 0.1] clk_trig=0.5 + pos_edge_trig=TRUE out_low=0.0 out_high=1.0 + rise_time=1.0e-6 rise_delay=1.0e-9 + fall_delay=1.0e-9 fall_time=1.0e-6 + retrig=FALSE) * * * * *** resistors to ground *** r1 1 0 10k r2 2 0 10k r3 3 0 10k * r10 10 0 10k r20 20 0 10k r30 30 0 10k r40 40 0 10k r50 50 0 10k r60 60 0 10k * * .end tmpk8ny_4pz/examples/xspice/original-examples/dot_model_ref.deck0000644000175000017500000000041613546075722025344 0ustar carstencarstenModel card reference * * This circuit contains simple gain blocks that share a * single .model card. * .tran 1e-5 1e-3 * v1 1 0 0.0 sin(0 1 1k) r1 1 0 1k * a1 1 2 gain_block r2 2 0 1k * a2 1 3 gain_block r3 3 0 1k * .model gain_block gain (in_offset = 1 gain=10) * .end tmpk8ny_4pz/examples/xspice/original-examples/mixed_ref.deck0000644000175000017500000000122113546075722024477 0ustar carstencarstenMixed references * * This circuit demonstrates the use of single-ended and * differential inputs and outputs. * * Note that digital models reference a single node for * their inputs and output (i.e. they are single-ended) * .tran 1e-5 1e-3 * v1 1 0 0.0 sin(0 1 5k) v2 2 0 0.0 sin(0 1 1k) * r1 1 0 1k r2 2 0 1k * * a1 %v 1 %i 10 times10 r10 10 0 1k * * a2 %vd (1 2) %id(11 12) times10 r11 11 0 1k r12 12 0 1k r11_12 11 12 1.0 * * r3 2 3 1k a3 %i 3 %v 13 times10 r13 13 0 1k * a4 [1] [digital_node1] adc .model adc adc_bridge * a5 digital_node1 digital_node2 inv .model inv d_inverter * * .model times10 gain (gain=10) * .end tmpk8ny_4pz/examples/xspice/original-examples/analog_models4_ac.deck0000644000175000017500000000300213546075722026067 0ustar carstencarstenCode Model Test - DC: sine, triangle, aswitch, zener, oneshot * * *** analysis type *** .ac dec 10 10 1000 * * *** input sources *** * v1 1 0 1.0 AC 1.0 0.0 * v2 2 0 DC 1.0 * v3 3 0 DC 1.0 * * * * *** sine block *** a1 1 10 sine1 .model sine1 sine (cntl_array=[-1.0 0.0 1.0 2.0] + freq_array=[1.0 1.0 100.0 100.0] + out_low=-1.0 out_high=1.0) * * *** triangle block *** a2 1 20 triangle1 .model triangle1 triangle (cntl_array=[-1.0 0.0 1.0 2.0] + freq_array=[1.0 1.0 100.0 100.0] + out_low=-1.0 out_high=1.0 duty_cycle=0.8) * * *** aswitch block *** a3 1 (2 30) aswitch1 .model aswitch1 aswitch (cntl_off=0.0 cntl_on=1.0 log=TRUE + r_off=1.0e12 r_on=10.0) * * *** zener diode *** r4 1 40 10K a4 (40 0) zener1 .model zener1 zener (v_breakdown=10.0 i_breakdown=2.0e-2 + r_breakdown=1.0 i_rev=1.0e-6 i_sat=1.0e-12 + n_forward=1.0 limit_switch=FALSE) * * *** oneshot block *** a5 3 1 2 50 oneshot1 .model oneshot1 oneshot (cntl_array=[-1.0 0.0 1.0 2.0] + pw_array=[1.0 1.0 0.1 0.1] clk_trig=0.5 + pos_edge_trig=TRUE out_low=0.0 out_high=1.0 + rise_time=1.0e-6 rise_delay=1.0e-9 + fall_delay=1.0e-9 fall_time=1.0e-6 + retrig=FALSE) * * * * *** resistors to ground *** r1 1 0 10k r2 2 0 10k r3 3 0 10k * r10 10 0 10k r20 20 0 10k r30 30 0 10k r40 40 0 10k r50 50 0 10k r60 60 0 10k * * .end tmpk8ny_4pz/examples/xspice/original-examples/analog_models3_transient.deck0000644000175000017500000000267513546075722027531 0ustar carstencarstenCode Model Test - Transient: hyst, limit, ilimit, climit, cmeter, lmeter * * *** analysis type *** .tran .1s 15s * *** input sources *** * v1 1 0 DC PWL(0 0 15 15) * v2 2 0 DC 10.0 * v3 3 0 DC -10.0 * * * *** hyst block *** a1 1 10 hyst1 .model hyst1 hyst (in_low=0.0 in_high=1.0 hyst=0.1 out_lower_limit=0.0 + out_upper_limit=1.0 input_domain=0.01 fraction=TRUE) * * *** limit block *** a2 1 20 limit1 .model limit1 limit (in_offset=0.0 gain=1.0 out_lower_limit=-1.0e6 + out_upper_limit=1.0e6 limit_range=1.0e-6 fraction=FALSE) * * *** ilimit block *** a3 1 2 3 30 ilimit1 .model ilimit1 ilimit (in_offset=0.0 gain=1.0 r_out_source=1.0 + r_out_sink=1.0 i_limit_source=1.0 + i_limit_sink=1.0 v_pwr_range=1.0e-3 + i_source_range=1.0e-6 i_sink_range=1.0e-6 + r_out_domain=1.0e-6) * * *** climit block *** a4 1 2 3 40 climit1 .model climit1 climit (in_offset=0.0 gain=1.0 upper_delta=0.0 + lower_delta=0.0 limit_range=1.0e-6 + fraction=FALSE) * * *** cmeter block *** c5 51 0 1.0e-6 a5 51 50 cmeter1 .model cmeter1 cmeter (gain=1.0) * * * *** lmeter block *** l6 61 0 1.0e-6 a6 61 60 lmeter1 .model lmeter1 lmeter (gain=1.0) * * * *** resistors to ground *** r1 1 0 10k r2 2 0 10k r3 3 0 10k * r10 10 0 10k r20 20 0 10k r30 30 0 10k r40 40 0 10k r50 50 0 10k r51 51 0 10k r60 60 0 10k r61 61 0 10k * * .end tmpk8ny_4pz/examples/xspice/original-examples/digital_models4.deck0000644000175000017500000000467613546075722025622 0ustar carstencarstenCode Model Test: State Machine, RAM * * *** analysis type *** .tran .01s 8s * *** input sources *** * vdata1 100 0 DC PWL( (0 0.0) (2 0.0) (2.0000000001 1.0) (3 1.0) + (3.5000000001 0.0) (4 0.0) ) * * vdata2 200 0 DC PWL( (0 0.0) (1.0 0.0) (1.0000000001 1.0) (2 1.0) + (2.0000000001 0.0) (3 0.0) (3.0000000001 1.0) (4 1.0) ) * * vclk 300 0 DC PWL( (0 0.0) (0.5 0.0) (0.50000000001 1.0) + (1.0 1.0) (1.00000000001 0.0) + (1.5 0.0) (1.50000000001 1.0) + (2.0 1.0) (2.00000000001 0.0) + (2.5 0.0) (2.50000000001 1.0) + (3.0 1.0) (3.00000000001 0.0) + (3.5 0.0) (3.50000000001 1.0) + (4.0 1.0) (4.00000000001 0.0) + (4.5 0.0) (4.50000000001 1.0) + (5.0 1.0) (5.00000000001 0.0) + (5.5 0.0) (5.50000000001 1.0) + (6.0 1.0) (6.00000000001 0.0) + (6.5 0.0) (6.50000000001 1.0) + (7.0 1.0) (7.00000000001 0.0) + (7.5 0.0) (7.50000000001 1.0) (8.0 1.0) ) * vaddr1 400 0 DC 0 * * vaddr2 500 0 DC PWL( (0 0.0) (0.6 0.0) (0.60000000001 1.0) + (0.9 1.0) (0.90000000001 0.0) + (2.6 0.0) (2.60000000001 1.0) + (2.9 1.0) (2.90000000001 0.0) (3.0 0.0) ) * * * vselect 600 0 DC PWL( (0 0.0) (1.0 0.0) (2 1.0) (2.0000000001 1.0) ) * * * * * *** adc_bridge block *** aconverter [100 200 300 400 500 600] [1 2 3 4 5 6] adc_bridge1 .model adc_bridge1 adc_bridge (in_low=0.1 in_high=0.9 + rise_delay=1.0e-12 fall_delay=1.0e-12) * * * *** state machine block *** *a1 [1 2] 3 4 [10 11] d_state1 *.model d_state1 d_state (clk_delay=1.0e-6 reset_delay=2.0e-6 *+ state_file="state.txt" reset_state=0 *+ input_load=1.0e-12 clk_load=1.0e-12 *+ reset_load=1.0e-12) * * *** RAM block *** a2 [1 2] [20 21] [3 4] 5 [6] d_ram1 .model d_ram1 d_ram (select_value=1 ic=0 + read_delay=1.0e-6 data_load=1.0e-12 + address_load=1.0e-12 select_load=1.0e-12 + enable_load=1.0e-12) * * * * * *** resistors to ground *** r1 100 0 10k r2 200 0 10k r3 300 0 10k r4 400 0 10k r5 500 0 10k r6 600 0 10k * * * .end tmpk8ny_4pz/examples/xspice/original-examples/param_defaults.deck0000644000175000017500000000036213546075722025531 0ustar carstencarstenParameter defaults * * This circuit contains a code model with * parameters of various types, which are all defaulted, * and prints the default values. * .op * r1 1 0 1k r2 2 0 1k r3 1 2 1k * a1 [1 2] mod .model mod print_param_types * .end tmpk8ny_4pz/examples/xspice/original-examples/digital_models3.deck0000644000175000017500000000520113546075722025602 0ustar carstencarstenCode Model Test: d latch, set-reset latch, frequency divider * * *** analysis type *** .tran .01s 8s * *** input sources *** * vdata1 100 0 DC PWL( (0 0.0) (2 0.0) (2.0000000001 1.0) (3 1.0) ) * * vdata2 200 0 DC PWL( (0 0.0) (1.0 0.0) (1.0000000001 1.0) (2 1.0) + (2.0000000001 0.0) (3 0.0) (3.0000000001 1.0) (4 1.0) ) * * vclk 300 0 DC PWL( (0 0.0) (0.5 0.0) (0.50000000001 1.0) + (1.0 1.0) (1.00000000001 0.0) + (1.5 0.0) (1.50000000001 1.0) + (2.0 1.0) (2.00000000001 0.0) + (2.5 0.0) (2.50000000001 1.0) + (3.0 1.0) (3.00000000001 0.0) + (3.5 0.0) (3.50000000001 1.0) + (4.0 1.0) (4.00000000001 0.0) + (4.5 0.0) (4.50000000001 1.0) + (5.0 1.0) (5.00000000001 0.0) + (5.5 0.0) (5.50000000001 1.0) + (6.0 1.0) (6.00000000001 0.0) + (6.5 0.0) (6.50000000001 1.0) + (7.0 1.0) (7.00000000001 0.0) + (7.5 0.0) (7.50000000001 1.0) (8.0 1.0) ) * * vset 400 0 DC 0.0 * * vreset 500 0 DC PWL( (0 0.0) (3.8 0.0) (3.80000000001 1.0) (4 1.0) ) * * *** adc_bridge block *** aconverter [100 200 300 400 500] [1 2 3 4 5] adc_bridge1 .model adc_bridge1 adc_bridge (in_low=0.1 in_high=0.9 + rise_delay=1.0e-12 fall_delay=1.0e-12) * * * *** d latch block *** a1 1 3 4 5 10 11 d_dlatch1 .model d_dlatch1 d_dlatch (data_delay=1.0e-6 enable_delay=2.0e-6 + set_delay=3.0e-6 reset_delay=4.0e-6 + ic=0 + rise_delay=5.0e-6 fall_delay=6.0e-6 + data_load=1.0e-12 enable_load=1.0e-12 + set_load=1.0e-12 reset_load=1.0e-12) * * *** set-reset latch block *** a2 1 2 3 4 5 20 21 d_srlatch1 .model d_srlatch1 d_srlatch (sr_delay=1.0e-6 enable_delay=2.0e-6 + set_delay=3.0e-6 reset_delay=4.0e-6 + ic=0 + rise_delay=5.0e-6 fall_delay=6.0e-6 + sr_load=1.0e-12 enable_load=1.0e-12 + set_load=1.0e-12 reset_load=1.0e-12) * * *** frequency divider block *** a3 3 30 d_fdiv1 .model d_fdiv1 d_fdiv (div_factor=3 high_cycles=2 + i_count=0 rise_delay=1.0e-6 fall_delay=2.0e-6 + freq_in_load=1.0e-12) * * * * * * *** resistors to ground *** r1 100 0 1k r2 200 0 1k r3 300 0 1k r4 400 0 1k r5 500 0 1k * * * .end tmpk8ny_4pz/examples/xspice/original-examples/analog_models3_dc.deck0000644000175000017500000000263613546075722026105 0ustar carstencarstenCode Model Test - DC: hyst, limit, ilimit, climit, cmeter, lmeter * * *** analysis type *** .op * *** input sources *** v1 1 0 DC 1.0 * v2 2 0 DC 10.0 * v3 3 0 DC -10.0 * * * *** hyst block *** a1 1 10 hyst1 .model hyst1 hyst (in_low=0.0 in_high=1.0 hyst=0.1 out_lower_limit=0.0 + out_upper_limit=1.0 input_domain=0.01 fraction=TRUE) * * *** limit block *** a2 1 20 limit1 .model limit1 limit (in_offset=0.0 gain=1.0 out_lower_limit=-1.0e6 + out_upper_limit=1.0e6 limit_range=1.0e-6 fraction=FALSE) * * *** ilimit block *** a3 1 2 3 30 ilimit1 .model ilimit1 ilimit (in_offset=0.0 gain=1.0 r_out_source=1.0 + r_out_sink=1.0 i_limit_source=1.0 + i_limit_sink=1.0 v_pwr_range=1.0e-3 + i_source_range=1.0e-3 i_sink_range=1.0e-3 + r_out_domain=1.0e-3) * * *** climit block *** a4 1 2 3 40 climit1 .model climit1 climit (in_offset=0.0 gain=1.0 upper_delta=0.0 + lower_delta=0.0 limit_range=1.0e-6 + fraction=FALSE) * * *** cmeter block *** c5 51 0 1.0e-6 a5 51 50 cmeter1 .model cmeter1 cmeter (gain=1.0) * * * *** lmeter block *** l6 61 0 1.0e-6 a6 61 60 lmeter1 .model lmeter1 lmeter (gain=1.0) * * * *** resistors to ground *** r1 1 0 10k r2 2 0 10k r3 3 0 10k * r10 10 0 10k r20 20 0 10k r30 30 0 10k r40 40 0 10k r50 50 0 10k r51 51 0 10k r60 60 0 10k r61 61 0 10k * * .end tmpk8ny_4pz/examples/xspice/original-examples/analog_models1_dc.deck0000644000175000017500000000215713546075722026101 0ustar carstencarstenCode Model Test - DC: gain, summer, mult, divide, pwl * * *** analysis type *** .op * *** input sources *** v1 1 0 DC 2 * v2 2 0 DC 2 * *** gain block *** a1 1 10 gain1 .model gain1 gain (in_offset=0.0 gain=2.0 out_offset=0.0) * * *** summer block *** a2 [1 2] 20 summer1 .model summer1 summer (in_offset=[0.0 0.0] in_gain=[1.0 1.0] + out_gain=1.0 out_offset=0.0) * * *** mult block *** a3 [1 1] 30 mult1 .model mult1 mult (in_offset=[0.0 0.0] in_gain=[1.0 1.0] + out_gain=0.1 out_offset=0.0) * * *** divider block *** a4 2 1 40 divide1 .model divide1 divide (num_offset=0.0 num_gain=1.0 den_offset=0.0 den_gain=1.0 + den_lower_limit=1.0e-10 den_domain=1.0e-16 + fraction=false out_gain=1.0 out_offset=0.0) * * *** pwl block *** a5 1 50 pwl1 .model pwl1 pwl (x_array=[-1.0 0.0 1.0 2.0 3.0 4.0 5.0] + y_array=[ 0.0 0.0 1.0 4.0 4.5 5.0 5.0] + input_domain=0.01 fraction=TRUE) * * *** resistors to ground *** r1 1 0 1k r2 2 0 1k r3 3 0 1k * r10 10 0 1k r20 20 0 1k r30 30 0 1k r40 40 0 1k r50 50 0 1k * * .end tmpk8ny_4pz/examples/xspice/original-examples/digital_models2.deck0000644000175000017500000000473613546075722025615 0ustar carstencarstenCode Model Test: d flip-flop, jk flip-flop, toggle ff, set-reset ff * * *** analysis type *** .tran .01s 4s * *** input sources *** * vdata1 100 0 DC PWL( (0 0.0) (2 0.0) (2.0000000001 1.0) (3 1.0) ) * * vdata2 200 0 DC PWL( (0 0.0) (1.0 0.0) (1.0000000001 1.0) (2 1.0) + (2.0000000001 0.0) (3 0.0) (3.0000000001 1.0) (4 1.0) ) * * vclk 300 0 DC PWL( (0 0.0) (0.5 0.0) (0.50000000001 1.0) + (1.0 1.0) (1.00000000001 0.0) + (1.5 0.0) (1.50000000001 1.0) + (2.0 1.0) (2.00000000001 0.0) + (2.5 0.0) (2.50000000001 1.0) + (3.0 1.0) (3.00000000001 0.0) + (3.5 0.0) (3.50000000001 1.0) (4.0 1.0) ) * * vset 400 0 DC 0.0 * * vreset 500 0 DC PWL( (0 0.0) (3.8 0.0) (3.80000000001 1.0) (4 1.0) ) * * *** adc_bridge blocks *** aconverter [100 200 300 400 500] [1 2 3 4 5] adc_bridge1 .model adc_bridge1 adc_bridge (in_low=0.1 in_high=0.9 + rise_delay=1.0e-12 fall_delay=1.0e-12) * * * *** d flip-flop block *** a1 1 3 4 5 10 11 d_dff1 .model d_dff1 d_dff (clk_delay=1.0e-6 set_delay=2.0e-6 + reset_delay=3.0e-6 ic=0 + rise_delay=4.0e-6 fall_delay=5.0e-6 + data_load=1.0e-12 clk_load=1.0e-12 + set_load=1.0e-12 reset_load=1.0e-12) * * *** jk flip-flop block *** a2 1 2 3 4 5 20 21 d_jkff1 .model d_jkff1 d_jkff (clk_delay=1.0e-6 set_delay=2.0e-6 + reset_delay=3.0e-6 ic=0 + rise_delay=4.0e-6 fall_delay=5.0e-6 + jk_load=1.0e-12 clk_load=1.0e-12 + set_load=1.0e-12 reset_load=1.0e-12) * * *** toggle flip-flop block *** a3 1 3 4 5 30 31 d_tff1 .model d_tff1 d_tff (clk_delay=1.0e-6 set_delay=2.0e-6 + reset_delay=3.0e-6 ic=0 + rise_delay=4.0e-6 fall_delay=5.0e-6 + t_load=1.0e-12 clk_load=1.0e-12 + set_load=1.0e-12 reset_load=1.0e-12) * * *** set-reset flip-flop block *** a4 1 2 3 4 5 40 41 d_srff1 .model d_srff1 d_srff (clk_delay=1.0e-6 set_delay=2.0e-6 + reset_delay=3.0e-6 ic=0 + rise_delay=4.0e-6 fall_delay=5.0e-6 + sr_load=1.0e-12 clk_load=1.0e-12 + set_load=1.0e-12 reset_load=1.0e-12) * * * * *** resistors to ground *** r1 100 0 1k r2 200 0 1k r3 300 0 1k r4 400 0 1k r5 500 0 1k * * * .end tmpk8ny_4pz/examples/xspice/original-examples/analog_models1_transient.deck0000644000175000017500000000221313546075722027513 0ustar carstencarstenCode Model Test - Transient: gain, summer, mult, divide, pwl * * *** analysis type *** .tran .1s 10s * *** input sources *** * v1 1 0 DC PWL(0 0 10 10) * v2 2 0 DC 2 * *** gain block *** a1 1 10 gain1 .model gain1 gain (in_offset=0.0 gain=2.0 out_offset=0.0) * * *** summer block *** a2 [1 2] 20 summer1 .model summer1 summer (in_offset=[0.0 0.0] in_gain=[1.0 1.0] + out_gain=1.0 out_offset=0.0) * * *** mult block *** a3 [1 1] 30 mult1 .model mult1 mult (in_offset=[0.0 0.0] in_gain=[1.0 1.0] + out_gain=0.1 out_offset=0.0) * * *** divider block *** a4 2 1 40 divide1 .model divide1 divide (num_offset=0.0 num_gain=1.0 den_offset=0.0 den_gain=1.0 + den_lower_limit=0.1 den_domain=1.0e-16 + fraction=false out_gain=1.0 out_offset=0.0) * * *** pwl block *** a5 1 50 pwl1 .model pwl1 pwl (x_array=[-1.0 0.0 1.0 2.0 3.0 4.0 5.0] + y_array=[ 0.0 0.0 1.0 4.0 4.5 5.0 5.0] + input_domain=0.01 fraction=TRUE) * * *** resistors to ground *** r1 1 0 1k r2 2 0 1k r3 3 0 1k * r10 10 0 1k r20 20 0 1k r30 30 0 1k r40 40 0 1k r50 50 0 1k * * .end tmpk8ny_4pz/examples/xspice/original-examples/analog_models1_swept_dc.deck0000644000175000017500000000220213546075722027312 0ustar carstencarstenCode Model Test - Swept DC: gain, summer, mult, divide, pwl * * *** analysis type *** .dc v1 .1 10 .1 * *** input sources *** v1 1 0 DC 2 * v2 2 0 DC 2 * *** gain block *** a1 1 10 gain1 .model gain1 gain (in_offset=0.0 gain=2.0 out_offset=0.0) * * *** summer block *** a2 [1 2] 20 summer1 .model summer1 summer (in_offset=[0.0 0.0] in_gain=[1.0 1.0] + out_gain=1.0 out_offset=0.0) * * *** mult block *** a3 [1 1] 30 mult1 .model mult1 mult (in_offset=[0.0 0.0] in_gain=[1.0 1.0] + out_gain=0.1 out_offset=0.0) * * *** divider block *** a4 2 1 40 divide1 .model divide1 divide (num_offset=0.0 num_gain=1.0 den_offset=0.0 den_gain=1.0 + den_lower_limit=1.0e-10 den_domain=1.0e-16 + fraction=false out_gain=1.0 out_offset=0.0) * * *** pwl block *** a5 1 50 pwl1 .model pwl1 pwl (x_array=[-1.0 0.0 1.0 2.0 3.0 4.0 5.0] + y_array=[ 0.0 0.0 1.0 4.0 4.5 5.0 5.0] + input_domain=0.01 fraction=TRUE) * * *** resistors to ground *** r1 1 0 1k r2 2 0 1k r3 3 0 1k * r10 10 0 1k r20 20 0 1k r30 30 0 1k r40 40 0 1k r50 50 0 1k * * .end tmpk8ny_4pz/examples/xspice/original-examples/bad_name.deck0000644000175000017500000000046013546075722024267 0ustar carstencarstenUnknown code model name * * This circuit contains a simple gain block to demonstrate * that the simulator reports an error if the code model name * is incorrect. * .tran 1e-5 1e-3 * v1 1 0 0.0 sin(0 1 1k) r1 1 0 1k * a1 1 2 gain_block .model gain_block this_model_doesnt_exist (gain=10) r2 2 0 1k * .end tmpk8ny_4pz/examples/xspice/original-examples/rca3040.in0000644000175000017500000000177713546075722023331 0ustar carstencarstenrca3040 ckt - rca 3040 wideband amplifier .ac dec 10 1 10ghz .dc vin -0.25 0.25 0.005 .tran 2.0ns 200ns vin 1 0 sin(0 0.1 50meg 0.5ns) ac 1 vcc 2 0 15.0 vee 3 0 -15.0 rs1 30 1 1k rs2 31 0 1k r1 5 3 4.8k r2 6 3 4.8k r3 9 3 811 r4 8 3 2.17k r5 8 0 820 r6 2 14 1.32k r7 2 12 4.5k r8 2 15 1.32k r9 16 0 5.25k r10 17 0 5.25k q1 2 30 5 qnl q2 2 31 6 qnl q3 10 5 7 qnl q4 11 6 7 qnl q5 14 12 10 qnl q6 15 12 11 qnl q7 12 12 13 qnl q8 13 13 0 qnl q9 7 8 9 qnl q10 2 15 16 qnl q11 2 14 17 qnl .model qnl npn bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf + cjc=2pf va 50 .end tmpk8ny_4pz/examples/xspice/original-examples/arbitrary_phase.deck0000644000175000017500000000054613546075722025725 0ustar carstencarstenArbitrary Phase SIN and PULSE Sources * * This circuit generates two cycles of sine and square waves * beginning at +45 degrees. * * Phase shift is specified after Berkeley defined parameters * on the independent source cards. * .tran 2e-5 2e-3 * v1 1 0 0.0 sin(0 1 1k 0 0 45.0) r1 1 0 1k * v2 2 0 0.0 pulse(-1 1 0 1e-5 1e-5 5e-4 1e-3 45.0) r2 2 0 1k * .end tmpk8ny_4pz/examples/xspice/original-examples/mixed_io_size.deck0000644000175000017500000000112513546075722025367 0ustar carstencarstenMixed IO sizes * * This circuit contains a collection of digital and analog * models with saclar and vector inputs of varying sizes. * .tran 1e-5 1e-3 * v1 1 0 0.0 pulse(0 1 1e-4) r1 1 0 1k * v2 2 0 0.0 sin(0 1 2k) r2 2 0 1k * abridge1 [1] [enable] atod .model atod adc_bridge * aosc [enable clk] clk nand .model nand d_nand (rise_delay=1e-4 fall_delay=1e-4) * ainv clk clk_bar inv .model inv d_inverter (rise_delay=1e-5 fall_delay=1e-5) * adac [clk clk_bar] [3 4] dac .model dac dac_bridge (t_rise=1e-5 t_fall=1e-5) * asum [1 2 3 4] 5 sum .model sum summer * r3 3 0 1k r4 4 0 1k r5 5 0 1k * .end tmpk8ny_4pz/examples/xspice/original-examples/supply_ramping.deck0000644000175000017500000000075613546075722025622 0ustar carstencarstenSupply ramping option * * This circuit demonstrates the use of the option * "ramptime" which ramps independent sources and the * capacitor and inductor initial conditions from * zero to their final value during the time period * specified. * * .tran 0.1 5 .option ramptime=0.2 * a1 1 0 cap .model cap capacitor (c=1000uf ic=1) r1 1 0 1k * a2 2 0 ind .model ind inductor (l=1H ic=1) r2 2 0 1.0 * v1 3 0 1.0 r3 3 0 1k * i1 4 0 1e-3 r4 4 0 1k * v2 5 0 0.0 sin(0 1 0.3 0 0 45.0) r5 5 0 1k * .end tmpk8ny_4pz/examples/xspice/original-examples/initial_conditions.deck0000644000175000017500000000065613546075722026432 0ustar carstencarstenCapacitor and inductor with natural initial conditions * * This circuit contains a capacitor and an inductor with * initial conditions on them. Each of the components * has a parallel resistor so that an exponential decay * of the initial condition occurs with a time constant of * 1 second. * .tran 0.1 5 * a1 1 0 cap .model cap capacitor (c=1000uf ic=1) r1 1 0 1k * a2 2 0 ind .model ind inductor (l=1H ic=1) r2 2 0 1.0 * .end tmpk8ny_4pz/examples/xspice/original-examples/param_types.deck0000644000175000017500000000062313546075722025066 0ustar carstencarstenParameter types * * This circuit contains a code model which accepts several * parameters of various types and prints them. * .op * r1 1 0 1k r2 2 0 1k r3 1 2 1k * a1 [1 2] mod .model mod print_param_types + integer=2 + real=3.0 + complex=<4.0 5.0> + string=six + integer_array=[7 8] + real_array=[9.0 10.0] + complex_array=[< 11.0 12.0 > < 13.0 14.0 >] + string_array=[fifteen sixteen] * .end tmpk8ny_4pz/examples/xspice/original-examples/analog_models2_dc.deck0000644000175000017500000000240013546075722026071 0ustar carstencarstenCode Model Test - DC: int, d_dt, s_xfer, core, lcouple * * *** analysis type *** .op * *** input sources *** v1 1 0 DC 1.0 * * * * *** integrator block *** a1 1 10 int1 .model int1 int (in_offset=0.0 gain=2.0 out_lower_limit=-1.0e6 + out_upper_limit=1.0e6 limit_range=1.0e-6 out_ic=0.0) * * *** differentiator block *** a2 1 20 d_dt1 .model d_dt1 d_dt (out_offset=0.0 gain=1.0 out_lower_limit=-1.0e6 + out_upper_limit=1.0e6 limit_range=1.0e-6) * * *** s_xfer block *** a3 1 30 filter1 .model filter1 s_xfer (in_offset=0.0 gain=1.0 num_coeff=[1.0] + den_coeff=[1.0 1.425625 1.516203] int_ic=[0.0 0.0] + denormalized_freq=6283.2) * * *** magnetic core & inductive coupling *** a4 40 45 core1 .model core1 core (H_array=[-2.0 -1.0 1.0 2.0] + B_array=[-2.0 -1.0 1.0 2.0] + area=1.0 length=1.0 input_domain=1.0e-6 + fraction=TRUE mode=1 + in_low=-1.0 in_high=1.0 hyst=0.5 + out_lower_limit=-1.0 out_upper_limit=1.0) * * r5 1 50 100.0 a5 (50 0) (40 45) inductor1 .model inductor1 lcouple (num_turns=10) * * *** resistors to ground *** r1 1 0 1k * r10 10 0 1k r20 20 0 1k r30 30 0 1k r40 40 0 1k r50 50 0 1k * * .end tmpk8ny_4pz/examples/xspice/original-examples/mosamp2.in0000644000175000017500000000253313546075722023622 0ustar carstencarstenmosamp2 - mos amplifier - transient .options acct abstol=10n vntol=10n .tran 0.1us 10us m1 15 15 1 32 m w=88.9u l=25.4u m2 1 1 2 32 m w=12.7u l=266.7u m3 2 2 30 32 m w=88.9u l=25.4u m4 15 5 4 32 m w=12.7u l=106.7u m5 4 4 30 32 m w=88.9u l=12.7u m6 15 15 5 32 m w=44.5u l=25.4u m7 5 20 8 32 m w=482.6u l=12.7u m8 8 2 30 32 m w=88.9u l=25.4u m9 15 15 6 32 m w=44.5u l=25.4u m10 6 21 8 32 m w=482.6u l=12.7u m11 15 6 7 32 m w=12.7u l=106.7u m12 7 4 30 32 m w=88.9u l=12.7u m13 15 10 9 32 m w=139.7u l=12.7u m14 9 11 30 32 m w=139.7u l=12.7u m15 15 15 12 32 m w=12.7u l=207.8u m16 12 12 11 32 m w=54.1u l=12.7u m17 11 11 30 32 m w=54.1u l=12.7u m18 15 15 10 32 m w=12.7u l=45.2u m19 10 12 13 32 m w=270.5u l=12.7u m20 13 7 30 32 m w=270.5u l=12.7u m21 15 10 14 32 m w=254u l=12.7u m22 14 11 30 32 m w=241.3u l=12.7u m23 15 20 16 32 m w=19u l=38.1u m24 16 14 30 32 m w=406.4u l=12.7u m25 15 15 20 32 m w=38.1u l=42.7u m26 20 16 30 32 m w=381u l=25.4u m27 20 15 66 32 m w=22.9u l=7.6u cc 7 9 40pf cl 66 0 70pf vin 21 0 pulse(0 5 1ns 1ns 1ns 5us 10us) vccp 15 0 dc +15 vddn 30 0 dc -15 vb 32 0 dc -20 .model m nmos(nsub=2.2e15 uo=575 ucrit=49k uexp=0.1 tox=0.11u xj=2.95u + level=2 cgso=1.5n cgdo=1.5n cbd=4.5f cbs=4.5f ld=2.4485u nss=3.2e10 + kp=2e-5 phi=0.6 ) .print tran v(20) v(66) .plot tran v(20) v(66) .end tmpk8ny_4pz/examples/xspice/original-examples/analog_models4_dc.deck0000644000175000017500000000273713546075722026110 0ustar carstencarstenCode Model Test - DC: sine triangle aswitch zener oneshot * * *** analysis type *** .op * *** input sources *** v1 1 0 DC 1.0 * v2 2 0 DC 1.0 * v3 3 0 DC 1.0 * * *** sine block *** a1 1 10 sine1 .model sine1 sine (cntl_array=[-1.0 0.0 1.0 2.0] + freq_array=[1.0 1.0 100.0 100.0] + out_low=-1.0 out_high=1.0) * * *** triangle block *** a2 1 20 triangle1 .model triangle1 triangle (cntl_array=[-1.0 0.0 1.0 2.0] + freq_array=[1.0 1.0 100.0 100.0] + out_low=-1.0 out_high=1.0 duty_cycle=0.8) * * *** aswitch block *** a3 1 (2 30) aswitch1 .model aswitch1 aswitch (cntl_off=0.0 cntl_on=1.0 log=TRUE + r_off=1.0e12 r_on=10.0) * * *** zener diode *** r4 1 40 10K a4 (40 0) zener1 .model zener1 zener (v_breakdown=10.0 i_breakdown=2.0e-2 + r_breakdown=1.0 i_rev=1.0e-6 i_sat=1.0e-12 + n_forward=1.0 limit_switch=FALSE) * * *** oneshot block *** a5 3 1 2 50 oneshot1 .model oneshot1 oneshot (cntl_array=[-1.0 0.0 1.0 2.0] + pw_array=[1.0 1.0 0.1 0.1] clk_trig=0.5 + pos_edge_trig=TRUE out_low=0.0 out_high=1.0 + rise_time=1.0e-6 rise_delay=1.0e-9 + fall_delay=1.0e-9 fall_time=1.0e-6 + retrig=FALSE) * * * * *** resistors to ground *** r1 1 0 10k r2 2 0 10k r3 3 0 10k * r10 10 0 10k r20 20 0 10k r30 30 0 10k r40 40 0 10k r50 50 0 10k r60 60 0 10k * * .end tmpk8ny_4pz/examples/xspice/original-examples/bad_io.deck0000644000175000017500000000052013546075722023753 0ustar carstencarstenInvalid number of inputs/outputs * * This circuit contains a simple gain block to demonstrate * that the simulator reports an error if the number of * connections on the code model is incorrect. * .tran 1e-5 1e-3 * v1 1 0 0.0 sin(0 1 1k) r1 1 0 1k * a1 1 2 3 gain_block a2 1 gain_block .model gain_block gain (gain=10) r2 2 0 1k * .end tmpk8ny_4pz/examples/xspice/original-examples/hybrid_models1_dc.deck0000644000175000017500000000155513546075722026122 0ustar carstencarstenCode Model Test - DC: d_osc, dac_bridge, adc_bridge * * *** analysis type *** .op * *** input sources *** v1 1 0 DC 2 * v2 2 0 DC 2 * *** d_osc block *** a1 1 10 d_osc1 .model d_osc1 d_osc (cntl_array=[-1.0 0.0 1.0 2.0] + freq_array=[100 100 1000 1000] + duty_cycle=0.5 init_phase=0.0 + rise_delay=1.0e-6 fall_delay=2.0e-6) * *** dac_bridge block *** a2 [10] [20] dac_bridge1 .model dac_bridge1 dac_bridge (out_low=0.5 out_high=4.5 out_undef=1.8 + input_load=1.0e-12 + t_rise=1.0e-6 t_fall=2.0e-6) * * *** adc_bridge block *** a3 [2] [30] adc_bridge1 .model adc_bridge1 adc_bridge (in_low=0.7 in_high=2.4 + rise_delay=1.0e-12 fall_delay=2.0e-12) * * * *** resistors to ground *** r1 1 0 1k r2 2 0 1k * r20 20 0 1k * * .end tmpk8ny_4pz/examples/xspice/original-examples/analog_models1_ac.deck0000644000175000017500000000230513546075722026071 0ustar carstencarstenCode Model Test - AC: gain, summer, mult, divide, pwl * * *** analysis type *** .ac dec 10 10 1000 * *** input sources *** * v1 1 0 1.0 AC 1.0 0.0 * v2 2 0 1.0 AC 1.0 0.0 * v3 3 0 DC 2.0 * v4 4 0 0.5 AC 0.5 0.0 * *** gain block *** a1 1 10 gain1 .model gain1 gain (in_offset=0.0 gain=2.0 out_offset=0.0) * * *** summer block *** a2 [1 2] 20 summer1 .model summer1 summer (in_offset=[0.0 0.0] in_gain=[1.0 1.0] + out_gain=1.0 out_offset=0.0) * * *** mult block *** a3 [1 3] 30 mult1 .model mult1 mult (in_offset=[0.0 0.0] in_gain=[1.0 1.0] + out_gain=1.0 out_offset=0.0) * * *** divider block *** a4 1 3 40 divide1 .model divide1 divide (num_offset=0.0 num_gain=1.0 den_offset=0.0 den_gain=1.0 + den_lower_limit=1.0e-10 den_domain=1.0e-16 + fraction=false out_gain=1.0 out_offset=0.0) * * *** pwl block *** a5 4 50 pwl1 .model pwl1 pwl (x_array=[-1.0 0.0 1.0 2.0 3.0 4.0 5.0] + y_array=[-1.0 0.0 1.0 4.0 4.5 5.0 5.0] + input_domain=0.01 fraction=TRUE) * * *** resistors to ground *** r1 1 0 1k r2 2 0 1k r3 3 0 1k r4 4 0 1k * r10 10 0 1k r20 20 0 1k r30 30 0 1k r40 40 0 1k r50 50 0 1k * * .end tmpk8ny_4pz/examples/xspice/original-examples/polarity.deck0000644000175000017500000000060013546075722024400 0ustar carstencarstenPolarity of voltages and currents * * This circuit contains a set of gain blocks to evaluate * the polarity of voltages and currents on code models * .tran 1e-5 1e-3 * v1 1 0 0.0 sin(0 1 1k) * r1 1 0 1k * * a1 %v 1 %v 10 times10 r10 10 0 1k * r1_2 1 2 1k a2 %i 2 %v 11 times10 r11 11 0 1k * a3 1 %i 12 times10 r12 12 0 1k * * .model times10 gain (gain=10) * .end tmpk8ny_4pz/examples/xspice/original-examples/diffpair.in0000644000175000017500000000101113546075722024016 0ustar carstencarstendifpair ckt - simple differential pair *.width in=72 .opt acct list node lvlcod=2 *.tf v(5) vin *.dc vin -0.25 0.25 0.005 *.ac dec 10 1 10ghz .tran 5ns 500ns vin 1 0 sin(0 0.1 5meg) ac 1 vcc 8 0 12 vee 9 0 -12 q1 4 2 6 qnl q2 5 3 6 qnl rs1 1 2 1k rs2 3 0 1k rc1 4 8 10k rc2 5 8 10k q3 6 7 9 qnl q4 7 7 9 qnl rbias 7 8 20k .model qnl npn(bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf cjc=2pf + va=50) .print dc v(4) v(5) .plot dc v(5) .print ac vm(5) vp(5) .plot ac vm(5) vp(5) .print tran v(4) v(5) .plot tran v(5) .end tmpk8ny_4pz/examples/xspice/original-examples/mosmem.in0000644000175000017500000000135613546075722023543 0ustar carstencarstenmosmem - mos memory cell .width in=72 .opt abstol=1u .opt acct list node .tran 20ns 2us vdd 9 0 dc 5 vs 7 0 pulse(2 0 520ns 20ns 20ns 500ns 2000ns) vw 1 0 pulse(0 2 20ns 20ns 500ns 200ns) vwb 2 0 pulse(2 0 20ns 20ns 20ns 2000ns 2000ns) m1 3 1 0 0 mod w=250u l=5u m2 4 2 0 0 mod w=250u l=5u m3 9 9 3 0 mod w=5u l=5u m4 9 9 4 0 mod w=5u l=5u m5 5 7 3 0 mod w=50u l=5u m6 6 7 4 0 mod w=50u l=5u m7 5 6 0 0 mod w=250u l=5u m8 6 5 0 0 mod w=250u l=5u m9 9 9 5 0 mod w=5u l=5u m10 9 9 6 0 mod w=5u l=5u m11 8 4 0 0 mod w=250u l=5u m12 9 9 8 0 mod w=5u l=5u .model mod nmos(vto=0.5 phi=0.7 kp=1.0e-6 gamma=1.83 lambda=0.115 + level=1 cgso=1u cgdo=1u cbd=50p cbs=50p) .print dc v(5) v(6) .plot dc v(6) .plot tran v(6) v(5) v(7) v(1) v(2) .end tmpk8ny_4pz/examples/xspice/original-examples/schmitt.in0000644000175000017500000000104013546075722023707 0ustar carstencarstenschmitt ckt - ecl compatible schmitt trigger .width in=72 .opt acct list node lvlcod=2 .tran 10ns 1000ns vin 1 0 pulse(-1.6 -1.2 10ns 400ns 400ns 100ns 10000ns) vee 8 0 -5 rin 1 2 50 rc1 0 3 50 r1 3 5 185 r2 5 8 760 rc2 0 6 100 re 4 8 260 rth1 7 8 125 rth2 7 0 85 cload 7 0 5pf q1 3 2 4 qstd off q2 6 5 4 qstd q3 0 6 7 qstd q4 0 6 7 qstd .model qstd npn(is=1.0e-16 bf=50 br=0.1 rb=50 rc=10 tf=0.12ns tr=5ns + cje=0.4pf pe=0.8 me=0.4 cjc=0.5pf pc=0.8 mc=0.333 ccs=1pf va=50) .print tran v(1) v(3) v(5) v(6) .plot tran v(3) v(5) v(6) v(1) .end tmpk8ny_4pz/examples/xspice/original-examples/bad_io_type.deck0000644000175000017500000000101613546075722025015 0ustar carstencarstenInvalid input/output type * * This circuit contains a simple gain block to demonstrate * that the simulator reports an error if an invalid type * is used with the code model connections. * .tran 1e-5 1e-3 * v1 1 0 0.0 sin(0 1 1k) r1 1 0 1k * * Both connections on the gain block must be analog, but * the second is specified as digital * a1 1 %d 2 gain_block .model gain_block gain (gain=10) r2 2 0 1k * * Node 1 below should be a digital node, but is an analog node * a2 [1] [3] dac .model dac dac_bridge r3 3 0 1k * .end tmpk8ny_4pz/examples/xspice/original-examples/spice3.deck0000644000175000017500000000075313546075722023734 0ustar carstencarstenA Berkeley SPICE3 compatible circuit * * This circuit contains only Berkeley SPICE3 components. * * The circuit is an AC coupled transistor amplifier with * a sinewave input at node "1", a gain of approximately -3.9, * and output on node "coll". * .tran 1e-5 2e-3 * vcc vcc 0 12.0 vin 1 0 0.0 ac 1.0 sin(0 1 1k) * ccouple 1 base 10uF * rbias1 vcc base 100k rbias2 base 0 24k * q1 coll base emit generic .model generic npn * rcollector vcc coll 3.9k remitter emit 0 1k * .end tmpk8ny_4pz/examples/xspice/original-examples/analog_models2_transient.deck0000644000175000017500000000257713546075722027531 0ustar carstencarstenCode Model Test - Transient: int, d_dt, s_xfer, core, lcouple * * *** analysis type *** .tran .1s 10s * *** input sources *** * v1 1 0 DC PWL(0 0 10 10) * v2 2 0 DC PWL(0 0 0.1 0.1 0.2 0.9 0.3 1.0 10 1.0) * * * *** integrator block *** a1 1 10 int1 .model int1 int (in_offset=0.0 gain=2.0 out_lower_limit=-1.0e6 + out_upper_limit=1.0e6 limit_range=1.0e-6 out_ic=0.0) * * *** differentiator block *** a2 1 20 d_dt1 .model d_dt1 d_dt (out_offset=0.0 gain=1.0 out_lower_limit=-1.0e6 + out_upper_limit=1.0e6 limit_range=1.0e-6) * * *** s_xfer block *** a3 2 30 filter1 .model filter1 s_xfer (in_offset=0.0 gain=1.0 num_coeff=[1.0] + den_coeff=[1.0 1.414214 1.0] int_ic=[0.0 0.0] + denormalized_freq=1.0) * * * *** magnetic core & inductive coupling *** a4 40 45 core1 .model core1 core (H_array=[-2.0 -1.0 1.0 2.0] + B_array=[-2.0 -1.0 1.0 2.0] + area=1.0 length=1.0 input_domain=1.0e-6 + fraction=TRUE mode=1 + in_low=-1.0 in_high=1.0 hyst=0.5 + out_lower_limit=-1.0 out_upper_limit=1.0) * * r5 1 50 100.0 a5 (50 0) (40 45) inductor1 .model inductor1 lcouple (num_turns=10) * * *** resistors to ground *** r1 1 0 1k r2 2 0 1k * r10 10 0 1k r20 20 0 1k r30 30 0 1k r40 40 0 1k r50 50 0 1k * * .end tmpk8ny_4pz/examples/xspice/original-examples/bad_param.deck0000644000175000017500000000053013546075722024445 0ustar carstencarstenUnknown code model parameter * * This circuit contains a simple gain block to demonstrate * that the simulator reports an error if the .model card * references a parameter that doesn't exist * .tran 1e-5 1e-3 * v1 1 0 0.0 sin(0 1 1k) r1 1 0 1k * a1 1 2 gain_block .model gain_block gain (this_parameter_doesnt_exist=2 gain=10) r2 2 0 1k * .end tmpk8ny_4pz/examples/xspice/original-examples/parsing.deck0000644000175000017500000000041013546075722024177 0ustar carstencarstenParsing * * This circuit contains a simple gain block to demonstrate * that the simulator parses the syntax used to reference * code models. * .tran 1e-5 1e-3 * v1 1 0 0.0 sin(0 1 1k) r1 1 0 1k * a1 1 2 gain_block .model gain_block gain (gain=10) r2 2 0 1k * .end tmpk8ny_4pz/examples/xspice/original-examples/long_names.deck0000644000175000017500000000100013546075722024652 0ustar carstencarstenLong names * * This circuit contains a sine wave source followed by a * gain block code model with a gain of 10. Long names * are used for instances, models, and nodes. * .tran 1e-5 1e-3 * v1_123456789_123456789_1234 1 0 0.0 sin(0 1 2k) * r1_123456789_123456789_1234 1 0 1k * a1_123456789_123456789_1234 1 out_123456789_123456789_1234 + gain_block_123456789_123456789_1234 * .model gain_block_123456789_123456789_1234 gain (gain=10) r2_123456789_123456789_1234 out_123456789_123456789_1234 0 1k * .end tmpk8ny_4pz/examples/xspice/original-examples/mixed_mode.deck0000644000175000017500000000421413546075722024654 0ustar carstencarstenMixed IO types * * This circuit contains a mixture of IO types, including * analog, digital, user-defined (real), and 'null'. * * The circuit demonstrates the use of the digital and * user-defined node capability to model system-level designs * such as sampled-data filters. The simulated circuit * contains a digital oscillator enabled after 100us. The * square wave oscillator output is divided by 8 with a * ripple counter. The result is passed through a digital * filter to convert it to a sine wave. * .tran 1e-5 1e-3 * v1 1 0 0.0 pulse(0 1 1e-4 1e-6) r1 1 0 1k * abridge1 [1] [enable] atod .model atod adc_bridge * aclk [enable clk] clk nand .model nand d_nand (rise_delay=1e-5 fall_delay=1e-5) * adiv2 div2_out clk NULL NULL NULL div2_out dff adiv4 div4_out div2_out NULL NULL NULL div4_out dff adiv8 div8_out div4_out NULL NULL NULL div8_out dff .model dff d_dff * abridge2 div8_out enable filt_in node_bridge2 .model node_bridge2 d_to_real (zero=-1 one=1) * xfilter filt_in clk filt_out dig_filter * abridge3 filt_out a_out node_bridge3 .model node_bridge3 real_to_v * rlpf1 a_out oa_minus 10k * xlpf 0 oa_minus lpf_out opamp * rlpf2 oa_minus lpf_out 10k clpf lpf_out oa_minus 0.01uF * * .subckt dig_filter filt_in clk filt_out * .model n0 real_gain (gain=1.0) .model n1 real_gain (gain=2.0) .model n2 real_gain (gain=1.0) .model g1 real_gain (gain=0.125) .model zm1 real_delay .model d0a real_gain (gain=-0.75) .model d1a real_gain (gain=0.5625) .model d0b real_gain (gain=-0.3438) .model d1b real_gain (gain=1.0) * an0a filt_in x0a n0 an1a filt_in x1a n1 an2a filt_in x2a n2 * az0a x0a clk x1a zm1 az1a x1a clk x2a zm1 * ad0a x2a x0a d0a ad1a x2a x1a d1a * az2a x2a filt1_out g1 az3a filt1_out clk filt2_in zm1 * an0b filt2_in x0b n0 an1b filt2_in x1b n1 an2b filt2_in x2b n2 * az0b x0b clk x1b zm1 az1b x1b clk x2b zm1 * ad0 x2b x0b d0b ad1 x2b x1b d1b * az2b x2b clk filt_out zm1 * .ends dig_filter * * .subckt opamp plus minus out * r1 plus minus 300k a1 %vd (plus minus) outint lim .model lim limit (out_lower_limit = -12 out_upper_limit = 12 + fraction = true limit_range = 0.2 gain=300e3) r3 outint out 50.0 r2 out 0 1e12 * .ends opamp * * .end tmpk8ny_4pz/examples/xspice/original-examples/io_types.deck0000644000175000017500000000132713546075722024377 0ustar carstencarstenIO types * * This circuit contains a mix of input output types including * voltages, currents, digital signals, and user defined * signals. * .tran 1e-6 1e-4 * v1 1 0 0.0 pulse(0 1 2e-5) r1 1 0 1k * abridge1 [1] [enable] node_bridge1 .model node_bridge1 adc_bridge * aclk [enable clk] clk nand .model nand d_nand (rise_delay=1e-5 fall_delay=1e-5) * abridge2 clk enable real_node1 node_bridge2 .model node_bridge2 d_to_real (zero=-1 one=1) * again real_node1 real_node2 times10 .model times10 real_gain (gain=10) * abridge3 real_node2 analog_node node_bridge3 .model node_bridge3 real_to_v * rout analog_node 0 1k * again2 %vnam v1 %i i_out gain_block .model gain_block gain (gain=10) ri_out i_out 0 1k * * .end tmpk8ny_4pz/examples/xspice/original-examples/analog_models2_ac.deck0000644000175000017500000000254013546075722026073 0ustar carstencarstenCode Model Test - Swept DC: int, d_dt, s_xfer, core, lcouple * * *** analysis type *** .ac dec 10 10 1000 * * *** input sources *** * v1 1 0 1.0 AC 1.0 0.0 * * *** integrator block *** a1 1 10 int1 .model int1 int (in_offset=0.0 gain=2.0 out_lower_limit=-1.0e6 + out_upper_limit=1.0e6 limit_range=1.0e-6 out_ic=0.0) * * *** differentiator block *** a2 1 20 d_dt1 .model d_dt1 d_dt (out_offset=0.0 gain=1.0 out_lower_limit=-1.0e6 + out_upper_limit=1.0e6 limit_range=1.0e-6) * * *** s_xfer block *** a3 1 30 filter1 .model filter1 s_xfer (in_offset=0.0 gain=1.0 num_coeff=[1.0] + den_coeff=[1.0 1.414214 1.0] int_ic=[0.0 0.0] + denormalized_freq=628.0) * * * *** magnetic core & inductive coupling *** v40 45 46 0.0 a4 40 45 core1 .model core1 core (H_array=[-2.0 -1.0 1.0 2.0] + B_array=[-2.0 -1.0 1.0 2.0] + area=1.0 length=1.0 input_domain=1.0e-6 + fraction=TRUE mode=1 + in_low=-1.0 in_high=1.0 hyst=0.5 + out_lower_limit=-1.0 out_upper_limit=1.0) * * r5 1 50 100.0 a5 (50 0) (40 46) inductor1 .model inductor1 lcouple (num_turns=10) * * *** resistors to ground *** r1 1 0 1k * r10 10 0 1e12 r20 20 0 1e12 r30 30 0 1e12 r40 40 0 1e12 r45 45 0 1e12 r50 50 0 1e12 * * .end tmpk8ny_4pz/examples/xspice/original-examples/io_ordering.deck0000644000175000017500000000056413546075722025046 0ustar carstencarstenIO ordering * * This circuit contains a simple gain block. The order of * the nodes listed on the instance line follows the order * of the connections defined in the 'ifspec.ifs' file for * the model. Refer to /atesse-su/src/cml/gain/ifspec.ifs . * .tran 1e-5 1e-3 * v1 1 0 0.0 sin(0 1 1k) r1 1 0 1k * a1 1 2 gain_block .model gain_block gain (gain=10) r2 2 0 1k * .end tmpk8ny_4pz/examples/xspice/original-examples/digital_models1.deck0000644000175000017500000000332413546075722025604 0ustar carstencarstenCode Model Test: buffer, inverter, and, nand, or, nor, xor, xnor * * *** analysis type *** .tran .01s 4s * *** input sources *** * v2 200 0 DC PWL( (0 0.0) (2 0.0) (2.0000000001 1.0) (3 1.0) ) * v1 100 0 DC PWL( (0 0.0) (1.0 0.0) (1.0000000001 1.0) (2 1.0) + (2.0000000001 0.0) (3 0.0) (3.0000000001 1.0) (4 1.0) ) * * *** adc_bridge blocks *** aconverter [200 100] [2 1] adc_bridge1 .model adc_bridge1 adc_bridge (in_low=0.1 in_high=0.9 + rise_delay=1.0e-12 fall_delay=1.0e-12) * * * *** buffer block *** a1 1 10 d_buffer1 .model d_buffer1 d_buffer (rise_delay=1.0e-6 fall_delay=2.0e-6 + input_load=1.0e-12) * * *** inverter block *** a2 1 20 d_inv1 .model d_inv1 d_inverter (rise_delay=1.0e-6 fall_delay=2.0e-6 + input_load=1.0e-12) * * *** and block *** a3 [1 2] 30 d_and1 .model d_and1 d_and (rise_delay=1.0e-6 fall_delay=2.0e-6 + input_load=1.0e-12) * * *** nand block *** a4 [1 2] 40 d_nand1 .model d_nand1 d_nand (rise_delay=1.0e-6 fall_delay=2.0e-6 + input_load=1.0e-12) * * *** or block *** a5 [1 2] 50 d_or1 .model d_or1 d_or (rise_delay=1.0e-6 fall_delay=2.0e-6 + input_load=1.0e-12) * * *** nor block *** a6 [1 2] 60 d_nor1 .model d_nor1 d_nor (rise_delay=1.0e-6 fall_delay=2.0e-6 + input_load=1.0e-12) * * *** xor block *** a7 [1 2] 70 d_xor1 .model d_xor1 d_xor (rise_delay=1.0e-6 fall_delay=2.0e-6 + input_load=1.0e-12) * * *** xnor block *** a8 [1 2] 80 d_xnor1 .model d_xnor1 d_xnor (rise_delay=1.0e-6 fall_delay=2.0e-6 + input_load=1.0e-12) * * * *** resistors to ground *** r1 100 0 1k r2 200 0 1k * * * .end tmpk8ny_4pz/examples/xspice/original-examples/mixed_case.deck0000644000175000017500000000037713546075722024651 0ustar carstencarstenMiXeD CaSe * * This circuit contains a simple gain block to demonstrate * that the simulator deck parsing code is case-insensitive. * .TrAn 1E-5 1e-3 * V1 1 0 0.0 sIn(0 1 1k) r1 1 0 1k * A1 1 2 GaIn_BlOcK .MODel gAiN_bLoCk GAin (gaIN=10) r2 2 0 1K * .eNd tmpk8ny_4pz/examples/xspice/delta-sigma/0000755000175000017500000000000013546075722020460 5ustar carstencarstentmpk8ny_4pz/examples/xspice/delta-sigma/count-latch-dac.cir0000644000175000017500000000560113546075722024127 0ustar carstencarsten* counter, latch DAC * 10 bit synchronous digital counter * inhibit at overflow, no revolving .subckt count10 din dinb dclk drs dout1 dout2 dout3 dout4 dout5 dout6 dout7 dout8 dout9 dout10 * j k clk set reset out nout ajk1 din dinb diclk ds1 drs dout1 dnout1 jkflop ajk2 dout1 dout1 diclk ds2 drs dout2 dnout2 jkflop ajk3 djk3 djk3 diclk ds3 drs dout3 dnout3 jkflop ajk4 djk4 djk4 diclk ds4 drs dout4 dnout4 jkflop ajk5 djk5 djk5 diclk ds1 drs dout5 dnout5 jkflop ajk6 djk6 djk6 diclk ds2 drs dout6 dnout6 jkflop ajk7 djk7 djk7 diclk ds3 drs dout7 dnout8 jkflop ajk8 djk8 djk8 diclk ds4 drs dout8 dnout8 jkflop ajk9 djk9 djk9 diclk ds3 drs dout9 dnout9 jkflop ajk10 djk10 djk10 diclk ds4 drs dout10 dnout10 jkflop aand1 [dout1 dout2] djk3 and1 aand2 [dout1 dout2 dout3] djk4 and1 aand3 [dout1 dout2 dout3 dout4] djk5 and1 aand4 [dout1 dout2 dout3 dout4 dout5] djk6 and1 aand5 [dout1 dout2 dout3 dout4 dout5 dout6] djk7 and1 aand6 [dout1 dout2 dout3 dout4 dout5 dout6 dout7] djk8 and1 aand7 [dout1 dout2 dout3 dout4 dout5 dout6 dout7 dout8] djk9 and1 aand8 [dout1 dout2 dout3 dout4 dout5 dout6 dout7 dout8 dout9] djk10 and1 * inhibit revolving of counter, just let it saturate * (footnote p. 57) aand_all [dout1 dout2 dout3 dout4 dout5 dout6 dout7 dout8 dout9 dout10] dinhibit nand1 aandclk [dclk dinhibit] diclk and1 .model nand1 d_nand(rise_delay = 1e-9 fall_delay = 1e-9 + input_load = 0.5e-12) .model and1 d_and(rise_delay = 1e-9 fall_delay = 1e-9 + input_load = 0.5e-12) .model jkflop d_jkff(clk_delay = 1.0e-9 set_delay = 1e-9 + reset_delay = 1e-9 ic = 0 rise_delay = 1.0e-9 + fall_delay = 1e-9) .ends count 10 ** 10 bit edge triggered latch .subckt latch10 din1 din2 din3 din4 din5 din6 din7 din8 din9 din10 + dout1 dout2 dout3 dout4 dout5 dout6 dout7 dout8 dout9 dout10 dclk *data clk set reset out nout aff1 din1 dclk dzero dzero dout1 dnout1 flop1 aff2 din2 dclk dzero dzero dout2 dnout2 flop1 aff3 din3 dclk dzero dzero dout3 dnout3 flop1 aff4 din4 dclk dzero dzero dout4 dnout4 flop1 aff5 din5 dclk dzero dzero dout5 dnout5 flop1 aff6 din6 dclk dzero dzero dout6 dnout6 flop1 aff7 din7 dclk dzero dzero dout7 dnout7 flop1 aff8 din8 dclk dzero dzero dout8 dnout8 flop1 aff9 din9 dclk dzero dzero dout9 dnout9 flop1 aff10 din10 dclk dzero dzero dout10 dnout10 flop1 .model flop1 d_dff(clk_delay = 1e-9 set_delay = 0 + reset_delay = 0 ic = 0 rise_delay = 1e-9 + fall_delay = 1e-9) .ends latch10 ** emulation of 10 bit DAC .subckt dac10 din1 din2 din3 din4 din5 din6 din7 din8 din9 din10 aout .param vref=1 abridge1 [din1 din2 din3 din4 din5 din6 din7 din8 din9 din10] + [ain1 ain2 ain3 ain4 ain5 ain6 ain7 ain8 ain9 ain10] dac1 BVout aout 0 V = 'vref'*(v(ain10)/2 + v(ain9)/4 + v(ain8)/8 + v(ain7)/16 + v(ain6)/32 + + v(ain5)/64 + v(ain4)/128 + v(ain3)/256 + v(ain2)/512 + v(ain1)/1024) .model dac1 dac_bridge(out_low = 0 out_high = 1 out_undef = 0.5 + input_load = 5.0e-12 t_rise = 1e-9 + t_fall = 1e-9) .ends dac10 tmpk8ny_4pz/examples/xspice/delta-sigma/mod1-ct.cir0000644000175000017500000000242413546075722022425 0ustar carstencarsten* delta sigma modulator * first order, continuous time .subckt mod1 ainp ainn dclk ddffq ddffqb * integrator and summer Ri1 ainn inintn 500 Rf1 adffq inintn 500 Cint1 outintp inintn 1n .IC v(outintp) = 0 v(inintp) = 0 * Rshunt1 outintp 0 100Meg Rshunt2 initn 0 100Meg * Ri2 ainp inintp 500 Rf2 adffqb inintp 500 Cint2 outintn inintp 1n .IC v(outintn) = 0 v(inintn) = 0 * Rshunt3 outintn 0 100Meg Rshunt4 inintp 0 100Meg * aint %vd(inintp inintn) %vd(outintp outintn) amp .model amp gain ( in_offset =0.0 gain =100000 + out_offset = 0) * latched comparator (code model or B source, analog in, digital out) *acomp %vd(outintp outintn) acompout limit5 *.model limit5 limit(in_offset=0 gain=100000 out_lower_limit=-1.0 *+ out_upper_limit=1.0 limit_range=0.10 fraction=FALSE) * BComp acompout 0 V = (V(outintp) - V(outintn)) >= 0 ? 1 : -1 * abridge2 [acompout] [dcompout] adc_buff .model adc_buff adc_bridge(in_low = 0 in_high = 0) * * D flip flop: data clk set reset out nout adff1 dcompout dclk ds drs ddffq ddffqb flop2 .model flop2 d_dff(clk_delay = 1e-9 set_delay = 1.0e-9 + reset_delay = 1.0e-9 ic = 0 rise_delay = 1.0e-9 + fall_delay = 1e-9) abridge1 [ddffq ddffqb dclk] [adffq adffqb aclk] dac1 .model dac1 dac_bridge(out_low = -1 out_high = 1 out_undef = 0 + input_load = 5.0e-12 .ends mod1 tmpk8ny_4pz/examples/xspice/delta-sigma/counter-test.cir0000644000175000017500000000241413546075722023614 0ustar carstencarsten* 10 bit synchronous digital counter * inhibit at overflow, no revolving * according to Schreier, Temes: Understanding Delta-Sigma Data Converters, 2005 * Fig. 2.27, p. 58 * clock generation * PULSE(V1 V2 TD TR TF PW PER) vclk aclk 0 dc 0 pulse(0 1 1u 2n 2n 1u 2u) * reset generation * single pulse, actual value stored in latch and read by DAC vres ars 0 dc 0 pulse(0 1 1.1m 2n 2n 1u 2.2m) vone aone 0 dc 1 vzero azero 0 dc 0 * digital one * digital zero abridge1 [aone azero] [done dzero] adc_buff .model adc_buff adc_bridge(in_low = 0.5 in_high = 0.5) * digital clock * digital reset abridge2 [aclk ars] [dclk dreset] adc_buff .model adc_buff adc_bridge(in_low = 0.5 in_high = 0.5) XCounter done done dclk dreset dout1 dout2 dout3 dout4 dout5 dout6 dout7 dout8 dout9 dout10 count10 Xlatch dout1 dout2 dout3 dout4 dout5 dout6 dout7 dout8 dout9 dout10 + dlout1 dlout2 dlout3 dlout4 dlout5 dlout6 dlout7 dlout8 dlout9 dlout10 dreset + latch10 Xdac dlout1 dlout2 dlout3 dlout4 dlout5 dlout6 dlout7 dlout8 dlout9 dlout10 adacout dac10 .include count-latch-dac.cir .control tran 1u 2.5m eprint dout1 dout2 dout3 dout4 dout5 dout6 dout7 dout8 dout9 dout10 > digi4b.txt eprint dlout1 dlout2 dlout3 dlout4 dlout5 dlout6 dlout7 dlout8 dlout9 dlout10 >> digi4b.txt plot adacout .endc .end tmpk8ny_4pz/examples/xspice/delta-sigma/README0000644000175000017500000000114313546075722021337 0ustar carstencarstenA simple delta sigma converter using XSPICE according to Schreier, Temes: Understanding Delta-Sigma Data Converters, 2005 Fig. 2.13, p. 31; Fig. 2.27, p.58 delta-sigma-1.cir converter complete, tested against sine input mod1-ct.cir first order modulator consists of analog continuous time integrator and digitally latched comparator count-latch-dac.cir contains subcircuits of 10 bit digital latch 10 bit counter, non-revolving, saturating simple 10 bit DAC with analog B source mod1-ct-test.cir test of modulator with sine input, shows noise shaping 20dB/decade counter-test.cir simple test with reset tmpk8ny_4pz/examples/xspice/delta-sigma/delta-sigma-1.cir0000644000175000017500000000721513546075722023511 0ustar carstencarsten* delta sigma A/D converter 9 bit * first-order continuous time delta sigma modulator * sinc filter with counter * according to Schreier, Temes: Understanding Delta-Sigma Data Converters, 2005 * Fig. 2.13, p. 31; Fig. 2.27, p.58 ** sine input signal parameters .param infreq=500 inampl=0.5 ** clock .param clkfreq=5Meg ** simulation time .param simtime = 2m .csparam simtime = 'simtime' ** sample clock cycles .param samples=500 .global dzero done .options interp ; strongly reduces memory requirements ** input signal * SIN(VO VA FREQ TD THETA) vin inp inm dc 0 sin(0 'inampl' 'infreq' 0 0) * steps from -0.5 to 0.4 *vin inp inm dc 0 pwl(0 -0.5 0.2m -0.5 0.201m -0.4 0.4m -0.4 0.401m -0.3 0.6m -0.3 *+ 0.601m -0.2 0.8m -0.2 0.801m -0.1 1.0m -0.1 1.001m 0.0 1.2m 0.0 1.201m 0.1 1.4m 0.1 *+ 1.401m 0.2 1.6m 0.2 1.601m 0.3 1.8m 0.3 1.801m 0.4 2m 0.4) ** clock and constant logic levels * PULSE(V1 V2 TD TR TF PW PER) vclk aclk 0 dc 0 pulse(0 1 0.1u 2n 2n '1/clkfreq/2' '1/clkfreq') * digital one * digital zero vone aone 0 dc 1 vzero azero 0 dc 0 abridge1 [aone azero] [done dzero] adc_buff .model adc_buff adc_bridge(in_low = 0.5 in_high = 0.5) * digital clock abridge2 [aclk] [dclk] adc_buff .model adc_buff adc_bridge(in_low = 0.5 in_high = 0.5) ****** delta-sigma converter**************************************************************** * modulator * inp inm: analog in + - * dclk digital clock in * dv, dvb: modulator non-inverting/inverting out Xmod inp inm dclk dv dvb mod1 * sinc filter, decimator * dlout1 ..dlout10: converter 10 bit digital out xsinc dv dvb dclk dlout1 dlout2 dlout3 dlout4 dlout5 dlout6 dlout7 dlout8 dlout9 dlout10 sinc1 ******************************************************************************************** ** DACs for measuring and plotting * converter output Xdac_latch dlout1 dlout2 dlout3 dlout4 dlout5 dlout6 dlout7 dlout8 dlout9 dlout10 adaclout dac10 * counter inside of sinc filter Xdac_counter xsinc.dout1 xsinc.dout2 xsinc.dout3 xsinc.dout4 xsinc.dout5 + xsinc.dout6 xsinc.dout7 xsinc.dout8 xsinc.dout9 xsinc.dout10 adaccout dac10 * load modulator mod1 subcircuit .include mod1-ct.cir * load counter, d-latch and 10 bit DAC .include count-latch-dac.cir ** sinc filter 1st order subcircuit .subckt sinc1 din dinb dclk dlout1 dlout2 dlout3 dlout4 dlout5 dlout6 dlout7 dlout8 dlout9 dlout10 XCounter din dinb dclk ddivndel2 dout1 dout2 dout3 dout4 dout5 dout6 dout7 dout8 dout9 dout10 count10 Xlatch dout1 dout2 dout3 dout4 dout5 dout6 dout7 dout8 dout9 dout10 + dlout1 dlout2 dlout3 dlout4 dlout5 dlout6 dlout7 dlout8 dlout9 dlout10 ddivndel1 + latch10 * digital divider dclk/samples adivn dclk ddivn divider .model divider d_fdiv(div_factor = 'samples' high_cycles = 1 + i_count = 0 rise_delay = 1e-9 fall_delay = 1e-9) * clock delays adelay ddivn ddivndel1 buff1 ; set latch adelay2 ddivndel1 ddivndel2 buff1 ; reset counter .model buff1 d_buffer(rise_delay = '1/clkfreq/8' fall_delay = '1/clkfreq/8' + input_load = 0.5e-12) .ends sinc1 ** for plotting abridge22 [dclk xsinc.ddivndel1 xsinc.ddivndel2 dv] [acclk acset acres acin] dac1 .model dac1 dac_bridge(out_low = 0 out_high = 1 out_undef = 0.5 + input_load = 5.0e-12 t_rise = 1e-9 + t_fall = 1e-9) .control save inp inm adaclout adaccout ; save memory space tran 0.1u $&simtime * analog out, scaled 'manually'; sinc filter counter; analog differential in plot 4.1*(adaclout-0.486) adaccout v(inp)-v(inm) ylimit -0.6 0.6 * modulator dig out * eprint dv > digi1.txt * *eprint dlout1 dlout2 dlout3 dlout4 dlout5 dlout6 dlout7 dlout8 dlout9 dlout10 *+ xsinc.dout1 xsinc.dout2 xsinc.dout3 xsinc.dout4 xsinc.dout5 *+ xsinc.dout6 xsinc.dout7 xsinc.dout8 xsinc.dout9 xsinc.dout10 > digi4b.txt .endc .end tmpk8ny_4pz/examples/xspice/delta-sigma/mod1-ct-test.cir0000644000175000017500000000235513546075722023405 0ustar carstencarsten* first-order delta sigma modulator * continuous time * according to Schreier, Temes: Understanding Delta-Sigma Data Converters, 2005 * Fig. 2.13, p. 31 ** signal .param infreq=13k inampl=0.3 ** clock .param clkfreq=5Meg ** simulation time .param simtime = 5m .csparam simtime = 'simtime' ** input signal *SIN(VO VA FREQ TD THETA) vin in+ in- dc 0 sin(0 'inampl' 'infreq' 0 0) * clock generation * PULSE(V1 V2 TD TR TF PW PER) vclk aclk 0 dc 0 pulse(0 1 0.1u 2n 2n '1/clkfreq/2' '1/clkfreq') * digital one * digital zero vone aone 0 dc 1 vzero azero 0 dc 0 abridge1 [aone azero] [done dzero] adc_buff .model adc_buff adc_bridge(in_low = 0.5 in_high = 0.5) * digital clock abridge2 [aclk] [dclk] adc_buff .model adc_buff adc_bridge(in_low = 0.5 in_high = 0.5) Xmod in+ in- dclk dv dvb mod1 * load mod1 subcircuit .include mod1-ct.cir .control save xmod.adffq in+ in- xmod.outintp xmod.outintn tran 0.01u $&simtime * digit density vs input plot xmod.adffq "v(in+) - v(in-)" xlimit 0.1m 0.2m * modulator integrator out, digital out plot xmod.outintp-xmod.outintn xmod.adffq xlimit 0.140m 0.148m *eprint dv dclk > digi1.txt linearize xmod.adffq fft xmod.adffq * noise shaping 20dB/decade plot db(xmod.adffq) xlimit 10k 1Meg xlog ylimit -20 -120 .endc .end tmpk8ny_4pz/examples/TransmissionLines/0000755000175000017500000000000013546075722020462 5ustar carstencarstentmpk8ny_4pz/examples/TransmissionLines/cpl_ibm3.sp0000644000175000017500000000243713546075722022524 0ustar carstencarstenMixed single and coupled transmission lines c1g 1 0 1P l11a 1 1a 6e-9 r1a7 1a 7 0.025K rin6 in 6 0.075K l67 6 7 10e-9 c7g 7 0 1P P2 1 7 0 2 8 0 PLINE .MODEL PLINE CPL +R = 2.25 0 + 2.25 +L = 0.6e-6 0.05e-6 + 0.6e-6 +G = 0 0 0 +C = 1.2e-9 -0.11e-9 + 1.2e-9 +length = 0.03 c2g 2 0 0.5P r2g 2 0 0.05K r23 2 3 0.025K l34 3 4 5e-9 c4g 4 0 2P l89 8 9 10e-9 c9g 9 0 1P Y1 9 0 10 0 txline .model txline txl R = 1 L =0.6e-6 G = 0 C= 1.0e-9 length=0.04 l1011 10 11 10e-9 c11g 11 0 0.5P r11g 11 0 0.05K r1112 11 12 0.025K l1213 12 13 5e-9 c13g 13 0 2P r1116 11 16 0.025K l1617 16 17 5e-9 c17g 17 0 2P P1 4 2 13 17 0 5 14 15 18 0 PLINE1 .MODEL PLINE1 CPL +R = 3.5 0 0 0 + 3.5 0 0 + 3.5 0 + 3.5 +L = +1e-6 0.11e-6 0.03e-6 0 + 1e-6 0.11e-6 0.03e-6 + 1e-6 0.11e-6 + 1e-6 +G = 0 0 0 0 0 0 0 0 0 0 +C = +1.5e-9 -0.17e-9 -0.03e-9 0 + 1.5e-9 -0.17e-9 -0.03e-9 + 1.5e-9 -0.17e-9 + 1.5e-9 +length = 0.02 D1 5 0 dmod D2 14 0 dmod D3 15 0 dmod D4 18 0 dmod .model dmod d VES in 0 PULSE (0 5 0 1.1ns 0.1ns 0.9ns 200ns) .control TRAN 0.2N 10.0N plot v(3) v(6) v(7) v(8) v(11) v(15) .endc .END tmpk8ny_4pz/examples/TransmissionLines/ltra4_1_line.sp0000644000175000017500000001013313546075722023301 0ustar carstencarsten BJTdriver -- 24inch lossy line LTRA model -- DiodeCircuit * This unclassified circuit is from Raytheon, courtesy Gerry Marino. * It consists of a BJT driver connected by a 24 inch lossy line to a * passive load consisting mostly of diodes. Each inch * of the lossy line is modelled by 10 LRC lumps in the Raytheon * model. * The line parameters (derived from the Raytheon input file) are: * L = 9.13nH per inch * C = 3.65pF per inch * R = 0.2 ohms per inch * the circuit v1 1 0 0v pulse(0 4 1ns 1ns 1ns 20ns 40ns) vcc 10 0 5v *rseries 1 2 5 x1 1 2 10 bjtdrvr *t1 2 0 3 0 z0=50.0136 td=4.38119ns rel=10 o2 2 0 3 0 lline1 *x2 2 3 oneinch *x2 100 101 twentyfourinch *x2 100 101 xtwentyfourinch vtest1 2 100 0 vtest2 101 3 0 x3 3 4 10 dioload *rl 3 0 5 *dl 0 3 diod2 .model lline1 ltra rel=1 r=0.2 g=0 l=9.13e-9 c=3.65e-12 len=24 steplimit .model qmodn npn(bf=100 rb=100 cje=0.09375pF cjc=0.28125pF is=1e-12 +pe=0.5 pc=0.5) .model qmodpd npn(bf=100 rb=100 cje=0.08187pF cjc=0.2525pF is=1e-12 +pe=0.5 pc=0.5) .model qmodpdmine npn(bf=100 rb=100 cje=0.08187pF cjc=0.05pF is=1e-12 +pe=0.5 pc=0.5) .model dmod1 d(n=2.25 is=1.6399e-4 bv=10) .model dmod2 d .model dmod d(vj=0.3v) .model diod1 d(tt=0.75ns vj=0.6 rs=909 bv=10) .model diod2 d(tt=0.5ns vj=0.3 rs=100 bv=10) .options acct +reltol=1e-3 abstol=1e-14 .control tran 0.1ns 60ns plot v(1) v(2) v(3) .endc * bjt driver - 19=input, 268=output, 20=vcc; wierd node numbers from * the Raytheon file .subckt bjtdrvr 19 268 20 q1 22 18 13 qmodn q2 18 16 13 qmodn qd2 21 9 0 qmodn q4 14 14 0 qmodn q3 16 15 14 qmodpd q5 8 13 17 qmodn q6 25 12 0 qmodn q7 6 17 0 qmodpd qd1 26 10 0 qmodn q8 7 11 10 qmodn q10 268 17 0 qmodpdmine *q10 268 17 0 qmodpd q9 7 10 268 qmodn d1 0 19 dmod1 d2 18 19 dmod2 d3 13 19 dmod dq1 18 22 dmod dq2 16 18 dmod d502 9 21 dmod dq3 15 16 dmod d10 24 8 dmod d4 15 6 dmod dq6 12 25 dmod dq7 17 6 dmod dd1 17 10 dmod d7 11 6 dmod dd2 17 26 dmod d9 23 6 dmod dq8 11 7 dmod d501 17 268 dmod dq9 10 7 dmod d14 20 27 dmod d8 0 268 dmod r1 18 20 6k r2 22 20 2.2k r4 0 13 7k rd1 9 13 2k rd2 21 13 3k r3 16 20 10k r5 15 20 15k r9 0 17 4k r6 24 20 750 r10 12 17 2k r12 24 11 1.5k r11 25 17 3k r15 23 20 10k r13 0 10 15k r14 7 27 12 .ends bjtdrvr * subckt dioload - diode load: input=28, output=4, vcc=5 .subckt dioload 28 4 5 *comment out everything in dioload except d5 and r503, and watch * the difference in results obtained between a tran 0.1ns 20ns and * a tran 0.01ns 20ns c1 28 0 5pF r503 0 4 5.55 r4 0 28 120k r5 1 5 7.5k d5 4 28 diod2 d1 1 28 diod1 d4 2 0 diod1 d3 3 2 diod1 d2 1 3 diod1 .ends dioload * subckt lump - one RLC lump of the lossy line *10 segments per inch .subckt lump 1 2 *r1 1 3 0.02 *c1 3 0 0.365pF *l1 3 2 0.913nH l1 1 3 0.913nH c1 2 0 0.365pF r1 3 2 0.02 *r1 1 3 0.01 *c1 3 0 0.1825pF *l1 3 4 0.4565nH *r2 4 5 0.01 *c2 5 0 0.1825pF *l2 5 2 0.4565nH *c1 1 0 0.365pF *l1 1 2 0.913nH .ends lump .subckt oneinch 1 2 x1 1 3 lump x2 3 4 lump x3 4 5 lump x4 5 6 lump x5 6 7 lump x6 7 8 lump x7 8 9 lump x8 9 10 lump x9 10 11 lump x10 11 2 lump .ends oneinch .subckt fourinch 1 2 x1 1 3 oneinch x2 3 4 oneinch x3 4 5 oneinch x4 5 2 oneinch .ends fourinch .subckt fiveinch 1 2 x1 1 3 oneinch x2 3 4 oneinch x3 4 5 oneinch x4 5 6 oneinch x5 6 2 oneinch .ends fiveinch .subckt twentyfourinch 1 2 x1 1 3 fiveinch x2 3 4 fiveinch x3 4 5 fiveinch x4 5 6 fiveinch x5 6 2 fourinch .ends twentyfourinch *modelling using R and lossless lines *5 segments per inch .model llfifth ltra nocontrol noprint rel=10 r=0 g=0 l=9.13e-9 +c=3.65e-12 len=0.2 steplimit quadinterp .subckt xlump 1 2 o1 1 0 3 0 llfifth r1 2 3 0.04 .ends xlump .subckt xoneinch 1 2 x1 1 3 xlump x2 3 4 xlump x3 4 5 xlump x4 5 6 xlump x5 6 2 xlump *x5 6 7 xlump *x6 7 8 xlump *x7 8 9 xlump *x8 9 10 xlump *x9 10 11 xlump *x10 11 2 xlump .ends xoneinch .subckt xfourinch 1 2 x1 1 3 xoneinch x2 3 4 xoneinch x3 4 5 xoneinch x4 5 2 xoneinch .ends xfourinch .subckt xfiveinch 1 2 x1 1 3 xoneinch x2 3 4 xoneinch x3 4 5 xoneinch x4 5 6 xoneinch x5 6 2 xoneinch .ends xfiveinch .subckt xtwentyfourinch 1 2 x1 1 3 xfiveinch x2 3 4 xfiveinch x3 4 5 xfiveinch x4 5 6 xfiveinch x5 6 2 xfourinch .ends xtwentyfourinch .end tmpk8ny_4pz/examples/TransmissionLines/ltra6_2_line.sp0000644000175000017500000002023513546075722023310 0ustar carstencarstenBJTdriver -- 2in st. lin -- 20in coupled line LTRA -- 2in st line -- DiodeCircuit * This unclassified circuit is from Raytheon, courtesy Gerry Marino. * * _______ * -------- 2in _________________ 2in | | * | BJT |______| |______|Diode| * | |------| |------| | * | Drvr | line | 2-wire | line |rcvr.| * -------- | coupled | |_____| * | transmission | * |-/\/\/\/\----| line |-------\/\/\/\/\----| * | 50ohms | | 50ohms | * | | | | * Ground ----------------- Ground * * * Each inch of the lossy line is modelled by 10 LRC lumps in the * Raytheon model. * The line parameters (derived from the Raytheon input file) are: * L = 9.13nH per inch * C = 3.65pF per inch * R = 0.2 ohms per inch * K = 0.482 [coupling coefficient; K = M/sqrt(L1*L2)] * Cc = 1.8pF per inch * * coupled ltra model generated using the standalone program * multi_decomp * the circuit v1 1 0 0v pulse(0 4 1ns 1ns 1ns 20ns 40ns) vcc 10 0 5v * series termination *x1 1 oof 10 bjtdrvr *rseries oof 2 50 x1 1 2 10 bjtdrvr rt1 3 0 50 * convolution model x2 2 3 4 5 conv2wetcmodel * rlc segments model *x2 2 3 4 5 rlc2wetcmodel x3 4 dioload rt2 5 0 50 .model qmodn npn(bf=100 rb=100 cje=0.09375pF cjc=0.28125pF is=1e-12 +pe=0.5 pc=0.5) .model qmodpd npn(bf=100 rb=100 cje=0.08187pF cjc=0.2525pF is=1e-12 +pe=0.5 pc=0.5) .model qmodpdmine npn(bf=100 rb=100 cje=0.08187pF cjc=0.05pF is=1e-12 +pe=0.5 pc=0.5) .model dmod1 d(n=2.25 is=1.6399e-4 bv=10) .model dmod2 d .model dmod d(vj=0.3v) .model diod1 d(tt=0.75ns vj=0.6 rs=909 bv=10) .model diod2 d(tt=0.5ns vj=0.3 rs=100 bv=10) .options acct reltol=1e-3 abstol=1e-12 .control tran 0.1ns 60ns plot v(2) v(4) v(5) .endc * bjt driver - 19=input, 268=output, 20=vcc; wierd node numbers from * the Raytheon file .subckt bjtdrvr 19 268 20 q1 22 18 13 qmodn q2 18 16 13 qmodn qd2 21 9 0 qmodn q4 14 14 0 qmodn q3 16 15 14 qmodpd q5 8 13 17 qmodn q6 25 12 0 qmodn q7 6 17 0 qmodpd qd1 26 10 0 qmodn q8 7 11 10 qmodn *q10 268 17 0 qmodpd q10 268 17 0 qmodpdmine q9 7 10 268 qmodn d1 0 19 dmod1 d2 18 19 dmod2 d3 13 19 dmod dq1 18 22 dmod dq2 16 18 dmod d502 9 21 dmod dq3 15 16 dmod d10 24 8 dmod d4 15 6 dmod dq6 12 25 dmod dq7 17 6 dmod dd1 17 10 dmod d7 11 6 dmod dd2 17 26 dmod d9 23 6 dmod dq8 11 7 dmod d501 17 268 dmod dq9 10 7 dmod d14 20 27 dmod d8 0 268 dmod r1 18 20 6k r2 22 20 2.2k r4 0 13 7k rd1 9 13 2k rd2 21 13 3k r3 16 20 10k r5 15 20 15k r9 0 17 4k r6 24 20 750 r10 12 17 2k r12 24 11 1.5k r11 25 17 3k r15 23 20 10k r13 0 10 15k r14 7 27 12 .ends bjtdrvr * subckt dioload - diode load: input=28, output=4, vcc=5 .subckt dioload 28 *comment out everything in dioload except d5 and r503, and watch * the difference in results obtained between a tran 0.1ns 20ns and * a tran 0.01ns 20ns vccint 5 0 5v c1 28 0 5pF r503 0 4 5.55 r4 0 28 120k r5 1 5 7.5k d5 4 28 diod2 d1 1 28 diod1 d4 2 0 diod1 d3 3 2 diod1 d2 1 3 diod1 .ends dioload * subckt rlclump - one RLC lump of the lossy line .subckt rlclump 1 2 *r1 1 3 0.02 *c1 3 0 0.365pF *l1 3 2 0.913nH l1 1 3 0.913nH c1 2 0 0.365pF r1 3 2 0.02 *r1 1 3 0.01 *c1 3 0 0.1825pF *l1 3 4 0.4565nH *r2 4 5 0.01 *c2 5 0 0.1825pF *l2 5 2 0.4565nH *c1 1 0 0.365pF *l1 1 2 0.913nH .ends lump .subckt rlconeinch 1 2 x1 1 3 rlclump x2 3 4 rlclump x3 4 5 rlclump x4 5 6 rlclump x5 6 7 rlclump x6 7 8 rlclump x7 8 9 rlclump x8 9 10 rlclump x9 10 11 rlclump x10 11 2 rlclump .ends rlconeinch .subckt rlctwoinch 1 2 x1 1 3 rlconeinch x2 3 2 rlconeinch .ends rlctwoinch .subckt rlcfourinch 1 2 x1 1 3 rlconeinch x2 3 4 rlconeinch x3 4 5 rlconeinch x4 5 2 rlconeinch .ends rlcfourinch .subckt rlcfiveinch 1 2 x1 1 3 rlconeinch x2 3 4 rlconeinch x3 4 5 rlconeinch x4 5 6 rlconeinch x5 6 2 rlconeinch .ends rlcfiveinch .subckt rlctwentyrlcfourinch 1 2 x1 1 3 rlcfiveinch x2 3 4 rlcfiveinch x3 4 5 rlcfiveinch x4 5 6 rlcfiveinch x5 6 2 rlcfourinch .ends rlctwentyrlcfourinch .subckt rlclumpstub A B C D x1 A int1 rlcfiveinch x2 int1 int2 rlcfiveinch x3 int2 1 rlcfiveinch x4 1 2 rlcfourinch x5 1 int3 rlcfiveinch x6 int3 B rlconeinch x7 2 C rlcfiveinch x8 2 D rlcfourinch .ends rlclumpstub .subckt ltrastub A B C D o1 A 0 1 0 lline15in o2 1 0 B 0 lline6in o3 1 0 2 0 lline4in o4 2 0 C 0 lline5in o5 2 0 D 0 lline4in .ends ltrastub *modelling using R and lossless lines *5 segments per inch .model llfifth ltra nocontrol rel=10 r=0 g=0 l=9.13e-9 +c=3.65e-12 len=0.2 steplimit quadinterp .subckt xlump 1 2 o1 1 0 3 0 llfifth r1 2 3 0.04 .ends xlump .subckt xoneinch 1 2 x1 1 3 xlump x2 3 4 xlump x3 4 5 xlump x4 5 6 xlump x5 6 2 xlump *x5 6 7 xlump *x6 7 8 xlump *x7 8 9 xlump *x8 9 10 xlump *x9 10 11 xlump *x10 11 2 xlump .ends xoneinch .subckt xFourinch 1 2 x1 1 3 xoneinch x2 3 4 xoneinch x3 4 5 xoneinch x4 5 2 xoneinch .ends xfourinch .subckt xfiveinch 1 2 x1 1 3 xoneinch x2 3 4 xoneinch x3 4 5 xoneinch x4 5 6 xoneinch x5 6 2 xoneinch .ends xfiveinch .subckt xlumpstub A B C D x1 A int1 xfiveinch x2 int1 int2 xfiveinch x3 int2 1 xfiveinch x4 1 2 xfourinch x5 1 int3 xfiveinch x6 int3 B xoneinch x7 2 C xfiveinch x8 2 D xfourinch .ends xlumpstub * modelling a 2 wire coupled system using RLC lumps * 10 segments per inch * * 1---xxxxx----2 * 3---xxxxx----4 .subckt rlc2wlump 1 3 2 4 l1 1 5 0.913nH c1 2 0 0.365pF r1 5 2 0.02 l2 3 6 0.913nH c2 4 0 0.365pF r2 6 4 0.02 cmut 2 4 0.18pF k12 l1 l2 0.482 .ends rlc2wlump .subckt rlc2woneinch 1 2 3 4 x1 1 2 5 6 rlc2wlump x2 5 6 7 8 rlc2wlump x3 7 8 9 10 rlc2wlump x4 9 10 11 12 rlc2wlump x5 11 12 13 14 rlc2wlump x6 13 14 15 16 rlc2wlump x7 15 16 17 18 rlc2wlump x8 17 18 19 20 rlc2wlump x9 19 20 21 22 rlc2wlump x10 21 22 3 4 rlc2wlump .ends rlc2woneinch .subckt rlc2wfiveinch 1 2 3 4 x1 1 2 5 6 rlc2woneinch x2 5 6 7 8 rlc2woneinch x3 7 8 9 10 rlc2woneinch x4 9 10 11 12 rlc2woneinch x5 11 12 3 4 rlc2woneinch .ends rlc2wfiveinch .subckt rlc2wtwentyinch 1 2 3 4 x1 1 2 5 6 rlc2wfiveinch x2 5 6 7 8 rlc2wfiveinch x3 7 8 9 10 rlc2wfiveinch x4 9 10 3 4 rlc2wfiveinch .ends rlc2wtwentyinch .subckt rlc2wetcmodel 1 2 3 4 x1 1 5 rlctwoinch x2 5 2 6 4 rlc2wtwentyinch x3 6 3 rlctwoinch .ends rlc2wetcmodel * Subcircuit conv2wtwentyinch * conv2wtwentyinch is a subcircuit that models a 2-conductor transmission line with * the following parameters: l=9.13e-09, c=3.65e-12, r=0.2, g=0, * inductive_coeff_of_coupling k=0.482, inter-line capacitance cm=1.8e-12, * length=20. Derived parameters are: lm=4.40066e-09, ctot=5.45e-12. * * It is important to note that the model is a simplified one - the * following assumptions are made: 1. The self-inductance l, the * self-capacitance ctot (note: not c), the series resistance r and the * parallel capacitance g are the same for all lines, and 2. Each line * is coupled only to the two lines adjacent to it, with the same * coupling parameters cm and lm. The first assumption imply that edge * effects have to be neglected. The utility of these assumptions is * that they make the sL+R and sC+G matrices symmetric, tridiagonal and * Toeplitz, with useful consequences. * * It may be noted that a symmetric two-conductor line will be * accurately represented by this model. * Lossy line models .model mod1_conv2wtwentyinch ltra rel=1.2 nocontrol r=0.2 l=4.72933999088e-09 g=0 c=7.25000000373e-12 len=20 .model mod2_conv2wtwentyinch ltra rel=1.2 nocontrol r=0.2 l=1.35306599818e-08 g=0 c=3.65000000746e-12 len=20 * subcircuit m_conv2wtwentyinch - modal transformation network for conv2wtwentyinch .subckt m_conv2wtwentyinch 1 2 3 4 v1 5 0 0v v2 6 0 0v f1 0 3 v1 0.707106779721 f2 0 3 v2 -0.707106782652 f3 0 4 v1 0.707106781919 f4 0 4 v2 0.707106780454 e1 7 5 3 0 0.707106780454 e2 1 7 4 0 0.707106782652 e3 8 6 3 0 -0.707106781919 e4 2 8 4 0 0.707106779721 .ends m_conv2wtwentyinch * Subckt conv2wtwentyinch .subckt conv2wtwentyinch 1 2 3 4 x1 1 2 5 6 m_conv2wtwentyinch o1 5 0 7 0 mod1_conv2wtwentyinch o2 6 0 8 0 mod2_conv2wtwentyinch x2 3 4 7 8 m_conv2wtwentyinch .ends conv2wtwentyinch .model convtwoinch ltra r=0.2 l=9.13e-9 c=3.65e-12 len=2.0 rel=1.2 nocontrol .subckt conv2wetcmodel 1 2 3 4 o1 1 0 5 0 convtwoinch x1 5 2 6 4 conv2wtwentyinch o2 6 0 3 0 convtwoinch .ends conv2wetcmodel .end tmpk8ny_4pz/examples/TransmissionLines/cpl_ibm2.sp0000644000175000017500000000062413546075722022517 0ustar carstencarstenSimple coupled transmissionlines VES IN 0 PULSE (0 1 0N 1.5N 1.5N 4.5N 200N) R1 IN V1 50 R2 V2 0 10 p1 V1 V2 0 V3 V4 0 cpl1 .model cpl1 cpl +R = 0.5 0 + 0.5 +L = 247.3e-9 31.65e-9 + 247.3e-9 +C = 31.4e-12 -2.45e-12 + 31.4e-12 +G = 0 0 0 +length = 0.3048 *length = 0.6096 R3 V3 0 100 R4 V4 0 100 .control TRAN 0.1N 20N plot v(in) v(v1) v(v3) .endc .END tmpk8ny_4pz/examples/TransmissionLines/txl1_1_line.sp0000644000175000017500000000121313546075722023142 0ustar carstencarstenMOSdriver -- lossy line TXL model -- C load m5 0 168 2 0 mn0p9 w = 18.0u l=0.9u m6 1 168 2 1 mp1p0 w = 36.0u l=1.0u CN2 2 0 0.025398e-12 CN3 3 0 0.007398e-12 y1 2 0 3 0 ymod vdd 1 0 dc 5.0 VS 168 0 PULSE (0 5 15.9NS 0.2NS 0.2NS 15.8NS 32NS ) .control TRAN 0.2N 47N 0 0.1N plot v(2) v(3) ylimit -0.5 5 .endc .MODEL mn0p9 NMOS VTO=0.8 KP=48U GAMMA=0.30 PHI=0.55 +LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U .MODEL mp1p0 PMOS VTO=-0.8 KP=21U GAMMA=0.45 PHI=0.61 +LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U .MODEL ymod txl R=12.45 L=8.972e-9 G=0 C=0.468e-12 length=16 .end tmpk8ny_4pz/examples/TransmissionLines/cpl2_2_line.sp0000644000175000017500000000254413546075722023123 0ustar carstencarstenMOSdriver -- 24inch 2 lossy lines CPL model -- C load m1 0 268 299 0 mn0p9 w = 18.0u l=1.0u m2 299 267 748 0 mn0p9 w = 18.0u l=1.0u m3 0 168 648 0 mn0p9 w = 18.0u l=0.9u m4 1 268 748 1 mp1p0 w = 36.0u l=1.0u m5 1 267 748 1 mp1p0 w = 36.0u l=1.0u m6 1 168 648 1 mp1p0 w = 36.0u l=1.0u * CN648 648 0 0.025398e-12 CN651 651 0 0.007398e-12 CN748 748 0 0.025398e-12 CN751 751 0 0.009398e-12 CN299 299 0 0.005398e-12 * P1 648 748 0 651 751 0 PLINE * vdd 1 0 DC 5.0 VK 267 0 DC 5.0 * *VS 168 0 PWL 4 15.9N 0.0 16.1n 5.0 31.9n 5.0 32.1n 0.0 *VS 268 0 PWL 4 15.9N 0.0 16.1n 5.0 31.9n 5.0 32.1n 0.0 * VS1 168 0 PULSE (0 5 15.9N 0.2N 0.2N 15.8N 60N) VS2 268 0 PULSE (0 5 15.9N 0.2N 0.2N 15.8N 60N) * .control TRAN 0.2N 47.9NS 0 1N plot v(648) v(651) v(751) .endc * .MODEL PLINE CPL +R=0.2 0 + 0.2 +L=9.13e-9 3.3e-9 + 9.13e-9 +G=0 0 0 +C=3.65e-13 -9e-14 + 3.65e-13 +length=24 ******************* MODEL SPECIFICATION ********************** .MODEL mn0p9 NMOS VTO=0.8 KP=48U GAMMA=0.30 PHI=0.55 LAMBDA=0.00 CGSO=0 CGDO=0 + CJ=0 CJSW=0 TOX=18000N LD=0.0U .MODEL mp1p0 PMOS VTO=-0.8 KP=21U GAMMA=0.45 PHI=0.61 LAMBDA=0.00 CGSO=0 CGDO=0 + CJ=0 CJSW=0 TOX=18000N LD=0.0U .END tmpk8ny_4pz/examples/TransmissionLines/cpl4_txl_2_line.sp0000644000175000017500000001706313546075722024016 0ustar carstencarstenBJTdriver -- 2in st. lin -- 20in coupled line CPL -- 2in st line -- DiodeCircuit * This unclassified circuit is from Raytheon, courtesy Gerry Marino. * * _______ * -------- 2in _________________ 2in | | * | BJT |______| |______|Diode| * | |------| |------| | * | Drvr | line | 2-wire | line |rcvr.| * -------- | coupled | |_____| * | transmission | * |-/\/\/\/\----| line |-------\/\/\/\/\----| * | 50ohms | | 50ohms | * | | | | * Ground ----------------- Ground * * * Each inch of the lossy line is modelled by 10 LRC lumps in the * Raytheon model. * The line parameters (derived from the Raytheon input file) are: * L = 9.13nH per inch * C = 3.65pF per inch * R = 0.2 ohms per inch * K = 0.482 [coupling coefficient; K = M/sqrt(L1*L2)] * Cc = 1.8pF per inch * * coupled ltra model generated using the standalone program * multi_decomp * the circuit *tran 0.1ns 60ns v1 1 0 0v pulse(0 4 1ns 1ns 1ns 20ns 40ns) *v1 1 0 4v pulse(4 0 1ns 1ns 1ns 20ns 40ns) vcc 10 0 5v * series termination *x1 1 oof 10 bjtdrvr *rseries oof 2 50 x1 1 2 10 bjtdrvr rt1 3 0 50 * convolution model x2 2 3 4 5 conv2wetcmodel * rlc segments model *x2 2 3 4 5 rlc2wetcmodel x3 4 dioload rt2 5 0 50 .model qmodn npn(bf=100 rb=100 cje=0.09375pF cjc=0.28125pF is=1e-12 +pe=0.5 pc=0.5) .model qmodpd npn(bf=100 rb=100 cje=0.08187pF cjc=0.2525pF is=1e-12 +pe=0.5 pc=0.5) .model qmodpdmine npn(bf=100 rb=100 cje=0.08187pF cjc=0.05pF is=1e-12 +pe=0.5 pc=0.5) .model dmod1 d(n=2.25 is=1.6399e-4 bv=10) .model dmod2 d .model dmod d(vj=0.3v) .model diod1 d(tt=0.75ns vj=0.6 rs=909 bv=10) .model diod2 d(tt=0.5ns vj=0.3 rs=100 bv=10) .options acct reltol=1e-3 abstol=1e-12 .control tran 0.1ns 60ns 0 0.35N plot v(2) v(4) v(5) .endc * bjt driver - 19=input, 268=output, 20=vcc; wierd node numbers from * the Raytheon file .subckt bjtdrvr 19 268 20 q1 22 18 13 qmodn q2 18 16 13 qmodn qd2 21 9 0 qmodn q4 14 14 0 qmodn q3 16 15 14 qmodpd q5 8 13 17 qmodn q6 25 12 0 qmodn q7 6 17 0 qmodpd qd1 26 10 0 qmodn q8 7 11 10 qmodn *q10 268 17 0 qmodpd q10 268 17 0 qmodpdmine q9 7 10 268 qmodn d1 0 19 dmod1 d2 18 19 dmod2 d3 13 19 dmod dq1 18 22 dmod dq2 16 18 dmod d502 9 21 dmod dq3 15 16 dmod d10 24 8 dmod d4 15 6 dmod dq6 12 25 dmod dq7 17 6 dmod dd1 17 10 dmod d7 11 6 dmod dd2 17 26 dmod d9 23 6 dmod dq8 11 7 dmod d501 17 268 dmod dq9 10 7 dmod d14 20 27 dmod d8 0 268 dmod r1 18 20 6k r2 22 20 2.2k r4 0 13 7k rd1 9 13 2k rd2 21 13 3k r3 16 20 10k r5 15 20 15k r9 0 17 4k r6 24 20 750 r10 12 17 2k r12 24 11 1.5k r11 25 17 3k r15 23 20 10k r13 0 10 15k r14 7 27 12 .ends bjtdrvr * subckt dioload - diode load: input=28, output=4, vcc=5 .subckt dioload 28 *comment out everything in dioload except d5 and r503, and watch * the difference in results obtained between a tran 0.1ns 20ns and * a tran 0.01ns 20ns vccint 5 0 5v c1 28 0 5pF r503 0 4 5.55 r4 0 28 120k r5 1 5 7.5k d5 4 28 diod2 d1 1 28 diod1 d4 2 0 diod1 d3 3 2 diod1 d2 1 3 diod1 .ends dioload * subckt rlclump - one RLC lump of the lossy line .subckt rlclump 1 2 *r1 1 3 0.02 *c1 3 0 0.365pF *l1 3 2 0.913nH l1 1 3 0.913nH c1 2 0 0.365pF r1 3 2 0.02 *r1 1 3 0.01 *c1 3 0 0.1825pF *l1 3 4 0.4565nH *r2 4 5 0.01 *c2 5 0 0.1825pF *l2 5 2 0.4565nH *c1 1 0 0.365pF *l1 1 2 0.913nH .ends lump .subckt rlconeinch 1 2 x1 1 3 rlclump x2 3 4 rlclump x3 4 5 rlclump x4 5 6 rlclump x5 6 7 rlclump x6 7 8 rlclump x7 8 9 rlclump x8 9 10 rlclump x9 10 11 rlclump x10 11 2 rlclump .ends rlconeinch .subckt rlctwoinch 1 2 x1 1 3 rlconeinch x2 3 2 rlconeinch .ends rlctwoinch .subckt rlcfourinch 1 2 x1 1 3 rlconeinch x2 3 4 rlconeinch x3 4 5 rlconeinch x4 5 2 rlconeinch .ends rlcfourinch .subckt rlcfiveinch 1 2 x1 1 3 rlconeinch x2 3 4 rlconeinch x3 4 5 rlconeinch x4 5 6 rlconeinch x5 6 2 rlconeinch .ends rlcfiveinch .subckt rlctwentyrlcfourinch 1 2 x1 1 3 rlcfiveinch x2 3 4 rlcfiveinch x3 4 5 rlcfiveinch x4 5 6 rlcfiveinch x5 6 2 rlcfourinch .ends rlctwentyrlcfourinch .subckt rlclumpstub A B C D x1 A int1 rlcfiveinch x2 int1 int2 rlcfiveinch x3 int2 1 rlcfiveinch x4 1 2 rlcfourinch x5 1 int3 rlcfiveinch x6 int3 B rlconeinch x7 2 C rlcfiveinch x8 2 D rlcfourinch .ends rlclumpstub .subckt ltrastub A B C D yy1 A 0 1 0 ylline15in yy2 1 0 B 0 ylline6in yy3 1 0 2 0 ylline4in yy4 2 0 C 0 ylline5in yy5 2 0 D 0 ylline4in .ends ltrastub *modelling using R and lossless lines *5 segments per inch .model yllfifth txl r=0 g=0 l=9.13e-9 c=3.65e-12 length=0.2 .subckt xlump 1 2 y1 1 0 3 0 yllfifth r1 2 3 0.04 .ends xlump .subckt xoneinch 1 2 x1 1 3 xlump x2 3 4 xlump x3 4 5 xlump x4 5 6 xlump x5 6 2 xlump *x5 6 7 xlump *x6 7 8 xlump *x7 8 9 xlump *x8 9 10 xlump *x9 10 11 xlump *x10 11 2 xlump .ends xoneinch .subckt xFourinch 1 2 x1 1 3 xoneinch x2 3 4 xoneinch x3 4 5 xoneinch x4 5 2 xoneinch .ends xfourinch .subckt xfiveinch 1 2 x1 1 3 xoneinch x2 3 4 xoneinch x3 4 5 xoneinch x4 5 6 xoneinch x5 6 2 xoneinch .ends xfiveinch .subckt xlumpstub A B C D x1 A int1 xfiveinch x2 int1 int2 xfiveinch x3 int2 1 xfiveinch x4 1 2 xfourinch x5 1 int3 xfiveinch x6 int3 B xoneinch x7 2 C xfiveinch x8 2 D xfourinch .ends xlumpstub * modelling a 2 wire coupled system using RLC lumps * 10 segments per inch * * 1---xxxxx----2 * 3---xxxxx----4 .subckt rlc2wlump 1 3 2 4 l1 1 5 0.913nH c1 2 0 0.365pF r1 5 2 0.02 l2 3 6 0.913nH c2 4 0 0.365pF r2 6 4 0.02 cmut 2 4 0.18pF k12 l1 l2 0.482 .ends rlc2wlump .subckt rlc2woneinch 1 2 3 4 x1 1 2 5 6 rlc2wlump x2 5 6 7 8 rlc2wlump x3 7 8 9 10 rlc2wlump x4 9 10 11 12 rlc2wlump x5 11 12 13 14 rlc2wlump x6 13 14 15 16 rlc2wlump x7 15 16 17 18 rlc2wlump x8 17 18 19 20 rlc2wlump x9 19 20 21 22 rlc2wlump x10 21 22 3 4 rlc2wlump .ends rlc2woneinch .subckt rlc2wfiveinch 1 2 3 4 x1 1 2 5 6 rlc2woneinch x2 5 6 7 8 rlc2woneinch x3 7 8 9 10 rlc2woneinch x4 9 10 11 12 rlc2woneinch x5 11 12 3 4 rlc2woneinch .ends rlc2wfiveinch .subckt rlc2wtwentyinch 1 2 3 4 x1 1 2 5 6 rlc2wfiveinch x2 5 6 7 8 rlc2wfiveinch x3 7 8 9 10 rlc2wfiveinch x4 9 10 3 4 rlc2wfiveinch .ends rlc2wtwentyinch .subckt rlc2wetcmodel 1 2 3 4 x1 1 5 rlctwoinch x2 5 2 6 4 rlc2wtwentyinch x3 6 3 rlctwoinch .ends rlc2wetcmodel * Subcircuit conv2wtwentyinch * conv2wtwentyinch is a subcircuit that models a 2-conductor transmission line with * the following parameters: l=9.13e-09, c=3.65e-12, r=0.2, g=0, * inductive_coeff_of_coupling k=0.482, inter-line capacitance cm=1.8e-12, * length=20. Derived parameters are: lm=4.40066e-09, ctot=5.45e-12. * * It is important to note that the model is a simplified one - the * following assumptions are made: 1. The self-inductance l, the * self-capacitance ctot (note: not c), the series resistance r and the * parallel capacitance g are the same for all lines, and 2. Each line * is coupled only to the two lines adjacent to it, with the same * coupling parameters cm and lm. The first assumption imply that edge * effects have to be neglected. The utility of these assumptions is * that they make the sL+R and sC+G matrices symmetric, tridiagonal and * Toeplitz, with useful consequences. * * It may be noted that a symmetric two-conductor line will be * accurately represented by this model. * swec model .model plines cpl +R=0.2 0 + 0.2 +L=9.13e-9 4.4e-9 + 9.13e-9 +G=0 0 0 +C=5.45e-12 -1.8e-12 + 5.45e-12 +length=20 .model yconvtwoinch txl r=0.2 g=0 l=9.13e-9 c=3.65e-12 length=2.0 .subckt conv2wetcmodel 1 2 3 4 y1 1 0 5 0 yconvtwoinch p2 5 2 0 6 4 0 plines y2 6 0 3 0 yconvtwoinch .ends conv2wetcmodel .end tmpk8ny_4pz/examples/TransmissionLines/ltra1_1_line.sp0000644000175000017500000000130313546075722023275 0ustar carstencarstenMOSdriver -- lossy line LTRA model -- C load m5 0 168 2 0 mn0p9 w = 18.0u l=0.9u m6 1 168 2 1 mp1p0 w = 36.0u l=1.0u CN2 2 0 0.025398e-12 CN3 3 0 0.007398e-12 o1 2 0 3 0 lline vdd 1 0 dc 5.0 VS 168 0 PULSE (0 5 15.9NS 0.2NS 0.2NS 15.8NS 32NS ) .control TRAN 0.2N 47N 0 0.1N plot v(2) v(3) ylimit -0.5 5 .endc .MODEL mn0p9 NMOS VTO=0.8 KP=48U GAMMA=0.30 PHI=0.55 +LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U .MODEL mp1p0 PMOS VTO=-0.8 KP=21U GAMMA=0.45 PHI=0.61 +LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U .model lline ltra rel=1 r=12.45 g=0 l=8.972e-9 c=0.468e-12 +len=16 steplimit compactrel=1.0e-3 compactabs=1.0e-14 .end tmpk8ny_4pz/examples/TransmissionLines/txl3_1_line.sp0000644000175000017500000001004113546075722023143 0ustar carstencarsten BJTdriver -- 24inch lossy line TXL model -- DiodeCircuit * This unclassified circuit is from Raytheon, courtesy Gerry Marino. * It consists of a BJT driver connected by a 24 inch lossy line to a * passive load consisting mostly of diodes. Each inch * of the lossy line is modelled by 10 LRC lumps in the Raytheon * model. * The line parameters (derived from the Raytheon input file) are: * L = 9.13nH per inch * C = 3.65pF per inch * R = 0.2 ohms per inch * the circuit v1 1 0 0v pulse(0 4 1ns 1ns 1ns 20ns 40ns) vcc 10 0 5v *rseries 1 2 5 x1 1 2 10 bjtdrvr *t1 2 0 3 0 z0=50.0136 td=4.38119ns rel=10 y2 2 0 3 0 ymod1 *x2 2 3 oneinch *x2 100 101 twentyfourinch *x2 100 101 xtwentyfourinch vtest1 2 100 0 vtest2 101 3 0 x3 3 4 10 dioload *rl 3 0 5 *dl 0 3 diod2 .model ymod1 txl r=0.2 g=0 l=9.13e-9 c=3.65e-12 length=24 .model qmodn npn(bf=100 rb=100 cje=0.09375pF cjc=0.28125pF is=1e-12 +pe=0.5 pc=0.5) .model qmodpd npn(bf=100 rb=100 cje=0.08187pF cjc=0.2525pF is=1e-12 +pe=0.5 pc=0.5) .model qmodpdmine npn(bf=100 rb=100 cje=0.08187pF cjc=0.05pF is=1e-12 +pe=0.5 pc=0.5) .model dmod1 d(n=2.25 is=1.6399e-4 bv=10) .model dmod2 d .model dmod d(vj=0.3v) .model diod1 d(tt=0.75ns vj=0.6 rs=909 bv=10) .model diod2 d(tt=0.5ns vj=0.3 rs=100 bv=10) .options acct +reltol=1e-3 abstol=1e-14 .control tran 0.1ns 60ns 0 0.5ns plot v(1) v(2) v(3) .endc * bjt driver - 19=input, 268=output, 20=vcc; wierd node numbers from * the Raytheon file .subckt bjtdrvr 19 268 20 q1 22 18 13 qmodn q2 18 16 13 qmodn qd2 21 9 0 qmodn q4 14 14 0 qmodn q3 16 15 14 qmodpd q5 8 13 17 qmodn q6 25 12 0 qmodn q7 6 17 0 qmodpd qd1 26 10 0 qmodn q8 7 11 10 qmodn q10 268 17 0 qmodpdmine *q10 268 17 0 qmodpd q9 7 10 268 qmodn d1 0 19 dmod1 d2 18 19 dmod2 d3 13 19 dmod dq1 18 22 dmod dq2 16 18 dmod d502 9 21 dmod dq3 15 16 dmod d10 24 8 dmod d4 15 6 dmod dq6 12 25 dmod dq7 17 6 dmod dd1 17 10 dmod d7 11 6 dmod dd2 17 26 dmod d9 23 6 dmod dq8 11 7 dmod d501 17 268 dmod dq9 10 7 dmod d14 20 27 dmod d8 0 268 dmod r1 18 20 6k r2 22 20 2.2k r4 0 13 7k rd1 9 13 2k rd2 21 13 3k r3 16 20 10k r5 15 20 15k r9 0 17 4k r6 24 20 750 r10 12 17 2k r12 24 11 1.5k r11 25 17 3k r15 23 20 10k r13 0 10 15k r14 7 27 12 .ends bjtdrvr * subckt dioload - diode load: input=28, output=4, vcc=5 .subckt dioload 28 4 5 *comment out everything in dioload except d5 and r503, and watch * the difference in results obtained between a tran 0.1ns 20ns and * a tran 0.01ns 20ns c1 28 0 5pF r503 0 4 5.55 r4 0 28 120k r5 1 5 7.5k d5 4 28 diod2 d1 1 28 diod1 d4 2 0 diod1 d3 3 2 diod1 d2 1 3 diod1 .ends dioload * subckt lump - one RLC lump of the lossy line *10 segments per inch .subckt lump 1 2 *r1 1 3 0.02 *c1 3 0 0.365pF *l1 3 2 0.913nH l1 1 3 0.913nH c1 2 0 0.365pF r1 3 2 0.02 *r1 1 3 0.01 *c1 3 0 0.1825pF *l1 3 4 0.4565nH *r2 4 5 0.01 *c2 5 0 0.1825pF *l2 5 2 0.4565nH *c1 1 0 0.365pF *l1 1 2 0.913nH .ends lump .subckt oneinch 1 2 x1 1 3 lump x2 3 4 lump x3 4 5 lump x4 5 6 lump x5 6 7 lump x6 7 8 lump x7 8 9 lump x8 9 10 lump x9 10 11 lump x10 11 2 lump .ends oneinch .subckt fourinch 1 2 x1 1 3 oneinch x2 3 4 oneinch x3 4 5 oneinch x4 5 2 oneinch .ends fourinch .subckt fiveinch 1 2 x1 1 3 oneinch x2 3 4 oneinch x3 4 5 oneinch x4 5 6 oneinch x5 6 2 oneinch .ends fiveinch .subckt twentyfourinch 1 2 x1 1 3 fiveinch x2 3 4 fiveinch x3 4 5 fiveinch x4 5 6 fiveinch x5 6 2 fourinch .ends twentyfourinch *modelling using R and lossless lines *5 segments per inch .model ymod2 txl r=0 g=0 l=9.13e-9 c=3.65e-12 length=0.2 .subckt xlump 1 2 y1 1 0 3 0 ymod2 r1 2 3 0.04 .ends xlump .subckt xoneinch 1 2 x1 1 3 xlump x2 3 4 xlump x3 4 5 xlump x4 5 6 xlump x5 6 2 xlump *x5 6 7 xlump *x6 7 8 xlump *x7 8 9 xlump *x8 9 10 xlump *x9 10 11 xlump *x10 11 2 xlump .ends xoneinch .subckt xfourinch 1 2 x1 1 3 xoneinch x2 3 4 xoneinch x3 4 5 xoneinch x4 5 2 xoneinch .ends xfourinch .subckt xfiveinch 1 2 x1 1 3 xoneinch x2 3 4 xoneinch x3 4 5 xoneinch x4 5 6 xoneinch x5 6 2 xoneinch .ends xfiveinch .subckt xtwentyfourinch 1 2 x1 1 3 xfiveinch x2 3 4 xfiveinch x3 4 5 xfiveinch x4 5 6 xfiveinch x5 6 2 xfourinch .ends xtwentyfourinch .end tmpk8ny_4pz/examples/TransmissionLines/ltra1_4_line.sp0000644000175000017500000001135613546075722023311 0ustar carstencarstenMOSdriver -- 6.3inch 4 lossy line LTRA model -- C load m1 1 2 6 1 mp1p0 w = 36.0u l=1.0u m2 1 3 7 1 mp1p0 w = 36.0u l=1.0u m3 1 4 8 1 mp1p0 w = 36.0u l=1.0u m4 1 10 5 1 mp1p0 w = 36.0u l=1.0u m5 1 11 13 1 mp1p0 w = 36.0u l=1.0u m6 1 12 13 1 mp1p0 w = 36.0u l=1.0u m7 0 2 6 0 mn0p9 w = 18.0u l=0.9u m8 0 3 7 0 mn0p9 w = 18.0u l=0.9u m9 0 4 8 0 mn0p9 w = 18.0u l=0.9u m10 0 10 5 0 mn0p9 w = 18.0u l=0.9u m11 14 11 13 0 mn0p9 w = 18.0u l=0.9u m12 0 12 14 0 mn0p9 w = 18.0u l=0.9u * CN5 5 0 0.025398e-12 CN6 6 0 0.007398e-12 CN7 7 0 0.007398e-12 CN8 8 0 0.007398e-12 CN9 9 0 0.097398e-12 CN10 10 0 0.007398e-12 CN11 11 0 0.003398e-12 CN12 12 0 0.004398e-12 CN13 13 0 0.008398e-12 CN14 14 0 0.005398e-12 * * Subcircuit test * test is a subcircuit that models a 4-conductor transmission line with * the following parameters: l=9e-09, c=2.9e-13, r=0.3, g=0, * inductive_coeff_of_coupling k=0.6, inter-line capacitance cm=3e-14, * length=6.3. Derived parameters are: lm=5.4e-09, ctot=3.5e-13. * * It is important to note that the model is a simplified one - the * following assumptions are made: 1. The self-inductance l, the * self-capacitance ctot (note: not c), the series resistance r and the * parallel capacitance g are the same for all lines, and 2. Each line * is coupled only to the two lines adjacent to it, with the same * coupling parameters cm and lm. The first assumption implies that edge * effects have to be neglected. The utility of these assumptions is * that they make the sL+R and sC+G matrices symmetric, tridiagonal and * Toeplitz, with useful consequences (see "Efficient Transient * Simulation of Lossy Interconnect", by J.S. Roychowdhury and * D.O Pederson, Proc. DAC 91). * It may be noted that a symmetric two-conductor line is * represented accurately by this model. * Subckt node convention: * * |--------------------------| * 1-----| |-----n+1 * 2-----| |-----n+2 * : | n-wire multiconductor | : * : | line | : * n-1-----|(node 0=common gnd plane) |-----2n-1 * n-----| |-----2n * |--------------------------| * Lossy line models .model mod1_test ltra rel=1.2 nocontrol r=0.3 l=2.62616456193e-10 g=0 c=3.98541019688e-13 len=6.3 .model mod2_test ltra rel=1.2 nocontrol r=0.3 l=5.662616446e-09 g=0 c=3.68541019744e-13 len=6.3 .model mod3_test ltra rel=1.2 nocontrol r=0.3 l=1.23373835171e-08 g=0 c=3.3145898046e-13 len=6.3 .model mod4_test ltra rel=1.2 nocontrol r=0.3 l=1.7737383521e-08 g=0 c=3.01458980439e-13 len=6.3 * subcircuit m_test - modal transformation network for test .subckt m_test 1 2 3 4 5 6 7 8 v1 9 0 0v v2 10 0 0v v3 11 0 0v v4 12 0 0v f1 0 5 v1 0.371748033738 f2 0 5 v2 -0.601500954587 f3 0 5 v3 0.601500954587 f4 0 5 v4 -0.371748036544 f5 0 6 v1 0.60150095443 f6 0 6 v2 -0.371748035044 f7 0 6 v3 -0.371748030937 f8 0 6 v4 0.601500957402 f9 0 7 v1 0.601500954079 f10 0 7 v2 0.37174803072 f11 0 7 v3 -0.371748038935 f12 0 7 v4 -0.601500955482 f13 0 8 v1 0.371748035626 f14 0 8 v2 0.601500956073 f15 0 8 v3 0.601500954504 f16 0 8 v4 0.371748032386 e1 13 9 5 0 0.371748033909 e2 14 13 6 0 0.601500954587 e3 15 14 7 0 0.601500955639 e4 1 15 8 0 0.371748036664 e5 16 10 5 0 -0.60150095443 e6 17 16 6 0 -0.371748035843 e7 18 17 7 0 0.371748032386 e8 2 18 8 0 0.601500957319 e9 19 11 5 0 0.601500955131 e10 20 19 6 0 -0.371748032169 e11 21 20 7 0 -0.371748037896 e12 3 21 8 0 0.601500954513 e13 22 12 5 0 -0.371748035746 e14 23 22 6 0 0.60150095599 e15 24 23 7 0 -0.601500953534 e16 4 24 8 0 0.371748029317 .ends m_test * Subckt test .subckt test 1 2 3 4 5 6 7 8 x1 1 2 3 4 9 10 11 12 m_test o1 9 0 13 0 mod1_test o2 10 0 14 0 mod2_test o3 11 0 15 0 mod3_test o4 12 0 16 0 mod4_test x2 5 6 7 8 13 14 15 16 m_test .ends test * x1 5 6 7 8 9 10 11 12 test * * vdd 1 0 PULSE (0 5 0Ns 0.1Ns 0.1Ns 600Ns 800Ns) v3 3 0 PULSE (0 5 0Ns 0.1Ns 0.1Ns 600Ns 800Ns) .model mn0p9 nmos LEVEL=1 vto=0.8V kp=48u gamma=0.3 phi=0.55 lambda=0.00 + PHI=0.55 LAMBDA=0.00 CGSO=0 CGDO=0 CGBO=0 + CJ=0 CJSW=0 TOX=18000N NSUB=1E16 LD=0.0U .model mp1p0 pmos vto=-0.8V kp=21u gamma=0.45 phi=0.61 lambda=0.00 + PHI=0.61 LAMBDA=0.00 CGSO=0 CGDO=0 CGBO=0 + CJ=0 CJSW=0 TOX=18000N NSUB=3E16 LD=0.0U VS1 2 0 PULSE (0 5 15.9Ns 0.2Ns 0.2Ns 15.8Ns 32Ns) VS2 4 0 PULSE (0 5 15.9Ns 0.2Ns 0.2Ns 15.8Ns 32Ns) .control TRAN 0.1N 47.9N plot v(5) v(6) v(7) v(8) v(9) v(10) v(11) v(12) .endc * .END tmpk8ny_4pz/examples/TransmissionLines/ltra3_2_line.sp0000644000175000017500000000642613546075722023313 0ustar carstencarstenMOSdriver -- 24inch 2 lossy lines LTRA model -- C load m1 0 268 299 0 mn0p9 w = 18.0u l=1.0u m2 299 267 748 0 mn0p9 w = 18.0u l=1.0u m3 0 168 648 0 mn0p9 w = 18.0u l=0.9u m4 1 268 748 1 mp1p0 w = 36.0u l=1.0u m5 1 267 748 1 mp1p0 w = 36.0u l=1.0u m6 1 168 648 1 mp1p0 w = 36.0u l=1.0u * CN648 648 0 0.025398e-12 CN651 651 0 0.007398e-12 CN748 748 0 0.025398e-12 CN751 751 0 0.009398e-12 CN299 299 0 0.005398e-12 * * Subcircuit test * test is a subcircuit that models a 2-conductor transmission line with * the following parameters: l=9.13e-09, c=2.75e-13, r=0.2, g=0, * inductive_coeff_of_coupling k=0.36144, inter-line capacitance cm=9e-14, * length=24. Derived parameters are: lm=3.29995e-09, ctot=3.65e-13. * * It is important to note that the model is a simplified one - the * following assumptions are made: 1. The self-inductance l, the * self-capacitance ctot (note: not c), the series resistance r and the * parallel capacitance g are the same for all lines, and 2. Each line * is coupled only to the two lines adjacent to it, with the same * coupling parameters cm and lm. The first assumption implies that edge * effects have to be neglected. The utility of these assumptions is * that they make the sL+R and sC+G matrices symmetric, tridiagonal and * Toeplitz, with useful consequences (see "Efficient Transient * Simulation of Lossy Interconnect", by J.S. Roychowdhury and * D.O Pederson, Proc. DAC 91). * It may be noted that a symmetric two-conductor line is * represented accurately by this model. * Subckt node convention: * * |--------------------------| * 1-----| |-----n+1 * 2-----| |-----n+2 * : | n-wire multiconductor | : * : | line | : * n-1-----|(node 0=common gnd plane) |-----2n-1 * n-----| |-----2n * |--------------------------| * Lossy line models .model mod1_test ltra rel=1.2 nocontrol r=0.2 l=5.83005279316e-09 g=0 c=4.55000000187e-13 len=24 .model mod2_test ltra rel=1.2 nocontrol r=0.2 l=1.24299471863e-08 g=0 c=2.75000000373e-13 len=24 * subcircuit m_test - modal transformation network for test .subckt m_test 1 2 3 4 v1 5 0 0v v2 6 0 0v f1 0 3 v1 0.707106779721 f2 0 3 v2 -0.707106782652 f3 0 4 v1 0.707106781919 f4 0 4 v2 0.707106780454 e1 7 5 3 0 0.707106780454 e2 1 7 4 0 0.707106782652 e3 8 6 3 0 -0.707106781919 e4 2 8 4 0 0.707106779721 .ends m_test * Subckt test .subckt test 1 2 3 4 x1 1 2 5 6 m_test o1 5 0 7 0 mod1_test o2 6 0 8 0 mod2_test x2 3 4 7 8 m_test .ends test * x1 648 748 651 751 test * * vdd 1 0 DC 5.0 VK 267 0 DC 5.0 * VS1 168 0 PULSE (0 5 15.9N 0.2N 0.2N 15.8N 60N) VS2 268 0 PULSE (0 5 15.9N 0.2N 0.2N 15.8N 60N) * .control TRAN 0.2N 47.9NS PLOT v(648) v(651) v(751) .endc * .model mn0p9 nmos LEVEL=1 vto=0.8V kp=48u gamma=0.3 phi=0.55 lambda=0.0 + PHI=0.55 LAMBDA=0.00 CGSO=0 CGDO=0 CGBO=0 + CJ=0 CJSW=0 TOX=18000N NSUB=1E16 LD=0.0U .model mp1p0 pmos LEVEL=1 vto=-0.8V kp=21u gamma=0.45 phi=0.61 lambda=0.0 + PHI=0.61 LAMBDA=0.00 CGSO=0 CGDO=0 CGBO=0 + CJ=0 CJSW=0 TOX=18000N NSUB=3E16 LD=0.0U .END tmpk8ny_4pz/examples/TransmissionLines/cpl_ibm1.sp0000644000175000017500000000454213546075722022521 0ustar carstencarsten6-line coupled multiconductor with ECL drivers vemm mm 0 DC -0.4 vepp pp 0 DC 0.4 vein_left lin 0 PULSE (-0.4 0.4 0N 1N 1N 7N 200N) vein_right rin 0 PULSE (-0.4 0.4 2N 1N 1N 7N 200N) * upper 2 lines x1 lin 0 1 1outn ECL x2 mm 0 2 2outn ECL x7 7 0 7r 7routn ECL x8 8 0 8r 8routn ECL c7r 7r 0 0.1P c8r 8r 0 0.1P * lower 2 lines x11 pp 0 11 11outn ECL x12 rin 0 12 12outn ECL x5 5 0 5l 5loutn ECL x6 6 0 6l 6loutn ECL c5l 5l 0 0.1P c6l 6l 0 0.1P p1 1 2 3 4 5 6 0 7 8 9 10 11 12 0 pline .model pline cpl +C = 0.900000P -0.657947P -0.0767356P -0.0536544P -0.0386514P -0.0523990P + 1.388730P -0.607034P -0.0597635P -0.0258851P -0.0273442P + 1.39328P -0.625675P -0.0425551P -0.0319791P + 1.07821P -0.255048P -0.0715824P + 1.06882P -0.692091P + 0.900000P +L = 0.868493E-7 0.781712E-7 0.748428E-7 0.728358E-7 0.700915E-7 0.692178E-7 + 0.866074E-7 0.780613E-7 0.748122E-7 0.711591E-7 0.701023E-7 + 0.865789E-7 0.781095E-7 0.725431E-7 0.711986E-7 + 0.867480E-7 0.744242E-7 0.725826E-7 + 0.868022E-7 0.782377E-7 + 0.868437E-7 +R = 0.2 0 0 0 0 0 + 0.2 0 0 0 0 + 0.2 0 0 0 + 0.2 0 0 + 0.2 0 + 0.2 +G = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +length = 2 *XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .SUBCKT ECL EIN GND 9 8 * Input-GND-OUTP-OUTN RIN 1 2 0.077K REF 5 6 0.077K R1 7 N 1.0K R2 P 3 0.4555K R3 P 4 0.4555K R4 8 N 0.615K R5 9 N 0.615K RL1 8 GND 0.093K RL2 9 GND 0.093K LIN EIN 1 0.01U LREF 5 GND 0.01U CIN 1 GND 0.68P CL1 8 GND 1P CL2 9 GND 1P Q1 3 2 7 JCTRAN Q2 4 6 7 JCTRAN Q3 P 3 8 JCTRAN Q4 P 4 9 JCTRAN VEP P GND DC 1.25 VEN N GND DC -3 .ENDS ECL .control TRAN 0.1N 20N plot V(3) V(5) V(8) V(11) V(12) .endc .MODEL JCTRAN NPN BF=150 VAF=20 IS=4E-17 RB=300 RC=100 CJE=30F CJC=30F + CJS=40F VJE=0.6 VJC=0.6 VJS=0.6 MJE=0.5 MJC=0.5 + MJS=0.5 TF=16P TR=1N .END tmpk8ny_4pz/examples/TransmissionLines/cpl1_4_line.sp0000644000175000017500000000362713546075722023127 0ustar carstencarstenMOSdriver -- 6.3inch 4 lossy line CPL model -- C load m1 1 2 6 1 mp1p0 w = 36.0u l=1.0u m2 1 3 7 1 mp1p0 w = 36.0u l=1.0u m3 1 4 8 1 mp1p0 w = 36.0u l=1.0u m4 1 10 5 1 mp1p0 w = 36.0u l=1.0u m5 1 11 13 1 mp1p0 w = 36.0u l=1.0u m6 1 12 13 1 mp1p0 w = 36.0u l=1.0u m7 0 2 6 0 mn0p9 w = 18.0u l=0.9u m8 0 3 7 0 mn0p9 w = 18.0u l=0.9u m9 0 4 8 0 mn0p9 w = 18.0u l=0.9u m10 0 10 5 0 mn0p9 w = 18.0u l=0.9u m11 14 11 13 0 mn0p9 w = 18.0u l=0.9u m12 0 12 14 0 mn0p9 w = 18.0u l=0.9u * CN5 5 0 0.025398e-12 CN6 6 0 0.007398e-12 CN7 7 0 0.007398e-12 CN8 8 0 0.007398e-12 CN9 9 0 0.097398e-12 CN10 10 0 0.007398e-12 CN11 11 0 0.003398e-12 CN12 12 0 0.004398e-12 CN13 13 0 0.008398e-12 CN14 14 0 0.005398e-12 * P1 5 6 7 8 0 9 10 11 12 0 pline * * vdd 1 0 DC 5.0 v3 3 0 DC 5.0 * VS1 2 0 PULSE ( 0 5 15.9NS 0.2NS 0.2NS 15.8NS 32NS) VS2 4 0 PULSE (0 5 15.9NS 0.2NS 0.2NS 15.8NS 32NS ) * .control TRAN 0.2N 47.9N 0 0.05N plot V(5) V(6) V(7) V(8) V(9) V(10) V(11) V(12) .endc .MODEL mn0p9 NMOS VTO=0.8 KP=48U GAMMA=0.30 PHI=0.55 LAMBDA=0.00 CGSO=0 CGDO=0 +CJ=0 CJSW=0 TOX=18000N LD=0.0U .MODEL mp1p0 PMOS VTO=-0.8 KP=21U GAMMA=0.45 PHI=0.61 LAMBDA=0.00 CGSO=0 CGDO=0 +CJ=0 CJSW=0 TOX=18000N LD=0.0U .MODEL PLINE cpl +R=0.03 0 0 0 + 0.03 0 0 + 0.03 0 + 0.03 +L=9e-9 5.4e-9 0 0 + 9e-9 5.4e-9 0 + 9e-9 5.4e-9 + 9e-9 +G=0 0 0 0 0 0 0 0 0 0 +C=3.5e-13 -3e-14 0 0 + 3.5e-13 -3e-14 0 + 3.5e-13 -3e-14 + 3.5e-13 +length=6.3 .END tmpk8ny_4pz/examples/TransmissionLines/ltra7_4_line.sp0000644000175000017500000000711313546075722023313 0ustar carstencarsten6.3inch 4 lossy lines LTRA model -- R load Ra 1 2 1K Rb 0 3 1K Rc 0 4 1K Rd 0 5 1K Re 6 0 1Meg Rf 7 0 1Meg Rg 8 0 1Meg Rh 9 0 1Meg * * Subcircuit test * test is a subcircuit that models a 4-conductor transmission line with * the following parameters: l=9e-09, c=2.9e-13, r=0.3, g=0, * inductive_coeff_of_coupling k=0.6, inter-line capacitance cm=3e-14, * length=6.3. Derived parameters are: lm=5.4e-09, ctot=3.5e-13. * * It is important to note that the model is a simplified one - the * following assumptions are made: 1. The self-inductance l, the * self-capacitance ctot (note: not c), the series resistance r and the * parallel capacitance g are the same for all lines, and 2. Each line * is coupled only to the two lines adjacent to it, with the same * coupling parameters cm and lm. The first assumption implies that edge * effects have to be neglected. The utility of these assumptions is * that they make the sL+R and sC+G matrices symmetric, tridiagonal and * Toeplitz, with useful consequences (see "Efficient Transient * Simulation of Lossy Interconnect", by J.S. Roychowdhury and * D.O Pederson, Proc. DAC 91). * It may be noted that a symmetric two-conductor line is * represented accurately by this model. * Subckt node convention: * * |--------------------------| * 1-----| |-----n+1 * 2-----| |-----n+2 * : | n-wire multiconductor | : * : | line | : * n-1-----|(node 0=common gnd plane) |-----2n-1 * n-----| |-----2n * |--------------------------| * Lossy line models .model mod1_test ltra rel=1.2 nocontrol r=0.3 l=2.62616456193e-10 g=0 c=3.98541019688e-13 len=6.3 .model mod2_test ltra rel=1.2 nocontrol r=0.3 l=5.662616446e-09 g=0 c=3.68541019744e-13 len=6.3 .model mod3_test ltra rel=1.2 nocontrol r=0.3 l=1.23373835171e-08 g=0 c=3.3145898046e-13 len=6.3 .model mod4_test ltra rel=1.2 nocontrol r=0.3 l=1.7737383521e-08 g=0 c=3.01458980439e-13 len=6.3 * subcircuit m_test - modal transformation network for test .subckt m_test 1 2 3 4 5 6 7 8 v1 9 0 0v v2 10 0 0v v3 11 0 0v v4 12 0 0v f1 0 5 v1 0.371748033738 f2 0 5 v2 -0.601500954587 f3 0 5 v3 0.601500954587 f4 0 5 v4 -0.371748036544 f5 0 6 v1 0.60150095443 f6 0 6 v2 -0.371748035044 f7 0 6 v3 -0.371748030937 f8 0 6 v4 0.601500957402 f9 0 7 v1 0.601500954079 f10 0 7 v2 0.37174803072 f11 0 7 v3 -0.371748038935 f12 0 7 v4 -0.601500955482 f13 0 8 v1 0.371748035626 f14 0 8 v2 0.601500956073 f15 0 8 v3 0.601500954504 f16 0 8 v4 0.371748032386 e1 13 9 5 0 0.371748033909 e2 14 13 6 0 0.601500954587 e3 15 14 7 0 0.601500955639 e4 1 15 8 0 0.371748036664 e5 16 10 5 0 -0.60150095443 e6 17 16 6 0 -0.371748035843 e7 18 17 7 0 0.371748032386 e8 2 18 8 0 0.601500957319 e9 19 11 5 0 0.601500955131 e10 20 19 6 0 -0.371748032169 e11 21 20 7 0 -0.371748037896 e12 3 21 8 0 0.601500954513 e13 22 12 5 0 -0.371748035746 e14 23 22 6 0 0.60150095599 e15 24 23 7 0 -0.601500953534 e16 4 24 8 0 0.371748029317 .ends m_test * Subckt test .subckt test 1 2 3 4 5 6 7 8 x1 1 2 3 4 9 10 11 12 m_test o1 9 0 13 0 mod1_test o2 10 0 14 0 mod2_test o3 11 0 15 0 mod3_test o4 12 0 16 0 mod4_test x2 5 6 7 8 13 14 15 16 m_test .ends test * x1 2 3 4 5 6 7 8 9 test * * VS1 1 0 PWL(15.9NS 0.0 16.1Ns 5.0 31.9Ns 5.0 32.1Ns 0.0) .control TRAN 0.2NS 50NS plot v(1) v(2) v(6) v(7) v(8) v(9) .endc * .END tmpk8ny_4pz/examples/TransmissionLines/txl2_3_line.sp0000644000175000017500000000160213546075722023147 0ustar carstencarstenMOSdriver -- 3 lossy lines TXL model -- C load m5 0 168 2 0 mn0p9 w = 18.0u l=0.9u m6 1 168 2 1 mp1p0 w = 36.0u l=1.0u m1 0 3 4 0 mn0p9 w = 18.0u l=0.9u m2 1 3 4 1 mp1p0 w = 36.0u l=1.0u CN2 2 0 0.025398e-12 CN3 3 0 0.007398e-12 CN4 4 0 0.025398e-12 CN5 5 0 0.007398e-12 CN6 6 0 0.007398e-12 CN7 168 0 0.007398e-12 y1 2 0 3 0 ymod y2 4 0 5 0 ymod y3 6 0 168 0 ymod vdd 1 0 dc 5.0 VS 168 0 PULSE (0 5 15.9NS 0.2NS 0.2NS 15.8NS 32NS ) .control TRAN 0.2N 47N 0 0.1N plot v(2) v(3) v(4) v(5) v(6) .endc .MODEL mn0p9 NMOS VTO=0.8 KP=48U GAMMA=0.30 PHI=0.55 +LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U .MODEL mp1p0 PMOS VTO=-0.8 KP=21U GAMMA=0.45 PHI=0.61 +LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U .MODEL ymod txl R=12.45 L=8.972e-9 G=0 C=0.468e-12 length=16 .end tmpk8ny_4pz/examples/TransmissionLines/ltra2_2_line.sp0000644000175000017500000000155613546075722023311 0ustar carstencarstenMOSdriver -- 2 lossy lines LTRA model -- C load m5 0 168 2 0 mn0p9 w = 18.0u l=0.9u m6 1 168 2 1 mp1p0 w = 36.0u l=1.0u m1 0 3 4 0 mn0p9 w = 18.0u l=0.9u m2 1 3 4 1 mp1p0 w = 36.0u l=1.0u CN2 2 0 0.025398e-12 CN3 3 0 0.007398e-12 CN4 4 0 0.025398e-12 CN5 5 0 0.007398e-12 o1 2 0 3 0 lline o2 4 0 5 0 lline vdd 1 0 dc 5.0 VS 168 0 PULSE (0 5 15.9NS 0.2NS 0.2NS 15.8NS 32NS ) .control TRAN 0.2N 47N 0 0.1N plot v(2) v(3) v(4) v(5) .endc .MODEL mn0p9 NMOS VTO=0.8 KP=48U GAMMA=0.30 PHI=0.55 +LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U .MODEL mp1p0 PMOS VTO=-0.8 KP=21U GAMMA=0.45 PHI=0.61 +LAMBDA=0.00 CGSO=0 CGDO=0 CJ=0 CJSW=0 TOX=18000N LD=0.0U .model lline ltra rel=1 r=12.45 g=0 l=8.972e-9 c=0.468e-12 +len=16 steplimit compactrel=1.0e-3 compactabs=1.0e-14 .end tmpk8ny_4pz/examples/TransmissionLines/ltra5_1_line.sp0000644000175000017500000002070613546075722023311 0ustar carstencarsten Example 3 for interconnect simulation * From neug1, Mosaic aluminum lines. 2um thick, 11um wide. Assuming * 10um above the ground. * Material: aluminum; resistivity (sigma) = 2.74uohm-cm = 2.74e-8 ohm-m * Dielectric: SiO2, dielectric constant (epsilon) =3.7 * epsilon0 = 8.85e-12 MKS units * mu0 = 4e-7*PI * speed of light in free space = 1/sqrt(mu0*epsilon0) = 2.9986e8 MKS units * * Line parameter calculations: * capacitance: parallel plate * C = epsilon*epsilon0 * A / l * C = 3.7*8.85e-12 * 11e-6 * 1(metre) / 10e-6 = 36.02e-12 F/m * + 30% = 46.8e-12 F/m = 0.468pF/cm * * C_freespace = 46.8e-12/epsilon = 12.65e-12 F/m * speed of light in free space v0 = 2.9986e8 = 1/sqrt(L0*C0) * => L0 = 1/C0*v0^2 * L0 = 1/(12.65e-12 * 8.9916e16) = 1/113.74e4 = 0.008792e-4 H/m * = 0.8792 uH/m = 8.792nH/cm * * R = rho * l / A = 2.74e-8 * 1 / (11e-6*2e-6) = 1245.45 ohms/m * = 12.45ohms/cm * * transmission line parameters: * nominal z0 = sqrt(L/C) = 137 ohms * td = sqrt(LC) = 64.14e-12 secs/cm = 0.064ns/cm * * vcc vcc 0 5 v1 1 0 0v pulse(0 5 0.1ns 0.1ns 0.1ns 1ns 100ns) rs 1 2 10 xdrv 1 2 vcc bjtdrvr xrcv 3 4 vcc bjtdrvr xrcv 3 4 vcc dioload d1 3 vcc diod d2 0 3 diod cl 3 0 1pF o1 2 0 3 0 lline *x1 2 3 sixteencm x1 2 3 xonecm .model diod d .model lline ltra rel=1.8 r=12.45 g=0 l=8.792e-9 c=0.468e-12 len=16 steplimit .control * 1cm * 2cm * 4cm * 6cm * 8cm * 10cm * 12cm *tran 0.001ns 15ns 0 0.1ns * 24cm tran 0.001ns 10ns 0 0.1ns * onecm10 *tran 0.001ns 10ns 0 0.01ns plot v(1) v(2) v(3) .endc * 1. define the subckt r10 to be one tenth of the resistance per cm. * 2. define the subckt onecm to be one of onecm10 (modelled using * 10 segments), onecm8, onecm4, onecm2 and lump1. Then use * the subckts onecm, fourcm, fivecm, tencm, twelvecm, * twentyfourcm in the circuit. The line is modelled as rlc segments. * 3. define the subckt xonecm to be one of xonecm10, xonecm8, * xonecm4, xonecm2 and xlump1. Use the subckts xonecm, * xfourcm, xfivecm, xtencm, xtwelvecm, xtwentyfourcm in the * circuit. The line will be modelled as r-lossless lumps. .subckt xonecm 1 2 *x1 1 2 xlump1 x1 1 2 xonecm4 .ends xonecm .subckt onecm 1 2 *x1 1 2 lump1 x1 1 2 onecm4 .ends onecm .subckt r10 1 2 r1 1 2 1.245 .ends r10 * ECL driver and diode receiver models - from Raytheon .model qmodn npn(bf=100 rb=100 cje=0.09375pF cjc=0.28125pF is=1e-12 +pe=0.5 pc=0.5) .model qmodpd npn(bf=100 rb=100 cje=0.08187pF cjc=0.2525pF is=1e-12 +pe=0.5 pc=0.5) .model qmodpdmine npn(bf=100 rb=100 cje=0.08187pF cjc=0.05pF is=1e-12 +pe=0.5 pc=0.5) .model dmod1 d(n=2.25 is=1.6399e-4 bv=10) .model dmod2 d .model dmod d(vj=0.3v) .model diod1 d(tt=0.75ns vj=0.6 rs=909 bv=10) .model diod2 d(tt=0.5ns vj=0.3 rs=100 bv=10) * bjt driver - 19=input, 268=output, 20=vcc; wierd node numbers from * the Raytheon file .subckt bjtdrvr 19 268 20 q1 22 18 13 qmodn q2 18 16 13 qmodn qd2 21 9 0 qmodn q4 14 14 0 qmodn q3 16 15 14 qmodpd q5 8 13 17 qmodn q6 25 12 0 qmodn q7 6 17 0 qmodpd qd1 26 10 0 qmodn q8 7 11 10 qmodn q10 268 17 0 qmodpdmine *q10 268 17 0 qmodpd q9 7 10 268 qmodn d1 0 19 dmod1 d2 18 19 dmod2 d3 13 19 dmod dq1 18 22 dmod dq2 16 18 dmod d502 9 21 dmod dq3 15 16 dmod d10 24 8 dmod d4 15 6 dmod dq6 12 25 dmod dq7 17 6 dmod dd1 17 10 dmod d7 11 6 dmod dd2 17 26 dmod d9 23 6 dmod dq8 11 7 dmod d501 17 268 dmod dq9 10 7 dmod d14 20 27 dmod d8 0 268 dmod r1 18 20 6k r2 22 20 2.2k r4 0 13 7k rd1 9 13 2k rd2 21 13 3k r3 16 20 10k r5 15 20 15k r9 0 17 4k r6 24 20 750 r10 12 17 2k r12 24 11 1.5k r11 25 17 3k r15 23 20 10k r13 0 10 15k r14 7 27 12 .ends bjtdrvr * subckt dioload - diode load: input=28, output=4, vcc=5 .subckt dioload 28 4 5 c1 28 0 5pF r503 0 4 5.55 r400 0 28 120k r500 1 5 7.5k d5 4 28 diod2 d1 1 28 diod1 d4 2 0 diod1 d3 3 2 diod1 d2 1 3 diod1 .ends dioload * End ECL driver and Diode receiver models from Raytheon *10 segments per cm .subckt lump10 1 2 l1 1 3 0.0.8792nH c1 2 0 0.0468pF x1 3 2 r10 .ends lump10 *1 segment per cm .subckt lump1 1 2 l1 1 3 8.792nH c1 2 0 0.468pF x1 3 4 r10 x2 4 5 r10 x3 5 6 r10 x4 6 7 r10 x5 7 8 r10 x6 8 9 r10 x7 9 10 r10 x8 10 11 r10 x9 11 12 r10 x10 12 2 r10 .ends lump1 *2 segments per cm .subckt lump2 1 2 l1 1 3 4.396nH c1 2 0 0.234pF x1 3 4 r10 x2 4 5 r10 x3 5 6 r10 x4 6 7 r10 x5 7 2 r10 .ends lump2 *4 segments per cm .subckt lump4 1 2 l1 1 3 2.198nH c1 2 0 0.117pF x1 3 4 r10 x2 4 5 r10 x3 5 2 r10 x4 5 2 r10 .ends lump4 *8 segments per cm .subckt lump8 1 2 l1 1 3 1.099nH c1 2 0 0.0585pF x1 3 4 r10 x2 4 2 r10 x3 4 2 r10 x4 4 2 r10 x5 4 2 r10 .ends lump8 .subckt onecm10 1 2 x1 1 3 lump10 x2 3 4 lump10 x3 4 5 lump10 x4 5 6 lump10 x5 6 7 lump10 x6 7 8 lump10 x7 8 9 lump10 x8 9 10 lump10 x9 10 11 lump10 x10 11 2 lump10 .ends onecm10 .subckt onecm8 1 2 x1 1 3 lump8 x2 3 4 lump8 x3 4 5 lump8 x4 5 6 lump8 x5 6 7 lump8 x6 7 8 lump8 x7 8 9 lump8 x8 9 2 lump8 .ends onecm8 .subckt onecm4 1 2 x1 1 3 lump4 x2 3 4 lump4 x3 4 5 lump4 x4 5 2 lump4 .ends onecm4 .subckt onecm2 1 2 x1 1 3 lump2 x2 3 2 lump2 .ends onecm2 .subckt twocm 1 2 x1 1 3 onecm x2 3 2 onecm .ends twocm .subckt threecm 1 2 x1 1 3 onecm x2 3 4 onecm x3 4 2 onecm .ends threecm .subckt fourcm 1 2 x1 1 3 onecm x2 3 4 onecm x3 4 5 onecm x4 5 2 onecm .ends fourcm .subckt fivecm 1 2 x1 1 3 onecm x2 3 4 onecm x3 4 5 onecm x4 5 6 onecm x5 6 2 onecm .ends fivecm .subckt sixcm 1 2 x1 1 3 fivecm x2 3 2 onecm .ends sixcm .subckt sevencm 1 2 x1 1 3 sixcm x2 3 2 onecm .ends sevencm .subckt eightcm 1 2 x1 1 3 sevencm x2 3 2 onecm .ends eightcm .subckt ninecm 1 2 x1 1 3 eightcm x2 3 2 onecm .ends ninecm .subckt tencm 1 2 x1 1 3 fivecm x2 3 2 fivecm .ends tencm .subckt elevencm 1 2 x1 1 3 tencm x2 3 2 onecm .ends elevencm .subckt twelvecm 1 2 x1 1 3 tencm x2 3 4 onecm x3 4 2 onecm .ends twelvecm .subckt sixteencm 1 2 x1 1 3 eightcm x2 3 2 eightcm .ends sixteencm .subckt twentyfourcm 1 2 x1 1 3 twelvecm x2 3 2 twelvecm .ends twentyfourcm *modelling using R and lossless lines * 10 segments per cm .model lless10 ltra nocontrol rel=10 r=0 g=0 l=8.792e-9 +c=0.468e-12 len=0.1 steplimit quadinterp * 8 segments per cm .model lless8 ltra nocontrol rel=10 r=0 g=0 l=8.792e-9 +c=0.468e-12 len=0.125 steplimit quadinterp * 4 segments per cm .model lless4 ltra nocontrol rel=10 r=0 g=0 l=8.792e-9 +c=0.468e-12 len=0.25 steplimit quadinterp * 2 segments per cm .model lless2 ltra nocontrol rel=10 r=0 g=0 l=8.792e-9 +c=0.468e-12 len=0.5 steplimit quadinterp * 1 segment per cm .model lless1 ltra nocontrol rel=10 r=0 g=0 l=8.792e-9 +c=0.468e-12 len=1 steplimit quadinterp *10 segments per cm .subckt xlump10 1 2 o1 1 0 3 0 lless10 x1 3 2 r10 .ends xlump10 *1 segment per cm .subckt xlump1 1 2 o1 1 0 3 0 lless1 x1 3 4 r10 x2 4 5 r10 x3 5 6 r10 x4 6 7 r10 x5 7 8 r10 x6 8 9 r10 x7 9 10 r10 x8 10 11 r10 x9 11 12 r10 x10 12 2 r10 .ends xlump1 *2 segments per cm .subckt xlump2 1 2 o1 1 0 3 0 lless2 x1 3 4 r10 x2 4 5 r10 x3 5 6 r10 x4 6 7 r10 x5 7 2 r10 .ends xlump2 *4 segments per cm .subckt xlump4 1 2 o1 1 0 3 0 lless4 x1 3 4 r10 x2 4 5 r10 x3 5 2 r10 x4 5 2 r10 .ends xlump4 *8 segments per cm .subckt xlump8 1 2 o1 1 0 3 0 lless8 x1 3 4 r10 x2 4 2 r10 x3 4 2 r10 x4 4 2 r10 x5 4 2 r10 .ends xlump8 .subckt xonecm10 1 2 x1 1 3 xlump10 x2 3 4 xlump10 x3 4 5 xlump10 x4 5 6 xlump10 x5 6 7 xlump10 x6 7 8 xlump10 x7 8 9 xlump10 x8 9 10 xlump10 x9 10 11 xlump10 x10 11 2 xlump10 .ends xonecm10 .subckt xonecm8 1 2 x1 1 3 xlump8 x2 3 4 xlump8 x3 4 5 xlump8 x4 5 6 xlump8 x5 6 7 xlump8 x6 7 8 xlump8 x7 8 9 xlump8 x8 9 2 xlump8 .ends xonecm8 .subckt xonecm4 1 2 x1 1 3 xlump4 x2 3 4 xlump4 x3 4 5 xlump4 x4 5 2 xlump4 .ends xonecm4 .subckt xonecm2 1 2 x1 1 3 xlump2 x2 3 2 xlump2 .ends xonecm2 .subckt xtwocm 1 2 x1 1 3 xonecm x2 3 2 xonecm .ends xtwocm .subckt xthreecm 1 2 x1 1 3 xonecm x2 3 4 xonecm x3 4 2 xonecm .ends xthreecm .subckt xfourcm 1 2 x1 1 3 xonecm x2 3 4 xonecm x3 4 5 xonecm x4 5 2 xonecm .ends xfourcm .subckt xfivecm 1 2 x1 1 3 xonecm x2 3 4 xonecm x3 4 5 xonecm x4 5 6 xonecm x5 6 2 xonecm .ends xfivecm .subckt xsixcm 1 2 x1 1 3 xfivecm x2 3 2 xonecm .ends xsixcm .subckt xsevencm 1 2 x1 1 3 xsixcm x2 3 2 xonecm .ends xsevencm .subckt xeightcm 1 2 x1 1 3 xsevencm x2 3 2 xonecm .ends xeightcm .subckt xninecm 1 2 x1 1 3 xeightcm x2 3 2 xonecm .ends xninecm .subckt xtencm 1 2 x1 1 3 xfivecm x2 3 2 xfivecm .ends xtencm .subckt xelevencm 1 2 x1 1 3 xtencm x2 3 2 xonecm .ends xelevencm .subckt xtwelvecm 1 2 x1 1 3 xtencm x2 3 4 xonecm x3 4 2 xonecm .ends xtwelvecm .subckt xsixteencm 1 2 x1 1 3 xeightcm x2 3 2 xeightcm .ends xsixteencm .subckt xtwentyfourcm 1 2 x1 1 3 xtwelvecm x2 3 2 xtwelvecm .ends xtwentyfourcm .end tmpk8ny_4pz/examples/TransmissionLines/txl4_1_line.sp0000644000175000017500000002040513546075722023151 0ustar carstencarsten Example 3 for interconnect simulation * From neug1, Mosaic aluminum lines. 2um thick, 11um wide. Assuming * 10um above the ground. * Material: aluminum; resistivity (sigma) = 2.74uohm-cm = 2.74e-8 ohm-m * Dielectric: SiO2, dielectric constant (epsilon) =3.7 * epsilon0 = 8.85e-12 MKS units * mu0 = 4e-7*PI * speed of light in free space = 1/sqrt(mu0*epsilon0) = 2.9986e8 MKS units * * Line parameter calculations: * capacitance: parallel plate * C = epsilon*epsilon0 * A / l * C = 3.7*8.85e-12 * 11e-6 * 1(metre) / 10e-6 = 36.02e-12 F/m * + 30% = 46.8e-12 F/m = 0.468pF/cm * * C_freespace = 46.8e-12/epsilon = 12.65e-12 F/m * speed of light in free space v0 = 2.9986e8 = 1/sqrt(L0*C0) * => L0 = 1/C0*v0^2 * L0 = 1/(12.65e-12 * 8.9916e16) = 1/113.74e4 = 0.008792e-4 H/m * = 0.8792 uH/m = 8.792nH/cm * * R = rho * l / A = 2.74e-8 * 1 / (11e-6*2e-6) = 1245.45 ohms/m * = 12.45ohms/cm * * transmission line parameters: * nominal z0 = sqrt(L/C) = 137 ohms * td = sqrt(LC) = 64.14e-12 secs/cm = 0.064ns/cm * * vcc vcc 0 5 v1 1 0 0v pulse(0 5 0.1ns 0.1ns 0.1ns 1ns 100ns) rs 1 2 10 xdrv 1 2 vcc bjtdrvr xrcv 3 4 vcc bjtdrvr xrcv 3 4 vcc dioload d1 3 vcc diod d2 0 3 diod cl 3 0 1pF y1 2 0 3 0 yline *x1 2 3 sixteencm x1 2 3 xonecm .model diod d .model yline txl r=12.45 g=0 l=8.792e-9 c=0.468e-12 length=16 .control * 1cm * 2cm * 4cm * 6cm * 8cm * 10cm * 12cm *tran 0.001ns 15ns 0 0.1ns * 24cm tran 0.001ns 10ns 0 0.1ns * onecm10 *tran 0.001ns 10ns 0 0.01ns plot v(1) v(2) v(3) .endc * 1. define the subckt r10 to be one tenth of the resistance per cm. * 2. define the subckt onecm to be one of onecm10 (modelled using * 10 segments), onecm8, onecm4, onecm2 and lump1. Then use * the subckts onecm, fourcm, fivecm, tencm, twelvecm, * twentyfourcm in the circuit. The line is modelled as rlc segments. * 3. define the subckt xonecm to be one of xonecm10, xonecm8, * xonecm4, xonecm2 and xlump1. Use the subckts xonecm, * xfourcm, xfivecm, xtencm, xtwelvecm, xtwentyfourcm in the * circuit. The line will be modelled as r-lossless lumps. .subckt xonecm 1 2 *x1 1 2 xlump1 x1 1 2 xonecm4 .ends xonecm .subckt onecm 1 2 *x1 1 2 lump1 x1 1 2 onecm4 .ends onecm .subckt r10 1 2 r1 1 2 1.245 .ends r10 * ECL driver and diode receiver models - from Raytheon .model qmodn npn(bf=100 rb=100 cje=0.09375pF cjc=0.28125pF is=1e-12 +pe=0.5 pc=0.5) .model qmodpd npn(bf=100 rb=100 cje=0.08187pF cjc=0.2525pF is=1e-12 +pe=0.5 pc=0.5) .model qmodpdmine npn(bf=100 rb=100 cje=0.08187pF cjc=0.05pF is=1e-12 +pe=0.5 pc=0.5) .model dmod1 d(n=2.25 is=1.6399e-4 bv=10) .model dmod2 d .model dmod d(vj=0.3v) .model diod1 d(tt=0.75ns vj=0.6 rs=909 bv=10) .model diod2 d(tt=0.5ns vj=0.3 rs=100 bv=10) * bjt driver - 19=input, 268=output, 20=vcc; wierd node numbers from * the Raytheon file .subckt bjtdrvr 19 268 20 q1 22 18 13 qmodn q2 18 16 13 qmodn qd2 21 9 0 qmodn q4 14 14 0 qmodn q3 16 15 14 qmodpd q5 8 13 17 qmodn q6 25 12 0 qmodn q7 6 17 0 qmodpd qd1 26 10 0 qmodn q8 7 11 10 qmodn q10 268 17 0 qmodpdmine *q10 268 17 0 qmodpd q9 7 10 268 qmodn d1 0 19 dmod1 d2 18 19 dmod2 d3 13 19 dmod dq1 18 22 dmod dq2 16 18 dmod d502 9 21 dmod dq3 15 16 dmod d10 24 8 dmod d4 15 6 dmod dq6 12 25 dmod dq7 17 6 dmod dd1 17 10 dmod d7 11 6 dmod dd2 17 26 dmod d9 23 6 dmod dq8 11 7 dmod d501 17 268 dmod dq9 10 7 dmod d14 20 27 dmod d8 0 268 dmod r1 18 20 6k r2 22 20 2.2k r4 0 13 7k rd1 9 13 2k rd2 21 13 3k r3 16 20 10k r5 15 20 15k r9 0 17 4k r6 24 20 750 r10 12 17 2k r12 24 11 1.5k r11 25 17 3k r15 23 20 10k r13 0 10 15k r14 7 27 12 .ends bjtdrvr * subckt dioload - diode load: input=28, output=4, vcc=5 .subckt dioload 28 4 5 c1 28 0 5pF r503 0 4 5.55 r400 0 28 120k r500 1 5 7.5k d5 4 28 diod2 d1 1 28 diod1 d4 2 0 diod1 d3 3 2 diod1 d2 1 3 diod1 .ends dioload * End ECL driver and Diode receiver models from Raytheon *10 segments per cm .subckt lump10 1 2 l1 1 3 0.0.8792nH c1 2 0 0.0468pF x1 3 2 r10 .ends lump10 *1 segment per cm .subckt lump1 1 2 l1 1 3 8.792nH c1 2 0 0.468pF x1 3 4 r10 x2 4 5 r10 x3 5 6 r10 x4 6 7 r10 x5 7 8 r10 x6 8 9 r10 x7 9 10 r10 x8 10 11 r10 x9 11 12 r10 x10 12 2 r10 .ends lump1 *2 segments per cm .subckt lump2 1 2 l1 1 3 4.396nH c1 2 0 0.234pF x1 3 4 r10 x2 4 5 r10 x3 5 6 r10 x4 6 7 r10 x5 7 2 r10 .ends lump2 *4 segments per cm .subckt lump4 1 2 l1 1 3 2.198nH c1 2 0 0.117pF x1 3 4 r10 x2 4 5 r10 x3 5 2 r10 x4 5 2 r10 .ends lump4 *8 segments per cm .subckt lump8 1 2 l1 1 3 1.099nH c1 2 0 0.0585pF x1 3 4 r10 x2 4 2 r10 x3 4 2 r10 x4 4 2 r10 x5 4 2 r10 .ends lump8 .subckt onecm10 1 2 x1 1 3 lump10 x2 3 4 lump10 x3 4 5 lump10 x4 5 6 lump10 x5 6 7 lump10 x6 7 8 lump10 x7 8 9 lump10 x8 9 10 lump10 x9 10 11 lump10 x10 11 2 lump10 .ends onecm10 .subckt onecm8 1 2 x1 1 3 lump8 x2 3 4 lump8 x3 4 5 lump8 x4 5 6 lump8 x5 6 7 lump8 x6 7 8 lump8 x7 8 9 lump8 x8 9 2 lump8 .ends onecm8 .subckt onecm4 1 2 x1 1 3 lump4 x2 3 4 lump4 x3 4 5 lump4 x4 5 2 lump4 .ends onecm4 .subckt onecm2 1 2 x1 1 3 lump2 x2 3 2 lump2 .ends onecm2 .subckt twocm 1 2 x1 1 3 onecm x2 3 2 onecm .ends twocm .subckt threecm 1 2 x1 1 3 onecm x2 3 4 onecm x3 4 2 onecm .ends threecm .subckt fourcm 1 2 x1 1 3 onecm x2 3 4 onecm x3 4 5 onecm x4 5 2 onecm .ends fourcm .subckt fivecm 1 2 x1 1 3 onecm x2 3 4 onecm x3 4 5 onecm x4 5 6 onecm x5 6 2 onecm .ends fivecm .subckt sixcm 1 2 x1 1 3 fivecm x2 3 2 onecm .ends sixcm .subckt sevencm 1 2 x1 1 3 sixcm x2 3 2 onecm .ends sevencm .subckt eightcm 1 2 x1 1 3 sevencm x2 3 2 onecm .ends eightcm .subckt ninecm 1 2 x1 1 3 eightcm x2 3 2 onecm .ends ninecm .subckt tencm 1 2 x1 1 3 fivecm x2 3 2 fivecm .ends tencm .subckt elevencm 1 2 x1 1 3 tencm x2 3 2 onecm .ends elevencm .subckt twelvecm 1 2 x1 1 3 tencm x2 3 4 onecm x3 4 2 onecm .ends twelvecm .subckt sixteencm 1 2 x1 1 3 eightcm x2 3 2 eightcm .ends sixteencm .subckt twentyfourcm 1 2 x1 1 3 twelvecm x2 3 2 twelvecm .ends twentyfourcm *modelling using R and lossless lines * 10 segments per cm .model yless10 txl r=0 g=0 l=8.792e-9 c=0.468e-12 length=0.1 * 8 segments per cm .model yless8 txl r=0 g=0 l=8.792e-9 c=0.468e-12 length=0.125 * 4 segments per cm .model yless4 txl r=0 g=0 l=8.792e-9 c=0.468e-12 length=0.25 * 2 segments per cm .model yless2 txl r=0 g=0 l=8.792e-9 c=0.468e-12 length=0.5 * 1 segment per cm .model yless1 txl r=0 g=0 l=8.792e-9 c=0.468e-12 length=1 *10 segments per cm .subckt xlump10 1 2 y1 1 0 3 0 yless10 x1 3 2 r10 .ends xlump10 *1 segment per cm .subckt xlump1 1 2 y1 1 0 3 0 yless1 x1 3 4 r10 x2 4 5 r10 x3 5 6 r10 x4 6 7 r10 x5 7 8 r10 x6 8 9 r10 x7 9 10 r10 x8 10 11 r10 x9 11 12 r10 x10 12 2 r10 .ends xlump1 *2 segments per cm .subckt xlump2 1 2 y1 1 0 3 0 yless2 x1 3 4 r10 x2 4 5 r10 x3 5 6 r10 x4 6 7 r10 x5 7 2 r10 .ends xlump2 *4 segments per cm .subckt xlump4 1 2 y1 1 0 3 0 yless4 x1 3 4 r10 x2 4 5 r10 x3 5 2 r10 x4 5 2 r10 .ends xlump4 *8 segments per cm .subckt xlump8 1 2 y1 1 0 3 0 yless8 x1 3 4 r10 x2 4 2 r10 x3 4 2 r10 x4 4 2 r10 x5 4 2 r10 .ends xlump8 .subckt xonecm10 1 2 x1 1 3 xlump10 x2 3 4 xlump10 x3 4 5 xlump10 x4 5 6 xlump10 x5 6 7 xlump10 x6 7 8 xlump10 x7 8 9 xlump10 x8 9 10 xlump10 x9 10 11 xlump10 x10 11 2 xlump10 .ends xonecm10 .subckt xonecm8 1 2 x1 1 3 xlump8 x2 3 4 xlump8 x3 4 5 xlump8 x4 5 6 xlump8 x5 6 7 xlump8 x6 7 8 xlump8 x7 8 9 xlump8 x8 9 2 xlump8 .ends xonecm8 .subckt xonecm4 1 2 x1 1 3 xlump4 x2 3 4 xlump4 x3 4 5 xlump4 x4 5 2 xlump4 .ends xonecm4 .subckt xonecm2 1 2 x1 1 3 xlump2 x2 3 2 xlump2 .ends xonecm2 .subckt xtwocm 1 2 x1 1 3 xonecm x2 3 2 xonecm .ends xtwocm .subckt xthreecm 1 2 x1 1 3 xonecm x2 3 4 xonecm x3 4 2 xonecm .ends xthreecm .subckt xfourcm 1 2 x1 1 3 xonecm x2 3 4 xonecm x3 4 5 xonecm x4 5 2 xonecm .ends xfourcm .subckt xfivecm 1 2 x1 1 3 xonecm x2 3 4 xonecm x3 4 5 xonecm x4 5 6 xonecm x5 6 2 xonecm .ends xfivecm .subckt xsixcm 1 2 x1 1 3 xfivecm x2 3 2 xonecm .ends xsixcm .subckt xsevencm 1 2 x1 1 3 xsixcm x2 3 2 xonecm .ends xsevencm .subckt xeightcm 1 2 x1 1 3 xsevencm x2 3 2 xonecm .ends xeightcm .subckt xninecm 1 2 x1 1 3 xeightcm x2 3 2 xonecm .ends xninecm .subckt xtencm 1 2 x1 1 3 xfivecm x2 3 2 xfivecm .ends xtencm .subckt xelevencm 1 2 x1 1 3 xtencm x2 3 2 xonecm .ends xelevencm .subckt xtwelvecm 1 2 x1 1 3 xtencm x2 3 4 xonecm x3 4 2 xonecm .ends xtwelvecm .subckt xsixteencm 1 2 x1 1 3 xeightcm x2 3 2 xeightcm .ends xsixteencm .subckt xtwentyfourcm 1 2 x1 1 3 xtwelvecm x2 3 2 xtwelvecm .ends xtwentyfourcm .end tmpk8ny_4pz/examples/TransmissionLines/cpl3_4_line.sp0000644000175000017500000000177313546075722023131 0ustar carstencarsten6.3inch 4 lossy lines CPL model -- R load Ra 1 2 1K Rb 0 3 1K Rc 0 4 1K Rd 0 5 1K Re 6 0 1Meg Rf 7 0 1Meg Rg 8 0 1Meg Rh 9 0 1Meg * P1 2 3 4 5 0 6 7 8 9 0 LOSSYMODE * * VS1 1 0 PWL(15.9NS 0.0 16.1Ns 5.0 31.9Ns 5.0 32.1Ns 0.0) * .control TRAN 0.2NS 50NS 0 0.05N PLOT V(1) V(2) V(6) V(7) V(8) V(9) .endc .MODEL LOSSYMODE CPL +R=0.3 0 0 0 + 0.3 0 0 + 0.3 0 + 0.3 +L=9e-9 5.4e-9 0 0 + 9e-9 5.4e-9 0 + 9e-9 5.4e-9 + 9e-9 +G=0 0 0 0 0 0 0 0 0 0 +C=3.5e-13 -3e-14 0 0 + 3.5e-13 -3e-14 0 + 3.5e-13 -3e-14 + 3.5e-13 +length=6.3 .END tmpk8ny_4pz/examples/soi/0000755000175000017500000000000013546075722015570 5ustar carstencarstentmpk8ny_4pz/examples/soi/bsim4soi/0000755000175000017500000000000013546075722017321 5ustar carstencarstentmpk8ny_4pz/examples/soi/bsim4soi/pmos4p0.mod0000644000175000017500000001063713546075722021333 0ustar carstencarsten*BSIMSOI4.0 example modelcard .Model P1 PMOS Level= 10 +MOBMOD = 2 SHMOD = 1 CAPMOD = 2 +SOIMOD = 0 IGBMOD = 1 IGCMOD = 1 +RDSMOD = 0 +TNOM = 25 TOX = 3e-9 TOXM = 3e-9 +TBOX = 4e-7 TSI = 41e-9 VTH0 = -0.15 +NCH = 1.5e18 NSUB = 1e16 +RBODY = 0 RBSH = 0 +LINT = 0 LLN = 1 LW = 0 +LWN = 0 LWL = 0 +WINT = 0 WLN = 1 WW = 0 +WWN = 1 WWL = 0 +CDSC = .1835 CDSCB = 0.073 CDSCD = .1376 +CIT = .00000918 NFACTOR = .8258 XJ = 5E-08 +VSAT = 101362 AT = 6264 +A0 = 1.5 AGS = 1.0 A1 = 0.145 +A2 = 0.7 KETA = 0.1 KETAS = 0.07 +NGATE = 0 +K1 = .52 KT1 = -.18 KT1L = 6e-9 +KT2 = -.02 K2 = 0 K3 = -1 +K3B = 0 W0 = 0 +LPE0 = 1.75E-07 DVT0 = 130 DVT1 = 2.4325 +DVT2 = 0.07 DVT0W = 0 DVT1W = 0 +DVT2W = 0 +DROUT = 3.09 DSUB = 2.004 +UA = 3E-10 UA1 = 4.36E-10 UB = 1.3067E-18 +UB1 = -1.188E-18 UC = -6.5395E-10 UC1 = 1.537E-10 +U0 = .0097 UTE = -.75 +VOFF = -.15 DELTA = .04 +RDSW = 340 PRWG = 0 PRWB = 0 +PRT = 30 +ETA0 = 5 ETAB = -.04 PCLM = .634584 +PDIBLC1 = 10 PDIBLC2 = .0172 PDIBLCB = 1.12E-08 +PVAG = -.15 +WR = 1 DWG = 0 DWB = 0 +B0 = 0 B1 = 0 +NDIODE = 1.10 NRECF0 = 1.6 NRECR0 = 7.5 +NDIODED = 1.10 NRECF0D = 1.6 NRECR0D = 7.5 +NTUN = 2.05 ISDIF = 1.5e-4 ISREC = 1.8e-2 +NTUND = 2.05 IDDIF = 1.5e-4 IDREC = 1.8e-2 +ISTUN = 1.7e-5 VREC0 = 1.6 VTUN0 = 1.40 +IDTUN = 1.7e-5 VREC0D = 1.6 VTUN0D = 1.40 +ISBJT = .13 LBJT0 = 1e-8 VABJT = -0.9 +IDBJT = .13 AHLID = 0.7E-09 +AELY = 2E+07 AHLI = 0.7E-09 NBJT = .9 +FBJTII = 0 LN = .00001 +NTRECF = .05 NTRECR = 0.03 XDIF = 1.00 +XBJT = 1.15 XREC = 0.85 XTUN = 0.0 +ALPHA0 = 1E-08 BETA0 = 0 BETA1 = .034 +BETA2 = .065 TII = -.5 SII0 = 3 +SII1 = .7 SII2 = .08 SIID = -.4 +ESATII = 3200000 LII = 0 VDSATII0 = 0.74 +AGIDL = 0 +RTH0 = .04 CTH0 = 1.46e-5 +CLC = 1e-7 CLE = 0.6 XPART = 0 +DWC = -0.029e-6 DLC = 0.021e-6 DELVT = -0.0686 +CGSO = 0.38e-10 CGDO = 0.38e-10 CKAPPA = 4 +CGSL = 2.3e-10 CGDL = 2.3e-10 CF = 0 +CJSWG = 4.04e-10 MJSWG = 0.61275 PBSWG = 1.0363 +CJSWGD = 4.04e-10 MJSWGD = 0.61275 PBSWGD = 1.0363 +CJSWG =0.0 CJSWGD = 0.0 +TCJSWG = 1.11e-3 TT = 2.0e-13 NDIF = -1 +LDIF0 = 1 KB1 = 1 CSDMIN = 1e-20 +TOXQM = 1.045E-9 TOXREF = 1.67e-9 NTOX = 1 +EBG = 1.6 VEVB = 0.075 ALPHAGB1 = 0.465 +BETAGB1 = 0.07 VGB1 = 40 VGB2 = 24 +VECB = 0.018 ALPHAGB2 = 0.425 BETAGB2 = 0.055 +AIGC = 0.043 BIGC = 0.0054 CIGC = 0.0075 +AIGSD = 0.043 BIGSD = 0.0054 CIGSD = 0.0075 +DLCIG = 2e-8 NIGC = 1 PIGCD = 1.0 +POXEDGE = 1 +SAREF = 5E-6 SBREF = 5E-6 WLOD = 2E-6 +KU0 = 4E-6 KVSAT = 0.2 KVTH0 = 0.0 +TKU0 = 0.0 LLODKU0 = 1.1 WLODKU0 = 1.1 +LLODVTH = 1.0 WLODVTH = 1.0 LKU0 = 1E-6 +WKU0 = 1E-6 PKU0 = 0.0 LKVTH0 = 1.1E-6 +WKVTH0 = 1.1E-6 PKVTH0 = 0.0 STK2 = 0.0 +LODK2 = 1.0 STETA0 = 0.0 LODETA0 = 1.0 +RGATEMOD= 0 RSHG = 2.1 XRCRG1 = 12 +XRCRG2 = 1 +RBODYMOD= 0 RBDB = 10 RBSB = 50 tmpk8ny_4pz/examples/soi/bsim4soi/nmos4p0.mod0000644000175000017500000001055613546075722021331 0ustar carstencarsten* BSIMSOI4.0 example modelcard .Model N1 NMOS Level= 10 +MOBMOD = 2 SHMOD = 1 CAPMOD = 2 +SOIMOD = 0 IGBMOD = 1 IGCMOD = 1 +RDSMOD = 0 +TNOM = 25 TOX = 3.e-9 TSI = 41e-9 +TBOX = 100e-9 TOXM = 3.e-9 VTH0 = 0.29 +NCH = 4e17 NSUB = 1e16 +RBODY = 0 RBSH = 0 +LINT = 0 LLN = 1 LW = 0 +LWN = 0 LWL = 0 +WINT = 0 WLN = 1 WW = 0 +WWN = 1 WWL = 0 +CDSC = 1.3 CDSCB = 0.004 CDSCD = 0.1 +CIT = 0.00007 NFACTOR = .9 XJ = 5E-08 +VSAT = 86000 AT = 28000 +A0 = 1.8 AGS = -0.175 A1 = 0 +A2 = 0.99 KETA = 0.25 KETAS = 0.23 +NGATE = 0 +K1 = .59 KT1 = -.28 KT1L = 8e-9 +KT2 = -.0646 K2 = 0 K3 = -3.5 +K3B = 0 W0 = 0 +LPE0 = 6.3E-8 DVT0 = 200 DVT1 = 3.72 +DVT2 = 0.19 DVT0W = 0 DVT1W = 0 +DVT2W = 0 DROUT = 3.617 DSUB = 1.12 +UA = 8E-11 UA1 = 3.37e-10 UB = 2.2e-18 +UB1 = -3.12e-18 UC = -5e-10 UC1 = -6.1e-10 +U0 = 268 UTE = -1.6 +VOFF = -.13 DELTA = 0.01 PRT = 10 +RDSW = 175 PRWG = 0 PRWB = -0.0176 +ETA0 = 0.31 ETAB = -.1605 PCLM = 1.8804 +PDIBLC1 = 20 PDIBLC2 = 0 PDIBLCB = -0.05 +PVAG = -0.07 +WR = 1 DWG = 0 DWB = 0 +B0 = 0 B1 = 10 +NDIODE = 1.00 NRECF0 = 2.20 NRECR0 = 7.7 +NDIODED = 1.00 NRECF0D = 2.20 NRECR0D = 7.7 +NTUN = 25 ISDIF = 2e-6 ISREC = 13 +NTUND = 25 IDDIF = 2e-6 IDREC = 13 +ISTUN = 1e-5 VREC0 = 2.8 VTUN0 = 1 +IDTUN = 1e-5 VREC0D = 2.8 VTUN0D = 1 +IDBJT = 1e-5 AHLID = 1.5e-10 +ISBJT = 4e-3 LBJT0 = 8e-8 VABJT = -0.4 +AELY = 5.5e7 AHLI = 1.5e-10 NBJT = .6 +FBJTII = 0.06 LN = .00001 +NTRECF = 0.60 NTRECR = 1.2 XDIF = 1.15 +XBJT = 1.08 XREC = 0.95 XTUN = 0 +ALPHA0 = 1E-08 BETA0 = 0 BETA1 = .028 +BETA2 = .067 TII = -0.7 SII0 = 3.4 +SII1 = .8 SII2 = .08 SIID = 0.08 +ESATII = 1.7e6 VDSATII0 = 0.55 LII = 3e-9 +AGIDL = 0 +RTH0 = .01 CTH0 = 1.46e-5 +CLC = 1e-7 CLE = 0.6 XPART = 0.0 +DWC = -0.0217e-6 DLC = 0.0120e-6 DELVT = -0.131 +CGSO = 1.44e-10 CGDO = 1.44e-10 CGSL = 1.634e-10 +CF = 0 CGDL = 1.634e-10 CKAPPA = 2 +CJSWG = 3.79e-10 MJSWG = 0.675 PBSWG = 1.004 +CJSWGD = 3.79e-10 MJSWGD = 0.675 PBSWGD = 1.004 +TCJSWG = 6.5e-4 NDIF = -1 TT = 2.4e-10 +DLBG = 0.105e-6 LDIF0 = 5e-3 +KB1 = 1 CSDMIN = 0 +TOXQM = 1.045E-9 TOXREF = 1.67e-9 NTOX = 1 +EBG = 1.6 VEVB = 0.075 ALPHAGB1 = 0.465 +BETAGB1 = 0.07 VGB1 = 40 VGB2 = 24 +VECB = 0.018 ALPHAGB2 = 0.425 BETAGB2 = 0.055 +AIGC = 0.043 BIGC = 0.0054 CIGC = 0.0075 +AIGSD = 0.043 BIGSD = 0.0054 CIGSD = 0.0075 +DLCIG = 2e-8 NIGC = 1 PIGCD = 1.0 +POXEDGE = 1 +FNOIMOD = 1 TNOIMOD = 1 TNOIA = 1 +TNOIB = 2.5 RNOIA = 0.577 RNOIB = 0.37 +NTNOI = 1.0 EM = 41000000 AF = 1 +EF = 1 KF = 1 NOIF = 2.0 +SAREF = 5E-6 SBREF = 5E-6 WLOD = 2E-6 +KU0 = -4E-6 KVSAT = 0.2 KVTH0 = 0.0 +TKU0 = 0.0 LLODKU0 = 1.1 WLODKU0 = 1.1 +LLODVTH = 1.0 WLODVTH = 1.0 LKU0 = 1E-6 +WKU0 = 1E-6 PKU0 = 0.0 LKVTH0 = 1.1E-6 +WKVTH0 = 1.1E-6 PKVTH0 = 0.0 STK2 = 0.0 +LODK2 = 1.0 STETA0 = 0.0 LODETA0 = 1.0 +RGATEMOD= 0 RSHG = 1.1 XRCRG1 = 1 +XRCRG2 = 1 +RBODYMOD= 0 RBDB = 10 RBSB = 50 tmpk8ny_4pz/examples/soi/inv_tr.sp0000644000175000017500000000115113546075722017433 0ustar carstencarstenSOI Inverter * Mx Drain Gate Source Back-gate(substrate) Body Tx W L (body ommitted for FB) .include ./bsim4soi/nmos4p0.mod .include ./bsim4soi/pmos4p0.mod .option TEMP=27C Vpower VD 0 1.5 Vgnd VS 0 0 Vgate Gate VS DC 0 PULSE(0v 1.5v 100ps 50ps 50ps 200ps 500ps) *MN0 Out Gate VS VS VS N1 W=10u L=0.18u debug=1 *MP0 Out Gate VD VS VD P1 W=20u L=0.18u debug=1 MN0 Out Gate VS VS N1 W=10u L=0.18u Pd=11u Ps=11u MP0 Out Gate VD VS P1 W=20u L=0.18u Pd=11u Ps=11u .tran 3p 600ps .print tran v(gate) v(out) .control if $?batchmode * do nothing else run plot Vgnd#branch plot gate out endif .endc .END tmpk8ny_4pz/examples/soi/Inv_chain.sp0000644000175000017500000000153513546075722020036 0ustar carstencarstenMx Drain in Source Back-gate(substrate) Body Tx W L (body ommitted for FB) .include ./bsim4soi/nmos4p0.mod .include ./bsim4soi/pmos4p0.mod *.option TEMP=27C ITL4=100 RELTOL=.01 GMINSTEPS=200 ABSTOL=1N VNTOL=1M Vpower VD 0 1.5 Vgnd VS 0 0 Vgate in VS PULSE(0v 1.5v 100ps 50ps 50ps 200ps 500ps) *drain gate source substrate body contact MN0 out0 in VS VS VS N1 W=5u L=0.18u MP0 out0 in VD VS VD P1 W=10u L=0.18u MN1 out1 Out0 VS VS VS N1 W=5u L=0.18u MP1 out1 Out0 VD VS VD P1 W=10u L=0.18u MN2 out2 Out1 VS VS VS N1 W=5u L=0.18u MP2 out2 Out1 VD VS VD P1 W=10u L=0.18u MN3 out3 Out2 VS VS VS N1 W=5u L=0.18u MP3 out3 Out2 VD VS VD P1 W=10u L=0.18u MN4 out4 Out3 VS VS VS N1 W=5u L=0.18u MP4 out4 Out3 VD VS VD P1 W=10u L=0.18u .tran 6p 600p .print tran v(in) v(out4) .control if $?batchmode * do nothing else run plot in out4 endif .endc .END tmpk8ny_4pz/examples/soi/inv_dc.sp0000644000175000017500000000064713546075722017405 0ustar carstencarsten Mx Drain Gate Source Back-gate(substrate) Body Tx W L (body ommitted for FB) .include ./bsim4soi/nmos4p0.mod .include ./bsim4soi/pmos4p0.mod .option TEMP=27C Vpower VD 0 1.5 Vgnd VS 0 0 Vgate Gate 0 0.0 MN0 Out Gate VS VS VS N1 W=10u L=0.18u MP0 Out Gate VD VS VD P1 W=20u L=0.18u .dc Vgate 0 1.5 0.05 .print dc v(out) .control if $?batchmode * do nothing else run plot out plot Vgnd#branch endif .endc .END tmpk8ny_4pz/examples/soi/ring51_40.sp0000644000175000017500000000234213546075722017545 0ustar carstencarsten* 51 stage Ring-Osc. vin in out 2 pulse 2 0 0.1n 5n 1 1 1 vdd dd 0 dc 0 pulse 0 1.5 0 1n 1 1 1 vss ss 0 dc 0 ve sub 0 dc 0 vn n1 0 0 xinv1 dd ss sub in out25 inv25 xinv2 dd ss sub out25 out50 inv25 xinv5 dd ss sub out50 out inv1 xinv11 dd ss sub out buf inv1 cout buf ss 1pF * this is needed .option reltol=1e-4 .tran 0.2n 16n .print tran v(out25) v(out50) .include ./bsim4soi/nmos4p0.mod .include ./bsim4soi/pmos4p0.mod .subckt inv1 dd ss sub in out mn1 out in ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u pdbcp=0u mp1 out in dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u pdbcp=0u .ends inv1 .subckt inv5 dd ss sub in out xinv1 dd ss sub in 1 inv1 xinv2 dd ss sub 1 2 inv1 xinv3 dd ss sub 2 3 inv1 xinv4 dd ss sub 3 4 inv1 xinv5 dd ss sub 4 out inv1 .ends inv5 .subckt inv25 dd ss sub in out xinv1 dd ss sub in 1 inv5 xinv2 dd ss sub 1 2 inv5 xinv3 dd ss sub 2 3 inv5 xinv4 dd ss sub 3 4 inv5 xinv5 dd ss sub 4 out inv5 .ends inv25 .control if $?batchmode * do nothing else save out25 out50 run plot out25 out50 let lin-tstart = 4n $ skip the start-up phase let lin-tstop = 14n $ end earlier(just for demonstration) let lin-tstep = 5p linearize out25 out50 plot out25 out50 endif .endc .end tmpk8ny_4pz/examples/proc2mod/0000755000175000017500000000000013546075722016523 5ustar carstencarstentmpk8ny_4pz/examples/proc2mod/process.pro0000644000175000017500000001303013546075722020720 0ustar carstencarstenNM1 PM1 NM2 PM2 NM3 PY1 ML1 ML2 DU1 DU2 * * Example process file * *PROCESS=BSIM *RUN= *WAFER= *XPOS=6 *YPOS=5 *OPERATOR=Min-Chie *DATE=July-16-85 * * NMOS-1 PARAMETERS (07-16-85) * -1.0087E+000,-2.1402E-001,3.44354E-001 7.96434E-001,0.00000E+000,0.00000E+000 1.31191E+000,3.23395E-001,-5.7698E-001 1.46640E-001,1.68585E-001,-1.8796E-001 -1.0027E-003,-9.4847E-003,1.47316E-002 5.34334E+002,7.9799E-001,4.7740E-001 4.38497E-002,6.38105E-002,-6.1053E-002 -5.7332E-002,1.01174E+000,1.62706E-002 8.25434E+000,-2.4197E+001,1.95696E+001 -7.6911E-004,9.62411E-003,-3.7951E-003 7.86777E-004,7.35448E-004,-1.7796E-003 1.06821E-003,-8.0958E-003,4.03379E-003 -1.9209E-002,-7.4573E-002,1.47520E-002 5.40612E+002,6.21401E+002,-1.9190E+002 -1.2992E+001,-6.4900E+001,4.29043E+001 -9.4035E+000,1.18239E+002,-2.9747E+001 0.0000E-002,0.00000E-001,0.0000E-002 3.00000E-002,2.70000E+001,5.00000E+000 ** 2.70000E-010,2.70000E-010,1.40000E-010 ** remove the overlap capacitances !! 0.00000E-000,0.00000E-000,0.00000E-000 1.0 0.0, 0.0 0.0, 0.0, 0.0 0.0, 0.0, 0.0 0.0, 0.0, 0.0 * *PROCESS=BSIM *RUN= *WAFER= *XPOS=6 *YPOS=5 *OPERATOR= TRANSLATED FROM NM1 * (BY SCALING THE MOBILITY PARAMETERS) *DATE=July-16-85 * * PMOS-1 PARAMETERS (07-16-85) * -1.0087E+000,-2.1402E-001,3.44354E-001 7.96434E-001,0.00000E+000,0.00000E+000 1.31191E+000,3.23395E-001,-5.7698E-001 1.46640E-001,1.68585E-001,-1.8796E-001 -1.0027E-003,-9.4847E-003,1.47316E-002 1.82193E+002,2.7226E-001,1.6288E-001 4.38497E-002,6.38105E-002,-6.1053E-002 -5.7332E-002,1.01174E+000,1.62706E-002 2.81626E+000,-0.8255E+001,0.66768E+001 -7.6911E-004,9.62411E-003,-3.7951E-003 7.86777E-004,7.35448E-004,-1.7796E-003 1.06821E-003,-8.0958E-003,4.03379E-003 -1.9209E-002,-7.4573E-002,1.47520E-002 1.84449E+002,2.12012E+002,-0.6547E+002 -0.4433E+001,-2.2143E+001,1.46383E+001 -3.2083E+000,0.40341E+002,-1.0149E+001 0.0000E-002,0.00000E-001,0.0000E-002 3.00000E-002,2.70000E+001,5.00000E+000 ** 2.70000E-010,2.70000E-010,1.40000E-010 ** remove the overlap capacitances !! 0.00000E-000,0.00000E-000,0.00000E-000 1.0 0.0, 0.0 0.0, 0.0, 0.0 0.0, 0.0, 0.0 0.0, 0.0, 0.0 * * *PROCESS=BSIM *RUN=6,8 *WAFER=1 *XPOS=6 *YPOS=5 *OPERATOR=joey & min *DATE=3/8/'85 * * NMOS-2 PARAMETERS (03-08-85) * -1.0682E+000,-6.7765E-002,4.15888E-001 7.93602E-001,0.00000E+000,0.00000E+000 1.38210E+000,1.56889E-001,-6.3435E-001 1.60163E-001,1.41849E-001,-2.0333E-001 -1.1885E-002,1.33579E-002,2.13053E-002 5.44582E+002,9.4444E-001,4.4423E-001 4.02955E-002,5.36003E-002,-5.1224E-002 2.01256E-001,4.30621E-001,-1.5909E-001 -1.1522E+000,-2.5360E+000,2.48135E+001 -3.0525E-003,1.40355E-002,-2.1259E-003 2.33703E-003,-1.9621E-003,-3.0147E-003 -1.5014E-003,-1.7938E-003,5.04494E-003 -9.6961E-002,9.68463E-002,6.56404E-002 5.95572E+002,4.75833E+002,-2.3062E+002 -7.7819E+001,7.75110E+001,8.19963E+001 -1.8177E+001,1.23358E+002,-1.9316E+001 0.0000E-003,0.00000E-002,0.0000E-002 3.20000E-002,2.70000E+001,5.00000E+000 2.69000E-010,2.69000E-010,2.34000E-010 1.0, 0.0, 0.0 0.0, 0.0, 0.0 0.0, 0.0, 0.0 0.0, 0.0, 0.0 * * PMOS-2 PARAMETERS (03-08-85) * -2.1389E-001,3.36471E-002,2.20237E-001 6.97239E-001,0.00000E+000,0.00000E+000 5.95618E-001,-9.7957E-002,-8.1902E-002 -2.0029E-002,1.97751E-002,-4.0038E-002 -1.4030E-002,3.62814E-002,1.44720E-002 1.82193E+002,8.6560E-001,5.7444E-001 1.12067E-001,9.28463E-002,-8.8985E-002 2.39431E-002,8.89483E-002,1.05634E-002 7.51914E+000,-1.8327E+000,3.98658E+000 -1.3199E-003,4.00836E-003,1.97847E-004 5.70255E-004,-1.2309E-003,-2.3082E-003 5.07623E-003,-1.8537E-004,1.76966E-003 -1.2781E-002,1.14420E-002,6.36308E-003 1.89043E+002,8.64555E+001,-3.4304E+001 4.09098E+000,3.51921E+000,4.49145E+000 6.71879E-001,7.66627E+000,-1.5826E+000 0.0000E-003,0.00000E-003,0.0000E-003 3.20000E-002,2.70000E+001,5.00000E+000 4.39000E-010,4.39000E-010,2.34000E-010 1.0, 0.0, 0.0 0.0, 0.0, 0.0 0.0, 0.0, 0.0 0.0, 0.0, 0.0 * *PROCESS=BSIM *RUN= *WAFER= *XPOS=6 *YPOS=5 *OPERATOR= TRANSLATED FROM NM1 * (BY SHIFTING VFB --- THE SIZE-INDEP. TERM ONLY) *DATE=July-16-85 * * NMOS-3 PARAMETERS (DEPLETION-MODE) (07-16-85) * -5.6087E+000,-2.1402E-001,3.44354E-001 +** -1.0087E+000,-2.1402E-001,3.44354E-001 7.96434E-001,0.00000E+000,0.00000E+000 1.31191E+000,3.23395E-001,-5.7698E-001 1.46640E-001,1.68585E-001,-1.8796E-001 -1.0027E-003,-9.4847E-003,1.47316E-002 5.34334E+002,7.9799E-001,4.7740E-001 4.38497E-002,6.38105E-002,-6.1053E-002 -5.7332E-002,1.01174E+000,1.62706E-002 8.25434E+000,-2.4197E+001,1.95696E+001 -7.6911E-004,9.62411E-003,-3.7951E-003 7.86777E-004,7.35448E-004,-1.7796E-003 1.06821E-003,-8.0958E-003,4.03379E-003 -1.9209E-002,-7.4573E-002,1.47520E-002 5.40612E+002,6.21401E+002,-1.9190E+002 -1.2992E+001,-6.4900E+001,4.29043E+001 -9.4035E+000,1.18239E+002,-2.9747E+001 0.0000E-002,0.00000E-001,0.0000E-002 3.00000E-002,2.70000E+001,5.00000E+000 ** 2.70000E-010,2.70000E-010,1.40000E-010 ** remove the overlap capacitances !! 0.00000E-000,0.00000E-000,0.00000E-000 1.0 0.0, 0.0 0.0, 0.0, 0.0 0.0, 0.0, 0.0 0.0, 0.0, 0.0 * ************************************** ************************************** * * poly layer-1 * 30.0, 7.0E-5, 0, 0, 0 0, 0, 0, 0, 0 * * metal layer-1 * 0.040, 2.60E-5, 0, 0, 0 0, 0, 0, 0, 0 * * metal layer-2 (top metal) * 0.030, 1.3E-5, 0, 0, 0 0, 0, 0, 0, 0 * * n+ diffusion layer * 35.0, 2.75E-4, 1.90E-10, 1.0E-5, 0.7 0.8, 0.5, 0.33, 0, 0 * * p+ diffusion layer * 120.0, 3.1E-4, 3.0E-010, 1.0E-5, 0.7 0.8, 0.5, 0.33, 0, 0 tmpk8ny_4pz/examples/various/0000755000175000017500000000000013546075722016466 5ustar carstencarstentmpk8ny_4pz/examples/various/agauss_test.cir0000644000175000017500000000246213546075722021513 0ustar carstencarsten* agauss test in ngspice * generate a sequence of gaussian distributed random numbers. * test the distribution by sorting the numbers into * a histogram (buckets) * chapt. 17.8.6 .control define agauss(nom, avar, sig) (nom + avar/sig * sgauss(0)) let mc_runs = 200 let run = 0 let no_buck = 8 $ number of buckets let bucket = unitvec(no_buck) $ each element contains 1 let delta = 3e-11 $ width of each bucket, depends $ on avar and sig let lolimit = 1e-09 - 3*delta let hilimit = 1e-09 + 3*delta dowhile run < mc_runs let val = agauss(1e-09, 1e-10, 3) $ get the random number if (val < lolimit) let bucket[0] = bucket[0] + 1 $ 'lowest' bucket end let part = 1 dowhile part < (no_buck - 1) if ((val < (lolimit + part*delta)) & + (val > (lolimit + (part-1)*delta))) let bucket[part] = bucket[part] + 1 break end let part = part + 1 end if (val > hilimit) * 'highest' bucket let bucket[no_buck - 1] = bucket[no_buck - 1] + 1 end let run = run + 1 end let part = 0 dowhile part < no_buck let value = bucket[part] - 1 set value = "$&value" * print the buckets' contents echo $value let part = part + 1 end .endc .end tmpk8ny_4pz/examples/various/nic_soa.cir0000644000175000017500000000136113546075722020601 0ustar carstencarstenCMOS NIC * .subckt osc_cmos ib_osz lc ra vdd vss m16 ib_osz ib_osz vss vss n1 w=20u l=1u m=8 m15 ra ib_osz vss vss n1 w=20u l=1u m=2 m8 net99 net95 ra ra n1 w=20u l=1u m=2 m1 net95 net95 net93 net93 n1 w=20u l=1u m=2 m25 net99 net99 vdd vdd p1 w=3.3u l=0.5u m=1 m5 net99 net99 vdd vdd p1 w=20u l=1u m=5 m4 net95 net99 vdd vdd p1 w=20u l=1u m=5 r23 net99 vss r=38K r18 net93 lc r=10 .ends osc_cmos * .subckt psens LC R1 LC P001 40K L1 LC P002 14.9u R2 P002 0 0.55 L2 P001 0 1.4m .ends psens * xi36 bias lc ra vdd 0 osc_cmos v39 vdd 0 dc=3.5 pulse ( 0 3.5 10u 10n 10n 1 2 ) r4 ra 0 3.972K c23 lc 0 1.8n i37 vdd bias dc=1u * xi18 lc psens * .option warn=1 .control tran 1u 1m 0 50n plot v(LC) .endc * .include modelcard.nmos .include modelcard.pmos * .end tmpk8ny_4pz/examples/various/tmp-noise-2.cir0000644000175000017500000000045013546075722021236 0ustar carstencarsten* (exec-spice "ngspice %s" t) * actually not noise but temp coeff v1 1 0 dc 100 ac=1 b2 2 0 i=v(1) tc1=0.001 v2 0 2 0 b3 3 0 v=v(1) tc1=0.001 .temp 127.0 .control op let idc2=i(v2) let vdc3=v(3) print idc2 vdc3 ac dec 1 1kHz 1kHz let iac2=i(v2) let vac3=v(3) print iac2 vac3 .endc tmpk8ny_4pz/examples/various/3d_loop.sp0000644000175000017500000001115513546075722020374 0ustar carstencarstentesting loops *variables are global *vector reside only in the plot where they where created .param rr = 10k R1 r2 0 r = {rr + 40*TEMPER} V1 r2 0 1 .control *create a new plot as our base plot setplot new set curplottitle = "crossplot" set plotname=$curplot let aa = 5 let bb = 3 let cc = 6 set aa="$&aa" set bb="$&bb" set cc="$&cc" * generate vector with all (here 90) elements let result=vector(90) settype current result * reshape vector to format 5 x 3 x 6 *reshape result [5][3][6] reshape result [$aa][$bb][$cc] * vector to store temperature let tvect=vector(5) * vector to store voltage let vvect=vector(6) * vector to store parameter values let pvect=vector(3) *index for storing in vectors tvect and result let indexp = 0 foreach pvar 9.5k 10k 10.5k let indexv = 0 alterparam rr = $pvar let pvect[indexp] = $pvar mc_source foreach var -40 -20 0 20 40 set temp = $var dc v1 0 5 1 *store name of the actual dc plot set dcplotname = $curplot * back to the base plot setplot $plotname let result[indexv][indexp] = {$dcplotname}.v1#branch let tvect[indexv] = $var if indexv = 0 let vvect = {$dcplotname}.r2 end let indexv = indexv + 1 * destroy $dcplotname end let indexp = indexp + 1 remcirc end settype voltage vvect setscale vvect let indexplot = 0 while indexplot < indexp *plot result[0][indexplot] result[1][indexplot] result[2][indexplot] result[3][indexplot] result[4][indexplot] let indexplot = indexplot + 1 end plot +result[0][0] result[1][0] result[2][0] result[3][0] result[4][0] +result[0][1] result[1][1] result[2][1] result[3][1] result[4][1] +result[0][2] result[1][2] result[2][2] result[3][2] result[4][2] write 3d_loop_i_vs_v.out +result[0][0] result[1][0] result[2][0] result[3][0] result[4][0] +result[0][1] result[1][1] result[2][1] result[3][1] result[4][1] +result[0][2] result[1][2] result[2][2] result[3][2] result[4][2] *transpoe a 3D vector let aai = 0 let bbi = 0 let cci = 0 let result1 = vector(90) settype current result1 * reshape vector to format 3 x 6 x 5 reshape result1 [$bb][$cc][$aa] * shift from vector format 5 x 3 x 6 to 3 x 6 x 5 *echo test output > resultout.txt while aai < aa let bbi = 0 while bbi < bb let cci = 0 while cci < cc let result1[bbi][cci][aai] = result[aai][bbi][cci] * print bbi cci aai >> resultout.txt * print result1[bbi][cci][aai] >> resultout.txt let cci = cci + 1 end let bbi = bbi + 1 end let aai = aai + 1 end settype temp-sweep tvect setscale tvect * current through v1 versus temperature plot +result1[0][0] result1[1][0] result1[2][0] +result1[0][1] result1[1][1] result1[2][1] +result1[0][2] result1[1][2] result1[2][2] +result1[0][3] result1[1][3] result1[2][3] +result1[0][4] result1[1][4] result1[2][4] +result1[0][5] result1[1][5] result1[2][5] write 3d_loop_i_vs_t.out +result1[0][0] result1[1][0] result1[2][0] +result1[0][1] result1[1][1] result1[2][1] +result1[0][2] result1[1][2] result1[2][2] +result1[0][3] result1[1][3] result1[2][3] +result1[0][4] result1[1][4] result1[2][4] +result1[0][5] result1[1][5] result1[2][5] *plot result1 *transpoe a 3D vector let aai = 0 let bbi = 0 let cci = 0 let result2 = vector(90) settype current result2 * reshape vector to format 6 x 5 x 3 reshape result2 [$cc][$aa][$bb] * shift from vector format 3 x 6 x 5 to 6 x 5 x 3 *echo test output > resultout.txt while aai < aa let bbi = 0 while bbi < bb let cci = 0 while cci < cc let result2[cci][aai][bbi] = result1[bbi][cci][aai] * print cci aai bbi >> resultout.txt * print result2[cci][aai][bbi] >> resultout.txt let cci = cci + 1 end let bbi = bbi + 1 end let aai = aai + 1 end settype impedance pvect setscale pvect * current through v1 versus parameter rr plot +result2[0][0] result2[1][0] result2[2][0] result2[3][0] result2[4][0] result2[5][0] +result2[0][1] result2[1][1] result2[2][1] result2[3][1] result2[4][1] result2[5][1] +result2[0][2] result2[1][2] result2[2][2] result2[3][2] result2[4][2] result2[5][2] +result2[0][3] result2[1][3] result2[2][3] result2[3][3] result2[4][3] result2[5][3] +result2[0][4] result2[1][4] result2[2][4] result2[3][4] result2[4][4] result2[5][4] write 3d_loop_i_vs_para.out +result2[0][0] result2[1][0] result2[2][0] result2[3][0] result2[4][0] result2[5][0] +result2[0][1] result2[1][1] result2[2][1] result2[3][1] result2[4][1] result2[5][1] +result2[0][2] result2[1][2] result2[2][2] result2[3][2] result2[4][2] result2[5][2] +result2[0][3] result2[1][3] result2[2][3] result2[3][3] result2[4][3] result2[5][3] +result2[0][4] result2[1][4] result2[2][4] result2[3][4] result2[4][4] result2[5][4] .endc .end tmpk8ny_4pz/examples/various/ro_17_4.cir0000644000175000017500000002654713546075722020355 0ustar carstencarsten*****************==== 17-Stage CMOS RO ====******************* *********** Benchmarking Implementation of BSIM4 by Jane Xi 11/05/2002. * this variant improves current memeasurement * by setting 'xmu' vdd 1 0 2.0 mp1 3 2 1 1 p1 l=0.1u w=10u ad=5p pd=6u as=5p ps=6u mn1 3 2 0 0 n1 l=0.1u w=5u ad=5p pd=6u as=5p ps=6u mp2 4 3 1 1 p1 l=0.1u w=10u ad=5p pd=6u as=5p ps=6u mn2 4 3 0 0 n1 l=0.1u w=5u ad=5p pd=6u as=5p ps=6u mp3 5 4 1 1 p1 l=0.1u w=10u ad=5p pd=6u as=5p ps=6u mn3 5 4 0 0 n1 l=0.1u w=5u ad=5p pd=6u as=5p ps=6u mp4 6 5 1 1 p1 l=0.1u w=10u ad=5p pd=6u as=5p ps=6u mn4 6 5 0 0 n1 l=0.1u w=5u ad=5p pd=6u as=5p ps=6u mp5 7 6 1 1 p1 l=0.1u w=10u ad=5p pd=6u as=5p ps=6u mn5 7 6 0 0 n1 l=0.1u w=5u ad=5p pd=6u as=5p ps=6u mp6 8 7 1 1 p1 l=0.1u w=10u ad=5p pd=6u as=5p ps=6u mn6 8 7 0 0 n1 l=0.1u w=5u ad=5p pd=6u as=5p ps=6u mp7 9 8 1 1 p1 l=0.1u w=10u ad=5p pd=6u as=5p ps=6u mn7 9 8 0 0 n1 l=0.1u w=5u ad=5p pd=6u as=5p ps=6u mp8 10 9 1 1 p1 l=0.1u w=10u ad=5p pd=6u as=5p ps=6u mn8 10 9 0 0 n1 l=0.1u w=5u ad=5p pd=6u as=5p ps=6u mp9 11 10 1 1 p1 l=0.1u w=10u ad=5p pd=6u as=5p ps=6u mn9 11 10 0 0 n1 l=0.1u w=5u ad=5p pd=6u as=5p ps=6u mp10 12 11 1 1 p1 l=0.1u w=10u ad=5p pd=6u as=5p ps=6u mn10 12 11 0 0 n1 l=0.1u w=5u ad=5p pd=6u as=5p ps=6u mp11 13 12 1 1 p1 l=0.1u w=10u ad=5p pd=6u as=5p ps=6u mn11 13 12 0 0 n1 l=0.1u w=5u ad=5p pd=6u as=5p ps=6u mp12 14 13 1 1 p1 l=0.1u w=10u ad=5p pd=6u as=5p ps=6u mn12 14 13 0 0 n1 l=0.1u w=5u ad=5p pd=6u as=5p ps=6u mp13 15 14 1 1 p1 l=0.1u w=10u ad=5p pd=6u as=5p ps=6u mn13 15 14 0 0 n1 l=0.1u w=5u ad=5p pd=6u as=5p ps=6u mp14 16 15 1 1 p1 l=0.1u w=10u ad=5p pd=6u as=5p ps=6u mn14 16 15 0 0 n1 l=0.1u w=5u ad=5p pd=6u as=5p ps=6u mp15 17 16 1 1 p1 l=0.1u w=10u ad=5p pd=6u as=5p ps=6u mn15 17 16 0 0 n1 l=0.1u w=5u ad=5p pd=6u as=5p ps=6u mp16 18 17 1 1 p1 l=0.1u w=10u ad=5p pd=6u as=5p ps=6u mn16 18 17 0 0 n1 l=0.1u w=5u ad=5p pd=6u as=5p ps=6u mp17 2 18 1 1 p1 l=0.1u w=10u ad=5p pd=6u as=5p ps=6u mn17 2 18 0 0 n1 l=0.1u w=5u ad=5p pd=6u as=5p ps=6u c1 18 0 .1p * .ic v(2)=1.0 v(3)=1.0 v(4)=1.0 * .ic v(2)=2.0 v(3)=0.0 v(4)=2.0 * .ic v(2)=2.0 v(3)=0.0 v(4)=2.0 v(5)=0.0 v(6)=2.0 * .ic v(7)=0.0 v(8)=2.0 v(9)=0.0 v(10)=2.0 v(11)=0.0 v(12)=2.0 * .ic v(13)=0.0 v(14)=2.0 v(15)=0.0 v(16)=2.0 v(17)=0.0 v(18)=2.0 * .ic V(10)=5 v(2)=5 v(3)=5 v(4)=5 v(5)=5 v(6)=5 * .ic v(18)=1 .tran .1ns 150ns uic * .option xmu = 0.49 * .print tran v(5) .control * reduce current ringing option xmu = 0.49 * set xmu=0.49 set num_threads=4 set noinit run * current and output in a single plot plot v(18) 1000*(-I(vdd)) ylimit -1 6 .endc * Short channel models from CMOS Circuit Design, Layout, and Simulation, * 50nm BSIM4 models VDD=1V, see CMOSedu.com * .model N1 nmos level = 54 version = 4.5.0 +binunit = 1 paramchk= 1 mobmod = 0 +capmod = 2 igcmod = 1 igbmod = 1 geomod = 0 +diomod = 1 rdsmod = 0 rbodymod= 1 rgatemod= 1 +permod = 1 acnqsmod= 0 trnqsmod= 0 +tnom = 27 toxe = 1.4e-009 toxp = 7e-010 toxm = 1.4e-009 +epsrox = 3.9 wint = 5e-009 lint = 1.2e-008 +ll = 0 wl = 0 lln = 1 wln = 1 +lw = 0 ww = 0 lwn = 1 wwn = 1 +lwl = 0 wwl = 0 xpart = 0 toxref = 1.4e-009 +vth0 = 0.22 k1 = 0.35 k2 = 0.05 k3 = 0 +k3b = 0 w0 = 2.5e-006 dvt0 = 2.8 dvt1 = 0.52 +dvt2 = -0.032 dvt0w = 0 dvt1w = 0 dvt2w = 0 +dsub = 2 minv = 0.05 voffl = 0 dvtp0 = 1e-007 +dvtp1 = 0.05 lpe0 = 5.75e-008 lpeb = 2.3e-010 xj = 2e-008 +ngate = 5e+020 ndep = 2.8e+018 nsd = 1e+020 phin = 0 +cdsc = 0.0002 cdscb = 0 cdscd = 0 cit = 0 +voff = -0.15 nfactor = 1.2 eta0 = 0.15 etab = 0 +vfb = -0.55 u0 = 0.032 ua = 1.6e-010 ub = 1.1e-017 +uc = -3e-011 vsat = 1.1e+005 a0 = 2 ags = 1e-020 +a1 = 0 a2 = 1 b0 = -1e-020 b1 = 0 +keta = 0.04 dwg = 0 dwb = 0 pclm = 0.18 +pdiblc1 = 0.028 pdiblc2 = 0.022 pdiblcb = -0.005 drout = 0.45 +pvag = 1e-020 delta = 0.01 pscbe1 = 8.14e+008 pscbe2 = 1e-007 +fprout = 0.2 pdits = 0.2 pditsd = 0.23 pditsl = 2.3e+006 +rsh = 3 rdsw = 150 rsw = 150 rdw = 150 +rdswmin = 0 rdwmin = 0 rswmin = 0 prwg = 0 +prwb = 6.8e-011 wr = 1 alpha0 = 0.074 alpha1 = 0.005 +beta0 = 30 agidl = 0.0002 bgidl = 2.1e+009 cgidl = 0.0002 +egidl = 0.8 +aigbacc = 0.012 bigbacc = 0.0028 cigbacc = 0.002 +nigbacc = 1 aigbinv = 0.014 bigbinv = 0.004 cigbinv = 0.004 +eigbinv = 1.1 nigbinv = 3 aigc = 0.017 bigc = 0.0028 +cigc = 0.002 aigsd = 0.017 bigsd = 0.0028 cigsd = 0.002 +nigc = 1 poxedge = 1 pigcd = 1 ntox = 1 +xrcrg1 = 12 xrcrg2 = 5 +cgso = 6.238e-010 cgdo = 6.238e-010 cgbo = 2.56e-011 cgdl = 2.495e-10 +cgsl = 2.495e-10 ckappas = 0.02 ckappad = 0.02 acde = 1 +moin = 15 noff = 0.9 voffcv = 0.02 +kt1 = -0.21 kt1l = 0.0 kt2 = -0.042 ute = -1.5 +ua1 = 1e-009 ub1 = -3.5e-019 uc1 = 0 prt = 0 +at = 53000 +fnoimod = 1 tnoimod = 0 +jss = 0.0001 jsws = 1e-011 jswgs = 1e-010 njs = 1 +ijthsfwd= 0.01 ijthsrev= 0.001 bvs = 10 xjbvs = 1 +jsd = 0.0001 jswd = 1e-011 jswgd = 1e-010 njd = 1 +ijthdfwd= 0.01 ijthdrev= 0.001 bvd = 10 xjbvd = 1 +pbs = 1 cjs = 0.0005 mjs = 0.5 pbsws = 1 +cjsws = 5e-010 mjsws = 0.33 pbswgs = 1 cjswgs = 5e-010 +mjswgs = 0.33 pbd = 1 cjd = 0.0005 mjd = 0.5 +pbswd = 1 cjswd = 5e-010 mjswd = 0.33 pbswgd = 1 +cjswgd = 5e-010 mjswgd = 0.33 tpb = 0.005 tcj = 0.001 +tpbsw = 0.005 tcjsw = 0.001 tpbswg = 0.005 tcjswg = 0.001 +xtis = 3 xtid = 3 +dmcg = 0e-006 dmci = 0e-006 dmdg = 0e-006 dmcgt = 0e-007 +dwj = 0e-008 xgw = 0e-007 xgl = 0e-008 +rshg = 0.4 gbmin = 1e-010 rbpb = 5 rbpd = 15 +rbps = 15 rbdb = 15 rbsb = 15 ngcon = 1 * .model P1 pmos level = 54 version = 4.5.0 +binunit = 1 paramchk= 1 mobmod = 0 +capmod = 2 igcmod = 1 igbmod = 1 geomod = 0 +diomod = 1 rdsmod = 0 rbodymod= 1 rgatemod= 1 +permod = 1 acnqsmod= 0 trnqsmod= 0 +tnom = 27 toxe = 1.4e-009 toxp = 7e-010 toxm = 1.4e-009 +epsrox = 3.9 wint = 5e-009 lint = 1.2e-008 +ll = 0 wl = 0 lln = 1 wln = 1 +lw = 0 ww = 0 lwn = 1 wwn = 1 +lwl = 0 wwl = 0 xpart = 0 toxref = 1.4e-009 +vth0 = -0.22 k1 = 0.39 k2 = 0.05 k3 = 0 +k3b = 0 w0 = 2.5e-006 dvt0 = 3.9 dvt1 = 0.635 +dvt2 = -0.032 dvt0w = 0 dvt1w = 0 dvt2w = 0 +dsub = 0.7 minv = 0.05 voffl = 0 dvtp0 = 0.5e-008 +dvtp1 = 0.05 lpe0 = 5.75e-008 lpeb = 2.3e-010 xj = 2e-008 +ngate = 5e+020 ndep = 2.8e+018 nsd = 1e+020 phin = 0 +cdsc = 0.000258 cdscb = 0 cdscd = 6.1e-008 cit = 0 +voff = -0.15 nfactor = 2 eta0 = 0.15 etab = 0 +vfb = 0.55 u0 = 0.0095 ua = 1.6e-009 ub = 8e-018 +uc = 4.6e-013 vsat = 90000 a0 = 1.2 ags = 1e-020 +a1 = 0 a2 = 1 b0 = -1e-020 b1 = 0 +keta = -0.047 dwg = 0 dwb = 0 pclm = 0.55 +pdiblc1 = 0.03 pdiblc2 = 0.0055 pdiblcb = 3.4e-008 drout = 0.56 +pvag = 1e-020 delta = 0.014 pscbe1 = 8.14e+008 pscbe2 = 9.58e-007 +fprout = 0.2 pdits = 0.2 pditsd = 0.23 pditsl = 2.3e+006 +rsh = 3 rdsw = 250 rsw = 160 rdw = 160 +rdswmin = 0 rdwmin = 0 rswmin = 0 prwg = 3.22e-008 +prwb = 6.8e-011 wr = 1 alpha0 = 0.074 alpha1 = 0.005 +beta0 = 30 agidl = 0.0002 bgidl = 2.1e+009 cgidl = 0.0002 +egidl = 0.8 +aigbacc = 0.012 bigbacc = 0.0028 cigbacc = 0.002 +nigbacc = 1 aigbinv = 0.014 bigbinv = 0.004 cigbinv = 0.004 +eigbinv = 1.1 nigbinv = 3 aigc = 0.69 bigc = 0.0012 +cigc = 0.0008 aigsd = 0.0087 bigsd = 0.0012 cigsd = 0.0008 +nigc = 1 poxedge = 1 pigcd = 1 ntox = 1 +xrcrg1 = 12 xrcrg2 = 5 +cgso = 7.43e-010 cgdo = 7.43e-010 cgbo = 2.56e-011 cgdl = 1e-014 +cgsl = 1e-014 ckappas = 0.5 ckappad = 0.5 acde = 1 +moin = 15 noff = 0.9 voffcv = 0.02 +kt1 = -0.19 kt1l = 0 kt2 = -0.052 ute = -1.5 +ua1 = -1e-009 ub1 = 2e-018 uc1 = 0 prt = 0 +at = 33000 +fnoimod = 1 tnoimod = 0 +jss = 0.0001 jsws = 1e-011 jswgs = 1e-010 njs = 1 +ijthsfwd= 0.01 ijthsrev= 0.001 bvs = 10 xjbvs = 1 +jsd = 0.0001 jswd = 1e-011 jswgd = 1e-010 njd = 1 +ijthdfwd= 0.01 ijthdrev= 0.001 bvd = 10 xjbvd = 1 +pbs = 1 cjs = 0.0005 mjs = 0.5 pbsws = 1 +cjsws = 5e-010 mjsws = 0.33 pbswgs = 1 cjswgs = 5e-010 +mjswgs = 0.33 pbd = 1 cjd = 0.0005 mjd = 0.5 +pbswd = 1 cjswd = 5e-010 mjswd = 0.33 pbswgd = 1 +cjswgd = 5e-010 mjswgd = 0.33 tpb = 0.005 tcj = 0.001 +tpbsw = 0.005 tcjsw = 0.001 tpbswg = 0.005 tcjswg = 0.001 +xtis = 3 xtid = 3 +dmcg = 0e-006 dmci = 0e-006 dmdg = 0e-006 dmcgt = 0e-007 +dwj = 0e-008 xgw = 0e-007 xgl = 0e-008 +rshg = 0.4 gbmin = 1e-010 rbpb = 5 rbpd = 15 +rbps = 15 rbdb = 15 rbsb = 15 ngcon = 1 .end tmpk8ny_4pz/examples/various/i(xxx)_tests.cir0000644000175000017500000000272713546075722021540 0ustar carstencarsteni(XXX) test * Restrictions of function i(device): * O.K. when device and i(device) are at top level. * O.K. when device and i(device) are in the same * subcircuit at first subcircuit level. * O.K. when device and i(device) are in the same * subcircuit at some deeper subcircuit level. * source at top level, function i(XXX) at top level *o.k. R1 1 0 1 V1 1 0 1 R2 2 0 '5 * i(R1)' V2 2 0 1 * source at top level, function i(XXX) at subckt level * geht nicht! *.subckt contr1 n1 n2 *RS1 n1 n2 '6 * i(R1)' *.ends *XR1 3 0 contr1 *V3 3 0 1 * source at subckt level, function i(XXX) at same subckt * o.k. .subckt contr2 n1 n2 RS1 n1 n2 '6 * i(RS2)' RS2 1 0 1 V1 1 0 1 .ends XR2 4 0 contr2 V4 4 0 1 * source at subckt level, function i(XXX) at same subckt level * but different subcircuit: should not do! * does not do! *.subckt contr3 n1 n2 *RS1 n1 n2 '6 * i(RS2)' *.ends *XR3 5 0 contr3 *V5 5 0 1 * source at subckt level, function i(XXX) at top level * geht nicht! *.subckt contr4 n1 n2 *RS41 n1 n2 7 *VS41 n1 n2 1 *.ends *XR4 6 0 contr4 *R6 7 0 '10*i(r.xr4.rs41)' *V6 7 0 1 * source at second subckt level, function i(XXX) at same subckt * o.k. .subckt contr5 n1 n2 XR2 n1 n2 contr2 .ends XR8 8 0 contr5 V8 8 0 1 * MOS device, first node only vd d 0 1 vg g 0 1 vb b 0 0 vs s 0 0 m1 d g s b n1 W=10u L=1u RM 10 0 '1E6 * i(M1)' VRM 10 0 1 * reuse i(M1) BMM 11 0 V='1E6 * i(M1)' RMM 11 0 1 .include modelcard.nmos .control op print i(V1) i(V2) i(V4) i(V8) i(VRM) i(BMM) .endc .end tmpk8ny_4pz/examples/various/gain_stage.cir0000644000175000017500000000224213546075722021266 0ustar carstencarsten** MOSFET Gain Stage (AC): Benchmarking Implementation of BSIM4.0.0 ** by Weidong Liu 5/16/2000. ** output redirection into file ** chapter 17.8.8 M1 3 2 0 0 N1 L=1u W=4u Rsource 1 2 100k Rload 3 vdd 25k Vdd vdd 0 1.8 Vin 1 0 1.2 ac 0.1 .control ac dec 10 100 1000Meg plot v(2) v(3) let flen = length(frequency) $ length of the vector let loopcounter = 0 echo output test > text.txt $ start new file test.txt * loop while loopcounter lt flen let vout2 = v(2)[loopcounter] $ generate a single point complex vector let vout2re = real(vout2) $ generate a single point real vector let vout2im = imag(vout2) $ generate a single point imaginary vector let vout3 = v(3)[loopcounter] $ generate a single point complex vector let vout3re = real(vout3) $ generate a single point real vector let vout3im = imag(vout3) $ generate a single point imaginary vector let freq = frequency[loopcounter] $ generate a single point vector echo bbb "$&freq" "$&vout2re" "$&vout2im" "$&vout3re" "$&vout3im" >> +text.txt $ append text and data to file (continued fromm line above) let loopcounter = loopcounter + 1 end .endc .MODEL N1 NMOS LEVEL=14 VERSION=4.3.0 TNOM=27 .end tmpk8ny_4pz/examples/various/bjt_ac_par.sp0000644000175000017500000000127213546075722021120 0ustar carstencarstenPlot inner small signal parameter v1 1 0 dc 10.0 rc 1 c 2k vb b 0 dc 0.6 q1 c b 0 bfs17 .MODEL BFS17 NPN (level=1 IS=0.48F NF=1.008 BF=99.655 VAF=90.000 IKF=0.190 + ISE=7.490F NE=1.762 NR=1.010 BR=38.400 VAR=7.000 IKR=93.200M + ISC=0.200F NC=1.042 + RB=1.500 IRB=0.100M RBM=1.200 + RE=0.500 RC=2.680 + CJE=1.325P VJE=0.700 MJE=0.220 FC=0.890 + CJC=1.050P VJC=0.610 MJC=0.240 XCJC=0.400 + TF=56.940P TR=1.000N PTF=21.000 + XTF=68.398 VTF=0.600 ITF=0.700 + XTB=1.600 EG=1.110 XTI=3.000 + KF=1.000F AF=1.000) .control save @q1[gm] @q1[pi] @q1[go] save @q1[qbe] @q1[qbc] save @q1[cmu] @q1[cpi] dc vb 0.4 1 0.01 plot @q1[gm] @q1[gpi] @q1[go] plot @q1[qbe] @q1[qbc] plot @q1[cmu] @q1[cpi] .endc .end tmpk8ny_4pz/examples/various/modelcard.pmos0000644000175000017500000000157113546075722021324 0ustar carstencarsten.model P1 PMOS +Level= 8 version=3.3.0 +Tnom=27.0 +Nch= 3.533024E+17 Tox=9E-09 Xj=1.00000E-07 +Lint=6.23e-8 Wint=1.22e-7 +Vth0=-.6732829 K1= .8362093 K2=-8.606622E-02 K3= 1.82 +Dvt0= 1.903801 Dvt1= .5333922 Dvt2=-.1862677 +Nlx= 1.28e-8 W0= 2.1e-6 +K3b= -0.24 Prwg=-0.001 Prwb=-0.323 +Vsat= 103503.2 Ua= 1.39995E-09 Ub= 1.e-19 Uc=-2.73e-11 +Rdsw= 460 U0= 138.7609 +A0= .4716551 Ags=0.12 +Keta=-1.871516E-03 A1= .3417965 A2= 0.83 +Voff=-.074182 NFactor= 1.54389 Cit=-1.015667E-03 +Cdsc= 8.937517E-04 +Cdscb= 1.45e-4 Cdscd=1.04e-4 +Dvt0w=0.232 Dvt1w=4.5e6 Dvt2w=-0.0023 +Eta0= 6.024776E-02 Etab=-4.64593E-03 +Dsub= .23222404 +Pclm= .989 Pdiblc1= 2.07418E-02 Pdiblc2= 1.33813E-3 +Drout= .3222404 Pscbe1= 118000 Pscbe2= 1E-09 +Pvag= 0 +kt1= -0.25 kt2= -0.032 prt=64.5 +At= 33000 +Ute= -1.5 +Ua1= 4.312e-9 Ub1= 6.65e-19 Uc1= 0 +Kt1l=0 +vgs_max=4 vds_max=4 vbs_max=4 tmpk8ny_4pz/examples/various/FFT_Leakage.cir0000644000175000017500000000404713546075722021222 0ustar carstencarstenFFT_Leakage_tests http://www.idea2ic.com/ *=========Create_Signal================== VTime VTime 0 DC 0 PWL( 0 0 1 1) Vfreq Vfreq 0 DC 5.5k BVAC IN 0 V = sin( 6.283185307179586*V(VFreq)*V(VTime)) .control *TRAN TSTEP TSTOP TSTART TMAX ?UIC? tran 1u .999m 0 1u set pensize = 2 linearize let numb2 = length(in) print numb2 *=========Do_FFT_and_Plot_As_dB_Freq================== let ac = in +j(0) let ac_fft=fft(ac) let numb_f2 = (numb2)/2 -1 compose freq start = 1 stop = $&numb_f2 step =1 compose vreal start = 1 stop = $&numb_f2 step =1 compose vimag start = 1 stop = $&numb_f2 step =1 let j = 0 repeat $&numb_f2 let freq[j] = freq[j] let vreal[j] = 2*real(ac_fft[j+1]) let vimag[j] = 2*imag(ac_fft[j+1]) let j = j +1 end plot dB(abs(vreal+1f)) dB(abs(vimag+1f)) vs freq xlog *=========Extract_Error_Signal========================= let funBin = 5k/1000 let unvect = unitvec(numb2) let fundspec = unvect*0 +j(0) let fundspec[funBin] = real(ac_fft[funBin]) +j(imag(ac_fft[funBin] )) let fundspec[numb2-funBin] = real(ac_fft[numb2-funBin]) +j(imag(ac_fft[numb2-funBin] )) let fund = ifft(fundspec) let dc_ofset = real(ac_fft[0]) let thdspec = ac_fft let thdspec[0] = 0 +j(0) let thdspec[funBin] = 0 +j(0) let thdspec[numb2-funBin] = 0 +j(0) let thd = ifft(thdspec) plot norm(in) norm(fund) norm(thd)/2 *=========Calc_Values========================= let rms_Fund = sqrt(mean(fund*fund)) let rms_THD = sqrt(mean(thd*thd)) let THD_percent = 100*rms_THD/rms_Fund let FREQ_Hz = VFreq[0] echo "Freq_Hz=$&FREQ_Hz THD_percent=$&THD_percent Fund_rms=$&rms_Fund THD_rms=$&rms_THD " .endc .end tmpk8ny_4pz/examples/various/modelcard.nmos0000644000175000017500000000211013546075722021310 0ustar carstencarsten.model N1 NMOS +Level= 8 version=3.3.0 +Tnom=27.0 +Nch= 2.498E+17 Tox=9E-09 Xj=1.00000E-07 +Lint=9.36e-8 Wint=1.47e-7 +Vth0= .6322 K1= .756 K2= -3.83e-2 K3= -2.612 +Dvt0= 2.812 Dvt1= 0.462 Dvt2=-9.17e-2 +Nlx= 3.52291E-08 W0= 1.163e-6 +K3b= 2.233 +Vsat= 86301.58 Ua= 6.47e-9 Ub= 4.23e-18 Uc=-4.706281E-11 +Rdsw= 650 U0= 388.3203 wr=1 +A0= .3496967 Ags=.1 B0=0.546 B1= 1 +Dwg = -6.0E-09 Dwb = -3.56E-09 Prwb = -.213 +Keta=-3.605872E-02 A1= 2.778747E-02 A2= .9 +Voff=-6.735529E-02 NFactor= 1.139926 Cit= 1.622527E-04 +Cdsc=-2.147181E-05 +Cdscb= 0 Dvt0w = 0 Dvt1w = 0 Dvt2w = 0 +Cdscd = 0 Prwg = 0 +Eta0= 1.0281729E-02 Etab=-5.042203E-03 +Dsub= .31871233 +Pclm= 1.114846 Pdiblc1= 2.45357E-03 Pdiblc2= 6.406289E-03 +Drout= .31871233 Pscbe1= 5000000 Pscbe2= 5E-09 Pdiblcb = -.234 +Pvag= 0 delta=0.01 +Wl = 0 Ww = -1.420242E-09 Wwl = 0 +Wln = 0 Wwn = .2613948 Ll = 1.300902E-10 +Lw = 0 Lwl = 0 Lln = .316394 +Lwn = 0 +kt1=-.3 kt2=-.051 +At= 22400 +Ute=-1.48 +Ua1= 3.31E-10 Ub1= 2.61E-19 Uc1= -3.42e-10 +Kt1l=0 Prt=764.3 +vgs_max=4 vds_max=4 vbs_max=4 tmpk8ny_4pz/examples/various/model-name-check.cir0000644000175000017500000000161013546075722022254 0ustar carstencarsten* model name check V1 1 0 1 R1 1 2 1k D1 2 0 DMOD .model DMOD D (is=1e-13 bv=50) * o.k. D2 2 0 _DMOD .model _DMOD D (is=1e-13 bv=50) * o.k. D3 2 0 1n4001 .model 1n4001 D (is=1e-13 bv=50) * o.k. D4 2 0 22N4 .model 22N4 D (is=1e-13 bv=50) * o.k. D5 2 0 1e34 .model 1e34 D (is=1e-13 bv=50) * not o.k. D6 2 0 74ls4444 .model 74ls4444 D (is=1e-13 bv=50) * o.k. D7 2 0 ^274ls4444 .model ^274ls4444 D (is=1e-13 bv=50) * not o.k. D8 2 0 74!4444 .model 74!4444 D (is=1e-13 bv=50) * o.k. D9 2 0 12p4444 .model 12p4444 D (is=1e-13 bv=50) * o.k. D10 2 0 17n .model 17n D (is=1e-13 bv=50) * not o.k. D11 2 0 17nB .model 17nB D (is=1e-13 bv=50) * o.k. D12 2 0 17e12n .model 17e12n D (is=1e-13 bv=50) * not o.k. D13 2 0 17e12Meg .model 17e12Meg D (is=1e-13 bv=50) * not o.k. D14 2 0 17e12Megg .model 17e12Megg D (is=1e-13 bv=50) * o.k. D15 2 0 20.5pF .model 20.5pF D (is=1e-13 bv=50) * not o.k. .end tmpk8ny_4pz/examples/various/nmos_pmos_BSIM330.sp0000644000175000017500000000212613546075722022105 0ustar carstencarsten*****Single NMOS and PMOS Transistor For BSIM3 threshold voltage check (Id-Vgs) (Id-Vds) *** M1 2 1 3 4 n1 W=1u L=0.35u Pd=1.5u Ps=1.5u ad=1.5p as=1.5p vgs 1 0 3.5 vds 2 0 0.1 vss 3 0 0 vbs 4 0 0 M2 22 11 33 44 p1 W=2.5u L=0.35u Pd=3u Ps=3u ad=2.5p as=2.5p vgsp 11 0 -3.5 vdsp 22 0 -0.1 vssp 33 0 0 vbsp 44 0 0 .options Temp=27.0 * BSIM3v3.3.0 model with modified default parameters 0.18µm .model n1 nmos level=49 version=3.3.0 tox=3.5n nch=2.4e17 nsub=5e16 vth0=0.15 .model p1 pmos level=49 version=3.3.0 tox=3.5n nch=2.5e17 nsub=5e16 vth0=-0.15 *.include ./Modelcards/modelcard.nmos $ Berkeley model cards limited to L >= 0.35µm *.include ./Modelcards/modelcard.pmos $ Berkeley model cards limited to L >= 0.35µm * update of the default parameters required *.model n1 NMOS level=49 version=3.3.0 $ nearly no current due to VT > 2 V ? *.model p1 PMOS level=49 version=3.3.0 .control dc vgs 0 1.5 0.05 vbs 0 -2.5 -0.5 plot vss#branch dc vds 0 2 0.05 vgs 0 2 0.4 plot vss#branch dc vgsp 0 -1.5 -0.05 vbsp 0 2.5 0.5 plot vssp#branch dc vdsp 0 -2 -0.05 vgsp 0 -2 -0.4 plot vssp#branch .endc .end tmpk8ny_4pz/examples/various/tmp-noise.cir0000644000175000017500000000074613546075722021107 0ustar carstencarsten* (exec-spice "ngspice %s" t) v1 1 0 dc 2 ac 1 v2 200 0 dc=1 R1 1 2 1k R2 2 0 1k tc1=0.001 $ tc2=1e-5 R10 1 20 1k R20 20 0 '1k*v(200)' tc1=0.001 $ tc2=1e-5 .temp 127.0 .control listing e op let gold = 2/(1+1000/1100) print v(2) v(20) gold noise v(2) v1 dec 1 1kHz 1kHz let r = 1/(1/1000 + 1/1100) let gold = sqrt(4*boltz*(273.15+127.0)*r) print all gold noise v(20) v1 dec 1 1kHz 1kHz print all ac dec 1 1kHz 1kHz let gold = 1/(1+1000/1100) print v(2) v(20) gold .endc tmpk8ny_4pz/examples/various/compose-examples.cir0000644000175000017500000000102313546075722022442 0ustar carstencarstencompose examples .control compose vec1 values (-3) (-5) 4 6 echo $&vec1 echo compose vec2 values (-3) (-5*PI) 4 6*e echo $&vec2 echo compose vec3 start=-3 stop=7 step = 2 echo $&vec3 echo compose vec4 start=-3 stop=7 step = 2 lin=19 *warning, step is ignored echo $&vec4 echo compose vec5 dec=3 start=0.1 stop=10 echo $&vec5 echo compose vec6 dec=3 start=-0.1 stop=10 *error, value is negative echo $&vec6 echo compose vec7 log=3 start=0.1 stop=10 echo $&vec7 echo compose vec8 gauss=10 mean=1 sd=0.2 echo $&vec8 echo .endc .end tmpk8ny_4pz/examples/various/nmos_pmos_plotting.sp0000644000175000017500000000242613546075722022770 0ustar carstencarsten*****Single NMOS and PMOS Transistor For BSIM3 threshold voltage check (Id-Vgs) (Id-Vds) *** M1 2 1 3 4 n1 W=1u L=0.35u Pd=1.5u Ps=1.5u ad=1.5p as=1.5p vgs 1 0 3.5 vds 2 0 0.1 vss 3 0 0 vbs 4 0 0 M2 22 11 33 44 p1 W=2.5u L=0.35u Pd=3u Ps=3u ad=2.5p as=2.5p vgsp 11 0 -3.5 vdsp 22 0 -0.1 vssp 33 0 0 vbsp 44 0 0 .options Temp=27.0 * BSIM3v3.3.0 model with modified default parameters 0.18µm .model n1 nmos level=49 version=3.3.0 tox=3.5n nch=2.4e17 nsub=5e16 vth0=0.15 .model p1 pmos level=49 version=3.3.0 tox=3.5n nch=2.5e17 nsub=5e16 vth0=-0.15 *.include ./Modelcards/modelcard.nmos $ Berkeley model cards limited to L >= 0.35µm *.include ./Modelcards/modelcard.pmos $ Berkeley model cards limited to L >= 0.35µm * update of the default parameters required *.model n1 NMOS level=49 version=3.3.0 $ nearly no current due to VT > 2 V ? *.model p1 PMOS level=49 version=3.3.0 .control * various plot font sizes dc vgs 0 1.5 0.05 vbs 0 -2.5 -0.5 plot vss#branch ylabel 'output current' set wfont_size=18 dc vds 0 2 0.05 vgs 0 2 0.4 plot vss#branch ylabel 'output current' set wfont_size=20 dc vgsp 0 -1.5 -0.05 vbsp 0 2.5 0.5 plot vssp#branch ylabel 'output current' set wfont=Times set wfont_size=18 dc vdsp 0 -2 -0.05 vgsp 0 -2 -0.4 plot vssp#branch ylabel 'output current' .endc .end tmpk8ny_4pz/examples/various/bjtnoise.cir0000644000175000017500000000053613546075722021006 0ustar carstencarstenBJT Noise Test vcc 4 0 50 vin 1 0 ac 1 ccouple 1 2 1 ibias 0 2 100uA rload 4 3 1k q1 3 2 0 0 test .model test npn kf=1e-20 af=1 bf=100 rb=10 cjc=4e-12 .noise v(3) vin dec 10 1k 100Meg 1 .control run setplot setplot noise1 plot ally plot inoise_spectrum onoise_spectrum setplot noise2 print all echo print inoise_total onoise_total .endc .end tmpk8ny_4pz/examples/various/todo-temper-3.cir0000644000175000017500000000056213546075722021567 0ustar carstencarsten* try temper * (exec-spice "ngspice %s" t) .model dplain d is={temper >= 25 ? 1e-10 : (temper+1)*1e-11} .model dref d is=1e-10 Iin 1 0 dc = -1mA Dref 1 0 dref e2 2 0 1 0 1 D2 2 0 dplain e3 3 0 1 0 1 D3 3 0 dref area={temper >= 25 ? (temper+100)/100 : 2 } .control dc temp 0 125 1.0 plot e2#branch/@iin[dc] plot e3#branch/@iin[dc] *quit 0 .endc .end tmpk8ny_4pz/examples/various/FFT_tests.cir0000644000175000017500000000572413546075722021036 0ustar carstencarstenFFT_tests http://www.idea2ic.com/ .control set units=degrees let a = vector(16) *plot a vs a set pensize = 2 *=========Need_a_complex_input==================== let ac = a+j(0) print a ac *plot fft(a) vs a *plot real(fft(ac)) imag(fft(ac)) vs a * fft(a) fft(ac) *=========DC_Works==================== let b = unitvec(16) let bc = b+j(0) *plot fft(b) vs a title DC_WORKS *print fft(b) fft(bc) *=========DC_Plus_cos_Remove_AC==================== let numb = length(b) print numb let indx = 0 repeat $&numb let ac[indx]= cos(indx*360/8)+1 +j(0) let indx = indx +1 end let fftac=fft(ac) plot real(fftac) imag(fftac) vs a title DC_Plus_COS let fftac[2]=(0,0) let fftac[14]=(0,0) let ifftac = ifft(fftac) plot ifftac ac vs a title COS_REMOVED *=========DC_Plus_cos_Remove_DC==================== let indx = 0 repeat $&numb let ac[indx]= cos(indx*360/8)+1 +j(0) let indx = indx +1 end let fftac=fft(ac) let fftac[0]=(0,0) let ifftac = ifft(fftac) plot ifftac ac vs a title COS_With_DC_REMOVED *=========DC_Plus_sin_Remove_AC==================== let indx = 0 repeat $&numb let ac[indx]= sin(indx*360/8)+1 +j(0) let indx = indx +1 end let fftac=fft(ac) plot real(fftac) imag(fftac) vs a title DC_Plus_SIN let fftac[2]=(0,0) let fftac[14]=(0,0) let ifftac = ifft(fftac) plot ifft(fftac) ac vs a title SIN_REMOVED *=========DC_Plus_sin_Remove_DC==================== let indx = 0 repeat $&numb let ac[indx]= sin(indx*360/8)+1 +j(0) let indx = indx +1 end let fftac=fft(ac) let fftac[0]=(0,0) let ifftac = ifft(fftac) plot ifft(fftac) ac vs a title SIN_With_DC_REMOVED *=========DC_Plus_cos_Nyqusit_Remove_DC==================== let indx = 0 repeat $&numb let ac[indx]= cos(indx*360/2)+1 +j(0) let indx = indx +1 end plot ac vs a title Nyq_COS let fftac=fft(ac) plot real(fftac) imag(fftac) vs a title Nyq_FREQ_COS let fftac[0]=(0,0) let ifftac = ifft(fftac) plot ifft(fftac) ac vs a title COS_With_DC_REMOVED *=========DC_Plus_sin_Nyqusit_Remove_DC==================== let indx = 0 repeat $&numb let ac[indx]= sin(indx*360/2)+1 +j(0) let indx = indx +1 end plot ac vs a title Nyq_SIN let fftac=fft(ac) plot real(fftac) imag(fftac) vs a title Nyq_FREQ_SIN let fftac[0]=(0,0) let ifftac = ifft(fftac) plot ifft(fftac) ac vs a title COS_With_DC_REMOVED *=========DC_Plus_COS_Remove_One_BIN==================== let indx = 0 repeat $&numb let ac[indx]= cos(indx*360/8)+1 +j(0) let indx = indx +1 end let fftac=fft(ac) let fftac[2]=(0,0) plot real(fftac) imag(fftac) vs a title DC_Plus_Cos let ifftac = ifft(fftac) plot ifft(fftac) ac vs a title ONE_BIN_REMOVED plot real(ifft(fftac)) imag(ifft(fftac)) vs a title ONE_BIN_REMOVED .endc .end tmpk8ny_4pz/examples/various/dc_loop.sp0000644000175000017500000000170113546075722020450 0ustar carstencarstentesting loops *variables are global *vector reside only in the plot where they where created R1 r2 0 r = {5k + 50*TEMPER} V1 r2 0 1 .control *create a new plot as our base plot setplot new set curplottitle = "crossplot" set plotname=$curplot * generate vector with all (here 30) elements let result=vector(30) * reshape vector to format 5 x 6 reshape result [5][6] * vector to store temperature let tvect=vector(5) *index for storing in vectors tvect and result let index = 0 foreach var -40 -20 0 20 40 set temp = $var dc v1 0 5 1 *store name of the actual dc plot set dcplotname = $curplot * back to the base plot setplot $plotname let result[index] = {$dcplotname}.v1#branch let tvect[index] = $var settype current result let index = index + 1 destroy $dcplotname end settype temp-sweep tvect setscale tvect transpose result plot result write dc_loop.out result[0] result[1] result[2] result[3] result[4] result[5] .endc .end tmpk8ny_4pz/examples/various/adder_mos.cir0000644000175000017500000000464213546075722021130 0ustar carstencarsten ADDER - 4 BIT ALL-NAND-GATE BINARY ADDER *** SUBCIRCUIT DEFINITIONS .SUBCKT NAND in1 in2 out VDD * NODES: INPUT(2), OUTPUT, VCC M1 out in2 Vdd Vdd p1 W=7.5u L=0.35u pd=13.5u ad=22.5p ps=13.5u as=22.5p M2 net.1 in2 0 0 n1 W=3u L=0.35u pd=9u ad=9p ps=9u as=9p M3 out in1 Vdd Vdd p1 W=7.5u L=0.35u pd=13.5u ad=22.5p ps=13.5u as=22.5p M4 out in1 net.1 0 n1 W=3u L=0.35u pd=9u ad=9p ps=9u as=9p .ENDS NAND .SUBCKT ONEBIT 1 2 3 4 5 6 * NODES: INPUT(2), CARRY-IN, OUTPUT, CARRY-OUT, VCC X1 1 2 7 6 NAND X2 1 7 8 6 NAND X3 2 7 9 6 NAND X4 8 9 10 6 NAND X5 3 10 11 6 NAND X6 3 11 12 6 NAND X7 10 11 13 6 NAND X8 12 13 4 6 NAND X9 11 7 5 6 NAND .ENDS ONEBIT .SUBCKT TWOBIT 1 2 3 4 5 6 7 8 9 * NODES: INPUT - BIT0(2) / BIT1(2), OUTPUT - BIT0 / BIT1, * CARRY-IN, CARRY-OUT, VCC X1 1 2 7 5 10 9 ONEBIT X2 3 4 10 6 8 9 ONEBIT .ENDS TWOBIT .SUBCKT FOURBIT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 * NODES: INPUT - BIT0(2) / BIT1(2) / BIT2(2) / BIT3(2), * OUTPUT - BIT0 / BIT1 / BIT2 / BIT3, CARRY-IN, CARRY-OUT, VCC X1 1 2 3 4 9 10 13 16 15 TWOBIT X2 5 6 7 8 11 12 16 14 15 TWOBIT .ENDS FOURBIT *** POWER VCC 99 0 DC 3.3V *** ALL INPUTS VIN1A 1 0 DC 0 PULSE(0 3 0 5NS 5NS 20NS 50NS) VIN1B 2 0 DC 0 PULSE(0 3 0 5NS 5NS 30NS 100NS) VIN2A 3 0 DC 0 PULSE(0 3 0 5NS 5NS 50NS 200NS) VIN2B 4 0 DC 0 PULSE(0 3 0 5NS 5NS 90NS 400NS) VIN3A 5 0 DC 0 PULSE(0 3 0 5NS 5NS 170NS 800NS) VIN3B 6 0 DC 0 PULSE(0 3 0 5NS 5NS 330NS 1600NS) VIN4A 7 0 DC 0 PULSE(0 3 0 5NS 5NS 650NS 3200NS) VIN4B 8 0 DC 0 PULSE(0 3 0 5NS 5NS 1290NS 6400NS) *** DEFINE NOMINAL CIRCUIT X1 1 2 3 4 5 6 7 8 9 10 11 12 0 13 99 FOURBIT .option noinit acct .TRAN 500p 6400NS * save inputs .save V(1) V(2) V(3) V(4) V(5) V(6) V(7) V(8) * use BSIM3 model with default parameters .model n1 nmos level=49 version=3.3.0 .model p1 pmos level=49 version=3.3.0 *.include ./Modelcards/modelcard32.nmos *.include ./Modelcards/modelcard32.pmos .control pre_set strict_errorhandling unset ngdebug *save outputs and specials save x1.x1.x1.7 V(9) V(10) V(11) V(12) V(13) run display * plot the inputs, use offset to plot on top of each other plot v(1) v(2)+4 v(3)+8 v(4)+12 v(5)+16 v(6)+20 v(7)+24 v(8)+28 * plot the outputs, use offset to plot on top of each other plot v(9) v(10)+4 v(11)+8 v(12)+12 v(13)+16 .endc .END tmpk8ny_4pz/examples/various/diode_ac_par.sp0000644000175000017500000000051613546075722021425 0ustar carstencarstenPlot inner small signal parameter v1 1 0 dc 0 d1 1 0 myd .model myd D(IS = 1.50E-07 + N = 1.0 + RS = 9 + TT = 100n + CJ0 = 1.01p + VJ = 0.44 + M = 0.5 + EG = 1.11 + XTI = 3 + KF = 0 + AF = 1 + FC = 0.5 + BV = 22 + IBV = 10u) .control save @d1[gd] @d1[cd] @d1[qd] dc v1 -5 .1 0.01 plot @d1[gd] plot @d1[cd] plot @d1[qd] .endc * .END tmpk8ny_4pz/examples/various/alterparam.sp0000644000175000017500000000102313546075722021156 0ustar carstencarsten*test alterparam .param vv = 1 .param rr = 'vv + 1' R1 1 0 {rr + 1} v1 1 0 1 .subckt subr in out rint1 = 6 .param rint = 5 .param rint2 = 8 R0 in out 'rint' R1 in out 'rint1' R2 in out 'rint2' .ends Xr 2 0 subr rint = 7 rint1 = 9 v2 2 0 1 .control op print v1#branch v2#branch echo listing expand alterparam vv = 2 reset op print v1#branch v2#branch echo listing expand alterparam subr rint = 13 alterparam subr rint1 = 15 alterparam subr rint2 = 17 reset op print v1#branch v2#branch echo listing expand .endc .end tmpk8ny_4pz/examples/various/param_sweep.cir0000644000175000017500000000075413546075722021476 0ustar carstencarstenparameter sweep * resistive divider, R1 swept from start_r to stop_r * replaces .STEP R1 1k 10k 1k * chapter 16.13.4.2 R1 1 2 1k R2 2 0 1k VDD 1 0 DC 1 .dc VDD 0 1 .1 .control let start_r = 1k let stop_r = 10k let delta_r = 1k let r_act = start_r * loop while r_act le stop_r alter r1 r_act run write dc-sweep.out v(2) set appendwrite let r_act = r_act + delta_r end plot dc1.v(2) dc2.v(2) dc3.v(2) dc4.v(2) dc5.v(2) + dc6.v(2) dc7.v(2) dc8.v(2) dc9.v(2) dc10.v(2) .endc .end tmpk8ny_4pz/examples/numparam/0000755000175000017500000000000013546075722016616 5ustar carstencarstentmpk8ny_4pz/examples/numparam/pintest.cir0000644000175000017500000000075313546075722021010 0ustar carstencarsten* Test circuit for pin.mod *.include C:\Spice\tests\numparam\pin.mod .include pin.mod * Photodiode supply Vbias psu 0 10V * Light input is modeled by a voltage source that we can vary Vlight input 0 2mW * The pin diode Xpin input cathode anode SIMPLE_PIN resp=0.7 * monitor resistor Rmon anode 0 1ohm * Quench restistor Rq psu cathode 1k *.dc vlight 0 5mW 0.01mW .dc vlight 0 10mW 0.01mW .control dc vlight 0 10mW 0.01mW *write pintest.raw all plot V(anode) .endc .end tmpk8ny_4pz/examples/numparam/example.cir0000644000175000017500000000043713546075722020754 0ustar carstencarsten* Param-example .param amplitude= 1V .subckt myfilter in out rval=100k cval=100nF Ra in p1 {2*rval} Rb p1 out {2*rval} C1 p1 0 {2*cval} Ca in p2 {cval} Cb p2 out {cval} R1 p2 0 {rval} .ends myfilter X1 input output myfilter rval=1k cval=1n V1 input 0 AC {amplitude} .end tmpk8ny_4pz/examples/numparam/pin.mod0000644000175000017500000000161013546075722020103 0ustar carstencarsten* PIN model * line 2 * line 3 * -- Summary ------------------------------- * This is a simple spice model of a PIN diode. * * -- Description --------------------------- * It is a three node device; one input node (relative to ground) and two * output nodes (cathode and anode) * * -- Model ---------------------------------- .subckt SIMPLE_PIN input cathode anode resp=0.5 * Input photocurrent is modled by a voltage * This generates a current using a linear voltage-controlled current source Gin dk da input 0 {resp} Rin input 0 1G Cin input 0 {resp} * The pn-junction that generates this photocurrent in the real device is modelled * here by a simple diode Dpn da dk pndiode * terminal resistances Ra anode da 0.001ohm Rk cathode dk 0.001ohm * subsircuit models: .MODEL pndiode D IS=0.974p RS=0.1 N=1.986196 BV=7.1 IBV=0.1n + CJO=99.2p VJ=0.455536 M=0.418717 TT=500n .ends tmpk8ny_4pz/examples/adms/0000755000175000017500000000000013546075722015722 5ustar carstencarstentmpk8ny_4pz/examples/adms/mextram/0000755000175000017500000000000013546075722017377 5ustar carstencarstentmpk8ny_4pz/examples/adms/mextram/mex_out.sp0000644000175000017500000000261013546075722021422 0ustar carstencarstenMEXTRAM Output Test Ic=f(Vc,Ib) IB 0 b 1u VC C 0 2.0 VS S 0 0.0 Q1 C B 0 S DT BJTRF1 .control dc vc 0.0 6.0 0.05 ib 1u 8u 1u plot abs(i(vc)) xlabel Vce title Output-Characteristic plot v(dt) xlabel Vce ylabel grdC title Selfheating .endc .model BJTRF1 NPN LEVEL=6 +MULT=1.000E+00 +TREF=25.000E+00 +DTA=0.000E+00 +EXMOD=1.000E+00 +EXPHI=0.000E+00 +EXAVL=1.000E+00 +IS=23.571E-18 +IK=231.660E-03 +VER=2.100E+00 +VEF=36.001E+00 +BF=186.538E+00 +IBF=1.140E-15 +MLF=2.000E+00 +XIBI=0.000E+00 +BRI=9.231E+00 +IBR=61.600E-15 +VLR=400.000E-03 +XEXT=648.148E-03 +WAVL=1.064E-06 +VAVL=3.330E+00 +SFH=882.471E-03 +RE=949.668E-03 +RBC=27.769E+00 +RBV=32.004E+00 +RCBLX=10.0 +RCBLI=10.0 +RCC=18.026E+00 +RCV=237.417E+00 +SCRCV=882.839E+00 +IHC=3.370E-03 +AXI=300.000E-03 +CJE=55.566E-15 +VDE=900.000E-03 +PE=500.000E-03 +XCJE=52.478E-03 +CJC=25.153E-15 +VDC=660.000E-03 +PC=450.000E-03 +XP=310.000E-03 +MC=500.000E-03 +XCJC=122.100E-03 +MTAU=1.000E+00 +TAUE=6.200E-12 +TAUB=977.273E-15 +TEPI=7.980E-12 +TAUR=64.400E-12 +DEG=0.000E+00 +XREC=0.000E+00 +AQBO=701.246E-03 +AE=308.246E-03 +AB=846.000E-03 +AEPI=2.500E+00 +AEX=619.000E-03 +AC=1.580E+00 +DVGBF=52.000E-03 +DVGBR=0.000E+00 +VGB=1.197E+00 +VGC=1.200E+00 +VGJ=1.200E+00 +DVGTE=1.202E+00 +AF=2.350E+00 +KF=47.298E-09 +KFN=1.000E-09 +ISS=18.480E-18 +IKS=219.348E-06 +CJS=146.628E-15 +VDS=542.048E-03 +PS=314.095E-03 +VGS=1.221E+00 +AS=1.580E+00 +RTH=300 +CTH=3E-09 .end tmpk8ny_4pz/examples/adms/mextram/mex_gum.sp0000644000175000017500000000266513546075722021415 0ustar carstencarstenMEXTRAM Gummel Test Ic,b,s=f(Vc,Ib) VB B 0 0.5 VC C 0 2.0 VS S 0 0.0 Q1 C B 0 S DT BJTRF1 .control dc vb 0.2 1.4 0.01 run plot abs(i(vc)) abs(i(vb)) abs(i(vs)) ylog xlimit 0.3 1.4 ylimit 1e-12 100e-3 plot abs(i(vc))/abs(i(vb)) vs abs(-i(vc)) xlog xlimit 1e-09 10e-3 ylimit 0 150 .endc .model BJTRF1 NPN LEVEL=6 +MULT=1.000E+00 +TREF=25.000E+00 +DTA=0.000E+00 +EXMOD=1.000E+00 +EXPHI=0.000E+00 +EXAVL=1.000E+00 +IS=23.571E-18 +IK=231.660E-03 +VER=2.100E+00 +VEF=36.001E+00 +BF=186.538E+00 +IBF=1.140E-15 +MLF=2.000E+00 +XIBI=0.000E+00 +BRI=9.231E+00 +IBR=61.600E-15 +VLR=400.000E-03 +XEXT=648.148E-03 +WAVL=1.064E-06 +VAVL=3.330E+00 +SFH=882.471E-03 +RE=949.668E-03 +RBC=27.769E+00 +RBV=32.004E+00 +RCBLX=1.0 +RCBLI=1.0 +RCC=18.026E+00 +RCV=237.417E+00 +SCRCV=882.839E+00 +IHC=3.370E-03 +AXI=300.000E-03 +CJE=55.566E-15 +VDE=900.000E-03 +PE=500.000E-03 +XCJE=52.478E-03 +CJC=25.153E-15 +VDC=660.000E-03 +PC=450.000E-03 +XP=310.000E-03 +MC=500.000E-03 +XCJC=122.100E-03 +MTAU=1.000E+00 +TAUE=6.200E-12 +TAUB=977.273E-15 +TEPI=7.980E-12 +TAUR=64.400E-12 +DEG=0.000E+00 +XREC=0.000E+00 +AQBO=701.246E-03 +AE=308.246E-03 +AB=846.000E-03 +AEPI=2.500E+00 +AEX=619.000E-03 +AC=1.580E+00 +DVGBF=52.000E-03 +DVGBR=0.000E+00 +VGB=1.197E+00 +VGC=1.200E+00 +VGJ=1.200E+00 +DVGTE=1.202E+00 +AF=2.350E+00 +KF=47.298E-09 +KFN=1.000E-09 +ISS=18.480E-18 +IKS=219.348E-06 +CJS=146.628E-15 +VDS=542.048E-03 +PS=314.095E-03 +VGS=1.221E+00 +AS=1.580E+00 +RTH=300 +CTH=3E-09 .end tmpk8ny_4pz/examples/adms/hicum0/0000755000175000017500000000000013546075722017107 5ustar carstencarstentmpk8ny_4pz/examples/adms/hicum0/model-card-hicumL0V1p11.lib0000644000175000017500000003660513546075722023650 0ustar carstencarsten******************************************************************************** ******************************************************************************** * HICUM Level0 Version 1.1 model cards for testing ******************************************************************************** ******************************************************************************** * 1D transistor: Isothermal Simulation and Temperature dependence ******************************************************************************** .subckt hicumL0V1p1_1D c b e s dt qhcm0 c b e s dt hic0_full .model hic0_full npn level=7 is=1.3525E-18 vef=8.0 iqf=3.0e-2 iqr=1e6 + iqfh=1e6 tfh=1e-8 ibes=1.16E-20 mbe=1.015 ires=1.16e-16 mre=2.0 ibcs=1.16e-20 + mbc=1.015 mcf=1.0 mcr=1 kavl=0.9488 eavl=11.96e10 alkav=0.825e-4 + aleav=0.196e-3 rbi0=0.0 rbx=0.0 fgeo=0.73 re=0.0 rcx=0.0 iscs=0.0 msc=1.0 + cje0=8.11e-15 vde=0.95 ze=0.5 aje=1.8 cjci0=1.16e-15 vdci=0.8 zci=0.333 + vptci=46 cjcx0=1.0e-20 vdcx=0.7 zcx=0.333 vptcx=100 fbc=0.1526 vr0e=1.6 vr0c=8.0 + cjs0=0.0 vds=0.6 zs=0.447 vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 + tef0=1.8e-12 gte=1.4 thcs=30.0e-12 ahc=0.75 tr=0.0 rci0=127.8 vlim=0.7 + vces=0.1 vpt=5 cbepar=0.0 cbcpar=0.0 kf=1.43e-8 af=2.0 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 + zetarbx=0.206 zetarcx=0.223 zetare=0.0 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 rth=0.0 cth=0.0 + tnom=27.0 npn=1 pnp=0 *+ dt=0.0 .ends hicumL0V1p1_1D ******************************************************************************** * 1D transistor: Electrothermal Simulation to test self-heating ******************************************************************************** .subckt hicumL0V1p1_1D_slh c b e s dt qhcm0 c b e s dt hic0_full .model hic0_full npn level=7 is=1.3525E-18 vef=8.0 iqf=3.0e-2 iqr=1e6 + iqfh=1e6 tfh=1e-8 ibes=1.16E-20 mbe=1.015 ires=1.16e-16 mre=2.0 ibcs=1.16e-20 + mbc=1.015 mcf=1.0 mcr=1 kavl=0.9488 eavl=11.96e10 alkav=0.825e-4 + aleav=0.196e-3 rbi0=0.0 rbx=0.0 fgeo=0.73 re=0.0 rcx=0.0 iscs=0.0 msc=1.0 + cje0=8.11e-15 vde=0.95 ze=0.5 aje=1.8 cjci0=1.16e-15 vdci=0.8 zci=0.333 + vptci=46 cjcx0=1.0e-20 vdcx=0.7 zcx=0.333 vptcx=100 fbc=0.1526 vr0e=1.6 vr0c=8.0 + cjs0=0.0 vds=0.6 zs=0.447 vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 + tef0=1.8e-12 gte=1.4 thcs=30.0e-12 ahc=0.75 tr=0.0 rci0=127.8 vlim=0.7 + vces=0.1 vpt=5 cbepar=0.0 cbcpar=0.0 kf=1.43e-8 af=2.0 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 + zetarbx=0.206 zetarcx=0.223 zetare=0.0 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 rth=1000.0 cth=1.0e-10 + tnom=27.0 dt=0.0 npn=1 pnp=0 *+ dt=0.0 .ends hicumL0V1p1_1D_slh ******************************************************************************** * 1D transistor: Isothermal Simulation with NQS Effect: future ******************************************************************************** .subckt hicumL0V1p1_1D_nqs c b e s dt qhcm0 c b e s dt hic0_full .model hic0_full npn level=7 is=1.3525E-18 vef=8.0 iqf=3.0e-2 iqr=1e6 + iqfh=1e6 tfh=1e-8 ibes=1.16E-20 mbe=1.015 ires=1.16e-16 mre=2.0 ibcs=1.16e-20 + mbc=1.015 mcf=1.0 mcr=1 kavl=0.9488 eavl=11.96e10 alkav=0.825e-4 + aleav=0.196e-3 rbi0=0.0 rbx=0.0 fgeo=0.73 re=0.0 rcx=0.0 iscs=0.0 msc=1.0 + cje0=8.11e-15 vde=0.95 ze=0.5 aje=1.8 cjci0=1.16e-15 vdci=0.8 zci=0.333 + vptci=46 cjcx0=1.0e-20 vdcx=0.7 zcx=0.333 vptcx=100 fbc=0.1526 vr0e=1.6 vr0c=8.0 + cjs0=0.0 vds=0.6 zs=0.447 vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 + tef0=1.8e-12 gte=1.4 thcs=30.0e-12 ahc=0.75 tr=0.0 rci0=127.8 vlim=0.7 + vces=0.1 vpt=5 cbepar=0.0 cbcpar=0.0 kf=1.43e-8 af=2.0 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 + zetarbx=0.206 zetarcx=0.223 zetare=0.0 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 rth=0.0 cth=0.0 + tnom=27.0 npn=1 pnp=0 *+ dt=0.0 .ends hicumL0V1p1_1D_nqs ******************************************************************************** * 1D transistor: Isothermal Simulation to test collector current spreading ******************************************************************************** .subckt hicumL0V1p1_1D_ccs c b e s dt qhcm0 c b e s dt hic0_full .model hic0_full npn level=7 is=1.3525E-18 vef=8.0 iqf=3.0e-2 iqr=1e6 + iqfh=1e6 tfh=1e-8 ibes=1.16E-20 mbe=1.015 ires=1.16e-16 mre=2.0 ibcs=1.16e-20 + mbc=1.015 mcf=1.0 mcr=1 kavl=0.9488 eavl=11.96e10 alkav=0.825e-4 + aleav=0.196e-3 rbi0=0.0 rbx=0.0 fgeo=0.73 re=0.0 rcx=0.0 iscs=0.0 msc=1.0 + cje0=8.11e-15 vde=0.95 ze=0.5 aje=1.8 cjci0=1.16e-15 vdci=0.8 zci=0.333 + vptci=46 cjcx0=1.0e-20 vdcx=0.7 zcx=0.333 vptcx=100 fbc=0.1526 vr0e=1.6 vr0c=8.0 + cjs0=0.0 vds=0.6 zs=0.447 vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 + tef0=1.8e-12 gte=1.4 thcs=30.0e-12 ahc=0.75 tr=0.0 rci0=127.8 vlim=0.7 + vces=0.1 vpt=5 cbepar=0.0 cbcpar=0.0 kf=1.43e-8 af=2.0 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 + zetarbx=0.206 zetarcx=0.223 zetare=0.0 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 rth=0.0 cth=0.0 + tnom=27.0 npn=1 pnp=0 *+ dt=0.0 .ends hicumL0V1p1_1D_ccs ******************************************************************************** * Internal transistor: Isothermal Simulation and Temperature dependence (Tunneling current at peripheral node:future) ******************************************************************************** .subckt hicumL0V1p1_i_tnp c b e s dt qhcm0 c b e s dt hic0_full .model hic0_full npn level=7 is=1.3525E-18 vef=8.0 iqf=3.0e-2 iqr=1e6 + iqfh=1e6 tfh=1e-8 ibes=1.16E-20 mbe=1.015 ires=1.16e-16 mre=2.0 ibcs=1.16e-20 + mbc=1.015 mcf=1.0 mcr=1 kavl=0.9488 eavl=11.96e10 alkav=0.825e-4 + aleav=0.196e-3 rbi0=71.76 rbx=0.0 fgeo=0.73 re=0.0 rcx=0.0 iscs=0.0 msc=1.0 + cje0=8.11e-15 vde=0.95 ze=0.5 aje=1.8 cjci0=1.16e-15 vdci=0.8 zci=0.333 + vptci=46 cjcx0=1.0e-20 vdcx=0.7 zcx=0.333 vptcx=100 fbc=0.1526 vr0e=1.6 vr0c=8.0 + cjs0=0.0 vds=0.6 zs=0.447 vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 + tef0=1.8e-12 gte=1.4 thcs=30.0e-12 ahc=0.75 tr=0.0 rci0=127.8 vlim=0.7 + vces=0.1 vpt=5 cbepar=0.0 cbcpar=0.0 kf=1.43e-8 af=2.0 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 + zetarbx=0.206 zetarcx=0.223 zetare=0.0 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 rth=0.0 cth=0.0 + tnom=27.0 npn=1 pnp=0 *+ dt=0.0 .ends hicumL0V1p1_i_tnp ******************************************************************************** * Internal transistor: Isothermal Simulation and Temperature dependence (Tunneling current at internal node:future) ******************************************************************************** .subckt hicumL0V1p1_i_tni c b e s dt qhcm0 c b e s dt hic0_full .model hic0_full npn level=7 is=1.3525E-18 vef=8.0 iqf=3.0e-2 iqr=1e6 + iqfh=1e6 tfh=1e-8 ibes=1.16E-20 mbe=1.015 ires=1.16e-16 mre=2.0 ibcs=1.16e-20 + mbc=1.015 mcf=1.0 mcr=1 kavl=0.9488 eavl=11.96e10 alkav=0.825e-4 + aleav=0.196e-3 rbi0=71.76 rbx=0.0 fgeo=0.73 re=0.0 rcx=0.0 iscs=0.0 msc=1.0 + cje0=8.11e-15 vde=0.95 ze=0.5 aje=1.8 cjci0=1.16e-15 vdci=0.8 zci=0.333 + vptci=46 cjcx0=1.0e-20 vdcx=0.7 zcx=0.333 vptcx=100 fbc=0.1526 vr0e=1.6 vr0c=8.0 + cjs0=0.0 vds=0.6 zs=0.447 vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 + tef0=1.8e-12 gte=1.4 thcs=30.0e-12 ahc=0.75 tr=0.0 rci0=127.8 vlim=0.7 + vces=0.1 vpt=5 cbepar=0.0 cbcpar=0.0 kf=1.43e-8 af=2.0 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 + zetarbx=0.206 zetarcx=0.223 zetare=0.0 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 rth=0.0 cth=0.0 + tnom=27.0 npn=1 pnp=0 *+ dt=0.0 .ends hicumL0V1p1_i_tni ******************************************************************************** * Complete transistor: Isothermal Simulation and Temperature dependence ******************************************************************************** .subckt hicumL0V1p1_c c b e s dt qhcm0 c b e s dt hic0_full .model hic0_full npn level=7 is=1.3525E-18 vef=8.0 iqf=3.0e-2 iqr=1e6 + iqfh=1e6 tfh=1e-8 ibes=1.16E-20 mbe=1.015 ires=1.16e-16 mre=2.0 ibcs=1.16e-20 + mbc=1.015 mcf=1.0 mcr=1 kavl=0.9488 eavl=11.96e10 alkav=0.825e-4 + aleav=0.196e-3 rbi0=71.76 rbx=8.83 fgeo=0.73 re=12.534 rcx=9.165 iscs=0.0 msc=1.0 + cje0=8.11e-15 vde=0.95 ze=0.5 aje=1.8 cjci0=1.16e-15 vdci=0.8 zci=0.333 + vptci=46 cjcx0=5.4e-15 vdcx=0.7 zcx=0.333 vptcx=100 fbc=0.1526 vr0e=1.6 vr0c=8.0 + cjs0=0.0 vds=0.6 zs=0.447 vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 + tef0=1.8e-12 gte=1.4 thcs=30.0e-12 ahc=0.75 tr=0.0 rci0=127.8 vlim=0.7 + vces=0.1 vpt=5 cbepar=1.13e-15 cbcpar=2.97e-15 kf=1.43e-8 af=2.0 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 + zetarbx=0.206 zetarcx=0.223 zetare=0.0 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 rth=0.0 cth=0.0 + tnom=27.0 npn=1 pnp=0 *+ dt=0.0 .ends hicumL0V1p1_c ******************************************************************************** * Complete transistor: Electrothermal Simulation to test self-heating ******************************************************************************** .subckt hicumL0V1p1_c_slh c b e s dt qhcm0 c b e s dt hic0_full .model hic0_full npn level=7 is=1.3525E-18 vef=8.0 iqf=3.0e-2 iqr=1e6 + iqfh=1e6 tfh=1e-8 ibes=1.16E-20 mbe=1.015 ires=1.16e-16 mre=2.0 ibcs=1.16e-20 + mbc=1.015 mcf=1.0 mcr=1 kavl=0.9488 eavl=11.96e10 alkav=0.825e-4 + aleav=0.196e-3 rbi0=71.76 rbx=8.83 fgeo=0.73 re=12.534 rcx=9.165 iscs=0.0 msc=1.0 + cje0=8.11e-15 vde=0.95 ze=0.5 aje=1.8 cjci0=1.16e-15 vdci=0.8 zci=0.333 + vptci=46 cjcx0=5.4e-15 vdcx=0.7 zcx=0.333 vptcx=100 fbc=0.1526 vr0e=1.6 vr0c=8.0 + cjs0=0.0 vds=0.6 zs=0.447 vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 + tef0=1.8e-12 gte=1.4 thcs=30.0e-12 ahc=0.75 tr=0.0 rci0=127.8 vlim=0.7 + vces=0.1 vpt=5 cbepar=1.13e-15 cbcpar=2.97e-15 kf=1.43e-8 af=2.0 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 + zetarbx=0.206 zetarcx=0.223 zetare=0.0 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 rth=1000.0 cth=1.0e-10 flsh=2 + tnom=27.0 npn=1 pnp=0 *+ dt=0.0 .ends hicumL0V1p1_c_slh ******************************************************************************** * Complete transistor: Isothermal Simulation with NQS Effect: future ******************************************************************************** .subckt hicumL0V1p1_c_nqs c b e s dt qhcm0 c b e s dt hic0_full .model hic0_full npn level=7 is=1.3525E-18 vef=8.0 iqf=3.0e-2 iqr=1e6 + iqfh=1e6 tfh=1e-8 ibes=1.16E-20 mbe=1.015 ires=1.16e-16 mre=2.0 ibcs=1.16e-20 + mbc=1.015 mcf=1.0 mcr=1 kavl=0.9488 eavl=11.96e10 alkav=0.825e-4 + aleav=0.196e-3 rbi0=71.76 rbx=8.83 fgeo=0.73 re=12.534 rcx=9.165 iscs=0.0 msc=1.0 + cje0=8.11e-15 vde=0.95 ze=0.5 aje=1.8 cjci0=1.16e-15 vdci=0.8 zci=0.333 + vptci=46 cjcx0=5.4e-15 vdcx=0.7 zcx=0.333 vptcx=100 fbc=0.1526 vr0e=1.6 vr0c=8.0 + cjs0=0.0 vds=0.6 zs=0.447 vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 + tef0=1.8e-12 gte=1.4 thcs=30.0e-12 ahc=0.75 tr=0.0 rci0=127.8 vlim=0.7 + vces=0.1 vpt=5 cbepar=1.13e-15 cbcpar=2.97e-15 kf=1.43e-8 af=2.0 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 + zetarbx=0.206 zetarcx=0.223 zetare=0.0 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 rth=0.0 cth=0.0 + tnom=27.0 npn=1 pnp=0 *+ dt=0.0 .ends hicumL0V1p1_c_nqs ******************************************************************************** * Complete transistor: Isothermal Simulation to test collector current spreading ******************************************************************************** .subckt hicumL0V1p1_c_ccs c b e s dt qhcm0 c b e s dt hic0_full .model hic0_full npn level=7 is=1.3525E-18 vef=8.0 iqf=3.0e-2 iqr=1e6 + iqfh=1e6 tfh=1e-8 ibes=1.16E-20 mbe=1.015 ires=1.16e-16 mre=2.0 ibcs=1.16e-20 + mbc=1.015 mcf=1.0 mcr=1 kavl=0.9488 eavl=11.96e10 alkav=0.825e-4 + aleav=0.196e-3 rbi0=71.76 rbx=8.83 fgeo=0.73 re=12.534 rcx=9.165 iscs=0.0 msc=1.0 + cje0=8.11e-15 vde=0.95 ze=0.5 aje=1.8 cjci0=1.16e-15 vdci=0.8 zci=0.333 + vptci=46 cjcx0=5.4e-15 vdcx=0.7 zcx=0.333 vptcx=100 fbc=0.1526 vr0e=1.6 vr0c=8.0 + cjs0=0.0 vds=0.6 zs=0.447 vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 + tef0=1.8e-12 gte=1.4 thcs=30.0e-12 ahc=0.75 tr=0.0 rci0=127.8 vlim=0.7 + vces=0.1 vpt=5 cbepar=1.13e-15 cbcpar=2.97e-15 kf=1.43e-8 af=2.0 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 + zetarbx=0.206 zetarcx=0.223 zetare=0.0 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 rth=0.0 cth=0.0 + tnom=27.0 npn=1 pnp=0 *+ dt=0.0 .ends hicumL0V1p1_c_ccs ******************************************************************************** * Complete transistor: Isothermal Simulation with substrate diode ******************************************************************************** .subckt hicumL0V1p1_c_sbt c b e s dt qhcm0 c b e s dt hic0_full .model hic0_full npn level=7 is=1.3525E-18 vef=8.0 iqf=3.0e-2 iqr=1e6 + iqfh=1e6 tfh=1e-8 ibes=1.16E-20 mbe=1.015 ires=1.16e-16 mre=2.0 ibcs=1.16e-20 + mbc=1.015 mcf=1.0 mcr=1 kavl=0.9488 eavl=11.96e10 alkav=0.825e-4 + aleav=0.196e-3 rbi0=71.76 rbx=8.83 fgeo=0.73 re=12.534 rcx=9.165 iscs=1.0e-17 msc=1.0 + cje0=8.11e-15 vde=0.95 ze=0.5 aje=1.8 cjci0=1.16e-15 vdci=0.8 zci=0.333 + vptci=46 cjcx0=5.4e-15 vdcx=0.7 zcx=0.333 vptcx=100 fbc=0.1526 vr0e=1.6 vr0c=8.0 + cjs0=3.64e-14 vds=0.6 zs=0.447 vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 + tef0=1.8e-12 gte=1.4 thcs=30.0e-12 ahc=0.75 tr=0.0 rci0=127.8 vlim=0.7 + vces=0.1 vpt=5 cbepar=1.13e-15 cbcpar=2.97e-15 kf=1.43e-8 af=2.0 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 + zetarbx=0.206 zetarcx=0.223 zetare=0.0 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 rth=0.0 cth=0.0 + tnom=27.0 npn=1 pnp=0 *+ dt=0.0 .ends hicumL0V1p1_c_sbt ******************************************************************************** * Complete transistor: Isothermal Simulation with substrate network: future ******************************************************************************** .subckt hicumL0V1p1_c_sbn c b e s dt qhcm0 c b e s dt hic0_full .model hic0_full npn level=7 is=1.3525E-18 vef=8.0 iqf=3.0e-2 iqr=1e6 + iqfh=1e6 tfh=1e-8 ibes=1.16E-20 mbe=1.015 ires=1.16e-16 mre=2.0 ibcs=1.16e-20 + mbc=1.015 mcf=1.0 mcr=1 kavl=0.9488 eavl=11.96e10 alkav=0.825e-4 + aleav=0.196e-3 rbi0=71.76 rbx=8.83 fgeo=0.73 re=12.534 rcx=9.165 iscs=1.0e-17 msc=1.0 + cje0=8.11e-15 vde=0.95 ze=0.5 aje=1.8 cjci0=1.16e-15 vdci=0.8 zci=0.333 + vptci=46 cjcx0=5.4e-15 vdcx=0.7 zcx=0.333 vptcx=100 fbc=0.1526 vr0e=1.6 vr0c=8.0 + cjs0=3.64e-14 vds=0.6 zs=0.447 vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 + tef0=1.8e-12 gte=1.4 thcs=30.0e-12 ahc=0.75 tr=0.0 rci0=127.8 vlim=0.7 + vces=0.1 vpt=5 cbepar=1.13e-15 cbcpar=2.97e-15 kf=1.43e-8 af=2.0 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 + zetarbx=0.206 zetarcx=0.223 zetare=0.0 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 rth=0.0 cth=0.0 + tnom=27.0 npn=1 pnp=0 *+ dt=0.0 .ends hicumL0V1p1_c_sbn ******************************************************************************** * Complete test transistor: default ******************************************************************************** .subckt hicumL0V11_default c b e s dt qhcm0 c b e s dt hic0_full .ends hicumL0V11_default ******************************************************************************** tmpk8ny_4pz/examples/adms/hicum0/hic0_gum.sp0000644000175000017500000000050413546075722021145 0ustar carstencarstenHICUM0 Gummel Test Ic=f(Vc,Vb) VB B 0 0.5 VC C 0 1.0 VS S 0 0.0 X1 C B 0 S DT hicumL0V1p1_c_sbt .control dc vb 0.2 1.4 0.01 run plot abs(i(vc)) abs(i(vb)) abs(i(vs)) ylimit 0.1e-12 100e-3 ylog plot abs(i(vc))/abs(i(vb)) vs abs(-i(vc)) xlog xlimit 1e-09 10e-3 ylimit 0 300 .endc .include model-card-hicumL0V1p11.lib .end tmpk8ny_4pz/examples/adms/hicum0/hic0_out.sp0000644000175000017500000000034113546075722021163 0ustar carstencarstenHICUM0 Output Test Ic=f(Vc,Ib) IB 0 B 200n VC C 0 2.0 VS S 0 0.0 X1 C B 0 S DT hicumL0V1p1_c_slh .control dc vc 0.0 3.0 0.05 ib 10u 100u 10u run plot abs(i(vc)) plot v(dt) .endc .include model-card-hicumL0V1p11.lib .end tmpk8ny_4pz/examples/adms/psp/0000755000175000017500000000000013546075722016524 5ustar carstencarstentmpk8ny_4pz/examples/adms/psp/psp_out.sp0000644000175000017500000000665713546075722020577 0ustar carstencarstenpsp nch output * vd d 0 dc 0.1 vg g 0 dc 0.0 vs s 0 dc 0.0 vb b 0 dc 0.0 m1 d g s b nch +l=1.0e-06 +w=10.0e-06 +sa=0.0e+00 +sb=0.0e+00 +absource=1.0e-12 +lssource=1.0e-06 +lgsource=1.0e-06 +abdrain=1.0e-12 +lsdrain=1.0e-06 +lgdrain=1.0e-06 +mult=1.0e+00 * .option temp=21 .control dc vd 0 3.5 0.05 vg 0.5 3 0.5 plot abs(i(vd)) plot abs(i(vb)) ylog ylimit 1e-12 1e-03 .endc * .model nch nmos level=45 +type=1.0e+00 +tr=21.0e+00 +swigate=0.0e+00 +swimpact=1.0e+00 +swgidl=0.0e+00 +swjuncap=0.0e+00 +lvaro=0.0e+00 +lvarl=0.0e+00 +lvarw=0.0e+00 +lap=0.0e+00 +wvaro=0.0e+00 +wvarl=0.0e+00 +wvarw=0.0e+00 +wot=0.0e+00 +vfbo=-1.0e+00 +vfbl=0.0e+00 +vfbw=0.0e+00 +vfblw=0.0e+00 +stvfbo=500.0e-06 +stvfbl=0.0e+00 +stvfbw=0.0e+00 +stvfblw=0.0e+00 +toxo=2.0e-09 +nsubo=300.0e+21 +nsubw=0.0e+00 +wseg=10.0e-09 +npck=1.0e+24 +npckw=0.0e+00 +wsegp=10.0e-09 +lpck=10.0e-09 +lpckw=0.0e+00 +vnsubo=0.0e+00 +nslpo=50.0e-03 +dnsubo=0.0e+00 +npo=100.0e+24 +npl=0.0e+00 +qmc=1.0e+00 +cto=0.0e+00 +ctl=0.0e+00 +ctlexp=1.0e+00 +ctw=0.0e+00 +toxovo=2.0e-09 +lov=0.0e+00 +novo=50.0e+24 +fol1=0.0e+00 +fol2=0.0e+00 +cfl=0.0e+00 +cflexp=2.0e+00 +cfw=0.0e+00 +cfbo=0.0e+00 +uo=50.0e-03 +fbet1=0.0e+00 +fbet1w=0.0e+00 +lp1=10.0e-09 +lp1w=0.0e+00 +fbet2=0.0e+00 +lp2=10.0e-09 +betw1=0.0e+00 +betw2=0.0e+00 +wbet=1.0e-09 +stbeto=1.0e+00 +stbetl=0.0e+00 +stbetw=0.0e+00 +stbetlw=0.0e+00 +mueo=500.0e-03 +muew=0.0e+00 +stmueo=0.0e+00 +themuo=1.5e+00 +stthemuo=1.5e+00 +cso=0.0e+00 +csw=0.0e+00 +stcso=0.0e+00 +xcoro=0.0e+00 +xcorl=0.0e+00 +xcorw=0.0e+00 +xcorlw=0.0e+00 +stxcoro=0.0e+00 +rsw1=0.5e+03 +rsw2=0.0e+00 +strso=1.0e+00 +rsbo=0.0e+00 +rsgo=0.0e+00 +thesato=0.0e+00 +thesatl=50.0e-03 +thesatlexp=1.0e+00 +thesatw=0.0e+00 +stthesato=1.0e+00 +stthesatl=0.0e+00 +stthesatw=0.0e+00 +stthesatlw=0.0e+00 +thesatbo=0.0e+00 +thesatgo=0.0e+00 +axo=18.0e+00 +axl=400.0e-03 +alpl=500.0e-06 +alplexp=1.0e+00 +alpw=0.0e+00 +alp1l1=0.0e+00 +alp1lexp=500.0e-03 +alp1l2=0.0e+00 +alp1w=0.0e+00 +alp2l1=0.0e+00 +alp2lexp=0.5e+00 +alp2l2=0.0e+00 +alp2w=0.0e+00 +vpo=50.0e-03 +a1o=1.0e+00 +a1l=0.0e+00 +a1w=0.0e+00 +a2o=10.0e+00 +sta2o=0.0e+00 +a3o=1.0e+00 +a3l=0.0e+00 +a3w=0.0e+00 +a4o=0.0e+00 +a4w=0.0e+00 +gcoo=0.0e+00 +iginvlw=0.0e+00 +igovw=0.0e+00 +stigo=2.0e+00 +gc2o=375.0e-03 +gc3o=63.0e-03 +chibo=3.1e+00 +agidlw=0.0e+00 +bgidlo=41.0e+00 +stbgidlo=0.0e+00 +cgidlo=0.0e+00 +cgbovl=0.0e+00 +cfrw=0.0e+00 +nfalw=80.0e+21 +nfblw=30.0e+06 +nfclw=0.0e+00 +saref=1.0e-06 +sbref=1.0e-06 +wlod=0.0e+00 +kuo=0.0e+00 +kvsat=0.0e+00 +tkuo=0.0e+00 +lkuo=0.0e+00 +wkuo=0.0e+00 +pkuo=0.0e+00 +llodkuo=0.0e+00 +wlodkuo=0.0e+00 +kvtho=0.0e+00 +lkvtho=0.0e+00 +wkvtho=0.0e+00 +pkvtho=0.0e+00 +llodvth=0.0e+00 +wlodvth=0.0e+00 +stetao=0.0e+00 +lodetao=1.0e+00 +trj=21.0e+00 +imax=1.0e+03 +cjorbot=1.0e-03 +cjorsti=1.0e-09 +cjorgat=1.0e-09 +vbirbot=1.0e+00 +vbirsti=1.0e+00 +vbirgat=1.0e+00 +pbot=500.0e-03 +psti=500.0e-03 +pgat=500.0e-03 +phigbot=1.16e+00 +phigsti=1.16e+00 +phiggat=1.16e+00 +idsatrbot=1.0e-12 +idsatrsti=1.0e-18 +idsatrgat=1.0e-18 +csrhbot=100.0e+00 +csrhsti=100.0e-06 +csrhgat=100.0e-06 +xjunsti=100.0e-09 +xjungat=100.0e-09 +ctatbot=100.0e+00 +ctatsti=100.0e-06 +ctatgat=100.0e-06 +mefftatbot=250.0e-03 +mefftatsti=250.0e-03 +mefftatgat=250.0e-03 +cbbtbot=1.0e-12 +cbbtsti=1.0e-18 +cbbtgat=1.0e-18 +fbbtrbot=1.0e+09 +fbbtrsti=1.0e+09 +fbbtrgat=1.0e+09 +stfbbtbot=-1.0e-03 +stfbbtsti=-1.0e-03 +stfbbtgat=-1.0e-03 +vbrbot=10.0e+00 +vbrsti=10.0e+00 +vbrgat=10.0e+00 +pbrbot=4.0e+00 +pbrsti=4.0e+00 +pbrgat=4.0e+00 +dta=0.0e+00 .end tmpk8ny_4pz/examples/adms/psp/psp_tran.sp0000644000175000017500000000671513546075722020727 0ustar carstencarstenpsp nch transfer * vd d 0 dc 0.1 vg g 0 dc 0.0 vs s 0 dc 0.0 vb b 0 dc 0.0 m1 d g s b nch +l=1.0e-06 +w=10.0e-06 +sa=0.0e+00 +sb=0.0e+00 +absource=1.0e-12 +lssource=1.0e-06 +lgsource=1.0e-06 +abdrain=1.0e-12 +lsdrain=1.0e-06 +lgdrain=1.0e-06 +mult=1.0e+00 * .option temp=21 .control dc vg 0 3.5 0.02 vb -3 0 0.5 plot abs(i(vd)) dc vg 0 1.5 0.01 vb -3 0 0.5 plot abs(i(vd)) ylog ylimit 1e-12 1e-03 .endc * .model nch nmos level=45 +type=1.0e+00 +tr=21.0e+00 +swigate=0.0e+00 +swimpact=1.0e+00 +swgidl=0.0e+00 +swjuncap=0.0e+00 +lvaro=0.0e+00 +lvarl=0.0e+00 +lvarw=0.0e+00 +lap=0.0e+00 +wvaro=0.0e+00 +wvarl=0.0e+00 +wvarw=0.0e+00 +wot=0.0e+00 +vfbo=-1.0e+00 +vfbl=0.0e+00 +vfbw=0.0e+00 +vfblw=0.0e+00 +stvfbo=500.0e-06 +stvfbl=0.0e+00 +stvfbw=0.0e+00 +stvfblw=0.0e+00 +toxo=2.0e-09 +nsubo=300.0e+21 +nsubw=0.0e+00 +wseg=10.0e-09 +npck=1.0e+24 +npckw=0.0e+00 +wsegp=10.0e-09 +lpck=10.0e-09 +lpckw=0.0e+00 +vnsubo=0.0e+00 +nslpo=50.0e-03 +dnsubo=0.0e+00 +npo=100.0e+24 +npl=0.0e+00 +qmc=1.0e+00 +cto=0.0e+00 +ctl=0.0e+00 +ctlexp=1.0e+00 +ctw=0.0e+00 +toxovo=2.0e-09 +lov=0.0e+00 +novo=50.0e+24 +fol1=0.0e+00 +fol2=0.0e+00 +cfl=0.0e+00 +cflexp=2.0e+00 +cfw=0.0e+00 +cfbo=0.0e+00 +uo=50.0e-03 +fbet1=0.0e+00 +fbet1w=0.0e+00 +lp1=10.0e-09 +lp1w=0.0e+00 +fbet2=0.0e+00 +lp2=10.0e-09 +betw1=0.0e+00 +betw2=0.0e+00 +wbet=1.0e-09 +stbeto=1.0e+00 +stbetl=0.0e+00 +stbetw=0.0e+00 +stbetlw=0.0e+00 +mueo=500.0e-03 +muew=0.0e+00 +stmueo=0.0e+00 +themuo=1.5e+00 +stthemuo=1.5e+00 +cso=0.0e+00 +csw=0.0e+00 +stcso=0.0e+00 +xcoro=0.0e+00 +xcorl=0.0e+00 +xcorw=0.0e+00 +xcorlw=0.0e+00 +stxcoro=0.0e+00 +rsw1=2.5e+03 +rsw2=0.0e+00 +strso=1.0e+00 +rsbo=0.0e+00 +rsgo=0.0e+00 +thesato=0.0e+00 +thesatl=50.0e-03 +thesatlexp=1.0e+00 +thesatw=0.0e+00 +stthesato=1.0e+00 +stthesatl=0.0e+00 +stthesatw=0.0e+00 +stthesatlw=0.0e+00 +thesatbo=0.0e+00 +thesatgo=0.0e+00 +axo=18.0e+00 +axl=400.0e-03 +alpl=500.0e-06 +alplexp=1.0e+00 +alpw=0.0e+00 +alp1l1=0.0e+00 +alp1lexp=500.0e-03 +alp1l2=0.0e+00 +alp1w=0.0e+00 +alp2l1=0.0e+00 +alp2lexp=0.5e+00 +alp2l2=0.0e+00 +alp2w=0.0e+00 +vpo=50.0e-03 +a1o=1.0e+00 +a1l=0.0e+00 +a1w=0.0e+00 +a2o=10.0e+00 +sta2o=0.0e+00 +a3o=1.0e+00 +a3l=0.0e+00 +a3w=0.0e+00 +a4o=0.0e+00 +a4w=0.0e+00 +gcoo=0.0e+00 +iginvlw=0.0e+00 +igovw=0.0e+00 +stigo=2.0e+00 +gc2o=375.0e-03 +gc3o=63.0e-03 +chibo=3.1e+00 +agidlw=0.0e+00 +bgidlo=41.0e+00 +stbgidlo=0.0e+00 +cgidlo=0.0e+00 +cgbovl=0.0e+00 +cfrw=0.0e+00 +nfalw=80.0e+21 +nfblw=30.0e+06 +nfclw=0.0e+00 +saref=1.0e-06 +sbref=1.0e-06 +wlod=0.0e+00 +kuo=0.0e+00 +kvsat=0.0e+00 +tkuo=0.0e+00 +lkuo=0.0e+00 +wkuo=0.0e+00 +pkuo=0.0e+00 +llodkuo=0.0e+00 +wlodkuo=0.0e+00 +kvtho=0.0e+00 +lkvtho=0.0e+00 +wkvtho=0.0e+00 +pkvtho=0.0e+00 +llodvth=0.0e+00 +wlodvth=0.0e+00 +stetao=0.0e+00 +lodetao=1.0e+00 +trj=21.0e+00 +imax=1.0e+03 +cjorbot=1.0e-03 +cjorsti=1.0e-09 +cjorgat=1.0e-09 +vbirbot=1.0e+00 +vbirsti=1.0e+00 +vbirgat=1.0e+00 +pbot=500.0e-03 +psti=500.0e-03 +pgat=500.0e-03 +phigbot=1.16e+00 +phigsti=1.16e+00 +phiggat=1.16e+00 +idsatrbot=1.0e-12 +idsatrsti=1.0e-18 +idsatrgat=1.0e-18 +csrhbot=100.0e+00 +csrhsti=100.0e-06 +csrhgat=100.0e-06 +xjunsti=100.0e-09 +xjungat=100.0e-09 +ctatbot=100.0e+00 +ctatsti=100.0e-06 +ctatgat=100.0e-06 +mefftatbot=250.0e-03 +mefftatsti=250.0e-03 +mefftatgat=250.0e-03 +cbbtbot=1.0e-12 +cbbtsti=1.0e-18 +cbbtgat=1.0e-18 +fbbtrbot=1.0e+09 +fbbtrsti=1.0e+09 +fbbtrgat=1.0e+09 +stfbbtbot=-1.0e-03 +stfbbtsti=-1.0e-03 +stfbbtgat=-1.0e-03 +vbrbot=10.0e+00 +vbrsti=10.0e+00 +vbrgat=10.0e+00 +pbrbot=4.0e+00 +pbrsti=4.0e+00 +pbrgat=4.0e+00 +dta=0.0e+00 .end tmpk8ny_4pz/examples/adms/ekv/0000755000175000017500000000000013546075722016507 5ustar carstencarstentmpk8ny_4pz/examples/adms/ekv/ekv26_0u5.par0000644000175000017500000000720213546075722020642 0ustar carstencarsten********************************************************************** * EKV v2.6 parameters for 0.5um CMOS C. EPFL-LEG, 1999 * ---------------------------------- * * ELDO (LEVEL = 44) / PSPICE (LEVEL = 5) example parameter set * for the EKV v2.6 model is provided for NMOS and PMOS. * * * IMPORTANT NOTES: * ---------------- * * Parameters do not correspond to a particular technology but * have reasonable values for standard 0.5um CMOS. * Not intended for use in real design. * * Includes all intrinsic model parameters. An example set for * extrinsic model parameters is provided. * * Geometry range: W >= 0.8um, L >= 0.5um * Voltage range: |Vgb| < 3.3V, |Vdb| < 3.3V, |Vsb| < 2V * * For use with either simulator, comment/uncomment respective lines. * Use of extrinsic model parameters and models (series resistance, * junction currents/capacitances) is in general simulator-dependent. * ********************************************************************** * EKV v2.6 NMOS *--------------- .MODEL NCH NMOS + LEVEL = 44 *** Setup Parameters *+ UPDATE = 2.6 *+ XQC = 0.4 *** Process Related Model Parameters + COX = 3.45E-3 + XJ = 0.15E-6 *** Intrinsic Model Parameters + VTO = 0.6 + GAMMA = 0.71 + PHI = 0.97 + KP = 150E-6 + E0 = 88.0E6 + UCRIT = 4.5E6 + DL = -0.05E-6 + DW = -0.02E-6 + LAMBDA = 0.23 + LETA = 0.28 + WETA = 0.05 + Q0 = 280E-6 + LK = 0.5E-6 *** Substrate Current Parameters + IBN = 1.0 + IBA = 200E6 + IBB = 350E6 *** Intrinsic Model Temperature Parameters + TNOM = 25.0 + TCV = 1.5E-3 + BEX = -1.5 + UCEX = 1.7 + IBBT = 0.0 *** 1/f Noise Model Parameters + KF = 1E-27 + AF = 1 *** Short-Distance Matching Statistical Parameters (for MC simulation only) *+ AVTO = 0 DEV = 10.0E-3 ; ELDO v4.6 *+ AGAMMA = 0 DEV = 10.0E-3 ; ELDO v4.6 *+ AKP = 0 DEV = 25.0E-3 ; ELDO v4.6 *** Series Resistance and Area Calulation Parameters *+ RLEV = 3 + HDIF = 0.9E-6 + RSH = 510 *** Junction Current Parameters *+ ALEV = 3 + JS = 8.0E-6 + JSW = 1.5E-10 + XTI = 0 + N = 1.5 *** Junction Capacitances Parameters + CJ = 8.0E-4 + CJSW = 3.0E-10 + MJ = 0.5 + MJSW = 0.3 + PB = 0.9 + PBSW = 0.5 + FC = 0.5 *** Gate Overlap Capacitances + CGSO = 1.5E-10 + CGDO = 1.5E-10 + CGBO = 4.0E-10 * EKV v2.6 PMOS *--------------- .MODEL PCH PMOS + LEVEL = 44 *** Setup Parameters *+ UPDATE = 2.6 *+ XQC = 0.4 *** Process Related Model Parameters + COX = 3.45E-3 + XJ = 0.15E-6 *** Intrinsic Model Parameters + VTO = -0.55 + GAMMA = 0.69 + PHI = 0.87 + KP = 35.0E-6 + E0 = 51.0E6 + UCRIT = 18.0E6 + DL = -0.05E-6 + DW = -0.03E-6 + LAMBDA = 1.1 + LETA = 0.45 + WETA = 0.0 + Q0 = 200E-6 + LK = 0.6E-6 *** Substrate Current Parameters + IBN = 1.0 + IBA = 10E6 + IBB = 300E6 *** Intrinsic Model Temperature Parameters + TNOM = 25.0 + TCV = -1.4E-3 + BEX = -1.4 + UCEX = 2.0 + IBBT = 0.0 *** 1/f Noise Model Parameters + KF = 1.0E-28 + AF = 1 *** Short-Distance Matching Statistical Parameters (for MC simulation only) *+ AVTO = 0 DEV = 10.0E-3 ; ELDO v4.6 *+ AGAMMA = 0 DEV = 10.0E-3 ; ELDO v4.6 *+ AKP = 0 DEV = 25.0E-3 ; ELDO v4.6 *** Series Resistance and Area Calulation Parameters *+ RLEV = 3 + HDIF = 0.9E-6 + RSH = 990 *** Junction Current Parameters *+ ALEV = 3 + JS = 4.0E-5 + JSW = 7.0E-10 + XTI = 0 + N = 1.8 *** Junction Capacitances Parameters + CJ = 8.0E-4 + CJSW = 4.0E-10 + MJ = 0.5 + MJSW = 0.35 + PB = 0.9 + PBSW = 0.8 + FC = 0.5 *** Gate Overlap Capacitances + CGSO = 1.5E-10 + CGDO = 1.5E-10 + CGBO = 4.0E-10 tmpk8ny_4pz/examples/adms/ekv/ekv_tran.sp0000644000175000017500000000031313546075722020661 0ustar carstencarstenEPFL-EKV version 2.6 nch .include ekv26_0u5.par * vd d 0 dc 0.1 vg g 0 dc 0.0 vs s 0 dc 0.0 vb b 0 dc 0.0 m1 d g s b nch * * Transfer .control dc vg 0 5 0.1 vb -5 0 1 plot abs(i(vd)) .endc * .end tmpk8ny_4pz/examples/adms/ekv/ekv_out.sp0000644000175000017500000000031113546075722020522 0ustar carstencarstenEPFL-EKV version 2.6 nch .include ekv26_0u5.par vd d 0 dc 0.1 vg g 0 dc 0.0 vs s 0 dc 0.0 vb b 0 dc 0.0 m1 d g s b nch * * Transfer .control dc vd 0 5 0.01 vg 1 5 1 plot abs(i(vd)) .endc * .end tmpk8ny_4pz/examples/adms/hicum2/0000755000175000017500000000000013546075722017111 5ustar carstencarstentmpk8ny_4pz/examples/adms/hicum2/hic2_gum.sp0000644000175000017500000000052613546075722021155 0ustar carstencarstenHICUM2v2.2 Gummel Test Ic,b,s=f(Vc,Ib) VB B 0 0.5 VC C 0 1.0 VS S 0 0.0 Q1 C B 0 S DT hicumL2V2p2_c_sbt .control dc vb 0.2 1.4 0.01 run plot abs(i(vc)) abs(i(vb)) abs(i(vs)) ylog xlimit 0.3 1.6 ylimit 1e-12 0.1 plot abs(i(vc))/abs(i(vb)) vs abs(-i(vc)) xlog xlimit 1e-09 10e-3 ylimit 0 120 .endc .include model-card-hicumL2V2p21.lib .end tmpk8ny_4pz/examples/adms/hicum2/hic2_out.sp0000644000175000017500000000034313546075722021171 0ustar carstencarstenHICUM2v2.2 Output Test Ic=f(Vc,Ib) IB 0 B 200n VC C 0 3.0 VS S 0 0.0 Q1 C B 0 S DT hicumL2V2p2_c_slh .control dc vc 0.0 2.0 0.05 ib 10u 50u 10u run plot abs(i(vc)) plot v(dt) .endc .include model-card-hicumL2V2p21.lib .end tmpk8ny_4pz/examples/adms/hicum2/model-card-hicumL2V2p21.lib0000644000175000017500000004434113546075722023652 0ustar carstencarsten******************************************************************************** ******************************************************************************** * HICUM Level2 Version 2.2 model cards for testing ******************************************************************************** ******************************************************************************** * 1D transistor: Isothermal Simulation and Temperature dependence ******************************************************************************** .model hicumL2V2p2_1D npn level=8 + c10=3.76E-32 qp0=2.78e-14 ich=2.09e-2 hfe=1.0 hfc=1.0 hjei=1.0 + hjci=1.0 tr=0.0 ibeis=1.16E-20 mbei=1.015 ireis=1.16e-16 mrei=2.0 ibeps=0.0 + mbep=1.015 ireps=0.0 mrep=2.0 mcf=1.0 tbhrec=0.0 ibcis=1.16e-20 mbci=1.015 ibcxs=0.0 + mbcx=1.03 ibets=0.0 abet=40.0 tunode=1.0 favl=1.186 qavl=11.1e-5 alfav=0.825e-4 + alqav=0.196e-3 rbi0=0.0 rbx=0.0 fgeo=0.73 fdqr0=0.2 fcrbi=0.0 flcomp=1 + fqi=1.0 re=0.0 rcx=0.0 itss=0.0 msf=1.05 iscs=0.0 msc=1.0 tsf=1.05 rsu=0.0 + csu=0.0 cjei0=8.11e-15 vdei=0.95 zei=0.5 ajei=1.8 cjep0=1.0e-20 vdep=1.05 + zep=0.4 ajep=2.4 cjci0=1.16e-15 vdci=0.8 zci=0.333 vptci=46 cjcx0=1.0e-20 + vdcx=0.7 zcx=0.333 vptcx=100 fbcpar=0.1526 fbepar=0.5 cjs0=0.0 vds=0.6 zs=0.447 + vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 tef0=1.8e-12 gtfe=1.4 thcs=30.0e-12 + ahc=0.75 fthc=0.6 rci0=127.8 vlim=0.7 vces=0.1 vpt=5 cbepar=0.0 cbcpar=0.0 + alqf=0.225 alit=0.45 flnqs=0.0 kf=1.43e-8 af=2.0 latb=0.0 latl=0.0 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 zetarbx=0.206 + zetarcx=0.223 zetare=0.0 zetacx=2.2 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 flsh=0.0 rth=1000.0 cth=1.0e-10 tnom=27.0 dt=0.0 ******************************************************************************** * 1D transistor: Electrothermal Simulation to test self-heating ******************************************************************************** .model hicumL2V2p2_1D_slh npn level=8 + c10=3.76E-32 qp0=2.78e-14 ich=2.09e-2 hfe=1.0 hfc=1.0 hjei=1.0 + hjci=1.0 tr=0.0 ibeis=1.16E-20 mbei=1.015 ireis=1.16e-16 mrei=2.0 ibeps=0.0 + mbep=1.015 ireps=0.0 mrep=2.0 mcf=1.0 tbhrec=0.0 ibcis=1.16e-20 mbci=1.015 ibcxs=0.0 + mbcx=1.03 ibets=0.0 abet=40.0 tunode=1.0 favl=1.186 qavl=11.1e-5 alfav=0.825e-4 + alqav=0.196e-3 rbi0=0.0 rbx=0.0 fgeo=0.73 fdqr0=0.2 fcrbi=0.0 flcomp=1 + fqi=1.0 re=0.0 rcx=0.0 itss=0.0 msf=1.05 iscs=0.0 msc=1.0 tsf=1.05 rsu=0.0 + csu=0.0 cjei0=8.11e-15 vdei=0.95 zei=0.5 ajei=1.8 cjep0=1.0e-20 vdep=1.05 + zep=0.4 ajep=2.4 cjci0=1.16e-15 vdci=0.8 zci=0.333 vptci=46 cjcx0=1.0e-20 + vdcx=0.7 zcx=0.333 vptcx=100 fbcpar=0.1526 fbepar=0.5 cjs0=0.0 vds=0.6 zs=0.447 + vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 tef0=1.8e-12 gtfe=1.4 thcs=30.0e-12 + ahc=0.75 fthc=0.6 rci0=127.8 vlim=0.7 vces=0.1 vpt=5 cbepar=0.0 cbcpar=0.0 + alqf=0.225 alit=0.45 flnqs=0.0 kf=1.43e-8 af=2.0 latb=0.0 latl=0.0 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 zetarbx=0.206 + zetarcx=0.223 zetare=0.0 zetacx=2.2 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 flsh=1.0 rth=1000.0 cth=1.0e-10 tnom=27.0 dt=0.0 ******************************************************************************** * 1D transistor: Isothermal Simulation with NQS Effect: future ******************************************************************************** .model hicumL2V2p2_1D_nqs npn level=8 + c10=3.76E-32 qp0=2.78e-14 ich=2.09e-2 hfe=1.0 hfc=1.0 hjei=1.0 + hjci=1.0 tr=0.0 ibeis=1.16E-20 mbei=1.015 ireis=1.16e-16 mrei=2.0 ibeps=0.0 + mbep=1.015 ireps=0.0 mrep=2.0 mcf=1.0 tbhrec=0.0 ibcis=1.16e-20 mbci=1.015 ibcxs=0.0 + mbcx=1.03 ibets=0.0 abet=40.0 tunode=1.0 favl=1.186 qavl=11.1e-5 alfav=0.825e-4 + alqav=0.196e-3 rbi0=0.0 rbx=0.0 fgeo=0.73 fdqr0=0.2 fcrbi=0.0 flcomp=1 + fqi=1.0 re=0.0 rcx=0.0 itss=0.0 msf=1.05 iscs=0.0 msc=1.0 tsf=1.05 rsu=0.0 + csu=0.0 cjei0=8.11e-15 vdei=0.95 zei=0.5 ajei=1.8 cjep0=1.0e-20 vdep=1.05 + zep=0.4 ajep=2.4 cjci0=1.16e-15 vdci=0.8 zci=0.333 vptci=46 cjcx0=1.0e-20 + vdcx=0.7 zcx=0.333 vptcx=100 fbcpar=0.1526 fbepar=0.5 cjs0=0.0 vds=0.6 zs=0.447 + vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 tef0=1.8e-12 gtfe=1.4 thcs=30.0e-12 + ahc=0.75 fthc=0.6 rci0=127.8 vlim=0.7 vces=0.1 vpt=5 cbepar=0.0 cbcpar=0.0 + alqf=0.225 alit=0.45 flnqs=1.0 kf=1.43e-8 af=2.0 latb=0.0 latl=0.0 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 zetarbx=0.206 + zetarcx=0.223 zetare=0.0 zetacx=2.2 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 flsh=0.0 rth=1000.0 cth=1.0e-10 tnom=27.0 dt=0.0 ******************************************************************************** * 1D transistor: Isothermal Simulation to test collector current spreading ******************************************************************************** .model hicumL2V2p2_1D_ccs npn level=8 + c10=3.76E-32 qp0=2.78e-14 ich=2.09e-2 hfe=1.0 hfc=1.0 hjei=1.0 + hjci=1.0 tr=0.0 ibeis=1.16E-20 mbei=1.015 ireis=1.16e-16 mrei=2.0 ibeps=0.0 + mbep=1.015 ireps=0.0 mrep=2.0 mcf=1.0 tbhrec=0.0 ibcis=1.16e-20 mbci=1.015 ibcxs=0.0 + mbcx=1.03 ibets=0.0 abet=40.0 tunode=1.0 favl=1.186 qavl=11.1e-5 alfav=0.825e-4 + alqav=0.196e-3 rbi0=0.0 rbx=0.0 fgeo=0.73 fdqr0=0.2 fcrbi=0.0 flcomp=1 + fqi=1.0 re=0.0 rcx=0.0 itss=0.0 msf=1.05 iscs=0.0 msc=1.0 tsf=1.05 rsu=0.0 + csu=0.0 cjei0=8.11e-15 vdei=0.95 zei=0.5 ajei=1.8 cjep0=1.0e-20 vdep=1.05 + zep=0.4 ajep=2.4 cjci0=1.16e-15 vdci=0.8 zci=0.333 vptci=46 cjcx0=1.0e-20 + vdcx=0.7 zcx=0.333 vptcx=100 fbcpar=0.1526 fbepar=0.5 cjs0=0.0 vds=0.6 zs=0.447 + vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 tef0=1.8e-12 gtfe=1.4 thcs=30.0e-12 + ahc=0.75 fthc=0.6 rci0=127.8 vlim=0.7 vces=0.1 vpt=5 cbepar=0.0 cbcpar=0.0 + alqf=0.225 alit=0.45 flnqs=0.0 kf=1.43e-8 af=2.0 latb=3.765 latl=0.342 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 zetarbx=0.206 + zetarcx=0.223 zetare=0.0 zetacx=2.2 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 flsh=0.0 rth=1000.0 cth=1.0e-10 tnom=27.0 dt=0.0 ******************************************************************************** * Internal transistor (with Itun at peripheral node): Isothermal Simulation and Temperature dependence ******************************************************************************** .model hicumL2V2p2_i_tnp npn level=8 + c10=3.76E-32 qp0=2.78e-14 ich=2.09e-2 hfe=1.0 hfc=1.0 hjei=1.0 + hjci=1.0 tr=0.0 ibeis=1.16E-20 mbei=1.015 ireis=1.16e-16 mrei=2.0 ibeps=0.0 + mbep=1.015 ireps=0.0 mrep=2.0 mcf=1.0 tbhrec=0.0 ibcis=1.16e-20 mbci=1.015 ibcxs=0.0 + mbcx=1.03 ibets=1.0e-20 abet=40.0 tunode=1.0 favl=1.186 qavl=11.1e-5 alfav=0.825e-4 + alqav=0.196e-3 rbi0=71.76 rbx=0.0 fgeo=0.73 fdqr0=0.2 fcrbi=0.0 flcomp=1 + fqi=1.0 re=0.0 rcx=0.0 itss=0.0 msf=1.05 iscs=0.0 msc=1.0 tsf=1.05 rsu=0.0 + csu=0.0 cjei0=8.11e-15 vdei=0.95 zei=0.5 ajei=1.8 cjep0=1.0e-20 vdep=1.05 + zep=0.4 ajep=2.4 cjci0=1.16e-15 vdci=0.8 zci=0.333 vptci=46 cjcx0=1.0e-20 + vdcx=0.7 zcx=0.333 vptcx=100 fbcpar=0.1526 fbepar=0.5 cjs0=0.0 vds=0.6 zs=0.447 + vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 tef0=1.8e-12 gtfe=1.4 thcs=30.0e-12 + ahc=0.75 fthc=0.6 rci0=127.8 vlim=0.7 vces=0.1 vpt=5 cbepar=0.0 cbcpar=0.0 + alqf=0.225 alit=0.45 flnqs=0.0 kf=1.43e-8 af=2.0 latb=0.0 latl=0.0 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 zetarbx=0.206 + zetarcx=0.223 zetare=0.0 zetacx=2.2 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 flsh=0.0 rth=1000.0 cth=1.0e-10 tnom=27.0 dt=0.0 ******************************************************************************** * Internal transistor (with Itun at internal node): Isothermal Simulation and Temperature dependence ******************************************************************************** .model hicumL2V2p2_i_tni npn level=8 + c10=3.76E-32 qp0=2.78e-14 ich=2.09e-2 hfe=1.0 hfc=1.0 hjei=1.0 + hjci=1.0 tr=0.0 ibeis=1.16E-20 mbei=1.015 ireis=1.16e-16 mrei=2.0 ibeps=0.0 + mbep=1.015 ireps=0.0 mrep=2.0 mcf=1.0 tbhrec=0.0 ibcis=1.16e-20 mbci=1.015 ibcxs=0.0 + mbcx=1.03 ibets=1.0e-20 abet=40.0 tunode=0.0 favl=1.186 qavl=11.1e-5 alfav=0.825e-4 + alqav=0.196e-3 rbi0=71.76 rbx=0.0 fgeo=0.73 fdqr0=0.2 fcrbi=0.0 flcomp=1 + fqi=1.0 re=0.0 rcx=0.0 itss=0.0 msf=1.05 iscs=0.0 msc=1.0 tsf=1.05 rsu=0.0 + csu=0.0 cjei0=8.11e-15 vdei=0.95 zei=0.5 ajei=1.8 cjep0=1.0e-20 vdep=1.05 + zep=0.4 ajep=2.4 cjci0=1.16e-15 vdci=0.8 zci=0.333 vptci=46 cjcx0=1.0e-20 + vdcx=0.7 zcx=0.333 vptcx=100 fbcpar=0.1526 fbepar=0.5 cjs0=0.0 vds=0.6 zs=0.447 + vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 tef0=1.8e-12 gtfe=1.4 thcs=30.0e-12 + ahc=0.75 fthc=0.6 rci0=127.8 vlim=0.7 vces=0.1 vpt=5 cbepar=0.0 cbcpar=0.0 + alqf=0.225 alit=0.45 flnqs=0.0 kf=1.43e-8 af=2.0 latb=0.0 latl=0.0 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 zetarbx=0.206 + zetarcx=0.223 zetare=0.0 zetacx=2.2 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 flsh=0.0 rth=1000.0 cth=1.0e-10 tnom=27.0 dt=0.0 ******************************************************************************** * Complete transistor: Isothermal Simulation and Temperature dependence ******************************************************************************** .model hicumL2V2p2_c npn level=8 + c10=3.76E-32 qp0=2.78e-14 ich=2.09e-2 hfe=1.0 hfc=1.0 hjei=1.0 + hjci=1.0 tr=0.0 ibeis=1.16E-20 mbei=1.015 ireis=1.16e-16 mrei=2.0 ibeps=3.72e-21 + mbep=1.015 ireps=1.0e-30 mrep=2.0 mcf=1.0 tbhrec=250.0 ibcis=1.16e-20 mbci=1.015 ibcxs=4.39e-20 + mbcx=1.03 ibets=1.0e-20 abet=40.0 tunode=1.0 favl=1.186 qavl=11.1e-5 alfav=0.825e-4 + alqav=0.196e-3 rbi0=71.76 rbx=8.83 fgeo=0.73 fdqr0=0.2 fcrbi=0.0 flcomp=1 + fqi=1.0 re=12.534 rcx=9.165 itss=0.0 msf=1.05 iscs=0.0 msc=1.0 tsf=1.05 rsu=0.0 + csu=0.0 cjei0=8.11e-15 vdei=0.95 zei=0.5 ajei=1.8 cjep0=2.07e-15 vdep=1.05 + zep=0.4 ajep=2.4 cjci0=1.16e-15 vdci=0.8 zci=0.333 vptci=46 cjcx0=5.4e-15 + vdcx=0.7 zcx=0.333 vptcx=100 fbcpar=0.1526 fbepar=0.5 cjs0=0.0 vds=0.6 zs=0.447 + vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 tef0=1.8e-12 gtfe=1.4 thcs=30.0e-12 + ahc=0.75 fthc=0.6 rci0=127.8 vlim=0.7 vces=0.1 vpt=5 cbepar=1.13e-15 cbcpar=2.97e-15 + alqf=0.225 alit=0.45 flnqs=0.0 kf=1.43e-8 af=2.0 latb=0.0 latl=0.0 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 zetarbx=0.206 + zetarcx=0.223 zetare=0.0 zetacx=2.2 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 flsh=0.0 rth=1000.0 cth=1.0e-10 tnom=27.0 dt=0.0 ******************************************************************************** * Complete transistor: Electrothermal Simulation to test self-heating ******************************************************************************** .model hicumL2V2p2_c_slh npn level=8 + c10=3.76E-32 qp0=2.78e-14 ich=2.09e-2 hfe=1.0 hfc=1.0 hjei=1.0 + hjci=1.0 tr=0.0 ibeis=1.16E-20 mbei=1.015 ireis=1.16e-16 mrei=2.0 ibeps=3.72e-21 + mbep=1.015 ireps=1.0e-30 mrep=2.0 mcf=1.0 tbhrec=250.0 ibcis=1.16e-20 mbci=1.015 ibcxs=4.39e-20 + mbcx=1.03 ibets=1.0e-20 abet=40.0 tunode=1.0 favl=1.186 qavl=11.1e-5 alfav=0.825e-4 + alqav=0.196e-3 rbi0=71.76 rbx=8.83 fgeo=0.73 fdqr0=0.2 fcrbi=0.0 flcomp=1 + fqi=1.0 re=12.534 rcx=9.165 itss=0.0 msf=1.05 iscs=0.0 msc=1.0 tsf=1.05 rsu=0.0 + csu=0.0 cjei0=8.11e-15 vdei=0.95 zei=0.5 ajei=1.8 cjep0=2.07e-15 vdep=1.05 + zep=0.4 ajep=2.4 cjci0=1.16e-15 vdci=0.8 zci=0.333 vptci=46 cjcx0=5.4e-15 + vdcx=0.7 zcx=0.333 vptcx=100 fbcpar=0.1526 fbepar=0.5 cjs0=0.0 vds=0.6 zs=0.447 + vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 tef0=1.8e-12 gtfe=1.4 thcs=30.0e-12 + ahc=0.75 fthc=0.6 rci0=127.8 vlim=0.7 vces=0.1 vpt=5 cbepar=1.13e-15 cbcpar=2.97e-15 + alqf=0.225 alit=0.45 flnqs=0.0 kf=1.43e-8 af=2.0 latb=0.0 latl=0.0 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 zetarbx=0.206 + zetarcx=0.223 zetare=0.0 zetacx=2.2 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 flsh=2.0 rth=1000.0 cth=1.0e-10 tnom=27.0 dt=0.0 ******************************************************************************** * Complete transistor: Isothermal Simulation with NQS Effect: future ******************************************************************************** .model hicumL2V2p2_c_nqs npn level=8 + c10=3.76E-32 qp0=2.78e-14 ich=2.09e-2 hfe=1.0 hfc=1.0 hjei=1.0 + hjci=1.0 tr=0.0 ibeis=1.16E-20 mbei=1.015 ireis=1.16e-16 mrei=2.0 ibeps=3.72e-21 + mbep=1.015 ireps=1.0e-30 mrep=2.0 mcf=1.0 tbhrec=250.0 ibcis=1.16e-20 mbci=1.015 ibcxs=4.39e-20 + mbcx=1.03 ibets=1.0e-20 abet=40.0 tunode=1.0 favl=1.186 qavl=11.1e-5 alfav=0.825e-4 + alqav=0.196e-3 rbi0=71.76 rbx=8.83 fgeo=0.73 fdqr0=0.2 fcrbi=0.0 flcomp=1 + fqi=1.0 re=12.534 rcx=9.165 itss=0.0 msf=1.05 iscs=0.0 msc=1.0 tsf=1.05 rsu=0.0 + csu=0.0 cjei0=8.11e-15 vdei=0.95 zei=0.5 ajei=1.8 cjep0=2.07e-15 vdep=1.05 + zep=0.4 ajep=2.4 cjci0=1.16e-15 vdci=0.8 zci=0.333 vptci=46 cjcx0=5.4e-15 + vdcx=0.7 zcx=0.333 vptcx=100 fbcpar=0.1526 fbepar=0.5 cjs0=0.0 vds=0.6 zs=0.447 + vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 tef0=1.8e-12 gtfe=1.4 thcs=30.0e-12 + ahc=0.75 fthc=0.6 rci0=127.8 vlim=0.7 vces=0.1 vpt=5 cbepar=1.13e-15 cbcpar=2.97e-15 + alqf=0.225 alit=0.45 flnqs=1.0 kf=1.43e-8 af=2.0 latb=0.0 latl=0.0 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 zetarbx=0.206 + zetarcx=0.223 zetare=0.0 zetacx=2.2 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 flsh=0.0 rth=1000.0 cth=1.0e-10 tnom=27.0 dt=0.0 ******************************************************************************** * Complete transistor: Isothermal Simulation to test collector current spreading ******************************************************************************** .model hicumL2V2p2_c_ccs npn level=8 + c10=3.76E-32 qp0=2.78e-14 ich=2.09e-2 hfe=1.0 hfc=1.0 hjei=1.0 + hjci=1.0 tr=0.0 ibeis=1.16E-20 mbei=1.015 ireis=1.16e-16 mrei=2.0 ibeps=3.72e-21 + mbep=1.015 ireps=1.0e-30 mrep=2.0 mcf=1.0 tbhrec=250.0 ibcis=1.16e-20 mbci=1.015 ibcxs=4.39e-20 + mbcx=1.03 ibets=1.0e-20 abet=40.0 tunode=1.0 favl=1.186 qavl=11.1e-5 alfav=0.825e-4 + alqav=0.196e-3 rbi0=71.76 rbx=8.83 fgeo=0.73 fdqr0=0.2 fcrbi=0.0 flcomp=1 + fqi=1.0 re=12.534 rcx=9.165 itss=0.0 msf=1.05 iscs=0.0 msc=1.0 tsf=1.05 rsu=0.0 + csu=0.0 cjei0=8.11e-15 vdei=0.95 zei=0.5 ajei=1.8 cjep0=2.07e-15 vdep=1.05 + zep=0.4 ajep=2.4 cjci0=1.16e-15 vdci=0.8 zci=0.333 vptci=46 cjcx0=5.4e-15 + vdcx=0.7 zcx=0.333 vptcx=100 fbcpar=0.1526 fbepar=0.5 cjs0=0.0 vds=0.6 zs=0.447 + vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 tef0=1.8e-12 gtfe=1.4 thcs=30.0e-12 + ahc=0.75 fthc=0.6 rci0=127.8 vlim=0.7 vces=0.1 vpt=5 cbepar=1.13e-15 cbcpar=2.97e-15 + alqf=0.225 alit=0.45 flnqs=0.0 kf=1.43e-8 af=2.0 latb=3.765 latl=0.342 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 zetarbx=0.206 + zetarcx=0.223 zetare=0.0 zetacx=2.2 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 flsh=0.0 rth=1000.0 cth=1.0e-10 tnom=27.0 dt=0.0 ******************************************************************************** * Complete transistor: Isothermal Simulation with substrate transistor ******************************************************************************** .model hicumL2V2p2_c_sbt npn level=8 + c10=3.76E-32 qp0=2.78e-14 ich=2.09e-2 hfe=1.0 hfc=1.0 hjei=1.0 + hjci=1.0 tr=0.0 ibeis=1.16E-20 mbei=1.015 ireis=1.16e-16 mrei=2.0 ibeps=3.72e-21 + mbep=1.015 ireps=1.0e-30 mrep=2.0 mcf=1.0 tbhrec=250.0 ibcis=1.16e-20 mbci=1.015 ibcxs=4.39e-20 + mbcx=1.03 ibets=1.0e-20 abet=40.0 tunode=1.0 favl=1.186 qavl=11.1e-5 alfav=0.825e-4 + alqav=0.196e-3 rbi0=71.76 rbx=8.83 fgeo=0.73 fdqr0=0.2 fcrbi=0.0 flcomp=1 + fqi=1.0 re=12.534 rcx=9.165 itss=1.0e-16 msf=1.05 iscs=1.0e-17 msc=1.0 tsf=1.05 rsu=0.0 + csu=0.0 cjei0=8.11e-15 vdei=0.95 zei=0.5 ajei=1.8 cjep0=2.07e-15 vdep=1.05 + zep=0.4 ajep=2.4 cjci0=1.16e-15 vdci=0.8 zci=0.333 vptci=46 cjcx0=5.4e-15 + vdcx=0.7 zcx=0.333 vptcx=100 fbcpar=0.1526 fbepar=0.5 cjs0=3.64e-14 vds=0.6 zs=0.447 + vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 tef0=1.8e-12 gtfe=1.4 thcs=30.0e-12 + ahc=0.75 fthc=0.6 rci0=127.8 vlim=0.7 vces=0.1 vpt=5 cbepar=1.13e-15 cbcpar=2.97e-15 + alqf=0.225 alit=0.45 flnqs=0.0 kf=1.43e-8 af=2.0 latb=0.0 latl=0.0 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 zetarbx=0.206 + zetarcx=0.223 zetare=0.0 zetacx=2.2 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 flsh=1.0 rth=1000.0 cth=1.0e-10 tnom=27.0 dt=0.0 ******************************************************************************** * Complete transistor: Isothermal Simulation with substrate network ******************************************************************************** .model hicumL2V2p2_c_sbn npn level=8 + c10=3.76E-32 qp0=2.78e-14 ich=2.09e-2 hfe=1.0 hfc=1.0 hjei=1.0 + hjci=1.0 tr=0.0 ibeis=1.16E-20 mbei=1.015 ireis=1.16e-16 mrei=2.0 ibeps=3.72e-21 + mbep=1.015 ireps=1.0e-30 mrep=2.0 mcf=1.0 tbhrec=250.0 ibcis=1.16e-20 mbci=1.015 ibcxs=4.39e-20 + mbcx=1.03 ibets=1.0e-20 abet=40.0 tunode=1.0 favl=1.186 qavl=11.1e-5 alfav=0.825e-4 + alqav=0.196e-3 rbi0=71.76 rbx=8.83 fgeo=0.73 fdqr0=0.2 fcrbi=0.0 flcomp=1 + fqi=1.0 re=12.534 rcx=9.165 itss=1.0e-16 msf=1.05 iscs=1.0e-17 msc=1.0 tsf=1.05 rsu=10.0 + csu=2.1e-15 cjei0=8.11e-15 vdei=0.95 zei=0.5 ajei=1.8 cjep0=2.07e-15 vdep=1.05 + zep=0.4 ajep=2.4 cjci0=1.16e-15 vdci=0.8 zci=0.333 vptci=46 cjcx0=5.4e-15 + vdcx=0.7 zcx=0.333 vptcx=100 fbcpar=0.1526 fbepar=0.5 cjs0=3.64e-14 vds=0.6 zs=0.447 + vpts=100 t0=4.75e-12 dt0h=2.1e-12 tbvl=4.0e-12 tef0=1.8e-12 gtfe=1.4 thcs=30.0e-12 + ahc=0.75 fthc=0.6 rci0=127.8 vlim=0.7 vces=0.1 vpt=5 cbepar=1.13e-15 cbcpar=2.97e-15 + alqf=0.225 alit=0.45 flnqs=0.0 kf=1.43e-8 af=2.0 latb=0.0 latl=0.0 vgb=1.17 + alt0=0.0 kt0=0.0 zetaci=1.6 alvs=1.0e-3 alces=0.4e-3 zetarbi=0.588 zetarbx=0.206 + zetarcx=0.223 zetare=0.0 zetacx=2.2 vge=1.1386 vgc=1.1143 vgs=1.15 f1vg=-1.02377e-4 + f2vg=4.3215e-4 zetact=3.5 zetabet=4.0 flsh=0.0 rth=1000.0 cth=1.0e-10 tnom=27.0 dt=0.0 ******************************************************************************** * Complete test transistor: default ******************************************************************************** .model hicumL2V2p2_default npn level=8 ******************************************************************************** tmpk8ny_4pz/examples/pss/0000755000175000017500000000000013546075722015603 5ustar carstencarstentmpk8ny_4pz/examples/pss/hartley_osc_pss.cir0000644000175000017500000000075513546075722021512 0ustar carstencarstenHartley's Oscillator Circuit * Hartley is an harmonic oscillator (LC based) which use * an inductive partition of resonator to feed the single * active device. Output is taken on node 2. * Prediceted frequency is about 121.176 Hz. * * PLOT V(3) * Models: .model qnl npn(level=1 bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf cjc=2pf va=50) vcc 1 0 5 pwl 0 0 1e-5 5 r1 1 2 0.2k q1 2 3 0 qnl c1 3 4 633n l1 3 0 1.5 l2 0 4 500m r2 4 2 100 *.tran 300n 50m .pss 50 200e-3 2 1024 11 10 5e-3 uic tmpk8ny_4pz/examples/pss/ring_osc_pss.cir0000644000175000017500000000151213546075722020771 0ustar carstencarstenRing CMOS Oscillator * Oscillation is taken on node "bout". * Predicted frequency is 3.8e+09 Hz. * * PLOT bout * Supply vdd vdd gnd 1.2 pwl 0 1.2 1e-9 1.2 rdd vdd vdd_ana 70m rgnd gnd gnd_ana 70m * Inverter mp1 inv1 inv3 vdd_ana vdd_ana pch w=10u l=0.18u mn1 inv1 inv3 gnd_ana gnd_ana nch w=10u l=0.18u mp2 inv2 inv1 vdd_ana vdd_ana pch w=10u l=0.18u mn2 inv2 inv1 gnd_ana gnd_ana nch w=10u l=0.18u mp3 inv3 inv2 vdd_ana vdd_ana pch w=10u l=0.18u mn3 inv3 inv2 gnd_ana gnd_ana nch w=10u l=0.18u * Buffer out mp4 bout inv3 vdd_ana vdd_ana pch w=10u l=0.18u mn4 bout inv3 gnd_ana gnd_ana nch w=10u l=0.18u .model nch nmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) .model pch pmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) *.tran 0.005n 100n *.plot tran v(4) .pss 624e6 500n 1 1024 10 5 5e-3 uic tmpk8ny_4pz/examples/pss/colpitt_osc_pss.cir0000644000175000017500000000076113546075722021515 0ustar carstencarstenColpitt's Oscillator Circuit * Colpitt is an harmonic oscillator (LC based) which use * a capacitive partition of resonator to feed the single * active device. * Predicted frequency is about 3.30435e+06 Hz. * Models: .model qnl npn(level=1 bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf cjc=2pf va=50) r1 1 0 1 q1 2 1 3 qnl vcc 4 0 5 rl 4 2 750 c1 2 3 500p c2 4 3 4500p l1 4 2 5uH re 3 6 4.65k vee 6 0 dc -10 pwl 0 0 1e-9 -10 *.tran 30n 12u .pss 3.1e6 500e-6 3 256 10 50 5e-3 tmpk8ny_4pz/examples/pss/vdp_osc_pss.cir0000644000175000017500000000060213546075722020622 0ustar carstencarstenVan Der Pol Oscillator * Prediceted frequency is about 4.54167e+06 Hz. * Third harmonic is high as the first one Ba gib 0 I=-1e-2*v(gib,0)+1e-2*v(gib,0)^3 * Q is about 10 La gib 0 1.2e-6 Ra gib 0 158.113 Ca gib 0 1e-9 ic=0.5 *La gib 0 1e-9 *Ra gib 0 474.6 *Ca gib 0 1e-9 ic=0.5 * Ghost node... Test for my PSS! Rb bad 0 1k *.tran 1e-9 150e-6 uic .pss 0.8e6 130e-6 1 50 10 50 5e-3 uic tmpk8ny_4pz/examples/pss/vackar_osc_pss.cir0000644000175000017500000000071713546075722021307 0ustar carstencarstenVackar's Oscillator Circuit * Vackar is a derivation of Colpitt's oscillator (LC based). * Oscillation is taken on node 4. * Predicted frequency is 1.91803e+06Hz. * Models: .model qnl npn(level=1 bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf cjc=2pf va=50) vcc 1 0 5 pwl 0 10 1e-9 5 lrfc 1 2 100u cdec 2 0 7n q1 3 2 0 qnl rb 3 0 4700 c1 3 4 100p c2 3 0 600p c0 4 0 1n l1 4 1 6.2u *.tran 30n 12u *.plot tran v(4) .pss 1e6 10e-6 4 1024 10 50 5e-3 uic tmpk8ny_4pz/examples/pss/compl_cross_quad_osc_pss.cir0000644000175000017500000000165313546075722023375 0ustar carstencarstenComplimentary Cross Quad CMOS Oscillator * Predicted frequency is 5.61224e+08 Hz. * * PLOT i1 * Supply vdd vdd gnd 1.2 pwl 0 1.2 1e-9 1.2 rdd vdd vdd_ana 70m rgnd gnd gnd_ana 70m * Cross quad mpsx v_plus v_minus vdd_ana vdd_ana pch w=10u l=0.1u mnsx v_plus v_minus gnd_ana gnd_ana nch w=10u l=0.1u mpdx v_minus v_plus vdd_ana vdd_ana pch w=10u l=0.1u mndx v_minus v_plus gnd_ana gnd_ana nch w=10u l=0.1u * Lumped elements model of real inductor ls v_plus i1 19.462n ic=0.06 rs i1 v_minus 7.789 cs v_plus v_minus 443f coxs v_plus is 2.178p coxd v_minus id 2.178p rsis is gnd_ana 308 rsid id gnd_ana 308 csis is gnd_ana 51f csid id gnd_ana 51f * Parallel capacitor to determine leading resonance cp v_plus v_minus 3.4p .model nch nmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) .model pch pmos ( version=4.7 level=54 lmin=0.1u lmax=20u wmin=0.1u wmax=10u ) *.tran 0.05n 1u uic .pss 500e6 1u 1 1024 10 10 5e-3 uic tmpk8ny_4pz/examples/memristor/0000755000175000017500000000000013546075722017017 5ustar carstencarstentmpk8ny_4pz/examples/memristor/memristor_x.sp0000644000175000017500000000563613546075722021745 0ustar carstencarstenMemristor with threshold as XSPICE code model * Y. V. Pershin, M. Di Ventra: "SPICE model of memristive devices with threshold", * arXiv:1204.2600v1 [physics.comp-ph] 12 Apr 2012, * http://arxiv.org/pdf/1204.2600.pdf * XSPICE code model, parameter selection and plotting by * Holger Vogt 2012 * ac and op (dc) simulation just use start resistance rinit! .param stime=10n .param vmax = 4.2 * send parameters to the .control section .csparam stime={stime} .csparam vmax={vmax} *Xmem 1 0 memristor * triangular sweep (you have to adapt the parameters to 'alter' command in the .control section) *V1 1 0 DC 0 PWL(0 0 '0.25*stime' 'vmax' '0.5*stime' 0 '0.75*stime' '-vmax' 'stime' 0) * sinusoidal sweep for transient, dc for op, ac V1 0 1 DC 0.1 ac 1 sin(0 'vmax' '1/stime') Rl 1 11 1k * memristor model with limits and threshold * "artificial" parameters alpha, beta, and vt. beta and vt adapted to basic programming frequency * just to obtain nice results! * You have to care for the physics and set real values! amen 11 2 memr .model memr memristor (rmin=1k rmax=10k rinit=7k alpha=0 beta='20e3/stime' vt=1.6) vgnd 2 0 dc 0 * This is the original subcircuit model .subckt memristor plus minus PARAMS: Ron=1K Roff=10K Rinit=7.0K alpha=0 beta=20e3/stime Vt=1.6 Bx 0 x I='((f1(V(plus)-V(minus))> 0) && (V(x) < Roff)) ? {f1(V(plus)-V(minus))}: ((((f1(V(plus)-V(minus)) < 0) && (V(x)>Ron)) ? {f1(V(plus)-V(minus))}: 0)) ' Vx x x1 dc 0 Cx x1 0 1 IC={Rinit} Rmem plus minus r={V(x)} .func f1(y)={beta*y+0.5*(alpha-beta)*(abs(y+Vt)-abs(y-Vt))} .ends * transient simulation same programming voltage but rising frequencies .control *** first simulation *** op print all ac lin 101 1 100k plot v(11) * approx. 100 simulation points let deltime = stime/100 tran $&deltime $&stime uic * plot i(v1) vs v(1) *** you may just stop here *** * raise the frequency let newfreq = 1.2/stime let newstime = stime/1.2 let deltime = newstime/100 alter @V1[sin] [ 0 $&vmax $&newfreq ] tran $&deltime $&newstime uic * raise the frequency even more let newfreq = 1.4/stime let newstime = stime/1.4 let deltime = newstime/100 alter @V1[sin] [ 0 $&vmax $&newfreq ] tran $&deltime $&newstime uic * the resistor currents plot tran1.alli tran2.alli alli title 'Memristor with threshold: currents' * calculate resistance (avoid dividing by zero) let res = v(1)/(I(v1) + 1e-16) let res1 = tran1.v(1)/(tran1.I(v1) + 1e-16) let res2 = tran2.v(1)/(tran2.I(v1) + 1e-16) * resistance versus time plot settype impedance res res1 res2 plot res vs time res1 vs tran1.time res2 vs tran2.time title 'Memristor with threshold: resistance' * resistance versus voltage (change occurs only above threshold!) plot res vs v(1) res1 vs tran1.v(1) res2 vs tran2.v(1) title 'Memristor with threshold: resistance' * current through resistor for all plots versus voltage plot i(v1) vs v(1) tran1.i(v1) vs tran1.v(1) tran2.i(v1) vs tran2.v(1) title 'Memristor with threshold: external current loops' .endc .end tmpk8ny_4pz/examples/memristor/memristor.sp0000644000175000017500000000472013546075722021407 0ustar carstencarstenMemristor with threshold * Y. V. Pershin, M. Di Ventra: "SPICE model of memristive devices with threshold", * arXiv:1204.2600v1 [physics.comp-ph] 12 Apr 2012, * http://arxiv.org/pdf/1204.2600.pdf * Parameter selection and plotting by * Holger Vogt 2012 .param stime=10n .param vmax = 3 * send parameters to the .control section .csparam stime={stime} .csparam vmax={vmax} Xmem 1 0 memristor * triangular sweep (you have to adapt the parameters to 'alter' command in the .control section) *V1 1 0 DC 0 PWL(0 0 '0.25*stime' 'vmax' '0.5*stime' 0 '0.75*stime' '-vmax' 'stime' 0) * sinusoidal sweep V1 0 1 DC 0 sin(0 'vmax' '1/stime') * memristor model with limits and threshold * "artificial" parameters alpha, beta, and vt. beta and vt adapted to basic programming frequency * just to obtain nice results! * You have to care for the physics and set real values! .subckt memristor plus minus PARAMS: Ron=1K Roff=10K Rinit=7.0K alpha=0 beta=20e3/stime Vt=1.6 Bx 0 x I='((f1(V(plus)-V(minus))> 0) && (V(x) < Roff)) ? {f1(V(plus)-V(minus))}: ((((f1(V(plus)-V(minus)) < 0) && (V(x)>Ron)) ? {f1(V(plus)-V(minus))}: 0)) ' Vx x x1 dc 0 Cx x1 0 1 IC={Rinit} Rmem plus minus r={V(x)} .func f1(y)={beta*y+0.5*(alpha-beta)*(abs(y+Vt)-abs(y-Vt))} .ends * transient simulation same programming voltage but rising frequencies .control *** first simulation *** * approx. 100 simulation points let deltime = stime/100 tran $&deltime $&stime uic * plot i(v1) vs v(1) *** you may just stop here *** * raise the frequency let newfreq = 1.1/stime let newstime = stime/1.1 let deltime = newstime/100 alter @V1[sin] [ 0 $&vmax $&newfreq ] tran $&deltime $&newstime uic * raise the frequency even more let newfreq = 1.4/stime let newstime = stime/1.4 let deltime = newstime/100 alter @V1[sin] [ 0 $&vmax $&newfreq ] tran $&deltime $&newstime uic * the 'programming' currents plot tran1.alli tran2.alli alli title 'Memristor with threshold: Internal Programming currents' * resistance versus time plot settype impedance xmem.x1 tran1.xmem.x1 tran2.xmem.x1 plot xmem.x1 tran1.xmem.x1 tran2.xmem.x1 title 'Memristor with threshold: resistance' * resistance versus voltage (change occurs only above threshold!) plot xmem.x1 vs v(1) tran1.xmem.x1 vs tran1.v(1) tran2.xmem.x1 vs tran2.v(1) title 'Memristor with threshold: resistance' * current through resistor for all plots versus voltage plot i(v1) vs v(1) tran1.i(v1) vs tran1.v(1) tran2.i(v1) vs tran2.v(1) title 'Memristor with threshold: external current loops' .endc .end tmpk8ny_4pz/examples/snapshot/0000755000175000017500000000000013546075722016635 5ustar carstencarstentmpk8ny_4pz/examples/snapshot/adder_mos_circ.cir0000644000175000017500000000336113546075722022274 0ustar carstencarsten* ADDER - 4 BIT ALL-NAND-GATE BINARY ADDER *** SUBCIRCUIT DEFINITIONS .SUBCKT NAND in1 in2 out VDD * NODES: INPUT(2), OUTPUT, VCC M1 out in2 Vdd Vdd p1 W=3u L=1u M2 net.1 in2 0 0 n1 W=3u L=2u M3 out in1 Vdd Vdd p1 W=3u L=1u M4 out in1 net.1 0 n1 W=3u L=2u .ENDS NAND .SUBCKT ONEBIT 1 2 3 4 5 6 * NODES: INPUT(2), CARRY-IN, OUTPUT, CARRY-OUT, VCC X1 1 2 7 6 NAND X2 1 7 8 6 NAND X3 2 7 9 6 NAND X4 8 9 10 6 NAND X5 3 10 11 6 NAND X6 3 11 12 6 NAND X7 10 11 13 6 NAND X8 12 13 4 6 NAND X9 11 7 5 6 NAND .ENDS ONEBIT .SUBCKT TWOBIT 1 2 3 4 5 6 7 8 9 * NODES: INPUT - BIT0(2) / BIT1(2), OUTPUT - BIT0 / BIT1, * CARRY-IN, CARRY-OUT, VCC X1 1 2 7 5 10 9 ONEBIT X2 3 4 10 6 8 9 ONEBIT .ENDS TWOBIT .SUBCKT FOURBIT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 * NODES: INPUT - BIT0(2) / BIT1(2) / BIT2(2) / BIT3(2), * OUTPUT - BIT0 / BIT1 / BIT2 / BIT3, CARRY-IN, CARRY-OUT, VCC X1 1 2 3 4 9 10 13 16 15 TWOBIT X2 5 6 7 8 11 12 16 14 15 TWOBIT .ENDS FOURBIT *** DEFINE NOMINAL CIRCUIT VCC 99 0 DC 3.3V VIN1A 1 0 PULSE(0 3 0 10NS 10NS 10NS 50NS) VIN1B 2 0 PULSE(0 3 0 10NS 10NS 20NS 100NS) VIN2A 3 0 PULSE(0 3 0 10NS 10NS 40NS 200NS) VIN2B 4 0 PULSE(0 3 0 10NS 10NS 80NS 400NS) VIN3A 5 0 PULSE(0 3 0 10NS 10NS 160NS 800NS) VIN3B 6 0 PULSE(0 3 0 10NS 10NS 320NS 1600NS) VIN4A 7 0 PULSE(0 3 0 10NS 10NS 640NS 3200NS) VIN4B 8 0 PULSE(0 3 0 10NS 10NS 1280NS 6400NS) X1 1 2 3 4 5 6 7 8 9 10 11 12 0 13 99 FOURBIT *RBIT0 9 0 100K *RBIT1 10 0 100K *RBIT2 11 0 100K *RBIT3 12 0 100K *RCOUT 13 0 100K .TRAN 1NS 1000NS .model n1 nmos level=8 version=3.3.0 .model p1 pmos level=8 version=3.3.0 .END tmpk8ny_4pz/examples/snapshot/adder_snload.script0000644000175000017500000000065213546075722022505 0ustar carstencarsten* SCRIPT: ADDER - 4 BIT BINARY * script to reload circuit and continue the simulation * begin with editing the file location * to be started with 'ngspice adder_snload.script' .control * cd to where all files are located cd D:\Spice_general\ngspice\examples\snapshot * load circuit and snpashot file snload adder_mos_circ.cir adder500.snap * continue simulation resume * plot some node voltages plot v(10) v(11) v(12) .endc tmpk8ny_4pz/examples/snapshot/adder_mos.cir0000644000175000017500000000107113546075722021270 0ustar carstencarsten Example: snsave * load a circuit (including transistor models and .tran command) * starts transient simulation until stop point * store intermediate data to file * begin with editing the file location * to be run with 'ngspice adder_mos.cir' .include adder_mos_circ.cir .control *cd to where all files are located cd D:\Spice_general\ngspice\examples\snapshot set noaskquit unset ngdebug set noinit save vcc#branch 10 iplot v(10) *interrupt condition for the simulation stop when time > 500n * simulate run * store snapshot to file snsave adder500.snap .endc .END tmpk8ny_4pz/examples/digital/0000755000175000017500000000000013546075722016413 5ustar carstencarstentmpk8ny_4pz/examples/digital/adder_Xspice.cir0000644000175000017500000000424513546075722021511 0ustar carstencarsten ADDER - 4 BIT ALL-NAND-GATE BINARY ADDER *** SUBCIRCUIT DEFINITIONS .SUBCKT NAND in1 in2 out * NODES: INPUT(2), OUTPUT a6 [in1 in2] out nand1 .ENDS NAND .model nand1 d_nand(rise_delay = 0.7e-9 fall_delay = 0.7e-9 + input_load = 0.5e-12) .SUBCKT ONEBIT 1 2 3 4 5 * NODES: INPUT(2), CARRY-IN, OUTPUT, CARRY-OUT X1 1 2 7 NAND X2 1 7 8 NAND X3 2 7 9 NAND X4 8 9 10 NAND X5 3 10 11 NAND X6 3 11 12 NAND X7 10 11 13 NAND X8 12 13 4 NAND X9 11 7 5 NAND .ENDS ONEBIT .SUBCKT TWOBIT 1 2 3 4 5 6 7 8 * NODES: INPUT - BIT0(2) / BIT1(2), OUTPUT - BIT0 / BIT1, * CARRY-IN, CARRY-OUT X1 1 2 7 5 10 ONEBIT X2 3 4 10 6 8 ONEBIT .ENDS TWOBIT .SUBCKT FOURBIT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 * NODES: INPUT - BIT0(2) / BIT1(2) / BIT2(2) / BIT3(2), * OUTPUT - BIT0 / BIT1 / BIT2 / BIT3, CARRY-IN, CARRY-OUT X1 1 2 3 4 9 10 13 16 TWOBIT X2 5 6 7 8 11 12 16 14 TWOBIT .ENDS FOURBIT *** ALL INPUTS (analog) VIN1A a1 0 DC 0 PULSE(0 3 0 0.5NS 0.5NS 20NS 50NS) VIN1B a2 0 DC 0 PULSE(0 3 0 0.5NS 0.5NS 30NS 100NS) VIN2A a3 0 DC 0 PULSE(0 3 0 0.5NS 0.5NS 50NS 200NS) VIN2B a4 0 DC 0 PULSE(0 3 0 0.5NS 0.5NS 90NS 400NS) VIN3A a5 0 DC 0 PULSE(0 3 0 0.5NS 0.5NS 170NS 800NS) VIN3B a6 0 DC 0 PULSE(0 3 0 0.5NS 0.5NS 330NS 1600NS) VIN4A a7 0 DC 0 PULSE(0 3 0 0.5NS 0.5NS 650NS 3200NS) VIN4B a8 0 DC 0 PULSE(0 3 0 0.5NS 0.5NS 1290NS 6400NS) *** analog to digital abridge2 [a1 a2 a3 a4 a5 a6 a7 a8] [1 2 3 4 5 6 7 8] adc_buff .model adc_buff adc_bridge(in_low = 1 in_high = 2) *** digital 0 V0 a0 0 0 abridge0 [a0] [d0] adc_buff *** DEFINE NOMINAL CIRCUIT X1 1 2 3 4 5 6 7 8 s0 s1 s2 s3 d0 c3 FOURBIT *.TRAN 500p 6400NS * save inputs *.save V(a1) V(a2) V(a3) V(a4) V(a5) V(a6) V(a7) V(a8) *.save v(1) .control *save v(1) TRAN 500p 6400NS rusage display edisplay * save data to input directory cd $inputdir eprvcd 1 2 3 4 5 6 7 8 s0 s1 s2 s3 c3 > adder_x.vcd * plotting the vcd file (e.g. with GTKWave) * For Windows: returns control to ngspice shell start gtkwave adder_x.vcd --script nggtk.tcl * Others *shell gtkwave adder_x.vcd --script nggtk.tcl & .endc .END tmpk8ny_4pz/examples/digital/adder-comparison.txt0000644000175000017500000000104613546075722022404 0ustar carstencarstenCompare four different 4-bit full adders, made of NAND gates Simulating for 6400ns adder_bib The old spice bipolar NAND gate full adder Simulation time 14.0s adder_mos A MOS NAND gate inverter, using BSIM3 and OpenMP Simulation time 10.5s adder_behav NAND gates made with XSPICE digital devices, but each has an analog interface, the interconnect is analog, gate library is 74HCng_short_2.lib Simulation time 1.9s adder_Xspice Fully digital, event node based NAND gates digital plotting into vcd file, display with gtkwave Simulation time 0.27s tmpk8ny_4pz/examples/digital/nggtk.tcl0000644000175000017500000000046113546075722020232 0ustar carstencarsten# tcl script for gtkwave: show vcd file data created by ngspice set nfacs [ gtkwave::getNumFacs ] for {set i 0} {$i < $nfacs } {incr i} { set facname [ gtkwave::getFacName $i ] set num_added [ gtkwave::addSignalsFromList $facname ] } gtkwave::/Edit/UnHighlight_All gtkwave::/Time/Zoom/Zoom_Full tmpk8ny_4pz/examples/digital/adder_behav.cir0000644000175000017500000000374213546075722021344 0ustar carstencarsten ADDER - 4 BIT ALL-74HC00-GATE BINARY ADDER * behavioral gate description *** SUBCIRCUIT DEFINITIONS .include 74HCng_short_2.lib .param vcc=3 tripdt=6n .SUBCKT ONEBIT 1 2 3 4 5 6 * NODES: INPUT(2), CARRY-IN, OUTPUT, CARRY-OUT, VCC X1 1 2 7 6 0 74HC00 X2 1 7 8 6 0 74HC00 X3 2 7 9 6 0 74HC00 X4 8 9 10 6 0 74HC00 X5 3 10 11 6 0 74HC00 X6 3 11 12 6 0 74HC00 X7 10 11 13 6 0 74HC00 X8 12 13 4 6 0 74HC00 X9 11 7 5 6 0 74HC00 .ENDS ONEBIT .SUBCKT TWOBIT 1 2 3 4 5 6 7 8 9 * NODES: INPUT - BIT0(2) / BIT1(2), OUTPUT - BIT0 / BIT1, * CARRY-IN, CARRY-OUT, VCC X1 1 2 7 5 10 9 ONEBIT X2 3 4 10 6 8 9 ONEBIT .ENDS TWOBIT .SUBCKT FOURBIT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 * NODES: INPUT - BIT0(2) / BIT1(2) / BIT2(2) / BIT3(2), * OUTPUT - BIT0 / BIT1 / BIT2 / BIT3, CARRY-IN, CARRY-OUT, VCC X1 1 2 3 4 9 10 13 16 15 TWOBIT X2 5 6 7 8 11 12 16 14 15 TWOBIT .ENDS FOURBIT *** POWER VCC 99 0 DC 3.3V *** ALL INPUTS VIN1A 1 0 DC 0 PULSE(0 3 0 5NS 5NS 20NS 50NS) VIN1B 2 0 DC 0 PULSE(0 3 0 5NS 5NS 30NS 100NS) VIN2A 3 0 DC 0 PULSE(0 3 0 5NS 5NS 50NS 200NS) VIN2B 4 0 DC 0 PULSE(0 3 0 5NS 5NS 90NS 400NS) VIN3A 5 0 DC 0 PULSE(0 3 0 5NS 5NS 170NS 800NS) VIN3B 6 0 DC 0 PULSE(0 3 0 5NS 5NS 330NS 1600NS) VIN4A 7 0 DC 0 PULSE(0 3 0 5NS 5NS 650NS 3200NS) VIN4B 8 0 DC 0 PULSE(0 3 0 5NS 5NS 1290NS 6400NS) *** DEFINE NOMINAL CIRCUIT X1 1 2 3 4 5 6 7 8 9 10 11 12 0 13 99 FOURBIT .option noinit acct .TRAN 500p 6400NS * save inputs .save V(1) V(2) V(3) V(4) V(5) V(6) V(7) V(8) .control pre_set strict_errorhandling unset ngdebug *save outputs and specials save x1.x1.x1.7 V(9) V(10) V(11) V(12) V(13) run rusage * plot the inputs, use offset to plot on top of each other plot v(1) v(2)+4 v(3)+8 v(4)+12 v(5)+16 v(6)+20 v(7)+24 v(8)+28 * plot the outputs, use offset to plot on top of each other plot v(9) v(10)+4 v(11)+8 v(12)+12 v(13)+16 .endc .END tmpk8ny_4pz/examples/digital/adder_bip.cir0000644000175000017500000000455013546075722021027 0ustar carstencarsten ADDER - 4 BIT ALL-NAND-GATE BINARY ADDER *** SUBCIRCUIT DEFINITIONS .SUBCKT NAND 1 2 3 4 * NODES: INPUT(2), OUTPUT, VCC Q1 9 5 1 QMOD D1CLAMP 0 1 DMOD Q2 9 5 2 QMOD D2CLAMP 0 2 DMOD RB 4 5 4K R1 4 6 1.6K Q3 6 9 8 QMOD R2 8 0 1K RC 4 7 130 Q4 7 6 10 QMOD DVBEDROP 10 3 DMOD Q5 3 8 0 QMOD .ENDS NAND .SUBCKT ONEBIT 1 2 3 4 5 6 * NODES: INPUT(2), CARRY-IN, OUTPUT, CARRY-OUT, VCC X1 1 2 7 6 NAND X2 1 7 8 6 NAND X3 2 7 9 6 NAND X4 8 9 10 6 NAND X5 3 10 11 6 NAND X6 3 11 12 6 NAND X7 10 11 13 6 NAND X8 12 13 4 6 NAND X9 11 7 5 6 NAND .ENDS ONEBIT .SUBCKT TWOBIT 1 2 3 4 5 6 7 8 9 * NODES: INPUT - BIT0(2) / BIT1(2), OUTPUT - BIT0 / BIT1, * CARRY-IN, CARRY-OUT, VCC X1 1 2 7 5 10 9 ONEBIT X2 3 4 10 6 8 9 ONEBIT .ENDS TWOBIT .SUBCKT FOURBIT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 * NODES: INPUT - BIT0(2) / BIT1(2) / BIT2(2) / BIT3(2), * OUTPUT - BIT0 / BIT1 / BIT2 / BIT3, CARRY-IN, CARRY-OUT, VCC X1 1 2 3 4 9 10 13 16 15 TWOBIT X2 5 6 7 8 11 12 16 14 15 TWOBIT .ENDS FOURBIT *** DEFINE NOMINAL CIRCUIT .MODEL DMOD D .MODEL QMOD NPN(BF=75 RB=100 CJE=1PF CJC=3PF) VCC 99 0 DC 5V VIN1A 1 0 PULSE(0 3 0 10NS 10NS 10NS 50NS) VIN1B 2 0 PULSE(0 3 0 10NS 10NS 20NS 100NS) VIN2A 3 0 PULSE(0 3 0 10NS 10NS 40NS 200NS) VIN2B 4 0 PULSE(0 3 0 10NS 10NS 80NS 400NS) VIN3A 5 0 PULSE(0 3 0 10NS 10NS 160NS 800NS) VIN3B 6 0 PULSE(0 3 0 10NS 10NS 320NS 1600NS) VIN4A 7 0 PULSE(0 3 0 10NS 10NS 640NS 3200NS) VIN4B 8 0 PULSE(0 3 0 10NS 10NS 1280NS 6400NS) X1 1 2 3 4 5 6 7 8 9 10 11 12 0 13 99 FOURBIT RBIT0 9 0 1K RBIT1 10 0 1K RBIT2 11 0 1K RBIT3 12 0 1K RCOUT 13 0 1K *** (FOR THOSE WITH MONEY (AND MEMORY) TO BURN) .option noinit acct .TRAN 1NS 6400NS *.save VIN1A VIN1B VIN2A VIN2B VIN3A VIN3B VIN4A VIN4B * save inputs .save V(1) V(2) V(3) V(4) V(5) V(6) V(7) V(8) * save outputs .save V(9) V(10) V(11) V(12) V(13) *.options savecurrents *.save alli .control run rusage * plot the inputs, use offset to plot on top of each other plot v(1) v(2)+4 v(3)+8 v(4)+12 v(5)+16 v(6)+20 v(7)+24 v(8)+28 * plot the outputs, use offset to plot on top of each other plot v(9) v(10)+4 v(11)+8 v(12)+12 v(13)+16 .endc .END tmpk8ny_4pz/examples/digital/74HCng_short_2.lib0000644000175000017500000001533713546075722021546 0ustar carstencarsten* 74hcng.lib * * derived from 74HCxxx Model libraray for LTSPICE from www.linear.com/software * * Revision 1.01 06/25/2018 test devices NAND, NOR, and XOR as XSPICE subcircuit for ngspice * * All parts have been divided into three sections. * * >--| A-D-Converter (threshold VCC1/2) |----| Event LOGIC Axx (delay) |----| OUTPUT LEVEL D-A (rise and fall times) |--> * * Delays are given for Vcc = 2V/4.5V/6V (HC) from the * Philips data sheets. http://www.philipslogic.com * * Delays are given for Vcc = 2V/4.5V/6V . * Used delay: Td = (Tpd-Tr/2)*(4.5-0.5)/(Vcc-0.5) * The gate delay has to be set to tpd minus 3ns for the input filter * and another minus 3ns for Trise/2 * td1 = tpd - 3ns - 3ns * .param vcc=5 tripdt=6n *********************************************************************************** * The 74HCXX gates * * 2-input NAND gate * vcc 2 /4.5/5 /6 * tpd 25n/9n/7n/7n * tr 19n/7n / /6n .SUBCKT 74HC00 in1 in2 out NVCC NVGND vcc1={vcc} tripdt1={tripdt} .param td1={1e-9*(9-3-3)*4.0/(vcc1-0.5)} .param Rout={60*4.0/(vcc1-0.5)} $ standard output driver *Cin1 in1 0 3.5p *Cin2 in2 0 3.5p abridge2 [in1 in2] [din1 din2] adc_buff .model adc_buff adc_bridge(in_low = {vcc1/2.0} in_high = {vcc1/2.0}) a6 [din1 din2] dout nand1 .model nand1 d_nand(rise_delay = {td1} fall_delay = {td1} + input_load = 0.5e-12) abridge1 [dout] [out20] dac1 .model dac1 dac_bridge(out_low = 0.0 out_high = {vcc1} out_undef = {vcc1/2.0} + input_load = 5.0e-12 t_rise = {tripdt1} + t_fall = {tripdt1}) Rout out20 out {Rout} .ends * 2-input NOR gate * tpd 25n/9n/7n * tr 19n/7n/6n .SUBCKT 74HC02 in1 in2 out NVCC NVGND vcc1={vcc} tripdt1={tripdt} .param td1={1e-9*(9-3-3)*4.0/(vcc1-0.5)} .param Rout={60*4.0/(vcc1-0.5)} $ standard output driver *Cin1 in1 0 3.5p *Cin2 in2 0 3.5p abridge2 [in1 in2] [din1 din2] adc_buff .model adc_buff adc_bridge(in_low = {vcc1/2.0} in_high = {vcc1/2.0}) a6 [din1 din2] dout nor1 .model nor1 d_nor(rise_delay = {td1} fall_delay = {td1} input_load = 0.5e-12) abridge1 [dout] [out20] dac1 .model dac1 dac_bridge(out_low = 0.0 out_high = {vcc1} out_undef = {vcc1/2.0} + input_load = 5.0e-12 t_rise = {tripdt1} t_fall = {tripdt1}) Rout out20 out {Rout} .ends ** 2-input AND gate * tpd 25n/9n/7n * tr 19n/7n/6n .SUBCKT 74HC08 in1 in2 out NVCC NVGND vcc1={vcc} tripdt1={tripdt} .param td1={1e-9*(9-3-3)*4.0/(vcc1-0.5)} .param Rout={60*4.0/(vcc1-0.5)} $ standard output driver *Cin1 in1 0 3.5p *Cin2 in2 0 3.5p abridge2 [in1 in2] [din1 din2] adc_buff .model adc_buff adc_bridge(in_low = {vcc1/2.0} in_high = {vcc1/2.0}) a6 [din1 din2] dout and1 .model and1 d_and(rise_delay = {td1} fall_delay = {td1} + input_load = 0.5e-12) abridge1 [dout] [out20] dac1 .model dac1 dac_bridge(out_low = 0.0 out_high = {vcc1} out_undef = {vcc1/2.0} + input_load = 5.0e-12 t_rise = {tripdt1} + t_fall = {tripdt1}) Rout out20 out {Rout} .ends ** * 2-input OR gate * tpd 25n/9n/7n * tr 19n/7n/6n .SUBCKT 74HC32 in1 in2 out NVCC NVGND vcc1={vcc} tripdt1={tripdt} .param td1={1e-9*(9-3-3)*4.0/(vcc1-0.5)} .param Rout={60*4.0/(vcc1-0.5)} $ standard output driver *Cin1 in1 0 3.5p *Cin2 in2 0 3.5p abridge2 [in1 in2] [din1 din2] adc_buff .model adc_buff adc_bridge(in_low = {vcc1/2.0} in_high = {vcc1/2.0}) a6 [din1 din2] dout or1 .model or1 d_or(rise_delay = {td1} fall_delay = {td1} input_load = 0.5e-12) abridge1 [dout] [out20] dac1 .model dac1 dac_bridge(out_low = 0.0 out_high = {vcc1} out_undef = {vcc1/2.0} + input_load = 5.0e-12 t_rise = {tripdt1} t_fall = {tripdt1}) Rout out20 out {Rout} .ends * 2-input EXOR gate * tpd 39n/14n/11n * tr 19n/7n/6n .SUBCKT 74HC86 in1 in2 out NVCC NVGND vcc1={vcc} tripdt1={tripdt} .param td1={1e-9*(14-3-3)*4.0/(vcc1-0.5)} .param Rout={60*4.0/(vcc1-0.5)} $ standard output driver *Cin1 in1 0 3.5p *Cin2 in2 0 3.5p abridge2 [in1 in2] [din1 din2] adc_buff .model adc_buff adc_bridge(in_low = {vcc1/2.0} in_high = {vcc1/2.0}) a6 [din1 din2] dout xor3 .model xor3 d_xor(rise_delay = {td1} fall_delay = {td1} + input_load = 0.5e-12) abridge1 [dout] [out20] dac1 .model dac1 dac_bridge(out_low = 0.0 out_high = {vcc1} out_undef = {vcc1/2.0} + input_load = 5.0e-12 t_rise = {tripdt1} t_fall = {tripdt1}) Rout out20 out {Rout} .ends * *============================================================================ * * A hopefully real transistor level based model of the 74HCU04. The model * comes directly from philips. http://www.philipslogic.com/support/spice/ * This a unbuffered inverter which is often used in LC or crystal oscillators. * Inverter, unbuffered * Original Philips model used. .SUBCKT 74HCU04 A Y VCC VGND vcc1={vcc} speed1={speed} tripdt1={tripdt} *Rin A A1 200 *Cin A1 VGND 3p *XAY A1 Y VCC VGND 74HC04_INV0 XAY A Y VCC VGND 74HC04_INV0 .ends * * .SUBCKT 74HC04_INV0 2 3 80 90 *IN=2, OUT=3, VCC=80, GND=90 XINP 20 25 50 60 74HC_INP0N XOUTP 25 30 50 60 74HC_OUTPN L1 80 50 6.87NH L2 60 90 6.87NH L3 2 20 5.97NH L4 30 3 5.97NH C1 50 90 1.5P C2 60 90 1.5P C3 20 90 1.5P C4 3 90 1.5P .ENDS * .SUBCKT 74HC_INP0N 2 3 50 60 *IN=2, OUT=3, VCC=50, GND=60 R1 2 3 100 MP1 3 50 50 50 MHCPEN W=20U L=2.4U AD=100P AS=100P PD=40U PS= 20U MN1 3 60 60 60 MHCNEN W=35U L=2.4U AD=260P AS=260P PD=70U PS= 20U .ENDS * .SUBCKT 74HC_OUTPN 2 3 50 60 *IN=2, OUT=3, VCC=50, GND=60 R1 2 4 100 MP1 3 4 50 50 MHCPEN W=360U L=2.4U AD=400P AS=400P PD=10U PS=180U MN1 3 4 60 60 MHCNEN W=140U L=2.4U AD=200P AS=300P PD=10U PS=130U R2 4 5 50 MP2 3 5 50 50 MHCPEN W=360U L=2.4U AD=400P AS=400P PD=10U PS=180U MN2 3 5 60 60 MHCNEN W=140U L=2.4U AD=200P AS=200P PD=10U PS=130U R3 5 6 50 MP3 3 6 50 50 MHCPEN W=360U L=2.4U AD=400P AS=400P PD=10U PS=180U MN3 3 6 60 60 MHCNEN W=140U L=2.4U AD=200P AS=200P PD=10U PS=130U .ENDS ************************************************ * NOMINAL N-Channel Transistor * * UCB-3 Parameter Set * * HIGH-SPEED CMOS Logic Family * * 10-Jan.-1995 * ************************************************ .Model MHCNEN NMOS ( +LEVEL = 3 +KP = 45.3E-6 +VTO = 0.72 +TOX = 51.5E-9 +NSUB = 2.8E15 +GAMMA = 0.94 +PHI = 0.65 +VMAX = 150E3 +RS = 40 +RD = 40 +XJ = 0.11E-6 +LD = 0.52E-6 +DELTA = 0.315 +THETA = 0.054 +ETA = 0.025 +KAPPA = 0.0 +WD = 0.0 ) *********************************************** * NOMINAL P-Channel transistor * * UCB-3 Parameter Set * * HIGH-SPEED CMOS Logic Family * * 10-Jan.-1995 * *********************************************** .Model MHCPEN PMOS ( +LEVEL = 3 +KP = 22.1E-6 +VTO = -0.71 +TOX = 51.5E-9 +NSUB = 3.3E16 +GAMMA = 0.92 +PHI = 0.65 +VMAX = 970E3 +RS = 80 +RD = 80 +XJ = 0.63E-6 +LD = 0.23E-6 +DELTA = 2.24 +THETA = 0.108 +ETA = 0.322 +KAPPA = 0.0 +WD = 0.0 ) tmpk8ny_4pz/examples/digital/adder_mos.cir0000644000175000017500000000464113546075722021054 0ustar carstencarsten ADDER - 4 BIT ALL-NAND-GATE BINARY ADDER *** SUBCIRCUIT DEFINITIONS .SUBCKT NAND in1 in2 out VDD * NODES: INPUT(2), OUTPUT, VCC M1 out in2 Vdd Vdd p1 W=7.5u L=0.35u pd=13.5u ad=22.5p ps=13.5u as=22.5p M2 net.1 in2 0 0 n1 W=3u L=0.35u pd=9u ad=9p ps=9u as=9p M3 out in1 Vdd Vdd p1 W=7.5u L=0.35u pd=13.5u ad=22.5p ps=13.5u as=22.5p M4 out in1 net.1 0 n1 W=3u L=0.35u pd=9u ad=9p ps=9u as=9p .ENDS NAND .SUBCKT ONEBIT 1 2 3 4 5 6 * NODES: INPUT(2), CARRY-IN, OUTPUT, CARRY-OUT, VCC X1 1 2 7 6 NAND X2 1 7 8 6 NAND X3 2 7 9 6 NAND X4 8 9 10 6 NAND X5 3 10 11 6 NAND X6 3 11 12 6 NAND X7 10 11 13 6 NAND X8 12 13 4 6 NAND X9 11 7 5 6 NAND .ENDS ONEBIT .SUBCKT TWOBIT 1 2 3 4 5 6 7 8 9 * NODES: INPUT - BIT0(2) / BIT1(2), OUTPUT - BIT0 / BIT1, * CARRY-IN, CARRY-OUT, VCC X1 1 2 7 5 10 9 ONEBIT X2 3 4 10 6 8 9 ONEBIT .ENDS TWOBIT .SUBCKT FOURBIT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 * NODES: INPUT - BIT0(2) / BIT1(2) / BIT2(2) / BIT3(2), * OUTPUT - BIT0 / BIT1 / BIT2 / BIT3, CARRY-IN, CARRY-OUT, VCC X1 1 2 3 4 9 10 13 16 15 TWOBIT X2 5 6 7 8 11 12 16 14 15 TWOBIT .ENDS FOURBIT *** POWER VCC 99 0 DC 3.3V *** ALL INPUTS VIN1A 1 0 DC 0 PULSE(0 3 0 5NS 5NS 20NS 50NS) VIN1B 2 0 DC 0 PULSE(0 3 0 5NS 5NS 30NS 100NS) VIN2A 3 0 DC 0 PULSE(0 3 0 5NS 5NS 50NS 200NS) VIN2B 4 0 DC 0 PULSE(0 3 0 5NS 5NS 90NS 400NS) VIN3A 5 0 DC 0 PULSE(0 3 0 5NS 5NS 170NS 800NS) VIN3B 6 0 DC 0 PULSE(0 3 0 5NS 5NS 330NS 1600NS) VIN4A 7 0 DC 0 PULSE(0 3 0 5NS 5NS 650NS 3200NS) VIN4B 8 0 DC 0 PULSE(0 3 0 5NS 5NS 1290NS 6400NS) *** DEFINE NOMINAL CIRCUIT X1 1 2 3 4 5 6 7 8 9 10 11 12 0 13 99 FOURBIT .option noinit acct .TRAN 500p 6400NS * save inputs .save V(1) V(2) V(3) V(4) V(5) V(6) V(7) V(8) * use BSIM3 model with default parameters .model n1 nmos level=49 version=3.3.0 .model p1 pmos level=49 version=3.3.0 *.include ./Modelcards/modelcard32.nmos *.include ./Modelcards/modelcard32.pmos .control pre_set strict_errorhandling unset ngdebug *save outputs and specials save x1.x1.x1.7 V(9) V(10) V(11) V(12) V(13) run rusage * plot the inputs, use offset to plot on top of each other plot v(1) v(2)+4 v(3)+8 v(4)+12 v(5)+16 v(6)+20 v(7)+24 v(8)+28 * plot the outputs, use offset to plot on top of each other plot v(9) v(10)+4 v(11)+8 v(12)+12 v(13)+16 .endc .END tmpk8ny_4pz/examples/Monte_Carlo/0000755000175000017500000000000013546075722017200 5ustar carstencarstentmpk8ny_4pz/examples/Monte_Carlo/mc_ring_circ.net0000644000175000017500000000431013546075722022324 0ustar carstencarstenPerform Monte Carlo simulation in ngspice * 25 stage Ring-Osc. BSIM3 or 4 with statistical variation of model parameters * Model parameters are varied according to the PDK selection. * Tested with 3 different commercial HSPICE libraries from 2 vendors. * To be started with script MC_ring_ts.sp .options noacct seedinfo vin in out dc 0.5 pulse 0.5 0 0.1n 5n 1 1 1 vdd dd 0 dc 3.3 vss ss 0 dc 0 ve sub 0 dc 0 vpe well 0 dc 3.3 * transistors to be selected according to the library (here: p33ll and n33ll or pch_5_mac and nch_5_mac * or pe3 and ne3 or p1 and n1 (these models see below)) .subckt inv1 dd ss sub well in out *XMP1 out in dd well p33ll w=5u l=800n m=3 nf=1 ad=1.35p as=1.35p pd=9.6u ps=9.6u mosmis_mod=1 *XMN1 out in ss sub n33ll w=5u l=800n m=1 nf=3 ad=0.9p as=0.9p pd=6.6u ps=6.6u mosmis_mod=1 *XMP1 out in dd well pch_5_mac w=5u l=800n m=3 nf=1 ad=1.35p as=1.35p pd=9.6u ps=9.6u mosmis_mod=1 *XMN1 out in ss sub nch_5_mac w=5u l=800n m=1 nf=3 ad=0.9p as=0.9p pd=6.6u ps=6.6u mosmis_mod=1 *XMP1 out in dd well pe3 w=5u l=800n m=3 nf=1 ad=1.35p as=1.35p pd=9.6u ps=9.6u mosmis_mod=1 *XMN1 out in ss sub ne3 w=5u l=800n m=1 nf=3 ad=0.9p as=0.9p pd=6.6u ps=6.6u mosmis_mod=1 MP1 out in dd well p1 w=5u l=800n m=3 ad=1.35p as=1.35p pd=9.6u ps=9.6u MN1 out in ss sub n1 w=5u l=800n m=1 ad=0.9p as=0.9p pd=6.6u ps=6.6u .ends inv1 .subckt inv5 dd ss sub well in out xinv1 dd ss sub well in 1 inv1 xinv2 dd ss sub well 1 2 inv1 xinv3 dd ss sub well 2 3 inv1 xinv4 dd ss sub well 3 4 inv1 xinv5 dd ss sub well 4 out inv1 .ends inv5 xinv1 dd ss sub well in out5 inv5 xinv2 dd ss sub well out5 out10 inv5 xinv3 dd ss sub well out10 out15 inv5 xinv4 dd ss sub well out15 out20 inv5 xinv5 dd ss sub well out20 out inv5 xinv11 dd 0 sub well out buf inv1 cout buf ss 0.2pF *** Model library files. * Add your library here * Chose the transistors for XMP1 and XMN1 accordingly *.lib "jc_usage.l" MC_LIB *.lib "my_ts_usage.l" MC_LIB *.lib "x_usage.l" MC_LIB * or use the BSIM3 model with internal parameters except Vth0 * that varies the threshold voltage +-3 sigma around a mean of +-0.6V .model p1 PMOS version=3.3.0 Level=8 Vth0=agauss(-0.6, 0.1, 3) .model n1 NMOS version=3.3.0 Level=8 Vth0=agauss(0.6, 0.1, 3) .end tmpk8ny_4pz/examples/Monte_Carlo/MonteCarlo.sp0000644000175000017500000000435713546075722021620 0ustar carstencarsten* Effecting a Monte Carlo calculation in ngspice V1 N001 0 AC 1 DC 0 R1 N002 N001 141 * C1 OUT 0 1e-09 L1 OUT 0 10e-06 C2 N002 0 1e-09 L2 N002 0 10e-06 L3 N003 N002 40e-06 C3 OUT N003 250e-12 * R2 0 OUT 141 .control let mc_runs = 5 let run = 0 set curplot=new $ create a new plot set scratch=$curplot $ store its name to 'scratch' setplot $scratch $ make 'scratch' the active plot let bwh=unitvec(mc_runs) $ create a vector in plot 'scratch' to store bandwidth data * define distributions for random numbers: * unif: uniform distribution, deviation relativ to nominal value * aunif: uniform distribution, deviation absolut * gauss: Gaussian distribution, deviation relativ to nominal value * agauss: Gaussian distribution, deviation absolut * limit: if unif. distributed value >=0 then add +avar to nom, else -avar define unif(nom, rvar) (nom + (nom*rvar) * sunif(0)) define aunif(nom, avar) (nom + avar * sunif(0)) define gauss(nom, rvar, sig) (nom + (nom*rvar)/sig * sgauss(0)) define agauss(nom, avar, sig) (nom + avar/sig * sgauss(0)) * define limit(nom, avar) (nom + ((sgauss(0) ge 0) ? avar : -avar)) define limit(nom, avar) (nom + ((sgauss(0) >= 0) ? avar : -avar)) * * dowhile run < mc_runs $ loop starts here * * alter c1 = unif(1e-09, 0.1) * alter c1 = aunif(1e-09, 100e-12) * alter c1 = gauss(1e-09, 0.1, 3) * alter c1 = agauss(1e-09, 100e-12, 3) * alter c1 = unif(1e-09, 0.1) alter l1 = unif(10e-06, 0.1) alter c2 = unif(1e-09, 0.1) alter l2 = unif(10e-06, 0.1) alter l3 = unif(40e-06, 0.1) alter c3 = limit(250e-12, 25e-12) * ac oct 100 250K 10Meg * * measure bandwidth at -10 dB meas ac bw trig vdb(out) val=-10 rise=1 targ vdb(out) val=-10 fall=1 * set run = $&run $ create a variable from the vector set dt = $curplot $ store the current plot to dt setplot $scratch $ make 'scratch' the active plot let vout{$run}={$dt}.v(out) $ store the output vector to plot 'scratch' let bwh[run]={$dt}.bw $ store bw to vector bwh in plot 'scratch' setplot $dt $ go back to the previous plot let run = run + 1 end $ loop ends here * plot db({$scratch}.allv) echo print {$scratch}.bwh .endc .end tmpk8ny_4pz/examples/Monte_Carlo/MC_ring.sp0000644000175000017500000002421613546075722021067 0ustar carstencarstenPerform Monte Carlo simulation in ngspice * 25 stage Ring-Osc. BSIM3 with statistical variation of various model parameters * cd into ngspice/examples/Monte_Carlo * start in interactive mode 'ngspice MC_ring.sp' with several plots for output * or start in batch mode, controlled by .control section (Control mode) * with 'ngspice -b -r MC_ring.raw -o MC_ring.log MC_ring.sp'. vin in out dc 0.5 pulse 0.5 0 0.1n 5n 1 1 1 vdd dd 0 dc 3.3 vss ss 0 dc 0 ve sub 0 dc 0 vpe well 0 dc 3.3 .subckt inv1 dd ss sub well in out mn1 out in ss sub n1 w=2u l=0.35u as=3p ad=3p ps=4u pd=4u mp1 out in dd well p1 w=4u l=0.35u as=7p ad=7p ps=6u pd=6u .ends inv1 .subckt inv5 dd ss sub well in out xinv1 dd ss sub well in 1 inv1 xinv2 dd ss sub well 1 2 inv1 xinv3 dd ss sub well 2 3 inv1 xinv4 dd ss sub well 3 4 inv1 xinv5 dd ss sub well 4 out inv1 .ends inv5 xinv1 dd ss sub well in out5 inv5 xinv2 dd ss sub well out5 out10 inv5 xinv3 dd ss sub well out10 out15 inv5 xinv4 dd ss sub well out15 out20 inv5 xinv5 dd ss sub well out20 out inv5 xinv11 dd 0 sub well out buf inv1 cout buf ss 0.2pF * .options noacct .control save buf $ we just need buf, save memory by more than 10x let mc_runs = 30 $ number of runs for monte carlo let run = 0 $ number of actual run set curplot = new $ create a new plot set curplottitle = "Transient outputs" set plot_out = $curplot $ store its name to 'plot_out' set curplot = new $ create a new plot set curplottitle = "FFT outputs" set plot_fft = $curplot $ store its name to 'plot_fft' set curplot = new $ create a new plot set curplottitle = "Oscillation frequency" set max_fft = $curplot $ store its name to 'max_fft' let mc_runsp = mc_runs + 1 let maxffts = unitvec(mc_runsp) $ vector for storing max measure results let halfffts = unitvec(mc_runsp)$ vector for storing measure results at -40dB rising * * define distributions for random numbers: * unif: uniform distribution, deviation relativ to nominal value * aunif: uniform distribution, deviation absolut * gauss: Gaussian distribution, deviation relativ to nominal value * agauss: Gaussian distribution, deviation absolut define unif(nom, var) (nom + (nom*var) * sunif(0)) define aunif(nom, avar) (nom + avar * sunif(0)) define gauss(nom, var, sig) (nom + (nom*var)/sig * sgauss(0)) define agauss(nom, avar, sig) (nom + avar/sig * sgauss(0)) * * We want to vary the model parameters vth0, u0, tox, lint, and wint * of the BSIM3 model for the NMOS and PMOS transistors. * We may obtain the nominal values (nom) by manually extracting them from * the parameter set. Here we get them automatically and store them into * vectors. This has the advantage that you may change the parameter set * without having to look up the values again. let n1vth0=@n1[vth0] let n1u0=@n1[u0] let n1tox=@n1[tox] let n1lint=@n1[lint] let n1wint=@n1[wint] let p1vth0=@p1[vth0] let p1u0=@p1[u0] let p1tox=@p1[tox] let p1lint=@p1[lint] let p1wint=@p1[wint] * * run the simulation loop dowhile run <= mc_runs * run=0 simulates with nominal parameters if run > 0 setplot $max_fft altermod @n1[vth0] = gauss(n1vth0, 0.1, 3) altermod @n1[u0] = gauss(n1u0, 0.05, 3) altermod @n1[tox] = gauss(n1tox, 0.1, 3) altermod @n1[lint] = gauss(n1lint, 0.1, 3) altermod @n1[wint] = gauss(n1wint, 0.1, 3) altermod @p1[vth0] = gauss(p1vth0, 0.1, 3) altermod @p1[u0] = gauss(p1u0, 0.1, 3) altermod @p1[tox] = gauss(p1tox, 0.1, 3 ) altermod @p1[lint] = gauss(p1lint, 0.1, 3) altermod @p1[wint] = gauss(p1wint, 0.1, 3) end tran 15p 100n 0 * select stop and step so that number of data points after linearization is not too * close to 8192, which would yield varying number of line length and thus scale for fft. * * We have to figure out what to do if a single simulation will not converge. * There is the variable 'sim_status' which is set to 1 if the simulation * fails with ’xx simulation(s) aborted’, e.g. because of non-convergence. * Then we might skip this run and continue with a new run. * echo Simulation status $sim_status let simstat = $sim_status if simstat = 1 if run = mc_runs echo go to end else echo go to next run end destroy $curplot goto next end set run ="$&run" $ create a variable from the vector set mc_runs ="$&mc_runs" $ create a variable from the vector echo simulation run no. $run of $mc_runs set dt = $curplot * save the linearized data for having equal time scales for all runs linearize buf $ linearize only buf, no other vectors needed destroy $dt $ delete the tran i plot set dt = $curplot $ store the current plot to dt (tran i+1) setplot $plot_out $ make 'plt_out' the active plot * firstly save the time scale once to become the default scale if run=0 let time={$dt}.time end let vout{$run}={$dt}.buf $ store the output vector to plot 'plot_out' setplot $dt $ go back to the previous plot (tran i+1) fft buf $ run fft on vector buf destroy $dt $ delete the tran i+1 plot let buf2=db(mag(buf)) * find the frequency where buf has its maximum of the fft signal meas sp fft_max MAX_AT buf2 from=0.1G to=0.7G * find the frequency where buf is -40dB at rising fft signal meas sp fft_40 WHEN buf2=-40 RISE=1 from=0.1G to=0.7G echo echo * store the fft vector set dt = $curplot $ store the current plot to dt (spec i) setplot $plot_fft $ make 'plot_fft' the active plot if run=0 let frequency={$dt}.frequency end let fft{$run}={$dt}.buf $ store the output vector to plot 'plot_fft' * store the measured value setplot $max_fft $ make 'max_fft' the active plot let maxffts[{$run}]={$dt}.fft_max let halfffts[{$run}]={$dt}.fft_40 let run = run + 1 label next reset end ***** plotting ********************************************************** if $?batchmode echo echo Plotting not available in batch mode echo Write linearized vout0 to vout{$mc_runs} to rawfile $rawfile echo write $rawfile {$plot_out}.allv rusage quit else setplot $plot_out plot vout0 ylabel 'RO output, original parameters' $ just plot the tran output with nominal parameters setplot $plot_fft settype decibel ally plot db(mag(ally)) xlimit .1G 1G ylimit -80 10 ylabel 'fft output' * * create a histogram from vector maxffts setplot $max_fft $ make 'max_fft' the active plot set startfreq=400MEG set bin_size=5MEG set bin_count=20 compose xvec start=$startfreq step=$bin_size lin=$bin_count $ requires variables as parameters settype frequency xvec let bin_count=$bin_count $ create a vector from the variable let yvec=unitvec(bin_count) $ requires vector as parameter let startfreq=$startfreq let bin_size=$bin_size * put data into the correct bins let run = 0 dowhile run < mc_runs set run = $&run $ create a variable from the vector let val = maxffts[{$run}] let part = 0 * Check if val fits into a bin. If yes, raise bin by 1 dowhile part < bin_count if ((val < (startfreq + (part+1)*bin_size)) & (val > (startfreq + part*bin_size))) let yvec[part] = yvec[part] + 1 break end let part = part + 1 end let run = run + 1 end * plot the histogram set plotstyle=combplot plot yvec-1 vs xvec xlabel 'oscillation frequency' ylabel 'bin count' $ subtract 1 because we started with unitvec containing ones * plot simulation series set plotstyle=linplot let xx = vector(mc_runsp) settype frequency maxffts plot maxffts vs xx xlabel 'iteration no.' ylabel 'RO frequency' * calculate jitter let diff40 = (vecmax(halfffts) - vecmin(halfffts))*1e-6 echo echo Max. jitter is "$&diff40" MHz end rusage .endc ******************************************************************************** .model n1 nmos +level=8 +version=3.3.0 +tnom=27.0 +nch=2.498e+17 tox=9e-09 xj=1.00000e-07 +lint=9.36e-8 wint=1.47e-7 +vth0=.6322 k1=.756 k2=-3.83e-2 k3=-2.612 +dvt0=2.812 dvt1=0.462 dvt2=-9.17e-2 +nlx=3.52291e-08 w0=1.163e-6 +k3b=2.233 +vsat=86301.58 ua=6.47e-9 ub=4.23e-18 uc=-4.706281e-11 +rdsw=650 u0=388.3203 wr=1 +a0=.3496967 ags=.1 b0=0.546 b1=1 +dwg=-6.0e-09 dwb=-3.56e-09 prwb=-.213 +keta=-3.605872e-02 a1=2.778747e-02 a2=.9 +voff=-6.735529e-02 nfactor=1.139926 cit=1.622527e-04 +cdsc=-2.147181e-05 +cdscb=0 dvt0w=0 dvt1w=0 dvt2w=0 +cdscd=0 prwg=0 +eta0=1.0281729e-02 etab=-5.042203e-03 +dsub=.31871233 +pclm=1.114846 pdiblc1=2.45357e-03 pdiblc2=6.406289e-03 +drout=.31871233 pscbe1=5000000 pscbe2=5e-09 pdiblcb=-.234 +pvag=0 delta=0.01 +wl=0 ww=-1.420242e-09 wwl=0 +wln=0 wwn=.2613948 ll=1.300902e-10 +lw=0 lwl=0 lln=.316394 lwn=0 +kt1=-.3 kt2=-.051 +at=22400 +ute=-1.48 +ua1=3.31e-10 ub1=2.61e-19 uc1=-3.42e-10 +kt1l=0 prt=764.3 +noimod=2 +af=1.075e+00 kf=9.670e-28 ef=1.056e+00 +noia=1.130e+20 noib=7.530e+04 noic=-8.950e-13 **** PMOS *** .model p1 pmos +level=8 +version=3.3.0 +tnom=27.0 +nch=3.533024e+17 tox=9e-09 xj=1.00000e-07 +lint=6.23e-8 wint=1.22e-7 +vth0=-.6732829 k1=.8362093 k2=-8.606622e-02 k3=1.82 +dvt0=1.903801 dvt1=.5333922 dvt2=-.1862677 +nlx=1.28e-8 w0=2.1e-6 +k3b=-0.24 prwg=-0.001 prwb=-0.323 +vsat=103503.2 ua=1.39995e-09 ub=1.e-19 uc=-2.73e-11 +rdsw=460 u0=138.7609 +a0=.4716551 ags=0.12 +keta=-1.871516e-03 a1=.3417965 a2=0.83 +voff=-.074182 nfactor=1.54389 cit=-1.015667e-03 +cdsc=8.937517e-04 +cdscb=1.45e-4 cdscd=1.04e-4 +dvt0w=0.232 dvt1w=4.5e6 dvt2w=-0.0023 +eta0=6.024776e-02 etab=-4.64593e-03 +dsub=.23222404 +pclm=.989 pdiblc1=2.07418e-02 pdiblc2=1.33813e-3 +drout=.3222404 pscbe1=118000 pscbe2=1e-09 +pvag=0 +kt1=-0.25 kt2=-0.032 prt=64.5 +at=33000 +ute=-1.5 +ua1=4.312e-9 ub1=6.65e-19 uc1=0 +kt1l=0 +noimod=2 +af=9.970e-01 kf=2.080e-29 ef=1.015e+00 +noia=1.480e+18 noib=3.320e+03 noic=1.770e-13 .end tmpk8ny_4pz/examples/Monte_Carlo/MC_2_control.sp0000644000175000017500000000344413546075722022031 0ustar carstencarsten*ng_script * Perform Monte Carlo simulation in ngspice * script for use with 25 stage Ring-Osc. BSIM3 * circuit is in MC_2_circ.sp * edit 'setcs sourcepath' for your path to circuit file * start script by 'ngspice -o MC_2_control.log MC_2_control.sp' * .control let mc_runs = 10 $ number of runs for monte carlo let run = 1 $ number of the actual run * Where to find the circuit netlist file MC_2_circ.sp setcs sourcepath = ( D:\Spice_general\ngspice\examples\Monte_Carlo ) * create file for frequency information echo Monte Carlo, frequency of R.O. > MC_frequ.log * run the simulation loop dowhile run <= mc_runs * without the reset switch there is some strange drift * towards lower and lower frequencies set run = $&run $ create a variable from the vector setseed $run $ set the rnd seed value to the loop index if run = 1 source MC_2_circ.sp $ load the circuit once from file, including model data else mc_source $ re-load the circuit from internal storage end save buf $ we just need output vector buf, save memory by more than 10x tran 15p 200n 0 write mc_ring{$run}.out buf $ write each sim output to its own rawfile linearize buf $ lienarize buf to allow fft fft buf $ run fft on vector buf let buf2=db(mag(buf)) * find the frequency where buf has its maximum of the fft signal meas sp fft_max MAX_AT buf2 from=0.1G to=0.7G print fft_max >> MC_frequ.log $ print frequency to file destroy all $ delete all output vectors remcirc $ delete circuit let run = run + 1 $ increase loop counter end quit .endc .end tmpk8ny_4pz/examples/Monte_Carlo/MC_2_circ.sp0000644000175000017500000000642113546075722021267 0ustar carstencarstenCircuit to perform Monte Carlo simulation in ngspice * 25 stage Ring-Osc. using inverters with BSIM3 vin in out dc 0.5 pulse 0.5 0 0.1n 5n 1 1 1 vdd dd 0 dc 3.3 vss ss 0 dc 0 ve sub 0 dc 0 vpe well 0 dc 3.3 .subckt inv1 dd ss sub well in out mn1 out in ss sub n1 w=2u l=0.35u as=3p ad=3p ps=4u pd=4u mp1 out in dd well p1 w=4u l=0.35u as=7p ad=7p ps=6u pd=6u .ends inv1 .subckt inv5 dd ss sub well in out xinv1 dd ss sub well in 1 inv1 xinv2 dd ss sub well 1 2 inv1 xinv3 dd ss sub well 2 3 inv1 xinv4 dd ss sub well 3 4 inv1 xinv5 dd ss sub well 4 out inv1 .ends inv5 xinv1 dd ss sub well in out5 inv5 xinv2 dd ss sub well out5 out10 inv5 xinv3 dd ss sub well out10 out15 inv5 xinv4 dd ss sub well out15 out20 inv5 xinv5 dd ss sub well out20 out inv5 xinv11 dd 0 sub well out buf inv1 * output is buf cout buf ss 0.2pF * .options noacct * The following model parameters are varying statistically: * vth0, u0, tox * see the AGAUSS function used to define the parameter * the deviation is 10%, just for example, not measured ******************************************************************************** .model n1 nmos +level=8 +version=3.3.0 +tnom=27.0 +nch=2.498e+17 tox=AGAUSS(9e-09, 9e-09, 10) xj=1.00000e-07 +lint=9.36e-8 wint=1.47e-7 +vth0=AGAUSS(.6322,.6322,10) k1=.756 k2=-3.83e-2 k3=-2.612 +dvt0=2.812 dvt1=0.462 dvt2=-9.17e-2 +nlx=3.52291e-08 w0=1.163e-6 +k3b=2.233 +vsat=86301.58 ua=6.47e-9 ub=4.23e-18 uc=-4.706281e-11 +rdsw=650 u0=AGAUSS(388.3203,388.3203,10) wr=1 +a0=.3496967 ags=.1 b0=0.546 b1=1 +dwg=-6.0e-09 dwb=-3.56e-09 prwb=-.213 +keta=-3.605872e-02 a1=2.778747e-02 a2=.9 +voff=-6.735529e-02 nfactor=1.139926 cit=1.622527e-04 +cdsc=-2.147181e-05 +cdscb=0 dvt0w=0 dvt1w=0 dvt2w=0 +cdscd=0 prwg=0 +eta0=1.0281729e-02 etab=-5.042203e-03 +dsub=.31871233 +pclm=1.114846 pdiblc1=2.45357e-03 pdiblc2=6.406289e-03 +drout=.31871233 pscbe1=5000000 pscbe2=5e-09 pdiblcb=-.234 +pvag=0 delta=0.01 +wl=0 ww=-1.420242e-09 wwl=0 +wln=0 wwn=.2613948 ll=1.300902e-10 +lw=0 lwl=0 lln=.316394 lwn=0 +kt1=-.3 kt2=-.051 +at=22400 +ute=-1.48 +ua1=3.31e-10 ub1=2.61e-19 uc1=-3.42e-10 +kt1l=0 prt=764.3 +noimod=2 +af=1.075e+00 kf=9.670e-28 ef=1.056e+00 +noia=1.130e+20 noib=7.530e+04 noic=-8.950e-13 **** PMOS *** .model p1 pmos +level=8 +version=3.3.0 +tnom=27.0 +nch=3.533024e+17 tox=AGAUSS(9e-09,9e-09,10) xj=1.00000e-07 +lint=6.23e-8 wint=1.22e-7 +vth0=AGAUSS(-.6732829,-.6732829,10) k1=.8362093 k2=-8.606622e-02 k3=1.82 +dvt0=1.903801 dvt1=.5333922 dvt2=-.1862677 +nlx=1.28e-8 w0=2.1e-6 +k3b=-0.24 prwg=-0.001 prwb=-0.323 +vsat=103503.2 ua=1.39995e-09 ub=1.e-19 uc=-2.73e-11 +rdsw=460 u0=AGAUSS(138.7609,138.7609,10) +a0=.4716551 ags=0.12 +keta=-1.871516e-03 a1=.3417965 a2=0.83 +voff=-.074182 nfactor=1.54389 cit=-1.015667e-03 +cdsc=8.937517e-04 +cdscb=1.45e-4 cdscd=1.04e-4 +dvt0w=0.232 dvt1w=4.5e6 dvt2w=-0.0023 +eta0=6.024776e-02 etab=-4.64593e-03 +dsub=.23222404 +pclm=.989 pdiblc1=2.07418e-02 pdiblc2=1.33813e-3 +drout=.3222404 pscbe1=118000 pscbe2=1e-09 +pvag=0 +kt1=-0.25 kt2=-0.032 prt=64.5 +at=33000 +ute=-1.5 +ua1=4.312e-9 ub1=6.65e-19 uc1=0 +kt1l=0 +noimod=2 +af=9.970e-01 kf=2.080e-29 ef=1.015e+00 +noia=1.480e+18 noib=3.320e+03 noic=1.770e-13 .end .end tmpk8ny_4pz/examples/Monte_Carlo/rand_numb_test.cir0000644000175000017500000000210313546075722022677 0ustar carstencarsten*** random number test for scope-inpcom-8 *** Start value of seed for random number generator: variable 'rndseed' is set to 1 *** and random number generator is seeded with this value. *** You may override this value by adding 'setseed 5' or similar to file .spiceinit. *** print a message when the random number generator gets a new seed .option seedinfo *** like HSPICE: set rndseed to (number of seconds since 1.1.1970 - 1470000000) *** and seed the random number generator with rndseed *.option seed = random *** like HSPICE: set rndseed to 55 *** and seed the random number generator with rndseed (here 55) .option seed = 55 *** the 'circuit' .param myval = agauss(0, 1, 1) v1 1 0 'myval' *** the .control script .control *** set variable rndseed to value 11 *set rndseed = 11 *** seed the random number generator with value from variable rndseed *setseed *** seed the random number generator with value 12 and set rndseed to 12 setseed 12 *** reload circuit and re-evaluate all random functions (agauss etc.) mc_source *** simulate and print result op print v(1) .endc .end tmpk8ny_4pz/examples/Monte_Carlo/MC_ring_ts.sp0000644000175000017500000001512713546075722021576 0ustar carstencarsten*ng_script * Example script for Monte Carlo with commercial HSPICE-compatible libraries * The circuit in mc_ring_circ.net is a 25-stage inverter ring oscillator. * Add your library to mc_ring_circ.net and choose transistors accordingly. * Add the source file and the library path. * A simple BSIM3 inverter R.O. serves as an MC example wtihout need for a library. .control begin let mc_runs = 30 $ number of runs for monte carlo let run = 0 $ number of actual run set curplot = new $ create a new plot set curplottitle = "Transient outputs" set plot_out = $curplot $ store its name to 'plot_out' set curplot = new $ create a new plot set curplottitle = "FFT outputs" set plot_fft = $curplot $ store its name to 'plot_fft' set curplot = new $ create a new plot set curplottitle = "Oscillation frequency" set max_fft = $curplot $ store its name to 'max_fft' let mc_runsp = mc_runs + 1 let maxffts = unitvec(mc_runsp) $ vector for storing max measure results let halfffts = unitvec(mc_runsp)$ vector for storing measure results at -40dB rising unlet mc_runsp set mc_runs = $&mc_runs $ create a variable from the vector let seeds = mc_runs + 2 setseed $&seeds unlet seeds echo source the input file * Path of your circuit file and library file here * Will be added to the already existing sourcepath setcs sourcepath = ( $inputdir $sourcepath ./ngspice/examples/Monte_Carlo ) * source with file name of your circuit file source mc_ring_circ.net save buf $ we just need buf, save memory by more than 10x * Output path (directory has already to be there) * set outputpath = 'D:\Spice_general\ngspice\examples\Monte_Carlo\out' * If your current directory is the 'ngspice' directory * set outputpath = './examples/Monte_Carlo/out' $ LINUX alternative * run the simulation loop * We have to figure out what to do if a single simulation will not converge. * There is now the variable sim_status, that is 0 if simulation ended regularly, * and 1 if the simulation has been aborted with error message '...simulation(s) aborted'. * Then we skip the rest of the run and continue with a new run. dowhile run <= mc_runs set run = $&run $ create a variable from the vector * run=0 simulates with nominal parameters if run > 0 echo echo * * * * * * echo Source the circuit again internally for run no. $run echo * * * * * * setseed $run mc_source $ re-source the input file else echo run no. $run end echo simulation run no. $run of $mc_runs tran 100p 1000n 0 echo Simulation status $sim_status let simstat = $sim_status if simstat = 1 if run = mc_runs echo go to end else echo go to next run end destroy $curplot goto next end * select stop and step so that number of data points after linearization is not too * close to 8192, which would yield varying number of line length and thus scale for fft. * set dt0 = $curplot * save the linearized data for having equal time scales for all runs linearize buf $ linearize only buf, no other vectors needed set dt1 = $curplot $ store the current plot to dt (tran i+1) setplot $plot_out $ make 'plt_out' the active plot * firstly save the time scale once to become the default scale if run=0 let time={$dt1}.time end let vout{$run}={$dt1}.buf $ store the output vector to plot 'plot_out' setplot $dt1 $ go back to the previous plot (tran i+1) fft buf $ run fft on vector buf let buf2=db(mag(buf)) * find the frequency where buf has its maximum of the fft signal meas sp fft_max MAX_AT buf2 from=0.05G to=0.7G * find the frequency where buf is -40dB at rising fft signal meas sp fft_40 WHEN buf2=-40 RISE=1 from=0.05G to=0.7G * store the fft vector set dt2 = $curplot $ store the current plot to dt (spec i) setplot $plot_fft $ make 'plot_fft' the active plot if run=0 let frequency={$dt2}.frequency end let fft{$run}={$dt2}.buf $ store the output vector to plot 'plot_fft' settype decibel fft{$run} * store the measured value setplot $max_fft $ make 'max_fft' the active plot let maxffts[{$run}]={$dt2}.fft_max let halfffts[{$run}]={$dt2}.fft_40 destroy $dt0 $dt1 $dt2 $ save memory, we don't need this plot (spec) any more label next remcirc let run = run + 1 end ***** plotting ********************************************************** if $?batchmode echo echo Plotting not available in batch mode echo Write linearized vout0 to vout{$mc_runs} to rawfile $rawfile echo write $rawfile {$plot_out}.allv rusage quit else if $?sharedmode or $?win_console gnuplot xnp_pl1 {$plot_out}.vout0 $ just plot the tran output with nominal parameters else plot {$plot_out}.vout0 $ just plot the tran output with nominal parameters end setplot $plot_fft if $?sharedmode or $?win_console gnuplot xnp_pl2 db(mag(ally)) xlimit 0 1G ylimit -80 10 else plot db(mag(ally)) xlimit 0 1G ylimit -80 10 end * * create a histogram from vector maxffts setplot $max_fft $ make 'max_fft' the active plot set startfreq=50MEG set bin_size=1MEG set bin_count=100 compose osc_frequ start=$startfreq step=$bin_size lin=$bin_count $ requires variables as parameters settype frequency osc_frequ let bin_count=$bin_count $ create a vector from the variable let yvec=unitvec(bin_count) $ requires vector as parameter let startfreq=$startfreq let bin_size=$bin_size * put data into the correct bins let run = 0 dowhile run < mc_runs set run = $&run $ create a variable from the vector let val = maxffts[{$run}] let part = 0 * Check if val fits into a bin. If yes, raise bin by 1 dowhile part < bin_count if ((val < (startfreq + (part+1)*bin_size)) & (val >= (startfreq + part*bin_size))) let yvec[part] = yvec[part] + 1 break end let part = part + 1 end let run = run + 1 end * plot the histogram let count = yvec - 1 $ subtract 1 because we started with unitvec containing ones if $?sharedmode or $?win_console gnuplot np_pl3 count vs osc_frequ combplot else plot count vs osc_frequ combplot end * calculate jitter let diff40 = (vecmax(halfffts) - vecmin(halfffts))*1e-6 echo echo Max. jitter is "$&diff40" MHz end rusage * quit end tmpk8ny_4pz/examples/Monte_Carlo/mc_ring_lib_complete_actual.cir0000644000175000017500000001764313546075722025377 0ustar carstencarstenPerform Monte Carlo simulation in ngspice * 25 stage Ring-Osc. BSIM3 or 4 with statistical variation of model parameters * Model parameters are varied according to the PDK selection. * Tested with 3 different commercial HSPICE libraries from 2 vendors. * Add your library to mc_ring_circ.net and choose transistors accordingly. * Add the library path to the .LIB statement. * A simple BSIM3 inverter R.O. serves as an MC example. .options noacct vin in out dc 0.5 pulse 0.5 0 0.1n 5n 1 1 1 vdd dd 0 dc 3.3 vss ss 0 dc 0 ve sub 0 dc 0 vpe well 0 dc 3.3 * transistors to be selected according to the library (here: p33ll and n33ll or pch_5_mac and nch_5_mac * or pe3 and ne3 or p1 and n1 (these models see below)) .subckt inv1 dd ss sub well in out *XMP1 out in dd well p33ll w=5u l=800n m=3 nf=1 ad=1.35p as=1.35p pd=9.6u ps=9.6u mosmis_mod=1 *XMN1 out in ss sub n33ll w=5u l=800n m=1 nf=3 ad=0.9p as=0.9p pd=6.6u ps=6.6u mosmis_mod=1 XMP1 out in dd well pch_5_mac w=5u l=800n m=3 nf=1 ad=1.35p as=1.35p pd=9.6u ps=9.6u mosmis_mod=1 XMN1 out in ss sub nch_5_mac w=5u l=800n m=1 nf=3 ad=0.9p as=0.9p pd=6.6u ps=6.6u mosmis_mod=1 *XMP1 out in dd well pe3 w=5u l=800n m=3 nf=1 ad=1.35p as=1.35p pd=9.6u ps=9.6u mosmis_mod=1 *XMN1 out in ss sub ne3 w=5u l=800n m=1 nf=3 ad=0.9p as=0.9p pd=6.6u ps=6.6u mosmis_mod=1 *MP1 out in dd well p1 w=5u l=800n m=3 ad=1.35p as=1.35p pd=9.6u ps=9.6u *MN1 out in ss sub n1 w=5u l=800n m=1 ad=0.9p as=0.9p pd=6.6u ps=6.6u .ends inv1 .subckt inv5 dd ss sub well in out xinv1 dd ss sub well in 1 inv1 xinv2 dd ss sub well 1 2 inv1 xinv3 dd ss sub well 2 3 inv1 xinv4 dd ss sub well 3 4 inv1 xinv5 dd ss sub well 4 out inv1 .ends inv5 xinv1 dd ss sub well in out5 inv5 xinv2 dd ss sub well out5 out10 inv5 xinv3 dd ss sub well out10 out15 inv5 xinv4 dd ss sub well out15 out20 inv5 xinv5 dd ss sub well out20 out inv5 xinv11 dd 0 sub well out buf inv1 cout buf ss 0.2pF *** Model library files. * Add your library here (full path required, or path relative to path * of ngspice executable (interactive mode), or relative to path of * input file (batch mode)) * Chose the transistors for XMP1 and XMN1 according to the library *.lib "jc_usage.l" MC_LIB *.lib "../../../various/lib-test/my_usage.l" MC_LIB .lib "D:\Spice_general\tests\lib-test\ts14\my_ts_usage.l" MC_LIB *.lib "x_usage.l" MC_LIB * or use the BSIM3 model with internal parameters except Vth0 * that varies the threshold voltage +-3 sigma around a mean of +-0.6V *.model p1 PMOS version=3.3.0 Level=8 Vth0=agauss(-0.6, 0.1, 3) *.model n1 NMOS version=3.3.0 Level=8 Vth0=agauss(0.6, 0.1, 3) .control let mc_runs = 10 $ number of runs for monte carlo let run = 0 $ number of actual run set curplot = new $ create a new plot set curplottitle = "Transient outputs" set plot_out = $curplot $ store its name to 'plot_out' set curplot = new $ create a new plot set curplottitle = "FFT outputs" set plot_fft = $curplot $ store its name to 'plot_fft' set curplot = new $ create a new plot set curplottitle = "Oscillation frequency" set max_fft = $curplot $ store its name to 'max_fft' let mc_runsp = mc_runs + 1 let maxffts = unitvec(mc_runsp) $ vector for storing max measure results let halfffts = unitvec(mc_runsp)$ vector for storing measure results at -40dB rising unlet mc_runsp set mc_runs = $&mc_runs $ create a variable from the vector let seeds = mc_runs + 2 setseed $&seeds unlet seeds save buf $ we just need buf, save memory by more than 10x * run the simulation loop * We have to figure out what to do if a single simulation will not converge. * There is now the variable sim_status, that is 0 if simulation ended regularly, * and 1 if the simulation has been aborted with error message '...simulation(s) aborted'. * Then we skip the rest of the run and continue with a new run. dowhile run <= mc_runs set run = $&run $ create a variable from the vector * run=0 simulates with nominal parameters if run > 0 echo echo * * * * * * echo Source the circuit again internally for run no. $run echo * * * * * * setseed $run mc_source $ re-source the input file else echo run no. $run end echo simulation run no. $run of $mc_runs tran 100p 1000n 0 echo Simulation status $sim_status let simstat = $sim_status if simstat = 1 if run = mc_runs echo go to end else echo go to next run end destroy $curplot goto next end * select stop and step so that number of data points after linearization is not too * close to 8192, which would yield varying number of line length and thus scale for fft. * set dt0 = $curplot * save the linearized data for having equal time scales for all runs linearize buf $ linearize only buf, no other vectors needed set dt1 = $curplot $ store the current plot to dt (tran i+1) setplot $plot_out $ make 'plt_out' the active plot * firstly save the time scale once to become the default scale if run=0 let time={$dt1}.time end let vout{$run}={$dt1}.buf $ store the output vector to plot 'plot_out' setplot $dt1 $ go back to the previous plot (tran i+1) fft buf $ run fft on vector buf let buf2=db(mag(buf)) * find the frequency where buf has its maximum of the fft signal meas sp fft_max MAX_AT buf2 from=0.05G to=0.7G * find the frequency where buf is -40dB at rising fft signal meas sp fft_40 WHEN buf2=-40 RISE=1 from=0.05G to=0.7G * store the fft vector set dt2 = $curplot $ store the current plot to dt (spec i) setplot $plot_fft $ make 'plot_fft' the active plot if run=0 let frequency={$dt2}.frequency end let fft{$run}={$dt2}.buf $ store the output vector to plot 'plot_fft' * store the measured value setplot $max_fft $ make 'max_fft' the active plot let maxffts[{$run}]={$dt2}.fft_max let halfffts[{$run}]={$dt2}.fft_40 destroy $dt0 $dt1 $dt2 $ save memory, we don't need this plot (spec) any more label next remcirc let run = run + 1 end ***** plotting ********************************************************** if $?batchmode echo echo Plotting not available in batch mode echo Write linearized vout0 to vout{$mc_runs} to rawfile $rawfile echo write $rawfile {$plot_out}.allv rusage quit else plot {$plot_out}.vout0 $ just plot the tran output with run 0 parameters setplot $plot_fft plot db(mag(ally)) xlimit 0 1G ylimit -80 10 * * create a histogram from vector maxffts setplot $max_fft $ make 'max_fft' the active plot set startfreq=50MEG set bin_size=1MEG set bin_count=100 compose osc_frequ start=$startfreq step=$bin_size lin=$bin_count $ requires variables as parameters settype frequency osc_frequ let bin_count=$bin_count $ create a vector from the variable let yvec=unitvec(bin_count) $ requires vector as parameter let startfreq=$startfreq let bin_size=$bin_size * put data into the correct bins let run = 0 dowhile run < mc_runs set run = $&run $ create a variable from the vector let val = maxffts[{$run}] let part = 0 * Check if val fits into a bin. If yes, raise bin by 1 dowhile part < bin_count if ((val < (startfreq + (part+1)*bin_size)) & (val > (startfreq + part*bin_size))) let yvec[part] = yvec[part] + 1 break end let part = part + 1 end let run = run + 1 end * plot the histogram set plotstyle=combplot let counts = yvec - 1 $ subtract 1 because we started with unitvec containing ones plot counts vs osc_frequ * calculate jitter let diff40 = (vecmax(halfffts) - vecmin(halfffts))*1e-6 echo echo Max. jitter is "$&diff40" MHz end rusage * quit .endc .end tmpk8ny_4pz/examples/Monte_Carlo/OpWien.sp0000644000175000017500000000374713546075722020760 0ustar carstencarstenOPWIEN.CIR - OPAMP WIEN-BRIDGE OSCILLATOR * http://www.ecircuitcenter.com/circuits/opwien/opwien.htm * single simulation run * 2 resistors and 2 capacitors of Wien bridge a varied statistically * number of variations: varia * Simulation time .param ttime=12000m .param varia=100 .param ttime10 = 'ttime/varia' * nominal resistor and capacitor values .param res = 10k .param cn = 16NF * CURRENT PULSE TO START OSCILLATIONS IS 0 3 dc 0 PWL(0US 0MA 10US 0.1MA 40US 0.1MA 50US 0MA 10MS 0MA) * * RC TUNING VR2 r2 0 dc 0 trrandom (2 'ttime10' 0 1) ; Gauss controlling voltage * *VR2 r2 0 dc 0 trrandom (1 'ttime10' 0 3) ; Uniform within -3 3 * * If Gauss, factor 0.033 is 10% equivalent to 3 sigma * if uniform, uniform between +/- 10% R2 4 6 R = 'res + 0.033 * res*V(r2)' ; behavioral resistor *R2 4 6 'res' $ constant R VC2 c2 0 dc 0 trrandom (2 'ttime10' 0 1) *C2 6 3'cn' $ constant C C2 6 3 C = 'cn + 0.033 * cn*V(c2)' ; behavioral capacitor VR1 r1 0 dc 0 trrandom (2 'ttime10' 0 1) *VR1 r1 0 dc 0 trrandom (1 'ttime10' 0 3) R1 3 0 R = 'res + 0.033 * res*V(r1)' *R1 3 0 'res' VC1 c1 0 dc 0 trrandom (2 'ttime10' 0 1) C1 3 0 C = 'cn + 0.033 * cn*V(c2)' *C1 3 0 'cn' * NON-INVERTING OPAMP R10 0 2 10K R11 2 5 18K XOP 3 2 4 OPAMP1 * AMPLITUDE STABILIZATION R12 5 4 5K D1 5 4 D1N914 D2 4 5 D1N914 * .model D1N914 D(Is=0.1p Rs=16 CJO=2p Tt=12n Bv=100 Ibv=0.4n) * * OPAMP MACRO MODEL, SINGLE-POLE * connections: non-inverting input * | inverting input * | | output * | | | .SUBCKT OPAMP1 1 2 6 * INPUT IMPEDANCE RIN 1 2 10MEG * DC GAIN (100K) AND POLE 1 (100HZ) EGAIN 3 0 1 2 100K RP1 3 4 1K CP1 4 0 1.5915UF * OUTPUT BUFFER AND RESISTANCE EBUFFER 5 0 4 0 1 ROUT 5 6 10 .ENDS * * ANALYSIS .TRAN 0.05MS 'ttime' * * VIEW RESULTS .control option noinit run plot V(4) 5*V(r1) 5*V(r2) 5*V(c1) 5*V(c2) linearize v(4) fft v(4) let v4mag = mag(v(4)) plot v4mag plot v4mag xlimit 500 1500 *wrdata histo v4mag rusage .endc .END tmpk8ny_4pz/examples/inductive-systems/0000755000175000017500000000000013546075722020475 5ustar carstencarstentmpk8ny_4pz/examples/inductive-systems/positive-definite-4.cir0000644000175000017500000000234413546075722024767 0ustar carstencarsten* indentify non-viable inductive systems ("altering" case) * exercise "alter" and "indverbosity" * (compile (concat "../../../w32/src/ngspice " buffer-file-name) t) * (compile (concat "valgrind --track-origins=yes --leak-check=full --show-reachable=yes ../../../w32/src/ngspice " buffer-file-name) t) V1 x 0 dc=0 ac=1 Rx x 1 1 R1 2 0 1k R2 3 0 1k L1 1 0 10u L2 2 0 11u L3 3 0 10u k12 L1 L2 0 k23 L2 L3 0 k13 L1 L3 0 R101 101 0 1k L101 101 0 1u L102 102 0 2u L103 103 0 3u K1012 L101 L102 0.1 K1013 L101 L103 0.2 .AC LIN 5k 1k 10MEG .control listing e echo coupling factors 0 0 0 -- ok op alter k12 0.96 alter k23 0.99 alter k13 0.98 echo coupling factors 0.96 0.98 0.98 -- ok op alter k12 0.96 alter k23 0.99 alter k13 0.9898988607 echo coupling factors 0.96 0.98 0.9898988607 -- ok op alter k12 0.96 alter k23 0.99 alter k13 0.9898988608 echo coupling factors 0.96 0.98 0.9898988608 -- not ok op alter k12 1 alter k23 1 alter k13 1 echo coupling factors 1 1 1 -- not ok op echo coupling factors 1.01 1 1 -- not ok alter k12 1.01 set indverbosity = 2 echo "op with indverbosity=2" op set indverbosity = 1 echo "op with indverbosity=1" op set indverbosity = 0 echo "op with indverbosity=0" op destroy all remcirc quit .endc .END tmpk8ny_4pz/examples/inductive-systems/positive-definite-1.cir0000644000175000017500000000133613546075722024764 0ustar carstencarsten* indentify non-viable inductive systems (2x2 case) * (compile (concat "../../../w32/src/ngspice " buffer-file-name) t) * (compile (concat "valgrind --track-origins=yes --leak-check=full --show-reachable=yes ../../../w32/src/ngspice " buffer-file-name) t) .subckt ind2 a1 a2 b1 b2 L11=0 L22=0 L12=0 R1 a1 n1 1k L1 n1 a2 {L11} L2 n2 b2 {L22} R2 n2 a2 1k K12 L1 L2 {L12/sqrt(abs(L11*L22))} .ends v1 a 0 dc 1 R1 a 0 1k R2 b 0 1k Xgood1 a 0 b 0 ind2 L11=1u L22=4u L12=1.98u Xbad2 a 0 b 0 ind2 L11=1u L22=4u L12=2.01u Xgood3 a 0 b 0 ind2 L11=1u L22=4u L12=-1.98u Xbad4 a 0 b 0 ind2 L11=1u L22=4u L12=-2.01u Xbad5 a 0 b 0 ind2 L11=1u L22=-4u L12=1n Xbad6 a 0 b 0 ind2 L11=-1u L22=4u L12=1n .control op remcirc quit 0 .endc .end tmpk8ny_4pz/examples/inductive-systems/positive-definite-3.cir0000644000175000017500000000147513546075722024772 0ustar carstencarsten* indentify non-viable inductive systems (4x4 case) * this excersices the "merging" case in muttemp.c * (compile (concat "../../../w32/src/ngspice " buffer-file-name) t) * (compile (concat "valgrind --track-origins=yes --leak-check=full --show-reachable=yes ../../../w32/src/ngspice " buffer-file-name) t) .subckt ind4 a b c d L11=0 L22=0 L33=0 L44=0 L12=0 L13=0 L14=0 L23=0 L24=0 L34=0 R1 a 1 1k R2 b 2 1k R3 c 3 1k R4 d 4 1k L1 a 0 {L11} L2 b 0 {L22} L3 c 0 {L33} L4 d 0 {L44} K13 L1 L3 {L13/sqrt(abs(L11*L33))} K14 L1 L4 {L14/sqrt(abs(L11*L44))} K23 L2 L3 {L23/sqrt(abs(L22*L33))} K24 L2 L4 {L24/sqrt(abs(L22*L44))} K12 L1 L2 {L12/sqrt(abs(L11*L22))} K34 L3 L4 {L34/sqrt(abs(L33*L44))} .ends Xgood1 a b c d ind4 L11=1u L22=4u L33=3u L44=5u L12=1n L13=1n L14=1n L23=1n L24=1n L34=1n .control op remcirc quit 0 .endc .end tmpk8ny_4pz/examples/inductive-systems/positive-definite-2.cir0000644000175000017500000000134013546075722024760 0ustar carstencarsten* indentify non-viable inductive systems (3xx case) * (compile (concat "../../../w32/src/ngspice " buffer-file-name) t) * (compile (concat "valgrind --track-origins=yes --leak-check=full --show-reachable=yes ../../../w32/src/ngspice " buffer-file-name) t) .subckt ind3 a b c L11=10u L22=11u L33=10u K12=0 K13=0 K23=0 R1 a n1 1k R2 b n2 1k R4 c n3 1k L1 n1 0 {L11} L2 n2 0 {L22} L3 n3 0 {L33} K12 L1 L2 {K12} K13 L1 L3 {K13} K23 L2 L3 {K23} .ends Xgood1 a b c ind3 Xgood2 a b c ind3 K12=0.96 K23=0.99 K13=0.98 Xgood3 a b c ind3 K12=0.96 K23=0.99 K13=0.9898988607 Xbad4 a b c ind3 K12=0.96 K23=0.99 K13=0.9898988608 Xborder5 a b c ind3 K12=1 K23=1 K13=1 Xbad6 a b c ind3 K12=1.01 K23=1 K13=1 .control op remcirc quit 0 .endc .end tmpk8ny_4pz/examples/vdmos/0000755000175000017500000000000013546075722016126 5ustar carstencarstentmpk8ny_4pz/examples/vdmos/IXTH80N20L-IXTH48P20P-quasisat.cir0000644000175000017500000000303313546075722023324 0ustar carstencarstenVDMOS Test of quasi saturation IXTH80N20L IXTH48P20P * Original VDMOS model parameters taken from David Zan, * http://www.diyaudio.com/forums/software-tools/266655-power-mosfet-models-ltspice-post5300643.html * The Quasi-saturation is added for demonstration only, it is not aligned with the data sheets * and is for sure exaggerated, at least for the IXTH80N20L mn1 d1 g1 s1 IXTH80N20L vd1 d1 0 1 vg1 g1 0 1 vs1 s1 0 0 mp2 d2 g2 s2 IXTH48P20P vd2 d2 0 1 vg2 g2 0 1 vs2 s2 0 0 .control dc vd1 -1 100 0.05 vg1 3 10 1 altermod mn1 rq=0 altermod mn1 Lambda=2m dc vd1 -1 100 0.05 vg1 3 10 1 plot dc1.vs1#branch vs1#branch dc vd2 1 -100 -0.05 vg2 -3 -10 -1 altermod mp2 rq=0 altermod mp2 Lambda=5m dc vd2 1 -100 -0.05 vg2 -3 -10 -1 plot dc3.vs2#branch vs2#branch .endc * David Zan, (c) 2017/03/02 Preliminary .MODEL IXTH80N20L VDMOS Nchan Vds=200 + VTO=4 KP=15 + Lambda=3m $ will be reset by altermod to original 2m + Mtriode=0.4 + subslope=120m + subshift=160m + Rs=5m Rd=10m Rds=200e6 + Cgdmax=9000p Cgdmin=300p A=0.25 + Cgs=5500p Cjo=11000p + Is=10e-6 Rb=8m + BV=200 IBV=250e-6 + NBV=4 + TT=250e-9 + vq=100 + rq=0.5 $ will be reset by altermod to original 0 * David Zan, (c) 2017/03/02 Preliminary .MODEL IXTH48P20P VDMOS Pchan Vds=200 + VTO=-4 KP=10 + Lambda=7m $ will be reset by altermod to original 5m + Mtriode=0.3 + Ksubthres=120m + Rs=10m Rd=20m Rds=200e6 + Cgdmax=6000p Cgdmin=100p A=0.25 + Cgs=5000p Cjo=9000p + Is=2e-6 Rb=20m + BV=200 IBV=250e-6 + NBV=4 + TT=260e-9 + vq=100 + rq=0.5 $ will be reset by altermod to original 0 .endtmpk8ny_4pz/examples/vdmos/inv_vdmos_dc.cir0000644000175000017500000000072213546075722021300 0ustar carstencarsten*****************==== Inverter ====******************* *********** VDMOS inverter dc **************************** vdd 1 0 5 vss 4 0 0 .subckt inv out in vdd vss mp1 out in vdd p1 mn1 out in vss n1 .ends xinv 3 2 1 4 inv Vin 2 0 0 .dc Vin 0 5 0.05 .control run * current and output in a single plot plot v(2) v(3) vss#branch .endc .model N1 vdmos cgdmin=0.2p cgdmax=1p a=2 cgs=0.5p rg=5k .model P1 vdmos cgdmin=0.2p cgdmax=1p a=2 cgs=0.5p rg=5k pchan .end tmpk8ny_4pz/examples/vdmos/VDMOS-DIO.cir0000644000175000017500000000123413546075722020126 0ustar carstencarstenCapacitance and current comparison between models d and bulk diode in vdmos D1 ad kd dio .model dio d TT=1371n IS=2.13E-08 N=1.564 RS=0.0038 m=0.548 Vj=0.1 Cjo=3200pF Va ad 0 dc 0 pwl(0 -2 2.5 0.5) Vk kd 0 0 m1 d g s IXTP6N100D2 .MODEL IXTP6N100D2 VDMOS(KP=2.9 RS=0.1 RD=1.3 RG=1 VTO=-2.7 LAMBDA=0.03 CGDMAX=3000p CGDMIN=2p CGS=2915p a=1 TT=1371n IS=2.13E-08 N=1.564 RB=0.0038 m=0.548 Vj=0.1 Cjo=3200pF ksubthres=0.1) Vd d 0 dc 0 pwl(0 2 2.5 -0.5) Vg g 0 -5 $ transistor is off Vs s 0 0 .tran 10m 2.5 .control save @d1[cd] @m1[cds] all run plot abs(i(Vk)) abs(i(Vs)) ylog plot @d1[cd] @m1[cds] *plot abs(i(Vk)) - abs(i(Vs)) *plot @d1[cd] - @m1[cds] .endc .end tmpk8ny_4pz/examples/vdmos/IXTP6N100D2-cap.cir0000644000175000017500000000062613546075722020771 0ustar carstencarstenTest of VDMOS gate-source and gate-drain capacitance m1 d g s IXTP6N100D2 .MODEL IXTP6N100D2 VDMOS(KP=2.9 RS=0.1 RD=1.3 RG=1 VTO=-2.7 LAMBDA=0.03 CGDMAX=3000p CGDMIN=2p CGS=2915p a=1 TT=1371n IS=2.13E-08 N=1.564 RB=0.0038 m=0.548 Vj=0.1 Cjo=3200pF ksubthres=0.1) vd d 0 dc 5 vg g 0 pwl (0 -3 1 3) vs s 0 0 .control save all @m1[cgd] @m1[cgs] tran 1m 1 plot vs#branch plot @m1[cgd] @m1[cgs] .endc .endtmpk8ny_4pz/examples/vdmos/vdmosp-out-mtr.cir0000644000175000017500000000154713546075722021551 0ustar carstencarstenVDMOS p channel output m1 d g s IRF7233 .model IRF7233 VDMOS(pchan Rg=3 Rd=8m Rs=6m Vto=-1 Kp=70 Cgdmax=2n Cgdmin=.25n Cgs=3.3n Cjo=.98n Is=98p Rb=10m mfg=International_Rectifier Vds=-12 Ron=20m Qg=49n) m2 d g s2 IRF7233_2 .model IRF7233_2 VDMOS(pchan mtriode=2 Rg=3 Rd=8m Rs=6m Vto=-1 Kp=70 Cgdmax=2n Cgdmin=.25n Cgs=3.3n Cjo=.98n Is=98p Rb=10m mfg=International_Rectifier Vds=-12 Ron=20m Qg=49n) m3 d g s3 IRF7233_3 .model IRF7233_3 VDMOS(pchan mtriode=2 Rg=3 Rd=8m Rs=6m Vto=-1 Kp=70 Cgdmax=2n Cgdmin=.25n Cgs=3.3n Cjo=.98n Is=98p Rb=10m mfg=International_Rectifier Vds=-12 Ron=20m Qg=49n ksubthres=0.1) vd d 0 -5 vg g 0 -5 vs s 0 0 vs2 s2 0 0 vs3 s3 0 0 .control dc vd -12 1 0.05 vg 0 -5 -1 plot vs#branch vs2#branch vs3#branch dc vg 0 -4 -0.05 vd -1 -12 -2 plot vs#branch vs2#branch vs3#branch plot log(-vs#branch) log(-vs2#branch) log(-vs3#branch) .endc .end tmpk8ny_4pz/examples/vdmos/ro_11_vdmos.cir0000644000175000017500000000134613546075722020762 0ustar carstencarsten*****************==== 11-Stage CMOS RO ====******************* *********** MOS1 or VDMOS ************************************ vdd 1 0 5.0 .subckt inv out in vdd vss mp1 out in vdd p1 l=2u w=20u mn1 out in vss n1 l=2u w=10u c1 out vss 0.2p .ends xinv1 3 2 1 0 inv xinv2 4 3 1 0 inv xinv3 5 4 1 0 inv xinv4 6 5 1 0 inv xinv5 7 6 1 0 inv xinv6 8 7 1 0 inv xinv7 9 8 1 0 inv xinv8 10 9 1 0 inv xinv9 2 10 1 0 inv .model N1 vdmos cgdmin=0.05p cgdmax=0.2p a=1.2 cgs=0.15p rg=10 kp=2e-5 rb=1e7 cjo=1n subslope=0.2 .model P1 vdmos cgdmin=0.05p cgdmax=0.2p a=1.2 cgs=0.15p rg=10 kp=2e-5 rb=1e7 cjo=1n pchan subslope=0.2 .tran 0.1n 1u .control run rusage * current and output in a single plot plot v(6) 1000*(-I(vdd)) ylimit -1 6 .endc .end tmpk8ny_4pz/examples/vdmos/mtriode_nch.sp0000644000175000017500000000062013546075722020763 0ustar carstencarstenVDMOS Mtriode Test M1 D G 0 IRFP240 VG G 0 1V VD D 0 0.1V .control foreach myMTRIODE 0.5 1.0 1.5 altermod @IRFP240[MTRIODE]=$myMTRIODE dc vd 0 30 0.1 vg 4 10 1 end plot abs(dc1.vd#branch) abs(dc2.vd#branch) abs(dc3.vd#branch) .endc .model IRFP240 VDMOS(Rg=3 Vto=4 Rd=72m Rs=18m Rb=36m Kp=4.9 Lambda=.03 Cgdmax=1.34n Cgdmin=.1n Cgs=1.25n Cjo=1.25n Is=67p ksubthres=.1 Vds=200 Ron=180m Qg=70n) .end tmpk8ny_4pz/examples/vdmos/inv_vdmos.cir0000644000175000017500000000075313546075722020636 0ustar carstencarsten*****************==== Inverter ====******************* *********** VDMOS **************************** vdd 1 0 5 .subckt inv out in vdd vss mp1 out in vdd p1 mn1 out in vss n1 .ends xinv 3 2 1 0 inv Vin 2 0 Pulse (0 5 10n 10n 10n 140n 300n) .tran 1n 1u .control run * current and output in a single plot plot v(2) v(3) .endc .model N1 vdmos cgdmin=0.2p cgdmax=1p a=2 cgs=0.5p rg=5k rb=1e9 cjo=0.1p .model P1 vdmos cgdmin=0.2p cgdmax=1p a=2 cgs=0.5p rg=5k rb=1e9 cjo=0.1p pchan .end tmpk8ny_4pz/examples/vdmos/vdmosp-out.cir0000644000175000017500000000030013546075722020733 0ustar carstencarstenVDMOS p channel output m1 d g s p1 .model p1 vdmos pchan vto=-1.2 is=10n kp=2 bv=-12 rb=1k vd d 0 -5 vg g 0 -5 vs s 0 0 .dc vd -15 1 0.1 vg 0 -5 -1 .control run plot vs#branch .endc .end tmpk8ny_4pz/examples/vdmos/theta_nch.sp0000644000175000017500000000066013546075722020431 0ustar carstencarstenVDMOS Mobility Reduction M1 D G 0 IRFP240 VG G 0 9V VD D 0 1V .control foreach myTHETA 0.1 0.2 0.3 0.4 0.5 altermod @IRFP240[THETA]=$myTHETA dc VG 2 9 0.1 end plot abs(dc1.vd#branch) abs(dc2.vd#branch) abs(dc3.vd#branch) abs(dc4.vd#branch) abs(dc5.vd#branch) .endc .model IRFP240 VDMOS(Rg=3 Vto=4 Rd=72m Rs=18m Rb=36m Kp=4.9 Lambda=.03 Cgdmax=1.34n Cgdmin=.1n Cgs=1.25n Cjo=1.25n Is=67p ksubthres=.1 Vds=200 Ron=180m Qg=70n) .end tmpk8ny_4pz/examples/vdmos/vdmos-out_ir_mtr.cir0000644000175000017500000000144713546075722022144 0ustar carstencarstenVDMOS output *m1 d g s IRFZ48Z m1 d g s SQ7002K m2 d g s2 SQ7002K_2 *.model IRFZ48Z VDMOS (Rg = 1.77 Vto=4 Rd=1.85m Rs=0.0m Rb=3.75m Kp=25 Cgdmax=2.1n Cgdmin=0.05n Cgs=1.8n Cjo=0.55n Is=2.5p tt=20n mfg=International_Rectifier Vds=55 Ron=8.6m Qg=43n) .MODEL SQ7002K VDMOS(KP=0.46 RS=0.8751 RG=150 VTO=1.8 rds=50Meg LAMBDA=60m CGDMAX=20p CGDMIN=2p CGS=17p TT=500n a=0.47 IS=3.25n N=1.744 RB=0.118608 m=0.348 Vj=0.23 Cjo=14pF mtriode=1 Vds=60 Ron=1 Qg=0.9n mfg=VISHAY) .MODEL SQ7002K_2 VDMOS(KP=0.46 RS=0.8751 RG=150 VTO=1.8 rds=50Meg LAMBDA=60m CGDMAX=20p CGDMIN=2p CGS=17p TT=500n a=0.47 IS=3.25n N=1.744 RB=0.118608 m=0.348 Vj=0.23 Cjo=14pF mtriode=2 Vds=60 Ron=1 Qg=0.9n mfg=VISHAY) vd d 0 1 vg g 0 1 vs s 0 0 vs2 s2 0 0 .dc vd -1 7 0.05 vg 3 7 1 .control run plot vs#branch vs2#branch .endc .end tmpk8ny_4pz/examples/vdmos/IXTP6N100D2-n-weak-inv.cir0000644000175000017500000000200013546075722022166 0ustar carstencarstenVDMOS output m1 d g s IXTP6N100D2 m2 d g s2 IXTP6N100D2_2 * LTSPICE model parameters *.MODEL IXTP6N100D2 VDMOS(KP=2.9 RS=0.1 RD=1.3 RG=1 VTO=-2.7 LAMBDA=0.03 CGDMAX=3000p CGDMIN=2p CGS=2915p TT=1371n a=1 IS=2.13E-08 N=1.564 RB=0.0038 m=0.548 *Vj=0.1 Cjo=3200pF ksubthres=0.1) * equivalent ngspice model parameters .MODEL IXTP6N100D2_2 VDMOS(KP=2.9 RS=0.1 RD=1.3 RG=1 VTO=-2.7 LAMBDA=0.03 CGDMAX=3000p CGDMIN=2p CGS=2915p TT=1371n a=1 IS=2.13E-08 N=1.564 RB=0.0038 m=0.548 Vj=0.1 Cjo=3200pF ksubthres=39m) * equivalent ngspice model parameters, trying to make output similar to data sheet Fig. 2 .MODEL IXTP6N100D2 VDMOS(KP=6 RS=0.1 RD=1.3 RG=1 VTO=-2.7 LAMBDA=0.007 CGDMAX=3000p CGDMIN=2p CGS=2915p TT=1371n a=1 IS=2.13E-08 N=1.564 RB=0.0038 m=0.548 Vj=0.1 Cjo=3200pF ksubthres=39m rq=4 vq=200 mtriode=0.1) vd d 0 -0.6 vg g 0 -2.3 vs s 0 0 vs2 s2 0 0 .control dc vg -3.1 -2.1 0.01 vd 0.2 1 0.2 plot vs#branch plot vs#branch ylog dc vd 0 60 0.1 vg -3 5 1 plot vs#branch vs2#branch xlimit 0 60 ylimit 0 14 .endc .end tmpk8ny_4pz/examples/vdmos/vdmos-out.cir0000644000175000017500000000052113546075722020560 0ustar carstencarstenVDMOS output m1 d g s n1 *.model n1 vdmos rb=0.05 is=10n kp=2 bv=12 rd=0.1 .model N1 vdmos vto=1 cgdmin=0.05p cgdmax=0.2p a=1.2 cgs=0.15p rg=10 kp=2e-4 rb=1e4 is=1e-9 bv=12 cjo=1p subslope=0.1 vd d 0 1 vg g 0 1 vs s 0 0 .control dc vd -2 15 0.05 vg 0 5 1 plot vs#branch dc vg 0 5 0.05 vd 0.5 2.5 0.5 plot vs#branch ylog .endc .end tmpk8ny_4pz/examples/vdmos/VDMOS-DIO-AC.cir0000644000175000017500000000117613546075722020414 0ustar carstencarstenCapacitance and current comparison between models d and bulk diode in vdmos D1 ad kd dio .model dio d TT=1371n IS=2.13E-08 N=1.564 RS=0.0038 m=0.548 Vj=0.1 Cjo=3200pF Va ad 0 DC 0.5 AC 1 $ DC -20 Vk kd 0 0 m1 d g s IXTP6N100D2 .MODEL IXTP6N100D2 VDMOS(KP=2.9 RS=0.1 RD=1.3 RG=1 VTO=-2.7 LAMBDA=0.03 CGDMAX=3000p CGDMIN=2p CGS=2915p a=1 TT=1371n IS=2.13E-08 N=1.564 RB=0.0038 m=0.548 Vj=0.1 Cjo=3200pF ksubthres=0.1 subslope=43m subshift=-25m) Vd d 0 DC -0.5 AC 1 $ DC 20 Vg g 0 -5 $ transistor is off Vs s 0 0 .ac dec 10 1 100K .control save @d1[id] @m1[id] all run plot mag(i(Vs)) mag (i(Vk)) plot ph(i(Vs)) ph(i(Vk)) .endc .end tmpk8ny_4pz/examples/vdmos/vdmos-out_ir.cir0000644000175000017500000000046613546075722021262 0ustar carstencarstenVDMOS output m1 d g s IRFZ48Z .model IRFZ48Z VDMOS (Rg = 1.77 Vto=4 Rd=1.85m Rs=0.0m Rb=3.75m Kp=25 Cgdmax=2.1n Cgdmin=0.05n Cgs=1.8n Cjo=0.55n Is=2.5p tt=20n mfg=International_Rectifier Vds=55 Ron=8.6m Qg=43n) vd d 0 1 vg g 0 1 vs s 0 0 .dc vd -1 15 0.05 vg 3 7 1 .control run plot vs#branch .endc .end tmpk8ny_4pz/examples/plot/0000755000175000017500000000000013546075722015754 5ustar carstencarstentmpk8ny_4pz/examples/plot/test-small-plot.cir0000644000175000017500000000502513546075722021516 0ustar carstencarstenresolution test for plotting .control let xvar = vector(4) let yvar = vector(4) * -------------------- * integer let yvar[0] = 1.0 let yvar[1] = 1.0 let yvar[2] = 1.0 let yvar[3] = 1.0 plot yvar vs xvar title integer 1 * -------------------- * 14 digits let yvar[0] = 1.0 let yvar[1] = 1.00000000000001 let yvar[2] = 0.99999999999999 let yvar[3] = 1.0 plot yvar vs xvar title '14 digits' * -------------------- * 15 digits let yvar[0] = 1.0 let yvar[1] = 1.000000000000001 let yvar[2] = 0.999999999999999 let yvar[3] = 1.0 plot yvar vs xvar title '15 digits' * -------------------- * 16 digits let yvar[0] = 1.0 let yvar[1] = 1.0000000000000001 let yvar[2] = 0.9999999999999999 let yvar[3] = 1.0 plot yvar vs xvar title '16 digits' * -------------------- * 14 digits plus exponent let yvar[0] = 1.0e-14 let yvar[1] = 1.00000000000001e-14 let yvar[2] = 0.99999999999999e-14 let yvar[3] = 1.0e-14 plot yvar vs xvar title '14 digits plus exponent' * -------------------- * 15 digits plus exponent let yvar[0] = 1.0e-14 let yvar[1] = 1.000000000000001e-14 let yvar[2] = 0.999999999999999e-14 let yvar[3] = 1.0e-14 plot yvar vs xvar title '15 digits plus exponent' * -------------------- * 16 digits plus exponent let yvar[0] = 1.0e-14 let yvar[1] = 1.0000000000000001e-14 let yvar[2] = 0.9999999999999999e-14 let yvar[3] = 1.0e-14 plot yvar vs xvar title '16 digits plus exponent' * -------------------- * negative 14 digits plus exponent let yvar[0] = -1.0e-14 let yvar[1] = -1.00000000000001e-14 let yvar[2] = -0.99999999999999e-14 let yvar[3] = -1.0e-14 plot yvar vs xvar title 'neg 14 digits plus exponent' * -------------------- * negative 15 digits plus exponent let yvar[0] = -1.0e-14 let yvar[1] = -1.000000000000001e-14 let yvar[2] = -0.999999999999999e-14 let yvar[3] = -1.0e-14 plot yvar vs xvar title 'neg 15 digits plus exponent' * -------------------- * negative 16 digits plus exponent let yvar[0] = -1.0e-14 let yvar[1] = -1.0000000000000001e-14 let yvar[2] = -0.9999999999999999e-14 let yvar[3] = -1.0e-14 plot yvar vs xvar title 'neg 16 digits plus exponent' * -------------------- * 15 digits plus big exponent let yvar[0] = 1.0e-200 let yvar[1] = 1.000000000000001e-200 let yvar[2] = 0.999999999999999e-200 let yvar[3] = 1.0e-200 plot yvar vs xvar title '15 digits plus big exponent' * -------------------- * negative 15 digits plus big exponent let yvar[0] = -1.0e-200 let yvar[1] = -1.000000000000001e-200 let yvar[2] = -0.999999999999999e-200 let yvar[3] = -1.0e-200 plot yvar vs xvar title 'neg 15 digits plus big exponent' .endc .end tmpk8ny_4pz/examples/transient-noise/0000755000175000017500000000000013546075722020120 5ustar carstencarstentmpk8ny_4pz/examples/transient-noise/rts-1.cir0000644000175000017500000000105413546075722021565 0ustar carstencarsten* white noise, 1/f noise, RTS noise * voltage source VRTS2 13 12 DC 0 trnoise(0 0 0 0 5m 18u 30u) VRTS3 11 0 DC 0 trnoise(0 0 0 0 10m 20u 40u) VALL 12 11 DC 0 trnoise(1m 1u 1.0 0.1m 15m 22u 50u) VW1of 21 0 DC trnoise(1m 1u 1.0 0.1m) * current source IRTS2 10 0 DC 0 trnoise(0 0 0 0 5m 18u 30u) IRTS3 10 0 DC 0 trnoise(0 0 0 0 10m 20u 40u) IALL 10 0 DC 0 trnoise(1m 1u 1.0 0.1m 15m 22u 50u) R10 10 0 1 IW1of 9 0 DC trnoise(1m 1u 1.0 0.1m) Rall 9 0 1 * 500000 sample points .tran 1u 500u .control run plot v(13) v(21) plot v(10) v(9) .endc .end tmpk8ny_4pz/examples/transient-noise/noi-ring51-demo.cir0000644000175000017500000000346413546075722023440 0ustar carstencarsten* 51 stage Ring-Osc. BSIM3, transient noise * will need 90 sec on a i7 860 with 4 threads * for better noise analysis simulation time may be made larger than 200n * closes the loop between inverters xinv1 and xinv5 vin in out dc 0.5 pulse 0.5 0 0.1n 5n 1 1 1 vdd dd 0 dc 0 pulse 0 2.2 0 1n 1 1 1 vss ss 0 dc 0 ve sub 0 dc 0 vpe well 0 2.2 * noisy inverters xiinv2 dd ss sub well out25 out50 inv253 xiinv1 dd ss sub well in out25 inv253 *three very noisy inverters xiinv51 dd ss sub well out50 out51 inv1_2 xiinv52 dd ss sub well out51 out52 inv1_2 xiinv53 dd ss sub well out52 out inv1_2 *output amplifier xiinv11 dd ss sub well out25 bufout inv2 cout bufout ss 0.2pF .option itl1=500 gmin=1e-15 itl4=10 noacct * .dc vdd 0 2 0.01 .tran 8p 200n .save in bufout v(t1) .include modelcard.nmos .include modelcard.pmos .include noilib-demo.h .control unset ngdebug * first run save bufout $ needed for restricting memory usage rusage run rusage plot bufout xlimit 90n 95n linearize fft bufout echo start noise in plot $curplot echo * next run * reset save bufout * original noise parameters 0.05 8p 1.0 0.001 alter @v.xiinv51.vn1[trnoise] = [ 0 0 0 0 ] $ no noise alter @v.xiinv52.vn1[trnoise] = [ 0 0 0 0 ] $ no noise alter @v.xiinv53.vn1[trnoise] = [ 0 0 0 0 ] $ no noise run rusage plot bufout xlimit 90n 95n linearize fft bufout echo no noise in plot $curplot echo * next run * reset save bufout alter @v.xiinv51.vn1[trnoise] = [ 0.1 8p 1.5 0.002 ] $ more noise alter @v.xiinv52.vn1[trnoise] = [ 0.1 8p 1.5 0.002 ] $ more noise alter @v.xiinv53.vn1[trnoise] = [ 0.1 8p 1.5 0.002 ] $ more noise run rusage plot bufout xlimit 90n 95n linearize fft bufout echo more noise in plot $curplot echo set color0=white set color1=black plot mag(sp6.bufout) mag(sp2.bufout) mag(sp4.bufout) xlimit 0 2G ylimit 1e-7 1 ylog .endc .end tmpk8ny_4pz/examples/transient-noise/noi-sc-tr.cir0000644000175000017500000000166213546075722022437 0ustar carstencarsten* simple sample & hold, transient noise * switch control * PULSE(V1 V2 TD TR TF PW PER) vgate1 ga1 0 dc 0 pulse (0 1 0 10n 10n 90n 200n) Switch1 1 2 ga1 0 smodel1 * noisy input * rms value white, time step, exponent < 2, rms value 1/f vin 1 0 dc 0 trnoise 0.1m 0.2n 1 0.1m *vin 1 0 dc 0 trnoise 0.1m 0.2n 0 0.1m * output c2 2 0 10p * second S&H vgate2 ga2 0 dc 0 pulse (0 1 140n 10n 10n 30n 200n) *Buffer EXXXXXXX N+ N- NC+ NC- VALUE e1 4 0 2 0 1 Switch2 4 3 ga2 0 smodel2 c3 3 0 10p .option itl1=500 gmin=1e-15 itl4=10 acct .model smodel1 sw vt=0.5 ron=100 .model smodel2 sw vt=0.5 ron=100 .tran 0.4n 100u .control unset ngdebug set filetype=ascii rusage run rusage all write noi_test.out v(1) plot v(2) v(3) xlimit 4u 5u plot v(ga1) v(ga2) xlimit 4u 5u linearize *rms v(1) fft v(3) plot mag(v(3)) loglog xlimit 1e4 1e8 ylimit 1e-10 1e-4 setplot tran1 linearize psd 101 v(3) plot mag(v(3)) xlimit 0 3e7 ylabel V^2/Hz .endc .end tmpk8ny_4pz/examples/transient-noise/modelcard.pmos0000644000175000017500000000156313546075722022757 0ustar carstencarsten.model P1 PMOS +Level= 8 version=3.3.0 +Tnom=27.0 +Nch= 3.533024E+17 Tox=9E-09 Xj=1.00000E-07 +Lint=6.23e-8 Wint=1.22e-7 +Vth0=-.6732829 K1= .8362093 K2=-8.606622E-02 K3= 1.82 +Dvt0= 1.903801 Dvt1= .5333922 Dvt2=-.1862677 +Nlx= 1.28e-8 W0= 2.1e-6 +K3b= -0.24 Prwg=-0.001 Prwb=-0.323 +Vsat= 103503.2 Ua= 1.39995E-09 Ub= 1.e-19 Uc=-2.73e-11 + Rdsw= 460 U0= 138.7609 +A0= .4716551 Ags=0.12 +Keta=-1.871516E-03 A1= .3417965 A2= 0.83 +Voff=-.074182 NFactor= 1.54389 Cit=-1.015667E-03 +Cdsc= 8.937517E-04 +Cdscb= 1.45e-4 Cdscd=1.04e-4 + Dvt0w=0.232 Dvt1w=4.5e6 Dvt2w=-0.0023 +Eta0= 6.024776E-02 Etab=-4.64593E-03 +Dsub= .23222404 +Pclm= .989 Pdiblc1= 2.07418E-02 Pdiblc2= 1.33813E-3 +Drout= .3222404 Pscbe1= 118000 Pscbe2= 1E-09 +Pvag= 0 +kt1= -0.25 kt2= -0.032 prt=64.5 +At= 33000 +Ute= -1.5 +Ua1= 4.312e-9 Ub1= 6.65e-19 Uc1= 0 +Kt1l=0 tmpk8ny_4pz/examples/transient-noise/noilib-demo.h0000644000175000017500000000401013546075722022462 0ustar carstencarsten * standard inverter made noisy *.subckt inv1 dd ss sub well in out *vn1 out outi dc 0 noise 0.1 0.3n 1.0 0.1 *mn1 outi in ss sub n1 w=2u l=0.25u AS=3p AD=3p PS=4u PD=4u *mp1 outi in dd well p1 w=4u l=0.25u AS=7p AD=7p PS=6u PD=6u *.ends inv1 * standard no noise inverter .subckt inv1 dd ss sub well in out mn1 out in ss sub n1 w=2u l=0.25u AS=3p AD=3p PS=4u PD=4u mp1 out in dd well p1 w=4u l=0.25u AS=7p AD=7p PS=6u PD=6u .ends inv1 * standard no noise inverter .subckt inv2 dd ss sub well in out mn1 out in ss sub n1 w=5u l=0.25u AS=7p AD=7p PS=7u PD=7u mp1 out in dd well p1 w=10u l=0.25u AS=12p AD=12p PS=12u PD=12u .ends inv2 * very noisy inverter (noise on vdd and well) .subckt inv1_1 dd ss sub well in out vn1 dd idd dc 0 trnoise 0.05 0.05n 1 0.05 vn2 well iwell dc 0 trnoise 0.05 0.05n 1 0.05 mn1 out in ss sub n1 w=2u l=0.25u AS=3p AD=3p PS=4u PD=4u mp1 out in idd iwell p1 w=4u l=0.25u AS=7p AD=7p PS=6u PD=6u *Cout out 0 0.1p .ends inv1_1 * another very noisy inverter .subckt inv1_2 dd ss sub well in out vn1 out outi dc 0 trnoise 0.05 8p 1.0 0.001 mn1 outi in ss sub n1 w=2u l=0.25u AS=3p AD=3p PS=4u PD=4u mp1 outi in dd well p1 w=4u l=0.25u AS=7p AD=7p PS=6u PD=6u *Cout out 0 0.1p .ends inv1_2 * another very noisy inverter with current souces parallel to transistor .subckt inv13 dd ss sub well in outi in1 ss outi dc 0 noise 200u 0.05n 1.0 50u mn1 outi in ss sub n1 w=2u l=0.25u AS=3p AD=3p PS=4u PD=4u in2 dd outi dc 0 noise 200u 0.05n 1.0 50u mp1 outi in dd well p1 w=4u l=0.25u AS=7p AD=7p PS=6u PD=6u *Cout out 0 0.1p .ends inv13 .subckt inv53 dd ss sub well in out xinv1 dd ss sub well in 1 inv1 xinv2 dd ss sub well 1 2 inv1 xinv3 dd ss sub well 2 3 inv1 xinv4 dd ss sub well 3 4 inv1 xinv5 dd ss sub well 4 out inv1 .ends inv53 .subckt inv253 dd ss sub well in out xinv1 dd ss sub well in 1 inv53 xinv2 dd ss sub well 1 2 inv53 xinv3 dd ss sub well 2 3 inv53 xinv4 dd ss sub well 3 4 inv53 xinv5 dd ss sub well 4 out inv53 .ends inv253 tmpk8ny_4pz/examples/transient-noise/modelcard.nmos0000644000175000017500000000224513546075722022753 0ustar carstencarsten*model = bsim3v3 *Berkeley Spice Compatibility * Lmin= .35 Lmax= 20 Wmin= .6 Wmax= 20 .model N1 NMOS +Level= 8 version=3.3.0 +Tnom=27.0 +Nch= 2.498E+17 Tox=9E-09 Xj=1.00000E-07 +Lint=9.36e-8 Wint=1.47e-7 +Vth0= .6322 K1= .756 K2= -3.83e-2 K3= -2.612 +Dvt0= 2.812 Dvt1= 0.462 Dvt2=-9.17e-2 +Nlx= 3.52291E-08 W0= 1.163e-6 +K3b= 2.233 +Vsat= 86301.58 Ua= 6.47e-9 Ub= 4.23e-18 Uc=-4.706281E-11 +Rdsw= 650 U0= 388.3203 wr=1 +A0= .3496967 Ags=.1 B0=0.546 B1= 1 + Dwg = -6.0E-09 Dwb = -3.56E-09 Prwb = -.213 +Keta=-3.605872E-02 A1= 2.778747E-02 A2= .9 +Voff=-6.735529E-02 NFactor= 1.139926 Cit= 1.622527E-04 +Cdsc=-2.147181E-05 +Cdscb= 0 Dvt0w = 0 Dvt1w = 0 Dvt2w = 0 + Cdscd = 0 Prwg = 0 +Eta0= 1.0281729E-02 Etab=-5.042203E-03 +Dsub= .31871233 +Pclm= 1.114846 Pdiblc1= 2.45357E-03 Pdiblc2= 6.406289E-03 +Drout= .31871233 Pscbe1= 5000000 Pscbe2= 5E-09 Pdiblcb = -.234 +Pvag= 0 delta=0.01 + Wl = 0 Ww = -1.420242E-09 Wwl = 0 + Wln = 0 Wwn = .2613948 Ll = 1.300902E-10 + Lw = 0 Lwl = 0 Lln = .316394 + Lwn = 0 +kt1=-.3 kt2=-.051 +At= 22400 +Ute=-1.48 +Ua1= 3.31E-10 Ub1= 2.61E-19 Uc1= -3.42e-10 +Kt1l=0 Prt=764.3 tmpk8ny_4pz/examples/transient-noise/shot_ng.cir0000644000175000017500000000132313546075722022257 0ustar carstencarsten* Shot noise test with B source, diode * voltage on device (diode, forward) Vdev out 0 DC 0 PULSE(0.4 0.45 10u) * diode, forward direction, to be modeled with noise D1 mess 0 DMOD .model DMOD D IS=1e-14 N=1 X1 0 mess out ishot * device between 1 and 2 * new output terminals of device including noise: 1 and 3 .subckt ishot 1 2 3 * white noise source with rms 1V VNG 0 11 DC 0 TRNOISE(1 1n 0 0) *measure the current i(v1) V1 2 3 DC 0 * calculate the shot noise * sqrt(2*current*q*bandwidth) BI 1 3 I=sqrt(2*abs(i(v1))*1.6e-19*1e7)*v(11) .ends ishot * 20000 sample points .tran 1n 20u .control run plot (-1)*i(vdev) meas tran vdev_rms avg i(vdev) from=0u to=9.9u meas tran vdev_rms avg i(vdev) from=10.1u to=20u .endc .end tmpk8ny_4pz/examples/transient-noise/simple-noise.cir0000644000175000017500000000123113546075722023220 0ustar carstencarstentest of isrc trnoise and trrandom isrc, vsrc * 1/f noise current i1 1 2 DC 0 TRNOISE(0.05 8p 0 1.0 0.001) i2 2 0 DC 0 TRNOISE(0.05 8p 0 1.0 0.001) r1 1 2 1 r2 2 0 1 * gaussian (type=2) noise i3 3 0 DC 0 TRRANDOM(2 8p 0 1.0 0.01) R3 3 0 1 v4 4 0 DC 0 TRRANDOM(2 8p 0 1.0 0.01) *R4 4 0 1 .tran 8p 200n .control run alter @i1[trnoise] = [ 0.1 8p 0 1.5 0.002 ] $ more noise alter @i2[trnoise] = [ 0.1 8p 0 1.5 0.002 ] $ more noise alter @i3[trrandom] = [ 2 8p 0 1.5 0.02 ] $ more noise alter @v4[trrandom] = [ 2 8p 0 1.5 0.02 ] $ more noise run plot tran2.v(1) tran1.v(1) plot tran2.v(3) tran1.v(3) ylimit -6 6 plot tran2.v(4) tran1.v(4) ylimit -6 6 .endc .end tmpk8ny_4pz/examples/transient-noise/README0000644000175000017500000000041013546075722020773 0ustar carstencarsten* noi-ring51-demo ring oszillator with one noisy inverter (requires 45min on a i7 860) * noi-sc-tr noise source sampled * noise_vnoi just a few 1/f and white noise sources * shot_ng emulation of shot noise in a diode * rts-1.cir random telegraph signals noise tmpk8ny_4pz/examples/transient-noise/noise_vnoi.cir0000644000175000017500000000134213546075722022767 0ustar carstencarsten* Random noise test * internal noise source * one over f VNOI1 1 0 DC 0 TRNOISE(0n 1n 1.7 1n) VNOI2 2 0 DC 0 TRNOISE(0n 1n 1.4 1n) VNOI3 3 0 DC 0 TRNOISE(0n 1n 1.0 1n) VNOI4 4 0 DC 0 TRNOISE(0n 1n 0.5 1n) * white VNOI5 5 0 DC 0 TRNOISE(1n 1n 0 0) * both VNOI6 6 0 DC 0 TRNOISE(1n 1n 1 1n) * 250000 sample points .tran 1n 250u .control run plot v(1) v(2) v(3) v(4) v(5) v(6) plot v(1) v(2) v(3) v(4) v(5) v(6) xlimit 102.0u 102.01u ylimit -3n 3n linearize meas tran vavg5 AVG v(5) from=0 to=250u meas tran vpp5 PP v(5) from=0 to=250u meas tran vrms5 RMS v(5) from=0 to=250u fft v(1) v(2) v(3) v(4) v(5) v(6) plot mag(v(1)) mag(v(2)) mag(v(3)) mag(v(4)) mag(v(5)) loglog xlimit 1e3 1e9 plot mag(v(6)) loglog xlimit 1e3 1e9 .endc .end tmpk8ny_4pz/examples/p-to-n-examples/0000755000175000017500000000000013546075722017724 5ustar carstencarstentmpk8ny_4pz/examples/p-to-n-examples/rtest.lib0000644000175000017500000000006213546075722021553 0ustar carstencarstenR1 1 0 res R2 2 0 res R3 3 0 res .model res r r=1 tmpk8ny_4pz/examples/p-to-n-examples/MCP6041.txt0000644000175000017500000001334713546075722021427 0ustar carstencarsten.SUBCKT MCP6041 1 2 3 4 5 * | | | | | * | | | | Output * | | | Negative Supply * | | Positive Supply * | Inverting Input * Non-inverting Input * ******************************************************************************** * Software License Agreement * * * * The software supplied herewith by Microchip Technology Incorporated (the * * 'Company') is intended and supplied to you, the Company's customer, for use * * soley and exclusively on Microchip products. * * * * The software is owned by the Company and/or its supplier, and is protected * * under applicable copyright laws. All rights are reserved. Any use in * * violation of the foregoing restrictions may subject the user to criminal * * sanctions under applicable laws, as well as to civil liability for the * * breach of the terms and conditions of this license. * * * * THIS SOFTWARE IS PROVIDED IN AN 'AS IS' CONDITION. NO WARRANTIES, WHETHER * * EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED * * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO * * THIS SOFTWARE. THE COMPANY SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR * * SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. * ******************************************************************************** * * The following op-amps are covered by this model: * MCP6041,MCP6042,MCP6043,MCP6044 * * Revision History: * REV A: 07-Sep-01, Created model * REV B: 27-Aug-06, Added over temperature, improved output stage, * fixed overdrive recovery time * REV C: 09-Apr-07, Adjusted quiescent current to match spec * REV D: 27-Jul-07, Modified output impedance at expense of comparator operation * to correct transient response with capacitive load * * Recommendations: * Use PSPICE (other simulators may require translation) * For a quick, effective design, use a combination of: data sheet * specs, bench testing, and simulations with this macromodel * For high impedance circuits, set GMIN=100F in the .OPTIONS statement * * Supported: * Typical performance for temperature range (-40 to 125) degrees Celsius * DC, AC, Transient, and Noise analyses. * Most specs, including: offsets, DC PSRR, DC CMRR, input impedance, * open loop gain, voltage ranges, supply current, ... , etc. * Temperature effects for Ibias, Iquiescent, Iout short circuit * current, Vsat on both rails, Slew Rate vs. Temp and P.S. * * Not Supported: * Chip select (MCP6043) * Some Variation in specs vs. Power Supply Voltage * Monte Carlo (Vos, Ib), Process variation * Distortion (detailed non-linear behavior) * Behavior outside normal operating region * * Input Stage V10 3 10 -500M R10 10 11 69k R11 10 12 69k C12 1 0 6P C11 11 12 95P E12 71 14 POLY(6) 20 0 21 0 22 0 23 0 26 0 27 0 2.00M 10 10 29 29 1 1 G12 1 0 62 0 1m M12 11 14 15 15 NMI G13 1 2 62 0 20u M14 12 2 15 15 NMI G14 2 0 62 0 1m C14 2 0 6P I15 15 4 4U V16 16 4 -300M GD16 16 1 TABLE {V(16,1)} ((-100,-1p)(0,0)(1m,1u)(2m,1m)) V13 3 13 -300M GD13 2 13 TABLE {V(2,13)} ((-100,-1p)(0,0)(1m,1u)(2m,1m)) R71 1 0 20.0E12 R72 2 0 20.0E12 R73 1 2 20.0E12 I80 1 2 500E-15 * * Noise, PSRR, and CMRR I20 21 20 423U D20 20 0 DN1 D21 0 21 DN1 I22 22 23 1N R22 22 0 1k R23 0 23 1k G26 0 26 POLY(2) 3 0 4 0 0.00 -79.4U -39.8U R26 26 0 1 G27 0 27 POLY(2) 1 0 2 0 0 26u 26u R27 27 0 1 * * Open Loop Gain, Slew Rate G30 0 30 12 11 3.2 R30 30 0 1.00K I31 0 31 DC 338 R31 31 0 1 TC=2.25M,-15U GD31 30 0 TABLE {V(30,31)} ((-100,-1n)(0,0)(1m,0.1)(2m,2)) I32 32 0 DC 535 R32 32 0 1 TC=2.02M,-11U GD32 0 30 TABLE {V(30,32)} ((-2m,2)(-1m,0.1)(0,0)(100,-1n)) G33 0 33 30 0 1m R33 33 0 3K G34 0 34 33 0 1 R34 34 0 1K C34 34 0 100M G37 0 341 34 0 1m R341 341 0 1k C341 341 0 1.3N G371 0 37 341 0 1m R37 37 0 1K C37 37 0 3N G38 0 38 37 0 1m R38 39 0 1K L38 38 39 13M E38 35 0 38 0 1 G35 33 0 TABLE {V(35,3)} ((-1,-1n)(0,0)(3.4k,1n))(3.5k,1)) G36 33 0 TABLE {V(35,4)} ((-3.5k,-1)((-3.4k,-1n)(0,0)(1,1n)) * * Output Stage R80 50 0 100MEG G50 0 50 57 96 2 R58 57 96 0.50 R57 57 0 101k C58 5 0 2.00P G57 0 57 POLY(3) 3 0 4 0 35 0 0 10U 1.49U 9.1U GD55 55 57 TABLE {V(55,57)} ((-2m,-1)(-1m,-1m)(0,0)(10,1n)) GD56 57 56 TABLE {V(57,56)} ((-2m,-1)(-1m,-1m)(0,0)(10,1n)) E55 55 0 POLY(2) 3 0 51 0 -0.7M 1 -40M E56 56 0 POLY(2) 4 0 52 0 0.6M 1 -55M R51 51 0 1k R52 52 0 1k GD51 50 51 TABLE {V(50,51)} ((-10,-1n)(0,0)(1m,1m)(2m,1)) GD52 50 52 TABLE {V(50,52)} ((-2m,-1)(-1m,-1m)(0,0)(10,1n)) G53 3 0 POLY(1) 51 0 -4U 1M G54 0 4 POLY(1) 52 0 -4U -1M * * Current Limit G99 96 5 99 0 1 R98 0 98 1 TC=-6.9M G97 0 98 TABLE { V(96,5) } ((-11.0,-3.9M)(-1.00M,-3.87M)(0,0)(1.00M,3.23M)(11.0,3.26M)) E97 99 0 VALUE { V(98)*((V(3)-V(4))*1.39 + -1.5)} D98 4 5 DESD D99 5 3 DESD * * Temperature / Voltage Sensitive IQuiscent R61 0 61 1 TC=2.52M,-4.31U G61 3 4 61 0 1 G60 0 61 TABLE {V(3, 4)} + ((0,0)(700M,5.3N)(770M,10.0N)(1.00,480N) + (1.5,500N)(3.5,530N)(7.00,580N)) * * Temperature Sensistive offset voltage I73 0 70 DC 1uA R74 0 70 1 TC=1.5 E75 1 71 70 0 1 * * Temp Sensistive IBias I62 0 62 DC 1uA R62 0 62 REXP 210U * * Models .MODEL NMI NMOS(L=2.00U W=42.0U KP=20.0U LEVEL=1 ) .MODEL DESD D N=1 IS=1.00E-15 .MODEL DN1 D IS=1P KF=0.2F AF=1 .MODEL REXP RES TCE= 9 .ENDS MCP6041 tmpk8ny_4pz/examples/p-to-n-examples/op-test.cir0000644000175000017500000001160313546075722022017 0ustar carstencarstenOpAmp Test vddp vp 0 3 vddn vn 0 -3 *vin in 0 0 * OPA171 IN+ IN- VCC VEE OUT .include OPA171.txt Xopmap 0 ino vp vn outo OPA171 *Xopmap 0 ino outo vp vn CLC409 Rin in ino 1k Rfb ino outo 3k *.dc vin -1 1 0.1 vin in 0 DC 0 PULSE(-0.5 0.5 2uS 200NS 200NS 5uS 10uS) .tran 100n 10u .options vntol=10u .control run plot v(in) v(outo) .endc * * This is a Very Wide band, Low Distortion Monolithic * Current Feedback Op Amp. * * Version 1, Rev. A, Date 04-09-92, By RRS * * Connections: Non-Inverting Input * | Inverting Input * | | Output * | | | +Vcc * | | | | -Vcc * | | | | | .SUBCKT CLC409 3 2 6 7 4 * * DC BIAS MIRROR * R1 7 4 28K R2 7 9 271 R3 10 4 335 * G1 7 11 POLY(2) 7 9 7 4 0 3.15M 21.5U C3 11 0 128F * G2 14 4 POLY(1) 10 4 0 2.95M C4 14 0 104F * * INPUT VOLTAGE BUFFER * E1 3 17 POLY(1) 35 0 1.0M 1.673 C6 17 0 1.00P * Q1 10 17 12 QINP D3 11 12 DY Q2 9 17 13 QINN D4 13 14 DY * G3 2 0 POLY(1) 36 0 0 9.282M C10 2 0 2.9P * D5 22 2 DY Q3 21 11 22 QINN D6 2 23 DY Q4 24 14 23 QINP * * CURRENT MIRROR GAIN BLOCKS * R10 7 20 640 V1 20 21 1.9 C8 21 28 294F G4 7 28 POLY(1) 7 20 0 4.3M R15 7 28 102K C13 28 0 641F D1 28 26 DX V3 7 26 1.65 G6 7 30 POLY(1) 7 20 0 2.74M C15 30 0 676F * R13 25 4 640 V2 24 25 1.85 C12 24 29 294F G5 29 4 POLY(1) 25 4 0 4.5M R16 29 4 761K C14 29 0 312F D2 27 29 DX V4 27 4 1.55 G7 31 4 POLY(1) 25 4 0 6.74M C16 31 0 330F * * OUTPUT STAGE AND COMPENSATION CAPACITORS * R14 28 29 45.0 Q5 4 29 30 QOUTP1 Q6 7 28 31 QOUTN1 * C9 21 33 .935P C11 24 33 .935P C17 33 0 4.00P R19 33 6 10 * Q7 7 30 33 QOUTN2 Q8 4 31 33 QOUTP2 * * NOISE BLOCKS * R20 35 0 122 R21 35 0 122 * R22 36 0 122 R23 36 0 122 * * MODELS * .MODEL DX D TT=200N .MODEL DY D IS=0.166F * .MODEL QINN NPN + IS =0.166f BF =3.239E+02 NF =1.000E+00 VAF=8.457E+01 + IKF=2.462E-02 ISE=2.956E-17 NE =1.197E+00 BR =3.719E+01 + NR =1.000E+00 VAR=1.696E+00 IKR=3.964E-02 ISC=1.835E-19 + NC =1.700E+00 RB =118 IRB=0.000E+00 RBM=65.1 + RC =2.645E+01 CJE=1.632E-13 VJE=7.973E-01 + MJE=4.950E-01 TF =1.948E-11 XTF=1.873E+01 VTF=2.825E+00 + ITF=5.955E-02 PTF=0.000E+00 CJC=1.720E-13 VJC=8.046E-01 + MJC=4.931E-01 XCJC=589m TR =4.212E-10 CJS=629f + MJS=0 KF =2.000E-12 AF =1.000E+00 FC =9.765E-01 * .MODEL QOUTN1 NPN + IS =3.954E-16 BF =3.239E+02 NF =1.000E+00 VAF=8.457E+01 + IKF=4.590E-02 ISE=5.512E-17 NE =1.197E+00 BR =3.719E+01 + NR =1.000E+00 VAR=1.696E+00 IKR=7.392E-02 ISC=3.087E-19 + NC =1.700E+00 RB =3.645E+01 IRB=0.000E+00 RBM=8.077E+00 + RE =3.010E-01 RC =2.702E+01 CJE=2.962E-13 + MJE=4.950E-01 TF =1.904E-11 XTF=1.873E+01 VTF=2.825E+00 + ITF=1.110E-01 PTF=0.000E+00 CJC=2.846E-13 VJC=8.046E-01 + MJC=4.931E-01 XCJC=1.562E-01 TR =5.832E-10 CJS=5.015E-13 + VJS=5.723E-01 MJS=4.105E-01 KF =2.000E-12 AF =1.000E+00 + FC =9.765E-01 * .MODEL QOUTN2 NPN + IS =9.386E-16 BF =3.239E+02 NF =1.000E+00 VAF=8.457E+01 + IKF=1.089E-01 ISE=1.308E-16 NE =1.197E+00 BR =3.956E+01 + NR =1.000E+00 VAR=1.696E+00 IKR=7.392E-02 ISC=1.378E-18 + NC =1.700E+00 RB =65.4 IRB=0.000E+00 RBM=1.683E+00 + RC =1.857E+01 CJE=7.030E-13 VJE=7.973E-01 + MJE=4.950E-01 TF =1.875E-11 XTF=1.873E+01 VTF=2.825E+00 + ITF=2.635E-01 PTF=0.000E+00 CJC=6.172E-13 VJC=8.046E-01 + MJC=4.931E-01 XCJC=860m TR =1.069E-09 CJS=1.028E-12 + VJS=5.723E-01 MJS=4.105E-01 KF =2.000E-12 AF =1.000E+00 + FC =9.765E-01 * .MODEL QINP PNP + IS =0.166f BF =7.165E+01 NF =1.000E+00 VAF=2.000E+01 + IKF=1.882E-02 ISE=6.380E-16 NE =1.366E+00 BR =1.833E+01 + NR =1.000E+00 VAR=1.805E+00 IKR=1.321E-01 ISC=3.666E-18 + NC =1.634E+00 RB =78.8 IRB=0.000E+00 RBM=57.6 + RC =3.739E+01 CJE=1.588E-13 VJE=7.975E-01 + MJE=5.000E-01 TF =3.156E-11 XTF=5.386E+00 VTF=2.713E+00 + ITF=5.084E-02 PTF=0.000E+00 CJC=2.725E-13 VJC=7.130E-01 + MJC=4.200E-01 XCJC=741m TR =7.500E-11 CJS=515f + MJS=0 KF =2.000E-12 AF =1.000E+00 FC =8.803E-01 * .MODEL QOUTP1 PNP + IS =2.399E-16 BF =7.165E+01 NF =1.000E+00 VAF=3.439E+01 + IKF=3.509E-02 ISE=1.190E-15 NE =1.366E+00 BR =1.900E+01 + NR =1.000E+00 VAR=1.805E+00 IKR=2.464E-01 ISC=6.745E-18 + NC =1.634E+00 RB =1.542E+01 IRB=0.000E+00 RBM=4.059E+00 + RC =4.174E+01 CJE=2.962E-13 VJE=7.975E-01 + MJE=5.000E-01 TF =3.107E-11 XTF=5.386E+00 VTF=2.713E+00 + ITF=9.481E-02 PTF=0.000E+00 CJC=4.508E-13 VJC=7.130E-01 + MJC=4.200E-01 XCJC=1.562E-01 TR =9.500E-11 CJS=1.045E-12 + VJS=6.691E-01 MJS=3.950E-01 KF =2.000E-12 AF =1.000E+00 + FC =8.803E-01 * .MODEL QOUTP2 PNP + IS =5.693E-16 BF =7.165E+01 NF =1.000E+00 VAF=3.439E+01 + IKF=8.328E-02 ISE=5.742E-15 NE =1.366E+00 BR =1.923E+01 + NR =1.000E+00 VAR=1.805E+00 IKR=5.848E-01 ISC=1.586E-17 + NC =1.634E+00 RB =56.5 IRB=0.000E+00 RBM=51.7 + RC =1.767E+00 CJE=7.030E-13 VJE=7.975E-01 + MJE=5.000E-01 TF =3.073E-11 XTF=5.386E+00 VTF=2.713E+00 + ITF=2.250E-01 PTF=0.000E+00 CJC=9.776E-13 VJC=7.130E-01 + MJC=4.200E-01 XCJC=923m TR =1.450E-10 CJS=1.637E-12 + VJS=6.691E-01 MJS=3.950E-01 KF =2.000E-12 AF =1.000E+00 + FC =8.803E-01 * .ENDS CLC409 .end tmpk8ny_4pz/examples/p-to-n-examples/TLC555.LIB0000644000175000017500000003413413546075722021142 0ustar carstencarsten* TLC555 ***************************************************************************** * (C) Copyright 2011 Texas Instruments Incorporated. All rights reserved. ***************************************************************************** ** This model is designed as an aid for customers of Texas Instruments. ** TI and its licensors and suppliers make no warranties, either expressed ** or implied, with respect to this model, including the warranties of ** merchantability or fitness for a particular purpose. The model is ** provided solely on an "as is" basis. The entire risk as to its quality ** and performance is with the customer. ***************************************************************************** * * This model is subject to change without notice. Texas Instruments * Incorporated is not responsible for updating this model. * ***************************************************************************** * ** Released by: Analog eLab Design Center, Texas Instruments Inc. * Part: TLC555 * Date: 13JUN2011 * Model Type: ALL IN ONE * Simulator: PSPICE * Simulator Version: 16.0.0.p001 * EVM Order Number: N/A * EVM Users Guide: N/A * Datasheet: SLFS043F - SEPTEMBER 1983 - REVISED FEBRUARY 2005 * * Model Version: 1.0 * ***************************************************************************** * * Updates: * * Version 1.0 : * Release to Web * ***************************************************************************** * * THIS MODEL IS APPLICABLE FOR TLC555 & TLC556 * ***************************************************************************** .SUBCKT TLC555 THRES CONT TRIG RESET OUT DISC VCC GND XD8 GND RESI D_Z18V XD7 GND RESET D_Z18V XR2 RESET RESI TLC55X_RWELL + PARAMS: W=50u L=20u XD2 GND TRGI D_Z18V XD1 GND TRIG D_Z18V XR3 TRIG TRGI TLC55X_RWELL + PARAMS: W=50u L=20u XD4 GND THRI D_Z18V XD3 GND THRES D_Z18V XR2_2 THRES THRI TLC55X_RWELL + PARAMS: W=50u L=20u XD6 GND CONTI D_Z18V XD5 GND CONT D_Z18V XR2_3 CONT CONTI TLC55X_RWELL + PARAMS: W=50u L=20u XMN15 GOUT GND QFF GND MDSWN + PARAMS: W=100U L=10U M=7 XMP15 GOUT VCC QFF GND MDSWP + PARAMS: W=195U L=10U M=9 XMN3 GND TRGO 23 IIMIRRN + PARAMS: W1=170U L1=18U M1=1 W2=170U L2=18U M2=1 IDIN=1U XMN5 GND THRS 25 IIMIRRN + PARAMS: W1=13U L1=26U M1=1 W2=52U L2=13U M2=2 IDIN=50N XMp9 VCC RESO 15 GND IMIRRP + PARAMS: W=112U L=15U M=2 IO=2U XMp6 VCC 25 15 GND IMIRRP + PARAMS: W=18U L=26U M=1 IO=100n XMp5 VCC TRGS 15 GND IMIRRP + PARAMS: W=112U L=15U M=2 IO=2U XMp1 VCC THRO 29 IIMIRRP + PARAMS: W1=172U L1=15U M1=1 W2=172U L2=15U M2=1 IDIN=1U XIB VCC GND 15 IBIAS XRSFF TRGO THRO RESO QFF 30 VCC GND RR1SFF + PARAMS: VOUTH=1 VOUTL=0 RIN=1E12 DELAY=30N ROUT=10 XMN9 TRGO RESO GND MSWN + PARAMS: W=100U L=10U M=1 XMN17 DISC GOUT GND GND TLC55X_NMOS_HV + PARAMS: W=350U L=10U M=20 XMN16 OUT GOUT GND GND TLC55X_NMOS_HV + PARAMS: W=175U L=10U M=20 XMP16 OUT GOUT VCC VCC TLC55X_PMOS_HV + PARAMS: W=270u L=10u M=7 XMN10 RESO RESI GND GND TLC55X_NMOS_HV_L1 + PARAMS: W=100u L=10u M=1 XMN2 THRO THRI THRS GND TLC55X_NMOS_MV + PARAMS: W=170u L=18u M=2 XMP4 TRGO TRGI TRGS VCC TLC55X_PMOS_MV + PARAMS: W=172u L=15u M=2 XMP3 23 TRGC TRGS VCC TLC55X_PMOS_MV + PARAMS: W=172u L=15u M=2 XMPR1F GND GND 32 TRGC TLC55X_PMOS_LV + PARAMS: W=20U L=15U M=1 XMPR1E 32 32 TRGC TRGC TLC55X_PMOS_LV + PARAMS: W=20U L=15U M=1 XMPR1D TRGC TRGC 33 CONTI TLC55X_PMOS_LV + PARAMS: W=20U L=15U M=1 XMPR1C 33 33 CONTI CONTI TLC55X_PMOS_LV + PARAMS: W=20U L=15U M=1 XMPR1B CONTI CONTI 34 VCC TLC55X_PMOS_LV + PARAMS: W=20u L=15u M=1 XMPR1A 34 34 VCC VCC TLC55X_PMOS_LV + PARAMS: W=20u L=15u M=1 XMN1 29 CONTI THRS GND TLC55X_NMOS_MV + PARAMS: W=170u L=18u M=2 .ENDS TLC555 .SUBCKT TLC55X_NMOS_HV D G S B PARAMS: W = 100U L = 10U M = 1 M1 D G S B TLC55X_NMOSD_HV W = {W} L = {L} M = {M} AD={W*LS} AS={W*LS} PD={W + 2*LS} PS={W + 2*LS} + NRD={LS/W} NRS={LS/W} .ENDS *$ .SUBCKT TLC55X_NMOS_HV_L1 D G S B PARAMS: W = 100U L = 10U M = 1 M1 D G S B TLC55X_NMOSD_HV_L1 W = {W} L = {L} M = {M} AD={W*LS} AS={W*LS} PD={W + 2*LS} PS={W + 2*LS} + NRD={LS/W} NRS={LS/W} .ENDS *$ .SUBCKT TLC55X_NMOS_MV D G S B PARAMS: W = 100U L = 10U M = 1 M1 D G S B TLC55X_NMOSD_MV W = {W} L = {L} M = {M} AD={W*LS} AS={W*LS} PD={W + 2*LS} PS={W + 2*LS} + NRD={LS/W} NRS={LS/W} .ENDS *$ .SUBCKT TLC55X_NMOS_LV D G S B PARAMS: W = 100U L = 10U M = 1 M1 D G S B TLC55X_NMOSD_LV W = {W} L = {L} M = {M} AD={W*LS} AS={W*LS} PD={W + 2*LS} PS={W + 2*LS} + NRD={LS/W} NRS={LS/W} .ENDS *$ .MODEL TLC55X_NMOSD_HV NMOS LEVEL=3 L=10U W=100U KP={KPN} VTO={VTOHN} LAMBDA=2E-3 THETA=1.8E-01 + CJ={CJN} CJSW={CJSWN} CGSO={CGSON} CGDO={CGDON} RSH= 10 PB=0.65 LD= 70N TOX={TOX} *$ .MODEL TLC55X_NMOSD_HV_L1 NMOS LEVEL=1 L=10U W=100U KP={KPN} VTO={VTOHN} LAMBDA=2E-3 + CJ={CJN} CJSW={CJSWN} CGSO={CGSON} CGDO={CGDON} RSH= 10 PB=0.65 LD= 70N TOX={TOX} *$ .MODEL TLC55X_NMOSD_MV NMOS LEVEL=1 L=10U W=100U KP={KPN} VTO={VTOMN} LAMBDA=2E-3 + CJ={CJNCG} CJSW={CJSWNCG} CGSO={CGSONCG} CGDO={CGDONCG} PB=0.65 LD= 70N TOX={TOXCG} *+ RSH= 10 *$ .MODEL TLC55X_NMOSD_LV NMOS LEVEL=1 L=10U W=100U KP={KPN} VTO={VTON} LAMBDA=2E-3 + CJ={CJN} CJSW={CJSWN} CGSO={CGSON} CGDO={CGDON} PB=0.65 LD= 300N TOX={TOX} *+ RSH= 10 *$ .SUBCKT TLC55X_PMOS_HV D G S B PARAMS: W = 100U L = 10U M = 1 M1 D G S B TLC55X_PMOSD_HV W = {W} L = {L} M = {M} AD={W*LS} AS={W*LS} PD={W + 2*LS} PS={W + 2*LS} + NRD={LS/W} NRS={LS/W} .ENDS *$ .SUBCKT TLC55X_PMOS_MV D G S B PARAMS: W = 100U L = 10U M = 1 M1 D G S B TLC55X_PMOSD_MV W = {W} L = {L} M = {M} AD={W*LS} AS={W*LS} PD={W + 2*LS} PS={W + 2*LS} + NRD={LS/W} NRS={LS/W} .ENDS *$ .SUBCKT TLC55X_PMOS_LV D G S B PARAMS: W = 100U L = 10U M = 1 M1 D G S B TLC55X_PMOSD_LV W = {W} L = {L} M = {M} AD={W*LS} AS={W*LS} PD={W + 2*LS} PS={W + 2*LS} + NRD={LS/W} NRS={LS/W} .ENDS *$ .MODEL TLC55X_PMOSD_HV PMOS LEVEL=3 L=10U W=100U KP={KPP} VTO={-VTOHP} LAMBDA=2E-3 THETA=2.2E-01 + CJ={CJP} CJSW={CJSWP} CGSO={CGSOP} CGDO={CGDOP} RSH=10 PB=0.65 LD=70N TOX={TOX} *$ .MODEL TLC55X_PMOSD_MV PMOS LEVEL=1 L=10U W=100U KP={KPP} VTO={-VTOMP} LAMBDA=2E-3 *+ CJ={CJP} CJSW={CJSWP} CGSO={CGSOP} CGDO={CGDOP} PB=0.65 LD=70N TOX={TOX} + CJ={CJNCG} CJSW={CJSWNCG} CGSO={CGSONCG} CGDO={CGDONCG} PB=0.65 LD= 70N TOX={TOXCG} *+ RSH= 10 *$ .MODEL TLC55X_PMOSD_LV PMOS LEVEL=1 L=10U W=100U KP={KPP} VTO={-VTOP} LAMBDA=2E-3 + CJ={CJP} CJSW={CJSWP} CGSO={CGSOP} CGDO={CGDOP} PB=0.65 LD=300N TOX={TOX} *+ RSH= 10 *$ .SUBCKT TLC55X_RWELL 1 2 PARAMS: W = 10U L = 100U XR1 1 2 TLC55X_RWELLD PARAMS: W = {W} L = {L} .ENDS *$ .SUBCKT TLC55X_RWELLD 1 2 PARAMS: W = 10U L = 100U R1 1 2 {RSW*L/W} .ENDS *$ .SUBCKT TLC55X_RNSD 1 2 PARAMS: W = 10U L = 100U XR1 1 2 TLC55X_RNSD_D PARAMS: W = {W} L = {L} .ENDS *$ .SUBCKT TLC55X_RNSD_D 1 2 PARAMS: W = 10U L = 100U R1 1 2 {RSN*L/W} .ENDS *$ .SUBCKT TLC55X_RC 1 2 PARAMS: WW = 10U LW = 100U WNSD = 10U LNSD = 100U XR1 1 2 TLC55X_RC_D PARAMS: WW = {WW} LW = {LW} WNSD = {WNSD} LNSD = {LNSD} .ENDS *$ .SUBCKT TLC55X_RC_D 1 2 PARAMS: WW = 10U LW = 100U WNSD = 10U LNSD = 100U R1 1 2 {RSW*LW/WW + RSN*LNSD/WNSD} .ENDS * .SUBCKT IBIAS VCC GND VIB * .PARAM M1 = 8 .PARAM M2 = 5 .PARAM MP = 1 .PARAM WP = 13U .PARAM WN = 130U .PARAM LPE = {36U - LDP} .PARAM LNE = {13U - LDN} .PARAM BP = {MP*(WP/LPE)*(KPP/2)} .PARAM WW = 13U .PARAM LW = 213U .PARAM WNN = 25U .PARAM LNN = 87U .PARAM R1 = {(RSW*LW/WW + RSN*LNN/WNN)} .PARAM K2 = {M2*(WN/LNE)*(KPN/2)} .PARAM MR = {M2/M1} * R1 VIB GND {VBMUL} GB VCC VIB VALUE = {LIMIT( IF ( V(VCC,GND) > VTOHP, BP*PWR(V(VCC,GND)-VTOHP, 2), 0), + (1 + 1*LAMBDA*(V(VCC,GND) - VTOHN))*PWR(( 1 - SQRT(MR/(1+2*LAMBDA*(V(VCC,GND) - VTOHP))) )/R1, 2)/K2, 0)} R2 VIB VCC {RPAR} .ENDS .SUBCKT IMIRRP VCC IO VIB GND PARAMS: W = 100U L = 10U M = 1 IO = 1U * .PARAM MP = 1 .PARAM WP = 13U .PARAM LPE = {36U - LDP} .PARAM LE = {L - LDP} .PARAM MR = { M*W/LE/(MP*WP/LPE)/VBMUL } .PARAM B1 = { (KPP/2*MP*WP/LPE)*VBMUL } .PARAM IS = 1E-12 .PARAM N = {VTOHP/(VT*Log(1 + IO/IS))} * GB VCC IO VIB GND {MR} R1 VCC IO {RPAR} C1 VCC IO {M*(CBDJ*CJP*LS*W + CBDS*CJSWP*(2*LS + W))} V1 VCC 10 {VTOHP} D1 IO 10 DMOD1 .MODEL DMOD1 D (IS={IS} N={N} ) .ENDS .SUBCKT IIMIRRP VCC IO II PARAMS: W1 = 100U L1 = 10U M1 = 1 W2 = 100U L2= 10U M2 = 2 IDIN = 1U * .PARAM L1E = {L1 - LDP} .PARAM L2E = {L2 - LDP} .PARAM B1 = {M1*(W1/L1)*(KPP/2)} .PARAM MR = {M2*W2/L2E/(M1*W1/L1E)} .PARAM RDS = {1/(2*SQRT(M2*(W2/L2E)*(KPP/2)*IDIN))} .PARAM IS = 1E-12 .PARAM NP = {VTOP/(VT*Log(1 + IDIN/IS))} * FB VCC IO V1 {MR} R1 VCC IO {RPAR} C1 VCC IO {M2*(CBDJ*CJP*LS*W2 + CBDS*CJSWP*(2*LS + W2))} D1 IO 10 DMODP V1 VCC 10 {VTOP} R2 II 10 {RDS} C2 VCC II {M1*(CBDJ*CJP*LS*W1 + CBDS*CJSWP*(2*LS + W1)) + 2/3*COX*(M1*W1*L1E + M2*W2*L2E) + M1*CGSOP*W1} C3 II IO {CGDOP*W2} .MODEL DMODP D (IS={IS} N={NP} ) .ENDS .SUBCKT IIMIRRN GND IO II PARAMS: W1 = 100U L1 = 10U M1 = 1 W2 = 100U L2= 10U M2 = 2 IDIN = 1U * .PARAM L1E = {L1 - LDN} .PARAM L2E = {L2 - LDN} .PARAM B1 = {M1*(W1/L1)*(KPN/2)} .PARAM MR = { M2*W2/L2E/(M1*W1/L1E) } .PARAM RDS = {1/(2*SQRT(M2*(W2/L2E)*(KPN/2)*IDIN))} .PARAM IS = 1E-12 .PARAM NN = {VTON/(VT*Log(1 + IDIN/IS))} * FB IO GND V1 {MR} R1 IO GND {RPAR} C1 IO GND {M2*(CBDJ*CJN*LS*W2 + CBDS*CJSWN*(2*LS + W2))} D1 10 IO DMODN V1 10 GND {VTON} R2 II 10 {RDS} C2 II GND {M1*(CBDJ*CJN*LS*W1 + CBDS*CJSWN*(2*LS + W1)) + 2/3*COX*(M1*W1*L1E + M2*W2*L2E) + M1*CGSON*W1} C3 II IO {M2*CGDON*W2} .MODEL DMODN D (IS={IS} N={NN} ) .ENDS .SUBCKT MDSWP D S DG GND PARAMS: W = 100U L = 10U M = 1 * .PARAM LE = {L - LDP} * S1 D S DG GND SWN C1 D S {M*(CBDJ*CJP*LS*W + CBDS*CJSWP*(2*LS + W))} *D B .MODEL SWN VSWITCH ( VON = {0.49} VOFF = {0.55} RON={1/(2*M*(W/LE)*(KPP/2)*10)} ROFF={1G} ) .ENDS .SUBCKT MDSWN D S DG GND PARAMS: W = 100U L = 10U M = 1 * .PARAM LE = {L - LDN} * S1 D S DG GND SWN C1 D S {M*(CBDJ*CJN*LS*W + CBDS*CJSWN*(2*LS + W))} *D B .MODEL SWN VSWITCH ( VON = {0.55} VOFF = {0.49} RON={1/(2*M*(W/LE)*(KPN/2)*10)} ROFF={1G} ) .ENDS .SUBCKT MSWN D G S PARAMS: W = 100U L = 10U M = 1 * .PARAM LE = {L - LDN} * *C1 D S {M*(CBDJ*CJN*LS*W + CBDS*CJSWN*(2*LS + W))} *D B *C2 G S {M*2/3*COX*(W*LE) + CGSON*W} *C3 G D {CGDON*W} S1 D S G S SWN .MODEL SWN VSWITCH ( VON = {VTON+1} VOFF = {VTON} RON={1/(2*M*(W/L)*(KPN/2)*10)} ROFF={1G} ) .ENDS * * CONNECTIONS: A * | C * | | .SUBCKT D_Z18V 1 2 D1 1 2 DZ_18V .ENDS .PARAM ISZ = 5P .PARAM NZ = {0.3/(VT*Log(1 + 5.0M/ISZ))} .MODEL DZ_18V D( IS={ISz} N={Nz} BV=18.0 IBV=5.0M EG={8*Nz*VT}) .SUBCKT RR1SFF S R R1 Q Q_ VCC GND + PARAMS: VOUTH=5.0 VOUTL=0 RIN=1E12 DELAY=10N ROUT=10 .PARAM W1 = 100U .PARAM L1 = 10U .PARAM W2 = 100U .PARAM L2= 10U .PARAM W3 = 10U .PARAM L3 = 25U .PARAM W4 = 10U .PARAM L4= 100U * XU1 Q GND S GND Q_ GND COMP2INPNORSD + PARAMS: ROUT={ROUT} DELAYLH={1N} DELAYHL={1N} VOUTH={VOUTH} VOUTL={VOUTL} + VTHRES1={0.5*(VOUTH-VOUTL)} VTHRES2={VTOCN} XU2 VCC R R1 GND Q_ GND Q VCC GND COMP3INPNORSD + PARAMS: ROUT={ROUT} DELAYLH={15N} DELAYHL={1N} VOUTH={VOUTH} VOUTL={VOUTL} + VTHRES1={VTOCP} VTHRES2={VTOCN} VTHRES3={0.49*(VOUTH-VOUTL)} *C1 S GND {0.5*COX*(W1*L1) + CGSON*W1} *C2 R VCC {0.5*COX*(W2*L2) + CGSOP*W2} *C3 R1 GND {0.5*COX*(W3*L3) + CGSON*W3} *C4 R1 VCC {0.5*COX*(W4*L4) + CGSOP*W4} .ENDS .SUBCKT COMP2INPNORSD IN1+ IN1- IN2+ IN2- OUT GND + PARAMS: ROUT=0 DELAYLH=0 DELAYHL=0 VOUTH=0 VOUTL=0 VTHRES1=0 VTHRES2=0 * .PARAM TDELLH = {IF ( (DELAYLH < 1E-9) , 1E-9, DELAYLH ) } .PARAM TDELHL = {IF ( (DELAYHL < 1E-9) , 1E-9, DELAYHL ) } .PARAM RO = {IF ( (TDEL > 1E-15) & (ROUT < 1), 1, ROUT ) } .PARAM TDEL = {(TDELLH+TDELHL)/2} .PARAM COUT={TDEL/(0.693*(RO+1U))} .PARAM RDELLH = {TDELLH/(0.693*(COUT+1F))} .PARAM RDELHL = {TDELHL/(0.693*(COUT+1F))} EOUT OUT GND VALUE= { IF ( (V(IN1+,IN1-) > {VTHRES1}) | (V(IN2+,IN2-) > {VTHRES2}), + VOUTL + RDELLH*I(EOUT), VOUTH + RDELHL*I(EOUT) ) } COUT OUT GND {COUT} .ENDS COMP2INPNORSD .SUBCKT COMP3INPNORSD IN1+ IN1- IN2+ IN2- IN3+ IN3- OUT VCC GND + PARAMS: ROUT=0 DELAYLH=0 DELAYHL=0 VOUTH=0 VOUTL=0 VTHRES1=0 VHYST1=0 VTHRES2=0 VHYST2=0 VTHRES3=0 VHYST3=0 * .PARAM TDELLH = {IF ( (DELAYLH < 1E-9) , 1E-9, DELAYLH ) } .PARAM TDELHL = {IF ( (DELAYHL < 1E-9) , 1E-9, DELAYHL ) } .PARAM RO = {IF ( (TDEL > 1E-15) & (ROUT < 1), 1, ROUT ) } .PARAM TDEL = {(TDELLH+TDELHL)/2} .PARAM COUT={TDEL/(0.693*(RO+1U))} .PARAM VREFN = {(15-VTOHN)} .PARAM VREFP = {(15-VTOHP)} .PARAM RDELLH = {TDELLH/(0.693*(COUT+1F))*VREFP} .PARAM RDELHL = {TDELHL/(0.693*(COUT+1F))*VREFN} * EOUT OUT GND VALUE= { IF ( (V(IN1+,IN1-) > {VTHRES1}) | (V(IN2+,IN2-) > {VTHRES2}) | (V(IN3+,IN3-) > {VTHRES3}), + VOUTL + RDELLH*I(EOUT)*V(1,GND), VOUTH + RDELHL*I(EOUT)*V(1,GND) ) } E1 1 GND VALUE= { IF ( (V(VCC,GND) > {VTOHP+0.01}), 1/(V(VCC,GND)-VTOHP), 100 ) } COUT OUT GND {COUT} .ENDS COMP3INPNORSD .SUBCKT 1N4148 1 2 D1 1 2 D_1N4148_1 .MODEL D_1N4148_1 D( IS=1N N=1.7 BV=75 IBV=5U RS=2M + CJO=4P VJ=750M M=330M FC=500M TT=25.9N + EG=1.11 XTI=3 KF=0 AF=1 ) .ENDS .PARAM LS = 1.0U .PARAM VTOP_ = 0.31 .PARAM VTOP = 0.14 .PARAM VTON = 0.14 .PARAM VTOMP = 0.6 .PARAM VTOMN = 0.55 .PARAM VTOHP = 0.85 .PARAM VTOHN = 0.80 .PARAM LAMBDA = 2M .PARAM KPN = 6.0E-05 .PARAM KPP = 3.0E-05 .PARAM LDN = 0.07U .PARAM LDP = 0.07U .PARAM RSW = 1810 .PARAM RSN = 1.41 .PARAM VBMUL = 1E6 .PARAM RPAR = 1T .PARAM CBDJ = 1 .PARAM CBDS = 1 .PARAM CN = 0.8 *0.8U .PARAM CJN = {CN*180U} .PARAM CJP = {CN*300U} .PARAM CJSWN = {CN*1N} .PARAM CJSWP = {CN*2.2N} .PARAM XJN = 0.2U .PARAM CGSON = {CN*0.6 * XJN * COX} .PARAM CGDON = {CGSON} .PARAM XJP = 0.3U .PARAM CGSOP = {CN*0.6 * XJN * COX} .PARAM CGDOP = {CGSOP} .PARAM EPSSIO2 = {3.9*8.854214871E-12} .PARAM TOX = 1000E-10 .PARAM COX = {EPSSIO2/TOX} .PARAM EC = 1.5E6 .PARAM VTOCP = {VTOHP+0.05} .PARAM VTOCN = {VTOHN+0.05} *CG .PARAM CCG = 0.2 .PARAM CJNCG = {CCG*180U} .PARAM CJPCG = {CCG*300U} .PARAM CJSWNCG = {CCG*1N} .PARAM CJSWPCG = {CCG*2.2N} .PARAM XJNCG = 0.2U .PARAM CGSONCG = {CCG*0.6 * XJNCG * COXCG} .PARAM CGDONCG = {CGSONCG} .PARAM XJPCG = 0.3U .PARAM CGSOPCG = {CCG*0.6 * XJNCG * COXCG} .PARAM CGDOPCG = {CGSOPCG} .PARAM TOXCG = 1000E-10 .PARAM COXCG = {EPSSIO2/TOXCG}tmpk8ny_4pz/examples/p-to-n-examples/switch-oscillators_inc.cir0000644000175000017500000000151013546075722025106 0ustar carstencarsten* sw ring-oscillators .control destroy all run plot I(vmeasure) plot V(Osc_out) rusage .endc .ic v(N017)=0.25 .tran 50p 40n 50p uic *.option method=gear maxord=3 VDD VDD2 0 DC 3 VMEASURE VDD2 VDD dc 0 cvdd vdd 0 1e-18 XX1 N017 N001 VDD 0 invertervs XX2 N001 N002 VDD 0 inverter XX3 N002 N003 VDD 0 invertervs XX4 N003 N004 VDD 0 invertervs2 XX5 N004 N005 VDD 0 invertervs3 XX6 N005 N006 VDD 0 invertervs4 XX7 N006 N007 VDD 0 inverter XX8 N007 N008 VDD 0 invertervs XX9 N008 N009 VDD 0 invertervs2 XX10 N009 N010 VDD 0 invertervs3 XX11 N010 N011 VDD 0 invertervs4 XX12 N011 N012 VDD 0 inverter XX13 N012 N013 VDD 0 invertervs XX14 N013 N014 VDD 0 invertervs2 XX15 N014 N015 VDD 0 invertervs3 XX16 N015 N016 VDD 0 invertervs4 XX17 N016 N017 VDD 0 inverter * amplify XX18 N017 Osc_out VDD 0 invertervs3 .include switch-invs.lib .end tmpk8ny_4pz/examples/p-to-n-examples/switch-invs.lib0000644000175000017500000000326413546075722022677 0ustar carstencarsten* sw like an NMOS inverter with resistive load .subckt invertern In Out VDD DGND *sp out vdd in vdd swswitch on Rl out vdd 10k Cl out dgnd 0.1p *C2 out vdd 0.1p sn out dgnd in dgnd swswitch off .ends invertern * sw like a PMOS inverter with resistive load .subckt inverterp In Out VDD DGND sp out vdd vdd in swswitch Rl out 0 10k *Cl out dgnd 0.1p C2 out vdd 0.1p *sn out dgnd in dgnd swswitch off .ends inverterp * sw like a CMOS inverter .subckt inverter In Out VDD DGND sp out vdd vdd in swswitch Rin in 0 1e9 Cl out dgnd 0.1p C2 out vdd 0.1p sn out dgnd in dgnd swswitch .ends inverter .model swswitch sw (vt=1 vh=0.1 ron=1k roff=1e12) .model switchn sw (vt=1 vh=0.1 ron=1k roff=1e12) * sw like a CMOS inverter with PSPICE VSWITCH .subckt invertervs In Out VDD DGND sp out vdd vdd in swn Rin in 0 1e9 Cl out dgnd 0.1p C2 out vdd 0.1p sn out dgnd in dgnd swn .ends invertervs .MODEL SWN VSWITCH ( VON = 1.1 VOFF = 0.9 RON=1k ROFF=1e12 ) * sw like a CMOS inverter with PSPICE VSWITCH .subckt invertervs2 In Out VDD DGND sp out vdd vdd in swn Rin in 0 1e9 Cl out dgnd 0.1p C2 out vdd 0.1p sn out dgnd in dgnd swn .MODEL SWN VSWITCH ( VON = 1.1 VOFF = 0.9 RON=1k ROFF=1e12 ) .ends invertervs2 * sw like a CMOS inverter with PSPICE VSWITCH .subckt invertervs3 In Out VDD DGND sp out vdd vdd in swn2 Rin in 0 1e9 Cl out dgnd 0.1p C2 out vdd 0.1p sn out dgnd in dgnd swn2 .ends invertervs3 .MODEL SWN2 VSWITCH ( VON = 1.1 VOFF = 0.9 RON=1k ROFF=1e12 ) * sw like a CMOS inverter with PSPICE VSWITCH .subckt invertervs4 In Out VDD DGND sp out vdd vdd in swn Rin in 0 1e9 Cl out dgnd 0.1p C2 out vdd 0.1p sn out dgnd in dgnd swn .MODEL SWN VSWITCH ( VON = 1.1 VOFF = 0.9 RON=2k ROFF=1e12 ) .ends invertervs4 tmpk8ny_4pz/examples/p-to-n-examples/OPA171.txt0000644000175000017500000002434013546075722021340 0ustar carstencarsten* OPA171 - Rev. B * Created by Ian Williams; January 17, 2017 * Created with Green-Williams-Lis Op Amp Macro-model Architecture * Copyright 2017 by Texas Instruments Corporation ****************************************************** * MACRO-MODEL SIMULATED PARAMETERS: ****************************************************** * OPEN-LOOP GAIN AND PHASE VS. FREQUENCY WITH RL, CL EFFECTS (Aol) * UNITY GAIN BANDWIDTH (GBW) * INPUT COMMON-MODE REJECTION RATIO VS. FREQUENCY (CMRR) * POWER SUPPLY REJECTION RATIO VS. FREQUENCY (PSRR) * DIFFERENTIAL INPUT IMPEDANCE (Zid) * COMMON-MODE INPUT IMPEDANCE (Zic) * OPEN-LOOP OUTPUT IMPEDANCE VS. FREQUENCY (Zo) * OUTPUT CURRENT THROUGH THE SUPPLY (Iout) * INPUT VOLTAGE NOISE DENSITY VS. FREQUENCY (en) * INPUT CURRENT NOISE DENSITY VS. FREQUENCY (in) * OUTPUT VOLTAGE SWING vs. OUTPUT CURRENT (Vo) * SHORT-CIRCUIT OUTPUT CURRENT (Isc) * QUIESCENT CURRENT (Iq) * SETTLING TIME VS. CAPACITIVE LOAD (ts) * SLEW RATE (SR) * SMALL SIGNAL OVERSHOOT VS. CAPACITIVE LOAD * LARGE SIGNAL RESPONSE * OVERLOAD RECOVERY TIME (tor) * INPUT BIAS CURRENT (Ib) * INPUT OFFSET CURRENT (Ios) * INPUT OFFSET VOLTAGE (Vos) * INPUT COMMON-MODE VOLTAGE RANGE (Vcm) * INPUT/OUTPUT ESD CELLS (ESDin, ESDout) ****************************************************** .subckt OPA171 IN+ IN- VCC VEE OUT ****************************************************** * MODEL DEFINITIONS: .model BB_SW VSWITCH(Ron=50 Roff=1e9 Von=700e-3 Voff=0) .model ESD_SW VSWITCH(Ron=50 Roff=1e9 Von=500e-3 Voff=100e-3) .model OL_SW VSWITCH(Ron=1e-3 Roff=1e9 Von=900e-3 Voff=800e-3) .model OR_SW VSWITCH(Ron=10e-3 Roff=1e9 Von=1e-3 Voff=0) .model R_NOISELESS RES(T_ABS=-273.15) ****************************************************** V_OS N041 en_n 214.023e-6 R1 N043 N042 R_NOISELESS 1e-3 R2 N049 ESDn R_NOISELESS 1e-3 R3 N063 0 R_NOISELESS 1e12 C1 N063 0 1 R4 VCC_B N062 R_NOISELESS 1e-3 C2 N062 0 1e-15 C3 N064 0 1e-15 R5 N064 VEE_B R_NOISELESS 1e-3 G_PSR N043 N044 N005 N014 1e-3 R6 MID N047 R_NOISELESS 1e9 VCM_MIN N048 VEE_B -0.1 R7 N048 MID R_NOISELESS 1e9 VCM_MAX N047 VCC_B -2 XVCM_CLAMP N044 MID N045 MID N047 N048 VCCS_EXT_LIM R8 N045 MID R_NOISELESS 1 C4 VCM_CLAMP MID 1e-15 R9 N045 VCM_CLAMP R_NOISELESS 1e-3 V4 N061 OUT 0 R10 MID N051 R_NOISELESS 1e9 R11 MID N052 R_NOISELESS 1e9 XIQp VIMON MID VCC MID VCCS_LIM_IQ XIQn MID VIMON VEE MID VCCS_LIM_IQ R12 VCC_B N016 R_NOISELESS 1e3 R13 N029 VEE_B R_NOISELESS 1e3 XCLAWp VIMON MID N016 VCC_B VCCS_LIM_CLAWp XCLAWn MID VIMON VEE_B N029 VCCS_LIM_CLAWn R14 VEE_CLP MID R_NOISELESS 1e3 R15 MID VCC_CLP R_NOISELESS 1e3 R16 N017 N016 R_NOISELESS 1e-3 R17 N030 N029 R_NOISELESS 1e-3 C5 MID N017 1e-15 C6 N030 MID 1e-15 R18 VOUT_S N052 R_NOISELESS 100 C7 VOUT_S MID 1e-9 G2 MID VCC_CLP N017 MID 1e-3 G3 MID VEE_CLP N030 MID 1e-3 XCL_AMP N013 N039 VIMON MID N020 N027 CLAMP_AMP_LO V_ISCp N013 MID 25 V_ISCn N039 MID -35 XOL_SENSE MID N068 OLN OLP OL_SENSE R19 N039 MID R_NOISELESS 1e9 R20 N027 MID R_NOISELESS 1 C8 N028 MID 1e-15 R21 MID N020 R_NOISELESS 1 R22 MID N013 R_NOISELESS 1e9 C9 MID N021 1e-15 XCLAW_AMP VCC_CLP VEE_CLP VOUT_S MID N018 N025 CLAMP_AMP_LO R23 VEE_CLP MID R_NOISELESS 1e9 R24 N025 MID R_NOISELESS 1 C10 N026 MID 1e-15 R25 MID N018 R_NOISELESS 1 R26 MID VCC_CLP R_NOISELESS 1e9 C11 MID N019 1e-15 XCL_SRC N021 N028 CL_CLAMP MID VCCS_LIM_4 XCLAW_SRC N019 N026 CLAW_CLAMP MID VCCS_LIM_3 R27 N018 N019 R_NOISELESS 1e-3 R28 N026 N025 R_NOISELESS 1e-3 R29 N020 N021 R_NOISELESS 1e-3 R30 N028 N027 R_NOISELESS 1e-3 R31 N068 MID R_NOISELESS 1 R32 N068 SW_OL R_NOISELESS 100 C12 SW_OL MID 10e-12 R33 VIMON N051 R_NOISELESS 100 C13 VIMON MID 1e-9 C_DIFF en_p ESDn 3e-12 C_CMn ESDn MID 3e-12 C_CMp MID en_p 3e-12 I_Q VCC VEE 475e-6 I_B N044 MID 8e-12 I_OS N049 MID 4e-12 R36 N037 MID R_NOISELESS 1 R37 N040 MID R_NOISELESS 1e9 R38 MID N023 R_NOISELESS 1 R39 MID N015 R_NOISELESS 1e9 XGR_AMP N015 N040 N022 MID N023 N037 CLAMP_AMP_HI XGR_SRC N024 N038 CLAMP MID VCCS_LIM_GR C17 MID N024 1e-15 C18 N038 MID 1e-15 V_GRn N040 MID -50 V_GRp N015 MID 50 R40 N023 N024 R_NOISELESS 1e-3 R41 N038 N037 R_NOISELESS 1e-3 R42 VSENSE N022 R_NOISELESS 1e-3 C19 MID N022 1e-15 R43 MID VSENSE R_NOISELESS 1e3 G_CMR N041 N042 N012 MID 1e-3 G8 MID CLAW_CLAMP N050 MID 1e-3 R45 MID CLAW_CLAMP R_NOISELESS 1e3 G9 MID CL_CLAMP CLAW_CLAMP MID 1e-3 R46 MID CL_CLAMP R_NOISELESS 1e3 R47 N059 VCLP R_NOISELESS 100 C24 MID VCLP 100e-12 E4 N059 MID CL_CLAMP MID 1 E5 N052 MID OUT MID 1 H1 N051 MID V4 1e3 S1 N054 N053 SW_OL MID OL_SW R52 MID en_p R_NOISELESS 1e9 R53 ESDn MID R_NOISELESS 1e9 R_CMR N042 N041 R_NOISELESS 1e3 R59 N062 N063 R_NOISELESS 1e6 R60 N063 N064 R_NOISELESS 1e6 R_PSR N044 N043 R_NOISELESS 1e3 G15 MID VSENSE CLAMP MID 1e-3 V_ORp N036 VCLP 3 V_ORn N031 VCLP -3 V11 N033 N032 0 V12 N034 N035 0 H2 OLN MID V11 -1 H3 OLP MID V12 1 S2 VCC ESDn ESDn VCC ESD_SW S3 VCC en_p en_p VCC ESD_SW S4 ESDn VEE VEE ESDn ESD_SW S5 en_p VEE VEE en_p ESD_SW S6 VCC OUT OUT VCC ESD_SW S7 OUT VEE VEE OUT ESD_SW E1 MID 0 N063 0 1 G16 0 VCC_B VCC 0 1 G17 0 VEE_B VEE 0 1 R88 VCC_B 0 R_NOISELESS 1 R89 VEE_B 0 R_NOISELESS 1 S8 N034 CLAMP CLAMP N034 OR_SW S9 CLAMP N033 N033 CLAMP OR_SW Xi_np en_n MID FEMT Xi_nn ESDn MID FEMT XVCCS_LIM_1 VCM_CLAMP N049 MID N046 VCCS_LIM_1 XVCCS_LIM_2 N046 MID MID CLAMP VCCS_LIM_2 R44 N046 MID R_NOISELESS 1e6 R58 CLAMP MID R_NOISELESS 1e6 C20 CLAMP MID 1.484e-7 S10 en_p ESDn ESDn en_p BB_SW S11 ESDn en_p en_p ESDn BB_SW R34 en_p IN+ R_NOISELESS 10e-3 R35 ESDn IN- R_NOISELESS 10e-3 R48 MID N050 R_NOISELESS 1e6 G1 MID N050 VSENSE MID 1e-6 C14 N050 MID 7.4e-15 Rx N061 N060 R_NOISELESS 1.65e4 Rdummy N061 MID R_NOISELESS 1.65e3 G_Zo MID N053 CL_CLAMP N061 172 Rdc1 N053 MID R_NOISELESS 1 R49 N053 N054 R_NOISELESS 1e5 R50 N054 MID R_NOISELESS 1.266e3 G4 MID N057 N054 MID 80 C15 N054 N053 1.592e-6 R51 N057 MID R_NOISELESS 1 C16 N067 MID 1.929e-10 R54 N067 N058 R_NOISELESS 10e3 R55 N058 N057 R_NOISELESS 1.547e6 C23 N007 N006 1.516e-12 G_adjust1 MID N006 en_p MID 4.75e-4 Rsrc1 N006 MID R_NOISELESS 1 R56 N007 MID R_NOISELESS 2.104e5 R57 N007 N006 R_NOISELESS 1e8 G5 MID N008 N007 MID 1 Rsrc2 N008 MID R_NOISELESS 1 R61 N009 N008 R_NOISELESS 1e4 C25 N009 N008 1.516e-8 R62 N009 MID R_NOISELESS 2.104e1 G6 MID N012 N009 MID 4.762e2 Rsrc3 N012 MID R_NOISELESS 1 C26 N011 N010 3.745e-10 G_adjust2 MID N010 VEE_B MID 1.588e-1 Rsrc4 N010 MID R_NOISELESS 1 R63 N011 MID R_NOISELESS 6.296e2 R64 N011 N010 R_NOISELESS 1e8 G7 MID N014 N011 MID 1 Rsrc5 N014 MID R_NOISELESS 1 C27 N003 N004 2.792e-12 G_adjust3 MID N004 VCC_B MID 3.772e-4 Rsrc6 N004 MID R_NOISELESS 1 R65 N003 MID R_NOISELESS 2.658e5 R66 N003 N004 R_NOISELESS 1e8 G10 MID N002 N003 MID 1 Rsrc7 N002 MID R_NOISELESS 1 R67 N001 N002 R_NOISELESS 1e4 C28 N001 N002 2.792e-8 R68 N001 MID R_NOISELESS 2.658e1 G11 MID N005 N001 MID 3.772e2 Rsrc8 N005 MID R_NOISELESS 1 Xe_n N065 MID VNSE G12 MID N066 N065 N069 1 R69 N066 N069 R_NOISELESS 1e6 R70 N066 N069 R_NOISELESS 11.786e3 C29 N066 N069 6.75e-12 R71 N069 N070 R_NOISELESS 15e3 C30 N070 MID 106e-12 Rpd N070 MID R_NOISELESS 1e9 E2 en_p en_n N066 MID 1 G13 MID N055 N058 MID 1 R72 N055 MID R_NOISELESS 1 R73 N056 N055 R_NOISELESS 1e4 R74 MID N056 R_NOISELESS 5 C21 N056 N055 3.183e-13 XVCCS_LIM_ZO N056 MID MID N060 VCCS_LIM_ZO R76 MID N060 R_NOISELESS 1 G14 MID N032 N031 MID 1 G18 MID N035 N036 MID 1 R77 MID N032 R_NOISELESS 1 R78 MID N035 R_NOISELESS 1 .ends OPA171 * .subckt CLAMP_AMP_HI VC+ VC- VIN COM VO+ VO- .param G=10 GVo+ COM Vo+ Value = {IF(V(VIN,COM)>V(VC+,COM),((V(VIN,COM)-V(VC+,COM))*G),0)} GVo- COM Vo- Value = {IF(V(VIN,COM)10e-3 | V(4,1)>10e-3),1,0)} .ends OL_SENSE * .subckt FEMT 1 2 .param FLWF=1e-3 .param NLFF=1 .param NVRF=1 .param GLFF={PWR(FLWF,0.25)*NLFF/1164} .param RNVF={1.184*PWR(NVRF,2)} .model DVNF D KF={PWR(FLWF,0.5)/1e11} IS=1.0e-16 I1 0 7 10e-3 I2 0 8 10e-3 D1 7 0 DVNF D2 8 0 DVNF E1 3 6 7 8 {GLFF} R1 3 0 1e9 R2 3 0 1e9 R3 3 6 1e9 E2 6 4 5 0 10 R4 5 0 {RNVF} R5 5 0 {RNVF} R6 3 4 1e9 R7 4 0 1e9 G1 1 2 3 4 1e-6 .ends FEMT * .subckt VCCS_EXT_LIM VIN+ VIN- IOUT- IOUT+ VP+ VP- .param Gain = 1 G1 IOUT+ IOUT- VALUE={LIMIT(Gain*V(VIN+,VIN-),V(VP-,VIN-), V(VP+,VIN-))} .ends VCCS_EXT_LIM * .subckt VCCS_LIM_1 VC+ VC- IOUT+ IOUT- .param Gain = 1e-4 .param Ipos = .5 .param Ineg = -.5 G1 IOUT+ IOUT- VALUE={LIMIT(Gain*V(VC+,VC-),Ineg,Ipos)} .ends VCCS_LIM_1 * .subckt VCCS_LIM_2 VC+ VC- IOUT+ IOUT- .param Gain = 3.40e-2 .param Ipos = 0.224 .param Ineg = -0.224 G1 IOUT+ IOUT- VALUE={LIMIT(Gain*V(VC+,VC-),Ineg,Ipos)} .ends VCCS_LIM_2 * .subckt VCCS_LIM_3 VC+ VC- IOUT+ IOUT- .param Gain = 1 .param Ipos = 100e-3 .param Ineg = -100e-3 G1 IOUT+ IOUT- VALUE={LIMIT(Gain*V(VC+,VC-),Ineg,Ipos)} .ends VCCS_LIM_3 * .subckt VCCS_LIM_4 VC+ VC- IOUT+ IOUT- .param Gain = 1 .param Ipos = 200e-3 .param Ineg = -200e-3 G1 IOUT+ IOUT- VALUE={LIMIT(Gain*V(VC+,VC-),Ineg,Ipos)} .ends VCCS_LIM_4 * .subckt VCCS_LIM_CLAWn VC+ VC- IOUT+ IOUT- G1 IOUT+ IOUT- TABLE {abs(V(VC+,VC-))} = +(0, 1e-5) +(3.38, 3.1e-5) +(3.66, 3.2e-5) +(3.87, 7.8e-5) +(6.67, 5.64e-4) +(8, 8.48e-4) +(15, 2.23e-3) +(35, 6.3e-3) .ends VCCS_LIM_CLAWn * .subckt VCCS_LIM_IQ VC+ VC- IOUT+ IOUT- .param Gain = 1e-3 G1 IOUT+ IOUT- VALUE={IF( (V(VC+,VC-)<=0),0,Gain*V(VC+,VC-) )} .ends VCCS_LIM_IQ * .subckt VNSE 1 2 .param FLW=20 .param NLF=45 .param NVR=14 .param GLF={PWR(FLW,0.25)*NLF/1164} .param RNV={1.184*PWR(NVR,2)} .model DVN D KF={PWR(FLW,0.5)/1E11} IS=1.0E-16 I1 0 7 10E-3 I2 0 8 10E-3 D1 7 0 DVN D2 8 0 DVN E1 3 6 7 8 {GLF} R1 3 0 1E9 R2 3 0 1E9 R3 3 6 1E9 E2 6 4 5 0 10 R4 5 0 {RNV} R5 5 0 {RNV} R6 3 4 1E9 R7 4 0 1E9 E3 1 2 3 4 1 .ends VNSE * .subckt CLAMP_AMP_LO VC+ VC- VIN COM VO+ VO- .param G=1 GVo+ COM Vo+ Value = {IF(V(VIN,COM)>V(VC+,COM),((V(VIN,COM)-V(VC+,COM))*G),0)} GVo- COM Vo- Value = {IF(V(VIN,COM)>> BFP780 <<< * (C) 2015 Infineon Technologies AG * Version 1.1 October 2015 *************************************************************** *.OPTION TNOM=25, GMIN= 1.00e-12 *BFP780 C B E1 E2 .SUBCKT BFP780 1 2 3 4 * CCEPAR 11 33 800E-015 * LEx 30 35 3E-011 LBx 20 2 3E-011 LCx 10 1 3E-011 * CBPAD 22 44 30E-015 CCPAD 11 44 30E-015 CEPAD 33 44 30E-015 * LB 22 20 777E-12 LC 10 11 777E-12 * CBEPCK 20 30 5.703E-015 CBCPCK 10 20 1.497E-014 CCEPCK 10 30 6.032E-014 * RE1 35 3 1E-03 RE2 35 4 1E-03 * Rsub1 44 30 0.2144 Rps 44 33 0.07306 * D1 33 22 Diode_fb D2 44 22 Diode_fbd * .MODEL Diode_fb D( + IS=3.5E-015 + N=1 + CJO=10e-15 + RS=6.1 + Tnom=25) * .MODEL Diode_fbd D( + IS=1E-015 + N=1 + CJO=10E-15 + RS=1 + Tnom=25) * Q1 11 22 33 44 M_BFP780 * .ENDS BFP780 .MODEL M_BFP780 NPN (Level=4 + Tnom=25 + Cbeo=2.47E-012 + Cje=561.3E-015 + Pe=0.7 + Me=0.333 + Aje=-1 + Wbe=1 + Cbco=10E-015 + Cjc=668.6E-015 + Pc=0.54 + Mc=0.333 + Ajc=-1 + Cjep=2.616E-015 + Cjcp=900E-015 + Ps=0.6 + Ms=0.3 + Ajs=-0.5 + Fc=0.94 + Vef=545.4 + Ver=3.291 + Is=2.3E-015 + Nf=0.9855 + Ibei=1.893E-018 + Nei=0.9399 + Iben=4.77E-015 + Nen=1.361 + Ikf=1 + Nr=0.9912 + Ibci=157.5E-018 + Nci=1.1 + Ibcn=4.929E-015 + Ncn=1.463 + Ikr=0.01178 + Wsp=1 + Isp=1E-015 + Nfp=1 + Ibcip=1E-015 + Ncip=1.029 + Ibcnp=1E-015 + Ncnp=1 + Ikp=1E-3 + Ibeip=1E-015 + Ibenp=1E-015 + Re=0.15 + Rcx=0.01 + Rci=2.665 + Qco=1E-015 + Vo=0.0005022 + Gamm=5.659E-012 + Hrcf=0.21 + Rbx=5 + Rbi=1.964 + Rbp=265.5 + Rs=26.56 + Avc1=3.97 + Avc2=29.52 + Tf=1.6E-012 + Qtf=50E-3 + Xtf=30 + Vtf=0.7 + Itf=1 + Tr=1E-015 + Td=500E-015 + Cth=0 + Rth=80 + Ea=1.12 + Eaie=1.12 + Eaic=1.12 + Eais=1 + Eane=1.12 + Eanc=1.12 + Eans=1 + Xre=0 + Xrb=0 + Xrc=0 + Xrs=0 + Xvo=0 + Xis=-1.631 + Xii=0 + Xin=0 + Tnf=0 + Tavc=0.002613 + Kfn=0 + Afn=1 + Bfn=1 ) *************************************************************** * *.ENDS BFP780 *************************************************************** * Comments for the user: * The VBIC Model includes the self heating effect and the user can switch selfheating on or off. * a) no self heating: set Rth = 0 * b) with self heating: set Rth=20K/W + Rth_PCB (customer) * Note: Rth = 20 K/W includes only the thermal resistance of die and package and * the thermal resistance of the customer PCB must be added (Rth=20K/W + Rth_PCB) * Infineon Technologies AG * VBIC MODEL * VALID UP TO 6 GHZ * >>> BFQ790 <<< * (C) 2015 Infineon Technologies AG * Version 1.0 Juni 2015 *************************************************************** *.OPTION TNOM=25, GMIN= 1.00e-12 *BFQ790 C B E * without access to the external thermal node (Rth to be adjusted by the customer in the model parameter list for the transistor .SUBCKT BFQ790 1 2 3 * * with access to external thermal node *.SUBCKT BFQ790 1 2 3 55 * CCSPAR 11 44 1.375E-012 LEx 30 3 4.36882E-011 LBx 20 2 2.77681E-011 LCx 10 1 4.265E-011 CBEPCK 20 30 1.105E-013 CBCPCK 10 20 1E-014 CCEPCK 10 30 1E-015 LB 222 20 1.02449E-009 LC 10 11 1.89901E-009 * RBL 222 22 45 CBL 222 22 3E-011 * Rsub1 44 30 0.000500184 Rps 44 33 0.102733 * * * without access to the external thermal node Q1 11 22 33 44 M_BFQ790 * * with access to the thermal node * Q1 11 22 33 44 55 M_BFQ790 * .MODEL M_BFQ790 NPN Level=4( + Tnom=25 + Cbeo=9.31E-012 + Cje=7.693E-013 + Pe=0.5892 + Me=0.3115 + Aje=-0.5 + Wbe=1 + Cbco=1.966E-013 + Cjc=1E-015 + Pc=0.5095 + Mc=0.2797 + Ajc=-0.5 + Cjep=1.875E-012 + Cjcp=2.067E-012 + Ps=0.5086 + Ms=0.2865 + Ajs=-0.5 + Fc=0.93 + Vef=615.1 + Ver=5.61838 + Is=9.704E-015 + Nf=1.001 + Ibei=5E-017 + Nei=1.013 + Iben=3.609E-014 + Nen=1.46 + Ikf=2 + Nr=0.9958 + Ibci=1.001E-017 + Nci=1.015 + Ibcn=2.918E-014 + Ncn=1.399 + Ikr=0.2301 + Wsp=1 + Isp=1E-015 + Nfp=1 + Ibcip=2E-017 + Ncip=1 + Ibcnp=1.7E-015 + Ncnp=1.67 + Ikp=0.0002 + Ibeip=7E-017 + Ibenp=2.4E-014 + Re=0.2 + Rcx=0.02559 + Rci=1.168 + Qco=4E-015 + Vo=0.4234 + Gamm=2.199E-012 + Hrcf=0.1907 + Rbx=0.2825 + Rbi=1.868 + Rbp=0.001 + Rs=10 + Avc1=1 + Avc2=25.84 + Tf=3E-012 + Qtf=0.6758 + Xtf=0.01293 + Vtf=0.5 + Itf=0.1948 + Tr=1E-015 + Td=1E-015 + Cth=0 + Rth=20.05 + Ea=1.12 + Eaie=1.12 + Eaic=1.12 + Eais=1.12 + Eane=1.12 + Eanc=1.12 + Eans=1.12 + Xre=0 + Xrb=0 + Xrc=0 + Xrs=0 + Xvo=0 + Xis=1.907 + Xii=4.963 + Xin=-2.837 + Tnf=1E-006 + Tavc=0.006705 + Kfn=0 + Afn=1 + Bfn=1 ) *************************************************************** * .ENDS BFQ790 tmpk8ny_4pz/examples/vbic/DFF_Y_ECL.sp0000644000175000017500000000474113546075722017645 0ustar carstencarstenECL DFF VBIC test case * V6 D GND PULSE(-.25 0 0 1P 1P .25N .50N) V5 D_BAR GND PULSE(0 -.25 0 1P 1P .25N .50N) V4 CLK GND PULSE(-0.9 -1.2 0 1P 1P .125N .25N) V3 CLK_BAR GND PULSE(-1.2 -0.9 0 1P 1P .125N .25N) VVCS NET2 GND DC -0.8 R6 GND NET6 800 R5 GND NET11 800 R4 NET12 VEE 350 VVEE VEE GND DC -2.0 R3 GND NET10 800 R2 NET13 VEE 350 R1 GND Q 800 QVLGNPN16 NET7 CLK_BAR NET4 VEE NPN_VBIC_VLG QVLGNPN15 NET5 CLK NET3 VEE NPN_VBIC_VLG QVLGNPN14 NET10 Q NET7 VEE NPN_VBIC_VLG QVLGNPN13 Q NET6 NET9 VEE NPN_VBIC_VLG QVLGNPN12 NET6 NET11 NET5 VEE NPN_VBIC_VLG QVLGNPN11 NET11 D_BAR NET8 VEE NPN_VBIC_VLG QVLGNPN10 NET4 NET2 NET13 VEE NPN_VBIC_VLG QVLGNPN9 NET3 NET2 NET12 VEE NPN_VBIC_VLG QVLGNPN8 NET8 CLK_BAR NET3 VEE NPN_VBIC_VLG QVLGNPN7 NET9 CLK NET4 VEE NPN_VBIC_VLG QVLGNPN6 Q NET10 NET7 VEE NPN_VBIC_VLG QVLGNPN5 NET10 NET11 NET9 VEE NPN_VBIC_VLG QVLGNPN4 NET11 NET6 NET5 VEE NPN_VBIC_VLG QVLGNPN3 NET6 D NET8 VEE NPN_VBIC_VLG * .MODEL NPN_VBIC_VLG NPN LEVEL=4 +TNOM = 27 RCI = 1E3 RCX = 50 +VO = 1.5 GAMM = 3.402097E-11 HRCF = 1 +RBX = 243 RBI = 20 RE = 30 +RS = 0 RBP = 0 IS = 8.084033E-18 +NF = 1 NR = 1.005 FC = 0.5 +CJE = 2.083234E-15 PE = 0.8793669 ME = 0.3108762 +CJC = 1.803275E-15 PC = 0.5512188 MC = 0.4454263 +CJCP = 8E-15 PS = 0.66956 MS = 0.2243 +IBEI = 4.542609E-20 WBE = 1 NEI = 1 +IBEN = 3.275162E-16 NEN = 1.5543186 IBCI = 3.594252E-19 +NCI = 0.996 IBCN = 1.717776E-17 NCN = 1.202521 +AVC1 = 3E-4 AVC2 = 1E-5 ISP = 1.332E-19 +WSP = 1 NFP = 1 IBEIP = 0 +IBENP = 0 IBCIP = 0 NCIP = 1 +IBCNP = 0 NCNP = 2 VEF = 109.6523 +VER = 2.2052435 IKF = 6.03524E-3 IKR = 1.807895E-4 +IKP = 2.908576E-5 TF = 1.1E-12 XTF = 21.5423 +VTF = 12.4758677 ITF = 0.0175231 TR = 2.23542E-9 .SAVE V(D) V(CLK) V(Q) .control TRAN 0.25p 10n plot V(D) V(CLK) V(Q) .endc .END tmpk8ny_4pz/examples/vbic/vbic99_dc.sp0000644000175000017500000000270113546075722020040 0ustar carstencarsten***** VBIC99 level9 DC test ***** .OPTION gmin=1.0e-15 vbe bx 0 0 vcb cx bx 0 vib bx b 0 vic cx c 0 ve ex 0 0 vie ex e 0 vs sx 0 0 vis sx s 0 q1 c b e s dt vbic99 area=1 m=1 .model vbic99 npn level=9 +tref = 27.0 rcx = 10.0 rci = 60.0 vo = 2.0 +gamm = 2e-11 hrcf = 2.0 rbx = 10.0 rbi = 40.0 +re = 2.0 rs = 20.0 rbp = 40.0 is = 1.0e-16 +nf = 1.0 nr = 1.0 fc = 0.9 cbeo = 0.0 +cje = 1.0e-13 pe = 0.75 me = 0.33 aje = -0.5 +cbco = 0.0 cjc = 2e-14 qco = 1e-12 cjep = 1e-13 +pc = 0.75 mc = 0.33 ajc = -0.5 cjcp = 4e-13 +ps = 0.75 ms = 0.33 ajs = -0.5 ibei = 1.0e-18 +wbe = 1.0 nei = 1.0 iben = 5.0e-15 nen = 2.0 +ibci = 2.0e-17 nci = 1.0 ibcn = 5.0e-15 ncn = 2.0 +avc1 = 2.0 avc2 = 15.0 isp = 1.0e-15 wsp = 1.0 +nfp = 1.0 ibeip = 0.0 ibenp = 0.0 ibcip = 0.0 +ncip = 1.0 ibcnp = 0.0 ncnp = 2.0 vef = 10.0 +ver = 4.0 ikf = 2e-3 ikr = 2e-4 ikp = 2e-4 +tf = 10e-12 qtf = 0.0 xtf = 20.0 vtf = 0.0 +itf = 8e-2 tr = 100e-12 td = 1e-20 kfn = 0.0 +afn = 1.0 bfn = 1.0 xre = 0 xrbi = 0 +xrci = 0 xrs = 0 xvo = 0 ea = 1.12 +eaie = 1.12 eaic = 1.12 eais = 1.12 eane = 1.12 +eanc = 1.12 eans = 1.12 xis = 3.0 xii = 3.0 +xin = 3.0 tnf = 0.0 tavc = 0.0 rth = 300.0 +cth = 0.0 vrt = 0.0 art = 0.1 ccso = 0.0 +qbm = 0.0 nkf = 0.5 xikf = 0 xrcx = 0 +xrbx = 0 xrbp = 0 isrr = 1.0 xisr = 0.0 +dear = 0.0 eap = 1.12 vbbe = 0.0 nbbe = 1.0 +ibbe = 1.0e-6 tvbbe1 = 0.0 tvbbe2 = 0.0 tnbbe = 0.0 +ebbe = 0.0 .temp 27 .control dc vbe 0.1 1.1 0.02 plot i(vib) i(vic) abs(i(vis)) ylog plot v(dt) .endc .end tmpk8ny_4pz/examples/vbic/npn_ft.sp0000644000175000017500000000230313546075722017547 0ustar carstencarstenVBIC ft Test .include Infineon_VBIC.lib vce 1 0 dc 3.0 vgain 1 c dc 0.0 f 0 2 vgain -1000 l 2 b 1g c 2 0 1g ib 0 b dc 0.0 ac 1.0 ic 0 c 0.01 xq1 c b 0 0 BFP780 .control let ft_runs = 13 let run = 0 set curplot=new $ create a new plot set curplotname=ft_plot set curplottitle="Infineon BFP780 ft = f(Ic)" set scratch=$curplot $ store its name to 'scratch' setplot $scratch $ make 'scratch' the active plot let ft=unitvec(ft_runs) $ create a vector in plot 'scratch' to store ft data let ic=unitvec(ft_runs) $ create a vector in plot 'scratch' to store ic data foreach myic 1m 4m 7m 10m 20m 40m 60m 75m 90m 100m 110m 130m 180m alter ic = $myic ac dec 100 100k 50g *plot vdb(vgain#branch) meas ac freq_at when vdb(vgain#branch)=0 set run ="$&run" $ create a variable from the vector set dt = $curplot $ store the current plot to dt setplot $scratch $ make 'scratch' the active plot let ic[run] = $myic $ store ic to vector ft in plot 'scratch' let ft[run] = {$dt}.freq_at $ store ft to vector ft in plot 'scratch' setplot $dt $ go back to the previous plot let run = run + 1 end setplot unknown1 plot ft vs ic xlog .endc .end tmpk8ny_4pz/examples/vbic/qnva.mod0000644000175000017500000000651713546075722017400 0ustar carstencarsten.param +qnva_is=1.000e+00 +qnva_re=1.000e+00 +qnva_cje=1.000e+00 +qnva_cjc=1.000e+00 +qnva_vef=1.000e+00 +qnva_rcx=1.000e+00 +qnva_rbx=1.000e+00 +qnva_rci=1.000e+00 +qnva_ibei=1.000e+00 +qnva_iben=0.000e+00 +qnva_cjep=1.000e+00 +qnva_cjcp=1.000e+00 +qnva_ais=0.000e+00 +qnva_aibei=0.000e+00 +qnva_aiben=0.000e+00 .subckt qnva c b e s le=2.02 par1=1 q1 c b e s qnvamod area=1 .model qnvamod npn level=9 + tref=2.700e+01 + ebbe=2.111e-05 + vo=0.000e+00 + gamm=1.493e-13 hrcf=0.000e+00 + nf=1.000e+00 nr=1.008e+00 + fc=8.300e-01 pe=6.500e-01 + me=3.500e-01 aje=-5.000e-01 + qco=0.000e+00 pc=6.500e-01 + mc=3.200e-01 ajc=-5.000e-01 + ps=6.000e-01 ms=3.700e-01 + ajs=-5.000e-01 wbe=4.800e-01 + nei=1.000e+00 nen=2.000e+00 + nci=1.000e+00 ncn=2.100e+00 + avc1=2.258e+00 + wsp=1.000e+00 nfp=1.000e+00 + ncip=1.000e+00 ncnp=2.000e+00 + ver=8.807e+00 qtf=0.000e+00 + xtf=3.770e+00 vtf=1.667e+00 + tr=3.500e-10 td=0.000e+00 + afn=1.000e+00 kfn=5.500e-14 + bfn=1.000e+00 + xrbi=0.000e+00 xrci=0.000e+00 + xre=0.000e+00 xrs=0.000e+00 + xvo=0.000e+00 ea=1.130e+00 + eaie=1.130e+00 eaic=1.110e+00 + eais=1.110e+00 eane=1.110e+00 + eanc=1.110e+00 eans=1.110e+00 + xis=4.864e+00 xii=2.952e+00 + xin=2.952e+00 + tnf=0.000e+00 tavc=6.580e-04 + rth='(0.000e+00/le+0.000e+00)' + cth='(0.000e+00*le+0.000e+00)' + vrt=0.000e+00 art=1.000e-01 + qbm=1.000e+00 nkf=5.000e-01 + xikf=1.000e+00 xrcx=0.000e+00 + xrbx=0.000e+00 xrbp=0.000e+00 + isrr=1.230e+00 xisr=0.000e+00 + dear=0.000e+00 eap=1.110e+00 + vbbe=2.266e+00 nbbe=6.584e+00 + tvbbe1=2.000e-04 tvbbe2=0.000e+00 + tnbbe=-1.900e-03 + vef='qnva_vef*1.500e+01' + tf='1.000e+00*4.300e-12' + rcx='qnva_rcx*(1/(le/3.800e+02+1/3.000e+02))' + rci='qnva_rci*(1/(le/7.200e+02+1/4.800e+02))' + rbx='qnva_rbx*(1/(le/2.000e+02+1/1.000e+04))' + rbi='1.000e+00*(1/(le/3.000e+01+1/1.000e+04))' + rbp='1/(le/3.000e+01+1/1.000e+04)' + re='qnva_re*(1.800e+01/le+(2.778e+00))' + rs='1/(le/1.500e+01+1/1.000e+04)' + is='(1+qnva_ais/sqrt(par1*le))*qnva_is*(le*1.181e-18+(3.202e-19))' + cbeo='(le*0.000e+00+(5.000e-15))' + cbco='(le*0.000e+00+(3.000e-15))' + cje='qnva_cje*(le*2.326e-15+(-4.733e-30))' + cjc='qnva_cjc*(le*1.196e-15+(2.381e-15))' + cjep='qnva_cjep*(le*1.196e-15+(2.381e-15))' + cjcp='qnva_cjcp*(le*1.824e-15+(1.814e-14))' + ibei='(1+qnva_aibei/sqrt(par1*le))*qnva_ibei*(le*4.032e-20+(3.890e-21))' + iben='exp((qnva_aiben/sqrt(par1*le))+(qnva_iben))*(le*4.125e-16+(-6.420e-20))' + ibci='(le*1.220e-20+(1.086e-23))' + ibcn='(le*1.636e-15+(1.557e-18))' + isp='(le*1.137e-18+(2.280e-18))' + ibeip='(le*6.558e-20+(2.802e-19))' + ibenp='(le*3.311e-20+(-5.172e-24))' + ibcip='(le*4.290e-17+(7.958e-16))' + ibcnp='(le*6.212e-16+(-1.632e-19))' + ikf='1.000e+00*(le*1.253e-03+(2.165e-07))' + ikr='(le*1.540e-04+(-1.077e-07))' + ikp='(le*4.007e-05+(4.615e-05))' + itf='(le*5.037e-03+(-2.423e-06))' + ccso='(le*0.000e+00+(1.000e-18))' + ibbe='(le*7.769e-09+(-1.684e-12))' + avc2='1/(1.590e-03/le+1/1.892e+01)' .ends qnva tmpk8ny_4pz/examples/vbic/npn_gum.sp0000644000175000017500000000045713546075722017736 0ustar carstencarstenVBIC Gummel Test Ic=f(Vc,Vb) .include qnva.mod VB B 0 0.5 VC C 0 1.0 VS S 0 0.0 XQ1 C B 0 S qnva .control options gmin=1e-15 dc vb 0.2 1.2 0.01 plot abs(i(vc)) abs(i(vb)) abs(i(vs)) ylimit 0.1e-12 100e-3 ylog plot abs(i(vc))/abs(i(vb)) vs abs(-i(vc)) xlog xlimit 10e-12 10e-3 ylimit 0 40 .endc .end tmpk8ny_4pz/examples/tclspice/0000755000175000017500000000000013546075722016604 5ustar carstencarstentmpk8ny_4pz/examples/tclspice/tcl-testbench3/0000755000175000017500000000000013546075722021426 5ustar carstencarstentmpk8ny_4pz/examples/tclspice/tcl-testbench3/differentiate.tcl0000644000175000017500000001253513546075722024751 0ustar carstencarsten# differentiate.tcl -- # Numerical differentiation # namespace eval ::math::calculus { } namespace eval ::math::optimize { } # deriv -- # Return the derivative of a function at a given point # Arguments: # func Name of a procedure implementing the function # point Coordinates of the point # scale (Optional) the scale of the coordinates # Result: # List representing the gradient vector at the given point # Note: # The scale is necessary to create a proper step in the # coordinates. The derivative is estimated using central # differences. # The function may have an arbitrary number of arguments, # for each the derivative is determined - this results # in a list of derivatives rather than a single value. # (No provision is made for the function to be a # vector function! So, second derivatives are not # possible) # proc ::math::calculus::deriv {func point {scale {}} } { set epsilon 1.0e-12 set eps2 [expr {sqrt($epsilon)}] # # Determine a scale # foreach c $point { if { $scale == {} } { set scale [expr {abs($c)}] } else { if { $scale < abs($c) } { set scale [expr {abs($c)}] } } } if { $scale == 0.0 } { set scale 1.0 } # # Check the number of coordinates # if { [llength $point] == 1 } { set v1 [$func [expr {$point+$eps2*$scale}]] set v2 [$func [expr {$point-$eps2*$scale}]] return [expr {($v1-$v2)/(2.0*$eps2*$scale)}] } else { set result {} set idx 0 foreach c $point { set c1 [expr {$c+$eps2*$scale}] set c2 [expr {$c-$eps2*$scale}] set v1 [eval $func [lreplace $point $idx $idx $c1]] set v2 [eval $func [lreplace $point $idx $idx $c2]] lappend result [expr {($v1-$v2)/(2.0*$eps2*$scale)}] incr idx } return $result } } # auxiliary functions -- # proc ::math::optimize::unitVector {vector} { set length 0.0 foreach c $vector { set length [expr {$length+$c*$c}] } scaleVector $vector [expr {1.0/sqrt($length)}] } proc ::math::optimize::scaleVector {vector scale} { set result {} foreach c $vector { lappend result [expr {$c*$scale}] } return $result } proc ::math::optimize::addVector {vector1 vector2} { set result {} foreach c1 $vector1 c2 $vector2 { lappend result [expr {$c1+$c2}] } return $result } # minimumSteepestDescent -- # Find the minimum of a function via steepest descent # (unconstrained!) # Arguments: # func Name of a procedure implementing the function # point Coordinates of the starting point # eps (Optional) measure for the accuracy # maxsteps (Optional) maximum number of steps # Result: # Coordinates of a point near the minimum # proc ::math::optimize::minimumSteepestDescent {func point {eps 1.0e-5} {maxsteps 100} } { set factor 100 set nosteps 0 if { [llength $point] == 1 } { while { $nosteps < $maxsteps } { set fvalue [$func $point] set gradient [::math::calculus::deriv $func $point] if { $gradient < 0.0 } { set gradient -1.0 } else { set gradient 1.0 } set found 0 set substeps 0 while { $found == 0 && $substeps < 3 } { set newpoint [expr {$point-$factor*$gradient}] set newfval [$func $newpoint] #puts "factor: $factor - point: $point" # # Check that the new point has a lower value for the # function. Can we increase the factor? # # if { $newfval < $fvalue } { set point $newpoint # # This failed with sin(x), x0 = 1.0 # set newpoint2 [expr {$newpoint-$factor*$gradient}] # set newfval2 [$func $newpoint2] # if { $newfval2 < $newfval } { # set factor [expr {2.0*$factor}] # set point $newpoint2 # } set found 1 } else { set factor [expr {$factor/2.0}] } incr substeps } # # Have we reached convergence? # if { abs($factor*$gradient) < $eps } { break } incr nosteps } } else { while { $nosteps < $maxsteps } { set fvalue [eval $func $point] set gradient [::math::calculus::deriv $func $point] set gradient [unitVector $gradient] set found 0 set substeps 0 while { $found == 0 && $nosteps < $maxsteps } { set newpoint [addVector $point [scaleVector $gradient -$factor]] set newfval [eval $func $newpoint] #puts "factor: $factor - point: $point" # # Check that the new point has a lower value for the # function. Can we increase the factor? # # if { $newfval < $fvalue } { set point $newpoint set found 1 } else { set factor [expr {$factor/2.0}] } incr nosteps } # # Have we reached convergence? # if { abs($factor) < $eps } { break } incr nosteps } } return $point } tmpk8ny_4pz/examples/tclspice/tcl-testbench3/FB14.cir0000644000175000017500000002664513546075722022576 0ustar carstencarsten* gnetlist -g spice-sdb -o tmp.lst FB14_batterie.sch ********************************************************* * Spice file generated by gnetlist * * spice-sdb version 12.27.2005 by SDB -- * * provides advanced spice netlisting capability. * * Documentation at http://www.brorson.com/gEDA/SPICE/ * ********************************************************* *vvvvvvvv Included SPICE model from models/tl431.cir vvvvvvvv * modele du TL431 .subckt TL431-R REFIN ANODE CATHODE Q8 Q2_C Q2_C R4_N 0 P1 Q9 CATHODE Q7_C Q9_E 0 n1 R8 Q4_E ANODE 800 R9 Q2_E R9_N 4k Q10 CATHODE R6_P ANODE 0 n1 5 Q11 Q7_C R10_P ANODE 0 n1 *.nodeset R3_N 1 C2 R9_N C2_N 20p R10 R10_P R1_N 1k C1 CATHODE Q7_C 20p D1 ANODE Q7_C DIODE D2 ANODE CATHODE DIODE R4 CATHODE R4_N 800 Q2 Q2_C Q1_E Q2_E 0 n1 Q3 R9_N C2_N ANODE 0 n1 R5 CATHODE R5_N 800 R6 R6_P Q9_E 150 Q1 CATHODE REFIN Q1_E 0 n1 R7 ANODE R6_P 10k Q6 Q7_C Q7_C REFIN 0 n1 Q7 Q7_C Q2_C R5_N 0 P1 R1 R3_N R1_N 2.4k R2 R3_N C2_N 7.2k Q4 C2_N R1_N Q4_E 0 n1 Q5 R1_N R1_N ANODE 0 n1 R3 Q1_E R3_N 3.28k .model p1 pnp bf=50 .model n1 npn bf=100 tf=2n cjc=1p is=5e-18 NF=1.07 .model diode d rs=1 cjo=2p .ends *^^^^^^^^ End of included SPICE model from models/tl431.cir ^^^^^^^^ * *vvvvvvvv Included SPICE model from models/irf4905.spi vvvvvvvv .SUBCKT irf4905 1 2 3 ************************************** * Model Generated by MODPEX * *Copyright(c) Symmetry Design Systems* * All Rights Reserved * * UNPUBLISHED LICENSED SOFTWARE * * Contains Proprietary Information * * Which is The Property of * * SYMMETRY OR ITS LICENSORS * *Commercial Use or Resale Restricted * * by Symmetry License Agreement * ************************************** * Model generated on Jun 19, 96 * Model format: SPICE3 * Symmetry POWER MOS Model (Version 1.0) * External Node Designations * Node 1 -> Drain * Node 2 -> Gate * Node 3 -> Source M1 9 7 8 8 MM L=100u W=100u * Default values used in MM: * The voltage-dependent capacitances are * not included. Other default values are: * RS=0 RD=0 LD=0 CBD=0 CBS=0 CGBO=0 .MODEL MM PMOS LEVEL=1 IS=1e-32 +VTO=-3.53713 LAMBDA=0.00549383 KP=23.3701 +CGSO=2.84439e-05 CGDO=1e-11 RS 8 3 0.0101265 D1 1 3 MD .MODEL MD D IS=1.29014e-08 RS=0.00297795 N=1.46717 BV=55 +IBV=0.00025 EG=1.2 XTI=4 TT=0 +CJO=3.56968e-09 VJ=1.17553 M=0.500933 FC=0.5 RDS 3 1 2.2e+06 RD 9 1 0.0001 RG 2 7 6 D2 5 4 MD1 * Default values used in MD1: * RS=0 EG=1.11 XTI=3.0 TT=0 * BV=infinite IBV=1mA .MODEL MD1 D IS=1e-32 N=50 +CJO=4.83772e-09 VJ=0.625334 M=0.543532 FC=1e-08 D3 5 0 MD2 * Default values used in MD2: * EG=1.11 XTI=3.0 TT=0 CJO=0 * BV=infinite IBV=1mA .MODEL MD2 D IS=1e-10 N=0.4 RS=3e-06 RL 5 10 1 FI2 7 9 VFI2 -1 VFI2 4 0 0 EV16 10 0 9 7 1 CAP 11 10 6.08035e-09 FI1 7 9 VFI1 -1 VFI1 11 6 0 RCAP 6 10 1 D4 6 0 MD3 * Default values used in MD3: * EG=1.11 XTI=3.0 TT=0 CJO=0 * RS=0 BV=infinite IBV=1mA .MODEL MD3 D IS=1e-10 N=0.4 .ENDS *^^^^^^^^ End of included SPICE model from models/irf4905.spi ^^^^^^^^ * *vvvvvvvv Included SPICE model from models/LM2902.MOD vvvvvvvv *////////////////////////////////////////////////////////////////////// * (C) National Semiconductor, Inc. * Models developed and under copyright by: * National Semiconductor, Inc. *///////////////////////////////////////////////////////////////////// * Legal Notice: This material is intended for free software support. * The file may be copied, and distributed; however, reselling the * material is illegal *//////////////////////////////////////////////////////////////////// * For ordering or technical information on these models, contact: * National Semiconductor's Customer Response Center * 7:00 A.M.--7:00 P.M. U.S. Central Time * (800) 272-9959 * For Applications support, contact the Internet address: * amps-apps@galaxy.nsc.com *////////////////////////////////////////////////////////// *LM2902 QUAD OPERATIONAL AMPLIFIER MACRO-MODEL *////////////////////////////////////////////////////////// * * connections: non-inverting input * | inverting input * | | positive power supply * | | | negative power supply * | | | | output * | | | | | * | | | | | .SUBCKT LM2902/NS 1 2 99 50 28 * *Features: *Eliminates need for dual supplies *Large DC voltage gain = 100dB *High bandwidth = 1MHz *Low input offset voltage = 2mV *Wide supply range = +-1.5V to +-16V * *NOTE: Model is for single device only and simulated * supply current is 1/4 of total device current. * Output crossover distortion with dual supplies * is not modeled. * ****************INPUT STAGE************** * IOS 2 1 5N *^Input offset current R1 1 3 500K R2 3 2 500K I1 99 4 100U R3 5 50 517 R4 6 50 517 Q1 5 2 4 QX Q2 6 7 4 QX *Fp2=1.2 MHz C4 5 6 128.27P * ***********COMMON MODE EFFECT*********** * I2 99 50 75U *^Quiescent supply current EOS 7 1 POLY(1) 16 49 2E-3 1 *Input offset voltage.^ R8 99 49 60K R9 49 50 60K * *********OUTPUT VOLTAGE LIMITING******** V2 99 8 1.63 D1 9 8 DX D2 10 9 DX V3 10 50 .635 * **************SECOND STAGE************** * EH 99 98 99 49 1 G1 98 9 POLY(1) 5 6 0 9.8772E-4 0 .3459 *Fp1=7.86 Hz R5 98 9 101.2433MEG C3 98 9 200P * ***************POLE STAGE*************** * *Fp=2 MHz G3 98 15 9 49 1E-6 R12 98 15 1MEG C5 98 15 7.9577E-14 * *********COMMON-MODE ZERO STAGE********* * *Fpcm=10 KHz G4 98 16 3 49 5.6234E-8 L2 98 17 15.9M R13 17 16 1K * **************OUTPUT STAGE************** * F6 50 99 POLY(1) V6 300U 1 E1 99 23 99 15 1 R16 24 23 17.5 D5 26 24 DX V6 26 22 .63V R17 23 25 17.5 D6 25 27 DX V7 22 27 .63V V5 22 21 0.27V D4 21 15 DX V4 20 22 0.27V D3 15 20 DX L3 22 28 500P RL3 22 28 100K * ***************MODELS USED************** * .MODEL DX D(IS=1E-15) .MODEL QX PNP(BF=1.111E3) * .ENDS *$ *^^^^^^^^ End of included SPICE model from models/LM2902.MOD ^^^^^^^^ * *vvvvvvvv Included SPICE model from models/bas70.mod vvvvvvvv * .SUBCKT BAS70 1 3 * The Resistor R1 does not reflect * a physical device. Instead it * improves modeling in the reverse * mode of operation. R1 1 3 1.409E+09 D1 1 3 modBAS70 .MODEL modBAS70 D( + IS = 3.22E-09 + N = 1.018 + BV = 77 *+ IBV = 1.67E-07 + IBV = 10E-06 + RS = 20.89 + CJO = 1.655E-12 + VJ = 0.349 + M = 0.3583 + FC = 0.5 + TT = 0 + EG = 0.69 + XTI = 2) .ENDS * *^^^^^^^^ End of included SPICE model from models/bas70.mod ^^^^^^^^ * *vvvvvvvv Included SPICE model from models/BC547B.spi vvvvvvvv * .MODEL QBC547B NPN( + IS=2.39E-14 + NF=1.008 + ISE=3.545E-15 + NE=1.541 + BF=294.3 + IKF=0.1357 + VAF=63.2 + NR=1.004 + ISC=6.272E-14 + NC=1.243 + BR=7.946 + IKR=0.1144 + VAR=25.9 + RB=1 + IRB=1E-06 + RBM=1 + RE=0.4683 + RC=0.85 + XTB=0 + EG=1.11 + XTI=3 + CJE=1.358E-11 + VJE=0.65 + MJE=0.3279 + TF=4.391E-10 + XTF=120 + VTF=2.643 + ITF=0.7495 + PTF=0 + CJC=3.728E-12 + VJC=0.3997 + MJC=0.2955 + XCJC=0.6193 + TR=1E-32 + CJS=0 + VJS=0.75 + MJS=0.333 + FC=0.9579 ) * *^^^^^^^^ End of included SPICE model from models/BC547B.spi ^^^^^^^^ * *vvvvvvvv Included SPICE model from models/LM293.5_1 vvvvvvvv * LM293 VOLTAGE COMPARATOR "MACROMODEL" SUBCIRCUIT * CREATED USING PARTS VERSION 4.03 ON 03/07/90 AT 14:17 * REV (N/A) * CONNECTIONS: NON-INVERTING INPUT * | INVERTING INPUT * | | POSITIVE POWER SUPPLY * | | | NEGATIVE POWER SUPPLY * | | | | OPEN COLLECTOR OUTPUT * | | | | | .SUBCKT LM293 1 2 3 4 5 * F1 9 3 V1 1 IEE 3 7 DC 100.0E-6 VI1 21 1 DC .75 VI2 22 2 DC .75 Q1 9 21 7 QIN Q2 8 22 7 QIN Q3 9 8 4 QMO Q4 8 8 4 QMI .MODEL QIN PNP(IS=800.0E-18 BF=2.000E3) .MODEL QMI NPN(IS=800.0E-18 BF=1002) .MODEL QMO NPN(IS=800.0E-18 BF=1000 CJC=1E-15 TR=807.4E-9) E1 10 4 9 4 1 V1 10 11 DC 0 Q5 5 11 4 QOC .MODEL QOC NPN(IS=800.0E-18 BF=20.29E3 CJC=1E-15 TF=942.6E-12 TR=543.8E-9) DP 4 3 modDX RP 3 4 46.3E3 .MODEL modDX D(IS=800.0E-18) * .ENDS *^^^^^^^^ End of included SPICE model from models/LM293.5_1 ^^^^^^^^ * *vvvvvvvv Included SPICE model from models/NTD18N06L.REV0.SP3 vvvvvvvv .SUBCKT ntd18n06l 1 2 3 ************************************** * Model Generated by MODPEX * *Copyright(c) Symmetry Design Systems* * All Rights Reserved * * UNPUBLISHED LICENSED SOFTWARE * * Contains Proprietary Information * * Which is The Property of * * SYMMETRY OR ITS LICENSORS * *Commercial Use or Resale Restricted * * by Symmetry License Agreement * ************************************** * Model generated on Aug 3, 04 * MODEL FORMAT: SPICE3 * Symmetry POWER MOS Model (Version 1.0) * External Node Designations * Node 1 -> Drain * Node 2 -> Gate * Node 3 -> Source M1 9 7 8 8 MM L=100u W=100u * Default values used in MM: * The voltage-dependent capacitances are * not included. Other default values are: * RS=0 RD=0 LD=0 CBD=0 CBS=0 CGBO=0 .MODEL MM NMOS LEVEL=1 IS=1e-32 +VTO=1.98948 LAMBDA=0 KP=21.272 +CGSO=4.18085e-06 CGDO=8.56633e-08 RS 8 3 0.0375073 D1 3 1 MD .MODEL MD D IS=8.82716e-09 RS=0.00616994 N=1.5 BV=60 +IBV=0.00025 EG=1 XTI=2.2423 TT=0 +CJO=5.77207e-10 VJ=0.656334 M=0.448458 FC=0.5 RDS 3 1 2.4e+11 RD 9 1 0.0001 RG 2 7 17.1584 D2 4 5 MD1 * Default values used in MD1: * RS=0 EG=1.11 XTI=3.0 TT=0 * BV=infinite IBV=1mA .MODEL MD1 D IS=1e-32 N=50 +CJO=6.54462e-10 VJ=1.69471 M=0.891807 FC=1e-08 D3 0 5 MD2 * Default values used in MD2: * EG=1.11 XTI=3.0 TT=0 CJO=0 * BV=infinite IBV=1mA .MODEL MD2 D IS=1e-10 N=0.400114 RS=3e-06 RL 5 10 1 FI2 7 9 VFI2 -1 VFI2 4 0 0 EV16 10 0 9 7 1 CAP 11 10 6.54462e-10 FI1 7 9 VFI1 -1 VFI1 11 6 0 RCAP 6 10 1 D4 0 6 MD3 * Default values used in MD3: * EG=1.11 XTI=3.0 TT=0 CJO=0 * RS=0 BV=infinite IBV=1mA .MODEL MD3 D IS=1e-10 N=0.400114 .ENDS ntd18n06l *^^^^^^^^ End of included SPICE model from models/NTD18N06L.REV0.SP3 ^^^^^^^^ * *============== Begin SPICE netlist of main design ============ X10 iimage vertsup Vcc 0 ledverte LM293 R20 vmbatm 1 10k *.INCLUDE models/NTD18N06L.REV0.SP3 *.INCLUDE models/LM293.5_1 R33 Imbat V9p 100 *.INCLUDE models/BC547B.spi R32 V9p 0 10k *.INCLUDE models/bas70.mod R31 ledverte Vcc 22k *.INCLUDE models/LM2902.MOD R30 ledrouge Vcc 22k *.INCLUDE models/irf4905.spi *.INCLUDE models/tl431.cir Vbat 2 vmbatm DC 9V V3 3 0 DC 6V R? 0 Vcc 2.2k R19 vmbat Vs2 22k V1 Vcc 0 DC 26V R18 Vs2 Vcc 2.2k R17 vref2 0 430 R16 v7m Vs2 100k X9 V9p V9m Vcc 0 Iimage LM2902/NS R15 iimage v7m 100 R14 vmbat imbat 0.1 X8 vcc 1 BAS70 R9 Vcc vref1 2.2k R29 0 vertsup 1K X7 vref2 v7m Vcc 0 Vs2 LM293 R8 V2p Vs2 100k R13 Vcc vref_temp 2.2k R28 vertsup ledrouge 22k X6 Vcc Vs2 imbat ntd18n06l R7 V2p Vimage 1k R12 0 Vtest_temp 6.05k R27 rougesup rougeinf 20k X5 0 1 vmbatm ntd18n06l R6 vref2 Vtest1 660 R11 Vtest_temp vref_temp 10k R26 0 rougeinf 2.2k R10 Vtest_temp vref_temp 9.387k X4 Vtest1 0 vref1 TL431-R R5 Vtest1 vref1 2.83k R25 3 rougesup 2.2k X3 Vtest_temp 0 vref_temp TL431-R R4 0 v1p 22k Vvcc cmd_buck 0 DC 0V R24 V9m Iimage 10k X2 vref_temp V2p Vcc 0 Vs2 LM293 R3 V1m Vimage 22k X13 ledrouge 4 BAS70 R23 Vmbat V9m 100 X1 v1p V1m Vcc 0 Vimage LM2902/NS R2 vref1 V1m 22k Rbat 2 vmbat 100 X12 vimage rougeinf Vcc 0 4 LM293 R22 Vmbatm V1m 22k R1 vmbat v1p 22k X11 rougesup vimage Vcc 0 4 LM293 R21 0 v1p 22k .end tmpk8ny_4pz/examples/tclspice/tcl-testbench3/tcl-testbench3.sh0000755000175000017500000000646413546075722024621 0ustar carstencarsten#!/bin/sh # -*- mode: tcl -*- \ exec wish -f "$0" ${1+"$@"} package require BLT load ../../../src/.libs/libspice.so source differentiate.tcl spice::codemodel ../../../src/xspice/icm/spice2poly/spice2poly.cm proc temperatures_calc {temp_inf temp_sup points} { set tstep [ expr " ( $temp_sup - $temp_inf ) / $points " ] set t $temp_inf set temperatures "" for { set i 0 } { $i < $points } { incr i } { set t [ expr { $t + $tstep } ] set temperatures "$temperatures $t" } return $temperatures } proc thermistance_calc { res B points } { set tzero 273.15 set tref 25 set thermistance "" foreach t $points { set res_temp [expr " $res * exp ( $B * ( 1 / ($tzero + $t) - 1 / ( $tzero + $tref ) ) ) " ] set thermistance "$thermistance $res_temp" } return $thermistance } proc tref_calc { points } { set tref "" foreach t $points { set tref " $tref [ expr " 6 * (2.275-0.005*($t - 20) ) - 9 " ] " } return $tref } proc iteration { t } { set tzero 273.15 spice::alter r11=[ thermistance_calc 10000 3900 $t ] #spice::set temp = [ expr " $tzero + $t " ] spice::op spice::vectoblt vref_temp tref_tmp spice::destroy all return [ tref_tmp range 0 0 ] } proc cost_square { r10 r12 } { tref_blt length 0 spice::alter r10=$r10 spice::alter r12=$r12 foreach point [ temperatures_blt range 0 [ expr " [temperatures_blt length ] - 1" ] ] { tref_blt append [ iteration $point ] } set result [ blt::vector expr " sum(( tref_blt - expected_blt )^2 )" ] puts "result square : r10 = $r10 r12 = $r12 gives $result" return $result } proc cost_sup { r10 r12 } { tref_blt length 0 spice::alter r10=$r10 spice::alter r12=$r12 foreach point [ temperatures_blt range 0 [ expr " [temperatures_blt length ] - 1" ] ] { tref_blt append [ iteration $point ] } set result [ blt::vector expr " max(sqrt(( tref_blt - expected_blt )^2 ))" ] puts "result sup : $result" puts "result sup : r10 = $r10 r12 = $r12 gives $result" return $result } proc disp_curve { r10 r12 } { .g configure -title "Valeurs optimales: R10 = $r10 R12 = $r12" } # # Optimisation # blt::vector create tref_tmp blt::vector create tref_blt blt::vector create expected_blt blt::vector create temperatures_blt temperatures_blt append [ temperatures_calc -25 75 30 ] expected_blt append [ tref_calc [temperatures_blt range 0 [ expr " [ temperatures_blt length ] - 1" ] ] ] blt::graph .g pack .g -side top -fill both -expand true .g element create real -pixels 4 -xdata temperatures_blt -ydata tref_blt .g element create expected -fill red -pixels 0 -dashes dot -xdata temperatures_blt -ydata expected_blt spice::source FB14.cir # point1 max iteration is the last argument set r10r12 [ ::math::optimize::minimumSteepestDescent cost_square { 10000 10000 } 1.9 20 ] puts "$r10r12 " regexp {([0-9.]*) ([0-9.]*)} $r10r12 r10r12 r10 r12 puts "result square with : r10 = $r10 r12 = $r12 " set r10r12 [ ::math::optimize::minimumSteepestDescent cost_sup " $r10 $r12 " 0.05 20 ] puts "$r10r12 " regexp {([0-9.]*) ([0-9.]*)} $r10r12 r10r12 r10 r12 puts "result sup with : r10 = $r10 r12 = $r12 " # # Results # spice::alter r10=$r10 spice::alter r12=$r12 foreach point [ temperatures_blt range 0 [ expr " [temperatures_blt length ] - 1" ] ] { tref_blt append [ iteration $point ] } disp_curve $r10 $r12 tmpk8ny_4pz/examples/tclspice/tcl/0000755000175000017500000000000013546075722017366 5ustar carstencarstentmpk8ny_4pz/examples/tclspice/tcl/test_vectoblt.sh0000755000175000017500000001070713546075722022613 0ustar carstencarsten#!/bin/sh # -*- mode: tcl -*- \ exec wish -f "$0" ${1+"$@"} package require BLT load ../../../src/.libs/libspice.so spice::source "diffpair.cir" spice::op spice::let Vd = V(5) - V(4) blt::vector create imag blt::vector create real set ok 0 ################### puts " Vd is a real vector of length 1" ################### #too many arguments if {[catch {spice::vectoblt raul ibrahim ector karim} erreur] != 0} {puts "ERROR EXPECTED: TEST 1 OK:\n\t$erreur"; set ok [expr {$ok + 1}]} else {puts "TEST 1 ERROR\n\t Test 1 should return TCL_ERROR, but it does not"} #no acceptable argument if {[catch {spice::vectoblt raul ibrahim ector} erreur] != 0} {puts "ERROR EXPECTED: TEST 2 OK:\n\t$erreur"; set ok [expr {$ok + 1}]} else {puts "TEST 2 ERROR\n\t Test 1 should return TCL_ERROR, but it does not"} #no acceptable blt vector if {[catch {spice::vectoblt Vd ibrahim} erreur] != 0} {puts "ERROR EXPECTED: TEST 3 OK:\n\t$erreur"; set ok [expr {$ok + 1}]} else {puts "TEST 3 ERROR\n\t Test 1 should return TCL_ERROR, but it does not"} #real part affectation if {[catch {spice::vectoblt Vd real} erreur] == 0} {puts "NO ERROR IN AFFECTATION. TEST 4 OK:\n\t (Blank line)"; set ok [expr {$ok + 1}]} else {puts "TEST 4 ERROR\n\t Test 1 should return TCL_ERROR, but it does not"} #no acceptable blt vector (2 vectors) if {[catch {spice::vectoblt Vd ibrahim ector} erreur] != 0} {puts "ERROR EXPECTED: TEST 5 OK:\n\t$erreur"; set ok [expr {$ok + 1}]} else {puts "TEST 5 ERROR\n\t Test 1 should return TCL_ERROR, but it does not"} #no acceptable imaginary vector if {[catch {spice::vectoblt Vd real ector} erreur] != 0} {puts "ERROR EXPECTED: TEST 6 OK:\n\t$erreur"; set ok [expr {$ok + 1}]} else {puts "TEST 6 ERROR\n\t Test 1 should return TCL_ERROR, but it does not"} #real and imaginary part affectation if {[catch {spice::vectoblt Vd real imag} erreur] == 0} {puts "NO ERROR IN AFFECTATION. TEST 7 OK:\n\t (Blank line)"; set ok [expr {$ok + 1}]} else {puts "TEST 7 ERROR\n\t Test 1 should return TCL_ERROR, but it does not"} #all good vectors, but another argument invited himself if {[catch {spice::vectoblt Vd real imag karim} erreur] != 0} {puts "ERROR EXPECTED: TEST 8 OK:\n\t$erreur"; set ok [expr {$ok + 1}]} else {puts "TEST 8 ERROR\n\t Test 1 should return TCL_ERROR, but it does not"} ################### puts " Vd is a complex vector of length 10" ################### spice::op spice::ac dec 10 100 1000 spice::let Vd = V(5) - V(4) #too many arguments if {[catch {spice::vectoblt raul ibrahim ector karim} erreur] != 0} {puts "ERROR EXPECTED: TEST 1 OK:\n\t$erreur"; set ok [expr {$ok + 1}]} else {puts "TEST 1 ERROR\n\t Test 1 should return TCL_ERROR, but it does not"} #no acceptable argument if {[catch {spice::vectoblt raul ibrahim ector} erreur] != 0} {puts "ERROR EXPECTED: TEST 2 OK:\n\t$erreur"; set ok [expr {$ok + 1}]} else {puts "TEST 2 ERROR\n\t Test 1 should return TCL_ERROR, but it does not"} #no acceptable blt vector if {[catch {spice::vectoblt Vd ibrahim} erreur] != 0} {puts "ERROR EXPECTED: TEST 3 OK:\n\t$erreur"; set ok [expr {$ok + 1}]} else {puts "TEST 3 ERROR\n\t Test 1 should return TCL_ERROR, but it does not"} #real part affectation if {[catch {spice::vectoblt Vd real} erreur] == 0} {puts "NO ERROR IN AFFECTATION. TEST 4 OK:\n\t (Blank line)"; set ok [expr {$ok + 1}]} else {puts "TEST 4 ERROR\n\t Test 1 should return TCL_ERROR, but it does not"} #no acceptable blt vector (2 vectors) if {[catch {spice::vectoblt Vd ibrahim ector} erreur] != 0} {puts "ERROR EXPECTED: TEST 5 OK:\n\t$erreur"; set ok [expr {$ok + 1}]} else {puts "TEST 5 ERROR\n\t Test 1 should return TCL_ERROR, but it does not"} #no acceptable imaginary vector if {[catch {spice::vectoblt Vd real ector} erreur] != 0} {puts "ERROR EXPECTED: TEST 6 OK:\n\t$erreur"; set ok [expr {$ok + 1}]} else {puts "TEST 6 ERROR\n\t Test 1 should return TCL_ERROR, but it does not"} #real and imaginary part affectation if {[catch {spice::vectoblt Vd real imag} erreur] == 0} {puts "NO ERROR IN AFFECTATION. TEST 7 OK:\n\t (Blank line)"; set ok [expr {$ok + 1}]} else {puts "TEST 7 ERROR\n\t Test 1 should return TCL_ERROR, but it does not"} #all good vectors, but another argument invited himself if {[catch {spice::vectoblt Vd real imag karim} erreur] != 0} {puts "ERROR EXPECTED: TEST 8 OK:\n\t$erreur"; set ok [expr {$ok + 1}]} else {puts "TEST 8 ERROR\n\t Test 1 should return TCL_ERROR, but it does not"} puts "\n\n" if {$ok == 16} {puts "spice::vectoblt OK ($ok/16 tests ok)"} else {puts "spice::vectoblt KO:\n\t$ok/16 tests ok"} tmpk8ny_4pz/examples/tclspice/tcl/diffpair.cir0000644000175000017500000000101013546075722021641 0ustar carstencarstensimple differential pair - CM and DM dc sensitivity * Models: .model qnl npn(bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf cjc=2pf va=50) .model qnr npn(bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf cjc=2pf va=50) * Circuit description: q1 4 2 6 qnr q2 5 3 6 qnl rs1 11 2 1k rs2 3 1 1k rc1 4 8 10k rc2 5 8 10k q3 7 7 9 qnl q4 6 7 9 qnr rbias 7 8 20k * Inputs/Supplies: vcm 1 0 dc 0 sin(0 0.1 5meg) ac 1 vdm 1 11 dc 0 sin(0 0.1 5meg) ac 1 vcc 8 0 12 vee 9 0 -12 * Analysys: .tf v(5) vcm .tf v(5) vdm .sens v(5,4) .end tmpk8ny_4pz/examples/tclspice/tcl-testbench4/0000755000175000017500000000000013546075722021427 5ustar carstencarstentmpk8ny_4pz/examples/tclspice/tcl-testbench4/bltGraph.tcl0000644000175000017500000003345313546075722023706 0ustar carstencarsten proc Blt_ActiveLegend { graph } { $graph legend bind all [list blt::ActivateLegend $graph ] $graph legend bind all [list blt::DeactivateLegend $graph] $graph legend bind all [list blt::HighlightLegend $graph] } proc Blt_Crosshairs { graph } { blt::Crosshairs $graph } proc Blt_ZoomStack { graph } { blt::ZoomStack $graph } proc Blt_PrintKey { graph } { blt::PrintKey $graph } proc Blt_ClosestPoint { graph } { blt::ClosestPoint $graph } # # The following procedures that reside in the "blt" namespace are # supposed to be private. # proc blt::ActivateLegend { graph } { set elem [$graph legend get current] $graph legend activate $elem } proc blt::DeactivateLegend { graph } { set elem [$graph legend get current] $graph legend deactivate $elem } proc blt::HighlightLegend { graph } { set elem [$graph legend get current] set relief [$graph element cget $elem -labelrelief] if { $relief == "flat" } { $graph element configure $elem -labelrelief raised $graph element activate $elem } else { $graph element configure $elem -labelrelief flat $graph element deactivate $elem } } proc blt::Crosshairs { graph { event "Any-Motion" } } { $graph crosshairs on bind bltCrosshairs <$event> { %W crosshairs configure -position @%x,%y } $graph crosshairs configure -color red blt::AddBindTag $graph bltCrosshairs } proc blt::InitStack { graph } { global zoomInfo set zoomInfo($graph,interval) 100 set zoomInfo($graph,afterId) 0 set zoomInfo($graph,A,x) {} set zoomInfo($graph,A,y) {} set zoomInfo($graph,B,x) {} set zoomInfo($graph,B,y) {} set zoomInfo($graph,stack) {} set zoomInfo($graph,corner) A } proc blt::ZoomStack { graph {start "ButtonPress-1"} {reset "ButtonPress-3"} } { global zoomInfo zoomMod blt::InitStack $graph if { [info exists zoomMod] } { set modifier $zoomMod } else { set modifier "" } bind bltZoomGraph <${modifier}${start}> { blt::SetZoomPoint %W %x %y } bind bltZoomGraph <${modifier}${reset}> { if { [%W inside %x %y] } { blt::ResetZoom %W } } blt::AddBindTag $graph bltZoomGraph } proc blt::PrintKey { graph {event "Shift-ButtonRelease-3"} } { bind bltPrintGraph <$event> { Blt_PostScriptDialog %W } blt::AddBindTag $graph bltPrintGraph } proc blt::ClosestPoint { graph {event "Control-ButtonPress-2"} } { bind bltClosestPoint <$event> { blt::FindElement %W %x %y } blt::AddBindTag $graph bltClosestPoint } proc blt::AddBindTag { graph name } { set oldtags [bindtags $graph] if { [lsearch $oldtags $name] < 0 } { bindtags $graph [concat $name $oldtags] } } proc blt::FindElement { graph x y } { if ![$graph element closest $x $y info -interpolate yes] { beep return } # -------------------------------------------------------------- # find(name) - element Id # find(index) - index of closest point # find(x) find(y) - coordinates of closest point # or closest point on line segment. # find(dist) - distance from sample coordinate # -------------------------------------------------------------- set markerName "bltClosest_$info(name)" catch { $graph marker delete $markerName } $graph marker create text -coords { $info(x) $info(y) } \ -name $markerName \ -text "$info(name): $info(dist)\nindex $info(index)" \ -font *lucida*-r-*-10-* \ -anchor center -justify left \ -yoffset 0 -bg {} set coords [$graph invtransform $x $y] set nx [lindex $coords 0] set ny [lindex $coords 1] $graph marker create line -coords "$nx $ny $info(x) $info(y)" \ -name line.$markerName blt::FlashPoint $graph $info(name) $info(index) 10 blt::FlashPoint $graph $info(name) [expr $info(index) + 1] 10 } proc blt::FlashPoint { graph name index count } { if { $count & 1 } { $graph element deactivate $name } else { $graph element activate $name $index } incr count -1 if { $count > 0 } { after 200 blt::FlashPoint $graph $name $index $count update } else { eval $graph marker delete [$graph marker names "bltClosest_*"] } } proc blt::GetCoords { graph x y index } { global zoomInfo if { [$graph cget -invertxy] } { set zoomInfo($graph,$index,x) $y set zoomInfo($graph,$index,y) $x } else { set zoomInfo($graph,$index,x) $x set zoomInfo($graph,$index,y) $y } } proc blt::MarkPoint { graph index } { global zoomInfo set x [$graph xaxis invtransform $zoomInfo($graph,$index,x)] set y [$graph yaxis invtransform $zoomInfo($graph,$index,y)] set marker "zoomText_$index" set text [format "x=%.4g\ny=%.4g" $x $y] if [$graph marker exists $marker] { $graph marker configure $marker -coords { $x $y } -text $text } else { $graph marker create text -coords { $x $y } -name $marker \ -font *lucida*-r-*-10-* \ -text $text -anchor center -bg {} -justify left } } proc blt::DestroyZoomTitle { graph } { global zoomInfo if { $zoomInfo($graph,corner) == "A" } { catch { $graph marker delete "zoomTitle" } } } proc blt::PopZoom { graph } { global zoomInfo set zoomStack $zoomInfo($graph,stack) if { [llength $zoomStack] > 0 } { set cmd [lindex $zoomStack 0] set zoomInfo($graph,stack) [lrange $zoomStack 1 end] eval $cmd blt::ZoomTitleLast $graph busy hold $graph update after 2000 "blt::DestroyZoomTitle $graph" busy release $graph } else { catch { $graph marker delete "zoomTitle" } } } # Push the old axis limits on the stack and set the new ones proc blt::PushZoom { graph } { global zoomInfo eval $graph marker delete [$graph marker names "zoom*"] if { [info exists zoomInfo($graph,afterId)] } { after cancel $zoomInfo($graph,afterId) } set x1 $zoomInfo($graph,A,x) set y1 $zoomInfo($graph,A,y) set x2 $zoomInfo($graph,B,x) set y2 $zoomInfo($graph,B,y) if { ($x1 == $x2) || ($y1 == $y2) } { # No delta, revert to start return } set cmd {} foreach margin { xaxis yaxis x2axis y2axis } { foreach axis [$graph $margin use] { set min [$graph axis cget $axis -min] set max [$graph axis cget $axis -max] set c [list $graph axis configure $axis -min $min -max $max] append cmd "$c\n" } } set zoomInfo($graph,stack) [linsert $zoomInfo($graph,stack) 0 $cmd] busy hold $graph # This update lets the busy cursor take effect. update foreach margin { xaxis x2axis } { foreach axis [$graph $margin use] { set min [$graph axis invtransform $axis $x1] set max [$graph axis invtransform $axis $x2] if { $min!=$max } { if { $min > $max } { $graph axis configure $axis -min $max -max $min } else { $graph axis configure $axis -min $min -max $max } } } } foreach margin { yaxis y2axis } { foreach axis [$graph $margin use] { set min [$graph axis invtransform $axis $y1] set max [$graph axis invtransform $axis $y2] if { $min!=$max } { if { $min > $max } { $graph axis configure $axis -min $max -max $min } else { $graph axis configure $axis -min $min -max $max } } } } # This "update" forces the graph to be redrawn update busy release $graph } # # This routine terminates either an existing zoom, or pops back to # the previous zoom level (if no zoom is in progress). # proc blt::ResetZoom { graph } { global zoomInfo if { ![info exists zoomInfo($graph,corner)] } { blt::InitStack $graph } eval $graph marker delete [$graph marker names "zoom*"] if { $zoomInfo($graph,corner) == "A" } { # Reset the whole axis blt::PopZoom $graph } else { global zoomMod if { [info exists zoomMod] } { set modifier $zoomMod } else { set modifier "Any-" } set zoomInfo($graph,corner) A bind $graph <${modifier}Motion> { } } } option add *zoomTitle.font -*-helvetica-medium-R-*-*-18-*-*-*-*-*-*-* option add *zoomTitle.shadow yellow4 option add *zoomTitle.foreground yellow1 option add *zoomTitle.coords "-Inf Inf" proc blt::ZoomTitleNext { graph } { global zoomInfo set level [expr [llength $zoomInfo($graph,stack)] + 1] if { [$graph cget -invertxy] } { set coords "-Inf -Inf" } else { set coords "-Inf Inf" } $graph marker create text -name "zoomTitle" -text "Zoom #$level" \ -coords $coords -bindtags "" -anchor nw } proc blt::ZoomTitleLast { graph } { global zoomInfo set level [llength $zoomInfo($graph,stack)] if { $level > 0 } { $graph marker create text -name "zoomTitle" -anchor nw \ -text "Zoom #$level" } } proc blt::SetZoomPoint { graph x y } { global zoomInfo zoomMod if { ![info exists zoomInfo($graph,corner)] } { blt::InitStack $graph } blt::GetCoords $graph $x $y $zoomInfo($graph,corner) if { [info exists zoomMod] } { set modifier $zoomMod } else { set modifier "Any-" } if { $zoomInfo($graph,corner) == "A" } { if { ![$graph inside $x $y] } { return } # First corner selected, start watching motion events #blt::MarkPoint $graph A blt::ZoomTitleNext $graph bind $graph <${modifier}Motion> { blt::GetCoords %W %x %y B #blt::MarkPoint $graph B blt::Box %W } set zoomInfo($graph,corner) B } else { # Delete the modal binding bind $graph <${modifier}Motion> { } blt::PushZoom $graph set zoomInfo($graph,corner) A } } option add *zoomOutline.dashes 4 option add *zoomTitle.anchor nw option add *zoomOutline.lineWidth 2 option add *zoomOutline.xor yes proc blt::MarchingAnts { graph offset } { global zoomInfo incr offset if { [$graph marker exists zoomOutline] } { $graph marker configure zoomOutline -dashoffset $offset set interval $zoomInfo($graph,interval) set id [after $interval [list blt::MarchingAnts $graph $offset]] set zoomInfo($graph,afterId) $id } } proc blt::Box { graph } { global zoomInfo if { $zoomInfo($graph,A,x) > $zoomInfo($graph,B,x) } { set x1 [$graph xaxis invtransform $zoomInfo($graph,B,x)] set y1 [$graph yaxis invtransform $zoomInfo($graph,B,y)] set x2 [$graph xaxis invtransform $zoomInfo($graph,A,x)] set y2 [$graph yaxis invtransform $zoomInfo($graph,A,y)] } else { set x1 [$graph xaxis invtransform $zoomInfo($graph,A,x)] set y1 [$graph yaxis invtransform $zoomInfo($graph,A,y)] set x2 [$graph xaxis invtransform $zoomInfo($graph,B,x)] set y2 [$graph yaxis invtransform $zoomInfo($graph,B,y)] } set coords { $x1 $y1 $x2 $y1 $x2 $y2 $x1 $y2 $x1 $y1 } if { [$graph marker exists "zoomOutline"] } { $graph marker configure "zoomOutline" -coords $coords } else { set X [lindex [$graph xaxis use] 0] set Y [lindex [$graph yaxis use] 0] $graph marker create line -coords $coords -name "zoomOutline" \ -mapx $X -mapy $Y set interval $zoomInfo($graph,interval) set id [after $interval [list blt::MarchingAnts $graph 0]] set zoomInfo($graph,afterId) $id } } proc Blt_PostScriptDialog { graph } { global POSTSCRIPTWINDOW global POSTSCRIPTGRAPH set top $graph.top toplevel $top wm title $top "Postscript out" set POSTSCRIPTWINDOW $top set POSTSCRIPTGRAPH $graph foreach var { center landscape maxpect preview decorations padx pady paperwidth paperheight width height colormode } { global $graph.$var set $graph.$var [$graph postscript cget -$var] } set row 1 set col 0 label $top.title -text "PostScript Options" blt::table $top $top.title -cspan 7 foreach bool { center landscape maxpect preview decorations } { set w $top.$bool-label label $w -text "-$bool" -font *courier*-r-*12* blt::table $top $row,$col $w -anchor e -pady { 2 0 } -padx { 0 4 } set w $top.$bool-yes global $graph.$bool radiobutton $w -text "yes" -variable $graph.$bool -value 1 blt::table $top $row,$col+1 $w -anchor w set w $top.$bool-no radiobutton $w -text "no" -variable $graph.$bool -value 0 blt::table $top $row,$col+2 $w -anchor w incr row } label $top.modes -text "-colormode" -font *courier*-r-*12* blt::table $top $row,0 $top.modes -anchor e -pady { 2 0 } -padx { 0 4 } set col 1 foreach m { color greyscale } { set w $top.$m radiobutton $w -text $m -variable $graph.colormode -value $m blt::table $top $row,$col $w -anchor w incr col } set row 1 frame $top.sep -width 2 -bd 1 -relief sunken blt::table $top $row,3 $top.sep -fill y -rspan 6 set col 4 foreach value { padx pady paperwidth paperheight width height } { set w $top.$value-label label $w -text "-$value" -font *courier*-r-*12* blt::table $top $row,$col $w -anchor e -pady { 2 0 } -padx { 0 4 } set w $top.$value-entry global $graph.$value entry $w -textvariable $graph.$value -width 8 blt::table $top $row,$col+1 $w -cspan 2 -anchor w -padx 8 incr row } blt::table configure $top c3 -width .125i button $top.cancel -text "Cancel" -command "destroy $top" blt::table $top $row,0 $top.cancel -width 1i -pady 2 -cspan 3 button $top.reset -text "Reset" -command "destroy $top" #blt::table $top $row,1 $top.reset -width 1i button $top.print -text "Print" -command {blt::ResetPostScript $POSTSCRIPTGRAPH; destroy $POSTSCRIPTWINDOW } blt::table $top $row,4 $top.print -width 1i -pady 2 -cspan 2 } proc blt::ResetPostScript { graph } { foreach var { center landscape maxpect preview decorations padx pady paperwidth paperheight width height colormode } { global $graph.$var set old [$graph postscript cget -$var] if { [catch {$graph postscript configure -$var [set $graph.$var]}] != 0 } { $graph postscript configure -$var $old set $graph.$var $old } } set types {{"Postscript File" {.ps} } {"Encapsulated Postscript File" {.eps} }}; set PSFILE [tk_getSaveFile -filetypes $types -parent . -initialfile Untitled -defaultextension .ps] if {[string length $PSFILE]!=0} { $graph postscript output $PSFILE } } tmpk8ny_4pz/examples/tclspice/tcl-testbench4/tcl-testbench4.sh0000755000175000017500000000006113546075722024606 0ustar carstencarsten#!/bin/sh exec wish vspicechart.tcl example.cir tmpk8ny_4pz/examples/tclspice/tcl-testbench4/selectfromlist.tcl0000644000175000017500000000306613546075722025177 0ustar carstencarstennamespace eval selectionwindow { variable selectionvalue variable selectionwindow } proc selectionwindow::selectfromlist { window title selectionlist args } { variable selectionvalue variable selectionwindow if { [winfo exists $window] } { raise $window; return [lindex $selectionlist 0] } set selectionwindow $window toplevel $selectionwindow wm geometry $selectionwindow +200+200 focus -force $selectionwindow wm title $selectionwindow $title set maxstrlength [expr [string length $title]+12] if { [llength $selectionlist]==0 } { destroy $selectionwindow; return {} } foreach elem $selectionlist { if { [string length $elem]>$maxstrlength } { set maxstrlength [string length $elem] } } scrollbar $selectionwindow.scroll -command "$selectionwindow.listbox yview" eval "listbox $selectionwindow.listbox -yscroll \"$selectionwindow.scroll set\" \ -width $maxstrlength -height 10 -setgrid 1 $args" pack $selectionwindow.listbox $selectionwindow.scroll -side left -fill y -expand 1 foreach elem $selectionlist { $selectionwindow.listbox insert end $elem } bind $selectionwindow.listbox { namespace eval selectionwindow { set selectionvalue [selection get] destroy $selectionwindow } } tkwait window $selectionwindow if { [info exists selectionvalue] } { return $selectionvalue } else { if { [llength $selectionlist] != 0 } { return [lindex $selectionlist 0] } else { return "" } } } # puts [selectionwindow::selectfromlist .demo "Wähle Frucht" { Apfel Birne Zitrone dsfsdfdsfdsfdsfsdfds}] tmpk8ny_4pz/examples/tclspice/tcl-testbench4/vspicechart.tcl0000644000175000017500000001414013546075722024446 0ustar carstencarsten############ spice chart program ########### ############ programmer: stephan thiel ########### ############ thiel@mikro.ee.tu-berlin.de ########### ############ (c) 2008 Berlin, Germany ########### ############ Don't trust any version ########### ############ before 1.0 ########### package require BLT load "../../../src/.libs/libspice.so" source selectfromlist.tcl source bltGraph.tcl namespace import blt::* wm title . "vspicechart 0.01" wm geometry . 800x450+40+40 pack propagate . false set globals(colors) { red green blue orange yellow white gray lightblue pink darkblue \ lightred lightgray darkgray darkblue darkgreen darkred violet salmon \ gray100 gold SeaGreen RoyalBlue RosyBrown orchid MintCream magenta LimeGreen \ gray33 DeepSkyBlue DarkGoldenrod chocolate gray77 aquamarine brown coral \ DarkOliveGreen DarkOrange DarkSlateGray gray99 HotPink IndianRed LemonChiffon \ LightSteelBlue PaleGreen peru sienna seashell SpringGreen tomato wheat WhiteSmoke} proc replacechar { str pat pat1} { set erg "" for { set i 0 } { $i < [string length $str] } {incr i 1 } { if { [ string index $str $i ] == $pat } { append erg $pat1 } else { append erg [string index $str $i ] } } return $erg } proc realtostr { r } { set b [ expr abs($r) ] set mul 1e-18 set prefix a if { $b > 9.9999999999e-16 } { set mul 1e15 set prefix f } if { $b > 9.9999999999e-13 } { set mul 1e12 set prefix p } if { $b > 9.9999999999e-10 } { set mul 1e9 set prefix n } if { $b > 9.9999999999e-7 } { set mul 1e6 set prefix u } if { $b > 9.9999999999e-4 } { set mul 1e3 set prefix m } if { $b > 0.999999999999999 } { set mul 1 set prefix "" } if { $b > 999 } { set mul 1e-3 set prefix K } if { $b > 9.999999999e5 } { set mul 1e-6 set prefix MEG } if { $b > 9.9999999999e8 } { set mul 1e-9 set prefix G } if { $b > 9.99999999999e11 } { set mul 1e-12 set prefix T } set str [ format "%1.8g$prefix" [expr $r*$mul] ] if { $str=="0a" } { set str "0" } return $str } proc realtostr1 { elem r } { scan $r "%f" erg return [ realtostr $erg ] } set globals(signals) {}; proc readconfigfile { } { global globals global const if { [file exists $globals(CONFIGFILE)] } { set fid [open $globals(CONFIGFILE) r] while { ![eof $fid] } { gets $fid tempstring if { [string first "PACK-PATH=" $tempstring]==0 } { scan $tempstring "PACK-PATH=%s" globals(PACK-PATH) } if { [string first "SIMULATOR=" $tempstring]==0 } { scan $tempstring "SIMULATOR=%s" globals(SIMULATOR) } } close $fid } else { set globals(PACK-PATH) "" set globals(SIMULATOR) "INTERNAL" } } proc select_vector { } { global globals set thissignals [spice::spice_data] set signals {} foreach sig $thissignals { if { [lindex $sig 0] != "time" } { lappend signals [lindex $sig 0] } } set selectedsignal [selectionwindow::selectfromlist .select "Select Signal" $signals ] if { ( [string trim $selectedsignal] != "") && ([lsearch -exact $globals(signals) $selectedsignal] == -1) } { eval "$globals(LSELECTEDSIGNALS) insert end $selectedsignal" vector create [replacechar $selectedsignal "\#" "_"] } } proc start_new_sel { } { global globals set elemlist [ eval "$globals(chart0) element show" ] for { set j 0 } {$j < [llength $elemlist] } {incr j 1} { $globals(chart0) element delete [lindex $elemlist $j ] } set i 0 foreach sig $globals(signals) { set nsig [replacechar $sig "\#" "_"] vector create $nsig spice::spicetoblt $sig $nsig $globals(chart0) element create $sig -color [lindex $globals(colors) $i] -xdata stime -ydata $nsig -symbol none incr i 1 } } proc delete_selected { } { global globals set elem [$globals(LSELECTEDSIGNALS) curselection] if { $elem != "" } { $globals(LSELECTEDSIGNALS) delete $elem } } set filename [ lindex $argv 0] if { [file exists $filename ] } { spice::source $filename spice::bg run after 1000 frame .f1 pack .f1 -side left -expand true -fill both listbox .f1.blistbox -listvariable globals(signals) pack .f1.blistbox -side top -fill both -expand true set globals(LSELECTEDSIGNALS) .f1.blistbox button .f1.baddvec -text "Select Vector" -command "select_vector" pack .f1.baddvec -side top -fill x -expand true button .f1.bdelvec -text "Delete Vector" -command "delete_selected" pack .f1.bdelvec -side top -fill x -expand true button .f1.bstartsel -text "Start with new selection" -command start_new_sel pack .f1.bstartsel -side top -fill x -expand true button .f1.simstop -text "Simulation Stop" -command "spice::stop" pack .f1.simstop -side top -fill x -expand true button .f1.simresume -text "Simulation Resume" -command "spice::bg resume" pack .f1.simresume -side top -fill x -expand true button .f1.bexit -text "Exit" -command "exit" pack .f1.bexit -side top -fill x -expand true frame .f2 pack .f2 -side left -expand true -fill both stripchart .f2.chart pack .f2.chart -side top -fill both -expand true .f2.chart axis configure x -title "Time in s" .f2.chart grid configure -hide no Blt_ZoomStack .f2.chart Blt_Crosshairs .f2.chart Blt_ClosestPoint .f2.chart Blt_PrintKey .f2.chart Blt_ActiveLegend .f2.chart .f2.chart crosshairs configure -color lightblue .f2.chart axis configure x -command realtostr1 .f2.chart axis configure y -command realtostr1 set globals(chart0) .f2.chart vector create stime proc bltupdate {} { global globals spice::spicetoblt time stime foreach sig $globals(signals) { set nsig [replacechar $sig "\#" "_"] spice::spicetoblt $sig $nsig } after 100 bltupdate } bltupdate } else { exit; } tmpk8ny_4pz/examples/tclspice/tcl-testbench4/example.cir0000644000175000017500000007132113546075722023565 0ustar carstencarstenTITLE: proj1 - Rotary Traveling Wave Oscillator VDD0 VDD0 VDD DC 0 VSS0 VSS0 0 DC 0 VDD_A0 VDD_A0 VDD0 DC 0 VSS_A0 VSS_A0 VSS0 DC 0 VDD_B0 VDD_B0 VDD0 DC 0 VSS_B0 VSS_B0 VSS0 DC 0 LA0 A0 LCA0 3.69030941553353e-11 RA0 LCA0 A1 0.266535044422507 LB0 B0 LCB0 3.69030941553353e-11 RB0 LCB0 B1 0.266535044422507 C0 A1 B1 2.50418376625721e-14 MNA0 B0 A0 VSS_B0 VSS_B0 Nmod L=2.53696435353243e-07 W= +4.24857778403814e-05 AD=3.125e-11 AS=3.125e-11 PD= +8.49715556807627e-05 PS=8.49715556807627e-05 NQSMOD=1 MPA0 B0 A0 VDD_B0 VDD_B0 Pmod L=2.55343565546106e-07 W= +0.000101772203908557 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000203544407817114 PS=0.000203544407817114 NQSMOD=1 MNB0 A0 B0 VSS_A0 VSS_A0 Nmod L=2.53941602497219e-07 W= +4.10652659629401e-05 AD=3.125e-11 AS=3.125e-11 PD= +8.21305319258802e-05 PS=8.21305319258802e-05 NQSMOD=1 MPB0 A0 B0 VDD_A0 VDD_A0 Pmod L=2.52010168145607e-07 W= +0.000103533977891464 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000207067955782928 PS=0.000207067955782928 NQSMOD=1 LA1 A1 LCA1 3.69030941553353e-11 RA1 LCA1 A2 0.266535044422507 LB1 B1 LCB1 3.69030941553353e-11 RB1 LCB1 B2 0.266535044422507 C1 A2 B2 2.50418376625721e-14 MNA1 B1 A1 0 0 Nmod L=2.52370578161099e-07 W=4.12246995102289e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.24493990204578e-05 PS= +8.24493990204578e-05 NQSMOD=1 MPA1 B1 A1 VDD VDD Pmod L=2.45709468983316e-07 W=0.000103710764679465 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000207421529358929 PS= +0.000207421529358929 NQSMOD=1 MNB1 A1 B1 0 0 Nmod L=2.48115895523017e-07 W=4.26306134285554e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.52612268571108e-05 PS= +8.52612268571108e-05 NQSMOD=1 MPB1 A1 B1 VDD VDD Pmod L=2.55265156192223e-07 W=0.000102043840486507 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000204087680973014 PS= +0.000204087680973014 NQSMOD=1 LA2 A2 LCA2 3.69030941553353e-11 RA2 LCA2 A3 0.266535044422507 LB2 B2 LCB2 3.69030941553353e-11 RB2 LCB2 B3 0.266535044422507 C2 A3 B3 2.50418376625721e-14 MNA2 B2 A2 0 0 Nmod L=2.53484220592882e-07 W=4.16915225420459e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.33830450840917e-05 PS= +8.33830450840917e-05 NQSMOD=1 MPA2 B2 A2 VDD VDD Pmod L=2.44256748076514e-07 W=0.00010549295960702 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000210985919214039 PS= +0.000210985919214039 NQSMOD=1 MNB2 A2 B2 0 0 Nmod L=2.48805892712811e-07 W=4.15734692647458e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.31469385294916e-05 PS= +8.31469385294916e-05 NQSMOD=1 MPB2 A2 B2 VDD VDD Pmod L=2.54004987710956e-07 W=0.00010229621219808 +AD=7.8125e-11 AS=7.8125e-11 PD=0.00020459242439616 PS= +0.00020459242439616 NQSMOD=1 LA3 A3 LCA3 3.69030941553353e-11 RA3 LCA3 A4 0.266535044422507 LB3 B3 LCB3 3.69030941553353e-11 RB3 LCB3 B4 0.266535044422507 C3 A4 B4 2.50418376625721e-14 MNA3 B3 A3 0 0 Nmod L=2.54307430347219e-07 W=4.11339076756089e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.22678153512179e-05 PS= +8.22678153512179e-05 NQSMOD=1 MPA3 B3 A3 VDD VDD Pmod L=2.52369109463781e-07 W=0.000103371681055656 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000206743362111311 PS= +0.000206743362111311 NQSMOD=1 MNB3 A3 B3 0 0 Nmod L=2.4960708801709e-07 W=4.21794611046917e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.43589222093833e-05 PS= +8.43589222093833e-05 NQSMOD=1 MPB3 A3 B3 VDD VDD Pmod L=2.53834779766428e-07 W=0.000105556314711602 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000211112629423204 PS= +0.000211112629423204 NQSMOD=1 LA4 A4 LCA4 3.69030941553353e-11 RA4 LCA4 A5 0.266535044422507 LB4 B4 LCB4 3.69030941553353e-11 RB4 LCB4 B5 0.266535044422507 C4 A5 B5 2.50418376625721e-14 MNA4 B4 A4 0 0 Nmod L=2.48091656083177e-07 W=4.11207568141106e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.22415136282211e-05 PS= +8.22415136282211e-05 NQSMOD=1 MPA4 B4 A4 VDD VDD Pmod L=2.47723605289033e-07 W=0.000103463392309261 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000206926784618522 PS= +0.000206926784618522 NQSMOD=1 MNB4 A4 B4 0 0 Nmod L=2.49254771880382e-07 W=4.25122425012226e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.50244850024452e-05 PS= +8.50244850024452e-05 NQSMOD=1 MPB4 A4 B4 VDD VDD Pmod L=2.49689766979065e-07 W=0.000103227993619608 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000206455987239216 PS= +0.000206455987239216 NQSMOD=1 LA5 A5 LCA5 3.69030941553353e-11 RA5 LCA5 A6 0.266535044422507 LB5 B5 LCB5 3.69030941553353e-11 RB5 LCB5 B6 0.266535044422507 C5 A6 B6 2.50418376625721e-14 MNA5 B5 A5 0 0 Nmod L=2.53960031106522e-07 W=4.1129961792588e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.22599235851759e-05 PS= +8.22599235851759e-05 NQSMOD=1 MPA5 B5 A5 VDD VDD Pmod L=2.47418707088064e-07 W=0.000101621693062467 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000203243386124935 PS= +0.000203243386124935 NQSMOD=1 MNB5 A5 B5 0 0 Nmod L=2.49659687529522e-07 W=4.2524931640785e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.50498632815701e-05 PS= +8.50498632815701e-05 NQSMOD=1 MPB5 A5 B5 VDD VDD Pmod L=2.46328059754468e-07 W=0.000102061546065548 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000204123092131096 PS= +0.000204123092131096 NQSMOD=1 LA6 A6 LCA6 3.69030941553353e-11 RA6 LCA6 A7 0.266535044422507 LB6 B6 LCB6 3.69030941553353e-11 RB6 LCB6 B7 0.266535044422507 C6 A7 B7 2.50418376625721e-14 MNA6 B6 A6 0 0 Nmod L=2.54326804653788e-07 W=4.17332976706085e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.34665953412171e-05 PS= +8.34665953412171e-05 NQSMOD=1 MPA6 B6 A6 VDD VDD Pmod L=2.48727427835127e-07 W=0.000103244611103459 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000206489222206918 PS= +0.000206489222206918 NQSMOD=1 MNB6 A6 B6 0 0 Nmod L=2.49697035135609e-07 W=4.23570035518e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.47140071036001e-05 PS= +8.47140071036001e-05 NQSMOD=1 MPB6 A6 B6 VDD VDD Pmod L=2.48995485890626e-07 W=0.000103695454759978 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000207390909519956 PS= +0.000207390909519956 NQSMOD=1 LA7 A7 LCA7 3.69030941553353e-11 RA7 LCA7 A8 0.266535044422507 LB7 B7 LCB7 3.69030941553353e-11 RB7 LCB7 B8 0.266535044422507 C7 A8 B8 2.50418376625721e-14 MNA7 B7 A7 0 0 Nmod L=2.53418975114981e-07 W=4.06421756574473e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.12843513148946e-05 PS= +8.12843513148946e-05 NQSMOD=1 MPA7 B7 A7 VDD VDD Pmod L=2.4471861043622e-07 W=0.000104600862141835 +AD=7.8125e-11 AS=7.8125e-11 PD=0.00020920172428367 PS= +0.00020920172428367 NQSMOD=1 MNB7 A7 B7 0 0 Nmod L=2.50159056393584e-07 W=4.06845582724173e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.13691165448345e-05 PS= +8.13691165448345e-05 NQSMOD=1 MPB7 A7 B7 VDD VDD Pmod L=2.55032245177227e-07 W=0.000106482118141681 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000212964236283363 PS= +0.000212964236283363 NQSMOD=1 LA8 A8 LCA8 3.69030941553353e-11 RA8 LCA8 A9 0.266535044422507 LB8 B8 LCB8 3.69030941553353e-11 RB8 LCB8 B9 0.266535044422507 C8 A9 B9 2.50418376625721e-14 MNA8 B8 A8 0 0 Nmod L=2.45729547191971e-07 W=4.18266198665335e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.3653239733067e-05 PS=8.3653239733067e-05 +NQSMOD=1 MPA8 B8 A8 VDD VDD Pmod L=2.45156004861421e-07 W=0.000101593205477244 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000203186410954489 PS= +0.000203186410954489 NQSMOD=1 MNB8 A8 B8 0 0 Nmod L=2.49014342219656e-07 W=4.14314219478801e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.28628438957603e-05 PS= +8.28628438957603e-05 NQSMOD=1 MPB8 A8 B8 VDD VDD Pmod L=2.50396673007567e-07 W=0.000103029640740115 +AD=7.8125e-11 AS=7.8125e-11 PD=0.00020605928148023 PS= +0.00020605928148023 NQSMOD=1 LA9 A9 LCA9 3.69030941553353e-11 RA9 LCA9 A10 0.266535044422507 LB9 B9 LCB9 3.69030941553353e-11 RB9 LCB9 B10 0.266535044422507 C9 A10 B10 2.50418376625721e-14 MNA9 B9 A9 0 0 Nmod L=2.51066307645916e-07 W=4.17044186844862e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.34088373689724e-05 PS= +8.34088373689724e-05 NQSMOD=1 MPA9 B9 A9 VDD VDD Pmod L=2.4945438501494e-07 W=0.000104601836030031 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000209203672060063 PS= +0.000209203672060063 NQSMOD=1 MNB9 A9 B9 0 0 Nmod L=2.56178041422984e-07 W=4.17990098329256e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.35980196658511e-05 PS= +8.35980196658511e-05 NQSMOD=1 MPB9 A9 B9 VDD VDD Pmod L=2.5274010042983e-07 W=0.000103578149162769 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000207156298325537 PS= +0.000207156298325537 NQSMOD=1 LA10 A10 LCA10 3.69030941553353e-11 RA10 LCA10 A11 0.266535044422507 LB10 B10 LCB10 3.69030941553353e-11 RB10 LCB10 B11 0.266535044422507 C10 A11 B11 2.50418376625721e-14 MNA10 B10 A10 0 0 Nmod L=2.45772611943267e-07 W=4.24345922952649e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.48691845905299e-05 PS= +8.48691845905299e-05 NQSMOD=1 MPA10 B10 A10 VDD VDD Pmod L=2.55544710347746e-07 W= +0.000105625826497323 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000211251652994645 PS=0.000211251652994645 NQSMOD=1 MNB10 A10 B10 0 0 Nmod L=2.55886308364338e-07 W=4.0850956346516e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.17019126930321e-05 PS= +8.17019126930321e-05 NQSMOD=1 MPB10 A10 B10 VDD VDD Pmod L=2.44778614470725e-07 W= +0.000105511594248206 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000211023188496411 PS=0.000211023188496411 NQSMOD=1 LA11 A11 LCA11 3.69030941553353e-11 RA11 LCA11 A12 0.266535044422507 LB11 B11 LCB11 3.69030941553353e-11 RB11 LCB11 B12 0.266535044422507 C11 A12 B12 2.50418376625721e-14 MNA11 B11 A11 0 0 Nmod L=2.4768739676619e-07 W=4.14724461551725e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.29448923103449e-05 PS= +8.29448923103449e-05 NQSMOD=1 MPA11 B11 A11 VDD VDD Pmod L=2.46276216123912e-07 W= +0.000101782633723501 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000203565267447002 PS=0.000203565267447002 NQSMOD=1 MNB11 A11 B11 0 0 Nmod L=2.54985612770668e-07 W=4.24608643314108e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.49217286628216e-05 PS= +8.49217286628216e-05 NQSMOD=1 MPB11 A11 B11 VDD VDD Pmod L=2.45772463970764e-07 W= +0.000106109588792745 AD=7.8125e-11 AS=7.8125e-11 PD= +0.00021221917758549 PS=0.00021221917758549 NQSMOD=1 LA12 A12 LCA12 3.69030941553353e-11 RA12 LCA12 A13 0.266535044422507 LB12 B12 LCB12 3.69030941553353e-11 RB12 LCB12 B13 0.266535044422507 C12 A13 B13 2.50418376625721e-14 MNA12 B12 A12 0 0 Nmod L=2.45480481009462e-07 W=4.20858793029857e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.41717586059714e-05 PS= +8.41717586059714e-05 NQSMOD=1 MPA12 B12 A12 VDD VDD Pmod L=2.48462320158069e-07 W= +0.00010650127744954 AD=7.8125e-11 AS=7.8125e-11 PD= +0.00021300255489908 PS=0.00021300255489908 NQSMOD=1 MNB12 A12 B12 0 0 Nmod L=2.51992945030792e-07 W=4.17981435096244e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.35962870192489e-05 PS= +8.35962870192489e-05 NQSMOD=1 MPB12 A12 B12 VDD VDD Pmod L=2.49941922576661e-07 W= +0.0001044851795426 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000208970359085199 PS=0.000208970359085199 NQSMOD=1 LA13 A13 LCA13 3.69030941553353e-11 RA13 LCA13 A14 0.266535044422507 LB13 B13 LCB13 3.69030941553353e-11 RB13 LCB13 B14 0.266535044422507 C13 A14 B14 2.50418376625721e-14 MNA13 B13 A13 0 0 Nmod L=2.51146190542173e-07 W=4.23276196447018e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.46552392894035e-05 PS= +8.46552392894035e-05 NQSMOD=1 MPA13 B13 A13 VDD VDD Pmod L=2.46359362747576e-07 W= +0.00010249565409785 AD=7.8125e-11 AS=7.8125e-11 PD= +0.0002049913081957 PS=0.0002049913081957 NQSMOD=1 MNB13 A13 B13 0 0 Nmod L=2.44656485453628e-07 W=4.11044634633624e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.22089269267248e-05 PS= +8.22089269267248e-05 NQSMOD=1 MPB13 A13 B13 VDD VDD Pmod L=2.56119611942636e-07 W= +0.0001064085618438 AD=7.8125e-11 AS=7.8125e-11 PD=0.0002128171236876 +PS=0.0002128171236876 NQSMOD=1 LA14 A14 LCA14 3.69030941553353e-11 RA14 LCA14 A15 0.266535044422507 LB14 B14 LCB14 3.69030941553353e-11 RB14 LCB14 B15 0.266535044422507 C14 A15 B15 2.50418376625721e-14 MNA14 B14 A14 0 0 Nmod L=2.47663439668801e-07 W=4.20889991075918e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.41779982151835e-05 PS= +8.41779982151835e-05 NQSMOD=1 MPA14 B14 A14 VDD VDD Pmod L=2.51252450429323e-07 W= +0.000103622229824819 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000207244459649638 PS=0.000207244459649638 NQSMOD=1 MNB14 A14 B14 0 0 Nmod L=2.5044796612668e-07 W=4.24685059762319e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.49370119524638e-05 PS= +8.49370119524638e-05 NQSMOD=1 MPB14 A14 B14 VDD VDD Pmod L=2.4786360459861e-07 W= +0.000104258615459431 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000208517230918863 PS=0.000208517230918863 NQSMOD=1 LA15 A15 LCA15 3.69030941553353e-11 RA15 LCA15 A16 0.266535044422507 LB15 B15 LCB15 3.69030941553353e-11 RB15 LCB15 B16 0.266535044422507 C15 A16 B16 2.50418376625721e-14 MNA15 B15 A15 0 0 Nmod L=2.5213362488047e-07 W=4.26610931467994e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.53221862935989e-05 PS= +8.53221862935989e-05 NQSMOD=1 MPA15 B15 A15 VDD VDD Pmod L=2.44411053097269e-07 W= +0.000104344399065411 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000208688798130821 PS=0.000208688798130821 NQSMOD=1 MNB15 A15 B15 0 0 Nmod L=2.44947739168727e-07 W=4.18061319080677e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.36122638161354e-05 PS= +8.36122638161354e-05 NQSMOD=1 MPB15 A15 B15 VDD VDD Pmod L=2.45133067349567e-07 W= +0.000103673770597555 AD=7.8125e-11 AS=7.8125e-11 PD= +0.00020734754119511 PS=0.00020734754119511 NQSMOD=1 LA16 A16 LCA16 3.69030941553353e-11 RA16 LCA16 A17 0.266535044422507 LB16 B16 LCB16 3.69030941553353e-11 RB16 LCB16 B17 0.266535044422507 C16 A17 B17 2.50418376625721e-14 MNA16 B16 A16 0 0 Nmod L=2.5558903414348e-07 W=4.23651981762607e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.47303963525215e-05 PS= +8.47303963525215e-05 NQSMOD=1 MPA16 B16 A16 VDD VDD Pmod L=2.46968507923118e-07 W= +0.000101577430536373 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000203154861072746 PS=0.000203154861072746 NQSMOD=1 MNB16 A16 B16 0 0 Nmod L=2.52441475326891e-07 W=4.0963445615255e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.192689123051e-05 PS= +8.192689123051e-05 NQSMOD=1 MPB16 A16 B16 VDD VDD Pmod L=2.49958772476576e-07 W= +0.000102341104143712 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000204682208287424 PS=0.000204682208287424 NQSMOD=1 LA17 A17 LCA17 3.69030941553353e-11 RA17 LCA17 A18 0.266535044422507 LB17 B17 LCB17 3.69030941553353e-11 RB17 LCB17 B18 0.266535044422507 C17 A18 B18 2.50418376625721e-14 MNA17 B17 A17 0 0 Nmod L=2.46623947628415e-07 W=4.07033737509309e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.14067475018618e-05 PS= +8.14067475018618e-05 NQSMOD=1 MPA17 B17 A17 VDD VDD Pmod L=2.52274212428759e-07 W= +0.000105423152156798 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000210846304313596 PS=0.000210846304313596 NQSMOD=1 MNB17 A17 B17 0 0 Nmod L=2.51233452024547e-07 W=4.12815452669714e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.25630905339429e-05 PS= +8.25630905339429e-05 NQSMOD=1 MPB17 A17 B17 VDD VDD Pmod L=2.49324495416238e-07 W= +0.000104142717459091 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000208285434918183 PS=0.000208285434918183 NQSMOD=1 LA18 A18 LCA18 3.69030941553353e-11 RA18 LCA18 A19 0.266535044422507 LB18 B18 LCB18 3.69030941553353e-11 RB18 LCB18 B19 0.266535044422507 C18 A19 B19 2.50418376625721e-14 MNA18 B18 A18 0 0 Nmod L=2.52038203439398e-07 W=4.17044670825126e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.34089341650252e-05 PS= +8.34089341650252e-05 NQSMOD=1 MPA18 B18 A18 VDD VDD Pmod L=2.46465042965348e-07 W= +0.000102305682920291 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000204611365840582 PS=0.000204611365840582 NQSMOD=1 MNB18 A18 B18 0 0 Nmod L=2.45695550122768e-07 W=4.2510656912981e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.50213138259621e-05 PS= +8.50213138259621e-05 NQSMOD=1 MPB18 A18 B18 VDD VDD Pmod L=2.56212134001568e-07 W= +0.000101696358889307 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000203392717778614 PS=0.000203392717778614 NQSMOD=1 LA19 A19 LCA19 3.69030941553353e-11 RA19 LCA19 A20 0.266535044422507 LB19 B19 LCB19 3.69030941553353e-11 RB19 LCB19 B20 0.266535044422507 C19 A20 B20 2.50418376625721e-14 MNA19 B19 A19 0 0 Nmod L=2.46298724559332e-07 W=4.26183323927543e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.52366647855085e-05 PS= +8.52366647855085e-05 NQSMOD=1 MPA19 B19 A19 VDD VDD Pmod L=2.53903413760174e-07 W= +0.000103580270078538 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000207160540157077 PS=0.000207160540157077 NQSMOD=1 MNB19 A19 B19 0 0 Nmod L=2.4541336381424e-07 W=4.1471197163819e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.2942394327638e-05 PS=8.2942394327638e-05 +NQSMOD=1 MPB19 A19 B19 VDD VDD Pmod L=2.51953325753565e-07 W= +0.0001019745929959 AD=7.8125e-11 AS=7.8125e-11 PD=0.0002039491859918 +PS=0.0002039491859918 NQSMOD=1 LA20 A20 LCA20 3.69030941553353e-11 RA20 LCA20 A21 0.266535044422507 LB20 B20 LCB20 3.69030941553353e-11 RB20 LCB20 B21 0.266535044422507 C20 A21 B21 2.50418376625721e-14 MNA20 B20 A20 0 0 Nmod L=2.55318350883171e-07 W=4.2257523363596e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.4515046727192e-05 PS= +8.4515046727192e-05 NQSMOD=1 MPA20 B20 A20 VDD VDD Pmod L=2.50733395598687e-07 W= +0.000105848300738233 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000211696601476467 PS=0.000211696601476467 NQSMOD=1 MNB20 A20 B20 0 0 Nmod L=2.53961238224852e-07 W=4.07467605160825e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.1493521032165e-05 PS= +8.1493521032165e-05 NQSMOD=1 MPB20 A20 B20 VDD VDD Pmod L=2.52173406118976e-07 W= +0.000104205251139887 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000208410502279773 PS=0.000208410502279773 NQSMOD=1 LA21 A21 LCA21 3.69030941553353e-11 RA21 LCA21 A22 0.266535044422507 LB21 B21 LCB21 3.69030941553353e-11 RB21 LCB21 B22 0.266535044422507 C21 A22 B22 2.50418376625721e-14 MNA21 B21 A21 0 0 Nmod L=2.46323292867561e-07 W=4.1601573531982e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.32031470639639e-05 PS= +8.32031470639639e-05 NQSMOD=1 MPA21 B21 A21 VDD VDD Pmod L=2.54613442115316e-07 W= +0.000104931161465525 AD=7.8125e-11 AS=7.8125e-11 PD= +0.00020986232293105 PS=0.00020986232293105 NQSMOD=1 MNB21 A21 B21 0 0 Nmod L=2.55836584454404e-07 W=4.10424160274173e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.20848320548346e-05 PS= +8.20848320548346e-05 NQSMOD=1 MPB21 A21 B21 VDD VDD Pmod L=2.54709741956022e-07 W= +0.000102062091080516 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000204124182161031 PS=0.000204124182161031 NQSMOD=1 LA22 A22 LCA22 3.69030941553353e-11 RA22 LCA22 A23 0.266535044422507 LB22 B22 LCB22 3.69030941553353e-11 RB22 LCB22 B23 0.266535044422507 C22 A23 B23 2.50418376625721e-14 MNA22 B22 A22 0 0 Nmod L=2.54430620981417e-07 W=4.19307535657001e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.38615071314001e-05 PS= +8.38615071314001e-05 NQSMOD=1 MPA22 B22 A22 VDD VDD Pmod L=2.46694525572975e-07 W= +0.000103108817734331 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000206217635468663 PS=0.000206217635468663 NQSMOD=1 MNB22 A22 B22 0 0 Nmod L=2.4991048194413e-07 W=4.12343575509987e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.24687151019974e-05 PS= +8.24687151019974e-05 NQSMOD=1 MPB22 A22 B22 VDD VDD Pmod L=2.53435790976082e-07 W= +0.000105540213369592 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000211080426739185 PS=0.000211080426739185 NQSMOD=1 LA23 A23 LCA23 3.69030941553353e-11 RA23 LCA23 A24 0.266535044422507 LB23 B23 LCB23 3.69030941553353e-11 RB23 LCB23 B24 0.266535044422507 C23 A24 B24 2.50418376625721e-14 MNA23 B23 A23 0 0 Nmod L=2.47985427798248e-07 W=4.14939059451511e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.29878118903023e-05 PS= +8.29878118903023e-05 NQSMOD=1 MPA23 B23 A23 VDD VDD Pmod L=2.50625862917368e-07 W= +0.000104857443713713 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000209714887427425 PS=0.000209714887427425 NQSMOD=1 MNB23 A23 B23 0 0 Nmod L=2.48906363214973e-07 W=4.09072154111792e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.18144308223583e-05 PS= +8.18144308223583e-05 NQSMOD=1 MPB23 A23 B23 VDD VDD Pmod L=2.544246792556e-07 W= +0.000106667496188909 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000213334992377817 PS=0.000213334992377817 NQSMOD=1 RCROSS1 A0 B24 0.001 RCROSS2 B0 A24 0.001 .SAVE VDD0 .SAVE VSS0 .SAVE VDD_A0 .SAVE VSS_A0 .SAVE VDD_B0 .SAVE VSS_B0 .SAVE A0 B0 LA0#branch LB0#branch A1 B1 LA1#branch LB1#branch A2 B2 +LA2#branch LB2#branch A3 B3 LA3#branch LB3#branch A4 B4 LA4#branch +LB4#branch A5 B5 LA5#branch LB5#branch A6 B6 LA6#branch LB6#branch +A7 B7 LA7#branch LB7#branch A8 B8 LA8#branch LB8#branch A9 B9 +LA9#branch LB9#branch A10 B10 LA10#branch LB10#branch A11 B11 +LA11#branch LB11#branch A12 B12 LA12#branch LB12#branch A13 B13 +LA13#branch LB13#branch A14 B14 LA14#branch LB14#branch A15 B15 +LA15#branch LB15#branch A16 B16 LA16#branch LB16#branch A17 B17 +LA17#branch LB17#branch A18 B18 LA18#branch LB18#branch A19 B19 +LA19#branch LB19#branch A20 B20 LA20#branch LB20#branch A21 B21 +LA21#branch LB21#branch A22 B22 LA22#branch LB22#branch A23 B23 +LA23#branch LB23#branch ** **INCLUDING FILE: ./proj1/process.models.... * * Typical N Typical P - from process corners (taken from tsmc025_corners.bsim3 fron NCSU) * * TSMC 0.25u 5M 1P process. 2.5V transistor models .MODEL Nmod NMOS LEVEL=8 +TNOM = 25 +VERSION = 3.2.2 TOX = 5.8e-9 +XJ = 1E-07 NCH = 2.354946E+17 LLN = 1 +LWN = 1 WLN = 1 WWN = 1 +LINT = 1.76E-08 WINT = 6.75E-09 MOBMOD = 1 +BINUNIT = 2 DWG = 0 DWB = 0 +VTH0 = 0.4321336 LVTH0 = 2.081814E-08 WVTH0 = -5.470342E-11 +PVTH0 = -6.721795E-16 K1 = 0.3281252 LK1 = 9.238362E-08 +WK1 = 2.878255E-08 PK1 = -2.426481E-14 K2 = 0.0402824 +LK2 = -3.208392E-08 WK2 = -1.154091E-08 PK2 = 9.192045E-15 +K3 = 0 DVT0 = 0 DVT1 = 0 +DVT2 = 0 DVT0W = 0 DVT1W = 0 +DVT2W = 0 NLX = 0 W0 = 0 +K3B = 0 VSAT = 7.586954E+04 LVSAT = 3.094656E-03 +WVSAT = -1.747416E-03 PVSAT = 8.820956E-10 UA = 8.924498E-10 +LUA = -1.511745E-16 WUA = -3.509821E-17 PUA = -3.08778E-23 +UB = 8.928832E-21 LUB = -1.655745E-27 WUB = -2.03282E-27 +PUB = 3.4578E-34 UC = -1.364265E-11 LUC = 1.170473E-17 +WUC = -1.256705E-18 PUC = -6.249644E-24 RDSW = 447.8871 +PRWB = 0 PRWG = 0 WR = 0.99 +U0 = 0.06005258 LU0 = -6.31976E-09 WU0 = -8.819531E-09 +PU0 = 3.57209E-15 A0 = -1.468837 LA0 = 6.419548E-07 +WA0 = 5.512414E-07 PA0 = -9.222928E-14 KETA = -0.04922795 +LKETA = 2.360844E-08 WKETA = 1.560385E-08 PKETA = -5.98377E-15 +A1 = 0.02659908 LA1 = -6.511454E-09 A2 = 1 +AGS = -4.01637 LAGS = 1.090294E-06 WAGS = 1.162021E-06 +PAGS = -3.108579E-13 B0 = 0 B1 = 0 +VOFF = -0.1829426 LVOFF = 9.941631E-09 WVOFF = 1.568082E-08 +PVOFF = -2.832958E-15 NFACTOR = 0.6790636 LNFACTOR= 3.454948E-08 +WNFACTOR= 1.501016E-07 PNFACTOR= -2.955591E-14 CIT = 2.218499E-04 +LCIT = -1.076934E-10 WCIT = -3.286884E-10 PCIT = 1.658928E-16 +CDSC = 0 CDSCB = 0 CDSCD = 0 +ETA0 = 1.215578E-04 LETA0 = -1.037758E-11 WETA0 = -3.030225E-11 +PETA0 = 1.529658E-17 ETAB = 3.548681E-03 LETAB = -1.791374E-09 +WETAB = -6.897268E-10 PETAB = 3.481742E-16 DSUB = 0 +PCLM = 3.583838 PDIBLC1 = 0 PDIBLC2 = 5.379674E-03 +LPDIBLC2= 7.808481E-09 WPDIBLC2= 5.516945E-10 PPDIBLC2= -2.784957E-16 +PDIBLCB = -0.1229374 LPDIBLCB= 4.956215E-08 WPDIBLCB= 3.299946E-08 +PPDIBLCB= -9.624918E-15 DROUT = 0 PSCBE1 = 4.472639E+08 +LPSCBE1 = 28.64041 WPSCBE1 = 15.7154 PPSCBE1 = -7.933138E-06 +PSCBE2 = 1.842585E-06 LPSCBE2 = 2.871008E-12 WPSCBE2 = 2.579183E-12 +PPSCBE2 = -1.301972E-18 PVAG = -2.015254E-03 LPVAG = 1.017757E-09 +WPVAG = 3.07622E-10 PPVAG = -1.55418E-16 DELTA = -0.02862256 +LDELTA = 1.492454E-08 WDELTA = -6.71663E-09 PDELTA = 3.407521E-15 +ALPHA0 = 0 BETA0 = 30 KT1 = -0.2579945 +LKT1 = -1.664895E-08 WKT1 = -1.633463E-08 PKT1 = 3.755864E-15 +KT2 = -0.05347481 LKT2 = 8.244731E-09 WKT2 = 1.13705E-09 +PKT2 = -1.240924E-15 AT = -1.132632E+04 LAT = 6.469047E-03 +WAT = 6.829220E-04 PAT = -4.154249E-10 UTE = -2.309089 +LUTE = 1.662427E-07 WUTE = 1.244801E-07 PUTE = -5.627924E-14 +UA1 = -3.461758E-10 LUA1 = 1.747495E-16 WUA1 = -1.42065E-16 +PUA1 = 7.171442E-23 UB1 = 0 UC1 = -2.38157E-12 +LUC1 = -2.895726E-18 WUC1 = -1.990052E-17 PUC1 = 1.004497E-23 +KT1L = 0 PRT = -1E-18 CJ = 2.024128E-3 +MJ = 0.4960069 PB = 0.9173808 CJSW = 2.751528E-10 +MJSW = 0.443145 PBSW = 0.9173808 CJSWG = 2.135064E-10 +MJSWG = 0.443145 PBSWG = 0.9173808 +RSH = 4.5 +XTI = 3 +CGDO = 3.11E-10 CGSO = 3.11E-10 CAPMOD = 2 +XPART = 1 CF = 0 +JS = 1E-06 +JSW = 5E-11 .MODEL Pmod PMOS LEVEL=8 +VERSION = 3.2.2 +TNOM = 25 TOX = 5.8e-9 +XJ = 1E-7 NCH = 4.1589E17 +LLN = 1 LWN = 1 WLN = 1 +WWN = 1 LINT = 1.2365E-8 WINT = 7.8E-9 +MOBMOD = 1 BINUNIT = 2 DWG = 0 +DWB = 0 VTH0 = -0.6236538 LVTH0 = 2.649834E-8 +WVTH0 = 3.214189E-8 PVTH0 = -3.22268E-15 K1 = 0.4198155 +LK1 = 5.770498E-8 WK1 = 5.577151E-8 PK1 = -2.81684E-14 +K2 = 0.0429467 LK2 = -2.296405E-8 WK2 = -1.355302E-8 +PK2 = 6.848271E-15 K3 = 0 DVT0 = 0 +DVT1 = 0 DVT2 = 0 DVT0W = 0 +DVT1W = 0 DVT2W = 0 NLX = 0 +W0 = 0 K3B = 0 VSAT = 1.443912E5 +LVSAT = -7.688012E-4 WVSAT = -6.083648E-3 PVSAT = 2.186471E-10 +UA = 1.846811E-9 LUA = -3.27694E-16 WUA = -2.82106E-16 +PUA = 7.180233E-23 UB = -7.84535E-19 LUB = 4.772849E-25 +WUB = 2.599205E-25 PUB = -1.46530E-31 UC = -1.75560E-10 +LUC = 3.360832E-17 WUC = 1.504425E-17 PUC = -1.30556E-23 +RDSW = 1.03E3 PRWB = 0 PRWG = 0 +WR = 1 U0 = 0.0136443 LU0 = -7.22084E-10 +WU0 = -1.088554E-9 PU0 = 2.730854E-16 A0 = 0.1071803 +LA0 = 4.64252E-7 WA0 = 5.383179E-7 PA0 = -1.32033E-13 +KETA = -4.943762E-3 LKETA = -3.565304E-9 WKETA = -5.226247E-9 +PKETA = 2.640665E-15 A1 = 0 A2 = 0.4 +AGS = 0.1664005 LAGS = 1.19106E-7 WAGS = 5.29237E-8 +PAGS = -2.67304E-14 B0 = 0 B1 = 0 +VOFF = -0.0592623 LVOFF = -1.96686E-8 WVOFF = -1.486398E-8 +PVOFF = 7.510321E-15 NFACTOR = 0.8588103 LNFACTOR= -1.158881E-7 +WNFACTOR= 1.210664E-8 PNFACTOR= -6.11712E-15 CIT = 6.439495E-5 +LCIT = 2.916437E-10 WCIT = -3.11284E-11 PCIT = 1.572825E-17 +CDSC = 0 CDSCB = 0 CDSCD = 0 +ETA0 = -3.819468E-3 LETA0 = 2.155422E-9 WETA0 = 8.235612E-10 +PETA0 = -4.16037E-16 ETAB = 1.334637E-3 LETAB = -7.93631E-10 +WETAB = 5.284657E-11 PETAB = -2.68353E-17 DSUB = 0 +PCLM = 0.1098002 LPCLM = 6.874263E-7 WPCLM = 6.724724E-7 +PPCLM = -1.97766E-13 PDIBLC1 = 0 PDIBLC2 = 5.801323E-3 +LPDIBLC2= -1.81964E-9 WPDIBLC2= -5.853396E-9 PPDIBLC2= 2.957545E-15 +PDIBLCB = 0.1921199 DROUT = 0 PSCBE1 = 7.19E8 +PSCBE2 = 1E-20 PVAG = 0 DELTA = 0.01 +ALPHA0 = 0 BETA0 = 30 KT1 = -0.3248987 +LKT1 = -1.160393E-8 WKT1 = 4.153356E-8 PKT1 = -4.62347E-15 +KT2 = -0.0367632 AT = 1E4 UTE = -1.04 +UA1 = 3.992421E-10 UB1 = -9.23294E-19 LUB1 = -5.28718E-26 +WUB1 = -6.13069E-26 PUB1 = 1.503674E-32 UC1 = -1.00699E-12 +KT1L = 0 PRT = 0 CJ = 1.931092e-3 +MJ = 0.4812153 PB = 0.9134669 CJSW = 2.232277e-10 +MJSW = 0.3237595 PBSW = 0.9134669 CJSWG = 1.607088e-10 +MJSWG = 0.3237595 PBSWG = 0.9134669 +RSH = 3.5 +CGDO = 2.68e-10 CGSO = 2.68e-10 +CAPMOD = 2 +XPART = 1 +CF = 0 XTI = 3 +JS = 3E-7 +JSW = 5E-12 **.... FINISHED INCLUDING: ./proj1/process.models ** .OPTIONS TEMP=25 VSLEW_CONTROL VSLEW 0 (PULSE 0 1 0 1e-09) EVLOGIC VRAMP 0 VSLEW 0 2.5 VDDPOWER VDD VRAMP DC 0 VARACTOR_V VARACTOR_V 0 DC 2.5 .TRAN 0.02n 100n 0n 0.5n .END tmpk8ny_4pz/examples/tclspice/tcl-testbench2/0000755000175000017500000000000013546075722021425 5ustar carstencarstentmpk8ny_4pz/examples/tclspice/tcl-testbench2/example.cir0000644000175000017500000007145513546075722023573 0ustar carstencarstenTITLE: proj1.cir.cir - Rotary Traveling Wave Oscillator .control set filetype=ascii .endc VDD0 VDD0 VDD DC 0 VSS0 VSS0 0 DC 0 VDD_A0 VDD_A0 VDD0 DC 0 VSS_A0 VSS_A0 VSS0 DC 0 VDD_B0 VDD_B0 VDD0 DC 0 VSS_B0 VSS_B0 VSS0 DC 0 LA0 A0 LCA0 3.69030941553353e-11 RA0 LCA0 A1 0.266535044422507 LB0 B0 LCB0 3.69030941553353e-11 RB0 LCB0 B1 0.266535044422507 C0 A1 B1 2.50418376625721e-14 MNA0 B0 A0 VSS_B0 VSS_B0 Nmod L=2.53696435353243e-07 W= +4.24857778403814e-05 AD=3.125e-11 AS=3.125e-11 PD= +8.49715556807627e-05 PS=8.49715556807627e-05 NQSMOD=1 MPA0 B0 A0 VDD_B0 VDD_B0 Pmod L=2.55343565546106e-07 W= +0.000101772203908557 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000203544407817114 PS=0.000203544407817114 NQSMOD=1 MNB0 A0 B0 VSS_A0 VSS_A0 Nmod L=2.53941602497219e-07 W= +4.10652659629401e-05 AD=3.125e-11 AS=3.125e-11 PD= +8.21305319258802e-05 PS=8.21305319258802e-05 NQSMOD=1 MPB0 A0 B0 VDD_A0 VDD_A0 Pmod L=2.52010168145607e-07 W= +0.000103533977891464 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000207067955782928 PS=0.000207067955782928 NQSMOD=1 LA1 A1 LCA1 3.69030941553353e-11 RA1 LCA1 A2 0.266535044422507 LB1 B1 LCB1 3.69030941553353e-11 RB1 LCB1 B2 0.266535044422507 C1 A2 B2 2.50418376625721e-14 MNA1 B1 A1 0 0 Nmod L=2.52370578161099e-07 W=4.12246995102289e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.24493990204578e-05 PS= +8.24493990204578e-05 NQSMOD=1 MPA1 B1 A1 VDD VDD Pmod L=2.45709468983316e-07 W=0.000103710764679465 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000207421529358929 PS= +0.000207421529358929 NQSMOD=1 MNB1 A1 B1 0 0 Nmod L=2.48115895523017e-07 W=4.26306134285554e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.52612268571108e-05 PS= +8.52612268571108e-05 NQSMOD=1 MPB1 A1 B1 VDD VDD Pmod L=2.55265156192223e-07 W=0.000102043840486507 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000204087680973014 PS= +0.000204087680973014 NQSMOD=1 LA2 A2 LCA2 3.69030941553353e-11 RA2 LCA2 A3 0.266535044422507 LB2 B2 LCB2 3.69030941553353e-11 RB2 LCB2 B3 0.266535044422507 C2 A3 B3 2.50418376625721e-14 MNA2 B2 A2 0 0 Nmod L=2.53484220592882e-07 W=4.16915225420459e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.33830450840917e-05 PS= +8.33830450840917e-05 NQSMOD=1 MPA2 B2 A2 VDD VDD Pmod L=2.44256748076514e-07 W=0.00010549295960702 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000210985919214039 PS= +0.000210985919214039 NQSMOD=1 MNB2 A2 B2 0 0 Nmod L=2.48805892712811e-07 W=4.15734692647458e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.31469385294916e-05 PS= +8.31469385294916e-05 NQSMOD=1 MPB2 A2 B2 VDD VDD Pmod L=2.54004987710956e-07 W=0.00010229621219808 +AD=7.8125e-11 AS=7.8125e-11 PD=0.00020459242439616 PS= +0.00020459242439616 NQSMOD=1 LA3 A3 LCA3 3.69030941553353e-11 RA3 LCA3 A4 0.266535044422507 LB3 B3 LCB3 3.69030941553353e-11 RB3 LCB3 B4 0.266535044422507 C3 A4 B4 2.50418376625721e-14 MNA3 B3 A3 0 0 Nmod L=2.54307430347219e-07 W=4.11339076756089e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.22678153512179e-05 PS= +8.22678153512179e-05 NQSMOD=1 MPA3 B3 A3 VDD VDD Pmod L=2.52369109463781e-07 W=0.000103371681055656 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000206743362111311 PS= +0.000206743362111311 NQSMOD=1 MNB3 A3 B3 0 0 Nmod L=2.4960708801709e-07 W=4.21794611046917e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.43589222093833e-05 PS= +8.43589222093833e-05 NQSMOD=1 MPB3 A3 B3 VDD VDD Pmod L=2.53834779766428e-07 W=0.000105556314711602 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000211112629423204 PS= +0.000211112629423204 NQSMOD=1 LA4 A4 LCA4 3.69030941553353e-11 RA4 LCA4 A5 0.266535044422507 LB4 B4 LCB4 3.69030941553353e-11 RB4 LCB4 B5 0.266535044422507 C4 A5 B5 2.50418376625721e-14 MNA4 B4 A4 0 0 Nmod L=2.48091656083177e-07 W=4.11207568141106e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.22415136282211e-05 PS= +8.22415136282211e-05 NQSMOD=1 MPA4 B4 A4 VDD VDD Pmod L=2.47723605289033e-07 W=0.000103463392309261 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000206926784618522 PS= +0.000206926784618522 NQSMOD=1 MNB4 A4 B4 0 0 Nmod L=2.49254771880382e-07 W=4.25122425012226e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.50244850024452e-05 PS= +8.50244850024452e-05 NQSMOD=1 MPB4 A4 B4 VDD VDD Pmod L=2.49689766979065e-07 W=0.000103227993619608 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000206455987239216 PS= +0.000206455987239216 NQSMOD=1 LA5 A5 LCA5 3.69030941553353e-11 RA5 LCA5 A6 0.266535044422507 LB5 B5 LCB5 3.69030941553353e-11 RB5 LCB5 B6 0.266535044422507 C5 A6 B6 2.50418376625721e-14 MNA5 B5 A5 0 0 Nmod L=2.53960031106522e-07 W=4.1129961792588e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.22599235851759e-05 PS= +8.22599235851759e-05 NQSMOD=1 MPA5 B5 A5 VDD VDD Pmod L=2.47418707088064e-07 W=0.000101621693062467 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000203243386124935 PS= +0.000203243386124935 NQSMOD=1 MNB5 A5 B5 0 0 Nmod L=2.49659687529522e-07 W=4.2524931640785e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.50498632815701e-05 PS= +8.50498632815701e-05 NQSMOD=1 MPB5 A5 B5 VDD VDD Pmod L=2.46328059754468e-07 W=0.000102061546065548 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000204123092131096 PS= +0.000204123092131096 NQSMOD=1 LA6 A6 LCA6 3.69030941553353e-11 RA6 LCA6 A7 0.266535044422507 LB6 B6 LCB6 3.69030941553353e-11 RB6 LCB6 B7 0.266535044422507 C6 A7 B7 2.50418376625721e-14 MNA6 B6 A6 0 0 Nmod L=2.54326804653788e-07 W=4.17332976706085e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.34665953412171e-05 PS= +8.34665953412171e-05 NQSMOD=1 MPA6 B6 A6 VDD VDD Pmod L=2.48727427835127e-07 W=0.000103244611103459 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000206489222206918 PS= +0.000206489222206918 NQSMOD=1 MNB6 A6 B6 0 0 Nmod L=2.49697035135609e-07 W=4.23570035518e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.47140071036001e-05 PS= +8.47140071036001e-05 NQSMOD=1 MPB6 A6 B6 VDD VDD Pmod L=2.48995485890626e-07 W=0.000103695454759978 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000207390909519956 PS= +0.000207390909519956 NQSMOD=1 LA7 A7 LCA7 3.69030941553353e-11 RA7 LCA7 A8 0.266535044422507 LB7 B7 LCB7 3.69030941553353e-11 RB7 LCB7 B8 0.266535044422507 C7 A8 B8 2.50418376625721e-14 MNA7 B7 A7 0 0 Nmod L=2.53418975114981e-07 W=4.06421756574473e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.12843513148946e-05 PS= +8.12843513148946e-05 NQSMOD=1 MPA7 B7 A7 VDD VDD Pmod L=2.4471861043622e-07 W=0.000104600862141835 +AD=7.8125e-11 AS=7.8125e-11 PD=0.00020920172428367 PS= +0.00020920172428367 NQSMOD=1 MNB7 A7 B7 0 0 Nmod L=2.50159056393584e-07 W=4.06845582724173e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.13691165448345e-05 PS= +8.13691165448345e-05 NQSMOD=1 MPB7 A7 B7 VDD VDD Pmod L=2.55032245177227e-07 W=0.000106482118141681 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000212964236283363 PS= +0.000212964236283363 NQSMOD=1 LA8 A8 LCA8 3.69030941553353e-11 RA8 LCA8 A9 0.266535044422507 LB8 B8 LCB8 3.69030941553353e-11 RB8 LCB8 B9 0.266535044422507 C8 A9 B9 2.50418376625721e-14 MNA8 B8 A8 0 0 Nmod L=2.45729547191971e-07 W=4.18266198665335e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.3653239733067e-05 PS=8.3653239733067e-05 +NQSMOD=1 MPA8 B8 A8 VDD VDD Pmod L=2.45156004861421e-07 W=0.000101593205477244 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000203186410954489 PS= +0.000203186410954489 NQSMOD=1 MNB8 A8 B8 0 0 Nmod L=2.49014342219656e-07 W=4.14314219478801e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.28628438957603e-05 PS= +8.28628438957603e-05 NQSMOD=1 MPB8 A8 B8 VDD VDD Pmod L=2.50396673007567e-07 W=0.000103029640740115 +AD=7.8125e-11 AS=7.8125e-11 PD=0.00020605928148023 PS= +0.00020605928148023 NQSMOD=1 LA9 A9 LCA9 3.69030941553353e-11 RA9 LCA9 A10 0.266535044422507 LB9 B9 LCB9 3.69030941553353e-11 RB9 LCB9 B10 0.266535044422507 C9 A10 B10 2.50418376625721e-14 MNA9 B9 A9 0 0 Nmod L=2.51066307645916e-07 W=4.17044186844862e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.34088373689724e-05 PS= +8.34088373689724e-05 NQSMOD=1 MPA9 B9 A9 VDD VDD Pmod L=2.4945438501494e-07 W=0.000104601836030031 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000209203672060063 PS= +0.000209203672060063 NQSMOD=1 MNB9 A9 B9 0 0 Nmod L=2.56178041422984e-07 W=4.17990098329256e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.35980196658511e-05 PS= +8.35980196658511e-05 NQSMOD=1 MPB9 A9 B9 VDD VDD Pmod L=2.5274010042983e-07 W=0.000103578149162769 +AD=7.8125e-11 AS=7.8125e-11 PD=0.000207156298325537 PS= +0.000207156298325537 NQSMOD=1 LA10 A10 LCA10 3.69030941553353e-11 RA10 LCA10 A11 0.266535044422507 LB10 B10 LCB10 3.69030941553353e-11 RB10 LCB10 B11 0.266535044422507 C10 A11 B11 2.50418376625721e-14 MNA10 B10 A10 0 0 Nmod L=2.45772611943267e-07 W=4.24345922952649e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.48691845905299e-05 PS= +8.48691845905299e-05 NQSMOD=1 MPA10 B10 A10 VDD VDD Pmod L=2.55544710347746e-07 W= +0.000105625826497323 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000211251652994645 PS=0.000211251652994645 NQSMOD=1 MNB10 A10 B10 0 0 Nmod L=2.55886308364338e-07 W=4.0850956346516e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.17019126930321e-05 PS= +8.17019126930321e-05 NQSMOD=1 MPB10 A10 B10 VDD VDD Pmod L=2.44778614470725e-07 W= +0.000105511594248206 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000211023188496411 PS=0.000211023188496411 NQSMOD=1 LA11 A11 LCA11 3.69030941553353e-11 RA11 LCA11 A12 0.266535044422507 LB11 B11 LCB11 3.69030941553353e-11 RB11 LCB11 B12 0.266535044422507 C11 A12 B12 2.50418376625721e-14 MNA11 B11 A11 0 0 Nmod L=2.4768739676619e-07 W=4.14724461551725e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.29448923103449e-05 PS= +8.29448923103449e-05 NQSMOD=1 MPA11 B11 A11 VDD VDD Pmod L=2.46276216123912e-07 W= +0.000101782633723501 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000203565267447002 PS=0.000203565267447002 NQSMOD=1 MNB11 A11 B11 0 0 Nmod L=2.54985612770668e-07 W=4.24608643314108e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.49217286628216e-05 PS= +8.49217286628216e-05 NQSMOD=1 MPB11 A11 B11 VDD VDD Pmod L=2.45772463970764e-07 W= +0.000106109588792745 AD=7.8125e-11 AS=7.8125e-11 PD= +0.00021221917758549 PS=0.00021221917758549 NQSMOD=1 LA12 A12 LCA12 3.69030941553353e-11 RA12 LCA12 A13 0.266535044422507 LB12 B12 LCB12 3.69030941553353e-11 RB12 LCB12 B13 0.266535044422507 C12 A13 B13 2.50418376625721e-14 MNA12 B12 A12 0 0 Nmod L=2.45480481009462e-07 W=4.20858793029857e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.41717586059714e-05 PS= +8.41717586059714e-05 NQSMOD=1 MPA12 B12 A12 VDD VDD Pmod L=2.48462320158069e-07 W= +0.00010650127744954 AD=7.8125e-11 AS=7.8125e-11 PD= +0.00021300255489908 PS=0.00021300255489908 NQSMOD=1 MNB12 A12 B12 0 0 Nmod L=2.51992945030792e-07 W=4.17981435096244e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.35962870192489e-05 PS= +8.35962870192489e-05 NQSMOD=1 MPB12 A12 B12 VDD VDD Pmod L=2.49941922576661e-07 W= +0.0001044851795426 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000208970359085199 PS=0.000208970359085199 NQSMOD=1 LA13 A13 LCA13 3.69030941553353e-11 RA13 LCA13 A14 0.266535044422507 LB13 B13 LCB13 3.69030941553353e-11 RB13 LCB13 B14 0.266535044422507 C13 A14 B14 2.50418376625721e-14 MNA13 B13 A13 0 0 Nmod L=2.51146190542173e-07 W=4.23276196447018e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.46552392894035e-05 PS= +8.46552392894035e-05 NQSMOD=1 MPA13 B13 A13 VDD VDD Pmod L=2.46359362747576e-07 W= +0.00010249565409785 AD=7.8125e-11 AS=7.8125e-11 PD= +0.0002049913081957 PS=0.0002049913081957 NQSMOD=1 MNB13 A13 B13 0 0 Nmod L=2.44656485453628e-07 W=4.11044634633624e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.22089269267248e-05 PS= +8.22089269267248e-05 NQSMOD=1 MPB13 A13 B13 VDD VDD Pmod L=2.56119611942636e-07 W= +0.0001064085618438 AD=7.8125e-11 AS=7.8125e-11 PD=0.0002128171236876 +PS=0.0002128171236876 NQSMOD=1 LA14 A14 LCA14 3.69030941553353e-11 RA14 LCA14 A15 0.266535044422507 LB14 B14 LCB14 3.69030941553353e-11 RB14 LCB14 B15 0.266535044422507 C14 A15 B15 2.50418376625721e-14 MNA14 B14 A14 0 0 Nmod L=2.47663439668801e-07 W=4.20889991075918e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.41779982151835e-05 PS= +8.41779982151835e-05 NQSMOD=1 MPA14 B14 A14 VDD VDD Pmod L=2.51252450429323e-07 W= +0.000103622229824819 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000207244459649638 PS=0.000207244459649638 NQSMOD=1 MNB14 A14 B14 0 0 Nmod L=2.5044796612668e-07 W=4.24685059762319e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.49370119524638e-05 PS= +8.49370119524638e-05 NQSMOD=1 MPB14 A14 B14 VDD VDD Pmod L=2.4786360459861e-07 W= +0.000104258615459431 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000208517230918863 PS=0.000208517230918863 NQSMOD=1 LA15 A15 LCA15 3.69030941553353e-11 RA15 LCA15 A16 0.266535044422507 LB15 B15 LCB15 3.69030941553353e-11 RB15 LCB15 B16 0.266535044422507 C15 A16 B16 2.50418376625721e-14 MNA15 B15 A15 0 0 Nmod L=2.5213362488047e-07 W=4.26610931467994e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.53221862935989e-05 PS= +8.53221862935989e-05 NQSMOD=1 MPA15 B15 A15 VDD VDD Pmod L=2.44411053097269e-07 W= +0.000104344399065411 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000208688798130821 PS=0.000208688798130821 NQSMOD=1 MNB15 A15 B15 0 0 Nmod L=2.44947739168727e-07 W=4.18061319080677e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.36122638161354e-05 PS= +8.36122638161354e-05 NQSMOD=1 MPB15 A15 B15 VDD VDD Pmod L=2.45133067349567e-07 W= +0.000103673770597555 AD=7.8125e-11 AS=7.8125e-11 PD= +0.00020734754119511 PS=0.00020734754119511 NQSMOD=1 LA16 A16 LCA16 3.69030941553353e-11 RA16 LCA16 A17 0.266535044422507 LB16 B16 LCB16 3.69030941553353e-11 RB16 LCB16 B17 0.266535044422507 C16 A17 B17 2.50418376625721e-14 MNA16 B16 A16 0 0 Nmod L=2.5558903414348e-07 W=4.23651981762607e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.47303963525215e-05 PS= +8.47303963525215e-05 NQSMOD=1 MPA16 B16 A16 VDD VDD Pmod L=2.46968507923118e-07 W= +0.000101577430536373 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000203154861072746 PS=0.000203154861072746 NQSMOD=1 MNB16 A16 B16 0 0 Nmod L=2.52441475326891e-07 W=4.0963445615255e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.192689123051e-05 PS= +8.192689123051e-05 NQSMOD=1 MPB16 A16 B16 VDD VDD Pmod L=2.49958772476576e-07 W= +0.000102341104143712 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000204682208287424 PS=0.000204682208287424 NQSMOD=1 LA17 A17 LCA17 3.69030941553353e-11 RA17 LCA17 A18 0.266535044422507 LB17 B17 LCB17 3.69030941553353e-11 RB17 LCB17 B18 0.266535044422507 C17 A18 B18 2.50418376625721e-14 MNA17 B17 A17 0 0 Nmod L=2.46623947628415e-07 W=4.07033737509309e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.14067475018618e-05 PS= +8.14067475018618e-05 NQSMOD=1 MPA17 B17 A17 VDD VDD Pmod L=2.52274212428759e-07 W= +0.000105423152156798 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000210846304313596 PS=0.000210846304313596 NQSMOD=1 MNB17 A17 B17 0 0 Nmod L=2.51233452024547e-07 W=4.12815452669714e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.25630905339429e-05 PS= +8.25630905339429e-05 NQSMOD=1 MPB17 A17 B17 VDD VDD Pmod L=2.49324495416238e-07 W= +0.000104142717459091 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000208285434918183 PS=0.000208285434918183 NQSMOD=1 LA18 A18 LCA18 3.69030941553353e-11 RA18 LCA18 A19 0.266535044422507 LB18 B18 LCB18 3.69030941553353e-11 RB18 LCB18 B19 0.266535044422507 C18 A19 B19 2.50418376625721e-14 MNA18 B18 A18 0 0 Nmod L=2.52038203439398e-07 W=4.17044670825126e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.34089341650252e-05 PS= +8.34089341650252e-05 NQSMOD=1 MPA18 B18 A18 VDD VDD Pmod L=2.46465042965348e-07 W= +0.000102305682920291 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000204611365840582 PS=0.000204611365840582 NQSMOD=1 MNB18 A18 B18 0 0 Nmod L=2.45695550122768e-07 W=4.2510656912981e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.50213138259621e-05 PS= +8.50213138259621e-05 NQSMOD=1 MPB18 A18 B18 VDD VDD Pmod L=2.56212134001568e-07 W= +0.000101696358889307 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000203392717778614 PS=0.000203392717778614 NQSMOD=1 LA19 A19 LCA19 3.69030941553353e-11 RA19 LCA19 A20 0.266535044422507 LB19 B19 LCB19 3.69030941553353e-11 RB19 LCB19 B20 0.266535044422507 C19 A20 B20 2.50418376625721e-14 MNA19 B19 A19 0 0 Nmod L=2.46298724559332e-07 W=4.26183323927543e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.52366647855085e-05 PS= +8.52366647855085e-05 NQSMOD=1 MPA19 B19 A19 VDD VDD Pmod L=2.53903413760174e-07 W= +0.000103580270078538 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000207160540157077 PS=0.000207160540157077 NQSMOD=1 MNB19 A19 B19 0 0 Nmod L=2.4541336381424e-07 W=4.1471197163819e-05 AD= +3.125e-11 AS=3.125e-11 PD=8.2942394327638e-05 PS=8.2942394327638e-05 +NQSMOD=1 MPB19 A19 B19 VDD VDD Pmod L=2.51953325753565e-07 W= +0.0001019745929959 AD=7.8125e-11 AS=7.8125e-11 PD=0.0002039491859918 +PS=0.0002039491859918 NQSMOD=1 LA20 A20 LCA20 3.69030941553353e-11 RA20 LCA20 A21 0.266535044422507 LB20 B20 LCB20 3.69030941553353e-11 RB20 LCB20 B21 0.266535044422507 C20 A21 B21 2.50418376625721e-14 MNA20 B20 A20 0 0 Nmod L=2.55318350883171e-07 W=4.2257523363596e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.4515046727192e-05 PS= +8.4515046727192e-05 NQSMOD=1 MPA20 B20 A20 VDD VDD Pmod L=2.50733395598687e-07 W= +0.000105848300738233 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000211696601476467 PS=0.000211696601476467 NQSMOD=1 MNB20 A20 B20 0 0 Nmod L=2.53961238224852e-07 W=4.07467605160825e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.1493521032165e-05 PS= +8.1493521032165e-05 NQSMOD=1 MPB20 A20 B20 VDD VDD Pmod L=2.52173406118976e-07 W= +0.000104205251139887 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000208410502279773 PS=0.000208410502279773 NQSMOD=1 LA21 A21 LCA21 3.69030941553353e-11 RA21 LCA21 A22 0.266535044422507 LB21 B21 LCB21 3.69030941553353e-11 RB21 LCB21 B22 0.266535044422507 C21 A22 B22 2.50418376625721e-14 MNA21 B21 A21 0 0 Nmod L=2.46323292867561e-07 W=4.1601573531982e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.32031470639639e-05 PS= +8.32031470639639e-05 NQSMOD=1 MPA21 B21 A21 VDD VDD Pmod L=2.54613442115316e-07 W= +0.000104931161465525 AD=7.8125e-11 AS=7.8125e-11 PD= +0.00020986232293105 PS=0.00020986232293105 NQSMOD=1 MNB21 A21 B21 0 0 Nmod L=2.55836584454404e-07 W=4.10424160274173e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.20848320548346e-05 PS= +8.20848320548346e-05 NQSMOD=1 MPB21 A21 B21 VDD VDD Pmod L=2.54709741956022e-07 W= +0.000102062091080516 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000204124182161031 PS=0.000204124182161031 NQSMOD=1 LA22 A22 LCA22 3.69030941553353e-11 RA22 LCA22 A23 0.266535044422507 LB22 B22 LCB22 3.69030941553353e-11 RB22 LCB22 B23 0.266535044422507 C22 A23 B23 2.50418376625721e-14 MNA22 B22 A22 0 0 Nmod L=2.54430620981417e-07 W=4.19307535657001e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.38615071314001e-05 PS= +8.38615071314001e-05 NQSMOD=1 MPA22 B22 A22 VDD VDD Pmod L=2.46694525572975e-07 W= +0.000103108817734331 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000206217635468663 PS=0.000206217635468663 NQSMOD=1 MNB22 A22 B22 0 0 Nmod L=2.4991048194413e-07 W=4.12343575509987e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.24687151019974e-05 PS= +8.24687151019974e-05 NQSMOD=1 MPB22 A22 B22 VDD VDD Pmod L=2.53435790976082e-07 W= +0.000105540213369592 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000211080426739185 PS=0.000211080426739185 NQSMOD=1 LA23 A23 LCA23 3.69030941553353e-11 RA23 LCA23 A24 0.266535044422507 LB23 B23 LCB23 3.69030941553353e-11 RB23 LCB23 B24 0.266535044422507 C23 A24 B24 2.50418376625721e-14 MNA23 B23 A23 0 0 Nmod L=2.47985427798248e-07 W=4.14939059451511e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.29878118903023e-05 PS= +8.29878118903023e-05 NQSMOD=1 MPA23 B23 A23 VDD VDD Pmod L=2.50625862917368e-07 W= +0.000104857443713713 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000209714887427425 PS=0.000209714887427425 NQSMOD=1 MNB23 A23 B23 0 0 Nmod L=2.48906363214973e-07 W=4.09072154111792e-05 +AD=3.125e-11 AS=3.125e-11 PD=8.18144308223583e-05 PS= +8.18144308223583e-05 NQSMOD=1 MPB23 A23 B23 VDD VDD Pmod L=2.544246792556e-07 W= +0.000106667496188909 AD=7.8125e-11 AS=7.8125e-11 PD= +0.000213334992377817 PS=0.000213334992377817 NQSMOD=1 RCROSS1 A0 B24 0.001 RCROSS2 B0 A24 0.001 .SAVE VDD0 .SAVE VSS0 .SAVE VDD_A0 .SAVE VSS_A0 .SAVE VDD_B0 .SAVE VSS_B0 .SAVE A0 B0 LA0#branch LB0#branch A1 B1 LA1#branch LB1#branch A2 B2 +LA2#branch LB2#branch A3 B3 LA3#branch LB3#branch A4 B4 LA4#branch +LB4#branch A5 B5 LA5#branch LB5#branch A6 B6 LA6#branch LB6#branch +A7 B7 LA7#branch LB7#branch A8 B8 LA8#branch LB8#branch A9 B9 +LA9#branch LB9#branch A10 B10 LA10#branch LB10#branch A11 B11 +LA11#branch LB11#branch A12 B12 LA12#branch LB12#branch A13 B13 +LA13#branch LB13#branch A14 B14 LA14#branch LB14#branch A15 B15 +LA15#branch LB15#branch A16 B16 LA16#branch LB16#branch A17 B17 +LA17#branch LB17#branch A18 B18 LA18#branch LB18#branch A19 B19 +LA19#branch LB19#branch A20 B20 LA20#branch LB20#branch A21 B21 +LA21#branch LB21#branch A22 B22 LA22#branch LB22#branch A23 B23 +LA23#branch LB23#branch ** **INCLUDING FILE: ./proj1/process.models.... * * Typical N Typical P - from process corners (taken from tsmc025_corners.bsim3 fron NCSU) * * TSMC 0.25u 5M 1P process. 2.5V transistor models .MODEL Nmod NMOS LEVEL=8 +TNOM = 25 +VERSION = 3.2.2 TOX = 5.8e-9 +XJ = 1E-07 NCH = 2.354946E+17 LLN = 1 +LWN = 1 WLN = 1 WWN = 1 +LINT = 1.76E-08 WINT = 6.75E-09 MOBMOD = 1 +BINUNIT = 2 DWG = 0 DWB = 0 +VTH0 = 0.4321336 LVTH0 = 2.081814E-08 WVTH0 = -5.470342E-11 +PVTH0 = -6.721795E-16 K1 = 0.3281252 LK1 = 9.238362E-08 +WK1 = 2.878255E-08 PK1 = -2.426481E-14 K2 = 0.0402824 +LK2 = -3.208392E-08 WK2 = -1.154091E-08 PK2 = 9.192045E-15 +K3 = 0 DVT0 = 0 DVT1 = 0 +DVT2 = 0 DVT0W = 0 DVT1W = 0 +DVT2W = 0 NLX = 0 W0 = 0 +K3B = 0 VSAT = 7.586954E+04 LVSAT = 3.094656E-03 +WVSAT = -1.747416E-03 PVSAT = 8.820956E-10 UA = 8.924498E-10 +LUA = -1.511745E-16 WUA = -3.509821E-17 PUA = -3.08778E-23 +UB = 8.928832E-21 LUB = -1.655745E-27 WUB = -2.03282E-27 +PUB = 3.4578E-34 UC = -1.364265E-11 LUC = 1.170473E-17 +WUC = -1.256705E-18 PUC = -6.249644E-24 RDSW = 447.8871 +PRWB = 0 PRWG = 0 WR = 0.99 +U0 = 0.06005258 LU0 = -6.31976E-09 WU0 = -8.819531E-09 +PU0 = 3.57209E-15 A0 = -1.468837 LA0 = 6.419548E-07 +WA0 = 5.512414E-07 PA0 = -9.222928E-14 KETA = -0.04922795 +LKETA = 2.360844E-08 WKETA = 1.560385E-08 PKETA = -5.98377E-15 +A1 = 0.02659908 LA1 = -6.511454E-09 A2 = 1 +AGS = -4.01637 LAGS = 1.090294E-06 WAGS = 1.162021E-06 +PAGS = -3.108579E-13 B0 = 0 B1 = 0 +VOFF = -0.1829426 LVOFF = 9.941631E-09 WVOFF = 1.568082E-08 +PVOFF = -2.832958E-15 NFACTOR = 0.6790636 LNFACTOR= 3.454948E-08 +WNFACTOR= 1.501016E-07 PNFACTOR= -2.955591E-14 CIT = 2.218499E-04 +LCIT = -1.076934E-10 WCIT = -3.286884E-10 PCIT = 1.658928E-16 +CDSC = 0 CDSCB = 0 CDSCD = 0 +ETA0 = 1.215578E-04 LETA0 = -1.037758E-11 WETA0 = -3.030225E-11 +PETA0 = 1.529658E-17 ETAB = 3.548681E-03 LETAB = -1.791374E-09 +WETAB = -6.897268E-10 PETAB = 3.481742E-16 DSUB = 0 +PCLM = 3.583838 PDIBLC1 = 0 PDIBLC2 = 5.379674E-03 +LPDIBLC2= 7.808481E-09 WPDIBLC2= 5.516945E-10 PPDIBLC2= -2.784957E-16 +PDIBLCB = -0.1229374 LPDIBLCB= 4.956215E-08 WPDIBLCB= 3.299946E-08 +PPDIBLCB= -9.624918E-15 DROUT = 0 PSCBE1 = 4.472639E+08 +LPSCBE1 = 28.64041 WPSCBE1 = 15.7154 PPSCBE1 = -7.933138E-06 +PSCBE2 = 1.842585E-06 LPSCBE2 = 2.871008E-12 WPSCBE2 = 2.579183E-12 +PPSCBE2 = -1.301972E-18 PVAG = -2.015254E-03 LPVAG = 1.017757E-09 +WPVAG = 3.07622E-10 PPVAG = -1.55418E-16 DELTA = -0.02862256 +LDELTA = 1.492454E-08 WDELTA = -6.71663E-09 PDELTA = 3.407521E-15 +ALPHA0 = 0 BETA0 = 30 KT1 = -0.2579945 +LKT1 = -1.664895E-08 WKT1 = -1.633463E-08 PKT1 = 3.755864E-15 +KT2 = -0.05347481 LKT2 = 8.244731E-09 WKT2 = 1.13705E-09 +PKT2 = -1.240924E-15 AT = -1.132632E+04 LAT = 6.469047E-03 +WAT = 6.829220E-04 PAT = -4.154249E-10 UTE = -2.309089 +LUTE = 1.662427E-07 WUTE = 1.244801E-07 PUTE = -5.627924E-14 +UA1 = -3.461758E-10 LUA1 = 1.747495E-16 WUA1 = -1.42065E-16 +PUA1 = 7.171442E-23 UB1 = 0 UC1 = -2.38157E-12 +LUC1 = -2.895726E-18 WUC1 = -1.990052E-17 PUC1 = 1.004497E-23 +KT1L = 0 PRT = -1E-18 CJ = 2.024128E-3 +MJ = 0.4960069 PB = 0.9173808 CJSW = 2.751528E-10 +MJSW = 0.443145 PBSW = 0.9173808 CJSWG = 2.135064E-10 +MJSWG = 0.443145 PBSWG = 0.9173808 +RSH = 4.5 +XTI = 3 +CGDO = 3.11E-10 CGSO = 3.11E-10 CAPMOD = 2 +XPART = 1 CF = 0 +JS = 1E-06 +JSW = 5E-11 .MODEL Pmod PMOS LEVEL=8 +VERSION = 3.2.2 +TNOM = 25 TOX = 5.8e-9 +XJ = 1E-7 NCH = 4.1589E17 +LLN = 1 LWN = 1 WLN = 1 +WWN = 1 LINT = 1.2365E-8 WINT = 7.8E-9 +MOBMOD = 1 BINUNIT = 2 DWG = 0 +DWB = 0 VTH0 = -0.6236538 LVTH0 = 2.649834E-8 +WVTH0 = 3.214189E-8 PVTH0 = -3.22268E-15 K1 = 0.4198155 +LK1 = 5.770498E-8 WK1 = 5.577151E-8 PK1 = -2.81684E-14 +K2 = 0.0429467 LK2 = -2.296405E-8 WK2 = -1.355302E-8 +PK2 = 6.848271E-15 K3 = 0 DVT0 = 0 +DVT1 = 0 DVT2 = 0 DVT0W = 0 +DVT1W = 0 DVT2W = 0 NLX = 0 +W0 = 0 K3B = 0 VSAT = 1.443912E5 +LVSAT = -7.688012E-4 WVSAT = -6.083648E-3 PVSAT = 2.186471E-10 +UA = 1.846811E-9 LUA = -3.27694E-16 WUA = -2.82106E-16 +PUA = 7.180233E-23 UB = -7.84535E-19 LUB = 4.772849E-25 +WUB = 2.599205E-25 PUB = -1.46530E-31 UC = -1.75560E-10 +LUC = 3.360832E-17 WUC = 1.504425E-17 PUC = -1.30556E-23 +RDSW = 1.03E3 PRWB = 0 PRWG = 0 +WR = 1 U0 = 0.0136443 LU0 = -7.22084E-10 +WU0 = -1.088554E-9 PU0 = 2.730854E-16 A0 = 0.1071803 +LA0 = 4.64252E-7 WA0 = 5.383179E-7 PA0 = -1.32033E-13 +KETA = -4.943762E-3 LKETA = -3.565304E-9 WKETA = -5.226247E-9 +PKETA = 2.640665E-15 A1 = 0 A2 = 0.4 +AGS = 0.1664005 LAGS = 1.19106E-7 WAGS = 5.29237E-8 +PAGS = -2.67304E-14 B0 = 0 B1 = 0 +VOFF = -0.0592623 LVOFF = -1.96686E-8 WVOFF = -1.486398E-8 +PVOFF = 7.510321E-15 NFACTOR = 0.8588103 LNFACTOR= -1.158881E-7 +WNFACTOR= 1.210664E-8 PNFACTOR= -6.11712E-15 CIT = 6.439495E-5 +LCIT = 2.916437E-10 WCIT = -3.11284E-11 PCIT = 1.572825E-17 +CDSC = 0 CDSCB = 0 CDSCD = 0 +ETA0 = -3.819468E-3 LETA0 = 2.155422E-9 WETA0 = 8.235612E-10 +PETA0 = -4.16037E-16 ETAB = 1.334637E-3 LETAB = -7.93631E-10 +WETAB = 5.284657E-11 PETAB = -2.68353E-17 DSUB = 0 +PCLM = 0.1098002 LPCLM = 6.874263E-7 WPCLM = 6.724724E-7 +PPCLM = -1.97766E-13 PDIBLC1 = 0 PDIBLC2 = 5.801323E-3 +LPDIBLC2= -1.81964E-9 WPDIBLC2= -5.853396E-9 PPDIBLC2= 2.957545E-15 +PDIBLCB = 0.1921199 DROUT = 0 PSCBE1 = 7.19E8 +PSCBE2 = 1E-20 PVAG = 0 DELTA = 0.01 +ALPHA0 = 0 BETA0 = 30 KT1 = -0.3248987 +LKT1 = -1.160393E-8 WKT1 = 4.153356E-8 PKT1 = -4.62347E-15 +KT2 = -0.0367632 AT = 1E4 UTE = -1.04 +UA1 = 3.992421E-10 UB1 = -9.23294E-19 LUB1 = -5.28718E-26 +WUB1 = -6.13069E-26 PUB1 = 1.503674E-32 UC1 = -1.00699E-12 +KT1L = 0 PRT = 0 CJ = 1.931092e-3 +MJ = 0.4812153 PB = 0.9134669 CJSW = 2.232277e-10 +MJSW = 0.3237595 PBSW = 0.9134669 CJSWG = 1.607088e-10 +MJSWG = 0.3237595 PBSWG = 0.9134669 +RSH = 3.5 +CGDO = 2.68e-10 CGSO = 2.68e-10 +CAPMOD = 2 +XPART = 1 +CF = 0 XTI = 3 +JS = 3E-7 +JSW = 5E-12 **.... FINISHED INCLUDING: ./proj1/process.models ** .OPTIONS TEMP=25 VSLEW_CONTROL VSLEW 0 (PULSE 0 1 0 1e-09) EVLOGIC VRAMP 0 VSLEW 0 2.5 VDDPOWER VDD VRAMP DC 0 VARACTOR_V VARACTOR_V 0 DC 2.5 .SAVE vddpower#branch .SAVE vdd .SAVE varactor_v .TRAN 0.02n 100n 0n 0.5n .END tmpk8ny_4pz/examples/tclspice/tcl-testbench2/tcl-testbench2.sh0000755000175000017500000000202013546075722024577 0ustar carstencarsten#!/bin/sh # -*- mode: tcl -*- \ exec wish -f "$0" ${1+"$@"} package require BLT load ../../../src/.libs/libspice.so namespace import blt::* wm title . "Vector Test script" wm geometry . 800x600+40+40 pack propagate . false stripchart .chart pack .chart -side top -fill both -expand true .chart axis configure x -title "Time" # Create a vector (and call it $vector) #vector create v1 spice::source example.cir spice::bg run after 1000 vector create a0 vector create b0 vector create a1 vector create b1 vector create stime proc bltupdate {} { #puts [spice::spice_data] spice::spicetoblt a0 a0 spice::spicetoblt b0 b0 spice::spicetoblt a1 a1 spice::spicetoblt b1 b1 spice::spicetoblt time stime #puts $spice::lastitercount after 100 bltupdate } bltupdate .chart element create a0 -color red -xdata stime -ydata a0 .chart element create b0 -color blue -xdata stime -ydata b0 .chart element create a1 -color yellow -xdata stime -ydata a1 .chart element create b1 -color black -xdata stime -ydata b1 tmpk8ny_4pz/examples/tclspice/tcl-testbench1/0000755000175000017500000000000013546075722021424 5ustar carstencarstentmpk8ny_4pz/examples/tclspice/tcl-testbench1/tcl-testbench1.sh0000755000175000017500000000263613546075722024612 0ustar carstencarsten#!/bin/sh # -*- mode: tcl -*- \ exec wish -f "$0" ${1+"$@"} # old name: analyse-20070504-0.tcl package require BLT load ../../../src/.libs/libspice.so # Test of virtual capacitore circuit # Vary the control voltage and log the resulting capacitance spice::source "testCapa.cir" set n 30 set dv 0.2 set vmax [expr $dv/2] set vmin [expr -1 * $dv/2] set pas [expr $dv/ $n] blt::vector create Ctmp blt::vector create Cim blt::vector create check blt::vector create Vcmd blt::graph .cimvd -title "Cim = f(Vd)" blt::graph .checkvd -title "Rim = f(Vd)" blt::vector create Iex blt::vector create freq blt::graph .freqanal -title "Analyse frequentielle" set v [expr {$vmin + $n * $pas / 4}] spice::alter vd = $v spice::op spice::ac dec 10 100 100k spice::vectoblt {Vex#branch} Iex spice::vectoblt {frequency} freq pack .freqanal .freqanal element create line1 -xdata freq -ydata Iex for {set i 0} {[expr $n - $i]} {incr i } { set v [expr {$vmin + $i * $pas}] spice::alter vd = $v spice::op spice::ac dec 10 100 100k spice::let Cim = real(mean(Vex#branch/(2*Pi*i*frequency*(V(5)-V(6))))) spice::vectoblt Cim Ctmp Cim append $Ctmp(0:end) spice::let err = real(mean(sqrt((Vex#branch-(2*Pi*i*frequency*Cim*V(5)-V(6)))^2))) spice::vectoblt err Ctmp check append $Ctmp(0:end) Vcmd append $v } pack .cimvd .cimvd element create line1 -xdata Vcmd -ydata Cim pack .checkvd .checkvd element create line1 -xdata Vcmd -ydata check tmpk8ny_4pz/examples/tclspice/tcl-testbench1/PN2222.mod0000644000175000017500000000054113546075722022752 0ustar carstencarsten.model PN2222 NPN(Is=14.34f Xti=3 Eg=1.11 Vaf=74.03 Bf=255.9 Ne=1.307 + Ise=14.34f Ikf=.2847 Xtb=1.5 Br=6.092 Nc=2 Isc=0 Ikr=0 Rc=1 + Cjc=7.306p Mjc=.3416 Vjc=.75 Fc=.5 Cje=22.01p Mje=.377 Vje=.75 + Tr=46.91n Tf=411.1p Itf=.6 Vtf=1.7 Xtf=3 Rb=10) * Fairchild pid=19 case=TO92 * 88-09-07 bam creation tmpk8ny_4pz/examples/tclspice/tcl-testbench1/capa.cir0000644000175000017500000000072513546075722023033 0ustar carstencarsten* Capa variable sur la base de la thèse de Marc KODRNJA .SUBCKT capa 4 6 5 7 8 0 Vref1 26 0 DC 3 Vref2 16 0 DC 3 Vdp 7 0 DC 7 I0 3 0 DC 0.07 Ia1 15 0 DC 0.01 Ia2 25 0 DC 0.01 Ib1 14 0 DC 0.01 Ib2 24 0 DC 0.01 .INCLUDE PN2222.mod Qv1 4 16 14 PN2222 Qv2 4 26 24 PN2222 Q1 11 14 3 PN2222 Q2 21 24 3 PN2222 Qp1 5 8 11 PN2222 Qm1 6 7 11 PN2222 Qp2 6 8 21 PN2222 Qm2 5 7 21 PN2222 Qc1 4 5 15 PN2222 Qc2 4 6 25 PN2222 R1 4 5 100 R2 4 6 100 C1 15 14 10n C2 25 24 10n .ENDS tmpk8ny_4pz/examples/tclspice/tcl-testbench1/testCapa.cir0000644000175000017500000000026013546075722023665 0ustar carstencarstenBanc de test pour la Capa variable sur la base de la thèse de Marc KODRNJA .INCLUDE capa.cir Valim 4 0 DC 12 Vex 6 5 DC 0 AC 0.01 0 Vd 7 8 DC 0.0 xcapa 4 6 5 7 8 0 capa .END tmpk8ny_4pz/m4/0000755000175000017500000000000013546075722013500 5ustar carstencarstentmpk8ny_4pz/m4/ax_prog_cc_for_build.m40000644000175000017500000000770213546075722020101 0ustar carstencarsten# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_prog_cc_for_build.html # =========================================================================== # # SYNOPSIS # # AX_PROG_CC_FOR_BUILD # # DESCRIPTION # # This macro searches for a C compiler that generates native executables, # that is a C compiler that surely is not a cross-compiler. This can be # useful if you have to generate source code at compile-time like for # example GCC does. # # The macro sets the CC_FOR_BUILD and CPP_FOR_BUILD macros to anything # needed to compile or link (CC_FOR_BUILD) and preprocess (CPP_FOR_BUILD). # The value of these variables can be overridden by the user by specifying # a compiler with an environment variable (like you do for standard CC). # # It also sets BUILD_EXEEXT and BUILD_OBJEXT to the executable and object # file extensions for the build platform, and GCC_FOR_BUILD to `yes' if # the compiler we found is GCC. All these variables but GCC_FOR_BUILD are # substituted in the Makefile. # # LICENSE # # Copyright (c) 2008 Paolo Bonzini # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 8 AU_ALIAS([AC_PROG_CC_FOR_BUILD], [AX_PROG_CC_FOR_BUILD]) AC_DEFUN([AX_PROG_CC_FOR_BUILD], [dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_CPP])dnl AC_REQUIRE([AC_EXEEXT])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl dnl Use the standard macros, but make them use other variable names dnl pushdef([ac_cv_prog_CPP], ac_cv_build_prog_CPP)dnl pushdef([ac_cv_prog_gcc], ac_cv_build_prog_gcc)dnl pushdef([ac_cv_prog_cc_works], ac_cv_build_prog_cc_works)dnl pushdef([ac_cv_prog_cc_cross], ac_cv_build_prog_cc_cross)dnl pushdef([ac_cv_prog_cc_g], ac_cv_build_prog_cc_g)dnl pushdef([ac_cv_exeext], ac_cv_build_exeext)dnl pushdef([ac_cv_objext], ac_cv_build_objext)dnl pushdef([ac_exeext], ac_build_exeext)dnl pushdef([ac_objext], ac_build_objext)dnl pushdef([CC], CC_FOR_BUILD)dnl pushdef([CPP], CPP_FOR_BUILD)dnl pushdef([CFLAGS], CFLAGS_FOR_BUILD)dnl pushdef([CPPFLAGS], CPPFLAGS_FOR_BUILD)dnl pushdef([LDFLAGS], LDFLAGS_FOR_BUILD)dnl pushdef([host], build)dnl pushdef([host_alias], build_alias)dnl pushdef([host_cpu], build_cpu)dnl pushdef([host_vendor], build_vendor)dnl pushdef([host_os], build_os)dnl pushdef([ac_cv_host], ac_cv_build)dnl pushdef([ac_cv_host_alias], ac_cv_build_alias)dnl pushdef([ac_cv_host_cpu], ac_cv_build_cpu)dnl pushdef([ac_cv_host_vendor], ac_cv_build_vendor)dnl pushdef([ac_cv_host_os], ac_cv_build_os)dnl pushdef([ac_cpp], ac_build_cpp)dnl pushdef([ac_compile], ac_build_compile)dnl pushdef([ac_link], ac_build_link)dnl save_cross_compiling=$cross_compiling save_ac_tool_prefix=$ac_tool_prefix cross_compiling=no ac_tool_prefix= AC_PROG_CC AC_PROG_CPP AC_EXEEXT ac_tool_prefix=$save_ac_tool_prefix cross_compiling=$save_cross_compiling dnl Restore the old definitions dnl popdef([ac_link])dnl popdef([ac_compile])dnl popdef([ac_cpp])dnl popdef([ac_cv_host_os])dnl popdef([ac_cv_host_vendor])dnl popdef([ac_cv_host_cpu])dnl popdef([ac_cv_host_alias])dnl popdef([ac_cv_host])dnl popdef([host_os])dnl popdef([host_vendor])dnl popdef([host_cpu])dnl popdef([host_alias])dnl popdef([host])dnl popdef([LDFLAGS])dnl popdef([CPPFLAGS])dnl popdef([CFLAGS])dnl popdef([CPP])dnl popdef([CC])dnl popdef([ac_objext])dnl popdef([ac_exeext])dnl popdef([ac_cv_objext])dnl popdef([ac_cv_exeext])dnl popdef([ac_cv_prog_cc_g])dnl popdef([ac_cv_prog_cc_cross])dnl popdef([ac_cv_prog_cc_works])dnl popdef([ac_cv_prog_gcc])dnl popdef([ac_cv_prog_CPP])dnl dnl Finally, set Makefile variables dnl BUILD_EXEEXT=$ac_build_exeext BUILD_OBJEXT=$ac_build_objext AC_SUBST(BUILD_EXEEXT)dnl AC_SUBST(BUILD_OBJEXT)dnl AC_SUBST([CFLAGS_FOR_BUILD])dnl AC_SUBST([CPPFLAGS_FOR_BUILD])dnl AC_SUBST([LDFLAGS_FOR_BUILD])dnl ]) tmpk8ny_4pz/m4/ax_compare_version.m40000644000175000017500000001465313546075722017636 0ustar carstencarsten# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_compare_version.html # =========================================================================== # # SYNOPSIS # # AX_COMPARE_VERSION(VERSION_A, OP, VERSION_B, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # # DESCRIPTION # # This macro compares two version strings. Due to the various number of # minor-version numbers that can exist, and the fact that string # comparisons are not compatible with numeric comparisons, this is not # necessarily trivial to do in a autoconf script. This macro makes doing # these comparisons easy. # # The six basic comparisons are available, as well as checking equality # limited to a certain number of minor-version levels. # # The operator OP determines what type of comparison to do, and can be one # of: # # eq - equal (test A == B) # ne - not equal (test A != B) # le - less than or equal (test A <= B) # ge - greater than or equal (test A >= B) # lt - less than (test A < B) # gt - greater than (test A > B) # # Additionally, the eq and ne operator can have a number after it to limit # the test to that number of minor versions. # # eq0 - equal up to the length of the shorter version # ne0 - not equal up to the length of the shorter version # eqN - equal up to N sub-version levels # neN - not equal up to N sub-version levels # # When the condition is true, shell commands ACTION-IF-TRUE are run, # otherwise shell commands ACTION-IF-FALSE are run. The environment # variable 'ax_compare_version' is always set to either 'true' or 'false' # as well. # # Examples: # # AX_COMPARE_VERSION([3.15.7],[lt],[3.15.8]) # AX_COMPARE_VERSION([3.15],[lt],[3.15.8]) # # would both be true. # # AX_COMPARE_VERSION([3.15.7],[eq],[3.15.8]) # AX_COMPARE_VERSION([3.15],[gt],[3.15.8]) # # would both be false. # # AX_COMPARE_VERSION([3.15.7],[eq2],[3.15.8]) # # would be true because it is only comparing two minor versions. # # AX_COMPARE_VERSION([3.15.7],[eq0],[3.15]) # # would be true because it is only comparing the lesser number of minor # versions of the two values. # # Note: The characters that separate the version numbers do not matter. An # empty string is the same as version 0. OP is evaluated by autoconf, not # configure, so must be a string, not a variable. # # The author would like to acknowledge Guido Draheim whose advice about # the m4_case and m4_ifvaln functions make this macro only include the # portions necessary to perform the specific comparison specified by the # OP argument in the final configure script. # # LICENSE # # Copyright (c) 2008 Tim Toolan # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 11 dnl ######################################################################### AC_DEFUN([AX_COMPARE_VERSION], [ AC_REQUIRE([AC_PROG_AWK]) # Used to indicate true or false condition ax_compare_version=false # Convert the two version strings to be compared into a format that # allows a simple string comparison. The end result is that a version # string of the form 1.12.5-r617 will be converted to the form # 0001001200050617. In other words, each number is zero padded to four # digits, and non digits are removed. AS_VAR_PUSHDEF([A],[ax_compare_version_A]) A=`echo "$1" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \ -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \ -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \ -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \ -e 's/[[^0-9]]//g'` AS_VAR_PUSHDEF([B],[ax_compare_version_B]) B=`echo "$3" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \ -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \ -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \ -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \ -e 's/[[^0-9]]//g'` dnl # In the case of le, ge, lt, and gt, the strings are sorted as necessary dnl # then the first line is used to determine if the condition is true. dnl # The sed right after the echo is to remove any indented white space. m4_case(m4_tolower($2), [lt],[ ax_compare_version=`echo "x$A x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/false/;s/x${B}/true/;1q"` ], [gt],[ ax_compare_version=`echo "x$A x$B" | sed 's/^ *//' | sort | sed "s/x${A}/false/;s/x${B}/true/;1q"` ], [le],[ ax_compare_version=`echo "x$A x$B" | sed 's/^ *//' | sort | sed "s/x${A}/true/;s/x${B}/false/;1q"` ], [ge],[ ax_compare_version=`echo "x$A x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/true/;s/x${B}/false/;1q"` ],[ dnl Split the operator from the subversion count if present. m4_bmatch(m4_substr($2,2), [0],[ # A count of zero means use the length of the shorter version. # Determine the number of characters in A and B. ax_compare_version_len_A=`echo "$A" | $AWK '{print(length)}'` ax_compare_version_len_B=`echo "$B" | $AWK '{print(length)}'` # Set A to no more than B's length and B to no more than A's length. A=`echo "$A" | sed "s/\(.\{$ax_compare_version_len_B\}\).*/\1/"` B=`echo "$B" | sed "s/\(.\{$ax_compare_version_len_A\}\).*/\1/"` ], [[0-9]+],[ # A count greater than zero means use only that many subversions A=`echo "$A" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"` B=`echo "$B" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"` ], [.+],[ AC_WARNING( [illegal OP numeric parameter: $2]) ],[]) # Pad zeros at end of numbers to make same length. ax_compare_version_tmp_A="$A`echo $B | sed 's/./0/g'`" B="$B`echo $A | sed 's/./0/g'`" A="$ax_compare_version_tmp_A" # Check for equality or inequality as necessary. m4_case(m4_tolower(m4_substr($2,0,2)), [eq],[ test "x$A" = "x$B" && ax_compare_version=true ], [ne],[ test "x$A" != "x$B" && ax_compare_version=true ],[ AC_WARNING([illegal OP parameter: $2]) ]) ]) AS_VAR_POPDEF([A])dnl AS_VAR_POPDEF([B])dnl dnl # Execute ACTION-IF-TRUE / ACTION-IF-FALSE. if test "$ax_compare_version" = "true" ; then m4_ifvaln([$4],[$4],[:])dnl m4_ifvaln([$5],[else $5])dnl fi ]) dnl AX_COMPARE_VERSION tmpk8ny_4pz/m4/ax_prog_bison_version.m40000644000175000017500000000403313546075722020340 0ustar carstencarsten# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_prog_bison_version.html # =========================================================================== # # SYNOPSIS # # AX_PROG_BISON_VERSION([VERSION],[ACTION-IF-TRUE],[ACTION-IF-FALSE]) # # DESCRIPTION # # Makes sure that bison version is greater or equal to the version # indicated. If true the shell commands in ACTION-IF-TRUE are executed. If # not the shell commands in commands in ACTION-IF-TRUE are executed. If # not the shell commands in ACTION-IF-FALSE are run. Note if $BISON is not # set (for example by running AC_CHECK_PROG or AC_PATH_PROG) the macro # will fail. # # Example: # # AC_PATH_PROG([BISON],[bison]) # AX_PROG_BISON_VERSION([3.0.2],[ ... ],[ ... ]) # # This will check to make sure that the bison you have is at least version # 3.0.2 or greater. # # NOTE: This macro uses the $BISON variable to perform the check. # # LICENSE # # Copyright (c) 2015 Jonathan Rajotte-Julien # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 2 AC_DEFUN([AX_PROG_BISON_VERSION],[ AC_REQUIRE([AC_PROG_SED]) AC_REQUIRE([AC_PROG_GREP]) AS_IF([test -n "$BISON"],[ ax_bison_version="$1" AC_MSG_CHECKING([for bison version]) changequote(<<,>>) bison_version=`$BISON --version 2>&1 \ | $SED -n -e '/bison (GNU Bison)/b inspect b : inspect s/.* (\{0,1\}\([0-9]*\.[0-9]*\.[0-9]*\))\{0,1\}.*/\1/;p'` changequote([,]) AC_MSG_RESULT($bison_version) AC_SUBST([BISON_VERSION],[$bison_version]) AX_COMPARE_VERSION([$bison_version],[ge],[$ax_bison_version],[ : $2 ],[ : $3 ]) ],[ AC_MSG_WARN([could not find bison]) $3 ]) ]) tmpk8ny_4pz/build-for-mac-os.sh0000755000175000017500000000167713546075722016572 0ustar carstencarsten#!/bin/sh # MacOS build script for NGSPICE # Considering a MacOS 10.12 system, there are some prerequisites to be satisfied: # 1) Install an X11 system of your choice. XQuartz from SourceForge is fine: https://www.xquartz.org # 2) Install automake, autoconf, libtool and an updated version of bison by using the method you prefer. # From sources, from 'brew' or from 'MacPorts' are the known ones and I prefer using MacPorts, # available at this address: https://www.macports.org . # You can install from a tarball or you can use the installer, which will also configure the PATH. # # Said that, the script is quite linear and simple. # Build ./autogen.sh ./configure \ --enable-xspice \ --enable-cider \ --enable-pss \ --disable-debug \ --prefix=/Applications/ngspice make make DESTDIR="$(pwd)/root-tree" install # Package pkgbuild \ --root "$(pwd)/root-tree" \ --identifier ngspice.pkg \ --install-location / \ ngspice.pkg tmpk8ny_4pz/README-old.adms0000644000175000017500000005144213546075722015545 0ustar carstencarsten*************************************************************************** * DISCLAIMER * * * * The admst code generators, part of adms and this document are released * * under LGPL license terms. * * * * Copyright (C) 2006 Freescale Inc. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * * 02110-1301 USA * *************************************************************************** WARNING! The text in this document has been prepared in 2006 and is outdated. It is provided here only for reference and may provide some (historical) information. Please refer to the ngspice adms web page at http://ngspice.sourceforge.net/admshowto.html for actual information on how to integrate Verilog A device models into ngspice. Holger Vogt, May 2013 INTRODUCTION In this document we will provide a guideline on how to auto-generate the ready-to compile C code for the ngspice API of a compact device model defined in the Verilog-AMS language. Condition: To compile Verilog-AMS compact models into ngspice-ready C models with admsXml a copy of the latest adms distribution is needed. You get it from the adms Download page http://mot-adms.sourceforge.net as a source code package. (Also use of cvs version is possible, but needs some more effort.) Version: This guideline has been tested on Windows-XP under cygwin using: $ admsXml -v [usage] [info] elapsed time: 0 [info] admst iterations: 0 (0 freed) Goal: In this guideline we will add device model hicum0 to ngspice using the Verilog-AMS source code available at: http://www.iee.et.tu-dresden.de/~schroter/Hicum_PD/Hicumna/hicumL0V1p11.va Limitations: The adms ngspice interface supports a limited set of Verilog-AMS language constructs. See the home page of adms (http://mot-adms.sourceforge.net/) for more info. Feel free to contribute to the adms ngspice interface so that more constructs can be supported. 01- ngspice Files Ngspice does not (yet) have support for loading models at run time, every model must be included at compile time. Then, adding a new model into ngspice is a process that cannot be completely automated. Some files need to be edited by hand. 01.01 What ngspice need to know of a new model ? First you have to assign your new model a "device type". As you probably know, ngspice recognizes the type of a device by the first letter in device's name in the netlists ("r" for resistors, "q" for BJT, "m" for mosfets and so on). Then the first thing you have to find is the correct type for your new device (let's call this device_type). Since there can be more than one model for each device type, another parameter you have to set is the device_level, which must be unique for each device type. Once you have found the (device_type, device_level) couple you have identified the files you have to edit: /configure.ac Here you have to add the entries in adms section for your new directory and library. /src/spicelib/parser/inp2.c Substitute with the letter corresponding to the type of you new model. Here you have to add the interface code for your new device. In the case of hicum (a BJT model and thus a "q" device type) you have to edit inp2q.c /src/spicelib/parser/inpdomod.c Here you have to add a switch for the level of your new device. /src/spicelib/devices/dev.c Follow the structure of the files and add information on your new model. In dev.c you have to adjust some macro. See existing examples to make the modifications for your own implementation. is the path to the ngspice source installation. For instance can be /tools/ng-spice-rework-17 Please see appendix 01 about spice3-flavoured flags. 02- adms Files List of files that adms needs to create the ready-to-compile C code: /src/spicelib/devices/adms/admst/ngspice*.xml adms creates the ready-to-compile C code from a set of admst code generators. admst is a subset of the XML language which has been created specifically for the purpose of C code generation. The syntax of admst is very close to the XSLT language (it includes some extensions.) 03- Create the data file structure Create the following directories if they do not already exist: -a /src/spicelib/devices/adms/hicum0 -b /src/spicelib/devices/adms/hicum0/admsva There is no convention on the way to choice the last directory name in -a. However in -b 'admsva' is mandatory. 04- Save the Verilog-AMS source code Save the source code of hicum0 from http://www.iee.et.tu-dresden.de/~schroter/Hicum_PD/Hicumna/hicumL0V1p11.va to: /src/spicelib/devices/adms/hicum0/admsva/hic0_full.va NOTE: the name of the Verilog-AMS file that contains the 'module' declaration should match the name of the module in the file. For instance in file hic0_full.va you will find the following declaration: ... module hic0_full (c,b,e,s); ... 05- Create file 'Makefile.am' In directory ..../hicum0 run the following command in order to create file 'Makefile.am': $ admsXml admsva/hic0_full.va -Iadmsva -e ../admst/ngspiceMakefile.am.xml [info] admsXml-2.1.3 Feb 2 2006 19:01:39 [warning] [admsva\hic0_full.va:30]: standard vams file created (not found in -I path) ... 'constants.h' [warning] [admsva\hic0_full.va:31]: standard vams file created (not found in -I path) ... 'discipline.h' [info] Makefile.am: file created [info] elapsed time: 1.0624 [info] admst iterations: 185425 (185425 freed) After this step file 'Makefile.am' is created: $ head Makefile.am ## ## Interface: ## created by: admsXml-2.1.3 - Monday, 01/30/06 ## Process this file with automake to produce Makefile.in ADMSXMLINTERFACE:=../admst adms: admsXml.exe -Iadmsva admsva/hic0_full.va \ 06- Update/Create the auto-tools files (configure, Makefile.in, Makefile) 06.01 Manual changes In directory edit file configure.ac, add new device 'hicum0' (use the name of the directory - not the name of the module): $ grep hicum0 configure.ac src/spicelib/devices/adms/hicum0/Makefile \ In directory /src/spicelib/devices edit file Makefile.am, add new device 'hicum0': $ grep hicum0 Makefile.am adms/hicum0 \ adms/hicum0 \ 06.02 Makefile.in In directory run the shell command 'automake': File 'Makefile.in' is created in directory /src/spicelib/devices/hicum0. In directory /src/spicelib/devices/hicum0 you should have: $ ls Makefile.am Makefile.in admsva constants.h discipline.h 06.03 Update file 'configure' In directory run the shell command 'autoconf': File 'configure' is updated. Edit the file to make sure that "adms/hicum0/Makefile" is present in the file. 06.04 Makefile In directory run shell command 'configure': $ configure ... config.status: creating src/spicelib/devices/adms/hicum0/Makefile ... File 'Makefile' is created in directory /src/spicelib/devices/hicum0. In directory /src/spicelib/devices/hicum0 you should have: $ ls Makefile Makefile.am Makefile.in admsva constants.h discipline.h 07- Create the ready-to-compile auto-generated C code of device hicum0 In directory ..../hicum0 run the following command in order to create the auto-generated C code: $ make adms admsXml.exe -Iadmsva admsva/hic0_full.va \ -e ../admst/ngspiceVersion.xml \ -e ../admst/ngspiceMakefile.am.xml \ -e ../admst/ngspiceMODULEitf.h.xml \ -e ../admst/ngspiceMODULEinit.c.xml \ -e ../admst/ngspiceMODULEinit.h.xml \ -e ../admst/ngspiceMODULEext.h.xml \ -e ../admst/ngspiceMODULEdefs.h.xml \ -e ../admst/ngspiceMODULEask.c.xml \ -e ../admst/ngspiceMODULEmask.c.xml \ -e ../admst/ngspiceMODULEpar.c.xml \ -e ../admst/ngspiceMODULEmpar.c.xml \ -e ../admst/ngspiceMODULEload.c.xml \ -e ../admst/ngspiceMODULEacld.c.xml \ -e ../admst/ngspiceMODULEtemp.c.xml \ -e ../admst/ngspiceMODULEsetup.c.xml \ -e ../admst/ngspiceMODULEguesstopology.c.xml \ -e ../admst/ngspiceMODULE.c.xml [info] admsXml-2.1.3 Feb 2 2006 19:01:39 [info] Makefile.am: file created [info] hic0_fullitf.h: file created [info] hic0_fullinit.c: file created [info] hic0_fullinit.h: file created [info] hic0_fullext.h: file created [info] hic0_fulldefs.h: file created [info] hic0_fullask.c: file created [info] hic0_fullmask.c: file created [info] hic0_fullpar.c: file created [info] hic0_fullmpar.c: file created [info] noise contribution not implemented - ignored! [info] noise contribution not implemented - ignored! [info] noise contribution not implemented - ignored! [info] noise contribution not implemented - ignored! [info] noise contribution not implemented - ignored! [info] noise contribution not implemented - ignored! [info] hic0_fullload.c: file created [info] hic0_fullacld.c: file created [info] hic0_fulltemp.c: file created [info] hic0_fullsetup.c: file created [info] hic0_fullguesstopology.c: file created [info] hic0_full.c: file created [info] elapsed time: 5.43757 [info] admst iterations: 1099640 (1099640 freed) perl -p -i -e 's/IOP\("(\w+)"/IOP("\L\1"/' hic0_full.c In directory /src/spicelib/devices/hicum0 you should have: $ ls Makefile constants.h hic0_fullacld.c hic0_fullguesstopology.c hic0_fullload.c hic0_fullsetup.c Makefile.am discipline.h hic0_fullask.c hic0_fullinit.c hic0_fullmask.c hic0_fulltemp.c Makefile.in hic0_full.c hic0_fulldefs.h hic0_fullinit.h hic0_fullmpar.c admsva hic0_fullext.h hic0_fullitf.h hic0_fullpar.c 08- Compile the ready-to-compile auto-generated C code In directory ..../hicum0 run the following command in order to create the object files*.o and libhic0_full.a: $ make CFLAGS="-g" if gcc -DHAVE_CONFIG_H -I. -I. -I../../../../.. -I../../../../../src/include -g -MT hic0_full.o -MD -MP -MF ".ds/hic0_full.Tpo" -c -o hic0_full.o hic0_full.c; \ then mv -f ".deps/hic0_full.Tpo" ".deps/hic0_full.Po"; else rm -f ".deps/hic0_full.Tpo"; exit 1; fi ... ar cru libhic0_full.a hic0_full.o hic0_fullacld.o hic0_fullask.o hic0_fullguesstopology.o hic0_fullinit.o hic0_fullload.o hic0_fullmask.o hic0_fullmpar.o hic0_fullpar.o hic0_fullsetup.o hic0_fulltemp.o ranlib libhic0_full.a WARNING: at the compilation step some messages about '#warning conflict' will be printed. They mean that some ngspice reserved keywords have been used in the Verilog-AMS. Just ignore them in the case of hicum0. In directory /src/spicelib/devices/hicum0 you should have: $ ls Makefile hic0_full.c hic0_fullask.o hic0_fullinit.h hic0_fullmask.o hic0_fullsetup.o Makefile.am hic0_fulldefs.h hic0_fullinit.o hic0_fullmpar.c hic0_fulltemp.c Makefile.in hic0_full.o hic0_fullext.h hic0_fullitf.h hic0_fullmpar.o hic0_fulltemp.o admsva hic0_fullacld.c hic0_fullguesstopology.c hic0_fullload.c hic0_fullpar.c libhic0_full.a constants.h hic0_fullacld.o hic0_fullguesstopology.o hic0_fullload.o hic0_fullpar.o discipline.h hic0_fullask.c hic0_fullinit.c hic0_fullmask.c hic0_fullsetup.c NOTE: CFLAGS is redefined to "-g" is order to speed up the compilation process. It is better NOT to redefine CFLAGS for official releases. (the compilation will take a lot longer to complete) 09- Update manually the ngspice parser files Modify the following files: /src/spicelib/parser/inp2q.c ----> depends on the type of the device, here 'q' device /src/spicelib/parser/inpdomod.c /src/spicelib/devices/dev.c ... 10- Update executable 'ngspice' 10-01 Update ngspice In directory run shell command 'make': $ make File 'src/ngspice.exe' is updated and contains the new device 'hicum0'. 10-02 Install ngspice In directory run shell command 'make': $ make install ngspice executables are installed in /usr/local/bin. 11- Test the Implementation of hicum0 into ngspice 11-01 Create a simple ngspice netlist Create file 'hicum0.sp'. Its contents is given below: $ cat hicum0.sp .title Netlist .option + temp=25.0 + reltol=1e-5 + abstol=1e-15 .model mybjtmodel npn + npn=1 + level=5 qN1 + c b 0 0 + mybjtmodel rcc cc c 100.0 rbb bb b 1k vcc + cc 0 + 1.0 vbb + bb 0 + 0.0 + ac=0.0 .dc vbb 0.0 1.0 0.02 .print + dc + v(c) + i(vbb) + i(vcc) .end 11-02 run 'ngspice': $ ngspice -b hicum0.sp Circuit: .title Netlist Doing analysis at TEMP = 298.150000 and TNOM = 300.150000 No. of Data Rows : 51 .title Netlist DC transfer characteristic Mon Jan 30 10:22:01 2006 -------------------------------------------------------------------------------- Index v-sweep v(c) vbb#branch vcc#branch -------------------------------------------------------------------------------- 0 0.000000e+00 1.000000e+00 0.000000e+00 -7.105421e-17 1 2.000000e-02 1.000000e+00 -5.593842e-19 -1.265654e-16 2 4.000000e-02 1.000000e+00 -2.076336e-18 -2.775558e-16 3 6.000000e-02 1.000000e+00 -5.366258e-18 -6.061817e-16 4 8.000000e-02 1.000000e+00 -1.254873e-17 -1.320055e-15 5 1.000000e-01 1.000000e+00 -2.812744e-17 -2.874367e-15 6 1.200000e-01 1.000000e+00 -7.629085e-17 -7.666090e-15 7 1.400000e-01 1.000000e+00 -1.669761e-16 -1.669553e-14 8 1.600000e-01 1.000000e+00 -3.645759e-16 -3.636425e-14 9 1.800000e-01 1.000000e+00 -7.948513e-16 -7.920553e-14 10 2.000000e-01 1.000000e+00 -1.732082e-15 -1.725142e-13 11 2.200000e-01 1.000000e+00 -3.773484e-15 -3.757461e-13 12 2.400000e-01 1.000000e+00 -8.219658e-15 -8.183998e-13 13 2.600000e-01 1.000000e+00 -1.790375e-14 -1.782522e-12 14 2.800000e-01 1.000000e+00 -3.899630e-14 -3.882434e-12 15 3.000000e-01 1.000000e+00 -8.493698e-14 -8.456170e-12 16 3.200000e-01 1.000000e+00 -1.849987e-13 -1.841804e-11 17 3.400000e-01 1.000000e+00 -4.029389e-13 -4.011557e-11 18 3.600000e-01 1.000000e+00 -8.776254e-13 -8.737407e-11 19 3.800000e-01 1.000000e+00 -1.911521e-12 -1.903059e-10 20 4.000000e-01 1.000000e+00 -4.163405e-12 -4.144973e-10 21 4.200000e-01 9.999999e-01 -9.068141e-12 -9.027994e-10 22 4.400000e-01 9.999998e-01 -1.975094e-11 -1.966349e-09 23 4.600000e-01 9.999996e-01 -4.301867e-11 -4.282821e-09 24 4.800000e-01 9.999991e-01 -9.369701e-11 -9.328218e-09 25 5.000000e-01 9.999980e-01 -2.040767e-10 -2.031732e-08 26 5.200000e-01 9.999956e-01 -4.444870e-10 -4.425191e-08 27 5.400000e-01 9.999904e-01 -9.680991e-10 -9.638130e-08 28 5.600000e-01 9.999790e-01 -2.108483e-09 -2.099148e-07 29 5.800000e-01 9.999543e-01 -4.591957e-09 -4.571626e-07 30 6.000000e-01 9.999004e-01 -9.999448e-09 -9.955176e-07 31 6.200000e-01 9.997833e-01 -2.176941e-08 -2.167303e-06 32 6.400000e-01 9.995284e-01 -4.736784e-08 -4.715812e-06 33 6.600000e-01 9.989751e-01 -1.029470e-07 -1.024912e-05 34 6.800000e-01 9.977781e-01 -2.231776e-07 -2.221894e-05 35 7.000000e-01 9.952090e-01 -4.812339e-07 -4.791028e-05 36 7.200000e-01 9.897838e-01 -1.026165e-06 -1.021618e-04 37 7.400000e-01 9.786930e-01 -2.140206e-06 -2.130697e-04 38 7.600000e-01 9.573154e-01 -4.287705e-06 -4.268455e-04 39 7.800000e-01 9.197474e-01 -8.062749e-06 -8.025264e-04 40 8.000000e-01 8.611162e-01 -1.395965e-05 -1.388838e-03 41 8.200000e-01 7.801099e-01 -2.212604e-05 -2.198901e-03 42 8.400000e-01 6.791392e-01 -3.235919e-05 -3.208608e-03 43 8.600000e-01 5.627227e-01 -4.429334e-05 -4.372773e-03 44 8.800000e-01 4.367031e-01 -5.756142e-05 -5.632969e-03 45 9.000000e-01 3.111929e-01 -7.186079e-05 -6.888071e-03 46 9.200000e-01 2.120521e-01 -8.696058e-05 -7.879479e-03 47 9.400000e-01 1.637984e-01 -1.026891e-04 -8.362016e-03 48 9.600000e-01 1.443326e-01 -1.189191e-04 -8.556674e-03 49 9.800000e-01 1.353683e-01 -1.355550e-04 -8.646317e-03 50 1.000000e+00 1.312181e-01 -1.525242e-04 -8.687819e-03 Total elapsed time: 0.625 seconds. Current dynamic memory usage = 1.515520 MB, Dynamic memory limit = 1241.702400 MB. 12- How to update ngspice when the Verilog-AMS source code changes If you modify the Verilog-AMS source code of 'hicum0' just complete the following steps in order to update 'ngspice': 12-01 Update the auto-generated C code In directory ..../hicum0 run: - make clean - make adms - make 12-02 Update 'ngspice' and re-install In directory run: - make - make install Appendix 01: Comments on spice3-flavoured flags like npn, pnp, nmos, pmos and so on In the adms-based implementation of hicum0 the value of the device type flag (either npn or pnp) in the model card is just ignored. The selection of the type of the device is actually done using model parameters. In the Verilog-AMS code of hicum0 there are two special model parameters called 'npn' and 'pnp' which decide what the type of the device will be (either a npn bipolar model or pnp bipolar model). The Verilog-AMS piece of code that triggers the decision is as follows: if (`PGIVEN(npn)) HICUMtype = `NPN; else if (`PGIVEN(pnp)) HICUMtype = `PNP; else HICUMtype = `NPN; end `PGIVEN(npn) is a macro that returns 1 is model parameter 'npn' occurs in the .model card of the ngspice netlist. Otherwise it returns 0. For instance: 1- the following model card will select a NPN type device: .model mybjtmodel npn + npn=1 + level=5 2- the following model card will select a PNP type device: .model mybjtmodel npn + pnp=1 + level=5 In both cases flag 'npn' is just ignored. In section 'Update manually the ngspice parser files' it is recommended to use flag 'adms' instead. This limitation results from the LRM of VerilogAMS that does not support flags. tmpk8ny_4pz/README.shared-xspice0000644000175000017500000000271413546075722016602 0ustar carstencarstenEnabling XSPICE data transfer over the shared ngspice api. This branch enhances shared ngspice capability to event driven XSPICE data transfer. The shared library (dll) exports three new function: ngSpice_Init_Evt() provides addresses for two new callback functions. To be called upon initialization. ngGet_Evt_NodeInfo() provides info for a specific node. ngSpice_AllEvtNodes() provides a list of all event nodes. There are two new callback functions sendinitevt() sends info upon the event nodes: name, type an dcorresponding index and is calles once per event nodes upon initialization of the circuit. sendevt() is called each time, when for a given event node, that is determined by index, a time step has been accepted and its value has changed. This allows to immediately make use of that value in the calling process. For details on the definitions you may have a look at sharedspice.h. There is an example caller file (currently tested only under Windows, and compiled with Visual Studio) in directory ngspice\visualc\ng_shared_xspice_v. There is also a new feature: The 'save' command accepts the flag none of run in shared mode. Then there is no internal storage of analog output data, they are still available with the callback function ng_data. The above mentioned example file now includes a testrun2 to demonstrate this feature. The already existing fcn ngGet_Vec_Info(evtnode) will return an analog vector derived from event node evtnode containing 1 and 0. tmpk8ny_4pz/.gitignore0000644000175000017500000000202013546075722015142 0ustar carstencarsten# NOTE! Please use 'git ls-files -i --exclude-standard' # command after changing this file, to see if there are # any tracked files which get ignored after the change. # # (compile "git ls-files -i --exclude-standard") Makefile Makefile.in .deps *.o *.lo *.la .libs *.orig *~ \#*# /autom4te.cache /compile /config.guess /config.log /config.status /config.sub /configure /depcomp /install-sh /libtool /ltmain.sh /aclocal.m4 /m4/libtool.m4 /m4/ltoptions.m4 /m4/ltsugar.m4 /m4/ltversion.m4 /m4/lt~obsolete.m4 /missing /ylwrap /ar-lib /src/include/ngspice/config.h.in /src/include/ngspice/config.h /src/include/ngspice/stamp-h1 /src/maths/cmaths/test_cx_cph /src/maths/cmaths/test_cx_j /src/maths/cmaths/test_cx_mag /src/maths/cmaths/test_cx_ph /src/ngmakeidx /src/ngmultidec /src/ngnutmeg /src/ngproc2mod /src/ngsconvert /src/ngspice /src/ngspice.idx /src/spinit !/xgraph/Makefile.in /release* /debug* /visualc-tcl* # Swap files for Vim **/*.swp **/*.swo # Patches **/*.patch # Visual Studio user options files **/*.vcxproj.user